summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:30:02 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2016-05-01 15:30:02 -0400
commit1de335ad3f395ca6861085393ba366a9e3fb4a0d (patch)
treef1fdd326034e05177596851be6a7127615d81498
parent9c75fa8ff6d4d38ef552c00fef5969fb154765e8 (diff)
parentf6d65e533c62f6deb21342d4901ece24497b433e (diff)
Merge commit 'f6d65'
# Conflicts: # skins/ArchLinux/ArchLinux.php
-rw-r--r--CREDITS41
-rw-r--r--Gemfile.lock98
-rw-r--r--Gruntfile.js1
-rw-r--r--HISTORY895
-rw-r--r--INSTALL5
-rw-r--r--README18
-rw-r--r--README.mediawiki.rej37
-rw-r--r--RELEASE-NOTES-1.24833
-rw-r--r--RELEASE-NOTES-1.25581
-rw-r--r--StartProfiler.sample46
-rw-r--r--api.php36
-rw-r--r--api.php52
-rw-r--r--autoload.php1368
-rw-r--r--composer.json49
-rw-r--r--composer.lock395
-rw-r--r--docs/contenthandler.txt1
-rw-r--r--docs/database.txt5
-rw-r--r--docs/export-0.10.xsd294
-rw-r--r--docs/export-demo.xml20
-rw-r--r--docs/extension.schema.json637
-rw-r--r--docs/hooks.txt364
-rw-r--r--docs/kss/Makefile4
-rw-r--r--docs/kss/README.txt2
-rw-r--r--docs/kss/styleGuideModules.txt10
-rw-r--r--docs/kss/styleguide-template/public/less.js9
-rw-r--r--docs/logger.txt71
-rw-r--r--docs/memcached.txt16
-rw-r--r--docs/scripts.txt2
-rw-r--r--docs/sitelist-1.0.xsd68
-rw-r--r--docs/sitelist.txt47
-rw-r--r--docs/sitescache.txt42
-rw-r--r--docs/skin.txt48
-rw-r--r--docs/uidesign/mediawiki.action.history.diff.html106
-rw-r--r--extensions/Cite/Cite.i18n.php35
-rw-r--r--extensions/Cite/Cite.php97
-rw-r--r--extensions/Cite/Cite_body.php108
-rw-r--r--extensions/Cite/Gruntfile.js19
-rw-r--r--extensions/Cite/SpecialCite.alias.php430
-rw-r--r--extensions/Cite/SpecialCite.i18n.php35
-rw-r--r--extensions/Cite/SpecialCite.php92
-rw-r--r--extensions/Cite/SpecialCite_body.php186
-rw-r--r--extensions/Cite/citeParserTests.txt2
-rw-r--r--extensions/Cite/extension.json52
-rw-r--r--extensions/Cite/i18n/af.json (renamed from extensions/Cite/i18n/core/af.json)0
-rw-r--r--extensions/Cite/i18n/an.json25
-rw-r--r--extensions/Cite/i18n/ar.json33
-rw-r--r--extensions/Cite/i18n/arc.json (renamed from extensions/Cite/i18n/core/arc.json)0
-rw-r--r--extensions/Cite/i18n/arq.json8
-rw-r--r--extensions/Cite/i18n/arz.json22
-rw-r--r--extensions/Cite/i18n/as.json27
-rw-r--r--extensions/Cite/i18n/ast.json28
-rw-r--r--extensions/Cite/i18n/az.json (renamed from extensions/Cite/i18n/core/az.json)0
-rw-r--r--extensions/Cite/i18n/azb.json (renamed from extensions/Cite/i18n/core/azb.json)0
-rw-r--r--extensions/Cite/i18n/ba.json25
-rw-r--r--extensions/Cite/i18n/bcc.json (renamed from extensions/Cite/i18n/core/bcc.json)0
-rw-r--r--extensions/Cite/i18n/bcl.json27
-rw-r--r--extensions/Cite/i18n/be-tarask.json30
-rw-r--r--extensions/Cite/i18n/bg.json21
-rw-r--r--extensions/Cite/i18n/bgn.json8
-rw-r--r--extensions/Cite/i18n/bn.json24
-rw-r--r--extensions/Cite/i18n/br.json28
-rw-r--r--extensions/Cite/i18n/bs.json (renamed from extensions/Cite/i18n/core/bs.json)0
-rw-r--r--extensions/Cite/i18n/bto.json (renamed from extensions/Cite/i18n/core/bto.json)0
-rw-r--r--extensions/Cite/i18n/ca.json28
-rw-r--r--extensions/Cite/i18n/ce.json28
-rw-r--r--extensions/Cite/i18n/core/an.json26
-rw-r--r--extensions/Cite/i18n/core/ar.json34
-rw-r--r--extensions/Cite/i18n/core/arz.json23
-rw-r--r--extensions/Cite/i18n/core/as.json28
-rw-r--r--extensions/Cite/i18n/core/ast.json29
-rw-r--r--extensions/Cite/i18n/core/ba.json26
-rw-r--r--extensions/Cite/i18n/core/bcl.json28
-rw-r--r--extensions/Cite/i18n/core/be-tarask.json31
-rw-r--r--extensions/Cite/i18n/core/bg.json22
-rw-r--r--extensions/Cite/i18n/core/bn.json25
-rw-r--r--extensions/Cite/i18n/core/br.json29
-rw-r--r--extensions/Cite/i18n/core/ca.json29
-rw-r--r--extensions/Cite/i18n/core/ce.json14
-rw-r--r--extensions/Cite/i18n/core/cs.json33
-rw-r--r--extensions/Cite/i18n/core/cy.json29
-rw-r--r--extensions/Cite/i18n/core/da.json32
-rw-r--r--extensions/Cite/i18n/core/de.json34
-rw-r--r--extensions/Cite/i18n/core/diq.json41
-rw-r--r--extensions/Cite/i18n/core/dsb.json28
-rw-r--r--extensions/Cite/i18n/core/el.json31
-rw-r--r--extensions/Cite/i18n/core/en.json40
-rw-r--r--extensions/Cite/i18n/core/eo.json28
-rw-r--r--extensions/Cite/i18n/core/es.json44
-rw-r--r--extensions/Cite/i18n/core/et.json28
-rw-r--r--extensions/Cite/i18n/core/fa.json34
-rw-r--r--extensions/Cite/i18n/core/fi.json33
-rw-r--r--extensions/Cite/i18n/core/fo.json10
-rw-r--r--extensions/Cite/i18n/core/frp.json28
-rw-r--r--extensions/Cite/i18n/core/gl.json30
-rw-r--r--extensions/Cite/i18n/core/gsw.json27
-rw-r--r--extensions/Cite/i18n/core/gu.json30
-rw-r--r--extensions/Cite/i18n/core/he.json31
-rw-r--r--extensions/Cite/i18n/core/hi.json32
-rw-r--r--extensions/Cite/i18n/core/hr.json29
-rw-r--r--extensions/Cite/i18n/core/hsb.json28
-rw-r--r--extensions/Cite/i18n/core/hu.json29
-rw-r--r--extensions/Cite/i18n/core/ia.json28
-rw-r--r--extensions/Cite/i18n/core/id.json31
-rw-r--r--extensions/Cite/i18n/core/ilo.json28
-rw-r--r--extensions/Cite/i18n/core/is.json22
-rw-r--r--extensions/Cite/i18n/core/it.json34
-rw-r--r--extensions/Cite/i18n/core/ja.json32
-rw-r--r--extensions/Cite/i18n/core/jv.json42
-rw-r--r--extensions/Cite/i18n/core/ka.json36
-rw-r--r--extensions/Cite/i18n/core/kk-cyrl.json26
-rw-r--r--extensions/Cite/i18n/core/ko.json33
-rw-r--r--extensions/Cite/i18n/core/ksh.json33
-rw-r--r--extensions/Cite/i18n/core/kw.json10
-rw-r--r--extensions/Cite/i18n/core/lb.json27
-rw-r--r--extensions/Cite/i18n/core/li.json27
-rw-r--r--extensions/Cite/i18n/core/lrc.json12
-rw-r--r--extensions/Cite/i18n/core/lt.json19
-rw-r--r--extensions/Cite/i18n/core/lv.json12
-rw-r--r--extensions/Cite/i18n/core/min.json36
-rw-r--r--extensions/Cite/i18n/core/mk.json30
-rw-r--r--extensions/Cite/i18n/core/ml.json31
-rw-r--r--extensions/Cite/i18n/core/mr.json32
-rw-r--r--extensions/Cite/i18n/core/mt.json24
-rw-r--r--extensions/Cite/i18n/core/nb.json29
-rw-r--r--extensions/Cite/i18n/core/nds.json20
-rw-r--r--extensions/Cite/i18n/core/nl.json31
-rw-r--r--extensions/Cite/i18n/core/nn.json22
-rw-r--r--extensions/Cite/i18n/core/oc.json27
-rw-r--r--extensions/Cite/i18n/core/or.json28
-rw-r--r--extensions/Cite/i18n/core/pl.json32
-rw-r--r--extensions/Cite/i18n/core/pms.json29
-rw-r--r--extensions/Cite/i18n/core/pnb.json26
-rw-r--r--extensions/Cite/i18n/core/ps.json8
-rw-r--r--extensions/Cite/i18n/core/pt-br.json31
-rw-r--r--extensions/Cite/i18n/core/pt.json35
-rw-r--r--extensions/Cite/i18n/core/qqq.json53
-rw-r--r--extensions/Cite/i18n/core/qu.json22
-rw-r--r--extensions/Cite/i18n/core/ro.json27
-rw-r--r--extensions/Cite/i18n/core/roa-tara.json28
-rw-r--r--extensions/Cite/i18n/core/ru.json45
-rw-r--r--extensions/Cite/i18n/core/rue.json26
-rw-r--r--extensions/Cite/i18n/core/sa.json26
-rw-r--r--extensions/Cite/i18n/core/sah.json26
-rw-r--r--extensions/Cite/i18n/core/scn.json33
-rw-r--r--extensions/Cite/i18n/core/si.json30
-rw-r--r--extensions/Cite/i18n/core/sk.json26
-rw-r--r--extensions/Cite/i18n/core/sl.json31
-rw-r--r--extensions/Cite/i18n/core/sq.json27
-rw-r--r--extensions/Cite/i18n/core/sr-ec.json33
-rw-r--r--extensions/Cite/i18n/core/sr-el.json31
-rw-r--r--extensions/Cite/i18n/core/stq.json25
-rw-r--r--extensions/Cite/i18n/core/ta.json13
-rw-r--r--extensions/Cite/i18n/core/tk.json22
-rw-r--r--extensions/Cite/i18n/core/tl.json38
-rw-r--r--extensions/Cite/i18n/core/tr.json31
-rw-r--r--extensions/Cite/i18n/core/uk.json45
-rw-r--r--extensions/Cite/i18n/core/vec.json26
-rw-r--r--extensions/Cite/i18n/core/vi.json30
-rw-r--r--extensions/Cite/i18n/core/zh-hans.json37
-rw-r--r--extensions/Cite/i18n/cs.json32
-rw-r--r--extensions/Cite/i18n/cu.json (renamed from extensions/Cite/i18n/core/cu.json)0
-rw-r--r--extensions/Cite/i18n/cy.json28
-rw-r--r--extensions/Cite/i18n/da.json31
-rw-r--r--extensions/Cite/i18n/de-ch.json (renamed from extensions/Cite/i18n/core/de-ch.json)0
-rw-r--r--extensions/Cite/i18n/de-formal.json (renamed from extensions/Cite/i18n/core/de-formal.json)0
-rw-r--r--extensions/Cite/i18n/de.json33
-rw-r--r--extensions/Cite/i18n/diq.json40
-rw-r--r--extensions/Cite/i18n/dsb.json27
-rw-r--r--extensions/Cite/i18n/el.json31
-rw-r--r--extensions/Cite/i18n/en.json52
-rw-r--r--extensions/Cite/i18n/eo.json30
-rw-r--r--extensions/Cite/i18n/es.json43
-rw-r--r--extensions/Cite/i18n/et.json27
-rw-r--r--extensions/Cite/i18n/eu.json (renamed from extensions/Cite/i18n/core/eu.json)0
-rw-r--r--extensions/Cite/i18n/fa.json33
-rw-r--r--extensions/Cite/i18n/fi.json32
-rw-r--r--extensions/Cite/i18n/fo.json9
-rw-r--r--extensions/Cite/i18n/fr.json (renamed from extensions/Cite/i18n/core/fr.json)0
-rw-r--r--extensions/Cite/i18n/frp.json27
-rw-r--r--extensions/Cite/i18n/frr.json8
-rw-r--r--extensions/Cite/i18n/fur.json (renamed from extensions/Cite/i18n/core/fur.json)0
-rw-r--r--extensions/Cite/i18n/fy.json8
-rw-r--r--extensions/Cite/i18n/gag.json (renamed from extensions/Cite/i18n/core/gag.json)0
-rw-r--r--extensions/Cite/i18n/gl.json29
-rw-r--r--extensions/Cite/i18n/gom-deva.json8
-rw-r--r--extensions/Cite/i18n/grc.json (renamed from extensions/Cite/i18n/core/grc.json)0
-rw-r--r--extensions/Cite/i18n/gsw.json26
-rw-r--r--extensions/Cite/i18n/gu.json29
-rw-r--r--extensions/Cite/i18n/he.json30
-rw-r--r--extensions/Cite/i18n/hi.json31
-rw-r--r--extensions/Cite/i18n/hr.json29
-rw-r--r--extensions/Cite/i18n/hsb.json27
-rw-r--r--extensions/Cite/i18n/ht.json (renamed from extensions/Cite/i18n/core/ht.json)0
-rw-r--r--extensions/Cite/i18n/hu.json28
-rw-r--r--extensions/Cite/i18n/hy.json8
-rw-r--r--extensions/Cite/i18n/ia.json27
-rw-r--r--extensions/Cite/i18n/id.json30
-rw-r--r--extensions/Cite/i18n/ig.json (renamed from extensions/Cite/i18n/core/ig.json)0
-rw-r--r--extensions/Cite/i18n/ilo.json27
-rw-r--r--extensions/Cite/i18n/io.json (renamed from extensions/Cite/i18n/core/io.json)0
-rw-r--r--extensions/Cite/i18n/is.json25
-rw-r--r--extensions/Cite/i18n/it.json33
-rw-r--r--extensions/Cite/i18n/ja.json31
-rw-r--r--extensions/Cite/i18n/jut.json (renamed from extensions/Cite/i18n/core/jut.json)0
-rw-r--r--extensions/Cite/i18n/jv.json41
-rw-r--r--extensions/Cite/i18n/ka.json35
-rw-r--r--extensions/Cite/i18n/kk-arab.json (renamed from extensions/Cite/i18n/core/kk-arab.json)0
-rw-r--r--extensions/Cite/i18n/kk-cyrl.json25
-rw-r--r--extensions/Cite/i18n/kk-latn.json (renamed from extensions/Cite/i18n/core/kk-latn.json)0
-rw-r--r--extensions/Cite/i18n/km.json (renamed from extensions/Cite/i18n/core/km.json)0
-rw-r--r--extensions/Cite/i18n/ko.json32
-rw-r--r--extensions/Cite/i18n/krc.json (renamed from extensions/Cite/i18n/core/krc.json)0
-rw-r--r--extensions/Cite/i18n/ksh.json32
-rw-r--r--extensions/Cite/i18n/kw.json9
-rw-r--r--extensions/Cite/i18n/lb.json26
-rw-r--r--extensions/Cite/i18n/lez.json8
-rw-r--r--extensions/Cite/i18n/li.json26
-rw-r--r--extensions/Cite/i18n/lrc.json20
-rw-r--r--extensions/Cite/i18n/lt.json18
-rw-r--r--extensions/Cite/i18n/lv.json11
-rw-r--r--extensions/Cite/i18n/mai.json8
-rw-r--r--extensions/Cite/i18n/mg.json (renamed from extensions/Cite/i18n/core/mg.json)0
-rw-r--r--extensions/Cite/i18n/min.json35
-rw-r--r--extensions/Cite/i18n/mk.json29
-rw-r--r--extensions/Cite/i18n/ml.json30
-rw-r--r--extensions/Cite/i18n/mn.json (renamed from extensions/Cite/i18n/core/mn.json)0
-rw-r--r--extensions/Cite/i18n/mr.json31
-rw-r--r--extensions/Cite/i18n/ms.json (renamed from extensions/Cite/i18n/core/ms.json)0
-rw-r--r--extensions/Cite/i18n/mt.json23
-rw-r--r--extensions/Cite/i18n/nap.json27
-rw-r--r--extensions/Cite/i18n/nb.json31
-rw-r--r--extensions/Cite/i18n/nds-nl.json (renamed from extensions/Cite/i18n/core/nds-nl.json)0
-rw-r--r--extensions/Cite/i18n/nds.json19
-rw-r--r--extensions/Cite/i18n/ne.json8
-rw-r--r--extensions/Cite/i18n/nl.json30
-rw-r--r--extensions/Cite/i18n/nn.json21
-rw-r--r--extensions/Cite/i18n/oc.json26
-rw-r--r--extensions/Cite/i18n/or.json27
-rw-r--r--extensions/Cite/i18n/pa.json8
-rw-r--r--extensions/Cite/i18n/pag.json (renamed from extensions/Cite/i18n/core/pag.json)0
-rw-r--r--extensions/Cite/i18n/pfl.json8
-rw-r--r--extensions/Cite/i18n/pl.json31
-rw-r--r--extensions/Cite/i18n/pms.json28
-rw-r--r--extensions/Cite/i18n/pnb.json25
-rw-r--r--extensions/Cite/i18n/ps.json8
-rw-r--r--extensions/Cite/i18n/pt-br.json30
-rw-r--r--extensions/Cite/i18n/pt.json34
-rw-r--r--extensions/Cite/i18n/qqq.json53
-rw-r--r--extensions/Cite/i18n/qu.json21
-rw-r--r--extensions/Cite/i18n/ro.json31
-rw-r--r--extensions/Cite/i18n/roa-tara.json27
-rw-r--r--extensions/Cite/i18n/ru.json44
-rw-r--r--extensions/Cite/i18n/rue.json25
-rw-r--r--extensions/Cite/i18n/sa.json25
-rw-r--r--extensions/Cite/i18n/sah.json25
-rw-r--r--extensions/Cite/i18n/scn.json32
-rw-r--r--extensions/Cite/i18n/sh.json (renamed from extensions/Cite/i18n/core/sh.json)0
-rw-r--r--extensions/Cite/i18n/si.json29
-rw-r--r--extensions/Cite/i18n/sk.json25
-rw-r--r--extensions/Cite/i18n/sl.json30
-rw-r--r--extensions/Cite/i18n/special/ace.json8
-rw-r--r--extensions/Cite/i18n/special/af.json14
-rw-r--r--extensions/Cite/i18n/special/am.json12
-rw-r--r--extensions/Cite/i18n/special/an.json13
-rw-r--r--extensions/Cite/i18n/special/ar.json15
-rw-r--r--extensions/Cite/i18n/special/arc.json13
-rw-r--r--extensions/Cite/i18n/special/arn.json14
-rw-r--r--extensions/Cite/i18n/special/arz.json14
-rw-r--r--extensions/Cite/i18n/special/as.json15
-rw-r--r--extensions/Cite/i18n/special/ast.json15
-rw-r--r--extensions/Cite/i18n/special/av.json8
-rw-r--r--extensions/Cite/i18n/special/az.json10
-rw-r--r--extensions/Cite/i18n/special/azb.json15
-rw-r--r--extensions/Cite/i18n/special/ba.json14
-rw-r--r--extensions/Cite/i18n/special/bar.json14
-rw-r--r--extensions/Cite/i18n/special/bcc.json12
-rw-r--r--extensions/Cite/i18n/special/bcl.json15
-rw-r--r--extensions/Cite/i18n/special/be-tarask.json15
-rw-r--r--extensions/Cite/i18n/special/be.json13
-rw-r--r--extensions/Cite/i18n/special/bg.json14
-rw-r--r--extensions/Cite/i18n/special/bn.json13
-rw-r--r--extensions/Cite/i18n/special/bo.json9
-rw-r--r--extensions/Cite/i18n/special/bpy.json5
-rw-r--r--extensions/Cite/i18n/special/br.json14
-rw-r--r--extensions/Cite/i18n/special/bs.json13
-rw-r--r--extensions/Cite/i18n/special/bto.json8
-rw-r--r--extensions/Cite/i18n/special/bxr.json8
-rw-r--r--extensions/Cite/i18n/special/ca.json17
-rw-r--r--extensions/Cite/i18n/special/cdo.json11
-rw-r--r--extensions/Cite/i18n/special/ce.json15
-rw-r--r--extensions/Cite/i18n/special/ceb.json8
-rw-r--r--extensions/Cite/i18n/special/ckb.json13
-rw-r--r--extensions/Cite/i18n/special/co.json6
-rw-r--r--extensions/Cite/i18n/special/cs.json17
-rw-r--r--extensions/Cite/i18n/special/cu.json9
-rw-r--r--extensions/Cite/i18n/special/cy.json14
-rw-r--r--extensions/Cite/i18n/special/da.json17
-rw-r--r--extensions/Cite/i18n/special/de.json15
-rw-r--r--extensions/Cite/i18n/special/diq.json16
-rw-r--r--extensions/Cite/i18n/special/dsb.json13
-rw-r--r--extensions/Cite/i18n/special/ee.json4
-rw-r--r--extensions/Cite/i18n/special/el.json17
-rw-r--r--extensions/Cite/i18n/special/en.json14
-rw-r--r--extensions/Cite/i18n/special/eo.json16
-rw-r--r--extensions/Cite/i18n/special/es.json19
-rw-r--r--extensions/Cite/i18n/special/et.json15
-rw-r--r--extensions/Cite/i18n/special/eu.json15
-rw-r--r--extensions/Cite/i18n/special/ext.json11
-rw-r--r--extensions/Cite/i18n/special/fa.json17
-rw-r--r--extensions/Cite/i18n/special/fi.json17
-rw-r--r--extensions/Cite/i18n/special/fj.json4
-rw-r--r--extensions/Cite/i18n/special/fo.json12
-rw-r--r--extensions/Cite/i18n/special/fr.json18
-rw-r--r--extensions/Cite/i18n/special/frp.json13
-rw-r--r--extensions/Cite/i18n/special/frr.json14
-rw-r--r--extensions/Cite/i18n/special/fur.json12
-rw-r--r--extensions/Cite/i18n/special/fy.json13
-rw-r--r--extensions/Cite/i18n/special/ga.json12
-rw-r--r--extensions/Cite/i18n/special/gd.json8
-rw-r--r--extensions/Cite/i18n/special/gl.json15
-rw-r--r--extensions/Cite/i18n/special/grc.json14
-rw-r--r--extensions/Cite/i18n/special/gsw.json16
-rw-r--r--extensions/Cite/i18n/special/gu.json15
-rw-r--r--extensions/Cite/i18n/special/gv.json12
-rw-r--r--extensions/Cite/i18n/special/ha.json4
-rw-r--r--extensions/Cite/i18n/special/haw.json10
-rw-r--r--extensions/Cite/i18n/special/he.json15
-rw-r--r--extensions/Cite/i18n/special/hi.json16
-rw-r--r--extensions/Cite/i18n/special/hif-latn.json8
-rw-r--r--extensions/Cite/i18n/special/hil.json8
-rw-r--r--extensions/Cite/i18n/special/hr.json15
-rw-r--r--extensions/Cite/i18n/special/hsb.json14
-rw-r--r--extensions/Cite/i18n/special/ht.json12
-rw-r--r--extensions/Cite/i18n/special/hu.json16
-rw-r--r--extensions/Cite/i18n/special/hy.json13
-rw-r--r--extensions/Cite/i18n/special/ia.json15
-rw-r--r--extensions/Cite/i18n/special/id.json16
-rw-r--r--extensions/Cite/i18n/special/ie.json8
-rw-r--r--extensions/Cite/i18n/special/ig.json13
-rw-r--r--extensions/Cite/i18n/special/ilo.json13
-rw-r--r--extensions/Cite/i18n/special/io.json12
-rw-r--r--extensions/Cite/i18n/special/is.json14
-rw-r--r--extensions/Cite/i18n/special/it.json16
-rw-r--r--extensions/Cite/i18n/special/ja.json19
-rw-r--r--extensions/Cite/i18n/special/jut.json11
-rw-r--r--extensions/Cite/i18n/special/jv.json15
-rw-r--r--extensions/Cite/i18n/special/ka.json17
-rw-r--r--extensions/Cite/i18n/special/kk-arab.json8
-rw-r--r--extensions/Cite/i18n/special/kk-cyrl.json13
-rw-r--r--extensions/Cite/i18n/special/kk-latn.json8
-rw-r--r--extensions/Cite/i18n/special/kl.json8
-rw-r--r--extensions/Cite/i18n/special/km.json14
-rw-r--r--extensions/Cite/i18n/special/kn.json11
-rw-r--r--extensions/Cite/i18n/special/ko.json17
-rw-r--r--extensions/Cite/i18n/special/krc.json10
-rw-r--r--extensions/Cite/i18n/special/krj.json8
-rw-r--r--extensions/Cite/i18n/special/ksh.json14
-rw-r--r--extensions/Cite/i18n/special/ku-latn.json11
-rw-r--r--extensions/Cite/i18n/special/kw.json14
-rw-r--r--extensions/Cite/i18n/special/la.json16
-rw-r--r--extensions/Cite/i18n/special/lad.json8
-rw-r--r--extensions/Cite/i18n/special/lb.json15
-rw-r--r--extensions/Cite/i18n/special/lez.json10
-rw-r--r--extensions/Cite/i18n/special/lfn.json8
-rw-r--r--extensions/Cite/i18n/special/lg.json12
-rw-r--r--extensions/Cite/i18n/special/li.json15
-rw-r--r--extensions/Cite/i18n/special/lmo.json9
-rw-r--r--extensions/Cite/i18n/special/lo.json6
-rw-r--r--extensions/Cite/i18n/special/lrc.json13
-rw-r--r--extensions/Cite/i18n/special/lt.json14
-rw-r--r--extensions/Cite/i18n/special/lus.json13
-rw-r--r--extensions/Cite/i18n/special/lv.json11
-rw-r--r--extensions/Cite/i18n/special/lzh.json5
-rw-r--r--extensions/Cite/i18n/special/mg.json8
-rw-r--r--extensions/Cite/i18n/special/mhr.json8
-rw-r--r--extensions/Cite/i18n/special/min.json14
-rw-r--r--extensions/Cite/i18n/special/mk.json16
-rw-r--r--extensions/Cite/i18n/special/ml.json15
-rw-r--r--extensions/Cite/i18n/special/mn.json12
-rw-r--r--extensions/Cite/i18n/special/mr.json15
-rw-r--r--extensions/Cite/i18n/special/mrj.json8
-rw-r--r--extensions/Cite/i18n/special/ms.json16
-rw-r--r--extensions/Cite/i18n/special/mt.json15
-rw-r--r--extensions/Cite/i18n/special/mwl.json8
-rw-r--r--extensions/Cite/i18n/special/myv.json9
-rw-r--r--extensions/Cite/i18n/special/nah.json12
-rw-r--r--extensions/Cite/i18n/special/nan.json7
-rw-r--r--extensions/Cite/i18n/special/nb.json14
-rw-r--r--extensions/Cite/i18n/special/nds-nl.json14
-rw-r--r--extensions/Cite/i18n/special/nds.json12
-rw-r--r--extensions/Cite/i18n/special/ne.json6
-rw-r--r--extensions/Cite/i18n/special/niu.json8
-rw-r--r--extensions/Cite/i18n/special/nl.json16
-rw-r--r--extensions/Cite/i18n/special/nn.json16
-rw-r--r--extensions/Cite/i18n/special/nov.json9
-rw-r--r--extensions/Cite/i18n/special/nso.json8
-rw-r--r--extensions/Cite/i18n/special/oc.json14
-rw-r--r--extensions/Cite/i18n/special/or.json15
-rw-r--r--extensions/Cite/i18n/special/os.json8
-rw-r--r--extensions/Cite/i18n/special/pag.json7
-rw-r--r--extensions/Cite/i18n/special/pam.json7
-rw-r--r--extensions/Cite/i18n/special/pcd.json8
-rw-r--r--extensions/Cite/i18n/special/pdc.json8
-rw-r--r--extensions/Cite/i18n/special/pfl.json11
-rw-r--r--extensions/Cite/i18n/special/pl.json14
-rw-r--r--extensions/Cite/i18n/special/pms.json16
-rw-r--r--extensions/Cite/i18n/special/pnb.json13
-rw-r--r--extensions/Cite/i18n/special/pnt.json8
-rw-r--r--extensions/Cite/i18n/special/ps.json13
-rw-r--r--extensions/Cite/i18n/special/pt-br.json14
-rw-r--r--extensions/Cite/i18n/special/pt.json17
-rw-r--r--extensions/Cite/i18n/special/qqq.json22
-rw-r--r--extensions/Cite/i18n/special/qu.json13
-rw-r--r--extensions/Cite/i18n/special/rm.json9
-rw-r--r--extensions/Cite/i18n/special/rmy.json10
-rw-r--r--extensions/Cite/i18n/special/ro.json20
-rw-r--r--extensions/Cite/i18n/special/roa-tara.json14
-rw-r--r--extensions/Cite/i18n/special/ru.json17
-rw-r--r--extensions/Cite/i18n/special/rue.json14
-rw-r--r--extensions/Cite/i18n/special/rup.json8
-rw-r--r--extensions/Cite/i18n/special/sa.json15
-rw-r--r--extensions/Cite/i18n/special/sah.json13
-rw-r--r--extensions/Cite/i18n/special/scn.json12
-rw-r--r--extensions/Cite/i18n/special/sd.json4
-rw-r--r--extensions/Cite/i18n/special/sgs.json9
-rw-r--r--extensions/Cite/i18n/special/sh.json11
-rw-r--r--extensions/Cite/i18n/special/si.json14
-rw-r--r--extensions/Cite/i18n/special/sk.json15
-rw-r--r--extensions/Cite/i18n/special/sl.json15
-rw-r--r--extensions/Cite/i18n/special/sma.json8
-rw-r--r--extensions/Cite/i18n/special/sn.json4
-rw-r--r--extensions/Cite/i18n/special/so.json14
-rw-r--r--extensions/Cite/i18n/special/sq.json14
-rw-r--r--extensions/Cite/i18n/special/sr-ec.json19
-rw-r--r--extensions/Cite/i18n/special/sr-el.json17
-rw-r--r--extensions/Cite/i18n/special/stq.json12
-rw-r--r--extensions/Cite/i18n/special/su.json13
-rw-r--r--extensions/Cite/i18n/special/sv.json17
-rw-r--r--extensions/Cite/i18n/special/sw.json13
-rw-r--r--extensions/Cite/i18n/special/sxu.json10
-rw-r--r--extensions/Cite/i18n/special/szl.json10
-rw-r--r--extensions/Cite/i18n/special/ta.json15
-rw-r--r--extensions/Cite/i18n/special/te.json14
-rw-r--r--extensions/Cite/i18n/special/tet.json13
-rw-r--r--extensions/Cite/i18n/special/tg-cyrl.json12
-rw-r--r--extensions/Cite/i18n/special/tg-latn.json12
-rw-r--r--extensions/Cite/i18n/special/th.json14
-rw-r--r--extensions/Cite/i18n/special/tk.json13
-rw-r--r--extensions/Cite/i18n/special/tl.json14
-rw-r--r--extensions/Cite/i18n/special/tly.json8
-rw-r--r--extensions/Cite/i18n/special/tn.json4
-rw-r--r--extensions/Cite/i18n/special/to.json5
-rw-r--r--extensions/Cite/i18n/special/tr.json17
-rw-r--r--extensions/Cite/i18n/special/tru.json8
-rw-r--r--extensions/Cite/i18n/special/ts.json8
-rw-r--r--extensions/Cite/i18n/special/tt-cyrl.json13
-rw-r--r--extensions/Cite/i18n/special/tyv.json9
-rw-r--r--extensions/Cite/i18n/special/tzm.json8
-rw-r--r--extensions/Cite/i18n/special/udm.json8
-rw-r--r--extensions/Cite/i18n/special/ug-arab.json8
-rw-r--r--extensions/Cite/i18n/special/ug-latn.json9
-rw-r--r--extensions/Cite/i18n/special/uk.json16
-rw-r--r--extensions/Cite/i18n/special/ur.json6
-rw-r--r--extensions/Cite/i18n/special/uz.json8
-rw-r--r--extensions/Cite/i18n/special/vec.json15
-rw-r--r--extensions/Cite/i18n/special/vep.json14
-rw-r--r--extensions/Cite/i18n/special/vi.json15
-rw-r--r--extensions/Cite/i18n/special/vo.json13
-rw-r--r--extensions/Cite/i18n/special/wa.json8
-rw-r--r--extensions/Cite/i18n/special/wuu.json7
-rw-r--r--extensions/Cite/i18n/special/xal.json8
-rw-r--r--extensions/Cite/i18n/special/yi.json13
-rw-r--r--extensions/Cite/i18n/special/yo.json8
-rw-r--r--extensions/Cite/i18n/special/yue.json8
-rw-r--r--extensions/Cite/i18n/special/zh-hans.json16
-rw-r--r--extensions/Cite/i18n/special/zh-hant.json17
-rw-r--r--extensions/Cite/i18n/sq.json26
-rw-r--r--extensions/Cite/i18n/sr-ec.json32
-rw-r--r--extensions/Cite/i18n/sr-el.json30
-rw-r--r--extensions/Cite/i18n/stq.json24
-rw-r--r--extensions/Cite/i18n/su.json (renamed from extensions/Cite/i18n/core/su.json)0
-rw-r--r--extensions/Cite/i18n/sv.json (renamed from extensions/Cite/i18n/core/sv.json)0
-rw-r--r--extensions/Cite/i18n/ta.json12
-rw-r--r--extensions/Cite/i18n/tcy.json8
-rw-r--r--extensions/Cite/i18n/te.json (renamed from extensions/Cite/i18n/core/te.json)0
-rw-r--r--extensions/Cite/i18n/tg-cyrl.json (renamed from extensions/Cite/i18n/core/tg-cyrl.json)0
-rw-r--r--extensions/Cite/i18n/tg-latn.json (renamed from extensions/Cite/i18n/core/tg-latn.json)0
-rw-r--r--extensions/Cite/i18n/th.json (renamed from extensions/Cite/i18n/core/th.json)0
-rw-r--r--extensions/Cite/i18n/tk.json21
-rw-r--r--extensions/Cite/i18n/tl.json37
-rw-r--r--extensions/Cite/i18n/tly.json (renamed from extensions/Cite/i18n/core/tly.json)0
-rw-r--r--extensions/Cite/i18n/tr.json30
-rw-r--r--extensions/Cite/i18n/tt-cyrl.json (renamed from extensions/Cite/i18n/core/tt-cyrl.json)0
-rw-r--r--extensions/Cite/i18n/ttt.json (renamed from extensions/Cite/i18n/core/ttt.json)0
-rw-r--r--extensions/Cite/i18n/tzm.json (renamed from extensions/Cite/i18n/core/tzm.json)0
-rw-r--r--extensions/Cite/i18n/ug-arab.json (renamed from extensions/Cite/i18n/core/ug-arab.json)0
-rw-r--r--extensions/Cite/i18n/uk.json44
-rw-r--r--extensions/Cite/i18n/ur.json8
-rw-r--r--extensions/Cite/i18n/vec.json25
-rw-r--r--extensions/Cite/i18n/vep.json (renamed from extensions/Cite/i18n/core/vep.json)0
-rw-r--r--extensions/Cite/i18n/vi.json29
-rw-r--r--extensions/Cite/i18n/vo.json (renamed from extensions/Cite/i18n/core/vo.json)0
-rw-r--r--extensions/Cite/i18n/yi.json (renamed from extensions/Cite/i18n/core/yi.json)0
-rw-r--r--extensions/Cite/i18n/yue.json (renamed from extensions/Cite/i18n/core/yue.json)0
-rw-r--r--extensions/Cite/i18n/zh-hans.json36
-rw-r--r--extensions/Cite/i18n/zh-hant.json (renamed from extensions/Cite/i18n/core/zh-hant.json)0
-rw-r--r--extensions/Cite/modules/ext.cite.css13
-rw-r--r--extensions/Cite/modules/ext.specialcite.css14
-rw-r--r--extensions/CiteThisPage/COPYING.txt339
-rw-r--r--extensions/CiteThisPage/CiteThisPage.alias.php445
-rw-r--r--extensions/CiteThisPage/CiteThisPage.hooks.php45
-rw-r--r--extensions/CiteThisPage/CiteThisPage.php15
-rw-r--r--extensions/CiteThisPage/SpecialCiteThisPage.php176
-rw-r--r--extensions/CiteThisPage/extension.json44
-rw-r--r--extensions/CiteThisPage/i18n/ace.json8
-rw-r--r--extensions/CiteThisPage/i18n/af.json14
-rw-r--r--extensions/CiteThisPage/i18n/am.json12
-rw-r--r--extensions/CiteThisPage/i18n/an.json13
-rw-r--r--extensions/CiteThisPage/i18n/ar.json16
-rw-r--r--extensions/CiteThisPage/i18n/arc.json13
-rw-r--r--extensions/CiteThisPage/i18n/arn.json14
-rw-r--r--extensions/CiteThisPage/i18n/arq.json9
-rw-r--r--extensions/CiteThisPage/i18n/arz.json14
-rw-r--r--extensions/CiteThisPage/i18n/as.json15
-rw-r--r--extensions/CiteThisPage/i18n/ast.json15
-rw-r--r--extensions/CiteThisPage/i18n/av.json8
-rw-r--r--extensions/CiteThisPage/i18n/awa.json9
-rw-r--r--extensions/CiteThisPage/i18n/az.json10
-rw-r--r--extensions/CiteThisPage/i18n/azb.json15
-rw-r--r--extensions/CiteThisPage/i18n/ba.json14
-rw-r--r--extensions/CiteThisPage/i18n/bar.json14
-rw-r--r--extensions/CiteThisPage/i18n/bcc.json13
-rw-r--r--extensions/CiteThisPage/i18n/bcl.json15
-rw-r--r--extensions/CiteThisPage/i18n/be-tarask.json17
-rw-r--r--extensions/CiteThisPage/i18n/be.json13
-rw-r--r--extensions/CiteThisPage/i18n/bg.json14
-rw-r--r--extensions/CiteThisPage/i18n/bgn.json9
-rw-r--r--extensions/CiteThisPage/i18n/bho.json10
-rw-r--r--extensions/CiteThisPage/i18n/bn.json16
-rw-r--r--extensions/CiteThisPage/i18n/bo.json8
-rw-r--r--extensions/CiteThisPage/i18n/bpy.json5
-rw-r--r--extensions/CiteThisPage/i18n/br.json14
-rw-r--r--extensions/CiteThisPage/i18n/bs.json13
-rw-r--r--extensions/CiteThisPage/i18n/bxr.json8
-rw-r--r--extensions/CiteThisPage/i18n/ca.json18
-rw-r--r--extensions/CiteThisPage/i18n/cdo.json11
-rw-r--r--extensions/CiteThisPage/i18n/ce.json15
-rw-r--r--extensions/CiteThisPage/i18n/ceb.json8
-rw-r--r--extensions/CiteThisPage/i18n/ckb.json13
-rw-r--r--extensions/CiteThisPage/i18n/co.json6
-rw-r--r--extensions/CiteThisPage/i18n/cs.json17
-rw-r--r--extensions/CiteThisPage/i18n/cu.json9
-rw-r--r--extensions/CiteThisPage/i18n/cy.json15
-rw-r--r--extensions/CiteThisPage/i18n/da.json17
-rw-r--r--extensions/CiteThisPage/i18n/de.json16
-rw-r--r--extensions/CiteThisPage/i18n/diq.json16
-rw-r--r--extensions/CiteThisPage/i18n/dsb.json13
-rw-r--r--extensions/CiteThisPage/i18n/ee.json4
-rw-r--r--extensions/CiteThisPage/i18n/el.json16
-rw-r--r--extensions/CiteThisPage/i18n/en.json18
-rw-r--r--extensions/CiteThisPage/i18n/eo.json18
-rw-r--r--extensions/CiteThisPage/i18n/es.json22
-rw-r--r--extensions/CiteThisPage/i18n/et.json15
-rw-r--r--extensions/CiteThisPage/i18n/eu.json15
-rw-r--r--extensions/CiteThisPage/i18n/ext.json11
-rw-r--r--extensions/CiteThisPage/i18n/fa.json17
-rw-r--r--extensions/CiteThisPage/i18n/fi.json17
-rw-r--r--extensions/CiteThisPage/i18n/fj.json4
-rw-r--r--extensions/CiteThisPage/i18n/fo.json12
-rw-r--r--extensions/CiteThisPage/i18n/fr.json19
-rw-r--r--extensions/CiteThisPage/i18n/frp.json13
-rw-r--r--extensions/CiteThisPage/i18n/frr.json14
-rw-r--r--extensions/CiteThisPage/i18n/fur.json12
-rw-r--r--extensions/CiteThisPage/i18n/fy.json14
-rw-r--r--extensions/CiteThisPage/i18n/ga.json12
-rw-r--r--extensions/CiteThisPage/i18n/gd.json8
-rw-r--r--extensions/CiteThisPage/i18n/gl.json15
-rw-r--r--extensions/CiteThisPage/i18n/gom-deva.json9
-rw-r--r--extensions/CiteThisPage/i18n/grc.json14
-rw-r--r--extensions/CiteThisPage/i18n/gsw.json16
-rw-r--r--extensions/CiteThisPage/i18n/gu.json15
-rw-r--r--extensions/CiteThisPage/i18n/gv.json12
-rw-r--r--extensions/CiteThisPage/i18n/ha.json4
-rw-r--r--extensions/CiteThisPage/i18n/haw.json10
-rw-r--r--extensions/CiteThisPage/i18n/he.json16
-rw-r--r--extensions/CiteThisPage/i18n/hi.json16
-rw-r--r--extensions/CiteThisPage/i18n/hif-latn.json8
-rw-r--r--extensions/CiteThisPage/i18n/hil.json8
-rw-r--r--extensions/CiteThisPage/i18n/hr.json15
-rw-r--r--extensions/CiteThisPage/i18n/hsb.json15
-rw-r--r--extensions/CiteThisPage/i18n/ht.json12
-rw-r--r--extensions/CiteThisPage/i18n/hu.json16
-rw-r--r--extensions/CiteThisPage/i18n/hy.json14
-rw-r--r--extensions/CiteThisPage/i18n/ia.json15
-rw-r--r--extensions/CiteThisPage/i18n/id.json17
-rw-r--r--extensions/CiteThisPage/i18n/ie.json8
-rw-r--r--extensions/CiteThisPage/i18n/ig.json13
-rw-r--r--extensions/CiteThisPage/i18n/ilo.json13
-rw-r--r--extensions/CiteThisPage/i18n/io.json12
-rw-r--r--extensions/CiteThisPage/i18n/is.json15
-rw-r--r--extensions/CiteThisPage/i18n/it.json17
-rw-r--r--extensions/CiteThisPage/i18n/ja.json19
-rw-r--r--extensions/CiteThisPage/i18n/jut.json11
-rw-r--r--extensions/CiteThisPage/i18n/jv.json15
-rw-r--r--extensions/CiteThisPage/i18n/ka.json17
-rw-r--r--extensions/CiteThisPage/i18n/kk-arab.json8
-rw-r--r--extensions/CiteThisPage/i18n/kk-cyrl.json13
-rw-r--r--extensions/CiteThisPage/i18n/kk-latn.json8
-rw-r--r--extensions/CiteThisPage/i18n/kl.json8
-rw-r--r--extensions/CiteThisPage/i18n/km.json14
-rw-r--r--extensions/CiteThisPage/i18n/kn.json11
-rw-r--r--extensions/CiteThisPage/i18n/ko.json17
-rw-r--r--extensions/CiteThisPage/i18n/krc.json10
-rw-r--r--extensions/CiteThisPage/i18n/krj.json8
-rw-r--r--extensions/CiteThisPage/i18n/ksh.json14
-rw-r--r--extensions/CiteThisPage/i18n/ku-latn.json11
-rw-r--r--extensions/CiteThisPage/i18n/kw.json14
-rw-r--r--extensions/CiteThisPage/i18n/la.json16
-rw-r--r--extensions/CiteThisPage/i18n/lad.json8
-rw-r--r--extensions/CiteThisPage/i18n/lb.json15
-rw-r--r--extensions/CiteThisPage/i18n/lez.json10
-rw-r--r--extensions/CiteThisPage/i18n/lfn.json8
-rw-r--r--extensions/CiteThisPage/i18n/lg.json12
-rw-r--r--extensions/CiteThisPage/i18n/li.json15
-rw-r--r--extensions/CiteThisPage/i18n/lmo.json9
-rw-r--r--extensions/CiteThisPage/i18n/lo.json6
-rw-r--r--extensions/CiteThisPage/i18n/lrc.json13
-rw-r--r--extensions/CiteThisPage/i18n/lt.json14
-rw-r--r--extensions/CiteThisPage/i18n/lus.json13
-rw-r--r--extensions/CiteThisPage/i18n/lv.json11
-rw-r--r--extensions/CiteThisPage/i18n/lzh.json5
-rw-r--r--extensions/CiteThisPage/i18n/mai.json9
-rw-r--r--extensions/CiteThisPage/i18n/mg.json8
-rw-r--r--extensions/CiteThisPage/i18n/mhr.json8
-rw-r--r--extensions/CiteThisPage/i18n/min.json14
-rw-r--r--extensions/CiteThisPage/i18n/mk.json16
-rw-r--r--extensions/CiteThisPage/i18n/ml.json15
-rw-r--r--extensions/CiteThisPage/i18n/mn.json12
-rw-r--r--extensions/CiteThisPage/i18n/mr.json15
-rw-r--r--extensions/CiteThisPage/i18n/mrj.json8
-rw-r--r--extensions/CiteThisPage/i18n/ms.json16
-rw-r--r--extensions/CiteThisPage/i18n/mt.json15
-rw-r--r--extensions/CiteThisPage/i18n/mwl.json8
-rw-r--r--extensions/CiteThisPage/i18n/myv.json9
-rw-r--r--extensions/CiteThisPage/i18n/nah.json12
-rw-r--r--extensions/CiteThisPage/i18n/nan.json7
-rw-r--r--extensions/CiteThisPage/i18n/nap.json9
-rw-r--r--extensions/CiteThisPage/i18n/nb.json14
-rw-r--r--extensions/CiteThisPage/i18n/nds-nl.json14
-rw-r--r--extensions/CiteThisPage/i18n/nds.json12
-rw-r--r--extensions/CiteThisPage/i18n/ne.json11
-rw-r--r--extensions/CiteThisPage/i18n/niu.json8
-rw-r--r--extensions/CiteThisPage/i18n/nl.json19
-rw-r--r--extensions/CiteThisPage/i18n/nn.json16
-rw-r--r--extensions/CiteThisPage/i18n/nov.json9
-rw-r--r--extensions/CiteThisPage/i18n/nso.json8
-rw-r--r--extensions/CiteThisPage/i18n/oc.json14
-rw-r--r--extensions/CiteThisPage/i18n/or.json15
-rw-r--r--extensions/CiteThisPage/i18n/os.json8
-rw-r--r--extensions/CiteThisPage/i18n/pa.json8
-rw-r--r--extensions/CiteThisPage/i18n/pag.json7
-rw-r--r--extensions/CiteThisPage/i18n/pam.json7
-rw-r--r--extensions/CiteThisPage/i18n/pcd.json8
-rw-r--r--extensions/CiteThisPage/i18n/pdc.json8
-rw-r--r--extensions/CiteThisPage/i18n/pfl.json12
-rw-r--r--extensions/CiteThisPage/i18n/pl.json14
-rw-r--r--extensions/CiteThisPage/i18n/pms.json16
-rw-r--r--extensions/CiteThisPage/i18n/pnb.json13
-rw-r--r--extensions/CiteThisPage/i18n/pnt.json8
-rw-r--r--extensions/CiteThisPage/i18n/ps.json13
-rw-r--r--extensions/CiteThisPage/i18n/pt-br.json16
-rw-r--r--extensions/CiteThisPage/i18n/pt.json17
-rw-r--r--extensions/CiteThisPage/i18n/qqq.json22
-rw-r--r--extensions/CiteThisPage/i18n/qu.json13
-rw-r--r--extensions/CiteThisPage/i18n/rm.json9
-rw-r--r--extensions/CiteThisPage/i18n/rmy.json10
-rw-r--r--extensions/CiteThisPage/i18n/ro.json20
-rw-r--r--extensions/CiteThisPage/i18n/roa-tara.json14
-rw-r--r--extensions/CiteThisPage/i18n/ru.json18
-rw-r--r--extensions/CiteThisPage/i18n/rue.json14
-rw-r--r--extensions/CiteThisPage/i18n/rup.json8
-rw-r--r--extensions/CiteThisPage/i18n/sa.json15
-rw-r--r--extensions/CiteThisPage/i18n/sah.json13
-rw-r--r--extensions/CiteThisPage/i18n/scn.json14
-rw-r--r--extensions/CiteThisPage/i18n/sd.json4
-rw-r--r--extensions/CiteThisPage/i18n/sgs.json9
-rw-r--r--extensions/CiteThisPage/i18n/sh.json11
-rw-r--r--extensions/CiteThisPage/i18n/shn.json9
-rw-r--r--extensions/CiteThisPage/i18n/si.json14
-rw-r--r--extensions/CiteThisPage/i18n/sk.json15
-rw-r--r--extensions/CiteThisPage/i18n/sl.json15
-rw-r--r--extensions/CiteThisPage/i18n/sma.json8
-rw-r--r--extensions/CiteThisPage/i18n/sn.json4
-rw-r--r--extensions/CiteThisPage/i18n/so.json14
-rw-r--r--extensions/CiteThisPage/i18n/sq.json14
-rw-r--r--extensions/CiteThisPage/i18n/sr-ec.json19
-rw-r--r--extensions/CiteThisPage/i18n/sr-el.json17
-rw-r--r--extensions/CiteThisPage/i18n/stq.json12
-rw-r--r--extensions/CiteThisPage/i18n/su.json13
-rw-r--r--extensions/CiteThisPage/i18n/sv.json18
-rw-r--r--extensions/CiteThisPage/i18n/sw.json13
-rw-r--r--extensions/CiteThisPage/i18n/sxu.json10
-rw-r--r--extensions/CiteThisPage/i18n/szl.json12
-rw-r--r--extensions/CiteThisPage/i18n/ta.json15
-rw-r--r--extensions/CiteThisPage/i18n/tcy.json10
-rw-r--r--extensions/CiteThisPage/i18n/te.json14
-rw-r--r--extensions/CiteThisPage/i18n/tet.json13
-rw-r--r--extensions/CiteThisPage/i18n/tg-cyrl.json12
-rw-r--r--extensions/CiteThisPage/i18n/tg-latn.json12
-rw-r--r--extensions/CiteThisPage/i18n/th.json14
-rw-r--r--extensions/CiteThisPage/i18n/tk.json13
-rw-r--r--extensions/CiteThisPage/i18n/tl.json14
-rw-r--r--extensions/CiteThisPage/i18n/tly.json8
-rw-r--r--extensions/CiteThisPage/i18n/tn.json4
-rw-r--r--extensions/CiteThisPage/i18n/to.json5
-rw-r--r--extensions/CiteThisPage/i18n/tr.json17
-rw-r--r--extensions/CiteThisPage/i18n/tru.json8
-rw-r--r--extensions/CiteThisPage/i18n/ts.json8
-rw-r--r--extensions/CiteThisPage/i18n/tt-cyrl.json14
-rw-r--r--extensions/CiteThisPage/i18n/tyv.json9
-rw-r--r--extensions/CiteThisPage/i18n/tzm.json8
-rw-r--r--extensions/CiteThisPage/i18n/udm.json8
-rw-r--r--extensions/CiteThisPage/i18n/ug-arab.json8
-rw-r--r--extensions/CiteThisPage/i18n/ug-latn.json9
-rw-r--r--extensions/CiteThisPage/i18n/uk.json17
-rw-r--r--extensions/CiteThisPage/i18n/ur.json11
-rw-r--r--extensions/CiteThisPage/i18n/uz.json8
-rw-r--r--extensions/CiteThisPage/i18n/vec.json15
-rw-r--r--extensions/CiteThisPage/i18n/vep.json14
-rw-r--r--extensions/CiteThisPage/i18n/vi.json15
-rw-r--r--extensions/CiteThisPage/i18n/vo.json13
-rw-r--r--extensions/CiteThisPage/i18n/wa.json8
-rw-r--r--extensions/CiteThisPage/i18n/wuu.json7
-rw-r--r--extensions/CiteThisPage/i18n/xal.json8
-rw-r--r--extensions/CiteThisPage/i18n/yi.json13
-rw-r--r--extensions/CiteThisPage/i18n/yo.json8
-rw-r--r--extensions/CiteThisPage/i18n/yue.json13
-rw-r--r--extensions/CiteThisPage/i18n/zh-hans.json17
-rw-r--r--extensions/CiteThisPage/i18n/zh-hant.json18
-rw-r--r--extensions/CiteThisPage/modules/ext.citeThisPage.css13
-rw-r--r--extensions/ConfirmEdit/ApiFancyCaptchaReload.php20
-rw-r--r--extensions/ConfirmEdit/ConfirmEdit.alias.php16
-rw-r--r--extensions/ConfirmEdit/ConfirmEdit.i18n.php35
-rw-r--r--extensions/ConfirmEdit/ConfirmEdit.php52
-rw-r--r--extensions/ConfirmEdit/ConfirmEditHooks.php96
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha.i18n.php35
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha.php88
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.class.php (renamed from extensions/ConfirmEdit/FancyCaptcha.class.php)49
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.php13
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/extension.json52
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/aeb-latn.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/af.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/aln.json (renamed from extensions/ConfirmEdit/i18n/fancy/aln.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/am.json (renamed from extensions/ConfirmEdit/i18n/fancy/am.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/an.json (renamed from extensions/ConfirmEdit/i18n/fancy/an.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ang.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ar.json20
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/arq.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/arz.json (renamed from extensions/ConfirmEdit/i18n/fancy/arz.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/as.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ast.json (renamed from extensions/ConfirmEdit/i18n/fancy/ast.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/awa.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/az.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/azb.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ba.json (renamed from extensions/ConfirmEdit/i18n/fancy/ba.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/bcc.json (renamed from extensions/ConfirmEdit/i18n/fancy/bcc.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/bcl.json (renamed from extensions/ConfirmEdit/i18n/fancy/bcl.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/be-tarask.json (renamed from extensions/ConfirmEdit/i18n/fancy/be-tarask.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/be.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/bg.json15
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/bgn.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/bn.json16
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/br.json (renamed from extensions/ConfirmEdit/i18n/fancy/br.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/bs.json (renamed from extensions/ConfirmEdit/i18n/fancy/bs.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ca.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/cdo.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ce.json (renamed from extensions/ConfirmEdit/i18n/fancy/ce.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ckb.json (renamed from extensions/ConfirmEdit/i18n/fancy/ckb.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/cs.json18
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/cu.json (renamed from extensions/ConfirmEdit/i18n/fancy/cu.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/cv.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/cy.json (renamed from extensions/ConfirmEdit/i18n/fancy/cy.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/da.json (renamed from extensions/ConfirmEdit/i18n/fancy/da.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/de-formal.json (renamed from extensions/ConfirmEdit/i18n/fancy/de-formal.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/de.json19
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/diq.json (renamed from extensions/ConfirmEdit/i18n/fancy/diq.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/dsb.json (renamed from extensions/ConfirmEdit/i18n/fancy/dsb.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/el.json19
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/en.json15
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/eo.json (renamed from extensions/ConfirmEdit/i18n/fancy/eo.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/es.json20
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/et.json (renamed from extensions/ConfirmEdit/i18n/fancy/et.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/eu.json16
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/fa.json (renamed from extensions/ConfirmEdit/i18n/fancy/fa.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/fi.json18
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/fo.json (renamed from extensions/ConfirmEdit/i18n/fancy/fo.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/fr.json23
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/frp.json (renamed from extensions/ConfirmEdit/i18n/fancy/frp.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/frr.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/fy.json (renamed from extensions/ConfirmEdit/i18n/fancy/fy.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ga.json (renamed from extensions/ConfirmEdit/i18n/fancy/ga.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/gl.json19
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/gom-deva.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/gsw.json (renamed from extensions/ConfirmEdit/i18n/fancy/gsw.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/gu.json (renamed from extensions/ConfirmEdit/i18n/fancy/gu.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/he.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/hi.json14
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/hr.json16
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/hsb.json (renamed from extensions/ConfirmEdit/i18n/fancy/hsb.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ht.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/hu.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/hy.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ia.json (renamed from extensions/ConfirmEdit/i18n/fancy/ia.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/id.json16
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ilo.json (renamed from extensions/ConfirmEdit/i18n/fancy/ilo.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/is.json (renamed from extensions/ConfirmEdit/i18n/fancy/is.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/it.json21
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ja.json (renamed from extensions/ConfirmEdit/i18n/fancy/ja.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/jut.json (renamed from extensions/ConfirmEdit/i18n/fancy/jut.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/jv.json (renamed from extensions/ConfirmEdit/i18n/fancy/jv.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ka.json (renamed from extensions/ConfirmEdit/i18n/fancy/ka.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/kaa.json (renamed from extensions/ConfirmEdit/i18n/fancy/kaa.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/khw.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/kk-arab.json (renamed from extensions/ConfirmEdit/i18n/fancy/kk-arab.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/kk-cyrl.json (renamed from extensions/ConfirmEdit/i18n/fancy/kk-cyrl.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/kk-latn.json (renamed from extensions/ConfirmEdit/i18n/fancy/kk-latn.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/km.json (renamed from extensions/ConfirmEdit/i18n/fancy/km.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/kn.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ko.json (renamed from extensions/ConfirmEdit/i18n/fancy/ko.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/krc.json (renamed from extensions/ConfirmEdit/i18n/fancy/krc.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ksh.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ku-latn.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/kw.json (renamed from extensions/ConfirmEdit/i18n/fancy/kw.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ky.json (renamed from extensions/ConfirmEdit/i18n/fancy/ky.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/la.json (renamed from extensions/ConfirmEdit/i18n/fancy/la.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/lb.json (renamed from extensions/ConfirmEdit/i18n/fancy/lb.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/li.json (renamed from extensions/ConfirmEdit/i18n/fancy/li.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/lo.json (renamed from extensions/ConfirmEdit/i18n/fancy/lo.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/lrc.json11
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/lt.json10
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/lv.json (renamed from extensions/ConfirmEdit/i18n/fancy/lv.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/mai.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/min.json (renamed from extensions/ConfirmEdit/i18n/fancy/min.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/mk.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ml.json15
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/mr.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ms.json (renamed from extensions/ConfirmEdit/i18n/fancy/ms.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/mt.json (renamed from extensions/ConfirmEdit/i18n/fancy/mt.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/nap.json16
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/nb.json (renamed from extensions/ConfirmEdit/i18n/fancy/nb.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/nds-nl.json (renamed from extensions/ConfirmEdit/i18n/fancy/nds-nl.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/nds.json (renamed from extensions/ConfirmEdit/i18n/fancy/nds.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ne.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/nl-informal.json (renamed from extensions/ConfirmEdit/i18n/fancy/nl-informal.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/nl.json (renamed from extensions/ConfirmEdit/i18n/fancy/nl.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/nn.json (renamed from extensions/ConfirmEdit/i18n/fancy/nn.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/oc.json (renamed from extensions/ConfirmEdit/i18n/fancy/oc.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/or.json (renamed from extensions/ConfirmEdit/i18n/fancy/or.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/pa.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/pfl.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/pl.json (renamed from extensions/ConfirmEdit/i18n/fancy/pl.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/pms.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/pnb.json (renamed from extensions/ConfirmEdit/i18n/fancy/pnb.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ps.json11
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/pt-br.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/pt.json (renamed from extensions/ConfirmEdit/i18n/fancy/pt.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/qqq.json20
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/qu.json (renamed from extensions/ConfirmEdit/i18n/fancy/qu.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/rm.json (renamed from extensions/ConfirmEdit/i18n/fancy/rm.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ro.json (renamed from extensions/ConfirmEdit/i18n/fancy/ro.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/roa-tara.json16
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ru.json (renamed from extensions/ConfirmEdit/i18n/fancy/ru.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/rue.json (renamed from extensions/ConfirmEdit/i18n/fancy/rue.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/sa.json (renamed from extensions/ConfirmEdit/i18n/fancy/sa.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/sah.json14
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/scn.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/si.json (renamed from extensions/ConfirmEdit/i18n/fancy/si.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/sk.json (renamed from extensions/ConfirmEdit/i18n/fancy/sk.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/sl.json16
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/so.json (renamed from extensions/ConfirmEdit/i18n/fancy/so.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/sq.json (renamed from extensions/ConfirmEdit/i18n/fancy/sq.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/sr-ec.json19
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/sr-el.json17
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/stq.json (renamed from extensions/ConfirmEdit/i18n/fancy/stq.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/su.json (renamed from extensions/ConfirmEdit/i18n/fancy/su.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/sv.json19
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/szl.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ta.json (renamed from extensions/ConfirmEdit/i18n/fancy/ta.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/tcy.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/te.json14
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/tg-cyrl.json (renamed from extensions/ConfirmEdit/i18n/fancy/tg-cyrl.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/tg-latn.json (renamed from extensions/ConfirmEdit/i18n/fancy/tg-latn.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/th.json (renamed from extensions/ConfirmEdit/i18n/fancy/th.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/tk.json (renamed from extensions/ConfirmEdit/i18n/fancy/tk.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/tl.json (renamed from extensions/ConfirmEdit/i18n/fancy/tl.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/tr.json (renamed from extensions/ConfirmEdit/i18n/fancy/tr.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/tt-cyrl.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/uk.json (renamed from extensions/ConfirmEdit/i18n/fancy/uk.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/ur.json8
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/uz.json (renamed from extensions/ConfirmEdit/i18n/fancy/uz.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/vec.json (renamed from extensions/ConfirmEdit/i18n/fancy/vec.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/vi.json19
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/vo.json (renamed from extensions/ConfirmEdit/i18n/fancy/vo.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/vro.json (renamed from extensions/ConfirmEdit/i18n/fancy/vro.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/wa.json (renamed from extensions/ConfirmEdit/i18n/fancy/wa.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/xmf.json9
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/yi.json11
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/yo.json (renamed from extensions/ConfirmEdit/i18n/fancy/yo.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/yue.json13
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hans.json21
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hant.json (renamed from extensions/ConfirmEdit/i18n/fancy/zh-hant.json)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.css (renamed from extensions/ConfirmEdit/resources/ext.confirmEdit.fancyCaptcha.css)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.js (renamed from extensions/ConfirmEdit/resources/ext.confirmEdit.fancyCaptcha.js)0
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/resources/images/ajax-loader-10x10.gif (renamed from extensions/ConfirmEdit/resources/images/ajax-loader-10x10.gif)bin6147 -> 6147 bytes
-rw-r--r--extensions/ConfirmEdit/FancyCaptcha/resources/images/fancycaptcha-reload-icon.png (renamed from extensions/ConfirmEdit/resources/images/fancycaptcha-reload-icon.png)bin307 -> 307 bytes
-rw-r--r--extensions/ConfirmEdit/MathCaptcha.php22
-rw-r--r--extensions/ConfirmEdit/MathCaptcha/MathCaptcha.class.php (renamed from extensions/ConfirmEdit/MathCaptcha.class.php)2
-rw-r--r--extensions/ConfirmEdit/MathCaptcha/MathCaptcha.php13
-rw-r--r--extensions/ConfirmEdit/MathCaptcha/extension.json9
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha.i18n.php35
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha.php47
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.class.php (renamed from extensions/ConfirmEdit/QuestyCaptcha.class.php)10
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.php13
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/extension.json15
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/aln.json (renamed from extensions/ConfirmEdit/i18n/questy/aln.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ar.json (renamed from extensions/ConfirmEdit/i18n/questy/ar.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ast.json (renamed from extensions/ConfirmEdit/i18n/questy/ast.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ba.json (renamed from extensions/ConfirmEdit/i18n/questy/ba.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/be-tarask.json (renamed from extensions/ConfirmEdit/i18n/questy/be-tarask.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/br.json (renamed from extensions/ConfirmEdit/i18n/questy/br.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/bs.json (renamed from extensions/ConfirmEdit/i18n/questy/bs.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ca.json (renamed from extensions/ConfirmEdit/i18n/questy/ca.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/cs.json (renamed from extensions/ConfirmEdit/i18n/questy/cs.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/cy.json (renamed from extensions/ConfirmEdit/i18n/questy/cy.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/de-formal.json (renamed from extensions/ConfirmEdit/i18n/questy/de-formal.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/de.json (renamed from extensions/ConfirmEdit/i18n/questy/de.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/dsb.json (renamed from extensions/ConfirmEdit/i18n/questy/dsb.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/el.json (renamed from extensions/ConfirmEdit/i18n/questy/el.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/en.json (renamed from extensions/ConfirmEdit/i18n/questy/en.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/eo.json (renamed from extensions/ConfirmEdit/i18n/questy/eo.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/es.json (renamed from extensions/ConfirmEdit/i18n/questy/es.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/et.json (renamed from extensions/ConfirmEdit/i18n/questy/et.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/eu.json (renamed from extensions/ConfirmEdit/i18n/questy/eu.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/fa.json (renamed from extensions/ConfirmEdit/i18n/questy/fa.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/fi.json (renamed from extensions/ConfirmEdit/i18n/questy/fi.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/fr.json (renamed from extensions/ConfirmEdit/i18n/questy/fr.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/gl.json (renamed from extensions/ConfirmEdit/i18n/questy/gl.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/gsw.json (renamed from extensions/ConfirmEdit/i18n/questy/gsw.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/he.json (renamed from extensions/ConfirmEdit/i18n/questy/he.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/hsb.json (renamed from extensions/ConfirmEdit/i18n/questy/hsb.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/hu.json (renamed from extensions/ConfirmEdit/i18n/questy/hu.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ia.json (renamed from extensions/ConfirmEdit/i18n/questy/ia.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/id.json (renamed from extensions/ConfirmEdit/i18n/questy/id.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ilo.json (renamed from extensions/ConfirmEdit/i18n/questy/ilo.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/it.json (renamed from extensions/ConfirmEdit/i18n/questy/it.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ja.json (renamed from extensions/ConfirmEdit/i18n/questy/ja.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ko.json (renamed from extensions/ConfirmEdit/i18n/questy/ko.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ksh.json (renamed from extensions/ConfirmEdit/i18n/questy/ksh.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/lb.json (renamed from extensions/ConfirmEdit/i18n/questy/lb.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/min.json (renamed from extensions/ConfirmEdit/i18n/questy/min.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/mk.json (renamed from extensions/ConfirmEdit/i18n/questy/mk.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ml.json (renamed from extensions/ConfirmEdit/i18n/questy/ml.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ms.json (renamed from extensions/ConfirmEdit/i18n/questy/ms.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/mt.json (renamed from extensions/ConfirmEdit/i18n/questy/mt.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/nb.json (renamed from extensions/ConfirmEdit/i18n/questy/nb.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/nl-informal.json (renamed from extensions/ConfirmEdit/i18n/questy/nl-informal.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/nl.json (renamed from extensions/ConfirmEdit/i18n/questy/nl.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/nn.json (renamed from extensions/ConfirmEdit/i18n/questy/nn.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/oc.json (renamed from extensions/ConfirmEdit/i18n/questy/oc.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/pl.json (renamed from extensions/ConfirmEdit/i18n/questy/pl.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/pms.json (renamed from extensions/ConfirmEdit/i18n/questy/pms.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/pt-br.json (renamed from extensions/ConfirmEdit/i18n/questy/pt-br.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/pt.json (renamed from extensions/ConfirmEdit/i18n/questy/pt.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/qqq.json (renamed from extensions/ConfirmEdit/i18n/questy/qqq.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ro.json (renamed from extensions/ConfirmEdit/i18n/questy/ro.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/roa-tara.json (renamed from extensions/ConfirmEdit/i18n/questy/roa-tara.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/ru.json (renamed from extensions/ConfirmEdit/i18n/questy/ru.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/sk.json (renamed from extensions/ConfirmEdit/i18n/questy/sk.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/sl.json (renamed from extensions/ConfirmEdit/i18n/questy/sl.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/so.json (renamed from extensions/ConfirmEdit/i18n/questy/so.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/sr-ec.json (renamed from extensions/ConfirmEdit/i18n/questy/sr-ec.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/sr-el.json (renamed from extensions/ConfirmEdit/i18n/questy/sr-el.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/sv.json (renamed from extensions/ConfirmEdit/i18n/questy/sv.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/te.json (renamed from extensions/ConfirmEdit/i18n/questy/te.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/th.json (renamed from extensions/ConfirmEdit/i18n/questy/th.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/tl.json (renamed from extensions/ConfirmEdit/i18n/questy/tl.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/tr.json (renamed from extensions/ConfirmEdit/i18n/questy/tr.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/uk.json (renamed from extensions/ConfirmEdit/i18n/questy/uk.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/wa.json (renamed from extensions/ConfirmEdit/i18n/questy/wa.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/yi.json (renamed from extensions/ConfirmEdit/i18n/questy/yi.json)0
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/zh-hans.json18
-rw-r--r--extensions/ConfirmEdit/QuestyCaptcha/i18n/zh-hant.json (renamed from extensions/ConfirmEdit/i18n/questy/zh-hant.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha.i18n.php35
-rw-r--r--extensions/ConfirmEdit/ReCaptcha.php65
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/ReCaptcha.class.php (renamed from extensions/ConfirmEdit/ReCaptcha.class.php)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/ReCaptcha.php13
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/extension.json21
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/ar.json (renamed from extensions/ConfirmEdit/i18n/re/ar.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/ast.json (renamed from extensions/ConfirmEdit/i18n/re/ast.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/be-tarask.json (renamed from extensions/ConfirmEdit/i18n/re/be-tarask.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/br.json (renamed from extensions/ConfirmEdit/i18n/re/br.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/bs.json (renamed from extensions/ConfirmEdit/i18n/re/bs.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/cs.json (renamed from extensions/ConfirmEdit/i18n/re/cs.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/cy.json (renamed from extensions/ConfirmEdit/i18n/re/cy.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/de-formal.json (renamed from extensions/ConfirmEdit/i18n/re/de-formal.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/de.json (renamed from extensions/ConfirmEdit/i18n/re/de.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/dsb.json (renamed from extensions/ConfirmEdit/i18n/re/dsb.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/en.json (renamed from extensions/ConfirmEdit/i18n/re/en.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/es.json (renamed from extensions/ConfirmEdit/i18n/re/es.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/fa.json (renamed from extensions/ConfirmEdit/i18n/re/fa.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/fi.json (renamed from extensions/ConfirmEdit/i18n/re/fi.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/fr.json (renamed from extensions/ConfirmEdit/i18n/re/fr.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/gl.json (renamed from extensions/ConfirmEdit/i18n/re/gl.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/gsw.json (renamed from extensions/ConfirmEdit/i18n/re/gsw.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/he.json (renamed from extensions/ConfirmEdit/i18n/re/he.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/hsb.json (renamed from extensions/ConfirmEdit/i18n/re/hsb.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/ia.json (renamed from extensions/ConfirmEdit/i18n/re/ia.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/id.json (renamed from extensions/ConfirmEdit/i18n/re/id.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/it.json (renamed from extensions/ConfirmEdit/i18n/re/it.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/ja.json (renamed from extensions/ConfirmEdit/i18n/re/ja.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/ko.json (renamed from extensions/ConfirmEdit/i18n/re/ko.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/ksh.json (renamed from extensions/ConfirmEdit/i18n/re/ksh.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/lb.json (renamed from extensions/ConfirmEdit/i18n/re/lb.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/mk.json (renamed from extensions/ConfirmEdit/i18n/re/mk.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/ms.json (renamed from extensions/ConfirmEdit/i18n/re/ms.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/mt.json (renamed from extensions/ConfirmEdit/i18n/re/mt.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/nb.json (renamed from extensions/ConfirmEdit/i18n/re/nb.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/nl-informal.json (renamed from extensions/ConfirmEdit/i18n/re/nl-informal.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/nl.json (renamed from extensions/ConfirmEdit/i18n/re/nl.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/oc.json (renamed from extensions/ConfirmEdit/i18n/re/oc.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/pl.json (renamed from extensions/ConfirmEdit/i18n/re/pl.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/pms.json (renamed from extensions/ConfirmEdit/i18n/re/pms.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/pt-br.json (renamed from extensions/ConfirmEdit/i18n/re/pt-br.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/pt.json (renamed from extensions/ConfirmEdit/i18n/re/pt.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/qqq.json (renamed from extensions/ConfirmEdit/i18n/re/qqq.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/roa-tara.json (renamed from extensions/ConfirmEdit/i18n/re/roa-tara.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/ru.json (renamed from extensions/ConfirmEdit/i18n/re/ru.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/si.json (renamed from extensions/ConfirmEdit/i18n/re/si.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/sr-ec.json (renamed from extensions/ConfirmEdit/i18n/re/sr-ec.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/sr-el.json (renamed from extensions/ConfirmEdit/i18n/re/sr-el.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/sv.json (renamed from extensions/ConfirmEdit/i18n/re/sv.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/sw.json (renamed from extensions/ConfirmEdit/i18n/re/sw.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/te.json (renamed from extensions/ConfirmEdit/i18n/re/te.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/tl.json (renamed from extensions/ConfirmEdit/i18n/re/tl.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/uk.json (renamed from extensions/ConfirmEdit/i18n/re/uk.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/vi.json (renamed from extensions/ConfirmEdit/i18n/re/vi.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/zh-hans.json (renamed from extensions/ConfirmEdit/i18n/re/zh-hans.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/i18n/zh-hant.json (renamed from extensions/ConfirmEdit/i18n/re/zh-hant.json)0
-rw-r--r--extensions/ConfirmEdit/ReCaptcha/recaptchalib.php (renamed from extensions/ConfirmEdit/recaptchalib.php)0
-rw-r--r--extensions/ConfirmEdit/SimpleCaptcha/Captcha.php (renamed from extensions/ConfirmEdit/Captcha.php)271
-rw-r--r--extensions/ConfirmEdit/blacklist1
-rw-r--r--extensions/ConfirmEdit/captcha.py25
-rw-r--r--extensions/ConfirmEdit/i18n/ace.json8
-rw-r--r--extensions/ConfirmEdit/i18n/aeb-latn.json8
-rw-r--r--extensions/ConfirmEdit/i18n/af.json (renamed from extensions/ConfirmEdit/i18n/core/af.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/aln.json (renamed from extensions/ConfirmEdit/i18n/core/aln.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/am.json (renamed from extensions/ConfirmEdit/i18n/core/am.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/an.json (renamed from extensions/ConfirmEdit/i18n/core/an.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ang.json8
-rw-r--r--extensions/ConfirmEdit/i18n/ar.json (renamed from extensions/ConfirmEdit/i18n/core/ar.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/arq.json8
-rw-r--r--extensions/ConfirmEdit/i18n/arz.json (renamed from extensions/ConfirmEdit/i18n/core/arz.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/as.json (renamed from extensions/ConfirmEdit/i18n/core/as.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ast.json (renamed from extensions/ConfirmEdit/i18n/core/ast.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/awa.json8
-rw-r--r--extensions/ConfirmEdit/i18n/az.json10
-rw-r--r--extensions/ConfirmEdit/i18n/azb.json9
-rw-r--r--extensions/ConfirmEdit/i18n/ba.json (renamed from extensions/ConfirmEdit/i18n/core/ba.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/bcc.json21
-rw-r--r--extensions/ConfirmEdit/i18n/bcl.json (renamed from extensions/ConfirmEdit/i18n/core/bcl.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/be-tarask.json (renamed from extensions/ConfirmEdit/i18n/core/be-tarask.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/be.json (renamed from extensions/ConfirmEdit/i18n/core/be.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/bg.json22
-rw-r--r--extensions/ConfirmEdit/i18n/bgn.json8
-rw-r--r--extensions/ConfirmEdit/i18n/bho.json8
-rw-r--r--extensions/ConfirmEdit/i18n/bn.json30
-rw-r--r--extensions/ConfirmEdit/i18n/br.json (renamed from extensions/ConfirmEdit/i18n/core/br.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/bs.json24
-rw-r--r--extensions/ConfirmEdit/i18n/ca.json (renamed from extensions/ConfirmEdit/i18n/core/ca.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/cdo.json (renamed from extensions/ConfirmEdit/i18n/core/cdo.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ce.json (renamed from extensions/ConfirmEdit/i18n/core/ce.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ckb.json (renamed from extensions/ConfirmEdit/i18n/core/ckb.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/core/az.json8
-rw-r--r--extensions/ConfirmEdit/i18n/core/azb.json8
-rw-r--r--extensions/ConfirmEdit/i18n/core/bcc.json19
-rw-r--r--extensions/ConfirmEdit/i18n/core/bg.json20
-rw-r--r--extensions/ConfirmEdit/i18n/core/bn.json29
-rw-r--r--extensions/ConfirmEdit/i18n/core/bs.json23
-rw-r--r--extensions/ConfirmEdit/i18n/core/el.json32
-rw-r--r--extensions/ConfirmEdit/i18n/core/fi.json31
-rw-r--r--extensions/ConfirmEdit/i18n/core/fy.json13
-rw-r--r--extensions/ConfirmEdit/i18n/core/hi.json25
-rw-r--r--extensions/ConfirmEdit/i18n/core/hr.json27
-rw-r--r--extensions/ConfirmEdit/i18n/core/hu.json25
-rw-r--r--extensions/ConfirmEdit/i18n/core/ko.json28
-rw-r--r--extensions/ConfirmEdit/i18n/core/ksh.json23
-rw-r--r--extensions/ConfirmEdit/i18n/core/lrc.json12
-rw-r--r--extensions/ConfirmEdit/i18n/core/mk.json24
-rw-r--r--extensions/ConfirmEdit/i18n/core/mr.json24
-rw-r--r--extensions/ConfirmEdit/i18n/core/nds-nl.json18
-rw-r--r--extensions/ConfirmEdit/i18n/core/pl.json28
-rw-r--r--extensions/ConfirmEdit/i18n/core/ps.json11
-rw-r--r--extensions/ConfirmEdit/i18n/core/pt-br.json28
-rw-r--r--extensions/ConfirmEdit/i18n/core/qqq.json33
-rw-r--r--extensions/ConfirmEdit/i18n/core/roa-tara.json24
-rw-r--r--extensions/ConfirmEdit/i18n/core/sah.json22
-rw-r--r--extensions/ConfirmEdit/i18n/core/scn.json20
-rw-r--r--extensions/ConfirmEdit/i18n/core/sv.json32
-rw-r--r--extensions/ConfirmEdit/i18n/core/te.json22
-rw-r--r--extensions/ConfirmEdit/i18n/core/th.json17
-rw-r--r--extensions/ConfirmEdit/i18n/core/uk.json30
-rw-r--r--extensions/ConfirmEdit/i18n/core/yi.json12
-rw-r--r--extensions/ConfirmEdit/i18n/core/yue.json15
-rw-r--r--extensions/ConfirmEdit/i18n/core/zh-hans.json30
-rw-r--r--extensions/ConfirmEdit/i18n/core/zh-hant.json29
-rw-r--r--extensions/ConfirmEdit/i18n/cs.json (renamed from extensions/ConfirmEdit/i18n/core/cs.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/cv.json8
-rw-r--r--extensions/ConfirmEdit/i18n/cy.json (renamed from extensions/ConfirmEdit/i18n/core/cy.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/da.json (renamed from extensions/ConfirmEdit/i18n/core/da.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/de-formal.json (renamed from extensions/ConfirmEdit/i18n/core/de-formal.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/de.json (renamed from extensions/ConfirmEdit/i18n/core/de.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/diq.json (renamed from extensions/ConfirmEdit/i18n/core/diq.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/dsb.json (renamed from extensions/ConfirmEdit/i18n/core/dsb.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ee.json (renamed from extensions/ConfirmEdit/i18n/core/ee.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/el.json32
-rw-r--r--extensions/ConfirmEdit/i18n/en-ca.json (renamed from extensions/ConfirmEdit/i18n/core/en-ca.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/en-gb.json (renamed from extensions/ConfirmEdit/i18n/core/en-gb.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/en.json (renamed from extensions/ConfirmEdit/i18n/core/en.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/eo.json (renamed from extensions/ConfirmEdit/i18n/core/eo.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/es.json (renamed from extensions/ConfirmEdit/i18n/core/es.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/et.json (renamed from extensions/ConfirmEdit/i18n/core/et.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/eu.json (renamed from extensions/ConfirmEdit/i18n/core/eu.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/fa.json (renamed from extensions/ConfirmEdit/i18n/core/fa.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/ar.json17
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/as.json15
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/bg.json14
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/bn.json14
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/ca.json15
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/cdo.json4
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/cs.json16
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/de.json17
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/el.json17
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/en.json13
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/es.json19
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/eu.json14
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/fi.json17
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/fr.json21
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/gl.json16
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/he.json16
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/hi.json13
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/hr.json15
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/hu.json15
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/id.json15
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/it.json18
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/ksh.json15
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/lrc.json8
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/lt.json8
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/mk.json15
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/ml.json15
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/mr.json14
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/pms.json15
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/ps.json9
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/pt-br.json16
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/qqq.json18
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/roa-tara.json14
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/sah.json13
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/sl.json14
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/sr-ec.json19
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/sr-el.json17
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/sv.json17
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/te.json12
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/vi.json17
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/yi.json9
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/yue.json8
-rw-r--r--extensions/ConfirmEdit/i18n/fancy/zh-hans.json17
-rw-r--r--extensions/ConfirmEdit/i18n/fi.json32
-rw-r--r--extensions/ConfirmEdit/i18n/fo.json (renamed from extensions/ConfirmEdit/i18n/core/fo.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/fr.json (renamed from extensions/ConfirmEdit/i18n/core/fr.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/frp.json (renamed from extensions/ConfirmEdit/i18n/core/frp.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/frr.json8
-rw-r--r--extensions/ConfirmEdit/i18n/fur.json (renamed from extensions/ConfirmEdit/i18n/core/fur.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/fy.json15
-rw-r--r--extensions/ConfirmEdit/i18n/ga.json (renamed from extensions/ConfirmEdit/i18n/core/ga.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/gl.json (renamed from extensions/ConfirmEdit/i18n/core/gl.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/gom-deva.json8
-rw-r--r--extensions/ConfirmEdit/i18n/grc.json (renamed from extensions/ConfirmEdit/i18n/core/grc.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/gsw.json (renamed from extensions/ConfirmEdit/i18n/core/gsw.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/gu.json (renamed from extensions/ConfirmEdit/i18n/core/gu.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/he.json (renamed from extensions/ConfirmEdit/i18n/core/he.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/hi.json26
-rw-r--r--extensions/ConfirmEdit/i18n/hr.json28
-rw-r--r--extensions/ConfirmEdit/i18n/hsb.json (renamed from extensions/ConfirmEdit/i18n/core/hsb.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ht.json (renamed from extensions/ConfirmEdit/i18n/core/ht.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/hu.json26
-rw-r--r--extensions/ConfirmEdit/i18n/hy.json (renamed from extensions/ConfirmEdit/i18n/core/hy.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ia.json (renamed from extensions/ConfirmEdit/i18n/core/ia.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/id.json (renamed from extensions/ConfirmEdit/i18n/core/id.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ilo.json (renamed from extensions/ConfirmEdit/i18n/core/ilo.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/is.json (renamed from extensions/ConfirmEdit/i18n/core/is.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/it.json (renamed from extensions/ConfirmEdit/i18n/core/it.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ja.json (renamed from extensions/ConfirmEdit/i18n/core/ja.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/jut.json (renamed from extensions/ConfirmEdit/i18n/core/jut.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/jv.json (renamed from extensions/ConfirmEdit/i18n/core/jv.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ka.json (renamed from extensions/ConfirmEdit/i18n/core/ka.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/kaa.json (renamed from extensions/ConfirmEdit/i18n/core/kaa.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/khw.json8
-rw-r--r--extensions/ConfirmEdit/i18n/kk-arab.json (renamed from extensions/ConfirmEdit/i18n/core/kk-arab.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/kk-cyrl.json (renamed from extensions/ConfirmEdit/i18n/core/kk-cyrl.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/kk-latn.json (renamed from extensions/ConfirmEdit/i18n/core/kk-latn.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/km.json (renamed from extensions/ConfirmEdit/i18n/core/km.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/kn.json8
-rw-r--r--extensions/ConfirmEdit/i18n/ko.json28
-rw-r--r--extensions/ConfirmEdit/i18n/krc.json8
-rw-r--r--extensions/ConfirmEdit/i18n/ksh.json23
-rw-r--r--extensions/ConfirmEdit/i18n/ku-latn.json8
-rw-r--r--extensions/ConfirmEdit/i18n/kw.json (renamed from extensions/ConfirmEdit/i18n/core/kw.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ky.json (renamed from extensions/ConfirmEdit/i18n/core/ky.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/la.json (renamed from extensions/ConfirmEdit/i18n/core/la.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/lad.json (renamed from extensions/ConfirmEdit/i18n/core/lad.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/lb.json (renamed from extensions/ConfirmEdit/i18n/core/lb.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/li.json (renamed from extensions/ConfirmEdit/i18n/core/li.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/lo.json (renamed from extensions/ConfirmEdit/i18n/core/lo.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/lrc.json13
-rw-r--r--extensions/ConfirmEdit/i18n/lt.json (renamed from extensions/ConfirmEdit/i18n/core/lt.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/lv.json (renamed from extensions/ConfirmEdit/i18n/core/lv.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/mai.json14
-rw-r--r--extensions/ConfirmEdit/i18n/mg.json (renamed from extensions/ConfirmEdit/i18n/core/mg.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/min.json (renamed from extensions/ConfirmEdit/i18n/core/min.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/mk.json24
-rw-r--r--extensions/ConfirmEdit/i18n/ml.json (renamed from extensions/ConfirmEdit/i18n/core/ml.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/mn.json (renamed from extensions/ConfirmEdit/i18n/core/mn.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/mr.json25
-rw-r--r--extensions/ConfirmEdit/i18n/ms.json (renamed from extensions/ConfirmEdit/i18n/core/ms.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/mt.json (renamed from extensions/ConfirmEdit/i18n/core/mt.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/nah.json (renamed from extensions/ConfirmEdit/i18n/core/nah.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/nan.json (renamed from extensions/ConfirmEdit/i18n/core/nan.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/nap.json23
-rw-r--r--extensions/ConfirmEdit/i18n/nb.json (renamed from extensions/ConfirmEdit/i18n/core/nb.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/nds-nl.json18
-rw-r--r--extensions/ConfirmEdit/i18n/nds.json (renamed from extensions/ConfirmEdit/i18n/core/nds.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ne.json9
-rw-r--r--extensions/ConfirmEdit/i18n/nl-informal.json (renamed from extensions/ConfirmEdit/i18n/core/nl-informal.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/nl.json (renamed from extensions/ConfirmEdit/i18n/core/nl.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/nn.json (renamed from extensions/ConfirmEdit/i18n/core/nn.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/oc.json (renamed from extensions/ConfirmEdit/i18n/core/oc.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/or.json (renamed from extensions/ConfirmEdit/i18n/core/or.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/os.json8
-rw-r--r--extensions/ConfirmEdit/i18n/pa.json8
-rw-r--r--extensions/ConfirmEdit/i18n/pam.json (renamed from extensions/ConfirmEdit/i18n/core/pam.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/pdc.json (renamed from extensions/ConfirmEdit/i18n/core/pdc.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/pfl.json8
-rw-r--r--extensions/ConfirmEdit/i18n/pl.json29
-rw-r--r--extensions/ConfirmEdit/i18n/pms.json (renamed from extensions/ConfirmEdit/i18n/core/pms.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/pnb.json (renamed from extensions/ConfirmEdit/i18n/core/pnb.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/ps.json12
-rw-r--r--extensions/ConfirmEdit/i18n/pt-br.json29
-rw-r--r--extensions/ConfirmEdit/i18n/pt.json (renamed from extensions/ConfirmEdit/i18n/core/pt.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/qqq.json33
-rw-r--r--extensions/ConfirmEdit/i18n/qu.json (renamed from extensions/ConfirmEdit/i18n/core/qu.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/questy/zh-hans.json17
-rw-r--r--extensions/ConfirmEdit/i18n/ro.json (renamed from extensions/ConfirmEdit/i18n/core/ro.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/roa-tara.json24
-rw-r--r--extensions/ConfirmEdit/i18n/ru.json (renamed from extensions/ConfirmEdit/i18n/core/ru.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/rue.json (renamed from extensions/ConfirmEdit/i18n/core/rue.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/sa.json (renamed from extensions/ConfirmEdit/i18n/core/sa.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/sah.json23
-rw-r--r--extensions/ConfirmEdit/i18n/scn.json22
-rw-r--r--extensions/ConfirmEdit/i18n/sco.json (renamed from extensions/ConfirmEdit/i18n/core/sco.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/sh.json (renamed from extensions/ConfirmEdit/i18n/core/sh.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/shn.json8
-rw-r--r--extensions/ConfirmEdit/i18n/si.json (renamed from extensions/ConfirmEdit/i18n/core/si.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/sk.json (renamed from extensions/ConfirmEdit/i18n/core/sk.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/sl.json (renamed from extensions/ConfirmEdit/i18n/core/sl.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/sq.json (renamed from extensions/ConfirmEdit/i18n/core/sq.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/sr-ec.json (renamed from extensions/ConfirmEdit/i18n/core/sr-ec.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/sr-el.json (renamed from extensions/ConfirmEdit/i18n/core/sr-el.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/stq.json (renamed from extensions/ConfirmEdit/i18n/core/stq.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/su.json (renamed from extensions/ConfirmEdit/i18n/core/su.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/sv.json33
-rw-r--r--extensions/ConfirmEdit/i18n/sw.json (renamed from extensions/ConfirmEdit/i18n/core/sw.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/szl.json8
-rw-r--r--extensions/ConfirmEdit/i18n/ta.json (renamed from extensions/ConfirmEdit/i18n/core/ta.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/tcy.json8
-rw-r--r--extensions/ConfirmEdit/i18n/te.json24
-rw-r--r--extensions/ConfirmEdit/i18n/tg-cyrl.json (renamed from extensions/ConfirmEdit/i18n/core/tg-cyrl.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/tg-latn.json (renamed from extensions/ConfirmEdit/i18n/core/tg-latn.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/th.json19
-rw-r--r--extensions/ConfirmEdit/i18n/tk.json (renamed from extensions/ConfirmEdit/i18n/core/tk.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/tl.json (renamed from extensions/ConfirmEdit/i18n/core/tl.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/tr.json (renamed from extensions/ConfirmEdit/i18n/core/tr.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/tru.json (renamed from extensions/ConfirmEdit/i18n/core/tru.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/uk.json31
-rw-r--r--extensions/ConfirmEdit/i18n/ur.json8
-rw-r--r--extensions/ConfirmEdit/i18n/vec.json (renamed from extensions/ConfirmEdit/i18n/core/vec.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/vi.json (renamed from extensions/ConfirmEdit/i18n/core/vi.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/vo.json (renamed from extensions/ConfirmEdit/i18n/core/vo.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/vro.json8
-rw-r--r--extensions/ConfirmEdit/i18n/wa.json (renamed from extensions/ConfirmEdit/i18n/core/wa.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/yi.json13
-rw-r--r--extensions/ConfirmEdit/i18n/yo.json (renamed from extensions/ConfirmEdit/i18n/core/yo.json)0
-rw-r--r--extensions/ConfirmEdit/i18n/yue.json20
-rw-r--r--extensions/ConfirmEdit/i18n/zh-hans.json31
-rw-r--r--extensions/ConfirmEdit/i18n/zh-hant.json31
-rw-r--r--extensions/ConfirmEdit/includes/CaptchaStore.php (renamed from extensions/ConfirmEdit/CaptchaStore.php)4
-rw-r--r--extensions/ConfirmEdit/includes/ConfirmEditHooks.php149
-rw-r--r--extensions/ConfirmEdit/includes/specials/SpecialCaptcha.php22
-rw-r--r--extensions/ConfirmEdit/tests/QuestyCaptchaTest.php49
-rw-r--r--extensions/Gadgets/GadgetHooks.php9
-rw-r--r--extensions/Gadgets/Gadgets.alias.php22
-rw-r--r--extensions/Gadgets/Gadgets.i18n.php35
-rw-r--r--extensions/Gadgets/Gadgets.php68
-rw-r--r--extensions/Gadgets/Gadgets_body.php14
-rw-r--r--extensions/Gadgets/SpecialGadgets.php7
-rw-r--r--extensions/Gadgets/api/ApiQueryGadgetCategories.php21
-rw-r--r--extensions/Gadgets/api/ApiQueryGadgets.php29
-rw-r--r--extensions/Gadgets/extension.json57
-rw-r--r--extensions/Gadgets/i18n/ar.json12
-rw-r--r--extensions/Gadgets/i18n/awa.json10
-rw-r--r--extensions/Gadgets/i18n/ca.json6
-rw-r--r--extensions/Gadgets/i18n/de.json15
-rw-r--r--extensions/Gadgets/i18n/en.json60
-rw-r--r--extensions/Gadgets/i18n/es.json5
-rw-r--r--extensions/Gadgets/i18n/gl.json13
-rw-r--r--extensions/Gadgets/i18n/ilo.json36
-rw-r--r--extensions/Gadgets/i18n/ja.json21
-rw-r--r--extensions/Gadgets/i18n/krc.json3
-rw-r--r--extensions/Gadgets/i18n/ksh.json9
-rw-r--r--extensions/Gadgets/i18n/lb.json4
-rw-r--r--extensions/Gadgets/i18n/lrc.json6
-rw-r--r--extensions/Gadgets/i18n/mai.json22
-rw-r--r--extensions/Gadgets/i18n/mk.json20
-rw-r--r--extensions/Gadgets/i18n/nds-nl.json4
-rw-r--r--extensions/Gadgets/i18n/pa.json4
-rw-r--r--extensions/Gadgets/i18n/pms.json12
-rw-r--r--extensions/Gadgets/i18n/pt-br.json3
-rw-r--r--extensions/Gadgets/i18n/pt.json3
-rw-r--r--extensions/Gadgets/i18n/qqq.json25
-rw-r--r--extensions/Gadgets/i18n/ru.json10
-rw-r--r--extensions/Gadgets/i18n/sv.json20
-rw-r--r--extensions/Gadgets/i18n/vi.json13
-rw-r--r--extensions/Gadgets/i18n/zh-hans.json26
-rw-r--r--extensions/Gadgets/i18n/zh-hant.json5
-rw-r--r--extensions/ImageMap/ImageMap.i18n.php35
-rw-r--r--extensions/ImageMap/ImageMap.php51
-rw-r--r--extensions/ImageMap/ImageMap_body.php9
-rw-r--r--extensions/ImageMap/extension.json23
-rw-r--r--extensions/ImageMap/i18n/ce.json2
-rw-r--r--extensions/ImageMap/i18n/diq.json4
-rw-r--r--extensions/ImageMap/i18n/lrc.json3
-rw-r--r--extensions/ImageMap/i18n/nl.json2
-rw-r--r--extensions/ImageMap/i18n/pt-br.json5
-rw-r--r--extensions/ImageMap/i18n/qqq.json2
-rw-r--r--extensions/ImageMap/i18n/sr-ec.json14
-rw-r--r--extensions/ImageMap/i18n/sr-el.json14
-rw-r--r--extensions/ImageMap/i18n/sv.json2
-rw-r--r--extensions/InputBox/InputBox.classes.php67
-rw-r--r--extensions/InputBox/InputBox.i18n.php35
-rw-r--r--extensions/InputBox/InputBox.php71
-rw-r--r--extensions/InputBox/extension.json50
-rw-r--r--extensions/InputBox/i18n/ang.json9
-rw-r--r--extensions/InputBox/i18n/ar.json7
-rw-r--r--extensions/InputBox/i18n/arq.json8
-rw-r--r--extensions/InputBox/i18n/bcc.json5
-rw-r--r--extensions/InputBox/i18n/bgn.json9
-rw-r--r--extensions/InputBox/i18n/fi.json5
-rw-r--r--extensions/InputBox/i18n/gl.json6
-rw-r--r--extensions/InputBox/i18n/gom-deva.json8
-rw-r--r--extensions/InputBox/i18n/hu.json6
-rw-r--r--extensions/InputBox/i18n/ia.json2
-rw-r--r--extensions/InputBox/i18n/is.json1
-rw-r--r--extensions/InputBox/i18n/kn.json4
-rw-r--r--extensions/InputBox/i18n/ksh.json3
-rw-r--r--extensions/InputBox/i18n/lrc.json1
-rw-r--r--extensions/InputBox/i18n/mai.json8
-rw-r--r--extensions/InputBox/i18n/nap.json4
-rw-r--r--extensions/InputBox/i18n/pfl.json8
-rw-r--r--extensions/InputBox/i18n/pt.json5
-rw-r--r--extensions/InputBox/i18n/qqq.json5
-rw-r--r--extensions/InputBox/i18n/roa-tara.json3
-rw-r--r--extensions/InputBox/i18n/shn.json8
-rw-r--r--extensions/InputBox/i18n/sr-ec.json6
-rw-r--r--extensions/InputBox/i18n/sr-el.json6
-rw-r--r--extensions/InputBox/i18n/th.json8
-rw-r--r--extensions/InputBox/i18n/tt-cyrl.json8
-rw-r--r--extensions/InputBox/i18n/ur.json4
-rw-r--r--extensions/InputBox/i18n/vi.json2
-rw-r--r--extensions/InputBox/i18n/yi.json1
-rw-r--r--extensions/InputBox/i18n/yue.json14
-rw-r--r--extensions/InputBox/resources/ext.inputBox.js29
-rw-r--r--extensions/InputBox/resources/ext.inputBox.styles.css7
-rw-r--r--extensions/Interwiki/Interwiki.alias.php15
-rw-r--r--extensions/Interwiki/Interwiki.i18n.php35
-rw-r--r--extensions/Interwiki/Interwiki.php136
-rw-r--r--extensions/Interwiki/Interwiki_body.php14
-rw-r--r--extensions/Interwiki/Interwiki_hooks.php54
-rw-r--r--extensions/Interwiki/extension.json59
-rw-r--r--extensions/Interwiki/i18n/af.json5
-rw-r--r--extensions/Interwiki/i18n/ar.json3
-rw-r--r--extensions/Interwiki/i18n/arz.json3
-rw-r--r--extensions/Interwiki/i18n/ast.json3
-rw-r--r--extensions/Interwiki/i18n/ba.json5
-rw-r--r--extensions/Interwiki/i18n/be-tarask.json19
-rw-r--r--extensions/Interwiki/i18n/be.json1
-rw-r--r--extensions/Interwiki/i18n/bg.json1
-rw-r--r--extensions/Interwiki/i18n/br.json6
-rw-r--r--extensions/Interwiki/i18n/bs.json3
-rw-r--r--extensions/Interwiki/i18n/ca.json5
-rw-r--r--extensions/Interwiki/i18n/ce.json15
-rw-r--r--extensions/Interwiki/i18n/cs.json10
-rw-r--r--extensions/Interwiki/i18n/cv.json9
-rw-r--r--extensions/Interwiki/i18n/cy.json1
-rw-r--r--extensions/Interwiki/i18n/da.json4
-rw-r--r--extensions/Interwiki/i18n/de.json2
-rw-r--r--extensions/Interwiki/i18n/diq.json1
-rw-r--r--extensions/Interwiki/i18n/dsb.json5
-rw-r--r--extensions/Interwiki/i18n/el.json12
-rw-r--r--extensions/Interwiki/i18n/en-gb.json59
-rw-r--r--extensions/Interwiki/i18n/en.json2
-rw-r--r--extensions/Interwiki/i18n/eo.json5
-rw-r--r--extensions/Interwiki/i18n/es.json16
-rw-r--r--extensions/Interwiki/i18n/et.json25
-rw-r--r--extensions/Interwiki/i18n/eu.json3
-rw-r--r--extensions/Interwiki/i18n/fa.json3
-rw-r--r--extensions/Interwiki/i18n/fi.json2
-rw-r--r--extensions/Interwiki/i18n/fr.json9
-rw-r--r--extensions/Interwiki/i18n/frp.json2
-rw-r--r--extensions/Interwiki/i18n/fy.json7
-rw-r--r--extensions/Interwiki/i18n/gl.json51
-rw-r--r--extensions/Interwiki/i18n/gsw.json5
-rw-r--r--extensions/Interwiki/i18n/he.json4
-rw-r--r--extensions/Interwiki/i18n/hr.json9
-rw-r--r--extensions/Interwiki/i18n/hsb.json5
-rw-r--r--extensions/Interwiki/i18n/hu.json1
-rw-r--r--extensions/Interwiki/i18n/ia.json5
-rw-r--r--extensions/Interwiki/i18n/id.json9
-rw-r--r--extensions/Interwiki/i18n/ilo.json5
-rw-r--r--extensions/Interwiki/i18n/it.json10
-rw-r--r--extensions/Interwiki/i18n/ja.json24
-rw-r--r--extensions/Interwiki/i18n/ka.json3
-rw-r--r--extensions/Interwiki/i18n/kk-cyrl.json2
-rw-r--r--extensions/Interwiki/i18n/km.json2
-rw-r--r--extensions/Interwiki/i18n/ko.json8
-rw-r--r--extensions/Interwiki/i18n/ksh.json5
-rw-r--r--extensions/Interwiki/i18n/lb.json8
-rw-r--r--extensions/Interwiki/i18n/lt.json7
-rw-r--r--extensions/Interwiki/i18n/mg.json2
-rw-r--r--extensions/Interwiki/i18n/min.json2
-rw-r--r--extensions/Interwiki/i18n/mk.json6
-rw-r--r--extensions/Interwiki/i18n/ml.json5
-rw-r--r--extensions/Interwiki/i18n/ms.json16
-rw-r--r--extensions/Interwiki/i18n/mt.json2
-rw-r--r--extensions/Interwiki/i18n/nb.json5
-rw-r--r--extensions/Interwiki/i18n/nds-nl.json2
-rw-r--r--extensions/Interwiki/i18n/nl.json9
-rw-r--r--extensions/Interwiki/i18n/nn.json53
-rw-r--r--extensions/Interwiki/i18n/oc.json8
-rw-r--r--extensions/Interwiki/i18n/pa.json15
-rw-r--r--extensions/Interwiki/i18n/pms.json5
-rw-r--r--extensions/Interwiki/i18n/pt-br.json10
-rw-r--r--extensions/Interwiki/i18n/pt.json2
-rw-r--r--extensions/Interwiki/i18n/qqq.json12
-rw-r--r--extensions/Interwiki/i18n/ro.json2
-rw-r--r--extensions/Interwiki/i18n/roa-tara.json11
-rw-r--r--extensions/Interwiki/i18n/ru.json18
-rw-r--r--extensions/Interwiki/i18n/sa.json3
-rw-r--r--extensions/Interwiki/i18n/sco.json21
-rw-r--r--extensions/Interwiki/i18n/si.json2
-rw-r--r--extensions/Interwiki/i18n/sk.json3
-rw-r--r--extensions/Interwiki/i18n/sl.json9
-rw-r--r--extensions/Interwiki/i18n/sr-ec.json24
-rw-r--r--extensions/Interwiki/i18n/sr-el.json24
-rw-r--r--extensions/Interwiki/i18n/sv.json5
-rw-r--r--extensions/Interwiki/i18n/te.json1
-rw-r--r--extensions/Interwiki/i18n/tl.json5
-rw-r--r--extensions/Interwiki/i18n/tr.json9
-rw-r--r--extensions/Interwiki/i18n/uk.json37
-rw-r--r--extensions/Interwiki/i18n/ur.json2
-rw-r--r--extensions/Interwiki/i18n/vi.json5
-rw-r--r--extensions/Interwiki/i18n/zh-hans.json12
-rw-r--r--extensions/Interwiki/i18n/zh-hant.json76
-rw-r--r--extensions/LocalisationUpdate/LocalisationUpdate.class.php18
-rw-r--r--extensions/LocalisationUpdate/LocalisationUpdate.php21
-rw-r--r--extensions/LocalisationUpdate/extension.json55
-rw-r--r--extensions/LocalisationUpdate/fetcher/GitHubFetcher.php2
-rw-r--r--extensions/LocalisationUpdate/finder/Finder.php49
-rw-r--r--extensions/LocalisationUpdate/i18n/qqq.json5
-rw-r--r--extensions/LocalisationUpdate/i18n/zh-hant.json5
-rw-r--r--extensions/LocalisationUpdate/reader/ReaderFactory.php4
-rw-r--r--extensions/LocalisationUpdate/tests/phpunit/finder/FinderTest.php23
-rw-r--r--extensions/LocalisationUpdate/update.php14
-rw-r--r--extensions/Nuke/Nuke.alias.php17
-rw-r--r--extensions/Nuke/Nuke.i18n.php35
-rw-r--r--extensions/Nuke/Nuke.php57
-rw-r--r--extensions/Nuke/Nuke_body.php24
-rw-r--r--extensions/Nuke/SpecialNuke.php2
-rw-r--r--extensions/Nuke/ext.nuke.js5
-rw-r--r--extensions/Nuke/extension.json50
-rw-r--r--extensions/Nuke/i18n/az.json7
-rw-r--r--extensions/Nuke/i18n/bcc.json5
-rw-r--r--extensions/Nuke/i18n/be-tarask.json6
-rw-r--r--extensions/Nuke/i18n/bn.json31
-rw-r--r--extensions/Nuke/i18n/ca.json5
-rw-r--r--extensions/Nuke/i18n/ce.json3
-rw-r--r--extensions/Nuke/i18n/cs.json1
-rw-r--r--extensions/Nuke/i18n/de.json1
-rw-r--r--extensions/Nuke/i18n/diq.json2
-rw-r--r--extensions/Nuke/i18n/en.json1
-rw-r--r--extensions/Nuke/i18n/es.json4
-rw-r--r--extensions/Nuke/i18n/et.json1
-rw-r--r--extensions/Nuke/i18n/gl.json4
-rw-r--r--extensions/Nuke/i18n/he.json3
-rw-r--r--extensions/Nuke/i18n/hi.json4
-rw-r--r--extensions/Nuke/i18n/it.json1
-rw-r--r--extensions/Nuke/i18n/ka.json5
-rw-r--r--extensions/Nuke/i18n/ko.json7
-rw-r--r--extensions/Nuke/i18n/ksh.json15
-rw-r--r--extensions/Nuke/i18n/lb.json1
-rw-r--r--extensions/Nuke/i18n/lt.json4
-rw-r--r--extensions/Nuke/i18n/mk.json1
-rw-r--r--extensions/Nuke/i18n/nl.json4
-rw-r--r--extensions/Nuke/i18n/pt.json8
-rw-r--r--extensions/Nuke/i18n/qqq.json6
-rw-r--r--extensions/Nuke/i18n/roa-tara.json4
-rw-r--r--extensions/Nuke/i18n/ru.json1
-rw-r--r--extensions/Nuke/i18n/sl.json1
-rw-r--r--extensions/Nuke/i18n/sr-ec.json4
-rw-r--r--extensions/Nuke/i18n/sr-el.json4
-rw-r--r--extensions/Nuke/i18n/sv.json4
-rw-r--r--extensions/Nuke/i18n/zh-hans.json5
-rw-r--r--extensions/Nuke/i18n/zh-hant.json11
-rw-r--r--extensions/ParserFunctions/Expr.php2
-rw-r--r--extensions/ParserFunctions/ParserFunctions.hooks.php68
-rw-r--r--extensions/ParserFunctions/ParserFunctions.i18n.magic.php24
-rw-r--r--extensions/ParserFunctions/ParserFunctions.i18n.php35
-rw-r--r--extensions/ParserFunctions/ParserFunctions.library.php2
-rw-r--r--extensions/ParserFunctions/ParserFunctions.php125
-rw-r--r--extensions/ParserFunctions/ParserFunctions_body.php102
-rw-r--r--extensions/ParserFunctions/extension.json48
-rw-r--r--extensions/ParserFunctions/i18n/ace.json9
-rw-r--r--extensions/ParserFunctions/i18n/arq.json12
-rw-r--r--extensions/ParserFunctions/i18n/az.json18
-rw-r--r--extensions/ParserFunctions/i18n/azb.json6
-rw-r--r--extensions/ParserFunctions/i18n/bgn.json11
-rw-r--r--extensions/ParserFunctions/i18n/ca.json2
-rw-r--r--extensions/ParserFunctions/i18n/de.json8
-rw-r--r--extensions/ParserFunctions/i18n/es.json11
-rw-r--r--extensions/ParserFunctions/i18n/et.json2
-rw-r--r--extensions/ParserFunctions/i18n/frr.json11
-rw-r--r--extensions/ParserFunctions/i18n/gom-deva.json12
-rw-r--r--extensions/ParserFunctions/i18n/id.json7
-rw-r--r--extensions/ParserFunctions/i18n/it.json11
-rw-r--r--extensions/ParserFunctions/i18n/ko.json17
-rw-r--r--extensions/ParserFunctions/i18n/ksh.json7
-rw-r--r--extensions/ParserFunctions/i18n/lrc.json11
-rw-r--r--extensions/ParserFunctions/i18n/lt.json6
-rw-r--r--extensions/ParserFunctions/i18n/mai.json10
-rw-r--r--extensions/ParserFunctions/i18n/nap.json11
-rw-r--r--extensions/ParserFunctions/i18n/ne.json7
-rw-r--r--extensions/ParserFunctions/i18n/pfl.json11
-rw-r--r--extensions/ParserFunctions/i18n/ps.json7
-rw-r--r--extensions/ParserFunctions/i18n/qqq.json5
-rw-r--r--extensions/ParserFunctions/i18n/rue.json5
-rw-r--r--extensions/ParserFunctions/i18n/shn.json9
-rw-r--r--extensions/ParserFunctions/i18n/sr-ec.json4
-rw-r--r--extensions/ParserFunctions/i18n/sr-el.json4
-rw-r--r--extensions/ParserFunctions/i18n/szl.json10
-rw-r--r--extensions/ParserFunctions/i18n/th.json5
-rw-r--r--extensions/ParserFunctions/i18n/ur.json9
-rw-r--r--extensions/ParserFunctions/i18n/yi.json3
-rw-r--r--extensions/ParserFunctions/i18n/yue.json8
-rw-r--r--extensions/ParserFunctions/i18n/zh-hans.json5
-rw-r--r--extensions/PdfHandler/Gemfile.lock79
-rw-r--r--extensions/PdfHandler/PdfHandler.i18n.php35
-rw-r--r--extensions/PdfHandler/PdfHandler.php74
-rw-r--r--extensions/PdfHandler/PdfHandler_body.php34
-rw-r--r--extensions/PdfHandler/extension.json45
-rw-r--r--extensions/PdfHandler/i18n/de.json4
-rw-r--r--extensions/PdfHandler/i18n/en.json6
-rw-r--r--extensions/PdfHandler/i18n/es.json7
-rw-r--r--extensions/PdfHandler/i18n/et.json4
-rw-r--r--extensions/PdfHandler/i18n/frc.json8
-rw-r--r--extensions/PdfHandler/i18n/he.json6
-rw-r--r--extensions/PdfHandler/i18n/ksh.json6
-rw-r--r--extensions/PdfHandler/i18n/ku-latn.json8
-rw-r--r--extensions/PdfHandler/i18n/lb.json1
-rw-r--r--extensions/PdfHandler/i18n/lrc.json2
-rw-r--r--extensions/PdfHandler/i18n/mk.json4
-rw-r--r--extensions/PdfHandler/i18n/pl.json5
-rw-r--r--extensions/PdfHandler/i18n/pt.json7
-rw-r--r--extensions/PdfHandler/i18n/qqq.json5
-rw-r--r--extensions/PdfHandler/i18n/sv.json1
-rw-r--r--extensions/PdfHandler/i18n/zh-hans.json7
-rw-r--r--extensions/PdfHandler/tests/browser/Gemfile.lock62
-rw-r--r--extensions/Poem/Poem.i18n.php35
-rw-r--r--extensions/Poem/Poem.php44
-rw-r--r--extensions/Poem/extension.json27
-rw-r--r--extensions/Renameuser/Renameuser.alias.php12
-rw-r--r--extensions/Renameuser/Renameuser.hooks.php2
-rw-r--r--extensions/Renameuser/Renameuser.i18n.php35
-rw-r--r--extensions/Renameuser/Renameuser.php64
-rw-r--r--extensions/Renameuser/RenameuserLogFormatter.php21
-rw-r--r--extensions/Renameuser/RenameuserSQL.php90
-rw-r--r--extensions/Renameuser/SpecialRenameuser.php4
-rw-r--r--extensions/Renameuser/extension.json57
-rw-r--r--extensions/Renameuser/i18n/ar.json4
-rw-r--r--extensions/Renameuser/i18n/bn.json7
-rw-r--r--extensions/Renameuser/i18n/crh-cyrl.json2
-rw-r--r--extensions/Renameuser/i18n/crh-latn.json2
-rw-r--r--extensions/Renameuser/i18n/eo.json5
-rw-r--r--extensions/Renameuser/i18n/fa.json5
-rw-r--r--extensions/Renameuser/i18n/fy.json5
-rw-r--r--extensions/Renameuser/i18n/he.json2
-rw-r--r--extensions/Renameuser/i18n/hr.json4
-rw-r--r--extensions/Renameuser/i18n/kk-cyrl.json31
-rw-r--r--extensions/Renameuser/i18n/krc.json3
-rw-r--r--extensions/Renameuser/i18n/ksh.json4
-rw-r--r--extensions/Renameuser/i18n/lrc.json17
-rw-r--r--extensions/Renameuser/i18n/ps.json1
-rw-r--r--extensions/Renameuser/i18n/qqq.json2
-rw-r--r--extensions/Renameuser/i18n/ru.json2
-rw-r--r--extensions/Renameuser/i18n/sr-ec.json4
-rw-r--r--extensions/Renameuser/i18n/sr-el.json5
-rw-r--r--extensions/Renameuser/i18n/uz.json4
-rw-r--r--extensions/Renameuser/i18n/zh-hant.json11
-rw-r--r--extensions/Renameuser/specials/SpecialRenameuser.php33
-rw-r--r--extensions/SpamBlacklist/BaseBlacklist.php8
-rw-r--r--extensions/SpamBlacklist/SpamBlacklist.i18n.php35
-rw-r--r--extensions/SpamBlacklist/SpamBlacklist.php86
-rw-r--r--extensions/SpamBlacklist/SpamBlacklistHooks.php28
-rw-r--r--extensions/SpamBlacklist/SpamBlacklist_body.php12
-rw-r--r--extensions/SpamBlacklist/api/ApiSpamBlacklist.php19
-rw-r--r--extensions/SpamBlacklist/extension.json69
-rw-r--r--extensions/SpamBlacklist/i18n/ar.json4
-rw-r--r--extensions/SpamBlacklist/i18n/bcc.json4
-rw-r--r--extensions/SpamBlacklist/i18n/bg.json6
-rw-r--r--extensions/SpamBlacklist/i18n/de.json4
-rw-r--r--extensions/SpamBlacklist/i18n/en.json39
-rw-r--r--extensions/SpamBlacklist/i18n/fa.json15
-rw-r--r--extensions/SpamBlacklist/i18n/he.json5
-rw-r--r--extensions/SpamBlacklist/i18n/ja.json5
-rw-r--r--extensions/SpamBlacklist/i18n/kk-cyrl.json6
-rw-r--r--extensions/SpamBlacklist/i18n/ksh.json10
-rw-r--r--extensions/SpamBlacklist/i18n/lrc.json4
-rw-r--r--extensions/SpamBlacklist/i18n/mk.json5
-rw-r--r--extensions/SpamBlacklist/i18n/mr.json3
-rw-r--r--extensions/SpamBlacklist/i18n/pt-br.json3
-rw-r--r--extensions/SpamBlacklist/i18n/pt.json3
-rw-r--r--extensions/SpamBlacklist/i18n/qqq.json10
-rw-r--r--extensions/SpamBlacklist/i18n/roa-tara.json5
-rw-r--r--extensions/SpamBlacklist/i18n/ru.json3
-rw-r--r--extensions/SpamBlacklist/i18n/sv.json5
-rw-r--r--extensions/SpamBlacklist/i18n/zh-hans.json14
-rw-r--r--extensions/SpamBlacklist/i18n/zh-hant.json4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/README6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiLocalModule.php11
-rw-r--r--extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiModule.php12
-rw-r--r--extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php159
-rw-r--r--extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.i18n.php35
-rw-r--r--extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.langs.php236
-rw-r--r--extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php98
-rw-r--r--extensions/SyntaxHighlight_GeSHi/extension.json53
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/contrib/aliased.php122
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/contrib/cssgen.php464
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/contrib/cssgen2.php59
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/contrib/example.php217
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/contrib/langcheck.php778
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/contrib/langwiz.php1153
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/CHANGES59
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/COPYING39
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/THANKS27
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/TODO2
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/api/__filesource/fsource_geshi_core_geshi.php.html2
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex.html2
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex_geshi.html2
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/GeSHi.html6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/_geshi.php.html4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.html8
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt12
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi.php55
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/4cs.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502kickass.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/68000devpac.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/abap.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript3.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/ada.php7
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/aimms.php316
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/algol68.php7
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/apache.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/applescript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/apt_sources.php17
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/arm.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/asm.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/asp.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/asymptote.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/autohotkey.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoit.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/avisynth.php3
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/awk.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/bascomavr.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/bash.php70
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/bf.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/blitzbasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/bnf.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/boo.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_loadrunner.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_winapi.php870
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfm.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/chaiscript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/chapel.php169
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cil.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/clojure.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cmake.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cobol.php495
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/coffeescript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php14
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-winapi.php836
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp.php14
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/csharp.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/css.php290
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/cuesheet.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/dart.php159
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcl.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcs.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/delphi.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/diff.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/div.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/dos.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/dot.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/ecmascript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/email.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/epc.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/erlang.php10
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/ezt.php134
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/f1.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/falcon.php3
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/fo.php3
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/fortran.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/freebasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/freeswitch.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/gambas.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/gdb.php8
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/genero.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/genie.php6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/gettext.php6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/glsl.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/gml.php649
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/go.php6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/groovy.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php58
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/haxe.php5
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/hicest.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/html4strict.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/html5.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/icon.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/idl.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/ini.php7
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/inno.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/intercal.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/io.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/ispfpanel.php165
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/java.php5
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/java5.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/javascript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/jcl.php155
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/jquery.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonec.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/latex.php6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/lb.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/ldif.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/lisp.php11
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/llvm.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/locobasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php20
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php19
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusformulas.php6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusscript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/lscript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php448
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/lua.php19
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/m68k.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/magiksf.php6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/make.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/mapbasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/matlab.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/mirc.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/mmix.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula2.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula3.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/mpasm.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/mxml.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/mysql.php5
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/nagios.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/nginx.php868
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/nimrod.php201
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/nsis.php40
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/objc.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/objeck.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml-brief.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/octave.php42
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/oobas.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php13
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/oz.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/parasail.php13
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/parigp.php234
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/pascal.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/pcre.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/per.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl6.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/pf.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/php-brief.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/php.php10
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/pic16.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/pike.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/pixelbender.php5
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/pli.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/plsql.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/postgresql.php5
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/postscript.php217
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/povray.php3
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/powerbuilder.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/powershell.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php12
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/progress.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/prolog.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/properties.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/providex.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/purebasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/pycon.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/pys60.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/python.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/qml.php351
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/racket.php964
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/rails.php6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/rbs.php224
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/rebol.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/reg.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/rexx.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/robots.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/ruby.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/rust.php235
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/sas.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/scala.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/scheme.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/scilab.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/scl.php148
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/smalltalk.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/smarty.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/spark.php7
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/sparql.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/sql.php9
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/standardml.php216
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/stonescript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/systemverilog.php10
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/tcl.php12
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/text.php8
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/thinbasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/tsql.php18
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/typoscript.php8
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/unicon.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/upc.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/urbi.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/uscript.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/vala.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/vb.php18
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbscript.php153
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/vedit.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/verilog.php62
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/vim.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualfoxpro.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualprolog.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/whitespace.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/whois.php6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/xml.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/xorg_conf.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/xpp.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/yaml.php12
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/z80.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php4
-rw-r--r--extensions/SyntaxHighlight_GeSHi/i18n/ksh.json6
-rw-r--r--extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json3
-rw-r--r--extensions/SyntaxHighlight_GeSHi/i18n/qqq.json7
-rw-r--r--extensions/SyntaxHighlight_GeSHi/maintenance/updateLanguageList.php54
-rw-r--r--extensions/TitleBlacklist/TitleBlacklist.hooks.php108
-rw-r--r--extensions/TitleBlacklist/TitleBlacklist.i18n.php35
-rw-r--r--extensions/TitleBlacklist/TitleBlacklist.library.php2
-rw-r--r--extensions/TitleBlacklist/TitleBlacklist.list.php25
-rw-r--r--extensions/TitleBlacklist/TitleBlacklist.php128
-rw-r--r--extensions/TitleBlacklist/api/ApiQueryTitleBlacklist.php21
-rw-r--r--extensions/TitleBlacklist/extension.json104
-rw-r--r--extensions/TitleBlacklist/i18n/ar.json11
-rw-r--r--extensions/TitleBlacklist/i18n/az.json8
-rw-r--r--extensions/TitleBlacklist/i18n/bg.json1
-rw-r--r--extensions/TitleBlacklist/i18n/cs.json8
-rw-r--r--extensions/TitleBlacklist/i18n/en.json48
-rw-r--r--extensions/TitleBlacklist/i18n/es.json8
-rw-r--r--extensions/TitleBlacklist/i18n/fi.json3
-rw-r--r--extensions/TitleBlacklist/i18n/he.json14
-rw-r--r--extensions/TitleBlacklist/i18n/hu.json2
-rw-r--r--extensions/TitleBlacklist/i18n/ja.json8
-rw-r--r--extensions/TitleBlacklist/i18n/ko.json8
-rw-r--r--extensions/TitleBlacklist/i18n/ksh.json15
-rw-r--r--extensions/TitleBlacklist/i18n/lrc.json11
-rw-r--r--extensions/TitleBlacklist/i18n/mk.json8
-rw-r--r--extensions/TitleBlacklist/i18n/nl.json5
-rw-r--r--extensions/TitleBlacklist/i18n/pt.json7
-rw-r--r--extensions/TitleBlacklist/i18n/qqq.json10
-rw-r--r--extensions/TitleBlacklist/i18n/sr-el.json2
-rw-r--r--extensions/TitleBlacklist/i18n/sv.json8
-rw-r--r--extensions/TitleBlacklist/i18n/uk.json6
-rw-r--r--extensions/TitleBlacklist/i18n/zh-hans.json8
-rw-r--r--extensions/TitleBlacklist/i18n/zh-hant.json12
-rw-r--r--extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php8
-rw-r--r--extensions/WikiEditor/WikiEditor.hooks.php320
-rw-r--r--extensions/WikiEditor/WikiEditor.i18n.php35
-rw-r--r--extensions/WikiEditor/WikiEditor.php445
-rw-r--r--extensions/WikiEditor/composer.json19
-rw-r--r--extensions/WikiEditor/extension.json420
-rw-r--r--extensions/WikiEditor/i18n/af.json28
-rw-r--r--extensions/WikiEditor/i18n/aln.json20
-rw-r--r--extensions/WikiEditor/i18n/an.json26
-rw-r--r--extensions/WikiEditor/i18n/ang.json2
-rw-r--r--extensions/WikiEditor/i18n/ar.json31
-rw-r--r--extensions/WikiEditor/i18n/arz.json19
-rw-r--r--extensions/WikiEditor/i18n/as.json31
-rw-r--r--extensions/WikiEditor/i18n/ast.json31
-rw-r--r--extensions/WikiEditor/i18n/az.json25
-rw-r--r--extensions/WikiEditor/i18n/azb.json6
-rw-r--r--extensions/WikiEditor/i18n/ba.json31
-rw-r--r--extensions/WikiEditor/i18n/bcc.json42
-rw-r--r--extensions/WikiEditor/i18n/be-tarask.json31
-rw-r--r--extensions/WikiEditor/i18n/be.json29
-rw-r--r--extensions/WikiEditor/i18n/bg.json30
-rw-r--r--extensions/WikiEditor/i18n/bjn.json21
-rw-r--r--extensions/WikiEditor/i18n/bn.json44
-rw-r--r--extensions/WikiEditor/i18n/bpy.json22
-rw-r--r--extensions/WikiEditor/i18n/br.json28
-rw-r--r--extensions/WikiEditor/i18n/bs.json25
-rw-r--r--extensions/WikiEditor/i18n/ca.json32
-rw-r--r--extensions/WikiEditor/i18n/ce.json53
-rw-r--r--extensions/WikiEditor/i18n/ckb.json25
-rw-r--r--extensions/WikiEditor/i18n/cs.json32
-rw-r--r--extensions/WikiEditor/i18n/cu.json13
-rw-r--r--extensions/WikiEditor/i18n/cv.json8
-rw-r--r--extensions/WikiEditor/i18n/cy.json31
-rw-r--r--extensions/WikiEditor/i18n/da.json31
-rw-r--r--extensions/WikiEditor/i18n/de-ch.json2
-rw-r--r--extensions/WikiEditor/i18n/de.json7
-rw-r--r--extensions/WikiEditor/i18n/diq.json31
-rw-r--r--extensions/WikiEditor/i18n/dsb.json31
-rw-r--r--extensions/WikiEditor/i18n/el.json31
-rw-r--r--extensions/WikiEditor/i18n/en.json29
-rw-r--r--extensions/WikiEditor/i18n/eo.json40
-rw-r--r--extensions/WikiEditor/i18n/es.json12
-rw-r--r--extensions/WikiEditor/i18n/et.json6
-rw-r--r--extensions/WikiEditor/i18n/eu.json25
-rw-r--r--extensions/WikiEditor/i18n/fa.json12
-rw-r--r--extensions/WikiEditor/i18n/fi.json31
-rw-r--r--extensions/WikiEditor/i18n/fr.json31
-rw-r--r--extensions/WikiEditor/i18n/frp.json31
-rw-r--r--extensions/WikiEditor/i18n/fy.json26
-rw-r--r--extensions/WikiEditor/i18n/gd.json22
-rw-r--r--extensions/WikiEditor/i18n/gl.json9
-rw-r--r--extensions/WikiEditor/i18n/gsw.json28
-rw-r--r--extensions/WikiEditor/i18n/gu.json30
-rw-r--r--extensions/WikiEditor/i18n/gv.json22
-rw-r--r--extensions/WikiEditor/i18n/he.json19
-rw-r--r--extensions/WikiEditor/i18n/hi.json28
-rw-r--r--extensions/WikiEditor/i18n/hr.json27
-rw-r--r--extensions/WikiEditor/i18n/hsb.json32
-rw-r--r--extensions/WikiEditor/i18n/hu.json28
-rw-r--r--extensions/WikiEditor/i18n/hy.json30
-rw-r--r--extensions/WikiEditor/i18n/ia.json29
-rw-r--r--extensions/WikiEditor/i18n/id.json34
-rw-r--r--extensions/WikiEditor/i18n/ilo.json31
-rw-r--r--extensions/WikiEditor/i18n/is.json26
-rw-r--r--extensions/WikiEditor/i18n/it.json10
-rw-r--r--extensions/WikiEditor/i18n/ja.json31
-rw-r--r--extensions/WikiEditor/i18n/jv.json27
-rw-r--r--extensions/WikiEditor/i18n/ka.json31
-rw-r--r--extensions/WikiEditor/i18n/kk-cyrl.json9
-rw-r--r--extensions/WikiEditor/i18n/km.json25
-rw-r--r--extensions/WikiEditor/i18n/ko.json33
-rw-r--r--extensions/WikiEditor/i18n/krc.json30
-rw-r--r--extensions/WikiEditor/i18n/ksh.json46
-rw-r--r--extensions/WikiEditor/i18n/ku-latn.json23
-rw-r--r--extensions/WikiEditor/i18n/kw.json24
-rw-r--r--extensions/WikiEditor/i18n/ky.json26
-rw-r--r--extensions/WikiEditor/i18n/la.json17
-rw-r--r--extensions/WikiEditor/i18n/lb.json26
-rw-r--r--extensions/WikiEditor/i18n/li.json28
-rw-r--r--extensions/WikiEditor/i18n/lrc.json55
-rw-r--r--extensions/WikiEditor/i18n/lt.json9
-rw-r--r--extensions/WikiEditor/i18n/lus.json24
-rw-r--r--extensions/WikiEditor/i18n/lv.json22
-rw-r--r--extensions/WikiEditor/i18n/min.json31
-rw-r--r--extensions/WikiEditor/i18n/mk.json9
-rw-r--r--extensions/WikiEditor/i18n/ml.json31
-rw-r--r--extensions/WikiEditor/i18n/mr.json29
-rw-r--r--extensions/WikiEditor/i18n/ms.json31
-rw-r--r--extensions/WikiEditor/i18n/mt.json30
-rw-r--r--extensions/WikiEditor/i18n/mzn.json6
-rw-r--r--extensions/WikiEditor/i18n/nah.json23
-rw-r--r--extensions/WikiEditor/i18n/nb.json31
-rw-r--r--extensions/WikiEditor/i18n/nds-nl.json41
-rw-r--r--extensions/WikiEditor/i18n/nl.json32
-rw-r--r--extensions/WikiEditor/i18n/nn.json22
-rw-r--r--extensions/WikiEditor/i18n/oc.json6
-rw-r--r--extensions/WikiEditor/i18n/om.json8
-rw-r--r--extensions/WikiEditor/i18n/or.json31
-rw-r--r--extensions/WikiEditor/i18n/os.json34
-rw-r--r--extensions/WikiEditor/i18n/pl.json9
-rw-r--r--extensions/WikiEditor/i18n/pms.json31
-rw-r--r--extensions/WikiEditor/i18n/pnb.json26
-rw-r--r--extensions/WikiEditor/i18n/ps.json4
-rw-r--r--extensions/WikiEditor/i18n/pt-br.json45
-rw-r--r--extensions/WikiEditor/i18n/pt.json15
-rw-r--r--extensions/WikiEditor/i18n/qqq.json33
-rw-r--r--extensions/WikiEditor/i18n/qu.json31
-rw-r--r--extensions/WikiEditor/i18n/ro.json31
-rw-r--r--extensions/WikiEditor/i18n/roa-tara.json7
-rw-r--r--extensions/WikiEditor/i18n/ru.json9
-rw-r--r--extensions/WikiEditor/i18n/rue.json26
-rw-r--r--extensions/WikiEditor/i18n/sa.json28
-rw-r--r--extensions/WikiEditor/i18n/sah.json25
-rw-r--r--extensions/WikiEditor/i18n/sc.json28
-rw-r--r--extensions/WikiEditor/i18n/scn.json25
-rw-r--r--extensions/WikiEditor/i18n/sdh.json28
-rw-r--r--extensions/WikiEditor/i18n/si.json31
-rw-r--r--extensions/WikiEditor/i18n/sk.json26
-rw-r--r--extensions/WikiEditor/i18n/sl.json7
-rw-r--r--extensions/WikiEditor/i18n/sq.json26
-rw-r--r--extensions/WikiEditor/i18n/sr-ec.json29
-rw-r--r--extensions/WikiEditor/i18n/sr-el.json29
-rw-r--r--extensions/WikiEditor/i18n/su.json21
-rw-r--r--extensions/WikiEditor/i18n/sv.json32
-rw-r--r--extensions/WikiEditor/i18n/sw.json26
-rw-r--r--extensions/WikiEditor/i18n/ta.json28
-rw-r--r--extensions/WikiEditor/i18n/te.json27
-rw-r--r--extensions/WikiEditor/i18n/th.json20
-rw-r--r--extensions/WikiEditor/i18n/tk.json25
-rw-r--r--extensions/WikiEditor/i18n/tl.json28
-rw-r--r--extensions/WikiEditor/i18n/tr.json27
-rw-r--r--extensions/WikiEditor/i18n/tt-cyrl.json25
-rw-r--r--extensions/WikiEditor/i18n/uk.json31
-rw-r--r--extensions/WikiEditor/i18n/ur.json5
-rw-r--r--extensions/WikiEditor/i18n/uz.json30
-rw-r--r--extensions/WikiEditor/i18n/vec.json31
-rw-r--r--extensions/WikiEditor/i18n/vi.json31
-rw-r--r--extensions/WikiEditor/i18n/yi.json6
-rw-r--r--extensions/WikiEditor/i18n/yo.json25
-rw-r--r--extensions/WikiEditor/i18n/yue.json23
-rw-r--r--extensions/WikiEditor/i18n/zh-hans.json17
-rw-r--r--extensions/WikiEditor/i18n/zh-hant.json43
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.css9
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.js81
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.less11
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js7
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js255
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.css25
-rw-r--r--extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.less20
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/button-sprite.svg3038
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-big.svg113
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg131
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg163
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-bold.svg131
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-indent.svg220
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic-i.svg104
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-italic.svg147
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-olist.svg202
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-small.svg114
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-subscript.svg114
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-superscript.svg114
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/format-ulist.svg204
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-file.svg206
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg191
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg148
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-link.svg94
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-newline.svg105
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg112
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg118
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-reference.svg88
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-signature.svg274
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-table.svg131
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg125
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/magnify-clip.pngbin204 -> 0 bytes
-rw-r--r--extensions/WikiEditor/modules/images/toolbar/search-replace.svg228
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.css112
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.css184
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js55
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.less234
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.css68
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.less60
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.html6
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.js59
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.less134
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.preview.css31
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.preview.js50
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.preview.less35
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.css39
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js132
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.publish.js30
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js772
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.css322
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js120
-rw-r--r--extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.less387
-rw-r--r--extensions/WikiEditor/tests/qunit/ext.wikiEditor.toolbar.test.js274
-rw-r--r--extensions/WikiEditor/tests/selenium/WikiDialogs_Links.php67
-rw-r--r--extensions/WikiEditor/tests/selenium/WikiDialogs_Links_Setup.php295
-rw-r--r--extensions/WikiEditor/tests/selenium/WikiEditorConstants.php84
-rw-r--r--extensions/WikiEditor/tests/selenium/WikiEditorSeleniumConfig.php24
-rw-r--r--extensions/WikiEditor/tests/selenium/WikiEditorTestSuite.php32
-rw-r--r--images/.htaccess2
-rw-r--r--img_auth.php7
-rw-r--r--img_auth.php52
-rw-r--r--includes/AjaxDispatcher.php9
-rw-r--r--includes/AutoLoader.php1194
-rw-r--r--includes/Autopromote.php4
-rw-r--r--includes/Block.php66
-rw-r--r--includes/Category.php11
-rw-r--r--includes/CategoryFinder.php1
-rw-r--r--includes/CategoryViewer.php119
-rw-r--r--includes/CdbCompat.php45
-rw-r--r--includes/ChangeTags.php931
-rw-r--r--includes/Collation.php4
-rw-r--r--includes/DefaultSettings.php502
-rw-r--r--includes/Defines.php29
-rw-r--r--includes/EditPage.php469
-rw-r--r--includes/Export.php37
-rw-r--r--includes/Feed.php14
-rw-r--r--includes/FeedUtils.php7
-rw-r--r--includes/FileDeleteForm.php4
-rw-r--r--includes/GitInfo.php2
-rw-r--r--includes/GlobalFunctions.php723
-rw-r--r--includes/Hooks.php20
-rw-r--r--includes/Html.php192
-rw-r--r--includes/HtmlFormatter.php18
-rw-r--r--includes/HttpFunctions.php98
-rw-r--r--includes/Import.php377
-rw-r--r--includes/LinkFilter.php2
-rw-r--r--includes/Linker.php172
-rw-r--r--includes/MWNamespace.php4
-rw-r--r--includes/MWTimestamp.php9
-rw-r--r--includes/MagicWord.php12
-rw-r--r--includes/MediaWiki.php116
-rw-r--r--includes/MediaWikiVersionFetcher.php3
-rw-r--r--includes/Message.php79
-rw-r--r--includes/MessageBlobStore.php14
-rw-r--r--includes/MimeMagic.php14
-rw-r--r--includes/MovePage.php204
-rw-r--r--includes/NoLocalSettings.php63
-rw-r--r--includes/OutputHandler.php3
-rw-r--r--includes/OutputPage.php266
-rw-r--r--includes/PHPVersionCheck.php157
-rw-r--r--includes/PHPVersionError.php110
-rw-r--r--includes/Preferences.php102
-rw-r--r--includes/PrefixSearch.php161
-rw-r--r--includes/ProtectionForm.php69
-rw-r--r--includes/Revision.php125
-rw-r--r--includes/RevisionList.php27
-rw-r--r--includes/Sanitizer.php109
-rw-r--r--includes/Setup.php100
-rw-r--r--includes/SiteConfiguration.php4
-rw-r--r--includes/SiteStats.php37
-rw-r--r--includes/StatCounter.php154
-rw-r--r--includes/Status.php252
-rw-r--r--includes/StreamFile.php5
-rw-r--r--includes/StubObject.php27
-rw-r--r--includes/TemplateParser.php201
-rw-r--r--includes/Title.php526
-rw-r--r--includes/TitleArray.php2
-rw-r--r--includes/User.php636
-rw-r--r--includes/UserArray.php23
-rw-r--r--includes/UserRightsProxy.php11
-rw-r--r--includes/WatchedItem.php10
-rw-r--r--includes/WebRequest.php66
-rw-r--r--includes/WebResponse.php42
-rw-r--r--includes/WebStart.php37
-rw-r--r--includes/WikiMap.php2
-rw-r--r--includes/Xml.php12
-rw-r--r--includes/ZhConversion.php10864
-rw-r--r--includes/actions/Action.php24
-rw-r--r--includes/actions/CreditsAction.php6
-rw-r--r--includes/actions/DeleteAction.php3
-rw-r--r--includes/actions/EditAction.php2
-rw-r--r--includes/actions/FormAction.php4
-rw-r--r--includes/actions/HistoryAction.php59
-rw-r--r--includes/actions/InfoAction.php53
-rw-r--r--includes/actions/RawAction.php2
-rw-r--r--includes/actions/RevertAction.php4
-rw-r--r--includes/actions/RevisiondeleteAction.php6
-rw-r--r--includes/actions/SpecialPageAction.php79
-rw-r--r--includes/actions/UnwatchAction.php2
-rw-r--r--includes/actions/WatchAction.php10
-rw-r--r--includes/api/ApiBase.php1084
-rw-r--r--includes/api/ApiBlock.php62
-rw-r--r--includes/api/ApiCheckToken.php81
-rw-r--r--includes/api/ApiClearHasMsg.php9
-rw-r--r--includes/api/ApiComparePages.php25
-rw-r--r--includes/api/ApiContinuationManager.php238
-rw-r--r--includes/api/ApiCreateAccount.php48
-rw-r--r--includes/api/ApiDelete.php29
-rw-r--r--includes/api/ApiDisabled.php16
-rw-r--r--includes/api/ApiEditPage.php143
-rw-r--r--includes/api/ApiEmailUser.php19
-rw-r--r--includes/api/ApiErrorFormatter.php303
-rw-r--r--includes/api/ApiExpandTemplates.php85
-rw-r--r--includes/api/ApiFeedContributions.php54
-rw-r--r--includes/api/ApiFeedRecentChanges.php35
-rw-r--r--includes/api/ApiFeedWatchlist.php90
-rw-r--r--includes/api/ApiFileRevert.php22
-rw-r--r--includes/api/ApiFormatBase.php332
-rw-r--r--includes/api/ApiFormatDbg.php11
-rw-r--r--includes/api/ApiFormatDump.php11
-rw-r--r--includes/api/ApiFormatFeedWrapper.php30
-rw-r--r--includes/api/ApiFormatJson.php96
-rw-r--r--includes/api/ApiFormatNone.php4
-rw-r--r--includes/api/ApiFormatPhp.php35
-rw-r--r--includes/api/ApiFormatRaw.php31
-rw-r--r--includes/api/ApiFormatTxt.php11
-rw-r--r--includes/api/ApiFormatWddx.php73
-rw-r--r--includes/api/ApiFormatXml.php302
-rw-r--r--includes/api/ApiFormatYaml.php4
-rw-r--r--includes/api/ApiHelp.php675
-rw-r--r--includes/api/ApiHelpParamValueMessage.php72
-rw-r--r--includes/api/ApiImageRotate.php42
-rw-r--r--includes/api/ApiImport.php35
-rw-r--r--includes/api/ApiLogin.php35
-rw-r--r--includes/api/ApiLogout.php19
-rw-r--r--includes/api/ApiMain.php541
-rw-r--r--includes/api/ApiManageTags.php107
-rw-r--r--includes/api/ApiMessage.php191
-rw-r--r--includes/api/ApiMove.php97
-rw-r--r--includes/api/ApiOpenSearch.php349
-rw-r--r--includes/api/ApiOptions.php37
-rw-r--r--includes/api/ApiPageSet.php337
-rw-r--r--includes/api/ApiParamInfo.php455
-rw-r--r--includes/api/ApiParse.php294
-rw-r--r--includes/api/ApiPatrol.php21
-rw-r--r--includes/api/ApiProtect.php46
-rw-r--r--includes/api/ApiPurge.php39
-rw-r--r--includes/api/ApiQuery.php117
-rw-r--r--includes/api/ApiQueryAllCategories.php42
-rw-r--r--includes/api/ApiQueryAllDeletedRevisions.php427
-rw-r--r--includes/api/ApiQueryAllImages.php99
-rw-r--r--includes/api/ApiQueryAllLinks.php95
-rw-r--r--includes/api/ApiQueryAllMessages.php43
-rw-r--r--includes/api/ApiQueryAllPages.php79
-rw-r--r--includes/api/ApiQueryAllUsers.php273
-rw-r--r--includes/api/ApiQueryBacklinks.php483
-rw-r--r--includes/api/ApiQueryBacklinksprop.php114
-rw-r--r--includes/api/ApiQueryBase.php42
-rw-r--r--includes/api/ApiQueryBlocks.php114
-rw-r--r--includes/api/ApiQueryCategories.php42
-rw-r--r--includes/api/ApiQueryCategoryInfo.php26
-rw-r--r--includes/api/ApiQueryCategoryMembers.php89
-rw-r--r--includes/api/ApiQueryContributors.php37
-rw-r--r--includes/api/ApiQueryDeletedRevisions.php304
-rw-r--r--includes/api/ApiQueryDeletedrevs.php158
-rw-r--r--includes/api/ApiQueryDisabled.php14
-rw-r--r--includes/api/ApiQueryDuplicateFiles.php33
-rw-r--r--includes/api/ApiQueryExtLinksUsage.php60
-rw-r--r--includes/api/ApiQueryExternalLinks.php31
-rw-r--r--includes/api/ApiQueryFileRepoInfo.php27
-rw-r--r--includes/api/ApiQueryFilearchive.php69
-rw-r--r--includes/api/ApiQueryIWBacklinks.php39
-rw-r--r--includes/api/ApiQueryIWLinks.php51
-rw-r--r--includes/api/ApiQueryImageInfo.php121
-rw-r--r--includes/api/ApiQueryImages.php28
-rw-r--r--includes/api/ApiQueryInfo.php122
-rw-r--r--includes/api/ApiQueryLangBacklinks.php40
-rw-r--r--includes/api/ApiQueryLangLinks.php55
-rw-r--r--includes/api/ApiQueryLinks.php43
-rw-r--r--includes/api/ApiQueryLogEvents.php184
-rw-r--r--includes/api/ApiQueryORM.php11
-rw-r--r--includes/api/ApiQueryPagePropNames.php22
-rw-r--r--includes/api/ApiQueryPageProps.php22
-rw-r--r--includes/api/ApiQueryPagesWithProp.php39
-rw-r--r--includes/api/ApiQueryPrefixSearch.php40
-rw-r--r--includes/api/ApiQueryProtectedTitles.php40
-rw-r--r--includes/api/ApiQueryQueryPage.php28
-rw-r--r--includes/api/ApiQueryRandom.php27
-rw-r--r--includes/api/ApiQueryRecentChanges.php122
-rw-r--r--includes/api/ApiQueryRevisions.php616
-rw-r--r--includes/api/ApiQueryRevisionsBase.php477
-rw-r--r--includes/api/ApiQuerySearch.php160
-rw-r--r--includes/api/ApiQuerySiteinfo.php260
-rw-r--r--includes/api/ApiQueryStashImageInfo.php52
-rw-r--r--includes/api/ApiQueryTags.php169
-rw-r--r--includes/api/ApiQueryTokens.php30
-rw-r--r--includes/api/ApiQueryUserContributions.php92
-rw-r--r--includes/api/ApiQueryUserInfo.php89
-rw-r--r--includes/api/ApiQueryUsers.php69
-rw-r--r--includes/api/ApiQueryWatchlist.php122
-rw-r--r--includes/api/ApiQueryWatchlistRaw.php36
-rw-r--r--includes/api/ApiResult.php1553
-rw-r--r--includes/api/ApiRevisionDelete.php36
-rw-r--r--includes/api/ApiRollback.php36
-rw-r--r--includes/api/ApiRsd.php44
-rw-r--r--includes/api/ApiSerializable.php47
-rw-r--r--includes/api/ApiSetNotificationTimestamp.php67
-rw-r--r--includes/api/ApiStashEdit.php412
-rw-r--r--includes/api/ApiTag.php177
-rw-r--r--includes/api/ApiTokens.php39
-rw-r--r--includes/api/ApiUnblock.php24
-rw-r--r--includes/api/ApiUndelete.php36
-rw-r--r--includes/api/ApiUpload.php138
-rw-r--r--includes/api/ApiUserrights.php56
-rw-r--r--includes/api/ApiWatch.php58
-rw-r--r--includes/api/i18n/ar.json28
-rw-r--r--includes/api/i18n/av.json8
-rw-r--r--includes/api/i18n/awa.json11
-rw-r--r--includes/api/i18n/be-tarask.json55
-rw-r--r--includes/api/i18n/bn.json8
-rw-r--r--includes/api/i18n/bs.json16
-rw-r--r--includes/api/i18n/ca.json43
-rw-r--r--includes/api/i18n/ce.json12
-rw-r--r--includes/api/i18n/cs.json223
-rw-r--r--includes/api/i18n/cv.json8
-rw-r--r--includes/api/i18n/de.json433
-rw-r--r--includes/api/i18n/el.json12
-rw-r--r--includes/api/i18n/en-gb.json156
-rw-r--r--includes/api/i18n/en.json1169
-rw-r--r--includes/api/i18n/es.json206
-rw-r--r--includes/api/i18n/eu.json57
-rw-r--r--includes/api/i18n/fa.json240
-rw-r--r--includes/api/i18n/fi.json10
-rw-r--r--includes/api/i18n/fr.json1054
-rw-r--r--includes/api/i18n/frc.json19
-rw-r--r--includes/api/i18n/fy.json15
-rw-r--r--includes/api/i18n/gl.json1030
-rw-r--r--includes/api/i18n/he.json180
-rw-r--r--includes/api/i18n/hsb.json8
-rw-r--r--includes/api/i18n/hu.json17
-rw-r--r--includes/api/i18n/ia.json28
-rw-r--r--includes/api/i18n/it.json31
-rw-r--r--includes/api/i18n/ja.json213
-rw-r--r--includes/api/i18n/jam.json8
-rw-r--r--includes/api/i18n/ko.json36
-rw-r--r--includes/api/i18n/ksh.json311
-rw-r--r--includes/api/i18n/ku-latn.json9
-rw-r--r--includes/api/i18n/lb.json94
-rw-r--r--includes/api/i18n/ln.json8
-rw-r--r--includes/api/i18n/lv.json8
-rw-r--r--includes/api/i18n/lzh.json8
-rw-r--r--includes/api/i18n/mg.json11
-rw-r--r--includes/api/i18n/mk.json398
-rw-r--r--includes/api/i18n/ms.json61
-rw-r--r--includes/api/i18n/nap.json10
-rw-r--r--includes/api/i18n/nb.json24
-rw-r--r--includes/api/i18n/nds.json8
-rw-r--r--includes/api/i18n/nl.json61
-rw-r--r--includes/api/i18n/oc.json17
-rw-r--r--includes/api/i18n/pa.json8
-rw-r--r--includes/api/i18n/pam.json31
-rw-r--r--includes/api/i18n/pl.json117
-rw-r--r--includes/api/i18n/ps.json29
-rw-r--r--includes/api/i18n/pt-br.json14
-rw-r--r--includes/api/i18n/pt.json104
-rw-r--r--includes/api/i18n/qqq.json1069
-rw-r--r--includes/api/i18n/roa-tara.json11
-rw-r--r--includes/api/i18n/ru.json55
-rw-r--r--includes/api/i18n/si.json70
-rw-r--r--includes/api/i18n/sr-ec.json24
-rw-r--r--includes/api/i18n/sr-el.json11
-rw-r--r--includes/api/i18n/sv.json372
-rw-r--r--includes/api/i18n/te.json8
-rw-r--r--includes/api/i18n/tl.json35
-rw-r--r--includes/api/i18n/tr.json40
-rw-r--r--includes/api/i18n/uk.json30
-rw-r--r--includes/api/i18n/vi.json156
-rw-r--r--includes/api/i18n/zh-hans.json782
-rw-r--r--includes/api/i18n/zh-hant.json244
-rw-r--r--includes/cache/BacklinkCache.php60
-rw-r--r--includes/cache/CacheDependency.php18
-rw-r--r--includes/cache/HTMLFileCache.php2
-rw-r--r--includes/cache/LinkBatch.php4
-rw-r--r--includes/cache/LinkCache.php17
-rw-r--r--includes/cache/LocalisationCache.php71
-rw-r--r--includes/cache/MessageCache.php36
-rw-r--r--includes/cache/ResourceFileCache.php9
-rw-r--r--includes/cache/UserCache.php2
-rw-r--r--includes/cache/bloom/BloomCache.php323
-rw-r--r--includes/cache/bloom/BloomCacheRedis.php370
-rw-r--r--includes/cache/bloom/BloomFilters.php79
-rw-r--r--includes/changes/ChangesFeed.php4
-rw-r--r--includes/changes/ChangesList.php6
-rw-r--r--includes/changes/EnhancedChangesList.php213
-rw-r--r--includes/changes/OldChangesList.php9
-rw-r--r--includes/changes/RecentChange.php39
-rw-r--r--includes/changetags/ChangeTagsList.php77
-rw-r--r--includes/changetags/ChangeTagsLogItem.php100
-rw-r--r--includes/changetags/ChangeTagsLogList.php89
-rw-r--r--includes/changetags/ChangeTagsRevisionItem.php58
-rw-r--r--includes/changetags/ChangeTagsRevisionList.php99
-rw-r--r--includes/config/ConfigException.php2
-rw-r--r--includes/config/GlobalVarConfig.php21
-rw-r--r--includes/content/AbstractContent.php27
-rw-r--r--includes/content/CodeContentHandler.php1
-rw-r--r--includes/content/Content.php7
-rw-r--r--includes/content/ContentHandler.php23
-rw-r--r--includes/content/JavaScriptContentHandler.php8
-rw-r--r--includes/content/JsonContent.php192
-rw-r--r--includes/content/JsonContentHandler.php24
-rw-r--r--includes/content/TextContent.php1
-rw-r--r--includes/content/WikitextContent.php7
-rw-r--r--includes/context/ContextSource.php17
-rw-r--r--includes/context/DerivativeContext.php18
-rw-r--r--includes/context/IContextSource.php38
-rw-r--r--includes/context/RequestContext.php88
-rw-r--r--includes/db/Database.php856
-rw-r--r--includes/db/DatabaseError.php6
-rw-r--r--includes/db/DatabaseMssql.php86
-rw-r--r--includes/db/DatabaseMysql.php7
-rw-r--r--includes/db/DatabaseMysqlBase.php125
-rw-r--r--includes/db/DatabaseMysqli.php14
-rw-r--r--includes/db/DatabaseOracle.php18
-rw-r--r--includes/db/DatabasePostgres.php23
-rw-r--r--includes/db/DatabaseSqlite.php163
-rw-r--r--includes/db/DatabaseUtility.php27
-rw-r--r--includes/db/IORMTable.php18
-rw-r--r--includes/db/LBFactory.php78
-rw-r--r--includes/db/LBFactoryMulti.php58
-rw-r--r--includes/db/LBFactorySingle.php20
-rw-r--r--includes/db/LoadBalancer.php390
-rw-r--r--includes/db/LoadMonitor.php4
-rw-r--r--includes/db/ORMTable.php50
-rw-r--r--includes/debug/MWDebug.php33
-rw-r--r--includes/debug/logger/LegacyLogger.php380
-rw-r--r--includes/debug/logger/LegacySpi.php59
-rw-r--r--includes/debug/logger/LoggerFactory.php121
-rw-r--r--includes/debug/logger/MonologSpi.php251
-rw-r--r--includes/debug/logger/NullSpi.php64
-rw-r--r--includes/debug/logger/Spi.php47
-rw-r--r--includes/debug/logger/monolog/LegacyFormatter.php48
-rw-r--r--includes/debug/logger/monolog/LegacyHandler.php243
-rw-r--r--includes/debug/logger/monolog/SyslogHandler.php96
-rw-r--r--includes/debug/logger/monolog/WikiProcessor.php47
-rw-r--r--includes/deferred/DeferredUpdates.php6
-rw-r--r--includes/deferred/HTMLCacheUpdate.php5
-rw-r--r--includes/deferred/LinksUpdate.php33
-rw-r--r--includes/deferred/SearchUpdate.php7
-rw-r--r--includes/deferred/SiteStatsUpdate.php9
-rw-r--r--includes/deferred/SqlDataUpdate.php85
-rw-r--r--includes/deferred/SquidUpdate.php43
-rw-r--r--includes/deferred/ViewCountUpdate.php119
-rw-r--r--includes/diff/DairikiDiff.php18
-rw-r--r--includes/diff/DiffFormatter.php4
-rw-r--r--includes/diff/DifferenceEngine.php61
-rw-r--r--includes/diff/TableDiffFormatter.php4
-rw-r--r--includes/exception/HttpError.php42
-rw-r--r--includes/exception/MWException.php23
-rw-r--r--includes/exception/MWExceptionHandler.php201
-rw-r--r--includes/exception/TimestampException.php (renamed from includes/TimestampException.php)0
-rw-r--r--includes/exception/UserNotLoggedIn.php10
-rw-r--r--includes/externalstore/ExternalStore.php2
-rw-r--r--includes/externalstore/ExternalStoreHttp.php2
-rw-r--r--includes/filebackend/FSFile.php7
-rw-r--r--includes/filebackend/FSFileBackend.php8
-rw-r--r--includes/filebackend/FileBackend.php4
-rw-r--r--includes/filebackend/FileBackendMultiWrite.php6
-rw-r--r--includes/filebackend/FileBackendStore.php87
-rw-r--r--includes/filebackend/FileOpBatch.php1
-rw-r--r--includes/filebackend/SwiftFileBackend.php81
-rw-r--r--includes/filebackend/TempFSFile.php3
-rw-r--r--includes/filebackend/filejournal/FileJournal.php4
-rw-r--r--includes/filebackend/lockmanager/DBLockManager.php4
-rw-r--r--includes/filebackend/lockmanager/LockManager.php10
-rw-r--r--includes/filebackend/lockmanager/LockManagerGroup.php16
-rw-r--r--includes/filebackend/lockmanager/MemcLockManager.php6
-rw-r--r--includes/filebackend/lockmanager/RedisLockManager.php2
-rw-r--r--includes/filerepo/FileRepo.php64
-rw-r--r--includes/filerepo/FileRepoStatus.php36
-rw-r--r--includes/filerepo/ForeignAPIRepo.php2
-rw-r--r--includes/filerepo/RepoGroup.php6
-rw-r--r--includes/filerepo/file/ArchivedFile.php12
-rw-r--r--includes/filerepo/file/File.php51
-rw-r--r--includes/filerepo/file/LocalFile.php194
-rw-r--r--includes/filerepo/file/OldLocalFile.php14
-rw-r--r--includes/filerepo/file/UnregisteredLocalFile.php12
-rw-r--r--includes/gallery/ImageGalleryBase.php20
-rw-r--r--includes/gallery/TraditionalImageGallery.php4
-rw-r--r--includes/htmlform/HTMLCheckField.php46
-rw-r--r--includes/htmlform/HTMLCheckMatrix.php14
-rw-r--r--includes/htmlform/HTMLFloatField.php2
-rw-r--r--includes/htmlform/HTMLForm.php191
-rw-r--r--includes/htmlform/HTMLFormField.php50
-rw-r--r--includes/htmlform/HTMLFormFieldCloner.php42
-rw-r--r--includes/htmlform/HTMLHiddenField.php18
-rw-r--r--includes/htmlform/HTMLIntField.php5
-rw-r--r--includes/htmlform/HTMLMultiSelectField.php8
-rw-r--r--includes/htmlform/HTMLRadioField.php2
-rw-r--r--includes/htmlform/HTMLSelectAndOtherField.php11
-rw-r--r--includes/htmlform/HTMLSelectNamespace.php18
-rw-r--r--includes/htmlform/HTMLTagFilter.php31
-rw-r--r--includes/htmlform/HTMLTextField.php7
-rw-r--r--includes/htmlform/VFormHTMLForm.php141
-rw-r--r--includes/installer/DatabaseInstaller.php15
-rw-r--r--includes/installer/DatabaseUpdater.php60
-rw-r--r--includes/installer/InstallDocFormatter.php34
-rw-r--r--includes/installer/Installer.php87
-rw-r--r--includes/installer/LocalSettingsGenerator.php39
-rw-r--r--includes/installer/MssqlInstaller.php4
-rw-r--r--includes/installer/MssqlUpdater.php5
-rw-r--r--includes/installer/MysqlInstaller.php9
-rw-r--r--includes/installer/MysqlUpdater.php45
-rw-r--r--includes/installer/OracleUpdater.php6
-rw-r--r--includes/installer/PostgresInstaller.php16
-rw-r--r--includes/installer/PostgresUpdater.php6
-rw-r--r--includes/installer/SqliteInstaller.php72
-rw-r--r--includes/installer/SqliteUpdater.php13
-rw-r--r--includes/installer/WebInstaller.php27
-rw-r--r--includes/installer/WebInstallerOutput.php37
-rw-r--r--includes/installer/WebInstallerPage.php21
-rw-r--r--includes/installer/i18n/ar.json8
-rw-r--r--includes/installer/i18n/ast.json9
-rw-r--r--includes/installer/i18n/av.json5
-rw-r--r--includes/installer/i18n/az.json2
-rw-r--r--includes/installer/i18n/ba.json21
-rw-r--r--includes/installer/i18n/be-tarask.json2
-rw-r--r--includes/installer/i18n/bg.json11
-rw-r--r--includes/installer/i18n/bgn.json26
-rw-r--r--includes/installer/i18n/bn.json13
-rw-r--r--includes/installer/i18n/bs.json33
-rw-r--r--includes/installer/i18n/ca.json49
-rw-r--r--includes/installer/i18n/ckb.json19
-rw-r--r--includes/installer/i18n/cs.json2
-rw-r--r--includes/installer/i18n/cv.json10
-rw-r--r--includes/installer/i18n/cy.json3
-rw-r--r--includes/installer/i18n/de.json24
-rw-r--r--includes/installer/i18n/diq.json2
-rw-r--r--includes/installer/i18n/el.json12
-rw-r--r--includes/installer/i18n/eml.json16
-rw-r--r--includes/installer/i18n/en-gb.json6
-rw-r--r--includes/installer/i18n/en.json9
-rw-r--r--includes/installer/i18n/es.json142
-rw-r--r--includes/installer/i18n/et.json16
-rw-r--r--includes/installer/i18n/eu.json5
-rw-r--r--includes/installer/i18n/fa.json40
-rw-r--r--includes/installer/i18n/fi.json51
-rw-r--r--includes/installer/i18n/fr.json5
-rw-r--r--includes/installer/i18n/frc.json21
-rw-r--r--includes/installer/i18n/fy.json14
-rw-r--r--includes/installer/i18n/gl.json2
-rw-r--r--includes/installer/i18n/gor.json48
-rw-r--r--includes/installer/i18n/he.json2
-rw-r--r--includes/installer/i18n/hi.json16
-rw-r--r--includes/installer/i18n/hu.json13
-rw-r--r--includes/installer/i18n/ia.json13
-rw-r--r--includes/installer/i18n/id.json6
-rw-r--r--includes/installer/i18n/it.json7
-rw-r--r--includes/installer/i18n/ja.json1
-rw-r--r--includes/installer/i18n/ko.json76
-rw-r--r--includes/installer/i18n/ksh.json31
-rw-r--r--includes/installer/i18n/ku-latn.json1
-rw-r--r--includes/installer/i18n/lb.json3
-rw-r--r--includes/installer/i18n/lzh.json1
-rw-r--r--includes/installer/i18n/mai.json26
-rw-r--r--includes/installer/i18n/mfe.json45
-rw-r--r--includes/installer/i18n/mk.json7
-rw-r--r--includes/installer/i18n/ms.json11
-rw-r--r--includes/installer/i18n/nap.json196
-rw-r--r--includes/installer/i18n/nb.json26
-rw-r--r--includes/installer/i18n/ne.json6
-rw-r--r--includes/installer/i18n/nl.json28
-rw-r--r--includes/installer/i18n/oc.json3
-rw-r--r--includes/installer/i18n/pa.json24
-rw-r--r--includes/installer/i18n/pl.json7
-rw-r--r--includes/installer/i18n/pms.json10
-rw-r--r--includes/installer/i18n/pt-br.json8
-rw-r--r--includes/installer/i18n/pt.json2
-rw-r--r--includes/installer/i18n/qqq.json3
-rw-r--r--includes/installer/i18n/ro.json22
-rw-r--r--includes/installer/i18n/roa-tara.json15
-rw-r--r--includes/installer/i18n/ru.json9
-rw-r--r--includes/installer/i18n/sco.json13
-rw-r--r--includes/installer/i18n/si.json4
-rw-r--r--includes/installer/i18n/sk.json5
-rw-r--r--includes/installer/i18n/sl.json16
-rw-r--r--includes/installer/i18n/sr-ec.json17
-rw-r--r--includes/installer/i18n/sr-el.json1
-rw-r--r--includes/installer/i18n/su.json8
-rw-r--r--includes/installer/i18n/sv.json8
-rw-r--r--includes/installer/i18n/te.json2
-rw-r--r--includes/installer/i18n/th.json90
-rw-r--r--includes/installer/i18n/tl.json2
-rw-r--r--includes/installer/i18n/tr.json7
-rw-r--r--includes/installer/i18n/uk.json2
-rw-r--r--includes/installer/i18n/vi.json137
-rw-r--r--includes/installer/i18n/yi.json5
-rw-r--r--includes/installer/i18n/zh-hans.json11
-rw-r--r--includes/installer/i18n/zh-hant.json23
-rw-r--r--includes/interwiki/Interwiki.php4
-rw-r--r--includes/jobqueue/Job.php120
-rw-r--r--includes/jobqueue/JobQueue.php83
-rw-r--r--includes/jobqueue/JobQueueDB.php6
-rw-r--r--includes/jobqueue/JobQueueFederated.php131
-rw-r--r--includes/jobqueue/JobQueueGroup.php14
-rw-r--r--includes/jobqueue/JobQueueRedis.php255
-rw-r--r--includes/jobqueue/JobRunner.php86
-rw-r--r--includes/jobqueue/JobSpecification.php36
-rw-r--r--includes/jobqueue/aggregator/JobQueueAggregator.php28
-rw-r--r--includes/jobqueue/aggregator/JobQueueAggregatorMemc.php125
-rw-r--r--includes/jobqueue/aggregator/JobQueueAggregatorRedis.php2
-rw-r--r--includes/jobqueue/jobs/AssembleUploadChunksJob.php19
-rw-r--r--includes/jobqueue/jobs/DuplicateJob.php2
-rw-r--r--includes/jobqueue/jobs/EnqueueJob.php88
-rw-r--r--includes/jobqueue/jobs/HTMLCacheUpdateJob.php46
-rw-r--r--includes/jobqueue/jobs/NullJob.php2
-rw-r--r--includes/jobqueue/jobs/PublishStashedFileJob.php22
-rw-r--r--includes/jobqueue/jobs/RecentChangesUpdateJob.php223
-rw-r--r--includes/jobqueue/jobs/RefreshLinksJob.php16
-rw-r--r--includes/jobqueue/jobs/RefreshLinksJob2.php141
-rw-r--r--includes/jobqueue/jobs/ThumbnailRenderJob.php109
-rw-r--r--includes/jobqueue/jobs/UploadFromUrlJob.php2
-rw-r--r--includes/json/FormatJson.php102
-rw-r--r--includes/libs/APACHE-LICENSE-2.0.txt202
-rw-r--r--includes/libs/ArrayUtils.php (renamed from includes/utils/ArrayUtils.php)4
-rw-r--r--includes/libs/BufferingStatsdDataFactory.php59
-rw-r--r--includes/libs/CSSMin.php151
-rw-r--r--includes/libs/Cookie.php (renamed from includes/Cookie.php)4
-rw-r--r--includes/libs/DeferredStringifier.php57
-rw-r--r--includes/libs/ExplodeIterator.php116
-rw-r--r--includes/libs/GenericArrayObject.php6
-rw-r--r--includes/libs/IPSet.php3
-rw-r--r--includes/libs/MapCacheLRU.php (renamed from includes/cache/MapCacheLRU.php)12
-rw-r--r--includes/libs/MessageSpecifier.php39
-rw-r--r--includes/libs/MultiHttpClient.php28
-rw-r--r--includes/libs/ObjectFactory.php93
-rw-r--r--includes/libs/ProcessCacheLRU.php39
-rw-r--r--includes/libs/ReplacementArray.php125
-rw-r--r--includes/libs/RunningStat.php8
-rw-r--r--includes/libs/ScopedCallback.php12
-rw-r--r--includes/libs/StatusValue.php316
-rw-r--r--includes/libs/StringUtils.php317
-rw-r--r--includes/libs/UDPTransport.php102
-rw-r--r--includes/libs/Xhprof.php445
-rw-r--r--includes/libs/XmlTypeCheck.php2
-rw-r--r--includes/libs/composer/ComposerJson.php54
-rw-r--r--includes/libs/composer/ComposerLock.php38
-rw-r--r--includes/libs/jsminplus.php2
-rw-r--r--includes/libs/normal/UtfNormal.php129
-rw-r--r--includes/libs/normal/UtfNormalDefines.php186
-rw-r--r--includes/libs/normal/UtfNormalUtil.php99
-rw-r--r--includes/libs/objectcache/APCBagOStuff.php69
-rw-r--r--includes/libs/objectcache/BagOStuff.php (renamed from includes/objectcache/BagOStuff.php)104
-rw-r--r--includes/libs/objectcache/EmptyBagOStuff.php45
-rw-r--r--includes/libs/objectcache/HashBagOStuff.php87
-rw-r--r--includes/libs/objectcache/WinCacheBagOStuff.php (renamed from includes/objectcache/WinCacheBagOStuff.php)13
-rw-r--r--includes/libs/objectcache/XCacheBagOStuff.php89
-rw-r--r--includes/libs/replacers/DoubleReplacer.php43
-rw-r--r--includes/libs/replacers/HashtableReplacer.php44
-rw-r--r--includes/libs/replacers/RegexlikeReplacer.php46
-rw-r--r--includes/libs/replacers/Replacer.php38
-rw-r--r--includes/libs/virtualrest/ParsoidVirtualRESTService.php126
-rw-r--r--includes/libs/virtualrest/RestbaseVirtualRESTService.php177
-rw-r--r--includes/libs/virtualrest/VirtualRESTServiceClient.php31
-rw-r--r--includes/logging/BlockLogFormatter.php224
-rw-r--r--includes/logging/DeleteLogFormatter.php78
-rw-r--r--includes/logging/LogEntry.php38
-rw-r--r--includes/logging/LogEventsList.php76
-rw-r--r--includes/logging/LogFormatter.php253
-rw-r--r--includes/logging/LogPage.php156
-rw-r--r--includes/logging/LogPager.php2
-rw-r--r--includes/logging/MergeLogFormatter.php91
-rw-r--r--includes/logging/MoveLogFormatter.php29
-rw-r--r--includes/logging/PatrolLogFormatter.php20
-rw-r--r--includes/logging/RightsLogFormatter.php65
-rw-r--r--includes/logging/TagLogFormatter.php49
-rw-r--r--includes/logging/UploadLogFormatter.php49
-rw-r--r--includes/mail/EmailNotification.php10
-rw-r--r--includes/mail/MailAddress.php2
-rw-r--r--includes/mail/UserMailer.php4
-rw-r--r--includes/media/BMP.php2
-rw-r--r--includes/media/Bitmap.php14
-rw-r--r--includes/media/BitmapMetadataHandler.php2
-rw-r--r--includes/media/DjVu.php5
-rw-r--r--includes/media/DjVuImage.php16
-rw-r--r--includes/media/Exif.php2
-rw-r--r--includes/media/ExifBitmap.php5
-rw-r--r--includes/media/FormatMetadata.php98
-rw-r--r--includes/media/GIF.php5
-rw-r--r--includes/media/GIFMetadataExtractor.php2
-rw-r--r--includes/media/IPTC.php2
-rw-r--r--includes/media/ImageHandler.php6
-rw-r--r--includes/media/Jpeg.php4
-rw-r--r--includes/media/JpegMetadataExtractor.php4
-rw-r--r--includes/media/MediaHandler.php34
-rw-r--r--includes/media/MediaTransformInvalidParametersException.php26
-rw-r--r--includes/media/MediaTransformOutput.php40
-rw-r--r--includes/media/PNG.php10
-rw-r--r--includes/media/SVG.php9
-rw-r--r--includes/media/SVGMetadataExtractor.php20
-rw-r--r--includes/media/Tiff.php2
-rw-r--r--includes/media/TransformationalImageHandler.php75
-rw-r--r--includes/media/XCF.php2
-rw-r--r--includes/media/XMP.php13
-rw-r--r--includes/media/XMPInfo.php2
-rw-r--r--includes/mime.info1
-rw-r--r--includes/mime.types3
-rw-r--r--includes/normal/Makefile78
-rw-r--r--includes/normal/README59
-rw-r--r--includes/normal/RandomTest.php102
-rw-r--r--includes/normal/Utf8Test.php156
-rw-r--r--includes/normal/UtfNormal.php790
-rw-r--r--includes/normal/UtfNormalBench.php105
-rw-r--r--includes/normal/UtfNormalData.inc14
-rw-r--r--includes/normal/UtfNormalDataK.inc11
-rw-r--r--includes/normal/UtfNormalDefines.php77
-rw-r--r--includes/normal/UtfNormalGenerate.php250
-rw-r--r--includes/normal/UtfNormalMemStress.php107
-rw-r--r--includes/normal/UtfNormalTest.php257
-rw-r--r--includes/normal/UtfNormalTest2.php275
-rw-r--r--includes/normal/UtfNormalUtil.php154
-rw-r--r--includes/objectcache/APCBagOStuff.php108
-rw-r--r--includes/objectcache/EmptyBagOStuff.php80
-rw-r--r--includes/objectcache/HashBagOStuff.php113
-rw-r--r--includes/objectcache/MemcachedBagOStuff.php19
-rw-r--r--includes/objectcache/MemcachedClient.php20
-rw-r--r--includes/objectcache/MemcachedPeclBagOStuff.php25
-rw-r--r--includes/objectcache/MemcachedPhpBagOStuff.php18
-rw-r--r--includes/objectcache/MultiWriteBagOStuff.php30
-rw-r--r--includes/objectcache/ObjectCache.php11
-rw-r--r--includes/objectcache/ObjectCacheSessionHandler.php38
-rw-r--r--includes/objectcache/RedisBagOStuff.php24
-rw-r--r--includes/objectcache/SqlBagOStuff.php75
-rw-r--r--includes/objectcache/XCacheBagOStuff.php117
-rw-r--r--includes/page/Article.php350
-rw-r--r--includes/page/CategoryPage.php6
-rw-r--r--includes/page/ImagePage.php100
-rw-r--r--includes/page/WikiPage.php476
-rw-r--r--includes/pager/IndexPager.php5
-rw-r--r--includes/parser/CacheTime.php26
-rw-r--r--includes/parser/CoreParserFunctions.php92
-rw-r--r--includes/parser/CoreTagHooks.php27
-rw-r--r--includes/parser/DateFormatter.php15
-rw-r--r--includes/parser/LinkHolderArray.php25
-rw-r--r--includes/parser/MWTidy.php76
-rw-r--r--includes/parser/Parser.php686
-rw-r--r--includes/parser/ParserCache.php7
-rw-r--r--includes/parser/ParserOptions.php97
-rw-r--r--includes/parser/ParserOutput.php141
-rw-r--r--includes/parser/Preprocessor_DOM.php30
-rw-r--r--includes/parser/Preprocessor_Hash.php20
-rw-r--r--includes/parser/StripState.php2
-rw-r--r--includes/password/PasswordFactory.php15
-rw-r--r--includes/poolcounter/PoolCounter.php57
-rw-r--r--includes/poolcounter/PoolCounterRedis.php17
-rw-r--r--includes/poolcounter/PoolWorkArticleView.php7
-rw-r--r--includes/profiler/ProfileSection.php43
-rw-r--r--includes/profiler/Profiler.php499
-rw-r--r--includes/profiler/ProfilerFunctions.php56
-rw-r--r--includes/profiler/ProfilerMwprof.php256
-rw-r--r--includes/profiler/ProfilerSectionOnly.php104
-rw-r--r--includes/profiler/ProfilerSimpleDB.php111
-rw-r--r--includes/profiler/ProfilerSimpleText.php82
-rw-r--r--includes/profiler/ProfilerSimpleTrace.php85
-rw-r--r--includes/profiler/ProfilerSimpleUDP.php75
-rw-r--r--includes/profiler/ProfilerStandard.php559
-rw-r--r--includes/profiler/ProfilerStub.php25
-rw-r--r--includes/profiler/ProfilerXhprof.php194
-rw-r--r--includes/profiler/SectionProfiler.php530
-rw-r--r--includes/profiler/TransactionProfiler.php274
-rw-r--r--includes/profiler/output/ProfilerOutput.php57
-rw-r--r--includes/profiler/output/ProfilerOutputDb.php94
-rw-r--r--includes/profiler/output/ProfilerOutputDump.php51
-rw-r--r--includes/profiler/output/ProfilerOutputStats.php57
-rw-r--r--includes/profiler/output/ProfilerOutputText.php77
-rw-r--r--includes/profiler/output/ProfilerOutputUdp.php96
-rw-r--r--includes/rcfeed/IRCColourfulRCFeedFormatter.php2
-rw-r--r--includes/rcfeed/UDPRCFeedEngine.php3
-rw-r--r--includes/registration/ExtensionProcessor.php299
-rw-r--r--includes/registration/ExtensionRegistry.php254
-rw-r--r--includes/registration/Processor.php27
-rw-r--r--includes/resourceloader/DerivativeResourceLoaderContext.php1
-rw-r--r--includes/resourceloader/ResourceLoader.php323
-rw-r--r--includes/resourceloader/ResourceLoaderContext.php91
-rw-r--r--includes/resourceloader/ResourceLoaderEditToolbarModule.php1
-rw-r--r--includes/resourceloader/ResourceLoaderFileModule.php109
-rw-r--r--includes/resourceloader/ResourceLoaderFilePageModule.php37
-rw-r--r--includes/resourceloader/ResourceLoaderImage.php388
-rw-r--r--includes/resourceloader/ResourceLoaderImageModule.php327
-rw-r--r--includes/resourceloader/ResourceLoaderLanguageDataModule.php12
-rw-r--r--includes/resourceloader/ResourceLoaderLanguageNamesModule.php14
-rw-r--r--includes/resourceloader/ResourceLoaderModule.php87
-rw-r--r--includes/resourceloader/ResourceLoaderNoscriptModule.php54
-rw-r--r--includes/resourceloader/ResourceLoaderSiteModule.php13
-rw-r--r--includes/resourceloader/ResourceLoaderSkinModule.php92
-rw-r--r--includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php107
-rw-r--r--includes/resourceloader/ResourceLoaderStartUpModule.php118
-rw-r--r--includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php14
-rw-r--r--includes/resourceloader/ResourceLoaderUserDefaultsModule.php62
-rw-r--r--includes/resourceloader/ResourceLoaderUserGroupsModule.php26
-rw-r--r--includes/resourceloader/ResourceLoaderUserModule.php36
-rw-r--r--includes/resourceloader/ResourceLoaderUserOptionsModule.php15
-rw-r--r--includes/resourceloader/ResourceLoaderUserTokensModule.php13
-rw-r--r--includes/resourceloader/ResourceLoaderWikiModule.php90
-rw-r--r--includes/revisiondelete/RevDelArchiveList.php2
-rw-r--r--includes/revisiondelete/RevDelArchivedFileList.php2
-rw-r--r--includes/revisiondelete/RevDelFileList.php2
-rw-r--r--includes/revisiondelete/RevDelList.php28
-rw-r--r--includes/revisiondelete/RevDelLogItem.php10
-rw-r--r--includes/revisiondelete/RevDelLogList.php8
-rw-r--r--includes/revisiondelete/RevDelRevisionList.php4
-rw-r--r--includes/revisiondelete/RevisionDeleteUser.php4
-rw-r--r--includes/revisiondelete/RevisionDeleter.php3
-rw-r--r--includes/search/SearchEngine.php64
-rw-r--r--includes/search/SearchHighlighter.php26
-rw-r--r--includes/search/SearchMySQL.php4
-rw-r--r--includes/search/SearchPostgres.php2
-rw-r--r--includes/search/SearchResult.php9
-rw-r--r--includes/site/CachingSiteStore.php195
-rw-r--r--includes/site/DBSiteStore.php345
-rw-r--r--includes/site/FileBasedSiteLookup.php139
-rw-r--r--includes/site/HashSiteStore.php123
-rw-r--r--includes/site/MediaWikiSite.php4
-rw-r--r--includes/site/SiteExporter.php114
-rw-r--r--includes/site/SiteImporter.php263
-rw-r--r--includes/site/SiteLookup.php50
-rw-r--r--includes/site/SiteSQLStore.php459
-rw-r--r--includes/site/SiteStore.php29
-rw-r--r--includes/site/SitesCacheFileBuilder.php113
-rw-r--r--includes/skins/BaseTemplate.php644
-rw-r--r--includes/skins/MediaWikiI18N.php52
-rw-r--r--includes/skins/QuickTemplate.php194
-rw-r--r--includes/skins/Skin.php176
-rw-r--r--includes/skins/SkinApi.php71
-rw-r--r--includes/skins/SkinApiTemplate.php63
-rw-r--r--includes/skins/SkinFactory.php110
-rw-r--r--includes/skins/SkinFallbackTemplate.php29
-rw-r--r--includes/skins/SkinTemplate.php908
-rw-r--r--includes/specialpage/ChangesListSpecialPage.php18
-rw-r--r--includes/specialpage/FormSpecialPage.php29
-rw-r--r--includes/specialpage/ImageQueryPage.php4
-rw-r--r--includes/specialpage/PageQueryPage.php2
-rw-r--r--includes/specialpage/QueryPage.php17
-rw-r--r--includes/specialpage/RedirectSpecialPage.php2
-rw-r--r--includes/specialpage/SpecialPage.php55
-rw-r--r--includes/specialpage/SpecialPageFactory.php40
-rw-r--r--includes/specialpage/WantedQueryPage.php4
-rw-r--r--includes/specials/SpecialActiveusers.php174
-rw-r--r--includes/specials/SpecialAllMessages.php14
-rw-r--r--includes/specials/SpecialAllPages.php5
-rw-r--r--includes/specials/SpecialApiHelp.php93
-rw-r--r--includes/specials/SpecialBlock.php54
-rw-r--r--includes/specials/SpecialBlockList.php17
-rw-r--r--includes/specials/SpecialBooksources.php23
-rw-r--r--includes/specials/SpecialCategories.php6
-rw-r--r--includes/specials/SpecialChangeEmail.php34
-rw-r--r--includes/specials/SpecialChangePassword.php14
-rw-r--r--includes/specials/SpecialConfirmemail.php3
-rw-r--r--includes/specials/SpecialContributions.php59
-rw-r--r--includes/specials/SpecialDeletedContributions.php113
-rw-r--r--includes/specials/SpecialDiff.php1
-rw-r--r--includes/specials/SpecialEditTags.php460
-rw-r--r--includes/specials/SpecialEditWatchlist.php42
-rw-r--r--includes/specials/SpecialEmailuser.php12
-rw-r--r--includes/specials/SpecialExpandTemplates.php5
-rw-r--r--includes/specials/SpecialExport.php9
-rw-r--r--includes/specials/SpecialFileDuplicateSearch.php52
-rw-r--r--includes/specials/SpecialFilepath.php1
-rw-r--r--includes/specials/SpecialImport.php43
-rw-r--r--includes/specials/SpecialJavaScriptTest.php33
-rw-r--r--includes/specials/SpecialLinkSearch.php52
-rw-r--r--includes/specials/SpecialListDuplicatedFiles.php2
-rw-r--r--includes/specials/SpecialListfiles.php12
-rw-r--r--includes/specials/SpecialListgrouprights.php78
-rw-r--r--includes/specials/SpecialListredirects.php2
-rw-r--r--includes/specials/SpecialListusers.php71
-rw-r--r--includes/specials/SpecialLog.php115
-rw-r--r--includes/specials/SpecialLonelypages.php2
-rw-r--r--includes/specials/SpecialMediaStatistics.php22
-rw-r--r--includes/specials/SpecialMergeHistory.php27
-rw-r--r--includes/specials/SpecialMostcategories.php2
-rw-r--r--includes/specials/SpecialMostimages.php2
-rw-r--r--includes/specials/SpecialMostinterwikis.php2
-rw-r--r--includes/specials/SpecialMostlinked.php2
-rw-r--r--includes/specials/SpecialMostlinkedcategories.php2
-rw-r--r--includes/specials/SpecialMostlinkedtemplates.php2
-rw-r--r--includes/specials/SpecialMovepage.php226
-rw-r--r--includes/specials/SpecialMyLanguage.php5
-rw-r--r--includes/specials/SpecialNewimages.php14
-rw-r--r--includes/specials/SpecialNewpages.php135
-rw-r--r--includes/specials/SpecialPageLanguage.php8
-rw-r--r--includes/specials/SpecialPagesWithProp.php49
-rw-r--r--includes/specials/SpecialPasswordReset.php15
-rw-r--r--includes/specials/SpecialPopularpages.php89
-rw-r--r--includes/specials/SpecialPreferences.php2
-rw-r--r--includes/specials/SpecialPrefixindex.php5
-rw-r--r--includes/specials/SpecialProtectedpages.php17
-rw-r--r--includes/specials/SpecialProtectedtitles.php14
-rw-r--r--includes/specials/SpecialRandomInCategory.php10
-rw-r--r--includes/specials/SpecialRandompage.php2
-rw-r--r--includes/specials/SpecialRecentchanges.php23
-rw-r--r--includes/specials/SpecialRedirect.php15
-rw-r--r--includes/specials/SpecialResetTokens.php2
-rw-r--r--includes/specials/SpecialRevisiondelete.php34
-rw-r--r--includes/specials/SpecialRunJobs.php11
-rw-r--r--includes/specials/SpecialSearch.php131
-rw-r--r--includes/specials/SpecialShortpages.php2
-rw-r--r--includes/specials/SpecialSpecialpages.php1
-rw-r--r--includes/specials/SpecialStatistics.php100
-rw-r--r--includes/specials/SpecialTags.php336
-rw-r--r--includes/specials/SpecialTrackingCategories.php142
-rw-r--r--includes/specials/SpecialUnblock.php11
-rw-r--r--includes/specials/SpecialUndelete.php32
-rw-r--r--includes/specials/SpecialUpload.php99
-rw-r--r--includes/specials/SpecialUploadStash.php14
-rw-r--r--includes/specials/SpecialUserlogin.php103
-rw-r--r--includes/specials/SpecialUserlogout.php2
-rw-r--r--includes/specials/SpecialUserrights.php65
-rw-r--r--includes/specials/SpecialVersion.php151
-rw-r--r--includes/specials/SpecialWantedcategories.php7
-rw-r--r--includes/specials/SpecialWantedfiles.php4
-rw-r--r--includes/specials/SpecialWantedpages.php7
-rw-r--r--includes/specials/SpecialWatchlist.php60
-rw-r--r--includes/specials/SpecialWhatlinkshere.php67
-rw-r--r--includes/templates/NoLocalSettings.mustache39
-rw-r--r--includes/templates/NoLocalSettings.php97
-rw-r--r--includes/templates/Usercreate.php25
-rw-r--r--includes/templates/Userlogin.php75
-rw-r--r--includes/title/ForeignTitle.php117
-rw-r--r--includes/title/ForeignTitleFactory.php36
-rw-r--r--includes/title/ImportTitleFactory.php36
-rw-r--r--includes/title/MalformedTitleException.php1
-rw-r--r--includes/title/MediaWikiPageLinkRenderer.php1
-rw-r--r--includes/title/MediaWikiTitleCodec.php34
-rw-r--r--includes/title/NaiveForeignTitleFactory.php71
-rw-r--r--includes/title/NaiveImportTitleFactory.php65
-rw-r--r--includes/title/NamespaceAwareForeignTitleFactory.php134
-rw-r--r--includes/title/NamespaceImportTitleFactory.php52
-rw-r--r--includes/title/PageLinkRenderer.php1
-rw-r--r--includes/title/SubpageImportTitleFactory.php55
-rw-r--r--includes/title/TitleFormatter.php1
-rw-r--r--includes/title/TitleParser.php1
-rw-r--r--includes/title/TitleValue.php1
-rw-r--r--includes/upload/UploadBase.php161
-rw-r--r--includes/upload/UploadFromChunks.php20
-rw-r--r--includes/upload/UploadFromUrl.php26
-rw-r--r--includes/upload/UploadStash.php4
-rw-r--r--includes/utils/AutoloadGenerator.php296
-rw-r--r--includes/utils/Cdb.php163
-rw-r--r--includes/utils/CdbDBA.php75
-rw-r--r--includes/utils/CdbPHP.php494
-rw-r--r--includes/utils/IP.php23
-rw-r--r--includes/utils/MWCryptHKDF.php11
-rw-r--r--includes/utils/MWCryptRand.php11
-rw-r--r--includes/utils/MWFunction.php37
-rw-r--r--includes/utils/StringUtils.php612
-rw-r--r--includes/utils/UIDGenerator.php6
-rw-r--r--includes/utils/ZipDirectoryReader.php1
-rw-r--r--index.php13
-rw-r--r--index.php52
-rw-r--r--jsduck.json9
-rw-r--r--languages/ConverterRule.php5
-rw-r--r--languages/Language.php172
-rw-r--r--languages/LanguageConverter.php17
-rw-r--r--languages/Names.php13
-rw-r--r--languages/classes/LanguageBe_tarask.php2
-rw-r--r--languages/classes/LanguageJa.php2
-rw-r--r--languages/classes/LanguageKk.php7
-rw-r--r--languages/classes/LanguageQqx.php2
-rw-r--r--languages/classes/LanguageYue.php2
-rw-r--r--languages/classes/LanguageZh.php38
-rw-r--r--languages/classes/LanguageZh_hans.php2
-rw-r--r--languages/data/plurals-mediawiki.xml8
-rw-r--r--languages/data/plurals.xml289
-rw-r--r--languages/i18n/ab.json303
-rw-r--r--languages/i18n/ace.json26
-rw-r--r--languages/i18n/aeb.json249
-rw-r--r--languages/i18n/af.json119
-rw-r--r--languages/i18n/ak.json128
-rw-r--r--languages/i18n/aln.json7
-rw-r--r--languages/i18n/am.json15
-rw-r--r--languages/i18n/an.json61
-rw-r--r--languages/i18n/ang.json131
-rw-r--r--languages/i18n/anp.json4
-rw-r--r--languages/i18n/ar.json205
-rw-r--r--languages/i18n/arc.json19
-rw-r--r--languages/i18n/arn.json5
-rw-r--r--languages/i18n/arq.json177
-rw-r--r--languages/i18n/ary.json22
-rw-r--r--languages/i18n/arz.json18
-rw-r--r--languages/i18n/as.json94
-rw-r--r--languages/i18n/ast.json181
-rw-r--r--languages/i18n/av.json391
-rw-r--r--languages/i18n/avk.json19
-rw-r--r--languages/i18n/awa.json2956
-rw-r--r--languages/i18n/ay.json388
-rw-r--r--languages/i18n/az.json320
-rw-r--r--languages/i18n/azb.json192
-rw-r--r--languages/i18n/ba.json76
-rw-r--r--languages/i18n/bar.json16
-rw-r--r--languages/i18n/bbc-latn.json6
-rw-r--r--languages/i18n/bcc.json512
-rw-r--r--languages/i18n/bcl.json50
-rw-r--r--languages/i18n/be-tarask.json243
-rw-r--r--languages/i18n/be.json78
-rw-r--r--languages/i18n/bg.json213
-rw-r--r--languages/i18n/bgn.json2771
-rw-r--r--languages/i18n/bho.json88
-rw-r--r--languages/i18n/bi.json213
-rw-r--r--languages/i18n/bjn.json57
-rw-r--r--languages/i18n/bm.json263
-rw-r--r--languages/i18n/bn.json274
-rw-r--r--languages/i18n/bo.json9
-rw-r--r--languages/i18n/bpy.json12
-rw-r--r--languages/i18n/bqi.json3
-rw-r--r--languages/i18n/br.json112
-rw-r--r--languages/i18n/brh.json4
-rw-r--r--languages/i18n/bs.json253
-rw-r--r--languages/i18n/bto.json4
-rw-r--r--languages/i18n/bug.json646
-rw-r--r--languages/i18n/bxr.json563
-rw-r--r--languages/i18n/ca.json381
-rw-r--r--languages/i18n/cbk-zam.json166
-rw-r--r--languages/i18n/cdo.json220
-rw-r--r--languages/i18n/ce.json452
-rw-r--r--languages/i18n/ceb.json8
-rw-r--r--languages/i18n/ch.json9
-rw-r--r--languages/i18n/chr.json144
-rw-r--r--languages/i18n/ckb.json153
-rw-r--r--languages/i18n/co.json7
-rw-r--r--languages/i18n/cps.json5
-rw-r--r--languages/i18n/crh-cyrl.json119
-rw-r--r--languages/i18n/crh-latn.json119
-rw-r--r--languages/i18n/cs.json332
-rw-r--r--languages/i18n/csb.json8
-rw-r--r--languages/i18n/cu.json42
-rw-r--r--languages/i18n/cv.json349
-rw-r--r--languages/i18n/cy.json253
-rw-r--r--languages/i18n/da.json154
-rw-r--r--languages/i18n/de-ch.json585
-rw-r--r--languages/i18n/de-formal.json639
-rw-r--r--languages/i18n/de.json293
-rw-r--r--languages/i18n/diq.json217
-rw-r--r--languages/i18n/dsb.json68
-rw-r--r--languages/i18n/dtp.json11
-rw-r--r--languages/i18n/dv.json7
-rw-r--r--languages/i18n/dz.json11
-rw-r--r--languages/i18n/ee.json20
-rw-r--r--languages/i18n/egl.json314
-rw-r--r--languages/i18n/el.json205
-rw-r--r--languages/i18n/eml.json250
-rw-r--r--languages/i18n/en-gb.json168
-rw-r--r--languages/i18n/en.json277
-rw-r--r--languages/i18n/eo.json161
-rw-r--r--languages/i18n/es.json1033
-rw-r--r--languages/i18n/et.json299
-rw-r--r--languages/i18n/eu.json252
-rw-r--r--languages/i18n/ext.json22
-rw-r--r--languages/i18n/fa.json552
-rw-r--r--languages/i18n/ff.json18
-rw-r--r--languages/i18n/fi.json314
-rw-r--r--languages/i18n/fit.json5
-rw-r--r--languages/i18n/fj.json288
-rw-r--r--languages/i18n/fo.json30
-rw-r--r--languages/i18n/fr.json317
-rw-r--r--languages/i18n/frc.json360
-rw-r--r--languages/i18n/frp.json67
-rw-r--r--languages/i18n/frr.json286
-rw-r--r--languages/i18n/fur.json12
-rw-r--r--languages/i18n/fy.json519
-rw-r--r--languages/i18n/ga.json11
-rw-r--r--languages/i18n/gag.json9
-rw-r--r--languages/i18n/gan-hans.json19
-rw-r--r--languages/i18n/gan-hant.json14
-rw-r--r--languages/i18n/gd.json199
-rw-r--r--languages/i18n/gl.json298
-rw-r--r--languages/i18n/glk.json100
-rw-r--r--languages/i18n/gn.json729
-rw-r--r--languages/i18n/gom-latn.json5
-rw-r--r--languages/i18n/got.json915
-rw-r--r--languages/i18n/grc.json20
-rw-r--r--languages/i18n/gsw.json83
-rw-r--r--languages/i18n/gu.json101
-rw-r--r--languages/i18n/gv.json9
-rw-r--r--languages/i18n/ha.json4
-rw-r--r--languages/i18n/hak.json10
-rw-r--r--languages/i18n/haw.json20
-rw-r--r--languages/i18n/he.json513
-rw-r--r--languages/i18n/hi.json249
-rw-r--r--languages/i18n/hif-latn.json552
-rw-r--r--languages/i18n/hil.json10
-rw-r--r--languages/i18n/hr.json261
-rw-r--r--languages/i18n/hrx.json18
-rw-r--r--languages/i18n/hsb.json108
-rw-r--r--languages/i18n/ht.json7
-rw-r--r--languages/i18n/hu.json274
-rw-r--r--languages/i18n/hy.json100
-rw-r--r--languages/i18n/ia.json175
-rw-r--r--languages/i18n/id.json273
-rw-r--r--languages/i18n/ie.json11
-rw-r--r--languages/i18n/ig.json16
-rw-r--r--languages/i18n/ike-cans.json547
-rw-r--r--languages/i18n/ike-latn.json484
-rw-r--r--languages/i18n/ilo.json435
-rw-r--r--languages/i18n/inh.json288
-rw-r--r--languages/i18n/io.json11
-rw-r--r--languages/i18n/is.json135
-rw-r--r--languages/i18n/it.json312
-rw-r--r--languages/i18n/ja.json250
-rw-r--r--languages/i18n/jam.json9
-rw-r--r--languages/i18n/jbo.json711
-rw-r--r--languages/i18n/jut.json3
-rw-r--r--languages/i18n/jv.json66
-rw-r--r--languages/i18n/ka.json147
-rw-r--r--languages/i18n/kaa.json75
-rw-r--r--languages/i18n/kab.json55
-rw-r--r--languages/i18n/kbd-cyrl.json8
-rw-r--r--languages/i18n/kg.json15
-rw-r--r--languages/i18n/khw.json7
-rw-r--r--languages/i18n/kiu.json27
-rw-r--r--languages/i18n/kk-arab.json12
-rw-r--r--languages/i18n/kk-cyrl.json132
-rw-r--r--languages/i18n/kk-latn.json14
-rw-r--r--languages/i18n/kl.json743
-rw-r--r--languages/i18n/km.json121
-rw-r--r--languages/i18n/kn.json59
-rw-r--r--languages/i18n/ko.json370
-rw-r--r--languages/i18n/koi.json4
-rw-r--r--languages/i18n/krc.json86
-rw-r--r--languages/i18n/kri.json2
-rw-r--r--languages/i18n/krj.json457
-rw-r--r--languages/i18n/ks-arab.json86
-rw-r--r--languages/i18n/ksh.json535
-rw-r--r--languages/i18n/ku-latn.json67
-rw-r--r--languages/i18n/kv.json243
-rw-r--r--languages/i18n/kw.json9
-rw-r--r--languages/i18n/ky.json59
-rw-r--r--languages/i18n/la.json140
-rw-r--r--languages/i18n/lad.json14
-rw-r--r--languages/i18n/lb.json179
-rw-r--r--languages/i18n/lbe.json92
-rw-r--r--languages/i18n/lez.json23
-rw-r--r--languages/i18n/lfn.json7
-rw-r--r--languages/i18n/lg.json4
-rw-r--r--languages/i18n/li.json77
-rw-r--r--languages/i18n/lij.json7
-rw-r--r--languages/i18n/liv.json5
-rw-r--r--languages/i18n/lmo.json10
-rw-r--r--languages/i18n/ln.json5
-rw-r--r--languages/i18n/lo.json4
-rw-r--r--languages/i18n/loz.json5
-rw-r--r--languages/i18n/lrc.json1740
-rw-r--r--languages/i18n/lt.json546
-rw-r--r--languages/i18n/ltg.json5
-rw-r--r--languages/i18n/lus.json14
-rw-r--r--languages/i18n/lv.json355
-rw-r--r--languages/i18n/lzh.json140
-rw-r--r--languages/i18n/lzz.json4
-rw-r--r--languages/i18n/mai.json488
-rw-r--r--languages/i18n/map-bms.json14
-rw-r--r--languages/i18n/mdf.json19
-rw-r--r--languages/i18n/mg.json128
-rw-r--r--languages/i18n/mhr.json12
-rw-r--r--languages/i18n/mi.json166
-rw-r--r--languages/i18n/min.json21
-rw-r--r--languages/i18n/mk.json465
-rw-r--r--languages/i18n/ml.json193
-rw-r--r--languages/i18n/mn.json22
-rw-r--r--languages/i18n/mo.json18
-rw-r--r--languages/i18n/mr.json83
-rw-r--r--languages/i18n/mrj.json4
-rw-r--r--languages/i18n/ms.json160
-rw-r--r--languages/i18n/mt.json123
-rw-r--r--languages/i18n/mwl.json6
-rw-r--r--languages/i18n/my.json12
-rw-r--r--languages/i18n/myv.json21
-rw-r--r--languages/i18n/mzn.json17
-rw-r--r--languages/i18n/na.json130
-rw-r--r--languages/i18n/nah.json8
-rw-r--r--languages/i18n/nan.json34
-rw-r--r--languages/i18n/nap.json1117
-rw-r--r--languages/i18n/nb.json265
-rw-r--r--languages/i18n/nds-nl.json264
-rw-r--r--languages/i18n/nds.json44
-rw-r--r--languages/i18n/ne.json134
-rw-r--r--languages/i18n/new.json705
-rw-r--r--languages/i18n/niu.json343
-rw-r--r--languages/i18n/nl-informal.json574
-rw-r--r--languages/i18n/nl.json297
-rw-r--r--languages/i18n/nn.json186
-rw-r--r--languages/i18n/nov.json633
-rw-r--r--languages/i18n/nso.json74
-rw-r--r--languages/i18n/nv.json510
-rw-r--r--languages/i18n/oc.json216
-rw-r--r--languages/i18n/om.json138
-rw-r--r--languages/i18n/or.json399
-rw-r--r--languages/i18n/os.json23
-rw-r--r--languages/i18n/pa.json395
-rw-r--r--languages/i18n/pag.json498
-rw-r--r--languages/i18n/pam.json44
-rw-r--r--languages/i18n/pap.json547
-rw-r--r--languages/i18n/pcd.json5
-rw-r--r--languages/i18n/pdc.json9
-rw-r--r--languages/i18n/pdt.json14
-rw-r--r--languages/i18n/pfl.json574
-rw-r--r--languages/i18n/pi.json136
-rw-r--r--languages/i18n/pih.json80
-rw-r--r--languages/i18n/pl.json280
-rw-r--r--languages/i18n/pms.json276
-rw-r--r--languages/i18n/pnb.json92
-rw-r--r--languages/i18n/pnt.json5
-rw-r--r--languages/i18n/prg.json18
-rw-r--r--languages/i18n/ps.json213
-rw-r--r--languages/i18n/pt-br.json227
-rw-r--r--languages/i18n/pt.json227
-rw-r--r--languages/i18n/qqq.json421
-rw-r--r--languages/i18n/qu.json70
-rw-r--r--languages/i18n/qug.json5
-rw-r--r--languages/i18n/rgn.json4
-rw-r--r--languages/i18n/rif.json4
-rw-r--r--languages/i18n/rm.json47
-rw-r--r--languages/i18n/rmy.json734
-rw-r--r--languages/i18n/ro.json261
-rw-r--r--languages/i18n/roa-tara.json146
-rw-r--r--languages/i18n/ru.json457
-rw-r--r--languages/i18n/rue.json74
-rw-r--r--languages/i18n/rup.json83
-rw-r--r--languages/i18n/ruq-cyrl.json502
-rw-r--r--languages/i18n/ruq-latn.json502
-rw-r--r--languages/i18n/sa.json495
-rw-r--r--languages/i18n/sah.json172
-rw-r--r--languages/i18n/sat.json7
-rw-r--r--languages/i18n/sc.json213
-rw-r--r--languages/i18n/scn.json3177
-rw-r--r--languages/i18n/sco.json429
-rw-r--r--languages/i18n/sd.json56
-rw-r--r--languages/i18n/sdc.json8
-rw-r--r--languages/i18n/se.json6
-rw-r--r--languages/i18n/sei.json4
-rw-r--r--languages/i18n/ses.json3328
-rw-r--r--languages/i18n/sg.json474
-rw-r--r--languages/i18n/sgs.json271
-rw-r--r--languages/i18n/sh.json46
-rw-r--r--languages/i18n/shi.json9
-rw-r--r--languages/i18n/si.json124
-rw-r--r--languages/i18n/sk.json152
-rw-r--r--languages/i18n/sl.json233
-rw-r--r--languages/i18n/sli.json15
-rw-r--r--languages/i18n/sm.json300
-rw-r--r--languages/i18n/sma.json1286
-rw-r--r--languages/i18n/sn.json240
-rw-r--r--languages/i18n/so.json8
-rw-r--r--languages/i18n/sq.json138
-rw-r--r--languages/i18n/sr-ec.json304
-rw-r--r--languages/i18n/sr-el.json309
-rw-r--r--languages/i18n/srn.json4
-rw-r--r--languages/i18n/ss.json421
-rw-r--r--languages/i18n/st.json216
-rw-r--r--languages/i18n/stq.json20
-rw-r--r--languages/i18n/su.json140
-rw-r--r--languages/i18n/sv.json326
-rw-r--r--languages/i18n/sw.json34
-rw-r--r--languages/i18n/szl.json186
-rw-r--r--languages/i18n/ta.json71
-rw-r--r--languages/i18n/tcy.json87
-rw-r--r--languages/i18n/te.json87
-rw-r--r--languages/i18n/tet.json9
-rw-r--r--languages/i18n/tg-cyrl.json28
-rw-r--r--languages/i18n/tg-latn.json14
-rw-r--r--languages/i18n/th.json1361
-rw-r--r--languages/i18n/ti.json234
-rw-r--r--languages/i18n/tk.json19
-rw-r--r--languages/i18n/tl.json61
-rw-r--r--languages/i18n/tly.json6
-rw-r--r--languages/i18n/tn.json228
-rw-r--r--languages/i18n/to.json6
-rw-r--r--languages/i18n/tokipona.json222
-rw-r--r--languages/i18n/tpi.json7
-rw-r--r--languages/i18n/tr.json204
-rw-r--r--languages/i18n/tru.json5
-rw-r--r--languages/i18n/ts.json5
-rw-r--r--languages/i18n/tt-cyrl.json211
-rw-r--r--languages/i18n/tt-latn.json19
-rw-r--r--languages/i18n/tw.json5
-rw-r--r--languages/i18n/ty.json223
-rw-r--r--languages/i18n/tyv.json38
-rw-r--r--languages/i18n/tzm.json6
-rw-r--r--languages/i18n/udm.json399
-rw-r--r--languages/i18n/ug-arab.json60
-rw-r--r--languages/i18n/ug-latn.json311
-rw-r--r--languages/i18n/uk.json390
-rw-r--r--languages/i18n/ur.json243
-rw-r--r--languages/i18n/uz.json348
-rw-r--r--languages/i18n/vec.json81
-rw-r--r--languages/i18n/vep.json26
-rw-r--r--languages/i18n/vi.json208
-rw-r--r--languages/i18n/vls.json280
-rw-r--r--languages/i18n/vmf.json5
-rw-r--r--languages/i18n/vo.json82
-rw-r--r--languages/i18n/vot.json6
-rw-r--r--languages/i18n/vro.json105
-rw-r--r--languages/i18n/wa.json26
-rw-r--r--languages/i18n/war.json36
-rw-r--r--languages/i18n/wo.json14
-rw-r--r--languages/i18n/wuu.json17
-rw-r--r--languages/i18n/xal.json748
-rw-r--r--languages/i18n/xh.json207
-rw-r--r--languages/i18n/xmf.json5
-rw-r--r--languages/i18n/yi.json207
-rw-r--r--languages/i18n/yo.json60
-rw-r--r--languages/i18n/yue.json528
-rw-r--r--languages/i18n/za.json470
-rw-r--r--languages/i18n/zea.json30
-rw-r--r--languages/i18n/zh-hans.json426
-rw-r--r--languages/i18n/zh-hant.json796
-rw-r--r--languages/i18n/zu.json509
-rw-r--r--languages/messages/MessagesAce.php59
-rw-r--r--languages/messages/MessagesAf.php14
-rw-r--r--languages/messages/MessagesAng.php10
-rw-r--r--languages/messages/MessagesAr.php15
-rw-r--r--languages/messages/MessagesArc.php1
-rw-r--r--languages/messages/MessagesArz.php130
-rw-r--r--languages/messages/MessagesAst.php1
-rw-r--r--languages/messages/MessagesAv.php101
-rw-r--r--languages/messages/MessagesAz.php1
-rw-r--r--languages/messages/MessagesAzb.php1
-rw-r--r--languages/messages/MessagesBe_tarask.php1
-rw-r--r--languages/messages/MessagesBg.php1
-rw-r--r--languages/messages/MessagesBgn.php58
-rw-r--r--languages/messages/MessagesBho.php25
-rw-r--r--languages/messages/MessagesBr.php1
-rw-r--r--languages/messages/MessagesBs.php1
-rw-r--r--languages/messages/MessagesCa.php4
-rw-r--r--languages/messages/MessagesCdo.php4
-rw-r--r--languages/messages/MessagesCe.php112
-rw-r--r--languages/messages/MessagesCkb.php12
-rw-r--r--languages/messages/MessagesDe.php11
-rw-r--r--languages/messages/MessagesDiq.php276
-rw-r--r--languages/messages/MessagesDv.php1
-rw-r--r--languages/messages/MessagesEl.php14
-rw-r--r--languages/messages/MessagesEn.php20
-rw-r--r--languages/messages/MessagesEo.php1
-rw-r--r--languages/messages/MessagesEs.php38
-rw-r--r--languages/messages/MessagesEt.php12
-rw-r--r--languages/messages/MessagesFa.php48
-rw-r--r--languages/messages/MessagesFi.php23
-rw-r--r--languages/messages/MessagesFr.php1
-rw-r--r--languages/messages/MessagesFrp.php5
-rw-r--r--languages/messages/MessagesGl.php71
-rw-r--r--languages/messages/MessagesHaw.php43
-rw-r--r--languages/messages/MessagesHe.php13
-rw-r--r--languages/messages/MessagesHi.php163
-rw-r--r--languages/messages/MessagesHr.php8
-rw-r--r--languages/messages/MessagesHsb.php3
-rw-r--r--languages/messages/MessagesHu.php1
-rw-r--r--languages/messages/MessagesId.php1
-rw-r--r--languages/messages/MessagesIt.php17
-rw-r--r--languages/messages/MessagesJa.php21
-rw-r--r--languages/messages/MessagesKhw.php1
-rw-r--r--languages/messages/MessagesKk_arab.php1
-rw-r--r--languages/messages/MessagesKo.php27
-rw-r--r--languages/messages/MessagesKs_arab.php1
-rw-r--r--languages/messages/MessagesKsh.php2
-rw-r--r--languages/messages/MessagesKw.php1
-rw-r--r--languages/messages/MessagesLb.php40
-rw-r--r--languages/messages/MessagesLrc.php134
-rw-r--r--languages/messages/MessagesLzh.php4
-rw-r--r--languages/messages/MessagesMai.php18
-rw-r--r--languages/messages/MessagesMg.php79
-rw-r--r--languages/messages/MessagesMhr.php2
-rw-r--r--languages/messages/MessagesMin.php6
-rw-r--r--languages/messages/MessagesMk.php43
-rw-r--r--languages/messages/MessagesMl.php9
-rw-r--r--languages/messages/MessagesMn.php4
-rw-r--r--languages/messages/MessagesMr.php1
-rw-r--r--languages/messages/MessagesMs.php29
-rw-r--r--languages/messages/MessagesMt.php1
-rw-r--r--languages/messages/MessagesMzn.php2
-rw-r--r--languages/messages/MessagesNan.php48
-rw-r--r--languages/messages/MessagesNb.php6
-rw-r--r--languages/messages/MessagesNds.php1
-rw-r--r--languages/messages/MessagesNds_nl.php2
-rw-r--r--languages/messages/MessagesNe.php5
-rw-r--r--languages/messages/MessagesNl.php7
-rw-r--r--languages/messages/MessagesNn.php7
-rw-r--r--languages/messages/MessagesOc.php3
-rw-r--r--languages/messages/MessagesOr.php1
-rw-r--r--languages/messages/MessagesPa.php47
-rw-r--r--languages/messages/MessagesPl.php8
-rw-r--r--languages/messages/MessagesPt.php12
-rw-r--r--languages/messages/MessagesPt_br.php2
-rw-r--r--languages/messages/MessagesQu.php29
-rw-r--r--languages/messages/MessagesRo.php1
-rw-r--r--languages/messages/MessagesRu.php3
-rw-r--r--languages/messages/MessagesRue.php18
-rw-r--r--languages/messages/MessagesSa.php1
-rw-r--r--languages/messages/MessagesSes.php10
-rw-r--r--languages/messages/MessagesSh.php1
-rw-r--r--languages/messages/MessagesSq.php1
-rw-r--r--languages/messages/MessagesSr_ec.php66
-rw-r--r--languages/messages/MessagesSr_el.php2
-rw-r--r--languages/messages/MessagesSv.php26
-rw-r--r--languages/messages/MessagesTe.php10
-rw-r--r--languages/messages/MessagesTet.php2
-rw-r--r--languages/messages/MessagesTly.php1
-rw-r--r--languages/messages/MessagesTr.php1
-rw-r--r--languages/messages/MessagesTt_cyrl.php6
-rw-r--r--languages/messages/MessagesTyv.php14
-rw-r--r--languages/messages/MessagesUk.php48
-rw-r--r--languages/messages/MessagesUr.php13
-rw-r--r--languages/messages/MessagesUz.php1
-rw-r--r--languages/messages/MessagesVi.php18
-rw-r--r--languages/messages/MessagesYi.php7
-rw-r--r--languages/messages/MessagesZh.php77
-rw-r--r--languages/messages/MessagesZh_hans.php135
-rw-r--r--languages/messages/MessagesZh_hant.php229
-rw-r--r--languages/messages/MessagesZh_tw.php28
-rw-r--r--load.php24
-rw-r--r--load.php52
-rw-r--r--maintenance/Doxyfile111
-rw-r--r--maintenance/Maintenance.php73
-rw-r--r--maintenance/archives/patch-drop-page_counter.sql2
-rw-r--r--maintenance/archives/patch-drop-ss_total_views.sql2
-rw-r--r--maintenance/archives/patch-editsummary-length.sql11
-rw-r--r--maintenance/archives/patch-hitcounter.sql9
-rw-r--r--maintenance/archives/patch-user-newtalk-userid-unsigned.sql1
-rw-r--r--maintenance/backupTextPass.inc113
-rw-r--r--maintenance/benchmarks/bench_HTTP_HTTPS.php2
-rw-r--r--maintenance/cdb.php2
-rw-r--r--maintenance/checkComposerLockUpToDate.php63
-rw-r--r--maintenance/checkLess.php12
-rw-r--r--maintenance/cleanupBlocks.php147
-rw-r--r--maintenance/cleanupCaps.php11
-rw-r--r--maintenance/convertExtensionToRegistration.php226
-rw-r--r--maintenance/dev/includes/router.php2
-rw-r--r--maintenance/dictionary/mediawiki.dic6
-rw-r--r--maintenance/doMaintenance.php36
-rw-r--r--maintenance/dumpIterator.php4
-rw-r--r--maintenance/dumpSisterSites.php62
-rw-r--r--maintenance/dumpTextPass.php2
-rw-r--r--maintenance/eval.php39
-rw-r--r--maintenance/exportSites.php54
-rw-r--r--maintenance/fetchText.php5
-rw-r--r--maintenance/findHooks.php56
-rw-r--r--maintenance/findMissingFiles.php26
-rw-r--r--maintenance/fixUserRegistration.php64
-rw-r--r--maintenance/generateLocalAutoload.php25
-rw-r--r--maintenance/generateSitemap.php23
-rw-r--r--maintenance/importDump.php2
-rw-r--r--maintenance/importImages.inc4
-rw-r--r--maintenance/importSiteScripts.php39
-rw-r--r--maintenance/importSites.php52
-rw-r--r--maintenance/initSiteStats.php12
-rw-r--r--maintenance/interwiki.list150
-rw-r--r--maintenance/interwiki.sql152
-rw-r--r--maintenance/jsduck/CustomTags.rb116
-rw-r--r--maintenance/jsduck/categories.json11
-rw-r--r--maintenance/jsduck/custom_tags.rb120
-rw-r--r--maintenance/jsduck/eg-iframe.html71
-rw-r--r--maintenance/language/StatOutputs.php2
-rw-r--r--maintenance/language/checkLanguage.php2
-rw-r--r--maintenance/language/generateCollationData.php4
-rw-r--r--maintenance/language/generateNormalizerDataAr.php6
-rw-r--r--maintenance/language/generateNormalizerDataMl.php6
-rw-r--r--maintenance/language/generateUtf8Case.php6
-rw-r--r--maintenance/language/zhtable/Makefile.py20
-rw-r--r--maintenance/language/zhtable/README24
-rw-r--r--maintenance/language/zhtable/simp2trad.manual195
-rw-r--r--maintenance/language/zhtable/simp2trad_noconvert.manual143
-rw-r--r--maintenance/language/zhtable/simpphrases.manual2104
-rw-r--r--maintenance/language/zhtable/simpphrases_exclude.manual11
-rw-r--r--maintenance/language/zhtable/symme_supp.manual27
-rw-r--r--maintenance/language/zhtable/toCN.manual2666
-rw-r--r--maintenance/language/zhtable/toHK.manual1418
-rw-r--r--maintenance/language/zhtable/toSG.manual21
-rw-r--r--maintenance/language/zhtable/toSimp.manual148
-rw-r--r--maintenance/language/zhtable/toTW.manual729
-rw-r--r--maintenance/language/zhtable/toTrad.manual367
-rw-r--r--maintenance/language/zhtable/trad2simp.manual733
-rw-r--r--maintenance/language/zhtable/trad2simp_noconvert.manual9
-rw-r--r--maintenance/language/zhtable/tradphrases.manual1845
-rw-r--r--maintenance/language/zhtable/tradphrases_exclude.manual349
-rw-r--r--maintenance/mergeMessageFileList.php43
-rw-r--r--maintenance/moveBatch.php8
-rw-r--r--maintenance/mssql/tables.sql16
-rw-r--r--maintenance/mwdoc-filter.php29
-rw-r--r--maintenance/mwdocgen.php1
-rw-r--r--maintenance/namespaceDupes.php390
-rw-r--r--maintenance/oracle/tables.sql6
-rw-r--r--maintenance/parse.php4
-rw-r--r--maintenance/populateBloomCache.php78
-rw-r--r--maintenance/populateParentId.php2
-rw-r--r--maintenance/populateRevisionSha1.php4
-rw-r--r--maintenance/postgres/compare_schemas.pl1
-rw-r--r--maintenance/postgres/tables.sql6
-rw-r--r--maintenance/preprocessorFuzzTest.php2
-rw-r--r--maintenance/purgeChangedFiles.php1
-rw-r--r--maintenance/purgeChangedPages.php1
-rw-r--r--maintenance/rebuildLocalisationCache.php23
-rw-r--r--maintenance/rebuildSitesCache.php68
-rw-r--r--maintenance/rebuildtextindex.php1
-rw-r--r--maintenance/refreshLinks.php174
-rw-r--r--maintenance/removeInvalidEmails.php78
-rw-r--r--maintenance/renderDump.php2
-rw-r--r--maintenance/resources/update-oojs-ui.sh116
-rw-r--r--maintenance/resources/update-oojs.sh4
-rw-r--r--maintenance/runJobs.php4
-rw-r--r--maintenance/showJobs.php20
-rw-r--r--maintenance/showSiteStats.php1
-rw-r--r--maintenance/sql.php3
-rw-r--r--maintenance/sqlite.inc2
-rw-r--r--maintenance/sqlite.php6
-rw-r--r--maintenance/sqlite/archives/initial-indexes.sql2
-rw-r--r--maintenance/sqlite/archives/patch-drop-page_counter.sql31
-rw-r--r--maintenance/sqlite/archives/patch-drop-ss_admins.sql3
-rw-r--r--maintenance/sqlite/archives/patch-drop-ss_total_views.sql21
-rw-r--r--maintenance/sqlite/archives/patch-editsummary-length.sql65
-rw-r--r--maintenance/storage/checkStorage.php6
-rw-r--r--maintenance/storage/compressOld.php16
-rw-r--r--maintenance/storage/moveToExternal.php1
-rw-r--r--maintenance/storage/recompressTracked.php6
-rw-r--r--maintenance/storage/resolveStubs.php2
-rw-r--r--maintenance/tables.sql54
-rw-r--r--maintenance/update.php24
-rw-r--r--maintenance/updateArticleCount.php8
-rw-r--r--maintenance/updateSpecialPages.php12
-rw-r--r--maintenance/validateRegistrationFile.php37
-rw-r--r--mw-config/index.php10
-rw-r--r--mw-config/overrides.php2
-rw-r--r--opensearch_desc.php19
-rw-r--r--opensearch_desc.php52
-rw-r--r--profileinfo.php12
-rw-r--r--profileinfo.php52
-rw-r--r--resources/Resources.php379
-rw-r--r--resources/assets/file-type-icons/COPYING2
-rw-r--r--resources/assets/poweredby_mediawiki_132x47.pngbin0 -> 6011 bytes
-rw-r--r--resources/assets/poweredby_mediawiki_176x62.pngbin0 -> 8796 bytes
-rw-r--r--resources/lib/jquery.client/AUTHORS.txt9
-rw-r--r--resources/lib/jquery.client/LICENSE-MIT.txt20
-rw-r--r--resources/lib/jquery.client/README.md6
-rw-r--r--resources/lib/jquery.client/jquery.client.js (renamed from resources/src/jquery/jquery.client.js)26
-rw-r--r--resources/lib/jquery.ui/themes/smoothness/PATCHES3
-rw-r--r--resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css2
-rw-r--r--resources/lib/jquery.ui/themes/smoothness/jquery.ui.theme.css4
-rw-r--r--resources/lib/jquery/jquery.jStorage.js20
-rw-r--r--resources/lib/jquery/jquery.js13
-rw-r--r--resources/lib/jquery/jquery.json.js199
-rw-r--r--resources/lib/jquery/jquery.migrate.js551
-rw-r--r--resources/lib/jquery/jquery.qunit.css237
-rw-r--r--resources/lib/jquery/jquery.qunit.js2288
-rw-r--r--resources/lib/moment/locale/af.js4
-rw-r--r--resources/lib/moment/locale/ar-ma.js3
-rw-r--r--resources/lib/moment/locale/ar-sa.js5
-rw-r--r--resources/lib/moment/locale/ar.js5
-rw-r--r--resources/lib/moment/locale/az.js4
-rw-r--r--resources/lib/moment/locale/be.js4
-rw-r--r--resources/lib/moment/locale/bg.js4
-rw-r--r--resources/lib/moment/locale/bn.js3
-rw-r--r--resources/lib/moment/locale/bo.js3
-rw-r--r--resources/lib/moment/locale/br.js4
-rw-r--r--resources/lib/moment/locale/bs.js8
-rw-r--r--resources/lib/moment/locale/ca.js15
-rw-r--r--resources/lib/moment/locale/cs.js6
-rw-r--r--resources/lib/moment/locale/cv.js4
-rw-r--r--resources/lib/moment/locale/cy.js4
-rw-r--r--resources/lib/moment/locale/da.js4
-rw-r--r--resources/lib/moment/locale/de-at.js16
-rw-r--r--resources/lib/moment/locale/de.js16
-rw-r--r--resources/lib/moment/locale/el.js10
-rw-r--r--resources/lib/moment/locale/en-au.js4
-rw-r--r--resources/lib/moment/locale/en-ca.js4
-rw-r--r--resources/lib/moment/locale/en-gb.js4
-rw-r--r--resources/lib/moment/locale/eo.js4
-rw-r--r--resources/lib/moment/locale/es.js4
-rw-r--r--resources/lib/moment/locale/et.js4
-rw-r--r--resources/lib/moment/locale/eu.js4
-rw-r--r--resources/lib/moment/locale/fa.js4
-rw-r--r--resources/lib/moment/locale/fi.js4
-rw-r--r--resources/lib/moment/locale/fo.js4
-rw-r--r--resources/lib/moment/locale/fr-ca.js4
-rw-r--r--resources/lib/moment/locale/fr.js4
-rw-r--r--resources/lib/moment/locale/gl.js4
-rw-r--r--resources/lib/moment/locale/he.js3
-rw-r--r--resources/lib/moment/locale/hi.js3
-rw-r--r--resources/lib/moment/locale/hr.js4
-rw-r--r--resources/lib/moment/locale/hu.js4
-rw-r--r--resources/lib/moment/locale/hy-am.js4
-rw-r--r--resources/lib/moment/locale/id.js3
-rw-r--r--resources/lib/moment/locale/is.js4
-rw-r--r--resources/lib/moment/locale/it.js13
-rw-r--r--resources/lib/moment/locale/ja.js3
-rw-r--r--resources/lib/moment/locale/ka.js4
-rw-r--r--resources/lib/moment/locale/km.js3
-rw-r--r--resources/lib/moment/locale/ko.js4
-rw-r--r--resources/lib/moment/locale/lb.js4
-rw-r--r--resources/lib/moment/locale/lt.js4
-rw-r--r--resources/lib/moment/locale/lv.js4
-rw-r--r--resources/lib/moment/locale/mk.js4
-rw-r--r--resources/lib/moment/locale/ml.js3
-rw-r--r--resources/lib/moment/locale/mr.js3
-rw-r--r--resources/lib/moment/locale/ms-my.js3
-rw-r--r--resources/lib/moment/locale/my.js3
-rw-r--r--resources/lib/moment/locale/nb.js4
-rw-r--r--resources/lib/moment/locale/ne.js3
-rw-r--r--resources/lib/moment/locale/nl.js4
-rw-r--r--resources/lib/moment/locale/nn.js4
-rw-r--r--resources/lib/moment/locale/pl.js4
-rw-r--r--resources/lib/moment/locale/pt-br.js4
-rw-r--r--resources/lib/moment/locale/pt.js4
-rw-r--r--resources/lib/moment/locale/ro.js3
-rw-r--r--resources/lib/moment/locale/ru.js40
-rw-r--r--resources/lib/moment/locale/sk.js4
-rw-r--r--resources/lib/moment/locale/sl.js4
-rw-r--r--resources/lib/moment/locale/sq.js4
-rw-r--r--resources/lib/moment/locale/sr-cyrl.js4
-rw-r--r--resources/lib/moment/locale/sr.js4
-rw-r--r--resources/lib/moment/locale/sv.js4
-rw-r--r--resources/lib/moment/locale/ta.js4
-rw-r--r--resources/lib/moment/locale/th.js3
-rw-r--r--resources/lib/moment/locale/tl-ph.js4
-rw-r--r--resources/lib/moment/locale/tr.js4
-rw-r--r--resources/lib/moment/locale/tzm-latn.js3
-rw-r--r--resources/lib/moment/locale/tzm.js3
-rw-r--r--resources/lib/moment/locale/uk.js4
-rw-r--r--resources/lib/moment/locale/uz.js3
-rw-r--r--resources/lib/moment/locale/vi.js4
-rw-r--r--resources/lib/moment/locale/zh-cn.js4
-rw-r--r--resources/lib/moment/locale/zh-tw.js4
-rw-r--r--resources/lib/moment/moment.js148
-rw-r--r--resources/lib/mustache/mustache.js578
-rw-r--r--resources/lib/oojs-ui/i18n/ace.json1
-rw-r--r--resources/lib/oojs-ui/i18n/af.json13
-rw-r--r--resources/lib/oojs-ui/i18n/am.json3
-rw-r--r--resources/lib/oojs-ui/i18n/ar.json8
-rw-r--r--resources/lib/oojs-ui/i18n/arc.json3
-rw-r--r--resources/lib/oojs-ui/i18n/awa.json8
-rw-r--r--resources/lib/oojs-ui/i18n/az.json1
-rw-r--r--resources/lib/oojs-ui/i18n/ba.json1
-rw-r--r--resources/lib/oojs-ui/i18n/bcc.json9
-rw-r--r--resources/lib/oojs-ui/i18n/bcl.json1
-rw-r--r--resources/lib/oojs-ui/i18n/be-tarask.json1
-rw-r--r--resources/lib/oojs-ui/i18n/be.json7
-rw-r--r--resources/lib/oojs-ui/i18n/bg.json1
-rw-r--r--resources/lib/oojs-ui/i18n/bn.json16
-rw-r--r--resources/lib/oojs-ui/i18n/br.json8
-rw-r--r--resources/lib/oojs-ui/i18n/bs.json13
-rw-r--r--resources/lib/oojs-ui/i18n/ca.json16
-rw-r--r--resources/lib/oojs-ui/i18n/ce.json10
-rw-r--r--resources/lib/oojs-ui/i18n/ckb.json6
-rw-r--r--resources/lib/oojs-ui/i18n/co.json1
-rw-r--r--resources/lib/oojs-ui/i18n/crh-cyrl.json8
-rw-r--r--resources/lib/oojs-ui/i18n/crh-latn.json8
-rw-r--r--resources/lib/oojs-ui/i18n/cs.json8
-rw-r--r--resources/lib/oojs-ui/i18n/cu.json4
-rw-r--r--resources/lib/oojs-ui/i18n/cy.json1
-rw-r--r--resources/lib/oojs-ui/i18n/da.json1
-rw-r--r--resources/lib/oojs-ui/i18n/de.json5
-rw-r--r--resources/lib/oojs-ui/i18n/diq.json1
-rw-r--r--resources/lib/oojs-ui/i18n/dsb.json1
-rw-r--r--resources/lib/oojs-ui/i18n/egl.json7
-rw-r--r--resources/lib/oojs-ui/i18n/el.json5
-rw-r--r--resources/lib/oojs-ui/i18n/eml.json7
-rw-r--r--resources/lib/oojs-ui/i18n/en.json5
-rw-r--r--resources/lib/oojs-ui/i18n/eo.json1
-rw-r--r--resources/lib/oojs-ui/i18n/es.json5
-rw-r--r--resources/lib/oojs-ui/i18n/et.json5
-rw-r--r--resources/lib/oojs-ui/i18n/eu.json13
-rw-r--r--resources/lib/oojs-ui/i18n/fa.json8
-rw-r--r--resources/lib/oojs-ui/i18n/fi.json5
-rw-r--r--resources/lib/oojs-ui/i18n/fo.json12
-rw-r--r--resources/lib/oojs-ui/i18n/fr.json8
-rw-r--r--resources/lib/oojs-ui/i18n/frr.json1
-rw-r--r--resources/lib/oojs-ui/i18n/fur.json1
-rw-r--r--resources/lib/oojs-ui/i18n/fy.json11
-rw-r--r--resources/lib/oojs-ui/i18n/gl.json8
-rw-r--r--resources/lib/oojs-ui/i18n/he.json5
-rw-r--r--resources/lib/oojs-ui/i18n/hi.json14
-rw-r--r--resources/lib/oojs-ui/i18n/hr.json2
-rw-r--r--resources/lib/oojs-ui/i18n/hsb.json11
-rw-r--r--resources/lib/oojs-ui/i18n/hu.json5
-rw-r--r--resources/lib/oojs-ui/i18n/hy.json5
-rw-r--r--resources/lib/oojs-ui/i18n/id.json12
-rw-r--r--resources/lib/oojs-ui/i18n/ie.json1
-rw-r--r--resources/lib/oojs-ui/i18n/ilo.json5
-rw-r--r--resources/lib/oojs-ui/i18n/is.json12
-rw-r--r--resources/lib/oojs-ui/i18n/it.json5
-rw-r--r--resources/lib/oojs-ui/i18n/ja.json8
-rw-r--r--resources/lib/oojs-ui/i18n/jv.json1
-rw-r--r--resources/lib/oojs-ui/i18n/ka.json12
-rw-r--r--resources/lib/oojs-ui/i18n/kk-cyrl.json11
-rw-r--r--resources/lib/oojs-ui/i18n/km.json1
-rw-r--r--resources/lib/oojs-ui/i18n/kn.json21
-rw-r--r--resources/lib/oojs-ui/i18n/ko.json5
-rw-r--r--resources/lib/oojs-ui/i18n/krc.json11
-rw-r--r--resources/lib/oojs-ui/i18n/ksh.json19
-rw-r--r--resources/lib/oojs-ui/i18n/ku-latn.json13
-rw-r--r--resources/lib/oojs-ui/i18n/kw.json3
-rw-r--r--resources/lib/oojs-ui/i18n/ky.json3
-rw-r--r--resources/lib/oojs-ui/i18n/lb.json5
-rw-r--r--resources/lib/oojs-ui/i18n/lmo.json1
-rw-r--r--resources/lib/oojs-ui/i18n/lt.json1
-rw-r--r--resources/lib/oojs-ui/i18n/lv.json6
-rw-r--r--resources/lib/oojs-ui/i18n/lzh.json2
-rw-r--r--resources/lib/oojs-ui/i18n/mg.json3
-rw-r--r--resources/lib/oojs-ui/i18n/min.json7
-rw-r--r--resources/lib/oojs-ui/i18n/mk.json5
-rw-r--r--resources/lib/oojs-ui/i18n/ml.json1
-rw-r--r--resources/lib/oojs-ui/i18n/mr.json1
-rw-r--r--resources/lib/oojs-ui/i18n/nap.json1
-rw-r--r--resources/lib/oojs-ui/i18n/nb.json8
-rw-r--r--resources/lib/oojs-ui/i18n/nds-nl.json13
-rw-r--r--resources/lib/oojs-ui/i18n/nds.json1
-rw-r--r--resources/lib/oojs-ui/i18n/ne.json12
-rw-r--r--resources/lib/oojs-ui/i18n/nl.json5
-rw-r--r--resources/lib/oojs-ui/i18n/nn.json1
-rw-r--r--resources/lib/oojs-ui/i18n/oc.json5
-rw-r--r--resources/lib/oojs-ui/i18n/om.json5
-rw-r--r--resources/lib/oojs-ui/i18n/or.json13
-rw-r--r--resources/lib/oojs-ui/i18n/pa.json15
-rw-r--r--resources/lib/oojs-ui/i18n/pfl.json6
-rw-r--r--resources/lib/oojs-ui/i18n/pl.json5
-rw-r--r--resources/lib/oojs-ui/i18n/pms.json1
-rw-r--r--resources/lib/oojs-ui/i18n/ps.json11
-rw-r--r--resources/lib/oojs-ui/i18n/pt-br.json1
-rw-r--r--resources/lib/oojs-ui/i18n/pt.json5
-rw-r--r--resources/lib/oojs-ui/i18n/qqq.json5
-rw-r--r--resources/lib/oojs-ui/i18n/qu.json1
-rw-r--r--resources/lib/oojs-ui/i18n/ro.json5
-rw-r--r--resources/lib/oojs-ui/i18n/roa-tara.json12
-rw-r--r--resources/lib/oojs-ui/i18n/ru.json8
-rw-r--r--resources/lib/oojs-ui/i18n/sah.json3
-rw-r--r--resources/lib/oojs-ui/i18n/scn.json4
-rw-r--r--resources/lib/oojs-ui/i18n/sco.json1
-rw-r--r--resources/lib/oojs-ui/i18n/sh.json1
-rw-r--r--resources/lib/oojs-ui/i18n/si.json1
-rw-r--r--resources/lib/oojs-ui/i18n/sk.json2
-rw-r--r--resources/lib/oojs-ui/i18n/sl.json5
-rw-r--r--resources/lib/oojs-ui/i18n/sr-ec.json5
-rw-r--r--resources/lib/oojs-ui/i18n/sr-el.json10
-rw-r--r--resources/lib/oojs-ui/i18n/sv.json5
-rw-r--r--resources/lib/oojs-ui/i18n/ta.json6
-rw-r--r--resources/lib/oojs-ui/i18n/te.json3
-rw-r--r--resources/lib/oojs-ui/i18n/tg-cyrl.json1
-rw-r--r--resources/lib/oojs-ui/i18n/th.json1
-rw-r--r--resources/lib/oojs-ui/i18n/tl.json7
-rw-r--r--resources/lib/oojs-ui/i18n/tr.json15
-rw-r--r--resources/lib/oojs-ui/i18n/tt-cyrl.json1
-rw-r--r--resources/lib/oojs-ui/i18n/uk.json8
-rw-r--r--resources/lib/oojs-ui/i18n/uz.json1
-rw-r--r--resources/lib/oojs-ui/i18n/vec.json4
-rw-r--r--resources/lib/oojs-ui/i18n/vi.json8
-rw-r--r--resources/lib/oojs-ui/i18n/vo.json1
-rw-r--r--resources/lib/oojs-ui/i18n/yo.json1
-rw-r--r--resources/lib/oojs-ui/i18n/zh-hans.json11
-rw-r--r--resources/lib/oojs-ui/i18n/zh-hant.json10
-rw-r--r--resources/lib/oojs-ui/images/anchor.pngbin203 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/anchor.svg7
-rw-r--r--resources/lib/oojs-ui/images/grab.curbin0 -> 326 bytes
-rw-r--r--resources/lib/oojs-ui/images/grabbing.curbin0 -> 326 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/accept.pngbin332 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/accept.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/add-item.pngbin145 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/add-item.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/advanced.pngbin531 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/advanced.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/alert.pngbin448 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/alert.svg8
-rw-r--r--resources/lib/oojs-ui/images/icons/arched-arrow-ltr.pngbin294 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/arched-arrow-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/arched-arrow-rtl.pngbin296 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/arched-arrow-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/check.pngbin235 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/check.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/clear.pngbin430 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/clear.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/close.pngbin286 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/code.pngbin313 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/code.svg7
-rw-r--r--resources/lib/oojs-ui/images/icons/collapse.pngbin221 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/collapse.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/comment.pngbin244 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/comment.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/expand.pngbin237 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/expand.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/help.pngbin591 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/help.svg10
-rw-r--r--resources/lib/oojs-ui/images/icons/history.pngbin591 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/history.svg7
-rw-r--r--resources/lib/oojs-ui/images/icons/info.pngbin349 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/info.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/link.pngbin348 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/menu.pngbin190 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/menu.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/move-ltr.pngbin254 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/move-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/move-rtl.pngbin250 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/move-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/picture.pngbin402 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/picture.svg8
-rw-r--r--resources/lib/oojs-ui/images/icons/remove-item.pngbin131 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/remove-item.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/remove.pngbin175 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/remove.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/search.pngbin267 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/search.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/settings.pngbin230 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/settings.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/tag.pngbin319 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/tag.svg6
-rw-r--r--resources/lib/oojs-ui/images/icons/window.pngbin309 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/icons/window.svg7
-rw-r--r--resources/lib/oojs-ui/images/indicators/alert.pngbin256 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/indicators/alert.svg6
-rw-r--r--resources/lib/oojs-ui/images/indicators/arrow-down.pngbin199 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/indicators/arrow-down.svg6
-rw-r--r--resources/lib/oojs-ui/images/indicators/arrow-ltr.pngbin204 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/indicators/arrow-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/images/indicators/arrow-rtl.pngbin194 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/indicators/arrow-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/images/indicators/arrow-up.pngbin180 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/indicators/arrow-up.svg6
-rw-r--r--resources/lib/oojs-ui/images/indicators/required.pngbin264 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/images/indicators/required.svg6
-rw-r--r--resources/lib/oojs-ui/oojs-ui-apex.css1945
-rw-r--r--resources/lib/oojs-ui/oojs-ui-apex.rtl.css1929
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css64
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css76
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css166
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css88
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css34
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css495
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css106
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css100
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css34
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css46
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css148
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css64
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css34
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css28
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css2660
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki.css3204
-rw-r--r--resources/lib/oojs-ui/oojs-ui-mediawiki.js66
-rw-r--r--resources/lib/oojs-ui/oojs-ui-minerva.css1397
-rw-r--r--resources/lib/oojs-ui/oojs-ui-minerva.rtl.css1381
-rw-r--r--resources/lib/oojs-ui/oojs-ui.css1159
-rw-r--r--resources/lib/oojs-ui/oojs-ui.js10609
-rw-r--r--resources/lib/oojs-ui/oojs-ui.rtl.css112
-rw-r--r--resources/lib/oojs-ui/oojs-ui.svg.css112
-rw-r--r--resources/lib/oojs-ui/oojs-ui.svg.rtl.css112
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.pngbin0 -> 152 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.pngbin0 -> 148 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/add.pngbin0 -> 144 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/add.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.pngbin0 -> 453 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.pngbin0 -> 404 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.pngbin0 -> 469 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.pngbin0 -> 594 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.pngbin0 -> 433 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.pngbin0 -> 165 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.pngbin0 -> 176 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.pngbin0 -> 176 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.pngbin0 -> 351 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.pngbin0 -> 309 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.pngbin0 -> 331 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.pngbin0 -> 286 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.pngbin0 -> 197 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.pngbin0 -> 198 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.pngbin0 -> 197 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.pngbin0 -> 190 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.pngbin0 -> 304 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.pngbin0 -> 295 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.pngbin0 -> 345 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.pngbin0 -> 377 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.pngbin0 -> 256 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.pngbin0 -> 365 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.pngbin0 -> 376 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.pngbin0 -> 348 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.pngbin0 -> 304 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.pngbin0 -> 341 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.pngbin0 -> 342 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.pngbin0 -> 461 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.pngbin0 -> 323 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/block.pngbin0 -> 295 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/block.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.pngbin0 -> 329 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.pngbin0 -> 309 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.pngbin0 -> 342 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.pngbin0 -> 317 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.pngbin0 -> 276 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.pngbin0 -> 289 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.pngbin0 -> 315 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.pngbin0 -> 342 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.pngbin0 -> 219 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.pngbin0 -> 232 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.pngbin0 -> 145 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.pngbin0 -> 343 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.pngbin0 -> 150 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.pngbin0 -> 315 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.pngbin0 -> 297 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.pngbin0 -> 143 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.pngbin0 -> 176 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.pngbin0 -> 256 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.pngbin0 -> 238 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.pngbin0 -> 236 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.pngbin0 -> 221 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.pngbin0 -> 216 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.pngbin0 -> 208 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.pngbin0 -> 201 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.pngbin0 -> 378 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.pngbin0 -> 351 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.pngbin0 -> 250 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.pngbin0 -> 252 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.pngbin0 -> 246 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.pngbin0 -> 252 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.pngbin0 -> 368 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.pngbin0 -> 252 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.pngbin0 -> 190 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.pngbin0 -> 280 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/check.pngbin0 -> 183 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/check.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.pngbin0 -> 337 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg2
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.pngbin0 -> 274 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.svg2
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.pngbin0 -> 244 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.svg2
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.pngbin0 -> 224 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.pngbin0 -> 225 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.pngbin0 -> 316 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.pngbin0 -> 334 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.pngbin0 -> 333 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.pngbin0 -> 296 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.pngbin0 -> 357 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.pngbin0 -> 319 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.pngbin0 -> 297 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/code.pngbin0 -> 272 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.pngbin0 -> 204 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.pngbin0 -> 207 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.pngbin0 -> 233 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.pngbin0 -> 211 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.pngbin0 -> 220 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.pngbin0 -> 223 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.pngbin0 -> 212 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.pngbin0 -> 252 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.pngbin0 -> 262 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.pngbin0 -> 320 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.pngbin0 -> 477 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.pngbin0 -> 282 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.pngbin0 -> 314 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.pngbin0 -> 480 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.pngbin0 -> 284 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.pngbin0 -> 360 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.pngbin0 -> 312 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.pngbin0 -> 369 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.pngbin0 -> 328 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.pngbin0 -> 447 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.pngbin0 -> 390 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.pngbin0 -> 439 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.pngbin0 -> 379 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.pngbin0 -> 172 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.svg14
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.pngbin0 -> 166 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.svg14
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.pngbin0 -> 212 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.pngbin0 -> 196 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.pngbin0 -> 184 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.pngbin0 -> 168 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.pngbin0 -> 180 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.pngbin0 -> 164 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.pngbin0 -> 353 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.pngbin0 -> 324 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.pngbin0 -> 298 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.pngbin0 -> 297 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.pngbin0 -> 260 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.pngbin0 -> 231 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.pngbin0 -> 263 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.pngbin0 -> 237 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.pngbin0 -> 306 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.svg16
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.pngbin0 -> 295 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.svg16
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.pngbin0 -> 309 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.svg16
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.pngbin0 -> 294 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.svg16
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.pngbin0 -> 163 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.pngbin0 -> 167 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.pngbin0 -> 231 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.pngbin0 -> 233 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.pngbin0 -> 263 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.pngbin0 -> 603 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg10
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.pngbin0 -> 529 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg10
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.pngbin0 -> 622 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg10
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.pngbin0 -> 543 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg10
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.pngbin0 -> 628 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/history.pngbin0 -> 543 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.pngbin0 -> 212 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.pngbin0 -> 207 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.pngbin0 -> 253 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.pngbin0 -> 237 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.pngbin0 -> 281 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.pngbin0 -> 288 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.pngbin0 -> 194 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.pngbin0 -> 187 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.pngbin0 -> 377 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/info.pngbin0 -> 328 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/info.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.pngbin0 -> 144 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.pngbin0 -> 284 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.pngbin0 -> 333 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.pngbin0 -> 271 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.pngbin0 -> 339 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.pngbin0 -> 300 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.pngbin0 -> 324 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.pngbin0 -> 254 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.pngbin0 -> 287 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.pngbin0 -> 208 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.pngbin0 -> 285 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.pngbin0 -> 321 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.pngbin0 -> 184 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.pngbin0 -> 193 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.pngbin0 -> 286 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.pngbin0 -> 280 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.pngbin0 -> 185 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.pngbin0 -> 187 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/language.pngbin0 -> 410 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.pngbin0 -> 166 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.pngbin0 -> 163 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.pngbin0 -> 467 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg13
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.pngbin0 -> 423 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg13
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.pngbin0 -> 506 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.pngbin0 -> 444 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.pngbin0 -> 193 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.pngbin0 -> 178 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.pngbin0 -> 174 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.pngbin0 -> 184 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.pngbin0 -> 347 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.pngbin0 -> 262 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.pngbin0 -> 239 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.pngbin0 -> 344 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.pngbin0 -> 257 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.pngbin0 -> 241 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.pngbin0 -> 219 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.pngbin0 -> 225 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.pngbin0 -> 373 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.pngbin0 -> 521 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.pngbin0 -> 459 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.pngbin0 -> 265 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.pngbin0 -> 303 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.pngbin0 -> 367 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.pngbin0 -> 384 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.pngbin0 -> 378 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.pngbin0 -> 181 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg10
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.pngbin0 -> 170 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg10
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.pngbin0 -> 290 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.pngbin0 -> 300 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.pngbin0 -> 225 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.pngbin0 -> 219 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.pngbin0 -> 221 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.pngbin0 -> 214 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move.pngbin0 -> 249 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/move.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.pngbin0 -> 216 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.pngbin0 -> 222 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.pngbin0 -> 267 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.pngbin0 -> 282 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.pngbin0 -> 188 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.pngbin0 -> 189 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.pngbin0 -> 234 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.pngbin0 -> 228 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.pngbin0 -> 190 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.pngbin0 -> 193 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.pngbin0 -> 153 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.pngbin0 -> 154 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.pngbin0 -> 220 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.pngbin0 -> 213 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.pngbin0 -> 396 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.pngbin0 -> 350 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.pngbin0 -> 307 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.pngbin0 -> 302 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.pngbin0 -> 222 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.pngbin0 -> 221 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.pngbin0 -> 344 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.pngbin0 -> 360 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.pngbin0 -> 319 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.pngbin0 -> 326 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.pngbin0 -> 293 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.pngbin0 -> 287 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.pngbin0 -> 382 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.pngbin0 -> 381 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.pngbin0 -> 340 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.pngbin0 -> 189 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.pngbin0 -> 181 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.pngbin0 -> 172 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.pngbin0 -> 402 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.pngbin0 -> 372 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.pngbin0 -> 350 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.pngbin0 -> 376 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.pngbin0 -> 341 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.pngbin0 -> 215 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.pngbin0 -> 201 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.pngbin0 -> 202 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.pngbin0 -> 191 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.pngbin0 -> 432 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.pngbin0 -> 446 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.pngbin0 -> 341 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.pngbin0 -> 342 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.pngbin0 -> 360 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.pngbin0 -> 158 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.pngbin0 -> 180 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.pngbin0 -> 189 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.pngbin0 -> 214 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.pngbin0 -> 179 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.pngbin0 -> 184 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.pngbin0 -> 484 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/star.pngbin0 -> 435 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/star.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.pngbin0 -> 368 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.pngbin0 -> 299 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.pngbin0 -> 306 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.pngbin0 -> 244 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.pngbin0 -> 159 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.pngbin0 -> 152 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.pngbin0 -> 164 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.pngbin0 -> 156 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.pngbin0 -> 142 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.svg12
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.pngbin0 -> 134 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.svg12
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.pngbin0 -> 148 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.pngbin0 -> 140 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.pngbin0 -> 147 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.pngbin0 -> 140 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.pngbin0 -> 159 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.pngbin0 -> 160 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.pngbin0 -> 153 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.pngbin0 -> 159 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.pngbin0 -> 160 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.pngbin0 -> 151 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.pngbin0 -> 244 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.svg5
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.pngbin0 -> 240 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.svg5
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.pngbin0 -> 409 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.svg5
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.pngbin0 -> 392 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.svg5
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.pngbin0 -> 241 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.svg5
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.pngbin0 -> 240 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.svg5
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.pngbin0 -> 154 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.pngbin0 -> 164 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.pngbin0 -> 165 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.pngbin0 -> 153 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.pngbin0 -> 151 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.svg11
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.pngbin0 -> 220 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.svg10
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table.pngbin0 -> 150 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/table.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.pngbin0 -> 419 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.pngbin0 -> 438 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.pngbin0 -> 295 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.pngbin0 -> 424 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.pngbin0 -> 403 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.pngbin0 -> 262 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.pngbin0 -> 193 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.pngbin0 -> 202 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.pngbin0 -> 224 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.pngbin0 -> 233 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.pngbin0 -> 306 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.pngbin0 -> 429 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.pngbin0 -> 437 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.pngbin0 -> 204 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.pngbin0 -> 193 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.pngbin0 -> 282 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.pngbin0 -> 254 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.pngbin0 -> 298 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.pngbin0 -> 280 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.pngbin0 -> 348 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.pngbin0 -> 265 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.pngbin0 -> 245 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.pngbin0 -> 345 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.pngbin0 -> 265 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.pngbin0 -> 245 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.pngbin0 -> 298 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.pngbin0 -> 262 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.pngbin0 -> 295 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.pngbin0 -> 220 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.pngbin0 -> 203 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.pngbin0 -> 250 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.pngbin0 -> 251 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.pngbin0 -> 323 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.pngbin0 -> 313 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.pngbin0 -> 265 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.pngbin0 -> 288 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.pngbin0 -> 277 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.pngbin0 -> 314 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.pngbin0 -> 333 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.pngbin0 -> 211 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.svg14
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.pngbin0 -> 202 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.svg14
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.pngbin0 -> 245 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.pngbin0 -> 225 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.pngbin0 -> 215 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.pngbin0 -> 201 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.svg9
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.pngbin0 -> 238 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.pngbin0 -> 228 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.svg4
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.pngbin0 -> 296 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.pngbin0 -> 285 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.pngbin0 -> 163 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.svg15
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.pngbin0 -> 409 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.pngbin0 -> 405 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.pngbin0 -> 273 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/window.pngbin0 -> 251 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/icons/window.svg7
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.pngbin0 -> 264 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.pngbin0 -> 233 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.pngbin0 -> 184 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.pngbin0 -> 173 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.pngbin0 -> 150 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.pngbin0 -> 143 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.pngbin0 -> 148 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.pngbin0 -> 142 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.pngbin0 -> 137 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.pngbin0 -> 132 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg8
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.pngbin0 -> 266 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.pngbin0 -> 241 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.pngbin0 -> 251 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.pngbin0 -> 231 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.pngbin0 -> 261 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.pngbin0 -> 234 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg6
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/textures/pending.gif (renamed from resources/lib/oojs-ui/images/textures/pending.gif)bin2032 -> 2032 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png (renamed from resources/lib/oojs-ui/images/textures/transparency.png)bin145 -> 145 bytes
-rw-r--r--resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.svg (renamed from resources/lib/oojs-ui/images/textures/transparency.svg)0
-rw-r--r--resources/lib/oojs-ui/themes/minerva/images/icons/check.pngbin640 -> 0 bytes
-rw-r--r--resources/lib/oojs-ui/themes/minerva/images/icons/check.svg8
-rw-r--r--resources/lib/oojs/oojs.jquery.js126
-rw-r--r--resources/lib/qunitjs/qunit.css280
-rw-r--r--resources/lib/qunitjs/qunit.js2875
-rw-r--r--resources/src/jquery.json-deprecate.js8
-rw-r--r--resources/src/jquery.tipsy/jquery.tipsy.js23
-rw-r--r--resources/src/jquery/jquery.accessKeyLabel.js2
-rw-r--r--resources/src/jquery/jquery.arrowSteps.js2
-rw-r--r--resources/src/jquery/jquery.badge.css2
-rw-r--r--resources/src/jquery/jquery.badge.js3
-rw-r--r--resources/src/jquery/jquery.confirmable.js14
-rw-r--r--resources/src/jquery/jquery.confirmable.mediawiki.js4
-rw-r--r--resources/src/jquery/jquery.expandableField.js2
-rw-r--r--resources/src/jquery/jquery.footHovzer.js16
-rw-r--r--resources/src/jquery/jquery.getAttrs.js49
-rw-r--r--resources/src/jquery/jquery.hidpi.js4
-rw-r--r--resources/src/jquery/jquery.makeCollapsible.css24
-rw-r--r--resources/src/jquery/jquery.makeCollapsible.js4
-rw-r--r--resources/src/jquery/jquery.mwExtension.js8
-rw-r--r--resources/src/jquery/jquery.placeholder.js10
-rw-r--r--resources/src/jquery/jquery.qunit.completenessTest.js14
-rw-r--r--resources/src/jquery/jquery.suggestions.js149
-rw-r--r--resources/src/jquery/jquery.tabIndex.js8
-rw-r--r--resources/src/jquery/jquery.tablesorter.js167
-rw-r--r--resources/src/jquery/jquery.textSelection.js39
-rw-r--r--resources/src/mediawiki.action/images/nextredirect-ltr.pngbin121 -> 122 bytes
-rw-r--r--resources/src/mediawiki.action/images/nextredirect-ltr.svg9
-rw-r--r--resources/src/mediawiki.action/images/nextredirect-rtl.pngbin121 -> 118 bytes
-rw-r--r--resources/src/mediawiki.action/images/nextredirect-rtl.svg9
-rw-r--r--resources/src/mediawiki.action/images/redirect-ltr.pngbin128 -> 169 bytes
-rw-r--r--resources/src/mediawiki.action/images/redirect-ltr.svg9
-rw-r--r--resources/src/mediawiki.action/images/redirect-rtl.pngbin132 -> 139 bytes
-rw-r--r--resources/src/mediawiki.action/images/redirect-rtl.svg9
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js61
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.edit.js232
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.edit.preview.js257
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.edit.stash.js76
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.edit.styles.css8
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.history.diff.css7
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.history.diff.print.css16
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.history.js3
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less11
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js13
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.view.metadata.css10
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.view.postEdit.js11
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.view.redirect.js3
-rw-r--r--resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css20
-rw-r--r--resources/src/mediawiki.action/templates/postEdit.html6
-rw-r--r--resources/src/mediawiki.api/mediawiki.api.category.js44
-rw-r--r--resources/src/mediawiki.api/mediawiki.api.edit.js43
-rw-r--r--resources/src/mediawiki.api/mediawiki.api.js87
-rw-r--r--resources/src/mediawiki.api/mediawiki.api.login.js45
-rw-r--r--resources/src/mediawiki.api/mediawiki.api.options.js89
-rw-r--r--resources/src/mediawiki.api/mediawiki.api.parse.js12
-rw-r--r--resources/src/mediawiki.api/mediawiki.api.watch.js21
-rw-r--r--resources/src/mediawiki.language/languages/fi.js2
-rw-r--r--resources/src/mediawiki.language/languages/hsb.js2
-rw-r--r--resources/src/mediawiki.language/languages/hy.js2
-rw-r--r--resources/src/mediawiki.language/languages/os.js18
-rw-r--r--resources/src/mediawiki.language/mediawiki.language.init.js2
-rw-r--r--resources/src/mediawiki.language/mediawiki.language.js41
-rw-r--r--resources/src/mediawiki.language/mediawiki.language.numbers.js6
-rw-r--r--resources/src/mediawiki.language/specialcharacters.json1
-rw-r--r--resources/src/mediawiki.legacy/ajax.js304
-rw-r--r--resources/src/mediawiki.legacy/commonPrint.css42
-rw-r--r--resources/src/mediawiki.legacy/images/magnify-clip-ltr.pngbin0 -> 336 bytes
-rw-r--r--resources/src/mediawiki.legacy/images/magnify-clip-ltr.svg7
-rw-r--r--resources/src/mediawiki.legacy/images/magnify-clip-rtl.pngbin0 -> 360 bytes
-rw-r--r--resources/src/mediawiki.legacy/images/magnify-clip-rtl.svg7
-rw-r--r--resources/src/mediawiki.legacy/oldshared.css6
-rw-r--r--resources/src/mediawiki.legacy/protect.js5
-rw-r--r--resources/src/mediawiki.legacy/shared.css28
-rw-r--r--resources/src/mediawiki.legacy/wikibits.js388
-rw-r--r--resources/src/mediawiki.less/mediawiki.mixins.less73
-rw-r--r--resources/src/mediawiki.less/mediawiki.ui/mixins.less29
-rw-r--r--resources/src/mediawiki.libs/CLDRPluralRuleParser.js246
-rw-r--r--resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js38
-rw-r--r--resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js53
-rw-r--r--resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js109
-rw-r--r--resources/src/mediawiki.page/mediawiki.page.gallery.js425
-rw-r--r--resources/src/mediawiki.page/mediawiki.page.image.pagination.js77
-rw-r--r--resources/src/mediawiki.page/mediawiki.page.ready.js2
-rw-r--r--resources/src/mediawiki.page/mediawiki.page.startup.js2
-rw-r--r--resources/src/mediawiki.skinning/content.css29
-rw-r--r--resources/src/mediawiki.skinning/elements.css13
-rw-r--r--resources/src/mediawiki.skinning/images/magnify-clip-ltr.pngbin204 -> 336 bytes
-rw-r--r--resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg7
-rw-r--r--resources/src/mediawiki.skinning/images/magnify-clip-rtl.pngbin149 -> 360 bytes
-rw-r--r--resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg7
-rw-r--r--resources/src/mediawiki.skinning/interface.css8
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.block.js2
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.changeslist.css8
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css6
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.css5
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.edittags.css15
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.edittags.js24
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.import.js6
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.pageLanguage.js2
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.preferences.js66
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.search.css17
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.upload.js93
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.userlogin.common.css2
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.userlogin.common.js2
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.userlogin.login.css13
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js2
-rw-r--r--resources/src/mediawiki.special/mediawiki.special.version.css4
-rw-r--r--resources/src/mediawiki.special/templates/thumbnail.html9
-rw-r--r--resources/src/mediawiki.toolbar/images/ar/button_bold.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_bold.png)bin533 -> 533 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/ar/button_headline.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_headline.png)bin484 -> 484 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/ar/button_italic.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_italic.png)bin532 -> 532 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/ar/button_link.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_link.png)bin557 -> 557 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/ar/button_nowiki.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_nowiki.png)bin874 -> 874 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_bold.png)bin550 -> 550 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_italic.png)bin539 -> 539 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/be-tarask/button_link.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_link.png)bin419 -> 419 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/de/button_bold.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_bold.png)bin255 -> 255 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/de/button_italic.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_italic.png)bin260 -> 260 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_bold.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_bold.png)bin250 -> 250 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_extlink.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_extlink.png)bin435 -> 435 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_headline.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_headline.png)bin440 -> 440 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_hr.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_hr.png)bin200 -> 200 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_image.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_image.png)bin483 -> 483 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_italic.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_italic.png)bin250 -> 250 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_link.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_link.png)bin280 -> 280 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_media.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_media.png)bin728 -> 728 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_nowiki.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_nowiki.png)bin322 -> 322 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/en/button_sig.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_sig.png)bin920 -> 920 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/fa/button_bold.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_bold.png)bin459 -> 459 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/fa/button_headline.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_headline.png)bin392 -> 392 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/fa/button_italic.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_italic.png)bin512 -> 512 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/fa/button_link.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_link.png)bin485 -> 485 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/fa/button_nowiki.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_nowiki.png)bin874 -> 874 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/ksh/LICENSE (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/LICENSE)0
-rw-r--r--resources/src/mediawiki.toolbar/images/ksh/button_italic.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/button_italic.png)bin368 -> 368 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/ru/LICENSE (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/LICENSE)0
-rw-r--r--resources/src/mediawiki.toolbar/images/ru/button_bold.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_bold.png)bin254 -> 254 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/ru/button_italic.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_italic.png)bin423 -> 423 bytes
-rw-r--r--resources/src/mediawiki.toolbar/images/ru/button_link.png (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_link.png)bin278 -> 278 bytes
-rw-r--r--resources/src/mediawiki.toolbar/toolbar.js202
-rw-r--r--resources/src/mediawiki.toolbar/toolbar.less (renamed from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less)0
-rw-r--r--resources/src/mediawiki.ui/components/anchors.less89
-rw-r--r--resources/src/mediawiki.ui/components/buttons.less11
-rw-r--r--resources/src/mediawiki.ui/components/checkbox.less120
-rw-r--r--resources/src/mediawiki.ui/components/forms.less15
-rw-r--r--resources/src/mediawiki.ui/components/icons.less107
-rw-r--r--resources/src/mediawiki.ui/components/images/checked.svg2
-rw-r--r--resources/src/mediawiki.ui/components/images/checked_disabled.pngbin0 -> 333 bytes
-rw-r--r--resources/src/mediawiki.ui/components/images/checked_disabled.svg1
-rw-r--r--resources/src/mediawiki.ui/components/images/ok.pngbin0 -> 442 bytes
-rw-r--r--resources/src/mediawiki.ui/components/images/ok.svg1
-rw-r--r--resources/src/mediawiki.ui/components/images/radio_checked.pngbin0 -> 286 bytes
-rw-r--r--resources/src/mediawiki.ui/components/images/radio_checked.svg1
-rw-r--r--resources/src/mediawiki.ui/components/images/radio_disabled.pngbin0 -> 251 bytes
-rw-r--r--resources/src/mediawiki.ui/components/images/radio_disabled.svg1
-rw-r--r--resources/src/mediawiki.ui/components/inputs.less20
-rw-r--r--resources/src/mediawiki.ui/components/radio.less116
-rw-r--r--resources/src/mediawiki.ui/components/text.less40
-rw-r--r--resources/src/mediawiki/images/help.pngbin0 -> 460 bytes
-rw-r--r--resources/src/mediawiki/images/help.svg1
-rw-r--r--resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.svg44
-rw-r--r--resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.svg44
-rw-r--r--resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.svg36
-rw-r--r--resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.svg36
-rw-r--r--resources/src/mediawiki/images/pager-arrow-fastforward-ltr.svg43
-rw-r--r--resources/src/mediawiki/images/pager-arrow-fastforward-rtl.svg69
-rw-r--r--resources/src/mediawiki/images/pager-arrow-forward-ltr.svg36
-rw-r--r--resources/src/mediawiki/images/pager-arrow-forward-rtl.svg36
-rw-r--r--resources/src/mediawiki/mediawiki.Title.js11
-rw-r--r--resources/src/mediawiki/mediawiki.Uri.js41
-rw-r--r--resources/src/mediawiki/mediawiki.apihelp.css86
-rw-r--r--resources/src/mediawiki/mediawiki.apipretty.css11
-rw-r--r--resources/src/mediawiki/mediawiki.confirmCloseWindow.js68
-rw-r--r--resources/src/mediawiki/mediawiki.content.json.css18
-rw-r--r--resources/src/mediawiki/mediawiki.cookie.js25
-rw-r--r--resources/src/mediawiki/mediawiki.debug.js9
-rw-r--r--resources/src/mediawiki/mediawiki.debug.profile.css45
-rw-r--r--resources/src/mediawiki/mediawiki.debug.profile.js556
-rw-r--r--resources/src/mediawiki/mediawiki.errorLogger.js49
-rw-r--r--resources/src/mediawiki/mediawiki.feedback.css13
-rw-r--r--resources/src/mediawiki/mediawiki.feedback.js699
-rw-r--r--resources/src/mediawiki/mediawiki.filewarning.js68
-rw-r--r--resources/src/mediawiki/mediawiki.filewarning.less29
-rw-r--r--resources/src/mediawiki/mediawiki.helplink.less11
-rw-r--r--resources/src/mediawiki/mediawiki.hlist.js30
-rw-r--r--resources/src/mediawiki/mediawiki.htmlform.js38
-rw-r--r--resources/src/mediawiki/mediawiki.inspect.js24
-rw-r--r--resources/src/mediawiki/mediawiki.jqueryMsg.js69
-rw-r--r--resources/src/mediawiki/mediawiki.js862
-rw-r--r--resources/src/mediawiki/mediawiki.notification.js2
-rw-r--r--resources/src/mediawiki/mediawiki.pager.tablePager.less32
-rw-r--r--resources/src/mediawiki/mediawiki.searchSuggest.js8
-rw-r--r--resources/src/mediawiki/mediawiki.sectionAnchor.css3
-rw-r--r--resources/src/mediawiki/mediawiki.startUp.js11
-rw-r--r--resources/src/mediawiki/mediawiki.template.js123
-rw-r--r--resources/src/mediawiki/mediawiki.template.mustache.js14
-rw-r--r--resources/src/mediawiki/mediawiki.user.js101
-rw-r--r--resources/src/mediawiki/mediawiki.userSuggest.js41
-rw-r--r--resources/src/mediawiki/mediawiki.util.js73
-rw-r--r--skins/ArchLinux/ArchLinux.php63
-rw-r--r--skins/ArchLinux/ArchLinuxTemplate.php13
-rw-r--r--skins/ArchLinux/COPYING183
-rw-r--r--skins/ArchLinux/arch.css4
-rw-r--r--skins/ArchLinux/main.css16
-rw-r--r--skins/ArchLinux/skin.json37
-rw-r--r--skins/CologneBlue/COPYING183
-rw-r--r--skins/CologneBlue/CologneBlue.php60
-rw-r--r--skins/CologneBlue/SkinCologneBlue.php3
-rw-r--r--skins/CologneBlue/i18n/af.json1
-rw-r--r--skins/CologneBlue/i18n/ar.json6
-rw-r--r--skins/CologneBlue/i18n/av.json8
-rw-r--r--skins/CologneBlue/i18n/bcc.json1
-rw-r--r--skins/CologneBlue/i18n/be-tarask.json8
-rw-r--r--skins/CologneBlue/i18n/be.json1
-rw-r--r--skins/CologneBlue/i18n/bg.json1
-rw-r--r--skins/CologneBlue/i18n/ca.json1
-rw-r--r--skins/CologneBlue/i18n/crh-cyrl.json1
-rw-r--r--skins/CologneBlue/i18n/crh-latn.json1
-rw-r--r--skins/CologneBlue/i18n/cy.json1
-rw-r--r--skins/CologneBlue/i18n/da.json1
-rw-r--r--skins/CologneBlue/i18n/de.json5
-rw-r--r--skins/CologneBlue/i18n/dsb.json1
-rw-r--r--skins/CologneBlue/i18n/eu.json1
-rw-r--r--skins/CologneBlue/i18n/fi.json6
-rw-r--r--skins/CologneBlue/i18n/fo.json1
-rw-r--r--skins/CologneBlue/i18n/gl.json6
-rw-r--r--skins/CologneBlue/i18n/hi.json8
-rw-r--r--skins/CologneBlue/i18n/hr.json1
-rw-r--r--skins/CologneBlue/i18n/hy.json1
-rw-r--r--skins/CologneBlue/i18n/is.json1
-rw-r--r--skins/CologneBlue/i18n/kk-arab.json1
-rw-r--r--skins/CologneBlue/i18n/kk-latn.json1
-rw-r--r--skins/CologneBlue/i18n/ksh.json7
-rw-r--r--skins/CologneBlue/i18n/la.json1
-rw-r--r--skins/CologneBlue/i18n/li.json1
-rw-r--r--skins/CologneBlue/i18n/lt.json1
-rw-r--r--skins/CologneBlue/i18n/lzh.json1
-rw-r--r--skins/CologneBlue/i18n/mr.json1
-rw-r--r--skins/CologneBlue/i18n/mwl.json1
-rw-r--r--skins/CologneBlue/i18n/nap.json8
-rw-r--r--skins/CologneBlue/i18n/nb.json4
-rw-r--r--skins/CologneBlue/i18n/nds-nl.json1
-rw-r--r--skins/CologneBlue/i18n/nds.json1
-rw-r--r--skins/CologneBlue/i18n/nl.json3
-rw-r--r--skins/CologneBlue/i18n/os.json1
-rw-r--r--skins/CologneBlue/i18n/ps.json1
-rw-r--r--skins/CologneBlue/i18n/qqq.json2
-rw-r--r--skins/CologneBlue/i18n/roa-tara.json3
-rw-r--r--skins/CologneBlue/i18n/ru.json5
-rw-r--r--skins/CologneBlue/i18n/sa.json1
-rw-r--r--skins/CologneBlue/i18n/sco.json8
-rw-r--r--skins/CologneBlue/i18n/sq.json1
-rw-r--r--skins/CologneBlue/i18n/sr-ec.json3
-rw-r--r--skins/CologneBlue/i18n/sr-el.json8
-rw-r--r--skins/CologneBlue/i18n/ta.json1
-rw-r--r--skins/CologneBlue/i18n/tet.json1
-rw-r--r--skins/CologneBlue/i18n/tyv.json1
-rw-r--r--skins/CologneBlue/i18n/ur.json8
-rw-r--r--skins/CologneBlue/i18n/vro.json1
-rw-r--r--skins/CologneBlue/i18n/yue.json1
-rw-r--r--skins/CologneBlue/i18n/zh-hans.json5
-rw-r--r--skins/CologneBlue/resources/screen.css11
-rw-r--r--skins/CologneBlue/resources/sectionAnchor.css4
-rw-r--r--skins/CologneBlue/skin.json45
-rw-r--r--skins/Modern/COPYING183
-rw-r--r--skins/Modern/Modern.php60
-rw-r--r--skins/Modern/SkinModern.php7
-rw-r--r--skins/Modern/i18n/ar.json6
-rw-r--r--skins/Modern/i18n/av.json8
-rw-r--r--skins/Modern/i18n/bcc.json1
-rw-r--r--skins/Modern/i18n/bcl.json1
-rw-r--r--skins/Modern/i18n/be-tarask.json8
-rw-r--r--skins/Modern/i18n/be.json1
-rw-r--r--skins/Modern/i18n/bg.json1
-rw-r--r--skins/Modern/i18n/da.json1
-rw-r--r--skins/Modern/i18n/de.json5
-rw-r--r--skins/Modern/i18n/el.json6
-rw-r--r--skins/Modern/i18n/en.json2
-rw-r--r--skins/Modern/i18n/fi.json6
-rw-r--r--skins/Modern/i18n/fur.json1
-rw-r--r--skins/Modern/i18n/gl.json6
-rw-r--r--skins/Modern/i18n/he.json8
-rw-r--r--skins/Modern/i18n/hi.json8
-rw-r--r--skins/Modern/i18n/ilo.json8
-rw-r--r--skins/Modern/i18n/is.json1
-rw-r--r--skins/Modern/i18n/kk-arab.json1
-rw-r--r--skins/Modern/i18n/kk-cyrl.json1
-rw-r--r--skins/Modern/i18n/kk-latn.json1
-rw-r--r--skins/Modern/i18n/ko.json3
-rw-r--r--skins/Modern/i18n/ksh.json7
-rw-r--r--skins/Modern/i18n/lzh.json1
-rw-r--r--skins/Modern/i18n/mr.json1
-rw-r--r--skins/Modern/i18n/mwl.json1
-rw-r--r--skins/Modern/i18n/myv.json1
-rw-r--r--skins/Modern/i18n/nap.json8
-rw-r--r--skins/Modern/i18n/nb.json4
-rw-r--r--skins/Modern/i18n/nl.json3
-rw-r--r--skins/Modern/i18n/ps.json1
-rw-r--r--skins/Modern/i18n/qqq.json3
-rw-r--r--skins/Modern/i18n/roa-tara.json3
-rw-r--r--skins/Modern/i18n/sah.json1
-rw-r--r--skins/Modern/i18n/sco.json8
-rw-r--r--skins/Modern/i18n/sr-el.json1
-rw-r--r--skins/Modern/i18n/uk.json6
-rw-r--r--skins/Modern/i18n/yue.json1
-rw-r--r--skins/Modern/i18n/zh-hans.json2
-rw-r--r--skins/Modern/i18n/zh-hant.json5
-rw-r--r--skins/Modern/resources/main.css14
-rw-r--r--skins/Modern/skin.json40
-rw-r--r--skins/MonoBook/COPYING183
-rw-r--r--skins/MonoBook/MonoBook.php62
-rw-r--r--skins/MonoBook/MonoBookTemplate.php10
-rw-r--r--skins/MonoBook/i18n/ar.json4
-rw-r--r--skins/MonoBook/i18n/av.json8
-rw-r--r--skins/MonoBook/i18n/be-tarask.json9
-rw-r--r--skins/MonoBook/i18n/de.json9
-rw-r--r--skins/MonoBook/i18n/el.json4
-rw-r--r--skins/MonoBook/i18n/fi.json4
-rw-r--r--skins/MonoBook/i18n/hu.json4
-rw-r--r--skins/MonoBook/i18n/ksh.json7
-rw-r--r--skins/MonoBook/i18n/nap.json8
-rw-r--r--skins/MonoBook/i18n/roa-tara.json1
-rw-r--r--skins/MonoBook/i18n/sco.json8
-rw-r--r--skins/MonoBook/main.css16
-rw-r--r--skins/MonoBook/skin.json37
-rw-r--r--skins/README5
-rw-r--r--skins/Vector/COPYING183
-rw-r--r--skins/Vector/SkinVector.php16
-rw-r--r--skins/Vector/Vector.php120
-rw-r--r--skins/Vector/VectorTemplate.php20
-rw-r--r--skins/Vector/collapsibleTabs.js2
-rw-r--r--skins/Vector/components/animations.less28
-rw-r--r--skins/Vector/components/common.less34
-rw-r--r--skins/Vector/components/navigation.less19
-rw-r--r--skins/Vector/components/tabs.less1
-rw-r--r--skins/Vector/i18n/ace.json3
-rw-r--r--skins/Vector/i18n/aeb.json5
-rw-r--r--skins/Vector/i18n/ang.json3
-rw-r--r--skins/Vector/i18n/ar.json4
-rw-r--r--skins/Vector/i18n/arq.json3
-rw-r--r--skins/Vector/i18n/av.json17
-rw-r--r--skins/Vector/i18n/awa.json19
-rw-r--r--skins/Vector/i18n/azb.json6
-rw-r--r--skins/Vector/i18n/be-tarask.json1
-rw-r--r--skins/Vector/i18n/bgn.json14
-rw-r--r--skins/Vector/i18n/bho.json6
-rw-r--r--skins/Vector/i18n/bn.json2
-rw-r--r--skins/Vector/i18n/ca.json4
-rw-r--r--skins/Vector/i18n/cv.json8
-rw-r--r--skins/Vector/i18n/de-ch.json8
-rw-r--r--skins/Vector/i18n/de.json2
-rw-r--r--skins/Vector/i18n/dv.json7
-rw-r--r--skins/Vector/i18n/el.json4
-rw-r--r--skins/Vector/i18n/eo.json2
-rw-r--r--skins/Vector/i18n/eu.json4
-rw-r--r--skins/Vector/i18n/fi.json4
-rw-r--r--skins/Vector/i18n/frc.json11
-rw-r--r--skins/Vector/i18n/fy.json9
-rw-r--r--skins/Vector/i18n/gom-deva.json3
-rw-r--r--skins/Vector/i18n/hr.json6
-rw-r--r--skins/Vector/i18n/hu.json1
-rw-r--r--skins/Vector/i18n/ilo.json2
-rw-r--r--skins/Vector/i18n/is.json3
-rw-r--r--skins/Vector/i18n/it.json5
-rw-r--r--skins/Vector/i18n/kn.json6
-rw-r--r--skins/Vector/i18n/ksh.json20
-rw-r--r--skins/Vector/i18n/li.json6
-rw-r--r--skins/Vector/i18n/ln.json3
-rw-r--r--skins/Vector/i18n/lrc.json7
-rw-r--r--skins/Vector/i18n/lt.json9
-rw-r--r--skins/Vector/i18n/mai.json6
-rw-r--r--skins/Vector/i18n/mo.json8
-rw-r--r--skins/Vector/i18n/nap.json4
-rw-r--r--skins/Vector/i18n/ne.json6
-rw-r--r--skins/Vector/i18n/oc.json3
-rw-r--r--skins/Vector/i18n/os.json3
-rw-r--r--skins/Vector/i18n/pa.json3
-rw-r--r--skins/Vector/i18n/pfl.json7
-rw-r--r--skins/Vector/i18n/pms.json3
-rw-r--r--skins/Vector/i18n/ps.json5
-rw-r--r--skins/Vector/i18n/pt-br.json3
-rw-r--r--skins/Vector/i18n/qqq.json5
-rw-r--r--skins/Vector/i18n/ro.json1
-rw-r--r--skins/Vector/i18n/roa-tara.json4
-rw-r--r--skins/Vector/i18n/ru.json2
-rw-r--r--skins/Vector/i18n/rue.json6
-rw-r--r--skins/Vector/i18n/sah.json3
-rw-r--r--skins/Vector/i18n/scn.json12
-rw-r--r--skins/Vector/i18n/sco.json4
-rw-r--r--skins/Vector/i18n/sgs.json3
-rw-r--r--skins/Vector/i18n/shn.json8
-rw-r--r--skins/Vector/i18n/szl.json6
-rw-r--r--skins/Vector/i18n/tcy.json3
-rw-r--r--skins/Vector/i18n/tt-cyrl.json6
-rw-r--r--skins/Vector/i18n/ur.json7
-rw-r--r--skins/Vector/i18n/uz.json5
-rw-r--r--skins/Vector/i18n/vec.json12
-rw-r--r--skins/Vector/i18n/vo.json3
-rw-r--r--skins/Vector/i18n/yi.json5
-rw-r--r--skins/Vector/i18n/yue.json4
-rw-r--r--skins/Vector/i18n/zh-hant.json2
-rw-r--r--skins/Vector/images/bullet-icon.svg4
-rw-r--r--skins/Vector/images/user-icon.svg22
-rw-r--r--skins/Vector/screen.less1
-rw-r--r--skins/Vector/skin.json85
-rw-r--r--skins/Vector/skinStyles/jquery.ui/jquery.ui.core.css2
-rw-r--r--skins/Vector/skinStyles/mediawiki.sectionAnchor.less45
-rw-r--r--skins/Vector/vector.js11
-rw-r--r--tests/TestsAutoLoader.php20
-rw-r--r--tests/browser/Gemfile.lock82
-rw-r--r--tests/browser/environment_variables5
-rw-r--r--tests/browser/environments.yml35
-rw-r--r--tests/browser/features/file.feature11
-rw-r--r--tests/browser/features/login.feature11
-rw-r--r--tests/browser/features/preferences.feature11
-rw-r--r--tests/browser/features/step_definitions/create_account_steps.rb4
-rw-r--r--tests/browser/features/step_definitions/create_and_follow_wiki_link_steps.rb12
-rw-r--r--tests/browser/features/step_definitions/edit_page_steps.rb3
-rw-r--r--tests/browser/features/step_definitions/file_steps.rb4
-rw-r--r--tests/browser/features/step_definitions/login_steps.rb24
-rw-r--r--tests/browser/features/step_definitions/main_page_links_steps.rb22
-rw-r--r--tests/browser/features/step_definitions/preferences_appearance_steps.rb44
-rw-r--r--tests/browser/features/step_definitions/preferences_editing_steps.rb20
-rw-r--r--tests/browser/features/step_definitions/preferences_user_profile_steps.rb17
-rw-r--r--tests/browser/features/step_definitions/view_history_steps.rb3
-rw-r--r--tests/browser/features/support/env.rb6
-rw-r--r--tests/browser/features/support/modules/url_module.rb10
-rw-r--r--tests/browser/features/support/pages/create_account_page.rb5
-rw-r--r--tests/browser/features/support/pages/edit_page.rb10
-rw-r--r--tests/browser/features/support/pages/file_does_not_exist_page.rb5
-rw-r--r--tests/browser/features/support/pages/login_error_page.rb4
-rw-r--r--tests/browser/features/support/pages/main_page.rb23
-rw-r--r--tests/browser/features/support/pages/preferences_appearance_page.rb46
-rw-r--r--tests/browser/features/support/pages/preferences_editing_page.rb23
-rw-r--r--tests/browser/features/support/pages/preferences_page.rb11
-rw-r--r--tests/browser/features/support/pages/preferences_user_profile_page.rb23
-rw-r--r--tests/browser/features/support/pages/view_history_page.rb3
-rw-r--r--tests/browser/features/support/pages/ztargetpage.rb8
-rw-r--r--tests/parser/ParserTestResult.php5
-rw-r--r--tests/parser/parserTest.inc39
-rw-r--r--tests/parser/parserTests.txt4368
-rw-r--r--tests/parser/parserTestsParserHook.php1
-rw-r--r--tests/parser/preprocess/All_system_messages.expected7
-rw-r--r--tests/parser/preprocess/All_system_messages.txt7
-rw-r--r--tests/parserTests.php4
-rw-r--r--tests/phpunit/LessFileCompilationTest.php2
-rw-r--r--tests/phpunit/Makefile7
-rw-r--r--tests/phpunit/MediaWikiTestCase.php102
-rw-r--r--tests/phpunit/ResourceLoaderTestCase.php23
-rw-r--r--tests/phpunit/bootstrap.php7
-rw-r--r--tests/phpunit/data/composer/composer.json48
-rw-r--r--tests/phpunit/data/composer/composer.lock1195
-rw-r--r--tests/phpunit/data/composer/new-composer.json48
-rw-r--r--tests/phpunit/data/cssmin/circle.svg4
-rw-r--r--tests/phpunit/data/gitinfo/info-testValidJsonData.json8
-rw-r--r--tests/phpunit/data/helpers/WellProtectedClass.php21
-rw-r--r--tests/phpunit/data/media/Soccer_ball_animated.svg110
-rw-r--r--tests/phpunit/data/media/Tux.svg1804
-rw-r--r--tests/phpunit/data/resourceloader/add.gifbin0 -> 74 bytes
-rw-r--r--tests/phpunit/data/resourceloader/bold-a.svg6
-rw-r--r--tests/phpunit/data/resourceloader/bold-b.svg6
-rw-r--r--tests/phpunit/data/resourceloader/bold-f.svg6
-rw-r--r--tests/phpunit/data/resourceloader/help-ltr.svg10
-rw-r--r--tests/phpunit/data/resourceloader/help-rtl.svg10
-rw-r--r--tests/phpunit/data/resourceloader/next.svg4
-rw-r--r--tests/phpunit/data/resourceloader/next_massage.svg4
-rw-r--r--tests/phpunit/data/resourceloader/prev.svg4
-rw-r--r--tests/phpunit/data/resourceloader/remove.svg6
-rw-r--r--tests/phpunit/data/resourceloader/remove_variantize.svg6
-rw-r--r--tests/phpunit/data/templates/foobar.mustache1
-rw-r--r--tests/phpunit/data/templates/foobar_args.mustache1
-rw-r--r--tests/phpunit/includes/BlockTest.php12
-rw-r--r--tests/phpunit/includes/EditPageTest.php7
-rw-r--r--tests/phpunit/includes/GitInfoTest.php2
-rw-r--r--tests/phpunit/includes/GlobalFunctions/GlobalTest.php78
-rw-r--r--tests/phpunit/includes/GlobalFunctions/wfAppendQueryTest.php67
-rw-r--r--tests/phpunit/includes/GlobalFunctions/wfEscapeShellArgTest.php43
-rw-r--r--tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php104
-rw-r--r--tests/phpunit/includes/HtmlFormatterTest.php14
-rw-r--r--tests/phpunit/includes/HtmlTest.php28
-rw-r--r--tests/phpunit/includes/HttpTest.php321
-rw-r--r--tests/phpunit/includes/ImportTest.php68
-rw-r--r--tests/phpunit/includes/LinkerTest.php56
-rw-r--r--tests/phpunit/includes/MWTimestampTest.php26
-rw-r--r--tests/phpunit/includes/MediaWikiVersionFetcherTest.php1
-rw-r--r--tests/phpunit/includes/MessageTest.php407
-rw-r--r--tests/phpunit/includes/MovePageTest.php63
-rw-r--r--tests/phpunit/includes/OutputPageTest.php45
-rw-r--r--tests/phpunit/includes/PrefixSearchTest.php306
-rw-r--r--tests/phpunit/includes/SampleTest.php2
-rw-r--r--tests/phpunit/includes/SanitizerTest.php29
-rw-r--r--tests/phpunit/includes/StatusTest.php15
-rw-r--r--tests/phpunit/includes/TemplateParserTest.php63
-rw-r--r--tests/phpunit/includes/TestUser.php126
-rw-r--r--tests/phpunit/includes/TestingAccessWrapper.php50
-rw-r--r--tests/phpunit/includes/TestingAccessWrapperTest.php34
-rw-r--r--tests/phpunit/includes/TitleMethodsTest.php41
-rw-r--r--tests/phpunit/includes/TitlePermissionTest.php28
-rw-r--r--tests/phpunit/includes/TitleTest.php54
-rw-r--r--tests/phpunit/includes/UserTest.php91
-rw-r--r--tests/phpunit/includes/XmlSelectTest.php2
-rw-r--r--tests/phpunit/includes/XmlTest.php12
-rw-r--r--tests/phpunit/includes/actions/ActionTest.php12
-rw-r--r--tests/phpunit/includes/api/ApiContinuationManagerTest.php195
-rw-r--r--tests/phpunit/includes/api/ApiErrorFormatterTest.php351
-rw-r--r--tests/phpunit/includes/api/ApiLoginTest.php3
-rw-r--r--tests/phpunit/includes/api/ApiMainTest.php68
-rw-r--r--tests/phpunit/includes/api/ApiMessageTest.php103
-rw-r--r--tests/phpunit/includes/api/ApiOptionsTest.php28
-rw-r--r--tests/phpunit/includes/api/ApiResultTest.php1563
-rw-r--r--tests/phpunit/includes/api/ApiTestCase.php24
-rw-r--r--tests/phpunit/includes/api/ApiTestCaseUpload.php22
-rw-r--r--tests/phpunit/includes/api/ApiUploadTest.php65
-rw-r--r--tests/phpunit/includes/api/MockApi.php3
-rw-r--r--tests/phpunit/includes/api/MockApiQueryBase.php8
-rw-r--r--tests/phpunit/includes/api/PrefixUniquenessTest.php2
-rw-r--r--tests/phpunit/includes/api/format/ApiFormatDbgTest.php55
-rw-r--r--tests/phpunit/includes/api/format/ApiFormatDumpTest.php63
-rw-r--r--tests/phpunit/includes/api/format/ApiFormatJsonTest.php106
-rw-r--r--tests/phpunit/includes/api/format/ApiFormatNoneTest.php38
-rw-r--r--tests/phpunit/includes/api/format/ApiFormatPhpTest.php139
-rw-r--r--tests/phpunit/includes/api/format/ApiFormatTestBase.php70
-rw-r--r--tests/phpunit/includes/api/format/ApiFormatTxtTest.php55
-rw-r--r--tests/phpunit/includes/api/format/ApiFormatWddxTest.php74
-rw-r--r--tests/phpunit/includes/api/format/ApiFormatXmlTest.php119
-rw-r--r--tests/phpunit/includes/api/query/ApiQueryBasicTest.php2
-rw-r--r--tests/phpunit/includes/api/query/ApiQueryContinue2Test.php5
-rw-r--r--tests/phpunit/includes/api/query/ApiQueryContinueTest.php26
-rw-r--r--tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php5
-rw-r--r--tests/phpunit/includes/api/query/ApiQueryTest.php56
-rw-r--r--tests/phpunit/includes/api/query/ApiQueryTestBase.php22
-rw-r--r--tests/phpunit/includes/cache/GenderCacheTest.php8
-rw-r--r--tests/phpunit/includes/cache/LocalisationCacheTest.php54
-rw-r--r--tests/phpunit/includes/cache/RedisBloomCacheTest.php71
-rw-r--r--tests/phpunit/includes/changes/EnhancedChangesListTest.php13
-rw-r--r--tests/phpunit/includes/changes/OldChangesListTest.php1
-rw-r--r--tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php1
-rw-r--r--tests/phpunit/includes/changes/RecentChangeTest.php65
-rw-r--r--tests/phpunit/includes/changes/TestRecentChangesHelper.php1
-rw-r--r--tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php1
-rw-r--r--tests/phpunit/includes/config/GlobalVarConfigTest.php24
-rw-r--r--tests/phpunit/includes/config/HashConfigTest.php2
-rw-r--r--tests/phpunit/includes/content/ContentHandlerTest.php15
-rw-r--r--tests/phpunit/includes/content/JsonContentTest.php142
-rw-r--r--tests/phpunit/includes/content/TextContentTest.php21
-rw-r--r--tests/phpunit/includes/context/RequestContextTest.php (renamed from tests/phpunit/includes/RequestContextTest.php)8
-rw-r--r--tests/phpunit/includes/db/DatabaseMysqlBaseTest.php1
-rw-r--r--tests/phpunit/includes/db/DatabaseSQLTest.php80
-rw-r--r--tests/phpunit/includes/db/DatabaseSqliteTest.php45
-rw-r--r--tests/phpunit/includes/db/LBFactoryTest.php1
-rw-r--r--tests/phpunit/includes/db/ORMRowTest.php1
-rw-r--r--tests/phpunit/includes/db/ORMTableTest.php19
-rw-r--r--tests/phpunit/includes/db/TestORMRowTest.php37
-rw-r--r--tests/phpunit/includes/debug/MWDebugTest.php5
-rw-r--r--tests/phpunit/includes/debug/logging/LegacyLoggerTest.php122
-rw-r--r--tests/phpunit/includes/deferred/LinksUpdateTest.php (renamed from tests/phpunit/includes/LinksUpdateTest.php)0
-rw-r--r--tests/phpunit/includes/deferred/SearchUpdateTest.php (renamed from tests/phpunit/includes/search/SearchUpdateTest.php)6
-rw-r--r--tests/phpunit/includes/diff/ArrayDiffFormatterTest.php1
-rw-r--r--tests/phpunit/includes/diff/DiffOpTest.php5
-rw-r--r--tests/phpunit/includes/diff/DiffTest.php1
-rw-r--r--tests/phpunit/includes/diff/DifferenceEngineTest.php1
-rw-r--r--tests/phpunit/includes/exception/BadTitleErrorTest.php17
-rw-r--r--tests/phpunit/includes/exception/ErrorPageErrorTest.php24
-rw-r--r--tests/phpunit/includes/exception/MWExceptionHandlerTest.php2
-rw-r--r--tests/phpunit/includes/exception/ThrottledErrorTest.php17
-rw-r--r--tests/phpunit/includes/externalstore/ExternalStoreTest.php (renamed from tests/phpunit/includes/ExternalStoreTest.php)0
-rw-r--r--tests/phpunit/includes/filebackend/FileBackendTest.php68
-rw-r--r--tests/phpunit/includes/filerepo/StoreBatchTest.php19
-rw-r--r--tests/phpunit/includes/filerepo/file/LocalFileTest.php (renamed from tests/phpunit/includes/LocalFileTest.php)1
-rw-r--r--tests/phpunit/includes/installer/DatabaseUpdaterTest.php279
-rw-r--r--tests/phpunit/includes/installer/InstallDocFormatterTest.php15
-rw-r--r--tests/phpunit/includes/jobqueue/JobQueueTest.php9
-rw-r--r--tests/phpunit/includes/jobqueue/JobTest.php67
-rw-r--r--tests/phpunit/includes/json/FormatJsonTest.php116
-rw-r--r--tests/phpunit/includes/libs/ArrayUtilsTest.php (renamed from tests/phpunit/includes/ArrayUtilsTest.php)2
-rw-r--r--tests/phpunit/includes/libs/CSSMinTest.php49
-rw-r--r--tests/phpunit/includes/libs/DeferredStringifierTest.php50
-rw-r--r--tests/phpunit/includes/libs/GenericArrayObjectTest.php3
-rw-r--r--tests/phpunit/includes/libs/HashRingTest.php2
-rw-r--r--tests/phpunit/includes/libs/IEUrlExtensionTest.php2
-rw-r--r--tests/phpunit/includes/libs/IPSetTest.php2
-rw-r--r--tests/phpunit/includes/libs/JavaScriptMinifierTest.php11
-rw-r--r--tests/phpunit/includes/libs/MWMessagePackTest.php2
-rw-r--r--tests/phpunit/includes/libs/ObjectFactoryTest.php60
-rw-r--r--tests/phpunit/includes/libs/ProcessCacheLRUTest.php50
-rw-r--r--tests/phpunit/includes/libs/RunningStatTest.php2
-rw-r--r--tests/phpunit/includes/libs/StringUtilsTest.php (renamed from tests/phpunit/includes/utils/StringUtilsTest.php)2
-rw-r--r--tests/phpunit/includes/libs/XhprofTest.php320
-rw-r--r--tests/phpunit/includes/libs/XmlTypeCheckTest.php (renamed from tests/phpunit/includes/XmlTypeCheckTest.php)2
-rw-r--r--tests/phpunit/includes/libs/composer/ComposerJsonTest.php57
-rw-r--r--tests/phpunit/includes/libs/composer/ComposerLockTest.php62
-rw-r--r--tests/phpunit/includes/logging/LogFormatterTest.php53
-rw-r--r--tests/phpunit/includes/mail/MailAddressTest.php7
-rw-r--r--tests/phpunit/includes/media/BitmapScalingTest.php4
-rw-r--r--tests/phpunit/includes/media/FormatMetadataTest.php32
-rw-r--r--tests/phpunit/includes/media/MediaHandlerTest.php82
-rw-r--r--tests/phpunit/includes/media/SVGMetadataExtractorTest.php5
-rw-r--r--tests/phpunit/includes/normal/CleanUpTest.php409
-rw-r--r--tests/phpunit/includes/objectcache/BagOStuffTest.php14
-rw-r--r--tests/phpunit/includes/page/ArticleTablesTest.php (renamed from tests/phpunit/includes/ArticleTablesTest.php)0
-rw-r--r--tests/phpunit/includes/page/ArticleTest.php (renamed from tests/phpunit/includes/ArticleTest.php)0
-rw-r--r--tests/phpunit/includes/page/ImagePage404Test.php (renamed from tests/phpunit/includes/ImagePage404Test.php)0
-rw-r--r--tests/phpunit/includes/page/ImagePageTest.php (renamed from tests/phpunit/includes/ImagePageTest.php)0
-rw-r--r--tests/phpunit/includes/page/WikiPageTest.php (renamed from tests/phpunit/includes/WikiPageTest.php)4
-rw-r--r--tests/phpunit/includes/page/WikiPageTestContentHandlerUseDB.php (renamed from tests/phpunit/includes/WikiPageTestContentHandlerUseDB.php)0
-rw-r--r--tests/phpunit/includes/parser/NewParserTest.php38
-rw-r--r--tests/phpunit/includes/parser/ParserOutputTest.php5
-rw-r--r--tests/phpunit/includes/parser/TagHooksTest.php2
-rw-r--r--tests/phpunit/includes/password/PasswordTest.php (renamed from tests/phpunit/includes/PasswordTest.php)6
-rw-r--r--tests/phpunit/includes/password/PasswordTestCase.php7
-rw-r--r--tests/phpunit/includes/registration/ExtensionProcessorTest.php374
-rw-r--r--tests/phpunit/includes/registration/ExtensionRegistryTest.php195
-rw-r--r--tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php247
-rw-r--r--tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php162
-rw-r--r--tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php122
-rw-r--r--tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php61
-rw-r--r--tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php388
-rw-r--r--tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php388
-rw-r--r--tests/phpunit/includes/resourceloader/ResourceLoaderTest.php185
-rw-r--r--tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php84
-rw-r--r--tests/phpunit/includes/resourceloader/templates/template.html1
-rw-r--r--tests/phpunit/includes/resourceloader/templates/template2.html1
-rw-r--r--tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars1
-rw-r--r--tests/phpunit/includes/search/SearchEngineTest.php67
-rw-r--r--tests/phpunit/includes/site/CachingSiteStoreTest.php161
-rw-r--r--tests/phpunit/includes/site/DBSiteStoreTest.php133
-rw-r--r--tests/phpunit/includes/site/FileBasedSiteLookupTest.php101
-rw-r--r--tests/phpunit/includes/site/HashSiteStoreTest.php105
-rw-r--r--tests/phpunit/includes/site/MediaWikiSiteTest.php1
-rw-r--r--tests/phpunit/includes/site/SiteExporterTest.php147
-rw-r--r--tests/phpunit/includes/site/SiteImporterTest.php200
-rw-r--r--tests/phpunit/includes/site/SiteImporterTest.xml19
-rw-r--r--tests/phpunit/includes/site/SiteListTest.php1
-rw-r--r--tests/phpunit/includes/site/SiteSQLStoreTest.php106
-rw-r--r--tests/phpunit/includes/site/SiteTest.php1
-rw-r--r--tests/phpunit/includes/site/SitesCacheFileBuilderTest.php135
-rw-r--r--tests/phpunit/includes/site/TestSites.php3
-rw-r--r--tests/phpunit/includes/skins/SkinTemplateTest.php1
-rw-r--r--tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php62
-rw-r--r--tests/phpunit/includes/specialpage/SpecialPageTest.php (renamed from tests/phpunit/includes/SpecialPageTest.php)1
-rw-r--r--tests/phpunit/includes/specialpage/SpecialPageTestHelper.php24
-rw-r--r--tests/phpunit/includes/specials/SpecialBooksourcesTest.php36
-rw-r--r--tests/phpunit/includes/specials/SpecialMIMESearchTest.php4
-rw-r--r--tests/phpunit/includes/title/ForeignTitleTest.php103
-rw-r--r--tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php1
-rw-r--r--tests/phpunit/includes/title/MediaWikiTitleCodecTest.php11
-rw-r--r--tests/phpunit/includes/title/NaiveForeignTitleFactoryTest.php91
-rw-r--r--tests/phpunit/includes/title/NaiveImportTitleFactoryTest.php89
-rw-r--r--tests/phpunit/includes/title/NamespaceAwareForeignTitleFactoryTest.php89
-rw-r--r--tests/phpunit/includes/title/NamespaceImportTitleFactoryTest.php77
-rw-r--r--tests/phpunit/includes/title/SubpageImportTitleFactoryTest.php86
-rw-r--r--tests/phpunit/includes/title/TitleValueTest.php1
-rw-r--r--tests/phpunit/includes/upload/UploadBaseTest.php41
-rw-r--r--tests/phpunit/includes/upload/UploadFromUrlTest.php5
-rw-r--r--tests/phpunit/includes/utils/CdbTest.php90
-rw-r--r--tests/phpunit/includes/utils/IPTest.php2
-rw-r--r--tests/phpunit/includes/utils/MWCryptHKDFTest.php6
-rw-r--r--tests/phpunit/includes/utils/MWFunctionTest.php (renamed from tests/phpunit/includes/MWFunctionTest.php)1
-rw-r--r--tests/phpunit/includes/utils/UIDGeneratorTest.php6
-rw-r--r--tests/phpunit/includes/utils/ZipDirectoryReaderTest.php2
-rw-r--r--tests/phpunit/install-phpunit.sh38
-rw-r--r--tests/phpunit/languages/LanguageConverterTest.php (renamed from tests/phpunit/includes/LanguageConverterTest.php)0
-rw-r--r--tests/phpunit/languages/SpecialPageAliasTest.php1
-rw-r--r--tests/phpunit/languages/classes/LanguageAmTest.php (renamed from tests/phpunit/languages/LanguageAmTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageArTest.php (renamed from tests/phpunit/languages/LanguageArTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageArqTest.php (renamed from tests/phpunit/languages/LanguageArqTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageBeTest.php (renamed from tests/phpunit/languages/LanguageBeTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageBe_taraskTest.php (renamed from tests/phpunit/languages/LanguageBe_taraskTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageBhoTest.php (renamed from tests/phpunit/languages/LanguageBhoTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageBsTest.php (renamed from tests/phpunit/languages/LanguageBsTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageCsTest.php (renamed from tests/phpunit/languages/LanguageCsTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageCuTest.php (renamed from tests/phpunit/languages/LanguageCuTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageCyTest.php (renamed from tests/phpunit/languages/LanguageCyTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageDsbTest.php (renamed from tests/phpunit/languages/LanguageDsbTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageFrTest.php (renamed from tests/phpunit/languages/LanguageFrTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageGaTest.php (renamed from tests/phpunit/languages/LanguageGaTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageGdTest.php (renamed from tests/phpunit/languages/LanguageGdTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageGvTest.php (renamed from tests/phpunit/languages/LanguageGvTest.php)2
-rw-r--r--tests/phpunit/languages/classes/LanguageHeTest.php (renamed from tests/phpunit/languages/LanguageHeTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageHiTest.php (renamed from tests/phpunit/languages/LanguageHiTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageHrTest.php (renamed from tests/phpunit/languages/LanguageHrTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageHsbTest.php (renamed from tests/phpunit/languages/LanguageHsbTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageHuTest.php (renamed from tests/phpunit/languages/LanguageHuTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageHyTest.php (renamed from tests/phpunit/languages/LanguageHyTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageKshTest.php (renamed from tests/phpunit/languages/LanguageKshTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageLnTest.php (renamed from tests/phpunit/languages/LanguageLnTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageLtTest.php (renamed from tests/phpunit/languages/LanguageLtTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageLvTest.php (renamed from tests/phpunit/languages/LanguageLvTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageMgTest.php (renamed from tests/phpunit/languages/LanguageMgTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageMkTest.php (renamed from tests/phpunit/languages/LanguageMkTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageMlTest.php (renamed from tests/phpunit/languages/LanguageMlTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageMoTest.php (renamed from tests/phpunit/languages/LanguageMoTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageMtTest.php (renamed from tests/phpunit/languages/LanguageMtTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageNlTest.php (renamed from tests/phpunit/languages/LanguageNlTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageNsoTest.php (renamed from tests/phpunit/languages/LanguageNsoTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguagePlTest.php (renamed from tests/phpunit/languages/LanguagePlTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageRoTest.php (renamed from tests/phpunit/languages/LanguageRoTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageRuTest.php (renamed from tests/phpunit/languages/LanguageRuTest.php)14
-rw-r--r--tests/phpunit/languages/classes/LanguageSeTest.php (renamed from tests/phpunit/languages/LanguageSeTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageSgsTest.php (renamed from tests/phpunit/languages/LanguageSgsTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageShTest.php (renamed from tests/phpunit/languages/LanguageShTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageSkTest.php (renamed from tests/phpunit/languages/LanguageSkTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageSlTest.php (renamed from tests/phpunit/languages/LanguageSlTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageSmaTest.php (renamed from tests/phpunit/languages/LanguageSmaTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageSrTest.php (renamed from tests/phpunit/languages/LanguageSrTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageTiTest.php (renamed from tests/phpunit/languages/LanguageTiTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageTlTest.php (renamed from tests/phpunit/languages/LanguageTlTest.php)4
-rw-r--r--tests/phpunit/languages/classes/LanguageTrTest.php (renamed from tests/phpunit/languages/LanguageTrTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageUkTest.php (renamed from tests/phpunit/languages/LanguageUkTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageUzTest.php (renamed from tests/phpunit/languages/LanguageUzTest.php)0
-rw-r--r--tests/phpunit/languages/classes/LanguageWaTest.php (renamed from tests/phpunit/languages/LanguageWaTest.php)0
-rw-r--r--tests/phpunit/maintenance/DumpTestCase.php24
-rw-r--r--tests/phpunit/maintenance/backupTextPassTest.php126
-rw-r--r--tests/phpunit/phpunit.php6
-rw-r--r--tests/phpunit/structure/AutoLoaderTest.php39
-rw-r--r--tests/phpunit/structure/AvailableRightsTest.php51
-rw-r--r--tests/phpunit/structure/ResourcesTest.php5
-rw-r--r--tests/phpunit/suite.xml2
-rw-r--r--tests/phpunit/suites/ExtensionsTestSuite.php2
-rw-r--r--tests/qunit/QUnitTestResources.php11
-rw-r--r--tests/qunit/data/testrunner.js40
-rw-r--r--tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js14
-rw-r--r--tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js2
-rw-r--r--tests/qunit/suites/resources/jquery/jquery.client.test.js638
-rw-r--r--tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js7
-rw-r--r--tests/qunit/suites/resources/jquery/jquery.placeholder.test.js6
-rw-r--r--tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js223
-rw-r--r--tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js51
-rw-r--r--tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js78
-rw-r--r--tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js62
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js59
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js61
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js19
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js42
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js575
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js17
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js28
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js63
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.test.js89
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js42
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js48
-rw-r--r--tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js208
-rw-r--r--tests/qunit/suites/resources/startup.test.js1
-rw-r--r--tests/testHelpers.inc8
-rw-r--r--thumb.php109
-rw-r--r--thumb.php52
-rw-r--r--thumb_handler.php52
-rw-r--r--vendor/autoload.php7
-rw-r--r--vendor/composer/ClassLoader.php413
-rw-r--r--vendor/composer/autoload_classmap.php85
-rw-r--r--vendor/composer/autoload_namespaces.php13
-rw-r--r--vendor/composer/autoload_psr4.php10
-rw-r--r--vendor/composer/autoload_real.php50
-rw-r--r--vendor/composer/installed.json394
-rw-r--r--vendor/cssjanus/cssjanus/APACHE-LICENSE-2.0.txt202
-rw-r--r--vendor/cssjanus/cssjanus/README.md45
-rw-r--r--vendor/cssjanus/cssjanus/composer.json24
-rw-r--r--vendor/cssjanus/cssjanus/src/CSSJanus.php (renamed from includes/libs/CSSJanus.php)38
-rw-r--r--vendor/cssjanus/cssjanus/test/codesniffer/ruleset.xml9
-rw-r--r--vendor/cssjanus/cssjanus/test/phpunit.xml8
-rw-r--r--vendor/cssjanus/cssjanus/test/run7
-rw-r--r--vendor/cssjanus/cssjanus/test/suites/CSSJanusTest.php71
-rw-r--r--vendor/leafo/lessphp/LICENSE660
-rw-r--r--vendor/leafo/lessphp/Makefile7
-rw-r--r--vendor/leafo/lessphp/README.md96
-rw-r--r--vendor/leafo/lessphp/composer.json25
-rw-r--r--vendor/leafo/lessphp/docs/docs.md1400
-rw-r--r--vendor/leafo/lessphp/lessc.inc.php (renamed from includes/libs/lessc.inc.php)42
-rw-r--r--vendor/leafo/lessphp/lessify23
-rw-r--r--vendor/leafo/lessphp/lessify.inc.php447
-rw-r--r--vendor/leafo/lessphp/package.sh35
-rw-r--r--vendor/leafo/lessphp/plessc250
-rw-r--r--vendor/leafo/lessphp/tests/ApiTest.php196
-rw-r--r--vendor/leafo/lessphp/tests/ErrorHandlingTest.php81
-rw-r--r--vendor/leafo/lessphp/tests/InputTest.php89
-rw-r--r--vendor/leafo/lessphp/tests/README.md24
-rw-r--r--vendor/leafo/lessphp/tests/bootstrap.sh38
-rw-r--r--vendor/leafo/lessphp/tests/inputs/accessors.less.disable36
-rw-r--r--vendor/leafo/lessphp/tests/inputs/arity.less77
-rw-r--r--vendor/leafo/lessphp/tests/inputs/attributes.less41
-rw-r--r--vendor/leafo/lessphp/tests/inputs/builtins.less96
-rw-r--r--vendor/leafo/lessphp/tests/inputs/colors.less154
-rw-r--r--vendor/leafo/lessphp/tests/inputs/compile_on_mixin.less39
-rw-r--r--vendor/leafo/lessphp/tests/inputs/data-uri.less7
-rw-r--r--vendor/leafo/lessphp/tests/inputs/directives.less28
-rw-r--r--vendor/leafo/lessphp/tests/inputs/escape.less18
-rw-r--r--vendor/leafo/lessphp/tests/inputs/font_family.less28
-rw-r--r--vendor/leafo/lessphp/tests/inputs/guards.less74
-rw-r--r--vendor/leafo/lessphp/tests/inputs/hacks.less6
-rw-r--r--vendor/leafo/lessphp/tests/inputs/hi.less5
-rw-r--r--vendor/leafo/lessphp/tests/inputs/ie.less12
-rw-r--r--vendor/leafo/lessphp/tests/inputs/import.less56
-rw-r--r--vendor/leafo/lessphp/tests/inputs/interpolation.less47
-rw-r--r--vendor/leafo/lessphp/tests/inputs/keyframes.less52
-rw-r--r--vendor/leafo/lessphp/tests/inputs/math.less122
-rw-r--r--vendor/leafo/lessphp/tests/inputs/media.less68
-rw-r--r--vendor/leafo/lessphp/tests/inputs/misc.less100
-rw-r--r--vendor/leafo/lessphp/tests/inputs/mixin_functions.less33
-rw-r--r--vendor/leafo/lessphp/tests/inputs/mixin_merging.less.disable100
-rw-r--r--vendor/leafo/lessphp/tests/inputs/mixins.less197
-rw-r--r--vendor/leafo/lessphp/tests/inputs/nested.less60
-rw-r--r--vendor/leafo/lessphp/tests/inputs/pattern_matching.less157
-rw-r--r--vendor/leafo/lessphp/tests/inputs/scopes.less40
-rw-r--r--vendor/leafo/lessphp/tests/inputs/selector_expressions.less29
-rw-r--r--vendor/leafo/lessphp/tests/inputs/site_demos.less120
-rw-r--r--vendor/leafo/lessphp/tests/inputs/test-imports/a.less6
-rw-r--r--vendor/leafo/lessphp/tests/inputs/test-imports/b.less12
-rw-r--r--vendor/leafo/lessphp/tests/inputs/test-imports/file1.less16
-rw-r--r--vendor/leafo/lessphp/tests/inputs/test-imports/file2.less6
-rw-r--r--vendor/leafo/lessphp/tests/inputs/test-imports/file3.less7
-rw-r--r--vendor/leafo/lessphp/tests/inputs/test-imports/inner/file1.less6
-rw-r--r--vendor/leafo/lessphp/tests/inputs/test-imports/inner/file2.less4
-rw-r--r--vendor/leafo/lessphp/tests/inputs/variables.less44
-rw-r--r--vendor/leafo/lessphp/tests/inputs_lessjs/mixins-args.less205
-rw-r--r--vendor/leafo/lessphp/tests/inputs_lessjs/mixins-named-args.less36
-rw-r--r--vendor/leafo/lessphp/tests/inputs_lessjs/strings.less51
-rw-r--r--vendor/leafo/lessphp/tests/outputs/accessors.css14
-rw-r--r--vendor/leafo/lessphp/tests/outputs/arity.css25
-rw-r--r--vendor/leafo/lessphp/tests/outputs/attributes.css105
-rw-r--r--vendor/leafo/lessphp/tests/outputs/builtins.css61
-rw-r--r--vendor/leafo/lessphp/tests/outputs/colors.css103
-rw-r--r--vendor/leafo/lessphp/tests/outputs/compile_on_mixin.css29
-rw-r--r--vendor/leafo/lessphp/tests/outputs/data-uri.css6
-rw-r--r--vendor/leafo/lessphp/tests/outputs/directives.css27
-rw-r--r--vendor/leafo/lessphp/tests/outputs/escape.css14
-rw-r--r--vendor/leafo/lessphp/tests/outputs/font_family.css17
-rw-r--r--vendor/leafo/lessphp/tests/outputs/guards.css27
-rw-r--r--vendor/leafo/lessphp/tests/outputs/hacks.css4
-rw-r--r--vendor/leafo/lessphp/tests/outputs/hi.css3
-rw-r--r--vendor/leafo/lessphp/tests/outputs/ie.css9
-rw-r--r--vendor/leafo/lessphp/tests/outputs/import.css51
-rw-r--r--vendor/leafo/lessphp/tests/outputs/interpolation.css28
-rw-r--r--vendor/leafo/lessphp/tests/outputs/keyframes.css48
-rw-r--r--vendor/leafo/lessphp/tests/outputs/math.css69
-rw-r--r--vendor/leafo/lessphp/tests/outputs/media.css70
-rw-r--r--vendor/leafo/lessphp/tests/outputs/misc.css68
-rw-r--r--vendor/leafo/lessphp/tests/outputs/mixin_functions.css7
-rw-r--r--vendor/leafo/lessphp/tests/outputs/mixin_merging.css42
-rw-r--r--vendor/leafo/lessphp/tests/outputs/mixins.css92
-rw-r--r--vendor/leafo/lessphp/tests/outputs/nested.css51
-rw-r--r--vendor/leafo/lessphp/tests/outputs/nesting.css6
-rw-r--r--vendor/leafo/lessphp/tests/outputs/pattern_matching.css72
-rw-r--r--vendor/leafo/lessphp/tests/outputs/scopes.css11
-rw-r--r--vendor/leafo/lessphp/tests/outputs/selector_expressions.css25
-rw-r--r--vendor/leafo/lessphp/tests/outputs/site_demos.css76
-rw-r--r--vendor/leafo/lessphp/tests/outputs/variables.css19
-rw-r--r--vendor/leafo/lessphp/tests/outputs_lessjs/mixins-args.css113
-rw-r--r--vendor/leafo/lessphp/tests/outputs_lessjs/mixins-named-args.css27
-rw-r--r--vendor/leafo/lessphp/tests/outputs_lessjs/strings.css40
-rw-r--r--vendor/leafo/lessphp/tests/sort.php57
-rw-r--r--vendor/liuggio/statsd-php-client/LICENSE19
-rw-r--r--vendor/liuggio/statsd-php-client/Readme.md149
-rw-r--r--vendor/liuggio/statsd-php-client/composer.json26
-rw-r--r--vendor/liuggio/statsd-php-client/phpunit.xml.dist15
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php78
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php41
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php7
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php130
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php99
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php101
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php120
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php35
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php32
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php88
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php42
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php211
-rw-r--r--vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php23
-rw-r--r--vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Entity/StatsdDataTest.php27
-rw-r--r--vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatterTest.php169
-rw-r--r--vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Handler/StatsDHandlerTest.php89
-rw-r--r--vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/ReadmeTest.php72
-rw-r--r--vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdClientTest.php228
-rw-r--r--vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdDataFactoryTest.php97
-rw-r--r--vendor/liuggio/statsd-php-client/tests/bootstrap.php5
-rw-r--r--vendor/oojs/oojs-ui/.csscomb.json24
-rw-r--r--vendor/oojs/oojs-ui/.csslintrc11
-rw-r--r--vendor/oojs/oojs-ui/.mailmap18
-rw-r--r--vendor/oojs/oojs-ui/.npmignore2
-rw-r--r--vendor/oojs/oojs-ui/AUTHORS.txt34
-rw-r--r--vendor/oojs/oojs-ui/Doxyfile33
-rw-r--r--vendor/oojs/oojs-ui/Gemfile.lock25
-rw-r--r--vendor/oojs/oojs-ui/Gruntfile.js401
-rw-r--r--vendor/oojs/oojs-ui/History.md668
-rw-r--r--vendor/oojs/oojs-ui/LICENSE-MIT20
-rw-r--r--vendor/oojs/oojs-ui/README.md79
-rw-r--r--vendor/oojs/oojs-ui/bin/doccomparer.rb165
-rw-r--r--vendor/oojs/oojs-ui/bin/docparser.rb243
-rw-r--r--vendor/oojs/oojs-ui/bin/generate-JSPHP-for-karma.php50
-rw-r--r--vendor/oojs/oojs-ui/bin/testsuitegenerator.rb146
-rw-r--r--vendor/oojs/oojs-ui/build/banner.txt10
-rw-r--r--vendor/oojs/oojs-ui/build/modules.json240
-rw-r--r--vendor/oojs/oojs-ui/build/tasks/colorize-svg.js538
-rw-r--r--vendor/oojs/oojs-ui/build/tasks/typos.js89
-rw-r--r--vendor/oojs/oojs-ui/build/typos.json17
-rw-r--r--vendor/oojs/oojs-ui/composer.json24
-rw-r--r--vendor/oojs/oojs-ui/demos/demo.js504
-rw-r--r--vendor/oojs/oojs-ui/demos/index.html39
-rw-r--r--vendor/oojs/oojs-ui/demos/infusion.js66
-rw-r--r--vendor/oojs/oojs-ui/demos/pages/dialogs.js602
-rw-r--r--vendor/oojs/oojs-ui/demos/pages/icons.js295
-rw-r--r--vendor/oojs/oojs-ui/demos/pages/toolbars.js338
-rw-r--r--vendor/oojs/oojs-ui/demos/pages/widgets.js1428
-rw-r--r--vendor/oojs/oojs-ui/demos/styles/demo.css250
-rw-r--r--vendor/oojs/oojs-ui/demos/widgets.php830
-rw-r--r--vendor/oojs/oojs-ui/i18n/ace.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/af.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/am.json7
-rw-r--r--vendor/oojs/oojs-ui/i18n/ar.json28
-rw-r--r--vendor/oojs/oojs-ui/i18n/arc.json7
-rw-r--r--vendor/oojs/oojs-ui/i18n/arq.json16
-rw-r--r--vendor/oojs/oojs-ui/i18n/ast.json18
-rw-r--r--vendor/oojs/oojs-ui/i18n/awa.json8
-rw-r--r--vendor/oojs/oojs-ui/i18n/az.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/ba.json14
-rw-r--r--vendor/oojs/oojs-ui/i18n/bcc.json9
-rw-r--r--vendor/oojs/oojs-ui/i18n/bcl.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/be-tarask.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/be.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/bg.json12
-rw-r--r--vendor/oojs/oojs-ui/i18n/bn.json26
-rw-r--r--vendor/oojs/oojs-ui/i18n/br.json22
-rw-r--r--vendor/oojs/oojs-ui/i18n/bs.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/ca.json28
-rw-r--r--vendor/oojs/oojs-ui/i18n/ce.json17
-rw-r--r--vendor/oojs/oojs-ui/i18n/ckb.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/co.json9
-rw-r--r--vendor/oojs/oojs-ui/i18n/crh-cyrl.json8
-rw-r--r--vendor/oojs/oojs-ui/i18n/crh-latn.json8
-rw-r--r--vendor/oojs/oojs-ui/i18n/cs.json29
-rw-r--r--vendor/oojs/oojs-ui/i18n/cu.json9
-rw-r--r--vendor/oojs/oojs-ui/i18n/cy.json14
-rw-r--r--vendor/oojs/oojs-ui/i18n/da.json16
-rw-r--r--vendor/oojs/oojs-ui/i18n/de.json28
-rw-r--r--vendor/oojs/oojs-ui/i18n/diq.json16
-rw-r--r--vendor/oojs/oojs-ui/i18n/dsb.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/egl.json14
-rw-r--r--vendor/oojs/oojs-ui/i18n/el.json26
-rw-r--r--vendor/oojs/oojs-ui/i18n/eml.json14
-rw-r--r--vendor/oojs/oojs-ui/i18n/en.json31
-rw-r--r--vendor/oojs/oojs-ui/i18n/eo.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/es.json33
-rw-r--r--vendor/oojs/oojs-ui/i18n/et.json20
-rw-r--r--vendor/oojs/oojs-ui/i18n/eu.json20
-rw-r--r--vendor/oojs/oojs-ui/i18n/fa.json29
-rw-r--r--vendor/oojs/oojs-ui/i18n/fi.json31
-rw-r--r--vendor/oojs/oojs-ui/i18n/fo.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/fr.json45
-rw-r--r--vendor/oojs/oojs-ui/i18n/frr.json12
-rw-r--r--vendor/oojs/oojs-ui/i18n/fur.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/fy.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/gd.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/gl.json22
-rw-r--r--vendor/oojs/oojs-ui/i18n/gu.json17
-rw-r--r--vendor/oojs/oojs-ui/i18n/he.json30
-rw-r--r--vendor/oojs/oojs-ui/i18n/hi.json24
-rw-r--r--vendor/oojs/oojs-ui/i18n/hr.json21
-rw-r--r--vendor/oojs/oojs-ui/i18n/hsb.json20
-rw-r--r--vendor/oojs/oojs-ui/i18n/hu.json23
-rw-r--r--vendor/oojs/oojs-ui/i18n/hy.json21
-rw-r--r--vendor/oojs/oojs-ui/i18n/ia.json16
-rw-r--r--vendor/oojs/oojs-ui/i18n/id.json26
-rw-r--r--vendor/oojs/oojs-ui/i18n/ie.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/ilo.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/is.json20
-rw-r--r--vendor/oojs/oojs-ui/i18n/it.json30
-rw-r--r--vendor/oojs/oojs-ui/i18n/ja.json24
-rw-r--r--vendor/oojs/oojs-ui/i18n/jv.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/ka.json26
-rw-r--r--vendor/oojs/oojs-ui/i18n/kk-cyrl.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/km.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/kn.json22
-rw-r--r--vendor/oojs/oojs-ui/i18n/ko.json25
-rw-r--r--vendor/oojs/oojs-ui/i18n/krc.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/ksh.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/ku-latn.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/kw.json9
-rw-r--r--vendor/oojs/oojs-ui/i18n/ky.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/lb.json25
-rw-r--r--vendor/oojs/oojs-ui/i18n/lmo.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/lt.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/lv.json21
-rw-r--r--vendor/oojs/oojs-ui/i18n/lzh.json8
-rw-r--r--vendor/oojs/oojs-ui/i18n/mg.json7
-rw-r--r--vendor/oojs/oojs-ui/i18n/min.json14
-rw-r--r--vendor/oojs/oojs-ui/i18n/mk.json21
-rw-r--r--vendor/oojs/oojs-ui/i18n/ml.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/mr.json15
-rw-r--r--vendor/oojs/oojs-ui/i18n/ms.json17
-rw-r--r--vendor/oojs/oojs-ui/i18n/nap.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/nb.json25
-rw-r--r--vendor/oojs/oojs-ui/i18n/nds-nl.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/nds.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/ne.json20
-rw-r--r--vendor/oojs/oojs-ui/i18n/nl.json35
-rw-r--r--vendor/oojs/oojs-ui/i18n/nn.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/oc.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/om.json20
-rw-r--r--vendor/oojs/oojs-ui/i18n/or.json21
-rw-r--r--vendor/oojs/oojs-ui/i18n/pa.json22
-rw-r--r--vendor/oojs/oojs-ui/i18n/pfl.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/pl.json34
-rw-r--r--vendor/oojs/oojs-ui/i18n/pms.json12
-rw-r--r--vendor/oojs/oojs-ui/i18n/ps.json18
-rw-r--r--vendor/oojs/oojs-ui/i18n/pt-br.json18
-rw-r--r--vendor/oojs/oojs-ui/i18n/pt.json28
-rw-r--r--vendor/oojs/oojs-ui/i18n/qqq.json35
-rw-r--r--vendor/oojs/oojs-ui/i18n/qu.json12
-rw-r--r--vendor/oojs/oojs-ui/i18n/ro.json23
-rw-r--r--vendor/oojs/oojs-ui/i18n/roa-tara.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/ru.json34
-rw-r--r--vendor/oojs/oojs-ui/i18n/sah.json8
-rw-r--r--vendor/oojs/oojs-ui/i18n/scn.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/sco.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/sh.json9
-rw-r--r--vendor/oojs/oojs-ui/i18n/si.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/sk.json12
-rw-r--r--vendor/oojs/oojs-ui/i18n/sl.json22
-rw-r--r--vendor/oojs/oojs-ui/i18n/sq.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/sr-ec.json21
-rw-r--r--vendor/oojs/oojs-ui/i18n/sr-el.json19
-rw-r--r--vendor/oojs/oojs-ui/i18n/sv.json29
-rw-r--r--vendor/oojs/oojs-ui/i18n/sw.json15
-rw-r--r--vendor/oojs/oojs-ui/i18n/ta.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/te.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/tg-cyrl.json11
-rw-r--r--vendor/oojs/oojs-ui/i18n/th.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/tl.json14
-rw-r--r--vendor/oojs/oojs-ui/i18n/tr.json27
-rw-r--r--vendor/oojs/oojs-ui/i18n/tt-cyrl.json9
-rw-r--r--vendor/oojs/oojs-ui/i18n/ug-arab.json9
-rw-r--r--vendor/oojs/oojs-ui/i18n/uk.json33
-rw-r--r--vendor/oojs/oojs-ui/i18n/uz.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/vec.json13
-rw-r--r--vendor/oojs/oojs-ui/i18n/vi.json22
-rw-r--r--vendor/oojs/oojs-ui/i18n/vo.json8
-rw-r--r--vendor/oojs/oojs-ui/i18n/wuu.json9
-rw-r--r--vendor/oojs/oojs-ui/i18n/yi.json18
-rw-r--r--vendor/oojs/oojs-ui/i18n/yo.json10
-rw-r--r--vendor/oojs/oojs-ui/i18n/yue.json16
-rw-r--r--vendor/oojs/oojs-ui/i18n/zh-hans.json34
-rw-r--r--vendor/oojs/oojs-ui/i18n/zh-hant.json32
-rw-r--r--vendor/oojs/oojs-ui/jsduck.categories.json80
-rw-r--r--vendor/oojs/oojs-ui/jsduck.eg-iframe.html33
-rw-r--r--vendor/oojs/oojs-ui/jsduck.external.js26
-rw-r--r--vendor/oojs/oojs-ui/jsduck.json16
-rw-r--r--vendor/oojs/oojs-ui/php/Element.php297
-rw-r--r--vendor/oojs/oojs-ui/php/ElementMixin.php55
-rw-r--r--vendor/oojs/oojs-ui/php/Exception.php6
-rw-r--r--vendor/oojs/oojs-ui/php/HtmlSnippet.php36
-rw-r--r--vendor/oojs/oojs-ui/php/Layout.php21
-rw-r--r--vendor/oojs/oojs-ui/php/Tag.php365
-rw-r--r--vendor/oojs/oojs-ui/php/Theme.php58
-rw-r--r--vendor/oojs/oojs-ui/php/Widget.php71
-rw-r--r--vendor/oojs/oojs-ui/php/elements/ButtonElement.php102
-rw-r--r--vendor/oojs/oojs-ui/php/elements/FlaggedElement.php133
-rw-r--r--vendor/oojs/oojs-ui/php/elements/GroupElement.php129
-rw-r--r--vendor/oojs/oojs-ui/php/elements/IconElement.php76
-rw-r--r--vendor/oojs/oojs-ui/php/elements/IndicatorElement.php78
-rw-r--r--vendor/oojs/oojs-ui/php/elements/LabelElement.php77
-rw-r--r--vendor/oojs/oojs-ui/php/elements/TabIndexedElement.php88
-rw-r--r--vendor/oojs/oojs-ui/php/elements/TitledElement.php74
-rw-r--r--vendor/oojs/oojs-ui/php/layouts/FieldLayout.php140
-rw-r--r--vendor/oojs/oojs-ui/php/layouts/FieldsetLayout.php32
-rw-r--r--vendor/oojs/oojs-ui/php/layouts/FormLayout.php47
-rw-r--r--vendor/oojs/oojs-ui/php/layouts/PanelLayout.php61
-rw-r--r--vendor/oojs/oojs-ui/php/themes/ApexTheme.php6
-rw-r--r--vendor/oojs/oojs-ui/php/themes/MediaWikiTheme.php39
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/ButtonGroupWidget.php28
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/ButtonInputWidget.php110
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/ButtonWidget.php166
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/CheckboxInputWidget.php70
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/DropdownInputWidget.php99
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/IconWidget.php34
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/IndicatorWidget.php32
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/InputWidget.php144
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/LabelWidget.php48
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/RadioInputWidget.php60
-rw-r--r--vendor/oojs/oojs-ui/php/widgets/TextInputWidget.php151
-rw-r--r--vendor/oojs/oojs-ui/src/ActionSet.js504
-rw-r--r--vendor/oojs/oojs-ui/src/Dialog.js323
-rw-r--r--vendor/oojs/oojs-ui/src/Element.js748
-rw-r--r--vendor/oojs/oojs-ui/src/Error.js91
-rw-r--r--vendor/oojs/oojs-ui/src/HtmlSnippet.js29
-rw-r--r--vendor/oojs/oojs-ui/src/Layout.js33
-rw-r--r--vendor/oojs/oojs-ui/src/Process.js166
-rw-r--r--vendor/oojs/oojs-ui/src/Theme.js48
-rw-r--r--vendor/oojs/oojs-ui/src/Tool.js279
-rw-r--r--vendor/oojs/oojs-ui/src/ToolFactory.js120
-rw-r--r--vendor/oojs/oojs-ui/src/ToolGroup.js338
-rw-r--r--vendor/oojs/oojs-ui/src/ToolGroupFactory.js38
-rw-r--r--vendor/oojs/oojs-ui/src/Toolbar.js481
-rw-r--r--vendor/oojs/oojs-ui/src/Widget.js102
-rw-r--r--vendor/oojs/oojs-ui/src/Window.js628
-rw-r--r--vendor/oojs/oojs-ui/src/WindowManager.js675
-rw-r--r--vendor/oojs/oojs-ui/src/core.js286
-rw-r--r--vendor/oojs/oojs-ui/src/dialogs/MessageDialog.js325
-rw-r--r--vendor/oojs/oojs-ui/src/dialogs/ProcessDialog.js296
-rw-r--r--vendor/oojs/oojs-ui/src/elements/ButtonElement.js263
-rw-r--r--vendor/oojs/oojs-ui/src/elements/ClippableElement.js205
-rw-r--r--vendor/oojs/oojs-ui/src/elements/DraggableElement.js142
-rw-r--r--vendor/oojs/oojs-ui/src/elements/DraggableGroupElement.js261
-rw-r--r--vendor/oojs/oojs-ui/src/elements/FlaggedElement.js209
-rw-r--r--vendor/oojs/oojs-ui/src/elements/GroupElement.js290
-rw-r--r--vendor/oojs/oojs-ui/src/elements/IconElement.js187
-rw-r--r--vendor/oojs/oojs-ui/src/elements/IndicatorElement.js168
-rw-r--r--vendor/oojs/oojs-ui/src/elements/LabelElement.js152
-rw-r--r--vendor/oojs/oojs-ui/src/elements/LookupElement.js352
-rw-r--r--vendor/oojs/oojs-ui/src/elements/PendingElement.js84
-rw-r--r--vendor/oojs/oojs-ui/src/elements/PopupElement.js36
-rw-r--r--vendor/oojs/oojs-ui/src/elements/TabIndexedElement.js138
-rw-r--r--vendor/oojs/oojs-ui/src/elements/TitledElement.js106
-rw-r--r--vendor/oojs/oojs-ui/src/intro.js.txt3
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/ActionFieldLayout.js81
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/BookletLayout.js542
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/CardLayout.js138
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/FieldLayout.js160
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/FieldsetLayout.js86
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/FormLayout.js119
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/IndexLayout.js452
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/MenuLayout.js156
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/PageLayout.js138
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/PanelLayout.js55
-rw-r--r--vendor/oojs/oojs-ui/src/layouts/StackLayout.js214
-rw-r--r--vendor/oojs/oojs-ui/src/outro.js.txt1
-rw-r--r--vendor/oojs/oojs-ui/src/styles/Dialog.less35
-rw-r--r--vendor/oojs/oojs-ui/src/styles/Element.less9
-rw-r--r--vendor/oojs/oojs-ui/src/styles/Layout.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/Tool.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/ToolGroup.less21
-rw-r--r--vendor/oojs/oojs-ui/src/styles/Toolbar.less52
-rw-r--r--vendor/oojs/oojs-ui/src/styles/Widget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/Window.less32
-rw-r--r--vendor/oojs/oojs-ui/src/styles/WindowManager.less39
-rw-r--r--vendor/oojs/oojs-ui/src/styles/common.less102
-rw-r--r--vendor/oojs/oojs-ui/src/styles/core.less114
-rw-r--r--vendor/oojs/oojs-ui/src/styles/dialogs/MessageDialog.less45
-rw-r--r--vendor/oojs/oojs-ui/src/styles/dialogs/ProcessDialog.less52
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/ButtonElement.less62
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/ClippableElement.less7
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/DraggableElement.less22
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/DraggableGroupElement.less11
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/FlaggedElement.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/GroupElement.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/IconElement.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/IndicatorElement.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/LabelElement.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/LookupElement.less10
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/PopupElement.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/TabIndexedElement.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/elements/TitledElement.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/images/grab.curbin0 -> 326 bytes
-rw-r--r--vendor/oojs/oojs-ui/src/styles/images/grabbing.curbin0 -> 326 bytes
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/ActionFieldLayout.less26
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/BookletLayout.less43
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/CardLayout.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/FieldLayout.less59
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/FieldsetLayout.less31
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/FormLayout.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/IndexLayout.less13
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/MenuLayout.less108
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/PageLayout.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/PanelLayout.less19
-rw-r--r--vendor/oojs/oojs-ui/src/styles/layouts/StackLayout.less10
-rw-r--r--vendor/oojs/oojs-ui/src/styles/theme.less91
-rw-r--r--vendor/oojs/oojs-ui/src/styles/toolgroups/BarToolGroup.less51
-rw-r--r--vendor/oojs/oojs-ui/src/styles/toolgroups/ListToolGroup.less21
-rw-r--r--vendor/oojs/oojs-ui/src/styles/toolgroups/MenuToolGroup.less19
-rw-r--r--vendor/oojs/oojs-ui/src/styles/toolgroups/PopupToolGroup.less73
-rw-r--r--vendor/oojs/oojs-ui/src/styles/tools/PopupTool.less12
-rw-r--r--vendor/oojs/oojs-ui/src/styles/tools/ToolGroupTool.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ActionWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ButtonGroupWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ButtonInputWidget.less8
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ButtonOptionWidget.less18
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ButtonSelectWidget.less8
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ButtonWidget.less8
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/CheckboxInputWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ComboBoxWidget.less13
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/DecoratedOptionWidget.less12
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/DropdownInputWidget.less17
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/DropdownWidget.less33
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/IconWidget.less10
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/IndicatorWidget.less10
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/InputWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/LabelWidget.less7
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/MenuOptionWidget.less21
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/MenuSectionOptionWidget.less8
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/MenuSelectWidget.less15
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/OptionWidget.less20
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/OutlineControlsWidget.less32
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/OutlineOptionWidget.less9
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/OutlineSelectWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/PopupButtonWidget.less12
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/PopupWidget.less49
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ProgressBarWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/RadioInputWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/RadioOptionWidget.less13
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/RadioSelectWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/SearchWidget.less25
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/SelectWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/TabOptionWidget.less8
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/TabSelectWidget.less9
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/TextInputMenuSelectWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/TextInputWidget.less71
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ToggleButtonWidget.less8
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ToggleSwitchWidget.less41
-rw-r--r--vendor/oojs/oojs-ui/src/styles/widgets/ToggleWidget.less5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/ApexTheme.js18
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/common.less27
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/core.less12
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/elements.less247
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/icons-editing-advanced.json75
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/icons-editing-core.json24
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/icons-editing-list.json22
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/icons-editing-styling.json72
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/icons-moderation.json33
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/icons-movement.json27
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/icons.json50
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/add.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/advanced.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/alert.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-center.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-left.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-right.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/block.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-a.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-ain.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-dad.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-armn-to.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-b.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-be.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-te.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-zhe.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-f.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-g.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-geor-man.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-l.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-n.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-v.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/cancel.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretDown.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretUp.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/case-sensitive.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/check.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/circle.svg2
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/close.svg (renamed from resources/lib/oojs-ui/images/icons/close.svg)2
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/code.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/collapse.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/comment.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/downTriangle.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-ltr.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-rtl.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-ltr.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-rtl.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/ellipsis.svg14
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/expand.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-ltr.svg16
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-rtl.svg16
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-ltr.svg10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-rtl.svg10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/history.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-ltr.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-rtl.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/info.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/insert.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-a.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-keheh-jeem.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-meem.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-armn-sha.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-c.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-d.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-e.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-geor-kan.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-i.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-k.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-s.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/language.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/link.svg (renamed from resources/lib/oojs-ui/images/icons/link.svg)2
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-ltr.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-rtl.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-ltr.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-rtl.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/lock.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/menu.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/move.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-ltr.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-rtl.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/picture.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-ltr.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-rtl.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/regular-expression.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/remove.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/search.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/secure-link.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/settings.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/specialCharacter.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/star.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-a.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-s.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-y.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-ltr.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-rtl.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-ltr.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-rtl.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-caption.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-ltr.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-rtl.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-after.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-before.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-merge-cells.svg10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/table.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/tag.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-lefttoright.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-righttoleft.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-style.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/trash.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/unStar.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-a.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-u.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/upTriangle.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/wikiText.svg15
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/icons/window.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/indicators/alert.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-down.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-up.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/indicators/required.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/textures/pending.gifbin0 -> 2032 bytes
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/textures/transparency.svg10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/images/toolbar-shadow.png (renamed from resources/lib/oojs-ui/images/toolbar-shadow.png)bin131 -> 131 bytes
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/indicators.json22
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/layouts.less135
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/textures.json8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/tools.less422
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/widgets.less797
-rw-r--r--vendor/oojs/oojs-ui/src/themes/apex/windows.less307
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/BlankTheme.js32
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/common.less10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/core.less12
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/elements.less29
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/images/icons/README.txt1
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/images/indicators/README.txt1
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/images/textures/README.txt1
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/layouts.less26
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/tools.less20
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/widgets.less77
-rw-r--r--vendor/oojs/oojs-ui/src/themes/blank/windows.less11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/MediaWikiTheme.js56
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/common.less69
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/core.less12
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/elements.less319
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-alerts.json33
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-content.json50
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-advanced.json75
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-core.json45
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-list.json22
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-styling.json72
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-interactions.json52
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-layout.json43
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-location.json19
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-media.json27
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-moderation.json52
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-movement.json27
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-user.json19
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons-wikimedia.json9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/icons.json75
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/add.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/advanced.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/alert.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-center.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-left.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-right.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-ltr.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-rtl.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bell.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/beta.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/betaLaunch.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/block.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-a.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-ain.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-dad.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-armn-to.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-b.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-be.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-te.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-zhe.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-f.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-g.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-geor-man.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-l.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-n.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-v.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/cancel.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretDown.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretUp.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/case-sensitive.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/check.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/circle.svg2
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clear.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clock.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/code.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/collapse.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/comment.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/downTriangle.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-ltr.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-rtl.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-ltr.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-rtl.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ellipsis.svg14
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/expand.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eye.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eyeClosed.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-ltr.svg16
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-rtl.svg16
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/heart.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-ltr.svg10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-rtl.svg10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/history.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/info.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/insert.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-a.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-meem.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-armn-sha.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-c.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-d.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-e.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-geor-kan.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-i.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-k.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-s.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/language.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-ltr.svg13
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-cc.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikimediaCommons.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikipedia.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPin.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-ltr.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-rtl.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/menu.svg10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/picture.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-ltr.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-rtl.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-ltr.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-rtl.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/regular-expression.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/remove.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ribbonPrize.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/secure-link.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/settings.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/specialCharacter.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/star.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stop.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-a.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-s.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-y.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSideMenu.svg12
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-ltr.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-rtl.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-ltr.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-rtl.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-ltr.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-rtl.svg5
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-caption.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-ltr.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-rtl.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-after.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-before.svg11
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-merge-cells.svg10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/tag.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-ltr.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-rtl.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-lefttoright.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-righttoleft.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-style.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trash.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unStar.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-a.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-u.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upTriangle.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userAvatar.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-ltr.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-rtl.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewCompact.svg14
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-ltr.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-rtl.svg9
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/visionSimulator.svg4
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikiText.svg15
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-ltr.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-rtl.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/window.svg7
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/alert.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-down.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-ltr.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-rtl.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-up.svg8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/required.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-ltr.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-rtl.svg6
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/pending.gifbin0 -> 2032 bytes
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/transparency.svg10
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/indicators.json29
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/layouts.less135
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/textures.json8
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/tools.less422
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/widgets.less978
-rw-r--r--vendor/oojs/oojs-ui/src/themes/mediawiki/windows.less300
-rw-r--r--vendor/oojs/oojs-ui/src/toolgroups/BarToolGroup.js35
-rw-r--r--vendor/oojs/oojs-ui/src/toolgroups/ListToolGroup.js133
-rw-r--r--vendor/oojs/oojs-ui/src/toolgroups/MenuToolGroup.js58
-rw-r--r--vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js187
-rw-r--r--vendor/oojs/oojs-ui/src/tools/PopupTool.js59
-rw-r--r--vendor/oojs/oojs-ui/src/tools/ToolGroupTool.js96
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ActionWidget.js170
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ButtonGroupWidget.js53
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ButtonInputWidget.js121
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ButtonOptionWidget.js60
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ButtonSelectWidget.js62
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ButtonWidget.js215
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/CheckboxInputWidget.js110
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ComboBoxWidget.js230
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/DecoratedOptionWidget.js55
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/DropdownInputWidget.js137
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/DropdownWidget.js149
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/GroupWidget.js48
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/IconWidget.js54
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/IndicatorWidget.js52
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/InputWidget.js207
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ItemWidget.js48
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/LabelWidget.js84
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/MenuOptionWidget.js33
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/MenuSectionOptionWidget.js55
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/MenuSelectWidget.js254
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/OptionWidget.js177
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/OutlineControlsWidget.js145
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js130
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/OutlineSelectWidget.js34
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/PopupButtonWidget.js57
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/PopupWidget.js395
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ProgressBarWidget.js96
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/RadioInputWidget.js94
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/RadioOptionWidget.js66
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/RadioSelectWidget.js58
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/SearchWidget.js176
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/SelectWidget.js630
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/TabOptionWidget.js31
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/TabSelectWidget.js33
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/TextInputMenuSelectWidget.js103
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/TextInputWidget.js535
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ToggleButtonWidget.js114
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ToggleSwitchWidget.js92
-rw-r--r--vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js71
-rw-r--r--vendor/oojs/oojs-ui/tests/Element.test.js52
-rw-r--r--vendor/oojs/oojs-ui/tests/JSPHP.test.karma.js61
-rw-r--r--vendor/oojs/oojs-ui/tests/JSPHP.test.standalone.js55
-rw-r--r--vendor/oojs/oojs-ui/tests/Process.test.js179
-rw-r--r--vendor/oojs/oojs-ui/tests/QUnit.assert.equalDomElement.js113
-rw-r--r--vendor/oojs/oojs-ui/tests/elements/FlaggedElement.test.js64
-rw-r--r--vendor/oojs/oojs-ui/tests/index.php77
-rw-r--r--vendor/psr/log/LICENSE19
-rw-r--r--vendor/psr/log/Psr/Log/AbstractLogger.php120
-rw-r--r--vendor/psr/log/Psr/Log/InvalidArgumentException.php7
-rw-r--r--vendor/psr/log/Psr/Log/LogLevel.php18
-rw-r--r--vendor/psr/log/Psr/Log/LoggerAwareInterface.php17
-rw-r--r--vendor/psr/log/Psr/Log/LoggerAwareTrait.php22
-rw-r--r--vendor/psr/log/Psr/Log/LoggerInterface.php114
-rw-r--r--vendor/psr/log/Psr/Log/LoggerTrait.php131
-rw-r--r--vendor/psr/log/Psr/Log/NullLogger.php27
-rw-r--r--vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php116
-rw-r--r--vendor/psr/log/README.md45
-rw-r--r--vendor/psr/log/composer.json17
-rw-r--r--vendor/wikimedia/cdb/COPYING342
-rw-r--r--vendor/wikimedia/cdb/Doxyfile32
-rw-r--r--vendor/wikimedia/cdb/README.md48
-rw-r--r--vendor/wikimedia/cdb/composer.json26
-rw-r--r--vendor/wikimedia/cdb/doc/README1
-rw-r--r--vendor/wikimedia/cdb/src/Exception.php28
-rw-r--r--vendor/wikimedia/cdb/src/Reader.php85
-rw-r--r--vendor/wikimedia/cdb/src/Reader/DBA.php49
-rw-r--r--vendor/wikimedia/cdb/src/Reader/PHP.php220
-rw-r--r--vendor/wikimedia/cdb/src/Util.php100
-rw-r--r--vendor/wikimedia/cdb/src/Writer.php99
-rw-r--r--vendor/wikimedia/cdb/src/Writer/DBA.php63
-rw-r--r--vendor/wikimedia/cdb/src/Writer/PHP.php240
-rw-r--r--vendor/wikimedia/cdb/test/CdbTest.php95
-rw-r--r--vendor/wikimedia/composer-merge-plugin/LICENSE19
-rw-r--r--vendor/wikimedia/composer-merge-plugin/README.md80
-rw-r--r--vendor/wikimedia/composer-merge-plugin/composer.json38
-rw-r--r--vendor/wikimedia/composer-merge-plugin/src/MergePlugin.php411
-rw-r--r--vendor/wikimedia/utfnormal/README.md69
-rw-r--r--vendor/wikimedia/utfnormal/scripts/benchmark.php101
-rw-r--r--vendor/wikimedia/utfnormal/scripts/generate.php273
-rw-r--r--vendor/wikimedia/utfnormal/scripts/memstress.php103
-rw-r--r--vendor/wikimedia/utfnormal/scripts/testdata/berlin.txt454
-rw-r--r--vendor/wikimedia/utfnormal/scripts/testdata/bulgakov.txt40
-rw-r--r--vendor/wikimedia/utfnormal/scripts/testdata/tokyo.txt587
-rw-r--r--vendor/wikimedia/utfnormal/scripts/testdata/washington.txt281
-rw-r--r--vendor/wikimedia/utfnormal/scripts/testdata/young.txt274
-rw-r--r--vendor/wikimedia/utfnormal/src/Constants.php103
-rw-r--r--vendor/wikimedia/utfnormal/src/UtfNormalData.inc14
-rw-r--r--vendor/wikimedia/utfnormal/src/UtfNormalDataK.inc11
-rw-r--r--vendor/wikimedia/utfnormal/src/Util.php157
-rw-r--r--vendor/wikimedia/utfnormal/src/Validator.php770
-rw-r--r--vendor/zordius/lightncandy/.scrutinizer.yml95
-rw-r--r--vendor/zordius/lightncandy/CONTRIBUTING.md18
-rw-r--r--vendor/zordius/lightncandy/HISTORY.md183
-rw-r--r--vendor/zordius/lightncandy/LICENSE.txt19
-rw-r--r--vendor/zordius/lightncandy/README.md670
-rw-r--r--vendor/zordius/lightncandy/UPGRADE.md18
-rw-r--r--vendor/zordius/lightncandy/build/gen_doc6
-rw-r--r--vendor/zordius/lightncandy/build/gen_test.php64
-rw-r--r--vendor/zordius/lightncandy/build/push_ghpage12
-rw-r--r--vendor/zordius/lightncandy/build/runphp2
-rw-r--r--vendor/zordius/lightncandy/build/travis_push60
-rw-r--r--vendor/zordius/lightncandy/composer.json22
-rw-r--r--vendor/zordius/lightncandy/example_debug.pngbin0 -> 2930 bytes
-rw-r--r--vendor/zordius/lightncandy/phpunit.xml23
-rw-r--r--vendor/zordius/lightncandy/src/lightncandy.php2560
-rw-r--r--vendor/zordius/lightncandy/tests/LCRun3Test.php376
-rw-r--r--vendor/zordius/lightncandy/tests/LightnCandyTest.php460
-rw-r--r--vendor/zordius/lightncandy/tests/errorTest.php410
-rw-r--r--vendor/zordius/lightncandy/tests/example_debug.php28
-rw-r--r--vendor/zordius/lightncandy/tests/example_helpers.php58
-rw-r--r--vendor/zordius/lightncandy/tests/handlebarsSpecTest.php162
-rw-r--r--vendor/zordius/lightncandy/tests/helpers_for_test.php137
-rw-r--r--vendor/zordius/lightncandy/tests/mustacheSpecTest.php53
-rw-r--r--vendor/zordius/lightncandy/tests/recursive.tmpl1
-rw-r--r--vendor/zordius/lightncandy/tests/regressionTest.php736
-rw-r--r--vendor/zordius/lightncandy/tests/test1.tmpl1
-rw-r--r--vendor/zordius/lightncandy/tests/test2.tmpl1
-rw-r--r--vendor/zordius/lightncandy/tests/test3.tmpl1
6412 files changed, 254990 insertions, 114847 deletions
diff --git a/CREDITS b/CREDITS
index 776e51b3..c7cf2c18 100644
--- a/CREDITS
+++ b/CREDITS
@@ -1,6 +1,6 @@
{{int:version-credits-summary}}
<!--
-MediaWiki 1.24 is a collaborative project released under the
+MediaWiki 1.25 is a collaborative project released under the
GNU General Public License v2. We would like to recognize the
following names for their contribution to the product.
-->
@@ -12,13 +12,15 @@ following names for their contribution to the product.
* Alexander Monk
* Alexandre Emsenhuber
* Andrew Garrett
+* Antoine Musso
* Arthur Richards
* Aryeh Gregor
-* Antoine Musso
-* Brian Wolff
+* Bartosz Dziewoński
* Bertrand Grondin
* Brad Jorsch
+* Brian Wolff
* Brion Vibber
+* Bryan Davis
* Bryan Tong Minh
* Chad Horohoe
* Charles Melbye
@@ -40,13 +42,13 @@ following names for their contribution to the product.
* Ilmari Karonen
* Jack D. Pond
* Jack Phoenix
+* Jackmcbarn
* Jan Paul Posma
* Jason Richey
* Jeroen De Dauw
* John Du Hart
* Jon Harald Søby
* Juliano F. Ravasi
-* Ryan Kaldari
* Leo Koppelkamm
* Leon Weber
* Leslie Hoare
@@ -54,6 +56,7 @@ following names for their contribution to the product.
* Marius Hoch
* Matěj Grabovský
* Matt Johnston
+* Matthew Flaschen
* Max Semenik
* Meno25
* MinuteElectron
@@ -73,26 +76,28 @@ following names for their contribution to the product.
* Robert Stojnić
* Robin Pepermans
* Rotem Liss
+* Ryan Kaldari
* Ryan Lane
* Ryan Schmidt
* Sam Reed
* Shinjiman
* Siebrand Mazeland
-* SQL
* Soxred93
+* SQL
* Szymon Świerkosz
+* This, that and the other
* Thomas Bleher
+* Thomas Gries
* Tim Starling
* Timo Tijhof
-* Thomas Gries
* Trevor Parscal
* Victor Vasiliev
* Yesid Carrillo
* Yuri Astrakhan
== Patch Contributors ==
-* Aaron Pramana
* Aaron Ball
+* Aaron Pramana
* Agbad
* Ahmad Sherif
* Alejandro Mery
@@ -103,19 +108,17 @@ following names for their contribution to the product.
* Asier Lostalé
* Azliq7
* Bagariavivek
-* Bartosz Dziewoński
* Beau
* Benny Situ
* Bergi
* Borislav Manolov
-* Brad Jorsch
* Brent G
* Brianna Laugher
* Carlin
* Carsten Nielsen
* Chris Steipp
-* Christian Neubauer
* Christian Aistleitner
+* Christian Neubauer
* Conrad Irwin
* cryptocoryne
* Dan Barrett
@@ -133,8 +136,8 @@ following names for their contribution to the product.
* Erwin Dokter
* Étienne Beaulé
* Federico Leva
-* FunPika
* fomafix
+* FunPika
* Gabriel Wicke
* Gero Scholz
* Gilles van den Hoven
@@ -148,8 +151,8 @@ following names for their contribution to the product.
* Jeremy Baron
* Jidanni
* Jimmy Xu
-* Jonathan Wiltshire
* John N
+* Jonathan Wiltshire
* JuneHyeon Bae
* Jure Kajzer
* Karun Dambiec
@@ -166,16 +169,16 @@ following names for their contribution to the product.
* Lupo
* Madman
* Manuel Menal
+* Marc-André Pelletier
* Marcin Cieślak
* Marcus Buck
-* Marc-André Pelletier
* Mark Hershberger
* Mark Holmquist
* Marooned
* Mathias Ertl
-* Matthias Mullie
-* Matthew Britton
* mati
+* Matthew Britton
+* Matthias Mullie
* Max
* Max Sikström
* merl
@@ -185,20 +188,20 @@ following names for their contribution to the product.
* Michael Newton
* Michael Walsh
* Mike Horvath
-* Mormegil
* moejoe0000
+* Mormegil
* MrBlueSky
* MrPete
-* MZMcBride
* mybugs.mail
+* MZMcBride
* Nakon
* Nathan Larson
* nephele
* Nik
-* Nx.devnull
* Nikola Kovacs
* Nikolaos S. Karastathis
* Nischay Nahata
+* Nx.devnull
* Olaf Lenz
* Olivier Finlay Beaton
* Patricio Molina
@@ -240,7 +243,7 @@ following names for their contribution to the product.
* Waldir Pimenta
* William Demchick
* Yusuke Matsubara
-* Yuvaraj Pandian T
+* Yuvi Panda
* Zachary Hauri
== Translators ==
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 00000000..0b360aed
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,98 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ ast (2.0.0)
+ astrolabe (1.3.0)
+ parser (>= 2.2.0.pre.3, < 3.0)
+ builder (3.2.2)
+ childprocess (0.5.5)
+ ffi (~> 1.0, >= 1.0.11)
+ cucumber (1.3.19)
+ builder (>= 2.1.2)
+ diff-lcs (>= 1.1.3)
+ gherkin (~> 2.12)
+ multi_json (>= 1.7.5, < 2.0)
+ multi_test (>= 0.1.2)
+ data_magic (0.20)
+ faker (>= 1.1.2)
+ yml_reader (>= 0.4)
+ diff-lcs (1.2.5)
+ domain_name (0.5.23)
+ unf (>= 0.0.5, < 1.0.0)
+ faker (1.4.3)
+ i18n (~> 0.5)
+ faraday (0.9.1)
+ multipart-post (>= 1.2, < 3)
+ faraday-cookie_jar (0.0.6)
+ faraday (>= 0.7.4)
+ http-cookie (~> 1.0.0)
+ ffi (1.9.6)
+ gherkin (2.12.2)
+ multi_json (~> 1.3)
+ headless (1.0.2)
+ http-cookie (1.0.2)
+ domain_name (~> 0.5)
+ i18n (0.7.0)
+ json (1.8.2)
+ mediawiki_api (0.3.1)
+ faraday (~> 0.9, >= 0.9.0)
+ faraday-cookie_jar (~> 0.0, >= 0.0.6)
+ mediawiki_selenium (1.0.1)
+ cucumber (~> 1.3, >= 1.3.10)
+ headless (~> 1.0, >= 1.0.1)
+ json (~> 1.8, >= 1.8.1)
+ mediawiki_api (~> 0.2, >= 0.2.1)
+ page-object (~> 1.0)
+ rest-client (~> 1.6, >= 1.6.7)
+ rspec-expectations (~> 2.14, >= 2.14.4)
+ syntax (~> 1.2, >= 1.2.0)
+ thor (~> 0.19, >= 0.19.1)
+ mime-types (2.4.3)
+ multi_json (1.11.0)
+ multi_test (0.1.2)
+ multipart-post (2.0.0)
+ netrc (0.10.3)
+ page-object (1.0.3)
+ page_navigation (>= 0.9)
+ selenium-webdriver (>= 2.44.0)
+ watir-webdriver (>= 0.6.11)
+ page_navigation (0.9)
+ data_magic (>= 0.14)
+ parser (2.2.0.3)
+ ast (>= 1.1, < 3.0)
+ powerpack (0.1.0)
+ rainbow (2.0.0)
+ rest-client (1.7.3)
+ mime-types (>= 1.16, < 3.0)
+ netrc (~> 0.7)
+ rspec-expectations (2.99.2)
+ diff-lcs (>= 1.1.3, < 2.0)
+ rubocop (0.29.1)
+ astrolabe (~> 1.3)
+ parser (>= 2.2.0.1, < 3.0)
+ powerpack (~> 0.1)
+ rainbow (>= 1.99.1, < 3.0)
+ ruby-progressbar (~> 1.4)
+ ruby-progressbar (1.7.1)
+ rubyzip (1.1.7)
+ selenium-webdriver (2.45.0)
+ childprocess (~> 0.5)
+ multi_json (~> 1.0)
+ rubyzip (~> 1.0)
+ websocket (~> 1.0)
+ syntax (1.2.0)
+ thor (0.19.1)
+ unf (0.1.4)
+ unf_ext
+ unf_ext (0.0.6)
+ watir-webdriver (0.7.0)
+ selenium-webdriver (>= 2.45)
+ websocket (1.2.1)
+ yml_reader (0.5)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ mediawiki_selenium (~> 1.0.1)
+ rubocop
diff --git a/Gruntfile.js b/Gruntfile.js
index f8177807..573db69a 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -52,6 +52,7 @@ module.exports = function ( grunt ) {
},
banana: {
core: 'languages/i18n/',
+ api: 'includes/api/i18n/',
installer: 'includes/installer/i18n/'
},
watch: {
diff --git a/HISTORY b/HISTORY
index 8dbb237f..6ea5c2e0 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,82 +1,694 @@
-Change notes from older releases. For current info see RELEASE-NOTES-1.24.
-
-== MediaWiki 1.23 ==
-
-== MediaWiki 1.23.6 ==
-
-This is a maintenance release of the MediaWiki 1.23 branch.
-
-=== Changes since 1.23.5 ===
-* (Bug 72274) Job queue not running (HTTP 411) due to missing
- Content-Length: header
-* (Bug 67440) Allow classes to be registered properly from installer
-
-== MediaWiki 1.23.5 ==
-
-This is a security release of the MediaWiki 1.23 branch.
-
-=== Changes since 1.23.4 ===
-* (bug 70672) SECURITY: OutputPage: Remove separation of css and js module
- allowance.
-
-== MediaWiki 1.23.4 ==
-
-This is a security and maintenance release of the MediaWiki 1.23 branch.
-
-=== Changes since 1.23.3 ===
-
-* (bug 69008) SECURITY: Enhance CSS filtering in SVG files. Filter <style>
- elements; normalize style elements and attributes before filtering; add
- checks for attributes that contain css; add unit tests for html5sec and
- reported bugs.
-* (bug 65998) Make MySQLi work with non-standard socket.
-* (bug 66986) GlobalVarConfig shouldn't throw exceptions for null-valued config
+Change notes from older releases. For current info see RELEASE-NOTES-1.25.
+
+== MediaWiki 1.24 ==
+
+=== Configuration changes in 1.24 ===
+* MediaWiki will no longer run if register_globals is enabled. It has been
+ deprecated for 5 years now, and was removed in PHP 5.4. For more information
+ about why, see <https://www.mediawiki.org/wiki/register_globals>.
+* MediaWiki now requires PHP's iconv extension. openSUSE users may need to
+ install the php5-iconv package. Users of other systems may need to add
+ extension=iconv.so to php.ini or recompile PHP without --without-iconv.
+* MediaWiki will no longer function if magic quotes are enabled. It has
+ been deprecated for 5 years now, and was removed in PHP 5.4.
+* The server's canonical hostname is available as $wgServerName, which is
+ exposed in both mw.config and ApiQuerySiteInfo.
+* Introduced $wgPagePropsHaveSortkey as a backwards-compatibility switch,
+ for using the old schema of the page_props table, in case the respective
+ schema update was not applied.
+* $wgSearchEverythingOnlyLoggedIn was removed as the 'searcheverything'
+ user option was removed. Use $wgNamespacesToBeSearchedDefault instead or
+ if you used to have $wgDefaultUserOptions['searcheverything'] = 1.
+* $wgMasterWaitTimeout has been deprecated.
+* $wgDBClusterTimeout has been removed.
+* $wgProxyKey has been removed. It is no longer used by MediaWiki core.
+ Ensure $wgSecretKey is set in LocalSettings.php.
+* $wgExtraInterlanguageLinkPrefixes is a new configuration variable that
+ contains an array of interwiki prefixes that should be treated as language
+ prefixes (i.e. turned into interlanguage links when $wgInterwikiMagic is set
+ to true).
+* $wgParserTestRemote has been removed.
+* $wgCountTotalSearchHits has been removed. If you're concerned about efficiency
+ of search, you should use something like CirrusSearch instead of built in
+ search.
+* Users in the 'sysop' group have access to Special:MergeHistory by default.
+* $wgFileStore was removed after having been deprecated in 1.17. Alternative
+ configurations are $wgDeletedDirectory and $wgHashedUploadDirectory.
+* The deprecated $wgUseCommaCount variable has been removed.
+* $wgEnableSorbs and $wgSorbsUrl have been removed.
+* The UserCryptPassword and UserComparePassword hooks are no longer called.
+ Any extensions using them must be updated to use the Password Hashing API.
+* $wgCompiledFiles has been removed.
+* $wgSortSpecialPages was removed, the listing on Special:SpecialPages is
+ now always sorted.
+* $wgSpecialPages may now use callback functions as an alternative to plain class names.
+ This allows more control over constructor parameters.
+* $wgHTCPMulticastAddress, $wgHTCPMulticastRouting and $wgHTCPPort were removed.
+* $wgRC2UDPAddress, $wgRC2UDPInterwikiPrefix, $wgRC2UDPOmitBots, $wgRC2UDPPort
+ and $wgRC2UDPPrefix have been removed.
+* The default password type for MediaWiki has been changed from MD5 to PBKDF2.
+ Password hashes will automatically be updated as users log in. If necessary, the
+ old MD5 hashing can be restored by changing $wgPasswordDefault to 'B'. In addition,
+ there is a maintenance script wrapOldPassword.php that can wrap all passwords in
+ PBKDF2 (or the hashing algorithm of your choice) if you don't want to wait for your
+ users to log in.
+* $wgImportSources can now either be a regular array, or an associative map
+ specifying subprojects on the interwiki map of the target wiki, or a mix of
+ the two. Existing configurations will still work.
+* Users must be able to edit through a page's protection to be able to delete it.
+* The default thumb size ($wgDefaultUserOptions['thumbsize']) is now 300px, up from
+ 180px. If you have altered the number of entries in $wgThumbLimits for your wiki, you
+ may need to adjust your default user settings to compensate for the index change.
+* $wgDeferredUpdateList is now deprecated, you should use DeferredUpdates::addUpdate()
+ instead.
+* $wgCanonicalLanguageLinks has been removed. Per Google recommendations, we
+ will not send a rel=canonical pointing to a variant-neutral page, however
+ we will send rel=alternate.
+* $wgResourceLoaderLESSFunctions has been deprecated and will be removed in the future.
+* $wgGoToEdit has been removed. Use the SpecialSearchNogomatch hook for similar
+ functionality.
+
+=== New features in 1.24 ===
+* Added new hook WatchlistEditorBeforeFormRender, allowing subscribers to
+ manipulate the list of pages and/or preload lots of data at once.
+* Added new argument &$link in hook WatchlistEditorBuildRemoveLine, allowing the
+ link to the title to be changed.
+* Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
+ WhatLinksHere entries.
+* Added a new hook, "ContentGetParserOutput", to customize parser output for
+ a given content object.
+* Deprecated the hook "ShowRawCssJs", use "ContentGetParserOutput" instead.
+* HTMLForm's HTMLTextField now supports the 'url' type.
+* HTMLForm fields may now be dynamically hidden based on the values of other
+ fields in the form.
+* HTMLForm now supports multiple copies of an input field or set of input
+ fields, e.g. the form may request "one or more usernames" without having to
+ have the user enter delimited list of names into a text field.
+* Added a new hook, "SidebarBeforeOutput", to allow to edit the structure of
+ the sidebar just before its display.
+* (bug 49156) Added the mediawiki.cookie ResourceLoader module, which wraps
+ jquery.cookie so that getting/setting a cookie is syntactically and
+ functionally similar to using the WebRequest::getCookie() and
+ WebResponse::setcookie() methods.
+* (bug 44740) jQuery upgraded from 1.8.3 to 1.11.1. A new configuration option,
+ $wgIncludejQueryMigrate, also loads the jQuery Migrate hack to let extensions
+ and gadgets use the long-deprecated functions that were removed in jQuery 1.9.
+ This option is turned off by default, and will be removed in MediaWiki 1.25.
+* (bug 47076) jQuery UI upgraded from 1.8.24 to 1.9.2.
+* Changes to content typography (fonts, etc.). See
+ https://www.mediawiki.org/wiki/Typography_refresh for further information.
+* WikitextContent will now render redirects with the expected "redirect"
+ header, rather than as an ordered list. Code calling Article::viewRedirect
+ can probably be changed to no longer special-case redirects.
+* Header font set to a serif font stack. See
+ https://www.mediawiki.org/wiki/Typography_refresh for further information.
+* (bug 65567) Added a new hook, "BeforeHttpsRedirect", to allow cancellation of
+ the HTTP to HTTPS redirect due to forceHTTPS cookie, userRequires, etc. This
+ is only for page views, since this hook doesn't affect UserLogin, OAuth,
+ CentralAuth, etc. ATTENTION: This hook is likely to be removed soon due to
+ overall design of the system.
+* (bug 17367) It is now possible to add pages to your watchlist from
+ Special:UnwatchedPages without reloading the special page.
+* New methods setVolatile and isVolatile are added to PPFrame, so that
+ extensions such as Cite.php can mark that their output is volatile and
+ shouldn't be cached.
+* (bug 52817) Advanced search options are now saved on the search page itself,
+ rather than in a dedicated pane in the preferences panel.
+* (bug 44591) The dropdown actions menu (little triangle next to page tabs) in
+ the Vector skin has gained a label that should make it more discoverable.
+* MWCryptHKDF added for fast, cryptographically secure random number generation
+ that won't deplete openssl's entropy pool.
+* ResourceLoader: File modules can now provide a skip function that uses an
+ inline feature test to bypass loading of the module.
+* (bug 20210) Special pages may now provide autocompletion of their subpage
+ names in search suggestions. Right now the only useful implementation is in
+ Special:Log, but more are to come.
+* Special:MostLinkedTemplates is no longer limited to transclusions from the
+ Template namespace.
+* Skins can now use 'remoteSkinPath' when defining ResourceLoader modules.
+ This works the same as 'remoteExtPath' but is relative to the skins/ folder
+ instead of the extensions/ folder.
+* Added the json2.js polyfill for the ES5 JSON.stringify and JSON.parse methods.
+ Exposed as module "json" with a skip function to optimise loading.
+* Extensions and skins may now use 'namemsg' in $wgExtensionCredits in addition
+ to 'name', to allow for the name to be localizable. 'name' should still be
+ specified for backwards-compatibility and to define the path Special:Version
+ uses to find extension license information.
+* Browser tests are now included to verify basic wiki functionality in developer
+ environments. For details on running tests, see tests/browser/README.mediawiki.
+* Upgrade jStorage to v0.4.10.
+* {{!}} is now a magic word that produces the | character. This removes the need
+ for Template:! for purposes such as passing pipes inside of parameters.
+* (bug 20790) The block log snippet on Special:Contributions and while
+ editing user and user talk pages now works for IP range blocks.
+* (bug 9360) Added ability to change the page language for MediaWiki pages using
+ Special:PageLanguage. All pages are set to wiki language by default.
+ The feature needs to be enabled with $wgPageLanguageUseDB=true and
+ permission needs to be set for 'pagelang'.
+* Upgrade Moment.js to v2.8.3.
+* (bug 67042) Added support for the HTML5 <rtc> tag for East Asian typography.
+* Upgrade Sinon.JS to 1.10.3.
+* Added the es5-shim polyfill for older or non-compliant javascript engines.
+* Upgrade jQuery Cookie to v1.3.1.
+* (bug 20476) Add a "viewsuppressed" user right to be able to view
+ suppressed content but not suppress it ("suppressrevision" right).
+* (bug 66440) The MediaWiki web installer will now allow you to choose the skins
+ to enable (from the ones included in download tarball) and decide which one
+ should be the default.
+* (bug 68085, 68802) Links like [[localInterwikiPrefix:languageCode:pageTitle]],
+ where localInterwikiPrefix is a member of the $wgLocalInterwikis array, will
+ no longer be displayed in the sidebar when $wgInterwikiMagic is true. In a
+ similar way, links like [[localInterwikiPrefix:File:Image.png]] and
+ [[localInterwikiPrefix:Category:Hello]] will now render as regular links, and
+ will not include the file or add the page to the category.
+* New special page, MyLanguage, to redirect users to subpages with localised
+ versions of a page. (Integrated from Extension:Translate)
+* MediaWiki now supports multiple password types, including bcrypt and PBKDF2.
+ The default type can be changed with $wgPasswordDefault and the type
+ configurations can be changed with $wgPasswordConfig.
+* Skins can now define custom styles for default ResourceLoader modules using
+ the $wgResourceModuleSkinStyles global. See the Vector skin for examples.
+* (bug 4488) There is now a preference to watch pages where the user has
+ rollbacked an edit by default.
+* (bug 15484) Users will now be redirected to the login page when they need to
+ log in, rather than being shown a page asking them to log in and having to click
+ another link to actually get to the login page.
+* A JsonContent and JsonContentHandler were added for extensions to extend.
+* (bug 35045) Redirects to sections will now update the URL in browser's address
+ bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]],
+ the user will now see "Animals#Dog" in their browser instead of "Dog#Dog".
+* API token handling has been rewritten. Any API module using tokens will need
+ to be updated. See the entry below under "Action API internal changes".
+* Added HTMLAutoCompleteSelectField.
+* Added a new hook, "SkinPreloadExistence", to allow extensions to add titles to
+ link existence cache before the page is rendered.
+* Config::set() was moved to its own interface, MutableConfig. GlobalVarConfig::set()
+ is now deprecated, does not implement MutableConfig.
+* A MutableConfig named HashConfig was added, that stores an array of configuration
settings.
-
-== MediaWiki 1.23.3 ==
-
-This is a maintenance release of the MediaWiki 1.23 branch.
-
-=== Changes since 1.23.2 ===
-
-* (bug 68501) Correctly handle incorrect namespace in cleanupTitles.php.
-* (bug 64970) Fix support for blobs on DatabaseOracle::update.
-* (bug 66574) Display MediaWiki:Loginprompt on the login page.
+* (bug 69418) A MultiConfig implementation was added that supports fallback
+ to multiple Config instances.
+* Update CSSJanus to v1.1.0.
+* Added FormatJson::parse() returning status with result or localized error message
+* Added DeletedContribsPager::reallyDoQuery hook allowing extensions to data to
+ Special:DeletedContributions
+* Added DeletedContributionsLineEnding hook allowing extensions to format
+ Special:DeletedContributions lines
+
+=== Bug fixes in 1.24 ===
+* (bug 50572) MediaWiki:Blockip should support gender
+* (bug 49116) Footer copyright notice is now always displayed in user language
+ rather than content language (same as copyright notice for editing interface).
+* (bug 62258) A bug was fixed in File::getUnscaledThumb when a height
+ restriction was present in the parameters. Images with both the "frame"
+ option and a size specification set will now always ignore the provided
+ size and display an unscaled image, as the documentation has always
+ claimed it would.
+* (bug 39035) Improved Vector skin performance by removing collapsibleNav,
+ which used to collapse some sidebar elements by default.
+ This removes -list id suffixes like p-lang-list: instead of using things like
+ #p-lang-list, you can do #p-lang .body ul.
+* (bug 890) Links in Special:RecentChanges and Special:Watchlist no longer
+ follow redirects to their target pages.
+* Parser now dies early if called recursively, instead of producing subtle bugs.
+* (bug 14323) Redirect pages, when viewed with redirect=no, no longer hide the
+ remaining page content.
+* (bug 52587) Maintenance script deleteBatch.php no longer follows redirects
+ in the file namespace and delete the file on the target page. It will still
+ however delete the redirect page.
+* (bug 22683) {{msgnw:}} and other uses of PPFrame::RECOVER_ORIG will correctly
+ recover the original code of extension tags.
+* (bug 65757) MSSQL: Update script drops unnamed constraints to be prepared
+ for future updates. Because it's doing so heuristically, it may fail or drop
+ wrong constraints.
* (bug 67870) wfShellExec() cuts off stdout at multiples of 8192 bytes.
-* (bug 60629) Handle invalid language code gracefully in
- Language::fetchLanguageNames.
-* (bug 62017) Restore the number of rows shown on Special:Watchlist.
-* Check for boolean false result from database query in SqlBagOStuff.
-
-== MediaWiki 1.23.2 ==
-
-This is a security and maintenance release of the MediaWiki 1.23 branch.
+* $wgRunJobsAsync now works with private wikis (e.g. read requires login).
+* (bugs 57238, 65206) Blank pages can now be directly created.
+* (bug 69789) Title::getContentModel() now loads from the database when
+ necessary instead of incorrectly returning the default content model.
+* (bug 69249) wfBaseConvert() now works around PHP Bug #50175 when using GMP.
+* (bug 57909) URLs in the externallinks table will no longer have certain
+ characters decoded in the query string.
+* (bug 67368) LESS mixins like .background-image() correctly flip image
+ references for RTL stylesheets now.
+
+=== Action API changes in 1.24 ===
+* action=parse API now supports prop=modules, which provides the list of
+ ResourceLoader modules that should be used to enhance the parsed content.
+* action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel"
+ field which is true if protocol-relative urls can be used to access
+ a particular interwiki map entry.
+* list=logevents now provides logpage, which is the page ID from the
+ logging table, if ids are requested and the user has the permissions.
+* action=edit now requires that appendtext, prependtext, or section=new be used
+ when using the 'redirect' parameter, to prevent clients accidentally
+ overwriting the target page with the content of the redirect.
+* list=logevents will now return an error if both letitle and leprefix are
+ specified.
+* list=logevents has a new parameter, lenamespace, to allow filtering by
+ namespace.
+* action=expandtemplates has a new parameter, prop, and a new output format.
+ The old format is still used if prop isn't provided, but this is deprecated.
+* meta=userinfo can now return the count of unread pages on the watchlist.
+* list=watchlist can now filter by unread status.
+* The deprecated action=parse&prop=languageshtml has been removed.
+* (bug 48071) action=setnotificationtimestamp no longer throws PHP or database
+ errors when no pages are given.
+* (bug 60734) Actions that use ApiPageSet (e.g. purge, watch,
+ setnotificationtimestamp) will now include continuation information when
+ using a generator.
+* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
+ limited use and are generally inaccurate, unmaintained, and impossible to
+ properly maintain.
+* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
+* action=paraminfo now indicates when a parameter is specifying a submodule.
+* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
+ parallelism with prop=langlinks.
+* All tokens should be fetched from action=query&meta=tokens; all other methods
+ of fetching tokens are deprecated. The value needed for meta=tokens's 'type'
+ parameter for each module is documented in the action=help output and is
+ returned from action=paraminfo.
+* New action ClearHasMsg that can be used to clear HasMsg flag.
+* The cmstartsortkey and cmendsortkey parameters to list=categorymembers are
+ deprecated in favor of cmstarthexsortkey and cmendhexsortkey.
+* (bug 63326) Add blockedtimestamp field to output of blockinfo property for
+ the list=allusers and list=users modules.
+* prop=imageinfo no longer requires iiurlwidth to be set when using iiurlparam.
+* Added prop=linkshere, prop=fileusage, and prop=transcludedin, which are
+ roughly equivalent to list=backlinks, list=imageusage, and list=embeddedin
+ but can work on a list of titles (including titles from a generator).
+* prop=redirects can now filter returned redirects by namespace.
+
+=== Action API internal changes in 1.24 ===
+* Methods for handling continuation are added to ApiResult, so actions other
+ than query that use generators can easily support continuation.
+* $wgAPIModules (and the related $wgAPIFormatModules, $wgAPIMetaModules,
+ $wgAPIPropModules, and $wgAPIListModules settings) now allow API modules
+ to be specified using a "module spec" array instead of a plain class name.
+ A "module spec" is an associative array containing at least the 'class' key
+ for the module's class, and optionally a 'factory' key for the factory function
+ to use for the module. This is intended for extensions that want control over
+ the instantiation of their API modules, to allow for proper dependency
+ injection.
+* A new param type 'submodule' is available. Parameters of this type will take
+ the list of valid values from the module's ApiModuleManager for the group
+ corresponding to the parameter name.
+* The 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks are no longer used.
+* API token handling has been rewritten. Any API module using tokens will need
+ to be updated:
+ * ApiBase::needsToken now returns a token type instead of boolean true when a
+ token is needed. Returning true will throw an exception. See documentation
+ of that method for details.
+ * Information for the 'token' parameter is automatically set by ApiBase
+ getFinalParams and getFinalParamDescription.
+ * ApiBase::getTokenSalt has been removed.
+ * The hooks APIQueryInfoTokens, APIQueryRevisionsTokens,
+ APIQueryRecentChangesTokens, APIQueryUsersTokens, and
+ ApiTokensGetTokenTypes are deprecated, but are still called to support
+ backwards-compatible token access.
+* ApiBase::validateLimit and ApiBase::validateTimestamp are now protected.
+* ApiQueryRedirects was removed; prop=redirects is now implemented by
+ ApiQueryBacklinksProp along with the newly-added prop modules.
+* The following methods have been deprecated and may be removed in a future
+ release:
+ * ApiBase::getResultProperties
+ * ApiBase::getFinalResultProperties
+ * ApiBase::addTokenProperties
+ * ApiBase::getRequireOnlyOneParameterErrorMessages
+ * ApiBase::getRequireMaxOneParameterErrorMessages
+ * ApiBase::getRequireAtLeastOneParameterErrorMessages
+ * ApiBase::getTitleOrPageIdErrorMessage
+ * ApiBase::getPossibleErrors
+ * ApiBase::getFinalPossibleErrors
+ * ApiBase::parseErrors
+ * ApiQuery::setGeneratorContinue
+ * ApiQueryBase::checkRowCount
+ * ApiQueryBase::titleToKey
+ * ApiQueryBase::keyToTitle
+ * ApiQueryBase::keyPartToTitle
+ * ApiQueryInfo::getTokenFunctions
+ * ApiQueryInfo::resetTokenCache
+ * ApiQueryInfo::getEditToken
+ * ApiQueryInfo::getDeleteToken
+ * ApiQueryInfo::getProtectToken
+ * ApiQueryInfo::getMoveToken
+ * ApiQueryInfo::getBlockToken
+ * ApiQueryInfo::getUnblockToken
+ * ApiQueryInfo::getEmailToken
+ * ApiQueryInfo::getImportToken
+ * ApiQueryInfo::getWatchToken
+ * ApiQueryInfo::getOptionsToken
+ * ApiQueryRecentChanges::getTokenFunctions
+ * ApiQueryRecentChanges::getPatrolToken
+ * ApiQueryRevisions::getTokenFunctions
+ * ApiQueryRevisions::getRollbackToken
+ * ApiQueryUsers::getTokenFunctions
+ * ApiQueryUsers::getUserrightsToken
+* The following classes have been deprecated and may be removed in a future
+ release:
+ * ApiFormatDbg
+ * ApiFormatDump
+ * ApiFormatTxt
+ * ApiFormatWddx
+ * ApiFormatYaml
+ * ApiTokens
+* The following class constants have been deprecated and may be removed in a
+ future release:
+ * ApiBase::PROP_ROOT
+ * ApiBase::PROP_LIST
+ * ApiBase::PROP_TYPE
+ * ApiBase::PROP_NULLABLE
+
+=== Languages updated in 1.24 ===
-=== Changes since 1.23.1 ===
+MediaWiki supports over 350 languages. Many localisations are updated
+regularly. Below only new and removed languages are listed, as well as
+changes to languages because of Bugzilla reports.
-* (bug 68187) SECURITY: Prepend jsonp callback with comment.
-* (bug 66608) SECURITY: Fix for XSS issue in bug 66608: Generate the URL used
- for loading a new page in Javascript,instead of relying on the URL in the link
- that has been clicked.
-* (bug 65778) SECURITY: Copy prevent-clickjacking between OutputPage and
- ParserOutput.
-* (bug 68313) Preferences: Turn stubthreshold back into a combo box.
-* (bug 65214) Fix initSiteStats.php maintenance script.
-* (bug 67594) Special:ActiveUsers: Fix to work with PostgreSQL.
+=== Other changes in 1.24 ===
+* The deprecated jquery.delayedBind ResourceLoader module was removed.
+* The deprecated function mw.util.toggleToc was removed.
+* The Special:Search hooks SpecialSearchGo and SpecialSearchResultsAppend
+ were removed as they were unused.
+* (bug 65477) User::pingLimiter() now has an additional profile point varying
+ by action being used.
+* mediawiki.util.$content no longer supports old versions of the Vector,
+ Monobook, Modern and CologneBlue skins that don't yet implement the "mw-body"
+ and/or "mw-body-primary" class name in their html.
+* Added pp_sortkey column to page_props table, so pages can be efficiently
+ queried and sorted by property value (bug 58032).
+ See $wgPagePropsHaveSortkey if you want to postpone the schema change.
+* BREAKING CHANGE: All four built-in MediaWiki skins (Vector, MonoBook, Modern
+ and Cologne Blue) were moved out of MediaWiki core to their own respective
+ repositories. They will be installed with the release tarball, but you must
+ install them separately if installing MediaWiki from source code. A warning
+ message displayed until you do it should guide you through the process. See
+ also <https://www.mediawiki.org/wiki/Manual:Skin_configuration>.
+* BREAKING CHANGE: Skins built for MediaWiki 1.15 and earlier that do not use
+ the "headelement" template key are no longer supported. Setting
+ $useHeadElement = false; is no longer supported and will not cause old keys
+ like "headlinks", "skinnameclass", etc. to be defined.
+* BREAKING CHANGE: The files commonElements.css, commonContent.css and
+ commonInterface.css (in skins/common/) have been removed. Skins may no longer
+ rely on their presence and include them in their style modules. ResourceLoader
+ modules introduced in MediaWiki 1.23 should be loaded instead:
+ - skins/common/commonElements.css → 'mediawiki.skinning.elements' module
+ - skins/common/commonContent.css → 'mediawiki.skinning.content' module
+ - skins/common/commonInterface.css → 'mediawiki.skinning.interface' module
+* The deprecated 'SpecialVersionExtensionTypes' hook was removed.
+* (bug 63891) Add 'X-Robots-Tag: noindex' header in action=render pages.
+* SpecialPage no longer supports the syntax for invoking wfSpecial*() functions.
+ Special pages should subclass SpecialPage and implement the execute() method.
+* (bug 63755) The deprecated constants RC_MOVE and RC_MOVE_OVER_REDIRECT were
+ removed.
+* Special:MostLinkedTemplates has been renamed to Special:MostTranscludedPages.
+* The skin autodiscovery mechanism has been deprecated and will be removed in
+ MediaWiki 1.25. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery
+ for migration guide for creators and users of custom skins that relied on it.
+* ResourceLoaderFileModule#getAllStyleFiles now returns all style files and all
+ skin style files used by the module.
+* Removed getLang() from IContextSource and subclasses. (deprecated since 1.19)
+* Removed setLang() from subclasses of IContextSource. (deprecated since 1.19)
+* Removed WebRequest::escapeAppendQuery(). (deprecated since 1.20)
+* Removed info(), purge(), revert() and rollback() from the Article class; they
+ have since become subclasses of the Action class. (deprecated since 1.19)
+* SearchEngineReplacePrefixesComplete hook was removed.
+* The "jquery.json" module has been deprecated. Use the "json" module instead.
+* Removed HTMLForm::addJS(). (deprecated since 1.18)
+* Removed LogEventsList::showHeader(). (deprecated since 1.19)
+* Removed ImageGalleryBase::useSkin(). (deprecated since 1.18)
+* Removed DatabaseMysqlBase::getLagFromProcesslist(). (deprecated since 1.19)
+* Removed LoadBalancer::closeConnecton(). (deprecated since 1.18)
+* Removed ApiBase::createContext(). (deprecated since 1.19)
+* BREAKING CHANGE: The undocumented Special{$this->getName()}BeforeFormDisplay
+ set of hooks has been removed and replaced by a single new hook
+ SpecialPageBeforeFormDisplay.
+* (bug 65781) Removed block warning on included {{Special:Contributions}}
+* Removed Skin::makeGlobalVariablesScript(). (deprecated since 1.19)
+* Removed MWNamespace::isMain(). (deprecated since 1.19)
+* Removed Preferences::loadOldSearchNs(). (deprecated since 1.19)
+* Removed OutputPage::getStatusMessage(). (deprecated since 1.18)
+* Removed OutputPage::isUserJsAllowed(). (deprecated since 1.18)
+* Removed Title::updateTitleProtection(). (deprecated since 1.19)
+* Removed ParserOptions::setSkin(). (deprecated since 1.19)
+* Removed Title::escapeCanonicalURL(). (deprecated since 1.19)
+* Removed Title::escapeLocalURL(). (deprecated since 1.19)
+* Removed Title::escapeFullURL(). (deprecated since 1.19)
+* Removed User::isValidEmailAddr(). (deprecated since 1.18)
+* Removed Title::getEscapedText(). (deprecated since 1.19)
+* Removed Language::getFallbackLanguageCode(). (deprecated since 1.19)
+* Removed WikiPage::isBigDeletion(). (deprecated since 1.19)
+* Removed MWInit class which contained functions related to a now discontinued
+ PHP compiler called hphpc. (deprecated since 1.22)
+* ApiResult::enableSizeCheck() and disableSizeCheck() are now obsolete.
+* Removed ResourceLoaderGetStartupModules hook. (deprecated since 1.23)
+* Removed getFormFields(), onSubmit() and onSuccess() from FormlessAction, as
+ these were meant specifically for FormAction instead.
+* Removed Action::execute().
+* Removed AjaxAddScript which has been obsolete since ResourceLoader and
+ is unused by any modern extension.
+* Removed maintenance/nextJobDB.php; no longer in use.
+* Removed global function wfViewPrevNext(). (deprecated since 1.19)
+* Removed global function xmlsafe() from Export.php. (moved to OAIRepo extension)
+* Removed Title::userCanRead(). (deprecated since 1.19)
+* Removed maintenance script importTextFile.php. Use edit.php script instead.
+* A _from_namespace field has been added to the templatelinks, pagelinks,
+ and filelinks tables. Run update.php to apply this change to the schema.
+* Removed File::sha1Base36(). (deprecated since 1.19)
+* Removed File::getPropsFromPath(). (deprecated since 1.19)
+* Removed functions blockedPage(), noCreatePermission(), readOnlyPage() and
+ userNotLoggedInPage() from EditPage.php. (deprecated since 1.19)
+* Removed functions getContent(), getPreloadedText(), mergeChangesInto() and
+ setPreloadedText() from EditPage.php. (deprecated since 1.21)
+* Removed global functions wfArrayLookup(), wfArrayMerge(), wfDebugDieBacktrace()
+ and wfTime(). (deprecated since 1.22)
+* Browser support for Internet Explorer 6 and 7 lowered from Grade A to Grade C,
+ meaning that JavaScript is no longer executed in these browser versions.
+* Browser support for Opera 11 lowered from Grade A to Grade C.
+* Removed IEFixes module which existed purely to provide support for MSIE versions
+ below 7 (conditionally loaded only for those browsers).
+* Deprecated SpecialPageFactory::getList() in favor of
+ SpecialPageFactory::getNames()
+* Action::checkCanExecute() no longer has a return value.
+* Removed cleanupForIRC(), loadFromCurRow(), newFromCurRow(), notifyRC2UDP()
+ and sendToUDP() from RecentChange.php. (deprecated since 1.22)
+* Removed EnhancedChangesList::arrow(), sideArrow(), downArrow(), spacerArrow().
+* Removed Xml::namespaceSelector(). (deprecated since 1.19)
+* Removed WikiPage::estimateRevisionCount(). (deprecated since 1.19)
+* MYSQL: Enum item added to "major MIME type" columns.
+ Running update.php on MySQL < v5.1 may result in heavy processing.
+* RSS and Atom feeds generated by MediaWiki no longer include a fallback
+ stylesheet. It was ignored by most browsers these days anyway.
+* SpecialSearchNoResults hook has been removed. SpecialSearchResults is now
+ called unconditionally.
+* TablePager::getBody() is now 'final' and can't be overridden in subclasses.
+* TablePager::getBody() is deprecated, use getBodyOutput() or getFullOutput().
+* Added $outputPage parameter to the SkinTemplateGetLanguageLink hook.
+* log_page for move log entries store the original page ID, rather than that
+ of the new redirect page. This is not retroactive.
+* LCStoreAccel was removed. $wgLocalisationCacheConf can no longer be set to
+ use this store class.
+* Html::infoBox() no longer accepts paths relative to skins/common/images/.
+* Deprecated defunct Skin::getCommonStylePath().
+* Some extensions had their ResourceLoader modules depend on the "mediawiki"
+ and "jquery" modules. In the past, this behavior was undefined, now it will
+ throw an error.
+* Removed BagOStuff::replace(). (deprecated since 1.23)
+* In Linker.php, link(), linkText() and makeBrokenImageLinkObj() now display
+ warnings if their first parameter is not a Title object. Also makeImageLink()
+ now requires a Parser as its first parameter.
+* (bug 67368) LESS functions embed() and embeddable(), added in MediaWiki 1.23
+ and broken by design, have been removed. Use appropriate LESS mixins instead.
+* Removed cssjanus.py from maintenance directory as it was unused.
+* Removed maintenance/purgeOldText.inc and the PurgeRedundantText() function
+ it contained (superseded by Maintenance::purgeRedundantText() in 1.16).
+ The purgeOldText.php maintenance script has been retained.
+* PHPUnit tests can be found by directory discovery, by adding the directory
+ path from your UnitTestsList callback. Older versions of MediaWiki core will
+ barf at this usage.
-== MediaWiki 1.23.1 ==
+==== Renamed classes ====
+* CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
+* CLDRPluralRuleConverter_Fragment to CLDRPluralRuleConverterFragment
+* CLDRPluralRuleConverter_Operator to CLDRPluralRuleConverterOperator
+* CLDRPluralRuleEvaluator_Range to CLDRPluralRuleEvaluatorRange
+* CSSJanus_Tokenizer to CSSJanusTokenizer
+* MediaWiki_I18N to MediaWikiI18N
+* Parser_DiffTest to ParserDiffTest
+* RevDel_ArchiveItem to RevDelArchiveItem
+* RevDel_ArchiveList to RevDelArchiveList
+* RevDel_ArchivedFileItem to RevDelArchivedFileItem
+* RevDel_ArchivedFileList to RevDelArchivedFileList
+* RevDel_ArchivedRevisionItem to RevDelArchivedRevisionItem
+* RevDel_FileItem to RevDelFileItem
+* RevDel_FileList to RevDelFileList
+* RevDel_Item to RevDelItem
+* RevDel_List to RevDelList
+* RevDel_LogItem to RevDelLogItem
+* RevDel_LogList to RevDelLogList
+* RevDel_RevisionItem to RevDelRevisionItem
+* RevDel_RevisionList to RevDelRevisionList
+* WebInstaller_Complete to WebInstallerComplete
+* WebInstaller_Copying to WebInstallerCopying
+* WebInstaller_DBConnect to WebInstallerDBConnect
+* WebInstaller_DBSettings to WebInstallerDBSettings
+* WebInstaller_Document to WebInstallerDocument
+* WebInstaller_ExistingWiki to WebInstallerExistingWiki
+* WebInstaller_Install to WebInstallerInstall
+* WebInstaller_Language to WebInstallerLanguage
+* WebInstaller_Name to WebInstallerName
+* WebInstaller_Options to WebInstallerOptions
+* WebInstaller_Readme to WebInstallerReadme
+* WebInstaller_ReleaseNotes to WebInstallerReleaseNotes
+* WebInstaller_Restart to WebInstallerRestart
+* WebInstaller_Upgrade to WebInstallerUpgrade
+* WebInstaller_UpgradeDoc to WebInstallerUpgradeDoc
+* WebInstaller_Welcome to WebInstallerWelcome
-This is a security and maintenance release of the MediaWiki 1.23 branch.
+==== Removed classes ====
+* IPBlockForm - Use SpecialBlock directly
+* WatchlistEditor - Use SpecialEditWatchlist directly
+* FormatExif - Use FormatMetadata directly
+* RevertFileAction - Use RevertAction directly
+* HistoryPage - Use HistoryAction directly
+* RawPage - Use RawAction directly
+* StubContLang - Use Language::factory() instead
+* XMLReader2 - Use XMLReader directly
+* ResourceLoaderLESSFunctions - No longer in use, not intended for public usage
+
+==== Removed files ====
+The skins/common/ directory, previously containing some assets intended to be
+used by skins and a number of legacy styles and scripts, has been removed. Its
+contents have been deleted or relocated into the resources/ directory. Full list
+of files that are no longer available follows.
+
+* skins/common/ajax.js
+* skins/common/commonContent.css
+* skins/common/commonElements.css
+* skins/common/commonInterface.css
+* skins/common/commonPrint.css
+* skins/common/config-cc.css
+* skins/common/config.css
+* skins/common/config.js
+* skins/common/feed.css
+* skins/common/IEFixes.js
+* skins/common/oldshared.css
+* skins/common/protect.js
+* skins/common/shared.css
+* skins/common/upload.js
+* skins/common/wikibits.js
+* skins/common/images/add.png
+* skins/common/images/ajax-loader.gif
+* skins/common/images/arrow_disabled_first_25.png
+* skins/common/images/arrow_disabled_last_25.png
+* skins/common/images/arrow_disabled_left_25.png
+* skins/common/images/arrow_disabled_right_25.png
+* skins/common/images/arrow_first_25.png
+* skins/common/images/arrow_last_25.png
+* skins/common/images/arrow_left_25.png
+* skins/common/images/arrow_right_25.png
+* skins/common/images/Arr_.png
+* skins/common/images/Arr_d.png
+* skins/common/images/Arr_l.png
+* skins/common/images/Arr_r.png
+* skins/common/images/Arr_u.png
+* skins/common/images/bullet.gif
+* skins/common/images/button_bold.png
+* skins/common/images/button_extlink.png
+* skins/common/images/button_headline.png
+* skins/common/images/button_hr.png
+* skins/common/images/button_image.png
+* skins/common/images/button_italic.png
+* skins/common/images/button_link.png
+* skins/common/images/button_media.png
+* skins/common/images/button_nowiki.png
+* skins/common/images/button_sig.png
+* skins/common/images/button_template.png
+* skins/common/images/cc-0.png
+* skins/common/images/cc-by-nc-sa.png
+* skins/common/images/cc-by-sa.png
+* skins/common/images/cc-by.png
+* skins/common/images/Checker-16x16.png
+* skins/common/images/closewindow.png
+* skins/common/images/closewindow19x19.png
+* skins/common/images/critical-32.png
+* skins/common/images/diffunderline.gif
+* skins/common/images/download-32.png
+* skins/common/images/feed-icon.png
+* skins/common/images/feed-icon.svg
+* skins/common/images/gnu-fdl.png
+* skins/common/images/help-question-hover.gif
+* skins/common/images/help-question.gif
+* skins/common/images/info-32.png
+* skins/common/images/link_icon.gif
+* skins/common/images/magnify-clip-rtl.png
+* skins/common/images/magnify-clip.png
+* skins/common/images/mediawiki.png
+* skins/common/images/nextredirectltr.png
+* skins/common/images/nextredirectrtl.png
+* skins/common/images/poweredby_mediawiki_88x31.png
+* skins/common/images/public-domain.png
+* skins/common/images/question-small.png
+* skins/common/images/question.svg
+* skins/common/images/redirectltr.png
+* skins/common/images/redirectrtl.png
+* skins/common/images/remove.png
+* skins/common/images/spinner.gif
+* skins/common/images/tick-32.png
+* skins/common/images/tipsy-arrow.gif
+* skins/common/images/tooltip_icon.png
+* skins/common/images/warning-32.png
+* skins/common/images/wiki.png
+* skins/common/images/Zoom_sans.gif
+* skins/common/images/ar/button_bold.png
+* skins/common/images/ar/button_headline.png
+* skins/common/images/ar/button_italic.png
+* skins/common/images/ar/button_link.png
+* skins/common/images/ar/button_nowiki.png
+* skins/common/images/be-tarask/button_bold.png
+* skins/common/images/be-tarask/button_italic.png
+* skins/common/images/be-tarask/button_link.png
+* skins/common/images/cyrl/button_bold.png
+* skins/common/images/cyrl/button_italic.png
+* skins/common/images/cyrl/button_link.png
+* skins/common/images/de/button_bold.png
+* skins/common/images/de/button_italic.png
+* skins/common/images/fa/button_bold.png
+* skins/common/images/fa/button_headline.png
+* skins/common/images/fa/button_italic.png
+* skins/common/images/fa/button_link.png
+* skins/common/images/fa/button_nowiki.png
+* skins/common/images/icons/fileicon-c.png
+* skins/common/images/icons/fileicon-cpp.png
+* skins/common/images/icons/fileicon-deb.png
+* skins/common/images/icons/fileicon-djvu.png
+* skins/common/images/icons/fileicon-djvu.xcf
+* skins/common/images/icons/fileicon-dvi.png
+* skins/common/images/icons/fileicon-exe.png
+* skins/common/images/icons/fileicon-h.png
+* skins/common/images/icons/fileicon-html.png
+* skins/common/images/icons/fileicon-iso.png
+* skins/common/images/icons/fileicon-java.png
+* skins/common/images/icons/fileicon-mid.png
+* skins/common/images/icons/fileicon-mov.png
+* skins/common/images/icons/fileicon-o.png
+* skins/common/images/icons/fileicon-ogg.png
+* skins/common/images/icons/fileicon-ogg.xcf
+* skins/common/images/icons/fileicon-pdf.png
+* skins/common/images/icons/fileicon-ps.png
+* skins/common/images/icons/fileicon-psd.png
+* skins/common/images/icons/fileicon-rm.png
+* skins/common/images/icons/fileicon-rpm.png
+* skins/common/images/icons/fileicon-svg.png
+* skins/common/images/icons/fileicon-tar.png
+* skins/common/images/icons/fileicon-tex.png
+* skins/common/images/icons/fileicon-ttf.png
+* skins/common/images/icons/fileicon-txt.png
+* skins/common/images/icons/fileicon.png
+* skins/common/images/ksh/button_S_italic.png
-=== Changes since 1.23.0 ===
-* (bug 65839) SECURITY: Prevent external resources in SVG files.
-* (bug 67025) Special:Watchlist: Don't try to render empty row.
-* (bug 66922) Don't allow some E_NOTICE messages to end up in the LocalSettings.php.
-* (bug 66467) FileBackend: Avoid using popen() when "parallelize" is disabled.
-* (bug 66428) MimeMagic: Don't seek before BOF. This has weird side effects
- like only extracting the tail of the file partially or not at all.
-* (bug 66182) Removed -x flag on some php files.
+== MediaWiki 1.23 ==
=== Configuration changes in 1.23 ===
* (bug 13250) Restored method for clearing a watchlist in web UI
@@ -191,7 +803,7 @@ This is a security and maintenance release of the MediaWiki 1.23 branch.
* Added jquery.throttle-debounce ResourceLoader module to limit the number of
callbacks for frequently occurring events.
* Special:ProtectedPages shows now a table. The timestamp, the reason and
- the protecting user is also shown.
+ the protecting user are also shown.
* Added experimental support for using Microsoft SQL Server as the database
backend.
** Added new Microsoft SQL Server-specific configuration variable
@@ -201,7 +813,7 @@ This is a security and maintenance release of the MediaWiki 1.23 branch.
* HTMLForm 'select', 'selectandother', 'selectorother', 'multiselect', and
'radio' fields can now use message keys as labels via the 'options-messages'
parameter, which overrides the 'options' parameter.
-* Admins can expire users users passwords manually, or on a schedule using the
+* Admins can expire users passwords manually, or on a schedule using the
$wgPasswordExpirationDays configuration setting.
* Add new hook SendWatchlistEmailNotification, this will be used to determine
whether to send a watchlist email notification.
@@ -386,7 +998,7 @@ changes to languages because of Bugzilla reports.
* (bug 52810) Preference "Justify paragraphs" was removed.
* OutputPage::showErrorPage raises a notice if arguments are incoherent.
* Thumbnails that keep failing to render in thumb.php will be rate-limited
- againt further render attempts for 1 hour. $wgAttemptFailureEpoch can be
+ against further render attempts for 1 hour. $wgAttemptFailureEpoch can be
altered to reset all rate-limited thumbnails at once.
* (bug 56572) Builds of the OOjs and OOjs UI libraries are now available.
* mw.loader.go and mw.loader.version have been removed.
@@ -681,7 +1293,7 @@ This is a security and maintenance release of the MediaWiki 1.22 branch.
HTML output is now exclusively HTML5.
* $wgDBOracleDRCP added. True enables persistent connection with DRCP on Oracle.
* $wgLogAutopatrol added to allow disabling logging of autopatrol edits in the logging table.
- default for $wgLogAutopatrol is true.
+ Default for $wgLogAutopatrol is true.
* The 'edit' right no longer allows for editing a user's own CSS and JS.
* New rights 'editmyusercss', 'editmyuserjs', 'viewmywatchlist',
'editmywatchlist', 'viewmyprivateinfo', 'editmyprivateinfo', and
@@ -781,7 +1393,7 @@ This is a security and maintenance release of the MediaWiki 1.22 branch.
* $wgCascadingRestrictionLevels was added, allowing one to specify restriction levels
which can be cascading (previously 'sysop' was hard-coded as the only one).
* XHTML5 support has been improved. If you set $wgMimeType = 'application/xhtml+xml'
- MediaWiki will try outputting markup acording to XHTML5 rules.
+ MediaWiki will try outputting markup according to XHTML5 rules.
* Altered hook 'ProtectionForm::save', adding the reason page protection is
changed as third parameter.
* New hook 'TitleSquidURLs' for manipulating the list of URLs to be purged from
@@ -876,7 +1488,7 @@ This is a security and maintenance release of the MediaWiki 1.22 branch.
* Make thumb.php give HTTP redirects for file redirects
* (bug 30607) Special:ListFiles can now show old versions of files. Additionally
Special:AllMyUploads was introduced so the user can get a list of all things
- they have ever uploaded, even if it was subsequently overriden.
+ they have ever uploaded, even if it was subsequently overridden.
* Introduced Special:MyFiles and Special:AllMyFiles as an alias for Special:MyUploads
and Special:AllMyUploads respectively.
* IPv6 addresses in X-Forwarded-For headers are now normalised before checking
@@ -1171,7 +1783,7 @@ changes to languages because of Bugzilla reports.
The skins/common/wikiprintable.css file no longer exists. Return value of
Skin#commonPrintStylesheet is ignored. Please use the 'mediawiki.legacy.commonPrint'
module instead or base your skin on SkinTemplate.
-* (bug 49629) The hook ExtractThumbParamaters has been deprecated in favour
+* (bug 49629) The hook ExtractThumbParameters has been deprecated in favour
of media handler overriding MediaHandler::parseParamString.
* (bug 46512) The collapsibleNav feature from the Vector extension has been moved
to the Vector skin in core.
@@ -1291,7 +1903,7 @@ This is a maintenance release of the MediaWiki 1.21 branch.
=== New features in 1.21 ===
* (bug 38110) Schema changes (adding or dropping tables, indices and
- fields) can be now be done separately from from other changes that
+ fields) can be now be done separately from other changes that
update.php makes. This is useful in environments that use database
permissions to restrict schema changes but allow the DB user that
MediaWiki normally runs as to perform other changes that update.php
@@ -1832,7 +2444,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
* Added $wgCopyUploadProxy global to define which proxy to use for copy
uploads.
* (bug 40448) mediawiki.legacy.mwsuggest has been replaced with a new module,
- mediawiki.searchSuggest, based on SimpleSeach from Extension:Vector.
+ mediawiki.searchSuggest, based on SimpleSearch from Extension:Vector.
=== Known issues in 1.20.0 ===
These are issues that we're targeting to be fixed in a later release
@@ -1884,7 +2496,7 @@ milestone in Bugzilla.
* (bug 34735) Updated compressOld.php documentation to mention the different
usages of -s and -n parameters depending on compression type.
* (bug 13896) Rendering of devanagari numbers in automatic '#' number lists.
-* (bug 33689) Upgrade to 1.19 on Postgres fails due to incomplete query when.
+* (bug 33689) Upgrade to 1.19 on Postgres fails due to incomplete query when
trying to defer foreign key for externallinks.
* (bug 32748) Printer friendly version of article decode Unicode chars as a
pretty IRI in footer.
@@ -1902,7 +2514,7 @@ milestone in Bugzilla.
* (bug 30410) Removed deprecated $wgFilterCallback and the 'filtered' API error.
* (bug 32604) Some messages needs escaping of wikitext inside username.
* (bug 36537) Rename wfArrayToCGI to wfArrayToCgi for consistency with wfCgiToArray.
-* (bug 25946) The message on the top of Special:RecentChanges is now displayed.
+* (bug 25946) The message on the top of Special:RecentChanges is now displayed
in user language instead of content language.
* (bug 35264) Wrong type used for <ns> in export.xsd
* (bug 24985) Use $wgTmpDirectory as the default temp directory so that people
@@ -2402,8 +3014,8 @@ release and submitting bug reports.
until the second was introduced in 1.17.
* BREAKING CHANGE: Style rules for wikitable are now more specific and prevent
inheritance to nested tables which caused various issues (bug 30485 and bug
- 33434). If your wiki has overriden rules for ".wikitable", please revise them and
- adjust where neccecary. For comparison, use the "table.wikitable" section in
+ 33434). If your wiki has overridden rules for ".wikitable", please revise them and
+ adjust where necessary. For comparison, use the "table.wikitable" section in
skins/common/shared.css as base.
* $wgUploadNavigationUrl is now used for file redlinks if
$wgUploadMissingFileUrl is not set. The former was used for this until the
@@ -2443,7 +3055,7 @@ release and submitting bug reports.
"create account" when the user cannot create an account.
* (bug 31818) 'usercreated' message now supports GENDER.
* (bug 32022) Our phpunit.php script can now be executed from another directory.
-* (bug 26020) Setting $wgEmailConfirmToEdit to true no longer removes diffs.
+* (bug 26020) Setting $wgEmailConfirmToEdit to true no longer removes diffs
from recent changes feeds.
* (bug 30232) add current time to message wlnote on Special:Watchlist.
* (bug 29110) $wgFeedDiffCutoff did not affect new pages.
@@ -2453,7 +3065,7 @@ release and submitting bug reports.
* (bug 32168) Add wfAssembleUrl for use in wfExpandUrl.
* (bug 32168) fixed - wfExpandUrl expands dot segments now.
* (bug 31535) Upload comments now truncated properly, and don't have brackets.
-* (bug 32086) Special:PermanentLink now show an error message when no subpage
+* (bug 32086) Special:PermanentLink now shows an error message when no subpage
was specified.
* (bug 30368) Special:Newpages now shows the new page name for moved pages.
* (bug 1697) The way to search blocked usernames in block log should be clearer.
@@ -2527,7 +3139,8 @@ release and submitting bug reports.
* (bug 28936, bug 5280) Broken or invalid titles can't be removed from watchlist.
* (bug 34600) Older skins using useHeadElement=false were broken in 1.18.
* (bug 34604) [mw.config] wgActionPaths should be an object instead of a numeral
- array.* (bug 12262) Indents and lists are now aligned
+ array.
+* (bug 12262) Indents and lists are now aligned
* (bug 29753) mw.util.tooltipAccessKeyPrefix should be alt-shift for Chrome
on Windows
* (bug 25095) Special:Categories should also include the first relevant item
@@ -2551,7 +3164,7 @@ release and submitting bug reports.
address blocks for list=blocks.
* (bug 30591) Add support to only return keys in ApiAllMessages.
* The API now respects $wgShowHostnames and won't share the hostname in
- severedby if it's set to false.
+ servedby if it's set to false.
* wlexcludeuser parameter added to ApiFeedWatchlist.
* (bug 7304) Links on redirect pages no longer cause the redirect page to show
up as a redirect to the linked page on Special:Whatlinkshere.
@@ -2669,8 +3282,8 @@ This is a maintenance release of the MediaWiki 1.18 branch.
This is a maintenance and security release of the MediaWiki 1.18 branch.
=== Changes since 1.18.1 ===
-* (bug 33686) could not get a list of contributor for an article when using
- a SQLite database.
+* (bug 33686) could not get a list of contributors for an article when using
+ a SQLite database.
* (Bug 33865) Exception thrown in action=parse when attempting to use the title
parameter without setting the text parameter.
* UserMailer could potentially throw a fatal error when a MailAddress object had
@@ -2858,9 +3471,9 @@ Selected changes since MediaWiki 1.17 that may be of interest:
=== New features in 1.18 ===
* BREAKING CHANGE: action=watch / action=unwatch now requires a token.
-* BREAKING CHANGE: Article class hierarchy split into WikiPage (backend).
+* BREAKING CHANGE: Article class hierarchy split into WikiPage (backend)
and Article (frontend) hierarchies. Several hooks now pass a WikiPage object instead
- of an Article object. These hooks all use an $article paramater as documented in hooks.txt.
+ of an Article object. These hooks all use an $article parameter as documented in hooks.txt.
Extensions should be updated to account for this, though most won't require any changes.
* (bug 27860) Minor edit after clicking 'new section' tab
Now the "This is a minor edit" checkbox is not available when you
@@ -2990,7 +3603,7 @@ Selected changes since MediaWiki 1.17 that may be of interest:
unicode code point is (aka pre-1.17 behavior).
* (bug 30940) Add a hook in User:getDefaultOptions.
To give extensions a better and more flexible way of providing default
- values for preferences a hook has been introdiced in User:getDefaultOptions().
+ values for preferences a hook has been introduced in User:getDefaultOptions().
Setting preferences in $wgDefaultUserOptions still work fine, but when reading
them (i.e. with array_keys) to get a list of all preferences, then
$wgDefaultUserOptions should no longer be used as it will contain those set via
@@ -3136,7 +3749,7 @@ Selected changes since MediaWiki 1.17 that may be of interest:
file description page for multi-paged documents.
* (bug 28883) Message names for different compression types commonly
used in Tiff files.
-* When translcuding a special page, do not let it interpret url parameters.
+* When transcluding a special page, do not let it interpret url parameters.
* (bug 28887) Special page classes are no longer re-used during 1 request.
* (bug 28888) Searching for something starting with a # sign no longer tells
the user a page named [[:]] already exists.
@@ -3213,7 +3826,7 @@ Selected changes since MediaWiki 1.17 that may be of interest:
RefreshLinks::deleteLinksFromNonexistent.
* (bug 29797) Error: "Tried to load block with invalid type" when subpages
are disabled for user pages.
-* (bug 12205) Bidirectional names in action=credits are split and displayed.
+* (bug 12205) Bidirectional names in action=credits are split and displayed
incorrectly when wrapped to the next line.
* (bug 20781) Move 'mainpagetext' messages to installer's .i18n file.
* (bug 29737) "MediaWiki:Qbsettings-directionality" should refer to script,
@@ -3223,7 +3836,7 @@ Selected changes since MediaWiki 1.17 that may be of interest:
to the FCKEditor extension.
* (bug 28762) Resizing to specified height broken for very thin images.
* (bug 29959) Installer fatal when cURL and allow_url_fopen is disabled and user
- tries to subsribe to mediawiki-announce.
+ tries to subscribe to mediawiki-announce.
* (bug 27427) mw.util.getParamValue shouldn't return value from hash even if
param is only present in hash.
* Installer checked for magic_quotes_runtime instead of register_globals.
@@ -3238,7 +3851,7 @@ Selected changes since MediaWiki 1.17 that may be of interest:
* (bug 30335) Fix for HTMLForms using GET breaking when non-friendly URLs
are used.
* (bug 30264) Changed installer-generated LocalSettings.php to use require_once()
- instead require() for included extensions.
+ instead of require() for included extensions.
* Tracking categories are no longer shown in footer for special pages.
* (bug 30684) Fix bad escaping in mw.message for inexistent messages (i.e. <key>).
* $wgOverrideSiteFeed no longer double escapes urls.
@@ -3310,7 +3923,7 @@ Selected changes since MediaWiki 1.17 that may be of interest:
* (bug 27897) list=allusers and list=users list hidden users.
* (bug 27717) API's exturlusage module does not respect $wgMiserMode.
* (bug 27588) list=filearchive&faprop=sha1 returns empty attribute.
-* (bug 28010) Passing a non existant user to list=users gives internal error.
+* (bug 28010) Passing a non existent user to list=users gives internal error.
* (bug 27549) action=query&list=users&usprop=groups doesn't show implicit
groups if a user doesn't have explicit groups.
* (bug 27670) Ordering by timestamp (and usage of start and end) isn't as clear
@@ -3527,7 +4140,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
* $wgSVGMaxSize is now applied to the smaller of width or height, making very
wide pano/timeline/diagram SVGs renderable at saner sizes.
* (bug 29959) Installer fatal when cURL and allow_url_fopen is disabled and user
- tries to subsribe to mediawiki-announce.
+ tries to subscribe to mediawiki-announce.
* Installer checked for magic_quotes_runtime instead of register_globals
* (bug 30131) XCache with variable caching disabled no longer used for variable
caching (CACHE_ACCEL)
@@ -3542,7 +4155,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
* Fixed recentchanges FK violation on page delete and cache purge error in updater
for Oracle DB.
* (bug 32276) Skins were generating output using the internal page title which
- would allow anonymous users to determine wheter a page exists, potentially
+ would allow anonymous users to determine whether a page exists, potentially
leaking private data. In fact, the curid and oldid request parameters would
allow page titles to be enumerated even when they are not guessable.
* (bug 32616) action=ajax requests were dispatched to the relevant internal
@@ -3691,7 +4304,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
* (bug 20186) Allow filtering Special:Contributions for RevisionDeleted edits.
* ajaxwatch now uses the API and JQuery, and can be used to animate arbitrary
watch links, not just to watch the page the link is on.
-* (bug 20976) "searchmenu-new-nocreate" message now displayed when when there
+* (bug 20976) "searchmenu-new-nocreate" message now displayed when there
is no title match in search and the user has no rights to create pages.
* (bug 23429) Added new hook WatchlistEditorBuildRemoveLine.
* (bug 22844) Added support for WinCache object caching (for IIS).
@@ -3815,7 +4428,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
with $wgPasswordSender configurable.
* (bug 22463) $wgFooterIcons added to allow configuration of the icons shown in
the footers of skins.
-* $wgFileCacheDepth can be used to set the depth of the subdirectory hierarchy.
+* $wgFileCacheDepth can be used to set the depth of the subdirectory hierarchy
used for the file cache. Default value is 2, which matches former behavior.
=== Bug fixes in 1.17 ===
@@ -3859,14 +4472,14 @@ Selected changes since MediaWiki 1.16 that may be of interest:
language.
* (bug 22852) "Served in" comment is now the time used to cache a single page
when using rebuildFileCache.php
-* (bug 22496) Viewing diff of a redirect page without specifying "oldid".
+* (bug 22496) Viewing diff of a redirect page without specifying "oldid"
parameter no longer makes the page displayed as being the redirect target.
* (bug 22918) Feed cache keys now use $wgRenderHashAppend.
* (bug 21916) Last-Modified header is now correct when outputting cached feed.
* (bug 20049) Fixed PHP notice in search highlighter that occurs in some cases.
* (bug 23017) Special:Disambiguations now list pages in content namespaces
rather than only main namespace.
-* (bug 23063) $wgMaxAnimatedGifArea is checked against the total size of all.
+* (bug 23063) $wgMaxAnimatedGifArea is checked against the total size of all
frames, and $wgMaxImageArea against the size of the first frame, rather than
the other way around. Both now default to 12.5 megapixels. Also, images
exceeding $wgMaxImageArea can still be embedded at original size.
@@ -3896,7 +4509,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
correct link.
* (bug 23284) Times are now rounded correctly.
* (bug 23375) Added ogv, oga, spx as extensions for ogg files.
-* (bug 18408) All required permissions for uploading (upload, edit, create).
+* (bug 18408) All required permissions for uploading (upload, edit, create)
are now checked when loading Special:Upload. Toolbar link for Special:Upload
is no longer shown if the user does not have the required permissions.
* (bug 23397) texvc in html mode renders \sim as &tilde; not &sim;
@@ -3943,7 +4556,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
* (bug 19910) Headings of the form ===+\s+ are now displayed as valid headings.
* (bug 24022) Only check file extensions on the uploadpage when needed.
* (bug 24076) Recognize Office 2003 files with OpenXML trailers.
-* (bug 24244) Updated comments in DefaultSettings.php to reflect.
+* (bug 24244) Updated comments in DefaultSettings.php to reflect
Image: --> File: namespace rename.
* Make wfTimestamp recognize negative unix timestamp values.
* (bug 24401) SimpleSearch: No button/text indicating 'Search' if image is
@@ -3983,7 +4596,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
* (bug 20744) Wiki forgets about an uploaded file.
* (bug 17913) Don't show "older edit" when no older edit available.
* (bug 6204) TOC not properly rendered when using $wgMaxTocLevel.
-* (bug 24977) The accesskey in history page now lead directly to the diff.
+* (bug 24977) The accesskey in history page now lead directly to the diff
instead of alternating focus between the two buttons.
* (bug 24987) Special:ListUsers does not take external groups into account.
* (bug 20633) update.php has mixed language output.
@@ -4023,7 +4636,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
* (bug 25175) HTML file cache now honor $wgCacheDirectory if
$wgFileCacheDirectory is not set.
* (bug 13353) Diff3 version checks were too strict, did not detect working diff3.
-* (bug 25843) Links to special pages using link= attribute on images are now.
+* (bug 25843) Links to special pages using link= attribute on images are now
normalised like normal links to special pages.
* (bug 21364) External links using link= attribute on images now respect
$wgExternalLinkTarget.
@@ -4110,7 +4723,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
* (bug 27508) SVGMetadataExtractor takes too much resources on huge svgs.
* (bug 27465) SVG thumbnail generation.
* (bug 27467) preload can leave UNIQ.
-* (bug 27539) Allow attributes beginning with a digit in wiktext tag parameters.
+* (bug 27539) Allow attributes beginning with a digit in wikitext tag parameters.
* (bug 27328) using relative paths in CSS imports in MediaWiki:Common.css broken
in 1.17.
* (bug 27333) Fix repetitive last-seen time queries on page history.
@@ -4159,7 +4772,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
* (bug 22764) uselang parameter for action=parse.
* (bug 22944) API: watchlist options are inconsistent.
* (bug 22868) don't list infinite block expiry date as "now" in API logevents.
-* (bug 22290) prop=revisions now outputs "comment" field even when comment.
+* (bug 22290) prop=revisions now outputs "comment" field even when comment
is empty, for consistency with list=recentchanges.
* (bug 19721) API action=help should have a way to just list for a specific
module.
@@ -4172,7 +4785,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
* (bug 23524) Api Modules as followup to bug 14473 (Add iwlinks table to
track inline interwiki link usage).
* Add pltitles and tltemplates to prop=links and prop=templates respectively,
- similar to prop=categories's clcategorie.
+ similar to prop=categories's clcategories.
* (bug 23834) Invalid "thumbwidth" and "thumbheight" in "imageinfo" query when
thumbnailing larger than original image.
* (bug 23835) Need "thumbmime" result in "imageinfo" query.
@@ -4230,7 +4843,7 @@ Selected changes since MediaWiki 1.16 that may be of interest:
current revision id, try the parser cache, and save it to it if necessary.
* (bug 25463) Export header should not be shown if no pages were requested, to
reduce confusion.
-* (bug 25648) API discovery information has been added as RSD link in page.
+* (bug 25648) API discovery information has been added as RSD link in page
<head> and by providing an API module action=rsd. Added hook
ApiRsdServiceApis for extensions to add their own service to the services
list.
@@ -4259,7 +4872,7 @@ The following languages were added:
* Moroccan Spoken Arabic (ary)
* Banjar (bjn)
-* Kabardian (kdb)
+* Kabardian (kbd)
* Kabardian (Cyrillic) (kbd-cyrl)
* Latgalian (ltg)
* Minangkabau (min)
@@ -4366,7 +4979,7 @@ Other significant changes to MediaWiki's language support:
similarly to the category namespace.
* $wgEnableSorbs renamed to $wgDnsBlacklistUrls ($wgEnableSorbs kept for
backward compatibility)
-* $wgUploadNavigationUrl now also affects images inline images that do not
+* $wgUploadNavigationUrl now also affects inline images that do not
exist. In that case the URL will get (?|&)wpDestFile=<filename> appended to
it as appropriate.
* If $wgLocaltimezone is null, use the server's timezone as the default for
@@ -4446,7 +5059,7 @@ Other significant changes to MediaWiki's language support:
* Added a feature to allow per-article process pool size control for the parsing
task, to limit resource usage when the cache for a heavily-viewed article is
invalidated. Requires an external daemon.
-* (bug 19576) Moved the id attribues from the anchors accompanying section
+* (bug 19576) Moved the id attributes from the anchors accompanying section
headers to the <span class="mw-headline"> elements within the section headers,
removing the redundant anchor elements.
* Parser::setFunctionTagHook now can be used to add a new tag which is parsed at
@@ -4661,7 +5274,7 @@ comment from another wiki.
** Note that this change will break some extensions which have not been adapted
for it.
* (bug 17020) Adding fallback encodings for Traditional and Simplified Chinese
- languages while the the text is typed as URLs.
+ languages while the text is typed as URLs.
* (bug 17614) Prev / Next links are not shown if all results are shown
* (bug 18207) Strange spacing before [[irc:...]] links
* Removed float from the user login form in RTL interface - caused display
@@ -4696,7 +5309,7 @@ comment from another wiki.
* (bug 18943) Handle invalid titles gracefully at Special:Mostlinked
* (bug 8873) Enable variant conversion in text on 'alt' and 'title' attributes
* (bug 10837) Introducing the StubUserVariant class to determine the variant
- variable instead of using this to overrules the user language preference.
+ variable instead of using this to overrule the user language preference.
* (bug 19014) If user had deletedhistory right, but not undeleted right, then
show "view" instead of "view/restore" on logs.
* (bug 19017) TOC level calculation error in an odd case
@@ -4750,7 +5363,7 @@ comment from another wiki.
are no longer recorded in the pagelinks table
* (bug 19784) date option "ISO 8601" produced illegal id
* (bug 19761) Removed autogenerated <meta keywords> tag with link data.
- Keyword set was not useful, and is ignored by modern search engines anway.
+ Keyword set was not useful, and is ignored by modern search engines anyway.
* (bug 19827) Special:SpecialPages title is "Upload file
* (bug 19355) Added .xhtml, .xht to upload file extension blacklist
* (bug 19287) Workaround for lag on history page in Firefox 3.5
@@ -4773,7 +5386,7 @@ comment from another wiki.
* The display of the language list on the preferences is more comply with the
BCP 47 standards.
* (bug 19849) Custom X-Vary-Options header now disabled unless $wgUseXVO is set
-* (bug 19301) Duplicates entries in $wgAddGroups, $wgRemoveGroups,
+* (bug 19301) Duplicate entries in $wgAddGroups, $wgRemoveGroups,
$wgGroupsAddToSelf and $wgGroupsRemoveFromSelf are no more displayed on
Special:ListGroupRights
* (bug 18799) Special:Userlogin now handles correctly the returnto parameter
@@ -4790,7 +5403,7 @@ comment from another wiki.
* (bug 15680) Split the edit tip message of user CSS/JS subpage into
"usercssyoucanpreview" and "userjsyoucanpreview" respectively.
* (bug 12110) Split the rights for editing users' CSS/JS subpage from
- "editusercssjs" into "editusercss" and edituserjs" respectively.
+ "editusercssjs" into "editusercss" and "edituserjs" respectively.
* (bug 19394) RecentChanges feed URLs for log items with no revisions
(eg Newuser, Userrights) are no longer broken
* (bug 17395) Remote file descriptions use user language ($wgLang), not wiki
@@ -4832,7 +5445,7 @@ comment from another wiki.
enabled
* (bug 19857) maintenance/deleteRevision.php on last revision no longer breaks
target page
-* (bug 20365) Page name with with c/g/h/j/s/u + x are now correctly handled in
+* (bug 20365) Page name with c/g/h/j/s/u + x are now correctly handled in
Special:MovePage with Esperanto as content language
* (bug 20364) Fixed regression in GIF metadata loading
* (bug 20299) MediaWiki:Move-subpages and MediaWiki:Move-talk-subpages can now
@@ -4842,7 +5455,7 @@ comment from another wiki.
* (bug 19966) MediaWiki:License-header is now used for the licensing header in
the file description page instead of MediaWiki:License
* (bug 20380) Links to history/deleted edits at the top of
- Special:RevisionDelete are no more displayed when when doing log suppression
+ Special:RevisionDelete are no more displayed when doing log suppression
* (bug 8143) Localised parser function names are now correctly case insensitive
if they contain non-ASCII characters
* (bug 19055) maintenance/rebuildrecentchanges.php now purges
@@ -4976,7 +5589,7 @@ comment from another wiki.
"unknown error"
* (bug 18762) both redirects and links get fixed one after another if
redirects-only switch is not present
-* (bug 20159) thumbnails rerendered if older that $wgThumbnailEpoch
+* (bug 20159) thumbnails rerendered if older than $wgThumbnailEpoch
* Fixed a bug which in some situations causes the job queue to grow forever,
due to an infinite loop of job requeues.
* (bug 21523) File that can have multiple pages (djvu, pdf, ...) no longer have
@@ -4987,7 +5600,7 @@ comment from another wiki.
* (bug 21776) Interwiki urls like http://en.wikibooks.org/wiki/cs: should give
a redirect instead of a baderror.
* (bug 21803) Special:MyContributions now keeps the query string parameters
-* Redirecting special pages now keep query string paramters set to "0" (e.g.
+* Redirecting special pages now keep query string parameters set to "0" (e.g.
for namespace)
* (bug 20765) Special:ListGroupRights no longer misses addables and removables
groups if there are duplicate entries
@@ -5000,8 +5613,8 @@ comment from another wiki.
* refreshLinks.php now purges orphaned redirect table rows
* (bug 2971) Swap links of hist & diff location on Special:Contributions for
consistency with RC/WL
-* (bug 21986) Special page names were are now capitalized by content language
-* If two log type have the same description, they're now both displayed in the
+* (bug 21986) Special page names are now capitalized by content language
+* If two log types have the same description, they're now both displayed in the
type selector on Special:Log
* (bug 20115) Special:Userlogin title says "Log in / create account" even if the
user can't create an account
@@ -5187,7 +5800,7 @@ changes to languages because of Bugzilla reports.
* Added $wgNoFollowDomainExceptions to allow exempting particular domain names
from rel="nofollow" on external links
* (bug 12970) Brought back $wgUseImageResize.
-* Added $wgRedirectOnLogin to allow specifying a specifc page to redirect users
+* Added $wgRedirectOnLogin to allow specifying a specific page to redirect users
to upon logging in (ex: "Main Page")
* Add $wgExportFromNamespaces for enabling/disabling the "export all from
namespace" option (disabled by default)
@@ -5290,7 +5903,7 @@ changes to languages because of Bugzilla reports.
$wgRedirectOnLogin
* Added a link to Special:UserRights on Special:Contributions for privileged users
* (bug 10336) Added new magic word {{REVISIONUSER}}, which displays the editor
- of the displayed revision's author user name
+ of the displayed revision
* LinkerMakeExternalLink now has an $attribs parameter for link attributes and
a $linkType parameter for the type of external link being made
* (bug 17785) Dynamic dates surrounded with a <span> tag, fixing sortable tables with
@@ -5436,7 +6049,7 @@ changes to languages because of Bugzilla reports.
* (bug 17778) MediaWiki:Catseparator can now have HTML entities
* (bug 17676) Error on Special:ListFiles when using Postgres
* Special:Export doesn't use raw SQL queries anymore
-* (bug 14771) Thumbnail links to individual DjVu pages have two no longer have
+* (bug 14771) Thumbnail links to individual DjVu pages no longer have
two "page" parameters
* (bug 17972) Special:FileDuplicateSearch form now works correctly on wikis that
don't use PathInfo or short urls
@@ -5627,7 +6240,7 @@ The following extensions are migrated into MediaWiki 1.14:
* Extensions can use the SkinBuildSidebar hook to modify the content of the
sidebar and add custom portlets to it
* Added 'MakeGlobalVariablesScript' hook for extensions to be able to add vari-
- ables into into the output of Skin::makeVariablesScript
+ ables into the output of Skin::makeVariablesScript
* (bug 13846) Added $wgAddGroups and $wgRemoveGroups display on
Special:ListGroupRights
* (bug 14377) Add a date selector to history pages
@@ -5740,7 +6353,7 @@ The following extensions are migrated into MediaWiki 1.14:
* Dropped old Paser_OldPP class. Only new parser with preprocessor is used.
* Moved password reset form from Special:Preferences to Special:ResetPass
* Added Special:ChangePassword as a special page alias for Special:ResetPass
-* Added complimentary function for addHandler() called removeHandler() for removing events
+* Added complementary function for addHandler() called removeHandler() for removing events
* Improved security of file uploads for IE clients, using a reverse-engineered
algorithm very similar to IE's content detection algorithm.
* Cascading protection no longer requires that both edit and move are restricted
@@ -6516,7 +7129,7 @@ Other changes in this release:
* (bug 13705) Don't show rollback link in page history on incorrect revisions
* (bug 13708) Don't set "Search results" title when loading Special:Search
without query
-* (bug 13736) Don't show MediaWiki:Anontalkpagetext on non-existant IP addresses
+* (bug 13736) Don't show MediaWiki:Anontalkpagetext on non-existent IP addresses
* (bug 13728) Don't trim initial whitespace during section edits
* (bug 13727) Don't delete log entries from recentchanges on page deletion
* (bug 13752) Redirects to sections now work again
@@ -6654,7 +7267,7 @@ Other changes in this release:
* (bug 14764) Fix regression in from Article::lastModified(), failed to work
on non-mySQL schemas.
* (bug 14763) Child classes of Database (DatabasePostgres and DatabaseOracle)
- had stict standards issues with setFakeSlaveLag() and setFakeMaster().
+ had strict standards issues with setFakeSlaveLag() and setFakeMaster().
* (bug 451) Improve the phrase mappings of the Chinese converter arrays.
* (bug 12487) Rights log is not fully internationalized
* (bug 10837) Language variants no longer override other languages than base
@@ -6676,7 +7289,7 @@ Other changes in this release:
* (bug 13128) Added patrolled flag to list=recentchanges
* Implemented {bl,ei,iu}redirect (lists links through redirects as well)
* (bug 13154) Introduced subpages flag to meta=siteinfo&siprop=namespaces
-* (bug 13157) Added ucuserprefix parameter to list=usercontibs
+* (bug 13157) Added ucuserprefix parameter to list=usercontribs
* (bug 12394) Added rctitles parameter to list=recentchanges, making rcid
retrieval easier
* (bug 13218) Fix inclusion of " character in hyperlinks
@@ -8182,7 +8795,7 @@ it from source control: https://www.mediawiki.org/wiki/Download_from_SVN
* (bug 3953) Work around poor display of parenthesis in the in other
languages section of MonoBook skin
* (bug 8539) Enable PLURAL option for another message of recentchanges.
-* (bug 8728) MediaWiki:Badfiletype splitted into 3 messages
+* (bug 8728) MediaWiki:Badfiletype split into 3 messages
* (bug 9131) Allow SpecialContributions to work with Postgres
* (bug 9155) Allow footer info to wrap in Monobook
* (bug 8847) Strip spurious #fragments from request URI to fix redirect
@@ -9231,7 +9844,7 @@ they will be run along with the main tests by maintenance/parserTests.php
* Fix formatting of titles on Special:Undelete
* (bug 7026) Fix action=raw&templates=expand
* (bug 6976) Add namespace and direction classes to classic skins
-* (bug 7144) Don't "return to main" from OutputPage::loginToUse() if the the user can't
+* (bug 7144) Don't "return to main" from OutputPage::loginToUse() if the user can't
read the main page in the first place
* (bug 7188) Fix minor borkage in HTMLForm
* (bug 6675) Replaced message 'watchthis' with new message 'watchthisupload in Special:Upload
@@ -9834,7 +10447,7 @@ they will be run along with the main tests by maintenance/parserTests.php
* (bug 6304) Show timestamp for current revision in diff pages
* Vertically align current version with old version header in diff display
* (bug 6174) Remove redundant "emailforlost" message
-* (bug 6189) Show an error to an unprivilleged user trying to create account
+* (bug 6189) Show an error to an unprivileged user trying to create account
* (bug 6365) Show user information in the "old revision" navigation links
* Introduce 'FetchChangesList' hook; see docs/hooks.txt for more information
* (bug 6345) Update to Indonesian localisation (id) #22
@@ -10303,7 +10916,7 @@ Special Pages:
* (bug 1956) Hide bot uploads from Special:Newimages
* (bug 3220) Fix escaping of block URLs in Recentchanges
* (bug 3284) Ipblocklist paging, substring search
-* Allow filtering of robot edits in Special:Watchlist by stting
+* Allow filtering of robot edits in Special:Watchlist by setting
$wgFilterRobotsWL = true.
* Fix interlanguage links on special pages when extra namespaces configured
* (bug 3475) anon contrib links on Special:Newpages
@@ -11210,8 +11823,8 @@ Various bugfixes, small features, and a few experimental things:
* Supplying a reason for a block is no longer mandatory
* Language conversion support for category pages
* $wgStyleSheetDirectory is no longer an alias for $wgStyleDirectory;
-* Special:Movepage can now take paramaters like Special:Movepage/Page_to_move
- (used to just be able to take paramaters via a GET request like index.php?title=Special:Movepage&target=Page_to_move)
+* Special:Movepage can now take parameters like Special:Movepage/Page_to_move
+ (used to just be able to take parameters via a GET request like index.php?title=Special:Movepage&target=Page_to_move)
* (bug 2151) The delete summary now includes editor name, if only one has edited the article.
* (bug 2105) Fixed from argument to the PHP mail() function. A missing space could prevent sending mail with some versions of sendmail.
* (bug 2228) Updated the Slovak translation
@@ -11396,7 +12009,7 @@ Various bugfixes, small features, and a few experimental things:
* Skip sidebar entries where link text is '-'
* Convert non-UTF-8 URL parameters even if referer is local
* (bug 2460) <img> width & height properly filled when resizing image
-* (bug 2273) deletion log comment used user interface langage
+* (bug 2273) deletion log comment used user interface language
* Try reading revision _text_ from master if no result on slave
* Use content-language message cache for raw view of message pages
* (bug 2530) Not displaying talk pages on Special:Watchlist/edit
diff --git a/INSTALL b/INSTALL
index e8731a1e..2054a57e 100644
--- a/INSTALL
+++ b/INSTALL
@@ -6,12 +6,13 @@ Starting with MediaWiki 1.2.0, it's possible to install and configure the wiki
"in-place", as long as you have the necessary prerequisites available.
Required software:
-* Web server with PHP 5.3.2 or higher.
+* Web server with PHP 5.3.3 or higher.
* A SQL server, the following types are supported
-** MySQL 5.0.2 or higher
+** MySQL 5.0.3 or higher
** PostgreSQL 8.3 or higher
** SQLite 3.3.7 or higher
** Oracle 9.0.1 or higher
+** Microsoft SQL Server 2005 (9.00.1399)
MediaWiki is developed and tested mainly on Unix/Linux platforms, but should
work on Windows as well.
diff --git a/README b/README
index 282ee6c2..29577bc2 100644
--- a/README
+++ b/README
@@ -1,17 +1,17 @@
== MediaWiki ==
-MediaWiki is a popular and free, open-source wiki software package written in
-PHP. It serves as the platform for Wikipedia and the other projects of the Wikimedia
-Foundation, which deliver content in over 280 languages to more than half a billion
-people each month. MediaWiki's reliability and robust feature set have earned it a
-large and vibrant community of third-party users and developers.
+MediaWiki is a free and open-source wiki software package written in PHP. It
+serves as the platform for Wikipedia and the other projects of the Wikimedia
+Foundation, which deliver content in over 280 languages to more than half a
+billion people each month. MediaWiki's reliability and robust feature set have
+earned it a large and vibrant community of third-party users and developers.
MediaWiki is:
-* feature-rich and extensible, both on-wiki and with over 2,000 extensions;
+* feature-rich and extensible, both on-wiki and with hundreds of extensions;
* scalable and suitable for both small and large sites;
-* available in your language; and
-* simple to install, working on most hardware/software combinations.
+* simple to install, working on most hardware/software combinations; and
+* available in your language.
For system requirements, installation, and upgrade details, see the files
RELEASE-NOTES, INSTALL, and UPGRADE.
@@ -23,7 +23,7 @@ RELEASE-NOTES, INSTALL, and UPGRADE.
* Seeking help from a person?
** https://www.mediawiki.org/wiki/Communication
* Looking to file a bug report or a feature request?
-** https://bugzilla.wikimedia.org/
+** https://bugs.mediawiki.org/
* Interested in helping out?
** https://www.mediawiki.org/wiki/How_to_contribute
diff --git a/README.mediawiki.rej b/README.mediawiki.rej
new file mode 100644
index 00000000..44c95ec4
--- /dev/null
+++ b/README.mediawiki.rej
@@ -0,0 +1,37 @@
+--- README.mediawiki 2015-03-31 20:45:34.000000000 +0200
++++ README.mediawiki 2015-05-25 22:59:46.000000000 +0200
+@@ -1,17 +1,17 @@
+ == MediaWiki ==
+
+-MediaWiki is a popular and free, open-source wiki software package written in
+-PHP. It serves as the platform for Wikipedia and the other projects of the Wikimedia
+-Foundation, which deliver content in over 280 languages to more than half a billion
+-people each month. MediaWiki's reliability and robust feature set have earned it a
+-large and vibrant community of third-party users and developers.
++MediaWiki is a free and open-source wiki software package written in PHP. It
++serves as the platform for Wikipedia and the other projects of the Wikimedia
++Foundation, which deliver content in over 280 languages to more than half a
++billion people each month. MediaWiki's reliability and robust feature set have
++earned it a large and vibrant community of third-party users and developers.
+
+ MediaWiki is:
+
+-* feature-rich and extensible, both on-wiki and with over 2,000 extensions;
++* feature-rich and extensible, both on-wiki and with hundreds of extensions;
+ * scalable and suitable for both small and large sites;
+-* available in your language; and
+-* simple to install, working on most hardware/software combinations.
++* simple to install, working on most hardware/software combinations; and
++* available in your language.
+
+ For system requirements, installation, and upgrade details, see the files
+ RELEASE-NOTES, INSTALL, and UPGRADE.
+@@ -23,7 +23,7 @@
+ * Seeking help from a person?
+ ** https://www.mediawiki.org/wiki/Communication
+ * Looking to file a bug report or a feature request?
+-** https://bugzilla.wikimedia.org/
++** https://bugs.mediawiki.org/
+ * Interested in helping out?
+ ** https://www.mediawiki.org/wiki/How_to_contribute
+
diff --git a/RELEASE-NOTES-1.24 b/RELEASE-NOTES-1.24
deleted file mode 100644
index 43ba2876..00000000
--- a/RELEASE-NOTES-1.24
+++ /dev/null
@@ -1,833 +0,0 @@
-Security reminder: If you have PHP's register_globals option set, you must
-turn it off. MediaWiki will no longer work with it enabled.
-
-== MediaWiki 1.24.2 ==
-
-This is a security and maintenance release of the MediaWiki 1.24 branch.
-
-== Changes since 1.24.1 ==
-
-* (T85848, T71210) SECURITY: Don't parse XMP blocks that contain XML entities,
- to prevent various DoS attacks.
-* (T85848) SECURITY: Don't allow directly calling Xml::isWellFormed, to reduce
- likelihood of DoS.
-* (T88310) SECURITY: Always expand xml entities when checking SVG's.
-* (T73394) SECURITY: Escape > in Html::expandAttributes to prevent XSS.
-* (T85855) SECURITY: Don't execute another user's CSS or JS on preview.
-* (T64685) SECURITY: Allow setting maximal password length to prevent DoS when
- using PBKDF2.
-* (T85349, T85850, T86711) SECURITY: Multiple issues fixed in SVG filtering to
- prevent XSS and protect viewer's privacy.
-* Fix case of SpecialAllPages/SpecialAllMessages in SpecialPageFactory to fix
- loading these special pages when $wgAutoloadAttemptLowercase is false.
-* (bug T70087) Fix Special:ActiveUsers page for installations using
- PostgreSQL.
-* (bug T76254) Fix deleting of pages with PostgreSQL. Requires a schema change
- and running update.php to fix.
-
-== MediaWiki 1.24.1 ==
-
-This is a security and maintenance release of the MediaWiki 1.24 branch.
-
-== Changes since 1.24.0 ==
-
-* (bug T76686) [SECURITY] thumb.php outputs wikitext message as raw HTML, which
- could lead to xss. Permission to edit MediaWiki namespace is required to
- exploit this.
-* (bug T77028) [SECURITY] Malicious site can bypass CORS restrictions in
- $wgCrossSiteAJAXdomains in API calls if it only included an allowed domain as
- part of its name.
-* (bug T74222) The original patch for T74222 was reverted as unnecessary.
-* Fixed a couple of entries in RELEASE-NOTES-1.24.
-* (bug T76168) OutputPage: Add accessors for some protected properties.
-* (bug T74834) Make 1.24 branch directly installable under PostgreSQL.
-
-== MediaWiki 1.24 ==
-
-MediaWiki 1.24.0 is the stable branch and is recommended for use in production.
-
-MediaWiki 1.24 is a large release that contains many new features and bug
-fixes. This is the full list of changes in this version.
-
-Our thanks go to everyone who helped to improve MediaWiki by testing the beta
-release and submitting bug reports.
-
-=== Configuration changes in 1.24 ===
-* Setting $wgAllowSiteCSSOnRestrictedPages to true is necessary if you want to
- use on-wiki CSS modifications (e.g MediaWiki:Common.css) on
- Special:UserLogin or Special:Preferences.
-* MediaWiki will no longer run if register_globals is enabled. It has been
- deprecated for 5 years now, and was removed in PHP 5.4. For more information
- about why, see <https://www.mediawiki.org/wiki/register_globals>.
-* MediaWiki now requires PHP's iconv extension. openSUSE users may need to
- install the php5-iconv package. Users of other systems may need to add
- extension=iconv.so to php.ini or recompile PHP without --without-iconv.
-* MediaWiki will no longer function if magic quotes are enabled. It has
- been deprecated for 5 years now, and was removed in PHP 5.4.
-* The server's canonical hostname is available as $wgServerName, which is
- exposed in both mw.config and ApiQuerySiteInfo.
-* Introduced $wgPagePropsHaveSortkey as a backwards-compatibility switch,
- for using the old schema of the page_props table, in case the respective
- schema update was not applied.
-* $wgSearchEverythingOnlyLoggedIn was removed as the 'searcheverything'
- user option was removed. Use $wgNamespacesToBeSearchedDefault instead or
- if you used to have $wgDefaultUserOptions['searcheverything'] = 1.
-* $wgMasterWaitTimeout has been deprecated.
-* $wgDBClusterTimeout has been removed.
-* $wgProxyKey has been removed. It is no longer used by MediaWiki core.
- Ensure $wgSecretKey is set in LocalSettings.php.
-* $wgExtraInterlanguageLinkPrefixes is a new configuration variable that
- contains an array of interwiki prefixes that should be treated as language
- prefixes (i.e. turned into interlanguage links when $wgInterwikiMagic is set
- to true).
-* $wgParserTestRemote has been removed.
-* $wgCountTotalSearchHits has been removed. If you're concerned about efficiency
- of search, you should use something like CirrusSearch instead of built in
- search.
-* Users in the 'sysop' group have access to Special:MergeHistory by default.
-* $wgFileStore was removed after having been deprecated in 1.17. Alternative
- configurations are $wgDeletedDirectory and $wgHashedUploadDirectory.
-* The deprecated $wgUseCommaCount variable has been removed.
-* $wgEnableSorbs and $wgSorbsUrl have been removed.
-* The UserCryptPassword and UserComparePassword hooks are no longer called.
- Any extensions using them must be updated to use the Password Hashing API.
-* $wgCompiledFiles has been removed.
-* $wgSortSpecialPages was removed, the listing on Special:SpecialPages is
- now always sorted.
-* $wgSpecialPages may now use callback functions as an alternative to plain class names.
- This allows more control over constructor parameters.
-* $wgHTCPMulticastAddress, $wgHTCPMulticastRouting and $wgHTCPPort were removed.
-* $wgRC2UDPAddress, $wgRC2UDPInterwikiPrefix, $wgRC2UDPOmitBots, $wgRC2UDPPort
- and $wgRC2UDPPrefix have been removed.
-* The default password type for MediaWiki has been changed from MD5 to PBKDF2.
- Password hashes will automatically be updated as users log in. If necessary, the
- old MD5 hashing can be restored by changing $wgPasswordDefault to 'B'. In addition,
- there is a maintenance script wrapOldPassword.php that can wrap all passwords in
- PBKDF2 (or the hashing algorithm of your choice) if you don't want to wait for your
- users to log in.
-* $wgImportSources can now either be a regular array, or an associative map
- specifying subprojects on the interwiki map of the target wiki, or a mix of
- the two. Existing configurations will still work.
-* Users must be able to edit through a page's protection to be able to delete it.
-* The default thumb size ($wgDefaultUserOptions['thumbsize']) is now 300px, up from
- 180px. If you have altered the number of entries in $wgThumbLimits for your wiki, you
- may need to adjust your default user settings to compensate for the index change.
-* $wgDeferredUpdateList is now deprecated, you should use DeferredUpdates::addUpdate()
- instead.
-* $wgCanonicalLanguageLinks has been removed. Per Google recommendations, we
- will not send a rel=canonical pointing to a variant-neutral page, however
- we will send rel=alternate.
-* $wgResourceLoaderLESSFunctions has been deprecated and will be removed in the future.
-* $wgGoToEdit has been removed. Use the SpecialSearchNogomatch hook for similar
- functionality.
-* $wgMangleFlashPolicy was added to make MediaWiki's mangling of anything that
- might be a flash policy directive configurable.
-
-=== New features in 1.24 ===
-* Added new hook WatchlistEditorBeforeFormRender, allowing subscribers to
- manipulate the list of pages and/or preload lots of data at once.
-* Added new argument &$link in hook WatchlistEditorBuildRemoveLine, allowing the
- link to the title to be changed.
-* Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
- WhatLinksHere entries.
-* Added a new hook, "ContentGetParserOutput", to customize parser output for
- a given content object.
-* Deprecated the hook "ShowRawCssJs", use "ContentGetParserOutput" instead.
-* HTMLForm's HTMLTextField now supports the 'url' type.
-* HTMLForm fields may now be dynamically hidden based on the values of other
- fields in the form.
-* HTMLForm now supports multiple copies of an input field or set of input
- fields, e.g. the form may request "one or more usernames" without having to
- have the user enter delimited list of names into a text field.
-* Added a new hook, "SidebarBeforeOutput", to allow to edit the structure of
- the sidebar just before its display.
-* (bug 49156) Added the mediawiki.cookie ResourceLoader module, which wraps
- jquery.cookie so that getting/setting a cookie is syntactically and
- functionally similar to using the WebRequest::getCookie() and
- WebResponse::setcookie() methods.
-* (bug 44740) jQuery upgraded from 1.8.3 to 1.11.1. A new configuration option,
- $wgIncludejQueryMigrate, also loads the jQuery Migrate hack to let extensions
- and gadgets use the long-deprecated functions that were removed in jQuery 1.9.
- This option is turned off by default, and will be removed in MediaWiki 1.25.
-* (bug 47076) jQuery UI upgraded from 1.8.24 to 1.9.2.
-* Changes to content typography (fonts, etc.). See
- https://www.mediawiki.org/wiki/Typography_refresh for further information.
-* WikitextContent will now render redirects with the expected "redirect"
- header, rather than as an ordered list. Code calling Article::viewRedirect
- can probably be changed to no longer special-case redirects.
-* Header font set to a serif font stack. See
- https://www.mediawiki.org/wiki/Typography_refresh for further information.
-* (bug 65567) Added a new hook, "BeforeHttpsRedirect", to allow cancellation of
- the HTTP to HTTPS redirect due to forceHTTPS cookie, userRequires, etc. This
- is only for page views, since this hook doesn't affect UserLogin, OAuth,
- CentralAuth, etc. ATTENTION: This hook is likely to be removed soon due to
- overall design of the system.
-* (bug 17367) It is now possible to add pages to your watchlist from
- Special:UnwatchedPages without reloading the special page.
-* New methods setVolatile and isVolatile are added to PPFrame, so that
- extensions such as Cite.php can mark that their output is volatile and
- shouldn't be cached.
-* (bug 52817) Advanced search options are now saved on the search page itself,
- rather than in a dedicated pane in the preferences panel.
-* (bug 44591) The dropdown actions menu (little triangle next to page tabs) in
- the Vector skin has gained a label that should make it more discoverable.
-* MWCryptHKDF added for fast, cryptographically secure random number generation
- that won't deplete openssl's entropy pool.
-* ResourceLoader: File modules can now provide a skip function that uses an
- inline feature test to bypass loading of the module.
-* (bug 20210) Special pages may now provide autocompletion of their subpage
- names in search suggestions. Right now the only useful implementation is in
- Special:Log, but more are to come.
-* Special:MostLinkedTemplates is no longer limited to transclusions from the
- Template namespace.
-* Skins can now use 'remoteSkinPath' when defining ResourceLoader modules.
- This works the same as 'remoteExtPath' but is relative to the skins/ folder
- instead of the extensions/ folder.
-* Added the json2.js polyfill for the ES5 JSON.stringify and JSON.parse methods.
- Exposed as module "json" with a skip function to optimise loading.
-* Extensions and skins may now use 'namemsg' in $wgExtensionCredits in addition
- to 'name', to allow for the name to be localizable. 'name' should still be
- specified for backwards-compatibility and to define the path Special:Version
- uses to find extension license information.
-* Browser tests are now included to verify basic wiki functionality in developer
- environments. For details on running tests, see tests/browser/README.mediawiki.
-* Upgrade jStorage to v0.4.10.
-* {{!}} is now a magic word that produces the | character. This removes the need
- for Template:! for purposes such as passing pipes inside of parameters.
-* (bug 20790) The block log snippet on Special:Contributions and while
- editing user and user talk pages now works for IP range blocks.
-* (bug 9360) Added ability to change the page language for MediaWiki pages using
- Special:PageLanguage. All pages are set to wiki language by default.
- The feature needs to be enabled with $wgPageLanguageUseDB=true and
- permission needs to be set for 'pagelang'.
-* Upgrade Moment.js to v2.8.3.
-* (bug 67042) Added support for the HTML5 <rtc> tag for East Asian typography.
-* Upgrade Sinon.JS to 1.10.3.
-* Added the es5-shim polyfill for older or non-compliant javascript engines.
-* Upgrade jQuery Cookie to v1.3.1.
-* (bug 20476) Add a "viewsuppressed" user right to be able to view
- suppressed content but not suppress it ("suppressrevision" right).
-* (bug 66440) The MediaWiki web installer will now allow you to choose the skins
- to enable (from the ones included in download tarball) and decide which one
- should be the default.
-* (bug 68085, 68802) Links like [[localInterwikiPrefix:languageCode:pageTitle]],
- where localInterwikiPrefix is a member of the $wgLocalInterwikis array, will
- no longer be displayed in the sidebar when $wgInterwikiMagic is true. In a
- similar way, links like [[localInterwikiPrefix:File:Image.png]] and
- [[localInterwikiPrefix:Category:Hello]] will now render as regular links, and
- will not include the file or add the page to the category.
-* New special page, MyLanguage, to redirect users to subpages with localised
- versions of a page. (Integrated from Extension:Translate)
-* MediaWiki now supports multiple password types, including bcrypt and PBKDF2.
- The default type can be changed with $wgPasswordDefault and the type
- configurations can be changed with $wgPasswordConfig.
-* Skins can now define custom styles for default ResourceLoader modules using
- the $wgResourceModuleSkinStyles global. See the Vector skin for examples.
-* (bug 4488) There is now a preference to watch pages where the user has
- rollbacked an edit by default.
-* (bug 15484) Users will now be redirected to the login page when they need to
- log in, rather than being shown a page asking them to log in and having to click
- another link to actually get to the login page.
-* A JsonContent and JsonContentHandler were added for extensions to extend.
-* (bug 35045) Redirects to sections will now update the URL in browser's address
- bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]],
- the user will now see "Animals#Dog" in their browser instead of "Dog#Dog".
-* API token handling has been rewritten. Any API module using tokens will need
- to be updated. See the entry below under "Action API internal changes".
-* Added HTMLAutoCompleteSelectField.
-* Added a new hook, "SkinPreloadExistence", to allow extensions to add titles to
- link existence cache before the page is rendered.
-* Config::set() was moved to its own interface, MutableConfig. GlobalVarConfig::set()
- is now deprecated, does not implement MutableConfig.
-* A MutableConfig named HashConfig was added, that stores an array of configuration
- settings.
-* (bug 69418) A MultiConfig implementation was added that supports fallback
- to multiple Config instances.
-* Update CSSJanus to v1.1.0.
-* Added FormatJson::parse() returning status with result or localized error message
-
-=== Bug fixes in 1.24 ===
-* (bug 70686) More sensible behavior when special page aliases conflict
-* (bug 71040) Add Oracle version of update-keys.sql
-* (bug 64912, 64922) mw.Title: Add new static methods `newFromFileName`,
- `newFromUserInput`
-* MediaWikiVersionFetcher::fetchVersion() now supports semantic versions.
-* (bug 50572) MediaWiki:Blockip should support gender
-* (bug 49116) Footer copyright notice is now always displayed in user language
- rather than content language (same as copyright notice for editing interface).
-* (bug 62258) A bug was fixed in File::getUnscaledThumb when a height
- restriction was present in the parameters. Images with both the "frame"
- option and a size specification set will now always ignore the provided
- size and display an unscaled image, as the documentation has always
- claimed it would.
-* (bug 39035) Improved Vector skin performance by removing collapsibleNav,
- which used to collapse some sidebar elements by default.
- This removes -list id suffixes like p-lang-list: instead of using things like
- #p-lang-list, you can do #p-lang .body ul.
-* (bug 890) Links in Special:RecentChanges and Special:Watchlist no longer
- follow redirects to their target pages.
-* Parser now dies early if called recursively, instead of producing subtle bugs.
-* (bug 14323) Redirect pages, when viewed with redirect=no, no longer hide the
- remaining page content.
-* (bug 52587) Maintenance script deleteBatch.php no longer follows redirects
- in the file namespace and delete the file on the target page. It will still
- however delete the redirect page.
-* (bug 22683) {{msgnw:}} and other uses of PPFrame::RECOVER_ORIG will correctly
- recover the original code of extension tags.
-* (bug 65757) MSSQL: Update script drops unnamed constraints to be prepared
- for future updates. Because it's doing so heuristically, it may fail or drop
- wrong constraints.
-* (bug 67870) wfShellExec() cuts off stdout at multiples of 8192 bytes.
-* $wgRunJobsAsync now works with private wikis (e.g. read requires login).
-* (bugs 57238, 65206) Blank pages can now be directly created.
-* (bug 69789) Title::getContentModel() now loads from the database when
- necessary instead of incorrectly returning the default content model.
-* (bug 69249) wfBaseConvert() now works around PHP Bug #50175 when using GMP.
-* (bug 57909) URLs in the externallinks table will no longer have certain
- characters decoded in the query string.
-* (bug 67368) LESS mixins like .background-image() correctly flip image
- references for RTL stylesheets now.
-* (bugs 66776, 71478) SECURITY: User PleaseStand reported a way to inject code
- into API clients that used format=php to process pages that underwent flash
- policy mangling. This was fixed along with improving how the mangling was done
- for format=json, and allowing sites to disable the mangling using
- $wgMangleFlashPolicy.
-* (bug 70901) SECURITY: User Jackmcbarn reported that the ability to update
- the content model for a page could allow an unprivileged attacker to edit
- another user's common.js under certain circumstances. The user right
- "editcontentmodel" was added, and is needed to change a revision's content
- model.
-* (bug 71111) SECURITY: User PleaseStand reported that on wikis that allow raw
- HTML, it is not safe to preview wikitext coming from an untrusted source such
- as a cross-site request. Thus add an edit token to the form, and when raw HTML
- is allowed, ensure the token is provided before showing the preview. This
- check is not performed on wikis that both allow raw HTML and anonymous
- editing, since there are easier ways to exploit that scenario.
-* (bug 72222) SECURITY: Do not show log action when the entry is revdeleted with
- DELETED_ACTION. NOTICE: this may be reverted in a future release pending a
- public RFC about the desired functionality. This issue was reported by user
- Bawolff.
-* (bug 71621) Make allowing site-wide styles on restricted special pages a
- config option.
-* (bug 42723) Added updated version history from 1.19.2 to 1.22.13
-
-=== Action API changes in 1.24 ===
-* action=parse API now supports prop=modules, which provides the list of
- ResourceLoader modules that should be used to enhance the parsed content.
-* action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel"
- field which is true if protocol-relative urls can be used to access
- a particular interwiki map entry.
-* list=logevents now provides logpage, which is the page ID from the
- logging table, if ids are requested and the user has the permissions.
-* action=edit now requires that appendtext, prependtext, or section=new be used
- when using the 'redirect' parameter, to prevent clients accidentally
- overwriting the target page with the content of the redirect.
-* list=logevents will now return an error if both letitle and leprefix are
- specified.
-* list=logevents has a new parameter, lenamespace, to allow filtering by
- namespace.
-* action=expandtemplates has a new parameter, prop, and a new output format.
- The old format is still used if prop isn't provided, but this is deprecated.
-* meta=userinfo can now return the count of unread pages on the watchlist.
-* list=watchlist can now filter by unread status.
-* The deprecated action=parse&prop=languageshtml has been removed.
-* (bug 48071) action=setnotificationtimestamp no longer throws PHP or database
- errors when no pages are given.
-* (bug 60734) Actions that use ApiPageSet (e.g. purge, watch,
- setnotificationtimestamp) will now include continuation information when
- using a generator.
-* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
- limited use and are generally inaccurate, unmaintained, and impossible to
- properly maintain.
-* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
-* action=paraminfo now indicates when a parameter is specifying a submodule.
-* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
- parallelism with prop=langlinks.
-* All tokens should be fetched from action=query&meta=tokens; all other methods
- of fetching tokens are deprecated. The value needed for meta=tokens's 'type'
- parameter for each module is documented in the action=help output and is
- returned from action=paraminfo.
-* New action ClearHasMsg that can be used to clear HasMsg flag.
-* The cmstartsortkey and cmendsortkey parameters to list=categorymembers are
- deprecated in favor of cmstarthexsortkey and cmendhexsortkey.
-* (bug 63326) Add blockedtimestamp field to output of blockinfo property for
- the list=allusers and list=users modules.
-* prop=imageinfo no longer requires iiurlwidth to be set when using iiurlparam.
-* Added prop=linkshere, prop=fileusage, and prop=transcludedin, which are
- roughly equivalent to list=backlinks, list=imageusage, and list=embeddedin
- but can work on a list of titles (including titles from a generator).
-* prop=redirects can now filter returned redirects by namespace.
-
-=== Action API internal changes in 1.24 ===
-* Methods for handling continuation are added to ApiResult, so actions other
- than query that use generators can easily support continuation.
-* $wgAPIModules (and the related $wgAPIFormatModules, $wgAPIMetaModules,
- $wgAPIPropModules, and $wgAPIListModules settings) now allow API modules
- to be specified using a "module spec" array instead of a plain class name.
- A "module spec" is an associative array containing at least the 'class' key
- for the module's class, and optionally a 'factory' key for the factory function
- to use for the module. This is intended for extensions that want control over
- the instantiation of their API modules, to allow for proper dependency
- injection.
-* A new param type 'submodule' is available. Parameters of this type will take
- the list of valid values from the module's ApiModuleManager for the group
- corresponding to the parameter name.
-* The 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks are no longer used.
-* API token handling has been rewritten. Any API module using tokens will need
- to be updated:
- * ApiBase::needsToken now returns a token type instead of boolean true when a
- token is needed. Returning true will throw an exception. See documentation
- of that method for details.
- * Information for the 'token' parameter is automatically set by ApiBase
- getFinalParams and getFinalParamDescription.
- * ApiBase::getTokenSalt has been removed.
- * The hooks APIQueryInfoTokens, APIQueryRevisionsTokens,
- APIQueryRecentChangesTokens, APIQueryUsersTokens, and
- ApiTokensGetTokenTypes are deprecated, but are still called to support
- backwards-compatible token access.
-* ApiBase::validateLimit and ApiBase::validateTimestamp are now protected.
-* ApiQueryRedirects was removed; prop=redirects is now implemented by
- ApiQueryBacklinksProp along with the newly-added prop modules.
-* The following methods have been deprecated and may be removed in a future
- release:
- * ApiBase::getResultProperties
- * ApiBase::getFinalResultProperties
- * ApiBase::addTokenProperties
- * ApiBase::getRequireOnlyOneParameterErrorMessages
- * ApiBase::getRequireMaxOneParameterErrorMessages
- * ApiBase::getRequireAtLeastOneParameterErrorMessages
- * ApiBase::getTitleOrPageIdErrorMessage
- * ApiBase::getPossibleErrors
- * ApiBase::getFinalPossibleErrors
- * ApiBase::parseErrors
- * ApiQuery::setGeneratorContinue
- * ApiQueryBase::checkRowCount
- * ApiQueryBase::titleToKey
- * ApiQueryBase::keyToTitle
- * ApiQueryBase::keyPartToTitle
- * ApiQueryInfo::getTokenFunctions
- * ApiQueryInfo::resetTokenCache
- * ApiQueryInfo::getEditToken
- * ApiQueryInfo::getDeleteToken
- * ApiQueryInfo::getProtectToken
- * ApiQueryInfo::getMoveToken
- * ApiQueryInfo::getBlockToken
- * ApiQueryInfo::getUnblockToken
- * ApiQueryInfo::getEmailToken
- * ApiQueryInfo::getImportToken
- * ApiQueryInfo::getWatchToken
- * ApiQueryInfo::getOptionsToken
- * ApiQueryRecentChanges::getTokenFunctions
- * ApiQueryRecentChanges::getPatrolToken
- * ApiQueryRevisions::getTokenFunctions
- * ApiQueryRevisions::getRollbackToken
- * ApiQueryUsers::getTokenFunctions
- * ApiQueryUsers::getUserrightsToken
-* The following classes have been deprecated and may be removed in a future
- release:
- * ApiFormatDbg
- * ApiFormatDump
- * ApiFormatTxt
- * ApiFormatWddx
- * ApiFormatYaml
- * ApiTokens
-* The following class constants have been deprecated and may be removed in a
- future release:
- * ApiBase::PROP_ROOT
- * ApiBase::PROP_LIST
- * ApiBase::PROP_TYPE
- * ApiBase::PROP_NULLABLE
-
-=== Languages updated in 1.24 ===
-
-MediaWiki supports over 350 languages. Many localisations are updated
-regularly. Below only new and removed languages are listed, as well as
-changes to languages because of Bugzilla reports.
-
-=== Other changes in 1.24 ===
-* The deprecated jquery.delayedBind ResourceLoader module was removed.
-* The deprecated function mw.util.toggleToc was removed.
-* The Special:Search hooks SpecialSearchGo and SpecialSearchResultsAppend
- were removed as they were unused.
-* (bug 65477) User::pingLimiter() now has an additional profile point varying
- by action being used.
-* mediawiki.util.$content no longer supports old versions of the Vector,
- Monobook, Modern and CologneBlue skins that don't yet implement the "mw-body"
- and/or "mw-body-primary" class name in their html.
-* Added pp_sortkey column to page_props table, so pages can be efficiently
- queried and sorted by property value (bug 58032).
- See $wgPagePropsHaveSortkey if you want to postpone the schema change.
-* BREAKING CHANGE: All four built-in MediaWiki skins (Vector, MonoBook, Modern
- and Cologne Blue) were moved out of MediaWiki core to their own respective
- repositories. They will be installed with the release tarball, but you must
- install them separately if installing MediaWiki from source code. A warning
- message displayed until you do it should guide you through the process. See
- also <https://www.mediawiki.org/wiki/Manual:Skin_configuration>.
-* BREAKING CHANGE: Skins built for MediaWiki 1.15 and earlier that do not use
- the "headelement" template key are no longer supported. Setting
- $useHeadElement = false; is no longer supported and will not cause old keys
- like "headlinks", "skinnameclass", etc. to be defined.
-* BREAKING CHANGE: The files commonElements.css, commonContent.css and
- commonInterface.css (in skins/common/) have been removed. Skins may no longer
- rely on their presence and include them in their style modules. ResourceLoader
- modules introduced in MediaWiki 1.23 should be loaded instead:
- - skins/common/commonElements.css → 'mediawiki.skinning.elements' module
- - skins/common/commonContent.css → 'mediawiki.skinning.content' module
- - skins/common/commonInterface.css → 'mediawiki.skinning.interface' module
-* The deprecated 'SpecialVersionExtensionTypes' hook was removed.
-* (bug 63891) Add 'X-Robots-Tag: noindex' header in action=render pages.
-* SpecialPage no longer supports the syntax for invoking wfSpecial*() functions.
- Special pages should subclass SpecialPage and implement the execute() method.
-* (bug 63755) The deprecated constants RC_MOVE and RC_MOVE_OVER_REDIRECT were
- removed.
-* Special:MostLinkedTemplates has been renamed to Special:MostTranscludedPages.
-* The skin autodiscovery mechanism has been deprecated and will be removed in
- MediaWiki 1.25. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery
- for migration guide for creators and users of custom skins that relied on it.
-* ResourceLoaderFileModule#getAllStyleFiles now returns all style files and all
- skin style files used by the module.
-* Removed getLang() from IContextSource and subclasses. (deprecated since 1.19)
-* Removed setLang() from subclasses of IContextSource. (deprecated since 1.19)
-* Removed WebRequest::escapeAppendQuery(). (deprecated since 1.20)
-* Removed info(), purge(), revert() and rollback() from the Article class; they
- have since become subclasses of the Action class. (deprecated since 1.19)
-* SearchEngineReplacePrefixesComplete hook was removed.
-* The "jquery.json" module has been deprecated. Use the "json" module instead.
-* Removed HTMLForm::addJS(). (deprecated since 1.18)
-* Removed LogEventsList::showHeader(). (deprecated since 1.19)
-* Removed ImageGalleryBase::useSkin(). (deprecated since 1.18)
-* Removed DatabaseMysqlBase::getLagFromProcesslist(). (deprecated since 1.19)
-* Removed LoadBalancer::closeConnecton(). (deprecated since 1.18)
-* Removed ApiBase::createContext(). (deprecated since 1.19)
-* BREAKING CHANGE: The undocumented Special{$this->getName()}BeforeFormDisplay
- set of hooks has been removed and replaced by a single new hook
- SpecialPageBeforeFormDisplay.
-* (bug 65781) Removed block warning on included {{Special:Contributions}}
-* Removed Skin::makeGlobalVariablesScript(). (deprecated since 1.19)
-* Removed MWNamespace::isMain(). (deprecated since 1.19)
-* Removed Preferences::loadOldSearchNs(). (deprecated since 1.19)
-* Removed OutputPage::getStatusMessage(). (deprecated since 1.18)
-* Removed OutputPage::isUserJsAllowed(). (deprecated since 1.18)
-* Removed Title::updateTitleProtection(). (deprecated since 1.19)
-* Removed ParserOptions::setSkin(). (deprecated since 1.19)
-* Removed Title::escapeCanonicalURL(). (deprecated since 1.19)
-* Removed Title::escapeLocalURL(). (deprecated since 1.19)
-* Removed Title::escapeFullURL(). (deprecated since 1.19)
-* Removed User::isValidEmailAddr(). (deprecated since 1.18)
-* Removed Title::getEscapedText(). (deprecated since 1.19)
-* Removed Language::getFallbackLanguageCode(). (deprecated since 1.19)
-* Removed WikiPage::isBigDeletion(). (deprecated since 1.19)
-* Removed MWInit class which contained functions related to a now discontinued
- PHP compiler called hphpc. (deprecated since 1.22)
-* ApiResult::enableSizeCheck() and disableSizeCheck() are now obsolete.
-* Removed ResourceLoaderGetStartupModules hook. (deprecated since 1.23)
-* Removed getFormFields(), onSubmit() and onSuccess() from FormlessAction, as
- these were meant specifically for FormAction instead.
-* Removed Action::execute().
-* Removed AjaxAddScript which has been obsolete since ResourceLoader and
- is unused by any modern extension.
-* Removed maintenance/nextJobDB.php; no longer in use.
-* Removed global function wfViewPrevNext(). (deprecated since 1.19)
-* Removed global function xmlsafe() from Export.php. (moved to OAIRepo extension)
-* Removed Title::userCanRead(). (deprecated since 1.19)
-* Removed maintenance script importTextFile.php. Use edit.php script instead.
-* A _from_namespace field has been added to the templatelinks, pagelinks,
- and filelinks tables. Run update.php to apply this change to the schema.
-* Removed File::sha1Base36(). (deprecated since 1.19)
-* Removed File::getPropsFromPath(). (deprecated since 1.19)
-* Removed functions blockedPage(), noCreatePermission(), readOnlyPage() and
- userNotLoggedInPage() from EditPage.php. (deprecated since 1.19)
-* Removed functions getContent(), getPreloadedText(), mergeChangesInto() and
- setPreloadedText() from EditPage.php. (deprecated since 1.21)
-* Removed global functions wfArrayLookup(), wfArrayMerge(), wfDebugDieBacktrace()
- and wfTime(). (deprecated since 1.22)
-* Browser support for Internet Explorer 6 and 7 lowered from Grade A to Grade C,
- meaning that JavaScript is no longer executed in these browser versions.
-* Browser support for Opera 11 lowered from Grade A to Grade C.
-* Removed IEFixes module which existed purely to provide support for MSIE versions
- below 7 (conditionally loaded only for those browsers).
-* Deprecated SpecialPageFactory::getList() in favor of
- SpecialPageFactory::getNames()
-* Action::checkCanExecute() no longer has a return value.
-* Removed cleanupForIRC(), loadFromCurRow(), newFromCurRow(), notifyRC2UDP()
- and sendToUDP() from RecentChange.php. (deprecated since 1.22)
-* Removed EnhancedChangesList::arrow(), sideArrow(), downArrow(), spacerArrow().
-* Removed Xml::namespaceSelector(). (deprecated since 1.19)
-* Removed WikiPage::estimateRevisionCount(). (deprecated since 1.19)
-* MYSQL: Enum item added to "major MIME type" columns.
- Running update.php on MySQL < v5.1 may result in heavy processing.
-* RSS and Atom feeds generated by MediaWiki no longer include a fallback
- stylesheet. It was ignored by most browsers these days anyway.
-* SpecialSearchNoResults hook has been removed. SpecialSearchResults is now
- called unconditionally.
-* TablePager::getBody() is now 'final' and can't be overridden in subclasses.
-* TablePager::getBody() is deprecated, use getBodyOutput() or getFullOutput().
-* Added $outputPage parameter to the SkinTemplateGetLanguageLink hook.
-* log_page for move log entries store the original page ID, rather than that
- of the new redirect page. This is not retroactive.
-* LCStoreAccel was removed. $wgLocalisationCacheConf can no longer be set to
- use this store class.
-* Html::infoBox() no longer accepts paths relative to skins/common/images/.
-* Deprecated defunct Skin::getCommonStylePath().
-* Some extensions had their ResourceLoader modules depend on the "mediawiki"
- and "jquery" modules. In the past, this behavior was undefined, now it will
- throw an error.
-* Removed BagOStuff::replace(). (deprecated since 1.23)
-* In Linker.php, link(), linkText() and makeBrokenImageLinkObj() now display
- warnings if their first parameter is not a Title object. Also makeImageLink()
- now requires a Parser as its first parameter.
-* (bug 67368) LESS functions embed() and embeddable(), added in MediaWiki 1.23
- and broken by design, have been removed. Use appropriate LESS mixins instead.
-* Removed cssjanus.py from maintenance directory as it was unused.
-* Removed maintenance/purgeOldText.inc and the PurgeRedundantText() function
- it contained (superseded by Maintenance::purgeRedundantText() in 1.16).
- The purgeOldText.php maintenance script has been retained.
-* (Bug 70630) PHPUnit tests can be found by directory discovery, by adding the
- directory path from your UnitTestsList callback. Older versions of
- MediaWiki core will barf at this usage.
-
-==== Renamed classes ====
-* CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
-* CLDRPluralRuleConverter_Fragment to CLDRPluralRuleConverterFragment
-* CLDRPluralRuleConverter_Operator to CLDRPluralRuleConverterOperator
-* CLDRPluralRuleEvaluator_Range to CLDRPluralRuleEvaluatorRange
-* CSSJanus_Tokenizer to CSSJanusTokenizer
-* MediaWiki_I18N to MediaWikiI18N
-* Parser_DiffTest to ParserDiffTest
-* RevDel_ArchiveItem to RevDelArchiveItem
-* RevDel_ArchiveList to RevDelArchiveList
-* RevDel_ArchivedFileItem to RevDelArchivedFileItem
-* RevDel_ArchivedFileList to RevDelArchivedFileList
-* RevDel_ArchivedRevisionItem to RevDelArchivedRevisionItem
-* RevDel_FileItem to RevDelFileItem
-* RevDel_FileList to RevDelFileList
-* RevDel_Item to RevDelItem
-* RevDel_List to RevDelList
-* RevDel_LogItem to RevDelLogItem
-* RevDel_LogList to RevDelLogList
-* RevDel_RevisionItem to RevDelRevisionItem
-* RevDel_RevisionList to RevDelRevisionList
-* WebInstaller_Complete to WebInstallerComplete
-* WebInstaller_Copying to WebInstallerCopying
-* WebInstaller_DBConnect to WebInstallerDBConnect
-* WebInstaller_DBSettings to WebInstallerDBSettings
-* WebInstaller_Document to WebInstallerDocument
-* WebInstaller_ExistingWiki to WebInstallerExistingWiki
-* WebInstaller_Install to WebInstallerInstall
-* WebInstaller_Language to WebInstallerLanguage
-* WebInstaller_Name to WebInstallerName
-* WebInstaller_Options to WebInstallerOptions
-* WebInstaller_Readme to WebInstallerReadme
-* WebInstaller_ReleaseNotes to WebInstallerReleaseNotes
-* WebInstaller_Restart to WebInstallerRestart
-* WebInstaller_Upgrade to WebInstallerUpgrade
-* WebInstaller_UpgradeDoc to WebInstallerUpgradeDoc
-* WebInstaller_Welcome to WebInstallerWelcome
-
-==== Removed classes ====
-* IPBlockForm - Use SpecialBlock directly
-* WatchlistEditor - Use SpecialEditWatchlist directly
-* FormatExif - Use FormatMetadata directly
-* RevertFileAction - Use RevertAction directly
-* HistoryPage - Use HistoryAction directly
-* RawPage - Use RawAction directly
-* StubContLang - Use Language::factory() instead
-* XMLReader2 - Use XMLReader directly
-* ResourceLoaderLESSFunctions - No longer in use, not intended for public usage
-
-==== Removed files ====
-The skins/common/ directory, previously containing some assets intended to be
-used by skins and a number of legacy styles and scripts, has been removed. Its
-contents have been deleted or relocated into the resources/ directory. Full list
-of files that are no longer available follows.
-
-* skins/common/ajax.js
-* skins/common/commonContent.css
-* skins/common/commonElements.css
-* skins/common/commonInterface.css
-* skins/common/commonPrint.css
-* skins/common/config-cc.css
-* skins/common/config.css
-* skins/common/config.js
-* skins/common/feed.css
-* skins/common/IEFixes.js
-* skins/common/oldshared.css
-* skins/common/protect.js
-* skins/common/shared.css
-* skins/common/upload.js
-* skins/common/wikibits.js
-* skins/common/images/add.png
-* skins/common/images/ajax-loader.gif
-* skins/common/images/arrow_disabled_first_25.png
-* skins/common/images/arrow_disabled_last_25.png
-* skins/common/images/arrow_disabled_left_25.png
-* skins/common/images/arrow_disabled_right_25.png
-* skins/common/images/arrow_first_25.png
-* skins/common/images/arrow_last_25.png
-* skins/common/images/arrow_left_25.png
-* skins/common/images/arrow_right_25.png
-* skins/common/images/Arr_.png
-* skins/common/images/Arr_d.png
-* skins/common/images/Arr_l.png
-* skins/common/images/Arr_r.png
-* skins/common/images/Arr_u.png
-* skins/common/images/bullet.gif
-* skins/common/images/button_bold.png
-* skins/common/images/button_extlink.png
-* skins/common/images/button_headline.png
-* skins/common/images/button_hr.png
-* skins/common/images/button_image.png
-* skins/common/images/button_italic.png
-* skins/common/images/button_link.png
-* skins/common/images/button_media.png
-* skins/common/images/button_nowiki.png
-* skins/common/images/button_sig.png
-* skins/common/images/button_template.png
-* skins/common/images/cc-0.png
-* skins/common/images/cc-by-nc-sa.png
-* skins/common/images/cc-by-sa.png
-* skins/common/images/cc-by.png
-* skins/common/images/Checker-16x16.png
-* skins/common/images/closewindow.png
-* skins/common/images/closewindow19x19.png
-* skins/common/images/critical-32.png
-* skins/common/images/diffunderline.gif
-* skins/common/images/download-32.png
-* skins/common/images/feed-icon.png
-* skins/common/images/feed-icon.svg
-* skins/common/images/gnu-fdl.png
-* skins/common/images/help-question-hover.gif
-* skins/common/images/help-question.gif
-* skins/common/images/info-32.png
-* skins/common/images/link_icon.gif
-* skins/common/images/magnify-clip-rtl.png
-* skins/common/images/magnify-clip.png
-* skins/common/images/mediawiki.png
-* skins/common/images/nextredirectltr.png
-* skins/common/images/nextredirectrtl.png
-* skins/common/images/poweredby_mediawiki_88x31.png
-* skins/common/images/public-domain.png
-* skins/common/images/question-small.png
-* skins/common/images/question.svg
-* skins/common/images/redirectltr.png
-* skins/common/images/redirectrtl.png
-* skins/common/images/remove.png
-* skins/common/images/spinner.gif
-* skins/common/images/tick-32.png
-* skins/common/images/tipsy-arrow.gif
-* skins/common/images/tooltip_icon.png
-* skins/common/images/warning-32.png
-* skins/common/images/wiki.png
-* skins/common/images/Zoom_sans.gif
-* skins/common/images/ar/button_bold.png
-* skins/common/images/ar/button_headline.png
-* skins/common/images/ar/button_italic.png
-* skins/common/images/ar/button_link.png
-* skins/common/images/ar/button_nowiki.png
-* skins/common/images/be-tarask/button_bold.png
-* skins/common/images/be-tarask/button_italic.png
-* skins/common/images/be-tarask/button_link.png
-* skins/common/images/cyrl/button_bold.png
-* skins/common/images/cyrl/button_italic.png
-* skins/common/images/cyrl/button_link.png
-* skins/common/images/de/button_bold.png
-* skins/common/images/de/button_italic.png
-* skins/common/images/fa/button_bold.png
-* skins/common/images/fa/button_headline.png
-* skins/common/images/fa/button_italic.png
-* skins/common/images/fa/button_link.png
-* skins/common/images/fa/button_nowiki.png
-* skins/common/images/icons/fileicon-c.png
-* skins/common/images/icons/fileicon-cpp.png
-* skins/common/images/icons/fileicon-deb.png
-* skins/common/images/icons/fileicon-djvu.png
-* skins/common/images/icons/fileicon-djvu.xcf
-* skins/common/images/icons/fileicon-dvi.png
-* skins/common/images/icons/fileicon-exe.png
-* skins/common/images/icons/fileicon-h.png
-* skins/common/images/icons/fileicon-html.png
-* skins/common/images/icons/fileicon-iso.png
-* skins/common/images/icons/fileicon-java.png
-* skins/common/images/icons/fileicon-mid.png
-* skins/common/images/icons/fileicon-mov.png
-* skins/common/images/icons/fileicon-o.png
-* skins/common/images/icons/fileicon-ogg.png
-* skins/common/images/icons/fileicon-ogg.xcf
-* skins/common/images/icons/fileicon-pdf.png
-* skins/common/images/icons/fileicon-ps.png
-* skins/common/images/icons/fileicon-psd.png
-* skins/common/images/icons/fileicon-rm.png
-* skins/common/images/icons/fileicon-rpm.png
-* skins/common/images/icons/fileicon-svg.png
-* skins/common/images/icons/fileicon-tar.png
-* skins/common/images/icons/fileicon-tex.png
-* skins/common/images/icons/fileicon-ttf.png
-* skins/common/images/icons/fileicon-txt.png
-* skins/common/images/icons/fileicon.png
-* skins/common/images/ksh/button_S_italic.png
-
-== Compatibility ==
-
-MediaWiki 1.24 requires PHP 5.3.2 or later. There is experimental support for
-HHVM 3.3.0.
-
-MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
-support for them is somewhat less mature. There is experimental support for
-Oracle and Microsoft SQL Server.
-
-The supported versions are:
-
-* MySQL 5.0.2 or later
-* PostgreSQL 8.3 or later
-* SQLite 3.3.7 or later
-* Oracle 9.0.1 or later
-* Microsoft SQL Server 2005 (9.00.1399)
-
-== Upgrading ==
-
-1.24 has several database changes since 1.23, and will not work without schema
-updates. Note that due to changes to some very large tables like the revision
-table, the schema update may take quite long (minutes on a medium sized site,
-many hours on a large site).
-
-If upgrading from before 1.11, and you are using a wiki as a commons
-repository, make sure that it is updated as well. Otherwise, errors may arise
-due to database schema changes.
-
-If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
-new database fields are filled with data.
-
-If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
-1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
-with MediaWiki 1.21.
-
-Don't forget to always back up your database before upgrading!
-
-See the file UPGRADE for more detailed upgrade instructions.
-
-For notes on 1.23.x and older releases, see HISTORY.
-
-== Online documentation ==
-
-Documentation for both end-users and site administrators is available on
-MediaWiki.org, and is covered under the GNU Free Documentation License (except
-for pages that explicitly state that their contents are in the public domain):
-
- https://www.mediawiki.org/wiki/Documentation
-
-== Mailing list ==
-
-A mailing list is available for MediaWiki user support and discussion:
-
- https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
-
-A low-traffic announcements-only list is also available:
-
- https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
-
-It's highly recommended that you sign up for one of these lists if you're
-going to run a public MediaWiki, so you can be notified of security fixes.
-
-== IRC help ==
-
-There's usually someone online in #mediawiki on irc.freenode.net.
diff --git a/RELEASE-NOTES-1.25 b/RELEASE-NOTES-1.25
new file mode 100644
index 00000000..223cf97c
--- /dev/null
+++ b/RELEASE-NOTES-1.25
@@ -0,0 +1,581 @@
+Security reminder: If you have PHP's register_globals option set, you must
+turn it off. MediaWiki will not work with it enabled.
+
+== MediaWiki 1.25.1 ==
+
+This is a bug fix release of the MediaWiki 1.25 branch.
+
+== Changes since 1.25.1 ==
+
+* (T100351) Fix syntax errors in extension.json of ConfirmEdit extension
+
+== MediaWiki 1.25 ==
+
+=== Configuration changes in 1.25 ===
+* $wgPageShowWatchingUsers was removed.
+* $wgLocalVirtualHosts has been added to replace $wgConf->localVHosts.
+* $wgAntiLockFlags was removed.
+* $wgJavaScriptTestConfig was removed.
+* Edit tokens returned from User::getEditToken may change on every call. Token
+ validity must be checked by passing the user-supplied token to
+ User::matchEditToken rather than by testing for equality with a
+ newly-generated token.
+* (T74951) The UserGetLanguageObject hook may be passed any IContextSource
+ for its $context parameter. Formerly it was documented as receiving a
+ RequestContext specifically.
+* Profiling was restructured and $wgProfiler now requires an 'output' parameter.
+ See StartProfiler.sample for details.
+* $wgMangleFlashPolicy was added to make MediaWiki's mangling of anything that
+ might be a flash policy directive configurable.
+* ApiOpenSearch now supports XML output. The OpenSearchXml extension should no
+ longer be used. If extracts and page images are desired, the TextExtracts and
+ PageImages extensions are required.
+* $wgOpenSearchTemplate is deprecated in favor of $wgOpenSearchTemplates.
+* Edits are now prepared via AJAX as users type edit summaries. This behavior
+ can be disabled via $wgAjaxEditStash.
+* (T46740) The temporary option $wgIncludejQueryMigrate was removed, along
+ with the jQuery Migrate library, as indicated when this option was provided in
+ MediaWiki 1.24.
+* ProfilerStandard and ProfilerSimpleTrace were removed. Make sure that any
+ StartProfiler.php config is updated to reflect this. Xhprof is available
+ for zend/hhvm. Also, for hhvm, one can consider using its xenon profiler.
+* Default value of $wgSVGConverters['rsvg'] now uses the 'rsvg-convert' binary
+ rather than 'rsvg'.
+* Default value of $wgSVGConverters['ImageMagick'] now uses transparent
+ background with white fallback color, rather than just white background.
+ * MediaWikiBagOStuff class removed, make sure any object cache config
+ uses SqlBagOStuff instead.
+* The 'daemonized' flag must be set to true in $wgJobTypeConf for any redis
+ job queues. This means that mediawiki/services/jobrunner service has to
+ be installed and running for any such queues to work.
+* $wgAutopromoteOnce no longer supports the 'view' event. For keeping some
+ compatibility, any 'view' event triggers will still trigger on 'edit'.
+* $wgExtensionDirectory was added for when your extensions directory is somewhere
+ other than $IP/extensions (as $wgStyleDirectory does with the skins directory).
+
+=== New features in 1.25 ===
+* (T64861) Updated plural rules to CLDR 26. Includes incompatible changes
+ for plural forms in Russian, Prussian, Tagalog, Manx and several languages
+ that fall back to Russian.
+* (T60139) ResourceLoaderFileModule now supports language fallback
+ for 'languageScripts'.
+* Added a new hook, "ContentAlterParserOutput", to allow extensions to modify the
+ parser output for a content object before links update.
+* (T37785) Enhanced recent changes and extended watchlist are now default.
+ Documentation: https://meta.wikimedia.org/wiki/Help:Enhanced_recent_changes
+ and https://www.mediawiki.org/wiki/Manual:$wgDefaultUserOptions.
+* (T69341) SVG images will no longer be base64-encoded when being embedded
+ in CSS. This results in slight size increase before gzip compression (due to
+ percent-encoding), but up to 20% decrease after it.
+* Update jStorage to v0.4.12.
+* MediaWiki now natively supports page status indicators: icons (or short text
+ snippets) usually displayed in the top-right corner of the page. They have
+ been in use on Wikipedia for a long time, implemented using templates and CSS
+ absolute positioning.
+ - Basic wikitext syntax: <indicator name="foo">[[File:Foo.svg|20px]]</indicator>
+ - Usage instructions: https://www.mediawiki.org/wiki/Help:Page_status_indicators
+ - Adjusting custom skins to support indicators:
+ https://www.mediawiki.org/wiki/Manual:Skinning#Page_status_indicators
+* Edit tokens may now be time-limited: passing a maximum age to
+ User::matchEditToken will reject any older tokens.
+* The debug logging internals have been overhauled, and are now using the
+ PSR-3 interfaces.
+* Update CSSJanus to v1.1.1.
+* Update lessphp to v0.5.0.
+* Added a hook, "ApiOpenSearchSuggest", to allow extensions to provide extracts
+ and images for ApiOpenSearch output. The semantics are identical to the
+ "OpenSearchXml" hook provided by the OpenSearchXml extension.
+* PrefixSearchBackend hook now has an $offset parameter. Combined with $limit,
+ this allows for pagination of prefix results. Extensions using this hook
+ should implement supporting behavior. Not doing so can result in undefined
+ behavior from API clients trying to continue through prefix results.
+* Update jQuery from v1.11.1 to v1.11.3.
+* External libraries installed via composer will now be displayed
+ on Special:Version in their own section. Extensions or skins that are
+ installed via composer will not be shown in this section as it is assumed
+ they will add the proper credits to the skins or extensions section. They
+ can also be accessed through the API via the new siprop=libraries to
+ ApiQuerySiteInfo.
+* Update QUnit from v1.14.0 to v1.16.0.
+* Update Moment.js from v2.8.3 to v2.8.4.
+* Special:Tags now allows for manipulating the list of user-modifiable change
+ tags.
+* Added 'managetags' user right and 'ChangeTagCanCreate', 'ChangeTagCanDelete',
+ and 'ChangeTagCanCreate' hooks to allow for managing user-modifiable change
+ tags.
+* Added 'ChangeTagsListActive' hook, to separate the concepts of "defined" and
+ "active" formerly conflated by the 'ListDefinedTags' hook.
+* Added TemplateParser class that provides a server-side interface to cachable
+ dynamically-compiled Mustache templates (currently uses lightncandy library).
+* Clickable anchors for each section heading in the content are now generated
+ and appear in the gutter on hovering over the heading.
+* Added 'CategoryViewer::doCategoryQuery' and 'CategoryViewer::generateLink' hooks
+ to allow extensions to override how links to pages are rendered within NS_CATEGORY
+* (T19665) Special:WantedPages only lists page which having at least one red link
+ pointing to it.
+* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be
+ used for conditional registration of API modules.
+* New hook 'EnhancedChangesList::getLogText' to alter, remove or add to the
+ links of a group of changes in EnhancedChangesList.
+* A full interface for StatsD metric reporting has been added to the context
+ interface, reachable via IContextSource::getStats().
+* Move the jQuery Client library from being mastered in MediaWiki as v0.1.0 to a
+ proper, published library, which is now tagged as v1.0.0.
+* A new message (defaulting to blank), 'editnotice-notext', can be shown to users
+ when they are editing if no edit notices apply to the page being edited.
+* (T94536) You can now make the sitenotice appear to logged-in users only by
+ editing MediaWiki:Anonnotice and replacing its content with "". Setting it to
+ "-" (default) will continue disable it and fallback to MediaWiki:Sitenotice.
+* Modifying the tagging of a revision or log entry is now available via
+ Special:EditTags, generally accessed via the revision-deletion-like interface
+ on history pages and Special:Log is likely to be more useful.
+* Added 'applychangetags' and 'changetags' user rights.
+* (T35235) LogFormatter subclasses are now responsible for formatting the
+ parameters for API log event output. Extensions should implement the new
+ getParametersForApi() method in their log formatters.
+
+==== External libraries ====
+* MediaWiki now requires certain external libraries to be installed. In the past
+ these were bundled inside the Git repository of MediaWiki core, but now they
+ need to be installed separately. For users using the tarball, this will be taken
+ care of and no action will be required. Users using Git will either need to use
+ composer to fetch dependencies or use the mediawiki/vendor repository which includes
+ all dependencies for MediaWiki core and ones used in Wikimedia deployment. Detailed
+ instructions can be found at:
+ https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries
+* The following libraries are now required:
+** psr/log
+ This library provides the interfaces set by the PSR-3 standard (http://www.php-fig.org/psr/psr-3/)
+ which are used by MediaWiki internally via the
+ MediaWiki\Logger\LoggerFactory class.
+ See the structured logging RfC (https://www.mediawiki.org/wiki/Requests_for_comment/Structured_logging)
+ for more background information.
+** cssjanus/cssjanus
+ This library was formerly bundled with MediaWiki core and has been removed.
+ It automatically flips CSS for RTL support.
+** leafo/lessphp
+ This library was formerly bundled with MediaWiki core and has been removed.
+ It compiles LESS files into CSS.
+** wikimedia/cdb
+ This library was formerly a part of MediaWiki core, and has been moved into a separate library.
+ It provides CDB functions which are used in the Interwiki and Localization caches.
+ More information about the library can be found at https://www.mediawiki.org/wiki/CDB.
+** liuggio/statsd-php-client
+ This library provides a StatsD client API for logging application metrics to a remote server.
+
+=== Bug fixes in 1.25 ===
+* (T73003) No additional code will be generated to try to load CSS-embedded
+ SVG images in Internet Explorer 6 and 7, as they don't support them anyway.
+* (T69021) On Special:BookSources, corrected validation of ISBNs (both
+ 10- and 13-digit forms) containing "X".
+* Page moving was refactored into a MovePage class. As part of that:
+** The AbortMove hook was removed.
+** MovePageIsValidMove is for extensions to specify whether a page
+ cannot be moved for technical reasons, and should not be overridden.
+** MovePageCheckPermissions is for checking whether the given user is
+ allowed to make the move.
+** Title::moveNoAuth() was deprecated. Use the MovePage class instead.
+** Title::moveTo() was deprecated. Use the MovePage class instead.
+** Title::isValidMoveOperation() broken down into MovePage::isValidMove()
+ and MovePage::checkPermissions().
+* (T18530) Multiple autocomments are now formatted in an edit summary.
+* (T70361) Autocomments containing "/*" are parsed correctly.
+* The Special:WhatLinksHere page linked from 'Number of redirects to this page'
+ on action=info about a file page does not list file links anymore.
+* (T78637) Search bar is not autofocused unless it is empty so that proper scrolling using arrow keys is possible.
+* (T50853) Database::makeList() modified to handle 'NULL' separately when building IN clause
+* (T85192) Captcha position modified in Usercreate template. As a result:
+** extrafields parameter added to Usercreate.php to insert additional data
+** 'extend' method added to QuickTemplate to append additional values to any field of data array
+* (T86974) Several Title methods now load from the database when necessary
+ (instead of returning incorrect results) even when the page ID is known.
+* (T74070) Duplicate search for archived files on file upload now omits the extension.
+ This requires the fa_sha1 field being populated.
+* Removed rel="archives" from the "View history" link, as it did not pass
+ HTML validation.
+* $wgUseTidy is now set when parserTests are run with the tidy option to match
+ output on wiki.
+* (T37472) update.php will purge ResourceLoader cache unless --nopurge is passed to it.
+* (T72109) mediawiki.language should respect $wgTranslateNumerals in convertNumber().
+
+=== Action API changes in 1.25 ===
+* (T67403) XML tag highlighting is now only performed for formats
+ "xmlfm" and "wddxfm".
+* action=paraminfo supports generalized submodules (modules=query+value),
+ querymodules and formatmodules are deprecated
+* action=paraminfo no longer outputs descriptions and other help text by
+ default. If needed, it may be requested using the new 'helpformat' parameter.
+* action=help has been completely rewritten, and outputs help in HTML
+ rather than plain text.
+* Hitting api.php without specifying an action now displays only the help for
+ the main module, with links to submodule help.
+* API help is no longer displayed on errors.
+* 'uselang' is now a recognized API parameter; "uselang=user" may be used to
+ explicitly select the language from the current user's preferences, and
+ "uselang=content" may be used to select the wiki's content language.
+* Default output format for the API is now jsonfm.
+* Simplified continuation will return a "batchcomplete" property in the result
+ when a batch of pages is complete.
+* Pretty-printed HTML output now has nicer formatting and (if available)
+ better syntax highlighting.
+* Deprecated list=deletedrevs in favor of newly-added prop=deletedrevisions and
+ list=alldeletedrevisions.
+* prop=revisions will gracefully continue when given too many revids or titles,
+ rather than just ignoring the extras.
+* prop=revisions will no longer die if rvcontentformat doesn't match a
+ revision's content model; it will instead warn and omit the content.
+* If the user has the 'deletedhistory' right, action=query's revids parameter
+ will now recognize deleted revids.
+* prop=revisions may be used as a generator, generating revids.
+* (T68776) format=json results will no longer be corrupted when
+ $wgMangleFlashPolicy is in effect. format=php results will cleanly return an
+ error instead of returning invalid serialized data.
+* Generators may now return data for the generated pages when used with
+ action=query.
+* Query page data for generator=search and generator=prefixsearch will now
+ include an "index" field, which may be used by the client for sorting the
+ search results.
+* ApiOpenSearch now supports XML output.
+* ApiOpenSearch will now output descriptions and URLs as array indexes 2 and 3
+ in JSON format.
+* (T76051) list=tags will now continue correctly.
+* (T76052) list=tags can now indicate whether a tag is defined.
+* (T75522) list=prefixsearch now supports continuation
+* (T78737) action=expandtemplates can now return page properties.
+* (T78690) list=allimages now accepts multiple pipe-separated values
+ for the 'aimime' parameter.
+* prop=info with inprop=protections will now return applicable protection types
+ with the 'restrictiontypes' key.
+* (T85417) When resolving redirects, ApiPageSet will now add the targets of
+ interwiki redirects to the list of interwiki titles.
+* (T85417) When outputting the list of redirect titles, a 'tointerwiki'
+ property (like the existing 'tofragment' property) will be set.
+* Added action=managetags to allow for managing the list of
+ user-modifiable change tags. Actually modifying the tagging of a revision or
+ log entry is not implemented yet.
+* list=tags has additional properties to indicate 'active' status and tag
+ sources.
+* siprop=libraries was added to ApiQuerySiteInfo to list installed external libraries.
+* (T88010) Added action=checktoken, to test a CSRF token's validity.
+* (T88010) Added intestactions to prop=info, to allow querying of
+ Title::userCan() via the API.
+* Default type param for query list=watchlist and list=recentchanges has
+ been changed from all types (e.g. including 'external') to 'edit|new|log'.
+* Added formatversion to format=json. Still "experimental" as further changes
+ to the output formatting might still be made.
+* (T73020) Log event details are now always under a 'params' subkey for
+ list=logevents, and a 'logparams' subkey for list=watchlist and
+ list=recentchanges.
+* Log event details are changing formatting:
+ * block events now report flags as an array rather than as a comma-separated
+ list.
+ * patrol events now report the 'auto' flag as a boolean (absent/empty string
+ for BC formats) rather than as an integer.
+ * rights events now report the old and new group lists as arrays rather than
+ as comma-separated lists.
+ * merge events use new-style formatting.
+ * delete/event and delete/revision events use new-style formatting.
+* The root node and various other nodes will now always be an object in formats
+ such as json that distinguish between arrays and objects.
+ * Except for action=opensearch where the spec requires an array.
+
+=== Action API internal changes in 1.25 ===
+* ApiHelp has been rewritten to support i18n and paginated HTML output.
+ Most existing modules should continue working without changes, but should do
+ the following:
+ * Add an i18n message "apihelp-{$moduleName}-description" to replace getDescription().
+ * Add i18n messages "apihelp-{$moduleName}-param-{$param}" for each parameter
+ to replace getParamDescription(). If necessary, the settings array returned
+ by getParams() can use the new ApiBase::PARAM_HELP_MSG key to override the
+ message.
+ * Implement getExamplesMessages() to replace getExamples().
+* Modules with submodules (like action=query) must have their submodules
+ override ApiBase::getParent() to return the correct parent object.
+* The 'APIGetDescription' and 'APIGetParamDescription' hooks are deprecated,
+ and will have no effect for modules using i18n messages. Use
+ 'APIGetDescriptionMessages' and 'APIGetParamDescriptionMessages' instead.
+* Api formatters will no longer be asked to display the help screen on errors.
+* ApiMain::getCredits() was removed. The credits are available in the
+ 'api-credits' i18n message.
+* ApiFormatBase has been changed to support i18n and syntax highlighting via
+ extensions with the new 'ApiFormatHighlight' hook. Core syntax highlighting
+ has been removed.
+* ApiFormatBase now always buffers. Output is done when
+ ApiFormatBase::closePrinter is called.
+* Much of the logic in ApiQueryRevisions has been split into ApiQueryRevisionsBase.
+* The 'revids' parameter supplied by ApiPageSet will now count deleted
+ revisions as "good" if the user has the 'deletedhistory' right. New methods
+ ApiPageSet::getLiveRevisionIDs() and ApiPageSet::getDeletedRevisionIDs() are
+ provided to access just the live or just the deleted revids.
+* Added ApiPageSet::setGeneratorData() and ApiPageSet::populateGeneratorData()
+ to allow generators to include data in the action=query result.
+* New hooks 'ApiMain::moduleManager' and 'ApiQuery::moduleManager', can be
+ used for conditional registration of API modules.
+* Added ApiBase::lacksSameOriginSecurity() to allow modules to easily check if
+ the current request was sent with the 'callback' parameter (or any future
+ method that breaks the same-origin policy).
+* Profiling methods in ApiBase are deprecated and no longer need to be called.
+* ApiResult was greatly overhauled. See inline documentation for details.
+* ApiResult will automatically convert objects to strings or arrays (depending
+ on whether a __toString() method exists on the object), and will refuse to
+ add unsupported value types.
+ * An informal interface, ApiSerializable, exists to override the default
+ object conversion.
+* ApiResult/ApiFormatBase "raw mode" is deprecated.
+* ApiFormatXml now assumes defaults and so on instead of throwing errors when
+ metadata isn't set.
+* (T35235) LogFormatter subclasses are now responsible for formatting log event
+ parameters for the API.
+* Many modules have changed result data formats. While this shouldn't affect
+ clients not using the experimental formatversion=2, code using
+ ApiResult::getResultData() without the transformations for backwards
+ compatibility may need updating, as will code that wasn't following the old
+ conventions for API boolean output.
+* The following methods have been deprecated and may be removed in a future
+ release:
+ * ApiBase::getDescription
+ * ApiBase::getParamDescription
+ * ApiBase::getExamples
+ * ApiBase::makeHelpMsg
+ * ApiBase::makeHelpArrayToString
+ * ApiBase::makeHelpMsgParameters
+ * ApiBase::getModuleProfileName
+ * ApiBase::profileIn
+ * ApiBase::profileOut
+ * ApiBase::safeProfileOut
+ * ApiBase::getProfileTime
+ * ApiBase::profileDBIn
+ * ApiBase::profileDBOut
+ * ApiBase::getProfileDBTime
+ * ApiBase::getResultData
+ * ApiFormatBase::setUnescapeAmps
+ * ApiFormatBase::getWantsHelp
+ * ApiFormatBase::setHelp
+ * ApiFormatBase::formatHTML
+ * ApiFormatBase::setBufferResult
+ * ApiFormatBase::getDescription
+ * ApiFormatBase::getNeedsRawData
+ * ApiMain::setHelp
+ * ApiMain::reallyMakeHelpMsg
+ * ApiMain::makeHelpMsgHeader
+ * ApiResult::setRawMode
+ * ApiResult::getIsRawMode
+ * ApiResult::getData
+ * ApiResult::setElement
+ * ApiResult::setContent
+ * ApiResult::setIndexedTagName_recursive
+ * ApiResult::setIndexedTagName_internal
+ * ApiResult::setParsedLimit
+ * ApiResult::beginContinuation
+ * ApiResult::setContinueParam
+ * ApiResult::setGeneratorContinueParam
+ * ApiResult::endContinuation
+ * ApiResult::size
+ * ApiResult::convertStatusToArray
+ * ApiQueryImageInfo::getPropertyDescriptions
+ * ApiQueryLogEvents::addLogParams
+* The following classes have been deprecated and may be removed in a future
+ release:
+ * ApiQueryDeletedrevs
+
+=== Languages updated in 1.25 ===
+
+MediaWiki supports over 350 languages. Many localisations are updated
+regularly. Below only new and removed languages are listed, as well as
+changes to languages because of Bugzilla reports.
+
+* Languages added:
+** awa (अवधी / Awadhi), thanks to translator 1AnuraagPandey;
+** bgn (بلوچی رخشانی / Western Balochi), thanks to translators
+ Baloch Afghanistan, Ibrahim khashrowdi and Rachitrali;
+** ses (Koyraboro Senni), thanks to translator Songhay.
+* (T66440) Kazakh (kk) wikis should no longer forcefully reset the user's
+ interface language to kk where unexpected.
+* The Chinese conversion table was substantially updated to fix a lot of
+ bugs and ensure better reading experience for different variants.
+
+=== Other changes in 1.25 ===
+* (T45591) Links to MediaWiki.org translatable help were added to indicators,
+ mostly in special pages. Local custom target titles can be placed in the
+ relevant '(namespace-X|action name|special page name)-helppage' system
+ message. Extensions can use the addHelpLink() function to do the same.
+* The skin autodiscovery mechanism, deprecated in MediaWiki 1.23, has been
+ removed. See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for
+ migration guide for creators and users of custom skins that relied on it.
+* Javascript variables 'wgFileCanRotate' and 'wgFileExtensions' now only
+ available on Special:Upload.
+* (T58257) Set site logo from mediawiki.skinning.interface module instead of
+ inline styles in the HTML.
+* Removed ApiQueryUsers::getAutoGroups(). (deprecated since 1.20)
+* Removed XmlDumpWriter::schemaVersion(). (deprecated since 1.20)
+* Removed LogEventsList::getDisplayTitle(). (deprecated since 1.20)
+* Removed Preferences::trySetUserEmail(). (deprecated since 1.20)
+* Removed mw.user.name() and mw.user.anonymous() methods. (deprecated since 1.20)
+* Removed 'ok' and 'err' parameters in the mediawiki.api modules. (deprecated
+ since 1.20)
+* Removed 'async' parameter from the mw.Api#getCategories() method. (deprecated
+ since 1.20)
+* Removed 'jquery.json' module. (deprecated since 1.24)
+ Use the 'json' module and global JSON object instead.
+* Deprecated OutputPage::readOnlyPage() and OutputPage::rateLimited().
+ Also, the former will now throw an MWException if called with one or more
+ arguments.
+* Removed hitcounters and associated code.
+* The "temp" zone of the upload respository is now considered private. If it
+ already exists (such as under the images/ directory), please make sure that
+ the directory is not web readable (e.g. via a .htaccess file).
+* BREAKING CHANGE: In the XML dump format used by Special:Export and
+ dumpBackup.php, the <model> and <format> tags now apprear before the <text>
+ tag, instead of after the <text> and <sha1> tags.
+ The new schema version is 0.10, the new schema URI is:
+ https://www.mediawiki.org/xml/export-0.10.xsd
+* MWFunction::call() and MWFunction::callArray() were removed, having being
+ deprecated in 1.22.
+* Deprecated the getInternalLinkAttributes, getInternalLinkAttributesObj,
+ and getInternalLinkAttributes methods in Linker, and removed
+ getExternalLinkAttributes method, which was deprecated in MediaWiki 1.18.
+* Removed Sites class, which was deprecated in 1.21 and replaced by SiteSQLStore.
+* Added wgRelevantArticleId to the client-side config, for use on special pages.
+* Deprecated the TitleIsCssOrJsPage hook. Superseded by the
+ ContentHandlerDefaultModelFor hook since MediaWiki 1.21.
+* Deprecated the TitleIsWikitextPage hook. Superseded by the
+ ContentHandlerDefaultModelFor hook since MediaWiki 1.21.
+* Changed parsing of variables in schema (.sql) files:
+** The substituted values are no longer parsed. (Formerly, several passes
+ were made for each variable, so depending on the order in which variables
+ were defined, variables might have been found inside encoded values. This
+ is no longer the case.)
+** Variables are no longer string encoded when the /*$var*/ syntax is used.
+ If string encoding is necessary, use the '{$var}' syntax instead.
+** Variable names must only consist of one or more of the characters
+ "A-Za-z0-9_".
+** In source text of the form '{$A}'{$B}' or `{$A}`{$B}`, where variable A
+ does not exist yet variable B does, the latter may not be replaced.
+ However, this difference is unlikely to arise in practice.
+* (T67278) RFC, PMID, and ISBN "magic links" must be surrounded by non-word
+ characters on both sides.
+* The FormatAutocomments hook will now receive $pre and $post as booleans,
+ rather than as strings that must be prepended or appended to $comment.
+* (T30950, T31025) RFC, PMID, and ISBN "magic links" can no longer contain
+ newlines; but they can contain &nbsp; and other non-newline whitespace.
+* The 'mediawiki.action.edit' ResourceLoader module no longer generates the edit
+ toolbar, which has been moved to a separate 'mediawiki.toolbar' module. If you
+ relied on this behavior, update your scripts' dependencies.
+* HTMLForm's 'vform' display style has been separated to a subclass. Therefore:
+ * HTMLForm::isVForm() is now deprecated.
+ * You can no longer do this:
+ $form = new HTMLForm( … );
+ $form->setDisplayFormat( 'vform' ); // throws exception
+ Instead, do this:
+ $form = HTMLForm::factory( 'vform', … );
+* Deprecated Revision methods getRawUser(), getRawUserText() and getRawComment().
+* BREAKING CHANGE: mediawiki.user.generateRandomSessionId:
+ The alphabet of the prior string returned was A-Za-z0-9 and now it is 0-9A-F
+* (T87504) Avoid serving SVG background-images in CSS for Opera 12, which
+ renders them incorrectly when combined with border-radius or background-size.
+* Removed maintenance script dumpSisterSites.php.
+* DatabaseBase class constructors must be called using the array argument style.
+ Ideally, DatabaseBase:factory() should be used instead in most cases.
+* Deprecated ParserOutput::addSecondaryDataUpdate and ParserOutput::getSecondaryDataUpdates.
+ This is a hard deprecation, with getSecondaryDataUpdates returning an empty array and
+ addSecondaryDataUpdate throwing an exception. These functions will be removed in 1.26,
+ since they interfere with caching of ParserOutput objects.
+* Introduced new hook 'SecondaryDataUpdates' that allows extensions to inject custom updates.
+* Introduced new hook 'OpportunisticLinksUpdate' that allows extensions to perform
+ updates when a page is re-rendered.
+* EditPage::attemptSave has been modified not to call handleStatus itself and
+ instead just returns the Status object. Extension calling it should be aware of
+ this.
+* Removed class DBObject. (unused since 1.10)
+* wfDiff() is deprecated.
+* The -m (maximum replication lag) option of refreshLinks.php was removed.
+ It had no effect since MediaWiki 1.18 and should be removed from any cron
+ jobs or similar scripts you may have set up.
+* (T85864) The following messages no longer support raw html: redirectto,
+ thisisdeleted, viewdeleted, editlink, retrievedfrom, version-poweredby-others,
+ retrievedfrom, thisisdeleted, viewsourcelink, lastmodifiedat, laggedslavemode,
+ protect-summary-cascade
+* All BloomCache related code has been removed. This was largely experimental.
+* $wgResourceModuleSkinStyles no longer supports per-module local or remote paths. They
+ can only be set for the entire skin.
+* Removed global function swap(). (deprecated since 1.24)
+* Deprecated the ".php5" file extension entry points and the $wgScriptExtension
+ configuration variable. Refer to the ".php" files instead. If you want
+ ".php5" URLs to continue to work, set up redirects. In Apache, this can be
+ done by enabling mod_rewrite and adding the following rules to your
+ configuration:
+
+ RewriteEngine On
+ RewriteBase /
+ RewriteRule ^(.*)\.php5 $1.php [R=301,L]
+
+* The global importScriptURI and importStylesheetURI functions, as well as the
+ loadedScripts object, from wikibits.js (deprecated since 1.17) now emit
+ warnings through mw.log.warn when accessed.
+
+
+== Compatibility ==
+
+MediaWiki 1.25 requires PHP 5.3.3 or later. There is experimental support for
+HHVM 3.3.0.
+
+MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
+support for them is somewhat less mature. There is experimental support for
+Oracle and Microsoft SQL Server.
+
+The supported versions are:
+
+* MySQL 5.0.3 or later
+* PostgreSQL 8.3 or later
+* SQLite 3.3.7 or later
+* Oracle 9.0.1 or later
+* Microsoft SQL Server 2005 (9.00.1399)
+
+== Upgrading ==
+
+1.25 has several database changes since 1.24, and will not work without schema
+updates. Note that due to changes to some very large tables like the revision
+table, the schema update may take quite long (minutes on a medium sized site,
+many hours on a large site).
+
+If upgrading from before 1.11, and you are using a wiki as a commons
+repository, make sure that it is updated as well. Otherwise, errors may arise
+due to database schema changes.
+
+If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
+new database fields are filled with data.
+
+If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
+1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
+with MediaWiki 1.21.
+
+Don't forget to always back up your database before upgrading!
+
+See the file UPGRADE for more detailed upgrade instructions.
+
+For notes on 1.24.x and older releases, see HISTORY.
+
+== Online documentation ==
+
+Documentation for both end-users and site administrators is available on
+MediaWiki.org, and is covered under the GNU Free Documentation License (except
+for pages that explicitly state that their contents are in the public domain):
+
+ https://www.mediawiki.org/wiki/Documentation
+
+== Mailing list ==
+
+A mailing list is available for MediaWiki user support and discussion:
+
+ https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
+
+A low-traffic announcements-only list is also available:
+
+ https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
+== IRC help ==
+
+There's usually someone online in #mediawiki on irc.freenode.net.
diff --git a/StartProfiler.sample b/StartProfiler.sample
index d9b52884..bdf21396 100644
--- a/StartProfiler.sample
+++ b/StartProfiler.sample
@@ -1,26 +1,38 @@
<?php
/**
- * To use a profiler, copy this file to StartProfiler.php,
- * and add either:
+ * To use a profiler, copy this file to StartProfiler.php and add:
+ * $wgProfiler['class'] = 'ProfilerXhprof';
*
- * // Does not support the debugging toolbar
- * // Stores profiling information in the database
- * // Requires running maintenance/archives/patch-profiling.sql
- * $wgProfiler['class'] = 'ProfilerSimpleDB'
+ * For output, set the 'output' key to an array of class names, one for each
+ * output type you want the profiler to generate. For example:
+ * $wgProfiler['output'] = array( 'ProfilerOutputText' );
*
- * or:
+ * The output classes available to you by default are ProfilerOutputDb,
+ * ProfilerOutputDump, ProfilerOutputStats, ProfilerOutputText, and
+ * ProfilerOutputUdp.
*
- * // Supports the debugging toolbar
- * // Does not store profiling information in the database
- * $wgProfiler['class'] = 'ProfilerStandard';
+ * ProfilerOutputStats outputs profiling data as StatsD metrics. It expects
+ * that you have set the $wgStatsdServer configuration variable to the host (or
+ * host:port) of your statsd server.
*
- * Or for a sampling profiler:
- * if ( !mt_rand( 0, 100 ) ) {
- * $wgProfiler['class'] = 'ProfilerSimpleDB';
- * } else {
- * $wgProfiler['class'] = 'ProfilerStub';
- * }
+ * ProfilerOutputText will output profiling data in the page body as a comment.
+ * You can make the profiling data in HTML render as part of the page content
+ * by setting the 'visible' configuration flag:
+ * $wgProfiler['visible'] = true;
*
- * Configuration of the profiler output can be done in LocalSettings.php
+ * 'ProfilerOutputDb' expects a database table that can be created by applying
+ * maintenance/archives/patch-profiling.sql to your database.
+ *
+ * 'ProfilerOutputDump' expects a $wgProfiler['outputDir'] telling it where to
+ * write dump files. The files produced are compatible with the XHProf gui.
+ * For a rudimentary sampling profiler:
+ * $wgProfiler['class'] = 'ProfilerXhprof';
+ * $wgProfiler['output'] = array( 'ProfilerOutputDb' );
+ * $wgProfiler['sampling'] = 50; // one every 50 requests
+ * This will use ProfilerStub for non-sampled cases.
+ *
+ * For performance, the profiler is always disabled for CLI scripts as they
+ * could be long running and the data would accumulate. Use the '--profiler'
+ * parameter of maintenance scripts to override this.
*/
diff --git a/api.php b/api.php
index 2a6a095d..615c71ca 100644
--- a/api.php
+++ b/api.php
@@ -30,19 +30,18 @@
* @file
*/
+use MediaWiki\Logger\LegacyLogger;
+
// So extensions (and other code) can check whether they're running in API mode
define( 'MW_API', true );
-// Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
- // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
- require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
- wfPHPVersionError( 'api.php' );
-}
+// Bail on old versions of PHP, or if composer has not been run yet to install
+// dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
+require_once dirname( __FILE__ ) . '/includes/PHPVersionCheck.php';
+wfEntryPointCheck( 'api.php' );
require __DIR__ . '/includes/WebStart.php';
-wfProfileIn( 'api.php' );
$starttime = microtime( true );
// URL safety checks
@@ -60,19 +59,23 @@ if ( !$wgEnableAPI ) {
// Set a dummy $wgTitle, because $wgTitle == null breaks various things
// In a perfect world this wouldn't be necessary
-$wgTitle = Title::makeTitle( NS_MAIN, 'API' );
+$wgTitle = Title::makeTitle( NS_SPECIAL, 'Badtitle/dummy title for API calls set in api.php' );
-/* Construct an ApiMain with the arguments passed via the URL. What we get back
- * is some form of an ApiMain, possibly even one that produces an error message,
- * but we don't care here, as that is handled by the ctor.
- */
-$processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
+// RequestContext will read from $wgTitle, but it will also whine about it.
+// In a perfect world this wouldn't be necessary either.
+RequestContext::getMain()->setTitle( $wgTitle );
-// Last chance hook before executing the API
try {
+ /* Construct an ApiMain with the arguments passed via the URL. What we get back
+ * is some form of an ApiMain, possibly even one that produces an error message,
+ * but we don't care here, as that is handled by the ctor.
+ */
+ $processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
+
+ // Last chance hook before executing the API
wfRunHooks( 'ApiBeforeMain', array( &$processor ) );
if ( !$processor instanceof ApiMain ) {
- throw new MWException( 'ApiBeforMain hook set $processor to a non-ApiMain class' );
+ throw new MWException( 'ApiBeforeMain hook set $processor to a non-ApiMain class' );
}
} catch ( Exception $e ) {
// Crap. Try to report the exception in API format to be friendly to clients.
@@ -94,7 +97,6 @@ DeferredUpdates::doUpdates();
// Log what the user did, for book-keeping purposes.
$endtime = microtime( true );
-wfProfileOut( 'api.php' );
wfLogProfilingData();
@@ -122,7 +124,7 @@ if ( $wgAPIRequestLog ) {
} else {
$items[] = "failed in ApiBeforeMain";
}
- wfErrorLog( implode( ',', $items ) . "\n", $wgAPIRequestLog );
+ LegacyLogger::emit( implode( ',', $items ) . "\n", $wgAPIRequestLog );
wfDebug( "Logged API request to $wgAPIRequestLog\n" );
}
diff --git a/api.php5 b/api.php5
index 524dfd54..7512cdeb 100644
--- a/api.php5
+++ b/api.php5
@@ -21,4 +21,6 @@
* @file
*/
+define( 'MW_ENTRY_PHP5', true );
+
require './api.php';
diff --git a/autoload.php b/autoload.php
new file mode 100644
index 00000000..fd2fdcd0
--- /dev/null
+++ b/autoload.php
@@ -0,0 +1,1368 @@
+<?php
+// This file is generated by maintenance/generateLocalAutoload.php, do not adjust manually
+// @codingStandardsIgnoreFile
+global $wgAutoloadLocalClasses;
+
+$wgAutoloadLocalClasses = array(
+ 'APCBagOStuff' => __DIR__ . '/includes/libs/objectcache/APCBagOStuff.php',
+ 'AbstractContent' => __DIR__ . '/includes/content/AbstractContent.php',
+ 'Action' => __DIR__ . '/includes/actions/Action.php',
+ 'ActiveUsersPager' => __DIR__ . '/includes/specials/SpecialActiveusers.php',
+ 'AjaxDispatcher' => __DIR__ . '/includes/AjaxDispatcher.php',
+ 'AjaxResponse' => __DIR__ . '/includes/AjaxResponse.php',
+ 'AllMessagesTablePager' => __DIR__ . '/includes/specials/SpecialAllMessages.php',
+ 'AllTrans' => __DIR__ . '/maintenance/language/alltrans.php',
+ 'AlphabeticPager' => __DIR__ . '/includes/pager/AlphabeticPager.php',
+ 'AlterSharedConstraints' => __DIR__ . '/maintenance/oracle/alterSharedConstraints.php',
+ 'AncientPagesPage' => __DIR__ . '/includes/specials/SpecialAncientpages.php',
+ 'AnsiTermColorer' => __DIR__ . '/maintenance/term/MWTerm.php',
+ 'ApiBase' => __DIR__ . '/includes/api/ApiBase.php',
+ 'ApiBlock' => __DIR__ . '/includes/api/ApiBlock.php',
+ 'ApiCheckToken' => __DIR__ . '/includes/api/ApiCheckToken.php',
+ 'ApiClearHasMsg' => __DIR__ . '/includes/api/ApiClearHasMsg.php',
+ 'ApiComparePages' => __DIR__ . '/includes/api/ApiComparePages.php',
+ 'ApiContinuationManager' => __DIR__ . '/includes/api/ApiContinuationManager.php',
+ 'ApiCreateAccount' => __DIR__ . '/includes/api/ApiCreateAccount.php',
+ 'ApiDelete' => __DIR__ . '/includes/api/ApiDelete.php',
+ 'ApiDisabled' => __DIR__ . '/includes/api/ApiDisabled.php',
+ 'ApiEditPage' => __DIR__ . '/includes/api/ApiEditPage.php',
+ 'ApiEmailUser' => __DIR__ . '/includes/api/ApiEmailUser.php',
+ 'ApiErrorFormatter' => __DIR__ . '/includes/api/ApiErrorFormatter.php',
+ 'ApiErrorFormatter_BackCompat' => __DIR__ . '/includes/api/ApiErrorFormatter.php',
+ 'ApiExpandTemplates' => __DIR__ . '/includes/api/ApiExpandTemplates.php',
+ 'ApiFeedContributions' => __DIR__ . '/includes/api/ApiFeedContributions.php',
+ 'ApiFeedRecentChanges' => __DIR__ . '/includes/api/ApiFeedRecentChanges.php',
+ 'ApiFeedWatchlist' => __DIR__ . '/includes/api/ApiFeedWatchlist.php',
+ 'ApiFileRevert' => __DIR__ . '/includes/api/ApiFileRevert.php',
+ 'ApiFormatBase' => __DIR__ . '/includes/api/ApiFormatBase.php',
+ 'ApiFormatDbg' => __DIR__ . '/includes/api/ApiFormatDbg.php',
+ 'ApiFormatDump' => __DIR__ . '/includes/api/ApiFormatDump.php',
+ 'ApiFormatFeedWrapper' => __DIR__ . '/includes/api/ApiFormatFeedWrapper.php',
+ 'ApiFormatJson' => __DIR__ . '/includes/api/ApiFormatJson.php',
+ 'ApiFormatNone' => __DIR__ . '/includes/api/ApiFormatNone.php',
+ 'ApiFormatPhp' => __DIR__ . '/includes/api/ApiFormatPhp.php',
+ 'ApiFormatRaw' => __DIR__ . '/includes/api/ApiFormatRaw.php',
+ 'ApiFormatTxt' => __DIR__ . '/includes/api/ApiFormatTxt.php',
+ 'ApiFormatWddx' => __DIR__ . '/includes/api/ApiFormatWddx.php',
+ 'ApiFormatXml' => __DIR__ . '/includes/api/ApiFormatXml.php',
+ 'ApiFormatXmlRsd' => __DIR__ . '/includes/api/ApiRsd.php',
+ 'ApiFormatYaml' => __DIR__ . '/includes/api/ApiFormatYaml.php',
+ 'ApiHelp' => __DIR__ . '/includes/api/ApiHelp.php',
+ 'ApiHelpParamValueMessage' => __DIR__ . '/includes/api/ApiHelpParamValueMessage.php',
+ 'ApiImageRotate' => __DIR__ . '/includes/api/ApiImageRotate.php',
+ 'ApiImport' => __DIR__ . '/includes/api/ApiImport.php',
+ 'ApiImportReporter' => __DIR__ . '/includes/api/ApiImport.php',
+ 'ApiLogin' => __DIR__ . '/includes/api/ApiLogin.php',
+ 'ApiLogout' => __DIR__ . '/includes/api/ApiLogout.php',
+ 'ApiMain' => __DIR__ . '/includes/api/ApiMain.php',
+ 'ApiManageTags' => __DIR__ . '/includes/api/ApiManageTags.php',
+ 'ApiMessage' => __DIR__ . '/includes/api/ApiMessage.php',
+ 'ApiModuleManager' => __DIR__ . '/includes/api/ApiModuleManager.php',
+ 'ApiMove' => __DIR__ . '/includes/api/ApiMove.php',
+ 'ApiOpenSearch' => __DIR__ . '/includes/api/ApiOpenSearch.php',
+ 'ApiOpenSearchFormatJson' => __DIR__ . '/includes/api/ApiOpenSearch.php',
+ 'ApiOptions' => __DIR__ . '/includes/api/ApiOptions.php',
+ 'ApiPageSet' => __DIR__ . '/includes/api/ApiPageSet.php',
+ 'ApiParamInfo' => __DIR__ . '/includes/api/ApiParamInfo.php',
+ 'ApiParse' => __DIR__ . '/includes/api/ApiParse.php',
+ 'ApiPatrol' => __DIR__ . '/includes/api/ApiPatrol.php',
+ 'ApiProtect' => __DIR__ . '/includes/api/ApiProtect.php',
+ 'ApiPurge' => __DIR__ . '/includes/api/ApiPurge.php',
+ 'ApiQuery' => __DIR__ . '/includes/api/ApiQuery.php',
+ 'ApiQueryAllCategories' => __DIR__ . '/includes/api/ApiQueryAllCategories.php',
+ 'ApiQueryAllDeletedRevisions' => __DIR__ . '/includes/api/ApiQueryAllDeletedRevisions.php',
+ 'ApiQueryAllImages' => __DIR__ . '/includes/api/ApiQueryAllImages.php',
+ 'ApiQueryAllLinks' => __DIR__ . '/includes/api/ApiQueryAllLinks.php',
+ 'ApiQueryAllMessages' => __DIR__ . '/includes/api/ApiQueryAllMessages.php',
+ 'ApiQueryAllPages' => __DIR__ . '/includes/api/ApiQueryAllPages.php',
+ 'ApiQueryAllUsers' => __DIR__ . '/includes/api/ApiQueryAllUsers.php',
+ 'ApiQueryBacklinks' => __DIR__ . '/includes/api/ApiQueryBacklinks.php',
+ 'ApiQueryBacklinksprop' => __DIR__ . '/includes/api/ApiQueryBacklinksprop.php',
+ 'ApiQueryBase' => __DIR__ . '/includes/api/ApiQueryBase.php',
+ 'ApiQueryBlocks' => __DIR__ . '/includes/api/ApiQueryBlocks.php',
+ 'ApiQueryCategories' => __DIR__ . '/includes/api/ApiQueryCategories.php',
+ 'ApiQueryCategoryInfo' => __DIR__ . '/includes/api/ApiQueryCategoryInfo.php',
+ 'ApiQueryCategoryMembers' => __DIR__ . '/includes/api/ApiQueryCategoryMembers.php',
+ 'ApiQueryContributions' => __DIR__ . '/includes/api/ApiQueryUserContributions.php',
+ 'ApiQueryContributors' => __DIR__ . '/includes/api/ApiQueryContributors.php',
+ 'ApiQueryDeletedRevisions' => __DIR__ . '/includes/api/ApiQueryDeletedRevisions.php',
+ 'ApiQueryDeletedrevs' => __DIR__ . '/includes/api/ApiQueryDeletedrevs.php',
+ 'ApiQueryDisabled' => __DIR__ . '/includes/api/ApiQueryDisabled.php',
+ 'ApiQueryDuplicateFiles' => __DIR__ . '/includes/api/ApiQueryDuplicateFiles.php',
+ 'ApiQueryExtLinksUsage' => __DIR__ . '/includes/api/ApiQueryExtLinksUsage.php',
+ 'ApiQueryExternalLinks' => __DIR__ . '/includes/api/ApiQueryExternalLinks.php',
+ 'ApiQueryFileRepoInfo' => __DIR__ . '/includes/api/ApiQueryFileRepoInfo.php',
+ 'ApiQueryFilearchive' => __DIR__ . '/includes/api/ApiQueryFilearchive.php',
+ 'ApiQueryGeneratorBase' => __DIR__ . '/includes/api/ApiQueryBase.php',
+ 'ApiQueryIWBacklinks' => __DIR__ . '/includes/api/ApiQueryIWBacklinks.php',
+ 'ApiQueryIWLinks' => __DIR__ . '/includes/api/ApiQueryIWLinks.php',
+ 'ApiQueryImageInfo' => __DIR__ . '/includes/api/ApiQueryImageInfo.php',
+ 'ApiQueryImages' => __DIR__ . '/includes/api/ApiQueryImages.php',
+ 'ApiQueryInfo' => __DIR__ . '/includes/api/ApiQueryInfo.php',
+ 'ApiQueryLangBacklinks' => __DIR__ . '/includes/api/ApiQueryLangBacklinks.php',
+ 'ApiQueryLangLinks' => __DIR__ . '/includes/api/ApiQueryLangLinks.php',
+ 'ApiQueryLinks' => __DIR__ . '/includes/api/ApiQueryLinks.php',
+ 'ApiQueryLogEvents' => __DIR__ . '/includes/api/ApiQueryLogEvents.php',
+ 'ApiQueryORM' => __DIR__ . '/includes/api/ApiQueryORM.php',
+ 'ApiQueryPagePropNames' => __DIR__ . '/includes/api/ApiQueryPagePropNames.php',
+ 'ApiQueryPageProps' => __DIR__ . '/includes/api/ApiQueryPageProps.php',
+ 'ApiQueryPagesWithProp' => __DIR__ . '/includes/api/ApiQueryPagesWithProp.php',
+ 'ApiQueryPrefixSearch' => __DIR__ . '/includes/api/ApiQueryPrefixSearch.php',
+ 'ApiQueryProtectedTitles' => __DIR__ . '/includes/api/ApiQueryProtectedTitles.php',
+ 'ApiQueryQueryPage' => __DIR__ . '/includes/api/ApiQueryQueryPage.php',
+ 'ApiQueryRandom' => __DIR__ . '/includes/api/ApiQueryRandom.php',
+ 'ApiQueryRecentChanges' => __DIR__ . '/includes/api/ApiQueryRecentChanges.php',
+ 'ApiQueryRevisions' => __DIR__ . '/includes/api/ApiQueryRevisions.php',
+ 'ApiQueryRevisionsBase' => __DIR__ . '/includes/api/ApiQueryRevisionsBase.php',
+ 'ApiQuerySearch' => __DIR__ . '/includes/api/ApiQuerySearch.php',
+ 'ApiQuerySiteinfo' => __DIR__ . '/includes/api/ApiQuerySiteinfo.php',
+ 'ApiQueryStashImageInfo' => __DIR__ . '/includes/api/ApiQueryStashImageInfo.php',
+ 'ApiQueryTags' => __DIR__ . '/includes/api/ApiQueryTags.php',
+ 'ApiQueryTokens' => __DIR__ . '/includes/api/ApiQueryTokens.php',
+ 'ApiQueryUserInfo' => __DIR__ . '/includes/api/ApiQueryUserInfo.php',
+ 'ApiQueryUsers' => __DIR__ . '/includes/api/ApiQueryUsers.php',
+ 'ApiQueryWatchlist' => __DIR__ . '/includes/api/ApiQueryWatchlist.php',
+ 'ApiQueryWatchlistRaw' => __DIR__ . '/includes/api/ApiQueryWatchlistRaw.php',
+ 'ApiRawMessage' => __DIR__ . '/includes/api/ApiMessage.php',
+ 'ApiResult' => __DIR__ . '/includes/api/ApiResult.php',
+ 'ApiRevisionDelete' => __DIR__ . '/includes/api/ApiRevisionDelete.php',
+ 'ApiRollback' => __DIR__ . '/includes/api/ApiRollback.php',
+ 'ApiRsd' => __DIR__ . '/includes/api/ApiRsd.php',
+ 'ApiSerializable' => __DIR__ . '/includes/api/ApiSerializable.php',
+ 'ApiSetNotificationTimestamp' => __DIR__ . '/includes/api/ApiSetNotificationTimestamp.php',
+ 'ApiStashEdit' => __DIR__ . '/includes/api/ApiStashEdit.php',
+ 'ApiTag' => __DIR__ . '/includes/api/ApiTag.php',
+ 'ApiTokens' => __DIR__ . '/includes/api/ApiTokens.php',
+ 'ApiUnblock' => __DIR__ . '/includes/api/ApiUnblock.php',
+ 'ApiUndelete' => __DIR__ . '/includes/api/ApiUndelete.php',
+ 'ApiUpload' => __DIR__ . '/includes/api/ApiUpload.php',
+ 'ApiUserrights' => __DIR__ . '/includes/api/ApiUserrights.php',
+ 'ApiWatch' => __DIR__ . '/includes/api/ApiWatch.php',
+ 'ArchivedFile' => __DIR__ . '/includes/filerepo/file/ArchivedFile.php',
+ 'ArrayDiffFormatter' => __DIR__ . '/includes/diff/ArrayDiffFormatter.php',
+ 'ArrayUtils' => __DIR__ . '/includes/libs/ArrayUtils.php',
+ 'Article' => __DIR__ . '/includes/page/Article.php',
+ 'AssembleUploadChunksJob' => __DIR__ . '/includes/jobqueue/jobs/AssembleUploadChunksJob.php',
+ 'AtomFeed' => __DIR__ . '/includes/Feed.php',
+ 'AttachLatest' => __DIR__ . '/maintenance/attachLatest.php',
+ 'AuthPlugin' => __DIR__ . '/includes/AuthPlugin.php',
+ 'AuthPluginUser' => __DIR__ . '/includes/AuthPlugin.php',
+ 'AutoLoader' => __DIR__ . '/includes/AutoLoader.php',
+ 'AutoloadGenerator' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
+ 'Autopromote' => __DIR__ . '/includes/Autopromote.php',
+ 'BacklinkCache' => __DIR__ . '/includes/cache/BacklinkCache.php',
+ 'BacklinkJobUtils' => __DIR__ . '/includes/jobqueue/utils/BacklinkJobUtils.php',
+ 'BackupDumper' => __DIR__ . '/maintenance/backup.inc',
+ 'BackupReader' => __DIR__ . '/maintenance/importDump.php',
+ 'BadTitleError' => __DIR__ . '/includes/exception/BadTitleError.php',
+ 'BagOStuff' => __DIR__ . '/includes/libs/objectcache/BagOStuff.php',
+ 'BaseDump' => __DIR__ . '/maintenance/backupPrefetch.inc',
+ 'BaseTemplate' => __DIR__ . '/includes/skins/BaseTemplate.php',
+ 'BatchedQueryRunner' => __DIR__ . '/maintenance/runBatchedQuery.php',
+ 'BcryptPassword' => __DIR__ . '/includes/password/BcryptPassword.php',
+ 'BenchHttpHttps' => __DIR__ . '/maintenance/benchmarks/bench_HTTP_HTTPS.php',
+ 'BenchIfSwitch' => __DIR__ . '/maintenance/benchmarks/bench_if_switch.php',
+ 'BenchStrtrStrReplace' => __DIR__ . '/maintenance/benchmarks/bench_strtr_str_replace.php',
+ 'BenchUtf8TitleCheck' => __DIR__ . '/maintenance/benchmarks/bench_utf8_title_check.php',
+ 'BenchWfBaseConvert' => __DIR__ . '/maintenance/benchmarks/bench_wfBaseConvert.php',
+ 'BenchWfIsWindows' => __DIR__ . '/maintenance/benchmarks/bench_wfIsWindows.php',
+ 'BenchmarkDeleteTruncate' => __DIR__ . '/maintenance/benchmarks/bench_delete_truncate.php',
+ 'BenchmarkHooks' => __DIR__ . '/maintenance/benchmarks/benchmarkHooks.php',
+ 'BenchmarkParse' => __DIR__ . '/maintenance/benchmarks/benchmarkParse.php',
+ 'BenchmarkPurge' => __DIR__ . '/maintenance/benchmarks/benchmarkPurge.php',
+ 'Benchmarker' => __DIR__ . '/maintenance/benchmarks/Benchmarker.php',
+ 'BitmapHandler' => __DIR__ . '/includes/media/Bitmap.php',
+ 'BitmapHandler_ClientOnly' => __DIR__ . '/includes/media/Bitmap_ClientOnly.php',
+ 'BitmapMetadataHandler' => __DIR__ . '/includes/media/BitmapMetadataHandler.php',
+ 'Blob' => __DIR__ . '/includes/db/DatabaseUtility.php',
+ 'Block' => __DIR__ . '/includes/Block.php',
+ 'BlockListPager' => __DIR__ . '/includes/specials/SpecialBlockList.php',
+ 'BlockLogFormatter' => __DIR__ . '/includes/logging/BlockLogFormatter.php',
+ 'BmpHandler' => __DIR__ . '/includes/media/BMP.php',
+ 'BrokenRedirectsPage' => __DIR__ . '/includes/specials/SpecialBrokenRedirects.php',
+ 'BufferingStatsdDataFactory' => __DIR__ . '/includes/libs/BufferingStatsdDataFactory.php',
+ 'CLDRPluralRuleConverter' => __DIR__ . '/languages/utils/CLDRPluralRuleConverter.php',
+ 'CLDRPluralRuleConverterExpression' => __DIR__ . '/languages/utils/CLDRPluralRuleConverterExpression.php',
+ 'CLDRPluralRuleConverterFragment' => __DIR__ . '/languages/utils/CLDRPluralRuleConverterFragment.php',
+ 'CLDRPluralRuleConverterOperator' => __DIR__ . '/languages/utils/CLDRPluralRuleConverterOperator.php',
+ 'CLDRPluralRuleError' => __DIR__ . '/languages/utils/CLDRPluralRuleError.php',
+ 'CLDRPluralRuleEvaluator' => __DIR__ . '/languages/utils/CLDRPluralRuleEvaluator.php',
+ 'CLDRPluralRuleEvaluatorRange' => __DIR__ . '/languages/utils/CLDRPluralRuleEvaluatorRange.php',
+ 'CLIParser' => __DIR__ . '/maintenance/parse.php',
+ 'CSSMin' => __DIR__ . '/includes/libs/CSSMin.php',
+ 'CacheDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
+ 'CacheHelper' => __DIR__ . '/includes/cache/CacheHelper.php',
+ 'CacheTime' => __DIR__ . '/includes/parser/CacheTime.php',
+ 'CachedAction' => __DIR__ . '/includes/actions/CachedAction.php',
+ 'CachingSiteStore' => __DIR__ . '/includes/site/CachingSiteStore.php',
+ 'CapsCleanup' => __DIR__ . '/maintenance/cleanupCaps.php',
+ 'Category' => __DIR__ . '/includes/Category.php',
+ 'CategoryFinder' => __DIR__ . '/includes/CategoryFinder.php',
+ 'CategoryPage' => __DIR__ . '/includes/page/CategoryPage.php',
+ 'CategoryPager' => __DIR__ . '/includes/specials/SpecialCategories.php',
+ 'CategoryViewer' => __DIR__ . '/includes/CategoryViewer.php',
+ 'CdbException' => __DIR__ . '/includes/CdbCompat.php',
+ 'CdbReader' => __DIR__ . '/includes/CdbCompat.php',
+ 'CdbWriter' => __DIR__ . '/includes/CdbCompat.php',
+ 'CgzCopyTransaction' => __DIR__ . '/maintenance/storage/recompressTracked.php',
+ 'ChangePassword' => __DIR__ . '/maintenance/changePassword.php',
+ 'ChangeTags' => __DIR__ . '/includes/ChangeTags.php',
+ 'ChangeTagsList' => __DIR__ . '/includes/changetags/ChangeTagsList.php',
+ 'ChangeTagsLogItem' => __DIR__ . '/includes/changetags/ChangeTagsLogItem.php',
+ 'ChangeTagsLogList' => __DIR__ . '/includes/changetags/ChangeTagsLogList.php',
+ 'ChangeTagsRevisionItem' => __DIR__ . '/includes/changetags/ChangeTagsRevisionItem.php',
+ 'ChangeTagsRevisionList' => __DIR__ . '/includes/changetags/ChangeTagsRevisionList.php',
+ 'ChangesFeed' => __DIR__ . '/includes/changes/ChangesFeed.php',
+ 'ChangesList' => __DIR__ . '/includes/changes/ChangesList.php',
+ 'ChangesListSpecialPage' => __DIR__ . '/includes/specialpage/ChangesListSpecialPage.php',
+ 'ChannelFeed' => __DIR__ . '/includes/Feed.php',
+ 'CheckBadRedirects' => __DIR__ . '/maintenance/checkBadRedirects.php',
+ 'CheckComposerLockUpToDate' => __DIR__ . '/maintenance/checkComposerLockUpToDate.php',
+ 'CheckExtensionsCLI' => __DIR__ . '/maintenance/language/checkLanguage.inc',
+ 'CheckImages' => __DIR__ . '/maintenance/checkImages.php',
+ 'CheckLanguageCLI' => __DIR__ . '/maintenance/language/checkLanguage.inc',
+ 'CheckLess' => __DIR__ . '/maintenance/checkLess.php',
+ 'CheckStorage' => __DIR__ . '/maintenance/storage/checkStorage.php',
+ 'CheckSyntax' => __DIR__ . '/maintenance/checkSyntax.php',
+ 'CheckUsernames' => __DIR__ . '/maintenance/checkUsernames.php',
+ 'ChronologyProtector' => __DIR__ . '/includes/db/ChronologyProtector.php',
+ 'ClassCollector' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
+ 'CleanupAncientTables' => __DIR__ . '/maintenance/cleanupAncientTables.php',
+ 'CleanupBlocks' => __DIR__ . '/maintenance/cleanupBlocks.php',
+ 'CleanupPreferences' => __DIR__ . '/maintenance/cleanupPreferences.php',
+ 'CleanupRemovedModules' => __DIR__ . '/maintenance/cleanupRemovedModules.php',
+ 'CleanupSpam' => __DIR__ . '/maintenance/cleanupSpam.php',
+ 'ClearCacheStats' => __DIR__ . '/maintenance/clearCacheStats.php',
+ 'ClearInterwikiCache' => __DIR__ . '/maintenance/clearInterwikiCache.php',
+ 'CliInstaller' => __DIR__ . '/includes/installer/CliInstaller.php',
+ 'CloneDatabase' => __DIR__ . '/includes/db/CloneDatabase.php',
+ 'CodeContentHandler' => __DIR__ . '/includes/content/CodeContentHandler.php',
+ 'Collation' => __DIR__ . '/includes/Collation.php',
+ 'CollationCkb' => __DIR__ . '/includes/Collation.php',
+ 'CollationEt' => __DIR__ . '/includes/Collation.php',
+ 'CommandLineInc' => __DIR__ . '/maintenance/commandLine.inc',
+ 'CommandLineInstaller' => __DIR__ . '/maintenance/install.php',
+ 'CompareParserCache' => __DIR__ . '/maintenance/compareParserCache.php',
+ 'CompareParsers' => __DIR__ . '/maintenance/compareParsers.php',
+ 'ComposerHookHandler' => __DIR__ . '/includes/composer/ComposerHookHandler.php',
+ 'ComposerJson' => __DIR__ . '/includes/libs/composer/ComposerJson.php',
+ 'ComposerLock' => __DIR__ . '/includes/libs/composer/ComposerLock.php',
+ 'ComposerPackageModifier' => __DIR__ . '/includes/composer/ComposerPackageModifier.php',
+ 'ComposerVersionNormalizer' => __DIR__ . '/includes/composer/ComposerVersionNormalizer.php',
+ 'CompressOld' => __DIR__ . '/maintenance/storage/compressOld.php',
+ 'ConcatenatedGzipHistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
+ 'Config' => __DIR__ . '/includes/config/Config.php',
+ 'ConfigException' => __DIR__ . '/includes/config/ConfigException.php',
+ 'ConfigFactory' => __DIR__ . '/includes/config/ConfigFactory.php',
+ 'ConstantDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
+ 'Content' => __DIR__ . '/includes/content/Content.php',
+ 'ContentHandler' => __DIR__ . '/includes/content/ContentHandler.php',
+ 'ContextSource' => __DIR__ . '/includes/context/ContextSource.php',
+ 'ContribsPager' => __DIR__ . '/includes/specials/SpecialContributions.php',
+ 'ConvertExtensionToRegistration' => __DIR__ . '/maintenance/convertExtensionToRegistration.php',
+ 'ConvertLinks' => __DIR__ . '/maintenance/convertLinks.php',
+ 'ConvertUserOptions' => __DIR__ . '/maintenance/convertUserOptions.php',
+ 'ConverterRule' => __DIR__ . '/languages/ConverterRule.php',
+ 'Cookie' => __DIR__ . '/includes/libs/Cookie.php',
+ 'CookieJar' => __DIR__ . '/includes/libs/Cookie.php',
+ 'CopyFileBackend' => __DIR__ . '/maintenance/copyFileBackend.php',
+ 'CopyFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+ 'CopyJobQueue' => __DIR__ . '/maintenance/copyJobQueue.php',
+ 'CoreParserFunctions' => __DIR__ . '/includes/parser/CoreParserFunctions.php',
+ 'CoreTagHooks' => __DIR__ . '/includes/parser/CoreTagHooks.php',
+ 'CreateAndPromote' => __DIR__ . '/maintenance/createAndPromote.php',
+ 'CreateFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+ 'CreditsAction' => __DIR__ . '/includes/actions/CreditsAction.php',
+ 'CssContent' => __DIR__ . '/includes/content/CssContent.php',
+ 'CssContentHandler' => __DIR__ . '/includes/content/CssContentHandler.php',
+ 'CsvStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
+ 'CurlHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
+ 'DBAccessBase' => __DIR__ . '/includes/dao/DBAccessBase.php',
+ 'DBAccessError' => __DIR__ . '/includes/db/LBFactory.php',
+ 'DBConnRef' => __DIR__ . '/includes/db/LoadBalancer.php',
+ 'DBConnectionError' => __DIR__ . '/includes/db/DatabaseError.php',
+ 'DBError' => __DIR__ . '/includes/db/DatabaseError.php',
+ 'DBExpectedError' => __DIR__ . '/includes/db/DatabaseError.php',
+ 'DBFileJournal' => __DIR__ . '/includes/filebackend/filejournal/DBFileJournal.php',
+ 'DBLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php',
+ 'DBMasterPos' => __DIR__ . '/includes/db/DatabaseUtility.php',
+ 'DBQueryError' => __DIR__ . '/includes/db/DatabaseError.php',
+ 'DBSiteStore' => __DIR__ . '/includes/site/DBSiteStore.php',
+ 'DBUnexpectedError' => __DIR__ . '/includes/db/DatabaseError.php',
+ 'DataUpdate' => __DIR__ . '/includes/deferred/DataUpdate.php',
+ 'DatabaseBase' => __DIR__ . '/includes/db/Database.php',
+ 'DatabaseInstaller' => __DIR__ . '/includes/installer/DatabaseInstaller.php',
+ 'DatabaseLag' => __DIR__ . '/maintenance/lag.php',
+ 'DatabaseLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
+ 'DatabaseMssql' => __DIR__ . '/includes/db/DatabaseMssql.php',
+ 'DatabaseMysql' => __DIR__ . '/includes/db/DatabaseMysql.php',
+ 'DatabaseMysqlBase' => __DIR__ . '/includes/db/DatabaseMysqlBase.php',
+ 'DatabaseMysqli' => __DIR__ . '/includes/db/DatabaseMysqli.php',
+ 'DatabaseOracle' => __DIR__ . '/includes/db/DatabaseOracle.php',
+ 'DatabasePostgres' => __DIR__ . '/includes/db/DatabasePostgres.php',
+ 'DatabaseSqlite' => __DIR__ . '/includes/db/DatabaseSqlite.php',
+ 'DatabaseUpdater' => __DIR__ . '/includes/installer/DatabaseUpdater.php',
+ 'DateFormats' => __DIR__ . '/maintenance/language/date-formats.php',
+ 'DateFormatter' => __DIR__ . '/includes/parser/DateFormatter.php',
+ 'DeadendPagesPage' => __DIR__ . '/includes/specials/SpecialDeadendpages.php',
+ 'DeferrableUpdate' => __DIR__ . '/includes/deferred/DeferredUpdates.php',
+ 'DeferredStringifier' => __DIR__ . '/includes/libs/DeferredStringifier.php',
+ 'DeferredUpdates' => __DIR__ . '/includes/deferred/DeferredUpdates.php',
+ 'DeleteAction' => __DIR__ . '/includes/actions/DeleteAction.php',
+ 'DeleteArchivedFiles' => __DIR__ . '/maintenance/deleteArchivedFiles.php',
+ 'DeleteArchivedFilesImplementation' => __DIR__ . '/maintenance/deleteArchivedFiles.inc',
+ 'DeleteArchivedRevisions' => __DIR__ . '/maintenance/deleteArchivedRevisions.php',
+ 'DeleteArchivedRevisionsImplementation' => __DIR__ . '/maintenance/deleteArchivedRevisions.inc',
+ 'DeleteBatch' => __DIR__ . '/maintenance/deleteBatch.php',
+ 'DeleteDefaultMessages' => __DIR__ . '/maintenance/deleteDefaultMessages.php',
+ 'DeleteEqualMessages' => __DIR__ . '/maintenance/deleteEqualMessages.php',
+ 'DeleteFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+ 'DeleteImageCache' => __DIR__ . '/maintenance/deleteImageMemcached.php',
+ 'DeleteLogFormatter' => __DIR__ . '/includes/logging/DeleteLogFormatter.php',
+ 'DeleteOldRevisions' => __DIR__ . '/maintenance/deleteOldRevisions.php',
+ 'DeleteOrphanedRevisions' => __DIR__ . '/maintenance/deleteOrphanedRevisions.php',
+ 'DeleteRevision' => __DIR__ . '/maintenance/deleteRevision.php',
+ 'DeleteSelfExternals' => __DIR__ . '/maintenance/deleteSelfExternals.php',
+ 'DeletedContribsPager' => __DIR__ . '/includes/specials/SpecialDeletedContributions.php',
+ 'DeletedContributionsPage' => __DIR__ . '/includes/specials/SpecialDeletedContributions.php',
+ 'DependencyWrapper' => __DIR__ . '/includes/cache/CacheDependency.php',
+ 'DeprecatedGlobal' => __DIR__ . '/includes/DeprecatedGlobal.php',
+ 'DerivativeContext' => __DIR__ . '/includes/context/DerivativeContext.php',
+ 'DerivativeRequest' => __DIR__ . '/includes/WebRequest.php',
+ 'DerivativeResourceLoaderContext' => __DIR__ . '/includes/resourceloader/DerivativeResourceLoaderContext.php',
+ 'DescribeFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+ 'Diff' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'DiffEngine' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'DiffFormatter' => __DIR__ . '/includes/diff/DiffFormatter.php',
+ 'DiffHistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
+ 'DiffOp' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'DiffOpAdd' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'DiffOpChange' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'DiffOpCopy' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'DiffOpDelete' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'DifferenceEngine' => __DIR__ . '/includes/diff/DifferenceEngine.php',
+ 'Digit2Html' => __DIR__ . '/maintenance/language/digit2html.php',
+ 'DjVuHandler' => __DIR__ . '/includes/media/DjVu.php',
+ 'DjVuImage' => __DIR__ . '/includes/media/DjVuImage.php',
+ 'DoubleRedirectJob' => __DIR__ . '/includes/jobqueue/jobs/DoubleRedirectJob.php',
+ 'DoubleRedirectsPage' => __DIR__ . '/includes/specials/SpecialDoubleRedirects.php',
+ 'DoubleReplacer' => __DIR__ . '/includes/libs/replacers/DoubleReplacer.php',
+ 'DummyLinker' => __DIR__ . '/includes/Linker.php',
+ 'DummyTermColorer' => __DIR__ . '/maintenance/term/MWTerm.php',
+ 'Dump7ZipOutput' => __DIR__ . '/includes/Export.php',
+ 'DumpBZip2Output' => __DIR__ . '/includes/Export.php',
+ 'DumpDBZip2Output' => __DIR__ . '/maintenance/backup.inc',
+ 'DumpFileOutput' => __DIR__ . '/includes/Export.php',
+ 'DumpFilter' => __DIR__ . '/includes/Export.php',
+ 'DumpGZipOutput' => __DIR__ . '/includes/Export.php',
+ 'DumpIterator' => __DIR__ . '/maintenance/dumpIterator.php',
+ 'DumpLatestFilter' => __DIR__ . '/includes/Export.php',
+ 'DumpLinks' => __DIR__ . '/maintenance/dumpLinks.php',
+ 'DumpMessages' => __DIR__ . '/maintenance/language/dumpMessages.php',
+ 'DumpMultiWriter' => __DIR__ . '/includes/Export.php',
+ 'DumpNamespaceFilter' => __DIR__ . '/includes/Export.php',
+ 'DumpNotalkFilter' => __DIR__ . '/includes/Export.php',
+ 'DumpOutput' => __DIR__ . '/includes/Export.php',
+ 'DumpPipeOutput' => __DIR__ . '/includes/Export.php',
+ 'DumpRenderer' => __DIR__ . '/maintenance/renderDump.php',
+ 'DumpRev' => __DIR__ . '/maintenance/storage/dumpRev.php',
+ 'DuplicateJob' => __DIR__ . '/includes/jobqueue/jobs/DuplicateJob.php',
+ 'EditAction' => __DIR__ . '/includes/actions/EditAction.php',
+ 'EditCLI' => __DIR__ . '/maintenance/edit.php',
+ 'EditPage' => __DIR__ . '/includes/EditPage.php',
+ 'EditWatchlistCheckboxSeriesField' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
+ 'EditWatchlistNormalHTMLForm' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
+ 'EmailConfirmation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
+ 'EmailInvalidation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
+ 'EmailNotification' => __DIR__ . '/includes/mail/EmailNotification.php',
+ 'EmaillingJob' => __DIR__ . '/includes/jobqueue/jobs/EmaillingJob.php',
+ 'EmptyBagOStuff' => __DIR__ . '/includes/libs/objectcache/EmptyBagOStuff.php',
+ 'EncryptedPassword' => __DIR__ . '/includes/password/EncryptedPassword.php',
+ 'EnhancedChangesList' => __DIR__ . '/includes/changes/EnhancedChangesList.php',
+ 'EnotifNotifyJob' => __DIR__ . '/includes/jobqueue/jobs/EnotifNotifyJob.php',
+ 'EnqueueJob' => __DIR__ . '/includes/jobqueue/jobs/EnqueueJob.php',
+ 'EraseArchivedFile' => __DIR__ . '/maintenance/eraseArchivedFile.php',
+ 'ErrorPageError' => __DIR__ . '/includes/exception/ErrorPageError.php',
+ 'Exif' => __DIR__ . '/includes/media/Exif.php',
+ 'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php',
+ 'ExplodeIterator' => __DIR__ . '/includes/libs/ExplodeIterator.php',
+ 'ExportProgressFilter' => __DIR__ . '/maintenance/backup.inc',
+ 'ExportSites' => __DIR__ . '/maintenance/exportSites.php',
+ 'ExtensionLanguages' => __DIR__ . '/maintenance/language/languages.inc',
+ 'ExtensionProcessor' => __DIR__ . '/includes/registration/ExtensionProcessor.php',
+ 'ExtensionRegistry' => __DIR__ . '/includes/registration/ExtensionRegistry.php',
+ 'ExternalStore' => __DIR__ . '/includes/externalstore/ExternalStore.php',
+ 'ExternalStoreDB' => __DIR__ . '/includes/externalstore/ExternalStoreDB.php',
+ 'ExternalStoreHttp' => __DIR__ . '/includes/externalstore/ExternalStoreHttp.php',
+ 'ExternalStoreMedium' => __DIR__ . '/includes/externalstore/ExternalStoreMedium.php',
+ 'ExternalStoreMwstore' => __DIR__ . '/includes/externalstore/ExternalStoreMwstore.php',
+ 'FSFile' => __DIR__ . '/includes/filebackend/FSFile.php',
+ 'FSFileBackend' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+ 'FSFileBackendDirList' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+ 'FSFileBackendFileList' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+ 'FSFileBackendList' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+ 'FSFileOpHandle' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+ 'FSLockManager' => __DIR__ . '/includes/filebackend/lockmanager/FSLockManager.php',
+ 'FSRepo' => __DIR__ . '/includes/filerepo/FSRepo.php',
+ 'FakeConverter' => __DIR__ . '/languages/FakeConverter.php',
+ 'FakeMaintenance' => __DIR__ . '/maintenance/Maintenance.php',
+ 'FakeResultWrapper' => __DIR__ . '/includes/db/DatabaseUtility.php',
+ 'Fallback' => __DIR__ . '/includes/Fallback.php',
+ 'FatalError' => __DIR__ . '/includes/exception/FatalError.php',
+ 'FauxRequest' => __DIR__ . '/includes/WebRequest.php',
+ 'FauxResponse' => __DIR__ . '/includes/WebResponse.php',
+ 'FeedItem' => __DIR__ . '/includes/Feed.php',
+ 'FeedUtils' => __DIR__ . '/includes/FeedUtils.php',
+ 'FetchText' => __DIR__ . '/maintenance/fetchText.php',
+ 'FewestrevisionsPage' => __DIR__ . '/includes/specials/SpecialFewestrevisions.php',
+ 'Field' => __DIR__ . '/includes/db/DatabaseUtility.php',
+ 'File' => __DIR__ . '/includes/filerepo/file/File.php',
+ 'FileBackend' => __DIR__ . '/includes/filebackend/FileBackend.php',
+ 'FileBackendError' => __DIR__ . '/includes/filebackend/FileBackend.php',
+ 'FileBackendException' => __DIR__ . '/includes/filebackend/FileBackend.php',
+ 'FileBackendGroup' => __DIR__ . '/includes/filebackend/FileBackendGroup.php',
+ 'FileBackendMultiWrite' => __DIR__ . '/includes/filebackend/FileBackendMultiWrite.php',
+ 'FileBackendStore' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+ 'FileBackendStoreOpHandle' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+ 'FileBackendStoreShardDirIterator' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+ 'FileBackendStoreShardFileIterator' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+ 'FileBackendStoreShardListIterator' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+ 'FileBasedSiteLookup' => __DIR__ . '/includes/site/FileBasedSiteLookup.php',
+ 'FileCacheBase' => __DIR__ . '/includes/cache/FileCacheBase.php',
+ 'FileDeleteForm' => __DIR__ . '/includes/FileDeleteForm.php',
+ 'FileDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
+ 'FileDuplicateSearchPage' => __DIR__ . '/includes/specials/SpecialFileDuplicateSearch.php',
+ 'FileJournal' => __DIR__ . '/includes/filebackend/filejournal/FileJournal.php',
+ 'FileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+ 'FileOpBatch' => __DIR__ . '/includes/filebackend/FileOpBatch.php',
+ 'FileRepo' => __DIR__ . '/includes/filerepo/FileRepo.php',
+ 'FileRepoStatus' => __DIR__ . '/includes/filerepo/FileRepoStatus.php',
+ 'FindHooks' => __DIR__ . '/maintenance/findHooks.php',
+ 'FindMissingFiles' => __DIR__ . '/maintenance/findMissingFiles.php',
+ 'FixBug20757' => __DIR__ . '/maintenance/storage/fixBug20757.php',
+ 'FixDoubleRedirects' => __DIR__ . '/maintenance/fixDoubleRedirects.php',
+ 'FixExtLinksProtocolRelative' => __DIR__ . '/maintenance/fixExtLinksProtocolRelative.php',
+ 'FixSlaveDesync' => __DIR__ . '/maintenance/fixSlaveDesync.php',
+ 'FixTimestamps' => __DIR__ . '/maintenance/fixTimestamps.php',
+ 'FixUserRegistration' => __DIR__ . '/maintenance/fixUserRegistration.php',
+ 'ForeignAPIFile' => __DIR__ . '/includes/filerepo/file/ForeignAPIFile.php',
+ 'ForeignAPIRepo' => __DIR__ . '/includes/filerepo/ForeignAPIRepo.php',
+ 'ForeignDBFile' => __DIR__ . '/includes/filerepo/file/ForeignDBFile.php',
+ 'ForeignDBRepo' => __DIR__ . '/includes/filerepo/ForeignDBRepo.php',
+ 'ForeignDBViaLBRepo' => __DIR__ . '/includes/filerepo/ForeignDBViaLBRepo.php',
+ 'ForeignTitle' => __DIR__ . '/includes/title/ForeignTitle.php',
+ 'ForeignTitleFactory' => __DIR__ . '/includes/title/ForeignTitleFactory.php',
+ 'ForkController' => __DIR__ . '/includes/ForkController.php',
+ 'FormAction' => __DIR__ . '/includes/actions/FormAction.php',
+ 'FormOptions' => __DIR__ . '/includes/FormOptions.php',
+ 'FormSpecialPage' => __DIR__ . '/includes/specialpage/FormSpecialPage.php',
+ 'FormatJson' => __DIR__ . '/includes/json/FormatJson.php',
+ 'FormatMetadata' => __DIR__ . '/includes/media/FormatMetadata.php',
+ 'FormlessAction' => __DIR__ . '/includes/actions/FormlessAction.php',
+ 'GIFHandler' => __DIR__ . '/includes/media/GIF.php',
+ 'GIFMetadataExtractor' => __DIR__ . '/includes/media/GIFMetadataExtractor.php',
+ 'GanConverter' => __DIR__ . '/languages/classes/LanguageGan.php',
+ 'GenderCache' => __DIR__ . '/includes/cache/GenderCache.php',
+ 'GenerateCollationData' => __DIR__ . '/maintenance/language/generateCollationData.php',
+ 'GenerateJsonI18n' => __DIR__ . '/maintenance/generateJsonI18n.php',
+ 'GenerateNormalizerDataAr' => __DIR__ . '/maintenance/language/generateNormalizerDataAr.php',
+ 'GenerateNormalizerDataMl' => __DIR__ . '/maintenance/language/generateNormalizerDataMl.php',
+ 'GenerateSitemap' => __DIR__ . '/maintenance/generateSitemap.php',
+ 'GenerateUtf8Case' => __DIR__ . '/maintenance/language/generateUtf8Case.php',
+ 'GenericArrayObject' => __DIR__ . '/includes/libs/GenericArrayObject.php',
+ 'GetConfiguration' => __DIR__ . '/maintenance/getConfiguration.php',
+ 'GetLagTimes' => __DIR__ . '/maintenance/getLagTimes.php',
+ 'GetSlaveServer' => __DIR__ . '/maintenance/getSlaveServer.php',
+ 'GetTextMaint' => __DIR__ . '/maintenance/getText.php',
+ 'GitInfo' => __DIR__ . '/includes/GitInfo.php',
+ 'GlobalDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
+ 'GlobalVarConfig' => __DIR__ . '/includes/config/GlobalVarConfig.php',
+ 'HTMLApiField' => __DIR__ . '/includes/htmlform/HTMLApiField.php',
+ 'HTMLAutoCompleteSelectField' => __DIR__ . '/includes/htmlform/HTMLAutoCompleteSelectField.php',
+ 'HTMLButtonField' => __DIR__ . '/includes/htmlform/HTMLButtonField.php',
+ 'HTMLCacheUpdate' => __DIR__ . '/includes/deferred/HTMLCacheUpdate.php',
+ 'HTMLCacheUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/HTMLCacheUpdateJob.php',
+ 'HTMLCheckField' => __DIR__ . '/includes/htmlform/HTMLCheckField.php',
+ 'HTMLCheckMatrix' => __DIR__ . '/includes/htmlform/HTMLCheckMatrix.php',
+ 'HTMLEditTools' => __DIR__ . '/includes/htmlform/HTMLEditTools.php',
+ 'HTMLFileCache' => __DIR__ . '/includes/cache/HTMLFileCache.php',
+ 'HTMLFloatField' => __DIR__ . '/includes/htmlform/HTMLFloatField.php',
+ 'HTMLForm' => __DIR__ . '/includes/htmlform/HTMLForm.php',
+ 'HTMLFormField' => __DIR__ . '/includes/htmlform/HTMLFormField.php',
+ 'HTMLFormFieldCloner' => __DIR__ . '/includes/htmlform/HTMLFormFieldCloner.php',
+ 'HTMLFormFieldRequiredOptionsException' => __DIR__ . '/includes/htmlform/HTMLFormFieldRequiredOptionsException.php',
+ 'HTMLHiddenField' => __DIR__ . '/includes/htmlform/HTMLHiddenField.php',
+ 'HTMLInfoField' => __DIR__ . '/includes/htmlform/HTMLInfoField.php',
+ 'HTMLIntField' => __DIR__ . '/includes/htmlform/HTMLIntField.php',
+ 'HTMLMultiSelectField' => __DIR__ . '/includes/htmlform/HTMLMultiSelectField.php',
+ 'HTMLNestedFilterable' => __DIR__ . '/includes/htmlform/HTMLNestedFilterable.php',
+ 'HTMLRadioField' => __DIR__ . '/includes/htmlform/HTMLRadioField.php',
+ 'HTMLSelectAndOtherField' => __DIR__ . '/includes/htmlform/HTMLSelectAndOtherField.php',
+ 'HTMLSelectField' => __DIR__ . '/includes/htmlform/HTMLSelectField.php',
+ 'HTMLSelectLimitField' => __DIR__ . '/includes/htmlform/HTMLSelectLimitField.php',
+ 'HTMLSelectNamespace' => __DIR__ . '/includes/htmlform/HTMLSelectNamespace.php',
+ 'HTMLSelectOrOtherField' => __DIR__ . '/includes/htmlform/HTMLSelectOrOtherField.php',
+ 'HTMLSubmitField' => __DIR__ . '/includes/htmlform/HTMLSubmitField.php',
+ 'HTMLTagFilter' => __DIR__ . '/includes/htmlform/HTMLTagFilter.php',
+ 'HTMLTextAreaField' => __DIR__ . '/includes/htmlform/HTMLTextAreaField.php',
+ 'HTMLTextField' => __DIR__ . '/includes/htmlform/HTMLTextField.php',
+ 'HWLDFWordAccumulator' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'HashBagOStuff' => __DIR__ . '/includes/libs/objectcache/HashBagOStuff.php',
+ 'HashConfig' => __DIR__ . '/includes/config/HashConfig.php',
+ 'HashRing' => __DIR__ . '/includes/libs/HashRing.php',
+ 'HashSiteStore' => __DIR__ . '/includes/site/HashSiteStore.php',
+ 'HashtableReplacer' => __DIR__ . '/includes/libs/replacers/HashtableReplacer.php',
+ 'HistoryAction' => __DIR__ . '/includes/actions/HistoryAction.php',
+ 'HistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
+ 'HistoryBlobCurStub' => __DIR__ . '/includes/HistoryBlob.php',
+ 'HistoryBlobStub' => __DIR__ . '/includes/HistoryBlob.php',
+ 'HistoryPager' => __DIR__ . '/includes/actions/HistoryAction.php',
+ 'Hooks' => __DIR__ . '/includes/Hooks.php',
+ 'Html' => __DIR__ . '/includes/Html.php',
+ 'HtmlFormatter' => __DIR__ . '/includes/HtmlFormatter.php',
+ 'Http' => __DIR__ . '/includes/HttpFunctions.php',
+ 'HttpError' => __DIR__ . '/includes/exception/HttpError.php',
+ 'HttpStatus' => __DIR__ . '/includes/libs/HttpStatus.php',
+ 'IApiMessage' => __DIR__ . '/includes/api/ApiMessage.php',
+ 'ICacheHelper' => __DIR__ . '/includes/cache/CacheHelper.php',
+ 'IContextSource' => __DIR__ . '/includes/context/IContextSource.php',
+ 'IDBAccessObject' => __DIR__ . '/includes/dao/IDBAccessObject.php',
+ 'IDatabase' => __DIR__ . '/includes/db/Database.php',
+ 'IEContentAnalyzer' => __DIR__ . '/includes/libs/IEContentAnalyzer.php',
+ 'IEUrlExtension' => __DIR__ . '/includes/libs/IEUrlExtension.php',
+ 'IJobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php',
+ 'IORMRow' => __DIR__ . '/includes/db/IORMRow.php',
+ 'IORMTable' => __DIR__ . '/includes/db/IORMTable.php',
+ 'IP' => __DIR__ . '/includes/utils/IP.php',
+ 'IPSet' => __DIR__ . '/includes/libs/IPSet.php',
+ 'IPTC' => __DIR__ . '/includes/media/IPTC.php',
+ 'IRCColourfulRCFeedFormatter' => __DIR__ . '/includes/rcfeed/IRCColourfulRCFeedFormatter.php',
+ 'IcuCollation' => __DIR__ . '/includes/Collation.php',
+ 'IdentityCollation' => __DIR__ . '/includes/Collation.php',
+ 'ImageBuilder' => __DIR__ . '/maintenance/rebuildImages.php',
+ 'ImageCleanup' => __DIR__ . '/maintenance/cleanupImages.php',
+ 'ImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php',
+ 'ImageGalleryBase' => __DIR__ . '/includes/gallery/ImageGalleryBase.php',
+ 'ImageHandler' => __DIR__ . '/includes/media/ImageHandler.php',
+ 'ImageHistoryList' => __DIR__ . '/includes/page/ImagePage.php',
+ 'ImageHistoryPseudoPager' => __DIR__ . '/includes/page/ImagePage.php',
+ 'ImageListPager' => __DIR__ . '/includes/specials/SpecialListfiles.php',
+ 'ImagePage' => __DIR__ . '/includes/page/ImagePage.php',
+ 'ImageQueryPage' => __DIR__ . '/includes/specialpage/ImageQueryPage.php',
+ 'ImportReporter' => __DIR__ . '/includes/specials/SpecialImport.php',
+ 'ImportSiteScripts' => __DIR__ . '/maintenance/importSiteScripts.php',
+ 'ImportSites' => __DIR__ . '/maintenance/importSites.php',
+ 'ImportSource' => __DIR__ . '/includes/Import.php',
+ 'ImportStreamSource' => __DIR__ . '/includes/Import.php',
+ 'ImportStringSource' => __DIR__ . '/includes/Import.php',
+ 'ImportTitleFactory' => __DIR__ . '/includes/title/ImportTitleFactory.php',
+ 'IncludableSpecialPage' => __DIR__ . '/includes/specialpage/IncludableSpecialPage.php',
+ 'IndexPager' => __DIR__ . '/includes/pager/IndexPager.php',
+ 'InfoAction' => __DIR__ . '/includes/actions/InfoAction.php',
+ 'InitEditCount' => __DIR__ . '/maintenance/initEditCount.php',
+ 'InitSiteStats' => __DIR__ . '/maintenance/initSiteStats.php',
+ 'InstallDocFormatter' => __DIR__ . '/includes/installer/InstallDocFormatter.php',
+ 'Installer' => __DIR__ . '/includes/installer/Installer.php',
+ 'InstallerOverrides' => __DIR__ . '/mw-config/overrides.php',
+ 'Interwiki' => __DIR__ . '/includes/interwiki/Interwiki.php',
+ 'InvalidPassword' => __DIR__ . '/includes/password/InvalidPassword.php',
+ 'IuConverter' => __DIR__ . '/languages/classes/LanguageIu.php',
+ 'JSCompilerContext' => __DIR__ . '/includes/libs/jsminplus.php',
+ 'JSMinPlus' => __DIR__ . '/includes/libs/jsminplus.php',
+ 'JSNode' => __DIR__ . '/includes/libs/jsminplus.php',
+ 'JSONRCFeedFormatter' => __DIR__ . '/includes/rcfeed/JSONRCFeedFormatter.php',
+ 'JSParseHelper' => __DIR__ . '/maintenance/jsparse.php',
+ 'JSParser' => __DIR__ . '/includes/libs/jsminplus.php',
+ 'JSToken' => __DIR__ . '/includes/libs/jsminplus.php',
+ 'JSTokenizer' => __DIR__ . '/includes/libs/jsminplus.php',
+ 'JavaScriptContent' => __DIR__ . '/includes/content/JavaScriptContent.php',
+ 'JavaScriptContentHandler' => __DIR__ . '/includes/content/JavaScriptContentHandler.php',
+ 'JavaScriptMinifier' => __DIR__ . '/includes/libs/JavaScriptMinifier.php',
+ 'Job' => __DIR__ . '/includes/jobqueue/Job.php',
+ 'JobQueue' => __DIR__ . '/includes/jobqueue/JobQueue.php',
+ 'JobQueueAggregator' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregator.php',
+ 'JobQueueAggregatorNull' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregator.php',
+ 'JobQueueAggregatorRedis' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php',
+ 'JobQueueConnectionError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
+ 'JobQueueDB' => __DIR__ . '/includes/jobqueue/JobQueueDB.php',
+ 'JobQueueError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
+ 'JobQueueFederated' => __DIR__ . '/includes/jobqueue/JobQueueFederated.php',
+ 'JobQueueGroup' => __DIR__ . '/includes/jobqueue/JobQueueGroup.php',
+ 'JobQueueRedis' => __DIR__ . '/includes/jobqueue/JobQueueRedis.php',
+ 'JobRunner' => __DIR__ . '/includes/jobqueue/JobRunner.php',
+ 'JobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php',
+ 'JpegHandler' => __DIR__ . '/includes/media/Jpeg.php',
+ 'JpegMetadataExtractor' => __DIR__ . '/includes/media/JpegMetadataExtractor.php',
+ 'JsonContent' => __DIR__ . '/includes/content/JsonContent.php',
+ 'JsonContentHandler' => __DIR__ . '/includes/content/JsonContentHandler.php',
+ 'KkConverter' => __DIR__ . '/languages/classes/LanguageKk.php',
+ 'KuConverter' => __DIR__ . '/languages/classes/LanguageKu.php',
+ 'LBFactory' => __DIR__ . '/includes/db/LBFactory.php',
+ 'LBFactoryFake' => __DIR__ . '/includes/db/LBFactory.php',
+ 'LBFactoryMulti' => __DIR__ . '/includes/db/LBFactoryMulti.php',
+ 'LBFactorySimple' => __DIR__ . '/includes/db/LBFactory.php',
+ 'LBFactorySingle' => __DIR__ . '/includes/db/LBFactorySingle.php',
+ 'LCStore' => __DIR__ . '/includes/cache/LocalisationCache.php',
+ 'LCStoreCDB' => __DIR__ . '/includes/cache/LocalisationCache.php',
+ 'LCStoreDB' => __DIR__ . '/includes/cache/LocalisationCache.php',
+ 'LCStoreNull' => __DIR__ . '/includes/cache/LocalisationCache.php',
+ 'LangMemUsage' => __DIR__ . '/maintenance/language/langmemusage.php',
+ 'Language' => __DIR__ . '/languages/Language.php',
+ 'LanguageAr' => __DIR__ . '/languages/classes/LanguageAr.php',
+ 'LanguageAz' => __DIR__ . '/languages/classes/LanguageAz.php',
+ 'LanguageBe_tarask' => __DIR__ . '/languages/classes/LanguageBe_tarask.php',
+ 'LanguageBg' => __DIR__ . '/languages/classes/LanguageBg.php',
+ 'LanguageBs' => __DIR__ . '/languages/classes/LanguageBs.php',
+ 'LanguageConverter' => __DIR__ . '/languages/LanguageConverter.php',
+ 'LanguageCu' => __DIR__ . '/languages/classes/LanguageCu.php',
+ 'LanguageDsb' => __DIR__ . '/languages/classes/LanguageDsb.php',
+ 'LanguageEo' => __DIR__ . '/languages/classes/LanguageEo.php',
+ 'LanguageEs' => __DIR__ . '/languages/classes/LanguageEs.php',
+ 'LanguageEt' => __DIR__ . '/languages/classes/LanguageEt.php',
+ 'LanguageFi' => __DIR__ . '/languages/classes/LanguageFi.php',
+ 'LanguageGa' => __DIR__ . '/languages/classes/LanguageGa.php',
+ 'LanguageGan' => __DIR__ . '/languages/classes/LanguageGan.php',
+ 'LanguageHe' => __DIR__ . '/languages/classes/LanguageHe.php',
+ 'LanguageHsb' => __DIR__ . '/languages/classes/LanguageHsb.php',
+ 'LanguageHu' => __DIR__ . '/languages/classes/LanguageHu.php',
+ 'LanguageHy' => __DIR__ . '/languages/classes/LanguageHy.php',
+ 'LanguageIu' => __DIR__ . '/languages/classes/LanguageIu.php',
+ 'LanguageJa' => __DIR__ . '/languages/classes/LanguageJa.php',
+ 'LanguageKaa' => __DIR__ . '/languages/classes/LanguageKaa.php',
+ 'LanguageKk' => __DIR__ . '/languages/classes/LanguageKk.php',
+ 'LanguageKk_cyrl' => __DIR__ . '/languages/classes/LanguageKk_cyrl.php',
+ 'LanguageKm' => __DIR__ . '/languages/classes/LanguageKm.php',
+ 'LanguageKsh' => __DIR__ . '/languages/classes/LanguageKsh.php',
+ 'LanguageKu' => __DIR__ . '/languages/classes/LanguageKu.php',
+ 'LanguageKu_ku' => __DIR__ . '/languages/classes/LanguageKu_ku.php',
+ 'LanguageLa' => __DIR__ . '/languages/classes/LanguageLa.php',
+ 'LanguageMl' => __DIR__ . '/languages/classes/LanguageMl.php',
+ 'LanguageMy' => __DIR__ . '/languages/classes/LanguageMy.php',
+ 'LanguageOs' => __DIR__ . '/languages/classes/LanguageOs.php',
+ 'LanguagePl' => __DIR__ . '/languages/classes/LanguagePl.php',
+ 'LanguageQqx' => __DIR__ . '/languages/classes/LanguageQqx.php',
+ 'LanguageRu' => __DIR__ . '/languages/classes/LanguageRu.php',
+ 'LanguageShi' => __DIR__ . '/languages/classes/LanguageShi.php',
+ 'LanguageSl' => __DIR__ . '/languages/classes/LanguageSl.php',
+ 'LanguageSr' => __DIR__ . '/languages/classes/LanguageSr.php',
+ 'LanguageTg' => __DIR__ . '/languages/classes/LanguageTg.php',
+ 'LanguageTr' => __DIR__ . '/languages/classes/LanguageTr.php',
+ 'LanguageTyv' => __DIR__ . '/languages/classes/LanguageTyv.php',
+ 'LanguageUk' => __DIR__ . '/languages/classes/LanguageUk.php',
+ 'LanguageUz' => __DIR__ . '/languages/classes/LanguageUz.php',
+ 'LanguageWa' => __DIR__ . '/languages/classes/LanguageWa.php',
+ 'LanguageYue' => __DIR__ . '/languages/classes/LanguageYue.php',
+ 'LanguageZh' => __DIR__ . '/languages/classes/LanguageZh.php',
+ 'LanguageZh_hans' => __DIR__ . '/languages/classes/LanguageZh_hans.php',
+ 'Languages' => __DIR__ . '/maintenance/language/languages.inc',
+ 'LayeredParameterizedPassword' => __DIR__ . '/includes/password/LayeredParameterizedPassword.php',
+ 'LegacyLogFormatter' => __DIR__ . '/includes/logging/LogFormatter.php',
+ 'License' => __DIR__ . '/includes/Licenses.php',
+ 'Licenses' => __DIR__ . '/includes/Licenses.php',
+ 'LikeMatch' => __DIR__ . '/includes/db/DatabaseUtility.php',
+ 'LinkBatch' => __DIR__ . '/includes/cache/LinkBatch.php',
+ 'LinkCache' => __DIR__ . '/includes/cache/LinkCache.php',
+ 'LinkFilter' => __DIR__ . '/includes/LinkFilter.php',
+ 'LinkHolderArray' => __DIR__ . '/includes/parser/LinkHolderArray.php',
+ 'LinkSearchPage' => __DIR__ . '/includes/specials/SpecialLinkSearch.php',
+ 'Linker' => __DIR__ . '/includes/Linker.php',
+ 'LinksDeletionUpdate' => __DIR__ . '/includes/deferred/LinksUpdate.php',
+ 'LinksUpdate' => __DIR__ . '/includes/deferred/LinksUpdate.php',
+ 'ListDuplicatedFilesPage' => __DIR__ . '/includes/specials/SpecialListDuplicatedFiles.php',
+ 'ListVariants' => __DIR__ . '/maintenance/language/listVariants.php',
+ 'ListredirectsPage' => __DIR__ . '/includes/specials/SpecialListredirects.php',
+ 'LoadBalancer' => __DIR__ . '/includes/db/LoadBalancer.php',
+ 'LoadBalancerSingle' => __DIR__ . '/includes/db/LBFactorySingle.php',
+ 'LoadMonitor' => __DIR__ . '/includes/db/LoadMonitor.php',
+ 'LoadMonitorMySQL' => __DIR__ . '/includes/db/LoadMonitor.php',
+ 'LoadMonitorNull' => __DIR__ . '/includes/db/LoadMonitor.php',
+ 'LocalFile' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
+ 'LocalFileDeleteBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
+ 'LocalFileMoveBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
+ 'LocalFileRestoreBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
+ 'LocalRepo' => __DIR__ . '/includes/filerepo/LocalRepo.php',
+ 'LocalSettingsGenerator' => __DIR__ . '/includes/installer/LocalSettingsGenerator.php',
+ 'LocalisationCache' => __DIR__ . '/includes/cache/LocalisationCache.php',
+ 'LocalisationCacheBulkLoad' => __DIR__ . '/includes/cache/LocalisationCache.php',
+ 'LockManager' => __DIR__ . '/includes/filebackend/lockmanager/LockManager.php',
+ 'LockManagerGroup' => __DIR__ . '/includes/filebackend/lockmanager/LockManagerGroup.php',
+ 'LogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
+ 'LogEntryBase' => __DIR__ . '/includes/logging/LogEntry.php',
+ 'LogEventsList' => __DIR__ . '/includes/logging/LogEventsList.php',
+ 'LogFormatter' => __DIR__ . '/includes/logging/LogFormatter.php',
+ 'LogPage' => __DIR__ . '/includes/logging/LogPage.php',
+ 'LogPager' => __DIR__ . '/includes/logging/LogPager.php',
+ 'LoggedUpdateMaintenance' => __DIR__ . '/maintenance/Maintenance.php',
+ 'LoginForm' => __DIR__ . '/includes/specials/SpecialUserlogin.php',
+ 'LonelyPagesPage' => __DIR__ . '/includes/specials/SpecialLonelypages.php',
+ 'LongPagesPage' => __DIR__ . '/includes/specials/SpecialLongpages.php',
+ 'MIMEsearchPage' => __DIR__ . '/includes/specials/SpecialMIMEsearch.php',
+ 'MWCallableUpdate' => __DIR__ . '/includes/deferred/CallableUpdate.php',
+ 'MWContentSerializationException' => __DIR__ . '/includes/content/ContentHandler.php',
+ 'MWCryptHKDF' => __DIR__ . '/includes/utils/MWCryptHKDF.php',
+ 'MWCryptRand' => __DIR__ . '/includes/utils/MWCryptRand.php',
+ 'MWDebug' => __DIR__ . '/includes/debug/MWDebug.php',
+ 'MWDocGen' => __DIR__ . '/maintenance/mwdocgen.php',
+ 'MWException' => __DIR__ . '/includes/exception/MWException.php',
+ 'MWExceptionHandler' => __DIR__ . '/includes/exception/MWExceptionHandler.php',
+ 'MWFunction' => __DIR__ . '/includes/utils/MWFunction.php',
+ 'MWHookException' => __DIR__ . '/includes/Hooks.php',
+ 'MWHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
+ 'MWMemcached' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
+ 'MWMessagePack' => __DIR__ . '/includes/libs/MWMessagePack.php',
+ 'MWNamespace' => __DIR__ . '/includes/MWNamespace.php',
+ 'MWOldPassword' => __DIR__ . '/includes/password/MWOldPassword.php',
+ 'MWSaltedPassword' => __DIR__ . '/includes/password/MWSaltedPassword.php',
+ 'MWTidy' => __DIR__ . '/includes/parser/MWTidy.php',
+ 'MWTidyWrapper' => __DIR__ . '/includes/parser/MWTidy.php',
+ 'MWTimestamp' => __DIR__ . '/includes/MWTimestamp.php',
+ 'MachineReadableRCFeedFormatter' => __DIR__ . '/includes/rcfeed/MachineReadableRCFeedFormatter.php',
+ 'MagicWord' => __DIR__ . '/includes/MagicWord.php',
+ 'MagicWordArray' => __DIR__ . '/includes/MagicWord.php',
+ 'MailAddress' => __DIR__ . '/includes/mail/MailAddress.php',
+ 'Maintenance' => __DIR__ . '/maintenance/Maintenance.php',
+ 'MaintenanceFormatInstallDoc' => __DIR__ . '/maintenance/formatInstallDoc.php',
+ 'MalformedTitleException' => __DIR__ . '/includes/title/MalformedTitleException.php',
+ 'ManualLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
+ 'MapCacheLRU' => __DIR__ . '/includes/libs/MapCacheLRU.php',
+ 'MappedDiff' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'MappedIterator' => __DIR__ . '/includes/libs/MappedIterator.php',
+ 'MarkpatrolledAction' => __DIR__ . '/includes/actions/MarkpatrolledAction.php',
+ 'McTest' => __DIR__ . '/maintenance/mctest.php',
+ 'MediaHandler' => __DIR__ . '/includes/media/MediaHandler.php',
+ 'MediaStatisticsPage' => __DIR__ . '/includes/specials/SpecialMediaStatistics.php',
+ 'MediaTransformError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
+ 'MediaTransformInvalidParametersException' => __DIR__ . '/includes/media/MediaTransformInvalidParametersException.php',
+ 'MediaTransformOutput' => __DIR__ . '/includes/media/MediaTransformOutput.php',
+ 'MediaWiki' => __DIR__ . '/includes/MediaWiki.php',
+ 'MediaWikiI18N' => __DIR__ . '/includes/skins/MediaWikiI18N.php',
+ 'MediaWikiPageLinkRenderer' => __DIR__ . '/includes/title/MediaWikiPageLinkRenderer.php',
+ 'MediaWikiSite' => __DIR__ . '/includes/site/MediaWikiSite.php',
+ 'MediaWikiTitleCodec' => __DIR__ . '/includes/title/MediaWikiTitleCodec.php',
+ 'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
+ 'MediaWiki\\Logger\\LegacyLogger' => __DIR__ . '/includes/debug/logger/LegacyLogger.php',
+ 'MediaWiki\\Logger\\LegacySpi' => __DIR__ . '/includes/debug/logger/LegacySpi.php',
+ 'MediaWiki\\Logger\\LoggerFactory' => __DIR__ . '/includes/debug/logger/LoggerFactory.php',
+ 'MediaWiki\\Logger\\MonologSpi' => __DIR__ . '/includes/debug/logger/MonologSpi.php',
+ 'MediaWiki\\Logger\\Monolog\\LegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
+ 'MediaWiki\\Logger\\Monolog\\LegacyHandler' => __DIR__ . '/includes/debug/logger/monolog/LegacyHandler.php',
+ 'MediaWiki\\Logger\\Monolog\\SyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/SyslogHandler.php',
+ 'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php',
+ 'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
+ 'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php',
+ 'MemCachedClientforWiki' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
+ 'MemcLockManager' => __DIR__ . '/includes/filebackend/lockmanager/MemcLockManager.php',
+ 'MemcachedBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedBagOStuff.php',
+ 'MemcachedPeclBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedPeclBagOStuff.php',
+ 'MemcachedPhpBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedPhpBagOStuff.php',
+ 'MemoryFileBackend' => __DIR__ . '/includes/filebackend/MemoryFileBackend.php',
+ 'MergeHistoryPager' => __DIR__ . '/includes/specials/SpecialMergeHistory.php',
+ 'MergeLogFormatter' => __DIR__ . '/includes/logging/MergeLogFormatter.php',
+ 'MergeMessageFileList' => __DIR__ . '/maintenance/mergeMessageFileList.php',
+ 'Message' => __DIR__ . '/includes/Message.php',
+ 'MessageBlobStore' => __DIR__ . '/includes/MessageBlobStore.php',
+ 'MessageCache' => __DIR__ . '/includes/cache/MessageCache.php',
+ 'MessageContent' => __DIR__ . '/includes/content/MessageContent.php',
+ 'MessageSpecifier' => __DIR__ . '/includes/libs/MessageSpecifier.php',
+ 'MigrateUserGroup' => __DIR__ . '/maintenance/migrateUserGroup.php',
+ 'MimeMagic' => __DIR__ . '/includes/MimeMagic.php',
+ 'MinifyScript' => __DIR__ . '/maintenance/minify.php',
+ 'MostcategoriesPage' => __DIR__ . '/includes/specials/SpecialMostcategories.php',
+ 'MostimagesPage' => __DIR__ . '/includes/specials/SpecialMostimages.php',
+ 'MostinterwikisPage' => __DIR__ . '/includes/specials/SpecialMostinterwikis.php',
+ 'MostlinkedCategoriesPage' => __DIR__ . '/includes/specials/SpecialMostlinkedcategories.php',
+ 'MostlinkedPage' => __DIR__ . '/includes/specials/SpecialMostlinked.php',
+ 'MostlinkedTemplatesPage' => __DIR__ . '/includes/specials/SpecialMostlinkedtemplates.php',
+ 'MostrevisionsPage' => __DIR__ . '/includes/specials/SpecialMostrevisions.php',
+ 'MoveBatch' => __DIR__ . '/maintenance/moveBatch.php',
+ 'MoveFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+ 'MoveLogFormatter' => __DIR__ . '/includes/logging/MoveLogFormatter.php',
+ 'MovePage' => __DIR__ . '/includes/MovePage.php',
+ 'MovePageForm' => __DIR__ . '/includes/specials/SpecialMovepage.php',
+ 'MssqlBlob' => __DIR__ . '/includes/db/DatabaseMssql.php',
+ 'MssqlField' => __DIR__ . '/includes/db/DatabaseMssql.php',
+ 'MssqlInstaller' => __DIR__ . '/includes/installer/MssqlInstaller.php',
+ 'MssqlResultWrapper' => __DIR__ . '/includes/db/DatabaseMssql.php',
+ 'MssqlUpdater' => __DIR__ . '/includes/installer/MssqlUpdater.php',
+ 'MultiConfig' => __DIR__ . '/includes/config/MultiConfig.php',
+ 'MultiHttpClient' => __DIR__ . '/includes/libs/MultiHttpClient.php',
+ 'MultiWriteBagOStuff' => __DIR__ . '/includes/objectcache/MultiWriteBagOStuff.php',
+ 'MutableConfig' => __DIR__ . '/includes/config/MutableConfig.php',
+ 'MwSql' => __DIR__ . '/maintenance/sql.php',
+ 'MyLocalSettingsGenerator' => __DIR__ . '/mw-config/overrides.php',
+ 'MySQLField' => __DIR__ . '/includes/db/DatabaseMysqlBase.php',
+ 'MySQLMasterPos' => __DIR__ . '/includes/db/DatabaseMysqlBase.php',
+ 'MySqlLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php',
+ 'MysqlInstaller' => __DIR__ . '/includes/installer/MysqlInstaller.php',
+ 'MysqlUpdater' => __DIR__ . '/includes/installer/MysqlUpdater.php',
+ 'NaiveForeignTitleFactory' => __DIR__ . '/includes/title/NaiveForeignTitleFactory.php',
+ 'NaiveImportTitleFactory' => __DIR__ . '/includes/title/NaiveImportTitleFactory.php',
+ 'NamespaceAwareForeignTitleFactory' => __DIR__ . '/includes/title/NamespaceAwareForeignTitleFactory.php',
+ 'NamespaceConflictChecker' => __DIR__ . '/maintenance/namespaceDupes.php',
+ 'NamespaceImportTitleFactory' => __DIR__ . '/includes/title/NamespaceImportTitleFactory.php',
+ 'NewFilesPager' => __DIR__ . '/includes/specials/SpecialNewimages.php',
+ 'NewPagesPager' => __DIR__ . '/includes/specials/SpecialNewpages.php',
+ 'NewUsersLogFormatter' => __DIR__ . '/includes/logging/NewUsersLogFormatter.php',
+ 'NolinesImageGallery' => __DIR__ . '/includes/gallery/NolinesImageGallery.php',
+ 'NukeNS' => __DIR__ . '/maintenance/nukeNS.php',
+ 'NukePage' => __DIR__ . '/maintenance/nukePage.php',
+ 'NullFileJournal' => __DIR__ . '/includes/filebackend/filejournal/FileJournal.php',
+ 'NullFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+ 'NullJob' => __DIR__ . '/includes/jobqueue/jobs/NullJob.php',
+ 'NullLockManager' => __DIR__ . '/includes/filebackend/lockmanager/LockManager.php',
+ 'NullRepo' => __DIR__ . '/includes/filerepo/NullRepo.php',
+ 'ORAField' => __DIR__ . '/includes/db/DatabaseOracle.php',
+ 'ORAResult' => __DIR__ . '/includes/db/DatabaseOracle.php',
+ 'ORMIterator' => __DIR__ . '/includes/db/ORMIterator.php',
+ 'ORMResult' => __DIR__ . '/includes/db/ORMResult.php',
+ 'ORMRow' => __DIR__ . '/includes/db/ORMRow.php',
+ 'ORMTable' => __DIR__ . '/includes/db/ORMTable.php',
+ 'ObjectCache' => __DIR__ . '/includes/objectcache/ObjectCache.php',
+ 'ObjectCacheSessionHandler' => __DIR__ . '/includes/objectcache/ObjectCacheSessionHandler.php',
+ 'ObjectFactory' => __DIR__ . '/includes/libs/ObjectFactory.php',
+ 'ObjectFileCache' => __DIR__ . '/includes/cache/ObjectFileCache.php',
+ 'OldChangesList' => __DIR__ . '/includes/changes/OldChangesList.php',
+ 'OldLocalFile' => __DIR__ . '/includes/filerepo/file/OldLocalFile.php',
+ 'OracleInstaller' => __DIR__ . '/includes/installer/OracleInstaller.php',
+ 'OracleUpdater' => __DIR__ . '/includes/installer/OracleUpdater.php',
+ 'OrphanStats' => __DIR__ . '/maintenance/storage/orphanStats.php',
+ 'Orphans' => __DIR__ . '/maintenance/orphans.php',
+ 'OutputPage' => __DIR__ . '/includes/OutputPage.php',
+ 'PNGHandler' => __DIR__ . '/includes/media/PNG.php',
+ 'PNGMetadataExtractor' => __DIR__ . '/includes/media/PNGMetadataExtractor.php',
+ 'PPCustomFrame_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+ 'PPCustomFrame_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPDAccum_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPDPart' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+ 'PPDPart_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPDStack' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+ 'PPDStackElement' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+ 'PPDStackElement_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPDStack_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPFrame' => __DIR__ . '/includes/parser/Preprocessor.php',
+ 'PPFrame_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+ 'PPFrame_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPFuzzTest' => __DIR__ . '/maintenance/preprocessorFuzzTest.php',
+ 'PPFuzzTester' => __DIR__ . '/maintenance/preprocessorFuzzTest.php',
+ 'PPFuzzUser' => __DIR__ . '/maintenance/preprocessorFuzzTest.php',
+ 'PPNode' => __DIR__ . '/includes/parser/Preprocessor.php',
+ 'PPNode_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+ 'PPNode_Hash_Array' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPNode_Hash_Attr' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPNode_Hash_Text' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPNode_Hash_Tree' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PPTemplateFrame_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+ 'PPTemplateFrame_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'PackedHoverImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php',
+ 'PackedImageGallery' => __DIR__ . '/includes/gallery/PackedImageGallery.php',
+ 'PackedOverlayImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php',
+ 'Page' => __DIR__ . '/includes/page/WikiPage.php',
+ 'PageArchive' => __DIR__ . '/includes/specials/SpecialUndelete.php',
+ 'PageExists' => __DIR__ . '/maintenance/pageExists.php',
+ 'PageLangLogFormatter' => __DIR__ . '/includes/logging/PageLangLogFormatter.php',
+ 'PageLinkRenderer' => __DIR__ . '/includes/title/PageLinkRenderer.php',
+ 'PageQueryPage' => __DIR__ . '/includes/specialpage/PageQueryPage.php',
+ 'Pager' => __DIR__ . '/includes/pager/Pager.php',
+ 'ParameterizedPassword' => __DIR__ . '/includes/password/ParameterizedPassword.php',
+ 'Parser' => __DIR__ . '/includes/parser/Parser.php',
+ 'ParserCache' => __DIR__ . '/includes/parser/ParserCache.php',
+ 'ParserDiffTest' => __DIR__ . '/includes/parser/ParserDiffTest.php',
+ 'ParserOptions' => __DIR__ . '/includes/parser/ParserOptions.php',
+ 'ParserOutput' => __DIR__ . '/includes/parser/ParserOutput.php',
+ 'ParsoidVirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/ParsoidVirtualRESTService.php',
+ 'Password' => __DIR__ . '/includes/password/Password.php',
+ 'PasswordError' => __DIR__ . '/includes/password/PasswordError.php',
+ 'PasswordFactory' => __DIR__ . '/includes/password/PasswordFactory.php',
+ 'PatchSql' => __DIR__ . '/maintenance/patchSql.php',
+ 'PathRouter' => __DIR__ . '/includes/PathRouter.php',
+ 'PathRouterPatternReplacer' => __DIR__ . '/includes/PathRouter.php',
+ 'PatrolLog' => __DIR__ . '/includes/logging/PatrolLog.php',
+ 'PatrolLogFormatter' => __DIR__ . '/includes/logging/PatrolLogFormatter.php',
+ 'Pbkdf2Password' => __DIR__ . '/includes/password/Pbkdf2Password.php',
+ 'PermissionsError' => __DIR__ . '/includes/exception/PermissionsError.php',
+ 'PhpHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
+ 'PhpXmlBugTester' => __DIR__ . '/includes/installer/PhpBugTests.php',
+ 'PoolCounter' => __DIR__ . '/includes/poolcounter/PoolCounter.php',
+ 'PoolCounterRedis' => __DIR__ . '/includes/poolcounter/PoolCounterRedis.php',
+ 'PoolCounterWork' => __DIR__ . '/includes/poolcounter/PoolCounterWork.php',
+ 'PoolCounterWorkViaCallback' => __DIR__ . '/includes/poolcounter/PoolCounterWorkViaCallback.php',
+ 'PoolCounter_Stub' => __DIR__ . '/includes/poolcounter/PoolCounter.php',
+ 'PoolWorkArticleView' => __DIR__ . '/includes/poolcounter/PoolWorkArticleView.php',
+ 'PopulateBacklinkNamespace' => __DIR__ . '/maintenance/populateBacklinkNamespace.php',
+ 'PopulateCategory' => __DIR__ . '/maintenance/populateCategory.php',
+ 'PopulateFilearchiveSha1' => __DIR__ . '/maintenance/populateFilearchiveSha1.php',
+ 'PopulateImageSha1' => __DIR__ . '/maintenance/populateImageSha1.php',
+ 'PopulateLogSearch' => __DIR__ . '/maintenance/populateLogSearch.php',
+ 'PopulateLogUsertext' => __DIR__ . '/maintenance/populateLogUsertext.php',
+ 'PopulateParentId' => __DIR__ . '/maintenance/populateParentId.php',
+ 'PopulateRecentChangesSource' => __DIR__ . '/maintenance/populateRecentChangesSource.php',
+ 'PopulateRevisionLength' => __DIR__ . '/maintenance/populateRevisionLength.php',
+ 'PopulateRevisionSha1' => __DIR__ . '/maintenance/populateRevisionSha1.php',
+ 'PostgreSqlLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php',
+ 'PostgresBlob' => __DIR__ . '/includes/db/DatabasePostgres.php',
+ 'PostgresField' => __DIR__ . '/includes/db/DatabasePostgres.php',
+ 'PostgresInstaller' => __DIR__ . '/includes/installer/PostgresInstaller.php',
+ 'PostgresTransactionState' => __DIR__ . '/includes/db/DatabasePostgres.php',
+ 'PostgresUpdater' => __DIR__ . '/includes/installer/PostgresUpdater.php',
+ 'Preferences' => __DIR__ . '/includes/Preferences.php',
+ 'PreferencesForm' => __DIR__ . '/includes/Preferences.php',
+ 'PrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
+ 'PreprocessDump' => __DIR__ . '/maintenance/preprocessDump.php',
+ 'Preprocessor' => __DIR__ . '/includes/parser/Preprocessor.php',
+ 'Preprocessor_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+ 'Preprocessor_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+ 'ProcessCacheLRU' => __DIR__ . '/includes/libs/ProcessCacheLRU.php',
+ 'Processor' => __DIR__ . '/includes/registration/Processor.php',
+ 'ProfileSection' => __DIR__ . '/includes/profiler/ProfileSection.php',
+ 'Profiler' => __DIR__ . '/includes/profiler/Profiler.php',
+ 'ProfilerOutput' => __DIR__ . '/includes/profiler/output/ProfilerOutput.php',
+ 'ProfilerOutputDb' => __DIR__ . '/includes/profiler/output/ProfilerOutputDb.php',
+ 'ProfilerOutputDump' => __DIR__ . '/includes/profiler/output/ProfilerOutputDump.php',
+ 'ProfilerOutputStats' => __DIR__ . '/includes/profiler/output/ProfilerOutputStats.php',
+ 'ProfilerOutputText' => __DIR__ . '/includes/profiler/output/ProfilerOutputText.php',
+ 'ProfilerOutputUdp' => __DIR__ . '/includes/profiler/output/ProfilerOutputUdp.php',
+ 'ProfilerSectionOnly' => __DIR__ . '/includes/profiler/ProfilerSectionOnly.php',
+ 'ProfilerStub' => __DIR__ . '/includes/profiler/ProfilerStub.php',
+ 'ProfilerXhprof' => __DIR__ . '/includes/profiler/ProfilerXhprof.php',
+ 'Protect' => __DIR__ . '/maintenance/protect.php',
+ 'ProtectAction' => __DIR__ . '/includes/actions/ProtectAction.php',
+ 'ProtectedPagesPager' => __DIR__ . '/includes/specials/SpecialProtectedpages.php',
+ 'ProtectedTitlesPager' => __DIR__ . '/includes/specials/SpecialProtectedtitles.php',
+ 'ProtectionForm' => __DIR__ . '/includes/ProtectionForm.php',
+ 'PruneFileCache' => __DIR__ . '/maintenance/pruneFileCache.php',
+ 'PublishStashedFileJob' => __DIR__ . '/includes/jobqueue/jobs/PublishStashedFileJob.php',
+ 'PurgeAction' => __DIR__ . '/includes/actions/PurgeAction.php',
+ 'PurgeChangedFiles' => __DIR__ . '/maintenance/purgeChangedFiles.php',
+ 'PurgeChangedPages' => __DIR__ . '/maintenance/purgeChangedPages.php',
+ 'PurgeList' => __DIR__ . '/maintenance/purgeList.php',
+ 'PurgeOldText' => __DIR__ . '/maintenance/purgeOldText.php',
+ 'PurgeParserCache' => __DIR__ . '/maintenance/purgeParserCache.php',
+ 'QueryPage' => __DIR__ . '/includes/specialpage/QueryPage.php',
+ 'QuickTemplate' => __DIR__ . '/includes/skins/QuickTemplate.php',
+ 'QuorumLockManager' => __DIR__ . '/includes/filebackend/lockmanager/QuorumLockManager.php',
+ 'RCCacheEntry' => __DIR__ . '/includes/changes/RCCacheEntry.php',
+ 'RCCacheEntryFactory' => __DIR__ . '/includes/changes/RCCacheEntryFactory.php',
+ 'RCDatabaseLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
+ 'RCFeedEngine' => __DIR__ . '/includes/rcfeed/RCFeedEngine.php',
+ 'RCFeedFormatter' => __DIR__ . '/includes/rcfeed/RCFeedFormatter.php',
+ 'RSSFeed' => __DIR__ . '/includes/Feed.php',
+ 'RandomPage' => __DIR__ . '/includes/specials/SpecialRandompage.php',
+ 'RangeDifference' => __DIR__ . '/includes/diff/WikiDiff3.php',
+ 'RawAction' => __DIR__ . '/includes/actions/RawAction.php',
+ 'RawMessage' => __DIR__ . '/includes/Message.php',
+ 'ReadOnlyError' => __DIR__ . '/includes/exception/ReadOnlyError.php',
+ 'ReassignEdits' => __DIR__ . '/maintenance/reassignEdits.php',
+ 'RebuildAll' => __DIR__ . '/maintenance/rebuildall.php',
+ 'RebuildFileCache' => __DIR__ . '/maintenance/rebuildFileCache.php',
+ 'RebuildLocalisationCache' => __DIR__ . '/maintenance/rebuildLocalisationCache.php',
+ 'RebuildMessages' => __DIR__ . '/maintenance/rebuildmessages.php',
+ 'RebuildRecentchanges' => __DIR__ . '/maintenance/rebuildrecentchanges.php',
+ 'RebuildSitesCache' => __DIR__ . '/maintenance/rebuildSitesCache.php',
+ 'RebuildTextIndex' => __DIR__ . '/maintenance/rebuildtextindex.php',
+ 'RecentChange' => __DIR__ . '/includes/changes/RecentChange.php',
+ 'RecentChangesUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/RecentChangesUpdateJob.php',
+ 'RecompressTracked' => __DIR__ . '/maintenance/storage/recompressTracked.php',
+ 'RedirectSpecialArticle' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
+ 'RedirectSpecialPage' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
+ 'RedisBagOStuff' => __DIR__ . '/includes/objectcache/RedisBagOStuff.php',
+ 'RedisConnRef' => __DIR__ . '/includes/clientpool/RedisConnectionPool.php',
+ 'RedisConnectionPool' => __DIR__ . '/includes/clientpool/RedisConnectionPool.php',
+ 'RedisLockManager' => __DIR__ . '/includes/filebackend/lockmanager/RedisLockManager.php',
+ 'RedisPubSubFeedEngine' => __DIR__ . '/includes/rcfeed/RedisPubSubFeedEngine.php',
+ 'RefreshFileHeaders' => __DIR__ . '/maintenance/refreshFileHeaders.php',
+ 'RefreshImageMetadata' => __DIR__ . '/maintenance/refreshImageMetadata.php',
+ 'RefreshLinks' => __DIR__ . '/maintenance/refreshLinks.php',
+ 'RefreshLinksJob' => __DIR__ . '/includes/jobqueue/jobs/RefreshLinksJob.php',
+ 'RegexlikeReplacer' => __DIR__ . '/includes/libs/replacers/RegexlikeReplacer.php',
+ 'RemoveInvalidEmails' => __DIR__ . '/maintenance/removeInvalidEmails.php',
+ 'RemoveUnusedAccounts' => __DIR__ . '/maintenance/removeUnusedAccounts.php',
+ 'RenameDbPrefix' => __DIR__ . '/maintenance/renameDbPrefix.php',
+ 'RenderAction' => __DIR__ . '/includes/actions/RenderAction.php',
+ 'ReplacementArray' => __DIR__ . '/includes/libs/ReplacementArray.php',
+ 'Replacer' => __DIR__ . '/includes/libs/replacers/Replacer.php',
+ 'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php',
+ 'RequestContext' => __DIR__ . '/includes/context/RequestContext.php',
+ 'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
+ 'ResourceFileCache' => __DIR__ . '/includes/cache/ResourceFileCache.php',
+ 'ResourceLoader' => __DIR__ . '/includes/resourceloader/ResourceLoader.php',
+ 'ResourceLoaderContext' => __DIR__ . '/includes/resourceloader/ResourceLoaderContext.php',
+ 'ResourceLoaderEditToolbarModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderEditToolbarModule.php',
+ 'ResourceLoaderFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderFileModule.php',
+ 'ResourceLoaderFilePath' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePath.php',
+ 'ResourceLoaderImage' => __DIR__ . '/includes/resourceloader/ResourceLoaderImage.php',
+ 'ResourceLoaderImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderImageModule.php',
+ 'ResourceLoaderLanguageDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageDataModule.php',
+ 'ResourceLoaderLanguageNamesModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageNamesModule.php',
+ 'ResourceLoaderModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderModule.php',
+ 'ResourceLoaderSiteModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSiteModule.php',
+ 'ResourceLoaderSkinModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSkinModule.php',
+ 'ResourceLoaderSpecialCharacterDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php',
+ 'ResourceLoaderStartUpModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderStartUpModule.php',
+ 'ResourceLoaderUserCSSPrefsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php',
+ 'ResourceLoaderUserDefaultsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserDefaultsModule.php',
+ 'ResourceLoaderUserGroupsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserGroupsModule.php',
+ 'ResourceLoaderUserModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserModule.php',
+ 'ResourceLoaderUserOptionsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserOptionsModule.php',
+ 'ResourceLoaderUserTokensModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserTokensModule.php',
+ 'ResourceLoaderWikiModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderWikiModule.php',
+ 'RestbaseVirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/RestbaseVirtualRESTService.php',
+ 'ResultWrapper' => __DIR__ . '/includes/db/DatabaseUtility.php',
+ 'RevDelArchiveItem' => __DIR__ . '/includes/revisiondelete/RevDelArchiveItem.php',
+ 'RevDelArchiveList' => __DIR__ . '/includes/revisiondelete/RevDelArchiveList.php',
+ 'RevDelArchivedFileItem' => __DIR__ . '/includes/revisiondelete/RevDelArchivedFileItem.php',
+ 'RevDelArchivedFileList' => __DIR__ . '/includes/revisiondelete/RevDelArchivedFileList.php',
+ 'RevDelArchivedRevisionItem' => __DIR__ . '/includes/revisiondelete/RevDelArchivedRevisionItem.php',
+ 'RevDelFileItem' => __DIR__ . '/includes/revisiondelete/RevDelFileItem.php',
+ 'RevDelFileList' => __DIR__ . '/includes/revisiondelete/RevDelFileList.php',
+ 'RevDelItem' => __DIR__ . '/includes/revisiondelete/RevDelItem.php',
+ 'RevDelList' => __DIR__ . '/includes/revisiondelete/RevDelList.php',
+ 'RevDelLogItem' => __DIR__ . '/includes/revisiondelete/RevDelLogItem.php',
+ 'RevDelLogList' => __DIR__ . '/includes/revisiondelete/RevDelLogList.php',
+ 'RevDelRevisionItem' => __DIR__ . '/includes/revisiondelete/RevDelRevisionItem.php',
+ 'RevDelRevisionList' => __DIR__ . '/includes/revisiondelete/RevDelRevisionList.php',
+ 'ReverseChronologicalPager' => __DIR__ . '/includes/pager/ReverseChronologicalPager.php',
+ 'RevertAction' => __DIR__ . '/includes/actions/RevertAction.php',
+ 'Revision' => __DIR__ . '/includes/Revision.php',
+ 'RevisionDeleteUser' => __DIR__ . '/includes/revisiondelete/RevisionDeleteUser.php',
+ 'RevisionDeleter' => __DIR__ . '/includes/revisiondelete/RevisionDeleter.php',
+ 'RevisionItem' => __DIR__ . '/includes/RevisionList.php',
+ 'RevisionItemBase' => __DIR__ . '/includes/RevisionList.php',
+ 'RevisionList' => __DIR__ . '/includes/RevisionList.php',
+ 'RevisionListBase' => __DIR__ . '/includes/RevisionList.php',
+ 'RevisiondeleteAction' => __DIR__ . '/includes/actions/RevisiondeleteAction.php',
+ 'RightsLogFormatter' => __DIR__ . '/includes/logging/RightsLogFormatter.php',
+ 'RollbackAction' => __DIR__ . '/includes/actions/RollbackAction.php',
+ 'RollbackEdits' => __DIR__ . '/maintenance/rollbackEdits.php',
+ 'RunJobs' => __DIR__ . '/maintenance/runJobs.php',
+ 'RunningStat' => __DIR__ . '/includes/libs/RunningStat.php',
+ 'SQLiteField' => __DIR__ . '/includes/db/DatabaseSqlite.php',
+ 'SVGMetadataExtractor' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
+ 'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
+ 'Sanitizer' => __DIR__ . '/includes/Sanitizer.php',
+ 'SavepointPostgres' => __DIR__ . '/includes/db/DatabasePostgres.php',
+ 'ScopedCallback' => __DIR__ . '/includes/libs/ScopedCallback.php',
+ 'ScopedLock' => __DIR__ . '/includes/filebackend/lockmanager/ScopedLock.php',
+ 'ScopedPHPTimeout' => __DIR__ . '/includes/libs/ScopedPHPTimeout.php',
+ 'SearchDatabase' => __DIR__ . '/includes/search/SearchDatabase.php',
+ 'SearchDump' => __DIR__ . '/maintenance/dumpIterator.php',
+ 'SearchEngine' => __DIR__ . '/includes/search/SearchEngine.php',
+ 'SearchEngineDummy' => __DIR__ . '/includes/search/SearchEngine.php',
+ 'SearchHighlighter' => __DIR__ . '/includes/search/SearchHighlighter.php',
+ 'SearchMssql' => __DIR__ . '/includes/search/SearchMssql.php',
+ 'SearchMySQL' => __DIR__ . '/includes/search/SearchMySQL.php',
+ 'SearchNearMatchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+ 'SearchOracle' => __DIR__ . '/includes/search/SearchOracle.php',
+ 'SearchPostgres' => __DIR__ . '/includes/search/SearchPostgres.php',
+ 'SearchResult' => __DIR__ . '/includes/search/SearchResult.php',
+ 'SearchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+ 'SearchSqlite' => __DIR__ . '/includes/search/SearchSqlite.php',
+ 'SearchUpdate' => __DIR__ . '/includes/deferred/SearchUpdate.php',
+ 'SectionProfileCallback' => __DIR__ . '/includes/profiler/SectionProfiler.php',
+ 'SectionProfiler' => __DIR__ . '/includes/profiler/SectionProfiler.php',
+ 'SevenZipStream' => __DIR__ . '/maintenance/7zip.inc',
+ 'ShiConverter' => __DIR__ . '/languages/classes/LanguageShi.php',
+ 'ShortPagesPage' => __DIR__ . '/includes/specials/SpecialShortpages.php',
+ 'ShowCacheStats' => __DIR__ . '/maintenance/showCacheStats.php',
+ 'ShowJobs' => __DIR__ . '/maintenance/showJobs.php',
+ 'ShowSiteStats' => __DIR__ . '/maintenance/showSiteStats.php',
+ 'Site' => __DIR__ . '/includes/site/Site.php',
+ 'SiteArray' => __DIR__ . '/includes/site/SiteList.php',
+ 'SiteConfiguration' => __DIR__ . '/includes/SiteConfiguration.php',
+ 'SiteExporter' => __DIR__ . '/includes/site/SiteExporter.php',
+ 'SiteImporter' => __DIR__ . '/includes/site/SiteImporter.php',
+ 'SiteList' => __DIR__ . '/includes/site/SiteList.php',
+ 'SiteLookup' => __DIR__ . '/includes/site/SiteLookup.php',
+ 'SiteObject' => __DIR__ . '/includes/site/Site.php',
+ 'SiteSQLStore' => __DIR__ . '/includes/site/SiteSQLStore.php',
+ 'SiteStats' => __DIR__ . '/includes/SiteStats.php',
+ 'SiteStatsInit' => __DIR__ . '/includes/SiteStats.php',
+ 'SiteStatsUpdate' => __DIR__ . '/includes/deferred/SiteStatsUpdate.php',
+ 'SiteStore' => __DIR__ . '/includes/site/SiteStore.php',
+ 'SitesCacheFileBuilder' => __DIR__ . '/includes/site/SitesCacheFileBuilder.php',
+ 'Skin' => __DIR__ . '/includes/skins/Skin.php',
+ 'SkinApi' => __DIR__ . '/includes/skins/SkinApi.php',
+ 'SkinApiTemplate' => __DIR__ . '/includes/skins/SkinApiTemplate.php',
+ 'SkinException' => __DIR__ . '/includes/skins/SkinException.php',
+ 'SkinFactory' => __DIR__ . '/includes/skins/SkinFactory.php',
+ 'SkinFallback' => __DIR__ . '/includes/skins/SkinFallback.php',
+ 'SkinFallbackTemplate' => __DIR__ . '/includes/skins/SkinFallbackTemplate.php',
+ 'SkinTemplate' => __DIR__ . '/includes/skins/SkinTemplate.php',
+ 'SpecialActiveUsers' => __DIR__ . '/includes/specials/SpecialActiveusers.php',
+ 'SpecialAllMessages' => __DIR__ . '/includes/specials/SpecialAllMessages.php',
+ 'SpecialAllMyUploads' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+ 'SpecialAllPages' => __DIR__ . '/includes/specials/SpecialAllPages.php',
+ 'SpecialApiHelp' => __DIR__ . '/includes/specials/SpecialApiHelp.php',
+ 'SpecialBlankpage' => __DIR__ . '/includes/specials/SpecialBlankpage.php',
+ 'SpecialBlock' => __DIR__ . '/includes/specials/SpecialBlock.php',
+ 'SpecialBlockList' => __DIR__ . '/includes/specials/SpecialBlockList.php',
+ 'SpecialBookSources' => __DIR__ . '/includes/specials/SpecialBooksources.php',
+ 'SpecialCachedPage' => __DIR__ . '/includes/specials/SpecialCachedPage.php',
+ 'SpecialCategories' => __DIR__ . '/includes/specials/SpecialCategories.php',
+ 'SpecialChangeEmail' => __DIR__ . '/includes/specials/SpecialChangeEmail.php',
+ 'SpecialChangePassword' => __DIR__ . '/includes/specials/SpecialChangePassword.php',
+ 'SpecialComparePages' => __DIR__ . '/includes/specials/SpecialComparePages.php',
+ 'SpecialContributions' => __DIR__ . '/includes/specials/SpecialContributions.php',
+ 'SpecialCreateAccount' => __DIR__ . '/includes/specials/SpecialCreateAccount.php',
+ 'SpecialDiff' => __DIR__ . '/includes/specials/SpecialDiff.php',
+ 'SpecialEditTags' => __DIR__ . '/includes/specials/SpecialEditTags.php',
+ 'SpecialEditWatchlist' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
+ 'SpecialEmailUser' => __DIR__ . '/includes/specials/SpecialEmailuser.php',
+ 'SpecialExpandTemplates' => __DIR__ . '/includes/specials/SpecialExpandTemplates.php',
+ 'SpecialExport' => __DIR__ . '/includes/specials/SpecialExport.php',
+ 'SpecialFilepath' => __DIR__ . '/includes/specials/SpecialFilepath.php',
+ 'SpecialImport' => __DIR__ . '/includes/specials/SpecialImport.php',
+ 'SpecialJavaScriptTest' => __DIR__ . '/includes/specials/SpecialJavaScriptTest.php',
+ 'SpecialListAdmins' => __DIR__ . '/includes/specials/SpecialListusers.php',
+ 'SpecialListBots' => __DIR__ . '/includes/specials/SpecialListusers.php',
+ 'SpecialListFiles' => __DIR__ . '/includes/specials/SpecialListfiles.php',
+ 'SpecialListGroupRights' => __DIR__ . '/includes/specials/SpecialListgrouprights.php',
+ 'SpecialListUsers' => __DIR__ . '/includes/specials/SpecialListusers.php',
+ 'SpecialLockdb' => __DIR__ . '/includes/specials/SpecialLockdb.php',
+ 'SpecialLog' => __DIR__ . '/includes/specials/SpecialLog.php',
+ 'SpecialMergeHistory' => __DIR__ . '/includes/specials/SpecialMergeHistory.php',
+ 'SpecialMyLanguage' => __DIR__ . '/includes/specials/SpecialMyLanguage.php',
+ 'SpecialMycontributions' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+ 'SpecialMypage' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+ 'SpecialMytalk' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+ 'SpecialMyuploads' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+ 'SpecialNewFiles' => __DIR__ . '/includes/specials/SpecialNewimages.php',
+ 'SpecialNewpages' => __DIR__ . '/includes/specials/SpecialNewpages.php',
+ 'SpecialPage' => __DIR__ . '/includes/specialpage/SpecialPage.php',
+ 'SpecialPageAction' => __DIR__ . '/includes/actions/SpecialPageAction.php',
+ 'SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php',
+ 'SpecialPageLanguage' => __DIR__ . '/includes/specials/SpecialPageLanguage.php',
+ 'SpecialPagesWithProp' => __DIR__ . '/includes/specials/SpecialPagesWithProp.php',
+ 'SpecialPasswordReset' => __DIR__ . '/includes/specials/SpecialPasswordReset.php',
+ 'SpecialPermanentLink' => __DIR__ . '/includes/specials/SpecialPermanentLink.php',
+ 'SpecialPreferences' => __DIR__ . '/includes/specials/SpecialPreferences.php',
+ 'SpecialPrefixindex' => __DIR__ . '/includes/specials/SpecialPrefixindex.php',
+ 'SpecialProtectedpages' => __DIR__ . '/includes/specials/SpecialProtectedpages.php',
+ 'SpecialProtectedtitles' => __DIR__ . '/includes/specials/SpecialProtectedtitles.php',
+ 'SpecialRandomInCategory' => __DIR__ . '/includes/specials/SpecialRandomInCategory.php',
+ 'SpecialRandomredirect' => __DIR__ . '/includes/specials/SpecialRandomredirect.php',
+ 'SpecialRecentChanges' => __DIR__ . '/includes/specials/SpecialRecentchanges.php',
+ 'SpecialRecentChangesLinked' => __DIR__ . '/includes/specials/SpecialRecentchangeslinked.php',
+ 'SpecialRedirect' => __DIR__ . '/includes/specials/SpecialRedirect.php',
+ 'SpecialRedirectToSpecial' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
+ 'SpecialResetTokens' => __DIR__ . '/includes/specials/SpecialResetTokens.php',
+ 'SpecialRevisionDelete' => __DIR__ . '/includes/specials/SpecialRevisiondelete.php',
+ 'SpecialRunJobs' => __DIR__ . '/includes/specials/SpecialRunJobs.php',
+ 'SpecialSearch' => __DIR__ . '/includes/specials/SpecialSearch.php',
+ 'SpecialSpecialpages' => __DIR__ . '/includes/specials/SpecialSpecialpages.php',
+ 'SpecialStatistics' => __DIR__ . '/includes/specials/SpecialStatistics.php',
+ 'SpecialTags' => __DIR__ . '/includes/specials/SpecialTags.php',
+ 'SpecialTrackingCategories' => __DIR__ . '/includes/specials/SpecialTrackingCategories.php',
+ 'SpecialUnblock' => __DIR__ . '/includes/specials/SpecialUnblock.php',
+ 'SpecialUndelete' => __DIR__ . '/includes/specials/SpecialUndelete.php',
+ 'SpecialUnlockdb' => __DIR__ . '/includes/specials/SpecialUnlockdb.php',
+ 'SpecialUpload' => __DIR__ . '/includes/specials/SpecialUpload.php',
+ 'SpecialUploadStash' => __DIR__ . '/includes/specials/SpecialUploadStash.php',
+ 'SpecialUploadStashTooLargeException' => __DIR__ . '/includes/specials/SpecialUploadStash.php',
+ 'SpecialUserlogout' => __DIR__ . '/includes/specials/SpecialUserlogout.php',
+ 'SpecialVersion' => __DIR__ . '/includes/specials/SpecialVersion.php',
+ 'SpecialWatchlist' => __DIR__ . '/includes/specials/SpecialWatchlist.php',
+ 'SpecialWhatLinksHere' => __DIR__ . '/includes/specials/SpecialWhatlinkshere.php',
+ 'SqlBagOStuff' => __DIR__ . '/includes/objectcache/SqlBagOStuff.php',
+ 'SqlDataUpdate' => __DIR__ . '/includes/deferred/SqlDataUpdate.php',
+ 'SqlSearchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+ 'Sqlite' => __DIR__ . '/maintenance/sqlite.inc',
+ 'SqliteInstaller' => __DIR__ . '/includes/installer/SqliteInstaller.php',
+ 'SqliteMaintenance' => __DIR__ . '/maintenance/sqlite.php',
+ 'SqliteUpdater' => __DIR__ . '/includes/installer/SqliteUpdater.php',
+ 'SquidPurgeClient' => __DIR__ . '/includes/SquidPurgeClient.php',
+ 'SquidPurgeClientPool' => __DIR__ . '/includes/SquidPurgeClient.php',
+ 'SquidUpdate' => __DIR__ . '/includes/deferred/SquidUpdate.php',
+ 'SrConverter' => __DIR__ . '/languages/classes/LanguageSr.php',
+ 'StatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
+ 'Status' => __DIR__ . '/includes/Status.php',
+ 'StatusValue' => __DIR__ . '/includes/libs/StatusValue.php',
+ 'StorageTypeStats' => __DIR__ . '/maintenance/storage/storageTypeStats.php',
+ 'StoreFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+ 'StreamFile' => __DIR__ . '/includes/StreamFile.php',
+ 'StringPrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
+ 'StringUtils' => __DIR__ . '/includes/libs/StringUtils.php',
+ 'StripState' => __DIR__ . '/includes/parser/StripState.php',
+ 'StubObject' => __DIR__ . '/includes/StubObject.php',
+ 'StubUserLang' => __DIR__ . '/includes/StubObject.php',
+ 'SubmitAction' => __DIR__ . '/includes/actions/SubmitAction.php',
+ 'SubpageImportTitleFactory' => __DIR__ . '/includes/title/SubpageImportTitleFactory.php',
+ 'SvgHandler' => __DIR__ . '/includes/media/SVG.php',
+ 'SwiftFileBackend' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+ 'SwiftFileBackendDirList' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+ 'SwiftFileBackendFileList' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+ 'SwiftFileBackendList' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+ 'SwiftFileOpHandle' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+ 'SwiftVirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/SwiftVirtualRESTService.php',
+ 'SyncFileBackend' => __DIR__ . '/maintenance/syncFileBackend.php',
+ 'TableCleanup' => __DIR__ . '/maintenance/cleanupTable.inc',
+ 'TableCleanupTest' => __DIR__ . '/maintenance/cleanupTable.inc',
+ 'TableDiffFormatter' => __DIR__ . '/includes/diff/TableDiffFormatter.php',
+ 'TablePager' => __DIR__ . '/includes/pager/TablePager.php',
+ 'TagLogFormatter' => __DIR__ . '/includes/logging/TagLogFormatter.php',
+ 'TempFSFile' => __DIR__ . '/includes/filebackend/TempFSFile.php',
+ 'TempFileRepo' => __DIR__ . '/includes/filerepo/FileRepo.php',
+ 'TemplateParser' => __DIR__ . '/includes/TemplateParser.php',
+ 'TestFileOpPerformance' => __DIR__ . '/maintenance/fileOpPerfTest.php',
+ 'TextContent' => __DIR__ . '/includes/content/TextContent.php',
+ 'TextContentHandler' => __DIR__ . '/includes/content/TextContentHandler.php',
+ 'TextPassDumper' => __DIR__ . '/maintenance/backupTextPass.inc',
+ 'TextStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
+ 'TgConverter' => __DIR__ . '/languages/classes/LanguageTg.php',
+ 'ThrottledError' => __DIR__ . '/includes/exception/ThrottledError.php',
+ 'ThumbnailImage' => __DIR__ . '/includes/media/MediaTransformOutput.php',
+ 'ThumbnailRenderJob' => __DIR__ . '/includes/jobqueue/jobs/ThumbnailRenderJob.php',
+ 'TidyUpBug37714' => __DIR__ . '/maintenance/tidyUpBug37714.php',
+ 'TiffHandler' => __DIR__ . '/includes/media/Tiff.php',
+ 'TimestampException' => __DIR__ . '/includes/exception/TimestampException.php',
+ 'Title' => __DIR__ . '/includes/Title.php',
+ 'TitleArray' => __DIR__ . '/includes/TitleArray.php',
+ 'TitleArrayFromResult' => __DIR__ . '/includes/TitleArrayFromResult.php',
+ 'TitleCleanup' => __DIR__ . '/maintenance/cleanupTitles.php',
+ 'TitleFormatter' => __DIR__ . '/includes/title/TitleFormatter.php',
+ 'TitleParser' => __DIR__ . '/includes/title/TitleParser.php',
+ 'TitlePrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
+ 'TitleValue' => __DIR__ . '/includes/title/TitleValue.php',
+ 'TrackBlobs' => __DIR__ . '/maintenance/storage/trackBlobs.php',
+ 'TraditionalImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php',
+ 'TransactionProfiler' => __DIR__ . '/includes/profiler/TransactionProfiler.php',
+ 'TransformParameterError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
+ 'TransformTooBigImageAreaError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
+ 'TransformationalImageHandler' => __DIR__ . '/includes/media/TransformationalImageHandler.php',
+ 'UDPRCFeedEngine' => __DIR__ . '/includes/rcfeed/UDPRCFeedEngine.php',
+ 'UDPTransport' => __DIR__ . '/includes/libs/UDPTransport.php',
+ 'UIDGenerator' => __DIR__ . '/includes/utils/UIDGenerator.php',
+ 'UcdXmlReader' => __DIR__ . '/maintenance/language/generateCollationData.php',
+ 'UncategorizedCategoriesPage' => __DIR__ . '/includes/specials/SpecialUncategorizedcategories.php',
+ 'UncategorizedImagesPage' => __DIR__ . '/includes/specials/SpecialUncategorizedimages.php',
+ 'UncategorizedPagesPage' => __DIR__ . '/includes/specials/SpecialUncategorizedpages.php',
+ 'UncategorizedTemplatesPage' => __DIR__ . '/includes/specials/SpecialUncategorizedtemplates.php',
+ 'Undelete' => __DIR__ . '/maintenance/undelete.php',
+ 'UnifiedDiffFormatter' => __DIR__ . '/includes/diff/UnifiedDiffFormatter.php',
+ 'UnlistedSpecialPage' => __DIR__ . '/includes/specialpage/UnlistedSpecialPage.php',
+ 'UnprotectAction' => __DIR__ . '/includes/actions/UnprotectAction.php',
+ 'UnregisteredLocalFile' => __DIR__ . '/includes/filerepo/file/UnregisteredLocalFile.php',
+ 'UnusedCategoriesPage' => __DIR__ . '/includes/specials/SpecialUnusedcategories.php',
+ 'UnusedimagesPage' => __DIR__ . '/includes/specials/SpecialUnusedimages.php',
+ 'UnusedtemplatesPage' => __DIR__ . '/includes/specials/SpecialUnusedtemplates.php',
+ 'UnwatchAction' => __DIR__ . '/includes/actions/UnwatchAction.php',
+ 'UnwatchedpagesPage' => __DIR__ . '/includes/specials/SpecialUnwatchedpages.php',
+ 'UpdateArticleCount' => __DIR__ . '/maintenance/updateArticleCount.php',
+ 'UpdateCollation' => __DIR__ . '/maintenance/updateCollation.php',
+ 'UpdateDoubleWidthSearch' => __DIR__ . '/maintenance/updateDoubleWidthSearch.php',
+ 'UpdateLogging' => __DIR__ . '/maintenance/archives/upgradeLogging.php',
+ 'UpdateMediaWiki' => __DIR__ . '/maintenance/update.php',
+ 'UpdateRestrictions' => __DIR__ . '/maintenance/updateRestrictions.php',
+ 'UpdateSearchIndex' => __DIR__ . '/maintenance/updateSearchIndex.php',
+ 'UpdateSpecialPages' => __DIR__ . '/maintenance/updateSpecialPages.php',
+ 'UploadBase' => __DIR__ . '/includes/upload/UploadBase.php',
+ 'UploadChunkFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
+ 'UploadChunkVerificationException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
+ 'UploadChunkZeroLengthFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
+ 'UploadDumper' => __DIR__ . '/maintenance/dumpUploads.php',
+ 'UploadForm' => __DIR__ . '/includes/specials/SpecialUpload.php',
+ 'UploadFromChunks' => __DIR__ . '/includes/upload/UploadFromChunks.php',
+ 'UploadFromFile' => __DIR__ . '/includes/upload/UploadFromFile.php',
+ 'UploadFromStash' => __DIR__ . '/includes/upload/UploadFromStash.php',
+ 'UploadFromUrl' => __DIR__ . '/includes/upload/UploadFromUrl.php',
+ 'UploadFromUrlJob' => __DIR__ . '/includes/jobqueue/jobs/UploadFromUrlJob.php',
+ 'UploadLogFormatter' => __DIR__ . '/includes/logging/UploadLogFormatter.php',
+ 'UploadSourceAdapter' => __DIR__ . '/includes/Import.php',
+ 'UploadSourceField' => __DIR__ . '/includes/specials/SpecialUpload.php',
+ 'UploadStash' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UploadStashBadPathException' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UploadStashCleanup' => __DIR__ . '/maintenance/cleanupUploadStash.php',
+ 'UploadStashException' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UploadStashFile' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UploadStashFileException' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UploadStashFileNotFoundException' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UploadStashNoSuchKeyException' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UploadStashNotLoggedInException' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UploadStashWrongOwnerException' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UploadStashZeroLengthFileException' => __DIR__ . '/includes/upload/UploadStash.php',
+ 'UppercaseCollation' => __DIR__ . '/includes/Collation.php',
+ 'UsageException' => __DIR__ . '/includes/api/ApiMain.php',
+ 'User' => __DIR__ . '/includes/User.php',
+ 'UserArray' => __DIR__ . '/includes/UserArray.php',
+ 'UserArrayFromResult' => __DIR__ . '/includes/UserArrayFromResult.php',
+ 'UserBlockedError' => __DIR__ . '/includes/exception/UserBlockedError.php',
+ 'UserCache' => __DIR__ . '/includes/cache/UserCache.php',
+ 'UserDupes' => __DIR__ . '/maintenance/userDupes.inc',
+ 'UserMailer' => __DIR__ . '/includes/mail/UserMailer.php',
+ 'UserNotLoggedIn' => __DIR__ . '/includes/exception/UserNotLoggedIn.php',
+ 'UserOptions' => __DIR__ . '/maintenance/userOptions.inc',
+ 'UserRightsProxy' => __DIR__ . '/includes/UserRightsProxy.php',
+ 'UsercreateTemplate' => __DIR__ . '/includes/templates/Usercreate.php',
+ 'UserloginTemplate' => __DIR__ . '/includes/templates/Userlogin.php',
+ 'UserrightsPage' => __DIR__ . '/includes/specials/SpecialUserrights.php',
+ 'UsersPager' => __DIR__ . '/includes/specials/SpecialListusers.php',
+ 'UtfNormal' => __DIR__ . '/includes/libs/normal/UtfNormal.php',
+ 'UzConverter' => __DIR__ . '/languages/classes/LanguageUz.php',
+ 'VFormHTMLForm' => __DIR__ . '/includes/htmlform/VFormHTMLForm.php',
+ 'ValidateRegistrationFile' => __DIR__ . '/maintenance/validateRegistrationFile.php',
+ 'ViewAction' => __DIR__ . '/includes/actions/ViewAction.php',
+ 'VirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTService.php',
+ 'VirtualRESTServiceClient' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTServiceClient.php',
+ 'WaitForSlave' => __DIR__ . '/maintenance/waitForSlave.php',
+ 'WantedCategoriesPage' => __DIR__ . '/includes/specials/SpecialWantedcategories.php',
+ 'WantedFilesPage' => __DIR__ . '/includes/specials/SpecialWantedfiles.php',
+ 'WantedPagesPage' => __DIR__ . '/includes/specials/SpecialWantedpages.php',
+ 'WantedQueryPage' => __DIR__ . '/includes/specialpage/WantedQueryPage.php',
+ 'WantedTemplatesPage' => __DIR__ . '/includes/specials/SpecialWantedtemplates.php',
+ 'WatchAction' => __DIR__ . '/includes/actions/WatchAction.php',
+ 'WatchedItem' => __DIR__ . '/includes/WatchedItem.php',
+ 'WatchlistCleanup' => __DIR__ . '/maintenance/cleanupWatchlist.php',
+ 'WebInstaller' => __DIR__ . '/includes/installer/WebInstaller.php',
+ 'WebInstallerComplete' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerCopying' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerDBConnect' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerDBSettings' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerDocument' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerExistingWiki' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerInstall' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerLanguage' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerName' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerOptions' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerOutput' => __DIR__ . '/includes/installer/WebInstallerOutput.php',
+ 'WebInstallerPage' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerReadme' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerReleaseNotes' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerRestart' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerUpgrade' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerUpgradeDoc' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebInstallerWelcome' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+ 'WebRequest' => __DIR__ . '/includes/WebRequest.php',
+ 'WebRequestUpload' => __DIR__ . '/includes/WebRequest.php',
+ 'WebResponse' => __DIR__ . '/includes/WebResponse.php',
+ 'WikiCategoryPage' => __DIR__ . '/includes/page/WikiCategoryPage.php',
+ 'WikiDiff3' => __DIR__ . '/includes/diff/WikiDiff3.php',
+ 'WikiExporter' => __DIR__ . '/includes/Export.php',
+ 'WikiFilePage' => __DIR__ . '/includes/page/WikiFilePage.php',
+ 'WikiImporter' => __DIR__ . '/includes/Import.php',
+ 'WikiMap' => __DIR__ . '/includes/WikiMap.php',
+ 'WikiPage' => __DIR__ . '/includes/page/WikiPage.php',
+ 'WikiReference' => __DIR__ . '/includes/WikiMap.php',
+ 'WikiRevision' => __DIR__ . '/includes/Import.php',
+ 'WikiStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
+ 'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
+ 'WikitextContentHandler' => __DIR__ . '/includes/content/WikitextContentHandler.php',
+ 'WinCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/WinCacheBagOStuff.php',
+ 'WithoutInterwikiPage' => __DIR__ . '/includes/specials/SpecialWithoutinterwiki.php',
+ 'WordLevelDiff' => __DIR__ . '/includes/diff/DairikiDiff.php',
+ 'WrapOldPasswords' => __DIR__ . '/maintenance/wrapOldPasswords.php',
+ 'XCFHandler' => __DIR__ . '/includes/media/XCF.php',
+ 'XCacheBagOStuff' => __DIR__ . '/includes/libs/objectcache/XCacheBagOStuff.php',
+ 'XMLRCFeedFormatter' => __DIR__ . '/includes/rcfeed/XMLRCFeedFormatter.php',
+ 'XMPInfo' => __DIR__ . '/includes/media/XMPInfo.php',
+ 'XMPReader' => __DIR__ . '/includes/media/XMP.php',
+ 'XMPValidate' => __DIR__ . '/includes/media/XMPValidate.php',
+ 'Xhprof' => __DIR__ . '/includes/libs/Xhprof.php',
+ 'Xml' => __DIR__ . '/includes/Xml.php',
+ 'XmlDumpWriter' => __DIR__ . '/includes/Export.php',
+ 'XmlJsCode' => __DIR__ . '/includes/Xml.php',
+ 'XmlSelect' => __DIR__ . '/includes/Xml.php',
+ 'XmlTypeCheck' => __DIR__ . '/includes/libs/XmlTypeCheck.php',
+ 'ZhConverter' => __DIR__ . '/languages/classes/LanguageZh.php',
+ 'ZipDirectoryReader' => __DIR__ . '/includes/utils/ZipDirectoryReader.php',
+ 'ZipDirectoryReaderError' => __DIR__ . '/includes/utils/ZipDirectoryReader.php',
+ 'profile_point' => __DIR__ . '/profileinfo.php',
+);
diff --git a/composer.json b/composer.json
index 8389f007..a9cc4365 100644
--- a/composer.json
+++ b/composer.json
@@ -9,24 +9,63 @@
"homepage": "https://www.mediawiki.org/wiki/Special:Version/Credits"
}
],
- "license": "GPL-2.0",
+ "license": "GPL-2.0+",
"support": {
- "issues": "https://bugzilla.wikimedia.org/",
+ "issues": "https://bugs.mediawiki.org/",
"irc": "irc://irc.freenode.net/mediawiki",
"wiki": "https://www.mediawiki.org/"
},
"require": {
- "php": ">=5.3.2",
- "psr/log": "1.0.0"
+ "cssjanus/cssjanus": "1.1.1",
+ "ext-iconv": "*",
+ "leafo/lessphp": "0.5.0",
+ "liuggio/statsd-php-client": "1.0.12",
+ "oojs/oojs-ui": "0.11.3",
+ "php": ">=5.3.3",
+ "psr/log": "1.0.0",
+ "wikimedia/cdb": "1.0.1",
+ "wikimedia/composer-merge-plugin": "1.0.0",
+ "wikimedia/utfnormal": "1.0.2",
+ "zordius/lightncandy": "0.18"
},
"require-dev": {
- "phpunit/phpunit": "*"
+ "jakub-onderka/php-parallel-lint": "~0.8",
+ "justinrainbow/json-schema": "~1.3",
+ "phpunit/phpunit": "~4.5",
+ "mediawiki/mediawiki-codesniffer": "0.1.0"
},
"suggest": {
"ext-fileinfo": "*",
+ "ext-intl": "*",
"ext-mbstring": "*",
"ext-wikidiff2": "*",
"ext-apc": "*",
"monolog/monolog": "*"
+ },
+ "autoload": {
+ "psr-0": {
+ "ComposerHookHandler": "includes/composer"
+ }
+ },
+ "scripts": {
+ "lint": "parallel-lint --exclude vendor",
+ "phpcs": "phpcs $PHPCS_ARGS -s --standard=vendor/mediawiki/mediawiki-codesniffer/MediaWiki --ignore=vendor --encoding=utf-8 --extensions=php,php5,inc,sample",
+ "test": [
+ "composer lint",
+ "composer phpcs"
+ ],
+ "pre-update-cmd": "ComposerHookHandler::onPreUpdate",
+ "pre-install-cmd": "ComposerHookHandler::onPreInstall"
+ },
+ "config": {
+ "prepend-autoloader": false,
+ "optimize-autoloader": true
+ },
+ "extra": {
+ "merge-plugin": {
+ "include": [
+ "composer.local.json"
+ ]
+ }
}
}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 00000000..be756552
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,395 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "0a4e1a6fe7b47b5659f5ebe278ab2f42",
+ "packages": [
+ {
+ "name": "cssjanus/cssjanus",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cssjanus/php-cssjanus.git",
+ "reference": "62a9c32e6e140de09082b40a6e99d868ad14d4e0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cssjanus/php-cssjanus/zipball/62a9c32e6e140de09082b40a6e99d868ad14d4e0",
+ "reference": "62a9c32e6e140de09082b40a6e99d868ad14d4e0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.8.*",
+ "phpunit/phpunit": "3.7.*",
+ "squizlabs/php_codesniffer": "1.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "description": "Convert CSS stylesheets between left-to-right and right-to-left.",
+ "time": "2014-11-14 20:00:50"
+ },
+ {
+ "name": "leafo/lessphp",
+ "version": "v0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/leafo/lessphp.git",
+ "reference": "0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/leafo/lessphp/zipball/0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283",
+ "reference": "0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283",
+ "shasum": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.4.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "lessc.inc.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT",
+ "GPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Leaf Corcoran",
+ "email": "leafot@gmail.com",
+ "homepage": "http://leafo.net"
+ }
+ ],
+ "description": "lessphp is a compiler for LESS written in PHP.",
+ "homepage": "http://leafo.net/lessphp/",
+ "time": "2014-11-24 18:39:20"
+ },
+ {
+ "name": "liuggio/statsd-php-client",
+ "version": "v1.0.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/liuggio/statsd-php-client.git",
+ "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/liuggio/statsd-php-client/zipball/a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7",
+ "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2"
+ },
+ "require-dev": {
+ "monolog/monolog": ">=1.2.0"
+ },
+ "suggest": {
+ "monolog/monolog": "Monolog, in order to do generate statistic from log >=1.2.0)"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Liuggio": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Giulio De Donato",
+ "email": "liuggio@gmail.com"
+ }
+ ],
+ "description": "Statsd (Object Oriented) client library for PHP",
+ "homepage": "https://github.com/liuggio/statsd-php-client/",
+ "keywords": [
+ "etsy",
+ "monitoring",
+ "php",
+ "statsd"
+ ],
+ "time": "2014-09-17 21:37:49"
+ },
+ {
+ "name": "oojs/oojs-ui",
+ "version": "v0.11.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/oojs-ui.git",
+ "reference": "a03de5681e28e4fad1e27f8cccab32a2c5b484e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/oojs-ui/zipball/a03de5681e28e4fad1e27f8cccab32a2c5b484e5",
+ "reference": "a03de5681e28e4fad1e27f8cccab32a2c5b484e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.8.*",
+ "mediawiki/mediawiki-codesniffer": "0.1.0",
+ "squizlabs/php_codesniffer": "2.1.*"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "php/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Provides library of common widgets, layouts, and windows.",
+ "homepage": "https://www.mediawiki.org/wiki/OOjs_UI",
+ "time": "2015-05-12 11:58:55"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
+ "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Psr\\Log\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2012-12-21 11:40:51"
+ },
+ {
+ "name": "wikimedia/cdb",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/cdb.git",
+ "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/cdb/zipball/3b7d5366c88eccf2517ebac57c59eb557c82f46c",
+ "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Tim Starling",
+ "email": "tstarling@wikimedia.org"
+ },
+ {
+ "name": "Chad Horohoe",
+ "email": "chad@wikimedia.org"
+ }
+ ],
+ "description": "Constant Database (CDB) wrapper library for PHP. Provides pure-PHP fallback when dba_* functions are absent.",
+ "homepage": "https://www.mediawiki.org/wiki/CDB",
+ "time": "2014-12-08 19:26:44"
+ },
+ {
+ "name": "wikimedia/composer-merge-plugin",
+ "version": "v1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/composer-merge-plugin.git",
+ "reference": "ed426b785f9f786b33be4fd78584e43f4e962356"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/ed426b785f9f786b33be4fd78584e43f4e962356",
+ "reference": "ed426b785f9f786b33be4fd78584e43f4e962356",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "1.0.0",
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev",
+ "jakub-onderka/php-parallel-lint": "~0.8",
+ "phpspec/prophecy-phpunit": "~1.0",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~2.1.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Wikimedia\\Composer\\MergePlugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "Wikimedia\\Composer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Composer plugin to merge multiple composer.json files",
+ "time": "2015-02-21 00:57:13"
+ },
+ {
+ "name": "wikimedia/utfnormal",
+ "version": "v1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/utfnormal.git",
+ "reference": "bb892a53a76116ad0982445a849043687cb6e778"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/utfnormal/zipball/bb892a53a76116ad0982445a849043687cb6e778",
+ "reference": "bb892a53a76116ad0982445a849043687cb6e778",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "jakub-onderka/php-parallel-lint": "0.8.*",
+ "mediawiki/mediawiki-codesniffer": "0.1.0",
+ "phpunit/phpunit": "4.4.*",
+ "squizlabs/php_codesniffer": "2.1.*"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0+"
+ ],
+ "authors": [
+ {
+ "name": "Brion Vibber",
+ "email": "bvibber@wikimedia.org"
+ }
+ ],
+ "homepage": "https://www.mediawiki.org/wiki/utfnormal",
+ "time": "2015-03-12 01:54:47"
+ },
+ {
+ "name": "zordius/lightncandy",
+ "version": "v0.18",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zordius/lightncandy.git",
+ "reference": "24be6909c37391f4648ce1fdf19036b11bd56d05"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zordius/lightncandy/zipball/24be6909c37391f4648ce1fdf19036b11bd56d05",
+ "reference": "24be6909c37391f4648ce1fdf19036b11bd56d05",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.0.17"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/lightncandy.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Zordius Chen",
+ "email": "zordius@yahoo-inc.com"
+ }
+ ],
+ "description": "An extremely fast PHP implementation of handlebars ( http://handlebarsjs.com/ ) and mustache ( http://mustache.github.io/ ).",
+ "homepage": "https://github.com/zordius/lightncandy",
+ "keywords": [
+ "handlebars",
+ "logicless",
+ "mustache",
+ "php",
+ "template"
+ ],
+ "time": "2015-01-01 04:37:19"
+ }
+ ],
+ "packages-dev": null,
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "ext-iconv": "*",
+ "php": ">=5.3.3"
+ },
+ "platform-dev": []
+}
diff --git a/docs/contenthandler.txt b/docs/contenthandler.txt
index 3f0fca21..5f9a0b03 100644
--- a/docs/contenthandler.txt
+++ b/docs/contenthandler.txt
@@ -8,6 +8,7 @@ Built-in content types are:
* wikitext - wikitext, as usual
* javascript - user provided javascript code
+* json - simple implementation for use by extensions, etc.
* css - user provided css code
* text - plain text
diff --git a/docs/database.txt b/docs/database.txt
index 735f26bf..ba3045ed 100644
--- a/docs/database.txt
+++ b/docs/database.txt
@@ -159,10 +159,7 @@ $dbw->commit( __METHOD__ );
Use of locking reads (e.g. the FOR UPDATE clause) is not advised. They
are poorly implemented in InnoDB and will cause regular deadlock errors.
-It's also surprisingly easy to cripple the wiki with lock contention. If
-you must use them, define a new flag for $wgAntiLockFlags which allows
-them to be turned off, because we'll almost certainly need to do so on
-the Wikimedia cluster.
+It's also surprisingly easy to cripple the wiki with lock contention.
Instead of locking reads, combine your existence checks into your write
queries, by using an appropriate condition in the WHERE clause of an
diff --git a/docs/export-0.10.xsd b/docs/export-0.10.xsd
new file mode 100644
index 00000000..9d5d49e0
--- /dev/null
+++ b/docs/export-0.10.xsd
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ This is an XML Schema description of the format
+ output by MediaWiki's Special:Export system.
+
+ Version 0.2 adds optional basic file upload info support,
+ which is used by our OAI export/import submodule.
+
+ Version 0.3 adds some site configuration information such
+ as a list of defined namespaces.
+
+ Version 0.4 adds per-revision delete flags, log exports,
+ discussion threading data, a per-page redirect flag, and
+ per-namespace capitalization.
+
+ Version 0.5 adds byte count per revision.
+
+ Version 0.6 adds a separate namespace tag, and resolves the
+ redirect target and adds a separate sha1 tag for each revision.
+
+ Version 0.7 adds a unique identity constraint for both page and
+ revision identifiers. See also bug 4220.
+ Fix type for <ns> from "positiveInteger" to "nonNegativeInteger" to allow 0
+ Moves <logitem> to its right location.
+ Add parentid to revision.
+ Fix type for <id> within <contributor> to "nonNegativeInteger"
+
+ Version 0.8 adds support for a <model> and a <format> tag for
+ each revision. See contenthandler.txt.
+
+ Version 0.9 adds the database name to the site information.
+
+ Version 0.10 moved the <model> and <format> tags before the <text> tag.
+
+ The canonical URL to the schema document is:
+ http://www.mediawiki.org/xml/export-0.10.xsd
+
+ Use the namespace:
+ http://www.mediawiki.org/xml/export-0.10/
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:mw="http://www.mediawiki.org/xml/export-0.10/"
+ targetNamespace="http://www.mediawiki.org/xml/export-0.10/"
+ elementFormDefault="qualified">
+
+ <annotation>
+ <documentation xml:lang="en">
+ MediaWiki's page export format
+ </documentation>
+ </annotation>
+
+ <!-- Need this to reference xml:lang -->
+ <import namespace="http://www.w3.org/XML/1998/namespace"
+ schemaLocation="http://www.w3.org/2001/xml.xsd" />
+
+ <!-- Our root element -->
+ <element name="mediawiki" type="mw:MediaWikiType">
+ <!-- Page ID contraint, see bug 4220 -->
+ <unique name="PageIDConstraint">
+ <selector xpath="mw:page" />
+ <field xpath="mw:id" />
+ </unique>
+ <!-- Revision ID contraint, see bug 4220 -->
+ <unique name="RevIDConstraint">
+ <selector xpath="mw:page/mw:revision" />
+ <field xpath="mw:id" />
+ </unique>
+ </element>
+
+ <complexType name="MediaWikiType">
+ <sequence>
+ <element name="siteinfo" type="mw:SiteInfoType"
+ minOccurs="0" maxOccurs="1" />
+ <element name="page" type="mw:PageType"
+ minOccurs="0" maxOccurs="unbounded" />
+ <element name="logitem" type="mw:LogItemType"
+ minOccurs="0" maxOccurs="unbounded" />
+ </sequence>
+ <attribute name="version" type="string" use="required" />
+ <attribute ref="xml:lang" use="required" />
+ </complexType>
+
+ <complexType name="SiteInfoType">
+ <sequence>
+ <element name="sitename" type="string" minOccurs="0" />
+ <element name="dbname" type="string" minOccurs="0" />
+ <element name="base" type="anyURI" minOccurs="0" />
+ <element name="generator" type="string" minOccurs="0" />
+ <element name="case" type="mw:CaseType" minOccurs="0" />
+ <element name="namespaces" type="mw:NamespacesType" minOccurs="0" />
+ </sequence>
+ </complexType>
+
+ <simpleType name="CaseType">
+ <restriction base="NMTOKEN">
+ <!-- Cannot have two titles differing only by case of first letter. -->
+ <!-- Default behavior through 1.5, $wgCapitalLinks = true -->
+ <enumeration value="first-letter" />
+
+ <!-- Complete title is case-sensitive -->
+ <!-- Behavior when $wgCapitalLinks = false -->
+ <enumeration value="case-sensitive" />
+
+ <!-- Cannot have non-case senstitive titles eg [[FOO]] == [[Foo]] -->
+ <!-- Not yet implemented as of MediaWiki 1.18 -->
+ <enumeration value="case-insensitive" />
+ </restriction>
+ </simpleType>
+
+ <simpleType name="DeletedFlagType">
+ <restriction base="NMTOKEN">
+ <enumeration value="deleted" />
+ </restriction>
+ </simpleType>
+
+ <complexType name="NamespacesType">
+ <sequence>
+ <element name="namespace" type="mw:NamespaceType"
+ minOccurs="0" maxOccurs="unbounded" />
+ </sequence>
+ </complexType>
+
+ <complexType name="NamespaceType">
+ <simpleContent>
+ <extension base="string">
+ <attribute name="key" type="integer" />
+ <attribute name="case" type="mw:CaseType" />
+ </extension>
+ </simpleContent>
+ </complexType>
+
+ <complexType name="RedirectType">
+ <simpleContent>
+ <extension base="string">
+ <attribute name="title" type="string" />
+ </extension>
+ </simpleContent>
+ </complexType>
+
+ <simpleType name="ContentModelType">
+ <restriction base="string">
+ <pattern value="[a-zA-Z][-+./a-zA-Z0-9]*" />
+ </restriction>
+ </simpleType>
+
+ <simpleType name="ContentFormatType">
+ <restriction base="string">
+ <pattern value="[a-zA-Z][-+.a-zA-Z0-9]*/[a-zA-Z][-+.a-zA-Z0-9]*" />
+ </restriction>
+ </simpleType>
+
+ <complexType name="PageType">
+ <sequence>
+ <!-- Title in text form. (Using spaces, not underscores; with namespace ) -->
+ <element name="title" type="string" />
+
+ <!-- Namespace in canonical form -->
+ <element name="ns" type="nonNegativeInteger" />
+
+ <!-- optional page ID number -->
+ <element name="id" type="positiveInteger" />
+
+ <!-- flag if the current revision is a redirect -->
+ <element name="redirect" type="mw:RedirectType" minOccurs="0" maxOccurs="1" />
+
+ <!-- comma-separated list of string tokens, if present -->
+ <element name="restrictions" type="string" minOccurs="0" />
+
+ <!-- Zero or more sets of revision or upload data -->
+ <choice minOccurs="0" maxOccurs="unbounded">
+ <element name="revision" type="mw:RevisionType" />
+ <element name="upload" type="mw:UploadType" />
+ </choice>
+
+ <!-- Zero or One sets of discussion threading data -->
+ <element name="discussionthreadinginfo" minOccurs="0" maxOccurs="1" type="mw:DiscussionThreadingInfo" />
+ </sequence>
+ </complexType>
+
+ <complexType name="RevisionType">
+ <sequence>
+ <element name="id" type="positiveInteger" />
+ <element name="parentid" type="positiveInteger" minOccurs="0" />
+ <element name="timestamp" type="dateTime" />
+ <element name="contributor" type="mw:ContributorType" />
+ <element name="minor" minOccurs="0" maxOccurs="1" />
+ <element name="comment" type="mw:CommentType" minOccurs="0" maxOccurs="1" />
+ <element name="model" type="mw:ContentModelType" />
+ <element name="format" type="mw:ContentFormatType" />
+ <element name="text" type="mw:TextType" />
+ <element name="sha1" type="string" />
+ </sequence>
+ </complexType>
+
+ <complexType name="LogItemType">
+ <sequence>
+ <element name="id" type="positiveInteger" />
+ <element name="timestamp" type="dateTime" />
+ <element name="contributor" type="mw:ContributorType" />
+ <element name="comment" type="mw:CommentType" minOccurs="0" />
+ <element name="type" type="string" />
+ <element name="action" type="string" />
+ <element name="text" type="mw:LogTextType" minOccurs="0" maxOccurs="1" />
+ <element name="logtitle" type="string" minOccurs="0" maxOccurs="1" />
+ <element name="params" type="mw:LogParamsType" minOccurs="0" maxOccurs="1" />
+ </sequence>
+ </complexType>
+
+ <complexType name="CommentType">
+ <simpleContent>
+ <extension base="string">
+ <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+ <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+ </extension>
+ </simpleContent>
+ </complexType>
+
+ <complexType name="TextType">
+ <simpleContent>
+ <extension base="string">
+ <attribute ref="xml:space" use="optional" default="preserve" />
+ <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+ <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+ <!-- This isn't a good idea; we should be using "ID" instead of "NMTOKEN" -->
+ <!-- However, "NMTOKEN" is strictest definition that is both compatible with existing -->
+ <!-- usage ([0-9]+) and with the "ID" type. -->
+ <attribute name="id" type="NMTOKEN" />
+ <attribute name="bytes" use="optional" type="nonNegativeInteger" />
+ </extension>
+ </simpleContent>
+ </complexType>
+
+ <complexType name="LogTextType">
+ <simpleContent>
+ <extension base="string">
+ <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+ <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+ </extension>
+ </simpleContent>
+ </complexType>
+
+ <complexType name="LogParamsType">
+ <simpleContent>
+ <extension base="string">
+ <attribute ref="xml:space" use="optional" default="preserve" />
+ </extension>
+ </simpleContent>
+ </complexType>
+
+ <complexType name="ContributorType">
+ <sequence>
+ <element name="username" type="string" minOccurs="0" />
+ <element name="id" type="nonNegativeInteger" minOccurs="0" />
+
+ <element name="ip" type="string" minOccurs="0" />
+ </sequence>
+ <!-- This allows deleted=deleted on non-empty elements, but XSD is not omnipotent -->
+ <attribute name="deleted" use="optional" type="mw:DeletedFlagType" />
+ </complexType>
+
+ <complexType name="UploadType">
+ <sequence>
+ <!-- Revision-style data... -->
+ <element name="timestamp" type="dateTime" />
+ <element name="contributor" type="mw:ContributorType" />
+ <element name="comment" type="string" minOccurs="0" />
+
+ <!-- Filename. (Using underscores, not spaces. No 'File:' namespace marker.) -->
+ <element name="filename" type="string" />
+
+ <!-- URI at which this resource can be obtained -->
+ <element name="src" type="anyURI" />
+
+ <element name="size" type="positiveInteger" />
+
+ <!-- TODO: add other metadata fields -->
+ </sequence>
+ </complexType>
+
+ <!-- Discussion threading data for LiquidThreads -->
+ <complexType name="DiscussionThreadingInfo">
+ <sequence>
+ <element name="ThreadSubject" type="string" />
+ <element name="ThreadParent" type="positiveInteger" />
+ <element name="ThreadAncestor" type="positiveInteger" />
+ <element name="ThreadPage" type="string" />
+ <element name="ThreadID" type="positiveInteger" />
+ <element name="ThreadAuthor" type="string" />
+ <element name="ThreadEditStatus" type="string" />
+ <element name="ThreadType" type="string" />
+ </sequence>
+ </complexType>
+
+</schema>
diff --git a/docs/export-demo.xml b/docs/export-demo.xml
index fd47d13a..93b237ff 100644
--- a/docs/export-demo.xml
+++ b/docs/export-demo.xml
@@ -1,4 +1,4 @@
-<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version="0.9" xml:lang="en">
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
<!-- Optional global configuration info -->
<siteinfo>
@@ -55,7 +55,7 @@
<!-- if a page is deleted and recreated. -->
<id>1</id>
- <!-- Tag wether this article is a redirect and its target -->
+ <!-- Tag whether this article is a redirect and its target -->
<!-- This corresponds to the page_is_redirect in the page table -->
<redirect title="Target" />
@@ -82,10 +82,10 @@
</contributor>
<minor />
<comment>I have just one thing to say!</comment>
- <text xml:space="preserve" bytes="25">A bunch of [[text]] here.</text>
- <sha1>5x0ux8iwjrbmfzgv6pkketxgkcnpr7h</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
+ <text xml:space="preserve" bytes="25">A bunch of [[text]] here.</text>
+ <sha1>5x0ux8iwjrbmfzgv6pkketxgkcnpr7h</sha1>
</revision>
<revision>
@@ -95,10 +95,10 @@
<ip>10.0.0.2</ip>
</contributor>
<comment>new!</comment>
- <text xml:space="preserve" bytes="24">An earlier [[revision]].</text>
- <sha1>etaxt3shcge6igz1biwy3d4um2pnle4</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
+ <text xml:space="preserve" bytes="24">An earlier [[revision]].</text>
+ <sha1>etaxt3shcge6igz1biwy3d4um2pnle4</sha1>
</revision>
</page>
@@ -111,10 +111,10 @@
<timestamp>2001-01-15T14:03:00Z</timestamp>
<contributor><ip>10.0.0.2</ip></contributor>
<comment>hey</comment>
- <text xml:space="preserve" bytes="47">WHYD YOU LOCK PAGE??!!! i was editing that jerk</text>
- <sha1>ml80vmyjlixdstnywwihx003exfzq9j</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
+ <text xml:space="preserve" bytes="47">WHYD YOU LOCK PAGE??!!! i was editing that jerk</text>
+ <sha1>ml80vmyjlixdstnywwihx003exfzq9j</sha1>
</revision>
</page>
@@ -127,10 +127,10 @@
<timestamp>2001-01-15T20:34:12Z</timestamp>
<contributor><username>Foobar</username><id>42</id></contributor>
<comment>My awesomeest image!</comment>
- <text xml:space="preserve" bytes="52">This is an awesome little imgae. I lurves it. {{PD}}</text>
- <sha1>mehom37npwkpzhaiwu3wyr0egalumki</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
+ <text xml:space="preserve" bytes="52">This is an awesome little imgae. I lurves it. {{PD}}</text>
+ <sha1>mehom37npwkpzhaiwu3wyr0egalumki</sha1>
</revision>
<upload>
<timestamp>2001-01-15T20:34:12Z</timestamp>
diff --git a/docs/extension.schema.json b/docs/extension.schema.json
new file mode 100644
index 00000000..d5c17a17
--- /dev/null
+++ b/docs/extension.schema.json
@@ -0,0 +1,637 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "description": "MediaWiki extension.json schema",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The extension's canonical name.",
+ "required": true
+ },
+ "namemsg": {
+ "type": "string",
+ "description": "i18n message key of the extension's name."
+ },
+ "type": {
+ "type": "string",
+ "description": "The extension's type, as an index to $wgExtensionCredits.",
+ "default": "other",
+ "enum": [
+ "api",
+ "antispam",
+ "datavalues",
+ "media",
+ "parserhook",
+ "semantic",
+ "skin",
+ "specialpage",
+ "variable",
+ "other"
+ ]
+ },
+ "author": {
+ "type": [
+ "string",
+ "array"
+ ],
+ "description": "Extension's authors.",
+ "items": {
+ "type": "string"
+ },
+ "additionalItems": false
+ },
+ "version": {
+ "type": "string",
+ "description": "The version of this release of the extension."
+ },
+ "url": {
+ "type": "string",
+ "description": "URL to the homepage for the extension.",
+ "format": "uri"
+ },
+ "description": {
+ "type": "string",
+ "description": "Raw description of the extension."
+ },
+ "descriptionmsg": {
+ "type": "string",
+ "description": "Message key for a i18n message describing the extension."
+ },
+ "license-name": {
+ "type": "string",
+ "description": "Short identifier for the license under which the extension is released.",
+ "enum": [
+ "AFL-1.1",
+ "AFL-1.2",
+ "AFL-2.0",
+ "AFL-2.1",
+ "AFL-3.0",
+ "APL-1.0",
+ "Aladdin",
+ "ANTLR-PD",
+ "Apache-1.0",
+ "Apache-1.1",
+ "Apache-2.0",
+ "APSL-1.0",
+ "APSL-1.1",
+ "APSL-1.2",
+ "APSL-2.0",
+ "Artistic-1.0",
+ "Artistic-1.0-cl8",
+ "Artistic-1.0-Perl",
+ "Artistic-2.0",
+ "AAL",
+ "BitTorrent-1.0",
+ "BitTorrent-1.1",
+ "BSL-1.0",
+ "BSD-2-Clause",
+ "BSD-2-Clause-FreeBSD",
+ "BSD-2-Clause-NetBSD",
+ "BSD-3-Clause",
+ "BSD-3-Clause-Clear",
+ "BSD-4-Clause",
+ "BSD-4-Clause-UC",
+ "CECILL-1.0",
+ "CECILL-1.1",
+ "CECILL-2.0",
+ "CECILL-B",
+ "CECILL-C",
+ "ClArtistic",
+ "CNRI-Python",
+ "CNRI-Python-GPL-Compatible",
+ "CPOL-1.02",
+ "CDDL-1.0",
+ "CDDL-1.1",
+ "CPAL-1.0",
+ "CPL-1.0",
+ "CATOSL-1.1",
+ "Condor-1.1",
+ "CC-BY-1.0",
+ "CC-BY-2.0",
+ "CC-BY-2.5",
+ "CC-BY-3.0",
+ "CC-BY-ND-1.0",
+ "CC-BY-ND-2.0",
+ "CC-BY-ND-2.5",
+ "CC-BY-ND-3.0",
+ "CC-BY-NC-1.0",
+ "CC-BY-NC-2.0",
+ "CC-BY-NC-2.5",
+ "CC-BY-NC-3.0",
+ "CC-BY-NC-ND-1.0",
+ "CC-BY-NC-ND-2.0",
+ "CC-BY-NC-ND-2.5",
+ "CC-BY-NC-ND-3.0",
+ "CC-BY-NC-SA-1.0",
+ "CC-BY-NC-SA-2.0",
+ "CC-BY-NC-SA-2.5",
+ "CC-BY-NC-SA-3.0",
+ "CC-BY-SA-1.0",
+ "CC-BY-SA-2.0",
+ "CC-BY-SA-2.5",
+ "CC-BY-SA-3.0",
+ "CC0-1.0",
+ "CUA-OPL-1.0",
+ "D-FSL-1.0",
+ "WTFPL",
+ "EPL-1.0",
+ "eCos-2.0",
+ "ECL-1.0",
+ "ECL-2.0",
+ "EFL-1.0",
+ "EFL-2.0",
+ "Entessa",
+ "ErlPL-1.1",
+ "EUDatagrid",
+ "EUPL-1.0",
+ "EUPL-1.1",
+ "Fair",
+ "Frameworx-1.0",
+ "FTL",
+ "AGPL-1.0",
+ "AGPL-3.0",
+ "GFDL-1.1",
+ "GFDL-1.2",
+ "GFDL-1.3",
+ "GPL-1.0",
+ "GPL-1.0+",
+ "GPL-2.0",
+ "GPL-2.0+",
+ "GPL-2.0-with-autoconf-exception",
+ "GPL-2.0-with-bison-exception",
+ "GPL-2.0-with-classpath-exception",
+ "GPL-2.0-with-font-exception",
+ "GPL-2.0-with-GCC-exception",
+ "GPL-3.0",
+ "GPL-3.0+",
+ "GPL-3.0-with-autoconf-exception",
+ "GPL-3.0-with-GCC-exception",
+ "LGPL-2.1",
+ "LGPL-2.1+",
+ "LGPL-3.0",
+ "LGPL-3.0+",
+ "LGPL-2.0",
+ "LGPL-2.0+",
+ "gSOAP-1.3b",
+ "HPND",
+ "IBM-pibs",
+ "IPL-1.0",
+ "Imlib2",
+ "IJG",
+ "Intel",
+ "IPA",
+ "ISC",
+ "JSON",
+ "LPPL-1.3a",
+ "LPPL-1.0",
+ "LPPL-1.1",
+ "LPPL-1.2",
+ "LPPL-1.3c",
+ "Libpng",
+ "LPL-1.02",
+ "LPL-1.0",
+ "MS-PL",
+ "MS-RL",
+ "MirOS",
+ "MIT",
+ "Motosoto",
+ "MPL-1.0",
+ "MPL-1.1",
+ "MPL-2.0",
+ "MPL-2.0-no-copyleft-exception",
+ "Multics",
+ "NASA-1.3",
+ "Naumen",
+ "NBPL-1.0",
+ "NGPL",
+ "NOSL",
+ "NPL-1.0",
+ "NPL-1.1",
+ "Nokia",
+ "NPOSL-3.0",
+ "NTP",
+ "OCLC-2.0",
+ "ODbL-1.0",
+ "PDDL-1.0",
+ "OGTSL",
+ "OLDAP-2.2.2",
+ "OLDAP-1.1",
+ "OLDAP-1.2",
+ "OLDAP-1.3",
+ "OLDAP-1.4",
+ "OLDAP-2.0",
+ "OLDAP-2.0.1",
+ "OLDAP-2.1",
+ "OLDAP-2.2",
+ "OLDAP-2.2.1",
+ "OLDAP-2.3",
+ "OLDAP-2.4",
+ "OLDAP-2.5",
+ "OLDAP-2.6",
+ "OLDAP-2.7",
+ "OPL-1.0",
+ "OSL-1.0",
+ "OSL-2.0",
+ "OSL-2.1",
+ "OSL-3.0",
+ "OLDAP-2.8",
+ "OpenSSL",
+ "PHP-3.0",
+ "PHP-3.01",
+ "PostgreSQL",
+ "Python-2.0",
+ "QPL-1.0",
+ "RPSL-1.0",
+ "RPL-1.1",
+ "RPL-1.5",
+ "RHeCos-1.1",
+ "RSCPL",
+ "Ruby",
+ "SAX-PD",
+ "SGI-B-1.0",
+ "SGI-B-1.1",
+ "SGI-B-2.0",
+ "OFL-1.0",
+ "OFL-1.1",
+ "SimPL-2.0",
+ "Sleepycat",
+ "SMLNJ",
+ "SugarCRM-1.1.3",
+ "SISSL",
+ "SISSL-1.2",
+ "SPL-1.0",
+ "Watcom-1.0",
+ "NCSA",
+ "VSL-1.0",
+ "W3C",
+ "WXwindows",
+ "Xnet",
+ "X11",
+ "XFree86-1.1",
+ "YPL-1.0",
+ "YPL-1.1",
+ "Zimbra-1.3",
+ "Zlib",
+ "ZPL-1.1",
+ "ZPL-2.0",
+ "ZPL-2.1",
+ "Unlicense"
+ ]
+ },
+ "ResourceFileModulePaths": {
+ "type": "object",
+ "description": "Default paths to use for all ResourceLoader file modules",
+ "additionalProperties": false,
+ "properties": {
+ "localBasePath": {
+ "type": "string",
+ "description": "Base path to prepend to all local paths, relative to current directory"
+ },
+ "remoteExtPath": {
+ "type": "string",
+ "description": "Base path to prepend to all remote paths, relative to $wgExtensionAssetsPath"
+ },
+ "remoteSkinPath": {
+ "type": "string",
+ "description": "Base path to prepend to all remote paths, relative to $wgStylePath"
+ }
+ }
+ },
+ "ResourceModules": {
+ "type": "object",
+ "description": "ResourceLoader modules to register",
+ "additionalProperties": false,
+ "patternProperties": {
+ "^[a-zA-Z0-9\\.]+$": {
+ "type": "object",
+ "description": "A single ResourceLoader module descriptor",
+ "properties": {
+ "localBasePath": {
+ "type": "string",
+ "description": "Base path to prepend to all local paths in $options. Defaults to $IP"
+ },
+ "remoteBasePath": {
+ "type": "string",
+ "description": "Base path to prepend to all remote paths in $options. Defaults to $wgScriptPath"
+ },
+ "remoteExtPath": {
+ "type": "string",
+ "description": "Equivalent of remoteBasePath, but relative to $wgExtensionAssetsPath"
+ },
+ "scripts": {
+ "type": "array",
+ "description": "Scripts to always include (array of file paths)",
+ "items": {
+ "type": "string"
+ }
+ },
+ "languageScripts": {
+ "type": "object",
+ "description": "Scripts to include in specific language contexts (mapping of language code to file path(s))",
+ "patternProperties": {
+ "^[a-zA-Z0-9-]{2,}$": {
+ "type": [
+ "string",
+ "array"
+ ],
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "skinScripts": {
+ "type": "object",
+ "description": "Scripts to include in specific skin contexts (mapping of skin name to script(s)",
+ "patternProperties": {
+ ".+": {
+ "type": [
+ "string",
+ "array"
+ ],
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "debugScripts": {
+ "type": "array",
+ "description": "Scripts to include in debug contexts",
+ "items": {
+ "type": "string"
+ }
+ },
+ "loaderScripts": {
+ "type": "array",
+ "description": "Scripts to include in the startup module",
+ "items": {
+ "type": "string"
+ }
+ },
+ "dependencies": {
+ "type": "array",
+ "description": "Modules which must be loaded before this module",
+ "items": {
+ "type": "string"
+ }
+ },
+ "styles": {
+ "type": "array",
+ "description": "Styles to always load",
+ "items": {
+ "type": "string"
+ }
+ },
+ "skinStyles": {
+ "type": "object",
+ "description": "Styles to include in specific skin contexts (mapping of skin name to style(s))",
+ "patternProperties": {
+ ".+": {
+ "type": [
+ "string",
+ "array"
+ ],
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "messages": {
+ "type": "array",
+ "description": "Messages to always load",
+ "items": {
+ "type": "string"
+ }
+ },
+ "group": {
+ "type": "string",
+ "description": "Group which this module should be loaded together with"
+ },
+ "position": {
+ "type": "string",
+ "description": "Position on the page to load this module at",
+ "enum": [
+ "bottom",
+ "top"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "ResourceModuleSkinStyles": {
+ "type": "object",
+ "description": "ResourceLoader modules for custom skin styles"
+ },
+ "ResourceLoaderSources": {
+ "type": "object",
+ "description": "ResourceLoader sources to register"
+ },
+ "ResourceLoaderLESSVars": {
+ "type": "object",
+ "description": "ResourceLoader LESS variables"
+ },
+ "ResourceLoaderLESSFunctions": {
+ "type": "object",
+ "description": "ResourceLoader LESS functions"
+ },
+ "ResourceLoaderLESSImportPaths": {
+ "type": "object",
+ "description": "ResourceLoader import paths"
+ },
+ "ConfigRegistry": {
+ "type": "object",
+ "description": "Registry of factory functions to create Config objects"
+ },
+ "namespaces": {
+ "type": "object",
+ "description": "Method to add extra namespaces",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "constant": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "gender": {
+ "type": "object",
+ "properties": {
+ "male": {
+ "type": "string"
+ },
+ "female": {
+ "type": "string"
+ }
+ }
+ },
+ "subpages": {
+ "type": "boolean",
+ "default": false
+ },
+ "content": {
+ "type": "boolean",
+ "default": false
+ },
+ "defaultcontentmodel": {
+ "type": "string"
+ }
+ }
+ },
+ "TrackingCategories": {
+ "type": "array",
+ "description": "Tracking category message keys"
+ },
+ "DefaultUserOptions": {
+ "type": "object",
+ "description": "Default values of user options"
+ },
+ "HiddenPrefs": {
+ "type": "array",
+ "description": "Preferences users cannot set"
+ },
+ "GroupPermissions": {
+ "type": "object",
+ "description": "Default permissions to give to user groups"
+ },
+ "RevokePermissions": {
+ "type": "object",
+ "description": "Default permissions to revoke from user groups"
+ },
+ "ImplicitGroups": {
+ "type": "array",
+ "description": "Implicit groups"
+ },
+ "GroupsAddToSelf": {
+ "type": "object",
+ "description": "Groups a user can add to themselves"
+ },
+ "GroupsRemoveFromSelf": {
+ "type": "object",
+ "description": "Groups a user can remove from themselves"
+ },
+ "AddGroups": {
+ "type": "object",
+ "description": "Groups a user can add to users"
+ },
+ "RemoveGroups": {
+ "type": "object",
+ "description": "Groups a user can remove from users"
+ },
+ "AvailableRights": {
+ "type": "array",
+ "description": "User rights added by the extension"
+ },
+ "ContentHandlers": {
+ "type": "object",
+ "description": "Mapping of model ID to class name"
+ },
+ "RateLimits": {
+ "type": "object",
+ "description": "Rate limits"
+ },
+ "RecentChangesFlags": {
+ "type": "object",
+ "description": "Flags (letter symbols) shown on RecentChanges pages"
+ },
+ "MediaHandlers": {
+ "type": "object",
+ "description": "Plugins for media file type handling. Each entry in the array maps a MIME type to a PHP class name."
+ },
+ "ExtensionFunctions": {
+ "type": [
+ "array",
+ "string"
+ ],
+ "description": "Function to call after setup has finished"
+ },
+ "ExtensionMessagesFiles": {
+ "type": "object",
+ "description": "File paths containing PHP internationalization data"
+ },
+ "MessagesDirs": {
+ "type": "object",
+ "description": "Directory paths containing JSON internationalization data"
+ },
+ "ExtensionEntryPointListFiles": {
+ "type": "object"
+ },
+ "SpecialPages": {
+ "type": "object",
+ "description": "SpecialPages implemented in this extension (mapping of page name to class name)"
+ },
+ "AutoloadClasses": {
+ "type": "object"
+ },
+ "Hooks": {
+ "type": "object",
+ "description": "Hooks this extension uses (mapping of hook name to callback)"
+ },
+ "JobClasses": {
+ "type": "object",
+ "description": "Job types this extension implements (mapping of job type to class name)"
+ },
+ "LogTypes": {
+ "type": "array",
+ "description": "List of new log types this extension uses"
+ },
+ "LogRestrictions": {
+ "type": "object"
+ },
+ "FilterLogTypes": {
+ "type": "array"
+ },
+ "LogNames": {
+ "type": "object"
+ },
+ "LogHeaders": {
+ "type": "object"
+ },
+ "LogActions": {
+ "type": "object"
+ },
+ "LogActionsHandlers": {
+ "type": "object"
+ },
+ "Actions": {
+ "type": "object"
+ },
+ "APIModules": {
+ "type": "object"
+ },
+ "APIFormatModules": {
+ "type": "object"
+ },
+ "APIMetaModules": {
+ "type": "object"
+ },
+ "APIPropModules": {
+ "type": "object"
+ },
+ "APIListModules": {
+ "type": "object"
+ },
+ "ValidSkinNames": {
+ "type": "object"
+ },
+ "callback": {
+ "type": [
+ "array",
+ "string"
+ ],
+ "description": "A function to be called right after MediaWiki processes this file"
+ },
+ "config": {
+ "type": "object",
+ "description": "Configuration options for this extension"
+ },
+ "ParserTestFiles": {
+ "type": "array",
+ "description": "Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
+ }
+ }
+}
diff --git a/docs/hooks.txt b/docs/hooks.txt
index 910d812e..6f2050cc 100644
--- a/docs/hooks.txt
+++ b/docs/hooks.txt
@@ -34,15 +34,15 @@ title before displaying the article; the other converts the title to all
uppercase letters. Currently, in MediaWiki code, we would handle this as follows
(note: not real code, here):
- function showAnArticle($article) {
+ function showAnArticle( $article ) {
global $wgReverseTitle, $wgCapitalizeTitle;
- if ($wgReverseTitle) {
- wfReverseTitle($article);
+ if ( $wgReverseTitle ) {
+ wfReverseTitle( $article );
}
- if ($wgCapitalizeTitle) {
- wfCapitalizeTitle($article);
+ if ( $wgCapitalizeTitle ) {
+ wfCapitalizeTitle( $article );
}
# code to actually show the article goes here
@@ -52,34 +52,34 @@ An extension writer, or a local admin, will often add custom code to the
function -- with or without a global variable. For example, someone wanting
email notification when an article is shown may add:
- function showAnArticle($article) {
+ function showAnArticle( $article ) {
global $wgReverseTitle, $wgCapitalizeTitle, $wgNotifyArticle;
- if ($wgReverseTitle) {
- wfReverseTitle($article);
+ if ( $wgReverseTitle ) {
+ wfReverseTitle( $article );
}
- if ($wgCapitalizeTitle) {
- wfCapitalizeTitle($article);
+ if ( $wgCapitalizeTitle ) {
+ wfCapitalizeTitle( $article );
}
# code to actually show the article goes here
- if ($wgNotifyArticle) {
- wfNotifyArticleShow($article));
+ if ( $wgNotifyArticle ) {
+ wfNotifyArticleShow( $article );
}
}
Using a hook-running strategy, we can avoid having all this option-specific
stuff in our mainline code. Using hooks, the function becomes:
- function showAnArticle($article) {
+ function showAnArticle( $article ) {
- if (wfRunHooks('ArticleShow', array(&$article))) {
+ if ( Hooks::run( 'ArticleShow', array( &$article ) ) ) {
# code to actually show the article goes here
- wfRunHooks('ArticleShowComplete', array(&$article));
+ Hooks::run( 'ArticleShowComplete', array( &$article ) );
}
}
@@ -93,11 +93,11 @@ title-reversing if-blocks spread all over the codebase in showAnArticle,
deleteAnArticle, exportArticle, etc., we can concentrate it all in an extension
file:
- function reverseArticleTitle($article) {
+ function reverseArticleTitle( $article ) {
# ...
}
- function reverseForExport($article) {
+ function reverseForExport( $article ) {
# ...
}
@@ -139,29 +139,29 @@ Hooks are registered by adding them to the global $wgHooks array for a given
event. All the following are valid ways to define hooks:
$wgHooks['EventName'][] = 'someFunction'; # function, no data
- $wgHooks['EventName'][] = array('someFunction', $someData);
- $wgHooks['EventName'][] = array('someFunction'); # weird, but OK
+ $wgHooks['EventName'][] = array( 'someFunction', $someData );
+ $wgHooks['EventName'][] = array( 'someFunction' ); # weird, but OK
$wgHooks['EventName'][] = $object; # object only
- $wgHooks['EventName'][] = array($object, 'someMethod');
- $wgHooks['EventName'][] = array($object, 'someMethod', $someData);
- $wgHooks['EventName'][] = array($object); # weird but OK
+ $wgHooks['EventName'][] = array( $object, 'someMethod' );
+ $wgHooks['EventName'][] = array( $object, 'someMethod', $someData );
+ $wgHooks['EventName'][] = array( $object ); # weird but OK
When an event occurs, the function (or object method) will be called with the
optional data provided as well as event-specific parameters. The above examples
would result in the following code being executed when 'EventName' happened:
# function, no data
- someFunction($param1, $param2)
+ someFunction( $param1, $param2 )
# function with data
- someFunction($someData, $param1, $param2)
+ someFunction( $someData, $param1, $param2 )
# object only
- $object->onEventName($param1, $param2)
+ $object->onEventName( $param1, $param2 )
# object with method
- $object->someMethod($param1, $param2)
+ $object->someMethod( $param1, $param2 )
# object with method and data
- $object->someMethod($someData, $param1, $param2)
+ $object->someMethod( $someData, $param1, $param2 )
Note that when an object is the hook, and there's no specified method, the
default method called is 'onEventName'. For different events this would be
@@ -170,8 +170,8 @@ different: 'onArticleSave', 'onUserLogin', etc.
The extra data is useful if we want to use the same function or object for
different purposes. For example:
- $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'TimStarling');
- $wgHooks['ArticleSaveComplete'][] = array('ircNotify', 'brion');
+ $wgHooks['ArticleSaveComplete'][] = array( 'ircNotify', 'TimStarling' );
+ $wgHooks['ArticleSaveComplete'][] = array( 'ircNotify', 'brion' );
This code would result in ircNotify being run twice when an article is saved:
once for 'TimStarling', and once for 'brion'.
@@ -188,9 +188,9 @@ The last result would be for cases where the hook function replaces the main
functionality. For example, if you wanted to authenticate users to a custom
system (LDAP, another PHP program, whatever), you could do:
- $wgHooks['UserLogin'][] = array('ldapLogin', $ldapServer);
+ $wgHooks['UserLogin'][] = array( 'ldapLogin', $ldapServer );
- function ldapLogin($username, $password) {
+ function ldapLogin( $username, $password ) {
# log user into LDAP
return false;
}
@@ -204,25 +204,28 @@ Special:Version), and should be avoided when at all possible.
==Using hooks==
-A calling function or method uses the wfRunHooks() function to run the hooks
+A calling function or method uses the Hooks::run() function to run the hooks
related to a particular event, like so:
class Article {
# ...
function protect() {
global $wgUser;
- if (wfRunHooks('ArticleProtect', array(&$this, &$wgUser))) {
+ if ( Hooks::run( 'ArticleProtect', array( &$this, &$wgUser ) ) ) {
# protect the article
- wfRunHooks('ArticleProtectComplete', array(&$this, &$wgUser));
+ Hooks::run( 'ArticleProtectComplete', array( &$this, &$wgUser ) );
}
}
}
-wfRunHooks() returns true if the calling function should continue processing
+Hooks::run() returns true if the calling function should continue processing
(the hooks ran OK, or there are no hooks to run), or false if it shouldn't (an
error occurred, or one of the hooks handled the action already). Checking the
return value matters more for "before" hooks than for "complete" hooks.
+Hooks::run() was added in MediaWiki 1.18, before that the global function
+wfRunHooks must be used, which was deprecated in MediaWiki 1.25.
+
Note that hook parameters are passed in an array; this is a necessary
inconvenience to make it possible to pass reference values (that can be changed)
into the hook code. Also note that earlier versions of wfRunHooks took a
@@ -260,13 +263,6 @@ $password: the password being submitted, not yet checked for validity
a machine API rather than the HTML user interface.
&$msg: the message identifier for abort reason (new in 1.18, not available before 1.18)
-'AbortMove': Allows to abort moving an article (title).
-$old: old title
-$nt: new title
-$user: user who is doing the move
-$err: error message
-$reason: the reason for the move (added in 1.13)
-
'AbortNewAccount': Return false to cancel explicit account creation.
$user: the User object about to be created (read-only, incomplete)
&$msg: out parameter: HTML to display on abort
@@ -321,7 +317,7 @@ $output: The OutputPage object where output() was called
'AfterImportPage': When a page import is completed.
$title: Title under which the revisions were imported
-$origTitle: Title provided by the XML file
+$foreignTitle: ForeignTitle object based on data provided by the XML file
$revCount: Number of revisions in the XML file
$sRevCount: Number of successfully imported revisions
$pageInfo: associative array of page information
@@ -379,20 +375,73 @@ $editPage : the EditPage object
$text : the new text of the article (has yet to be saved)
&$resultArr : data in this array will be added to the API result
+'ApiFeedContributions::feedItem': Called to convert the result of ContribsPager
+into a FeedItem instance that ApiFeedContributions can consume. Implementors of
+this hook may cancel the hook to signal that the item is not viewable in the
+provided context.
+$row: A row of data from ContribsPager. The set of data returned by ContribsPager
+ can be adjusted by handling the ContribsPager::reallyDoQuery hook.
+$context: An IContextSource implementation.
+&$feedItem: Set this to a FeedItem instance if the callback can handle the provided
+ row. This is provided to the hook as a null, if it is non null then another callback
+ has already handled the hook.
+
+'ApiFormatHighlight': Use to syntax-highlight API pretty-printed output. When
+highlighting, add output to $context->getOutput() and return false.
+$context: An IContextSource.
+$text: Text to be highlighted.
+$mime: MIME type of $text.
+$format: API format code for $text.
+
'APIGetAllowedParams': Use this hook to modify a module's parameters.
&$module: ApiBase Module object
&$params: Array of parameters
$flags: int zero or OR-ed flags like ApiBase::GET_VALUES_FOR_HELP
-'APIGetDescription': Use this hook to modify a module's description.
+'APIGetDescription': DEPRECATED! Use APIGetDescriptionMessages instead.
+Use this hook to modify a module's description.
&$module: ApiBase Module object
-&$desc: Array of descriptions
+&$desc: String description, or array of description strings
+
+'APIGetDescriptionMessages': Use this hook to modify a module's help message.
+$module: ApiBase Module object
+&$msg: Array of Message objects
-'APIGetParamDescription': Use this hook to modify a module's parameter
-descriptions.
+'APIGetParamDescription': DEPRECATED! Use APIGetParamDescriptionMessages instead.
+Use this hook to modify a module's parameter descriptions.
&$module: ApiBase Module object
&$desc: Array of parameter descriptions
+'APIGetParamDescriptionMessages': Use this hook to modify a module's parameter descriptions.
+$module: ApiBase Module object
+&$msg: Array of arrays of Message objects
+
+'APIHelpModifyOutput': Use this hook to modify an API module's help output.
+$module: ApiBase Module object
+&$help: Array of HTML strings to be joined for the output.
+$options: Array Options passed to ApiHelp::getHelp
+
+'ApiMain::moduleManager': Called when ApiMain has finished initializing its
+module manager. Can be used to conditionally register API modules.
+$moduleManager: ApiModuleManager Module manager instance
+
+'ApiOpenSearchSuggest': Called when constructing the OpenSearch results. Hooks
+can alter or append to the array.
+&$results: array with integer keys to associative arrays. Keys in associative
+array:
+ - title: Title object.
+ - redirect from: Title or null.
+ - extract: Description for this result.
+ - extract trimmed: If truthy, the extract will not be trimmed to
+ $wgOpenSearchDescriptionLength.
+ - image: Thumbnail for this result. Value is an array with subkeys 'source'
+ (url), 'width', 'height', 'alt', 'align'.
+ - url: Url for the given title.
+
+'ApiQuery::moduleManager': Called when ApiQuery has finished initializing its
+module manager. Can be used to conditionally register API query modules.
+$moduleManager: ApiModuleManager Module manager instance
+
'APIQueryAfterExecute': After calling the execute() method of an
action=query submodule. Use this to extend core API modules.
&$module: Module object
@@ -514,6 +563,10 @@ $error: if the deletion was prohibited, the (raw HTML) error message to display
$status: Status object, modify this to throw an error. Overridden by $error
(added in 1.20)
+'ArticleDeleteAfterSuccess': Output after an article has been deleted.
+$title: Title of the article that has been deleted.
+$outputPage: OutputPage that can be used to append the output.
+
'ArticleDeleteComplete': After an article is deleted.
$wikiPage: the WikiPage that was deleted
$user: the user that deleted the article
@@ -746,12 +799,10 @@ $out: OutputPage object
'BeforeParserFetchFileAndTitle': Before an image is rendered by Parser.
$parser: Parser object
$nt: the image title
-&$options: array of options to RepoGroup::findFile
+&$options: array of options to RepoGroup::findFile. If it contains 'broken'
+ as a key then the file will appear as a broken thumbnail.
&$descQuery: query string to add to thumbnail URL
-FIXME: Where does the below sentence fit in?
-If 'broken' is a key in $options then the file will appear as a broken thumbnail.
-
'BeforeParserFetchTemplateAndtitle': Before a template is fetched by Parser.
$parser: Parser object
$title: title of the template
@@ -830,6 +881,20 @@ $wikiPage: WikiPage that was removed
'CategoryPageView': Before viewing a categorypage in CategoryPage::view.
$catpage: CategoryPage instance
+'CategoryViewer::doCategoryQuery': After querying for pages to be displayed
+in a Category page. Gives extensions the opportunity to batch load any
+related data about the pages.
+$type: The category type. Either 'page', 'file' or 'subcat'
+$res: Query result from DatabaseBase::select()
+
+'CategoryViewer::generateLink': Before generating an output link allow
+extensions opportunity to generate a more specific or relevant link.
+$type: The category type. Either 'page', 'img' or 'subcat'
+$title: Title object for the categorized page
+$html: Requested html content of anchor
+&$link: Returned value. When set to a non-null value by a hook subscriber
+this value will be used as the anchor instead of Linker::link
+
'ChangePasswordForm': For extensions that need to add a field to the
ChangePassword form via the Preferences form.
&$extraFields: An array of arrays that hold fields like would be passed to the
@@ -863,6 +928,38 @@ $name: name of the special page, e.g. 'Watchlist'
&$join_conds: join conditions for the tables
$opts: FormOptions for this request
+'ChangeTagAfterDelete': Called after a change tag has been deleted (that is,
+removed from all revisions and log entries to which it was applied). This gives
+extensions a chance to take it off their books.
+$tag: name of the tag
+&$status: Status object. Add warnings to this as required. There is no point
+ setting errors, as the deletion has already been partly carried out by this
+ point.
+
+'ChangeTagCanCreate': Tell whether a change tag should be able to be created
+from the UI (Special:Tags) or via the API. You could use this hook if you want
+to reserve a specific "namespace" of tags, or something similar.
+$tag: name of the tag
+$user: user initiating the action
+&$status: Status object. Add your errors using `$status->fatal()` or warnings
+ using `$status->warning()`. Errors and warnings will be relayed to the user.
+ If you set an error, the user will be unable to create the tag.
+
+'ChangeTagCanDelete': Tell whether a change tag should be able to be
+deleted from the UI (Special:Tags) or via the API. The default is that tags
+defined using the ListDefinedTags hook are not allowed to be deleted unless
+specifically allowed. If you wish to allow deletion of the tag, set
+`$status = Status::newGood()` to allow deletion, and then `return false` from
+the hook function. Ensure you consume the 'ChangeTagAfterDelete' hook to carry
+out custom deletion actions.
+$tag: name of the tag
+$user: user initiating the action
+&$status: Status object. See above.
+
+'ChangeTagsListActive': Allows you to nominate which of the tags your extension
+uses are in active use.
+&$tags: list of all active tags. Append to this array.
+
'LoginUserMigrated': Called during login to allow extensions the opportunity to
inform a user that their username doesn't exist for a specific reason, instead
of letting the login form give the generic error message that the account does
@@ -912,6 +1009,15 @@ generation of HTML may be skipped, but other information should still be present
ParserOutput object.
&$output: ParserOutput, to manipulate or replace
+'ContentAlterParserOutput': Modify parser output for a given content object.
+Called by Content::getParserOutput after parsing has finished. Can be used
+for changes that depend on the result of the parsing but have to be done
+before LinksUpdate is called (such as adding tracking categories based on
+the rendered HTML).
+$content: The Content to render
+$title: Title of the page, as context
+$parserOutput: ParserOutput to manipulate
+
'ConvertContent': Called by AbstractContent::convert when a conversion to another
content model is requested.
$content: The Content object to be converted.
@@ -955,6 +1061,21 @@ etc.
'DatabaseOraclePostInit': Called after initialising an Oracle database
&$db: the DatabaseOracle object
+'DeletedContribsPager::reallyDoQuery': Called before really executing the query for Special:DeletedContributions
+Similar to ContribsPager::reallyDoQuery
+&$data: an array of results of all contribs queries
+$pager: The DeletedContribsPager object hooked into
+$offset: Index offset, inclusive
+$limit: Exact query limit
+$descending: Query direction, false for ascending, true for descending
+
+'DeletedContributionsLineEnding': Called before a DeletedContributions HTML line is finished.
+Similar to ContributionsLineEnding
+$page: SpecialPage object for DeletedContributions
+&$ret: the HTML line
+$row: the DB row for this line
+&$classes: the classes to add to the surrounding <li>
+
'NewDifferenceEngine': Called when a new DifferenceEngine object is made
$title: the diff page title (nullable)
&$oldId: the actual old Id to use in the diff
@@ -962,6 +1083,15 @@ $title: the diff page title (nullable)
$old: the ?old= param value from the url
$new: the ?new= param value from the url
+'GetDifferenceEngine': Called when getting a new difference engine interface object
+Return false for valid object in $differenceEngine or true for the default difference engine
+$context: IContextSource context to be used for diff
+$old: Revision ID to show and diff with
+$new: Either a revision ID or one of the strings 'cur', 'prev' or 'next'
+$refreshCache: If set, refreshes the diff cache
+$unhide: If set, allow viewing deleted revs
+&$differenceEngine: output parameter, difference engine object to be used for diff
+
'DiffRevisionTools': Override or extend the revision tools available from the
diff view, i.e. undo, etc.
$newRev: Revision object of the "new" revision
@@ -979,6 +1109,7 @@ $article: article (object) being viewed
$oldid: oldid (int) being viewed
'DoEditSectionLink': Override the HTML generated for section edit links
+* Deprecated in favour of SkinEditSectionLinks hook *
$skin: Skin object rendering the UI
$title: Title object for the title being linked to (may not be the same as
the page title, if the section is included from a template)
@@ -1009,7 +1140,8 @@ This may be triggered by the EditPage or any other facility that modifies page c
Use the $status object to indicate whether the edit should be allowed, and to provide
a reason for disallowing it. Return false to abort the edit, and true to continue.
Returning true if $status->isOK() returns false means "don't save but continue user
-interaction", e.g. show the edit form.
+interaction", e.g. show the edit form. $status->apiHookResult can be set to an array
+to be returned by api.php action=edit. This is used to deliver captchas.
$context: object implementing the IContextSource interface.
$content: content of the edit box, as a Content object.
$status: Status object to represent errors, etc.
@@ -1030,6 +1162,11 @@ $editPage: EditPage object
saved, that is before WikiPage::doEditContent() is called
$editpage_Obj: the current EditPage object
+'EditPage::attemptSave:after': Called after an article save attempt
+$editpage_Obj: the current EditPage object
+$status: the resulting Status object
+$resultDetails: Result details array
+
'EditPage::importFormData': allow extensions to read additional data
posted in the form
$editpage: EditPage instance
@@ -1163,6 +1300,12 @@ $editToken: The user's edit token.
&$hookErr: Out-param for the error. Passed as the parameters to
OutputPage::showErrorPage.
+'EnhancedChangesList::getLogText': to alter, remove or add to the links of a
+group of changes in EnhancedChangesList.
+$changesList: EnhancedChangesList object
+&$links: The links that were generated by EnhancedChangesList
+$block: The RecentChanges objects in that block
+
'ExemptFromAccountCreationThrottle': Exemption from the account creation
throttle.
$ip: The ip address of the user
@@ -1214,15 +1357,15 @@ $reason: reason
'FormatAutocomments': When an autocomment is formatted by the Linker.
&$comment: Reference to the accumulated comment. Initially null, when set the
default code will be skipped.
- $pre: Initial part of the parsed comment before the call to the hook.
+ $pre: Boolean, true if there is text before this autocomment
$auto: The extracted part of the parsed comment before the call to the hook.
- $post: The final part of the parsed comment before the call to the hook.
+ $post: Boolean, true if there is text after this autocomment
$title: An optional title object used to links to sections. Can be null.
$local: Boolean indicating whether section links should refer to local page.
'GalleryGetModes': Get list of classes that can render different modes of a
gallery
-$modeArray: An associative array mapping mode names to classes that implement
+&$modeArray: An associative array mapping mode names to classes that implement
that mode. It is expected all registered classes are a subclass of
ImageGalleryBase.
@@ -1422,7 +1565,7 @@ $page: ImagePage object
'ImgAuthBeforeStream': executed before file is streamed to user, but only when
using img_auth.php.
&$title: the Title object of the file as it would appear for the upload page
-&$path: the original file and path name when img_auth was invoked by the the web
+&$path: the original file and path name when img_auth was invoked by the web
server
&$name: the name only component of the file
&$result: The location to pass back results of the hook routine (only used if
@@ -1668,6 +1811,13 @@ optional localisation messages
&$ignored Array of ignored message keys
&$optional Array of optional message keys
+'LogEventsListGetExtraInputs': When getting extra inputs to display on Special:Log
+for a specific log type
+$type: String of log type being displayed
+$logEventsList: LogEventsList object for context and access to the WebRequest
+&$input: string HTML of an input element
+
+
'LogEventsListShowLogExtract': Called before the string is added to OutputPage.
Returning false will prevent the string from being added to the OutputPage.
&$s: html string to show for the log extract
@@ -1805,6 +1955,18 @@ $db: The database object to be queried.
&$opts: Options for the query.
&$join_conds: Join conditions for the query.
+'MovePageCheckPermissions': Specify whether the user is allowed to move the page.
+$oldTitle: Title object of the current (old) location
+$newTitle: Title object of the new location
+$user: User making the move
+$reason: string of the reason provided by the user
+$status: Status object to pass error messages to
+
+'MovePageIsValidMove': Specify whether a page can be moved for technical reasons.
+$oldTitle: Title object of the current (old) location
+$newTitle: Title object of the new location
+$status: Status object to pass error messages to
+
'BaseTemplateToolbox': Called by BaseTemplate when building the $toolbox array
and returning it for the skin to output. You can add items to the toolbox while
still letting the skin make final decisions on skin-specific markup conventions
@@ -1850,6 +2012,17 @@ return false to omit the line from RecentChanges and Watchlist special pages.
can alter or append to the array of URLs for search & suggestion formats.
&$urls: array of associative arrays with Url element attributes
+'OpportunisticLinksUpdate': Called by WikiPage::triggerOpportunisticLinksUpdate
+when a page view triggers a re-rendering of the page. This may happen
+particularly if the parser cache is split by user language, and no cached
+rendering of the page exists in the user's language. The hook is called
+before checking whether page_links_updated indicates that the links are up
+to date. Returning false will cause triggerOpportunisticLinksUpdate() to abort
+without triggering any updates.
+$page: the Page that was rendered.
+$title: the Title of the rendered page.
+$parserOutput: ParserOutput resulting from rendering the page.
+
'OtherBlockLogLink': Get links to the block log from extensions which blocks
users and/or IP addresses too.
$otherBlockLink: An array with links to other block logs
@@ -1945,6 +2118,12 @@ the key.
&$confstr: reference to a hash key string which can be modified
$user: User (object) requesting the page
+'PageViewUpdate': Allow database (or other) changes to be made after a
+page view is seen by MediaWiki. Note this does not capture views made
+via external caches such as Squid.
+$wikipage: WikiPage (object) for the page being viewed.
+$user: User (object) for the user who is viewing.
+
'ParserAfterParse': Called from Parser::parse() just after the call to
Parser::internalParse() returns.
$parser: parser object
@@ -2108,6 +2287,14 @@ $ns : array of int namespace keys to search in
$search : search term (not guaranteed to be conveniently normalized)
$limit : maximum number of results to return
&$results : out param: array of page names (strings)
+$offset : number of results to offset from the beginning
+
+'PrefixSearchExtractNamespace': Called if core was not able to extract a
+namespace from the search string so that extensions can attempt it.
+$namespaces : array of int namespace keys to search in (change this if you can
+extract namespaces)
+$search : search term (replace this with term without the namespace if you can
+extract one)
'PrefsEmailAudit': Called when user changes their email address.
$user: User (object) changing his email address
@@ -2168,6 +2355,10 @@ configuration variables to JavaScript. Things that depend on the current page
or request state must be added through MakeGlobalVariablesScript instead.
&$vars: array( variable name => value )
+'ResourceLoaderGetLessVars': Called in ResourceLoader::getLessVars after variables
+from $wgResourceLoaderLESSVars are added. Can be used to add context-based variables.
+&$lessVars: array of variables already added
+
'ResourceLoaderRegisterModules': Right before modules information is required,
such as when responding to a resource
loader request or generating HTML output.
@@ -2225,6 +2416,18 @@ $title : Current Title object being displayed in search results.
'SearchableNamespaces': An option to modify which namespaces are searchable.
&$arr : Array of namespaces ($nsId => $name) which will be used.
+'SecondaryDataUpdates': Allows modification of the list of DataUpdates to
+perform when page content is modified. Currently called by
+AbstractContent::getSecondaryDataUpdates.
+$title: Title of the page that is being edited.
+$oldContent: Content object representing the page's content before the edit.
+$recursive: bool indicating whether DataUpdates should trigger recursive
+ updates (relevant mostly for LinksUpdate).
+$parserOutput: ParserOutput representing the rendered version of the page
+ after the edit.
+&$updates: a list of DataUpdate objects, to be modified or replaced by
+ the hook handler.
+
'SelfLinkBegin': Called before a link to the current article is displayed to
allow the display of the link to be customized.
$nt: the Title object
@@ -2310,6 +2513,23 @@ $type: 'normal' or 'history' for old/diff views
&$forContent: overridable flag if copyright footer is shown in content language.
This parameter is deprecated.
+'SkinEditSectionLinks': Modify the section edit links
+$skin: Skin object rendering the UI
+$title: Title object for the title being linked to (may not be the same as
+ the page title, if the section is included from a template)
+$section: The designation of the section being pointed to, to be included in
+ the link, like "&section=$section"
+$tooltip: The default tooltip. Escape before using.
+ By default, this is wrapped in the 'editsectionhint' message.
+&$result: Array containing all link detail arrays. Each link detail array should contain
+ the following keys:
+ * targetTitle - Target Title object
+ * text - String for the text
+ * attribs - Array of attributes
+ * query - Array of query parameters to add to the URL
+ * options - Array of options for Linker::link
+$lang: The language code to use for the link in the wfMessage function
+
'SkinGetPoweredBy': TODO
&$text: additional 'powered by' icons in HTML. Note: Modern skin does not use
the MediaWiki icon but plain text instead.
@@ -2358,7 +2578,7 @@ after variants have been added.
'SkinTemplateOutputPageBeforeExec': Before SkinTemplate::outputPage() starts
page output.
&$sktemplate: SkinTemplate object
-&$tpl: Template engine object
+&$tpl: QuickTemplate engine object
'SkinTemplatePreventOtherActiveTabs': Use this to prevent showing active tabs.
$sktemplate: SkinTemplate object
@@ -2428,6 +2648,11 @@ UsersPager::getQueryInfo()
$pager: The UsersPager instance
$query: The query array to be returned
+'SpecialLogAddLogSearchRelations': Add log relations to the current log
+$type: String of the log type
+$request: WebRequest object for getting the value provided by the current user
+&$qc: Array for query conditions to add
+
'SpecialMovepageAfterMove': Called after moving a page.
$movePage: MovePageForm object
$oldTitle: old title (object)
@@ -2449,7 +2674,7 @@ $special: the special page object
(message key) and a 'default' value.
'SpecialPage_initList': Called when setting up SpecialPageFactory::$list, use this
-hook to remove a core special page.
+hook to remove a core special page or conditionally register special pages.
$list: list (array) of core special pages
'SpecialPageAfterExecute': Called after SpecialPage::execute.
@@ -2549,7 +2774,13 @@ $term: string of search term
'SpecialStatsAddExtra': Add extra statistic at the end of Special:Statistics.
&$extraStats: Array to save the new stats
- ( $extraStats['<name of statistic>'] => <value>; )
+ ( $extraStats['<name of statistic>'] => <value>;
+ <value> can be an array with the keys "name" and "number":
+ "name" is the HTML to be displayed in the name column
+ "number" is the number to be displayed.
+ or, <value> can be the number to be displayed and <name> is the
+ message key to use in the name column,
+$context: IContextSource object
'SpecialUploadComplete': Called after successfully uploading a file from
Special:Upload.
@@ -2621,7 +2852,8 @@ that can be applied.
$title: The title in question.
&$types: The types of protection available.
-'TitleIsCssOrJsPage': Called when determining if a page is a CSS or JS page.
+'TitleIsCssOrJsPage': DEPRECATED! Use ContentHandlerDefaultModelFor instead.
+Called when determining if a page is a CSS or JS page.
$title: Title object that is being checked
$result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page.
Hooks may change this value to override the return value of
@@ -2642,7 +2874,8 @@ $result: Boolean; whether MediaWiki currently thinks this page is movable.
Hooks may change this value to override the return value of
Title::isMovable().
-'TitleIsWikitextPage': Called when determining if a page is a wikitext or should
+'TitleIsWikitextPage': DEPRECATED! Use ContentHandlerDefaultModelFor instead.
+Called when determining if a page is a wikitext or should
be handled by separate handler (via ArticleViewCustom).
$title: Title object that is being checked
$result: Boolean; whether MediaWiki currently thinks this is a wikitext page.
@@ -2824,13 +3057,13 @@ $user: User object
&$timestamp: timestamp, change this to override local email authentication
timestamp
-'UserGetImplicitGroups': Called in User::getImplicitGroups().
+'UserGetImplicitGroups': DEPRECATED, called in User::getImplicitGroups().
&$groups: List of implicit (automatically-assigned) groups
'UserGetLanguageObject': Called when getting user's interface language object.
$user: User object
&$code: Language code that will be used to create the object
-$context: RequestContext object
+$context: IContextSource object
'UserGetReservedNames': Allows to modify $wgReservedUsernames at run time.
&$reservedUsernames: $wgReservedUsernames
@@ -2963,6 +3196,11 @@ when UserMailer sends an email, with a bounce handling extension.
$to: Array of MailAddress objects for the recipients
&$returnPath: The return address string
+'LoginFormValidErrorMessages': Called in LoginForm when a function gets valid error
+messages. Allows to add additional error messages (except messages already in
+LoginForm::$validErrorMessages).
+&$messages Already added messages (inclusive messages from LoginForm::$validErrorMessages)
+
'WantedPages::getQueryInfo': Called in WantedPagesPage::getQueryInfo(), can be
used to alter the SQL query which gets the list of wanted pages.
&$wantedPages: WantedPagesPage object
diff --git a/docs/kss/Makefile b/docs/kss/Makefile
index a7b0c471..dadfb47c 100644
--- a/docs/kss/Makefile
+++ b/docs/kss/Makefile
@@ -4,9 +4,9 @@ kss: kssnodecheck
# Generates CSS of mediawiki.ui and mediawiki.ui.button using ResourceLoader, then applies it to the
# KSS style guide
$(eval KSS_RL_TMP := $(shell mktemp /tmp/tmp.XXXXXXXXXX))
-# Keep module names in strict alphabetical order, so CSS loads in the same order as ResourceLoader's addModuleStyles does; this can affect rendering.
+ $(eval MODULE_STR := $(shell paste -sd "|" styleGuideModules.txt))
# See OutputPage::makeResourceLoaderLink.
- @curl -sG "${MEDIAWIKI_LOAD_URL}?modules=mediawiki.legacy.commonPrint|mediawiki.legacy.shared|mediawiki.ui|mediawiki.ui.anchor|mediawiki.ui.button|mediawiki.ui.checkbox|mediawiki.ui.input&only=styles" > $(KSS_RL_TMP)
+ @curl -sG "${MEDIAWIKI_LOAD_URL}?modules=${MODULE_STR}&only=styles" > $(KSS_RL_TMP)
@node_modules/.bin/kss-node ../../resources/src/mediawiki.ui static/ --css $(KSS_RL_TMP) -t styleguide-template
@rm $(KSS_RL_TMP)
diff --git a/docs/kss/README.txt b/docs/kss/README.txt
index c383af9e..76cfb627 100644
--- a/docs/kss/README.txt
+++ b/docs/kss/README.txt
@@ -17,3 +17,5 @@ If MediaWiki is running on localhost, you can omit MEDIAWIKI_LOAD_URL.
To rebuild without opening the web browser, run:
MEDIAWIKI_LOAD_URL=mediawiki_hostname/w/load.php make
+
+When modifying styleGuideModules.txt, keep the list in strict alphabetical order (with no extra formatting), so CSS loads in the same order as ResourceLoader's addModuleStyles does; this can affect rendering.
diff --git a/docs/kss/styleGuideModules.txt b/docs/kss/styleGuideModules.txt
new file mode 100644
index 00000000..20910105
--- /dev/null
+++ b/docs/kss/styleGuideModules.txt
@@ -0,0 +1,10 @@
+mediawiki.legacy.commonPrint
+mediawiki.legacy.shared
+mediawiki.ui
+mediawiki.ui.anchor
+mediawiki.ui.button
+mediawiki.ui.checkbox
+mediawiki.ui.icon
+mediawiki.ui.input
+mediawiki.ui.radio
+mediawiki.ui.text
diff --git a/docs/kss/styleguide-template/public/less.js b/docs/kss/styleguide-template/public/less.js
deleted file mode 100644
index 89b76377..00000000
--- a/docs/kss/styleguide-template/public/less.js
+++ /dev/null
@@ -1,9 +0,0 @@
-//
-// LESS - Leaner CSS v1.2.1
-// http://lesscss.org
-//
-// Copyright (c) 2009-2011, Alexis Sellier
-// Licensed under the Apache 2.0 License.
-//
-(function(a,b){function c(b){return a.less[b.split("/")[1]]}function m(){var a=document.getElementsByTagName("style");for(var b=0;b<a.length;b++)a[b].type.match(k)&&(new d.Parser).parse(a[b].innerHTML||"",function(c,d){var e=d.toCSS(),f=a[b];f.type="text/css",f.styleSheet?f.styleSheet.cssText=e:f.innerHTML=e})}function n(a,b){for(var c=0;c<d.sheets.length;c++)o(d.sheets[c],a,b,d.sheets.length-(c+1))}function o(b,c,e,f){var g=a.location.href.replace(/[#?].*$/,""),i=b.href.replace(/\?.*$/,""),j=h&&h.getItem(i),k=h&&h.getItem(i+":timestamp"),l={css:j,timestamp:k};/^(https?|file):/.test(i)||(i.charAt(0)=="/"?i=a.location.protocol+"//"+a.location.host+i:i=g.slice(0,g.lastIndexOf("/")+1)+i);var m=i.match(/([^\/]+)$/)[1];s(b.href,b.type,function(a,g){if(!e&&l&&g&&(new Date(g)).valueOf()===(new Date(l.timestamp)).valueOf())r(l.css,b),c(null,b,{local:!0,remaining:f});else try{(new d.Parser({optimization:d.optimization,paths:[i.replace(/[\w\.-]+$/,"")],mime:b.type,filename:m})).parse(a,function(d,e){if(d)return w(d,i);try{c(d,e,a,b,{local:!1,lastModified:g,remaining:f}),u(document.getElementById("less-error-message:"+q(i)))}catch(d){w(d,i)}})}catch(h){w(h,i)}},function(a,b){throw new Error("Couldn't load "+b+" ("+a+")")})}function q(a){return a.replace(/^[a-z]+:\/\/?[^\/]+/,"").replace(/^\//,"").replace(/\?.*$/,"").replace(/\.[^\.\/]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")}function r(a,b,c){var d,e=b.href?b.href.replace(/\?.*$/,""):"",f="less:"+(b.title||q(e));(d=document.getElementById(f))===null&&(d=document.createElement("style"),d.type="text/css",d.media=b.media||"screen",d.id=f,document.getElementsByTagName("head")[0].appendChild(d));if(d.styleSheet)try{d.styleSheet.cssText=a}catch(g){throw new Error("Couldn't reassign styleSheet.cssText.")}else(function(a){d.childNodes.length>0?d.firstChild.nodeValue!==a.nodeValue&&d.replaceChild(a,d.firstChild):d.appendChild(a)})(document.createTextNode(a));c&&h&&(v("saving "+e+" to cache."),h.setItem(e,a),h.setItem(e+":timestamp",c))}function s(a,b,c,e){function i(b,c,d){b.status>=200&&b.status<300?c(b.responseText,b.getResponseHeader("Last-Modified")):typeof d=="function"&&d(b.status,a)}var f=t(),h=g?!1:d.async;typeof f.overrideMimeType=="function"&&f.overrideMimeType("text/css"),f.open("GET",a,h),f.setRequestHeader("Accept",b||"text/x-less, text/css; q=0.9, */*; q=0.5"),f.send(null),g?f.status===0||f.status>=200&&f.status<300?c(f.responseText):e(f.status,a):h?f.onreadystatechange=function(){f.readyState==4&&i(f,c,e)}:i(f,c,e)}function t(){if(a.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(b){return v("browser doesn't support AJAX."),null}}function u(a){return a&&a.parentNode.removeChild(a)}function v(a){d.env=="development"&&typeof console!="undefined"&&console.log("less: "+a)}function w(a,b){var c="less-error-message:"+q(b),e='<li><label>{line}</label><pre class="{class}">{content}</pre></li>',f=document.createElement("div"),g,h,i=[],j=a.filename||b;f.id=c,f.className="less-error-message",h="<h3>"+(a.message||"There is an error in your .less file")+"</h3>"+'<p>in <a href="'+j+'">'+j+"</a> ";var k=function(a,b,c){a.extract[b]&&i.push(e.replace(/\{line\}/,parseInt(a.line)+(b-1)).replace(/\{class\}/,c).replace(/\{content\}/,a.extract[b]))};a.stack?h+="<br/>"+a.stack.split("\n").slice(1).join("<br/>"):a.extract&&(k(a,0,""),k(a,1,"line"),k(a,2,""),h+="on line "+a.line+", column "+(a.column+1)+":</p>"+"<ul>"+i.join("")+"</ul>"),f.innerHTML=h,r([".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #dd6666;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.line {","color: #ff0000;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),f.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),d.env=="development"&&(g=setInterval(function(){document.body&&(document.getElementById(c)?document.body.replaceChild(f,document.getElementById(c)):document.body.insertBefore(f,document.body.firstChild),clearInterval(g))},10))}Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"||a instanceof Array}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=this.length>>>0;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=this.length>>>0,c=new Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=this.length>>>0,c=0;if(b===0&&arguments.length===1)throw new TypeError;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length,c=arguments[1]||0;if(!b)return-1;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!Object.prototype.hasOwnProperty.call(this,c))continue;if(a===this[c])return c}return-1}),Object.keys||(Object.keys=function(a){var b=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b}),String.prototype.trim||(String.prototype.trim=function(){return String(this).replace(/^\s\s*/,"").replace(/\s\s*$/,"")});var d,f;typeof environment=="object"&&{}.toString.call(environment)==="[object Environment]"?(typeof a=="undefined"?d={}:d=a.less={},f=d.tree={},d.mode="rhino"):typeof a=="undefined"?(d=exports,f=c("./tree"),d.mode="node"):(typeof a.less=="undefined"&&(a.less={}),d=a.less,f=a.less.tree={},d.mode="browser"),d.Parser=function(b){function t(){j=m[i],k=h,n=h}function u(){m[i]=j,h=k,n=h}function v(){h>n&&(m[i]=m[i].slice(h-n),n=h)}function w(a){var b,c,d,e,f,j,k,l;if(a instanceof Function)return a.call(o.parsers);if(typeof a=="string")b=g.charAt(h)===a?a:null,d=1,v();else{v();if(!(b=a.exec(m[i])))return null;d=b[0].length}if(b){l=h+=d,j=h+m[i].length-d;while(h<j){e=g.charCodeAt(h);if(e!==32&&e!==10&&e!==9)break;h++}return m[i]=m[i].slice(d+(h-l)),n=h,m[i].length===0&&i<m.length-1&&i++,typeof b=="string"?b:b.length===1?b[0]:b}}function x(a,b){var c=w(a);if(!!c)return c;y(b||(typeof a=="string"?"expected '"+a+"' got '"+g.charAt(h)+"'":"unexpected token"))}function y(a,b){throw{index:h,type:b||"Syntax",message:a}}function z(a){return typeof a=="string"?g.charAt(h)===a:a.test(m[i])?!0:!1}function A(a,b){return a.filename&&b.filename&&a.filename!==b.filename?o.imports.contents[a.filename]:g}function B(a,b){for(var c=a,d=-1;c>=0&&b.charAt(c)!=="\n";c--)d++;return{line:typeof a=="number"?(b.slice(0,a).match(/\n/g)||"").length:null,column:d}}function C(a,b){var c=A(a,b),d=B(a.index,c),e=d.line,f=d.column,g=c.split("\n");this.type=a.type||"Syntax",this.message=a.message,this.filename=a.filename||b.filename,this.index=a.index,this.line=typeof e=="number"?e+1:null,this.callLine=a.call&&B(a.call,c)+1,this.callExtract=g[B(a.call,c)],this.stack=a.stack,this.column=f,this.extract=[g[e-1],g[e],g[e+1]]}var g,h,i,j,k,l,m,n,o,q=this,r=function(){},s=this.imports={paths:b&&b.paths||[],queue:[],files:{},contents:{},mime:b&&b.mime,error:null,push:function(a,c){var e=this;this.queue.push(a),d.Parser.importer(a,this.paths,function(b,d,f){e.queue.splice(e.queue.indexOf(a),1),e.files[a]=d,e.contents[a]=f,b&&!e.error&&(e.error=b),c(b,d),e.queue.length===0&&r()},b)}};return this.env=b=b||{},this.optimization="optimization"in this.env?this.env.optimization:1,this.env.filename=this.env.filename||null,o={imports:s,parse:function(a,e){var j,k,p,q,s,t,u=[],v,x=null;h=i=n=l=0,m=[],g=a.replace(/\r\n/g,"\n"),m=function(a){var c=0,d=/[^"'`\{\}\/\(\)]+/g,e=/\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g,f=0,h,i=a[0],j,k;for(var l=0,m,n;l<g.length;l++){d.lastIndex=l,(h=d.exec(g))&&h.index===l&&(l+=h[0].length,i.push(h[0])),m=g.charAt(l),e.lastIndex=l,!k&&!j&&m==="/"&&(n=g.charAt(l+1),(n==="/"||n==="*")&&(h=e.exec(g))&&h.index===l&&(l+=h[0].length,i.push(h[0]),m=g.charAt(l)));if(m==="{"&&!k&&!j)f++,i.push(m);else if(m==="}"&&!k&&!j)f--,i.push(m),a[++c]=i=[];else if(m==="("&&!k&&!j)i.push(m),j=!0;else if(m===")"&&!k&&j)i.push(m),j=!1;else{if(m==='"'||m==="'"||m==="`")k?k=k===m?!1:k:k=m;i.push(m)}}if(f>0)throw{type:"Syntax",message:"Missing closing `}`",filename:b.filename};return a.map(function(a){return a.join("")})}([[]]);try{j=new f.Ruleset([],w(this.parsers.primary)),j.root=!0}catch(y){return e(new C(y,b))}j.toCSS=function(a){var e,g,h;return function(e,g){var h=[],i;e=e||{},typeof g=="object"&&!Array.isArray(g)&&(g=Object.keys(g).map(function(a){var b=g[a];return b instanceof f.Value||(b instanceof f.Expression||(b=new f.Expression([b])),b=new f.Value([b])),new f.Rule("@"+a,b,!1,0)}),h=[new f.Ruleset(null,g)]);try{var j=a.call(this,{frames:h}).toCSS([],{compress:e.compress||!1})}catch(k){throw new C(k,b)}if(i=o.imports.error)throw i instanceof C?i:new C(i,b);return e.yuicompress&&d.mode==="node"?c("./cssmin").compressor.cssmin(j):e.compress?j.replace(/(\s)+/g,"$1"):j}}(j.eval);if(h<g.length-1){h=l,t=g.split("\n"),s=(g.slice(0,h).match(/\n/g)||"").length+1;for(var z=h,A=-1;z>=0&&g.charAt(z)!=="\n";z--)A++;x={type:"Parse",message:"Syntax Error on line "+s,index:h,filename:b.filename,line:s,column:A,extract:[t[s-2],t[s-1],t[s]]}}this.imports.queue.length>0?r=function(){e(x,j)}:e(x,j)},parsers:{primary:function(){var a,b=[];while((a=w(this.mixin.definition)||w(this.rule)||w(this.ruleset)||w(this.mixin.call)||w(this.comment)||w(this.directive))||w(/^[\s\n]+/))a&&b.push(a);return b},comment:function(){var a;if(g.charAt(h)!=="/")return;if(g.charAt(h+1)==="/")return new f.Comment(w(/^\/\/.*/),!0);if(a=w(/^\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/))return new f.Comment(a)},entities:{quoted:function(){var a,b=h,c;g.charAt(b)==="~"&&(b++,c=!0);if(g.charAt(b)!=='"'&&g.charAt(b)!=="'")return;c&&w("~");if(a=w(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/))return new f.Quoted(a[0],a[1]||a[2],c)},keyword:function(){var a;if(a=w(/^[_A-Za-z-][_A-Za-z0-9-]*/))return f.colors.hasOwnProperty(a)?new f.Color(f.colors[a].slice(1)):new f.Keyword(a)},call:function(){var a,c,d=h;if(!(a=/^([\w-]+|%|progid:[\w\.]+)\(/.exec(m[i])))return;a=a[1].toLowerCase();if(a==="url")return null;h+=a.length;if(a==="alpha")return w(this.alpha);w("("),c=w(this.entities.arguments);if(!w(")"))return;if(a)return new f.Call(a,c,d,b.filename)},arguments:function(){var a=[],b;while(b=w(this.entities.assignment)||w(this.expression)){a.push(b);if(!w(","))break}return a},literal:function(){return w(this.entities.dimension)||w(this.entities.color)||w(this.entities.quoted)},assignment:function(){var a,b;if((a=w(/^\w+(?=\s?=)/i))&&w("=")&&(b=w(this.entity)))return new f.Assignment(a,b)},url:function(){var a;if(g.charAt(h)!=="u"||!w(/^url\(/))return;return a=w(this.entities.quoted)||w(this.entities.variable)||w(this.entities.dataURI)||w(/^[-\w%@$\/.&=:;#+?~]+/)||"",x(")"),new f.URL(a.value||a.data||a instanceof f.Variable?a:new f.Anonymous(a),s.paths)},dataURI:function(){var a;if(w(/^data:/)){a={},a.mime=w(/^[^\/]+\/[^,;)]+/)||"",a.charset=w(/^;\s*charset=[^,;)]+/)||"",a.base64=w(/^;\s*base64/)||"",a.data=w(/^,\s*[^)]+/);if(a.data)return a}},variable:function(){var a,c=h;if(g.charAt(h)==="@"&&(a=w(/^@@?[\w-]+/)))return new f.Variable(a,c,b.filename)},color:function(){var a;if(g.charAt(h)==="#"&&(a=w(/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/)))return new f.Color(a[1])},dimension:function(){var a,b=g.charCodeAt(h);if(b>57||b<45||b===47)return;if(a=w(/^(-?\d*\.?\d+)(px|%|em|rem|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn)?/))return new f.Dimension(a[1],a[2])},javascript:function(){var a,b=h,c;g.charAt(b)==="~"&&(b++,c=!0);if(g.charAt(b)!=="`")return;c&&w("~");if(a=w(/^`([^`]*)`/))return new f.JavaScript(a[1],h,c)}},variable:function(){var a;if(g.charAt(h)==="@"&&(a=w(/^(@[\w-]+)\s*:/)))return a[1]},shorthand:function(){var a,b;if(!z(/^[@\w.%-]+\/[@\w.-]+/))return;if((a=w(this.entity))&&w("/")&&(b=w(this.entity)))return new f.Shorthand(a,b)},mixin:{call:function(){var a=[],c,d,e,i=h,j=g.charAt(h),k=!1;if(j!=="."&&j!=="#")return;while(c=w(/^[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/))a.push(new f.Element(d,c,h)),d=w(">");w("(")&&(e=w(this.entities.arguments))&&w(")"),w(this.important)&&(k=!0);if(a.length>0&&(w(";")||z("}")))return new f.mixin.Call(a,e,i,b.filename,k)},definition:function(){var a,b=[],c,d,e,i,j;if(g.charAt(h)!=="."&&g.charAt(h)!=="#"||z(/^[^{]*(;|})/))return;t();if(c=w(/^([#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+)\s*\(/)){a=c[1];while(e=w(this.entities.variable)||w(this.entities.literal)||w(this.entities.keyword)){e instanceof f.Variable?w(":")?(i=x(this.expression,"expected expression"),b.push({name:e.name,value:i})):b.push({name:e.name}):b.push({value:e});if(!w(","))break}x(")"),w(/^when/)&&(j=x(this.conditions,"expected condition")),d=w(this.block);if(d)return new f.mixin.Definition(a,b,d,j);u()}}},entity:function(){return w(this.entities.literal)||w(this.entities.variable)||w(this.entities.url)||w(this.entities.call)||w(this.entities.keyword)||w(this.entities.javascript)||w(this.comment)},end:function(){return w(";")||z("}")},alpha:function(){var a;if(!w(/^\(opacity=/i))return;if(a=w(/^\d+/)||w(this.entities.variable))return x(")"),new f.Alpha(a)},element:function(){var a,b,c,d;c=w(this.combinator),a=w(/^(?:\d+\.\d+|\d+)%/)||w(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)||w("*")||w(this.attribute)||w(/^\([^)@]+\)/),a||w("(")&&(d=w(this.entities.variable))&&w(")")&&(a=new f.Paren(d));if(a)return new f.Element(c,a,h);if(c.value&&c.value.charAt(0)==="&")return new f.Element(c,null,h)},combinator:function(){var a,b=g.charAt(h);if(b===">"||b==="+"||b==="~"){h++;while(g.charAt(h)===" ")h++;return new f.Combinator(b)}if(b==="&"){a="&",h++,g.charAt(h)===" "&&(a="& ");while(g.charAt(h)===" ")h++;return new f.Combinator(a)}if(b===":"&&g.charAt(h+1)===":"){h+=2;while(g.charAt(h)===" ")h++;return new f.Combinator("::")}return g.charAt(h-1)===" "?new f.Combinator(" "):new f.Combinator(null)},selector:function(){var a,b,c=[],d,e;while(b=w(this.element)){d=g.charAt(h),c.push(b);if(d==="{"||d==="}"||d===";"||d===",")break}if(c.length>0)return new f.Selector(c)},tag:function(){return w(/^[a-zA-Z][a-zA-Z-]*[0-9]?/)||w("*")},attribute:function(){var a="",b,c,d;if(!w("["))return;if(b=w(/^[a-zA-Z-]+/)||w(this.entities.quoted))(d=w(/^[|~*$^]?=/))&&(c=w(this.entities.quoted)||w(/^[\w-]+/))?a=[b,d,c.toCSS?c.toCSS():c].join(""):a=b;if(!w("]"))return;if(a)return"["+a+"]"},block:function(){var a;if(w("{")&&(a=w(this.primary))&&w("}"))return a},ruleset:function(){var a=[],b,c,d;t();while(b=w(this.selector)){a.push(b),w(this.comment);if(!w(","))break;w(this.comment)}if(a.length>0&&(c=w(this.block)))return new f.Ruleset(a,c);l=h,u()},rule:function(){var a,b,c=g.charAt(h),d,e;t();if(c==="."||c==="#"||c==="&")return;if(a=w(this.variable)||w(this.property)){a.charAt(0)!="@"&&(e=/^([^@+\/'"*`(;{}-]*);/.exec(m[i]))?(h+=e[0].length-1,b=new f.Anonymous(e[1])):a==="font"?b=w(this.font):b=w(this.value),d=w(this.important);if(b&&w(this.end))return new f.Rule(a,b,d,k);l=h,u()}},"import":function(){var a,b,c=h;if(w(/^@import\s+/)&&(a=w(this.entities.quoted)||w(this.entities.url))){b=w(this.mediaFeatures);if(w(";"))return new f.Import(a,s,b,c)}},mediaFeature:function(){var a=[];do if(e=w(this.entities.keyword))a.push(e);else if(w("(")){p=w(this.property),e=w(this.entity);if(!w(")"))return null;if(p&&e)a.push(new f.Paren(new f.Rule(p,e,null,h,!0)));else{if(!e)return null;a.push(new f.Paren(e))}}while(e);if(a.length>0)return new f.Expression(a)},mediaFeatures:function(){var a,b=[];while(a=w(this.mediaFeature)){b.push(a);if(!w(","))break}return b.length>0?b:null},media:function(){var a;if(w(/^@media/)){a=w(this.mediaFeatures);if(rules=w(this.block))return new f.Directive("@media",rules,a)}},directive:function(){var a,b,c,d,e,i;if(g.charAt(h)!=="@")return;if(b=w(this["import"])||w(this.media))return b;if(a=w(/^@page|@keyframes/)||w(/^@(?:-webkit-|-moz-|-o-|-ms-)[a-z0-9-]+/)){d=(w(/^[^{]+/)||"").trim();if(c=w(this.block))return new f.Directive(a+" "+d,c)}else if(a=w(/^@[-a-z]+/))if(a==="@font-face"){if(c=w(this.block))return new f.Directive(a,c)}else if((b=w(this.entity))&&w(";"))return new f.Directive(a,b)},font:function(){var a=[],b=[],c,d,e,g;while(g=w(this.shorthand)||w(this.entity))b.push(g);a.push(new f.Expression(b));if(w(","))while(g=w(this.expression)){a.push(g);if(!w(","))break}return new f.Value(a)},value:function(){var a,b=[],c;while(a=w(this.expression)){b.push(a);if(!w(","))break}if(b.length>0)return new f.Value(b)},important:function(){if(g.charAt(h)==="!")return w(/^! *important/)},sub:function(){var a;if(w("(")&&(a=w(this.expression))&&w(")"))return a},multiplication:function(){var a,b,c,d;if(a=w(this.operand)){while(!z(/^\/\*/)&&(c=w("/")||w("*"))&&(b=w(this.operand)))d=new f.Operation(c,[d||a,b]);return d||a}},addition:function(){var a,b,c,d;if(a=w(this.multiplication)){while((c=w(/^[-+]\s+/)||g.charAt(h-1)!=" "&&(w("+")||w("-")))&&(b=w(this.multiplication)))d=new f.Operation(c,[d||a,b]);return d||a}},conditions:function(){var a,b,c=h,d;if(a=w(this.condition)){while(w(",")&&(b=w(this.condition)))d=new f.Condition("or",d||a,b,c);return d||a}},condition:function(){var a,b,c,d,e=h,g=!1;w(/^not/)&&(g=!0),x("(");if(a=w(this.addition)||w(this.entities.keyword)||w(this.entities.quoted))return(d=w(/^(?:>=|=<|[<=>])/))?(b=w(this.addition)||w(this.entities.keyword)||w(this.entities.quoted))?c=new f.Condition(d,a,b,e,g):y("expected expression"):c=new f.Condition("=",a,new f.Keyword("true"),e,g),x(")"),w(/^and/)?new f.Condition("and",c,w(this.condition)):c},operand:function(){var a,b=g.charAt(h+1);g.charAt(h)==="-"&&(b==="@"||b==="(")&&(a=w("-"));var c=w(this.sub)||w(this.entities.dimension)||w(this.entities.color)||w(this.entities.variable)||w(this.entities.call);return a?new f.Operation("*",[new f.Dimension(-1),c]):c},expression:function(){var a,b,c=[],d;while(a=w(this.addition)||w(this.entity))c.push(a);if(c.length>0)return new f.Expression(c)},property:function(){var a;if(a=w(/^(\*?-?[-a-z_0-9]+)\s*:/))return a[1]}}}};if(d.mode==="browser"||d.mode==="rhino")d.Parser.importer=function(a,b,c,d){a.charAt(0)!=="/"&&b.length>0&&(a=b[0]+a),o({href:a,title:a,type:d.mime},c,!0)};(function(a){function b(b){return a.functions.hsla(b.h,b.s,b.l,b.a)}function c(b){if(b instanceof a.Dimension)return parseFloat(b.unit=="%"?b.value/100:b.value);if(typeof b=="number")return b;throw{error:"RuntimeError",message:"color functions take numbers as parameters"}}function d(a){return Math.min(1,Math.max(0,a))}a.functions={rgb:function(a,b,c){return this.rgba(a,b,c,1)},rgba:function(b,d,e,f){var g=[b,d,e].map(function(a){return c(a)}),f=c(f);return new a.Color(g,f)},hsl:function(a,b,c){return this.hsla(a,b,c,1)},hsla:function(a,b,d,e){function h(a){return a=a<0?a+1:a>1?a-1:a,a*6<1?g+(f-g)*a*6:a*2<1?f:a*3<2?g+(f-g)*(2/3-a)*6:g}a=c(a)%360/360,b=c(b),d=c(d),e=c(e);var f=d<=.5?d*(b+1):d+b-d*b,g=d*2-f;return this.rgba(h(a+1/3)*255,h(a)*255,h(a-1/3)*255,e)},hue:function(b){return new a.Dimension(Math.round(b.toHSL().h))},saturation:function(b){return new a.Dimension(Math.round(b.toHSL().s*100),"%")},lightness:function(b){return new a.Dimension(Math.round(b.toHSL().l*100),"%")},alpha:function(b){return new a.Dimension(b.toHSL().a)},saturate:function(a,c){var e=a.toHSL();return e.s+=c.value/100,e.s=d(e.s),b(e)},desaturate:function(a,c){var e=a.toHSL();return e.s-=c.value/100,e.s=d(e.s),b(e)},lighten:function(a,c){var e=a.toHSL();return e.l+=c.value/100,e.l=d(e.l),b(e)},darken:function(a,c){var e=a.toHSL();return e.l-=c.value/100,e.l=d(e.l),b(e)},fadein:function(a,c){var e=a.toHSL();return e.a+=c.value/100,e.a=d(e.a),b(e)},fadeout:function(a,c){var e=a.toHSL();return e.a-=c.value/100,e.a=d(e.a),b(e)},fade:function(a,c){var e=a.toHSL();return e.a=c.value/100,e.a=d(e.a),b(e)},spin:function(a,c){var d=a.toHSL(),e=(d.h+c.value)%360;return d.h=e<0?360+e:e,b(d)},mix:function(b,c,d){var e=d.value/100,f=e*2-1,g=b.toHSL().a-c.toHSL().a,h=((f*g==-1?f:(f+g)/(1+f*g))+1)/2,i=1-h,j=[b.rgb[0]*h+c.rgb[0]*i,b.rgb[1]*h+c.rgb[1]*i,b.rgb[2]*h+c.rgb[2]*i],k=b.alpha*e+c.alpha*(1-e);return new a.Color(j,k)},greyscale:function(b){return this.desaturate(b,new a.Dimension(100))},e:function(b){return new a.Anonymous(b instanceof a.JavaScript?b.evaluated:b)},escape:function(b){return new a.Anonymous(encodeURI(b.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},"%":function(b){var c=Array.prototype.slice.call(arguments,1),d=b.value;for(var e=0;e<c.length;e++)d=d.replace(/%[sda]/i,function(a){var b=a.match(/s/i)?c[e].value:c[e].toCSS();return a.match(/[A-Z]$/)?encodeURIComponent(b):b});return d=d.replace(/%%/g,"%"),new a.Quoted('"'+d+'"',d)},round:function(a){return this._math("round",a)},ceil:function(a){return this._math("ceil",a)},floor:function(a){return this._math("floor",a)},_math:function(b,d){if(d instanceof a.Dimension)return new a.Dimension(Math[b](c(d)),d.unit);if(typeof d=="number")return Math[b](d);throw{type:"Argument",message:"argument must be a number"}},argb:function(b){return new a.Anonymous(b.toARGB())},percentage:function(b){return new a.Dimension(b.value*100,"%")},color:function(b){if(b instanceof a.Quoted)return new a.Color(b.value.slice(1));throw{type:"Argument",message:"argument must be a string"}},iscolor:function(b){return this._isa(b,a.Color)},isnumber:function(b){return this._isa(b,a.Dimension)},isstring:function(b){return this._isa(b,a.Quoted)},iskeyword:function(b){return this._isa(b,a.Keyword)},isurl:function(b){return this._isa(b,a.URL)},ispixel:function(b){return b instanceof a.Dimension&&b.unit==="px"?a.True:a.False},ispercentage:function(b){return b instanceof a.Dimension&&b.unit==="%"?a.True:a.False},isem:function(b){return b instanceof a.Dimension&&b.unit==="em"?a.True:a.False},_isa:function(b,c){return b instanceof c?a.True:a.False}}})(c("./tree")),function(a){a.colors={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"}}(c("./tree")),function(a){a.Alpha=function(a){this.value=a},a.Alpha.prototype={toCSS:function(){return"alpha(opacity="+(this.value.toCSS?this.value.toCSS():this.value)+")"},eval:function(a){return this.value.eval&&(this.value=this.value.eval(a)),this}}}(c("../tree")),function(a){a.Anonymous=function(a){this.value=a.value||a},a.Anonymous.prototype={toCSS:function(){return this.value},eval:function(){return this}}}(c("../tree")),function(a){a.Assignment=function(a,b){this.key=a,this.value=b},a.Assignment.prototype={toCSS:function(){return this.key+"="+(this.value.toCSS?this.value.toCSS():this.value)},eval:function(a){return this.value.eval&&(this.value=this.value.eval(a)),this}}}(c("../tree")),function(a){a.Call=function(a,b,c,d){this.name=a,this.args=b,this.index=c,this.filename=d},a.Call.prototype={eval:function(b){var c=this.args.map(function(a){return a.eval(b)});if(!(this.name in a.functions))return new a.Anonymous(this.name+"("+c.map(function(a){return a.toCSS()}).join(", ")+")");try{return a.functions[this.name].apply(a.functions,c)}catch(d){throw{type:d.type||"Runtime",message:"error evaluating function `"+this.name+"`"+(d.message?": "+d.message:""),index:this.index,filename:this.filename}}},toCSS:function(a){return this.eval(a).toCSS()}}}(c("../tree")),function(a){a.Color=function(a,b){Array.isArray(a)?this.rgb=a:a.length==6?this.rgb=a.match(/.{2}/g).map(function(a){return parseInt(a,16)}):this.rgb=a.split("").map(function(a){return parseInt(a+a,16)}),this.alpha=typeof b=="number"?b:1},a.Color.prototype={eval:function(){return this},toCSS:function(){return this.alpha<1?"rgba("+this.rgb.map(function(a){return Math.round(a)}).concat(this.alpha).join(", ")+")":"#"+this.rgb.map(function(a){return a=Math.round(a),a=(a>255?255:a<0?0:a).toString(16),a.length===1?"0"+a:a}).join("")},operate:function(b,c){var d=[];c instanceof a.Color||(c=c.toColor());for(var e=0;e<3;e++)d[e]=a.operate(b,this.rgb[e],c.rgb[e]);return new a.Color(d,this.alpha+c.alpha)},toHSL:function(){var a=this.rgb[0]/255,b=this.rgb[1]/255,c=this.rgb[2]/255,d=this.alpha,e=Math.max(a,b,c),f=Math.min(a,b,c),g,h,i=(e+f)/2,j=e-f;if(e===f)g=h=0;else{h=i>.5?j/(2-e-f):j/(e+f);switch(e){case a:g=(b-c)/j+(b<c?6:0);break;case b:g=(c-a)/j+2;break;case c:g=(a-b)/j+4}g/=6}return{h:g*360,s:h,l:i,a:d}},toARGB:function(){var a=[Math.round(this.alpha*255)].concat(this.rgb);return"#"+a.map(function(a){return a=Math.round(a),a=(a>255?255:a<0?0:a).toString(16),a.length===1?"0"+a:a}).join("")}}}(c("../tree")),function(a){a.Comment=function(a,b){this.value=a,this.silent=!!b},a.Comment.prototype={toCSS:function(a){return a.compress?"":this.value},eval:function(){return this}}}(c("../tree")),function(a){a.Condition=function(a,b,c,d,e){this.op=a.trim(),this.lvalue=b,this.rvalue=c,this.index=d,this.negate=e},a.Condition.prototype.eval=function(a){var b=this.lvalue.eval(a),c=this.rvalue.eval(a),d=this.index,e,e=function(a){switch(a){case"and":return b&&c;case"or":return b||c;default:if(b.compare)e=b.compare(c);else{if(!c.compare)throw{type:"Type",message:"Unable to perform comparison",index:d};e=c.compare(b)}switch(e){case-1:return a==="<"||a==="=<";case 0:return a==="="||a===">="||a==="=<";case 1:return a===">"||a===">="}}}(this.op);return this.negate?!e:e}}(c("../tree")),function(a){a.Dimension=function(a,b){this.value=parseFloat(a),this.unit=b||null},a.Dimension.prototype={eval:function(){return this},toColor:function(){return new a.Color([this.value,this.value,this.value])},toCSS:function(){var a=this.value+this.unit;return a},operate:function(b,c){return new a.Dimension(a.operate(b,this.value,c.value),this.unit||c.unit)},compare:function(b){return b instanceof a.Dimension?b.value>this.value?-1:b.value<this.value?1:0:-1}}}(c("../tree")),function(a){a.Directive=function(b,c,d){this.name=b,this.features=d&&new a.Value(d),Array.isArray(c)?(this.ruleset=new a.Ruleset([],c),this.ruleset.allowImports=!0):this.value=c},a.Directive.prototype={toCSS:function(a,b){var c=this.features?" "+this.features.toCSS(b):"";return this.ruleset?(this.ruleset.root=!0,this.name+c+(b.compress?"{":" {\n ")+this.ruleset.toCSS(a,b).trim().replace(/\n/g,"\n ")+(b.compress?"}":"\n}\n")):this.name+" "+this.value.toCSS()+";\n"},eval:function(a){return this.features=this.features&&this.features.eval(a),a.frames.unshift(this),this.ruleset=this.ruleset&&this.ruleset.eval(a),a.frames.shift(),this},variable:function(b){return a.Ruleset.prototype.variable.call(this.ruleset,b)},find:function(){return a.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return a.Ruleset.prototype.rulesets.apply(this.ruleset)}}}(c("../tree")),function(a){a.Element=function(b,c,d){this.combinator=b instanceof a.Combinator?b:new a.Combinator(b),typeof c=="string"?this.value=c.trim():c?this.value=c:this.value="",this.index=d},a.Element.prototype.eval=function(b){return new a.Element(this.combinator,this.value.eval?this.value.eval(b):this.value,this.index)},a.Element.prototype.toCSS=function(a){return this.combinator.toCSS(a||{})+(this.value.toCSS?this.value.toCSS(a):this.value)},a.Combinator=function(a){a===" "?this.value=" ":a==="& "?this.value="& ":this.value=a?a.trim():""},a.Combinator.prototype.toCSS=function(a){return{"":""," ":" ","&":"","& ":" ",":":" :","::":"::","+":a.compress?"+":" + ","~":a.compress?"~":" ~ ",">":a.compress?">":" > "}[this.value]}}(c("../tree")),function(a){a.Expression=function(a){this.value=a},a.Expression.prototype={eval:function(b){return this.value.length>1?new a.Expression(this.value.map(function(a){return a.eval(b)})):this.value.length===1?this.value[0].eval(b):this},toCSS:function(a){return this.value.map(function(b){return b.toCSS?b.toCSS(a):""}).join(" ")}}}(c("../tree")),function(a){a.Import=function(b,c,d,e){var f=this;this.index=e,this._path=b,this.features=d&&new a.Value(d),b instanceof a.Quoted?this.path=/\.(le?|c)ss(\?.*)?$/.test(b.value)?b.value:b.value+".less":this.path=b.value.value||b.value,this.css=/css(\?.*)?$/.test(this.path),this.css||c.push(this.path,function(b,c){b&&(b.index=e),f.root=c||new a.Ruleset([],[])})},a.Import.prototype={toCSS:function(a){var b=this.features?" "+this.features.toCSS(a):"";return this.css?"@import "+this._path.toCSS()+b+";\n":""},eval:function(b){var c,d=this.features&&this.features.eval(b);if(this.css)return this;c=new a.Ruleset([],this.root.rules.slice(0));for(var e=0;e<c.rules.length;e++)c.rules[e]instanceof a.Import&&Array.prototype.splice.apply(c.rules,[e,1].concat(c.rules[e].eval(b)));return this.features?new a.Directive("@media",c.rules,this.features.value):c.rules}}}(c("../tree")),function(a){a.JavaScript=function(a,b,c){this.escaped=c,this.expression=a,this.index=b},a.JavaScript.prototype={eval:function(b){var c,d=this,e={},f=this.expression.replace(/@\{([\w-]+)\}/g,function(c,e){return a.jsify((new a.Variable("@"+e,d.index)).eval(b))});try{f=new Function("return ("+f+")")}catch(g){throw{message:"JavaScript evaluation error: `"+
-f+"`",index:this.index}}for(var h in b.frames[0].variables())e[h.slice(1)]={value:b.frames[0].variables()[h].value,toJS:function(){return this.value.eval(b).toCSS()}};try{c=f.call(e)}catch(g){throw{message:"JavaScript evaluation error: '"+g.name+": "+g.message+"'",index:this.index}}return typeof c=="string"?new a.Quoted('"'+c+'"',c,this.escaped,this.index):Array.isArray(c)?new a.Anonymous(c.join(", ")):new a.Anonymous(c)}}}(c("../tree")),function(a){a.Keyword=function(a){this.value=a},a.Keyword.prototype={eval:function(){return this},toCSS:function(){return this.value},compare:function(b){return b instanceof a.Keyword?b.value===this.value?0:1:-1}},a.True=new a.Keyword("true"),a.False=new a.Keyword("false")}(c("../tree")),function(a){a.mixin={},a.mixin.Call=function(b,c,d,e,f){this.selector=new a.Selector(b),this.arguments=c,this.index=d,this.filename=e,this.important=f},a.mixin.Call.prototype={eval:function(a){var b,c,d=[],e=!1;for(var f=0;f<a.frames.length;f++)if((b=a.frames[f].find(this.selector)).length>0){c=this.arguments&&this.arguments.map(function(b){return b.eval(a)});for(var g=0;g<b.length;g++)if(b[g].match(c,a))try{Array.prototype.push.apply(d,b[g].eval(a,this.arguments,this.important).rules),e=!0}catch(h){throw{message:h.message,index:h.index,filename:this.filename,stack:h.stack,call:this.index}}if(e)return d;throw{type:"Runtime",message:"No matching definition was found for `"+this.selector.toCSS().trim()+"("+this.arguments.map(function(a){return a.toCSS()}).join(", ")+")`",index:this.index,filename:this.filename}}throw{type:"Name",message:this.selector.toCSS().trim()+" is undefined",index:this.index,filename:this.filename}}},a.mixin.Definition=function(b,c,d,e){this.name=b,this.selectors=[new a.Selector([new a.Element(null,b)])],this.params=c,this.condition=e,this.arity=c.length,this.rules=d,this._lookups={},this.required=c.reduce(function(a,b){return!b.name||b.name&&!b.value?a+1:a},0),this.parent=a.Ruleset.prototype,this.frames=[]},a.mixin.Definition.prototype={toCSS:function(){return""},variable:function(a){return this.parent.variable.call(this,a)},variables:function(){return this.parent.variables.call(this)},find:function(){return this.parent.find.apply(this,arguments)},rulesets:function(){return this.parent.rulesets.apply(this)},evalParams:function(b,c){var d=new a.Ruleset(null,[]);for(var e=0,f;e<this.params.length;e++)if(this.params[e].name){if(!(f=c&&c[e]||this.params[e].value))throw{type:"Runtime",message:"wrong number of arguments for "+this.name+" ("+c.length+" for "+this.arity+")"};d.rules.unshift(new a.Rule(this.params[e].name,f.eval(b)))}return d},eval:function(b,c,d){var e=this.evalParams(b,c),f,g=[],h;for(var i=0;i<Math.max(this.params.length,c&&c.length);i++)g.push(c[i]||this.params[i].value);return e.rules.unshift(new a.Rule("@arguments",(new a.Expression(g)).eval(b))),h=d?this.rules.map(function(b){return new a.Rule(b.name,b.value,"!important",b.index)}):this.rules.slice(0),(new a.Ruleset(null,h)).eval({frames:[this,e].concat(this.frames,b.frames)})},match:function(a,b){var c=a&&a.length||0,d,e;if(c<this.required)return!1;if(this.required>0&&c>this.params.length)return!1;if(this.condition&&!this.condition.eval({frames:[this.evalParams(b,a)].concat(b.frames)}))return!1;d=Math.min(c,this.arity);for(var f=0;f<d;f++)if(!this.params[f].name&&a[f].eval(b).toCSS()!=this.params[f].value.eval(b).toCSS())return!1;return!0}}}(c("../tree")),function(a){a.Operation=function(a,b){this.op=a.trim(),this.operands=b},a.Operation.prototype.eval=function(b){var c=this.operands[0].eval(b),d=this.operands[1].eval(b),e;if(c instanceof a.Dimension&&d instanceof a.Color){if(this.op!=="*"&&this.op!=="+")throw{name:"OperationError",message:"Can't substract or divide a color from a number"};e=d,d=c,c=e}return c.operate(this.op,d)},a.operate=function(a,b,c){switch(a){case"+":return b+c;case"-":return b-c;case"*":return b*c;case"/":return b/c}}}(c("../tree")),function(a){a.Paren=function(a){this.value=a},a.Paren.prototype={toCSS:function(a){return"("+this.value.toCSS(a)+")"},eval:function(b){return new a.Paren(this.value.eval(b))}}}(c("../tree")),function(a){a.Quoted=function(a,b,c,d){this.escaped=c,this.value=b||"",this.quote=a.charAt(0),this.index=d},a.Quoted.prototype={toCSS:function(){return this.escaped?this.value:this.quote+this.value+this.quote},eval:function(b){var c=this,d=this.value.replace(/`([^`]+)`/g,function(d,e){return(new a.JavaScript(e,c.index,!0)).eval(b).value}).replace(/@\{([\w-]+)\}/g,function(d,e){var f=(new a.Variable("@"+e,c.index)).eval(b);return"value"in f?f.value:f.toCSS()});return new a.Quoted(this.quote+d+this.quote,d,this.escaped,this.index)}}}(c("../tree")),function(a){a.Rule=function(b,c,d,e,f){this.name=b,this.value=c instanceof a.Value?c:new a.Value([c]),this.important=d?" "+d.trim():"",this.index=e,this.inline=f||!1,b.charAt(0)==="@"?this.variable=!0:this.variable=!1},a.Rule.prototype.toCSS=function(a){return this.variable?"":this.name+(a.compress?":":": ")+this.value.toCSS(a)+this.important+(this.inline?"":";")},a.Rule.prototype.eval=function(b){return new a.Rule(this.name,this.value.eval(b),this.important,this.index,this.inline)},a.Shorthand=function(a,b){this.a=a,this.b=b},a.Shorthand.prototype={toCSS:function(a){return this.a.toCSS(a)+"/"+this.b.toCSS(a)},eval:function(){return this}}}(c("../tree")),function(a){a.Ruleset=function(a,b){this.selectors=a,this.rules=b,this._lookups={}},a.Ruleset.prototype={eval:function(b){var c=this.selectors&&this.selectors.map(function(a){return a.eval(b)}),d=new a.Ruleset(c,this.rules.slice(0));d.root=this.root,d.allowImports=this.allowImports,b.frames.unshift(d);if(d.root||d.allowImports)for(var e=0;e<d.rules.length;e++)d.rules[e]instanceof a.Import&&Array.prototype.splice.apply(d.rules,[e,1].concat(d.rules[e].eval(b)));for(var e=0;e<d.rules.length;e++)d.rules[e]instanceof a.mixin.Definition&&(d.rules[e].frames=b.frames.slice(0));for(var e=0;e<d.rules.length;e++)d.rules[e]instanceof a.mixin.Call&&Array.prototype.splice.apply(d.rules,[e,1].concat(d.rules[e].eval(b)));for(var e=0,f;e<d.rules.length;e++)f=d.rules[e],f instanceof a.mixin.Definition||(d.rules[e]=f.eval?f.eval(b):f);return b.frames.shift(),d},match:function(a){return!a||a.length===0},variables:function(){return this._variables?this._variables:this._variables=this.rules.reduce(function(b,c){return c instanceof a.Rule&&c.variable===!0&&(b[c.name]=c),b},{})},variable:function(a){return this.variables()[a]},rulesets:function(){return this._rulesets?this._rulesets:this._rulesets=this.rules.filter(function(b){return b instanceof a.Ruleset||b instanceof a.mixin.Definition})},find:function(b,c){c=c||this;var d=[],e,f,g=b.toCSS();return g in this._lookups?this._lookups[g]:(this.rulesets().forEach(function(e){if(e!==c)for(var g=0;g<e.selectors.length;g++)if(f=b.match(e.selectors[g])){b.elements.length>e.selectors[g].elements.length?Array.prototype.push.apply(d,e.find(new a.Selector(b.elements.slice(1)),c)):d.push(e);break}}),this._lookups[g]=d)},toCSS:function(b,c){var d=[],e=[],f=[],g=[],h,i;this.root||(b.length===0?g=this.selectors.map(function(a){return[a]}):this.joinSelectors(g,b,this.selectors));for(var j=0;j<this.rules.length;j++)i=this.rules[j],i.rules||i instanceof a.Directive?f.push(i.toCSS(g,c)):i instanceof a.Comment?i.silent||(this.root?f.push(i.toCSS(c)):e.push(i.toCSS(c))):i.toCSS&&!i.variable?e.push(i.toCSS(c)):i.value&&!i.variable&&e.push(i.value.toString());return f=f.join(""),this.root?d.push(e.join(c.compress?"":"\n")):e.length>0&&(h=g.map(function(a){return a.map(function(a){return a.toCSS(c)}).join("").trim()}).join(c.compress?",":g.length>3?",\n":", "),d.push(h,(c.compress?"{":" {\n ")+e.join(c.compress?"":"\n ")+(c.compress?"}":"\n}\n"))),d.push(f),d.join("")+(c.compress?"\n":"")},joinSelectors:function(a,b,c){for(var d=0;d<c.length;d++)this.joinSelector(a,b,c[d])},joinSelector:function(b,c,d){var e=[],f=[],g=[],h=[],i=!1,j;for(var k=0;k<d.elements.length;k++)j=d.elements[k],j.combinator.value.charAt(0)==="&"&&(i=!0),i?h.push(j):g.push(j);i||(h=g,g=[]),g.length>0&&e.push(new a.Selector(g)),h.length>0&&f.push(new a.Selector(h));for(var l=0;l<c.length;l++)b.push(e.concat(c[l]).concat(f))}}}(c("../tree")),function(a){a.Selector=function(a){this.elements=a,this.elements[0].combinator.value===""&&(this.elements[0].combinator.value=" ")},a.Selector.prototype.match=function(a){var b=this.elements.length,c=a.elements.length,d=Math.min(b,c);if(b<c)return!1;for(var e=0;e<d;e++)if(this.elements[e].value!==a.elements[e].value)return!1;return!0},a.Selector.prototype.eval=function(b){return new a.Selector(this.elements.map(function(a){return a.eval(b)}))},a.Selector.prototype.toCSS=function(a){return this._css?this._css:this._css=this.elements.map(function(b){return typeof b=="string"?" "+b.trim():b.toCSS(a)}).join("")}}(c("../tree")),function(b){b.URL=function(b,c){b.data?this.attrs=b:(typeof a!="undefined"&&!/^(?:https?:\/\/|file:\/\/|data:|\/)/.test(b.value)&&c.length>0&&(b.value=c[0]+(b.value.charAt(0)==="/"?b.value.slice(1):b.value)),this.value=b,this.paths=c)},b.URL.prototype={toCSS:function(){return"url("+(this.attrs?"data:"+this.attrs.mime+this.attrs.charset+this.attrs.base64+this.attrs.data:this.value.toCSS())+")"},eval:function(a){return this.attrs?this:new b.URL(this.value.eval(a),this.paths)}}}(c("../tree")),function(a){a.Value=function(a){this.value=a,this.is="value"},a.Value.prototype={eval:function(b){return this.value.length===1?this.value[0].eval(b):new a.Value(this.value.map(function(a){return a.eval(b)}))},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(a.compress?",":", ")}}}(c("../tree")),function(a){a.Variable=function(a,b,c){this.name=a,this.index=b,this.file=c},a.Variable.prototype={eval:function(b){var c,d,e=this.name;e.indexOf("@@")==0&&(e="@"+(new a.Variable(e.slice(1))).eval(b).value);if(c=a.find(b.frames,function(a){if(d=a.variable(e))return d.value.eval(b)}))return c;throw{type:"Name",message:"variable "+e+" is undefined",filename:this.file,index:this.index}}}}(c("../tree")),function(a){a.find=function(a,b){for(var c=0,d;c<a.length;c++)if(d=b.call(a,a[c]))return d;return null},a.jsify=function(a){return Array.isArray(a.value)&&a.value.length>1?"["+a.value.map(function(a){return a.toCSS(!1)}).join(", ")+"]":a.toCSS(!1)}}(c("./tree"));var g=location.protocol==="file:"||location.protocol==="chrome:"||location.protocol==="chrome-extension:"||location.protocol==="resource:";d.env=d.env||(location.hostname=="127.0.0.1"||location.hostname=="0.0.0.0"||location.hostname=="localhost"||location.port.length>0||g?"development":"production"),d.async=!1,d.poll=d.poll||(g?1e3:1500),d.watch=function(){return this.watchMode=!0},d.unwatch=function(){return this.watchMode=!1},d.env==="development"?(d.optimization=0,/!watch/.test(location.hash)&&d.watch(),d.watchTimer=setInterval(function(){d.watchMode&&n(function(a,b,c,d,e){b&&r(b.toCSS(),d,e.lastModified)})},d.poll)):d.optimization=3;var h;try{h=typeof a.localStorage=="undefined"?null:a.localStorage}catch(i){h=null}var j=document.getElementsByTagName("link"),k=/^text\/(x-)?less$/;d.sheets=[];for(var l=0;l<j.length;l++)(j[l].rel==="stylesheet/less"||j[l].rel.match(/stylesheet/)&&j[l].type.match(k))&&d.sheets.push(j[l]);d.refresh=function(a){var b,c;b=c=new Date,n(function(a,d,e,f,g){g.local?v("loading "+f.href+" from cache."):(v("parsed "+f.href+" successfully."),r(d.toCSS(),f,g.lastModified)),v("css for "+f.href+" generated in "+(new Date-c)+"ms"),g.remaining===0&&v("css generated in "+(new Date-b)+"ms"),c=new Date},a),m()},d.refreshStyles=m,d.refresh(d.env==="development")})(window); \ No newline at end of file
diff --git a/docs/logger.txt b/docs/logger.txt
new file mode 100644
index 00000000..89e620af
--- /dev/null
+++ b/docs/logger.txt
@@ -0,0 +1,71 @@
+MediaWiki\Logger\LoggerFactory implements a PSR-3 [0] compatible message
+logging system.
+
+Named Psr\Log\LoggerInterface instances can be obtained from the
+MediaWiki\Logger\LoggerFactory::getInstance() static method.
+MediaWiki\Logger\LoggerFactory expects a class implementing the
+MediaWiki\Logger\Spi interface to act as a factory for new
+Psr\Log\LoggerInterface instances.
+
+The "Spi" in MediaWiki\Logger\Spi stands for "service provider interface". An
+SPI is an API intended to be implemented or extended by a third party. This
+software design pattern is intended to enable framework extension and
+replaceable components. It is specifically used in the
+MediaWiki\Logger\LoggerFactory service to allow alternate PSR-3 logging
+implementations to be easily integrated with MediaWiki.
+
+The service provider interface allows the backend logging library to be
+implemented in multiple ways. The $wgMWLoggerDefaultSpi global provides the
+classname of the default MediaWiki\Logger\Spi implementation to be loaded at
+runtime. This can either be the name of a class implementing the
+MediaWiki\Logger\Spi with a zero argument constructor or a callable that will
+return an MediaWiki\Logger\Spi instance. Alternately the
+MediaWiki\Logger\LoggerFactory::registerProvider() static method can be called
+to inject an MediaWiki\Logger\Spi instance into the LoggerFactory and bypass
+the use of the default configuration variable.
+
+The MediaWiki\Logger\LegacySpi class implements a service provider to generate
+MediaWiki\Logger\LegacyLogger instances. The MediaWiki\Logger\LegacyLogger
+class implements the PSR-3 logger interface and provides output and
+configuration equivalent to the historic logging output of wfDebug,
+wfDebugLog, wfLogDBError and wfErrorLog. The MediaWiki\Logger\LegacySpi class
+is the default service provider configured in DefaultSettings.php. It's usage
+should be transparent for users who are not ready or do not wish to switch to
+a alternate logging platform.
+
+The MediaWiki\Logger\MonologSpi class implements a service provider to
+generate Psr\Log\LoggerInterface instances that use the Monolog [1] logging
+library. See the PHP docs (or source) for MediaWiki\Logger\MonologSpi for
+details on the configuration of this provider. The default configuration
+installs a null handler that will silently discard all logging events. The
+documentation provided by the class describes a more feature rich logging
+configuration.
+
+== Classes ==
+; MediaWiki\Logger\LoggerFactory
+: Factory for Psr\Log\LoggerInterface loggers
+; MediaWiki\Logger\Spi
+: Service provider interface for MediaWiki\Logger\LoggerFactory
+; MediaWiki\Logger\NullSpi
+: MediaWiki\Logger\Spi for creating instances that discard all log events
+; MediaWiki\Logger\LegacySpi
+: Service provider for creating MediaWiki\Logger\LegacyLogger instances
+; MediaWiki\Logger\LegacyLogger
+: PSR-3 logger that mimics the historical output and configuration of wfDebug,
+ wfErrorLog and other global logging functions.
+; MediaWiki\Logger\MonologSpi
+: MediaWiki\Logger\Spi for creating instances backed by the monolog logging library
+; MediaWiki\Logger\Monolog\LegacyHandler
+: Monolog handler that replicates the udp2log and file logging
+ functionality of wfErrorLog()
+; MediaWiki\Logger\Monolog\WikiProcessor
+: Monolog log processer that adds host: wfHostname() and wiki: wfWikiID()
+ to all records
+
+== Globals ==
+; $wgMWLoggerDefaultSpi
+: Specification for creating the default service provider interface to use
+ with MediaWiki\Logger\LoggerFactory
+
+[0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
+[1]: https://github.com/Seldaek/monolog
diff --git a/docs/memcached.txt b/docs/memcached.txt
index 16c57602..d18b199e 100644
--- a/docs/memcached.txt
+++ b/docs/memcached.txt
@@ -1,5 +1,5 @@
-MediaWiki has optional support for memcached, a "high-performance,
-distributed memory object caching system". For general information
+MediaWiki has optional support for memcached, a "high-performance,
+distributed memory object caching system". For general information
on it, see: http://www.danga.com/memcached/
Memcached is likely more trouble than a small site will need, but
@@ -10,7 +10,7 @@ in memory.
== Installation ==
Packages are available for Fedora, Debian, Ubuntu and probably other
-Linux distributions. If you there's no package available for your
+Linux distributions. If there's no package available for your
distribution, you can compile it from source.
== Compilation ==
@@ -25,7 +25,7 @@ distribution, you can compile it from source.
* memcached: http://www.danga.com/memcached/download.bml
(as of this writing, 1.1.9 is current)
-
+
Memcached and libevent are under BSD-style licenses.
The server should run on Linux and other Unix-like systems... you
@@ -40,9 +40,9 @@ memcached servers are not publicly accessible. Otherwise, anyone on
the internet can put data into and read data from your cache.
An attacker familiar with MediaWiki internals could use this to steal
-passwords and email addresses, or to make themselves a sysop and
-install malicious javascript on the site. There may be other types
-of vulnerability, no audit has been done -- so be safe and keep it
+passwords and email addresses, or to make themselves a sysop and
+install malicious javascript on the site. There may be other types
+of vulnerability, no audit has been done -- so be safe and keep it
behind a firewall.
********************* W A R N I N G ! ! ! ! ! ***********************
@@ -247,5 +247,5 @@ User:
stores: instance of class User
set in: User::saveToCache()
cleared by: User::saveSettings(), User::clearSharedCache()
-
+
... more to come ...
diff --git a/docs/scripts.txt b/docs/scripts.txt
index c6fa674c..178bb157 100644
--- a/docs/scripts.txt
+++ b/docs/scripts.txt
@@ -34,7 +34,7 @@ Primary scripts:
To save the profiling information in the database (required to use this
script), you have to modify StartProfiler.php to use the Profiler class and
not the stub profiler which is enabled by default.
- You will also need to set $wgProfileToDatabase to true in LocalSettings.php
+ You will also need to set $wgProfiler['output'] to 'db' in LocalSettings.php
to force the profiler to save the informations in the database and apply the
maintenance/archives/patch-profiling.sql patch to the database.
diff --git a/docs/sitelist-1.0.xsd b/docs/sitelist-1.0.xsd
new file mode 100644
index 00000000..126cd039
--- /dev/null
+++ b/docs/sitelist-1.0.xsd
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ This is an XML Schema description of the format
+ used by MediaWiki's exportSites.php and importSites.php
+ scripts.
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:mwsl="http://www.mediawiki.org/xml/sitelist-1.0/"
+ targetNamespace="http://www.mediawiki.org/xml/sitelist-1.0/"
+ elementFormDefault="qualified">
+
+ <annotation>
+ <documentation xml:lang="en">
+ MediaWiki's export format for site definitions.
+ </documentation>
+ </annotation>
+
+ <!-- Our root element -->
+ <element name="sites" type="mwsl:MediaWikiSiteListType">
+ <unique name="GlobalIDConstraint">
+ <selector xpath="mwsl:Site" />
+ <field xpath="mwsl:GlobalID" />
+ </unique>
+ </element>
+
+ <simpleType name="EmptyTagType">
+ <restriction base="string">
+ <length value="0"/>
+ </restriction>
+ </simpleType>
+
+ <complexType name="TypedIDType">
+ <simpleContent>
+ <extension base="NCName">
+ <attribute name="type" use="required" type="NCName" />
+ </extension>
+ </simpleContent>
+ </complexType>
+
+ <complexType name="TypedURIType">
+ <simpleContent>
+ <extension base="anyURI">
+ <attribute name="type" use="required" type="NCName" />
+ </extension>
+ </simpleContent>
+ </complexType>
+
+ <complexType name="MediaWikiSiteListType">
+ <sequence>
+ <element name="site" type="mwsl:SiteType"
+ minOccurs="0" maxOccurs="unbounded" />
+ </sequence>
+ <attribute name="version" type="string" use="optional" />
+ </complexType>
+
+ <complexType name="SiteType">
+ <choice maxOccurs="unbounded">
+ <element name="globalid" type="ID" minOccurs="1" maxOccurs="1" />
+ <element name="localid" type="mwsl:TypedIDType" minOccurs="0" />
+ <element name="group" type="NCName" minOccurs="0" maxOccurs="1" />
+ <element name="source" type="NCName" minOccurs="0" maxOccurs="1" />
+ <element name="forward" type="mwsl:EmptyTagType" minOccurs="0" maxOccurs="1" />
+ <element name="path" type="mwsl:TypedURIType" minOccurs="0" />
+ </choice>
+ <attribute name="type" use="optional" type="NCName" />
+ </complexType>
+
+</schema>
diff --git a/docs/sitelist.txt b/docs/sitelist.txt
new file mode 100644
index 00000000..48c7ce52
--- /dev/null
+++ b/docs/sitelist.txt
@@ -0,0 +1,47 @@
+This document describes the XML format used to represent information about external sites known
+to a MediaWiki installation. This information about external sites is used to allow "inter-wiki"
+links, cross-language navigation, as well as close integration via direct access to the other
+site's web API or even directly to their database.
+
+Lists of external sites can be imported and exported using the importSites.php and exportSites.php
+scripts. In the database, external sites are described by the sites and site_ids tables.
+
+The formal specification of the format used by importSites.php and exportSites.php can be found in
+the sitelist-1.0.xsd file. Below is an example and a brief description of what the individual XML
+elements and attributes mean:
+
+
+ <sites version="1.0">
+ <site>
+ <globalid>acme.com</globalid>
+ <localid type="interwiki">acme</localid>
+ <group>Vendor</group>
+ <path type="link">http://acme.com/</path>
+ <source>meta.wikimedia.org</source>
+ </site>
+ <site type="mediawiki">
+ <globalid>de.wikidik.example</globalid>
+ <localid type="equivalent">de</localid>
+ <group>Dictionary</group>
+ <forward/>
+ <path type="page_path">http://acme.com/</path>
+ </site>
+ </sites>
+
+
+The XML elements are used as follows:
+
+* sites: The root element, containing a set of site tags. May have a version attribute with the value 1.0.
+* site: A site entry, representing an external website. May have a type attribute with one of the following values:
+** ''unknown'': (default) any website
+** ''mediawiki'': A MediaWiki site
+* globalid: A unique identifier for the site. For a given site, the same unique global ID must be used across all wikis in a wiki farm (aka wiki family).
+* localid: An identifier for the site, for use on the local wiki. Multiple local IDs may be assigned to a given site. The same local ID can be used to refer to different sites by different wikis on the same farm/family. The localid element may have a type attribute with one of the following values:
+** interwiki: Used as an "interwiki" link prefix, for creating cross-wiki links.
+** equivalent: Used as a "language" link prefix, for cross-linking equivalent content in different languages.
+* group: The site group (e.g. wiki family) the site belongs to.
+* path: A URL template for accessing resources on the site. Several paths may be defined for a given site, for accessing different kinds of resources, identified by the type attribute, using one of the following values:
+** link: Generic URL template, often the document root.
+** page_path: (for mediawiki sites) URL template for wiki pages (corresponds to the target wiki's $wgArticlePath setting)
+** file_path: (for mediawiki sites) URL pattern for application entry points and resources (corresponds to the target wiki's $wgScriptPath setting).
+* forward: Whether using a prefix defined by a localid tag in the URL will cause the request to be redirected to the corresponding page on the target wiki (currently unused). E.g. whether http://wiki.acme.com/wiki/foo:Buzz should be forwarded to http://wiki.foo.com/read/Buzz. (CAVEAT: not yet implement, can be specified but has no effect) \ No newline at end of file
diff --git a/docs/sitescache.txt b/docs/sitescache.txt
new file mode 100644
index 00000000..13bf371d
--- /dev/null
+++ b/docs/sitescache.txt
@@ -0,0 +1,42 @@
+MediaWiki's SiteStore can be cached and stored in a flat file,
+in a json format. If the SiteStore is frequently accessed, the
+file cache may provide a performance benefit over a database
+store, even with memcached in front of it.
+
+Configuration:
+
+File-based caching can be enabled by setting $wgSitesCacheFile
+to the file path of the cache file.
+
+The file can then be generated with the rebuildSitesCache.php
+maintenance script.
+
+Format:
+
+In the sites cache file, sites are listed in a key-value
+map, with the key being the site's global id (e.g. "enwiki")
+and a key-value map as the value. The site list is wrapped
+with in a "sites" key.
+
+Example:
+
+"sites": {
+ "aawiktionary": {
+ "globalid": "aawiktionary",
+ "type": "mediawiki",
+ "group": "wiktionary",
+ "source": "local",
+ "language": "aa",
+ "localids": [],
+ "config": [],
+ "data": {
+ "paths": {
+ "file_path": "http:\/\/aa.wiktionary.org\/w\/$1",
+ "page_path": "http:\/\/aa.wiktionary.org\/wiki\/$1"
+ }
+ },
+ "forward": false,
+ "internalid": 2666,
+ "identifiers": []
+ }
+}
diff --git a/docs/skin.txt b/docs/skin.txt
index 58f77cf8..a3c8c334 100644
--- a/docs/skin.txt
+++ b/docs/skin.txt
@@ -7,7 +7,7 @@ MediaWiki includes four core skins:
Monobook.
* Monobook: Named after the black-and-white photo of a book in the page
- background. Introduced in the 2004 release of 1.3, it had been been the
+ background. Introduced in the 2004 release of 1.3, it had been the
default skin since then, before being replaced by Vector.
* Modern: An attractive blue/grey theme with sidebar and top bar. Derived from
@@ -53,40 +53,30 @@ server-side source files. This is done by editing some pages on the wiki:
These can also be customised on a per-user basis, by editing
[[User:<name>/vector.css]], [[User:<name>/vector.js]], etc.
-This feature has led to a wide variety of "user styles" becoming available:
-https://www.mediawiki.org/wiki/Manual:Gallery_of_user_styles
+== Custom skins ==
-If you want a different look for your wiki, that gallery is a good place to start.
+Several custom skins are available as of 2014.
-== Drop-in custom skins ==
+https://www.mediawiki.org/wiki/Category:All_skins
-If you put a file in MediaWiki's skins directory, ending in .php, the name of
-the file will automatically be added as a skin name, and the file will be
-expected to contain a class called Skin<name> with the skin class. You can then
-make that skin the default by adding to LocalSettings.php:
+Installing a skin requires adding its files in a subdirectory under skins/ and
+adding an appropriate require_once line to LocalSettings.php, similarly to how
+extensions are installed.
-$wgDefaultSkin = '<name>';
+You can then make that skin the default by adding:
+ $wgDefaultSkin = '<name>';
-You can also disable dropped-in or core skins using:
+Or disable it entirely by removing the require_once line. (User settings will
+not be lost if it's reenabled later.)
-$wgSkipSkins[] = '<name>';
+See https://www.mediawiki.org/wiki/Manual:Skinning for more information on
+writing new skins.
-This technique is used by the more ambitious MediaWiki site operators, to
-create complex custom skins for their wikis. It should be preferred over
-editing the core Monobook skin directly.
-
-See https://www.mediawiki.org/wiki/Manual:Skinning for more information.
-
-== Extension skins ==
-
-It is now possible (since MediaWiki 1.12) to write a skin as a standard
-MediaWiki extension, enabled via LocalSettings.php. This is done by adding
-it to $wgValidSkinNames, for example:
-
-$wgValidSkinNames['mycoolskin'] = 'MyCoolSkin';
-
-and then registering a class in $wgAutoloadClasses called SkinMycoolSkin, which
-derives from Skin. This technique is apparently not yet used (as of 2008)
-outside the DumpHTML extension.
+Until MediaWiki 1.25 it used to be possible to just put a <name>.php file in
+MediaWiki's skins/ directory, which would be loaded and expected to contain the
+Skin<name> class. This way has always been discouraged because of its limitations
+(inability to add localisation messages, ResourceLoader modules, etc.) and
+awkwardness in managing such skins. For information on migrating skins using
+this old method, see <https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery>.
diff --git a/docs/uidesign/mediawiki.action.history.diff.html b/docs/uidesign/mediawiki.action.history.diff.html
index 5edcfb86..615558f2 100644
--- a/docs/uidesign/mediawiki.action.history.diff.html
+++ b/docs/uidesign/mediawiki.action.history.diff.html
@@ -1,57 +1,91 @@
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
- <link rel="stylesheet" href="../../resources/mediawiki.action/mediawiki.action.history.diff.css">
+ <meta charset="utf-8">
+ <link rel="stylesheet" href="../../resources/src/mediawiki.action/mediawiki.action.history.diff.css">
+ <link rel="stylesheet" media="print" href="../../resources/src/mediawiki.action/mediawiki.action.history.diff.print.css">
</head>
-<body style="background-color: #C0C0C0;">
-<p>
-This show various styles for our diff action, the background being hardcoded to gray (<code>#C0C0C0</code>) The reference style sheet is:</p>
-<p>
-<code><a href="../../resources/mediawiki.action/mediawiki.action.history.diff.css">resources/mediawiki.action/mediawiki.action.history.diff.css</a></code>.
-</p>
-<p>
-This file might help us fix our diff colors which have been a recurring issues among the community for a loooong time.</p>
-
-<p>
-First, show the diff mostly like it would be chown on a wiki</p>
-<table class="diff">
+<body>
+
+<p>This show various styles for our diff action. Style sheet: <code><a href="../../resources/src/mediawiki.action/mediawiki.action.history.diff.css">resources/src/mediawiki.action/mediawiki.action.history.diff.css</a></code>.</p>
+<p>This file might help us fix our diff colors which have been a recurring issues among the community for a loooong time.</p>
+<p>Try it out in print mode, too. Style sheet: <code><a href="../../resources/src/mediawiki.action/mediawiki.action.history.diff.print.css">resources/src/mediawiki.action/mediawiki.action.history.diff.print.css</a></code>.</p>
+
+<p>Practical example copied from MediaWiki's HTML output:</p>
+
+<table class="diff diff-contentalign-left">
+ <colgroup><col class="diff-marker">
+ <col class="diff-content">
+ <col class="diff-marker">
+ <col class="diff-content">
+ </colgroup>
+<tbody>
<tr>
- <td class="diff-marker">-</td>
- <td class="diff-deletedline"><div>
- Some content <span class="diffchange diffchange-inline">deleted / replaced</span>
- </div></td>
+ <td class="diff-marker">−</td>
+ <td class="diff-deletedline"><div>Lorem ipsum dolor sit amet<del class="diffchange diffchange-inline">, consectetur adipisicing elit</del>, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div></td>
<td class="diff-marker">+</td>
- <td class="diff-addedline"><div>
- Some content <span class="diffchange diffchange-inline">added / replacement</span>
- </div></td>
+ <td class="diff-addedline"><div>Lorem ipsum dolor sit amet, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div></td>
</tr>
-</table>
-
+<tr>
+ <td class="diff-marker">−</td>
+ <td class="diff-deletedline"></td>
+ <td colspan="2" class="diff-empty">&nbsp;</td>
+</tr>
+<tr>
+ <td class="diff-marker">−</td>
+ <td class="diff-deletedline"><div>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div></td>
+ <td colspan="2" class="diff-empty">&nbsp;</td>
+</tr>
+<tr>
+ <td class="diff-marker">&nbsp;</td>
+ <td class="diff-context"></td>
+ <td class="diff-marker">&nbsp;</td>
+ <td class="diff-context"></td>
+</tr>
+<tr>
+ <td class="diff-marker">&nbsp;</td>
+ <td class="diff-context"><div>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</div></td>
+ <td class="diff-marker">&nbsp;</td>
+ <td class="diff-context"><div>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</div></td>
+</tr>
+<tr>
+ <td class="diff-marker">&nbsp;</td>
+ <td class="diff-context"></td>
+ <td class="diff-marker">&nbsp;</td>
+ <td class="diff-context"></td>
+</tr>
+<tr>
+ <td class="diff-marker">−</td>
+ <td class="diff-deletedline"><div>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim<del class="diffchange diffchange-inline"> id est laborum</del>.</div></td>
+ <td class="diff-marker">+</td>
+ <td class="diff-addedline"><div>Excepteur sint occaecat cupidatat non proident, sunt<ins class="diffchange diffchange-inline"> reprehenderit in voluptate</ins> in culpa qui officia deserunt mollit anim.</div></td>
+</tr>
+<tr>
+ <td colspan="2" class="diff-empty">&nbsp;</td>
+ <td class="diff-marker">+</td>
+ <td class="diff-addedline"></td>
+</tr>
+<tr>
+ <td colspan="2" class="diff-empty">&nbsp;</td>
+ <td class="diff-marker">+</td>
+ <td class="diff-addedline"><div>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div></td>
+</tr>
+</tbody></table>
-<p>
-Below are some basic lines being applied one or two classes. Mainly for debugging purposes</p>
+<p>Below are some basic lines being applied one or two classes. Mainly for debugging purposes.</p>
<table class="diff">
-
<tr><th>Diff</th></tr>
<tr><td class="diff-addedline"><code>diff-addedline</code>: added line</td></tr>
<tr><td class="diff-deletedline"><code>diff-deletedline</code>: deleted line</td></tr>
<tr><td class="diff-context"><code>diff-context</code>: context</td></tr>
-
- <tr><th>Same as above with a <code>&lt;span&gt;</code> child element having the <code>diffchange</code> class</th></tr>
+ <tr><th>Same as above with a <code>&lt;ins&gt;</code> or <code>&lt;del&gt;</code> child element having the <code>diffchange</code> class:</th></tr>
<tr><td class="diffchange">Diffchange</td></tr>
- <tr><td class="diff-addedline">
- <span class="diffchange">Added line + diffchange</span>
- </td></tr>
- <tr><td class="diff-deletedline">
- <span class="diffchange">Deleted line + diffchange</span>
- </td></tr>
- <tr><td class="diff-context">
- <span class="diffchange">Context + diffchange</span>
- </td></tr>
+ <tr><td class="diff-addedline"><ins class="diffchange">Added line + diffchange</ins></td></tr>
+ <tr><td class="diff-deletedline"><del class="diffchange">Deleted line + diffchange</del></td></tr>
</table>
</body>
diff --git a/extensions/Cite/Cite.i18n.php b/extensions/Cite/Cite.i18n.php
deleted file mode 100644
index 79601ad1..00000000
--- a/extensions/Cite/Cite.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim857dcab70cc9660a' ) ) {
- function wfJsonI18nShim857dcab70cc9660a( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/core/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim857dcab70cc9660a';
-}
diff --git a/extensions/Cite/Cite.php b/extensions/Cite/Cite.php
index bb8ece86..bbf26e46 100644
--- a/extensions/Cite/Cite.php
+++ b/extensions/Cite/Cite.php
@@ -1,89 +1,14 @@
<?php
-if ( ! defined( 'MEDIAWIKI' ) )
- die();
-/**#@+
- * A parser extension that adds two tags, <ref> and <references> for adding
- * citations to pages
- *
- * @file
- * @ingroup Extensions
- *
- * @link http://www.mediawiki.org/wiki/Extension:Cite/Cite.php Documentation
- *
- * @bug 4579
- *
- * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
- */
-$wgHooks['ParserFirstCallInit'][] = 'wfCite';
-
-$wgExtensionCredits['parserhook'][] = array(
- 'path' => __FILE__,
- 'name' => 'Cite',
- 'author' => array(
- 'Ævar Arnfjörð Bjarmason',
- 'Andrew Garrett',
- 'Brion Vibber',
- 'Marius Hoch',
- 'Steve Sanbeg'
- ),
- 'descriptionmsg' => 'cite-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Cite/Cite.php',
- 'license-name' => 'GPLv2',
-);
-
-$wgParserTestFiles[] = __DIR__ . "/citeParserTests.txt";
-$wgMessagesDirs['Cite'] = __DIR__ . '/i18n/core';
-$wgExtensionMessagesFiles['Cite'] = __DIR__ . "/Cite.i18n.php";
-$wgAutoloadClasses['Cite'] = __DIR__ . "/Cite_body.php";
-$wgSpecialPageGroups['Cite'] = 'pagetools';
-
-define( 'CITE_DEFAULT_GROUP', '' );
-/**
- * The emergency shut-off switch. Override in local settings to disable
- * groups; or remove all references from this file to enable unconditionally
- */
-$wgAllowCiteGroups = true;
-
-/**
- * An emergency optimisation measure for caching cite <references /> output.
- */
-$wgCiteCacheReferences = false;
-
-/**
- * Performs the hook registration.
- * Note that several extensions (and even core!) try to detect if Cite is
- * installed by looking for wfCite().
- *
- * @param $parser Parser
- *
- * @return bool
- */
-function wfCite( $parser ) {
- return Cite::setHooks( $parser );
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'Cite' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Cite'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Cite extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the Cite extension requires MediaWiki 1.25+' );
}
-
-// Resources
-$citeResourceTemplate = array(
- 'localBasePath' => __DIR__ . '/modules',
- 'remoteExtPath' => 'Cite/modules'
-);
-
-$wgResourceModules['ext.cite'] = $citeResourceTemplate + array(
- 'scripts' => 'ext.cite.js',
- 'styles' => 'ext.cite.css',
- 'messages' => array(
- 'cite_references_link_accessibility_label',
- 'cite_references_link_many_accessibility_label',
- ),
-);
-
-/* Add RTL fix for the cite <sup> elements */
-$wgResourceModules['ext.rtlcite'] = $citeResourceTemplate + array(
- 'styles' => 'ext.rtlcite.css',
- 'position' => 'top',
-);
-
-/**#@-*/
diff --git a/extensions/Cite/Cite_body.php b/extensions/Cite/Cite_body.php
index 496e32d8..6072cdfc 100644
--- a/extensions/Cite/Cite_body.php
+++ b/extensions/Cite/Cite_body.php
@@ -17,7 +17,17 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
*/
+/**
+ * WARNING: MediaWiki core hardcodes this class name to check if the
+ * Cite extension is installed. See T89151.
+ */
class Cite {
+
+ /**
+ * @todo document
+ */
+ const DEFAULT_GROUP = '';
+
/**#@+
* @access private
*/
@@ -158,19 +168,24 @@ class Cite {
function ref( $str, $argv, $parser, $frame ) {
if ( $this->mInCite ) {
return htmlspecialchars( "<ref>$str</ref>" );
- } else {
- $this->mCallCnt++;
- $this->mInCite = true;
- $ret = $this->guardedRef( $str, $argv, $parser );
- $this->mInCite = false;
- $parserOutput = $parser->getOutput();
- $parserOutput->addModules( 'ext.cite' );
- $parserOutput->addModuleStyles( 'ext.rtlcite' );
- if ( is_callable( array( $frame, 'setVolatile' ) ) ) {
- $frame->setVolatile();
- }
- return $ret;
}
+
+ $this->mCallCnt++;
+ $this->mInCite = true;
+
+ $ret = $this->guardedRef( $str, $argv, $parser );
+
+ $this->mInCite = false;
+
+ $parserOutput = $parser->getOutput();
+ $parserOutput->addModules( 'ext.cite' );
+ $parserOutput->addModuleStyles( 'ext.rtlcite' );
+
+ if ( is_callable( array( $frame, 'setVolatile' ) ) ) {
+ $frame->setVolatile();
+ }
+
+ return $ret;
}
/**
@@ -180,7 +195,7 @@ class Cite {
* @param $default_group string
* @return string
*/
- function guardedRef( $str, $argv, $parser, $default_group = CITE_DEFAULT_GROUP ) {
+ function guardedRef( $str, $argv, $parser, $default_group = self::DEFAULT_GROUP ) {
$this->mParser = $parser;
# The key here is the "name" attribute.
@@ -296,7 +311,7 @@ class Cite {
# Not clear how we could get here, but something is probably
# wrong with the types. Let's fail fast.
- throw new MWException( 'Invalid $str and/or $key: ' . serialize( array( $str, $key ) ) );
+ throw new Exception( 'Invalid $str and/or $key: ' . serialize( array( $str, $key ) ) );
}
/**
@@ -386,18 +401,19 @@ class Cite {
$this->mRefs[$group][$follow]['text'] = $this->mRefs[$group][$follow]['text'] . ' ' . $str;
} else {
// insert part of note at the beginning of the group
- for ( $k = 0 ; $k < count( $this->mRefs[$group] ) ; $k++ ) {
- if ( $this->mRefs[$group][$k]['follow'] == null ) {
+ $groupsCount = count( $this->mRefs[$group] );
+ for ( $k = 0; $k < $groupsCount; $k++ ) {
+ if ( !isset( $this->mRefs[$group][$k]['follow'] ) ) {
break;
}
}
array_splice( $this->mRefs[$group], $k, 0,
- array( array( 'count' => - 1,
- 'text' => $str,
- 'key' => ++$this->mOutCnt ,
- 'follow' => $follow ) ) );
+ array( array( 'count' => - 1,
+ 'text' => $str,
+ 'key' => ++$this->mOutCnt ,
+ 'follow' => $follow ) ) );
array_splice( $this->mRefCallStack, $k, 0,
- array( array( 'new', $call, $str, $key, $group, $this->mOutCnt ) ) );
+ array( array( 'new', $call, $str, $key, $group, $this->mOutCnt ) ) );
}
// return an empty string : this is not a reference
return '';
@@ -450,7 +466,7 @@ class Cite {
);
}
} else {
- throw new MWException( 'Invalid stack key: ' . serialize( $key ) );
+ throw new Exception( 'Invalid stack key: ' . serialize( $key ) );
}
}
@@ -556,7 +572,7 @@ class Cite {
* @param $group string
* @return string
*/
- function guardedReferences( $str, $argv, $parser, $group = CITE_DEFAULT_GROUP ) {
+ function guardedReferences( $str, $argv, $parser, $group = self::DEFAULT_GROUP ) {
global $wgAllowCiteGroups;
$this->mParser = $parser;
@@ -635,7 +651,6 @@ class Cite {
return '';
}
- wfProfileIn( __METHOD__ );
wfProfileIn( __METHOD__ . '-entries' );
$ent = array();
foreach ( $this->mRefs[$group] as $k => $v ) {
@@ -646,7 +661,8 @@ class Cite {
$suffix = wfMessage( 'cite_references_suffix' )->inContentLanguage()->plain();
$content = implode( "\n", $ent );
- // Prepare the parser input. We add new lines between the pieces to avoid a confused tidy (bug 13073)
+ // Prepare the parser input.
+ // We add new lines between the pieces to avoid a confused tidy (bug 13073).
$parserInput = $prefix . "\n" . $content . "\n" . $suffix;
// Let's try to cache it.
@@ -679,8 +695,6 @@ class Cite {
$ret = $this->mParser->unserializeHalfParsedText( $data );
}
- wfProfileOut( __METHOD__ );
-
// done, clean up so we can reuse the group
unset( $this->mRefs[$group] );
unset( $this->mGroupCnt[$group] );
@@ -713,7 +727,7 @@ class Cite {
$this->referencesKey( $val['follow'] ),
$text
)->inContentLanguage()->plain();
- } elseif ( $val['text'] == '' ) {
+ } elseif ( !isset( $val['text'] ) ) {
return wfMessage(
'cite_references_link_one',
$this->referencesKey( $key ),
@@ -772,7 +786,7 @@ class Cite {
* @return String
*/
function referenceText( $key, $text ) {
- if ( $text == '' ) {
+ if ( !isset( $text ) || $text === '' ) {
return $this->error( 'cite_error_references_no_text', $key, 'noparse' );
}
return '<span class="reference-text">' . rtrim( $text, "\n" ) . "</span>\n";
@@ -921,7 +935,7 @@ class Cite {
$this->refKey( $key, $count ),
$this->referencesKey( $key . $subkey ),
$this->getLinkLabel( $label, $group,
- ( ( $group == CITE_DEFAULT_GROUP ) ? '' : "$group " ) . $wgContLang->formatNum( $label ) )
+ ( ( $group == self::DEFAULT_GROUP ) ? '' : "$group " ) . $wgContLang->formatNum( $label ) )
)->inContentLanguage()->plain()
);
}
@@ -959,11 +973,9 @@ class Cite {
* arbitrary number of tokens separated by [\t\n ]
*/
function genBacklinkLabels() {
- wfProfileIn( __METHOD__ );
$text = wfMessage( 'cite_references_link_many_format_backlink_labels' )
->inContentLanguage()->plain();
$this->mBacklinkLabels = preg_split( '#[\n\t ]#', $text );
- wfProfileOut( __METHOD__ );
}
/**
@@ -975,14 +987,12 @@ class Cite {
* @param $message
*/
function genLinkLabels( $group, $message ) {
- wfProfileIn( __METHOD__ );
$text = false;
$msg = wfMessage( $message )->inContentLanguage();
if ( $msg->exists() ) {
$text = $msg->plain();
}
- $this->mLinkLabels[$group] = ( $text == '' ) ? false : preg_split( '#[\n\t ]#', $text );
- wfProfileOut( __METHOD__ );
+ $this->mLinkLabels[$group] = ( !$text ) ? false : preg_split( '#[\n\t ]#', $text );
}
/**
@@ -1027,8 +1037,8 @@ class Cite {
}
$parser->extCite = clone $this;
- $parser->setHook( 'ref' , array( $parser->extCite, 'ref' ) );
- $parser->setHook( 'references' , array( $parser->extCite, 'references' ) );
+ $parser->setHook( 'ref', array( $parser->extCite, 'ref' ) );
+ $parser->setHook( 'references', array( $parser->extCite, 'references' ) );
// Clear the state, making sure it will actually work.
$parser->extCite->mInCite = false;
@@ -1067,18 +1077,20 @@ class Cite {
if ( count( $refs ) == 0 ) {
continue;
}
- if ( $group == CITE_DEFAULT_GROUP ) {
+ if ( $group == self::DEFAULT_GROUP ) {
$text .= $this->referencesFormat( $group, '', '' );
} else {
- $text .= "\n<br />" . $this->error( 'cite_error_group_refs_without_references', htmlspecialchars( $group ) );
+ $text .= "\n<br />" .
+ $this->error( 'cite_error_group_refs_without_references', htmlspecialchars( $group ) );
}
}
return true;
}
/**
- * Hook for the InlineEditor extension. If any ref or reference reference tag is in the text, the entire
- * page should be reparsed, so we return false in that case.
+ * Hook for the InlineEditor extension.
+ * If any ref or reference reference tag is in the text,
+ * the entire page should be reparsed, so we return false in that case.
*
* @param $output
*
@@ -1110,8 +1122,8 @@ class Cite {
$wgHooks['InlineEditorPartialAfterParse'][] = array( $parser->extCite, 'checkAnyCalls' );
Cite::$hooksInstalled = true;
}
- $parser->setHook( 'ref' , array( $parser->extCite, 'ref' ) );
- $parser->setHook( 'references' , array( $parser->extCite, 'references' ) );
+ $parser->setHook( 'ref', array( $parser->extCite, 'ref' ) );
+ $parser->setHook( 'references', array( $parser->extCite, 'references' ) );
return true;
}
@@ -1128,12 +1140,16 @@ class Cite {
# We rely on the fact that PHP is okay with passing unused argu-
# ments to functions. If $1 is not used in the message, wfMessage will
# just ignore the extra parameter.
- $ret = '<strong class="error mw-ext-cite-error">' .
- wfMessage( 'cite_error', wfMessage( $key, $param )->inContentLanguage()->plain() )->inContentLanguage()->plain() .
- '</strong>';
+ $msg = wfMessage( 'cite_error', wfMessage( $key, $param )->inContentLanguage()->plain() )
+ ->inContentLanguage()
+ ->plain();
+
+ $ret = '<strong class="error mw-ext-cite-error">' . $msg . '</strong>';
+
if ( $parse == 'parse' ) {
$ret = $this->mParser->recursiveTagParse( $ret );
}
+
return $ret;
}
diff --git a/extensions/Cite/Gruntfile.js b/extensions/Cite/Gruntfile.js
new file mode 100644
index 00000000..0e5498ee
--- /dev/null
+++ b/extensions/Cite/Gruntfile.js
@@ -0,0 +1,19 @@
+/*!
+ * Grunt file
+ *
+ * @package Cite
+ */
+
+/*jshint node:true */
+module.exports = function ( grunt ) {
+ 'use strict';
+ grunt.loadNpmTasks( 'grunt-banana-checker' );
+ grunt.initConfig( {
+ banana: {
+ all: ['i18n/']
+ }
+ } );
+
+ grunt.registerTask( 'test', [ 'banana' ] );
+ grunt.registerTask( 'default', 'test' );
+};
diff --git a/extensions/Cite/SpecialCite.alias.php b/extensions/Cite/SpecialCite.alias.php
deleted file mode 100644
index 05b7686a..00000000
--- a/extensions/Cite/SpecialCite.alias.php
+++ /dev/null
@@ -1,430 +0,0 @@
-<?php
-/**
- * Aliases for Special:Cite
- *
- * @file
- * @ingroup Extensions
- */
-// @codingStandardsIgnoreFile
-
-$specialPageAliases = array();
-
-/** English (English) */
-$specialPageAliases['en'] = array(
- 'Cite' => array( 'Cite' ),
-);
-
-/** Arabic (العربية) */
-$specialPageAliases['ar'] = array(
- 'Cite' => array( 'استشهاد' ),
-);
-
-/** Egyptian Spoken Arabic (مصرى) */
-$specialPageAliases['arz'] = array(
- 'Cite' => array( 'استشهاد' ),
-);
-
-/** Assamese (অসমীয়া) */
-$specialPageAliases['as'] = array(
- 'Cite' => array( 'উদ্ধৃতি' ),
-);
-
-/** Bikol Central (Bikol Central) */
-$specialPageAliases['bcl'] = array(
- 'Cite' => array( 'Sambitón' ),
-);
-
-/** Bulgarian (български) */
-$specialPageAliases['bg'] = array(
- 'Cite' => array( 'Цитиране' ),
-);
-
-/** Banjar (Bahasa Banjar) */
-$specialPageAliases['bjn'] = array(
- 'Cite' => array( 'Juhut' ),
-);
-
-/** Breton (brezhoneg) */
-$specialPageAliases['br'] = array(
- 'Cite' => array( 'Menegiñ' ),
-);
-
-/** Bosnian (bosanski) */
-$specialPageAliases['bs'] = array(
- 'Cite' => array( 'Citiraj' ),
-);
-
-/** буряад (буряад) */
-$specialPageAliases['bxr'] = array(
- 'Cite' => array( 'Сайт' ),
-);
-
-/** Catalan (català) */
-$specialPageAliases['ca'] = array(
- 'Cite' => array( 'Citau', 'Citeu' ),
-);
-
-/** Min Dong Chinese (Mìng-dĕ̤ng-ngṳ̄) */
-$specialPageAliases['cdo'] = array(
- 'Cite' => array( '註' ),
-);
-
-/** Chechen (нохчийн) */
-$specialPageAliases['ce'] = array(
- 'Cite' => array( 'Дош' ),
-);
-
-/** Czech (čeština) */
-$specialPageAliases['cs'] = array(
- 'Cite' => array( 'Citovat' ),
-);
-
-/** Danish (dansk) */
-$specialPageAliases['da'] = array(
- 'Cite' => array( 'Citer' ),
-);
-
-/** German (Deutsch) */
-$specialPageAliases['de'] = array(
- 'Cite' => array( 'Zitierhilfe', 'Zitieren' ),
-);
-
-/** Zazaki (Zazaki) */
-$specialPageAliases['diq'] = array(
- 'Cite' => array( 'Sita' ),
-);
-
-/** Lower Sorbian (dolnoserbski) */
-$specialPageAliases['dsb'] = array(
- 'Cite' => array( 'Citěrowańska_pomoc' ),
-);
-
-/** Greek (Ελληνικά) */
-$specialPageAliases['el'] = array(
- 'Cite' => array( 'Παραπομπή' ),
-);
-
-/** Esperanto (Esperanto) */
-$specialPageAliases['eo'] = array(
- 'Cite' => array( 'Citi' ),
-);
-
-/** Spanish (español) */
-$specialPageAliases['es'] = array(
- 'Cite' => array( 'Citar' ),
-);
-
-/** Estonian (eesti) */
-$specialPageAliases['et'] = array(
- 'Cite' => array( 'Tsiteerimine' ),
-);
-
-/** Persian (فارسی) */
-$specialPageAliases['fa'] = array(
- 'Cite' => array( 'یادکرد' ),
-);
-
-/** Finnish (suomi) */
-$specialPageAliases['fi'] = array(
- 'Cite' => array( 'Viittaus' ),
-);
-
-/** French (français) */
-$specialPageAliases['fr'] = array(
- 'Cite' => array( 'Citer' ),
-);
-
-/** Franco-Provençal (arpetan) */
-$specialPageAliases['frp'] = array(
- 'Cite' => array( 'Citar' ),
-);
-
-/** Galician (galego) */
-$specialPageAliases['gl'] = array(
- 'Cite' => array( 'Cita', 'Citar' ),
-);
-
-/** Swiss German (Alemannisch) */
-$specialPageAliases['gsw'] = array(
- 'Cite' => array( 'Zitierhilf' ),
-);
-
-/** Hebrew (עברית) */
-$specialPageAliases['he'] = array(
- 'Cite' => array( 'ציטוט' ),
-);
-
-/** Croatian (hrvatski) */
-$specialPageAliases['hr'] = array(
- 'Cite' => array( 'Citiraj' ),
-);
-
-/** Upper Sorbian (hornjoserbsce) */
-$specialPageAliases['hsb'] = array(
- 'Cite' => array( 'Citowanska_pomoc' ),
-);
-
-/** 湘语 (湘语) */
-$specialPageAliases['hsn'] = array(
- 'Cite' => array( '建脚注' ),
-);
-
-/** Haitian (Kreyòl ayisyen) */
-$specialPageAliases['ht'] = array(
- 'Cite' => array( 'Site' ),
-);
-
-/** Hungarian (magyar) */
-$specialPageAliases['hu'] = array(
- 'Cite' => array( 'Hivatkozás', 'Irodalomjegyzék' ),
-);
-
-/** Interlingua (interlingua) */
-$specialPageAliases['ia'] = array(
- 'Cite' => array( 'Citation' ),
-);
-
-/** Indonesian (Bahasa Indonesia) */
-$specialPageAliases['id'] = array(
- 'Cite' => array( 'Kutip' ),
-);
-
-/** Igbo (Igbo) */
-$specialPageAliases['ig'] = array(
- 'Cite' => array( 'Dépùtà' ),
-);
-
-/** Ido (Ido) */
-$specialPageAliases['io'] = array(
- 'Cite' => array( 'Citar' ),
-);
-
-/** Italian (italiano) */
-$specialPageAliases['it'] = array(
- 'Cite' => array( 'Cita' ),
-);
-
-/** Japanese (日本語) */
-$specialPageAliases['ja'] = array(
- 'Cite' => array( '引用' ),
-);
-
-/** Korean (한국어) */
-$specialPageAliases['ko'] = array(
- 'Cite' => array( '인용' ),
-);
-
-/** Colognian (Ripoarisch) */
-$specialPageAliases['ksh'] = array(
- 'Cite' => array( 'Zitteere' ),
-);
-
-/** Cornish (kernowek) */
-$specialPageAliases['kw'] = array(
- 'Cite' => array( 'Devynna' ),
-);
-
-/** Ladino (Ladino) */
-$specialPageAliases['lad'] = array(
- 'Cite' => array( 'MostrarManaderos' ),
-);
-
-/** Luxembourgish (Lëtzebuergesch) */
-$specialPageAliases['lb'] = array(
- 'Cite' => array( 'Zitéierhellëf' ),
-);
-
-/** Literary Chinese (文言) */
-$specialPageAliases['lzh'] = array(
- 'Cite' => array( '引文' ),
-);
-
-/** Macedonian (македонски) */
-$specialPageAliases['mk'] = array(
- 'Cite' => array( 'Навод' ),
-);
-
-/** Malayalam (മലയാളം) */
-$specialPageAliases['ml'] = array(
- 'Cite' => array( 'അവലംബം' ),
-);
-
-/** Marathi (मराठी) */
-$specialPageAliases['mr'] = array(
- 'Cite' => array( 'संदर्भद्या' ),
-);
-
-/** Malay (Bahasa Melayu) */
-$specialPageAliases['ms'] = array(
- 'Cite' => array( 'Petik' ),
-);
-
-/** Maltese (Malti) */
-$specialPageAliases['mt'] = array(
- 'Cite' => array( 'Iċċita' ),
-);
-
-/** Nahuatl (Nāhuatl) */
-$specialPageAliases['nah'] = array(
- 'Cite' => array( 'Tlahtoa', 'Citar' ),
-);
-
-/** Norwegian Bokmål (norsk bokmål) */
-$specialPageAliases['nb'] = array(
- 'Cite' => array( 'Siteringshjelp' ),
-);
-
-/** Low German (Plattdüütsch) */
-$specialPageAliases['nds'] = array(
- 'Cite' => array( 'Ziteerhelp' ),
-);
-
-/** Low Saxon (Netherlands) (Nedersaksies) */
-$specialPageAliases['nds-nl'] = array(
- 'Cite' => array( 'Siteerhulpe' ),
-);
-
-/** Dutch (Nederlands) */
-$specialPageAliases['nl'] = array(
- 'Cite' => array( 'Citeren' ),
-);
-
-/** Norwegian Nynorsk (norsk nynorsk) */
-$specialPageAliases['nn'] = array(
- 'Cite' => array( 'Siter' ),
-);
-
-/** Occitan (occitan) */
-$specialPageAliases['oc'] = array(
- 'Cite' => array( 'Citar' ),
-);
-
-/** Punjabi (ਪੰਜਾਬੀ) */
-$specialPageAliases['pa'] = array(
- 'Cite' => array( 'ਹਵਾਲਾ' ),
-);
-
-/** Polish (polski) */
-$specialPageAliases['pl'] = array(
- 'Cite' => array( 'Cytuj' ),
-);
-
-/** Pashto (پښتو) */
-$specialPageAliases['ps'] = array(
- 'Cite' => array( 'درک' ),
-);
-
-/** Portuguese (português) */
-$specialPageAliases['pt'] = array(
- 'Cite' => array( 'Citar' ),
-);
-
-/** Brazilian Portuguese (português do Brasil) */
-$specialPageAliases['pt-br'] = array(
- 'Cite' => array( 'Citar' ),
-);
-
-/** Romanian (română) */
-$specialPageAliases['ro'] = array(
- 'Cite' => array( 'Citează' ),
-);
-
-/** Russian (русский) */
-$specialPageAliases['ru'] = array(
- 'Cite' => array( 'Цитата' ),
-);
-
-/** Sanskrit (संस्कृतम्) */
-$specialPageAliases['sa'] = array(
- 'Cite' => array( 'उद्धृत' ),
-);
-
-/** Sicilian (sicilianu) */
-$specialPageAliases['scn'] = array(
- 'Cite' => array( 'Cita' ),
-);
-
-/** Slovak (slovenčina) */
-$specialPageAliases['sk'] = array(
- 'Cite' => array( 'Citovať' ),
-);
-
-/** Slovenian (slovenščina) */
-$specialPageAliases['sl'] = array(
- 'Cite' => array( 'Navedi' ),
-);
-
-/** Albanian (shqip) */
-$specialPageAliases['sq'] = array(
- 'Cite' => array( 'Citim' ),
-);
-
-/** Serbian (Cyrillic script) (српски (ћирилица)‎) */
-$specialPageAliases['sr-ec'] = array(
- 'Cite' => array( 'Цитирај' ),
-);
-
-/** Swedish (svenska) */
-$specialPageAliases['sv'] = array(
- 'Cite' => array( 'Citera' ),
-);
-
-/** Swahili (Kiswahili) */
-$specialPageAliases['sw'] = array(
- 'Cite' => array( 'Taja', 'Hakikisha' ),
-);
-
-/** Tetum (tetun) */
-$specialPageAliases['tet'] = array(
- 'Cite' => array( 'Sita' ),
-);
-
-/** Thai (ไทย) */
-$specialPageAliases['th'] = array(
- 'Cite' => array( 'อ้างอิง' ),
-);
-
-/** Tagalog (Tagalog) */
-$specialPageAliases['tl'] = array(
- 'Cite' => array( 'Sipiin' ),
-);
-
-/** Turkish (Türkçe) */
-$specialPageAliases['tr'] = array(
- 'Cite' => array( 'KaynakGöster' ),
-);
-
-/** Urdu (اردو) */
-$specialPageAliases['ur'] = array(
- 'Cite' => array( 'حوالہ' ),
-);
-
-/** vèneto (vèneto) */
-$specialPageAliases['vec'] = array(
- 'Cite' => array( 'Cita' ),
-);
-
-/** Vietnamese (Tiếng Việt) */
-$specialPageAliases['vi'] = array(
- 'Cite' => array( 'Ghi_chú' ),
-);
-
-/** Yiddish (ייִדיש) */
-$specialPageAliases['yi'] = array(
- 'Cite' => array( 'ציטירן' ),
-);
-
-/** Cantonese (粵語) */
-$specialPageAliases['yue'] = array(
- 'Cite' => array( '引用' ),
-);
-
-/** Simplified Chinese (中文(简体)‎) */
-$specialPageAliases['zh-hans'] = array(
- 'Cite' => array( '引用' ),
-);
-
-/** Traditional Chinese (中文(繁體)‎) */
-$specialPageAliases['zh-hant'] = array(
- 'Cite' => array( '引用' ),
-); \ No newline at end of file
diff --git a/extensions/Cite/SpecialCite.i18n.php b/extensions/Cite/SpecialCite.i18n.php
deleted file mode 100644
index 0362cd19..00000000
--- a/extensions/Cite/SpecialCite.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim0d54240ba430f97f' ) ) {
- function wfJsonI18nShim0d54240ba430f97f( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/special/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim0d54240ba430f97f';
-}
diff --git a/extensions/Cite/SpecialCite.php b/extensions/Cite/SpecialCite.php
index 8a2bb1f5..dc530259 100644
--- a/extensions/Cite/SpecialCite.php
+++ b/extensions/Cite/SpecialCite.php
@@ -1,91 +1,7 @@
<?php
-if ( !defined( 'MEDIAWIKI' ) ) die();
-/**
- * A special page extension that adds a special page that generates citations
- * for pages.
- *
- * @file
- * @ingroup Extensions
- *
- * @link http://www.mediawiki.org/wiki/Extension:Cite/Special:Cite.php Documentation
- *
- * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
- */
-$wgExtensionCredits['specialpage'][] = array(
- 'path' => __FILE__,
- 'name' => 'Cite',
- 'author' => 'Ævar Arnfjörð Bjarmason',
- 'descriptionmsg' => 'cite_article_desc',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Cite/Special:Cite.php'
+trigger_error(
+ 'Special:Cite was moved to a separate CiteThisPage extension, ' .
+ 'see <https://www.mediawiki.org/wiki/Extension:CiteThisPage> for information on how to install it',
+ E_USER_WARNING
);
-
-$dir = __DIR__ . '/';
-# Internationalisation file
-$wgMessagesDirs['SpecialCite'] = __DIR__ . '/i18n/special';
-$wgExtensionMessagesFiles['SpecialCite'] = $dir . 'SpecialCite.i18n.php';
-$wgExtensionMessagesFiles['SpecialCiteAliases'] = $dir . 'SpecialCite.alias.php';
-
-$wgHooks['SkinTemplateBuildNavUrlsNav_urlsAfterPermalink'][] = 'wfSpecialCiteNav';
-$wgHooks['SkinTemplateToolboxEnd'][] = 'wfSpecialCiteToolbox';
-
-$wgSpecialPages['Cite'] = 'SpecialCite';
-$wgAutoloadClasses['SpecialCite'] = $dir . 'SpecialCite_body.php';
-
-// Resources
-$citeResourceTemplate = array(
- 'localBasePath' => __DIR__ . '/modules',
- 'remoteExtPath' => 'Cite/modules'
-);
-
-$wgResourceModules['ext.specialcite'] = $citeResourceTemplate + array(
- 'styles' => 'ext.specialcite.css',
- 'scripts' => array(),
- 'position' => 'bottom',
-);
-
-/**
- * @param $skintemplate SkinTemplate
- * @param $nav_urls
- * @param $oldid
- * @param $revid
- * @return bool
- */
-function wfSpecialCiteNav( &$skintemplate, &$nav_urls, &$oldid, &$revid ) {
- // check whether we’re in the right namespace, the $revid has the correct type and is not empty
- // (what would mean that the current page doesn’t exist)
- $title = $skintemplate->getTitle();
- if ( $title->isContentPage() && $revid !== 0 && !empty( $revid ) )
- $nav_urls['cite'] = array(
- 'args' => array( 'page' => $title->getPrefixedDBkey(), 'id' => $revid )
- );
-
- return true;
-}
-
-/**
- * add the cite link to the toolbar
- *
- * @param $skin Skin
- *
- * @return bool
- */
-function wfSpecialCiteToolbox( &$skin ) {
- if ( isset( $skin->data['nav_urls']['cite'] ) ) {
- echo Html::rawElement(
- 'li',
- array( 'id' => 't-cite' ),
- Linker::link(
- SpecialPage::getTitleFor( 'Cite' ),
- wfMessage( 'cite_article_link' )->escaped(),
- # Used message keys: 'tooltip-cite-article', 'accesskey-cite-article'
- Linker::tooltipAndAccessKeyAttribs( 'cite-article' ),
- $skin->data['nav_urls']['cite']['args']
- )
- );
- }
-
- return true;
-}
diff --git a/extensions/Cite/SpecialCite_body.php b/extensions/Cite/SpecialCite_body.php
deleted file mode 100644
index c2a6befc..00000000
--- a/extensions/Cite/SpecialCite_body.php
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-
-class SpecialCite extends SpecialPage {
- function __construct() {
- parent::__construct( 'Cite' );
- }
-
- function execute( $par ) {
- global $wgUseTidy;
-
- // Having tidy on causes whitespace and <pre> tags to
- // be generated around the output of the CiteOutput
- // class TODO FIXME.
- $wgUseTidy = false;
-
- $this->setHeaders();
- $this->outputHeader();
-
- $page = $par !== null ? $par : $this->getRequest()->getText( 'page' );
- $title = Title::newFromText( $page );
-
- $cform = new CiteForm( $title );
- $cform->execute();
-
- if ( $title && $title->exists() ) {
- $id = $this->getRequest()->getInt( 'id' );
- $cout = new CiteOutput( $title, $id );
- $cout->execute();
- }
- }
-}
-
-class CiteForm {
- /**
- * @var Title
- */
- public $mTitle;
-
- function __construct( &$title ) {
- $this->mTitle =& $title;
- }
-
- function execute() {
- global $wgOut, $wgScript;
-
- $wgOut->addHTML(
- Xml::openElement( 'form',
- array(
- 'id' => 'specialcite',
- 'method' => 'get',
- 'action' => $wgScript
- ) ) .
- Html::hidden( 'title', SpecialPage::getTitleFor( 'Cite' )->getPrefixedDBkey() ) .
- Xml::openElement( 'label' ) .
- wfMessage( 'cite_page' )->escaped() . ' ' .
- Xml::element( 'input',
- array(
- 'type' => 'text',
- 'size' => 30,
- 'name' => 'page',
- 'value' => is_object( $this->mTitle ) ? $this->mTitle->getPrefixedText() : ''
- ),
- ''
- ) .
- ' ' .
- Xml::element( 'input',
- array(
- 'type' => 'submit',
- 'value' => wfMessage( 'cite_submit' )->escaped()
- ),
- ''
- ) .
- Xml::closeElement( 'label' ) .
- Xml::closeElement( 'form' )
- );
- }
-}
-
-class CiteOutput {
- /**
- * @var Title
- */
- public $mTitle;
-
- /**
- * @var Article
- */
- public $mArticle;
-
- public $mId;
-
- /**
- * @var Parser
- */
- public $mParser;
-
- /**
- * @var ParserOptions
- */
- public $mParserOptions;
-
- public $mSpTitle;
-
- function __construct( $title, $id ) {
- global $wgHooks, $wgParser;
-
- $this->mTitle = $title;
- $this->mArticle = new Article( $title );
- $this->mId = $id;
-
- $wgHooks['ParserGetVariableValueVarCache'][] = array( $this, 'varCache' );
-
- $this->genParserOptions();
- $this->genParser();
-
- $wgParser->setHook( 'citation', array( $this, 'CiteParse' ) );
- }
-
- function execute() {
- global $wgOut, $wgParser, $wgHooks;
-
- $wgHooks['ParserGetVariableValueTs'][] = array( $this, 'timestamp' );
-
- $msg = wfMessage( 'cite_text' )->inContentLanguage()->plain();
- if ( $msg == '' ) {
- # With MediaWiki 1.20 the plain text files were deleted and the text moved into SpecialCite.i18n.php
- # This code is kept for b/c in case an installation has its own file "cite_text-xx"
- # for a previously not supported language.
- global $wgContLang, $wgContLanguageCode;
- $dir = dirname( __FILE__ ) . DIRECTORY_SEPARATOR;
- $code = $wgContLang->lc( $wgContLanguageCode );
- if ( file_exists( "${dir}cite_text-$code" ) ) {
- $msg = file_get_contents( "${dir}cite_text-$code" );
- } elseif( file_exists( "${dir}cite_text" ) ){
- $msg = file_get_contents( "${dir}cite_text" );
- }
- }
- $ret = $wgParser->parse( $msg, $this->mTitle, $this->mParserOptions, false, true, $this->getRevId() );
- $wgOut->addModules( 'ext.specialcite' );
-
- # Introduced in 1.24
- if( method_exists( $wgOut, 'addParserOutputContent' ) ) {
- $wgOut->addParserOutputContent( $ret );
- } else {
- $wgOut->addHTML( $ret->getText() );
- }
- }
-
- function genParserOptions() {
- global $wgUser;
- $this->mParserOptions = ParserOptions::newFromUser( $wgUser );
- $this->mParserOptions->setDateFormat( MW_DATE_DEFAULT );
- $this->mParserOptions->setEditSection( false );
- }
-
- function genParser() {
- $this->mParser = new Parser;
- $this->mSpTitle = SpecialPage::getTitleFor( 'Cite' );
- }
-
- function CiteParse( $in, $argv ) {
- $ret = $this->mParser->parse( $in, $this->mSpTitle, $this->mParserOptions, false );
-
- return $ret->getText();
- }
-
- function varCache() {
- return false;
- }
-
- function timestamp( &$parser, &$ts ) {
- if ( isset( $parser->mTagHooks['citation'] ) ) {
- $ts = wfTimestamp( TS_UNIX, $this->mArticle->getTimestamp() );
- }
-
- return true;
- }
-
- function getRevId() {
- if ( $this->mId ) {
- return $this->mId;
- } else {
- return $this->mTitle->getLatestRevID();
- }
- }
-}
diff --git a/extensions/Cite/citeParserTests.txt b/extensions/Cite/citeParserTests.txt
index 329806b5..047b11a1 100644
--- a/extensions/Cite/citeParserTests.txt
+++ b/extensions/Cite/citeParserTests.txt
@@ -126,7 +126,7 @@ Templating<ref>Text<!--comment--></ref>
</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="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
<div class="gallerytext">
</div>
</div></li>
diff --git a/extensions/Cite/extension.json b/extensions/Cite/extension.json
new file mode 100644
index 00000000..ff1d4442
--- /dev/null
+++ b/extensions/Cite/extension.json
@@ -0,0 +1,52 @@
+{
+ "name": "Cite",
+ "author": [
+ "Ævar Arnfjörð Bjarmason",
+ "Andrew Garrett",
+ "Brion Vibber",
+ "Marius Hoch",
+ "Steve Sanbeg"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:Cite",
+ "descriptionmsg": "cite-desc",
+ "license-name": "GPL-2.0+",
+ "type": "parserhook",
+ "MessagesDirs": {
+ "Cite": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "ParserFirstCallInit": [
+ "Cite::setHooks"
+ ]
+ },
+ "ResourceModules": {
+ "ext.cite": {
+ "scripts": "ext.cite.js",
+ "styles": "ext.cite.css",
+ "messages": [
+ "cite_references_link_accessibility_label",
+ "cite_references_link_many_accessibility_label"
+ ]
+ },
+ "ext.rtlcite": {
+ "styles": "ext.rtlcite.css",
+ "position": "top"
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "modules",
+ "remoteExtPath": "Cite/modules"
+ },
+ "config": {
+ "AllowCiteGroups": true,
+ "CiteCacheReferences": false
+ },
+ "AutoloadClasses": {
+ "Cite": "Cite_body.php"
+ },
+ "ParserTestFiles": [
+ "citeParserTests.txt"
+ ]
+}
diff --git a/extensions/Cite/i18n/core/af.json b/extensions/Cite/i18n/af.json
index 9d65e408..9d65e408 100644
--- a/extensions/Cite/i18n/core/af.json
+++ b/extensions/Cite/i18n/af.json
diff --git a/extensions/Cite/i18n/an.json b/extensions/Cite/i18n/an.json
new file mode 100644
index 00000000..c800c5fc
--- /dev/null
+++ b/extensions/Cite/i18n/an.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Juanpabl"
+ ]
+ },
+ "cite-desc": "Adibe as etiquetas <nowiki><ref[ name=id]></nowiki> y <nowiki><references/></nowiki> ta fer citas",
+ "cite_error": "Error en a cita: $1",
+ "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; o nombre d'a etiqueta no puede estar un numero entero, faiga servir un títol descriptivo",
+ "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; as referencias sin de conteniu han de tener un nombre",
+ "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; nombres de parametros incorreutos.",
+ "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; as referencias sin nombre no han de tener conteniu",
+ "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> incorreuta; no se premiten parametros, faiga servir <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> no conforme;\nnomás se premite o parametro \"group\".\nFaiga servir <code>&lt;references /&gt;</code>, u <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Ya no quedan etiquetas backlink presonalizatas, defina más en o mensache <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "S'han acorau as etiquetas de vinclos personalizaus ta o grupo \"$1\".\nDefina-ne mas en o mensache <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; no ha escrito garra testo t'as referencias nombratas <code>$1</code>",
+ "cite_error_included_ref": "Zarrando <code>&lt;/ref&gt;</code> falta una etiqueta <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Existen etiquetas <code>&lt;ref&gt;</code> ta un grupo clamau \"$1\", pero no se trobó garra etiqueta <code>&lt;references group=\"$1\"/&gt;</code>",
+ "cite_error_references_group_mismatch": "O tag <code>&lt;ref&gt;</code> en <code>&lt;references&gt;</code> presienta l'atributo de grupo en conflicto \"$1\".",
+ "cite_error_references_missing_group": "O tag <code>&lt;ref&gt;</code> definiu en <code>&lt;references&gt;</code> incluye l'atributo \"$1\" no declarau en o texto precedente.",
+ "cite_error_references_missing_key": "O tag <code>&lt;ref&gt;</code> con nombre \"$1\" definiu en <code>&lt;references&gt;</code> no s'emplega en o texto precedente.",
+ "cite_error_references_no_key": "O tag <code>&lt;ref&gt;</code> definiu en <code>&lt;references&gt;</code> no tiene garra atributo de nombre.",
+ "cite_error_empty_references_define": "O tag <code>&lt;ref&gt;</code> definiu en <code>&lt;references&gt;</code> con nombre \"$1\" no tiene garra conteniu."
+}
diff --git a/extensions/Cite/i18n/ar.json b/extensions/Cite/i18n/ar.json
new file mode 100644
index 00000000..7cba5a20
--- /dev/null
+++ b/extensions/Cite/i18n/ar.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aiman titi",
+ "Asaifm",
+ "Meno25",
+ "OsamaK",
+ "زكريا"
+ ]
+ },
+ "cite-desc": "يضيف وسوم <nowiki><ref[ name=id]></nowiki> و <nowiki><references/></nowiki> ، للاستشهادات",
+ "cite_error": "خطأ استشهاد: $1",
+ "cite_error_ref_numeric_key": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nالاسم لا يمكن أن يكون عددا صحيحا بسيطا. استخدم عنوانا وصفيا",
+ "cite_error_ref_no_key": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nالمراجع غير ذات المحتوى يجب أن تمتلك اسما",
+ "cite_error_ref_too_many_keys": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nأسماء غير صحيحة، على سبيل المثال كثيرة جدا",
+ "cite_error_ref_no_input": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nالمراجع غير ذات الاسم يجب أن تمتلك محتوى",
+ "cite_error_references_invalid_parameters": "وسم <code>&lt;references&gt;</code> غير صحيح؛\nلا محددات مسموح بها.\nاستخدم <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "وسم <code>&lt;references&gt;</code> غير صحيح؛\nالمحدد \"group\" فقط مسموح به.\nاستخدم <code>&lt;references /&gt;</code>، أو <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "نفدت علامات الوصلات الراجعة المخصصة.\nعرف المزيد في رسالة <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "تم الإنتهاء من تسمية الارتباطات المخصصة لمجموعة \"$1\".\n\nللحصول على تعريف أكثر أنظر هذه <nowiki>[[MediaWiki:$2]]</nowiki> الرسالة.",
+ "cite_error_references_no_text": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nلا نص تم توفيره للمراجع المسماة <code>$1</code>",
+ "cite_error_included_ref": "إغلاق <code>&lt;/ref&gt;</code> مفقود لوسم <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "وسوم <code>&lt;ref&gt;</code> موجودة لمجموعة اسمها \"$1\"، ولكن لم يتم العثور على وسم <code>&lt;references group=\"$1\"/&gt;</code> أو هناك وسم <code>&lt;/ref&gt;</code> ناقص",
+ "cite_error_references_group_mismatch": "الوسم <code>&lt;ref&gt;</code> في <code>&lt;references&gt;</code> فيه خاصية group متضاربة \"$1\".",
+ "cite_error_references_missing_group": "الوسم <code>&lt;ref&gt;</code> المُعرّف في <code>&lt;references&gt;</code> فيه خاصية group \"$1\" التي لا تظهر في النص السابق.",
+ "cite_error_references_missing_key": "الوسم <code>&lt;ref&gt;</code> ذو الاسم \"$1\" المُعرّف في <code>&lt;references&gt;</code> غير مستخدم في النص السابق.",
+ "cite_error_references_no_key": "الوسم <code>&lt;ref&gt;</code> المعرف في <code>&lt;references&gt;</code> ليس له خاصة اسم.",
+ "cite_error_empty_references_define": "الوسم <code>&lt;ref&gt;</code> المُعرّف في <code>&lt;references&gt;</code> بالاسم \"$1\" ليس له محتوى.",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\"><b>^</b> $2</span> $3</li>",
+ "cite_references_link_many_format_backlink_labels": "أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي أأ أب أت أث أج أح أخ أد أذ أر أز أس أش أص أض أط أظ أع أغ أف أق أك أل أم أن أه أو أي بأ بب بت بث بج بح بخ بد بذ بر بز بس بش بص بض بط بظ بع بغ بف بق بك بل بم بن به بو بي تأ تب تت تث تج تح تخ تد تذ تر تز تس تش تص تض تط تظ تع تغ تف تق تك تل تم تن ته تو تي ثأ ثب ثت ثث ثج ثح ثخ ثد ثذ ثر ثز ثس ثش ثص ثض ثط ثظ ثع ثغ ثف ثق ثك ثل ثم ثن ثه ثو ثي جأ جب جت جث جج جح جخ جد جذ جر جز جس جش جص جض جط جظ جع جغ جف جق جك جل جم جن جه جو جي حأ حب حت حث حج حح حخ حد حذ حر حز حس حش حص حض حط حظ حع حغ حف حق حك حل حم حن حه حو حي خأ خب خت خث خج خح خخ خد خذ خر خز خس خش خص خض خط خظ خع خغ خف خق خك خل خم خن خه خو خي دأ دب دت دث دج دح دخ دد دذ در دز دس دش دص دض دط دظ دع دغ دف دق دك دل دم دن ده دو دي ذأ ذب ذت ذث ذج ذح ذخ ذد ذذ ذر ذز ذس ذش ذص ذض ذط ذظ ذع ذغ ذف ذق ذك ذل ذم ذن ذه ذو ذي رأ رب رت رث رج رح رخ رد رذ رر رز رس رش رص رض رط رظ رع رغ رف رق رك رل رم رن ره رو ري زأ زب زت زث زج زح زخ زد زذ زر زز زس زش زص زض زط زظ زع زغ زف زق زك زل زم زن زه زو زي سأ سب ست سث سج سح سخ سد سذ سر سز سس سش سص سض سط سظ سع سغ سف سق سك سل سم سن سه سو سي شأ شب شت شث شج شح شخ شد شذ شر شز شس شش شص شض شط شظ شع شغ شف شق شك شل شم شن شه شو شي صأ صب صت صث صج صح صخ صد صذ صر صز صس صش صص صض صط صظ صع صغ صف صق صك صل صم صن صه صو صي ضأ ضب ضت ضث ضج ضح ضخ ضد ضذ ضر ضز ضس ضش ضص ضض ضط ضظ ضع ضغ ضف ضق ضك ضل ضم ضن ضه ضو ضي طأ طب طت طث طج طح طخ طد طذ طر طز طس طش طص طض طط طظ طع طغ طف طق طك طل طم طن طه طو طي ظأ ظب ظت ظث ظج ظح ظخ ظد ظذ ظر ظز ظس ظش ظص ظض ظط ظظ ظع ظغ ظف ظق ظك ظل ظم ظن ظه ظو ظي عأ عب عت عث عج عح عخ عد عذ عر عز عس عش عص عض عط عظ عع عغ عف عق عك عل عم عن عه عو عي غأ غب غت غث غج غح غخ غد غذ غر غز غس غش غص غض غط غظ غع غغ غف غق غك غل غم غن غه غو غي فأ فب فت فث فج فح فخ فد فذ فر فز فس فش فص فض فط فظ فع فغ فف فق فك فل فم فن فه فو في قأ قب قت قث قج قح قخ قد قذ قر قز قس قش قص قض قط قظ قع قغ قف قق قك قل قم قن قه قو قي كأ كب كت كث كج كح كخ كد كذ كر كز كس كش كص كض كط كظ كع كغ كف كق كك كل كم كن كه كو كي لأ لب لت لث لج لح لخ لد لذ لر لز لس لش لص لض لط لظ لع لغ لف لق لك لل لم لن له لو لي مأ مب مت مث مج مح مخ مد مذ مر مز مس مش مص مض مط مظ مع مغ مف مق مك مل مم من مه مو مي نأ نب نت نث نج نح نخ ند نذ نر نز نس نش نص نض نط نظ نع نغ نف نق نك نل نم نن نه نو ني هأ هب هت هث هج هح هخ هد هذ هر هز هس هش هص هض هط هظ هع هغ هف هق هك هل هم هن هه هو هي وأ وب وت وث وج وح وخ ود وذ ور وز وس وش وص وض وط وظ وع وغ وف وق وك ول وم ون وه وو وي يأ يب يت يث يج يح يخ يد يذ ير يز يس يش يص يض يط يظ يع يغ يف يق يك يل يم ين يه يو يي",
+ "cite_references_link_accessibility_label": "تعدى المحتوى الحالي إلى أعلى الصفحة",
+ "cite_references_link_many_accessibility_label": "تعدى إلى الأعلى ل:"
+}
diff --git a/extensions/Cite/i18n/core/arc.json b/extensions/Cite/i18n/arc.json
index 783d13c7..783d13c7 100644
--- a/extensions/Cite/i18n/core/arc.json
+++ b/extensions/Cite/i18n/arc.json
diff --git a/extensions/Cite/i18n/arq.json b/extensions/Cite/i18n/arq.json
new file mode 100644
index 00000000..4c747fc7
--- /dev/null
+++ b/extensions/Cite/i18n/arq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Oldstoneage"
+ ]
+ },
+ "cite_error": "غلطة فل قوالات المنسوبة: $1"
+}
diff --git a/extensions/Cite/i18n/arz.json b/extensions/Cite/i18n/arz.json
new file mode 100644
index 00000000..20cbdedf
--- /dev/null
+++ b/extensions/Cite/i18n/arz.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ghaly",
+ "Meno25",
+ "Ramsis II"
+ ]
+ },
+ "cite-desc": "بيضيف التاجز <nowiki><ref[ name=id]></nowiki> و <nowiki><references/></nowiki> ، للاستشهاد",
+ "cite_error": "المرجع غلط: $1",
+ "cite_error_ref_numeric_key": "التاج <code>&lt;ref&gt;</code> مش صحيح؛\nالاسم ماينفعش يكون عدد صحيح بسيط. استخدم عنوان بيوصف",
+ "cite_error_ref_no_key": "التاج <code>&lt;ref&gt;</code> مش صحيح؛\nالمراجع اللى من غير محتوى لازميكون ليها اسم",
+ "cite_error_ref_too_many_keys": "التاج <code>&lt;ref&gt;</code> مش صحيح؛\nأسامى مش صحيحة، يعنى مثلا: كتير قوي",
+ "cite_error_ref_no_input": "تاج <code>&lt;ref&gt;</code> مش صحيح؛\nالمراجع اللى من غير اسم لازم يكون ليها محتوى",
+ "cite_error_references_invalid_parameters": "مش صحيح <code>&lt;references&gt;</code> تاج;\nمافيش محددات مسموح بيها.\nاستخدم <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "مش صحيح <code>&lt;references&gt;</code> تاج;\nمحدد \"group\" مسموح بيه بس.\nاستخدم <code>&lt;references /&gt;</code>, or <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "علامات الوصلات الراجعة المخصصة خلصت.\nعرف اكتر فى رسالة <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_references_no_text": "مش صحيح <code>&lt;ref&gt;</code> تاج;\nمافيش نص متوافر فى المراجع اللى اسمها<code>$1</code>",
+ "cite_error_included_ref": "إغلاق <code>&lt;/ref&gt;</code> مفقود لوسم <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> فى تاجز موجوده لمجموعه اسمها \"$1\", بس مافيش مقابلها تاجز <code>&lt;references group=\"$1\"/&gt;</code> اتلقت",
+ "cite_references_link_many_format_backlink_labels": "أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ى أأ أب أت أث أج أح أخ أد أذ أر أز أس أش أص أض أط أظ أع أغ أف أق أك أل أم أن أه أو أى بأ بب بت بث بج بح بخ بد بذ بر بز بس بش بص بض بط بظ بع بغ بف بق بك بل بم بن به بو بى تأ تب تت تث تج تح تخ تد تذ تر تز تس تش تص تض تط تظ تع تغ تف تق تك تل تم تن ته تو تى ثأ ثب ثت ثث ثج ثح ثخ ثد ثذ ثر ثز ثس ثش ثص ثض ثط ثظ ثع ثغ ثف ثق ثك ثل ثم ثن ثه ثو ثى جأ جب جت جث جج جح جخ جد جذ جر جز جس جش جص جض جط جظ جع جغ جف جق جك جل جم جن جه جو جى حأ حب حت حث حج حح حخ حد حذ حر حز حس حش حص حض حط حظ حع حغ حف حق حك حل حم حن حه حو حى خأ خب خت خث خج خح خخ خد خذ خر خز خس خش خص خض خط خظ خع خغ خف خق خك خل خم خن خه خو خى دأ دب دت دث دج دح دخ دد دذ در دز دس دش دص دض دط دظ دع دغ دف دق دك دل دم دن ده دو دى ذأ ذب ذت ذث ذج ذح ذخ ذد ذذ ذر ذز ذس ذش ذص ذض ذط ذظ ذع ذغ ذف ذق ذك ذل ذم ذن ذه ذو ذى رأ رب رت رث رج رح رخ رد رذ رر رز رس رش رص رض رط رظ رع رغ رف رق رك رل رم رن ره رو رى زأ زب زت زث زج زح زخ زد زذ زر زز زس زش زص زض زط زظ زع زغ زف زق زك زل زم زن زه زو زى سأ سب ست سث سج سح سخ سد سذ سر سز سس سش سص سض سط سظ سع سغ سف سق سك سل سم سن سه سو سى شأ شب شت شث شج شح شخ شد شذ شر شز شس شش شص شض شط شظ شع شغ شف شق شك شل شم شن شه شو شى صأ صب صت صث صج صح صخ صد صذ صر صز صس صش صص صض صط صظ صع صغ صف صق صك صل صم صن صه صو صى ضأ ضب ضت ضث ضج ضح ضخ ضد ضذ ضر ضز ضس ضش ضص ضض ضط ضظ ضع ضغ ضف ضق ضك ضل ضم ضن ضه ضو ضى طأ طب طت طث طج طح طخ طد طذ طر طز طس طش طص طض طط طظ طع طغ طف طق طك طل طم طن طه طو طى ظأ ظب ظت ظث ظج ظح ظخ ظد ظذ ظر ظز ظس ظش ظص ظض ظط ظظ ظع ظغ ظف ظق ظك ظل ظم ظن ظه ظو ظى عأ عب عت عث عج عح عخ عد عذ عر عز عس عش عص عض عط عظ عع عغ عف عق عك عل عم عن عه عو عى غأ غب غت غث غج غح غخ غد غذ غر غز غس غش غص غض غط غظ غع غغ غف غق غك غل غم غن غه غو غى فأ فب فت فث فج فح فخ فد فذ فر فز فس فش فص فض فط فظ فع فغ فف فق فك فل فم فن فه فو فى قأ قب قت قث قج قح قخ قد قذ قر قز قس قش قص قض قط قظ قع قغ قف قق قك قل قم قن قه قو قى كأ كب كت كث كج كح كخ كد كذ كر كز كس كش كص كض كط كظ كع كغ كف كق كك كل كم كن كه كو كى لأ لب لت لث لج لح لخ لد لذ لر لز لس لش لص لض لط لظ لع لغ لف لق لك لل لم لن له لو لى مأ مب مت مث مج مح مخ مد مذ مر مز مس مش مص مض مط مظ مع مغ مف مق مك مل مم من مه مو مى نأ نب نت نث نج نح نخ ند نذ نر نز نس نش نص نض نط نظ نع نغ نف نق نك نل نم نن نه نو نى هأ هب هت هث هج هح هخ هد هذ هر هز هس هش هص هض هط هظ هع هغ هف هق هك هل هم هن هه هو هى وأ وب وت وث وج وح وخ ود وذ ور وز وس وش وص وض وط وظ وع وغ وف وق وك ول وم ون وه وو وى يأ يب يت يث يج يح يخ يد يذ ير يز يس يش يص يض يط يظ يع يغ يف يق يك يل يم ين يه يو يى"
+}
diff --git a/extensions/Cite/i18n/as.json b/extensions/Cite/i18n/as.json
new file mode 100644
index 00000000..9b2255ac
--- /dev/null
+++ b/extensions/Cite/i18n/as.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bishnu Saikia",
+ "Gitartha.bordoloi",
+ "Reedy"
+ ]
+ },
+ "cite-desc": "উদ্ধৃতিৰ বাবে <nowiki><ref[ name=id]></nowiki> আৰু <nowiki><references/></nowiki> টেগ্‌সমূহ যোগ কৰে",
+ "cite_error": "উদ্ধৃতি ত্ৰুটি: $1",
+ "cite_error_ref_numeric_key": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nনাম কোনো সৰল পূৰ্ণসংখ্যা হ'ব নোৱাৰে। এটা বৰ্ণনামূলক শিৰোনাম ব্যৱহাৰ কৰক।",
+ "cite_error_ref_no_key": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nসমলবিহীন refসমূহৰ অৱশ্যেই এটা নাম থাকিব লাগিব।",
+ "cite_error_ref_too_many_keys": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nঅবৈধ নাম, যেনে- বহুসংখ্যক",
+ "cite_error_ref_no_input": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nনামবিহীন refসমূহৰ অৱশ্যেই সমল থাকিব লাগিব।",
+ "cite_error_references_invalid_parameters": "অবৈধ <code>&lt;references&gt;</code> টেগ;\nকোনো পেৰামিটাৰ অনুমোদন কৰা হোৱা নাই।\n<code>&lt;references /&gt;</code> ব্যৱহাৰ কৰক।",
+ "cite_error_references_invalid_parameters_group": "অবৈধ <code>&lt;references&gt;</code> টেগ;\nকেৱল পেৰামিটাৰ \"গোট\"ক অনুমতি দিয়া হৈছে।\n<code>&lt;references /&gt;</code>, বা <code>&lt;references group=\"...\" /&gt;</code> ব্যৱহাৰ কৰক",
+ "cite_error_references_no_backlink_label": "কাষ্টম বেকলিংক লেবেল শেষ হৈছে।\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> বাৰ্তাত আৰু সংজ্ঞা দিয়ক।",
+ "cite_error_no_link_label_group": "\"$1\" গোটৰ বাবে কাষ্টম লিংক লেবেল উকলিছে।\n<nowiki>[[MediaWiki:$2]]</nowiki> বাৰ্তাত আৰু সংজ্ঞা দিয়ক।",
+ "cite_error_references_no_text": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\n<code>$1</code> নামৰ refৰ বাবে কোনো পাঠ্য প্ৰদান কৰা হোৱা নাই",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> বন্ধ কৰা হৈছে; <code>&lt;ref&gt;</code> টেগৰ বাবে পোৱা নাই",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> টেগ্‌সমূহ \"$1\" নামৰ এটা গোটৰ বাবে আছে, কিন্তু তাৰ <code>&lt;references group=\"$1\"/&gt;</code> টেগ্‌ পোৱা নগ'ল",
+ "cite_error_references_group_mismatch": "\"$1\" গোটৰ ক্ষেত্ৰত <code>&lt;references&gt;</code>ৰ <code>&lt;ref&gt;</code> টেগ্‌ ব্যৱহাৰত সমস্যা হৈছে।",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code>ত দিয়া <code>&lt;ref&gt;</code> টেগৰ \"$1\" গোট এট্ট্ৰিবিউট আছে, যিটো পূৰ্বৰ পাঠ্যত ওলোৱা নাই।",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code>ত দিয়া \"$1\" নামৰ <code>&lt;ref&gt;</code> টেগ্‌টো পূৰ্বৰ পাঠ্যত ব্যৱহাৰ কৰা নাই।",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code>ত দিয়া <code>&lt;ref&gt;</code> টেগৰ কোনো নাম আবণ্টন নাই।",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code>ত দিয়া \"$1\" নামৰ <code>&lt;ref&gt;</code> টেগৰ কোনো সমল নাই।"
+}
diff --git a/extensions/Cite/i18n/ast.json b/extensions/Cite/i18n/ast.json
new file mode 100644
index 00000000..d43242e3
--- /dev/null
+++ b/extensions/Cite/i18n/ast.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Esbardu",
+ "Xuacu"
+ ]
+ },
+ "cite-desc": "Añade les etiquetes <nowiki><ref[ name=id]></nowiki> y <nowiki><references/></nowiki> pa les cites",
+ "cite_error": "Error de cita: $1",
+ "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> non válida; el nome nun pue ser un enteru simple, usa un títulu descriptivu",
+ "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> non válida; les referencies ensin conteníu han tener un nome",
+ "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> non válida; nomes non válidos (p.ex. demasiaos)",
+ "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> non válida; les referencies ensin nome han tener conteníu",
+ "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> non válida; nun se permiten parámetros, usa <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> non válida;\nnamái se permite'l parámetru \"group\".\nUsa <code>&lt;references /&gt;</code>, o bien <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Etiquetes personalizaes agotaes.\nDefini más nel mensaxe <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Nun queden más etiquetes d'enllaz personalizáu pal grupu \"$1\".\nDefine más nel mensaxe <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> non válida; nun se conseñó testu pa les referencies nomaes <code>$1</code>",
+ "cite_error_included_ref": "Falta <code>&lt;/ref&gt;</code> pa la etiqueta <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Les etiquetes <code>&lt;ref&gt;</code> esisten pa un grupu llamáu \"$1\", pero nun s'alcontró la etiqueta <code>&lt;references group=\"$1\"/&gt;</code> correspondiente, o falta un cierre <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "La etiqueta <code>&lt;ref&gt;</code> en <code>&lt;references&gt;</code> tien un conflictu col atributu de grupu \"$1\".",
+ "cite_error_references_missing_group": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> tien l'atributu de grupu \"$1\" que nun apaez nel testu anterior.",
+ "cite_error_references_missing_key": "La etiqueta <code>&lt;ref&gt;</code> col nome \"$1\" definida en <code>&lt;references&gt;</code> nun s'utiliza nel testu anterior.",
+ "cite_error_references_no_key": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> nun tien dengún atributu de nome.",
+ "cite_error_empty_references_define": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> col nome \"$1\" nun tien conteníu.",
+ "cite_references_link_accessibility_label": "Saltar arriba",
+ "cite_references_link_many_accessibility_label": "Saltar a:"
+}
diff --git a/extensions/Cite/i18n/core/az.json b/extensions/Cite/i18n/az.json
index e5c1b149..e5c1b149 100644
--- a/extensions/Cite/i18n/core/az.json
+++ b/extensions/Cite/i18n/az.json
diff --git a/extensions/Cite/i18n/core/azb.json b/extensions/Cite/i18n/azb.json
index ddbdd3e8..ddbdd3e8 100644
--- a/extensions/Cite/i18n/core/azb.json
+++ b/extensions/Cite/i18n/azb.json
diff --git a/extensions/Cite/i18n/ba.json b/extensions/Cite/i18n/ba.json
new file mode 100644
index 00000000..3dd1fb88
--- /dev/null
+++ b/extensions/Cite/i18n/ba.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Assele"
+ ]
+ },
+ "cite-desc": "Төшөрмәләр өсөн <nowiki><ref[ name=id]></nowiki> һәм <nowiki><references/></nowiki> билдәләрен өҫтәй",
+ "cite_error": "Өҙөмтә хатаһы: $1",
+ "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\nисем бөтөн һан була алмай. Тасуирларлыҡ исем ҡулланығыҙ.",
+ "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\nэстәлекһеҙ төшөрмәнең исеме булырға тейеш.",
+ "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\nисемдәр дөрөҫ түгел, бәлки, бигерәк күп",
+ "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\nисемһеҙ төшөрмәнең эстәлеге булырға тейеш.",
+ "cite_error_references_invalid_parameters": "<code>&lt;references&gt;</code> билдәһе дөрөҫ түгел;\nпараметрҙар рөхсәт ителмәй.\n<code>&lt;references /&gt;</code> ҡулланығыҙ.",
+ "cite_error_references_invalid_parameters_group": "<code>&lt;references&gt;</code> билдәһе дөрөҫ түгел;\n\"group\" параметры ғына рөхсәт ителә.\n<code>&lt;references /&gt;</code> йәки <code>&lt;references group=\"...\" /&gt;</code> ҡулланығыҙ.",
+ "cite_error_references_no_backlink_label": "Кире ҡайтарыу һылтанмалары өсөн хәрефтәр етмәй.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> система хәбәрен киңәйтергә кәрәк.",
+ "cite_error_no_link_label_group": "\"$1\" төркөмө өсөн ҡулланыусы һылтанмалары етмәй.\n[[MediaWiki:$2]] система хәбәрендә күберәк билдәләгеҙ.",
+ "cite_error_references_no_text": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\n<code>$1</code> төшөрмәләре өсөн текст юҡ",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> билдәһе өсөн <code>&lt;/ref&gt;</code> ябыу билдәһе юҡ",
+ "cite_error_group_refs_without_references": "\"$1\" төркөмө өсөн <code>&lt;ref&gt;</code> билдәһе бар, әммә <code>&lt;references group=\"$1\"/&gt;</code> билдәһе юҡ",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> билдәһенең <code>&lt;ref&gt;</code> билдәһендә \"$1\" төркөмө атрибуты ҡаршылыҡтар тыуҙыра.",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code> билдәһенең <code>&lt;ref&gt;</code> билдәһендә \"$1\" төркөмө атрибуты үрҙәге текста осрамай.",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code> билдәһенең \"$1\" исемле <code>&lt;ref&gt;</code> билдәһе үрҙәге текста ҡулланылмай.",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code> билдәһенең <code>&lt;ref&gt;</code> билдәһендә исем атрибуты юҡ.",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code> билдәһенең \"$1\" исемле <code>&lt;ref&gt;</code> билдәһенең эстәлеге юҡ."
+}
diff --git a/extensions/Cite/i18n/core/bcc.json b/extensions/Cite/i18n/bcc.json
index bdd35ab0..bdd35ab0 100644
--- a/extensions/Cite/i18n/core/bcc.json
+++ b/extensions/Cite/i18n/bcc.json
diff --git a/extensions/Cite/i18n/bcl.json b/extensions/Cite/i18n/bcl.json
new file mode 100644
index 00000000..fecc7963
--- /dev/null
+++ b/extensions/Cite/i18n/bcl.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geopoet"
+ ]
+ },
+ "cite-desc": "Minadugang nin <nowiki><ref[ name=id]></nowiki> asin <nowiki><references/></nowiki> na mga tatak, para sa mga toltolan",
+ "cite_error": "Sambiton an kasalaan: $1",
+ "cite_error_ref_numeric_key": "Imbalido an <code>&lt;ref&gt;</code> tatak; an pangaran dae puwede na magin sarong simplehon na bilog na numero. Maggamit nin sarong deskriptibong titulo",
+ "cite_error_ref_no_key": "Imbalido an <code>&lt;ref&gt;</code> tatak; an mga toltolan na mayong kalamnan dapat magkaigwa nin pangaran",
+ "cite_error_ref_too_many_keys": "Imbalido an <code>&lt;ref&gt;</code> tatak; imbalidong mga pangaran, e.g. grabe kadakol",
+ "cite_error_ref_no_input": "Imbalido an <code>&lt;ref&gt;</code> tatak; an mga toltolan na mayong pangaran dapat magkaigwa nin kalamnan",
+ "cite_error_references_invalid_parameters": "Imbalido an <code>&lt;references&gt;</code> tatak; mayong mga parametro an pinagtutugot. Maggamit nin <code>&lt;mga toltolan /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Imbalido an <code>&lt;references&gt;</code> tatak; an parametrong \"grupo\" sana an pinagtutugot. Maggamit nin <code>&lt;mga toltolan /&gt;</code>, o <code>&lt;mga toltolang grupo=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Naubusan nin pankostumbreng sugpon-panlikod na kamarkahan.\nPakahulugan nin dagdag tabi an <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> mensahe.",
+ "cite_error_no_link_label_group": "Naubusan nin pankostumbreng sugpon nin mga kamarkahan para sa grupo \"$1\".\nPakahulugan nin dagdag tabi an <nowiki>[[MediaWiki:$2]]</nowiki> mensahe.",
+ "cite_error_references_no_text": "Imbalidong <code>&lt;ref&gt;</code> tatak; mayong teksto na ipinagtao para sa reperensiya na pinagngaranan na <code>$1</code>",
+ "cite_error_included_ref": "Ipinagsasara <code>&lt;/ref&gt;</code> nawawara para sa <code>&lt;ref&gt;</code> na tatak",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> mga tatak na eksistido para sa sarong grupo na pinagngaranan na \"$1\", alagad mayong kinasungkoan na <code>&lt;mga pinapanungdanan na grupo=\"$1\"/&gt;</code>na tatak an nanagboan, o sarong panarado <code>&lt;/ref&gt;</code> an nawawara",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tatak sa laog na <code>&lt;references&gt;</code> igwa nin pangrupong kumplikto sa hitsurahon na \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tatak na pinagkahulugan sa <code>&lt;references&gt;</code> igwa nin pangrupong hitsurahon na \"$1\" na dae ipinapahiling sa nakaaging teksto.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> tatak na igwang pangaran na \"$1\" na pinagkahulugan sa <code>&lt;references&gt;</code> na dae pinaggagamit sa nakaaging teksto.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> tatak na pinagkahulugan sa <code>&lt;references&gt;</code> na mayo nin hitsurahon sa pangaran.",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> tatak na pinagkahulugan sa <code>&lt;references&gt;</code> na igwang pangaran na \"$1\" na mayo tabing kalamnan.",
+ "cite_references_link_accessibility_label": "Lukso paitaas",
+ "cite_references_link_many_accessibility_label": "Lukso paitaas paduman sa:"
+}
diff --git a/extensions/Cite/i18n/be-tarask.json b/extensions/Cite/i18n/be-tarask.json
new file mode 100644
index 00000000..eb8cc22f
--- /dev/null
+++ b/extensions/Cite/i18n/be-tarask.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko",
+ "Jim-by",
+ "Red Winged Duck",
+ "Wizardist"
+ ]
+ },
+ "cite-desc": "Дадае тэгі <nowiki><ref[ name=id]></nowiki> і <nowiki><references/></nowiki> для зносак",
+ "cite_error": "Памылка цытаваньня: $1",
+ "cite_error_ref_numeric_key": "Няслушны тэг <code>&lt;ref&gt;</code>;\nназва ня можа быць проста лікам, ужывайце апісальную назву",
+ "cite_error_ref_no_key": "Няслушны тэг <code>&lt;ref&gt;</code>;\nпустыя тэгі <code>ref</code> мусяць мець назву",
+ "cite_error_ref_too_many_keys": "Няслушны тэг <code>&lt;ref&gt;</code>;\nняслушныя назвы, ці іх было зашмат",
+ "cite_error_ref_no_input": "Няслушны тэг <code>&lt;ref&gt;</code>;\nкрыніцы бяз назваў мусяць мець зьмест",
+ "cite_error_references_invalid_parameters": "Няслушны тэг <code>&lt;references&gt;</code>;\nнедазволеныя парамэтры.\nКарыстайцеся <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Няслушны тэг <code>&lt;references&gt;</code>;\nдазволена карыстацца толькі парамэтрам «group».\nКарыстайцеся <code>&lt;references /&gt;</code>, ці <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Не хапае сымбаляў для адваротных спасылак.\nНеабходна пашырыць сыстэмнае паведамленьне <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Скончыліся нестандартныя меткі спасылак для групы «$1».\nВызначыце болей у паведамленьні <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Няслушны тэг <code>&lt;ref&gt;</code>;\nняма тэксту ў назьве зносак <code>$1</code>",
+ "cite_error_included_ref": "Няма закрываючага тэга <code>&lt;/ref&gt;</code> пасьля адкрытага тэга <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Тэг <code>&lt;ref&gt;</code> існуе для групы «$1», але адпаведнага тэга <code>&lt;references group=\"$1\"/&gt;</code> ня знойдзена. Магчыма, адсутнічае фінальны тэг <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "Тэг <code>&lt;ref&gt;</code> у <code>&lt;references&gt;</code> утрымлівае канфліктуючы атрыбут групы «$1».",
+ "cite_error_references_missing_group": "Тэг <code>&lt;ref&gt;</code> вызначаны ў <code>&lt;references&gt;</code> утрымлівае атрыбут групы «$1», які раней не выкарыстоўваўся ў тэксьце.",
+ "cite_error_references_missing_key": "Тэг <code>&lt;ref&gt;</code> з назвай «$1» вызначаны ў <code>&lt;references&gt;</code> не выкарыстоўваўся ў папярэднім тэксьце.",
+ "cite_error_references_no_key": "Тэг <code>&lt;ref&gt;</code> вызначаны ў <code>&lt;references&gt;</code> ня мае атрыбуту назвы.",
+ "cite_error_empty_references_define": "Тэг <code>&lt;ref&gt;</code> вызначаны ў <code>&lt;references&gt;</code> з назвай «$1» ня мае зьместу.",
+ "cite_references_link_accessibility_label": "Угару",
+ "cite_references_link_many_accessibility_label": "Угару да:"
+}
diff --git a/extensions/Cite/i18n/bg.json b/extensions/Cite/i18n/bg.json
new file mode 100644
index 00000000..8b947a54
--- /dev/null
+++ b/extensions/Cite/i18n/bg.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borislav",
+ "DCLXVI",
+ "Spiritia"
+ ]
+ },
+ "cite-desc": "Добавя етикетите <nowiki><ref[ name=id]></nowiki> и <nowiki><references/></nowiki>, подходящи за цитиране",
+ "cite_error": "Грешка при цитиране: $1",
+ "cite_error_ref_numeric_key": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' името не може да бъде число, използва се описателно име",
+ "cite_error_ref_no_key": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' етикетите без съдържание трябва да имат име",
+ "cite_error_ref_too_many_keys": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' грешка в името, например повече от едно име на етикета",
+ "cite_error_ref_no_input": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' етикетите без име трябва да имат съдържание",
+ "cite_error_references_invalid_parameters": "'''Грешка в етикет <code>&lt;references&gt;</code>:''' използва се без параметри, така: <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Невалиден етикет <code>&lt;references&gt;</code>;\nпозволен е само параметър \"group\".\nИзползвайте <code>&lt;references /&gt;</code> или <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Изчерпани са специалните етикети за обратна референция.\nОще етикети могат да се дефинират в системното съобщение <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_references_no_text": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' не е подаден текст за бележките на име <code>$1</code>",
+ "cite_error_included_ref": "Липсва затварящ етикет <code>&lt;/ref&gt;</code> след отварящия етикет <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Присъстват етикети <code>&lt;ref&gt;</code> за групата \"$1\"; но липсва съответният етикет <code>&lt;references group=\"$1\"/&gt;</code>"
+}
diff --git a/extensions/Cite/i18n/bgn.json b/extensions/Cite/i18n/bgn.json
new file mode 100644
index 00000000..d932aac1
--- /dev/null
+++ b/extensions/Cite/i18n/bgn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "cite_error": "یات کورت ئی ختا: $1"
+}
diff --git a/extensions/Cite/i18n/bn.json b/extensions/Cite/i18n/bn.json
new file mode 100644
index 00000000..55156ab8
--- /dev/null
+++ b/extensions/Cite/i18n/bn.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftab1995",
+ "Bellayet",
+ "Nasir8891",
+ "Zaheen"
+ ]
+ },
+ "cite-desc": "উদ্ধৃতির জন্য, <nowiki><ref[ name=id]></nowiki> এবং <nowiki><references/></nowiki> ট্যাগসমূহ যোগ করুন",
+ "cite_error": "উদ্ধৃতি ত্রুটি: $1",
+ "cite_error_ref_numeric_key": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; নাম কোন সরল পূর্ণসংখ্যা হতে পারবেনা, একটি বিবরণমূলক শিরোনাম ব্যবহার করুন",
+ "cite_error_ref_no_key": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; বিষয়বস্তুহীন ref সমূহের অবশ্যই নাম থাকতে হবে",
+ "cite_error_ref_too_many_keys": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; অবৈধ নাম (যেমন- সংখ্যাতিরিক্ত)",
+ "cite_error_ref_no_input": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; নামবিহীন ref সমূহের অবশ্যই বিষয়বস্তু থাকতে হবে",
+ "cite_error_references_invalid_parameters": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; কোন প্যারামিটার অনুমোদিত নয়, <code>&lt;references /&gt;</code> ব্যবহার করুন",
+ "cite_error_references_invalid_parameters_group": "ত্রুটিপূর্ণ <code>&lt;references&gt;</code> ট্যাগ;\nকেবলমাত্র \"group\" প্যারামিটার ব্যবহার কর যাবে।\n<code>&lt;references /&gt;</code>, অথবা <code>&lt;references group=\"...\" /&gt;</code> ব্যবহার করুন",
+ "cite_error_references_no_backlink_label": "পছন্দমাফিক ব্যাকলিংক লেবেলের সংখ্যা ফুরিয়ে গেছে।\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> বার্তায় আরও সংজ্ঞায়িত করুন",
+ "cite_error_no_link_label_group": "গ্রুপ \"$1\" এর জন্য কাস্টম লিংক ব্যবহারের সীমানা পেরিয়েছে।\n<nowiki>[[MediaWiki:$2]]</nowiki> বার্তায় আরও সজ্ঞায়িত করুন।",
+ "cite_error_references_no_text": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; <code>$1</code> নামের ref গুলির জন্য কোন টেক্সট প্রদান করা হয়নি",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> ট্যাগের ক্ষেত্রে <code>&lt;/ref&gt;</code> ট্যাগ যোগ করা হয়নি",
+ "cite_error_group_refs_without_references": "\"$1\" নামের গ্রুপের <code>&lt;ref&gt;</code> ট্যাগ রয়েছে, কিন্তু এর জন্য <code>&lt;references group=\"$1\"/&gt;</code> ট্যাগ দেয়া হয়নি",
+ "cite_error_references_group_mismatch": "\"$1\" গ্রুপের ক্ষেত্রে <code>&lt;ref&gt;</code> ট্যাগ <code>&lt;references&gt;</code> ট্যাগের অংশে ব্যবহারে সমস্যা সৃষ্টি হয়েছে।"
+}
diff --git a/extensions/Cite/i18n/br.json b/extensions/Cite/i18n/br.json
new file mode 100644
index 00000000..b2980820
--- /dev/null
+++ b/extensions/Cite/i18n/br.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fohanno",
+ "Fulup"
+ ]
+ },
+ "cite-desc": "Ouzhpennañ a ra ar balizennoù <nowiki><ref[ name=id]></nowiki> ha <nowiki><references/></nowiki>, evit an arroudoù.",
+ "cite_error": "Fazi arroud : $1",
+ "cite_error_ref_numeric_key": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nn'hall ket an anv bezañ un niver anterin. Grit gant un titl deskrivus",
+ "cite_error_ref_no_key": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nret eo d'an daveennoù goullo kaout un anv",
+ "cite_error_ref_too_many_keys": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nanv direizh, niver re uhel da skouer",
+ "cite_error_ref_no_input": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nret eo d'an daveennoù hep anv bezañ danvez enno",
+ "cite_error_references_invalid_parameters": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nn'eo aotreet arventenn ebet.\nGrit gant ar valizenn <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nn'eus nemet an arventenn \"strollad\" zo aotreet.\nGrit gant ar valizenn <code>&lt;references /&gt;</code>, pe <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "N'eus ket a dikedennoù personelaet mui.\nSpisait un niver brasoc'h anezho er gemennadenn <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Tikedenn liamm bersonelaet ebet ken evit ar strollad \"$1\".\nTermenit re all e kemennadenn <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Balizenn <code>&lt;ref&gt;</code> direizh ;\nne oa bet lakaet tamm testenn ebet evit ar valizenn <code>$1</code>",
+ "cite_error_included_ref": "Kod digeriñ <code>&lt;/ref&gt;</code> hep kod serriñ <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> balizennoù zo evit ur strollad anvet \"$1\", met n'eus bet kavet balizenn <code>&lt;references group=\"$1\"/&gt;</code> ebet o klotañ",
+ "cite_error_references_group_mismatch": "Gant ar valizenn <code>&lt;ref&gt;</code> e <code>&lt;references&gt;</code> emañ an dezverk strollad trubuilhus \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> ar valizenn termenet e <code>&lt;references&gt;</code> eo dezhi un dezverk strollad \"$1\" na gaver ket en destenn a-raok.",
+ "cite_error_references_missing_key": "N'eo ket bet implijet en destenn gent ar <code>&lt;ref&gt;</code> valizenn hec'h anv \"$1\" termenet e <code>&lt;references&gt;</code>.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> ar valizenn termenet e <code>&lt;references&gt;</code> n'he deus dezverk anv ebet.",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> ar valiezenn termenet e <code>&lt;references&gt;</code> dezhi an anv a \"$1\" zo goullo.",
+ "cite_references_link_accessibility_label": "Lammat",
+ "cite_references_link_many_accessibility_label": "Lammat da :"
+}
diff --git a/extensions/Cite/i18n/core/bs.json b/extensions/Cite/i18n/bs.json
index d4844f27..d4844f27 100644
--- a/extensions/Cite/i18n/core/bs.json
+++ b/extensions/Cite/i18n/bs.json
diff --git a/extensions/Cite/i18n/core/bto.json b/extensions/Cite/i18n/bto.json
index eea88b00..eea88b00 100644
--- a/extensions/Cite/i18n/core/bto.json
+++ b/extensions/Cite/i18n/bto.json
diff --git a/extensions/Cite/i18n/ca.json b/extensions/Cite/i18n/ca.json
new file mode 100644
index 00000000..1a7eee91
--- /dev/null
+++ b/extensions/Cite/i18n/ca.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Davidpar",
+ "Jordi Roqué",
+ "SMP",
+ "Vriullop"
+ ]
+ },
+ "cite-desc": "Afegeix les etiquetes <nowiki><ref[ name=id]></nowiki> i <nowiki><references/></nowiki>, per a cites",
+ "cite_error": "Error de citació: $1",
+ "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nel nom no pot ser un nombre. Empreu una paraula o un títol descriptiu",
+ "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nles refs sense contingut han de tenir nom",
+ "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nempreu l'estructura <code>&lt;ref name=\"Nom\"&gt;</code>",
+ "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> no vàlida; \nles referències sense nom han de tenir contingut",
+ "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> no vàlida; \nno es permeten paràmetres. \nUseu <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> no vàlida;\núnicament es permet el paràmetre \"group\".\nUseu <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Hi ha massa etiquetes personalitzades.\nSe'n poden definir més a <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "No hi ha etiquetes vincle personalitzat per al grup \"$1\".\nDefineix més al missatge <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nno s'ha proporcionat text per les refs amb l'etiqueta <code>$1</code>",
+ "cite_error_included_ref": "Es tanca el <code>&lt;/ref&gt;</code> que manca per una etiqueta <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Existeixen etiquetes <code>&lt;ref&gt;</code> pel grup «$1» però no l'etiqueta <code>&lt;references group=\"$1\"/&gt;</code> corresponent",
+ "cite_error_references_group_mismatch": "L'etiqueta <code>&lt;ref&gt;</code> a <code>&lt;references&gt;</code> té un conflicte amb l'atribut de grup \"$1\".",
+ "cite_error_references_missing_group": "L'etiqueta <code>&lt;ref&gt;</code> definida a <code>&lt;references&gt;</code> té l'atribut de grup \"$1\" que no apareix en el text anterior.",
+ "cite_error_references_missing_key": "L'etiqueta <code>&lt;ref&gt;</code> amb el nom \"$1\" definida a <code>&lt;references&gt;</code> no s'utilitza en el text anterior.",
+ "cite_error_references_no_key": "L'etiqueta <code>&lt;ref&gt;</code> definida a <code>&lt;references&gt;</code> no té cap atribut de nom.",
+ "cite_error_empty_references_define": "L'etiqueta <code>&lt;ref&gt;</code> definida a <code>&lt;references&gt;</code> amb el nom \"$1\" no té contingut."
+}
diff --git a/extensions/Cite/i18n/ce.json b/extensions/Cite/i18n/ce.json
new file mode 100644
index 00000000..b345a128
--- /dev/null
+++ b/extensions/Cite/i18n/ce.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "cite-desc": "<nowiki><ref[ name=id]></nowiki> а <nowiki><references/></nowiki> тегаш тӀетовжорашан тӀетуху",
+ "cite_error": "ГӀалат дешнаш далорна $1",
+ "cite_error_ref_numeric_key": "Нийса йоцу тег <code>&lt;ref&gt;</code>;\nцӀе дуьззина терахь хилийла дац. Лелае йозанан цӀе",
+ "cite_error_ref_no_key": "Нийса йоцу тег <code>&lt;ref&gt;</code>;\nчулацам боцу элементан цӀе хийла еза.",
+ "cite_error_ref_too_many_keys": "Нийса йоцу тег <code>&lt;ref&gt;</code>;\nгӀалатан цӀераш, тӀех дукха хила мега",
+ "cite_error_ref_no_input": "Нийса йоцу тег <code>&lt;ref&gt;</code>;\nцӀе йоцу элементан чулацам хийла беза.",
+ "cite_error_references_invalid_parameters": "Нийса йоцу тег <code>&lt;references&gt;</code>;\nпараметраш шорйина яц.\nЛелае <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "ГӀалате тег <code>&lt;references&gt;</code>;\nлело мега параметр <code>'''group'''</code>.\nЛелае <code>&lt;references /&gt;</code> я <code>&lt;references group=\"…\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Символаш тоьаш яц юху ялочу гиперхьажоргашна.\nСистемнан хаам <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> шорбан беза",
+ "cite_error_no_link_label_group": "Тобан «$1» декъашхойн билгалонаш чекхъяьлла.\nХаам <nowiki>[[MediaWiki:$2]]</nowiki> чохь билгалъе кхин тӀе ерш.",
+ "cite_error_references_no_text": "Тег <code>&lt;ref&gt;</code> нийса яц; тIетовжаран <code>$1</code> йоза яздина дац",
+ "cite_error_included_ref": "Яц тӀе чӀогӀу тег <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Тобан «$1» йолуш йолу тегашца <code>&lt;ref&gt;</code> йогӀуш йолу тег <code>&lt;references group=\"$1\"/&gt;</code> ца карийна",
+ "cite_error_references_group_mismatch": "Теган <code>&lt;ref&gt;</code> <code>&lt;references&gt;</code> юкъахь нийса йоцу тобанаш ю атрибутийн «$1».",
+ "cite_error_references_missing_group": "Тег <code>&lt;ref&gt;</code>, билгалйина <code>&lt;references&gt;</code>, «$1» тобан атрибут ю, йозан юкъахь йоцу.",
+ "cite_error_references_missing_key": "Тег <code>&lt;ref&gt;</code> «$1» цӀарца, кху <code>&lt;references&gt;</code> юкъахь билгалйина йолу, хьалха хилла йозан юкъахь яц.",
+ "cite_error_references_no_key": "Тег <code>&lt;ref&gt;</code>, <code>&lt;references&gt;</code> юкъахь билгалйина йолу, цӀеран атрибут яц.",
+ "cite_error_empty_references_define": "Тег <code>&lt;ref&gt;</code>, <code>&lt;references&gt;</code> юкъахь билгалйина йолу, «$1» цӀарца чулацам боцуш ю.",
+ "cite_references_link_many_format_backlink_labels": "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я аа аб ав аг ад ае ё аж аз аи ай ак ал ам ан ао ап ар ас ат ау аф ах ац ач аш ащ аъ аы аь аэ аю ая ба бб бв бг бд бе бж бз би бй бк бл бм бн бо бп бр бс бт бу бф бх бц бч бш бщ бъ бы бь бэ бю бя ва вб вв вг вд ве вж вз ви вй вк вл вм вн во вп вр вс вт ву вф вх вц вч вш вщ въ вы вь вэ вю вя га гб гв гг гд ге гж гз ги гй гк гл гм гн го гп гр гс гт гу гф гх гц гч гш гщ гъ гы гь гэ гю гя да дб дв дг дд де дж дз ди дй дк дл дм дн до дп др дс дт ду дф дх дц дч дш дщ дъ ды дь дэ дю дя еа еб ев ег ед ее еж ез еи ей ек ел ем ен ео еп ер ес ет еу еф ех ец еч еш ещ еъ еы еь еэ ею ея жа жб жв жг жд же жж жз жи жй жк жл жм жн жо жп жр жс жт жу жф жх жц жч жш жщ жъ жы жь жэ жю жя за зб зв зг зд зе зж зз зи зй зк зл зм зн зо зп зр зс зт зу зф зх зц зч зш зщ зъ зы зь зэ зю зя иа иб ив иг ид ие иж из ии ий ик ил им ин ио ип ир ис ит иу иф их иц ич иш ищ иъ иы иь иэ ию ия йа йб йв йг йд йе йж йз йи йй йк йл йм йн йо йп йр йс йт йу йф йх йц йч йш йщ йъ йы йь йэ йю йя ка кб кв кг кд ке кж кз ки кй кк кл км кн ко кп кр кс кт ку кф кх кц кч кш кщ къ кы кь кэ кю кя ла лб лв лг лд ле лж лз ли лй лк лл лм лн ло лп лр лс лт лу лф лх лц лч лш лщ лъ лы ль лэ лю ля ма мб мв мг мд ме мж мз ми мй мк мл мм мн мо мп мр мс мт му мф мх мц мч мш мщ мъ мы мь мэ мю мя на нб нв нг нд не нж нз ни нй нк нл нм нн но нп нр нс нт ну нф нх нц нч нш нщ нъ ны нь нэ ню ня оа об ов ог од ое ож оз ои ой ок ол ом он оо оп ор ос от оу оф ох оц оч ош ощ оъ оы оь оэ ою оя па пб пв пг пд пе пж пз пи пй пк пл пм пн по пп пр пс пт пу пф пх пц пч пш пщ пъ пы пь пэ пю пя ра рб рв рг рд ре рж рз ри рй рк рл рм рн ро рп рр рс рт ру рф рх рц рч рш рщ ръ ры рь рэ рю ря са сб св сг сд се сж сз си сй ск сл см сн со сп ср сс ст су сф сх сц сч сш сщ съ сы сь сэ сю ся та тб тв тг тд те тж тз ти тй тк тл тм тн то тп тр тс тт ту тф тх тц тч тш тщ тъ ты ть тэ тю тя уа уб ув уг уд уе уж уз уи уй ук ул ум ун уо уп ур ус ут уу уф ух уц уч уш ущ уъ уы уь уэ ую уя фа фб фв фг фд фе фж фз фи фй фк фл фм фн фо фп фр фс фт фу фф фх фц фч фш фщ фъ фы фь фэ фю фя ха хб хв хг хд хе хж хз хи хй хк хл хм хн хо хп хр хс хт ху хф хх хц хч хш хщ хъ хы хь хэ хю хя ца цб цв цг цд це цж цз ци цй цк цл цм цн цо цп цр цс цт цу цф цх цц цч цш цщ цъ цы ць цэ цю ця ча чб чв чг чд че чж чз чи чй чк чл чм чн чо чп чр чс чт чу чф чх чц чч чш чщ чъ чы чь чэ чю чя ша шб шв шг шд ше шж шз ши шй шк шл шм шн шо шп шр шс шт шу шф шх шц шч шш шщ шъ шы шь шэ шю шя ща щб щв щг щд ще щж щз щи щй щк щл щм щн що щп щр щс щт щу щф щх щц щч щш щщ щъ щы щь щэ щю щя ъа ъб ъв ъг ъд ъе ъж ъз ъи ъй ък ъл ъм ън ъо ъп ър ъс ът ъу ъф ъх ъц ъч ъш ъщ ъъ ъы ъь ъэ ъю ъя ыа ыб ыв ыг ыд ые ыж ыз ыи ый ык ыл ым ын ыо ып ыр ыс ыт ыу ыф ых ыц ыч ыш ыщ ыъ ыы ыь ыэ ыю ыя ьа ьб ьв ьг ьд ье ьж ьз ьи ьй ьк ьл ьм ьн ьо ьп ьр ьс ьт ьу ьф ьх ьц ьч ьш ьщ ьъ ьы ьь ьэ ью ья эа эб эв эг эд эе эж эз эи эй эк эл эм эн эо эп эр эс эт эу эф эх эц эч эш эщ эъ эы эь ээ эю эя юа юб юв юг юд юе юж юз юи юй юк юл юм юн юо юп юр юс ют юу юф юх юц юч юш ющ юъ юы юь юэ юю юя яа яб яв яг яд яе яж яз яи яй як ял ям ян яо яп яр яс ят яу яф ях яц яч яш ящ яъ яы яь яэ яю яя ӀӀ",
+ "cite_references_link_accessibility_label": "Дехьа гӀо",
+ "cite_references_link_many_accessibility_label": "Дехьа гӀо:"
+}
diff --git a/extensions/Cite/i18n/core/an.json b/extensions/Cite/i18n/core/an.json
deleted file mode 100644
index 9e14cf1f..00000000
--- a/extensions/Cite/i18n/core/an.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Juanpabl"
- ]
- },
- "cite-desc": "Adibe as etiquetas <nowiki><ref[ name=id]></nowiki> y <nowiki><references/></nowiki> ta fer citas",
- "cite_error": "Error en a cita: $1",
- "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; o nombre d'a etiqueta no puede estar un numero entero, faiga servir un títol descriptivo",
- "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; as referencias sin de conteniu han de tener un nombre",
- "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; nombres de parametros incorreutos.",
- "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; as referencias sin nombre no han de tener conteniu",
- "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> incorreuta; no se premiten parametros, faiga servir <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> no conforme;\nnomás se premite o parametro \"group\".\nFaiga servir <code>&lt;references /&gt;</code>, u <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Ya no quedan etiquetas backlink presonalizatas, defina más en o mensache <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "S'han acorau as etiquetas de vinclos personalizaus ta o grupo \"$1\".\nDefina-ne mas en o mensache <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> incorreuta; no ha escrito garra testo t'as referencias nombratas <code>$1</code>",
- "cite_error_included_ref": "Zarrando <code>&lt;/ref&gt;</code> falta una etiqueta <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Existen etiquetas <code>&lt;ref&gt;</code>, pero no se trobó garra etiqueta <code>&lt;references /&gt;</code>",
- "cite_error_group_refs_without_references": "Existen etiquetas <code>&lt;ref&gt;</code> ta un grupo clamau \"$1\", pero no se trobó garra etiqueta <code>&lt;references group=\"$1\"/&gt;</code>",
- "cite_error_references_group_mismatch": "O tag <code>&lt;ref&gt;</code> en <code>&lt;references&gt;</code> presienta l'atributo de grupo en conflicto \"$1\".",
- "cite_error_references_missing_group": "O tag <code>&lt;ref&gt;</code> definiu en <code>&lt;references&gt;</code> incluye l'atributo \"$1\" no declarau en o texto precedente.",
- "cite_error_references_missing_key": "O tag <code>&lt;ref&gt;</code> con nombre \"$1\" definiu en <code>&lt;references&gt;</code> no s'emplega en o texto precedente.",
- "cite_error_references_no_key": "O tag <code>&lt;ref&gt;</code> definiu en <code>&lt;references&gt;</code> no tiene garra atributo de nombre.",
- "cite_error_empty_references_define": "O tag <code>&lt;ref&gt;</code> definiu en <code>&lt;references&gt;</code> con nombre \"$1\" no tiene garra conteniu."
-}
diff --git a/extensions/Cite/i18n/core/ar.json b/extensions/Cite/i18n/core/ar.json
deleted file mode 100644
index e9bfff65..00000000
--- a/extensions/Cite/i18n/core/ar.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Aiman titi",
- "Asaifm",
- "Meno25",
- "OsamaK",
- "زكريا"
- ]
- },
- "cite-desc": "يضيف وسوم <nowiki><ref[ name=id]></nowiki> و <nowiki><references/></nowiki> ، للاستشهادات",
- "cite_error": "خطأ استشهاد: $1",
- "cite_error_ref_numeric_key": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nالاسم لا يمكن أن يكون عددا صحيحا بسيطا. استخدم عنوانا وصفيا",
- "cite_error_ref_no_key": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nالمراجع غير ذات المحتوى يجب أن تمتلك اسما",
- "cite_error_ref_too_many_keys": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nأسماء غير صحيحة، على سبيل المثال كثيرة جدا",
- "cite_error_ref_no_input": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nالمراجع غير ذات الاسم يجب أن تمتلك محتوى",
- "cite_error_references_invalid_parameters": "وسم <code>&lt;references&gt;</code> غير صحيح؛\nلا محددات مسموح بها.\nاستخدم <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "وسم <code>&lt;references&gt;</code> غير صحيح؛\nالمحدد \"group\" فقط مسموح به.\nاستخدم <code>&lt;references /&gt;</code>، أو <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "نفدت علامات الوصلات الراجعة المخصصة.\nعرف المزيد في رسالة <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "تم الإنتهاء من تسمية الارتباطات المخصصة لمجموعة \"$1\".\n\nللحصول على تعريف أكثر أنظر هذه <nowiki>[[MediaWiki:$2]]</nowiki> الرسالة.",
- "cite_error_references_no_text": "وسم <code>&lt;ref&gt;</code> غير صحيح؛\nلا نص تم توفيره للمراجع المسماة <code>$1</code>",
- "cite_error_included_ref": "إغلاق <code>&lt;/ref&gt;</code> مفقود لوسم <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "وسم <code>&lt;ref&gt;</code> موجود، لكن لا وسم <code>&lt;references/&gt;</code> تم العثور عليه",
- "cite_error_group_refs_without_references": "وسوم <code>&lt;ref&gt;</code> موجودة لمجموعة اسمها \"$1\"، ولكن لم يتم العثور على وسم <code>&lt;references group=\"$1\"/&gt;</code> أو هناك وسم <code>&lt;/ref&gt;</code> ناقص",
- "cite_error_references_group_mismatch": "الوسم <code>&lt;ref&gt;</code> في <code>&lt;references&gt;</code> فيه خاصية group متضاربة \"$1\".",
- "cite_error_references_missing_group": "الوسم <code>&lt;ref&gt;</code> المُعرّف في <code>&lt;references&gt;</code> فيه خاصية group \"$1\" التي لا تظهر في النص السابق.",
- "cite_error_references_missing_key": "الوسم <code>&lt;ref&gt;</code> ذو الاسم \"$1\" المُعرّف في <code>&lt;references&gt;</code> غير مستخدم في النص السابق.",
- "cite_error_references_no_key": "الوسم <code>&lt;ref&gt;</code> المعرف في <code>&lt;references&gt;</code> ليس له خاصة اسم.",
- "cite_error_empty_references_define": "الوسم <code>&lt;ref&gt;</code> المُعرّف في <code>&lt;references&gt;</code> بالاسم \"$1\" ليس له محتوى.",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\"><b>^</b> $2</span> $3</li>",
- "cite_references_link_many_format_backlink_labels": "أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي أأ أب أت أث أج أح أخ أد أذ أر أز أس أش أص أض أط أظ أع أغ أف أق أك أل أم أن أه أو أي بأ بب بت بث بج بح بخ بد بذ بر بز بس بش بص بض بط بظ بع بغ بف بق بك بل بم بن به بو بي تأ تب تت تث تج تح تخ تد تذ تر تز تس تش تص تض تط تظ تع تغ تف تق تك تل تم تن ته تو تي ثأ ثب ثت ثث ثج ثح ثخ ثد ثذ ثر ثز ثس ثش ثص ثض ثط ثظ ثع ثغ ثف ثق ثك ثل ثم ثن ثه ثو ثي جأ جب جت جث جج جح جخ جد جذ جر جز جس جش جص جض جط جظ جع جغ جف جق جك جل جم جن جه جو جي حأ حب حت حث حج حح حخ حد حذ حر حز حس حش حص حض حط حظ حع حغ حف حق حك حل حم حن حه حو حي خأ خب خت خث خج خح خخ خد خذ خر خز خس خش خص خض خط خظ خع خغ خف خق خك خل خم خن خه خو خي دأ دب دت دث دج دح دخ دد دذ در دز دس دش دص دض دط دظ دع دغ دف دق دك دل دم دن ده دو دي ذأ ذب ذت ذث ذج ذح ذخ ذد ذذ ذر ذز ذس ذش ذص ذض ذط ذظ ذع ذغ ذف ذق ذك ذل ذم ذن ذه ذو ذي رأ رب رت رث رج رح رخ رد رذ رر رز رس رش رص رض رط رظ رع رغ رف رق رك رل رم رن ره رو ري زأ زب زت زث زج زح زخ زد زذ زر زز زس زش زص زض زط زظ زع زغ زف زق زك زل زم زن زه زو زي سأ سب ست سث سج سح سخ سد سذ سر سز سس سش سص سض سط سظ سع سغ سف سق سك سل سم سن سه سو سي شأ شب شت شث شج شح شخ شد شذ شر شز شس شش شص شض شط شظ شع شغ شف شق شك شل شم شن شه شو شي صأ صب صت صث صج صح صخ صد صذ صر صز صس صش صص صض صط صظ صع صغ صف صق صك صل صم صن صه صو صي ضأ ضب ضت ضث ضج ضح ضخ ضد ضذ ضر ضز ضس ضش ضص ضض ضط ضظ ضع ضغ ضف ضق ضك ضل ضم ضن ضه ضو ضي طأ طب طت طث طج طح طخ طد طذ طر طز طس طش طص طض طط طظ طع طغ طف طق طك طل طم طن طه طو طي ظأ ظب ظت ظث ظج ظح ظخ ظد ظذ ظر ظز ظس ظش ظص ظض ظط ظظ ظع ظغ ظف ظق ظك ظل ظم ظن ظه ظو ظي عأ عب عت عث عج عح عخ عد عذ عر عز عس عش عص عض عط عظ عع عغ عف عق عك عل عم عن عه عو عي غأ غب غت غث غج غح غخ غد غذ غر غز غس غش غص غض غط غظ غع غغ غف غق غك غل غم غن غه غو غي فأ فب فت فث فج فح فخ فد فذ فر فز فس فش فص فض فط فظ فع فغ فف فق فك فل فم فن فه فو في قأ قب قت قث قج قح قخ قد قذ قر قز قس قش قص قض قط قظ قع قغ قف قق قك قل قم قن قه قو قي كأ كب كت كث كج كح كخ كد كذ كر كز كس كش كص كض كط كظ كع كغ كف كق كك كل كم كن كه كو كي لأ لب لت لث لج لح لخ لد لذ لر لز لس لش لص لض لط لظ لع لغ لف لق لك لل لم لن له لو لي مأ مب مت مث مج مح مخ مد مذ مر مز مس مش مص مض مط مظ مع مغ مف مق مك مل مم من مه مو مي نأ نب نت نث نج نح نخ ند نذ نر نز نس نش نص نض نط نظ نع نغ نف نق نك نل نم نن نه نو ني هأ هب هت هث هج هح هخ هد هذ هر هز هس هش هص هض هط هظ هع هغ هف هق هك هل هم هن هه هو هي وأ وب وت وث وج وح وخ ود وذ ور وز وس وش وص وض وط وظ وع وغ وف وق وك ول وم ون وه وو وي يأ يب يت يث يج يح يخ يد يذ ير يز يس يش يص يض يط يظ يع يغ يف يق يك يل يم ين يه يو يي",
- "cite_references_link_accessibility_label": "تعدى المحتوى الحالي إلى أعلى الصفحة",
- "cite_references_link_many_accessibility_label": "تعدى إلى الأعلى ل:"
-}
diff --git a/extensions/Cite/i18n/core/arz.json b/extensions/Cite/i18n/core/arz.json
deleted file mode 100644
index efa83912..00000000
--- a/extensions/Cite/i18n/core/arz.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ghaly",
- "Meno25",
- "Ramsis II"
- ]
- },
- "cite-desc": "بيضيف التاجز <nowiki><ref[ name=id]></nowiki> و <nowiki><references/></nowiki> ، للاستشهاد",
- "cite_error": "المرجع غلط: $1",
- "cite_error_ref_numeric_key": "التاج <code>&lt;ref&gt;</code> مش صحيح؛\nالاسم ماينفعش يكون عدد صحيح بسيط. استخدم عنوان بيوصف",
- "cite_error_ref_no_key": "التاج <code>&lt;ref&gt;</code> مش صحيح؛\nالمراجع اللى من غير محتوى لازميكون ليها اسم",
- "cite_error_ref_too_many_keys": "التاج <code>&lt;ref&gt;</code> مش صحيح؛\nأسامى مش صحيحة، يعنى مثلا: كتير قوي",
- "cite_error_ref_no_input": "تاج <code>&lt;ref&gt;</code> مش صحيح؛\nالمراجع اللى من غير اسم لازم يكون ليها محتوى",
- "cite_error_references_invalid_parameters": "مش صحيح <code>&lt;references&gt;</code> تاج;\nمافيش محددات مسموح بيها.\nاستخدم <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "مش صحيح <code>&lt;references&gt;</code> تاج;\nمحدد \"group\" مسموح بيه بس.\nاستخدم <code>&lt;references /&gt;</code>, or <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "علامات الوصلات الراجعة المخصصة خلصت.\nعرف اكتر فى رسالة <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_references_no_text": "مش صحيح <code>&lt;ref&gt;</code> تاج;\nمافيش نص متوافر فى المراجع اللى اسمها<code>$1</code>",
- "cite_error_included_ref": "إغلاق <code>&lt;/ref&gt;</code> مفقود لوسم <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> التاجز موجوده, بس مافيش <code>&lt;references/&gt;</code> تاجز اتلقت",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> فى تاجز موجوده لمجموعه اسمها \"$1\", بس مافيش مقابلها تاجز <code>&lt;references group=\"$1\"/&gt;</code> اتلقت",
- "cite_references_link_many_format_backlink_labels": "أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ى أأ أب أت أث أج أح أخ أد أذ أر أز أس أش أص أض أط أظ أع أغ أف أق أك أل أم أن أه أو أى بأ بب بت بث بج بح بخ بد بذ بر بز بس بش بص بض بط بظ بع بغ بف بق بك بل بم بن به بو بى تأ تب تت تث تج تح تخ تد تذ تر تز تس تش تص تض تط تظ تع تغ تف تق تك تل تم تن ته تو تى ثأ ثب ثت ثث ثج ثح ثخ ثد ثذ ثر ثز ثس ثش ثص ثض ثط ثظ ثع ثغ ثف ثق ثك ثل ثم ثن ثه ثو ثى جأ جب جت جث جج جح جخ جد جذ جر جز جس جش جص جض جط جظ جع جغ جف جق جك جل جم جن جه جو جى حأ حب حت حث حج حح حخ حد حذ حر حز حس حش حص حض حط حظ حع حغ حف حق حك حل حم حن حه حو حى خأ خب خت خث خج خح خخ خد خذ خر خز خس خش خص خض خط خظ خع خغ خف خق خك خل خم خن خه خو خى دأ دب دت دث دج دح دخ دد دذ در دز دس دش دص دض دط دظ دع دغ دف دق دك دل دم دن ده دو دى ذأ ذب ذت ذث ذج ذح ذخ ذد ذذ ذر ذز ذس ذش ذص ذض ذط ذظ ذع ذغ ذف ذق ذك ذل ذم ذن ذه ذو ذى رأ رب رت رث رج رح رخ رد رذ رر رز رس رش رص رض رط رظ رع رغ رف رق رك رل رم رن ره رو رى زأ زب زت زث زج زح زخ زد زذ زر زز زس زش زص زض زط زظ زع زغ زف زق زك زل زم زن زه زو زى سأ سب ست سث سج سح سخ سد سذ سر سز سس سش سص سض سط سظ سع سغ سف سق سك سل سم سن سه سو سى شأ شب شت شث شج شح شخ شد شذ شر شز شس شش شص شض شط شظ شع شغ شف شق شك شل شم شن شه شو شى صأ صب صت صث صج صح صخ صد صذ صر صز صس صش صص صض صط صظ صع صغ صف صق صك صل صم صن صه صو صى ضأ ضب ضت ضث ضج ضح ضخ ضد ضذ ضر ضز ضس ضش ضص ضض ضط ضظ ضع ضغ ضف ضق ضك ضل ضم ضن ضه ضو ضى طأ طب طت طث طج طح طخ طد طذ طر طز طس طش طص طض طط طظ طع طغ طف طق طك طل طم طن طه طو طى ظأ ظب ظت ظث ظج ظح ظخ ظد ظذ ظر ظز ظس ظش ظص ظض ظط ظظ ظع ظغ ظف ظق ظك ظل ظم ظن ظه ظو ظى عأ عب عت عث عج عح عخ عد عذ عر عز عس عش عص عض عط عظ عع عغ عف عق عك عل عم عن عه عو عى غأ غب غت غث غج غح غخ غد غذ غر غز غس غش غص غض غط غظ غع غغ غف غق غك غل غم غن غه غو غى فأ فب فت فث فج فح فخ فد فذ فر فز فس فش فص فض فط فظ فع فغ فف فق فك فل فم فن فه فو فى قأ قب قت قث قج قح قخ قد قذ قر قز قس قش قص قض قط قظ قع قغ قف قق قك قل قم قن قه قو قى كأ كب كت كث كج كح كخ كد كذ كر كز كس كش كص كض كط كظ كع كغ كف كق كك كل كم كن كه كو كى لأ لب لت لث لج لح لخ لد لذ لر لز لس لش لص لض لط لظ لع لغ لف لق لك لل لم لن له لو لى مأ مب مت مث مج مح مخ مد مذ مر مز مس مش مص مض مط مظ مع مغ مف مق مك مل مم من مه مو مى نأ نب نت نث نج نح نخ ند نذ نر نز نس نش نص نض نط نظ نع نغ نف نق نك نل نم نن نه نو نى هأ هب هت هث هج هح هخ هد هذ هر هز هس هش هص هض هط هظ هع هغ هف هق هك هل هم هن هه هو هى وأ وب وت وث وج وح وخ ود وذ ور وز وس وش وص وض وط وظ وع وغ وف وق وك ول وم ون وه وو وى يأ يب يت يث يج يح يخ يد يذ ير يز يس يش يص يض يط يظ يع يغ يف يق يك يل يم ين يه يو يى"
-}
diff --git a/extensions/Cite/i18n/core/as.json b/extensions/Cite/i18n/core/as.json
deleted file mode 100644
index c99a3dd4..00000000
--- a/extensions/Cite/i18n/core/as.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bishnu Saikia",
- "Gitartha.bordoloi",
- "Reedy"
- ]
- },
- "cite-desc": "উদ্ধৃতিৰ বাবে <nowiki><ref[ name=id]></nowiki> আৰু <nowiki><references/></nowiki> টেগ্‌সমূহ যোগ কৰে",
- "cite_error": "উদ্ধৃতি ত্ৰুটি: $1",
- "cite_error_ref_numeric_key": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nনাম কোনো সৰল পূৰ্ণসংখ্যা হ'ব নোৱাৰে। এটা বৰ্ণনামূলক শিৰোনাম ব্যৱহাৰ কৰক।",
- "cite_error_ref_no_key": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nসমলবিহীন refসমূহৰ অৱশ্যেই এটা নাম থাকিব লাগিব।",
- "cite_error_ref_too_many_keys": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nঅবৈধ নাম, যেনে- বহুসংখ্যক",
- "cite_error_ref_no_input": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\nনামবিহীন refসমূহৰ অৱশ্যেই সমল থাকিব লাগিব।",
- "cite_error_references_invalid_parameters": "অবৈধ <code>&lt;references&gt;</code> টেগ;\nকোনো পেৰামিটাৰ অনুমোদন কৰা হোৱা নাই।\n<code>&lt;references /&gt;</code> ব্যৱহাৰ কৰক।",
- "cite_error_references_invalid_parameters_group": "অবৈধ <code>&lt;references&gt;</code> টেগ;\nকেৱল পেৰামিটাৰ \"গোট\"ক অনুমতি দিয়া হৈছে।\n<code>&lt;references /&gt;</code>, বা <code>&lt;references group=\"...\" /&gt;</code> ব্যৱহাৰ কৰক",
- "cite_error_references_no_backlink_label": "কাষ্টম বেকলিংক লেবেল শেষ হৈছে।\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> বাৰ্তাত আৰু সংজ্ঞা দিয়ক।",
- "cite_error_no_link_label_group": "\"$1\" গোটৰ বাবে কাষ্টম লিংক লেবেল উকলিছে।\n<nowiki>[[MediaWiki:$2]]</nowiki> বাৰ্তাত আৰু সংজ্ঞা দিয়ক।",
- "cite_error_references_no_text": "অবৈধ <code>&lt;ref&gt;</code> টেগ;\n<code>$1</code> নামৰ refৰ বাবে কোনো পাঠ্য প্ৰদান কৰা হোৱা নাই",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> বন্ধ কৰা হৈছে; <code>&lt;ref&gt;</code> টেগৰ বাবে পোৱা নাই",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> টেগ্‌সমূহ আছে, কিন্তু কোনো <code>&lt;references/&gt;</code> বা <code>&#123;&#123;Reflist&#125;&#125;</code> টেগ্‌ পোৱা নগ'ল। অনুগ্ৰহ কৰি প্ৰবন্ধৰ শেষ অংশত ওপৰোক্ত টেগ্‌ যোগ দিয়ক।",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> টেগ্‌সমূহ \"$1\" নামৰ এটা গোটৰ বাবে আছে, কিন্তু তাৰ <code>&lt;references group=\"$1\"/&gt;</code> টেগ্‌ পোৱা নগ'ল",
- "cite_error_references_group_mismatch": "\"$1\" গোটৰ ক্ষেত্ৰত <code>&lt;references&gt;</code>ৰ <code>&lt;ref&gt;</code> টেগ্‌ ব্যৱহাৰত সমস্যা হৈছে।",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code>ত দিয়া <code>&lt;ref&gt;</code> টেগৰ \"$1\" গোট এট্ট্ৰিবিউট আছে, যিটো পূৰ্বৰ পাঠ্যত ওলোৱা নাই।",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code>ত দিয়া \"$1\" নামৰ <code>&lt;ref&gt;</code> টেগ্‌টো পূৰ্বৰ পাঠ্যত ব্যৱহাৰ কৰা নাই।",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code>ত দিয়া <code>&lt;ref&gt;</code> টেগৰ কোনো নাম আবণ্টন নাই।",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code>ত দিয়া \"$1\" নামৰ <code>&lt;ref&gt;</code> টেগৰ কোনো সমল নাই।"
-}
diff --git a/extensions/Cite/i18n/core/ast.json b/extensions/Cite/i18n/core/ast.json
deleted file mode 100644
index 8b42f9f0..00000000
--- a/extensions/Cite/i18n/core/ast.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Esbardu",
- "Xuacu"
- ]
- },
- "cite-desc": "Añade les etiquetes <nowiki><ref[ name=id]></nowiki> y <nowiki><references/></nowiki> pa les cites",
- "cite_error": "Error de cita: $1",
- "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> non válida; el nome nun pue ser un enteru simple, usa un títulu descriptivu",
- "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> non válida; les referencies ensin conteníu han tener un nome",
- "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> non válida; nomes non válidos (p.ex. demasiaos)",
- "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> non válida; les referencies ensin nome han tener conteníu",
- "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> non válida; nun se permiten parámetros, usa <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> non válida;\nnamái se permite'l parámetru \"group\".\nUsa <code>&lt;references /&gt;</code>, o bien <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Etiquetes personalizaes agotaes.\nDefini más nel mensaxe <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Nun queden más etiquetes d'enllaz personalizáu pal grupu \"$1\".\nDefine más nel mensaxe <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> non válida; nun se conseñó testu pa les referencies nomaes <code>$1</code>",
- "cite_error_included_ref": "Falta <code>&lt;/ref&gt;</code> pa la etiqueta <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "Les etiquetes <code>&lt;ref&gt;</code> esisten pa un grupu llamáu \"$1\", pero nun s'alcontró la etiqueta <code>&lt;references group=\"$1\"/&gt;</code> correspondiente, o falta un cierre <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "La etiqueta <code>&lt;ref&gt;</code> en <code>&lt;references&gt;</code> tien un conflictu col atributu de grupu \"$1\".",
- "cite_error_references_missing_group": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> tien l'atributu de grupu \"$1\" que nun apaez nel testu anterior.",
- "cite_error_references_missing_key": "La etiqueta <code>&lt;ref&gt;</code> col nome \"$1\" definida en <code>&lt;references&gt;</code> nun s'utiliza nel testu anterior.",
- "cite_error_references_no_key": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> nun tien dengún atributu de nome.",
- "cite_error_empty_references_define": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> col nome \"$1\" nun tien conteníu.",
- "cite_references_link_accessibility_label": "Saltar arriba",
- "cite_references_link_many_accessibility_label": "Saltar a:",
- "cite_error_refs_without_references_category-desc": "La páxina tien definíes <code><nowiki><ref></nowiki></code>s sin nengún grupu específicu, pero nun tien una etiqueta <code><nowiki><references /></nowiki></code> esplícita."
-}
diff --git a/extensions/Cite/i18n/core/ba.json b/extensions/Cite/i18n/core/ba.json
deleted file mode 100644
index 2fafb962..00000000
--- a/extensions/Cite/i18n/core/ba.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Assele"
- ]
- },
- "cite-desc": "Төшөрмәләр өсөн <nowiki><ref[ name=id]></nowiki> һәм <nowiki><references/></nowiki> билдәләрен өҫтәй",
- "cite_error": "Өҙөмтә хатаһы: $1",
- "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\nисем бөтөн һан була алмай. Тасуирларлыҡ исем ҡулланығыҙ.",
- "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\nэстәлекһеҙ төшөрмәнең исеме булырға тейеш.",
- "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\nисемдәр дөрөҫ түгел, бәлки, бигерәк күп",
- "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\nисемһеҙ төшөрмәнең эстәлеге булырға тейеш.",
- "cite_error_references_invalid_parameters": "<code>&lt;references&gt;</code> билдәһе дөрөҫ түгел;\nпараметрҙар рөхсәт ителмәй.\n<code>&lt;references /&gt;</code> ҡулланығыҙ.",
- "cite_error_references_invalid_parameters_group": "<code>&lt;references&gt;</code> билдәһе дөрөҫ түгел;\n\"group\" параметры ғына рөхсәт ителә.\n<code>&lt;references /&gt;</code> йәки <code>&lt;references group=\"...\" /&gt;</code> ҡулланығыҙ.",
- "cite_error_references_no_backlink_label": "Кире ҡайтарыу һылтанмалары өсөн хәрефтәр етмәй.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> система хәбәрен киңәйтергә кәрәк.",
- "cite_error_no_link_label_group": "\"$1\" төркөмө өсөн ҡулланыусы һылтанмалары етмәй.\n[[MediaWiki:$2]] система хәбәрендә күберәк билдәләгеҙ.",
- "cite_error_references_no_text": "<code>&lt;ref&gt;</code> билдәһе дөрөҫ түгел;\n<code>$1</code> төшөрмәләре өсөн текст юҡ",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> билдәһе өсөн <code>&lt;/ref&gt;</code> ябыу билдәһе юҡ",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> билдәһе бар, әммә <code>&lt;references/&gt;</code> билдәһе юҡ",
- "cite_error_group_refs_without_references": "\"$1\" төркөмө өсөн <code>&lt;ref&gt;</code> билдәһе бар, әммә <code>&lt;references group=\"$1\"/&gt;</code> билдәһе юҡ",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> билдәһенең <code>&lt;ref&gt;</code> билдәһендә \"$1\" төркөмө атрибуты ҡаршылыҡтар тыуҙыра.",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code> билдәһенең <code>&lt;ref&gt;</code> билдәһендә \"$1\" төркөмө атрибуты үрҙәге текста осрамай.",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code> билдәһенең \"$1\" исемле <code>&lt;ref&gt;</code> билдәһе үрҙәге текста ҡулланылмай.",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code> билдәһенең <code>&lt;ref&gt;</code> билдәһендә исем атрибуты юҡ.",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code> билдәһенең \"$1\" исемле <code>&lt;ref&gt;</code> билдәһенең эстәлеге юҡ."
-}
diff --git a/extensions/Cite/i18n/core/bcl.json b/extensions/Cite/i18n/core/bcl.json
deleted file mode 100644
index 3678296b..00000000
--- a/extensions/Cite/i18n/core/bcl.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Geopoet"
- ]
- },
- "cite-desc": "Minadugang nin <nowiki><ref[ name=id]></nowiki> asin <nowiki><references/></nowiki> na mga tatak, para sa mga toltolan",
- "cite_error": "Sambiton an kasalaan: $1",
- "cite_error_ref_numeric_key": "Imbalido an <code>&lt;ref&gt;</code> tatak; an pangaran dae puwede na magin sarong simplehon na bilog na numero. Maggamit nin sarong deskriptibong titulo",
- "cite_error_ref_no_key": "Imbalido an <code>&lt;ref&gt;</code> tatak; an mga toltolan na mayong kalamnan dapat magkaigwa nin pangaran",
- "cite_error_ref_too_many_keys": "Imbalido an <code>&lt;ref&gt;</code> tatak; imbalidong mga pangaran, e.g. grabe kadakol",
- "cite_error_ref_no_input": "Imbalido an <code>&lt;ref&gt;</code> tatak; an mga toltolan na mayong pangaran dapat magkaigwa nin kalamnan",
- "cite_error_references_invalid_parameters": "Imbalido an <code>&lt;references&gt;</code> tatak; mayong mga parametro an pinagtutugot. Maggamit nin <code>&lt;mga toltolan /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Imbalido an <code>&lt;references&gt;</code> tatak; an parametrong \"grupo\" sana an pinagtutugot. Maggamit nin <code>&lt;mga toltolan /&gt;</code>, o <code>&lt;mga toltolang grupo=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Naubusan nin pankostumbreng sugpon-panlikod na kamarkahan.\nPakahulugan nin dagdag tabi an <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> mensahe.",
- "cite_error_no_link_label_group": "Naubusan nin pankostumbreng sugpon nin mga kamarkahan para sa grupo \"$1\".\nPakahulugan nin dagdag tabi an <nowiki>[[MediaWiki:$2]]</nowiki> mensahe.",
- "cite_error_references_no_text": "Imbalidong <code>&lt;ref&gt;</code> tatak; mayong teksto na ipinagtao para sa reperensiya na pinagngaranan na <code>$1</code>",
- "cite_error_included_ref": "Ipinagsasara <code>&lt;/ref&gt;</code> nawawara para sa <code>&lt;ref&gt;</code> na tatak",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> mga tatak eksistido na, alagad mayo nin <code>&lt;references/&gt;</code> na tatak an nanagboan",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> mga tatak na eksistido para sa sarong grupo na pinagngaranan na \"$1\", alagad mayong kinasungkoan na <code>&lt;mga pinapanungdanan na grupo=\"$1\"/&gt;</code>na tatak an nanagboan, o sarong panarado <code>&lt;/ref&gt;</code> an nawawara",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tatak sa laog na <code>&lt;references&gt;</code> igwa nin pangrupong kumplikto sa hitsurahon na \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tatak na pinagkahulugan sa <code>&lt;references&gt;</code> igwa nin pangrupong hitsurahon na \"$1\" na dae ipinapahiling sa nakaaging teksto.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> tatak na igwang pangaran na \"$1\" na pinagkahulugan sa <code>&lt;references&gt;</code> na dae pinaggagamit sa nakaaging teksto.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> tatak na pinagkahulugan sa <code>&lt;references&gt;</code> na mayo nin hitsurahon sa pangaran.",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> tatak na pinagkahulugan sa <code>&lt;references&gt;</code> na igwang pangaran na \"$1\" na mayo tabing kalamnan.",
- "cite_references_link_accessibility_label": "Lukso paitaas",
- "cite_references_link_many_accessibility_label": "Lukso paitaas paduman sa:"
-}
diff --git a/extensions/Cite/i18n/core/be-tarask.json b/extensions/Cite/i18n/core/be-tarask.json
deleted file mode 100644
index b0dd80d7..00000000
--- a/extensions/Cite/i18n/core/be-tarask.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "EugeneZelenko",
- "Jim-by",
- "Red Winged Duck",
- "Wizardist"
- ]
- },
- "cite-desc": "Дадае тэгі <nowiki><ref[ name=id]></nowiki> і <nowiki><references/></nowiki> для зносак",
- "cite_error": "Памылка цытаваньня: $1",
- "cite_error_ref_numeric_key": "Няслушны тэг <code>&lt;ref&gt;</code>;\nназва ня можа быць проста лікам, ужывайце апісальную назву",
- "cite_error_ref_no_key": "Няслушны тэг <code>&lt;ref&gt;</code>;\nпустыя тэгі <code>ref</code> мусяць мець назву",
- "cite_error_ref_too_many_keys": "Няслушны тэг <code>&lt;ref&gt;</code>;\nняслушныя назвы, ці іх было зашмат",
- "cite_error_ref_no_input": "Няслушны тэг <code>&lt;ref&gt;</code>;\nкрыніцы бяз назваў мусяць мець зьмест",
- "cite_error_references_invalid_parameters": "Няслушны тэг <code>&lt;references&gt;</code>;\nнедазволеныя парамэтры.\nКарыстайцеся <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Няслушны тэг <code>&lt;references&gt;</code>;\nдазволена карыстацца толькі парамэтрам «group».\nКарыстайцеся <code>&lt;references /&gt;</code>, ці <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Не хапае сымбаляў для адваротных спасылак.\nНеабходна пашырыць сыстэмнае паведамленьне <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Скончыліся нестандартныя меткі спасылак для групы «$1».\nВызначыце болей у паведамленьні <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Няслушны тэг <code>&lt;ref&gt;</code>;\nняма тэксту ў назьве зносак <code>$1</code>",
- "cite_error_included_ref": "Няма закрываючага тэга <code>&lt;/ref&gt;</code> пасьля адкрытага тэга <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Тэг <code>&lt;ref&gt;</code> існуе, але ня знойдзена тэга <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Тэг <code>&lt;ref&gt;</code> існуе для групы «$1», але адпаведнага тэга <code>&lt;references group=\"$1\"/&gt;</code> ня знойдзена. Магчыма, адсутнічае фінальны тэг <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "Тэг <code>&lt;ref&gt;</code> у <code>&lt;references&gt;</code> утрымлівае канфліктуючы атрыбут групы «$1».",
- "cite_error_references_missing_group": "Тэг <code>&lt;ref&gt;</code> вызначаны ў <code>&lt;references&gt;</code> утрымлівае атрыбут групы «$1», які раней не выкарыстоўваўся ў тэксьце.",
- "cite_error_references_missing_key": "Тэг <code>&lt;ref&gt;</code> з назвай «$1» вызначаны ў <code>&lt;references&gt;</code> не выкарыстоўваўся ў папярэднім тэксьце.",
- "cite_error_references_no_key": "Тэг <code>&lt;ref&gt;</code> вызначаны ў <code>&lt;references&gt;</code> ня мае атрыбуту назвы.",
- "cite_error_empty_references_define": "Тэг <code>&lt;ref&gt;</code> вызначаны ў <code>&lt;references&gt;</code> з назвай «$1» ня мае зьместу.",
- "cite_references_link_accessibility_label": "Угару",
- "cite_references_link_many_accessibility_label": "Угару да:"
-}
diff --git a/extensions/Cite/i18n/core/bg.json b/extensions/Cite/i18n/core/bg.json
deleted file mode 100644
index 48621850..00000000
--- a/extensions/Cite/i18n/core/bg.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Borislav",
- "DCLXVI",
- "Spiritia"
- ]
- },
- "cite-desc": "Добавя етикетите <nowiki><ref[ name=id]></nowiki> и <nowiki><references/></nowiki>, подходящи за цитиране",
- "cite_error": "Грешка при цитиране: $1",
- "cite_error_ref_numeric_key": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' името не може да бъде число, използва се описателно име",
- "cite_error_ref_no_key": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' етикетите без съдържание трябва да имат име",
- "cite_error_ref_too_many_keys": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' грешка в името, например повече от едно име на етикета",
- "cite_error_ref_no_input": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' етикетите без име трябва да имат съдържание",
- "cite_error_references_invalid_parameters": "'''Грешка в етикет <code>&lt;references&gt;</code>:''' използва се без параметри, така: <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Невалиден етикет <code>&lt;references&gt;</code>;\nпозволен е само параметър \"group\".\nИзползвайте <code>&lt;references /&gt;</code> или <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Изчерпани са специалните етикети за обратна референция.\nОще етикети могат да се дефинират в системното съобщение <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_references_no_text": "'''Грешка в етикет <code>&lt;ref&gt;</code>:''' не е подаден текст за бележките на име <code>$1</code>",
- "cite_error_included_ref": "Липсва затварящ етикет <code>&lt;/ref&gt;</code> след отварящия етикет <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Присъстват етикети <code>&lt;ref&gt;</code>; липсва етикет <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Присъстват етикети <code>&lt;ref&gt;</code> за групата \"$1\"; но липсва съответният етикет <code>&lt;references group=\"$1\"/&gt;</code>"
-}
diff --git a/extensions/Cite/i18n/core/bn.json b/extensions/Cite/i18n/core/bn.json
deleted file mode 100644
index db03efc8..00000000
--- a/extensions/Cite/i18n/core/bn.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Aftab1995",
- "Bellayet",
- "Nasir8891",
- "Zaheen"
- ]
- },
- "cite-desc": "উদ্ধৃতির জন্য, <nowiki><ref[ name=id]></nowiki> এবং <nowiki><references/></nowiki> ট্যাগসমূহ যোগ করুন",
- "cite_error": "উদ্ধৃতি ত্রুটি: $1",
- "cite_error_ref_numeric_key": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; নাম কোন সরল পূর্ণসংখ্যা হতে পারবেনা, একটি বিবরণমূলক শিরোনাম ব্যবহার করুন",
- "cite_error_ref_no_key": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; বিষয়বস্তুহীন ref সমূহের অবশ্যই নাম থাকতে হবে",
- "cite_error_ref_too_many_keys": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; অবৈধ নাম (যেমন- সংখ্যাতিরিক্ত)",
- "cite_error_ref_no_input": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; নামবিহীন ref সমূহের অবশ্যই বিষয়বস্তু থাকতে হবে",
- "cite_error_references_invalid_parameters": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; কোন প্যারামিটার অনুমোদিত নয়, <code>&lt;references /&gt;</code> ব্যবহার করুন",
- "cite_error_references_invalid_parameters_group": "ত্রুটিপূর্ণ <code>&lt;references&gt;</code> ট্যাগ;\nকেবলমাত্র \"group\" প্যারামিটার ব্যবহার কর যাবে।\n<code>&lt;references /&gt;</code>, অথবা <code>&lt;references group=\"...\" /&gt;</code> ব্যবহার করুন",
- "cite_error_references_no_backlink_label": "পছন্দমাফিক ব্যাকলিংক লেবেলের সংখ্যা ফুরিয়ে গেছে।\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> বার্তায় আরও সংজ্ঞায়িত করুন",
- "cite_error_no_link_label_group": "গ্রুপ \"$1\" এর জন্য কাস্টম লিংক ব্যবহারের সীমানা পেরিয়েছে।\n<nowiki>[[MediaWiki:$2]]</nowiki> বার্তায় আরও সজ্ঞায়িত করুন।",
- "cite_error_references_no_text": "অবৈধ <code>&lt;ref&gt;</code> ট্যাগ; <code>$1</code> নামের ref গুলির জন্য কোন টেক্সট প্রদান করা হয়নি",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> ট্যাগের ক্ষেত্রে <code>&lt;/ref&gt;</code> ট্যাগ যোগ করা হয়নি",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> ট্যাগ রয়েছে, কিন্তু কোনো <code>&lt;references/&gt;</code> ট্যাগ নেই",
- "cite_error_group_refs_without_references": "\"$1\" নামের গ্রুপের <code>&lt;ref&gt;</code> ট্যাগ রয়েছে, কিন্তু এর জন্য <code>&lt;references group=\"$1\"/&gt;</code> ট্যাগ দেয়া হয়নি",
- "cite_error_references_group_mismatch": "\"$1\" গ্রুপের ক্ষেত্রে <code>&lt;ref&gt;</code> ট্যাগ <code>&lt;references&gt;</code> ট্যাগের অংশে ব্যবহারে সমস্যা সৃষ্টি হয়েছে।"
-}
diff --git a/extensions/Cite/i18n/core/br.json b/extensions/Cite/i18n/core/br.json
deleted file mode 100644
index d3b9b48a..00000000
--- a/extensions/Cite/i18n/core/br.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Fohanno",
- "Fulup"
- ]
- },
- "cite-desc": "Ouzhpennañ a ra ar balizennoù <nowiki><ref[ name=id]></nowiki> ha <nowiki><references/></nowiki>, evit an arroudoù.",
- "cite_error": "Fazi arroud : $1",
- "cite_error_ref_numeric_key": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nn'hall ket an anv bezañ un niver anterin. Grit gant un titl deskrivus",
- "cite_error_ref_no_key": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nret eo d'an daveennoù goullo kaout un anv",
- "cite_error_ref_too_many_keys": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nanv direizh, niver re uhel da skouer",
- "cite_error_ref_no_input": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nret eo d'an daveennoù hep anv bezañ danvez enno",
- "cite_error_references_invalid_parameters": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nn'eo aotreet arventenn ebet.\nGrit gant ar valizenn <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Fazi implijout ar valizenn <code>&lt;ref&gt;</code> ;\nn'eus nemet an arventenn \"strollad\" zo aotreet.\nGrit gant ar valizenn <code>&lt;references /&gt;</code>, pe <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "N'eus ket a dikedennoù personelaet mui.\nSpisait un niver brasoc'h anezho er gemennadenn <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Tikedenn liamm bersonelaet ebet ken evit ar strollad \"$1\".\nTermenit re all e kemennadenn <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Balizenn <code>&lt;ref&gt;</code> direizh ;\nne oa bet lakaet tamm testenn ebet evit ar valizenn <code>$1</code>",
- "cite_error_included_ref": "Kod digeriñ <code>&lt;/ref&gt;</code> hep kod serriñ <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> balizennoù zo, met n'eus bet kavet balizenn <code>&lt;references/&gt;</code> ebet",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> balizennoù zo evit ur strollad anvet \"$1\", met n'eus bet kavet balizenn <code>&lt;references group=\"$1\"/&gt;</code> ebet o klotañ",
- "cite_error_references_group_mismatch": "Gant ar valizenn <code>&lt;ref&gt;</code> e <code>&lt;references&gt;</code> emañ an dezverk strollad trubuilhus \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> ar valizenn termenet e <code>&lt;references&gt;</code> eo dezhi un dezverk strollad \"$1\" na gaver ket en destenn a-raok.",
- "cite_error_references_missing_key": "N'eo ket bet implijet en destenn gent ar <code>&lt;ref&gt;</code> valizenn hec'h anv \"$1\" termenet e <code>&lt;references&gt;</code>.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> ar valizenn termenet e <code>&lt;references&gt;</code> n'he deus dezverk anv ebet.",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> ar valiezenn termenet e <code>&lt;references&gt;</code> dezhi an anv a \"$1\" zo goullo.",
- "cite_references_link_accessibility_label": "Lammat",
- "cite_references_link_many_accessibility_label": "Lammat da :"
-}
diff --git a/extensions/Cite/i18n/core/ca.json b/extensions/Cite/i18n/core/ca.json
deleted file mode 100644
index 85142a53..00000000
--- a/extensions/Cite/i18n/core/ca.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Davidpar",
- "Jordi Roqué",
- "SMP",
- "Vriullop"
- ]
- },
- "cite-desc": "Afegeix les etiquetes <nowiki><ref[ name=id]></nowiki> i <nowiki><references/></nowiki>, per a cites",
- "cite_error": "Error de citació: $1",
- "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nel nom no pot ser un nombre. Empreu una paraula o un títol descriptiu",
- "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nles refs sense contingut han de tenir nom",
- "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nempreu l'estructura <code>&lt;ref name=\"Nom\"&gt;</code>",
- "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> no vàlida; \nles referències sense nom han de tenir contingut",
- "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> no vàlida; \nno es permeten paràmetres. \nUseu <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> no vàlida;\núnicament es permet el paràmetre \"group\".\nUseu <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Hi ha massa etiquetes personalitzades.\nSe'n poden definir més a <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "No hi ha etiquetes vincle personalitzat per al grup \"$1\".\nDefineix més al missatge <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> no vàlida;\nno s'ha proporcionat text per les refs amb l'etiqueta <code>$1</code>",
- "cite_error_included_ref": "Es tanca el <code>&lt;/ref&gt;</code> que manca per una etiqueta <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Hi ha etiquetes <code>&lt;ref&gt;</code> però no s'ha trobat cap etiqueta <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Existeixen etiquetes <code>&lt;ref&gt;</code> pel grup «$1» però no l'etiqueta <code>&lt;references group=\"$1\"/&gt;</code> corresponent",
- "cite_error_references_group_mismatch": "L'etiqueta <code>&lt;ref&gt;</code> a <code>&lt;references&gt;</code> té un conflicte amb l'atribut de grup \"$1\".",
- "cite_error_references_missing_group": "L'etiqueta <code>&lt;ref&gt;</code> definida a <code>&lt;references&gt;</code> té l'atribut de grup \"$1\" que no apareix en el text anterior.",
- "cite_error_references_missing_key": "L'etiqueta <code>&lt;ref&gt;</code> amb el nom \"$1\" definida a <code>&lt;references&gt;</code> no s'utilitza en el text anterior.",
- "cite_error_references_no_key": "L'etiqueta <code>&lt;ref&gt;</code> definida a <code>&lt;references&gt;</code> no té cap atribut de nom.",
- "cite_error_empty_references_define": "L'etiqueta <code>&lt;ref&gt;</code> definida a <code>&lt;references&gt;</code> amb el nom \"$1\" no té contingut."
-}
diff --git a/extensions/Cite/i18n/core/ce.json b/extensions/Cite/i18n/core/ce.json
deleted file mode 100644
index affdc2d9..00000000
--- a/extensions/Cite/i18n/core/ce.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Умар"
- ]
- },
- "cite-desc": "<nowiki><ref[ name=id]></nowiki> а <nowiki><references/></nowiki> тегаш тӀетовжорашан тӀетуху",
- "cite_error": "ГӀалат дешнаш далорна $1",
- "cite_error_references_no_text": "Тег <code>&lt;ref&gt;</code> нийса яц; тIетовжаран <code>$1</code> йоза яздина дац",
- "cite_error_group_refs_without_references": "Группан «$1» йолуш йолу тегашца <code>&lt;ref&gt;</code> йогӀуш йолу тег <code>&lt;references group=\"$1\"/&gt;</code> ца карийна",
- "cite_references_link_many_format_backlink_labels": "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я аа аб ав аг ад ае ё аж аз аи ай ак ал ам ан ао ап ар ас ат ау аф ах ац ач аш ащ аъ аы аь аэ аю ая ба бб бв бг бд бе бж бз би бй бк бл бм бн бо бп бр бс бт бу бф бх бц бч бш бщ бъ бы бь бэ бю бя ва вб вв вг вд ве вж вз ви вй вк вл вм вн во вп вр вс вт ву вф вх вц вч вш вщ въ вы вь вэ вю вя га гб гв гг гд ге гж гз ги гй гк гл гм гн го гп гр гс гт гу гф гх гц гч гш гщ гъ гы гь гэ гю гя да дб дв дг дд де дж дз ди дй дк дл дм дн до дп др дс дт ду дф дх дц дч дш дщ дъ ды дь дэ дю дя еа еб ев ег ед ее еж ез еи ей ек ел ем ен ео еп ер ес ет еу еф ех ец еч еш ещ еъ еы еь еэ ею ея жа жб жв жг жд же жж жз жи жй жк жл жм жн жо жп жр жс жт жу жф жх жц жч жш жщ жъ жы жь жэ жю жя за зб зв зг зд зе зж зз зи зй зк зл зм зн зо зп зр зс зт зу зф зх зц зч зш зщ зъ зы зь зэ зю зя иа иб ив иг ид ие иж из ии ий ик ил им ин ио ип ир ис ит иу иф их иц ич иш ищ иъ иы иь иэ ию ия йа йб йв йг йд йе йж йз йи йй йк йл йм йн йо йп йр йс йт йу йф йх йц йч йш йщ йъ йы йь йэ йю йя ка кб кв кг кд ке кж кз ки кй кк кл км кн ко кп кр кс кт ку кф кх кц кч кш кщ къ кы кь кэ кю кя ла лб лв лг лд ле лж лз ли лй лк лл лм лн ло лп лр лс лт лу лф лх лц лч лш лщ лъ лы ль лэ лю ля ма мб мв мг мд ме мж мз ми мй мк мл мм мн мо мп мр мс мт му мф мх мц мч мш мщ мъ мы мь мэ мю мя на нб нв нг нд не нж нз ни нй нк нл нм нн но нп нр нс нт ну нф нх нц нч нш нщ нъ ны нь нэ ню ня оа об ов ог од ое ож оз ои ой ок ол ом он оо оп ор ос от оу оф ох оц оч ош ощ оъ оы оь оэ ою оя па пб пв пг пд пе пж пз пи пй пк пл пм пн по пп пр пс пт пу пф пх пц пч пш пщ пъ пы пь пэ пю пя ра рб рв рг рд ре рж рз ри рй рк рл рм рн ро рп рр рс рт ру рф рх рц рч рш рщ ръ ры рь рэ рю ря са сб св сг сд се сж сз си сй ск сл см сн со сп ср сс ст су сф сх сц сч сш сщ съ сы сь сэ сю ся та тб тв тг тд те тж тз ти тй тк тл тм тн то тп тр тс тт ту тф тх тц тч тш тщ тъ ты ть тэ тю тя уа уб ув уг уд уе уж уз уи уй ук ул ум ун уо уп ур ус ут уу уф ух уц уч уш ущ уъ уы уь уэ ую уя фа фб фв фг фд фе фж фз фи фй фк фл фм фн фо фп фр фс фт фу фф фх фц фч фш фщ фъ фы фь фэ фю фя ха хб хв хг хд хе хж хз хи хй хк хл хм хн хо хп хр хс хт ху хф хх хц хч хш хщ хъ хы хь хэ хю хя ца цб цв цг цд це цж цз ци цй цк цл цм цн цо цп цр цс цт цу цф цх цц цч цш цщ цъ цы ць цэ цю ця ча чб чв чг чд че чж чз чи чй чк чл чм чн чо чп чр чс чт чу чф чх чц чч чш чщ чъ чы чь чэ чю чя ша шб шв шг шд ше шж шз ши шй шк шл шм шн шо шп шр шс шт шу шф шх шц шч шш шщ шъ шы шь шэ шю шя ща щб щв щг щд ще щж щз щи щй щк щл щм щн що щп щр щс щт щу щф щх щц щч щш щщ щъ щы щь щэ щю щя ъа ъб ъв ъг ъд ъе ъж ъз ъи ъй ък ъл ъм ън ъо ъп ър ъс ът ъу ъф ъх ъц ъч ъш ъщ ъъ ъы ъь ъэ ъю ъя ыа ыб ыв ыг ыд ые ыж ыз ыи ый ык ыл ым ын ыо ып ыр ыс ыт ыу ыф ых ыц ыч ыш ыщ ыъ ыы ыь ыэ ыю ыя ьа ьб ьв ьг ьд ье ьж ьз ьи ьй ьк ьл ьм ьн ьо ьп ьр ьс ьт ьу ьф ьх ьц ьч ьш ьщ ьъ ьы ьь ьэ ью ья эа эб эв эг эд эе эж эз эи эй эк эл эм эн эо эп эр эс эт эу эф эх эц эч эш эщ эъ эы эь ээ эю эя юа юб юв юг юд юе юж юз юи юй юк юл юм юн юо юп юр юс ют юу юф юх юц юч юш ющ юъ юы юь юэ юю юя яа яб яв яг яд яе яж яз яи яй як ял ям ян яо яп яр яс ят яу яф ях яц яч яш ящ яъ яы яь яэ яю яя ӀӀ",
- "cite_references_link_accessibility_label": "Дехьа гӀо",
- "cite_references_link_many_accessibility_label": "Дехьа гӀо:"
-}
diff --git a/extensions/Cite/i18n/core/cs.json b/extensions/Cite/i18n/core/cs.json
deleted file mode 100644
index a5eac32b..00000000
--- a/extensions/Cite/i18n/core/cs.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Danny B.",
- "Li-sung",
- "Littledogboy",
- "Matěj Grabovský",
- "Mormegil",
- "Sp5uhe"
- ]
- },
- "cite-desc": "Přidává značky <nowiki><ref[ name=\"id\"]></nowiki> a&nbsp;<nowiki><references /></nowiki> na označení citací",
- "cite_error": "Chybná citace: $1",
- "cite_error_ref_numeric_key": "Chyba v tagu <code>&lt;ref&gt;</code>; názvem nesmí být prosté číslo, použijte popisné označení",
- "cite_error_ref_no_key": "Chyba v tagu <code>&lt;ref&gt;</code>; prázdné citace musí obsahovat název",
- "cite_error_ref_too_many_keys": "Chyba v tagu <code>&lt;ref&gt;</code>; chybné názvy, např. je jich příliš mnoho",
- "cite_error_ref_no_input": "Chyba v tagu <code>&lt;ref&gt;</code>; citace bez názvu musí mít vlastní obsah",
- "cite_error_references_invalid_parameters": "Chyba v tagu <code>&lt;references&gt;</code>; zde není dovolen parametr, použijte <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Neplatná značka <tt>&lt;references&gt;</tt>;\nje povolen pouze parametr „group“.\nPoužijte <tt>&lt;references /&gt;</tt> nebo <tt>&lt;references group=\"...\" /&gt;</tt>.",
- "cite_error_references_no_backlink_label": "Došla označení zpětných odkazů, přidejte jich několik do zprávy <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Došly definované značky pro skupinu „$1“.\nZvyšte jejich počet ve zprávě <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Chyba v tagu <code>&lt;ref&gt;</code>; citaci označené <code>$1</code> není určen žádný text",
- "cite_error_included_ref": "Chybí ukončovací <code>&lt;/ref&gt;</code> k&nbsp;tagu <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "Nalezena značka <code>&lt;ref&gt;</code> pro skupinu „$1“, ale neexistuje příslušná značka <code>&lt;references group=\"$1\"/&gt;</code> nebo chybí zavírací <code>&lt;/ref&gt;</code>.",
- "cite_error_references_group_mismatch": "Značka <code>&lt;ref&gt;</code> uvnitř <code>&lt;references&gt;</code> má definovánu jinou skupinu „$1“.",
- "cite_error_references_missing_group": "Značka <code>&lt;ref&gt;</code> uvnitř <code>&lt;references&gt;</code> používá skupinu „$1“, která se v předchozím textu neobjevuje.",
- "cite_error_references_missing_key": "Na <code>&lt;ref&gt;</code> se jménem „$1“ definovaný uvnitř <code>&lt;references&gt;</code> nejsou v předchozím textu žádné odkazy.",
- "cite_error_references_no_key": "U značky <code>&lt;ref&gt;</code> definované uvnitř <code>&lt;references&gt;</code> chybí atribut <code>name</code>.",
- "cite_error_empty_references_define": "U značky <code>&lt;ref&gt;</code> s názvem „$1“ definované uvnitř <code>&lt;references&gt;</code> chybí obsah.",
- "cite_references_link_accessibility_label": "Skočit nahoru",
- "cite_references_link_many_accessibility_label": "Skočit nahoru k:",
- "cite_error_refs_without_references_category-desc": "Tato stránka obsahuje značky <code><nowiki><ref></nowiki></code> bez určené skupiny, ale neobsahuje značku <code><nowiki><references /></nowiki></code>."
-}
diff --git a/extensions/Cite/i18n/core/cy.json b/extensions/Cite/i18n/core/cy.json
deleted file mode 100644
index 79fee51f..00000000
--- a/extensions/Cite/i18n/core/cy.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Lloffiwr",
- "Xxglennxx"
- ]
- },
- "cite-desc": "Yn ychwanegu tagiau <nowiki><ref[ name=id]></nowiki> a <nowiki><references/></nowiki>, ar gyfer cyfeiriadau",
- "cite_error": "Gwall cyfeirio: $1",
- "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> annilys;\nni all enw fod yn rif yn unig. Defnyddiwch deitl disgrifiadol.",
- "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> annilys;\nrhaid i dagiau ref sydd heb gynnwys iddynt gael enw",
- "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> annilys;\nenwau annilys; e.e. gormod ohonynt",
- "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> annilys;\nrhaid i dagiau ref heb enw iddynt gynnwys rhywbeth",
- "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> annilys;\nni chaniateir paramedrau.\nDefnyddiwch <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> annilys;\ndim ond y paramedr \"group\" a ganiateir.\nDefnyddiwch <code>&lt;references /&gt;</code>, neu <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Dim rhagor o labeli ôl-gyswllt ar gael.\nDiffiniwch ragor ohonynt yn y neges <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Wedi rhedeg allan o labeli dolenni unigryw ar gyfer y grŵp \"$1\".\nGallwch ddiffinio rhagor ohonynt yn y neges <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> annilys;\nni osodwyd unrhyw destun ar gyfer y 'ref' <code>$1</code>",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> clo yn eisiau ar gyfer y tag <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Mae tagiau <code>&lt;ref&gt;</code> yn bresennol, ond dim tag <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Mae tagiau <code>&lt;ref&gt;</code> yn bresennol ar gyfer y grwp \"$1\", ond ni chafwyd tag <code>&lt;references/&gt;</code>, ynteu roedd <code>&lt;/ref&gt;</code> terfynol yn eisiau.",
- "cite_error_references_group_mismatch": "Mae gan y tag <code>&lt;ref&gt;</code> oddi mewn i <code>&lt;references&gt;</code> briodoledd grŵp anghyson \"$1\".",
- "cite_error_references_missing_group": "Mae gan y tag <code>&lt;ref&gt;</code> a ddiffinir yn <code>&lt;references&gt;</code> briodoledd grŵp \"$1\" nag ydyw'n cael ei ddefnyddio yn y testun cynt.",
- "cite_error_references_missing_key": "Ni ddefnyddir y tag <code>&lt;ref&gt;</code> o'r enw \"$1\", a ddiffinir yn <code>&lt;references&gt;</code>, yn y testun blaenorol.",
- "cite_error_references_no_key": "Nid oes dim priodoledd o enw gan y tag <code>&lt;ref&gt;</code> a ddiffinir yn <code>&lt;references&gt;</code>",
- "cite_error_empty_references_define": "Does dim byd yn y tag <code>&lt;ref&gt;</code> a'r enw \"$1\" arno, sydd wedi ei ddiffinio oddi mewn i dagiau <code>&lt;references&gt;</code>.",
- "cite_references_link_accessibility_label": "Neidio am lan",
- "cite_references_link_many_accessibility_label": "Neidio lan i:"
-}
diff --git a/extensions/Cite/i18n/core/da.json b/extensions/Cite/i18n/core/da.json
deleted file mode 100644
index fcc2e3bb..00000000
--- a/extensions/Cite/i18n/core/da.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Byrial",
- "Christian List",
- "Emilkris33",
- "Morten LJ",
- "Peter Alberti"
- ]
- },
- "cite-desc": "Tilføjer <nowiki><ref[ name=id]></nowiki> og <nowiki><references/></nowiki>-elementer til referencer.",
- "cite_error": "Fodnotefejl: $1",
- "cite_error_ref_numeric_key": "Ugyldigt <code>&lt;ref&gt;</code>-tag; \"name\" kan ikke være et simpelt heltal, brug en beskrivende titel",
- "cite_error_ref_no_key": "Ugyldigt <code>&lt;ref&gt;</code>-tag: Et <code>&lt;ref&gt;</code>-tag uden indhold skal have et navn",
- "cite_error_ref_too_many_keys": "Ugyldigt <code>&lt;ref&gt;</code>-tag: Ugyldige navne, fx for mange",
- "cite_error_ref_no_input": "Ugyldigt <code>&lt;ref&gt;</code>-tag: Et <code>&lt;ref&gt;</code>-tag uden navn skal have indhold",
- "cite_error_references_invalid_parameters": "Ugyldigt <code>&lt;references&gt;</code>-tag: Parametre er ikke tilladt, brug i stedet <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Ugyldigt <code>&lt;references&gt;</code>-tag; den eneste tilladte parameter er \"group\".\nBrug <code>&lt;references /&gt;</code> eller <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Løb tør for backlink-etiketter.\nDefiner flere i beskeden <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Løb tør for tilpassede linketiketter til gruppen \"$1\".\nDefiner flere i beskeden <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Ugyldigt <code>&lt;ref&gt;</code>-tag: Der er ikke specificeret nogen fodnotetekst til navnet <code>$1</code>",
- "cite_error_included_ref": "Afsluttende <code>&lt;/ref&gt;</code> mangler for <code>&lt;ref&gt;</code>-tag",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code>-tags findes, men ingen <code>&lt;references/&gt;</code>-tag blev fundet",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-tags eksisterer for en gruppe betegnet \"$1\", men der blev ikke fundet et tilsvarende <code>&lt;references group=\"$1\"/&gt;</code>-tag, eller et afsluttende <code>&lt;/ref&gt;</code>-tag mangler",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code>-tag inden i <code>&lt;references&gt;</code> har modstridende gruppe-attribut \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code>-tag defineret inden i <code>&lt;references&gt;</code> har gruppe-attributten \"$1\", som ikke anvendes i den ovenstående tekst.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code>-tag med navn \"$1\" defineret inden i <code>&lt;references&gt;</code> anvendes ikke i den ovenstående tekst.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code>-tag defineret inden i <code>&lt;references&gt;</code> har ikke en navne-attribut.",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code>-tag defineret inden i <code>&lt;references&gt;</code> med navnet \"$1\" har ikke noget indhold.",
- "cite_references_link_accessibility_label": "Hoppe op",
- "cite_references_link_many_accessibility_label": "Hoppe op til:"
-}
diff --git a/extensions/Cite/i18n/core/de.json b/extensions/Cite/i18n/core/de.json
deleted file mode 100644
index 0d7c126d..00000000
--- a/extensions/Cite/i18n/core/de.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kghbln",
- "Metalhead64",
- "Purodha",
- "Raimond Spekking",
- "The Evil IP address",
- "Umherirrender",
- "TMg"
- ]
- },
- "cite-desc": "Ergänzt die Tags <code><nowiki><ref[&nbsp;name=id]></nowiki></code> und <code><nowiki><references&nbsp;/></nowiki></code> für Referenzierungen in Wikiseiten",
- "cite_error": "Referenzfehler: $1",
- "cite_error_ref_numeric_key": "Ungültige Verwendung von <code>&lt;ref&gt;</code>: Der Parameter „name“ darf kein reiner Zahlenwert sein. Benutze einen beschreibenden Namen.",
- "cite_error_ref_no_key": "Ungültige Verwendung von <code>&lt;ref&gt;</code>: Der Parameter „ref“ ohne Inhalt muss einen Namen haben.",
- "cite_error_ref_too_many_keys": "Ungültige Verwendung von <code>&lt;ref&gt;</code>: Der Parameter „name“ ist ungültig oder zu lang.",
- "cite_error_ref_no_input": "Ungültige Verwendung von <code>&lt;ref&gt;</code>: Der Parameter „ref“ ohne Namen muss einen Inhalt haben.",
- "cite_error_references_invalid_parameters": "Ungültige Verwendung von <code>&lt;references&gt;</code>: Es sind keine Parameter möglich. Verwende ausschließlich <code><nowiki><references /></nowiki></code>.",
- "cite_error_references_invalid_parameters_group": "Ungültige Verwendung von <code>&lt;references&gt;</code>: Nur der Parameter „group“ ist möglich. Verwende entweder <code>&lt;references /&gt;</code> oder <code>&lt;references group=\"…\" /&gt;</code>.",
- "cite_error_references_no_backlink_label": "Eine Referenz der Form <code>&lt;ref name=\"…\" /&gt;</code> wird öfter benutzt als Buchstaben vorhanden sind. Ein Administrator muss die Systemnachricht <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> um weitere Buchstaben/Zeichen ergänzen.",
- "cite_error_no_link_label_group": "Für die Gruppe „$1“ sind keine benutzerdefinierten Linkbezeichnungen mehr verfügbar.\nEin Administrator muss weitere mit der Systemnachricht <nowiki>[[MediaWiki:$2]]</nowiki> festlegen.",
- "cite_error_references_no_text": "Es ist ein ungültiger <code>&lt;ref&gt;</code>-Tag vorhanden: Für die Referenz namens <code>$1</code> wurde kein Text angegeben.",
- "cite_error_included_ref": "Für ein <code>&lt;ref&gt;</code>-Tag fehlt ein schließendes <code>&lt;/ref&gt;</code>-Tag.",
- "cite_error_group_refs_without_references": "Es sind <code>&lt;ref&gt;</code>-Tags für die Gruppe „$1“ vorhanden, jedoch wurde kein dazugehöriges <code>&lt;references group=\"$1\" /&gt;</code>-Tag gefunden oder ein schließendes <code>&lt;/ref&gt;</code> fehlt.",
- "cite_error_references_group_mismatch": "Das <code>&lt;ref&gt;</code>-Tag in <code>&lt;references&gt;</code> enthält das kollidierende Attribut „$1“.",
- "cite_error_references_missing_group": "Das in <code>&lt;references&gt;</code> definierte <code>&lt;ref&gt;</code>-Tag hat das Gruppenattribut „$1“, das nicht im vorausgehenden Text verwendet wird.",
- "cite_error_references_missing_key": "Das in <code>&lt;references&gt;</code> definierte <code>&lt;ref&gt;</code>-Tag mit dem Namen „$1“ wird im vorausgehenden Text nicht verwendet.",
- "cite_error_references_no_key": "Das in <code>&lt;references&gt;</code> definierte <code>&lt;ref&gt;</code>-Tag hat kein Namensattribut.",
- "cite_error_empty_references_define": "Das in <code>&lt;references&gt;</code> definierte <code>&lt;ref&gt;</code>-Tag mit dem Namen „$1“ weist keinen Inhalt auf.",
- "cite_references_link_accessibility_label": "Hochspringen",
- "cite_references_link_many_accessibility_label": "Hochspringen nach:",
- "cite_error_refs_without_references_category-desc": "Die Seite hat mindestens ein definiertes <code><nowiki><ref></nowiki></code> ohne einer bestimmten Gruppe, hat jedoch kein ausdrückliches <code><nowiki><references /></nowiki></code>-Tag."
-}
diff --git a/extensions/Cite/i18n/core/diq.json b/extensions/Cite/i18n/core/diq.json
deleted file mode 100644
index b467a60c..00000000
--- a/extensions/Cite/i18n/core/diq.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Aspar",
- "Erdemaslancan",
- "Gorizon",
- "Xoser"
- ]
- },
- "cite-desc": "Qe çime mucnayîşî, etiketanê <nowiki><ref[ name=id]></nowiki> u <nowiki><references/></nowiki> de keno",
- "cite_error": "Ğeletê çime mucnayîşî: $1",
- "cite_error_ref_numeric_key": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nName nieşkeno biyo yew rekam. Çekuyan binuse",
- "cite_error_ref_no_key": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nEka kontent çini yo, gani yew name biyo",
- "cite_error_ref_too_many_keys": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nname raşt niyo, e.g. zaf esto",
- "cite_error_ref_no_input": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nEka name çini yo, gani kontent biyo",
- "cite_error_references_invalid_parameters": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nparametrayan ra destur çini yo.\n<code>&lt;references /&gt;</code> sero kar bike",
- "cite_error_references_invalid_parameters_group": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nparametrayan ra destur çini yo.\n<code>&lt;references /&gt;</code> sero kar bike, ya zi <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Linkanê Custom backlinkî hin çini yo.\nZerreyê mesajê <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>î de hewna tasvir bike",
- "cite_error_no_link_label_group": "Eka etiketinê linkê şexsi ser ena grubi \"$1\" ciniyo.\nZerre mesajê <nowiki>[[MediaWiki:$2]]</nowiki> de zafyer qise bike.",
- "cite_error_references_no_text": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nqe refs yew nuşte nidayiyo <code>$1</code>",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code>Qandê etiketi <code>&lt;/ref&gt;</code> racnayış kemiyo",
- "cite_error_refs_without_references": "etiketê <code>&lt;ref&gt;</code>î niesto, feqat etiketê <code>&lt;references/&gt;</code>î nidiyo",
- "cite_error_group_refs_without_references": "etiketé <code>&lt;ref&gt;</code>i niesto ser grubé $1'i, feqat etiketé <code>&lt;references/&gt;</code>dé \"$1\"/&gt;nidiyo",
- "cite_error_references_group_mismatch": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de ser grupê \"$1\"î konflikt keno.",
- "cite_error_references_missing_group": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de tevsir biyo ke ser grupê \"$1\"î ke verni de nieseno.",
- "cite_error_references_missing_key": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de tevisr biyo ser name \"$1\"î verni de niesto.",
- "cite_error_references_no_key": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de tevsir biyo name xo çini yo.",
- "cite_error_empty_references_define": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de tevsir biyo \"$1\" kontent xo çini yo.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "sita_ref-",
- "cite_references_link_prefix": "sita_not-",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
- "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
- "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;",
- "cite_references_link_accessibility_label": "Ser çek",
- "cite_references_link_many_accessibility_label": "Ser çek:"
-}
diff --git a/extensions/Cite/i18n/core/dsb.json b/extensions/Cite/i18n/core/dsb.json
deleted file mode 100644
index 6ad671c3..00000000
--- a/extensions/Cite/i18n/core/dsb.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Michawiki"
- ]
- },
- "cite-desc": "Pśidawa toflicce <nowiki><ref[ name=id]></nowiki> a <nowiki><references/></nowiki> za pódaśa zrědłow",
- "cite_error": "Referencna zmólka: $1",
- "cite_error_ref_numeric_key": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\nmě njamóžo jadnora licba byś. Wužyj wugroniwy titel",
- "cite_error_ref_no_key": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\n\"ref\" bźez wopśimjeśa musy mě měś",
- "cite_error_ref_too_many_keys": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\nnjepłaśiwe mjenja, na pś. pśewjele",
- "cite_error_ref_no_input": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\n\"ref\" bźez mjenja musy wopśimjeśe měś",
- "cite_error_references_invalid_parameters": "Njepłaśiwa toflicka <code>&lt;references&gt;</code>;\nžedne parametry dowólone.\nWužyj <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Njepłaśiwa toflicka <code>&lt;references&gt;</code>;\njano parameter \"group\" jo dowólony,\nWužyj <code>&lt;references /&gt;</code> abo <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Swójske etikety slědkwótkazow wupócerane.\nDefiněruj dalšne w powěsći <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Žedne swójske wótkazowe etikety za \"$1\" wěcej k dispoziciji.\nDefiněruj dalšne w powěsći <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\nza ref z mjenim <code>$1</code> njejo se tekst pódał",
- "cite_error_included_ref": "Kóńceca toflicka <code>&lt;/ref&gt;</code> felujo za toflicku <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Toflicki <code>&lt;ref&gt;</code> eksistěruju, ale toflicka <code>&lt;references/&gt;</code> njejo se namakała",
- "cite_error_group_refs_without_references": "Toflicki <code>&lt;ref&gt;</code> eksistěruju za kupku z mjenim \"$1\", ale wótpowědujuca toflicka <code>&lt;references group=\"$1\"/&gt;</code> njejo se namakała abo zacynjacy <code>&lt;/ref&gt;</code> felujo",
- "cite_error_references_group_mismatch": "Toflicka <code>&lt;ref&gt;</code> w <code>&lt;references&gt;</code> jo ze kupkowym atributom \"$1\" w konflikśe.",
- "cite_error_references_missing_group": "Toflicka <code>&lt;ref&gt;</code>, kótaraž jo w <code>&lt;references&gt;</code> definěrowana, ma kupkowy atribut \"$1\", kótaryž njepokazujo se w pjerwjejšnem teksće.",
- "cite_error_references_missing_key": "Toflicka <code>&lt;ref&gt;</code> z mjenim \"$1\", kótaraž jo w <code>&lt;references&gt;</code> definěrowana, njewužywa se w pjerwjejšnem teksće.",
- "cite_error_references_no_key": "Toflicka <code>&lt;ref&gt;</code>, kótaraž jo w <code>&lt;references&gt;</code> definěrowana, njama mjenjowy atribut.",
- "cite_error_empty_references_define": "Toflicka <code>&lt;ref&gt;</code>, kótaraž jo w <code>&lt;references&gt;</code> z mjenim \"$1\" definěrowana, njama wopśimjeśe.",
- "cite_references_link_accessibility_label": "Górjej skócyś",
- "cite_references_link_many_accessibility_label": "Górjej skócys do:"
-}
diff --git a/extensions/Cite/i18n/core/el.json b/extensions/Cite/i18n/core/el.json
deleted file mode 100644
index b0fae1eb..00000000
--- a/extensions/Cite/i18n/core/el.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Consta",
- "Omnipaedista",
- "Protnet",
- "ZaDiak",
- "Απεργός"
- ]
- },
- "cite-desc": "Προσθέτει τις ετικέτες <nowiki><ref[ name=id]></nowiki> και <nowiki><references/></nowiki>, για παραπομπές.",
- "cite_error": "Σφάλμα παραπομπής: $1",
- "cite_error_ref_numeric_key": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nτο όνομα δεν μπορεί να είναι απλός ακέραιος. Χρησιμοποιήστε έναν περιγραφικό τίτλο",
- "cite_error_ref_no_key": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nπαραπομπές χωρίς περιεχόμενο πρέπει να έχουν όνομα",
- "cite_error_ref_too_many_keys": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nμη έγκυρα ονόματα, π.χ. πάρα πολλά",
- "cite_error_ref_no_input": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nοι παραπομπές χωρίς όνομα πρέπει να έχουν περιεχόμενο",
- "cite_error_references_invalid_parameters": "Μη έγκυρη ετικέτα <code>&lt;references&gt;</code>·\nδεν επιτρέπονται παράμετροι.\nΧρησιμοποιήστε <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Μη έγκυρη ετικέτα <code>&lt;references&gt;</code>·\nμόνο η παράμετρος «group» επιτρέπεται.\nΧρησιμοποιείστε <code>&lt;references /&gt;</code>, ή <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Εξαντλήθηκαν οι ειδικές ετικέτες συνδέσμων προς το κείμενο.\nΚαθορισμός περισσότερων στο μήνυμα <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Εξαντλήθηκαν οι ειδικές ετικέτες συνδέσμων για την ομάδα «$1».\nΚαθορισμός περισσότερων στο μήνυμα <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nδεν δίνεται κείμενο για παραπομπές με όνομα <code>$1</code>",
- "cite_error_included_ref": "Λείπει η ετικέτα κλεισίματος <code>&lt;/ref&gt;</code> για την ετικέτα <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "Υπάρχουν ετικέτες <code>&lt;ref&gt;</code> για κάποια ομάδα με το όνομα «$1», αλλά δεν βρέθηκε καμία αντίστοιχη ετικέτα <code>&lt;references group=\"$1\"/&gt;</code>, ή λείπει η ετικέτα κλεισίματος <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "Η ετικέτα <code>&lt;ref&gt;</code> μέσα στο <code>&lt;references&gt;</code> έρχεται σε σύγκρουση με το χαρακτηριστικό ομαδοποίησης «$1».",
- "cite_error_references_missing_group": "Η ετικέτα <code>&lt;ref&gt;</code> που ορίζεται μέσα στο <code>&lt;references&gt;</code> έχει χαρακτηριστικό ομαδοποίησης «$1» που δεν εμφανίζεται σε προηγούμενο κείμενο.",
- "cite_error_references_missing_key": "Η ετικέτα <code>&lt;ref&gt;</code> με όνομα «$1» που ορίζεται μέσα στο <code>&lt;references&gt;</code> δεν χρησιμοποιείται σε προηγούμενο κείμενο.",
- "cite_error_references_no_key": "Η ετικέτα <code>&lt;ref&gt;</code> που ορίζεται μέσα στο <code>&lt;references&gt;</code> δεν έχει χαρακτηριστικό ονόματος.",
- "cite_error_empty_references_define": "Η ετικέτα <code>&lt;ref&gt;</code> που ορίζεται μέσα στο <code>&lt;references&gt;</code> με όνομα «$1» δεν έχει καθόλου περιεχόμενο.",
- "cite_references_link_accessibility_label": "Άλμα πάνω",
- "cite_references_link_many_accessibility_label": "Άλμα πάνω, στο:"
-}
diff --git a/extensions/Cite/i18n/core/en.json b/extensions/Cite/i18n/core/en.json
deleted file mode 100644
index c5aa5bec..00000000
--- a/extensions/Cite/i18n/core/en.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "@metadata": {
- "authors": []
- },
- "cite-desc": "Adds <nowiki><ref[ name=id]></nowiki> and <nowiki><references/></nowiki> tags, for citations",
- "cite_error": "Cite error: $1",
- "cite_error_ref_numeric_key": "Invalid <code>&lt;ref&gt;</code> tag;\nname cannot be a simple integer. Use a descriptive title",
- "cite_error_ref_no_key": "Invalid <code>&lt;ref&gt;</code> tag;\nrefs with no content must have a name",
- "cite_error_ref_too_many_keys": "Invalid <code>&lt;ref&gt;</code> tag;\ninvalid names, e.g. too many",
- "cite_error_ref_no_input": "Invalid <code>&lt;ref&gt;</code> tag;\nrefs with no name must have content",
- "cite_error_references_invalid_parameters": "Invalid <code>&lt;references&gt;</code> tag;\nno parameters are allowed.\nUse <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Invalid <code>&lt;references&gt;</code> tag;\nparameter \"group\" is allowed only.\nUse <code>&lt;references /&gt;</code>, or <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Ran out of custom backlink labels.\nDefine more in the <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> message.",
- "cite_error_no_link_label_group": "Ran out of custom link labels for group \"$1\".\nDefine more in the <nowiki>[[MediaWiki:$2]]</nowiki> message.",
- "cite_error_references_no_text": "Invalid <code>&lt;ref&gt;</code> tag;\nno text was provided for refs named <code>$1</code>",
- "cite_error_included_ref": "Closing <code>&lt;/ref&gt;</code> missing for <code>&lt;ref&gt;</code> tag",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> tags exist for a group named \"$1\", but no corresponding <code>&lt;references group=\"$1\"/&gt;</code> tag was found, or a closing <code>&lt;/ref&gt;</code> is missing",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tag in <code>&lt;references&gt;</code> has conflicting group attribute \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tag defined in <code>&lt;references&gt;</code> has group attribute \"$1\" which does not appear in prior text.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> tag with name \"$1\" defined in <code>&lt;references&gt;</code> is not used in prior text.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> tag defined in <code>&lt;references&gt;</code> has no name attribute.",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> tag defined in <code>&lt;references&gt;</code> with name \"$1\" has no content.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "cite_ref-",
- "cite_reference_link_suffix": "",
- "cite_references_link_prefix": "cite_note-",
- "cite_references_link_suffix": "",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_no_link": "<p id=\"$1\">$2</p>",
- "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
- "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
- "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;",
- "cite_references_link_accessibility_label": "Jump up",
- "cite_references_link_many_accessibility_label": "Jump up to:",
- "cite_references_prefix": "<ol class=\"references\">",
- "cite_references_suffix": "</ol>"
-}
diff --git a/extensions/Cite/i18n/core/eo.json b/extensions/Cite/i18n/core/eo.json
deleted file mode 100644
index d5506cfd..00000000
--- a/extensions/Cite/i18n/core/eo.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "AVRS",
- "Malafaya",
- "Yekrats"
- ]
- },
- "cite-desc": "Aldonas etikedojn <nowiki><ref[ name=id]></nowiki> kaj <nowiki><references/></nowiki> por citaĵoj",
- "cite_error": "Citaĵa eraro: $1",
- "cite_error_ref_numeric_key": "Malvalida etikedo <code>&lt;ref&gt;</code>;\nnomo ne povas esti simpla entjero. Uzu priskriban titolon.",
- "cite_error_ref_no_key": "Malvalida etikedo <code>&lt;ref&gt;</code>;\n''ref'' kun nenia enhava nomo devas havi nomon",
- "cite_error_ref_too_many_keys": "Malvalida etikedo <code>&lt;ref&gt;</code>;\nmalvalidaj nomoj (ekz-e: tro multaj)",
- "cite_error_ref_no_input": "Malvalida etikedo <code>&lt;ref&gt;</code>;\nref-etikedoj sen nomo devas havi enhavojn.",
- "cite_error_references_invalid_parameters": "Nevalida etikedo <code>&lt;references&gt;</code>; neniuj parametroj estas permesitaj, uzu <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Malvalida etikedon <code>&lt;references&gt;</code>;\nparametro \"group\" nur estas permesita.\nUzu etikedon <code>&lt;references /&gt;</code>, aŭ <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Neniom plu memfaritaj retroligaj etikedoj.\nDifinu pliajn en la mesaĝo <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Mankas proprajn ligilajn etikedojn por grupo \"$1\".\nDifinu pliajn en la <nowiki>[[MediaWiki:$2]]</nowiki> mesaĝo.",
- "cite_error_references_no_text": "Nevalida <code>&lt;ref&gt;</code> etikedo;\nneniu teksto estis donita por ref-oj nomataj <code>$1</code>",
- "cite_error_included_ref": "Ferma <code>&lt;/ref&gt;</code> mankas por <code>&lt;ref&gt;</code>-etikedo",
- "cite_error_refs_without_references": "Etikedoj <code>&lt;ref&gt;</code> ekzistas, sed neniu etikedo <code>&lt;references/&gt;</code> estis trovita",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> etikedoj ekzistas por grupo nomita \"$1\", sed ne koresponda <code>&lt;references group=\"$1\"/&gt;</code> etikedo estis trovita",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> etikedo en <code>&lt;references&gt;</code> havas konflikan grupatributon \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> etikedo difinita en <code>&lt;references&gt;</code> havas grupatributon \"$1\" kiu ne aperas en antaŭa teksto.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> etikedo kun la nomo \"$1\" difinita en <code>&lt;references&gt;</code> ne estas uzata en antaŭa teksto.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> etikedo difinita en <code>&lt;references&gt;</code> ne havas noman atributon.",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> etikedo difinita en <code>&lt;references&gt;</code> kun nomo \"$1\" ne havas enhavon."
-}
diff --git a/extensions/Cite/i18n/core/es.json b/extensions/Cite/i18n/core/es.json
deleted file mode 100644
index 423b3c40..00000000
--- a/extensions/Cite/i18n/core/es.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Antur",
- "Baiji",
- "Ciencia Al Poder",
- "Crazymadlover",
- "Drini",
- "Erdemaslancan",
- "Fitoschido",
- "Gustronico",
- "Ihojose",
- "Locos epraix",
- "Manuelt15",
- "McDutchie",
- "Muro de Aguas",
- "Remember the dot",
- "Sanbec",
- "Translationista"
- ]
- },
- "cite-desc": "Añade las etiquietas <nowiki><ref[ name=id]> y <references /></nowiki> para utilizar notas al pie.",
- "cite_error": "Error en la cita: $1",
- "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> no válida;\nel nombre no puede ser un número entero. Use un título descriptivo",
- "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> no válida;\nlas referencias sin contenido deben tener un nombre",
- "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> inválida;\ncontiene parámetros no reconocidos",
- "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> no válida;\nlas referencias sin nombre deben tener contenido",
- "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> no válida;\nno se admiten parámetros.\nUse <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> no válida;\nsólo se permite el parámetro «group».\nUse <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Se han acabado las etiquetas personalizadas de vínculos de retroceso.\nDefine más en <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Se han acabado las etiquetas personalizadas para vínculos del grupo \"$1\".\nDefine más en el mensaje <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> inválida;\nno se ha definido el contenido de las referencias llamadas <code>$1</code>",
- "cite_error_included_ref": "Etiqueta de apertura <code>&lt;ref&gt;</code> sin su correspondiente cierre <code>&lt;/ref&gt;</code>",
- "cite_error_refs_without_references": "Existen etiquetas <code>&lt;ref&gt;</code>, pero no se encontró una etiqueta <code>&lt;references /&gt;</code>",
- "cite_error_group_refs_without_references": "Existen etiquetas <code>&lt;ref&gt;</code> para un grupo llamado «$1», pero no se encontró la etiqueta <code>&lt;references group=\"$1\"/&gt;</code> correspondiente, o falta la etiqueta <code>&lt;/ref&gt;</code> de cierre",
- "cite_error_references_group_mismatch": "La etiqueta <code>&lt;ref&gt;</code> en <code>&lt;references&gt;</code> presenta el atributo de grupo \"$1\" en conflicto.",
- "cite_error_references_missing_group": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> pertenece al grupo \"$1\" no declarado en el texto precedente.",
- "cite_error_references_missing_key": "La etiqueta <code>&lt;ref&gt;</code> con nombre \"$1\" definida en <code>&lt;references&gt;</code> no se utiliza en el texto precedente.",
- "cite_error_references_no_key": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> no tiene atributo de nombre.",
- "cite_error_empty_references_define": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> con nombre \"$1\" no tiene contenido.",
- "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
- "cite_references_link_accessibility_label": "Volver arriba",
- "cite_references_link_many_accessibility_label": "Saltar a:"
-}
diff --git a/extensions/Cite/i18n/core/et.json b/extensions/Cite/i18n/core/et.json
deleted file mode 100644
index e4cab1c6..00000000
--- a/extensions/Cite/i18n/core/et.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Pikne"
- ]
- },
- "cite-desc": "Lisab viitamiseks sildid <nowiki><ref[ name=id]></nowiki> ja <nowiki><references/></nowiki>.",
- "cite_error": "Viitamistõrge: $1",
- "cite_error_ref_numeric_key": "Vigane <code>&lt;ref&gt;</code>-silt.\nNimi ei või olla numbriline. Kasuta kirjeldavat nime.",
- "cite_error_ref_no_key": "Vigane <code>&lt;ref&gt;</code>-silt.\nSisuta viitamissiltidel peab olema nimi.",
- "cite_error_ref_too_many_keys": "Vigane <code>&lt;ref&gt;</code>-silt;\n\"name\" on vigane või liiga pikk.",
- "cite_error_ref_no_input": "Vigane <code>&lt;ref&gt;</code>-silt.\nNimeta viitamissiltidel peab olema sisu.",
- "cite_error_references_invalid_parameters": "Vigane <code>&lt;references&gt;</code>-silt.\nParameetrid pole lubatud.\nKasuta silti <code>&lt;references /&gt;</code>.",
- "cite_error_references_invalid_parameters_group": "Vigane <code>&lt;references&gt;</code>-silt.\nLubatud on ainult parameeter \"group\".\nKasuta silti <code>&lt;references /&gt;</code> või <code>&lt;references group=\"...\" /&gt;</code>.",
- "cite_error_references_no_backlink_label": "Kohandatud tagasilinkide sildid said otsa.\nLisa neid sõnumisse <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Rühma \"$1\" kohandatud linkide sildid said otsa.\nLisa neid sõnumisse <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Vigane <code>&lt;ref&gt;</code>-silt.\nViite nimega <code>$1</code> tekst puudub.",
- "cite_error_included_ref": "Sulgemissilt <code>&lt;/ref&gt;</code> puudub.",
- "cite_error_group_refs_without_references": "Olemas on <code>&lt;ref&gt;</code>-silt rühma \"$1\" jaoks, aga puudub vastav silt <code>&lt;references group=\"$1\"/&gt;</code> või lõpusilt <code>&lt;/ref&gt;</code>.",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>-siltide vahel oleval <code>&lt;ref&gt;</code>-sildil on vastukäiv parameetri \"group\" väärtus \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code>-sildis kirjeldatud <code>&lt;ref&gt;</code>-sildil on rühmatunnus \"$1\", mis puudub eelnevas tekstis.",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code>-siltide vahel olevat <code>&lt;ref&gt;</code>-silti nimega \"$1\" ei kasutata eelnevas tekstis.",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code>-siltide vahel määratletud <code>&lt;ref&gt;</code>-sildil puudub ''name''-atribuut.",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code>-siltide vahel oleval <code>&lt;ref&gt;</code>-sildil nimega \"$1\" puudub sisu.",
- "cite_references_link_accessibility_label": "Siirdu üles",
- "cite_references_link_many_accessibility_label": "Siirdu üles asukohta:",
- "cite_error_refs_without_references_category-desc": "Leheküljel on kasutatud kindla rühmata <code><nowiki><ref></nowiki></code>-silte, aga selgeilmeline <code><nowiki><references /></nowiki></code>-silt puudub."
-}
diff --git a/extensions/Cite/i18n/core/fa.json b/extensions/Cite/i18n/core/fa.json
deleted file mode 100644
index e5d46e91..00000000
--- a/extensions/Cite/i18n/core/fa.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ebraminio",
- "Huji",
- "Wayiran",
- "ZxxZxxZ",
- "Reza1615"
- ]
- },
- "cite-desc": "برچسب‌های <nowiki><ref[ name=id]></nowiki> و <nowiki><references/></nowiki> را برای یادکرد اضافه می‌کند",
- "cite_error": "خطای یادکرد: $1",
- "cite_error_ref_numeric_key": "برچسب <code><ref></code> نامجاز؛ نام نمی‌تواند یک عدد باشد. عنوان واضح‌تری را برگزینید",
- "cite_error_ref_no_key": "برچسب <code><ref></code> نامجاز؛ یادکردهای بدون محتوا باید نام داشته باشند",
- "cite_error_ref_too_many_keys": "برچسب <code><ref></code> نامجاز؛ نام‌های نامجاز یا بیش از اندازه",
- "cite_error_ref_no_input": "برچسب <code><ref></code> نامجاز؛ یادکردهای بدون نام باید محتوا داشته باشند",
- "cite_error_references_invalid_parameters": "برچسب <code><references></code> نامجاز؛ استفاده از پارامتر مجاز است. از <code><references /></code> استفاده کنید",
- "cite_error_references_invalid_parameters_group": "برچسب <code>&lt;references&gt;</code> نامجاز؛ تنها پارامتر «group» قابل استفاده است.\nاز <code>&lt;references /&gt;</code> یا <code>&lt;references group=\"...\" /&gt;</code> استفاده کنید",
- "cite_error_references_no_backlink_label": "برچسب‌های پیوند به انتها رسید.\nموارد جدیدی را در پیغام <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> تعریف کنید",
- "cite_error_no_link_label_group": "از برچسب‌های پیوند سفارشی برای گروه «$1» خارج شد.\nدر پیغام <nowiki>[[MediaWiki:$2]]</nowiki> بیشتر تعریف کنید.",
- "cite_error_references_no_text": "برچسب <code><ref></code> نامجاز؛ متنی برای یادکردهای با نام <code>$1</code> وارد نشده‌است",
- "cite_error_included_ref": "برچسب تمام کنندهٔ <code>&lt;/ref&gt;</code> بدون برچسب <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "برچسب <code>&lt;ref&gt;</code> برای گروهی به نام «$1» وجود دارد، اما برچسب متناظر با <code>&lt;references group=\"$1\"/&gt;</code> یافت نشد یا <code>&lt;/ref&gt;</code> بسته جا گذاشته شده‌است.",
- "cite_error_references_group_mismatch": "برچسپ <code>&lt;ref&gt;</code> درون <code>&lt;references&gt;</code> در تضاد با ویژگی‌های گروه «$1» است.",
- "cite_error_references_missing_group": "برچسپ <code>&lt;ref&gt;</code> در <code>&lt;references&gt;</code> تعریف شده، ویژگی‌های گروهی «$1» را دارد که درون متن قبل از آن ظاهر نمی‌شود.",
- "cite_error_references_missing_key": "پرچسپ <code>&lt;ref&gt;</code> که با نام «$1» درون <code>&lt;references&gt;</code> تعریف شده، در متن قبل از آن استفاده نشده‌است.",
- "cite_error_references_no_key": "برچسپ <code>&lt;ref&gt;</code> درون <code>&lt;references&gt;</code> صفت نام را ندارد.",
- "cite_error_empty_references_define": "برچسپ <code>&lt;ref&gt;</code> تعریف شده درون <code>&lt;references&gt;</code> با نام «$1» محتوایی ندارد.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "cite_ref-",
- "cite_references_link_accessibility_label": "پرش به بالا",
- "cite_references_link_many_accessibility_label": "پرش به بالا به:",
- "cite_error_refs_without_references_category-desc": "این صفحه دارای <code><nowiki><ref></nowiki></code> است که به صورت گروهی تعریف نشده‌اند، ولی برچسب <code><nowiki><references /></nowiki></code> ندارد."
-}
diff --git a/extensions/Cite/i18n/core/fi.json b/extensions/Cite/i18n/core/fi.json
deleted file mode 100644
index ee173e42..00000000
--- a/extensions/Cite/i18n/core/fi.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Agony",
- "Crt",
- "Nike",
- "Olli",
- "Silvonen",
- "Str4nd",
- "Tarmo",
- "Syreeni"
- ]
- },
- "cite-desc": "Tarjoaa <nowiki><ref[ name=id]></nowiki>- ja <nowiki><references/></nowiki>-elementit viittauksien tekemiseen.",
- "cite_error": "Viittausvirhe: $1",
- "cite_error_ref_numeric_key": "Kelpaamaton <code>&lt;ref&gt;</code>-elementti: nimi ei voi olla numero – käytä kuvaavampaa nimeä.",
- "cite_error_ref_no_key": "Kelpaamaton <code>&lt;ref&gt;</code>-elementti: sisällöttömille refeille pitää määrittää nimi.",
- "cite_error_ref_too_many_keys": "Kelpaamaton <code>&lt;ref&gt;</code>-elementti: virheelliset nimet, esim. liian monta",
- "cite_error_ref_no_input": "Kelpaamaton <code>&lt;ref&gt;</code>-elementti: viitteillä ilman nimiä täytyy olla sisältöä",
- "cite_error_references_invalid_parameters": "Kelpaamaton <code>&lt;references&gt;</code>-elementti: parametrit eivät ole sallittuja. Käytä muotoa <code>&lt;references /&gt;</code>.",
- "cite_error_references_invalid_parameters_group": "Kelpaamaton <code>&lt;references&gt;</code>-elementti: vain parametri ”group” on sallittu. Käytä muotoa <code>&lt;references /&gt;</code> tai <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Määritetyt takaisinviittausnimikkeet loppuivat kesken.\nNiitä voi määritellä lisää sivulla <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Mukautettujen linkkikirjainten määrä ryhmälle ”$1” loppui.\nMääritä niitä lisää viestissä <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Virheellinen <code>&lt;ref&gt;</code>-elementti;\nviitettä <code>$1</code> ei löytynyt",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code>-elementin sulkeva <code>&lt;/ref&gt;</code>-elementti puuttuu",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code>-elementti löytyy, mutta <code>&lt;references/&gt;</code>-elementtiä ei löydy",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-elementit löytyivät ryhmälle nimeltä ”$1”, mutta vastaavaa <code>&lt;references group=\"$1\"/&gt;</code>-elementtiä ei löytynyt tai sulkeva <code>&lt;/ref&gt;</code> puuttuu",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code>-elementti <code>&lt;references&gt;</code>-elementin sisällä sisältää ristiriitaisen ryhmämääritteen ”$1”.",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code>-elementissä määritetty <code>&lt;ref&gt;</code>-elementti sisältää ryhmämääritteen ”$1”, jota ei mainita aiemmassa tekstissä.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code>-elementin nimeä ”$1”, johon viitataan elementissä <code>&lt;references&gt;</code> ei käytetä edeltävässä tekstissä.",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code>-elementissä määritetyllä <code>&lt;ref&gt;</code>-elementillä ei ole nimimääritettä.",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code>-elementissä määritetyllä <code>&lt;ref&gt;</code>-elementillä nimellä ”$1” ei ole sisältöä."
-}
diff --git a/extensions/Cite/i18n/core/fo.json b/extensions/Cite/i18n/core/fo.json
deleted file mode 100644
index abfa6d53..00000000
--- a/extensions/Cite/i18n/core/fo.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "EileenSanda"
- ]
- },
- "cite-desc": "Leggur afturat <nowiki><ref[ name=id]></nowiki> og <nowiki><references/></nowiki> lyklaorð, fyri ávísingar",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> lyklaorð eru til, men onki <code>&lt;references/&gt;</code> lyklaorð (tag) varð funnið",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> lyklaorð (tags) eru til fyri ein bólk sum eitur \"$1\", men onki tilsvarandi <code>&lt;references group=\"$1\"/&gt;</code> lyklaorð varð funnið, ella manglar ein lukkandi <code>&lt;/ref&gt;</code>"
-}
diff --git a/extensions/Cite/i18n/core/frp.json b/extensions/Cite/i18n/core/frp.json
deleted file mode 100644
index bf2c69da..00000000
--- a/extensions/Cite/i18n/core/frp.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "ChrisPtDe"
- ]
- },
- "cite-desc": "Apond les balises <nowiki><ref[ name=id]></nowiki> et <nowiki><references/></nowiki>, por les citacions.",
- "cite_error": "Èrror de citacion $1",
- "cite_error_ref_numeric_key": "Apèl envalido ; cllâf pas entègrâla atendua.",
- "cite_error_ref_no_key": "Balisa <code>&lt;ref&gt;</code> fôssa ;\nles refèrences sen contegnu dêvont avêr un nom.",
- "cite_error_ref_too_many_keys": "Apèl envalido ; cllâfs envalides, per ègzemplo, trop de cllâfs spècefiâs ou ben cllâf fôssa.",
- "cite_error_ref_no_input": "Balisa <code>&lt;ref&gt;</code> fôssa ;\nles refèrences sen nom dêvont avêr un contegnu.",
- "cite_error_references_invalid_parameters": "Arguments envalidos ; argument atendu.",
- "cite_error_references_invalid_parameters_group": "Balisa <code>&lt;references&gt;</code> fôssa ;\nsolament lo paramètre « tropa » est ôtorisâ.\nUtilisâd <code>&lt;references /&gt;</code>, ou ben <code>&lt;references group=\"...\" /&gt;</code>.",
- "cite_error_references_no_backlink_label": "Èpouesement de les ètiquètes de lims pèrsonalisâs.\nDèfenésséd-nen un ples grant nombro dens lo mèssâjo <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Més d’ètiquètes de lims pèrsonalisâs por la tropa « $1 ».\nDèfenésséd-nen més dens lo mèssâjo <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Balisa <code>&lt;ref&gt;</code> fôssa ;\nnion tèxto at étâ balyê por les refèrences apelâs <code>$1</code>.",
- "cite_error_included_ref": "Cllotura <code>&lt;/ref&gt;</code> manquenta por la balisa <code>&lt;ref&gt;</code>.",
- "cite_error_refs_without_references": "Des balises <code>&lt;ref&gt;</code> ègzistont, mas niona balisa <code>&lt;references/&gt;</code> at étâ trovâ.",
- "cite_error_group_refs_without_references": "Des balises <code>&lt;ref&gt;</code> ègzistont por una tropa apelâ « $1 », mas niona balisa <code>&lt;references group=\"$1\"/&gt;</code> que corrèspond at étâ trovâ.",
- "cite_error_references_group_mismatch": "La balisa <code>&lt;ref&gt;</code> dens <code>&lt;references&gt;</code> at l’atribut de tropa « $1 » qu’entre en conflit avouéc celi de <code>&lt;references&gt;</code>.",
- "cite_error_references_missing_group": "La balisa <code>&lt;ref&gt;</code> dèfenia dens <code>&lt;references&gt;</code> at l’atribut de tropa « $1 » que figure pas dens cél tèxto.",
- "cite_error_references_missing_key": "La balisa <code>&lt;ref&gt;</code> avouéc lo nom « $1 » dèfenia dens <code>&lt;references&gt;</code> est pas utilisâ dens cél tèxto.",
- "cite_error_references_no_key": "La balisa <code>&lt;ref&gt;</code> dèfenia dens <code>&lt;references&gt;</code> at gins d’atribut de nom.",
- "cite_error_empty_references_define": "La balisa <code>&lt;ref&gt;</code> dèfenia dens <code>&lt;references&gt;</code> avouéc lo nom « $1 » at gins de contegnu.",
- "cite_references_link_many_sep": ",&#32;",
- "cite_references_link_many_and": "&#32;et&#32;"
-}
diff --git a/extensions/Cite/i18n/core/gl.json b/extensions/Cite/i18n/core/gl.json
deleted file mode 100644
index 8d6a6293..00000000
--- a/extensions/Cite/i18n/core/gl.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Alma",
- "Toliño",
- "Xosé"
- ]
- },
- "cite-desc": "Engade as etiquetas <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> para as citas",
- "cite_error": "Erro no código da cita: $1",
- "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> non válida;\no nome non pode ser un simple número enteiro. Use un título descritivo",
- "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> non válida;\nas referencias que non teñan contido deben ter un nome",
- "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> non válida;\nnomes non válidos, por exemplo, demasiados",
- "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> non válida;\nas referencias que non teñan nome, deben ter contido",
- "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> non válida;\nnon están permitidos eses parámetros.\nUse <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> non válida;\nsó está permitido o parámetro \"group\" (\"grupo\").\nUse <code>&lt;references /&gt;</code> ou <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "As etiquetas personalizadas esgotáronse.\nDefina máis na mensaxe <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "As etiquetas personalizadas esgotáronse para o grupo \"$1\".\nDefina máis na mensaxe <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> non válida;\nnon se forneceu texto para as referencias de nome <code>$1</code>",
- "cite_error_included_ref": "Peche a etiqueta <code>&lt;/ref&gt;</code> que lle falta á outra etiqueta <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "As etiquetas <code>&lt;ref&gt;</code> existen para un grupo chamado \"$1\", pero non se atopou a etiqueta <code>&lt;references group=\"$1\"/&gt;</code> correspondente ou falta unha etiqueta <code>&lt;/ref&gt;</code> de peche",
- "cite_error_references_group_mismatch": "A etiqueta <code>&lt;ref&gt;</code> en <code>&lt;references&gt;</code> ten un atributo de grupo conflitivo \"$1\".",
- "cite_error_references_missing_group": "A etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> ten un atributo de grupo \"$1\" que non aparece no texto anterior.",
- "cite_error_references_missing_key": "A etiqueta <code>&lt;ref&gt;</code> co nome \"$1\" definida en <code>&lt;references&gt;</code> non se utiliza no texto anterior.",
- "cite_error_references_no_key": "A etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> non ten nome de atributo.",
- "cite_error_empty_references_define": "A etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> co nome \"$1\" non ten contido.",
- "cite_references_link_accessibility_label": "Saltar a",
- "cite_references_link_many_accessibility_label": "Saltar a:",
- "cite_error_refs_without_references_category-desc": "A páxina ten definidas <code><nowiki><ref></nowiki></code> sen ningún grupo específico, pero non conta cunha etiqueta <code><nowiki><references /></nowiki></code> explícita."
-}
diff --git a/extensions/Cite/i18n/core/gsw.json b/extensions/Cite/i18n/core/gsw.json
deleted file mode 100644
index 3d8ec1b4..00000000
--- a/extensions/Cite/i18n/core/gsw.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Als-Holder",
- "The Evil IP address"
- ]
- },
- "cite-desc": "Ergänzt d <nowiki><ref[ name=id]></nowiki> un d <nowiki><references /></nowiki>-Tag fir Quällenochwyys",
- "cite_error": "Referänz-Fähler: $1",
- "cite_error_ref_numeric_key": "Uugiltigi <tt>&lt;ref&gt;</tt>-Verwändig: „name“ derf kei reine Zahlewärt syy, verwänd e Name wu bschrybt.",
- "cite_error_ref_no_key": "Uugiltigi <tt>&lt;ref&gt;</tt>-Verwändig: „ref“ ohni Inhalt muess e Name haa.",
- "cite_error_ref_too_many_keys": "Uugiltigi <tt>&lt;ref&gt;</tt>-Verwändig: „name“ isch uugiltig oder z lang.",
- "cite_error_ref_no_input": "Uugiltigi <tt>&lt;ref&gt;</tt>-Verwändig: „ref“ ohni Name muess e Inhalt haa.",
- "cite_error_references_invalid_parameters": "Uugiltigi <tt>&lt;references&gt;</tt>-Verwändig: S sin kei zuesätzligi Parameter erlaubt, verwänd usschließli <tt><nowiki><references /></nowiki></tt>.",
- "cite_error_references_invalid_parameters_group": "Uugiltigi <tt>&lt;references&gt;</tt>-Verwändig: Nume dr Parameter „group“ isch erlaubt, verwänd <tt>&lt;references /&gt;</tt> oder <tt>&lt;references group=\"...\" /&gt;</tt>",
- "cite_error_references_no_backlink_label": "E Referenz mit dr Form <tt>&lt;ref name=\"...\"/&gt;</tt> wird meh brucht as es Buechstabe git. E Ammann muess <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> go wyteri Buechstabe/Zeiche ergänze.",
- "cite_error_no_link_label_group": "Fir d Gruppe „$1“ sin kei benutzerdefinierti Linkbezeichnige me verfiegbar.\nDefinier meh unter Systemnochricht <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Uugiltige <tt>&lt;ref&gt;</tt>-Tag; s isch kei Täxt fir s Ref mit em Name <tt>$1</tt> aagee wore.",
- "cite_error_included_ref": "S fählt s schließend <code>&lt;/ref&gt;</code>",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code>-Tag git s, aber s isch kei <code>&lt;references/&gt;</code>-Tag gfunde wore.",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-Tag git s fir d Grupp „$1“, aber s isch kei dezue gherig <code>&lt;references group=„$1“/&gt;</code>-Tag gfunde wore",
- "cite_error_references_group_mismatch": "Im <code>&lt;ref&gt;</code>-Tag in <code>&lt;references&gt;</code> het s e problematischi Gruppe-Eigeschaft „$1“.",
- "cite_error_references_missing_group": "Im <code>&lt;ref&gt;</code>-Tag, wu definiert isch in <code>&lt;references&gt;</code>, het s e Gruppe-Eigeschaft „$1“, wu im obere Text nit vorchunnt.",
- "cite_error_references_missing_key": "S <code>&lt;ref&gt;</code>-Tag mit em Name „$1“, wu definiert isch in <code>&lt;references&gt;</code> wird nit verwändet im obere Text.",
- "cite_error_references_no_key": "S <code>&lt;ref&gt;</code>-Tag, wu definiert isch in <code>&lt;references&gt;</code>, het kei Name-Eigeschaft.",
- "cite_error_empty_references_define": "Im <code>&lt;ref&gt;</code>-Tag, wu definiert isch in <code>&lt;references&gt;</code>, mit em Name „$1“ het s kei Inhalt."
-}
diff --git a/extensions/Cite/i18n/core/gu.json b/extensions/Cite/i18n/core/gu.json
deleted file mode 100644
index 530bfd5d..00000000
--- a/extensions/Cite/i18n/core/gu.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ashok modhvadia",
- "Dsvyas",
- "KartikMistry",
- "Sushant savla"
- ]
- },
- "cite-desc": "અવતરણો માટે <nowiki><ref[ name=id]></nowiki> અને <nowiki><references/></nowiki> ટેગ ઉમેરે છે",
- "cite_error": "સંદર્ભ ત્રુટિ: $1",
- "cite_error_ref_numeric_key": "અમાન્ય <code>&lt;ref&gt;</code> ટેગ;\nનામ માત્ર સરળ રાશિ ન હોઈ શકે, વિસ્તૃત શીર્ષક આપો",
- "cite_error_ref_no_key": "અમાન્ય <code>&lt;ref&gt;</code> ટેગ;\nનામ વગરના refs ને કાંઈક નામ તો હોવું જ જોઈએ",
- "cite_error_ref_too_many_keys": "અમાન્ય <code>&lt;ref&gt;</code> ચકતી;\nઅમાન્ય નામો , દા.ત. ઘણાં બધાં",
- "cite_error_ref_no_input": "અમાન્ય <code>&lt;ref&gt;</code> ટેગ;\nનામ વગરના refs માં કાંઈક સામગ્રી હોવી જોઈએ",
- "cite_error_references_invalid_parameters": "અમાન્ય <code>&lt;references&gt;</code> ટેગ;\nકોઈ પણ પરિમાણની પરવાનગી નથી.\n<code>&lt;references /&gt;</code> વાપરો",
- "cite_error_references_invalid_parameters_group": "અમાન્ય <code>&lt;references&gt;</code> ટેગ;\nમાત્ર \"group\" પરિમાણની પરવાનગી છે.\n<code>&lt;references /&gt;</code> કે <code>&lt;references group=\"...\" /&gt;</code> વાપરો",
- "cite_error_references_no_backlink_label": "કસ્ટમ બેકલિંક લેબલ ખલાસ થઈ ગયાં.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> સંદેશામાં વહારે લેબલ બનાવો..",
- "cite_error_no_link_label_group": "\"$1\" સમૂહ માટે કસ્ટમ બેકલિંક લેબલ ખલાસ થઈ ગયાં.\n<nowiki>[[MediaWiki:$2]]</nowiki> સંદેશામાં વહારે લેબલ બનાવો..",
- "cite_error_references_no_text": "અમાન્ય <code>&lt;ref&gt;</code> ટેગ;\n<code>$1</code>નામના સંદર્ભ માટે કોઈ પણ લેખન અપાયું નથી",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> ટેગને બંધ કરતું <code>&lt;/ref&gt;</code> ખૂટે છે",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> ટેગ અસ્તિત્વમાં છે, પણ <code>&lt;references/&gt;</code> ઍવો કોઈ ટેગ ન મળ્યો.",
- "cite_error_group_refs_without_references": " \"$1\" નામના સમૂહમાં <code>&lt;ref&gt;</code> ટેગ વિહરમાન છે, પણ તેને અનુરૂપ <code>&lt;references group=\"$1\"/&gt;</code> ટેગ ન મળ્યો.",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> ટેગને <code>&lt;references&gt;</code> માં આ વિરોધાભાસી લક્ષણ છે : \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code>માં વ્યાખ્યાયીત <code>&lt;ref&gt;</code> ટેગનો સમૂહ ગુણ \"$1\" છે જે પહેલાંની પહેલાંના લેખનમાં નથી.",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code> માં વ્યાખ્યાયિત $1\" નામ સાથેનું <code>&lt;ref&gt;</code> ટેગ આગળના લેખનમાં વપરાયો નથી.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> ટેગની વ્યાખ્યા <code>&lt;references&gt;</code> ને કોઈ નામકરણ નથી.",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> ટેગની વ્યાખ્યા <code>&lt;references&gt;</code> માં \"$1\" નામે છે તેને કોઈ content નથી.",
- "cite_references_link_many_format_backlink_labels": ""
-}
diff --git a/extensions/Cite/i18n/core/he.json b/extensions/Cite/i18n/core/he.json
deleted file mode 100644
index 16b14aed..00000000
--- a/extensions/Cite/i18n/core/he.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Amire80",
- "Rotem Liss",
- "Rotemliss",
- "YaronSh"
- ]
- },
- "cite-desc": "הוספת תגי <span dir=\"ltr\"><nowiki><ref[ name=id]></nowiki></span> ו־<span dir=\"ltr\"><nowiki><references/></nowiki></span> עבור הערות שוליים",
- "cite_error": "שגיאת ציטוט: $1",
- "cite_error_ref_numeric_key": "תג <code>&lt;ref&gt;</code> לא תקין;\nשם (name) לא יכול להיות מספר שלם פשוט. יש להשתמש בכותרת תיאורית",
- "cite_error_ref_no_key": "תג <code>&lt;ref&gt;</code> לא תקין;\nלהערות שוליים ללא תוכן חייב להיות שם (name)",
- "cite_error_ref_too_many_keys": "תג <code>&lt;ref&gt;</code> לא תקין;\nשמות שגויים, למשל, רבים מדי",
- "cite_error_ref_no_input": "תג <code>&lt;ref&gt;</code> לא תקין;\nלהערות שוליים ללא שם חייב להיות תוכן",
- "cite_error_references_invalid_parameters": "תג <code>&lt;references&gt;</code> לא תקין;\nלא ניתן להשתמש בפרמטרים.\nיש להשתמש בקוד <code dir=\"ltr\">&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "תג <code>&lt;references&gt;</code> לא תקין;\nרק הפרמטר \"group\" מותר לשימוש.\nאנא השתמשו בקוד <code dir=\"ltr\">&lt;references /&gt;</code>, או בקוד <code dir=\"ltr\">&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "אזלו תוויות הקישורים המותאמות אישית.\nאנא הגדירו עוד תוויות בהודעת המערכת <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "אזלו תוויות קישורים מותאמות אישית לקבוצה \"$1\".\nהגדירו עוד תוויות בהודעת המערכת <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "תג <code>&lt;ref&gt;</code> לא תקין;\nלא נכתב טקסט עבור הערות השוליים בשם <code>$1</code>",
- "cite_error_included_ref": "חסר תג <code>&lt;/ref&gt;</code> סוגר שמתאים לתג <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "קיימים תגי <code>&lt;ref&gt;</code> עבור קבוצה בשם \"$1\", אך לא נמצא תג <code dir=\"ltr\">&lt;references group=\"$1\"/&gt;</code> מתאים, או שחסר <code dir=\"ltr\">&lt;/ref&gt;</code> סוגר",
- "cite_error_references_group_mismatch": "לתג <code>&lt;ref&gt;</code> המוגדר בתוך <code>&lt;references&gt;</code> יש מאפיין קבוצה (group) סותר, \"$1\".",
- "cite_error_references_missing_group": "לתג <code>&lt;ref&gt;</code> המוגדר בתוך <code>&lt;references&gt;</code> יש מאפיין קבוצה (group) בעל הערך \"$1\", שאינו מופיע בטקסט שלפניו.",
- "cite_error_references_missing_key": "התג <code>&lt;ref&gt;</code> בשם \"$1\" המוגדר בתוך <code>&lt;references&gt;</code> אינו נמצא בשימוש בטקסט שלפניו.",
- "cite_error_references_no_key": "לתג <code>&lt;ref&gt;</code> המוגדר בתוך <code>&lt;references&gt;</code> אין מאפיין שם (name).",
- "cite_error_empty_references_define": "התג <code>&lt;ref&gt;</code> בעל השם \"$1\" המוגדר בתוך <code>&lt;references&gt;</code> אינו מכיל תוכן.",
- "cite_references_link_accessibility_label": "לקפוץ מעלה",
- "cite_references_link_many_accessibility_label": "לקפוץ מעלה אל:",
- "cite_error_refs_without_references_category-desc": "בדף הזה יש תגי <code><nowiki><ref></nowiki></code> ללא קבוצה מוגדרת, אבל אין תג <code><nowiki><references /></nowiki></code> מפורש."
-}
diff --git a/extensions/Cite/i18n/core/hi.json b/extensions/Cite/i18n/core/hi.json
deleted file mode 100644
index 2e930914..00000000
--- a/extensions/Cite/i18n/core/hi.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ansumang",
- "Kaustubh",
- "Shubhamkanodia",
- "Siddhartha Ghai"
- ]
- },
- "cite-desc": "उद्धरणों के लिये <nowiki><ref[ name=id]></nowiki> और <nowiki><references/></nowiki> टैग जोड़ता है।",
- "cite_error": "सन्दर्भ त्रुटि: $1",
- "cite_error_ref_numeric_key": "अमान्य <code>&lt;ref&gt;</code> टैग;\nनाम साधारण संख्या (integer) नहीं हो सकता, कृपया विस्तृत शीर्षक दें।",
- "cite_error_ref_no_key": "अमान्य <code>&lt;ref&gt;</code> टैग;\nखाली संदर्भों का नाम होना आवश्यक है",
- "cite_error_ref_too_many_keys": "अमान्य <code>&lt;ref&gt;</code> टैग;\n(संभवतः कई) अमान्य नाम",
- "cite_error_ref_no_input": "अमान्य <code>&lt;ref&gt;</code> टैग;\nनाम रहित संदर्भों में जानकारी देना आवश्यक है",
- "cite_error_references_invalid_parameters": "अमान्य <code>&lt;references&gt;</code> टैग;\nप्राचल (पैरामीटर) स्वीकृत नहीं हैं।\n<code>&lt;references /&gt;</code> का प्रयोग करें।",
- "cite_error_references_invalid_parameters_group": "अमान्य <code>&lt;references&gt;</code> टैग;\nसिर्फ़ \"group\" प्राचल (पैरामीटर) स्वीकृत है।\n<code>&lt;references /&gt;</code> या <code>&lt;references group=\"...\" /&gt;</code> का प्रयोग करें।",
- "cite_error_references_no_backlink_label": "पृष्ठ पाठ की कड़ियाँ देने वाले विशिष्ट नाम खतम हो गये।\nअधिक नाम <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> संदेश में जोड़ें।",
- "cite_error_no_link_label_group": "\"$1\" संदर्भ समूह के लिये कड़ियों के विशिष्ट नाम कम पड़ गए।\n<nowiki>[[MediaWiki:$2]]</nowiki> सन्देश में और नाम परिभाषित करें।",
- "cite_error_references_no_text": "अमान्य <code>&lt;ref&gt;</code> टैग;\n<code>$1</code> नामक संदर्भ की जानकारी नहीं है",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> टैग के लिए समाप्ति <code>&lt;/ref&gt;</code> टैग नहीं मिला",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> टैग मौजूद हैं, किन्तु कोई <code>&lt;references/&gt;</code> टैग नहीं मिला",
- "cite_error_group_refs_without_references": "\"$1\" नामक सन्दर्भ-समूह के लिए <code>&lt;ref&gt;</code> टैग मौजूद हैं, परन्तु समूह के लिए कोई <code>&lt;references group=\"$1\"/&gt;</code> टैग नहीं मिला। यह भी संभव है कि कोई समाप्ति <code>&lt;/ref&gt;</code> टैग गायब है।",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> में <code>&lt;ref&gt;</code> टैग के लिए group प्राचल (पैरामीटर) में अंतर्विरोधी जानकारी \"$1\" मौजूद है।",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code> में परिभाषित <code>&lt;ref&gt;</code> टैग में group प्राचल (पैरामीटर) \"$1\" दिया है जो उससे पहले पृष्ठ के पाठ में मौजूद नहीं है।",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code> में \"$1\" नाम के साथ परिभाषित <code>&lt;ref&gt;</code> टैग उससे पहले के पाठ में प्रयुक्त नहीं है।",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code> टैग में परिभाषित <code>&lt;ref&gt;</code> टैग का कोई नाम नहीं है।",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code> टैग में परिभाषित \"$1\" नामक <code>&lt;ref&gt;</code> टैग में कोई सामग्री नहीं है।",
- "cite_references_link_many_format_backlink_labels": "अ आ इ ई उ ऊ ए ऐ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल व श ष स ह अ॰अ अ॰आ अ॰इ अ॰ई अ॰उ अ॰ऊ अ॰ए अ॰ऐ अ॰ओ अ॰औ अ॰क अ॰ख अ॰ग अ॰घ अ॰ङ अ॰च अ॰छ अ॰ज अ॰झ अ॰ञ अ॰ट अ॰ठ अ॰ड अ॰ढ अ॰ण अ॰त अ॰थ अ॰द अ॰ध अ॰न अ॰प अ॰फ अ॰ब अ॰भ अ॰म अ॰य अ॰र अ॰ल अ॰व अ॰श अ॰ष अ॰स अ॰ह आ॰अ आ॰आ आ॰इ आ॰ई आ॰उ आ॰ऊ आ॰ए आ॰ऐ आ॰ओ आ॰औ आ॰क आ॰ख आ॰ग आ॰घ आ॰ङ आ॰च आ॰छ आ॰ज आ॰झ आ॰ञ आ॰ट आ॰ठ आ॰ड आ॰ढ आ॰ण आ॰त आ॰थ आ॰द आ॰ध आ॰न आ॰प आ॰फ आ॰ब आ॰भ अ॰म आ॰य आ॰र आ॰ल आ॰व आ॰श आ॰ष आ॰स आ॰ह इ॰अ इ॰आ इ॰इ इ॰ई इ॰उ इ॰ऊ इ॰ए इ॰ऐ इ॰ओ इ॰औ इ॰क इ॰ख इ॰ग इ॰घ इ॰ङ इ॰च इ॰छ इ॰ज इ॰झ इ॰ञ इ॰ट इ॰ठ इ॰ड इ॰ढ इ॰ण इ॰त इ॰थ इ॰द इ॰ध इ॰न इ॰प इ॰फ इ॰ब इ॰भ इ॰म इ॰य इ॰र इ॰ल इ॰व इ॰श इ॰ष इ॰स इ॰ह ई॰अ ई॰आ ई॰इ ई॰ई ई॰उ ई॰ऊ ई॰ए ई॰ऐ ई॰ओ ई॰औ ई॰क ई॰ख ई॰ग ई॰घ ई॰ङ ई॰च ई॰छ ई॰ज ई॰झ ई॰ञ ई॰ट ई॰ठ ई॰ड ई॰ढ ई॰ण ई॰त ई॰थ ई॰द ई॰ध ई॰न ई॰प ई॰फ ई॰ब ई॰भ ई॰म ई॰य ई॰र ई॰ल ई॰व ई॰श ई॰ष ई॰स ई॰ह उ॰अ उ॰आ उ॰इ उ॰ई उ॰उ उ॰ऊ उ॰ए उ॰ऐ उ॰ओ उ॰औ उ॰क उ॰ख उ॰ग उ॰घ उ॰ङ उ॰च उ॰छ उ॰ज उ॰झ उ॰ञ उ॰ट उ॰ठ उ॰ड उ॰ढ उ॰ण उ॰त उ॰थ उ॰द उ॰ध उ॰न उ॰प उ॰फ उ॰ब उ॰भ उ॰म उ॰य उ॰र उ॰ल उ॰व उ॰श उ॰ष उ॰स उ॰ह ऊ॰अ ऊ॰आ ऊ॰इ ऊ॰ई ऊ॰उ ऊ॰ऊ ऊ॰ए ऊ॰ऐ ऊ॰ओ ऊ॰औ ऊ॰क ऊ॰ख ऊ॰ग ऊ॰घ ऊ॰ङ ऊ॰च ऊ॰छ ऊ॰ज ऊ॰झ ऊ॰ञ ऊ॰ट ऊ॰ठ ऊ॰ड ऊ॰ढ ऊ॰ण ऊ॰त ऊ॰थ ऊ॰द ऊ॰ध ऊ॰न ऊ॰प ऊ॰फ ऊ॰ब ऊ॰भ ऊ॰म ऊ॰य ऊ॰र ऊ॰ल ऊ॰व ऊ॰श ऊ॰ष ऊ॰स ऊ॰ह ए॰अ ए॰आ ए॰इ ए॰ई ए॰उ ए॰ऊ ए॰ए ए॰ऐ ए॰ओ ए॰औ ए॰क ए॰ख ए॰ग ए॰घ ए॰ङ ए॰च ए॰छ ए॰ज ए॰झ ए॰ञ ए॰ट ए॰ठ ए॰ड ए॰ढ ए॰ण ए॰त ए॰थ ए॰द ए॰ध ए॰न ए॰प ए॰फ ए॰ब ए॰भ ए॰म ए॰य ए॰र ए॰ल ए॰व ए॰श ए॰ष ए॰स ए॰ह ऐ॰अ ऐ॰आ ऐ॰इ ऐ॰ई ऐ॰उ ऐ॰ऊ ऐ॰ए ऐ॰ऐ ऐ॰ओ ऐ॰औ ऐ॰क ऐ॰ख ऐ॰ग ऐ॰घ ऐ॰ङ ऐ॰च ऐ॰छ ऐ॰ज ऐ॰झ ऐ॰ञ ऐ॰ट ऐ॰ठ ऐ॰ड ऐ॰ढ ऐ॰ण ऐ॰त ऐ॰थ ऐ॰द ऐ॰ध ऐ॰न ऐ॰प ऐ॰फ ऐ॰ब ऐ॰भ ऐ॰म ऐ॰य ऐ॰र ऐ॰ल ऐ॰व ऐ॰श ऐ॰ष ऐ॰स ऐ॰ह ओ॰अ ओ॰आ ओ॰इ ओ॰ई ओ॰उ ओ॰ऊ ओ॰ए ओ॰ऐ ओ॰ओ ओ॰औ ओ॰क ओ॰ख ओ॰ग ओ॰घ ओ॰ङ ओ॰च ओ॰छ ओ॰ज ओ॰झ ओ॰ञ ओ॰ट ओ॰ठ ओ॰ड ओ॰ढ ओ॰ण ओ॰त ओ॰थ ओ॰द ओ॰ध ओ॰न ओ॰प ओ॰फ ओ॰ब ओ॰भ ओ॰म ओ॰य ओ॰र ओ॰ल ओ॰व ओ॰श ओ॰ष ओ॰स ओ॰ह औ॰अ औ॰आ औ॰इ औ॰ई औ॰उ औ॰ऊ औ॰ए औ॰ऐ औ॰ओ औ॰औ औ॰क औ॰ख औ॰ग औ॰घ औ॰ङ औ॰च औ॰छ औ॰ज औ॰झ औ॰ञ औ॰ट औ॰ठ औ॰ड औ॰ढ औ॰ण औ॰त औ॰थ औ॰द औ॰ध औ॰न औ॰प औ॰फ औ॰ब औ॰भ औ॰म औ॰य औ॰र औ॰ल औ॰व औ॰श औ॰ष औ॰स औ॰ह क॰अ क॰आ क॰इ क॰ई क॰उ क॰ऊ क॰ए क॰ऐ क॰ओ क॰औ क॰क क॰ख क॰ग क॰घ क॰ङ क॰च क॰छ क॰ज क॰झ क॰ञ क॰ट क॰ठ क॰ड क॰ढ क॰ण क॰त क॰थ क॰द क॰ध क॰न क॰प क॰फ क॰ब क॰भ क॰म क॰य क॰र क॰ल क॰व क॰श क॰ष क॰स क॰ह ख॰अ ख॰आ ख॰इ ख॰ई ख॰उ ख॰ऊ ख॰ए ख॰ऐ ख॰ओ ख॰औ ख॰क ख॰ख ख॰ग ख॰घ ख॰ङ ख॰च ख॰छ ख॰ज ख॰झ ख॰ञ ख॰ट ख॰ठ ख॰ड ख॰ढ ख॰ण ख॰त ख॰थ ख॰द ख॰ध ख॰न ख॰प ख॰फ ख॰ब ख॰भ ख॰म ख॰य ख॰र ख॰ल ख॰व ख॰श ख॰ष ख॰स ख॰ह ग॰अ ग॰आ ग॰इ ग॰ई ग॰उ ग॰ऊ ग॰ए ग॰ऐ ग॰ओ ग॰औ ग॰क ग॰ख ग॰ग ग॰घ ग॰ङ ग॰च ग॰छ ग॰ज ग॰झ ग॰ञ ग॰ट ग॰ठ ग॰ड ग॰ढ ग॰ण ग॰त ग॰थ ग॰द ग॰ध ग॰न ग॰प ग॰फ ग॰ब ग॰भ ग॰म ग॰य ग॰र ग॰ल ग॰व ग॰श ग॰ष ग॰स ग॰ह घ॰अ घ॰आ घ॰इ घ॰ई घ॰उ घ॰ऊ घ॰ए घ॰ऐ घ॰ओ घ॰औ घ॰क घ॰ख घ॰ग घ॰घ घ॰ङ घ॰च घ॰छ घ॰ज घ॰झ घ॰ञ घ॰ट घ॰ठ घ॰ड घ॰ढ घ॰ण घ॰त घ॰थ घ॰द घ॰ध घ॰न घ॰प घ॰फ घ॰ब घ॰भ घ॰म घ॰य घ॰र घ॰ल घ॰व घ॰श घ॰ष घ॰स घ॰ह ङ॰अ ङ॰आ ङ॰इ ङ॰ई ङ॰उ ङ॰ऊ ङ॰ए ङ॰ऐ ङ॰ओ ङ॰औ ङ॰क ङ॰ख ङ॰ग ङ॰घ ङ॰ङ ङ॰च ङ॰छ ङ॰ज ङ॰झ ङ॰ञ ङ॰ट ङ॰ठ ङ॰ड ङ॰ढ ङ॰ण ङ॰त ङ॰थ ङ॰द ङ॰ध ङ॰न ङ॰प ङ॰फ ङ॰ब ङ॰भ ङ॰म ङ॰य ङ॰र ङ॰ल ङ॰व ङ॰श ङ॰ष ङ॰स ङ॰ह",
- "cite_references_link_accessibility_label": "ऊपर जायें",
- "cite_references_link_many_accessibility_label": "इस तक ऊपर जायें:"
-}
diff --git a/extensions/Cite/i18n/core/hr.json b/extensions/Cite/i18n/core/hr.json
deleted file mode 100644
index ea8d2b5e..00000000
--- a/extensions/Cite/i18n/core/hr.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dalibor Bosits",
- "Dnik",
- "Roberta F.",
- "SpeedyGonsales"
- ]
- },
- "cite-desc": "Dodaje <nowiki><ref[ name=id]></nowiki> i <nowiki><references/></nowiki> oznake, za citiranje",
- "cite_error": "Pogrješka u citiranju: $1",
- "cite_error_ref_numeric_key": "Loša <code>&lt;ref&gt;</code> oznaka; naziv ne smije biti jednostavni broj, koristite opisni naziv",
- "cite_error_ref_no_key": "Loša <code>&lt;ref&gt;</code> oznaka; ref-ovi bez sadržaja moraju imati naziv",
- "cite_error_ref_too_many_keys": "Loša <code>&lt;ref&gt;</code> oznaka; loš naziv, npr. previše naziva",
- "cite_error_ref_no_input": "Loša <code>&lt;ref&gt;</code> oznaka; ref-ovi bez imena moraju imati sadržaj",
- "cite_error_references_invalid_parameters": "Loša <code>&lt;references&gt;</code> oznaka; parametri nisu dozvoljeni, koristite <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Neispravna <code>&lt;references&gt;</code> oznaka;\nDopuštena je samo opcija \"group\".\nKoristite <code>&lt;references /&gt;</code>, ili <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Potrošene sve posebne oznake za poveznice unatrag, definirajte više u poruci <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Nedovoljan broj proizvoljnih naslova poveznica za grupu \"$1\".\nDefinirajte više putem poruke <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Nije zadan tekst za izvor <code>$1</code>",
- "cite_error_included_ref": "Nedostaje zatvarajući <code>&lt;/ref&gt;</code> za <code>&lt;ref&gt;</code> oznaku",
- "cite_error_refs_without_references": "oznake <code>&lt;ref&gt;</code> postoje, ali oznaka <code>&lt;references/&gt;</code> nije pronađena",
- "cite_error_group_refs_without_references": "oznake <code>&lt;ref&gt;</code> postoje za skupinu imenovanom \"$1\", ali nema pripadajuće oznake <code>&lt;references group=\"$1\"/&gt;</code>",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> oznaka u <code>&lt;references&gt;</code> ima konfliktni grupni atribut \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> oznaka definirana u <code>&lt;references&gt;</code> ima grupni atribut \"$1\" koji se ne pojavljuje u ranijem tekstu.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> oznaka s imenom \"$1\" definirana u <code>&lt;references&gt;</code> nije prethodno rabljena u tekstu.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> oznaka definirana u <code>&lt;references&gt;</code> nema parametar \"name\" (ime).",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> oznaka definirana u <code>&lt;references&gt;</code> s imenom \"$1\" nema sadržaja."
-}
diff --git a/extensions/Cite/i18n/core/hsb.json b/extensions/Cite/i18n/core/hsb.json
deleted file mode 100644
index 57f86233..00000000
--- a/extensions/Cite/i18n/core/hsb.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Michawiki"
- ]
- },
- "cite-desc": "Přidawa taflički <nowiki><ref[ name=id]></nowiki> a <nowiki><references /></nowiki> za žórłowe podaća",
- "cite_error": "Referencny zmylk: $1",
- "cite_error_ref_numeric_key": "Njepłaćiwe wužiwanje taflički <code>&lt;ref&gt;</code>; \"name\" njesmě jednora hódnota integer być, wužij wopisowace mjeno.",
- "cite_error_ref_no_key": "Njepłaćiwe wužiwanje taflički <code>&lt;ref&gt;</code>; \"ref\" bjez wobsaha dyrbi mjeno měć.",
- "cite_error_ref_too_many_keys": "Njepłaćiwe wužiwanje taflički <code>&lt;ref&gt;</code>; njepłaćiwe mjena, na př. předołho",
- "cite_error_ref_no_input": "Njepłaćiwe wužiwanje taflički <code>&lt;ref&gt;</code>; \"ref\" bjez mjena dyrbi wobsah měć",
- "cite_error_references_invalid_parameters": "Njepłaćiwe wužiwanje taflički <code>&lt;references&gt;</code>; žane parametry dowolene, wužij jenož <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Njepłaćiwa taflička <code>&lt;references&gt;</code>;\njenož parameter \"group\" je dowoleny.\nWužij <code>&lt;references /&gt;</code> abo <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Zwučene etikety wróćowotkazow wućerpjene.\nDefinuj wjace w powěsći <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Swójske wotkazowe etikety za skupinu \"$1\" hižo njejsu.\nDefinuj dalše w zdźělence <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Njepłaćiwa referenca formy <code>&lt;ref&gt;</code>; žadyn tekst za referency z mjenom <code>$1</code> podaty.",
- "cite_error_included_ref": "Kónčny <code>&lt;/ref&gt;</code> za tafličku <code>&lt;ref&gt;</code> faluje",
- "cite_error_refs_without_references": "Taflički <code>&lt;ref&gt;</code> ekistuja, ale žana taflička code>&lt;references/&gt;</code> je so namakała",
- "cite_error_group_refs_without_references": "Taflički <code>&lt;ref&gt;</code> eksistuja za skupinu z mjenom \"$1\", ale njeje so wotpowědowaca taflička <code>&lt;references group=\"$1\"/&gt;</code> namakała abo začinjacy <code>&lt;/ref&gt;</code> faluje",
- "cite_error_references_group_mismatch": "Taflička <code>&lt;ref&gt;</code> w <code>&lt;references&gt;</code> je ze skupinskim atributom \"$1\" w konflikće.",
- "cite_error_references_missing_group": "Taflička <code>&lt;ref&gt;</code>, kotraž je w <code>&lt;references&gt;</code> definowana, ma skupinski atribut \"$1\", kotryž so w prjedawšim teksće njejewi.",
- "cite_error_references_missing_key": "Taflička <code>&lt;ref&gt;</code> z mjenom \"$1\", kotraž je w <code>&lt;references&gt;</code> definowana, so w prjedawšim teksće njewužiwa.",
- "cite_error_references_no_key": "Taflička <code>&lt;ref&gt;</code>, kotraž je w <code>&lt;references&gt;</code> definowana, mjenowy atribut nima.",
- "cite_error_empty_references_define": "Taflička <code>&lt;ref&gt;</code>, kotraž je w <code>&lt;references&gt;</code> z mjenom \"$1\" definowana, wobsah nima.",
- "cite_references_link_accessibility_label": "Horje skočić",
- "cite_references_link_many_accessibility_label": "Horje skočić do:"
-}
diff --git a/extensions/Cite/i18n/core/hu.json b/extensions/Cite/i18n/core/hu.json
deleted file mode 100644
index dee9ceb2..00000000
--- a/extensions/Cite/i18n/core/hu.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dani",
- "Glanthor Reviol",
- "KossuthRad"
- ]
- },
- "cite-desc": "Lehetővé teszi idézések létrehozását <nowiki><ref[ name=id]></nowiki> és <nowiki><references/></nowiki> tagek segítségével",
- "cite_error": "Forráshivatkozás-hiba: $1",
- "cite_error_ref_numeric_key": "Érvénytelen <code>&lt;ref&gt;</code> tag; a name értéke nem lehet csupán egy szám, használj leíró címeket",
- "cite_error_ref_no_key": "Érvénytelen <code>&lt;ref&gt;</code> tag; a tartalom nélküli ref-eknek kötelező nevet (name) adni",
- "cite_error_ref_too_many_keys": "Érvénytelen <code>&lt;ref&gt;</code> tag; hibás nevek, pl. túl sok",
- "cite_error_ref_no_input": "Érvénytelen <code>&lt;ref&gt;</code> tag; a név (name) nélküli ref-eknek adni kell valamilyen tartalmat",
- "cite_error_references_invalid_parameters": "Érvénytelen <code>&lt;references&gt;</code> tag; nincsenek paraméterei, használd a <code>&lt;references /&gt;</code> formát",
- "cite_error_references_invalid_parameters_group": "Érvénytelen <code>&lt;references&gt;</code> tag; csak a „group” attribútum használható. Használd a <code>&lt;references /&gt;</code>, vagy a <code>&lt;references group=\"...\" /&gt;</code> formát.",
- "cite_error_references_no_backlink_label": "Elfogytak a visszahivatkozásra használt címkék, adj meg többet a <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> üzenetben",
- "cite_error_no_link_label_group": "Nincs több egyedi címke a következő csoport számára: „$1”.\nAdj meg többet a <nowiki>[[MediaWiki:$2]]</nowiki> lapon.",
- "cite_error_references_no_text": "Érvénytelen <code>&lt;ref&gt;</code> tag; nincs megadva szöveg a(z) <code>$1</code> nevű ref-eknek",
- "cite_error_included_ref": "Egy <code>&lt;ref&gt;</code> tag lezáró <code>&lt;/ref&gt;</code> része hiányzik",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code>-ek vannak a lapon, de nincsen <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-ek léteznek a(z) „$1” csoporthoz, de nincs hozzá <code>&lt;references group=\"$1\"/&gt;</code>",
- "cite_error_references_group_mismatch": "A <code>&lt;references&gt;</code> és a benne található <code>&lt;ref&gt;</code> tag csoport-attribútuma („$1”) nem egyezik meg.",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tag lett lett definiálva egy olyan <code>&lt;references&gt;</code> tagben, amely csoport-attribútuma („$1”) nem szerepel a szöveg korábbi részében.",
- "cite_error_references_missing_key": "a <code>&lt;references&gt;</code> tagben definiált „$1” nevű <code>&lt;ref&gt;</code> tag nem szerepel a szöveg korábbi részében.",
- "cite_error_references_no_key": "a <code>&lt;references&gt;</code> tagben definiált <code>&lt;ref&gt;</code> tagnek nincs név attribútuma.",
- "cite_error_empty_references_define": "a <code>&lt;references&gt;</code> szakaszban definiált „$1” <code>&lt;ref&gt;</code> tagnek nincs tartalma.",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">^ $2</span> $3</li>"
-}
diff --git a/extensions/Cite/i18n/core/ia.json b/extensions/Cite/i18n/core/ia.json
deleted file mode 100644
index 21f19b6d..00000000
--- a/extensions/Cite/i18n/core/ia.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "McDutchie"
- ]
- },
- "cite-desc": "Adde etiquettas <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki>, pro citationes",
- "cite_error": "Error de citation: $1",
- "cite_error_ref_numeric_key": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nle nomine non pote esser un numero integre. Usa un titulo descriptive",
- "cite_error_ref_no_key": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nle refs sin contento debe haber un nomine",
- "cite_error_ref_too_many_keys": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nnomines invalide, p.ex. troppo de nomines",
- "cite_error_ref_no_input": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nle refs sin nomine debe haber contento",
- "cite_error_references_invalid_parameters": "Etiquetta <code>&lt;references&gt;</code> invalide;\nnulle parametros es permittite.\nUsa <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Etiquetta <code>&lt;references&gt;</code> invalide;\nsolmente le parametro \"group\" es permittite.\nUsa <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Le etiquettas de retroligamine personalisate es exhaurite.\nDefini plus in le message <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Exhauriva le etiquettas de ligamine personalisabile pro le gruppo \"$1\".\nDefini plus de istes in le message <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nnulle texto esseva fornite pro le refs nominate <code>$1</code>",
- "cite_error_included_ref": "Le clausura <code>&lt;/ref&gt;</code> manca pro le etiquetta <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "Il existe etiquettas <code>&lt;ref&gt;</code> pro un gruppo con nomine \"$1\", ma nulle etiquetta <code>&lt;references group=\"$1\"/&gt;</code> correspondente ha essite trovate, o un etiquetta de termination <code>&lt;/ref&gt;</code> manca.",
- "cite_error_references_group_mismatch": "Le etiquetta <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> ha un attributo de gruppo \"$1\" confligente.",
- "cite_error_references_missing_group": "Le etiquetta <code>&lt;ref&gt;</code> definite in <code>&lt;references&gt;</code> ha un attributo de gruppo \"$1\" que non appare in le texto precedente.",
- "cite_error_references_missing_key": "Le etiquetta <code>&lt;ref&gt;</code> con nomine \"$1\" definite in <code>&lt;references&gt;</code> non es usate in le texto precedente.",
- "cite_error_references_no_key": "Le etiquetta <code>&lt;ref&gt;</code> definite in <code>&lt;references&gt;</code> non ha un attributo de nomine.",
- "cite_error_empty_references_define": "Le etiquetta <code>&lt;ref&gt;</code> definite in <code>&lt;references&gt;</code> con nomine \"$1\" ha nulle contento.",
- "cite_references_link_accessibility_label": "Retornar",
- "cite_references_link_many_accessibility_label": "Retornar a:",
- "cite_error_refs_without_references_category-desc": "Le pagina defini <code><nowiki><ref></nowiki></code>erentias sin gruppo specific, ma non ha un etiquetta <code><nowiki><references /></nowiki></code> explicite."
-}
diff --git a/extensions/Cite/i18n/core/id.json b/extensions/Cite/i18n/core/id.json
deleted file mode 100644
index 2c8ea607..00000000
--- a/extensions/Cite/i18n/core/id.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bennylin",
- "Irwangatot",
- "IvanLanin",
- "Iwan Novirion",
- "Rex"
- ]
- },
- "cite-desc": "Menambahkan tag <nowiki><ref[ name=id]></nowiki> dan <nowiki><references/></nowiki> untuk kutipan",
- "cite_error": "Kesalahan pengutipan: $1",
- "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> tidak sah; \nnama tidak boleh intejer sederhana.\nGunakan nama deskriptif",
- "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> tidak sah;\nreferensi tanpa isi harus memiliki nama",
- "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> tidak sah;\nnama tidak sah; misalnya, terlalu banyak",
- "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> tidak sah;\nreferensi tanpa nama harus memiliki isi",
- "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> tidak sah;\nparameter tidak diperbolehkan.\nGunakan <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> tidak sah;\nhanya parameter \"group\" yang diizinkan.\nGunakan <code>&lt;references /&gt;</code>, atau <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Kehabisan label pralana balik tersuai.\nTambahkan lagi di pesan sistem <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Pranala kustom label untuk kelompok \"$1\" habis.\nTambahkan ketentuan dalam pesan <nowiki> [[MediaWiki:$2]] </nowiki> .",
- "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> tidak sah; \ntidak ditemukan teks untuk ref bernama <code>$1</code>",
- "cite_error_included_ref": "Tag <code>&lt;ref&gt;</code> harus ditutup oleh <code>&lt;/ref&gt;</code>",
- "cite_error_refs_without_references": "Tag <code>&lt;ref&gt;</code> ditemukan, tapi tag <code>&lt;references/&gt;</code> tidak ditemukan",
- "cite_error_group_refs_without_references": "Ditemukan tag <code>&lt;ref&gt;</code> untuk kelompok bernama \"$1\", tapi tidak ditemukan tag <code>&lt;references group=\"$1\"/&gt;</code> yang berkaitan",
- "cite_error_references_group_mismatch": "Tag <code>&lt;ref&gt;</code> di <code>&lt;references&gt;</code> ada atribut kelompok \"$1\" yang konflik.",
- "cite_error_references_missing_group": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di <code>&lt;references&gt;</code> memiliki atribut kelompok \"$1\" yang tidak ditampilkan di teks sebelumnya.",
- "cite_error_references_missing_key": "Tag <code>&lt;ref&gt;</code> dengan nama \"$1\" yang didefinisikan di <code>&lt;references&gt;</code> tidak digunakan pada teks sebelumnya.",
- "cite_error_references_no_key": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di di <code>&lt;references&gt;</code> tidak memiliki nama atribut.",
- "cite_error_empty_references_define": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di di <code>&lt;references&gt;</code> dengan nama \"$1\" tidak memiliki isi.",
- "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>"
-}
diff --git a/extensions/Cite/i18n/core/ilo.json b/extensions/Cite/i18n/core/ilo.json
deleted file mode 100644
index 08ca95b9..00000000
--- a/extensions/Cite/i18n/core/ilo.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Lam-ang"
- ]
- },
- "cite-desc": "Aginayon kadagiti etiketa ti <nowiki><ref[ name=id]></nowiki> ken <nowiki><references/></nowiki>, para kadagiti panagdakamat",
- "cite_error": "Biddut ti dakamat: $1",
- "cite_error_ref_numeric_key": "Imbalido ti etiketa ti <code>&lt;ref&gt;</code>;\nti nagan ket saan a mabalin a nalaka a sibubukel. Agusar ti makaipalawag a titulo",
- "cite_error_ref_no_key": "Imbalido nga etiketa ti <code>&lt;ref&gt;</code> ;\ndagita ref nga awan nagyanna ket masapul nga adda naganna",
- "cite_error_ref_too_many_keys": "Imbalido nga etiketa ti <code>&lt;ref&gt;</code> ;\nimbalido a nag-nagan, a kas adu unay",
- "cite_error_ref_no_input": "Imbalido nga etiketa ti <code>&lt;ref&gt;</code> ;\ndagiti ref nga awan ti naganna ket masapul nga addaan ti nagyan",
- "cite_error_references_invalid_parameters": "Imbalido nga etiketa ti <code>&lt;references&gt;</code>;\nsaan a maipalubos dagiti parametro.\nUsaren ti <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Imbalido nga etiketa ti <code>&lt;references&gt;</code> ;\nmaipalubos laeng ti parametro ti \"grupo\" .\nUsaren ti <code>&lt;references /&gt;</code> , wenno<code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Naibusan kadagiti etiketa ti naisangayan a silpo ti likud.\nIpalawag pay ti adu idiay mensahe ti <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Naibusan kadagiti etiketa ti nangruna a silpo para iti grupo ti \"$1\".\nIpalawag pay ti adu idiay mensahe ti <nowiki>[[MediaWiki:$2]]</nowiki> .",
- "cite_error_references_no_text": "Imbalido nga etiketa ti <code>&lt;ref&gt;</code> ;\nawan ti testo a naited para kadagiti ref a nanaganan <code>$1</code>",
- "cite_error_included_ref": "Irikepen ti <code>&lt;/ref&gt;</code> napukaw para iti etiketa ti <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "Adda dagiti etiketa ti <code>&lt;ref&gt;</code> para iti grupo a nanaganan ti \"$1\", ngem awan ti kapada nga etiketa ti <code>&lt;references group=\"$1\"/&gt;</code> a nabirukan, wenno awan ti pangrikep ti <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "Ti etiketa ti <code>&lt;ref&gt;</code> iday <code>&lt;references&gt;</code> ket addan ti kasinnungat a gupit ti grupo ti \"$1\".",
- "cite_error_references_missing_group": "Ti etiketa ti <code>&lt;ref&gt;</code> a naipalawag idiay <code>&lt;references&gt;</code> ket addaan ti gupit ti grupo ti \"$1\" a saan nga agparang iti napalabas a testo.",
- "cite_error_references_missing_key": "Ti etiketa ti <code>&lt;ref&gt;</code> nga addaan ti nagan ti \"$1\" a naipalawag idiay <code>&lt;references&gt;</code> ket saan a nausar iti napalabas a testo.",
- "cite_error_references_no_key": "Ti etiketa ti <code>&lt;ref&gt;</code> a naipalawag idiay <code>&lt;references&gt;</code> ket awan ti nainagan a gupit.",
- "cite_error_empty_references_define": "Ti etiketa ti <code>&lt;ref&gt;</code> a naipalawag idiay <code>&lt;references&gt;</code> nga addaan ti nagan a \"$1\" ket awan ti nagyanna.",
- "cite_references_link_accessibility_label": "Mapan iti ngato",
- "cite_references_link_many_accessibility_label": "Mapan aginggana iti:",
- "cite_error_refs_without_references_category-desc": "Ti panid ket addaan kadagiti <code><nowiki><ref></nowiki></code> a naipalawag nga awan ti naisangayan a grupo, ngem awan ti nalawag nga etiketa ti <code><nowiki><references /></nowiki></code>."
-}
diff --git a/extensions/Cite/i18n/core/is.json b/extensions/Cite/i18n/core/is.json
deleted file mode 100644
index 7da313d8..00000000
--- a/extensions/Cite/i18n/core/is.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Snævar"
- ]
- },
- "cite_error": "Tilvísunar villa: $1",
- "cite_error_ref_numeric_key": "Villa í <code>&lt;ref&gt;</code> tag;\nnafn tilvísunar má ekki vera heil tala. Notaðu lýsandi titil",
- "cite_error_ref_no_key": "Villa í <code>&lt;ref&gt;</code> tag;\ntilvísunin verður annaðhvort að hafa nafn eða innihald.",
- "cite_error_ref_too_many_keys": "Villa í <code>&lt;ref&gt;</code> tag;\nógilt nafn, t.d. of mörg",
- "cite_error_ref_no_input": "Villa í <code>&lt;ref&gt;</code> tag;\ntilvísunin verður annaðhvort að hafa nafn eða innihald.",
- "cite_error_references_invalid_parameters": "Villa í <code>&lt;ref&gt;</code> tag;\nengir stikar eru leyfðir\nNotaðu <code>&lt;references /&gt;</code> í staðinn",
- "cite_error_references_invalid_parameters_group": "Villa í <code>&lt;ref&gt;</code> tag;\naðeins einn stiki er leyfður, \"group\"\nNotaðu <code>&lt;references /&gt;</code> eða <code>&lt;references group=\"...\" /&gt;</code> í staðinn.",
- "cite_error_references_no_text": "Villa í <code>&lt;ref&gt;</code> tag;\ntilgreindu texta fyrir tilvísun með nafnið <code>$1</code>",
- "cite_error_included_ref": "Loka þarf tilvísunni með <code>&lt;/ref&gt;</code> tagi",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> tag er til fyrir hóp tilvísana undir nafninu \"$1\". Annaðhvort finnst ekkert sambærilegt <code>&lt;references group=\"$1\"/&gt;</code> tag, eða að það vanti að loka taginu með <code>&lt;/ref&gt;</code>.",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tag í <code>&lt;references&gt;</code> stangast á við hópa eigindið \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tag skilgreint í <code>&lt;references&gt;</code> hefur hópa eigindið \"$1\" sem birtist ekki í textanum á undan.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> tag með nafnið \"$1\" og er skilgreint í <code>&lt;references&gt;</code> er ekki notað í textanum á undan.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> tag skilgreint í <code>&lt;references&gt;</code> hefur engin nafna eigindi.",
- "cite_error_empty_references_define": "Bæta þarf innihaldi við tilvísun með nafnið \"$1\"."
-}
diff --git a/extensions/Cite/i18n/core/it.json b/extensions/Cite/i18n/core/it.json
deleted file mode 100644
index 8f53f413..00000000
--- a/extensions/Cite/i18n/core/it.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Beta16",
- "BrokenArrow",
- "Darth Kule",
- "Erdemaslancan",
- "Gianfranco",
- "Pietrodn",
- "Horcrux92"
- ]
- },
- "cite-desc": "Aggiunge i tag <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> per gestire le citazioni",
- "cite_error": "Errore nella funzione Cite: $1",
- "cite_error_ref_numeric_key": "Errore nell'uso del marcatore <code>&lt;ref&gt;</code>: il nome non può essere un numero intero. Usare un titolo esteso",
- "cite_error_ref_no_key": "Errore nell'uso del marcatore <code>&lt;ref&gt;</code>: i ref vuoti non possono essere privi di nome",
- "cite_error_ref_too_many_keys": "Errore nell'uso del marcatore <code>&lt;ref&gt;</code>: nomi non validi (ad es. numero troppo elevato)",
- "cite_error_ref_no_input": "Errore nell'uso del marcatore <code>&lt;ref&gt;</code>: i ref privi di nome non possono essere vuoti",
- "cite_error_references_invalid_parameters": "Errore nell'uso del marcatore <code>&lt;references&gt;</code>: parametri non ammessi, usare il marcatore <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Errore nell'uso del marcatore <code>&lt;references&gt;</code>;\nsolo il parametro \"group\" è permesso.\nUsare <code>&lt;references /&gt;</code> oppure <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Etichette di rimando personalizzate esaurite, aumentarne il numero nel messaggio <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Etichette esaurite per collegamenti personalizzati del gruppo \"$1\", aumentarne il numero nel messaggio <nowiki>[[MediaWiki:$2]]</nowiki>",
- "cite_error_references_no_text": "Marcatore <code>&lt;ref&gt;</code> non valido; non è stato indicato alcun testo per il marcatore <code>$1</code>",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> di chiusura mancante per il marcatore <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "Sono presenti dei marcatori <code>&lt;ref&gt;</code> per un gruppo chiamato \"$1\" ma non è stato trovato alcun marcatore <code>&lt;references group=\"$1\"/&gt;</code> corrispondente, o manca la chiusura <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "Il tag <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> ha attributo gruppo \"$1\" in conflitto.",
- "cite_error_references_missing_group": "Il tag <code>&lt;ref&gt;</code> definito in <code>&lt;references&gt;</code> ha un attributo gruppo \"$1\" che non compare nel testo precedente.",
- "cite_error_references_missing_key": "Il tag <code>&lt;ref&gt;</code> con nome \"$1\" definito in <code>&lt;references&gt;</code> non è usato nel testo precedente.",
- "cite_error_references_no_key": "Il tag <code>&lt;ref&gt;</code> definito in <code>&lt;references&gt;</code> non ha un attributo nome.",
- "cite_error_empty_references_define": "Il tag <code>&lt;ref&gt;</code> definito in <code>&lt;references&gt;</code> con nome \"$1\" non ha alcun contenuto.",
- "cite_references_link_accessibility_label": "Salta",
- "cite_references_link_many_accessibility_label": "Salta a:",
- "cite_error_refs_without_references_category-desc": "La pagina ha un <code><nowiki><ref></nowiki></code> definito senza alcun gruppo specificato, ma non c'è alcun tag esplicito <code><nowiki><references /></nowiki></code>."
-}
diff --git a/extensions/Cite/i18n/core/ja.json b/extensions/Cite/i18n/core/ja.json
deleted file mode 100644
index e0c18787..00000000
--- a/extensions/Cite/i18n/core/ja.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Aotake",
- "Ficell",
- "Fryed-peach",
- "JtFuruhata",
- "Shirayuki"
- ]
- },
- "cite-desc": "引用のためのタグ <nowiki><ref[ name=id]></nowiki> および <nowiki><references/></nowiki> を追加する",
- "cite_error": "引用エラー: $1",
- "cite_error_ref_numeric_key": "無効な <code>&lt;ref&gt;</code> タグです。\n名前 (name 属性) に単なる整数は使用できません。説明的なものにしてください",
- "cite_error_ref_no_key": "無効な <code>&lt;ref&gt;</code> タグです。\n引用句の内容がない場合は名前 (name 属性) が必要です",
- "cite_error_ref_too_many_keys": "無効な <code>&lt;ref&gt;</code> タグです。\n名前 (name 属性) が無効です (数が多すぎる、など)",
- "cite_error_ref_no_input": "無効な <code>&lt;ref&gt;</code> タグです。\n名前 (name 属性) がない場合は引用句の内容が必要です",
- "cite_error_references_invalid_parameters": "無効な <code>&lt;references&gt;</code> タグです。\n引数は指定できません。\n<code>&lt;references /&gt;</code> を使用してください",
- "cite_error_references_invalid_parameters_group": "無効な <code>&lt;references&gt;</code> タグです。\n使用できる引数は「group」のみです。\n<code>&lt;references /&gt;</code> または <code>&lt;references group=\"...\" /&gt;</code> を使用してください",
- "cite_error_references_no_backlink_label": "カスタム バックリンク ラベルを使い果たしました。\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> メッセージでの定義を増やしてください。",
- "cite_error_no_link_label_group": "グループ「$1」用のカスタム リンク ラベルを使い果たしました。\n<nowiki>[[MediaWiki:$2]]</nowiki> メッセージを編集してラベルの定義を増やしてください。",
- "cite_error_references_no_text": "無効な <code>&lt;ref&gt;</code> タグです。\n「<code>$1</code>」という名前の引用句に対するテキストが指定されていません",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> タグに対応する <code>&lt;/ref&gt;</code> タグが不足しています",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> タグがありますが、<code>&lt;references/&gt;</code> タグが見つかりません",
- "cite_error_group_refs_without_references": "「$1」という名前のグループの <code>&lt;ref&gt;</code> タグがありますが、対応する <code>&lt;references group=\"$1\"/&gt;</code> タグが見つからない、または閉じる <code>&lt;/ref&gt;</code> タグがありません",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> の <code>&lt;ref&gt;</code> タグで、group 属性「$1」が重複しています。",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code> で定義されている <code>&lt;ref&gt;</code> タグに、先行するテキスト内で使用されていない group 属性「$1」があります。",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code> で定義されている <code>&lt;ref&gt;</code> タグ (name=\"$1\") は、先行するテキスト内で使用されていません。",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code> で定義されている <code>&lt;ref&gt;</code> タグに name 属性がありません。",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code> で定義されている <code>&lt;ref&gt;</code> タグ (name=\"$1\") に内容がありません。",
- "cite_references_link_accessibility_label": "元の位置に戻る",
- "cite_references_link_many_accessibility_label": "以下の位置に戻る:"
-}
diff --git a/extensions/Cite/i18n/core/jv.json b/extensions/Cite/i18n/core/jv.json
deleted file mode 100644
index f441f1c2..00000000
--- a/extensions/Cite/i18n/core/jv.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bennylin",
- "Iwan Novirion",
- "Meursault2004",
- "NoiX180",
- "Pras"
- ]
- },
- "cite-desc": "Nambahaké tag <nowiki><ref[ name=id]></nowiki> lan <nowiki><references/></nowiki> kanggo kutipan (sitat)",
- "cite_error": "Kaluputan sitat (pangutipan) $1",
- "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> ora absah;\njenengé ora bisa namung angka integer waé. Gunakna irah-irahan (judhul) dèskriptif",
- "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> ora absah;\nrefs tanpa isi kudu duwé jeneng",
- "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> ora absah;\njeneng-jenengé ora absah, contoné kakèhan",
- "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> ora absah;\nrefs tanpa jeneng kudu ana isiné",
- "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> ora absah;\nora ana paramèter sing diidinaké.\nGunakna <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> ora absah;\nnamung paramèter \"group\" sing diolèhaké.\nGunakna <code>&lt;references /&gt;</code>, utawa <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Kentèkan label pranala balik.\nTambahna ing pesenan sistém <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Labèl pranala umum kanggo klompok \"$1\" entèk.\nTambahaké katemton nèng layang <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> ora absah; \nora ditemokaké tèks kanggo ref mawa jeneng <code>$1</code>",
- "cite_error_included_ref": "Panutupan <code>&lt;/ref&gt;</code> kélangan tag <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Tag <code>&lt;ref&gt;</code> ditemokaké, nanging tag <code>&lt;references/&gt;</code> ora ditemokaké",
- "cite_error_group_refs_without_references": "Tag <code>&lt;ref&gt;</code> ditemokaké kanggo paguyuban ajeneng \"$1\", nanging tag <code>&lt;references group=\"$1\"/&gt;</code> sing ana kaitané ora ditemokaké, utawa tag panutup <code>&lt;/ref&gt;</code> ora diwénéhi",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tandha <code>&lt;references&gt;</code> nduwèni atribut klompok sing marai konflik \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tag sing didhèfinisikaké <code>&lt;references&gt;</code> nduwèni atribut klompok \"$1\" sing ora njedhul sing tèks sakdurungé.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> tag sing didhefinisikaké mawa jeneng \"$1\" <code>&lt;references&gt;</code> ora dianggo nèng tèks sakdurungé.",
- "cite_error_references_no_key": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di di <code>&lt;references&gt;</code> tidak memiliki nama atribut.",
- "cite_error_empty_references_define": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di di <code>&lt;references&gt;</code> dengan nama \"$1\" tidak memiliki isi.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "cite_ref-",
- "cite_references_link_prefix": "cite_note-",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_link_one": "<li id=\"$1\">'''<span class=\"mw-cite-backlink\">[[#$2|^]]</span>''' $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">'''^''' $2</span> $3</li>",
- "cite_references_link_many_format": "<sup>[[#$1|'''''$2''''']]</sup>",
- "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;",
- "cite_references_link_accessibility_label": "Mencolot munggah",
- "cite_references_link_many_accessibility_label": "Mencolot munggah menyang:"
-}
diff --git a/extensions/Cite/i18n/core/ka.json b/extensions/Cite/i18n/core/ka.json
deleted file mode 100644
index 6dfb382a..00000000
--- a/extensions/Cite/i18n/core/ka.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "David1010",
- "Dawid Deutschland",
- "Nodar Kherkheulidze",
- "გიორგიმელა"
- ]
- },
- "cite-desc": "ამატებს <nowiki><ref[ name=id]></nowiki> და <nowiki><references/></nowiki> ტეგებს სქოლიოსთვის",
- "cite_error": "ციტირების შეცდომა $1",
- "cite_error_ref_numeric_key": "არასწორი <code>&lt;ref&gt;</code> ტეგი;\nსახელი არ უნდა შეიცავდეს ციფრებს. გამოიყენეთ აღწერილობითი სახელწოდება.",
- "cite_error_ref_no_key": "არასწორი ტეგი <code>&lt;ref&gt;</code>;\nელემენტი უნდა შეიცავდეს სახელს.",
- "cite_error_ref_too_many_keys": "არასწორი ტეგი <code>&lt;ref&gt;</code>;\nარასწორი სახელები, ძალიან ბევრი.",
- "cite_error_ref_no_input": "არასწორი ტეგი <ref>; ელემენტი უნდა შეიცავდეს შინაარს.",
- "cite_error_references_invalid_parameters": "არასწორი ტეგი <code>&lt;references&gt;</code>;\nპარამეტრები არ არის დაშვებული.\nგამოიყენეთ <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "არასწორი<code>&lt;references&gt;</code> გამოყენება: \nდაშვებულია მხოლო პარამეტრი „group“-ის გამოყენება.\nგამოიყენე <tt>&lt;references /&gt;</tt> ან <tt>&lt;references group=\"…\" /&gt;</tt>",
- "cite_error_references_no_backlink_label": "არ არის საკმარისი სიმბოლო მზარდი ჰიპერბმულებისათვის.\nსაჭიროა გააფართოვოთ სისტემური შეტყობინება <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "მომხმარებელთა ბმულების მონიშვნები ჯგუფისათვის „$1“ დასრულდა.\nგანსაზღვრეთ დამატებითები შეტყობინებაში <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "არასწორი ტეგი <code>&lt;ref&gt;</code>;\nსქოლიოსათვის <code>$1</code> არ არის მითითებული ტექსტი",
- "cite_error_included_ref": "დამხურავი ტეგი <code>&lt;/ref&gt;</code> დაკარგულია",
- "cite_error_refs_without_references": "არსებული ტეგისათვის <code>&lt;ref&gt;</code> ვერ მოიძებნა შესაბამისი ტეგი <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "ჯგუფი „$1“ არსებული ტეგებისათვის <code>&lt;ref&gt;</code> ვერ მოიძებნა შესაბამისი ტეგი <code>&lt;references group=\"$1\"/&gt;</code>, ან გამოტოვებულია დამხურავი ტეგი <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "ტეგს <code>&lt;ref&gt;</code> <code>&lt;references&gt;</code>-ში გააჩნია ატრიბუტთა კონფლიქტური ჯგუფები „$1“.",
- "cite_error_references_missing_group": "ტეგს <code>&lt;ref&gt;</code>, განმარტებულს <code>&lt;references&gt;</code>-ში, გააჩნია ჯგუფის ატრიბუტი „$1“, რომელიც ადრეულ ტექსტში არ მოიხსენიება.",
- "cite_error_references_missing_key": "ტეგი <code>&lt;ref&gt;</code> სახელად „$1“, გარკვეული <code>&lt;references&gt;</code>-ში, არ გამოიყენება წინა ტექსტში.",
- "cite_error_references_no_key": "ტეგს <code>&lt;ref&gt;</code>, გარკვეულს <code>&lt;references&gt;</code>-ში, სახელის ატრიბუტი არ გააჩნია.",
- "cite_error_empty_references_define": "ტეგს <code>&lt;ref&gt;</code>, გარკვეულს <code>&lt;references&gt;</code>-ში, სახელით „$1“ არ გააჩნია შინაარსი.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
- "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;"
-}
diff --git a/extensions/Cite/i18n/core/kk-cyrl.json b/extensions/Cite/i18n/core/kk-cyrl.json
deleted file mode 100644
index bb6db2cc..00000000
--- a/extensions/Cite/i18n/core/kk-cyrl.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Arystanbek",
- "Kaztrans"
- ]
- },
- "cite-desc": "Сілтемелер үшін <nowiki><ref[ name=id]></nowiki> және <nowiki><references/></nowiki> белгішелерін қолданыңыз",
- "cite_error": "Дереккөз алу қатесі: $1",
- "cite_error_ref_numeric_key": "Жарамсыз <code>&lt;ref&gt;</code> белгішесі;\nатау кәдімгі бүтін сан болуы мүмкін емес. Сипатауыш атау қолданыңыз",
- "cite_error_ref_no_key": "Жарамсыз <code>&lt;ref&gt;</code> белгішесі;\nмағлұматсыз дерекөздерде атау болуы қажет",
- "cite_error_ref_too_many_keys": "Жарамсыз <code>&lt;ref&gt;</code> белгіше; \nжарамсыз атаулар, мысалы, тым көп",
- "cite_error_ref_no_input": "Жарамсыз <code>&lt;ref&gt;</code> белгіше;\nатаусыз дереккөздерде мағлұматы болуы қажет",
- "cite_error_references_invalid_parameters": "Жарамсыз <code>&lt;references&gt;</code> белгіше;\nеш параметр рұқсат етілмейді, \nбылай <code>&lt;references /&gt;</code> қолданыңыз",
- "cite_error_references_invalid_parameters_group": "Жарамсыз <code>&lt;references&gt;</code> тегі;\nтек \"group\" параметрін рұқсат етеді.\nКелесідей қолданыңыз: <code>&lt;references /&gt;</code>, or <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Өзгертпелі белгілердің саны бітті, одан әрі көбірек <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> жүйе хабарында белгілеңіз",
- "cite_error_no_link_label_group": "\"$1\" тобы үшін өзгертпелі сілтеме белгілері бітті.\nDefine more in the <nowiki>[[MediaWiki:$2]]</nowiki> message.",
- "cite_error_references_no_text": "Жарамсыз <code>&lt;ref&gt;</code> тегі;\nno text was provided for refs named <code>$1</code>",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> тегін <code>&lt;/ref&gt;</code> тегімен жабуды қажет етеді",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> тегі бар, бірақ <code>&lt;references/&gt;</code> тегі табылмады",
- "cite_error_group_refs_without_references": "\"$1\" деп аталған дереккөз тобында <code>&lt;ref&gt;</code> тегі бар, бірақ тиісті <code>&lt;references group=\"$1\"/&gt;</code> тегі табылмады, немесе <code>&lt;/ref&gt;</code> жабу тегін қажет етеді",
- "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
- "cite_references_link_accessibility_label": "Жоғарыға көтеріліңіз",
- "cite_references_link_many_accessibility_label": "Мынаған өту:"
-}
diff --git a/extensions/Cite/i18n/core/ko.json b/extensions/Cite/i18n/core/ko.json
deleted file mode 100644
index 5f595a3b..00000000
--- a/extensions/Cite/i18n/core/ko.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ficell",
- "Ilovesabbath",
- "Kwj2772",
- "ToePeu",
- "아라"
- ]
- },
- "cite-desc": "인용에 쓰이는 <nowiki><ref[ name=id]></nowiki>와 <nowiki><references/></nowiki> 태그를 추가합니다",
- "cite_error": "인용 오류: $1",
- "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n이름은 숫자가 될 수 없습니다. 설명적인 이름을 사용하세요",
- "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n내용이 없는 주석은 이름이 있어야 합니다",
- "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n잘못된 이름입니다, 너무 많은 등",
- "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n이름이 없는 ref 태그는 반드시 내용이 있어야 합니다",
- "cite_error_references_invalid_parameters": "<code>&lt;references&gt;</code> 태그가 잘못되었습니다;\n변수를 넣으면 안됩니다.\n<code>&lt;references /&gt;</code>를 사용하세요",
- "cite_error_references_invalid_parameters_group": "<code>&lt;references&gt;</code> 태그가 잘못되었습니다;\n\"group\" 변수만 사용할 수 있습니다.\n<code>&lt;references /&gt;</code>나 <code>&lt;references group=\"...\" /&gt;</code>를 사용하세요",
- "cite_error_references_no_backlink_label": "사용자 지정 백링크 라벨이 바닥이 났습니다.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>메시지에 더 정의하세요.",
- "cite_error_no_link_label_group": "\"$1\" 그룹에 대해 사용자 지정 링크 레이블이 바닥이 났습니다.\n<nowiki>[[MediaWiki:$2]]</nowiki> 메시지에 더 정의하세요.",
- "cite_error_references_no_text": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n<code>$1</code>라는 이름을 가진 주석에 제공한 텍스트가 없습니다",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> 태그를 닫는 <code>&lt;/ref&gt;</code> 태그가 없습니다",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> 태그가 존재하지만, <code>&lt;references/&gt;</code> 태그가 없습니다",
- "cite_error_group_refs_without_references": "\"$1\"이라는 이름을 가진 그룹에 대한 <code>&lt;ref&gt;</code> 태그가 존재하지만, 이에 대응하는 <code>&lt;references group=\"$1\" /&gt;</code> 태그가 없거나, 태그를 닫는 <code>&lt;/ref&gt;</code> 태그가 없습니다",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> 안에 있는 <code>&lt;ref&gt;</code> 태그에서 \"$1\" 그룹 특성이 충돌됩니다.",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code> 안에 정의된 <code>&lt;ref&gt;</code> 태그에 이전 텍스트에 없는 \"$1\" 그룹 특성이 있습니다.",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code> 안에 정의된 \"$1\"이라는 이름을 가진 <code>&lt;ref&gt;</code> 태그가 위에서 사용되고 있지 않습니다.",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code> 안에 정의된 <code>&lt;ref&gt;</code> 태그에 이름 특성이 없습니다.",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code> 태그 안에 정의된 \"$1\"이라는 이름을 가진 <code>&lt;ref&gt;</code> 태그에 내용이 없습니다.",
- "cite_references_link_many_format_backlink_labels": "가 나 다 라 마 바 사 아 자 차 카 타 파 하 거 너 더 러 머 버 서 어 저 처 커 터 퍼 허 고 노 도 로 모 보 소 오 조 초 코 토 포 호 구 누 두 루 무 부 수 우 주 추 쿠 투 푸 후 그 느 드 르 므 브 스 으 즈 츠 크 트 프 흐 기 니 디 리 미 비 시 이 지 치 키 티 피 히",
- "cite_references_link_accessibility_label": "이동",
- "cite_references_link_many_accessibility_label": "이동:"
-}
diff --git a/extensions/Cite/i18n/core/ksh.json b/extensions/Cite/i18n/core/ksh.json
deleted file mode 100644
index ebcb8577..00000000
--- a/extensions/Cite/i18n/core/ksh.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Purodha",
- "The Evil IP address"
- ]
- },
- "cite-desc": "Erlaub Quelle un Referenze met <nowiki><ref[ name=\"id\"]></nowiki> un <nowiki><references /></nowiki> aanzejevve.",
- "cite_error": "Fähler in <i lang=\"en\">cite</i> met Referenze: $1",
- "cite_error_ref_numeric_key": "Fähler en <i lang=\"en\">cite</i>:\nEne <code>&lt;ref&gt;</code>-Name kann kei Zahl sin.\nNemm enne Tittel, dä jät säht.",
- "cite_error_ref_no_key": "Fähler en <i lang=\"en\">cite</i>:\nE <code>&lt;ref&gt;</code> oohne Enhalt moß ene Name han.\nNemm enne Tittel, dä jät säht.",
- "cite_error_ref_too_many_keys": "Fähler en <i lang=\"en\">cite</i>:\nZo fill <code>&lt;ref&gt;</code>-Name,\nudder kapodde ene Name.",
- "cite_error_ref_no_input": "Fähler en <i lang=\"en\">cite</i>:\nE <code>&lt;ref&gt;</code> oohne Name moß ene Enhallt han.",
- "cite_error_references_invalid_parameters": "Fähler en <i lang=\"en\">cite</i>:\nE <code>&lt;references&gt;</code> moß oohne Parrametere sin.\nNemm eifach <code>&lt;references /&gt;</code> un söns nix.",
- "cite_error_references_invalid_parameters_group": "Fähler en <i lang=\"en\">cite</i>:\nE <code>&lt;references&gt;</code> darf nur dä Parrameeter „<code>group</code>“ han.\nNemm eifach <code>&lt;references /&gt;</code> udder <code>&lt;references group=\"...\" /&gt;</code> un söns nix.",
- "cite_error_references_no_backlink_label": "Fähler en <i lang=\"en\">cite</i>:\nNit jenoch Name för retuur-Lengks.\nDonn mieh en dä Sigg <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> enndrare.",
- "cite_error_no_link_label_group": "För de Jruppe „$1“ senn er kein Bezeichnunge för Links mieh doh.\nDonn op <nowiki>[[MediaWiki:$2]]</nowiki> noch e paa dobei.",
- "cite_error_references_no_text": "Fähler en <i lang=\"en\">cite</i>:\nEt wohr keine Tex aanjejovve för de\n<code>&lt;ref&gt;</code>s met dämm Name „<code>$1</code>“.",
- "cite_error_included_ref": "Hee för dat <code>&lt;ref&gt;</code> ham_mer kei zopaß <code>&lt;/ref&gt;</code>",
- "cite_error_refs_without_references": "Et sinn_er <code>&lt;ref&gt;</code>-Befähle en dä Sigg, ävver mer han keine <code>&lt;references/&gt;</code>-Befähl jefunge.",
- "cite_error_group_refs_without_references": "Et sinn_er <code>&lt;ref&gt;</code>-Befähle för de Jrop „$1“ en heh dä Sigg, ävver mer han keine <code>&lt;references group=\"$1\"/&gt;</code>-Befähl jefonge, udder dä Befähl <code>&lt;/ref&gt;</code> zom zohmaache es nit doh.",
- "cite_error_references_group_mismatch": "Dä <code>&lt;ref&gt;</code> Befähl en <code>&lt;references&gt;</code> hät en widerschpröschlesche Jroppe-Eijeschaff „$1“.",
- "cite_error_references_missing_group": "Dä <code>&lt;ref&gt;</code> Befähl, aanjejoove em Befähl <code>&lt;references&gt;</code>, hät en Jroppe-Eijeschaff „$1“, di ävver em Täx doför nit vörjekumme es.",
- "cite_error_references_missing_key": "Dä <code>&lt;ref&gt;</code> Befähl mem Naame „$1“, aanjejoove em Befähl <code>&lt;references&gt;</code>, es em Täx doför nit vörjekumme.",
- "cite_error_references_no_key": "Dä <code>&lt;ref&gt;</code> Befähl, aanjejoove em Befähl <code>&lt;references&gt;</code>, hät kei Eijeschaff <code>name=</code> aanjejovve.",
- "cite_error_empty_references_define": "Dä <code>&lt;ref&gt;</code> Befähl mem Naame „$1“, aanjejoove em Befähl <code>&lt;references&gt;</code> mem Name „$1“, hät keine Enhallt.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "fohss_noht_betreck_",
- "cite_references_link_prefix": "fohss_noht_nommer_",
- "cite_references_link_many_and": "&#32;",
- "cite_references_link_accessibility_label": "Jangk noh bovve",
- "cite_references_link_many_accessibility_label": "Jangk noh bovve op:"
-}
diff --git a/extensions/Cite/i18n/core/kw.json b/extensions/Cite/i18n/core/kw.json
deleted file mode 100644
index 37ed7857..00000000
--- a/extensions/Cite/i18n/core/kw.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kernoweger",
- "Nrowe"
- ]
- },
- "cite_error": "Gwall devynna: $1",
- "cite_error_refs_without_references": "Yma tagys <code>&lt;ref&gt;</code>, mes ny gavas tag <code>&lt;references/&gt;</code>"
-}
diff --git a/extensions/Cite/i18n/core/lb.json b/extensions/Cite/i18n/core/lb.json
deleted file mode 100644
index 0178d08e..00000000
--- a/extensions/Cite/i18n/core/lb.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Les Meloures",
- "Robby"
- ]
- },
- "cite-desc": "Setzt <nowiki><ref[ name=id]></nowiki> an <nowiki><references/></nowiki> Taggen derbäi, fir Zitatiounen.",
- "cite_error": "Zitéierfeeler: $1",
- "cite_error_ref_numeric_key": "Ongëltegen <code>&lt;ref&gt;</code> Tag;\nDen Numm ka keng einfach ganz Zuel sinn. Benotzt w.e.g. een Titel den eng Beschreiwung gëtt",
- "cite_error_ref_no_key": "Ongëltegen <code>&lt;ref&gt;</code> Tag;\nReferenzen ouni Inhalt mussen een Numm hunn",
- "cite_error_ref_too_many_keys": "Ongëltege <code>&lt;ref&gt;</code> Tag;\nongëlteg Nimm, z. Bsp. zevill",
- "cite_error_ref_no_input": "Ongëltege <code>&lt;ref&gt;</code> Tag;\n''refs'' ouni Numm muss een Inhalt hun",
- "cite_error_references_invalid_parameters": "Ongëltegen <code>&lt;references&gt;</code> Tag;\net si keng Parameter erlaabt.\nBenotzt <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Ongëltege <code>&lt;references&gt;</code> Tag;\nnëmmen de Parameter \"group\" ass erlaabt.\nBenotzt <code>&lt;references /&gt;</code>, oder <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_text": "Ongëlteg <code>&lt;ref&gt;</code> Markéierung;\net gouf keen Text ugi fir d'Referenze mam Numm <code>$1</code>",
- "cite_error_included_ref": "Den Tag <code>&lt;/ref&gt;</code> feelt fir den Tag <code>&lt;ref&gt;</code> zouzemaachen",
- "cite_error_refs_without_references": "D'Markéierung <code>&lt;ref&gt;</code> gëtt et, awer d'Markéierung <code>&lt;references/&gt;</code> gouf net fonnt",
- "cite_error_group_refs_without_references": "D'Markéierung <code>&lt;ref&gt;</code> gëtt et fir d'Grupp \"$1\", awer d'entspriechend Markéierung <code>&lt;references group=\"$1\"/&gt;</code> gouf net fonnt oder een <code>&lt;/ref&gt;</code> feelt",
- "cite_error_references_group_mismatch": "Den <code>&lt;ref&gt;</code>-Tag an <code>&lt;references&gt;</code> huet den Attribut \"$1\" deen am Konflikt mat deem am <code>&lt;references&gt;</code> steet.",
- "cite_error_references_missing_group": "Deen am <code>&lt;references&gt;</code> definéierten <code>&lt;ref&gt;</code>-Tag huet en Attribut \"$1\" deen am Text virdrun net dran ass.",
- "cite_error_references_missing_key": "Deen am <code>&lt;references&gt;</code> definéierten <code>&lt;ref&gt;</code>-Tag mam Numm \"$1\" gëtt am Text virdrun net benotzt.",
- "cite_error_references_no_key": "D'Markéierung <code>&lt;ref&gt;</code> déi an <code>&lt;references&gt;</code> definéiert ass huet keng Nummeegeschaft.",
- "cite_error_empty_references_define": "D'Markéierung <code>&lt;ref&gt;</code> déi am <code>&lt;references&gt;</code> mat dem Numm « $1 » definéiert ass, ass eidel.",
- "cite_references_link_accessibility_label": "No uewe sprangen",
- "cite_references_link_many_accessibility_label": "Eropsprangen op:"
-}
diff --git a/extensions/Cite/i18n/core/li.json b/extensions/Cite/i18n/core/li.json
deleted file mode 100644
index 99eb8374..00000000
--- a/extensions/Cite/i18n/core/li.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ooswesthoesbes",
- "Pahles"
- ]
- },
- "cite-desc": "Voeg <nowiki><ref[ name=id]></nowiki> en <nowiki><references/></nowiki> tags toe veur citate",
- "cite_error": "Citeerfout: $1",
- "cite_error_ref_numeric_key": "Ónzjuuste tag <code>&lt;ref&gt;</code>; de naam kin gein simpele integer zeen, gebroek 'ne besjrievendje titel",
- "cite_error_ref_no_key": "Ónzjuuste tag <code>&lt;ref&gt;</code>; refs zónger inhoud mótte 'ne naam höbbe",
- "cite_error_ref_too_many_keys": "Ónzjuuste tag <code>&lt;ref&gt;</code>; ónzjuuste name, beveurbeildj te väöl",
- "cite_error_ref_no_input": "Ónzjuuste tag <code>&lt;ref&gt;</code>; refs zónger naam mótte inhoud höbbe",
- "cite_error_references_invalid_parameters": "Ónzjuuste tag <code>&lt;references&gt;</code>; paramaeters zeen neet toegestaon, gebroek <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Onjuuste tag <code>&lt;references&gt;</code>;\nallein de paramaeter \"group\" is toegestaon.\nGebruik <code>&lt;references /&gt;</code>, of <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "'t Aantal besjikbare backlinklabels is opgebroek. Gaef meer labels op in 't berich <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "'t Aantal aangepasde verwiezingslabels veure groep \"$1\" is oetgepöt.\nDoe kans d'r mier insjtelle in 't sysyeemberich <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Ónzjuuste tag <code>&lt;ref&gt;</code>; d'r is gein teks opgegaeve veur refs mit de naam <code>$1</code>",
- "cite_error_included_ref": "Gein sjloetteike <code>&lt;/ref&gt;</code> veur de tag <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "De tag <code>&lt;ref&gt;</code> besteit al, meh de tag <code>&lt;references/&gt;</code> is neet aangetróffe",
- "cite_error_group_refs_without_references": "d'r Besteit 'ne tag <code>&lt;ref&gt;</code> veure groep \"$1\", meh d'r is geine bebehuuerendje tag <code>&lt;references group=\"$1\"/&gt;</code> gevónje",
- "cite_error_references_group_mismatch": "De tag <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> conflicteert mit groepseigesjap \"$1\".",
- "cite_error_references_missing_group": "De tag <code>&lt;ref&gt;</code> dae is gedefinieerd in <code>&lt;references&gt;</code> haet de groepseigesjap \"$1\" neet ierder in de tekst veurkump.",
- "cite_error_references_missing_key": "De tag <code>&lt;ref&gt;</code> mit de naam \"$1\" gedefiniteerd in <code>&lt;references&gt;</code> weurt neet ierder in de teks gebroek.",
- "cite_error_references_no_key": "De tag <code>&lt;ref&gt;</code> dae is gedefinieerd in <code>&lt;references&gt;</code> haet geine eigesjapsnaam.",
- "cite_error_empty_references_define": "De tag <code>&lt;ref&gt;</code> dae is gedefinieerd in <code>&lt;references&gt;</code> mit de naam \"$1\" haet geinen inhawd."
-}
diff --git a/extensions/Cite/i18n/core/lrc.json b/extensions/Cite/i18n/core/lrc.json
deleted file mode 100644
index dfa0c923..00000000
--- a/extensions/Cite/i18n/core/lrc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bonevarluri",
- "Mogoeilor"
- ]
- },
- "cite-desc": " <nowiki><ref[ name=id]></nowiki> و <nowiki><سرچشمه یا/></nowiki> tags,و تگیا نه د گوتنیا اضاف بکید",
- "cite_error": "خطا جاگه:$1",
- "cite_references_link_accessibility_label": "بالا پرسن",
- "cite_references_link_many_accessibility_label": "پرستن د"
-}
diff --git a/extensions/Cite/i18n/core/lt.json b/extensions/Cite/i18n/core/lt.json
deleted file mode 100644
index f77aa568..00000000
--- a/extensions/Cite/i18n/core/lt.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Garas",
- "Homo",
- "Matasg"
- ]
- },
- "cite-desc": "Prideda <nowiki><ref[ name=id]></nowiki> ir <nowiki><references/></nowiki> žymes citavimui",
- "cite_error": "Citavimo klaida $1",
- "cite_error_ref_numeric_key": "Neleistina <code>&lt;ref&gt;</code> gairė; vardas negali būti tiesiog skaičius, naudokite tekstinį pavadinimą",
- "cite_error_ref_no_key": "Neleistina <code>&lt;ref&gt;</code> gairė; nuorodos be turinio turi turėti vardą",
- "cite_error_ref_too_many_keys": "Neleistina <code>&lt;ref&gt;</code> gairė; neleistini vardai, pvz., per daug",
- "cite_error_ref_no_input": "Neleistina <code>&lt;ref&gt;</code> gairė; nuorodos be vardo turi turėti turinį",
- "cite_error_references_invalid_parameters": "Neleistina <code>&lt;references&gt;</code> gairė; neleidžiami jokie parametrai, naudokite <code>&lt;references /&gt;</code>",
- "cite_error_references_no_backlink_label": "Baigėsi antraštės.\nNurodykite daugiau <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> sisteminiame tekste",
- "cite_error_included_ref": "Trūksta uždaromojo <code>&lt;/ref&gt;</code> žymei <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "puslapyje egzistuoja žyma <code>&lt;ref&gt;</code>, tačiau žymos <code>&lt;references/&gt;</code> nėra rasta"
-}
diff --git a/extensions/Cite/i18n/core/lv.json b/extensions/Cite/i18n/core/lv.json
deleted file mode 100644
index 6c5efed1..00000000
--- a/extensions/Cite/i18n/core/lv.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "GreenZeb",
- "Marozols",
- "Xil"
- ]
- },
- "cite-desc": "Pievieno <nowiki><ref[ name=id]></nowiki> un <nowiki><references/></nowiki> tagus, atsaucēm",
- "cite_error": "Kļūda atsaucē: $1",
- "cite_error_refs_without_references": "atrasta <code>&lt;ref&gt;</code> iezīme, bet nav nevienas <code>&lt;references/&gt;</code> iezīmes"
-}
diff --git a/extensions/Cite/i18n/core/min.json b/extensions/Cite/i18n/core/min.json
deleted file mode 100644
index 149f7a86..00000000
--- a/extensions/Cite/i18n/core/min.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Iwan Novirion"
- ]
- },
- "cite-desc": "Manambahkan tag <nowiki><ref[ name=id]></nowiki> jo <nowiki><references/></nowiki> untuak kutipan",
- "cite_error": "Kutipan rusak: $1",
- "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> indak sah;\nparameter indak buliah angko atau/hurup sadarano.\nGunoan namo nan deskriptif",
- "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> indak sah;\nrujuakan kosong harus ado namo",
- "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> indak sah;\nparameter indak sah; mis. talampau panjang",
- "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> indak sah;\nrujuakan indak banamo harus ado isi",
- "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> indak sah;\nindak buliah ado parameter.\nGunoan <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> indak sah;\nparameter \"group\" sajo nan buliah.\nGunoan <code>&lt;references /&gt;</code>, atau <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Label pautan baliak habih.\nCubo tambahkan di <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Label pautan untuak grup \"$1\" habih.\nTantukan labiah lanjuik dalam <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> indak sah; \nindak ado teks untuak ref banamo <code>$1</code>",
- "cite_error_included_ref": "Tag <code>&lt;ref&gt;</code> harus ditutuik jo <code>&lt;/ref&gt;</code>",
- "cite_error_refs_without_references": "Tag <code>&lt;ref&gt;</code> ado, tapi <code>&lt;references/&gt;</code> indak ado",
- "cite_error_group_refs_without_references": "Tag <code>&lt;ref&gt;</code> ado untuak grup banamo \"$1\", tapi indak ado <code>&lt;references group=\"$1\"/&gt;</code>",
- "cite_error_references_group_mismatch": "Tag <code>&lt;ref&gt;</code> pado <code>&lt;references&gt;</code> ado namo grup \"$1\" nan konflik.",
- "cite_error_references_missing_group": "Tag <code>&lt;ref&gt;</code> pado <code>&lt;references&gt;</code> indak ado namo grup \"$1\".",
- "cite_error_references_missing_key": "Tag <code>&lt;ref&gt;</code> jo namo \"$1\" pado <code>&lt;references&gt;</code> indak ado.",
- "cite_error_references_no_key": "Tag <code>&lt;ref&gt;</code> pado <code>&lt;references&gt;</code> indak ado aprameter namo.",
- "cite_error_empty_references_define": "Tag <code>&lt;ref&gt;</code> pado <code>&lt;references&gt;</code> nan banamo \"$1\" indak ado isi.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "cite_ref-",
- "cite_references_link_prefix": "cite_note-",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_link_one": "<li id=\"$1\">'''<span class=\"mw-cite-backlink\">[[#$2|^]]</span>''' $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">'''^''' $2</span> $3</li>",
- "cite_references_link_many_format": "<sup>[[#$1|'''''$2''''']]</sup>",
- "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;"
-}
diff --git a/extensions/Cite/i18n/core/mk.json b/extensions/Cite/i18n/core/mk.json
deleted file mode 100644
index 0e07f0b1..00000000
--- a/extensions/Cite/i18n/core/mk.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bjankuloski06",
- "Brest"
- ]
- },
- "cite-desc": "Додава ознаки <nowiki><ref[ name=id]></nowiki> и <nowiki><references/></nowiki>, за цитирања",
- "cite_error": "Грешка во наводот: $1.",
- "cite_error_ref_numeric_key": "Погрешна ознака <code>&lt;ref&gt;</code>;\nимето не може да биде број. Употребете описен наслов",
- "cite_error_ref_no_key": "Погрешна ознака <code>&lt;ref&gt;</code>;\nнаводите без содржина мора да имаат име",
- "cite_error_ref_too_many_keys": "Погрешна ознака<code>&lt;ref&gt;</code>;\nпогрешни имиња, т.е. ги има премногу",
- "cite_error_ref_no_input": "Погрешна ознака <code>&lt;ref&gt;</code>;\nнаводите без име мораат да имаат содржина",
- "cite_error_references_invalid_parameters": "Погрешна ознака<code>&lt;references&gt;</code>;\nупотребата на параметри не е дозволена.\nУпотребете <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Погрешна ознака <code>&lt;references&gt;</code>;\nдопуштен само параметарот „group“.\nУпотребете <code>&lt;references /&gt;</code> или <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Нема доволно натписи за повратни врски.\nОпределете уште натписи во <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Се потрошија натписите на прилагодените врски за групата „$1“.\nОпределете уште во пораката <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Погрешна ознака <code>&lt;ref&gt;</code>;\nнема зададено текст за наводите по име <code>$1</code>",
- "cite_error_included_ref": "На ознаката <code>&lt;ref&gt;</code> ѝ недостасува ознака за затворање &lt;/ref&gt",
- "cite_error_group_refs_without_references": "Има ознаки <code>&lt;ref&gt;</code> за група именувана како „$1“, но нема соодветна ознака <code>&lt;references group=\"$1\"/&gt;</code>, или пак недостасува завршно <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "Ознаката <code>&lt;ref&gt;</code> во <code>&lt;references&gt;</code> има спротиставен групен атрибут „$1“.",
- "cite_error_references_missing_group": "Ознаката <code>&lt;ref&gt;</code> определена во <code>&lt;references&gt;</code> има групен атрибут „$1“ кој не се јавува во претходен текст.",
- "cite_error_references_missing_key": "Ознаката <code>&lt;ref&gt;</code> со име „$1“ определена во <code>&lt;references&gt;</code> не се користи во претходен текст.",
- "cite_error_references_no_key": "Ознаката <code>&lt;ref&gt;</code> определена во <code>&lt;referencesgt;</code> нема именски атрибут.",
- "cite_error_empty_references_define": "Ознаката <code>&lt;ref&gt;</code> определена во <code>&lt;references&gt;</code> со име „$1“ нема содржина.",
- "cite_references_link_many_format_backlink_labels": "а б в г д ѓ е ж з ѕ и ј к л љ м н њ о п р с т ќ у ф х ц ч џ ш аа аб ав аг ад аѓ ае аж аз аѕ аи ај ак ал аљ ам ан ањ ао ап ар ас ат аќ ау аф ах ац ач аџ аш ба бб бв бг бд бѓ бе бж бз бѕ би бј бк бл бљ бм бн бњ бо бп бр бс бт бќ бу бф бх бц бч бџ бш ва вб вв вг вд вѓ ве вж вз бѕ ви вј вк вл вљ вм вн вњ во вп вр вс вт вќ ву вф вх вц вч вџ вш га гб гв гг гд гѓ ге гж гз гѕ ги гј гк гл гљ гм гн гњ го гп гр гс гт гќ гу гф гх гц гч гџ гш да дб дв дг дд дѓ де дж дз дѕ ди дј дк дл дљ дм дн дњ до дп др дс дт дќ ду дф дх дц дч дџ дш ѓа ѓб ѓв ѓг ѓд ѓе ѓж ѓз ѓѕ ѓи ѓј ѓк ѓл ѓљ ѓм ѓн ѓњ ѓо ѓп ѓр ѓс ѓт ѓќ ѓу ѓф ѓх ѓц ѓч ѓџ ѓш еа еб ев ег ед еѓ ее еж ез еѕ еи еј ек ел ељ ем ен ењ ео еп ер ес ет еќ еу еф ех ец еч еџ еш жа жб жв жг жд жѓ же жж жз жѕ жи жј жк жл жљ жм жн жњ жо жп жр жс жт жќ жу жф жх жц жч жџ жш за зб зв зг зд зѓ зе зж зз зѕ зи зј зк зл зљ зм зн зњ зо зп зр зс зт зќ зу зф зх зц зч зџ зш ѕа ѕб ѕв ѕг ѕд ѕѓ ѕе ѕж ѕз ѕѕ ѕи ѕј ѕк ѕл ѕљ ѕм ѕн ѕњ ѕо ѕп ѕр ѕс ѕт ѕќ ѕу ѕф ѕх ѕц ѕч ѕџ ѕш иа иб ив иг ид иѓ ие иж из иѕ ии иј ик ил иљ им ин ињ ио ип ир ис ит иќ иу иф их иц ич иџ иш ја јб јв јг јд јѓ је јж јз јѕ ји јј јк јл јљ јм јн јњ јо јп јр јс јт јќ ју јф јх јц јч јџ јш ка кб кв кг кд кѓ ке кж кз кѕ ки кј кк кл кљ км кн књ ко кп кр кс кт кќ ку кф кх кц кч кџ кш ла лб лв лг лд лѓ ле лж лз лѕ ли лј лк лл лљ лм лн лњ ло лп лр лс лт лќ лу лф лх лц лч лџ лш ља љб љв љг љд љѓ ље љж љз љѕ љи љј љк љл љљ љм љн љњ љо љп љр љс љт љќ љу љф љх љц љч љџ љш ма мб мв мг мд мѓ ме мж мз мѕ ми мј мк мл мљ мм мн мњ мо мп мр мс мт мќ му мф мх мц мч мџ мш на нб нв нг нд нѓ не нж нз нѕ ни нј нк нл нљ нм нн нњ но нп нр нс нт нќ ну нф нх нц нч нџ нш ња њб њв њг њд њѓ ње њж њз њѕ њи њј њк њл њљ њм њн њњ њо њп њр њс њт њќ њу њф њх њц њч њџ њш оа об ов ог од оѓ ое ож оз оѕ ои ој ок ол ољ ом он оњ оо оп ор ос от оќ оу оф ох оц оч оџ ош па пб пв пг пд пѓ пе пж пз пѕ пи пј пк пл пљ пм пн пњ по пп пр пс пт пќ пу пф пх пц пч пџ пш ра рб рв рг рд рѓ ре рж рз рѕ ри рј рк рл рљ рм рн рњ ро рп рр рс рт рќ ру рф рх рц рч рџ рш са сб св сг сд сѓ се сж сз сѕ си сј ск сл сљ см сн сњ со сп ср сс ст сќ су сф сх сц сч сџ сш та тб тв тг тд тѓ те тж тз тѕ ти тј тк тл тљ тм тн тњ то тп тр тс тт тќ ту тф тх тц тч тџ тш ќа ќб ќв ќг ќд ќѓ ќе ќж ќз ќѕ ќи ќј ќк ќл ќљ ќм ќн ќњ ќо ќп ќр ќс ќт ќќ ќу ќф ќх ќц ќч ќџ ќш уа уб ув уг уд уѓ уе уж уз уѕ уи уј ук ул уљ ум ун уњ уо уп ур ус ут уќ уу уф ух уц уч уџ уш фа фб фв фг фд фѓ фе фж фз фѕ фи фј фк фл фљ фм фн фњ фо фп фр фс фт фќ фу фф фх фц фч фџ фш ха хб хв хг хд хѓ хе хж хз хѕ хи хј хк хл хљ хм хн хњ хо хп хр хс хт хќ ху хф хх хц хч хџ хш ца цб цв цг цд цѓ це цж цз цѕ ци цј цк цл цљ цм цн цњ цо цп цр цс цт цќ цу цф цх цц цч цџ цш ча чб чв чг чд чѓ че чж чз чѕ чи чј чк чл чљ чм чн чњ чо чп чр чс чт чќ чу чф чх чц чч чџ чш џа џб џв џг џд џѓ џе џж џз џѕ џи џј џк џл џљ џм џн џњ џо џп џр џс џт џќ џу џф џх џц џч џџ џш ша шб шв шг шд шѓ ше шж шз шѕ ши шј шк шл шљ шм шн шњ шо шп шр шс шт шќ шу шф шх шц шч шџ шш",
- "cite_references_link_accessibility_label": "Следно",
- "cite_references_link_many_accessibility_label": "Отиди кај:",
- "cite_error_refs_without_references_category-desc": "Страницата има зададено <code><nowiki><ref></nowiki></code> без конкретна група, но нема изрична ознака <code><nowiki><references /></nowiki></code>."
-}
diff --git a/extensions/Cite/i18n/core/ml.json b/extensions/Cite/i18n/core/ml.json
deleted file mode 100644
index 236888ee..00000000
--- a/extensions/Cite/i18n/core/ml.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Praveenp",
- "Shijualex"
- ]
- },
- "cite-desc": "അവലംബം ചേർക്കുവാൻ ഉപയോഗിക്കാനുള്ള <nowiki><ref[ name=id]></nowiki>, <nowiki><references/></nowiki> എന്നീ ടാഗുകൾ ചേർക്കുന്നു",
- "cite_error": "ഉദ്ധരിച്ചതിൽ പിഴവ്: $1",
- "cite_error_ref_numeric_key": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\nനാമത്തിൽ സംഖ്യ മാത്രമായി അനുവദനീയമല്ല. എന്തെങ്കിലും ലഘുവിവരണം ഉപയോഗിക്കുക.",
- "cite_error_ref_no_key": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\nഉള്ളടക്കമൊന്നുമില്ലാത്ത അവലംബത്തിനും ഒരു പേരു വേണം.",
- "cite_error_ref_too_many_keys": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\nഅസാധുവായ പേരുകൾ, ഉദാ: too many",
- "cite_error_ref_no_input": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\nപേരില്ലാത്ത അവലംബത്തിനു ഉള്ളടക്കമുണ്ടായിരിക്കണം.",
- "cite_error_references_invalid_parameters": "അസാധുവായ <code>&lt;references&gt;</code> ടാഗ്;\nറെഫറൻസ് ടാഗിനകത്ത് ചരങ്ങൾ അനുവദനീയമല്ല. പകരം ഇങ്ങനെ <code>&lt;references /&gt;</code> ചെയ്യാവുന്നതാണ്.",
- "cite_error_references_invalid_parameters_group": "അസാധുവായ <code>&lt;references&gt;</code> ടാഗ്;\nറെഫറൻസ് ടാഗിനകത്ത് \"group\" ചരം മാത്രമേ അനുവദനീയമായുള്ളൂ. പകരം <code>&lt;references /&gt;</code> എന്ന്, അല്ലെങ്കിൽ <code>&lt;references group=\"...\" /&gt;</code> എന്ന് ചെയ്യാവുന്നതാണ്.",
- "cite_error_references_no_backlink_label": "പിൻകണ്ണികൾക്കായി നൽകുന്ന ഇച്ഛാനുസരണ കുറികൾ തീർന്നുപോയിരിക്കുന്നു.\nകൂടുതൽ [[MediaWiki:Cite references link many format backlink labels]] സന്ദേശത്തിൽ നിർവചിക്കുക.",
- "cite_error_no_link_label_group": "\"$1\" സംഘത്തിലെ കണ്ണികൾക്കായി നൽകുന്ന ഇച്ഛാനുസരണ കുറികൾ തീർന്നുപോയിരിക്കുന്നു.\nകൂടുതൽ <nowiki>[[MediaWiki:$2]]</nowiki> സന്ദേശത്തിൽ നിർവചിക്കുക.",
- "cite_error_references_no_text": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\n<code>$1</code> എന്ന അവലംബങ്ങൾക്ക് ടെക്സ്റ്റ് ഒന്നും കൊടുത്തിട്ടില്ല.",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> റ്റാഗിനു <code>&lt;/ref&gt;</code> എന്ന അന്ത്യറ്റാഗ് നൽകിയിട്ടില്ല",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> റ്റാഗുകൾ നൽകിയിട്ടുണ്ട്, പക്ഷേ <code>&lt;references/&gt;</code> റ്റാഗ് കണ്ടെത്താനായില്ല.",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> റ്റാഗുകൾ \"$1\" സംഘത്തിൽ ഉണ്ട്, പക്ഷേ ബന്ധപ്പെട്ട <code>&lt;references group=\"$1\"/&gt;</code> റ്റാഗ് കണ്ടെത്താനായില്ല അല്ലെങ്കിൽ അടയ്ക്കാനുള്ള <code>&lt;/ref&gt;</code> നൽകിയിട്ടില്ല",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> റ്റാഗിലേയും <code>&lt;references&gt;</code> എന്നതിലേയും സംഘ ഘടകമായ \"$1\" ഒത്തുപോകുന്നില്ല.",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> റ്റാഗ് നിർവചിച്ചിട്ടുണ്ടെങ്കിലും <code>&lt;references&gt;</code> എന്നതിലുള്ള സംഘ ഘടകം \"$1\" ആദ്യ എഴുത്തിൽ കാണുന്നില്ല.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> റ്റാഗ് \"$1\" എന്ന പേരോടെ <code>&lt;references&gt;</code> എന്നതിൽ നിർവചിച്ചിട്ടുണ്ടെങ്കിലും ആദ്യ എഴുത്തിൽ ഉപയോഗിക്കുന്നില്ല.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> റ്റാഗ് <code>&lt;references&gt;</code> എന്നതിൽ നിർവചിച്ചിട്ടുണ്ടെങ്കിലും നാമ ഘടകം നൽകിയിട്ടില്ല.",
- "cite_error_empty_references_define": " <code>&lt;references&gt;</code> ആവശ്യത്തിനായി \"$1\" എന്ന പേരിൽ നിർ‌വചിക്കപ്പെട്ട <code>&lt;ref&gt;</code> റ്റാഗിന് ഉള്ളടക്കമൊന്നുമില്ല.",
- "cite_reference_link_prefix": "ഉദ്ധരിണി_അവലംബം-",
- "cite_references_link_prefix": "ഉദ്ധരിണി_കുറിപ്പ്-",
- "cite_references_link_accessibility_label": "മുകളിലേയ്ക്ക്",
- "cite_references_link_many_accessibility_label": "മുകളിൽ ഇവിടേയ്ക്ക്:"
-}
diff --git a/extensions/Cite/i18n/core/mr.json b/extensions/Cite/i18n/core/mr.json
deleted file mode 100644
index 9deeb369..00000000
--- a/extensions/Cite/i18n/core/mr.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kaajawa",
- "Kaustubh",
- "Mahitgar",
- "Rahuldeshmukh101",
- "V.narsikar"
- ]
- },
- "cite-desc": "<nowiki><ref[ name=id]></nowiki> व <nowiki><references/></nowiki> हे दोन संदर्भ देण्यासाठी वापरण्यात येणारे शब्द जोडल्या जातील.",
- "cite_error": "त्रूटी उधृत करा: $1",
- "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> चुकीचा कोड; नाव हे पूर्णांकी संख्या असू शकत नाही, कृपया माहितीपूर्ण शीर्षक द्या",
- "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> चुकीचा कोड; रिकाम्या संदर्भांना नाव असणे गरजेचे आहे",
- "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> चुकीचा कोड; चुकीची नावे, उदा. खूप सारी",
- "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> चुकीचा कोड; निनावी संदर्भांमध्ये माहिती असणे गरजेचे आहे",
- "cite_error_references_invalid_parameters": "<code>&lt;references&gt;</code> हा चुकीचा वापर आहे; यामधे पॅरामीटर्स देणे निषिद्ध आहे.,\n<code>&lt;references /&gt;</code> असा कोड वापरा",
- "cite_error_references_invalid_parameters_group": "चुकीची <code>&lt;references&gt;</code> खूण; फक्त पॅरॅमीटर चा गट वापरता येईल, <code>&lt;references /&gt;</code> किंवा <code>&lt;references group=\"...\" /&gt;</code> चा वापर करा",
- "cite_error_references_no_backlink_label": "तयार केलेली मागीलदुवे देणारी नावे संपलेली आहेत, अधिक नावे <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> या प्रणाली संदेशात लिहा",
- "cite_error_no_link_label_group": "\"$1\" करिता नमूदकेलेल्या कस्टम लिंक खूणा संपल्या .\n<nowiki>[[MediaWiki:$2]]</nowiki> संदेशात अधिक खूणा नमूद करा",
- "cite_error_references_no_text": "<code>&lt;ref&gt;</code> चुकीचा कोड; <code>$1</code> नावाने दिलेल्या संदर्भांमध्ये काहीही माहिती नाही",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> ला बंद करणारी <code>&lt;/ref&gt;</code> ही खूणपताका गायब आहे.",
- "cite_error_refs_without_references": "या पानामधे \"<code>&lt;ref&gt;</code>\" ही खूणपताका(संदर्भटॅग) आहे, परंतु <code>&lt;references/&gt;</code> अथवा <code> <nowiki>{{</nowiki>\n</code>संदर्भयादी<code><nowiki>}}</nowiki></code>या पैकी एकही लावण्यात आलेले नाही.''' या पानात \"<code><nowiki>{{</nowiki></code>संदर्भयादी<code><nowiki>}}</nowiki></code>\" हा साचा कॉपीपेस्ट करावा''' ''कारण,त्याशिवाय पानाच्या तळाशी संदर्भांचे तपशील दिसणार नाहीत.''",
- "cite_error_group_refs_without_references": "\"$1\" नावाच्या गटाकरिता <code>&lt;ref&gt;</code>खूणपताका उपलब्ध आहेत, पण संबंधीत <code>&lt;references group=\"$1\"/&gt;</code> खूण मिळाली नाही.",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>मधील खूणपताकेस<code>&lt;ref&gt;</code> खूणांशी विसंवाद असणारे group attribute \"$1\" आहे.",
- "cite_error_references_missing_group": "गट \"$1\" मधील <code>&lt;ref&gt;</code> खूणपताका <code>&lt;references&gt;</code> ह्या पूर्वी वापल्या गेलेल्या नाहीत.",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code> ह्या मध्ये टाकलेला <code>&lt;ref&gt;</code> \"$1\" ह्या नावाची खूणपताका ह्या पूर्वी वापरण्यात आलेली नाही.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code>खूणपताकेत नमूद गोष्टींना <code>&lt;references&gt;</code> ला नाम-गुणधर्म नाहीत.",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code>खूणपताकेत नमूद गोष्टींना, <code>&lt;references&gt;</code> ज्या \"$1\" ह्या नावाने संबोधल्या आहेत, त्यात माहिती नाही.",
- "cite_references_link_accessibility_label": "वर उडी मारा",
- "cite_references_link_many_accessibility_label": "ला वर उडी मारा:"
-}
diff --git a/extensions/Cite/i18n/core/mt.json b/extensions/Cite/i18n/core/mt.json
deleted file mode 100644
index d996b176..00000000
--- a/extensions/Cite/i18n/core/mt.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Chrisportelli"
- ]
- },
- "cite-desc": "Iżżid it-tikketti <nowiki><ref[ name=id]></nowiki> u <nowiki><references/></nowiki> għaċ-ċitazzjonijiet",
- "cite_error": "Żball fiċ-ċitazzjoni: $1",
- "cite_error_ref_numeric_key": "Tikketta <code>&lt;ref&gt;</code> invalida;\nl-isem ma jistax ikun numru sħiħ sempliċi. Uża titlu deskrittiv",
- "cite_error_ref_no_key": "Tikketta <code>&lt;ref&gt;</code> invalida;\nrefs mingħajr kontenut għandhom ikollhom isem",
- "cite_error_ref_too_many_keys": "Tikketta <code>&lt;ref&gt;</code> invalida;\nismijiet invalidi, e.ż. numru wisq kbir",
- "cite_error_ref_no_input": "Żball fl-użu tat-tikketta <code>&lt;ref&gt;</code>; refs mingħajr isem ma jistgħux ikunu vojta",
- "cite_error_references_invalid_parameters": "Żball fl-użu tat-tikketta <code>&lt;references&gt;</code>; il-parametri mhumiex permessi. Uża <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Tikketta <code>&lt;references&gt;</code> invalida;\nil-paramettru \"group\" biss huwa permess.\nUża <code>&lt;references /&gt;</code> jew <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_text": "Tikketta <code>&lt;ref&gt;</code> invalida;\nl-ebda test ma ngħata għar-refs bl-isem <code>$1</code>",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> tal-għeluq hija nieqsa għat-tikketta <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "It-tikketti <code>&lt;ref&gt;</code> jeżistu, imma l-ebda tikketta <code>&lt;references/&gt;</code> ma nstabet",
- "cite_error_group_refs_without_references": "It-tikketti <code>&lt;ref&gt;</code> jeżistu għal grupp bl-isem \"$1\" imma l-ebda tikketta <code>&lt;references group=\"$1\"/&gt;</code> rispettiva ma nstabet",
- "cite_error_references_group_mismatch": "It-tikketta <code>&lt;ref&gt;</code> f'<code>&lt;references&gt;</code> għandha l-attribut tal-grupp \"$1\" f'kunflitt.",
- "cite_error_references_missing_group": "It-tikketta <code>&lt;ref&gt;</code> definita f'<code>&lt;references&gt;</code> għandha l-attribut tal-grupp \"$1\" li ma jidhirx fit-test preċedenti.",
- "cite_error_references_missing_key": "It-tikketta <code>&lt;ref&gt;</code> bl-isem \"$1\" definita f'<code>&lt;references&gt;</code> mhix użata fit-test preċedenti.",
- "cite_error_references_no_key": "It-tikketta <code>&lt;ref&gt;</code> definita f'<code>&lt;references&gt;</code> m'għandiex l-attribut tal-isem.",
- "cite_error_empty_references_define": "It-tikketta <code>&lt;ref&gt;</code> definita f'<code>&lt;references&gt;</code> bl-isem \"$1\" m'għandha l-ebda kontenut."
-}
diff --git a/extensions/Cite/i18n/core/nb.json b/extensions/Cite/i18n/core/nb.json
deleted file mode 100644
index 792ba438..00000000
--- a/extensions/Cite/i18n/core/nb.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Audun",
- "Danmichaelo",
- "Laaknor"
- ]
- },
- "cite-desc": "Legger til <nowiki><ref[ name=id]></nowiki> og <nowiki><references/></nowiki>-tagger for referanser",
- "cite_error": "Siteringsfeil: $1",
- "cite_error_ref_numeric_key": "Ugyldig <code>&lt;ref&gt;</code>-kode; navnet kan ikke være et enkelt heltall, bruk en beskrivende tittel",
- "cite_error_ref_no_key": "Ugyldig <code>&lt;ref&gt;</code>-kode; referanser uten innhold må inneholde navn",
- "cite_error_ref_too_many_keys": "Ugyldig <code>&lt;ref&gt;</code>-kode; ugyldige navn, f.eks. for mange",
- "cite_error_ref_no_input": "Ugyldig <code>&lt;ref&gt;</code>-kode; referanser uten navn må ha innhold",
- "cite_error_references_invalid_parameters": "Ugyldig <code>&lt;references&gt;</code>-kode; ingen parametere tillates, bruk <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Ugyldig <code>&lt;references&gt;</code>-tagg; kun parameteret «group» tillates. Bruk <code>&lt;references /&gt;</code> eller <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Gikk tom for egendefinerte tilbakelenketekster.\nDefiner flere i beskjeden <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Gikk tom for egendefinerte lenkemerker for gruppen «$1».\nDefinér fler i <nowiki>[[MediaWiki:$2]]</nowiki>-beskjeden.",
- "cite_error_references_no_text": "Ugyldig <code>&lt;ref&gt;</code>-tagg; ingen tekst ble oppgitt for referansen ved navn <code>$1</code>",
- "cite_error_included_ref": "Avsluttende <code>&lt;/ref&gt;</code>-tagg mangler for <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code>-merker finnes, men ingen <code>&lt;references/&gt;</code>-merke funnet",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-merker finnes for gruppenavnet «$1», men ingen <code>&lt;references group=\"$1\"/&gt;</code>-merking ble funnet, eller det mangler et avsluttende <code>&lt;/ref&gt;</code>-merke.",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code>-tagg i <code>&lt;references&gt;</code> har motstridig attributt «$1».",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code>-tagg definert i <code>&lt;references&gt;</code> har gruppeattributtet «$1» som ikke forekommer i teksten.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code>-taggen med navnet «$1» definert i <code>&lt;references&gt;</code> brukes ikke i teksten.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code>-tagg definert i <code>&lt;references&gt;</code> har ikke noe navneattributt.",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code>-taggen i <code>&lt;references&gt;</code> med navnet «$1» har ikke noe innhold.",
- "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z æ ø å aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az aæ aø aå ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz bæ bø bå ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz cæ cø cå da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz dæ dø då ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez eæ eø eå fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz fæ fø få ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz gæ gø gå ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz hæ hø hå ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz iæ iø iå ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz jæ jø jå ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz kæ kø kå la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz læ lø lå ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz mæ mø må na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz næ nø nå oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz oæ oø oå pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz pæ pø på qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz qæ qø qå ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz ræ rø rå sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz sæ sø så ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz tæ tø tå ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz uæ uø uå va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz væ vø vå wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz wæ wø wå xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz xæ xø xå ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz yæ yø yå za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz zæ zø zå æa æb æc æd æe æf æg æh æi æj æk æl æm æn æo æp æq ær æs æt æu æv æw æx æy æz ææ æø æå øa øb øc ød øe øf øg øh øi øj øk øl øm øn øo øp øq ør øs øt øu øv øw øx øy øz øæ øø øå åa åb åc åd åe åf åg åh åi åj åk ål åm ån åo åp åq år ås åt åu åv åw åx åy åz åæ åø åå"
-}
diff --git a/extensions/Cite/i18n/core/nds.json b/extensions/Cite/i18n/core/nds.json
deleted file mode 100644
index 47618f51..00000000
--- a/extensions/Cite/i18n/core/nds.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Slomox"
- ]
- },
- "cite-desc": "Föögt <nowiki><ref[ name=id]></nowiki> un <nowiki><references/></nowiki> Tags för Zitaten to",
- "cite_error": "Zitat-Fehler: $1",
- "cite_error_ref_numeric_key": "Ungülligen Tag <tt>&lt;ref&gt;</tt>: de Naam dröff keen reine Tall wesen, bruuk en Naam, de de Saak beschrifft.",
- "cite_error_ref_no_key": "Ungülligen Tag <tt>&lt;ref&gt;</tt>: „ref“ ahn Inholt mutt en Naam hebben.",
- "cite_error_ref_too_many_keys": "Ungülligen Tag <tt>&lt;ref&gt;</tt>: ungüllige Naams, to’n Bispeel to veel.",
- "cite_error_ref_no_input": "Ungülligen Tag <tt>&lt;ref&gt;</tt>: „ref“ ahn Naam mutt en Inholt hebben.",
- "cite_error_references_invalid_parameters": "Ungülligen Tag <code>&lt;references&gt;</code>: Parameters sünd nich verlöövt, bruuk <tt>&lt;references /&gt;</tt>",
- "cite_error_references_invalid_parameters_group": "Ungülligen Tag <code>&lt;references&gt;</code>: Blot de Parameter „group“ is verlöövt, bruuk <tt>&lt;references /&gt;</tt> oder <tt>&lt;references group=\"...\" /&gt;</tt>",
- "cite_error_references_no_backlink_label": "De verföögboren Tekens för de Lenken op Referenzen sünd all. Dat lett sik repareren, wenn in de Systemnaricht <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> mehr Tekens angeven warrt.",
- "cite_error_references_no_text": "Ungülligen Tag <tt>&lt;ref&gt;</tt>; is keen Text för Refs mit den Naam <tt>$1</tt> angeven.",
- "cite_error_included_ref": "Dor fehlt en tosluten <code>&lt;/ref&gt;</code>",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code>-Tags gifft dat, is aver keen <code>&lt;references/&gt;</code>-Tag funnen worrn.",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-Tags för de Grupp „$1“ gifft dat, is aver keen <code>&lt;references group=„$1“/&gt;</code>-Tag funnen worrn"
-}
diff --git a/extensions/Cite/i18n/core/nl.json b/extensions/Cite/i18n/core/nl.json
deleted file mode 100644
index 6cceaa63..00000000
--- a/extensions/Cite/i18n/core/nl.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Flightmare",
- "Niels",
- "Romaine",
- "Siebrand"
- ]
- },
- "cite-desc": "Voegt <nowiki><ref[ name=id]></nowiki> en <nowiki><references/></nowiki> tags toe voor citaten",
- "cite_error": "Citefout: $1",
- "cite_error_ref_numeric_key": "Onjuiste tag <code>&lt;ref&gt;</code>;\nde naam kan geen eenvoudige integer zijn.\nGebruik een beschrijvende titel",
- "cite_error_ref_no_key": "Onjuiste tag <code>&lt;ref&gt;</code>;\nrefs zonder inhoud moeten een naam hebben",
- "cite_error_ref_too_many_keys": "Onjuiste tag <code>&lt;ref&gt;</code>;\nonjuiste namen, bijvoorbeeld te veel",
- "cite_error_ref_no_input": "Onjuiste tag <code>&lt;ref&gt;</code>;\nrefs zonder naam moeten inhoud hebben",
- "cite_error_references_invalid_parameters": "Onjuiste tag <code>&lt;references&gt;</code>;\nparameters zijn niet toegestaan.\nGebruik <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Ongeldige tag <code>&lt;references&gt;</code>;\nalleen de parameter \"group\" is toegestaan.\nGebruik <code>&lt;references /&gt;</code>, of <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Het aantal beschikbare backlinklabels is opgebruikt.\nGeef meer labels op in het bericht <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Het aantal aangepaste koppelinglabels voor de group \"$1\" is uitgeput.\nU kunt er meer instellen in het systeembericht <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Onjuiste tag <code>&lt;ref&gt;</code>;\ner is geen tekst opgegeven voor refs met de naam <code>$1</code>",
- "cite_error_included_ref": "Na het label <code>&lt;ref&gt;</code> ontbreekt het afsluitende label <code>&lt;/ref&gt;</code>",
- "cite_error_refs_without_references": "De tag <code>&lt;ref&gt;</code> bestaat, maar de tag <code>&lt;references/&gt;</code> is niet aangetroffen",
- "cite_error_group_refs_without_references": "Er bestaat een tag <code>&lt;ref&gt;</code> voor de groep \"$1\", maar er is geen bijbehorende tag <code>&lt;references group=\"$1\"/&gt;</code> aangetroffen of een afsluitende <code>&lt;/ref&gt;</code> is niet aanwezig.",
- "cite_error_references_group_mismatch": "De tag <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> conflicteert met groepseigenschap \"$1\".",
- "cite_error_references_missing_group": "De tag <code>&lt;ref&gt;</code> die is gedefinieerd in <code>&lt;references&gt;</code> heeft de groepseigenschap \"$1\" niet niet eerder in te tekst voorkomt.",
- "cite_error_references_missing_key": "De tag <code>&lt;ref&gt;</code> met de naam \"$1\" gedefinieerd in <code>&lt;references&gt;</code> wordt niet eerder in de tekst gebruikt.",
- "cite_error_references_no_key": "De tag <code>&lt;ref&gt;</code> die is gedefinieerd in <code>&lt;references&gt;</code> heeft geen eigenschapsnaam.",
- "cite_error_empty_references_define": "De tag <code>&lt;ref&gt;</code> die is gedefinieerd in <code>&lt;references&gt;</code> met de naam \"$1\" heeft geen inhoud.",
- "cite_references_link_accessibility_label": "Omhoog",
- "cite_references_link_many_accessibility_label": "Omhoog naar:"
-}
diff --git a/extensions/Cite/i18n/core/nn.json b/extensions/Cite/i18n/core/nn.json
deleted file mode 100644
index e0a51f05..00000000
--- a/extensions/Cite/i18n/core/nn.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Frokor",
- "Harald Khan",
- "Njardarlogar"
- ]
- },
- "cite-desc": "Legg til <nowiki><ref[ name=id]></nowiki> og <nowiki><references/></nowiki>-merke for referansar",
- "cite_error": "Referansefeil: $1",
- "cite_error_ref_numeric_key": "Ugyldig <code>&lt;ref&gt;</code>-kode; namnet kan ikkje vere eit enkelt heiltal, bruk ein skildrande tittel",
- "cite_error_ref_no_key": "Ugyldig <code>&lt;ref&gt;</code>-kode; referansar utan innhald må innehalde namn",
- "cite_error_ref_too_many_keys": "Ugyldig <code>&lt;ref&gt;</code>-kode; ugyldige namn, t.d. for mange",
- "cite_error_ref_no_input": "Ugyldig <code>&lt;ref&gt;</code>-kode; referansar uten namn må ha innhald",
- "cite_error_references_invalid_parameters": "Ugyldig <code>&lt;references&gt;</code>-kode; ingen parametrar er tillat, bruk <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Ugyldig <code>&lt;references&gt;</code>-tagg; berre parameteren «group» er tillatt. Bruk <code>&lt;references /&gt;</code> eller <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Gjekk tom for eigendefinerte tilbakelenketekstar.\nDefiner fleire i meldinga <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_references_no_text": "Ugyldig <code>&lt;ref&gt;</code>-merke; ingen tekst vart gjeven for referansen med namnet <code>$1</code>",
- "cite_error_included_ref": "Avsluttande <code>&lt;/ref&gt;</code>-tagg manglar for <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code>-merke finst, men eit <code>&lt;references/&gt;</code>-merke finst ikkje",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-merke finst for gruppenamnet «$1», men inkje samsvarande <code>&lt;references group=\"$1\"/&gt;</code>-merke vart funne"
-}
diff --git a/extensions/Cite/i18n/core/oc.json b/extensions/Cite/i18n/core/oc.json
deleted file mode 100644
index 2a7953ff..00000000
--- a/extensions/Cite/i18n/core/oc.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Cedric31"
- ]
- },
- "cite-desc": "Apond las balisas <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki>, per las citacions.",
- "cite_error": "Error de citacion : $1",
- "cite_error_ref_numeric_key": "Ampèl invalid ; clau non-integrala esperada",
- "cite_error_ref_no_key": "Ampèl invalid ; cap de clau pas especificada",
- "cite_error_ref_too_many_keys": "Ampèl invalid ; claus invalidas, per exemple, tròp de claus especificadas o clau erronèa",
- "cite_error_ref_no_input": "Ampèl invalid ; cap de dintrada pas especificada",
- "cite_error_references_invalid_parameters": "Arguments invalids ; argument esperat",
- "cite_error_references_invalid_parameters_group": "Balisa <code>&lt;references&gt;</code> incorrècta ;\n\nsol lo paramètre « group » es autorizat.\n\nUtilizatz <code>&lt;references /&gt;</code>, o alara <code>&lt;references group=\"...\" /&gt;</code>.",
- "cite_error_references_no_backlink_label": "Execucion en defòra de las etiquetas personalizadas, definissetz mai dins lo messatge <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_references_no_text": "Balisa <code>&lt;ref&gt;</code> incorrècta ;\n\npas de tèxte per las referéncias nomenadas <code>$1</code>.",
- "cite_error_included_ref": "Clausura <code>&lt;/ref&gt;</code> omesa per la balisa <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "La balisa <code>&lt;ref&gt;</code> existís, mas cap de balisa <code>&lt;references/&gt;</code> pas trobada.",
- "cite_error_group_refs_without_references": "De balisas <code>&lt;ref&gt;</code> existisson per un grop nomenat « $1 », mas cap de balisa <code>&lt;references group=\"$1\"/&gt;</code> correspondenta es pas estada trobada, o alara una valisa tampanta <code>&lt;/ref&gt;</code> manca.",
- "cite_error_references_group_mismatch": "La balisa <code>&lt;ref&gt;</code> dins <code>&lt;references&gt;</code> a l'atribut de grop « $1 » que dintra en conflicte amb lo de <code>&lt;references&gt;</code>.",
- "cite_error_references_missing_group": "La balisa <code>&lt;ref&gt;</code> definida dins <code>&lt;references&gt;</code> a un gropat atribuit « $1 » que figura pas dins lo tèxte precedent.",
- "cite_error_references_missing_key": "La balisa <code>&lt;ref&gt;</code> amb lo nom « $1 » definida dins <code>&lt;references&gt;</code> es pas utilizada dins lo tèxte precedent.",
- "cite_error_references_no_key": "La balisa <code>&lt;ref&gt;</code> definida dins <code>&lt;references&gt;</code> a pas de nom d’atribut.",
- "cite_error_empty_references_define": "La balisa <code>&lt;ref&gt;</code> definida dins <code>&lt;references&gt;</code> amb lo nom « $1 » a pas de contengut.",
- "cite_references_link_accessibility_label": "Anar",
- "cite_references_link_many_accessibility_label": "Anar a :"
-}
diff --git a/extensions/Cite/i18n/core/or.json b/extensions/Cite/i18n/core/or.json
deleted file mode 100644
index a2fa2875..00000000
--- a/extensions/Cite/i18n/core/or.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Psubhashish"
- ]
- },
- "cite-desc": "ଆଧାର ନିମନ୍ତେ <nowiki><ref[ name=id]></nowiki> ଓ <nowiki><references/></nowiki> ଟ୍ୟାଗସବୁ ଏଠାରେ ଯୋଡ଼ିଥାଏ ।",
- "cite_error": "ଆଧାର ଭୁଲ: $1",
- "cite_error_ref_numeric_key": "ଅବୈଧ <code>&lt;ref&gt;</code> ଟ୍ୟାଗ;\nନାମଟି କେବେ ହେଲେ ଏକ ପୂର୍ଣ୍ଣସଂଖ୍ୟା ହୋଇପାରିବ ନାହିଁ । ଏକ ବର୍ଣ୍ଣନାମୂଳକ ନାମ ଦିଅନ୍ତୁ ।",
- "cite_error_ref_no_key": "ଅବୈଧ <code>&lt;ref&gt;</code> ଟ୍ୟାଗ;\nକୌଣସି ମଧ୍ୟ ବିଷୟବସ୍ତୁ ନଥିବା ଆଧାରର ଏକ ନାମ ଥିବା ଲୋଡ଼ା",
- "cite_error_ref_too_many_keys": "ଅବୈଧ <code>&lt;ref&gt;</code> ଟ୍ୟାଗ;\nଭୁଲ ନାମ (ଯଥା: ଖୁବ ଅଧିକ)",
- "cite_error_ref_no_input": "ଅବୈଧ <code>&lt;ref&gt;</code> ଟ୍ୟାଗ;\nକୌଣସି ବି ନାମ ନଥିବା ଆଧାରର କିଛି ବିଷୟବସ୍ତୁ ଥିବା ଲୋଡ଼ା",
- "cite_error_references_invalid_parameters": "ଅଚଳ <code>&lt;references&gt;</code> ଟ୍ୟାଗ;\nକୌଣସିଟି ପାରାମିଟର ଅନୁମୋଦିତ ନୁହେଁ ।\n<code>&lt;references /&gt;</code> ବ୍ୟବହାର କରନ୍ତୁ ।",
- "cite_error_references_invalid_parameters_group": "ତ୍ରଟିପୂର୍ଣ୍ଣ <code>&lt;references&gt;</code> ଚିହ୍ନ;\n\"group\" ପାରାମିଟରଟି କେବଳ ଅନୁମୋଦିତ ।\n<code>&lt;references /&gt;</code>, କିମ୍ବା <code>&lt;references group=\"...\" /&gt;</code> ବ୍ୟବହାର କରନ୍ତୁ",
- "cite_error_references_no_backlink_label": "ନିଜ ପସନ୍ଦର ବ୍ୟାକଲିଙ୍କ ଚିହ୍ନ ସବୁ ସରିଗଲା ।\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>ସୂଚନାରେ ଅଧିକ ଦେଖନ୍ତୁ ।",
- "cite_error_no_link_label_group": "\"$1\" ଗୋଠ ଲାଗି ନିଜ ପସନ୍ଦର ବ୍ୟାକଲିଙ୍କ ଚିହ୍ନ ସବୁ ସରିଗଲା ।\n<nowiki>[[MediaWiki:$2]]</nowiki>ସୂଚନାରେ ଅଧିକ ଚିହ୍ନିତ କରନ୍ତୁ ।",
- "cite_error_references_no_text": "ଅଚଳ <code>&lt;ref&gt;</code> ଚିହ୍ନ;\n<code>$1</code> ନାମରେ ଥିବା ଆଧାର ଭିତରେ କିଛି ଲେଖା ନାହିଁ ।",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> କୁ ବନ୍ଦ କରୁଅଛୁ; <code>&lt;ref&gt;</code> ନାହିଁ; ଚିହ୍ନ",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> ଚିହ୍ନ ରହିଅଛି, କିନ୍ତୁ <code>&lt;references/&gt;</code> ଚିହ୍ନଟି ମିଳିଲା ନାହିଁ",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> ଟତାଗମାନ କେବଳ \"$1\" ନାମକ ଗୋଠ ପାଇଁ ରହିଛି, କିନ୍ତୁ କୌଣସି ସମ୍ବନ୍ଧିତ <code>&lt;references group=\"$1\"/&gt;</code> ଟ୍ୟାଗ ମିଳିଲା ନାହିଁ କିମ୍ବା <code>&lt;/ref&gt;</code> ବନ୍ଦ କରିବା ଟ୍ୟାଗଟି ନାହିଁ ।",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt ରେ <code>&lt;ref&gt;</code> ଚିହ୍ନ;</code> ର ଅସୁବିଧାଜନକ ଗୋଠ ବିଶେଷତା \"$1\" ।",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code>ରେ ଦିଆଯାଇଥିବା <code>&lt;ref&gt;</code> ଚିହ୍ନରେ \"$1\" ଗୋଠ ପାଇଁ ଚିହ୍ନ ଅଛି ଯାହାକି ଦରକାରୀ ଲେଖାରେ ଆସୁନାହିଁ ।",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code>ରେ ଦିଆଯାଇଥିବା \"$1\" ନାମ ସହ ଥିବା <code>&lt;ref&gt;</code> ଚିହ୍ନ ଦରକାରୀ ଲେଖାରେ ବ୍ୟବହାର ହୋଇନାହିଁ ।",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code>ରେ ଦିଆଯାଇଥିବା <code>&lt;ref&gt;</code> ଚିହ୍ନରେ କିଛି ଆଟ୍ରିବୁଟ ନାହିଁ ।",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code>ରେ ଦିଆଯାଇଥିବା \"$1\" ନାମ ସହ ଥିବା <code>&lt;ref&gt;</code> ଚିହ୍ନରେ କିଛି ଲେଖା ନାହିଁ ।",
- "cite_references_link_accessibility_label": "ଉପରକୁ ଯାଆନ୍ତୁ",
- "cite_references_link_many_accessibility_label": "ଏହି ଯାଏ ଉପରକୁ ଯାଆନ୍ତୁ:"
-}
diff --git a/extensions/Cite/i18n/core/pl.json b/extensions/Cite/i18n/core/pl.json
deleted file mode 100644
index 28ef1eeb..00000000
--- a/extensions/Cite/i18n/core/pl.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Derbeth",
- "Holek",
- "Leinad",
- "Sp5uhe",
- "Woytecr"
- ]
- },
- "cite-desc": "Dodaje znaczniki <nowiki><ref[ name=id]></nowiki> i <nowiki><references/></nowiki> ułatwiające podawanie źródeł cytatów",
- "cite_error": "Błąd rozszerzenia ''cite'': $1",
- "cite_error_ref_numeric_key": "Nieprawidłowy znacznik <code>&lt;ref&gt;</code>. Nazwa nie może być liczbą, użyj nazwy opisowej.",
- "cite_error_ref_no_key": "Nieprawidłowy znacznik <code>&lt;ref&gt;</code>. Odnośnik ref z zawartością musi mieć nazwę.",
- "cite_error_ref_too_many_keys": "Nieprawidłowe nazwy parametrów elementu <code>&lt;ref&gt;</code>.",
- "cite_error_ref_no_input": "Błąd w składni elementu <code>&lt;ref&gt;</code>. Przypisy bez podanej nazwy muszą posiadać treść",
- "cite_error_references_invalid_parameters": "Błąd w składni elementu <code>&lt;references&gt;</code>. Nie można wprowadzać parametrów do tego elementu, użyj <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Nieprawidłowy znacznik <code>&lt;references&gt;</code>;\ndostępny jest wyłącznie parametr „group”.\nUżyj znacznika <code>&lt;references /&gt;</code>, lub <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Zabrakło etykiet do przypisów.\nZadeklaruj więcej w komunikacie <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Zabrakło niestandardowych etykiet linków dla grupy „$1“.\nZdefiniuj ich większą liczbę w komunikacie <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Błąd w składni elementu <code>&lt;ref&gt;</code>. Brak tekstu w przypisie o nazwie <code>$1</code>",
- "cite_error_included_ref": "Brak znacznika zamykającego <code>&lt;/ref&gt;</code> po otwartym znaczniku <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Istnieje znacznik <code>&lt;ref&gt;</code>, ale nie odnaleziono znacznika <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Istnieje znacznik <code>&lt;ref&gt;</code> dla grupy o nazwie „$1”, ale nie odnaleziono odpowiedniego znacznika <code>&lt;references group=\"$1\"/&gt;</code>, lub brakuje znacznika zamykającego <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "Znacznik <code>&lt;ref&gt;</code> w <code>&lt;references&gt;</code> nie może mieć atrybutu grupy „$1”.",
- "cite_error_references_missing_group": "Znacznik <code>&lt;ref&gt;</code> zdefiniowany w <code>&lt;references&gt;</code> ma atrybut grupowania „$1”, który nie występuje wcześniej w treści.",
- "cite_error_references_missing_key": "Znacznik <code>&lt;ref&gt;</code> o nazwie „$1”, zdefiniowany w <code>&lt;references&gt;</code>, nie był użyty wcześniej w treści.",
- "cite_error_references_no_key": "Znacznik <code>&lt;ref&gt;</code> zdefiniowany w <code>&lt;references&gt;</code> nie ma atrybutu <code>name</code>.",
- "cite_error_empty_references_define": "Znacznik <code>&lt;ref&gt;</code> zdefiniowany w <code>&lt;references&gt;</code> o nazwie „$1” nie ma treści.",
- "cite_references_link_accessibility_label": "Skocz do góry",
- "cite_references_link_many_accessibility_label": "Skocz do:"
-}
diff --git a/extensions/Cite/i18n/core/pms.json b/extensions/Cite/i18n/core/pms.json
deleted file mode 100644
index 3ae93009..00000000
--- a/extensions/Cite/i18n/core/pms.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Borichèt",
- "Dragonòt"
- ]
- },
- "cite-desc": "A gionta le tichëtte <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki>, për sitassion",
- "cite_error": "Eror ëd sitassion: $1",
- "cite_error_ref_numeric_key": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\nël nòm a peul pa esse n'antregh sempi. Deuvra un tìtol descritiv.",
- "cite_error_ref_no_key": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\nj'arferiment sensa contnù a devo avèj un nòm",
- "cite_error_ref_too_many_keys": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\nnòm pa bon, për esempi tròpi",
- "cite_error_ref_no_input": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\nj'arferiment sensa nòm a devo avèj un contnù",
- "cite_error_references_invalid_parameters": "Tichëtta <code>&lt;references&gt;</code> pa bon-a;\npa gnun paràmetr përmëttù.\nCh'a deuvra <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Tichëtta <code>&lt;references&gt;</code> pa bon-a;\nas peul mach dovresse ël paràmetr \"group\".\nCh'a deuvra <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Etichëtte ëd backlink përsonalisà esaurìe.\nDefiniss-ne ëd pì ant ël messagi <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Surtì fòra dle tichëtte dij colegament utent për la partìa \"$1\".\nDefinissne ëd pi ant ël mëssagi <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\npa gnun test a l'é stàit dàit për l'arferiment ciamà <code>$1</code>",
- "cite_error_included_ref": "Saradura <code>&lt;/ref&gt;</code> mancanta për la tichëtta <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "la tichëtta <code>&lt;ref&gt;</code> a esist, ma gnun-a tichëtta <code>&lt;references/&gt;</code> a l'é stàita trovà",
- "cite_error_group_refs_without_references": "Dle tichëtte <code>&lt;ref&gt;</code> a esisto për na partìa ciamà «$1», ma gnun-a tichëtta corëspondenta <code>&lt;references group=\"$1\"/&gt;</code> a l'é stàita trovà opura a-i manca un delimitator final <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "La tichëtta <code>&lt;ref&gt;</code> an <code>&lt;references&gt;</code> a l'ha n'atribut ëd partìa \"$1\" an conflit.",
- "cite_error_references_missing_group": "La tichëtta <code>&lt;ref&gt;</code> definìa an <code>&lt;references&gt;</code> a l'ha n'atribut ëd partìa \"$1\" che a l'era pa ant ël test prima.",
- "cite_error_references_missing_key": "La tichëtta <code>&lt;ref&gt;</code> con nòm \"$1\" definìa an <code>&lt;references&gt;</code> a l'é pa dovrà ant ël test prima.",
- "cite_error_references_no_key": "La tichëtta <code>&lt;ref&gt;</code> definìa an <code>&lt;references&gt;</code> a l'ha pa gnun atribut ëd nòm.",
- "cite_error_empty_references_define": "La tichëtta <code>&lt;ref&gt;</code> definìa an <code>&lt;references&gt;</code> con nòm \"$1\" a l'ha pa gnun contnù.",
- "cite_references_link_accessibility_label": "Andé",
- "cite_references_link_many_accessibility_label": "Sauté a:"
-}
diff --git a/extensions/Cite/i18n/core/pnb.json b/extensions/Cite/i18n/core/pnb.json
deleted file mode 100644
index d3fda6e1..00000000
--- a/extensions/Cite/i18n/core/pnb.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Khalid Mahmood"
- ]
- },
- "cite-desc": "جوڑو <nowiki><ref[ name=id]></nowiki> تے <nowiki><references/></nowiki> ٹیگ اتے پتے لئی۔",
- "cite_error": "سائیٹ غلطی:$1",
- "cite_error_ref_numeric_key": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ؛\nناں اک سادہ انٹیجر نئیں ہوسکدا۔ کوئی ہور دسن والا سرناواں دسو۔",
- "cite_error_ref_no_key": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ؛\nاتے پتے جیدے چ کوئی شے ناں ہووے لازمی ناں ہووے۔",
- "cite_error_ref_too_many_keys": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ؛\nناں منے جان والے ناں",
- "cite_error_ref_no_input": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ؛\nاتے پتے جیدے چ کوئی شے ناں ہووے لازمی ناں ہووے۔",
- "cite_error_references_invalid_parameters": "ناں منیا جان والا <code>&lt;references&gt;</code> ٹیگ؛\nکسے پیرامیٹر دی اجازت نئیں۔\n<code>&lt;references /&gt;</code> ورتو",
- "cite_error_references_invalid_parameters_group": "ناں منیا جان والا <code>&lt;references&gt;</code> ٹیگ؛\nپیرامیٹر گروپ دی اجازت صرف۔\nورتو <code>&lt;references /&gt;</code>، یا <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "کسٹم پچھلے جزڑ نئیں رۓ۔\nہور دسو <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> سنیعے چ۔",
- "cite_error_no_link_label_group": "\"$1\" ٹولی لئی کسٹم لیبل جوڑ مک گۓ۔\nہور دسو <nowiki>[[MediaWiki:$2]]</nowiki> سنیعے چ۔",
- "cite_error_references_no_text": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ\nکوئی لکھت نئیں دتی گئی اتے پتے <code>$1</code> لئی۔",
- "cite_error_included_ref": "بند کردا &lt;/ref&gt ؛ &lt;ref&gt دا کعاٹا ٹیک",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> ٹیگ ہیگے نیں، پر کوئی <code>&lt;references/&gt;</code> ٹیگ ناں لبیا۔",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> ٹیگ اک ٹولی جیدا ناں \"$1\" اے ہیگے نیں، پر کوئی <code>&lt;references group=\"$1\"/&gt;</code> ٹیگ ناں لبیا۔",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> ٹیگ ان <code>&lt;references&gt;</code> دے رپھڑی اٹریبیوٹ \"$1\"۔",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> ٹیگ دسیا گیا <code>&lt;references&gt;</code> دے ٹولی اٹریبیوٹ \"$1\" جیہڑے پہلی لکھت چ ناں دسے۔",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> ٹیگ ناں نال \"$1\" <code>&lt;references&gt;</code> چ دسیا گیا پہلی کسے لکھت چ نئیں ورتیا گیا۔",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> ٹیگ دسیا گیا <code>&lt;references&gt;</code> چ دا کوئی ناں اٹریبیوٹ نئیں۔",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> ٹیگ دسیا گیا <code>&lt;references&gt;</code> چ \"$1\" ناں نال، ایدے چ کج نئیں۔"
-}
diff --git a/extensions/Cite/i18n/core/ps.json b/extensions/Cite/i18n/core/ps.json
deleted file mode 100644
index 7b89af8d..00000000
--- a/extensions/Cite/i18n/core/ps.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ahmed-Najib-Biabani-Ibrahimkhel"
- ]
- },
- "cite_error": "د درک ستونزه: $1"
-}
diff --git a/extensions/Cite/i18n/core/pt-br.json b/extensions/Cite/i18n/core/pt-br.json
deleted file mode 100644
index da20d476..00000000
--- a/extensions/Cite/i18n/core/pt-br.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Cainamarques",
- "Eduardo.mps",
- "Giro720",
- "555"
- ]
- },
- "cite-desc": "Adiciona marcas <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> para citações",
- "cite_error": "Erro de citação: $1",
- "cite_error_ref_numeric_key": "Marca <code>&lt;ref&gt;</code> inválida; \no nome não pode ser um número. Utilize um título descritivo",
- "cite_error_ref_no_key": "Marca <code>&lt;ref&gt;</code> inválida; \nrefs sem conteúdo devem ter um nome",
- "cite_error_ref_too_many_keys": "Marca <code>&lt;ref&gt;</code> inválida; \nnomes inválidos (por exemplo, muito extenso)",
- "cite_error_ref_no_input": "Marca <code>&lt;ref&gt;</code> inválida; \nrefs sem nome devem possuir conteúdo",
- "cite_error_references_invalid_parameters": "Marca <code>&lt;references&gt;</code> inválida; \nnão são permitidos parâmetros.\nUtilize <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Marca <code>&lt;references&gt;</code> inválida;\nsó o parâmetro \"group\" é permitido.\nUtilize <code>&lt;references /&gt;</code>, ou <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Etiquetas de backlink esgotadas. \nDefina mais na mensagem <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Etiquetas personalizadas para links, no grupo \"$1\", esgotadas.\nDefina mais na mensagem <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Marca <code>&lt;ref&gt;</code> inválida; \nnão foi fornecido texto para as refs chamadas <code>$1</code>",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> de fechamento ausente para para a marca <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "existem marcas <code>&lt;ref&gt;</code>, mas nenhuma marca <code>&lt;references/&gt;</code> foi encontrada",
- "cite_error_group_refs_without_references": "existem marcas <code>&lt;ref&gt;</code> para um grupo chamado \"$1\", mas nenhuma marca <code>&lt;references group=\"$1\"/&gt;</code> correspondente foi encontrada (ou uma marca de fechamento <code>&lt;/ref&gt;</code> está faltando)",
- "cite_error_references_group_mismatch": "marca <code>&lt;ref&gt;</code> em <code>&lt;references&gt;</code> está com o atributo de grupo \"$1\" conflitante.",
- "cite_error_references_missing_group": "marca <code>&lt;ref&gt;</code> definida em <code>&lt;references&gt;</code> está com atributo de grupo \"$1\" que não aparece no texto anterior.",
- "cite_error_references_missing_key": "marca <code>&lt;ref&gt;</code> com nome \"$1\", definida em <code>&lt;references&gt;</code>, não foi utilizada no texto anterior.",
- "cite_error_references_no_key": "marca <code>&lt;ref&gt;</code>, definida em <code>&lt;references&gt;</code>, não tem atributo de nome.",
- "cite_error_empty_references_define": "marca <code>&lt;ref&gt;</code>, definida em <code>&lt;references&gt;</code>, com nome \"$1\", não tem nenhum conteúdo.",
- "cite_references_link_accessibility_label": "Ir para cima",
- "cite_references_link_many_accessibility_label": "Ir para:"
-}
diff --git a/extensions/Cite/i18n/core/pt.json b/extensions/Cite/i18n/core/pt.json
deleted file mode 100644
index 16c7d5ad..00000000
--- a/extensions/Cite/i18n/core/pt.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Crazymadlover",
- "Giro720",
- "Hamilton Abreu",
- "Malafaya",
- "Opraco",
- "Waldir",
- "555",
- "Vitorvicentevalente"
- ]
- },
- "cite-desc": "Adiciona elementos <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> para uso em citações",
- "cite_error": "Erro de citação: $1",
- "cite_error_ref_numeric_key": "Código <code>&lt;ref&gt;</code> inválido; o nome não pode ser um número. Utilize um nome descritivo",
- "cite_error_ref_no_key": "Código <code>&lt;ref&gt;</code> inválido; refs sem conteúdo devem ter um parâmetro de nome",
- "cite_error_ref_too_many_keys": "Código <code>&lt;ref&gt;</code> inválido; nomes inválidos (por exemplo, nome muito extenso)",
- "cite_error_ref_no_input": "Código <code>&lt;ref&gt;</code> inválido; refs sem parâmetro de nome devem possuir conteúdo a elas associado",
- "cite_error_references_invalid_parameters": "Código <code>&lt;references&gt;</code> inválido; não são permitidos parâmetros. Utilize como <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "O elemento <code>&lt;references&gt;</code> é inválido;\nsó é permitido o parâmetro \"group\".\nUse <code>&lt;references /&gt;</code>, ou <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Esgotamento das legendas personalizadas para backlinks.\nDefina mais na mensagem <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Esgotamento das legendas personalizadas para links, no grupo \"$1\".\nDefina mais na mensagem <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> inválida; não foi fornecido texto para as refs chamadas <code>$1</code>",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> de fecho em falta, para o elemento <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "existem marcas <code>&lt;ref&gt;</code> para um grupo chamado \"$1\", mas nenhuma marca <code>&lt;references group=\"$1\"/&gt;</code> correspondente foi encontrada (ou uma marca de fechamento <code>&lt;/ref&gt;</code> está faltando)",
- "cite_error_references_group_mismatch": "O elemento <code>&lt;ref&gt;</code> em <code>&lt;references&gt;</code> tem o atributo de grupo \"$1\", que está em conflito com o de <code>&lt;references&gt;</code>.",
- "cite_error_references_missing_group": "O elemento <code>&lt;ref&gt;</code> definido em <code>&lt;references&gt;</code> tem o atributo de grupo \"$1\", que não aparece no texto anterior.",
- "cite_error_references_missing_key": "A etiqueta <code>&lt;ref&gt;</code> com nome \"$1\" definida em <code>&lt;references&gt;</code> não é utilizada no texto acima.",
- "cite_error_references_no_key": "O elemento <code>&lt;ref&gt;</code> definido em <code>&lt;references&gt;</code> não tem um atributo de nome.",
- "cite_error_empty_references_define": "O elemento <code>&lt;ref&gt;</code> definido em <code>&lt;references&gt;</code> com o nome \"$1\" não tem conteúdo.",
- "cite_references_link_accessibility_label": "Ir para cima",
- "cite_references_link_many_accessibility_label": "Ir para:",
- "cite_error_refs_without_references_category-desc": "Esta página possui marcas <code><nowiki><ref></nowiki></code>, mas falta adicionar o código <code><nowiki><references /></nowiki></code>."
-}
diff --git a/extensions/Cite/i18n/core/qqq.json b/extensions/Cite/i18n/core/qqq.json
deleted file mode 100644
index e767ca8d..00000000
--- a/extensions/Cite/i18n/core/qqq.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dani",
- "LPfi",
- "Lejonel",
- "Mormegil",
- "Nike",
- "Purodha",
- "Raimond Spekking",
- "Raymond",
- "Shirayuki",
- "Siebrand",
- "The Evil IP address",
- "Umherirrender"
- ]
- },
- "cite-desc": "{{desc|name=Cite|url=http://www.mediawiki.org/wiki/Extension:Cite}}",
- "cite_error": "Cite extension.\n\nUsed when there are errors in ref or references tags.\n\nParameters:\n* $1 - an error message",
- "cite_error_ref_numeric_key": "Cite extension. Error message shown if the name of a ref tag only contains digits. Examples that cause this error are <code><nowiki><ref name=\"123\" /></nowiki></code> or <code><nowiki><ref name=\"456\">input</ref></nowiki></code>",
- "cite_error_ref_no_key": "Cite extension. Error message shown when ref tags without any content (that is <code><nowiki><ref /></nowiki></code>) are used without a name.",
- "cite_error_ref_too_many_keys": "Cite extension. Error message shown when ref tags has parameters other than name and group. Examples that cause this error are <code><nowiki><ref name=\"name\" notname=\"value\" /></nowiki></code> or <code><nowiki><ref notname=\"value\" >input<ref></nowiki></code>",
- "cite_error_ref_no_input": "Cite extension. Error message shown when ref tags without names have no content. An example that cause this error is <code><nowiki><ref></ref></nowiki></code>",
- "cite_error_references_invalid_parameters": "Cite extension. Error message shown when parmeters are used in the references tag. An example that cause this error is <code><nowiki><references someparameter=\"value\" /></nowiki></code>",
- "cite_error_references_invalid_parameters_group": "Cite extension. Error message shown when unknown parameters are used in the references tag. An example that cause this error is <samp><nowiki><references someparameter=\"value\" /></nowiki></samp>",
- "cite_error_references_no_backlink_label": "Cite extension. Error message shown in the references tag when the same name is used for too many ref tags. Too many in this case is more than there are backlink labels defined in [[MediaWiki:Cite references link many format backlink labels]].\n\nIt is not possible to make a clickable link to this message. \"nowiki\" is mandatory around [[MediaWiki:Cite references link many format backlink labels]].",
- "cite_error_no_link_label_group": "*'''$1''' is the name of a reference group.\n*'''$2''' is <code>cite_link_label_group-<i>groupname</i></code>.",
- "cite_error_references_no_text": "Cite extension. This error occurs when the tag <code><nowiki><ref name=\"something\" /></nowiki></code> is used with the name-option specified and no other tag specifies a cite-text for this name.\n\nParameters:\n* $1 - key of the ref",
- "cite_error_included_ref": "Error message shown if the <code><nowiki><ref></nowiki></code> tag is unbalanced, that means a <code><nowiki><ref></nowiki></code> is not followed by a <code><nowiki></ref></nowiki></code>",
- "cite_error_group_refs_without_references": "Parameters:\n* $1 - the group name\n\nIf the group $1 is default group, instead of this message, the following message will be used:\n* {{msg-mw|Cite error refs without references}}",
- "cite_error_references_group_mismatch": "Error message shown when doing something like\n<pre>\n<references group=\"foo\">\n<ref group=\"bar\">...</ref>\n</references>\n</pre>\nParameters:\n* $1 - the value of the <code>group</code> attribute on the inner <code><nowiki><ref></nowiki></code> (in the example above, “bar”)",
- "cite_error_references_missing_group": "Error message shown when doing something like\n<pre>\n<references group=\"foo\">\n<ref>...</ref>\n</references>\n</pre>\nand there are no <code><nowiki><ref></nowiki></code> tags in the page text which would use <code>group=\"foo\"</code>.\n\nParameters:\n* $1 - the name of the unused <code>group</code> (in the example above, “foo”)",
- "cite_error_references_missing_key": "Error message shown when using something like\n<pre>\n<references>\n<ref name=\"refname\">...</ref>\n</references>\n</pre>\nand the reference <code><nowiki><ref name=\"refname\" /></nowiki></code> is not used anywhere in the page text.\n\nParameters:\n* $1 - the name of the unused reference (in the example above, “refname”)",
- "cite_error_references_no_key": "Error message shown when a <code><nowiki><ref></nowiki></code> inside <code><nowiki><references></nowiki></code> does not have a <code>name</code> attribute.",
- "cite_error_empty_references_define": "Error message shown when there is a <code><nowiki><ref></nowiki></code> inside <code><nowiki><references></nowiki></code>, but it does not have any content, e.g.\n<pre>\n<references>\n<ref name=\"foo\" />\n</references>\n</pre>\n\nParameters:\n* $1 - the <code><nowiki>name</nowiki></code> of the erroneous <code><nowiki><ref></nowiki></code> (in the above example, “foo”)",
- "cite_reference_link_key_with_num": "{{optional}}\nParameters:\n* $1 - the key\n* $2 - the number of the key",
- "cite_reference_link_prefix": "{{optional}}",
- "cite_reference_link_suffix": "{{optional}}",
- "cite_references_link_prefix": "{{optional}}",
- "cite_references_link_suffix": "{{optional}}",
- "cite_reference_link": "{{optional}}\nParameters:\n* $1 - ref key\n* $2 - references key\n* $3 - link label",
- "cite_references_no_link": "{{notranslate}}\nParameters:\n* $1 - references key\n* $2 - reference text",
- "cite_references_link_one": "{{optional}}\nParameters:\n* $1 - references key\n* $2 - ref key\n* $3 - reference text",
- "cite_references_link_many": "{{optional}}\nParameters:\n* $1 - references key\n* $2 - list of links\n* $3 - reference text",
- "cite_references_link_many_format": "{{optional}}\nParameters:\n* $1 - ref key\n* $2 - ...\n* $3 - (Unused)...",
- "cite_references_link_many_format_backlink_labels": "{{Optional}}",
- "cite_references_link_many_sep": "{{optional}}",
- "cite_references_link_many_and": "{{optional}}",
- "cite_references_link_accessibility_label": "Text for screen readers to describe the jump to citation link (\"↑\").\n\nSee also:\n* {{msg-mw|Cite references link many accessibility label}} - if the citation is used multiple times",
- "cite_references_link_many_accessibility_label": "Text for screen readers to describe the jump to citation links (a b c ...) for citations which are used in multiple places.\n\nThis is going to be prepended to the first link, the following ones will just be read by screen readers as they are visible.\n\nSee also:\n* {{msg-mw|Cite references link accessibility label}} - if the citation is used one time",
- "cite_references_prefix": "{{notranslate}}",
- "cite_references_suffix": "{{notranslate}}"
-}
diff --git a/extensions/Cite/i18n/core/qu.json b/extensions/Cite/i18n/core/qu.json
deleted file mode 100644
index 3d212be6..00000000
--- a/extensions/Cite/i18n/core/qu.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "AlimanRuna"
- ]
- },
- "cite-desc": "Pukyumanta willanapaq <nowiki><ref[ name=id]></nowiki> , <nowiki><references/></nowiki> unanchachakunatam yapan",
- "cite_error": "Pukyumanta willaypi pantasqa: $1",
- "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nsutinqa ama yupaylla kachunchu. Ch'uyanchaq sutinta llamk'achiy",
- "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nch'usaq pukyu willana unanchachaqa sutiyuqmi kachun",
- "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nsutinkunaqa manam allinchu, nisyu sutinchá",
- "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nsutinnaq pukyu willana unanchachaqa ama ch'usaqchu kachun",
- "cite_error_references_invalid_parameters": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nama kuskanachina tupuchu kachun. <code>&lt;references /&gt;</code> unanchachata llamk'achiy",
- "cite_error_references_invalid_parameters_group": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\n\"group\" nisqa kuskanachina tupulla kachun. <code>&lt;references /&gt;</code> icha <code>&lt;references group=\"...\" /&gt;</code> unanchachata llamk'achiy",
- "cite_error_references_no_backlink_label": "Manañam kanchu allichana kutimuy t'inki unanchakuna.\nAstawan sut'ichay <nowiki>[[MediaWiki:Cite references link many format backlink labels|Pukyumanta willaykuna achka allichana kutimuy t'inki unanchakunata t'inkin]]</nowiki> nisqa willaypi",
- "cite_error_references_no_text": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\n<code>$1</code> nisqapaq pukyu qillqa manam kanchu",
- "cite_error_included_ref": "Kichaq <code>&lt;ref&gt;</code> unanchachapaq wichq'aq <code>&lt;/ref&gt;</code> unanchachaqa manam kanchu",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> unanchacham kachkan, ichataq manam <code>&lt;references/&gt;</code> unanchachachu",
- "cite_error_group_refs_without_references": "\"$1\" sutiyuq huñupaq <code>&lt;ref&gt;</code> unanchacham kachkan, ichataq manam chay huñupaq qillqasqa <code>&lt;references group=\"$1\"/&gt;</code> unanchacha manam tarisqachu, icha wichq'aq <code>&lt;/ref&gt;</code> unanchacha manam kanchu",
- "cite_references_link_accessibility_label": "Hawaman t'iskuy",
- "cite_references_link_many_accessibility_label": "Hawaman t'iskuspa kayman riy:"
-}
diff --git a/extensions/Cite/i18n/core/ro.json b/extensions/Cite/i18n/core/ro.json
deleted file mode 100644
index 01bea404..00000000
--- a/extensions/Cite/i18n/core/ro.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Firilacroco",
- "KlaudiuMihaila",
- "Mihai",
- "Minisarm"
- ]
- },
- "cite-desc": "Adaugă etichete <nowiki><ref[ name=id]></nowiki> și <nowiki><references/></nowiki>, pentru citări",
- "cite_error": "Eroare la citare: $1",
- "cite_error_ref_numeric_key": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nnumele nu poate fi un număr. Folosește un titlu descriptiv",
- "cite_error_ref_no_key": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nref-urile fără conținut trebuie să aibă un nume",
- "cite_error_ref_too_many_keys": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nnume invalid, ex. prea multe nume",
- "cite_error_ref_no_input": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nref-urile fără nume trebuie să aibă conținut",
- "cite_error_references_invalid_parameters": "Etichetă <code>&lt;references&gt;</code> invalidă;\nparametrii nu sunt permiși.\nFolosește eticheta <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Etichetă <code>&lt;references&gt;</code> invalidă;\ndoar parametrul „grup” este permis.\nFolosește eticheta <code>&lt;references /&gt;</code>, sau <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_text": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nniciun text nu a fost furnizat pentru ref-urile numite <code>$1</code>",
- "cite_error_included_ref": "Eticheta de închidere <code>&lt;/ref&gt;</code> lipsește pentru eticheta <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Etichete <code>&lt;ref&gt;</code> există, dar nu s-a găsit nicio etichetă <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Etichete <code>&lt;ref&gt;</code> există pentru un grup numit „$1”, dar nu și o etichetă <code>&lt;references group=\"$1\"/&gt;</code>",
- "cite_error_references_group_mismatch": "Eticheta <code>&lt;ref&gt;</code> din <code>&lt;references&gt;</code> are atributul de grup „$1” care a intrat în conflict.",
- "cite_error_references_missing_group": "Eticheta <code>&lt;ref&gt;</code> definită în <code>&lt;references&gt;</code> are atributul de grup „$1” care nu apare în textul anterior.",
- "cite_error_references_missing_key": "Eticheta <code>&lt;ref&gt;</code> cu numele „$1” definită în <code>&lt;references&gt;</code> nu este utilizată în textul anterior.",
- "cite_error_references_no_key": "Eticheta <code>&lt;ref&gt;</code> definită în <code>&lt;references&gt;</code> nu are atributul nume.",
- "cite_error_empty_references_define": "Eticheta <code>&lt;ref&gt;</code> definită în <code>&lt;references&gt;</code> cu numele „$1” nu are conținut."
-}
diff --git a/extensions/Cite/i18n/core/roa-tara.json b/extensions/Cite/i18n/core/roa-tara.json
deleted file mode 100644
index 4d7c8bdb..00000000
--- a/extensions/Cite/i18n/core/roa-tara.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Joetaras"
- ]
- },
- "cite-desc": "Aggiunge le tag <nowiki><ref[ name=id]></nowiki> and <nowiki><references/></nowiki> pe le citaziune",
- "cite_error": "Cite errore: $1",
- "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> invalide;\n'u nome non ge pò essere sole 'n'indere. Ause 'nu titele descrittive",
- "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> invalide;\nle referimende senza condenute onne tenè 'nu nome",
- "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> invalide;\nnome invalide, pe esembie troppe luènghe",
- "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> invalide;\nreferimende senza nome onne tenè 'nu condenute",
- "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> invalide;\nnon ge se pò mettere nisciune parametre.\nAuse <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> invalide;\nsulamende 'u parametre \"group\" pò essere ausate.\nAuse <code>&lt;references /&gt;</code> o <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Le etichette personalizzate pe le collegaminde de rrete onne spicciate.\nDefiniscene otre jndr'à 'u messàgge <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Le etichette personalizzate de le collegaminde pu gruppe \"$1\" onne spicciate.\nDefiniscene otre jndr'à 'u messàgge <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> invalide;\nnisciune teste ere previste pe le referimende nnomenate <code>$1</code>",
- "cite_error_included_ref": "Stè 'u tag <code>&lt;/ref&gt;</code> ma manghe <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "'u tag <code>&lt;ref&gt;</code> esiste, ma non g'esiste 'u tag <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "'U tag <code>&lt;ref&gt;</code> esiste pu gruppe nomenate \"$1\", ma non ge corresponne a 'u tag acchiate <code>&lt;references group=\"$1\"/&gt;</code>, o 'nu tag de chiusure <code>&lt;/ref&gt;</code> manghe",
- "cite_error_references_group_mismatch": "'U tag <code>&lt;ref&gt;</code> tag jndr'à <code>&lt;references&gt;</code> tène conflitte cu l'attribbute d'u gruppe \"$1\".",
- "cite_error_references_missing_group": "'U tag <code>&lt;ref&gt;</code> definite jndr'à <code>&lt;references&gt;</code> ave attribbute de gruppe \"$1\" 'u quale non ge jesse jndr'à 'u teste prengepàle.",
- "cite_error_references_missing_key": "'U tag <code>&lt;ref&gt;</code> cu 'u nome \"$1\" definite jndr'à <code>&lt;references&gt;</code> non g'avene ausate jndr'à 'u teste prengepàle.",
- "cite_error_references_no_key": "'U tag <code>&lt;ref&gt;</code> definite jndr'à <code>&lt;references&gt;</code> non ge tène 'nu nome d'attrebbute.",
- "cite_error_empty_references_define": "'U tag <code>&lt;ref&gt;</code> definite jndr'à <code>&lt;references&gt;</code> cu 'u nome \"$1\" non ge tène condenute.",
- "cite_references_link_accessibility_label": "Zumbe sus",
- "cite_references_link_many_accessibility_label": "Zumbe sus a:"
-}
diff --git a/extensions/Cite/i18n/core/ru.json b/extensions/Cite/i18n/core/ru.json
deleted file mode 100644
index 2e20f0dc..00000000
--- a/extensions/Cite/i18n/core/ru.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ahonc",
- "Dim Grits",
- "Ferrer",
- "KPu3uC B Poccuu",
- "Kaganer",
- "Kalan",
- "Okras",
- "Александр Сигачёв",
- "Iltever",
- "NBS"
- ]
- },
- "cite-desc": "Добавляет теги <nowiki><ref[ name=id]></nowiki> и <nowiki><references/></nowiki> для сносок",
- "cite_error": "Ошибка цитирования $1",
- "cite_error_ref_numeric_key": "Неправильный тег <code>&lt;ref&gt;</code>;\nимя не может быть целым числом. Используйте описательное название",
- "cite_error_ref_no_key": "Неправильный тег <code>&lt;ref&gt;</code>;\nэлемент без содержания должен иметь имя.",
- "cite_error_ref_too_many_keys": "Неправильный тег <code>&lt;ref&gt;</code>;\nошибочные имена, возможно, слишком много",
- "cite_error_ref_no_input": "Неправильный тег <code>&lt;ref&gt;</code>;\nэлемент без имени должен иметь содержание",
- "cite_error_references_invalid_parameters": "Неправильный тег <code>&lt;references&gt;</code>;\nпараметры не разрешены.\nИспользуйте <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Ошибочный тег <code>&lt;references&gt;</code>;\nможно использовать только параметр <code>'''group'''</code>.\nИспользуйте <code>&lt;references /&gt;</code> или <code>&lt;references group=\"…\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Не хватает символов для возвратных гиперссылок.\nСледует расширить системное сообщение <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Закончились отметки пользовательских ссылок для группы «$1».\nОпределите дополнительные в сообщении <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Неверный тег <code>&lt;ref&gt;</code>; для сносок <code>$1</code> не указан текст",
- "cite_error_included_ref": "Отсутствует закрывающий тег <code>&lt;/ref&gt;</code>",
- "cite_error_group_refs_without_references": "Для существующих тегов <code>&lt;ref&gt;</code> группы «$1» не найдено соответствующего тега <code>&lt;references group=\"$1\"/&gt;</code> или пропущен закрывающий тег <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "Тег <code>&lt;ref&gt;</code> в <code>&lt;references&gt;</code> имеет конфликтующие группы атрибутов «$1».",
- "cite_error_references_missing_group": "Тег <code>&lt;ref&gt;</code>, определённый в <code>&lt;references&gt;</code>, имеет атрибут группы «$1», который не упоминается в тексте ранее.",
- "cite_error_references_missing_key": "Тег <code>&lt;ref&gt;</code> с именем «$1», определённый в <code>&lt;references&gt;</code>, не используется в предшествующем тексте.",
- "cite_error_references_no_key": "Тег <code>&lt;ref&gt;</code>, определённый в <code>&lt;references&gt;</code>, не имеет атрибута имени.",
- "cite_error_empty_references_define": "Тег <code>&lt;ref&gt;</code>, определённый в <code>&lt;references&gt;</code>, с именем «$1» не имеет содержания.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "cite_ref-",
- "cite_references_link_prefix": "cite_note-",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
- "cite_references_link_many_format_backlink_labels": "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я аа аб ав аг ад ае ё аж аз аи ай ак ал ам ан ао ап ар ас ат ау аф ах ац ач аш ащ аъ аы аь аэ аю ая ба бб бв бг бд бе бж бз би бй бк бл бм бн бо бп бр бс бт бу бф бх бц бч бш бщ бъ бы бь бэ бю бя ва вб вв вг вд ве вж вз ви вй вк вл вм вн во вп вр вс вт ву вф вх вц вч вш вщ въ вы вь вэ вю вя га гб гв гг гд ге гж гз ги гй гк гл гм гн го гп гр гс гт гу гф гх гц гч гш гщ гъ гы гь гэ гю гя да дб дв дг дд де дж дз ди дй дк дл дм дн до дп др дс дт ду дф дх дц дч дш дщ дъ ды дь дэ дю дя еа еб ев ег ед ее еж ез еи ей ек ел ем ен ео еп ер ес ет еу еф ех ец еч еш ещ еъ еы еь еэ ею ея жа жб жв жг жд же жж жз жи жй жк жл жм жн жо жп жр жс жт жу жф жх жц жч жш жщ жъ жы жь жэ жю жя за зб зв зг зд зе зж зз зи зй зк зл зм зн зо зп зр зс зт зу зф зх зц зч зш зщ зъ зы зь зэ зю зя иа иб ив иг ид ие иж из ии ий ик ил им ин ио ип ир ис ит иу иф их иц ич иш ищ иъ иы иь иэ ию ия йа йб йв йг йд йе йж йз йи йй йк йл йм йн йо йп йр йс йт йу йф йх йц йч йш йщ йъ йы йь йэ йю йя ка кб кв кг кд ке кж кз ки кй кк кл км кн ко кп кр кс кт ку кф кх кц кч кш кщ къ кы кь кэ кю кя ла лб лв лг лд ле лж лз ли лй лк лл лм лн ло лп лр лс лт лу лф лх лц лч лш лщ лъ лы ль лэ лю ля ма мб мв мг мд ме мж мз ми мй мк мл мм мн мо мп мр мс мт му мф мх мц мч мш мщ мъ мы мь мэ мю мя на нб нв нг нд не нж нз ни нй нк нл нм нн но нп нр нс нт ну нф нх нц нч нш нщ нъ ны нь нэ ню ня оа об ов ог од ое ож оз ои ой ок ол ом он оо оп ор ос от оу оф ох оц оч ош ощ оъ оы оь оэ ою оя па пб пв пг пд пе пж пз пи пй пк пл пм пн по пп пр пс пт пу пф пх пц пч пш пщ пъ пы пь пэ пю пя ра рб рв рг рд ре рж рз ри рй рк рл рм рн ро рп рр рс рт ру рф рх рц рч рш рщ ръ ры рь рэ рю ря са сб св сг сд се сж сз си сй ск сл см сн со сп ср сс ст су сф сх сц сч сш сщ съ сы сь сэ сю ся та тб тв тг тд те тж тз ти тй тк тл тм тн то тп тр тс тт ту тф тх тц тч тш тщ тъ ты ть тэ тю тя уа уб ув уг уд уе уж уз уи уй ук ул ум ун уо уп ур ус ут уу уф ух уц уч уш ущ уъ уы уь уэ ую уя фа фб фв фг фд фе фж фз фи фй фк фл фм фн фо фп фр фс фт фу фф фх фц фч фш фщ фъ фы фь фэ фю фя ха хб хв хг хд хе хж хз хи хй хк хл хм хн хо хп хр хс хт ху хф хх хц хч хш хщ хъ хы хь хэ хю хя ца цб цв цг цд це цж цз ци цй цк цл цм цн цо цп цр цс цт цу цф цх цц цч цш цщ цъ цы ць цэ цю ця ча чб чв чг чд че чж чз чи чй чк чл чм чн чо чп чр чс чт чу чф чх чц чч чш чщ чъ чы чь чэ чю чя ша шб шв шг шд ше шж шз ши шй шк шл шм шн шо шп шр шс шт шу шф шх шц шч шш шщ шъ шы шь шэ шю шя ща щб щв щг щд ще щж щз щи щй щк щл щм щн що щп щр щс щт щу щф щх щц щч щш щщ щъ щы щь щэ щю щя ъа ъб ъв ъг ъд ъе ъж ъз ъи ъй ък ъл ъм ън ъо ъп ър ъс ът ъу ъф ъх ъц ъч ъш ъщ ъъ ъы ъь ъэ ъю ъя ыа ыб ыв ыг ыд ые ыж ыз ыи ый ык ыл ым ын ыо ып ыр ыс ыт ыу ыф ых ыц ыч ыш ыщ ыъ ыы ыь ыэ ыю ыя ьа ьб ьв ьг ьд ье ьж ьз ьи ьй ьк ьл ьм ьн ьо ьп ьр ьс ьт ьу ьф ьх ьц ьч ьш ьщ ьъ ьы ьь ьэ ью ья эа эб эв эг эд эе эж эз эи эй эк эл эм эн эо эп эр эс эт эу эф эх эц эч эш эщ эъ эы эь ээ эю эя юа юб юв юг юд юе юж юз юи юй юк юл юм юн юо юп юр юс ют юу юф юх юц юч юш ющ юъ юы юь юэ юю юя яа яб яв яг яд яе яж яз яи яй як ял ям ян яо яп яр яс ят яу яф ях яц яч яш ящ яъ яы яь яэ яю яя",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;",
- "cite_references_link_accessibility_label": "Перейти",
- "cite_references_link_many_accessibility_label": "Перейти к:",
- "cite_error_refs_without_references_category-desc": "На странице есть теги <code><nowiki><ref></nowiki></code>, не относящиеся к определённой группы, но на ней нет явного указания тега <code><nowiki><references /></nowiki></code>."
-}
diff --git a/extensions/Cite/i18n/core/rue.json b/extensions/Cite/i18n/core/rue.json
deleted file mode 100644
index d07578b0..00000000
--- a/extensions/Cite/i18n/core/rue.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Gazeb"
- ]
- },
- "cite-desc": "Придасть таґы <nowiki><ref[ name=\"id\"]></nowiki> і&nbsp;<nowiki><references /></nowiki> на означіня цітацій",
- "cite_error": "Хыбна цітація: $1",
- "cite_error_ref_numeric_key": "Хыба в таґу <code>&lt;ref&gt;</code>; назвов не сміє быти просте чісло, хоснуйте пописове означіня",
- "cite_error_ref_no_key": "Хыба в таґу <code>&lt;ref&gt;</code>; порожнї едітації мусять обсяговати назву",
- "cite_error_ref_too_many_keys": "Хыба в таґу <code>&lt;ref&gt;</code>; хыбны назвы, напр. є їх дуже много",
- "cite_error_ref_no_input": "Хыба в таґу <code>&lt;ref&gt;</code>; цітації без назвы мусять мати властный обсяг",
- "cite_error_references_invalid_parameters": "Хыба в таґу <code>&lt;references&gt;</code>; ту не є доволеный параметер, хоснуйте <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Не платный таґ <tt>&lt;references&gt;</tt>;\nє поволеный лем параметер „group“.\nХоснуйте <tt>&lt;references /&gt;</tt> або <tt>&lt;references group=\"...\" /&gt;</tt>.",
- "cite_error_references_no_backlink_label": "Дішли означіня зворотных одказів, придайте їх пару до повідомлїня <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Дішли дефінованы значкы про ґрупу „$1“.\nЗвыште їх чісло у повідомлїню <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Хыба в таґу <code>&lt;ref&gt;</code>; цітації означеной <code>$1</code> не є доданый жаден текст",
- "cite_error_included_ref": "Хыбить закінчіня <code>&lt;/ref&gt;</code> k&nbsp;таґу <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Найджена значка <code>&lt;ref&gt;</code> без одповідной значкы <code>&lt;references/&gt;</code>.",
- "cite_error_group_refs_without_references": "Найдена значка <code>&lt;ref&gt;</code> про ґрупу „$1“, але не існує приналежна значка <code>&lt;references group=\"$1\"/&gt;</code> або хыбить заперачій <code>&lt;/ref&gt;</code>.",
- "cite_error_references_group_mismatch": "Значка <code>&lt;ref&gt;</code> внутрї <code>&lt;references&gt;</code> має дефіновану іншу ґрупу „$1“.",
- "cite_error_references_missing_group": "Значка <code>&lt;ref&gt;</code> внутрї <code>&lt;references&gt;</code> хоснує ґрупу „$1“, котра ся в попереднїм текстї не обявує.",
- "cite_error_references_missing_key": "На <code>&lt;ref&gt;</code> з іменом „$1“ дефінованый внутрї <code>&lt;references&gt;</code> не суть в попереднїм текстї жадны одказы.",
- "cite_error_references_no_key": "У значкы <code>&lt;ref&gt;</code> дефінованой внутрї <code>&lt;references&gt;</code> хыбить атрібут <code>name</code>.",
- "cite_error_empty_references_define": "У значкы <code>&lt;ref&gt;</code> з назвов „$1“ дефінованой внутрї <code>&lt;references&gt;</code> хыбить обсяг."
-}
diff --git a/extensions/Cite/i18n/core/sa.json b/extensions/Cite/i18n/core/sa.json
deleted file mode 100644
index 0d677286..00000000
--- a/extensions/Cite/i18n/core/sa.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Shubha"
- ]
- },
- "cite-desc": "\nAdds<nowiki><ref[ name=id]></nowiki> तथा<nowiki><references/></nowiki> उद्धरणानां कृते सम्पर्कतन्तवः",
- "cite_error": "उद्धरणे दोषः : $1",
- "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> अमान्यशृङ्खला;\nनाम पूर्णाङ्कसङ्ख्या भवितुं नार्हति । विविरणयुक्तं शिरोनाम उपयुज्यताम् ।",
- "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> दोषपूर्णा शृङ्खला; \nरिक्ताधाराः अपि सनामकः भवेत् ।",
- "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> दोषपूर्णा शृङ्खला; \nअमान्यं नाम, उदा. अत्यधिकम्",
- "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> दोषपूर्णा शृङ्खला; \nरिक्ताधाराः अपि सनामकः भवेयुः ।",
- "cite_error_references_invalid_parameters": "<code>&lt;references&gt;</code> असिद्धाङ्कनम्; परिमितिः निर्देष्टुम् अशक्या, <code>&lt;references /&gt;</code> उपयुज्यताम्",
- "cite_error_references_invalid_parameters_group": "<code>&lt;references&gt;</code> अयुक्तकूटप्रणाली;\nपरिमिति''गणः'' एव अनुमतः ।\n<code>&lt;references /&gt;</code> अथवा <code>&lt;references group=\"...\" /&gt;</code> उपयुज्यताम् ।",
- "cite_error_references_no_backlink_label": "सिद्धानि पूर्वतनसम्पर्कशीर्षकाणि नष्टानि ।\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> इत्यस्मिन् सन्देशे अधिकविवरणं योज्यताम् ।",
- "cite_error_no_link_label_group": "\"$1\" आधारसमूहस्य कस्टं-सम्पर्क-लेबेल् न्यूनानि जातानि ।\n<nowiki>[[MediaWiki:$2]]</nowiki> सन्देशे अधिकं निर्वचनं दीयताम् ।",
- "cite_error_references_no_text": "अमान्या <code>&lt;ref&gt;</code> शृङ्खला;\n<code>$1</code> इत्यस्य आधारः अज्ञातः",
- "cite_error_included_ref": "समाप्तिः <code>&lt;/ref&gt;</code> <code>&lt;ref&gt;</code> शृङ्खला लुप्ता",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code>शृङ्खला विद्यते, किन्तु <code>&lt;references/&gt;</code> शृङ्खला न प्राप्ता",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> \"$1\" नामकस्य गणस्य अङ्कनं विद्यते, कीन्तु किमपि अनुरूपं <code>&lt;references group=\"$1\"/&gt;</code> अङ्कनं न प्राप्तम्",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> टैग इन <code>&lt;references&gt;</code>सङ्घर्षगणलक्षणं \"$1\" विद्यते ।",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> अङ्कनपरिभाषिते <code>&lt;references&gt;</code> एतस्मिन् गणस्य विशेषः \"$1\" यश्च पूर्वलेखे न दृष्टम् ।",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> अङ्कनं \"$1\" नाम्ना सह परिभाषितम् <code>&lt;references&gt;</code> पूर्वलेखे उपयोगाय न जातम् ।",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code>अङ्कने परिभाषितं <code>&lt;references&gt;</code> किमपि नामलक्षणं न विद्यते ।",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> अङ्कने परिभाषितं <code>&lt;references&gt;</code> \"$1\" नामिका कापि सामग्री न विद्यते ।"
-}
diff --git a/extensions/Cite/i18n/core/sah.json b/extensions/Cite/i18n/core/sah.json
deleted file mode 100644
index 3fc82dc6..00000000
--- a/extensions/Cite/i18n/core/sah.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "HalanTul"
- ]
- },
- "cite-desc": "Хос быһаарыы <nowiki><ref[ name=id]></nowiki> уонна <nowiki><references/></nowiki> тиэктэрин эбэр",
- "cite_error": "Цитата сыыһата: $1",
- "cite_error_ref_numeric_key": "Неправильный вызов: ожидался нечисловой ключ",
- "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> тиэк алҕаһа (Неправильный вызов): аата (күлүүһэ) ыйыллыбатах",
- "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> тиэк алҕаһа (Неправильный вызов): аата сыыһа ыйыллыбыт, эбэтэр наһаа элбэх аат суруллубут",
- "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> тиэк алҕастаах (Неверный вызов): иһинээҕитэ сыыһа",
- "cite_error_references_invalid_parameters": "Сыыһа параметрдар бэриллибиттэр; <code>&lt;references /&gt;</code> тиэккэ отой суох буолуохтаахтар",
- "cite_error_references_invalid_parameters_group": "Сыыһалаах <code>&lt;references&gt;</code> тиэк;\n\"group\" эрэ парааматыры туһаныахха сөп.\nМаны <code>&lt;references /&gt;</code>, эбэтэр <code>&lt;references group=\"...\" /&gt;</code> туһан.",
- "cite_error_references_no_backlink_label": "Төннөрөр сигэлэргэ бэлиэлэрэ тиийбэттэр.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> диэн систиэмэ этиитин кэҥэтэн биэрэххэ наада",
- "cite_error_no_link_label_group": "«$1» бөлөх кыттааччыларын сигэлэрин бэлиэлэрэ бүппүттэр.\nЭбии манна <nowiki>[[MediaWiki:$2]]</nowiki> оҥор.",
- "cite_error_references_no_text": "Сыыһа <code>&lt;ref&gt;</code> тиэк (тег);\n<code>$1</code> диэн хос быһаарыыларга аналлаах тиэкис суох",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> диэн сабар тиэк суох эбит",
- "cite_error_refs_without_references": "Баар <code>&lt;ref&gt;</code> тиэккэ сөп түбэһэр <code>&lt;references/&gt;</code> тиэк көстүбэтэ",
- "cite_error_group_refs_without_references": "\"$1\" бөлөх <code>&lt;ref&gt;</code> тиэгигэр сөп түбэһэр <code>&lt;references group=\"$1\"/&gt;</code> тиэк көстүбэтэ",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> туттуллар <code>&lt;ref&gt;</code> тиэк бэйэ бэйэлэрин кытта сөпсөспөт \"$1\" атрибуттаах бөлөхтөрдөөх",
- "cite_error_references_missing_group": "Бу <code>&lt;references&gt;</code> туттар маннык <code>&lt;ref&gt;</code> тиэгэ бөлөх тиэкиһигэр урут көрсүллүбэтэх \"$1\" атрибуттаах.",
- "cite_error_references_missing_key": "Бу <code>&lt;references&gt;</code> туттар маннык <code>&lt;ref&gt;</code> \"$1\" диэн тиэгэ бу иннинээҕи тиэкискэ туттуллубат эбит.",
- "cite_error_references_no_key": "Бу <code>&lt;references&gt;</code> туттар <code>&lt;ref&gt;</code> тиэгэ аатын атрибута суох эбит.",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code> туттар <code>&lt;ref&gt;</code> \"$1\" диэн ааттаах тиэгэ иһинээҕитэ суох эбит."
-}
diff --git a/extensions/Cite/i18n/core/scn.json b/extensions/Cite/i18n/core/scn.json
deleted file mode 100644
index a4214bbb..00000000
--- a/extensions/Cite/i18n/core/scn.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Markos90",
- "Melos",
- "Santu"
- ]
- },
- "cite-desc": "Junci li tag <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> pi gistiri li citazzioni",
- "cite_error": "Sbàgghiu nnâ funzioni Cite $1",
- "cite_error_ref_numeric_key": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;ref&gt;</code>: lu nomu pò èssiri nu nùmmiru sanu. Usari nu tìtulu discrittivu",
- "cite_error_ref_no_key": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;ref&gt;</code>: li ref vacanti non ponnu èssiri senza nomu.",
- "cite_error_ref_too_many_keys": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;ref&gt;</code>: nomi non vàlidi (pi es. nùmmiru troppu àutu)",
- "cite_error_ref_no_input": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;ref&gt;</code>: li ref senza nomu non ponnu èssiri vacanti",
- "cite_error_references_invalid_parameters": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;references&gt;</code>: paràmitri non ammittuti, usari li marcaturi <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;references&gt;</code>; \nsulu lu paràmitru \"group\" è pirmittutu.\nUsari <code>&lt;references /&gt;</code> oppuru <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Etichetti di rimannata pirsunalizzati finuti, aumintari lu nùmmiru ntô missàggiu <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_references_no_text": "Marcaturi <code>&lt;ref&gt;</code> non vàlidu; non vinni nnicatu nuddu testu pô marcaturi <code>$1</code>",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> di chiusura mancanti pô marcaturi <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Sù prisenti dê marcatura <code>&lt;ref&gt;</code> ma nun fu attruvatu nissunu marcaturi <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Sù prisenti dê marcatura <code>&lt;ref&gt;</code> pi nu gruppu chiamatu \"$1\" ma nun fu truvatu nissunu marcaturi <code>&lt;references group=\"$1\"/&gt;</code> currispunnenti",
- "cite_error_references_group_mismatch": "Lu tag <code>&lt;ref&gt;</code> n <code>&lt;references&gt;</code> havi attribuiutu lu gruppu \"$1\" n conflittu.",
- "cite_error_references_missing_group": "Lu tag <code>&lt;ref&gt;</code> difinutu n <code>&lt;references&gt;</code> havi n'attributu gruppu \"$1\" ca nun cumpari ni lu testu pricidenti.",
- "cite_error_references_missing_key": "Lu tag <code>&lt;ref&gt;</code> cu nomu \"$1\" difinutu n <code>&lt;references&gt;</code> nun è usatu nô testu pricidenti.",
- "cite_error_references_no_key": "Lu tag <code>&lt;ref&gt;</code> difinutu n <code>&lt;references&gt;</code> nun havi n'attributu nomu.",
- "cite_error_empty_references_define": "Lu tag <code>&lt;ref&gt;</code> difinutu n <code>&lt;references&gt;</code> cu lu nomu \"$1\" nun havi alcun cuntinutu.",
- "cite_reference_link_prefix": "muntuari ref",
- "cite_references_link_prefix": "muntuari annutazzioni",
- "cite_references_link_one": "<li id=\"$1\">[[#$2|'''^''']] $3</li>",
- "cite_references_link_many": "<li id=\"$1\">'''^''' $2 $3</li>",
- "cite_references_link_many_format": "<sup>''[[#$1|$3]]''</sup>",
- "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz"
-}
diff --git a/extensions/Cite/i18n/core/si.json b/extensions/Cite/i18n/core/si.json
deleted file mode 100644
index dddf85cd..00000000
--- a/extensions/Cite/i18n/core/si.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Budhajeewa",
- "Thameera123",
- "නන්දිමිතුරු"
- ]
- },
- "cite-desc": "උපහරණයන් සඳහා, <nowiki><ref[ name=id]></nowiki> සහ <nowiki><references/></nowiki> ටැගයන්, එකතු කරයි",
- "cite_error": "උපන්‍යාස දෝෂය: $1",
- "cite_error_ref_numeric_key": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\nනම සරල පූර්ණාංකයක් විය නොහැක. විස්තරශීලි ශිර්ෂයක් භාවිතා කරන්න",
- "cite_error_ref_no_key": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\nපෙළ විරහිත ආශ්‍රේය සඳහා නමක් තිබිය යුතුය",
- "cite_error_ref_too_many_keys": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\nඅනීතික නාමයන්, නිද. පමණට වැඩි",
- "cite_error_ref_no_input": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\nනාමයක් නොමැති ආශ්‍රේය සඳහා පෙළක් තිබිය යුතුය",
- "cite_error_references_invalid_parameters": "අනීතික <code>&lt;references&gt;</code> ටැගය;\nකිසිම පරාමිතිකයකට ඉඩ නොදෙයි.\n<code>&lt;references /&gt;</code> භාවිත කරන්න",
- "cite_error_references_invalid_parameters_group": "අනීතික <code>&lt;references&gt;</code> ටැගය;\n\"කාණ්ඩය\" පරාමිතියට පමණක් ඉඩ දෙයි.\n<code>&lt;references /&gt;</code>, හෝ <code>&lt;references group=\"...\" /&gt;</code> භාවිත කරන්න",
- "cite_error_references_no_backlink_label": "උපයෝග්‍ය පසුසබැඳුම් ලේබල අවසාන විය.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> පණිවුඩයෙහි තවත් ඒවා අර්ථදක්වන්න",
- "cite_error_no_link_label_group": "\"$1\" කණ්ඩායම සඳහා අභිමත සබැඳි ලේබල අවසන් විය. \n<nowiki>[[MediaWiki:$2]]</nowiki> පණිවුඩයේ තවත් වැඩිපුර සඳහන් කරන්න.",
- "cite_error_references_no_text": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\n<code>$1</code> නමැති ආශ්‍රේයන් සඳහා කිසිදු පෙළක් සපයා නොතිබුණි",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> ටැගය සොයාගත නොහැකි බැවින් <code>&lt;/ref&gt;</code> වසා දමමින්",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> ටැග පැවතුණත්, <code>&lt;references/&gt;</code> ටැග සොයාගත නොහැකි විය.",
- "cite_error_group_refs_without_references": "\"$1\" නම් කණ්ඩායම සඳහා <code>&lt;ref&gt;</code> ටැග පැවතුණත්, ඊට අදාළ <code>&lt;references group=\"$1\"/&gt;</code> ටැග සොයාගත නොහැකි විය.",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> හි <code>&lt;ref&gt;</code> නම් ටැගය \"$1\" යන පරස්පර සමූහ ගුණාංග දරයි.",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code> හි <code>&lt;ref&gt;</code> ටැගය පෙර පෙළෙහි නොතිබූ \"$1\" නම් සමූහ ගුණාංගයක් දරයි.",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code> හි \"$1\" නමැති <code>&lt;ref&gt;</code> ටැගය පෙර පෙළෙහි භාවිතා වූයේ නැත.",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code> හි <code>&lt;ref&gt;</code> ටැගයට නමක් ආදේශකොට නැත.",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code> හි \"$1\" නමැති <code>&lt;ref&gt;</code> ටැගයට අන්තර්ගතයක් නැත.",
- "cite_reference_link_prefix": "උපන්‍යාස_යොමුව-",
- "cite_references_link_prefix": "උපන්‍යාස_සටහන-"
-}
diff --git a/extensions/Cite/i18n/core/sk.json b/extensions/Cite/i18n/core/sk.json
deleted file mode 100644
index 7ef04b40..00000000
--- a/extensions/Cite/i18n/core/sk.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Helix84"
- ]
- },
- "cite-desc": "Pridáva značky <nowiki><ref[ name=id]></nowiki> a <nowiki><references/></nowiki> pre citácie",
- "cite_error": "Chyba citácie $1",
- "cite_error_ref_numeric_key": "Neplatné volanie; očakáva sa neceločíselný typ kľúča",
- "cite_error_ref_no_key": "Neplatné volanie; nebol špecifikovaný kľúč",
- "cite_error_ref_too_many_keys": "Neplatné volanie; neplatné kľúče, napr. príliš veľa alebo nesprávne špecifikovaný kľúč",
- "cite_error_ref_no_input": "Neplatné volanie; nebol špecifikovaný vstup",
- "cite_error_references_invalid_parameters": "Neplatné parametre; neočakávli sa žiadne",
- "cite_error_references_invalid_parameters_group": "Neplatná značka <code>&lt;references&gt;</code>;\nje povolený iba parameter „group“.\nPoužite <code>&lt;references /&gt;</code> alebo <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Minuli sa generované návestia spätných odkazov, definujte viac v správe <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Vyčerpané prispôsobené označenia odkazov pre skupinu „$1“.\nDefinujte ďalšie v správe <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Neplatná značka <code>&lt;ref&gt;</code>; nebol zadaný text pre referencie s názvom <code>$1</code>",
- "cite_error_included_ref": "Chýba zakončenie značky <code>&lt;ref&gt;</code> (<code>&lt;/ref&gt;</code>)",
- "cite_error_refs_without_references": "Značky <code>&lt;ref&gt;</code> sú prítomné, ale nebola nájdená žiadna značka <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Značky <code>&lt;ref&gt;</code> pre skupinu „$1“ sú prítomné, ale nebola nájdená zodpovedajúca značka <code>&lt;references group=\"$1\"/&gt;</code>",
- "cite_error_references_group_mismatch": "Značka <code>&lt;ref&gt;</code> v <code>&lt;references&gt;</code> má konfliktný atribút skupiny „$1“.",
- "cite_error_references_missing_group": "Značka <code>&lt;ref&gt;</code> v <code>&lt;references&gt;</code> má atribút skupiny „$1“, ktorý sa v predošlom texte nevyskytuje.",
- "cite_error_references_missing_key": "Značka <code>&lt;ref&gt;</code> s názvom „$1“ definovaná v <code>&lt;references&gt;</code> sa v predošlom texte nevyskytuje.",
- "cite_error_references_no_key": "Značka <code>&lt;ref&gt;</code> s definovaná v <code>&lt;references&gt;</code> nemá žiaden atribút názov.",
- "cite_error_empty_references_define": "Značka <code>&lt;ref&gt;</code> s definovaná v <code>&lt;references&gt;</code> s názvom „$1“ nemá žiaden obsah."
-}
diff --git a/extensions/Cite/i18n/core/sl.json b/extensions/Cite/i18n/core/sl.json
deleted file mode 100644
index 5a1749b6..00000000
--- a/extensions/Cite/i18n/core/sl.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dbc334"
- ]
- },
- "cite-desc": "Doda etiketi <nowiki><ref[ name=id]></nowiki> in <nowiki><references/></nowiki> za navajanje",
- "cite_error": "Napaka pri navajanju: $1",
- "cite_error_ref_numeric_key": "Neveljavna oznaka <code>&lt;ref&gt;</code>;\nime ne more biti samo število. Uporabite opisni naslov",
- "cite_error_ref_no_key": "Neveljavna oznaka <code>&lt;ref&gt;</code>;\nsklici brez vsebine morajo imeti ime",
- "cite_error_ref_too_many_keys": "Neveljavna etiketa <code>&lt;ref&gt;</code>;\nneveljavna imena, npr. preveč",
- "cite_error_ref_no_input": "Neveljavna oznaka <code>&lt;ref&gt;</code>;\nsklici brez imena morajo imeti vsebino",
- "cite_error_references_invalid_parameters": "Neveljavna etiketa <code>&lt;references&gt;</code>;\nparametri niso dovoljeni.\nUporabite <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Neveljavna etiketa <code>&lt;references&gt;</code>;\ndovoljen je samo parameter »group«.\nUporabite <code>&lt;references /&gt;</code> ali <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Zmanjkalo je oznak za povratne povezave.\nDoločite jih več v sporočilu <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_no_link_label_group": "Zmanjkalo je oznak povezav po meri za skupino »$1«.\nDoločite jih več v sporočilu <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Neveljavna oznaka <code>&lt;ref&gt;</code>;\nsklici imenovani <code>$1</code> nimajo določenega besedila",
- "cite_error_included_ref": "Zaključek <code>&lt;/ref&gt;</code> manjka za etiketo <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Obstajajo etikete <code>&lt;ref&gt;</code>, vendar etikete <code>&lt;references/&gt;</code> ni bilo mogoče najti",
- "cite_error_group_refs_without_references": "Obstajajo etikete <code>&lt;ref&gt;</code> za skupino, imenovano »$1«, vendar ustrezne etikete <code>&lt;references group=\"$1\"/&gt;</code> ni bilo mogoče najti ali pa manjka zaključni <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "Oznaka <code>&lt;ref&gt;</code> v <code>&lt;references&gt;</code> ima atribut nasprotujoče si skupine »$1«.",
- "cite_error_references_missing_group": "Oznaka <code>&lt;ref&gt;</code>, opredeljena v <code>&lt;references&gt;</code>, ima atribut skupine »$1«, ki se ne pojavi v predhodnem besedilu.",
- "cite_error_references_missing_key": "Oznaka <code>&lt;ref&gt;</code> z imenom »$1«, opredeljena v <code>&lt;references&gt;</code>, ni uporabljena v predhodnem besedilu.",
- "cite_error_references_no_key": "Etiketa <code>&lt;ref&gt;</code>, določena v <code>&lt;references&gt;</code>, nima lastnosti »name«.",
- "cite_error_empty_references_define": "Etiketa <code>&lt;ref&gt;</code>, določena v <code>&lt;references&gt;</code> z imenom »$1«, nima vsebine.",
- "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">'''[[#$2|^]]'''</span> $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">^ $2</span> $3</li>",
- "cite_references_link_many_format_backlink_labels": "a b c č d e f g h i j k l m n o p r s š t u v z ž a aa ab ac ač ad ae af ag ah ai aj ak al am an ao ap ar as aš at au av az až b ba bb bc bč bd be bf bg bh bi bj bk bl bm bn bo bp br bs bš bt bu bv bz bž c ca cb cc cč cd ce cf cg ch ci cj ck cl cm cn co cp cr cs cš ct cu cv cz cž č ča čb čc čč čd če čf čg čh či čj čk čl čm čn čo čp čr čs čš čt ču čv čz čž d da db dc dč dd de df dg dh di dj dk dl dm dn do dp dr ds dš dt du dv dz dž e ea eb ec eč ed ee ef eg eh ei ej ek el em en eo ep er es eš et eu ev ez ež f fa fb fc fč fd fe ff fg fh fi fj fk fl fm fn fo fp fr fs fš ft fu fv fz fž g ga gb gc gč gd ge gf gg gh gi gj gk gl gm gn go gp gr gs gš gt gu gv gz gž h ha hb hc hč hd he hf hg hh hi hj hk hl hm hn ho hp hr hs hš ht hu hv hz hž i ia ib ic ič id ie if ig ih ii ij ik il im in io ip ir is iš it iu iv iz iž j ja jb jc jč jd je jf jg jh ji jj jk jl jm jn jo jp jr js jš jt ju jv jz jž k ka kb kc kč kd ke kf kg kh ki kj kk kl km kn ko kp kr ks kš kt ku kv kz kž l la lb lc lč ld le lf lg lh li lj lk ll lm ln lo lp lr ls lš lt lu lv lz lž m ma mb mc mč md me mf mg mh mi mj mk ml mm mn mo mp mr ms mš mt mu mv mz mž n na nb nc nč nd ne nf ng nh ni nj nk nl nm nn no np nr ns nš nt nu nv nz nž o oa ob oc oč od oe of og oh oi oj ok ol om on oo op or os oš ot ou ov oz ož p pa pb pc pč pd pe pf pg ph pi pj pk pl pm pn po pp pr ps pš pt pu pv pz pž r ra rb rc rč rd re rf rg rh ri rj rk rl rm rn ro rp rr rs rš rt ru rv rz rž s sa sb sc sč sd se sf sg sh si sj sk sl sm sn so sp sr ss sš st su sv sz sž š ša šb šc šč šd še šf šg šh ši šj šk šl šm šn šo šp šr šs šš št šu šv šz šž t ta tb tc tč td te tf tg th ti tj tk tl tm tn to tp tr ts tš tt tu tv tz tž u ua ub uc uč ud ue uf ug uh ui uj uk ul um un uo up ur us uš ut uu uv uz už v va vb vc vč vd ve vf vg vh vi vj vk vl vm vn vo vp vr vs vš vt vu vv vz vž z za zb zc zč zd ze zf zg zh zi zj zk zl zm zn zo zp zr zs zš zt zu zv zz zž ž ža žb žc žč žd že žf žg žh ži žj žk žl žm žn žo žp žr žs žš žt žu žv žz žž",
- "cite_references_link_accessibility_label": "Skoči gor",
- "cite_references_link_many_accessibility_label": "Skoči gor na:"
-}
diff --git a/extensions/Cite/i18n/core/sq.json b/extensions/Cite/i18n/core/sq.json
deleted file mode 100644
index 90fd06de..00000000
--- a/extensions/Cite/i18n/core/sq.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Mikullovci11",
- "Olsi"
- ]
- },
- "cite-desc": "Shton etiketa <nowiki><ref[ name=id]></nowiki> dhe <nowiki><references/></nowiki> për citime",
- "cite_error": "Gabim referencash: $1",
- "cite_error_ref_numeric_key": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nemri nuk mund të jetë një numër i plotë i thjeshtë. Përdorni një titull përshkrues",
- "cite_error_ref_no_key": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nrefs pa përmbajtje duhet të kenë një emër",
- "cite_error_ref_too_many_keys": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nemra të pavlefshëm, p.sh. shumë",
- "cite_error_ref_no_input": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nrefs pa emër duhet të kenë përmbajtje",
- "cite_error_references_invalid_parameters": "Etiketë <code>&lt;references&gt;</code> e pavlefshme;\nasnjë parametër nuk lejohet.\nPërdorni <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Etiketë <code>&lt;references&gt;</code> e pavlefshme;\nvetëm parametri \"group\" lejohet.\nPërdorni <code>&lt;references /&gt;</code>, ose <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Nga ran të etiketave backlink me porosi. \nPercaktoni më shumë në <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> mesazh.",
- "cite_error_no_link_label_group": "Nga ran e etiketave lidhje me porosi për grupin \"$1\". \nPercaktoni më shumë në <nowiki> [[MediaWiki:$2]] </nowiki> mesazh.",
- "cite_error_references_no_text": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nasnjë tekst nuk u dha për refs e quajtura <code>$1</code>",
- "cite_error_included_ref": "Duke mbyllur <code>&lt;/ref&gt;</code> mungon për etiketën <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Etiketat <code>&lt;ref&gt;</code> ekzistojnë, por nuk u gjet etiketa <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Etiketat <code>&lt;ref&gt;</code> ekzistojnë për një grup të quajtur \"$1\", por nuk u gjet etiketa korresponduese <code>&lt;references group=\"$1\"/&gt;</code>",
- "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tag in <code>&lt;references&gt;</code> has conflicting group attribute \"$1\".",
- "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> etiketa e përcaktuar në <code>&lt;referenca&gt;</code> ka atribut grup \"$1\" që nuk duket në tekstin paraprak.",
- "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> etiketa me emrin \"$1\" e percaktuar ne <code>&lt;referenca&gt;</code> nuk është përdorur në tekst paraprak.",
- "cite_error_references_no_key": "<code>&lt;ref&gt;</code> etiketa e përcaktuar në <code>&lt;referenca&gt;</code> nuk ka ndonjë atribut emër.",
- "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> etiketa e përcaktuar në <code>&lt;referenca&gt;</code> me emrin \"$1\" nuk ka përmbajtje."
-}
diff --git a/extensions/Cite/i18n/core/sr-ec.json b/extensions/Cite/i18n/core/sr-ec.json
deleted file mode 100644
index 26a2efb6..00000000
--- a/extensions/Cite/i18n/core/sr-ec.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Milicevic01",
- "Millosh",
- "Rancher",
- "Михајло Анђелковић"
- ]
- },
- "cite-desc": "Додаје <nowiki><ref[ name=id]></nowiki> и <nowiki><references/></nowiki> ознаке за цитирање.",
- "cite_error": "Грешка цитата: $1",
- "cite_error_ref_numeric_key": "Лоша ознака <code>&lt;ref&gt;</code>; име не може бити једноставни интеџер. Користи описни наслов.",
- "cite_error_ref_no_key": "Лоша ознака <code>&lt;ref&gt;</code>; ref-ови без садржаја морају имати име.",
- "cite_error_ref_too_many_keys": "Лоша ознака <code>&lt;ref&gt;</code>; лоша имена, односно много њих.",
- "cite_error_ref_no_input": "Лоша ознака <code>&lt;ref&gt;</code>; ref-ови без имена морају имати садржај.",
- "cite_error_references_invalid_parameters": "Лоша ознака <code>&lt;references&gt;</code>; параметри нису дозвољени. Користи <code>&lt;references /&gt;</code>.",
- "cite_error_references_invalid_parameters_group": "Лоша ознака <code>&lt;references&gt;</code>; само је парамтера \"group\" дозвољен. Користи <code>&lt;references /&gt;</code> или <code>&lt;references group=\"...\"&gt;</code>.",
- "cite_error_references_no_backlink_label": "Нестале су посебне ознаке за задње везе. Одреди их више у поруци <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_references_no_text": "Лоша ознака <code>&lt;ref&gt;</code>; нема текста за ref-ове под именом <code>$1</code>.",
- "cite_error_included_ref": "Затвара <code>&lt;/ref&gt;</code> који недостаје <code>&lt;ref&gt;</code> тагу",
- "cite_error_refs_without_references": "Чланак има ознаке <code>&lt;ref&gt;</code>, али није пронађена потребна ознака <code>&#123;&#123;наводи&#125;&#125;</code> (или <code>&lt;references/&gt;</code>)",
- "cite_error_group_refs_without_references": "Постоје ознаке <code>&lt;ref&gt;</code> за групу с именом „$1“, али нема одговарајуће ознаке <code>&lt;references group=\"$1\"/&gt;</code>",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "cite_ref-",
- "cite_references_link_prefix": "cite_note-",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
- "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
- "cite_references_link_many_format_backlink_labels": "а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш аа аб ав аг ад ађ ае аж аз аи ај ак ал аљ ам ан ањ ао ап ар ас ат аћ ау аф ах ац ач аџ аш ба бб бв бг бд бђ бе бж бз би бј бк бл бљ бм бн бњ бо бп бр бс бт бћ бу бф бх бц бч бџ бш ва вб вв вг вд вђ ве вж вз ви вј вк вл вљ вм вн вњ во вп вр вс вт вћ ву вф вх вц вч вџ вш га гб гв гг гд гђ ге гж гз ги гј гк гл гљ гм гн гњ го гп гр гс гт гћ гу гф гх гц гч гџ гш да дб дв дг дд дђ де дж дз ди дј дк дл дљ дм дн дњ до дп др дс дт дћ ду дф дх дц дч дџ дш ђа ђб ђв ђг ђд ]] ђе ђж ђз ђи ђј ђк ђл ђљ ђм ђн ђњ ђо ђп ђр ђс ђт ђћ ђу ђф ђх ђц ђч ђџ ђш еа еб ев ег ед еђ ее еж ез еи еј ек ел ељ ем ен ењ ео еп ер ес ет ећ еу еф ех ец еч еџ еш жа жб жв жг жд жђ же жж жз жи жј жк жл жљ жм жн жњ жо жп жр жс жт жћ жу жф жх жц жч жџ жш за зб зв зг зд зђ зе зж зз зи зј зк зл зљ зм зн зњ зо зп зр зс зт зћ зу зф зх зц зч зџ зш иа иб ив иг ид иђ ие иж из ии иј ик ил иљ им ин ињ ио ип ир ис ит ић иу иф их иц ич иџ иш ја јб јв јг јд јђ је јж јз ји јј јк јл јљ јм јн јњ јо јп јр јс јт јћ ју јф јх јц јч јџ јш ка кб кв кг кд кђ ке кж кз ки кј кк кл кљ км кн књ ко кп кр кс кт кћ ку кф кх кц кч кџ кш ла лб лв лг лд лђ ле лж лз ли лј лк лл лљ лм лн лњ ло лп лр лс лт лћ лу лф лх лц лч лџ лш ља љб љв љг љд љђ ље љж љз љи љј љк љл љљ љм љн љњ љо љп љр љс љт љћ љу љф љх љц љч љџ љш ма мб мв мг мд мђ ме мж мз ми мј мк мл мљ мм мн мњ мо мп мр мс мт мћ му мф мх мц мч мџ мш на нб нв нг нд нђ не нж нз ни нј нк нл нљ нм нн нњ но нп нр нс нт нћ ну нф нх нц нч нџ нш ња њб њв њг њд њђ ње њж њз њи њј њк њл њљ њм њн њњ њо њп њр њс њт њћ њу њф њх њц њч њџ њш оа об ов ог од ођ ое ож оз ои ој ок ол ољ ом он оњ оо оп ор ос от оћ оу оф ох оц оч оџ ош па пб пв пг пд пђ пе пж пз пи пј пк пл пљ пм пн пњ по пп пр пс пт пћ пу пф пх пц пч пџ пш ра рб рв рг рд рђ ре рж рз ри рј рк рл рљ рм рн рњ ро рп рр рс рт рћ ру рф рх рц рч рџ рш са сб св сг сд сђ се сж сз си сј ск сл сљ см сн сњ со сп ср сс ст сћ су сф сх сц сч сџ сш та тб тв тг тд тђ те тж тз ти тј тк тл тљ тм тн тњ то тп тр тс тт тћ ту тф тх тц тч тџ тш ћа ћб ћв ћг ћд ћђ ће ћж ћз ћи ћј ћк ћл ћљ ћм ћн ћњ ћо ћп ћр ћс ћт ћћ ћу ћф ћх ћц ћч ћџ ћш уа уб ув уг уд уђ уе уж уз уи уј ук ул уљ ум ун уњ уо уп ур ус ут ућ уу уф ух уц уч уџ уш фа фб фв фг фд фђ фе фж фз фи фј фк фл фљ фм фн фњ фо фп фр фс фт фћ фу фф фх фц фч фџ фш ха хб хв хг хд хђ хе хж хз хи хј хк хл хљ хм хн хњ хо хп хр хс хт хћ ху хф хх хц хч хџ хш ца цб цв цг цд цђ це цж цз ци цј цк цл цљ цм цн цњ цо цп цр цс цт цћ цу цф цх цц цч цџ цш ча чб чв чг чд чђ че чж чз чи чј чк чл чљ чм чн чњ чо чп чр чс чт чћ чу чф чх чц чч чџ чш џа џб џв џг џд џђ џе џж џз џи џј џк џл џљ џм џн џњ џо џп џр џс џт џћ џу џф џх џц џч џџ џш ша шб шв шг шд шђ ше шж шз ши шј шк шл шљ шм шн шњ шо шп шр шс шт шћ шу шф шх шц шч шџ шш",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;"
-}
diff --git a/extensions/Cite/i18n/core/sr-el.json b/extensions/Cite/i18n/core/sr-el.json
deleted file mode 100644
index 969fcd66..00000000
--- a/extensions/Cite/i18n/core/sr-el.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Michaello",
- "Milicevic01"
- ]
- },
- "cite-desc": "Dodaje <nowiki><ref[ name=id]></nowiki> i <nowiki><references/></nowiki> oznake za citiranje.",
- "cite_error": "Greška citata: $1",
- "cite_error_ref_numeric_key": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; ime ne može biti jednostavni intedžer. Koristi opisni naslov.",
- "cite_error_ref_no_key": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; ref-ovi bez sadržaja moraju imati ime.",
- "cite_error_ref_too_many_keys": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; loša imena, odnosno mnogo njih.",
- "cite_error_ref_no_input": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; ref-ovi bez imena moraju imati sadržaj.",
- "cite_error_references_invalid_parameters": "Loša oznaka <code>&amp;lt;references&amp;gt;</code>; parametri nisu dozvoljeni. Koristi <code>&amp;lt;references /&amp;gt;</code>.",
- "cite_error_references_invalid_parameters_group": "Loša oznaka <code>&amp;lt;references&amp;gt;</code>; samo je paramtera &quot;group&quot; dozvoljen. Koristi <code>&amp;lt;references /&amp;gt;</code> ili <code>&amp;lt;references group=&quot;...&quot;&amp;gt;</code>.",
- "cite_error_references_no_backlink_label": "Nestale su posebne oznake za zadnje veze. Odredi ih više u poruci <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
- "cite_error_references_no_text": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; nema teksta za ref-ove pod imenom <code>$1</code>.",
- "cite_error_included_ref": "Zatvara <code>&lt;/ref&gt;</code> koji nedostaje <code>&lt;ref&gt;</code> tagu",
- "cite_error_refs_without_references": "<code>&amp;lt;ref&amp;gt;</code> tag postoji, ali odgovarajući <code>&amp;lt;references/&amp;gt;</code> tag nije nađen",
- "cite_error_group_refs_without_references": "<code><ref></code> tagovi postoje za grupu pod imenom \"$1\", ali nije nađen odgovarajući <code><references group=\"$1\"/></code> tag",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "cite_ref-",
- "cite_references_link_prefix": "cite_note-",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
- "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
- "cite_references_link_many_format_backlink_labels": "a b v g d đ e ž z i j k l lj m n nj o p r s t ć u f h c č dž š aa ab av ag ad ađ ae až az ai aj ak al alj am an anj ao ap ar as at ać au af ah ac ač adž aš ba bb bv bg bd bđ be bž bz bi bj bk bl blj bm bn bnj bo bp br bs bt bć bu bf bh bc bč bdž bš va vb vv vg vd vđ ve vž vz vi vj vk vl vlj vm vn vnj vo vp vr vs vt vć vu vf vh vc vč vdž vš ga gb gv gg gd gđ ge gž gz gi gj gk gl glj gm gn gnj go gp gr gs gt gć gu gf gh gc gč gdž gš da db dv dg dd dđ de dž dz di dj dk dl dlj dm dn dnj do dp dr ds dt dć du df dh dc dč ddž dš đa đb đv đg đd ]] đe đž đz đi đj đk đl đlj đm đn đnj đo đp đr đs đt đć đu đf đh đc đč đdž đš ea eb ev eg ed eđ ee ež ez ei ej ek el elj em en enj eo ep er es et eć eu ef eh ec eč edž eš ža žb žv žg žd žđ že žž žz ži žj žk žl žlj žm žn žnj žo žp žr žs žt žć žu žf žh žc žč ždž žš za zb zv zg zd zđ ze zž zz zi zj zk zl zlj zm zn znj zo zp zr zs zt zć zu zf zh zc zč zdž zš ia ib iv ig id iđ ie iž iz ii ij ik il ilj im in inj io ip ir is it ić iu if ih ic ič idž iš ja jb jv jg jd jđ je jž jz ji jj jk jl jlj jm jn jnj jo jp jr js jt jć ju jf jh jc jč jdž jš ka kb kv kg kd kđ ke kž kz ki kj kk kl klj km kn knj ko kp kr ks kt kć ku kf kh kc kč kdž kš la lb lv lg ld lđ le lž lz li lj lk ll llj lm ln lnj lo lp lr ls lt lć lu lf lh lc lč ldž lš lja ljb ljv ljg ljd ljđ lje ljž ljz lji ljj ljk ljl ljlj ljm ljn ljnj ljo ljp ljr ljs ljt ljć lju ljf ljh ljc ljč ljdž ljš ma mb mv mg md mđ me mž mz mi mj mk ml mlj mm mn mnj mo mp mr ms mt mć mu mf mh mc mč mdž mš na nb nv ng nd nđ ne nž nz ni nj nk nl nlj nm nn nnj no np nr ns nt nć nu nf nh nc nč ndž nš nja njb njv njg njd njđ nje njž njz nji njj njk njl njlj njm njn njnj njo njp njr njs njt njć nju njf njh njc njč njdž njš oa ob ov og od ođ oe ož oz oi oj ok ol olj om on onj oo op or os ot oć ou of oh oc oč odž oš pa pb pv pg pd pđ pe pž pz pi pj pk pl plj pm pn pnj po pp pr ps pt pć pu pf ph pc pč pdž pš ra rb rv rg rd rđ re rž rz ri rj rk rl rlj rm rn rnj ro rp rr rs rt rć ru rf rh rc rč rdž rš sa sb sv sg sd sđ se sž sz si sj sk sl slj sm sn snj so sp sr ss st sć su sf sh sc sč sdž sš ta tb tv tg td tđ te tž tz ti tj tk tl tlj tm tn tnj to tp tr ts tt tć tu tf th tc tč tdž tš ća ćb ćv ćg ćd ćđ će ćž ćz ći ćj ćk ćl ćlj ćm ćn ćnj ćo ćp ćr ćs ćt ćć ću ćf ćh ćc ćč ćdž ćš ua ub uv ug ud uđ ue už uz ui uj uk ul ulj um un unj uo up ur us ut uć uu uf uh uc uč udž uš fa fb fv fg fd fđ fe fž fz fi fj fk fl flj fm fn fnj fo fp fr fs ft fć fu ff fh fc fč fdž fš ha hb hv hg hd hđ he hž hz hi hj hk hl hlj hm hn hnj ho hp hr hs ht hć hu hf hh hc hč hdž hš ca cb cv cg cd cđ ce cž cz ci cj ck cl clj cm cn cnj co cp cr cs ct cć cu cf ch cc cč cdž cš ča čb čv čg čd čđ če čž čz či čj čk čl člj čm čn čnj čo čp čr čs čt čć ču čf čh čc čč čdž čš dža džb džv džg džd džđ dže džž džz dži džj džk džl džlj džm džn džnj džo džp džr džs džt džć džu džf džh džc džč dždž džš ša šb šv šg šd šđ še šž šz ši šj šk šl šlj šm šn šnj šo šp šr šs št šć šu šf šh šc šč šdž šš",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;"
-}
diff --git a/extensions/Cite/i18n/core/stq.json b/extensions/Cite/i18n/core/stq.json
deleted file mode 100644
index 7dd6d04e..00000000
--- a/extensions/Cite/i18n/core/stq.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Pyt"
- ]
- },
- "cite-desc": "Föiget foar Wällenätterwiese do <nowiki><ref[ name=id]></nowiki> un <nowiki><references/></nowiki> Tags tou",
- "cite_error": "Referenz-Failer $1",
- "cite_error_ref_numeric_key": "Uungultige <code><nowiki><ref></nowiki></code>-Ferweendenge: „name“ duur naan skeenen Taalenwäid weese, benutsje n beskrieuwenden Noome.",
- "cite_error_ref_no_key": "Uungultige <code><nowiki><ref></nowiki></code>-Ferweendenge: „ref“ sunner Inhoold mout n Noome hääbe.",
- "cite_error_ref_too_many_keys": "Uungultige <code><nowiki><ref></nowiki></code>-Ferweendenge: „name“ is uungultich of tou loang.",
- "cite_error_ref_no_input": "Uungultige <code><nowiki><ref></nowiki></code>-Ferweendenge: „ref“ sunner Noome mout n Inhoold hääbe.",
- "cite_error_references_invalid_parameters": "Uungultige <code><nowiki><reference></nowiki></code>-Ferweendenge: Der sunt neen bietoukuumende Parametere ferlööwed, ferweend bloot <code><nowiki><reference /></nowiki></code>.",
- "cite_error_references_invalid_parameters_group": "Ungultige <code>&lt;references&gt;</code>-Ferweendenge: Bloot die Parameter „group“ is ferlööwed, ferweend <tt>&lt;references /&gt;</tt> of <tt>&lt;references group=\"...\" /&gt;</tt>",
- "cite_error_references_no_backlink_label": "Ne Referenz fon ju Foarm <code><nowiki><ref name=\"...\"/></nowiki></code> wäd oafter benutsed as Bouksteeuwen deer sunt. N Administrator mout <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> uum wiedere Bouksteeuwen/Teekene ferfulständigje.",
- "cite_error_references_no_text": "Uungultigen <code>&lt;ref&gt;</code>-Tag; der wuude naan Text foar dät Ref mäd dän Noome <code>$1</code> anroat.",
- "cite_error_included_ref": "Der failt n sluutend <code>&lt;/ref&gt;</code>",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code>-Tags existierje, daach neen <code>&lt;references/&gt;</code>-Tag wuud fuunen.",
- "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-Tags existierje foar ju Gruppe „$1“, man neen deertou heerend <code>&lt;references group=„$1“/&gt;</code>-Tag wuud fuunen",
- "cite_error_references_group_mismatch": "Dät <code>&lt;ref&gt;</code>-Tag in <code>&lt;references&gt;</code> häd dät Konfliktgruppenattribut „$1“.",
- "cite_error_references_missing_group": "Dät <code>&lt;ref&gt;</code> Tag, as definierd in <code>&lt;references&gt;</code> häd dät Gruppenattribut \"$1\", dät nit in dän foaruutgungende Text foarkumt.",
- "cite_error_references_missing_key": "Dät in <code>&lt;references&gt;</code> definierde <code>&lt;ref&gt;</code>-Tag mäd dän Noome „$1“ wäd in dän foaruutgungende Text nit ferwoand.",
- "cite_error_references_no_key": "Dät in <code>&lt;references&gt;</code> definierde <code>&lt;ref&gt;</code>-Tag häd neen Noomensattribut.",
- "cite_error_empty_references_define": "Dät in <code>&lt;references&gt;</code> definierde <code>&lt;ref&gt;</code>-Tag mäd dän Noome „$1“ wiest naan Inhoold ap."
-}
diff --git a/extensions/Cite/i18n/core/ta.json b/extensions/Cite/i18n/core/ta.json
deleted file mode 100644
index fa674a28..00000000
--- a/extensions/Cite/i18n/core/ta.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Jayarathina",
- "Shanmugamp7",
- "செல்வா"
- ]
- },
- "cite-desc": "சேர்க்கிறது <nowiki><ref[ name=id]></nowiki>மற்றும் <nowiki><references/></nowiki> குறிச்சொற்கள், மேற்கோள்களுக்காக",
- "cite_error": "பிழை காட்டு: $1",
- "cite_error_references_no_text": "செல்லாத <code>&lt;ref&gt;</code> குறிச்சொல்;\n<code>$1</code> என்னும் பெயரில் உள்ள ref குறிச்சொல்லுக்கு உரையேதும் வழங்கப்படவில்லை",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> குறிச்சொல் உள்ளது, ஆனால் <code>&lt;references/&gt;</code> குறிச்சொல் காணப்படவில்லை"
-}
diff --git a/extensions/Cite/i18n/core/tk.json b/extensions/Cite/i18n/core/tk.json
deleted file mode 100644
index 40e7122e..00000000
--- a/extensions/Cite/i18n/core/tk.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Hanberke"
- ]
- },
- "cite_error": "Sitirleme säwligi: $1",
- "cite_error_ref_numeric_key": "Nädogry <code>&lt;ref&gt;</code> tegi;\nat ýönekeý bir bitin san bolup bilmeýär. Düşündirişli at ulanyň",
- "cite_error_ref_no_key": "Nädogry <code>&lt;ref&gt;</code> tegi;\nmazmunsyz refleriň ady bolmaly",
- "cite_error_ref_too_many_keys": "Nädogry <code>&lt;ref&gt;</code> tegi;\nnädogry atlar, mes. aşa köp",
- "cite_error_ref_no_input": "Nädogry <code>&lt;ref&gt;</code> tegi;\natsyz refleriň mazmuny bolmalydyr",
- "cite_error_references_invalid_parameters": "Nädogry <code>&lt;ref&gt;</code> tegi;\nhiç hili parametre rugsat berilmeýär.\n<code>&lt;references /&gt;</code> ulanyň",
- "cite_error_references_no_text": "Nädogry <code>&lt;ref&gt;</code> tegi;\n<code>$1</code> atly refler üçin tekst görkezilmändir",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> tegi üçin <code>&lt;/ref&gt;</code> ýapylyşy kem",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> tegleri bar, emma <code>&lt;references/&gt;</code> tegi tapylmady",
- "cite_error_group_refs_without_references": "\"$1\" atly topar üçin <code>&lt;ref&gt;</code> tegleri bar, emma degişli code>&lt;references group=\"$1\"/&gt;</code> tegi tapylmady",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>-daky <code>&lt;ref&gt;</code> teginiň çaknyşýan \"$1\" topar aýratynlygy bar.",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code>-da kesgitlenen <code>&lt;ref&gt;</code> teginiň öňki tekstde ýok \"$1\" topar aýratynlygy bar.",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code>-da kesgitlenen \"$1\" atly <code>&lt;ref&gt;</code> tegi öňki tekstde ulanylmaýar.",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code>-da kesgitlenen <code>&lt;ref&gt;</code> teginiň hiç hili at aýratynlygy ýok.",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code>-da kesgitlenen \"$1\" atly <code>&lt;ref&gt;</code> tegiň mazmuny ýok."
-}
diff --git a/extensions/Cite/i18n/core/tl.json b/extensions/Cite/i18n/core/tl.json
deleted file mode 100644
index 6841a365..00000000
--- a/extensions/Cite/i18n/core/tl.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "AnakngAraw"
- ]
- },
- "cite-desc": "Nagdaragdag ng mga tatak na <nowiki><ref[ name=id]></nowiki> at <nowiki><references/></nowiki>, para sa mga pagtukoy",
- "cite_error": "Kamalian sa pagtukoy: $1",
- "cite_error_ref_numeric_key": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nhindi maaaring isang payak na buumbilang (''integer'') ang pangalan. Gumamit ng isang mapaglarawang pamagat",
- "cite_error_ref_no_key": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nkinakailangan may isang pangalan ang mga sangguniang (''ref'') walang nilalaman",
- "cite_error_ref_too_many_keys": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nhindi tanggap na mga pangalan, ang ibig sabihin ay napakarami",
- "cite_error_ref_no_input": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nkinakailangang may nilalaman ang mga sangguniang (''ref'') walang pangalan",
- "cite_error_references_invalid_parameters": "Hindi tanggap na <code>&lt;references&gt;</code>;\nwalang pinapahintulutang mga parametro.\nGamitin ang <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Hindi tanggap ang tatak na <code>&lt;references&gt;</code>;\nPinapahintulutan lamang ang parametrong \"pangkat\" (''group'').\nGamitin ang <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Naubusan ng pasadyang mga tatak na pantukoy ng panlikod na kawing.\nDagdagan pa ng pakahulugan sa loob ng mensaheng <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Naubusan ng mga tatak ng pasadyang kawing para sa pangkat na \"$1\".\nMagbigay ng marami pang kahulugan sa loob ng mensaheng <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nwalang tekstong ibinigay para sa mga sangguniang (''ref'') pinangalanang <code>$1</code>",
- "cite_error_included_ref": "Naawawala ang pansarang <code>&lt;/ref&gt;</code> na para sa tatak na <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Umiiral na ang mga tatak na <code>&lt;ref&gt;</code>, subalit walang natagpuang tatak na <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Umiiral na ang tatak na <code>&lt;ref&gt;</code> para sa pangkat na pinangalanang \"$1\", subalit walang natagpuang katumbas na tatak na <code>&lt;references group=\"$1\"/&gt;</code>",
- "cite_error_references_group_mismatch": "May hindi nagbabanggaang katangiang pampangkat na \"$1\" ang <code>&lt;ref&gt;</code> tatak na nasa <code>&lt;references&gt;</code>.",
- "cite_error_references_missing_group": "Ang tatak na <code>&lt;ref&gt;</code> na binigyang kahulugan sa <code>&lt;references&gt;</code> ay may katangiang pampangkat na \"$1\" na hindi lumilitawa sa naunang teksto.",
- "cite_error_references_missing_key": "Ang tatak na <code>&lt;ref&gt;</code> na may pangalang \"$1\" na binigyang kahulugan sa <code>&lt;references&gt;</code> ay hindi ginamit sa naunang teksto.",
- "cite_error_references_no_key": "Ang tatak na <code>&lt;ref&gt;</code> na binigyang kahulugan sa <code>&lt;references&gt;</code> ay walang katangiang pampangalan.",
- "cite_error_empty_references_define": "Ang tatak na <code>&lt;ref&gt;</code> na binigyang kahulugan sa <code>&lt;references&gt;</code> na may pangalang \"$1\" ay walang nilalaman.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "cite_ref-",
- "cite_reference_link_suffix": "",
- "cite_references_link_prefix": "cite_note-",
- "cite_references_link_suffix": "",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
- "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
- "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
- "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;"
-}
diff --git a/extensions/Cite/i18n/core/tr.json b/extensions/Cite/i18n/core/tr.json
deleted file mode 100644
index e6b32b14..00000000
--- a/extensions/Cite/i18n/core/tr.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Erdemaslancan",
- "Joseph",
- "Runningfridgesrule"
- ]
- },
- "cite-desc": "Alıntılar için, <nowiki><ref[ name=id]></nowiki> ve <nowiki><references/></nowiki> etiketlerini ekler",
- "cite_error": "Kaynak hatası $1",
- "cite_error_ref_numeric_key": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\nisim basit bir tamsayı olamaz. Tanımlayıcı bir başlık kullanın",
- "cite_error_ref_no_key": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\niçeriksiz reflerin bir ismi olmalı",
- "cite_error_ref_too_many_keys": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\ngeçersiz isimler, ör. çok fazla",
- "cite_error_ref_no_input": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\nisimsiz reflerin içeriği olmalı",
- "cite_error_references_invalid_parameters": "Geçersiz <code>&lt;references&gt;</code> etiketi;\nparametrelere izin verilmiyor.\n<code>&lt;references /&gt;</code> kullanın",
- "cite_error_references_invalid_parameters_group": "Geçersiz <code>&lt;references&gt;</code> etiketi;\nsadece \"group\" parametresine izin verilir.\n<code>&lt;references /&gt;</code>, ya da <code>&lt;references group=\"...\" /&gt;</code> kullanın",
- "cite_error_references_no_backlink_label": "Özel geribağlantı etiketleri kalmadı.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> mesajında daha fazla tanımlayın",
- "cite_error_no_link_label_group": "\"$1\" grubu için özel bağlantı etiketleri bitti.\n<nowiki>[[MediaWiki:$2]]</nowiki> mesajında daha fazla tanımlayın.",
- "cite_error_references_no_text": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\n<code>$1</code> isimli refler için metin temin edilmemiş",
- "cite_error_included_ref": "<code>&lt;ref&gt;</code> etiketi için <code>&lt;/ref&gt;</code> kapanışı eksik",
- "cite_error_refs_without_references": "<code>&lt;ref&gt;</code> etiketleri var, ama <code>&lt;references/&gt;</code> etiketi bulunamadı",
- "cite_error_group_refs_without_references": "\"$1\" isimli grup için <code>&lt;ref&gt;</code> etiketleri mevcut, ancak karşılık gelen <code>&lt;references group=\"$1\"/&gt;</code> etiketi bulunamadı",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>'daki <code>&lt;ref&gt;</code> etiketinin çelişen \"$1\" grup özniteliği var.",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code>'da tanımlanan <code>&lt;ref&gt;</code> etiketinin önceki metinde olmayan \"$1\" grup özniteliği var.",
- "cite_error_references_missing_key": "<code>&lt;references&gt;</code>'da tanımlanan \"$1\" adındaki <code>&lt;ref&gt;</code> etiketi önceki metinde kullanılmıyor.",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code>'da tanımlanan <code>&lt;ref&gt;</code> etiketinin hiçbir ad özniteliği yok.",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code>'da tanımlanan \"$1\" adlı <code>&lt;ref&gt;</code> etiketinin içeriği yok.",
- "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
- "cite_references_link_accessibility_label": "Yukarı git",
- "cite_references_link_many_accessibility_label": "Şuraya git:"
-}
diff --git a/extensions/Cite/i18n/core/uk.json b/extensions/Cite/i18n/core/uk.json
deleted file mode 100644
index f1c9bf3b..00000000
--- a/extensions/Cite/i18n/core/uk.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "AS",
- "Ahonc",
- "Andriykopanytsia",
- "Dim Grits",
- "DixonD",
- "NickK",
- "Prima klasy4na",
- "Ytsukeng Fyvaprol",
- "Ата"
- ]
- },
- "cite-desc": "Додає теги <nowiki><ref[ name=id]></nowiki> і <nowiki><references/></nowiki> для виносок",
- "cite_error": "Помилка цитування: $1",
- "cite_error_ref_numeric_key": "Неправильний виклик <code>&lt;ref&gt;</code>:\nназва не може містити тільки цифри.",
- "cite_error_ref_no_key": "Неправильний виклик <code>&lt;ref&gt;</code>:\nпорожній тег <code>ref</code> повинен мати параметр name.",
- "cite_error_ref_too_many_keys": "Неправильний виклик <code>&lt;ref&gt;</code>:\nвказані неправильні значення <code>name</code> або вказано забагато параметрів",
- "cite_error_ref_no_input": "Неправильний виклик <code>&lt;ref&gt;</code>:\nтег <code>ref</code> без назви повинен мати вхідні дані",
- "cite_error_references_invalid_parameters": "Неправильний тег <code>&lt;references&gt;</code>:\nпараметри не передбачені. Використовуйте <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Помилковий тег <code>&lt;references&gt;</code>;\nможна використовувати тільки параметр «group».\nВикористовуйте <code>&lt;references /&gt;</code> або <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Недостатньо символів для зворотних гіперпосилань.\nПотрібно розширити системну змінну <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Закінчилися позначки користувальницьких посилань для групи \"$1\".\nВизначте додаткові в повідомленні <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Неправильний виклик <code>&lt;ref&gt;</code>:\nдля виносок <code>$1</code> не вказаний текст",
- "cite_error_included_ref": "Відсутній тег <code>&lt;/ref&gt;</code> за наявності тега <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "<span style='color: red'>Для наявного тегу <code>&lt;ref&gt;</code> не знайдено відповідного тегу <code>&lt;references/&gt;</code></span>",
- "cite_error_group_refs_without_references": "Теги <code>&lt;ref&gt;</code> існують для групи під назвою «$1», але не знайдено відповідного тегу <code>&lt;references group=\"$1\"/&gt;</code>, або ж бракує закриваючого <code>&lt;/ref&gt;</code>",
- "cite_error_references_group_mismatch": "Тег <code>&lt;ref&gt;</code> в <code>&lt;references&gt;</code> має конфліктуючий атрибут групи \"$1\".",
- "cite_error_references_missing_group": "Тег <code>&lt;ref&gt;</code>, заданий в <code>&lt;references&gt;</code>, має атрибут групи \"$1\", який не фігурує в попередньому тексті.",
- "cite_error_references_missing_key": "Тег <code>&lt;ref&gt;</code> з назвою \"$1\", визначений у <code>&lt;references&gt;</code>, не використовується в попередньому тексті.",
- "cite_error_references_no_key": "Тег <code>&lt;ref&gt;</code>, визначений у <code>&lt;references&gt;</code>, не має атрибута назви.",
- "cite_error_empty_references_define": "Тег <code>&lt;ref&gt;</code>, визначений у <code>&lt;references&gt;</code>, з назвою \"$1\" не має змісту.",
- "cite_reference_link_key_with_num": "$1_$2",
- "cite_reference_link_prefix": "cite_ref-",
- "cite_references_link_prefix": "cite_note-",
- "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
- "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
- "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
- "cite_references_link_many_format_backlink_labels": "а б в г д е ж и к л м н п р с т у ф х ц ш щ ю я аа аб ав аг ад ае аж аи ак ал ам ан ап ар ас ат ау аф ах ац аш ащ аю ая ба бб бв бг бд бе бж би бк бл бм бн бп бр бс бт бу бф бх бц бш бщ бю бя ва вб вв вг вд ве вж ви вк вл вм вн вп вр вс вт ву вф вх вц вш вщ вю вя га гб гв гг гд ге гж ги гк гл гм гн гп гр гс гт гу гф гх гц гш гщ гю гя да дб дв дг дд де дж ди дк дл дм дн дп др дс дт ду дф дх дц дш дщ дю дя еа еб ев ег ед ее еж еи ек ел ем ен еп ер ес ет еу еф ех ец еш ещ ею ея жа жб жв жг жд же жж жи жк жл жм жн жп жр жс жт жу жф жх жц жш жщ жю жя иа иб ив иг ид ие иж ии ик ил им ин ип ир ис ит иу иф их иц иш ищ ию ия ка кб кв кг кд ке кж ки кк кл км кн кп кр кс кт ку кф кх кц кш кщ кю кя ла лб лв лг лд ле лж ли лк лл лм лн лп лр лс лт лу лф лх лц лш лщ лю ля ма мб мв мг мд ме мж ми мк мл мм мн мп мр мс мт му мф мх мц мш мщ мю мя на нб нв нг нд не нж ни нк нл нм нн нп нр нс нт ну нф нх нц нш нщ ню ня па пб пв пг пд пе пж пи пк пл пм пн пп пр пс пт пу пф пх пц пш пщ пю пя ра рб рв рг рд ре рж ри рк рл рм рн рп рр рс рт ру рф рх рц рш рщ рю ря са сб св сг сд се сж си ск сл см сн сп ср сс ст су сф сх сц сш сщ сю ся та тб тв тг тд те тж ти тк тл тм тн тп тр тс тт ту тф тх тц тш тщ тю тя уа уб ув уг уд уе уж уи ук ул ум ун уп ур ус ут уу уф ух уц уш ущ ую уя фа фб фв фг фд фе фж фи фк фл фм фн фп фр фс фт фу фф фх фц фш фщ фю фя ха хб хв хг хд хе хж хи хк хл хм хн хп хр хс хт ху хф хх хц хш хщ хю хя ца цб цв цг цд це цж ци цк цл цм цн цп цр цс цт цу цф цх цц цш цщ цю ця ша шб шв шг шд ше шж ши шк шл шм шн шп шр шс шт шу шф шх шц шш шщ шю шя ща щб щв щг щд ще щж щи щк щл щм щн щп щр щс щт щу щф щх щц щш щщ щю щя юа юб юв юг юд юе юж юи юк юл юм юн юп юр юс ют юу юф юх юц юш ющ юю юя яа яб яв яг яд яе яж яи як ял ям ян яп яр яс ят яу яф ях яц яш ящ яю яя",
- "cite_references_link_many_sep": "&#32;",
- "cite_references_link_many_and": "&#32;",
- "cite_references_link_accessibility_label": "Вгору",
- "cite_references_link_many_accessibility_label": "Перейти до:"
-}
diff --git a/extensions/Cite/i18n/core/vec.json b/extensions/Cite/i18n/core/vec.json
deleted file mode 100644
index f6672abb..00000000
--- a/extensions/Cite/i18n/core/vec.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Candalua"
- ]
- },
- "cite-desc": "Zonta i tag <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> par gestir le citazion",
- "cite_error": "Eror ne la funsion Cite $1",
- "cite_error_ref_numeric_key": "Eror ne l'uso del marcator <code>&lt;ref&gt;</code>: el nome no'l pode mìa èssar un nùmaro intiero. Dòpara un titolo esteso",
- "cite_error_ref_no_key": "Eror ne l'uso del marcator <code>&lt;ref&gt;</code>: i ref vodi no i pol no verghe un nome",
- "cite_error_ref_too_many_keys": "Eror ne l'uso del marcator <code>&lt;ref&gt;</code>: nomi mìa validi (ad es. nùmaro massa elevà)",
- "cite_error_ref_no_input": "Eror ne l'uso del marcator <code>&lt;ref&gt;</code>: i ref che no gà un nome no i pol mìa èssar vodi",
- "cite_error_references_invalid_parameters": "Eror ne l'uso del marcator <code>&lt;references&gt;</code>: parametri mìa consentìi, dòpara el marcator <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> mìa valido;\nsolo el parametro \"group\" el xe permesso.\nDòpara <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Etichete de rimando personalizàe esaurìe, auménteghen el nùmaro nel messagio <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Etichete esaurìe par colegamenti personalizà del grupo \"$1\", aumentarne el numaro nel messajo <nowiki>[[MediaWiki:$2]]</nowiki>",
- "cite_error_references_no_text": "Marcator <code>&lt;ref&gt;</code> mìa valido; no xe stà indicà nissun testo par el marcator <code>$1</code>",
- "cite_error_included_ref": "<code>&lt;/ref&gt;</code> de chiusura mancante par el marcador <code>&lt;ref&gt;</code>",
- "cite_error_refs_without_references": "Ghe xe un tag <code>&lt;ref&gt;</code>, ma no xe stà catà nissun tag <code>&lt;references/&gt;</code>",
- "cite_error_group_refs_without_references": "Ghe xe un tag <code>&lt;ref&gt;</code> par un grupo che se ciama \"$1\", ma no xe stà catà nissun tag <code>&lt;references group=\"$1\"/&gt;</code> che corisponda.",
- "cite_error_references_group_mismatch": "El tag <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> el gà l'atributo de grupo \"$1\" in conflito.",
- "cite_error_references_missing_group": "El tag <code>&lt;ref&gt;</code> definìo in <code>&lt;references&gt;</code> el gà un atributo de grupo \"$1\" che no conpare mia nel testo precedente.",
- "cite_error_references_missing_key": "El tag <code>&lt;ref&gt;</code> con nome \"$1\" definìo in <code>&lt;references&gt;</code> no'l xe doparà nel testo precedente.",
- "cite_error_references_no_key": "El tag <code>&lt;ref&gt;</code> definìo in <code>&lt;references&gt;</code> no'l gà un atributo nome.",
- "cite_error_empty_references_define": "El tag <code>&lt;ref&gt;</code> definìo in <code>&lt;references&gt;</code> con nome \"$1\" no'l gà nissun contenuto."
-}
diff --git a/extensions/Cite/i18n/core/vi.json b/extensions/Cite/i18n/core/vi.json
deleted file mode 100644
index 132a7cee..00000000
--- a/extensions/Cite/i18n/core/vi.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Minh Nguyen",
- "Vinhtantran"
- ]
- },
- "cite-desc": "Thêm các thẻ <nowiki><ref[ name=id]></nowiki> và <nowiki><references/></nowiki> để ghi chú thích hoặc nguồn tham khảo",
- "cite_error": "Lỗi chú thích: $1",
- "cite_error_ref_numeric_key": "Thẻ <code>&lt;ref&gt;</code> sai; tên không thể chỉ là số nguyên, hãy dùng tựa đề có tính miêu tả",
- "cite_error_ref_no_key": "Thẻ <code>&lt;ref&gt;</code> sai; thẻ ref không có nội dung thì phải có tên",
- "cite_error_ref_too_many_keys": "Thẻ <code>&lt;ref&gt;</code> sai; thông số tên sai, như, nhiều thông số tên quá",
- "cite_error_ref_no_input": "Mã <code>&lt;ref&gt;</code> sai; thẻ ref không có tên thì phải có nội dung",
- "cite_error_references_invalid_parameters": "Thẻ <code>&lt;references&gt;</code> sai; không được có thông số, hãy dùng <code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "Thẻ <code>&lt;references&gt;</code> không hợp lệ;\nchỉ cho phép tham số “group”.\nHãy dùng <code>&lt;references /&gt;</code>, hoặc <code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "Đã dùng hết nhãn tham khảo chung.\nHãy định nghĩa thêm ở thông điệp <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
- "cite_error_no_link_label_group": "Thiếu nhãn liên kết tùy biến cho nhóm “$1”. Hãy định rõ thêm nhãn trong thông điệp <nowiki>[[MediaWiki:$2]]</nowiki>.",
- "cite_error_references_no_text": "Thẻ <code>&lt;ref&gt;</code> sai; không có nội dung trong thẻ ref có tên <code>$1</code>",
- "cite_error_included_ref": "Không có <code>&lt;/ref&gt;</code> để đóng thẻ <code>&lt;ref&gt;</code>",
- "cite_error_group_refs_without_references": "Đã tìm thấy thẻ <code>&lt;ref&gt;</code> với tên nhóm “$1”, nhưng không tìm thấy thẻ tương ứng <code>&lt;references group=\"$1\"/&gt;</code> tương ứng, hoặc thẻ đóng <code>&lt;/ref&gt;</code> bị thiếu",
- "cite_error_references_group_mismatch": "Thẻ <code>&lt;ref&gt;</code> trong <code>&lt;references&gt;</code> có thuộc tính nhóm mâu thuẫn “$1”.",
- "cite_error_references_missing_group": "Thẻ <code>&lt;ref&gt;</code> được định nghĩa trong <code>&lt;references&gt;</code> có thuộc tính nhóm “$1” không thấy xuất hiện trong văn bản phía trên.",
- "cite_error_references_missing_key": "Thẻ <code>&lt;ref&gt;</code> có tên “$1” được định nghĩa trong <code>&lt;references&gt;</code> không được đoạn văn bản trên sử dụng.",
- "cite_error_references_no_key": " Thẻ <code>&lt;ref&gt;</code> được định nghĩa trong <code>&lt;references&gt;</code> không có thuộc tính name.",
- "cite_error_empty_references_define": "Thẻ <code>&lt;ref&gt;</code> được định nghĩa trong <code>&lt;references&gt;</code> có tên “$1” không có nội dung.",
- "cite_references_link_many_format_backlink_labels": "a ă â b c d đ e ê g h i k l m n o ô ơ p q r s t u ư v x y\naa aă aâ ab ac ad ađ ae aê ag ah ai ak al am an ao aô aơ ap aq ar as at au aư av ax ay\năa ăă ăâ ăb ăc ăd ăđ ăe ăê ăg ăh ăi ăk ăl ăm ăn ăo ăô ăơ ăp ăq ăr ăs ăt ău ăư ăv ăx ăy\nâa âă ââ âb âc âd âđ âe âê âg âh âi âk âl âm ân âo âô âơ âp âq âr âs ât âu âư âv âx ây\nba bă bâ bb bc bd bđ be bê bg bh bi bk bl bm bn bo bô bơ bp bq br bs bt bu bư bv bx by\nca că câ cb cc cd cđ ce cê cg ch ci ck cl cm cn co cô cơ cp cq cr cs ct cu cư cv cx cy\nda dă dâ db dc dd dđ de dê dg dh di dk dl dm dn do dô dơ dp dq dr ds dt du dư dv dx dy\nđa đă đâ đb đc đd đđ đe đê đg đh đi đk đl đm đn đo đô đơ đp đq đr đs đt đu đư đv đx đy\nea eă eâ eb ec ed eđ ee eê eg eh ei ek el em en eo eô eơ ep eq er es et eu eư ev ex ey\nêa êă êâ êb êc êd êđ êe êê êg êh êi êk êl êm ên êo êô êơ êp êq êr ês êt êu êư êv êx êy\nga gă gâ gb gc gd gđ ge gê gg gh gi gk gl gm gn go gô gơ gp gq gr gs gt gu gư gv gx gy\nha hă hâ hb hc hd hđ he hê hg hh hi hk hl hm hn ho hô hơ hp hq hr hs ht hu hư hv hx hy\nia iă iâ ib ic id iđ ie iê ig ih ii ik il im in io iô iơ ip iq ir is it iu iư iv ix iy\nka kă kâ kb kc kd kđ ke kê kg kh ki kk kl km kn ko kô kơ kp kq kr ks kt ku kư kv kx ky\nla lă lâ lb lc ld lđ le lê lg lh li lk ll lm ln lo lô lơ lp lq lr ls lt lu lư lv lx ly\nma mă mâ mb mc md mđ me mê mg mh mi mk ml mm mn mo mô mơ mp mq mr ms mt mu mư mv mx my\nna nă nâ nb nc nd nđ ne nê ng nh ni nk nl nm nn no nô nơ np nq nr ns nt nu nư nv nx ny\noa oă oâ ob oc od ođ oe oê og oh oi ok ol om on oo oô oơ op oq or os ot ou oư ov ox oy\nôa ôă ôâ ôb ôc ôd ôđ ôe ôê ôg ôh ôi ôk ôl ôm ôn ôo ôô ôơ ôp ôq ôr ôs ôt ôu ôư ôv ôx ôy\nơa ơă ơâ ơb ơc ơd ơđ ơe ơê ơg ơh ơi ơk ơl ơm ơn ơo ơô ơơ ơp ơq ơr ơs ơt ơu ơư ơv ơx ơy\npa pă pâ pb pc pd pđ pe pê pg ph pi pk pl pm pn po pô pơ pp pq pr ps pt pu pư pv px py\nqa qă qâ qb qc qd qđ qe qê qg qh qi qk ql qm qn qo qô qơ qp qq qr qs qt qu qư qv qx qy\nra ră râ rb rc rd rđ re rê rg rh ri rk rl rm rn ro rô rơ rp rq rr rs rt ru rư rv rx ry\nsa să sâ sb sc sd sđ se sê sg sh si sk sl sm sn so sô sơ sp sq sr ss st su sư sv sx sy\nta tă tâ tb tc td tđ te tê tg th ti tk tl tm tn to tô tơ tp tq tr ts tt tu tư tv tx ty\nua uă uâ ub uc ud uđ ue uê ug uh ui uk ul um un uo uô uơ up uq ur us ut uu uư uv ux uy\nưa ưă ưâ ưb ưc ưd ưđ ưe ưê ưg ưh ưi ưk ưl ưm ưn ưo ưô ươ ưp ưq ưr ưs ưt ưu ưư ưv ưx ưy\nva vă vâ vb vc vd vđ ve vê vg vh vi vk vl vm vn vo vô vơ vp vq vr vs vt vu vư vv vx vy\nxa xă xâ xb xc xd xđ xe xê xg xh xi xk xl xm xn xo xô xơ xp xq xr xs xt xu xư xv xx xy\nya yă yâ yb yc yd yđ ye yê yg yh yi yk yl ym yn yo yô yơ yp yq yr ys yt yu yư yv yx yy",
- "cite_references_link_accessibility_label": "Nhảy lên",
- "cite_references_link_many_accessibility_label": "Nhảy lên tới:",
- "cite_error_refs_without_references_category-desc": "Trang này định rõ các thẻ <code><nowiki><ref></nowiki></code> không có nhóm cụ thể, nhưng trang không có thẻ <code><nowiki><references /></nowiki></code> rõ ràng."
-}
diff --git a/extensions/Cite/i18n/core/zh-hans.json b/extensions/Cite/i18n/core/zh-hans.json
deleted file mode 100644
index 9eeb9227..00000000
--- a/extensions/Cite/i18n/core/zh-hans.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Gaoxuewei",
- "Liangent",
- "PhiLiP",
- "Philip",
- "TianyinLee",
- "Zhuyifei1999",
- "乌拉跨氪",
- "Mywood",
- "Impersonator 1",
- "Liuxinyu970226"
- ]
- },
- "cite-desc": "增加用于引用的<nowiki><ref[ name=id]></nowiki>和<nowiki><references/></nowiki>标签",
- "cite_error": "引用错误:$1",
- "cite_error_ref_numeric_key": "无效<code>&lt;ref&gt;</code>标签;name属性不能是单一的数字,请使用可辨识的标题",
- "cite_error_ref_no_key": "无效<code>&lt;ref&gt;</code>标签;未填内容的引用必须填写name属性",
- "cite_error_ref_too_many_keys": "无效<code>&lt;ref&gt;</code>标签;name属性非法,可能是内容过长",
- "cite_error_ref_no_input": "无效<code>&lt;ref&gt;</code>标签;未填name属性的引用必须填写内容",
- "cite_error_references_invalid_parameters": "无效<code>&lt;references&gt;</code>标签;不允许填写参数,请使用<code>&lt;references /&gt;</code>",
- "cite_error_references_invalid_parameters_group": "无效<code>&lt;references&gt;</code>标签;只允许填写“group”参数,请使用<code>&lt;references /&gt;</code>或<code>&lt;references group=\"...\" /&gt;</code>",
- "cite_error_references_no_backlink_label": "自定义回链标签耗尽,请在<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>中定义更多的标签。",
- "cite_error_no_link_label_group": "组“$1”的自定义链接标签耗尽,请在<nowiki>[[MediaWiki:$2]]</nowiki>中定义更多的标签。",
- "cite_error_references_no_text": "无效<code>&lt;ref&gt;</code>标签;未给name属性为<code>$1</code>的引用提供文字",
- "cite_error_included_ref": "没有找到与<code>&lt;/ref&gt;</code>对应的<code>&lt;ref&gt;</code>标签",
- "cite_error_group_refs_without_references": "组名为“$1”的<code>&lt;ref&gt;</code>标签存在,但没有找到相应的<code>&lt;references group=\"$1\"/&gt;</code>标签,或结尾的<code>&lt;/ref&gt;</code>标签丢失",
- "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>的<code>&lt;ref&gt;</code>标记带有冲突的组(group)属性“$1”。",
- "cite_error_references_missing_group": "<code>&lt;references&gt;</code>中定义的<code>&lt;ref&gt;</code>标记带有未在前文中出现的组(group)属性“$1”。",
- "cite_error_references_missing_key": "在<code>&lt;references&gt;</code>中以“$1”名字定义的<code>&lt;ref&gt;</code>标签没有在先前的文字中使用。",
- "cite_error_references_no_key": "<code>&lt;references&gt;</code>中定义的<code>&lt;ref&gt;</code>没有给出名称(name)属性。",
- "cite_error_empty_references_define": "<code>&lt;references&gt;</code>中定义的<code>&lt;ref&gt;</code>的名称(name)“$1”为空。",
- "cite_references_link_accessibility_label": "跳转",
- "cite_references_link_many_accessibility_label": "跳转至:",
- "cite_error_refs_without_references_category-desc": "页面有未具体定义的<code><nowiki><ref></nowiki></code>组,但它没有明确<code><nowiki><references /></nowiki></code>标签。"
-}
diff --git a/extensions/Cite/i18n/cs.json b/extensions/Cite/i18n/cs.json
new file mode 100644
index 00000000..01b1cb23
--- /dev/null
+++ b/extensions/Cite/i18n/cs.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Danny B.",
+ "Li-sung",
+ "Littledogboy",
+ "Matěj Grabovský",
+ "Mormegil",
+ "Sp5uhe"
+ ]
+ },
+ "cite-desc": "Přidává značky <nowiki><ref[ name=\"id\"]></nowiki> a&nbsp;<nowiki><references /></nowiki> na označení citací",
+ "cite_error": "Chybná citace: $1",
+ "cite_error_ref_numeric_key": "Chyba v tagu <code>&lt;ref&gt;</code>; názvem nesmí být prosté číslo, použijte popisné označení",
+ "cite_error_ref_no_key": "Chyba v tagu <code>&lt;ref&gt;</code>; prázdné citace musí obsahovat název",
+ "cite_error_ref_too_many_keys": "Chyba v tagu <code>&lt;ref&gt;</code>; chybné názvy, např. je jich příliš mnoho",
+ "cite_error_ref_no_input": "Chyba v tagu <code>&lt;ref&gt;</code>; citace bez názvu musí mít vlastní obsah",
+ "cite_error_references_invalid_parameters": "Chyba v tagu <code>&lt;references&gt;</code>; zde není dovolen parametr, použijte <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Neplatná značka <tt>&lt;references&gt;</tt>;\nje povolen pouze parametr „group“.\nPoužijte <tt>&lt;references /&gt;</tt> nebo <tt>&lt;references group=\"...\" /&gt;</tt>.",
+ "cite_error_references_no_backlink_label": "Došla označení zpětných odkazů, přidejte jich několik do zprávy <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Došly definované značky pro skupinu „$1“.\nZvyšte jejich počet ve zprávě <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Chyba v tagu <code>&lt;ref&gt;</code>; citaci označené <code>$1</code> není určen žádný text",
+ "cite_error_included_ref": "Chybí ukončovací <code>&lt;/ref&gt;</code> k&nbsp;tagu <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Nalezena značka <code>&lt;ref&gt;</code> pro skupinu „$1“, ale neexistuje příslušná značka <code>&lt;references group=\"$1\"/&gt;</code> nebo chybí zavírací <code>&lt;/ref&gt;</code>.",
+ "cite_error_references_group_mismatch": "Značka <code>&lt;ref&gt;</code> uvnitř <code>&lt;references&gt;</code> má definovánu jinou skupinu „$1“.",
+ "cite_error_references_missing_group": "Značka <code>&lt;ref&gt;</code> uvnitř <code>&lt;references&gt;</code> používá skupinu „$1“, která se v předchozím textu neobjevuje.",
+ "cite_error_references_missing_key": "Na <code>&lt;ref&gt;</code> se jménem „$1“ definovaný uvnitř <code>&lt;references&gt;</code> nejsou v předchozím textu žádné odkazy.",
+ "cite_error_references_no_key": "U značky <code>&lt;ref&gt;</code> definované uvnitř <code>&lt;references&gt;</code> chybí atribut <code>name</code>.",
+ "cite_error_empty_references_define": "U značky <code>&lt;ref&gt;</code> s názvem „$1“ definované uvnitř <code>&lt;references&gt;</code> chybí obsah.",
+ "cite_references_link_accessibility_label": "Skočit nahoru",
+ "cite_references_link_many_accessibility_label": "Skočit nahoru k:"
+}
diff --git a/extensions/Cite/i18n/core/cu.json b/extensions/Cite/i18n/cu.json
index 7572275d..7572275d 100644
--- a/extensions/Cite/i18n/core/cu.json
+++ b/extensions/Cite/i18n/cu.json
diff --git a/extensions/Cite/i18n/cy.json b/extensions/Cite/i18n/cy.json
new file mode 100644
index 00000000..3bb47b42
--- /dev/null
+++ b/extensions/Cite/i18n/cy.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr",
+ "Xxglennxx"
+ ]
+ },
+ "cite-desc": "Yn ychwanegu tagiau <nowiki><ref[ name=id]></nowiki> a <nowiki><references/></nowiki>, ar gyfer cyfeiriadau",
+ "cite_error": "Gwall cyfeirio: $1",
+ "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> annilys;\nni all enw fod yn rif yn unig. Defnyddiwch deitl disgrifiadol.",
+ "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> annilys;\nrhaid i dagiau ref sydd heb gynnwys iddynt gael enw",
+ "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> annilys;\nenwau annilys; e.e. gormod ohonynt",
+ "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> annilys;\nrhaid i dagiau ref heb enw iddynt gynnwys rhywbeth",
+ "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> annilys;\nni chaniateir paramedrau.\nDefnyddiwch <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> annilys;\ndim ond y paramedr \"group\" a ganiateir.\nDefnyddiwch <code>&lt;references /&gt;</code>, neu <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Dim rhagor o labeli ôl-gyswllt ar gael.\nDiffiniwch ragor ohonynt yn y neges <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Wedi rhedeg allan o labeli dolenni unigryw ar gyfer y grŵp \"$1\".\nGallwch ddiffinio rhagor ohonynt yn y neges <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> annilys;\nni osodwyd unrhyw destun ar gyfer y 'ref' <code>$1</code>",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> clo yn eisiau ar gyfer y tag <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Mae tagiau <code>&lt;ref&gt;</code> yn bresennol ar gyfer y grwp \"$1\", ond ni chafwyd tag <code>&lt;references/&gt;</code>, ynteu roedd <code>&lt;/ref&gt;</code> terfynol yn eisiau.",
+ "cite_error_references_group_mismatch": "Mae gan y tag <code>&lt;ref&gt;</code> oddi mewn i <code>&lt;references&gt;</code> briodoledd grŵp anghyson \"$1\".",
+ "cite_error_references_missing_group": "Mae gan y tag <code>&lt;ref&gt;</code> a ddiffinir yn <code>&lt;references&gt;</code> briodoledd grŵp \"$1\" nag ydyw'n cael ei ddefnyddio yn y testun cynt.",
+ "cite_error_references_missing_key": "Ni ddefnyddir y tag <code>&lt;ref&gt;</code> o'r enw \"$1\", a ddiffinir yn <code>&lt;references&gt;</code>, yn y testun blaenorol.",
+ "cite_error_references_no_key": "Nid oes dim priodoledd o enw gan y tag <code>&lt;ref&gt;</code> a ddiffinir yn <code>&lt;references&gt;</code>",
+ "cite_error_empty_references_define": "Does dim byd yn y tag <code>&lt;ref&gt;</code> a'r enw \"$1\" arno, sydd wedi ei ddiffinio oddi mewn i dagiau <code>&lt;references&gt;</code>.",
+ "cite_references_link_accessibility_label": "Neidio am lan",
+ "cite_references_link_many_accessibility_label": "Neidio lan i:"
+}
diff --git a/extensions/Cite/i18n/da.json b/extensions/Cite/i18n/da.json
new file mode 100644
index 00000000..14bc8231
--- /dev/null
+++ b/extensions/Cite/i18n/da.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Byrial",
+ "Christian List",
+ "Emilkris33",
+ "Morten LJ",
+ "Peter Alberti"
+ ]
+ },
+ "cite-desc": "Tilføjer <nowiki><ref[ name=id]></nowiki> og <nowiki><references/></nowiki>-elementer til referencer.",
+ "cite_error": "Fodnotefejl: $1",
+ "cite_error_ref_numeric_key": "Ugyldigt <code>&lt;ref&gt;</code>-tag; \"name\" kan ikke være et simpelt heltal, brug en beskrivende titel",
+ "cite_error_ref_no_key": "Ugyldigt <code>&lt;ref&gt;</code>-tag: Et <code>&lt;ref&gt;</code>-tag uden indhold skal have et navn",
+ "cite_error_ref_too_many_keys": "Ugyldigt <code>&lt;ref&gt;</code>-tag: Ugyldige navne, fx for mange",
+ "cite_error_ref_no_input": "Ugyldigt <code>&lt;ref&gt;</code>-tag: Et <code>&lt;ref&gt;</code>-tag uden navn skal have indhold",
+ "cite_error_references_invalid_parameters": "Ugyldigt <code>&lt;references&gt;</code>-tag: Parametre er ikke tilladt, brug i stedet <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Ugyldigt <code>&lt;references&gt;</code>-tag; den eneste tilladte parameter er \"group\".\nBrug <code>&lt;references /&gt;</code> eller <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Løb tør for backlink-etiketter.\nDefiner flere i beskeden <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Løb tør for tilpassede linketiketter til gruppen \"$1\".\nDefiner flere i beskeden <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Ugyldigt <code>&lt;ref&gt;</code>-tag: Der er ikke specificeret nogen fodnotetekst til navnet <code>$1</code>",
+ "cite_error_included_ref": "Afsluttende <code>&lt;/ref&gt;</code> mangler for <code>&lt;ref&gt;</code>-tag",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-tags eksisterer for en gruppe betegnet \"$1\", men der blev ikke fundet et tilsvarende <code>&lt;references group=\"$1\"/&gt;</code>-tag, eller et afsluttende <code>&lt;/ref&gt;</code>-tag mangler",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code>-tag inden i <code>&lt;references&gt;</code> har modstridende gruppe-attribut \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code>-tag defineret inden i <code>&lt;references&gt;</code> har gruppe-attributten \"$1\", som ikke anvendes i den ovenstående tekst.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code>-tag med navn \"$1\" defineret inden i <code>&lt;references&gt;</code> anvendes ikke i den ovenstående tekst.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code>-tag defineret inden i <code>&lt;references&gt;</code> har ikke en navne-attribut.",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code>-tag defineret inden i <code>&lt;references&gt;</code> med navnet \"$1\" har ikke noget indhold.",
+ "cite_references_link_accessibility_label": "Hoppe op",
+ "cite_references_link_many_accessibility_label": "Hoppe op til:"
+}
diff --git a/extensions/Cite/i18n/core/de-ch.json b/extensions/Cite/i18n/de-ch.json
index 878b49d1..878b49d1 100644
--- a/extensions/Cite/i18n/core/de-ch.json
+++ b/extensions/Cite/i18n/de-ch.json
diff --git a/extensions/Cite/i18n/core/de-formal.json b/extensions/Cite/i18n/de-formal.json
index b278a3ee..b278a3ee 100644
--- a/extensions/Cite/i18n/core/de-formal.json
+++ b/extensions/Cite/i18n/de-formal.json
diff --git a/extensions/Cite/i18n/de.json b/extensions/Cite/i18n/de.json
new file mode 100644
index 00000000..18b32c29
--- /dev/null
+++ b/extensions/Cite/i18n/de.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kghbln",
+ "Metalhead64",
+ "Purodha",
+ "Raimond Spekking",
+ "The Evil IP address",
+ "Umherirrender",
+ "TMg"
+ ]
+ },
+ "cite-desc": "Ergänzt die Tags <code><nowiki><ref[&nbsp;name=id]></nowiki></code> und <code><nowiki><references&nbsp;/></nowiki></code> für Referenzierungen",
+ "cite_error": "Referenzfehler: $1",
+ "cite_error_ref_numeric_key": "Ungültige Verwendung von <code>&lt;ref&gt;</code>: Der Parameter „name“ darf kein reiner Zahlenwert sein. Benutze einen beschreibenden Namen.",
+ "cite_error_ref_no_key": "Ungültige Verwendung von <code>&lt;ref&gt;</code>: Der Parameter „ref“ ohne Inhalt muss einen Namen haben.",
+ "cite_error_ref_too_many_keys": "Ungültige Verwendung von <code>&lt;ref&gt;</code>: Der Parameter „name“ ist ungültig oder zu lang.",
+ "cite_error_ref_no_input": "Ungültige Verwendung von <code>&lt;ref&gt;</code>: Der Parameter „ref“ ohne Namen muss einen Inhalt haben.",
+ "cite_error_references_invalid_parameters": "Ungültige Verwendung von <code>&lt;references&gt;</code>: Es sind keine Parameter möglich. Verwende ausschließlich <code><nowiki><references /></nowiki></code>.",
+ "cite_error_references_invalid_parameters_group": "Ungültige Verwendung von <code>&lt;references&gt;</code>: Nur der Parameter „group“ ist möglich. Verwende entweder <code>&lt;references /&gt;</code> oder <code>&lt;references group=\"…\" /&gt;</code>.",
+ "cite_error_references_no_backlink_label": "Eine Referenz der Form <code>&lt;ref name=\"…\" /&gt;</code> wird öfter benutzt als Buchstaben vorhanden sind. Ein Administrator muss die Systemnachricht <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> um weitere Buchstaben/Zeichen ergänzen.",
+ "cite_error_no_link_label_group": "Für die Gruppe „$1“ sind keine benutzerdefinierten Linkbezeichnungen mehr verfügbar.\nEin Administrator muss weitere mit der Systemnachricht <nowiki>[[MediaWiki:$2]]</nowiki> festlegen.",
+ "cite_error_references_no_text": "Es ist ein ungültiger <code>&lt;ref&gt;</code>-Tag vorhanden: Für die Referenz namens <code>$1</code> wurde kein Text angegeben.",
+ "cite_error_included_ref": "Für ein <code>&lt;ref&gt;</code>-Tag fehlt ein schließendes <code>&lt;/ref&gt;</code>-Tag.",
+ "cite_error_group_refs_without_references": "Es sind <code>&lt;ref&gt;</code>-Tags für die Gruppe „$1“ vorhanden, jedoch wurde kein dazugehöriges <code>&lt;references group=\"$1\" /&gt;</code>-Tag gefunden oder ein schließendes <code>&lt;/ref&gt;</code> fehlt.",
+ "cite_error_references_group_mismatch": "Das <code>&lt;ref&gt;</code>-Tag in <code>&lt;references&gt;</code> enthält das kollidierende Attribut „$1“.",
+ "cite_error_references_missing_group": "Das in <code>&lt;references&gt;</code> definierte <code>&lt;ref&gt;</code>-Tag hat das Gruppenattribut „$1“, das nicht im vorausgehenden Text verwendet wird.",
+ "cite_error_references_missing_key": "Das in <code>&lt;references&gt;</code> definierte <code>&lt;ref&gt;</code>-Tag mit dem Namen „$1“ wird im vorausgehenden Text nicht verwendet.",
+ "cite_error_references_no_key": "Das in <code>&lt;references&gt;</code> definierte <code>&lt;ref&gt;</code>-Tag hat kein Namensattribut.",
+ "cite_error_empty_references_define": "Das in <code>&lt;references&gt;</code> definierte <code>&lt;ref&gt;</code>-Tag mit dem Namen „$1“ weist keinen Inhalt auf.",
+ "cite_references_link_accessibility_label": "Hochspringen",
+ "cite_references_link_many_accessibility_label": "Hochspringen nach:"
+}
diff --git a/extensions/Cite/i18n/diq.json b/extensions/Cite/i18n/diq.json
new file mode 100644
index 00000000..c8fd9e5a
--- /dev/null
+++ b/extensions/Cite/i18n/diq.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aspar",
+ "Erdemaslancan",
+ "Gorizon",
+ "Xoser"
+ ]
+ },
+ "cite-desc": "Qe çime mucnayîşî, etiketanê <nowiki><ref[ name=id]></nowiki> u <nowiki><references/></nowiki> de keno",
+ "cite_error": "Ğeletê çime mucnayîşî: $1",
+ "cite_error_ref_numeric_key": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nName nieşkeno biyo yew rekam. Çekuyan binuse",
+ "cite_error_ref_no_key": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nEka kontent çini yo, gani yew name biyo",
+ "cite_error_ref_too_many_keys": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nname raşt niyo, e.g. zaf esto",
+ "cite_error_ref_no_input": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nEka name çini yo, gani kontent biyo",
+ "cite_error_references_invalid_parameters": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nparametrayan ra destur çini yo.\n<code>&lt;references /&gt;</code> sero kar bike",
+ "cite_error_references_invalid_parameters_group": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nparametrayan ra destur çini yo.\n<code>&lt;references /&gt;</code> sero kar bike, ya zi <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Linkanê Custom backlinkî hin çini yo.\nZerreyê mesajê <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>î de hewna tasvir bike",
+ "cite_error_no_link_label_group": "Eka etiketinê linkê şexsi ser ena grubi \"$1\" ciniyo.\nZerre mesajê <nowiki>[[MediaWiki:$2]]</nowiki> de zafyer qise bike.",
+ "cite_error_references_no_text": "Etiket <code>&lt;ref&gt;</code> ke raşt niyo;\nqe refs yew nuşte nidayiyo <code>$1</code>",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code>Qandê etiketi <code>&lt;/ref&gt;</code> racnayış kemiyo",
+ "cite_error_group_refs_without_references": "etiketé <code>&lt;ref&gt;</code>i niesto ser grubé $1'i, feqat etiketé <code>&lt;references/&gt;</code>dé \"$1\"/&gt;nidiyo",
+ "cite_error_references_group_mismatch": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de ser grupê \"$1\"î konflikt keno.",
+ "cite_error_references_missing_group": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de tevsir biyo ke ser grupê \"$1\"î ke verni de nieseno.",
+ "cite_error_references_missing_key": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de tevisr biyo ser name \"$1\"î verni de niesto.",
+ "cite_error_references_no_key": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de tevsir biyo name xo çini yo.",
+ "cite_error_empty_references_define": "etiketê <code>&lt;ref&gt;</code>î, zerre <code>&lt;references/&gt;</code> de tevsir biyo \"$1\" kontent xo çini yo.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "sita_ref-",
+ "cite_references_link_prefix": "sita_not-",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
+ "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
+ "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;",
+ "cite_references_link_accessibility_label": "Ser çek",
+ "cite_references_link_many_accessibility_label": "Ser çek:"
+}
diff --git a/extensions/Cite/i18n/dsb.json b/extensions/Cite/i18n/dsb.json
new file mode 100644
index 00000000..cfc66244
--- /dev/null
+++ b/extensions/Cite/i18n/dsb.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "cite-desc": "Pśidawa toflicce <nowiki><ref[ name=id]></nowiki> a <nowiki><references/></nowiki> za pódaśa zrědłow",
+ "cite_error": "Referencna zmólka: $1",
+ "cite_error_ref_numeric_key": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\nmě njamóžo jadnora licba byś. Wužyj wugroniwy titel",
+ "cite_error_ref_no_key": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\n\"ref\" bźez wopśimjeśa musy mě měś",
+ "cite_error_ref_too_many_keys": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\nnjepłaśiwe mjenja, na pś. pśewjele",
+ "cite_error_ref_no_input": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\n\"ref\" bźez mjenja musy wopśimjeśe měś",
+ "cite_error_references_invalid_parameters": "Njepłaśiwa toflicka <code>&lt;references&gt;</code>;\nžedne parametry dowólone.\nWužyj <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Njepłaśiwa toflicka <code>&lt;references&gt;</code>;\njano parameter \"group\" jo dowólony,\nWužyj <code>&lt;references /&gt;</code> abo <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Swójske etikety slědkwótkazow wupócerane.\nDefiněruj dalšne w powěsći <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Žedne swójske wótkazowe etikety za \"$1\" wěcej k dispoziciji.\nDefiněruj dalšne w powěsći <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Njepłaśiwa toflicka <code>&lt;ref&gt;</code>;\nza ref z mjenim <code>$1</code> njejo se tekst pódał",
+ "cite_error_included_ref": "Kóńceca toflicka <code>&lt;/ref&gt;</code> felujo za toflicku <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Toflicki <code>&lt;ref&gt;</code> eksistěruju za kupku z mjenim \"$1\", ale wótpowědujuca toflicka <code>&lt;references group=\"$1\"/&gt;</code> njejo se namakała abo zacynjacy <code>&lt;/ref&gt;</code> felujo",
+ "cite_error_references_group_mismatch": "Toflicka <code>&lt;ref&gt;</code> w <code>&lt;references&gt;</code> jo ze kupkowym atributom \"$1\" w konflikśe.",
+ "cite_error_references_missing_group": "Toflicka <code>&lt;ref&gt;</code>, kótaraž jo w <code>&lt;references&gt;</code> definěrowana, ma kupkowy atribut \"$1\", kótaryž njepokazujo se w pjerwjejšnem teksće.",
+ "cite_error_references_missing_key": "Toflicka <code>&lt;ref&gt;</code> z mjenim \"$1\", kótaraž jo w <code>&lt;references&gt;</code> definěrowana, njewužywa se w pjerwjejšnem teksće.",
+ "cite_error_references_no_key": "Toflicka <code>&lt;ref&gt;</code>, kótaraž jo w <code>&lt;references&gt;</code> definěrowana, njama mjenjowy atribut.",
+ "cite_error_empty_references_define": "Toflicka <code>&lt;ref&gt;</code>, kótaraž jo w <code>&lt;references&gt;</code> z mjenim \"$1\" definěrowana, njama wopśimjeśe.",
+ "cite_references_link_accessibility_label": "Górjej skócyś",
+ "cite_references_link_many_accessibility_label": "Górjej skócys do:"
+}
diff --git a/extensions/Cite/i18n/el.json b/extensions/Cite/i18n/el.json
new file mode 100644
index 00000000..3efc1813
--- /dev/null
+++ b/extensions/Cite/i18n/el.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Consta",
+ "Omnipaedista",
+ "Protnet",
+ "ZaDiak",
+ "Απεργός"
+ ]
+ },
+ "cite-desc": "Προσθέτει τις ετικέτες <nowiki><ref[ όνομα=αναγνωριστικό]></nowiki> και <nowiki><references/></nowiki>, για παραπομπές.",
+ "cite_error": "Σφάλμα παραπομπής: $1",
+ "cite_error_ref_numeric_key": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nτο όνομα δεν μπορεί να είναι απλός ακέραιος. Χρησιμοποιήστε έναν περιγραφικό τίτλο",
+ "cite_error_ref_no_key": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nπαραπομπές χωρίς περιεχόμενο πρέπει να έχουν όνομα",
+ "cite_error_ref_too_many_keys": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nμη έγκυρα ονόματα, π.χ. πάρα πολλά",
+ "cite_error_ref_no_input": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nοι παραπομπές χωρίς όνομα πρέπει να έχουν περιεχόμενο",
+ "cite_error_references_invalid_parameters": "Μη έγκυρη ετικέτα <code>&lt;references&gt;</code>·\nδεν επιτρέπονται παράμετροι.\nΧρησιμοποιήστε <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Μη έγκυρη ετικέτα <code>&lt;references&gt;</code>·\nμόνο η παράμετρος «group» επιτρέπεται.\nΧρησιμοποιείστε <code>&lt;references /&gt;</code>, ή <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Εξαντλήθηκαν οι ειδικές ετικέτες συνδέσμων προς το κείμενο.\nΚαθορισμός περισσότερων στο μήνυμα <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Εξαντλήθηκαν οι ειδικές ετικέτες συνδέσμων για την ομάδα «$1».\nΚαθορισμός περισσότερων στο μήνυμα <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Μη έγκυρη ετικέτα <code>&lt;ref&gt;</code>·\nδεν δίνεται κείμενο για παραπομπές με όνομα <code>$1</code>",
+ "cite_error_included_ref": "Λείπει η ετικέτα κλεισίματος <code>&lt;/ref&gt;</code> για την ετικέτα <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Υπάρχουν ετικέτες <code>&lt;ref&gt;</code> για κάποια ομάδα με το όνομα «$1», αλλά δεν βρέθηκε καμία αντίστοιχη ετικέτα <code>&lt;references group=\"$1\"/&gt;</code>, ή λείπει η ετικέτα κλεισίματος <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "Η ετικέτα <code>&lt;ref&gt;</code> μέσα στο <code>&lt;references&gt;</code> έρχεται σε σύγκρουση με το χαρακτηριστικό ομαδοποίησης «$1».",
+ "cite_error_references_missing_group": "Η ετικέτα <code>&lt;ref&gt;</code> που ορίζεται μέσα στο <code>&lt;references&gt;</code> έχει χαρακτηριστικό ομαδοποίησης «$1» που δεν εμφανίζεται σε προηγούμενο κείμενο.",
+ "cite_error_references_missing_key": "Η ετικέτα <code>&lt;ref&gt;</code> με όνομα «$1» που ορίζεται μέσα στο <code>&lt;references&gt;</code> δεν χρησιμοποιείται σε προηγούμενο κείμενο.",
+ "cite_error_references_no_key": "Η ετικέτα <code>&lt;ref&gt;</code> που ορίζεται μέσα στο <code>&lt;references&gt;</code> δεν έχει χαρακτηριστικό ονόματος.",
+ "cite_error_empty_references_define": "Η ετικέτα <code>&lt;ref&gt;</code> που ορίζεται μέσα στο <code>&lt;references&gt;</code> με όνομα «$1» δεν έχει καθόλου περιεχόμενο.",
+ "cite_references_link_accessibility_label": "Άλμα πάνω",
+ "cite_references_link_many_accessibility_label": "Άλμα πάνω, στο:"
+}
diff --git a/extensions/Cite/i18n/en.json b/extensions/Cite/i18n/en.json
new file mode 100644
index 00000000..5c5ad609
--- /dev/null
+++ b/extensions/Cite/i18n/en.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Siebrand Mazeland",
+ "Robert Rohde",
+ "Tim Starling",
+ "Raimond Spekking",
+ "Alex Zariv",
+ "Federico Leva",
+ "Rotem Liss",
+ "Steve Sanbeg",
+ "Marius Hoch",
+ "Brion Vibber",
+ "Ævar Arnfjörð Bjarmason"
+ ]
+ },
+ "cite-desc": "Adds <nowiki><ref[ name=id]></nowiki> and <nowiki><references/></nowiki> tags, for citations",
+ "cite_error": "Cite error: $1",
+ "cite_error_ref_numeric_key": "Invalid <code>&lt;ref&gt;</code> tag;\nname cannot be a simple integer. Use a descriptive title",
+ "cite_error_ref_no_key": "Invalid <code>&lt;ref&gt;</code> tag;\nrefs with no content must have a name",
+ "cite_error_ref_too_many_keys": "Invalid <code>&lt;ref&gt;</code> tag;\ninvalid names, e.g. too many",
+ "cite_error_ref_no_input": "Invalid <code>&lt;ref&gt;</code> tag;\nrefs with no name must have content",
+ "cite_error_references_invalid_parameters": "Invalid <code>&lt;references&gt;</code> tag;\nno parameters are allowed.\nUse <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Invalid <code>&lt;references&gt;</code> tag;\nparameter \"group\" is allowed only.\nUse <code>&lt;references /&gt;</code>, or <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Ran out of custom backlink labels.\nDefine more in the <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> message.",
+ "cite_error_no_link_label_group": "Ran out of custom link labels for group \"$1\".\nDefine more in the <nowiki>[[MediaWiki:$2]]</nowiki> message.",
+ "cite_error_references_no_text": "Invalid <code>&lt;ref&gt;</code> tag;\nno text was provided for refs named <code>$1</code>",
+ "cite_error_included_ref": "Closing <code>&lt;/ref&gt;</code> missing for <code>&lt;ref&gt;</code> tag",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> tags exist for a group named \"$1\", but no corresponding <code>&lt;references group=\"$1\"/&gt;</code> tag was found, or a closing <code>&lt;/ref&gt;</code> is missing",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tag in <code>&lt;references&gt;</code> has conflicting group attribute \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tag defined in <code>&lt;references&gt;</code> has group attribute \"$1\" which does not appear in prior text.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> tag with name \"$1\" defined in <code>&lt;references&gt;</code> is not used in prior text.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> tag defined in <code>&lt;references&gt;</code> has no name attribute.",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> tag defined in <code>&lt;references&gt;</code> with name \"$1\" has no content.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "cite_ref-",
+ "cite_reference_link_suffix": "",
+ "cite_references_link_prefix": "cite_note-",
+ "cite_references_link_suffix": "",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_no_link": "<p id=\"$1\">$2</p>",
+ "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
+ "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
+ "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;",
+ "cite_references_link_accessibility_label": "Jump up",
+ "cite_references_link_many_accessibility_label": "Jump up to:",
+ "cite_references_prefix": "<ol class=\"references\">",
+ "cite_references_suffix": "</ol>"
+}
diff --git a/extensions/Cite/i18n/eo.json b/extensions/Cite/i18n/eo.json
new file mode 100644
index 00000000..9a0ce1b6
--- /dev/null
+++ b/extensions/Cite/i18n/eo.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "AVRS",
+ "Malafaya",
+ "Yekrats",
+ "KuboF"
+ ]
+ },
+ "cite-desc": "Aldonas etikedojn <nowiki><ref[ name=id]></nowiki> kaj <nowiki><references/></nowiki> por citaĵoj",
+ "cite_error": "Citaĵa eraro: $1",
+ "cite_error_ref_numeric_key": "Malvalida etikedo <code>&lt;ref&gt;</code>;\nnomo ne povas esti simpla entjero. Uzu priskriban titolon.",
+ "cite_error_ref_no_key": "Malvalida etikedo <code>&lt;ref&gt;</code>;\n''ref'' kun nenia enhava nomo devas havi nomon",
+ "cite_error_ref_too_many_keys": "Malvalida etikedo <code>&lt;ref&gt;</code>;\nmalvalidaj nomoj (ekz-e: tro multaj)",
+ "cite_error_ref_no_input": "Malvalida etikedo <code>&lt;ref&gt;</code>;\nref-etikedoj sen nomo devas havi enhavojn.",
+ "cite_error_references_invalid_parameters": "Nevalida etikedo <code>&lt;references&gt;</code>; neniuj parametroj estas permesitaj, uzu <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Malvalida etikedon <code>&lt;references&gt;</code>;\nparametro \"group\" nur estas permesita.\nUzu etikedon <code>&lt;references /&gt;</code>, aŭ <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Neniom plu memfaritaj retroligaj etikedoj.\nDifinu pliajn en la mesaĝo <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Mankas proprajn ligilajn etikedojn por grupo \"$1\".\nDifinu pliajn en la <nowiki>[[MediaWiki:$2]]</nowiki> mesaĝo.",
+ "cite_error_references_no_text": "Nevalida <code>&lt;ref&gt;</code> etikedo;\nneniu teksto estis donita por ref-oj nomataj <code>$1</code>",
+ "cite_error_included_ref": "Ferma <code>&lt;/ref&gt;</code> mankas por <code>&lt;ref&gt;</code>-etikedo",
+ "cite_error_group_refs_without_references": "Etikedoj <code>&lt;ref&gt;</code> ekzistas por la grupo nomita \"$1\", sed la koresponda etikedo <code>&lt;references group=\"$1\"/&gt;</code> ne estis trovita aŭ la ferma <code>&lt;/ref&gt;</code> mankas.",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> etikedo en <code>&lt;references&gt;</code> havas konflikan grupatributon \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> etikedo difinita en <code>&lt;references&gt;</code> havas grupatributon \"$1\" kiu ne aperas en antaŭa teksto.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> etikedo kun la nomo \"$1\" difinita en <code>&lt;references&gt;</code> ne estas uzata en antaŭa teksto.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> etikedo difinita en <code>&lt;references&gt;</code> ne havas noman atributon.",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> etikedo difinita en <code>&lt;references&gt;</code> kun nomo \"$1\" ne havas enhavon.",
+ "cite_references_link_accessibility_label": "Salti supren",
+ "cite_references_link_many_accessibility_label": "Salti supren al:"
+}
diff --git a/extensions/Cite/i18n/es.json b/extensions/Cite/i18n/es.json
new file mode 100644
index 00000000..214a02e3
--- /dev/null
+++ b/extensions/Cite/i18n/es.json
@@ -0,0 +1,43 @@
+{
+ "@metadata": {
+ "authors": [
+ "Antur",
+ "Baiji",
+ "Ciencia Al Poder",
+ "Crazymadlover",
+ "Drini",
+ "Erdemaslancan",
+ "Fitoschido",
+ "Gustronico",
+ "Ihojose",
+ "Locos epraix",
+ "Manuelt15",
+ "McDutchie",
+ "Muro de Aguas",
+ "Remember the dot",
+ "Sanbec",
+ "Translationista"
+ ]
+ },
+ "cite-desc": "Añade las etiquietas <nowiki><ref[ name=id]> y <references /></nowiki> para utilizar notas al pie.",
+ "cite_error": "Error en la cita: $1",
+ "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> no válida;\nel nombre no puede ser un número entero. Use un título descriptivo",
+ "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> no válida;\nlas referencias sin contenido deben tener un nombre",
+ "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> inválida;\ncontiene parámetros no reconocidos",
+ "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> no válida;\nlas referencias sin nombre deben tener contenido",
+ "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> no válida;\nno se admiten parámetros.\nUse <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> no válida;\nsólo se permite el parámetro «group».\nUse <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Se han acabado las etiquetas personalizadas de vínculos de retroceso.\nDefine más en <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Se han acabado las etiquetas personalizadas para vínculos del grupo \"$1\".\nDefine más en el mensaje <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> inválida;\nno se ha definido el contenido de las referencias llamadas <code>$1</code>",
+ "cite_error_included_ref": "Etiqueta de apertura <code>&lt;ref&gt;</code> sin su correspondiente cierre <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Existen etiquetas <code>&lt;ref&gt;</code> para un grupo llamado «$1», pero no se encontró la etiqueta <code>&lt;references group=\"$1\"/&gt;</code> correspondiente, o falta la etiqueta <code>&lt;/ref&gt;</code> de cierre",
+ "cite_error_references_group_mismatch": "La etiqueta <code>&lt;ref&gt;</code> en <code>&lt;references&gt;</code> presenta el atributo de grupo \"$1\" en conflicto.",
+ "cite_error_references_missing_group": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> pertenece al grupo \"$1\" no declarado en el texto precedente.",
+ "cite_error_references_missing_key": "La etiqueta <code>&lt;ref&gt;</code> con nombre \"$1\" definida en <code>&lt;references&gt;</code> no se utiliza en el texto precedente.",
+ "cite_error_references_no_key": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> no tiene atributo de nombre.",
+ "cite_error_empty_references_define": "La etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> con nombre \"$1\" no tiene contenido.",
+ "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
+ "cite_references_link_accessibility_label": "Volver arriba",
+ "cite_references_link_many_accessibility_label": "Saltar a:"
+}
diff --git a/extensions/Cite/i18n/et.json b/extensions/Cite/i18n/et.json
new file mode 100644
index 00000000..ce60b398
--- /dev/null
+++ b/extensions/Cite/i18n/et.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pikne"
+ ]
+ },
+ "cite-desc": "Lisab viitamiseks sildid <nowiki><ref[ name=id]></nowiki> ja <nowiki><references/></nowiki>.",
+ "cite_error": "Viitamistõrge: $1",
+ "cite_error_ref_numeric_key": "Vigane <code>&lt;ref&gt;</code>-silt.\nNimeparameeter ei tohi olla numbriline. Kasuta kirjeldavat nime.",
+ "cite_error_ref_no_key": "Vigane <code>&lt;ref&gt;</code>-silt.\nSisuta viitamissiltidel peab olema nimi.",
+ "cite_error_ref_too_many_keys": "Vigane <code>&lt;ref&gt;</code>-silt;\n\"name\" on vigane või liiga pikk.",
+ "cite_error_ref_no_input": "Vigane <code>&lt;ref&gt;</code>-silt.\nNimeta viitamissiltidel peab olema sisu.",
+ "cite_error_references_invalid_parameters": "Vigane <code>&lt;references&gt;</code>-silt.\nParameetrid pole lubatud.\nKasuta silti <code>&lt;references /&gt;</code>.",
+ "cite_error_references_invalid_parameters_group": "Vigane <code>&lt;references&gt;</code>-silt.\nLubatud on ainult parameeter \"group\".\nKasuta silti <code>&lt;references /&gt;</code> või <code>&lt;references group=\"...\" /&gt;</code>.",
+ "cite_error_references_no_backlink_label": "Kohandatud tagasilinkide sildid said otsa.\nLisa neid sõnumisse <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Rühma \"$1\" kohandatud linkide sildid said otsa.\nLisa neid sõnumisse <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Vigane <code>&lt;ref&gt;</code>-silt.\nViite nimega <code>$1</code> tekst puudub.",
+ "cite_error_included_ref": "Sulgemissilt <code>&lt;/ref&gt;</code> puudub.",
+ "cite_error_group_refs_without_references": "Olemas on <code>&lt;ref&gt;</code>-silt rühma \"$1\" jaoks, aga puudub vastav silt <code>&lt;references group=\"$1\"/&gt;</code> või lõpusilt <code>&lt;/ref&gt;</code>.",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>-siltide vahel oleval <code>&lt;ref&gt;</code>-sildil on vastukäiv parameetri \"group\" väärtus \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code>-sildis kirjeldatud <code>&lt;ref&gt;</code>-sildil on rühmatunnus \"$1\", mis puudub eelnevas tekstis.",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code>-siltide vahel olevat <code>&lt;ref&gt;</code>-silti nimega \"$1\" ei kasutata eelnevas tekstis.",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code>-siltide vahel määratletud <code>&lt;ref&gt;</code>-sildil puudub ''name''-atribuut.",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code>-siltide vahel oleval <code>&lt;ref&gt;</code>-sildil nimega \"$1\" puudub sisu.",
+ "cite_references_link_accessibility_label": "Siirdu üles",
+ "cite_references_link_many_accessibility_label": "Siirdu üles asukohta:"
+}
diff --git a/extensions/Cite/i18n/core/eu.json b/extensions/Cite/i18n/eu.json
index 8c63be15..8c63be15 100644
--- a/extensions/Cite/i18n/core/eu.json
+++ b/extensions/Cite/i18n/eu.json
diff --git a/extensions/Cite/i18n/fa.json b/extensions/Cite/i18n/fa.json
new file mode 100644
index 00000000..d43b16b8
--- /dev/null
+++ b/extensions/Cite/i18n/fa.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ebraminio",
+ "Huji",
+ "Wayiran",
+ "ZxxZxxZ",
+ "Reza1615"
+ ]
+ },
+ "cite-desc": "برچسب‌های <nowiki><ref[ name=id]></nowiki> و <nowiki><references/></nowiki> را برای یادکرد اضافه می‌کند",
+ "cite_error": "خطای یادکرد: $1",
+ "cite_error_ref_numeric_key": "برچسب <code><ref></code> نامجاز؛ نام نمی‌تواند یک عدد باشد. عنوان واضح‌تری را برگزینید",
+ "cite_error_ref_no_key": "برچسب <code><ref></code> نامجاز؛ یادکردهای بدون محتوا باید نام داشته باشند",
+ "cite_error_ref_too_many_keys": "برچسب <code><ref></code> نامجاز؛ نام‌های نامجاز یا بیش از اندازه",
+ "cite_error_ref_no_input": "برچسب <code><ref></code> نامجاز؛ یادکردهای بدون نام باید محتوا داشته باشند",
+ "cite_error_references_invalid_parameters": "برچسب <code><references></code> نامجاز؛ استفاده از پارامتر مجاز است. از <code><references /></code> استفاده کنید",
+ "cite_error_references_invalid_parameters_group": "برچسب <code>&lt;references&gt;</code> نامجاز؛ تنها پارامتر «group» قابل استفاده است.\nاز <code>&lt;references /&gt;</code> یا <code>&lt;references group=\"...\" /&gt;</code> استفاده کنید",
+ "cite_error_references_no_backlink_label": "برچسب‌های پیوند به انتها رسید.\nموارد جدیدی را در پیغام <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> تعریف کنید",
+ "cite_error_no_link_label_group": "از برچسب‌های پیوند سفارشی برای گروه «$1» خارج شد.\nدر پیغام <nowiki>[[MediaWiki:$2]]</nowiki> بیشتر تعریف کنید.",
+ "cite_error_references_no_text": "برچسب <code><ref></code> نامجاز؛ متنی برای یادکردهای با نام <code>$1</code> وارد نشده‌است",
+ "cite_error_included_ref": "برچسب تمام کنندهٔ <code>&lt;/ref&gt;</code> بدون برچسب <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "برچسب <code>&lt;ref&gt;</code> برای گروهی به نام «$1» وجود دارد، اما برچسب متناظر با <code>&lt;references group=\"$1\"/&gt;</code> یافت نشد یا <code>&lt;/ref&gt;</code> بسته جا گذاشته شده‌است.",
+ "cite_error_references_group_mismatch": "برچسپ <code>&lt;ref&gt;</code> درون <code>&lt;references&gt;</code> در تضاد با ویژگی‌های گروه «$1» است.",
+ "cite_error_references_missing_group": "برچسپ <code>&lt;ref&gt;</code> در <code>&lt;references&gt;</code> تعریف شده، ویژگی‌های گروهی «$1» را دارد که درون متن قبل از آن ظاهر نمی‌شود.",
+ "cite_error_references_missing_key": "پرچسپ <code>&lt;ref&gt;</code> که با نام «$1» درون <code>&lt;references&gt;</code> تعریف شده، در متن قبل از آن استفاده نشده‌است.",
+ "cite_error_references_no_key": "برچسپ <code>&lt;ref&gt;</code> درون <code>&lt;references&gt;</code> صفت نام را ندارد.",
+ "cite_error_empty_references_define": "برچسپ <code>&lt;ref&gt;</code> تعریف شده درون <code>&lt;references&gt;</code> با نام «$1» محتوایی ندارد.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "cite_ref-",
+ "cite_references_link_accessibility_label": "پرش به بالا",
+ "cite_references_link_many_accessibility_label": "پرش به بالا به:"
+}
diff --git a/extensions/Cite/i18n/fi.json b/extensions/Cite/i18n/fi.json
new file mode 100644
index 00000000..5f3560e6
--- /dev/null
+++ b/extensions/Cite/i18n/fi.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Agony",
+ "Crt",
+ "Nike",
+ "Olli",
+ "Silvonen",
+ "Str4nd",
+ "Tarmo",
+ "Syreeni"
+ ]
+ },
+ "cite-desc": "Tarjoaa <nowiki><ref[ name=id]></nowiki>- ja <nowiki><references/></nowiki>-elementit viittauksien tekemiseen.",
+ "cite_error": "Viittausvirhe: $1",
+ "cite_error_ref_numeric_key": "Kelpaamaton <code>&lt;ref&gt;</code>-elementti: nimi ei voi olla numero – käytä kuvaavampaa nimeä.",
+ "cite_error_ref_no_key": "Kelpaamaton <code>&lt;ref&gt;</code>-elementti: sisällöttömille refeille pitää määrittää nimi.",
+ "cite_error_ref_too_many_keys": "Kelpaamaton <code>&lt;ref&gt;</code>-elementti: virheelliset nimet, esim. liian monta",
+ "cite_error_ref_no_input": "Kelpaamaton <code>&lt;ref&gt;</code>-elementti: viitteillä ilman nimiä täytyy olla sisältöä",
+ "cite_error_references_invalid_parameters": "Kelpaamaton <code>&lt;references&gt;</code>-elementti: parametrit eivät ole sallittuja. Käytä muotoa <code>&lt;references /&gt;</code>.",
+ "cite_error_references_invalid_parameters_group": "Kelpaamaton <code>&lt;references&gt;</code>-elementti: vain parametri ”group” on sallittu. Käytä muotoa <code>&lt;references /&gt;</code> tai <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Määritetyt takaisinviittausnimikkeet loppuivat kesken.\nNiitä voi määritellä lisää sivulla <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Mukautettujen linkkikirjainten määrä ryhmälle ”$1” loppui.\nMääritä niitä lisää viestissä <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Virheellinen <code>&lt;ref&gt;</code>-elementti;\nviitettä <code>$1</code> ei löytynyt",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code>-elementin sulkeva <code>&lt;/ref&gt;</code>-elementti puuttuu",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-elementit löytyivät ryhmälle nimeltä ”$1”, mutta vastaavaa <code>&lt;references group=\"$1\"/&gt;</code>-elementtiä ei löytynyt tai sulkeva <code>&lt;/ref&gt;</code> puuttuu",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code>-elementti <code>&lt;references&gt;</code>-elementin sisällä sisältää ristiriitaisen ryhmämääritteen ”$1”.",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code>-elementissä määritetty <code>&lt;ref&gt;</code>-elementti sisältää ryhmämääritteen ”$1”, jota ei mainita aiemmassa tekstissä.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code>-elementin nimeä ”$1”, johon viitataan elementissä <code>&lt;references&gt;</code> ei käytetä edeltävässä tekstissä.",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code>-elementissä määritetyllä <code>&lt;ref&gt;</code>-elementillä ei ole nimimääritettä.",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code>-elementissä määritetyllä <code>&lt;ref&gt;</code>-elementillä nimellä ”$1” ei ole sisältöä."
+}
diff --git a/extensions/Cite/i18n/fo.json b/extensions/Cite/i18n/fo.json
new file mode 100644
index 00000000..bfd3f923
--- /dev/null
+++ b/extensions/Cite/i18n/fo.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "EileenSanda"
+ ]
+ },
+ "cite-desc": "Leggur afturat <nowiki><ref[ name=id]></nowiki> og <nowiki><references/></nowiki> lyklaorð, fyri ávísingar",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> lyklaorð (tags) eru til fyri ein bólk sum eitur \"$1\", men onki tilsvarandi <code>&lt;references group=\"$1\"/&gt;</code> lyklaorð varð funnið, ella manglar ein lukkandi <code>&lt;/ref&gt;</code>"
+}
diff --git a/extensions/Cite/i18n/core/fr.json b/extensions/Cite/i18n/fr.json
index 1323c818..1323c818 100644
--- a/extensions/Cite/i18n/core/fr.json
+++ b/extensions/Cite/i18n/fr.json
diff --git a/extensions/Cite/i18n/frp.json b/extensions/Cite/i18n/frp.json
new file mode 100644
index 00000000..78f031d5
--- /dev/null
+++ b/extensions/Cite/i18n/frp.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe"
+ ]
+ },
+ "cite-desc": "Apond les balises <nowiki><ref[ name=id]></nowiki> et <nowiki><references/></nowiki>, por les citacions.",
+ "cite_error": "Èrror de citacion $1",
+ "cite_error_ref_numeric_key": "Apèl envalido ; cllâf pas entègrâla atendua.",
+ "cite_error_ref_no_key": "Balisa <code>&lt;ref&gt;</code> fôssa ;\nles refèrences sen contegnu dêvont avêr un nom.",
+ "cite_error_ref_too_many_keys": "Apèl envalido ; cllâfs envalides, per ègzemplo, trop de cllâfs spècefiâs ou ben cllâf fôssa.",
+ "cite_error_ref_no_input": "Balisa <code>&lt;ref&gt;</code> fôssa ;\nles refèrences sen nom dêvont avêr un contegnu.",
+ "cite_error_references_invalid_parameters": "Arguments envalidos ; argument atendu.",
+ "cite_error_references_invalid_parameters_group": "Balisa <code>&lt;references&gt;</code> fôssa ;\nsolament lo paramètre « tropa » est ôtorisâ.\nUtilisâd <code>&lt;references /&gt;</code>, ou ben <code>&lt;references group=\"...\" /&gt;</code>.",
+ "cite_error_references_no_backlink_label": "Èpouesement de les ètiquètes de lims pèrsonalisâs.\nDèfenésséd-nen un ples grant nombro dens lo mèssâjo <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Més d’ètiquètes de lims pèrsonalisâs por la tropa « $1 ».\nDèfenésséd-nen més dens lo mèssâjo <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Balisa <code>&lt;ref&gt;</code> fôssa ;\nnion tèxto at étâ balyê por les refèrences apelâs <code>$1</code>.",
+ "cite_error_included_ref": "Cllotura <code>&lt;/ref&gt;</code> manquenta por la balisa <code>&lt;ref&gt;</code>.",
+ "cite_error_group_refs_without_references": "Des balises <code>&lt;ref&gt;</code> ègzistont por una tropa apelâ « $1 », mas niona balisa <code>&lt;references group=\"$1\"/&gt;</code> que corrèspond at étâ trovâ.",
+ "cite_error_references_group_mismatch": "La balisa <code>&lt;ref&gt;</code> dens <code>&lt;references&gt;</code> at l’atribut de tropa « $1 » qu’entre en conflit avouéc celi de <code>&lt;references&gt;</code>.",
+ "cite_error_references_missing_group": "La balisa <code>&lt;ref&gt;</code> dèfenia dens <code>&lt;references&gt;</code> at l’atribut de tropa « $1 » que figure pas dens cél tèxto.",
+ "cite_error_references_missing_key": "La balisa <code>&lt;ref&gt;</code> avouéc lo nom « $1 » dèfenia dens <code>&lt;references&gt;</code> est pas utilisâ dens cél tèxto.",
+ "cite_error_references_no_key": "La balisa <code>&lt;ref&gt;</code> dèfenia dens <code>&lt;references&gt;</code> at gins d’atribut de nom.",
+ "cite_error_empty_references_define": "La balisa <code>&lt;ref&gt;</code> dèfenia dens <code>&lt;references&gt;</code> avouéc lo nom « $1 » at gins de contegnu.",
+ "cite_references_link_many_sep": ",&#32;",
+ "cite_references_link_many_and": "&#32;et&#32;"
+}
diff --git a/extensions/Cite/i18n/frr.json b/extensions/Cite/i18n/frr.json
new file mode 100644
index 00000000..ccb47b4a
--- /dev/null
+++ b/extensions/Cite/i18n/frr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Murma174"
+ ]
+ },
+ "cite_error": "Efterwis-feeler: $1"
+}
diff --git a/extensions/Cite/i18n/core/fur.json b/extensions/Cite/i18n/fur.json
index 51cf526b..51cf526b 100644
--- a/extensions/Cite/i18n/core/fur.json
+++ b/extensions/Cite/i18n/fur.json
diff --git a/extensions/Cite/i18n/fy.json b/extensions/Cite/i18n/fy.json
new file mode 100644
index 00000000..485d7877
--- /dev/null
+++ b/extensions/Cite/i18n/fy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin0van0der0vliet"
+ ]
+ },
+ "cite_error": "Citeflater: $1"
+}
diff --git a/extensions/Cite/i18n/core/gag.json b/extensions/Cite/i18n/gag.json
index b5068080..b5068080 100644
--- a/extensions/Cite/i18n/core/gag.json
+++ b/extensions/Cite/i18n/gag.json
diff --git a/extensions/Cite/i18n/gl.json b/extensions/Cite/i18n/gl.json
new file mode 100644
index 00000000..ed03dfe0
--- /dev/null
+++ b/extensions/Cite/i18n/gl.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alma",
+ "Toliño",
+ "Xosé"
+ ]
+ },
+ "cite-desc": "Engade as etiquetas <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> para as citas",
+ "cite_error": "Erro no código da cita: $1",
+ "cite_error_ref_numeric_key": "Etiqueta <code>&lt;ref&gt;</code> non válida;\no nome non pode ser un simple número enteiro. Use un título descritivo",
+ "cite_error_ref_no_key": "Etiqueta <code>&lt;ref&gt;</code> non válida;\nas referencias que non teñan contido deben ter un nome",
+ "cite_error_ref_too_many_keys": "Etiqueta <code>&lt;ref&gt;</code> non válida;\nnomes non válidos, por exemplo, demasiados",
+ "cite_error_ref_no_input": "Etiqueta <code>&lt;ref&gt;</code> non válida;\nas referencias que non teñan nome, deben ter contido",
+ "cite_error_references_invalid_parameters": "Etiqueta <code>&lt;references&gt;</code> non válida;\nnon están permitidos eses parámetros.\nUse <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Etiqueta <code>&lt;references&gt;</code> non válida;\nsó está permitido o parámetro \"group\" (\"grupo\").\nUse <code>&lt;references /&gt;</code> ou <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "As etiquetas personalizadas esgotáronse.\nDefina máis na mensaxe <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "As etiquetas personalizadas esgotáronse para o grupo \"$1\".\nDefina máis na mensaxe <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Etiqueta <code>&lt;ref&gt;</code> non válida;\nnon se forneceu texto para as referencias de nome <code>$1</code>",
+ "cite_error_included_ref": "Peche a etiqueta <code>&lt;/ref&gt;</code> que lle falta á outra etiqueta <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "As etiquetas <code>&lt;ref&gt;</code> existen para un grupo chamado \"$1\", pero non se atopou a etiqueta <code>&lt;references group=\"$1\"/&gt;</code> correspondente ou falta unha etiqueta <code>&lt;/ref&gt;</code> de peche",
+ "cite_error_references_group_mismatch": "A etiqueta <code>&lt;ref&gt;</code> en <code>&lt;references&gt;</code> ten un atributo de grupo conflitivo \"$1\".",
+ "cite_error_references_missing_group": "A etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> ten un atributo de grupo \"$1\" que non aparece no texto anterior.",
+ "cite_error_references_missing_key": "A etiqueta <code>&lt;ref&gt;</code> co nome \"$1\" definida en <code>&lt;references&gt;</code> non se utiliza no texto anterior.",
+ "cite_error_references_no_key": "A etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> non ten nome de atributo.",
+ "cite_error_empty_references_define": "A etiqueta <code>&lt;ref&gt;</code> definida en <code>&lt;references&gt;</code> co nome \"$1\" non ten contido.",
+ "cite_references_link_accessibility_label": "Saltar a",
+ "cite_references_link_many_accessibility_label": "Saltar a:"
+}
diff --git a/extensions/Cite/i18n/gom-deva.json b/extensions/Cite/i18n/gom-deva.json
new file mode 100644
index 00000000..c1247ce0
--- /dev/null
+++ b/extensions/Cite/i18n/gom-deva.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Supriya kankumbikar"
+ ]
+ },
+ "cite_error": "संदर्भ त्रुटीः$1"
+}
diff --git a/extensions/Cite/i18n/core/grc.json b/extensions/Cite/i18n/grc.json
index bbf5e372..bbf5e372 100644
--- a/extensions/Cite/i18n/core/grc.json
+++ b/extensions/Cite/i18n/grc.json
diff --git a/extensions/Cite/i18n/gsw.json b/extensions/Cite/i18n/gsw.json
new file mode 100644
index 00000000..9c7ac9d6
--- /dev/null
+++ b/extensions/Cite/i18n/gsw.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Holder",
+ "The Evil IP address"
+ ]
+ },
+ "cite-desc": "Ergänzt d <nowiki><ref[ name=id]></nowiki> un d <nowiki><references /></nowiki>-Tag fir Quällenochwyys",
+ "cite_error": "Referänz-Fähler: $1",
+ "cite_error_ref_numeric_key": "Uugiltigi <tt>&lt;ref&gt;</tt>-Verwändig: „name“ derf kei reine Zahlewärt syy, verwänd e Name wu bschrybt.",
+ "cite_error_ref_no_key": "Uugiltigi <tt>&lt;ref&gt;</tt>-Verwändig: „ref“ ohni Inhalt muess e Name haa.",
+ "cite_error_ref_too_many_keys": "Uugiltigi <tt>&lt;ref&gt;</tt>-Verwändig: „name“ isch uugiltig oder z lang.",
+ "cite_error_ref_no_input": "Uugiltigi <tt>&lt;ref&gt;</tt>-Verwändig: „ref“ ohni Name muess e Inhalt haa.",
+ "cite_error_references_invalid_parameters": "Uugiltigi <tt>&lt;references&gt;</tt>-Verwändig: S sin kei zuesätzligi Parameter erlaubt, verwänd usschließli <tt><nowiki><references /></nowiki></tt>.",
+ "cite_error_references_invalid_parameters_group": "Uugiltigi <tt>&lt;references&gt;</tt>-Verwändig: Nume dr Parameter „group“ isch erlaubt, verwänd <tt>&lt;references /&gt;</tt> oder <tt>&lt;references group=\"...\" /&gt;</tt>",
+ "cite_error_references_no_backlink_label": "E Referenz mit dr Form <tt>&lt;ref name=\"...\"/&gt;</tt> wird meh brucht as es Buechstabe git. E Ammann muess <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> go wyteri Buechstabe/Zeiche ergänze.",
+ "cite_error_no_link_label_group": "Fir d Gruppe „$1“ sin kei benutzerdefinierti Linkbezeichnige me verfiegbar.\nDefinier meh unter Systemnochricht <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Uugiltige <tt>&lt;ref&gt;</tt>-Tag; s isch kei Täxt fir s Ref mit em Name <tt>$1</tt> aagee wore.",
+ "cite_error_included_ref": "S fählt s schließend <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-Tag git s fir d Grupp „$1“, aber s isch kei dezue gherig <code>&lt;references group=„$1“/&gt;</code>-Tag gfunde wore",
+ "cite_error_references_group_mismatch": "Im <code>&lt;ref&gt;</code>-Tag in <code>&lt;references&gt;</code> het s e problematischi Gruppe-Eigeschaft „$1“.",
+ "cite_error_references_missing_group": "Im <code>&lt;ref&gt;</code>-Tag, wu definiert isch in <code>&lt;references&gt;</code>, het s e Gruppe-Eigeschaft „$1“, wu im obere Text nit vorchunnt.",
+ "cite_error_references_missing_key": "S <code>&lt;ref&gt;</code>-Tag mit em Name „$1“, wu definiert isch in <code>&lt;references&gt;</code> wird nit verwändet im obere Text.",
+ "cite_error_references_no_key": "S <code>&lt;ref&gt;</code>-Tag, wu definiert isch in <code>&lt;references&gt;</code>, het kei Name-Eigeschaft.",
+ "cite_error_empty_references_define": "Im <code>&lt;ref&gt;</code>-Tag, wu definiert isch in <code>&lt;references&gt;</code>, mit em Name „$1“ het s kei Inhalt."
+}
diff --git a/extensions/Cite/i18n/gu.json b/extensions/Cite/i18n/gu.json
new file mode 100644
index 00000000..39c38754
--- /dev/null
+++ b/extensions/Cite/i18n/gu.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ashok modhvadia",
+ "Dsvyas",
+ "KartikMistry",
+ "Sushant savla"
+ ]
+ },
+ "cite-desc": "અવતરણો માટે <nowiki><ref[ name=id]></nowiki> અને <nowiki><references/></nowiki> ટેગ ઉમેરે છે",
+ "cite_error": "સંદર્ભ ત્રુટિ: $1",
+ "cite_error_ref_numeric_key": "અમાન્ય <code>&lt;ref&gt;</code> ટેગ;\nનામ માત્ર સરળ રાશિ ન હોઈ શકે, વિસ્તૃત શીર્ષક આપો",
+ "cite_error_ref_no_key": "અમાન્ય <code>&lt;ref&gt;</code> ટેગ;\nનામ વગરના refs ને કાંઈક નામ તો હોવું જ જોઈએ",
+ "cite_error_ref_too_many_keys": "અમાન્ય <code>&lt;ref&gt;</code> ચકતી;\nઅમાન્ય નામો , દા.ત. ઘણાં બધાં",
+ "cite_error_ref_no_input": "અમાન્ય <code>&lt;ref&gt;</code> ટેગ;\nનામ વગરના refs માં કાંઈક સામગ્રી હોવી જોઈએ",
+ "cite_error_references_invalid_parameters": "અમાન્ય <code>&lt;references&gt;</code> ટેગ;\nકોઈ પણ પરિમાણની પરવાનગી નથી.\n<code>&lt;references /&gt;</code> વાપરો",
+ "cite_error_references_invalid_parameters_group": "અમાન્ય <code>&lt;references&gt;</code> ટેગ;\nમાત્ર \"group\" પરિમાણની પરવાનગી છે.\n<code>&lt;references /&gt;</code> કે <code>&lt;references group=\"...\" /&gt;</code> વાપરો",
+ "cite_error_references_no_backlink_label": "કસ્ટમ બેકલિંક લેબલ ખલાસ થઈ ગયાં.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> સંદેશામાં વહારે લેબલ બનાવો..",
+ "cite_error_no_link_label_group": "\"$1\" સમૂહ માટે કસ્ટમ બેકલિંક લેબલ ખલાસ થઈ ગયાં.\n<nowiki>[[MediaWiki:$2]]</nowiki> સંદેશામાં વહારે લેબલ બનાવો..",
+ "cite_error_references_no_text": "અમાન્ય <code>&lt;ref&gt;</code> ટેગ;\n<code>$1</code>નામના સંદર્ભ માટે કોઈ પણ લેખન અપાયું નથી",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> ટેગને બંધ કરતું <code>&lt;/ref&gt;</code> ખૂટે છે",
+ "cite_error_group_refs_without_references": " \"$1\" નામના સમૂહમાં <code>&lt;ref&gt;</code> ટેગ વિહરમાન છે, પણ તેને અનુરૂપ <code>&lt;references group=\"$1\"/&gt;</code> ટેગ ન મળ્યો.",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> ટેગને <code>&lt;references&gt;</code> માં આ વિરોધાભાસી લક્ષણ છે : \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code>માં વ્યાખ્યાયીત <code>&lt;ref&gt;</code> ટેગનો સમૂહ ગુણ \"$1\" છે જે પહેલાંની પહેલાંના લેખનમાં નથી.",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code> માં વ્યાખ્યાયિત $1\" નામ સાથેનું <code>&lt;ref&gt;</code> ટેગ આગળના લેખનમાં વપરાયો નથી.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> ટેગની વ્યાખ્યા <code>&lt;references&gt;</code> ને કોઈ નામકરણ નથી.",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> ટેગની વ્યાખ્યા <code>&lt;references&gt;</code> માં \"$1\" નામે છે તેને કોઈ content નથી.",
+ "cite_references_link_many_format_backlink_labels": ""
+}
diff --git a/extensions/Cite/i18n/he.json b/extensions/Cite/i18n/he.json
new file mode 100644
index 00000000..ea960c11
--- /dev/null
+++ b/extensions/Cite/i18n/he.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Rotem Liss",
+ "Rotemliss",
+ "YaronSh"
+ ]
+ },
+ "cite-desc": "הוספת תגי <span dir=\"ltr\"><nowiki><ref[ name=id]></nowiki></span> ו־<span dir=\"ltr\"><nowiki><references/></nowiki></span> עבור הערות שוליים",
+ "cite_error": "שגיאת ציטוט: $1",
+ "cite_error_ref_numeric_key": "תג <code>&lt;ref&gt;</code> לא תקין;\nשם (name) לא יכול להיות מספר שלם פשוט. יש להשתמש בכותרת תיאורית",
+ "cite_error_ref_no_key": "תג <code>&lt;ref&gt;</code> לא תקין;\nלהערות שוליים ללא תוכן חייב להיות שם (name)",
+ "cite_error_ref_too_many_keys": "תג <code>&lt;ref&gt;</code> לא תקין;\nשמות שגויים, למשל, רבים מדי",
+ "cite_error_ref_no_input": "תג <code>&lt;ref&gt;</code> לא תקין;\nלהערות שוליים ללא שם חייב להיות תוכן",
+ "cite_error_references_invalid_parameters": "תג <code>&lt;references&gt;</code> לא תקין;\nלא ניתן להשתמש בפרמטרים.\nיש להשתמש בקוד <code dir=\"ltr\">&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "תג <code>&lt;references&gt;</code> לא תקין;\nרק הפרמטר \"group\" מותר לשימוש.\nאנא השתמשו בקוד <code dir=\"ltr\">&lt;references /&gt;</code>, או בקוד <code dir=\"ltr\">&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "אזלו תוויות הקישורים המותאמות אישית.\nאנא הגדירו עוד תוויות בהודעת המערכת <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "אזלו תוויות קישורים מותאמות אישית לקבוצה \"$1\".\nהגדירו עוד תוויות בהודעת המערכת <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "תג <code>&lt;ref&gt;</code> לא תקין;\nלא נכתב טקסט עבור הערות השוליים בשם <code>$1</code>",
+ "cite_error_included_ref": "חסר תג <code>&lt;/ref&gt;</code> סוגר שמתאים לתג <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "קיימים תגי <code>&lt;ref&gt;</code> עבור קבוצה בשם \"$1\", אך לא נמצא תג <code dir=\"ltr\">&lt;references group=\"$1\"/&gt;</code> מתאים, או שחסר <code dir=\"ltr\">&lt;/ref&gt;</code> סוגר",
+ "cite_error_references_group_mismatch": "לתג <code>&lt;ref&gt;</code> המוגדר בתוך <code>&lt;references&gt;</code> יש מאפיין קבוצה (group) סותר, \"$1\".",
+ "cite_error_references_missing_group": "לתג <code>&lt;ref&gt;</code> המוגדר בתוך <code>&lt;references&gt;</code> יש מאפיין קבוצה (group) בעל הערך \"$1\", שאינו מופיע בטקסט שלפניו.",
+ "cite_error_references_missing_key": "התג <code>&lt;ref&gt;</code> בשם \"$1\" המוגדר בתוך <code>&lt;references&gt;</code> אינו נמצא בשימוש בטקסט שלפניו.",
+ "cite_error_references_no_key": "לתג <code>&lt;ref&gt;</code> המוגדר בתוך <code>&lt;references&gt;</code> אין מאפיין שם (name).",
+ "cite_error_empty_references_define": "התג <code>&lt;ref&gt;</code> בעל השם \"$1\" המוגדר בתוך <code>&lt;references&gt;</code> אינו מכיל תוכן.",
+ "cite_references_link_accessibility_label": "לקפוץ מעלה",
+ "cite_references_link_many_accessibility_label": "לקפוץ מעלה אל:"
+}
diff --git a/extensions/Cite/i18n/hi.json b/extensions/Cite/i18n/hi.json
new file mode 100644
index 00000000..6ec7687c
--- /dev/null
+++ b/extensions/Cite/i18n/hi.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Kaustubh",
+ "Shubhamkanodia",
+ "Siddhartha Ghai"
+ ]
+ },
+ "cite-desc": "उद्धरणों के लिये <nowiki><ref[ name=id]></nowiki> और <nowiki><references/></nowiki> टैग जोड़ता है।",
+ "cite_error": "सन्दर्भ त्रुटि: $1",
+ "cite_error_ref_numeric_key": "अमान्य <code>&lt;ref&gt;</code> टैग;\nनाम साधारण संख्या (integer) नहीं हो सकता, कृपया विस्तृत शीर्षक दें।",
+ "cite_error_ref_no_key": "अमान्य <code>&lt;ref&gt;</code> टैग;\nखाली संदर्भों का नाम होना आवश्यक है",
+ "cite_error_ref_too_many_keys": "अमान्य <code>&lt;ref&gt;</code> टैग;\n(संभवतः कई) अमान्य नाम",
+ "cite_error_ref_no_input": "अमान्य <code>&lt;ref&gt;</code> टैग;\nनाम रहित संदर्भों में जानकारी देना आवश्यक है",
+ "cite_error_references_invalid_parameters": "अमान्य <code>&lt;references&gt;</code> टैग;\nप्राचल (पैरामीटर) स्वीकृत नहीं हैं।\n<code>&lt;references /&gt;</code> का प्रयोग करें।",
+ "cite_error_references_invalid_parameters_group": "अमान्य <code>&lt;references&gt;</code> टैग;\nसिर्फ़ \"group\" प्राचल (पैरामीटर) स्वीकृत है।\n<code>&lt;references /&gt;</code> या <code>&lt;references group=\"...\" /&gt;</code> का प्रयोग करें।",
+ "cite_error_references_no_backlink_label": "पृष्ठ पाठ की कड़ियाँ देने वाले विशिष्ट नाम खतम हो गये।\nअधिक नाम <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> संदेश में जोड़ें।",
+ "cite_error_no_link_label_group": "\"$1\" संदर्भ समूह के लिये कड़ियों के विशिष्ट नाम कम पड़ गए।\n<nowiki>[[MediaWiki:$2]]</nowiki> सन्देश में और नाम परिभाषित करें।",
+ "cite_error_references_no_text": "अमान्य <code>&lt;ref&gt;</code> टैग;\n<code>$1</code> नामक संदर्भ की जानकारी नहीं है",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> टैग के लिए समाप्ति <code>&lt;/ref&gt;</code> टैग नहीं मिला",
+ "cite_error_group_refs_without_references": "\"$1\" नामक सन्दर्भ-समूह के लिए <code>&lt;ref&gt;</code> टैग मौजूद हैं, परन्तु समूह के लिए कोई <code>&lt;references group=\"$1\"/&gt;</code> टैग नहीं मिला। यह भी संभव है कि कोई समाप्ति <code>&lt;/ref&gt;</code> टैग गायब है।",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> में <code>&lt;ref&gt;</code> टैग के लिए group प्राचल (पैरामीटर) में अंतर्विरोधी जानकारी \"$1\" मौजूद है।",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code> में परिभाषित <code>&lt;ref&gt;</code> टैग में group प्राचल (पैरामीटर) \"$1\" दिया है जो उससे पहले पृष्ठ के पाठ में मौजूद नहीं है।",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code> में \"$1\" नाम के साथ परिभाषित <code>&lt;ref&gt;</code> टैग उससे पहले के पाठ में प्रयुक्त नहीं है।",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code> टैग में परिभाषित <code>&lt;ref&gt;</code> टैग का कोई नाम नहीं है।",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code> टैग में परिभाषित \"$1\" नामक <code>&lt;ref&gt;</code> टैग में कोई सामग्री नहीं है।",
+ "cite_references_link_many_format_backlink_labels": "अ आ इ ई उ ऊ ए ऐ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल व श ष स ह अ॰अ अ॰आ अ॰इ अ॰ई अ॰उ अ॰ऊ अ॰ए अ॰ऐ अ॰ओ अ॰औ अ॰क अ॰ख अ॰ग अ॰घ अ॰ङ अ॰च अ॰छ अ॰ज अ॰झ अ॰ञ अ॰ट अ॰ठ अ॰ड अ॰ढ अ॰ण अ॰त अ॰थ अ॰द अ॰ध अ॰न अ॰प अ॰फ अ॰ब अ॰भ अ॰म अ॰य अ॰र अ॰ल अ॰व अ॰श अ॰ष अ॰स अ॰ह आ॰अ आ॰आ आ॰इ आ॰ई आ॰उ आ॰ऊ आ॰ए आ॰ऐ आ॰ओ आ॰औ आ॰क आ॰ख आ॰ग आ॰घ आ॰ङ आ॰च आ॰छ आ॰ज आ॰झ आ॰ञ आ॰ट आ॰ठ आ॰ड आ॰ढ आ॰ण आ॰त आ॰थ आ॰द आ॰ध आ॰न आ॰प आ॰फ आ॰ब आ॰भ अ॰म आ॰य आ॰र आ॰ल आ॰व आ॰श आ॰ष आ॰स आ॰ह इ॰अ इ॰आ इ॰इ इ॰ई इ॰उ इ॰ऊ इ॰ए इ॰ऐ इ॰ओ इ॰औ इ॰क इ॰ख इ॰ग इ॰घ इ॰ङ इ॰च इ॰छ इ॰ज इ॰झ इ॰ञ इ॰ट इ॰ठ इ॰ड इ॰ढ इ॰ण इ॰त इ॰थ इ॰द इ॰ध इ॰न इ॰प इ॰फ इ॰ब इ॰भ इ॰म इ॰य इ॰र इ॰ल इ॰व इ॰श इ॰ष इ॰स इ॰ह ई॰अ ई॰आ ई॰इ ई॰ई ई॰उ ई॰ऊ ई॰ए ई॰ऐ ई॰ओ ई॰औ ई॰क ई॰ख ई॰ग ई॰घ ई॰ङ ई॰च ई॰छ ई॰ज ई॰झ ई॰ञ ई॰ट ई॰ठ ई॰ड ई॰ढ ई॰ण ई॰त ई॰थ ई॰द ई॰ध ई॰न ई॰प ई॰फ ई॰ब ई॰भ ई॰म ई॰य ई॰र ई॰ल ई॰व ई॰श ई॰ष ई॰स ई॰ह उ॰अ उ॰आ उ॰इ उ॰ई उ॰उ उ॰ऊ उ॰ए उ॰ऐ उ॰ओ उ॰औ उ॰क उ॰ख उ॰ग उ॰घ उ॰ङ उ॰च उ॰छ उ॰ज उ॰झ उ॰ञ उ॰ट उ॰ठ उ॰ड उ॰ढ उ॰ण उ॰त उ॰थ उ॰द उ॰ध उ॰न उ॰प उ॰फ उ॰ब उ॰भ उ॰म उ॰य उ॰र उ॰ल उ॰व उ॰श उ॰ष उ॰स उ॰ह ऊ॰अ ऊ॰आ ऊ॰इ ऊ॰ई ऊ॰उ ऊ॰ऊ ऊ॰ए ऊ॰ऐ ऊ॰ओ ऊ॰औ ऊ॰क ऊ॰ख ऊ॰ग ऊ॰घ ऊ॰ङ ऊ॰च ऊ॰छ ऊ॰ज ऊ॰झ ऊ॰ञ ऊ॰ट ऊ॰ठ ऊ॰ड ऊ॰ढ ऊ॰ण ऊ॰त ऊ॰थ ऊ॰द ऊ॰ध ऊ॰न ऊ॰प ऊ॰फ ऊ॰ब ऊ॰भ ऊ॰म ऊ॰य ऊ॰र ऊ॰ल ऊ॰व ऊ॰श ऊ॰ष ऊ॰स ऊ॰ह ए॰अ ए॰आ ए॰इ ए॰ई ए॰उ ए॰ऊ ए॰ए ए॰ऐ ए॰ओ ए॰औ ए॰क ए॰ख ए॰ग ए॰घ ए॰ङ ए॰च ए॰छ ए॰ज ए॰झ ए॰ञ ए॰ट ए॰ठ ए॰ड ए॰ढ ए॰ण ए॰त ए॰थ ए॰द ए॰ध ए॰न ए॰प ए॰फ ए॰ब ए॰भ ए॰म ए॰य ए॰र ए॰ल ए॰व ए॰श ए॰ष ए॰स ए॰ह ऐ॰अ ऐ॰आ ऐ॰इ ऐ॰ई ऐ॰उ ऐ॰ऊ ऐ॰ए ऐ॰ऐ ऐ॰ओ ऐ॰औ ऐ॰क ऐ॰ख ऐ॰ग ऐ॰घ ऐ॰ङ ऐ॰च ऐ॰छ ऐ॰ज ऐ॰झ ऐ॰ञ ऐ॰ट ऐ॰ठ ऐ॰ड ऐ॰ढ ऐ॰ण ऐ॰त ऐ॰थ ऐ॰द ऐ॰ध ऐ॰न ऐ॰प ऐ॰फ ऐ॰ब ऐ॰भ ऐ॰म ऐ॰य ऐ॰र ऐ॰ल ऐ॰व ऐ॰श ऐ॰ष ऐ॰स ऐ॰ह ओ॰अ ओ॰आ ओ॰इ ओ॰ई ओ॰उ ओ॰ऊ ओ॰ए ओ॰ऐ ओ॰ओ ओ॰औ ओ॰क ओ॰ख ओ॰ग ओ॰घ ओ॰ङ ओ॰च ओ॰छ ओ॰ज ओ॰झ ओ॰ञ ओ॰ट ओ॰ठ ओ॰ड ओ॰ढ ओ॰ण ओ॰त ओ॰थ ओ॰द ओ॰ध ओ॰न ओ॰प ओ॰फ ओ॰ब ओ॰भ ओ॰म ओ॰य ओ॰र ओ॰ल ओ॰व ओ॰श ओ॰ष ओ॰स ओ॰ह औ॰अ औ॰आ औ॰इ औ॰ई औ॰उ औ॰ऊ औ॰ए औ॰ऐ औ॰ओ औ॰औ औ॰क औ॰ख औ॰ग औ॰घ औ॰ङ औ॰च औ॰छ औ॰ज औ॰झ औ॰ञ औ॰ट औ॰ठ औ॰ड औ॰ढ औ॰ण औ॰त औ॰थ औ॰द औ॰ध औ॰न औ॰प औ॰फ औ॰ब औ॰भ औ॰म औ॰य औ॰र औ॰ल औ॰व औ॰श औ॰ष औ॰स औ॰ह क॰अ क॰आ क॰इ क॰ई क॰उ क॰ऊ क॰ए क॰ऐ क॰ओ क॰औ क॰क क॰ख क॰ग क॰घ क॰ङ क॰च क॰छ क॰ज क॰झ क॰ञ क॰ट क॰ठ क॰ड क॰ढ क॰ण क॰त क॰थ क॰द क॰ध क॰न क॰प क॰फ क॰ब क॰भ क॰म क॰य क॰र क॰ल क॰व क॰श क॰ष क॰स क॰ह ख॰अ ख॰आ ख॰इ ख॰ई ख॰उ ख॰ऊ ख॰ए ख॰ऐ ख॰ओ ख॰औ ख॰क ख॰ख ख॰ग ख॰घ ख॰ङ ख॰च ख॰छ ख॰ज ख॰झ ख॰ञ ख॰ट ख॰ठ ख॰ड ख॰ढ ख॰ण ख॰त ख॰थ ख॰द ख॰ध ख॰न ख॰प ख॰फ ख॰ब ख॰भ ख॰म ख॰य ख॰र ख॰ल ख॰व ख॰श ख॰ष ख॰स ख॰ह ग॰अ ग॰आ ग॰इ ग॰ई ग॰उ ग॰ऊ ग॰ए ग॰ऐ ग॰ओ ग॰औ ग॰क ग॰ख ग॰ग ग॰घ ग॰ङ ग॰च ग॰छ ग॰ज ग॰झ ग॰ञ ग॰ट ग॰ठ ग॰ड ग॰ढ ग॰ण ग॰त ग॰थ ग॰द ग॰ध ग॰न ग॰प ग॰फ ग॰ब ग॰भ ग॰म ग॰य ग॰र ग॰ल ग॰व ग॰श ग॰ष ग॰स ग॰ह घ॰अ घ॰आ घ॰इ घ॰ई घ॰उ घ॰ऊ घ॰ए घ॰ऐ घ॰ओ घ॰औ घ॰क घ॰ख घ॰ग घ॰घ घ॰ङ घ॰च घ॰छ घ॰ज घ॰झ घ॰ञ घ॰ट घ॰ठ घ॰ड घ॰ढ घ॰ण घ॰त घ॰थ घ॰द घ॰ध घ॰न घ॰प घ॰फ घ॰ब घ॰भ घ॰म घ॰य घ॰र घ॰ल घ॰व घ॰श घ॰ष घ॰स घ॰ह ङ॰अ ङ॰आ ङ॰इ ङ॰ई ङ॰उ ङ॰ऊ ङ॰ए ङ॰ऐ ङ॰ओ ङ॰औ ङ॰क ङ॰ख ङ॰ग ङ॰घ ङ॰ङ ङ॰च ङ॰छ ङ॰ज ङ॰झ ङ॰ञ ङ॰ट ङ॰ठ ङ॰ड ङ॰ढ ङ॰ण ङ॰त ङ॰थ ङ॰द ङ॰ध ङ॰न ङ॰प ङ॰फ ङ॰ब ङ॰भ ङ॰म ङ॰य ङ॰र ङ॰ल ङ॰व ङ॰श ङ॰ष ङ॰स ङ॰ह",
+ "cite_references_link_accessibility_label": "ऊपर जायें",
+ "cite_references_link_many_accessibility_label": "इस तक ऊपर जायें:"
+}
diff --git a/extensions/Cite/i18n/hr.json b/extensions/Cite/i18n/hr.json
new file mode 100644
index 00000000..ea9d2300
--- /dev/null
+++ b/extensions/Cite/i18n/hr.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dalibor Bosits",
+ "Dnik",
+ "Roberta F.",
+ "SpeedyGonsales",
+ "MaGa"
+ ]
+ },
+ "cite-desc": "Dodaje <nowiki><ref[ name=id]></nowiki> i <nowiki><references/></nowiki> oznake, za citiranje",
+ "cite_error": "Pogrješka u citiranju: $1",
+ "cite_error_ref_numeric_key": "nevažeća <code>&lt;ref&gt;</code> oznaka; naziv ne smije biti jednostavni broj, koristite opisni naziv",
+ "cite_error_ref_no_key": "nevažeća <code>&lt;ref&gt;</code> oznaka; izvori bez sadržaja moraju imati naziv",
+ "cite_error_ref_too_many_keys": "nevažeća <code>&lt;ref&gt;</code> oznaka; loš naziv, npr. previše naziva",
+ "cite_error_ref_no_input": "nevažeća <code>&lt;ref&gt;</code> oznaka; izvori bez imena moraju imati sadržaj",
+ "cite_error_references_invalid_parameters": "nevažeća <code>&lt;references&gt;</code> oznaka; parametri nisu dozvoljeni, koristite <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "neispravna <code>&lt;references&gt;</code> oznaka,\ndopuštena je samo opcija \"group\".\nKoristite <code>&lt;references /&gt;</code>, ili <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "potrošene sve posebne oznake za poveznice unatrag, definirajte više u poruci <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "nedovoljan broj proizvoljnih naslova poveznica za grupu \"$1\".\nDefinirajte više putem poruke <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "nije zadan tekst za izvor <code>$1</code>",
+ "cite_error_included_ref": "nedostaje zatvarajući <code>&lt;/ref&gt;</code> za <code>&lt;ref&gt;</code> oznaku",
+ "cite_error_group_refs_without_references": "oznake <code>&lt;ref&gt;</code> postoje za skupinu imenovanom \"$1\", ali nema pripadajuće oznake <code>&lt;references group=\"$1\"/&gt;</code>",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> oznaka u <code>&lt;references&gt;</code> ima konfliktni grupni atribut \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> oznaka definirana u <code>&lt;references&gt;</code> ima grupni atribut \"$1\" koji se ne pojavljuje u ranijem tekstu.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> oznaka s imenom \"$1\" definirana u <code>&lt;references&gt;</code> nije prethodno rabljena u tekstu.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> oznaka definirana u <code>&lt;references&gt;</code> nema parametar \"name\" (ime).",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> oznaka definirana u <code>&lt;references&gt;</code> s imenom \"$1\" nema sadržaja."
+}
diff --git a/extensions/Cite/i18n/hsb.json b/extensions/Cite/i18n/hsb.json
new file mode 100644
index 00000000..a829ebca
--- /dev/null
+++ b/extensions/Cite/i18n/hsb.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "cite-desc": "Přidawa taflički <nowiki><ref[ name=id]></nowiki> a <nowiki><references /></nowiki> za žórłowe podaća",
+ "cite_error": "Referencny zmylk: $1",
+ "cite_error_ref_numeric_key": "Njepłaćiwe wužiwanje taflički <code>&lt;ref&gt;</code>; \"name\" njesmě jednora hódnota integer być, wužij wopisowace mjeno.",
+ "cite_error_ref_no_key": "Njepłaćiwe wužiwanje taflički <code>&lt;ref&gt;</code>; \"ref\" bjez wobsaha dyrbi mjeno měć.",
+ "cite_error_ref_too_many_keys": "Njepłaćiwe wužiwanje taflički <code>&lt;ref&gt;</code>; njepłaćiwe mjena, na př. předołho",
+ "cite_error_ref_no_input": "Njepłaćiwe wužiwanje taflički <code>&lt;ref&gt;</code>; \"ref\" bjez mjena dyrbi wobsah měć",
+ "cite_error_references_invalid_parameters": "Njepłaćiwe wužiwanje taflički <code>&lt;references&gt;</code>; žane parametry dowolene, wužij jenož <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Njepłaćiwa taflička <code>&lt;references&gt;</code>;\njenož parameter \"group\" je dowoleny.\nWužij <code>&lt;references /&gt;</code> abo <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Zwučene etikety wróćowotkazow wućerpjene.\nDefinuj wjace w powěsći <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Swójske wotkazowe etikety za skupinu \"$1\" hižo njejsu.\nDefinuj dalše w zdźělence <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Njepłaćiwa referenca formy <code>&lt;ref&gt;</code>; žadyn tekst za referency z mjenom <code>$1</code> podaty.",
+ "cite_error_included_ref": "Kónčny <code>&lt;/ref&gt;</code> za tafličku <code>&lt;ref&gt;</code> faluje",
+ "cite_error_group_refs_without_references": "Taflički <code>&lt;ref&gt;</code> eksistuja za skupinu z mjenom \"$1\", ale njeje so wotpowědowaca taflička <code>&lt;references group=\"$1\"/&gt;</code> namakała abo začinjacy <code>&lt;/ref&gt;</code> faluje",
+ "cite_error_references_group_mismatch": "Taflička <code>&lt;ref&gt;</code> w <code>&lt;references&gt;</code> je ze skupinskim atributom \"$1\" w konflikće.",
+ "cite_error_references_missing_group": "Taflička <code>&lt;ref&gt;</code>, kotraž je w <code>&lt;references&gt;</code> definowana, ma skupinski atribut \"$1\", kotryž so w prjedawšim teksće njejewi.",
+ "cite_error_references_missing_key": "Taflička <code>&lt;ref&gt;</code> z mjenom \"$1\", kotraž je w <code>&lt;references&gt;</code> definowana, so w prjedawšim teksće njewužiwa.",
+ "cite_error_references_no_key": "Taflička <code>&lt;ref&gt;</code>, kotraž je w <code>&lt;references&gt;</code> definowana, mjenowy atribut nima.",
+ "cite_error_empty_references_define": "Taflička <code>&lt;ref&gt;</code>, kotraž je w <code>&lt;references&gt;</code> z mjenom \"$1\" definowana, wobsah nima.",
+ "cite_references_link_accessibility_label": "Horje skočić",
+ "cite_references_link_many_accessibility_label": "Horje skočić do:"
+}
diff --git a/extensions/Cite/i18n/core/ht.json b/extensions/Cite/i18n/ht.json
index 84f7bdf2..84f7bdf2 100644
--- a/extensions/Cite/i18n/core/ht.json
+++ b/extensions/Cite/i18n/ht.json
diff --git a/extensions/Cite/i18n/hu.json b/extensions/Cite/i18n/hu.json
new file mode 100644
index 00000000..1f5778d4
--- /dev/null
+++ b/extensions/Cite/i18n/hu.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dani",
+ "Glanthor Reviol",
+ "KossuthRad"
+ ]
+ },
+ "cite-desc": "Lehetővé teszi idézések létrehozását <nowiki><ref[ name=id]></nowiki> és <nowiki><references/></nowiki> tagek segítségével",
+ "cite_error": "Forráshivatkozás-hiba: $1",
+ "cite_error_ref_numeric_key": "Érvénytelen <code>&lt;ref&gt;</code> tag; a name értéke nem lehet csupán egy szám, használj leíró címeket",
+ "cite_error_ref_no_key": "Érvénytelen <code>&lt;ref&gt;</code> tag; a tartalom nélküli ref-eknek kötelező nevet (name) adni",
+ "cite_error_ref_too_many_keys": "Érvénytelen <code>&lt;ref&gt;</code> tag; hibás nevek, pl. túl sok",
+ "cite_error_ref_no_input": "Érvénytelen <code>&lt;ref&gt;</code> tag; a név (name) nélküli ref-eknek adni kell valamilyen tartalmat",
+ "cite_error_references_invalid_parameters": "Érvénytelen <code>&lt;references&gt;</code> tag; nincsenek paraméterei, használd a <code>&lt;references /&gt;</code> formát",
+ "cite_error_references_invalid_parameters_group": "Érvénytelen <code>&lt;references&gt;</code> tag; csak a „group” attribútum használható. Használd a <code>&lt;references /&gt;</code>, vagy a <code>&lt;references group=\"...\" /&gt;</code> formát.",
+ "cite_error_references_no_backlink_label": "Elfogytak a visszahivatkozásra használt címkék, adj meg többet a <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> üzenetben",
+ "cite_error_no_link_label_group": "Nincs több egyedi címke a következő csoport számára: „$1”.\nAdj meg többet a <nowiki>[[MediaWiki:$2]]</nowiki> lapon.",
+ "cite_error_references_no_text": "Érvénytelen <code>&lt;ref&gt;</code> tag; nincs megadva szöveg a(z) <code>$1</code> nevű ref-eknek",
+ "cite_error_included_ref": "Egy <code>&lt;ref&gt;</code> tag lezáró <code>&lt;/ref&gt;</code> része hiányzik",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-ek léteznek a(z) „$1” csoporthoz, de nincs hozzá <code>&lt;references group=\"$1\"/&gt;</code>",
+ "cite_error_references_group_mismatch": "A <code>&lt;references&gt;</code> és a benne található <code>&lt;ref&gt;</code> tag csoport-attribútuma („$1”) nem egyezik meg.",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tag lett lett definiálva egy olyan <code>&lt;references&gt;</code> tagben, amely csoport-attribútuma („$1”) nem szerepel a szöveg korábbi részében.",
+ "cite_error_references_missing_key": "a <code>&lt;references&gt;</code> tagben definiált „$1” nevű <code>&lt;ref&gt;</code> tag nem szerepel a szöveg korábbi részében.",
+ "cite_error_references_no_key": "a <code>&lt;references&gt;</code> tagben definiált <code>&lt;ref&gt;</code> tagnek nincs név attribútuma.",
+ "cite_error_empty_references_define": "a <code>&lt;references&gt;</code> szakaszban definiált „$1” <code>&lt;ref&gt;</code> tagnek nincs tartalma.",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">^ $2</span> $3</li>"
+}
diff --git a/extensions/Cite/i18n/hy.json b/extensions/Cite/i18n/hy.json
new file mode 100644
index 00000000..899f98da
--- /dev/null
+++ b/extensions/Cite/i18n/hy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xelgen"
+ ]
+ },
+ "cite_error": "Քաղվածելու սխալ՝ $1"
+}
diff --git a/extensions/Cite/i18n/ia.json b/extensions/Cite/i18n/ia.json
new file mode 100644
index 00000000..c49d066c
--- /dev/null
+++ b/extensions/Cite/i18n/ia.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "cite-desc": "Adde etiquettas <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki>, pro citationes",
+ "cite_error": "Error de citation: $1",
+ "cite_error_ref_numeric_key": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nle nomine non pote esser un numero integre. Usa un titulo descriptive",
+ "cite_error_ref_no_key": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nle refs sin contento debe haber un nomine",
+ "cite_error_ref_too_many_keys": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nnomines invalide, p.ex. troppo de nomines",
+ "cite_error_ref_no_input": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nle refs sin nomine debe haber contento",
+ "cite_error_references_invalid_parameters": "Etiquetta <code>&lt;references&gt;</code> invalide;\nnulle parametros es permittite.\nUsa <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Etiquetta <code>&lt;references&gt;</code> invalide;\nsolmente le parametro \"group\" es permittite.\nUsa <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Le etiquettas de retroligamine personalisate es exhaurite.\nDefini plus in le message <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Exhauriva le etiquettas de ligamine personalisabile pro le gruppo \"$1\".\nDefini plus de istes in le message <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Etiquetta <code>&lt;ref&gt;</code> invalide;\nnulle texto esseva fornite pro le refs nominate <code>$1</code>",
+ "cite_error_included_ref": "Le clausura <code>&lt;/ref&gt;</code> manca pro le etiquetta <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Il existe etiquettas <code>&lt;ref&gt;</code> pro un gruppo con nomine \"$1\", ma nulle etiquetta <code>&lt;references group=\"$1\"/&gt;</code> correspondente ha essite trovate, o un etiquetta de termination <code>&lt;/ref&gt;</code> manca.",
+ "cite_error_references_group_mismatch": "Le etiquetta <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> ha un attributo de gruppo \"$1\" confligente.",
+ "cite_error_references_missing_group": "Le etiquetta <code>&lt;ref&gt;</code> definite in <code>&lt;references&gt;</code> ha un attributo de gruppo \"$1\" que non appare in le texto precedente.",
+ "cite_error_references_missing_key": "Le etiquetta <code>&lt;ref&gt;</code> con nomine \"$1\" definite in <code>&lt;references&gt;</code> non es usate in le texto precedente.",
+ "cite_error_references_no_key": "Le etiquetta <code>&lt;ref&gt;</code> definite in <code>&lt;references&gt;</code> non ha un attributo de nomine.",
+ "cite_error_empty_references_define": "Le etiquetta <code>&lt;ref&gt;</code> definite in <code>&lt;references&gt;</code> con nomine \"$1\" ha nulle contento.",
+ "cite_references_link_accessibility_label": "Retornar",
+ "cite_references_link_many_accessibility_label": "Retornar a:"
+}
diff --git a/extensions/Cite/i18n/id.json b/extensions/Cite/i18n/id.json
new file mode 100644
index 00000000..b92b78e9
--- /dev/null
+++ b/extensions/Cite/i18n/id.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bennylin",
+ "Irwangatot",
+ "IvanLanin",
+ "Iwan Novirion",
+ "Rex"
+ ]
+ },
+ "cite-desc": "Menambahkan tag <nowiki><ref[ name=id]></nowiki> dan <nowiki><references/></nowiki> untuk kutipan",
+ "cite_error": "Kesalahan pengutipan: $1",
+ "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> tidak sah; \nnama tidak boleh intejer sederhana.\nGunakan nama deskriptif",
+ "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> tidak sah;\nreferensi tanpa isi harus memiliki nama",
+ "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> tidak sah;\nnama tidak sah; misalnya, terlalu banyak",
+ "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> tidak sah;\nreferensi tanpa nama harus memiliki isi",
+ "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> tidak sah;\nparameter tidak diperbolehkan.\nGunakan <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> tidak sah;\nhanya parameter \"group\" yang diizinkan.\nGunakan <code>&lt;references /&gt;</code>, atau <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Kehabisan label pralana balik tersuai.\nTambahkan lagi di pesan sistem <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Pranala kustom label untuk kelompok \"$1\" habis.\nTambahkan ketentuan dalam pesan <nowiki> [[MediaWiki:$2]] </nowiki> .",
+ "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> tidak sah; \ntidak ditemukan teks untuk ref bernama <code>$1</code>",
+ "cite_error_included_ref": "Tag <code>&lt;ref&gt;</code> harus ditutup oleh <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Ditemukan tag <code>&lt;ref&gt;</code> untuk kelompok bernama \"$1\", tapi tidak ditemukan tag <code>&lt;references group=\"$1\"/&gt;</code> yang berkaitan",
+ "cite_error_references_group_mismatch": "Tag <code>&lt;ref&gt;</code> di <code>&lt;references&gt;</code> ada atribut kelompok \"$1\" yang konflik.",
+ "cite_error_references_missing_group": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di <code>&lt;references&gt;</code> memiliki atribut kelompok \"$1\" yang tidak ditampilkan di teks sebelumnya.",
+ "cite_error_references_missing_key": "Tag <code>&lt;ref&gt;</code> dengan nama \"$1\" yang didefinisikan di <code>&lt;references&gt;</code> tidak digunakan pada teks sebelumnya.",
+ "cite_error_references_no_key": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di di <code>&lt;references&gt;</code> tidak memiliki nama atribut.",
+ "cite_error_empty_references_define": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di di <code>&lt;references&gt;</code> dengan nama \"$1\" tidak memiliki isi.",
+ "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>"
+}
diff --git a/extensions/Cite/i18n/core/ig.json b/extensions/Cite/i18n/ig.json
index 28f82537..28f82537 100644
--- a/extensions/Cite/i18n/core/ig.json
+++ b/extensions/Cite/i18n/ig.json
diff --git a/extensions/Cite/i18n/ilo.json b/extensions/Cite/i18n/ilo.json
new file mode 100644
index 00000000..53858169
--- /dev/null
+++ b/extensions/Cite/i18n/ilo.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "cite-desc": "Aginayon kadagiti etiketa ti <nowiki><ref[ name=id]></nowiki> ken <nowiki><references/></nowiki>, para kadagiti panagdakamat",
+ "cite_error": "Biddut ti dakamat: $1",
+ "cite_error_ref_numeric_key": "Imbalido ti etiketa ti <code>&lt;ref&gt;</code>;\nti nagan ket saan a mabalin a nalaka a sibubukel. Agusar ti makaipalawag a titulo",
+ "cite_error_ref_no_key": "Imbalido nga etiketa ti <code>&lt;ref&gt;</code> ;\ndagita ref nga awan nagyanna ket masapul nga adda naganna",
+ "cite_error_ref_too_many_keys": "Imbalido nga etiketa ti <code>&lt;ref&gt;</code> ;\nimbalido a nag-nagan, a kas adu unay",
+ "cite_error_ref_no_input": "Imbalido nga etiketa ti <code>&lt;ref&gt;</code> ;\ndagiti ref nga awan ti naganna ket masapul nga addaan ti nagyan",
+ "cite_error_references_invalid_parameters": "Imbalido nga etiketa ti <code>&lt;references&gt;</code>;\nsaan a maipalubos dagiti parametro.\nUsaren ti <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Imbalido nga etiketa ti <code>&lt;references&gt;</code> ;\nmaipalubos laeng ti parametro ti \"grupo\" .\nUsaren ti <code>&lt;references /&gt;</code> , wenno<code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Naibusan kadagiti etiketa ti naisangayan a silpo ti likud.\nIpalawag pay ti adu idiay mensahe ti <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Naibusan kadagiti etiketa ti nangruna a silpo para iti grupo ti \"$1\".\nIpalawag pay ti adu idiay mensahe ti <nowiki>[[MediaWiki:$2]]</nowiki> .",
+ "cite_error_references_no_text": "Imbalido nga etiketa ti <code>&lt;ref&gt;</code> ;\nawan ti testo a naited para kadagiti ref a nanaganan <code>$1</code>",
+ "cite_error_included_ref": "Irikepen ti <code>&lt;/ref&gt;</code> napukaw para iti etiketa ti <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Adda dagiti etiketa ti <code>&lt;ref&gt;</code> para iti grupo a nanaganan ti \"$1\", ngem awan ti kapada nga etiketa ti <code>&lt;references group=\"$1\"/&gt;</code> a nabirukan, wenno awan ti pangrikep ti <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "Ti etiketa ti <code>&lt;ref&gt;</code> iday <code>&lt;references&gt;</code> ket addan ti kasinnungat a gupit ti grupo ti \"$1\".",
+ "cite_error_references_missing_group": "Ti etiketa ti <code>&lt;ref&gt;</code> a naipalawag idiay <code>&lt;references&gt;</code> ket addaan ti gupit ti grupo ti \"$1\" a saan nga agparang iti napalabas a testo.",
+ "cite_error_references_missing_key": "Ti etiketa ti <code>&lt;ref&gt;</code> nga addaan ti nagan ti \"$1\" a naipalawag idiay <code>&lt;references&gt;</code> ket saan a nausar iti napalabas a testo.",
+ "cite_error_references_no_key": "Ti etiketa ti <code>&lt;ref&gt;</code> a naipalawag idiay <code>&lt;references&gt;</code> ket awan ti nainagan a gupit.",
+ "cite_error_empty_references_define": "Ti etiketa ti <code>&lt;ref&gt;</code> a naipalawag idiay <code>&lt;references&gt;</code> nga addaan ti nagan a \"$1\" ket awan ti nagyanna.",
+ "cite_references_link_accessibility_label": "Mapan iti ngato",
+ "cite_references_link_many_accessibility_label": "Mapan aginggana iti:"
+}
diff --git a/extensions/Cite/i18n/core/io.json b/extensions/Cite/i18n/io.json
index 65d3157a..65d3157a 100644
--- a/extensions/Cite/i18n/core/io.json
+++ b/extensions/Cite/i18n/io.json
diff --git a/extensions/Cite/i18n/is.json b/extensions/Cite/i18n/is.json
new file mode 100644
index 00000000..8adaaa99
--- /dev/null
+++ b/extensions/Cite/i18n/is.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Snævar"
+ ]
+ },
+ "cite-desc": "Bætir <nowiki><ref[ name=id]></nowiki> og <nowiki><references/></nowiki> tögum við fyrir heimildir",
+ "cite_error": "Tilvísunar villa: $1",
+ "cite_error_ref_numeric_key": "Villa í <code>&lt;ref&gt;</code> tag;\nnafn tilvísunar má ekki vera heil tala. Notaðu lýsandi titil",
+ "cite_error_ref_no_key": "Villa í <code>&lt;ref&gt;</code> tag;\ntilvísunin verður annaðhvort að hafa nafn eða innihald.",
+ "cite_error_ref_too_many_keys": "Villa í <code>&lt;ref&gt;</code> tag;\nógilt nafn, t.d. of mörg",
+ "cite_error_ref_no_input": "Villa í <code>&lt;ref&gt;</code> tag;\ntilvísunin verður annaðhvort að hafa nafn eða innihald.",
+ "cite_error_references_invalid_parameters": "Villa í <code>&lt;ref&gt;</code> tag;\nengir stikar eru leyfðir\nNotaðu <code>&lt;references /&gt;</code> í staðinn",
+ "cite_error_references_invalid_parameters_group": "Villa í <code>&lt;ref&gt;</code> tag;\naðeins einn stiki er leyfður, \"group\"\nNotaðu <code>&lt;references /&gt;</code> eða <code>&lt;references group=\"...\" /&gt;</code> í staðinn.",
+ "cite_error_references_no_text": "Villa í <code>&lt;ref&gt;</code> tag;\ntilgreindu texta fyrir tilvísun með nafnið <code>$1</code>",
+ "cite_error_included_ref": "Loka þarf tilvísunni með <code>&lt;/ref&gt;</code> tagi",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> tag er til fyrir hóp tilvísana undir nafninu \"$1\". Annaðhvort finnst ekkert sambærilegt <code>&lt;references group=\"$1\"/&gt;</code> tag, eða að það vanti að loka taginu með <code>&lt;/ref&gt;</code>.",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tag í <code>&lt;references&gt;</code> stangast á við hópa eigindið \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tag skilgreint í <code>&lt;references&gt;</code> hefur hópa eigindið \"$1\" sem birtist ekki í textanum á undan.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> tag með nafnið \"$1\" og er skilgreint í <code>&lt;references&gt;</code> er ekki notað í textanum á undan.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> tag skilgreint í <code>&lt;references&gt;</code> hefur engin nafna eigindi.",
+ "cite_error_empty_references_define": "Bæta þarf innihaldi við tilvísun með nafnið \"$1\".",
+ "cite_references_link_accessibility_label": "Stökkva upp",
+ "cite_references_link_many_accessibility_label": "Stökkva upp til:"
+}
diff --git a/extensions/Cite/i18n/it.json b/extensions/Cite/i18n/it.json
new file mode 100644
index 00000000..48873308
--- /dev/null
+++ b/extensions/Cite/i18n/it.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "BrokenArrow",
+ "Darth Kule",
+ "Erdemaslancan",
+ "Gianfranco",
+ "Pietrodn",
+ "Horcrux92"
+ ]
+ },
+ "cite-desc": "Aggiunge i tag <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> per gestire le citazioni",
+ "cite_error": "Errore nella funzione Cite: $1",
+ "cite_error_ref_numeric_key": "Errore nell'uso del marcatore <code>&lt;ref&gt;</code>: il nome non può essere un numero intero. Usare un titolo esteso",
+ "cite_error_ref_no_key": "Errore nell'uso del marcatore <code>&lt;ref&gt;</code>: i ref vuoti non possono essere privi di nome",
+ "cite_error_ref_too_many_keys": "Errore nell'uso del marcatore <code>&lt;ref&gt;</code>: nomi non validi (ad es. numero troppo elevato)",
+ "cite_error_ref_no_input": "Errore nell'uso del marcatore <code>&lt;ref&gt;</code>: i ref privi di nome non possono essere vuoti",
+ "cite_error_references_invalid_parameters": "Errore nell'uso del marcatore <code>&lt;references&gt;</code>: parametri non ammessi, usare il marcatore <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Errore nell'uso del marcatore <code>&lt;references&gt;</code>;\nsolo il parametro \"group\" è permesso.\nUsare <code>&lt;references /&gt;</code> oppure <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Etichette di rimando personalizzate esaurite, aumentarne il numero nel messaggio <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Etichette esaurite per collegamenti personalizzati del gruppo \"$1\", aumentarne il numero nel messaggio <nowiki>[[MediaWiki:$2]]</nowiki>",
+ "cite_error_references_no_text": "Marcatore <code>&lt;ref&gt;</code> non valido; non è stato indicato alcun testo per il marcatore <code>$1</code>",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> di chiusura mancante per il marcatore <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Sono presenti dei marcatori <code>&lt;ref&gt;</code> per un gruppo chiamato \"$1\" ma non è stato trovato alcun marcatore <code>&lt;references group=\"$1\"/&gt;</code> corrispondente, o manca la chiusura <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "Il tag <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> ha attributo gruppo \"$1\" in conflitto.",
+ "cite_error_references_missing_group": "Il tag <code>&lt;ref&gt;</code> definito in <code>&lt;references&gt;</code> ha un attributo gruppo \"$1\" che non compare nel testo precedente.",
+ "cite_error_references_missing_key": "Il tag <code>&lt;ref&gt;</code> con nome \"$1\" definito in <code>&lt;references&gt;</code> non è usato nel testo precedente.",
+ "cite_error_references_no_key": "Il tag <code>&lt;ref&gt;</code> definito in <code>&lt;references&gt;</code> non ha un attributo nome.",
+ "cite_error_empty_references_define": "Il tag <code>&lt;ref&gt;</code> definito in <code>&lt;references&gt;</code> con nome \"$1\" non ha alcun contenuto.",
+ "cite_references_link_accessibility_label": "Salta",
+ "cite_references_link_many_accessibility_label": "Salta a:"
+}
diff --git a/extensions/Cite/i18n/ja.json b/extensions/Cite/i18n/ja.json
new file mode 100644
index 00000000..b9fb84aa
--- /dev/null
+++ b/extensions/Cite/i18n/ja.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aotake",
+ "Ficell",
+ "Fryed-peach",
+ "JtFuruhata",
+ "Shirayuki"
+ ]
+ },
+ "cite-desc": "引用のためのタグ <nowiki><ref[ name=id]></nowiki> および <nowiki><references/></nowiki> を追加する",
+ "cite_error": "引用エラー: $1",
+ "cite_error_ref_numeric_key": "無効な <code>&lt;ref&gt;</code> タグです。\n名前 (name 属性) に単なる整数は使用できません。説明的なものにしてください",
+ "cite_error_ref_no_key": "無効な <code>&lt;ref&gt;</code> タグです。\n引用句の内容がない場合は名前 (name 属性) が必要です",
+ "cite_error_ref_too_many_keys": "無効な <code>&lt;ref&gt;</code> タグです。\n名前 (name 属性) が無効です (数が多すぎる、など)",
+ "cite_error_ref_no_input": "無効な <code>&lt;ref&gt;</code> タグです。\n名前 (name 属性) がない場合は引用句の内容が必要です",
+ "cite_error_references_invalid_parameters": "無効な <code>&lt;references&gt;</code> タグです。\n引数は指定できません。\n<code>&lt;references /&gt;</code> を使用してください",
+ "cite_error_references_invalid_parameters_group": "無効な <code>&lt;references&gt;</code> タグです。\n使用できる引数は「group」のみです。\n<code>&lt;references /&gt;</code> または <code>&lt;references group=\"...\" /&gt;</code> を使用してください",
+ "cite_error_references_no_backlink_label": "カスタム バックリンク ラベルを使い果たしました。\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> メッセージでの定義を増やしてください。",
+ "cite_error_no_link_label_group": "グループ「$1」用のカスタム リンク ラベルを使い果たしました。\n<nowiki>[[MediaWiki:$2]]</nowiki> メッセージを編集してラベルの定義を増やしてください。",
+ "cite_error_references_no_text": "無効な <code>&lt;ref&gt;</code> タグです。\n「<code>$1</code>」という名前の引用句に対するテキストが指定されていません",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> タグに対応する <code>&lt;/ref&gt;</code> タグが不足しています",
+ "cite_error_group_refs_without_references": "「$1」という名前のグループの <code>&lt;ref&gt;</code> タグがありますが、対応する <code>&lt;references group=\"$1\"/&gt;</code> タグが見つからない、または閉じる <code>&lt;/ref&gt;</code> タグがありません",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> の <code>&lt;ref&gt;</code> タグで、group 属性「$1」が重複しています。",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code> で定義されている <code>&lt;ref&gt;</code> タグに、先行するテキスト内で使用されていない group 属性「$1」があります。",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code> で定義されている <code>&lt;ref&gt;</code> タグ (name=\"$1\") は、先行するテキスト内で使用されていません。",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code> で定義されている <code>&lt;ref&gt;</code> タグに name 属性がありません。",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code> で定義されている <code>&lt;ref&gt;</code> タグ (name=\"$1\") に内容がありません。",
+ "cite_references_link_accessibility_label": "元の位置に戻る",
+ "cite_references_link_many_accessibility_label": "以下の位置に戻る:"
+}
diff --git a/extensions/Cite/i18n/core/jut.json b/extensions/Cite/i18n/jut.json
index 896c793d..896c793d 100644
--- a/extensions/Cite/i18n/core/jut.json
+++ b/extensions/Cite/i18n/jut.json
diff --git a/extensions/Cite/i18n/jv.json b/extensions/Cite/i18n/jv.json
new file mode 100644
index 00000000..9b5fad67
--- /dev/null
+++ b/extensions/Cite/i18n/jv.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bennylin",
+ "Iwan Novirion",
+ "Meursault2004",
+ "NoiX180",
+ "Pras"
+ ]
+ },
+ "cite-desc": "Nambahaké tag <nowiki><ref[ name=id]></nowiki> lan <nowiki><references/></nowiki> kanggo kutipan (sitat)",
+ "cite_error": "Kaluputan sitat (pangutipan) $1",
+ "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> ora absah;\njenengé ora bisa namung angka integer waé. Gunakna irah-irahan (judhul) dèskriptif",
+ "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> ora absah;\nrefs tanpa isi kudu duwé jeneng",
+ "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> ora absah;\njeneng-jenengé ora absah, contoné kakèhan",
+ "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> ora absah;\nrefs tanpa jeneng kudu ana isiné",
+ "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> ora absah;\nora ana paramèter sing diidinaké.\nGunakna <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> ora absah;\nnamung paramèter \"group\" sing diolèhaké.\nGunakna <code>&lt;references /&gt;</code>, utawa <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Kentèkan label pranala balik.\nTambahna ing pesenan sistém <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Labèl pranala umum kanggo klompok \"$1\" entèk.\nTambahaké katemton nèng layang <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> ora absah; \nora ditemokaké tèks kanggo ref mawa jeneng <code>$1</code>",
+ "cite_error_included_ref": "Panutupan <code>&lt;/ref&gt;</code> kélangan tag <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Tag <code>&lt;ref&gt;</code> ditemokaké kanggo paguyuban ajeneng \"$1\", nanging tag <code>&lt;references group=\"$1\"/&gt;</code> sing ana kaitané ora ditemokaké, utawa tag panutup <code>&lt;/ref&gt;</code> ora diwénéhi",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tandha <code>&lt;references&gt;</code> nduwèni atribut klompok sing marai konflik \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> tag sing didhèfinisikaké <code>&lt;references&gt;</code> nduwèni atribut klompok \"$1\" sing ora njedhul sing tèks sakdurungé.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> tag sing didhefinisikaké mawa jeneng \"$1\" <code>&lt;references&gt;</code> ora dianggo nèng tèks sakdurungé.",
+ "cite_error_references_no_key": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di di <code>&lt;references&gt;</code> tidak memiliki nama atribut.",
+ "cite_error_empty_references_define": "Tag <code>&lt;ref&gt;</code> yang didefinisikan di di <code>&lt;references&gt;</code> dengan nama \"$1\" tidak memiliki isi.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "cite_ref-",
+ "cite_references_link_prefix": "cite_note-",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_link_one": "<li id=\"$1\">'''<span class=\"mw-cite-backlink\">[[#$2|^]]</span>''' $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">'''^''' $2</span> $3</li>",
+ "cite_references_link_many_format": "<sup>[[#$1|'''''$2''''']]</sup>",
+ "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;",
+ "cite_references_link_accessibility_label": "Mencolot munggah",
+ "cite_references_link_many_accessibility_label": "Mencolot munggah menyang:"
+}
diff --git a/extensions/Cite/i18n/ka.json b/extensions/Cite/i18n/ka.json
new file mode 100644
index 00000000..8a913b23
--- /dev/null
+++ b/extensions/Cite/i18n/ka.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "David1010",
+ "Dawid Deutschland",
+ "Nodar Kherkheulidze",
+ "გიორგიმელა"
+ ]
+ },
+ "cite-desc": "ამატებს <nowiki><ref[ name=id]></nowiki> და <nowiki><references/></nowiki> ტეგებს სქოლიოსთვის",
+ "cite_error": "ციტირების შეცდომა $1",
+ "cite_error_ref_numeric_key": "არასწორი <code>&lt;ref&gt;</code> ტეგი;\nსახელი არ უნდა შეიცავდეს ციფრებს. გამოიყენეთ აღწერილობითი სახელწოდება.",
+ "cite_error_ref_no_key": "არასწორი ტეგი <code>&lt;ref&gt;</code>;\nელემენტი უნდა შეიცავდეს სახელს.",
+ "cite_error_ref_too_many_keys": "არასწორი ტეგი <code>&lt;ref&gt;</code>;\nარასწორი სახელები, ძალიან ბევრი.",
+ "cite_error_ref_no_input": "არასწორი ტეგი <ref>; ელემენტი უნდა შეიცავდეს შინაარს.",
+ "cite_error_references_invalid_parameters": "არასწორი ტეგი <code>&lt;references&gt;</code>;\nპარამეტრები არ არის დაშვებული.\nგამოიყენეთ <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "არასწორი<code>&lt;references&gt;</code> გამოყენება: \nდაშვებულია მხოლო პარამეტრი „group“-ის გამოყენება.\nგამოიყენე <tt>&lt;references /&gt;</tt> ან <tt>&lt;references group=\"…\" /&gt;</tt>",
+ "cite_error_references_no_backlink_label": "არ არის საკმარისი სიმბოლო მზარდი ჰიპერბმულებისათვის.\nსაჭიროა გააფართოვოთ სისტემური შეტყობინება <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "მომხმარებელთა ბმულების მონიშვნები ჯგუფისათვის „$1“ დასრულდა.\nგანსაზღვრეთ დამატებითები შეტყობინებაში <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "არასწორი ტეგი <code>&lt;ref&gt;</code>;\nსქოლიოსათვის <code>$1</code> არ არის მითითებული ტექსტი",
+ "cite_error_included_ref": "დამხურავი ტეგი <code>&lt;/ref&gt;</code> დაკარგულია",
+ "cite_error_group_refs_without_references": "ჯგუფი „$1“ არსებული ტეგებისათვის <code>&lt;ref&gt;</code> ვერ მოიძებნა შესაბამისი ტეგი <code>&lt;references group=\"$1\"/&gt;</code>, ან გამოტოვებულია დამხურავი ტეგი <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "ტეგს <code>&lt;ref&gt;</code> <code>&lt;references&gt;</code>-ში გააჩნია ატრიბუტთა კონფლიქტური ჯგუფები „$1“.",
+ "cite_error_references_missing_group": "ტეგს <code>&lt;ref&gt;</code>, განმარტებულს <code>&lt;references&gt;</code>-ში, გააჩნია ჯგუფის ატრიბუტი „$1“, რომელიც ადრეულ ტექსტში არ მოიხსენიება.",
+ "cite_error_references_missing_key": "ტეგი <code>&lt;ref&gt;</code> სახელად „$1“, გარკვეული <code>&lt;references&gt;</code>-ში, არ გამოიყენება წინა ტექსტში.",
+ "cite_error_references_no_key": "ტეგს <code>&lt;ref&gt;</code>, გარკვეულს <code>&lt;references&gt;</code>-ში, სახელის ატრიბუტი არ გააჩნია.",
+ "cite_error_empty_references_define": "ტეგს <code>&lt;ref&gt;</code>, გარკვეულს <code>&lt;references&gt;</code>-ში, სახელით „$1“ არ გააჩნია შინაარსი.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
+ "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;"
+}
diff --git a/extensions/Cite/i18n/core/kk-arab.json b/extensions/Cite/i18n/kk-arab.json
index afaa65c9..afaa65c9 100644
--- a/extensions/Cite/i18n/core/kk-arab.json
+++ b/extensions/Cite/i18n/kk-arab.json
diff --git a/extensions/Cite/i18n/kk-cyrl.json b/extensions/Cite/i18n/kk-cyrl.json
new file mode 100644
index 00000000..23cd89c7
--- /dev/null
+++ b/extensions/Cite/i18n/kk-cyrl.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek",
+ "Kaztrans"
+ ]
+ },
+ "cite-desc": "Сілтемелер үшін <nowiki><ref[ name=id]></nowiki> және <nowiki><references/></nowiki> белгішелерін қолданыңыз",
+ "cite_error": "Дереккөз алу қатесі: $1",
+ "cite_error_ref_numeric_key": "Жарамсыз <code>&lt;ref&gt;</code> белгішесі;\nатау кәдімгі бүтін сан болуы мүмкін емес. Сипатауыш атау қолданыңыз",
+ "cite_error_ref_no_key": "Жарамсыз <code>&lt;ref&gt;</code> белгішесі;\nмағлұматсыз дерекөздерде атау болуы қажет",
+ "cite_error_ref_too_many_keys": "Жарамсыз <code>&lt;ref&gt;</code> белгіше; \nжарамсыз атаулар, мысалы, тым көп",
+ "cite_error_ref_no_input": "Жарамсыз <code>&lt;ref&gt;</code> белгіше;\nатаусыз дереккөздерде мағлұматы болуы қажет",
+ "cite_error_references_invalid_parameters": "Жарамсыз <code>&lt;references&gt;</code> белгіше;\nеш параметр рұқсат етілмейді, \nбылай <code>&lt;references /&gt;</code> қолданыңыз",
+ "cite_error_references_invalid_parameters_group": "Жарамсыз <code>&lt;references&gt;</code> тегі;\nтек \"group\" параметрін рұқсат етеді.\nКелесідей қолданыңыз: <code>&lt;references /&gt;</code>, or <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Өзгертпелі белгілердің саны бітті, одан әрі көбірек <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> жүйе хабарында белгілеңіз",
+ "cite_error_no_link_label_group": "\"$1\" тобы үшін өзгертпелі сілтеме белгілері бітті.\nDefine more in the <nowiki>[[MediaWiki:$2]]</nowiki> message.",
+ "cite_error_references_no_text": "Жарамсыз <code>&lt;ref&gt;</code> тегі;\nno text was provided for refs named <code>$1</code>",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> тегін <code>&lt;/ref&gt;</code> тегімен жабуды қажет етеді",
+ "cite_error_group_refs_without_references": "\"$1\" деп аталған дереккөз тобында <code>&lt;ref&gt;</code> тегі бар, бірақ тиісті <code>&lt;references group=\"$1\"/&gt;</code> тегі табылмады, немесе <code>&lt;/ref&gt;</code> жабу тегін қажет етеді",
+ "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
+ "cite_references_link_accessibility_label": "Жоғарыға көтеріліңіз",
+ "cite_references_link_many_accessibility_label": "Мынаған өту:"
+}
diff --git a/extensions/Cite/i18n/core/kk-latn.json b/extensions/Cite/i18n/kk-latn.json
index 20878df8..20878df8 100644
--- a/extensions/Cite/i18n/core/kk-latn.json
+++ b/extensions/Cite/i18n/kk-latn.json
diff --git a/extensions/Cite/i18n/core/km.json b/extensions/Cite/i18n/km.json
index 7e47800f..7e47800f 100644
--- a/extensions/Cite/i18n/core/km.json
+++ b/extensions/Cite/i18n/km.json
diff --git a/extensions/Cite/i18n/ko.json b/extensions/Cite/i18n/ko.json
new file mode 100644
index 00000000..c1e6c921
--- /dev/null
+++ b/extensions/Cite/i18n/ko.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ficell",
+ "Ilovesabbath",
+ "Kwj2772",
+ "ToePeu",
+ "아라"
+ ]
+ },
+ "cite-desc": "인용에 쓰이는 <nowiki><ref[ name=id]></nowiki>와 <nowiki><references/></nowiki> 태그를 추가합니다",
+ "cite_error": "인용 오류: $1",
+ "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n이름은 숫자가 될 수 없습니다. 설명적인 이름을 사용하세요",
+ "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n내용이 없는 주석은 이름이 있어야 합니다",
+ "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n잘못된 이름입니다, 너무 많은 등",
+ "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n이름이 없는 ref 태그는 반드시 내용이 있어야 합니다",
+ "cite_error_references_invalid_parameters": "<code>&lt;references&gt;</code> 태그가 잘못되었습니다;\n변수를 넣으면 안됩니다.\n<code>&lt;references /&gt;</code>를 사용하세요",
+ "cite_error_references_invalid_parameters_group": "<code>&lt;references&gt;</code> 태그가 잘못되었습니다;\n\"group\" 변수만 사용할 수 있습니다.\n<code>&lt;references /&gt;</code>나 <code>&lt;references group=\"...\" /&gt;</code>를 사용하세요",
+ "cite_error_references_no_backlink_label": "사용자 지정 백링크 라벨이 바닥이 났습니다.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>메시지에 더 정의하세요.",
+ "cite_error_no_link_label_group": "\"$1\" 그룹에 대해 사용자 지정 링크 레이블이 바닥이 났습니다.\n<nowiki>[[MediaWiki:$2]]</nowiki> 메시지에 더 정의하세요.",
+ "cite_error_references_no_text": "<code>&lt;ref&gt;</code> 태그가 잘못되었습니다;\n<code>$1</code>라는 이름을 가진 주석에 제공한 텍스트가 없습니다",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> 태그를 닫는 <code>&lt;/ref&gt;</code> 태그가 없습니다",
+ "cite_error_group_refs_without_references": "\"$1\"이라는 이름을 가진 그룹에 대한 <code>&lt;ref&gt;</code> 태그가 존재하지만, 이에 대응하는 <code>&lt;references group=\"$1\" /&gt;</code> 태그가 없거나, 태그를 닫는 <code>&lt;/ref&gt;</code> 태그가 없습니다",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> 안에 있는 <code>&lt;ref&gt;</code> 태그에서 \"$1\" 그룹 특성이 충돌됩니다.",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code> 안에 정의된 <code>&lt;ref&gt;</code> 태그에 이전 텍스트에 없는 \"$1\" 그룹 특성이 있습니다.",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code> 안에 정의된 \"$1\"이라는 이름을 가진 <code>&lt;ref&gt;</code> 태그가 위에서 사용되고 있지 않습니다.",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code> 안에 정의된 <code>&lt;ref&gt;</code> 태그에 이름 특성이 없습니다.",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code> 태그 안에 정의된 \"$1\"이라는 이름을 가진 <code>&lt;ref&gt;</code> 태그에 내용이 없습니다.",
+ "cite_references_link_many_format_backlink_labels": "가 나 다 라 마 바 사 아 자 차 카 타 파 하 거 너 더 러 머 버 서 어 저 처 커 터 퍼 허 고 노 도 로 모 보 소 오 조 초 코 토 포 호 구 누 두 루 무 부 수 우 주 추 쿠 투 푸 후 그 느 드 르 므 브 스 으 즈 츠 크 트 프 흐 기 니 디 리 미 비 시 이 지 치 키 티 피 히",
+ "cite_references_link_accessibility_label": "이동",
+ "cite_references_link_many_accessibility_label": "이동:"
+}
diff --git a/extensions/Cite/i18n/core/krc.json b/extensions/Cite/i18n/krc.json
index 709943d5..709943d5 100644
--- a/extensions/Cite/i18n/core/krc.json
+++ b/extensions/Cite/i18n/krc.json
diff --git a/extensions/Cite/i18n/ksh.json b/extensions/Cite/i18n/ksh.json
new file mode 100644
index 00000000..70806351
--- /dev/null
+++ b/extensions/Cite/i18n/ksh.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha",
+ "The Evil IP address"
+ ]
+ },
+ "cite-desc": "Erlaub Quelle un Referenze met <nowiki><ref[ name=\"id\"]></nowiki> un <nowiki><references /></nowiki> aanzejevve.",
+ "cite_error": "Fähler in <i lang=\"en\">cite</i> met Referenze: $1",
+ "cite_error_ref_numeric_key": "Fähler en <i lang=\"en\">cite</i>:\nEne <code>&lt;ref&gt;</code>-Name kann kei Zahl sin.\nNemm enne Tittel, dä jät säht.",
+ "cite_error_ref_no_key": "Fähler en <i lang=\"en\">cite</i>:\nE <code>&lt;ref&gt;</code> oohne Enhalt moß ene Name han.\nNemm enne Tittel, dä jät säht.",
+ "cite_error_ref_too_many_keys": "Fähler en <i lang=\"en\">cite</i>:\nZo fill <code>&lt;ref&gt;</code>-Name,\nudder kapodde ene Name.",
+ "cite_error_ref_no_input": "Fähler en <i lang=\"en\">cite</i>:\nE <code>&lt;ref&gt;</code> oohne Name moß ene Enhallt han.",
+ "cite_error_references_invalid_parameters": "Fähler en <i lang=\"en\">cite</i>:\nE <code>&lt;references&gt;</code> moß oohne Parrametere sin.\nNemm eifach <code>&lt;references /&gt;</code> un söns nix.",
+ "cite_error_references_invalid_parameters_group": "Fähler en <i lang=\"en\">cite</i>:\nE <code>&lt;references&gt;</code> darf nur dä Parrameeter „<code>group</code>“ han.\nNemm eifach <code>&lt;references /&gt;</code> udder <code>&lt;references group=\"...\" /&gt;</code> un söns nix.",
+ "cite_error_references_no_backlink_label": "Fähler en <i lang=\"en\">cite</i>:\nNit jenoch Name för retuur-Lengks.\nDonn mieh en dä Sigg <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> enndrare.",
+ "cite_error_no_link_label_group": "För de Jruppe „$1“ senn er kein Bezeichnunge för Links mieh doh.\nDonn op <nowiki>[[MediaWiki:$2]]</nowiki> noch e paa dobei.",
+ "cite_error_references_no_text": "Fähler en <i lang=\"en\">cite</i>:\nEt wohr keine Tex aanjejovve för de\n<code>&lt;ref&gt;</code>s met dämm Name „<code>$1</code>“.",
+ "cite_error_included_ref": "Hee för dat <code>&lt;ref&gt;</code> ham_mer kei zopaß <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Et sinn_er <code>&lt;ref&gt;</code>-Befähle för de Jrop „$1“ en heh dä Sigg, ävver mer han keine <code>&lt;references group=\"$1\"/&gt;</code>-Befähl jefonge, udder dä Befähl <code>&lt;/ref&gt;</code> zom zohmaache es nit doh.",
+ "cite_error_references_group_mismatch": "Dä <code>&lt;ref&gt;</code> Befähl en <code>&lt;references&gt;</code> hät en widerschpröschlesche Jroppe-Eijeschaff „$1“.",
+ "cite_error_references_missing_group": "Dä <code>&lt;ref&gt;</code> Befähl, aanjejoove em Befähl <code>&lt;references&gt;</code>, hät en Jroppe-Eijeschaff „$1“, di ävver em Täx doför nit vörjekumme es.",
+ "cite_error_references_missing_key": "Dä <code>&lt;ref&gt;</code> Befähl mem Naame „$1“, aanjejoove em Befähl <code>&lt;references&gt;</code>, es em Täx doför nit vörjekumme.",
+ "cite_error_references_no_key": "Dä <code>&lt;ref&gt;</code> Befähl, aanjejoove em Befähl <code>&lt;references&gt;</code>, hät kei Eijeschaff <code>name=</code> aanjejovve.",
+ "cite_error_empty_references_define": "Dä <code>&lt;ref&gt;</code> Befähl mem Naame „$1“, aanjejoove em Befähl <code>&lt;references&gt;</code> mem Name „$1“, hät keine Enhallt.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "fohss_noht_betreck_",
+ "cite_references_link_prefix": "fohss_noht_nommer_",
+ "cite_references_link_many_and": "&#32;",
+ "cite_references_link_accessibility_label": "Jangk noh bovve",
+ "cite_references_link_many_accessibility_label": "Jangk noh bovve op:"
+}
diff --git a/extensions/Cite/i18n/kw.json b/extensions/Cite/i18n/kw.json
new file mode 100644
index 00000000..554967e4
--- /dev/null
+++ b/extensions/Cite/i18n/kw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kernoweger",
+ "Nrowe"
+ ]
+ },
+ "cite_error": "Gwall devynna: $1"
+}
diff --git a/extensions/Cite/i18n/lb.json b/extensions/Cite/i18n/lb.json
new file mode 100644
index 00000000..30d53cc4
--- /dev/null
+++ b/extensions/Cite/i18n/lb.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Les Meloures",
+ "Robby"
+ ]
+ },
+ "cite-desc": "Setzt <nowiki><ref[ name=id]></nowiki> an <nowiki><references/></nowiki> Taggen derbäi, fir Zitatiounen.",
+ "cite_error": "Zitéierfeeler: $1",
+ "cite_error_ref_numeric_key": "Ongëltegen <code>&lt;ref&gt;</code> Tag;\nDen Numm ka keng einfach ganz Zuel sinn. Benotzt w.e.g. een Titel den eng Beschreiwung gëtt",
+ "cite_error_ref_no_key": "Ongëltegen <code>&lt;ref&gt;</code> Tag;\nReferenzen ouni Inhalt mussen een Numm hunn",
+ "cite_error_ref_too_many_keys": "Ongëltege <code>&lt;ref&gt;</code> Tag;\nongëlteg Nimm, z. Bsp. zevill",
+ "cite_error_ref_no_input": "Ongëltege <code>&lt;ref&gt;</code> Tag;\n''refs'' ouni Numm muss een Inhalt hun",
+ "cite_error_references_invalid_parameters": "Ongëltegen <code>&lt;references&gt;</code> Tag;\net si keng Parameter erlaabt.\nBenotzt <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Ongëltege <code>&lt;references&gt;</code> Tag;\nnëmmen de Parameter \"group\" ass erlaabt.\nBenotzt <code>&lt;references /&gt;</code>, oder <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_text": "Ongëlteg <code>&lt;ref&gt;</code> Markéierung;\net gouf keen Text ugi fir d'Referenze mam Numm <code>$1</code>",
+ "cite_error_included_ref": "Den Tag <code>&lt;/ref&gt;</code> feelt fir den Tag <code>&lt;ref&gt;</code> zouzemaachen",
+ "cite_error_group_refs_without_references": "D'Markéierung <code>&lt;ref&gt;</code> gëtt et fir d'Grupp \"$1\", awer d'entspriechend Markéierung <code>&lt;references group=\"$1\"/&gt;</code> gouf net fonnt oder een <code>&lt;/ref&gt;</code> feelt",
+ "cite_error_references_group_mismatch": "Den <code>&lt;ref&gt;</code>-Tag an <code>&lt;references&gt;</code> huet den Attribut \"$1\" deen am Konflikt mat deem am <code>&lt;references&gt;</code> steet.",
+ "cite_error_references_missing_group": "Deen am <code>&lt;references&gt;</code> definéierten <code>&lt;ref&gt;</code>-Tag huet en Attribut \"$1\" deen am Text virdrun net dran ass.",
+ "cite_error_references_missing_key": "Deen am <code>&lt;references&gt;</code> definéierten <code>&lt;ref&gt;</code>-Tag mam Numm \"$1\" gëtt am Text virdrun net benotzt.",
+ "cite_error_references_no_key": "D'Markéierung <code>&lt;ref&gt;</code> déi an <code>&lt;references&gt;</code> definéiert ass huet keng Nummeegeschaft.",
+ "cite_error_empty_references_define": "D'Markéierung <code>&lt;ref&gt;</code> déi am <code>&lt;references&gt;</code> mat dem Numm « $1 » definéiert ass, ass eidel.",
+ "cite_references_link_accessibility_label": "No uewe sprangen",
+ "cite_references_link_many_accessibility_label": "Eropsprangen op:"
+}
diff --git a/extensions/Cite/i18n/lez.json b/extensions/Cite/i18n/lez.json
new file mode 100644
index 00000000..520acb11
--- /dev/null
+++ b/extensions/Cite/i18n/lez.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Soul Train"
+ ]
+ },
+ "cite_references_link_many_format_backlink_labels": "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023"
+}
diff --git a/extensions/Cite/i18n/li.json b/extensions/Cite/i18n/li.json
new file mode 100644
index 00000000..6a665223
--- /dev/null
+++ b/extensions/Cite/i18n/li.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ooswesthoesbes",
+ "Pahles"
+ ]
+ },
+ "cite-desc": "Voeg <nowiki><ref[ name=id]></nowiki> en <nowiki><references/></nowiki> tags toe veur citate",
+ "cite_error": "Citeerfout: $1",
+ "cite_error_ref_numeric_key": "Ónzjuuste tag <code>&lt;ref&gt;</code>; de naam kin gein simpele integer zeen, gebroek 'ne besjrievendje titel",
+ "cite_error_ref_no_key": "Ónzjuuste tag <code>&lt;ref&gt;</code>; refs zónger inhoud mótte 'ne naam höbbe",
+ "cite_error_ref_too_many_keys": "Ónzjuuste tag <code>&lt;ref&gt;</code>; ónzjuuste name, beveurbeildj te väöl",
+ "cite_error_ref_no_input": "Ónzjuuste tag <code>&lt;ref&gt;</code>; refs zónger naam mótte inhoud höbbe",
+ "cite_error_references_invalid_parameters": "Ónzjuuste tag <code>&lt;references&gt;</code>; paramaeters zeen neet toegestaon, gebroek <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Onjuuste tag <code>&lt;references&gt;</code>;\nallein de paramaeter \"group\" is toegestaon.\nGebruik <code>&lt;references /&gt;</code>, of <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "'t Aantal besjikbare backlinklabels is opgebroek. Gaef meer labels op in 't berich <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "'t Aantal aangepasde verwiezingslabels veure groep \"$1\" is oetgepöt.\nDoe kans d'r mier insjtelle in 't sysyeemberich <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Ónzjuuste tag <code>&lt;ref&gt;</code>; d'r is gein teks opgegaeve veur refs mit de naam <code>$1</code>",
+ "cite_error_included_ref": "Gein sjloetteike <code>&lt;/ref&gt;</code> veur de tag <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "d'r Besteit 'ne tag <code>&lt;ref&gt;</code> veure groep \"$1\", meh d'r is geine bebehuuerendje tag <code>&lt;references group=\"$1\"/&gt;</code> gevónje",
+ "cite_error_references_group_mismatch": "De tag <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> conflicteert mit groepseigesjap \"$1\".",
+ "cite_error_references_missing_group": "De tag <code>&lt;ref&gt;</code> dae is gedefinieerd in <code>&lt;references&gt;</code> haet de groepseigesjap \"$1\" neet ierder in de tekst veurkump.",
+ "cite_error_references_missing_key": "De tag <code>&lt;ref&gt;</code> mit de naam \"$1\" gedefiniteerd in <code>&lt;references&gt;</code> weurt neet ierder in de teks gebroek.",
+ "cite_error_references_no_key": "De tag <code>&lt;ref&gt;</code> dae is gedefinieerd in <code>&lt;references&gt;</code> haet geine eigesjapsnaam.",
+ "cite_error_empty_references_define": "De tag <code>&lt;ref&gt;</code> dae is gedefinieerd in <code>&lt;references&gt;</code> mit de naam \"$1\" haet geinen inhawd."
+}
diff --git a/extensions/Cite/i18n/lrc.json b/extensions/Cite/i18n/lrc.json
new file mode 100644
index 00000000..db7dd90a
--- /dev/null
+++ b/extensions/Cite/i18n/lrc.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bonevarluri",
+ "Mogoeilor"
+ ]
+ },
+ "cite-desc": " <nowiki><ref[ name=id]></nowiki> و <nowiki><سرچشمه یا/></nowiki> tags,و تگیا نه د گوتنیا اضاف بکید",
+ "cite_error": "خطا جاگه:$1",
+ "cite_error_ref_no_key": "نامعتور<code>&lt;ref&gt;</code> سردیس;\nهیچ مینونه ای که واس نومش دیار با دش نئ",
+ "cite_error_ref_too_many_keys": "نامعتور<code>&lt;ref&gt;</code> سردیس؛\nنومیا نامعتور، همچنو فره ئه",
+ "cite_error_ref_no_input": "نامعتور<code>&lt;ref&gt;</code> سردیس;\nهیچ مینونه ای که واس نومش دیار با دش نئ",
+ "cite_error_references_invalid_parameters": "نامعتور<code>&lt;سرچشمه یا&gt;</code> سردیس;\nهیچ پارامتری صلادار نئ.\nوه کار گرتن<code>&lt;سرچشمه یا/&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "نامعتور<code>&lt;سرچشمه یا&gt;</code> سردیس;\nفقط پارامتر \"دسه\" صلاداره.\nوه کار گرتن <code>&lt;references /&gt;</code>, or <code>&lt;سرچشمه یاgroup=\"...\" /&gt;</code>",
+ "cite_error_references_no_text": "نامعتور <code>&lt;ref&gt;</code> سردیس;\nهیچ نیسسه یی سی چیا نوم نیائه دیار نکرده<code>$1</code>",
+ "cite_error_included_ref": "Closing <code>&lt;/ref&gt;</code> گم بیه سی <code>&lt;ref&gt;</code> سردیس",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> سردیسی سی دسه ای که د\"$1\" نوم دیاره , ولی دیاری نکرده<code>&lt;دسه سرچشمه=\"$1\"/&gt;</code> tag پیدا نبی, یا بسته بیه<code>&lt;/ref&gt;</code> گم بیه",
+ "cite_references_link_accessibility_label": "بالا پرسن",
+ "cite_references_link_many_accessibility_label": "پرستن د"
+}
diff --git a/extensions/Cite/i18n/lt.json b/extensions/Cite/i18n/lt.json
new file mode 100644
index 00000000..8610680a
--- /dev/null
+++ b/extensions/Cite/i18n/lt.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Garas",
+ "Homo",
+ "Matasg"
+ ]
+ },
+ "cite-desc": "Prideda <nowiki><ref[ name=id]></nowiki> ir <nowiki><references/></nowiki> žymes citavimui",
+ "cite_error": "Citavimo klaida $1",
+ "cite_error_ref_numeric_key": "Neleistina <code>&lt;ref&gt;</code> gairė; vardas negali būti tiesiog skaičius, naudokite tekstinį pavadinimą",
+ "cite_error_ref_no_key": "Neleistina <code>&lt;ref&gt;</code> gairė; nuorodos be turinio turi turėti vardą",
+ "cite_error_ref_too_many_keys": "Neleistina <code>&lt;ref&gt;</code> gairė; neleistini vardai, pvz., per daug",
+ "cite_error_ref_no_input": "Neleistina <code>&lt;ref&gt;</code> gairė; nuorodos be vardo turi turėti turinį",
+ "cite_error_references_invalid_parameters": "Neleistina <code>&lt;references&gt;</code> gairė; neleidžiami jokie parametrai, naudokite <code>&lt;references /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Baigėsi antraštės.\nNurodykite daugiau <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> sisteminiame tekste",
+ "cite_error_included_ref": "Trūksta uždaromojo <code>&lt;/ref&gt;</code> žymei <code>&lt;ref&gt;</code>"
+}
diff --git a/extensions/Cite/i18n/lv.json b/extensions/Cite/i18n/lv.json
new file mode 100644
index 00000000..15ff3757
--- /dev/null
+++ b/extensions/Cite/i18n/lv.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "GreenZeb",
+ "Marozols",
+ "Xil"
+ ]
+ },
+ "cite-desc": "Pievieno <nowiki><ref[ name=id]></nowiki> un <nowiki><references/></nowiki> tagus, atsaucēm",
+ "cite_error": "Kļūda atsaucē: $1"
+}
diff --git a/extensions/Cite/i18n/mai.json b/extensions/Cite/i18n/mai.json
new file mode 100644
index 00000000..bf4ca00f
--- /dev/null
+++ b/extensions/Cite/i18n/mai.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tulsi Bhagat"
+ ]
+ },
+ "cite_error": "उल्लेख गल्ती: $1"
+}
diff --git a/extensions/Cite/i18n/core/mg.json b/extensions/Cite/i18n/mg.json
index e07ae517..e07ae517 100644
--- a/extensions/Cite/i18n/core/mg.json
+++ b/extensions/Cite/i18n/mg.json
diff --git a/extensions/Cite/i18n/min.json b/extensions/Cite/i18n/min.json
new file mode 100644
index 00000000..b1aea1ad
--- /dev/null
+++ b/extensions/Cite/i18n/min.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iwan Novirion"
+ ]
+ },
+ "cite-desc": "Manambahkan tag <nowiki><ref[ name=id]></nowiki> jo <nowiki><references/></nowiki> untuak kutipan",
+ "cite_error": "Kutipan rusak: $1",
+ "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> indak sah;\nparameter indak buliah angko atau/hurup sadarano.\nGunoan namo nan deskriptif",
+ "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> indak sah;\nrujuakan kosong harus ado namo",
+ "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> indak sah;\nparameter indak sah; mis. talampau panjang",
+ "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> indak sah;\nrujuakan indak banamo harus ado isi",
+ "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> indak sah;\nindak buliah ado parameter.\nGunoan <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> indak sah;\nparameter \"group\" sajo nan buliah.\nGunoan <code>&lt;references /&gt;</code>, atau <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Label pautan baliak habih.\nCubo tambahkan di <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Label pautan untuak grup \"$1\" habih.\nTantukan labiah lanjuik dalam <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> indak sah; \nindak ado teks untuak ref banamo <code>$1</code>",
+ "cite_error_included_ref": "Tag <code>&lt;ref&gt;</code> harus ditutuik jo <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Tag <code>&lt;ref&gt;</code> ado untuak grup banamo \"$1\", tapi indak ado <code>&lt;references group=\"$1\"/&gt;</code>",
+ "cite_error_references_group_mismatch": "Tag <code>&lt;ref&gt;</code> pado <code>&lt;references&gt;</code> ado namo grup \"$1\" nan konflik.",
+ "cite_error_references_missing_group": "Tag <code>&lt;ref&gt;</code> pado <code>&lt;references&gt;</code> indak ado namo grup \"$1\".",
+ "cite_error_references_missing_key": "Tag <code>&lt;ref&gt;</code> jo namo \"$1\" pado <code>&lt;references&gt;</code> indak ado.",
+ "cite_error_references_no_key": "Tag <code>&lt;ref&gt;</code> pado <code>&lt;references&gt;</code> indak ado aprameter namo.",
+ "cite_error_empty_references_define": "Tag <code>&lt;ref&gt;</code> pado <code>&lt;references&gt;</code> nan banamo \"$1\" indak ado isi.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "cite_ref-",
+ "cite_references_link_prefix": "cite_note-",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_link_one": "<li id=\"$1\">'''<span class=\"mw-cite-backlink\">[[#$2|^]]</span>''' $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">'''^''' $2</span> $3</li>",
+ "cite_references_link_many_format": "<sup>[[#$1|'''''$2''''']]</sup>",
+ "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;"
+}
diff --git a/extensions/Cite/i18n/mk.json b/extensions/Cite/i18n/mk.json
new file mode 100644
index 00000000..b7cce640
--- /dev/null
+++ b/extensions/Cite/i18n/mk.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06",
+ "Brest"
+ ]
+ },
+ "cite-desc": "Додава ознаки <nowiki><ref[ name=id]></nowiki> и <nowiki><references/></nowiki>, за цитирања",
+ "cite_error": "Грешка во наводот: $1.",
+ "cite_error_ref_numeric_key": "Погрешна ознака <code>&lt;ref&gt;</code>;\nимето не може да биде број. Употребете описен наслов",
+ "cite_error_ref_no_key": "Погрешна ознака <code>&lt;ref&gt;</code>;\nнаводите без содржина мора да имаат име",
+ "cite_error_ref_too_many_keys": "Погрешна ознака<code>&lt;ref&gt;</code>;\nпогрешни имиња, т.е. ги има премногу",
+ "cite_error_ref_no_input": "Погрешна ознака <code>&lt;ref&gt;</code>;\nнаводите без име мораат да имаат содржина",
+ "cite_error_references_invalid_parameters": "Погрешна ознака<code>&lt;references&gt;</code>;\nупотребата на параметри не е дозволена.\nУпотребете <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Погрешна ознака <code>&lt;references&gt;</code>;\nдопуштен само параметарот „group“.\nУпотребете <code>&lt;references /&gt;</code> или <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Нема доволно натписи за повратни врски.\nОпределете уште натписи во <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Се потрошија натписите на прилагодените врски за групата „$1“.\nОпределете уште во пораката <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Погрешна ознака <code>&lt;ref&gt;</code>;\nнема зададено текст за наводите по име <code>$1</code>",
+ "cite_error_included_ref": "На ознаката <code>&lt;ref&gt;</code> ѝ недостасува ознака за затворање &lt;/ref&gt",
+ "cite_error_group_refs_without_references": "Има ознаки <code>&lt;ref&gt;</code> за група именувана како „$1“, но нема соодветна ознака <code>&lt;references group=\"$1\"/&gt;</code>, или пак недостасува завршно <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "Ознаката <code>&lt;ref&gt;</code> во <code>&lt;references&gt;</code> има спротиставен групен атрибут „$1“.",
+ "cite_error_references_missing_group": "Ознаката <code>&lt;ref&gt;</code> определена во <code>&lt;references&gt;</code> има групен атрибут „$1“ кој не се јавува во претходен текст.",
+ "cite_error_references_missing_key": "Ознаката <code>&lt;ref&gt;</code> со име „$1“ определена во <code>&lt;references&gt;</code> не се користи во претходен текст.",
+ "cite_error_references_no_key": "Ознаката <code>&lt;ref&gt;</code> определена во <code>&lt;referencesgt;</code> нема именски атрибут.",
+ "cite_error_empty_references_define": "Ознаката <code>&lt;ref&gt;</code> определена во <code>&lt;references&gt;</code> со име „$1“ нема содржина.",
+ "cite_references_link_many_format_backlink_labels": "а б в г д ѓ е ж з ѕ и ј к л љ м н њ о п р с т ќ у ф х ц ч џ ш аа аб ав аг ад аѓ ае аж аз аѕ аи ај ак ал аљ ам ан ањ ао ап ар ас ат аќ ау аф ах ац ач аџ аш ба бб бв бг бд бѓ бе бж бз бѕ би бј бк бл бљ бм бн бњ бо бп бр бс бт бќ бу бф бх бц бч бџ бш ва вб вв вг вд вѓ ве вж вз бѕ ви вј вк вл вљ вм вн вњ во вп вр вс вт вќ ву вф вх вц вч вџ вш га гб гв гг гд гѓ ге гж гз гѕ ги гј гк гл гљ гм гн гњ го гп гр гс гт гќ гу гф гх гц гч гџ гш да дб дв дг дд дѓ де дж дз дѕ ди дј дк дл дљ дм дн дњ до дп др дс дт дќ ду дф дх дц дч дџ дш ѓа ѓб ѓв ѓг ѓд ѓе ѓж ѓз ѓѕ ѓи ѓј ѓк ѓл ѓљ ѓм ѓн ѓњ ѓо ѓп ѓр ѓс ѓт ѓќ ѓу ѓф ѓх ѓц ѓч ѓџ ѓш еа еб ев ег ед еѓ ее еж ез еѕ еи еј ек ел ељ ем ен ењ ео еп ер ес ет еќ еу еф ех ец еч еџ еш жа жб жв жг жд жѓ же жж жз жѕ жи жј жк жл жљ жм жн жњ жо жп жр жс жт жќ жу жф жх жц жч жџ жш за зб зв зг зд зѓ зе зж зз зѕ зи зј зк зл зљ зм зн зњ зо зп зр зс зт зќ зу зф зх зц зч зџ зш ѕа ѕб ѕв ѕг ѕд ѕѓ ѕе ѕж ѕз ѕѕ ѕи ѕј ѕк ѕл ѕљ ѕм ѕн ѕњ ѕо ѕп ѕр ѕс ѕт ѕќ ѕу ѕф ѕх ѕц ѕч ѕџ ѕш иа иб ив иг ид иѓ ие иж из иѕ ии иј ик ил иљ им ин ињ ио ип ир ис ит иќ иу иф их иц ич иџ иш ја јб јв јг јд јѓ је јж јз јѕ ји јј јк јл јљ јм јн јњ јо јп јр јс јт јќ ју јф јх јц јч јџ јш ка кб кв кг кд кѓ ке кж кз кѕ ки кј кк кл кљ км кн књ ко кп кр кс кт кќ ку кф кх кц кч кџ кш ла лб лв лг лд лѓ ле лж лз лѕ ли лј лк лл лљ лм лн лњ ло лп лр лс лт лќ лу лф лх лц лч лџ лш ља љб љв љг љд љѓ ље љж љз љѕ љи љј љк љл љљ љм љн љњ љо љп љр љс љт љќ љу љф љх љц љч љџ љш ма мб мв мг мд мѓ ме мж мз мѕ ми мј мк мл мљ мм мн мњ мо мп мр мс мт мќ му мф мх мц мч мџ мш на нб нв нг нд нѓ не нж нз нѕ ни нј нк нл нљ нм нн нњ но нп нр нс нт нќ ну нф нх нц нч нџ нш ња њб њв њг њд њѓ ње њж њз њѕ њи њј њк њл њљ њм њн њњ њо њп њр њс њт њќ њу њф њх њц њч њџ њш оа об ов ог од оѓ ое ож оз оѕ ои ој ок ол ољ ом он оњ оо оп ор ос от оќ оу оф ох оц оч оџ ош па пб пв пг пд пѓ пе пж пз пѕ пи пј пк пл пљ пм пн пњ по пп пр пс пт пќ пу пф пх пц пч пџ пш ра рб рв рг рд рѓ ре рж рз рѕ ри рј рк рл рљ рм рн рњ ро рп рр рс рт рќ ру рф рх рц рч рџ рш са сб св сг сд сѓ се сж сз сѕ си сј ск сл сљ см сн сњ со сп ср сс ст сќ су сф сх сц сч сџ сш та тб тв тг тд тѓ те тж тз тѕ ти тј тк тл тљ тм тн тњ то тп тр тс тт тќ ту тф тх тц тч тџ тш ќа ќб ќв ќг ќд ќѓ ќе ќж ќз ќѕ ќи ќј ќк ќл ќљ ќм ќн ќњ ќо ќп ќр ќс ќт ќќ ќу ќф ќх ќц ќч ќџ ќш уа уб ув уг уд уѓ уе уж уз уѕ уи уј ук ул уљ ум ун уњ уо уп ур ус ут уќ уу уф ух уц уч уџ уш фа фб фв фг фд фѓ фе фж фз фѕ фи фј фк фл фљ фм фн фњ фо фп фр фс фт фќ фу фф фх фц фч фџ фш ха хб хв хг хд хѓ хе хж хз хѕ хи хј хк хл хљ хм хн хњ хо хп хр хс хт хќ ху хф хх хц хч хџ хш ца цб цв цг цд цѓ це цж цз цѕ ци цј цк цл цљ цм цн цњ цо цп цр цс цт цќ цу цф цх цц цч цџ цш ча чб чв чг чд чѓ че чж чз чѕ чи чј чк чл чљ чм чн чњ чо чп чр чс чт чќ чу чф чх чц чч чџ чш џа џб џв џг џд џѓ џе џж џз џѕ џи џј џк џл џљ џм џн џњ џо џп џр џс џт џќ џу џф џх џц џч џџ џш ша шб шв шг шд шѓ ше шж шз шѕ ши шј шк шл шљ шм шн шњ шо шп шр шс шт шќ шу шф шх шц шч шџ шш",
+ "cite_references_link_accessibility_label": "Следно",
+ "cite_references_link_many_accessibility_label": "Отиди кај:"
+}
diff --git a/extensions/Cite/i18n/ml.json b/extensions/Cite/i18n/ml.json
new file mode 100644
index 00000000..397c87b5
--- /dev/null
+++ b/extensions/Cite/i18n/ml.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Praveenp",
+ "Shijualex"
+ ]
+ },
+ "cite-desc": "അവലംബം ചേർക്കുവാൻ ഉപയോഗിക്കാനുള്ള <nowiki><ref[ name=id]></nowiki>, <nowiki><references/></nowiki> എന്നീ ടാഗുകൾ ചേർക്കുന്നു",
+ "cite_error": "ഉദ്ധരിച്ചതിൽ പിഴവ്: $1",
+ "cite_error_ref_numeric_key": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\nനാമത്തിൽ സംഖ്യ മാത്രമായി അനുവദനീയമല്ല. എന്തെങ്കിലും ലഘുവിവരണം ഉപയോഗിക്കുക.",
+ "cite_error_ref_no_key": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\nഉള്ളടക്കമൊന്നുമില്ലാത്ത അവലംബത്തിനും ഒരു പേരു വേണം.",
+ "cite_error_ref_too_many_keys": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\nഅസാധുവായ പേരുകൾ, ഉദാ: too many",
+ "cite_error_ref_no_input": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\nപേരില്ലാത്ത അവലംബത്തിനു ഉള്ളടക്കമുണ്ടായിരിക്കണം.",
+ "cite_error_references_invalid_parameters": "അസാധുവായ <code>&lt;references&gt;</code> ടാഗ്;\nറെഫറൻസ് ടാഗിനകത്ത് ചരങ്ങൾ അനുവദനീയമല്ല. പകരം ഇങ്ങനെ <code>&lt;references /&gt;</code> ചെയ്യാവുന്നതാണ്.",
+ "cite_error_references_invalid_parameters_group": "അസാധുവായ <code>&lt;references&gt;</code> ടാഗ്;\nറെഫറൻസ് ടാഗിനകത്ത് \"group\" ചരം മാത്രമേ അനുവദനീയമായുള്ളൂ. പകരം <code>&lt;references /&gt;</code> എന്ന്, അല്ലെങ്കിൽ <code>&lt;references group=\"...\" /&gt;</code> എന്ന് ചെയ്യാവുന്നതാണ്.",
+ "cite_error_references_no_backlink_label": "പിൻകണ്ണികൾക്കായി നൽകുന്ന ഇച്ഛാനുസരണ കുറികൾ തീർന്നുപോയിരിക്കുന്നു.\nകൂടുതൽ [[MediaWiki:Cite references link many format backlink labels]] സന്ദേശത്തിൽ നിർവചിക്കുക.",
+ "cite_error_no_link_label_group": "\"$1\" സംഘത്തിലെ കണ്ണികൾക്കായി നൽകുന്ന ഇച്ഛാനുസരണ കുറികൾ തീർന്നുപോയിരിക്കുന്നു.\nകൂടുതൽ <nowiki>[[MediaWiki:$2]]</nowiki> സന്ദേശത്തിൽ നിർവചിക്കുക.",
+ "cite_error_references_no_text": "അസാധുവായ <code>&lt;ref&gt;</code> ടാഗ്;\n<code>$1</code> എന്ന അവലംബങ്ങൾക്ക് ടെക്സ്റ്റ് ഒന്നും കൊടുത്തിട്ടില്ല.",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> റ്റാഗിനു <code>&lt;/ref&gt;</code> എന്ന അന്ത്യറ്റാഗ് നൽകിയിട്ടില്ല",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> റ്റാഗുകൾ \"$1\" സംഘത്തിൽ ഉണ്ട്, പക്ഷേ ബന്ധപ്പെട്ട <code>&lt;references group=\"$1\"/&gt;</code> റ്റാഗ് കണ്ടെത്താനായില്ല അല്ലെങ്കിൽ അടയ്ക്കാനുള്ള <code>&lt;/ref&gt;</code> നൽകിയിട്ടില്ല",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> റ്റാഗിലേയും <code>&lt;references&gt;</code> എന്നതിലേയും സംഘ ഘടകമായ \"$1\" ഒത്തുപോകുന്നില്ല.",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> റ്റാഗ് നിർവചിച്ചിട്ടുണ്ടെങ്കിലും <code>&lt;references&gt;</code> എന്നതിലുള്ള സംഘ ഘടകം \"$1\" ആദ്യ എഴുത്തിൽ കാണുന്നില്ല.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> റ്റാഗ് \"$1\" എന്ന പേരോടെ <code>&lt;references&gt;</code> എന്നതിൽ നിർവചിച്ചിട്ടുണ്ടെങ്കിലും ആദ്യ എഴുത്തിൽ ഉപയോഗിക്കുന്നില്ല.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> റ്റാഗ് <code>&lt;references&gt;</code> എന്നതിൽ നിർവചിച്ചിട്ടുണ്ടെങ്കിലും നാമ ഘടകം നൽകിയിട്ടില്ല.",
+ "cite_error_empty_references_define": " <code>&lt;references&gt;</code> ആവശ്യത്തിനായി \"$1\" എന്ന പേരിൽ നിർ‌വചിക്കപ്പെട്ട <code>&lt;ref&gt;</code> റ്റാഗിന് ഉള്ളടക്കമൊന്നുമില്ല.",
+ "cite_reference_link_prefix": "ഉദ്ധരിണി_അവലംബം-",
+ "cite_references_link_prefix": "ഉദ്ധരിണി_കുറിപ്പ്-",
+ "cite_references_link_accessibility_label": "മുകളിലേയ്ക്ക്",
+ "cite_references_link_many_accessibility_label": "മുകളിൽ ഇവിടേയ്ക്ക്:"
+}
diff --git a/extensions/Cite/i18n/core/mn.json b/extensions/Cite/i18n/mn.json
index 907ee5af..907ee5af 100644
--- a/extensions/Cite/i18n/core/mn.json
+++ b/extensions/Cite/i18n/mn.json
diff --git a/extensions/Cite/i18n/mr.json b/extensions/Cite/i18n/mr.json
new file mode 100644
index 00000000..71310674
--- /dev/null
+++ b/extensions/Cite/i18n/mr.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaajawa",
+ "Kaustubh",
+ "Mahitgar",
+ "Rahuldeshmukh101",
+ "V.narsikar"
+ ]
+ },
+ "cite-desc": "<nowiki><ref[ name=id]></nowiki> व <nowiki><references/></nowiki> हे दोन संदर्भ देण्यासाठी वापरण्यात येणारे शब्द जोडल्या जातील.",
+ "cite_error": "त्रूटी उधृत करा: $1",
+ "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> चुकीचा कोड; नाव हे पूर्णांकी संख्या असू शकत नाही, कृपया माहितीपूर्ण शीर्षक द्या",
+ "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> चुकीचा कोड; रिकाम्या संदर्भांना नाव असणे गरजेचे आहे",
+ "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> चुकीचा कोड; चुकीची नावे, उदा. खूप सारी",
+ "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> चुकीचा कोड; निनावी संदर्भांमध्ये माहिती असणे गरजेचे आहे",
+ "cite_error_references_invalid_parameters": "<code>&lt;references&gt;</code> हा चुकीचा वापर आहे; यामधे पॅरामीटर्स देणे निषिद्ध आहे.,\n<code>&lt;references /&gt;</code> असा कोड वापरा",
+ "cite_error_references_invalid_parameters_group": "चुकीची <code>&lt;references&gt;</code> खूण; फक्त पॅरॅमीटर चा गट वापरता येईल, <code>&lt;references /&gt;</code> किंवा <code>&lt;references group=\"...\" /&gt;</code> चा वापर करा",
+ "cite_error_references_no_backlink_label": "तयार केलेली मागीलदुवे देणारी नावे संपलेली आहेत, अधिक नावे <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> या प्रणाली संदेशात लिहा",
+ "cite_error_no_link_label_group": "\"$1\" करिता नमूदकेलेल्या कस्टम लिंक खूणा संपल्या .\n<nowiki>[[MediaWiki:$2]]</nowiki> संदेशात अधिक खूणा नमूद करा",
+ "cite_error_references_no_text": "<code>&lt;ref&gt;</code> चुकीचा कोड; <code>$1</code> नावाने दिलेल्या संदर्भांमध्ये काहीही माहिती नाही",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> ला बंद करणारी <code>&lt;/ref&gt;</code> ही खूणपताका गायब आहे.",
+ "cite_error_group_refs_without_references": "\"$1\" नावाच्या गटाकरिता <code>&lt;ref&gt;</code>खूणपताका उपलब्ध आहेत, पण संबंधीत <code>&lt;references group=\"$1\"/&gt;</code> खूण मिळाली नाही.",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>मधील खूणपताकेस<code>&lt;ref&gt;</code> खूणांशी विसंवाद असणारे group attribute \"$1\" आहे.",
+ "cite_error_references_missing_group": "गट \"$1\" मधील <code>&lt;ref&gt;</code> खूणपताका <code>&lt;references&gt;</code> ह्या पूर्वी वापल्या गेलेल्या नाहीत.",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code> ह्या मध्ये टाकलेला <code>&lt;ref&gt;</code> \"$1\" ह्या नावाची खूणपताका ह्या पूर्वी वापरण्यात आलेली नाही.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code>खूणपताकेत नमूद गोष्टींना <code>&lt;references&gt;</code> ला नाम-गुणधर्म नाहीत.",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code>खूणपताकेत नमूद गोष्टींना, <code>&lt;references&gt;</code> ज्या \"$1\" ह्या नावाने संबोधल्या आहेत, त्यात माहिती नाही.",
+ "cite_references_link_accessibility_label": "वर उडी मारा",
+ "cite_references_link_many_accessibility_label": "ला वर उडी मारा:"
+}
diff --git a/extensions/Cite/i18n/core/ms.json b/extensions/Cite/i18n/ms.json
index e8a0fc92..e8a0fc92 100644
--- a/extensions/Cite/i18n/core/ms.json
+++ b/extensions/Cite/i18n/ms.json
diff --git a/extensions/Cite/i18n/mt.json b/extensions/Cite/i18n/mt.json
new file mode 100644
index 00000000..0c750ce8
--- /dev/null
+++ b/extensions/Cite/i18n/mt.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrisportelli"
+ ]
+ },
+ "cite-desc": "Iżżid it-tikketti <nowiki><ref[ name=id]></nowiki> u <nowiki><references/></nowiki> għaċ-ċitazzjonijiet",
+ "cite_error": "Żball fiċ-ċitazzjoni: $1",
+ "cite_error_ref_numeric_key": "Tikketta <code>&lt;ref&gt;</code> invalida;\nl-isem ma jistax ikun numru sħiħ sempliċi. Uża titlu deskrittiv",
+ "cite_error_ref_no_key": "Tikketta <code>&lt;ref&gt;</code> invalida;\nrefs mingħajr kontenut għandhom ikollhom isem",
+ "cite_error_ref_too_many_keys": "Tikketta <code>&lt;ref&gt;</code> invalida;\nismijiet invalidi, e.ż. numru wisq kbir",
+ "cite_error_ref_no_input": "Żball fl-użu tat-tikketta <code>&lt;ref&gt;</code>; refs mingħajr isem ma jistgħux ikunu vojta",
+ "cite_error_references_invalid_parameters": "Żball fl-użu tat-tikketta <code>&lt;references&gt;</code>; il-parametri mhumiex permessi. Uża <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Tikketta <code>&lt;references&gt;</code> invalida;\nil-paramettru \"group\" biss huwa permess.\nUża <code>&lt;references /&gt;</code> jew <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_text": "Tikketta <code>&lt;ref&gt;</code> invalida;\nl-ebda test ma ngħata għar-refs bl-isem <code>$1</code>",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> tal-għeluq hija nieqsa għat-tikketta <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "It-tikketti <code>&lt;ref&gt;</code> jeżistu għal grupp bl-isem \"$1\" imma l-ebda tikketta <code>&lt;references group=\"$1\"/&gt;</code> rispettiva ma nstabet",
+ "cite_error_references_group_mismatch": "It-tikketta <code>&lt;ref&gt;</code> f'<code>&lt;references&gt;</code> għandha l-attribut tal-grupp \"$1\" f'kunflitt.",
+ "cite_error_references_missing_group": "It-tikketta <code>&lt;ref&gt;</code> definita f'<code>&lt;references&gt;</code> għandha l-attribut tal-grupp \"$1\" li ma jidhirx fit-test preċedenti.",
+ "cite_error_references_missing_key": "It-tikketta <code>&lt;ref&gt;</code> bl-isem \"$1\" definita f'<code>&lt;references&gt;</code> mhix użata fit-test preċedenti.",
+ "cite_error_references_no_key": "It-tikketta <code>&lt;ref&gt;</code> definita f'<code>&lt;references&gt;</code> m'għandiex l-attribut tal-isem.",
+ "cite_error_empty_references_define": "It-tikketta <code>&lt;ref&gt;</code> definita f'<code>&lt;references&gt;</code> bl-isem \"$1\" m'għandha l-ebda kontenut."
+}
diff --git a/extensions/Cite/i18n/nap.json b/extensions/Cite/i18n/nap.json
new file mode 100644
index 00000000..b008894c
--- /dev/null
+++ b/extensions/Cite/i18n/nap.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "cite-desc": "Azzecca 'e tag <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> p' 'e citaziune",
+ "cite_error": "Errore dint'a funzione Cite: $1",
+ "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> invalido;\n'o nomme nun ò essere surtanto n'intero. Ausate nu titolo descrittivo",
+ "cite_error_ref_no_key": "Codece 'e tag <code>&lt;ref&gt;</code> invalido;\n'e riferimente ch' 'e cuntenute abbacante hann'a tenè nu nomme",
+ "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> invalido;\nnomme invalido, p'esembio troppo luongo",
+ "cite_error_ref_no_input": "Codece 'e tag <code>&lt;ref&gt;</code> invalido;\n'e riferimente c' 'o nomme abbacante hann'a tenè nu cuntenuto",
+ "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> invalide;\nnun se pò mettere nisciuno parametro.\nAusate <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Codece 'e tag <code>&lt;references&gt;</code> invalido;\nsurtanto 'o parametro \"group\" è premmesso.\nAusate <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "L'etichette personalizzate p' 'e cullegamiente 'e rezza se so' fernute\nPe' piacere, definite nu poco 'e cchiu dint' 'a mmasciata <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Ll'etichette personalizzate d' 'e cullegamiente p' 'o gruppo \"$1\" se so' fernute.\nPruvate a ne definì 'e cchiù int' 'a mmasciata 'e <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> invalido;\nnisciuno testo era previsto p' 'e riferimiente nummenate <code>$1</code>",
+ "cite_error_included_ref": "A nchiusa <code>&lt;/ref&gt;</code> nun se trova p' 'o tag <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "'O tag <code>&lt;ref&gt;</code> esiste p' 'o gruppo annummenato \"$1\", ma nun currisponne a 'o tag accucchiato <code>&lt;references group=\"$1\"/&gt;</code>, o a nu tag 'e nchiusa <code>&lt;/ref&gt;</code> manco",
+ "cite_error_references_group_mismatch": "'O tag <code>&lt;ref&gt;</code> tag int' 'e <code>&lt;references&gt;</code> tène cunflitte cu l'attribbute d' 'o gruppo \"$1\".",
+ "cite_error_references_missing_group": "'O tag <code>&lt;ref&gt;</code> definito int'a <code>&lt;references&gt;</code> ave n'attribbuto 'e gruppo \"$1\" cosa ca nun se veresse dint' 'o testo 'e primma.",
+ "cite_error_references_missing_key": "'O tag <code>&lt;ref&gt;</code> c' 'o nomme \"$1\" definito int'a <code>&lt;references&gt;</code> nun è ausato dint' 'o testo 'e primma.",
+ "cite_error_references_no_key": "'O tag <code>&lt;ref&gt;</code> definito int'a <code>&lt;references&gt;</code> nun tene n'attribbuto 'e nomme.",
+ "cite_error_empty_references_define": "'O tag <code>&lt;ref&gt;</code> definito int'a <code>&lt;references&gt;</code> c' 'o nomme \"$1\" nun tene cuntenute.",
+ "cite_references_link_accessibility_label": "Zompa ncopp'a",
+ "cite_references_link_many_accessibility_label": "Zompa ncoppa nfin'a:"
+}
diff --git a/extensions/Cite/i18n/nb.json b/extensions/Cite/i18n/nb.json
new file mode 100644
index 00000000..a50f5c1d
--- /dev/null
+++ b/extensions/Cite/i18n/nb.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Audun",
+ "Danmichaelo",
+ "Laaknor",
+ "Chameleon222"
+ ]
+ },
+ "cite-desc": "Legger til <nowiki><ref[ name=id]></nowiki> og <nowiki><references/></nowiki>-tagger for referanser",
+ "cite_error": "Siteringsfeil: $1",
+ "cite_error_ref_numeric_key": "Ugyldig <code>&lt;ref&gt;</code>-kode; navnet kan ikke være et enkelt heltall, bruk en beskrivende tittel",
+ "cite_error_ref_no_key": "Ugyldig <code>&lt;ref&gt;</code>-kode; referanser uten innhold må inneholde navn",
+ "cite_error_ref_too_many_keys": "Ugyldig <code>&lt;ref&gt;</code>-kode; ugyldige navn, f.eks. for mange",
+ "cite_error_ref_no_input": "Ugyldig <code>&lt;ref&gt;</code>-kode; referanser uten navn må ha innhold",
+ "cite_error_references_invalid_parameters": "Ugyldig <code>&lt;references&gt;</code>-kode; ingen parametere tillates, bruk <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Ugyldig <code>&lt;references&gt;</code>-tagg; kun parameteret «group» tillates. Bruk <code>&lt;references /&gt;</code> eller <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Gikk tom for egendefinerte tilbakelenketekster.\nDefiner flere i beskjeden <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Gikk tom for egendefinerte lenkemerker for gruppen «$1».\nDefinér fler i <nowiki>[[MediaWiki:$2]]</nowiki>-beskjeden.",
+ "cite_error_references_no_text": "Ugyldig <code>&lt;ref&gt;</code>-tagg; ingen tekst ble oppgitt for referansen ved navn <code>$1</code>",
+ "cite_error_included_ref": "Avsluttende <code>&lt;/ref&gt;</code>-tagg mangler for <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-merker finnes for gruppenavnet «$1», men ingen <code>&lt;references group=\"$1\"/&gt;</code>-merking ble funnet, eller det mangler et avsluttende <code>&lt;/ref&gt;</code>-merke.",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code>-tagg i <code>&lt;references&gt;</code> har motstridig attributt «$1».",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code>-tagg definert i <code>&lt;references&gt;</code> har gruppeattributtet «$1» som ikke forekommer i teksten.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code>-taggen med navnet «$1» definert i <code>&lt;references&gt;</code> brukes ikke i teksten.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code>-tagg definert i <code>&lt;references&gt;</code> har ikke noe navneattributt.",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code>-taggen i <code>&lt;references&gt;</code> med navnet «$1» har ikke noe innhold.",
+ "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z æ ø å aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az aæ aø aå ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz bæ bø bå ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz cæ cø cå da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz dæ dø då ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez eæ eø eå fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz fæ fø få ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz gæ gø gå ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz hæ hø hå ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz iæ iø iå ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz jæ jø jå ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz kæ kø kå la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz læ lø lå ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz mæ mø må na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz næ nø nå oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz oæ oø oå pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz pæ pø på qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz qæ qø qå ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz ræ rø rå sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz sæ sø så ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz tæ tø tå ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz uæ uø uå va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz væ vø vå wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz wæ wø wå xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz xæ xø xå ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz yæ yø yå za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz zæ zø zå æa æb æc æd æe æf æg æh æi æj æk æl æm æn æo æp æq ær æs æt æu æv æw æx æy æz ææ æø æå øa øb øc ød øe øf øg øh øi øj øk øl øm øn øo øp øq ør øs øt øu øv øw øx øy øz øæ øø øå åa åb åc åd åe åf åg åh åi åj åk ål åm ån åo åp åq år ås åt åu åv åw åx åy åz åæ åø åå",
+ "cite_references_link_accessibility_label": "Hopp opp",
+ "cite_references_link_many_accessibility_label": "Hopp opp til:"
+}
diff --git a/extensions/Cite/i18n/core/nds-nl.json b/extensions/Cite/i18n/nds-nl.json
index 6f2ed60c..6f2ed60c 100644
--- a/extensions/Cite/i18n/core/nds-nl.json
+++ b/extensions/Cite/i18n/nds-nl.json
diff --git a/extensions/Cite/i18n/nds.json b/extensions/Cite/i18n/nds.json
new file mode 100644
index 00000000..615535a8
--- /dev/null
+++ b/extensions/Cite/i18n/nds.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Slomox"
+ ]
+ },
+ "cite-desc": "Föögt <nowiki><ref[ name=id]></nowiki> un <nowiki><references/></nowiki> Tags för Zitaten to",
+ "cite_error": "Zitat-Fehler: $1",
+ "cite_error_ref_numeric_key": "Ungülligen Tag <tt>&lt;ref&gt;</tt>: de Naam dröff keen reine Tall wesen, bruuk en Naam, de de Saak beschrifft.",
+ "cite_error_ref_no_key": "Ungülligen Tag <tt>&lt;ref&gt;</tt>: „ref“ ahn Inholt mutt en Naam hebben.",
+ "cite_error_ref_too_many_keys": "Ungülligen Tag <tt>&lt;ref&gt;</tt>: ungüllige Naams, to’n Bispeel to veel.",
+ "cite_error_ref_no_input": "Ungülligen Tag <tt>&lt;ref&gt;</tt>: „ref“ ahn Naam mutt en Inholt hebben.",
+ "cite_error_references_invalid_parameters": "Ungülligen Tag <code>&lt;references&gt;</code>: Parameters sünd nich verlöövt, bruuk <tt>&lt;references /&gt;</tt>",
+ "cite_error_references_invalid_parameters_group": "Ungülligen Tag <code>&lt;references&gt;</code>: Blot de Parameter „group“ is verlöövt, bruuk <tt>&lt;references /&gt;</tt> oder <tt>&lt;references group=\"...\" /&gt;</tt>",
+ "cite_error_references_no_backlink_label": "De verföögboren Tekens för de Lenken op Referenzen sünd all. Dat lett sik repareren, wenn in de Systemnaricht <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> mehr Tekens angeven warrt.",
+ "cite_error_references_no_text": "Ungülligen Tag <tt>&lt;ref&gt;</tt>; is keen Text för Refs mit den Naam <tt>$1</tt> angeven.",
+ "cite_error_included_ref": "Dor fehlt en tosluten <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-Tags för de Grupp „$1“ gifft dat, is aver keen <code>&lt;references group=„$1“/&gt;</code>-Tag funnen worrn"
+}
diff --git a/extensions/Cite/i18n/ne.json b/extensions/Cite/i18n/ne.json
new file mode 100644
index 00000000..7b6f1f6d
--- /dev/null
+++ b/extensions/Cite/i18n/ne.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "cite_error": "उद्दरण त्रुटी: $1"
+}
diff --git a/extensions/Cite/i18n/nl.json b/extensions/Cite/i18n/nl.json
new file mode 100644
index 00000000..2bb3b4f1
--- /dev/null
+++ b/extensions/Cite/i18n/nl.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Flightmare",
+ "Niels",
+ "Romaine",
+ "Siebrand"
+ ]
+ },
+ "cite-desc": "Voegt <nowiki><ref[ name=id]></nowiki> en <nowiki><references/></nowiki> tags toe voor citaten",
+ "cite_error": "Citefout: $1",
+ "cite_error_ref_numeric_key": "Onjuiste tag <code>&lt;ref&gt;</code>;\nde naam kan geen eenvoudige integer zijn.\nGebruik een beschrijvende titel",
+ "cite_error_ref_no_key": "Onjuiste tag <code>&lt;ref&gt;</code>;\nrefs zonder inhoud moeten een naam hebben",
+ "cite_error_ref_too_many_keys": "Onjuiste tag <code>&lt;ref&gt;</code>;\nonjuiste namen, bijvoorbeeld te veel",
+ "cite_error_ref_no_input": "Onjuiste tag <code>&lt;ref&gt;</code>;\nrefs zonder naam moeten inhoud hebben",
+ "cite_error_references_invalid_parameters": "Onjuiste tag <code>&lt;references&gt;</code>;\nparameters zijn niet toegestaan.\nGebruik <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Ongeldige tag <code>&lt;references&gt;</code>;\nalleen de parameter \"group\" is toegestaan.\nGebruik <code>&lt;references /&gt;</code>, of <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Het aantal beschikbare backlinklabels is opgebruikt.\nGeef meer labels op in het bericht <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Het aantal aangepaste koppelinglabels voor de group \"$1\" is uitgeput.\nU kunt er meer instellen in het systeembericht <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Onjuiste tag <code>&lt;ref&gt;</code>;\ner is geen tekst opgegeven voor refs met de naam <code>$1</code>",
+ "cite_error_included_ref": "Na het label <code>&lt;ref&gt;</code> ontbreekt het afsluitende label <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Er bestaat een tag <code>&lt;ref&gt;</code> voor de groep \"$1\", maar er is geen bijbehorende tag <code>&lt;references group=\"$1\"/&gt;</code> aangetroffen of een afsluitende <code>&lt;/ref&gt;</code> is niet aanwezig.",
+ "cite_error_references_group_mismatch": "De tag <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> conflicteert met groepseigenschap \"$1\".",
+ "cite_error_references_missing_group": "De tag <code>&lt;ref&gt;</code> die is gedefinieerd in <code>&lt;references&gt;</code> heeft de groepseigenschap \"$1\" niet niet eerder in te tekst voorkomt.",
+ "cite_error_references_missing_key": "De tag <code>&lt;ref&gt;</code> met de naam \"$1\" gedefinieerd in <code>&lt;references&gt;</code> wordt niet eerder in de tekst gebruikt.",
+ "cite_error_references_no_key": "De tag <code>&lt;ref&gt;</code> die is gedefinieerd in <code>&lt;references&gt;</code> heeft geen eigenschapsnaam.",
+ "cite_error_empty_references_define": "De tag <code>&lt;ref&gt;</code> die is gedefinieerd in <code>&lt;references&gt;</code> met de naam \"$1\" heeft geen inhoud.",
+ "cite_references_link_accessibility_label": "Omhoog",
+ "cite_references_link_many_accessibility_label": "Omhoog naar:"
+}
diff --git a/extensions/Cite/i18n/nn.json b/extensions/Cite/i18n/nn.json
new file mode 100644
index 00000000..bff54319
--- /dev/null
+++ b/extensions/Cite/i18n/nn.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Frokor",
+ "Harald Khan",
+ "Njardarlogar"
+ ]
+ },
+ "cite-desc": "Legg til <nowiki><ref[ name=id]></nowiki> og <nowiki><references/></nowiki>-merke for referansar",
+ "cite_error": "Referansefeil: $1",
+ "cite_error_ref_numeric_key": "Ugyldig <code>&lt;ref&gt;</code>-kode; namnet kan ikkje vere eit enkelt heiltal, bruk ein skildrande tittel",
+ "cite_error_ref_no_key": "Ugyldig <code>&lt;ref&gt;</code>-kode; referansar utan innhald må innehalde namn",
+ "cite_error_ref_too_many_keys": "Ugyldig <code>&lt;ref&gt;</code>-kode; ugyldige namn, t.d. for mange",
+ "cite_error_ref_no_input": "Ugyldig <code>&lt;ref&gt;</code>-kode; referansar uten namn må ha innhald",
+ "cite_error_references_invalid_parameters": "Ugyldig <code>&lt;references&gt;</code>-kode; ingen parametrar er tillat, bruk <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Ugyldig <code>&lt;references&gt;</code>-tagg; berre parameteren «group» er tillatt. Bruk <code>&lt;references /&gt;</code> eller <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Gjekk tom for eigendefinerte tilbakelenketekstar.\nDefiner fleire i meldinga <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_references_no_text": "Ugyldig <code>&lt;ref&gt;</code>-merke; ingen tekst vart gjeven for referansen med namnet <code>$1</code>",
+ "cite_error_included_ref": "Avsluttande <code>&lt;/ref&gt;</code>-tagg manglar for <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-merke finst for gruppenamnet «$1», men inkje samsvarande <code>&lt;references group=\"$1\"/&gt;</code>-merke vart funne"
+}
diff --git a/extensions/Cite/i18n/oc.json b/extensions/Cite/i18n/oc.json
new file mode 100644
index 00000000..95cfaffd
--- /dev/null
+++ b/extensions/Cite/i18n/oc.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "cite-desc": "Apond las balisas <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki>, per las citacions.",
+ "cite_error": "Error de citacion : $1",
+ "cite_error_ref_numeric_key": "Ampèl invalid ; clau non-integrala esperada",
+ "cite_error_ref_no_key": "Ampèl invalid ; cap de clau pas especificada",
+ "cite_error_ref_too_many_keys": "Ampèl invalid ; claus invalidas, per exemple, tròp de claus especificadas o clau erronèa",
+ "cite_error_ref_no_input": "Ampèl invalid ; cap de dintrada pas especificada",
+ "cite_error_references_invalid_parameters": "Arguments invalids ; argument esperat",
+ "cite_error_references_invalid_parameters_group": "Balisa <code>&lt;references&gt;</code> incorrècta ;\n\nsol lo paramètre « group » es autorizat.\n\nUtilizatz <code>&lt;references /&gt;</code>, o alara <code>&lt;references group=\"...\" /&gt;</code>.",
+ "cite_error_references_no_backlink_label": "Execucion en defòra de las etiquetas personalizadas, definissetz mai dins lo messatge <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_references_no_text": "Balisa <code>&lt;ref&gt;</code> incorrècta ;\n\npas de tèxte per las referéncias nomenadas <code>$1</code>.",
+ "cite_error_included_ref": "Clausura <code>&lt;/ref&gt;</code> omesa per la balisa <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "De balisas <code>&lt;ref&gt;</code> existisson per un grop nomenat « $1 », mas cap de balisa <code>&lt;references group=\"$1\"/&gt;</code> correspondenta es pas estada trobada, o alara una valisa tampanta <code>&lt;/ref&gt;</code> manca.",
+ "cite_error_references_group_mismatch": "La balisa <code>&lt;ref&gt;</code> dins <code>&lt;references&gt;</code> a l'atribut de grop « $1 » que dintra en conflicte amb lo de <code>&lt;references&gt;</code>.",
+ "cite_error_references_missing_group": "La balisa <code>&lt;ref&gt;</code> definida dins <code>&lt;references&gt;</code> a un gropat atribuit « $1 » que figura pas dins lo tèxte precedent.",
+ "cite_error_references_missing_key": "La balisa <code>&lt;ref&gt;</code> amb lo nom « $1 » definida dins <code>&lt;references&gt;</code> es pas utilizada dins lo tèxte precedent.",
+ "cite_error_references_no_key": "La balisa <code>&lt;ref&gt;</code> definida dins <code>&lt;references&gt;</code> a pas de nom d’atribut.",
+ "cite_error_empty_references_define": "La balisa <code>&lt;ref&gt;</code> definida dins <code>&lt;references&gt;</code> amb lo nom « $1 » a pas de contengut.",
+ "cite_references_link_accessibility_label": "Anar",
+ "cite_references_link_many_accessibility_label": "Anar a :"
+}
diff --git a/extensions/Cite/i18n/or.json b/extensions/Cite/i18n/or.json
new file mode 100644
index 00000000..55f8b2e1
--- /dev/null
+++ b/extensions/Cite/i18n/or.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Psubhashish"
+ ]
+ },
+ "cite-desc": "ଆଧାର ନିମନ୍ତେ <nowiki><ref[ name=id]></nowiki> ଓ <nowiki><references/></nowiki> ଟ୍ୟାଗସବୁ ଏଠାରେ ଯୋଡ଼ିଥାଏ ।",
+ "cite_error": "ଆଧାର ଭୁଲ: $1",
+ "cite_error_ref_numeric_key": "ଅବୈଧ <code>&lt;ref&gt;</code> ଟ୍ୟାଗ;\nନାମଟି କେବେ ହେଲେ ଏକ ପୂର୍ଣ୍ଣସଂଖ୍ୟା ହୋଇପାରିବ ନାହିଁ । ଏକ ବର୍ଣ୍ଣନାମୂଳକ ନାମ ଦିଅନ୍ତୁ ।",
+ "cite_error_ref_no_key": "ଅବୈଧ <code>&lt;ref&gt;</code> ଟ୍ୟାଗ;\nକୌଣସି ମଧ୍ୟ ବିଷୟବସ୍ତୁ ନଥିବା ଆଧାରର ଏକ ନାମ ଥିବା ଲୋଡ଼ା",
+ "cite_error_ref_too_many_keys": "ଅବୈଧ <code>&lt;ref&gt;</code> ଟ୍ୟାଗ;\nଭୁଲ ନାମ (ଯଥା: ଖୁବ ଅଧିକ)",
+ "cite_error_ref_no_input": "ଅବୈଧ <code>&lt;ref&gt;</code> ଟ୍ୟାଗ;\nକୌଣସି ବି ନାମ ନଥିବା ଆଧାରର କିଛି ବିଷୟବସ୍ତୁ ଥିବା ଲୋଡ଼ା",
+ "cite_error_references_invalid_parameters": "ଅଚଳ <code>&lt;references&gt;</code> ଟ୍ୟାଗ;\nକୌଣସିଟି ପାରାମିଟର ଅନୁମୋଦିତ ନୁହେଁ ।\n<code>&lt;references /&gt;</code> ବ୍ୟବହାର କରନ୍ତୁ ।",
+ "cite_error_references_invalid_parameters_group": "ତ୍ରଟିପୂର୍ଣ୍ଣ <code>&lt;references&gt;</code> ଚିହ୍ନ;\n\"group\" ପାରାମିଟରଟି କେବଳ ଅନୁମୋଦିତ ।\n<code>&lt;references /&gt;</code>, କିମ୍ବା <code>&lt;references group=\"...\" /&gt;</code> ବ୍ୟବହାର କରନ୍ତୁ",
+ "cite_error_references_no_backlink_label": "ନିଜ ପସନ୍ଦର ବ୍ୟାକଲିଙ୍କ ଚିହ୍ନ ସବୁ ସରିଗଲା ।\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>ସୂଚନାରେ ଅଧିକ ଦେଖନ୍ତୁ ।",
+ "cite_error_no_link_label_group": "\"$1\" ଗୋଠ ଲାଗି ନିଜ ପସନ୍ଦର ବ୍ୟାକଲିଙ୍କ ଚିହ୍ନ ସବୁ ସରିଗଲା ।\n<nowiki>[[MediaWiki:$2]]</nowiki>ସୂଚନାରେ ଅଧିକ ଚିହ୍ନିତ କରନ୍ତୁ ।",
+ "cite_error_references_no_text": "ଅଚଳ <code>&lt;ref&gt;</code> ଚିହ୍ନ;\n<code>$1</code> ନାମରେ ଥିବା ଆଧାର ଭିତରେ କିଛି ଲେଖା ନାହିଁ ।",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> କୁ ବନ୍ଦ କରୁଅଛୁ; <code>&lt;ref&gt;</code> ନାହିଁ; ଚିହ୍ନ",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> ଟତାଗମାନ କେବଳ \"$1\" ନାମକ ଗୋଠ ପାଇଁ ରହିଛି, କିନ୍ତୁ କୌଣସି ସମ୍ବନ୍ଧିତ <code>&lt;references group=\"$1\"/&gt;</code> ଟ୍ୟାଗ ମିଳିଲା ନାହିଁ କିମ୍ବା <code>&lt;/ref&gt;</code> ବନ୍ଦ କରିବା ଟ୍ୟାଗଟି ନାହିଁ ।",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt ରେ <code>&lt;ref&gt;</code> ଚିହ୍ନ;</code> ର ଅସୁବିଧାଜନକ ଗୋଠ ବିଶେଷତା \"$1\" ।",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code>ରେ ଦିଆଯାଇଥିବା <code>&lt;ref&gt;</code> ଚିହ୍ନରେ \"$1\" ଗୋଠ ପାଇଁ ଚିହ୍ନ ଅଛି ଯାହାକି ଦରକାରୀ ଲେଖାରେ ଆସୁନାହିଁ ।",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code>ରେ ଦିଆଯାଇଥିବା \"$1\" ନାମ ସହ ଥିବା <code>&lt;ref&gt;</code> ଚିହ୍ନ ଦରକାରୀ ଲେଖାରେ ବ୍ୟବହାର ହୋଇନାହିଁ ।",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code>ରେ ଦିଆଯାଇଥିବା <code>&lt;ref&gt;</code> ଚିହ୍ନରେ କିଛି ଆଟ୍ରିବୁଟ ନାହିଁ ।",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code>ରେ ଦିଆଯାଇଥିବା \"$1\" ନାମ ସହ ଥିବା <code>&lt;ref&gt;</code> ଚିହ୍ନରେ କିଛି ଲେଖା ନାହିଁ ।",
+ "cite_references_link_accessibility_label": "ଉପରକୁ ଯାଆନ୍ତୁ",
+ "cite_references_link_many_accessibility_label": "ଏହି ଯାଏ ଉପରକୁ ଯାଆନ୍ତୁ:"
+}
diff --git a/extensions/Cite/i18n/pa.json b/extensions/Cite/i18n/pa.json
new file mode 100644
index 00000000..fd37c8bc
--- /dev/null
+++ b/extensions/Cite/i18n/pa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Babanwalia"
+ ]
+ },
+ "cite_error": "ਗ਼ਲਤੀ ਦਾ ਹਵਾਲਾ ਦਿਉ:"
+}
diff --git a/extensions/Cite/i18n/core/pag.json b/extensions/Cite/i18n/pag.json
index 15d9f2e7..15d9f2e7 100644
--- a/extensions/Cite/i18n/core/pag.json
+++ b/extensions/Cite/i18n/pag.json
diff --git a/extensions/Cite/i18n/pfl.json b/extensions/Cite/i18n/pfl.json
new file mode 100644
index 00000000..713f484e
--- /dev/null
+++ b/extensions/Cite/i18n/pfl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae"
+ ]
+ },
+ "cite_error": "Refarensfehla: $1"
+}
diff --git a/extensions/Cite/i18n/pl.json b/extensions/Cite/i18n/pl.json
new file mode 100644
index 00000000..965c670c
--- /dev/null
+++ b/extensions/Cite/i18n/pl.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Derbeth",
+ "Holek",
+ "Leinad",
+ "Sp5uhe",
+ "Woytecr"
+ ]
+ },
+ "cite-desc": "Dodaje znaczniki <nowiki><ref[ name=id]></nowiki> i <nowiki><references/></nowiki> ułatwiające podawanie źródeł cytatów",
+ "cite_error": "Błąd rozszerzenia ''cite'': $1",
+ "cite_error_ref_numeric_key": "Nieprawidłowy znacznik <code>&lt;ref&gt;</code>. Nazwa nie może być liczbą, użyj nazwy opisowej.",
+ "cite_error_ref_no_key": "Nieprawidłowy znacznik <code>&lt;ref&gt;</code>. Odnośnik ref z zawartością musi mieć nazwę.",
+ "cite_error_ref_too_many_keys": "Nieprawidłowe nazwy parametrów elementu <code>&lt;ref&gt;</code>.",
+ "cite_error_ref_no_input": "Błąd w składni elementu <code>&lt;ref&gt;</code>. Przypisy bez podanej nazwy muszą posiadać treść",
+ "cite_error_references_invalid_parameters": "Błąd w składni elementu <code>&lt;references&gt;</code>. Nie można wprowadzać parametrów do tego elementu, użyj <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Nieprawidłowy znacznik <code>&lt;references&gt;</code>;\ndostępny jest wyłącznie parametr „group”.\nUżyj znacznika <code>&lt;references /&gt;</code>, lub <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Zabrakło etykiet do przypisów.\nZadeklaruj więcej w komunikacie <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Zabrakło niestandardowych etykiet linków dla grupy „$1“.\nZdefiniuj ich większą liczbę w komunikacie <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Błąd w składni elementu <code>&lt;ref&gt;</code>. Brak tekstu w przypisie o nazwie <code>$1</code>",
+ "cite_error_included_ref": "Brak znacznika zamykającego <code>&lt;/ref&gt;</code> po otwartym znaczniku <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Istnieje znacznik <code>&lt;ref&gt;</code> dla grupy o nazwie „$1”, ale nie odnaleziono odpowiedniego znacznika <code>&lt;references group=\"$1\"/&gt;</code>, lub brakuje znacznika zamykającego <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "Znacznik <code>&lt;ref&gt;</code> w <code>&lt;references&gt;</code> nie może mieć atrybutu grupy „$1”.",
+ "cite_error_references_missing_group": "Znacznik <code>&lt;ref&gt;</code> zdefiniowany w <code>&lt;references&gt;</code> ma atrybut grupowania „$1”, który nie występuje wcześniej w treści.",
+ "cite_error_references_missing_key": "Znacznik <code>&lt;ref&gt;</code> o nazwie „$1”, zdefiniowany w <code>&lt;references&gt;</code>, nie był użyty wcześniej w treści.",
+ "cite_error_references_no_key": "Znacznik <code>&lt;ref&gt;</code> zdefiniowany w <code>&lt;references&gt;</code> nie ma atrybutu <code>name</code>.",
+ "cite_error_empty_references_define": "Znacznik <code>&lt;ref&gt;</code> zdefiniowany w <code>&lt;references&gt;</code> o nazwie „$1” nie ma treści.",
+ "cite_references_link_accessibility_label": "Skocz do góry",
+ "cite_references_link_many_accessibility_label": "Skocz do:"
+}
diff --git a/extensions/Cite/i18n/pms.json b/extensions/Cite/i18n/pms.json
new file mode 100644
index 00000000..d422f064
--- /dev/null
+++ b/extensions/Cite/i18n/pms.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Dragonòt"
+ ]
+ },
+ "cite-desc": "A gionta le tichëtte <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki>, për sitassion",
+ "cite_error": "Eror ëd sitassion: $1",
+ "cite_error_ref_numeric_key": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\nël nòm a peul pa esse n'antregh sempi. Deuvra un tìtol descritiv.",
+ "cite_error_ref_no_key": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\nj'arferiment sensa contnù a devo avèj un nòm",
+ "cite_error_ref_too_many_keys": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\nnòm pa bon, për esempi tròpi",
+ "cite_error_ref_no_input": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\nj'arferiment sensa nòm a devo avèj un contnù",
+ "cite_error_references_invalid_parameters": "Tichëtta <code>&lt;references&gt;</code> pa bon-a;\npa gnun paràmetr përmëttù.\nCh'a deuvra <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Tichëtta <code>&lt;references&gt;</code> pa bon-a;\nas peul mach dovresse ël paràmetr \"group\".\nCh'a deuvra <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Etichëtte ëd backlink përsonalisà esaurìe.\nDefiniss-ne ëd pì ant ël messagi <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Surtì fòra dle tichëtte dij colegament utent për la partìa \"$1\".\nDefinissne ëd pi ant ël mëssagi <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Tichëtta <code>&lt;ref&gt;</code> pa bon-a;\npa gnun test a l'é stàit dàit për l'arferiment ciamà <code>$1</code>",
+ "cite_error_included_ref": "Saradura <code>&lt;/ref&gt;</code> mancanta për la tichëtta <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Dle tichëtte <code>&lt;ref&gt;</code> a esisto për na partìa ciamà «$1», ma gnun-a tichëtta corëspondenta <code>&lt;references group=\"$1\"/&gt;</code> a l'é stàita trovà opura a-i manca un delimitator final <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "La tichëtta <code>&lt;ref&gt;</code> an <code>&lt;references&gt;</code> a l'ha n'atribut ëd partìa \"$1\" an conflit.",
+ "cite_error_references_missing_group": "La tichëtta <code>&lt;ref&gt;</code> definìa an <code>&lt;references&gt;</code> a l'ha n'atribut ëd partìa \"$1\" che a l'era pa ant ël test prima.",
+ "cite_error_references_missing_key": "La tichëtta <code>&lt;ref&gt;</code> con nòm \"$1\" definìa an <code>&lt;references&gt;</code> a l'é pa dovrà ant ël test prima.",
+ "cite_error_references_no_key": "La tichëtta <code>&lt;ref&gt;</code> definìa an <code>&lt;references&gt;</code> a l'ha pa gnun atribut ëd nòm.",
+ "cite_error_empty_references_define": "La tichëtta <code>&lt;ref&gt;</code> definìa an <code>&lt;references&gt;</code> con nòm \"$1\" a l'ha pa gnun contnù.",
+ "cite_references_link_accessibility_label": "Andé",
+ "cite_references_link_many_accessibility_label": "Sauté a:"
+}
diff --git a/extensions/Cite/i18n/pnb.json b/extensions/Cite/i18n/pnb.json
new file mode 100644
index 00000000..3715fa5a
--- /dev/null
+++ b/extensions/Cite/i18n/pnb.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khalid Mahmood"
+ ]
+ },
+ "cite-desc": "جوڑو <nowiki><ref[ name=id]></nowiki> تے <nowiki><references/></nowiki> ٹیگ اتے پتے لئی۔",
+ "cite_error": "سائیٹ غلطی:$1",
+ "cite_error_ref_numeric_key": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ؛\nناں اک سادہ انٹیجر نئیں ہوسکدا۔ کوئی ہور دسن والا سرناواں دسو۔",
+ "cite_error_ref_no_key": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ؛\nاتے پتے جیدے چ کوئی شے ناں ہووے لازمی ناں ہووے۔",
+ "cite_error_ref_too_many_keys": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ؛\nناں منے جان والے ناں",
+ "cite_error_ref_no_input": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ؛\nاتے پتے جیدے چ کوئی شے ناں ہووے لازمی ناں ہووے۔",
+ "cite_error_references_invalid_parameters": "ناں منیا جان والا <code>&lt;references&gt;</code> ٹیگ؛\nکسے پیرامیٹر دی اجازت نئیں۔\n<code>&lt;references /&gt;</code> ورتو",
+ "cite_error_references_invalid_parameters_group": "ناں منیا جان والا <code>&lt;references&gt;</code> ٹیگ؛\nپیرامیٹر گروپ دی اجازت صرف۔\nورتو <code>&lt;references /&gt;</code>، یا <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "کسٹم پچھلے جزڑ نئیں رۓ۔\nہور دسو <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> سنیعے چ۔",
+ "cite_error_no_link_label_group": "\"$1\" ٹولی لئی کسٹم لیبل جوڑ مک گۓ۔\nہور دسو <nowiki>[[MediaWiki:$2]]</nowiki> سنیعے چ۔",
+ "cite_error_references_no_text": "ناں منیا جان والا <code>&lt;ref&gt;</code> ٹیگ\nکوئی لکھت نئیں دتی گئی اتے پتے <code>$1</code> لئی۔",
+ "cite_error_included_ref": "بند کردا &lt;/ref&gt ؛ &lt;ref&gt دا کعاٹا ٹیک",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> ٹیگ اک ٹولی جیدا ناں \"$1\" اے ہیگے نیں، پر کوئی <code>&lt;references group=\"$1\"/&gt;</code> ٹیگ ناں لبیا۔",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> ٹیگ ان <code>&lt;references&gt;</code> دے رپھڑی اٹریبیوٹ \"$1\"۔",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> ٹیگ دسیا گیا <code>&lt;references&gt;</code> دے ٹولی اٹریبیوٹ \"$1\" جیہڑے پہلی لکھت چ ناں دسے۔",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> ٹیگ ناں نال \"$1\" <code>&lt;references&gt;</code> چ دسیا گیا پہلی کسے لکھت چ نئیں ورتیا گیا۔",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> ٹیگ دسیا گیا <code>&lt;references&gt;</code> چ دا کوئی ناں اٹریبیوٹ نئیں۔",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> ٹیگ دسیا گیا <code>&lt;references&gt;</code> چ \"$1\" ناں نال، ایدے چ کج نئیں۔"
+}
diff --git a/extensions/Cite/i18n/ps.json b/extensions/Cite/i18n/ps.json
new file mode 100644
index 00000000..f3a82f7a
--- /dev/null
+++ b/extensions/Cite/i18n/ps.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "cite_error": "د اخځ ستونزه: $1"
+}
diff --git a/extensions/Cite/i18n/pt-br.json b/extensions/Cite/i18n/pt-br.json
new file mode 100644
index 00000000..9fbd1443
--- /dev/null
+++ b/extensions/Cite/i18n/pt-br.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Eduardo.mps",
+ "Giro720",
+ "555"
+ ]
+ },
+ "cite-desc": "Adiciona marcas <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> para citações",
+ "cite_error": "Erro de citação: $1",
+ "cite_error_ref_numeric_key": "Marca <code>&lt;ref&gt;</code> inválida; \no nome não pode ser um número. Utilize um título descritivo",
+ "cite_error_ref_no_key": "Marca <code>&lt;ref&gt;</code> inválida; \nrefs sem conteúdo devem ter um nome",
+ "cite_error_ref_too_many_keys": "Marca <code>&lt;ref&gt;</code> inválida; \nnomes inválidos (por exemplo, muito extenso)",
+ "cite_error_ref_no_input": "Marca <code>&lt;ref&gt;</code> inválida; \nrefs sem nome devem possuir conteúdo",
+ "cite_error_references_invalid_parameters": "Marca <code>&lt;references&gt;</code> inválida; \nnão são permitidos parâmetros.\nUtilize <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Marca <code>&lt;references&gt;</code> inválida;\nsó o parâmetro \"group\" é permitido.\nUtilize <code>&lt;references /&gt;</code>, ou <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Etiquetas de backlink esgotadas. \nDefina mais na mensagem <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Etiquetas personalizadas para links, no grupo \"$1\", esgotadas.\nDefina mais na mensagem <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Marca <code>&lt;ref&gt;</code> inválida; \nnão foi fornecido texto para as refs chamadas <code>$1</code>",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> de fechamento ausente para para a marca <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "existem marcas <code>&lt;ref&gt;</code> para um grupo chamado \"$1\", mas nenhuma marca <code>&lt;references group=\"$1\"/&gt;</code> correspondente foi encontrada (ou uma marca de fechamento <code>&lt;/ref&gt;</code> está faltando)",
+ "cite_error_references_group_mismatch": "marca <code>&lt;ref&gt;</code> em <code>&lt;references&gt;</code> está com o atributo de grupo \"$1\" conflitante.",
+ "cite_error_references_missing_group": "marca <code>&lt;ref&gt;</code> definida em <code>&lt;references&gt;</code> está com atributo de grupo \"$1\" que não aparece no texto anterior.",
+ "cite_error_references_missing_key": "marca <code>&lt;ref&gt;</code> com nome \"$1\", definida em <code>&lt;references&gt;</code>, não foi utilizada no texto anterior.",
+ "cite_error_references_no_key": "marca <code>&lt;ref&gt;</code>, definida em <code>&lt;references&gt;</code>, não tem atributo de nome.",
+ "cite_error_empty_references_define": "marca <code>&lt;ref&gt;</code>, definida em <code>&lt;references&gt;</code>, com nome \"$1\", não tem nenhum conteúdo.",
+ "cite_references_link_accessibility_label": "Ir para cima",
+ "cite_references_link_many_accessibility_label": "Ir para:"
+}
diff --git a/extensions/Cite/i18n/pt.json b/extensions/Cite/i18n/pt.json
new file mode 100644
index 00000000..5fd960e3
--- /dev/null
+++ b/extensions/Cite/i18n/pt.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crazymadlover",
+ "Giro720",
+ "Hamilton Abreu",
+ "Malafaya",
+ "Opraco",
+ "Waldir",
+ "555",
+ "Vitorvicentevalente"
+ ]
+ },
+ "cite-desc": "Adiciona elementos <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> para uso em citações",
+ "cite_error": "Erro de citação: $1",
+ "cite_error_ref_numeric_key": "Código <code>&lt;ref&gt;</code> inválido; o nome não pode ser um número. Utilize um nome descritivo",
+ "cite_error_ref_no_key": "Código <code>&lt;ref&gt;</code> inválido; refs sem conteúdo devem ter um parâmetro de nome",
+ "cite_error_ref_too_many_keys": "Código <code>&lt;ref&gt;</code> inválido; nomes inválidos (por exemplo, nome muito extenso)",
+ "cite_error_ref_no_input": "Código <code>&lt;ref&gt;</code> inválido; refs sem parâmetro de nome devem possuir conteúdo a elas associado",
+ "cite_error_references_invalid_parameters": "Código <code>&lt;references&gt;</code> inválido; não são permitidos parâmetros. Utilize como <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "O elemento <code>&lt;references&gt;</code> é inválido;\nsó é permitido o parâmetro \"group\".\nUse <code>&lt;references /&gt;</code>, ou <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Esgotamento das legendas personalizadas para backlinks.\nDefina mais na mensagem <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Esgotamento das legendas personalizadas para links, no grupo \"$1\".\nDefina mais na mensagem <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> inválida; não foi fornecido texto para as refs chamadas <code>$1</code>",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> de fecho em falta, para o elemento <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "existem marcas <code>&lt;ref&gt;</code> para um grupo chamado \"$1\", mas nenhuma marca <code>&lt;references group=\"$1\"/&gt;</code> correspondente foi encontrada (ou uma marca de fechamento <code>&lt;/ref&gt;</code> está faltando)",
+ "cite_error_references_group_mismatch": "O elemento <code>&lt;ref&gt;</code> em <code>&lt;references&gt;</code> tem o atributo de grupo \"$1\", que está em conflito com o de <code>&lt;references&gt;</code>.",
+ "cite_error_references_missing_group": "O elemento <code>&lt;ref&gt;</code> definido em <code>&lt;references&gt;</code> tem o atributo de grupo \"$1\", que não aparece no texto anterior.",
+ "cite_error_references_missing_key": "A etiqueta <code>&lt;ref&gt;</code> com nome \"$1\" definida em <code>&lt;references&gt;</code> não é utilizada no texto acima.",
+ "cite_error_references_no_key": "O elemento <code>&lt;ref&gt;</code> definido em <code>&lt;references&gt;</code> não tem um atributo de nome.",
+ "cite_error_empty_references_define": "O elemento <code>&lt;ref&gt;</code> definido em <code>&lt;references&gt;</code> com o nome \"$1\" não tem conteúdo.",
+ "cite_references_link_accessibility_label": "Ir para cima",
+ "cite_references_link_many_accessibility_label": "Ir para:"
+}
diff --git a/extensions/Cite/i18n/qqq.json b/extensions/Cite/i18n/qqq.json
new file mode 100644
index 00000000..5798902f
--- /dev/null
+++ b/extensions/Cite/i18n/qqq.json
@@ -0,0 +1,53 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dani",
+ "LPfi",
+ "Lejonel",
+ "Mormegil",
+ "Nike",
+ "Purodha",
+ "Raimond Spekking",
+ "Raymond",
+ "Shirayuki",
+ "Siebrand",
+ "The Evil IP address",
+ "Umherirrender"
+ ]
+ },
+ "cite-desc": "{{desc|name=Cite|url=https://www.mediawiki.org/wiki/Extension:Cite}}",
+ "cite_error": "Cite extension.\n\nUsed when there are errors in ref or references tags.\n\nParameters:\n* $1 - an error message",
+ "cite_error_ref_numeric_key": "Cite extension. Error message shown if the name of a ref tag only contains digits. Examples that cause this error are <code><nowiki><ref name=\"123\" /></nowiki></code> or <code><nowiki><ref name=\"456\">input</ref></nowiki></code>",
+ "cite_error_ref_no_key": "Cite extension. Error message shown when ref tags without any content (that is <code><nowiki><ref /></nowiki></code>) are used without a name.",
+ "cite_error_ref_too_many_keys": "Cite extension. Error message shown when ref tags has parameters other than name and group. Examples that cause this error are <code><nowiki><ref name=\"name\" notname=\"value\" /></nowiki></code> or <code><nowiki><ref notname=\"value\" >input<ref></nowiki></code>",
+ "cite_error_ref_no_input": "Cite extension. Error message shown when ref tags without names have no content. An example that cause this error is <code><nowiki><ref></ref></nowiki></code>",
+ "cite_error_references_invalid_parameters": "Cite extension. Error message shown when parmeters are used in the references tag. An example that cause this error is <code><nowiki><references someparameter=\"value\" /></nowiki></code>",
+ "cite_error_references_invalid_parameters_group": "Cite extension. Error message shown when unknown parameters are used in the references tag. An example that cause this error is <samp><nowiki><references someparameter=\"value\" /></nowiki></samp>",
+ "cite_error_references_no_backlink_label": "Cite extension. Error message shown in the references tag when the same name is used for too many ref tags. Too many in this case is more than there are backlink labels defined in [[MediaWiki:Cite references link many format backlink labels]].\n\nIt is not possible to make a clickable link to this message. \"nowiki\" is mandatory around [[MediaWiki:Cite references link many format backlink labels]].",
+ "cite_error_no_link_label_group": "*'''$1''' is the name of a reference group.\n*'''$2''' is <code>cite_link_label_group-<i>groupname</i></code>.",
+ "cite_error_references_no_text": "Cite extension. This error occurs when the tag <code><nowiki><ref name=\"something\" /></nowiki></code> is used with the name-option specified and no other tag specifies a cite-text for this name.\n\nParameters:\n* $1 - key of the ref",
+ "cite_error_included_ref": "Error message shown if the <code><nowiki><ref></nowiki></code> tag is unbalanced, that means a <code><nowiki><ref></nowiki></code> is not followed by a <code><nowiki></ref></nowiki></code>",
+ "cite_error_group_refs_without_references": "Parameters:\n* $1 - the group name\n\nIf the group $1 is default group, instead of this message, the following message will be used:\n* {{msg-mw|Cite error refs without references}}",
+ "cite_error_references_group_mismatch": "Error message shown when doing something like\n<pre>\n<references group=\"foo\">\n<ref group=\"bar\">...</ref>\n</references>\n</pre>\nParameters:\n* $1 - the value of the <code>group</code> attribute on the inner <code><nowiki><ref></nowiki></code> (in the example above, “bar”)",
+ "cite_error_references_missing_group": "Error message shown when doing something like\n<pre>\n<references group=\"foo\">\n<ref>...</ref>\n</references>\n</pre>\nand there are no <code><nowiki><ref></nowiki></code> tags in the page text which would use <code>group=\"foo\"</code>.\n\nParameters:\n* $1 - the name of the unused <code>group</code> (in the example above, “foo”)",
+ "cite_error_references_missing_key": "Error message shown when using something like\n<pre>\n<references>\n<ref name=\"refname\">...</ref>\n</references>\n</pre>\nand the reference <code><nowiki><ref name=\"refname\" /></nowiki></code> is not used anywhere in the page text.\n\nParameters:\n* $1 - the name of the unused reference (in the example above, “refname”)",
+ "cite_error_references_no_key": "Error message shown when a <code><nowiki><ref></nowiki></code> inside <code><nowiki><references></nowiki></code> does not have a <code>name</code> attribute.",
+ "cite_error_empty_references_define": "Error message shown when there is a <code><nowiki><ref></nowiki></code> inside <code><nowiki><references></nowiki></code>, but it does not have any content, e.g.\n<pre>\n<references>\n<ref name=\"foo\" />\n</references>\n</pre>\n\nParameters:\n* $1 - the <code><nowiki>name</nowiki></code> of the erroneous <code><nowiki><ref></nowiki></code> (in the above example, “foo”)",
+ "cite_reference_link_key_with_num": "{{optional}}\nParameters:\n* $1 - the key\n* $2 - the number of the key",
+ "cite_reference_link_prefix": "{{optional}}",
+ "cite_reference_link_suffix": "{{optional}}",
+ "cite_references_link_prefix": "{{optional}}",
+ "cite_references_link_suffix": "{{optional}}",
+ "cite_reference_link": "{{optional}}\nParameters:\n* $1 - ref key\n* $2 - references key\n* $3 - link label",
+ "cite_references_no_link": "{{notranslate}}\nParameters:\n* $1 - references key\n* $2 - reference text",
+ "cite_references_link_one": "{{optional}}\nParameters:\n* $1 - references key\n* $2 - ref key\n* $3 - reference text",
+ "cite_references_link_many": "{{optional}}\nParameters:\n* $1 - references key\n* $2 - list of links\n* $3 - reference text",
+ "cite_references_link_many_format": "{{optional}}\nParameters:\n* $1 - ref key\n* $2 - ...\n* $3 - (Unused)...",
+ "cite_references_link_many_format_backlink_labels": "{{Optional}}",
+ "cite_references_link_many_sep": "{{optional}}",
+ "cite_references_link_many_and": "{{optional}}",
+ "cite_references_link_accessibility_label": "Text for screen readers to describe the jump to citation link (\"↑\").\n\nSee also:\n* {{msg-mw|Cite references link many accessibility label}} - if the citation is used multiple times",
+ "cite_references_link_many_accessibility_label": "Text for screen readers to describe the jump to citation links (a b c ...) for citations which are used in multiple places.\n\nThis is going to be prepended to the first link, the following ones will just be read by screen readers as they are visible.\n\nSee also:\n* {{msg-mw|Cite references link accessibility label}} - if the citation is used one time",
+ "cite_references_prefix": "{{notranslate}}",
+ "cite_references_suffix": "{{notranslate}}"
+}
diff --git a/extensions/Cite/i18n/qu.json b/extensions/Cite/i18n/qu.json
new file mode 100644
index 00000000..cb36515b
--- /dev/null
+++ b/extensions/Cite/i18n/qu.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "cite-desc": "Pukyumanta willanapaq <nowiki><ref[ name=id]></nowiki> , <nowiki><references/></nowiki> unanchachakunatam yapan",
+ "cite_error": "Pukyumanta willaypi pantasqa: $1",
+ "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nsutinqa ama yupaylla kachunchu. Ch'uyanchaq sutinta llamk'achiy",
+ "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nch'usaq pukyu willana unanchachaqa sutiyuqmi kachun",
+ "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nsutinkunaqa manam allinchu, nisyu sutinchá",
+ "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nsutinnaq pukyu willana unanchachaqa ama ch'usaqchu kachun",
+ "cite_error_references_invalid_parameters": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\nama kuskanachina tupuchu kachun. <code>&lt;references /&gt;</code> unanchachata llamk'achiy",
+ "cite_error_references_invalid_parameters_group": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\n\"group\" nisqa kuskanachina tupulla kachun. <code>&lt;references /&gt;</code> icha <code>&lt;references group=\"...\" /&gt;</code> unanchachata llamk'achiy",
+ "cite_error_references_no_backlink_label": "Manañam kanchu allichana kutimuy t'inki unanchakuna.\nAstawan sut'ichay <nowiki>[[MediaWiki:Cite references link many format backlink labels|Pukyumanta willaykuna achka allichana kutimuy t'inki unanchakunata t'inkin]]</nowiki> nisqa willaypi",
+ "cite_error_references_no_text": "<code>&lt;ref&gt;</code> unanchachaqa manam allinchu;\n<code>$1</code> nisqapaq pukyu qillqa manam kanchu",
+ "cite_error_included_ref": "Kichaq <code>&lt;ref&gt;</code> unanchachapaq wichq'aq <code>&lt;/ref&gt;</code> unanchachaqa manam kanchu",
+ "cite_error_group_refs_without_references": "\"$1\" sutiyuq huñupaq <code>&lt;ref&gt;</code> unanchacham kachkan, ichataq manam chay huñupaq qillqasqa <code>&lt;references group=\"$1\"/&gt;</code> unanchacha manam tarisqachu, icha wichq'aq <code>&lt;/ref&gt;</code> unanchacha manam kanchu",
+ "cite_references_link_accessibility_label": "Hawaman t'iskuy",
+ "cite_references_link_many_accessibility_label": "Hawaman t'iskuspa kayman riy:"
+}
diff --git a/extensions/Cite/i18n/ro.json b/extensions/Cite/i18n/ro.json
new file mode 100644
index 00000000..06c02eed
--- /dev/null
+++ b/extensions/Cite/i18n/ro.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Firilacroco",
+ "KlaudiuMihaila",
+ "Mihai",
+ "Minisarm",
+ "Marian banica"
+ ]
+ },
+ "cite-desc": "Adaugă etichete <nowiki><ref[ name=id]></nowiki> și <nowiki><references/></nowiki>, pentru citări",
+ "cite_error": "Eroare la citare: $1",
+ "cite_error_ref_numeric_key": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nnumele nu poate fi un număr. Folosește un titlu descriptiv",
+ "cite_error_ref_no_key": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nref-urile fără conținut trebuie să aibă un nume",
+ "cite_error_ref_too_many_keys": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nnume invalid, ex. prea multe nume",
+ "cite_error_ref_no_input": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nref-urile fără nume trebuie să aibă conținut",
+ "cite_error_references_invalid_parameters": "Etichetă <code>&lt;references&gt;</code> invalidă;\nparametrii nu sunt permiși.\nFolosește eticheta <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Etichetă <code>&lt;references&gt;</code> invalidă;\ndoar parametrul „grup” este permis.\nFolosește eticheta <code>&lt;references /&gt;</code>, sau <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "S-au epuizat etichetele pentru legături personalizate.\nDefiniți mai multe etichete în cadrul mesajului <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "S-au epuizat etichetele pentru legături personalizate pentru grupul „$1”. \nDefiniți mai multe etichete în cadrul mesajului <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Etichetă <code>&lt;ref&gt;</code> invalidă;\nniciun text nu a fost furnizat pentru ref-urile numite <code>$1</code>",
+ "cite_error_included_ref": "Eticheta de închidere <code>&lt;/ref&gt;</code> lipsește pentru eticheta <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Etichete <code>&lt;ref&gt;</code> există pentru un grup numit „$1”, dar nu și o etichetă <code>&lt;references group=\"$1\"/&gt;</code> ori o etichetă <code>&lt;/ref&gt;</code> de final lipsește",
+ "cite_error_references_group_mismatch": "Eticheta <code>&lt;ref&gt;</code> din <code>&lt;references&gt;</code> are atributul de grup „$1” care a intrat în conflict.",
+ "cite_error_references_missing_group": "Eticheta <code>&lt;ref&gt;</code> definită în <code>&lt;references&gt;</code> are atributul de grup „$1” care nu apare în textul anterior.",
+ "cite_error_references_missing_key": "Eticheta <code>&lt;ref&gt;</code> cu numele „$1” definită în <code>&lt;references&gt;</code> nu este utilizată în textul anterior.",
+ "cite_error_references_no_key": "Eticheta <code>&lt;ref&gt;</code> definită în <code>&lt;references&gt;</code> nu are atributul nume.",
+ "cite_error_empty_references_define": "Eticheta <code>&lt;ref&gt;</code> definită în <code>&lt;references&gt;</code> cu numele „$1” nu are conținut.",
+ "cite_references_link_accessibility_label": "Salt",
+ "cite_references_link_many_accessibility_label": "Salt la:"
+}
diff --git a/extensions/Cite/i18n/roa-tara.json b/extensions/Cite/i18n/roa-tara.json
new file mode 100644
index 00000000..2ad7f1cf
--- /dev/null
+++ b/extensions/Cite/i18n/roa-tara.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "cite-desc": "Aggiunge le tag <nowiki><ref[ name=id]></nowiki> and <nowiki><references/></nowiki> pe le citaziune",
+ "cite_error": "Cite errore: $1",
+ "cite_error_ref_numeric_key": "Tag <code>&lt;ref&gt;</code> invalide;\n'u nome non ge pò essere sole 'n'indere. Ause 'nu titele descrittive",
+ "cite_error_ref_no_key": "Tag <code>&lt;ref&gt;</code> invalide;\nle referimende senza condenute onne tenè 'nu nome",
+ "cite_error_ref_too_many_keys": "Tag <code>&lt;ref&gt;</code> invalide;\nnome invalide, pe esembie troppe luènghe",
+ "cite_error_ref_no_input": "Tag <code>&lt;ref&gt;</code> invalide;\nreferimende senza nome onne tenè 'nu condenute",
+ "cite_error_references_invalid_parameters": "Tag <code>&lt;references&gt;</code> invalide;\nnon ge se pò mettere nisciune parametre.\nAuse <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> invalide;\nsulamende 'u parametre \"group\" pò essere ausate.\nAuse <code>&lt;references /&gt;</code> o <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Le etichette personalizzate pe le collegaminde de rrete onne spicciate.\nDefiniscene otre jndr'à 'u messàgge <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Le etichette personalizzate de le collegaminde pu gruppe \"$1\" onne spicciate.\nDefiniscene otre jndr'à 'u messàgge <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Tag <code>&lt;ref&gt;</code> invalide;\nnisciune teste ere previste pe le referimende nnomenate <code>$1</code>",
+ "cite_error_included_ref": "Stè 'u tag <code>&lt;/ref&gt;</code> ma manghe <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "'U tag <code>&lt;ref&gt;</code> esiste pu gruppe nomenate \"$1\", ma non ge corresponne a 'u tag acchiate <code>&lt;references group=\"$1\"/&gt;</code>, o 'nu tag de chiusure <code>&lt;/ref&gt;</code> manghe",
+ "cite_error_references_group_mismatch": "'U tag <code>&lt;ref&gt;</code> tag jndr'à <code>&lt;references&gt;</code> tène conflitte cu l'attribbute d'u gruppe \"$1\".",
+ "cite_error_references_missing_group": "'U tag <code>&lt;ref&gt;</code> definite jndr'à <code>&lt;references&gt;</code> ave attribbute de gruppe \"$1\" 'u quale non ge jesse jndr'à 'u teste prengepàle.",
+ "cite_error_references_missing_key": "'U tag <code>&lt;ref&gt;</code> cu 'u nome \"$1\" definite jndr'à <code>&lt;references&gt;</code> non g'avene ausate jndr'à 'u teste prengepàle.",
+ "cite_error_references_no_key": "'U tag <code>&lt;ref&gt;</code> definite jndr'à <code>&lt;references&gt;</code> non ge tène 'nu nome d'attrebbute.",
+ "cite_error_empty_references_define": "'U tag <code>&lt;ref&gt;</code> definite jndr'à <code>&lt;references&gt;</code> cu 'u nome \"$1\" non ge tène condenute.",
+ "cite_references_link_accessibility_label": "Zumbe sus",
+ "cite_references_link_many_accessibility_label": "Zumbe sus a:"
+}
diff --git a/extensions/Cite/i18n/ru.json b/extensions/Cite/i18n/ru.json
new file mode 100644
index 00000000..1671c938
--- /dev/null
+++ b/extensions/Cite/i18n/ru.json
@@ -0,0 +1,44 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahonc",
+ "Dim Grits",
+ "Ferrer",
+ "KPu3uC B Poccuu",
+ "Kaganer",
+ "Kalan",
+ "Okras",
+ "Александр Сигачёв",
+ "Iltever",
+ "NBS"
+ ]
+ },
+ "cite-desc": "Добавляет теги <nowiki><ref[ name=id]></nowiki> и <nowiki><references/></nowiki> для сносок",
+ "cite_error": "Ошибка цитирования $1",
+ "cite_error_ref_numeric_key": "Неправильный тег <code>&lt;ref&gt;</code>;\nимя не может быть целым числом. Используйте описательное название",
+ "cite_error_ref_no_key": "Неправильный тег <code>&lt;ref&gt;</code>;\nэлемент без содержания должен иметь имя.",
+ "cite_error_ref_too_many_keys": "Неправильный тег <code>&lt;ref&gt;</code>;\nошибочные имена, возможно, слишком много",
+ "cite_error_ref_no_input": "Неправильный тег <code>&lt;ref&gt;</code>;\nэлемент без имени должен иметь содержание",
+ "cite_error_references_invalid_parameters": "Неправильный тег <code>&lt;references&gt;</code>;\nпараметры не разрешены.\nИспользуйте <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Ошибочный тег <code>&lt;references&gt;</code>;\nможно использовать только параметр <code>'''group'''</code>.\nИспользуйте <code>&lt;references /&gt;</code> или <code>&lt;references group=\"…\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Не хватает символов для возвратных гиперссылок.\nСледует расширить системное сообщение <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Закончились отметки пользовательских ссылок для группы «$1».\nОпределите дополнительные в сообщении <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Неверный тег <code>&lt;ref&gt;</code>; для сносок <code>$1</code> не указан текст",
+ "cite_error_included_ref": "Отсутствует закрывающий тег <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Для существующих тегов <code>&lt;ref&gt;</code> группы «$1» не найдено соответствующего тега <code>&lt;references group=\"$1\"/&gt;</code> или пропущен закрывающий тег <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "Тег <code>&lt;ref&gt;</code> в <code>&lt;references&gt;</code> имеет конфликтующие группы атрибутов «$1».",
+ "cite_error_references_missing_group": "Тег <code>&lt;ref&gt;</code>, определённый в <code>&lt;references&gt;</code>, имеет атрибут группы «$1», который не упоминается в тексте ранее.",
+ "cite_error_references_missing_key": "Тег <code>&lt;ref&gt;</code> с именем «$1», определённый в <code>&lt;references&gt;</code>, не используется в предшествующем тексте.",
+ "cite_error_references_no_key": "Тег <code>&lt;ref&gt;</code>, определённый в <code>&lt;references&gt;</code>, не имеет атрибута имени.",
+ "cite_error_empty_references_define": "Тег <code>&lt;ref&gt;</code>, определённый в <code>&lt;references&gt;</code>, с именем «$1» не имеет содержания.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "cite_ref-",
+ "cite_references_link_prefix": "cite_note-",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
+ "cite_references_link_many_format_backlink_labels": "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я аа аб ав аг ад ае ё аж аз аи ай ак ал ам ан ао ап ар ас ат ау аф ах ац ач аш ащ аъ аы аь аэ аю ая ба бб бв бг бд бе бж бз би бй бк бл бм бн бо бп бр бс бт бу бф бх бц бч бш бщ бъ бы бь бэ бю бя ва вб вв вг вд ве вж вз ви вй вк вл вм вн во вп вр вс вт ву вф вх вц вч вш вщ въ вы вь вэ вю вя га гб гв гг гд ге гж гз ги гй гк гл гм гн го гп гр гс гт гу гф гх гц гч гш гщ гъ гы гь гэ гю гя да дб дв дг дд де дж дз ди дй дк дл дм дн до дп др дс дт ду дф дх дц дч дш дщ дъ ды дь дэ дю дя еа еб ев ег ед ее еж ез еи ей ек ел ем ен ео еп ер ес ет еу еф ех ец еч еш ещ еъ еы еь еэ ею ея жа жб жв жг жд же жж жз жи жй жк жл жм жн жо жп жр жс жт жу жф жх жц жч жш жщ жъ жы жь жэ жю жя за зб зв зг зд зе зж зз зи зй зк зл зм зн зо зп зр зс зт зу зф зх зц зч зш зщ зъ зы зь зэ зю зя иа иб ив иг ид ие иж из ии ий ик ил им ин ио ип ир ис ит иу иф их иц ич иш ищ иъ иы иь иэ ию ия йа йб йв йг йд йе йж йз йи йй йк йл йм йн йо йп йр йс йт йу йф йх йц йч йш йщ йъ йы йь йэ йю йя ка кб кв кг кд ке кж кз ки кй кк кл км кн ко кп кр кс кт ку кф кх кц кч кш кщ къ кы кь кэ кю кя ла лб лв лг лд ле лж лз ли лй лк лл лм лн ло лп лр лс лт лу лф лх лц лч лш лщ лъ лы ль лэ лю ля ма мб мв мг мд ме мж мз ми мй мк мл мм мн мо мп мр мс мт му мф мх мц мч мш мщ мъ мы мь мэ мю мя на нб нв нг нд не нж нз ни нй нк нл нм нн но нп нр нс нт ну нф нх нц нч нш нщ нъ ны нь нэ ню ня оа об ов ог од ое ож оз ои ой ок ол ом он оо оп ор ос от оу оф ох оц оч ош ощ оъ оы оь оэ ою оя па пб пв пг пд пе пж пз пи пй пк пл пм пн по пп пр пс пт пу пф пх пц пч пш пщ пъ пы пь пэ пю пя ра рб рв рг рд ре рж рз ри рй рк рл рм рн ро рп рр рс рт ру рф рх рц рч рш рщ ръ ры рь рэ рю ря са сб св сг сд се сж сз си сй ск сл см сн со сп ср сс ст су сф сх сц сч сш сщ съ сы сь сэ сю ся та тб тв тг тд те тж тз ти тй тк тл тм тн то тп тр тс тт ту тф тх тц тч тш тщ тъ ты ть тэ тю тя уа уб ув уг уд уе уж уз уи уй ук ул ум ун уо уп ур ус ут уу уф ух уц уч уш ущ уъ уы уь уэ ую уя фа фб фв фг фд фе фж фз фи фй фк фл фм фн фо фп фр фс фт фу фф фх фц фч фш фщ фъ фы фь фэ фю фя ха хб хв хг хд хе хж хз хи хй хк хл хм хн хо хп хр хс хт ху хф хх хц хч хш хщ хъ хы хь хэ хю хя ца цб цв цг цд це цж цз ци цй цк цл цм цн цо цп цр цс цт цу цф цх цц цч цш цщ цъ цы ць цэ цю ця ча чб чв чг чд че чж чз чи чй чк чл чм чн чо чп чр чс чт чу чф чх чц чч чш чщ чъ чы чь чэ чю чя ша шб шв шг шд ше шж шз ши шй шк шл шм шн шо шп шр шс шт шу шф шх шц шч шш шщ шъ шы шь шэ шю шя ща щб щв щг щд ще щж щз щи щй щк щл щм щн що щп щр щс щт щу щф щх щц щч щш щщ щъ щы щь щэ щю щя ъа ъб ъв ъг ъд ъе ъж ъз ъи ъй ък ъл ъм ън ъо ъп ър ъс ът ъу ъф ъх ъц ъч ъш ъщ ъъ ъы ъь ъэ ъю ъя ыа ыб ыв ыг ыд ые ыж ыз ыи ый ык ыл ым ын ыо ып ыр ыс ыт ыу ыф ых ыц ыч ыш ыщ ыъ ыы ыь ыэ ыю ыя ьа ьб ьв ьг ьд ье ьж ьз ьи ьй ьк ьл ьм ьн ьо ьп ьр ьс ьт ьу ьф ьх ьц ьч ьш ьщ ьъ ьы ьь ьэ ью ья эа эб эв эг эд эе эж эз эи эй эк эл эм эн эо эп эр эс эт эу эф эх эц эч эш эщ эъ эы эь ээ эю эя юа юб юв юг юд юе юж юз юи юй юк юл юм юн юо юп юр юс ют юу юф юх юц юч юш ющ юъ юы юь юэ юю юя яа яб яв яг яд яе яж яз яи яй як ял ям ян яо яп яр яс ят яу яф ях яц яч яш ящ яъ яы яь яэ яю яя",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;",
+ "cite_references_link_accessibility_label": "Перейти",
+ "cite_references_link_many_accessibility_label": "Перейти к:"
+}
diff --git a/extensions/Cite/i18n/rue.json b/extensions/Cite/i18n/rue.json
new file mode 100644
index 00000000..90f58613
--- /dev/null
+++ b/extensions/Cite/i18n/rue.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb"
+ ]
+ },
+ "cite-desc": "Придасть таґы <nowiki><ref[ name=\"id\"]></nowiki> і&nbsp;<nowiki><references /></nowiki> на означіня цітацій",
+ "cite_error": "Хыбна цітація: $1",
+ "cite_error_ref_numeric_key": "Хыба в таґу <code>&lt;ref&gt;</code>; назвов не сміє быти просте чісло, хоснуйте пописове означіня",
+ "cite_error_ref_no_key": "Хыба в таґу <code>&lt;ref&gt;</code>; порожнї едітації мусять обсяговати назву",
+ "cite_error_ref_too_many_keys": "Хыба в таґу <code>&lt;ref&gt;</code>; хыбны назвы, напр. є їх дуже много",
+ "cite_error_ref_no_input": "Хыба в таґу <code>&lt;ref&gt;</code>; цітації без назвы мусять мати властный обсяг",
+ "cite_error_references_invalid_parameters": "Хыба в таґу <code>&lt;references&gt;</code>; ту не є доволеный параметер, хоснуйте <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Не платный таґ <tt>&lt;references&gt;</tt>;\nє поволеный лем параметер „group“.\nХоснуйте <tt>&lt;references /&gt;</tt> або <tt>&lt;references group=\"...\" /&gt;</tt>.",
+ "cite_error_references_no_backlink_label": "Дішли означіня зворотных одказів, придайте їх пару до повідомлїня <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Дішли дефінованы значкы про ґрупу „$1“.\nЗвыште їх чісло у повідомлїню <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Хыба в таґу <code>&lt;ref&gt;</code>; цітації означеной <code>$1</code> не є доданый жаден текст",
+ "cite_error_included_ref": "Хыбить закінчіня <code>&lt;/ref&gt;</code> k&nbsp;таґу <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Найдена значка <code>&lt;ref&gt;</code> про ґрупу „$1“, але не існує приналежна значка <code>&lt;references group=\"$1\"/&gt;</code> або хыбить заперачій <code>&lt;/ref&gt;</code>.",
+ "cite_error_references_group_mismatch": "Значка <code>&lt;ref&gt;</code> внутрї <code>&lt;references&gt;</code> має дефіновану іншу ґрупу „$1“.",
+ "cite_error_references_missing_group": "Значка <code>&lt;ref&gt;</code> внутрї <code>&lt;references&gt;</code> хоснує ґрупу „$1“, котра ся в попереднїм текстї не обявує.",
+ "cite_error_references_missing_key": "На <code>&lt;ref&gt;</code> з іменом „$1“ дефінованый внутрї <code>&lt;references&gt;</code> не суть в попереднїм текстї жадны одказы.",
+ "cite_error_references_no_key": "У значкы <code>&lt;ref&gt;</code> дефінованой внутрї <code>&lt;references&gt;</code> хыбить атрібут <code>name</code>.",
+ "cite_error_empty_references_define": "У значкы <code>&lt;ref&gt;</code> з назвов „$1“ дефінованой внутрї <code>&lt;references&gt;</code> хыбить обсяг."
+}
diff --git a/extensions/Cite/i18n/sa.json b/extensions/Cite/i18n/sa.json
new file mode 100644
index 00000000..5b113d98
--- /dev/null
+++ b/extensions/Cite/i18n/sa.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shubha"
+ ]
+ },
+ "cite-desc": "\nAdds<nowiki><ref[ name=id]></nowiki> तथा<nowiki><references/></nowiki> उद्धरणानां कृते सम्पर्कतन्तवः",
+ "cite_error": "उद्धरणे दोषः : $1",
+ "cite_error_ref_numeric_key": "<code>&lt;ref&gt;</code> अमान्यशृङ्खला;\nनाम पूर्णाङ्कसङ्ख्या भवितुं नार्हति । विविरणयुक्तं शिरोनाम उपयुज्यताम् ।",
+ "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> दोषपूर्णा शृङ्खला; \nरिक्ताधाराः अपि सनामकः भवेत् ।",
+ "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> दोषपूर्णा शृङ्खला; \nअमान्यं नाम, उदा. अत्यधिकम्",
+ "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> दोषपूर्णा शृङ्खला; \nरिक्ताधाराः अपि सनामकः भवेयुः ।",
+ "cite_error_references_invalid_parameters": "<code>&lt;references&gt;</code> असिद्धाङ्कनम्; परिमितिः निर्देष्टुम् अशक्या, <code>&lt;references /&gt;</code> उपयुज्यताम्",
+ "cite_error_references_invalid_parameters_group": "<code>&lt;references&gt;</code> अयुक्तकूटप्रणाली;\nपरिमिति''गणः'' एव अनुमतः ।\n<code>&lt;references /&gt;</code> अथवा <code>&lt;references group=\"...\" /&gt;</code> उपयुज्यताम् ।",
+ "cite_error_references_no_backlink_label": "सिद्धानि पूर्वतनसम्पर्कशीर्षकाणि नष्टानि ।\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> इत्यस्मिन् सन्देशे अधिकविवरणं योज्यताम् ।",
+ "cite_error_no_link_label_group": "\"$1\" आधारसमूहस्य कस्टं-सम्पर्क-लेबेल् न्यूनानि जातानि ।\n<nowiki>[[MediaWiki:$2]]</nowiki> सन्देशे अधिकं निर्वचनं दीयताम् ।",
+ "cite_error_references_no_text": "अमान्या <code>&lt;ref&gt;</code> शृङ्खला;\n<code>$1</code> इत्यस्य आधारः अज्ञातः",
+ "cite_error_included_ref": "समाप्तिः <code>&lt;/ref&gt;</code> <code>&lt;ref&gt;</code> शृङ्खला लुप्ता",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code> \"$1\" नामकस्य गणस्य अङ्कनं विद्यते, कीन्तु किमपि अनुरूपं <code>&lt;references group=\"$1\"/&gt;</code> अङ्कनं न प्राप्तम्",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> टैग इन <code>&lt;references&gt;</code>सङ्घर्षगणलक्षणं \"$1\" विद्यते ।",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> अङ्कनपरिभाषिते <code>&lt;references&gt;</code> एतस्मिन् गणस्य विशेषः \"$1\" यश्च पूर्वलेखे न दृष्टम् ।",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> अङ्कनं \"$1\" नाम्ना सह परिभाषितम् <code>&lt;references&gt;</code> पूर्वलेखे उपयोगाय न जातम् ।",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code>अङ्कने परिभाषितं <code>&lt;references&gt;</code> किमपि नामलक्षणं न विद्यते ।",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> अङ्कने परिभाषितं <code>&lt;references&gt;</code> \"$1\" नामिका कापि सामग्री न विद्यते ।"
+}
diff --git a/extensions/Cite/i18n/sah.json b/extensions/Cite/i18n/sah.json
new file mode 100644
index 00000000..c6d77f35
--- /dev/null
+++ b/extensions/Cite/i18n/sah.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "HalanTul"
+ ]
+ },
+ "cite-desc": "Хос быһаарыы <nowiki><ref[ name=id]></nowiki> уонна <nowiki><references/></nowiki> тиэктэрин эбэр",
+ "cite_error": "Цитата сыыһата: $1",
+ "cite_error_ref_numeric_key": "Неправильный вызов: ожидался нечисловой ключ",
+ "cite_error_ref_no_key": "<code>&lt;ref&gt;</code> тиэк алҕаһа (Неправильный вызов): аата (күлүүһэ) ыйыллыбатах",
+ "cite_error_ref_too_many_keys": "<code>&lt;ref&gt;</code> тиэк алҕаһа (Неправильный вызов): аата сыыһа ыйыллыбыт, эбэтэр наһаа элбэх аат суруллубут",
+ "cite_error_ref_no_input": "<code>&lt;ref&gt;</code> тиэк алҕастаах (Неверный вызов): иһинээҕитэ сыыһа",
+ "cite_error_references_invalid_parameters": "Сыыһа параметрдар бэриллибиттэр; <code>&lt;references /&gt;</code> тиэккэ отой суох буолуохтаахтар",
+ "cite_error_references_invalid_parameters_group": "Сыыһалаах <code>&lt;references&gt;</code> тиэк;\n\"group\" эрэ парааматыры туһаныахха сөп.\nМаны <code>&lt;references /&gt;</code>, эбэтэр <code>&lt;references group=\"...\" /&gt;</code> туһан.",
+ "cite_error_references_no_backlink_label": "Төннөрөр сигэлэргэ бэлиэлэрэ тиийбэттэр.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> диэн систиэмэ этиитин кэҥэтэн биэрэххэ наада",
+ "cite_error_no_link_label_group": "«$1» бөлөх кыттааччыларын сигэлэрин бэлиэлэрэ бүппүттэр.\nЭбии манна <nowiki>[[MediaWiki:$2]]</nowiki> оҥор.",
+ "cite_error_references_no_text": "Сыыһа <code>&lt;ref&gt;</code> тиэк (тег);\n<code>$1</code> диэн хос быһаарыыларга аналлаах тиэкис суох",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> диэн сабар тиэк суох эбит",
+ "cite_error_group_refs_without_references": "\"$1\" бөлөх <code>&lt;ref&gt;</code> тиэгигэр сөп түбэһэр <code>&lt;references group=\"$1\"/&gt;</code> тиэк көстүбэтэ",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> туттуллар <code>&lt;ref&gt;</code> тиэк бэйэ бэйэлэрин кытта сөпсөспөт \"$1\" атрибуттаах бөлөхтөрдөөх",
+ "cite_error_references_missing_group": "Бу <code>&lt;references&gt;</code> туттар маннык <code>&lt;ref&gt;</code> тиэгэ бөлөх тиэкиһигэр урут көрсүллүбэтэх \"$1\" атрибуттаах.",
+ "cite_error_references_missing_key": "Бу <code>&lt;references&gt;</code> туттар маннык <code>&lt;ref&gt;</code> \"$1\" диэн тиэгэ бу иннинээҕи тиэкискэ туттуллубат эбит.",
+ "cite_error_references_no_key": "Бу <code>&lt;references&gt;</code> туттар <code>&lt;ref&gt;</code> тиэгэ аатын атрибута суох эбит.",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code> туттар <code>&lt;ref&gt;</code> \"$1\" диэн ааттаах тиэгэ иһинээҕитэ суох эбит."
+}
diff --git a/extensions/Cite/i18n/scn.json b/extensions/Cite/i18n/scn.json
new file mode 100644
index 00000000..919e7662
--- /dev/null
+++ b/extensions/Cite/i18n/scn.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Markos90",
+ "Melos",
+ "Santu"
+ ]
+ },
+ "cite-desc": "Junci li tag <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> pi gistiri li citazzioni",
+ "cite_error": "Sbàgghiu nnâ funzioni Cite $1",
+ "cite_error_ref_numeric_key": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;ref&gt;</code>: lu nomu pò èssiri nu nùmmiru sanu. Usari nu tìtulu discrittivu",
+ "cite_error_ref_no_key": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;ref&gt;</code>: li ref vacanti non ponnu èssiri senza nomu.",
+ "cite_error_ref_too_many_keys": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;ref&gt;</code>: nomi non vàlidi (pi es. nùmmiru troppu àutu)",
+ "cite_error_ref_no_input": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;ref&gt;</code>: li ref senza nomu non ponnu èssiri vacanti",
+ "cite_error_references_invalid_parameters": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;references&gt;</code>: paràmitri non ammittuti, usari li marcaturi <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Sbàgghiu ni l'usu dû marcaturi <code>&lt;references&gt;</code>; \nsulu lu paràmitru \"group\" è pirmittutu.\nUsari <code>&lt;references /&gt;</code> oppuru <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Etichetti di rimannata pirsunalizzati finuti, aumintari lu nùmmiru ntô missàggiu <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_references_no_text": "Marcaturi <code>&lt;ref&gt;</code> non vàlidu; non vinni nnicatu nuddu testu pô marcaturi <code>$1</code>",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> di chiusura mancanti pô marcaturi <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Sù prisenti dê marcatura <code>&lt;ref&gt;</code> pi nu gruppu chiamatu \"$1\" ma nun fu truvatu nissunu marcaturi <code>&lt;references group=\"$1\"/&gt;</code> currispunnenti",
+ "cite_error_references_group_mismatch": "Lu tag <code>&lt;ref&gt;</code> n <code>&lt;references&gt;</code> havi attribuiutu lu gruppu \"$1\" n conflittu.",
+ "cite_error_references_missing_group": "Lu tag <code>&lt;ref&gt;</code> difinutu n <code>&lt;references&gt;</code> havi n'attributu gruppu \"$1\" ca nun cumpari ni lu testu pricidenti.",
+ "cite_error_references_missing_key": "Lu tag <code>&lt;ref&gt;</code> cu nomu \"$1\" difinutu n <code>&lt;references&gt;</code> nun è usatu nô testu pricidenti.",
+ "cite_error_references_no_key": "Lu tag <code>&lt;ref&gt;</code> difinutu n <code>&lt;references&gt;</code> nun havi n'attributu nomu.",
+ "cite_error_empty_references_define": "Lu tag <code>&lt;ref&gt;</code> difinutu n <code>&lt;references&gt;</code> cu lu nomu \"$1\" nun havi alcun cuntinutu.",
+ "cite_reference_link_prefix": "muntuari ref",
+ "cite_references_link_prefix": "muntuari annutazzioni",
+ "cite_references_link_one": "<li id=\"$1\">[[#$2|'''^''']] $3</li>",
+ "cite_references_link_many": "<li id=\"$1\">'''^''' $2 $3</li>",
+ "cite_references_link_many_format": "<sup>''[[#$1|$3]]''</sup>",
+ "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz"
+}
diff --git a/extensions/Cite/i18n/core/sh.json b/extensions/Cite/i18n/sh.json
index c0ae9766..c0ae9766 100644
--- a/extensions/Cite/i18n/core/sh.json
+++ b/extensions/Cite/i18n/sh.json
diff --git a/extensions/Cite/i18n/si.json b/extensions/Cite/i18n/si.json
new file mode 100644
index 00000000..12a9644d
--- /dev/null
+++ b/extensions/Cite/i18n/si.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Budhajeewa",
+ "Thameera123",
+ "නන්දිමිතුරු"
+ ]
+ },
+ "cite-desc": "උපහරණයන් සඳහා, <nowiki><ref[ name=id]></nowiki> සහ <nowiki><references/></nowiki> ටැගයන්, එකතු කරයි",
+ "cite_error": "උපන්‍යාස දෝෂය: $1",
+ "cite_error_ref_numeric_key": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\nනම සරල පූර්ණාංකයක් විය නොහැක. විස්තරශීලි ශිර්ෂයක් භාවිතා කරන්න",
+ "cite_error_ref_no_key": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\nපෙළ විරහිත ආශ්‍රේය සඳහා නමක් තිබිය යුතුය",
+ "cite_error_ref_too_many_keys": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\nඅනීතික නාමයන්, නිද. පමණට වැඩි",
+ "cite_error_ref_no_input": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\nනාමයක් නොමැති ආශ්‍රේය සඳහා පෙළක් තිබිය යුතුය",
+ "cite_error_references_invalid_parameters": "අනීතික <code>&lt;references&gt;</code> ටැගය;\nකිසිම පරාමිතිකයකට ඉඩ නොදෙයි.\n<code>&lt;references /&gt;</code> භාවිත කරන්න",
+ "cite_error_references_invalid_parameters_group": "අනීතික <code>&lt;references&gt;</code> ටැගය;\n\"කාණ්ඩය\" පරාමිතියට පමණක් ඉඩ දෙයි.\n<code>&lt;references /&gt;</code>, හෝ <code>&lt;references group=\"...\" /&gt;</code> භාවිත කරන්න",
+ "cite_error_references_no_backlink_label": "උපයෝග්‍ය පසුසබැඳුම් ලේබල අවසාන විය.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> පණිවුඩයෙහි තවත් ඒවා අර්ථදක්වන්න",
+ "cite_error_no_link_label_group": "\"$1\" කණ්ඩායම සඳහා අභිමත සබැඳි ලේබල අවසන් විය. \n<nowiki>[[MediaWiki:$2]]</nowiki> පණිවුඩයේ තවත් වැඩිපුර සඳහන් කරන්න.",
+ "cite_error_references_no_text": "අනීතික <code>&lt;ref&gt;</code> ටැගය;\n<code>$1</code> නමැති ආශ්‍රේයන් සඳහා කිසිදු පෙළක් සපයා නොතිබුණි",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> ටැගය සොයාගත නොහැකි බැවින් <code>&lt;/ref&gt;</code> වසා දමමින්",
+ "cite_error_group_refs_without_references": "\"$1\" නම් කණ්ඩායම සඳහා <code>&lt;ref&gt;</code> ටැග පැවතුණත්, ඊට අදාළ <code>&lt;references group=\"$1\"/&gt;</code> ටැග සොයාගත නොහැකි විය.",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code> හි <code>&lt;ref&gt;</code> නම් ටැගය \"$1\" යන පරස්පර සමූහ ගුණාංග දරයි.",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code> හි <code>&lt;ref&gt;</code> ටැගය පෙර පෙළෙහි නොතිබූ \"$1\" නම් සමූහ ගුණාංගයක් දරයි.",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code> හි \"$1\" නමැති <code>&lt;ref&gt;</code> ටැගය පෙර පෙළෙහි භාවිතා වූයේ නැත.",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code> හි <code>&lt;ref&gt;</code> ටැගයට නමක් ආදේශකොට නැත.",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code> හි \"$1\" නමැති <code>&lt;ref&gt;</code> ටැගයට අන්තර්ගතයක් නැත.",
+ "cite_reference_link_prefix": "උපන්‍යාස_යොමුව-",
+ "cite_references_link_prefix": "උපන්‍යාස_සටහන-"
+}
diff --git a/extensions/Cite/i18n/sk.json b/extensions/Cite/i18n/sk.json
new file mode 100644
index 00000000..f29ffd48
--- /dev/null
+++ b/extensions/Cite/i18n/sk.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84"
+ ]
+ },
+ "cite-desc": "Pridáva značky <nowiki><ref[ name=id]></nowiki> a <nowiki><references/></nowiki> pre citácie",
+ "cite_error": "Chyba citácie $1",
+ "cite_error_ref_numeric_key": "Neplatné volanie; očakáva sa neceločíselný typ kľúča",
+ "cite_error_ref_no_key": "Neplatné volanie; nebol špecifikovaný kľúč",
+ "cite_error_ref_too_many_keys": "Neplatné volanie; neplatné kľúče, napr. príliš veľa alebo nesprávne špecifikovaný kľúč",
+ "cite_error_ref_no_input": "Neplatné volanie; nebol špecifikovaný vstup",
+ "cite_error_references_invalid_parameters": "Neplatné parametre; neočakávli sa žiadne",
+ "cite_error_references_invalid_parameters_group": "Neplatná značka <code>&lt;references&gt;</code>;\nje povolený iba parameter „group“.\nPoužite <code>&lt;references /&gt;</code> alebo <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Minuli sa generované návestia spätných odkazov, definujte viac v správe <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Vyčerpané prispôsobené označenia odkazov pre skupinu „$1“.\nDefinujte ďalšie v správe <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Neplatná značka <code>&lt;ref&gt;</code>; nebol zadaný text pre referencie s názvom <code>$1</code>",
+ "cite_error_included_ref": "Chýba zakončenie značky <code>&lt;ref&gt;</code> (<code>&lt;/ref&gt;</code>)",
+ "cite_error_group_refs_without_references": "Značky <code>&lt;ref&gt;</code> pre skupinu „$1“ sú prítomné, ale nebola nájdená zodpovedajúca značka <code>&lt;references group=\"$1\"/&gt;</code>",
+ "cite_error_references_group_mismatch": "Značka <code>&lt;ref&gt;</code> v <code>&lt;references&gt;</code> má konfliktný atribút skupiny „$1“.",
+ "cite_error_references_missing_group": "Značka <code>&lt;ref&gt;</code> v <code>&lt;references&gt;</code> má atribút skupiny „$1“, ktorý sa v predošlom texte nevyskytuje.",
+ "cite_error_references_missing_key": "Značka <code>&lt;ref&gt;</code> s názvom „$1“ definovaná v <code>&lt;references&gt;</code> sa v predošlom texte nevyskytuje.",
+ "cite_error_references_no_key": "Značka <code>&lt;ref&gt;</code> s definovaná v <code>&lt;references&gt;</code> nemá žiaden atribút názov.",
+ "cite_error_empty_references_define": "Značka <code>&lt;ref&gt;</code> s definovaná v <code>&lt;references&gt;</code> s názvom „$1“ nemá žiaden obsah."
+}
diff --git a/extensions/Cite/i18n/sl.json b/extensions/Cite/i18n/sl.json
new file mode 100644
index 00000000..f2f8cd79
--- /dev/null
+++ b/extensions/Cite/i18n/sl.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334"
+ ]
+ },
+ "cite-desc": "Doda etiketi <nowiki><ref[ name=id]></nowiki> in <nowiki><references/></nowiki> za navajanje",
+ "cite_error": "Napaka pri navajanju: $1",
+ "cite_error_ref_numeric_key": "Neveljavna oznaka <code>&lt;ref&gt;</code>;\nime ne more biti samo število. Uporabite opisni naslov",
+ "cite_error_ref_no_key": "Neveljavna oznaka <code>&lt;ref&gt;</code>;\nsklici brez vsebine morajo imeti ime",
+ "cite_error_ref_too_many_keys": "Neveljavna etiketa <code>&lt;ref&gt;</code>;\nneveljavna imena, npr. preveč",
+ "cite_error_ref_no_input": "Neveljavna oznaka <code>&lt;ref&gt;</code>;\nsklici brez imena morajo imeti vsebino",
+ "cite_error_references_invalid_parameters": "Neveljavna etiketa <code>&lt;references&gt;</code>;\nparametri niso dovoljeni.\nUporabite <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Neveljavna etiketa <code>&lt;references&gt;</code>;\ndovoljen je samo parameter »group«.\nUporabite <code>&lt;references /&gt;</code> ali <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Zmanjkalo je oznak za povratne povezave.\nDoločite jih več v sporočilu <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_no_link_label_group": "Zmanjkalo je oznak povezav po meri za skupino »$1«.\nDoločite jih več v sporočilu <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Neveljavna oznaka <code>&lt;ref&gt;</code>;\nsklici imenovani <code>$1</code> nimajo določenega besedila",
+ "cite_error_included_ref": "Zaključek <code>&lt;/ref&gt;</code> manjka za etiketo <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Obstajajo etikete <code>&lt;ref&gt;</code> za skupino, imenovano »$1«, vendar ustrezne etikete <code>&lt;references group=\"$1\"/&gt;</code> ni bilo mogoče najti ali pa manjka zaključni <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "Oznaka <code>&lt;ref&gt;</code> v <code>&lt;references&gt;</code> ima atribut nasprotujoče si skupine »$1«.",
+ "cite_error_references_missing_group": "Oznaka <code>&lt;ref&gt;</code>, opredeljena v <code>&lt;references&gt;</code>, ima atribut skupine »$1«, ki se ne pojavi v predhodnem besedilu.",
+ "cite_error_references_missing_key": "Oznaka <code>&lt;ref&gt;</code> z imenom »$1«, opredeljena v <code>&lt;references&gt;</code>, ni uporabljena v predhodnem besedilu.",
+ "cite_error_references_no_key": "Etiketa <code>&lt;ref&gt;</code>, določena v <code>&lt;references&gt;</code>, nima lastnosti »name«.",
+ "cite_error_empty_references_define": "Etiketa <code>&lt;ref&gt;</code>, določena v <code>&lt;references&gt;</code> z imenom »$1«, nima vsebine.",
+ "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">'''[[#$2|^]]'''</span> $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">^ $2</span> $3</li>",
+ "cite_references_link_many_format_backlink_labels": "a b c č d e f g h i j k l m n o p r s š t u v z ž a aa ab ac ač ad ae af ag ah ai aj ak al am an ao ap ar as aš at au av az až b ba bb bc bč bd be bf bg bh bi bj bk bl bm bn bo bp br bs bš bt bu bv bz bž c ca cb cc cč cd ce cf cg ch ci cj ck cl cm cn co cp cr cs cš ct cu cv cz cž č ča čb čc čč čd če čf čg čh či čj čk čl čm čn čo čp čr čs čš čt ču čv čz čž d da db dc dč dd de df dg dh di dj dk dl dm dn do dp dr ds dš dt du dv dz dž e ea eb ec eč ed ee ef eg eh ei ej ek el em en eo ep er es eš et eu ev ez ež f fa fb fc fč fd fe ff fg fh fi fj fk fl fm fn fo fp fr fs fš ft fu fv fz fž g ga gb gc gč gd ge gf gg gh gi gj gk gl gm gn go gp gr gs gš gt gu gv gz gž h ha hb hc hč hd he hf hg hh hi hj hk hl hm hn ho hp hr hs hš ht hu hv hz hž i ia ib ic ič id ie if ig ih ii ij ik il im in io ip ir is iš it iu iv iz iž j ja jb jc jč jd je jf jg jh ji jj jk jl jm jn jo jp jr js jš jt ju jv jz jž k ka kb kc kč kd ke kf kg kh ki kj kk kl km kn ko kp kr ks kš kt ku kv kz kž l la lb lc lč ld le lf lg lh li lj lk ll lm ln lo lp lr ls lš lt lu lv lz lž m ma mb mc mč md me mf mg mh mi mj mk ml mm mn mo mp mr ms mš mt mu mv mz mž n na nb nc nč nd ne nf ng nh ni nj nk nl nm nn no np nr ns nš nt nu nv nz nž o oa ob oc oč od oe of og oh oi oj ok ol om on oo op or os oš ot ou ov oz ož p pa pb pc pč pd pe pf pg ph pi pj pk pl pm pn po pp pr ps pš pt pu pv pz pž r ra rb rc rč rd re rf rg rh ri rj rk rl rm rn ro rp rr rs rš rt ru rv rz rž s sa sb sc sč sd se sf sg sh si sj sk sl sm sn so sp sr ss sš st su sv sz sž š ša šb šc šč šd še šf šg šh ši šj šk šl šm šn šo šp šr šs šš št šu šv šz šž t ta tb tc tč td te tf tg th ti tj tk tl tm tn to tp tr ts tš tt tu tv tz tž u ua ub uc uč ud ue uf ug uh ui uj uk ul um un uo up ur us uš ut uu uv uz už v va vb vc vč vd ve vf vg vh vi vj vk vl vm vn vo vp vr vs vš vt vu vv vz vž z za zb zc zč zd ze zf zg zh zi zj zk zl zm zn zo zp zr zs zš zt zu zv zz zž ž ža žb žc žč žd že žf žg žh ži žj žk žl žm žn žo žp žr žs žš žt žu žv žz žž",
+ "cite_references_link_accessibility_label": "Skoči gor",
+ "cite_references_link_many_accessibility_label": "Skoči gor na:"
+}
diff --git a/extensions/Cite/i18n/special/ace.json b/extensions/Cite/i18n/special/ace.json
deleted file mode 100644
index 65c16da8..00000000
--- a/extensions/Cite/i18n/special/ace.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Si Gam Acèh"
- ]
- },
- "cite_article_link": "Cok ôn nyoë"
-}
diff --git a/extensions/Cite/i18n/special/af.json b/extensions/Cite/i18n/special/af.json
deleted file mode 100644
index aefdc70d..00000000
--- a/extensions/Cite/i18n/special/af.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Naudefj",
- "SPQRobin"
- ]
- },
- "cite_article_desc": "Maak 'n [[Special:Cite|spesiale bladsy vir sitasie]], en 'n skakel daarna in hulpmiddels beskikbaar",
- "cite_article_link": "Haal dié blad aan",
- "tooltip-cite-article": "Inligting oor hoe u hierdie bladsy kan citeer",
- "cite": "Aanhaling",
- "cite_page": "Bladsy:",
- "cite_submit": "Aanhaling"
-}
diff --git a/extensions/Cite/i18n/special/am.json b/extensions/Cite/i18n/special/am.json
deleted file mode 100644
index 339e3d36..00000000
--- a/extensions/Cite/i18n/special/am.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Codex Sinaiticus",
- "Teferra"
- ]
- },
- "cite_article_link": "ይህንን ገጽ አጣቅስ",
- "cite": "መጥቀሻ",
- "cite_page": "አርዕስት፦",
- "cite_submit": "ዝርዝሮች ይታዩ"
-}
diff --git a/extensions/Cite/i18n/special/an.json b/extensions/Cite/i18n/special/an.json
deleted file mode 100644
index 47e81c3a..00000000
--- a/extensions/Cite/i18n/special/an.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Juanpabl"
- ]
- },
- "cite_article_desc": "Adibe un vinclo y una pachina especial de [[Special:Cite|cita]]",
- "cite_article_link": "Citar ista pachina",
- "tooltip-cite-article": "Información de como citar ista pachina",
- "cite": "Citar",
- "cite_page": "Pachina:",
- "cite_submit": "Citar"
-}
diff --git a/extensions/Cite/i18n/special/ar.json b/extensions/Cite/i18n/special/ar.json
deleted file mode 100644
index 5b5d1d9a..00000000
--- a/extensions/Cite/i18n/special/ar.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Meno25",
- "OsamaK"
- ]
- },
- "cite_article_desc": "يضيف صفحة [[Special:Cite|استشهاد]] خاصة ووصلة صندوق أدوات",
- "cite_article_link": "استشهد بهذه الصفحة",
- "tooltip-cite-article": "معلومات عن كيفية الاستشهاد بالصفحة",
- "cite": "استشهاد",
- "cite_page": "الصفحة:",
- "cite_submit": "استشهاد",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== تفاصيل التأليف ل{{FULLPAGENAME}} ==\n\n* اسم الصفحة: {{FULLPAGENAME}}\n* المؤلف: مساهمو {{SITENAME}}\n* الناشر: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* تاريخ آخر مراجعة: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* تاريخ الاسترجاع: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* وصلة دائمة: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* رقم نسخة الصفحة: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== أنماط الاستشهاد ل{{FULLPAGENAME}} ==\n\n=== [[APA style|نمط APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|نمط MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|نمط MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|نمط شيكاغو]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|نمط CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|نمط Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== مدخلة [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nعند استخدام وصلة مجموعة [[LaTeX]] (<code>\\usepackage{url}</code> في مكان ما) مما يؤدي إى إعطاء عناوين ويب مهيأة بشكل أفضل، التالي ربما يكون مفضلا:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/arc.json b/extensions/Cite/i18n/special/arc.json
deleted file mode 100644
index 8c2c9205..00000000
--- a/extensions/Cite/i18n/special/arc.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Basharh"
- ]
- },
- "cite_article_link": "ܡܣܗܕ ܥܠ ܗܕܐ ܦܐܬܐ",
- "tooltip-cite-article": "ܝܕ̈ܥܬܐ ܥܠ ܐܝܟܢܐ ܕܡܣܗܕ ܥܠ ܦܐܬܐ",
- "cite": "ܡܣܗܕ",
- "cite_page": "ܦܐܬܐ:",
- "cite_submit": "ܡܣܗܕ",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== ܐܪ̈ܝܟܬܐ ܕܦܘܓܪܦܐ ܕ {{FULLPAGENAME}} ==\n\n* ܫܡܐ ܕܦܐܬܐ: {{FULLPAGENAME}}\n* ܣܝܘܡܐ: ܫܘܬܦܢ̈ܐ ܕ {{SITENAME}}\n* ܡܦܪܣܐ: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* ܣܝܩܘܡܐ ܕܬܢܝܬܐ ܐܚܪܝܬܐ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* ܣܝܩܘܡܐ ܕܡܬܦܢܝܢܘܬܐ: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* ܐܣܘܪܐ ܦܝܘܫܐ: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ܗܝܝܘܬܐ ܕܨܚܚܐ ܕܦܐܬܐ: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== ܙܢܝ̈ܐ ܕܡܣܗܕܬܐ ܕ {{FULLPAGENAME}} ==\n\n=== [[ܙܢܐ ܕ APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|ܙܢܐ ܕ MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|ܙܢܐ ܕ MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style| ܙܢܐ ܕ Chicago]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|ܙܢܐ ܕ CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|ܙܢܐ ܕ Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== ܡܥܠܬܐ ܕ [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/arn.json b/extensions/Cite/i18n/special/arn.json
deleted file mode 100644
index 5c199cd2..00000000
--- a/extensions/Cite/i18n/special/arn.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kaniw",
- "Remember the dot"
- ]
- },
- "cite_article_desc": "Yomvmi kiñe wicu aztapvl ñi [[Special:Cite|konvmpan]] mew ka jasun kvzawpeyvm mew",
- "cite_article_link": "Konvmpape faci xoy",
- "tooltip-cite-article": "Cumley konvmpageay faci xoy",
- "cite": "Konvmpan",
- "cite_page": "Aztapvl:",
- "cite_submit": "Konvmpan"
-}
diff --git a/extensions/Cite/i18n/special/arz.json b/extensions/Cite/i18n/special/arz.json
deleted file mode 100644
index 7c857c4e..00000000
--- a/extensions/Cite/i18n/special/arz.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ghaly",
- "Ramsis II"
- ]
- },
- "cite_article_desc": "بيضيف [[Special:Cite|مرجع]] صفحة مخصوصة ولينك لصندوء أدوات",
- "cite_article_link": "استشهد بالصفحة دى",
- "cite": "مرجع",
- "cite_page": "الصفحه:",
- "cite_submit": "مرجع",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== تفاصيل التأليف ل{{FULLPAGENAME}} ==\n\n* اسم الصفحة: {{FULLPAGENAME}}\n* المؤلف: مساهمو {{SITENAME}}\n* الناشر: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* تاريخ آخر مراجعة: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* تاريخ الاسترجاع: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* وصلة دائمة: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* رقم نسخة الصفحة: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n\n== أنماط الاستشهاد ل{{FULLPAGENAME}} ==\n\n=== [[APA style|نمط APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|نمط MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|نمط MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|نمط شيكاغو]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|نمط CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|نمط Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== مدخلة [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nعند استخدام وصلة مجموعة [[LaTeX]] (<code>\\usepackage{url}</code> في مكان ما) مما يؤدى إلى إعطاء عناوين ويب مهيأة بشكل أفضل، التالى ربما يكون مفضلا:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/as.json b/extensions/Cite/i18n/special/as.json
deleted file mode 100644
index 0991659f..00000000
--- a/extensions/Cite/i18n/special/as.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bishnu Saikia",
- "Gitartha.bordoloi"
- ]
- },
- "cite_article_desc": "এটা [[Special:Cite|উদ্ধৃতি]] পৃষ্ঠা আৰু এটা সা-সৰঞ্জাম লিংক যোগ কৰে",
- "cite_article_link": "এই পৃষ্ঠাৰ উদ্ধৃতি দিয়ক",
- "tooltip-cite-article": "এই পৃষ্ঠাখনৰ উদ্ধৃতি দিয়াৰ বিষয়ে তথ্য",
- "cite": "↓উদ্ধৃত",
- "cite_page": "পৃষ্ঠা:",
- "cite_submit": "↓উদ্ধৃত",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}} জীৱনীমূলক তথ্য ==\n\n* পৃষ্ঠাৰ নাম: {{FULLPAGENAME}}\n* লিখক: {{SITENAME}} contributors\n* প্ৰকাশক: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* অন্তিম সংস্কৰণৰ তাৰিখ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} ইউ.টি.ছি.\n* আহৰণৰ তাৰিখ: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* স্থায়ী ইউ.আৰ.এল.: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* পৃষ্ঠাৰ সংস্কৰণৰ আই.ডি.: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}}ৰ বাবে উদ্ধৃতি সজ্জা ==\n\n=== [[APA style|APA সজ্জা]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. আহৰণ <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> পৰা {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA সজ্জা]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA সজ্জা]] ===\n{{SITENAME}} বৰঙনিদাতাসকল, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|চিকাগো সজ্জা]] ===\n{{SITENAME}} বৰঙনিদাতাসকল, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (আহৰণ <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE সজ্জা]] ===\n{{SITENAME}} বৰঙনিদাতাসকল. {{FULLPAGENAME}} [ইণ্টাৰনেট]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [উদ্ধৃত <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. উপলদ্ধ :\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook সজ্জা]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (অন্তিম পৰিদৰ্শন <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[অনলাইন; আহৰিত <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[অনলাইন; আহৰিত <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ast.json b/extensions/Cite/i18n/special/ast.json
deleted file mode 100644
index f60b8a2d..00000000
--- a/extensions/Cite/i18n/special/ast.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Esbardu",
- "Xuacu"
- ]
- },
- "cite_article_desc": "Añade una páxina especial de [[Special:Cite|cites]] y un enllaz a la caxa de ferramientes",
- "cite_article_link": "Citar esta páxina",
- "tooltip-cite-article": "Información tocante a cómo citar esta páxina",
- "cite": "Citar",
- "cite_page": "Páxina:",
- "cite_submit": "Citar",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Datos bibliográficos pa {{FULLPAGENAME}} ==\n\n* Nome de la páxina: {{FULLPAGENAME}}\n* Autor: collaboradores de {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data de la última revisión: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data na que s'algamó: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Dirección URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID de versión de la páxina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Estilu de cites pa {{FULLPAGENAME}} ==\n\n=== [[APA style|Estilu APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Consultáu el <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> en {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Estilu MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Estilu MHRA]] ===\nCollaboradores de {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consultáu el <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Estilu Chicago]] ===\nCollaboradores de {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consultáu el <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estilu CBE/CSE]] ===\nCollaboradores de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citáu el <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible en:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estilu Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (última visita: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrada [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n títulu = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n añu = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n nota = \"[En llinia; consultáu el <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nCuando s'utiliza la dirección URL del paquete [[LaTeX]] (<code>\\usepackage{url}</code> n'algún llugar del preámbulu) que tiende a dar direiciones web con meyor formatu, pue ser preferible lo siguiente:\n\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n títulu = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n añu = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n nota = \"[En llinia; consultáu el <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--zarrando'l div de \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/av.json b/extensions/Cite/i18n/special/av.json
deleted file mode 100644
index e0812c51..00000000
--- a/extensions/Cite/i18n/special/av.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Amikeco"
- ]
- },
- "cite_article_link": "Гьумер рехсезе"
-}
diff --git a/extensions/Cite/i18n/special/az.json b/extensions/Cite/i18n/special/az.json
deleted file mode 100644
index c5182a8f..00000000
--- a/extensions/Cite/i18n/special/az.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Cekli829"
- ]
- },
- "cite": "Sayt",
- "cite_page": "Səhifə:",
- "cite_submit": "Sayt"
-}
diff --git a/extensions/Cite/i18n/special/azb.json b/extensions/Cite/i18n/special/azb.json
deleted file mode 100644
index 01529e54..00000000
--- a/extensions/Cite/i18n/special/azb.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Amir a57",
- "Mousa"
- ]
- },
- "cite_article_desc": "بیر اؤزل [[Special:Cite|آلینتی]] صحیفه‌سی و آراج-قوتوسو باغلانتی‌سی آرتیرار",
- "cite_article_link": "بو صحیفه‌دن آلینتی گؤتور",
- "tooltip-cite-article": "بو صحیفه‌دن نئجه آلینتی گؤتورمک اوچون بیلگیلر",
- "cite": "سایت",
- "cite_page": "صحیفه:",
- "cite_submit": "سایت",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}} اوچون قایناق‌جالیق بیلگیلری ==\n\n* صحیفه آدی: {{FULLPAGENAME}}\n* یارادیجی: {{SITENAME}} ایستیفاده‌چیلری\n* نشر ائدن: ''{{SITENAME}}، {{int:sitesubtitle}}''.\n* سون نوسخه‌نین تاریخی: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* گؤتورن تاریخ: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* قالیجی آدرس: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* صحیفه نوسخه بلیردنی: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}} اوچون آلینتی بیچیملری ==\n\n=== [[APA بیچیمی]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA بیچیم بیلگیلری|MLA بیچیمی]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA بیچیم رهبرلیگی|MHRA بیچیمی]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[شیکاگو بیچیم بیلگیلری|شیکاگو بیچیمی]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[بیلگی شوراسی یازارلاری|CBE/CSE بیچیمی]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook بیچیمی]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] بیچیمی ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[لتک]] یوآر‌اِل بسته‌سینی ایشلدن‌ده (<code>\\usepackage{url}</code> باشلیق ایچینده) کی داها گؤزل بیچیملنمیش اینترنت آدرسلری وئرر، بو آشاغیداکی ترجیح وئریلیر:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ba.json b/extensions/Cite/i18n/special/ba.json
deleted file mode 100644
index 7385415b..00000000
--- a/extensions/Cite/i18n/special/ba.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Assele",
- "Haqmar"
- ]
- },
- "cite_article_desc": "[[Special:Cite|Өҙөмтә яһау]] махсус битен һәм ҡоралдарҙа һылтанма өҫтәй",
- "cite_article_link": "Биттән өҙөмтә яһарға",
- "tooltip-cite-article": "Был битте нисек өҙөмтәләргә кәрәклеге тураһында мәғлүмәт",
- "cite": "Өҙөмтәләү",
- "cite_page": "Бит:",
- "cite_submit": "Өҙөмтәләргә"
-}
diff --git a/extensions/Cite/i18n/special/bar.json b/extensions/Cite/i18n/special/bar.json
deleted file mode 100644
index 15388558..00000000
--- a/extensions/Cite/i18n/special/bar.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Man77",
- "Mucalexx"
- ]
- },
- "cite_article_desc": "Ergänzd d' [[Special:Cite|Zitirhüf]]-Speziaalseiten und an Link im Werkzeigkosten",
- "cite_article_link": "d' Seiten zitirn",
- "tooltip-cite-article": "Hihweis, wia dé Seiten zitird wern kå",
- "cite": "Zitirhüf",
- "cite_page": "Seiten:",
- "cite_submit": "åzoang"
-}
diff --git a/extensions/Cite/i18n/special/bcc.json b/extensions/Cite/i18n/special/bcc.json
deleted file mode 100644
index 7037ac60..00000000
--- a/extensions/Cite/i18n/special/bcc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Mostafadaneshvar"
- ]
- },
- "cite_article_desc": "اضافه کن یک [[Special:Cite|citation]] صفحه حاص و لینک جعبه ابزار",
- "cite_article_link": "ای صفحه ی مرجع بل",
- "cite": "مرجع",
- "cite_page": "صفحه:",
- "cite_submit": "مرجع"
-}
diff --git a/extensions/Cite/i18n/special/bcl.json b/extensions/Cite/i18n/special/bcl.json
deleted file mode 100644
index f88b4697..00000000
--- a/extensions/Cite/i18n/special/bcl.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Filipinayzd",
- "Geopoet"
- ]
- },
- "cite_article_desc": "Nagdudugang nin sarong [[Special:Cite|citation]] espesyal na pahina asin kasugpunan sa palindông kahon",
- "cite_article_link": "Isambit ining pahina",
- "tooltip-cite-article": "Impormasyon kun paanuhon na sambiton ining pahina",
- "cite": "Sambiton",
- "cite_page": "Pahina:",
- "cite_submit": "Sambiton",
- "cite_text": "__NOTOC__ \n<div class=\"mw-specialcite-bibliographic\"> \n\n== Bibliograpikong mga detalye para sa {{FULLPAGENAME}} == \n* Pangaran kan pahina: {{FULLPAGENAME}} \n* Awtor: {{SITENAME}} mga paraambag \n* Publikador: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Petsa kan huring pagliwat: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC \n* Petsa kan pagbawi: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation> \n* Permanenteng URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} \n* ID kan Bersyon kan Pahina: {{REVISIONID}} \n\n</div> \n<div class=\"plainlinks mw-specialcite-styles\"> \n\n== Pagsambit na mga istilo para sa {{FULLPAGENAME}} == \n\n=== [[Istilong APA]] === \n\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Pinagbawi <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> gikan sa {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. \n\n=== [[An MLA Manwal na Istilo|Istilong MLA]] === \"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;. \n\n=== [[MHRA Giya sa Istilo|Istilo sa MHRA]] === \n{{SITENAME}} mga paraambag, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>] \n\n=== [[An Chicago Manwal na Istilo|Istilo sa Chicago]] === \n{{SITENAME}} mga paraambag, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). \n\n=== [[Konseho kan mga Paraliwat sa Siyensiya|CBE/CSE style]] === \n{{SITENAME}} mga paraambag. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Yaon gikan sa : {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. \n\n=== [[Librong Asul|Istilo sa Librong Asul]] === \n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). \n\n=== [[BibTeX]] entrada === \n\n@misc{ wiki:xxx, awtor = \"{{SITENAME}}\", titulo = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\", taon = \"{{CURRENTYEAR}}\", url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\", tandai = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\" }\n\nKunsoarin na ginagamit an [[Latex]] pampaketeng url (<code>\\usepackage{url}</code> yason sa parte kan prayambulo) na tantong minatao nin mas marhayon na kadagdagan sa pormat kan mga estada sa web, an minasunod mapupuwedeng pagpipilian: \n\n@misc{ wiki:xxx, \nawtor = \"{{SITENAME}}\", titulo = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\", taon = \"{{CURRENTYEAR}}\", url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\", tandaan = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\" \n} \n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/be-tarask.json b/extensions/Cite/i18n/special/be-tarask.json
deleted file mode 100644
index c087d504..00000000
--- a/extensions/Cite/i18n/special/be-tarask.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "EugeneZelenko",
- "Wizardist"
- ]
- },
- "cite_article_desc": "Дадае спэцыяльную старонку [[Special:Cite|цытаваньня]] і спасылку ў інструмэнтах",
- "cite_article_link": "Цытаваць старонку",
- "tooltip-cite-article": "Інфармацыя пра тое, як цытатаваць гэтую старонку",
- "cite": "Цытаваньне",
- "cite_page": "Старонка:",
- "cite_submit": "Цытаваць",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Бібліяграфічныя зьвесткі артыкула «{{FULLPAGENAME}}» ==\n\n* Назва артыкула: {{FULLPAGENAME}}\n* Аўтар: Рэдактары {{GRAMMAR:родны|{{SITENAME}}}}\n* Выдавец: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Дата апошняй рэвізіі: {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Дата атрыманьня: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Сталы URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Ідэнтыфікатар вэрсіі артыкула: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Цытаваньне артыкула «{{FULLPAGENAME}}» рознымі стандартамі ==\n\n=== [[Стыль АПА]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA style manual|Стыль MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Стыль MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Стыль Чыкага]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Стыль CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Стыль Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nПры выкарыстаньні пакета url для [[LaTeX]] (<code>\\usepackage{url}</code> у пачатку) можна дабіцца лепшага выяўленьня вэб-адрасоў. Неабходна аформіць наступным чынам:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/be.json b/extensions/Cite/i18n/special/be.json
deleted file mode 100644
index 65ae386c..00000000
--- a/extensions/Cite/i18n/special/be.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Хомелка"
- ]
- },
- "cite_article_desc": "Дадае [[Special:Cite|цытату]] адмысловых старонак і спасылку панэлі інструментаў",
- "cite_article_link": "Цытаваць гэту старонку",
- "tooltip-cite-article": "Інфармацыя пра тое, як цытаваць гэтую старонку",
- "cite": "Спаслацца",
- "cite_page": "Старонка:",
- "cite_submit": "Спаслацца"
-}
diff --git a/extensions/Cite/i18n/special/bg.json b/extensions/Cite/i18n/special/bg.json
deleted file mode 100644
index b64292d0..00000000
--- a/extensions/Cite/i18n/special/bg.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "DCLXVI",
- "Turin"
- ]
- },
- "cite_article_desc": "Добавя специална страница и препратка за [[Special:Cite|цитиране]]",
- "cite_article_link": "Цитиране на страницата",
- "tooltip-cite-article": "Данни за начин на цитиране на тази страница",
- "cite": "Цитиране",
- "cite_page": "Страница:",
- "cite_submit": "Цитиране"
-}
diff --git a/extensions/Cite/i18n/special/bn.json b/extensions/Cite/i18n/special/bn.json
deleted file mode 100644
index 27066817..00000000
--- a/extensions/Cite/i18n/special/bn.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bellayet",
- "Zaheen"
- ]
- },
- "cite_article_desc": "একটি বিশেষ [[Special:Cite|উদ্ধৃতি]] পাতা ও টুলবক্স সংযোগ যোগ করে",
- "cite_article_link": "এ পাতাটি উদ্ধৃত করো",
- "cite": "উদ্ধৃত",
- "cite_page": "পাতা:",
- "cite_submit": "উদ্ধৃত করো"
-}
diff --git a/extensions/Cite/i18n/special/bo.json b/extensions/Cite/i18n/special/bo.json
deleted file mode 100644
index 83d167df..00000000
--- a/extensions/Cite/i18n/special/bo.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Freeyak"
- ]
- },
- "cite": "",
- "cite_page": "ཤོག་ངོས།"
-}
diff --git a/extensions/Cite/i18n/special/bpy.json b/extensions/Cite/i18n/special/bpy.json
deleted file mode 100644
index 86039a85..00000000
--- a/extensions/Cite/i18n/special/bpy.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "নিবন্ধ এহানরে উদ্ধৃত করেদে",
- "cite": "উদ্ধৃত করেদে"
-}
diff --git a/extensions/Cite/i18n/special/br.json b/extensions/Cite/i18n/special/br.json
deleted file mode 100644
index 467be305..00000000
--- a/extensions/Cite/i18n/special/br.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Fulup"
- ]
- },
- "cite_article_desc": "Ouzhpennañ a ra ur bajenn dibar [[Special:Cite|arroud]] hag ul liamm er voest ostilhoù",
- "cite_article_link": "Menegiñ ar pennad-mañ",
- "tooltip-cite-article": "Titouroù war an doare da venegiñ ar bajenn-mañ",
- "cite": "Menegiñ",
- "cite_page": "Pajenn :",
- "cite_submit": "Menegiñ",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Titouroù levrlennadurel evit {{FULLPAGENAME}} ==\n\n* Anv ar bajenn : {{FULLPAGENAME}} \n* Aozer : kenlabourerien {{SITENAME}}\n* Embanner : ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Kemm diwezhañ : {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Deiziad adtapout : <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL pad : {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identeler ar stumm-mañ : {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Stiloù arroudoù evit {{FULLPAGENAME}} ==\n\n=== [[Stil APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Adtapet d'an <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> e {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Stil MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Stil MHRA]] ===\nPerzhidi {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [sellet d'an <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Stil Chicago]] ===\nPerzhidi {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sellet d'an <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Stil CBE/CSE]] ===\nPerzhidi {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [meneget d'an <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Hegerz war : \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Stil Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sellet d'an <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Enmont [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Enlinenn ; sellet d'an <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nMa rit gant ar pakadur URL e [[LaTeX]] (<code>\\usepackage{url}</code> en ul lec'h bennak er raklavar), a bourchas chomlec'hioù Web furmadet gwelloc'h, grit gant ar furmad-mañ :\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Enlinenn ; sellet d'an <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/bs.json b/extensions/Cite/i18n/special/bs.json
deleted file mode 100644
index 3a0891c3..00000000
--- a/extensions/Cite/i18n/special/bs.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "CERminator"
- ]
- },
- "cite_article_desc": "Dodaje posebnu stranicu za [[Special:Cite|citiranje]] i link u alatnoj kutiji",
- "cite_article_link": "Citiraj ovu stranicu",
- "tooltip-cite-article": "Informacije kako citirati ovu stranicu",
- "cite": "Citiranje",
- "cite_page": "Stranica:",
- "cite_submit": "Citiraj"
-}
diff --git a/extensions/Cite/i18n/special/bto.json b/extensions/Cite/i18n/special/bto.json
deleted file mode 100644
index 4ec09097..00000000
--- a/extensions/Cite/i18n/special/bto.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Filipinayzd"
- ]
- },
- "cite_page": "Pahina:"
-}
diff --git a/extensions/Cite/i18n/special/bxr.json b/extensions/Cite/i18n/special/bxr.json
deleted file mode 100644
index 0e62e31d..00000000
--- a/extensions/Cite/i18n/special/bxr.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Elvonudinium"
- ]
- },
- "cite_article_link": "Энэ хуудаһаһаа эшэ татаха"
-}
diff --git a/extensions/Cite/i18n/special/ca.json b/extensions/Cite/i18n/special/ca.json
deleted file mode 100644
index 5b48f8b5..00000000
--- a/extensions/Cite/i18n/special/ca.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Davidpar",
- "SMP",
- "Toniher",
- "Vriullop"
- ]
- },
- "cite_article_desc": "Afegeix un enllaç i una pàgina especial de [[Special:Cite|citació]]",
- "cite_article_link": "Cita aquesta pàgina",
- "tooltip-cite-article": "Informació sobre com citar aquesta pàgina.",
- "cite": "Citeu",
- "cite_page": "Pàgina:",
- "cite_submit": "Cita",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Informació bibliogràfica de {{FULLPAGENAME}} ==\n\n* Pàgina: {{FULLPAGENAME}}\n* Autor: col·laboradors del projecte {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Darrera versió: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Consulta: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanent: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identificador de la versió: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Estils de citacions per {{FULLPAGENAME}} ==\n\n=== [[Llibre d'estil APA|Estil APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Recuperat <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> a {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Llibre d'estil MLA|Estil MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Llibre d'estil MHRA|Estil MHRA]] ===\nCol·laboradors de {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consulta <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Llibre d'estil Chicago|Estil Chicago]] ===\nCol·laboradors de {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consulta <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estil CBE/CSE]] ===\nCol·laboradors de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citat <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible a:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estil Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (darrera consulta <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrada [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[En línia; consulta <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nSi empreu el paquet url per a [[LaTeX]] (<code>\\usepackage{url}</code> en algun lloc del preàmbul) que facilita el format d'adreces web, pot ser millor el codi següent:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[En línia; consulta <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/cdo.json b/extensions/Cite/i18n/special/cdo.json
deleted file mode 100644
index 2329511b..00000000
--- a/extensions/Cite/i18n/special/cdo.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Yejianfei"
- ]
- },
- "cite_article_link": "標記茲蜀頁",
- "cite": "標記",
- "cite_page": "頁面",
- "cite_submit": "標記"
-}
diff --git a/extensions/Cite/i18n/special/ce.json b/extensions/Cite/i18n/special/ce.json
deleted file mode 100644
index 0d4291b8..00000000
--- a/extensions/Cite/i18n/special/ce.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Sasan700",
- "Умар"
- ]
- },
- "cite_article_desc": "ГӀирсан тӀе туху [[Special:Cite|дешнаш дало]] белхан агӀо а хьажораг а",
- "cite_article_link": "АгӀонах лаьцна дешнаш дало",
- "tooltip-cite-article": "ХӀара бу хаам агӀонах лаьцна дешнаш муха дало деза гойтуш",
- "cite": "АгӀона тӀе йолу библиографин хьажоргаш",
- "cite_page": "АгӀо:",
- "cite_submit": "Кечъе хьажоргаш",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}} агӀона библиографин хаамаш ==\n\n* Яззам: {{FULLPAGENAME}}\n* Автор: {{SITENAME}} автораш\n* Кхоьллина: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* ТӀехьара хийцам бина: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Чуяьккхина терахь: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Даиман йолу хьажораг: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* АгӀон версийн ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== «{{FULLPAGENAME}}» агӀона тӀе йолу хьажоргаш кечяран кепаш ==\n\n=== [http://protect.gost.ru/document.aspx?control=7&id=173511 ГОСТ 7.0.5—2008] хатӀ (библиографин хьажораг) ===\n{{FULLPAGENAME}} // {{SITENAME}}. [{{REVISIONYEAR}}—{{REVISIONYEAR}}]. Карлаяьккхина терахь: {{#time:d.m.Y|{{REVISIONTIMESTAMP}}}}. URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (дехар дина терахь: {{#time:d.m.Y|{{LOCALTIMESTAMP}}}}).\n<div style=\"font-size:smaller; padding-left:2.5em\">\n\n</div>\n\n=== [[ГОСТ 7.1|ГОСТ 7.1—2003]] и [[ГОСТ 7.82|ГОСТ 7.82—2001]] хатӀ (доца библиографин дӀаяздар) ===\n{{FULLPAGENAME}} [Электронан ресурс] : {{int:Tagline}} : Верси {{REVISIONID}}, Ӏалашйина {{CURRENTTIME}} UTC {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} / Википедин автораш // {{SITENAME}}, {{int:sitesubtitle}}. — Электрон. дан. — Сан-Франциско: Викимедиан фонд, {{CURRENTYEAR}}. — ТӀекхачаран хьал: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA style|ХатӀ APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|ХатӀ MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|ХатӀ MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Чикаган хатӀ]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|ХатӀ CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] чура дӀаяздар ===\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[LaTeX]]-гулам лела беш url веб-адресаш дика гайта (<code>\\usepackage{url}</code>), лелайича дика хира ду:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ceb.json b/extensions/Cite/i18n/special/ceb.json
deleted file mode 100644
index c5e49a34..00000000
--- a/extensions/Cite/i18n/special/ceb.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Abastillas"
- ]
- },
- "cite": "Kutloa"
-}
diff --git a/extensions/Cite/i18n/special/ckb.json b/extensions/Cite/i18n/special/ckb.json
deleted file mode 100644
index 1c2ffea1..00000000
--- a/extensions/Cite/i18n/special/ckb.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Asoxor",
- "Calak"
- ]
- },
- "cite_article_link": "ئەم پەڕەیە بکە بە ژێدەر",
- "tooltip-cite-article": "زانیاری سەبارەت بە چۆنیەتیی بە ژێدەر کردنی ئەم پەڕە",
- "cite": "بیکە بە ژێدەر",
- "cite_page": "پەڕە:",
- "cite_submit": "بیکە بە ژێدەر"
-}
diff --git a/extensions/Cite/i18n/special/co.json b/extensions/Cite/i18n/special/co.json
deleted file mode 100644
index e55e9b77..00000000
--- a/extensions/Cite/i18n/special/co.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "Cità issu articulu",
- "cite": "Cità",
- "cite_page": "Pagina:"
-}
diff --git a/extensions/Cite/i18n/special/cs.json b/extensions/Cite/i18n/special/cs.json
deleted file mode 100644
index 9bb10fe7..00000000
--- a/extensions/Cite/i18n/special/cs.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Beren",
- "Li-sung",
- "Martin Kozák",
- "Mormegil"
- ]
- },
- "cite_article_desc": "Přidává speciální stránku [[Special:Cite|Citace]] a odkaz v nabídce nástrojů",
- "cite_article_link": "Citovat stránku",
- "tooltip-cite-article": "Informace o tom, jak citovat tuto stránku",
- "cite": "Citace",
- "cite_page": "Článek:",
- "cite_submit": "Citovat",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografické detaily ke stránce {{FULLPAGENAME}} ==\n\n* Jméno stránky: {{FULLPAGENAME}}\n* Autor: Přispěvatelé {{grammar:2sg|{{SITENAME}}}}\n* Vydavatel: ''{{MediaWiki:Sitesubtitle}}''.\n* Datum poslední úpravy: {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Datum převzetí: <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Trvalý odkaz: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identifikace verze stránky: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Způsoby citace stránky {{FULLPAGENAME}} ==\n\n=== ISO 690-2 (1)===\nPřispěvatelé {{grammar:2sg|{{SITENAME}}}},'' {{FULLPAGENAME}}'' [online], {{int:sitesubtitle}}, c{{CURRENTYEAR}}, \nDatum poslední revize {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC, \n[citováno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\n&lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; \n\n=== ISO 690-2 (2)===\n''{{int:sitesubtitle}}: {{FULLPAGENAME}}'' [online]. c{{CURRENTYEAR}} [citováno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]. Dostupný z WWW: &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; \n\n=== APA ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}). ''{{int:sitesubtitle}}''. Získáno <citation>{{CURRENTTIME}}, {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation> z {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA ===\n„{{FULLPAGENAME}}.“ ''{{int:sitesubtitle}}''. {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA ===\nPřispěvatelé {{grammar:2sg|{{SITENAME}}}}, '{{FULLPAGENAME}}', ''{{int:sitesubtitle}},'' {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [získáno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\n\n=== Chicago ===\nPřispěvatelé {{grammar:2sg|{{SITENAME}}}}, „{{FULLPAGENAME}},“ ''{{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (získáno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>).\n\n=== CBE/CSE ===\nPřispěvatelé {{grammar:2sg|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{int:sitesubtitle}}; {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]. Dostupné na: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (naposledy navštíveno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; navštíveno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\"\n }\n\nPři použití [[LaTeX]]ového balíčku url (někde na začátku dokumentu je uvedeno <code>\\usepackage{url}</code>), který o něco lépe formátuje webové adresy, můžete upřednostnit následující verzi:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; navštíveno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/cu.json b/extensions/Cite/i18n/special/cu.json
deleted file mode 100644
index cb936b8e..00000000
--- a/extensions/Cite/i18n/special/cu.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "ОйЛ"
- ]
- },
- "cite_article_link": "привєдєниѥ члѣна словєсъ",
- "cite_page": "страница :"
-}
diff --git a/extensions/Cite/i18n/special/cy.json b/extensions/Cite/i18n/special/cy.json
deleted file mode 100644
index 8c7107e8..00000000
--- a/extensions/Cite/i18n/special/cy.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Lloffiwr"
- ]
- },
- "cite_article_desc": "Yn ychwanegu tudalen arbennig ar gyfer [[Special:Cite|cyfeirio at erthygl]] a chyswllt bocs offer",
- "cite_article_link": "Cyfeiriwch at yr erthygl hon",
- "tooltip-cite-article": "Gwybodaeth ar sut i gyfeirio at y dudalen hon",
- "cite": "Cyfeirio at erthygl",
- "cite_page": "Tudalen:",
- "cite_submit": "Cyfeirio",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Manylion am {{FULLPAGENAME}} at ddiben llyfryddiaeth ==\n\n* Enw'r dudalen: {{FULLPAGENAME}}\n* Awdur: {{SITENAME}} contributors\n* Cyhoeddwr: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Dyddiad y diwygiad diweddaraf: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Dyddiad adalw: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Yr URL parhaol: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID Diwygiad y Dudalen: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Arddulliau cyfeirio ar gyfer {{FULLPAGENAME}} ==\n\n=== [[APA Style|Arddull APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Adalwyd <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> o {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Arddull MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Arddull MHRA]] ===\nCyfranwyr i {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [adalwyd <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Arddull Chicago]] ===\nCyfranwyr i {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Arddull CBE/CSE]] ===\nCyfranwyr i {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cyfeiriwyd ato am <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Ar gael o:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Arddull Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (adalwyd ddiwethaf am <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Cofnod [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; cyrchwyd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWrth ddefnyddio url y pecyn [[LaTeX]] (<code>\\usepackage{url}</code> rhywle yn y rhaglith), sydd fel arfer yn dangos cyfeiriadau gwe ar fformat del iawn, gallwch ddefnyddio'r arddull canlynol:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Arlein; cyrchwyd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/da.json b/extensions/Cite/i18n/special/da.json
deleted file mode 100644
index 68b74d50..00000000
--- a/extensions/Cite/i18n/special/da.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Byrial",
- "Christian List",
- "Morten LJ",
- "Peter Alberti"
- ]
- },
- "cite_article_desc": "Tilføjer en [[Special:Cite|specialside til citering]] og en henvisning i værktøjsmenuen",
- "cite_article_link": "Citér denne artikel",
- "tooltip-cite-article": "Information om, hvordan man kan citere denne side",
- "cite": "Citér",
- "cite_page": "Side:",
- "cite_submit": "Citér",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n == Bibliografiske oplysninger for {{FULLPAGENAME}} ==\n\n * Sidenavn: {{FULLPAGENAME}}\n * Forfatter: {{SITENAME}} bidragydere\n * Udgiver: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n * Dato for seneste revision: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n * Datoen hentet: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n * Permanent URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n * Side versions-ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n == Typografier til citat af {{FULLPAGENAME}} ==\n\n === [[APA typografi]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Hentet <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> fra {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n === [[The MLA stil manual|MLA typografi]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt; {{canonicalurl: {{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n === [[MHRA stil Guide|MHRA typografi]] ===\n{{SITENAME}} bidragydere, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt; {{canonicalurl: {{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [hentet <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n === [[Chicago manualen om Style|Chicago typografi]] ===\n{{SITENAME}} bidragydere, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (hentet <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n === [[Rådet for videnskabsredaktører|CBE/CSE typografi]] ===\n{{SITENAME}} bidragydere. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citeret <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Tilgængelig fra:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n === [[Bluebook|Bluebook typografi]] ===\n{{FULLPAGENAME}}, {{canonicalurl: {{FULLPAGENAME}}|oldid={{REVISIONID}}}} (senest besøgt <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n === [[BibTeX]] indlæg ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; hentet <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nNår du bruger [[LaTeX]] pakkens URL-adressen (<code>\\usepackage{url}</code> et sted i præamblen) som har tendens til at give meget mere pænt formaterede webadresser, kan følgende være at foretrække:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; hentet <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/de.json b/extensions/Cite/i18n/special/de.json
deleted file mode 100644
index 2a05bc1b..00000000
--- a/extensions/Cite/i18n/special/de.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kghbln",
- "Purodha"
- ]
- },
- "cite_article_desc": "Erweitert das Wiki um eine [[Special:Cite|Spezialseite]] als Zitierhilfe sowie einen Link darauf im Bereich Werkzeuge",
- "cite_article_link": "Seite zitieren",
- "tooltip-cite-article": "Hinweis, wie diese Seite zitiert werden kann",
- "cite": "Zitierhilfe",
- "cite_page": "Seite:",
- "cite_submit": "zitieren",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografische Angaben für {{FULLPAGENAME}} ==\n\n* Seitentitel: {{FULLPAGENAME}}\n* Autor(en): {{SITENAME}}-Bearbeiter\n* Herausgeber: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Zeitpunkt der letzten Bearbeitung: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Datum des Abrufs: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Permanente URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Versionskennung: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Zitatstile für {{FULLPAGENAME}} ==\n\n=== [[APA-Stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> von {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA-Stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA-Stil]] ===\n{{SITENAME}}-Bearbeiter, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Chicago-Stil]] ===\n{{SITENAME}}-Bearbeiter, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE-Stil]] ===\n{{SITENAME}}-Bearbeiter. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [zitiert am <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}</citation>]. Verfügbar unter:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook-Stil]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-Eintrag ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\nBei Benutzung der [[LaTeX]]-Moduls „url“ (<code>\\usepackage{url}</code> im Bereich der Einleitung), welches eine schöner formatierte Internetadresse ausgibt, kann die folgende Ausgabe genommen werden:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/diq.json b/extensions/Cite/i18n/special/diq.json
deleted file mode 100644
index 6835aeb6..00000000
--- a/extensions/Cite/i18n/special/diq.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Erdemaslancan",
- "Mirzali",
- "Xoser"
- ]
- },
- "cite_article_desc": "Pela xısusiye u gıreyê qutiya hacetan [[Special:Cite|citation]] ilawe keno.",
- "cite_article_link": "Na pele bia xo viri",
- "tooltip-cite-article": "Melumato ke ena pele çıtewri iqtıbas keno",
- "cite": "Bia xo viri",
- "cite_page": "Pele:",
- "cite_submit": "Bia xo viri",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliyografiya teferruatanê {{FULLPAGENAME}} ==\n\n* Nameyê pele: {{FULLPAGENAME}}\n* Nuskar: İştıraqkerê {{SITENAME}}\n* Vılaker: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Revizyonê demi: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Serkerdışê demi: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Ancıyayışê URLê cı: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Verziyonê kamiya pela: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Terzê istasyonê {{FULLPAGENAME}} ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. ancıyayo <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Terzê MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Terzê MHRA]] ===\niştırazkarê {{SITENAME}} , '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [zerre <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Terzê Şikagoy]] ===\niştırazkarê {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Terzê CBE/CSE]] ===\n{{SITENAME}} İştıraxkari. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [sitedo <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Ancıyayışê cı:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Terzê Bluebooki]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (tewr peyên<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Cı kewê [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n Nuskar = \"{{SITENAME}}\",\n Sername = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n Serre = \"{{CURRENTYEAR}}\",\n Url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n Not = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n @misc{ wiki:xxx,\n Nuskar = \"{{SITENAME}}\",\n Sername = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n Serre = \"{{CURRENTYEAR}}\",\n Url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n Not = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/dsb.json b/extensions/Cite/i18n/special/dsb.json
deleted file mode 100644
index 929c1021..00000000
--- a/extensions/Cite/i18n/special/dsb.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Michawiki"
- ]
- },
- "cite_article_desc": "Pśidawa specialny bok [[Special:Cite|Citěrowańska pomoc]] a link w kašćiku źěłowe rědy",
- "cite_article_link": "Toś ten bok citěrowaś",
- "tooltip-cite-article": "Informacije wó tom, kak toś ten bok dajo se citěrowaś",
- "cite": "Citěrowańska pomoc",
- "cite_page": "Bok:",
- "cite_submit": "pokazaś"
-}
diff --git a/extensions/Cite/i18n/special/ee.json b/extensions/Cite/i18n/special/ee.json
deleted file mode 100644
index 45cbacc7..00000000
--- a/extensions/Cite/i18n/special/ee.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "@metadata": [],
- "cite_page": "Nuŋɔŋlɔ:"
-}
diff --git a/extensions/Cite/i18n/special/el.json b/extensions/Cite/i18n/special/el.json
deleted file mode 100644
index 63758d85..00000000
--- a/extensions/Cite/i18n/special/el.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Consta",
- "Glavkos",
- "Omnipaedista",
- "Protnet",
- "Geraki"
- ]
- },
- "cite_article_desc": "Προσθέτει μία ειδική σελίδα [[Special:Cite|παραθέσεων]] και έναν σύνδεσμο προς την εργαλειοθήκη",
- "cite_article_link": "Παραθέστε αυτή τη σελίδα",
- "tooltip-cite-article": "Πληροφορίες για το πως να παραπέμψετε σε αυτήν την σελίδα",
- "cite": "Παραπομπή",
- "cite_page": "Σελίδα:",
- "cite_submit": "Προσθήκη παραπομπής"
-}
diff --git a/extensions/Cite/i18n/special/en.json b/extensions/Cite/i18n/special/en.json
deleted file mode 100644
index dfc65208..00000000
--- a/extensions/Cite/i18n/special/en.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": []
- },
- "cite_article_desc": "Adds a [[Special:Cite|citation]] special page and toolbox link",
- "cite_article_link": "Cite this page",
- "tooltip-cite-article": "Information on how to cite this page",
- "accesskey-cite-article": "",
- "cite": "Cite",
- "cite-summary": "",
- "cite_page": "Page:",
- "cite_submit": "Cite",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliographic details for {{FULLPAGENAME}} ==\n\n* Page name: {{FULLPAGENAME}}\n* Author: {{SITENAME}} contributors\n* Publisher: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Date of last revision: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date retrieved: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanent URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Page Version ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Citation styles for {{FULLPAGENAME}} ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-} \ No newline at end of file
diff --git a/extensions/Cite/i18n/special/eo.json b/extensions/Cite/i18n/special/eo.json
deleted file mode 100644
index 09faa1da..00000000
--- a/extensions/Cite/i18n/special/eo.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Michawiki",
- "Tlustulimu",
- "Yekrats"
- ]
- },
- "cite_article_desc": "Aldonas specialan paĝon por [[Special:Cite|citado]] kaj ligilo al ilaro",
- "cite_article_link": "Citi ĉi tiun paĝon",
- "tooltip-cite-article": "Informoj pri tio, kiel oni citu ĉi tiun paĝon",
- "cite": "Citado",
- "cite_page": "Paĝo:",
- "cite_submit": "Citi",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografiaj detaloj por {{FULLPAGENAME}} ==\n\n* Nomo de paĝo: {{FULLPAGENAME}}\n* Aŭtoro: {{SITENAME}} contributors\n* Eldonejo: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Dato de lasta revizio: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Dato ricevita: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Daŭra URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Versio-identigo de paĝo: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Citaj stiloj por {{FULLPAGENAME}} ==\n\n=== [[APA-stilo]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA-stilo]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA-stilo]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Ĉikago-stilo]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE-stilo]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Blulibro-stilo]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] datumaro ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKiam uzante [[LaTeX]]-on, url (<code>\\usepackage{url}</code> ie en la kapteksto) kiu emas formati pli belaj retadresoj, la jeno eble estos preferata:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/es.json b/extensions/Cite/i18n/special/es.json
deleted file mode 100644
index 78687cfe..00000000
--- a/extensions/Cite/i18n/special/es.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Armando-Martin",
- "Crazymadlover",
- "Icvav",
- "Jatrobat",
- "Muro de Aguas",
- "Sanbec"
- ]
- },
- "cite_article_desc": "Añade una página especial para [[Special:Cite|citar la página]] y un enlace en la caja de herramientas.",
- "cite_article_link": "Citar este artículo",
- "tooltip-cite-article": "Información de como citar esta página",
- "cite": "Citar",
- "cite_page": "Página:",
- "cite_submit": "Citar",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Datos bibliográficos sobre {{FULLPAGENAME}} ==\n\n* Nombre de la página: {{FULLPAGENAME}}\n* Autor: {{SITENAME}} contributors\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Fecha de la última revisión: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Fecha obtenida: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Dirección URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identificador de versión de la página: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Estilo de citas para {{FULLPAGENAME}} ==\n\n=== [[APA style|Estilo APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Consultado el <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> en {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Estilo MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Estilo MHRA]] ===\nColaboradores de {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consultado el <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Estilo Chicago]] ===\nColaboradores de {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consultado el <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estilo CBE/CSE]] ===\nColaboradores de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citado el <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible en:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estilo Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (última visita: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrada [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n título = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n año = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n nota = \"[En línea; consultado el <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nCuando se utiliza la dirección URL de empaquetamiento [[LaTeX]] (<code>\\usepackage{url}</code> en algún lugar del preámbulo) que tiende a dar direcciones web con un formato más agradable, se prefiere lo siguiente:\n\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n título = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n año = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n nota = \"[En línea; consultado el <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--cerrando div para \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/et.json b/extensions/Cite/i18n/special/et.json
deleted file mode 100644
index c3400d71..00000000
--- a/extensions/Cite/i18n/special/et.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Pikne",
- "WikedKentaur"
- ]
- },
- "cite_article_desc": "Lisab [[Special:Cite|tsiteerimise]] erilehekülje ja lingi külgmenüü tööriistakasti.",
- "cite_article_link": "Tsiteeri seda artiklit",
- "tooltip-cite-article": "Teave tsiteerimisviiside kohta",
- "cite": "Tsiteerimine",
- "cite_page": "Leht:",
- "cite_submit": "Tsiteeri",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Lehekülje \"{{FULLPAGENAME}}\" bibliograafilised andmed ==\n\n* Lehekülje pealkiri: {{FULLPAGENAME}}\n* Autor: {{GRAMMAR:genitive|{{SITENAME}}}} kaastöölised\n* Väljaandja: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Viimane redaktsioon: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Vaadatud: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Püsilink: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Lehekülje versiooninumber: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Viitamisstiilid lehekülje \"{{FULLPAGENAME}}\" jaoks ==\n\n=== APA stiil ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Vaadatud: <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>, aadressil {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA stiil ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA stiil ===\n{{GRAMMAR:genitive|{{SITENAME}}}} kaastöölised, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [vaadatud: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== Chicago stiil ===\n{{GRAMMAR:genitive|{{SITENAME}}}} kaastöölised, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (vaadatud: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== CBE/CSE stiil ===\n{{GRAMMAR:genitive|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [vaadatud: <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Kättesaadav aadressil:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebooki stiil ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (viimati vaadatud: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== BibTeX-i sissekanne ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Võrgus; vaadatud: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\nKui kasutada LaTeX-i url-i (<code>\\usepackage{url}</code> kuskil lehekülje alguses), mis vormindab sageli võrguaadressi ilusamini, võib eelistatavamaks osutuda järgmine kood:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Võrgus; vaadatud: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/eu.json b/extensions/Cite/i18n/special/eu.json
deleted file mode 100644
index 0499503a..00000000
--- a/extensions/Cite/i18n/special/eu.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "An13sa",
- "Theklan",
- "Xabier Armendaritz"
- ]
- },
- "cite_article_desc": "[[Special:Cite|Aipatu]] orrialde berezia gehitzen du tresna-kutxaren loturetan",
- "cite_article_link": "Aipatu orri hau",
- "tooltip-cite-article": "Orri honen aipua egiteko moduari buruzko informazioa",
- "cite": "Aipamenak",
- "cite_page": "Orrialdea:",
- "cite_submit": "Aipatu"
-}
diff --git a/extensions/Cite/i18n/special/ext.json b/extensions/Cite/i18n/special/ext.json
deleted file mode 100644
index 6f1835d6..00000000
--- a/extensions/Cite/i18n/special/ext.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Better"
- ]
- },
- "cite_article_link": "Almiental esti artículu",
- "cite": "Almiental",
- "cite_page": "Páhina:",
- "cite_submit": "Almiental"
-}
diff --git a/extensions/Cite/i18n/special/fa.json b/extensions/Cite/i18n/special/fa.json
deleted file mode 100644
index 3c69b885..00000000
--- a/extensions/Cite/i18n/special/fa.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Huji",
- "Reza1615",
- "Wayiran",
- "ZxxZxxZ"
- ]
- },
- "cite_article_desc": "صفحهٔ ویژه‌ای برای [[Special:Cite|یادکرد]] اضافه می‌کند و پیوندی به جعبه ابزار می‌افزاید",
- "cite_article_link": "یادکرد پیوند این مقاله",
- "tooltip-cite-article": "اطلاعات در خصوص چگونگی یادکرد این صفحه",
- "cite": "یادکرد این مقاله",
- "cite_page": "صفحه:",
- "cite_submit": "یادکرد",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== اطلاعات کتاب‌شناسی برای {{FULLPAGENAME}} ==\n\n* نام صفحه: {{FULLPAGENAME}}\n* نویسنده: مشارکت‌کنندگان {{SITENAME}}\n* ناشر: ''{{SITENAME}}، {{int:sitesubtitle}}''.\n* تاریخ آخرین نسخه: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* تاریخ بازبینی: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* نشانی پایدار: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* شناسهٔ نسخهٔ صفحه: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== شیوه‌های یادکرد برای {{FULLPAGENAME}} ==\n\n=== [[شیوه APA|شیوهٔ APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}، {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}، {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}، {{CURRENTMONTHNAME}} {{CURRENTDAY}}، {{CURRENTYEAR}}</citation> از {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[شیوه ام‌ال‌آ|شیوهٔ MLA]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}، {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}، {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}، {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt؛.\n\n=== [[شیوه MHRA|شیوهٔ MHRA]] ===\nمشارکت‌کنندگان {{SITENAME}}، «{{FULLPAGENAME}}»، ''{{SITENAME}}، {{int:sitesubtitle}}،'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}، {{CURRENTTIME}} UTC، &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[شیوه‌نامه شیکاگو|شیوهٔ شیکاگو]] ===\nمشارکت‌کنندگان {{SITENAME}}، «{{FULLPAGENAME}}»، ''{{SITENAME}}، {{int:sitesubtitle}}،'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (بازیابی‌شده در <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|شیوهٔ CBE/CSE]] ===\nمشارکت‌کنندگان {{SITENAME}}. {{FULLPAGENAME}} [اینترنت]. {{SITENAME}}، {{int:sitesubtitle}}؛ {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}، {{CURRENTTIME}} UTC [یادکردشده در <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. قابل دسترسی از:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[w:en:Bluebook|شیوهٔ Bluebook]] ===\n{{FULLPAGENAME}}، {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (آخرین بازدید در <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[برخط؛ بازبینی‌شده در <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nدر زمان استفاده از بستهٔ [[LaTeX]] نشانی (<code>\\usepackage{url}</code> جایی در پیوند پایدار) که برای ارائه فرمت‌های وبی طراحی شده‌است، شاید به صورت زیر مطلوب باشد:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[برخط؛ بازبینی‌شده در <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/fi.json b/extensions/Cite/i18n/special/fi.json
deleted file mode 100644
index bc32e71f..00000000
--- a/extensions/Cite/i18n/special/fi.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Linnea",
- "Nike",
- "ZeiP",
- "Pxos"
- ]
- },
- "cite_article_desc": "Lisää työkaluihin toimintosivun, joka neuvoo [[Special:Cite|viittaamaan]] oikeaoppisesti.",
- "cite_article_link": "Viitetiedot",
- "tooltip-cite-article": "Tietoa tämän sivun lainaamisesta",
- "cite": "Viitetiedot",
- "cite_page": "Sivu:",
- "cite_submit": "Viittaa",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografiset tiedot artikkelille {{FULLPAGENAME}} ==\n\n* Sivun nimi: {{FULLPAGENAME}}\n* Tekijä: {{SITENAME}}-projektin osanottajat\n* Julkaisija: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Viimeisimmän version päivämäärä: {{CURRENTDAY2}}. {{CURRENTMONTHNAME}}&#116;&#97; {{CURRENTYEAR}}, kello {{CURRENTTIME}} (UTC)\n* Sivu haettu: <citation>{{CURRENTDAY2}}. {{CURRENTMONTHNAME}}&#116;&#97; {{CURRENTYEAR}}, kello {{CURRENTTIME}} (UTC)</citation>\n* Pysyvä osoite: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Sivun version tunniste: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Viittaustyylit artikkelille {{FULLPAGENAME}} ==\n\n=== APA-tyyli ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}}n {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Haettu <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}}n {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> osoitteesta {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA-tyyli ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA-tyyli ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}}ta {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [haettu <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}}ta {{CURRENTYEAR}}</citation>]\n\n=== Chicago-tyyli ===\n{{SITENAME}}-projektin osanottajat, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (haettu <citation>{{CURRENTMONTHNAME}}n {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== CBE/CSE-tyyli ===\n{{SITENAME}}-projektin osanottajat. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Saatavilla osoitteesta: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook-tyyli ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (vierailtu viimeksi <citation>{{CURRENTMONTHNAME}}n {{CURRENTDAY}}., {{CURRENTYEAR}}</citation>).\n\n=== BibTeX-muoto ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; haettu <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKäytettäessä [[LaTeX]]-pakettia url, (<code>\\usepackage{url}</code> jossain alussa) joka tapaa antaa paremmin muotoiltuja osoitteita, seuraavaa muotoa voidaan käyttää:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; haettu <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/fj.json b/extensions/Cite/i18n/special/fj.json
deleted file mode 100644
index ff0ccb70..00000000
--- a/extensions/Cite/i18n/special/fj.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "Vola dau vaqarai"
-}
diff --git a/extensions/Cite/i18n/special/fo.json b/extensions/Cite/i18n/special/fo.json
deleted file mode 100644
index f1a0719a..00000000
--- a/extensions/Cite/i18n/special/fo.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Diupwijk",
- "Spacebirdy"
- ]
- },
- "cite_article_link": "Sitera hesa síðuna",
- "cite": "Sitera",
- "cite_page": "Síða:",
- "cite_submit": "Sitera"
-}
diff --git a/extensions/Cite/i18n/special/fr.json b/extensions/Cite/i18n/special/fr.json
deleted file mode 100644
index de7be4dc..00000000
--- a/extensions/Cite/i18n/special/fr.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "DavidL",
- "Grondin",
- "Hégésippe Cormier",
- "PieRRoMaN",
- "Urhixidur"
- ]
- },
- "cite_article_desc": "Ajoute une page spéciale [[Special:Cite|citation]] et un lien dans la boîte à outils",
- "cite_article_link": "Citer cette page",
- "tooltip-cite-article": "Informations sur comment citer cette page",
- "cite": "Citation",
- "cite_page": "Page :",
- "cite_submit": "Citer",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Détails bibliographiques pour {{FULLPAGENAME}} ==\n\n* Nom de la page : {{FULLPAGENAME}}\n* Auteur : contributeurs de {{SITENAME}}\n* Éditeur : ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Dernière modification : {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} TUC\n* Récupéré : <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} TUC</citation>\n* URL permanente : {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identifiant de cette version : {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Styles de citations pour {{FULLPAGENAME}} ==\n\n=== [[Style APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> depuis {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Style MLA]] ===\n«&nbsp;{{FULLPAGENAME}}&nbsp;» ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Style MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accédé le <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Style Chicago]] ===\nContributeurs de {{SITENAME}}, «&nbsp;{{FULLPAGENAME}}&nbsp;», ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accédé le <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Style CBE/CSE]] ===\nContributeurs de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}&nbsp;; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} TUC [cité le <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible sur&nbsp;: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Style Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accédé le <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrée [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[En ligne ; accédé le <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nSi vous utilisez le package URL dans [[LaTeX]] (<code>\\usepackage{url}</code> quelque part dans le préambule), qui donne des adresses web mieux formatées, utilisez le format suivant :\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[En ligne ; accédé le <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/frp.json b/extensions/Cite/i18n/special/frp.json
deleted file mode 100644
index bad86d4a..00000000
--- a/extensions/Cite/i18n/special/frp.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "ChrisPtDe"
- ]
- },
- "cite_article_desc": "Apond una pâge spèciâla [[Special:Cite|citacion]] et un lim dens la bouèta d’outils.",
- "cite_article_link": "Citar ceta pâge",
- "tooltip-cite-article": "Enformacions sur coment citar ceta pâge",
- "cite": "Citacion",
- "cite_page": "Pâge :",
- "cite_submit": "Citar"
-}
diff --git a/extensions/Cite/i18n/special/frr.json b/extensions/Cite/i18n/special/frr.json
deleted file mode 100644
index 913ee519..00000000
--- a/extensions/Cite/i18n/special/frr.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Murma174"
- ]
- },
- "cite_article_desc": "Diar komt en nei [[Special:Cite|spezial-sidj]] tu, am sitiarin ianfacher tu maagin, an uk en ferwisang bi a werktjüügen",
- "cite_article_link": "Detdiar sidj sitiare",
- "tooltip-cite-article": "Hü detdiar sidj sitiaret wurd koon",
- "cite": "Sitiare",
- "cite_page": "Sidj:",
- "cite_submit": "Sitiare",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliograafisk dooten för {{FULLPAGENAME}} ==\n\n* Sidj: {{FULLPAGENAME}}\n* Skriiwer: {{SITENAME}} contributors\n* Ütjden faan: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Leetst feranrang: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Ufrepen: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanent URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Sidjenwerjuun ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Sitiarmuudin för {{FULLPAGENAME}} ==\n\n=== [[APA muude]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Ufrepen <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> faan {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA muude]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA muude]] ===\n{{SITENAME}} bewerkern, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Chicago muude]] ===\n{{SITENAME}} bewerkern, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ufrepen <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE muude]] ===\n{{SITENAME}} bewerkern. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [sitiaret <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Tu fun faan:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook muude]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ufrepen <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] iindrach ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; ufrepen <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWan det [[LaTeX]]-moduul (<code>\\usepackage{url}</code> uun't iinfeerang) mä en smoker wääb-adres brükt woort, as det ferlicht neter so:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; ufrepen <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/fur.json b/extensions/Cite/i18n/special/fur.json
deleted file mode 100644
index a4962ef0..00000000
--- a/extensions/Cite/i18n/special/fur.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Klenje",
- "MF-Warburg"
- ]
- },
- "cite_article_link": "Cite cheste vôs",
- "cite": "Citazion",
- "cite_page": "Pagjine:",
- "cite_submit": "Cree la citazion"
-}
diff --git a/extensions/Cite/i18n/special/fy.json b/extensions/Cite/i18n/special/fy.json
deleted file mode 100644
index 3104aa06..00000000
--- a/extensions/Cite/i18n/special/fy.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "SK-luuut",
- "Snakesteuben"
- ]
- },
- "cite_article_desc": "Foeget in [[Special:Cite|spesjale side]] om te sitearjen, lykas in ferwizing nei de helpmiddels, ta.",
- "cite_article_link": "Sitearje dizze side",
- "cite": "Sitearje",
- "cite_page": "Side:",
- "cite_submit": "Sitearje"
-}
diff --git a/extensions/Cite/i18n/special/ga.json b/extensions/Cite/i18n/special/ga.json
deleted file mode 100644
index 70b1b12b..00000000
--- a/extensions/Cite/i18n/special/ga.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Alison"
- ]
- },
- "cite_article_desc": "Cuir [[Special:Cite|deismireacht]] leathanach speisíalta agus nasc bosca uirlisí",
- "cite_article_link": "Luaigh an lch seo",
- "cite": "Luaigh",
- "cite_page": "Leathanach:",
- "cite_submit": "Luaigh"
-}
diff --git a/extensions/Cite/i18n/special/gd.json b/extensions/Cite/i18n/special/gd.json
deleted file mode 100644
index cf4fb53e..00000000
--- a/extensions/Cite/i18n/special/gd.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Akerbeltz"
- ]
- },
- "cite_article_link": "Thoir iomradh air an duilleag seo"
-}
diff --git a/extensions/Cite/i18n/special/gl.json b/extensions/Cite/i18n/special/gl.json
deleted file mode 100644
index fb8cfbef..00000000
--- a/extensions/Cite/i18n/special/gl.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Toliño",
- "Xosé"
- ]
- },
- "cite_article_desc": "Engade unha páxina especial de [[Special:Cite|citas]] e unha ligazón na caixa de ferramentas",
- "cite_article_link": "Citar esta páxina",
- "tooltip-cite-article": "Información sobre como citar esta páxina",
- "cite": "Citar",
- "cite_page": "Páxina:",
- "cite_submit": "Citar",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Detalles bibliográficos de \"{{FULLPAGENAME}}\" ==\n\n* Nome da páxina: {{FULLPAGENAME}}\n* Autor: Colaboradores de {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data da última revisión: {{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}} ás {{CURRENTTIME}} UTC\n* Data da consulta: <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}} ás {{CURRENTTIME}} UTC</citation>\n* Enderezo URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID da versión da páxina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Modelos de referencia bibliográfica de \"{{FULLPAGENAME}}\" ==\n\n=== [[APA style|Estilo APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Consultado o <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}} ás {{CURRENTTIME}}</citation> en {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Estilo MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} de {{CURRENTMONTHABBREV}} de {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} de {{CURRENTMONTHABBREV}} de {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Estilo MHRA]] ===\nColaboradores de {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consultado o <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Estilo Chicago]] ===\nColaboradores de {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consultado o <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estilo CBE/CSE]] ===\nColaboradores de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}} de {{CURRENTMONTHABBREV}} de {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [citado o <citation>{{CURRENTDAY}} de {{CURRENTMONTHABBREV}} de {{CURRENTYEAR}}</citation>]. Dispoñible en:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estilo Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (última visita o <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}</citation>).\n\n=== Entrada [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[En liña; consultado o <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nAo empregar o paquete \"url\" do [[LaTeX]] (<code>\\usepackage{url}</code> nalgunha parte do preámbulo), que tende a mostrar os enderezos web nun formato moito máis agradable, poida que prefira o seguinte:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[En liña; consultado o <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--etiqueta \"div\" de peche para os \"plainlinks\" abertos-->"
-}
diff --git a/extensions/Cite/i18n/special/grc.json b/extensions/Cite/i18n/special/grc.json
deleted file mode 100644
index a53afdca..00000000
--- a/extensions/Cite/i18n/special/grc.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "AndreasJS",
- "LeighvsOptimvsMaximvs",
- "Omnipaedista"
- ]
- },
- "cite_article_desc": "Προσθέτει εἰδικὴν δἐλτον [[Special:Cite|ἀναφορῶν]] τινὰ καὶ σύνδεσμον τινὰ ἐν τῷ ἐργαλειοκάδῳ",
- "cite_article_link": "Άναφέρειν τήνδε τὴν δέλτον",
- "cite": "Μνημονεύειν",
- "cite_page": "Δέλτος:",
- "cite_submit": "Μνημονεύειν"
-}
diff --git a/extensions/Cite/i18n/special/gsw.json b/extensions/Cite/i18n/special/gsw.json
deleted file mode 100644
index 70bf5e95..00000000
--- a/extensions/Cite/i18n/special/gsw.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Als-Chlämens",
- "Als-Holder",
- "Strommops"
- ]
- },
- "cite_article_desc": "Ergänzt d [[Special:Cite|Zitierhilf]]-Spezialsyte un e Link im Chaschte Wärchzyyg",
- "cite_article_link": "Die Site zitiere",
- "tooltip-cite-article": "Informatione driber, wie mer die Syte cha zitiere",
- "cite": "Zitierhilf",
- "cite_page": "Syte:",
- "cite_submit": "aazeige",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografischi Aagabe für {{FULLPAGENAME}} ==\n\n* Sytetitel: {{FULLPAGENAME}}\n* Autor(e): {{SITENAME}}-Bearbeiter\n* Herussgeber: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Zitpunkt vo de letschte Bearbeitig: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Abruefdatum: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Permanenti URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Versionsschlüssel: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Zitatstil für {{FULLPAGENAME}} ==\n\n=== [[APA-Stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> vo {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA-Stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA-Stil]] ===\n{{SITENAME}}-Bearbeiter, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Chicago-Stil]] ===\n{{SITENAME}}-Bearbeiter, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE-Stil]] ===\n{{SITENAME}}-Bearbeiter. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [zitiert am <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}</citation>]. Verfiegbar unter:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook-Stil]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-Yytrag ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\nWänn de s [[LaTeX]]-Modul „url“ (<code>\\usepackage{url}</code> im Bereich vo de Yyleitig) bruuchsch, wo e schöner formatierti Internetadress ussegit, cha die Ussgab, wo folgt, gno werde:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/gu.json b/extensions/Cite/i18n/special/gu.json
deleted file mode 100644
index d0bc7b5e..00000000
--- a/extensions/Cite/i18n/special/gu.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dsvyas",
- "KartikMistry",
- "Sushant savla"
- ]
- },
- "cite_article_desc": "[[Special:Cite|સંદર્ભ]] ખાસ પાનું અને સાધન પેટીની કડી ઉમેરે છે",
- "cite_article_link": "આ પાનું ટાંકો",
- "tooltip-cite-article": "આ પાનાંને સમર્થન કઈ રીતે આપવું તેની માહિતી",
- "cite": "ટાંકો",
- "cite_page": "પાનું:",
- "cite_submit": "ટાંકો"
-}
diff --git a/extensions/Cite/i18n/special/gv.json b/extensions/Cite/i18n/special/gv.json
deleted file mode 100644
index 8828e412..00000000
--- a/extensions/Cite/i18n/special/gv.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "MacTire02"
- ]
- },
- "cite_article_desc": "Cur duillag [[Special:Cite|symney]] er lheh as kiangley kishtey greie",
- "cite_article_link": "Symney yn duillag shoh",
- "cite": "Symney",
- "cite_page": "Duillag:",
- "cite_submit": "Symney"
-}
diff --git a/extensions/Cite/i18n/special/ha.json b/extensions/Cite/i18n/special/ha.json
deleted file mode 100644
index 11f73ece..00000000
--- a/extensions/Cite/i18n/special/ha.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "@metadata": [],
- "cite_page": "Shafi:"
-}
diff --git a/extensions/Cite/i18n/special/haw.json b/extensions/Cite/i18n/special/haw.json
deleted file mode 100644
index 5400a10f..00000000
--- a/extensions/Cite/i18n/special/haw.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kolonahe",
- "Singularity"
- ]
- },
- "cite_article_link": "E ho'ōia i kēia ʻaoʻao",
- "cite_page": "‘Ao‘ao:"
-}
diff --git a/extensions/Cite/i18n/special/he.json b/extensions/Cite/i18n/special/he.json
deleted file mode 100644
index 540009ad..00000000
--- a/extensions/Cite/i18n/special/he.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Amire80",
- "Rotem Liss"
- ]
- },
- "cite_article_desc": "הוספת דף מיוחד וקישור בתיבת הכלים ל[[Special:Cite|ציטוט]]",
- "cite_article_link": "ציטוט דף זה",
- "tooltip-cite-article": "מידע כיצד לצטט דף זה",
- "cite": "ציטוט",
- "cite_page": "דף:",
- "cite_submit": "ציטוט",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== מידע ביבליוגרפי על {{FULLPAGENAME}} ==\n\n* שם הדף: {{FULLPAGENAME}}\n* מחבר: תורמי {{SITENAME}}\n* מוציא לאור: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* תאריך השינוי האחרון: {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* תאריך האחזור: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* קישור קבוע: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* קוד זיהוי גרסה: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== סגנונות ציטוט עבור {{FULLPAGENAME}} ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. אוחזר <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> מתוך {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\nתורמי {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [אוחזר <citation>{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\nתורמי {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (אוחזר <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\nתורמי {{SITENAME}}. {{FULLPAGENAME}} [אינטרנט]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [צוטט <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. זמין בכתובת:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ביקור אחרון <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== ערך [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[מקוון; אוחזר <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nכאשר משתמשים ב־URL מחבילת [[LaTeX]] (באמצעות כתיבת \\usepackage{url} במקום כלשהו במבוא), המניבה כתובות אינטרנט המעוצבות טוב יותר, יש להעדיף את דרך הכתיבה הבאה:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[מקוון; אוחזר <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/hi.json b/extensions/Cite/i18n/special/hi.json
deleted file mode 100644
index a37cf29b..00000000
--- a/extensions/Cite/i18n/special/hi.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ansumang",
- "Kaustubh",
- "Siddhartha Ghai"
- ]
- },
- "cite_article_desc": "[[Special:Cite|सन्दर्भ]] देने वाला एक विशेष पृष्ठ और टूलबॉक्स कड़ी जोड़ता है",
- "cite_article_link": "इस पन्ने को उद्धृत करें",
- "tooltip-cite-article": "इस पृष्ठ को उद्धृत करने के लिये जानकारी",
- "cite": "उद्धृत करें",
- "cite_page": "पृष्ठ:",
- "cite_submit": "उद्धृत करें",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}} के लिए उद्धरण जानकारी ==\n\n* पृष्ठ नाम: {{FULLPAGENAME}}\n* लेखक: {{SITENAME}} योगदानकर्ता\n* प्रकाशक: ''{{SITENAME}}, {{int:sitesubtitle}}''।\n* अंतिम संशोधन तिथि: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} यू॰टी॰सी\n* अभिगमन तिथि: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* स्थायी यू॰आर॰एल: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* पृष्ठ अवतरण आई॰डी: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}} के लिए उद्धरण प्रकार ==\n\n=== APA प्रकार ===\n{{FULLPAGENAME}}। ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}})। ''{{SITENAME}}, {{int:sitesubtitle}}''। {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} से अभिगमन <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> को।\n\n=== MLA प्रकार ===\n\"{{FULLPAGENAME}}।\" ''{{SITENAME}}, {{int:sitesubtitle}}''। {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} यू॰टी॰सी। <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;।\n\n=== MHRA प्रकार ===\n{{SITENAME}} योगदानकर्ता, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} यू॰टी॰सी, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [अभिगमन <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation> को]\n\n=== शिकागो प्रकार ===\n{{SITENAME}} योगदानकर्ता, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (अभिगमन <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> को)।\n\n=== CBE/CSE प्रकार ===\n{{SITENAME}} योगदानकर्ता। {{FULLPAGENAME}} [इन्टरनेट]। {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} यू॰टी॰सी [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation> उद्धृत]। {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} से उपलब्ध।\n\n=== ब्लूबुक प्रकार ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (अभिगमन तिथि: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== बिबटेक्स प्रकार ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[ऑनलाइन; अभिगमन तिथि: <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nयदि LaTeX पैकेज यू॰आर॰एल का प्रयोग किया जा रहा हो(<code>\\usepackage{url}</code> प्रियेम्बल में कहीं प्रयुक्त हो) तो बेहतर स्वरूपण वाले यू॰आर॰एल के लिए निम्न का प्रयोग किया जा सकता है:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[ऑनलाइन; अभिगमन तिथि: <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/hif-latn.json b/extensions/Cite/i18n/special/hif-latn.json
deleted file mode 100644
index c2d0e6b5..00000000
--- a/extensions/Cite/i18n/special/hif-latn.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Karthi.dr"
- ]
- },
- "cite_page": "Panna:"
-}
diff --git a/extensions/Cite/i18n/special/hil.json b/extensions/Cite/i18n/special/hil.json
deleted file mode 100644
index 10e9080b..00000000
--- a/extensions/Cite/i18n/special/hil.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Jose77"
- ]
- },
- "cite_article_link": "Tumuron ining artikulo"
-}
diff --git a/extensions/Cite/i18n/special/hr.json b/extensions/Cite/i18n/special/hr.json
deleted file mode 100644
index cb85d28c..00000000
--- a/extensions/Cite/i18n/special/hr.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dalibor Bosits",
- "Excaliboor",
- "SpeedyGonsales"
- ]
- },
- "cite_article_desc": "Dodaje posebnu stranicu za [[Special:Cite|citiranje]] i link u okvir za alate",
- "cite_article_link": "Citiraj ovaj članak",
- "tooltip-cite-article": "Informacije o tome kako citirati ovu stranicu",
- "cite": "Citiranje",
- "cite_page": "Stranica:",
- "cite_submit": "Citiraj"
-}
diff --git a/extensions/Cite/i18n/special/hsb.json b/extensions/Cite/i18n/special/hsb.json
deleted file mode 100644
index 3f7d1288..00000000
--- a/extensions/Cite/i18n/special/hsb.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Michawiki"
- ]
- },
- "cite_article_desc": "Přidawa specialnu stronu [[Special:Cite|Citowanska pomoc]] a wotkaz w gratowym kašćiku",
- "cite_article_link": "Nastawk citować",
- "tooltip-cite-article": "Informacije wo tym, kak tuta strona hodźi so citować",
- "cite": "Citowanska pomoc",
- "cite_page": "Strona:",
- "cite_submit": "pokazać",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografiske podrobnosće za {{FULLPAGENAME}} ==\n\n* Mjeno strony: {{FULLPAGENAME}}\n* Awtor: sobuskutkowarjo projekta {{SITENAME}}\n* Wudawaćel: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Datum poslednjeje wersije: {{CURRENTDAY}}. {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Datum wotwołanja: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Trajny URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID wersije strony: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Citowanske stile za {{FULLPAGENAME}} ==\n\n=== [[APA stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Wotwołany dnja <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> z {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stil]] ===\nSobuskutkowarjo projekta {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [wotwołany dnja <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-stil]] ===\nSobuskutkowarjo projekta {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (wotwołany dnja <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stil]] ===\nSobuskutkowarjo projekta {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citowany dnja <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. K dispoziciji wot:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-stil]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (posledni raz wopytany <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-zapisk ===\n\n @misc{ wiki:xxx,\n awtor = \"{{SITENAME}}\",\n titul = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n lěto = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; wotwołany dnja <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nHdyž so paket [[LaTeX]] url (<code>\\usepackage{url}</code> něhdźe w preambli) wužiwa, kotryž zwjetša rjeńšo formatowane webadresy zmóžnja, móhli so slědowaće podaća wužiwać:\n\n @misc{ wiki:xxx,\n awtor = \"{{SITENAME}}\",\n titul = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n lěto = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; wotwołany dnja <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ht.json b/extensions/Cite/i18n/special/ht.json
deleted file mode 100644
index 9e44e8ee..00000000
--- a/extensions/Cite/i18n/special/ht.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Masterches"
- ]
- },
- "cite_article_desc": "Ajoute yon paj espesyal [[Special:Cite|sitasyon]] epitou yon lyen nan bwat zouti yo",
- "cite_article_link": "Site paj sa",
- "cite": "Sitasyon",
- "cite_page": "Paj:",
- "cite_submit": "Site"
-}
diff --git a/extensions/Cite/i18n/special/hu.json b/extensions/Cite/i18n/special/hu.json
deleted file mode 100644
index 6fc18184..00000000
--- a/extensions/Cite/i18n/special/hu.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dani",
- "Glanthor Reviol",
- "Tgr"
- ]
- },
- "cite_article_desc": "[[Special:Cite|Hivatkozás-készítő]] speciális lap és link az eszközdobozba",
- "cite_article_link": "Hogyan hivatkozz erre a lapra",
- "tooltip-cite-article": "Információk a lap idézésével kapcsolatban",
- "cite": "Hivatkozás",
- "cite_page": "Lap neve:",
- "cite_submit": "Mehet",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n'''FONTOS MEGJEGYZÉS:''' A legtöbb tanár és szakember nem tartja helyesnek a [[harmadlagos forrás]]ok – mint a lexikonok – kizárólagos forrásként való felhasználását. A Wiki cikkeket háttérinformációnak, vagy a további kutatómunka kiindulásaként érdemes használni.\n\nMint minden [[{{ns:project}}:Ki írja a Wikipédiát|közösség által készített]] hivatkozásnál, a wiki tartalmában is lehetségesek hibák vagy pontatlanságok: kérjük, több független forrásból ellenőrizd a tényeket és ismerd meg a [[{{ns:project}}:Jogi nyilatkozat|jogi nyilatkozatunkat]], mielőtt a wiki adatait felhasználod.\n\n<div style=\"border: 1px solid grey; background: #E6E8FA; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== {{FULLPAGENAME}} lap adatai ==\n\n* Lap neve: {{FULLPAGENAME}} \n* Szerző: Wiki szerkesztők\n* Kiadó: ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. \n* A legutóbbi változat dátuma: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Letöltés dátuma: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Állandó hivatkozás: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Lapváltozat-azonosító: {{REVISIONID}}\n\nLégy szíves, ellenőrizd, hogy ezek az adatok megfelelnek-e a kívánalmaidnak. További információhoz lásd az '''[[{{ns:project}}:Idézés a Wikipédiából|Idézés a Wikipédiából]]''' lapot.\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Idézési stílusok a(z) {{FULLPAGENAME}} laphoz ==\n\n=== APA stílus ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. Retrieved <citation>{{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}. {{CURRENTTIME}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA stílus ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTYEAR}}. {{CURRENTMONTHABBREV}}. {{CURRENTDAY}}. {{CURRENTTIME}} UTC. <citation>{{CURRENTYEAR}}. {{CURRENTMONTHABBREV}}. {{CURRENTDAY}}. {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA stílus ===\nWiki szerkesztők, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}. {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}.</citation>]\n\n=== Chicago stílus ===\nWiki szerkesztők, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}.</citation>).\n\n=== CBE/CSE stílus ===\nwiki szerkesztők. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTYEAR}}. {{CURRENTMONTHABBREV}}. {{CURRENTDAY}}. {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}}. {{CURRENTMONTHABBREV}}. {{CURRENTDAY}}.</citation>]. Elérhető: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook stílus ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}.</citation>).\n\n=== [[BibTeX]] bejegyzés ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nAz <code>url</code> nevű [[LaTeX]] csomag használata esetén (<code>\\usepackage{url}</code> a preambulumban), amely a webes hivatkozások formázásában nyújt segítséget, a következő forma ajánlott:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing \"Citation styles\" div-->"
-}
diff --git a/extensions/Cite/i18n/special/hy.json b/extensions/Cite/i18n/special/hy.json
deleted file mode 100644
index 5436c319..00000000
--- a/extensions/Cite/i18n/special/hy.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Chaojoker",
- "Teak"
- ]
- },
- "cite_article_link": "Քաղվածել հոդվածը",
- "cite": "Քաղվածում",
- "cite_page": "Էջ.",
- "cite_submit": "Քաղվածել",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}} էջի մատենագրական մանրամասներ ==\n\n* Էջանուն՝ {{FULLPAGENAME}}\n* Հեղինակ՝ {{SITENAME}} contributors\n* Հրատարակիչ՝ ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Վերջինն վերանայման թիվ՝ {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} ՀԿԺ\n* Վերստացման թիվ՝ <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} ՀԿԺ</citation>\n* Մշտական հասցե՝ {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Էջի վարկածի թիվ՝ {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}} էջի մեջբերման ոճեր ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}})։ ''{{SITENAME}}, {{int:sitesubtitle}}''։ Վերստացված է՝ <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}} թվին՝</citation> {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}-ից։\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}։\" ''{{SITENAME}}, {{int:sitesubtitle}}''։ {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} ՀԿԺ։ <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;։\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} կայքի ներդնողներ, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} ՀԿԺ, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [վերստացված է՝ <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} կայքի ներդնողներ, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (վերստացված է՝ <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>)։\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} կայքի ներդնողներ։ {{FULLPAGENAME}} [Համացանց]։ {{SITENAME}}, {{int:sitesubtitle}}․ {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} ՀԿԺ [մեջբերած՝ <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]։ Հասանելի է՝\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}։\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (վերջին այցելություն՝ <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>)։\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Առցանց․ վերստացված է՝ <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[ԼաՏեԽ]] փաթեթային հասցեն (<code>\\usepackage{url}</code> օգտագործելիս, որը շատ ավելի գեղեցկորեն ոճավորված է ցուցադրում կայքերի հասցեները, կարելի է հետևյալը նախընտրել՝\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Առցանց․ վերստացված է՝ <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ia.json b/extensions/Cite/i18n/special/ia.json
deleted file mode 100644
index 41cb7812..00000000
--- a/extensions/Cite/i18n/special/ia.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Malafaya",
- "McDutchie"
- ]
- },
- "cite_article_desc": "Adde un pagina special de [[Special:Cite|citation]] e un ligamine verso le instrumentario",
- "cite_article_link": "Citar iste pagina",
- "tooltip-cite-article": "Informationes super como citar iste pagina",
- "cite": "Citation",
- "cite_page": "Pagina:",
- "cite_submit": "Citar",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Detalios bibliographic sur {{FULLPAGENAME}} ==\n\n* Nomine del pagina: {{FULLPAGENAME}}\n* Autor: {{SITENAME}} contributors\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data del ultime version: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data de recuperation: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Adresse URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID del version del pagina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Stilos de citation pro {{FULLPAGENAME}} ==\n\n=== [[:en:APA style|Stilo APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Recuperate le <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} {{CURRENTYEAR}} a {{CURRENTTIME}}</citation> ab {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:The MLA style manual|Stilo MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[:en:MHRA Style Guide|Stilo MHRA]] ===\nContributores a {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' le {{CURRENTDAY}} de {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consultate le <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[:en:The Chicago Manual of Style|Stilo Chicago]] ===\nContributores a {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consultate le <citation>{{CURRENTMONTHNAME}} de {{CURRENTDAY}} {{CURRENTYEAR}}</citation>).\n\n=== [[:en:Council of Science Editors|Stilo CBE/CSE]] ===\nContributores a {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citate <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibile a:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:Bluebook|Stilo Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (visitate ultimemente le <citation>le {{CURRENTDAY}} de {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== Entrata [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[In linea; consultate le <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nQuando usar le URL de pacchetto [[LaTeX]] (<code>\\usepackage{url}</code> in qualque parte del preambulo) que tende a resultar in adresses web con formato multo plus agradabile, le sequente pote esser preferite:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[In linea; consultate le <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/id.json b/extensions/Cite/i18n/special/id.json
deleted file mode 100644
index c97ea8ee..00000000
--- a/extensions/Cite/i18n/special/id.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bennylin",
- "Farras",
- "IvanLanin"
- ]
- },
- "cite_article_desc": "Menambahkan halaman istimewa [[Special:Cite|kutipan]] dan pranala pada kotak peralatan",
- "cite_article_link": "Kutip halaman ini",
- "tooltip-cite-article": "Informasi tentang bagaimana mengutip halaman ini",
- "cite": "Kutip",
- "cite_page": "Halaman:",
- "cite_submit": "Kutip",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Rincian bibliografis untuk {{FULLPAGENAME}} ==\n\n* Nama halaman: {{FULLPAGENAME}} \n* Pengarang: Para kontributor {{SITENAME}}\n* Penerbit: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Tanggal revisi terakhir: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tanggal akses: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Pranala permanen: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID versi halaman: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks\" style=\"border: 1px solid grey; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== Format pengutipan untuk {{FULLPAGENAME}} ==\n\n=== [[Gaya APA|Format APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Diakses pada <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> dari {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Manual gaya MLA|Format MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Format MHRA]] ===\nPara kontributor {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [diakses pada <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Format Chicago]] ===\nPara kontributor {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (diakses pada <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Format CBE/CSE]] ===\nPara kontributor {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [dikutip pada <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Tersedia dari: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Format Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (terakhir dikunjungi pada <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entri [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nSaat menggunakan url paket [[LaTeX]] (<code>\\usepackage{url}</code> di manapun di bagian pembuka) yang biasanya menghasilkan alamat-alamat web yang diformat dengan lebih baik, cara berikut ini lebih disarankan:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ie.json b/extensions/Cite/i18n/special/ie.json
deleted file mode 100644
index ddcb23b2..00000000
--- a/extensions/Cite/i18n/special/ie.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Malafaya"
- ]
- },
- "cite_page": "Págine:"
-}
diff --git a/extensions/Cite/i18n/special/ig.json b/extensions/Cite/i18n/special/ig.json
deleted file mode 100644
index ae6bb83d..00000000
--- a/extensions/Cite/i18n/special/ig.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ukabia"
- ]
- },
- "cite_article_desc": "Nè tí [[Special:Cite|ndéputà]] ihü kárírí na jikodo ngwa ọru",
- "cite_article_link": "Députà ihüa",
- "tooltip-cite-article": "Ùmà màkà otụ ha shi députà ihe na ihüa",
- "cite": "Ndéputà",
- "cite_page": "Ihü:",
- "cite_submit": "Ndéputà"
-}
diff --git a/extensions/Cite/i18n/special/ilo.json b/extensions/Cite/i18n/special/ilo.json
deleted file mode 100644
index 42d9d1b4..00000000
--- a/extensions/Cite/i18n/special/ilo.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Lam-ang"
- ]
- },
- "cite_article_desc": "Agnayon ti [[Special:Cite|dakamat]] ti naipangpangruna a panid ken panilpo ti ramramit",
- "cite_article_link": "Dakamaten daytoy a panid",
- "tooltip-cite-article": "Pakaammo no kasanu ti panagdakamat daytoy a panid",
- "cite": "Dakamaten",
- "cite_page": "Panid:",
- "cite_submit": "Dakamaten"
-}
diff --git a/extensions/Cite/i18n/special/io.json b/extensions/Cite/i18n/special/io.json
deleted file mode 100644
index 3068db73..00000000
--- a/extensions/Cite/i18n/special/io.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Malafaya"
- ]
- },
- "cite_article_desc": "Ico adjuntas specala pagino e ligilo por [[Special:Cite|citaji]] en utensilo-buxo",
- "cite_article_link": "Citar ca pagino",
- "cite": "Citar",
- "cite_page": "Pagino:",
- "cite_submit": "Citar"
-}
diff --git a/extensions/Cite/i18n/special/is.json b/extensions/Cite/i18n/special/is.json
deleted file mode 100644
index 333aa69f..00000000
--- a/extensions/Cite/i18n/special/is.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "S.Örvarr.S",
- "לערי ריינהארט",
- "Snævar"
- ]
- },
- "cite_article_link": "Vitna í þessa síðu",
- "cite": "Vitna í síðu",
- "cite_page": "Síða:",
- "cite_submit": "Vitna í",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Almennar upplýsingar ==\n\n* Síða: {{FULLPAGENAME}}\n* Höfundar: {{SITENAME}} notendur\n* Útgáfuaðili: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Síðast breytt: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} kl. {{CURRENTTIME}} UTC\n* Náð í: {{CURRENTTIME}} UTC, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}\n* Varanlegur tengill: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Útgáfunúmer: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Heimildakerfi fyrir {{FULLPAGENAME}} ==\n\n=== [[APA style|APA-kerfið]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTDAY}}. {{CURRENTMONTHNAME}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}} UTC</citation> frá {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-kerfið]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-kerfið]] ===\nHöfundar {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-kerfið]] ===\nHöfundar {{SITENAME}}, „{{FULLPAGENAME}}“, ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-kerfið]] ===\nHöfundar {{SITENAME}}. {{FULLPAGENAME}} [af netinu]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}} UTC [sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}} </citation>]. Aðgengilegt frá:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (siðast sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] færsla ===\n\n @misc{\n wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Á Internetinu; sótt <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nÞegar notuð er LaTeX pakka vefslóðin (<code>\\usepackage{url}</code> einhversstaðar í upphafi) sem á það til að gefa snyrtilegri vefslóðir, gæti eftirfarandi verið eftirsóknaraverðara:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Á internetinu; sótt <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/it.json b/extensions/Cite/i18n/special/it.json
deleted file mode 100644
index e3fc3ea6..00000000
--- a/extensions/Cite/i18n/special/it.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Beta16",
- "BrokenArrow",
- "Ximo17"
- ]
- },
- "cite_article_desc": "Aggiunge una pagina speciale per le [[Special:Cite|citazioni]] e un collegamento negli strumenti",
- "cite_article_link": "Cita questa pagina",
- "tooltip-cite-article": "Informazioni su come citare questa pagina",
- "cite": "Citazione",
- "cite_page": "Pagina da citare:",
- "cite_submit": "Crea la citazione",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Dettagli bibliografici per {{FULLPAGENAME}} ==\n\n* Titolo pagina: {{FULLPAGENAME}}\n* Autore: contributori {{SITENAME}}\n* Editore: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data dell'ultima modifica: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data estrazione: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID versione pagina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Stili citazioni per {{FULLPAGENAME}} ==\n\n=== [[APA style|Stile APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Estratto il <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> da {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Stile MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Stile MHRA]] ===\nContributori {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accesso il <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Stile Chicago]] ===\nContributori {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accesso il <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Stile CBE/CSE]] ===\nContributori {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citato il <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibile su:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Stile Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ultima visita il <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accesso il <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nQuando si usa il pacchetto [[LaTeX]] per url (<code>\\usepackage{url}</code> da qualche parte nel preambolo) che in genere dà indirizzi web formattati in modo migliore, è preferibile usare il seguente codice:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accesso il <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ja.json b/extensions/Cite/i18n/special/ja.json
deleted file mode 100644
index ac06ff02..00000000
--- a/extensions/Cite/i18n/special/ja.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Aotake",
- "Fryed-peach",
- "JtFuruhata",
- "Shirayuki",
- "Suisui",
- "Whym"
- ]
- },
- "cite_article_desc": "[[Special:Cite|引用情報]]の特別ページとツールボックスのリンクを追加する",
- "cite_article_link": "このページを引用",
- "tooltip-cite-article": "このページの引用方法",
- "cite": "引用",
- "cite_page": "ページ:",
- "cite_submit": "引用",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== 「{{FULLPAGENAME}}」の書誌情報 ==\n\n* ページ名: {{FULLPAGENAME}}\n* 著者: {{SITENAME}}への寄稿者ら\n* 発行者: {{int:sitesubtitle}}『{{SITENAME}}』\n* 更新日時: {{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日 {{CURRENTTIME}} (UTC)\n* 取得日時: <citation>{{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日 {{CURRENTTIME}} (UTC)</citation>\n* 恒久的なURI: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ページの版番号: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== 各種方式による「{{FULLPAGENAME}}」の書誌表示 ==\n\n=== [[APA方式]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日{{CURRENTTIME}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. <citation>{{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日{{CURRENTTIME}}</citation> {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} にて閲覧.\n\n=== [[The MLA style manual|MLA方式]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日{{CURRENTTIME}} (UTC). <citation>{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日{{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA方式]] ===\n{{SITENAME}}への寄稿者ら, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},''{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日 (UTC), &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [<citation>{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日</citation>閲覧]\n\n=== [[The Chicago Manual of Style|Chicago方式]] ===\n{{SITENAME}}への寄稿者ら, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日</citation>閲覧).\n\n=== [[Council of Science Editors|CBE/CSE方式]] ===\n{{SITENAME}}への寄稿者ら. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日{{CURRENTTIME}} (UTC) [<citation>{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日</citation>現在で引用]. 入手元:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook方式]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日</citation>最終訪問).\n\n=== [[BibTeX]]エントリ ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[オンライン; 閲覧日時 <citation>{{CURRENTYEAR}}-{{CURRENTDAY}}-{{CURRENTMONTH}}</citation>]\"\n }\n\nURIの体裁を整えるために[[LaTeX]]の url パッケージを用いる (プリアンブルのどこかに <code>\\usepackage{url}</code> と書く) 場合は、以下のようにした方がいいかもしれません。\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[オンライン; 閲覧日時 <citation>{{CURRENTYEAR}}-{{CURRENTDAY}}-{{CURRENTMONTH}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/jut.json b/extensions/Cite/i18n/special/jut.json
deleted file mode 100644
index 7f12a160..00000000
--- a/extensions/Cite/i18n/special/jut.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Huslåke"
- ]
- },
- "cite_article_link": "Fodnåter denne ertikel",
- "cite": "Fodnåt",
- "cite_page": "Side:",
- "cite_submit": "Fodnåt"
-}
diff --git a/extensions/Cite/i18n/special/jv.json b/extensions/Cite/i18n/special/jv.json
deleted file mode 100644
index db8add4e..00000000
--- a/extensions/Cite/i18n/special/jv.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Meursault2004",
- "NoiX180"
- ]
- },
- "cite_article_desc": "Nambahaké kaca astaméwa [[Special:Cite|sitat (kutipan)]] lan pranala ing kothak piranti",
- "cite_article_link": "Kutip (sitir) kaca iki",
- "tooltip-cite-article": "Informasi ngenani carané ngutip kaca iki",
- "cite": "Kutip (sitir)",
- "cite_page": "Kaca:",
- "cite_submit": "Kutip (sitir)",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Rincian bibliograpi kanggo {{FULLPAGENAME}} ==\n\n* Jeneng kaca: {{FULLPAGENAME}}\n* Panganggit: {{SITENAME}} kontributor\n* Panyithak: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tanggal rèvisi pungkasan: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tanggal njupuk: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanèn: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID Vèrsi Kaca: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Gagrag kutipan kanggo {{FULLPAGENAME}} ==\n\n=== [[APA style|Gagrag APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Dijupuk <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> saka {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Gagrag MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Gagrag MHRA]] ===\n{{SITENAME}} kontributor, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [diaksès <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Gagrag Chicago]] ===\n{{SITENAME}} kontributor, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (diaksès <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Gagrag CBE/CSE]] ===\n{{SITENAME}} kontributor. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [dikutip <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Sumadhiya saka:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Gagrag Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ditekani pungkasan <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== Isi [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; diaksès <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nYèn nganggo url pakèt [[LaTeX]] (<code>\\usepackage{url}</code> ngendi waé nèng pambuka) sing bakal ndadèkaké alamat wèb sing dipormat dadi luwih èndah, sing ngisor iki disaranaké:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; diaksès <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ka.json b/extensions/Cite/i18n/special/ka.json
deleted file mode 100644
index 6bb6fa8c..00000000
--- a/extensions/Cite/i18n/special/ka.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "BRUTE",
- "David1010",
- "Malafaya",
- "გიორგიმელა"
- ]
- },
- "cite_article_desc": "ამატებს [[Special:Cite|ციტირების]] სპეციალურ გვერდს ხელსაწყოებში",
- "cite_article_link": "ამ გვერდის ციტირება",
- "tooltip-cite-article": "ინფორმაცია ამ გვერდის ციტირების შესახებ",
- "cite": "ციტირება",
- "cite_page": "გვერდი:",
- "cite_submit": "ციტირება",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== ბიბლიოგრაფიული დეტალები სტატიისათვის {{FULLPAGENAME}} ==\n\n* გვერდის სახელი: {{FULLPAGENAME}}\n* ავტორი: {{SITENAME}} contributors\n* გამომქვეყნებელი: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* ბოლო ცვლილების თარიღი: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* ჩატვირთვის თარიღი: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* მუდმივი URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* გვერდის ვერსიის ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== სტილის ციტირება სტატიისათვის {{FULLPAGENAME}} ==\n\n=== [[APA სტილი]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA სტილი]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA სტილი]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[ჩიკაგოს სტილი]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE სტილი]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook სტილი]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-ის ჩანაწერი ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[LaTeX]]-ის პაკეტის url-ს გამოყენებისას ვებ-გვერდების უფრო თვალსაჩინო წარმოდგენისათვის (<code>\\usepackage{url}</code> პრეამბულაში), სავარაუდოდ უკეთესი იქნება მიუთითოთ:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/kk-arab.json b/extensions/Cite/i18n/special/kk-arab.json
deleted file mode 100644
index 7b7fcddd..00000000
--- a/extensions/Cite/i18n/special/kk-arab.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "بەتتەن دايەكسوز الۋ",
- "cite": "دايەكسوز الۋ",
- "cite_page": "بەت اتاۋى:",
- "cite_submit": "دايەكسوز ال!",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== «{{FULLPAGENAME}}» اتاۋىلى بەتىنىڭ كىتاپنامالىق ەگجەي-تەگجەيلەرى ==\n\n* بەتتىڭ اتاۋى: {{FULLPAGENAME}}\n* اۋتورى: {{SITENAME}} ۇلەسكەرلەرى\n* باسپاگەرى: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* سوڭعى نۇسقاسىنىڭ كەزى: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* الىنعان كەزى: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* تۇراقتى سىلتەمەسى: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* بەت نۇسقاسىنىڭ تەڭدەستىرۋ ٴنومىرى: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== «{{FULLPAGENAME}}» بەتىنىڭ دايەكسوز مانەرلەرى ==\n\n=== [[گوست مانەرى]] ===\n<!-- ([[گوست 7.1|گوست 7.1—2003]] جانە [[گوست 7.82|گوست 7.82—2001]]) -->\n{{SITENAME}}, {{int:sitesubtitle}} [ەلەكتروندى قاينار] : {{FULLPAGENAME}}, نۇسقاسىنىڭ ٴنومىرى {{REVISIONID}}, سوڭعى تۇزەتۋى {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC / ۋىيكىيپەدىييا اۋتورلارى. — ەلەكتروندى دەرەك. — فلورىيدا شتاتى. : ۋىيكىيمەدىييا قورى, {{CURRENTYEAR}}. — قاتىناۋ رەتى: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA مانەرى]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}'' ماعلۇماتى. {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} بەتىنەن <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> كەزىندە الىنعان.\n\n=== [[MLA مانەرى]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> <{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}>.\n\n=== [[MHRA مانەرى]] ===\n{{SITENAME}} ۇلەسكەرلەرى, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, <{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}> [<citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation> كەزىندە قاتىنالدى]\n\n=== [[شىيكاگو مانەرى]] ===\n{{SITENAME}} ۇلەسكەرى, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> كەزىندە قاتىنالدى).\n\n=== [[CBE/CSE مانەرى]] ===\n{{SITENAME}} ۇلەسكەرلەرى. {{FULLPAGENAME}} [ىينتەرنەت]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation> كەزىندە دايەكسوز الىندى]. قاتىناۋى:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[كوك كىتاپ|كوك كىتاپ مانەرى]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (سوڭعى قارالعانى <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> كەزىندە).\n\n=== [[BibTeX]] جازباسى ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[جەلىدەن; <citation>{{CURRENTDAY}}-{CURRENTMONTHNAME}}-{CURRENTYEAR}}</citation> كەزىندە قاتىنالدى]\"\n }\n\n[[LaTeX]] بۋماسىنىڭ URL جايىن (<code>\\usepackage{url}</code> كىرىسپەنىڭ قايبىر ورنىندا) قولدانعاندا (ۆەب جايلارىن ونەرلەۋ پىشىمدەۋىن كەلتىرەدى) كەلەسىسىن قالاۋعا بولادى:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[جەلىدەن; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> كەزىندە قاتىنالدى]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/kk-cyrl.json b/extensions/Cite/i18n/special/kk-cyrl.json
deleted file mode 100644
index 0e7592da..00000000
--- a/extensions/Cite/i18n/special/kk-cyrl.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kaztrans"
- ]
- },
- "cite_article_desc": "[[Special:Cite|Дәйексөз]] арнайы бетін және құрал сілтемесін қосады",
- "cite_article_link": "Беттен дәйексөз алу",
- "cite": "Дәйексөз алу",
- "cite_page": "Бет атауы:",
- "cite_submit": "Дәйексөз ал!",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== «{{FULLPAGENAME}}» атауылы бетінің кітапнамалық егжей-тегжейлері ==\n\n* Беттің атауы: {{FULLPAGENAME}}\n* Ауторы: {{SITENAME}} үлескерлері\n* Баспагері: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Соңғы нұсқасының кезі: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Алынған кезі: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Тұрақты сілтемесі: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Бет нұсқасының теңдестіру номірі: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== «{{FULLPAGENAME}}» бетінің дәйексөз мәнерлері ==\n\n=== [[ГОСТ мәнері]] ===\n<!-- ([[ГОСТ 7.1|ГОСТ 7.1—2003]] және [[ГОСТ 7.82|ГОСТ 7.82—2001]]) -->\n{{SITENAME}}, {{int:sitesubtitle}} [Электронды қайнар] : {{FULLPAGENAME}}, нұсқасының нөмірі {{REVISIONID}}, соңғы түзетуі {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC / Уикипедия ауторлары. — Электронды дерек. — Флорида штаты. : Уикимедия Қоры, {{CURRENTYEAR}}. — Қатынау реті: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA мәнері]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}'' мағлұматы. {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} бетінен <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> кезінде алынған.\n\n=== [[MLA мәнері]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA мәнері]] ===\n{{SITENAME}} үлескерлері, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [<citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation> кезінде қатыналды]\n\n=== [[Шикаго мәнері]] ===\n{{SITENAME}} үлескері, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> кезінде қатыналды).\n\n=== [[CBE/CSE мәнері]] ===\n{{SITENAME}} үлескерлері. {{FULLPAGENAME}} [Интернет]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation> кезінде дәйексөз алынды]. Қатынауы:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Көк кітап|Көк кітап мәнері]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (соңғы қаралғаны <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> кезінде).\n\n=== [[BibTeX]] жазбасы ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Желіден; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> кезінде қатыналды]\"\n }\n\n[[LaTeX]] бумасының URL жайын (<code>\\usepackage{url}</code> кіріспенің қайбір орнында) қолданғанда (веб жайларын өнерлеу пішімдеуін келтіреді) келесісін қалауға болады:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Желіден; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> кезінде қатыналды]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/kk-latn.json b/extensions/Cite/i18n/special/kk-latn.json
deleted file mode 100644
index 04b59c3b..00000000
--- a/extensions/Cite/i18n/special/kk-latn.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "Betten däýeksoz alw",
- "cite": "Däýeksöz alw",
- "cite_page": "Bet atawı:",
- "cite_submit": "Däýeksöz al!",
- "cite_text": "__NOTOC__\n<div style=\"border: 1px solid grey; background: #E6E8FA; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== «{{FULLPAGENAME}}» atawılı betiniñ kitapnamalıq egjeý-tegjeýleri ==\n\n* Bettiñ atawı: {{FULLPAGENAME}}\n* Awtorı: {{SITENAME}} üleskerleri\n* Baspageri: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Soñğı nusqasınıñ kezi: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Alınğan kezi: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Turaqtı siltemesi: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Bet nusqasınıñ teñdestirw nomiri: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks\" style=\"border: 1px solid grey; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== «{{FULLPAGENAME}}» betiniñ däýeksöz mänerleri ==\n\n=== [[GOST mäneri]] ===\n<!-- ([[GOST 7.1|GOST 7.1—2003]] jäne [[GOST 7.82|GOST 7.82—2001]]) -->\n{{SITENAME}}, {{int:sitesubtitle}} [Élektrondı qaýnar] : {{FULLPAGENAME}}, nusqasınıñ nömiri {{REVISIONID}}, soñğı tüzetwi {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC / Wïkïpedïya awtorları. — Élektrondı derek. — Florïda ştatı. : Wïkïmedïya Qorı, {{CURRENTYEAR}}. — Qatınaw reti: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA mäneri]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}'' mağlumatı. {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} betinen <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> kezinde alınğan.\n\n=== [[MLA mäneri]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA mäneri]] ===\n{{SITENAME}} üleskerleri, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [<citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation> kezinde qatınaldı]\n\n=== [[Şïkago mäneri]] ===\n{{SITENAME}} üleskeri, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> kezinde qatınaldı).\n\n=== [[CBE/CSE mäneri]] ===\n{{SITENAME}} üleskerleri. {{FULLPAGENAME}} [Ïnternet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation> kezinde däýeksöz alındı]. Qatınawı:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Kök kitap|Kök kitap mäneri]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (soñğı qaralğanı <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> kezinde).\n\n=== [[BibTeX]] jazbası ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Jeliden; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> kezinde qatınaldı]\"\n }\n\n[[LaTeX]] bwmasınıñ URL jaýın (<code>\\usepackage{url}</code> kirispeniñ qaýbir ornında) qoldanğanda (veb jaýların önerlew pişimdewin keltiredi) kelesisin qalawğa boladı:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Jeliden; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> kezinde qatınaldı]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/kl.json b/extensions/Cite/i18n/special/kl.json
deleted file mode 100644
index 327b5143..00000000
--- a/extensions/Cite/i18n/special/kl.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Qaqqalik"
- ]
- },
- "cite_article_link": "Una qupperneq issuaruk"
-}
diff --git a/extensions/Cite/i18n/special/km.json b/extensions/Cite/i18n/special/km.json
deleted file mode 100644
index 1a4d1aab..00000000
--- a/extensions/Cite/i18n/special/km.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Chhorran",
- "Lovekhmer",
- "គីមស៊្រុន"
- ]
- },
- "cite_article_link": "ប្រភពនៃទំព័រនេះ",
- "tooltip-cite-article": "ព័ត៌មានអំពីការយោងមកអត្ថបទនេះ",
- "cite": "ការយោង",
- "cite_page": "ទំព័រ ៖",
- "cite_submit": "ដាក់ការយោង"
-}
diff --git a/extensions/Cite/i18n/special/kn.json b/extensions/Cite/i18n/special/kn.json
deleted file mode 100644
index 877abd6b..00000000
--- a/extensions/Cite/i18n/special/kn.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Nayvik",
- "Shushruth"
- ]
- },
- "cite_article_link": "ಈ ಪುಟವನ್ನು ಉಲ್ಲೇಖಿಸಿ",
- "cite": "ಉಲ್ಲೇಖಿಸಿ",
- "cite_page": "ಪುಟ:"
-}
diff --git a/extensions/Cite/i18n/special/ko.json b/extensions/Cite/i18n/special/ko.json
deleted file mode 100644
index eff4bb0b..00000000
--- a/extensions/Cite/i18n/special/ko.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kwj2772",
- "ToePeu",
- "관인생략",
- "아라"
- ]
- },
- "cite_article_desc": "[[Special:Cite|인용]] 특수 문서와 도구모음 링크를 추가합니다",
- "cite_article_link": "이 문서 인용하기",
- "tooltip-cite-article": "이 문서를 인용하는 방법에 대한 정보",
- "cite": "인용",
- "cite_page": "문서:",
- "cite_submit": "인용",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}}의 출처 정보 ==\n\n* 문서 이름: {{FULLPAGENAME}}\n* 저자: {{SITENAME}} 기여자\n* 발행처: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* 최신 판의 날짜: {{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일 {{CURRENTTIME}} UTC\n* 확인한 날짜: <citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일 {{CURRENTTIME}} UTC</citation>\n* 고유 URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* 문서 판 ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}}의 인용 양식 ==\n\n=== [[APA 양식]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일). ''{{SITENAME}}, {{int:sitesubtitle}}''. <citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일, {{CURRENTTIME}}</citation>에 확인 {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} 에서 찾아볼 수 있음.\n\n=== [[MLA 양식]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA 양식]] ===\n{{SITENAME}} 기여자, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [<citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일</citation>에 접근]\n\n=== [[시카고 양식]] ===\n{{SITENAME}} 기여자, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일</citation>에 접근).\n\n=== [[Council of Science Editors|CBE/CSE 양식]] ===\n{{SITENAME}} 기여자. {{FULLPAGENAME}} [인터넷]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>에 인용]. 다음에서 찾아볼 수 있음:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[블루북|블루북 양식]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일</citation>에 마지막으로 방문함).\n\n=== [[BibTeX]] 기록 ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[온라인; 접근한 날짜 <citation>{{CURRENTYEAR}}년-{{CURRENTMONTHNAME}}-{{CURRENTDAY}}일</citation>]\"\n }\n\n[[LaTeX]] 패키지 URL (프리앰블의 어딘가에 <code>\\usepackage{url}</code>)을 사용하면 더 정돈된 형식의 웹 주소를 얻을 수 있습니다. 다음과 같은 방법을 선호합니다:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[온라인; 접근한 날짜 <citation>{{CURRENTYEAR}}년-{{CURRENTMONTHNAME}}-{{CURRENTDAY}}일</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/krc.json b/extensions/Cite/i18n/special/krc.json
deleted file mode 100644
index b6a2cbaa..00000000
--- a/extensions/Cite/i18n/special/krc.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Iltever"
- ]
- },
- "cite_article_link": "Бетни цитата эт",
- "tooltip-cite-article": "Бу бетни къалай цитата этерге керек болгъаныны юсюнден информация",
- "cite": "Цитата этиу"
-}
diff --git a/extensions/Cite/i18n/special/krj.json b/extensions/Cite/i18n/special/krj.json
deleted file mode 100644
index 0697fd19..00000000
--- a/extensions/Cite/i18n/special/krj.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Jose77"
- ]
- },
- "cite_page": "Pahina:"
-}
diff --git a/extensions/Cite/i18n/special/ksh.json b/extensions/Cite/i18n/special/ksh.json
deleted file mode 100644
index f16fd6ae..00000000
--- a/extensions/Cite/i18n/special/ksh.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Purodha"
- ]
- },
- "cite_article_desc": "Brenk de Sondersigg „[[Special:Cite|Ziteere]]“ un ene Link onger „{{int:toolbox}}“.",
- "cite_article_link": "Di Sigk Zitteere",
- "tooltip-cite-article": "Enfommazjuhne doh drövver, wi mer heh di Sigg zitteere sullt.",
- "cite": "Zittiere",
- "cite_page": "Sigk:",
- "cite_submit": "Zittėere",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== De biblejojraafesche Aanjabe för di Sigg „{{FULLPAGENAME}}“ ==\n\n* Siggetittel: {{FULLPAGENAME}}\n* Schriever: Beärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}\n* Rußjävver: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Et läz jändert aam: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} öm {{CURRENTTIME}} Uhr (UTC)\n* Affjeroofe aam: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} öm {{CURRENTTIME}} Uhr (UTC)</citation>\n* URL met Beschtand: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Version: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== De Zitatstile för di Sigg „{{FULLPAGENAME}}“ ==\n\n=== Noh dä [[APA iehre Schtil|APA iehren Schtil]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> vun {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Noh de [[MLA style manual|MLA iehrem Schtil-Handbooch]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== Nohm [[MHRA Style Guide|MHRA Schtil-Föhrer]] ===\nBeärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== Nohm [[Chicago Manual of Style|Chicago-Schtil-Handbooch]] ===\nBeärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== Nohm Schtil vum [[Council of Science Editors|Rood vun de wesseschafflije Schriever (CBE/CSE)]] ===\nBeärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [zitteerd aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}</citation>]. Affroofbaa onger:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Nohm Schtil vum [[Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== Als ene [[BibTeX]]-Endraach ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\nDat [[LaTeX]]-Modul „url“ määd_en schönere Internet-Addräß. \nWam_mer <code>\\usepackage{url}</code> em Einleidongsberett hät, kam_mer dat heh nämme:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ku-latn.json b/extensions/Cite/i18n/special/ku-latn.json
deleted file mode 100644
index da7d55c2..00000000
--- a/extensions/Cite/i18n/special/ku-latn.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "George Animal",
- "Ghybu"
- ]
- },
- "cite_article_link": "Qalkirina rûpelê bibîne",
- "tooltip-cite-article": "Agahdariya li ser qalkirina rûpelê",
- "cite_page": "Rûpel:"
-}
diff --git a/extensions/Cite/i18n/special/kw.json b/extensions/Cite/i18n/special/kw.json
deleted file mode 100644
index 8681c0b6..00000000
--- a/extensions/Cite/i18n/special/kw.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kernoweger",
- "Kw-Moon",
- "Nrowe"
- ]
- },
- "cite_article_link": "Devynna an erthygel-ma",
- "tooltip-cite-article": "Kedhlow war fatel dhevynnir an folen-ma",
- "cite": "Devynna",
- "cite_page": "Folen:",
- "cite_submit": "Devynna"
-}
diff --git a/extensions/Cite/i18n/special/la.json b/extensions/Cite/i18n/special/la.json
deleted file mode 100644
index 703d5781..00000000
--- a/extensions/Cite/i18n/special/la.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Autokrator",
- "MissPetticoats",
- "SPQRobin",
- "UV"
- ]
- },
- "cite_article_desc": " Addet [[Special:Cite|citation]] specialem paginam et arcam instrumenti",
- "cite_article_link": "Hanc paginam citare",
- "tooltip-cite-article": "Institutiones de hanc pagina citanda",
- "cite": "Paginam citare",
- "cite_page": "Pagina:",
- "cite_submit": "Citare"
-}
diff --git a/extensions/Cite/i18n/special/lad.json b/extensions/Cite/i18n/special/lad.json
deleted file mode 100644
index ac595ba3..00000000
--- a/extensions/Cite/i18n/special/lad.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Menachem.Moreira"
- ]
- },
- "cite_page": "Pajina:"
-}
diff --git a/extensions/Cite/i18n/special/lb.json b/extensions/Cite/i18n/special/lb.json
deleted file mode 100644
index 28b0e92d..00000000
--- a/extensions/Cite/i18n/special/lb.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kaffi",
- "Robby",
- "Soued031"
- ]
- },
- "cite_article_desc": "Setzt eng [[Special:Cite|Zitatioun op dëser Spezialsäit]] bei an e Link an d'Geschiirkëscht",
- "cite_article_link": "Dës Säit zitéieren",
- "tooltip-cite-article": "Informatioune wéi een dës Säit zitéiere kann",
- "cite": "Zitéierhëllef",
- "cite_page": "Säit:",
- "cite_submit": "weisen"
-}
diff --git a/extensions/Cite/i18n/special/lez.json b/extensions/Cite/i18n/special/lez.json
deleted file mode 100644
index 55704b93..00000000
--- a/extensions/Cite/i18n/special/lez.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Migraghvi"
- ]
- },
- "cite": "Цитата гъин",
- "cite_page": "Ччин:",
- "cite_submit": "Цитата гъин"
-}
diff --git a/extensions/Cite/i18n/special/lfn.json b/extensions/Cite/i18n/special/lfn.json
deleted file mode 100644
index 1af9d4e6..00000000
--- a/extensions/Cite/i18n/special/lfn.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Malafaya"
- ]
- },
- "cite_page": "Paje:"
-}
diff --git a/extensions/Cite/i18n/special/lg.json b/extensions/Cite/i18n/special/lg.json
deleted file mode 100644
index 26d4bdaa..00000000
--- a/extensions/Cite/i18n/special/lg.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kizito"
- ]
- },
- "cite_article_link": "Juliza olupapula luno",
- "tooltip-cite-article": "Amagezi agakwata ku ngeri ey'okujuliz'olupapula luno",
- "cite": "Juliza",
- "cite_page": "Lupapula:",
- "cite_submit": "Kakasa okujuliza"
-}
diff --git a/extensions/Cite/i18n/special/li.json b/extensions/Cite/i18n/special/li.json
deleted file mode 100644
index e2d30635..00000000
--- a/extensions/Cite/i18n/special/li.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ooswesthoesbes",
- "Pahles"
- ]
- },
- "cite_article_desc": "Voog 'n [[Special:Cite|speciaal pagina óm te citere]] toe en 'ne link derhaer in de gereidsjapskis",
- "cite_article_link": "Citeer dees pagina",
- "tooltip-cite-article": "Informatie euver wie se dees pazjena kins citere",
- "cite": "Citere",
- "cite_page": "Pagina:",
- "cite_submit": "Citere",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografische gegaeves veur {{FULLPAGENAME}} ==\n\n* Paginanaam: {{FULLPAGENAME}}\n* Sjriever: {{SITENAME}}-biedragers\n* Oetgaever: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tiedstip lèste versie: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tiedstip geraodplieëgd: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanente URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Paginaversienómmer: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Citaatstiel veur {{FULLPAGENAME}} ==\n\n=== [[APA style|APA-stiel]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Geraodplieëg op <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> van {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stiel]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stiel]] ===\n{{SITENAME}}-biedragers, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [geraodplieëg <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicagostiel]] ===\n{{SITENAME}}-biedragers, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (geraodplieëg <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stiel]] ===\n{{SITENAME}}-biedragers. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cetaot van <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Besjikbaar op:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebookstiel]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (geraodplieëg op <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-gegaeves ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n't Volgendje kan de veurkäör höbben es de [[LaTeX]]-moduul \"url\" wuuertj gebroek (<code>\\usepackage{url}</code> örges in de inleiding), die webadresse sjónder opgemaak:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/lmo.json b/extensions/Cite/i18n/special/lmo.json
deleted file mode 100644
index 8e9eb73d..00000000
--- a/extensions/Cite/i18n/special/lmo.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dakrismeno"
- ]
- },
- "cite_article_link": "Cita quela vus chì",
- "cite": "Cita una vus"
-}
diff --git a/extensions/Cite/i18n/special/lo.json b/extensions/Cite/i18n/special/lo.json
deleted file mode 100644
index 957c9382..00000000
--- a/extensions/Cite/i18n/special/lo.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "ອ້າງອີງບົດຄວາມນີ້",
- "cite": "ອ້າງອີງ",
- "cite_page": "ໜ້າ:"
-}
diff --git a/extensions/Cite/i18n/special/lrc.json b/extensions/Cite/i18n/special/lrc.json
deleted file mode 100644
index 8a33e119..00000000
--- a/extensions/Cite/i18n/special/lrc.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bonevarluri",
- "Mogoeilor"
- ]
- },
- "cite_article_link": "جاگه ای بلگه",
- "tooltip-cite-article": "دونسمنیا چه جور دای بلگه جاگر بوئه",
- "cite": "جاگه",
- "cite_page": "بلگه",
- "cite_submit": "جاگه"
-}
diff --git a/extensions/Cite/i18n/special/lt.json b/extensions/Cite/i18n/special/lt.json
deleted file mode 100644
index 741cda40..00000000
--- a/extensions/Cite/i18n/special/lt.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Garas"
- ]
- },
- "cite_article_desc": "Prideda [[Special:Cite|citavimo]] specialųjį puslapį ir įrankių juostos nuorodą",
- "cite_article_link": "Cituoti šį puslapį",
- "tooltip-cite-article": "Informacija kaip cituoti šį puslapį",
- "cite": "Cituoti",
- "cite_page": "Puslapis:",
- "cite_submit": "Cituoti",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografinės \"{{FULLPAGENAME}}\" detalės==\n\n* Puslapio pavadinimas: {{FULLPAGENAME}} \n* Autorius: Projekto \"{{SITENAME}}\" naudotojai\n* Leidėjas: ''{{SITENAME}}''. \n* Paskutinės versijos data: {{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC\n* Puslapis gautas: <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC</citation>\n* Nuolatinė nuoroda: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Puslapio versijos Nr.: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Citatų stiliai puslapiui \"{{FULLPAGENAME}}\" ==\n\n=== APA stilius ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}''. Gautas <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}}</citation> iš {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA stilius ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}''. {{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC. <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA stilius ===\n{{SITENAME}} naudotojai, '{{FULLPAGENAME}}', ''{{SITENAME}},'' {{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>]\n\n=== Čikagos stilius ===\n{{SITENAME}} naudotojai, \"{{FULLPAGENAME}}\", ''{{SITENAME}}'', {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>).\n\n=== CBE/CSE stilius ===\n{{SITENAME}} naudotojai. {{FULLPAGENAME}} [internete]. {{SITENAME}}, {{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC [cituota <citation>{{CURRENTYEAR}}-{{CURRENTMONTH}}-{{CURRENTDAY2}}</citation>]. Galima rasti: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook stilius ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (paskutinį kartą žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>).\n\n=== BibTeX įrašas ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Žiniatinklyje; žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>]\"\n }\n\nKai naudojate LaTeX paketą ''url'' (<code>\\usepackage{url}</code> kur nors pradžioje), kuris skirtas duoti daug gražiau suformuotus žiniatinklio adresus, patartina naudoti šitaip:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Žiniatinklyje; žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>]\"\n }\n\n\n</div>"
-}
diff --git a/extensions/Cite/i18n/special/lus.json b/extensions/Cite/i18n/special/lus.json
deleted file mode 100644
index f6f1d3b8..00000000
--- a/extensions/Cite/i18n/special/lus.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "RMizo"
- ]
- },
- "cite_article_desc": "[[Special:Cite|Ràwnna]] phêk vohbîk leh hmanrawbawm zawmna belhna",
- "cite_article_link": "Ràwnna",
- "tooltip-cite-article": "Hë phêk ràwnna chungchanga kaihhruaina",
- "cite": "Ràwnna",
- "cite_page": "Phêk:",
- "cite_submit": "Ràwnna:"
-}
diff --git a/extensions/Cite/i18n/special/lv.json b/extensions/Cite/i18n/special/lv.json
deleted file mode 100644
index 626a693f..00000000
--- a/extensions/Cite/i18n/special/lv.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Xil"
- ]
- },
- "cite_article_link": "Atsauce uz šo lapu",
- "cite": "Citēšana",
- "cite_page": "Raksts:",
- "cite_submit": "Parādīt atsauci"
-}
diff --git a/extensions/Cite/i18n/special/lzh.json b/extensions/Cite/i18n/special/lzh.json
deleted file mode 100644
index 709778eb..00000000
--- a/extensions/Cite/i18n/special/lzh.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "引文",
- "cite": "引文"
-}
diff --git a/extensions/Cite/i18n/special/mg.json b/extensions/Cite/i18n/special/mg.json
deleted file mode 100644
index 65613b42..00000000
--- a/extensions/Cite/i18n/special/mg.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Jagwar"
- ]
- },
- "cite_article_link": "Hitanisa ity pejy ity"
-}
diff --git a/extensions/Cite/i18n/special/mhr.json b/extensions/Cite/i18n/special/mhr.json
deleted file mode 100644
index 29c0439c..00000000
--- a/extensions/Cite/i18n/special/mhr.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Сай"
- ]
- },
- "cite_page": "Лаштык:"
-}
diff --git a/extensions/Cite/i18n/special/min.json b/extensions/Cite/i18n/special/min.json
deleted file mode 100644
index b099f9cf..00000000
--- a/extensions/Cite/i18n/special/min.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Iwan Novirion"
- ]
- },
- "cite_article_desc": "Manambahan laman istimewa [[Special:Cite|kutipan]] jo pautan pado kotak pakakeh",
- "cite_article_link": "Kutip laman ko",
- "tooltip-cite-article": "Informasi caro mangutip laman ko",
- "cite": "Kutip",
- "cite_page": "Laman:",
- "cite_submit": "Kutip",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Rincian bibliografi untuak {{FULLPAGENAME}} ==\n\n* Namo laman: {{FULLPAGENAME}} \n* Pangarang: Para kontributor {{SITENAME}}\n* Panerbit: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Tanggal revisi tarakhia: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Tanggal akses: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Pautan parmanen: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Kontributor utamo: [http://vs.aka-online.de/cgi-bin/wppagehiststat.pl?lang=min.wikipedia&page={{urlencode:{{FULLPAGENAME}}}} Sajarah revisi]\n* ID versi laman: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks\" style=\"border: 1px solid grey; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== Format kutipan untuak {{FULLPAGENAME}} ==\n\n=== [[:en:APA style|Format APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}). Pado ''{{SITENAME}}, {{int:sitesubtitle}}''. Diakses pukua {{#time:H:i, j F Y}}, dari {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:The MLA Style Manual|Format MLA]] ===\nKontributor {{SITENAME}}. \"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. Situs, {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[:en:MHRA Style Guide|Format MHRA]] ===\nKontributor {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [diakses {{#time:j F Y}}]\n\n=== [[:en:The Chicago Manual of Style|Format Chicago]] ===\nKontributor {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (diakses {{#time:j F Y}}).\n\n=== [[:en:Council of Science Editors|Format CBE/CSE]] ===\nKontributor {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [dikutip pado {{#time:j M Y}}]. Tasadio dari: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:Bluebook|Format Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (tarakhia dikunjuangi pado {{#time:j M Y}}).\n\n=== [[:en:Bluebook#Citation_to_Wikipedia|Bluebook: Harvard JOLT style]] ===\n{{SITENAME}}, ''{{FULLPAGENAME}}'', {{canonicalurl:{{FULLPAGENAME}}}} (opsi deskripsi disiko) (pado {{#time:j M Y, H:i}} GMT).\n\n=== [[:en:American Medical Association|AMA]] style ===\nKontributor {{SITENAME}}. {{FULLPAGENAME}}. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}. {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. Tasadio pado: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. Diakses {{#time:j F Y}}.\n\n=== Entri [[:en:BibTeX|BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Daring; diakses {{#time:j-F-Y}}]\"\n }\n\nBilo manggunoan paket url [[:en:LaTeX|LaTeX]] (<code>\\usepackage{url}</code> di manopun di bagian pambukak) nan biasonyo manghasilkan alamaik-alamaik web nan diformat labiah rancak, caro ko labiah disarankan:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Daring; diakses {{#time:j-F-Y}}]\"\n }\n\n=== Laman rundiang Wikipedia ===\n;Markah: <nowiki>[[</nowiki>{{FULLPAGENAME}}<nowiki>]]</nowiki> (<nowiki>[</nowiki>{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} versi ko<nowiki>]</nowiki>)\n\n;Hasil: [{{canonicalurl:{{FULLPAGENAME}}}} {{FULLPAGENAME}}] ([{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} versi ko])\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/mk.json b/extensions/Cite/i18n/special/mk.json
deleted file mode 100644
index ab157e36..00000000
--- a/extensions/Cite/i18n/special/mk.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bjankuloski06",
- "Brest",
- "Misos"
- ]
- },
- "cite_article_desc": "Додава специјална страница за [[Special:Cite|наведување]] и врска кон алатникот",
- "cite_article_link": "Наведи ја страницава",
- "tooltip-cite-article": "Информации како да ја цитирате оваа страница",
- "cite": "Цитат",
- "cite_page": "Страница:",
- "cite_submit": "Наведи",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Библиографски податоци за {{FULLPAGENAME}} ==\n\n* Назив на страницата: {{FULLPAGENAME}}\n* Автор: Учесници на {{SITENAME}}\n* Извадач: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Последна измена: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Пристапено на: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Трајна URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Назнака на верзијата: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Стилови на наведување за {{FULLPAGENAME}} ==\n\n=== [[APA style|Стил APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Стил MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Стил MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Чикашки стил]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Стил CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Стил „Сина книга“]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-запис ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[семрежно; пристапено на <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\nКога користите [[LaTeX]], спакувајте ја URL-адресата (<code>\\usepackage{url}</code> некаде во преамбулата), при што се добиваат многу поубаво горматирани адреси. Се претпочитаат следниве:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ml.json b/extensions/Cite/i18n/special/ml.json
deleted file mode 100644
index 1eebd727..00000000
--- a/extensions/Cite/i18n/special/ml.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Praveenp",
- "Shijualex"
- ]
- },
- "cite_article_desc": "[[Special:Cite|സൈറ്റേഷൻ]] എന്ന പ്രത്യേക താളും, പണി സഞ്ചി കണ്ണിയും ചേർക്കുന്നു",
- "cite_article_link": "ഈ താൾ ഉദ്ധരിക്കുക",
- "tooltip-cite-article": "ഈ താളിനെ എങ്ങനെ അവലംബിതമാക്കാം എന്ന വിവരങ്ങൾ",
- "cite": "ഉദ്ധരിക്കുക",
- "cite_page": "താൾ:",
- "cite_submit": "ഉദ്ധരിക്കുക",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}} താളിന്റെ ഗ്രന്ഥസൂചി വിവരണം ==\n\n* താളിന്റെ തലക്കെട്ട്: {{FULLPAGENAME}}\n* എഴുതിയത്: {{SITENAME}} ലേഖകർ\n* പ്രസിദ്ധീകരിച്ചത്: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* അവസാനത്തെ നാൾപ്പതിപ്പിന്റെ തീയതി: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* ശേഖരിച്ച് തീയതി: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* സ്ഥിരം യു.ആർ.എൽ.: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* താളിന്റെ പതിപ്പിന്റെ ഐ.ഡി.: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}} താളിനുള്ള അവലംബ ശൈലികൾ ==\n=== [[:w:en:APA style|എ.പി.എ. ശൈലി]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} താളിൽ നിന്നും, <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> -നു ശേഖരിച്ചത്.\n\n=== [[:w:en:The MLA style manual|എം.എൽ.എ. ശൈലി]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} യു.റ്റി.സി.. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[:w:en:MHRA Style Guide|എം.എച്ച്.ആർ.എ. ശൈലി]] ===\n{{SITENAME}} ലേഖകർ, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} യൂ.റ്റി.സി., &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [എടുത്ത തീയതി: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[:w:en:The Chicago Manual of Style|ഷിക്കാഗോ ശൈലി]] ===\n{{SITENAME}} ലേഖകർ, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (എടുത്ത തീയതി: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[:w:en:Council of Science Editors|സി.ബി.ഇ./സി.എസ്.ഇ. ശൈലി]] ===\n{{SITENAME}} ലേഖകർ. {{FULLPAGENAME}} [ഇന്റർനെറ്റ്]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} യു.റ്റി.സി. [അവലംബിച്ച തീയതി: <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. ലഭിച്ചത്:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:w:en:Bluebook|ബ്ലൂബുക്ക് ശൈലി]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (അവസാനം പരിശോധിച്ചത് <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[:w:en:BibTeX|ബിബ്ടെക്സ്]] രീതി ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[:w:en:LaTeX|ലാറ്റക്സ്]] പാക്കേജ് യൂ.ആർ.എൽ. ഉപയോഗിക്കുകയാണെങ്കിൽ (പീഠികയിൽ <code>\\usepackage{url}</code> എന്ന് നൽകി), കൂടുതൽ മനോഹരമായി വെബ് വിലാസം നൽകാറുണ്ട്, താഴെക്കൊടുക്കുന്ന രീതി ഉപയോഗിക്കാൻ താത്പര്യപ്പെടുന്നു:\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/mn.json b/extensions/Cite/i18n/special/mn.json
deleted file mode 100644
index b72b3afd..00000000
--- a/extensions/Cite/i18n/special/mn.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Chinneeb",
- "MongolWiki"
- ]
- },
- "cite_article_link": "Эндээс иш татах",
- "cite": "Иш татах",
- "cite_page": "Хуудас:",
- "cite_submit": "Иш татах"
-}
diff --git a/extensions/Cite/i18n/special/mr.json b/extensions/Cite/i18n/special/mr.json
deleted file mode 100644
index 06841bb7..00000000
--- a/extensions/Cite/i18n/special/mr.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kaustubh",
- "Mahitgar",
- "V.narsikar"
- ]
- },
- "cite_article_desc": "एक [[Special:Cite|बाह्यदुवे]] देणारे विशेषपान व साधनपेटीचा दुवा जोडते",
- "cite_article_link": "हे पान उधृत करा",
- "tooltip-cite-article": "हे पृष्ठ बघण्यासाठीची माहिती",
- "cite": "उधृत करा",
- "cite_page": "पान",
- "cite_submit": "उधृत करा"
-}
diff --git a/extensions/Cite/i18n/special/mrj.json b/extensions/Cite/i18n/special/mrj.json
deleted file mode 100644
index 6e6ffd19..00000000
--- a/extensions/Cite/i18n/special/mrj.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Amdf"
- ]
- },
- "cite_article_link": "Ӹлӹшташӹм цитируяш"
-}
diff --git a/extensions/Cite/i18n/special/ms.json b/extensions/Cite/i18n/special/ms.json
deleted file mode 100644
index e419897d..00000000
--- a/extensions/Cite/i18n/special/ms.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Anakmalaysia",
- "Aurora",
- "Aviator"
- ]
- },
- "cite_article_desc": "Menambah laman khas dan pautan kotak alatan untuk [[Special:Cite|pemetikan]]",
- "cite_article_link": "Petik laman ini",
- "tooltip-cite-article": "Maklumat tentang cara memetik laman ini",
- "cite": "Petik",
- "cite_page": "Laman:",
- "cite_submit": "Petik",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Butiran bibliografi {{FULLPAGENAME}} ==\n\n* Nama laman: {{FULLPAGENAME}}\n* Pengarang: Para penyumbang {{SITENAME}}\n* Penerbit: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tarikh semakan terkini: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tarikh diambil: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL kekal: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID versi laman: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Gaya petikan {{FULLPAGENAME}} ==\n\n=== [[Gaya APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Manual gaya MLA|Gaya MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Panduan gaya MHRA|Gaya MHRA]] ===\nPara penyumbang {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [dicapai pada <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Gaya Chicago]] ===\nPara penyumbang {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (dicapai pada <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Gaya CBE/CSE]] ===\nPara penyumbang {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [dipetik pada <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Didapati dari:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Gaya Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (kali terakhir dilawati pada <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Lema [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; dicapai pada <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nApabila menggunakan URL pakej [[LaTeX]] (<code>\\usepackage{url}</code> di suatu tempat dalam mukadimah) yang sering memberikan alamat web yang lebih kemas formatnya, ada baiknya menggunakan yang berikut:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; dicapai pada <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/mt.json b/extensions/Cite/i18n/special/mt.json
deleted file mode 100644
index 48eb6777..00000000
--- a/extensions/Cite/i18n/special/mt.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Chrisportelli",
- "Giangian15"
- ]
- },
- "cite_article_desc": "Iżżid paġna speċjali għaċ-[[Special:Cite|ċitazzjonijiet]] u ħolqa mal-istrumenti",
- "cite_article_link": "Iċċita din il-paġna",
- "tooltip-cite-article": "Informazzjoni fuq kif tiċċita din il-paġna",
- "cite": "Ċitazzjoni",
- "cite_page": "Paġna:",
- "cite_submit": "Oħloq ċitazzjoni",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Dettalji biblijografiċi għal {{FULLPAGENAME}} ==\n\n* Titlu tal-paġna: {{FULLPAGENAME}}\n* Awtur: kontributuri ta' {{SITENAME}}\n* Editur: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data tal-aħħar modifika: {{CURRENTDAY}} ta' {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data tal-konsultazzjoni tal-paġna: <citation>{{CURRENTDAY}} ta' {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanenti: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID tal-verżjoni tal-paġna: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Stili ta' ċitazzjoni għal {{FULLPAGENAME}} ==\n\n=== [[APA style|Stil APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Aċċessat fil-<citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> minn {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Stil MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} ta' {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Stil MHRA]] ===\nKontributuri ta' {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} ta' {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [aċċessat fil-<citation>{{CURRENTDAY}} ta' {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Stil Chicago]] ===\nKontributuri ta' {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (aċċessat f'<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Stil CBE/CSE]] ===\nKontributuri ta' {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [iċċitat fl-<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibbli fuq:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Stil Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (l-aħħar viżta f'<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Daħla [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; aċċessat fil-<citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nMeta tuża l-pakkett [[LaTeX]] għall-url (<code>\\usepackage{url}</code> f'kwalunkwe parti fil-preambolu) li ġeneralment tagħti indirizzi elettroniċi ifformattjati aħjar, huwa ppreferut li jintuża l-kodiċi segwenti:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; aċċessat fil<citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/mwl.json b/extensions/Cite/i18n/special/mwl.json
deleted file mode 100644
index ddae307e..00000000
--- a/extensions/Cite/i18n/special/mwl.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Malafaya"
- ]
- },
- "cite_page": "Páigina:"
-}
diff --git a/extensions/Cite/i18n/special/myv.json b/extensions/Cite/i18n/special/myv.json
deleted file mode 100644
index cd44f19d..00000000
--- a/extensions/Cite/i18n/special/myv.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Amdf",
- "Botuzhaleny-sodamo"
- ]
- },
- "cite_page": "Лопась:"
-}
diff --git a/extensions/Cite/i18n/special/nah.json b/extensions/Cite/i18n/special/nah.json
deleted file mode 100644
index ddc23623..00000000
--- a/extensions/Cite/i18n/special/nah.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Fluence",
- "Ricardo gs"
- ]
- },
- "cite_article_link": "Tlahtoa inīn tlahcuilōltechcopa",
- "cite": "Titēnōtzaz",
- "cite_page": "Zāzanilli:",
- "cite_submit": "Titēnōtzaz"
-}
diff --git a/extensions/Cite/i18n/special/nan.json b/extensions/Cite/i18n/special/nan.json
deleted file mode 100644
index fcc28d13..00000000
--- a/extensions/Cite/i18n/special/nan.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "Ín-iōng chit phiⁿ bûn-chiuⁿ",
- "cite": "Ín-iōng",
- "cite_page": "Ia̍h:",
- "cite_submit": "Ín-iōng"
-}
diff --git a/extensions/Cite/i18n/special/nb.json b/extensions/Cite/i18n/special/nb.json
deleted file mode 100644
index 71833bc0..00000000
--- a/extensions/Cite/i18n/special/nb.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Nghtwlkr"
- ]
- },
- "cite_article_desc": "Legger til en [[Special:Cite|siteringsside]] og lenke i verktøy-menyen",
- "cite_article_link": "Siter denne siden",
- "tooltip-cite-article": "Informasjon om hvordan denne siden kan siteres",
- "cite": "Siter",
- "cite_page": "Side:",
- "cite_submit": "Siter",
- "cite_text": "__NOTOC__\n<div style=\"width: 90%; text-align: center; font-size: 85%; margin: 10px auto;\">Innhold: [[#APA-stil|APA]] | [[#MLA-stil|MLA]] | [[#MHRA-stil|MHRA]] | [[#Chicago-stil|Chicago]] | [[#CBE/CSE-stil|CSE]] | [[#Bluebook-stil|Bluebook]] | [[#BibTeX|BibTeX]]</div>\n<div style=\"border: 1px solid grey; background: #E6E8FA; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n==Bibliografiske detaljer for «[[{{PAGENAME}}|{{FULLPAGENAME}}]]»==\n\n* Sidenavn: [[{{PAGENAME}}|{{FULLPAGENAME}}]]\n* Forfatter: Wikipedia-brukere\n* Utgiver: ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. \n* Dato for forrige revisjon: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Dato sitert: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanent lenke: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Revisjons-ID: {{REVISIONID}}\n\n<!--Please remember to check for the exact syntax to suit your needs. For more detailed advice, see '''[[Wikipedia:Citing Wikipedia|Citing Wikipedia]]'''.-->\n\n</div>\n<div class=\"plainlinks\" style=\"border: 1px solid grey; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\"> \n\n== Siteringsstiler for «[[{{PAGENAME}}|{{FULLPAGENAME}}]]»==\n\n=== [[:en:APA style|APA-stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. Hentet <citation>{{CURRENTTIME}}, {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTYEAR}}</citation> fra {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n\n\n=== [[:en:The MLA style manual|MLA-stil]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n\n\n=== [[:en:MHRA Style Guide|MHRA-stil]] ===\nWikipedia-brukere, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [besøkt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n\n\n=== [[:en:The Chicago Manual of Style|Chicago-stil]] ===\nWikipedia-brukere, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (besøkt <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n\n\n=== [[:en:Council of Science Editors|CBE/CSE-stil]] ===\nWikipedia-brukere. {{FULLPAGENAME}} [internett]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [sitert <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Tilgjengelig fra: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n\n\n=== [[:en:Bluebook|Bluebook-stil]] ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sist besøkt <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n\n\n=== [[:en:BibTeX|BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[På internett; besøkt <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nOm man bruker [[:en:LaTeX|LaTeX]]' pakke-URL (<code>\\usepackage{url}</code> et sted i begynnelsen) som pleier å gi mye finere formaterte internettadresser, kan følgende være foretrukket:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[På internett; besøkt <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing \"Citation styles\" div-->"
-}
diff --git a/extensions/Cite/i18n/special/nds-nl.json b/extensions/Cite/i18n/special/nds-nl.json
deleted file mode 100644
index 908308a5..00000000
--- a/extensions/Cite/i18n/special/nds-nl.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Servien"
- ]
- },
- "cite_article_desc": "Zet n [[Special:Cite|spesiale zied]] derbie um te siteren, en n verwiezing dernaor in de hulpmiddels",
- "cite_article_link": "Disse zied siteren",
- "tooltip-cite-article": "Informasie over hoe of da'j disse zied siteren kunnen",
- "cite": "Siteerhulpe",
- "cite_page": "Zied:",
- "cite_submit": "Siteren",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografiese gegevens veur {{FULLPAGENAME}} ==\n\n* Ziednaam: {{FULLPAGENAME}}\n* Auteur: {{SITENAME}}-biedragers\n* Uutgever: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tiedstip leste versie: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tiedstip eraodpleegd: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanente URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Ziedversienummer: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Sitaotstielen veur {{FULLPAGENAME}} ==\n\n=== [[APA-stiel]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Eraodpleegd op <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> van {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stiel]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stiel]] ===\n{{SITENAME}}-biedragers, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [eraodpleegd <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-stiel]] ===\n{{SITENAME}}-biedragers, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (eraodpleegd <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stiel]] ===\n{{SITENAME}}-biedragers. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [sitaot van <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Beschikbaor op:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-stiel]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (eraodpleegd op <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-gegevens ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nt Volgende kan de veurkeur hebben as de [[LaTeX]]-module \"url\" gebruukt wörden (<code>\\usepackage{url}</code> argens in de inleiding), die webadressen mooier opmaakt:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; eraodpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/nds.json b/extensions/Cite/i18n/special/nds.json
deleted file mode 100644
index 96463c2c..00000000
--- a/extensions/Cite/i18n/special/nds.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Slomox"
- ]
- },
- "cite_article_desc": "Föögt en [[Special:Cite|Spezialsied för Zitaten]] un en Lenk dorop in’n Kasten Warktüüch to",
- "cite_article_link": "Disse Siet ziteren",
- "cite": "Ziteerhelp",
- "cite_page": "Siet:",
- "cite_submit": "Ziteren"
-}
diff --git a/extensions/Cite/i18n/special/ne.json b/extensions/Cite/i18n/special/ne.json
deleted file mode 100644
index c8e9fcbd..00000000
--- a/extensions/Cite/i18n/special/ne.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "लेख उद्दरण गर्नुहोस्",
- "cite": "उद्दरण गर्नु",
- "cite_page": "पृष्ठ:"
-}
diff --git a/extensions/Cite/i18n/special/niu.json b/extensions/Cite/i18n/special/niu.json
deleted file mode 100644
index f9eb6d75..00000000
--- a/extensions/Cite/i18n/special/niu.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Jose77"
- ]
- },
- "cite_article_link": "Fakakite e tala nei"
-}
diff --git a/extensions/Cite/i18n/special/nl.json b/extensions/Cite/i18n/special/nl.json
deleted file mode 100644
index 67bf4c9e..00000000
--- a/extensions/Cite/i18n/special/nl.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Effeietsanders",
- "SPQRobin",
- "Siebrand"
- ]
- },
- "cite_article_desc": "Voegt een [[Special:Cite|speciale pagina]] toe om te citeren, en een koppeling ernaar in de hulpmiddelen",
- "cite_article_link": "Deze pagina citeren",
- "tooltip-cite-article": "Informatie over hoe u deze pagina kunt citeren",
- "cite": "Citeren",
- "cite_page": "Pagina:",
- "cite_submit": "Citeren",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografische gegevens voor {{FULLPAGENAME}} ==\n\n* Paginanaam: {{FULLPAGENAME}}\n* Auteur: {{SITENAME}}-bijdragers\n* Uitgever: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tijdstip laatste versie: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tijdstip geraadpleegd: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanente URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Paginaversienummer: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Citaatstijlen voor {{FULLPAGENAME}} ==\n\n=== [[APA-stijl]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Geraadpleegd op <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> van {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stijl]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stijl]] ===\n{{SITENAME}}-bijdragers, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [geraadpleegd <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-stijl]] ===\n{{SITENAME}}-bijdragers, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (geraadpleegd <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stijl]] ===\n{{SITENAME}}-bijdragers. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citaat van <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Beschikbaar op:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-stijl]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (geraadpleegd op <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-gegevens ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nHet volgende kan de voorkeur hebben als de [[LaTeX]]-module \"url\" wordt gebruikt (<code>\\usepackage{url}</code> ergens in de inleiding), die webadressen mooier opgemaakt:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/nn.json b/extensions/Cite/i18n/special/nn.json
deleted file mode 100644
index cf03f40d..00000000
--- a/extensions/Cite/i18n/special/nn.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Gunnernett",
- "Harald Khan",
- "Jon Harald Søby",
- "Njardarlogar"
- ]
- },
- "cite_article_desc": "Legg til ei [[Special:Cite|siteringsside]] og ei lenkje i verktøy-menyen",
- "cite_article_link": "Siter denne sida",
- "tooltip-cite-article": "Informasjon om korleis ein siterer denne sida",
- "cite": "Siter",
- "cite_page": "Side:",
- "cite_submit": "Siter"
-}
diff --git a/extensions/Cite/i18n/special/nov.json b/extensions/Cite/i18n/special/nov.json
deleted file mode 100644
index 5f2591c6..00000000
--- a/extensions/Cite/i18n/special/nov.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "MF-Warburg"
- ]
- },
- "cite_article_link": "Sita disi artikle",
- "cite": "Sita"
-}
diff --git a/extensions/Cite/i18n/special/nso.json b/extensions/Cite/i18n/special/nso.json
deleted file mode 100644
index 4e4e76ca..00000000
--- a/extensions/Cite/i18n/special/nso.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Mohau"
- ]
- },
- "cite_page": "Letlakala:"
-}
diff --git a/extensions/Cite/i18n/special/oc.json b/extensions/Cite/i18n/special/oc.json
deleted file mode 100644
index ac2111f0..00000000
--- a/extensions/Cite/i18n/special/oc.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Cedric31"
- ]
- },
- "cite_article_desc": "Apond una pagina especiala [[Special:Cite|citacion]] e un ligam dins la bóstia d'aisinas",
- "cite_article_link": "Citar aqueste article",
- "tooltip-cite-article": "Informacions sus cossí citar aquesta pagina",
- "cite": "Citacion",
- "cite_page": "Pagina :",
- "cite_submit": "Citar",
- "cite_text": "__NOTOC__ \n<div class=\"mw-specialcite-bibliographic\">\n\n== Informacions bibliograficas sus {{FULLPAGENAME}} == \n* Nom de la pagina : {{FULLPAGENAME}} \n* Autors : {{canonicalurl:{{FULLPAGENAME}}|action=history}} \n* Editor : {{SITENAME}}, {{int:sitesubtitle}}''.\n* Darrièra revision : {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Recuperat : <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanenta : {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identificant d'aquesta version : {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Estils de citacions per {{FULLPAGENAME}} ==\n\n=== [[Estil APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> dempuèi {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Estil MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Estil MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accedit lo <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Estil Chicago]] ===\nContributeurs de {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accedit lo <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Estil CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citat lo <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible sus : \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Estil Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (visitat lo <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrada [[BibTeX]] ===\n\n@misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[En linha ; accedit lo <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nSe utilizatz lo package URL dins [[LaTeX]] (<code>\\usepackage{url}</code> endacòm dins lo preambul), que balha d'adreças web melhor formatadas, utilizatz lo format seguent :\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[En linha ; accedit lo <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/or.json b/extensions/Cite/i18n/special/or.json
deleted file mode 100644
index 7842662e..00000000
--- a/extensions/Cite/i18n/special/or.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Jnanaranjan Sahu",
- "Psubhashish"
- ]
- },
- "cite_article_desc": "ଏକ [[Special:Cite|ଆଧାର]] ବିଶେଷ ପୃଷ୍ଠା ଓ ଉପକରଣ ପେଡ଼ିର ଲିଙ୍କ ଯୋଡ଼ିଥାଏ",
- "cite_article_link": "ଏହି ପୃଷ୍ଠାଟିରେ ପ୍ରମାଣ ଯୋଡ଼ିବେ",
- "tooltip-cite-article": "ଆଧାରଟିଏ ଦେବା ଉପରେ ଅଧିକ ସୂଚନା",
- "cite": "ଆଧାର ଦେବେ",
- "cite_page": "ପୃଷ୍ଠା:",
- "cite_submit": "ଆଧାର ଦେବେ",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}}ର ଅଧାରଗତ ବିବରଣୀ ==\n\n\n*ପୃଷ୍ଠାନାମ:\n*ଲେଖକ:\n*ପ୍ରକାଶକ:\n*ଶେଷଥର ପୁନରାବୃତିର ତାରିଖ:\n*ବ୍ୟବହାର କରାଯାଇଥିବା ତାରିଖ:\n*ସ୍ଥାୟୀ URL:\n*ପୃଷ୍ଠା ସଂସ୍କରଣ ID:\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}}ର ସଜାଣି ପଦ୍ଧତି ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[The MLA style manual|MLA ଶୈଳୀ]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA ଶୈଳୀ]] ===\n\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n=== [[The Chicago Manual of Style|ଚିକାଗୋ ଶୈଳୀ]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE ଶୈଳୀ]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook ଶୈଳୀ]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ଦାଖଲ ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[LaTeX]] ପ୍ୟାକେଜ url (<code>\\usepackage{url}</code> somewhere in the preamble) ଯାହାକି ଆହୁରି ଅଧିକ ସୁନ୍ଦରଭାବେ ସଜାଯାଇଥିବା ୱେବଠିକଣାକୁ ଯୋଡିଥାଏ ତାକୁ ବ୍ୟବହାର କରିବାବେଳେ, ନିମ୍ନଲିଖିତକୁ ନଜରକୁ ଅଣାଯାଇପାରେ:\n@misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/os.json b/extensions/Cite/i18n/special/os.json
deleted file mode 100644
index bf8f2825..00000000
--- a/extensions/Cite/i18n/special/os.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Amikeco"
- ]
- },
- "cite_page": "Фарс:"
-}
diff --git a/extensions/Cite/i18n/special/pag.json b/extensions/Cite/i18n/special/pag.json
deleted file mode 100644
index 13667ae6..00000000
--- a/extensions/Cite/i18n/special/pag.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "Bitlaen yan article",
- "cite": "Bitlaen",
- "cite_page": "Bolong:",
- "cite_submit": "Bitlaen"
-}
diff --git a/extensions/Cite/i18n/special/pam.json b/extensions/Cite/i18n/special/pam.json
deleted file mode 100644
index d137355f..00000000
--- a/extensions/Cite/i18n/special/pam.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "Banggitan ya ing articulung ini",
- "cite": "Banggitan ya",
- "cite_page": "Bulung:",
- "cite_submit": "Banggitan me"
-}
diff --git a/extensions/Cite/i18n/special/pcd.json b/extensions/Cite/i18n/special/pcd.json
deleted file mode 100644
index cdbe874f..00000000
--- a/extensions/Cite/i18n/special/pcd.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Geoleplubo"
- ]
- },
- "cite_article_link": "Citer chol pache"
-}
diff --git a/extensions/Cite/i18n/special/pdc.json b/extensions/Cite/i18n/special/pdc.json
deleted file mode 100644
index 4dab3ac3..00000000
--- a/extensions/Cite/i18n/special/pdc.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Xqt"
- ]
- },
- "cite_page": "Blatt:"
-}
diff --git a/extensions/Cite/i18n/special/pfl.json b/extensions/Cite/i18n/special/pfl.json
deleted file mode 100644
index f5eec051..00000000
--- a/extensions/Cite/i18n/special/pfl.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Manuae",
- "SPS"
- ]
- },
- "cite_article_link": "Die Said zidiere",
- "cite": "Hilf zum Zidiere",
- "cite_submit": "Schbaischere"
-}
diff --git a/extensions/Cite/i18n/special/pl.json b/extensions/Cite/i18n/special/pl.json
deleted file mode 100644
index 9a509410..00000000
--- a/extensions/Cite/i18n/special/pl.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Sp5uhe",
- "Tar Lócesilion"
- ]
- },
- "cite_article_desc": "Dodaje stronę specjalną i guzik w toolbarze edycyjnym do obsługi [[Special:Cite|cytowania]]",
- "cite_article_link": "Cytowanie tego artykułu",
- "tooltip-cite-article": "Informacja o tym jak należy cytować tę stronę",
- "cite": "Bibliografia",
- "cite_page": "Strona:",
- "cite_submit": "stwórz przypis bibliograficzny"
-}
diff --git a/extensions/Cite/i18n/special/pms.json b/extensions/Cite/i18n/special/pms.json
deleted file mode 100644
index 72f29f5f..00000000
--- a/extensions/Cite/i18n/special/pms.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Borichèt",
- "Bèrto 'd Sèra",
- "Dragonòt"
- ]
- },
- "cite_article_desc": "A gionta na pàgina special [[Special:Cite|citassion]] e n'anliura dj'utiss",
- "cite_article_link": "Sita sta pàgina-sì",
- "tooltip-cite-article": "Anformassion ëd com sité sta pàgina-sì.",
- "cite": "Citassion",
- "cite_page": "Pàgina da cité:",
- "cite_submit": "Pronta la citassion",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Detaj bibliogràfich për {{FULLPAGENAME}} ==\n\n* Nòm ëd la pàgina: {{FULLPAGENAME}}\n* Autor: contributor ëd {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data ëd l'ùltima revision: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date ëd sitassion: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Adrëssa an sl'aragnà përmanenta: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identificativ dla version ëd la pàgina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Stil ëd sitassion për {{FULLPAGENAME}} ==\n\n=== [[stil APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Sità <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> da {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|stil MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|stil MHRA]] ===\n{{SITENAME}} contributor, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|stil Chicago]] ===\n{{SITENAME}} contributor, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sità <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|stil CBE/CSE]] ===\n{{SITENAME}} contributor. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponìbil da:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|stil Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ùltima vìsita <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Vos [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[An linia; trovà <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nQuand as deuvra la liura al compless [[LaTeX]] (<code>\\usepackage{url}</code> da chèiche part ant l'achit) che a dovrìa dé dj'adrësse dla Ragnà formatà motobin mej, la manera sì-sota a peul esse preferìa:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[An linia; trovà <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/pnb.json b/extensions/Cite/i18n/special/pnb.json
deleted file mode 100644
index 97d14687..00000000
--- a/extensions/Cite/i18n/special/pnb.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Khalid Mahmood"
- ]
- },
- "cite_article_desc": "جوڑدا اے اک [[Special:Cite|اتہ پتہ]] خاص صفہ تے اوزار ڈبہ جوڑ۔",
- "cite_article_link": "ایس صفے دا اتہ پتہ دیو",
- "tooltip-cite-article": "ایس صفے دا کنج اتہ پتہ دیوو دی دس۔",
- "cite": "اتہ پتہ",
- "cite_page": "صفہ:",
- "cite_submit": "اتہ پتہ"
-}
diff --git a/extensions/Cite/i18n/special/pnt.json b/extensions/Cite/i18n/special/pnt.json
deleted file mode 100644
index cd064185..00000000
--- a/extensions/Cite/i18n/special/pnt.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Sinopeus"
- ]
- },
- "cite_page": "Σελίδα:"
-}
diff --git a/extensions/Cite/i18n/special/ps.json b/extensions/Cite/i18n/special/ps.json
deleted file mode 100644
index d2677425..00000000
--- a/extensions/Cite/i18n/special/ps.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ahmed-Najib-Biabani-Ibrahimkhel"
- ]
- },
- "cite_article_link": "د دې مخ درک",
- "tooltip-cite-article": "د دې مخ د درک لګولو مالومات",
- "cite": "درک",
- "cite_page": "مخ:",
- "cite_submit": "درک لگول",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== د {{FULLPAGENAME}} لپاره د کتابښودنې ځانگړنې==\n\n* مخ نوم: {{FULLPAGENAME}}\n* ليکوال: {{SITENAME}} ونډه وال\n* خپرندوی: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* د وروستۍ مخکتنې نېټه: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date retrieved: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* تلپاتې تړنه URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* د مخ بڼې پېژند: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Citation styles for {{FULLPAGENAME}} ==\n\n=== [[APA توگه]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== د {{FULLPAGENAME}} لپاره د کتابښودنې ځانگړنې==\n\n* مخ نوم: {{FULLPAGENAME}}\n* ليکوال: {{SITENAME}} ونډه وال\n* خپرندوی: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* د وروستۍ مخکتنې نېټه: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date retrieved: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* تلپاتې تړنه URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* د مخ بڼې پېژند: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Citation styles for {{FULLPAGENAME}} ==\n\n=== [[APA توگه]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA توگه]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA توگه]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago توگه]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE توگه]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook توگه]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/pt-br.json b/extensions/Cite/i18n/special/pt-br.json
deleted file mode 100644
index fc1411a0..00000000
--- a/extensions/Cite/i18n/special/pt-br.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Carla404",
- "Giro720"
- ]
- },
- "cite_article_desc": "Adiciona uma página especial de [[Special:Cite|citação]] e link para a caixa de ferramentas",
- "cite_article_link": "Citar esta página",
- "tooltip-cite-article": "Informação sobre como citar esta página",
- "cite": "Citar",
- "cite_page": "Página:",
- "cite_submit": "Citar"
-}
diff --git a/extensions/Cite/i18n/special/pt.json b/extensions/Cite/i18n/special/pt.json
deleted file mode 100644
index de1698c7..00000000
--- a/extensions/Cite/i18n/special/pt.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Hamilton Abreu",
- "Lijealso",
- "Malafaya",
- "555",
- "Vitorvicentevalente"
- ]
- },
- "cite_article_desc": "[[Special:Cite|Página especial]] que produz uma citação de qualquer outra página na wiki (em vários formatos) e adiciona uma ligação na barra de ferramentas",
- "cite_article_link": "Citar esta página",
- "tooltip-cite-article": "Informação sobre como citar esta página",
- "cite": "Citar",
- "cite_page": "Página:",
- "cite_submit": "Citar"
-}
diff --git a/extensions/Cite/i18n/special/qqq.json b/extensions/Cite/i18n/special/qqq.json
deleted file mode 100644
index ab78fbf6..00000000
--- a/extensions/Cite/i18n/special/qqq.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Jon Harald Søby",
- "Lloffiwr",
- "Shirayuki",
- "Siddhartha Ghai",
- "Siebrand",
- "Tgr",
- "Umherirrender"
- ]
- },
- "cite_article_desc": "{{desc|name=Special Cite|url=http://www.mediawiki.org/wiki/Extension:Cite/Special:Cite.php}}",
- "cite_article_link": "Text of link in toolbox\n\nSee also:\n* {{msg-mw|Cite article link}}\n* {{msg-mw|Accesskey-cite-article}}\n* {{msg-mw|Tooltip-cite-article}}",
- "tooltip-cite-article": "Used as tooltip for the link {{msg-mw|Cite article link}}.\n\nSee also:\n* {{msg-mw|Cite article link}}\n* {{msg-mw|Accesskey-cite-article}}\n* {{msg-mw|Tooltip-cite-article}}",
- "accesskey-cite-article": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Cite article link}}\n* {{msg-mw|Accesskey-cite-article}}\n* {{msg-mw|Tooltip-cite-article}}",
- "cite": "{{doc-special|Cite|unlisted=1}}\n{{Identical|Cite}}",
- "cite-summary": "{{notranslate}}",
- "cite_page": "{{Identical|Page}}",
- "cite_submit": "{{Identical|Cite}}",
- "cite_text": "Refers to {{msg-mw|Sitesubtitle}}.\n\n* This message is the entire text for the page Special:Cite\n* Any wikilinks in this message point to pages on the wiki, so they may be translated.\n* Do not translate magic words like CURRENTYEAR, SITENAME etc.\n* Do not translate the parameter names (author, title etc.) for BibTeX entries.\n* Do not translate the div class plainlinks mw-specialcite-styles."
-}
diff --git a/extensions/Cite/i18n/special/qu.json b/extensions/Cite/i18n/special/qu.json
deleted file mode 100644
index 04648643..00000000
--- a/extensions/Cite/i18n/special/qu.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "AlimanRuna"
- ]
- },
- "cite_article_desc": "[[Special:Cite|Pukyumanta willanapaq]] sapaq p'anqatam llamk'ana t'asrapi t'inkitapas yapan",
- "cite_article_link": "Kay qillqamanta willay",
- "tooltip-cite-article": "Ima hinam kay p'anqamanta willay",
- "cite": "Qillqamanta willay",
- "cite_page": "P'anqa:",
- "cite_submit": "Qillqamanta willay"
-}
diff --git a/extensions/Cite/i18n/special/rm.json b/extensions/Cite/i18n/special/rm.json
deleted file mode 100644
index fba3f39d..00000000
--- a/extensions/Cite/i18n/special/rm.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kazu89"
- ]
- },
- "cite_article_link": "Citar questa pagina",
- "cite_page": "Pagina:"
-}
diff --git a/extensions/Cite/i18n/special/rmy.json b/extensions/Cite/i18n/special/rmy.json
deleted file mode 100644
index 2fe035ff..00000000
--- a/extensions/Cite/i18n/special/rmy.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Desiphral"
- ]
- },
- "cite_article_link": "Prinjardo phandipen ko lekh",
- "cite": "Kana trebul phandipen",
- "cite_submit": "Ja"
-}
diff --git a/extensions/Cite/i18n/special/ro.json b/extensions/Cite/i18n/special/ro.json
deleted file mode 100644
index bc67cad4..00000000
--- a/extensions/Cite/i18n/special/ro.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Danutz",
- "Emily",
- "Firilacroco",
- "KlaudiuMihaila",
- "Mihai",
- "Minisarm",
- "Stelistcristi"
- ]
- },
- "cite_article_desc": "Adaugă o pagină specială de [[Special:Cite|citare]] și o legătură în trusa de unelte",
- "cite_article_link": "Citează acest articol",
- "tooltip-cite-article": "Informații cu privire la modul de citare a acestei pagini",
- "cite": "Citare",
- "cite_page": "Pagină:",
- "cite_submit": "Deschide informații",
- "cite_text": "__NOTOC__ \n<div class=\"mw-specialcite-bibliographic\">\n== Detalii bibliografice pentru {{FULLPAGENAME}} == \n* Numele paginii: {{FULLPAGENAME}} \n* Autorul: contribuitorii {{SITENAME}} \n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Data ultimei revizuiri: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data preluării: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation> \n* Legătură permanentă: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID-ul versiunii paginii: {{REVISIONID}}\n\n</div> \n<div class=\"plainlinks mw-specialcite-styles\">\n== Stiluri de citare pentru {{FULLPAGENAME}} == \n\n=== Stilul APA === \n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Preluat la <citation>{{CURRENTTIME}} EET, {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTYEAR}}</citation> de la {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Stilul MLA === \n„{{FULLPAGENAME}}.” ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;. \n\n=== Stilul MHRA === \nContribuitorii {{SITENAME}}, „{{FULLPAGENAME}}”, ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accesat la <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== Stilul Chicago === \nContribuitorii {{SITENAME}} , „{{FULLPAGENAME}},” ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accesat la <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). \n\n=== Stilul CBE/CSE === \nContribuitorii {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citat în <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibil la: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. \n\n=== Stilul Bluebook === \n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ultima vizită la <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). \n\n=== Intrare [[BibTeX]] === \n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accesat la <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nCând se folosește în pachetul [[LaTeX]] expresia url (<code>\\usepackage{url}</code> undeva în preambul) care trebuie să afișeze adrese mai frumos aranjate, următoarea variantă poate fi preferată: \n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accesat la <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing \"Citation styles\" div-->"
-}
diff --git a/extensions/Cite/i18n/special/roa-tara.json b/extensions/Cite/i18n/special/roa-tara.json
deleted file mode 100644
index 2f9e40f6..00000000
--- a/extensions/Cite/i18n/special/roa-tara.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Joetaras"
- ]
- },
- "cite_article_desc": "Aggiunge 'na pàgena speciele de [[Special:Cite|citaziune]] e collegamende a scatele de le struminde",
- "cite_article_link": "Cite sta pàgene",
- "tooltip-cite-article": "'Mbormaziune sus a cumme se cite sta pàgene",
- "cite": "Cite",
- "cite_page": "Pàgene:",
- "cite_submit": "Cite",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Dettglie bibbliografece pe {{FULLPAGENAME}} ==\n\n* Nome d'a pàgene: {{FULLPAGENAME}}\n* Autore: {{SITENAME}} condrebbutore\n* Pubblecatore: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Sciurne de l'urtema revisione: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date recuperate: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL Permanende: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID d'a versione d'a pàgene: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Stile de citaziune pe {{FULLPAGENAME}} ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Pigghiate <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> da {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Stile MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Stile MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Stile Chicago]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Stile CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Stile Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Endrate [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nQuanne ause 'a URL d'u pacchette [[LaTeX]] (<code>\\usepackage{url}</code> da quaccehparte jndr'à 'u preambole) 'u quale serve pe dà 'nu formate megghie a le indirizze web, le seguende sonde le preferite:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ru.json b/extensions/Cite/i18n/special/ru.json
deleted file mode 100644
index 9f1e5aff..00000000
--- a/extensions/Cite/i18n/special/ru.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Huuchin",
- "Kaganer",
- "Александр Сигачёв",
- "Ильнар"
- ]
- },
- "cite_article_desc": "Добавляет служебную страницу [[Special:Cite|цитирования]] и ссылку в инструментах",
- "cite_article_link": "Цитировать страницу",
- "tooltip-cite-article": "Информация о том, как цитировать эту страницу",
- "cite": "Библиографические ссылки на статью",
- "cite_page": "Страница:",
- "cite_submit": "Оформить ссылки",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Библиографические данные статьи {{FULLPAGENAME}} ==\n\n* Статья: {{FULLPAGENAME}}\n* Автор: {{SITENAME}} авторы\n* Опубликовано: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Дата последнего изменения: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Дата загрузки: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Постоянная ссылка: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Идентификатор версии страницы: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Варианты оформления ссылок на статью «{{FULLPAGENAME}}» ==\n\n=== Стиль по [http://protect.gost.ru/document.aspx?control=7&id=173511 ГОСТ 7.0.5—2008] (библиографическая ссылка) ===\n{{FULLPAGENAME}} // {{SITENAME}}. [{{REVISIONYEAR}}—{{REVISIONYEAR}}]. Дата обновления: {{#time:d.m.Y|{{REVISIONTIMESTAMP}}}}. URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (дата обращения: {{#time:d.m.Y|{{LOCALTIMESTAMP}}}}).\n<div style=\"font-size:smaller; padding-left:2.5em\">\n''Примечание:''\n* Первое из двух обозначений в квадратных скобках — это год ''создания'' страницы, второе — год ''последнего изменения'' страницы. К сожалению, движок [[MediaWiki]] в настоящее время не позволяет автоматически вставить год ''создания'' в ссылку (сейчас там вместо него также стоит год последнего редактирования). Посмотрите год создания страницы в [{{canonicalurl:{{FULLPAGENAME}}|action=history}} истории правок] и замените эту цифру.\n* ''Дата обращения'' в формате ДД.ММ.ГГГГ должна быть сегодняшней. К сожалению, движок MediaWiki из-за кэширования ошибочно показывает не текущую дату, а дату последнего изменения страницы.\n</div>\n\n</div>\n\n=== Стиль по [[ГОСТ 7.1|ГОСТ 7.1—2003]] и [[ГОСТ 7.82|ГОСТ 7.82—2001]] (сокращённая библиографическая запись) ===\n{{FULLPAGENAME}} [Электронный ресурс] : {{int:Tagline}} : Версия {{REVISIONID}}, сохранённая в {{CURRENTTIME}} UTC {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} / Авторы Википедии // {{SITENAME}}, {{int:sitesubtitle}}. — Электрон. дан. — Сан-Франциско: Фонд Викимедиа, {{CURRENTYEAR}}. — Режим доступа: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA style|Стиль APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Стиль MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Стиль MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Чикагский стиль]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Стиль CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Запись в [[BibTeX]] ===\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nПри использовании [[LaTeX]]-пакета url для более наглядного представления веб-адресов (<code>\\usepackage{url}</code> в преамбуле), вероятно, лучше будет указать:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/rue.json b/extensions/Cite/i18n/special/rue.json
deleted file mode 100644
index a67a8251..00000000
--- a/extensions/Cite/i18n/special/rue.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Gazeb"
- ]
- },
- "cite_article_desc": "Придасть шпеціалну сторінку [[Special:Cite|Цітації]] і одказ в понуцї інштрументів",
- "cite_article_link": "Цітовати сторінку",
- "tooltip-cite-article": "Інформації о тім, як цітовати тоту сторінку",
- "cite": "Цітованя",
- "cite_page": "Сторінка:",
- "cite_submit": "Цітовати",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Бібліоґрафічны детайлы к сторінцї {{FULLPAGENAME}} ==\n\n* Назва сторінкы: {{FULLPAGENAME}}\n* Автор: Приспівателї {{grammar:2sg|{{SITENAME}}}}\n* Выдаватель: ''{{MediaWiki:Sitesubtitle}}''.\n* Датум остатнёй управы: {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Датум перевзятя: <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Тырвалый одказ: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Ідентіфікація ревізії сторінкы: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Способы цітованя сторінкы {{FULLPAGENAME}} ==\n\n=== ISO 690-2 (1)===\nПриспівателї {{grammar:2sg|{{SITENAME}}}},'' {{FULLPAGENAME}}'' [online], {{int:sitesubtitle}}, c{{CURRENTYEAR}}, \nДатум остатнёй ревізії {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC, \n[цітоване <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\n&lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; \n\n=== ISO 690-2 (2)===\n''{{int:sitesubtitle}}: {{FULLPAGENAME}}'' [online]. c{{CURRENTYEAR}} [цітоване <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]. Доступный з WWW: &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; \n\n=== APA ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}). ''{{int:sitesubtitle}}''. Здобыто <citation>{{CURRENTTIME}}, {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation> з {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA ===\n„{{FULLPAGENAME}}.“ ''{{int:sitesubtitle}}''. {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA ===\nПриспівателї {{grammar:2sg|{{SITENAME}}}}, '{{FULLPAGENAME}}', ''{{int:sitesubtitle}},'' {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [здобыто <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\n\n=== Chicago ===\nПриспівателї {{grammar:2sg|{{SITENAME}}}}, „{{FULLPAGENAME}},“ ''{{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (здобыто <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>).\n\n=== CBE/CSE ===\nПриспівателї {{grammar:2sg|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{int:sitesubtitle}}; {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]. Доступне на: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (остатнїм разом навщівлено <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; навщівлено <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\"\n }\n\nПід час хоснованя [[LaTeX]]-ового пакунка url (даґде на початку документа є написано <code>\\usepackage{url}</code>), котрый дакус лїпше форматує вебовы адресы, можете преферовати наступну верзію:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; навщівлено <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/rup.json b/extensions/Cite/i18n/special/rup.json
deleted file mode 100644
index f21a874e..00000000
--- a/extensions/Cite/i18n/special/rup.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "D'AroemenenZullenNiVergaan"
- ]
- },
- "cite_article_link": "Bagâ articlu aestu ca citatu"
-}
diff --git a/extensions/Cite/i18n/special/sa.json b/extensions/Cite/i18n/special/sa.json
deleted file mode 100644
index 0bac94d8..00000000
--- a/extensions/Cite/i18n/special/sa.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ansumang",
- "Shubha"
- ]
- },
- "cite_article_desc": "[[Special:Cite|बाह्याधारैः]] युक्तं किञ्चन विशेषपृष्ठम् उपकरणपेटिकानुबन्धं च योजयति",
- "cite_article_link": "अस्य पृष्ठस्य उल्लेखः क्रियताम्",
- "tooltip-cite-article": "अस्य पृष्ठस्य उल्लेखः कथमिति विवरणम्",
- "cite": "उदाहरति",
- "cite_page": "पृष्ठ:",
- "cite_submit": "उदाहरति",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}} इत्यस्य आधारग्नन्थविवरणम् ==\n\n* पृष्ठनाम : {{FULLPAGENAME}}\n* लेखकः: {{SITENAME}} योगदातारः\n* प्रकाशकः: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* अन्तिमावृत्तेः दिनाङ्कः: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* पुनः प्राप्तस्य दिनाङ्कः: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* शाश्वतं URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* पृष्ठावृत्तेः ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}}इत्यस्य आधारविन्यासाः ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] प्रवेशः ===\n\n @misc{ wiki:xxx,\n ग्रन्थकर्ता = \"{{SITENAME}}\",\n शीर्षकम् = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n वर्षम् = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n टिप्पणी = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[LaTeX]] अस्य उपयोगावसरे package url (<code>\\usepackage{url}</code> somewhere in the preamble) यच्च समीचीनतया प्रारूपितान् जालसङ्केतान् यच्छति, अधोनिर्दिष्टम् एष्टुं शक्यम्:\n\n @misc{ wiki:xxx,\n ग्रन्थकर्ता = \"{{SITENAME}}\",\n शीर्षकम् = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n वर्षम् = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n टिप्पणी = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/sah.json b/extensions/Cite/i18n/special/sah.json
deleted file mode 100644
index 419e0f26..00000000
--- a/extensions/Cite/i18n/special/sah.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "HalanTul"
- ]
- },
- "cite_article_desc": "Аналлаах [[Special:Cite|быһа тардыы]] сирэйин уонна үнүстүрүмүөннэргэ ыйынньык эбэн биэрэр",
- "cite_article_link": "Сирэйи цитируйдааһын",
- "tooltip-cite-article": "Бу сирэйи хайдах цитируйдуур туһунан",
- "cite": "Цитата",
- "cite_page": "Сирэй:",
- "cite_submit": "Цитаата"
-}
diff --git a/extensions/Cite/i18n/special/scn.json b/extensions/Cite/i18n/special/scn.json
deleted file mode 100644
index 67cf5712..00000000
--- a/extensions/Cite/i18n/special/scn.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Santu"
- ]
- },
- "cite_article_desc": "Junci na pàggina spiciali pi li [[Special:Cite|cosi di muntuari]] e nu lijami ntê strumenti",
- "cite_article_link": "Muntùa sta pàggina",
- "cite": "Muntuazzioni",
- "cite_page": "Pàggina di muntari",
- "cite_submit": "Cria la cosa di muntuari"
-}
diff --git a/extensions/Cite/i18n/special/sd.json b/extensions/Cite/i18n/special/sd.json
deleted file mode 100644
index 8c6b0bb4..00000000
--- a/extensions/Cite/i18n/special/sd.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "@metadata": [],
- "cite": "حواليو"
-}
diff --git a/extensions/Cite/i18n/special/sgs.json b/extensions/Cite/i18n/special/sgs.json
deleted file mode 100644
index f99954a1..00000000
--- a/extensions/Cite/i18n/special/sgs.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Hugo.arg"
- ]
- },
- "cite": "Citoutė",
- "cite_page": "Poslapis:"
-}
diff --git a/extensions/Cite/i18n/special/sh.json b/extensions/Cite/i18n/special/sh.json
deleted file mode 100644
index ee6f11f3..00000000
--- a/extensions/Cite/i18n/special/sh.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kolega2357"
- ]
- },
- "cite_article_link": "Citiraj ovaj članak",
- "cite": "Citiraj",
- "cite_page": "Stranica:",
- "cite_submit": "Citiraj - Цитирај"
-}
diff --git a/extensions/Cite/i18n/special/si.json b/extensions/Cite/i18n/special/si.json
deleted file mode 100644
index d3f63805..00000000
--- a/extensions/Cite/i18n/special/si.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Budhajeewa",
- "නන්දිමිතුරු"
- ]
- },
- "cite_article_desc": "[[Special:Cite|උපහරණ]] විශේෂ පිටුවක් හා මෙවලම්ගොන්න සබැඳියක් එක්කරයි",
- "cite_article_link": "මෙම පිටුව උපන්‍යාස කරන්න",
- "tooltip-cite-article": "මෙම පිටුව උපුටා දක්වන්නේ කෙසේද යන්න පිළිබඳ තොරතුරු.",
- "cite": "උපන්‍යාසය",
- "cite_page": "පිටුව:",
- "cite_submit": "උපන්‍යාසය"
-}
diff --git a/extensions/Cite/i18n/special/sk.json b/extensions/Cite/i18n/special/sk.json
deleted file mode 100644
index 535d05f5..00000000
--- a/extensions/Cite/i18n/special/sk.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Helix84",
- "Martin Kozák"
- ]
- },
- "cite_article_desc": "Pridáva špeciálnu stránku [[Special:Cite|Citovať]] a odkaz v nástrojoch",
- "cite_article_link": "Citovať túto stránku",
- "tooltip-cite-article": "Ako citovať túto stránku",
- "cite": "Citovať",
- "cite_page": "Stránka:",
- "cite_submit": "Citovať",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografické podrobnosti pre článok {{FULLPAGENAME}} ==\n* Názov stránky: {{FULLPAGENAME}}\n* Autor: prispievatelia {{SITENAME}}\n* Vydavateľ: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Dátum poslednej revízie: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Dátum získania: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanentný odkaz: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID verzie stránky: {{REVISIONID}}\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Štýly citácie pre článok {{FULLPAGENAME}} ==\n=== [[:en:APA style|štýl APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Získané <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> z {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:The MLA style manual|štýl MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\nprispievatelia {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[:en:The Chicago Manual of Style|štýl Chicago]] ===\nprispievatelia {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (prístup <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[:en:Council of Science Editors|štýl CBE/CSE]] ===\nprispievatelia {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Dostupné na: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:Bluebook|štýl Bluebook]] ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (posledná návšteva <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== záznam [[:en:BibTeX|BibTeX]] ===\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n rok = \"{{CURRENTYEAR}}\", url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n poznámka = \"[Online; prístup <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nPri použití balíka url v [[LaTeX]]e (<code>\\usepackage{url}</code> niekde v úvode), čo dá oveľa krajšie formátované webové adresy, preferuje sa nasledovné:\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n názov = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n rok = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n poznámka = \"[Online; prístup <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\" \n }\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/sl.json b/extensions/Cite/i18n/special/sl.json
deleted file mode 100644
index 009873c8..00000000
--- a/extensions/Cite/i18n/special/sl.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dbc334",
- "Smihael"
- ]
- },
- "cite_article_desc": "Doda [[Special:Cite|posebno stran za navedbo vira]] in povezavo v orodno vrstico",
- "cite_article_link": "Navedba strani",
- "tooltip-cite-article": "Informacije o tem, kako navajati to stran",
- "cite": "Navedi",
- "cite_page": "Stran:",
- "cite_submit": "Navedi",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografski podatki za {{FULLPAGENAME}} ==\n\n* Naslov strani: {{FULLPAGENAME}}\n* Avtor: sodelavci {{GRAMMAR:rodilnik|{{SITENAME}}}}\n* Založnik: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Datum zadnje redakcije: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Datum pridobitve: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Trajni URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID različice strani: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Slog navajanja za {{FULLPAGENAME}} ==\n\n=== [[Slog APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Pridobljeno <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> iz {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Priročnik sloga MLA|Slog MLA]] ===\n»{{FULLPAGENAME}}.« ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Slogovni vodnik MHRA|Slog MHRA]] ===\nSodelavci {{GRAMMAR:rodilnik|{{SITENAME}}}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [pridobljeno <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Slogovni priročnik Chicago|Slog Chicago]] ===\nSodelavci {{GRAMMAR:rodilnik|{{SITENAME}}}}, »{{FULLPAGENAME}},« ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (pridobljeno <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Svet urednikov v znanosti|Slog CBE/CSE]] ===\nSodelavci {{GRAMMAR:rodilnik|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [navedeno <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Dostopno na:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Slog Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (zadnjič obiskano <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Vnos [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Na spletu; pridobljeno <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nPri uporabi paketa [[LaTeX]] url (<code>\\usepackage{url}</code> nekje v uvodu), kar da precej lepše oblikovane spletne naslove, vam bo morda bolj ustrezalo naslednje:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Na spletu; pridobljeno <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/sma.json b/extensions/Cite/i18n/special/sma.json
deleted file mode 100644
index a9e5f7a2..00000000
--- a/extensions/Cite/i18n/special/sma.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "M.M.S."
- ]
- },
- "cite_page": "Bielie:"
-}
diff --git a/extensions/Cite/i18n/special/sn.json b/extensions/Cite/i18n/special/sn.json
deleted file mode 100644
index 92c636d6..00000000
--- a/extensions/Cite/i18n/special/sn.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "Ita cite nyaya iyi"
-}
diff --git a/extensions/Cite/i18n/special/so.json b/extensions/Cite/i18n/special/so.json
deleted file mode 100644
index 052b925a..00000000
--- a/extensions/Cite/i18n/special/so.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Abshirdheere"
- ]
- },
- "cite_article_desc": "Ku dar bogga [[Special:Cite|xigashada]] gaar ahaan bogga qalabka shaqada",
- "cite_article_link": "Boggaan soo xigo",
- "tooltip-cite-article": "Macluumaad ku saabsan habka soo xigashada ee bogga",
- "cite": "Soo xigasho",
- "cite_page": "Bogga:",
- "cite_submit": "Soo xigasho",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Faahfaahin ku saabsan raadraaca ee {{FULLPAGENAME}} ==\n\n* Magaca bogga: {{FULLPAGENAME}}\n* Qoraha: {{SITENAME}} contributors\n* Faafiyaha: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Date of last revision: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tariikhdii ugu dambaysay ee dib u eegista: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL joogta ah: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID nuqulka bogga: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Citation styles for {{FULLPAGENAME}} ==\n\n=== [[Hannaanka xigashada]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n Fiira gaar ah = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nMarkaad adeegsanayso [[LaTeX]] package url (<code>\\usepackage{url}</code> meel kastaba) kaasoo samayn kara siinta canaawiin web lagu kabay si wanaagsan, kan xiga waxaa laga yaabaa in uu ka wanaagsanaado:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n Fiira gaar ah = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/sq.json b/extensions/Cite/i18n/special/sq.json
deleted file mode 100644
index 8f445708..00000000
--- a/extensions/Cite/i18n/special/sq.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Olsi"
- ]
- },
- "cite_article_desc": "Shton një faqe speciale [[Special:Cite|citimi]] dhe një lidhje veglash.",
- "cite_article_link": "Cito artikullin",
- "tooltip-cite-article": "Informacion mbi mënyrën e citimit të kësaj faqeje",
- "cite": "Citate",
- "cite_page": "Faqja:",
- "cite_submit": "Citoje",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Të dhënat bibliografike për «{{FULLPAGENAME}}» ==\n* Emri i faqes: {{FULLPAGENAME}}\n* Autori: Redaktorët e {{SITENAME}}-s\n* Publikuesi: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data e versionit të fundit: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* E marrë më: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Lidhja e përhershme: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Nr i versionit të faqes: {{REVISIONID}}\n</div>\n\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Stile të ndryshme citimi për «{{FULLPAGENAME}}» ==\n\n=== [[Stili citimit APA|APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Stili citimit MLA|MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Stili citimit MHRA|MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Stili i citimit Chicago|Chicago]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Stili i citimit CBE/CSE|CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Stili i citimit Bluebook|Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Stili i citimit BibTeX|BibTeX]] ===\n@misc{ wiki:xxx,\n\tauthor = \"{{SITENAME}}\",\n\ttitle = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n\tyear = \"{{CURRENTYEAR}}\",\n\turl = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n\tnote = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n} \n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may preferred:\n\n@misc{ wiki:xxx,\n\tauthor = \"{{SITENAME}}\",\n\ttitle = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n\tyear = \"{{CURRENTYEAR}}\",\n\turl = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n\tnote = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n}\n</div><!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/sr-ec.json b/extensions/Cite/i18n/special/sr-ec.json
deleted file mode 100644
index e69afbbc..00000000
--- a/extensions/Cite/i18n/special/sr-ec.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Milicevic01",
- "Millosh",
- "Rancher",
- "Sasa Stefanovic",
- "Жељко Тодоровић",
- "Михајло Анђелковић"
- ]
- },
- "cite_article_desc": "Додаје посебну страницу за [[Special:Cite|цитирање]] и везу с алаткама",
- "cite_article_link": "Цитирај ову страницу",
- "tooltip-cite-article": "Информације о томе како цитирати ову страну",
- "cite": "Цитирање",
- "cite_page": "Страница:",
- "cite_submit": "Цитирај",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Библиографски детаљи за страну {{FULLPAGENAME}} ==\n\n* Назив стране: {{FULLPAGENAME}} \n* Аутор: {{SITENAME}} сарадници\n* Издавач: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Датум последње ревизије: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Датум узимања: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Стални URL: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID верзије стране: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Стилови цитирања за страну {{FULLPAGENAME}} ==\n\n=== [[APA style|APA стил]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Узето <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> од {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA стил]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA стил]] ===\nВикипедијини сарадници, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [приступљено <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Чикаго стил]] ===\nВикипедијини сарадници, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (приступљено <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE стил]] ===\nВикипедијини сарадници. {{FULLPAGENAME}} [Интернет]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [цитирано <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Доступно са: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook стил]] ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (последња посета <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] унос ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nКада користите [[LaTeX]] пакет url (<code>\\usepackage{url}</code> негде у преамбули) који тежи да да далеко лепше форматирану адресу, следеће је можда боље:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div><!--cerrando div para \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/sr-el.json b/extensions/Cite/i18n/special/sr-el.json
deleted file mode 100644
index ad4d6d73..00000000
--- a/extensions/Cite/i18n/special/sr-el.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Liangent",
- "Michaello",
- "Milicevic01",
- "Жељко Тодоровић"
- ]
- },
- "cite_article_desc": "Dodaje specijalnu stranu za [[Special:Cite|citiranje]] i vezu ka oruđima.",
- "cite_article_link": "Citiraj ovu stranicu",
- "tooltip-cite-article": "Informacije o tome kako citirati ovu stranu",
- "cite": "Citiranje",
- "cite_page": "Stranica:",
- "cite_submit": "Citiraj",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografski detalji za stranu {{FULLPAGENAME}} ==\n\n* Naziv strane: {{FULLPAGENAME}} \n* Autor: {{SITENAME}} saradnici\n* Izdavač: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Datum poslednje revizije: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Datum uzimanja: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Stalni URL: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID verzije strane: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Stilovi citiranja za stranu {{FULLPAGENAME}} ==\n\n=== [[APA style|APA stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Uzeto <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> od {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA stil]] ===\nVikipedijini saradnici, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [pristupljeno <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Čikago stil]] ===\nVikipedijini saradnici, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (pristupljeno <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE stil]] ===\nVikipedijini saradnici. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citirano <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Dostupno sa: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook stil]] ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (poslednja poseta <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] unos ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKada koristite [[LaTeX]] paket url (<code>\\usepackage{url}</code> negde u preambuli) koji teži da da daleko lepše formatiranu adresu, sledeće je možda bolje:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div><!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/stq.json b/extensions/Cite/i18n/special/stq.json
deleted file mode 100644
index 222c6e73..00000000
--- a/extensions/Cite/i18n/special/stq.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Pyt"
- ]
- },
- "cite_article_desc": "Föiget ju [[Special:Cite|Zitierhilfe]]-Spezioalsiede un n Link in dän Kasten Reewen bietou",
- "cite_article_link": "Disse Siede zitierje",
- "cite": "Zitierhälpe",
- "cite_page": "Siede:",
- "cite_submit": "anwiese"
-}
diff --git a/extensions/Cite/i18n/special/su.json b/extensions/Cite/i18n/special/su.json
deleted file mode 100644
index 52114593..00000000
--- a/extensions/Cite/i18n/special/su.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kandar"
- ]
- },
- "cite_article_desc": "Nambahkeun kaca husus [[Special:Cite|cutatan]] & tumbu toolbox",
- "cite_article_link": "Cutat kaca ieu",
- "tooltip-cite-article": "Émbaran ngeunaan cara ngarujuk ieu kaca",
- "cite": "Cutat",
- "cite_page": "Kaca:",
- "cite_submit": "Cutat"
-}
diff --git a/extensions/Cite/i18n/special/sv.json b/extensions/Cite/i18n/special/sv.json
deleted file mode 100644
index ac47ab59..00000000
--- a/extensions/Cite/i18n/special/sv.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Lejonel",
- "Per",
- "Sannab",
- "WikiPhoenix"
- ]
- },
- "cite_article_desc": "Lägger till en specialsida för [[Special:Cite|källhänvisning]] och en länk i verktygslådan",
- "cite_article_link": "Citera denna artikel",
- "tooltip-cite-article": "Information om hur denna sida kan citeras",
- "cite": "Citera",
- "cite_page": "Sida:",
- "cite_submit": "Citera",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Bibliografiska detaljer för {{FULLPAGENAME}} ==\n\n* Sidans namn: {{FULLPAGENAME}}\n* Författare: {{SITENAME}} contributors\n* Utgivare: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Datum för senaste version: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Datum mottaget: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanent adress: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Sidans version-ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Referensstilar för {{FULLPAGENAME}} ==\n\n=== [[APA style|APA-stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Hämtat <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> från {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stil]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-stil]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stil]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-stil]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-uppslag ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; hämtades <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nNär man ska använda [[LaTeX]]-paketadressen (<code>\\usepackage{url}</code> någonstans i ingressen) som brukar ge mycket finare formaterade webbadresser, föredras följande:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; hämtades <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--avslutande div för \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/sw.json b/extensions/Cite/i18n/special/sw.json
deleted file mode 100644
index cb6be71f..00000000
--- a/extensions/Cite/i18n/special/sw.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Lloffiwr",
- "Stephenwanjau"
- ]
- },
- "cite_article_link": "Taja ukurasa huu",
- "tooltip-cite-article": "Taarifa juu ya njia ya kutaja ukurasa huu",
- "cite": "Taja",
- "cite_page": "Ukurasa:",
- "cite_submit": "Taja"
-}
diff --git a/extensions/Cite/i18n/special/sxu.json b/extensions/Cite/i18n/special/sxu.json
deleted file mode 100644
index 98cab926..00000000
--- a/extensions/Cite/i18n/special/sxu.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Thogo"
- ]
- },
- "cite_article_link": "Zidier dän ardiggl hier",
- "cite": "Zidierhilfe",
- "cite_submit": "Zidierhilfe"
-}
diff --git a/extensions/Cite/i18n/special/szl.json b/extensions/Cite/i18n/special/szl.json
deleted file mode 100644
index 50f7026a..00000000
--- a/extensions/Cite/i18n/special/szl.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Herr Kriss",
- "Timpul"
- ]
- },
- "cite_article_link": "Cytuj ta zajta",
- "cite_page": "Zajta:"
-}
diff --git a/extensions/Cite/i18n/special/ta.json b/extensions/Cite/i18n/special/ta.json
deleted file mode 100644
index 9e330e32..00000000
--- a/extensions/Cite/i18n/special/ta.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Shanmugamp7",
- "TRYPPN",
- "Trengarasu"
- ]
- },
- "cite_article_desc": "கருவிப் பெட்டியில் [[Special:Cite|மேற்கோள்]] காடுவதற்கான இணைப்பை ஏற்படுத்துகிறது",
- "cite_article_link": "இப்பக்கத்தை மேற்கோள் காட்டு",
- "tooltip-cite-article": "இப்பக்கத்தை எப்படி மேற்கோளாகக் காட்டுவது என்பது பற்றிய விவரம்",
- "cite": "மேற்கோள் காட்டு",
- "cite_page": "பக்கம்:",
- "cite_submit": "மேற்கோள் காட்டு"
-}
diff --git a/extensions/Cite/i18n/special/te.json b/extensions/Cite/i18n/special/te.json
deleted file mode 100644
index ac106d49..00000000
--- a/extensions/Cite/i18n/special/te.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Mpradeep",
- "Veeven"
- ]
- },
- "cite_article_desc": "[[Special:Cite|ఉదహరింపు]] అనే ప్రత్యేక పేజీని & పరికర పెట్టె లింకునీ చేరుస్తుంది",
- "cite_article_link": "ఈ వ్యాసాన్ని ఉదహరించండి",
- "tooltip-cite-article": "ఈ పేజీని ఎలా ఉదహరించాలి అన్నదానిపై సమాచారం",
- "cite": "ఉదహరించు",
- "cite_page": "పేజీ:",
- "cite_submit": "ఉదహరించు"
-}
diff --git a/extensions/Cite/i18n/special/tet.json b/extensions/Cite/i18n/special/tet.json
deleted file mode 100644
index bafd644f..00000000
--- a/extensions/Cite/i18n/special/tet.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "MF-Warburg"
- ]
- },
- "cite_article_desc": "Kria pájina espesíal ba [[Special:Cite|sitasaun]] ho ligasaun iha kaixa besi nian",
- "cite_article_link": "Sita pájina ne'e",
- "tooltip-cite-article": "Informasaun kona-ba sita pájina ne'e",
- "cite": "Sita",
- "cite_page": "Pájina:",
- "cite_submit": "Sita"
-}
diff --git a/extensions/Cite/i18n/special/tg-cyrl.json b/extensions/Cite/i18n/special/tg-cyrl.json
deleted file mode 100644
index cd48227b..00000000
--- a/extensions/Cite/i18n/special/tg-cyrl.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ibrahim"
- ]
- },
- "cite_article_desc": "Саҳифаи вижае барои [[Special:Cite|ёдкард]] изофа мекунад ва пайванде ба ҷаъбаи абзор меафзояд",
- "cite_article_link": "Ёд кардани пайванди ин мақола",
- "cite": "Ёд кардани ин мақола",
- "cite_page": "Саҳифа:",
- "cite_submit": "Ёд кардан"
-}
diff --git a/extensions/Cite/i18n/special/tg-latn.json b/extensions/Cite/i18n/special/tg-latn.json
deleted file mode 100644
index 3a07a646..00000000
--- a/extensions/Cite/i18n/special/tg-latn.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Liangent"
- ]
- },
- "cite_article_desc": "Sahifai viƶae baroi [[Special:Cite|jodkard]] izofa mekunad va pajvande ba ça'bai abzor meafzojad",
- "cite_article_link": "Jod kardani pajvandi in maqola",
- "cite": "Jod kardani in maqola",
- "cite_page": "Sahifa:",
- "cite_submit": "Jod kardan"
-}
diff --git a/extensions/Cite/i18n/special/th.json b/extensions/Cite/i18n/special/th.json
deleted file mode 100644
index 85cc35e5..00000000
--- a/extensions/Cite/i18n/special/th.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Octahedron80",
- "Passawuth"
- ]
- },
- "cite_article_desc": "เพิ่มหน้า[[Special:Cite|อ้างอิง]]พิเศษและลิงก์บนกล่องเครื่องมือ",
- "cite_article_link": "อ้างอิงหน้านี้",
- "tooltip-cite-article": "ข้อมูลเกี่ยวกับวิธีการอ้างอิงหน้านี้",
- "cite": "อ้างอิง",
- "cite_page": "หน้า:",
- "cite_submit": "อ้างอิง"
-}
diff --git a/extensions/Cite/i18n/special/tk.json b/extensions/Cite/i18n/special/tk.json
deleted file mode 100644
index 2a5b91ce..00000000
--- a/extensions/Cite/i18n/special/tk.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Hanberke"
- ]
- },
- "cite_article_desc": "[[Special:Cite|Sitirle]] ýörite sahypasyny we gural sandygy çykgydyny goşýar",
- "cite_article_link": "Sahypany sitirle",
- "tooltip-cite-article": "Bu sahypany nähili sitirlemelidigi hakda maglumat",
- "cite": "Sitirle",
- "cite_page": "Sahypa:",
- "cite_submit": "Sitirle"
-}
diff --git a/extensions/Cite/i18n/special/tl.json b/extensions/Cite/i18n/special/tl.json
deleted file mode 100644
index bfe6054d..00000000
--- a/extensions/Cite/i18n/special/tl.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "AnakngAraw"
- ]
- },
- "cite_article_desc": "Nagdaragdag ng isang natatanging pahinang [[Special:Cite|pampagtutukoy]] at kawing sa kahon (lalagyan) ng kagamitan",
- "cite_article_link": "Tukuyin ang pahinang ito",
- "tooltip-cite-article": "Kabatiran kung paano tutukuyin ang pahinang ito",
- "cite": "Tukuyin",
- "cite_page": "Pahina:",
- "cite_submit": "Tukuyin",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Mga detalyeng pangtalaaklatan para sa {{FULLPAGENAME}} ==\n\n* Pangalan ng pahina: {{FULLPAGENAME}}\n* May-akda: {{SITENAME}} contributors\n* Tagapaglathala: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Petsa ng huling pagbabago: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Petsa ng pagbawi: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Pamalagiang URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID ng Bersiyon ng Pahina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Mga estilo ng pagbanggit para sa {{FULLPAGENAME}} ==\n\n=== [[Estilo ng APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Nabawi noong <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Estilo ng MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Estilo ng MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [napuntahan noong <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Estilo ng Chicago]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (napuntahan noong <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estilo ng CBE/CSE]] ===\nMga tagapag-ambag sa {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [pagbanggit <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Makukuha mula sa: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estilo ng Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (huling dinalaw noong <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Lahok sa [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n may-akda = \"{{SITENAME}}\",\n pamagat = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n taon = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n tala = \"[Nasa linya; napuntahan noong <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKapag ginagamit ang pakete ng url ng [[LaTeX]] (<code>\\usepackage{url}</code> saan man sa loob ng punong-sabi) na may gawi na makapagbigay ng lalo pang may mahusay na kaanyuan na mga tirahang pangsangkalambatan, ang mga sumusunod ay maaaring mas nanaisin:\n\n @misc{ wiki:xxx,\n may-akda = \"{{SITENAME}}\",\n pamagat = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n taon = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n tala = \"[Nasa linya; napuntahan noong <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/tly.json b/extensions/Cite/i18n/special/tly.json
deleted file mode 100644
index 76fc5223..00000000
--- a/extensions/Cite/i18n/special/tly.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Гусейн"
- ]
- },
- "cite_page": "Сәһифә:"
-}
diff --git a/extensions/Cite/i18n/special/tn.json b/extensions/Cite/i18n/special/tn.json
deleted file mode 100644
index 357bd859..00000000
--- a/extensions/Cite/i18n/special/tn.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "Nopola mokwalo o"
-}
diff --git a/extensions/Cite/i18n/special/to.json b/extensions/Cite/i18n/special/to.json
deleted file mode 100644
index ff2ab7dd..00000000
--- a/extensions/Cite/i18n/special/to.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "Lau ki he kupú ni",
- "cite": "Lau ki he"
-}
diff --git a/extensions/Cite/i18n/special/tr.json b/extensions/Cite/i18n/special/tr.json
deleted file mode 100644
index 4211f5f2..00000000
--- a/extensions/Cite/i18n/special/tr.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Erkan Yilmaz",
- "Joseph",
- "Srhat",
- "Uğur Başak"
- ]
- },
- "cite_article_desc": "[[Special:Cite|Alıntı]] özel sayfa ve araç kutusu linkini ekler",
- "cite_article_link": "Sayfayı kaynak göster",
- "tooltip-cite-article": "Bu sayfanın nasıl alıntı yapılacağı hakkında bilgi",
- "cite": "Kaynak göster",
- "cite_page": "Sayfa:",
- "cite_submit": "Belirt",
- "cite_text": "__NOTOC__\n<div style=\"width: 90%; text-align: center; font-size: 85%; margin: 10px auto;\">İçindekiler: [[#APA stil|APA]] | [[#MLA stil|MLA]] | [[#MHRA stil|MHRA]] | [[#Chicago stil|Chicago]] | [[#CBE/CSE stil|CSE]] | [[#Bluebook stil|Bluebook]] | [[#BibTeX stil|BibTeX]]</div>\n\n'''NOTE:''' Most teachers and professionals do not consider encyclopedias citable reference material for most purposes. Wikipedia articles should be used for background information, and as a starting point for further research, but not as a final source for important facts.\n\nAs with any [[Vikipedi:Vikipedi kim yazar|community-built]] reference, there is a possibility for error in Wikipedia's content — please check your facts against multiple sources and read our [[Vikipedi:Genel_Bilgi_Paktı|disclaimers]] for more information.\n\n<div style=\"border: 1px solid grey; background: #E6E8FA; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== \"{{FULLPAGENAME}}\" sayfasının [[bibliyografya|bibliyografik]] detayları ==\n\n* Sayfanın adı: {{FULLPAGENAME}}\n* Yazar(lar): Vikipedi'de katkıda bulunanlar, bak [{{fullurl:{{FULLPAGENAME}}|action=history}} sayfanın geçmişi]\n* Editör: ''{{SITENAME}}, {{MedyaViki:Sitesubtitle}}''. \n* Son düzenleme tarih: {{CURRENTDAY}}. {{CURRENTMONTHNAME}}\n* Son isteme tarih: {{CURRENTYEAR}}, {{CURRENTTIME}} ([[UTC]])\n* Geçerli URL: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Sayfanın versiyon no.: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks\" style=\"border: 1px solid grey; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== \"{{FULLPAGENAME}}\" sayfanın kaynak olarak gösterim imkanları ==\n\n=== [[APA]] stil ===\nWikipedia contributors ({{CURRENTYEAR}}). {{FULLPAGENAME}}. ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA]] stil ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA]] stil ===\nWikipedia contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Chicago]] stil ===\nWikipedia contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE]] stil ===\nWikipedia contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook]] stil ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] stil ===\n\n @misc{ wiki:xxx,\n yazar(lar) = \"{{SITENAME}}\",\n başlık = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n yıl = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n not = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing \"Citation styles\" div-->\n\n<noinclude>\n[[de:MediaWiki:Cite_text]]\n[[en:MediaWiki:Cite text]]\n</noinclude>"
-}
diff --git a/extensions/Cite/i18n/special/tru.json b/extensions/Cite/i18n/special/tru.json
deleted file mode 100644
index 836a8c9a..00000000
--- a/extensions/Cite/i18n/special/tru.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ariyo"
- ]
- },
- "cite_page": "Faṭo:"
-}
diff --git a/extensions/Cite/i18n/special/ts.json b/extensions/Cite/i18n/special/ts.json
deleted file mode 100644
index 420d2bc5..00000000
--- a/extensions/Cite/i18n/special/ts.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Thuvack"
- ]
- },
- "cite_page": "Tluka:"
-}
diff --git a/extensions/Cite/i18n/special/tt-cyrl.json b/extensions/Cite/i18n/special/tt-cyrl.json
deleted file mode 100644
index 372671b3..00000000
--- a/extensions/Cite/i18n/special/tt-cyrl.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ильнар"
- ]
- },
- "cite_article_desc": "Махсус [[Special:Cite|күчермәләү]] битен һәм җиһазларга сылтамалар өсти",
- "cite_article_link": "Бу битне күчермәләү",
- "tooltip-cite-article": "Бу битне ничек күчермәләү турындагы мәгълүмат",
- "cite": "Күчермәләү",
- "cite_page": "Бит:",
- "cite_submit": "Күчермәләү"
-}
diff --git a/extensions/Cite/i18n/special/tyv.json b/extensions/Cite/i18n/special/tyv.json
deleted file mode 100644
index 1011942d..00000000
--- a/extensions/Cite/i18n/special/tyv.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Agilight"
- ]
- },
- "cite_article_link": "Арынны цитаталаар",
- "tooltip-cite-article": "Ук арынны канчалдыр цитаталаарының дугайында медээлел"
-}
diff --git a/extensions/Cite/i18n/special/tzm.json b/extensions/Cite/i18n/special/tzm.json
deleted file mode 100644
index 6844b794..00000000
--- a/extensions/Cite/i18n/special/tzm.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Tifinaghes"
- ]
- },
- "cite_page": "ⵜⴰⵙⵏⴰ:"
-}
diff --git a/extensions/Cite/i18n/special/udm.json b/extensions/Cite/i18n/special/udm.json
deleted file mode 100644
index 3c8c4141..00000000
--- a/extensions/Cite/i18n/special/udm.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "ОйЛ"
- ]
- },
- "cite_article_link": "Кызьы со статьяез цитировать кароно"
-}
diff --git a/extensions/Cite/i18n/special/ug-arab.json b/extensions/Cite/i18n/special/ug-arab.json
deleted file mode 100644
index 3c8d50c1..00000000
--- a/extensions/Cite/i18n/special/ug-arab.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Sahran"
- ]
- },
- "cite_page": "بەت:"
-}
diff --git a/extensions/Cite/i18n/special/ug-latn.json b/extensions/Cite/i18n/special/ug-latn.json
deleted file mode 100644
index ecb3f8b0..00000000
--- a/extensions/Cite/i18n/special/ug-latn.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Jose77"
- ]
- },
- "cite_article_link": "Bu maqalini ishliting",
- "cite_page": "Bet:"
-}
diff --git a/extensions/Cite/i18n/special/uk.json b/extensions/Cite/i18n/special/uk.json
deleted file mode 100644
index 0800ec64..00000000
--- a/extensions/Cite/i18n/special/uk.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ahonc",
- "Prima klasy4na",
- "Ата"
- ]
- },
- "cite_article_desc": "Додає спеціальну сторінку [[Special:Cite|цитування]] і посилання в інструментах",
- "cite_article_link": "Цитувати сторінку",
- "tooltip-cite-article": "Інформація про те, як цитувати цю сторінку",
- "cite": "Цитування",
- "cite_page": "Сторінка:",
- "cite_submit": "Процитувати",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Бібліографічні дані статті {{FULLPAGENAME}} ==\n\n* Назва: {{FULLPAGENAME}}\n* Автор: {{SITENAME}} contributors\n* Опубліковано: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Дата останньої зміни: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Дата цитування: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Постійне посилання: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID версії сторінки: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Варіанти оформлення посилань на {{FULLPAGENAME}} ==\n\n=== [[Стиль APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Цитовано <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> з {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Стиль MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Стиль MHRA]] ===\nДописувачі {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [цитовано <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Стиль Chicago]] ===\nДописувачі {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (цитовано <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Стиль CBE/CSE]] ===\nДописувачі {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Доступно з:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Стиль Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (останній перегляд <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Запис [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Онлайн; цитовано <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nПри використанні [[LaTeX]]-пакета url (<code>\\usepackage{url}</code> у преамбулі), який тяжіє до кращого форматування веб-адрес, мабуть, краще буде вказати таке:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Онлайн; цитовано <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/ur.json b/extensions/Cite/i18n/special/ur.json
deleted file mode 100644
index 539940f2..00000000
--- a/extensions/Cite/i18n/special/ur.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "مضمون کا حوالہ دیں",
- "cite": "حوالہ",
- "cite_page": "صفحہ:"
-}
diff --git a/extensions/Cite/i18n/special/uz.json b/extensions/Cite/i18n/special/uz.json
deleted file mode 100644
index d1ae3624..00000000
--- a/extensions/Cite/i18n/special/uz.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "CoderSI"
- ]
- },
- "cite_article_link": "Sahifadan matn parchasi ajratish"
-}
diff --git a/extensions/Cite/i18n/special/vec.json b/extensions/Cite/i18n/special/vec.json
deleted file mode 100644
index 394b788e..00000000
--- a/extensions/Cite/i18n/special/vec.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Candalua",
- "GatoSelvadego"
- ]
- },
- "cite_article_desc": "Zonta na pagina speciale par le [[Special:Cite|citazion]] e un colegamento nei strumenti",
- "cite_article_link": "Cita sta pagina",
- "tooltip-cite-article": "Informassion su come citar sta pagina",
- "cite": "Citazion",
- "cite_page": "Pagina da citar:",
- "cite_submit": "Crea la citazion",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Detaji bibliografisi par {{FULLPAGENAME}} ==\n\n* Titoło pàjina: {{FULLPAGENAME}}\n* Autor: contributori {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data de l'ultema modifega: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data estrasion: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID version pàjina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Stiłi citasion par {{FULLPAGENAME}} ==\n\n=== [[APA style|Stiłe APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Estratto il <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> da {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Stiłe MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Stiłe MHRA]] ===\nContributori {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accesso il <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Stiłe Chicago]] ===\nContributori {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accesso il <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Stiłe CBE/CSE]] ===\nContributori {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citato il <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibile su:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Stiłe Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ultima visita il <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accesso il <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nCuando che se dopara el pacheto [[LaTeX]] par url (<code>\\usepackage{url}</code> da calche parte inte'l preanboło) che in xenere el da indirisi web formatai in modo mejor, xe preferibiłe doparar el seguente còdexe:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accesso il <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/vep.json b/extensions/Cite/i18n/special/vep.json
deleted file mode 100644
index 069cd278..00000000
--- a/extensions/Cite/i18n/special/vep.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Triple-ADHD-AS",
- "Игорь Бродский"
- ]
- },
- "cite_article_desc": "Ližadab [[Special:Cite|citiruindan]] specialižen lehtpolen da kosketusen azegištos",
- "cite_article_link": "Citiruida nece lehtpol'",
- "tooltip-cite-article": "Informacii siš, kut pidab citiruida nece lehtpol'.",
- "cite": "Citiruind",
- "cite_page": "Lehtpol’:",
- "cite_submit": "Citiruida"
-}
diff --git a/extensions/Cite/i18n/special/vi.json b/extensions/Cite/i18n/special/vi.json
deleted file mode 100644
index 012dae68..00000000
--- a/extensions/Cite/i18n/special/vi.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Minh Nguyen",
- "Vinhtantran"
- ]
- },
- "cite_article_desc": "Thêm trang đặc biệt để [[Special:Cite|trích dẫn bài viết]] và đặt liên kết trong thanh công cụ",
- "cite_article_link": "Trích dẫn trang này",
- "tooltip-cite-article": "Hướng dẫn cách trích dẫn trang này",
- "cite": "Trích dẫn",
- "cite_page": "Trang:",
- "cite_submit": "Trích dẫn",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== Chi tiết ghi chú của {{FULLPAGENAME}} ==\n\n* Tên trang: {{FULLPAGENAME}}\n* Tác giả: {{SITENAME}} contributors\n* Nhà xuất bản: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Ngày sửa cuối: {{CURRENTDAY}} {{CURRENTMONTHNAME}} năm {{CURRENTYEAR}} lúc {{CURRENTTIME}} UTC\n* Ngày truy cập: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} năm {{CURRENTYEAR}} lúc {{CURRENTTIME}} UTC</citation>\n* URL thường trực: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Mã số phiên bản trang: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== Các văn phong ghi chú phổ biến cho {{FULLPAGENAME}} ==\n\n=== [[Văn phong APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTDAY}} {{CURRENTMONTHNAME}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Lấy vào <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> từ {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Cẩm nang Văn phong MLA|Văn phong MLA]] ===\n“{{FULLPAGENAME}}.” ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Hướng dẫn Văn phong MHRA|Văn phong MHRA]] ===\nNhững người đóng góp vào {{SITENAME}}, ‘{{FULLPAGENAME}}’, ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [truy cập ngày <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Cẩm nang Văn phong Chicago|Văn phong Chicago]] ===\nNhững người đóng góp vào {{SITENAME}}, “{{FULLPAGENAME}},” ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (truy cập ngày <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Hội đồng Chủ bút Khoa học|Văn phong CBE/CSE]] ===\nNhững người đóng góp vào {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [ghi chú ngày <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Có sẵn tại:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Văn phong Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ghé thăm lần cuối ngày <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Trực tuyến; truy cập ngày <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKhi sử dụng gói <code>url</code> của [[LaTeX]] (có <code>\\usepackage{url}</code> ở đâu đó phía đầu văn bản), gói này hay trang trí các địa chỉ Web một cách đẹp đẽ hơn, bạn có thể muốn sử dụng đoạn mã sau:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Trực tuyến; truy cập ngày <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!-- div kết thúc “plainlinks” -->"
-}
diff --git a/extensions/Cite/i18n/special/vo.json b/extensions/Cite/i18n/special/vo.json
deleted file mode 100644
index ee462020..00000000
--- a/extensions/Cite/i18n/special/vo.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Malafaya",
- "Smeira"
- ]
- },
- "cite_article_desc": "Läükon padi patik [[Special:Cite|saitama]] sa yüm ad stumem",
- "cite_article_link": "Saitön padi at",
- "cite": "Saitön",
- "cite_page": "Pad:",
- "cite_submit": "Saitön"
-}
diff --git a/extensions/Cite/i18n/special/wa.json b/extensions/Cite/i18n/special/wa.json
deleted file mode 100644
index aedfd5e9..00000000
--- a/extensions/Cite/i18n/special/wa.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Srtxg"
- ]
- },
- "cite_page": "Pådje:"
-}
diff --git a/extensions/Cite/i18n/special/wuu.json b/extensions/Cite/i18n/special/wuu.json
deleted file mode 100644
index c634e2bd..00000000
--- a/extensions/Cite/i18n/special/wuu.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "@metadata": [],
- "cite_article_link": "引用该篇文章",
- "cite": "引用",
- "cite_page": "页面:",
- "cite_submit": "引用"
-}
diff --git a/extensions/Cite/i18n/special/xal.json b/extensions/Cite/i18n/special/xal.json
deleted file mode 100644
index 368eaa51..00000000
--- a/extensions/Cite/i18n/special/xal.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Huuchin"
- ]
- },
- "cite_article_link": "Тер халхиг эшллх"
-}
diff --git a/extensions/Cite/i18n/special/yi.json b/extensions/Cite/i18n/special/yi.json
deleted file mode 100644
index 10d6d0ed..00000000
--- a/extensions/Cite/i18n/special/yi.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "פוילישער"
- ]
- },
- "cite_article_desc": "לייגט צו א [[Special:Cite|ציטיר]] באַזונדערן בלאַט און געצייגקאַסן לינק",
- "cite_article_link": "ציטירן דעם דאזיגן בלאט",
- "tooltip-cite-article": "אינפֿאָרמאַציע ווי אַזוי צו ציטירן דעם בלאַט",
- "cite": "ציטירן",
- "cite_page": "בלאט:",
- "cite_submit": "ציטירן"
-}
diff --git a/extensions/Cite/i18n/special/yo.json b/extensions/Cite/i18n/special/yo.json
deleted file mode 100644
index 938e6c14..00000000
--- a/extensions/Cite/i18n/special/yo.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Demmy"
- ]
- },
- "cite_page": "Ojúewé:"
-}
diff --git a/extensions/Cite/i18n/special/yue.json b/extensions/Cite/i18n/special/yue.json
deleted file mode 100644
index a31bb2bd..00000000
--- a/extensions/Cite/i18n/special/yue.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": [],
- "cite_article_desc": "加一個[[Special:Cite|引用]]特別頁同埋一個工具箱連結",
- "cite_article_link": "引用呢篇文",
- "cite": "引用文章",
- "cite_page": "版:",
- "cite_submit": "引用"
-}
diff --git a/extensions/Cite/i18n/special/zh-hans.json b/extensions/Cite/i18n/special/zh-hans.json
deleted file mode 100644
index 7aa6c2fa..00000000
--- a/extensions/Cite/i18n/special/zh-hans.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Hzy980512",
- "Xiaomingyan",
- "Mywood"
- ]
- },
- "cite_article_desc": "添加[[Special:Cite|引用]]特殊页面和工具箱链接",
- "cite_article_link": "引用本页",
- "tooltip-cite-article": "关于如何引用本页的信息",
- "cite": "引用",
- "cite_page": "页面:",
- "cite_submit": "引用",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}}的参考详情 ==\n\n* 页面名称:{{FULLPAGENAME}}\n* 作者:{{SITENAME}}贡献者\n* 出版者:{{SITENAME}},{{int:sitesubtitle}}。\n* 最后版本日期:{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日 {{CURRENTTIME}} UTC\n* 检索日期:<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日 {{CURRENTTIME}} UTC</citation>\n* 永久URL:{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* 页面版本ID:{{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}}的引用格式 ==\n\n=== GB7714格式 ===\n{{SITENAME}}编者.{{FULLPAGENAME}}[G/OL].{{SITENAME}},{{int:sitesubtitle}},{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}[<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}</citation>].{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== APA格式 ===\n{{FULLPAGENAME}}.({{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日).''{{SITENAME}},{{int:sitesubtitle}}''.于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}</citation>查阅自{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA格式 ===\n“{{FULLPAGENAME}}.”''{{SITENAME}},{{int:sitesubtitle}}''.{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(协调世界时).<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA格式 ===\n{{SITENAME}}编者,‘{{FULLPAGENAME}}’,''{{SITENAME}},{{int:sitesubtitle}}'',{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(协调世界时),&lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;[于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>查阅]\n\n=== 芝加哥格式 ===\n{{SITENAME}}编者,“{{FULLPAGENAME}},”''{{SITENAME}},{{int:sitesubtitle}}'',{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}(于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>查阅).\n\n=== CBE/CSE格式 ===\n{{SITENAME}}编者.{{FULLPAGENAME}}[互联网].{{SITENAME}},{{int:sitesubtitle}};{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(协调世界时)[引用于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>].可访问自:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook格式 ===\n{{FULLPAGENAME}},{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}(最新访问于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>).\n\n=== BibTeX记录 ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[在线资源;访问于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>]\"\n }\n\n使用LaTeX包装的链接(开头某处的<code>\\usepackage{url}</code>)将提供更好的网址格式,推荐选用下列格式:\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[在线资源;访问于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/special/zh-hant.json b/extensions/Cite/i18n/special/zh-hant.json
deleted file mode 100644
index 5ffa37c1..00000000
--- a/extensions/Cite/i18n/special/zh-hant.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Frankou",
- "Waihorace",
- "LNDDYL",
- "Cwlin0416"
- ]
- },
- "cite_article_desc": "提供 [[Special:Cite|引用]] 的特殊頁面及工具箱連結",
- "cite_article_link": "引用此頁面",
- "tooltip-cite-article": "關於如何引用此頁面的資訊",
- "cite": "引用",
- "cite_page": "頁面:",
- "cite_submit": "引用",
- "cite_text": "__NOTOC__\n<div class=\"mw-specialcite-bibliographic\">\n\n== {{FULLPAGENAME}} 的書目詳細資訊 ==\n\n* 頁面名稱:{{FULLPAGENAME}}\n* 作者:{{SITENAME}} contributors\n* 出版者:''{{SITENAME}}, {{int:sitesubtitle}}''.\n* 最後修訂日期: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* 檢索日期:<citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* 靜態 URL:{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* 頁面版本 ID:{{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialcite-styles\">\n\n== {{FULLPAGENAME}} 的引用格式 ==\n\n=== [[APA 格式]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA 格式]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA 格式]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago 格式]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE 格式]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook 格式]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] 條目 ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n當使用 [[LaTeX]] Package URL (<code>\\usepackage{url}</code> 於前言中) 時會以較好看的格式顯示網頁位址,較建議使用以下格式:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
-}
diff --git a/extensions/Cite/i18n/sq.json b/extensions/Cite/i18n/sq.json
new file mode 100644
index 00000000..2136f8d1
--- /dev/null
+++ b/extensions/Cite/i18n/sq.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mikullovci11",
+ "Olsi"
+ ]
+ },
+ "cite-desc": "Shton etiketa <nowiki><ref[ name=id]></nowiki> dhe <nowiki><references/></nowiki> për citime",
+ "cite_error": "Gabim referencash: $1",
+ "cite_error_ref_numeric_key": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nemri nuk mund të jetë një numër i plotë i thjeshtë. Përdorni një titull përshkrues",
+ "cite_error_ref_no_key": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nrefs pa përmbajtje duhet të kenë një emër",
+ "cite_error_ref_too_many_keys": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nemra të pavlefshëm, p.sh. shumë",
+ "cite_error_ref_no_input": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nrefs pa emër duhet të kenë përmbajtje",
+ "cite_error_references_invalid_parameters": "Etiketë <code>&lt;references&gt;</code> e pavlefshme;\nasnjë parametër nuk lejohet.\nPërdorni <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Etiketë <code>&lt;references&gt;</code> e pavlefshme;\nvetëm parametri \"group\" lejohet.\nPërdorni <code>&lt;references /&gt;</code>, ose <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Nga ran të etiketave backlink me porosi. \nPercaktoni më shumë në <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> mesazh.",
+ "cite_error_no_link_label_group": "Nga ran e etiketave lidhje me porosi për grupin \"$1\". \nPercaktoni më shumë në <nowiki> [[MediaWiki:$2]] </nowiki> mesazh.",
+ "cite_error_references_no_text": "Etiketë <code>&lt;ref&gt;</code> e pavlefshme;\nasnjë tekst nuk u dha për refs e quajtura <code>$1</code>",
+ "cite_error_included_ref": "Duke mbyllur <code>&lt;/ref&gt;</code> mungon për etiketën <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Etiketat <code>&lt;ref&gt;</code> ekzistojnë për një grup të quajtur \"$1\", por nuk u gjet etiketa korresponduese <code>&lt;references group=\"$1\"/&gt;</code>",
+ "cite_error_references_group_mismatch": "<code>&lt;ref&gt;</code> tag in <code>&lt;references&gt;</code> has conflicting group attribute \"$1\".",
+ "cite_error_references_missing_group": "<code>&lt;ref&gt;</code> etiketa e përcaktuar në <code>&lt;referenca&gt;</code> ka atribut grup \"$1\" që nuk duket në tekstin paraprak.",
+ "cite_error_references_missing_key": "<code>&lt;ref&gt;</code> etiketa me emrin \"$1\" e percaktuar ne <code>&lt;referenca&gt;</code> nuk është përdorur në tekst paraprak.",
+ "cite_error_references_no_key": "<code>&lt;ref&gt;</code> etiketa e përcaktuar në <code>&lt;referenca&gt;</code> nuk ka ndonjë atribut emër.",
+ "cite_error_empty_references_define": "<code>&lt;ref&gt;</code> etiketa e përcaktuar në <code>&lt;referenca&gt;</code> me emrin \"$1\" nuk ka përmbajtje."
+}
diff --git a/extensions/Cite/i18n/sr-ec.json b/extensions/Cite/i18n/sr-ec.json
new file mode 100644
index 00000000..1e76c907
--- /dev/null
+++ b/extensions/Cite/i18n/sr-ec.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01",
+ "Millosh",
+ "Rancher",
+ "Михајло Анђелковић"
+ ]
+ },
+ "cite-desc": "Додаје <nowiki><ref[ name=id]></nowiki> и <nowiki><references/></nowiki> ознаке за цитирање.",
+ "cite_error": "Грешка цитата: $1",
+ "cite_error_ref_numeric_key": "Лоша ознака <code>&lt;ref&gt;</code>; име не може бити једноставни интеџер. Користи описни наслов.",
+ "cite_error_ref_no_key": "Лоша ознака <code>&lt;ref&gt;</code>; ref-ови без садржаја морају имати име.",
+ "cite_error_ref_too_many_keys": "Лоша ознака <code>&lt;ref&gt;</code>; лоша имена, односно много њих.",
+ "cite_error_ref_no_input": "Лоша ознака <code>&lt;ref&gt;</code>; ref-ови без имена морају имати садржај.",
+ "cite_error_references_invalid_parameters": "Лоша ознака <code>&lt;references&gt;</code>; параметри нису дозвољени. Користи <code>&lt;references /&gt;</code>.",
+ "cite_error_references_invalid_parameters_group": "Лоша ознака <code>&lt;references&gt;</code>; само је парамтера \"group\" дозвољен. Користи <code>&lt;references /&gt;</code> или <code>&lt;references group=\"...\"&gt;</code>.",
+ "cite_error_references_no_backlink_label": "Нестале су посебне ознаке за задње везе. Одреди их више у поруци <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_references_no_text": "Лоша ознака <code>&lt;ref&gt;</code>; нема текста за ref-ове под именом <code>$1</code>.",
+ "cite_error_included_ref": "Затвара <code>&lt;/ref&gt;</code> који недостаје <code>&lt;ref&gt;</code> тагу",
+ "cite_error_group_refs_without_references": "Постоје ознаке <code>&lt;ref&gt;</code> за групу с именом „$1“, али нема одговарајуће ознаке <code>&lt;references group=\"$1\"/&gt;</code>",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "cite_ref-",
+ "cite_references_link_prefix": "cite_note-",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
+ "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
+ "cite_references_link_many_format_backlink_labels": "а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш аа аб ав аг ад ађ ае аж аз аи ај ак ал аљ ам ан ањ ао ап ар ас ат аћ ау аф ах ац ач аџ аш ба бб бв бг бд бђ бе бж бз би бј бк бл бљ бм бн бњ бо бп бр бс бт бћ бу бф бх бц бч бџ бш ва вб вв вг вд вђ ве вж вз ви вј вк вл вљ вм вн вњ во вп вр вс вт вћ ву вф вх вц вч вџ вш га гб гв гг гд гђ ге гж гз ги гј гк гл гљ гм гн гњ го гп гр гс гт гћ гу гф гх гц гч гџ гш да дб дв дг дд дђ де дж дз ди дј дк дл дљ дм дн дњ до дп др дс дт дћ ду дф дх дц дч дџ дш ђа ђб ђв ђг ђд ]] ђе ђж ђз ђи ђј ђк ђл ђљ ђм ђн ђњ ђо ђп ђр ђс ђт ђћ ђу ђф ђх ђц ђч ђџ ђш еа еб ев ег ед еђ ее еж ез еи еј ек ел ељ ем ен ењ ео еп ер ес ет ећ еу еф ех ец еч еџ еш жа жб жв жг жд жђ же жж жз жи жј жк жл жљ жм жн жњ жо жп жр жс жт жћ жу жф жх жц жч жџ жш за зб зв зг зд зђ зе зж зз зи зј зк зл зљ зм зн зњ зо зп зр зс зт зћ зу зф зх зц зч зџ зш иа иб ив иг ид иђ ие иж из ии иј ик ил иљ им ин ињ ио ип ир ис ит ић иу иф их иц ич иџ иш ја јб јв јг јд јђ је јж јз ји јј јк јл јљ јм јн јњ јо јп јр јс јт јћ ју јф јх јц јч јџ јш ка кб кв кг кд кђ ке кж кз ки кј кк кл кљ км кн књ ко кп кр кс кт кћ ку кф кх кц кч кџ кш ла лб лв лг лд лђ ле лж лз ли лј лк лл лљ лм лн лњ ло лп лр лс лт лћ лу лф лх лц лч лџ лш ља љб љв љг љд љђ ље љж љз љи љј љк љл љљ љм љн љњ љо љп љр љс љт љћ љу љф љх љц љч љџ љш ма мб мв мг мд мђ ме мж мз ми мј мк мл мљ мм мн мњ мо мп мр мс мт мћ му мф мх мц мч мџ мш на нб нв нг нд нђ не нж нз ни нј нк нл нљ нм нн нњ но нп нр нс нт нћ ну нф нх нц нч нџ нш ња њб њв њг њд њђ ње њж њз њи њј њк њл њљ њм њн њњ њо њп њр њс њт њћ њу њф њх њц њч њџ њш оа об ов ог од ођ ое ож оз ои ој ок ол ољ ом он оњ оо оп ор ос от оћ оу оф ох оц оч оџ ош па пб пв пг пд пђ пе пж пз пи пј пк пл пљ пм пн пњ по пп пр пс пт пћ пу пф пх пц пч пџ пш ра рб рв рг рд рђ ре рж рз ри рј рк рл рљ рм рн рњ ро рп рр рс рт рћ ру рф рх рц рч рџ рш са сб св сг сд сђ се сж сз си сј ск сл сљ см сн сњ со сп ср сс ст сћ су сф сх сц сч сџ сш та тб тв тг тд тђ те тж тз ти тј тк тл тљ тм тн тњ то тп тр тс тт тћ ту тф тх тц тч тџ тш ћа ћб ћв ћг ћд ћђ ће ћж ћз ћи ћј ћк ћл ћљ ћм ћн ћњ ћо ћп ћр ћс ћт ћћ ћу ћф ћх ћц ћч ћџ ћш уа уб ув уг уд уђ уе уж уз уи уј ук ул уљ ум ун уњ уо уп ур ус ут ућ уу уф ух уц уч уџ уш фа фб фв фг фд фђ фе фж фз фи фј фк фл фљ фм фн фњ фо фп фр фс фт фћ фу фф фх фц фч фџ фш ха хб хв хг хд хђ хе хж хз хи хј хк хл хљ хм хн хњ хо хп хр хс хт хћ ху хф хх хц хч хџ хш ца цб цв цг цд цђ це цж цз ци цј цк цл цљ цм цн цњ цо цп цр цс цт цћ цу цф цх цц цч цџ цш ча чб чв чг чд чђ че чж чз чи чј чк чл чљ чм чн чњ чо чп чр чс чт чћ чу чф чх чц чч чџ чш џа џб џв џг џд џђ џе џж џз џи џј џк џл џљ џм џн џњ џо џп џр џс џт џћ џу џф џх џц џч џџ џш ша шб шв шг шд шђ ше шж шз ши шј шк шл шљ шм шн шњ шо шп шр шс шт шћ шу шф шх шц шч шџ шш",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;"
+}
diff --git a/extensions/Cite/i18n/sr-el.json b/extensions/Cite/i18n/sr-el.json
new file mode 100644
index 00000000..3fccc95a
--- /dev/null
+++ b/extensions/Cite/i18n/sr-el.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michaello",
+ "Milicevic01"
+ ]
+ },
+ "cite-desc": "Dodaje <nowiki><ref[ name=id]></nowiki> i <nowiki><references/></nowiki> oznake za citiranje.",
+ "cite_error": "Greška citata: $1",
+ "cite_error_ref_numeric_key": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; ime ne može biti jednostavni intedžer. Koristi opisni naslov.",
+ "cite_error_ref_no_key": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; ref-ovi bez sadržaja moraju imati ime.",
+ "cite_error_ref_too_many_keys": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; loša imena, odnosno mnogo njih.",
+ "cite_error_ref_no_input": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; ref-ovi bez imena moraju imati sadržaj.",
+ "cite_error_references_invalid_parameters": "Loša oznaka <code>&amp;lt;references&amp;gt;</code>; parametri nisu dozvoljeni. Koristi <code>&amp;lt;references /&amp;gt;</code>.",
+ "cite_error_references_invalid_parameters_group": "Loša oznaka <code>&amp;lt;references&amp;gt;</code>; samo je paramtera &quot;group&quot; dozvoljen. Koristi <code>&amp;lt;references /&amp;gt;</code> ili <code>&amp;lt;references group=&quot;...&quot;&amp;gt;</code>.",
+ "cite_error_references_no_backlink_label": "Nestale su posebne oznake za zadnje veze. Odredi ih više u poruci <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>.",
+ "cite_error_references_no_text": "Loša oznaka <code>&amp;lt;ref&amp;gt;</code>; nema teksta za ref-ove pod imenom <code>$1</code>.",
+ "cite_error_included_ref": "Zatvara <code>&lt;/ref&gt;</code> koji nedostaje <code>&lt;ref&gt;</code> tagu",
+ "cite_error_group_refs_without_references": "<code><ref></code> tagovi postoje za grupu pod imenom \"$1\", ali nije nađen odgovarajući <code><references group=\"$1\"/></code> tag",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "cite_ref-",
+ "cite_references_link_prefix": "cite_note-",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
+ "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
+ "cite_references_link_many_format_backlink_labels": "a b v g d đ e ž z i j k l lj m n nj o p r s t ć u f h c č dž š aa ab av ag ad ađ ae až az ai aj ak al alj am an anj ao ap ar as at ać au af ah ac ač adž aš ba bb bv bg bd bđ be bž bz bi bj bk bl blj bm bn bnj bo bp br bs bt bć bu bf bh bc bč bdž bš va vb vv vg vd vđ ve vž vz vi vj vk vl vlj vm vn vnj vo vp vr vs vt vć vu vf vh vc vč vdž vš ga gb gv gg gd gđ ge gž gz gi gj gk gl glj gm gn gnj go gp gr gs gt gć gu gf gh gc gč gdž gš da db dv dg dd dđ de dž dz di dj dk dl dlj dm dn dnj do dp dr ds dt dć du df dh dc dč ddž dš đa đb đv đg đd ]] đe đž đz đi đj đk đl đlj đm đn đnj đo đp đr đs đt đć đu đf đh đc đč đdž đš ea eb ev eg ed eđ ee ež ez ei ej ek el elj em en enj eo ep er es et eć eu ef eh ec eč edž eš ža žb žv žg žd žđ že žž žz ži žj žk žl žlj žm žn žnj žo žp žr žs žt žć žu žf žh žc žč ždž žš za zb zv zg zd zđ ze zž zz zi zj zk zl zlj zm zn znj zo zp zr zs zt zć zu zf zh zc zč zdž zš ia ib iv ig id iđ ie iž iz ii ij ik il ilj im in inj io ip ir is it ić iu if ih ic ič idž iš ja jb jv jg jd jđ je jž jz ji jj jk jl jlj jm jn jnj jo jp jr js jt jć ju jf jh jc jč jdž jš ka kb kv kg kd kđ ke kž kz ki kj kk kl klj km kn knj ko kp kr ks kt kć ku kf kh kc kč kdž kš la lb lv lg ld lđ le lž lz li lj lk ll llj lm ln lnj lo lp lr ls lt lć lu lf lh lc lč ldž lš lja ljb ljv ljg ljd ljđ lje ljž ljz lji ljj ljk ljl ljlj ljm ljn ljnj ljo ljp ljr ljs ljt ljć lju ljf ljh ljc ljč ljdž ljš ma mb mv mg md mđ me mž mz mi mj mk ml mlj mm mn mnj mo mp mr ms mt mć mu mf mh mc mč mdž mš na nb nv ng nd nđ ne nž nz ni nj nk nl nlj nm nn nnj no np nr ns nt nć nu nf nh nc nč ndž nš nja njb njv njg njd njđ nje njž njz nji njj njk njl njlj njm njn njnj njo njp njr njs njt njć nju njf njh njc njč njdž njš oa ob ov og od ođ oe ož oz oi oj ok ol olj om on onj oo op or os ot oć ou of oh oc oč odž oš pa pb pv pg pd pđ pe pž pz pi pj pk pl plj pm pn pnj po pp pr ps pt pć pu pf ph pc pč pdž pš ra rb rv rg rd rđ re rž rz ri rj rk rl rlj rm rn rnj ro rp rr rs rt rć ru rf rh rc rč rdž rš sa sb sv sg sd sđ se sž sz si sj sk sl slj sm sn snj so sp sr ss st sć su sf sh sc sč sdž sš ta tb tv tg td tđ te tž tz ti tj tk tl tlj tm tn tnj to tp tr ts tt tć tu tf th tc tč tdž tš ća ćb ćv ćg ćd ćđ će ćž ćz ći ćj ćk ćl ćlj ćm ćn ćnj ćo ćp ćr ćs ćt ćć ću ćf ćh ćc ćč ćdž ćš ua ub uv ug ud uđ ue už uz ui uj uk ul ulj um un unj uo up ur us ut uć uu uf uh uc uč udž uš fa fb fv fg fd fđ fe fž fz fi fj fk fl flj fm fn fnj fo fp fr fs ft fć fu ff fh fc fč fdž fš ha hb hv hg hd hđ he hž hz hi hj hk hl hlj hm hn hnj ho hp hr hs ht hć hu hf hh hc hč hdž hš ca cb cv cg cd cđ ce cž cz ci cj ck cl clj cm cn cnj co cp cr cs ct cć cu cf ch cc cč cdž cš ča čb čv čg čd čđ če čž čz či čj čk čl člj čm čn čnj čo čp čr čs čt čć ču čf čh čc čč čdž čš dža džb džv džg džd džđ dže džž džz dži džj džk džl džlj džm džn džnj džo džp džr džs džt džć džu džf džh džc džč dždž džš ša šb šv šg šd šđ še šž šz ši šj šk šl šlj šm šn šnj šo šp šr šs št šć šu šf šh šc šč šdž šš",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;"
+}
diff --git a/extensions/Cite/i18n/stq.json b/extensions/Cite/i18n/stq.json
new file mode 100644
index 00000000..31e3d772
--- /dev/null
+++ b/extensions/Cite/i18n/stq.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyt"
+ ]
+ },
+ "cite-desc": "Föiget foar Wällenätterwiese do <nowiki><ref[ name=id]></nowiki> un <nowiki><references/></nowiki> Tags tou",
+ "cite_error": "Referenz-Failer $1",
+ "cite_error_ref_numeric_key": "Uungultige <code><nowiki><ref></nowiki></code>-Ferweendenge: „name“ duur naan skeenen Taalenwäid weese, benutsje n beskrieuwenden Noome.",
+ "cite_error_ref_no_key": "Uungultige <code><nowiki><ref></nowiki></code>-Ferweendenge: „ref“ sunner Inhoold mout n Noome hääbe.",
+ "cite_error_ref_too_many_keys": "Uungultige <code><nowiki><ref></nowiki></code>-Ferweendenge: „name“ is uungultich of tou loang.",
+ "cite_error_ref_no_input": "Uungultige <code><nowiki><ref></nowiki></code>-Ferweendenge: „ref“ sunner Noome mout n Inhoold hääbe.",
+ "cite_error_references_invalid_parameters": "Uungultige <code><nowiki><reference></nowiki></code>-Ferweendenge: Der sunt neen bietoukuumende Parametere ferlööwed, ferweend bloot <code><nowiki><reference /></nowiki></code>.",
+ "cite_error_references_invalid_parameters_group": "Ungultige <code>&lt;references&gt;</code>-Ferweendenge: Bloot die Parameter „group“ is ferlööwed, ferweend <tt>&lt;references /&gt;</tt> of <tt>&lt;references group=\"...\" /&gt;</tt>",
+ "cite_error_references_no_backlink_label": "Ne Referenz fon ju Foarm <code><nowiki><ref name=\"...\"/></nowiki></code> wäd oafter benutsed as Bouksteeuwen deer sunt. N Administrator mout <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> uum wiedere Bouksteeuwen/Teekene ferfulständigje.",
+ "cite_error_references_no_text": "Uungultigen <code>&lt;ref&gt;</code>-Tag; der wuude naan Text foar dät Ref mäd dän Noome <code>$1</code> anroat.",
+ "cite_error_included_ref": "Der failt n sluutend <code>&lt;/ref&gt;</code>",
+ "cite_error_group_refs_without_references": "<code>&lt;ref&gt;</code>-Tags existierje foar ju Gruppe „$1“, man neen deertou heerend <code>&lt;references group=„$1“/&gt;</code>-Tag wuud fuunen",
+ "cite_error_references_group_mismatch": "Dät <code>&lt;ref&gt;</code>-Tag in <code>&lt;references&gt;</code> häd dät Konfliktgruppenattribut „$1“.",
+ "cite_error_references_missing_group": "Dät <code>&lt;ref&gt;</code> Tag, as definierd in <code>&lt;references&gt;</code> häd dät Gruppenattribut \"$1\", dät nit in dän foaruutgungende Text foarkumt.",
+ "cite_error_references_missing_key": "Dät in <code>&lt;references&gt;</code> definierde <code>&lt;ref&gt;</code>-Tag mäd dän Noome „$1“ wäd in dän foaruutgungende Text nit ferwoand.",
+ "cite_error_references_no_key": "Dät in <code>&lt;references&gt;</code> definierde <code>&lt;ref&gt;</code>-Tag häd neen Noomensattribut.",
+ "cite_error_empty_references_define": "Dät in <code>&lt;references&gt;</code> definierde <code>&lt;ref&gt;</code>-Tag mäd dän Noome „$1“ wiest naan Inhoold ap."
+}
diff --git a/extensions/Cite/i18n/core/su.json b/extensions/Cite/i18n/su.json
index d74343d4..d74343d4 100644
--- a/extensions/Cite/i18n/core/su.json
+++ b/extensions/Cite/i18n/su.json
diff --git a/extensions/Cite/i18n/core/sv.json b/extensions/Cite/i18n/sv.json
index 3ea6f976..3ea6f976 100644
--- a/extensions/Cite/i18n/core/sv.json
+++ b/extensions/Cite/i18n/sv.json
diff --git a/extensions/Cite/i18n/ta.json b/extensions/Cite/i18n/ta.json
new file mode 100644
index 00000000..a3be49ba
--- /dev/null
+++ b/extensions/Cite/i18n/ta.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jayarathina",
+ "Shanmugamp7",
+ "செல்வா"
+ ]
+ },
+ "cite-desc": "சேர்க்கிறது <nowiki><ref[ name=id]></nowiki>மற்றும் <nowiki><references/></nowiki> குறிச்சொற்கள், மேற்கோள்களுக்காக",
+ "cite_error": "பிழை காட்டு: $1",
+ "cite_error_references_no_text": "செல்லாத <code>&lt;ref&gt;</code> குறிச்சொல்;\n<code>$1</code> என்னும் பெயரில் உள்ள ref குறிச்சொல்லுக்கு உரையேதும் வழங்கப்படவில்லை"
+}
diff --git a/extensions/Cite/i18n/tcy.json b/extensions/Cite/i18n/tcy.json
new file mode 100644
index 00000000..88454226
--- /dev/null
+++ b/extensions/Cite/i18n/tcy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "VASANTH S.N."
+ ]
+ },
+ "cite_error": "ತಪ್ಪು ನಮೂದಿಸಾಲೆ:$1"
+}
diff --git a/extensions/Cite/i18n/core/te.json b/extensions/Cite/i18n/te.json
index d75ae514..d75ae514 100644
--- a/extensions/Cite/i18n/core/te.json
+++ b/extensions/Cite/i18n/te.json
diff --git a/extensions/Cite/i18n/core/tg-cyrl.json b/extensions/Cite/i18n/tg-cyrl.json
index a5e4a549..a5e4a549 100644
--- a/extensions/Cite/i18n/core/tg-cyrl.json
+++ b/extensions/Cite/i18n/tg-cyrl.json
diff --git a/extensions/Cite/i18n/core/tg-latn.json b/extensions/Cite/i18n/tg-latn.json
index 6f286d63..6f286d63 100644
--- a/extensions/Cite/i18n/core/tg-latn.json
+++ b/extensions/Cite/i18n/tg-latn.json
diff --git a/extensions/Cite/i18n/core/th.json b/extensions/Cite/i18n/th.json
index 2a85b574..2a85b574 100644
--- a/extensions/Cite/i18n/core/th.json
+++ b/extensions/Cite/i18n/th.json
diff --git a/extensions/Cite/i18n/tk.json b/extensions/Cite/i18n/tk.json
new file mode 100644
index 00000000..e78ddf53
--- /dev/null
+++ b/extensions/Cite/i18n/tk.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hanberke"
+ ]
+ },
+ "cite_error": "Sitirleme säwligi: $1",
+ "cite_error_ref_numeric_key": "Nädogry <code>&lt;ref&gt;</code> tegi;\nat ýönekeý bir bitin san bolup bilmeýär. Düşündirişli at ulanyň",
+ "cite_error_ref_no_key": "Nädogry <code>&lt;ref&gt;</code> tegi;\nmazmunsyz refleriň ady bolmaly",
+ "cite_error_ref_too_many_keys": "Nädogry <code>&lt;ref&gt;</code> tegi;\nnädogry atlar, mes. aşa köp",
+ "cite_error_ref_no_input": "Nädogry <code>&lt;ref&gt;</code> tegi;\natsyz refleriň mazmuny bolmalydyr",
+ "cite_error_references_invalid_parameters": "Nädogry <code>&lt;ref&gt;</code> tegi;\nhiç hili parametre rugsat berilmeýär.\n<code>&lt;references /&gt;</code> ulanyň",
+ "cite_error_references_no_text": "Nädogry <code>&lt;ref&gt;</code> tegi;\n<code>$1</code> atly refler üçin tekst görkezilmändir",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> tegi üçin <code>&lt;/ref&gt;</code> ýapylyşy kem",
+ "cite_error_group_refs_without_references": "\"$1\" atly topar üçin <code>&lt;ref&gt;</code> tegleri bar, emma degişli code>&lt;references group=\"$1\"/&gt;</code> tegi tapylmady",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>-daky <code>&lt;ref&gt;</code> teginiň çaknyşýan \"$1\" topar aýratynlygy bar.",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code>-da kesgitlenen <code>&lt;ref&gt;</code> teginiň öňki tekstde ýok \"$1\" topar aýratynlygy bar.",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code>-da kesgitlenen \"$1\" atly <code>&lt;ref&gt;</code> tegi öňki tekstde ulanylmaýar.",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code>-da kesgitlenen <code>&lt;ref&gt;</code> teginiň hiç hili at aýratynlygy ýok.",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code>-da kesgitlenen \"$1\" atly <code>&lt;ref&gt;</code> tegiň mazmuny ýok."
+}
diff --git a/extensions/Cite/i18n/tl.json b/extensions/Cite/i18n/tl.json
new file mode 100644
index 00000000..7dd11199
--- /dev/null
+++ b/extensions/Cite/i18n/tl.json
@@ -0,0 +1,37 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw"
+ ]
+ },
+ "cite-desc": "Nagdaragdag ng mga tatak na <nowiki><ref[ name=id]></nowiki> at <nowiki><references/></nowiki>, para sa mga pagtukoy",
+ "cite_error": "Kamalian sa pagtukoy: $1",
+ "cite_error_ref_numeric_key": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nhindi maaaring isang payak na buumbilang (''integer'') ang pangalan. Gumamit ng isang mapaglarawang pamagat",
+ "cite_error_ref_no_key": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nkinakailangan may isang pangalan ang mga sangguniang (''ref'') walang nilalaman",
+ "cite_error_ref_too_many_keys": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nhindi tanggap na mga pangalan, ang ibig sabihin ay napakarami",
+ "cite_error_ref_no_input": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nkinakailangang may nilalaman ang mga sangguniang (''ref'') walang pangalan",
+ "cite_error_references_invalid_parameters": "Hindi tanggap na <code>&lt;references&gt;</code>;\nwalang pinapahintulutang mga parametro.\nGamitin ang <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Hindi tanggap ang tatak na <code>&lt;references&gt;</code>;\nPinapahintulutan lamang ang parametrong \"pangkat\" (''group'').\nGamitin ang <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Naubusan ng pasadyang mga tatak na pantukoy ng panlikod na kawing.\nDagdagan pa ng pakahulugan sa loob ng mensaheng <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Naubusan ng mga tatak ng pasadyang kawing para sa pangkat na \"$1\".\nMagbigay ng marami pang kahulugan sa loob ng mensaheng <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Hindi tanggap ang tatak na <code>&lt;ref&gt;</code>;\nwalang tekstong ibinigay para sa mga sangguniang (''ref'') pinangalanang <code>$1</code>",
+ "cite_error_included_ref": "Naawawala ang pansarang <code>&lt;/ref&gt;</code> na para sa tatak na <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Umiiral na ang tatak na <code>&lt;ref&gt;</code> para sa pangkat na pinangalanang \"$1\", subalit walang natagpuang katumbas na tatak na <code>&lt;references group=\"$1\"/&gt;</code>",
+ "cite_error_references_group_mismatch": "May hindi nagbabanggaang katangiang pampangkat na \"$1\" ang <code>&lt;ref&gt;</code> tatak na nasa <code>&lt;references&gt;</code>.",
+ "cite_error_references_missing_group": "Ang tatak na <code>&lt;ref&gt;</code> na binigyang kahulugan sa <code>&lt;references&gt;</code> ay may katangiang pampangkat na \"$1\" na hindi lumilitawa sa naunang teksto.",
+ "cite_error_references_missing_key": "Ang tatak na <code>&lt;ref&gt;</code> na may pangalang \"$1\" na binigyang kahulugan sa <code>&lt;references&gt;</code> ay hindi ginamit sa naunang teksto.",
+ "cite_error_references_no_key": "Ang tatak na <code>&lt;ref&gt;</code> na binigyang kahulugan sa <code>&lt;references&gt;</code> ay walang katangiang pampangalan.",
+ "cite_error_empty_references_define": "Ang tatak na <code>&lt;ref&gt;</code> na binigyang kahulugan sa <code>&lt;references&gt;</code> na may pangalang \"$1\" ay walang nilalaman.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "cite_ref-",
+ "cite_reference_link_suffix": "",
+ "cite_references_link_prefix": "cite_note-",
+ "cite_references_link_suffix": "",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
+ "cite_references_link_many": "<li id=\"$1\"><span class=\"mw-cite-backlink\">↑ $2</span> $3</li>",
+ "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
+ "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;"
+}
diff --git a/extensions/Cite/i18n/core/tly.json b/extensions/Cite/i18n/tly.json
index b5068080..b5068080 100644
--- a/extensions/Cite/i18n/core/tly.json
+++ b/extensions/Cite/i18n/tly.json
diff --git a/extensions/Cite/i18n/tr.json b/extensions/Cite/i18n/tr.json
new file mode 100644
index 00000000..e22a1d26
--- /dev/null
+++ b/extensions/Cite/i18n/tr.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Erdemaslancan",
+ "Joseph",
+ "Runningfridgesrule"
+ ]
+ },
+ "cite-desc": "Alıntılar için, <nowiki><ref[ name=id]></nowiki> ve <nowiki><references/></nowiki> etiketlerini ekler",
+ "cite_error": "Kaynak hatası $1",
+ "cite_error_ref_numeric_key": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\nisim basit bir tamsayı olamaz. Tanımlayıcı bir başlık kullanın",
+ "cite_error_ref_no_key": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\niçeriksiz reflerin bir ismi olmalı",
+ "cite_error_ref_too_many_keys": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\ngeçersiz isimler, ör. çok fazla",
+ "cite_error_ref_no_input": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\nisimsiz reflerin içeriği olmalı",
+ "cite_error_references_invalid_parameters": "Geçersiz <code>&lt;references&gt;</code> etiketi;\nparametrelere izin verilmiyor.\n<code>&lt;references /&gt;</code> kullanın",
+ "cite_error_references_invalid_parameters_group": "Geçersiz <code>&lt;references&gt;</code> etiketi;\nsadece \"group\" parametresine izin verilir.\n<code>&lt;references /&gt;</code>, ya da <code>&lt;references group=\"...\" /&gt;</code> kullanın",
+ "cite_error_references_no_backlink_label": "Özel geribağlantı etiketleri kalmadı.\n<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> mesajında daha fazla tanımlayın",
+ "cite_error_no_link_label_group": "\"$1\" grubu için özel bağlantı etiketleri bitti.\n<nowiki>[[MediaWiki:$2]]</nowiki> mesajında daha fazla tanımlayın.",
+ "cite_error_references_no_text": "Geçersiz <code>&lt;ref&gt;</code> etiketi;\n<code>$1</code> isimli refler için metin temin edilmemiş",
+ "cite_error_included_ref": "<code>&lt;ref&gt;</code> etiketi için <code>&lt;/ref&gt;</code> kapanışı eksik",
+ "cite_error_group_refs_without_references": "\"$1\" isimli grup için <code>&lt;ref&gt;</code> etiketleri mevcut, ancak karşılık gelen <code>&lt;references group=\"$1\"/&gt;</code> etiketi bulunamadı",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>'daki <code>&lt;ref&gt;</code> etiketinin çelişen \"$1\" grup özniteliği var.",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code>'da tanımlanan <code>&lt;ref&gt;</code> etiketinin önceki metinde olmayan \"$1\" grup özniteliği var.",
+ "cite_error_references_missing_key": "<code>&lt;references&gt;</code>'da tanımlanan \"$1\" adındaki <code>&lt;ref&gt;</code> etiketi önceki metinde kullanılmıyor.",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code>'da tanımlanan <code>&lt;ref&gt;</code> etiketinin hiçbir ad özniteliği yok.",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code>'da tanımlanan \"$1\" adlı <code>&lt;ref&gt;</code> etiketinin içeriği yok.",
+ "cite_references_link_many_format_backlink_labels": "a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz",
+ "cite_references_link_accessibility_label": "Yukarı git",
+ "cite_references_link_many_accessibility_label": "Şuraya git:"
+}
diff --git a/extensions/Cite/i18n/core/tt-cyrl.json b/extensions/Cite/i18n/tt-cyrl.json
index dc063ce7..dc063ce7 100644
--- a/extensions/Cite/i18n/core/tt-cyrl.json
+++ b/extensions/Cite/i18n/tt-cyrl.json
diff --git a/extensions/Cite/i18n/core/ttt.json b/extensions/Cite/i18n/ttt.json
index b5068080..b5068080 100644
--- a/extensions/Cite/i18n/core/ttt.json
+++ b/extensions/Cite/i18n/ttt.json
diff --git a/extensions/Cite/i18n/core/tzm.json b/extensions/Cite/i18n/tzm.json
index 3ac1f2eb..3ac1f2eb 100644
--- a/extensions/Cite/i18n/core/tzm.json
+++ b/extensions/Cite/i18n/tzm.json
diff --git a/extensions/Cite/i18n/core/ug-arab.json b/extensions/Cite/i18n/ug-arab.json
index c11492d4..c11492d4 100644
--- a/extensions/Cite/i18n/core/ug-arab.json
+++ b/extensions/Cite/i18n/ug-arab.json
diff --git a/extensions/Cite/i18n/uk.json b/extensions/Cite/i18n/uk.json
new file mode 100644
index 00000000..ba422fca
--- /dev/null
+++ b/extensions/Cite/i18n/uk.json
@@ -0,0 +1,44 @@
+{
+ "@metadata": {
+ "authors": [
+ "AS",
+ "Ahonc",
+ "Andriykopanytsia",
+ "Dim Grits",
+ "DixonD",
+ "NickK",
+ "Prima klasy4na",
+ "Ytsukeng Fyvaprol",
+ "Ата"
+ ]
+ },
+ "cite-desc": "Додає теги <nowiki><ref[ name=id]></nowiki> і <nowiki><references/></nowiki> для виносок",
+ "cite_error": "Помилка цитування: $1",
+ "cite_error_ref_numeric_key": "Неправильний виклик <code>&lt;ref&gt;</code>:\nназва не може містити тільки цифри.",
+ "cite_error_ref_no_key": "Неправильний виклик <code>&lt;ref&gt;</code>:\nпорожній тег <code>ref</code> повинен мати параметр name.",
+ "cite_error_ref_too_many_keys": "Неправильний виклик <code>&lt;ref&gt;</code>:\nвказані неправильні значення <code>name</code> або вказано забагато параметрів",
+ "cite_error_ref_no_input": "Неправильний виклик <code>&lt;ref&gt;</code>:\nтег <code>ref</code> без назви повинен мати вхідні дані",
+ "cite_error_references_invalid_parameters": "Неправильний тег <code>&lt;references&gt;</code>:\nпараметри не передбачені. Використовуйте <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Помилковий тег <code>&lt;references&gt;</code>;\nможна використовувати тільки параметр «group».\nВикористовуйте <code>&lt;references /&gt;</code> або <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Недостатньо символів для зворотних гіперпосилань.\nПотрібно розширити системну змінну <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Закінчилися позначки користувальницьких посилань для групи \"$1\".\nВизначте додаткові в повідомленні <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Неправильний виклик <code>&lt;ref&gt;</code>:\nдля виносок <code>$1</code> не вказаний текст",
+ "cite_error_included_ref": "Відсутній тег <code>&lt;/ref&gt;</code> за наявності тега <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Теги <code>&lt;ref&gt;</code> існують для групи під назвою «$1», але не знайдено відповідного тегу <code>&lt;references group=\"$1\"/&gt;</code>, або ж бракує закриваючого <code>&lt;/ref&gt;</code>",
+ "cite_error_references_group_mismatch": "Тег <code>&lt;ref&gt;</code> в <code>&lt;references&gt;</code> має конфліктуючий атрибут групи \"$1\".",
+ "cite_error_references_missing_group": "Тег <code>&lt;ref&gt;</code>, заданий в <code>&lt;references&gt;</code>, має атрибут групи \"$1\", який не фігурує в попередньому тексті.",
+ "cite_error_references_missing_key": "Тег <code>&lt;ref&gt;</code> з назвою \"$1\", визначений у <code>&lt;references&gt;</code>, не використовується в попередньому тексті.",
+ "cite_error_references_no_key": "Тег <code>&lt;ref&gt;</code>, визначений у <code>&lt;references&gt;</code>, не має атрибута назви.",
+ "cite_error_empty_references_define": "Тег <code>&lt;ref&gt;</code>, визначений у <code>&lt;references&gt;</code>, з назвою \"$1\" не має змісту.",
+ "cite_reference_link_key_with_num": "$1_$2",
+ "cite_reference_link_prefix": "cite_ref-",
+ "cite_references_link_prefix": "cite_note-",
+ "cite_reference_link": "<sup id=\"$1\" class=\"reference\">[[#$2|<nowiki>[</nowiki>$3<nowiki>]</nowiki>]]</sup>",
+ "cite_references_link_one": "<li id=\"$1\"><span class=\"mw-cite-backlink\">[[#$2|↑]]</span> $3</li>",
+ "cite_references_link_many_format": "<sup>[[#$1|$2]]</sup>",
+ "cite_references_link_many_format_backlink_labels": "а б в г д е ж и к л м н п р с т у ф х ц ш щ ю я аа аб ав аг ад ае аж аи ак ал ам ан ап ар ас ат ау аф ах ац аш ащ аю ая ба бб бв бг бд бе бж би бк бл бм бн бп бр бс бт бу бф бх бц бш бщ бю бя ва вб вв вг вд ве вж ви вк вл вм вн вп вр вс вт ву вф вх вц вш вщ вю вя га гб гв гг гд ге гж ги гк гл гм гн гп гр гс гт гу гф гх гц гш гщ гю гя да дб дв дг дд де дж ди дк дл дм дн дп др дс дт ду дф дх дц дш дщ дю дя еа еб ев ег ед ее еж еи ек ел ем ен еп ер ес ет еу еф ех ец еш ещ ею ея жа жб жв жг жд же жж жи жк жл жм жн жп жр жс жт жу жф жх жц жш жщ жю жя иа иб ив иг ид ие иж ии ик ил им ин ип ир ис ит иу иф их иц иш ищ ию ия ка кб кв кг кд ке кж ки кк кл км кн кп кр кс кт ку кф кх кц кш кщ кю кя ла лб лв лг лд ле лж ли лк лл лм лн лп лр лс лт лу лф лх лц лш лщ лю ля ма мб мв мг мд ме мж ми мк мл мм мн мп мр мс мт му мф мх мц мш мщ мю мя на нб нв нг нд не нж ни нк нл нм нн нп нр нс нт ну нф нх нц нш нщ ню ня па пб пв пг пд пе пж пи пк пл пм пн пп пр пс пт пу пф пх пц пш пщ пю пя ра рб рв рг рд ре рж ри рк рл рм рн рп рр рс рт ру рф рх рц рш рщ рю ря са сб св сг сд се сж си ск сл см сн сп ср сс ст су сф сх сц сш сщ сю ся та тб тв тг тд те тж ти тк тл тм тн тп тр тс тт ту тф тх тц тш тщ тю тя уа уб ув уг уд уе уж уи ук ул ум ун уп ур ус ут уу уф ух уц уш ущ ую уя фа фб фв фг фд фе фж фи фк фл фм фн фп фр фс фт фу фф фх фц фш фщ фю фя ха хб хв хг хд хе хж хи хк хл хм хн хп хр хс хт ху хф хх хц хш хщ хю хя ца цб цв цг цд це цж ци цк цл цм цн цп цр цс цт цу цф цх цц цш цщ цю ця ша шб шв шг шд ше шж ши шк шл шм шн шп шр шс шт шу шф шх шц шш шщ шю шя ща щб щв щг щд ще щж щи щк щл щм щн щп щр щс щт щу щф щх щц щш щщ щю щя юа юб юв юг юд юе юж юи юк юл юм юн юп юр юс ют юу юф юх юц юш ющ юю юя яа яб яв яг яд яе яж яи як ял ям ян яп яр яс ят яу яф ях яц яш ящ яю яя",
+ "cite_references_link_many_sep": "&#32;",
+ "cite_references_link_many_and": "&#32;",
+ "cite_references_link_accessibility_label": "Вгору",
+ "cite_references_link_many_accessibility_label": "Перейти до:"
+}
diff --git a/extensions/Cite/i18n/ur.json b/extensions/Cite/i18n/ur.json
new file mode 100644
index 00000000..3618f719
--- /dev/null
+++ b/extensions/Cite/i18n/ur.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "عثمان خان شاہ"
+ ]
+ },
+ "cite_error": "حوالہ خطا: $1"
+}
diff --git a/extensions/Cite/i18n/vec.json b/extensions/Cite/i18n/vec.json
new file mode 100644
index 00000000..6285fa7d
--- /dev/null
+++ b/extensions/Cite/i18n/vec.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Candalua"
+ ]
+ },
+ "cite-desc": "Zonta i tag <nowiki><ref[ name=id]></nowiki> e <nowiki><references/></nowiki> par gestir le citazion",
+ "cite_error": "Eror ne la funsion Cite $1",
+ "cite_error_ref_numeric_key": "Eror ne l'uso del marcator <code>&lt;ref&gt;</code>: el nome no'l pode mìa èssar un nùmaro intiero. Dòpara un titolo esteso",
+ "cite_error_ref_no_key": "Eror ne l'uso del marcator <code>&lt;ref&gt;</code>: i ref vodi no i pol no verghe un nome",
+ "cite_error_ref_too_many_keys": "Eror ne l'uso del marcator <code>&lt;ref&gt;</code>: nomi mìa validi (ad es. nùmaro massa elevà)",
+ "cite_error_ref_no_input": "Eror ne l'uso del marcator <code>&lt;ref&gt;</code>: i ref che no gà un nome no i pol mìa èssar vodi",
+ "cite_error_references_invalid_parameters": "Eror ne l'uso del marcator <code>&lt;references&gt;</code>: parametri mìa consentìi, dòpara el marcator <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Tag <code>&lt;references&gt;</code> mìa valido;\nsolo el parametro \"group\" el xe permesso.\nDòpara <code>&lt;references /&gt;</code>, o <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Etichete de rimando personalizàe esaurìe, auménteghen el nùmaro nel messagio <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Etichete esaurìe par colegamenti personalizà del grupo \"$1\", aumentarne el numaro nel messajo <nowiki>[[MediaWiki:$2]]</nowiki>",
+ "cite_error_references_no_text": "Marcator <code>&lt;ref&gt;</code> mìa valido; no xe stà indicà nissun testo par el marcator <code>$1</code>",
+ "cite_error_included_ref": "<code>&lt;/ref&gt;</code> de chiusura mancante par el marcador <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Ghe xe un tag <code>&lt;ref&gt;</code> par un grupo che se ciama \"$1\", ma no xe stà catà nissun tag <code>&lt;references group=\"$1\"/&gt;</code> che corisponda.",
+ "cite_error_references_group_mismatch": "El tag <code>&lt;ref&gt;</code> in <code>&lt;references&gt;</code> el gà l'atributo de grupo \"$1\" in conflito.",
+ "cite_error_references_missing_group": "El tag <code>&lt;ref&gt;</code> definìo in <code>&lt;references&gt;</code> el gà un atributo de grupo \"$1\" che no conpare mia nel testo precedente.",
+ "cite_error_references_missing_key": "El tag <code>&lt;ref&gt;</code> con nome \"$1\" definìo in <code>&lt;references&gt;</code> no'l xe doparà nel testo precedente.",
+ "cite_error_references_no_key": "El tag <code>&lt;ref&gt;</code> definìo in <code>&lt;references&gt;</code> no'l gà un atributo nome.",
+ "cite_error_empty_references_define": "El tag <code>&lt;ref&gt;</code> definìo in <code>&lt;references&gt;</code> con nome \"$1\" no'l gà nissun contenuto."
+}
diff --git a/extensions/Cite/i18n/core/vep.json b/extensions/Cite/i18n/vep.json
index 26cb48af..26cb48af 100644
--- a/extensions/Cite/i18n/core/vep.json
+++ b/extensions/Cite/i18n/vep.json
diff --git a/extensions/Cite/i18n/vi.json b/extensions/Cite/i18n/vi.json
new file mode 100644
index 00000000..8c5d6534
--- /dev/null
+++ b/extensions/Cite/i18n/vi.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "Vinhtantran"
+ ]
+ },
+ "cite-desc": "Thêm các thẻ <nowiki><ref[ name=id]></nowiki> và <nowiki><references/></nowiki> để ghi chú thích hoặc nguồn tham khảo",
+ "cite_error": "Lỗi chú thích: $1",
+ "cite_error_ref_numeric_key": "Thẻ <code>&lt;ref&gt;</code> sai; tên không thể chỉ là số nguyên, hãy dùng tựa đề có tính miêu tả",
+ "cite_error_ref_no_key": "Thẻ <code>&lt;ref&gt;</code> sai; thẻ ref không có nội dung thì phải có tên",
+ "cite_error_ref_too_many_keys": "Thẻ <code>&lt;ref&gt;</code> sai; thông số tên sai, như, nhiều thông số tên quá",
+ "cite_error_ref_no_input": "Mã <code>&lt;ref&gt;</code> sai; thẻ ref không có tên thì phải có nội dung",
+ "cite_error_references_invalid_parameters": "Thẻ <code>&lt;references&gt;</code> sai; không được có thông số, hãy dùng <code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "Thẻ <code>&lt;references&gt;</code> không hợp lệ;\nchỉ cho phép tham số “group”.\nHãy dùng <code>&lt;references /&gt;</code>, hoặc <code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "Đã dùng hết nhãn tham khảo chung.\nHãy định nghĩa thêm ở thông điệp <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>",
+ "cite_error_no_link_label_group": "Thiếu nhãn liên kết tùy biến cho nhóm “$1”. Hãy định rõ thêm nhãn trong thông điệp <nowiki>[[MediaWiki:$2]]</nowiki>.",
+ "cite_error_references_no_text": "Thẻ <code>&lt;ref&gt;</code> sai; không có nội dung trong thẻ ref có tên <code>$1</code>",
+ "cite_error_included_ref": "Không có <code>&lt;/ref&gt;</code> để đóng thẻ <code>&lt;ref&gt;</code>",
+ "cite_error_group_refs_without_references": "Đã tìm thấy thẻ <code>&lt;ref&gt;</code> với tên nhóm “$1”, nhưng không tìm thấy thẻ tương ứng <code>&lt;references group=\"$1\"/&gt;</code> tương ứng, hoặc thẻ đóng <code>&lt;/ref&gt;</code> bị thiếu",
+ "cite_error_references_group_mismatch": "Thẻ <code>&lt;ref&gt;</code> trong <code>&lt;references&gt;</code> có thuộc tính nhóm mâu thuẫn “$1”.",
+ "cite_error_references_missing_group": "Thẻ <code>&lt;ref&gt;</code> được định nghĩa trong <code>&lt;references&gt;</code> có thuộc tính nhóm “$1” không thấy xuất hiện trong văn bản phía trên.",
+ "cite_error_references_missing_key": "Thẻ <code>&lt;ref&gt;</code> có tên “$1” được định nghĩa trong <code>&lt;references&gt;</code> không được đoạn văn bản trên sử dụng.",
+ "cite_error_references_no_key": " Thẻ <code>&lt;ref&gt;</code> được định nghĩa trong <code>&lt;references&gt;</code> không có thuộc tính name.",
+ "cite_error_empty_references_define": "Thẻ <code>&lt;ref&gt;</code> được định nghĩa trong <code>&lt;references&gt;</code> có tên “$1” không có nội dung.",
+ "cite_references_link_many_format_backlink_labels": "a ă â b c d đ e ê g h i k l m n o ô ơ p q r s t u ư v x y\naa aă aâ ab ac ad ađ ae aê ag ah ai ak al am an ao aô aơ ap aq ar as at au aư av ax ay\năa ăă ăâ ăb ăc ăd ăđ ăe ăê ăg ăh ăi ăk ăl ăm ăn ăo ăô ăơ ăp ăq ăr ăs ăt ău ăư ăv ăx ăy\nâa âă ââ âb âc âd âđ âe âê âg âh âi âk âl âm ân âo âô âơ âp âq âr âs ât âu âư âv âx ây\nba bă bâ bb bc bd bđ be bê bg bh bi bk bl bm bn bo bô bơ bp bq br bs bt bu bư bv bx by\nca că câ cb cc cd cđ ce cê cg ch ci ck cl cm cn co cô cơ cp cq cr cs ct cu cư cv cx cy\nda dă dâ db dc dd dđ de dê dg dh di dk dl dm dn do dô dơ dp dq dr ds dt du dư dv dx dy\nđa đă đâ đb đc đd đđ đe đê đg đh đi đk đl đm đn đo đô đơ đp đq đr đs đt đu đư đv đx đy\nea eă eâ eb ec ed eđ ee eê eg eh ei ek el em en eo eô eơ ep eq er es et eu eư ev ex ey\nêa êă êâ êb êc êd êđ êe êê êg êh êi êk êl êm ên êo êô êơ êp êq êr ês êt êu êư êv êx êy\nga gă gâ gb gc gd gđ ge gê gg gh gi gk gl gm gn go gô gơ gp gq gr gs gt gu gư gv gx gy\nha hă hâ hb hc hd hđ he hê hg hh hi hk hl hm hn ho hô hơ hp hq hr hs ht hu hư hv hx hy\nia iă iâ ib ic id iđ ie iê ig ih ii ik il im in io iô iơ ip iq ir is it iu iư iv ix iy\nka kă kâ kb kc kd kđ ke kê kg kh ki kk kl km kn ko kô kơ kp kq kr ks kt ku kư kv kx ky\nla lă lâ lb lc ld lđ le lê lg lh li lk ll lm ln lo lô lơ lp lq lr ls lt lu lư lv lx ly\nma mă mâ mb mc md mđ me mê mg mh mi mk ml mm mn mo mô mơ mp mq mr ms mt mu mư mv mx my\nna nă nâ nb nc nd nđ ne nê ng nh ni nk nl nm nn no nô nơ np nq nr ns nt nu nư nv nx ny\noa oă oâ ob oc od ođ oe oê og oh oi ok ol om on oo oô oơ op oq or os ot ou oư ov ox oy\nôa ôă ôâ ôb ôc ôd ôđ ôe ôê ôg ôh ôi ôk ôl ôm ôn ôo ôô ôơ ôp ôq ôr ôs ôt ôu ôư ôv ôx ôy\nơa ơă ơâ ơb ơc ơd ơđ ơe ơê ơg ơh ơi ơk ơl ơm ơn ơo ơô ơơ ơp ơq ơr ơs ơt ơu ơư ơv ơx ơy\npa pă pâ pb pc pd pđ pe pê pg ph pi pk pl pm pn po pô pơ pp pq pr ps pt pu pư pv px py\nqa qă qâ qb qc qd qđ qe qê qg qh qi qk ql qm qn qo qô qơ qp qq qr qs qt qu qư qv qx qy\nra ră râ rb rc rd rđ re rê rg rh ri rk rl rm rn ro rô rơ rp rq rr rs rt ru rư rv rx ry\nsa să sâ sb sc sd sđ se sê sg sh si sk sl sm sn so sô sơ sp sq sr ss st su sư sv sx sy\nta tă tâ tb tc td tđ te tê tg th ti tk tl tm tn to tô tơ tp tq tr ts tt tu tư tv tx ty\nua uă uâ ub uc ud uđ ue uê ug uh ui uk ul um un uo uô uơ up uq ur us ut uu uư uv ux uy\nưa ưă ưâ ưb ưc ưd ưđ ưe ưê ưg ưh ưi ưk ưl ưm ưn ưo ưô ươ ưp ưq ưr ưs ưt ưu ưư ưv ưx ưy\nva vă vâ vb vc vd vđ ve vê vg vh vi vk vl vm vn vo vô vơ vp vq vr vs vt vu vư vv vx vy\nxa xă xâ xb xc xd xđ xe xê xg xh xi xk xl xm xn xo xô xơ xp xq xr xs xt xu xư xv xx xy\nya yă yâ yb yc yd yđ ye yê yg yh yi yk yl ym yn yo yô yơ yp yq yr ys yt yu yư yv yx yy",
+ "cite_references_link_accessibility_label": "Nhảy lên",
+ "cite_references_link_many_accessibility_label": "Nhảy lên tới:"
+}
diff --git a/extensions/Cite/i18n/core/vo.json b/extensions/Cite/i18n/vo.json
index 5d0915c5..5d0915c5 100644
--- a/extensions/Cite/i18n/core/vo.json
+++ b/extensions/Cite/i18n/vo.json
diff --git a/extensions/Cite/i18n/core/yi.json b/extensions/Cite/i18n/yi.json
index 35da95e1..35da95e1 100644
--- a/extensions/Cite/i18n/core/yi.json
+++ b/extensions/Cite/i18n/yi.json
diff --git a/extensions/Cite/i18n/core/yue.json b/extensions/Cite/i18n/yue.json
index 96a305e5..96a305e5 100644
--- a/extensions/Cite/i18n/core/yue.json
+++ b/extensions/Cite/i18n/yue.json
diff --git a/extensions/Cite/i18n/zh-hans.json b/extensions/Cite/i18n/zh-hans.json
new file mode 100644
index 00000000..534bd48b
--- /dev/null
+++ b/extensions/Cite/i18n/zh-hans.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gaoxuewei",
+ "Liangent",
+ "PhiLiP",
+ "Philip",
+ "TianyinLee",
+ "Zhuyifei1999",
+ "乌拉跨氪",
+ "Mywood",
+ "Impersonator 1",
+ "Liuxinyu970226"
+ ]
+ },
+ "cite-desc": "增加用于引用的<nowiki><ref[ name=id]></nowiki>和<nowiki><references/></nowiki>标签",
+ "cite_error": "引用错误:$1",
+ "cite_error_ref_numeric_key": "无效<code>&lt;ref&gt;</code>标签;name属性不能是单一的数字,请使用可辨识的标题",
+ "cite_error_ref_no_key": "无效<code>&lt;ref&gt;</code>标签;未填内容的引用必须填写name属性",
+ "cite_error_ref_too_many_keys": "无效<code>&lt;ref&gt;</code>标签;name属性非法,可能是内容过长",
+ "cite_error_ref_no_input": "无效<code>&lt;ref&gt;</code>标签;未填name属性的引用必须填写内容",
+ "cite_error_references_invalid_parameters": "无效<code>&lt;references&gt;</code>标签;不允许填写参数,请使用<code>&lt;references /&gt;</code>",
+ "cite_error_references_invalid_parameters_group": "无效<code>&lt;references&gt;</code>标签;只允许填写“group”参数,请使用<code>&lt;references /&gt;</code>或<code>&lt;references group=\"...\" /&gt;</code>",
+ "cite_error_references_no_backlink_label": "自定义回链标签耗尽,请在<nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>中定义更多的标签。",
+ "cite_error_no_link_label_group": "组“$1”的自定义链接标签耗尽,请在<nowiki>[[MediaWiki:$2]]</nowiki>中定义更多的标签。",
+ "cite_error_references_no_text": "无效<code>&lt;ref&gt;</code>标签;未给name属性为<code>$1</code>的引用提供文字",
+ "cite_error_included_ref": "没有找到与<code>&lt;/ref&gt;</code>对应的<code>&lt;ref&gt;</code>标签",
+ "cite_error_group_refs_without_references": "组名为“$1”的<code>&lt;ref&gt;</code>标签存在,但没有找到相应的<code>&lt;references group=\"$1\"/&gt;</code>标签,或结尾的<code>&lt;/ref&gt;</code>标签丢失",
+ "cite_error_references_group_mismatch": "<code>&lt;references&gt;</code>的<code>&lt;ref&gt;</code>标记带有冲突的组(group)属性“$1”。",
+ "cite_error_references_missing_group": "<code>&lt;references&gt;</code>中定义的<code>&lt;ref&gt;</code>标记带有未在前文中出现的组(group)属性“$1”。",
+ "cite_error_references_missing_key": "在<code>&lt;references&gt;</code>中以“$1”名字定义的<code>&lt;ref&gt;</code>标签没有在先前的文字中使用。",
+ "cite_error_references_no_key": "<code>&lt;references&gt;</code>中定义的<code>&lt;ref&gt;</code>没有给出名称(name)属性。",
+ "cite_error_empty_references_define": "<code>&lt;references&gt;</code>中定义的<code>&lt;ref&gt;</code>的名称(name)“$1”为空。",
+ "cite_references_link_accessibility_label": "跳转",
+ "cite_references_link_many_accessibility_label": "跳转至:"
+}
diff --git a/extensions/Cite/i18n/core/zh-hant.json b/extensions/Cite/i18n/zh-hant.json
index e3b13baf..e3b13baf 100644
--- a/extensions/Cite/i18n/core/zh-hant.json
+++ b/extensions/Cite/i18n/zh-hant.json
diff --git a/extensions/Cite/modules/ext.cite.css b/extensions/Cite/modules/ext.cite.css
index 68fde431..d24ce591 100644
--- a/extensions/Cite/modules/ext.cite.css
+++ b/extensions/Cite/modules/ext.cite.css
@@ -22,3 +22,16 @@
-ms-user-select: none;
user-select: none;
}
+
+/* Highlight clicked reference in blue to help navigation */
+ol.references li:target,
+sup.reference:target {
+ background-color: #def; /* fallback */
+ background-color: rgba(0, 127, 255, 0.133);
+}
+
+@media print {
+ .mw-cite-backlink {
+ display: none;
+ }
+}
diff --git a/extensions/Cite/modules/ext.specialcite.css b/extensions/Cite/modules/ext.specialcite.css
deleted file mode 100644
index 65a4e40e..00000000
--- a/extensions/Cite/modules/ext.specialcite.css
+++ /dev/null
@@ -1,14 +0,0 @@
-.mw-specialcite-bibliographic {
- border: 1px solid grey;
- background: #E6E8FA;
- width: 90%;
- padding: 15px 30px 15px 30px;
- margin: 10px auto;
-}
-.mw-specialcite-styles {
- border: 1px solid grey;
- width: 90%;
- padding: 15px 30px 15px 30px;
- margin: 10px auto;
-}
-
diff --git a/extensions/CiteThisPage/COPYING.txt b/extensions/CiteThisPage/COPYING.txt
new file mode 100644
index 00000000..d159169d
--- /dev/null
+++ b/extensions/CiteThisPage/COPYING.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/extensions/CiteThisPage/CiteThisPage.alias.php b/extensions/CiteThisPage/CiteThisPage.alias.php
new file mode 100644
index 00000000..44656578
--- /dev/null
+++ b/extensions/CiteThisPage/CiteThisPage.alias.php
@@ -0,0 +1,445 @@
+<?php
+/**
+ * Aliases for Special:CiteThisPage
+ *
+ * @file
+ * @ingroup Extensions
+ */
+// @codingStandardsIgnoreFile
+
+$specialPageAliases = array();
+
+/** English (English) */
+$specialPageAliases['en'] = array(
+ 'CiteThisPage' => array( 'CiteThisPage', 'Cite' ),
+);
+
+/** Arabic (العربية) */
+$specialPageAliases['ar'] = array(
+ 'CiteThisPage' => array( 'استشهاد' ),
+);
+
+/** Egyptian Spoken Arabic (مصرى) */
+$specialPageAliases['arz'] = array(
+ 'CiteThisPage' => array( 'استشهاد' ),
+);
+
+/** Assamese (অসমীয়া) */
+$specialPageAliases['as'] = array(
+ 'CiteThisPage' => array( 'উদ্ধৃতি' ),
+);
+
+/** Avaric (авар) */
+$specialPageAliases['av'] = array(
+ 'CiteThisPage' => array( 'Цитата' ),
+);
+
+/** Bikol Central (Bikol Central) */
+$specialPageAliases['bcl'] = array(
+ 'CiteThisPage' => array( 'Sambitón' ),
+);
+
+/** Bulgarian (български) */
+$specialPageAliases['bg'] = array(
+ 'CiteThisPage' => array( 'Цитиране' ),
+);
+
+/** Western Balochi (بلوچی رخشانی) */
+$specialPageAliases['bgn'] = array(
+ 'CiteThisPage' => array( 'یات_کورت' ),
+);
+
+/** Banjar (Bahasa Banjar) */
+$specialPageAliases['bjn'] = array(
+ 'CiteThisPage' => array( 'Juhut' ),
+);
+
+/** Breton (brezhoneg) */
+$specialPageAliases['br'] = array(
+ 'CiteThisPage' => array( 'Menegiñ' ),
+);
+
+/** Bosnian (bosanski) */
+$specialPageAliases['bs'] = array(
+ 'CiteThisPage' => array( 'Citiraj' ),
+);
+
+/** буряад (буряад) */
+$specialPageAliases['bxr'] = array(
+ 'CiteThisPage' => array( 'Сайт' ),
+);
+
+/** Catalan (català) */
+$specialPageAliases['ca'] = array(
+ 'CiteThisPage' => array( 'Citau', 'Citeu' ),
+);
+
+/** Min Dong Chinese (Mìng-dĕ̤ng-ngṳ̄) */
+$specialPageAliases['cdo'] = array(
+ 'CiteThisPage' => array( '註' ),
+);
+
+/** Chechen (нохчийн) */
+$specialPageAliases['ce'] = array(
+ 'CiteThisPage' => array( 'Дош' ),
+);
+
+/** Czech (čeština) */
+$specialPageAliases['cs'] = array(
+ 'CiteThisPage' => array( 'Citovat' ),
+);
+
+/** Danish (dansk) */
+$specialPageAliases['da'] = array(
+ 'CiteThisPage' => array( 'Citer' ),
+);
+
+/** German (Deutsch) */
+$specialPageAliases['de'] = array(
+ 'CiteThisPage' => array( 'Zitierhilfe', 'Zitieren' ),
+);
+
+/** Zazaki (Zazaki) */
+$specialPageAliases['diq'] = array(
+ 'CiteThisPage' => array( 'Sita' ),
+);
+
+/** Lower Sorbian (dolnoserbski) */
+$specialPageAliases['dsb'] = array(
+ 'CiteThisPage' => array( 'Citěrowańska_pomoc' ),
+);
+
+/** Greek (Ελληνικά) */
+$specialPageAliases['el'] = array(
+ 'CiteThisPage' => array( 'ΠαραπομπήΑυτήΤηΣελίδα', 'Παραπομπή' ),
+);
+
+/** Esperanto (Esperanto) */
+$specialPageAliases['eo'] = array(
+ 'CiteThisPage' => array( 'Citi' ),
+);
+
+/** Spanish (español) */
+$specialPageAliases['es'] = array(
+ 'CiteThisPage' => array( 'Citar' ),
+);
+
+/** Estonian (eesti) */
+$specialPageAliases['et'] = array(
+ 'CiteThisPage' => array( 'Tsiteerimine' ),
+);
+
+/** Persian (فارسی) */
+$specialPageAliases['fa'] = array(
+ 'CiteThisPage' => array( 'یادکرد' ),
+);
+
+/** Finnish (suomi) */
+$specialPageAliases['fi'] = array(
+ 'CiteThisPage' => array( 'Viittaus' ),
+);
+
+/** French (français) */
+$specialPageAliases['fr'] = array(
+ 'CiteThisPage' => array( 'Citer' ),
+);
+
+/** Franco-Provençal (arpetan) */
+$specialPageAliases['frp'] = array(
+ 'CiteThisPage' => array( 'Citar' ),
+);
+
+/** Western Frisian (Frysk) */
+$specialPageAliases['fy'] = array(
+ 'CiteThisPage' => array( 'Sitearje' ),
+);
+
+/** Galician (galego) */
+$specialPageAliases['gl'] = array(
+ 'CiteThisPage' => array( 'Cita', 'Citar' ),
+);
+
+/** Swiss German (Alemannisch) */
+$specialPageAliases['gsw'] = array(
+ 'CiteThisPage' => array( 'Zitierhilf' ),
+);
+
+/** Hebrew (עברית) */
+$specialPageAliases['he'] = array(
+ 'CiteThisPage' => array( 'ציטוט_דף_זה', 'ציטוט' ),
+);
+
+/** Croatian (hrvatski) */
+$specialPageAliases['hr'] = array(
+ 'CiteThisPage' => array( 'Citiraj' ),
+);
+
+/** Upper Sorbian (hornjoserbsce) */
+$specialPageAliases['hsb'] = array(
+ 'CiteThisPage' => array( 'Citowanska_pomoc' ),
+);
+
+/** Xiang Chinese (湘语) */
+$specialPageAliases['hsn'] = array(
+ 'CiteThisPage' => array( '建脚注' ),
+);
+
+/** Haitian (Kreyòl ayisyen) */
+$specialPageAliases['ht'] = array(
+ 'CiteThisPage' => array( 'Site' ),
+);
+
+/** Hungarian (magyar) */
+$specialPageAliases['hu'] = array(
+ 'CiteThisPage' => array( 'Hivatkozás', 'Irodalomjegyzék' ),
+);
+
+/** Interlingua (interlingua) */
+$specialPageAliases['ia'] = array(
+ 'CiteThisPage' => array( 'Citation' ),
+);
+
+/** Indonesian (Bahasa Indonesia) */
+$specialPageAliases['id'] = array(
+ 'CiteThisPage' => array( 'Kutip' ),
+);
+
+/** Igbo (Igbo) */
+$specialPageAliases['ig'] = array(
+ 'CiteThisPage' => array( 'Dépùtà' ),
+);
+
+/** Ido (Ido) */
+$specialPageAliases['io'] = array(
+ 'CiteThisPage' => array( 'Citar' ),
+);
+
+/** Italian (italiano) */
+$specialPageAliases['it'] = array(
+ 'CiteThisPage' => array( 'Cita' ),
+);
+
+/** Japanese (日本語) */
+$specialPageAliases['ja'] = array(
+ 'CiteThisPage' => array( 'このページを引用', '引用' ),
+);
+
+/** Korean (한국어) */
+$specialPageAliases['ko'] = array(
+ 'CiteThisPage' => array( '이문서인용', '인용' ),
+);
+
+/** Colognian (Ripoarisch) */
+$specialPageAliases['ksh'] = array(
+ 'CiteThisPage' => array( 'Zitteere' ),
+);
+
+/** Cornish (kernowek) */
+$specialPageAliases['kw'] = array(
+ 'CiteThisPage' => array( 'Devynna' ),
+);
+
+/** Ladino (Ladino) */
+$specialPageAliases['lad'] = array(
+ 'CiteThisPage' => array( 'MostrarManaderos' ),
+);
+
+/** Luxembourgish (Lëtzebuergesch) */
+$specialPageAliases['lb'] = array(
+ 'CiteThisPage' => array( 'Zitéierhellëf' ),
+);
+
+/** Literary Chinese (文言) */
+$specialPageAliases['lzh'] = array(
+ 'CiteThisPage' => array( '引文' ),
+);
+
+/** Macedonian (македонски) */
+$specialPageAliases['mk'] = array(
+ 'CiteThisPage' => array( 'Навод' ),
+);
+
+/** Malayalam (മലയാളം) */
+$specialPageAliases['ml'] = array(
+ 'CiteThisPage' => array( 'അവലംബം' ),
+);
+
+/** Marathi (मराठी) */
+$specialPageAliases['mr'] = array(
+ 'CiteThisPage' => array( 'संदर्भद्या' ),
+);
+
+/** Malay (Bahasa Melayu) */
+$specialPageAliases['ms'] = array(
+ 'CiteThisPage' => array( 'Petik_laman_ini', 'Petik' ),
+);
+
+/** Maltese (Malti) */
+$specialPageAliases['mt'] = array(
+ 'CiteThisPage' => array( 'Iċċita' ),
+);
+
+/** Nāhuatl (Nāhuatl) */
+$specialPageAliases['nah'] = array(
+ 'CiteThisPage' => array( 'Tlahtoa', 'Citar' ),
+);
+
+/** Norwegian Bokmål (norsk bokmål) */
+$specialPageAliases['nb'] = array(
+ 'CiteThisPage' => array( 'Siteringshjelp' ),
+);
+
+/** Low German (Plattdüütsch) */
+$specialPageAliases['nds'] = array(
+ 'CiteThisPage' => array( 'Ziteerhelp' ),
+);
+
+/** Low Saxon (Netherlands) (Nedersaksies) */
+$specialPageAliases['nds-nl'] = array(
+ 'CiteThisPage' => array( 'Siteerhulpe' ),
+);
+
+/** Dutch (Nederlands) */
+$specialPageAliases['nl'] = array(
+ 'CiteThisPage' => array( 'Citeren' ),
+);
+
+/** Norwegian Nynorsk (norsk nynorsk) */
+$specialPageAliases['nn'] = array(
+ 'CiteThisPage' => array( 'Siter' ),
+);
+
+/** Occitan (occitan) */
+$specialPageAliases['oc'] = array(
+ 'CiteThisPage' => array( 'Citar' ),
+);
+
+/** Polish (polski) */
+$specialPageAliases['pl'] = array(
+ 'CiteThisPage' => array( 'Cytuj' ),
+);
+
+/** Pashto (پښتو) */
+$specialPageAliases['ps'] = array(
+ 'CiteThisPage' => array( 'درک' ),
+);
+
+/** Portuguese (português) */
+$specialPageAliases['pt'] = array(
+ 'CiteThisPage' => array( 'Citar' ),
+);
+
+/** Brazilian Portuguese (português do Brasil) */
+$specialPageAliases['pt-br'] = array(
+ 'CiteThisPage' => array( 'Citar' ),
+);
+
+/** Romanian (română) */
+$specialPageAliases['ro'] = array(
+ 'CiteThisPage' => array( 'Citează' ),
+);
+
+/** Russian (русский) */
+$specialPageAliases['ru'] = array(
+ 'CiteThisPage' => array( 'Цитата' ),
+);
+
+/** Sanskrit (संस्कृतम्) */
+$specialPageAliases['sa'] = array(
+ 'CiteThisPage' => array( 'उद्धृत' ),
+);
+
+/** Sicilian (sicilianu) */
+$specialPageAliases['scn'] = array(
+ 'CiteThisPage' => array( 'Cita' ),
+);
+
+/** Slovak (slovenčina) */
+$specialPageAliases['sk'] = array(
+ 'CiteThisPage' => array( 'Citovať' ),
+);
+
+/** Slovenian (slovenščina) */
+$specialPageAliases['sl'] = array(
+ 'CiteThisPage' => array( 'Navedi' ),
+);
+
+/** Albanian (shqip) */
+$specialPageAliases['sq'] = array(
+ 'CiteThisPage' => array( 'Citim' ),
+);
+
+/** Serbian (Cyrillic script) (српски (ћирилица)‎) */
+$specialPageAliases['sr-ec'] = array(
+ 'CiteThisPage' => array( 'Цитирај' ),
+);
+
+/** Swedish (svenska) */
+$specialPageAliases['sv'] = array(
+ 'CiteThisPage' => array( 'Citera' ),
+);
+
+/** Swahili (Kiswahili) */
+$specialPageAliases['sw'] = array(
+ 'CiteThisPage' => array( 'Taja', 'Hakikisha' ),
+);
+
+/** Tetum (tetun) */
+$specialPageAliases['tet'] = array(
+ 'CiteThisPage' => array( 'Sita' ),
+);
+
+/** Thai (ไทย) */
+$specialPageAliases['th'] = array(
+ 'CiteThisPage' => array( 'อ้างอิง' ),
+);
+
+/** Tagalog (Tagalog) */
+$specialPageAliases['tl'] = array(
+ 'CiteThisPage' => array( 'Sipiin' ),
+);
+
+/** Turkish (Türkçe) */
+$specialPageAliases['tr'] = array(
+ 'CiteThisPage' => array( 'KaynakGöster' ),
+);
+
+/** Ukrainian (українська) */
+$specialPageAliases['uk'] = array(
+ 'CiteThisPage' => array( 'Цитата' ),
+);
+
+/** Urdu (اردو) */
+$specialPageAliases['ur'] = array(
+ 'CiteThisPage' => array( 'حوالہ' ),
+);
+
+/** Venetian (vèneto) */
+$specialPageAliases['vec'] = array(
+ 'CiteThisPage' => array( 'Cita' ),
+);
+
+/** Vietnamese (Tiếng Việt) */
+$specialPageAliases['vi'] = array(
+ 'CiteThisPage' => array( 'Trích_dẫn' ),
+);
+
+/** Yiddish (ייִדיש) */
+$specialPageAliases['yi'] = array(
+ 'CiteThisPage' => array( 'ציטירן' ),
+);
+
+/** Cantonese (粵語) */
+$specialPageAliases['yue'] = array(
+ 'CiteThisPage' => array( '引用' ),
+);
+
+/** Simplified Chinese (中文(简体)‎) */
+$specialPageAliases['zh-hans'] = array(
+ 'CiteThisPage' => array( '引用此页面', '引用' ),
+);
+
+/** Traditional Chinese (中文(繁體)‎) */
+$specialPageAliases['zh-hant'] = array(
+ 'CiteThisPage' => array( '引用' ),
+); \ No newline at end of file
diff --git a/extensions/CiteThisPage/CiteThisPage.hooks.php b/extensions/CiteThisPage/CiteThisPage.hooks.php
new file mode 100644
index 00000000..e238b4ff
--- /dev/null
+++ b/extensions/CiteThisPage/CiteThisPage.hooks.php
@@ -0,0 +1,45 @@
+<?php
+
+class CiteThisPageHooks {
+
+ /**
+ * @param SkinTemplate $skintemplate
+ * @param $nav_urls
+ * @param $oldid
+ * @param $revid
+ * @return bool
+ */
+ public static function onSkinTemplateBuildNavUrlsNav_urlsAfterPermalink( &$skintemplate, &$nav_urls, &$oldid, &$revid ) {
+ // check whether we’re in the right namespace, the $revid has the correct type and is not empty
+ // (which would mean that the current page doesn’t exist)
+ $title = $skintemplate->getTitle();
+ if ( $title->isContentPage() && $revid !== 0 && !empty( $revid ) )
+ $nav_urls['citeThisPage'] = array(
+ 'args' => array( 'page' => $title->getPrefixedDBkey(), 'id' => $revid )
+ );
+
+ return true;
+ }
+
+ /**
+ * @param Skin $skin
+ * @return bool
+ */
+ public static function onSkinTemplateToolboxEnd( &$skin ) {
+ if ( isset( $skin->data['nav_urls']['citeThisPage'] ) ) {
+ echo Html::rawElement(
+ 'li',
+ array( 'id' => 't-cite' ),
+ Linker::link(
+ SpecialPage::getTitleFor( 'CiteThisPage' ),
+ wfMessage( 'citethispage-link' )->escaped(),
+ # Used message keys: 'tooltip-citethispage', 'accesskey-citethispage'
+ Linker::tooltipAndAccessKeyAttribs( 'citethispage' ),
+ $skin->data['nav_urls']['citeThisPage']['args']
+ )
+ );
+ }
+
+ return true;
+ }
+}
diff --git a/extensions/CiteThisPage/CiteThisPage.php b/extensions/CiteThisPage/CiteThisPage.php
new file mode 100644
index 00000000..34b85e04
--- /dev/null
+++ b/extensions/CiteThisPage/CiteThisPage.php
@@ -0,0 +1,15 @@
+<?php
+
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'CiteThisPage' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['CiteThisPage'] = __DIR__ . '/i18n';
+ $wgExtensionMessagesFiles['CiteThisPageAliases'] = __DIR__ . '/CiteThisPage.alias.php';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for CiteThisPage extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the CiteThisPage extension requires MediaWiki 1.25+' );
+}
diff --git a/extensions/CiteThisPage/SpecialCiteThisPage.php b/extensions/CiteThisPage/SpecialCiteThisPage.php
new file mode 100644
index 00000000..6882f24c
--- /dev/null
+++ b/extensions/CiteThisPage/SpecialCiteThisPage.php
@@ -0,0 +1,176 @@
+<?php
+
+class SpecialCiteThisPage extends SpecialPage {
+ public function __construct() {
+ parent::__construct( 'CiteThisPage' );
+ }
+
+ public function execute( $par ) {
+ global $wgUseTidy;
+
+ // Having tidy on causes whitespace and <pre> tags to
+ // be generated around the output of the CiteThisPageOutput
+ // class TODO FIXME.
+ $wgUseTidy = false;
+
+ $this->setHeaders();
+ $this->outputHeader();
+
+ $page = $par !== null ? $par : $this->getRequest()->getText( 'page' );
+ $title = Title::newFromText( $page );
+
+ $this->showForm( $title );
+
+ if ( $title && $title->exists() ) {
+ $id = $this->getRequest()->getInt( 'id' );
+ $cout = new CiteThisPageOutput( $title, $id );
+ $cout->execute();
+ }
+ }
+
+ private function showForm( Title $title = null ) {
+ $this->getOutput()->addHTML(
+ Xml::openElement( 'form',
+ array(
+ 'id' => 'specialCiteThisPage',
+ 'method' => 'get',
+ 'action' => wfScript(),
+ ) ) .
+ Html::hidden( 'title', SpecialPage::getTitleFor( 'CiteThisPage' )->getPrefixedDBkey() ) .
+ Xml::openElement( 'label' ) .
+ $this->msg( 'citethispage-change-target' )->escaped() . ' ' .
+ Xml::element( 'input',
+ array(
+ 'type' => 'text',
+ 'size' => 30,
+ 'name' => 'page',
+ 'value' => $title ? $title->getPrefixedText() : ''
+ ),
+ ''
+ ) .
+ ' ' .
+ Xml::element( 'input',
+ array(
+ 'type' => 'submit',
+ 'value' => $this->msg( 'citethispage-change-submit' )->escaped()
+ ),
+ ''
+ ) .
+ Xml::closeElement( 'label' ) .
+ Xml::closeElement( 'form' )
+ );
+ }
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
+}
+
+class CiteThisPageOutput {
+ /**
+ * @var Title
+ */
+ public $mTitle;
+
+ /**
+ * @var Article
+ */
+ public $mArticle;
+
+ public $mId;
+
+ /**
+ * @var Parser
+ */
+ public $mParser;
+
+ /**
+ * @var ParserOptions
+ */
+ public $mParserOptions;
+
+ public $mSpTitle;
+
+ function __construct( $title, $id ) {
+ global $wgHooks, $wgParser;
+
+ $this->mTitle = $title;
+ $this->mArticle = new Article( $title );
+ $this->mId = $id;
+
+ $wgHooks['ParserGetVariableValueVarCache'][] = array( $this, 'varCache' );
+
+ $this->genParserOptions();
+ $this->genParser();
+
+ $wgParser->setHook( 'citation', array( $this, 'citationTagParse' ) );
+ }
+
+ function execute() {
+ global $wgOut, $wgParser, $wgHooks;
+
+ $wgHooks['ParserGetVariableValueTs'][] = array( $this, 'timestamp' );
+
+ $msg = wfMessage( 'citethispage-content' )->inContentLanguage()->plain();
+ if ( $msg == '' ) {
+ # With MediaWiki 1.20 the plain text files were deleted and the text moved into SpecialCite.i18n.php
+ # This code is kept for b/c in case an installation has its own file "citethispage-content-xx"
+ # for a previously not supported language.
+ global $wgContLang, $wgContLanguageCode;
+ $dir = dirname( __FILE__ ) . DIRECTORY_SEPARATOR;
+ $code = $wgContLang->lc( $wgContLanguageCode );
+ if ( file_exists( "${dir}citethispage-content-$code" ) ) {
+ $msg = file_get_contents( "${dir}citethispage-content-$code" );
+ } elseif( file_exists( "${dir}citethispage-content" ) ){
+ $msg = file_get_contents( "${dir}citethispage-content" );
+ }
+ }
+ $ret = $wgParser->parse( $msg, $this->mTitle, $this->mParserOptions, false, true, $this->getRevId() );
+ $wgOut->addModuleStyles( 'ext.citeThisPage' );
+
+ # Introduced in 1.24
+ if( method_exists( $wgOut, 'addParserOutputContent' ) ) {
+ $wgOut->addParserOutputContent( $ret );
+ } else {
+ $wgOut->addHTML( $ret->getText() );
+ }
+ }
+
+ function genParserOptions() {
+ global $wgUser;
+ $this->mParserOptions = ParserOptions::newFromUser( $wgUser );
+ $this->mParserOptions->setDateFormat( 'default' );
+ $this->mParserOptions->setEditSection( false );
+ }
+
+ function genParser() {
+ $this->mParser = new Parser;
+ $this->mSpTitle = SpecialPage::getTitleFor( 'CiteThisPage' );
+ }
+
+ function citationTagParse( $in, $argv ) {
+ $ret = $this->mParser->parse( $in, $this->mSpTitle, $this->mParserOptions, false );
+
+ return $ret->getText();
+ }
+
+ function varCache() {
+ return false;
+ }
+
+ function timestamp( &$parser, &$ts ) {
+ if ( isset( $parser->mTagHooks['citation'] ) ) {
+ $ts = wfTimestamp( TS_UNIX, $this->mArticle->getTimestamp() );
+ }
+
+ return true;
+ }
+
+ function getRevId() {
+ if ( $this->mId ) {
+ return $this->mId;
+ } else {
+ return $this->mTitle->getLatestRevID();
+ }
+ }
+}
diff --git a/extensions/CiteThisPage/extension.json b/extensions/CiteThisPage/extension.json
new file mode 100644
index 00000000..bf81d4c8
--- /dev/null
+++ b/extensions/CiteThisPage/extension.json
@@ -0,0 +1,44 @@
+{
+ "name": "CiteThisPage",
+ "author": [
+ "Ævar Arnfjörð Bjarmason",
+ "James D. Forrester"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:CiteThisPage",
+ "descriptionmsg": "citethispage-desc",
+ "license-name": "GPL-2.0+",
+ "type": "specialpage",
+ "ExtensionMessagesFiles": {
+ "CiteThisPageAliases": "CiteThisPage.alias.php"
+ },
+ "MessagesDirs": {
+ "CiteThisPage": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "SkinTemplateBuildNavUrlsNav_urlsAfterPermalink": [
+ "CiteThisPageHooks::onSkinTemplateBuildNavUrlsNav_urlsAfterPermalink"
+ ],
+ "SkinTemplateToolboxEnd": [
+ "CiteThisPageHooks::onSkinTemplateToolboxEnd"
+ ]
+ },
+ "ResourceModules": {
+ "ext.citeThisPage": {
+ "styles": "ext.citeThisPage.css"
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "modules",
+ "remoteExtPath": "CiteThisPage/modules"
+ },
+ "SpecialPages": {
+ "CiteThisPage": "SpecialCiteThisPage"
+ },
+ "AutoloadClasses": {
+ "SpecialCiteThisPage": "SpecialCiteThisPage.php",
+ "CiteThisPageOutput": "SpecialCiteThisPage.php",
+ "CiteThisPageHooks": "CiteThisPage.hooks.php"
+ }
+}
diff --git a/extensions/CiteThisPage/i18n/ace.json b/extensions/CiteThisPage/i18n/ace.json
new file mode 100644
index 00000000..907cd60d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ace.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Si Gam Acèh"
+ ]
+ },
+ "citethispage-link": "Cok ôn nyoë"
+}
diff --git a/extensions/CiteThisPage/i18n/af.json b/extensions/CiteThisPage/i18n/af.json
new file mode 100644
index 00000000..ca7c9a81
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/af.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Naudefj",
+ "SPQRobin"
+ ]
+ },
+ "citethispage": "Aanhaling",
+ "citethispage-desc": "Maak 'n [[Special:Cite|spesiale bladsy vir sitasie]], en 'n skakel daarna in hulpmiddels beskikbaar",
+ "citethispage-link": "Haal dié blad aan",
+ "tooltip-citethispage": "Inligting oor hoe u hierdie bladsy kan citeer",
+ "citethispage-change-submit": "Aanhaling",
+ "citethispage-change-target": "Bladsy:"
+}
diff --git a/extensions/CiteThisPage/i18n/am.json b/extensions/CiteThisPage/i18n/am.json
new file mode 100644
index 00000000..bb239bb2
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/am.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Codex Sinaiticus",
+ "Teferra"
+ ]
+ },
+ "citethispage": "መጥቀሻ",
+ "citethispage-link": "ይህንን ገጽ አጣቅስ",
+ "citethispage-change-submit": "ዝርዝሮች ይታዩ",
+ "citethispage-change-target": "አርዕስት፦"
+}
diff --git a/extensions/CiteThisPage/i18n/an.json b/extensions/CiteThisPage/i18n/an.json
new file mode 100644
index 00000000..e67324cd
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/an.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Juanpabl"
+ ]
+ },
+ "citethispage": "Citar",
+ "citethispage-desc": "Adibe un vinclo y una pachina especial de [[Special:Cite|cita]]",
+ "citethispage-link": "Citar ista pachina",
+ "tooltip-citethispage": "Información de como citar ista pachina",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Pachina:"
+}
diff --git a/extensions/CiteThisPage/i18n/ar.json b/extensions/CiteThisPage/i18n/ar.json
new file mode 100644
index 00000000..f1058573
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ar.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25",
+ "OsamaK",
+ "Jdforrester"
+ ]
+ },
+ "citethispage": "استشهاد",
+ "citethispage-desc": "يضيف صفحة [[Special:CiteThisPage|استشهاد]] خاصة ووصلة صندوق أدوات",
+ "citethispage-link": "استشهد بهذه الصفحة",
+ "tooltip-citethispage": "معلومات عن كيفية الاستشهاد بالصفحة",
+ "citethispage-change-submit": "استشهاد",
+ "citethispage-change-target": "الصفحة:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== تفاصيل التأليف ل{{FULLPAGENAME}} ==\n\n* اسم الصفحة: {{FULLPAGENAME}}\n* المؤلف: مساهمو {{SITENAME}}\n* الناشر: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* تاريخ آخر مراجعة: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* تاريخ الاسترجاع: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* وصلة دائمة: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* رقم نسخة الصفحة: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== أنماط الاستشهاد ل{{FULLPAGENAME}} ==\n\n=== [[APA style|نمط APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|نمط MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|نمط MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|نمط شيكاغو]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|نمط CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|نمط Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== مدخلة [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nعند استخدام وصلة مجموعة [[LaTeX]] (<code>\\usepackage{url}</code> في مكان ما) مما يؤدي إى إعطاء عناوين ويب مهيأة بشكل أفضل، التالي ربما يكون مفضلا:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/arc.json b/extensions/CiteThisPage/i18n/arc.json
new file mode 100644
index 00000000..3e0062ed
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/arc.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Basharh"
+ ]
+ },
+ "citethispage": "ܡܣܗܕ",
+ "citethispage-link": "ܡܣܗܕ ܥܠ ܗܕܐ ܦܐܬܐ",
+ "tooltip-citethispage": "ܝܕ̈ܥܬܐ ܥܠ ܐܝܟܢܐ ܕܡܣܗܕ ܥܠ ܦܐܬܐ",
+ "citethispage-change-submit": "ܡܣܗܕ",
+ "citethispage-change-target": "ܦܐܬܐ:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== ܐܪ̈ܝܟܬܐ ܕܦܘܓܪܦܐ ܕ {{FULLPAGENAME}} ==\n\n* ܫܡܐ ܕܦܐܬܐ: {{FULLPAGENAME}}\n* ܣܝܘܡܐ: ܫܘܬܦܢ̈ܐ ܕ {{SITENAME}}\n* ܡܦܪܣܐ: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* ܣܝܩܘܡܐ ܕܬܢܝܬܐ ܐܚܪܝܬܐ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* ܣܝܩܘܡܐ ܕܡܬܦܢܝܢܘܬܐ: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* ܐܣܘܪܐ ܦܝܘܫܐ: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ܗܝܝܘܬܐ ܕܨܚܚܐ ܕܦܐܬܐ: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== ܙܢܝ̈ܐ ܕܡܣܗܕܬܐ ܕ {{FULLPAGENAME}} ==\n\n=== [[ܙܢܐ ܕ APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|ܙܢܐ ܕ MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|ܙܢܐ ܕ MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style| ܙܢܐ ܕ Chicago]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|ܙܢܐ ܕ CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|ܙܢܐ ܕ Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== ܡܥܠܬܐ ܕ [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/arn.json b/extensions/CiteThisPage/i18n/arn.json
new file mode 100644
index 00000000..ede2fe46
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/arn.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaniw",
+ "Remember the dot"
+ ]
+ },
+ "citethispage": "Konvmpan",
+ "citethispage-desc": "Yomvmi kiñe wicu aztapvl ñi [[Special:Cite|konvmpan]] mew ka jasun kvzawpeyvm mew",
+ "citethispage-link": "Konvmpape faci xoy",
+ "tooltip-citethispage": "Cumley konvmpageay faci xoy",
+ "citethispage-change-submit": "Konvmpan",
+ "citethispage-change-target": "Aztapvl:"
+}
diff --git a/extensions/CiteThisPage/i18n/arq.json b/extensions/CiteThisPage/i18n/arq.json
new file mode 100644
index 00000000..33376ff0
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/arq.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bachounda"
+ ]
+ },
+ "citethispage-link": "استشهد بهاد الباجه",
+ "tooltip-citethispage": "معلومات نتاع كيفاش تستشهد بباجة"
+}
diff --git a/extensions/CiteThisPage/i18n/arz.json b/extensions/CiteThisPage/i18n/arz.json
new file mode 100644
index 00000000..b1427074
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/arz.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ghaly",
+ "Ramsis II"
+ ]
+ },
+ "citethispage": "مرجع",
+ "citethispage-desc": "بيضيف [[Special:Cite|مرجع]] صفحة مخصوصة ولينك لصندوء أدوات",
+ "citethispage-link": "استشهد بالصفحة دى",
+ "citethispage-change-submit": "مرجع",
+ "citethispage-change-target": "الصفحه:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== تفاصيل التأليف ل{{FULLPAGENAME}} ==\n\n* اسم الصفحة: {{FULLPAGENAME}}\n* المؤلف: مساهمو {{SITENAME}}\n* الناشر: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* تاريخ آخر مراجعة: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* تاريخ الاسترجاع: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* وصلة دائمة: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* رقم نسخة الصفحة: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n\n== أنماط الاستشهاد ل{{FULLPAGENAME}} ==\n\n=== [[APA style|نمط APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|نمط MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|نمط MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|نمط شيكاغو]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|نمط CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|نمط Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== مدخلة [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nعند استخدام وصلة مجموعة [[LaTeX]] (<code>\\usepackage{url}</code> في مكان ما) مما يؤدى إلى إعطاء عناوين ويب مهيأة بشكل أفضل، التالى ربما يكون مفضلا:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/as.json b/extensions/CiteThisPage/i18n/as.json
new file mode 100644
index 00000000..59b5cd19
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/as.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bishnu Saikia",
+ "Gitartha.bordoloi"
+ ]
+ },
+ "citethispage": "↓উদ্ধৃত",
+ "citethispage-desc": "এটা [[Special:Cite|উদ্ধৃতি]] পৃষ্ঠা আৰু এটা সা-সৰঞ্জাম লিংক যোগ কৰে",
+ "citethispage-link": "এই পৃষ্ঠাৰ উদ্ধৃতি দিয়ক",
+ "tooltip-citethispage": "এই পৃষ্ঠাটোৰ উদ্ধৃতি দিয়াৰ বিষয়ে তথ্য",
+ "citethispage-change-submit": "↓উদ্ধৃত",
+ "citethispage-change-target": "পৃষ্ঠা:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}} জীৱনীমূলক তথ্য ==\n\n* পৃষ্ঠাৰ নাম: {{FULLPAGENAME}}\n* লিখক: {{SITENAME}} contributors\n* প্ৰকাশক: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* অন্তিম সংস্কৰণৰ তাৰিখ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} ইউ.টি.ছি.\n* আহৰণৰ তাৰিখ: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* স্থায়ী ইউ.আৰ.এল.: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* পৃষ্ঠাৰ সংস্কৰণৰ আই.ডি.: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}}ৰ বাবে উদ্ধৃতি সজ্জা ==\n\n=== [[APA style|APA সজ্জা]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. আহৰণ <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> পৰা {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA সজ্জা]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA সজ্জা]] ===\n{{SITENAME}} বৰঙনিদাতাসকল, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|চিকাগো সজ্জা]] ===\n{{SITENAME}} বৰঙনিদাতাসকল, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (আহৰণ <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE সজ্জা]] ===\n{{SITENAME}} বৰঙনিদাতাসকল. {{FULLPAGENAME}} [ইণ্টাৰনেট]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [উদ্ধৃত <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. উপলদ্ধ :\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook সজ্জা]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (অন্তিম পৰিদৰ্শন <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[অনলাইন; আহৰিত <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[অনলাইন; আহৰিত <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ast.json b/extensions/CiteThisPage/i18n/ast.json
new file mode 100644
index 00000000..e9392334
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ast.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Esbardu",
+ "Xuacu"
+ ]
+ },
+ "citethispage": "Citar",
+ "citethispage-desc": "Añade una páxina especial de [[Special:CiteThisPage|citar]] y un enllaz na caxa de ferramientes",
+ "citethispage-link": "Citar esta páxina",
+ "tooltip-citethispage": "Información tocante a cómo citar esta páxina",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Páxina:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Datos bibliográficos pa {{FULLPAGENAME}} ==\n\n* Nome de la páxina: {{FULLPAGENAME}}\n* Autor: collaboradores de {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data de la última revisión: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data na que s'algamó: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Dirección URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID de versión de la páxina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Estilu de cites pa {{FULLPAGENAME}} ==\n\n=== [[APA style|Estilu APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Consultáu el <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> en {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Estilu MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Estilu MHRA]] ===\nCollaboradores de {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consultáu el <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Estilu Chicago]] ===\nCollaboradores de {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consultáu el <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estilu CBE/CSE]] ===\nCollaboradores de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citáu el <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible en:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estilu Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (última visita: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrada [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n títulu = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n añu = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n nota = \"[En llinia; consultáu el <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nCuando s'utiliza la dirección URL del paquete [[LaTeX]] (<code>\\usepackage{url}</code> n'algún llugar del preámbulu) que tiende a dar direiciones web con meyor formatu, pue ser preferible lo siguiente:\n\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n títulu = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n añu = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n nota = \"[En llinia; consultáu el <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--zarrando'l div de \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/av.json b/extensions/CiteThisPage/i18n/av.json
new file mode 100644
index 00000000..9f0a45a7
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/av.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amikeco"
+ ]
+ },
+ "citethispage-link": "Гьумер рехсезе"
+}
diff --git a/extensions/CiteThisPage/i18n/awa.json b/extensions/CiteThisPage/i18n/awa.json
new file mode 100644
index 00000000..108657a4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/awa.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "citethispage-link": "इस पन्ने को उद्धृत करें",
+ "tooltip-citethispage": "इस पृष्ठ को उद्धृत करने के लिये जानकारी"
+}
diff --git a/extensions/CiteThisPage/i18n/az.json b/extensions/CiteThisPage/i18n/az.json
new file mode 100644
index 00000000..61772010
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/az.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cekli829"
+ ]
+ },
+ "citethispage": "Sayt",
+ "citethispage-change-submit": "Sayt",
+ "citethispage-change-target": "Səhifə:"
+}
diff --git a/extensions/CiteThisPage/i18n/azb.json b/extensions/CiteThisPage/i18n/azb.json
new file mode 100644
index 00000000..94ad3515
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/azb.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amir a57",
+ "Mousa"
+ ]
+ },
+ "citethispage": "سایت",
+ "citethispage-desc": "بیر اؤزل [[Special:Cite|آلینتی]] صحیفه‌سی و آراج-قوتوسو باغلانتی‌سی آرتیرار",
+ "citethispage-link": "بو صحیفه‌دن آلینتی گؤتور",
+ "tooltip-citethispage": "بو صحیفه‌دن نئجه آلینتی گؤتورمک اوچون بیلگیلر",
+ "citethispage-change-submit": "سایت",
+ "citethispage-change-target": "صحیفه:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}} اوچون قایناق‌جالیق بیلگیلری ==\n\n* صحیفه آدی: {{FULLPAGENAME}}\n* یارادیجی: {{SITENAME}} ایستیفاده‌چیلری\n* نشر ائدن: ''{{SITENAME}}، {{int:sitesubtitle}}''.\n* سون نوسخه‌نین تاریخی: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* گؤتورن تاریخ: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* قالیجی آدرس: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* صحیفه نوسخه بلیردنی: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}} اوچون آلینتی بیچیملری ==\n\n=== [[APA بیچیمی]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA بیچیم بیلگیلری|MLA بیچیمی]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA بیچیم رهبرلیگی|MHRA بیچیمی]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[شیکاگو بیچیم بیلگیلری|شیکاگو بیچیمی]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[بیلگی شوراسی یازارلاری|CBE/CSE بیچیمی]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook بیچیمی]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] بیچیمی ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[لتک]] یوآر‌اِل بسته‌سینی ایشلدن‌ده (<code>\\usepackage{url}</code> باشلیق ایچینده) کی داها گؤزل بیچیملنمیش اینترنت آدرسلری وئرر، بو آشاغیداکی ترجیح وئریلیر:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ba.json b/extensions/CiteThisPage/i18n/ba.json
new file mode 100644
index 00000000..300f9da7
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ba.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Assele",
+ "Haqmar"
+ ]
+ },
+ "citethispage": "Өҙөмтәләү",
+ "citethispage-desc": "[[Special:Cite|Өҙөмтә яһау]] махсус битен һәм ҡоралдарҙа һылтанма өҫтәй",
+ "citethispage-link": "Биттән өҙөмтә яһарға",
+ "tooltip-citethispage": "Был битте нисек өҙөмтәләргә кәрәклеге тураһында мәғлүмәт",
+ "citethispage-change-submit": "Өҙөмтәләргә",
+ "citethispage-change-target": "Бит:"
+}
diff --git a/extensions/CiteThisPage/i18n/bar.json b/extensions/CiteThisPage/i18n/bar.json
new file mode 100644
index 00000000..f43615b8
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bar.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Man77",
+ "Mucalexx"
+ ]
+ },
+ "citethispage": "Zitirhüf",
+ "citethispage-desc": "Ergänzd d' [[Special:Cite|Zitirhüf]]-Speziaalseiten und an Link im Werkzeigkosten",
+ "citethispage-link": "d' Seiten zitirn",
+ "tooltip-citethispage": "Hihweis, wia dé Seiten zitird wern kå",
+ "citethispage-change-submit": "åzoang",
+ "citethispage-change-target": "Seiten:"
+}
diff --git a/extensions/CiteThisPage/i18n/bcc.json b/extensions/CiteThisPage/i18n/bcc.json
new file mode 100644
index 00000000..d9d8cbfd
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bcc.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mostafadaneshvar",
+ "Baloch Afghanistan"
+ ]
+ },
+ "citethispage": "مرجع",
+ "citethispage-desc": "اضافه کن یک [[Special:Cite|citation]] صفحه حاص و لینک جعبه ابزار",
+ "citethispage-link": "ای صفحه ی مرجع بل",
+ "citethispage-change-submit": "مرجع",
+ "citethispage-change-target": "تاکدیم:"
+}
diff --git a/extensions/CiteThisPage/i18n/bcl.json b/extensions/CiteThisPage/i18n/bcl.json
new file mode 100644
index 00000000..19585d2c
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bcl.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Filipinayzd",
+ "Geopoet"
+ ]
+ },
+ "citethispage": "Sambiton",
+ "citethispage-desc": "Nagdudugang nin sarong [[Special:Cite|citation]] espesyal na pahina asin kasugpunan sa palindông kahon",
+ "citethispage-link": "Isambit ining pahina",
+ "tooltip-citethispage": "Impormasyon kun paanuhon na sambiton ining pahina",
+ "citethispage-change-submit": "Sambiton",
+ "citethispage-change-target": "Pahina:",
+ "citethispage-content": "__NOTOC__ \n<div class=\"mw-specialCiteThisPage-bibliographic\"> \n\n== Bibliograpikong mga detalye para sa {{FULLPAGENAME}} == \n* Pangaran kan pahina: {{FULLPAGENAME}} \n* Awtor: {{SITENAME}} mga paraambag \n* Publikador: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Petsa kan huring pagliwat: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC \n* Petsa kan pagbawi: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation> \n* Permanenteng URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} \n* ID kan Bersyon kan Pahina: {{REVISIONID}} \n\n</div> \n<div class=\"plainlinks mw-specialCiteThisPage-styles\"> \n\n== Pagsambit na mga istilo para sa {{FULLPAGENAME}} == \n\n=== [[Istilong APA]] === \n\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Pinagbawi <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> gikan sa {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. \n\n=== [[An MLA Manwal na Istilo|Istilong MLA]] === \"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;. \n\n=== [[MHRA Giya sa Istilo|Istilo sa MHRA]] === \n{{SITENAME}} mga paraambag, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>] \n\n=== [[An Chicago Manwal na Istilo|Istilo sa Chicago]] === \n{{SITENAME}} mga paraambag, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). \n\n=== [[Konseho kan mga Paraliwat sa Siyensiya|CBE/CSE style]] === \n{{SITENAME}} mga paraambag. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Yaon gikan sa : {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. \n\n=== [[Librong Asul|Istilo sa Librong Asul]] === \n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). \n\n=== [[BibTeX]] entrada === \n\n@misc{ wiki:xxx, awtor = \"{{SITENAME}}\", titulo = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\", taon = \"{{CURRENTYEAR}}\", url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\", tandai = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\" }\n\nKunsoarin na ginagamit an [[Latex]] pampaketeng url (<code>\\usepackage{url}</code> yason sa parte kan prayambulo) na tantong minatao nin mas marhayon na kadagdagan sa pormat kan mga estada sa web, an minasunod mapupuwedeng pagpipilian: \n\n@misc{ wiki:xxx, \nawtor = \"{{SITENAME}}\", titulo = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\", taon = \"{{CURRENTYEAR}}\", url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\", tandaan = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\" \n} \n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/be-tarask.json b/extensions/CiteThisPage/i18n/be-tarask.json
new file mode 100644
index 00000000..f74bb775
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/be-tarask.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko",
+ "Wizardist",
+ "Jim-by",
+ "Red Winged Duck"
+ ]
+ },
+ "citethispage": "Цытаваньне",
+ "citethispage-desc": "Дадае спэцыяльную старонку [[Special:CiteThisPage|цытаваньня]] і спасылку ў інструмэнтах",
+ "citethispage-link": "Цытаваць старонку",
+ "tooltip-citethispage": "Інфармацыя пра тое, як цытатаваць гэтую старонку",
+ "citethispage-change-submit": "Цытаваць",
+ "citethispage-change-target": "Старонка:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Бібліяграфічныя зьвесткі артыкула «{{FULLPAGENAME}}» ==\n\n* Назва артыкула: {{FULLPAGENAME}}\n* Аўтар: Рэдактары {{GRAMMAR:родны|{{SITENAME}}}}\n* Выдавец: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Дата апошняй вэрсіі: {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Дата атрыманьня: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Сталы URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Ідэнтыфікатар вэрсіі артыкула: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Цытаваньне артыкула «{{FULLPAGENAME}}» рознымі стандартамі ==\n\n=== [[APA style|Стыль АПА]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Стыль MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Стыль MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Стыль Чыкага]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Стыль CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Стыль Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nПры выкарыстаньні пакету url для [[LaTeX]] (<code>\\usepackage{url}</code> у пачатку) можна дабіцца лепшага выяўленьня вэб-адрасоў. Неабходна аформіць наступным чынам:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/be.json b/extensions/CiteThisPage/i18n/be.json
new file mode 100644
index 00000000..34450a36
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/be.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Хомелка"
+ ]
+ },
+ "citethispage": "Спаслацца",
+ "citethispage-desc": "Дадае [[Special:Cite|цытату]] адмысловых старонак і спасылку панэлі інструментаў",
+ "citethispage-link": "Цытаваць гэту старонку",
+ "tooltip-citethispage": "Інфармацыя пра тое, як цытаваць гэтую старонку",
+ "citethispage-change-submit": "Спаслацца",
+ "citethispage-change-target": "Старонка:"
+}
diff --git a/extensions/CiteThisPage/i18n/bg.json b/extensions/CiteThisPage/i18n/bg.json
new file mode 100644
index 00000000..37ac1ed8
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bg.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI",
+ "Turin"
+ ]
+ },
+ "citethispage": "Цитиране",
+ "citethispage-desc": "Добавя специална страница и препратка за [[Special:Cite|цитиране]]",
+ "citethispage-link": "Цитиране на страницата",
+ "tooltip-citethispage": "Данни за начин на цитиране на тази страница",
+ "citethispage-change-submit": "Цитиране",
+ "citethispage-change-target": "Страница:"
+}
diff --git a/extensions/CiteThisPage/i18n/bgn.json b/extensions/CiteThisPage/i18n/bgn.json
new file mode 100644
index 00000000..7de10b54
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bgn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "citethispage-link": "لینکی یات کورت په ای دیما",
+ "tooltip-citethispage": "مئلومات بئ ای دیمی یات کورتئ باره ها"
+}
diff --git a/extensions/CiteThisPage/i18n/bho.json b/extensions/CiteThisPage/i18n/bho.json
new file mode 100644
index 00000000..e38456f4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bho.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nepaboy",
+ "Ganesh"
+ ]
+ },
+ "citethispage-link": "ई पन्ना के उल्लेख करीं",
+ "tooltip-citethispage": "इ पन्ना के कइसे हवाला करे के बा ओ पर जानकारी"
+}
diff --git a/extensions/CiteThisPage/i18n/bn.json b/extensions/CiteThisPage/i18n/bn.json
new file mode 100644
index 00000000..9fabd6f2
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bn.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bellayet",
+ "Zaheen",
+ "Aftab1995"
+ ]
+ },
+ "citethispage": "এই পাতাটি উদ্ধৃত করুন",
+ "citethispage-desc": "একটি বিশেষ [[Special:CiteThisPage|উদ্ধৃতি]] পাতা ও টুলবক্স সংযোগ যোগ করে",
+ "citethispage-link": "এই পাতাটি উদ্ধৃত করুন",
+ "tooltip-citethispage": "এই পাতাটি কিভাবে উদ্ধৃত করবেন তার তথ্য",
+ "citethispage-change-submit": "উদ্ধৃত",
+ "citethispage-change-target": "পাতা:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}}-এর জন্য গ্রন্থতালিকার বিস্তারিত ==\n\n* পাতার নাম: {{FULLPAGENAME}}\n* লেখক: {{SITENAME}} অবদানকারী\n* প্রকাশক: ''{{SITENAME}}, {{int:sitesubtitle}}''।\n* সর্বশেষ সংশোধনের তারিখ: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} ইউটিসি\n* সংগ্রহের তারিখ: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} ইউটিসি</citation>\n* প্যারামিটার URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* পাতার সংস্করণ আইডি: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}}-এর জন্য উদ্ধৃতি শৈলী ==\n\n=== [[এপিএ স্টাইল]] ===\n{{FULLPAGENAME}}। ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}})। ''{{SITENAME}}, {{int:sitesubtitle}}''। {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} থেকে <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> তারিখে সংগৃহীত হয়েছে।\n\n=== [[দ্য এমএলএ স্টাইল ম্যানুয়াল|এমএলএ শৈলী]] ===\n\"{{FULLPAGENAME}}।\" ''{{SITENAME}}, {{int:sitesubtitle}}''। {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} ইউটিসি। <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;।\n\n=== [[এমএইচআরএ স্টাইল গাইড|এমএইচআরএ শৈলী]] ===\n{{SITENAME}} অবদানকারী, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} ইউটিসি, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [<citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation> তারিখে প্রবেশ]\n\n=== [[The Chicago Manual of Style|শিকাগো শৈলী]] ===\n{{SITENAME}} অবদানকারী, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> তারিখে প্রবেশ)।\n\n=== [[Council of Science Editors|সিবিই/সিএসই শৈলী]] ===\n{{SITENAME}} অবদানকারী। {{FULLPAGENAME}} [ইন্টারনেট]। {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} ইউটিসি [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation> তারিখে উদ্ধৃত]। এতে উপলব্ধ:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}।\n\n=== [[ব্লুবুক|ব্লুবুক শৈলী]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> তারিখে সর্বশেষ দেখা)।\n\n=== [[বিবটেক্স]] ভুক্তি ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[অনলাইন; প্রবেশ <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nযখন [[ল্যাটেক]] প্যাকেজ url ব্যবহার করবেন (প্রস্তাবনার মধ্যে কোথাও <code>\\usepackage{url}</code>) যা অনেক বেশি চমত্কার ফরম্যাটকৃত ওয়েব ঠিকানা দিয়ে থাকে, নিম্নোক্তটিকে অগ্রাধিকার দিতে পারে:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[অনলাইন; প্রবেশ <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/bo.json b/extensions/CiteThisPage/i18n/bo.json
new file mode 100644
index 00000000..9746eaab
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Freeyak"
+ ]
+ },
+ "citethispage-change-target": "ཤོག་ངོས།"
+}
diff --git a/extensions/CiteThisPage/i18n/bpy.json b/extensions/CiteThisPage/i18n/bpy.json
new file mode 100644
index 00000000..1bb25a3d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bpy.json
@@ -0,0 +1,5 @@
+{
+ "@metadata": [],
+ "citethispage": "উদ্ধৃত করেদে",
+ "citethispage-link": "নিবন্ধ এহানরে উদ্ধৃত করেদে"
+}
diff --git a/extensions/CiteThisPage/i18n/br.json b/extensions/CiteThisPage/i18n/br.json
new file mode 100644
index 00000000..0d309e41
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/br.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fulup"
+ ]
+ },
+ "citethispage": "Menegiñ",
+ "citethispage-desc": "Ouzhpennañ a ra ur bajenn dibar [[Special:Cite|arroud]] hag ul liamm er voest ostilhoù",
+ "citethispage-link": "Menegiñ ar pennad-mañ",
+ "tooltip-citethispage": "Titouroù war an doare da venegiñ ar bajenn-mañ",
+ "citethispage-change-submit": "Menegiñ",
+ "citethispage-change-target": "Pajenn :",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Titouroù levrlennadurel evit {{FULLPAGENAME}} ==\n\n* Anv ar bajenn : {{FULLPAGENAME}} \n* Aozer : kenlabourerien {{SITENAME}}\n* Embanner : ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Kemm diwezhañ : {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Deiziad adtapout : <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL pad : {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identeler ar stumm-mañ : {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stiloù arroudoù evit {{FULLPAGENAME}} ==\n\n=== [[Stil APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Adtapet d'an <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> e {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Stil MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Stil MHRA]] ===\nPerzhidi {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [sellet d'an <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Stil Chicago]] ===\nPerzhidi {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sellet d'an <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Stil CBE/CSE]] ===\nPerzhidi {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [meneget d'an <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Hegerz war : \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Stil Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sellet d'an <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Enmont [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Enlinenn ; sellet d'an <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nMa rit gant ar pakadur URL e [[LaTeX]] (<code>\\usepackage{url}</code> en ul lec'h bennak er raklavar), a bourchas chomlec'hioù Web furmadet gwelloc'h, grit gant ar furmad-mañ :\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Enlinenn ; sellet d'an <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/bs.json b/extensions/CiteThisPage/i18n/bs.json
new file mode 100644
index 00000000..ca14c26d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bs.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "CERminator"
+ ]
+ },
+ "citethispage": "Citiranje",
+ "citethispage-desc": "Dodaje posebnu stranicu za [[Special:Cite|citiranje]] i link u alatnoj kutiji",
+ "citethispage-link": "Citiraj ovu stranicu",
+ "tooltip-citethispage": "Informacije kako citirati ovu stranicu",
+ "citethispage-change-submit": "Citiraj",
+ "citethispage-change-target": "Stranica:"
+}
diff --git a/extensions/CiteThisPage/i18n/bxr.json b/extensions/CiteThisPage/i18n/bxr.json
new file mode 100644
index 00000000..be077cca
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/bxr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elvonudinium"
+ ]
+ },
+ "citethispage-link": "Энэ хуудаһаһаа эшэ татаха"
+}
diff --git a/extensions/CiteThisPage/i18n/ca.json b/extensions/CiteThisPage/i18n/ca.json
new file mode 100644
index 00000000..80292b47
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ca.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Davidpar",
+ "SMP",
+ "Toniher",
+ "Vriullop",
+ "Qllach"
+ ]
+ },
+ "citethispage": "Citeu",
+ "citethispage-desc": "Afegeix un enllaç i una pàgina especial de [[Special:Cite|citació]]",
+ "citethispage-link": "Cita aquesta pàgina",
+ "tooltip-citethispage": "Informació sobre com citar aquesta pàgina",
+ "citethispage-change-submit": "Cita",
+ "citethispage-change-target": "Pàgina:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Informació bibliogràfica de {{FULLPAGENAME}} ==\n\n* Pàgina: {{FULLPAGENAME}}\n* Autor: col·laboradors del projecte {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Darrera versió: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Consulta: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanent: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identificador de la versió: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Estils de citacions per {{FULLPAGENAME}} ==\n\n=== [[Llibre d'estil APA|Estil APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Recuperat <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> a {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Llibre d'estil MLA|Estil MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Llibre d'estil MHRA|Estil MHRA]] ===\nCol·laboradors de {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consulta <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Llibre d'estil Chicago|Estil Chicago]] ===\nCol·laboradors de {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consulta <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estil CBE/CSE]] ===\nCol·laboradors de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citat <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible a:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estil Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (darrera consulta <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrada [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[En línia; consulta <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nSi empreu el paquet url per a [[LaTeX]] (<code>\\usepackage{url}</code> en algun lloc del preàmbul) que facilita el format d'adreces web, pot ser millor el codi següent:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[En línia; consulta <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/cdo.json b/extensions/CiteThisPage/i18n/cdo.json
new file mode 100644
index 00000000..594baa1b
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/cdo.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yejianfei"
+ ]
+ },
+ "citethispage": "標記",
+ "citethispage-link": "標記茲蜀頁",
+ "citethispage-change-submit": "標記",
+ "citethispage-change-target": "頁面"
+}
diff --git a/extensions/CiteThisPage/i18n/ce.json b/extensions/CiteThisPage/i18n/ce.json
new file mode 100644
index 00000000..2b2e277d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ce.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sasan700",
+ "Умар"
+ ]
+ },
+ "citethispage": "АгӀона тӀе йолу библиографин хьажоргаш",
+ "citethispage-desc": "ГӀирсан тӀе туху [[Special:CiteThisPage|дешнаш дало]] белхан агӀо а хьажорг а",
+ "citethispage-link": "АгӀонах лаьцна дешнаш дало",
+ "tooltip-citethispage": "ХӀара бу хаам агӀонах лаьцна дешнаш муха дало деза гойтуш",
+ "citethispage-change-submit": "Кечъе хьажоргаш",
+ "citethispage-change-target": "АгӀо:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}} агӀона библиографин хаамаш ==\n\n* Яззам: {{FULLPAGENAME}}\n* Автор: {{SITENAME}} автораш\n* Кхоьллина: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* ТӀехьара хийцам бина: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Чуяьккхина терахь: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Даиман йолу хьажорг: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* АгӀон версийн ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== «{{FULLPAGENAME}}» агӀона тӀе йолу хьажоргаш кечяран кепаш ==\n\n=== [http://protect.gost.ru/document.aspx?control=7&id=173511 ГОСТ 7.0.5—2008] хатӀ (библиографин хьажорг) ===\n{{FULLPAGENAME}} // {{SITENAME}}. [{{REVISIONYEAR}}—{{REVISIONYEAR}}]. Карлаяьккхина терахь: {{#time:d.m.Y|{{REVISIONTIMESTAMP}}}}. URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (дехар дина терахь: {{#time:d.m.Y|{{LOCALTIMESTAMP}}}}).\n<div style=\"font-size:smaller; padding-left:2.5em\">\n\n</div>\n\n=== [[ГОСТ 7.1|ГОСТ 7.1—2003]] и [[ГОСТ 7.82|ГОСТ 7.82—2001]] хатӀ (доца библиографин дӀаяздар) ===\n{{FULLPAGENAME}} [Электронан ресурс] : {{int:Tagline}} : Верси {{REVISIONID}}, Ӏалашйина {{CURRENTTIME}} UTC {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} / Википедин автораш // {{SITENAME}}, {{int:sitesubtitle}}. — Электрон. дан. — Сан-Франциско: Викимедиан фонд, {{CURRENTYEAR}}. — ТӀекхачаран хьал: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA style|ХатӀ APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|ХатӀ MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|ХатӀ MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Чикаган хатӀ]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|ХатӀ CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] чура дӀаяздар ===\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[LaTeX]]-гулам лела беш url веб-адресаш дика гайта (<code>\\usepackage{url}</code>), лелайича дика хира ду:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ceb.json b/extensions/CiteThisPage/i18n/ceb.json
new file mode 100644
index 00000000..fbd2e134
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ceb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abastillas"
+ ]
+ },
+ "citethispage": "Kutloa"
+}
diff --git a/extensions/CiteThisPage/i18n/ckb.json b/extensions/CiteThisPage/i18n/ckb.json
new file mode 100644
index 00000000..29931072
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ckb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Asoxor",
+ "Calak"
+ ]
+ },
+ "citethispage": "بیکە بە ژێدەر",
+ "citethispage-link": "ئەم پەڕەیە بکە بە ژێدەر",
+ "tooltip-citethispage": "زانیاری سەبارەت بە چۆنیەتیی بە ژێدەر کردنی ئەم پەڕە",
+ "citethispage-change-submit": "بیکە بە ژێدەر",
+ "citethispage-change-target": "پەڕە:"
+}
diff --git a/extensions/CiteThisPage/i18n/co.json b/extensions/CiteThisPage/i18n/co.json
new file mode 100644
index 00000000..600ef414
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/co.json
@@ -0,0 +1,6 @@
+{
+ "@metadata": [],
+ "citethispage": "Cità",
+ "citethispage-link": "Cità issu articulu",
+ "citethispage-change-target": "Pagina:"
+}
diff --git a/extensions/CiteThisPage/i18n/cs.json b/extensions/CiteThisPage/i18n/cs.json
new file mode 100644
index 00000000..381c6068
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/cs.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beren",
+ "Li-sung",
+ "Martin Kozák",
+ "Mormegil"
+ ]
+ },
+ "citethispage": "Citace",
+ "citethispage-desc": "Přidává speciální stránku [[Special:CiteThisPage|Citace]] a odkaz v nabídce nástrojů",
+ "citethispage-link": "Citovat stránku",
+ "tooltip-citethispage": "Informace o tom, jak citovat tuto stránku",
+ "citethispage-change-submit": "Citovat",
+ "citethispage-change-target": "Stránka:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografické detaily ke stránce {{FULLPAGENAME}} ==\n\n* Jméno stránky: {{FULLPAGENAME}}\n* Autor: Přispěvatelé {{grammar:2sg|{{SITENAME}}}}\n* Vydavatel: ''{{int:Sitesubtitle}}''.\n* Datum poslední úpravy: {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Datum převzetí: <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Trvalý odkaz: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identifikace verze stránky: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Způsoby citace stránky {{FULLPAGENAME}} ==\n\n=== ISO 690-2 (1)===\nPřispěvatelé {{grammar:2sg|{{SITENAME}}}},'' {{FULLPAGENAME}}'' [online], {{int:sitesubtitle}}, c{{CURRENTYEAR}}, \nDatum poslední revize {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC, \n[citováno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\n&lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; \n\n=== ISO 690-2 (2)===\n''{{int:sitesubtitle}}: {{FULLPAGENAME}}'' [online]. c{{CURRENTYEAR}} [citováno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]. Dostupný z WWW: &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; \n\n=== [[APA standard|APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}). ''{{int:sitesubtitle}}''. Získáno <citation>{{CURRENTTIME}}, {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation> z {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA Style|MLA]] ===\n„{{FULLPAGENAME}}.“ ''{{int:sitesubtitle}}''. {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA]] ===\nPřispěvatelé {{grammar:2sg|{{SITENAME}}}}, '{{FULLPAGENAME}}', ''{{int:sitesubtitle}},'' {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [získáno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago]] ===\nPřispěvatelé {{grammar:2sg|{{SITENAME}}}}, „{{FULLPAGENAME}},“ ''{{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (získáno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE]] ===\nPřispěvatelé {{grammar:2sg|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{int:sitesubtitle}}; {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]. Dostupné na: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (naposledy navštíveno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; navštíveno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\"\n }\n\nPři použití [[LaTeX]]ového balíčku url (někde na začátku dokumentu je uvedeno <code>\\usepackage{url}</code>), který o něco lépe formátuje webové adresy, můžete upřednostnit následující verzi:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; navštíveno <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/cu.json b/extensions/CiteThisPage/i18n/cu.json
new file mode 100644
index 00000000..9c1823c4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/cu.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "ОйЛ"
+ ]
+ },
+ "citethispage-link": "привєдєниѥ члѣна словєсъ",
+ "citethispage-change-target": "страница :"
+}
diff --git a/extensions/CiteThisPage/i18n/cy.json b/extensions/CiteThisPage/i18n/cy.json
new file mode 100644
index 00000000..dcdae049
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/cy.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr",
+ "Jdforrester"
+ ]
+ },
+ "citethispage": "Cyfeirio at erthygl",
+ "citethispage-desc": "Yn ychwanegu tudalen arbennig ar gyfer [[Special:CiteThisPage|cyfeirio at erthygl]] a chyswllt bocs offer",
+ "citethispage-link": "Cyfeiriwch at yr erthygl hon",
+ "tooltip-citethispage": "Gwybodaeth ar sut i gyfeirio at y dudalen hon",
+ "citethispage-change-submit": "Cyfeirio",
+ "citethispage-change-target": "Tudalen:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Manylion am {{FULLPAGENAME}} at ddiben llyfryddiaeth ==\n\n* Enw'r dudalen: {{FULLPAGENAME}}\n* Awdur: {{SITENAME}} contributors\n* Cyhoeddwr: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Dyddiad y diwygiad diweddaraf: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Dyddiad adalw: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Yr URL parhaol: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID Diwygiad y Dudalen: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Arddulliau cyfeirio ar gyfer {{FULLPAGENAME}} ==\n\n=== [[APA Style|Arddull APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Adalwyd <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> o {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Arddull MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Arddull MHRA]] ===\nCyfranwyr i {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [adalwyd <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Arddull Chicago]] ===\nCyfranwyr i {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Arddull CBE/CSE]] ===\nCyfranwyr i {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cyfeiriwyd ato am <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Ar gael o:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Arddull Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (adalwyd ddiwethaf am <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Cofnod [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; cyrchwyd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWrth ddefnyddio url y pecyn [[LaTeX]] (<code>\\usepackage{url}</code> rhywle yn y rhaglith), sydd fel arfer yn dangos cyfeiriadau gwe ar fformat del iawn, gallwch ddefnyddio'r arddull canlynol:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Arlein; cyrchwyd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/da.json b/extensions/CiteThisPage/i18n/da.json
new file mode 100644
index 00000000..c3d28270
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/da.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Byrial",
+ "Christian List",
+ "Morten LJ",
+ "Peter Alberti"
+ ]
+ },
+ "citethispage": "Citér",
+ "citethispage-desc": "Tilføjer en [[Special:Cite|specialside til citering]] og en henvisning i værktøjsmenuen",
+ "citethispage-link": "Citér denne artikel",
+ "tooltip-citethispage": "Information om, hvordan man kan citere denne side",
+ "citethispage-change-submit": "Citér",
+ "citethispage-change-target": "Side:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n == Bibliografiske oplysninger for {{FULLPAGENAME}} ==\n\n * Sidenavn: {{FULLPAGENAME}}\n * Forfatter: {{SITENAME}} bidragydere\n * Udgiver: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n * Dato for seneste revision: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n * Datoen hentet: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n * Permanent URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n * Side versions-ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n == Typografier til citat af {{FULLPAGENAME}} ==\n\n === [[APA typografi]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Hentet <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> fra {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n === [[The MLA stil manual|MLA typografi]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt; {{canonicalurl: {{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n === [[MHRA stil Guide|MHRA typografi]] ===\n{{SITENAME}} bidragydere, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt; {{canonicalurl: {{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [hentet <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n === [[Chicago manualen om Style|Chicago typografi]] ===\n{{SITENAME}} bidragydere, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (hentet <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n === [[Rådet for videnskabsredaktører|CBE/CSE typografi]] ===\n{{SITENAME}} bidragydere. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citeret <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Tilgængelig fra:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n === [[Bluebook|Bluebook typografi]] ===\n{{FULLPAGENAME}}, {{canonicalurl: {{FULLPAGENAME}}|oldid={{REVISIONID}}}} (senest besøgt <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n === [[BibTeX]] indlæg ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; hentet <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nNår du bruger [[LaTeX]] pakkens URL-adressen (<code>\\usepackage{url}</code> et sted i præamblen) som har tendens til at give meget mere pænt formaterede webadresser, kan følgende være at foretrække:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; hentet <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/de.json b/extensions/CiteThisPage/i18n/de.json
new file mode 100644
index 00000000..fa5a19c7
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/de.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kghbln",
+ "Purodha",
+ "Metalhead64"
+ ]
+ },
+ "citethispage": "Zitierhilfe",
+ "citethispage-desc": "Erweitert das Wiki um eine [[Special:CiteThisPage|Spezialseite]] als Zitierhilfe sowie einen Link darauf im Bereich Werkzeuge",
+ "citethispage-link": "Seite zitieren",
+ "tooltip-citethispage": "Hinweise, wie diese Seite zitiert werden kann",
+ "citethispage-change-submit": "zitieren",
+ "citethispage-change-target": "Seite:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografische Angaben für {{FULLPAGENAME}} ==\n\n* Seitentitel: {{FULLPAGENAME}}\n* Autor(en): {{SITENAME}}-Bearbeiter\n* Herausgeber: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Zeitpunkt der letzten Bearbeitung: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Datum des Abrufs: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Permanente URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Versionskennung: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Zitatstile für {{FULLPAGENAME}} ==\n\n=== [[APA style|APA-Stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> von {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-Stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-Stil]] ===\n{{SITENAME}}-Bearbeiter, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-Stil]] ===\n{{SITENAME}}-Bearbeiter, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-Stil]] ===\n{{SITENAME}}-Bearbeiter. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [zitiert am <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}</citation>]. Verfügbar unter:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-Stil]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-Eintrag ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\nBei Benutzung der [[LaTeX]]-Moduls „url“ (<code>\\usepackage{url}</code> im Bereich der Einleitung), welches eine schöner formatierte Internetadresse ausgibt, kann die folgende Ausgabe genommen werden:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; abgerufen am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/diq.json b/extensions/CiteThisPage/i18n/diq.json
new file mode 100644
index 00000000..33807e2c
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/diq.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Erdemaslancan",
+ "Mirzali",
+ "Xoser"
+ ]
+ },
+ "citethispage": "Bia xo viri",
+ "citethispage-desc": "Pela xısusiye u gıreyê qutiya hacetan [[Special:Cite|citation]] ilawe keno.",
+ "citethispage-link": "Na pele bia xo viri",
+ "tooltip-citethispage": "Melumato ke ena pele çıtewri iqtıbas keno",
+ "citethispage-change-submit": "Bia xo viri",
+ "citethispage-change-target": "Pele:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliyografiya teferruatanê {{FULLPAGENAME}} ==\n\n* Nameyê pele: {{FULLPAGENAME}}\n* Nuskar: İştıraqkerê {{SITENAME}}\n* Vılaker: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Revizyonê demi: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Serkerdışê demi: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Ancıyayışê URLê cı: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Verziyonê kamiya pela: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Terzê istasyonê {{FULLPAGENAME}} ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. ancıyayo <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Terzê MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Terzê MHRA]] ===\niştırazkarê {{SITENAME}} , '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [zerre <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Terzê Şikagoy]] ===\niştırazkarê {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Terzê CBE/CSE]] ===\n{{SITENAME}} İştıraxkari. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [sitedo <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Ancıyayışê cı:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Terzê Bluebooki]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (tewr peyên<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Cı kewê [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n Nuskar = \"{{SITENAME}}\",\n Sername = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n Serre = \"{{CURRENTYEAR}}\",\n Url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n Not = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n @misc{ wiki:xxx,\n Nuskar = \"{{SITENAME}}\",\n Sername = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n Serre = \"{{CURRENTYEAR}}\",\n Url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n Not = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/dsb.json b/extensions/CiteThisPage/i18n/dsb.json
new file mode 100644
index 00000000..aeadd679
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/dsb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "citethispage": "Citěrowańska pomoc",
+ "citethispage-desc": "Pśidawa specialny bok [[Special:Cite|Citěrowańska pomoc]] a link w kašćiku źěłowe rědy",
+ "citethispage-link": "Toś ten bok citěrowaś",
+ "tooltip-citethispage": "Informacije wó tom, kak toś ten bok dajo se citěrowaś",
+ "citethispage-change-submit": "pokazaś",
+ "citethispage-change-target": "Bok:"
+}
diff --git a/extensions/CiteThisPage/i18n/ee.json b/extensions/CiteThisPage/i18n/ee.json
new file mode 100644
index 00000000..e83561c7
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ee.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "citethispage-change-target": "Nuŋɔŋlɔ:"
+}
diff --git a/extensions/CiteThisPage/i18n/el.json b/extensions/CiteThisPage/i18n/el.json
new file mode 100644
index 00000000..a05d28e2
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/el.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Consta",
+ "Glavkos",
+ "Omnipaedista",
+ "Protnet"
+ ]
+ },
+ "citethispage": "Αναφορά",
+ "citethispage-desc": "Προσθέτει μία ειδική σελίδα [[Special:Cite|παραθέσεων]] και έναν σύνδεσμο προς την εργαλειοθήκη",
+ "citethispage-link": "Παραθέστε αυτή τη σελίδα",
+ "tooltip-citethispage": "Πληροφορίες για το πως να παραπέμψετε σε αυτήν την σελίδα",
+ "citethispage-change-submit": "Προσθήκη παραθέσεων",
+ "citethispage-change-target": "Σελίδα:"
+}
diff --git a/extensions/CiteThisPage/i18n/en.json b/extensions/CiteThisPage/i18n/en.json
new file mode 100644
index 00000000..04be5197
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/en.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": []
+ },
+ "citethispage": "Cite This Page",
+ "citethispage-desc": "Adds a [[Special:CiteThisPage|citation]] special page and toolbox link",
+
+ "citethispage-link": "Cite this page",
+ "accesskey-citethispage": "",
+ "tooltip-citethispage": "Information on how to cite this page",
+
+ "citethispage-summary": "",
+
+ "citethispage-change-submit": "Cite",
+ "citethispage-change-target": "Page:",
+
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliographic details for {{FULLPAGENAME}} ==\n\n* Page name: {{FULLPAGENAME}}\n* Author: {{SITENAME}} contributors\n* Publisher: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Date of last revision: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date retrieved: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanent URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Page Version ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Citation styles for {{FULLPAGENAME}} ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/eo.json b/extensions/CiteThisPage/i18n/eo.json
new file mode 100644
index 00000000..4ccba7d5
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/eo.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki",
+ "Tlustulimu",
+ "Yekrats",
+ "Paladox",
+ "Nemo bis"
+ ]
+ },
+ "citethispage": "Citado",
+ "citethispage-desc": "Aldonas specialan paĝon por [[Special:Cite|citado]] kaj ligilo al ilaro",
+ "citethispage-link": "Citi ĉi tiun paĝon",
+ "tooltip-citethispage": "Informoj pri tio, kiel oni citu ĉi tiun paĝon",
+ "citethispage-change-submit": "Citi",
+ "citethispage-change-target": "Paĝo:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografiaj detaloj por {{FULLPAGENAME}} ==\n\n* Nomo de paĝo: {{FULLPAGENAME}}\n* Aŭtoro: {{SITENAME}} contributors\n* Eldonejo: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Dato de lasta revizio: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Dato ricevita: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Daŭra URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Versio-identigo de paĝo: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Citaj stiloj por {{FULLPAGENAME}} ==\n\n=== [[APA-stilo]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA-stilo]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA-stilo]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Ĉikago-stilo]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE-stilo]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Blulibro-stilo]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] datumaro ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKiam uzante [[LaTeX]]-on, url (<code>\\usepackage{url}</code> ie en la kapteksto) kiu emas formati pli belaj retadresoj, la jeno eble estos preferata:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/es.json b/extensions/CiteThisPage/i18n/es.json
new file mode 100644
index 00000000..96932a2b
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/es.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Armando-Martin",
+ "Crazymadlover",
+ "Icvav",
+ "Jatrobat",
+ "Muro de Aguas",
+ "Sanbec",
+ "Macofe",
+ "Mor",
+ "Fitoschido"
+ ]
+ },
+ "citethispage": "Citar esta página",
+ "citethispage-desc": "Añade una página especial para [[Special:CiteThisPage|citar una página]] y un enlace en la caja de herramientas.",
+ "citethispage-link": "Citar esta página",
+ "tooltip-citethispage": "Información sobre cómo citar esta página",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Página:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Datos bibliográficos sobre {{FULLPAGENAME}} ==\n\n* Nombre de la página: {{FULLPAGENAME}}\n* Autor: {{SITENAME}} contributors\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Fecha de la última revisión: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Fecha obtenida: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Dirección URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identificador de versión de la página: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Estilo de citas para {{FULLPAGENAME}} ==\n\n=== [[APA style|Estilo APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Consultado el <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> en {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Estilo MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Estilo MHRA]] ===\nColaboradores de {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consultado el <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Estilo Chicago]] ===\nColaboradores de {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consultado el <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estilo CBE/CSE]] ===\nColaboradores de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citado el <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible en:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estilo Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (última visita: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrada [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n título = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n año = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n nota = \"[En línea; consultado el <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nCuando se utiliza la dirección URL de empaquetamiento [[LaTeX]] (<code>\\usepackage{url}</code> en algún lugar del preámbulo) que tiende a dar direcciones web con un formato más agradable, se prefiere lo siguiente:\n\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n título = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n año = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n nota = \"[En línea; consultado el <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--cerrando div para \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/et.json b/extensions/CiteThisPage/i18n/et.json
new file mode 100644
index 00000000..626275b5
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/et.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pikne",
+ "WikedKentaur"
+ ]
+ },
+ "citethispage": "Tsiteerimine",
+ "citethispage-desc": "Lisab [[Special:CiteThisPage|tsiteerimise]] erilehekülje ja lingi külgmenüü tööriistakasti.",
+ "citethispage-link": "Tsiteeri seda artiklit",
+ "tooltip-citethispage": "Teave tsiteerimisviiside kohta",
+ "citethispage-change-submit": "Tsiteeri",
+ "citethispage-change-target": "Leht:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Lehekülje \"{{FULLPAGENAME}}\" bibliograafilised andmed ==\n\n* Lehekülje pealkiri: {{FULLPAGENAME}}\n* Autor: {{GRAMMAR:genitive|{{SITENAME}}}} kaastöölised\n* Väljaandja: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Viimane redaktsioon: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Vaadatud: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Püsilink: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Lehekülje versiooninumber: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Viitamisstiilid lehekülje \"{{FULLPAGENAME}}\" jaoks ==\n\n=== APA stiil ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Vaadatud: <citation>{{CURRENTTIME}}, {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>, aadressil {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA stiil ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA stiil ===\n{{GRAMMAR:genitive|{{SITENAME}}}} kaastöölised, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [vaadatud: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== Chicago stiil ===\n{{GRAMMAR:genitive|{{SITENAME}}}} kaastöölised, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (vaadatud: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== CBE/CSE stiil ===\n{{GRAMMAR:genitive|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [vaadatud: <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}</citation>]. Kättesaadav aadressil:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebooki stiil ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (viimati vaadatud: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== BibTeX-i sissekanne ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Võrgus; vaadatud: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\nKui kasutada LaTeX-i url-i (<code>\\usepackage{url}</code> kuskil lehekülje alguses), mis vormindab sageli veebiaadressi ilusamini, võib eelistatavamaks osutuda järgmine kood:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Võrgus; vaadatud: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/eu.json b/extensions/CiteThisPage/i18n/eu.json
new file mode 100644
index 00000000..2e21e393
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/eu.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "An13sa",
+ "Theklan",
+ "Xabier Armendaritz"
+ ]
+ },
+ "citethispage": "Aipamenak",
+ "citethispage-desc": "[[Special:Cite|Aipatu]] orrialde berezia gehitzen du tresna-kutxaren loturetan",
+ "citethispage-link": "Aipatu orri hau",
+ "tooltip-citethispage": "Orri honen aipua egiteko moduari buruzko informazioa",
+ "citethispage-change-submit": "Aipatu",
+ "citethispage-change-target": "Orrialdea:"
+}
diff --git a/extensions/CiteThisPage/i18n/ext.json b/extensions/CiteThisPage/i18n/ext.json
new file mode 100644
index 00000000..4d6f3891
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ext.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Better"
+ ]
+ },
+ "citethispage": "Almiental",
+ "citethispage-link": "Almiental esti artículu",
+ "citethispage-change-submit": "Almiental",
+ "citethispage-change-target": "Páhina:"
+}
diff --git a/extensions/CiteThisPage/i18n/fa.json b/extensions/CiteThisPage/i18n/fa.json
new file mode 100644
index 00000000..1a1893dc
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/fa.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Huji",
+ "Reza1615",
+ "Wayiran",
+ "ZxxZxxZ"
+ ]
+ },
+ "citethispage": "یادکرد این مقاله",
+ "citethispage-desc": "صفحهٔ ویژه‌ای برای [[Special:Cite|یادکرد]] اضافه می‌کند و پیوندی به جعبه ابزار می‌افزاید",
+ "citethispage-link": "یادکرد پیوند این مقاله",
+ "tooltip-citethispage": "اطلاعات در خصوص چگونگی یادکرد این صفحه",
+ "citethispage-change-submit": "یادکرد",
+ "citethispage-change-target": "صفحه:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== اطلاعات کتاب‌شناسی برای {{FULLPAGENAME}} ==\n\n* نام صفحه: {{FULLPAGENAME}}\n* نویسنده: مشارکت‌کنندگان {{SITENAME}}\n* ناشر: ''{{SITENAME}}، {{int:sitesubtitle}}''.\n* تاریخ آخرین نسخه: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* تاریخ بازبینی: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* نشانی پایدار: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* شناسهٔ نسخهٔ صفحه: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== شیوه‌های یادکرد برای {{FULLPAGENAME}} ==\n\n=== [[شیوه APA|شیوهٔ APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}، {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}، {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}، {{CURRENTMONTHNAME}} {{CURRENTDAY}}، {{CURRENTYEAR}}</citation> از {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[شیوه ام‌ال‌آ|شیوهٔ MLA]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}، {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}، {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}، {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt؛.\n\n=== [[شیوه MHRA|شیوهٔ MHRA]] ===\nمشارکت‌کنندگان {{SITENAME}}، «{{FULLPAGENAME}}»، ''{{SITENAME}}، {{int:sitesubtitle}}،'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}، {{CURRENTTIME}} UTC، &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[شیوه‌نامه شیکاگو|شیوهٔ شیکاگو]] ===\nمشارکت‌کنندگان {{SITENAME}}، «{{FULLPAGENAME}}»، ''{{SITENAME}}، {{int:sitesubtitle}}،'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (بازیابی‌شده در <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|شیوهٔ CBE/CSE]] ===\nمشارکت‌کنندگان {{SITENAME}}. {{FULLPAGENAME}} [اینترنت]. {{SITENAME}}، {{int:sitesubtitle}}؛ {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}، {{CURRENTTIME}} UTC [یادکردشده در <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. قابل دسترسی از:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[w:en:Bluebook|شیوهٔ Bluebook]] ===\n{{FULLPAGENAME}}، {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (آخرین بازدید در <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[برخط؛ بازبینی‌شده در <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nدر زمان استفاده از بستهٔ [[LaTeX]] نشانی (<code>\\usepackage{url}</code> جایی در پیوند پایدار) که برای ارائه فرمت‌های وبی طراحی شده‌است، شاید به صورت زیر مطلوب باشد:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[برخط؛ بازبینی‌شده در <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/fi.json b/extensions/CiteThisPage/i18n/fi.json
new file mode 100644
index 00000000..abe1bde5
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/fi.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Linnea",
+ "Nike",
+ "ZeiP",
+ "Pxos"
+ ]
+ },
+ "citethispage": "Viitetiedot",
+ "citethispage-desc": "Lisää työkaluihin toimintosivun, joka neuvoo [[Special:Cite|viittaamaan]] oikeaoppisesti.",
+ "citethispage-link": "Viitetiedot",
+ "tooltip-citethispage": "Tietoa tämän sivun lainaamisesta",
+ "citethispage-change-submit": "Viittaa",
+ "citethispage-change-target": "Sivu:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografiset tiedot artikkelille {{FULLPAGENAME}} ==\n\n* Sivun nimi: {{FULLPAGENAME}}\n* Tekijä: {{SITENAME}}-projektin osanottajat\n* Julkaisija: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Viimeisimmän version päivämäärä: {{CURRENTDAY2}}. {{CURRENTMONTHNAME}}&#116;&#97; {{CURRENTYEAR}}, kello {{CURRENTTIME}} (UTC)\n* Sivu haettu: <citation>{{CURRENTDAY2}}. {{CURRENTMONTHNAME}}&#116;&#97; {{CURRENTYEAR}}, kello {{CURRENTTIME}} (UTC)</citation>\n* Pysyvä osoite: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Sivun version tunniste: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Viittaustyylit artikkelille {{FULLPAGENAME}} ==\n\n=== APA-tyyli ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}}n {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Haettu <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}}n {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> osoitteesta {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA-tyyli ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA-tyyli ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}}ta {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [haettu <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}}ta {{CURRENTYEAR}}</citation>]\n\n=== Chicago-tyyli ===\n{{SITENAME}}-projektin osanottajat, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (haettu <citation>{{CURRENTMONTHNAME}}n {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== CBE/CSE-tyyli ===\n{{SITENAME}}-projektin osanottajat. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Saatavilla osoitteesta: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook-tyyli ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (vierailtu viimeksi <citation>{{CURRENTMONTHNAME}}n {{CURRENTDAY}}., {{CURRENTYEAR}}</citation>).\n\n=== BibTeX-muoto ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; haettu <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKäytettäessä [[LaTeX]]-pakettia url, (<code>\\usepackage{url}</code> jossain alussa) joka tapaa antaa paremmin muotoiltuja osoitteita, seuraavaa muotoa voidaan käyttää:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; haettu <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/fj.json b/extensions/CiteThisPage/i18n/fj.json
new file mode 100644
index 00000000..e6c051c6
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/fj.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "citethispage-link": "Vola dau vaqarai"
+}
diff --git a/extensions/CiteThisPage/i18n/fo.json b/extensions/CiteThisPage/i18n/fo.json
new file mode 100644
index 00000000..30b46d5e
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/fo.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Diupwijk",
+ "Spacebirdy"
+ ]
+ },
+ "citethispage": "Sitera",
+ "citethispage-link": "Sitera hesa síðuna",
+ "citethispage-change-submit": "Sitera",
+ "citethispage-change-target": "Síða:"
+}
diff --git a/extensions/CiteThisPage/i18n/fr.json b/extensions/CiteThisPage/i18n/fr.json
new file mode 100644
index 00000000..a432c31d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/fr.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "DavidL",
+ "Grondin",
+ "Hégésippe Cormier",
+ "PieRRoMaN",
+ "Urhixidur",
+ "Gomoko"
+ ]
+ },
+ "citethispage": "Citation",
+ "citethispage-desc": "Ajoute une page spéciale [[Special:CiteThisPage|citation]] et un lien dans la boîte à outils",
+ "citethispage-link": "Citer cette page",
+ "tooltip-citethispage": "Informations sur comment citer cette page",
+ "citethispage-change-submit": "Citer",
+ "citethispage-change-target": "Page :",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Détails bibliographiques pour {{FULLPAGENAME}} ==\n\n* Nom de la page : {{FULLPAGENAME}}\n* Auteur : contributeurs de {{SITENAME}}\n* Éditeur : ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Dernière modification : {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} TUC\n* Récupéré : <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} TUC</citation>\n* URL permanente : {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identifiant de cette version : {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Styles de citations pour {{FULLPAGENAME}} ==\n\n=== [[APA style|Style APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> depuis {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Style MLA]] ===\n«&nbsp;{{FULLPAGENAME}}&nbsp;» ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Style MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accédé le <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Style Chicago]] ===\nContributeurs de {{SITENAME}}, «&nbsp;{{FULLPAGENAME}}&nbsp;», ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accédé le <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Style CBE/CSE]] ===\nContributeurs de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}&nbsp;; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} TUC [cité le <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible sur&nbsp;: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Style Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accédé le <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrée [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[En ligne ; accédé le <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nSi vous utilisez le package URL dans [[LaTeX]] (<code>\\usepackage{url}</code> quelque part dans le préambule), qui donne des adresses web mieux formatées, utilisez le format suivant :\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[En ligne ; accédé le <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/frp.json b/extensions/CiteThisPage/i18n/frp.json
new file mode 100644
index 00000000..458b6de2
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/frp.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe"
+ ]
+ },
+ "citethispage": "Citacion",
+ "citethispage-desc": "Apond una pâge spèciâla [[Special:Cite|citacion]] et un lim dens la bouèta d’outils.",
+ "citethispage-link": "Citar ceta pâge",
+ "tooltip-citethispage": "Enformacions sur coment citar ceta pâge",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Pâge :"
+}
diff --git a/extensions/CiteThisPage/i18n/frr.json b/extensions/CiteThisPage/i18n/frr.json
new file mode 100644
index 00000000..0e4586b4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/frr.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Murma174"
+ ]
+ },
+ "citethispage": "Sitiare",
+ "citethispage-desc": "Diar komt en nei [[Special:CiteThisPage|spezial-sidj]] tu, am sitiarin ianfacher tu maagin, an uk en ferwisang bi a werktjüügen",
+ "citethispage-link": "Detdiar sidj sitiare",
+ "tooltip-citethispage": "Hü detdiar sidj sitiaret wurd koon",
+ "citethispage-change-submit": "Sitiare",
+ "citethispage-change-target": "Sidj:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliograafisk dooten för {{FULLPAGENAME}} ==\n\n* Sidjentiitel: {{FULLPAGENAME}}\n* Skriiwer(n): {{SITENAME}}-Bewerker\n* Ütjden faan: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Leetst tooch bewerket: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Ufrepen di: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Permanent URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Werjuunskäänang: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Sitaatmuudin för {{FULLPAGENAME}} ==\n\n=== [[APA style|APA-muude]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Ufrepen di <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> faan {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-muude]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-muude]] ===\n{{SITENAME}}-Bewerker, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [ufrepen di <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-muude]] ===\n{{SITENAME}}-Bewerker, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ufrepen di <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-muude]] ===\n{{SITENAME}}-Bewerker. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [sitiaret di <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}</citation>]. Tu fun oner:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-muude]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ufrepen di <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-Iindrach ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; ufrepen di <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\nWan det [[LaTeX]]-moduul „url“ (<code>\\usepackage{url}</code>) brükt woort, am det Internetadres smoker ütjtudun, koon detdiar ütjgoow nimen wurd:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; ufrepen di <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/fur.json b/extensions/CiteThisPage/i18n/fur.json
new file mode 100644
index 00000000..247fd96f
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/fur.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Klenje",
+ "MF-Warburg"
+ ]
+ },
+ "citethispage": "Citazion",
+ "citethispage-link": "Cite cheste vôs",
+ "citethispage-change-submit": "Cree la citazion",
+ "citethispage-change-target": "Pagjine:"
+}
diff --git a/extensions/CiteThisPage/i18n/fy.json b/extensions/CiteThisPage/i18n/fy.json
new file mode 100644
index 00000000..c358fb47
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/fy.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "SK-luuut",
+ "Snakesteuben",
+ "Robin0van0der0vliet"
+ ]
+ },
+ "citethispage": "Sitearje",
+ "citethispage-desc": "Foeget in [[Special:CiteThisPage|spesjale side]] om te sitearjen, lykas in ferwizing nei de helpmiddels, ta.",
+ "citethispage-link": "Sitearje dizze side",
+ "citethispage-change-submit": "Sitearje",
+ "citethispage-change-target": "Side:"
+}
diff --git a/extensions/CiteThisPage/i18n/ga.json b/extensions/CiteThisPage/i18n/ga.json
new file mode 100644
index 00000000..2db259b8
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ga.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alison"
+ ]
+ },
+ "citethispage": "Luaigh",
+ "citethispage-desc": "Cuir [[Special:Cite|deismireacht]] leathanach speisíalta agus nasc bosca uirlisí",
+ "citethispage-link": "Luaigh an lch seo",
+ "citethispage-change-submit": "Luaigh",
+ "citethispage-change-target": "Leathanach:"
+}
diff --git a/extensions/CiteThisPage/i18n/gd.json b/extensions/CiteThisPage/i18n/gd.json
new file mode 100644
index 00000000..b7775b40
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/gd.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Akerbeltz"
+ ]
+ },
+ "citethispage-link": "Thoir iomradh air an duilleag seo"
+}
diff --git a/extensions/CiteThisPage/i18n/gl.json b/extensions/CiteThisPage/i18n/gl.json
new file mode 100644
index 00000000..9365d295
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/gl.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Toliño",
+ "Xosé"
+ ]
+ },
+ "citethispage": "Citar esta páxina",
+ "citethispage-desc": "Engade unha páxina especial de [[Special:CiteThisPage|citas]] e unha ligazón na caixa de ferramentas",
+ "citethispage-link": "Citar esta páxina",
+ "tooltip-citethispage": "Información sobre como citar esta páxina",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Páxina:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Detalles bibliográficos de \"{{FULLPAGENAME}}\" ==\n\n* Nome da páxina: {{FULLPAGENAME}}\n* Autor: Colaboradores de {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data da última revisión: {{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}} ás {{CURRENTTIME}} UTC\n* Data da consulta: <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}} ás {{CURRENTTIME}} UTC</citation>\n* Enderezo URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID da versión da páxina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Modelos de referencia bibliográfica de \"{{FULLPAGENAME}}\" ==\n\n=== [[APA style|Estilo APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Consultado o <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}} ás {{CURRENTTIME}}</citation> en {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Estilo MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} de {{CURRENTMONTHABBREV}} de {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} de {{CURRENTMONTHABBREV}} de {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Estilo MHRA]] ===\nColaboradores de {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consultado o <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Estilo Chicago]] ===\nColaboradores de {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consultado o <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estilo CBE/CSE]] ===\nColaboradores de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}} de {{CURRENTMONTHABBREV}} de {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [citado o <citation>{{CURRENTDAY}} de {{CURRENTMONTHABBREV}} de {{CURRENTYEAR}}</citation>]. Dispoñible en:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estilo Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (última visita o <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} de {{CURRENTYEAR}}</citation>).\n\n=== Entrada [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[En liña; consultado o <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nAo empregar o paquete \"url\" do [[LaTeX]] (<code>\\usepackage{url}</code> nalgunha parte do preámbulo), que tende a mostrar os enderezos web nun formato moito máis agradable, poida que prefira o seguinte:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[En liña; consultado o <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--etiqueta \"div\" de peche para os \"plainlinks\" abertos-->"
+}
diff --git a/extensions/CiteThisPage/i18n/gom-deva.json b/extensions/CiteThisPage/i18n/gom-deva.json
new file mode 100644
index 00000000..eb2301f9
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/gom-deva.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Darshan kandolkar"
+ ]
+ },
+ "citethispage-link": "हें पान उधृत करात",
+ "tooltip-citethispage": "हें पान पळोवपा खातीर म्हायती"
+}
diff --git a/extensions/CiteThisPage/i18n/grc.json b/extensions/CiteThisPage/i18n/grc.json
new file mode 100644
index 00000000..3f399df1
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/grc.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "AndreasJS",
+ "LeighvsOptimvsMaximvs",
+ "Omnipaedista"
+ ]
+ },
+ "citethispage": "Μνημονεύειν",
+ "citethispage-desc": "Προσθέτει εἰδικὴν δἐλτον [[Special:Cite|ἀναφορῶν]] τινὰ καὶ σύνδεσμον τινὰ ἐν τῷ ἐργαλειοκάδῳ",
+ "citethispage-link": "Άναφέρειν τήνδε τὴν δέλτον",
+ "citethispage-change-submit": "Μνημονεύειν",
+ "citethispage-change-target": "Δέλτος:"
+}
diff --git a/extensions/CiteThisPage/i18n/gsw.json b/extensions/CiteThisPage/i18n/gsw.json
new file mode 100644
index 00000000..d9ea8b32
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/gsw.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Als-Chlämens",
+ "Als-Holder",
+ "Strommops"
+ ]
+ },
+ "citethispage": "Zitierhilf",
+ "citethispage-desc": "Ergänzt d [[Special:Cite|Zitierhilf]]-Spezialsyte un e Link im Chaschte Wärchzyyg",
+ "citethispage-link": "Die Site zitiere",
+ "tooltip-citethispage": "Informatione driber, wie mer die Syte cha zitiere",
+ "citethispage-change-submit": "aazeige",
+ "citethispage-change-target": "Syte:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografischi Aagabe für {{FULLPAGENAME}} ==\n\n* Sytetitel: {{FULLPAGENAME}}\n* Autor(e): {{SITENAME}}-Bearbeiter\n* Herussgeber: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Zitpunkt vo de letschte Bearbeitig: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Abruefdatum: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Permanenti URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Versionsschlüssel: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Zitatstil für {{FULLPAGENAME}} ==\n\n=== [[APA-Stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> vo {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA-Stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA-Stil]] ===\n{{SITENAME}}-Bearbeiter, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Chicago-Stil]] ===\n{{SITENAME}}-Bearbeiter, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE-Stil]] ===\n{{SITENAME}}-Bearbeiter. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [zitiert am <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}</citation>]. Verfiegbar unter:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook-Stil]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-Yytrag ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\nWänn de s [[LaTeX]]-Modul „url“ (<code>\\usepackage{url}</code> im Bereich vo de Yyleitig) bruuchsch, wo e schöner formatierti Internetadress ussegit, cha die Ussgab, wo folgt, gno werde:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; abgruefe am <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/gu.json b/extensions/CiteThisPage/i18n/gu.json
new file mode 100644
index 00000000..802c6197
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/gu.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dsvyas",
+ "KartikMistry",
+ "Sushant savla"
+ ]
+ },
+ "citethispage": "ટાંકો",
+ "citethispage-desc": "[[Special:Cite|સંદર્ભ]] ખાસ પાનું અને સાધન પેટીની કડી ઉમેરે છે",
+ "citethispage-link": "આ પાનું ટાંકો",
+ "tooltip-citethispage": "આ પાનાંને સમર્થન કઈ રીતે આપવું તેની માહિતી",
+ "citethispage-change-submit": "ટાંકો",
+ "citethispage-change-target": "પાનું:"
+}
diff --git a/extensions/CiteThisPage/i18n/gv.json b/extensions/CiteThisPage/i18n/gv.json
new file mode 100644
index 00000000..fa1b4978
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/gv.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "MacTire02"
+ ]
+ },
+ "citethispage": "Symney",
+ "citethispage-desc": "Cur duillag [[Special:Cite|symney]] er lheh as kiangley kishtey greie",
+ "citethispage-link": "Symney yn duillag shoh",
+ "citethispage-change-submit": "Symney",
+ "citethispage-change-target": "Duillag:"
+}
diff --git a/extensions/CiteThisPage/i18n/ha.json b/extensions/CiteThisPage/i18n/ha.json
new file mode 100644
index 00000000..acbd9718
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ha.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "citethispage-change-target": "Shafi:"
+}
diff --git a/extensions/CiteThisPage/i18n/haw.json b/extensions/CiteThisPage/i18n/haw.json
new file mode 100644
index 00000000..11ccbdb2
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/haw.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kolonahe",
+ "Singularity"
+ ]
+ },
+ "citethispage-link": "E ho'ōia i kēia ʻaoʻao",
+ "citethispage-change-target": "‘Ao‘ao:"
+}
diff --git a/extensions/CiteThisPage/i18n/he.json b/extensions/CiteThisPage/i18n/he.json
new file mode 100644
index 00000000..2e52fe40
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/he.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Rotem Liss",
+ "Guycn2"
+ ]
+ },
+ "citethispage": "ציטוט",
+ "citethispage-desc": "הוספת דף מיוחד וקישור בתיבת הכלים ל[[Special:CiteThisPage|ציטוט]]",
+ "citethispage-link": "ציטוט דף זה",
+ "tooltip-citethispage": "מידע כיצד לצטט דף זה",
+ "citethispage-change-submit": "ציטוט",
+ "citethispage-change-target": "דף:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== מידע ביבליוגרפי על {{FULLPAGENAME}} ==\n\n* שם הדף: {{FULLPAGENAME}}\n* מחבר: תורמי {{SITENAME}}\n* מוציא לאור: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* תאריך השינוי האחרון: {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* תאריך האחזור: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* קישור קבוע: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* קוד זיהוי גרסה: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== סגנונות ציטוט עבור {{FULLPAGENAME}} ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. אוחזר <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> מתוך {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\nתורמי {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [אוחזר <citation>{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\nתורמי {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (אוחזר <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\nתורמי {{SITENAME}}. {{FULLPAGENAME}} [אינטרנט]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [צוטט <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. זמין בכתובת:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ביקור אחרון <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== ערך [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[מקוון; אוחזר <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nכאשר משתמשים ב־URL מחבילת [[LaTeX]] (באמצעות כתיבת \\usepackage{url} במקום כלשהו במבוא), המניבה כתובות אינטרנט המעוצבות טוב יותר, יש להעדיף את דרך הכתיבה הבאה:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[מקוון; אוחזר <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/hi.json b/extensions/CiteThisPage/i18n/hi.json
new file mode 100644
index 00000000..d6901372
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/hi.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Kaustubh",
+ "Siddhartha Ghai"
+ ]
+ },
+ "citethispage": "उद्धृत करें",
+ "citethispage-desc": "[[Special:Cite|सन्दर्भ]] देने वाला एक विशेष पृष्ठ और टूलबॉक्स कड़ी जोड़ता है",
+ "citethispage-link": "इस पन्ने को उद्धृत करें",
+ "tooltip-citethispage": "इस पृष्ठ को उद्धृत करने के लिये जानकारी",
+ "citethispage-change-submit": "उद्धृत करें",
+ "citethispage-change-target": "पृष्ठ:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}} के लिए उद्धरण जानकारी ==\n\n* पृष्ठ नाम: {{FULLPAGENAME}}\n* लेखक: {{SITENAME}} योगदानकर्ता\n* प्रकाशक: ''{{SITENAME}}, {{int:sitesubtitle}}''।\n* अंतिम संशोधन तिथि: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} यू॰टी॰सी\n* अभिगमन तिथि: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* स्थायी यू॰आर॰एल: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* पृष्ठ अवतरण आई॰डी: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}} के लिए उद्धरण प्रकार ==\n\n=== APA प्रकार ===\n{{FULLPAGENAME}}। ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}})। ''{{SITENAME}}, {{int:sitesubtitle}}''। {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} से अभिगमन <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> को।\n\n=== MLA प्रकार ===\n\"{{FULLPAGENAME}}।\" ''{{SITENAME}}, {{int:sitesubtitle}}''। {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} यू॰टी॰सी। <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;।\n\n=== MHRA प्रकार ===\n{{SITENAME}} योगदानकर्ता, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} यू॰टी॰सी, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [अभिगमन <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation> को]\n\n=== शिकागो प्रकार ===\n{{SITENAME}} योगदानकर्ता, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (अभिगमन <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> को)।\n\n=== CBE/CSE प्रकार ===\n{{SITENAME}} योगदानकर्ता। {{FULLPAGENAME}} [इन्टरनेट]। {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} यू॰टी॰सी [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation> उद्धृत]। {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} से उपलब्ध।\n\n=== ब्लूबुक प्रकार ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (अभिगमन तिथि: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== बिबटेक्स प्रकार ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[ऑनलाइन; अभिगमन तिथि: <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nयदि LaTeX पैकेज यू॰आर॰एल का प्रयोग किया जा रहा हो(<code>\\usepackage{url}</code> प्रियेम्बल में कहीं प्रयुक्त हो) तो बेहतर स्वरूपण वाले यू॰आर॰एल के लिए निम्न का प्रयोग किया जा सकता है:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[ऑनलाइन; अभिगमन तिथि: <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/hif-latn.json b/extensions/CiteThisPage/i18n/hif-latn.json
new file mode 100644
index 00000000..4a206258
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/hif-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Karthi.dr"
+ ]
+ },
+ "citethispage-change-target": "Panna:"
+}
diff --git a/extensions/CiteThisPage/i18n/hil.json b/extensions/CiteThisPage/i18n/hil.json
new file mode 100644
index 00000000..7b142e04
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/hil.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77"
+ ]
+ },
+ "citethispage-link": "Tumuron ining artikulo"
+}
diff --git a/extensions/CiteThisPage/i18n/hr.json b/extensions/CiteThisPage/i18n/hr.json
new file mode 100644
index 00000000..281ed626
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/hr.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dalibor Bosits",
+ "Excaliboor",
+ "SpeedyGonsales"
+ ]
+ },
+ "citethispage": "Citiranje",
+ "citethispage-desc": "Dodaje posebnu stranicu za [[Special:Cite|citiranje]] i link u okvir za alate",
+ "citethispage-link": "Citiraj ovaj članak",
+ "tooltip-citethispage": "Informacije o tome kako citirati ovu stranicu",
+ "citethispage-change-submit": "Citiraj",
+ "citethispage-change-target": "Stranica:"
+}
diff --git a/extensions/CiteThisPage/i18n/hsb.json b/extensions/CiteThisPage/i18n/hsb.json
new file mode 100644
index 00000000..fdbe5aaf
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/hsb.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki",
+ "Mikławš"
+ ]
+ },
+ "citethispage": "Citowanska pomoc",
+ "citethispage-desc": "Přidawa specialnu stronu [[Special:Cite|Citowanska pomoc]] a wotkaz w gratowym kašćiku",
+ "citethispage-link": "Nastawk citować",
+ "tooltip-citethispage": "Informacija, kak so tuta strona citować hodźi",
+ "citethispage-change-submit": "citować",
+ "citethispage-change-target": "Strona:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografiske podrobnosće za {{FULLPAGENAME}} ==\n\n* Mjeno strony: {{FULLPAGENAME}}\n* Awtor: sobuskutkowarjo projekta {{SITENAME}}\n* Wudawaćel: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Datum poslednjeje wersije: {{CURRENTDAY}}. {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Datum wotwołanja: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Trajny URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID wersije strony: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Citowanske stile za {{FULLPAGENAME}} ==\n\n=== [[APA stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Wotwołany dnja <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> z {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stil]] ===\nSobuskutkowarjo projekta {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [wotwołany dnja <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-stil]] ===\nSobuskutkowarjo projekta {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (wotwołany dnja <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stil]] ===\nSobuskutkowarjo projekta {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citowany dnja <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. K dispoziciji wot:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-stil]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (posledni raz wopytany <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-zapisk ===\n\n @misc{ wiki:xxx,\n awtor = \"{{SITENAME}}\",\n titul = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n lěto = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; wotwołany dnja <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nHdyž so paket [[LaTeX]] url (<code>\\usepackage{url}</code> něhdźe w preambli) wužiwa, kotryž zwjetša rjeńšo formatowane webadresy zmóžnja, móhli so slědowaće podaća wužiwać:\n\n @misc{ wiki:xxx,\n awtor = \"{{SITENAME}}\",\n titul = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n lěto = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; wotwołany dnja <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ht.json b/extensions/CiteThisPage/i18n/ht.json
new file mode 100644
index 00000000..dfb067ab
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ht.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Masterches"
+ ]
+ },
+ "citethispage": "Sitasyon",
+ "citethispage-desc": "Ajoute yon paj espesyal [[Special:Cite|sitasyon]] epitou yon lyen nan bwat zouti yo",
+ "citethispage-link": "Site paj sa",
+ "citethispage-change-submit": "Site",
+ "citethispage-change-target": "Paj:"
+}
diff --git a/extensions/CiteThisPage/i18n/hu.json b/extensions/CiteThisPage/i18n/hu.json
new file mode 100644
index 00000000..a4f775c4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/hu.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dani",
+ "Glanthor Reviol",
+ "Tgr"
+ ]
+ },
+ "citethispage": "Hivatkozás",
+ "citethispage-desc": "[[Special:Cite|Hivatkozás-készítő]] speciális lap és link az eszközdobozba",
+ "citethispage-link": "Hogyan hivatkozz erre a lapra",
+ "tooltip-citethispage": "Információk a lap idézésével kapcsolatban",
+ "citethispage-change-submit": "Mehet",
+ "citethispage-change-target": "Lap neve:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n'''FONTOS MEGJEGYZÉS:''' A legtöbb tanár és szakember nem tartja helyesnek a [[harmadlagos forrás]]ok – mint a lexikonok – kizárólagos forrásként való felhasználását. A Wiki cikkeket háttérinformációnak, vagy a további kutatómunka kiindulásaként érdemes használni.\n\nMint minden [[{{ns:project}}:Ki írja a Wikipédiát|közösség által készített]] hivatkozásnál, a wiki tartalmában is lehetségesek hibák vagy pontatlanságok: kérjük, több független forrásból ellenőrizd a tényeket és ismerd meg a [[{{ns:project}}:Jogi nyilatkozat|jogi nyilatkozatunkat]], mielőtt a wiki adatait felhasználod.\n\n<div style=\"border: 1px solid grey; background: #E6E8FA; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== {{FULLPAGENAME}} lap adatai ==\n\n* Lap neve: {{FULLPAGENAME}} \n* Szerző: Wiki szerkesztők\n* Kiadó: ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. \n* A legutóbbi változat dátuma: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Letöltés dátuma: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Állandó hivatkozás: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Lapváltozat-azonosító: {{REVISIONID}}\n\nLégy szíves, ellenőrizd, hogy ezek az adatok megfelelnek-e a kívánalmaidnak. További információhoz lásd az '''[[{{ns:project}}:Idézés a Wikipédiából|Idézés a Wikipédiából]]''' lapot.\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Idézési stílusok a(z) {{FULLPAGENAME}} laphoz ==\n\n=== APA stílus ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. Retrieved <citation>{{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}. {{CURRENTTIME}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA stílus ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTYEAR}}. {{CURRENTMONTHABBREV}}. {{CURRENTDAY}}. {{CURRENTTIME}} UTC. <citation>{{CURRENTYEAR}}. {{CURRENTMONTHABBREV}}. {{CURRENTDAY}}. {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA stílus ===\nWiki szerkesztők, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}. {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}.</citation>]\n\n=== Chicago stílus ===\nWiki szerkesztők, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}.</citation>).\n\n=== CBE/CSE stílus ===\nwiki szerkesztők. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTYEAR}}. {{CURRENTMONTHABBREV}}. {{CURRENTDAY}}. {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}}. {{CURRENTMONTHABBREV}}. {{CURRENTDAY}}.</citation>]. Elérhető: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook stílus ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTYEAR}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}}.</citation>).\n\n=== [[BibTeX]] bejegyzés ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nAz <code>url</code> nevű [[LaTeX]] csomag használata esetén (<code>\\usepackage{url}</code> a preambulumban), amely a webes hivatkozások formázásában nyújt segítséget, a következő forma ajánlott:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing \"Citation styles\" div-->"
+}
diff --git a/extensions/CiteThisPage/i18n/hy.json b/extensions/CiteThisPage/i18n/hy.json
new file mode 100644
index 00000000..cfe3104d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/hy.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chaojoker",
+ "Teak",
+ "Vadgt"
+ ]
+ },
+ "citethispage": "Քաղվածել այս էջը",
+ "citethispage-link": "Քաղվածել այս էջը",
+ "citethispage-change-submit": "Քաղվածել",
+ "citethispage-change-target": "Էջ.",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}} էջի մատենագրական մանրամասներ ==\n\n* Էջանուն՝ {{FULLPAGENAME}}\n* Հեղինակ՝ {{SITENAME}} contributors\n* Հրատարակիչ՝ ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Վերջինն վերանայման թիվ՝ {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} ՀԿԺ\n* Վերստացման թիվ՝ <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} ՀԿԺ</citation>\n* Մշտական հասցե՝ {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Էջի վարկածի թիվ՝ {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}} էջի մեջբերման ոճեր ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}})։ ''{{SITENAME}}, {{int:sitesubtitle}}''։ Վերստացված է՝ <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}} թվին՝</citation> {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}-ից։\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}։\" ''{{SITENAME}}, {{int:sitesubtitle}}''։ {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} ՀԿԺ։ <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;։\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} կայքի ներդնողներ, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} ՀԿԺ, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [վերստացված է՝ <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} կայքի ներդնողներ, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (վերստացված է՝ <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>)։\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} կայքի ներդնողներ։ {{FULLPAGENAME}} [Համացանց]։ {{SITENAME}}, {{int:sitesubtitle}}․ {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} ՀԿԺ [մեջբերած՝ <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]։ Հասանելի է՝\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}։\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (վերջին այցելություն՝ <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>)։\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Առցանց․ վերստացված է՝ <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[ԼաՏեԽ]] փաթեթային հասցեն (<code>\\usepackage{url}</code> օգտագործելիս, որը շատ ավելի գեղեցկորեն ոճավորված է ցուցադրում կայքերի հասցեները, կարելի է հետևյալը նախընտրել՝\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Առցանց․ վերստացված է՝ <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ia.json b/extensions/CiteThisPage/i18n/ia.json
new file mode 100644
index 00000000..22bc7204
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ia.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya",
+ "McDutchie"
+ ]
+ },
+ "citethispage": "Citation",
+ "citethispage-desc": "Adde un pagina special de [[Special:Cite|citation]] e un ligamine verso le instrumentario",
+ "citethispage-link": "Citar iste pagina",
+ "tooltip-citethispage": "Information sur como citar iste pagina",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Pagina:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Detalios bibliographic sur {{FULLPAGENAME}} ==\n\n* Nomine del pagina: {{FULLPAGENAME}}\n* Autor: {{SITENAME}} contributors\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data del ultime version: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data de recuperation: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Adresse URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID del version del pagina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stilos de citation pro {{FULLPAGENAME}} ==\n\n=== [[:en:APA style|Stilo APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Recuperate le <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} {{CURRENTYEAR}} a {{CURRENTTIME}}</citation> ab {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:The MLA style manual|Stilo MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[:en:MHRA Style Guide|Stilo MHRA]] ===\nContributores a {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' le {{CURRENTDAY}} de {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [consultate le <citation>{{CURRENTDAY}} de {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[:en:The Chicago Manual of Style|Stilo Chicago]] ===\nContributores a {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (consultate le <citation>{{CURRENTMONTHNAME}} de {{CURRENTDAY}} {{CURRENTYEAR}}</citation>).\n\n=== [[:en:Council of Science Editors|Stilo CBE/CSE]] ===\nContributores a {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citate <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibile a:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:Bluebook|Stilo Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (visitate ultimemente le <citation>le {{CURRENTDAY}} de {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== Entrata [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[In linea; consultate le <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nQuando usar le URL de pacchetto [[LaTeX]] (<code>\\usepackage{url}</code> in qualque parte del preambulo) que tende a resultar in adresses web con formato multo plus agradabile, le sequente pote esser preferite:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[In linea; consultate le <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/id.json b/extensions/CiteThisPage/i18n/id.json
new file mode 100644
index 00000000..d8cd04ec
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/id.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bennylin",
+ "Farras",
+ "IvanLanin",
+ "William Surya Permana"
+ ]
+ },
+ "citethispage": "Kutip",
+ "citethispage-desc": "Menambahkan halaman istimewa [[Special:CiteThisPage|kutipan]] dan pranala pada kotak peralatan",
+ "citethispage-link": "Kutip halaman ini",
+ "tooltip-citethispage": "Informasi tentang bagaimana mengutip halaman ini",
+ "citethispage-change-submit": "Kutip",
+ "citethispage-change-target": "Halaman:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Rincian bibliografis untuk {{FULLPAGENAME}} ==\n\n* Nama halaman: {{FULLPAGENAME}} \n* Pengarang: Para kontributor {{SITENAME}}\n* Penerbit: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Tanggal revisi terakhir: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tanggal akses: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Pranala permanen: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID versi halaman: {{REVISIONID}}\n\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Format pengutipan untuk {{FULLPAGENAME}} ==\n\n=== [[Gaya APA|Format APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Diakses pada <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> dari {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Manual gaya MLA|Format MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Format MHRA]] ===\nPara kontributor {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [diakses pada <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Format Chicago]] ===\nPara kontributor {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (diakses pada <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Format CBE/CSE]] ===\nPara kontributor {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [dikutip pada <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Tersedia dari: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Format Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (terakhir dikunjungi pada <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entri [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nSaat menggunakan url paket [[LaTeX]] (<code>\\usepackage{url}</code> di manapun di bagian pembuka) yang biasanya menghasilkan alamat-alamat web yang diformat dengan lebih baik, cara berikut ini lebih disarankan:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ie.json b/extensions/CiteThisPage/i18n/ie.json
new file mode 100644
index 00000000..a70185a4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ie.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya"
+ ]
+ },
+ "citethispage-change-target": "Págine:"
+}
diff --git a/extensions/CiteThisPage/i18n/ig.json b/extensions/CiteThisPage/i18n/ig.json
new file mode 100644
index 00000000..a19b413c
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ig.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ukabia"
+ ]
+ },
+ "citethispage": "Ndéputà",
+ "citethispage-desc": "Nè tí [[Special:Cite|ndéputà]] ihü kárírí na jikodo ngwa ọru",
+ "citethispage-link": "Députà ihüa",
+ "tooltip-citethispage": "Ùmà màkà otụ ha shi députà ihe na ihüa",
+ "citethispage-change-submit": "Ndéputà",
+ "citethispage-change-target": "Ihü:"
+}
diff --git a/extensions/CiteThisPage/i18n/ilo.json b/extensions/CiteThisPage/i18n/ilo.json
new file mode 100644
index 00000000..c1e54175
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ilo.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "citethispage": "Dakamaten",
+ "citethispage-desc": "Agnayon ti [[Special:Cite|dakamat]] ti naipangpangruna a panid ken panilpo ti ramramit",
+ "citethispage-link": "Dakamaten daytoy a panid",
+ "tooltip-citethispage": "Pakaammo no kasanu ti panagdakamat daytoy a panid",
+ "citethispage-change-submit": "Dakamaten",
+ "citethispage-change-target": "Panid:"
+}
diff --git a/extensions/CiteThisPage/i18n/io.json b/extensions/CiteThisPage/i18n/io.json
new file mode 100644
index 00000000..8c72beeb
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/io.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya"
+ ]
+ },
+ "citethispage": "Citar",
+ "citethispage-desc": "Ico adjuntas specala pagino e ligilo por [[Special:Cite|citaji]] en utensilo-buxo",
+ "citethispage-link": "Citar ca pagino",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Pagino:"
+}
diff --git a/extensions/CiteThisPage/i18n/is.json b/extensions/CiteThisPage/i18n/is.json
new file mode 100644
index 00000000..e3ce3c1a
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/is.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "S.Örvarr.S",
+ "לערי ריינהארט",
+ "Snævar"
+ ]
+ },
+ "citethispage": "Vitna í síðu",
+ "citethispage-link": "Vitna í þessa síðu",
+ "tooltip-citethispage": "Upplýsingar um hvernig á að vitna í þessa síðu",
+ "citethispage-change-submit": "Vitna í",
+ "citethispage-change-target": "Síða:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Almennar upplýsingar ==\n\n* Síða: {{FULLPAGENAME}}\n* Höfundar: {{SITENAME}} notendur\n* Útgáfuaðili: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Síðast breytt: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} kl. {{CURRENTTIME}} UTC\n* Náð í: <citation>{{CURRENTTIME}} UTC, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}} </citation>\n* Varanlegur tengill: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Útgáfunúmer: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Heimildakerfi fyrir {{FULLPAGENAME}} ==\n\n=== [[APA style|APA-kerfið]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTDAY}}. {{CURRENTMONTHNAME}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}} UTC</citation> frá {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-kerfið]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-kerfið]] ===\nHöfundar {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-kerfið]] ===\nHöfundar {{SITENAME}}, „{{FULLPAGENAME}}“, ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-kerfið]] ===\nHöfundar {{SITENAME}}. {{FULLPAGENAME}} [af netinu]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, kl. {{CURRENTTIME}} UTC [sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}} </citation>]. Aðgengilegt frá:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (siðast sótt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] færsla ===\n\n @misc{\n wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Á Internetinu; sótt <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nÞegar notuð er LaTeX pakka vefslóðin (<code>\\usepackage{url}</code> einhversstaðar í upphafi) sem á það til að gefa snyrtilegri vefslóðir, gæti eftirfarandi verið eftirsóknaraverðara:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Á internetinu; sótt <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/it.json b/extensions/CiteThisPage/i18n/it.json
new file mode 100644
index 00000000..03e522c9
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/it.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "BrokenArrow",
+ "Ximo17",
+ "FRacco"
+ ]
+ },
+ "citethispage": "Cita questa pagina",
+ "citethispage-desc": "Aggiunge una pagina speciale per le [[Special:CiteThisPage|citazioni]] e un collegamento negli strumenti",
+ "citethispage-link": "Cita questa pagina",
+ "tooltip-citethispage": "Informazioni su come citare questa pagina",
+ "citethispage-change-submit": "Crea la citazione",
+ "citethispage-change-target": "Pagina da citare:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Dettagli bibliografici per {{FULLPAGENAME}} ==\n\n* Titolo pagina: {{FULLPAGENAME}}\n* Autore: contributori {{SITENAME}}\n* Editore: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data dell'ultima modifica: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data estrazione: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID versione pagina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stili citazioni per {{FULLPAGENAME}} ==\n\n=== [[APA style|Stile APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Estratto il <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> da {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Stile MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Stile MHRA]] ===\nContributori {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accesso il <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Stile Chicago]] ===\nContributori {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accesso il <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Stile CBE/CSE]] ===\nContributori {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citato il <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibile su:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Stile Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ultima visita il <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accesso il <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nQuando si usa il pacchetto [[LaTeX]] per url (<code>\\usepackage{url}</code> da qualche parte nel preambolo) che in genere dà indirizzi web formattati in modo migliore, è preferibile usare il seguente codice:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accesso il <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ja.json b/extensions/CiteThisPage/i18n/ja.json
new file mode 100644
index 00000000..b0ae4bed
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ja.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aotake",
+ "Fryed-peach",
+ "JtFuruhata",
+ "Shirayuki",
+ "Suisui",
+ "Whym"
+ ]
+ },
+ "citethispage": "引用",
+ "citethispage-desc": "[[Special:CiteThisPage|引用情報]]の特別ページとツールボックスのリンクを追加する",
+ "citethispage-link": "このページを引用",
+ "tooltip-citethispage": "このページの引用方法",
+ "citethispage-change-submit": "引用",
+ "citethispage-change-target": "ページ:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== 「{{FULLPAGENAME}}」の書誌情報 ==\n\n* ページ名: {{FULLPAGENAME}}\n* 著者: {{SITENAME}}への寄稿者ら\n* 発行者: {{int:sitesubtitle}}『{{SITENAME}}』\n* 更新日時: {{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日 {{CURRENTTIME}} (UTC)\n* 取得日時: <citation>{{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日 {{CURRENTTIME}} (UTC)</citation>\n* 恒久的なURI: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ページの版番号: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== 各種方式による「{{FULLPAGENAME}}」の書誌表示 ==\n\n=== [[APA style|APA方式]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日{{CURRENTTIME}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. <citation>{{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日{{CURRENTTIME}}</citation> {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} にて閲覧.\n\n=== [[The MLA style manual|MLA方式]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日{{CURRENTTIME}} (UTC). <citation>{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日{{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA方式]] ===\n{{SITENAME}}への寄稿者ら, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},''{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日 (UTC), &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [<citation>{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日</citation>閲覧]\n\n=== [[The Chicago Manual of Style|Chicago方式]] ===\n{{SITENAME}}への寄稿者ら, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日</citation>閲覧).\n\n=== [[Council of Science Editors|CBE/CSE方式]] ===\n{{SITENAME}}への寄稿者ら. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日{{CURRENTTIME}} (UTC) [<citation>{{CURRENTYEAR}}年{{CURRENTMONTHABBREV}}{{CURRENTDAY}}日</citation>現在で引用]. 入手元:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook方式]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTYEAR}}年{{CURRENTMONTHNAME}}{{CURRENTDAY}}日</citation>最終訪問).\n\n=== [[BibTeX]]エントリ ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[オンライン; 閲覧日時 <citation>{{CURRENTYEAR}}-{{CURRENTDAY}}-{{CURRENTMONTH}}</citation>]\"\n }\n\nURIの体裁を整えるために[[LaTeX]]の url パッケージを用いる (プリアンブルのどこかに <code>\\usepackage{url}</code> と書く) 場合は、以下のようにした方がいいかもしれません。\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[オンライン; 閲覧日時 <citation>{{CURRENTYEAR}}-{{CURRENTDAY}}-{{CURRENTMONTH}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/jut.json b/extensions/CiteThisPage/i18n/jut.json
new file mode 100644
index 00000000..a258a4d3
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/jut.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Huslåke"
+ ]
+ },
+ "citethispage": "Fodnåt",
+ "citethispage-link": "Fodnåter denne ertikel",
+ "citethispage-change-submit": "Fodnåt",
+ "citethispage-change-target": "Side:"
+}
diff --git a/extensions/CiteThisPage/i18n/jv.json b/extensions/CiteThisPage/i18n/jv.json
new file mode 100644
index 00000000..ad31d24d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/jv.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meursault2004",
+ "NoiX180"
+ ]
+ },
+ "citethispage": "Kutip (sitir)",
+ "citethispage-desc": "Nambahaké kaca astaméwa [[Special:Cite|sitat (kutipan)]] lan pranala ing kothak piranti",
+ "citethispage-link": "Kutip (sitir) kaca iki",
+ "tooltip-citethispage": "Informasi ngenani carané ngutip kaca iki",
+ "citethispage-change-submit": "Kutip (sitir)",
+ "citethispage-change-target": "Kaca:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Rincian bibliograpi kanggo {{FULLPAGENAME}} ==\n\n* Jeneng kaca: {{FULLPAGENAME}}\n* Panganggit: {{SITENAME}} kontributor\n* Panyithak: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tanggal rèvisi pungkasan: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tanggal njupuk: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanèn: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID Vèrsi Kaca: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Gagrag kutipan kanggo {{FULLPAGENAME}} ==\n\n=== [[APA style|Gagrag APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Dijupuk <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> saka {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Gagrag MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Gagrag MHRA]] ===\n{{SITENAME}} kontributor, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [diaksès <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Gagrag Chicago]] ===\n{{SITENAME}} kontributor, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (diaksès <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Gagrag CBE/CSE]] ===\n{{SITENAME}} kontributor. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [dikutip <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Sumadhiya saka:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Gagrag Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ditekani pungkasan <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n\n=== Isi [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; diaksès <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nYèn nganggo url pakèt [[LaTeX]] (<code>\\usepackage{url}</code> ngendi waé nèng pambuka) sing bakal ndadèkaké alamat wèb sing dipormat dadi luwih èndah, sing ngisor iki disaranaké:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; diaksès <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ka.json b/extensions/CiteThisPage/i18n/ka.json
new file mode 100644
index 00000000..e1d4a7ec
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ka.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "BRUTE",
+ "David1010",
+ "Malafaya",
+ "გიორგიმელა"
+ ]
+ },
+ "citethispage": "ციტირება",
+ "citethispage-desc": "ამატებს [[Special:Cite|ციტირების]] სპეციალურ გვერდს ხელსაწყოებში",
+ "citethispage-link": "ამ გვერდის ციტირება",
+ "tooltip-citethispage": "ინფორმაცია ამ გვერდის ციტირების შესახებ",
+ "citethispage-change-submit": "ციტირება",
+ "citethispage-change-target": "გვერდი:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== ბიბლიოგრაფიული დეტალები სტატიისათვის {{FULLPAGENAME}} ==\n\n* გვერდის სახელი: {{FULLPAGENAME}}\n* ავტორი: {{SITENAME}} contributors\n* გამომქვეყნებელი: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* ბოლო ცვლილების თარიღი: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* ჩატვირთვის თარიღი: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* მუდმივი URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* გვერდის ვერსიის ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== სტილის ციტირება სტატიისათვის {{FULLPAGENAME}} ==\n\n=== [[APA სტილი]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA სტილი]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA სტილი]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[ჩიკაგოს სტილი]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE სტილი]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook სტილი]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-ის ჩანაწერი ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[LaTeX]]-ის პაკეტის url-ს გამოყენებისას ვებ-გვერდების უფრო თვალსაჩინო წარმოდგენისათვის (<code>\\usepackage{url}</code> პრეამბულაში), სავარაუდოდ უკეთესი იქნება მიუთითოთ:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/kk-arab.json b/extensions/CiteThisPage/i18n/kk-arab.json
new file mode 100644
index 00000000..dba9faf3
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/kk-arab.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": [],
+ "citethispage": "دايەكسوز الۋ",
+ "citethispage-link": "بەتتەن دايەكسوز الۋ",
+ "citethispage-change-submit": "دايەكسوز ال!",
+ "citethispage-change-target": "بەت اتاۋى:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== «{{FULLPAGENAME}}» اتاۋىلى بەتىنىڭ كىتاپنامالىق ەگجەي-تەگجەيلەرى ==\n\n* بەتتىڭ اتاۋى: {{FULLPAGENAME}}\n* اۋتورى: {{SITENAME}} ۇلەسكەرلەرى\n* باسپاگەرى: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* سوڭعى نۇسقاسىنىڭ كەزى: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* الىنعان كەزى: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* تۇراقتى سىلتەمەسى: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* بەت نۇسقاسىنىڭ تەڭدەستىرۋ ٴنومىرى: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== «{{FULLPAGENAME}}» بەتىنىڭ دايەكسوز مانەرلەرى ==\n\n=== [[گوست مانەرى]] ===\n<!-- ([[گوست 7.1|گوست 7.1—2003]] جانە [[گوست 7.82|گوست 7.82—2001]]) -->\n{{SITENAME}}, {{int:sitesubtitle}} [ەلەكتروندى قاينار] : {{FULLPAGENAME}}, نۇسقاسىنىڭ ٴنومىرى {{REVISIONID}}, سوڭعى تۇزەتۋى {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC / ۋىيكىيپەدىييا اۋتورلارى. — ەلەكتروندى دەرەك. — فلورىيدا شتاتى. : ۋىيكىيمەدىييا قورى, {{CURRENTYEAR}}. — قاتىناۋ رەتى: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA مانەرى]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}'' ماعلۇماتى. {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} بەتىنەن <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> كەزىندە الىنعان.\n\n=== [[MLA مانەرى]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> <{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}>.\n\n=== [[MHRA مانەرى]] ===\n{{SITENAME}} ۇلەسكەرلەرى, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, <{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}> [<citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation> كەزىندە قاتىنالدى]\n\n=== [[شىيكاگو مانەرى]] ===\n{{SITENAME}} ۇلەسكەرى, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> كەزىندە قاتىنالدى).\n\n=== [[CBE/CSE مانەرى]] ===\n{{SITENAME}} ۇلەسكەرلەرى. {{FULLPAGENAME}} [ىينتەرنەت]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation> كەزىندە دايەكسوز الىندى]. قاتىناۋى:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[كوك كىتاپ|كوك كىتاپ مانەرى]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (سوڭعى قارالعانى <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> كەزىندە).\n\n=== [[BibTeX]] جازباسى ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[جەلىدەن; <citation>{{CURRENTDAY}}-{CURRENTMONTHNAME}}-{CURRENTYEAR}}</citation> كەزىندە قاتىنالدى]\"\n }\n\n[[LaTeX]] بۋماسىنىڭ URL جايىن (<code>\\usepackage{url}</code> كىرىسپەنىڭ قايبىر ورنىندا) قولدانعاندا (ۆەب جايلارىن ونەرلەۋ پىشىمدەۋىن كەلتىرەدى) كەلەسىسىن قالاۋعا بولادى:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[جەلىدەن; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> كەزىندە قاتىنالدى]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/kk-cyrl.json b/extensions/CiteThisPage/i18n/kk-cyrl.json
new file mode 100644
index 00000000..2dedc642
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/kk-cyrl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaztrans"
+ ]
+ },
+ "citethispage": "Дәйексөз алу",
+ "citethispage-desc": "[[Special:Cite|Дәйексөз]] арнайы бетін және құрал сілтемесін қосады",
+ "citethispage-link": "Беттен дәйексөз алу",
+ "citethispage-change-submit": "Дәйексөз ал!",
+ "citethispage-change-target": "Бет атауы:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== «{{FULLPAGENAME}}» атауылы бетінің кітапнамалық егжей-тегжейлері ==\n\n* Беттің атауы: {{FULLPAGENAME}}\n* Ауторы: {{SITENAME}} үлескерлері\n* Баспагері: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Соңғы нұсқасының кезі: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Алынған кезі: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Тұрақты сілтемесі: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Бет нұсқасының теңдестіру номірі: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== «{{FULLPAGENAME}}» бетінің дәйексөз мәнерлері ==\n\n=== [[ГОСТ мәнері]] ===\n<!-- ([[ГОСТ 7.1|ГОСТ 7.1—2003]] және [[ГОСТ 7.82|ГОСТ 7.82—2001]]) -->\n{{SITENAME}}, {{int:sitesubtitle}} [Электронды қайнар] : {{FULLPAGENAME}}, нұсқасының нөмірі {{REVISIONID}}, соңғы түзетуі {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC / Уикипедия ауторлары. — Электронды дерек. — Флорида штаты. : Уикимедия Қоры, {{CURRENTYEAR}}. — Қатынау реті: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA мәнері]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}'' мағлұматы. {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} бетінен <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> кезінде алынған.\n\n=== [[MLA мәнері]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA мәнері]] ===\n{{SITENAME}} үлескерлері, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [<citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation> кезінде қатыналды]\n\n=== [[Шикаго мәнері]] ===\n{{SITENAME}} үлескері, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> кезінде қатыналды).\n\n=== [[CBE/CSE мәнері]] ===\n{{SITENAME}} үлескерлері. {{FULLPAGENAME}} [Интернет]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation> кезінде дәйексөз алынды]. Қатынауы:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Көк кітап|Көк кітап мәнері]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (соңғы қаралғаны <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> кезінде).\n\n=== [[BibTeX]] жазбасы ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Желіден; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> кезінде қатыналды]\"\n }\n\n[[LaTeX]] бумасының URL жайын (<code>\\usepackage{url}</code> кіріспенің қайбір орнында) қолданғанда (веб жайларын өнерлеу пішімдеуін келтіреді) келесісін қалауға болады:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Желіден; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> кезінде қатыналды]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/kk-latn.json b/extensions/CiteThisPage/i18n/kk-latn.json
new file mode 100644
index 00000000..31592491
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/kk-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": [],
+ "citethispage": "Däýeksöz alw",
+ "citethispage-link": "Betten däýeksoz alw",
+ "citethispage-change-submit": "Däýeksöz al!",
+ "citethispage-change-target": "Bet atawı:",
+ "citethispage-content": "__NOTOC__\n<div style=\"border: 1px solid grey; background: #E6E8FA; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== «{{FULLPAGENAME}}» atawılı betiniñ kitapnamalıq egjeý-tegjeýleri ==\n\n* Bettiñ atawı: {{FULLPAGENAME}}\n* Awtorı: {{SITENAME}} üleskerleri\n* Baspageri: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Soñğı nusqasınıñ kezi: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Alınğan kezi: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Turaqtı siltemesi: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Bet nusqasınıñ teñdestirw nomiri: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks\" style=\"border: 1px solid grey; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== «{{FULLPAGENAME}}» betiniñ däýeksöz mänerleri ==\n\n=== [[GOST mäneri]] ===\n<!-- ([[GOST 7.1|GOST 7.1—2003]] jäne [[GOST 7.82|GOST 7.82—2001]]) -->\n{{SITENAME}}, {{int:sitesubtitle}} [Élektrondı qaýnar] : {{FULLPAGENAME}}, nusqasınıñ nömiri {{REVISIONID}}, soñğı tüzetwi {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC / Wïkïpedïya awtorları. — Élektrondı derek. — Florïda ştatı. : Wïkïmedïya Qorı, {{CURRENTYEAR}}. — Qatınaw reti: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA mäneri]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}'' mağlumatı. {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} betinen <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> kezinde alınğan.\n\n=== [[MLA mäneri]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA mäneri]] ===\n{{SITENAME}} üleskerleri, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [<citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation> kezinde qatınaldı]\n\n=== [[Şïkago mäneri]] ===\n{{SITENAME}} üleskeri, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> kezinde qatınaldı).\n\n=== [[CBE/CSE mäneri]] ===\n{{SITENAME}} üleskerleri. {{FULLPAGENAME}} [Ïnternet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation> kezinde däýeksöz alındı]. Qatınawı:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Kök kitap|Kök kitap mäneri]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (soñğı qaralğanı <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> kezinde).\n\n=== [[BibTeX]] jazbası ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Jeliden; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> kezinde qatınaldı]\"\n }\n\n[[LaTeX]] bwmasınıñ URL jaýın (<code>\\usepackage{url}</code> kirispeniñ qaýbir ornında) qoldanğanda (veb jaýların önerlew pişimdewin keltiredi) kelesisin qalawğa boladı:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Jeliden; <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation> kezinde qatınaldı]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/kl.json b/extensions/CiteThisPage/i18n/kl.json
new file mode 100644
index 00000000..33decff9
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/kl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Qaqqalik"
+ ]
+ },
+ "citethispage-link": "Una qupperneq issuaruk"
+}
diff --git a/extensions/CiteThisPage/i18n/km.json b/extensions/CiteThisPage/i18n/km.json
new file mode 100644
index 00000000..dfba2617
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/km.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chhorran",
+ "Lovekhmer",
+ "គីមស៊្រុន"
+ ]
+ },
+ "citethispage": "ការយោង",
+ "citethispage-link": "ប្រភពនៃទំព័រនេះ",
+ "tooltip-citethispage": "ព័ត៌មានអំពីការយោងមកអត្ថបទនេះ",
+ "citethispage-change-submit": "ដាក់ការយោង",
+ "citethispage-change-target": "ទំព័រ ៖"
+}
diff --git a/extensions/CiteThisPage/i18n/kn.json b/extensions/CiteThisPage/i18n/kn.json
new file mode 100644
index 00000000..a3f22390
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/kn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nayvik",
+ "Shushruth"
+ ]
+ },
+ "citethispage": "ಉಲ್ಲೇಖಿಸಿ",
+ "citethispage-link": "ಈ ಪುಟವನ್ನು ಉಲ್ಲೇಖಿಸಿ",
+ "citethispage-change-target": "ಪುಟ:"
+}
diff --git a/extensions/CiteThisPage/i18n/ko.json b/extensions/CiteThisPage/i18n/ko.json
new file mode 100644
index 00000000..c55f220b
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ko.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kwj2772",
+ "ToePeu",
+ "관인생략",
+ "아라"
+ ]
+ },
+ "citethispage": "인용",
+ "citethispage-desc": "[[Special:Cite|인용]] 특수 문서와 도구모음 링크를 추가합니다",
+ "citethispage-link": "이 문서 인용하기",
+ "tooltip-citethispage": "이 문서를 인용하는 방법에 대한 정보",
+ "citethispage-change-submit": "인용",
+ "citethispage-change-target": "문서:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}}의 출처 정보 ==\n\n* 문서 이름: {{FULLPAGENAME}}\n* 저자: {{SITENAME}} 기여자\n* 발행처: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* 최신 판의 날짜: {{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일 {{CURRENTTIME}} UTC\n* 확인한 날짜: <citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일 {{CURRENTTIME}} UTC</citation>\n* 고유 URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* 문서 판 ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}}의 인용 양식 ==\n\n=== [[APA 양식]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일). ''{{SITENAME}}, {{int:sitesubtitle}}''. <citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일, {{CURRENTTIME}}</citation>에 확인 {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} 에서 찾아볼 수 있음.\n\n=== [[MLA 양식]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA 양식]] ===\n{{SITENAME}} 기여자, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [<citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일</citation>에 접근]\n\n=== [[시카고 양식]] ===\n{{SITENAME}} 기여자, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일</citation>에 접근).\n\n=== [[Council of Science Editors|CBE/CSE 양식]] ===\n{{SITENAME}} 기여자. {{FULLPAGENAME}} [인터넷]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>에 인용]. 다음에서 찾아볼 수 있음:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[블루북|블루북 양식]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (<citation>{{CURRENTYEAR}}년 {{CURRENTMONTHNAME}} {{CURRENTDAY}}일</citation>에 마지막으로 방문함).\n\n=== [[BibTeX]] 기록 ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[온라인; 접근한 날짜 <citation>{{CURRENTYEAR}}년-{{CURRENTMONTHNAME}}-{{CURRENTDAY}}일</citation>]\"\n }\n\n[[LaTeX]] 패키지 URL (프리앰블의 어딘가에 <code>\\usepackage{url}</code>)을 사용하면 더 정돈된 형식의 웹 주소를 얻을 수 있습니다. 다음과 같은 방법을 선호합니다:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[온라인; 접근한 날짜 <citation>{{CURRENTYEAR}}년-{{CURRENTMONTHNAME}}-{{CURRENTDAY}}일</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/krc.json b/extensions/CiteThisPage/i18n/krc.json
new file mode 100644
index 00000000..1c911e79
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/krc.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iltever"
+ ]
+ },
+ "citethispage": "Цитата этиу",
+ "citethispage-link": "Бетни цитата эт",
+ "tooltip-citethispage": "Бу бетни къалай цитата этерге керек болгъаныны юсюнден информация"
+}
diff --git a/extensions/CiteThisPage/i18n/krj.json b/extensions/CiteThisPage/i18n/krj.json
new file mode 100644
index 00000000..8c395d75
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/krj.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77"
+ ]
+ },
+ "citethispage-change-target": "Pahina:"
+}
diff --git a/extensions/CiteThisPage/i18n/ksh.json b/extensions/CiteThisPage/i18n/ksh.json
new file mode 100644
index 00000000..7684dd97
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ksh.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "citethispage": "Zittiere",
+ "citethispage-desc": "Brenk de {{int:specialpage}} „[[Special:CiteThisPage|Ziteere]]“ un ene Link onger „{{int:toolbox}}“.",
+ "citethispage-link": "Di Sigk Zitteere",
+ "tooltip-citethispage": "Enfommazjuhne doh drövver, wi mer heh di Sigg zitteere sullt.",
+ "citethispage-change-submit": "Zittėere",
+ "citethispage-change-target": "Sigk:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\"> \n== De biblejojraafesche Aanjabe för di Sigg „{{FULLPAGENAME}}“ ==\n\n* Siggetittel: {{FULLPAGENAME}}\n* Schriever: Beärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}\n* Rußjävver: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Et läz jändert aam: {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} öm {{CURRENTTIME}} Uhr (UTC)\n* Affjeroofe aam: <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}} öm {{CURRENTTIME}} Uhr (UTC)</citation>\n* URL met Beschtand: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Version: {{REVISIONID}}\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n== De Zitatstile för di Sigg „{{FULLPAGENAME}}“ ==\n=== Noh dä [[APA iehre Schtil|APA iehrem Schtil]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> vun {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n=== Noh de [[MLA style manual|MLA iehrem Schtil-Handbooch]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n=== Nohm [[MHRA Style Guide|MHRA Schtil-Föhrer]] ===\nBeärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n=== Nohm [[Chicago Manual of Style|Chicago-Schtil-Handbooch]] ===\nBeärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n=== Nohm Schtil vum [[Council of Science Editors|Rood vun de wesseschafflije Schriever (CBE/CSE)]] ===\nBeärbeider {{GRAMMAR:Genitive|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [zitteerd aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}</citation>]. Affroofbaa onger:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n=== Nohm Schtil vum [[Bluebook|blouhe Bohch]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>).\n=== Als ene [[BibTeX]]-Endraach ===\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n\nDat [[LaTeX]]-Modul „url“ määd_en schönere Internet-Addräß. \nWam_mer <code>\\usepackage{url}</code> em Einleidongsberett hät, kam_mer dat heh nämme:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; affjeroofe aam <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\"\n }\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ku-latn.json b/extensions/CiteThisPage/i18n/ku-latn.json
new file mode 100644
index 00000000..2f07b230
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ku-latn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "George Animal",
+ "Ghybu"
+ ]
+ },
+ "citethispage-link": "Qalkirina rûpelê bibîne",
+ "tooltip-citethispage": "Agahdariya li ser qalkirina rûpelê",
+ "citethispage-change-target": "Rûpel:"
+}
diff --git a/extensions/CiteThisPage/i18n/kw.json b/extensions/CiteThisPage/i18n/kw.json
new file mode 100644
index 00000000..d8b80b72
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/kw.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kernoweger",
+ "Kw-Moon",
+ "Nrowe"
+ ]
+ },
+ "citethispage": "Devynna",
+ "citethispage-link": "Devynna an erthygel-ma",
+ "tooltip-citethispage": "Kedhlow war fatel dhevynnir an folen-ma",
+ "citethispage-change-submit": "Devynna",
+ "citethispage-change-target": "Folen:"
+}
diff --git a/extensions/CiteThisPage/i18n/la.json b/extensions/CiteThisPage/i18n/la.json
new file mode 100644
index 00000000..7ac26406
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/la.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Autokrator",
+ "MissPetticoats",
+ "SPQRobin",
+ "UV"
+ ]
+ },
+ "citethispage": "Paginam citare",
+ "citethispage-desc": " Addet [[Special:Cite|citation]] specialem paginam et arcam instrumenti",
+ "citethispage-link": "Hanc paginam citare",
+ "tooltip-citethispage": "Institutiones de hac pagina citanda",
+ "citethispage-change-submit": "Citare",
+ "citethispage-change-target": "Pagina:"
+}
diff --git a/extensions/CiteThisPage/i18n/lad.json b/extensions/CiteThisPage/i18n/lad.json
new file mode 100644
index 00000000..ec01228a
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lad.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Menachem.Moreira"
+ ]
+ },
+ "citethispage-change-target": "Pajina:"
+}
diff --git a/extensions/CiteThisPage/i18n/lb.json b/extensions/CiteThisPage/i18n/lb.json
new file mode 100644
index 00000000..a58be879
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lb.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaffi",
+ "Robby",
+ "Soued031"
+ ]
+ },
+ "citethispage": "Zitéierhëllef",
+ "citethispage-desc": "Setzt eng [[Special:CiteThisPage|Zitatioun op dëser Spezialsäit]] bei an e Link an d'Geschiirkëscht",
+ "citethispage-link": "Dës Säit zitéieren",
+ "tooltip-citethispage": "Informatioune wéi een dës Säit zitéiere kann",
+ "citethispage-change-submit": "weisen",
+ "citethispage-change-target": "Säit:"
+}
diff --git a/extensions/CiteThisPage/i18n/lez.json b/extensions/CiteThisPage/i18n/lez.json
new file mode 100644
index 00000000..3860fbc3
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lez.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Migraghvi"
+ ]
+ },
+ "citethispage": "Цитата гъин",
+ "citethispage-change-submit": "Цитата гъин",
+ "citethispage-change-target": "Ччин:"
+}
diff --git a/extensions/CiteThisPage/i18n/lfn.json b/extensions/CiteThisPage/i18n/lfn.json
new file mode 100644
index 00000000..6df47e36
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lfn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya"
+ ]
+ },
+ "citethispage-change-target": "Paje:"
+}
diff --git a/extensions/CiteThisPage/i18n/lg.json b/extensions/CiteThisPage/i18n/lg.json
new file mode 100644
index 00000000..a508cad2
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lg.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kizito"
+ ]
+ },
+ "citethispage": "Juliza",
+ "citethispage-link": "Juliza olupapula luno",
+ "tooltip-citethispage": "Amagezi agakwata ku ngeri ey'okujuliz'olupapula luno",
+ "citethispage-change-submit": "Kakasa okujuliza",
+ "citethispage-change-target": "Lupapula:"
+}
diff --git a/extensions/CiteThisPage/i18n/li.json b/extensions/CiteThisPage/i18n/li.json
new file mode 100644
index 00000000..dd03fd57
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/li.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ooswesthoesbes",
+ "Pahles"
+ ]
+ },
+ "citethispage": "Citere",
+ "citethispage-desc": "Voog 'n [[Special:Cite|speciaal pagina óm te citere]] toe en 'ne link derhaer in de gereidsjapskis",
+ "citethispage-link": "Citeer dees pagina",
+ "tooltip-citethispage": "Informatie euver wie se dees pazjena kins citere",
+ "citethispage-change-submit": "Citere",
+ "citethispage-change-target": "Pagina:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografische gegaeves veur {{FULLPAGENAME}} ==\n\n* Paginanaam: {{FULLPAGENAME}}\n* Sjriever: {{SITENAME}}-biedragers\n* Oetgaever: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tiedstip lèste versie: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tiedstip geraodplieëgd: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanente URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Paginaversienómmer: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Citaatstiel veur {{FULLPAGENAME}} ==\n\n=== [[APA style|APA-stiel]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Geraodplieëg op <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> van {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stiel]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stiel]] ===\n{{SITENAME}}-biedragers, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [geraodplieëg <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicagostiel]] ===\n{{SITENAME}}-biedragers, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (geraodplieëg <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stiel]] ===\n{{SITENAME}}-biedragers. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cetaot van <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Besjikbaar op:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebookstiel]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (geraodplieëg op <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-gegaeves ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n't Volgendje kan de veurkäör höbben es de [[LaTeX]]-moduul \"url\" wuuertj gebroek (<code>\\usepackage{url}</code> örges in de inleiding), die webadresse sjónder opgemaak:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/lmo.json b/extensions/CiteThisPage/i18n/lmo.json
new file mode 100644
index 00000000..c6849859
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lmo.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dakrismeno"
+ ]
+ },
+ "citethispage": "Cita una vus",
+ "citethispage-link": "Cita quela vus chì"
+}
diff --git a/extensions/CiteThisPage/i18n/lo.json b/extensions/CiteThisPage/i18n/lo.json
new file mode 100644
index 00000000..f85eda39
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lo.json
@@ -0,0 +1,6 @@
+{
+ "@metadata": [],
+ "citethispage": "ອ້າງອີງ",
+ "citethispage-link": "ອ້າງອີງບົດຄວາມນີ້",
+ "citethispage-change-target": "ໜ້າ:"
+}
diff --git a/extensions/CiteThisPage/i18n/lrc.json b/extensions/CiteThisPage/i18n/lrc.json
new file mode 100644
index 00000000..80f2918c
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lrc.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bonevarluri",
+ "Mogoeilor"
+ ]
+ },
+ "citethispage": "جاگه",
+ "citethispage-link": "جاگه ای بلگه",
+ "tooltip-citethispage": "دونسمنیا چه جور دای بلگه جاگر بوئه",
+ "citethispage-change-submit": "جاگه",
+ "citethispage-change-target": "بلگه"
+}
diff --git a/extensions/CiteThisPage/i18n/lt.json b/extensions/CiteThisPage/i18n/lt.json
new file mode 100644
index 00000000..3760f03b
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lt.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Garas"
+ ]
+ },
+ "citethispage": "Cituoti",
+ "citethispage-desc": "Prideda [[Special:Cite|citavimo]] specialųjį puslapį ir įrankių juostos nuorodą",
+ "citethispage-link": "Cituoti šį puslapį",
+ "tooltip-citethispage": "Informacija kaip cituoti šį puslapį",
+ "citethispage-change-submit": "Cituoti",
+ "citethispage-change-target": "Puslapis:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografinės \"{{FULLPAGENAME}}\" detalės==\n\n* Puslapio pavadinimas: {{FULLPAGENAME}} \n* Autorius: Projekto \"{{SITENAME}}\" naudotojai\n* Leidėjas: ''{{SITENAME}}''. \n* Paskutinės versijos data: {{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC\n* Puslapis gautas: <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC</citation>\n* Nuolatinė nuoroda: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Puslapio versijos Nr.: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Citatų stiliai puslapiui \"{{FULLPAGENAME}}\" ==\n\n=== APA stilius ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}''. Gautas <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}}</citation> iš {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA stilius ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}''. {{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC. <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA stilius ===\n{{SITENAME}} naudotojai, '{{FULLPAGENAME}}', ''{{SITENAME}},'' {{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>]\n\n=== Čikagos stilius ===\n{{SITENAME}} naudotojai, \"{{FULLPAGENAME}}\", ''{{SITENAME}}'', {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>).\n\n=== CBE/CSE stilius ===\n{{SITENAME}} naudotojai. {{FULLPAGENAME}} [internete]. {{SITENAME}}, {{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTTIME}} UTC [cituota <citation>{{CURRENTYEAR}}-{{CURRENTMONTH}}-{{CURRENTDAY2}}</citation>]. Galima rasti: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook stilius ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (paskutinį kartą žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>).\n\n=== BibTeX įrašas ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Žiniatinklyje; žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>]\"\n }\n\nKai naudojate LaTeX paketą ''url'' (<code>\\usepackage{url}</code> kur nors pradžioje), kuris skirtas duoti daug gražiau suformuotus žiniatinklio adresus, patartina naudoti šitaip:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Žiniatinklyje; žiūrėta <citation>{{CURRENTYEAR}} {{CURRENTMONTHNAME}} {{CURRENTDAY}}</citation>]\"\n }\n\n\n</div>"
+}
diff --git a/extensions/CiteThisPage/i18n/lus.json b/extensions/CiteThisPage/i18n/lus.json
new file mode 100644
index 00000000..6ca1b5da
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lus.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "RMizo"
+ ]
+ },
+ "citethispage": "Ràwnna",
+ "citethispage-desc": "[[Special:Cite|Ràwnna]] phêk vohbîk leh hmanrawbawm zawmna belhna",
+ "citethispage-link": "Ràwnna",
+ "tooltip-citethispage": "Hë phêk ràwnna chungchanga kaihhruaina",
+ "citethispage-change-submit": "Ràwnna:",
+ "citethispage-change-target": "Phêk:"
+}
diff --git a/extensions/CiteThisPage/i18n/lv.json b/extensions/CiteThisPage/i18n/lv.json
new file mode 100644
index 00000000..6d6f1ba0
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lv.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xil"
+ ]
+ },
+ "citethispage": "Citēšana",
+ "citethispage-link": "Atsauce uz šo lapu",
+ "citethispage-change-submit": "Parādīt atsauci",
+ "citethispage-change-target": "Raksts:"
+}
diff --git a/extensions/CiteThisPage/i18n/lzh.json b/extensions/CiteThisPage/i18n/lzh.json
new file mode 100644
index 00000000..0af638b3
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/lzh.json
@@ -0,0 +1,5 @@
+{
+ "@metadata": [],
+ "citethispage": "引文",
+ "citethispage-link": "引文"
+}
diff --git a/extensions/CiteThisPage/i18n/mai.json b/extensions/CiteThisPage/i18n/mai.json
new file mode 100644
index 00000000..9241bbe2
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/mai.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tulsi Bhagat"
+ ]
+ },
+ "citethispage-link": "यी पन्ना बनाउ",
+ "tooltip-citethispage": "यी पन्नाके उद्धृत करै कऽ लेल जानकारी"
+}
diff --git a/extensions/CiteThisPage/i18n/mg.json b/extensions/CiteThisPage/i18n/mg.json
new file mode 100644
index 00000000..cedb8122
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/mg.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jagwar"
+ ]
+ },
+ "citethispage-link": "Hitanisa ity pejy ity"
+}
diff --git a/extensions/CiteThisPage/i18n/mhr.json b/extensions/CiteThisPage/i18n/mhr.json
new file mode 100644
index 00000000..1f12fa23
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/mhr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Сай"
+ ]
+ },
+ "citethispage-change-target": "Лаштык:"
+}
diff --git a/extensions/CiteThisPage/i18n/min.json b/extensions/CiteThisPage/i18n/min.json
new file mode 100644
index 00000000..d0f440b1
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/min.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iwan Novirion"
+ ]
+ },
+ "citethispage": "Kutip",
+ "citethispage-desc": "Manambahan laman istimewa [[Special:Cite|kutipan]] jo pautan pado kotak pakakeh",
+ "citethispage-link": "Kutip laman ko",
+ "tooltip-citethispage": "Informasi caro mangutip laman ko",
+ "citethispage-change-submit": "Kutip",
+ "citethispage-change-target": "Laman:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Rincian bibliografi untuak {{FULLPAGENAME}} ==\n\n* Namo laman: {{FULLPAGENAME}} \n* Pangarang: Para kontributor {{SITENAME}}\n* Panerbit: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Tanggal revisi tarakhia: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Tanggal akses: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Pautan parmanen: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Kontributor utamo: [http://vs.aka-online.de/cgi-bin/wppagehiststat.pl?lang=min.wikipedia&page={{urlencode:{{FULLPAGENAME}}}} Sajarah revisi]\n* ID versi laman: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks\" style=\"border: 1px solid grey; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== Format kutipan untuak {{FULLPAGENAME}} ==\n\n=== [[:en:APA style|Format APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}). Pado ''{{SITENAME}}, {{int:sitesubtitle}}''. Diakses pukua {{#time:H:i, j F Y}}, dari {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:The MLA Style Manual|Format MLA]] ===\nKontributor {{SITENAME}}. \"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. Situs, {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[:en:MHRA Style Guide|Format MHRA]] ===\nKontributor {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [diakses {{#time:j F Y}}]\n\n=== [[:en:The Chicago Manual of Style|Format Chicago]] ===\nKontributor {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (diakses {{#time:j F Y}}).\n\n=== [[:en:Council of Science Editors|Format CBE/CSE]] ===\nKontributor {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC [dikutip pado {{#time:j M Y}}]. Tasadio dari: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:Bluebook|Format Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (tarakhia dikunjuangi pado {{#time:j M Y}}).\n\n=== [[:en:Bluebook#Citation_to_Wikipedia|Bluebook: Harvard JOLT style]] ===\n{{SITENAME}}, ''{{FULLPAGENAME}}'', {{canonicalurl:{{FULLPAGENAME}}}} (opsi deskripsi disiko) (pado {{#time:j M Y, H:i}} GMT).\n\n=== [[:en:American Medical Association|AMA]] style ===\nKontributor {{SITENAME}}. {{FULLPAGENAME}}. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}. {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. Tasadio pado: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. Diakses {{#time:j F Y}}.\n\n=== Entri [[:en:BibTeX|BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Daring; diakses {{#time:j-F-Y}}]\"\n }\n\nBilo manggunoan paket url [[:en:LaTeX|LaTeX]] (<code>\\usepackage{url}</code> di manopun di bagian pambukak) nan biasonyo manghasilkan alamaik-alamaik web nan diformat labiah rancak, caro ko labiah disarankan:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Daring; diakses {{#time:j-F-Y}}]\"\n }\n\n=== Laman rundiang Wikipedia ===\n;Markah: <nowiki>[[</nowiki>{{FULLPAGENAME}}<nowiki>]]</nowiki> (<nowiki>[</nowiki>{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} versi ko<nowiki>]</nowiki>)\n\n;Hasil: [{{canonicalurl:{{FULLPAGENAME}}}} {{FULLPAGENAME}}] ([{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} versi ko])\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/mk.json b/extensions/CiteThisPage/i18n/mk.json
new file mode 100644
index 00000000..6a23f84c
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/mk.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06",
+ "Brest",
+ "Misos"
+ ]
+ },
+ "citethispage": "Цитат",
+ "citethispage-desc": "Додава службена страница за [[Special:CiteThisPage|наведување]] и врска кон алатникот",
+ "citethispage-link": "Наведи ја страницава",
+ "tooltip-citethispage": "Информации како да ја цитирате оваа страница",
+ "citethispage-change-submit": "Наведи",
+ "citethispage-change-target": "Страница:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Библиографски податоци за {{FULLPAGENAME}} ==\n\n* Назив на страницата: {{FULLPAGENAME}}\n* Автор: Учесници на {{SITENAME}}\n* Извадач: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Последна измена: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Пристапено на: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Трајна URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Назнака на верзијата: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Стилови на наведување за {{FULLPAGENAME}} ==\n\n=== [[APA style|Стил APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Стил MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Стил MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Чикашки стил]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Стил CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Стил „Сина книга“]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-запис ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[семрежно; пристапено на <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\nКога користите [[LaTeX]], спакувајте ја URL-адресата (<code>\\usepackage{url}</code> некаде во преамбулата), при што се добиваат многу поубаво горматирани адреси. Се претпочитаат следниве:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ml.json b/extensions/CiteThisPage/i18n/ml.json
new file mode 100644
index 00000000..e87a900d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ml.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Praveenp",
+ "Shijualex"
+ ]
+ },
+ "citethispage": "ഉദ്ധരിക്കുക",
+ "citethispage-desc": "[[Special:Cite|സൈറ്റേഷൻ]] എന്ന പ്രത്യേക താളും, പണി സഞ്ചി കണ്ണിയും ചേർക്കുന്നു",
+ "citethispage-link": "ഈ താൾ ഉദ്ധരിക്കുക",
+ "tooltip-citethispage": "ഈ താളിനെ എങ്ങനെ അവലംബിതമാക്കാം എന്ന വിവരങ്ങൾ",
+ "citethispage-change-submit": "ഉദ്ധരിക്കുക",
+ "citethispage-change-target": "താൾ:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}} താളിന്റെ ഗ്രന്ഥസൂചി വിവരണം ==\n\n* താളിന്റെ തലക്കെട്ട്: {{FULLPAGENAME}}\n* എഴുതിയത്: {{SITENAME}} ലേഖകർ\n* പ്രസിദ്ധീകരിച്ചത്: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* അവസാനത്തെ നാൾപ്പതിപ്പിന്റെ തീയതി: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* ശേഖരിച്ച് തീയതി: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* സ്ഥിരം യു.ആർ.എൽ.: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* താളിന്റെ പതിപ്പിന്റെ ഐ.ഡി.: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}} താളിനുള്ള അവലംബ ശൈലികൾ ==\n=== [[:w:en:APA style|എ.പി.എ. ശൈലി]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} താളിൽ നിന്നും, <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> -നു ശേഖരിച്ചത്.\n\n=== [[:w:en:The MLA style manual|എം.എൽ.എ. ശൈലി]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} യു.റ്റി.സി.. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[:w:en:MHRA Style Guide|എം.എച്ച്.ആർ.എ. ശൈലി]] ===\n{{SITENAME}} ലേഖകർ, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} യൂ.റ്റി.സി., &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [എടുത്ത തീയതി: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[:w:en:The Chicago Manual of Style|ഷിക്കാഗോ ശൈലി]] ===\n{{SITENAME}} ലേഖകർ, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (എടുത്ത തീയതി: <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[:w:en:Council of Science Editors|സി.ബി.ഇ./സി.എസ്.ഇ. ശൈലി]] ===\n{{SITENAME}} ലേഖകർ. {{FULLPAGENAME}} [ഇന്റർനെറ്റ്]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} യു.റ്റി.സി. [അവലംബിച്ച തീയതി: <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. ലഭിച്ചത്:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:w:en:Bluebook|ബ്ലൂബുക്ക് ശൈലി]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (അവസാനം പരിശോധിച്ചത് <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[:w:en:BibTeX|ബിബ്ടെക്സ്]] രീതി ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[:w:en:LaTeX|ലാറ്റക്സ്]] പാക്കേജ് യൂ.ആർ.എൽ. ഉപയോഗിക്കുകയാണെങ്കിൽ (പീഠികയിൽ <code>\\usepackage{url}</code> എന്ന് നൽകി), കൂടുതൽ മനോഹരമായി വെബ് വിലാസം നൽകാറുണ്ട്, താഴെക്കൊടുക്കുന്ന രീതി ഉപയോഗിക്കാൻ താത്പര്യപ്പെടുന്നു:\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/mn.json b/extensions/CiteThisPage/i18n/mn.json
new file mode 100644
index 00000000..4854c3c9
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/mn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chinneeb",
+ "MongolWiki"
+ ]
+ },
+ "citethispage": "Иш татах",
+ "citethispage-link": "Эндээс иш татах",
+ "citethispage-change-submit": "Иш татах",
+ "citethispage-change-target": "Хуудас:"
+}
diff --git a/extensions/CiteThisPage/i18n/mr.json b/extensions/CiteThisPage/i18n/mr.json
new file mode 100644
index 00000000..02f0f3cf
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/mr.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaustubh",
+ "Mahitgar",
+ "V.narsikar"
+ ]
+ },
+ "citethispage": "उधृत करा",
+ "citethispage-desc": "एक [[Special:Cite|बाह्यदुवे]] देणारे विशेषपान व साधनपेटीचा दुवा जोडते",
+ "citethispage-link": "हे पान उधृत करा",
+ "tooltip-citethispage": "हे पृष्ठ बघण्यासाठीची माहिती",
+ "citethispage-change-submit": "उधृत करा",
+ "citethispage-change-target": "पान"
+}
diff --git a/extensions/CiteThisPage/i18n/mrj.json b/extensions/CiteThisPage/i18n/mrj.json
new file mode 100644
index 00000000..7b608a14
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/mrj.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amdf"
+ ]
+ },
+ "citethispage-link": "Ӹлӹшташӹм цитируяш"
+}
diff --git a/extensions/CiteThisPage/i18n/ms.json b/extensions/CiteThisPage/i18n/ms.json
new file mode 100644
index 00000000..c61056c4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ms.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Aurora",
+ "Aviator"
+ ]
+ },
+ "citethispage": "Petik Laman Ini",
+ "citethispage-desc": "Menambah laman khas dan pautan kotak alatan untuk [[Special:Cite|pemetikan]]",
+ "citethispage-link": "Petik laman ini",
+ "tooltip-citethispage": "Maklumat tentang cara memetik laman ini",
+ "citethispage-change-submit": "Petik",
+ "citethispage-change-target": "Laman:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Butiran bibliografi {{FULLPAGENAME}} ==\n\n* Nama laman: {{FULLPAGENAME}}\n* Pengarang: Para penyumbang {{SITENAME}}\n* Penerbit: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tarikh semakan terkini: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tarikh diambil: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL kekal: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID versi laman: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Gaya petikan {{FULLPAGENAME}} ==\n\n=== [[Gaya APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Manual gaya MLA|Gaya MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Panduan gaya MHRA|Gaya MHRA]] ===\nPara penyumbang {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [dicapai pada <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Gaya Chicago]] ===\nPara penyumbang {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (dicapai pada <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Gaya CBE/CSE]] ===\nPara penyumbang {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [dipetik pada <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Didapati dari:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Gaya Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (kali terakhir dilawati pada <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Lema [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; dicapai pada <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nApabila menggunakan URL pakej [[LaTeX]] (<code>\\usepackage{url}</code> di suatu tempat dalam mukadimah) yang sering memberikan alamat web yang lebih kemas formatnya, ada baiknya menggunakan yang berikut:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; dicapai pada <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/mt.json b/extensions/CiteThisPage/i18n/mt.json
new file mode 100644
index 00000000..24eb54e3
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/mt.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrisportelli",
+ "Giangian15"
+ ]
+ },
+ "citethispage": "Ċitazzjoni",
+ "citethispage-desc": "Iżżid paġna speċjali għaċ-[[Special:Cite|ċitazzjonijiet]] u ħolqa mal-istrumenti",
+ "citethispage-link": "Iċċita din il-paġna",
+ "tooltip-citethispage": "Informazzjoni fuq kif tiċċita din il-paġna",
+ "citethispage-change-submit": "Oħloq ċitazzjoni",
+ "citethispage-change-target": "Paġna:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Dettalji biblijografiċi għal {{FULLPAGENAME}} ==\n\n* Titlu tal-paġna: {{FULLPAGENAME}}\n* Awtur: kontributuri ta' {{SITENAME}}\n* Editur: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data tal-aħħar modifika: {{CURRENTDAY}} ta' {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data tal-konsultazzjoni tal-paġna: <citation>{{CURRENTDAY}} ta' {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanenti: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID tal-verżjoni tal-paġna: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stili ta' ċitazzjoni għal {{FULLPAGENAME}} ==\n\n=== [[APA style|Stil APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Aċċessat fil-<citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> minn {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Stil MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} ta' {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Stil MHRA]] ===\nKontributuri ta' {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} ta' {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [aċċessat fil-<citation>{{CURRENTDAY}} ta' {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Stil Chicago]] ===\nKontributuri ta' {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (aċċessat f'<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Stil CBE/CSE]] ===\nKontributuri ta' {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [iċċitat fl-<citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibbli fuq:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Stil Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (l-aħħar viżta f'<citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Daħla [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; aċċessat fil-<citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nMeta tuża l-pakkett [[LaTeX]] għall-url (<code>\\usepackage{url}</code> f'kwalunkwe parti fil-preambolu) li ġeneralment tagħti indirizzi elettroniċi ifformattjati aħjar, huwa ppreferut li jintuża l-kodiċi segwenti:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; aċċessat fil<citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/mwl.json b/extensions/CiteThisPage/i18n/mwl.json
new file mode 100644
index 00000000..5cbc6bb2
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/mwl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya"
+ ]
+ },
+ "citethispage-change-target": "Páigina:"
+}
diff --git a/extensions/CiteThisPage/i18n/myv.json b/extensions/CiteThisPage/i18n/myv.json
new file mode 100644
index 00000000..8ca8c633
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/myv.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amdf",
+ "Botuzhaleny-sodamo"
+ ]
+ },
+ "citethispage-change-target": "Лопась:"
+}
diff --git a/extensions/CiteThisPage/i18n/nah.json b/extensions/CiteThisPage/i18n/nah.json
new file mode 100644
index 00000000..c55e3bfa
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nah.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fluence",
+ "Ricardo gs"
+ ]
+ },
+ "citethispage": "Titēnōtzaz",
+ "citethispage-link": "Tlahtoa inīn tlahcuilōltechcopa",
+ "citethispage-change-submit": "Titēnōtzaz",
+ "citethispage-change-target": "Zāzanilli:"
+}
diff --git a/extensions/CiteThisPage/i18n/nan.json b/extensions/CiteThisPage/i18n/nan.json
new file mode 100644
index 00000000..db78d893
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nan.json
@@ -0,0 +1,7 @@
+{
+ "@metadata": [],
+ "citethispage": "Ín-iōng",
+ "citethispage-link": "Ín-iōng chit phiⁿ bûn-chiuⁿ",
+ "citethispage-change-submit": "Ín-iōng",
+ "citethispage-change-target": "Ia̍h:"
+}
diff --git a/extensions/CiteThisPage/i18n/nap.json b/extensions/CiteThisPage/i18n/nap.json
new file mode 100644
index 00000000..7ed22692
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nap.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "citethispage-link": "Cita sta paggena",
+ "tooltip-citethispage": "Nfurmaziune ncopp'a comme s'avess'a cità int'a sta paggena"
+}
diff --git a/extensions/CiteThisPage/i18n/nb.json b/extensions/CiteThisPage/i18n/nb.json
new file mode 100644
index 00000000..ff4869f4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nb.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nghtwlkr"
+ ]
+ },
+ "citethispage": "Siter",
+ "citethispage-desc": "Legger til en [[Special:Cite|siteringsside]] og lenke i verktøy-menyen",
+ "citethispage-link": "Siter denne siden",
+ "tooltip-citethispage": "Informasjon om hvordan denne siden kan siteres",
+ "citethispage-change-submit": "Siter",
+ "citethispage-change-target": "Side:",
+ "citethispage-content": "__NOTOC__\n<div style=\"width: 90%; text-align: center; font-size: 85%; margin: 10px auto;\">Innhold: [[#APA-stil|APA]] | [[#MLA-stil|MLA]] | [[#MHRA-stil|MHRA]] | [[#Chicago-stil|Chicago]] | [[#CBE/CSE-stil|CSE]] | [[#Bluebook-stil|Bluebook]] | [[#BibTeX|BibTeX]]</div>\n<div style=\"border: 1px solid grey; background: #E6E8FA; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n==Bibliografiske detaljer for «[[{{PAGENAME}}|{{FULLPAGENAME}}]]»==\n\n* Sidenavn: [[{{PAGENAME}}|{{FULLPAGENAME}}]]\n* Forfatter: Wikipedia-brukere\n* Utgiver: ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. \n* Dato for forrige revisjon: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Dato sitert: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanent lenke: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Revisjons-ID: {{REVISIONID}}\n\n<!--Please remember to check for the exact syntax to suit your needs. For more detailed advice, see '''[[Wikipedia:Citing Wikipedia|Citing Wikipedia]]'''.-->\n\n</div>\n<div class=\"plainlinks\" style=\"border: 1px solid grey; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\"> \n\n== Siteringsstiler for «[[{{PAGENAME}}|{{FULLPAGENAME}}]]»==\n\n=== [[:en:APA style|APA-stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. Hentet <citation>{{CURRENTTIME}}, {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTYEAR}}</citation> fra {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n\n\n=== [[:en:The MLA style manual|MLA-stil]] ===\n«{{FULLPAGENAME}}». ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}. {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n\n\n=== [[:en:MHRA Style Guide|MHRA-stil]] ===\nWikipedia-brukere, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [besøkt <citation>{{CURRENTDAY}}. {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n\n\n=== [[:en:The Chicago Manual of Style|Chicago-stil]] ===\nWikipedia-brukere, «{{FULLPAGENAME}}», ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (besøkt <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n\n\n=== [[:en:Council of Science Editors|CBE/CSE-stil]] ===\nWikipedia-brukere. {{FULLPAGENAME}} [internett]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [sitert <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Tilgjengelig fra: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n\n\n=== [[:en:Bluebook|Bluebook-stil]] ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sist besøkt <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n\n\n=== [[:en:BibTeX|BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[På internett; besøkt <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nOm man bruker [[:en:LaTeX|LaTeX]]' pakke-URL (<code>\\usepackage{url}</code> et sted i begynnelsen) som pleier å gi mye finere formaterte internettadresser, kan følgende være foretrukket:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[På internett; besøkt <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing \"Citation styles\" div-->"
+}
diff --git a/extensions/CiteThisPage/i18n/nds-nl.json b/extensions/CiteThisPage/i18n/nds-nl.json
new file mode 100644
index 00000000..3a25c9ad
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nds-nl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Servien"
+ ]
+ },
+ "citethispage": "Siteerhulpe",
+ "citethispage-desc": "Zet n [[Special:Cite|spesiale zied]] derbie um te siteren, en n verwiezing dernaor in de hulpmiddels",
+ "citethispage-link": "Disse zied siteren",
+ "tooltip-citethispage": "Informasie over hoe of da'j disse zied siteren kunnen",
+ "citethispage-change-submit": "Siteren",
+ "citethispage-change-target": "Zied:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografiese gegevens veur {{FULLPAGENAME}} ==\n\n* Ziednaam: {{FULLPAGENAME}}\n* Auteur: {{SITENAME}}-biedragers\n* Uutgever: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tiedstip leste versie: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tiedstip eraodpleegd: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanente URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Ziedversienummer: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Sitaotstielen veur {{FULLPAGENAME}} ==\n\n=== [[APA-stiel]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Eraodpleegd op <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> van {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stiel]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stiel]] ===\n{{SITENAME}}-biedragers, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [eraodpleegd <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-stiel]] ===\n{{SITENAME}}-biedragers, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (eraodpleegd <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stiel]] ===\n{{SITENAME}}-biedragers. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [sitaot van <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Beschikbaor op:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-stiel]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (eraodpleegd op <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-gegevens ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nt Volgende kan de veurkeur hebben as de [[LaTeX]]-module \"url\" gebruukt wörden (<code>\\usepackage{url}</code> argens in de inleiding), die webadressen mooier opmaakt:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; eraodpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/nds.json b/extensions/CiteThisPage/i18n/nds.json
new file mode 100644
index 00000000..492293e6
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nds.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Slomox"
+ ]
+ },
+ "citethispage": "Ziteerhelp",
+ "citethispage-desc": "Föögt en [[Special:Cite|Spezialsied för Zitaten]] un en Lenk dorop in’n Kasten Warktüüch to",
+ "citethispage-link": "Disse Siet ziteren",
+ "citethispage-change-submit": "Ziteren",
+ "citethispage-change-target": "Siet:"
+}
diff --git a/extensions/CiteThisPage/i18n/ne.json b/extensions/CiteThisPage/i18n/ne.json
new file mode 100644
index 00000000..d38d709c
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ne.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "citethispage": "उद्दरण गर्नु",
+ "citethispage-link": "लेख उद्दरण गर्नुहोस्",
+ "tooltip-citethispage": "यस पृष्ठको जानकारी उद्धृत गर्न निमित्त जानकारी",
+ "citethispage-change-target": "पृष्ठ:"
+}
diff --git a/extensions/CiteThisPage/i18n/niu.json b/extensions/CiteThisPage/i18n/niu.json
new file mode 100644
index 00000000..c03eba64
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/niu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77"
+ ]
+ },
+ "citethispage-link": "Fakakite e tala nei"
+}
diff --git a/extensions/CiteThisPage/i18n/nl.json b/extensions/CiteThisPage/i18n/nl.json
new file mode 100644
index 00000000..5031e2ae
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nl.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Effeietsanders",
+ "SPQRobin",
+ "Siebrand",
+ "Romaine",
+ "Paladox",
+ "Sjoerddebruin"
+ ]
+ },
+ "citethispage": "Deze pagina citeren",
+ "citethispage-desc": "Voegt een [[Special:CiteThisPage|speciale pagina]] toe om te citeren, en een koppeling ernaar in de hulpmiddelen",
+ "citethispage-link": "Deze pagina citeren",
+ "tooltip-citethispage": "Informatie over hoe u deze pagina kunt citeren",
+ "citethispage-change-submit": "Citeren",
+ "citethispage-change-target": "Pagina:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografische gegevens voor {{FULLPAGENAME}} ==\n\n* Paginanaam: {{FULLPAGENAME}}\n* Auteur: {{SITENAME}}-bijdragers\n* Uitgever: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Tijdstip laatste versie: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tijdstip geraadpleegd: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanente URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Paginaversienummer: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Citaatstijlen voor {{FULLPAGENAME}} ==\n\n=== [[APA-stijl]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Geraadpleegd op <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> van {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stijl]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stijl]] ===\n{{SITENAME}}-bijdragers, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [geraadpleegd <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-stijl]] ===\n{{SITENAME}}-bijdragers, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (geraadpleegd <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stijl]] ===\n{{SITENAME}}-bijdragers. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citaat van <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Beschikbaar op:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-stijl]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (geraadpleegd op <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-gegevens ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nHet volgende kan de voorkeur hebben als de [[LaTeX]]-module \"url\" wordt gebruikt (<code>\\usepackage{url}</code> ergens in de inleiding), die webadressen mooier opgemaakt:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; geraadpleegd <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/nn.json b/extensions/CiteThisPage/i18n/nn.json
new file mode 100644
index 00000000..84c65cf9
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nn.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gunnernett",
+ "Harald Khan",
+ "Jon Harald Søby",
+ "Njardarlogar"
+ ]
+ },
+ "citethispage": "Siter",
+ "citethispage-desc": "Legg til ei [[Special:Cite|siteringsside]] og ei lenkje i verktøy-menyen",
+ "citethispage-link": "Siter denne sida",
+ "tooltip-citethispage": "Informasjon om korleis ein siterer denne sida",
+ "citethispage-change-submit": "Siter",
+ "citethispage-change-target": "Side:"
+}
diff --git a/extensions/CiteThisPage/i18n/nov.json b/extensions/CiteThisPage/i18n/nov.json
new file mode 100644
index 00000000..b0c2f324
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nov.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "MF-Warburg"
+ ]
+ },
+ "citethispage": "Sita",
+ "citethispage-link": "Sita disi artikle"
+}
diff --git a/extensions/CiteThisPage/i18n/nso.json b/extensions/CiteThisPage/i18n/nso.json
new file mode 100644
index 00000000..4f5d3fa5
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/nso.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mohau"
+ ]
+ },
+ "citethispage-change-target": "Letlakala:"
+}
diff --git a/extensions/CiteThisPage/i18n/oc.json b/extensions/CiteThisPage/i18n/oc.json
new file mode 100644
index 00000000..b4a66a32
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/oc.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "citethispage": "Citacion",
+ "citethispage-desc": "Apond una pagina especiala [[Special:CiteThisPage|citacion]] e un ligam dins la bóstia d'aisinas",
+ "citethispage-link": "Citar aqueste article",
+ "tooltip-citethispage": "Informacions sus cossí citar aquesta pagina",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Pagina :",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Détails bibliographiques pour {{FULLPAGENAME}} ==\n\n* Nom de la page : {{FULLPAGENAME}}\n* Auteur : contributeurs de {{SITENAME}}\n* Éditeur : ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Dernière modification : {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} TUC\n* Récupéré : <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} TUC</citation>\n* URL permanente : {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identifiant de cette version : {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Styles de citations pour {{FULLPAGENAME}} ==\n\n=== [[APA style|Style APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> depuis {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Style MLA]] ===\n«&nbsp;{{FULLPAGENAME}}&nbsp;» ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Style MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accédé le <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Style Chicago]] ===\nContributeurs de {{SITENAME}}, «&nbsp;{{FULLPAGENAME}}&nbsp;», ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accédé le <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Style CBE/CSE]] ===\nContributeurs de {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}&nbsp;; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} TUC [cité le <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponible sur&nbsp;: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Style Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accédé le <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Entrée [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[En ligne ; accédé le <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nSi vous utilisez le package URL dans [[LaTeX]] (<code>\\usepackage{url}</code> quelque part dans le préambule), qui donne des adresses web mieux formatées, utilisez le format suivant :\n\n @misc{ wiki:xxx, author = \"{{SITENAME}}\", title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\", year = \"{{CURRENTYEAR}}\", url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\", note = \"[En linha ; accedit lo <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\" } \n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/or.json b/extensions/CiteThisPage/i18n/or.json
new file mode 100644
index 00000000..2caf67b1
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/or.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jnanaranjan Sahu",
+ "Psubhashish"
+ ]
+ },
+ "citethispage": "ଆଧାର ଦେବେ",
+ "citethispage-desc": "ଏକ [[Special:Cite|ଆଧାର]] ବିଶେଷ ପୃଷ୍ଠା ଓ ଉପକରଣ ପେଡ଼ିର ଲିଙ୍କ ଯୋଡ଼ିଥାଏ",
+ "citethispage-link": "ଏହି ପୃଷ୍ଠାଟିରେ ପ୍ରମାଣ ଯୋଡ଼ିବେ",
+ "tooltip-citethispage": "ଆଧାରଟିଏ ଦେବା ଉପରେ ଅଧିକ ସୂଚନା",
+ "citethispage-change-submit": "ଆଧାର ଦେବେ",
+ "citethispage-change-target": "ପୃଷ୍ଠା:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}}ର ଅଧାରଗତ ବିବରଣୀ ==\n\n\n*ପୃଷ୍ଠାନାମ:\n*ଲେଖକ:\n*ପ୍ରକାଶକ:\n*ଶେଷଥର ପୁନରାବୃତିର ତାରିଖ:\n*ବ୍ୟବହାର କରାଯାଇଥିବା ତାରିଖ:\n*ସ୍ଥାୟୀ URL:\n*ପୃଷ୍ଠା ସଂସ୍କରଣ ID:\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}}ର ସଜାଣି ପଦ୍ଧତି ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[The MLA style manual|MLA ଶୈଳୀ]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA ଶୈଳୀ]] ===\n\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n=== [[The Chicago Manual of Style|ଚିକାଗୋ ଶୈଳୀ]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE ଶୈଳୀ]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook ଶୈଳୀ]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ଦାଖଲ ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[LaTeX]] ପ୍ୟାକେଜ url (<code>\\usepackage{url}</code> somewhere in the preamble) ଯାହାକି ଆହୁରି ଅଧିକ ସୁନ୍ଦରଭାବେ ସଜାଯାଇଥିବା ୱେବଠିକଣାକୁ ଯୋଡିଥାଏ ତାକୁ ବ୍ୟବହାର କରିବାବେଳେ, ନିମ୍ନଲିଖିତକୁ ନଜରକୁ ଅଣାଯାଇପାରେ:\n@misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/os.json b/extensions/CiteThisPage/i18n/os.json
new file mode 100644
index 00000000..3b8047de
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/os.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amikeco"
+ ]
+ },
+ "citethispage-change-target": "Фарс:"
+}
diff --git a/extensions/CiteThisPage/i18n/pa.json b/extensions/CiteThisPage/i18n/pa.json
new file mode 100644
index 00000000..900b9d1e
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Babanwalia"
+ ]
+ },
+ "citethispage-link": "ਇਸ ਸਫ਼ੇ ਦਾ ਹਵਾਲਾ ਦਿਉ"
+}
diff --git a/extensions/CiteThisPage/i18n/pag.json b/extensions/CiteThisPage/i18n/pag.json
new file mode 100644
index 00000000..b5bba9d4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pag.json
@@ -0,0 +1,7 @@
+{
+ "@metadata": [],
+ "citethispage": "Bitlaen",
+ "citethispage-link": "Bitlaen yan article",
+ "citethispage-change-submit": "Bitlaen",
+ "citethispage-change-target": "Bolong:"
+}
diff --git a/extensions/CiteThisPage/i18n/pam.json b/extensions/CiteThisPage/i18n/pam.json
new file mode 100644
index 00000000..9f31abbe
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pam.json
@@ -0,0 +1,7 @@
+{
+ "@metadata": [],
+ "citethispage": "Banggitan ya",
+ "citethispage-link": "Banggitan ya ing articulung ini",
+ "citethispage-change-submit": "Banggitan me",
+ "citethispage-change-target": "Bulung:"
+}
diff --git a/extensions/CiteThisPage/i18n/pcd.json b/extensions/CiteThisPage/i18n/pcd.json
new file mode 100644
index 00000000..446e454e
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pcd.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geoleplubo"
+ ]
+ },
+ "citethispage-link": "Citer chol pache"
+}
diff --git a/extensions/CiteThisPage/i18n/pdc.json b/extensions/CiteThisPage/i18n/pdc.json
new file mode 100644
index 00000000..7a1012a1
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pdc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xqt"
+ ]
+ },
+ "citethispage-change-target": "Blatt:"
+}
diff --git a/extensions/CiteThisPage/i18n/pfl.json b/extensions/CiteThisPage/i18n/pfl.json
new file mode 100644
index 00000000..e1176389
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pfl.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae",
+ "SPS"
+ ]
+ },
+ "citethispage": "Hilf zum Zidiere",
+ "citethispage-link": "Die Said zidiere",
+ "tooltip-citethispage": "Hiwees, wie die Said zidiad werre koann",
+ "citethispage-change-submit": "Schbaischere"
+}
diff --git a/extensions/CiteThisPage/i18n/pl.json b/extensions/CiteThisPage/i18n/pl.json
new file mode 100644
index 00000000..4b886e8b
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sp5uhe",
+ "Chrumps"
+ ]
+ },
+ "citethispage": "Bibliografia",
+ "citethispage-desc": "Dodaje stronę specjalną [[Special:CiteThisPage|obsługi cytowań]] i link w pasku narzędziowym",
+ "citethispage-link": "Cytowanie tego artykułu",
+ "tooltip-citethispage": "Informacja o tym jak należy cytować tę stronę",
+ "citethispage-change-submit": "stwórz wpis bibliograficzny",
+ "citethispage-change-target": "Strona:"
+}
diff --git a/extensions/CiteThisPage/i18n/pms.json b/extensions/CiteThisPage/i18n/pms.json
new file mode 100644
index 00000000..65e101d6
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pms.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Bèrto 'd Sèra",
+ "Dragonòt"
+ ]
+ },
+ "citethispage": "Citassion",
+ "citethispage-desc": "A gionta na pàgina special [[Special:Cite|citassion]] e n'anliura dj'utiss",
+ "citethispage-link": "Sita sta pàgina-sì",
+ "tooltip-citethispage": "Anformassion ëd com sité sta pàgina-sì.",
+ "citethispage-change-submit": "Pronta la citassion",
+ "citethispage-change-target": "Pàgina da cité:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Detaj bibliogràfich për {{FULLPAGENAME}} ==\n\n* Nòm ëd la pàgina: {{FULLPAGENAME}}\n* Autor: contributor ëd {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data ëd l'ùltima revision: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Dàita ëd sitassion: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Adrëssa an sl'aragnà përmanenta: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Identificativ dla version ëd la pàgina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stil ëd sitassion për {{FULLPAGENAME}} ==\n\n=== [[stil APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Sità <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> da {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|stil MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|stil MHRA]] ===\n{{SITENAME}} contributor, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|stil Chicago]] ===\n{{SITENAME}} contributor, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (sità <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|stil CBE/CSE]] ===\n{{SITENAME}} contributor. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponìbil da:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|stil Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ùltima vìsita <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Vos [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[An linia; trovà <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nQuand as deuvra la liura al compless [[LaTeX]] (<code>\\usepackage{url}</code> da chèiche part ant l'achit) che a dovrìa dé dj'adrësse dla Ragnà formatà motobin mej, la manera sì-sota a peul esse preferìa:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[An linia; trovà <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/pnb.json b/extensions/CiteThisPage/i18n/pnb.json
new file mode 100644
index 00000000..a6d84883
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pnb.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Khalid Mahmood"
+ ]
+ },
+ "citethispage": "اتہ پتہ",
+ "citethispage-desc": "جوڑدا اے اک [[Special:Cite|اتہ پتہ]] خاص صفہ تے اوزار ڈبہ جوڑ۔",
+ "citethispage-link": "ایس صفے دا اتہ پتہ دیو",
+ "tooltip-citethispage": "ایس صفے دا کنج اتہ پتہ دیوو دی دس۔",
+ "citethispage-change-submit": "اتہ پتہ",
+ "citethispage-change-target": "صفہ:"
+}
diff --git a/extensions/CiteThisPage/i18n/pnt.json b/extensions/CiteThisPage/i18n/pnt.json
new file mode 100644
index 00000000..f164480b
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pnt.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sinopeus"
+ ]
+ },
+ "citethispage-change-target": "Σελίδα:"
+}
diff --git a/extensions/CiteThisPage/i18n/ps.json b/extensions/CiteThisPage/i18n/ps.json
new file mode 100644
index 00000000..7d72ba59
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ps.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "citethispage": "د دې مخ اخځ",
+ "citethispage-link": "د دې مخ اخځ",
+ "tooltip-citethispage": "دې مخ ته د اخځ مالومات",
+ "citethispage-change-submit": "اخځ",
+ "citethispage-change-target": "مخ:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== د {{FULLPAGENAME}} لپاره د کتابښودنې ځانگړنې==\n\n* مخ نوم: {{FULLPAGENAME}}\n* ليکوال: {{SITENAME}} ونډه وال\n* خپرندوی: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* د وروستۍ مخکتنې نېټه: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date retrieved: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* تلپاتې تړنه URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* د مخ بڼې پېژند: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Citation styles for {{FULLPAGENAME}} ==\n\n=== [[APA توگه]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== د {{FULLPAGENAME}} لپاره د کتابښودنې ځانگړنې==\n\n* مخ نوم: {{FULLPAGENAME}}\n* ليکوال: {{SITENAME}} ونډه وال\n* خپرندوی: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* د وروستۍ مخکتنې نېټه: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date retrieved: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* تلپاتې تړنه URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* د مخ بڼې پېژند: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Citation styles for {{FULLPAGENAME}} ==\n\n=== [[APA توگه]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA توگه]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA توگه]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago توگه]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE توگه]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook توگه]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may be preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/pt-br.json b/extensions/CiteThisPage/i18n/pt-br.json
new file mode 100644
index 00000000..74a55d39
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pt-br.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Carla404",
+ "Giro720",
+ "Paladox",
+ "Nemo bis"
+ ]
+ },
+ "citethispage": "Citar",
+ "citethispage-desc": "Adiciona uma página especial de [[Special:Cite|citação]] e link para a caixa de ferramentas",
+ "citethispage-link": "Citar esta página",
+ "tooltip-citethispage": "Informação sobre como citar esta página",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Página:"
+}
diff --git a/extensions/CiteThisPage/i18n/pt.json b/extensions/CiteThisPage/i18n/pt.json
new file mode 100644
index 00000000..6154433e
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/pt.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hamilton Abreu",
+ "Lijealso",
+ "Malafaya",
+ "555",
+ "Vitorvicentevalente"
+ ]
+ },
+ "citethispage": "Citar esta página",
+ "citethispage-desc": "Página especial que produz uma [[Special:CiteThisPage|citação]] e adiciona uma ligação na barra de ferramentas",
+ "citethispage-link": "Citar esta página",
+ "tooltip-citethispage": "Informação sobre como citar esta página",
+ "citethispage-change-submit": "Citar",
+ "citethispage-change-target": "Página:"
+}
diff --git a/extensions/CiteThisPage/i18n/qqq.json b/extensions/CiteThisPage/i18n/qqq.json
new file mode 100644
index 00000000..e374d169
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/qqq.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jon Harald Søby",
+ "Lloffiwr",
+ "Shirayuki",
+ "Siddhartha Ghai",
+ "Siebrand",
+ "Tgr",
+ "Umherirrender"
+ ]
+ },
+ "citethispage": "{{doc-special|Cite This Page|unlisted=1}}\n\nThe name of the Special:Cite page to be displayed .\n{{Identical|Cite this page}}",
+ "citethispage-desc": "{{desc|name=CiteThisPage|url=https://www.mediawiki.org/wiki/Extension:CiteThisPage}}",
+ "citethispage-link": "The text of link in navigation's toolbox to [[Special:CiteThisPage]].\n\nSee also:\n* {{msg-mw|Accesskey-citethispage}} - empty at this time\n* {{msg-mw|Tooltip-citethispage}}\n{{Identical|Cite this page}}",
+ "accesskey-citethispage": "{{doc-accesskey}} Generally un-used.\nSee also:\n* {{msg-mw|citethispage-link}}\n* {{msg-mw|tooltip-citethispage}}",
+ "tooltip-citethispage": "Used as tooltip for the link {{msg-mw|citethispage-link}}.\n\nSee also:\n* {{msg-mw|Citethispage-link}}\n* {{msg-mw|Accesskey-citethispage}} - empty at this time",
+ "citethispage-summary": "{{notranslate}}\n\nA description message shown beneath the title of the Special page to explain what the point of the page is; generally un-used.",
+ "citethispage-change-submit": "A button for users to change the page for which they will see a cite. See also {{msg-mw|citethispage-change-target}}.\n\n{{Identical|Cite}}",
+ "citethispage-change-target": "A prompt for users to change the page for which they wish to see a cite. See also {{msg-mw|citethispage-change-submit}}.\n\n{{Identical|Page}}",
+ "citethispage-content": "Refers to {{msg-mw|Sitesubtitle}}.\n\n* This message is the entire text for the page Special:Cite\n* Any wikilinks in this message point to pages on the local wiki, so they must be translated.\n* Do not translate magic words like CURRENTYEAR, SITENAME etc.\n* Do not translate the parameter names (author, title etc.) for BibTeX entries.\n* Do not translate the div class plainlinks mw-specialCiteThisPage-styles."
+}
diff --git a/extensions/CiteThisPage/i18n/qu.json b/extensions/CiteThisPage/i18n/qu.json
new file mode 100644
index 00000000..9cff8070
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/qu.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna"
+ ]
+ },
+ "citethispage": "Qillqamanta willay",
+ "citethispage-desc": "[[Special:Cite|Pukyumanta willanapaq]] sapaq p'anqatam llamk'ana t'asrapi t'inkitapas yapan",
+ "citethispage-link": "Kay qillqamanta willay",
+ "tooltip-citethispage": "Ima hinam kay p'anqamanta willay",
+ "citethispage-change-submit": "Qillqamanta willay",
+ "citethispage-change-target": "P'anqa:"
+}
diff --git a/extensions/CiteThisPage/i18n/rm.json b/extensions/CiteThisPage/i18n/rm.json
new file mode 100644
index 00000000..5b5972e4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/rm.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kazu89"
+ ]
+ },
+ "citethispage-link": "Citar questa pagina",
+ "citethispage-change-target": "Pagina:"
+}
diff --git a/extensions/CiteThisPage/i18n/rmy.json b/extensions/CiteThisPage/i18n/rmy.json
new file mode 100644
index 00000000..742267b3
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/rmy.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Desiphral"
+ ]
+ },
+ "citethispage": "Kana trebul phandipen",
+ "citethispage-link": "Prinjardo phandipen ko lekh",
+ "citethispage-change-submit": "Ja"
+}
diff --git a/extensions/CiteThisPage/i18n/ro.json b/extensions/CiteThisPage/i18n/ro.json
new file mode 100644
index 00000000..ee62c9fe
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ro.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Danutz",
+ "Emily",
+ "Firilacroco",
+ "KlaudiuMihaila",
+ "Mihai",
+ "Minisarm",
+ "Stelistcristi"
+ ]
+ },
+ "citethispage": "Citare",
+ "citethispage-desc": "Adaugă o pagină specială de [[Special:CiteThisPage|citare]] și o legătură în trusa de unelte",
+ "citethispage-link": "Citează această pagină",
+ "tooltip-citethispage": "Informații cu privire la modul de citare a acestei pagini",
+ "citethispage-change-submit": "Citează",
+ "citethispage-change-target": "Pagină:",
+ "citethispage-content": "__NOTOC__ \n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Detalii bibliografice pentru {{FULLPAGENAME}} == \n\n* Numele paginii: {{FULLPAGENAME}} \n* Autor: contribuitorii de la {{SITENAME}} \n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Data ultimei revizuiri: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data preluării: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation> \n* Legătură permanentă: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID-ul versiunii paginii: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stiluri de citare pentru {{FULLPAGENAME}} == \n\n=== Stilul APA === \n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Preluat la <citation>{{CURRENTTIME}} EET, {{CURRENTMONTHNAME}} {{CURRENTDAY}} {{CURRENTYEAR}}</citation> de la {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Stilul MLA === \n„{{FULLPAGENAME}}.” ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;. \n\n=== Stilul MHRA === \nContribuitorii {{SITENAME}}, „{{FULLPAGENAME}}”, ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accesat la <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== Stilul Chicago === \nContribuitorii {{SITENAME}} , „{{FULLPAGENAME}},” ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accesat la <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). \n\n=== Stilul CBE/CSE === \nContribuitorii {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citat în <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibil la: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. \n\n=== Stilul Bluebook === \n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ultima vizită la <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). \n\n=== Intrare [[BibTeX]] === \n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accesat la <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nCând se folosește în pachetul [[LaTeX]] expresia url (<code>\\usepackage{url}</code> undeva în preambul) care trebuie să afișeze adrese mai frumos aranjate, următoarea variantă poate fi preferată: \n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accesat la <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing \"Citation styles\" div-->"
+}
diff --git a/extensions/CiteThisPage/i18n/roa-tara.json b/extensions/CiteThisPage/i18n/roa-tara.json
new file mode 100644
index 00000000..572262ec
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/roa-tara.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "citethispage": "Cite",
+ "citethispage-desc": "Aggiunge 'na pàgena speciale de [[Special:CiteThisPage|citaziune]] e collegamende a buatte de le struminde",
+ "citethispage-link": "Cite sta pàgene",
+ "tooltip-citethispage": "'Mbormaziune sus a cumme se cite sta pàgene",
+ "citethispage-change-submit": "Cite",
+ "citethispage-change-target": "Pàgene:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Dettglie bibbliografece pe {{FULLPAGENAME}} ==\n\n* Nome d'a pàgene: {{FULLPAGENAME}}\n* Autore: {{SITENAME}} condrebbutore\n* Pubblecatore: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Sciurne de l'urtema revisione: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Date recuperate: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL Permanende: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID d'a versione d'a pàgene: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stile de citaziune pe {{FULLPAGENAME}} ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Pigghiate <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> da {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Stile MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Stile MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Stile Chicago]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Stile CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Stile Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Endrate [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nQuanne ause 'a URL d'u pacchette [[LaTeX]] (<code>\\usepackage{url}</code> da quaccehparte jndr'à 'u preambole) 'u quale serve pe dà 'nu formate megghie a le indirizze web, le seguende sonde le preferite:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ru.json b/extensions/CiteThisPage/i18n/ru.json
new file mode 100644
index 00000000..e254ce54
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ru.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Huuchin",
+ "Kaganer",
+ "Александр Сигачёв",
+ "Ильнар",
+ "Okras"
+ ]
+ },
+ "citethispage": "Библиографические ссылки на статью",
+ "citethispage-desc": "Добавляет служебную страницу [[Special:CiteThisPage|цитирования]] и ссылку в инструментах",
+ "citethispage-link": "Цитировать страницу",
+ "tooltip-citethispage": "Информация о том, как цитировать эту страницу",
+ "citethispage-change-submit": "Оформить ссылки",
+ "citethispage-change-target": "Страница:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Библиографические данные статьи {{FULLPAGENAME}} ==\n\n* Статья: {{FULLPAGENAME}}\n* Автор: {{SITENAME}} авторы\n* Опубликовано: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Дата последнего изменения: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Дата загрузки: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Постоянная ссылка: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Идентификатор версии страницы: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Варианты оформления ссылок на статью «{{FULLPAGENAME}}» ==\n\n=== Стиль по [http://protect.gost.ru/document.aspx?control=7&id=173511 ГОСТ 7.0.5—2008] (библиографическая ссылка) ===\n{{FULLPAGENAME}} // {{SITENAME}}. [{{REVISIONYEAR}}—{{REVISIONYEAR}}]. Дата обновления: {{#time:d.m.Y|{{REVISIONTIMESTAMP}}}}. URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (дата обращения: {{#time:d.m.Y|{{LOCALTIMESTAMP}}}}).\n<div style=\"font-size:smaller; padding-left:2.5em\">\n''Примечание:''\n* Первое из двух обозначений в квадратных скобках — это год ''создания'' страницы, второе — год ''последнего изменения'' страницы. К сожалению, движок [[MediaWiki]] в настоящее время не позволяет автоматически вставить год ''создания'' в ссылку (сейчас там вместо него также стоит год последнего редактирования). Посмотрите год создания страницы в [{{canonicalurl:{{FULLPAGENAME}}|action=history}} истории правок] и замените эту цифру.\n* ''Дата обращения'' в формате ДД.ММ.ГГГГ должна быть сегодняшней. К сожалению, движок MediaWiki из-за кэширования ошибочно показывает не текущую дату, а дату последнего изменения страницы.\n</div>\n\n</div>\n\n=== Стиль по [[ГОСТ 7.1|ГОСТ 7.1—2003]] и [[ГОСТ 7.82|ГОСТ 7.82—2001]] (сокращённая библиографическая запись) ===\n{{FULLPAGENAME}} [Электронный ресурс] : {{int:Tagline}} : Версия {{REVISIONID}}, сохранённая в {{CURRENTTIME}} UTC {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}} / Авторы Википедии // {{SITENAME}}, {{int:sitesubtitle}}. — Электрон. дан. — Сан-Франциско: Фонд Викимедиа, {{CURRENTYEAR}}. — Режим доступа: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n\n=== [[APA style|Стиль APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Стиль MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Стиль MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Чикагский стиль]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Стиль CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Запись в [[BibTeX]] ===\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nПри использовании [[LaTeX]]-пакета url для более наглядного представления веб-адресов (<code>\\usepackage{url}</code> в преамбуле), вероятно, лучше будет указать:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/rue.json b/extensions/CiteThisPage/i18n/rue.json
new file mode 100644
index 00000000..585f9710
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/rue.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb"
+ ]
+ },
+ "citethispage": "Цітованя",
+ "citethispage-desc": "Придасть шпеціалну сторінку [[Special:Cite|Цітації]] і одказ в понуцї інштрументів",
+ "citethispage-link": "Цітовати сторінку",
+ "tooltip-citethispage": "Інформації о тім, як цітовати тоту сторінку",
+ "citethispage-change-submit": "Цітовати",
+ "citethispage-change-target": "Сторінка:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Бібліоґрафічны детайлы к сторінцї {{FULLPAGENAME}} ==\n\n* Назва сторінкы: {{FULLPAGENAME}}\n* Автор: Приспівателї {{grammar:2sg|{{SITENAME}}}}\n* Выдаватель: ''{{MediaWiki:Sitesubtitle}}''.\n* Датум остатнёй управы: {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC\n* Датум перевзятя: <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC</citation>\n* Тырвалый одказ: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Ідентіфікація ревізії сторінкы: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Способы цітованя сторінкы {{FULLPAGENAME}} ==\n\n=== ISO 690-2 (1)===\nПриспівателї {{grammar:2sg|{{SITENAME}}}},'' {{FULLPAGENAME}}'' [online], {{int:sitesubtitle}}, c{{CURRENTYEAR}}, \nДатум остатнёй ревізії {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC, \n[цітоване <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\n&lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; \n\n=== ISO 690-2 (2)===\n''{{int:sitesubtitle}}: {{FULLPAGENAME}}'' [online]. c{{CURRENTYEAR}} [цітоване <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]. Доступный з WWW: &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; \n\n=== APA ===\n{{FULLPAGENAME}}. ({{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}). ''{{int:sitesubtitle}}''. Здобыто <citation>{{CURRENTTIME}}, {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation> з {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== MLA ===\n„{{FULLPAGENAME}}.“ ''{{int:sitesubtitle}}''. {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== MHRA ===\nПриспівателї {{grammar:2sg|{{SITENAME}}}}, '{{FULLPAGENAME}}', ''{{int:sitesubtitle}},'' {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [здобыто <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\n\n=== Chicago ===\nПриспівателї {{grammar:2sg|{{SITENAME}}}}, „{{FULLPAGENAME}},“ ''{{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (здобыто <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>).\n\n=== CBE/CSE ===\nПриспівателї {{grammar:2sg|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{int:sitesubtitle}}; {{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]. Доступне на: \n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== Bluebook ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (остатнїм разом навщівлено <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; навщівлено <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\"\n }\n\nПід час хоснованя [[LaTeX]]-ового пакунка url (даґде на початку документа є написано <code>\\usepackage{url}</code>), котрый дакус лїпше форматує вебовы адресы, можете преферовати наступну верзію:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; навщівлено <citation>{{CURRENTDAY}}.&nbsp;{{CURRENTMONTH}}.&nbsp;{{CURRENTYEAR}}</citation>]\"\n }\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/rup.json b/extensions/CiteThisPage/i18n/rup.json
new file mode 100644
index 00000000..f73fbc59
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/rup.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "D'AroemenenZullenNiVergaan"
+ ]
+ },
+ "citethispage-link": "Bagâ articollu aestu ca citatu"
+}
diff --git a/extensions/CiteThisPage/i18n/sa.json b/extensions/CiteThisPage/i18n/sa.json
new file mode 100644
index 00000000..7d55f514
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sa.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Shubha"
+ ]
+ },
+ "citethispage": "उदाहरति",
+ "citethispage-desc": "[[Special:Cite|बाह्याधारैः]] युक्तं किञ्चन विशेषपृष्ठम् उपकरणपेटिकानुबन्धं च योजयति",
+ "citethispage-link": "अस्य पृष्ठस्य उल्लेखः क्रियताम्",
+ "tooltip-citethispage": "अस्य पृष्ठस्य उल्लेखः कथमिति विवरणम्",
+ "citethispage-change-submit": "उदाहरति",
+ "citethispage-change-target": "पृष्ठ:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}} इत्यस्य आधारग्नन्थविवरणम् ==\n\n* पृष्ठनाम : {{FULLPAGENAME}}\n* लेखकः: {{SITENAME}} योगदातारः\n* प्रकाशकः: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* अन्तिमावृत्तेः दिनाङ्कः: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* पुनः प्राप्तस्य दिनाङ्कः: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* शाश्वतं URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* पृष्ठावृत्तेः ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}}इत्यस्य आधारविन्यासाः ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] प्रवेशः ===\n\n @misc{ wiki:xxx,\n ग्रन्थकर्ता = \"{{SITENAME}}\",\n शीर्षकम् = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n वर्षम् = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n टिप्पणी = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n[[LaTeX]] अस्य उपयोगावसरे package url (<code>\\usepackage{url}</code> somewhere in the preamble) यच्च समीचीनतया प्रारूपितान् जालसङ्केतान् यच्छति, अधोनिर्दिष्टम् एष्टुं शक्यम्:\n\n @misc{ wiki:xxx,\n ग्रन्थकर्ता = \"{{SITENAME}}\",\n शीर्षकम् = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n वर्षम् = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n टिप्पणी = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/sah.json b/extensions/CiteThisPage/i18n/sah.json
new file mode 100644
index 00000000..13d78098
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sah.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "HalanTul"
+ ]
+ },
+ "citethispage": "Цитата",
+ "citethispage-desc": "Аналлаах [[Special:Cite|быһа тардыы]] сирэйин уонна үнүстүрүмүөннэргэ ыйынньык эбэн биэрэр",
+ "citethispage-link": "Сирэйи цитируйдааһын",
+ "tooltip-citethispage": "Бу сирэйи хайдах цитируйдуур туһунан",
+ "citethispage-change-submit": "Цитаата",
+ "citethispage-change-target": "Сирэй:"
+}
diff --git a/extensions/CiteThisPage/i18n/scn.json b/extensions/CiteThisPage/i18n/scn.json
new file mode 100644
index 00000000..2c01cb5a
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/scn.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Santu",
+ "Gmelfi"
+ ]
+ },
+ "citethispage": "Muntuazzioni",
+ "citethispage-desc": "Junci na pàggina spiciali pi li [[Special:Cite|cosi di muntuari]] e nu lijami ntê strumenti",
+ "citethispage-link": "Muntùa sta pàggina",
+ "tooltip-citethispage": "Nfurmazzioni su comu citari sta pàggina",
+ "citethispage-change-submit": "Cria la cosa di muntuari",
+ "citethispage-change-target": "Pàggina di muntari"
+}
diff --git a/extensions/CiteThisPage/i18n/sd.json b/extensions/CiteThisPage/i18n/sd.json
new file mode 100644
index 00000000..97b9045f
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sd.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "citethispage": "حواليو"
+}
diff --git a/extensions/CiteThisPage/i18n/sgs.json b/extensions/CiteThisPage/i18n/sgs.json
new file mode 100644
index 00000000..86fb9d4e
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sgs.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hugo.arg"
+ ]
+ },
+ "citethispage": "Citoutė",
+ "citethispage-change-target": "Poslapis:"
+}
diff --git a/extensions/CiteThisPage/i18n/sh.json b/extensions/CiteThisPage/i18n/sh.json
new file mode 100644
index 00000000..4087fe76
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sh.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kolega2357"
+ ]
+ },
+ "citethispage": "Citiraj",
+ "citethispage-link": "Citiraj ovaj članak",
+ "citethispage-change-submit": "Citiraj - Цитирај",
+ "citethispage-change-target": "Stranica:"
+}
diff --git a/extensions/CiteThisPage/i18n/shn.json b/extensions/CiteThisPage/i18n/shn.json
new file mode 100644
index 00000000..2d4562a1
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/shn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saimawnkham"
+ ]
+ },
+ "citethispage-link": "ဢိင်ၼႃႈလိၵ်ႈၼႆႉ",
+ "tooltip-citethispage": "လွၼ်ႉၶၢဝ်ႇ လွင်ႈဝႃႈတေႁဵတ်းႁိုဝ် ဢိင်ၼိူဝ်ၼႃႈလိၵ်ႈၼႆႉ"
+}
diff --git a/extensions/CiteThisPage/i18n/si.json b/extensions/CiteThisPage/i18n/si.json
new file mode 100644
index 00000000..e191fffc
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/si.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Budhajeewa",
+ "නන්දිමිතුරු"
+ ]
+ },
+ "citethispage": "උපන්‍යාසය",
+ "citethispage-desc": "[[Special:Cite|උපහරණ]] විශේෂ පිටුවක් හා මෙවලම්ගොන්න සබැඳියක් එක්කරයි",
+ "citethispage-link": "මෙම පිටුව උපන්‍යාස කරන්න",
+ "tooltip-citethispage": "මෙම පිටුව උපුටා දක්වන්නේ කෙසේද යන්න පිළිබඳ තොරතුරු.",
+ "citethispage-change-submit": "උපන්‍යාසය",
+ "citethispage-change-target": "පිටුව:"
+}
diff --git a/extensions/CiteThisPage/i18n/sk.json b/extensions/CiteThisPage/i18n/sk.json
new file mode 100644
index 00000000..9310127c
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sk.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Helix84",
+ "Martin Kozák"
+ ]
+ },
+ "citethispage": "Citovať",
+ "citethispage-desc": "Pridáva špeciálnu stránku [[Special:Cite|Citovať]] a odkaz v nástrojoch",
+ "citethispage-link": "Citovať túto stránku",
+ "tooltip-citethispage": "Ako citovať túto stránku",
+ "citethispage-change-submit": "Citovať",
+ "citethispage-change-target": "Stránka:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografické podrobnosti pre článok {{FULLPAGENAME}} ==\n* Názov stránky: {{FULLPAGENAME}}\n* Autor: prispievatelia {{SITENAME}}\n* Vydavateľ: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Dátum poslednej revízie: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Dátum získania: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanentný odkaz: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID verzie stránky: {{REVISIONID}}\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Štýly citácie pre článok {{FULLPAGENAME}} ==\n=== [[:en:APA style|štýl APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Získané <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> z {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:The MLA style manual|štýl MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\nprispievatelia {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[:en:The Chicago Manual of Style|štýl Chicago]] ===\nprispievatelia {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (prístup <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[:en:Council of Science Editors|štýl CBE/CSE]] ===\nprispievatelia {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Dostupné na: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[:en:Bluebook|štýl Bluebook]] ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (posledná návšteva <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== záznam [[:en:BibTeX|BibTeX]] ===\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n rok = \"{{CURRENTYEAR}}\", url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n poznámka = \"[Online; prístup <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nPri použití balíka url v [[LaTeX]]e (<code>\\usepackage{url}</code> niekde v úvode), čo dá oveľa krajšie formátované webové adresy, preferuje sa nasledovné:\n @misc{ wiki:xxx,\n autor = \"{{SITENAME}}\",\n názov = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n rok = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n poznámka = \"[Online; prístup <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\" \n }\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/sl.json b/extensions/CiteThisPage/i18n/sl.json
new file mode 100644
index 00000000..bf1e609c
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sl.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334",
+ "Smihael"
+ ]
+ },
+ "citethispage": "Navedi",
+ "citethispage-desc": "Doda posebno stran za [[Special:CiteThisPage|navedbo vira]] in povezavo v orodno vrstico",
+ "citethispage-link": "Navedba strani",
+ "tooltip-citethispage": "Informacije o tem, kako navajati to stran",
+ "citethispage-change-submit": "Navedi",
+ "citethispage-change-target": "Stran:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografski podatki za {{FULLPAGENAME}} ==\n\n* Naslov strani: {{FULLPAGENAME}}\n* Avtor: sodelavci {{GRAMMAR:rodilnik|{{SITENAME}}}}\n* Založnik: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Datum zadnje redakcije: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Datum pridobitve: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Trajni URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID različice strani: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Slog navajanja za {{FULLPAGENAME}} ==\n\n=== [[Slog APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Pridobljeno <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> s {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Priročnik sloga MLA|Slog MLA]] ===\n»{{FULLPAGENAME}}.« ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Slogovni vodnik MHRA|Slog MHRA]] ===\nSodelavci {{GRAMMAR:rodilnik|{{SITENAME}}}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [pridobljeno <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Slogovni priročnik Chicago|Slog Chicago]] ===\nSodelavci {{GRAMMAR:rodilnik|{{SITENAME}}}}, »{{FULLPAGENAME}},« ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (pridobljeno <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Svet urednikov v znanosti|Slog CBE/CSE]] ===\nSodelavci {{GRAMMAR:rodilnik|{{SITENAME}}}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [navedeno <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Dostopno na:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Slog Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (zadnjič obiskano <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Vnos [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Na spletu; pridobljeno <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nPri uporabi paketa [[LaTeX]] url (<code>\\usepackage{url}</code> nekje v uvodu), kar da precej lepše oblikovane spletne naslove, vam bo morda bolj ustrezalo naslednje:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Na spletu; pridobljeno <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/sma.json b/extensions/CiteThisPage/i18n/sma.json
new file mode 100644
index 00000000..f31ff1ca
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sma.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "M.M.S."
+ ]
+ },
+ "citethispage-change-target": "Bielie:"
+}
diff --git a/extensions/CiteThisPage/i18n/sn.json b/extensions/CiteThisPage/i18n/sn.json
new file mode 100644
index 00000000..f30445ac
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sn.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "citethispage-link": "Ita cite nyaya iyi"
+}
diff --git a/extensions/CiteThisPage/i18n/so.json b/extensions/CiteThisPage/i18n/so.json
new file mode 100644
index 00000000..7926f11e
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/so.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Abshirdheere"
+ ]
+ },
+ "citethispage": "Soo xigasho",
+ "citethispage-desc": "Ku dar bogga [[Special:Cite|xigashada]] gaar ahaan bogga qalabka shaqada",
+ "citethispage-link": "Boggaan soo xigo",
+ "tooltip-citethispage": "Macluumaad ku saabsan habka soo xigashada ee bogga",
+ "citethispage-change-submit": "Soo xigasho",
+ "citethispage-change-target": "Bogga:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Faahfaahin ku saabsan raadraaca ee {{FULLPAGENAME}} ==\n\n* Magaca bogga: {{FULLPAGENAME}}\n* Qoraha: {{SITENAME}} contributors\n* Faafiyaha: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Date of last revision: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Tariikhdii ugu dambaysay ee dib u eegista: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL joogta ah: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID nuqulka bogga: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Citation styles for {{FULLPAGENAME}} ==\n\n=== [[Hannaanka xigashada]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA style]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA style]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago style]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE style]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook style]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n Fiira gaar ah = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nMarkaad adeegsanayso [[LaTeX]] package url (<code>\\usepackage{url}</code> meel kastaba) kaasoo samayn kara siinta canaawiin web lagu kabay si wanaagsan, kan xiga waxaa laga yaabaa in uu ka wanaagsanaado:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n Fiira gaar ah = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/sq.json b/extensions/CiteThisPage/i18n/sq.json
new file mode 100644
index 00000000..453c3568
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sq.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Olsi"
+ ]
+ },
+ "citethispage": "Citate",
+ "citethispage-desc": "Shton një faqe speciale [[Special:Cite|citimi]] dhe një lidhje veglash.",
+ "citethispage-link": "Cito artikullin",
+ "tooltip-citethispage": "Informacion mbi mënyrën e citimit të kësaj faqeje",
+ "citethispage-change-submit": "Citoje",
+ "citethispage-change-target": "Faqja:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Të dhënat bibliografike për «{{FULLPAGENAME}}» ==\n* Emri i faqes: {{FULLPAGENAME}}\n* Autori: Redaktorët e {{SITENAME}}-s\n* Publikuesi: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data e versionit të fundit: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* E marrë më: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Lidhja e përhershme: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Nr i versionit të faqes: {{REVISIONID}}\n</div>\n\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stile të ndryshme citimi për «{{FULLPAGENAME}}» ==\n\n=== [[Stili citimit APA|APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Stili citimit MLA|MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Stili citimit MHRA|MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Stili i citimit Chicago|Chicago]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Stili i citimit CBE/CSE|CBE/CSE]] ===\n{{SITENAME}} contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Stili i citimit Bluebook|Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Stili i citimit BibTeX|BibTeX]] ===\n@misc{ wiki:xxx,\n\tauthor = \"{{SITENAME}}\",\n\ttitle = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n\tyear = \"{{CURRENTYEAR}}\",\n\turl = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n\tnote = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n} \n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may preferred:\n\n@misc{ wiki:xxx,\n\tauthor = \"{{SITENAME}}\",\n\ttitle = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n\tyear = \"{{CURRENTYEAR}}\",\n\turl = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n\tnote = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n}\n</div><!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/sr-ec.json b/extensions/CiteThisPage/i18n/sr-ec.json
new file mode 100644
index 00000000..b70c201c
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sr-ec.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01",
+ "Millosh",
+ "Rancher",
+ "Sasa Stefanovic",
+ "Жељко Тодоровић",
+ "Михајло Анђелковић"
+ ]
+ },
+ "citethispage": "Цитирање",
+ "citethispage-desc": "Додаје посебну страницу за [[Special:CiteThisPage|цитирање]] и везу с алаткама",
+ "citethispage-link": "Цитирај ову страницу",
+ "tooltip-citethispage": "Информације о томе како цитирати ову страну",
+ "citethispage-change-submit": "Цитирај",
+ "citethispage-change-target": "Страница:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Библиографски детаљи за страну {{FULLPAGENAME}} ==\n\n* Назив стране: {{FULLPAGENAME}} \n* Аутор: {{SITENAME}} сарадници\n* Издавач: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Датум последње ревизије: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Датум узимања: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Стални URL: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID верзије стране: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Стилови цитирања за страну {{FULLPAGENAME}} ==\n\n=== [[APA style|APA стил]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Узето <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> од {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA стил]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA стил]] ===\nВикипедијини сарадници, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [приступљено <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Чикаго стил]] ===\nВикипедијини сарадници, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (приступљено <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE стил]] ===\nВикипедијини сарадници. {{FULLPAGENAME}} [Интернет]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [цитирано <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Доступно са: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook стил]] ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (последња посета <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] унос ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nКада користите [[LaTeX]] пакет url (<code>\\usepackage{url}</code> негде у преамбули) који тежи да да далеко лепше форматирану адресу, следеће је можда боље:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div><!--cerrando div para \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/sr-el.json b/extensions/CiteThisPage/i18n/sr-el.json
new file mode 100644
index 00000000..bb4003b7
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sr-el.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liangent",
+ "Michaello",
+ "Milicevic01",
+ "Жељко Тодоровић"
+ ]
+ },
+ "citethispage": "Citiranje",
+ "citethispage-desc": "Dodaje specijalnu stranu za [[Special:Cite|citiranje]] i vezu ka oruđima.",
+ "citethispage-link": "Citiraj ovu stranicu",
+ "tooltip-citethispage": "Informacije o tome kako citirati ovu stranu",
+ "citethispage-change-submit": "Citiraj",
+ "citethispage-change-target": "Stranica:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografski detalji za stranu {{FULLPAGENAME}} ==\n\n* Naziv strane: {{FULLPAGENAME}} \n* Autor: {{SITENAME}} saradnici\n* Izdavač: ''{{SITENAME}}, {{int:sitesubtitle}}''. \n* Datum poslednje revizije: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Datum uzimanja: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Stalni URL: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID verzije strane: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stilovi citiranja za stranu {{FULLPAGENAME}} ==\n\n=== [[APA style|APA stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Uzeto <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> od {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA stil]] ===\nVikipedijini saradnici, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [pristupljeno <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Čikago stil]] ===\nVikipedijini saradnici, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (pristupljeno <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE stil]] ===\nVikipedijini saradnici. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citirano <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Dostupno sa: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook stil]] ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (poslednja poseta <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] unos ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKada koristite [[LaTeX]] paket url (<code>\\usepackage{url}</code> negde u preambuli) koji teži da da daleko lepše formatiranu adresu, sledeće je možda bolje:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div><!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/stq.json b/extensions/CiteThisPage/i18n/stq.json
new file mode 100644
index 00000000..cc371172
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/stq.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pyt"
+ ]
+ },
+ "citethispage": "Zitierhälpe",
+ "citethispage-desc": "Föiget ju [[Special:Cite|Zitierhilfe]]-Spezioalsiede un n Link in dän Kasten Reewen bietou",
+ "citethispage-link": "Disse Siede zitierje",
+ "citethispage-change-submit": "anwiese",
+ "citethispage-change-target": "Siede:"
+}
diff --git a/extensions/CiteThisPage/i18n/su.json b/extensions/CiteThisPage/i18n/su.json
new file mode 100644
index 00000000..9cdc92d0
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/su.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kandar"
+ ]
+ },
+ "citethispage": "Cutat Kaca Ieu",
+ "citethispage-desc": "Nambahkeun kaca husus [[Special:Cite|cutatan]] & tumbu toolbox",
+ "citethispage-link": "Cutat kaca ieu",
+ "tooltip-citethispage": "Émbaran ngeunaan cara ngarujuk kaca ieu",
+ "citethispage-change-submit": "Cutat",
+ "citethispage-change-target": "Kaca:"
+}
diff --git a/extensions/CiteThisPage/i18n/sv.json b/extensions/CiteThisPage/i18n/sv.json
new file mode 100644
index 00000000..f10ef7c9
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sv.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lejonel",
+ "Per",
+ "Sannab",
+ "WikiPhoenix",
+ "Lokal Profil"
+ ]
+ },
+ "citethispage": "Citera",
+ "citethispage-desc": "Lägger till en specialsida för [[Special:CiteThisPage|källhänvisning]] och en länk i verktygslådan",
+ "citethispage-link": "Citera denna sida",
+ "tooltip-citethispage": "Information om hur denna sida kan citeras",
+ "citethispage-change-submit": "Citera",
+ "citethispage-change-target": "Sida:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Bibliografiska detaljer för {{FULLPAGENAME}} ==\n\n* Sidans namn: {{FULLPAGENAME}}\n* Författare: {{SITENAME}}-medarbetare\n* Utgivare: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Datum för senaste version: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Datum mottaget: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Permanent URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Sidans version-ID: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Referensstilar för {{FULLPAGENAME}} ==\n\n=== [[APA style|APA-stil]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Hämtat <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> från {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA-stil]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA-stil]] ===\n{{SITENAME}}-medarbetare, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [hämtad <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Chicago-stil]] ===\n{{SITENAME}}-medarbetare, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (hämtad <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|CBE/CSE-stil]] ===\n{{SITENAME}}-medarbetare. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citerad <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Tillgänglig från:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook-stil]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (senast besökt <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]]-uppslag ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; hämtad <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nNär [[LaTeX]]-modulen \"url\" används (<code>\\usepackage{url}</code> någonstans i ingressen), vilken brukar ge mycket bättre formaterade webbadresser, kan följande vara att föredra:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; hämtad <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--avslutande div för \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/sw.json b/extensions/CiteThisPage/i18n/sw.json
new file mode 100644
index 00000000..a5e0a6b3
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sw.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr",
+ "Stephenwanjau"
+ ]
+ },
+ "citethispage": "Taja",
+ "citethispage-link": "Taja ukurasa huu",
+ "tooltip-citethispage": "Taarifa juu ya njia ya kutaja ukurasa huu",
+ "citethispage-change-submit": "Taja",
+ "citethispage-change-target": "Ukurasa:"
+}
diff --git a/extensions/CiteThisPage/i18n/sxu.json b/extensions/CiteThisPage/i18n/sxu.json
new file mode 100644
index 00000000..1fe9d2a7
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/sxu.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Thogo"
+ ]
+ },
+ "citethispage": "Zidierhilfe",
+ "citethispage-link": "Zidier dän ardiggl hier",
+ "citethispage-change-submit": "Zidierhilfe"
+}
diff --git a/extensions/CiteThisPage/i18n/szl.json b/extensions/CiteThisPage/i18n/szl.json
new file mode 100644
index 00000000..0d8c5b2b
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/szl.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Herr Kriss",
+ "Timpul",
+ "Krol111"
+ ]
+ },
+ "citethispage-link": "Cytuj ta zajta",
+ "tooltip-citethispage": "Informacyjo uo tym jak noleżi cytować ta zajta",
+ "citethispage-change-target": "Zajta:"
+}
diff --git a/extensions/CiteThisPage/i18n/ta.json b/extensions/CiteThisPage/i18n/ta.json
new file mode 100644
index 00000000..bfcdc400
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ta.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shanmugamp7",
+ "TRYPPN",
+ "Trengarasu"
+ ]
+ },
+ "citethispage": "மேற்கோள் காட்டு",
+ "citethispage-desc": "கருவிப் பெட்டியில் [[Special:Cite|மேற்கோள்]] காடுவதற்கான இணைப்பை ஏற்படுத்துகிறது",
+ "citethispage-link": "இப்பக்கத்தை மேற்கோள் காட்டு",
+ "tooltip-citethispage": "இப்பக்கத்தை எப்படி மேற்கோளாகக் காட்டுவது என்பது பற்றிய விவரம்",
+ "citethispage-change-submit": "மேற்கோள் காட்டு",
+ "citethispage-change-target": "பக்கம்:"
+}
diff --git a/extensions/CiteThisPage/i18n/tcy.json b/extensions/CiteThisPage/i18n/tcy.json
new file mode 100644
index 00000000..5d6fcd17
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tcy.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "VASANTH S.N.",
+ "Vishwanatha Badikana"
+ ]
+ },
+ "citethispage-link": "ಈ ಪುಟೊನು ಉಲ್ಲೇಖಮಲ್ಪುಲೆ",
+ "tooltip-citethispage": "ಮಾಹಿತಿದ ಮೂಲಕೊ ಈ ಪುಟೊನು ಎಂಚ ಉಲ್ಲೇಕೊ ಮಲ್ಪುನೆ"
+}
diff --git a/extensions/CiteThisPage/i18n/te.json b/extensions/CiteThisPage/i18n/te.json
new file mode 100644
index 00000000..39ba5595
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/te.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mpradeep",
+ "Veeven"
+ ]
+ },
+ "citethispage": "ఉదహరించు",
+ "citethispage-desc": "[[Special:Cite|ఉదహరింపు]] అనే ప్రత్యేక పేజీని & పరికర పెట్టె లింకునీ చేరుస్తుంది",
+ "citethispage-link": "ఈ వ్యాసాన్ని ఉదహరించండి",
+ "tooltip-citethispage": "ఈ పేజీని ఎలా ఉదహరించాలి అన్నదానిపై సమాచారం",
+ "citethispage-change-submit": "ఉదహరించు",
+ "citethispage-change-target": "పేజీ:"
+}
diff --git a/extensions/CiteThisPage/i18n/tet.json b/extensions/CiteThisPage/i18n/tet.json
new file mode 100644
index 00000000..64cf2fa9
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tet.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "MF-Warburg"
+ ]
+ },
+ "citethispage": "Sita",
+ "citethispage-desc": "Kria pájina espesíal ba [[Special:Cite|sitasaun]] ho ligasaun iha kaixa besi nian",
+ "citethispage-link": "Sita pájina ne'e",
+ "tooltip-citethispage": "Informasaun kona-ba sita pájina ne'e",
+ "citethispage-change-submit": "Sita",
+ "citethispage-change-target": "Pájina:"
+}
diff --git a/extensions/CiteThisPage/i18n/tg-cyrl.json b/extensions/CiteThisPage/i18n/tg-cyrl.json
new file mode 100644
index 00000000..14865654
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tg-cyrl.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahim"
+ ]
+ },
+ "citethispage": "Ёд кардани ин мақола",
+ "citethispage-desc": "Саҳифаи вижае барои [[Special:Cite|ёдкард]] изофа мекунад ва пайванде ба ҷаъбаи абзор меафзояд",
+ "citethispage-link": "Ёд кардани пайванди ин мақола",
+ "citethispage-change-submit": "Ёд кардан",
+ "citethispage-change-target": "Саҳифа:"
+}
diff --git a/extensions/CiteThisPage/i18n/tg-latn.json b/extensions/CiteThisPage/i18n/tg-latn.json
new file mode 100644
index 00000000..e52e5fae
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tg-latn.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liangent"
+ ]
+ },
+ "citethispage": "Jod kardani in maqola",
+ "citethispage-desc": "Sahifai viƶae baroi [[Special:Cite|jodkard]] izofa mekunad va pajvande ba ça'bai abzor meafzojad",
+ "citethispage-link": "Jod kardani pajvandi in maqola",
+ "citethispage-change-submit": "Jod kardan",
+ "citethispage-change-target": "Sahifa:"
+}
diff --git a/extensions/CiteThisPage/i18n/th.json b/extensions/CiteThisPage/i18n/th.json
new file mode 100644
index 00000000..3265fe75
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/th.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Octahedron80",
+ "Passawuth"
+ ]
+ },
+ "citethispage": "อ้างอิง",
+ "citethispage-desc": "เพิ่มหน้า[[Special:Cite|อ้างอิง]]พิเศษและลิงก์บนกล่องเครื่องมือ",
+ "citethispage-link": "อ้างอิงหน้านี้",
+ "tooltip-citethispage": "ข้อมูลเกี่ยวกับวิธีการอ้างอิงหน้านี้",
+ "citethispage-change-submit": "อ้างอิง",
+ "citethispage-change-target": "หน้า:"
+}
diff --git a/extensions/CiteThisPage/i18n/tk.json b/extensions/CiteThisPage/i18n/tk.json
new file mode 100644
index 00000000..f9415b3e
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tk.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hanberke"
+ ]
+ },
+ "citethispage": "Sitirle",
+ "citethispage-desc": "[[Special:Cite|Sitirle]] ýörite sahypasyny we gural sandygy çykgydyny goşýar",
+ "citethispage-link": "Sahypany sitirle",
+ "tooltip-citethispage": "Bu sahypany nähili sitirlemelidigi hakda maglumat",
+ "citethispage-change-submit": "Sitirle",
+ "citethispage-change-target": "Sahypa:"
+}
diff --git a/extensions/CiteThisPage/i18n/tl.json b/extensions/CiteThisPage/i18n/tl.json
new file mode 100644
index 00000000..f5545a55
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw"
+ ]
+ },
+ "citethispage": "Tukuyin",
+ "citethispage-desc": "Nagdaragdag ng isang natatanging pahinang [[Special:Cite|pampagtutukoy]] at kawing sa kahon (lalagyan) ng kagamitan",
+ "citethispage-link": "Tukuyin ang pahinang ito",
+ "tooltip-citethispage": "Kabatiran kung paano tutukuyin ang pahinang ito",
+ "citethispage-change-submit": "Tukuyin",
+ "citethispage-change-target": "Pahina:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Mga detalyeng pangtalaaklatan para sa {{FULLPAGENAME}} ==\n\n* Pangalan ng pahina: {{FULLPAGENAME}}\n* May-akda: {{SITENAME}} contributors\n* Tagapaglathala: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Petsa ng huling pagbabago: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Petsa ng pagbawi: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Pamalagiang URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID ng Bersiyon ng Pahina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Mga estilo ng pagbanggit para sa {{FULLPAGENAME}} ==\n\n=== [[Estilo ng APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Nabawi noong <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Estilo ng MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Estilo ng MHRA]] ===\n{{SITENAME}} contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [napuntahan noong <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Estilo ng Chicago]] ===\n{{SITENAME}} contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (napuntahan noong <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Estilo ng CBE/CSE]] ===\nMga tagapag-ambag sa {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [pagbanggit <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Makukuha mula sa: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Estilo ng Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (huling dinalaw noong <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Lahok sa [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n may-akda = \"{{SITENAME}}\",\n pamagat = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n taon = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n tala = \"[Nasa linya; napuntahan noong <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKapag ginagamit ang pakete ng url ng [[LaTeX]] (<code>\\usepackage{url}</code> saan man sa loob ng punong-sabi) na may gawi na makapagbigay ng lalo pang may mahusay na kaanyuan na mga tirahang pangsangkalambatan, ang mga sumusunod ay maaaring mas nanaisin:\n\n @misc{ wiki:xxx,\n may-akda = \"{{SITENAME}}\",\n pamagat = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n taon = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n tala = \"[Nasa linya; napuntahan noong <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/tly.json b/extensions/CiteThisPage/i18n/tly.json
new file mode 100644
index 00000000..941f857d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tly.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Гусейн"
+ ]
+ },
+ "citethispage-change-target": "Сәһифә:"
+}
diff --git a/extensions/CiteThisPage/i18n/tn.json b/extensions/CiteThisPage/i18n/tn.json
new file mode 100644
index 00000000..16db9bd3
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tn.json
@@ -0,0 +1,4 @@
+{
+ "@metadata": [],
+ "citethispage-link": "Nopola mokwalo o"
+}
diff --git a/extensions/CiteThisPage/i18n/to.json b/extensions/CiteThisPage/i18n/to.json
new file mode 100644
index 00000000..bdf64742
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/to.json
@@ -0,0 +1,5 @@
+{
+ "@metadata": [],
+ "citethispage": "Lau ki he",
+ "citethispage-link": "Lau ki he kupú ni"
+}
diff --git a/extensions/CiteThisPage/i18n/tr.json b/extensions/CiteThisPage/i18n/tr.json
new file mode 100644
index 00000000..ea216489
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tr.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Erkan Yilmaz",
+ "Joseph",
+ "Srhat",
+ "Uğur Başak"
+ ]
+ },
+ "citethispage": "Kaynak göster",
+ "citethispage-desc": "[[Special:Cite|Alıntı]] özel sayfa ve araç kutusu linkini ekler",
+ "citethispage-link": "Sayfayı kaynak göster",
+ "tooltip-citethispage": "Bu sayfanın nasıl alıntı yapılacağı hakkında bilgi",
+ "citethispage-change-submit": "Belirt",
+ "citethispage-change-target": "Sayfa:",
+ "citethispage-content": "__NOTOC__\n<div style=\"width: 90%; text-align: center; font-size: 85%; margin: 10px auto;\">İçindekiler: [[#APA stil|APA]] | [[#MLA stil|MLA]] | [[#MHRA stil|MHRA]] | [[#Chicago stil|Chicago]] | [[#CBE/CSE stil|CSE]] | [[#Bluebook stil|Bluebook]] | [[#BibTeX stil|BibTeX]]</div>\n\n'''NOTE:''' Most teachers and professionals do not consider encyclopedias citable reference material for most purposes. Wikipedia articles should be used for background information, and as a starting point for further research, but not as a final source for important facts.\n\nAs with any [[Vikipedi:Vikipedi kim yazar|community-built]] reference, there is a possibility for error in Wikipedia's content — please check your facts against multiple sources and read our [[Vikipedi:Genel_Bilgi_Paktı|disclaimers]] for more information.\n\n<div style=\"border: 1px solid grey; background: #E6E8FA; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== \"{{FULLPAGENAME}}\" sayfasının [[bibliyografya|bibliyografik]] detayları ==\n\n* Sayfanın adı: {{FULLPAGENAME}}\n* Yazar(lar): Vikipedi'de katkıda bulunanlar, bak [{{fullurl:{{FULLPAGENAME}}|action=history}} sayfanın geçmişi]\n* Editör: ''{{SITENAME}}, {{MedyaViki:Sitesubtitle}}''. \n* Son düzenleme tarih: {{CURRENTDAY}}. {{CURRENTMONTHNAME}}\n* Son isteme tarih: {{CURRENTYEAR}}, {{CURRENTTIME}} ([[UTC]])\n* Geçerli URL: {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Sayfanın versiyon no.: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks\" style=\"border: 1px solid grey; width: 90%; padding: 15px 30px 15px 30px; margin: 10px auto;\">\n\n== \"{{FULLPAGENAME}}\" sayfanın kaynak olarak gösterim imkanları ==\n\n=== [[APA]] stil ===\nWikipedia contributors ({{CURRENTYEAR}}). {{FULLPAGENAME}}. ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. Retrieved <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> from {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[MLA]] stil ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA]] stil ===\nWikipedia contributors, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Chicago]] stil ===\nWikipedia contributors, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{MediaWiki:Sitesubtitle}},'' {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accessed <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[CBE/CSE]] stil ===\nWikipedia contributors. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{MediaWiki:Sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Available from: \n{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook]] stil ===\n{{FULLPAGENAME}}, {{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (last visited <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] stil ===\n\n @misc{ wiki:xxx,\n yazar(lar) = \"{{SITENAME}}\",\n başlık = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n yıl = \"{{CURRENTYEAR}}\",\n url = \"{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n not = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nWhen using the [[LaTeX]] package url (<code>\\usepackage{url}</code> somewhere in the preamble) which tends to give much more nicely formatted web addresses, the following may preferred:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{MediaWiki:Sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{fullurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accessed <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing \"Citation styles\" div-->\n\n<noinclude>\n[[de:MediaWiki:citethispage-content]]\n[[en:MediaWiki:Cite text]]\n</noinclude>"
+}
diff --git a/extensions/CiteThisPage/i18n/tru.json b/extensions/CiteThisPage/i18n/tru.json
new file mode 100644
index 00000000..a9be3e54
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tru.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ariyo"
+ ]
+ },
+ "citethispage-change-target": "Faṭo:"
+}
diff --git a/extensions/CiteThisPage/i18n/ts.json b/extensions/CiteThisPage/i18n/ts.json
new file mode 100644
index 00000000..932e45d7
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ts.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Thuvack"
+ ]
+ },
+ "citethispage-change-target": "Tluka:"
+}
diff --git a/extensions/CiteThisPage/i18n/tt-cyrl.json b/extensions/CiteThisPage/i18n/tt-cyrl.json
new file mode 100644
index 00000000..c34960c1
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tt-cyrl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ильнар",
+ "Derslek"
+ ]
+ },
+ "citethispage": "Күчермәләү",
+ "citethispage-desc": "Махсус [[Special:Cite|күчермәләү]] битен һәм җиһазларга сылтамалар өсти",
+ "citethispage-link": "Өземтә өчен",
+ "tooltip-citethispage": "Бу биттән өземтә алу өчен мәгълүмат",
+ "citethispage-change-submit": "Күчермәләү",
+ "citethispage-change-target": "Бит:"
+}
diff --git a/extensions/CiteThisPage/i18n/tyv.json b/extensions/CiteThisPage/i18n/tyv.json
new file mode 100644
index 00000000..4b83515d
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tyv.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Agilight"
+ ]
+ },
+ "citethispage-link": "Арынны цитаталаар",
+ "tooltip-citethispage": "Ук арынны канчалдыр цитаталаарының дугайында медээлел"
+}
diff --git a/extensions/CiteThisPage/i18n/tzm.json b/extensions/CiteThisPage/i18n/tzm.json
new file mode 100644
index 00000000..36709723
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/tzm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tifinaghes"
+ ]
+ },
+ "citethispage-change-target": "ⵜⴰⵙⵏⴰ:"
+}
diff --git a/extensions/CiteThisPage/i18n/udm.json b/extensions/CiteThisPage/i18n/udm.json
new file mode 100644
index 00000000..83de6c76
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/udm.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ОйЛ"
+ ]
+ },
+ "citethispage-link": "Кызьы со статьяез цитировать кароно"
+}
diff --git a/extensions/CiteThisPage/i18n/ug-arab.json b/extensions/CiteThisPage/i18n/ug-arab.json
new file mode 100644
index 00000000..a1f2876f
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ug-arab.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sahran"
+ ]
+ },
+ "citethispage-change-target": "بەت:"
+}
diff --git a/extensions/CiteThisPage/i18n/ug-latn.json b/extensions/CiteThisPage/i18n/ug-latn.json
new file mode 100644
index 00000000..e32f1092
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ug-latn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jose77"
+ ]
+ },
+ "citethispage-link": "Bu maqalini ishliting",
+ "citethispage-change-target": "Bet:"
+}
diff --git a/extensions/CiteThisPage/i18n/uk.json b/extensions/CiteThisPage/i18n/uk.json
new file mode 100644
index 00000000..e2404c03
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/uk.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahonc",
+ "Prima klasy4na",
+ "Ата",
+ "Andriykopanytsia"
+ ]
+ },
+ "citethispage": "Цитування",
+ "citethispage-desc": "Додає спеціальну сторінку [[Special:CiteThisPage|цитування]] і посилання в інструментах",
+ "citethispage-link": "Цитувати сторінку",
+ "tooltip-citethispage": "Інформація про те, як цитувати цю сторінку",
+ "citethispage-change-submit": "Процитувати",
+ "citethispage-change-target": "Сторінка:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Бібліографічні дані статті {{FULLPAGENAME}} ==\n\n* Назва: {{FULLPAGENAME}}\n* Автор: {{SITENAME}} contributors\n* Опубліковано: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Дата останньої зміни: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Дата цитування: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* Постійне посилання: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID версії сторінки: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Варіанти оформлення посилань на {{FULLPAGENAME}} ==\n\n=== [[APA style]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Цитовано <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> з {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Стиль MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Стиль MHRA]] ===\nДописувачі {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [цитовано <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Стиль Chicago]] ===\nДописувачі {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (цитовано <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Стиль CBE/CSE]] ===\nДописувачі {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [cited <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Доступно з:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Стиль Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (останній перегляд <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== Запис [[BibTeX]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Онлайн; цитовано <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nПри використанні [[LaTeX]]-пакета url (<code>\\usepackage{url}</code> у преамбулі), який тяжіє до кращого форматування веб-адрес, мабуть, краще буде вказати таке:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Онлайн; цитовано <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/ur.json b/extensions/CiteThisPage/i18n/ur.json
new file mode 100644
index 00000000..2822ba23
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/ur.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "عثمان خان شاہ"
+ ]
+ },
+ "citethispage": "حوالہ",
+ "citethispage-link": "مضمون کا حوالہ دیں",
+ "tooltip-citethispage": "معلومات برائے کس طرح اس صفحے کو حوالہ دیا جائے",
+ "citethispage-change-target": "صفحہ:"
+}
diff --git a/extensions/CiteThisPage/i18n/uz.json b/extensions/CiteThisPage/i18n/uz.json
new file mode 100644
index 00000000..b94ebf68
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/uz.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "CoderSI"
+ ]
+ },
+ "citethispage-link": "Sahifadan matn parchasi ajratish"
+}
diff --git a/extensions/CiteThisPage/i18n/vec.json b/extensions/CiteThisPage/i18n/vec.json
new file mode 100644
index 00000000..581efaa4
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/vec.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Candalua",
+ "GatoSelvadego"
+ ]
+ },
+ "citethispage": "Citazion",
+ "citethispage-desc": "Zonta na pagina speciale par le [[Special:Cite|citazion]] e un colegamento nei strumenti",
+ "citethispage-link": "Cita sta pagina",
+ "tooltip-citethispage": "Informassion su come citar sta pagina",
+ "citethispage-change-submit": "Crea la citazion",
+ "citethispage-change-target": "Pagina da citar:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Detaji bibliografisi par {{FULLPAGENAME}} ==\n\n* Titoło pàjina: {{FULLPAGENAME}}\n* Autor: contributori {{SITENAME}}\n* Editor: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Data de l'ultema modifega: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC\n* Data estrasion: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation>\n* URL permanente: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* ID version pàjina: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Stiłi citasion par {{FULLPAGENAME}} ==\n\n=== [[APA style|Stiłe APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Estratto il <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> da {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|Stiłe MLA]] ===\n\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|Stiłe MHRA]] ===\nContributori {{SITENAME}}, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [accesso il <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[The Chicago Manual of Style|Stiłe Chicago]] ===\nContributori {{SITENAME}}, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (accesso il <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Council of Science Editors|Stiłe CBE/CSE]] ===\nContributori {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [citato il <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Disponibile su:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Stiłe Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ultima visita il <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Online; accesso il <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nCuando che se dopara el pacheto [[LaTeX]] par url (<code>\\usepackage{url}</code> da calche parte inte'l preanboło) che in xenere el da indirisi web formatai in modo mejor, xe preferibiłe doparar el seguente còdexe:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Online; accesso il <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/vep.json b/extensions/CiteThisPage/i18n/vep.json
new file mode 100644
index 00000000..d9c7c456
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/vep.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Triple-ADHD-AS",
+ "Игорь Бродский"
+ ]
+ },
+ "citethispage": "Citiruind",
+ "citethispage-desc": "Ližadab [[Special:Cite|citiruindan]] specialižen lehtpolen da kosketusen azegištos",
+ "citethispage-link": "Citiruida nece lehtpol'",
+ "tooltip-citethispage": "Informacii siš, kut pidab citiruida nece lehtpol'.",
+ "citethispage-change-submit": "Citiruida",
+ "citethispage-change-target": "Lehtpol’:"
+}
diff --git a/extensions/CiteThisPage/i18n/vi.json b/extensions/CiteThisPage/i18n/vi.json
new file mode 100644
index 00000000..454c89a1
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/vi.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "Vinhtantran"
+ ]
+ },
+ "citethispage": "Trích dẫn",
+ "citethispage-desc": "Thêm trang đặc biệt để [[Special:Cite|trích dẫn bài viết]] và đặt liên kết trong thanh công cụ",
+ "citethispage-link": "Trích dẫn trang này",
+ "tooltip-citethispage": "Hướng dẫn cách trích dẫn trang này",
+ "citethispage-change-submit": "Trích dẫn",
+ "citethispage-change-target": "Trang:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== Chi tiết ghi chú của {{FULLPAGENAME}} ==\n\n* Tên trang: {{FULLPAGENAME}}\n* Tác giả: {{SITENAME}} contributors\n* Nhà xuất bản: ''{{SITENAME}}, {{int:sitesubtitle}}''.\n* Ngày sửa cuối: {{CURRENTDAY}} {{CURRENTMONTHNAME}} năm {{CURRENTYEAR}} lúc {{CURRENTTIME}} UTC\n* Ngày truy cập: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} năm {{CURRENTYEAR}} lúc {{CURRENTTIME}} UTC</citation>\n* URL thường trực: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* Mã số phiên bản trang: {{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== Các văn phong ghi chú phổ biến cho {{FULLPAGENAME}} ==\n\n=== [[Văn phong APA]] ===\n{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTDAY}} {{CURRENTMONTHNAME}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Lấy vào <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> từ {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Cẩm nang Văn phong MLA|Văn phong MLA]] ===\n“{{FULLPAGENAME}}.” ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[Hướng dẫn Văn phong MHRA|Văn phong MHRA]] ===\nNhững người đóng góp vào {{SITENAME}}, ‘{{FULLPAGENAME}}’, ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt; [truy cập ngày <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>]\n\n=== [[Cẩm nang Văn phong Chicago|Văn phong Chicago]] ===\nNhững người đóng góp vào {{SITENAME}}, “{{FULLPAGENAME}},” ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (truy cập ngày <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[Hội đồng Chủ bút Khoa học|Văn phong CBE/CSE]] ===\nNhững người đóng góp vào {{SITENAME}}. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [ghi chú ngày <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Có sẵn tại:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Văn phong Bluebook]] ===\n{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ghé thăm lần cuối ngày <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>).\n\n=== [[BibTeX]] entry ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[Trực tuyến; truy cập ngày <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\nKhi sử dụng gói <code>url</code> của [[LaTeX]] (có <code>\\usepackage{url}</code> ở đâu đó phía đầu văn bản), gói này hay trang trí các địa chỉ Web một cách đẹp đẽ hơn, bạn có thể muốn sử dụng đoạn mã sau:\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[Trực tuyến; truy cập ngày <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\"\n }\n\n\n</div> <!-- div kết thúc “plainlinks” -->"
+}
diff --git a/extensions/CiteThisPage/i18n/vo.json b/extensions/CiteThisPage/i18n/vo.json
new file mode 100644
index 00000000..89b101c8
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/vo.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya",
+ "Smeira"
+ ]
+ },
+ "citethispage": "Saitön",
+ "citethispage-desc": "Läükon padi patik [[Special:Cite|saitama]] sa yüm ad stumem",
+ "citethispage-link": "Saitön padi at",
+ "citethispage-change-submit": "Saitön",
+ "citethispage-change-target": "Pad:"
+}
diff --git a/extensions/CiteThisPage/i18n/wa.json b/extensions/CiteThisPage/i18n/wa.json
new file mode 100644
index 00000000..177473fc
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/wa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Srtxg"
+ ]
+ },
+ "citethispage-change-target": "Pådje:"
+}
diff --git a/extensions/CiteThisPage/i18n/wuu.json b/extensions/CiteThisPage/i18n/wuu.json
new file mode 100644
index 00000000..014f9b9b
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/wuu.json
@@ -0,0 +1,7 @@
+{
+ "@metadata": [],
+ "citethispage": "引用",
+ "citethispage-link": "引用该篇文章",
+ "citethispage-change-submit": "引用",
+ "citethispage-change-target": "页面:"
+}
diff --git a/extensions/CiteThisPage/i18n/xal.json b/extensions/CiteThisPage/i18n/xal.json
new file mode 100644
index 00000000..9f5f286f
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/xal.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Huuchin"
+ ]
+ },
+ "citethispage-link": "Тер халхиг эшллх"
+}
diff --git a/extensions/CiteThisPage/i18n/yi.json b/extensions/CiteThisPage/i18n/yi.json
new file mode 100644
index 00000000..a0669325
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/yi.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "citethispage": "ציטירן",
+ "citethispage-desc": "לייגט צו א [[Special:CiteThisPage|ציטיר]] באַזונדערן בלאַט און געצייגקאַסטן לינק",
+ "citethispage-link": "ציטירן דעם דאזיגן בלאט",
+ "tooltip-citethispage": "אינפֿאָרמאַציע ווי אַזוי צו ציטירן דעם בלאַט",
+ "citethispage-change-submit": "ציטירן",
+ "citethispage-change-target": "בלאט:"
+}
diff --git a/extensions/CiteThisPage/i18n/yo.json b/extensions/CiteThisPage/i18n/yo.json
new file mode 100644
index 00000000..64867132
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/yo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Demmy"
+ ]
+ },
+ "citethispage-change-target": "Ojúewé:"
+}
diff --git a/extensions/CiteThisPage/i18n/yue.json b/extensions/CiteThisPage/i18n/yue.json
new file mode 100644
index 00000000..1dc143c8
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/yue.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yueman"
+ ]
+ },
+ "citethispage": "引用文章",
+ "citethispage-desc": "加一個[[Special:CiteThisPage|引用]]特別頁同埋工具箱連結",
+ "citethispage-link": "引用呢篇文",
+ "tooltip-citethispage": "點樣引用呢頁嘅資訊",
+ "citethispage-change-submit": "引用",
+ "citethispage-change-target": "版:"
+}
diff --git a/extensions/CiteThisPage/i18n/zh-hans.json b/extensions/CiteThisPage/i18n/zh-hans.json
new file mode 100644
index 00000000..9d4c54dc
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/zh-hans.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hzy980512",
+ "Xiaomingyan",
+ "Mywood",
+ "Liuxinyu970226"
+ ]
+ },
+ "citethispage": "引用此页",
+ "citethispage-desc": "添加[[Special:CiteThisPage|引用]]特殊页面和工具箱链接",
+ "citethispage-link": "引用本页",
+ "tooltip-citethispage": "关于如何引用本页的信息",
+ "citethispage-change-submit": "引用",
+ "citethispage-change-target": "页面:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}}的参考详情 ==\n\n* 页面名称:{{FULLPAGENAME}}\n* 作者:{{SITENAME}}贡献者\n* 出版者:{{SITENAME}},{{int:sitesubtitle}}。\n* 最后版本日期:{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日 {{CURRENTTIME}} UTC\n* 检索日期:<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日 {{CURRENTTIME}} UTC</citation>\n* 永久URL:{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* 页面版本ID:{{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}}的引用格式 ==\n\n=== GB7714格式 ===\n{{SITENAME}}编者.{{FULLPAGENAME}}[G/OL].{{SITENAME}},{{int:sitesubtitle}},{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}[<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}</citation>].{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[APA style|APA格式]] ===\n{{FULLPAGENAME}}.({{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日).''{{SITENAME}},{{int:sitesubtitle}}''.于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}</citation>查阅自{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA格式]] ===\n“{{FULLPAGENAME}}.”''{{SITENAME}},{{int:sitesubtitle}}''.{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(协调世界时).<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA格式]] ===\n{{SITENAME}}编者,‘{{FULLPAGENAME}}’,''{{SITENAME}},{{int:sitesubtitle}}'',{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(协调世界时),&lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;[于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>查阅]\n\n=== [[The Chicago Manual of Style|芝加哥格式]] ===\n{{SITENAME}}编者,“{{FULLPAGENAME}},”''{{SITENAME}},{{int:sitesubtitle}}'',{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}(于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>查阅).\n\n=== [[Council of Science Editors|CBE/CSE格式]] ===\n{{SITENAME}}编者.{{FULLPAGENAME}}[互联网].{{SITENAME}},{{int:sitesubtitle}};{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(协调世界时)[引用于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>].可访问自:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook格式]] ===\n{{FULLPAGENAME}},{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}(最新访问于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>).\n\n=== [[BibTeX|BibTeX记录]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[在线资源;访问于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>]\"\n }\n\n使用[[LaTeX|LaTeX]]包装的链接(开头某处的<code>\\usepackage{url}</code>)将提供更好的网址格式,推荐选用下列格式:\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[在线资源;访问于<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/i18n/zh-hant.json b/extensions/CiteThisPage/i18n/zh-hant.json
new file mode 100644
index 00000000..35cfc30a
--- /dev/null
+++ b/extensions/CiteThisPage/i18n/zh-hant.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Frankou",
+ "Waihorace",
+ "Liuxinyu970226",
+ "Cwlin0416",
+ "LNDDYL"
+ ]
+ },
+ "citethispage": "引用此頁",
+ "citethispage-desc": "加入 [[Special:CiteThisPage|引用]] 特殊頁面及工具箱連結",
+ "citethispage-link": "引用此頁面",
+ "tooltip-citethispage": "關於如何引用此頁的資訊",
+ "citethispage-change-submit": "引用",
+ "citethispage-change-target": "頁面:",
+ "citethispage-content": "__NOTOC__\n<div class=\"mw-specialCiteThisPage-bibliographic\">\n\n== {{FULLPAGENAME}}的文獻詳細資訊 ==\n\n* 頁面名稱:{{FULLPAGENAME}}\n* 作者:{{SITENAME}}編者\n* 出版者:{{SITENAME}},{{int:sitesubtitle}}.\n* 最新版本日期:{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(協調世界時)\n* 查閲日期:<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(協調世界時)</citation>\n* 永久連結:{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\n* 頁面版本號:{{REVISIONID}}\n\n</div>\n<div class=\"plainlinks mw-specialCiteThisPage-styles\">\n\n== {{FULLPAGENAME}}的參考文獻格式 ==\n\n=== [[APA style|APA格式]] ===\n{{FULLPAGENAME}}.({{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日).''{{SITENAME}},{{int:sitesubtitle}}''.於<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}</citation>查閲自{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[The MLA style manual|MLA格式]] ===\n「{{FULLPAGENAME}}」.''{{SITENAME}},{{int:sitesubtitle}}''.{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(協調世界時).<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}</citation> &lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;.\n\n=== [[MHRA Style Guide|MHRA格式]] ===\n{{SITENAME}}編者,『{{FULLPAGENAME}}』,''{{SITENAME}},{{int:sitesubtitle}}'',{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(協調世界時),&lt;{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}&gt;[於<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>查閲]\n\n=== [[The Chicago Manual of Style|芝加哥格式]] ===\n{{SITENAME}}編者,「{{FULLPAGENAME}}」,''{{SITENAME}},{{int:sitesubtitle}}'',{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}(於<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>查閲).\n\n=== [[Council of Science Editors|CBE/CSE格式]] ===\n{{SITENAME}}編者.{{FULLPAGENAME}}[網際網絡].{{SITENAME}},{{int:sitesubtitle}};{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日{{CURRENTTIME}}(協調世界時)[引用於<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>].可訪問自:\n{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}.\n\n=== [[Bluebook|Bluebook格式]] ===\n{{FULLPAGENAME}},{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}(最新訪問於<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>).\n\n=== [[BibTeX|BibTeX記錄]] ===\n\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\",\n note = \"[線上資源;訪問於<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>]\"\n }\n\n使用[[LaTeX|LaTeX]]包裝的連結(開頭某處的<code>\\usepackage{url}</code>)將提供更好的網址格式,推薦選用下列格式:\n @misc{ wiki:xxx,\n author = \"{{SITENAME}}\",\n title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\",\n year = \"{{CURRENTYEAR}}\",\n url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\",\n note = \"[線上資源;訪問於<citation>{{CURRENTYEAR}}年{{CURRENTMONTH}}月{{CURRENTDAY}}日</citation>]\"\n }\n\n\n</div> <!--closing div for \"plainlinks\"-->"
+}
diff --git a/extensions/CiteThisPage/modules/ext.citeThisPage.css b/extensions/CiteThisPage/modules/ext.citeThisPage.css
new file mode 100644
index 00000000..708b29a5
--- /dev/null
+++ b/extensions/CiteThisPage/modules/ext.citeThisPage.css
@@ -0,0 +1,13 @@
+.mw-specialCiteThisPage-bibliographic {
+ border: 1px solid grey;
+ background: #E6E8FA;
+ width: 90%;
+ padding: 15px 30px 15px 30px;
+ margin: 10px auto;
+}
+.mw-specialCiteThisPage-styles {
+ border: 1px solid grey;
+ width: 90%;
+ padding: 15px 30px 15px 30px;
+ margin: 10px auto;
+}
diff --git a/extensions/ConfirmEdit/ApiFancyCaptchaReload.php b/extensions/ConfirmEdit/ApiFancyCaptchaReload.php
index 9b918d85..8cd28631 100644
--- a/extensions/ConfirmEdit/ApiFancyCaptchaReload.php
+++ b/extensions/ConfirmEdit/ApiFancyCaptchaReload.php
@@ -16,6 +16,9 @@ class ApiFancyCaptchaReload extends ApiBase {
return true;
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getDescription() {
return 'Get a new FancyCaptcha.';
}
@@ -24,11 +27,20 @@ class ApiFancyCaptchaReload extends ApiBase {
return array();
}
- public function getParamDescription() {
- return array();
- }
-
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getExamples() {
return array( 'api.php?action=fancycaptchareload&format=xml' );
}
+
+ /**
+ * @see ApiBase::getExamplesMessages()
+ */
+ protected function getExamplesMessages() {
+ return array(
+ 'action=fancycaptchareload'
+ => 'apihelp-fancycaptchareload-example-1',
+ );
+ }
}
diff --git a/extensions/ConfirmEdit/ConfirmEdit.alias.php b/extensions/ConfirmEdit/ConfirmEdit.alias.php
index 7a85cd9c..e04d8cd8 100644
--- a/extensions/ConfirmEdit/ConfirmEdit.alias.php
+++ b/extensions/ConfirmEdit/ConfirmEdit.alias.php
@@ -24,6 +24,11 @@ $specialPageAliases['arz'] = array(
'Captcha' => array( 'كابتشا' ),
);
+/** Western Balochi (بلوچی رخشانی) */
+$specialPageAliases['bgn'] = array(
+ 'Captcha' => array( 'گپچا' ),
+);
+
/** Min Dong Chinese (Mìng-dĕ̤ng-ngṳ̄) */
$specialPageAliases['cdo'] = array(
'Captcha' => array( '驗證碼' ),
@@ -31,7 +36,7 @@ $specialPageAliases['cdo'] = array(
/** Zazaki (Zazaki) */
$specialPageAliases['diq'] = array(
- 'Captcha' => array( 'Kodaİtimadi' ),
+ 'Captcha' => array( 'Kodêİtımadi' ),
);
/** Esperanto (Esperanto) */
@@ -89,6 +94,11 @@ $specialPageAliases['kw'] = array(
'Captcha' => array( 'Captcha' ),
);
+/** لوری (لوری) */
+$specialPageAliases['lrc'] = array(
+ 'Captcha' => array( 'رازینه_کپچا' ),
+);
+
/** Macedonian (македонски) */
$specialPageAliases['mk'] = array(
'Captcha' => array( 'Captcha' ),
@@ -101,7 +111,7 @@ $specialPageAliases['ml'] = array(
/** Serbian (Cyrillic script) (српски (ћирилица)‎) */
$specialPageAliases['sr-ec'] = array(
- 'Captcha' => array( 'Потврдни_код' ),
+ 'Captcha' => array( 'ПотврдниКод', 'Потврдни_код' ),
);
/** Turkish (Türkçe) */
@@ -121,5 +131,5 @@ $specialPageAliases['zh-hans'] = array(
/** Traditional Chinese (中文(繁體)‎) */
$specialPageAliases['zh-hant'] = array(
- 'Captcha' => array( '驗證碼' ),
+ 'Captcha' => array( '驗證碼', '認證碼' ),
); \ No newline at end of file
diff --git a/extensions/ConfirmEdit/ConfirmEdit.i18n.php b/extensions/ConfirmEdit/ConfirmEdit.i18n.php
deleted file mode 100644
index 0d330978..00000000
--- a/extensions/ConfirmEdit/ConfirmEdit.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShimd09f930cbcb3c1f3' ) ) {
- function wfJsonI18nShimd09f930cbcb3c1f3( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/core/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShimd09f930cbcb3c1f3';
-}
diff --git a/extensions/ConfirmEdit/ConfirmEdit.php b/extensions/ConfirmEdit/ConfirmEdit.php
index c4b04821..479abb54 100644
--- a/extensions/ConfirmEdit/ConfirmEdit.php
+++ b/extensions/ConfirmEdit/ConfirmEdit.php
@@ -33,8 +33,10 @@
if ( !defined( 'MEDIAWIKI' ) ) {
exit;
}
+if ( !defined( 'MW_SUPPORTS_CONTENTHANDLER' ) ) {
+ throw Exception( 'This version of ConfirmEdit requires MediaWiki 1.21 or later' );
+}
-$wgExtensionFunctions[] = 'confirmEditSetup';
$wgExtensionCredits['antispam'][] = array(
'path' => __FILE__,
'name' => 'ConfirmEdit',
@@ -42,6 +44,7 @@ $wgExtensionCredits['antispam'][] = array(
'url' => 'https://www.mediawiki.org/wiki/Extension:ConfirmEdit',
'version' => '1.3',
'descriptionmsg' => 'captcha-desc',
+ 'license-name' => 'GPL-2.0+',
);
/**
@@ -173,12 +176,10 @@ $wgCaptchaRegexes = array();
/** Register special page */
$wgSpecialPages['Captcha'] = 'CaptchaSpecialPage';
-$wgConfirmEditIP = __DIR__;
-$wgMessagesDirs['ConfirmEdit'] = __DIR__ . '/i18n/core';
-$wgExtensionMessagesFiles['ConfirmEdit'] = "$wgConfirmEditIP/ConfirmEdit.i18n.php";
-$wgExtensionMessagesFiles['ConfirmEditAlias'] = "$wgConfirmEditIP/ConfirmEdit.alias.php";
+$wgMessagesDirs['ConfirmEdit'] = __DIR__ . '/i18n';
+$wgExtensionMessagesFiles['ConfirmEditAlias'] = __DIR__ . "/ConfirmEdit.alias.php";
-$wgHooks['EditFilterMerged'][] = 'ConfirmEditHooks::confirmEditMerged';
+$wgHooks['EditPageBeforeEditButtons'][] = 'ConfirmEditHooks::confirmEditPage';
$wgHooks['UserCreateForm'][] = 'ConfirmEditHooks::injectUserCreate';
$wgHooks['AbortNewAccount'][] = 'ConfirmEditHooks::confirmUserCreate';
$wgHooks['LoginAuthenticateAudit'][] = 'ConfirmEditHooks::triggerUserLogin';
@@ -186,33 +187,24 @@ $wgHooks['UserLoginForm'][] = 'ConfirmEditHooks::injectUserLogin';
$wgHooks['AbortLogin'][] = 'ConfirmEditHooks::confirmUserLogin';
$wgHooks['EmailUserForm'][] = 'ConfirmEditHooks::injectEmailUser';
$wgHooks['EmailUser'][] = 'ConfirmEditHooks::confirmEmailUser';
-# Register API hook
-$wgHooks['APIEditBeforeSave'][] = 'ConfirmEditHooks::confirmEditAPI';
+$wgHooks['EditPage::showEditForm:fields'][] = 'ConfirmEditHooks::showEditFormFields';
+$wgHooks['EditFilterMergedContent'][] = 'ConfirmEditHooks::confirmEditMerged';
+
+if ( !defined( 'MW_EDITFILTERMERGED_SUPPORTS_API' ) ) {
+ $wgHooks['APIEditBeforeSave'][] = 'ConfirmEditHooks::confirmEditAPI';
+}
+
$wgHooks['APIGetAllowedParams'][] = 'ConfirmEditHooks::APIGetAllowedParams';
$wgHooks['APIGetParamDescription'][] = 'ConfirmEditHooks::APIGetParamDescription';
$wgHooks['AddNewAccountApiForm'][] = 'ConfirmEditHooks::addNewAccountApiForm';
$wgHooks['AddNewAccountApiResult'][] = 'ConfirmEditHooks::addNewAccountApiResult';
+$wgHooks['UnitTestsList'][] = 'ConfirmEditHooks::onUnitTestsList';
-$wgAutoloadClasses['ConfirmEditHooks'] = "$wgConfirmEditIP/ConfirmEditHooks.php";
-$wgAutoloadClasses['SimpleCaptcha'] = "$wgConfirmEditIP/Captcha.php";
-$wgAutoloadClasses['CaptchaStore'] = "$wgConfirmEditIP/CaptchaStore.php";
-$wgAutoloadClasses['CaptchaSessionStore'] = "$wgConfirmEditIP/CaptchaStore.php";
-$wgAutoloadClasses['CaptchaCacheStore'] = "$wgConfirmEditIP/CaptchaStore.php";
-$wgAutoloadClasses['CaptchaSpecialPage'] = "$wgConfirmEditIP/ConfirmEditHooks.php";
+$wgExtensionFunctions[] = 'ConfirmEditHooks::confirmEditSetup';
-/**
- * Set up $wgWhitelistRead
- */
-function confirmEditSetup() {
- global $wgGroupPermissions, $wgCaptchaTriggers;
- if ( !$wgGroupPermissions['*']['read'] && $wgCaptchaTriggers['badlogin'] ) {
- // We need to ensure that the captcha interface is accessible
- // so that unauthenticated users can actually get in after a
- // mistaken password typing.
- global $wgWhitelistRead;
- $image = SpecialPage::getTitleFor( 'Captcha', 'image' );
- $help = SpecialPage::getTitleFor( 'Captcha', 'help' );
- $wgWhitelistRead[] = $image->getPrefixedText();
- $wgWhitelistRead[] = $help->getPrefixedText();
- }
-}
+$wgAutoloadClasses['ConfirmEditHooks'] = __DIR__ . '/includes/ConfirmEditHooks.php';
+$wgAutoloadClasses['SimpleCaptcha'] = __DIR__ . '/SimpleCaptcha/Captcha.php';
+$wgAutoloadClasses['CaptchaStore'] = __DIR__ . '/includes/CaptchaStore.php';
+$wgAutoloadClasses['CaptchaSessionStore'] = __DIR__ . '/includes/CaptchaStore.php';
+$wgAutoloadClasses['CaptchaCacheStore'] = __DIR__ . '/includes/CaptchaStore.php';
+$wgAutoloadClasses['CaptchaSpecialPage'] = __DIR__ . '/includes/specials/SpecialCaptcha.php';
diff --git a/extensions/ConfirmEdit/ConfirmEditHooks.php b/extensions/ConfirmEdit/ConfirmEditHooks.php
deleted file mode 100644
index af8b9c44..00000000
--- a/extensions/ConfirmEdit/ConfirmEditHooks.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-class ConfirmEditHooks {
- /**
- * Get the global Captcha instance
- *
- * @return SimpleCaptcha
- */
- static function getInstance() {
- global $wgCaptcha, $wgCaptchaClass;
-
- static $done = false;
-
- if ( !$done ) {
- $done = true;
- $wgCaptcha = new $wgCaptchaClass;
- }
-
- return $wgCaptcha;
- }
-
- static function confirmEditMerged( $editPage, $newtext ) {
- return self::getInstance()->confirmEditMerged( $editPage, $newtext );
- }
-
- static function confirmEditAPI( $editPage, $newtext, &$resultArr ) {
- return self::getInstance()->confirmEditAPI( $editPage, $newtext, $resultArr );
- }
-
- static function addNewAccountApiForm( $apiModule, $loginForm ) {
- return self::getInstance()->addNewAccountApiForm( $apiModule, $loginForm );
- }
-
- static function addNewAccountApiResult( $apiModule, $loginPage, &$result ) {
- return self::getInstance()->addNewAccountApiResult( $apiModule, $loginPage, $result );
- }
-
- static function injectUserCreate( &$template ) {
- return self::getInstance()->injectUserCreate( $template );
- }
-
- static function confirmUserCreate( $u, &$message, &$status = null ) {
- return self::getInstance()->confirmUserCreate( $u, $message, $status );
- }
-
- static function triggerUserLogin( $user, $password, $retval ) {
- return self::getInstance()->triggerUserLogin( $user, $password, $retval );
- }
-
- static function injectUserLogin( &$template ) {
- return self::getInstance()->injectUserLogin( $template );
- }
-
- static function confirmUserLogin( $u, $pass, &$retval ) {
- return self::getInstance()->confirmUserLogin( $u, $pass, $retval );
- }
-
- static function injectEmailUser( &$form ) {
- return self::getInstance()->injectEmailUser( $form );
- }
-
- static function confirmEmailUser( $from, $to, $subject, $text, &$error ) {
- return self::getInstance()->confirmEmailUser( $from, $to, $subject, $text, $error );
- }
-
- // Default $flags to 1 for backwards-compatible behavior
- public static function APIGetAllowedParams( &$module, &$params, $flags = 1 ) {
- return self::getInstance()->APIGetAllowedParams( $module, $params, $flags );
- }
-
- public static function APIGetParamDescription( &$module, &$desc ) {
- return self::getInstance()->APIGetParamDescription( $module, $desc );
- }
-}
-
-class CaptchaSpecialPage extends UnlistedSpecialPage {
- public function __construct() {
- parent::__construct( 'Captcha' );
- }
-
- function execute( $par ) {
- $this->setHeaders();
-
- $instance = ConfirmEditHooks::getInstance();
-
- switch( $par ) {
- case "image":
- if ( method_exists( $instance, 'showImage' ) ) {
- return $instance->showImage();
- }
- case "help":
- default:
- return $instance->showHelp();
- }
- }
-}
diff --git a/extensions/ConfirmEdit/FancyCaptcha.i18n.php b/extensions/ConfirmEdit/FancyCaptcha.i18n.php
deleted file mode 100644
index 57d54d64..00000000
--- a/extensions/ConfirmEdit/FancyCaptcha.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShimef89e87d420f1fe8' ) ) {
- function wfJsonI18nShimef89e87d420f1fe8( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/fancy/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShimef89e87d420f1fe8';
-}
diff --git a/extensions/ConfirmEdit/FancyCaptcha.php b/extensions/ConfirmEdit/FancyCaptcha.php
index 2082e604..5d5da32d 100644
--- a/extensions/ConfirmEdit/FancyCaptcha.php
+++ b/extensions/ConfirmEdit/FancyCaptcha.php
@@ -1,88 +1,2 @@
<?php
-/**
- * Experimental image-based captcha plugin, using images generated by an
- * external tool.
- *
- * Copyright (C) 2005, 2006 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Extensions
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
- exit;
-}
-
-$dir = __DIR__;
-require_once $dir . '/ConfirmEdit.php';
-$wgCaptchaClass = 'FancyCaptcha';
-
-/**
- * The name of a file backend ($wgFileBackends) to be used for storing files.
- * Defaults to FSFileBackend using $wgCaptchaDirectory as a base path.
- */
-$wgCaptchaFileBackend = '';
-
-global $wgCaptchaDirectory;
-$wgCaptchaDirectory = "$wgUploadDirectory/captcha"; // bad default :D
-
-global $wgCaptchaDirectoryLevels;
-$wgCaptchaDirectoryLevels = 0; // To break into subdirectories
-
-global $wgCaptchaSecret;
-$wgCaptchaSecret = "CHANGE_THIS_SECRET!";
-
-/**
- * By default the FancyCaptcha rotates among all available captchas.
- * Setting $wgCaptchaDeleteOnSolve to true will delete the captcha
- * files when they are correctly solved. Thus the user will need
- * something like a cron creating new thumbnails to avoid drying up.
- */
-$wgCaptchaDeleteOnSolve = false;
-
-$wgMessagesDirs['FancyCaptcha'] = __DIR__ . '/i18n/fancy';
-$wgExtensionMessagesFiles['FancyCaptcha'] = $dir . '/FancyCaptcha.i18n.php';
-$wgAutoloadClasses['FancyCaptcha'] = $dir . '/FancyCaptcha.class.php';
-
-$wgResourceModules['ext.confirmEdit.fancyCaptcha.styles'] = array(
- 'localBasePath' => $dir . '/resources',
- 'remoteExtPath' => 'ConfirmEdit/resources',
- 'targets' => array( 'mobile', 'desktop' ),
- 'styles' => 'ext.confirmEdit.fancyCaptcha.css',
-);
-
-$wgResourceModules['ext.confirmEdit.fancyCaptcha'] = array(
- 'localBasePath' => $dir . '/resources',
- 'remoteExtPath' => 'ConfirmEdit/resources',
- 'scripts' => 'ext.confirmEdit.fancyCaptcha.js',
- 'dependencies' => 'mediawiki.api',
-);
-
-// FIXME: remove, add mobile target to ext.confirmEdit.fancyCaptcha and update
-// MobileFrontend accordingly when bug 57629 is resolved
-$wgResourceModules['ext.confirmEdit.fancyCaptchaMobile'] = array(
- 'localBasePath' => $dir . '/resources',
- 'remoteExtPath' => 'ConfirmEdit/resources',
- 'scripts' => 'ext.confirmEdit.fancyCaptcha.js',
- 'targets' => array( 'mobile', 'desktop' ),
- 'dependencies' => 'mobile.startup',
-);
-
-$wgAutoloadClasses['ApiFancyCaptchaReload'] = $dir . '/ApiFancyCaptchaReload.php';
-$wgAPIModules['fancycaptchareload'] = 'ApiFancyCaptchaReload';
+require_once __DIR__ . "/FancyCaptcha/FancyCaptcha.php";
diff --git a/extensions/ConfirmEdit/FancyCaptcha.class.php b/extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.class.php
index 46387c9e..0de148c2 100644
--- a/extensions/ConfirmEdit/FancyCaptcha.class.php
+++ b/extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.class.php
@@ -90,7 +90,7 @@ class FancyCaptcha extends SimpleCaptcha {
* Insert the captcha prompt into the edit form.
*/
function getForm() {
- global $wgOut, $wgExtensionAssetsPath, $wgEnableAPI;
+ global $wgOut, $wgEnableAPI;
// Uses addModuleStyles so it is loaded when JS is disabled.
$wgOut->addModuleStyles( 'ext.confirmEdit.fancyCaptcha.styles' );
@@ -113,21 +113,21 @@ class FancyCaptcha extends SimpleCaptcha {
$captchaReload = '';
}
- return "<div class='fancycaptcha-wrapper'><div class='fancycaptcha-image-container'>" .
+ $form = Html::openElement( 'div' ) .
+ Html::element( 'label', array(
+ 'for' => 'wpCaptchaWord',
+ ),
+ parent::getMessage( 'label' ) . ' ' . wfMessage( 'createacct-captcha' )->text()
+ ) .
+ Html::openElement( 'div', array( 'class' => 'mw-createacct-captcha-container' ) ) .
+ Html::openElement( 'div', array( 'class' => 'mw-createacct-captcha-and-reload' ) ) .
+ Html::openElement( 'div', array( 'class' => 'fancycaptcha-image-container' ) ) .
Html::element( 'img', array(
'class' => 'fancycaptcha-image',
'src' => $title->getLocalUrl( 'wpCaptchaId=' . urlencode( $index ) ),
'alt' => ''
)
- ) .
- $captchaReload .
- "</div>\n" .
- '<p>' .
- Html::element( 'label', array(
- 'for' => 'wpCaptchaWord',
- ),
- parent::getMessage( 'label' ) . wfMessage( 'colon-separator' )->text()
- ) .
+ ) . $captchaReload . Html::closeElement( 'div' ) . Html::closeElement( 'div' ) . "\n" .
Html::element( 'input', array(
'name' => 'wpCaptchaWord',
'class' => 'mw-ui-input',
@@ -138,18 +138,25 @@ class FancyCaptcha extends SimpleCaptcha {
'autocorrect' => 'off',
'autocapitalize' => 'off',
'required' => 'required',
- 'tabindex' => 1
+ 'tabindex' => 1,
+ 'placeholder' => wfMessage( 'createacct-imgcaptcha-ph' )
)
- ) . // tab in before the edit textarea
- Html::element( 'input', array(
+ ); // tab in before the edit textarea
+ if ( $this->action == 'usercreate' ) {
+ $form .= HTML::element( 'small',array(
+ 'class' => 'mw-createacct-captcha-assisted'
+ ), wfMessage( 'createacct-imgcaptcha-help' )
+ );
+ }
+ $form .= Html::element( 'input', array(
'type' => 'hidden',
'name' => 'wpCaptchaId',
'id' => 'wpCaptchaId',
'value' => $index
)
- ) .
- "</p>\n" .
- "</div>\n";;
+ ) . Html::closeElement( 'div' ) . Html::closeElement( 'div' ) . "\n";
+
+ return $form;
}
/**
@@ -159,7 +166,7 @@ class FancyCaptcha extends SimpleCaptcha {
function getCaptchaIndex() {
$info = $this->pickImage();
if ( !$info ) {
- throw new MWException( "Ran out of captcha images" );
+ throw new Exception( "Ran out of captcha images" );
}
// Generate a random key for use of this captcha image in this session.
@@ -339,7 +346,7 @@ class FancyCaptcha extends SimpleCaptcha {
) )->isOK();
}
- wfHttpError( 500, 'Internal Error', 'Requested bogus captcha image' );
+ wfHttpError( 400, 'Request Error', 'Requested bogus captcha image' );
return false;
}
@@ -363,13 +370,13 @@ class FancyCaptcha extends SimpleCaptcha {
/**
* @param $basename string
* @return Array (salt, hash)
- * @throws MWException
+ * @throws Exception
*/
public function hashFromImageName( $basename ) {
if ( preg_match( '/^image_([0-9a-f]+)_([0-9a-f]+)\\.png$/', $basename, $matches ) ) {
return array( $matches[1], $matches[2] );
} else {
- throw new MWException( "Invalid filename '$basename'.\n" );
+ throw new Exception( "Invalid filename '$basename'.\n" );
}
}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.php b/extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.php
new file mode 100644
index 00000000..0ac490e0
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/FancyCaptcha.php
@@ -0,0 +1,13 @@
+<?php
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'ConfirmEdit/FancyCaptcha' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['FancyCaptcha'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for FancyCaptcha extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the FancyCaptcha extension requires MediaWiki 1.25+' );
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/extension.json b/extensions/ConfirmEdit/FancyCaptcha/extension.json
new file mode 100644
index 00000000..11b877be
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/extension.json
@@ -0,0 +1,52 @@
+{
+ "name": "FancyCaptcha",
+ "APIModules": {
+ "fancycaptchareload": "ApiFancyCaptchaReload"
+ },
+ "MessagesDirs": {
+ "FancyCaptcha": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "FancyCaptcha": "FancyCaptcha.class.php",
+ "ApiFancyCaptchaReload": "ApiFancyCaptchaReload.php"
+ },
+ "ResourceModules": {
+ "ext.confirmEdit.fancyCaptcha.styles": {
+ "position": "top",
+ "targets": [
+ "mobile",
+ "desktop"
+ ],
+ "styles": "ext.confirmEdit.fancyCaptcha.css"
+ },
+ "ext.confirmEdit.fancyCaptcha": {
+ "scripts": "ext.confirmEdit.fancyCaptcha.js",
+ "dependencies": "mediawiki.api"
+ },
+ "ext.confirmEdit.fancyCaptchaMobile": {
+ "scripts": "ext.confirmEdit.fancyCaptcha.js",
+ "targets": [
+ "mobile",
+ "desktop"
+ ],
+ "dependencies": "mobile.startup"
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "resources",
+ "remoteExtPath": "ConfirmEdit/FancyCaptcha/resources"
+ },
+ "callback": [
+ "ConfirmEditHooks::onFancyCaptchaSetup"
+ ],
+ "config": {
+ "CaptchaClass": "FancyCaptcha",
+ "CaptchaFileBackend": "",
+ "CaptchaDirectory": false,
+ "CaptchaDirectoryLevels": 0,
+ "CaptchaSecret": "CHANGE_THIS_SECRET!",
+ "CaptchaDeleteOnSolve": false
+ }
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/aeb-latn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/aeb-latn.json
new file mode 100644
index 00000000..c3f31a8e
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/aeb-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csisc"
+ ]
+ },
+ "fancycaptcha-reload-text": "Aktüyalīzī"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/af.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/af.json
new file mode 100644
index 00000000..88935feb
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/af.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Naudefj"
+ ]
+ },
+ "fancycaptcha-reload-text": "Verfris"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/aln.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/aln.json
index 2430336b..2430336b 100644
--- a/extensions/ConfirmEdit/i18n/fancy/aln.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/aln.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/am.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/am.json
index 973f976c..973f976c 100644
--- a/extensions/ConfirmEdit/i18n/fancy/am.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/am.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/an.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/an.json
index d8f46bba..d8f46bba 100644
--- a/extensions/ConfirmEdit/i18n/fancy/an.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/an.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ang.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ang.json
new file mode 100644
index 00000000..4d85b59b
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ang.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gott wisst"
+ ]
+ },
+ "fancycaptcha-reload-text": "Ednīwian"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ar.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ar.json
new file mode 100644
index 00000000..d2002fdb
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ar.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aiman titi",
+ "Asaifm",
+ "Meno25",
+ "Abanima"
+ ]
+ },
+ "fancycaptcha-desc": "مولد فانسي كابتشا لConfirm Edit",
+ "fancycaptcha-addurl": "تعديلك يتضمن وصلات خارجية جديدة.\nللحماية من السخام الأوتوماتيكي، من فضلك أدخل الكلمات التي تظهر بالأسفل في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):",
+ "fancycaptcha-badlogin": "للمساعدة في الحماية ضد سرقة كلمات السر، من فضلك أدخل الكلمات التي تظهر أدناه في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):",
+ "fancycaptcha-createaccount": "للمساعدة في منع إنشاء حسابات بطريقة أوتوماتيكية، قم من فضلك بإدخال الكلمات التي تظهر أدناه في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):",
+ "fancycaptcha-create": "لإنشاء الصفحة، من فضلك أدخل الكلمات التي تظهر بالأسفل في الصندوق\n([[Special:Captcha/help|مزيد من المعلومات]]):",
+ "fancycaptcha-edit": "لتعديل هذه الصفحة، من فضلك أدخل الكلمات التي تظهر بالأسفل في الصندوق\n([[Special:Captcha/help|مزيد من المعلومات]]):",
+ "fancycaptcha-sendemail": "للمساعدة في منع إنشاء حسابات بطريقة أوتوماتيكية، قم من فضلك بإدخال الكلمات التي تظهر أدناه في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):",
+ "fancycaptcha-reload-text": "تحديث",
+ "apihelp-fancycaptchareload-description": "احصل على FancyCaptcha جديدة.",
+ "apihelp-fancycaptchareload-example-1": "احصل على FancyCaptcha جديدة."
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/arq.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/arq.json
new file mode 100644
index 00000000..8551a435
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/arq.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Oldstoneage"
+ ]
+ },
+ "fancycaptcha-createaccount": "باش نحافظو على الويكي من الحسابات الّي ينخلقو من عند نواضم داتيّة، نطلبو منّك باش تنقل فل قبيسة هنا، الكلمة المكتوبة لتحت. ([[Special:Captcha/help|زيد شوف شي معلومات]]):",
+ "fancycaptcha-reload-text": "عاود شارجي الصفحة"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/arz.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/arz.json
index 7cb6dd5d..7cb6dd5d 100644
--- a/extensions/ConfirmEdit/i18n/fancy/arz.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/arz.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/as.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/as.json
new file mode 100644
index 00000000..ad83d857
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/as.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chaipau",
+ "Gitartha.bordoloi",
+ "Rajuonline",
+ "IKHazarika"
+ ]
+ },
+ "fancycaptcha-addurl": "আপোনাৰ সম্পাদনাত বাহ্যিক সংযোগ আছে।\nস্বয়ংক্ৰীয় সম্পাদনাৰ পৰা হাত সাৰিবলৈ, তলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখক। ([[Special:Captcha/help|অধিক তথ্য]]):",
+ "fancycaptcha-badlogin": "স্বয়ংক্ৰীয় গুপ্তশব্দ চুৰিৰ পৰা হাত সাৰিবলৈ,\nতলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখক। ([[Special:Captcha/help|অধিক তথ্য]]):",
+ "fancycaptcha-createaccount": "স্বয়ংক্ৰীয় নতুন সদস্যভুক্তিৰ পৰা হাত সাৰিবলৈ, আমি আপুনাক অনুগ্ৰহ কৰি তলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখিবলৈ অনুৰোধ কৰিছো। ([[Special:Captcha/help|অধিক তথ্য]]):",
+ "fancycaptcha-create": "পৃষ্ঠাটো বনাবলৈ, তলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখক। ([[Special:Captcha/help|অধিক তথ্য]]):",
+ "fancycaptcha-edit": "এই পৃষ্ঠাটো সম্পাদনা কৰিবলৈ, তলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখক। ([[Special:Captcha/help|অধিক তথ্য]]):",
+ "fancycaptcha-sendemail": "স্বয়ংক্ৰিয় স্পেমিঙৰ পৰা বাচিবলৈ অনুগ্ৰহ কৰি তলৰ বাকছটোৰ তলত ওলোৱা আখৰকেইটা লিখক ([[Special:Captcha/help|অধিক তথ্য]]):",
+ "fancycaptcha-reload-text": "ৰিফ্ৰেচ"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ast.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ast.json
index b3cd7520..b3cd7520 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ast.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ast.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/awa.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/awa.json
new file mode 100644
index 00000000..25e09d0d
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/awa.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "fancycaptcha-createaccount": "स्वचालित सदस्य पंजीकरण से बचाव के लिये हम आपसे निवेदन करते हैं की नीचे दिये शब्द बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "fancycaptcha-reload-text": "रिफ़्रेश"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/az.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/az.json
new file mode 100644
index 00000000..d7405a71
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/az.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dağlı95"
+ ]
+ },
+ "fancycaptcha-createaccount": "Vikidə avtomatik hesab yaradılmasının qarşısını almaq üçün xahiş edirik tələb olunan sözləri daxil edin ([[Special:Captcha/help|ətraflı məlumat]]):",
+ "fancycaptcha-reload-text": "Yenilə"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/azb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/azb.json
new file mode 100644
index 00000000..3982b445
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/azb.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amir a57"
+ ]
+ },
+ "fancycaptcha-createaccount": "ایشلدن حسابین اوتمات صورتینده آچیلماماسی اوچون بیز سیزدن احتراملا ایستیریک شکیل ده گورونن سوزو آشاغی دا گورونن قوتودا آرتیراسیز([[Special:Captcha/help|آرتیق بیلگی]]):",
+ "fancycaptcha-reload-text": "یئنیله"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ba.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ba.json
index d02714fe..d02714fe 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ba.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ba.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/bcc.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/bcc.json
index 66a80cb8..66a80cb8 100644
--- a/extensions/ConfirmEdit/i18n/fancy/bcc.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/bcc.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/bcl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/bcl.json
index c0ffb9b0..c0ffb9b0 100644
--- a/extensions/ConfirmEdit/i18n/fancy/bcl.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/bcl.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/be-tarask.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/be-tarask.json
index 79cfc520..79cfc520 100644
--- a/extensions/ConfirmEdit/i18n/fancy/be-tarask.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/be-tarask.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/be.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/be.json
new file mode 100644
index 00000000..cc74bb3e
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/be.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Чаховіч Уладзіслаў"
+ ]
+ },
+ "fancycaptcha-createaccount": "Для прадухілення аўтаматычнай рэгістрацыі ўліковых запісаў просім вас увесці словы, паказаныя ў полі ніжэй ([[Special:Captcha/help|падрабязней…]]):",
+ "fancycaptcha-reload-text": "Абнавіць"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/bg.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/bg.json
new file mode 100644
index 00000000..53e8d98c
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/bg.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borislav",
+ "DCLXVI"
+ ]
+ },
+ "fancycaptcha-addurl": "Текущата редакция включва нови външни препратки. Като защита от автоматизиран спам, системата изисква от потребителите да въведат думите, показани по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
+ "fancycaptcha-badlogin": "Като защита срещу опити за налучкване на паролата ви, моля, въведете буквите, които виждате на картинката ([[Special:Captcha/help|повече информация]]):",
+ "fancycaptcha-createaccount": "Системата за защита от автоматично създаване на потребителски сметки изисква да въведете това, което виждате в кутията по-долу ([[Special:Captcha/help|повече информация]]):",
+ "fancycaptcha-create": "За създаване на страницата е необходимо да се въведат думите от картинката в полето по-долу ([[Special:Captcha/help|повече информация]]):",
+ "fancycaptcha-edit": "За редактиране на страницата е необходимо да се въведат думите от картинката в полето по-долу ([[Special:Captcha/help|повече информация]]):",
+ "fancycaptcha-sendemail": "Като защита срещу автоматизиран спам, въведете в кутията думите, които са показани по-долу ([[Special:Captcha/help|повече информация]]):",
+ "fancycaptcha-reload-text": "Опресняване"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/bgn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/bgn.json
new file mode 100644
index 00000000..afcfa92b
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/bgn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "fancycaptcha-createaccount": "په کومک شه اوتوماتیکین کار زوروکئ حساب ئی جۆڑ بوتینی خاتیرا، هما شه شما په باز احترام لوٹن که همی کلمه ئانه که اکس ئی تا گیندیت بئ جهلگین جئبه تا داخل بکنیت ([[Special:Captcha/help|گیشتیرین مئلومات]]):",
+ "fancycaptcha-reload-text": "نوک کورتین"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/bn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/bn.json
new file mode 100644
index 00000000..ec2c240f
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/bn.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nasir8891",
+ "Zaheen",
+ "Aftabuzzaman"
+ ]
+ },
+ "fancycaptcha-addurl": "আপনার সম্পাদনাটিতে নতুন বহিঃসংযোগ আছে। স্বয়ংক্রিয় স্প্যামের বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
+ "fancycaptcha-badlogin": "স্বয়ংক্রিয় শব্দচাবি ক্র্যাকিং-এর বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
+ "fancycaptcha-createaccount": "স্বয়ংক্রিয় অ্যাকাউন্ট সৃষ্টির বিরুদ্ধে উইকি রক্ষা করার জন্য, আমরা আপনাকে নীচের বাক্সে প্রদর্শিত শব্দসমূহ লেখার জন্য অনুরোধ জানাচ্ছি ([[Special:Captcha/help|আরও তথ্য]]):",
+ "fancycaptcha-create": "পাতাটি সৃষ্টি করতে চাইলে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
+ "fancycaptcha-edit": "পাতাটি সম্পাদনা করতে চাইলে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান\n([[Special:Captcha/help|আরও তথ্য]]):",
+ "fancycaptcha-sendemail": "স্বয়ংক্রিয় স্প্যামিং এর বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
+ "fancycaptcha-reload-text": "পুনঃসতেজ"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/br.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/br.json
index 8f6c7c7c..8f6c7c7c 100644
--- a/extensions/ConfirmEdit/i18n/fancy/br.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/br.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/bs.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/bs.json
index 4c82c2c2..4c82c2c2 100644
--- a/extensions/ConfirmEdit/i18n/fancy/bs.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/bs.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ca.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ca.json
new file mode 100644
index 00000000..b7dcd820
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ca.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Davidpar",
+ "SMP",
+ "Ssola",
+ "Joan manel"
+ ]
+ },
+ "fancycaptcha-addurl": "La vostra modificació inclou nous enllaços externs. Com a protecció contra la propaganda automatitzada heu d'escriure en la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
+ "fancycaptcha-badlogin": "Com a protecció contra l'obtenció automatitzada de contrasenyes cal que escriviu en la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
+ "fancycaptcha-createaccount": "Com a protecció contra la creació automàtica de nous comptes cal que escriviu a la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
+ "fancycaptcha-create": "Per a poder crear la pàgina heu d'escriure en la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
+ "fancycaptcha-edit": "Per a poder modificar la pàgina heu d'escriure en la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
+ "fancycaptcha-sendemail": "Per ajudar a protegir contra el correu brossa automatitzat, si us plau, introduïu les paraules que apareixen a sota la caixa ([[Special:Captcha/help|més informació]]):",
+ "fancycaptcha-reload-text": "Actualitzar"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/cdo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/cdo.json
new file mode 100644
index 00000000..f8f8eb76
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/cdo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yejianfei"
+ ]
+ },
+ "fancycaptcha-badlogin": "為𡅏保護維基百科免受自動化其密碼破解,儂家誠摯其起動汝輸底下底方框底裡其驗證碼([[Special:Captcha/help|更価信息]]):"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ce.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ce.json
index 9579fc91..9579fc91 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ce.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ce.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/ckb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ckb.json
index 6d529037..6d529037 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ckb.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ckb.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/cs.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/cs.json
new file mode 100644
index 00000000..3df69d8c
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/cs.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mormegil",
+ "Tchoř"
+ ]
+ },
+ "fancycaptcha-desc": "Pokročilý generátor captcha pro rozšíření „Confirm Edit“",
+ "fancycaptcha-addurl": "Vaše editace obsahuje nové odkazy formou URL.\nAbychom wiki ochránili před automatizovaným spamováním, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):",
+ "fancycaptcha-badlogin": "Abychom wiki ochránili proti automatizovaným pokusům uhodnout heslo, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):",
+ "fancycaptcha-createaccount": "Abychom wiki ochránili proti automatizovanému zakládání účtů, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):",
+ "fancycaptcha-create": "Abyste mohli založit stránku, musíte opsat text z následujícího obrázku: ([[Special:Captcha/help|Co tohle znamená?]])",
+ "fancycaptcha-edit": "Abyste mohli editovat tuto stránku, musíte opsat text z následujícího obrázku: ([[Special:Captcha/help|Co tohle znamená?]])",
+ "fancycaptcha-sendemail": "Abychom wiki ochránili proti automatizovanému spamování, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):",
+ "fancycaptcha-reload-text": "Vygenerovat nový kód",
+ "apihelp-fancycaptchareload-description": "Získat novou FancyCaptcha.",
+ "apihelp-fancycaptchareload-example-1": "Získat novou FancyCaptcha."
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/cu.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/cu.json
index 4bcd380c..4bcd380c 100644
--- a/extensions/ConfirmEdit/i18n/fancy/cu.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/cu.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/cv.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/cv.json
new file mode 100644
index 00000000..94e0bdac
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/cv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chuvash2014"
+ ]
+ },
+ "fancycaptcha-reload-text": "Çĕнет"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/cy.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/cy.json
index 3f420aab..3f420aab 100644
--- a/extensions/ConfirmEdit/i18n/fancy/cy.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/cy.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/da.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/da.json
index 62ef9fe3..62ef9fe3 100644
--- a/extensions/ConfirmEdit/i18n/fancy/da.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/da.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/de-formal.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/de-formal.json
index e95ae6a9..e95ae6a9 100644
--- a/extensions/ConfirmEdit/i18n/fancy/de-formal.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/de-formal.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/de.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/de.json
new file mode 100644
index 00000000..b5e154c6
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/de.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Metalhead64",
+ "Raimond Spekking",
+ "Umherirrender"
+ ]
+ },
+ "fancycaptcha-desc": "Fancy-CAPTCHA-Generator für die Erweiterung „Confirm Edit“",
+ "fancycaptcha-addurl": "Deine Bearbeitung enthält neue externe Links.\nZum Schutz des Wikis vor automatisiertem Spamming bitten wir dich, das folgende Wort in das Feld unten einzugeben. Klicke dann erneut auf „Seite speichern“ ([[Special:Captcha/help|Fragen oder Probleme?]]).",
+ "fancycaptcha-badlogin": "Zum Schutz des Wikis vor einer Kompromittierung deines Benutzerkontos bitten wir dich, das folgende Wort in das Feld unten einzugeben [[Special:Captcha/help|(Fragen oder Probleme?)]]:",
+ "fancycaptcha-createaccount": "Zum Schutz des Wikis vor automatisierter Anlage von Benutzerkonten bitten wir dich, das folgende Wort in das Feld unten einzugeben ([[Special:Captcha/help|Fragen oder Probleme?]]):",
+ "fancycaptcha-create": "Zur Erstellung der Seite gib das folgende Wort in das Feld unten ein [[Special:Captcha/help|(Fragen oder Probleme?)]].",
+ "fancycaptcha-edit": "Zur Bearbeitung der Seite gib das folgende Wort in das Feld unten ein [[Special:Captcha/help|(Fragen oder Probleme?)]].",
+ "fancycaptcha-sendemail": "Zum Schutz des Wikis vor automatischem Spamming bitten wir dich, die Wörter unten in das Feld einzugeben ([[Special:Captcha/help|mehr Informationen]]):",
+ "fancycaptcha-reload-text": "Aktualisieren",
+ "apihelp-fancycaptchareload-description": "Ruft ein neues FancyCaptcha ab.",
+ "apihelp-fancycaptchareload-example-1": "Ruft ein neues FancyCaptcha ab."
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/diq.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/diq.json
index 18e9c46d..18e9c46d 100644
--- a/extensions/ConfirmEdit/i18n/fancy/diq.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/diq.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/dsb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/dsb.json
index 80004969..80004969 100644
--- a/extensions/ConfirmEdit/i18n/fancy/dsb.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/dsb.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/el.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/el.json
new file mode 100644
index 00000000..4ad1ab9b
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/el.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Badseed",
+ "Consta",
+ "Geraki",
+ "Glavkos",
+ "ZaDiak",
+ "Evropi"
+ ]
+ },
+ "fancycaptcha-addurl": "Η επεξεργασία σας περιλαμβάνει νέους εξωτερικούς σύνδεσμους.\nΩς βοήθεια για την προστασία από αυτόματα spam, παρακαλούμε γράψτε τις λέξεις που εμφανίζονται παρακάτω στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "fancycaptcha-badlogin": "Ως βοήθεια για την προστασία από αυτόματα προγράμματα σπασίματος κωδικών, παρακαλούμε γράψτε τις λέξεις που εμφανίζονται παρακάτω στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "fancycaptcha-createaccount": "Για την προστασία του wiki ενάντια σε αυτοματοποιημένη δημιουργία λογαριασμών, σας παρακαλούμε ευγενικά να εισάγετε τις λέξεις που εμφανίζονται κάτω από το πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "fancycaptcha-create": "Για να δημιουργήσετε αυτήν την σελίδα, παρακαλώ εισάγετε τις λέξεις που εμφανίζονται παρακάτω μέσα στο κουτί\n([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "fancycaptcha-edit": "Για να επεξεργαστείτε αυτήν την σελίδα, παρακαλώ εισάγετε τις λέξεις που εμφανίζονται παρακάτω μέσα στο κουτί\n([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "fancycaptcha-sendemail": "Ως βοήθεια για την προστασία από αυτόματα προγράμματα σπασίματος κωδικών, παρακαλούμε γράψτε τις λέξεις που εμφανίζονται παρακάτω στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "fancycaptcha-reload-text": "Ανανέωση"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/en.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/en.json
new file mode 100644
index 00000000..4fd10cd6
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/en.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": []
+ },
+ "fancycaptcha-desc": "Fancy CAPTCHA generator for Confirm Edit",
+ "fancycaptcha-addurl": "Your edit includes new external links.\nTo protect the wiki against automated spam, we kindly ask you to enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
+ "fancycaptcha-badlogin": "To protect the wiki against automated password cracking, we kindly ask you to enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
+ "fancycaptcha-createaccount": "To protect the wiki against automated account creation, we kindly ask you to enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
+ "fancycaptcha-create": "To create the page, please enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
+ "fancycaptcha-edit": "To edit this page, please enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
+ "fancycaptcha-sendemail": "To protect the wiki against automated spamming, we kindly ask you to enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
+ "fancycaptcha-reload-text": "Refresh",
+ "apihelp-fancycaptchareload-description": "Get a new FancyCaptcha.",
+ "apihelp-fancycaptchareload-example-1": "Get a new FancyCaptcha"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/eo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/eo.json
index f0c2f321..f0c2f321 100644
--- a/extensions/ConfirmEdit/i18n/fancy/eo.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/eo.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/es.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/es.json
new file mode 100644
index 00000000..035e9ca5
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/es.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Carlosz22",
+ "Fitoschido",
+ "Icvav",
+ "Pertile",
+ "Sanbec",
+ "Sporeunai",
+ "Macofe"
+ ]
+ },
+ "fancycaptcha-addurl": "Tu edición incluye nuevos enlaces externos. \nPara protegernos contra el spam automatizado, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):",
+ "fancycaptcha-badlogin": "Para proteger el wiki del descifrado de contraseñas automatizado, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):",
+ "fancycaptcha-createaccount": "Para proteger el wiki contra la creación automática de cuentas, te pedimos amablemente que escribas en la caja las palabras que se muestran debajo ([[Special:Captcha/help|más información]]):",
+ "fancycaptcha-create": "Para crear la página, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):",
+ "fancycaptcha-edit": "Para editar esta página, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):",
+ "fancycaptcha-sendemail": "Para proteger el wiki del descifrado de contraseñas automatizado, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):",
+ "fancycaptcha-reload-text": "Actualizar"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/et.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/et.json
index 0b88b3b1..0b88b3b1 100644
--- a/extensions/ConfirmEdit/i18n/fancy/et.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/et.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/eu.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/eu.json
new file mode 100644
index 00000000..ddac654b
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/eu.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "An13sa",
+ "Xabier Armendaritz",
+ "Sator"
+ ]
+ },
+ "fancycaptcha-addurl": "Zure aldaketak kanpo lotura berriak ditu. Spam automatikoa saihestu ahal izateko, beheko koadroan ageri diren hitzak idatzi ([[Special:Captcha/help|informazio gehigarria]]):",
+ "fancycaptcha-badlogin": "Pasahitzen cracking automatikoa saihestu asmoz, beheko koadroan ageri diren hitzak idazteko eskatzen dizugu ([[Special:Captcha/help|informazio gehigarria]]):",
+ "fancycaptcha-createaccount": "Erabiltzaile kontuak automatikoki sortzea saihestu asmoz, beheko koadroan ageri diren hitzak idazteko eskatzen dizugu ([[Special:Captcha/help|informazio gehigarria]]):",
+ "fancycaptcha-create": "Orri sortu ahal izateko, idatz itzazu beheko koadroan ageri diren hitzak ([[Special:Captcha/help|informazio gehigarria]]):",
+ "fancycaptcha-edit": "Orrialde hau aldatu ahal izateko, beheko koadroan ageri diren hitzak idatzi ([[Special:Captcha/help|informazio gehigarria]]):",
+ "fancycaptcha-sendemail": "Zabor-posta automatizatuaz babesteko, idatzi azpiko kutxako hitzak ([[Special:Captcha/help|informazio gehiago]]):",
+ "fancycaptcha-reload-text": "Eguneratu"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/fa.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/fa.json
index 52b23336..52b23336 100644
--- a/extensions/ConfirmEdit/i18n/fancy/fa.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/fa.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/fi.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/fi.json
new file mode 100644
index 00000000..596c30c0
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/fi.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crt",
+ "Nike",
+ "Nedergard",
+ "Stryn",
+ "McSalama"
+ ]
+ },
+ "fancycaptcha-addurl": "Muokkauksesi sisältää uusia linkkejä muille sivuille. Kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
+ "fancycaptcha-badlogin": "Automatisoidun salasanan murtamisen estämiseksi kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
+ "fancycaptcha-createaccount": "Suojellaksemme wikiä automaattisilta rekisteröitymisiltä pyydämme sinua kirjoittamaan kuvassa näkyvät kirjaimet alla olevaan laatikkoon. ([[Special:Captcha/help|lisätietoja]]):",
+ "fancycaptcha-create": "Muokkauksesi sisältää uusia linkkejä muille sivuille. Kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
+ "fancycaptcha-edit": "Muokkauksesi sisältää uusia linkkejä muille sivuille. Kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
+ "fancycaptcha-sendemail": "Automatisoidun roskapostin lähettämisen vaikeuttamiseksi kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
+ "fancycaptcha-reload-text": "Vaihda"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/fo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/fo.json
index d44078d6..d44078d6 100644
--- a/extensions/ConfirmEdit/i18n/fancy/fo.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/fo.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/fr.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/fr.json
new file mode 100644
index 00000000..e59fa924
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/fr.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Crochet.david",
+ "Gomoko",
+ "IAlex",
+ "Metroitendo",
+ "Sherbrooke",
+ "Urhixidur",
+ "Verdy p"
+ ]
+ },
+ "fancycaptcha-desc": "Générateur d’images ''captcha'' anti-robots demandant une confirmation humaine des modifications.",
+ "fancycaptcha-addurl": "Votre modification inclut de nouveaux liens externes.\nPour protéger le wiki contre les pourriels automatisés, nous vous demandons de bien vouloir entrer les mots qui apparaissent dans la boîte ([[Special:Captcha/help|plus d’informations]]) :",
+ "fancycaptcha-badlogin": "Pour protéger le wiki contre le cassage des mots de passe par des automates, nous vous demandons de bien vouloir entrer les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :",
+ "fancycaptcha-createaccount": "Pour protéger le wiki contre les créations automatiques de comptes, nous vous demandons de bien vouloir entrer les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :",
+ "fancycaptcha-create": "Pour créer la page, veuillez entrer les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha|plus d’informations]]) :",
+ "fancycaptcha-edit": "Pour modifier cette page, veuillez saisir les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha/help|plus d’information]]) :",
+ "fancycaptcha-sendemail": "Pour protéger le wiki contre l’envoi automatisé de pourriels, nous vous demandons de bien vouloir entrer les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :",
+ "fancycaptcha-reload-text": "Actualiser",
+ "apihelp-fancycaptchareload-description": "Obtenir un nouveau FancyCaptcha.",
+ "apihelp-fancycaptchareload-example-1": "Obtenir un nouveau FancyCaptcha"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/frp.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/frp.json
index 763f7f96..763f7f96 100644
--- a/extensions/ConfirmEdit/i18n/fancy/frp.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/frp.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/frr.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/frr.json
new file mode 100644
index 00000000..62f8e841
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/frr.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Murma174"
+ ]
+ },
+ "fancycaptcha-createaccount": "Amdat diar nian automaatisk konten iinracht wurd, wees so gud an skriiw jodiar wurden oner iin uun det kasche ([[Special:Captcha/help|Muar diartu]]):",
+ "fancycaptcha-reload-text": "Nei loose"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/fy.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/fy.json
index f2441b1b..f2441b1b 100644
--- a/extensions/ConfirmEdit/i18n/fancy/fy.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/fy.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/ga.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ga.json
index 6a89475e..6a89475e 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ga.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ga.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/gl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/gl.json
new file mode 100644
index 00000000..ef8e0392
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/gl.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Toliño",
+ "Xosé",
+ "Banjo"
+ ]
+ },
+ "fancycaptcha-desc": "Xerador de imaxes CAPTCHA para Confirm Edit",
+ "fancycaptcha-addurl": "A súa edición inclúe novas ligazóns externas.\nPara protexer o wiki contra o spam automático, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
+ "fancycaptcha-badlogin": "Para protexer o wiki contra o roubo de contrasinais, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
+ "fancycaptcha-createaccount": "Para protexer o wiki contra a creación automática de contas, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
+ "fancycaptcha-create": "Para crear a páxina, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
+ "fancycaptcha-edit": "Para editar esta páxina, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
+ "fancycaptcha-sendemail": "Para protexer o wiki contra o spam automático, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
+ "fancycaptcha-reload-text": "Refrescar",
+ "apihelp-fancycaptchareload-description": "Novo FancyCaptcha.",
+ "apihelp-fancycaptchareload-example-1": "Novo FancyCaptcha"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-deva.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-deva.json
new file mode 100644
index 00000000..72b667b7
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/gom-deva.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Darshan kandolkar"
+ ]
+ },
+ "fancycaptcha-reload-text": "ताजें करात"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/gsw.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/gsw.json
index 2c27d4ae..2c27d4ae 100644
--- a/extensions/ConfirmEdit/i18n/fancy/gsw.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/gsw.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/gu.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/gu.json
index 03c46f94..03c46f94 100644
--- a/extensions/ConfirmEdit/i18n/fancy/gu.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/gu.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/he.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/he.json
new file mode 100644
index 00000000..22b66574
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/he.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Rotem Liss",
+ "Guycn2"
+ ]
+ },
+ "fancycaptcha-desc": "מחולל תמונות CAPTCHA מגניבות בשביל ההרבחבה Confirm Edit",
+ "fancycaptcha-addurl": "עריכתך כוללת קישורים חיצוניים חדשים.\nכהגנה מפני ספאם אוטומטי, נא להקליד את המילים המופיעות בתיבה שלהלן ([[Special:Captcha/help|מידע נוסף]]):",
+ "fancycaptcha-badlogin": "כהגנה מפני פריצת סיסמאות אוטומטית, נא להקליד את המילים המופיעות בתיבה שלהלן ([[Special:Captcha/help|מידע נוסף]]):",
+ "fancycaptcha-createaccount": "כהגנה מפני יצירת חשבונות אוטומטית, נא להקליד את המילים המופיעות בתיבה שלהלן ([[Special:Captcha/help|מידע נוסף]]):",
+ "fancycaptcha-create": "כדי ליצור את הדף, נא להקליד את המילים המופיעות בתיבה שלהלן ([[Special:Captcha/help|מידע נוסף]]):",
+ "fancycaptcha-edit": "כדי לערוך את הדף, נא להקליד את המילים המופיעות בתיבה שלהלן ([[Special:Captcha/help|מידע נוסף]]):",
+ "fancycaptcha-sendemail": "כהגנה מפני ספאם אוטומטי, נא להקליד את המילים המופיעות בתיבה שלהלן ([[Special:Captcha/help|מידע נוסף]]):",
+ "fancycaptcha-reload-text": "רענון"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/hi.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/hi.json
new file mode 100644
index 00000000..3dc47f3b
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/hi.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaustubh",
+ "Siddhartha Ghai"
+ ]
+ },
+ "fancycaptcha-addurl": "आपके सम्पादन में नई बाहरी कड़ियाँ हैं।\nस्वचालित स्पॅम से बचाव में सहायता के लिये नीचे दिये हुए शब्द बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "fancycaptcha-badlogin": "स्वचालित कूटशब्द चोरी से बचाव में सहायता के लिये नीचे दिये हुए शब्द बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "fancycaptcha-createaccount": "स्वचालित सदस्य पंजीकरण से बचाव के लिये हम आपसे निवेदन करते हैं की नीचे दिये शब्द बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "fancycaptcha-create": "यह पृष्ठ बनाने के लिये कृपया नीचे दिये शब्द बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "fancycaptcha-edit": "यह पृष्ठ बदलने के लिये, नीचे दिखने वाले अक्षर टेक्स्ट बक्सेमें लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "fancycaptcha-reload-text": "रिफ़्रेश"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/hr.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/hr.json
new file mode 100644
index 00000000..dc73a791
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/hr.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "SpeedyGonsales",
+ "MaGa",
+ "Roberta F."
+ ]
+ },
+ "fancycaptcha-addurl": "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama,\nmolimo unesite slova koja vidite na slici dolje: ([[Special:Captcha/help|Pomoć]])",
+ "fancycaptcha-badlogin": "Da se spriječi automatiziranje pogađanja lozinki, molimo unesite\nslova koja vidite na slici dolje: <br />([[Special:Captcha/help|Pomoć]])",
+ "fancycaptcha-createaccount": "Kao zaštitu wiki od automatskog otvaranja računa, pri otvaranju računa ljubazno Vas molimo upišite slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć]])",
+ "fancycaptcha-create": "Da bi stvorili novu stranicu, molimo unesite\nslova koja vidite na slici dolje: <br />([[Special:Captcha/help|Pomoć]])",
+ "fancycaptcha-edit": "Da bi uređivali ovu stranicu, molimo unesite slova koja vidite na slici dolje: <br />([[Special:Captcha/help|Pomoć]])",
+ "fancycaptcha-sendemail": "Da bi ste nam pomogli protiv automatskog spama, molimo unesite riječi koje su prikazane ispod u okvir ([[Special:Captcha/help|više informacija]]):",
+ "fancycaptcha-reload-text": "Učitaj ponovno"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/hsb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/hsb.json
index a45c3bb1..a45c3bb1 100644
--- a/extensions/ConfirmEdit/i18n/fancy/hsb.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/hsb.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ht.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ht.json
new file mode 100644
index 00000000..f94e1e83
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ht.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tisave"
+ ]
+ },
+ "fancycaptcha-createaccount": "Pou anpeche ke kont kreye otomatikman wou wiki, n ap mande ou tanpri souple ekri mo yo ki parèt nan bwat la ([[Special:Captcha/help|more info]]):"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/hu.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/hu.json
new file mode 100644
index 00000000..37823945
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/hu.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Adam78",
+ "Dorgan",
+ "Glanthor Reviol",
+ "Dj"
+ ]
+ },
+ "fancycaptcha-addurl": "A szerkesztésed új külső hivatkozásokat tartalmaz. Az automatizált spamek megelőzése miatt kérjük, hogy add meg a lenti keretben olvasható szavakat ([[Special:Captcha/help|további segítség]]):",
+ "fancycaptcha-badlogin": "Hogy az automatizált jelszópróbálkozásokat megelőzzük, kérjük, hogy add meg a lenti keretben olvasható szavakat ([[Special:Captcha/help|további segítség]]):",
+ "fancycaptcha-createaccount": "A felhasználói fiókok automatizált létrehozásának elkerülésére, kérlek, írd be az alább megjelenő szót a szövegdobozba ([[Special:Captcha/help|segítség]]):",
+ "fancycaptcha-create": "A lap létrehozásához kérjük, hogy add meg a lenti keretben olvasható szavakat ([[Special:Captcha/help|további segítség]]):",
+ "fancycaptcha-edit": "A szerkesztésed új külső linkeket tartalmaz. A spam-robotok elleni védekezés elősegítésére kérlek írd be az alább megjelenő szót a szövegdobozba ([[Special:Captcha/help|segítség]]):",
+ "fancycaptcha-sendemail": "Hogy segíts az automatikus spammelés elleni védekezésben, kérünk írd be az alábbi szavakat a szövegdobozba ([[Special:Captcha/help|segítség]]):",
+ "fancycaptcha-reload-text": "Frissítés"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/hy.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/hy.json
new file mode 100644
index 00000000..2df395fd
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/hy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xelgen"
+ ]
+ },
+ "fancycaptcha-reload-text": "Մեկ այլ"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ia.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ia.json
index 2b644971..2b644971 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ia.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ia.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/id.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/id.json
new file mode 100644
index 00000000..99128aec
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/id.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bennylin",
+ "IvanLanin",
+ "Iwan Novirion"
+ ]
+ },
+ "fancycaptcha-addurl": "Suntingan Anda mencantumkan pranala luar baru. Untuk pelindungan terhadap spam otomatis, harap masukkan kata di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
+ "fancycaptcha-badlogin": "Sebagai pelindungan terhadap pemecah kata kunci otomatis, harap masukkan kata di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
+ "fancycaptcha-createaccount": "Untuk melindungi wiki terhadap pembuatan akun otomatis, kami mohon Anda masukkan kata di bawah ini ke dalam kotak yang disediakan ([[Special:Captcha/help|info lengkap]]):",
+ "fancycaptcha-create": "Untuk membuat halaman, silahkan masukkan kata-kata yang muncul di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
+ "fancycaptcha-edit": "Untuk menyunting halaman ini, silahkan masukkan kata-kata yang muncul di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
+ "fancycaptcha-sendemail": "Sebagai pelindungan terhadap spam otomatis, silahkan masukkan kata-kata yang muncul di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
+ "fancycaptcha-reload-text": "Perbaharui"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ilo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ilo.json
index 5c4e1ea6..5c4e1ea6 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ilo.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ilo.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/is.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/is.json
index 515eb00f..515eb00f 100644
--- a/extensions/ConfirmEdit/i18n/fancy/is.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/is.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/it.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/it.json
new file mode 100644
index 00000000..a6a1546a
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/it.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "BrokenArrow",
+ "Darth Kule",
+ "Nemo bis",
+ "Lucas2",
+ "Gianfranco"
+ ]
+ },
+ "fancycaptcha-addurl": "La modifica richiesta aggiunge dei collegamenti esterni alla pagina; come misura precauzionale contro l'inserimento automatico di spam, ti chiediamo gentilmente di inserire nella casella sottostante le parole che compaiono di seguito ([[Special:Captcha/help|come funziona?]]):",
+ "fancycaptcha-badlogin": "Come misura precauzionale contro i tentativi di forzatura automatica della password, ti chiediamo gentilmente di inserire nella casella sottostante le parole che compaiono di seguito ([[Special:Captcha/help|come funziona?]]):",
+ "fancycaptcha-createaccount": "Come misura precauzionale contro i tentativi di registrazione automatica, ti chiediamo gentilmente di inserire nella casella sottostante le parole che compaiono di seguito ([[Special:Captcha/help|come funziona?]]):",
+ "fancycaptcha-create": "Per creare la pagina si prega di inserire nella casella sottostante le parole che compaiono nella casella di seguito ([[Special:Captcha/help|come funziona?]]):",
+ "fancycaptcha-edit": "Per modificare questa pagina si prega di inserire nella casella le parole che compaiono di seguito ([[Special:Captcha/help|informazioni]]):",
+ "fancycaptcha-sendemail": "Come misura precauzionale nei confronti dei messaggi di spam automatici, ti chiediamo gentilmente di inserire nella casella sottostante le parole che compaiono di seguito ([[Special:Captcha/help|come funziona?]]):",
+ "fancycaptcha-reload-text": "Aggiorna",
+ "apihelp-fancycaptchareload-description": "Ottieni un nuovo FancyCaptcha.",
+ "apihelp-fancycaptchareload-example-1": "Ottieni un nuovo FancyCaptcha"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ja.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ja.json
index 7ac5c734..7ac5c734 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ja.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ja.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/jut.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/jut.json
index 9b35bb77..9b35bb77 100644
--- a/extensions/ConfirmEdit/i18n/fancy/jut.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/jut.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/jv.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/jv.json
index 8454bd44..8454bd44 100644
--- a/extensions/ConfirmEdit/i18n/fancy/jv.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/jv.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/ka.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ka.json
index bceb84e6..bceb84e6 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ka.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ka.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/kaa.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/kaa.json
index c5b32320..c5b32320 100644
--- a/extensions/ConfirmEdit/i18n/fancy/kaa.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/kaa.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/khw.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/khw.json
new file mode 100644
index 00000000..9e980c7d
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/khw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rachitrali"
+ ]
+ },
+ "fancycaptcha-createaccount": "خودبخود غلط نوغ کھاتہ کھولاو کوریکو روک کوریکو بچے، مہربانی کوری ڈبا دیرو لوظان نیویشور ([[Special:Captcha/help|مزید معلومات]]):",
+ "fancycaptcha-reload-text": "تازہ کورے"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/kk-arab.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-arab.json
index 7d10ff80..7d10ff80 100644
--- a/extensions/ConfirmEdit/i18n/fancy/kk-arab.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-arab.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/kk-cyrl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-cyrl.json
index 0eb4f32f..0eb4f32f 100644
--- a/extensions/ConfirmEdit/i18n/fancy/kk-cyrl.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-cyrl.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/kk-latn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-latn.json
index 7e9819ef..7e9819ef 100644
--- a/extensions/ConfirmEdit/i18n/fancy/kk-latn.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/kk-latn.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/km.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/km.json
index a5035e0b..a5035e0b 100644
--- a/extensions/ConfirmEdit/i18n/fancy/km.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/km.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/kn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/kn.json
new file mode 100644
index 00000000..26005305
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/kn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Omshivaprakash"
+ ]
+ },
+ "fancycaptcha-reload-text": "ಪುನಶ್ಚೇತನಗೊಳಿಸು"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ko.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ko.json
index bf3ee0de..bf3ee0de 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ko.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ko.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/krc.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/krc.json
index ec25fd20..ec25fd20 100644
--- a/extensions/ConfirmEdit/i18n/fancy/krc.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/krc.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ksh.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ksh.json
new file mode 100644
index 00000000..1e7e16b6
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ksh.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "fancycaptcha-desc": "Määt e nett Käptsche för dä <code lang=\"en\">Confirm Edit</code> Projramm-Zohsatz",
+ "fancycaptcha-addurl": "Do häß neuje Lengks op frembde Websigge dobei jedonn.\nMer schöze ons Wiki jäje automattesche <code lang=\"en\" xml:lang=\"en\">SPAM</code>, dröm\ndon di Wööter en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
+ "fancycaptcha-badlogin": "Mer schöze Metmaacher en unsem Wiki jäje automatesche\nPaßwoot-Knackerei, dröm don di Wööt onge en dat Käßje\nendraare. ([[Special:Captcha/help|Verklierung]])",
+ "fancycaptcha-createaccount": "Mer schöze uns Wiki dojäje, dat mer en Masse automatesch\nMetmaacher aanmeldt.\nDröm beß esu joot un\ndon di Wööt onge en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
+ "fancycaptcha-create": "Öm di Sigg neu aanzelääje, don di Wööt onge en dat Käßje endraare. (Verklierung)",
+ "fancycaptcha-edit": "Öm de Sigg ze ändere, don di Wööt onge en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
+ "fancycaptcha-sendemail": "Öm et Wiki jääje automattesch enjedraare <code lang=\"en\" xml:lang=\"en\">SPAM</code> ze schötze,\nbes esu joot, donn di Wööter enjävve, di en däm Käßje heh dronger shtonn.\n([[Special:Captcha/help|Mieh Enfommazjuhne]])",
+ "fancycaptcha-reload-text": "Nöü Aanzeije!",
+ "apihelp-fancycaptchareload-description": "Maach en neu <i lang=\"en\" xml:lang=\"en\">FancyCaptcha</i>.",
+ "apihelp-fancycaptchareload-example-1": "Holl e neu <i lang=\"en\" xml:lang=\"en\">FancyCaptcha</i>"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ku-latn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ku-latn.json
new file mode 100644
index 00000000..e8493c95
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ku-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bikarhêner"
+ ]
+ },
+ "fancycaptcha-reload-text": "Nûkirin"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/kw.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/kw.json
index cdaad599..cdaad599 100644
--- a/extensions/ConfirmEdit/i18n/fancy/kw.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/kw.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/ky.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ky.json
index 949f4595..949f4595 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ky.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ky.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/la.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/la.json
index 1e3ee312..1e3ee312 100644
--- a/extensions/ConfirmEdit/i18n/fancy/la.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/la.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/lb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/lb.json
index 1dc4b8b6..1dc4b8b6 100644
--- a/extensions/ConfirmEdit/i18n/fancy/lb.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/lb.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/li.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/li.json
index e50580d0..e50580d0 100644
--- a/extensions/ConfirmEdit/i18n/fancy/li.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/li.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/lo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/lo.json
index d792ba33..d792ba33 100644
--- a/extensions/ConfirmEdit/i18n/fancy/lo.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/lo.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/lrc.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/lrc.json
new file mode 100644
index 00000000..a9f78445
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/lrc.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "fancycaptcha-createaccount": "سی پر و پیم کاری ویکی د ری وه ری حساو راس کنی خود انجوم، ایما وا نازاری دتو میهایم که کلیمه یایی که هان د جعوه ([[Special:رازینه کپچا/هومیاری|دونسمنیا هنی]]):ایچه بنیسیت",
+ "fancycaptcha-reload-text": "د نؤ كردن",
+ "apihelp-fancycaptchareload-description": "یه گل FancyCaptcha نه بیئریت.",
+ "apihelp-fancycaptchareload-example-1": "یه گل رازینه کپچا نازار تازه بئیرت."
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/lt.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/lt.json
new file mode 100644
index 00000000..2bfc9e63
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/lt.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200",
+ "Hugo.arg"
+ ]
+ },
+ "fancycaptcha-createaccount": "Siekiant apsaugoti wiki nuo automatinių paskyrų kūrimo, prašome jus įvesti žodžius, matomus rėmelyje apačioje ([[Special:Captcha/help|plačiau...]]):",
+ "fancycaptcha-reload-text": "Atnaujinti"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/lv.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/lv.json
index 81889765..81889765 100644
--- a/extensions/ConfirmEdit/i18n/fancy/lv.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/lv.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/mai.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/mai.json
new file mode 100644
index 00000000..875f1f72
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/mai.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tulsi Bhagat"
+ ]
+ },
+ "fancycaptcha-reload-text": "रिफ्रेश करू"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/min.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/min.json
index ebf13ffe..ebf13ffe 100644
--- a/extensions/ConfirmEdit/i18n/fancy/min.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/min.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/mk.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/mk.json
new file mode 100644
index 00000000..356bb113
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/mk.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "fancycaptcha-desc": "Збогатен создавач CAPTCHA за потврда на уредувања",
+ "fancycaptcha-addurl": "Вашето уредување вклучува нови надворешни врски.\nСо цел да се заштитиме од автоматизиран спам, би ве замолиле да ги внесете зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
+ "fancycaptcha-badlogin": "Со цел да се заштитиме од автоматизирано пробивање на лозинки, би ве замолиле да ги внесете зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
+ "fancycaptcha-createaccount": "Со цел да се заштитиме од автоматизирано создавање на сметки, би ве замолиле да ги внесете зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
+ "fancycaptcha-create": "За да создадете страница, внесете ги зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
+ "fancycaptcha-edit": "За да ја уредите страницава, внесете ги зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
+ "fancycaptcha-sendemail": "За да се заштитиме од автоматизирано спамирање, би ве замолиле да ги внесете зборовите од сликичката во полето подолу ([[Special:Captcha/help|повеќе информации]]):",
+ "fancycaptcha-reload-text": "Превчитај",
+ "apihelp-fancycaptchareload-description": "Дај нова FancyCaptcha.",
+ "apihelp-fancycaptchareload-example-1": "Дај нова FancyCaptcha."
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ml.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ml.json
new file mode 100644
index 00000000..f51bad82
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ml.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Praveenp",
+ "Shijualex"
+ ]
+ },
+ "fancycaptcha-addurl": "താങ്കളുടെ തിരുത്തലലിൽ പുറം കണ്ണികൾ ഉൾപ്പെട്ടിരിക്കുന്നു.\nയാന്ത്രിക സ്പാമിനെതിരെയുള്ള സം‌രക്ഷണത്തിന്റെ ഭാഗമായി, താഴെ കാണുന്ന വാക്കുകൾ പെട്ടിയിൽ ടൈപ്പു ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
+ "fancycaptcha-badlogin": "രഹസ്യവാക്ക് യാന്ത്രികമായി പൊളിക്കുന്നത് തടയുന്നതിന്റെ ഭാഗമായി, താഴെ കാണുന്ന വാക്കുകൾ പെട്ടിയിൽ ടൈപ്പു ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
+ "fancycaptcha-createaccount": "യാന്ത്രികമായി അംഗത്വം സൃഷ്ടിക്കുന്നതിൽ നിന്നും വിക്കിയെ സം‌രക്ഷിക്കുന്നതിന്റെ ഭാഗമായി, ദയവായി താഴെ കൊടുത്തിരിക്കുന്ന വാക്കുകൾ പെട്ടിയിൽ നൽകുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
+ "fancycaptcha-create": "ഈ താൾ സൃഷ്ടിക്കുവാൻ താഴെയുള്ള പെട്ടിയിൽ കാണുന്ന വാക്കുകൾ ടൈപ്പു ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
+ "fancycaptcha-edit": "ഈ താൾ തിരുത്തുവാൻ ദയവായി താഴെ കാണുന്ന വാക്കുകൾ പെട്ടിയിൽ ടൈപ്പു ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
+ "fancycaptcha-sendemail": "യാന്ത്രികമായ പാഴെഴുത്ത് ഉൾപ്പെടുത്തലിനുള്ള പ്രതിരോധമെന്ന നിലയിൽ, താഴെ കാണുന്ന വാക്കുകൾ പെട്ടിയിൽ ടൈപ്പ് ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
+ "fancycaptcha-reload-text": "പുതുക്കുക"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/mr.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/mr.json
new file mode 100644
index 00000000..16bfdd52
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/mr.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaustubh",
+ "Mahitgar",
+ "संतोष दहिवळ",
+ "BPositive"
+ ]
+ },
+ "fancycaptcha-addurl": "तुमच्या संपादनात नवीन बाह्य दुवे आहेत.\nआपोआप होणार्‍या संपादनांपासून बचावासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "fancycaptcha-badlogin": "आपोआप होणार्‍या परवलीच्या शब्दाच्या चोरीपासून वाचण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "fancycaptcha-createaccount": "आपोआप होणार्‍या सदस्य नोंदणीपासून वाचण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "fancycaptcha-create": "हे पान तयार करण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "fancycaptcha-edit": "हे पान संपादित करण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "fancycaptcha-sendemail": "आपोआप होणार्‍या उत्पातापासून वाचण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "fancycaptcha-reload-text": "ताजेतवाने करा"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ms.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ms.json
index 0d1aae63..0d1aae63 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ms.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ms.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/mt.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/mt.json
index 6488dc43..6488dc43 100644
--- a/extensions/ConfirmEdit/i18n/fancy/mt.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/mt.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/nap.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/nap.json
new file mode 100644
index 00000000..c060e567
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/nap.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "fancycaptcha-addurl": "'O cagnamiento vuosto include 'e cullegamiente 'e fore.\nPe' putè pruteggere annanz'a 'o spamm automateco, pe' piacere mettete 'e parole ccà abbascio ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "fancycaptcha-badlogin": "Pe' ve putè pruteggere 'a wiki annanz'a coccheruno ca se futtesse 'a password cu nu computer, pe' piacere mettite ccà abbascio int' 'a casciulella 'e parole ccà ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "fancycaptcha-createaccount": "Pe' ve putè pruteggere 'a wiki annanz'a criazione 'utente, pe' piacere mettite ccà abbascio int' 'a casciulella 'e parole ccà ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "fancycaptcha-create": "Pe' crià sta paggena, pe' piacere mettite 'e parole ca cumpareno ccà abbascio int'a casciulella ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "fancycaptcha-edit": "Pe' putè cagnà sta paggena, pe' piacere mettete 'e parole ca se trovano ccà abbascio int'a casciulella ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "fancycaptcha-sendemail": "Pe' ve putè pruteggere 'a wiki annanz'a coccheruno ca facesse spam c' 'o computer, pe' piacere mettite ccà abbascio int' 'a casciulella 'e parole ccà ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "fancycaptcha-reload-text": "Agghiuorna",
+ "apihelp-fancycaptchareload-description": "Pigliateve nu FancyCaptcha nuovo.",
+ "apihelp-fancycaptchareload-example-1": "Pigliateve nu FancyCaptcha nuovo"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/nb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/nb.json
index b8d3853b..b8d3853b 100644
--- a/extensions/ConfirmEdit/i18n/fancy/nb.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/nb.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/nds-nl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/nds-nl.json
index e184d3d8..e184d3d8 100644
--- a/extensions/ConfirmEdit/i18n/fancy/nds-nl.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/nds-nl.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/nds.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/nds.json
index f7379441..f7379441 100644
--- a/extensions/ConfirmEdit/i18n/fancy/nds.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/nds.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ne.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ne.json
new file mode 100644
index 00000000..c9831353
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ne.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "fancycaptcha-reload-text": "ताजागर्ने"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/nl-informal.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/nl-informal.json
index 3ba85480..3ba85480 100644
--- a/extensions/ConfirmEdit/i18n/fancy/nl-informal.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/nl-informal.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/nl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/nl.json
index e5b40b23..e5b40b23 100644
--- a/extensions/ConfirmEdit/i18n/fancy/nl.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/nl.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/nn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/nn.json
index df234c8c..df234c8c 100644
--- a/extensions/ConfirmEdit/i18n/fancy/nn.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/nn.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/oc.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/oc.json
index f879270c..f879270c 100644
--- a/extensions/ConfirmEdit/i18n/fancy/oc.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/oc.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/or.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/or.json
index 26dd49cc..26dd49cc 100644
--- a/extensions/ConfirmEdit/i18n/fancy/or.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/or.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/pa.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pa.json
new file mode 100644
index 00000000..f94c4815
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Babanwalia"
+ ]
+ },
+ "fancycaptcha-reload-text": "ਮੁੜ ਤਾਜ਼ਾ ਕਰੋ"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/pfl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pfl.json
new file mode 100644
index 00000000..e7379c26
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pfl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae"
+ ]
+ },
+ "fancycaptcha-createaccount": "Fadde Schudz vum Wiki voa audomadisch oag'leeschde B'nudzakonde, gebb bidde unna s'Woad oi ([[Special:Captcha/help|Fooche odda Broblem?]]):",
+ "fancycaptcha-reload-text": "Agdualisiere"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/pl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pl.json
index 266d7e23..266d7e23 100644
--- a/extensions/ConfirmEdit/i18n/fancy/pl.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pl.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/pms.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pms.json
new file mode 100644
index 00000000..4e8fdd6d
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pms.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Bèrto 'd Sèra"
+ ]
+ },
+ "fancycaptcha-addurl": "Soa modìfica a l'ha andrinta dj'anliure esterne neuve.\nPër protege la wiki da la rumenta aotomatisà, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ant la casela ([[Special:Captcha/help|për savejne dë pì]]):",
+ "fancycaptcha-badlogin": "Për protege la wiki dai programa ch'a sërco ëd freghé le ciav, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ant la casela ambelessì-sota ([[Special:Captcha/help|për savejne dë pì]]):",
+ "fancycaptcha-createaccount": "Për protege la wiki dai programa ch'a deurbo ëd cont neuv n'aotomàtich, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ant la casela ambelessì-sota ([[Special:Captcha/help|për savejne dë pì]]):",
+ "fancycaptcha-create": "Për creé sta pàgina-i d'amblé, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ambelessì sota ([[Special:Captcha/help|për savejne dë pì]]):",
+ "fancycaptcha-edit": "Për fe-ie dle modìfiche ansima a sta pàgina-sì, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ambelessì sota ([[Special:Captcha/help|për savejne dë pì]]):",
+ "fancycaptcha-sendemail": "Për protege la wiki contra la rumenta automàtica, për piasì ch'a anserissa le paròle che as vëddo ant la casela sì-sota ([[Special:Captcha/help|për savèjne ëd pi]]):",
+ "fancycaptcha-reload-text": "Agiorné",
+ "apihelp-fancycaptchareload-description": "Oten-e un neuv FancyCaptcha.",
+ "apihelp-fancycaptchareload-example-1": "Oten-e un neuv FancyCaptcha"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/pnb.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pnb.json
index 6cd11fc5..6cd11fc5 100644
--- a/extensions/ConfirmEdit/i18n/fancy/pnb.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pnb.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ps.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ps.json
new file mode 100644
index 00000000..aa4224c6
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ps.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "fancycaptcha-createaccount": "په ويکي کې د خپلسري گڼون جوړېدنې د مخنيوي په خاطر موږ له تاسې غوښتنه کوو چې لانديني توري هماغسې په ورکړل شوي بکس کې وټاپئ څنگه چې تاسې ته ښکارېږي ([[Special:Captcha/help|لا نور مالومات]]):",
+ "fancycaptcha-create": "ددې مخ د جوړلو لپاره، لطفاً ورکړل شوي توري چې څنگه تاسې ته ښکاري هماغسې کټ مټ په لانديني چوکاټ کې وليکی ([[Special:Captcha/help|نور مالومات]]):",
+ "fancycaptcha-edit": "ددې مخ د سمولو لپاره، لطفاً ورکړل شوي توري چې څنگه تاسې ته ښکاري هماغسې کټ مټ په لانديني چوکاټ کې وليکی ([[Special:Captcha/help|نور مالومات]]):",
+ "fancycaptcha-reload-text": "بياتازه کول"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/pt-br.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pt-br.json
new file mode 100644
index 00000000..954856e0
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pt-br.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Eduardo.mps",
+ "Giro720",
+ "Dianakc"
+ ]
+ },
+ "fancycaptcha-addurl": "A sua edição inclui novos links externos. Para proteger a wiki contra sistemas automatizados que inserem ''spam'', por favor, introduza as palavras mostradas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
+ "fancycaptcha-badlogin": "Para proteger a wiki contra programas automatizados de detecção de senhas, por favor, introduza as palavras exibidas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
+ "fancycaptcha-createaccount": "Para proteger a wiki contra sistemas automatizados de criação de contas, solicitamos que introduza as palavras exibidas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
+ "fancycaptcha-create": "Para criar a página, por favor, introduza as palavras exibidas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
+ "fancycaptcha-edit": "Para editar esta página, por favor, introduza as palavras exibidas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
+ "fancycaptcha-sendemail": "Para ajudar a combater ''spam'' automatizado, pedimos que, por favor, introduza as palavras que aparecem abaixo ([[Special:Captcha/help|mais informações]]):",
+ "fancycaptcha-reload-text": "Atualizar"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/pt.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/pt.json
index fc5b67e3..fc5b67e3 100644
--- a/extensions/ConfirmEdit/i18n/fancy/pt.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/pt.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/qqq.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/qqq.json
new file mode 100644
index 00000000..0d1651c3
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/qqq.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fryed-peach",
+ "Hamilton Abreu",
+ "Purodha",
+ "Shirayuki"
+ ]
+ },
+ "fancycaptcha-desc": "{{Optional}}\n{{desc}}",
+ "fancycaptcha-addurl": "{{Related|ConfirmEdit-addurl}}",
+ "fancycaptcha-badlogin": "{{Related|ConfirmEdit-badlogin}}",
+ "fancycaptcha-createaccount": "{{Related|ConfirmEdit-createaccount}}",
+ "fancycaptcha-create": "{{Related|ConfirmEdit-create}}",
+ "fancycaptcha-edit": "{{Related|ConfirmEdit-edit}}",
+ "fancycaptcha-sendemail": "{{Related|ConfirmEdit-sendemail}}",
+ "fancycaptcha-reload-text": "Prompts a click to get a new FancyCaptcha image.\n{{Identical|Refresh}}",
+ "apihelp-fancycaptchareload-description": "{{doc-apihelp-description|fancycaptchareload}}",
+ "apihelp-fancycaptchareload-example-1": "{{doc-apihelp-example|fancycaptchareload}}"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/qu.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/qu.json
index 10b7911c..10b7911c 100644
--- a/extensions/ConfirmEdit/i18n/fancy/qu.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/qu.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/rm.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/rm.json
index b831f13b..b831f13b 100644
--- a/extensions/ConfirmEdit/i18n/fancy/rm.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/rm.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/ro.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ro.json
index 1044377d..1044377d 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ro.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ro.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/roa-tara.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/roa-tara.json
new file mode 100644
index 00000000..2313192d
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/roa-tara.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "fancycaptcha-addurl": "'U cangiamende tune 'nglude de le collegaminde de fore.\nPe proteggere condre a 'u spam automateche, pe piacere mitte le parole ca iessene sotte ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
+ "fancycaptcha-badlogin": "Pe proteggere condre a futteminde automatece de passuord, pe piacere mitte le parole ca iessene aqquà sotte ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
+ "fancycaptcha-createaccount": "Pe proteggere condre a ccreazione automateche de cunde utinde, pe piacere mitte le parole ca iessene aqquà sotte ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
+ "fancycaptcha-create": "Pe ccrejà sta pàgene, pe piacere mitte le parole ca combare aqquà sotte ([[Special:Captcha/help|more info]]):",
+ "fancycaptcha-edit": "Pe cangià sta pàgene, pe piacere mitte le parole combare aqquà sotte ([[Special:Captcha/help|more info]]):",
+ "fancycaptcha-sendemail": "Pe proteggere condre a spam automatece, pe piacere mitte le parole ca iessene aqquà sotte ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
+ "fancycaptcha-reload-text": "Aggiorne",
+ "apihelp-fancycaptchareload-description": "Pigghie 'nu FancyCaptcha nuève.",
+ "apihelp-fancycaptchareload-example-1": "Pigghie 'nu FancyCaptcha nuève"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ru.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ru.json
index 836beb53..836beb53 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ru.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ru.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/rue.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/rue.json
index 48011016..48011016 100644
--- a/extensions/ConfirmEdit/i18n/fancy/rue.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/rue.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/sa.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sa.json
index 7c9563cf..7c9563cf 100644
--- a/extensions/ConfirmEdit/i18n/fancy/sa.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sa.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/sah.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sah.json
new file mode 100644
index 00000000..5ba0991e
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sah.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "HalanTul"
+ ]
+ },
+ "fancycaptcha-addurl": "Эн көннөрүүҥ тас ыйынньыктаах эбит. Спаамтан көмүскэнэр соруктаах дьайыыны оҥор, манна баар тыллары хатылаа ([[Special:Captcha/help|сиһилии…]]):",
+ "fancycaptcha-badlogin": "Киирии тылы аптамаатынан алдьатыыттан көмүскэнэр дьайыыны оҥороргор көрдөһөбүт, манна ойууламмыт буукубалары хатылаа ([[Special:Captcha/help|сиһилии]]):",
+ "fancycaptcha-createaccount": "Ааттары аптамаатынан бэлиэтиири суох оҥорор туһуттан, аллара көстөр тыллары хатылаа \n([[Special:Captcha/help|сиһилии]]):",
+ "fancycaptcha-create": "Эн көннөрүүҥ тас ыйынньыктардаах эбит. Спаамтан көмүскэнэр туһуттан манна баар тыллары хатылыыргар көрдөһөбүт ([[Special:Captcha/help|сиһилии…]]):",
+ "fancycaptcha-edit": "Эн көннөрүүҥ тас ыйынньыктардаах эбит. Спаамтан көмүскэнэр туһуттан манна баар тыллары хатылыыргар көрдөһөбүт ([[Special:Captcha/help|сиһилии…]]):",
+ "fancycaptcha-sendemail": "Аптамаат спаамтан көмүскэнэр дьайыыны оҥороргор көрдөһөбүт, манна ойууламмыт тыллары хатылаа ([[Special:Captcha/help|сиһилии]]):",
+ "fancycaptcha-reload-text": "Саҥарт"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/scn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/scn.json
new file mode 100644
index 00000000..35e36ec7
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/scn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gmelfi"
+ ]
+ },
+ "fancycaptcha-createaccount": "Comu misura pricauzzionali contra li tintativa di riggistrazzioni automatica, t'addumannamu gintirmenti di nzirìri ntâ casedda cassutta li paroli ca cumpàrunu appressu ([[Special:Captcha/help|comu funziona?]]):"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/si.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/si.json
index b376277e..b376277e 100644
--- a/extensions/ConfirmEdit/i18n/fancy/si.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/si.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/sk.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sk.json
index 110ee1d6..110ee1d6 100644
--- a/extensions/ConfirmEdit/i18n/fancy/sk.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sk.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/sl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sl.json
new file mode 100644
index 00000000..e4c01bfb
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sl.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334"
+ ]
+ },
+ "fancycaptcha-addurl": "Vaše urejanje vključuje nove zunanje povezave.\nZaradi zaščite wikija pred samodejnim smetjem vas prijazno naprošamo, da vnesete spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
+ "fancycaptcha-badlogin": "Zaradi zaščite wikija pred samodejnim ugotavljanjem gesel vas prijazno naprošamo, da vnesete spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
+ "fancycaptcha-createaccount": "Zaradi zaščite wikija pred samodejnim ustvarjanjem računov vas prijazno naprošamo, da vnesete spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
+ "fancycaptcha-create": "Če želite ustvariti stran, prosimo vnesite spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
+ "fancycaptcha-edit": "Če želite urediti stran, prosimo vnesite spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
+ "fancycaptcha-sendemail": "Zaradi zaščite wikija pred samodejnim smetenjem vas prijazno naprošamo, da vnesete spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
+ "fancycaptcha-reload-text": "Osveži",
+ "apihelp-fancycaptchareload-description": "Pridobi novo FancyCaptcha.",
+ "apihelp-fancycaptchareload-example-1": "Pridobi novo FancyCaptcha"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/so.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/so.json
index fe33f806..fe33f806 100644
--- a/extensions/ConfirmEdit/i18n/fancy/so.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/so.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/sq.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sq.json
index 50d8f799..50d8f799 100644
--- a/extensions/ConfirmEdit/i18n/fancy/sq.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sq.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/sr-ec.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sr-ec.json
new file mode 100644
index 00000000..9bb62175
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sr-ec.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Millosh",
+ "Rancher",
+ "Жељко Тодоровић",
+ "Михајло Анђелковић",
+ "Milicevic01"
+ ]
+ },
+ "fancycaptcha-desc": "Обогаћен стварач сликовног кода за потврду уређивања",
+ "fancycaptcha-addurl": "Ваша измена садржи нове спољашње везе.\nУ циљу заштите од непожељних порука, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
+ "fancycaptcha-badlogin": "У циљу заштите од пробијања лозинки, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
+ "fancycaptcha-createaccount": "У циљу заштите од аутоматског отварања налога, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
+ "fancycaptcha-create": "Да бисте направили страницу, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
+ "fancycaptcha-edit": "Да бисте уредили ову страницу, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
+ "fancycaptcha-sendemail": "У циљу заштите од непожељних порука, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
+ "fancycaptcha-reload-text": "освежи"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/sr-el.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sr-el.json
new file mode 100644
index 00000000..9f743fb1
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sr-el.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michaello",
+ "Жељко Тодоровић",
+ "Milicevic01"
+ ]
+ },
+ "fancycaptcha-desc": "Obogaćen stvarač slikovnog koda za potvrdu uređivanja",
+ "fancycaptcha-addurl": "Vaša izmena sadrži nove spoljašnje veze.\nU cilju zaštite od nepoželjnih poruka, unesite reči sa slike u polje ispod ([[Special:Captcha/help|više informacija]]):",
+ "fancycaptcha-badlogin": "U cilju zaštite od probijanja lozinki, unesite reči sa slike u polje ispod ([[Special:Captcha/help|više informacija]]):",
+ "fancycaptcha-createaccount": "U cilju zaštite od automatskog otvaranja naloga, unesite reči sa slike u polje ispod ([[Special:Captcha/help|više informacija]]):",
+ "fancycaptcha-create": "Da bi se napravila stranica, potrebno je uneti reči koje se nalaze ispod kutije ([[Special:Captcha/help|detaljnije]]):",
+ "fancycaptcha-edit": "Za izmenu ove strane unesi reči koje se nalaze ispod kutije ([[Special:Captcha/help|detaljnije]]):",
+ "fancycaptcha-sendemail": "U cilju zaštite od nepoželjnih poruka, unesite reči sa slike u polje ispod ([[Special:Captcha/help|više informacija]]):",
+ "fancycaptcha-reload-text": "osveži"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/stq.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/stq.json
index 3402326d..3402326d 100644
--- a/extensions/ConfirmEdit/i18n/fancy/stq.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/stq.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/su.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/su.json
index 94003d21..94003d21 100644
--- a/extensions/ConfirmEdit/i18n/fancy/su.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/su.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/sv.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/sv.json
new file mode 100644
index 00000000..0ddd363e
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/sv.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ainali",
+ "Thurs",
+ "WikiPhoenix",
+ "Lokal Profil"
+ ]
+ },
+ "fancycaptcha-addurl": "Din ändring innehåller nya externa länkar.\nFör att skydda wikin mot automatisk spam ber vi dig att skriva orden som visas nedan i rutan ([[Special:Captcha/help|mer information]]):",
+ "fancycaptcha-badlogin": "För att skydda wikin mot automatiserad lösenordsknäckning ber vi dig att skriva\norden som visas nedan i rutan ([[Special:Captcha/help|mer information]]):",
+ "fancycaptcha-createaccount": "För att skydda wikin mot automatiskt skapade av användarkonton ber vi dig att\nskriva orden som visas nedan i rutan ([[Special:Captcha/help|mer information]]):",
+ "fancycaptcha-create": "För att skapa den här sidan måste du först skriva orden som visas nedan i rutan\n([[Special:Captcha/help|mer information]]):",
+ "fancycaptcha-edit": "För att redigera den här sidan måste du först skriva orden som visas nedan i rutan\n([[Special:Captcha/help|mer information]]):",
+ "fancycaptcha-sendemail": "För att skydda wikin mot automatiserad spam ber vi dig att skriva orden som visas nedan i rutan ([[Special:Captcha/help|mer information]]):",
+ "fancycaptcha-reload-text": "Uppdatera",
+ "apihelp-fancycaptchareload-description": "Hämta en ny FancyCaptcha.",
+ "apihelp-fancycaptchareload-example-1": "Hämta en ny FancyCaptcha."
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/szl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/szl.json
new file mode 100644
index 00000000..f880ed4d
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/szl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Krol111"
+ ]
+ },
+ "fancycaptcha-reload-text": "Uodśwjyż"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ta.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ta.json
index f8fb25f3..f8fb25f3 100644
--- a/extensions/ConfirmEdit/i18n/fancy/ta.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ta.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/tcy.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/tcy.json
new file mode 100644
index 00000000..896d827a
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/tcy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "VASANTH S.N."
+ ]
+ },
+ "fancycaptcha-reload-text": "ಪುನಶ್ಚೇತನಗೊಳಿಸಾಲೆ"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/te.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/te.json
new file mode 100644
index 00000000..b2d204bc
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/te.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mpradeep",
+ "రహ్మానుద్దీన్"
+ ]
+ },
+ "fancycaptcha-addurl": "మీ దిద్దుబాటులో కొత్త బయటి లింకులున్నాయి. బాట్లద్వారా చేసే స్పాము నుండి రక్షణను ఏర్పరచేందుకు గాను,\nకింద కనిపించే బొమ్మలోని అక్షరాలను పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సమాచారం]]):",
+ "fancycaptcha-badlogin": "సంకేత పదాలను దొంగిలించే ఆటోమాటిక్ ప్రోగ్రాముల నుండి రక్షించేందుకు గాను, కింద కనిపించే బొమ్మలోని అక్షరాలను పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సమాచారం]]):",
+ "fancycaptcha-createaccount": "ఆటోమాటిగ్గా ఖాతాలను సృష్టించడాన్ని నివారించేందుకు, కింద కనిపించే పదాలను\nఈ పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
+ "fancycaptcha-create": "కొత్త పేజీ సృష్టించేందుకు గాను, కింద కనిపించే బొమ్మలోని అక్షరాలను పెట్టెలో రాయండి\n([[Special:Captcha/help|మరింత సమాచారం]]):",
+ "fancycaptcha-edit": "ఈ పేజీలో దిద్దుబాటు చేసేందుకు, కింద కనిపించే బొమ్మలోని అక్షరాలను పెట్టెలో రాయండి\n([[Special:Captcha/help|మరింత సమాచారం]]):",
+ "fancycaptcha-reload-text": "తాజాపరుచు"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/tg-cyrl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/tg-cyrl.json
index a0edc4f9..a0edc4f9 100644
--- a/extensions/ConfirmEdit/i18n/fancy/tg-cyrl.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/tg-cyrl.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/tg-latn.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/tg-latn.json
index 38f5207a..38f5207a 100644
--- a/extensions/ConfirmEdit/i18n/fancy/tg-latn.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/tg-latn.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/th.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/th.json
index b832194f..b832194f 100644
--- a/extensions/ConfirmEdit/i18n/fancy/th.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/th.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/tk.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/tk.json
index e23f48b8..e23f48b8 100644
--- a/extensions/ConfirmEdit/i18n/fancy/tk.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/tk.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/tl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/tl.json
index 50731937..50731937 100644
--- a/extensions/ConfirmEdit/i18n/fancy/tl.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/tl.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/tr.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/tr.json
index 0a54f5e3..0a54f5e3 100644
--- a/extensions/ConfirmEdit/i18n/fancy/tr.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/tr.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/tt-cyrl.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/tt-cyrl.json
new file mode 100644
index 00000000..1878ee6c
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/tt-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Derslek"
+ ]
+ },
+ "fancycaptcha-reload-text": "Яңарту"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/uk.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/uk.json
index 3adba1e1..3adba1e1 100644
--- a/extensions/ConfirmEdit/i18n/fancy/uk.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/uk.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/ur.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/ur.json
new file mode 100644
index 00000000..d372d4f8
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/ur.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "عثمان خان شاہ"
+ ]
+ },
+ "fancycaptcha-reload-text": "تازہ کریں"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/uz.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/uz.json
index 4d7e1745..4d7e1745 100644
--- a/extensions/ConfirmEdit/i18n/fancy/uz.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/uz.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/vec.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/vec.json
index e9adcdd2..e9adcdd2 100644
--- a/extensions/ConfirmEdit/i18n/fancy/vec.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/vec.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/vi.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/vi.json
new file mode 100644
index 00000000..833bdaea
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/vi.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cheers!",
+ "Minh Nguyen",
+ "Vinhtantran"
+ ]
+ },
+ "fancycaptcha-desc": "Trình sản xuất hình CAPTCHA đặc biệt cho ConfirmEdit",
+ "fancycaptcha-addurl": "Sửa đổi của bạn có chứa các liên kết ngoài. Để giúp chúng tôi chống lại spam tự động, xin vui lòng nhập những từ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
+ "fancycaptcha-badlogin": "Để giúp chúng tôi tránh bẻ mật khẩu tự động, xin vui lòng nhập những từ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
+ "fancycaptcha-createaccount": "Để giúp chúng tôi tránh mở tài khoản tự động, xin vui lòng nhập những chữ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
+ "fancycaptcha-create": "Để tạo trang, xin hãy nhập những chữ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
+ "fancycaptcha-edit": "Để sửa trang này, xin hãy nhập những từ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
+ "fancycaptcha-sendemail": "Để giúp chúng tôi chống lại spam tự động, xin vui lòng nhập những từ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
+ "fancycaptcha-reload-text": "Làm tươi",
+ "apihelp-fancycaptchareload-description": "Lấy FancyCaptcha mới.",
+ "apihelp-fancycaptchareload-example-1": "Lấy FancyCaptcha mới."
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/vo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/vo.json
index fb8bfe9f..fb8bfe9f 100644
--- a/extensions/ConfirmEdit/i18n/fancy/vo.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/vo.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/vro.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/vro.json
index 198490e4..198490e4 100644
--- a/extensions/ConfirmEdit/i18n/fancy/vro.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/vro.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/wa.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/wa.json
index 180b5fdd..180b5fdd 100644
--- a/extensions/ConfirmEdit/i18n/fancy/wa.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/wa.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/xmf.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/xmf.json
new file mode 100644
index 00000000..e995e0b8
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/xmf.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Silovan"
+ ]
+ },
+ "fancycaptcha-createaccount": "ვიკიშ ანგარიშეფიშ ავტომატური რეგისტრაციაშე თხილუაშ ღანკით, ჩქი ალაიჩანთ, გენშიჸონათ მოჩამილი სიმბოლოეფი ტექსტურ ველს ([[Special:Captcha/help|დეტალურო]]):",
+ "fancycaptcha-reload-text": "გოახალაფა"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/yi.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/yi.json
new file mode 100644
index 00000000..cc8076dc
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/yi.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "fancycaptcha-createaccount": "צו שיצן די וויקי קעגן שאַפֿן קאנטעס אויטאמאַטיש, בעטן מיר אײַך אריינקלאַפן די ווערטער אונטן אינעם קעסטל. ([[Special:Captcha/help|נאך אינפֿארמאַציע]]):",
+ "fancycaptcha-create": "צו שאַפֿן דעם בלאַט, זײַט אזוי גוט און קלאַפט אַרײַן די ווערטער וואָס זענען אינעם קעסטל אונטן ([[Special:Captcha/help|מער אינפֿארמאַציע]]):",
+ "fancycaptcha-edit": "צו רעדאִקטירן דעם בלאַט, זײַט אזוי גוט און קלאַפט אַרײַן די ווערטער וואָס שטייען אינעם קעסטל אונטן ([[Special:Captcha/help|מער אינפֿארמאַציע]]):",
+ "fancycaptcha-reload-text": "דערפֿרישן"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/yo.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/yo.json
index 09ab43a0..09ab43a0 100644
--- a/extensions/ConfirmEdit/i18n/fancy/yo.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/yo.json
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/yue.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/yue.json
new file mode 100644
index 00000000..455856b3
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/yue.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yueman"
+ ]
+ },
+ "fancycaptcha-addurl": "你嘅編輯包括咗新嘅外部連結。為咗防止自動化嘅濫貼,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):",
+ "fancycaptcha-badlogin": "為咗防止不當程式破解密碼,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):",
+ "fancycaptcha-createaccount": "為咗防止自動化開新戶口,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):",
+ "fancycaptcha-create": "要開一個新版,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):",
+ "fancycaptcha-edit": "要編輯呢一版,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):",
+ "fancycaptcha-reload-text": "重新整理"
+}
diff --git a/extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hans.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hans.json
new file mode 100644
index 00000000..abfd7c47
--- /dev/null
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hans.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bencmq",
+ "Cwek",
+ "Mywood",
+ "Impersonator 1",
+ "Liuxinyu970226"
+ ]
+ },
+ "fancycaptcha-desc": "用于确认编辑的扭曲验证码生成器",
+ "fancycaptcha-addurl": "你的编辑包含新的外部链接。为保护本wiki免受自动垃圾程序的破坏,我们恳请你输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
+ "fancycaptcha-badlogin": "为保护本wiki免受自动密码破解的破坏,我们恳请你输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
+ "fancycaptcha-createaccount": "为保护本wiki免受自动账户创建的破坏,我们恳请你输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
+ "fancycaptcha-create": "要创建页面,请输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
+ "fancycaptcha-edit": "要编辑该页面,请输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
+ "fancycaptcha-sendemail": "为保护本wiki免受自动垃圾程序的破坏,我们恳请你输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
+ "fancycaptcha-reload-text": "刷新",
+ "apihelp-fancycaptchareload-description": "获得一个新的FancyCaptcha。",
+ "apihelp-fancycaptchareload-example-1": "获得一个新的FancyCaptcha"
+}
diff --git a/extensions/ConfirmEdit/i18n/fancy/zh-hant.json b/extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hant.json
index 22bc1f0a..22bc1f0a 100644
--- a/extensions/ConfirmEdit/i18n/fancy/zh-hant.json
+++ b/extensions/ConfirmEdit/FancyCaptcha/i18n/zh-hant.json
diff --git a/extensions/ConfirmEdit/resources/ext.confirmEdit.fancyCaptcha.css b/extensions/ConfirmEdit/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.css
index 96e4dd6a..96e4dd6a 100644
--- a/extensions/ConfirmEdit/resources/ext.confirmEdit.fancyCaptcha.css
+++ b/extensions/ConfirmEdit/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.css
diff --git a/extensions/ConfirmEdit/resources/ext.confirmEdit.fancyCaptcha.js b/extensions/ConfirmEdit/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.js
index a8db7218..a8db7218 100644
--- a/extensions/ConfirmEdit/resources/ext.confirmEdit.fancyCaptcha.js
+++ b/extensions/ConfirmEdit/FancyCaptcha/resources/ext.confirmEdit.fancyCaptcha.js
diff --git a/extensions/ConfirmEdit/resources/images/ajax-loader-10x10.gif b/extensions/ConfirmEdit/FancyCaptcha/resources/images/ajax-loader-10x10.gif
index 772e9a55..772e9a55 100644
--- a/extensions/ConfirmEdit/resources/images/ajax-loader-10x10.gif
+++ b/extensions/ConfirmEdit/FancyCaptcha/resources/images/ajax-loader-10x10.gif
Binary files differ
diff --git a/extensions/ConfirmEdit/resources/images/fancycaptcha-reload-icon.png b/extensions/ConfirmEdit/FancyCaptcha/resources/images/fancycaptcha-reload-icon.png
index 6cbde303..6cbde303 100644
--- a/extensions/ConfirmEdit/resources/images/fancycaptcha-reload-icon.png
+++ b/extensions/ConfirmEdit/FancyCaptcha/resources/images/fancycaptcha-reload-icon.png
Binary files differ
diff --git a/extensions/ConfirmEdit/MathCaptcha.php b/extensions/ConfirmEdit/MathCaptcha.php
index d1eb44ef..dd34d53e 100644
--- a/extensions/ConfirmEdit/MathCaptcha.php
+++ b/extensions/ConfirmEdit/MathCaptcha.php
@@ -1,22 +1,2 @@
<?php
-
-/**
- * Captcha class using simple sums and the math renderer
- * Not brilliant, but enough to dissuade casual spam bots
- *
- * @file
- * @ingroup Extensions
- * @author Rob Church <robchur@gmail.com>
- * @copyright © 2006 Rob Church
- * @licence GNU General Public Licence 2.0
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
- exit;
-}
-
-$dir = __DIR__;
-require_once $dir . '/ConfirmEdit.php';
-$wgCaptchaClass = 'MathCaptcha';
-
-$wgAutoloadClasses['MathCaptcha'] = $dir . '/MathCaptcha.class.php';
+require_once __DIR__ . "/MathCaptcha/MathCaptcha.php";
diff --git a/extensions/ConfirmEdit/MathCaptcha.class.php b/extensions/ConfirmEdit/MathCaptcha/MathCaptcha.class.php
index ac220baa..d3e4af69 100644
--- a/extensions/ConfirmEdit/MathCaptcha.class.php
+++ b/extensions/ConfirmEdit/MathCaptcha/MathCaptcha.class.php
@@ -42,7 +42,7 @@ class MathCaptcha extends SimpleCaptcha {
if ( class_exists( 'MathRenderer' ) ) {
$math = MathRenderer::getRenderer( $sum, array(), MW_MATH_PNG );
} else {
- throw new MWException( 'MathCaptcha requires the Math extension for MediaWiki versions 1.18 and above.' );
+ throw new Exception( 'MathCaptcha requires the Math extension for MediaWiki versions 1.18 and above.' );
}
$html = $math->render();
return preg_replace( '/alt=".*?"/', '', $html );
diff --git a/extensions/ConfirmEdit/MathCaptcha/MathCaptcha.php b/extensions/ConfirmEdit/MathCaptcha/MathCaptcha.php
new file mode 100644
index 00000000..192b49a9
--- /dev/null
+++ b/extensions/ConfirmEdit/MathCaptcha/MathCaptcha.php
@@ -0,0 +1,13 @@
+<?php
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'ConfirmEdit/MathCaptcha' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['MathCaptcha'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for MathCaptcha extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the MathCaptcha extension requires MediaWiki 1.25+' );
+}
diff --git a/extensions/ConfirmEdit/MathCaptcha/extension.json b/extensions/ConfirmEdit/MathCaptcha/extension.json
new file mode 100644
index 00000000..2e3cc4bf
--- /dev/null
+++ b/extensions/ConfirmEdit/MathCaptcha/extension.json
@@ -0,0 +1,9 @@
+{
+ "name": "MathCaptcha",
+ "AutoloadClasses": {
+ "MathCaptcha": "MathCaptcha.class.php"
+ },
+ "config": {
+ "CaptchaClass": "MathCaptcha"
+ }
+}
diff --git a/extensions/ConfirmEdit/QuestyCaptcha.i18n.php b/extensions/ConfirmEdit/QuestyCaptcha.i18n.php
deleted file mode 100644
index 4088d04c..00000000
--- a/extensions/ConfirmEdit/QuestyCaptcha.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim0619ec35d45138ac' ) ) {
- function wfJsonI18nShim0619ec35d45138ac( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/questy/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim0619ec35d45138ac';
-}
diff --git a/extensions/ConfirmEdit/QuestyCaptcha.php b/extensions/ConfirmEdit/QuestyCaptcha.php
index 11dfebb3..e51266be 100644
--- a/extensions/ConfirmEdit/QuestyCaptcha.php
+++ b/extensions/ConfirmEdit/QuestyCaptcha.php
@@ -1,47 +1,2 @@
<?php
-/**
- * A question-based captcha plugin.
- *
- * Copyright (C) 2009 Benjamin Lees <emufarmers@gmail.com>
- * http://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Extensions
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
- exit;
-}
-
-$dir = __DIR__;
-require_once $dir . '/ConfirmEdit.php';
-$wgCaptchaClass = 'QuestyCaptcha';
-
-global $wgCaptchaQuestions;
-$wgCaptchaQuestions = array();
-
-// Add your questions in LocalSettings.php using this format
-// $wgCaptchaQuestions[] = array( 'question' => "A question?", 'answer' => "An answer!" );
-// $wgCaptchaQuestions[] = array( 'question' => 'How much wood would a woodchuck chuck if a woodchuck could chuck wood?', 'answer' => 'as much wood as...' );
-// $wgCaptchaQuestions[] = array( 'question' => "What is this wiki's name?", 'answer' => "$wgSitename" );
-// You can also provide several acceptable answers to a given question (the answers shall be in lowercase):
-// $wgCaptchaQuestions[] = array( 'question' => "2 + 2 ?", 'answer' => array( '4', 'four' ) );
-
-$wgMessagesDirs['QuestyCaptcha'] = __DIR__ . '/i18n/questy';
-$wgExtensionMessagesFiles['QuestyCaptcha'] = $dir . '/QuestyCaptcha.i18n.php';
-$wgAutoloadClasses['QuestyCaptcha'] = $dir . '/QuestyCaptcha.class.php';
+require_once __DIR__ . "/QuestyCaptcha/QuestyCaptcha.php";
diff --git a/extensions/ConfirmEdit/QuestyCaptcha.class.php b/extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.class.php
index a7ab37b8..2e5274a8 100644
--- a/extensions/ConfirmEdit/QuestyCaptcha.class.php
+++ b/extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.class.php
@@ -30,7 +30,15 @@ class QuestyCaptcha extends SimpleCaptcha {
function getCaptcha() {
global $wgCaptchaQuestions;
- return $wgCaptchaQuestions[mt_rand( 0, count( $wgCaptchaQuestions ) - 1 )]; // pick a question, any question
+
+ //Backwards compatibility
+ if ( $wgCaptchaQuestions === array_values( $wgCaptchaQuestions ) ) {
+ return $wgCaptchaQuestions[ mt_rand( 0, count( $wgCaptchaQuestions ) - 1 ) ];
+ }
+
+ $question = array_rand( $wgCaptchaQuestions, 1 );
+ $answer = $wgCaptchaQuestions[ $question ];
+ return array( 'question' => $question, 'answer' => $answer );
}
function getForm() {
diff --git a/extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.php b/extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.php
new file mode 100644
index 00000000..b83c4212
--- /dev/null
+++ b/extensions/ConfirmEdit/QuestyCaptcha/QuestyCaptcha.php
@@ -0,0 +1,13 @@
+<?php
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'ConfirmEdit/QuestyCaptcha' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['QuestyCaptcha'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for QuestyCaptcha extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the QuestyCaptcha extension requires MediaWiki 1.25+' );
+}
diff --git a/extensions/ConfirmEdit/QuestyCaptcha/extension.json b/extensions/ConfirmEdit/QuestyCaptcha/extension.json
new file mode 100644
index 00000000..257e561b
--- /dev/null
+++ b/extensions/ConfirmEdit/QuestyCaptcha/extension.json
@@ -0,0 +1,15 @@
+{
+ "name": "QuestyCaptcha",
+ "MessagesDirs": {
+ "QuestyCaptcha": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "QuestyCaptcha": "QuestyCaptcha.class.php"
+ },
+ "config": {
+ "CaptchaClass": "QuestyCaptcha",
+ "CaptchaQuestions": []
+ }
+}
diff --git a/extensions/ConfirmEdit/i18n/questy/aln.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/aln.json
index 515ef020..515ef020 100644
--- a/extensions/ConfirmEdit/i18n/questy/aln.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/aln.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ar.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ar.json
index 8e54bd3a..8e54bd3a 100644
--- a/extensions/ConfirmEdit/i18n/questy/ar.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ar.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ast.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ast.json
index 122b2d7a..122b2d7a 100644
--- a/extensions/ConfirmEdit/i18n/questy/ast.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ast.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ba.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ba.json
index c44baf3d..c44baf3d 100644
--- a/extensions/ConfirmEdit/i18n/questy/ba.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ba.json
diff --git a/extensions/ConfirmEdit/i18n/questy/be-tarask.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/be-tarask.json
index a312214a..a312214a 100644
--- a/extensions/ConfirmEdit/i18n/questy/be-tarask.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/be-tarask.json
diff --git a/extensions/ConfirmEdit/i18n/questy/br.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/br.json
index fa3b0571..fa3b0571 100644
--- a/extensions/ConfirmEdit/i18n/questy/br.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/br.json
diff --git a/extensions/ConfirmEdit/i18n/questy/bs.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/bs.json
index d075aea2..d075aea2 100644
--- a/extensions/ConfirmEdit/i18n/questy/bs.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/bs.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ca.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ca.json
index 75efba70..75efba70 100644
--- a/extensions/ConfirmEdit/i18n/questy/ca.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ca.json
diff --git a/extensions/ConfirmEdit/i18n/questy/cs.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/cs.json
index 889591b1..889591b1 100644
--- a/extensions/ConfirmEdit/i18n/questy/cs.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/cs.json
diff --git a/extensions/ConfirmEdit/i18n/questy/cy.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/cy.json
index 89ed9520..89ed9520 100644
--- a/extensions/ConfirmEdit/i18n/questy/cy.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/cy.json
diff --git a/extensions/ConfirmEdit/i18n/questy/de-formal.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/de-formal.json
index 4af39921..4af39921 100644
--- a/extensions/ConfirmEdit/i18n/questy/de-formal.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/de-formal.json
diff --git a/extensions/ConfirmEdit/i18n/questy/de.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/de.json
index 11046e86..11046e86 100644
--- a/extensions/ConfirmEdit/i18n/questy/de.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/de.json
diff --git a/extensions/ConfirmEdit/i18n/questy/dsb.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/dsb.json
index 795a1184..795a1184 100644
--- a/extensions/ConfirmEdit/i18n/questy/dsb.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/dsb.json
diff --git a/extensions/ConfirmEdit/i18n/questy/el.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/el.json
index eb6d6b90..eb6d6b90 100644
--- a/extensions/ConfirmEdit/i18n/questy/el.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/el.json
diff --git a/extensions/ConfirmEdit/i18n/questy/en.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/en.json
index 20996744..20996744 100644
--- a/extensions/ConfirmEdit/i18n/questy/en.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/en.json
diff --git a/extensions/ConfirmEdit/i18n/questy/eo.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/eo.json
index 53815a97..53815a97 100644
--- a/extensions/ConfirmEdit/i18n/questy/eo.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/eo.json
diff --git a/extensions/ConfirmEdit/i18n/questy/es.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/es.json
index 7dbf4d06..7dbf4d06 100644
--- a/extensions/ConfirmEdit/i18n/questy/es.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/es.json
diff --git a/extensions/ConfirmEdit/i18n/questy/et.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/et.json
index c6d159d8..c6d159d8 100644
--- a/extensions/ConfirmEdit/i18n/questy/et.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/et.json
diff --git a/extensions/ConfirmEdit/i18n/questy/eu.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/eu.json
index 5630e49c..5630e49c 100644
--- a/extensions/ConfirmEdit/i18n/questy/eu.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/eu.json
diff --git a/extensions/ConfirmEdit/i18n/questy/fa.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/fa.json
index e83a9a5c..e83a9a5c 100644
--- a/extensions/ConfirmEdit/i18n/questy/fa.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/fa.json
diff --git a/extensions/ConfirmEdit/i18n/questy/fi.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/fi.json
index 6307316d..6307316d 100644
--- a/extensions/ConfirmEdit/i18n/questy/fi.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/fi.json
diff --git a/extensions/ConfirmEdit/i18n/questy/fr.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/fr.json
index 0049c208..0049c208 100644
--- a/extensions/ConfirmEdit/i18n/questy/fr.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/fr.json
diff --git a/extensions/ConfirmEdit/i18n/questy/gl.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/gl.json
index b29505e4..b29505e4 100644
--- a/extensions/ConfirmEdit/i18n/questy/gl.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/gl.json
diff --git a/extensions/ConfirmEdit/i18n/questy/gsw.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/gsw.json
index d1bc823e..d1bc823e 100644
--- a/extensions/ConfirmEdit/i18n/questy/gsw.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/gsw.json
diff --git a/extensions/ConfirmEdit/i18n/questy/he.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/he.json
index c5588b17..c5588b17 100644
--- a/extensions/ConfirmEdit/i18n/questy/he.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/he.json
diff --git a/extensions/ConfirmEdit/i18n/questy/hsb.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/hsb.json
index 81aa74f5..81aa74f5 100644
--- a/extensions/ConfirmEdit/i18n/questy/hsb.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/hsb.json
diff --git a/extensions/ConfirmEdit/i18n/questy/hu.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/hu.json
index 438489f9..438489f9 100644
--- a/extensions/ConfirmEdit/i18n/questy/hu.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/hu.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ia.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ia.json
index b90c222e..b90c222e 100644
--- a/extensions/ConfirmEdit/i18n/questy/ia.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ia.json
diff --git a/extensions/ConfirmEdit/i18n/questy/id.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/id.json
index 9b815287..9b815287 100644
--- a/extensions/ConfirmEdit/i18n/questy/id.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/id.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ilo.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ilo.json
index ddf34740..ddf34740 100644
--- a/extensions/ConfirmEdit/i18n/questy/ilo.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ilo.json
diff --git a/extensions/ConfirmEdit/i18n/questy/it.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/it.json
index 274ae3fa..274ae3fa 100644
--- a/extensions/ConfirmEdit/i18n/questy/it.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/it.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ja.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ja.json
index 7c81976a..7c81976a 100644
--- a/extensions/ConfirmEdit/i18n/questy/ja.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ja.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ko.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ko.json
index a3ad7792..a3ad7792 100644
--- a/extensions/ConfirmEdit/i18n/questy/ko.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ko.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ksh.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ksh.json
index 7756e006..7756e006 100644
--- a/extensions/ConfirmEdit/i18n/questy/ksh.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ksh.json
diff --git a/extensions/ConfirmEdit/i18n/questy/lb.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/lb.json
index d14cdb40..d14cdb40 100644
--- a/extensions/ConfirmEdit/i18n/questy/lb.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/lb.json
diff --git a/extensions/ConfirmEdit/i18n/questy/min.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/min.json
index b0847c57..b0847c57 100644
--- a/extensions/ConfirmEdit/i18n/questy/min.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/min.json
diff --git a/extensions/ConfirmEdit/i18n/questy/mk.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/mk.json
index 1e9798b6..1e9798b6 100644
--- a/extensions/ConfirmEdit/i18n/questy/mk.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/mk.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ml.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ml.json
index 36dad278..36dad278 100644
--- a/extensions/ConfirmEdit/i18n/questy/ml.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ml.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ms.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ms.json
index f62403e1..f62403e1 100644
--- a/extensions/ConfirmEdit/i18n/questy/ms.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ms.json
diff --git a/extensions/ConfirmEdit/i18n/questy/mt.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/mt.json
index 797ce0e7..797ce0e7 100644
--- a/extensions/ConfirmEdit/i18n/questy/mt.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/mt.json
diff --git a/extensions/ConfirmEdit/i18n/questy/nb.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/nb.json
index db8db9dd..db8db9dd 100644
--- a/extensions/ConfirmEdit/i18n/questy/nb.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/nb.json
diff --git a/extensions/ConfirmEdit/i18n/questy/nl-informal.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/nl-informal.json
index 88cb921c..88cb921c 100644
--- a/extensions/ConfirmEdit/i18n/questy/nl-informal.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/nl-informal.json
diff --git a/extensions/ConfirmEdit/i18n/questy/nl.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/nl.json
index aacd31c7..aacd31c7 100644
--- a/extensions/ConfirmEdit/i18n/questy/nl.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/nl.json
diff --git a/extensions/ConfirmEdit/i18n/questy/nn.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/nn.json
index 97a52e38..97a52e38 100644
--- a/extensions/ConfirmEdit/i18n/questy/nn.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/nn.json
diff --git a/extensions/ConfirmEdit/i18n/questy/oc.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/oc.json
index 88b9661e..88b9661e 100644
--- a/extensions/ConfirmEdit/i18n/questy/oc.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/oc.json
diff --git a/extensions/ConfirmEdit/i18n/questy/pl.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/pl.json
index c4153c58..c4153c58 100644
--- a/extensions/ConfirmEdit/i18n/questy/pl.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/pl.json
diff --git a/extensions/ConfirmEdit/i18n/questy/pms.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/pms.json
index f493dc65..f493dc65 100644
--- a/extensions/ConfirmEdit/i18n/questy/pms.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/pms.json
diff --git a/extensions/ConfirmEdit/i18n/questy/pt-br.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/pt-br.json
index 76ffd543..76ffd543 100644
--- a/extensions/ConfirmEdit/i18n/questy/pt-br.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/pt-br.json
diff --git a/extensions/ConfirmEdit/i18n/questy/pt.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/pt.json
index a0a1c875..a0a1c875 100644
--- a/extensions/ConfirmEdit/i18n/questy/pt.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/pt.json
diff --git a/extensions/ConfirmEdit/i18n/questy/qqq.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/qqq.json
index 1050f275..1050f275 100644
--- a/extensions/ConfirmEdit/i18n/questy/qqq.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/qqq.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ro.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ro.json
index 3bf468a4..3bf468a4 100644
--- a/extensions/ConfirmEdit/i18n/questy/ro.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ro.json
diff --git a/extensions/ConfirmEdit/i18n/questy/roa-tara.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/roa-tara.json
index 18a8ebd9..18a8ebd9 100644
--- a/extensions/ConfirmEdit/i18n/questy/roa-tara.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/roa-tara.json
diff --git a/extensions/ConfirmEdit/i18n/questy/ru.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ru.json
index 3315d6b1..3315d6b1 100644
--- a/extensions/ConfirmEdit/i18n/questy/ru.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/ru.json
diff --git a/extensions/ConfirmEdit/i18n/questy/sk.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sk.json
index 71540c3d..71540c3d 100644
--- a/extensions/ConfirmEdit/i18n/questy/sk.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sk.json
diff --git a/extensions/ConfirmEdit/i18n/questy/sl.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sl.json
index ef859b64..ef859b64 100644
--- a/extensions/ConfirmEdit/i18n/questy/sl.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sl.json
diff --git a/extensions/ConfirmEdit/i18n/questy/so.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/so.json
index 18d7b902..18d7b902 100644
--- a/extensions/ConfirmEdit/i18n/questy/so.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/so.json
diff --git a/extensions/ConfirmEdit/i18n/questy/sr-ec.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sr-ec.json
index 7b4d5022..7b4d5022 100644
--- a/extensions/ConfirmEdit/i18n/questy/sr-ec.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sr-ec.json
diff --git a/extensions/ConfirmEdit/i18n/questy/sr-el.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sr-el.json
index bbf632b7..bbf632b7 100644
--- a/extensions/ConfirmEdit/i18n/questy/sr-el.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sr-el.json
diff --git a/extensions/ConfirmEdit/i18n/questy/sv.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sv.json
index 57cfbdfe..57cfbdfe 100644
--- a/extensions/ConfirmEdit/i18n/questy/sv.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/sv.json
diff --git a/extensions/ConfirmEdit/i18n/questy/te.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/te.json
index ec35d437..ec35d437 100644
--- a/extensions/ConfirmEdit/i18n/questy/te.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/te.json
diff --git a/extensions/ConfirmEdit/i18n/questy/th.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/th.json
index 6484f1ac..6484f1ac 100644
--- a/extensions/ConfirmEdit/i18n/questy/th.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/th.json
diff --git a/extensions/ConfirmEdit/i18n/questy/tl.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/tl.json
index 2eba96a4..2eba96a4 100644
--- a/extensions/ConfirmEdit/i18n/questy/tl.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/tl.json
diff --git a/extensions/ConfirmEdit/i18n/questy/tr.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/tr.json
index 982e97c5..982e97c5 100644
--- a/extensions/ConfirmEdit/i18n/questy/tr.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/tr.json
diff --git a/extensions/ConfirmEdit/i18n/questy/uk.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/uk.json
index 80f71182..80f71182 100644
--- a/extensions/ConfirmEdit/i18n/questy/uk.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/uk.json
diff --git a/extensions/ConfirmEdit/i18n/questy/wa.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/wa.json
index 282793b2..282793b2 100644
--- a/extensions/ConfirmEdit/i18n/questy/wa.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/wa.json
diff --git a/extensions/ConfirmEdit/i18n/questy/yi.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/yi.json
index 4e6f4386..4e6f4386 100644
--- a/extensions/ConfirmEdit/i18n/questy/yi.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/yi.json
diff --git a/extensions/ConfirmEdit/QuestyCaptcha/i18n/zh-hans.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/zh-hans.json
new file mode 100644
index 00000000..a8d73e53
--- /dev/null
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/zh-hans.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cwek",
+ "Fantasticfears",
+ "Mywood",
+ "Impersonator 1"
+ ]
+ },
+ "questycaptcha-desc": "用于确认编辑的问题验证码生成器",
+ "questycaptcha-addurl": "你的编辑包含新的外部链接。为保护本wiki免受自动垃圾程序的破坏,我们恳请你回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
+ "questycaptcha-badlogin": "为保护本wiki免受自动密码破解的破坏,我们恳请你回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
+ "questycaptcha-createaccount": "为保护本wiki免受自动账户创建的破坏,我们恳请你回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
+ "questycaptcha-create": "要创建页面,请回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
+ "questycaptcha-edit": "要编辑该页面,请回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
+ "questycaptcha-sendemail": "为保护本wiki免受自动垃圾程序的破坏,我们恳请你回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
+ "questycaptchahelp-text": "接受公众贡献者的网站,比如本wiki,经常受到使用自动工具添加垃圾网站链接的垃圾制造者的破坏。尽管这些链接可以被删除,它们仍然极其麻烦。\n\n有时,特别是给页面添加新的网络链接时,本wiki可能需要你回答问题。由于这是一项难以用自动工具完成的任务,它可以允许在大多数真人做出贡献的同时,阻止大多数垃圾制造者和其他自动攻击者。\n\n如果这项措施意外地阻止你进行正常的贡献,请与[[Special:ListAdmins|网站管理员]]联系获取帮助。\n\n点击浏览器的“后退”按钮返回页面编辑器。"
+}
diff --git a/extensions/ConfirmEdit/i18n/questy/zh-hant.json b/extensions/ConfirmEdit/QuestyCaptcha/i18n/zh-hant.json
index e8453078..e8453078 100644
--- a/extensions/ConfirmEdit/i18n/questy/zh-hant.json
+++ b/extensions/ConfirmEdit/QuestyCaptcha/i18n/zh-hant.json
diff --git a/extensions/ConfirmEdit/ReCaptcha.i18n.php b/extensions/ConfirmEdit/ReCaptcha.i18n.php
deleted file mode 100644
index 82ad11d2..00000000
--- a/extensions/ConfirmEdit/ReCaptcha.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim74b2af1eb76d9704' ) ) {
- function wfJsonI18nShim74b2af1eb76d9704( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/re/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim74b2af1eb76d9704';
-}
diff --git a/extensions/ConfirmEdit/ReCaptcha.php b/extensions/ConfirmEdit/ReCaptcha.php
index b474f982..0ecabd25 100644
--- a/extensions/ConfirmEdit/ReCaptcha.php
+++ b/extensions/ConfirmEdit/ReCaptcha.php
@@ -1,65 +1,2 @@
<?php
-
-/**
- * Captcha class using the reCAPTCHA widget.
- * Stop Spam. Read Books.
- *
- * @addtogroup Extensions
- * @author Mike Crawford <mike.crawford@gmail.com>
- * @copyright Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net
- * @licence MIT/X11
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
- exit;
-}
-
-$dir = __DIR__;
-require_once $dir . '/ConfirmEdit.php';
-$wgCaptchaClass = 'ReCaptcha';
-
-$wgMessagesDirs['ReCaptcha'] = __DIR__ . '/i18n/re';
-$wgExtensionMessagesFiles['ReCaptcha'] = $dir . '/ReCaptcha.i18n.php';
-
-$wgAutoloadClasses['ReCaptcha'] = $dir . '/ReCaptcha.class.php';
-
-require_once( 'recaptchalib.php' );
-
-// Set these in LocalSettings.php
-$wgReCaptchaPublicKey = '';
-$wgReCaptchaPrivateKey = '';
-// For backwards compatibility
-$recaptcha_public_key = '';
-$recaptcha_private_key = '';
-
-/**
- * Sets the theme for ReCaptcha
- *
- * See http://code.google.com/apis/recaptcha/docs/customization.html
- */
-$wgReCaptchaTheme = 'red';
-
-$wgExtensionFunctions[] = 'efReCaptcha';
-
-/**
- * Make sure the keys are defined.
- */
-function efReCaptcha() {
- global $wgReCaptchaPublicKey, $wgReCaptchaPrivateKey;
- global $recaptcha_public_key, $recaptcha_private_key;
- global $wgServerName;
-
- // Backwards compatibility
- if ( $wgReCaptchaPublicKey == '' ) {
- $wgReCaptchaPublicKey = $recaptcha_public_key;
- }
- if ( $wgReCaptchaPrivateKey == '' ) {
- $wgReCaptchaPrivateKey = $recaptcha_private_key;
- }
-
- if ( $wgReCaptchaPublicKey == '' || $wgReCaptchaPrivateKey == '' ) {
- die ( 'You need to set $wgReCaptchaPrivateKey and $wgReCaptchaPublicKey in LocalSettings.php to ' .
- "use the reCAPTCHA plugin. You can sign up for a key <a href='" .
- htmlentities( recaptcha_get_signup_url ( $wgServerName, "mediawiki" ) ) . "'>here</a>." );
- }
-}
+require_once __DIR__ . "/ReCaptcha/ReCaptcha.php";
diff --git a/extensions/ConfirmEdit/ReCaptcha.class.php b/extensions/ConfirmEdit/ReCaptcha/ReCaptcha.class.php
index cd274a97..cd274a97 100644
--- a/extensions/ConfirmEdit/ReCaptcha.class.php
+++ b/extensions/ConfirmEdit/ReCaptcha/ReCaptcha.class.php
diff --git a/extensions/ConfirmEdit/ReCaptcha/ReCaptcha.php b/extensions/ConfirmEdit/ReCaptcha/ReCaptcha.php
new file mode 100644
index 00000000..8a649faf
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptcha/ReCaptcha.php
@@ -0,0 +1,13 @@
+<?php
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'ConfirmEdit/ReCaptcha' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['ReCaptcha'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for ReCaptcha extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the Re^Captcha extension requires MediaWiki 1.25+' );
+}
diff --git a/extensions/ConfirmEdit/ReCaptcha/extension.json b/extensions/ConfirmEdit/ReCaptcha/extension.json
new file mode 100644
index 00000000..5f97810a
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptcha/extension.json
@@ -0,0 +1,21 @@
+{
+ "name": "ReCaptcha",
+ "ExtensionFunctions": [
+ "efReCaptcha"
+ ],
+ "MessagesDirs": {
+ "ReCaptcha": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "ReCaptcha": "ReCaptcha.class.php"
+ },
+ "config": {
+ "CaptchaClass": "ReCaptcha",
+ "ReCaptchaPublicKey": "",
+ "ReCaptchaPrivateKey": "",
+ "ReCaptchaTheme": "red"
+ },
+ "callback": "ConfirmEditHooks::onReCaptchaSetup"
+}
diff --git a/extensions/ConfirmEdit/i18n/re/ar.json b/extensions/ConfirmEdit/ReCaptcha/i18n/ar.json
index f328e93b..f328e93b 100644
--- a/extensions/ConfirmEdit/i18n/re/ar.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/ar.json
diff --git a/extensions/ConfirmEdit/i18n/re/ast.json b/extensions/ConfirmEdit/ReCaptcha/i18n/ast.json
index 4f4763b4..4f4763b4 100644
--- a/extensions/ConfirmEdit/i18n/re/ast.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/ast.json
diff --git a/extensions/ConfirmEdit/i18n/re/be-tarask.json b/extensions/ConfirmEdit/ReCaptcha/i18n/be-tarask.json
index dc44d634..dc44d634 100644
--- a/extensions/ConfirmEdit/i18n/re/be-tarask.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/be-tarask.json
diff --git a/extensions/ConfirmEdit/i18n/re/br.json b/extensions/ConfirmEdit/ReCaptcha/i18n/br.json
index 9f2a54e9..9f2a54e9 100644
--- a/extensions/ConfirmEdit/i18n/re/br.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/br.json
diff --git a/extensions/ConfirmEdit/i18n/re/bs.json b/extensions/ConfirmEdit/ReCaptcha/i18n/bs.json
index 6290f98d..6290f98d 100644
--- a/extensions/ConfirmEdit/i18n/re/bs.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/bs.json
diff --git a/extensions/ConfirmEdit/i18n/re/cs.json b/extensions/ConfirmEdit/ReCaptcha/i18n/cs.json
index 4e78eb99..4e78eb99 100644
--- a/extensions/ConfirmEdit/i18n/re/cs.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/cs.json
diff --git a/extensions/ConfirmEdit/i18n/re/cy.json b/extensions/ConfirmEdit/ReCaptcha/i18n/cy.json
index 27cef7cc..27cef7cc 100644
--- a/extensions/ConfirmEdit/i18n/re/cy.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/cy.json
diff --git a/extensions/ConfirmEdit/i18n/re/de-formal.json b/extensions/ConfirmEdit/ReCaptcha/i18n/de-formal.json
index aacaf4f5..aacaf4f5 100644
--- a/extensions/ConfirmEdit/i18n/re/de-formal.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/de-formal.json
diff --git a/extensions/ConfirmEdit/i18n/re/de.json b/extensions/ConfirmEdit/ReCaptcha/i18n/de.json
index c0b98b5f..c0b98b5f 100644
--- a/extensions/ConfirmEdit/i18n/re/de.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/de.json
diff --git a/extensions/ConfirmEdit/i18n/re/dsb.json b/extensions/ConfirmEdit/ReCaptcha/i18n/dsb.json
index 546db343..546db343 100644
--- a/extensions/ConfirmEdit/i18n/re/dsb.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/dsb.json
diff --git a/extensions/ConfirmEdit/i18n/re/en.json b/extensions/ConfirmEdit/ReCaptcha/i18n/en.json
index 1f40166d..1f40166d 100644
--- a/extensions/ConfirmEdit/i18n/re/en.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/en.json
diff --git a/extensions/ConfirmEdit/i18n/re/es.json b/extensions/ConfirmEdit/ReCaptcha/i18n/es.json
index 9ccbef30..9ccbef30 100644
--- a/extensions/ConfirmEdit/i18n/re/es.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/es.json
diff --git a/extensions/ConfirmEdit/i18n/re/fa.json b/extensions/ConfirmEdit/ReCaptcha/i18n/fa.json
index 8e5e6ee1..8e5e6ee1 100644
--- a/extensions/ConfirmEdit/i18n/re/fa.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/fa.json
diff --git a/extensions/ConfirmEdit/i18n/re/fi.json b/extensions/ConfirmEdit/ReCaptcha/i18n/fi.json
index 59ef145a..59ef145a 100644
--- a/extensions/ConfirmEdit/i18n/re/fi.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/fi.json
diff --git a/extensions/ConfirmEdit/i18n/re/fr.json b/extensions/ConfirmEdit/ReCaptcha/i18n/fr.json
index ea3eb0a2..ea3eb0a2 100644
--- a/extensions/ConfirmEdit/i18n/re/fr.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/fr.json
diff --git a/extensions/ConfirmEdit/i18n/re/gl.json b/extensions/ConfirmEdit/ReCaptcha/i18n/gl.json
index f57ac76a..f57ac76a 100644
--- a/extensions/ConfirmEdit/i18n/re/gl.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/gl.json
diff --git a/extensions/ConfirmEdit/i18n/re/gsw.json b/extensions/ConfirmEdit/ReCaptcha/i18n/gsw.json
index 6407d0f7..6407d0f7 100644
--- a/extensions/ConfirmEdit/i18n/re/gsw.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/gsw.json
diff --git a/extensions/ConfirmEdit/i18n/re/he.json b/extensions/ConfirmEdit/ReCaptcha/i18n/he.json
index e9dcec87..e9dcec87 100644
--- a/extensions/ConfirmEdit/i18n/re/he.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/he.json
diff --git a/extensions/ConfirmEdit/i18n/re/hsb.json b/extensions/ConfirmEdit/ReCaptcha/i18n/hsb.json
index c37e61f2..c37e61f2 100644
--- a/extensions/ConfirmEdit/i18n/re/hsb.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/hsb.json
diff --git a/extensions/ConfirmEdit/i18n/re/ia.json b/extensions/ConfirmEdit/ReCaptcha/i18n/ia.json
index 9df3bc12..9df3bc12 100644
--- a/extensions/ConfirmEdit/i18n/re/ia.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/ia.json
diff --git a/extensions/ConfirmEdit/i18n/re/id.json b/extensions/ConfirmEdit/ReCaptcha/i18n/id.json
index 45b3df2d..45b3df2d 100644
--- a/extensions/ConfirmEdit/i18n/re/id.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/id.json
diff --git a/extensions/ConfirmEdit/i18n/re/it.json b/extensions/ConfirmEdit/ReCaptcha/i18n/it.json
index f4da7d4c..f4da7d4c 100644
--- a/extensions/ConfirmEdit/i18n/re/it.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/it.json
diff --git a/extensions/ConfirmEdit/i18n/re/ja.json b/extensions/ConfirmEdit/ReCaptcha/i18n/ja.json
index 9f07a7c4..9f07a7c4 100644
--- a/extensions/ConfirmEdit/i18n/re/ja.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/ja.json
diff --git a/extensions/ConfirmEdit/i18n/re/ko.json b/extensions/ConfirmEdit/ReCaptcha/i18n/ko.json
index 83522f6d..83522f6d 100644
--- a/extensions/ConfirmEdit/i18n/re/ko.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/ko.json
diff --git a/extensions/ConfirmEdit/i18n/re/ksh.json b/extensions/ConfirmEdit/ReCaptcha/i18n/ksh.json
index 8bb7cf94..8bb7cf94 100644
--- a/extensions/ConfirmEdit/i18n/re/ksh.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/ksh.json
diff --git a/extensions/ConfirmEdit/i18n/re/lb.json b/extensions/ConfirmEdit/ReCaptcha/i18n/lb.json
index d6060b47..d6060b47 100644
--- a/extensions/ConfirmEdit/i18n/re/lb.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/lb.json
diff --git a/extensions/ConfirmEdit/i18n/re/mk.json b/extensions/ConfirmEdit/ReCaptcha/i18n/mk.json
index 32274ddc..32274ddc 100644
--- a/extensions/ConfirmEdit/i18n/re/mk.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/mk.json
diff --git a/extensions/ConfirmEdit/i18n/re/ms.json b/extensions/ConfirmEdit/ReCaptcha/i18n/ms.json
index 5d43a353..5d43a353 100644
--- a/extensions/ConfirmEdit/i18n/re/ms.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/ms.json
diff --git a/extensions/ConfirmEdit/i18n/re/mt.json b/extensions/ConfirmEdit/ReCaptcha/i18n/mt.json
index fd799424..fd799424 100644
--- a/extensions/ConfirmEdit/i18n/re/mt.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/mt.json
diff --git a/extensions/ConfirmEdit/i18n/re/nb.json b/extensions/ConfirmEdit/ReCaptcha/i18n/nb.json
index 7cc7da16..7cc7da16 100644
--- a/extensions/ConfirmEdit/i18n/re/nb.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/nb.json
diff --git a/extensions/ConfirmEdit/i18n/re/nl-informal.json b/extensions/ConfirmEdit/ReCaptcha/i18n/nl-informal.json
index f321d6a0..f321d6a0 100644
--- a/extensions/ConfirmEdit/i18n/re/nl-informal.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/nl-informal.json
diff --git a/extensions/ConfirmEdit/i18n/re/nl.json b/extensions/ConfirmEdit/ReCaptcha/i18n/nl.json
index a108f255..a108f255 100644
--- a/extensions/ConfirmEdit/i18n/re/nl.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/nl.json
diff --git a/extensions/ConfirmEdit/i18n/re/oc.json b/extensions/ConfirmEdit/ReCaptcha/i18n/oc.json
index 657f9f90..657f9f90 100644
--- a/extensions/ConfirmEdit/i18n/re/oc.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/oc.json
diff --git a/extensions/ConfirmEdit/i18n/re/pl.json b/extensions/ConfirmEdit/ReCaptcha/i18n/pl.json
index 1a94b709..1a94b709 100644
--- a/extensions/ConfirmEdit/i18n/re/pl.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/pl.json
diff --git a/extensions/ConfirmEdit/i18n/re/pms.json b/extensions/ConfirmEdit/ReCaptcha/i18n/pms.json
index 7f25a5f3..7f25a5f3 100644
--- a/extensions/ConfirmEdit/i18n/re/pms.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/pms.json
diff --git a/extensions/ConfirmEdit/i18n/re/pt-br.json b/extensions/ConfirmEdit/ReCaptcha/i18n/pt-br.json
index c0a101ef..c0a101ef 100644
--- a/extensions/ConfirmEdit/i18n/re/pt-br.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/pt-br.json
diff --git a/extensions/ConfirmEdit/i18n/re/pt.json b/extensions/ConfirmEdit/ReCaptcha/i18n/pt.json
index ff48c572..ff48c572 100644
--- a/extensions/ConfirmEdit/i18n/re/pt.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/pt.json
diff --git a/extensions/ConfirmEdit/i18n/re/qqq.json b/extensions/ConfirmEdit/ReCaptcha/i18n/qqq.json
index 4a39d9c4..4a39d9c4 100644
--- a/extensions/ConfirmEdit/i18n/re/qqq.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/qqq.json
diff --git a/extensions/ConfirmEdit/i18n/re/roa-tara.json b/extensions/ConfirmEdit/ReCaptcha/i18n/roa-tara.json
index 8e743e05..8e743e05 100644
--- a/extensions/ConfirmEdit/i18n/re/roa-tara.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/roa-tara.json
diff --git a/extensions/ConfirmEdit/i18n/re/ru.json b/extensions/ConfirmEdit/ReCaptcha/i18n/ru.json
index 64d48523..64d48523 100644
--- a/extensions/ConfirmEdit/i18n/re/ru.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/ru.json
diff --git a/extensions/ConfirmEdit/i18n/re/si.json b/extensions/ConfirmEdit/ReCaptcha/i18n/si.json
index c6ab0ee2..c6ab0ee2 100644
--- a/extensions/ConfirmEdit/i18n/re/si.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/si.json
diff --git a/extensions/ConfirmEdit/i18n/re/sr-ec.json b/extensions/ConfirmEdit/ReCaptcha/i18n/sr-ec.json
index b1d49d49..b1d49d49 100644
--- a/extensions/ConfirmEdit/i18n/re/sr-ec.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/sr-ec.json
diff --git a/extensions/ConfirmEdit/i18n/re/sr-el.json b/extensions/ConfirmEdit/ReCaptcha/i18n/sr-el.json
index 1781239b..1781239b 100644
--- a/extensions/ConfirmEdit/i18n/re/sr-el.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/sr-el.json
diff --git a/extensions/ConfirmEdit/i18n/re/sv.json b/extensions/ConfirmEdit/ReCaptcha/i18n/sv.json
index a625398f..a625398f 100644
--- a/extensions/ConfirmEdit/i18n/re/sv.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/sv.json
diff --git a/extensions/ConfirmEdit/i18n/re/sw.json b/extensions/ConfirmEdit/ReCaptcha/i18n/sw.json
index 245de04c..245de04c 100644
--- a/extensions/ConfirmEdit/i18n/re/sw.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/sw.json
diff --git a/extensions/ConfirmEdit/i18n/re/te.json b/extensions/ConfirmEdit/ReCaptcha/i18n/te.json
index 9b994825..9b994825 100644
--- a/extensions/ConfirmEdit/i18n/re/te.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/te.json
diff --git a/extensions/ConfirmEdit/i18n/re/tl.json b/extensions/ConfirmEdit/ReCaptcha/i18n/tl.json
index 6b843b72..6b843b72 100644
--- a/extensions/ConfirmEdit/i18n/re/tl.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/tl.json
diff --git a/extensions/ConfirmEdit/i18n/re/uk.json b/extensions/ConfirmEdit/ReCaptcha/i18n/uk.json
index 172b2974..172b2974 100644
--- a/extensions/ConfirmEdit/i18n/re/uk.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/uk.json
diff --git a/extensions/ConfirmEdit/i18n/re/vi.json b/extensions/ConfirmEdit/ReCaptcha/i18n/vi.json
index a8888c40..a8888c40 100644
--- a/extensions/ConfirmEdit/i18n/re/vi.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/vi.json
diff --git a/extensions/ConfirmEdit/i18n/re/zh-hans.json b/extensions/ConfirmEdit/ReCaptcha/i18n/zh-hans.json
index df915f45..df915f45 100644
--- a/extensions/ConfirmEdit/i18n/re/zh-hans.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/zh-hans.json
diff --git a/extensions/ConfirmEdit/i18n/re/zh-hant.json b/extensions/ConfirmEdit/ReCaptcha/i18n/zh-hant.json
index c920d527..c920d527 100644
--- a/extensions/ConfirmEdit/i18n/re/zh-hant.json
+++ b/extensions/ConfirmEdit/ReCaptcha/i18n/zh-hant.json
diff --git a/extensions/ConfirmEdit/recaptchalib.php b/extensions/ConfirmEdit/ReCaptcha/recaptchalib.php
index a04f5673..a04f5673 100644
--- a/extensions/ConfirmEdit/recaptchalib.php
+++ b/extensions/ConfirmEdit/ReCaptcha/recaptchalib.php
diff --git a/extensions/ConfirmEdit/Captcha.php b/extensions/ConfirmEdit/SimpleCaptcha/Captcha.php
index 995feb47..21ba842c 100644
--- a/extensions/ConfirmEdit/Captcha.php
+++ b/extensions/ConfirmEdit/SimpleCaptcha/Captcha.php
@@ -1,6 +1,11 @@
<?php
class SimpleCaptcha {
+ private $showEditCaptcha = false;
+
+ /** @var boolean|null Was the CAPTCHA already passed and if yes, with which result? */
+ private $captchaSolved = null;
+
function getCaptcha() {
$a = mt_rand( 0, 100 );
$b = mt_rand( 0, 10 );
@@ -55,12 +60,55 @@ class SimpleCaptcha {
}
/**
- * Insert the captcha prompt into an edit form.
+ * Show error message for missing or incorrect captcha on EditPage.
+ * @param EditPage $editPage
* @param OutputPage $out
*/
- function editCallback( &$out ) {
- $out->addWikiText( $this->getMessage( $this->action ) );
- $out->addHTML( $this->getForm() );
+ function showEditFormFields( &$editPage, &$out ) {
+ $page = $editPage->getArticle()->getPage();
+ if ( !isset( $page->ConfirmEdit_ActivateCaptcha ) ) {
+ return;
+ }
+ unset( $page->ConfirmEdit_ActivateCaptcha );
+ $out->addHTML(
+ Html::openElement(
+ 'div',
+ array(
+ 'id' => 'mw-confirmedit-error-area',
+ 'class' => 'errorbox'
+ )
+ ) .
+ Html::element(
+ 'strong',
+ array(),
+ $out->msg( 'errorpagetitle' )->text()
+ ) .
+ Html::element(
+ 'div',
+ array( 'id' => 'errorbox-body' ),
+ $out->msg( 'captcha-sendemail-fail' )->text()
+ ) .
+ Html::closeElement( 'div' )
+ );
+ $this->showEditCaptcha = true;
+ }
+
+ /**
+ * Insert the captcha prompt into an edit form.
+ * @param EditPage $editPage
+ */
+ function editShowCaptcha( $editPage ) {
+ $context = $editPage->getArticle()->getContext();
+ $page = $editPage->getArticle()->getPage();
+ $out = $context->getOutput();
+ if ( isset( $page->ConfirmEdit_ActivateCaptcha ) ||
+ $this->showEditCaptcha ||
+ $this->shouldCheck( $page, '', '', false )
+ ) {
+ $out->addWikiText( $this->getMessage( $this->action ) );
+ $out->addHTML( $this->getForm() );
+ }
+ unset( $page->ConfirmEdit_ActivateCaptcha );
}
/**
@@ -87,6 +135,7 @@ class SimpleCaptcha {
function injectEmailUser( &$form ) {
global $wgCaptchaTriggers, $wgOut, $wgUser;
if ( $wgCaptchaTriggers['sendemail'] ) {
+ $this->action = 'sendemail';
if ( $wgUser->isAllowed( 'skipcaptcha' ) ) {
wfDebug( "ConfirmEdit: user group allows skipping captcha on email sending\n" );
return true;
@@ -109,15 +158,21 @@ class SimpleCaptcha {
function injectUserCreate( &$template ) {
global $wgCaptchaTriggers, $wgOut, $wgUser;
if ( $wgCaptchaTriggers['createaccount'] ) {
+ $this->action = 'usercreate';
if ( $wgUser->isAllowed( 'skipcaptcha' ) ) {
wfDebug( "ConfirmEdit: user group allows skipping captcha on account creation\n" );
return true;
}
- $template->set( 'header',
- "<div class='captcha'>" .
+ $captcha = "<div class='captcha'>" .
$wgOut->parse( $this->getMessage( 'createaccount' ) ) .
$this->getForm() .
- "</div>\n" );
+ "</div>\n";
+ // for older MediaWiki versions
+ if ( is_callable( array( $template, 'extend' ) ) ) {
+ $template->extend( 'extrafields', $captcha );
+ } else {
+ $template->set( 'header', $captcha );
+ }
}
return true;
}
@@ -132,11 +187,18 @@ class SimpleCaptcha {
function injectUserLogin( &$template ) {
if ( $this->isBadLoginTriggered() ) {
global $wgOut;
- $template->set( 'header',
- "<div class='captcha'>" .
+
+ $this->action = 'badlogin';
+ $captcha = "<div class='captcha'>" .
$wgOut->parse( $this->getMessage( 'badlogin' ) ) .
$this->getForm() .
- "</div>\n" );
+ "</div>\n";
+ // for older MediaWiki versions
+ if ( is_callable( array( $template, 'extend' ) ) ) {
+ $template->extend( 'extrafields', $captcha );
+ } else {
+ $template->set( 'header', $captcha );
+ }
}
return true;
}
@@ -223,29 +285,50 @@ class SimpleCaptcha {
// ----------------------------------
/**
- * @param EditPage $editPage
+ * @param Title $title
* @param string $action (edit/create/addurl...)
- * @return bool true if action triggers captcha on editPage's namespace
+ * @return bool true if action triggers captcha on $title's namespace
*/
- function captchaTriggers( &$editPage, $action ) {
+ function captchaTriggers( $title, $action ) {
global $wgCaptchaTriggers, $wgCaptchaTriggersOnNamespace;
// Special config for this NS?
- if ( isset( $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action] ) )
- return $wgCaptchaTriggersOnNamespace[$editPage->mTitle->getNamespace()][$action];
+ if ( isset( $wgCaptchaTriggersOnNamespace[$title->getNamespace()][$action] ) )
+ return $wgCaptchaTriggersOnNamespace[$title->getNamespace()][$action];
return ( !empty( $wgCaptchaTriggers[$action] ) ); // Default
}
/**
- * @param $editPage EditPage
- * @param $newtext string
+ * @param WikiPage $page
+ * @param $content Content|string
* @param $section string
- * @param $merged bool
+ * @param $isContent bool If true, $content is a Content object
+ * @param $oldtext string The content of the revision prior to $content. When
+ * null this will be loaded from the database.
* @return bool true if the captcha should run
*/
- function shouldCheck( &$editPage, $newtext, $section, $merged = false ) {
+ function shouldCheck( WikiPage $page, $content, $section, $isContent = false, $oldtext = null ) {
+ $title = $page->getTitle();
$this->trigger = '';
- $title = $editPage->mArticle->getTitle();
+
+ if ( $oldtext === null ) {
+ global $wgRequest;
+ $loadOldtextFlags = $wgRequest->wasPosted()
+ ? Revision::READ_LATEST
+ : Revision::READ_NORMAL;
+ }
+
+ if ( $isContent ) {
+ if ( $content->getModel() == CONTENT_MODEL_WIKITEXT ) {
+ $newtext = $content->getNativeData();
+ } else {
+ $newtext = null;
+ }
+ $isEmpty = $content->isEmpty();
+ } else {
+ $newtext = $content;
+ $isEmpty = $content === '';
+ }
global $wgUser;
if ( $wgUser->isAllowed( 'skipcaptcha' ) ) {
@@ -263,7 +346,7 @@ class SimpleCaptcha {
return false;
}
- if ( $this->captchaTriggers( $editPage, 'edit' ) ) {
+ if ( $this->captchaTriggers( $title, 'edit' ) ) {
// Check on all edits
global $wgUser;
$this->trigger = sprintf( "edit trigger by '%s' at [[%s]]",
@@ -274,7 +357,7 @@ class SimpleCaptcha {
return true;
}
- if ( $this->captchaTriggers( $editPage, 'create' ) && !$editPage->mTitle->exists() ) {
+ if ( $this->captchaTriggers( $title, 'create' ) && !$title->exists() ) {
// Check if creating a page
global $wgUser;
$this->trigger = sprintf( "Create trigger by '%s' at [[%s]]",
@@ -285,19 +368,23 @@ class SimpleCaptcha {
return true;
}
- if ( $this->captchaTriggers( $editPage, 'addurl' ) ) {
+ if ( !$isEmpty && $this->captchaTriggers( $title, 'addurl' ) ) {
// Only check edits that add URLs
- if ( $merged ) {
+ if ( $isContent ) {
// Get links from the database
$oldLinks = $this->getLinksFromTracker( $title );
// Share a parse operation with Article::doEdit()
- $editInfo = $editPage->mArticle->prepareTextForEdit( $newtext );
- $newLinks = array_keys( $editInfo->output->getExternalLinks() );
+ $editInfo = $page->prepareContentForEdit( $content );
+ if ( $editInfo->output ) {
+ $newLinks = array_keys( $editInfo->output->getExternalLinks() );
+ } else {
+ $newLinks = array();
+ }
} else {
// Get link changes in the slowest way known to man
- $oldtext = $this->loadText( $editPage, $section );
- $oldLinks = $this->findLinks( $editPage, $oldtext );
- $newLinks = $this->findLinks( $editPage, $newtext );
+ $oldtext = isset( $oldtext ) ? $oldtext : $this->loadText( $title, $section, $loadOldtextFlags );
+ $oldLinks = $this->findLinks( $title, $oldtext );
+ $newLinks = $this->findLinks( $title, $newtext );
}
$unknownLinks = array_filter( $newLinks, array( &$this, 'filterLink' ) );
@@ -317,9 +404,9 @@ class SimpleCaptcha {
}
global $wgCaptchaRegexes;
- if ( $wgCaptchaRegexes ) {
+ if ( $newtext !== null && $wgCaptchaRegexes ) {
// Custom regex checks. Reuse $oldtext if set above.
- $oldtext = isset( $oldtext ) ? $oldtext : $this->loadText( $editPage, $section );
+ $oldtext = isset( $oldtext ) ? $oldtext : $this->loadText( $title, $section, $loadOldtextFlags );
foreach ( $wgCaptchaRegexes as $regex ) {
$newMatches = array();
@@ -403,7 +490,7 @@ class SimpleCaptcha {
// return '/' . str_replace( '/', '\/', preg_replace('|\\\*/|', '/', $regex) ) . '/Si';
$regexes = array();
$regexStart = array(
- 'normal' => '/^https?:\/\/+[a-z0-9_\-.]*(?:',
+ 'normal' => '/^(?:https?:)?\/\/+[a-z0-9_\-.]*(?:',
'noprotocol' => '/^(?:',
);
$regexEnd = array(
@@ -472,13 +559,13 @@ class SimpleCaptcha {
/**
* Backend function for confirmEdit() and confirmEditAPI()
- * @param $editPage EditPage
+ * @param WikiPage $page
* @param $newtext string
* @param $section
- * @param $merged bool
+ * @param $isContent bool
* @return bool false if the CAPTCHA is rejected, true otherwise
*/
- private function doConfirmEdit( $editPage, $newtext, $section, $merged = false ) {
+ private function doConfirmEdit( WikiPage $page, $newtext, $section, $isContent = false ) {
global $wgRequest;
if ( $wgRequest->getVal( 'captchaid' ) ) {
$wgRequest->setVal( 'wpCaptchaId', $wgRequest->getVal( 'captchaid' ) );
@@ -486,8 +573,8 @@ class SimpleCaptcha {
if ( $wgRequest->getVal( 'captchaword' ) ) {
$wgRequest->setVal( 'wpCaptchaWord', $wgRequest->getVal( 'captchaword' ) );
}
- if ( $this->shouldCheck( $editPage, $newtext, $section, $merged ) ) {
- return $this->passCaptcha();
+ if ( $this->shouldCheck( $page, $newtext, $section, $isContent ) ) {
+ return $this->passCaptchaLimited();
} else {
wfDebug( "ConfirmEdit: no need to show captcha.\n" );
return true;
@@ -495,38 +582,39 @@ class SimpleCaptcha {
}
/**
- * The main callback run on edit attempts.
- * @param EditPage $editPage
- * @param string $newtext
- * @param string $section
- * @param bool $merged
- * @return bool true to continue saving, false to abort and show a captcha form
+ * An efficient edit filter callback based on the text after section merging
+ * @param RequestContext $context
+ * @param Content $content
+ * @param Status $status
+ * @param $summary
+ * @param $user
+ * @param $minorEdit
+ * @return bool
*/
- function confirmEdit( $editPage, $newtext, $section, $merged = false ) {
- if ( defined( 'MW_API' ) ) {
+ function confirmEditMerged( $context, $content, $status, $summary, $user, $minorEdit ) {
+ $legacyMode = !defined( 'MW_EDITFILTERMERGED_SUPPORTS_API' );
+ if ( defined( 'MW_API' ) && $legacyMode ) {
# API mode
# The CAPTCHA was already checked and approved
return true;
}
- if ( !$this->doConfirmEdit( $editPage, $newtext, $section, $merged ) ) {
- $editPage->showEditForm( array( &$this, 'editCallback' ) );
- return false;
+ $page = $context->getWikiPage();
+ if ( !$this->doConfirmEdit( $page, $content, false, true ) ) {
+ if ( $legacyMode ) {
+ $status->fatal( 'hookaborted' );
+ }
+ $status->value = EditPage::AS_HOOK_ERROR_EXPECTED;
+ $status->apiHookResult = array();
+ $this->addCaptchaAPI( $status->apiHookResult );
+ $page->ConfirmEdit_ActivateCaptcha = true;
+ return $legacyMode;
}
return true;
}
- /**
- * A more efficient edit filter callback based on the text after section merging
- * @param EditPage $editPage
- * @param string $newtext
- * @return bool
- */
- function confirmEditMerged( $editPage, $newtext ) {
- return $this->confirmEdit( $editPage, $newtext, false, true );
- }
-
- function confirmEditAPI( $editPage, $newtext, &$resultArr ) {
- if ( !$this->doConfirmEdit( $editPage, $newtext, false, false ) ) {
+ function confirmEditAPI( $editPage, $newText, &$resultArr ) {
+ $page = $editPage->getArticle()->getPage();
+ if ( !$this->doConfirmEdit( $page, $newText, false, false ) ) {
$this->addCaptchaAPI( $resultArr );
return false;
}
@@ -544,12 +632,12 @@ class SimpleCaptcha {
function confirmUserCreate( $u, &$message, &$status = null ) {
if ( $this->needCreateAccountCaptcha() ) {
$this->trigger = "new account '" . $u->getName() . "'";
- if ( !$this->passCaptcha() ) {
+ if ( !$this->passCaptchaLimited() ) {
// For older MediaWiki
$message = wfMessage( 'captcha-createaccount-fail' )->text();
// For MediaWiki 1.23+
$status = Status::newGood();
-
+
// Apply a *non*-fatal warning. This will still abort the
// account creation but returns a "Warning" response to the
// API or UI.
@@ -559,7 +647,7 @@ class SimpleCaptcha {
}
return true;
}
-
+
/**
* Logic to check if we need to pass a captcha for the current user
* to create a new account, or not
@@ -594,7 +682,7 @@ class SimpleCaptcha {
return true;
$this->trigger = "post-badlogin login '" . $u->getName() . "'";
- if ( !$this->passCaptcha() ) {
+ if ( !$this->passCaptchaLimited() ) {
// Emulate a bad-password return to confuse the shit out of attackers
$retval = LoginForm::WRONG_PASS;
return false;
@@ -629,7 +717,7 @@ class SimpleCaptcha {
return false;
}
$this->trigger = "{$wgUser->getName()} sending email";
- if ( !$this->passCaptcha() ) {
+ if ( !$this->passCaptchaLimited() ) {
$error = wfMessage( 'captcha-sendemail-fail' )->text();
return false;
}
@@ -652,7 +740,7 @@ class SimpleCaptcha {
* @return bool
*/
public function APIGetAllowedParams( &$module, &$params, $flags ) {
- if ( $flags && $this->isAPICaptchaModule( $module ) ) {
+ if ( $this->isAPICaptchaModule( $module ) ) {
$params['captchaword'] = null;
$params['captchaid'] = null;
}
@@ -675,21 +763,55 @@ class SimpleCaptcha {
}
/**
+ * Checks, if the user reached the amount of false CAPTCHAs and give him some vacation
+ * or run self::passCaptcha() and clear counter if correct.
+ *
+ * @see self::passCaptcha()
+ */
+ private function passCaptchaLimited() {
+ global $wgUser;
+
+ // don't increase pingLimiter here, just check, if CAPTCHA limit exceeded
+ if ( $wgUser->pingLimiter( 'badcaptcha', 0 ) ) {
+ // for debugging add an proper error message, the user just see an false captcha error message
+ wfDebug( 'ConfirmEdit: User reached RateLimit, preventing action.' );
+ return false;
+ }
+
+ if ( $this->passCaptcha() ) {
+ return true;
+ }
+
+ // captcha was not solved: increase limit and return false
+ $wgUser->pingLimiter( 'badcaptcha' );
+ return false;
+ }
+
+ /**
* Given a required captcha run, test form input for correct
* input on the open session.
* @return bool if passed, false if failed or new session
*/
function passCaptcha() {
- $info = $this->retrieveCaptcha();
+ global $wgRequest;
+
+ // Don't check the same CAPTCHA twice in one session, if the CAPTCHA was already checked - Bug T94276
+ if ( isset( $this->captchaSolved ) ) {
+ return $this->captchaSolved;
+ }
+
+ $info = $this->retrieveCaptcha( $wgRequest );
if ( $info ) {
global $wgRequest;
if ( $this->keyMatch( $wgRequest->getVal( 'wpCaptchaWord' ), $info ) ) {
$this->log( "passed" );
$this->clearCaptcha( $info );
+ $this->captchaSolved = true;
return true;
} else {
$this->clearCaptcha( $info );
$this->log( "bad form input" );
+ $this->captchaSolved = false;
return false;
}
} else {
@@ -746,13 +868,14 @@ class SimpleCaptcha {
/**
* Retrieve the current version of the page or section being edited...
- * @param EditPage $editPage
+ * @param Title $title
* @param string $section
+ * @param integer $flags Flags for Revision loading methods
* @return string
* @access private
*/
- function loadText( $editPage, $section ) {
- $rev = Revision::newFromTitle( $editPage->mTitle, false, Revision::READ_LATEST );
+ function loadText( $title, $section, $flags = Revision::READ_LATEST ) {
+ $rev = Revision::newFromTitle( $title, false, $flags );
if ( is_null( $rev ) ) {
return "";
} else {
@@ -768,16 +891,16 @@ class SimpleCaptcha {
/**
* Extract a list of all recognized HTTP links in the text.
- * @param $editpage EditPage
+ * @param $title Title
* @param $text string
* @return array of strings
*/
- function findLinks( &$editpage, $text ) {
+ function findLinks( $title, $text ) {
global $wgParser, $wgUser;
$options = new ParserOptions();
- $text = $wgParser->preSaveTransform( $text, $editpage->mTitle, $wgUser, $options );
- $out = $wgParser->parse( $text, $editpage->mTitle, $options );
+ $text = $wgParser->preSaveTransform( $text, $title, $wgUser, $options );
+ $out = $wgParser->parse( $text, $title, $options );
return array_keys( $out->getExternalLinks() );
}
diff --git a/extensions/ConfirmEdit/blacklist b/extensions/ConfirmEdit/blacklist
index 881445f5..966b03ca 100644
--- a/extensions/ConfirmEdit/blacklist
+++ b/extensions/ConfirmEdit/blacklist
@@ -39,6 +39,7 @@ idiot
islam
jerk
jesus
+judea
kill
labia
lie
diff --git a/extensions/ConfirmEdit/captcha.py b/extensions/ConfirmEdit/captcha.py
index 558b9fab..222dfb9c 100644
--- a/extensions/ConfirmEdit/captcha.py
+++ b/extensions/ConfirmEdit/captcha.py
@@ -39,6 +39,7 @@ try:
import ImageDraw
import ImageEnhance
import ImageOps
+ import ImageMath
except:
sys.exit("This script requires the Python Imaging Library - http://www.pythonware.com/products/pil/")
@@ -49,7 +50,7 @@ def wobbly_copy(src, wob, col, scale, ang):
x, y = src.size
f = random.uniform(4*scale, 5*scale)
p = random.uniform(0, math.pi*2)
- rr = ang+random.uniform(-30, 30) # vary, but not too much
+ rr = ang+random.uniform(-10, 10) # vary, but not too much
int_d = Image.new('RGB', src.size, 0) # a black rectangle
rot = src.rotate(rr, Image.BILINEAR)
# Do a cheap bounding-box op here to try to limit work below
@@ -86,8 +87,8 @@ def gen_captcha(text, fontname, fontsize, file_name):
x, y = im.size
# add the text to the image
d.text((x/2-dim[0]/2, y/2-dim[1]/2), text, font=font, fill=fgcolor)
- k = 3
- wob = 0.20*dim[1]/k
+ k = 2
+ wob = 0.09*dim[1]
rot = 45
# Apply lots of small stirring operations, rather than a few large ones
# in order to get some uniformity of treatment, whilst
@@ -102,9 +103,25 @@ def gen_captcha(text, fontname, fontsize, file_name):
bbox = im.getbbox()
bord = min(dim[0], dim[1])/4 # a bit of a border
im = im.crop((bbox[0]-bord, bbox[1]-bord, bbox[2]+bord, bbox[3]+bord))
+
+ # Create noise
+ nblock = 4
+ nsize = (im.size[0] / nblock, im.size[1] / nblock)
+ noise = Image.new('L', nsize, bgcolor)
+ data = noise.load()
+ for x in range(nsize[0]):
+ for y in range(nsize[1]):
+ r = random.randint(0, 65)
+ gradient = 70 * x / nsize[0]
+ data[x, y] = r + gradient
+ # Turn speckles into blobs
+ noise = noise.resize(im.size, Image.BILINEAR)
+ # Add to the image
+ im = ImageMath.eval('convert(convert(a, "L") / 3 + b, "RGB")', a=im, b=noise)
+
# and turn into black on white
im = ImageOps.invert(im)
-
+
# save the image, in format determined from filename
im.save(file_name)
diff --git a/extensions/ConfirmEdit/i18n/ace.json b/extensions/ConfirmEdit/i18n/ace.json
new file mode 100644
index 00000000..07375451
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/ace.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Si Gam Acèh"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/aeb-latn.json b/extensions/ConfirmEdit/i18n/aeb-latn.json
new file mode 100644
index 00000000..b63587c6
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/aeb-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csisc"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/af.json b/extensions/ConfirmEdit/i18n/af.json
index 3c2ad4cc..3c2ad4cc 100644
--- a/extensions/ConfirmEdit/i18n/core/af.json
+++ b/extensions/ConfirmEdit/i18n/af.json
diff --git a/extensions/ConfirmEdit/i18n/core/aln.json b/extensions/ConfirmEdit/i18n/aln.json
index fc8c4eac..fc8c4eac 100644
--- a/extensions/ConfirmEdit/i18n/core/aln.json
+++ b/extensions/ConfirmEdit/i18n/aln.json
diff --git a/extensions/ConfirmEdit/i18n/core/am.json b/extensions/ConfirmEdit/i18n/am.json
index 1d9086d3..1d9086d3 100644
--- a/extensions/ConfirmEdit/i18n/core/am.json
+++ b/extensions/ConfirmEdit/i18n/am.json
diff --git a/extensions/ConfirmEdit/i18n/core/an.json b/extensions/ConfirmEdit/i18n/an.json
index f8d7fd92..f8d7fd92 100644
--- a/extensions/ConfirmEdit/i18n/core/an.json
+++ b/extensions/ConfirmEdit/i18n/an.json
diff --git a/extensions/ConfirmEdit/i18n/ang.json b/extensions/ConfirmEdit/i18n/ang.json
new file mode 100644
index 00000000..92dc5946
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/ang.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gott wisst"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/ar.json b/extensions/ConfirmEdit/i18n/ar.json
index c192b6cc..c192b6cc 100644
--- a/extensions/ConfirmEdit/i18n/core/ar.json
+++ b/extensions/ConfirmEdit/i18n/ar.json
diff --git a/extensions/ConfirmEdit/i18n/arq.json b/extensions/ConfirmEdit/i18n/arq.json
new file mode 100644
index 00000000..a44fa5f9
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/arq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Oldstoneage"
+ ]
+ },
+ "captcha-label": "كابتشا"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/arz.json b/extensions/ConfirmEdit/i18n/arz.json
index 90eacb67..90eacb67 100644
--- a/extensions/ConfirmEdit/i18n/core/arz.json
+++ b/extensions/ConfirmEdit/i18n/arz.json
diff --git a/extensions/ConfirmEdit/i18n/core/as.json b/extensions/ConfirmEdit/i18n/as.json
index 2861a75f..2861a75f 100644
--- a/extensions/ConfirmEdit/i18n/core/as.json
+++ b/extensions/ConfirmEdit/i18n/as.json
diff --git a/extensions/ConfirmEdit/i18n/core/ast.json b/extensions/ConfirmEdit/i18n/ast.json
index ea5c8ea4..ea5c8ea4 100644
--- a/extensions/ConfirmEdit/i18n/core/ast.json
+++ b/extensions/ConfirmEdit/i18n/ast.json
diff --git a/extensions/ConfirmEdit/i18n/awa.json b/extensions/ConfirmEdit/i18n/awa.json
new file mode 100644
index 00000000..18eeb7c3
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/awa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "captcha-label": "कैप्चा"
+}
diff --git a/extensions/ConfirmEdit/i18n/az.json b/extensions/ConfirmEdit/i18n/az.json
new file mode 100644
index 00000000..cc044de0
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/az.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vugar 1981",
+ "Dağlı95"
+ ]
+ },
+ "captcha-label": "CAPTCHA",
+ "captchahelp-title": "CAPTCHA kömək"
+}
diff --git a/extensions/ConfirmEdit/i18n/azb.json b/extensions/ConfirmEdit/i18n/azb.json
new file mode 100644
index 00000000..7c9fdb38
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/azb.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amir a57"
+ ]
+ },
+ "captcha-label": "CAPTCHA",
+ "captchahelp-title": "Captcha کؤمک"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/ba.json b/extensions/ConfirmEdit/i18n/ba.json
index c37036ce..c37036ce 100644
--- a/extensions/ConfirmEdit/i18n/core/ba.json
+++ b/extensions/ConfirmEdit/i18n/ba.json
diff --git a/extensions/ConfirmEdit/i18n/bcc.json b/extensions/ConfirmEdit/i18n/bcc.json
new file mode 100644
index 00000000..b4e2d492
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/bcc.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mostafadaneshvar",
+ "Baloch Afghanistan"
+ ]
+ },
+ "captcha-edit": "به اصلاح کتن ای صفحه،لطفا ای جمع ساده حل کنیت و جوابء جهلا وارد کنیت ([[Special:Captcha/help|گیشتر اطلاعات]]):",
+ "captcha-desc": " کاربرد ساده captcha",
+ "captcha-label": "کپچا",
+ "captcha-addurl": "شمی اصلاح شامل نوکین درای لینک انت.\nپه کمک په حمایت چه اتوماتیکی اسپم، لطفا جمع ساده حل کینت و جواب جهلء وارد کنیت ([[Special:Captcha/help|گیشتر اطلاعات]]):",
+ "captcha-badlogin": "په کمک په حمایت چه اتوماتیکی کلمه رمز پروشوک، لطفا ای جمع ساده حل کنیت. جوابء جهلء وارد کنید ([[Special:Captcha/help|گیشتر اطلاعات]]):",
+ "captcha-createaccount": "په کمک په حمایت چه اتوماتیکی حساب شرکتن، لطفا ای جهلی ساده جمع حل کنیت و جواب بنویسیت ([[Special:Captcha/help|گیشترین مئلومات]]):",
+ "captcha-createaccount-fail": "اشتباه یا گارین کد تایید",
+ "captcha-create": "په شرکتن صفحه، لطفا ای جمع ساده حل کنیت و جواب ادان بنویسیت ([[Special:Captcha/help|گیشتر اطلاعات]]):",
+ "captchahelp-title": "کمک Captcha",
+ "captchahelp-cookies-needed": "شمی نیاز بیت که ته وتی بروزر کوکی فعال کنیت په ای کارء",
+ "captchahelp-text": "وب سایتانی که چه عام نوشته قبول کننت، په داب ای ویکی، اغلب چه طرف اسپمرآن که چه وسایل اتوماتیکی په دیم دهگ لینکانش په بازگین سایت سوء استفاده کنگ بیت.\nاگر که ای لینک اسپمی دور کنگ بینت،بله باز اذیت کننت.\n\nلهتی وهد به خصوصی وهدی که نوکین لینک وبی په یک صفحه اضافه بیت،ویکی شاید یک عکس رنگی یا هورت هورین متنی شما ار پیش داریت و چه شما لوٹیت پیش داشتگین کلمات وارد کنیت.\nچه آ جاهی که ای کاری سختنت په اتوماتیک کتن،آی واقعی ترین انسان اجازت دنت تا وتی نوشتانک دیم دهنت چه آ دیم گیشترین اسپمر و هکرآنء متوقف کنت.\n\nمتاسفانه شی شاید کاربرانء ناراحت کنت ته یک دید محدود یا استفاده کتن چه بروزرآن متنی و گپی.\nهنو ما را تواری جایگزین نیست.\nلطفا مدیران سایت تماس گریت په کمک اگر شی یک ناخواسته این جلوگیری چه دیم دهگ قانونی انت.\nدکمه 'back' ته وتی بروزر بجنیت دان په صفحه اصلاح تریت.",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside URLs\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "اجرای کاران کپچا بی شی که چه طریق کپچا بروت"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/bcl.json b/extensions/ConfirmEdit/i18n/bcl.json
index 52583dfc..52583dfc 100644
--- a/extensions/ConfirmEdit/i18n/core/bcl.json
+++ b/extensions/ConfirmEdit/i18n/bcl.json
diff --git a/extensions/ConfirmEdit/i18n/core/be-tarask.json b/extensions/ConfirmEdit/i18n/be-tarask.json
index 5411c076..5411c076 100644
--- a/extensions/ConfirmEdit/i18n/core/be-tarask.json
+++ b/extensions/ConfirmEdit/i18n/be-tarask.json
diff --git a/extensions/ConfirmEdit/i18n/core/be.json b/extensions/ConfirmEdit/i18n/be.json
index 4f39c191..4f39c191 100644
--- a/extensions/ConfirmEdit/i18n/core/be.json
+++ b/extensions/ConfirmEdit/i18n/be.json
diff --git a/extensions/ConfirmEdit/i18n/bg.json b/extensions/ConfirmEdit/i18n/bg.json
new file mode 100644
index 00000000..a6f4463b
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/bg.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI",
+ "Spiritia",
+ "StanProg"
+ ]
+ },
+ "captcha-edit": "Редактирането на тази статия изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
+ "captcha-desc": "Предоставя опростена captcha технология като защита срещу спам и налучкване на пароли",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Тази редакция съдържа нови външни препратки. Като защита срещу автоматизиран спам системата изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
+ "captcha-badlogin": "Като защита срещу автоматизирано компрометиране на пароли, системата изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
+ "captcha-createaccount": "Като защита от автоматизирани регистрации, системата изисква при регистриране на потребителска сметка потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
+ "captcha-createaccount-fail": "Грешен или липсващ код за потвърждение.",
+ "captcha-create": "За създаване на страницата е необходимо да се реши задачата и да се въведе отговорът в кутията ([[Special:Captcha/help|повече информация]]):",
+ "captcha-sendemail-fail": "Грешен или липсващ код за потвърждение.",
+ "captcha-disabledinapi": "Това действие изисква капча, следователно не може да бъде извършено през приложния програмен интерфейс.",
+ "captchahelp-title": "Помощ за сaptcha",
+ "captchahelp-cookies-needed": "За да работи това, необходимо е бисквитките на вашия браузър да са включени.",
+ "captchahelp-text": "Уеб сайтовете, които позволяват свободно да се редактира и добавя ново съдържание (като това уики), често са обект на атаки от страна на спамъри, които използват средства за автоматизирано редактиране за публикуване на препратки към много сайтове. Въпреки че тези препратки могат да бъдат премахнати, те са особено неприятни за потребителите.\n\nПонякога, особено когато се добавят нови препратки към страниците, е възможно уикито да покаже картинка с текст, който трябва да бъде въведен в посоченото поле. Тъй като това е стъпка, която е трудно да бъде прескочена при автоматизирано редактиране, тя затруднява и спира повечето спамъри и роботи, но допуска истинските потребителите да правят редакции.\n\nЗа съжаление тази стъпка може да затрудни незрящи потребители или потребители, които използват текстови или речеви браузъри. За момента системата не разполага с възможност за гласова алтернатива. Обърнете се за помощ към [[Special:ListAdmins|администратор на сайта]], ако това изискване на системата ви затруднява да допринасяте легитимно.\n\nНатиснете бутона 'back' на вашия браузър, за да се върнете към редактора на страници."
+}
diff --git a/extensions/ConfirmEdit/i18n/bgn.json b/extensions/ConfirmEdit/i18n/bgn.json
new file mode 100644
index 00000000..e081ece5
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/bgn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "captcha-label": "کپچا"
+}
diff --git a/extensions/ConfirmEdit/i18n/bho.json b/extensions/ConfirmEdit/i18n/bho.json
new file mode 100644
index 00000000..30660fab
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/bho.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nepaboy"
+ ]
+ },
+ "captcha-label": "कैप्चा"
+}
diff --git a/extensions/ConfirmEdit/i18n/bn.json b/extensions/ConfirmEdit/i18n/bn.json
new file mode 100644
index 00000000..ea6a6fe0
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/bn.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bellayet",
+ "Leemon2010",
+ "Nasir8891",
+ "Prometheus.pyrphoros",
+ "Usarker",
+ "Zaheen",
+ "Aftab1995",
+ "Aftabuzzaman"
+ ]
+ },
+ "captcha-edit": "এই নিবন্ধটি সম্পাদনা করতে দয়া করে নিচের সহজ যোগটি সমাধান করুন এবং ফলাফলটি বাক্সটিতে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
+ "captcha-desc": "স্প্যাম এবং পাসওয়ার্ড অনুমান প্রতিরোধে ক্যাপচা প্রযুক্তি ব্যবহার",
+ "captcha-label": "ক্যাপচা",
+ "captcha-addurl": "আপনার সম্পাদনায় নতুন বহিঃসংযোগ বিদ্যমান।\nস্বয়ংক্রিয় স্প্যামের বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ নিচের যোগটি সমাহদান করুন এবং উত্তরটি বাক্সে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
+ "captcha-badlogin": "স্বয়ংক্রিয় পাসওয়ার্ড ক্র‌্যাকিং-এর বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ করে নিচের যোগটি সমাধান করুন এবং উত্তরটি বাক্সে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
+ "captcha-createaccount": "স্বয়ংক্রিয় অ্যাকাউন্ট সৃষ্টি রোধ করার জন্য অনুগ্রহ করে নিচের যোগটি সমাধান করুন এবং উত্তরটি বাক্সে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
+ "captcha-createaccount-fail": "ক্যাপচা ভুল অথবা অনুপস্থিত",
+ "captcha-create": "পাতাটি সৃষ্টি করতে চাইলে অনুগ্রহ করে নিচের যোগটি সমাধান করুন এবং উত্তরটি বাক্সে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
+ "captcha-sendemail": "স্বয়ংক্রিয় স্প্যাম থেকে রক্ষা পেতে, অনুগ্রহ করে সাধারন অংকটি সমাধান করুন এবং উত্তর প্রদান বক্সে লিখুন\n([[Special:Captcha/help|আরও তথ্য]]):",
+ "captcha-sendemail-fail": "ক্যাপচা ভুল অথবা অনুপস্থিত",
+ "captcha-disabledinapi": "এই কাজটি করার জন্য একটি ক্যাপচা প্রয়োজন, তাই এটি এপিআই দ্বারা করা যাবে না।",
+ "captchahelp-title": "ক্যাপচা সাহায্য",
+ "captchahelp-cookies-needed": "এই কাজটি করার জন্য আপনাকে আপনার ব্রাউজারের কুকি সক্রিয় করতে হবে।",
+ "captchahelp-text": "যেসব ওয়েবসাইট পোস্টিং-এর জন্য উন্মুক্ত, যেমন এই উইকিটি, সেগুলি প্রায়ই স্প্যামারদের আক্রমণের শিকার হয়। স্প্যামাররা স্বয়ংক্রিয় সরঞ্জাম ব্যবহার করে তাদের সংযোগগুলি বহু সাইটে পোস্ট করে। এই স্প্যাম সংযোগগুলি মুছে ফেলা সম্ভব, কিন্তু এগুলি যথেষ্ট বিরক্তির উদ্রেক করে।\n\nকখনো কখনো, বিশেষ করে কোন পাতায় নতুন ওয়েব সংযোগ যোগ করার সময়, উইকিটি আপনাকে রঙিন বা বিকৃত টেক্সটবিশিষ্ট ছবি দেখিয়ে আপনাকে শব্দটি টাইপ করতে বলতে পারে। যেহেতু এই কাজটি স্বয়ংক্রিয়ভাবে সম্পাদন করা দুরূহ, তাই এই ব্যবস্থার ফলে প্রকৃত মানুষেরা পোস্ট করতে পারবেন কিন্তু বেশির ভাগ স্প্যামার বা রোবটভিত্তিক আক্রমণ বাধাপ্রাপ্ত হবে।\n\nযারা চোখে কম দেখতে পান কিংবা টেক্সটভিত্তিক বা উক্তিভিত্তিক ব্রাউজার ব্যবহার করছেন, দুর্ভাগ্যবশত এই ব্যবস্থাটি তাদের জন্য সমস্যার সৃষ্টি করবে। এই মুহূর্তে আমাদের কাছে এই ব্যবস্থাটির কোন অডিও বিকল্প নেই। যদি ব্যবস্থাটি আপনাকে বৈধ পোস্ট করতে অযাচিত বাধা দেয়, অনুগ্রহ করে [[Special:ListAdmins|সাইটের প্রশাসকদের]] কাছে সাহায্য চান।\n\nআপনি এখন ব্রাউজারের ব্যাক বোতাম চেপে পাতা সম্পাদকে ফেরত যেতে পারেন।",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# সিনট্যাক্স নিম্নরূপ:\n# * \"#\" ক্যারেক্টার থেকে শুরু হয়ে লাইনের শেষ পর্যন্ত সবকিছু একটি মন্তব্য\n# * খালি নয় এমন প্রতিটি লাইন একটি রেজেক্স খণ্ডাংশ যেটি URLগুলির ভেতরে হোস্টগুলির সাথে মিলে যাবে।\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "ক্যাপচাতে না গিয়ে ক্যাপচা ট্রিগারিং এর কাজ করুন"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/br.json b/extensions/ConfirmEdit/i18n/br.json
index 07208312..07208312 100644
--- a/extensions/ConfirmEdit/i18n/core/br.json
+++ b/extensions/ConfirmEdit/i18n/br.json
diff --git a/extensions/ConfirmEdit/i18n/bs.json b/extensions/ConfirmEdit/i18n/bs.json
new file mode 100644
index 00000000..3cff1ce8
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/bs.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "BrokenArrow",
+ "CERminator",
+ "Palapa"
+ ]
+ },
+ "captcha-edit": "Vaša izmjena uključuje nove URL linkove; kao zaštita od automatizovanog vandalizma, moraćete da izračunate zadatak ispod i upišete odgovor u prozor:\n([[Special:Captcha/help|Šta je ovo?]]):",
+ "captcha-desc": "Omogućava CAPTCHA tehnike za zaštitu protiv spama i probijanja šifre",
+ "captcha-addurl": "Vaša izmjena uključuje nove URL linkove; kao zaštita od automatizovanog vandalizma, moraćete da upišete rezultat prikazane sume u okvir ([[Special:Captcha/help|Šta je ovo?]]):",
+ "captcha-badlogin": "Da bi ste pomogli protiv automatskog probijanja šifre, molimo riješite jednostavan zadatak sabiranja ispod i unesite rezultat u kutiju ([[Special:Captcha/help|više informacija]]):",
+ "captcha-createaccount": "Kao zaštita od automatizovanog vandalizma, moraćete da ukucate rezultat sume u okvir ispod da biste registrovali nalog:\n<br />([[Special:Captcha/help|Šta je ovo?]])",
+ "captcha-createaccount-fail": "Netačan unos ili nedostajući CAPTCHA.",
+ "captcha-create": "Da bi ste napravili stranicu; kao zaštita od automatizovanog vandalizma, moraćete da ukucate rezultat prikazane sume u okvir ispod:\n([[Special:Captcha/help|Šta je ovo?]])",
+ "captcha-sendemail": "Da bi ste pomogli protiv automatskog stavljanja linkova, molimo riješite jednostavan zadatak sabiranja ispod i unesite rezultat u kutiju ([[Special:Captcha/help|više informacija]]):",
+ "captcha-sendemail-fail": "Netačan unos ili nedostatak šifre za potvrđivanje.",
+ "captcha-disabledinapi": "Ova akcija zahtjeva captchu, tako da se ne može izvršiti preko API.",
+ "captchahelp-title": "Pomoć pri captcha",
+ "captchahelp-cookies-needed": "Da bi ste ovo mogli raditi potrebno je da omogućite kolačiće (cookies) u Vašem pregledniku.",
+ "captchahelp-text": "Websajtovi koji podržavaju slanje sadržaja iz javnosti, kao što je ovaj viki, često zloupotrebljavaju vandali koji koriste automatizovane alate da šalju svoje linkove ka mnogim sajtovima.\nIako se ovi neželjeni linkovi mogu ukloniti, one ipak zadaju veliku muku.\n\nPonekad, pogotovo kad se dodaju novi internet linkovi na stranicu, wiki softver Vam može pokazati sliku obojenog i izvrnutog teksta i tražiti da ukucate traženu riječ.\nPošto je teško automatizovati ovakav zadatak, on omogućuje svim pravim ljudima da vrše svoje izmjene, ali će zato spriječiti vandale i ostale robotske napadače.\n\nNažalost, ovo može da bude nepovoljno za korisnike sa ograničenim vidom i za one koji koriste preglednike bazirane na tekstu ili govoru.\nU ovom trenutku, audio alternativa nije dostupna.\nMolimo Vas da kontaktirate [[Special:ListAdmins|administratore sajta]] radi pomoći ako Vas ovo neočekivano ometa u pravljenju dobrih izmjena.\n\nKliknite 'nazad' ('back') dugme vašeg preglednika da se vratite na polje za unos teksta.",
+ "captcha-addurl-whitelist": " #<!-- ostavite ovaj red onakav kakav je --> <pre>\n# Sintaksa je slijedeća:\n# * Sve od znaka \"#\" do kraja reda je komentar\n# * Svaki neprazni red je regex fragment koji će odgovarati samo domaćinima unutar URLova\n #</pre> <!-- ostavite ovaj red onakav kakav je -->",
+ "right-skipcaptcha": "Korištenje akcija nakon captcha bez potrebe prolaska kroz captcha proces"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/ca.json b/extensions/ConfirmEdit/i18n/ca.json
index 1968c38a..1968c38a 100644
--- a/extensions/ConfirmEdit/i18n/core/ca.json
+++ b/extensions/ConfirmEdit/i18n/ca.json
diff --git a/extensions/ConfirmEdit/i18n/core/cdo.json b/extensions/ConfirmEdit/i18n/cdo.json
index 78f7e572..78f7e572 100644
--- a/extensions/ConfirmEdit/i18n/core/cdo.json
+++ b/extensions/ConfirmEdit/i18n/cdo.json
diff --git a/extensions/ConfirmEdit/i18n/core/ce.json b/extensions/ConfirmEdit/i18n/ce.json
index c33406f4..c33406f4 100644
--- a/extensions/ConfirmEdit/i18n/core/ce.json
+++ b/extensions/ConfirmEdit/i18n/ce.json
diff --git a/extensions/ConfirmEdit/i18n/core/ckb.json b/extensions/ConfirmEdit/i18n/ckb.json
index f1383341..f1383341 100644
--- a/extensions/ConfirmEdit/i18n/core/ckb.json
+++ b/extensions/ConfirmEdit/i18n/ckb.json
diff --git a/extensions/ConfirmEdit/i18n/core/az.json b/extensions/ConfirmEdit/i18n/core/az.json
deleted file mode 100644
index c21ef7bc..00000000
--- a/extensions/ConfirmEdit/i18n/core/az.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Vugar 1981"
- ]
- },
- "captchahelp-title": "CAPTCHA kömək"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/azb.json b/extensions/ConfirmEdit/i18n/core/azb.json
deleted file mode 100644
index e119239c..00000000
--- a/extensions/ConfirmEdit/i18n/core/azb.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Amir a57"
- ]
- },
- "captchahelp-title": "Captcha کؤمک"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/bcc.json b/extensions/ConfirmEdit/i18n/core/bcc.json
deleted file mode 100644
index ecd00b8b..00000000
--- a/extensions/ConfirmEdit/i18n/core/bcc.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Mostafadaneshvar"
- ]
- },
- "captcha-edit": "به اصلاح کتن ای صفحه،لطفا ای جمع ساده حل کنیت و جوابء جهلا وارد کنیت ([[Special:Captcha/help|گیشتر اطلاعات]]):",
- "captcha-desc": " کاربرد ساده captcha",
- "captcha-addurl": "شمی اصلاح شامل نوکین درای لینک انت.\nپه کمک په حمایت چه اتوماتیکی اسپم، لطفا جمع ساده حل کینت و جواب جهلء وارد کنیت ([[Special:Captcha/help|گیشتر اطلاعات]]):",
- "captcha-badlogin": "په کمک په حمایت چه اتوماتیکی کلمه رمز پروشوک، لطفا ای جمع ساده حل کنیت. جوابء جهلء وارد کنید ([[Special:Captcha/help|گیشتر اطلاعات]]):",
- "captcha-createaccount": "په کمک په حمایت چه اتوماتیکی حساب شرکتن، لطفا ای جهلی ساده جمع حل کنیت و جواب بنویسیت ([[Special:Captcha/help|گیشتر اطلاعات]]):",
- "captcha-createaccount-fail": "اشتباه یا گارین کد تایید",
- "captcha-create": "په شرکتن صفحه، لطفا ای جمع ساده حل کنیت و جواب ادان بنویسیت ([[Special:Captcha/help|گیشتر اطلاعات]]):",
- "captchahelp-title": "کمک Captcha",
- "captchahelp-cookies-needed": "شمی نیاز بیت که ته وتی بروزر کوکی فعال کنیت په ای کارء",
- "captchahelp-text": "وب سایتانی که چه عام نوشته قبول کننت، په داب ای ویکی، اغلب چه طرف اسپمرآن که چه وسایل اتوماتیکی په دیم دهگ لینکانش په بازگین سایت سوء استفاده کنگ بیت.\nاگر که ای لینک اسپمی دور کنگ بینت،بله باز اذیت کننت.\n\nلهتی وهد به خصوصی وهدی که نوکین لینک وبی په یک صفحه اضافه بیت،ویکی شاید یک عکس رنگی یا هورت هورین متنی شما ار پیش داریت و چه شما لوٹیت پیش داشتگین کلمات وارد کنیت.\nچه آ جاهی که ای کاری سختنت په اتوماتیک کتن،آی واقعی ترین انسان اجازت دنت تا وتی نوشتانک دیم دهنت چه آ دیم گیشترین اسپمر و هکرآنء متوقف کنت.\n\nمتاسفانه شی شاید کاربرانء ناراحت کنت ته یک دید محدود یا استفاده کتن چه بروزرآن متنی و گپی.\nهنو ما را تواری جایگزین نیست.\nلطفا مدیران سایت تماس گریت په کمک اگر شی یک ناخواسته این جلوگیری چه دیم دهگ قانونی انت.\nدکمه 'back' ته وتی بروزر بجنیت دان په صفحه اصلاح تریت.",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside URLs\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "اجرای کاران کپچا بی شی که چه طریق کپچا بروت"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/bg.json b/extensions/ConfirmEdit/i18n/core/bg.json
deleted file mode 100644
index 9edf28be..00000000
--- a/extensions/ConfirmEdit/i18n/core/bg.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "DCLXVI",
- "Spiritia"
- ]
- },
- "captcha-edit": "Редактирането на тази статия изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
- "captcha-desc": "Предоставя опростена captcha технология като защита срещу спам и налучкване на пароли",
- "captcha-addurl": "Тази редакция съдържа нови външни препратки. Като защита срещу автоматизиран спам системата изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
- "captcha-badlogin": "Като защита срещу автоматизирано компрометиране на пароли, системата изисква потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
- "captcha-createaccount": "Като защита от автоматизирани регистрации, системата изисква при регистриране на потребителска сметка потребителите да въведат отговора на задачата по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
- "captcha-createaccount-fail": "Грешен или липсващ код за потвърждение.",
- "captcha-create": "За създаване на страницата е необходимо да се реши задачата и да се въведе отговорът в кутията ([[Special:Captcha/help|повече информация]]):",
- "captcha-sendemail-fail": "Грешен или липсващ код за потвърждение.",
- "captcha-disabledinapi": "Това действие изисква капча, следователно не може да бъде извършено през приложния програмен интерфейс.",
- "captchahelp-title": "Помощ за сaptcha",
- "captchahelp-cookies-needed": "За да работи това, необходимо е бисквитките на вашия браузър да са включени.",
- "captchahelp-text": "Уеб сайтовете, които позволяват свободно да се редактира и добавя ново съдържание (като това уики), често са обект на атаки от страна на спамъри, които използват средства за автоматизирано редактиране за публикуване на препратки към много сайтове. Въпреки че тези препратки могат да бъдат премахнати, те са особено неприятни за потребителите.\n\nПонякога, особено когато се добавят нови препратки към страниците, е възможно уикито да покаже картинка с текст, който трябва да бъде въведен в посоченото поле. Тъй като това е стъпка, която е трудно да бъде прескочена при автоматизирано редактиране, тя затруднява и спира повечето спамъри и роботи, но допуска истинските потребителите да правят редакции.\n\nЗа съжаление тази стъпка може да затрудни незрящи потребители или потребители, които използват текстови или речеви браузъри. За момента системата не разполага с възможност за гласова алтернатива. Обърнете се за помощ към [[Special:ListAdmins|администратор на сайта]], ако това изискване на системата ви затруднява да допринасяте легитимно.\n\nНатиснете бутона 'back' на вашия браузър, за да се върнете към редактора на страници."
-}
diff --git a/extensions/ConfirmEdit/i18n/core/bn.json b/extensions/ConfirmEdit/i18n/core/bn.json
deleted file mode 100644
index 898447ea..00000000
--- a/extensions/ConfirmEdit/i18n/core/bn.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bellayet",
- "Leemon2010",
- "Nasir8891",
- "Prometheus.pyrphoros",
- "Usarker",
- "Zaheen",
- "Aftab1995"
- ]
- },
- "captcha-edit": "এই নিবন্ধটি সম্পাদনা করতে দয়া করে নিচের সহজ যোগটি সমাধান করুন এবং ফলাফলটি বাক্সটিতে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
- "captcha-desc": "স্প্যাম এবং পাসওয়ার্ড অনুমান প্রতিরোধে ক্যাপচা প্রযুক্তি ব্যবহার",
- "captcha-label": "ক্যাপচা",
- "captcha-addurl": "আপনার সম্পাদনায় নতুন বহিঃসংযোগ বিদ্যমান।\nস্বয়ংক্রিয় স্প্যামের বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ নিচের যোগটি সমাহদান করুন এবং উত্তরটি বাক্সে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
- "captcha-badlogin": "স্বয়ংক্রিয় শব্দচাবি ক্র‌্যাকিং-এর বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ করে নিচের যোগটি সমাধান করুন এবং উত্তরটি বাক্সে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
- "captcha-createaccount": "স্বয়ংক্রিয় অ্যাকাউন্ট সৃষ্টি রোধ করার জন্য অনুগ্রহ করে নিচের যোগটি সমাধান করুন এবং উত্তরটি বাক্সে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
- "captcha-createaccount-fail": "ক্যাপচা ভুল অথবা অনুপস্থিত",
- "captcha-create": "পাতাটি সৃষ্টি করতে চাইলে অনুগ্রহ করে নিচের যোগটি সমাধান করুন এবং উত্তরটি বাক্সে প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
- "captcha-sendemail": "স্বয়ংক্রিয় স্প্যাম থেকে রক্ষা পেতে, অনুগ্রহ করে সাধারন অংকটি সমাধান করুন এবং উত্তর প্রদান বক্সে লিখুন\n([[Special:Captcha/help|আরও তথ্য]]):",
- "captcha-sendemail-fail": "ক্যাপচা ভুল অথবা অনুপস্থিত",
- "captcha-disabledinapi": "এই কাজটি করার জন্য একটি ক্যাপচা প্রয়োজন, তাই এটি এপিআই দ্বারা করা যাবে না।",
- "captchahelp-title": "ক্যাপচা সাহায্য",
- "captchahelp-cookies-needed": "এই কাজটি করার জন্য আপনাকে আপনার ব্রাউজারের কুকি সক্রিয় করতে হবে।",
- "captchahelp-text": "যেসব ওয়েবসাইট পোস্টিং-এর জন্য উন্মুক্ত, যেমন এই উইকিটি, সেগুলি প্রায়ই স্প্যামারদের আক্রমণের শিকার হয়। স্প্যামাররা স্বয়ংক্রিয় সরঞ্জাম ব্যবহার করে তাদের সংযোগগুলি বহু সাইটে পোস্ট করে। এই স্প্যাম সংযোগগুলি মুছে ফেলা সম্ভব, কিন্তু এগুলি যথেষ্ট বিরক্তির উদ্রেক করে।\n\nকখনো কখনো, বিশেষ করে কোন পাতায় নতুন ওয়েব সংযোগ যোগ করার সময়, উইকিটি আপনাকে রঙিন বা বিকৃত টেক্সটবিশিষ্ট ছবি দেখিয়ে আপনাকে শব্দটি টাইপ করতে বলতে পারে। যেহেতু এই কাজটি স্বয়ংক্রিয়ভাবে সম্পাদন করা দুরূহ, তাই এই ব্যবস্থার ফলে প্রকৃত মানুষেরা পোস্ট করতে পারবেন কিন্তু বেশির ভাগ স্প্যামার বা রোবটভিত্তিক আক্রমণ বাধাপ্রাপ্ত হবে।\n\nযারা চোখে কম দেখতে পান কিংবা টেক্সটভিত্তিক বা উক্তিভিত্তিক ব্রাউজার ব্যবহার করছেন, দুর্ভাগ্যবশত এই ব্যবস্থাটি তাদের জন্য সমস্যার সৃষ্টি করবে। এই মুহূর্তে আমাদের কাছে এই ব্যবস্থাটির কোন অডিও বিকল্প নেই। যদি ব্যবস্থাটি আপনাকে বৈধ পোস্ট করতে অযাচিত বাধা দেয়, অনুগ্রহ করে [[Special:ListAdmins|সাইটের প্রশাসকদের]] কাছে সাহায্য চান।\n\nআপনি এখন ব্রাউজারের ব্যাক বোতাম চেপে পাতা সম্পাদকে ফেরত যেতে পারেন।",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# সিনট্যাক্স নিম্নরূপ:\n# * \"#\" ক্যারেক্টার থেকে শুরু হয়ে লাইনের শেষ পর্যন্ত সবকিছু একটি মন্তব্য\n# * খালি নয় এমন প্রতিটি লাইন একটি রেজেক্স খণ্ডাংশ যেটি URLগুলির ভেতরে হোস্টগুলির সাথে মিলে যাবে।\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "ক্যাপচাতে না গিয়ে ক্যাপচা ট্রিগারিং এর কাজ করুন"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/bs.json b/extensions/ConfirmEdit/i18n/core/bs.json
deleted file mode 100644
index 09998c6e..00000000
--- a/extensions/ConfirmEdit/i18n/core/bs.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "BrokenArrow",
- "CERminator"
- ]
- },
- "captcha-edit": "Vaša izmjena uključuje nove URL linkove; kao zaštita od automatizovanog vandalizma, moraćete da izračunate zadatak ispod i upišete odgovor u prozor:\n([[Special:Captcha/help|Šta je ovo?]]):",
- "captcha-desc": "Omogućava CAPTCHA tehnike za zaštitu protiv spama i probijanja šifre",
- "captcha-addurl": "Vaša izmjena uključuje nove URL linkove; kao zaštita od automatizovanog vandalizma, moraćete da upišete rezultat prikazane sume u okvir ([[Special:Captcha/help|Šta je ovo?]]):",
- "captcha-badlogin": "Da bi ste pomogli protiv automatskog probijanja šifre, molimo riješite jednostavan zadatak sabiranja ispod i unesite rezultat u kutiju ([[Special:Captcha/help|više informacija]]):",
- "captcha-createaccount": "Kao zaštita od automatizovanog vandalizma, moraćete da ukucate rezultat sume u okvir ispod da biste registrovali nalog:\n<br />([[Special:Captcha/help|Šta je ovo?]])",
- "captcha-createaccount-fail": "Netačan unos ili nedostatak šifre za potvrđivanje.",
- "captcha-create": "Da bi ste napravili stranicu; kao zaštita od automatizovanog vandalizma, moraćete da ukucate rezultat prikazane sume u okvir ispod:\n([[Special:Captcha/help|Šta je ovo?]])",
- "captcha-sendemail": "Da bi ste pomogli protiv automatskog stavljanja linkova, molimo riješite jednostavan zadatak sabiranja ispod i unesite rezultat u kutiju ([[Special:Captcha/help|više informacija]]):",
- "captcha-sendemail-fail": "Netačan unos ili nedostatak šifre za potvrđivanje.",
- "captcha-disabledinapi": "Ova akcija zahtjeva captchu, tako da se ne može izvršiti preko API.",
- "captchahelp-title": "Pomoć pri captcha",
- "captchahelp-cookies-needed": "Da bi ste ovo mogli raditi potrebno je da omogućite kolačiće (cookies) u Vašem pregledniku.",
- "captchahelp-text": "Websajtovi koji podržavaju slanje sadržaja iz javnosti, kao što je ovaj viki, često zloupotrebljavaju vandali koji koriste automatizovane alate da šalju svoje linkove ka mnogim sajtovima.\nIako se ovi neželjeni linkovi mogu ukloniti, one ipak zadaju veliku muku.\n\nPonekad, pogotovo kad se dodaju novi internet linkovi na stranicu, wiki softver Vam može pokazati sliku obojenog i izvrnutog teksta i tražiti da ukucate traženu riječ.\nPošto je teško automatizovati ovakav zadatak, on omogućuje svim pravim ljudima da vrše svoje izmjene, ali će zato spriječiti vandale i ostale robotske napadače.\n\nNažalost, ovo može da bude nepovoljno za korisnike sa ograničenim vidom i za one koji koriste preglednike bazirane na tekstu ili govoru.\nU ovom trenutku, audio alternativa nije dostupna.\nMolimo Vas da kontaktirate [[Special:ListAdmins|administratore sajta]] radi pomoći ako Vas ovo neočekivano ometa u pravljenju dobrih izmjena.\n\nKliknite 'nazad' ('back') dugme vašeg preglednika da se vratite na polje za unos teksta.",
- "captcha-addurl-whitelist": " #<!-- ostavite ovaj red onakav kakav je --> <pre>\n# Sintaksa je slijedeća:\n# * Sve od znaka \"#\" do kraja reda je komentar\n# * Svaki neprazni red je regex fragment koji će odgovarati samo domaćinima unutar URLova\n #</pre> <!-- ostavite ovaj red onakav kakav je -->",
- "right-skipcaptcha": "Korištenje akcija nakon captcha bez potrebe prolaska kroz captcha proces"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/el.json b/extensions/ConfirmEdit/i18n/core/el.json
deleted file mode 100644
index 48f31623..00000000
--- a/extensions/ConfirmEdit/i18n/core/el.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Badseed",
- "Consta",
- "Dada",
- "Geraki",
- "Glavkos",
- "Kiriakos",
- "Omnipaedista",
- "Protnet",
- "ZaDiak",
- "Περίεργος"
- ]
- },
- "captcha-edit": "Για να επεξεργαστείτε αυτή τη σελίδα, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "captcha-desc": "Παρέχει τεχνικές CAPTCHA για την προστασία από spam και προσπάθειες σπασίματος κωδικών πρόσβασης",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "Η επεξεργασία σας περιλαμβάνει νέους εξωτερικούς συνδέσμους. Για λόγους προστασίας κατά αυτοματοποιημένων ανεπιθύμητων δημοσιεύσεων, παρακαλούμε υπολογίστε το παρακάτω άθροισμα και γράψτε την απάντηση στο κουτάκι ώστε να αποθηκευτεί η επεξεργασία σας ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "captcha-badlogin": "Για την προστασία του wiki απέναντι σε σπάσιμο κωδικών πρόσβασης, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "captcha-createaccount": "Για την προστασία του wiki απέναντι σε αυτοματοποιημένη δημιουργία λογαριασμών, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "captcha-createaccount-fail": "Λανθασμένος ή μη πληκτρολογημένος κωδικός επιβεβαίωσης.",
- "captcha-create": "Για να δημιουργήσετε τη σελίδα, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "captcha-sendemail": "Για την προστασία του βίκι απέναντι σε αυτοματοποιημένες ανεπιθύμητες δημοσιεύσεις, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "captcha-sendemail-fail": "Λανθασμένος ή μη πληκτρολογημένος κωδικός επιβεβαίωσης.",
- "captcha-disabledinapi": "Η ενέργεια αυτή απαιτεί επαλήθευση λεκτικού κειμένου και για αυτό δεν μπορεί να γίνει μέσω του API.",
- "captchahelp-title": "Βοήθεια για CAPTCHA",
- "captchahelp-cookies-needed": "Θα πρέπει να έχετε τα cookies ενεργοποιημένα στον περιηγητή σας για να εκτελεστεί η λειτουργία.",
- "captchahelp-text": "Οι ιστότοποι που επιτρέπουν δημόσια επεξεργασία, όπως αυτό το wiki, παραβιάζονται συχνά από spammers που χρησιμοποιούν αυτοματοποιημένα εργαλεία για να δημοσιεύουν μαζικά υπερσυνδέσμους σε πλήθος ιστοτόπων. Αν και αυτοί σύνδεσμοι spam μπορούν να αφαιρεθούν, είναι μεγάλος μπελάς.\n\nΜερικές φορές, ειδικά κατά την προσθήκη νέων συνδέσμων σε μια σελίδα, το wiki μπορεί να σας παρουσιάσει μια εικόνα με χρωματισμένο ή διαστρεβλωμένο κείμενο και να σας ζητήσει να πληκτρολογήσετε τις λέξεις που διακρίνετε. Δεδομένου ότι αυτή η εργασία είναι δύσκολο να αυτοματοποιηθεί, θα επιτρέψει στους περισσότερους πραγματικούς ανθρώπους να κάνουν τις δημοσιεύσεις τους, σταματώντας όμως spammers και άλλους ρομποτικά επιτιθέμενους.\n\nΔυστυχώς αυτό μπορεί να προκαλέσει δυσχέρεια σε χρήστες με προβλήματα όρασης τους ή όσους χρησιμοποιούν περιηγητές αποκλειστικά κειμένου ή περιηγητές με ομιλία. Προς το παρόν δεν έχουμε κάποια ηχητική εναλλακτική λύση διαθέσιμη. Παρακαλώ επικοινωνήστε με τους [[Special:ListAdmins|διαχειριστές]] του ιστότοπου για βοήθεια, εάν αυτό για κάποιο λόγο σας αποτρέπει να εκτελέσετε θεμιτές ενέργειες.\n\nΠατήστε το κουμπί «πίσω» στον περιηγητή σας για να επιστρέψετε στον επεξεργαστή σελίδων.",
- "captcha-addurl-whitelist": " #<!-- αφήστε αυτή την γραμμή ακριβώς όπως είναι --> <pre>\n# Η σύνταξη είναι ως ακολούθως:\n# * Οποιαδήποτε γραμμή ξεκινάει με χαρακτήρα \"#\" είναι σχόλιο\n# * Κάθε μη κενή γραμμή αποτελεί μέρος κανονικής έκφρασης η οποία αντιστοιχεί σε διευθύνσεις URL\n #</pre> <!-- αφήστε αυτή την γραμμή ακριβώς όπως είναι -->",
- "right-skipcaptcha": "Πραγματοποίηση ενεργειών που ενεργοποιούν CAPTCHA χωρίς να χρειάζεται πέρασμα από το CAPTCHA"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/fi.json b/extensions/ConfirmEdit/i18n/core/fi.json
deleted file mode 100644
index feaa4f68..00000000
--- a/extensions/ConfirmEdit/i18n/core/fi.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Agony",
- "Centerlink",
- "Crt",
- "Linnea",
- "Nedergard",
- "Nike",
- "Stryn",
- "Varusmies",
- "Syreeni"
- ]
- },
- "captcha-edit": "Ratkaise alla oleva laskutoimitus jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):",
- "captcha-desc": "Tarjoaa CAPTCHA-tekniikoita suojaamaan mainoslinkkejä ja salasana-arvailua vastaan.",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "Muokkauksesi sisältää uusia linkkejä muille sivuille.\nAutomatisoitujen roskamuokkausten välttämiseksi ratkaise alla oleva laskutoimitus ja kirjoita vastauksesi kenttään, jotta voisit tallentaa muokkauksesi ([[Special:Captcha/help|lisätietoa]]):",
- "captcha-badlogin": "Automatisoidun salasanan murtamisen estämiseksi ratkaise alla oleva laskutoimitus ja kirjoita vastaus kenttään ([[Special:Captcha/help|lisätietoa]]):",
- "captcha-createaccount": "Automaattisen käyttäjätunnusten luonnin estämiseksi ratkaise alla oleva laskutoimitus ja kirjoita se kenttään ([[Special:Captcha/help|lisätietoa]]):",
- "captcha-createaccount-fail": "CAPTCHA on virheellinen tai puuttuu.",
- "captcha-create": "Luodaksesi sivun, ratkaise alla oleva laskutoimitus ([[Special:Captcha/help|lisätietoa]]):",
- "captcha-sendemail": "Suojataksemme wikiä automaattisia mainoslinkkejä vastaan, pyydämme sinua ratkaisemaan alla olevan yksinkertaisen laskutoimituksen ja kirjoittamaan vastauksen laatikkoon ([[Special:Captcha/help|lisätietoa]]):",
- "captcha-sendemail-fail": "CAPTCHA on virheellinen tai puuttuu.",
- "captcha-disabledinapi": "Tämä toiminto vaatii kuvavarmennusta, joten et voi suorittaa sitä API:n kautta.",
- "captchahelp-title": "CAPTCHA-ohje",
- "captchahelp-cookies-needed": "Tämä toiminto vaatii evästeiden hyväksymistä selaimessa.",
- "captchahelp-text": "Verkkosivut, jotka sallivat ulkopuolisten lisätä sisältöä, joutuvat usein spam-hyökkäysten kohteeksi. Spam-hyökkäyksessä spammerit käyttävät työkaluja, jotka automaattisesti lisäävät linkkejä monille sivuille. Vaikka nämä linkit voidaan poistaa, aiheutuu niistä silti merkittävää haittaa.\n\nJoskus, erityisesti kun lisäät uusia linkkejä, saatat nähdä kuvan, jossa on värillistä ja vääristynyttä tekstiä, ja sinua pyydetään kirjoittamaan sen sisältämät sanat. Tätä tehtävää on vaikea automatisoida, joten se estää automaattiset lisäykset, mutta sallii ihmisten tehdä muutoksia sivustoon.\n\nValitettavasti tämä saattaa haitata käyttäjiä, joilla on rajoittunut näkökyky tai käyttäjiä, jotka käyttävät teksti- tai puhepohjaisia selaimia. \nTällä hetkellä ei ole käytettävissä puhepohjaista vaihtoehtoa. \nOta yhteyttä [[Special:ListAdmins|sivuston ylläpitäjiin]], jos et pysty tekemään asianmukaisia muutoksia.\n\nVarmistus ei toimi, jos evästeet eivät ole selaimessa käytössä.\n\nVoit palata muokkaustilaan selaimen paluutoiminnolla.",
- "captcha-addurl-whitelist": " #<!-- jätä tämä rive juuri näin kuin se on --> <pre>\n# Syntaksi on seuraava:\n# * Kaikki #-merkistä eteenpäin on kommenttia\n# * Jokainen ei-tyhjä rivi on säännöllisen lausekkeen osa, joka suoritetaan vain linkeissä esiintyville verkkonimille.\n #</pre> <!-- jätä tämä rive juuri näin kuin se on -->",
- "right-skipcaptcha": "Suorittaa ilman CAPTCHA-tarkistusta toimintoja, jotka normaalisti vaatisivat tarkistuksen"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/fy.json b/extensions/ConfirmEdit/i18n/core/fy.json
deleted file mode 100644
index 2432e294..00000000
--- a/extensions/ConfirmEdit/i18n/core/fy.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Snakesteuben"
- ]
- },
- "captcha-addurl": "Jo hawwe keppelings om utens oanpast/taheakke. As ekstra beskerming tsjin automatysk oanmakke reklame (SPAM) wurdt jo frege it antwurd op de ûndersteande som te jaan ([[Special:Captcha/help|meer ynformaasje]]):",
- "captcha-createaccount": "As beskerming tsjin it automatysk oanmeitsjen fan meidochnammen wurdt jo frege it antwurd op de ûndersteande som te jaan ([[Special:Captcha/help|meer ynformaasje]]):",
- "captcha-createaccount-fail": "It antwurd op de som kloppet net.",
- "captcha-create": "Om de side oan te meitsjen wurdt jo frege it antwurd op de ûndersteande som te jaan ([[Special:Captcha/help|meer ynformaasje]]).",
- "captchahelp-title": "Lettertoets-help",
- "captchahelp-text": "Websteeën dêr't it publyk op skriuwe kin, lykas dizze {{SITENAME}}-wiki, kinne lêst hawwe fan lju dy't automatysk keppelings oan de websiden tafoegje. Op dizze wiki kinne sokke feroarings maklik weromset wurde, mar dat nimt al tiid dy't ek oars brûkt wurde kin.\n\nBy it oanmelden as meidogger, en fierders benammen at jo keppelings om utens oan in side tafoegje, kinne jo fan de wiki in lettertoets krije. De wiki lit dan kleurde of ferwrongen letters sjen, en jo wurdt frege dy oer te tikken. Om't dit net maklik automatisearre wurde kin, hâldt dit it automatysk tafoegjen tsjin. It spitegernôch ek in lytse lêst foar de meidoggers.\n\nIn probleem dêr't noch gjin oplossing foar is it dat it in tûkelteam is foar minsken dy't net goed sjen kinne of dy't in tekst-blêder of lûd-blêder brûke. Hjir soe in lûd-ferzje foar komme moatte, mar dy is der noch net. Oerlis mei in behearder at dit foar jo problemen jout.\n\nGean tebek mei de tebek-knop fan jo blêder."
-}
diff --git a/extensions/ConfirmEdit/i18n/core/hi.json b/extensions/ConfirmEdit/i18n/core/hi.json
deleted file mode 100644
index 9df64a49..00000000
--- a/extensions/ConfirmEdit/i18n/core/hi.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ansumang",
- "Kaustubh",
- "Shyam",
- "Siddhartha Ghai",
- "आलोक"
- ]
- },
- "captcha-edit": "यह पन्ना संपादित करने के लिये नीचे दिये हुए आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
- "captcha-desc": "आसानसे कॅपचा (captcha) का इस्तेमाल",
- "captcha-addurl": "आपके सम्पादन में नई बाहरी कड़ियाँ हैं।\nस्वचालित स्पॅम से बचाव में सहायता के लिये नीचे दिये हुए आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
- "captcha-badlogin": "स्वचालित कूटशब्द भेद से बचाव में सहायता के लिये नीचे दिये हुए आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
- "captcha-createaccount": "स्वचालित सदस्य पंजीकरण से बचाव में सहायता के लिये नीचे दिये हुए आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
- "captcha-createaccount-fail": "गलत या खाली सहमती कोड।",
- "captcha-create": "यह पन्ना बनाने के लिये, नीचे दिये आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
- "captcha-sendemail": "स्वचालित स्पैमिंग से बचाव के लिये कृपया नीचे दिये गणित प्रश्न का उत्तर बक्से में लिखें\n([[Special:Captcha/help|अधिक जानकारी]]):",
- "captcha-sendemail-fail": "गलत या लापता पुष्टिकरण कोड ।",
- "captchahelp-title": "कॅप्टचा सहायता",
- "captchahelp-cookies-needed": "यह कार्य करने के लिये आपने कूकीज (cookies) एनेबल किया होना आवश्यक हैं।",
- "captchahelp-text": "इस विकि जैसे जालस्थल, जो जनता जनार्दन से लेख स्वीकार करते हैं, अक्सर रद्दी काम करने वालों के फंदे में आ जाते हैं, जो स्वचालित यंत्रों से कई स्थलों पर अपनी कड़ियाँ छापने की कोशिश करते हैं।\nयूँ तो ये रद्दी कड़ियाँ हटाई जा सकती हैं, पर फिर भी ये झंझट तो खड़ा करती ही हैं।\n\nकुछ बार, खासकर जब किसी पन्ने पृष्ठ पर एक नया जाल पता जोड़ा जाता है, तब विकी आपको एक रंगीन या टेढ़े मेढ़े लेख की तस्वीर दिखा के आपको उस तस्वीर में लिखी सामग्री को पढ़ के टंकित करने को कह सकती है।\nऐसी तस्वीर को यंत्र द्वारा पढ़ पाना मुश्किल होता है, इसलिए इसके जरिए अधिकतर मानव अपने लेख छाप पाएँगे और साथ ही अधितकर रद्दी वाले और यांत्रिक उपकरण नहीं छाप पाएँगे।\n\nदुर्भाग्यवश इससे सीमित चक्षु-दृष्टि वाले सदस्यों या पाठ-आधारित या वाचन-आधारित विचरकों का प्रयोग करने वाले सदस्यों को समस्या आती है।\nइस समय हमारे पास इसका श्रव्य विकल्प उपलब्ध नहीं है।\nयदि इसकी वजह से आपको वैध लेख लिखने में अवरोध आ रहा हो तो कृपया सहायता के लिए [[Special:ListAdmins|स्थल प्रबंधकों]] से संपर्क करें।\n\nपन्ना संपादन पर वापस जाने के लिए अपने विचरक पर 'एक पृष्ठ पीछे जाएँ' वाली कुंजी का प्रयोग करें।",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# इसकी रुपरेषा इस प्रकार हैं:\n# * \"#\" से शुरु होनेवाली सभी लाईनें टिप्पणीयाँ हैं।\n# * हर अन्य लाईन regex fragment हैं जो सिर्फ URL के होस्टस्‌ को जोडता हैं\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "Captcha में जाये बिना Captcha का इस्तेमाल करने के लिये मजबूर करें"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/hr.json b/extensions/ConfirmEdit/i18n/core/hr.json
deleted file mode 100644
index a56d2018..00000000
--- a/extensions/ConfirmEdit/i18n/core/hr.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dalibor Bosits",
- "Dnik",
- "Ex13",
- "Herr Mlinka",
- "Roberta F.",
- "SpeedyGonsales"
- ]
- },
- "captcha-edit": "Da uredite ovu stranicu, molimo riješite jednostavno zbrajanje ispod i unesite rezultat u rubriku ([[Special:Captcha/help|više informacija]]):",
- "captcha-desc": "Pruža CAPTCHA tehnike za zaštitu od neželjene pošte (spam-a) i pogađanja zaporke",
- "captcha-addurl": "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć?]])",
- "captcha-badlogin": "Da se spriječi automatizirano pogađanje lozinki,\nmolimo zbrojite donje brojeve i upišite rezultat ([[Special:Captcha/help|pomoć]]):",
- "captcha-createaccount": "Kao zaštitu od automatskog spama, pri otvaranju računa trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć]])",
- "captcha-createaccount-fail": "Potvrdni kod je nepotpun ili netočan.",
- "captcha-create": "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć?]])",
- "captcha-sendemail": "Da bi ste nam pomogli protiv automatskog spama, molimo riješite jednostavan zadatak zbrajanja ispod i unesite rezultat u okvir ([[Special:Captcha/help|više informacija]]):",
- "captcha-sendemail-fail": "Potvrdni kod je nepotpun ili netočan.",
- "captcha-disabledinapi": "Ova akcija traži captchu, tako da se ne može izvršiti preko API-ja.",
- "captchahelp-title": "Antispam pomoć",
- "captchahelp-cookies-needed": "Trebate imati uključene kolačiće (''cookies'') u vašem web pregledniku za ovu funkciju.",
- "captchahelp-text": "Internetske stranice koji prihvaćaju doprinose od javnosti, poput ovog wikija, često zloupotrebljavaju spameri, koji koriste automatizirane alate pomoću kojih postavljaju svoje poveznice na mnoge stranice.\nIako se te spam poveznice mogu uklanjati, one predstavljaju značajne neugodnost pri radu.\n\nPonekad, a naročito kad se dodaje web poveznica na stranicu, wiki može prikazati sliku obojenog ili iskrivljenog teksta uz zahtjev za unos prikazanih riječi.\nBudući da je takvu radnju teško automatizirati, to će omogućiti pravim suradnicima njihov nastavak u pridonošenju, dok će zaustaviti većinu spamera i robotskih napadača.\n\nNa žalost, ovo može biti nepristupačno za suradnike koji koriste tekstualne klijene ili one glasovno bazirane. Trenutačno nemamo glasovnu podršku za ovo.\nMolimo obratite se [[Special:ListAdmins|administratorima]] za pomoć, ukoliko Vas ovo ometa pri dodavanju važećih sadržaja.\n\nPritisnite u svom pregledniku 'nazad' kako bi se vratili na uređivač stranice.",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Rabi se sljedeća sintaksa:\n# * Sve od \"#\" znaka do kraja linije je komentar\n# * Svaki je neprazni redak regularni izraz (regex) koji odgovara poslužitelju unutar URL-a\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "Izvođenje akcija koje pokreću captcha bez prolaženja kroz captcha sustav"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/hu.json b/extensions/ConfirmEdit/i18n/core/hu.json
deleted file mode 100644
index 8fe0f2ce..00000000
--- a/extensions/ConfirmEdit/i18n/core/hu.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dani",
- "Dj",
- "Glanthor Reviol"
- ]
- },
- "captcha-edit": "A lap szerkesztéséhez meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű összeadás eredményét ([[Special:Captcha/help|segítség]]):",
- "captcha-desc": "CAPTCHA-technológiák a spamek és a jelszókitalálási technikák ellen",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "Szerkesztésed új külső linket tartalmaz. A reklámokat elhelyező robotok kiszűrése érdekében tisztelettel megkérünk, hogy írd be a lenti dobozba az alábbi egyszerű összeadás eredményét. ([[Special:Captcha/help|segítség]])",
- "captcha-badlogin": "Az automatikus jelszófeltörés kiszűrése érdekében tisztelettel megkérünk, írd be a lenti dobozba az alábbi egyszerű összeadás eredményét ([[Special:Captcha/help|segítség]]):",
- "captcha-createaccount": "A felhasználói fiókok automatizált létrehozásának kiszűrése érdekében meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű összeadás eredményét ([[Special:Captcha/help|segítség]]):",
- "captcha-createaccount-fail": "Hibás vagy hiányzó ellenőrző kód.",
- "captcha-create": "Az oldal elkészítéséhez meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű számtani művelet eredményét. ([[Special:Captcha/help|segítség]])",
- "captcha-sendemail": "Hogy védjük a wikit az automatizált spammelés ellen, kérünk oldd meg az alábbi egyszerű összeadást, és írd be az eredményt a szövegdobozba ([[Special:Captcha/help|segítség]]):",
- "captcha-sendemail-fail": "Hibás vagy hiányzó ellenőrző kód.",
- "captcha-disabledinapi": "Ez a művelet captcha megoldásához kötött, így nem lehet végrehajtani az API-n keresztül.",
- "captchahelp-title": "Captcha segítség",
- "captchahelp-cookies-needed": "Engedélyezned kell a böngésződben a sütiket.",
- "captchahelp-text": "Az olyan weboldalakat, amelyekre bárki írhat, gyakran támadják meg spammerek olyan eszközök felhasználásával, amelyek képesek automatikusan, emberi felügyelet nélkül elhelyezni egy linket sok különböző oldalon.\n\nAz ilyen linkek kézi eltávolítása rengeteg energiát emésztene fel, ezért néha, különösen ha egy külső linket teszel egy cikkbe, a wiki egy valamilyen módon eltorzított szöveget (captcha-t) jelenít meg, és arra kér, hogy gépeld be azt. Mivel ezt automatikusan nagyon nehéz megtenni, a valódi szerkesztők így könnyen megkülönböztethetőek a spammerek robotjaitól.\n\nSajnos ez komoly kényelmetlenséget jelenthet azoknak a felhasználóknak, akik gyengén látnak, vagy szöveges/hang-alapú böngészőt használnak. Jelenleg nem tudunk hang-alapú alternatívával szolgálni; ha a captcha megakadályoz abban, hogy szerkeszd a wikit, vedd fel a kapcsolatot az [[Special:ListAdmins|adminisztrátorokkal]].\n\nHa a captcha megoldása helyett inkább visszatérnél a szöveg szerkesztéséhez, használd a böngésződ „vissza” gombját.",
- "captcha-addurl-whitelist": " #<!-- ezt a sort hagyd pontosan így --> <pre>\n# A szintaktika a következő:\n# * Minden „#” karakterrel kezdődő sor megjegyzés\n# * Minden nem üres sor egy reguláris kifejezés darabja, amely csak az URL-ekben található kiszolgálókra keres\n #</pre> <!-- ezt a sort hagyd pontosan így -->",
- "right-skipcaptcha": "captcha átugrása"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/ko.json b/extensions/ConfirmEdit/i18n/core/ko.json
deleted file mode 100644
index 3b47fcd8..00000000
--- a/extensions/ConfirmEdit/i18n/core/ko.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "IRTC1015",
- "Klutzy",
- "Kwj2772",
- "Priviet",
- "ToePeu",
- "아라"
- ]
- },
- "captcha-edit": "글을 편집하려면 아래의 간단한 덧셈 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
- "captcha-desc": "스팸과 비밀번호 탈취를 방지하기 위한 CAPTCHA(캡차) 기술을 제공합니다",
- "captcha-label": "CAPTCHA(캡차)",
- "captcha-addurl": "편집에 새로운 바깥 링크가 포함되어 있습니다.\n자동화된 스팸으로부터 위키를 보호하기 위해, 편집을 저장하려면 아래의 간단한 계산 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
- "captcha-badlogin": "자동화된 비밀번호 깨기로부터 위키를 보호하기 위해, 아래의 간단한 계산 값을 입력 상자에 입력해주세요 ([[Special:Captcha/help|자세한 정보]]):",
- "captcha-createaccount": "자동화된 계정 만들기로부터 위키를 보호하기 위해, 아래의 간단한 계산 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
- "captcha-createaccount-fail": "캡챠가 올바르지 않거나 입력되지 않았습니다.",
- "captcha-create": "문서를 만드려면 아래의 간단한 계산 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
- "captcha-sendemail": "자동화된 스팸으로부터 위키를 보호하기 위해, 아래의 간단한 계산 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
- "captcha-sendemail-fail": "캡챠가 올바르지 않거나 입력되지 않았습니다.",
- "captcha-disabledinapi": "이 동작은 캡차를 거쳐야 하기 때문에 API로 이 작업을 수행할 수 없습니다.",
- "captchahelp-title": "CAPTCHA(캡차) 도움말",
- "captchahelp-cookies-needed": "정상적으로 작동하려면 웹 브라우저의 쿠키 사용이 활성화되어 있어야 합니다.",
- "captchahelp-text": "이 위키와 같이 사람의 공개적인 참여가 가능한 웹 사이트에서는 자동 프로그램이 스팸을 뿌리는 경우가 있습니다.\n물론 이러한 스팸은 제거할 수는 있지만 번거로운 작업이 늘어납니다.\n\n이러한 스팸을 방지하기 위해서, 이 위키의 문서에 웹 사이트 주소를 추가하는 등의 행동을 할 경우에는 비틀린 글자가 들어있는 그림을 보여주고 그 그림의 글자를 입력해 달라고 하는 경우가 있습니다.\n이 글자 입력 작업은 자동 프로그램을 만들기가 힘들기 때문에 스팸을 효과적으로 막으면서 일반 사용자를 막지 않을 수 있습니다.\n\n웹 브라우저에서 그림을 완벽하게 표시할 수 없거나, 그림이 나오지 않는 텍스트 방식이나 음성 합성 방식 웹 브라우저를 사용하는 경우에는 이러한 입력이 불가능합니다.\n아직까지는 이런 경우에 대한 대안이 없습니다.\n예기치않게 정당한 행동을 하지 못하도록 막는다면 [[Special:ListAdmins|사이트 관리자]]에게 도움을 요청해 주세요.\n\n이전 화면으로 돌아가려면 웹 브라우저의 \"뒤로\" 버튼을 누르세요.",
- "captcha-addurl-whitelist": " #<!-- 이 줄은 그대로 두십시오 --> <pre>\n# 문법은 다음과 같습니다:\n# * \"#\" 문자에서 줄의 끝까지는 주석입니다\n# * 빈 줄이 아닌 줄은 정규식으로, URL의 호스트만을 검사합니다\n #</pre> <!-- 이 줄은 그대로 두십시오 -->",
- "right-skipcaptcha": "캡차 과정을 거치지 않고 캡차 과정을 거친 것으로 간주"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/ksh.json b/extensions/ConfirmEdit/i18n/core/ksh.json
deleted file mode 100644
index d0992ce1..00000000
--- a/extensions/ConfirmEdit/i18n/core/ksh.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Purodha"
- ]
- },
- "captcha-edit": "Öm de Sigg ze ändere, don di Zahle onge zosamme zälle un don de Antwoot en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
- "captcha-desc": "Brängk en „Kaptscha“ en et Wiki, öm jääje SPAM un jäje et Paßwööter-Dorschprobeere ze schöze.",
- "captcha-label": "<span style=\"text-transform:uppercase\">Kaptscha</span>",
- "captcha-addurl": "Do häß neu Lingks op frembde Websigge dobei jedonn.\nMer schöze uns Wiki jäje automatesche SPAM, dröm\ndon di Zahle onge zosamme träcke un don de Antwoot\nen dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
- "captcha-badlogin": "Mer schöze Metmaacher en unsem Wiki jäje automatesche\nPaßwoot-Knackerei, dröm don di Zahle onge zosamme zälle,\nun de Antwoot en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
- "captcha-createaccount": "Mer schöze uns Wiki dojäje, dat mer en Masse automatesch\nMetmaacher aanmeldt. Dröm beß esu joot un\ndon di Zahle onge zosamme zälle un don de Antwoot\nen dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
- "captcha-createaccount-fail": "De Bestätijungszahl fählt udder es verkeeht.",
- "captcha-create": "Öm di Sigg neu aanzelääje, don di Zahle onge zosamme zälle,\nun don de Antwoot en dat Käßje endraare. (Verklierung)",
- "captcha-sendemail": "För automettesche SPAM ze verhendere, donn di Zahle onge zosamme zälle,\nun don de Antwoot en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
- "captcha-sendemail-fail": "De Bestätijungszahl fählt udder es verkeeht.",
- "captcha-disabledinapi": "För di Aufjab moß en extra Bestätejon enjejovve wääde, un dat künne mer nit övver de API.",
- "captchahelp-title": "Äklierung zum Kaptscha SPAM-Schotz",
- "captchahelp-cookies-needed": "Do moß <i lang=\"en\">Cookies</i> en Dingem Brauser enjeschalldt han, domet da hee fluppe kann.",
- "captchahelp-text": "Op Web Saits wi dat Wiki hee, wo jeder jät beidraare kann, do kumme se öff wi de Fleeje un don met Projramme un fun Hand bloß Reklame-Lingks op de eije Websigge affläje, oohne Sinn un Verstand. Esu en SPAM kam_mer widder fott maache, dat määt ävver Ärjer un Opwand.\n\nSu jät wulle_mer nit hann, un donn_et jlish widder fottschmiiße.\n\nDomet mer do_met nidd_esu fill Ärrbed hann,\nmaache_mer dänne Autmaate et Lääve schwer.\nWann uns Wikki merk, et künnd_esu jet em Bösh sinn, dann zeisch et e Belldshe med komije Texte dren, un fröhsch, dat mer se jenau esu ennjävve sullt,\nwi se do shtonn. För_enne Minsch eß dat eifach, ävver dat es fodammp schwierich ze projrammiere.\nDat es e beßßje läßtish för der Minsch, ävver de Robbotter hälld et unß bahl komplett fum Lief, un su jesinn, ess et netto enne Jewenn.\n\nWann De Dich ens fordeis, es och nit schlimm, De wees norr_enß jefrooch. Wat De jetipp häs, kütt nit fott.\n\nSchaad es, mer hann noch keine Wääsh, dat met Shprooch odder sönswi ze maache, su dat Lück met Shprooch_Ußßjaave, Braille, un met nur Tex em Brauser oohne Bellder, em Räähn shtonn künnte. Dooht Ühr Zeush eets enß oohne Lengk speischere, un saat dä [[Special:ListAdmins|Wikki_Köbesse]],\nwann Ühr Probbleme hatt. Do weed_Üch jehollfe weede.\n\nJetz kanns De met Dingem Brauser singem „Zeröck“-Knopp wigger maache, wo De fürher woohß.",
- "captcha-addurl-whitelist": " #<!-- Lohß di Reih he jenou esu wi se es --> <pre>\n# Dä Opbou es:\n# * Alles fun enem #-Zeiche bes an et Engk fun ene Reih es ene Kommentaa för de Minsche\n# * Jede Reih met jet dren es en Stöck rejolähre Ußdrok, wat Domains en URL treffe kann\n #</pre> <!-- Lohß di Reih he jenou esu wi se es -->",
- "right-skipcaptcha": "De Opforderung fum Kaptscha överjonn"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/lrc.json b/extensions/ConfirmEdit/i18n/core/lrc.json
deleted file mode 100644
index 21e58fe1..00000000
--- a/extensions/ConfirmEdit/i18n/core/lrc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Mogoeilor"
- ]
- },
- "captcha-label": "كپچا",
- "captcha-createaccount-fail": "کد کپچا غلط یا گم بیه.",
- "captcha-sendemail-fail": "کد کپچا غلط یا گم بیه.",
- "captchahelp-title": "هومياری كپچا",
- "captchahelp-cookies-needed": "شما با کوکیانه د جاگرد تو فعال بکید سی یه وه کار بکه."
-}
diff --git a/extensions/ConfirmEdit/i18n/core/mk.json b/extensions/ConfirmEdit/i18n/core/mk.json
deleted file mode 100644
index fca0ba95..00000000
--- a/extensions/ConfirmEdit/i18n/core/mk.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bjankuloski06",
- "Brest"
- ]
- },
- "captcha-edit": "За да ја уредите оваа страница потребно е да го најдете решението на едноставната задача поставена подолу и одговорот да го внесете во соодветното поле за одговор([[Special:Captcha/help|повеќе информации]]):",
- "captcha-desc": "Овозможува техники од CAPTCHA за заштита од спам и погодување на лозинки",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "Вашето уредување содржи нови надворешни врски.\nЗа да ни помогнете да се заштитиме од автоматизиран спам, би ве замолиле да ја решите простата задача подолу и да го внесете резултатот во полето за да можете да го зачувате уредувањето ([[Special:Captcha/help|повеќе инфо]]):",
- "captcha-badlogin": "За да ни помогнете да се заштитиме од автоматизирано пробивање на лозинки, би ве замолиле да ја решите простата задача подолу и внесете резултатот во полето ([[Special:Captcha/help|повеќе информации]]):",
- "captcha-createaccount": "За да ни помогнете да се заштитиме од автоматизирано создавање на сметки, би ве замолиле да ја решите простата задача подолу и да го внесете резултатот во полето ([[Special:Captcha/help|повеќе инфо]]):",
- "captcha-createaccount-fail": "CAPTCHA е неточен или недостасува.",
- "captcha-create": "За да ја создадете страницата, прво решете ја простата задача подолу и впишете го решението во полето ([[Special:Captcha/help|повеќе инфо]]):",
- "captcha-sendemail": "За да се заштитиме од автоматизирано спамирање, би сакале да ве замолиме да ја решите простата задача подолу и да го внесете резултатот во полето ([[Special:Captcha/help|повеќе информации]]):",
- "captcha-sendemail-fail": "CAPTCHA е неточен или недостасува.",
- "captcha-disabledinapi": "Ова дејство бара captcha, така што не може да се изврши преку API.",
- "captchahelp-title": "Помош со Captcha",
- "captchahelp-cookies-needed": "Треба да имате овозможено колачиња за да може ова да работи.",
- "captchahelp-text": "Семрежните места кои прифаќаат учество на јавноста, како ова вики, честопати страдаат од спамери кои користат автоматизирани алатки за да ги додаваат нивните врски на голем број мережни страници. Иако врските на спамерот може да се отстранат, тие значително ја пореметуваат нашата работа.\n\nПонекогаш, особено кога додава нови врски на страница, викито може да ви прикаже обоен или извитоперен текст и да ви побара да ги впишете прикажаните зборови. \nБидејќи ова е задача која е тешко да се автоматизира, им овозможува вистинските корисници да придонесуваат, а им попречува на спамерите и другите роботски напаѓачи.\n\nЗа жал, ова може да е проблем за корисници со лош вид, или оние кои користат прелистувачи на основа на текст или гласовни наредби.\nВо моментов немаме аудио-алтернатива за ова.\nКонтактирајте ги [[Special:ListAdmins|администраторите на страната]] за помош доколку ова неочекувано ве спречува во правењето на искрени придонеси. \n\nСтиснете на копчето „назад“ во вашиот прелисувач за да се вратите на уредувањето на страницата.",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Опис на синтаксата:\n# * Сето она што стои по знакот „#“, па до крајот на редот е коментар\n# * Секој непразен ред се смета за фрагмент од регуларен израз кој одговара само на имиња во URL адреси\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "Изведување на акции кои повикуваат captcha без да одат преку captcha системот"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/mr.json b/extensions/ConfirmEdit/i18n/core/mr.json
deleted file mode 100644
index 6a5fedc4..00000000
--- a/extensions/ConfirmEdit/i18n/core/mr.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kaustubh",
- "Mahitgar",
- "V.narsikar"
- ]
- },
- "captcha-edit": "हे पान संपादित करण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "captcha-desc": "उत्पात आणि परवलीच्या शब्दांच्या चोरी पासून सूरक्षीत ठेवणाऱ्या ओळखपटवा-पद्धती CAPTCHA techniques पुरवते.",
- "captcha-addurl": "तुमच्या संपादनात नवीन बाह्यदुवे आहेत. आपोआप होणार्‍या स्पॅम पासून वाचण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "captcha-badlogin": "आपोआप होणार्‍या परवलीच्या शब्दाच्या चोरीपासून वाचण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "captcha-createaccount": "आपोआप होणार्‍या सदस्य नोंदणीपासून वाचण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "captcha-createaccount-fail": "चुकीचा अथवा रिकामा सहमती कोड",
- "captcha-create": "हे पान तयार करण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "captcha-sendemail": "आपोआप होणार्‍या उत्पातापासून वाचण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "captcha-sendemail-fail": "चुकीचा अथवा रिकामा सहमती कोड",
- "captcha-disabledinapi": "या क्रियेसाठी कॅप्चा हवी.API मार्फत हे शक्य नाही.",
- "captchahelp-title": "कॅप्टचा साहाय्य",
- "captchahelp-cookies-needed": "हे काम करण्यासाठी तुम्ही कूकीज (cookies) एनेबल केलेल्या असणे गरजेचे आहे.",
- "captchahelp-text": "ज्या संकेतस्थळांवर जसे की हा विकि, सर्वसामान्य लोकांकडून संपादने करण्याची परवानगी असते, तिथे आपोआप होणारी स्वत:च्या संकेतस्थळांचे दुवे देणारी उत्पात संपादने (Spam) कायम होत असतात.\nअशी संपादने जरी काढता आली तरी ती एक डोकेदुखी होऊ शकते.\n\nकाहीवेळा, जेव्हा एखाद्या पानावर नवीन बाह्यदुवा देताना, विकि तुम्हाला एक चित्र दाखवून त्यांतील शब्द भरण्यास सांगू शकतो.\nहे काम संगणकाकरवी करून घेण्यास अवघड असल्याने, फक्त खरी माणसेच संपादने करू शकतील व स्पॅमर्सना आळा बसू शकेल.\n\nपण खेदाची गोष्ट अशी की ह्यामुळे अर्धांध व्यक्ती तसेच ज्या व्यक्ती फक्त मजकूर दाखविणारा न्याहाळक वापरतात, अशांना असुविधा होऊ शकते.\nसध्या आमच्याकडे आवाज ऐकण्याची सुविधा नाही.\nकृपया [[Special:ListAdmins|संस्थळ प्रचालकांशी]] या बाबतीत संपर्क करावा.\n\nपृष्ठ संपादनाकडे परत जाण्यासाठी आपल्या ब्राउझरची ’Back' ही कळ दाबा.",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# रुपरेषा खालीलप्रमाणे:\n# * \"#\" ने सुरु होणारे व ओळीच्या शेवटपर्यंत जाणारे वाक्य सूचना (Comment) आहे.\n# * प्रत्येक रिकामी नसलेली ओळ ही regex fragment आहे जी फक्त URLमधील होस्टसच्या जोड्या लावेल\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "कॅपचा मध्ये न जाता कॅपचाचा वापर करणार्‍या क्रिया करा"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/nds-nl.json b/extensions/ConfirmEdit/i18n/core/nds-nl.json
deleted file mode 100644
index 2c4c4611..00000000
--- a/extensions/ConfirmEdit/i18n/core/nds-nl.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Servien"
- ]
- },
- "captcha-edit": "Um disse zied te bewarken, mu'j eerst t antwoord op disse eenvoudige somme invullen ([[Special:Captcha/help|meer informasie]]):",
- "captcha-desc": "Biedt CAPTCHA-technieken um bescharming te biejen tegen spam en t raojen van wachtwoorden",
- "captcha-addurl": "In joew bewarking staon nieje uutgaonde verwiezingen.\nVul ter de bescharming van disse wiki tegen automatiese moekbiedragen t antwoord op de somme in, in t invoerveld dat hieronder steet, um joew bewarking op te slaon:<br />\n([[Special:Captcha/help|meer informasie]])",
- "captcha-badlogin": "Vul ter de bescharming van disse wiki tegen t automaties kraken van wachtwoorden t antwoord op de somme in, in t invoerveld ([[Special:Captcha/help|meer informasie]]):",
- "captcha-createaccount": "Vul ter bescharming van disse wiki tegen t automaties anmaken van gebrukers t antwoord op de somme in, in t invoerveld ([[Special:Captcha/help|meer informasie]]):",
- "captcha-createaccount-fail": "Verkeerde of ontbrekende bevestigingskode.",
- "captcha-create": "Je bin n nieje zied an t maken.\nVoer t antwoord van disse eenvoudige rekensomme in bie t invoervienster\n([[Special:Captcha/help|meer informasie]]).",
- "captchahelp-title": "Lettertoetshulpe",
- "captchahelp-cookies-needed": "Je mutten scheumbestaanden (cookies) an hebben staon um disse funksie te gebruken.",
- "captchahelp-text": "Websteeën waor iederene an kan biedragen, zo as disse {{SITENAME}}-wiki, wörden vake misbruukt deurdat der ongewunste verwiezingen op ezet wörden. Op disse wiki kunnen zokken bewarkingen makkelik weerummezet wörden, mer t nimp wel tied in beslag die aanders gebruukt kan wörden.\n\nSoms a'j nieje verwiezingen bie n zied derop zetten, wö'j evreugen um iets over te tikken of in te vullen. Dit zörgt derveur dat der gien ongewunste verwiezingen eplaotst wörden, umdat dit allinnig deur meensen edaon kan wörden en niet deur botgebrukers.\n\nSpietig genog levert disse bevestiging veur gebrukers mit n visuele beparking of n tekst- of spraakebaseerden webkieker problemen op.\nOp t moment is der gien alternatief mit geluud beschikbaor.\nVraag um hulpe van de [[Special:ListAdmins|websteebeheerders]] as dit proses joe in de weg steet n nuttige biedrage te leveren.\n\n(Klik op de knoppe 'terug' in joew webkieker, um weerumme te gaon naor t tekstbewarkingscharm.)",
- "captcha-addurl-whitelist": " #<!-- laot disse regel zo as t is --> <pre>\n# De syntaxis is as volgt:\n# * Alle tekste vanaof t karakter \"#\" tot t einde van de regels wörden ezien as opmarking\n# * Alle regels die niet leeg bin, wörden ezien as n reguliere uutdrokking die veur delen van de domein staon.\n #</pre> <!-- laot disse regel zo as t is -->"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/pl.json b/extensions/ConfirmEdit/i18n/core/pl.json
deleted file mode 100644
index d49d6154..00000000
--- a/extensions/ConfirmEdit/i18n/core/pl.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "BeginaFelicysym",
- "Derbeth",
- "Leinad",
- "Matma Rex",
- "Sp5uhe",
- "WTM"
- ]
- },
- "captcha-edit": "Możesz edytować tę stronę, jednak najpierw musisz rozwiązać poniższe proste działanie matematyczne i wpisać wynik do pola tekstowego ([[Special:Captcha/help|pomoc]]):",
- "captcha-desc": "Dodaje CAPTCHA – zabezpieczenie przed spamującymi automatami oraz odgadywaniem haseł",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "Twoje zmiany zawierają nowe linki zewnętrzne.\nZe względu na ochronę przed zautomatyzowanym spamem prosimy o wykonanie prostego działania matematycznego i wpisanie wyniku w pole obok, zanim twoja edycja zostanie zapisana ([[Special:Captcha/help|więcej informacji]]):",
- "captcha-badlogin": "Zabezpieczenie przed automatycznym łamaniem hasełm, wpisz w pole poniżej wynik prostego działania matematycznego ([[Special:Captcha/help|pomoc]]):",
- "captcha-createaccount": "Zabezpieczenie przed automatycznym tworzeniem konta - wpisz w pole poniżej wynik prostego działania matematycznego ([[Special:Captcha/help|pomoc]]):",
- "captcha-createaccount-fail": "Nieprawidłowy kod lub brak kodu potwierdzającego.",
- "captcha-create": "Aby utworzyć stronę wykonaj proste działanie i wpisz wynik w pole tekstowe ([[Special:Captcha/help|pomoc]]):",
- "captcha-sendemail": "Zabezpieczenie przed automatycznym spamem, wpisz w pole poniżej wynik prostego dodawania ([[Special:Captcha/help|więcej informacji]]):",
- "captcha-sendemail-fail": "Nieprawidłowy kod lub brak kodu potwierdzającego.",
- "captcha-disabledinapi": "Ta czynność wymaga potwierdzenia capcha i z tego względu nie może być przeprowadzona z użyciem API.",
- "captchahelp-title": "Pomoc dla ochrony antyspamowej",
- "captchahelp-cookies-needed": "Musisz mieć włączone w przeglądarce ciasteczka (cookies), aby ta opcja działała.",
- "captchahelp-text": "Strony internetowe akceptujące edycje dokonywane przez każdego, tak jak ta wiki, są często atakowane przez spamerów, którzy używają automatycznych narzędzi, aby dodawać linki prowadzące do ich stron.\nChociaż te linki mogą zostać usunięte, jest to uciążliwe.\n\nCzasami, zwłaszcza przy dodawaniu nowych linków do strony albo przy rejestracji, wiki może pokazać obrazek z kolorowym lub zniekształconym tekstem i poprosić Cię o przepisanie zamieszczonego na nim wyrazu.\nPonieważ są to zadania trudne do zautomatyzowania, takie zabezpieczenia umożliwia ludziom dokonywania edycji, jednocześnie skutecznie powstrzymując większość spamerów i inne automatyczne ataki.\n\nNiestety, może być to niewygodne dla użytkowników z wadą wzroku lub używających przeglądarek tekstowych lub głosowych.\nObecnie nie mamy alternatywnego rozwiązania audio.\nSkontaktuj się z [[Special:ListAdmins|administratorami strony]] by uzyskać pomoc, jeśli nie możesz z tego powodu dokonywać uprawnionych edycji.\n\nWciśnij przycisk „wstecz” w przeglądarce by powrócić do edycji strony.",
- "captcha-addurl-whitelist": " #<!-- nie modyfikuj tej linii --> <pre>\n# Składnia jest następująca:\n# * Linie zaczynające się od znaku „#” są komentarzami\n# * Każda linia, która nie jest pusta, jest wyrażeniem regularnym, które ma pasować do adresu serwera (fragmentu URL)\n #</pre> <!-- nie modyfikuj tej linii -->",
- "right-skipcaptcha": "Dostęp do czynności zabezpieczonych pytaniem o treść obrazka lub rozwiązanie zadania, z pominięciem zabezpieczenia"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/ps.json b/extensions/ConfirmEdit/i18n/core/ps.json
deleted file mode 100644
index db541825..00000000
--- a/extensions/ConfirmEdit/i18n/core/ps.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ahmed-Najib-Biabani-Ibrahimkhel"
- ]
- },
- "captcha-create": "ددې لپاره چې نوی ليکنه ترسره کړی، لطفاً د همدغه ساده شمېرو ځواب په ورکړ شوي چوکاټ کې وليکی ([[Special:Captcha/help|نور مالومات]]):",
- "captchahelp-title": "CAPTCHA لارښود",
- "captchahelp-cookies-needed": "ددې کړنې د ترسره کېدلو لپاره تاسو ته پکار ده چې د خپل کتنمل (browser) کوکيز (cookies) چارن کړی.",
- "captchahelp-text": "هغه وېبځايونه چې د ټولو وگړو پر لور د ليکنو د ليکلو لپاره پرانيستي دي، لکه همدا ويکي، ډېر ځل د سپمرگرو لخوا چې اتوماتيک اوزارونه د خپلو د تړنو او وېبپاڼو د خبرتياو په خپرولو کې کاروي، په ناوړه توگه کارېږي. تر هغه وخت پورې چې همدا سپمونه او هماغه تړنې راموندل کېږي او ليرې کېږي، نو تر هغه وخته پورې همدا سپمونه ډېر سرخوږی جوړوي.\n\nپه ځانگړي توگه په يوه مخ کې د يوه وېبځي د تړنې د ورگډولو په وخت کې به ويکي يو ډول گډوډ رنگين متن ښکاره کړي او له کارن نه به د هماغه متن د ټاپلو غوښتنه شوې وي. \n\nڅرنگه چې جوته ده چې اصلي وگړي کولی شي چې په دې کار کې بريالي شي، خو دې ته ناورته سپامگر ماشينونه او روبوټونه دا ډول کار په خپلکاره توگه نه شي ترسره کولی او پدې توگه د سپامگرو او روبوټونو د غورځنگ مخ نيول کېږي.\n\nبدبختانه چې دا کار د کارنانو لپاره ستونزه جوړولای شي او هغه څوک چې د سترگو نظر يې کمزوری دی او يا هم د متن پر بنسټ او يا هم د غږ پر بنسټ جوړ شوي کتنملونه کاروي نه شي کولی په آسانۍ سره خپلې سمونې او خپرونې ترسره کړي.\n\nدم مهال موږ د داسې متنونو غږيز انډول نه لرو.\n\nکه چېرته دا کار تاسې له سمونو او ليکنو خپرولو پاتې راولي نو لطفاً د مرستې لپاره د [[Special:ListAdmins|پازوالانو]] سره اړيکه ټينگه کړۍ.\n\nپه خپل کتنمل کې د 'شاکېدلو' تڼۍ کېښکاږۍ چې بېرته پخواني مخ ته وگرځۍ."
-}
diff --git a/extensions/ConfirmEdit/i18n/core/pt-br.json b/extensions/ConfirmEdit/i18n/core/pt-br.json
deleted file mode 100644
index 585f076d..00000000
--- a/extensions/ConfirmEdit/i18n/core/pt-br.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Eduardo.mps",
- "Giro720",
- "Helder.wiki",
- "Jesielt",
- "555",
- "Dianakc"
- ]
- },
- "captcha-edit": "Para editar esta página será necessário que você resolva a simples soma abaixo e entre com a resposta no respectivo campo ([[Special:Captcha/help|o que é isto?]])",
- "captcha-desc": "Fornece técnicas captcha para proteção contra spam e tentativas de obtenção de senhas",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "Sua edição inclui novos links externos.\nComo prevenção contra sistemas automatizados que inserem spam, será necessário resolver a simples soma abaixo e inserir sua resposta no respectivo campo ([[Special:Captcha/help|detalhes]])",
- "captcha-badlogin": "Como prevenção contra sistemas automatizados de pesquisa e descoberta de senhas, será necessário resolver a simples soma abaixo e inserir sua resposta no respectivo campo ([[Special:Captcha/help|detalhes]])",
- "captcha-createaccount": "Para proteger a wiki contra sistemas automatizados de criação de contas, solicitamos que resolva a soma simples apresentada abaixo e introduza a resposta no respectivo campo ([[Special:Captcha/help|mais informações]]):",
- "captcha-createaccount-fail": "Código CAPTCHA incorreto ou não preenchido.",
- "captcha-create": "Para criar a página, por favor resolva a simples soma abaixo e entre com a resposta no respectivo campo ([[Special:Captcha/help|o que é isto?]])",
- "captcha-sendemail": "Como proteção ao wiki contra spam automatizado, será necessário resolver a simples soma abaixo e inserir sua resposta no respectivo campo ([[Special:Captcha/help|detalhes]]):",
- "captcha-sendemail-fail": "Código CAPTCHA incorreto ou não preenchido.",
- "captcha-disabledinapi": "Esta operação necessita de captcha, por isso não pode ser realizada através da API.",
- "captchahelp-title": "Ajuda com o Captcha",
- "captchahelp-cookies-needed": "Você precisa ter cookies habilitados em seu navegador para que isso possa funcionar",
- "captchahelp-text": "Sites abertos a inserções públicas, como é o caso desta wiki, são vulneráveis a spammers que utilizam ferramentas automatizadas para inserir seus links em diversos locais.\nRemover tais ligações posteriormente pode ser um incômodo significativo.\n\nAlgumas vezes, especialmente ao adicionar novas ligações externas a uma página, o wiki exibirá uma imagem com um texto colorido ou distorcido e pedirá que você introduza as palavras exibidas.\nUma vez que essa é uma tarefa um tanto difícil de ser automatizada, ela possibilita que a maioria dos humanos faça as suas inserções ao mesmo tempo que inibe as que forem feitas por spammers e mecanismos automatizados.\n\nInfelizmente, isso pode ser um inconveniente para usuários com limitações visuais ou que naveguem através de mecanismos baseados em texto ou baseados em voz.\nNo momento, não está disponível uma alternativa em áudio.\nPor favor, contate os [[Special:ListAdmins|administradores do sítio]] em casos que seja necessária a assistência de alguém para que você possa fazer as suas inserções legítimas.\n\nPressione o botão 'voltar' de seu navegador para retornar à página de edição.",
- "captcha-addurl-whitelist": " #<!-- deixe este linha exatamente como está --> <pre>\n# A sintaxe é a que se segue:\n# * Tudo desde o caractere \"#\" até ao fim da linha é um comentário\n# * Qualquer linha não vazia é um fragmento de regex que irá apenas verificar o servidor dentro das URLs\n #</pre> <!-- deixe este linha exatamente como está -->",
- "right-skipcaptcha": "Executar ações disparadoras de captcha sem ter que passar pelo captcha"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/qqq.json b/extensions/ConfirmEdit/i18n/core/qqq.json
deleted file mode 100644
index e584be29..00000000
--- a/extensions/ConfirmEdit/i18n/core/qqq.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Aotake",
- "Hamilton Abreu",
- "MF-Warburg",
- "Meithal",
- "Meno25",
- "Purodha",
- "Shirayuki",
- "Siebrand",
- "The Evil IP address",
- "Toliño",
- "Umherirrender"
- ]
- },
- "captcha-edit": "This message will be shown when editing if the wiki requires solving a captcha for editing.\n{{Related|ConfirmEdit-edit}}",
- "captcha-desc": "{{desc|name=Confirm Edit|url=http://www.mediawiki.org/wiki/Extension:ConfirmEdit}}",
- "captcha-label": "Label field for input field shown in forms",
- "captcha-addurl": "The explanation of CAPTCHA shown to users trying to add new external links.\n{{Related|ConfirmEdit-addurl}}",
- "captcha-badlogin": "The explanation of CAPTCHA shown to users failed three times to type in correct password.\n{{Related|ConfirmEdit-badlogin}}",
- "captcha-createaccount": "The explanation of CAPTCHA shown to users trying to create a new account.\n{{Related|ConfirmEdit-createaccount}}",
- "captcha-createaccount-fail": "Used as failure message.\n{{Related|ConfirmEdit-createaccount-fail}}",
- "captcha-create": "This message will be shown when creating a page if the wiki requires solving a captcha for that.\n{{Related|ConfirmEdit-create}}",
- "captcha-sendemail": "Used as footer text.\n{{Related|ConfirmEdit-sendemail}}",
- "captcha-sendemail-fail": "Used as failure message.\n\nSee also:\n* {{msg-mw|Captcha-createaccount-fail}}",
- "captcha-disabledinapi": "Used as error message when in the API mode.",
- "captchahelp-title": "The page title of [[Special:Captcha/help]]",
- "captchahelp-cookies-needed": "The page title for this message is {{msg-mw|Captchahelp-title}}.\n\nThis message follows the following help message:\n* {{msg-mw|Captchahelp-text}}.",
- "captchahelp-text": "This is the help text shown on [[Special:Captcha/help]].",
- "captcha-addurl-whitelist": "See also: [[MediaWiki:Spam-blacklist]] and [[MediaWiki:Spam-whitelist]].\n\nLeave all the wiki markup, including the spaces, as is.\nYou can translate the text, including 'Leave this line exactly as it is'.\nThe first line of this messages has one (1) leading space.\n\n\"regex\" stands for \"regular expression\".",
- "right-skipcaptcha": "{{doc-right|skipcaptcha}}"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/roa-tara.json b/extensions/ConfirmEdit/i18n/core/roa-tara.json
deleted file mode 100644
index 5d9eb076..00000000
--- a/extensions/ConfirmEdit/i18n/core/roa-tara.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Joetaras",
- "Reder"
- ]
- },
- "captcha-edit": "Pe cangià sta pàgene, pe piacere fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
- "captcha-desc": "Dèje le tecniche d'u CAPTCHA pe proteggere condre a 'u spam e 'u futtimende d'a passuord",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "'U cangiamende tune 'nglude de le collegaminde de fore.\nPe aiutà a proteggere condre a 'u spam automateche, pe piacere respunne a 'a domande ca combare sotte jndr'à sckatole ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
- "captcha-badlogin": "Pe proteggere sta uicchi da le futteminde de passuord automateche, nuje te cercame gendilmende de fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
- "captcha-createaccount": "Pe proteggere sta uicchi da 'a ccrejazione automateche de le cunde, nuje te cercame gendilmende de fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
- "captcha-createaccount-fail": "Codece de conferme non corrette o mangande.",
- "captcha-create": "Pe ccrejà sta pàgene, pe piacere fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
- "captcha-sendemail": "Pe proteggere sta uicchi da 'a munnezze automateche, nuje te cercame gendilmende de fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
- "captcha-sendemail-fail": "Codece de conferme non corrette o mangande.",
- "captcha-disabledinapi": "St'azione ave abbesogne de 'nu captcha, accussì non g'è possibbele eseguirle cu le API.",
- "captchahelp-title": "Aijute pu captcha",
- "captchahelp-cookies-needed": "Tu è abbesogne de avè le cookie abbilitate jndr'à 'u browser tune pe sta fatìe.",
- "captchahelp-text": "Le site web ca accettane messàgge da 'u pubbleche, le piace sta uicchi, assaije vote purcé abbusane de spam a ce ause struminde automatece pe mannà le lore collegaminde a 'nu sacche de site.\nMendre ca ste collegaminde de spam se ponne luà, lore comungue sò 'nu sckassamende de palle.\n\nCerte vote, specialmende quanne aggiunge collegaminde nuève sus a a'na pàgene, 'a uicchi te pò fà vedè 'n'immaggine de teste colorate o sciummate e te cerche de scrivere le parole ca vedite.\nQuiste jè 'nu combite difficile da automatizzà, ce sò le umane a scettà merde invece de le attacche robbot riuscime a bloccà cchiù facilmende.\n\nSfortunatamende stu fatte pò da inconveniende a le utinde cu visiune limitate o ca ausane le browser de sole teste o ca parlane. Jndr'à stu mumende non ge tenime 'n'alternative audie.\nPe piacere condatte le [[Special:ListAdmins|amministrature d'u site]] pe assistenze ce quiste jè condre a le leggittime aziune tune.\n\nCazze 'u buttonne \"rrete\" (back) sus a 'u browser tune pe turnà a 'u cangiamende d'a pàgene.",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# 'A sindasse jè a cumme segue:\n# * Ogneccose da 'nu carattere \"#\" 'mbonde a fine d'a linèe jè 'nu commende\n# * Ogne linèe chiene jè 'nu frammende de regex 'u quale addà sulamende combrondarse cu le host jndr'à l'URL\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "Comblete le aziune CAPTCHA senze ca a scè ausanne 'u CAPTCHA"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/sah.json b/extensions/ConfirmEdit/i18n/core/sah.json
deleted file mode 100644
index 2e622f51..00000000
--- a/extensions/ConfirmEdit/i18n/core/sah.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "HalanTul"
- ]
- },
- "captcha-edit": "Сирэйи уларытыаххын баҕардаххына, манна баар примеры суоттаа уонна эппиэтин аналлаах сиргэ суруй ([[Special:Captcha/help|сиһилии]]):",
- "captcha-desc": "CAPTCHA көмөтүнэн спаамтан уонна киирии тылы уорууттан көмүскэли хааччыйар",
- "captcha-addurl": "Тас саайка ыйынньык туруорбуккун; \nспаамтан көмүскэнэр соруктаах суолу толор - ойууга баар буукубалары хатылаа: <br />\n([[Special:Captcha/help|Сиһилии]])",
- "captcha-badlogin": "Киирии тылы аптамаат алдьаппатын туһугар оҥоһуллубут харыстыыр дьайыыны толор, манна баар примеры суоттаа уонна эппиэтин анал сиргэ суруй ([[Special:Captcha/help|сиһилии]]):",
- "captcha-createaccount": "Бэлиэтэнэргэр аптамаатынан алдьатыыттан (спаамтан) харыстыыр соруктаах дьайыыны оҥор, ойууга көстөр буукубалары анал сиргэ киллэр:<br />\n([[Special:Captcha/help|Сиһилии]])",
- "captcha-createaccount-fail": "Бигэргэтии куода суох эбэтэр атын.",
- "captcha-create": "Сирэйи оҥорорго бу примеры суоттаа ([[Special:Captcha/help|сиһилии]]):",
- "captcha-sendemail": "Аптамаат спаамтан көмүскэнэр туһугар, бука диэн, бу дьайыыны суоттаа уонна эппиэтин суруй ([[Special:Captcha/help|сиһилии]]):",
- "captcha-sendemail-fail": "Бигэргэтии куода суох эбэтэр атын.",
- "captcha-disabledinapi": "Бу дьайыы CAPTCHA нөҥүө эрэ оҥоһуллар, онон API нөҥүө толоруллубат.",
- "captchahelp-title": "Captcha көмөтө",
- "captchahelp-cookies-needed": "Бу дьайыы үлэлиирин курдук браузергар куукины холбоо.",
- "captchahelp-text": "Биһиги саайпыт курдук иһинээҕитин уларытары көҥүллүүр саайтарга сороҕор спам ыытар программалар аптамаатынан бэйэлэрин ыйынньыктарын угаллар.\nОннук аптамаатынан эбиллибит ыйынньыктары суох оҥорор кыах баар эрээри, ол биллэн турар син биир мэһэйдэри үөскэтэр.\n\nОл иһин сороҕор, холобур саҥа ыйынньыгы эбэргэ, программа өҥнөөх эбэтэр хаанньары барбыт тиэкистээх ойууну көрдөрөн, ол тиэкиһи анал түннүккэ хатылатыан сөп.\nМаннык көрдөһүүнү аптамаат кыайан толорбот, оттон киһи чэпчэкитик толорор.\n\nОл гынан баран маннык көмүскэл сорох дьоҥҥо (көрбөт эбэтэр ааҕар браузердары туһанар дьоҥҥо) моһоллору үөскэтиэн сөп.\nБилигин бу моһолу суох оҥорор кыах суох.\nОннук мэһэй таҕыстаҕына бука диэн баалама, биир эмит [[Special:ListAdmins|дьаһабылга (администраатарга)]] этээр, көмөлөһүө.\n\nКөннөрүүгэ төттөрү тиийэргэ браузерыҥ «Назад» тимэҕин баттаа.",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Синтаксиһын быһаарыыта:\n# * \"#\" бэлиэттэн строка бүтүөр дылы барыта хос быһаарыы курдук ааҕыллар\n# * Хас биирдии кураанах буолбатах строка URL сорҕотун курдук ааҕыллар\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "CAPTCHA-бэрэбиэркэни ааһыахтаах дьайыылары CAPTCHA-та суох толоруу"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/scn.json b/extensions/ConfirmEdit/i18n/core/scn.json
deleted file mode 100644
index ac7377b9..00000000
--- a/extensions/ConfirmEdit/i18n/core/scn.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Melos",
- "Santu"
- ]
- },
- "captcha-edit": "Pi mudificaru la pàggina è nicissàriu arisòrviri lu sèmprici càlculu prisintati di sècutu e nziriri lu risurtatu nnâ casedda\n([[Special:Captcha/help|chiossai nfurmazzioni]]):",
- "captcha-desc": "Sèmprici mplimintazzioni di na Captcha",
- "captcha-addurl": "La mudìfica addumannata junci novi lijami di fora a la pàggina; pi pricauzzioni contr'a lu nzirimentu autumàticu di spam, è nicissarii arisòrviri lu sèmprici càlculu prisintatu di sècutu e nziriri lu risurtatu nnâ casedda ([[Special:Captcha/help|chiossai nfurmazzioni]]):",
- "captcha-badlogin": "Pi pricauzzioni contr'a li tintativi di furzatura autumàtica dâ password, è nicussàriu arisòrviri lu sèmprici càlculu prusuntatu di sècutu e nziriri lu risurtatu nnâ casedda ([[Special:Captcha/help|chiossai nfurmazzioni]]):",
- "captcha-createaccount": "Pi pricauzzioni contr'a li tintativi di criazzioni autumàtica di l'account, pi riggistràrisi è nicissàriu arisòrviri lu sèmprici càlculu prisintatu di sècutu e nziriri lu risurtatu nnâ casedda ([[Special:Captcha/help|chiossai nfurmazzioni]]):",
- "captcha-createaccount-fail": "Còdici di virìfica sbagghiatu o ca manca.",
- "captcha-create": "Pi criari la pàggina è nicissàriu arisòrviri lu sèmprici càlculu prisintatu di sècutu e nziriri lu risurtatu nnâ casedda:<br />\n([[Special:Captcha/help|chiossai nfurmazzioni]]):",
- "captchahelp-title": "Chi cos'è lu captcha?",
- "captchahelp-cookies-needed": "È nicissàriu abbilitari li cookie supra lu browser pi jiri avanti",
- "captchahelp-text": "Ô spissu accàpita ca li siti Web ca accunzèntunu missaggi pùbbrichi, comu a stu wiki, sù pigghiati di mira di spammer ca ùsanu strumenti autumàtichi pi nziriri lijami pubbricitari ammeri assai nùmmira di siti. Macari ca li lijami ca non sunnu disiati si ponnu livari, sta cosa è, nti ogni casu, na granni camurrìa.\n\nNni tanti casi, p'asèmpiu quannu si voli jùnciri novi lijami Web nti na pàggina, lu software wiki pò ammustrari na mmàggini cu nu testu nicu acculuratu e/o difurmatu addumannannu di scrivìrilu nni na finistredda. Siccomu si tratta di na cosa difficili di fari pi nu computer, stu miccanìsimu pirmetti a (quasi tutti) l'utenti riali di cumplitari lu nzirimentu disiatu, mpidennu la trasuta a li chiossai di li spammer e di l'àutri attacchi autumatizzati.\n\nPi sfurtuna, stu strataggemma pò mèttiri 'n difficultati a l'utenti ca hannu prubremi di vista o a chiddi ca ùsanu browser testuali o basati supr'a la sìntesi vucali. Purtroppu aoggi non ci sunnu àutri miccanìsimi abbasati supr'a missaggi sunori; si sti pruciduri mpidìsciunu lu nzirimentu di nfurmazzioni ca si pènzanu ca sù liggìttimi, siti prigati di cuntattari [[Special:ListAdmins|l'amministraturi dû situ]] e addumannàrini l'assistenza.\n\nFari clic supra ô buttuni 'back' dû browser pi turnari a la pàggina di mudìfica.",
- "captcha-addurl-whitelist": " #<!-- non mudificari 'n nuddu modu sta riga --> <pre>\n# La sintassi è chista:\n# * Tuttu chiddu ca veni doppu nu caràtttrt \"#\" è nu cummentu, nzinu a la fini di la riga\n# * Tutti li righi npn vacanti sunnu frammenti di sprissioni riulari ca s'àpplicanu a lu sulu nomu di l'host ntê URL\n #</pre> <!-- non mudificari 'n nuddu modu sta riga -->",
- "right-skipcaptcha": "Fà l'azzioni ca attivàssiru lu captcha senza passari pi lu captcha"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/sv.json b/extensions/ConfirmEdit/i18n/core/sv.json
deleted file mode 100644
index 2b25f223..00000000
--- a/extensions/ConfirmEdit/i18n/core/sv.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ainali",
- "Boivie",
- "Lejonel",
- "M.M.S.",
- "MagnusA",
- "Martinwiss",
- "Per",
- "Rotsee",
- "WikiPhoenix",
- "Lokal Profil"
- ]
- },
- "captcha-edit": "För att redigera den här sidan måste du först lösa följande enkla räkneuppgift och skriva svaret i rutan ([[Special:Captcha/help|mer information]]):",
- "captcha-desc": "Tillhandahåller CAPTCHA-metoder för att skydda mot spam och lösenordsgissning",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "Din ändring innebär nya externa länkar i texten. För att skydda wikin mot automatisk spam måste du lösa följande enkla räkneuppgift och ange svaret i rutan ([[Special:Captcha/help|mer information]]):",
- "captcha-badlogin": "För att skydda wikin mot försök att knäcka lösenord på automatisk väg, måste du lösa följande enkla räkneuppgift och ange svaret i rutan ([[Special:Captcha/help|mer information]]):",
- "captcha-createaccount": "För att skydda wikin mot automatiskt skapade användarkonton, måste du lösa följande enkla räkneuppgift och ange svaret i rutan ([[Special:Captcha/help|mer information]]):",
- "captcha-createaccount-fail": "Felaktig eller saknad CAPTCHA.",
- "captcha-create": "För att skapa den här sidan måste du lösa följande enkla räkneuppgift och ange svaret i rutan ([[Special:Captcha/help|mer information]]):",
- "captcha-sendemail": "För att skydda wikin mot automatiserad spam, ber vi dig att lösa den enkla räkneuppgiften, och skriva in svaret i rutan ([[Special:Captcha/help|mer information]]):",
- "captcha-sendemail-fail": "Felaktig eller saknad CAPTCHA.",
- "captcha-disabledinapi": "Denna åtgärd kräver en CAPTCHA, så den kan inte utföras genom API:et.",
- "captchahelp-title": "CAPTCHA-hjälp",
- "captchahelp-cookies-needed": "Du måste ha kakor aktiverade i din webbläsare för att det här ska fungera.",
- "captchahelp-text": "Webbplatser som tillåter inlägg från allmänheten, som den här wikin gör, missbrukas ofta av spammare som använder automatiserade verktyg för att lägga till länkar på många webbplatser.\nÄven om dessa spamlänkar kan tas bort är de till stort besvär.\n\nIbland, speciellt då du lägger till nya externa länkar på en sida, visar wikin en bild på en färgad eller förvriden text och ber dig skriva in orden som visas.\nEftersom detta är en uppgiften som är svår att automatisera, låter den de flesta riktiga människor göra sina redigeringar medan spammare och andra robotattacker stoppas.\n\nTyvärr kan det här orsaka problem för användare med nedsatt syn eller som använder text- eller talbaserade webbläsare.\nFör nävarande finns inga ljudbaserade alternativ tillgängliga.\nVänligen kontakta [[Special:ListAdmins|webbplatsens administratörer]] för hjälp om det här hindrar dig från att göra legitima ändringar.\n\nTryck på bakåtknappen i din webbläsare för att gå tillbaks till sidredigeringsläget.",
- "captcha-addurl-whitelist": " #<!-- lämna denna rad precis som den är --> <pre>\n# Syntaxen är följande:\n# * Allting från ett \"#\"-tecken till slutet av en rad är en kommentar\n# * Varje icke-tom rad är ett fragment av ett reguljärt uttryck som endast matchar domänen i en URL\n #</pre> <!-- lämna denna rad precis som den är -->",
- "right-skipcaptcha": "Utföra CAPTCHA-utlösande handlingar utan att behöva gå igenom CAPTCHA"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/te.json b/extensions/ConfirmEdit/i18n/core/te.json
deleted file mode 100644
index 25f0599d..00000000
--- a/extensions/ConfirmEdit/i18n/core/te.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Chaduvari",
- "Kiranmayee",
- "Mpradeep",
- "Veeven"
- ]
- },
- "captcha-edit": "ఈ పేజీని సరిదిద్దడానికి, కింది ఇచ్చిన చిన్న లెక్కని చేసి జవాబుని పక్కనున్న పెట్టెలో టైపు చెయ్యండి ([[ప్రత్యేక:Captcha/help|మరింత సమాచారం]]):",
- "captcha-desc": "సరళమైన అమకవేప అమలు",
- "captcha-addurl": "మీ దిద్దుబాటులో కొత్త బయటి లింకులు ఉన్నాయి. ఆటోమేటెడ్ స్పాము నుండి రక్షించేందుకు గాను, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
- "captcha-badlogin": "పాసువోర్డును బాట్ల ద్వారా తెలుసుకోకుండా ఉండేందుకు, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
- "captcha-createaccount": "బాట్ల ద్వారా ఖాతాలను సృష్టించకుండా నిరోధించటానికి, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
- "captcha-createaccount-fail": "దృవీకరించుకోవడానికి విలువ ఇవ్వలేదు లేదా దానిని తప్పుగా ఇచ్చారు.",
- "captcha-create": "కొత్తపేజీని సృష్టించడానికి, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
- "captchahelp-title": "ఆమకవేప సహాయం",
- "captchahelp-cookies-needed": "ఇది పని చెయ్యాలంటే మీ బ్రౌజరులో కూకీలు సశక్తమై ఉండాలి.",
- "captchahelp-text": "ప్రజలనుండి రచనలను స్వీకరించే ఈ వికీ వంటి వెబ్‌సైట్లు, ఆటోమాటిక్ ప్రోగ్రాములతో తమ స్వంత లింకులను చేర్చే స్పాము ముష్కరుల దాడులకు గురవడం తరచూ జరుగుతూ ఉంటుంది. ఆ లింకులను తీసేయడం పెద్ద విషయం కాకపోయినప్పటికీ, అవి తలనెప్పి అనేది మాత్రం నిజం.\n\nకొన్నిసార్లు, ముఖ్యంగా ఏదైనా పేజీ నుండి బయటకు లింకులు ఇచ్చేటపుడు, వంకర్లు తిరిగిపోయి ఉన్న పదాల బొమ్మను చూపించి ఆ పదాన్ని టైపు చెయ్యమని వికీ మిమ్మల్ని అడగవచ్చు. దీన్ని ఆటోమాటిక్ టూల్సుతో చెయ్యడం చాలా కష్టం కాబట్టి, స్పాము జిత్తులు చెల్లవు; మనుష్యులు మాత్రం మామూలుగానే చెయ్యగలరు.\n\nదురదృష్టవశాత్తూ, చూపు సరిగా లేనివారికి, టెక్స్టు బ్రౌజర్లు మాత్రమే వాడేవారికి ఇది అసౌకర్యం కలిగిస్తుంది. ప్రస్తుతానికి శబ్దం వినిపించే వెసులుబాటు మాకు లేదు. మీరు రచనలు చెయ్యకుండా ఇది అడ్డుపడుతుంటే, సహాయం కోసం సైటు నిర్వాహకుణ్ణి సంప్రదించండి.\nమీరు చెసే విలువయిన, సమ్మతమయిన వ్యాస మార్పులు భద్రపరచటము కుదరకపొతె, దయచేసి [[Special:ListAdmins|సైటు నిర్వహణాధికారి]]కి లేఖ రాయండి.\n\nమీ బ్రౌజర్లోని బ్యాక్(back) మీటను నొక్కి ఇంతకు ముందరి పేజీకి వెళ్ళండి.",
- "captcha-addurl-whitelist": " #<!-- ఈ పంక్తిని ఉన్నదున్నట్లు ఇలాగే వదిలివేయండి --> <pre>\n# ఇక్కడ రాయాల్సిన విధానం ఇదీ:\n# * \"#\" అనే అక్షరం నుండి ఆ పంక్తి చివరివరకూ వ్యాఖ్యానం\n# * ఖాళీగా లేని ప్రతీ పంక్తీ ఒక regex భాగము, ఇది పేజీలో ఉన్న URLల్ల యొక్క హోస్టుతో మాత్రమే సరిచూడబడుతుంది\n #</pre> <!-- ఈ పంక్తిని ఉన్నదున్నట్లు ఇలాగే వదిలివేయండి -->",
- "right-skipcaptcha": "ఆమకవేప ద్వారా పోకుండానే దాని ట్రిగ్గరు చర్యలను అమలు చెయ్యి"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/th.json b/extensions/ConfirmEdit/i18n/core/th.json
deleted file mode 100644
index 405a326a..00000000
--- a/extensions/ConfirmEdit/i18n/core/th.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Passawuth",
- "Horus"
- ]
- },
- "captcha-edit": "เพื่อที่จะแก้ไขหน้านี้ กรุณาตอบโจทย์ปัญหาทางคณิตศาสตร์ข้างล่าง และใส่คำตอบลงในกล่อง ([[Special:Captcha/help|รายละเอียดเพิ่มเติม]]) :",
- "captcha-addurl": "การแก้ไขของคุณมีลิงก์็ไปยังเว็บไซต์ภายนอกด้วย\nเพื่อที่จะป้องกันสแปม กรุณาแก้โจทย์ด้านล่าง และพิมพ์คำตอบลงในกล่อง ([[Special:Captcha/help|รายละเอียด]]):",
- "captcha-badlogin": "กรุณาแก้โจทย์ด้านล่าง และพิมพ์คำตอบลงในกล่อง เพื่อที่จะป้องกันกา่รแอบแฮครหัสผ่านโดยผู้ไม่หวังดี ([[Special:Captcha/help|รายละเอียด]]):",
- "captcha-createaccount": "กรุณาแก้โจทย์ด้านล่าง และพิมพ์คำตอบลงในกล่อง เพื่อที่จะป้องกันการสร้างบัญชีผู้ใช้โดยผู้ไม่หวังดี ([[Special:Captcha/help|รายละเอียด]]):",
- "captcha-createaccount-fail": "แคปท์ชาไม่ถูกต้องหรือยังไม่ได้กรอก",
- "captcha-create": "กรุณาแก้โจทย์ด้านล่าง และพิมพ์คำตอบลงในกล่อง เพื่อที่จะสร้างหน้า\n([[Special:Captcha/help|รายละเอียด]]):",
- "captcha-sendemail-fail": "แคปท์ชาไม่ถูกต้องหรือยังไม่ได้กรอก",
- "captchahelp-title": "เกี่ยวกับแคปต์ชา",
- "captchahelp-cookies-needed": "คุณต้องอนุญาตคุกกี้บนเว็บบราวเซอร์ของคุณ เพื่อที่คุณจะสามารถล็อกอินได้"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/uk.json b/extensions/ConfirmEdit/i18n/core/uk.json
deleted file mode 100644
index 7198ae81..00000000
--- a/extensions/ConfirmEdit/i18n/core/uk.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ahonc",
- "Alex Khimich",
- "Andriykopanytsia",
- "NickK",
- "Olvin",
- "Riwnodennyk",
- "Ата",
- "Тест"
- ]
- },
- "captcha-edit": "Щоб відредагувати цю сторінку, будь ласка, виконайте просту арифметичну дію і введіть відповідь у текстове поле ([[Special:Captcha/help|докладніше]]):",
- "captcha-desc": "Забезпечує методи CAPTCHA для захисту від спаму і підбору пароля",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "Ви додали нові посилання на зовнішні сайти.\nІз метою захисту від автоматичного спаму, будь ласка, виконайте просту арифметичну дію і введіть відповідь у текстове поле, щоб редагування було збережене ([[Special:Captcha/help|докладніше]]):",
- "captcha-badlogin": "Із метою захисту від автоматичного злому пароля, будь ласка, виконайте просту арифметичну дію і введіть відповідь у текстове поле ([[Special:Captcha/help|докладніше]]):",
- "captcha-createaccount": "Із метою захисту від автоматичного створення облікового запису просимо виконати просту арифметичну дію і ввести відповідь у текстове поле ([[Special:Captcha/help|докладніше]]):",
- "captcha-createaccount-fail": "Неправильна або відсутня капча.",
- "captcha-create": "Щоб створити сторінку, будь ласка, виконайте просту арифметичну дію і введіть відповідь у текстове поле ([[Special:Captcha/help|докладніше]]):",
- "captcha-sendemail": "Із метою захисту вікі від автоматичного спаму просимо розв'язати простий математичний приклад і ввести відповідь ([[Special:Captcha/help|деталі]]):",
- "captcha-sendemail-fail": "Неправильна або відсутня капча.",
- "captcha-disabledinapi": "Ця дія потребує перевірки CAPTCHA, тому не може бути здійснена за допомогою API.",
- "captchahelp-title": "Довідка про CAPTCHA",
- "captchahelp-cookies-needed": "Вам потрібно ввімкнути куки у браузері, щоб ця функція запрацювала.",
- "captchahelp-text": "Веб-сайти, що дозволяють додавати або змінювати свій вміст, у тому числі вікі, часто стають ціллю спамерів, які використовують програми для автоматичного додавання посилань.\nХоча такі посилання і можуть бути вилучені, вони є істотною вадою.\n\nІноді, наприклад при додаванні на сторінку нового веб-посилання, вікі може показати вам картинку з кольоровим або спотвореним текстом і запропонувати ввести текст, який ви бачите.\nОскільки подібну задачу важко автоматизувати, це дає можливість більшості людей робити свої зміни, в той час як більшість спамерських і вандальних програм не можуть цього зробити.\n\nНа жаль, подібний захист може спричинити незручності для людей із вадами зору. Зараз у нас нема звукової альтернативи для такої перевірки. Будь ласка, зверніться по допомогу до [[Special:ListAdmins|адміністраторів]], якщо подібна перевірка заважає вам добросовісно працювати з сайтом.\n\nНатисніть кнопку «Назад» у вашому браузері, щоб повернутися до редагування.",
- "captcha-addurl-whitelist": "#<!-- leave this line exactly as it is --> <pre>\n# Опис синтаксису:\n# * Все, що починається з символу \"#\" до кінця рядка, вважається коментарем\n# * Кожний непорожній рядок вважається фрагментом регулярного виразу відповідної назви вузла в URL\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "Виконання дій, що вимагають CAPTCHA-перевірки, без проходження CAPTCHA"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/yi.json b/extensions/ConfirmEdit/i18n/core/yi.json
deleted file mode 100644
index 00fde31c..00000000
--- a/extensions/ConfirmEdit/i18n/core/yi.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "פוילישער"
- ]
- },
- "captcha-addurl": "אײַער רעדאַקטירונג אַנטהאַלט נײַע דרויסנדיקע לינקען. \nצו שיצן די וויקי קעגן אויטאמזירטן ספאַם, בעטן מיר אײַך צו לייזן די פשוטע סומע אונטן און קלאַפט אײַן דעם ענטפֿער אינעם קעסטל כדי אויפצוהיטן אײַער רעדאקטירונג. ([[Special:Captcha/help|נאך אינפֿארמאַציע]]):",
- "captcha-badlogin": "צו שיצן די וויקי קעגן אויטאמאַטישן ברעכן פאַסווערטער, בעטן מיר אײַך צו לייזן די פשוטע סומע אונטן און קלאַפט אײַן דעם ענטפֿער אינעם קעסטל כדי אויפצוהיטן אײַער רעדאקטירונג. ([[Special:Captcha/help|נאך אינפֿארמאַציע]]):",
- "captcha-createaccount": "צו שיצן די וויקי קעגן אויטאמאַטישע שאַפֿן קאנטעס, בעטן מיר אײַך צו לייזן די פשוטע סומע אונטן און אריינקלאַפן דעם ענטפֿער אינעם קעסטל כדי אויפצוהיטן אײַער רעדאקטירונג. ([[Special:Captcha/help|נאך אינפֿארמאַציע]]):",
- "captcha-createaccount-fail": "גרײַזיקער אָדער פֿעלנדיקער באַשטעטיק־קאָד",
- "captchahelp-title": "CAPTCHA הילף"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/yue.json b/extensions/ConfirmEdit/i18n/core/yue.json
deleted file mode 100644
index a1c602c5..00000000
--- a/extensions/ConfirmEdit/i18n/core/yue.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": [],
- "captcha-edit": "要編輯呢一篇文,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
- "captcha-desc": "簡單嘅 captcha 實行",
- "captcha-addurl": "你編輯嘅內容裏面有新嘅URL連結;為咗避免受到自動垃圾程式的侵擾,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
- "captcha-badlogin": "為咗防止程式自動破解密碼,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
- "captcha-createaccount": "為咗防止程式自動註冊,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
- "captcha-createaccount-fail": "驗證碼錯誤或者唔見咗。",
- "captcha-create": "要開呢一版,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
- "captchahelp-title": "Captcha 幫助",
- "captchahelp-cookies-needed": "你需要開咗響瀏覽器度嘅cookies先至可以用呢樣嘢。",
- "captchahelp-text": "就好似呢個wiki咁,對公眾開放編輯嘅網站係會經常受到垃圾連結騷擾。嗰啲人利用自動化垃圾程序將佢哋嘅連結張貼到好多網站。雖然呢啲連結可以被清除,但係呢啲嘢確實令人十分之討厭。\n\n有時,特別係當響一頁添加新嘅網頁連結嗰陣,呢個網站會畀你睇一幅有顏色的或者有變形文字嘅圖像,跟住要你輸入所顯示嘅文字。因為咁係難以自動完成嘅一項任務,它將允許人保存佢哋嘅編輯,同時亦阻止大多數發送垃圾郵件者同其它機械人嘅攻擊。\n\n令人遺憾嘅係,咁會令到視力唔好嘅人,或者利用基於文本或者基於聲音嘅瀏覽器用戶感到不便。而目前我哋仲未能夠提供音頻嘅選擇。如果咁樣咁啱阻止到你進行正常嘅編輯,請同管理員聯繫以獲得幫助。\n\n撳一下響瀏覽器度嘅「後退」掣返去你之前所編輯緊嘅頁面。",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# 語法好似下面噉:\n# * 所有由 \"#\" 字元之後嘅嘢到行尾係註解\n# * 所有非空白行係一個regex部份,只係會同裏面嘅URL主機相符\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "執行captcha引發嘅動作時唔需要經過captcha"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/zh-hans.json b/extensions/ConfirmEdit/i18n/core/zh-hans.json
deleted file mode 100644
index d500075e..00000000
--- a/extensions/ConfirmEdit/i18n/core/zh-hans.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bencmq",
- "Hzy980512",
- "Liangent",
- "PhiLiP",
- "Xiaomingyan",
- "Yfdyh000",
- "Liuxinyu970226",
- "Mywood"
- ]
- },
- "captcha-edit": "要编辑该页面,请输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
- "captcha-desc": "提供验证码技术防止垃圾信息和密码破解破坏",
- "captcha-label": "验证码",
- "captcha-addurl": "你的编辑包含新的外部链接。为保护本wiki免受自动垃圾程序的破坏,我们恳请你输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
- "captcha-badlogin": "为保护本wiki免受自动密码破解的破坏,我们恳请你输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
- "captcha-createaccount": "为保护本wiki免受自动账户创建的破坏,我们恳请你输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
- "captcha-createaccount-fail": "验证码错误或丢失。",
- "captcha-create": "要创建页面,请输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
- "captcha-sendemail": "为保护本wiki免受自动垃圾程序的破坏,我们恳请你输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
- "captcha-sendemail-fail": "验证码错误或丢失。",
- "captcha-disabledinapi": "该操作需要验证码,因此无法通过API执行。",
- "captchahelp-title": "验证码帮助",
- "captchahelp-cookies-needed": "你需要启用你的浏览器的cookie使该程序工作。",
- "captchahelp-text": "接受公众贡献的网站,比如本wiki,经常受到使用自动工具添加垃圾网站链接的垃圾制造者的破坏。尽管这些垃圾链接可以被删除,它们仍然极其麻烦。\n\n有时,特别是给页面添加新的网络链接时,本wiki可能会向你展示一张有多种颜色或扭曲的文字的图像,并要求你输入展示的文字。由于这是一项难以用自动工具完成的任务,它可以允许在大多数真人做出贡献的同时,阻止大多数垃圾制造者和其他自动攻击者。\n\n遗憾地是,这可能会对视力受限或是使用纯文本或阅读浏览器的用户造成不便。目前我们还没替代的声音选择。如果这项措施意外地阻止你进行正常的贡献,请与[[Special:ListAdmins|网站管理员]]联系获取帮助。\n\n点击浏览器的“后退”按钮返回页面编辑器。",
- "captcha-addurl-whitelist": " #<!-- 请将本行保持原样 --> <pre>\n# 句法如下:\n# * 所有以“#”字符开头的行都是注释\n# * 所有非空白行是正则表达式片段,只会对URL中的内容进行匹配\n #</pre> <!-- 请将本行保持原样 -->",
- "right-skipcaptcha": "执行触发验证码的操作时无需验证"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/zh-hant.json b/extensions/ConfirmEdit/i18n/core/zh-hant.json
deleted file mode 100644
index 01d6c6af..00000000
--- a/extensions/ConfirmEdit/i18n/core/zh-hant.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Horacewai2",
- "Hydra",
- "Liangent",
- "Mark85296341",
- "Simon Shek",
- "Waihorace",
- "Cwlin0416"
- ]
- },
- "captcha-edit": "要編輯這篇文章,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
- "captcha-desc": "提供 CAPTCHA 技術來阻止垃圾訊息和密碼猜解",
- "captcha-label": "CAPTCHA",
- "captcha-addurl": "你編輯的內容中含有一個新的外部連結;為了免受自動垃圾程式的侵擾,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
- "captcha-badlogin": "為防止程式自動破解密碼,請答出一條簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
- "captcha-createaccount": "為防止程式自動註冊,請答出一條簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
- "captcha-createaccount-fail": "CAPTCHA 錯誤或遺失。",
- "captcha-create": "要建立頁面,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
- "captcha-sendemail": "為防止程式進行破壞,請答出一條簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
- "captcha-sendemail-fail": "CAPTCHA 錯誤或遺失。",
- "captcha-disabledinapi": "此操作需要使用 CAPTCHA 驗証,因此無法透過 API 執行。",
- "captchahelp-title": "Captcha 說明",
- "captchahelp-cookies-needed": "您需要開啟瀏覽器上的 Cookies 方可使用此功能。",
- "captchahelp-text": "接受公開張貼訊息的網站,同本 Wiki,通常會被垃圾訊息散佈者使用自動化工具所濫用,在多個網站張貼垃圾連結。\n雖然可以移除這些垃圾連結,但這實著造成困擾。\n\n因此,部份時候,特別是在頁面新增網站連結時,Wiki 會顯示您有彩色或扭曲文字的圖片,要求您輸顯示的文字。\n由於這個動作難以自動化,它可在讓實際的使用者張貼訊息的同時避免多數垃圾訊息散佈者及自動化工具的攻擊。\n\n可惜的是,這仍可能對視力有障礙或者使用以文字基礎或語音基礎的瀏覽器造成不便。\n但目前我們還尚未提供語音的替代方案。\n若您的合法操作在預期之外受到限制,請連絡 [[Special:ListAdmins|網站管理員]] 尋求協助。\n\n請點選瀏覽器的 \"返回\" 按鈕以返回頁面編輯器。",
- "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# 語法格式如下:\n# * 任何以 \"#\" 字元開頭至結尾代表註解\n# * 任何非空白行代表部份正規表示法,會用來比對 URL 中的主機\n #</pre> <!-- leave this line exactly as it is -->",
- "right-skipcaptcha": "執行會觸發驗證碼的動作時無需經過驗證碼檢驗"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/cs.json b/extensions/ConfirmEdit/i18n/cs.json
index 5ddb4bc0..5ddb4bc0 100644
--- a/extensions/ConfirmEdit/i18n/core/cs.json
+++ b/extensions/ConfirmEdit/i18n/cs.json
diff --git a/extensions/ConfirmEdit/i18n/cv.json b/extensions/ConfirmEdit/i18n/cv.json
new file mode 100644
index 00000000..4c2f2683
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/cv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chuvash2014"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/cy.json b/extensions/ConfirmEdit/i18n/cy.json
index 6f506946..6f506946 100644
--- a/extensions/ConfirmEdit/i18n/core/cy.json
+++ b/extensions/ConfirmEdit/i18n/cy.json
diff --git a/extensions/ConfirmEdit/i18n/core/da.json b/extensions/ConfirmEdit/i18n/da.json
index b6cede5a..b6cede5a 100644
--- a/extensions/ConfirmEdit/i18n/core/da.json
+++ b/extensions/ConfirmEdit/i18n/da.json
diff --git a/extensions/ConfirmEdit/i18n/core/de-formal.json b/extensions/ConfirmEdit/i18n/de-formal.json
index 981338e0..981338e0 100644
--- a/extensions/ConfirmEdit/i18n/core/de-formal.json
+++ b/extensions/ConfirmEdit/i18n/de-formal.json
diff --git a/extensions/ConfirmEdit/i18n/core/de.json b/extensions/ConfirmEdit/i18n/de.json
index 424d9016..424d9016 100644
--- a/extensions/ConfirmEdit/i18n/core/de.json
+++ b/extensions/ConfirmEdit/i18n/de.json
diff --git a/extensions/ConfirmEdit/i18n/core/diq.json b/extensions/ConfirmEdit/i18n/diq.json
index 4d981490..4d981490 100644
--- a/extensions/ConfirmEdit/i18n/core/diq.json
+++ b/extensions/ConfirmEdit/i18n/diq.json
diff --git a/extensions/ConfirmEdit/i18n/core/dsb.json b/extensions/ConfirmEdit/i18n/dsb.json
index e44fc43f..e44fc43f 100644
--- a/extensions/ConfirmEdit/i18n/core/dsb.json
+++ b/extensions/ConfirmEdit/i18n/dsb.json
diff --git a/extensions/ConfirmEdit/i18n/core/ee.json b/extensions/ConfirmEdit/i18n/ee.json
index 71af2431..71af2431 100644
--- a/extensions/ConfirmEdit/i18n/core/ee.json
+++ b/extensions/ConfirmEdit/i18n/ee.json
diff --git a/extensions/ConfirmEdit/i18n/el.json b/extensions/ConfirmEdit/i18n/el.json
new file mode 100644
index 00000000..9922c589
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/el.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Badseed",
+ "Consta",
+ "Dada",
+ "Geraki",
+ "Glavkos",
+ "Kiriakos",
+ "Omnipaedista",
+ "Protnet",
+ "ZaDiak",
+ "Περίεργος"
+ ]
+ },
+ "captcha-edit": "Για να επεξεργαστείτε αυτή τη σελίδα, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "captcha-desc": "Παρέχει τεχνικές CAPTCHA για την προστασία από spam και προσπάθειες σπασίματος κωδικών πρόσβασης",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Η επεξεργασία σας περιλαμβάνει νέους εξωτερικούς συνδέσμους. Για λόγους προστασίας κατά αυτοματοποιημένων ανεπιθύμητων δημοσιεύσεων, παρακαλούμε υπολογίστε το παρακάτω άθροισμα και γράψτε την απάντηση στο κουτάκι ώστε να αποθηκευτεί η επεξεργασία σας ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "captcha-badlogin": "Για την προστασία του wiki απέναντι σε σπάσιμο κωδικών πρόσβασης, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "captcha-createaccount": "Για την προστασία του wiki απέναντι σε αυτοματοποιημένη δημιουργία λογαριασμών, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "captcha-createaccount-fail": "Εσφαλμένος ή μη διαθέσιμο CAPTCHA.",
+ "captcha-create": "Για να δημιουργήσετε τη σελίδα, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "captcha-sendemail": "Για την προστασία του βίκι απέναντι σε αυτοματοποιημένες ανεπιθύμητες δημοσιεύσεις, παρακαλούμε υπολογίστε το παρακάτω απλό άθροισμα και γράψτε την απάντηση στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
+ "captcha-sendemail-fail": "Λανθασμένος ή μη πληκτρολογημένος κωδικός επιβεβαίωσης.",
+ "captcha-disabledinapi": "Η ενέργεια αυτή απαιτεί επαλήθευση λεκτικού κειμένου και για αυτό δεν μπορεί να γίνει μέσω του API.",
+ "captchahelp-title": "Βοήθεια για CAPTCHA",
+ "captchahelp-cookies-needed": "Θα πρέπει να έχετε τα cookies ενεργοποιημένα στον περιηγητή σας για να εκτελεστεί η λειτουργία.",
+ "captchahelp-text": "Οι ιστότοποι που επιτρέπουν δημόσια επεξεργασία, όπως αυτό το wiki, παραβιάζονται συχνά από spammers που χρησιμοποιούν αυτοματοποιημένα εργαλεία για να δημοσιεύουν μαζικά υπερσυνδέσμους σε πλήθος ιστοτόπων. Αν και αυτοί σύνδεσμοι spam μπορούν να αφαιρεθούν, είναι μεγάλος μπελάς.\n\nΜερικές φορές, ειδικά κατά την προσθήκη νέων συνδέσμων σε μια σελίδα, το wiki μπορεί να σας παρουσιάσει μια εικόνα με χρωματισμένο ή διαστρεβλωμένο κείμενο και να σας ζητήσει να πληκτρολογήσετε τις λέξεις που διακρίνετε. Δεδομένου ότι αυτή η εργασία είναι δύσκολο να αυτοματοποιηθεί, θα επιτρέψει στους περισσότερους πραγματικούς ανθρώπους να κάνουν τις δημοσιεύσεις τους, σταματώντας όμως spammers και άλλους ρομποτικά επιτιθέμενους.\n\nΔυστυχώς αυτό μπορεί να προκαλέσει δυσχέρεια σε χρήστες με προβλήματα όρασης τους ή όσους χρησιμοποιούν περιηγητές αποκλειστικά κειμένου ή περιηγητές με ομιλία. Προς το παρόν δεν έχουμε κάποια ηχητική εναλλακτική λύση διαθέσιμη. Παρακαλώ επικοινωνήστε με τους [[Special:ListAdmins|διαχειριστές]] του ιστότοπου για βοήθεια, εάν αυτό για κάποιο λόγο σας αποτρέπει να εκτελέσετε θεμιτές ενέργειες.\n\nΠατήστε το κουμπί «πίσω» στον περιηγητή σας για να επιστρέψετε στον επεξεργαστή σελίδων.",
+ "captcha-addurl-whitelist": " #<!-- αφήστε αυτή την γραμμή ακριβώς όπως είναι --> <pre>\n# Η σύνταξη είναι ως ακολούθως:\n# * Οποιαδήποτε γραμμή ξεκινάει με χαρακτήρα \"#\" είναι σχόλιο\n# * Κάθε μη κενή γραμμή αποτελεί μέρος κανονικής έκφρασης η οποία αντιστοιχεί σε διευθύνσεις URL\n #</pre> <!-- αφήστε αυτή την γραμμή ακριβώς όπως είναι -->",
+ "right-skipcaptcha": "Πραγματοποίηση ενεργειών που ενεργοποιούν CAPTCHA χωρίς να χρειάζεται πέρασμα από το CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/en-ca.json b/extensions/ConfirmEdit/i18n/en-ca.json
index 73cc8bed..73cc8bed 100644
--- a/extensions/ConfirmEdit/i18n/core/en-ca.json
+++ b/extensions/ConfirmEdit/i18n/en-ca.json
diff --git a/extensions/ConfirmEdit/i18n/core/en-gb.json b/extensions/ConfirmEdit/i18n/en-gb.json
index 83c1f0eb..83c1f0eb 100644
--- a/extensions/ConfirmEdit/i18n/core/en-gb.json
+++ b/extensions/ConfirmEdit/i18n/en-gb.json
diff --git a/extensions/ConfirmEdit/i18n/core/en.json b/extensions/ConfirmEdit/i18n/en.json
index 56fb4abe..56fb4abe 100644
--- a/extensions/ConfirmEdit/i18n/core/en.json
+++ b/extensions/ConfirmEdit/i18n/en.json
diff --git a/extensions/ConfirmEdit/i18n/core/eo.json b/extensions/ConfirmEdit/i18n/eo.json
index e23f7855..e23f7855 100644
--- a/extensions/ConfirmEdit/i18n/core/eo.json
+++ b/extensions/ConfirmEdit/i18n/eo.json
diff --git a/extensions/ConfirmEdit/i18n/core/es.json b/extensions/ConfirmEdit/i18n/es.json
index 15192d6d..15192d6d 100644
--- a/extensions/ConfirmEdit/i18n/core/es.json
+++ b/extensions/ConfirmEdit/i18n/es.json
diff --git a/extensions/ConfirmEdit/i18n/core/et.json b/extensions/ConfirmEdit/i18n/et.json
index 8d688a6a..8d688a6a 100644
--- a/extensions/ConfirmEdit/i18n/core/et.json
+++ b/extensions/ConfirmEdit/i18n/et.json
diff --git a/extensions/ConfirmEdit/i18n/core/eu.json b/extensions/ConfirmEdit/i18n/eu.json
index 726d0e5f..726d0e5f 100644
--- a/extensions/ConfirmEdit/i18n/core/eu.json
+++ b/extensions/ConfirmEdit/i18n/eu.json
diff --git a/extensions/ConfirmEdit/i18n/core/fa.json b/extensions/ConfirmEdit/i18n/fa.json
index 6ee7e81d..6ee7e81d 100644
--- a/extensions/ConfirmEdit/i18n/core/fa.json
+++ b/extensions/ConfirmEdit/i18n/fa.json
diff --git a/extensions/ConfirmEdit/i18n/fancy/ar.json b/extensions/ConfirmEdit/i18n/fancy/ar.json
deleted file mode 100644
index 4a2f375e..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/ar.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Aiman titi",
- "Asaifm",
- "Meno25"
- ]
- },
- "fancycaptcha-desc": "مولد فانسي كابتشا لConfirm Edit",
- "fancycaptcha-addurl": "تعديلك يتضمن وصلات خارجية جديدة.\nللحماية من السخام الأوتوماتيكي، من فضلك أدخل الكلمات التي تظهر بالأسفل في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):",
- "fancycaptcha-badlogin": "للمساعدة في الحماية ضد سرقة كلمات السر، من فضلك أدخل الكلمات التي تظهر أدناه في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):",
- "fancycaptcha-createaccount": "للمساعدة في منع إنشاء حسابات بطريقة أوتوماتيكية، قم من فضلك بإدخال الكلمات التي تظهر أدناه في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):",
- "fancycaptcha-create": "لإنشاء الصفحة، من فضلك أدخل الكلمات التي تظهر بالأسفل في الصندوق\n([[Special:Captcha/help|مزيد من المعلومات]]):",
- "fancycaptcha-edit": "لتعديل هذه الصفحة، من فضلك أدخل الكلمات التي تظهر بالأسفل في الصندوق\n([[Special:Captcha/help|مزيد من المعلومات]]):",
- "fancycaptcha-sendemail": "للمساعدة في منع إنشاء حسابات بطريقة أوتوماتيكية، قم من فضلك بإدخال الكلمات التي تظهر أدناه في الصندوق ([[Special:Captcha/help|مزيد من المعلومات]]):",
- "fancycaptcha-reload-text": "تحديث"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/as.json b/extensions/ConfirmEdit/i18n/fancy/as.json
deleted file mode 100644
index fb2f2daa..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/as.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Chaipau",
- "Gitartha.bordoloi",
- "Rajuonline"
- ]
- },
- "fancycaptcha-addurl": "আপোনাৰ সম্পাদনাত বাহ্যিক সংযোগ আছে।\nস্বয়ংক্ৰীয় সম্পাদনাৰ পৰা হাত সাৰিবলৈ, তলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখক। ([[Special:Captcha/help|অধিক তথ্য]]):",
- "fancycaptcha-badlogin": "স্বয়ংক্ৰীয় গুপ্তশব্দ চুৰিৰ পৰা হাত সাৰিবলৈ,\nতলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখক। ([[Special:Captcha/help|অধিক তথ্য]]):",
- "fancycaptcha-createaccount": "স্বয়ংক্ৰীয় নতুন সদস্যভুক্তিৰ পৰা হাত সাৰিবলৈ, তলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখক। ([[Special:Captcha/help|অধিক তথ্য]]):",
- "fancycaptcha-create": "পৃষ্ঠাটো বনাবলৈ, তলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখক। ([[Special:Captcha/help|অধিক তথ্য]]):",
- "fancycaptcha-edit": "এই পৃষ্ঠাটো সম্পাদনা কৰিবলৈ, তলত দেখিবলৈ পোৱা শব্দটো বাকচৰ ভিতৰত লিখক। ([[Special:Captcha/help|অধিক তথ্য]]):",
- "fancycaptcha-sendemail": "স্বয়ংক্ৰিয় স্পেমিঙৰ পৰা বাচিবলৈ অনুগ্ৰহ কৰি তলৰ বাকছটোৰ তলত ওলোৱা আখৰকেইটা লিখক ([[Special:Captcha/help|অধিক তথ্য]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/bg.json b/extensions/ConfirmEdit/i18n/fancy/bg.json
deleted file mode 100644
index 152614b0..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/bg.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Borislav",
- "DCLXVI"
- ]
- },
- "fancycaptcha-addurl": "Текущата редакция включва нови външни препратки. Като защита от автоматизиран спам, системата изисква от потребителите да въведат думите, показани по-долу в текстовата кутия ([[Special:Captcha/help|повече информация]]):",
- "fancycaptcha-badlogin": "Като защита срещу опити за налучкване на паролата ви, моля, въведете буквите, които виждате на картинката ([[Special:Captcha/help|повече информация]]):",
- "fancycaptcha-createaccount": "Системата за защита от автоматично създаване на потребителски сметки изисква да въведете това, което виждате в кутията по-долу ([[Special:Captcha/help|повече информация]]):",
- "fancycaptcha-create": "За създаване на страницата е необходимо да се въведат думите от картинката в полето по-долу ([[Special:Captcha/help|повече информация]]):",
- "fancycaptcha-edit": "За редактиране на страницата е необходимо да се въведат думите от картинката в полето по-долу ([[Special:Captcha/help|повече информация]]):",
- "fancycaptcha-sendemail": "Като защита срещу автоматизиран спам, въведете в кутията думите, които са показани по-долу ([[Special:Captcha/help|повече информация]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/bn.json b/extensions/ConfirmEdit/i18n/fancy/bn.json
deleted file mode 100644
index 7e8be2c2..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/bn.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Nasir8891",
- "Zaheen"
- ]
- },
- "fancycaptcha-addurl": "আপনার সম্পাদনাটিতে নতুন বহিঃসংযোগ আছে। স্বয়ংক্রিয় স্প্যামের বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
- "fancycaptcha-badlogin": "স্বয়ংক্রিয় শব্দচাবি ক্র্যাকিং-এর বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
- "fancycaptcha-createaccount": "স্বয়ংক্রিয় অ্যাকাউন্ট সৃষ্টির বিরুদ্ধে সুরক্ষার জন্য অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
- "fancycaptcha-create": "পাতাটি সৃষ্টি করতে চাইলে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):",
- "fancycaptcha-edit": "পাতাটি সম্পাদনা করতে চাইলে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান\n([[Special:Captcha/help|আরও তথ্য]]):",
- "fancycaptcha-sendemail": "স্বয়ংক্রিয় স্প্যামিং এর বিরুদ্ধে সুরক্ষার খাতিরে অনুগ্রহ করে নিচের বাক্সে দেখানো শব্দগুলি প্রবেশ করান ([[Special:Captcha/help|আরও তথ্য]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ca.json b/extensions/ConfirmEdit/i18n/fancy/ca.json
deleted file mode 100644
index 5d39ebc7..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/ca.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Davidpar",
- "SMP",
- "Ssola"
- ]
- },
- "fancycaptcha-addurl": "La vostra modificació inclou nous enllaços externs. Com a protecció contra la propaganda automatitzada heu d'escriure en la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
- "fancycaptcha-badlogin": "Com a protecció contra l'obtenció automatitzada de contrasenyes cal que escriviu en la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
- "fancycaptcha-createaccount": "Com a protecció contra la creació automatitzada de nous comptes cal que escriviu en la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
- "fancycaptcha-create": "Per a poder crear la pàgina heu d'escriure en la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
- "fancycaptcha-edit": "Per a poder modificar la pàgina heu d'escriure en la caixa les paraules que apareixen a continuació ([[Special:Captcha/help|més informació]]):",
- "fancycaptcha-sendemail": "Per ajudar a protegir contra el correu brossa automatitzat, si us plau, introduïu les paraules que apareixen a sota la caixa ([[Special:Captcha/help|més informació]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/cdo.json b/extensions/ConfirmEdit/i18n/fancy/cdo.json
deleted file mode 100644
index 241bb057..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/cdo.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "@metadata": [],
- "fancycaptcha-badlogin": "Ôi-lāu huòng-cī tiàng-sê̤ṳ cê̤ṳ-dông puái-gāi mĭk-mā, chiāng nṳ̄ sṳ̆-ĭk â-dā̤ bēng-bēng diē-lié gì sṳ̀ ([[Special:Captcha/help|gáing sâ̤ séng-sék]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/cs.json b/extensions/ConfirmEdit/i18n/fancy/cs.json
deleted file mode 100644
index 3dcacac5..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/cs.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Mormegil",
- "Tchoř"
- ]
- },
- "fancycaptcha-desc": "Pokročilý generátor captcha pro rozšíření „Confirm Edit“",
- "fancycaptcha-addurl": "Vaše editace obsahuje nové odkazy formou URL.\nAbychom wiki ochránili před automatizovaným spamováním, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):",
- "fancycaptcha-badlogin": "Abychom wiki ochránili proti automatizovaným pokusům uhodnout heslo, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):",
- "fancycaptcha-createaccount": "Abychom wiki ochránili proti automatizovanému zakládání účtů, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):",
- "fancycaptcha-create": "Abyste mohli založit stránku, musíte opsat text z následujícího obrázku: ([[Special:Captcha/help|Co tohle znamená?]])",
- "fancycaptcha-edit": "Abyste mohli editovat tuto stránku, musíte opsat text z následujícího obrázku: ([[Special:Captcha/help|Co tohle znamená?]])",
- "fancycaptcha-sendemail": "Abychom wiki ochránili proti automatizovanému spamování, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):",
- "fancycaptcha-reload-text": "Vygenerovat nový kód"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/de.json b/extensions/ConfirmEdit/i18n/fancy/de.json
deleted file mode 100644
index 00a08001..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/de.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Metalhead64",
- "Raimond Spekking",
- "Umherirrender"
- ]
- },
- "fancycaptcha-desc": "Fancy-CAPTCHA-Generator für die Erweiterung „Confirm Edit“",
- "fancycaptcha-addurl": "Deine Bearbeitung enthält neue externe Links.\nZum Schutz des Wikis vor automatisiertem Spamming bitten wir dich, das folgende Wort in das Feld unten einzugeben. Klicke dann erneut auf „Seite speichern“ ([[Special:Captcha/help|Fragen oder Probleme?]]).",
- "fancycaptcha-badlogin": "Zum Schutz des Wikis vor einer Kompromittierung deines Benutzerkontos bitten wir dich, das folgende Wort in das Feld unten einzugeben [[Special:Captcha/help|(Fragen oder Probleme?)]]:",
- "fancycaptcha-createaccount": "Zum Schutz des Wikis vor automatisierter Anlage von Benutzerkonten bitten wir dich, das folgende Wort in das Feld unten einzugeben ([[Special:Captcha/help|Fragen oder Probleme?]]):",
- "fancycaptcha-create": "Zur Erstellung der Seite gib das folgende Wort in das Feld unten ein [[Special:Captcha/help|(Fragen oder Probleme?)]].",
- "fancycaptcha-edit": "Zur Bearbeitung der Seite gib das folgende Wort in das Feld unten ein [[Special:Captcha/help|(Fragen oder Probleme?)]].",
- "fancycaptcha-sendemail": "Zum Schutz des Wikis vor automatischem Spamming bitten wir dich, die Wörter unten in das Feld einzugeben ([[Special:Captcha/help|mehr Informationen]]):",
- "fancycaptcha-reload-text": "Aktualisieren"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/el.json b/extensions/ConfirmEdit/i18n/fancy/el.json
deleted file mode 100644
index f7f5b9bc..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/el.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Badseed",
- "Consta",
- "Geraki",
- "Glavkos",
- "ZaDiak"
- ]
- },
- "fancycaptcha-addurl": "Η επεξεργασία σας περιλαμβάνει νέους εξωτερικούς σύνδεσμους.\nΩς βοήθεια για την προστασία από αυτόματα spam, παρακαλούμε γράψτε τις λέξεις που εμφανίζονται παρακάτω στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "fancycaptcha-badlogin": "Ως βοήθεια για την προστασία από αυτόματα προγράμματα σπασίματος κωδικών, παρακαλούμε γράψτε τις λέξεις που εμφανίζονται παρακάτω στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "fancycaptcha-createaccount": "Για να βοηθήσετε στην προστασία κατά των αυτόματα δημιουργούμενων λογαριασμών, παρακαλούμε πληκτρολογήστε στο πλαίσιο τις λέξεις που εμφανίζονται πιο κάτω ([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "fancycaptcha-create": "Για να δημιουργήσετε αυτήν την σελίδα, παρακαλώ εισάγετε τις λέξεις που εμφανίζονται παρακάτω μέσα στο κουτί\n([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "fancycaptcha-edit": "Για να επεξεργαστείτε αυτήν την σελίδα, παρακαλώ εισάγετε τις λέξεις που εμφανίζονται παρακάτω μέσα στο κουτί\n([[Special:Captcha/help|περισσότερες πληροφορίες]]):",
- "fancycaptcha-sendemail": "Ως βοήθεια για την προστασία από αυτόματα προγράμματα σπασίματος κωδικών, παρακαλούμε γράψτε τις λέξεις που εμφανίζονται παρακάτω στο πλαίσιο ([[Special:Captcha/help|περισσότερες πληροφορίες]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/en.json b/extensions/ConfirmEdit/i18n/fancy/en.json
deleted file mode 100644
index 8b4c80a2..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/en.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": []
- },
- "fancycaptcha-desc": "Fancy CAPTCHA generator for Confirm Edit",
- "fancycaptcha-addurl": "Your edit includes new external links.\nTo protect the wiki against automated spam, we kindly ask you to enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
- "fancycaptcha-badlogin": "To protect the wiki against automated password cracking, we kindly ask you to enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
- "fancycaptcha-createaccount": "To protect the wiki against automated account creation, we kindly ask you to enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
- "fancycaptcha-create": "To create the page, please enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
- "fancycaptcha-edit": "To edit this page, please enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
- "fancycaptcha-sendemail": "To protect the wiki against automated spamming, we kindly ask you to enter the words that appear below in the box ([[Special:Captcha/help|more info]]):",
- "fancycaptcha-reload-text": "Refresh"
-} \ No newline at end of file
diff --git a/extensions/ConfirmEdit/i18n/fancy/es.json b/extensions/ConfirmEdit/i18n/fancy/es.json
deleted file mode 100644
index 10a982cf..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/es.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Carlosz22",
- "Fitoschido",
- "Icvav",
- "Pertile",
- "Sanbec",
- "Sporeunai"
- ]
- },
- "fancycaptcha-addurl": "Tu edición incluye nuevos enlaces externos. \nPara protegernos contra el spam automatizado, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):",
- "fancycaptcha-badlogin": "Para proteger el wiki del descifrado de contraseñas automatizado, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):",
- "fancycaptcha-createaccount": "Para proteger el wiki de la creación automática de cuentas, resuelve por favor la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):",
- "fancycaptcha-create": "Para crear la página, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):",
- "fancycaptcha-edit": "Para editar esta página, por favor introduce en el recuadro las palabras que aparecen debajo ([[Special:Captcha/help|más información]]):",
- "fancycaptcha-sendemail": "Para proteger el wiki del descifrado de contraseñas automatizado, por favor resuelve la simple suma de abajo e introduce la respuesta en la caja ([[Special:Captcha/help|más información]]):",
- "fancycaptcha-reload-text": "Actualizar"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/eu.json b/extensions/ConfirmEdit/i18n/fancy/eu.json
deleted file mode 100644
index 8a77bc01..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/eu.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "An13sa",
- "Xabier Armendaritz"
- ]
- },
- "fancycaptcha-addurl": "Zure aldaketak kanpo lotura berriak ditu. Spam automatikoa saihestu ahal izateko, beheko koadroan ageri diren hitzak idatzi ([[Special:Captcha/help|informazio gehigarria]]):",
- "fancycaptcha-badlogin": "Pasahitzen cracking automatikoa saihestu asmoz, beheko koadroan ageri diren hitzak idazteko eskatzen dizugu ([[Special:Captcha/help|informazio gehigarria]]):",
- "fancycaptcha-createaccount": "Erabiltzaile kontuak automatikoki sortzea saihestu asmoz, beheko koadroan ageri diren hitzak idazteko eskatzen dizugu ([[Special:Captcha/help|informazio gehigarria]]):",
- "fancycaptcha-create": "Orri sortu ahal izateko, idatz itzazu beheko koadroan ageri diren hitzak ([[Special:Captcha/help|informazio gehigarria]]):",
- "fancycaptcha-edit": "Orrialde hau aldatu ahal izateko, beheko koadroan ageri diren hitzak idatzi ([[Special:Captcha/help|informazio gehigarria]]):",
- "fancycaptcha-sendemail": "Zabor-posta automatizatuaz babesteko, idatzi azpiko kutxako hitzak ([[Special:Captcha/help|informazio gehiago]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/fi.json b/extensions/ConfirmEdit/i18n/fancy/fi.json
deleted file mode 100644
index 59ed623e..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/fi.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Crt",
- "Nike",
- "Nedergard",
- "Stryn"
- ]
- },
- "fancycaptcha-addurl": "Muokkauksesi sisältää uusia linkkejä muille sivuille. Kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
- "fancycaptcha-badlogin": "Automatisoidun salasanan murtamisen estämiseksi kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
- "fancycaptcha-createaccount": "Kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
- "fancycaptcha-create": "Muokkauksesi sisältää uusia linkkejä muille sivuille. Kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
- "fancycaptcha-edit": "Muokkauksesi sisältää uusia linkkejä muille sivuille. Kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
- "fancycaptcha-sendemail": "Automatisoidun roskapostin lähettämisen vaikeuttamiseksi kirjoita kuvan sisältämät sanat alla olevaan tekstikenttään ([[Special:Captcha/help|lisätietoja]]):",
- "fancycaptcha-reload-text": "Vaihda"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/fr.json b/extensions/ConfirmEdit/i18n/fancy/fr.json
deleted file mode 100644
index 4b2cae5d..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/fr.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Crochet.david",
- "Gomoko",
- "IAlex",
- "Metroitendo",
- "Sherbrooke",
- "Urhixidur",
- "Verdy p"
- ]
- },
- "fancycaptcha-desc": "Générateur d’images ''captcha'' anti-robots demandant une confirmation humaine des modifications.",
- "fancycaptcha-addurl": "Votre modification inclut de nouveaux liens externes.\nPour protéger le wiki contre les pourriels automatisés, nous vous demandons de bien vouloir entrer les mots qui apparaissent dans la boîte ([[Special:Captcha/help|plus d’informations]]) :",
- "fancycaptcha-badlogin": "Pour protéger le wiki contre le cassage des mots de passe par des automates, nous vous demandons de bien vouloir entrer les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :",
- "fancycaptcha-createaccount": "Pour protéger le wiki contre les créations automatiques de comptes, nous vous demandons de bien vouloir entrer les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :",
- "fancycaptcha-create": "Pour créer la page, veuillez entrer les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha|plus d’informations]]) :",
- "fancycaptcha-edit": "Pour modifier cette page, veuillez saisir les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha/help|plus d’information]]) :",
- "fancycaptcha-sendemail": "Pour protéger le wiki contre l’envoi automatisé de pourriels, nous vous demandons de bien vouloir entrer les mots qui apparaissent dans la boîte ci-dessous ([[Special:Captcha/help|plus d’informations]]) :",
- "fancycaptcha-reload-text": "Actualiser"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/gl.json b/extensions/ConfirmEdit/i18n/fancy/gl.json
deleted file mode 100644
index 310b064a..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/gl.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Toliño",
- "Xosé"
- ]
- },
- "fancycaptcha-desc": "Xerador de imaxes CAPTCHA para Confirm Edit",
- "fancycaptcha-addurl": "A súa edición inclúe novas ligazóns externas.\nPara protexer o wiki contra o spam automático, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
- "fancycaptcha-badlogin": "Para protexer o wiki contra o roubo de contrasinais, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
- "fancycaptcha-createaccount": "Para protexer o wiki contra a creación automática de contas, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
- "fancycaptcha-create": "Para crear a páxina, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
- "fancycaptcha-edit": "Para editar esta páxina, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
- "fancycaptcha-sendemail": "Para protexer o wiki contra o spam automático, introduza as palabras que aparecen na caixa ([[Special:Captcha/help|máis información]]):",
- "fancycaptcha-reload-text": "Refrescar"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/he.json b/extensions/ConfirmEdit/i18n/fancy/he.json
deleted file mode 100644
index 7a0aa1b3..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/he.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Amire80",
- "Rotem Liss"
- ]
- },
- "fancycaptcha-desc": "מחולל תמונות CAPTCHA מגניבות בשביל ההרבחבה Confirm Edit",
- "fancycaptcha-addurl": "עריכתכם כוללת קישורים חיצוניים חדשים.\nכהגנה מפני זיבול אוטומטי, אנא הקלידו את המילים המופיעות להלן בתיבה ([[Special:Captcha/help|מידע נוסף]]):",
- "fancycaptcha-badlogin": "כהגנה מפני פריצת סיסמאות אוטומטית, אנא הקלידו את המילים המופיעות להלן בתיבה ([[Special:Captcha/help|מידע נוסף]]):",
- "fancycaptcha-createaccount": "כהגנה מפני יצירת חשבונות אוטומטית, אנא הקלידו את המילים המופיעות להלן בתיבה ([[Special:Captcha/help|מידע נוסף]]):",
- "fancycaptcha-create": "כדי ליצור את הדף, אנא הקלידו את המילים המופיעות להלן בתיבה ([[Special:Captcha/help|מידע נוסף]]):",
- "fancycaptcha-edit": "כדי לערוך את הדף, אנא הקלידו את המילים המופיעות להלן בתיבה ([[Special:Captcha/help|מידע נוסף]]):",
- "fancycaptcha-sendemail": "כדי לעזור להתגונן מפני שליחת זבל אוטומטית, אנא הכניסו את המילים שמופיעות בתיבה למטה ([[Special:Captcha/help|מידע נוסף]]):",
- "fancycaptcha-reload-text": "רענון"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/hi.json b/extensions/ConfirmEdit/i18n/fancy/hi.json
deleted file mode 100644
index bc6c3883..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/hi.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kaustubh",
- "Siddhartha Ghai"
- ]
- },
- "fancycaptcha-addurl": "आपके सम्पादन में नई बाहरी कड़ियाँ हैं।\nस्वचालित स्पॅम से बचाव में सहायता के लिये नीचे दिये हुए शब्द बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
- "fancycaptcha-badlogin": "स्वचालित कूटशब्द चोरी से बचाव में सहायता के लिये नीचे दिये हुए शब्द बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
- "fancycaptcha-createaccount": "स्वचालित सदस्य पंजीकरण से बचाव में सहायता के लिये नीचे दिये शब्द बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
- "fancycaptcha-create": "यह पृष्ठ बनाने के लिये कृपया नीचे दिये शब्द बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
- "fancycaptcha-edit": "यह पृष्ठ बदलने के लिये, नीचे दिखने वाले अक्षर टेक्स्ट बक्सेमें लिखें ([[Special:Captcha/help|अधिक जानकारी]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/hr.json b/extensions/ConfirmEdit/i18n/fancy/hr.json
deleted file mode 100644
index 22b39dc1..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/hr.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "SpeedyGonsales",
- "MaGa"
- ]
- },
- "fancycaptcha-addurl": "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama,\nmolimo unesite slova koja vidite na slici dolje: ([[Special:Captcha/help|Pomoć]])",
- "fancycaptcha-badlogin": "Da se spriječi automatiziranje pogađanja lozinki, molimo unesite\nslova koja vidite na slici dolje: <br />([[Special:Captcha/help|Pomoć]])",
- "fancycaptcha-createaccount": "Kao zaštitu od automatskog otvaranja računa, pri otvaranju računa trebate\nunijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć]])",
- "fancycaptcha-create": "Da bi stvorili novu stranicu, molimo unesite\nslova koja vidite na slici dolje: <br />([[Special:Captcha/help|Pomoć]])",
- "fancycaptcha-edit": "Da bi uređivali ovu stranicu, molimo unesite slova koja vidite na slici dolje: <br />([[Special:Captcha/help|Pomoć]])",
- "fancycaptcha-sendemail": "Da bi ste nam pomogli protiv automatskog spama, molimo unesite riječi koje su prikazane ispod u okvir ([[Special:Captcha/help|više informacija]]):",
- "fancycaptcha-reload-text": "Učitaj ponovno"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/hu.json b/extensions/ConfirmEdit/i18n/fancy/hu.json
deleted file mode 100644
index d51d912d..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/hu.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Adam78",
- "Dorgan",
- "Glanthor Reviol"
- ]
- },
- "fancycaptcha-addurl": "A szerkesztésed új külső hivatkozásokat tartalmaz. Az automatizált spamek megelőzése miatt kérjük, hogy add meg a lenti keretben olvasható szavakat ([[Special:Captcha/help|további segítség]]):",
- "fancycaptcha-badlogin": "Hogy az automatizált jelszópróbálkozásokat megelőzzük, kérjük, hogy add meg a lenti keretben olvasható szavakat ([[Special:Captcha/help|további segítség]]):",
- "fancycaptcha-createaccount": "A felhasználói fiókok automatizált létrehozásának elkerülésére, kérlek, írd be az alább megjelenő szót a szövegdobozba ([[Special:Captcha/help|segítség]]):",
- "fancycaptcha-create": "A lap létrehozásához kérjük, hogy add meg a lenti keretben olvasható szavakat ([[Special:Captcha/help|további segítség]]):",
- "fancycaptcha-edit": "A szerkesztésed új külső linkeket tartalmaz. A spam-robotok elleni védekezés elősegítésére kérlek írd be az alább megjelenő szót a szövegdobozba ([[Special:Captcha/help|segítség]]):",
- "fancycaptcha-sendemail": "Hogy segíts az automatikus spammelés elleni védekezésben, kérünk írd be az alábbi szavakat a szövegdobozba ([[Special:Captcha/help|segítség]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/id.json b/extensions/ConfirmEdit/i18n/fancy/id.json
deleted file mode 100644
index 1ba694f1..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/id.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bennylin",
- "IvanLanin",
- "Iwan Novirion"
- ]
- },
- "fancycaptcha-addurl": "Suntingan Anda mencantumkan pranala luar baru. Untuk pelindungan terhadap spam otomatis, harap masukkan kata di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
- "fancycaptcha-badlogin": "Sebagai pelindungan terhadap pemecah kata kunci otomatis, harap masukkan kata di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
- "fancycaptcha-createaccount": "Untuk pelindungan terhadap pembuatan akun otomatis, tolong masukkan kata di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
- "fancycaptcha-create": "Untuk membuat halaman, silahkan masukkan kata-kata yang muncul di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
- "fancycaptcha-edit": "Untuk menyunting halaman ini, silahkan masukkan kata-kata yang muncul di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):",
- "fancycaptcha-sendemail": "Sebagai pelindungan terhadap spam otomatis, silahkan masukkan kata-kata yang muncul di bawah ini ke dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/it.json b/extensions/ConfirmEdit/i18n/fancy/it.json
deleted file mode 100644
index 16248703..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/it.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Beta16",
- "BrokenArrow",
- "Darth Kule",
- "Nemo bis",
- "Lucas2"
- ]
- },
- "fancycaptcha-addurl": "La modifica richiesta aggiunge dei collegamenti esterni alla pagina; come misura precauzionale contro l'inserimento automatico di spam, ti chiediamo gentilmente di inserire nella casella sottostante le parole che compaiono di seguito ([[Special:Captcha/help|come funziona?]]):",
- "fancycaptcha-badlogin": "Come misura precauzionale contro i tentativi di forzatura automatica della password, ti chiediamo gentilmente di inserire nella casella sottostante le parole che compaiono di seguito ([[Special:Captcha/help|come funziona?]]):",
- "fancycaptcha-createaccount": "Come misura precauzionale contro i tentativi di registrazione automatica, ti chiediamo gentilmente di inserire nella casella sottostante le parole che compaiono di seguito ([[Special:Captcha/help|come funziona?]]):",
- "fancycaptcha-create": "Per creare la pagina si prega di inserire nella casella sottostante le parole che compaiono nella casella di seguito ([[Special:Captcha/help|come funziona?]]):",
- "fancycaptcha-edit": "Per modificare questa pagina si prega di inserire nella casella le parole che compaiono di seguito ([[Special:Captcha/help|informazioni]]):",
- "fancycaptcha-sendemail": "Come misura precauzionale nei confronti dei messaggi di spam automatici, ti chiediamo gentilmente di inserire nella casella sottostante le parole che compaiono di seguito ([[Special:Captcha/help|come funziona?]]):",
- "fancycaptcha-reload-text": "Aggiorna"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ksh.json b/extensions/ConfirmEdit/i18n/fancy/ksh.json
deleted file mode 100644
index 6460893e..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/ksh.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Purodha"
- ]
- },
- "fancycaptcha-desc": "Määt e nett Käptsche för dä <code lang=\"en\">Confirm Edit</code> Projramm-Zohsatz",
- "fancycaptcha-addurl": "Do häß neuje Lengks op frembde Websigge dobei jedonn.\nMer schöze ons Wiki jäje automattesche <code lang=\"en\" xml:lang=\"en\">SPAM</code>, dröm\ndon di Wööter en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
- "fancycaptcha-badlogin": "Mer schöze Metmaacher en unsem Wiki jäje automatesche\nPaßwoot-Knackerei, dröm don di Wööt onge en dat Käßje\nendraare. ([[Special:Captcha/help|Verklierung]])",
- "fancycaptcha-createaccount": "Mer schöze uns Wiki dojäje, dat mer en Masse automatesch\nMetmaacher aanmeldt.\nDröm beß esu joot un\ndon di Wööt onge en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
- "fancycaptcha-create": "Öm di Sigg neu aanzelääje, don di Wööt onge en dat Käßje endraare. (Verklierung)",
- "fancycaptcha-edit": "Öm de Sigg ze ändere, don di Wööt onge en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
- "fancycaptcha-sendemail": "Öm et Wiki jääje automattesch enjedraare <code lang=\"en\" xml:lang=\"en\">SPAM</code> ze schötze,\nbes esu joot, donn di Wööter enjävve, di en däm Käßje heh dronger shtonn.\n([[Special:Captcha/help|Mieh Enfommazjuhne]])",
- "fancycaptcha-reload-text": "Nöü Aanzeije!"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/lrc.json b/extensions/ConfirmEdit/i18n/fancy/lrc.json
deleted file mode 100644
index e38d6635..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/lrc.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Mogoeilor"
- ]
- },
- "fancycaptcha-reload-text": "د نؤ كردن"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/lt.json b/extensions/ConfirmEdit/i18n/fancy/lt.json
deleted file mode 100644
index c8c8950b..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/lt.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Eitvys200"
- ]
- },
- "fancycaptcha-reload-text": "Atnaujinti"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/mk.json b/extensions/ConfirmEdit/i18n/fancy/mk.json
deleted file mode 100644
index 3b8fdf06..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/mk.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bjankuloski06"
- ]
- },
- "fancycaptcha-desc": "Збогатен создавач CAPTCHA за потврда на уредувања",
- "fancycaptcha-addurl": "Вашето уредување вклучува нови надворешни врски.\nСо цел да се заштитиме од автоматизиран спам, би ве замолиле да ги внесете зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
- "fancycaptcha-badlogin": "Со цел да се заштитиме од автоматизирано пробивање на лозинки, би ве замолиле да ги внесете зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
- "fancycaptcha-createaccount": "Со цел да се заштитиме од автоматизирано создавање на сметки, би ве замолиле да ги внесете зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
- "fancycaptcha-create": "За да создадете страница, внесете ги зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
- "fancycaptcha-edit": "За да ја уредите страницава, внесете ги зборовите на сликичката подолу ([[Special:Captcha/help|повеќе информации]]):",
- "fancycaptcha-sendemail": "За да се заштитиме од автоматизирано спамирање, би ве замолиле да ги внесете зборовите од сликичката во полето подолу ([[Special:Captcha/help|повеќе информации]]):",
- "fancycaptcha-reload-text": "Превчитај"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ml.json b/extensions/ConfirmEdit/i18n/fancy/ml.json
deleted file mode 100644
index b3ed6720..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/ml.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Praveenp",
- "Shijualex"
- ]
- },
- "fancycaptcha-addurl": "താങ്കളുടെ തിരുത്തലലിൽ പുറം കണ്ണികൾ ഉൾപ്പെട്ടിരിക്കുന്നു.\nയാന്ത്രിക സ്പാമിനെതിരെയുള്ള സം‌രക്ഷണത്തിന്റെ ഭാഗമായി, താഴെ കാണുന്ന വാക്കുകൾ പെട്ടിയിൽ ടൈപ്പു ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
- "fancycaptcha-badlogin": "രഹസ്യവാക്ക് യാന്ത്രികമായി പൊളിക്കുന്നത് തടയുന്നതിന്റെ ഭാഗമായി, താഴെ കാണുന്ന വാക്കുകൾ പെട്ടിയിൽ ടൈപ്പു ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
- "fancycaptcha-createaccount": "അംഗത്വം യാന്ത്രികമായി സൃഷ്ടിക്കുന്നതു തടയുന്നതൊഴിവാക്കാനുള്ള സം‌രക്ഷണത്തിന്റെ ഭാഗമായി, താഴെ കാണുന്ന വാക്കുകൾ പെട്ടിയിൽ ടൈപ്പു ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
- "fancycaptcha-create": "ഈ താൾ സൃഷ്ടിക്കുവാൻ താഴെയുള്ള പെട്ടിയിൽ കാണുന്ന വാക്കുകൾ ടൈപ്പു ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
- "fancycaptcha-edit": "ഈ താൾ തിരുത്തുവാൻ ദയവായി താഴെ കാണുന്ന വാക്കുകൾ പെട്ടിയിൽ ടൈപ്പു ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
- "fancycaptcha-sendemail": "യാന്ത്രികമായ പാഴെഴുത്ത് ഉൾപ്പെടുത്തലിനുള്ള പ്രതിരോധമെന്ന നിലയിൽ, താഴെ കാണുന്ന വാക്കുകൾ പെട്ടിയിൽ ടൈപ്പ് ചെയ്യുക ([[Special:Captcha/help|കൂടുതൽ വിവരങ്ങൾ]]):",
- "fancycaptcha-reload-text": "പുതുക്കുക"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/mr.json b/extensions/ConfirmEdit/i18n/fancy/mr.json
deleted file mode 100644
index 5a9eb268..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/mr.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Kaustubh",
- "Mahitgar"
- ]
- },
- "fancycaptcha-addurl": "तुमच्या संपादनात नवीन बाह्य दुवे आहेत.\nआपोआप होणार्‍या संपादनांपासून बचावासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "fancycaptcha-badlogin": "आपोआप होणार्‍या परवलीच्या शब्दाच्या चोरीपासून वाचण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "fancycaptcha-createaccount": "आपोआप होणार्‍या सदस्य नोंदणीपासून वाचण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "fancycaptcha-create": "हे पान तयार करण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "fancycaptcha-edit": "हे पान संपादित करण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
- "fancycaptcha-sendemail": "आपोआप होणार्‍या उत्पातापासून वाचण्यासाठी, खाली दिसणारे शब्द दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/pms.json b/extensions/ConfirmEdit/i18n/fancy/pms.json
deleted file mode 100644
index 1dd14199..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/pms.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Borichèt",
- "Bèrto 'd Sèra"
- ]
- },
- "fancycaptcha-addurl": "Soa modìfica a l'ha andrinta dj'anliure esterne neuve.\nPër protege la wiki da la rumenta aotomatisà, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ant la casela ([[Special:Captcha/help|për savejne dë pì]]):",
- "fancycaptcha-badlogin": "Për protege la wiki dai programa ch'a sërco ëd freghé le ciav, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ant la casela ambelessì-sota ([[Special:Captcha/help|për savejne dë pì]]):",
- "fancycaptcha-createaccount": "Për protege la wiki dai programa ch'a deurbo ëd cont neuv n'aotomàtich, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ant la casela ambelessì-sota ([[Special:Captcha/help|për savejne dë pì]]):",
- "fancycaptcha-create": "Për creé sta pàgina-i d'amblé, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ambelessì sota ([[Special:Captcha/help|për savejne dë pì]]):",
- "fancycaptcha-edit": "Për fe-ie dle modìfiche ansima a sta pàgina-sì, për piasì, ch'a l'arbata le paròle ch'a s-ciàira ambelessì sota ([[Special:Captcha/help|për savejne dë pì]]):",
- "fancycaptcha-sendemail": "Për protege la wiki contra la rumenta automàtica, për piasì ch'a anserissa le paròle che as vëddo ant la casela sì-sota ([[Special:Captcha/help|për savèjne ëd pi]]):",
- "fancycaptcha-reload-text": "Agiorné"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/ps.json b/extensions/ConfirmEdit/i18n/fancy/ps.json
deleted file mode 100644
index 8ec55a5c..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/ps.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ahmed-Najib-Biabani-Ibrahimkhel"
- ]
- },
- "fancycaptcha-create": "ددې مخ د جوړلو لپاره، لطفاً ورکړل شوي توري چې څنگه تاسې ته ښکاري هماغسې کټ مټ په لانديني چوکاټ کې وليکی ([[Special:Captcha/help|نور مالومات]]):",
- "fancycaptcha-edit": "ددې مخ د سمولو لپاره، لطفاً ورکړل شوي توري چې څنگه تاسې ته ښکاري هماغسې کټ مټ په لانديني چوکاټ کې وليکی ([[Special:Captcha/help|نور مالومات]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/pt-br.json b/extensions/ConfirmEdit/i18n/fancy/pt-br.json
deleted file mode 100644
index d1766621..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/pt-br.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Cainamarques",
- "Eduardo.mps",
- "Giro720"
- ]
- },
- "fancycaptcha-addurl": "A sua edição inclui novas ligações externas. Para proteger a wiki contra sistemas automatizados que inserem ''spam'', por favor, introduza as palavras exibidas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
- "fancycaptcha-badlogin": "Para proteger a wiki contra programas automatizados de detecção de senhas, por favor, introduza as palavras exibidas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
- "fancycaptcha-createaccount": "Para proteger a wiki contra sistemas automatizados de criação de contas, solicitamos que introduza as palavras exibidas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
- "fancycaptcha-create": "Para criar a página, por favor, introduza as palavras exibidas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
- "fancycaptcha-edit": "Para editar esta página, por favor, introduza as palavras exibidas na seguinte caixa ([[Special:Captcha/help|mais informações]]):",
- "fancycaptcha-sendemail": "Para ajudar a combater ''spam'' automatizado, pedimos que, por favor, introduza as palavras que aparecem abaixo ([[Special:Captcha/help|mais informações]]):",
- "fancycaptcha-reload-text": "Atualizar"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/qqq.json b/extensions/ConfirmEdit/i18n/fancy/qqq.json
deleted file mode 100644
index 4b6302f2..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/qqq.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Fryed-peach",
- "Hamilton Abreu",
- "Purodha",
- "Shirayuki"
- ]
- },
- "fancycaptcha-desc": "{{Optional}}\n{{desc}}",
- "fancycaptcha-addurl": "{{Related|ConfirmEdit-addurl}}",
- "fancycaptcha-badlogin": "{{Related|ConfirmEdit-badlogin}}",
- "fancycaptcha-createaccount": "{{Related|ConfirmEdit-createaccount}}",
- "fancycaptcha-create": "{{Related|ConfirmEdit-create}}",
- "fancycaptcha-edit": "{{Related|ConfirmEdit-edit}}",
- "fancycaptcha-sendemail": "{{Related|ConfirmEdit-sendemail}}",
- "fancycaptcha-reload-text": "Prompts a click to get a new FancyCaptcha image.\n{{Identical|Refresh}}"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/roa-tara.json b/extensions/ConfirmEdit/i18n/fancy/roa-tara.json
deleted file mode 100644
index 06c84395..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/roa-tara.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Joetaras"
- ]
- },
- "fancycaptcha-addurl": "'U cangiamende tune 'nglude de le collegaminde de fore.\nPe proteggere condre a 'u spam automateche, pe piacere mitte le parole ca iessene sotte ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
- "fancycaptcha-badlogin": "Pe proteggere condre a futteminde automatece de passuord, pe piacere mitte le parole ca iessene aqquà sotte ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
- "fancycaptcha-createaccount": "Pe proteggere condre a ccreazione automateche de cunde utinde, pe piacere mitte le parole ca iessene aqquà sotte ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
- "fancycaptcha-create": "Pe ccrejà sta pàgene, pe piacere mitte le parole ca combare aqquà sotte ([[Special:Captcha/help|more info]]):",
- "fancycaptcha-edit": "Pe cangià sta pàgene, pe piacere mitte le parole combare aqquà sotte ([[Special:Captcha/help|more info]]):",
- "fancycaptcha-sendemail": "Pe proteggere condre a spam automatece, pe piacere mitte le parole ca iessene aqquà sotte ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
- "fancycaptcha-reload-text": "Aggiorne"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/sah.json b/extensions/ConfirmEdit/i18n/fancy/sah.json
deleted file mode 100644
index 6ba938a6..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/sah.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "HalanTul"
- ]
- },
- "fancycaptcha-addurl": "Эн көннөрүүҥ тас ыйынньыктаах эбит. Спаамтан көмүскэнэр соруктаах дьайыыны оҥор, манна баар тыллары хатылаа ([[Special:Captcha/help|сиһилии…]]):",
- "fancycaptcha-badlogin": "Киирии тылы аптамаатынан алдьатыыттан көмүскэнэр дьайыыны оҥороргор көрдөһөбүт, манна ойууламмыт буукубалары хатылаа ([[Special:Captcha/help|сиһилии]]):",
- "fancycaptcha-createaccount": "Ааттары аптамаатынан бэлиэтиири суох оҥорор туһуттан бу дьайыыны оҥороргор көрдөһөбүт: ойууламмыт сурук бэлиэлэрин анал сиргэ киллэр ([[Special:Captcha/help|сиһилии]]):",
- "fancycaptcha-create": "Эн көннөрүүҥ тас ыйынньыктардаах эбит. Спаамтан көмүскэнэр туһуттан манна баар тыллары хатылыыргар көрдөһөбүт ([[Special:Captcha/help|сиһилии…]]):",
- "fancycaptcha-edit": "Эн көннөрүүҥ тас ыйынньыктардаах эбит. Спаамтан көмүскэнэр туһуттан манна баар тыллары хатылыыргар көрдөһөбүт ([[Special:Captcha/help|сиһилии…]]):",
- "fancycaptcha-sendemail": "Аптамаат спаамтан көмүскэнэр дьайыыны оҥороргор көрдөһөбүт, манна ойууламмыт тыллары хатылаа ([[Special:Captcha/help|сиһилии]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/sl.json b/extensions/ConfirmEdit/i18n/fancy/sl.json
deleted file mode 100644
index a2a84e1d..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/sl.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Dbc334"
- ]
- },
- "fancycaptcha-addurl": "Vaše urejanje vključuje nove zunanje povezave.\nZaradi zaščite wikija pred samodejnim smetjem vas prijazno naprošamo, da vnesete spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
- "fancycaptcha-badlogin": "Zaradi zaščite wikija pred samodejnim ugotavljanjem gesel vas prijazno naprošamo, da vnesete spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
- "fancycaptcha-createaccount": "Zaradi zaščite wikija pred samodejnim ustvarjanjem računov vas prijazno naprošamo, da vnesete spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
- "fancycaptcha-create": "Če želite ustvariti stran, prosimo vnesite spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
- "fancycaptcha-edit": "Če želite urediti stran, prosimo vnesite spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
- "fancycaptcha-sendemail": "Zaradi zaščite wikija pred samodejnim smetenjem vas prijazno naprošamo, da vnesete spodnje besede v polje ([[Special:Captcha/help|več informacij]]):",
- "fancycaptcha-reload-text": "Osveži"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/sr-ec.json b/extensions/ConfirmEdit/i18n/fancy/sr-ec.json
deleted file mode 100644
index 22c8ecfa..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/sr-ec.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Millosh",
- "Rancher",
- "Жељко Тодоровић",
- "Михајло Анђелковић",
- "Milicevic01"
- ]
- },
- "fancycaptcha-desc": "Обогаћен стварач сликовног кода за потврду уређивања",
- "fancycaptcha-addurl": "Ваша измена садржи нове спољашње везе.\nУ циљу заштите од непожељних порука, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
- "fancycaptcha-badlogin": "У циљу заштите од пробијања лозинки, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
- "fancycaptcha-createaccount": "У циљу заштите од самоотварања налога, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
- "fancycaptcha-create": "Да бисте направили страницу, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
- "fancycaptcha-edit": "Да бисте уредили ову страницу, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
- "fancycaptcha-sendemail": "У циљу заштите од непожељних порука, унесите речи са слике у поље испод ([[Special:Captcha/help|више информација]]):",
- "fancycaptcha-reload-text": "Освежи"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/sr-el.json b/extensions/ConfirmEdit/i18n/fancy/sr-el.json
deleted file mode 100644
index 628aba94..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/sr-el.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Michaello",
- "Жељко Тодоровић",
- "Milicevic01"
- ]
- },
- "fancycaptcha-desc": "Obogaćen stvarač slikovnog koda za potvrdu uređivanja",
- "fancycaptcha-addurl": "Vaša izmena sadrži nove spoljašnje veze.\nU cilju zaštite od nepoželjnih poruka, unesite reči sa slike u polje ispod ([[Special:Captcha/help|više informacija]]):",
- "fancycaptcha-badlogin": "U cilju zaštite od probijanja lozinki, unesite reči sa slike u polje ispod ([[Special:Captcha/help|više informacija]]):",
- "fancycaptcha-createaccount": "U cilju zaštite od samootvaranja naloga, unesite reči sa slike u polje ispod ([[Special:Captcha/help|više informacija]]):",
- "fancycaptcha-create": "Da bi se napravila stranica, potrebno je uneti reči koje se nalaze ispod kutije ([[Special:Captcha/help|detaljnije]]):",
- "fancycaptcha-edit": "Za izmenu ove strane unesi reči koje se nalaze ispod kutije ([[Special:Captcha/help|detaljnije]]):",
- "fancycaptcha-sendemail": "U cilju zaštite od nepoželjnih poruka, unesite reči sa slike u polje ispod ([[Special:Captcha/help|više informacija]]):",
- "fancycaptcha-reload-text": "Osveži"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/sv.json b/extensions/ConfirmEdit/i18n/fancy/sv.json
deleted file mode 100644
index fb2d556d..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/sv.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Ainali",
- "Thurs",
- "WikiPhoenix",
- "Lokal Profil"
- ]
- },
- "fancycaptcha-addurl": "Din ändring innehåller nya externa länkar.\nFör att skydda wikin mot automatisk spam ber vi dig att skriva orden som visas nedan i rutan ([[Special:Captcha/help|mer information]]):",
- "fancycaptcha-badlogin": "För att skydda wikin mot automatiserad lösenordsknäckning ber vi dig att skriva\norden som visas nedan i rutan ([[Special:Captcha/help|mer information]]):",
- "fancycaptcha-createaccount": "För att skydda wikin mot automatiskt skapade av användarkonton ber vi dig att\nskriva orden som visas nedan i rutan ([[Special:Captcha/help|mer information]]):",
- "fancycaptcha-create": "För att skapa den här sidan måste du först skriva orden som visas nedan i rutan\n([[Special:Captcha/help|mer information]]):",
- "fancycaptcha-edit": "För att redigera den här sidan måste du först skriva orden som visas nedan i rutan\n([[Special:Captcha/help|mer information]]):",
- "fancycaptcha-sendemail": "För att skydda wikin mot automatiserad spam ber vi dig att skriva orden som visas nedan i rutan ([[Special:Captcha/help|mer information]]):",
- "fancycaptcha-reload-text": "Uppdatera"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/te.json b/extensions/ConfirmEdit/i18n/fancy/te.json
deleted file mode 100644
index 35728c73..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/te.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Mpradeep"
- ]
- },
- "fancycaptcha-addurl": "మీ దిద్దుబాటులో కొత్త బయటి లింకులున్నాయి. బాట్లద్వారా చేసే స్పాము నుండి రక్షణను ఏర్పరచేందుకు గాను,\nకింద కనిపించే బొమ్మలోని అక్షరాలను పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సమాచారం]]):",
- "fancycaptcha-badlogin": "సంకేత పదాలను దొంగిలించే ఆటోమాటిక్ ప్రోగ్రాముల నుండి రక్షించేందుకు గాను, కింద కనిపించే బొమ్మలోని అక్షరాలను పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సమాచారం]]):",
- "fancycaptcha-createaccount": "ఆటోమాటిగ్గా ఖాతాలను సృష్టించడాన్ని నివారించేందుకు, కింద కనిపించే పదాలను\nఈ పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
- "fancycaptcha-create": "కొత్త పేజీ సృష్టించేందుకు గాను, కింద కనిపించే బొమ్మలోని అక్షరాలను పెట్టెలో రాయండి\n([[Special:Captcha/help|మరింత సమాచారం]]):",
- "fancycaptcha-edit": "ఈ పేజీలో దిద్దుబాటు చేసేందుకు, కింద కనిపించే బొమ్మలోని అక్షరాలను పెట్టెలో రాయండి\n([[Special:Captcha/help|మరింత సమాచారం]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/vi.json b/extensions/ConfirmEdit/i18n/fancy/vi.json
deleted file mode 100644
index 9f0ef22c..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/vi.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Cheers!",
- "Minh Nguyen",
- "Vinhtantran"
- ]
- },
- "fancycaptcha-desc": "Trình sản xuất hình CAPTCHA đặc biệt cho ConfirmEdit",
- "fancycaptcha-addurl": "Sửa đổi của bạn có chứa các liên kết ngoài. Để giúp chúng tôi chống lại spam tự động, xin vui lòng nhập những từ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
- "fancycaptcha-badlogin": "Để giúp chúng tôi tránh bẻ mật khẩu tự động, xin vui lòng nhập những từ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
- "fancycaptcha-createaccount": "Để giúp chúng tôi tránh mở tài khoản tự động, xin vui lòng nhập những chữ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
- "fancycaptcha-create": "Để tạo trang, xin hãy nhập những chữ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
- "fancycaptcha-edit": "Để sửa trang này, xin hãy nhập những từ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
- "fancycaptcha-sendemail": "Để giúp chúng tôi chống lại spam tự động, xin vui lòng nhập những từ xuất hiện ở dưới vào ô ([[Special:Captcha/help|thông tin thêm]]):",
- "fancycaptcha-reload-text": "Làm tươi"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/yi.json b/extensions/ConfirmEdit/i18n/fancy/yi.json
deleted file mode 100644
index 7f2d04b9..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/yi.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "פוילישער"
- ]
- },
- "fancycaptcha-create": "צו שאַפֿן דעם בלאַט, זײַט אזוי גוט און קלאַפט אַרײַן די ווערטער וואָס זענען אינעם קעסטל אונטן ([[Special:Captcha/help|מער אינפֿארמאַציע]]):",
- "fancycaptcha-edit": "צו רעדאִקטירן דעם בלאַט, זײַט אזוי גוט און קלאַפט אַרײַן די ווערטער וואָס שטייען אינעם קעסטל אונטן ([[Special:Captcha/help|מער אינפֿארמאַציע]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/yue.json b/extensions/ConfirmEdit/i18n/fancy/yue.json
deleted file mode 100644
index b86a81ce..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/yue.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "@metadata": [],
- "fancycaptcha-addurl": "你嘅編輯包括咗新嘅外部連結。為咗防止自動化嘅濫貼,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):",
- "fancycaptcha-badlogin": "為咗防止不當程式破解密碼,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):",
- "fancycaptcha-createaccount": "為咗防止自動化開新戶口,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):",
- "fancycaptcha-create": "要開一個新版,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):",
- "fancycaptcha-edit": "要編輯呢一版,請響下面個盒度輸入下面嘅文字 ([[Special:Captcha/help|更多資訊]]):"
-}
diff --git a/extensions/ConfirmEdit/i18n/fancy/zh-hans.json b/extensions/ConfirmEdit/i18n/fancy/zh-hans.json
deleted file mode 100644
index f540108c..00000000
--- a/extensions/ConfirmEdit/i18n/fancy/zh-hans.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Bencmq",
- "Cwek",
- "Mywood"
- ]
- },
- "fancycaptcha-desc": "用于确认编辑的扭曲验证码生成器",
- "fancycaptcha-addurl": "你的编辑包含新的外部链接。为保护本wiki免受自动垃圾程序的破坏,我们恳请你输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
- "fancycaptcha-badlogin": "为保护本wiki免受自动密码破解的破坏,我们恳请你输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
- "fancycaptcha-createaccount": "为保护本wiki免受自动账户创建的破坏,我们恳请你输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
- "fancycaptcha-create": "要创建页面,请输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
- "fancycaptcha-edit": "要编辑该页面,请输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
- "fancycaptcha-sendemail": "为保护本wiki免受自动垃圾程序的破坏,我们恳请你输入下面方框中显示的文字([[Special:Captcha/help|更多信息]]):",
- "fancycaptcha-reload-text": "刷新"
-}
diff --git a/extensions/ConfirmEdit/i18n/fi.json b/extensions/ConfirmEdit/i18n/fi.json
new file mode 100644
index 00000000..f26a68b2
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/fi.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Agony",
+ "Centerlink",
+ "Crt",
+ "Linnea",
+ "Nedergard",
+ "Nike",
+ "Stryn",
+ "Varusmies",
+ "Syreeni",
+ "Pxos"
+ ]
+ },
+ "captcha-edit": "Ratkaise alla oleva laskutoimitus jatkaaksesi ([[Special:Captcha/help|lisätietoja]]):",
+ "captcha-desc": "Tarjoaa CAPTCHA-tekniikoita suojaamaan mainoslinkkejä ja salasana-arvailua vastaan.",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Muokkauksesi sisältää uusia linkkejä muille sivuille.\nAutomatisoitujen roskamuokkausten välttämiseksi ratkaise alla oleva laskutoimitus ja kirjoita vastauksesi kenttään, jotta voisit tallentaa muokkauksesi ([[Special:Captcha/help|lisätietoa]]):",
+ "captcha-badlogin": "Automatisoidun salasanan murtamisen estämiseksi ratkaise alla oleva laskutoimitus ja kirjoita vastaus kenttään ([[Special:Captcha/help|lisätietoa]]):",
+ "captcha-createaccount": "Automaattisen käyttäjätunnusten luonnin estämiseksi ratkaise alla oleva laskutoimitus ja kirjoita se kenttään ([[Special:Captcha/help|lisätietoa]]):",
+ "captcha-createaccount-fail": "CAPTCHA on virheellinen tai puuttuu.",
+ "captcha-create": "Luodaksesi sivun, ratkaise alla oleva laskutoimitus ([[Special:Captcha/help|lisätietoa]]):",
+ "captcha-sendemail": "Suojataksemme wikiä automaattisia mainoslinkkejä vastaan, pyydämme sinua ratkaisemaan alla olevan yksinkertaisen laskutoimituksen ja kirjoittamaan vastauksen laatikkoon ([[Special:Captcha/help|lisätietoa]]):",
+ "captcha-sendemail-fail": "CAPTCHA on virheellinen tai puuttuu.",
+ "captcha-disabledinapi": "Tämä toiminto vaatii kuvavarmennusta, joten et voi suorittaa sitä API:n kautta.",
+ "captchahelp-title": "CAPTCHA-ohje",
+ "captchahelp-cookies-needed": "Tämä toiminto vaatii evästeiden hyväksymistä selaimessa.",
+ "captchahelp-text": "Verkkosivut, jotka sallivat ulkopuolisten lisätä sisältöä, joutuvat usein spam-hyökkäysten kohteeksi. Spam-hyökkäyksessä spammerit käyttävät työkaluja, jotka automaattisesti lisäävät linkkejä monille sivuille. Vaikka nämä linkit voidaan poistaa, aiheutuu niistä silti merkittävää haittaa.\n\nJoskus, erityisesti kun lisäät uusia linkkejä, saatat nähdä kuvan, jossa on värillistä ja vääristynyttä tekstiä, ja sinua pyydetään kirjoittamaan sen sisältämät sanat. Tätä tehtävää on vaikea automatisoida, joten se estää automaattiset lisäykset, mutta sallii ihmisten tehdä muutoksia sivustoon.\n\nValitettavasti tämä saattaa haitata käyttäjiä, joilla on rajoittunut näkökyky tai käyttäjiä, jotka käyttävät teksti- tai puhepohjaisia selaimia. \nTällä hetkellä ei ole käytettävissä puhepohjaista vaihtoehtoa. \nOta yhteyttä [[Special:ListAdmins|sivuston ylläpitäjiin]], jos et pysty tekemään asianmukaisia muutoksia.\n\nVarmistus ei toimi, jos evästeet eivät ole selaimessa käytössä.\n\nVoit palata muokkaustilaan selaimen paluutoiminnolla.",
+ "captcha-addurl-whitelist": " #<!-- jätä tämä rive juuri näin kuin se on --> <pre>\n# Syntaksi on seuraava:\n# * Kaikki #-merkistä eteenpäin on kommenttia\n# * Jokainen ei-tyhjä rivi on säännöllisen lausekkeen osa, joka suoritetaan vain linkeissä esiintyville verkkonimille.\n #</pre> <!-- jätä tämä rive juuri näin kuin se on -->",
+ "right-skipcaptcha": "Suorittaa ilman CAPTCHA-kysymystä toimintoja, jotka normaalisti vaatisivat tarkastusta"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/fo.json b/extensions/ConfirmEdit/i18n/fo.json
index 1c4f8f16..1c4f8f16 100644
--- a/extensions/ConfirmEdit/i18n/core/fo.json
+++ b/extensions/ConfirmEdit/i18n/fo.json
diff --git a/extensions/ConfirmEdit/i18n/core/fr.json b/extensions/ConfirmEdit/i18n/fr.json
index d4b756e5..d4b756e5 100644
--- a/extensions/ConfirmEdit/i18n/core/fr.json
+++ b/extensions/ConfirmEdit/i18n/fr.json
diff --git a/extensions/ConfirmEdit/i18n/core/frp.json b/extensions/ConfirmEdit/i18n/frp.json
index 9256ef28..9256ef28 100644
--- a/extensions/ConfirmEdit/i18n/core/frp.json
+++ b/extensions/ConfirmEdit/i18n/frp.json
diff --git a/extensions/ConfirmEdit/i18n/frr.json b/extensions/ConfirmEdit/i18n/frr.json
new file mode 100644
index 00000000..81d2184a
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/frr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Murma174"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/fur.json b/extensions/ConfirmEdit/i18n/fur.json
index c9b6f42e..c9b6f42e 100644
--- a/extensions/ConfirmEdit/i18n/core/fur.json
+++ b/extensions/ConfirmEdit/i18n/fur.json
diff --git a/extensions/ConfirmEdit/i18n/fy.json b/extensions/ConfirmEdit/i18n/fy.json
new file mode 100644
index 00000000..4af7c7a8
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/fy.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Snakesteuben",
+ "Robin0van0der0vliet"
+ ]
+ },
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Jo hawwe keppelings om utens oanpast/taheakke. As ekstra beskerming tsjin automatysk oanmakke reklame (SPAM) wurdt jo frege it antwurd op de ûndersteande som te jaan ([[Special:Captcha/help|meer ynformaasje]]):",
+ "captcha-createaccount": "As beskerming tsjin it automatysk oanmeitsjen fan meidochnammen wurdt jo frege it antwurd op de ûndersteande som te jaan ([[Special:Captcha/help|meer ynformaasje]]):",
+ "captcha-createaccount-fail": "De CAPTCHA ûntbrekt of is ûnkrekt.",
+ "captcha-create": "Om de side oan te meitsjen wurdt jo frege it antwurd op de ûndersteande som te jaan ([[Special:Captcha/help|meer ynformaasje]]).",
+ "captchahelp-title": "Lettertoets-help",
+ "captchahelp-text": "Websteeën dêr't it publyk op skriuwe kin, lykas dizze {{SITENAME}}-wiki, kinne lêst hawwe fan lju dy't automatysk keppelings oan de websiden tafoegje. Op dizze wiki kinne sokke feroarings maklik weromset wurde, mar dat nimt al tiid dy't ek oars brûkt wurde kin.\n\nBy it oanmelden as meidogger, en fierders benammen at jo keppelings om utens oan in side tafoegje, kinne jo fan de wiki in lettertoets krije. De wiki lit dan kleurde of ferwrongen letters sjen, en jo wurdt frege dy oer te tikken. Om't dit net maklik automatisearre wurde kin, hâldt dit it automatysk tafoegjen tsjin. It spitegernôch ek in lytse lêst foar de meidoggers.\n\nIn probleem dêr't noch gjin oplossing foar is it dat it in tûkelteam is foar minsken dy't net goed sjen kinne of dy't in tekst-blêder of lûd-blêder brûke. Hjir soe in lûd-ferzje foar komme moatte, mar dy is der noch net. Oerlis mei in behearder at dit foar jo problemen jout.\n\nGean tebek mei de tebek-knop fan jo blêder."
+}
diff --git a/extensions/ConfirmEdit/i18n/core/ga.json b/extensions/ConfirmEdit/i18n/ga.json
index 918f2fb7..918f2fb7 100644
--- a/extensions/ConfirmEdit/i18n/core/ga.json
+++ b/extensions/ConfirmEdit/i18n/ga.json
diff --git a/extensions/ConfirmEdit/i18n/core/gl.json b/extensions/ConfirmEdit/i18n/gl.json
index 531d9f24..531d9f24 100644
--- a/extensions/ConfirmEdit/i18n/core/gl.json
+++ b/extensions/ConfirmEdit/i18n/gl.json
diff --git a/extensions/ConfirmEdit/i18n/gom-deva.json b/extensions/ConfirmEdit/i18n/gom-deva.json
new file mode 100644
index 00000000..d85ae36a
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/gom-deva.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Santhosh.thottingal"
+ ]
+ },
+ "captcha-label": "कैप्चा"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/grc.json b/extensions/ConfirmEdit/i18n/grc.json
index 757dbf10..757dbf10 100644
--- a/extensions/ConfirmEdit/i18n/core/grc.json
+++ b/extensions/ConfirmEdit/i18n/grc.json
diff --git a/extensions/ConfirmEdit/i18n/core/gsw.json b/extensions/ConfirmEdit/i18n/gsw.json
index 8859ede7..8859ede7 100644
--- a/extensions/ConfirmEdit/i18n/core/gsw.json
+++ b/extensions/ConfirmEdit/i18n/gsw.json
diff --git a/extensions/ConfirmEdit/i18n/core/gu.json b/extensions/ConfirmEdit/i18n/gu.json
index 32a47276..32a47276 100644
--- a/extensions/ConfirmEdit/i18n/core/gu.json
+++ b/extensions/ConfirmEdit/i18n/gu.json
diff --git a/extensions/ConfirmEdit/i18n/core/he.json b/extensions/ConfirmEdit/i18n/he.json
index fcc123e8..fcc123e8 100644
--- a/extensions/ConfirmEdit/i18n/core/he.json
+++ b/extensions/ConfirmEdit/i18n/he.json
diff --git a/extensions/ConfirmEdit/i18n/hi.json b/extensions/ConfirmEdit/i18n/hi.json
new file mode 100644
index 00000000..39e0d3be
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/hi.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Kaustubh",
+ "Shyam",
+ "Siddhartha Ghai",
+ "आलोक"
+ ]
+ },
+ "captcha-edit": "यह पन्ना संपादित करने के लिये नीचे दिये हुए आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "captcha-desc": "आसानसे कॅपचा (captcha) का इस्तेमाल",
+ "captcha-label": "कैप्चा",
+ "captcha-addurl": "आपके सम्पादन में नई बाहरी कड़ियाँ हैं।\nस्वचालित स्पॅम से बचाव में सहायता के लिये नीचे दिये हुए आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "captcha-badlogin": "स्वचालित कूटशब्द भेद से बचाव में सहायता के लिये नीचे दिये हुए आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "captcha-createaccount": "स्वचालित सदस्य पंजीकरण से बचाव में सहायता के लिये नीचे दिये हुए आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "captcha-createaccount-fail": "गलत या खाली सहमती कोड।",
+ "captcha-create": "यह पन्ना बनाने के लिये, नीचे दिये आसान गणित प्रश्न का उत्तर बक्से में लिखें ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "captcha-sendemail": "स्वचालित स्पैमिंग से बचाव के लिये कृपया नीचे दिये गणित प्रश्न का उत्तर बक्से में लिखें\n([[Special:Captcha/help|अधिक जानकारी]]):",
+ "captcha-sendemail-fail": "गलत या लापता पुष्टिकरण कोड ।",
+ "captchahelp-title": "कॅप्टचा सहायता",
+ "captchahelp-cookies-needed": "यह कार्य करने के लिये आपने कूकीज (cookies) एनेबल किया होना आवश्यक हैं।",
+ "captchahelp-text": "इस विकि जैसे जालस्थल, जो जनता जनार्दन से लेख स्वीकार करते हैं, अक्सर रद्दी काम करने वालों के फंदे में आ जाते हैं, जो स्वचालित यंत्रों से कई स्थलों पर अपनी कड़ियाँ छापने की कोशिश करते हैं।\nयूँ तो ये रद्दी कड़ियाँ हटाई जा सकती हैं, पर फिर भी ये झंझट तो खड़ा करती ही हैं।\n\nकुछ बार, खासकर जब किसी पन्ने पृष्ठ पर एक नया जाल पता जोड़ा जाता है, तब विकी आपको एक रंगीन या टेढ़े मेढ़े लेख की तस्वीर दिखा के आपको उस तस्वीर में लिखी सामग्री को पढ़ के टंकित करने को कह सकती है।\nऐसी तस्वीर को यंत्र द्वारा पढ़ पाना मुश्किल होता है, इसलिए इसके जरिए अधिकतर मानव अपने लेख छाप पाएँगे और साथ ही अधितकर रद्दी वाले और यांत्रिक उपकरण नहीं छाप पाएँगे।\n\nदुर्भाग्यवश इससे सीमित चक्षु-दृष्टि वाले सदस्यों या पाठ-आधारित या वाचन-आधारित विचरकों का प्रयोग करने वाले सदस्यों को समस्या आती है।\nइस समय हमारे पास इसका श्रव्य विकल्प उपलब्ध नहीं है।\nयदि इसकी वजह से आपको वैध लेख लिखने में अवरोध आ रहा हो तो कृपया सहायता के लिए [[Special:ListAdmins|स्थल प्रबंधकों]] से संपर्क करें।\n\nपन्ना संपादन पर वापस जाने के लिए अपने विचरक पर 'एक पृष्ठ पीछे जाएँ' वाली कुंजी का प्रयोग करें।",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# इसकी रुपरेषा इस प्रकार हैं:\n# * \"#\" से शुरु होनेवाली सभी लाईनें टिप्पणीयाँ हैं।\n# * हर अन्य लाईन regex fragment हैं जो सिर्फ URL के होस्टस्‌ को जोडता हैं\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "Captcha में जाये बिना Captcha का इस्तेमाल करने के लिये मजबूर करें"
+}
diff --git a/extensions/ConfirmEdit/i18n/hr.json b/extensions/ConfirmEdit/i18n/hr.json
new file mode 100644
index 00000000..d661c483
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/hr.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dalibor Bosits",
+ "Dnik",
+ "Ex13",
+ "Herr Mlinka",
+ "Roberta F.",
+ "SpeedyGonsales"
+ ]
+ },
+ "captcha-edit": "Da uredite ovu stranicu, molimo riješite jednostavno zbrajanje ispod i unesite rezultat u rubriku ([[Special:Captcha/help|više informacija]]):",
+ "captcha-desc": "Pruža CAPTCHA tehnike za zaštitu od neželjene pošte (spam-a) i pogađanja zaporke",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć?]])",
+ "captcha-badlogin": "Da se spriječi automatizirano pogađanje lozinki,\nmolimo zbrojite donje brojeve i upišite rezultat ([[Special:Captcha/help|pomoć]]):",
+ "captcha-createaccount": "Kao zaštitu od automatskog spama, pri otvaranju računa trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć]])",
+ "captcha-createaccount-fail": "Potvrdni kod je nepotpun ili netočan.",
+ "captcha-create": "Vaše uređivanje sadrži nove vanjske poveznice. Kao zaštitu od automatskog spama, trebate unijeti slova koja vidite na slici: <br />([[Special:Captcha/help|Pomoć?]])",
+ "captcha-sendemail": "Da bi ste nam pomogli protiv automatskog spama, molimo riješite jednostavan zadatak zbrajanja ispod i unesite rezultat u okvir ([[Special:Captcha/help|više informacija]]):",
+ "captcha-sendemail-fail": "Potvrdni kod je nepotpun ili netočan.",
+ "captcha-disabledinapi": "Ova akcija traži captchu, tako da se ne može izvršiti preko API-ja.",
+ "captchahelp-title": "Antispam pomoć",
+ "captchahelp-cookies-needed": "Trebate imati uključene kolačiće (''cookies'') u vašem web pregledniku za ovu funkciju.",
+ "captchahelp-text": "Internetske stranice koji prihvaćaju doprinose od javnosti, poput ovog wikija, često zloupotrebljavaju spameri, koji koriste automatizirane alate pomoću kojih postavljaju svoje poveznice na mnoge stranice.\nIako se te spam poveznice mogu uklanjati, one predstavljaju značajne neugodnost pri radu.\n\nPonekad, a naročito kad se dodaje web poveznica na stranicu, wiki može prikazati sliku obojenog ili iskrivljenog teksta uz zahtjev za unos prikazanih riječi.\nBudući da je takvu radnju teško automatizirati, to će omogućiti pravim suradnicima njihov nastavak u pridonošenju, dok će zaustaviti većinu spamera i robotskih napadača.\n\nNa žalost, ovo može biti nepristupačno za suradnike koji koriste tekstualne klijene ili one glasovno bazirane. Trenutačno nemamo glasovnu podršku za ovo.\nMolimo obratite se [[Special:ListAdmins|administratorima]] za pomoć, ukoliko Vas ovo ometa pri dodavanju važećih sadržaja.\n\nPritisnite u svom pregledniku 'nazad' kako bi se vratili na uređivač stranice.",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Rabi se sljedeća sintaksa:\n# * Sve od \"#\" znaka do kraja linije je komentar\n# * Svaki je neprazni redak regularni izraz (regex) koji odgovara poslužitelju unutar URL-a\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "Izvođenje akcija koje pokreću captcha bez prolaženja kroz captcha sustav"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/hsb.json b/extensions/ConfirmEdit/i18n/hsb.json
index 8861e46a..8861e46a 100644
--- a/extensions/ConfirmEdit/i18n/core/hsb.json
+++ b/extensions/ConfirmEdit/i18n/hsb.json
diff --git a/extensions/ConfirmEdit/i18n/core/ht.json b/extensions/ConfirmEdit/i18n/ht.json
index 97561273..97561273 100644
--- a/extensions/ConfirmEdit/i18n/core/ht.json
+++ b/extensions/ConfirmEdit/i18n/ht.json
diff --git a/extensions/ConfirmEdit/i18n/hu.json b/extensions/ConfirmEdit/i18n/hu.json
new file mode 100644
index 00000000..03488371
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/hu.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dani",
+ "Dj",
+ "Glanthor Reviol",
+ "Tacsipacsi"
+ ]
+ },
+ "captcha-edit": "A lap szerkesztéséhez meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű összeadás eredményét ([[Special:Captcha/help|segítség]]):",
+ "captcha-desc": "CAPTCHA-technológiák a spamek és a jelszókitalálási technikák ellen",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Szerkesztésed új külső linket tartalmaz. A reklámokat elhelyező robotok kiszűrése érdekében tisztelettel megkérünk, hogy írd be a lenti dobozba az alábbi egyszerű összeadás eredményét. ([[Special:Captcha/help|segítség]])",
+ "captcha-badlogin": "Az automatikus jelszófeltörés kiszűrése érdekében tisztelettel megkérünk, írd be a lenti dobozba az alábbi egyszerű összeadás eredményét ([[Special:Captcha/help|segítség]]):",
+ "captcha-createaccount": "A felhasználói fiókok automatizált létrehozásának kiszűrése érdekében meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű összeadás eredményét ([[Special:Captcha/help|segítség]]):",
+ "captcha-createaccount-fail": "Hibás vagy hiányzó ellenőrző kód.",
+ "captcha-create": "Az oldal elkészítéséhez meg kell, hogy kérjünk, írd be a lenti dobozba az alábbi egyszerű számtani művelet eredményét. ([[Special:Captcha/help|segítség]])",
+ "captcha-sendemail": "Hogy védjük a wikit az automatizált spammelés ellen, kérünk oldd meg az alábbi egyszerű összeadást, és írd be az eredményt a szövegdobozba ([[Special:Captcha/help|segítség]]):",
+ "captcha-sendemail-fail": "Hibás vagy hiányzó ellenőrző kód.",
+ "captcha-disabledinapi": "Ez a művelet captcha megoldásához kötött, így nem lehet végrehajtani az API-n keresztül.",
+ "captchahelp-title": "Captcha-segítség",
+ "captchahelp-cookies-needed": "Engedélyezned kell a böngésződben a sütiket.",
+ "captchahelp-text": "Az olyan weboldalakat, amelyekre bárki írhat, gyakran támadják meg spammerek olyan eszközök felhasználásával, amelyek képesek automatikusan, emberi felügyelet nélkül elhelyezni egy linket sok különböző oldalon.\n\nAz ilyen linkek kézi eltávolítása rengeteg energiát emésztene fel, ezért néha, különösen ha egy külső linket teszel egy cikkbe, a wiki egy valamilyen módon eltorzított szöveget (captcha-t) jelenít meg, és arra kér, hogy gépeld be azt. Mivel ezt automatikusan nagyon nehéz megtenni, a valódi szerkesztők így könnyen megkülönböztethetőek a spammerek robotjaitól.\n\nSajnos ez komoly kényelmetlenséget jelenthet azoknak a felhasználóknak, akik gyengén látnak, vagy szöveges/hang-alapú böngészőt használnak. Jelenleg nem tudunk hang-alapú alternatívával szolgálni; ha a captcha megakadályoz abban, hogy szerkeszd a wikit, vedd fel a kapcsolatot az [[Special:ListAdmins|adminisztrátorokkal]].\n\nHa a captcha megoldása helyett inkább visszatérnél a szöveg szerkesztéséhez, használd a böngésződ „vissza” gombját.",
+ "captcha-addurl-whitelist": " #<!-- ezt a sort hagyd pontosan így --> <pre>\n# A szintaktika a következő:\n# * Minden „#” karakterrel kezdődő sor megjegyzés\n# * Minden nem üres sor egy reguláris kifejezés darabja, amely csak az URL-ekben található kiszolgálókra keres\n #</pre> <!-- ezt a sort hagyd pontosan így -->",
+ "right-skipcaptcha": "captcha átugrása"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/hy.json b/extensions/ConfirmEdit/i18n/hy.json
index f1243cfd..f1243cfd 100644
--- a/extensions/ConfirmEdit/i18n/core/hy.json
+++ b/extensions/ConfirmEdit/i18n/hy.json
diff --git a/extensions/ConfirmEdit/i18n/core/ia.json b/extensions/ConfirmEdit/i18n/ia.json
index 7b6ba128..7b6ba128 100644
--- a/extensions/ConfirmEdit/i18n/core/ia.json
+++ b/extensions/ConfirmEdit/i18n/ia.json
diff --git a/extensions/ConfirmEdit/i18n/core/id.json b/extensions/ConfirmEdit/i18n/id.json
index df7e39a1..df7e39a1 100644
--- a/extensions/ConfirmEdit/i18n/core/id.json
+++ b/extensions/ConfirmEdit/i18n/id.json
diff --git a/extensions/ConfirmEdit/i18n/core/ilo.json b/extensions/ConfirmEdit/i18n/ilo.json
index 30ef903e..30ef903e 100644
--- a/extensions/ConfirmEdit/i18n/core/ilo.json
+++ b/extensions/ConfirmEdit/i18n/ilo.json
diff --git a/extensions/ConfirmEdit/i18n/core/is.json b/extensions/ConfirmEdit/i18n/is.json
index 839ac1ac..839ac1ac 100644
--- a/extensions/ConfirmEdit/i18n/core/is.json
+++ b/extensions/ConfirmEdit/i18n/is.json
diff --git a/extensions/ConfirmEdit/i18n/core/it.json b/extensions/ConfirmEdit/i18n/it.json
index 18fadab9..18fadab9 100644
--- a/extensions/ConfirmEdit/i18n/core/it.json
+++ b/extensions/ConfirmEdit/i18n/it.json
diff --git a/extensions/ConfirmEdit/i18n/core/ja.json b/extensions/ConfirmEdit/i18n/ja.json
index cc626ca0..cc626ca0 100644
--- a/extensions/ConfirmEdit/i18n/core/ja.json
+++ b/extensions/ConfirmEdit/i18n/ja.json
diff --git a/extensions/ConfirmEdit/i18n/core/jut.json b/extensions/ConfirmEdit/i18n/jut.json
index 2b989b47..2b989b47 100644
--- a/extensions/ConfirmEdit/i18n/core/jut.json
+++ b/extensions/ConfirmEdit/i18n/jut.json
diff --git a/extensions/ConfirmEdit/i18n/core/jv.json b/extensions/ConfirmEdit/i18n/jv.json
index 3444fe8e..3444fe8e 100644
--- a/extensions/ConfirmEdit/i18n/core/jv.json
+++ b/extensions/ConfirmEdit/i18n/jv.json
diff --git a/extensions/ConfirmEdit/i18n/core/ka.json b/extensions/ConfirmEdit/i18n/ka.json
index 8e132a57..8e132a57 100644
--- a/extensions/ConfirmEdit/i18n/core/ka.json
+++ b/extensions/ConfirmEdit/i18n/ka.json
diff --git a/extensions/ConfirmEdit/i18n/core/kaa.json b/extensions/ConfirmEdit/i18n/kaa.json
index e8342e39..e8342e39 100644
--- a/extensions/ConfirmEdit/i18n/core/kaa.json
+++ b/extensions/ConfirmEdit/i18n/kaa.json
diff --git a/extensions/ConfirmEdit/i18n/khw.json b/extensions/ConfirmEdit/i18n/khw.json
new file mode 100644
index 00000000..cffeff40
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/khw.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rachitrali"
+ ]
+ },
+ "captcha-label": "کیپچا"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/kk-arab.json b/extensions/ConfirmEdit/i18n/kk-arab.json
index 51b7987a..51b7987a 100644
--- a/extensions/ConfirmEdit/i18n/core/kk-arab.json
+++ b/extensions/ConfirmEdit/i18n/kk-arab.json
diff --git a/extensions/ConfirmEdit/i18n/core/kk-cyrl.json b/extensions/ConfirmEdit/i18n/kk-cyrl.json
index 8795850d..8795850d 100644
--- a/extensions/ConfirmEdit/i18n/core/kk-cyrl.json
+++ b/extensions/ConfirmEdit/i18n/kk-cyrl.json
diff --git a/extensions/ConfirmEdit/i18n/core/kk-latn.json b/extensions/ConfirmEdit/i18n/kk-latn.json
index 5b5a9728..5b5a9728 100644
--- a/extensions/ConfirmEdit/i18n/core/kk-latn.json
+++ b/extensions/ConfirmEdit/i18n/kk-latn.json
diff --git a/extensions/ConfirmEdit/i18n/core/km.json b/extensions/ConfirmEdit/i18n/km.json
index 6ab7ea71..6ab7ea71 100644
--- a/extensions/ConfirmEdit/i18n/core/km.json
+++ b/extensions/ConfirmEdit/i18n/km.json
diff --git a/extensions/ConfirmEdit/i18n/kn.json b/extensions/ConfirmEdit/i18n/kn.json
new file mode 100644
index 00000000..b3c9fc22
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/kn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Omshivaprakash"
+ ]
+ },
+ "captcha-label": "ಕ್ಯಾಪ್ಚಾ"
+}
diff --git a/extensions/ConfirmEdit/i18n/ko.json b/extensions/ConfirmEdit/i18n/ko.json
new file mode 100644
index 00000000..097cf4bf
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/ko.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "IRTC1015",
+ "Klutzy",
+ "Kwj2772",
+ "Priviet",
+ "ToePeu",
+ "아라"
+ ]
+ },
+ "captcha-edit": "글을 편집하려면 아래의 간단한 덧셈 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
+ "captcha-desc": "스팸과 비밀번호 탈취를 방지하기 위한 CAPTCHA(캡차) 기술을 제공합니다",
+ "captcha-label": "CAPTCHA(캡차)",
+ "captcha-addurl": "편집에 새로운 바깥 링크가 포함되어 있습니다.\n자동화된 스팸으로부터 위키를 보호하기 위해, 편집을 저장하려면 아래의 간단한 계산 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
+ "captcha-badlogin": "자동화된 비밀번호 깨기로부터 위키를 보호하기 위해, 아래의 간단한 계산 값을 입력 상자에 입력해주세요 ([[Special:Captcha/help|자세한 정보]]):",
+ "captcha-createaccount": "자동화된 계정 만들기로부터 위키를 보호하기 위해, 아래의 간단한 계산 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
+ "captcha-createaccount-fail": "CAPTCHA가 올바르지 않거나 입력되지 않았습니다.",
+ "captcha-create": "문서를 만드려면 아래의 간단한 계산 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
+ "captcha-sendemail": "자동화된 스팸으로부터 위키를 보호하기 위해, 아래의 간단한 계산 값을 입력 상자에 적어 주세요 ([[Special:Captcha/help|자세한 정보]]):",
+ "captcha-sendemail-fail": "CAPTCHA가 올바르지 않거나 입력되지 않았습니다.",
+ "captcha-disabledinapi": "이 동작은 캡차를 거쳐야 하기 때문에 API로 이 작업을 수행할 수 없습니다.",
+ "captchahelp-title": "CAPTCHA(캡차) 도움말",
+ "captchahelp-cookies-needed": "정상적으로 작동하려면 웹 브라우저의 쿠키 사용이 활성화되어 있어야 합니다.",
+ "captchahelp-text": "이 위키와 같이 사람의 공개적인 참여가 가능한 웹 사이트에서는 자동 프로그램이 스팸을 뿌리는 경우가 있습니다.\n물론 이러한 스팸은 제거할 수는 있지만 번거로운 작업이 늘어납니다.\n\n이러한 스팸을 방지하기 위해서, 이 위키의 문서에 웹 사이트 주소를 추가하는 등의 행동을 할 경우에는 비틀린 글자가 들어있는 그림을 보여주고 그 그림의 글자를 입력해 달라고 하는 경우가 있습니다.\n이 글자 입력 작업은 자동 프로그램을 만들기가 힘들기 때문에 스팸을 효과적으로 막으면서 일반 사용자를 막지 않을 수 있습니다.\n\n웹 브라우저에서 그림을 완벽하게 표시할 수 없거나, 그림이 나오지 않는 텍스트 방식이나 음성 합성 방식 웹 브라우저를 사용하는 경우에는 이러한 입력이 불가능합니다.\n아직까지는 이런 경우에 대한 대안이 없습니다.\n예기치않게 정당한 행동을 하지 못하도록 막는다면 [[Special:ListAdmins|사이트 관리자]]에게 도움을 요청해 주세요.\n\n이전 화면으로 돌아가려면 웹 브라우저의 \"뒤로\" 버튼을 누르세요.",
+ "captcha-addurl-whitelist": " #<!-- 이 줄은 그대로 두십시오 --> <pre>\n# 문법은 다음과 같습니다:\n# * \"#\" 문자에서 줄의 끝까지는 주석입니다\n# * 빈 줄이 아닌 줄은 정규식으로, URL의 호스트만을 검사합니다\n #</pre> <!-- 이 줄은 그대로 두십시오 -->",
+ "right-skipcaptcha": "캡차 과정을 거치지 않고 캡차 과정을 거친 것으로 간주"
+}
diff --git a/extensions/ConfirmEdit/i18n/krc.json b/extensions/ConfirmEdit/i18n/krc.json
new file mode 100644
index 00000000..aca64b6f
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/krc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iltever"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/ksh.json b/extensions/ConfirmEdit/i18n/ksh.json
new file mode 100644
index 00000000..7fa0e352
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/ksh.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "captcha-edit": "Öm de Sigg ze ändere, don di Zahle onge zosamme zälle un don de Antwoot en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
+ "captcha-desc": "Brängk en „Kaptscha“ en et Wiki, öm jääje SPAM un jäje et Paßwööter-Dorschprobeere ze schöze.",
+ "captcha-label": "<span style=\"text-transform:uppercase\">Kaptscha</span>",
+ "captcha-addurl": "Do häß neu Lingks op frembde Websigge dobei jedonn.\nMer schöze uns Wiki jäje automatesche SPAM, dröm\ndon di Zahle onge zosamme träcke un don de Antwoot\nen dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
+ "captcha-badlogin": "Mer schöze Metmaacher en unsem Wiki jäje automatesche\nPaßwoot-Knackerei, dröm don di Zahle onge zosamme zälle,\nun de Antwoot en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
+ "captcha-createaccount": "Mer schöze uns Wiki dojäje, dat mer en Masse automatesch\nMetmaacher aanmeldt. Dröm beß esu joot un\ndon di Zahle onge zosamme zälle un don de Antwoot\nen dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
+ "captcha-createaccount-fail": "Di Bestähtejong (<i lang=\"en\" xml:lang=\"en\">CAPTCHA</i>) fähld udder es verkeht.",
+ "captcha-create": "Öm di Sigg neu aanzelääje, don di Zahle onge zosamme zälle,\nun don de Antwoot en dat Käßje endraare. (Verklierung)",
+ "captcha-sendemail": "För automettesche SPAM ze verhendere, donn di Zahle onge zosamme zälle,\nun don de Antwoot en dat Käßje endraare. ([[Special:Captcha/help|Verklierung]])",
+ "captcha-sendemail-fail": "Di Bestähtejong (<i lang=\"en\" xml:lang=\"en\">CAPTCHA</i>) fähld udder es verkeht.",
+ "captcha-disabledinapi": "För di Aufjab moß en extra Bestätejon enjejovve wääde, un dat künne mer nit övver de API.",
+ "captchahelp-title": "Äklierung zum Kaptscha SPAM-Schotz",
+ "captchahelp-cookies-needed": "Do moß <i lang=\"en\">Cookies</i> en Dingem Brauser enjeschalldt han, domet da hee fluppe kann.",
+ "captchahelp-text": "Op Web Saits wi dat Wiki hee, wo jeder jät beidraare kann, do kumme se öff wi de Fleeje un don met Projramme un fun Hand Lengks op de eije Websigge bloß fö Reklahme affläje, der ohne Senn un Verschtand. Esu ene <i lang=\"en\" xml:lang=\"en\" title=\"\">SPAM</i> kam_mer widder fott maache, dat määt ävver Ärjer un Opwand.\n\nSu jät wulle_mer nit hann, un donn_et jlish widder fottschmiiße.\n\nDomet mer do_met nidd_esu fill Ärrbed hann,\nmaache_mer dänne Autmaate et Lävve schwer.\nWann uns Wikki merk, et künnd_esu jet em Bösch sinn, dann zeisch et e Belldsche med jät dren, un fröhsch, dat mer dat jenau esu ennjävve sullt,\nwi et do schteiht. För_enne Minsch eß dat eifach, ävver dat es fodammp schwierich ze projrammehre.\nDat es e beßßje läßtish för der Minsch, ävver de Robbotter hälld et unß bahl kumplett fum Lief, un su jesinn, ess et netto enne Jewenn.\n\nWann De Dich ens fordeis, es och nit schlimm, De wees norr_enß jefrooch, un wat De jetipp häs, kütt nit fott.\n\nSchaad es, mer hann noch keine Wääsch, dat met Schprohch udder sönswi ze maache, su dat Lück met Schprohch_Ußßjaave, Braille, un met nur Tex em Brauser oohne Bellder, em Räähn schtonn künnte. Dooht Ühr Zeush eets enß oohne Lengk schpeischere, un saat dä [[Special:ListAdmins|Wikki_Köbesse]],\nwann Ühr Probbleme hatt. Do weed_Üch jehollfe weede.\n\nJetz kanns De met Dingem Brauser singem „Zeröck“-Knopp wigger maache, wo De fürher wohß.",
+ "captcha-addurl-whitelist": " #<!-- Lohß di Reih he jenou esu wi se es --> <pre>\n# Dä Opbou es:\n# * Alles fun enem #-Zeiche bes an et Engk fun ene Reih es ene Kommentaa för de Minsche\n# * Jede Reih met jet dren es en Stöck rejolähre Ußdrok, wat Domains en URL treffe kann\n #</pre> <!-- Lohß di Reih he jenou esu wi se es -->",
+ "right-skipcaptcha": "De Opforderung fum Kaptscha överjonn"
+}
diff --git a/extensions/ConfirmEdit/i18n/ku-latn.json b/extensions/ConfirmEdit/i18n/ku-latn.json
new file mode 100644
index 00000000..4fff3b85
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/ku-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "George Animal"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/kw.json b/extensions/ConfirmEdit/i18n/kw.json
index 34d2400b..34d2400b 100644
--- a/extensions/ConfirmEdit/i18n/core/kw.json
+++ b/extensions/ConfirmEdit/i18n/kw.json
diff --git a/extensions/ConfirmEdit/i18n/core/ky.json b/extensions/ConfirmEdit/i18n/ky.json
index fdd6c275..fdd6c275 100644
--- a/extensions/ConfirmEdit/i18n/core/ky.json
+++ b/extensions/ConfirmEdit/i18n/ky.json
diff --git a/extensions/ConfirmEdit/i18n/core/la.json b/extensions/ConfirmEdit/i18n/la.json
index 562147c8..562147c8 100644
--- a/extensions/ConfirmEdit/i18n/core/la.json
+++ b/extensions/ConfirmEdit/i18n/la.json
diff --git a/extensions/ConfirmEdit/i18n/core/lad.json b/extensions/ConfirmEdit/i18n/lad.json
index 7e142979..7e142979 100644
--- a/extensions/ConfirmEdit/i18n/core/lad.json
+++ b/extensions/ConfirmEdit/i18n/lad.json
diff --git a/extensions/ConfirmEdit/i18n/core/lb.json b/extensions/ConfirmEdit/i18n/lb.json
index a92fc4f9..a92fc4f9 100644
--- a/extensions/ConfirmEdit/i18n/core/lb.json
+++ b/extensions/ConfirmEdit/i18n/lb.json
diff --git a/extensions/ConfirmEdit/i18n/core/li.json b/extensions/ConfirmEdit/i18n/li.json
index 062c3442..062c3442 100644
--- a/extensions/ConfirmEdit/i18n/core/li.json
+++ b/extensions/ConfirmEdit/i18n/li.json
diff --git a/extensions/ConfirmEdit/i18n/core/lo.json b/extensions/ConfirmEdit/i18n/lo.json
index d35d336a..d35d336a 100644
--- a/extensions/ConfirmEdit/i18n/core/lo.json
+++ b/extensions/ConfirmEdit/i18n/lo.json
diff --git a/extensions/ConfirmEdit/i18n/lrc.json b/extensions/ConfirmEdit/i18n/lrc.json
new file mode 100644
index 00000000..b00dd1c6
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/lrc.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "captcha-edit": "سی ویرایشت ای بلگه،لطف بکیت جم هاری نه انجوم بئیتو و جواو نه د جعوه وارد بکید:([[Special:Captcha/هومیاری|دونسمنیا هنی]])",
+ "captcha-label": "كپچا",
+ "captcha-createaccount-fail": "کد کپچا غلط یا گم بیه.",
+ "captcha-sendemail-fail": "کد کپچا غلط یا گم بیه.",
+ "captchahelp-title": "هومياری كپچا",
+ "captchahelp-cookies-needed": "شما با کوکیانه د جاگرد تو فعال بکید سی یه وه کار بکه."
+}
diff --git a/extensions/ConfirmEdit/i18n/core/lt.json b/extensions/ConfirmEdit/i18n/lt.json
index 7cbe2aad..7cbe2aad 100644
--- a/extensions/ConfirmEdit/i18n/core/lt.json
+++ b/extensions/ConfirmEdit/i18n/lt.json
diff --git a/extensions/ConfirmEdit/i18n/core/lv.json b/extensions/ConfirmEdit/i18n/lv.json
index c40f7f77..c40f7f77 100644
--- a/extensions/ConfirmEdit/i18n/core/lv.json
+++ b/extensions/ConfirmEdit/i18n/lv.json
diff --git a/extensions/ConfirmEdit/i18n/mai.json b/extensions/ConfirmEdit/i18n/mai.json
new file mode 100644
index 00000000..c56b822e
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/mai.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "captcha-label": "सहमति कोड (क्याप्चा)",
+ "captcha-createaccount-fail": "गलत या खालि सहमति कोड।",
+ "captcha-create": "इ पृष्ठ बनाबए के लेल, निचा देल हल्लुक गणित प्रश्न के उत्तर बक्सा में लिखु ([[Special:Captcha/help|अधिक जानकारी]]):",
+ "captcha-sendemail-fail": "गलत या खालि सहमति कोड।",
+ "captchahelp-title": "सहमति कोड (क्याप्चा) सहायता",
+ "captchahelp-cookies-needed": "इ कार्य करए के लेल अहाँ के कूकीज (cookies) सक्षम केनाए आवश्यक अछि।",
+ "right-skipcaptcha": "सहमति कोड में नै जा सहमति कोड के प्रयोग करए के लेल आग्रह करू"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/mg.json b/extensions/ConfirmEdit/i18n/mg.json
index 8d084555..8d084555 100644
--- a/extensions/ConfirmEdit/i18n/core/mg.json
+++ b/extensions/ConfirmEdit/i18n/mg.json
diff --git a/extensions/ConfirmEdit/i18n/core/min.json b/extensions/ConfirmEdit/i18n/min.json
index a4c21746..a4c21746 100644
--- a/extensions/ConfirmEdit/i18n/core/min.json
+++ b/extensions/ConfirmEdit/i18n/min.json
diff --git a/extensions/ConfirmEdit/i18n/mk.json b/extensions/ConfirmEdit/i18n/mk.json
new file mode 100644
index 00000000..9ace5735
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/mk.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06",
+ "Brest"
+ ]
+ },
+ "captcha-edit": "За да ја уредите оваа страница потребно е да го најдете решението на едноставната задача поставена подолу и одговорот да го внесете во соодветното поле за одговор([[Special:Captcha/help|повеќе информации]]):",
+ "captcha-desc": "Овозможува техники од CAPTCHA за заштита од спам и погодување на лозинки",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Вашето уредување содржи нови надворешни врски.\nЗа да ни помогнете да се заштитиме од автоматизиран спам, би ве замолиле да ја решите простата задача подолу и да го внесете резултатот во полето за да можете да го зачувате уредувањето ([[Special:Captcha/help|повеќе инфо]]):",
+ "captcha-badlogin": "За да ни помогнете да се заштитиме од автоматизирано пробивање на лозинки, би ве замолиле да ја решите простата задача подолу и внесете резултатот во полето ([[Special:Captcha/help|повеќе информации]]):",
+ "captcha-createaccount": "За да ни помогнете да се заштитиме од автоматизирано создавање на сметки, би ве замолиле да ја решите простата задача подолу и да го внесете резултатот во полето ([[Special:Captcha/help|повеќе инфо]]):",
+ "captcha-createaccount-fail": "CAPTCHA е неточен или недостасува.",
+ "captcha-create": "За да ја создадете страницата, прво решете ја простата задача подолу и впишете го решението во полето ([[Special:Captcha/help|повеќе инфо]]):",
+ "captcha-sendemail": "За да се заштитиме од автоматизирано спамирање, би сакале да ве замолиме да ја решите простата задача подолу и да го внесете резултатот во полето ([[Special:Captcha/help|повеќе информации]]):",
+ "captcha-sendemail-fail": "CAPTCHA е неточен или недостасува.",
+ "captcha-disabledinapi": "Ова дејство бара CAPTCHA, така што не може да се изврши преку иавршник.",
+ "captchahelp-title": "Помош со Captcha",
+ "captchahelp-cookies-needed": "Треба да имате овозможено колачиња за да може ова да работи.",
+ "captchahelp-text": "Семрежните места кои прифаќаат учество на јавноста, како ова вики, честопати страдаат од спамери кои користат автоматизирани алатки за да ги додаваат нивните врски на голем број мережни страници. Иако врските на спамерот може да се отстранат, тие значително ја пореметуваат нашата работа.\n\nПонекогаш, особено кога додава нови врски на страница, викито може да ви прикаже обоен или извитоперен текст и да ви побара да ги впишете прикажаните зборови. \nБидејќи ова е задача која е тешко да се автоматизира, им овозможува вистинските корисници да придонесуваат, а им попречува на спамерите и другите роботски напаѓачи.\n\nЗа жал, ова може да е проблем за корисници со лош вид, или оние кои користат прелистувачи на основа на текст или гласовни наредби.\nВо моментов немаме аудио-алтернатива за ова.\nКонтактирајте ги [[Special:ListAdmins|администраторите на страната]] за помош доколку ова неочекувано ве спречува во правењето на искрени придонеси. \n\nСтиснете на копчето „назад“ во вашиот прелисувач за да се вратите на уредувањето на страницата.",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Опис на синтаксата:\n# * Сето она што стои по знакот „#“, па до крајот на редот е коментар\n# * Секој непразен ред се смета за фрагмент од регуларен израз кој одговара само на имиња во URL адреси\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "Изведување на акции кои повикуваат captcha без да одат преку captcha системот"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/ml.json b/extensions/ConfirmEdit/i18n/ml.json
index 7fc5686c..7fc5686c 100644
--- a/extensions/ConfirmEdit/i18n/core/ml.json
+++ b/extensions/ConfirmEdit/i18n/ml.json
diff --git a/extensions/ConfirmEdit/i18n/core/mn.json b/extensions/ConfirmEdit/i18n/mn.json
index 19ba3d12..19ba3d12 100644
--- a/extensions/ConfirmEdit/i18n/core/mn.json
+++ b/extensions/ConfirmEdit/i18n/mn.json
diff --git a/extensions/ConfirmEdit/i18n/mr.json b/extensions/ConfirmEdit/i18n/mr.json
new file mode 100644
index 00000000..9aacf299
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/mr.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaustubh",
+ "Mahitgar",
+ "V.narsikar",
+ "संतोष दहिवळ"
+ ]
+ },
+ "captcha-edit": "हे पान संपादित करण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "captcha-desc": "उत्पात आणि परवलीच्या शब्दांच्या चोरी पासून सूरक्षीत ठेवणाऱ्या ओळखपटवा-पद्धती CAPTCHA techniques पुरवते.",
+ "captcha-addurl": "तुमच्या संपादनात नवीन बाह्यदुवे आहेत. आपोआप होणार्‍या स्पॅम पासून वाचण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "captcha-badlogin": "आपोआप होणार्‍या परवलीच्या शब्दाच्या चोरीपासून वाचण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "captcha-createaccount": "आपोआप होणार्‍या सदस्य नोंदणीपासून वाचण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "captcha-createaccount-fail": "चुकीचा अथवा रिकामा सहमती कोड",
+ "captcha-create": "हे पान तयार करण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "captcha-sendemail": "आपोआप होणार्‍या उत्पातापासून वाचण्यासाठी, खाली दिलेले सोपे गणित सोडवून त्याचे उत्तर दिलेल्या पृष्ठपेटी मध्ये लिहा ([[Special:Captcha/help|अधिक माहिती]]):",
+ "captcha-sendemail-fail": "चुकीचा अथवा रिकामा सहमती कोड",
+ "captcha-disabledinapi": "या क्रियेसाठी कॅप्चा हवी.API मार्फत हे शक्य नाही.",
+ "captchahelp-title": "कॅप्टचा साहाय्य",
+ "captchahelp-cookies-needed": "हे काम करण्यासाठी तुम्ही कूकीज (cookies) एनेबल केलेल्या असणे गरजेचे आहे.",
+ "captchahelp-text": "ज्या संकेतस्थळांवर जसे की हा विकि, सर्वसामान्य लोकांकडून संपादने करण्याची परवानगी असते, तिथे आपोआप होणारी स्वत:च्या संकेतस्थळांचे दुवे देणारी उत्पात संपादने (Spam) कायम होत असतात.\nअशी संपादने जरी काढता आली तरी ती एक डोकेदुखी होऊ शकते.\n\nकाहीवेळा, जेव्हा एखाद्या पानावर नवीन बाह्यदुवा देताना, विकि तुम्हाला एक चित्र दाखवून त्यांतील शब्द भरण्यास सांगू शकतो.\nहे काम संगणकाकरवी करून घेण्यास अवघड असल्याने, फक्त खरी माणसेच संपादने करू शकतील व स्पॅमर्सना आळा बसू शकेल.\n\nपण खेदाची गोष्ट अशी की ह्यामुळे अर्धांध व्यक्ती तसेच ज्या व्यक्ती फक्त मजकूर दाखविणारा न्याहाळक वापरतात, अशांना असुविधा होऊ शकते.\nसध्या आमच्याकडे आवाज ऐकण्याची सुविधा नाही.\nकृपया [[Special:ListAdmins|संस्थळ प्रचालकांशी]] या बाबतीत संपर्क करावा.\n\nपृष्ठ संपादनाकडे परत जाण्यासाठी आपल्या ब्राउझरची ’Back' ही कळ दाबा.",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# रुपरेषा खालीलप्रमाणे:\n# * \"#\" ने सुरु होणारे व ओळीच्या शेवटपर्यंत जाणारे वाक्य सूचना (Comment) आहे.\n# * प्रत्येक रिकामी नसलेली ओळ ही regex fragment आहे जी फक्त URLमधील होस्टसच्या जोड्या लावेल\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "कॅपचा मध्ये न जाता कॅपचाचा वापर करणार्‍या क्रिया करा"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/ms.json b/extensions/ConfirmEdit/i18n/ms.json
index e34515c1..e34515c1 100644
--- a/extensions/ConfirmEdit/i18n/core/ms.json
+++ b/extensions/ConfirmEdit/i18n/ms.json
diff --git a/extensions/ConfirmEdit/i18n/core/mt.json b/extensions/ConfirmEdit/i18n/mt.json
index c18448e2..c18448e2 100644
--- a/extensions/ConfirmEdit/i18n/core/mt.json
+++ b/extensions/ConfirmEdit/i18n/mt.json
diff --git a/extensions/ConfirmEdit/i18n/core/nah.json b/extensions/ConfirmEdit/i18n/nah.json
index 6de8cda2..6de8cda2 100644
--- a/extensions/ConfirmEdit/i18n/core/nah.json
+++ b/extensions/ConfirmEdit/i18n/nah.json
diff --git a/extensions/ConfirmEdit/i18n/core/nan.json b/extensions/ConfirmEdit/i18n/nan.json
index c4b65cf1..c4b65cf1 100644
--- a/extensions/ConfirmEdit/i18n/core/nan.json
+++ b/extensions/ConfirmEdit/i18n/nan.json
diff --git a/extensions/ConfirmEdit/i18n/nap.json b/extensions/ConfirmEdit/i18n/nap.json
new file mode 100644
index 00000000..debcf6e9
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/nap.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "captcha-edit": "Pe' putè cagnà sta paggena, pe' piacere facite sta somma semprice semprice ccà abbascio e mettite 'a risposta int' 'a casciulella 'e testo ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "captcha-desc": "Dàje 'e tecniche CAPTCHA pe' putè pruteggere annanz' 'o spam e 'o futtimento r' 'a password",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "'O cagnamiento tuojo azzecca cullegamiente 'e fore.\nPe' putè aiutà a pruteggere annanz' 'o spam automateco, pe' piacere rispunnette 'e dumanne ca cumpareno abbascio 'a casciulella ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "captcha-badlogin": "Pe' pruteggere sta wiki 'a coccheruno ca se futtesse 'e password automaticamente, ve cercammo gentilmente 'e ve ffà sta somma facile facile ccà abbascio e nce miettere 'a risposta int' 'a casciulella ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "captcha-createaccount": "Pe' pruteggere sta wiki 'a coccheruno ca se criase nu melione 'e cunte, ve cercammo gentilmente 'e ve ffà sta somma facile facile ccà abbascio e nce miettere 'a risposta int' 'a casciulella ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "captcha-createaccount-fail": "Codece 'e cunferma CAPTCHA errato o mancante.",
+ "captcha-create": "Pe' putè crià sta paggena, pe' piacere facite sta somma semprice semprice ccà abascio e mettite 'a risposta int' 'a casciulella 'e testo ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "captcha-sendemail": "Pe' pruteggere sta wiki 'a coccheruno ca mannasse spam automaticamente, ve cercammo gentilmente 'e ve ffà sta somma facile facile ccà abbascio e nce miettere 'a risposta int' 'a casciulella ([[Special:Captcha/help|cchiù nfurmaziune]]):",
+ "captcha-sendemail-fail": "CAPTCHA abbacante o sbagliato.",
+ "captcha-disabledinapi": "Pe' putè fà st'azione ce buò 'o CAPTCHA, sinò nun se può ffà pe' bbìa 'e ll'API.",
+ "captchahelp-title": "Ajuto p' 'o CAPTCHA",
+ "captchahelp-cookies-needed": "Pe' ffà chesto tenite bbesogno 'e v'appiccià 'e cookies dint' 'o navigatore.",
+ "captchahelp-text": "'E site web c'accettano mmasciata 'a 'o pubbleco, comm'a stu wiki, songo spisso abbusate 'a 'e spammer c'auseno strumiente automatece e computer pe' putè mannà 'e link lloro a nu cuofeno 'e site. Pe' tramente ca sti mmasciate se ponno levà, songo però nu scasso.\n\nCerti vote, spicialmente quanno s'azzeccano cullegamiente nuove ncopp'a na paggena, 'a wiki ve putesse fà vedé n'immaggene 'e testo culurato o sciummato ca te cercasse e te fà scrivere 'e parole ca verite. Pure si sta fatica è difficultosa pe' ne putè fà ll'automazione, permettesse ll'utente umane a ffà 'e fatiche suoje pe' tramente ca se fermassero tutt' 'e spammer e ati robbot.\n\n'A malasciorta stu fatto putesse dà n'inconveniente a ll'utente cu visione lemmetata o c'ausano 'o browser surtanto cu nu testo o parlanno. Int'a stu mumento nun ce tenimmo n'alternativa audio. Pe' piacere, cuntattate cu ll'[[Special:ListAdmins|amministrature d' o sito]] pe' ce putè aiutà 'e chiste annanz' 'e leggittime aziune voste.\n\nFacite click 'o buttòne \"arreto\" ncopp' 'o navigatore pe' ffà 'e turnà 'o cagnamiento d' 'a paggena.",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# 'A sintasse è comme segue:\n# * Ogneccosa 'a 'nu carattere \"#\" 'mponta a fine d' 'a linea è 'nu cummanno\n# * Ogne linea chiena è 'nu piezzo 'e regex 'o quale s'addà sulamente cunfruntà ch' 'e host int'a l'URL\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "Facite appiccià tutto comme fosse c'avite miso 'o CAPTCHA senza avé 'e ghì pe' bbìa d' 'o CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/nb.json b/extensions/ConfirmEdit/i18n/nb.json
index efd57c06..efd57c06 100644
--- a/extensions/ConfirmEdit/i18n/core/nb.json
+++ b/extensions/ConfirmEdit/i18n/nb.json
diff --git a/extensions/ConfirmEdit/i18n/nds-nl.json b/extensions/ConfirmEdit/i18n/nds-nl.json
new file mode 100644
index 00000000..feebfd31
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/nds-nl.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Servien"
+ ]
+ },
+ "captcha-edit": "Um disse zied te bewarken, mu'j eerst t antwoord op disse eenvoudige somme invullen ([[Special:Captcha/help|meer informasie]]):",
+ "captcha-desc": "Biedt CAPTCHA-technieken um bescharming te biejen tegen spam en t raojen van wachtwoorden",
+ "captcha-addurl": "In joew bewarking staon nieje uutgaonde verwiezingen.\nVul ter de bescharming van disse wiki tegen automatiese moekbiedragen t antwoord op de somme in, in t invoerveld dat hieronder steet, um joew bewarking op te slaon:<br />\n([[Special:Captcha/help|meer informasie]])",
+ "captcha-badlogin": "Vul ter de bescharming van disse wiki tegen t automaties kraken van wachtwoorden t antwoord op de somme in, in t invoerveld ([[Special:Captcha/help|meer informasie]]):",
+ "captcha-createaccount": "Vul ter bescharming van disse wiki tegen t automaties anmaken van gebrukers t antwoord op de somme in, in t invoerveld ([[Special:Captcha/help|meer informasie]]):",
+ "captcha-createaccount-fail": "Verkeerde of ontbrekende bevestigingskode.",
+ "captcha-create": "Je bin n nieje zied an t maken.\nVoer t antwoord van disse eenvoudige rekensomme in bie t invoervienster\n([[Special:Captcha/help|meer informasie]]).",
+ "captchahelp-title": "Lettertoetshulpe",
+ "captchahelp-cookies-needed": "Je mutten scheumbestaanden (cookies) an hebben staon um disse funksie te gebruken.",
+ "captchahelp-text": "Websteeën waor iederene an kan biedragen, zo as disse {{SITENAME}}-wiki, wörden vake misbruukt deurdat der ongewunste verwiezingen op ezet wörden. Op disse wiki kunnen zokken bewarkingen makkelik weerummezet wörden, mer t nimp wel tied in beslag die aanders gebruukt kan wörden.\n\nSoms, veural a'j nieje verwiezingen op n zied zetten, zie'j n aofbeelding mit ekleurden vervormde tekste en wördt joe evreugen um de tekste in te voeren. Umdat dit proses lastig te automatiseren is, kunnen haost allinnig meensen dit proses suksesvol uutvoeren, en wörden hiermee ongewunste wiezigingen en geautomatiseerden anvallen eweerd.\n\nSpietig genog levert disse bevestiging veur gebrukers mit n visuele beparking of n tekst- of spraakebaseerden webkieker problemen op.\nOp t moment is der gien alternatief mit geluud beschikbaor.\nVraag um hulpe van de [[Special:ListAdmins|websteebeheerders]] as dit proses joe in de weg steet n nuttige biedrage te leveren.\n\n(Klik op de 'weerumme'-knoppe in joew webkieker, um weer naor t tekstbewarkingscharm te gaon.)",
+ "captcha-addurl-whitelist": " #<!-- laot disse regel zo as t is --> <pre>\n# De syntaxis is as volgt:\n# * Alle tekste vanaof t karakter \"#\" tot t einde van de regels wörden ezien as opmarking\n# * Alle regels die niet leeg bin, wörden ezien as n reguliere uutdrokking die veur delen van de domein staon.\n #</pre> <!-- laot disse regel zo as t is -->"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/nds.json b/extensions/ConfirmEdit/i18n/nds.json
index 29ad8ca6..29ad8ca6 100644
--- a/extensions/ConfirmEdit/i18n/core/nds.json
+++ b/extensions/ConfirmEdit/i18n/nds.json
diff --git a/extensions/ConfirmEdit/i18n/ne.json b/extensions/ConfirmEdit/i18n/ne.json
new file mode 100644
index 00000000..dfd992da
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/ne.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "captcha-label": "क्याप्चा",
+ "captchahelp-title": "क्याप्चा सहायता"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/nl-informal.json b/extensions/ConfirmEdit/i18n/nl-informal.json
index eecb444c..eecb444c 100644
--- a/extensions/ConfirmEdit/i18n/core/nl-informal.json
+++ b/extensions/ConfirmEdit/i18n/nl-informal.json
diff --git a/extensions/ConfirmEdit/i18n/core/nl.json b/extensions/ConfirmEdit/i18n/nl.json
index b38a13fe..b38a13fe 100644
--- a/extensions/ConfirmEdit/i18n/core/nl.json
+++ b/extensions/ConfirmEdit/i18n/nl.json
diff --git a/extensions/ConfirmEdit/i18n/core/nn.json b/extensions/ConfirmEdit/i18n/nn.json
index 162d671a..162d671a 100644
--- a/extensions/ConfirmEdit/i18n/core/nn.json
+++ b/extensions/ConfirmEdit/i18n/nn.json
diff --git a/extensions/ConfirmEdit/i18n/core/oc.json b/extensions/ConfirmEdit/i18n/oc.json
index fd362df0..fd362df0 100644
--- a/extensions/ConfirmEdit/i18n/core/oc.json
+++ b/extensions/ConfirmEdit/i18n/oc.json
diff --git a/extensions/ConfirmEdit/i18n/core/or.json b/extensions/ConfirmEdit/i18n/or.json
index 1b6c5f87..1b6c5f87 100644
--- a/extensions/ConfirmEdit/i18n/core/or.json
+++ b/extensions/ConfirmEdit/i18n/or.json
diff --git a/extensions/ConfirmEdit/i18n/os.json b/extensions/ConfirmEdit/i18n/os.json
new file mode 100644
index 00000000..b08a5ff8
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/os.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amikeco"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/pa.json b/extensions/ConfirmEdit/i18n/pa.json
new file mode 100644
index 00000000..15232763
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/pa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Babanwalia"
+ ]
+ },
+ "captcha-label": "ਕੈਪਚਾ"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/pam.json b/extensions/ConfirmEdit/i18n/pam.json
index 43596200..43596200 100644
--- a/extensions/ConfirmEdit/i18n/core/pam.json
+++ b/extensions/ConfirmEdit/i18n/pam.json
diff --git a/extensions/ConfirmEdit/i18n/core/pdc.json b/extensions/ConfirmEdit/i18n/pdc.json
index e7c07379..e7c07379 100644
--- a/extensions/ConfirmEdit/i18n/core/pdc.json
+++ b/extensions/ConfirmEdit/i18n/pdc.json
diff --git a/extensions/ConfirmEdit/i18n/pfl.json b/extensions/ConfirmEdit/i18n/pfl.json
new file mode 100644
index 00000000..5aa51af7
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/pfl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/pl.json b/extensions/ConfirmEdit/i18n/pl.json
new file mode 100644
index 00000000..0ada4f1f
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/pl.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "BeginaFelicysym",
+ "Derbeth",
+ "Leinad",
+ "Matma Rex",
+ "Sp5uhe",
+ "WTM",
+ "Alan ffm"
+ ]
+ },
+ "captcha-edit": "Możesz edytować tę stronę, jednak najpierw musisz rozwiązać poniższe proste działanie matematyczne i wpisać wynik do pola tekstowego ([[Special:Captcha/help|pomoc]]):",
+ "captcha-desc": "Dodaje CAPTCHA – zabezpieczenie przed spamującymi automatami oraz odgadywaniem haseł",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Twoje zmiany zawierają nowe linki zewnętrzne.\nZe względu na ochronę przed zautomatyzowanym spamem prosimy o wykonanie prostego działania matematycznego i wpisanie wyniku w pole obok, zanim twoja edycja zostanie zapisana ([[Special:Captcha/help|więcej informacji]]):",
+ "captcha-badlogin": "Zabezpieczenie przed automatycznym łamaniem hasełm, wpisz w pole poniżej wynik prostego działania matematycznego ([[Special:Captcha/help|pomoc]]):",
+ "captcha-createaccount": "Zabezpieczenie przed automatycznym tworzeniem konta - wpisz w pole poniżej wynik prostego działania matematycznego ([[Special:Captcha/help|pomoc]]):",
+ "captcha-createaccount-fail": "Nieprawidłowy kod lub brak kodu potwierdzającego.",
+ "captcha-create": "Aby utworzyć stronę wykonaj proste działanie i wpisz wynik w pole tekstowe ([[Special:Captcha/help|pomoc]]):",
+ "captcha-sendemail": "Zabezpieczenie przed automatycznym spamem, wpisz w pole poniżej wynik prostego dodawania ([[Special:Captcha/help|więcej informacji]]):",
+ "captcha-sendemail-fail": "Nieprawidłowy kod lub brak kodu potwierdzającego.",
+ "captcha-disabledinapi": "Ta czynność wymaga potwierdzenia capcha i z tego względu nie może być przeprowadzona z użyciem API.",
+ "captchahelp-title": "Pomoc dla ochrony antyspamowej",
+ "captchahelp-cookies-needed": "Musisz mieć włączone w przeglądarce cookies (ciasteczka), aby ta opcja działała.",
+ "captchahelp-text": "Strony internetowe akceptujące edycje dokonywane przez każdego, tak jak ta wiki, są często atakowane przez spamerów, którzy używają automatycznych narzędzi, aby dodawać linki prowadzące do ich stron.\nChociaż te linki mogą zostać usunięte, jest to uciążliwe.\n\nCzasami, zwłaszcza przy dodawaniu nowych linków do strony albo przy rejestracji, wiki może pokazać obrazek z kolorowym lub zniekształconym tekstem i poprosić Cię o przepisanie zamieszczonego na nim wyrazu.\nPonieważ są to zadania trudne do zautomatyzowania, takie zabezpieczenia umożliwia ludziom dokonywania edycji, jednocześnie skutecznie powstrzymując większość spamerów i inne automatyczne ataki.\n\nNiestety, może być to niewygodne dla użytkowników z wadą wzroku lub używających przeglądarek tekstowych lub głosowych.\nObecnie nie mamy alternatywnego rozwiązania audio.\nSkontaktuj się z [[Special:ListAdmins|administratorami strony]] by uzyskać pomoc, jeśli nie możesz z tego powodu dokonywać uprawnionych edycji.\n\nWciśnij przycisk „wstecz” w przeglądarce by powrócić do edycji strony.",
+ "captcha-addurl-whitelist": " #<!-- nie modyfikuj tej linii --> <pre>\n# Składnia jest następująca:\n# * Linie zaczynające się od znaku „#” są komentarzami\n# * Każda linia, która nie jest pusta, jest wyrażeniem regularnym, które ma pasować do adresu serwera (fragmentu URL)\n #</pre> <!-- nie modyfikuj tej linii -->",
+ "right-skipcaptcha": "Dostęp do czynności zabezpieczonych pytaniem o treść obrazka lub rozwiązanie zadania, z pominięciem zabezpieczenia"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/pms.json b/extensions/ConfirmEdit/i18n/pms.json
index 2098fa0b..2098fa0b 100644
--- a/extensions/ConfirmEdit/i18n/core/pms.json
+++ b/extensions/ConfirmEdit/i18n/pms.json
diff --git a/extensions/ConfirmEdit/i18n/core/pnb.json b/extensions/ConfirmEdit/i18n/pnb.json
index 498dfbcc..498dfbcc 100644
--- a/extensions/ConfirmEdit/i18n/core/pnb.json
+++ b/extensions/ConfirmEdit/i18n/pnb.json
diff --git a/extensions/ConfirmEdit/i18n/ps.json b/extensions/ConfirmEdit/i18n/ps.json
new file mode 100644
index 00000000..6805572a
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/ps.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "captcha-label": "کپچا",
+ "captcha-create": "ددې لپاره چې نوی ليکنه ترسره کړی، لطفاً د همدغه ساده شمېرو ځواب په ورکړ شوي چوکاټ کې وليکی ([[Special:Captcha/help|نور مالومات]]):",
+ "captchahelp-title": "CAPTCHA لارښود",
+ "captchahelp-cookies-needed": "ددې کړنې د ترسره کېدلو لپاره تاسو ته پکار ده چې د خپل کتنمل (browser) کوکيز (cookies) چارن کړی.",
+ "captchahelp-text": "هغه وېبځايونه چې د ټولو وگړو پر لور د ليکنو د ليکلو لپاره پرانيستي دي، لکه همدا ويکي، ډېر ځل د سپمرگرو لخوا چې اتوماتيک اوزارونه د خپلو د تړنو او وېبپاڼو د خبرتياو په خپرولو کې کاروي، په ناوړه توگه کارېږي. تر هغه وخت پورې چې همدا سپمونه او هماغه تړنې راموندل کېږي او ليرې کېږي، نو تر هغه وخته پورې همدا سپمونه ډېر سرخوږی جوړوي.\n\nپه ځانگړي توگه په يوه مخ کې د يوه وېبځي د تړنې د ورگډولو په وخت کې به ويکي يو ډول گډوډ رنگين متن ښکاره کړي او له کارن نه به د هماغه متن د ټاپلو غوښتنه شوې وي. \n\nڅرنگه چې جوته ده چې اصلي وگړي کولی شي چې په دې کار کې بريالي شي، خو دې ته ناورته سپامگر ماشينونه او روبوټونه دا ډول کار په خپلکاره توگه نه شي ترسره کولی او پدې توگه د سپامگرو او روبوټونو د غورځنگ مخ نيول کېږي.\n\nبدبختانه چې دا کار د کارنانو لپاره ستونزه جوړولای شي او هغه څوک چې د سترگو نظر يې کمزوری دی او يا هم د متن پر بنسټ او يا هم د غږ پر بنسټ جوړ شوي کتنملونه کاروي نه شي کولی په آسانۍ سره خپلې سمونې او خپرونې ترسره کړي.\n\nدم مهال موږ د داسې متنونو غږيز انډول نه لرو.\n\nکه چېرته دا کار تاسې له سمونو او ليکنو خپرولو پاتې راولي نو لطفاً د مرستې لپاره د [[Special:ListAdmins|پازوالانو]] سره اړيکه ټينگه کړۍ.\n\nپه خپل کتنمل کې د 'شاکېدلو' تڼۍ کېښکاږۍ چې بېرته پخواني مخ ته وگرځۍ."
+}
diff --git a/extensions/ConfirmEdit/i18n/pt-br.json b/extensions/ConfirmEdit/i18n/pt-br.json
new file mode 100644
index 00000000..cfd23076
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/pt-br.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eduardo.mps",
+ "Giro720",
+ "Helder.wiki",
+ "Jesielt",
+ "555",
+ "Dianakc",
+ "He7d3r"
+ ]
+ },
+ "captcha-edit": "Para editar esta página será necessário que você resolva a simples soma abaixo e entre com a resposta no respectivo campo ([[Special:Captcha/help|o que é isto?]])",
+ "captcha-desc": "Fornece técnicas captcha para proteção contra spam e tentativas de obtenção de senhas",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Sua edição inclui novos links externos.\nComo prevenção contra sistemas automatizados que inserem spam, será necessário resolver a simples soma abaixo e inserir sua resposta no respectivo campo ([[Special:Captcha/help|detalhes]])",
+ "captcha-badlogin": "Como prevenção contra sistemas automatizados de pesquisa e descoberta de senhas, será necessário resolver a simples soma abaixo e inserir sua resposta no respectivo campo ([[Special:Captcha/help|detalhes]])",
+ "captcha-createaccount": "Para proteger a wiki contra sistemas automatizados de criação de contas, solicitamos que resolva a soma simples apresentada abaixo e introduza a resposta no respectivo campo ([[Special:Captcha/help|mais informações]]):",
+ "captcha-createaccount-fail": "Código CAPTCHA incorreto ou não preenchido.",
+ "captcha-create": "Para criar a página, por favor resolva a simples soma abaixo e entre com a resposta no respectivo campo ([[Special:Captcha/help|o que é isto?]])",
+ "captcha-sendemail": "Como proteção ao wiki contra spam automatizado, será necessário resolver a simples soma abaixo e inserir sua resposta no respectivo campo ([[Special:Captcha/help|detalhes]]):",
+ "captcha-sendemail-fail": "Código CAPTCHA incorreto ou não preenchido.",
+ "captcha-disabledinapi": "Esta operação necessita de captcha, por isso não pode ser realizada através da API.",
+ "captchahelp-title": "Ajuda com o Captcha",
+ "captchahelp-cookies-needed": "Você precisa ter cookies habilitados em seu navegador para que isso possa funcionar",
+ "captchahelp-text": "Sites abertos a inserções públicas, como é o caso desta wiki, são vulneráveis a spammers que utilizam ferramentas automatizadas para inserir seus links em diversos locais.\nRemover tais ligações posteriormente pode ser um incômodo significativo.\n\nAlgumas vezes, especialmente ao adicionar novas ligações externas a uma página, o wiki exibirá uma imagem com um texto colorido ou distorcido e pedirá que você introduza as palavras exibidas.\nUma vez que essa é uma tarefa um tanto difícil de ser automatizada, ela possibilita que a maioria dos humanos faça as suas inserções ao mesmo tempo que inibe as que forem feitas por spammers e mecanismos automatizados.\n\nInfelizmente, isso pode ser um inconveniente para usuários com limitações visuais ou que naveguem através de mecanismos baseados em texto ou baseados em voz.\nNo momento, não está disponível uma alternativa em áudio.\nPor favor, contate os [[Special:ListAdmins|administradores do sítio]] em casos que seja necessária a assistência de alguém para que você possa fazer as suas inserções legítimas.\n\nPressione o botão 'voltar' de seu navegador para retornar à página de edição.",
+ "captcha-addurl-whitelist": " #<!-- deixe este linha exatamente como está --> <pre>\n# A sintaxe é a que se segue:\n# * Tudo desde o caractere \"#\" até ao fim da linha é um comentário\n# * Qualquer linha não vazia é um fragmento de regex que irá apenas verificar o servidor dentro das URLs\n #</pre> <!-- deixe este linha exatamente como está -->",
+ "right-skipcaptcha": "Executar ações disparadoras de captcha sem ter que passar pelo captcha"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/pt.json b/extensions/ConfirmEdit/i18n/pt.json
index 4563f617..4563f617 100644
--- a/extensions/ConfirmEdit/i18n/core/pt.json
+++ b/extensions/ConfirmEdit/i18n/pt.json
diff --git a/extensions/ConfirmEdit/i18n/qqq.json b/extensions/ConfirmEdit/i18n/qqq.json
new file mode 100644
index 00000000..054b9b82
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/qqq.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aotake",
+ "Hamilton Abreu",
+ "MF-Warburg",
+ "Meithal",
+ "Meno25",
+ "Purodha",
+ "Shirayuki",
+ "Siebrand",
+ "The Evil IP address",
+ "Toliño",
+ "Umherirrender"
+ ]
+ },
+ "captcha-edit": "This message will be shown when editing if the wiki requires solving a captcha for editing.\n{{Related|ConfirmEdit-edit}}",
+ "captcha-desc": "{{desc|name=Confirm Edit|url=https://www.mediawiki.org/wiki/Extension:ConfirmEdit}}",
+ "captcha-label": "Label field for input field shown in forms",
+ "captcha-addurl": "The explanation of CAPTCHA shown to users trying to add new external links.\n{{Related|ConfirmEdit-addurl}}",
+ "captcha-badlogin": "The explanation of CAPTCHA shown to users failed three times to type in correct password.\n{{Related|ConfirmEdit-badlogin}}",
+ "captcha-createaccount": "The explanation of CAPTCHA shown to users trying to create a new account.\n{{Related|ConfirmEdit-createaccount}}",
+ "captcha-createaccount-fail": "Used as failure message.\n{{Related|ConfirmEdit-createaccount-fail}}",
+ "captcha-create": "This message will be shown when creating a page if the wiki requires solving a captcha for that.\n{{Related|ConfirmEdit-create}}",
+ "captcha-sendemail": "Used as footer text.\n{{Related|ConfirmEdit-sendemail}}",
+ "captcha-sendemail-fail": "Used as failure message.\n\nSee also:\n* {{msg-mw|Captcha-createaccount-fail}}",
+ "captcha-disabledinapi": "Used as error message when in the API mode.",
+ "captchahelp-title": "The page title of [[Special:Captcha/help]]",
+ "captchahelp-cookies-needed": "The page title for this message is {{msg-mw|Captchahelp-title}}.\n\nThis message follows the following help message:\n* {{msg-mw|Captchahelp-text}}.",
+ "captchahelp-text": "This is the help text shown on [[Special:Captcha/help]].",
+ "captcha-addurl-whitelist": "See also: [[MediaWiki:Spam-blacklist]] and [[MediaWiki:Spam-whitelist]].\n\nLeave all the wiki markup, including the spaces, as is.\nYou can translate the text, including 'Leave this line exactly as it is'.\nThe first line of this messages has one (1) leading space.\n\n\"regex\" stands for \"regular expression\".",
+ "right-skipcaptcha": "{{doc-right|skipcaptcha}}"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/qu.json b/extensions/ConfirmEdit/i18n/qu.json
index 6a82ba37..6a82ba37 100644
--- a/extensions/ConfirmEdit/i18n/core/qu.json
+++ b/extensions/ConfirmEdit/i18n/qu.json
diff --git a/extensions/ConfirmEdit/i18n/questy/zh-hans.json b/extensions/ConfirmEdit/i18n/questy/zh-hans.json
deleted file mode 100644
index 65fe6bc2..00000000
--- a/extensions/ConfirmEdit/i18n/questy/zh-hans.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "@metadata": {
- "authors": [
- "Cwek",
- "Fantasticfears",
- "Mywood"
- ]
- },
- "questycaptcha-desc": "用于确认编辑的问题验证码生成器",
- "questycaptcha-addurl": "你的编辑包含新的外部链接。为保护本wiki免受自动垃圾程序的破坏,我们恳请你回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
- "questycaptcha-badlogin": "为保护本wiki免受自动密码破解的破坏,我们恳请你回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
- "questycaptcha-createaccount": "为保护本wiki免受自动账户创建的破坏,我们恳请你回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
- "questycaptcha-create": "要创建页面,请回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
- "questycaptcha-edit": "要编辑该页面,请回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
- "questycaptcha-sendemail": "为保护本wiki免受自动垃圾程序的破坏,我们恳请你回答下面显示的问题([[Special:Captcha/help|更多信息]]):",
- "questycaptchahelp-text": "接受公众贡献者的网站,比如本wiki,经常受到使用自动工具添加垃圾网站链接的垃圾制造者的破坏。尽管这些链接可以被删除,它们仍然极其麻烦。\n\n有时,特别是给页面添加新的网络链接时,本wiki可能需要你回答问题。由于这是一项难以用自动工具完成的任务,它可以允许在大多数真人做出贡献的同时,阻止大多数垃圾制造者和其他自动攻击者。\n\n如果这项措施意外地阻止你进行正常的贡献,请与[[Special:ListAdmins|网站管理员]]联系获取帮助。\n\n点击浏览器的“后退”按钮返回页面编辑器。"
-}
diff --git a/extensions/ConfirmEdit/i18n/core/ro.json b/extensions/ConfirmEdit/i18n/ro.json
index ab415109..ab415109 100644
--- a/extensions/ConfirmEdit/i18n/core/ro.json
+++ b/extensions/ConfirmEdit/i18n/ro.json
diff --git a/extensions/ConfirmEdit/i18n/roa-tara.json b/extensions/ConfirmEdit/i18n/roa-tara.json
new file mode 100644
index 00000000..751b6de8
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/roa-tara.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras",
+ "Reder"
+ ]
+ },
+ "captcha-edit": "Pe cangià sta pàgene, pe piacere fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
+ "captcha-desc": "Dèje le tecniche d'u CAPTCHA pe proteggere condre a 'u spam e 'u futtimende d'a passuord",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "'U cangiamende tune 'nglude de le collegaminde de fore.\nPe aiutà a proteggere condre a 'u spam automateche, pe piacere respunne a 'a domande ca combare sotte jndr'à sckatole ([[Special:Captcha/help|cchiù 'mbormaziune]]):",
+ "captcha-badlogin": "Pe proteggere sta uicchi da le futteminde de passuord automateche, nuje te cercame gendilmende de fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
+ "captcha-createaccount": "Pe proteggere sta uicchi da 'a ccrejazione automateche de le cunde, nuje te cercame gendilmende de fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
+ "captcha-createaccount-fail": "Codece de conferme CAPTCHA non corrette o mangande.",
+ "captcha-create": "Pe ccrejà sta pàgene, pe piacere fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
+ "captcha-sendemail": "Pe proteggere sta uicchi da 'a munnezze automateche, nuje te cercame gendilmende de fa sta somma facile facile aqquà sotte e mitte 'a resposte jndr'à sckatele ([[Special:Captcha/help|maggiore 'mbormaziune]]):",
+ "captcha-sendemail-fail": "Codece de conferme CAPTCHA non corrette o mangande.",
+ "captcha-disabledinapi": "St'azione ave abbesogne de 'nu captcha, accussì non g'è possibbele eseguirle cu le API.",
+ "captchahelp-title": "Aijute pu captcha",
+ "captchahelp-cookies-needed": "Tu è abbesogne de avè le cookie abbilitate jndr'à 'u browser tune pe sta fatìe.",
+ "captchahelp-text": "Le site web ca accettane messàgge da 'u pubbleche, le piace sta uicchi, assaije vote purcé abbusane de spam a ce ause struminde automatece pe mannà le lore collegaminde a 'nu sacche de site.\nMendre ca ste collegaminde de spam se ponne luà, lore comungue sò 'nu sckassamende de palle.\n\nCerte vote, specialmende quanne aggiunge collegaminde nuève sus a a'na pàgene, 'a uicchi te pò fà vedè 'n'immaggine de teste colorate o sciummate e te cerche de scrivere le parole ca vedite.\nQuiste jè 'nu combite difficile da automatizzà, ce sò le umane a scettà merde invece de le attacche robbot riuscime a bloccà cchiù facilmende.\n\nSfortunatamende stu fatte pò da inconveniende a le utinde cu visiune limitate o ca ausane le browser de sole teste o ca parlane. Jndr'à stu mumende non ge tenime 'n'alternative audie.\nPe piacere condatte le [[Special:ListAdmins|amministrature d'u site]] pe assistenze ce quiste jè condre a le leggittime aziune tune.\n\nCazze 'u buttonne \"rrete\" (back) sus a 'u browser tune pe turnà a 'u cangiamende d'a pàgene.",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# 'A sindasse jè a cumme segue:\n# * Ogneccose da 'nu carattere \"#\" 'mbonde a fine d'a linèe jè 'nu commende\n# * Ogne linèe chiene jè 'nu frammende de regex 'u quale addà sulamende combrondarse cu le host jndr'à l'URL\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "Comblete le aziune CAPTCHA senze ca a scè ausanne 'u CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/ru.json b/extensions/ConfirmEdit/i18n/ru.json
index a963ade5..a963ade5 100644
--- a/extensions/ConfirmEdit/i18n/core/ru.json
+++ b/extensions/ConfirmEdit/i18n/ru.json
diff --git a/extensions/ConfirmEdit/i18n/core/rue.json b/extensions/ConfirmEdit/i18n/rue.json
index 8aadc191..8aadc191 100644
--- a/extensions/ConfirmEdit/i18n/core/rue.json
+++ b/extensions/ConfirmEdit/i18n/rue.json
diff --git a/extensions/ConfirmEdit/i18n/core/sa.json b/extensions/ConfirmEdit/i18n/sa.json
index 765a380c..765a380c 100644
--- a/extensions/ConfirmEdit/i18n/core/sa.json
+++ b/extensions/ConfirmEdit/i18n/sa.json
diff --git a/extensions/ConfirmEdit/i18n/sah.json b/extensions/ConfirmEdit/i18n/sah.json
new file mode 100644
index 00000000..3d57cf46
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/sah.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "HalanTul"
+ ]
+ },
+ "captcha-edit": "Сирэйи уларытыаххын баҕардаххына, манна баар примеры суоттаа уонна эппиэтин аналлаах сиргэ суруй ([[Special:Captcha/help|сиһилии]]):",
+ "captcha-desc": "CAPTCHA көмөтүнэн спаамтан уонна киирии тылы уорууттан көмүскэли хааччыйар",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Тас саайка ыйынньык туруорбуккун; \nспаамтан көмүскэнэр соруктаах суолу толор - ойууга баар буукубалары хатылаа: <br />\n([[Special:Captcha/help|Сиһилии]])",
+ "captcha-badlogin": "Киирии тылы аптамаат алдьаппатын туһугар оҥоһуллубут харыстыыр дьайыыны толор, манна баар примеры суоттаа уонна эппиэтин анал сиргэ суруй ([[Special:Captcha/help|сиһилии]]):",
+ "captcha-createaccount": "Бэлиэтэнэргэр аптамаатынан алдьатыыттан (спаамтан) харыстыыр соруктаах дьайыыны оҥор, ойууга көстөр буукубалары анал сиргэ киллэр:<br />\n([[Special:Captcha/help|Сиһилии]])",
+ "captcha-createaccount-fail": "Бигэргэтии куода суох эбэтэр атын.",
+ "captcha-create": "Сирэйи оҥорорго бу примеры суоттаа ([[Special:Captcha/help|сиһилии]]):",
+ "captcha-sendemail": "Аптамаат спаамтан көмүскэнэр туһугар, бука диэн, бу дьайыыны суоттаа уонна эппиэтин суруй ([[Special:Captcha/help|сиһилии]]):",
+ "captcha-sendemail-fail": "Бигэргэтии куода суох эбэтэр атын.",
+ "captcha-disabledinapi": "Бу дьайыы CAPTCHA нөҥүө эрэ оҥоһуллар, онон API нөҥүө толоруллубат.",
+ "captchahelp-title": "Captcha көмөтө",
+ "captchahelp-cookies-needed": "Бу дьайыы үлэлиирин курдук браузергар куукины холбоо.",
+ "captchahelp-text": "Биһиги саайпыт курдук иһинээҕитин уларытары көҥүллүүр саайтарга сороҕор спам ыытар программалар аптамаатынан бэйэлэрин ыйынньыктарын угаллар.\nОннук аптамаатынан эбиллибит ыйынньыктары суох оҥорор кыах баар эрээри, ол биллэн турар син биир мэһэйдэри үөскэтэр.\n\nОл иһин сороҕор, холобур саҥа ыйынньыгы эбэргэ, программа өҥнөөх эбэтэр хаанньары барбыт тиэкистээх ойууну көрдөрөн, ол тиэкиһи анал түннүккэ хатылатыан сөп.\nМаннык көрдөһүүнү аптамаат кыайан толорбот, оттон киһи чэпчэкитик толорор.\n\nОл гынан баран маннык көмүскэл сорох дьоҥҥо (көрбөт эбэтэр ааҕар браузердары туһанар дьоҥҥо) моһоллору үөскэтиэн сөп.\nБилигин бу моһолу суох оҥорор кыах суох.\nОннук мэһэй таҕыстаҕына бука диэн баалама, биир эмит [[Special:ListAdmins|дьаһабылга (администраатарга)]] этээр, көмөлөһүө.\n\nКөннөрүүгэ төттөрү тиийэргэ браузерыҥ «Назад» тимэҕин баттаа.",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Синтаксиһын быһаарыыта:\n# * \"#\" бэлиэттэн строка бүтүөр дылы барыта хос быһаарыы курдук ааҕыллар\n# * Хас биирдии кураанах буолбатах строка URL сорҕотун курдук ааҕыллар\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "CAPTCHA-бэрэбиэркэни ааһыахтаах дьайыылары CAPTCHA-та суох толоруу"
+}
diff --git a/extensions/ConfirmEdit/i18n/scn.json b/extensions/ConfirmEdit/i18n/scn.json
new file mode 100644
index 00000000..a3e95a35
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/scn.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Melos",
+ "Santu",
+ "Gmelfi"
+ ]
+ },
+ "captcha-edit": "Pi mudificaru la pàggina è nicissàriu arisòrviri lu sèmprici càlculu prisintati di sècutu e nziriri lu risurtatu nnâ casedda\n([[Special:Captcha/help|chiossai nfurmazzioni]]):",
+ "captcha-desc": "Sèmprici mplimintazzioni di na Captcha",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "La mudìfica addumannata junci novi lijami di fora a la pàggina; pi pricauzzioni contr'a lu nzirimentu autumàticu di spam, è nicissarii arisòrviri lu sèmprici càlculu prisintatu di sècutu e nziriri lu risurtatu nnâ casedda ([[Special:Captcha/help|chiossai nfurmazzioni]]):",
+ "captcha-badlogin": "Pi pricauzzioni contr'a li tintativi di furzatura autumàtica dâ password, è nicussàriu arisòrviri lu sèmprici càlculu prusuntatu di sècutu e nziriri lu risurtatu nnâ casedda ([[Special:Captcha/help|chiossai nfurmazzioni]]):",
+ "captcha-createaccount": "Pi pricauzzioni contr'a li tintativi di criazzioni autumàtica di l'account, pi riggistràrisi è nicissàriu arisòrviri lu sèmprici càlculu prisintatu di sècutu e nziriri lu risurtatu nnâ casedda ([[Special:Captcha/help|chiossai nfurmazzioni]]):",
+ "captcha-createaccount-fail": "Còdici di virìfica sbagghiatu o ca manca.",
+ "captcha-create": "Pi criari la pàggina è nicissàriu arisòrviri lu sèmprici càlculu prisintatu di sècutu e nziriri lu risurtatu nnâ casedda:<br />\n([[Special:Captcha/help|chiossai nfurmazzioni]]):",
+ "captchahelp-title": "Chi cos'è lu captcha?",
+ "captchahelp-cookies-needed": "È nicissàriu abbilitari li cookie supra lu browser pi jiri avanti",
+ "captchahelp-text": "Ô spissu accàpita ca li siti Web ca accunzèntunu missaggi pùbbrichi, comu a stu wiki, sù pigghiati di mira di spammer ca ùsanu strumenti autumàtichi pi nziriri lijami pubbricitari ammeri assai nùmmira di siti. Macari ca li lijami ca non sunnu disiati si ponnu livari, sta cosa è, nti ogni casu, na granni camurrìa.\n\nNni tanti casi, p'asèmpiu quannu si voli jùnciri novi lijami Web nti na pàggina, lu software wiki pò ammustrari na mmàggini cu nu testu nicu acculuratu e/o difurmatu addumannannu di scrivìrilu nni na finistredda. Siccomu si tratta di na cosa difficili di fari pi nu computer, stu miccanìsimu pirmetti a (quasi tutti) l'utenti riali di cumplitari lu nzirimentu disiatu, mpidennu la trasuta a li chiossai di li spammer e di l'àutri attacchi autumatizzati.\n\nPi sfurtuna, stu strataggemma pò mèttiri 'n difficultati a l'utenti ca hannu prubremi di vista o a chiddi ca ùsanu browser testuali o basati supr'a la sìntesi vucali. Purtroppu aoggi non ci sunnu àutri miccanìsimi abbasati supr'a missaggi sunori; si sti pruciduri mpidìsciunu lu nzirimentu di nfurmazzioni ca si pènzanu ca sù liggìttimi, siti prigati di cuntattari [[Special:ListAdmins|l'amministraturi dû situ]] e addumannàrini l'assistenza.\n\nFari clic supra ô buttuni 'back' dû browser pi turnari a la pàggina di mudìfica.",
+ "captcha-addurl-whitelist": " #<!-- non mudificari 'n nuddu modu sta riga --> <pre>\n# La sintassi è chista:\n# * Tuttu chiddu ca veni doppu nu caràtttrt \"#\" è nu cummentu, nzinu a la fini di la riga\n# * Tutti li righi npn vacanti sunnu frammenti di sprissioni riulari ca s'àpplicanu a lu sulu nomu di l'host ntê URL\n #</pre> <!-- non mudificari 'n nuddu modu sta riga -->",
+ "right-skipcaptcha": "Fà l'azzioni ca attivàssiru lu captcha senza passari pi lu captcha"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/sco.json b/extensions/ConfirmEdit/i18n/sco.json
index 3bcacfd1..3bcacfd1 100644
--- a/extensions/ConfirmEdit/i18n/core/sco.json
+++ b/extensions/ConfirmEdit/i18n/sco.json
diff --git a/extensions/ConfirmEdit/i18n/core/sh.json b/extensions/ConfirmEdit/i18n/sh.json
index 5f7b75fa..5f7b75fa 100644
--- a/extensions/ConfirmEdit/i18n/core/sh.json
+++ b/extensions/ConfirmEdit/i18n/sh.json
diff --git a/extensions/ConfirmEdit/i18n/shn.json b/extensions/ConfirmEdit/i18n/shn.json
new file mode 100644
index 00000000..2f0ed01a
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/shn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saimawnkham"
+ ]
+ },
+ "captcha-label": "လိၵ်ႈၼႄႉၼွၼ်း"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/si.json b/extensions/ConfirmEdit/i18n/si.json
index 0c1aa019..0c1aa019 100644
--- a/extensions/ConfirmEdit/i18n/core/si.json
+++ b/extensions/ConfirmEdit/i18n/si.json
diff --git a/extensions/ConfirmEdit/i18n/core/sk.json b/extensions/ConfirmEdit/i18n/sk.json
index 9fd10a19..9fd10a19 100644
--- a/extensions/ConfirmEdit/i18n/core/sk.json
+++ b/extensions/ConfirmEdit/i18n/sk.json
diff --git a/extensions/ConfirmEdit/i18n/core/sl.json b/extensions/ConfirmEdit/i18n/sl.json
index 0411a41d..0411a41d 100644
--- a/extensions/ConfirmEdit/i18n/core/sl.json
+++ b/extensions/ConfirmEdit/i18n/sl.json
diff --git a/extensions/ConfirmEdit/i18n/core/sq.json b/extensions/ConfirmEdit/i18n/sq.json
index 56dc6b37..56dc6b37 100644
--- a/extensions/ConfirmEdit/i18n/core/sq.json
+++ b/extensions/ConfirmEdit/i18n/sq.json
diff --git a/extensions/ConfirmEdit/i18n/core/sr-ec.json b/extensions/ConfirmEdit/i18n/sr-ec.json
index 4bfc5594..4bfc5594 100644
--- a/extensions/ConfirmEdit/i18n/core/sr-ec.json
+++ b/extensions/ConfirmEdit/i18n/sr-ec.json
diff --git a/extensions/ConfirmEdit/i18n/core/sr-el.json b/extensions/ConfirmEdit/i18n/sr-el.json
index 742516fa..742516fa 100644
--- a/extensions/ConfirmEdit/i18n/core/sr-el.json
+++ b/extensions/ConfirmEdit/i18n/sr-el.json
diff --git a/extensions/ConfirmEdit/i18n/core/stq.json b/extensions/ConfirmEdit/i18n/stq.json
index cd33f9e7..cd33f9e7 100644
--- a/extensions/ConfirmEdit/i18n/core/stq.json
+++ b/extensions/ConfirmEdit/i18n/stq.json
diff --git a/extensions/ConfirmEdit/i18n/core/su.json b/extensions/ConfirmEdit/i18n/su.json
index 08ebe767..08ebe767 100644
--- a/extensions/ConfirmEdit/i18n/core/su.json
+++ b/extensions/ConfirmEdit/i18n/su.json
diff --git a/extensions/ConfirmEdit/i18n/sv.json b/extensions/ConfirmEdit/i18n/sv.json
new file mode 100644
index 00000000..a7f78960
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/sv.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ainali",
+ "Boivie",
+ "Lejonel",
+ "M.M.S.",
+ "MagnusA",
+ "Martinwiss",
+ "Per",
+ "Rotsee",
+ "WikiPhoenix",
+ "Lokal Profil",
+ "Jopparn"
+ ]
+ },
+ "captcha-edit": "För att redigera den här sidan måste du först lösa följande enkla räkneuppgift och skriva svaret i rutan ([[Special:Captcha/help|mer information]]):",
+ "captcha-desc": "Tillhandahåller CAPTCHA-metoder för att skydda mot spam och lösenordsgissning",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Din ändring innebär nya externa länkar i texten. För att skydda wikin mot automatisk spam måste du lösa följande enkla räkneuppgift och ange svaret i rutan ([[Special:Captcha/help|mer information]]):",
+ "captcha-badlogin": "För att skydda wikin mot försök att knäcka lösenord på automatisk väg, måste du lösa följande enkla räkneuppgift och ange svaret i rutan ([[Special:Captcha/help|mer information]]):",
+ "captcha-createaccount": "För att skydda wikin mot automatiskt skapade användarkonton, måste du lösa följande enkla räkneuppgift och ange svaret i rutan ([[Special:Captcha/help|mer information]]):",
+ "captcha-createaccount-fail": "Felaktig eller saknad CAPTCHA.",
+ "captcha-create": "För att skapa den här sidan måste du lösa följande enkla räkneuppgift och ange svaret i rutan ([[Special:Captcha/help|mer information]]):",
+ "captcha-sendemail": "För att skydda wikin mot automatiserad spam, ber vi dig att lösa den enkla räkneuppgiften, och skriva in svaret i rutan ([[Special:Captcha/help|mer information]]):",
+ "captcha-sendemail-fail": "Felaktig eller saknad CAPTCHA.",
+ "captcha-disabledinapi": "Denna åtgärd kräver en CAPTCHA, så den kan inte utföras genom API:et.",
+ "captchahelp-title": "CAPTCHA-hjälp",
+ "captchahelp-cookies-needed": "Du måste ha kakor aktiverade i din webbläsare för att det här ska fungera.",
+ "captchahelp-text": "Webbplatser som tillåter inlägg från allmänheten, som den här wikin gör, missbrukas ofta av spammare som använder automatiserade verktyg för att lägga till länkar på många webbplatser.\nÄven om dessa spamlänkar kan tas bort är de till stort besvär.\n\nIbland, speciellt då du lägger till nya externa länkar på en sida, visar wikin en bild på en färgad eller förvriden text och ber dig skriva in orden som visas.\nEftersom detta är en uppgiften som är svår att automatisera, låter den de flesta riktiga människor göra sina redigeringar medan spammare och andra robotattacker stoppas.\n\nTyvärr kan det här orsaka problem för användare med nedsatt syn eller som använder text- eller talbaserade webbläsare.\nFör nävarande finns inga ljudbaserade alternativ tillgängliga.\nVänligen kontakta [[Special:ListAdmins|webbplatsens administratörer]] för hjälp om det här hindrar dig från att göra legitima ändringar.\n\nTryck på bakåtknappen i din webbläsare för att gå tillbaks till sidredigeringsläget.",
+ "captcha-addurl-whitelist": " #<!-- lämna denna rad precis som den är --> <pre>\n# Syntaxen är följande:\n# * Allting från ett \"#\"-tecken till slutet av en rad är en kommentar\n# * Varje icke-tom rad är ett fragment av ett reguljärt uttryck som endast matchar domänen i en URL\n #</pre> <!-- lämna denna rad precis som den är -->",
+ "right-skipcaptcha": "Utföra CAPTCHA-utlösande handlingar utan att behöva gå igenom CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/sw.json b/extensions/ConfirmEdit/i18n/sw.json
index 343c2d9e..343c2d9e 100644
--- a/extensions/ConfirmEdit/i18n/core/sw.json
+++ b/extensions/ConfirmEdit/i18n/sw.json
diff --git a/extensions/ConfirmEdit/i18n/szl.json b/extensions/ConfirmEdit/i18n/szl.json
new file mode 100644
index 00000000..6ec0983b
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/szl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Krol111"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/ta.json b/extensions/ConfirmEdit/i18n/ta.json
index 4b94578a..4b94578a 100644
--- a/extensions/ConfirmEdit/i18n/core/ta.json
+++ b/extensions/ConfirmEdit/i18n/ta.json
diff --git a/extensions/ConfirmEdit/i18n/tcy.json b/extensions/ConfirmEdit/i18n/tcy.json
new file mode 100644
index 00000000..da47c917
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/tcy.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "VASANTH S.N."
+ ]
+ },
+ "captcha-label": "ಕ್ಯಾಪ್ಚಾ"
+}
diff --git a/extensions/ConfirmEdit/i18n/te.json b/extensions/ConfirmEdit/i18n/te.json
new file mode 100644
index 00000000..10990c36
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/te.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chaduvari",
+ "Kiranmayee",
+ "Mpradeep",
+ "Veeven",
+ "రహ్మానుద్దీన్"
+ ]
+ },
+ "captcha-edit": "ఈ పేజీని సరిదిద్దడానికి, కింది ఇచ్చిన చిన్న లెక్కని చేసి జవాబుని పక్కనున్న పెట్టెలో టైపు చెయ్యండి ([[ప్రత్యేక:Captcha/help|మరింత సమాచారం]]):",
+ "captcha-desc": "సరళమైన అమకవేప అమలు",
+ "captcha-label": "క్యాప్చా",
+ "captcha-addurl": "మీ దిద్దుబాటులో కొత్త బయటి లింకులు ఉన్నాయి. ఆటోమేటెడ్ స్పాము నుండి రక్షించేందుకు గాను, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
+ "captcha-badlogin": "పాసువోర్డును బాట్ల ద్వారా తెలుసుకోకుండా ఉండేందుకు, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
+ "captcha-createaccount": "బాట్ల ద్వారా ఖాతాలను సృష్టించకుండా నిరోధించటానికి, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
+ "captcha-createaccount-fail": "దృవీకరించుకోవడానికి విలువ ఇవ్వలేదు లేదా దానిని తప్పుగా ఇచ్చారు.",
+ "captcha-create": "కొత్తపేజీని సృష్టించడానికి, కింద ఇచ్చిన లెక్క యొక్క జవాబును ఇక్కడున్న పెట్టెలో రాయండి ([[Special:Captcha/help|మరింత సహాయం]]):",
+ "captchahelp-title": "ఆమకవేప సహాయం",
+ "captchahelp-cookies-needed": "ఇది పని చెయ్యాలంటే మీ బ్రౌజరులో కూకీలు సశక్తమై ఉండాలి.",
+ "captchahelp-text": "ప్రజలనుండి రచనలను స్వీకరించే ఈ వికీ వంటి వెబ్‌సైట్లు, ఆటోమాటిక్ ప్రోగ్రాములతో తమ స్వంత లింకులను చేర్చే స్పాము ముష్కరుల దాడులకు గురవడం తరచూ జరుగుతూ ఉంటుంది. ఆ లింకులను తీసేయడం పెద్ద విషయం కాకపోయినప్పటికీ, అవి తలనెప్పి అనేది మాత్రం నిజం.\n\nకొన్నిసార్లు, ముఖ్యంగా ఏదైనా పేజీ నుండి బయటకు లింకులు ఇచ్చేటపుడు, వంకర్లు తిరిగిపోయి ఉన్న పదాల బొమ్మను చూపించి ఆ పదాన్ని టైపు చెయ్యమని వికీ మిమ్మల్ని అడగవచ్చు. దీన్ని ఆటోమాటిక్ టూల్సుతో చెయ్యడం చాలా కష్టం కాబట్టి, స్పాము జిత్తులు చెల్లవు; మనుష్యులు మాత్రం మామూలుగానే చెయ్యగలరు.\n\nదురదృష్టవశాత్తూ, చూపు సరిగా లేనివారికి, టెక్స్టు బ్రౌజర్లు మాత్రమే వాడేవారికి ఇది అసౌకర్యం కలిగిస్తుంది. ప్రస్తుతానికి శబ్దం వినిపించే వెసులుబాటు మాకు లేదు. మీరు రచనలు చెయ్యకుండా ఇది అడ్డుపడుతుంటే, సహాయం కోసం సైటు నిర్వాహకుణ్ణి సంప్రదించండి.\nమీరు చెసే విలువయిన, సమ్మతమయిన వ్యాస మార్పులు భద్రపరచటము కుదరకపొతె, దయచేసి [[Special:ListAdmins|సైటు నిర్వహణాధికారి]]కి లేఖ రాయండి.\n\nమీ బ్రౌజర్లోని బ్యాక్(back) మీటను నొక్కి ఇంతకు ముందరి పేజీకి వెళ్ళండి.",
+ "captcha-addurl-whitelist": " #<!-- ఈ పంక్తిని ఉన్నదున్నట్లు ఇలాగే వదిలివేయండి --> <pre>\n# ఇక్కడ రాయాల్సిన విధానం ఇదీ:\n# * \"#\" అనే అక్షరం నుండి ఆ పంక్తి చివరివరకూ వ్యాఖ్యానం\n# * ఖాళీగా లేని ప్రతీ పంక్తీ ఒక regex భాగము, ఇది పేజీలో ఉన్న URLల్ల యొక్క హోస్టుతో మాత్రమే సరిచూడబడుతుంది\n #</pre> <!-- ఈ పంక్తిని ఉన్నదున్నట్లు ఇలాగే వదిలివేయండి -->",
+ "right-skipcaptcha": "ఆమకవేప ద్వారా పోకుండానే దాని ట్రిగ్గరు చర్యలను అమలు చెయ్యి"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/tg-cyrl.json b/extensions/ConfirmEdit/i18n/tg-cyrl.json
index 46ae26f0..46ae26f0 100644
--- a/extensions/ConfirmEdit/i18n/core/tg-cyrl.json
+++ b/extensions/ConfirmEdit/i18n/tg-cyrl.json
diff --git a/extensions/ConfirmEdit/i18n/core/tg-latn.json b/extensions/ConfirmEdit/i18n/tg-latn.json
index deb1ee0e..deb1ee0e 100644
--- a/extensions/ConfirmEdit/i18n/core/tg-latn.json
+++ b/extensions/ConfirmEdit/i18n/tg-latn.json
diff --git a/extensions/ConfirmEdit/i18n/th.json b/extensions/ConfirmEdit/i18n/th.json
new file mode 100644
index 00000000..64f8dd6c
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/th.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Passawuth",
+ "Horus",
+ "Octahedron80"
+ ]
+ },
+ "captcha-edit": "เพื่อที่จะแก้ไขหน้านี้ กรุณาตอบโจทย์ปัญหาทางคณิตศาสตร์ข้างล่าง และใส่คำตอบลงในกล่อง ([[Special:Captcha/help|รายละเอียดเพิ่มเติม]]) :",
+ "captcha-label": "แคปต์ชา",
+ "captcha-addurl": "การแก้ไขของคุณมีลิงก์็ไปยังเว็บไซต์ภายนอกด้วย\nเพื่อที่จะป้องกันสแปม กรุณาแก้โจทย์ด้านล่าง และพิมพ์คำตอบลงในกล่อง ([[Special:Captcha/help|รายละเอียด]]):",
+ "captcha-badlogin": "กรุณาแก้โจทย์ด้านล่าง และพิมพ์คำตอบลงในกล่อง เพื่อที่จะป้องกันกา่รแอบแฮครหัสผ่านโดยผู้ไม่หวังดี ([[Special:Captcha/help|รายละเอียด]]):",
+ "captcha-createaccount": "กรุณาแก้โจทย์ด้านล่าง และพิมพ์คำตอบลงในกล่อง เพื่อที่จะป้องกันการสร้างบัญชีผู้ใช้โดยผู้ไม่หวังดี ([[Special:Captcha/help|รายละเอียด]]):",
+ "captcha-createaccount-fail": "แคปท์ชาไม่ถูกต้องหรือยังไม่ได้กรอก",
+ "captcha-create": "กรุณาแก้โจทย์ด้านล่าง และพิมพ์คำตอบลงในกล่อง เพื่อที่จะสร้างหน้า\n([[Special:Captcha/help|รายละเอียด]]):",
+ "captcha-sendemail-fail": "แคปท์ชาไม่ถูกต้องหรือยังไม่ได้กรอก",
+ "captchahelp-title": "เกี่ยวกับแคปต์ชา",
+ "captchahelp-cookies-needed": "คุณต้องอนุญาตคุกกี้บนเว็บบราวเซอร์ของคุณ เพื่อที่คุณจะสามารถล็อกอินได้"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/tk.json b/extensions/ConfirmEdit/i18n/tk.json
index f3da4859..f3da4859 100644
--- a/extensions/ConfirmEdit/i18n/core/tk.json
+++ b/extensions/ConfirmEdit/i18n/tk.json
diff --git a/extensions/ConfirmEdit/i18n/core/tl.json b/extensions/ConfirmEdit/i18n/tl.json
index eee795f2..eee795f2 100644
--- a/extensions/ConfirmEdit/i18n/core/tl.json
+++ b/extensions/ConfirmEdit/i18n/tl.json
diff --git a/extensions/ConfirmEdit/i18n/core/tr.json b/extensions/ConfirmEdit/i18n/tr.json
index 2b1c6f29..2b1c6f29 100644
--- a/extensions/ConfirmEdit/i18n/core/tr.json
+++ b/extensions/ConfirmEdit/i18n/tr.json
diff --git a/extensions/ConfirmEdit/i18n/core/tru.json b/extensions/ConfirmEdit/i18n/tru.json
index 4358718d..4358718d 100644
--- a/extensions/ConfirmEdit/i18n/core/tru.json
+++ b/extensions/ConfirmEdit/i18n/tru.json
diff --git a/extensions/ConfirmEdit/i18n/uk.json b/extensions/ConfirmEdit/i18n/uk.json
new file mode 100644
index 00000000..401a1e74
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/uk.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahonc",
+ "Alex Khimich",
+ "Andriykopanytsia",
+ "NickK",
+ "Olvin",
+ "Riwnodennyk",
+ "Ата",
+ "Тест",
+ "Piramidion"
+ ]
+ },
+ "captcha-edit": "Щоб відредагувати цю сторінку, будь ласка, виконайте просту арифметичну дію і введіть відповідь у текстове поле ([[Special:Captcha/help|докладніше]]):",
+ "captcha-desc": "Забезпечує методи CAPTCHA для захисту від спаму і підбору пароля",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "Ви додали нові посилання на зовнішні сайти.\nІз метою захисту від автоматичного спаму, будь ласка, виконайте просту арифметичну дію і введіть відповідь у текстове поле, щоб редагування було збережене ([[Special:Captcha/help|докладніше]]):",
+ "captcha-badlogin": "Із метою захисту від автоматичного злому пароля, будь ласка, виконайте просту арифметичну дію і введіть відповідь у текстове поле ([[Special:Captcha/help|докладніше]]):",
+ "captcha-createaccount": "Із метою захисту від автоматичного створення облікового запису просимо виконати просту арифметичну дію і ввести відповідь у текстове поле ([[Special:Captcha/help|докладніше]]):",
+ "captcha-createaccount-fail": "Неправильна або відсутня капча.",
+ "captcha-create": "Щоб створити сторінку, будь ласка, виконайте просту арифметичну дію і введіть відповідь у текстове поле ([[Special:Captcha/help|докладніше]]):",
+ "captcha-sendemail": "Із метою захисту вікі від автоматичного спаму просимо розв'язати простий математичний приклад і ввести відповідь ([[Special:Captcha/help|деталі]]):",
+ "captcha-sendemail-fail": "Неправильна або відсутня капча.",
+ "captcha-disabledinapi": "Ця дія потребує перевірки CAPTCHA, тому не може бути здійснена за допомогою API.",
+ "captchahelp-title": "Довідка про CAPTCHA",
+ "captchahelp-cookies-needed": "Вам потрібно ввімкнути куки у браузері, щоб ця функція запрацювала.",
+ "captchahelp-text": "Веб-сайти, що дозволяють додавати або змінювати свій вміст, у тому числі вікі, часто стають ціллю спамерів, які використовують програми для автоматичного додавання посилань.\nХоча такі посилання і можуть бути вилучені, вони є істотною вадою.\n\nІноді, наприклад при додаванні на сторінку нового веб-посилання, вікі може показати вам картинку з кольоровим або спотвореним текстом і запропонувати ввести текст, який ви бачите.\nОскільки подібну задачу важко автоматизувати, це дає можливість більшості людей робити свої зміни, в той час як більшість спамерських і вандальних програм не можуть цього зробити.\n\nНа жаль, подібний захист може спричинити незручності для людей із вадами зору. Зараз у нас нема звукової альтернативи для такої перевірки. Будь ласка, зверніться по допомогу до [[Special:ListAdmins|адміністраторів]], якщо подібна перевірка заважає вам добросовісно працювати з сайтом.\n\nНатисніть кнопку «Назад» у вашому браузері, щоб повернутися до редагування.",
+ "captcha-addurl-whitelist": "#<!-- leave this line exactly as it is --> <pre>\n# Опис синтаксису:\n# * Все, що починається з символу \"#\" до кінця рядка, вважається коментарем\n# * Кожний непорожній рядок вважається фрагментом регулярного виразу відповідної назви вузла в URL\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "виконання дій, що вимагають CAPTCHA-перевірки, без проходження CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/ur.json b/extensions/ConfirmEdit/i18n/ur.json
new file mode 100644
index 00000000..a4d60604
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/ur.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "عثمان خان شاہ"
+ ]
+ },
+ "captcha-label": "کیپچا"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/vec.json b/extensions/ConfirmEdit/i18n/vec.json
index 27dd98f5..27dd98f5 100644
--- a/extensions/ConfirmEdit/i18n/core/vec.json
+++ b/extensions/ConfirmEdit/i18n/vec.json
diff --git a/extensions/ConfirmEdit/i18n/core/vi.json b/extensions/ConfirmEdit/i18n/vi.json
index 61c2334e..61c2334e 100644
--- a/extensions/ConfirmEdit/i18n/core/vi.json
+++ b/extensions/ConfirmEdit/i18n/vi.json
diff --git a/extensions/ConfirmEdit/i18n/core/vo.json b/extensions/ConfirmEdit/i18n/vo.json
index b0b0c9c4..b0b0c9c4 100644
--- a/extensions/ConfirmEdit/i18n/core/vo.json
+++ b/extensions/ConfirmEdit/i18n/vo.json
diff --git a/extensions/ConfirmEdit/i18n/vro.json b/extensions/ConfirmEdit/i18n/vro.json
new file mode 100644
index 00000000..ee27780d
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/vro.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Võrok"
+ ]
+ },
+ "captcha-label": "CAPTCHA"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/wa.json b/extensions/ConfirmEdit/i18n/wa.json
index 72032cb9..72032cb9 100644
--- a/extensions/ConfirmEdit/i18n/core/wa.json
+++ b/extensions/ConfirmEdit/i18n/wa.json
diff --git a/extensions/ConfirmEdit/i18n/yi.json b/extensions/ConfirmEdit/i18n/yi.json
new file mode 100644
index 00000000..78acf9ec
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/yi.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "אײַער רעדאַקטירונג אַנטהאַלט נײַע דרויסנדיקע לינקען. \nצו שיצן די וויקי קעגן אויטאמזירטן ספאַם, בעטן מיר אײַך צו לייזן די פשוטע סומע אונטן און קלאַפט אײַן דעם ענטפֿער אינעם קעסטל כדי אויפצוהיטן אײַער רעדאקטירונג. ([[Special:Captcha/help|נאך אינפֿארמאַציע]]):",
+ "captcha-badlogin": "צו שיצן די וויקי קעגן אויטאמאַטישן ברעכן פאַסווערטער, בעטן מיר אײַך צו לייזן די פשוטע סומע אונטן און קלאַפט אײַן דעם ענטפֿער אינעם קעסטל כדי אויפצוהיטן אײַער רעדאקטירונג. ([[Special:Captcha/help|נאך אינפֿארמאַציע]]):",
+ "captcha-createaccount": "צו שיצן די וויקי קעגן אויטאמאַטישע שאַפֿן קאנטעס, בעטן מיר אײַך צו לייזן די פשוטע סומע אונטן און אריינקלאַפן דעם ענטפֿער אינעם קעסטל כדי אויפצוהיטן אײַער רעדאקטירונג. ([[Special:Captcha/help|נאך אינפֿארמאַציע]]):",
+ "captcha-createaccount-fail": "גרײַזיקער אָדער פֿעלנדיקער באַשטעטיק־קאָד",
+ "captchahelp-title": "CAPTCHA הילף"
+}
diff --git a/extensions/ConfirmEdit/i18n/core/yo.json b/extensions/ConfirmEdit/i18n/yo.json
index f3220357..f3220357 100644
--- a/extensions/ConfirmEdit/i18n/core/yo.json
+++ b/extensions/ConfirmEdit/i18n/yo.json
diff --git a/extensions/ConfirmEdit/i18n/yue.json b/extensions/ConfirmEdit/i18n/yue.json
new file mode 100644
index 00000000..79c10820
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/yue.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Yueman"
+ ]
+ },
+ "captcha-edit": "要編輯呢一篇文,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
+ "captcha-desc": "簡單嘅 captcha 實行",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "你編輯嘅內容裏面有新嘅URL連結;為咗避免受到自動垃圾程式的侵擾,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
+ "captcha-badlogin": "為咗防止程式自動破解密碼,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
+ "captcha-createaccount": "為咗防止程式自動註冊,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
+ "captcha-createaccount-fail": "驗證碼錯誤或者唔見咗。",
+ "captcha-create": "要開呢一版,請答出一個簡單嘅加數和,跟住響個盒度打入 ([[Special:Captcha/help|更多資料]]):",
+ "captchahelp-title": "Captcha 幫助",
+ "captchahelp-cookies-needed": "你需要開咗響瀏覽器度嘅cookies先至可以用呢樣嘢。",
+ "captchahelp-text": "就好似呢個wiki咁,對公眾開放編輯嘅網站係會經常受到垃圾連結騷擾。嗰啲人利用自動化垃圾程序將佢哋嘅連結張貼到好多網站。雖然呢啲連結可以被清除,但係呢啲嘢確實令人十分之討厭。\n\n有時,特別係當響一頁添加新嘅網頁連結嗰陣,呢個網站會畀你睇一幅有顏色的或者有變形文字嘅圖像,跟住要你輸入所顯示嘅文字。因為咁係難以自動完成嘅一項任務,它將允許人保存佢哋嘅編輯,同時亦阻止大多數發送垃圾郵件者同其它機械人嘅攻擊。\n\n令人遺憾嘅係,咁會令到視力唔好嘅人,或者利用基於文本或者基於聲音嘅瀏覽器用戶感到不便。而目前我哋仲未能夠提供音頻嘅選擇。如果咁樣咁啱阻止到你進行正常嘅編輯,請同管理員聯繫以獲得幫助。\n\n撳一下響瀏覽器度嘅「後退」掣返去你之前所編輯緊嘅頁面。",
+ "captcha-addurl-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# 語法好似下面噉:\n# * 所有由 \"#\" 字元之後嘅嘢到行尾係註解\n# * 所有非空白行係一個regex部份,只係會同裏面嘅URL主機相符\n #</pre> <!-- leave this line exactly as it is -->",
+ "right-skipcaptcha": "執行captcha引發嘅動作時唔需要經過captcha"
+}
diff --git a/extensions/ConfirmEdit/i18n/zh-hans.json b/extensions/ConfirmEdit/i18n/zh-hans.json
new file mode 100644
index 00000000..0ee20dd8
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/zh-hans.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bencmq",
+ "Hzy980512",
+ "Liangent",
+ "PhiLiP",
+ "Xiaomingyan",
+ "Yfdyh000",
+ "Liuxinyu970226",
+ "Mywood",
+ "Impersonator 1"
+ ]
+ },
+ "captcha-edit": "要编辑该页面,请输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
+ "captcha-desc": "提供验证码技术防止垃圾信息和密码破解破坏",
+ "captcha-label": "验证码",
+ "captcha-addurl": "你的编辑包含新的外部链接。为保护本wiki免受自动垃圾程序的破坏,我们恳请你输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
+ "captcha-badlogin": "为保护本wiki免受自动密码破解的破坏,我们恳请你输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
+ "captcha-createaccount": "为保护本wiki免受自动账户创建的破坏,我们恳请你输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
+ "captcha-createaccount-fail": "验证码错误或丢失。",
+ "captcha-create": "要创建页面,请输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
+ "captcha-sendemail": "为保护本wiki免受自动垃圾程序的破坏,我们恳请你输入下面简单算式的答案([[Special:Captcha/help|更多信息]]):",
+ "captcha-sendemail-fail": "验证码错误或丢失。",
+ "captcha-disabledinapi": "该操作需要验证码,因此无法通过API执行。",
+ "captchahelp-title": "验证码帮助",
+ "captchahelp-cookies-needed": "你需要启用你的浏览器的cookie使该程序工作。",
+ "captchahelp-text": "接受公众贡献的网站,比如本wiki,经常受到使用自动工具添加垃圾网站链接的垃圾制造者的破坏。尽管这些垃圾链接可以被删除,它们仍然极其麻烦。\n\n有时,特别是给页面添加新的网络链接时,本wiki可能会向你展示一张有多种颜色或扭曲的文字的图像,并要求你输入展示的文字。由于这是一项难以用自动工具完成的任务,它可以允许在大多数真人做出贡献的同时,阻止大多数垃圾制造者和其他自动攻击者。\n\n遗憾地是,这可能会对视力受限或是使用纯文本或阅读浏览器的用户造成不便。目前我们还没替代的声音选择。如果这项措施意外地阻止你进行正常的贡献,请与[[Special:ListAdmins|网站管理员]]联系获取帮助。\n\n点击浏览器的“后退”按钮返回页面编辑器。",
+ "captcha-addurl-whitelist": " #<!-- 请将本行保持原样 --> <pre>\n# 句法如下:\n# * 所有以“#”字符开头的行都是注释\n# * 所有非空白行是正则表达式片段,只会对URL中的内容进行匹配\n #</pre> <!-- 请将本行保持原样 -->",
+ "right-skipcaptcha": "执行触发验证码的操作时无需验证"
+}
diff --git a/extensions/ConfirmEdit/i18n/zh-hant.json b/extensions/ConfirmEdit/i18n/zh-hant.json
new file mode 100644
index 00000000..026c1b3e
--- /dev/null
+++ b/extensions/ConfirmEdit/i18n/zh-hant.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Horacewai2",
+ "Hydra",
+ "Liangent",
+ "Mark85296341",
+ "Simon Shek",
+ "Waihorace",
+ "Cwlin0416",
+ "LNDDYL",
+ "Liuxinyu970226"
+ ]
+ },
+ "captcha-edit": "要編輯這篇文章,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
+ "captcha-desc": "提供 CAPTCHA 技術來阻止垃圾訊息和密碼猜解",
+ "captcha-label": "CAPTCHA",
+ "captcha-addurl": "你編輯的內容中含有一個新的外部連結;為了免受自動垃圾程式的侵擾,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
+ "captcha-badlogin": "為防止程式自動破解密碼,請答出一條簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
+ "captcha-createaccount": "為防止程式自動註冊,請答出一條簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
+ "captcha-createaccount-fail": "CAPTCHA 錯誤或遺失。",
+ "captcha-create": "要建立頁面,請答出一個簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
+ "captcha-sendemail": "為防止程式進行破壞,請答出一條簡單的加法,然後在框內輸入 ([[Special:Captcha/help|更多資料]]) :",
+ "captcha-sendemail-fail": "CAPTCHA 錯誤或遺失。",
+ "captcha-disabledinapi": "此操作需要使用 CAPTCHA 驗証,因此無法透過 API 執行。",
+ "captchahelp-title": "Captcha 說明",
+ "captchahelp-cookies-needed": "您需要開啟瀏覽器上的 Cookies 方可使用此功能。",
+ "captchahelp-text": "接受公開張貼訊息的網站,同本 Wiki,通常會被垃圾訊息散佈者使用自動化工具所濫用,在多個網站張貼垃圾連結。\n雖然可以移除這些垃圾連結,但這實著造成困擾。\n\n因此,部份時候,特別是在頁面新增網站連結時,Wiki 會顯示您有彩色或扭曲文字的圖片,要求您輸顯示的文字。\n由於這個動作難以自動化,它可在讓實際的使用者張貼訊息的同時避免多數垃圾訊息散佈者及自動化工具的攻擊。\n\n可惜的是,這仍可能對視力有障礙或者使用以文字基礎或語音基礎的瀏覽器造成不便。\n但目前我們還尚未提供語音的替代方案。\n若您的合法操作在預期之外受到限制,請聯絡 [[Special:ListAdmins|網站管理員]] 尋求協助。\n\n請點選瀏覽器的「返回」按鈕以返回頁面編輯器。",
+ "captcha-addurl-whitelist": " #<!-- 請勿更動此行 --> <pre>\n# 語法格式如下:\n# * 任何以 \"#\" 字元開頭至結尾代表註解\n# * 任何非空白行代表部份正規表示法,會用來比對 URL 中的主機\n #</pre> <!-- 請勿更動此行 -->",
+ "right-skipcaptcha": "執行會觸發驗證碼的動作時無需經過驗證碼檢驗"
+}
diff --git a/extensions/ConfirmEdit/CaptchaStore.php b/extensions/ConfirmEdit/includes/CaptchaStore.php
index a54db97f..b0854df1 100644
--- a/extensions/ConfirmEdit/CaptchaStore.php
+++ b/extensions/ConfirmEdit/includes/CaptchaStore.php
@@ -36,7 +36,7 @@ abstract class CaptchaStore {
/**
* Get somewhere to store captcha data that will persist between requests
*
- * @throws MWException
+ * @throws Exception
* @return CaptchaStore
*/
public final static function get() {
@@ -45,7 +45,7 @@ abstract class CaptchaStore {
if ( in_array( 'CaptchaStore', class_parents( $wgCaptchaStorageClass ) ) ) {
self::$instance = new $wgCaptchaStorageClass;
} else {
- throw new MWException( "Invalid CaptchaStore class $wgCaptchaStorageClass" );
+ throw new Exception( "Invalid CaptchaStore class $wgCaptchaStorageClass" );
}
}
return self::$instance;
diff --git a/extensions/ConfirmEdit/includes/ConfirmEditHooks.php b/extensions/ConfirmEdit/includes/ConfirmEditHooks.php
new file mode 100644
index 00000000..5f9c3384
--- /dev/null
+++ b/extensions/ConfirmEdit/includes/ConfirmEditHooks.php
@@ -0,0 +1,149 @@
+<?php
+
+class ConfirmEditHooks {
+ /**
+ * Get the global Captcha instance
+ *
+ * @return SimpleCaptcha
+ */
+ static function getInstance() {
+ global $wgCaptcha, $wgCaptchaClass;
+
+ static $done = false;
+
+ if ( !$done ) {
+ $done = true;
+ $wgCaptcha = new $wgCaptchaClass;
+ }
+
+ return $wgCaptcha;
+ }
+
+ static function confirmEditMerged( $context, $content, $status, $summary, $user, $minorEdit ) {
+ return self::getInstance()->confirmEditMerged( $context, $content, $status, $summary,
+ $user, $minorEdit );
+ }
+
+ static function confirmEditPage( $editpage, $buttons, $tabindex ) {
+ self::getInstance()->editShowCaptcha( $editpage );
+ }
+
+ static function confirmEditAPI( $editPage, $newtext, &$resultArr ) {
+ return self::getInstance()->confirmEditAPI( $editPage, $newtext, $resultArr );
+ }
+
+ static function showEditFormFields( &$editPage, &$out ) {
+ return self::getInstance()->showEditFormFields( $editPage, $out );
+ }
+
+ static function addNewAccountApiForm( $apiModule, $loginForm ) {
+ return self::getInstance()->addNewAccountApiForm( $apiModule, $loginForm );
+ }
+
+ static function addNewAccountApiResult( $apiModule, $loginPage, &$result ) {
+ return self::getInstance()->addNewAccountApiResult( $apiModule, $loginPage, $result );
+ }
+
+ static function injectUserCreate( &$template ) {
+ return self::getInstance()->injectUserCreate( $template );
+ }
+
+ static function confirmUserCreate( $u, &$message, &$status = null ) {
+ return self::getInstance()->confirmUserCreate( $u, $message, $status );
+ }
+
+ static function triggerUserLogin( $user, $password, $retval ) {
+ return self::getInstance()->triggerUserLogin( $user, $password, $retval );
+ }
+
+ static function injectUserLogin( &$template ) {
+ return self::getInstance()->injectUserLogin( $template );
+ }
+
+ static function confirmUserLogin( $u, $pass, &$retval ) {
+ return self::getInstance()->confirmUserLogin( $u, $pass, $retval );
+ }
+
+ static function injectEmailUser( &$form ) {
+ return self::getInstance()->injectEmailUser( $form );
+ }
+
+ static function confirmEmailUser( $from, $to, $subject, $text, &$error ) {
+ return self::getInstance()->confirmEmailUser( $from, $to, $subject, $text, $error );
+ }
+
+ // Default $flags to 1 for backwards-compatible behavior
+ public static function APIGetAllowedParams( &$module, &$params, $flags = 1 ) {
+ return self::getInstance()->APIGetAllowedParams( $module, $params, $flags );
+ }
+
+ public static function APIGetParamDescription( &$module, &$desc ) {
+ return self::getInstance()->APIGetParamDescription( $module, $desc );
+ }
+
+ /**
+ * Hook to add PHPUnit test cases.
+ * @see https://www.mediawiki.org/wiki/Manual:Hooks/UnitTestsList
+ *
+ * @param array &$files
+ * @return boolean
+ */
+ public static function onUnitTestsList( array &$files ) {
+ // @codeCoverageIgnoreStart
+ $directoryIterator = new RecursiveDirectoryIterator( dirname( __DIR__ ) . '/tests/' );
+
+ /**
+ * @var SplFileInfo $fileInfo
+ */
+ $ourFiles = array();
+ foreach ( new RecursiveIteratorIterator( $directoryIterator ) as $fileInfo ) {
+ if ( substr( $fileInfo->getFilename(), -8 ) === 'Test.php' ) {
+ $ourFiles[] = $fileInfo->getPathname();
+ }
+ }
+
+ $files = array_merge( $files, $ourFiles );
+ return true;
+ // @codeCoverageIgnoreEnd
+ }
+
+ /**
+ * Set up $wgWhitelistRead
+ */
+ public static function confirmEditSetup() {
+ global $wgGroupPermissions, $wgCaptchaTriggers, $wgWikimediaJenkinsCI;
+
+ // There is no need to run (core) tests with enabled ConfirmEdit - bug T44145
+ if ( isset( $wgWikimediaJenkinsCI ) && $wgWikimediaJenkinsCI === true ) {
+ $wgCaptchaTriggers = false;
+ }
+
+ if ( !$wgGroupPermissions['*']['read'] && $wgCaptchaTriggers['badlogin'] ) {
+ // We need to ensure that the captcha interface is accessible
+ // so that unauthenticated users can actually get in after a
+ // mistaken password typing.
+ global $wgWhitelistRead;
+ $image = SpecialPage::getTitleFor( 'Captcha', 'image' );
+ $help = SpecialPage::getTitleFor( 'Captcha', 'help' );
+ $wgWhitelistRead[] = $image->getPrefixedText();
+ $wgWhitelistRead[] = $help->getPrefixedText();
+ }
+ }
+ /**
+ * Callback for extension.json of FancyCaptcha to set a default captcha directory,
+ * which depends on wgUploadDirectory
+ */
+ public static function onFancyCaptchaSetup() {
+ global $wgCaptchaDirectory, $wgUploadDirectory;
+ if ( !$wgCaptchaDirectory ) {
+ $wgCaptchaDirectory = "$wgUploadDirectory/captcha";
+ }
+ }
+ /**
+ * Callback for extension.json of ReCaptcha to require the recaptcha library php file.
+ * FIXME: This should be done in a better way, e.g. only load the libraray, if really needed.
+ */
+ public static function onReCaptchaSetup() {
+ require_once( "ReCaptcha/recaptchalib.php" );
+ }
+}
diff --git a/extensions/ConfirmEdit/includes/specials/SpecialCaptcha.php b/extensions/ConfirmEdit/includes/specials/SpecialCaptcha.php
new file mode 100644
index 00000000..63305791
--- /dev/null
+++ b/extensions/ConfirmEdit/includes/specials/SpecialCaptcha.php
@@ -0,0 +1,22 @@
+<?php
+class CaptchaSpecialPage extends UnlistedSpecialPage {
+ public function __construct() {
+ parent::__construct( 'Captcha' );
+ }
+
+ function execute( $par ) {
+ $this->setHeaders();
+
+ $instance = ConfirmEditHooks::getInstance();
+
+ switch( $par ) {
+ case "image":
+ if ( method_exists( $instance, 'showImage' ) ) {
+ return $instance->showImage();
+ }
+ case "help":
+ default:
+ return $instance->showHelp();
+ }
+ }
+}
diff --git a/extensions/ConfirmEdit/tests/QuestyCaptchaTest.php b/extensions/ConfirmEdit/tests/QuestyCaptchaTest.php
new file mode 100644
index 00000000..44755415
--- /dev/null
+++ b/extensions/ConfirmEdit/tests/QuestyCaptchaTest.php
@@ -0,0 +1,49 @@
+<?php
+
+class QuestyCaptchaTest extends MediaWikiTestCase {
+ /**
+ * @covers QuestyCaptcha::getCaptcha
+ * @dataProvider provideGetCaptcha
+ */
+ public function testGetCaptcha( $config, $expected ) {
+
+ # setMwGlobals() requires $wgCaptchaQuestion to be set
+ if ( !isset( $GLOBALS['wgCaptchaQuestions'] ) ) {
+ $GLOBALS['wgCaptchaQuestions'] = array();
+ }
+ $this->setMwGlobals( 'wgCaptchaQuestions', $config );
+ $this->mergeMwGlobalArrayValue(
+ 'wgAutoloadClasses',
+ array( 'QuestyCaptcha' => __DIR__ . '/../QuestyCaptcha/QuestyCaptcha.class.php' )
+ );
+
+ $qc = new QuestyCaptcha();
+ $this->assertEquals( $expected, $qc->getCaptcha() );
+ }
+
+ public static function provideGetCaptcha() {
+ return array(
+ array(
+ array(
+ array(
+ 'question' => 'FooBar',
+ 'answer' => 'Answer!',
+ ),
+ ),
+ array(
+ 'question' => 'FooBar',
+ 'answer' => 'Answer!',
+ ),
+ ),
+ array(
+ array(
+ 'FooBar' => 'Answer!',
+ ),
+ array(
+ 'question' => 'FooBar',
+ 'answer' => 'Answer!',
+ ),
+ )
+ );
+ }
+}
diff --git a/extensions/Gadgets/GadgetHooks.php b/extensions/Gadgets/GadgetHooks.php
index ee1f4081..64c7a3f4 100644
--- a/extensions/Gadgets/GadgetHooks.php
+++ b/extensions/Gadgets/GadgetHooks.php
@@ -32,12 +32,10 @@ class GadgetHooks {
*/
public static function articleSaveComplete( $article, $user, $text ) {
// update cache if MediaWiki:Gadgets-definition was edited
- wfProfileIn( __METHOD__ );
$title = $article->getTitle();
if ( $title->getNamespace() == NS_MEDIAWIKI && $title->getText() == 'Gadgets-definition' ) {
Gadget::loadStructuredList( $text );
}
- wfProfileOut( __METHOD__ );
return true;
}
@@ -73,10 +71,8 @@ class GadgetHooks {
* @return bool
*/
public static function getPreferences( $user, &$preferences ) {
- wfProfileIn( __METHOD__ );
$gadgets = Gadget::loadStructuredList();
if ( !$gadgets ) {
- wfProfileOut( __METHOD__ );
return true;
}
@@ -132,7 +128,6 @@ class GadgetHooks {
'prefix' => 'gadget-',
'default' => $default,
);
- wfProfileOut( __METHOD__ );
return true;
}
@@ -167,11 +162,8 @@ class GadgetHooks {
* @return bool
*/
public static function beforePageDisplay( $out ) {
- wfProfileIn( __METHOD__ );
-
$gadgets = Gadget::loadList();
if ( !$gadgets ) {
- wfProfileOut( __METHOD__ );
return true;
}
@@ -213,7 +205,6 @@ class GadgetHooks {
self::applyScript( $page, $out );
}
}
- wfProfileOut( __METHOD__ );
return true;
}
diff --git a/extensions/Gadgets/Gadgets.alias.php b/extensions/Gadgets/Gadgets.alias.php
index ca131a4d..46c7852b 100644
--- a/extensions/Gadgets/Gadgets.alias.php
+++ b/extensions/Gadgets/Gadgets.alias.php
@@ -34,11 +34,21 @@ $specialPageAliases['as'] = array(
'Gadgets' => array( 'গেজেটসমূহ' ),
);
+/** Avaric (авар) */
+$specialPageAliases['av'] = array(
+ 'Gadgets' => array( 'Гаджеты' ),
+);
+
/** Bulgarian (български) */
$specialPageAliases['bg'] = array(
'Gadgets' => array( 'Джаджи' ),
);
+/** Western Balochi (بلوچی رخشانی) */
+$specialPageAliases['bgn'] = array(
+ 'Gadgets' => array( 'وسایل_ئان' ),
+);
+
/** Banjar (Bahasa Banjar) */
$specialPageAliases['bjn'] = array(
'Gadgets' => array( 'Pakakas' ),
@@ -204,6 +214,11 @@ $specialPageAliases['lb'] = array(
'Gadgets' => array( 'Gadgeten' ),
);
+/** لوری (لوری) */
+$specialPageAliases['lrc'] = array(
+ 'Gadgets' => array( 'گجتیا' ),
+);
+
/** Minangkabau (Baso Minangkabau) */
$specialPageAliases['min'] = array(
'Gadgets' => array( 'Pakakeh' ),
@@ -339,7 +354,7 @@ $specialPageAliases['uk'] = array(
'Gadgets' => array( 'Додатки' ),
);
-/** vèneto (vèneto) */
+/** Venetian (vèneto) */
$specialPageAliases['vec'] = array(
'Gadgets' => array( 'Strumenti' ),
);
@@ -349,6 +364,11 @@ $specialPageAliases['vi'] = array(
'Gadgets' => array( 'Tiện_ích', 'Công_cụ_đa_năng' ),
);
+/** Chinese (中文) */
+$specialPageAliases['zh'] = array(
+ 'Gadgets' => array( '小工具' ),
+);
+
/** Simplified Chinese (中文(简体)‎) */
$specialPageAliases['zh-hans'] = array(
'Gadgets' => array( '小工具' ),
diff --git a/extensions/Gadgets/Gadgets.i18n.php b/extensions/Gadgets/Gadgets.i18n.php
deleted file mode 100644
index 4435a08a..00000000
--- a/extensions/Gadgets/Gadgets.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShimf270916adbc2d102' ) ) {
- function wfJsonI18nShimf270916adbc2d102( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShimf270916adbc2d102';
-}
diff --git a/extensions/Gadgets/Gadgets.php b/extensions/Gadgets/Gadgets.php
index de0b46c2..2b172307 100644
--- a/extensions/Gadgets/Gadgets.php
+++ b/extensions/Gadgets/Gadgets.php
@@ -1,59 +1,15 @@
<?php
-/**
- * Gadgets extension - lets users select custom javascript gadgets
- *
- * For more info see http://mediawiki.org/wiki/Extension:Gadgets
- *
- * @file
- * @ingroup Extensions
- * @author Daniel Kinzler, brightbyte.de
- * @copyright © 2007 Daniel Kinzler
- * @license GNU General Public Licence 2.0 or later
- */
-if ( !defined( 'MEDIAWIKI' ) ) {
- echo( "This file is an extension to the MediaWiki software and cannot be used standalone.\n" );
- die( 1 );
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'Gadgets' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Gadgets'] = __DIR__ . '/i18n';
+ $wgExtensionMessagesFiles['GadgetsAlias'] = __DIR__ . '/Gadgets.alias.php';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Gadgets extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the Gadgets extension requires MediaWiki 1.25+' );
}
-
-if ( version_compare( $wgVersion, '1.19', '<' ) ) {
- die( "This version of Extension:Gadgets requires MediaWiki 1.19+\n" );
-}
-
-$wgExtensionCredits['other'][] = array(
- 'path' => __FILE__,
- 'name' => 'Gadgets',
- 'author' => array( 'Daniel Kinzler', 'Max Semenik' ),
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Gadgets',
- 'descriptionmsg' => 'gadgets-desc',
-);
-
-$wgHooks['ArticleSaveComplete'][] = 'GadgetHooks::articleSaveComplete';
-$wgHooks['BeforePageDisplay'][] = 'GadgetHooks::beforePageDisplay';
-$wgHooks['UserGetDefaultOptions'][] = 'GadgetHooks::userGetDefaultOptions';
-$wgHooks['GetPreferences'][] = 'GadgetHooks::getPreferences';
-$wgHooks['ResourceLoaderRegisterModules'][] = 'GadgetHooks::registerModules';
-$wgHooks['UnitTestsList'][] = 'GadgetHooks::onUnitTestsList';
-
-$dir = dirname( __FILE__ ) . '/';
-$wgMessagesDirs['Gadgets'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['Gadgets'] = $dir . 'Gadgets.i18n.php';
-$wgExtensionMessagesFiles['GadgetsAlias'] = $dir . 'Gadgets.alias.php';
-
-$wgAutoloadClasses['ApiQueryGadgetCategories'] = $dir . 'api/ApiQueryGadgetCategories.php';
-$wgAutoloadClasses['ApiQueryGadgets'] = $dir . 'api/ApiQueryGadgets.php';
-$wgAutoloadClasses['Gadget'] = $dir . 'Gadgets_body.php';
-$wgAutoloadClasses['GadgetHooks'] = $dir . 'GadgetHooks.php';
-$wgAutoloadClasses['GadgetResourceLoaderModule'] = $dir . 'Gadgets_body.php';
-$wgAutoloadClasses['SpecialGadgets'] = $dir . 'SpecialGadgets.php';
-
-$wgSpecialPages['Gadgets'] = 'SpecialGadgets';
-$wgSpecialPageGroups['Gadgets'] = 'wiki';
-
-$wgAPIListModules['gadgetcategories'] = 'ApiQueryGadgetCategories';
-$wgAPIListModules['gadgets'] = 'ApiQueryGadgets';
-
-/**
- * Whether the gadget list should be cached or recomputed every time
- */
-$wgGadgetsCaching = true;
diff --git a/extensions/Gadgets/Gadgets_body.php b/extensions/Gadgets/Gadgets_body.php
index 24196dd3..d07a0859 100644
--- a/extensions/Gadgets/Gadgets_body.php
+++ b/extensions/Gadgets/Gadgets_body.php
@@ -291,12 +291,10 @@ class Gadget {
return $gadgets;
}
- wfProfileIn( __METHOD__ );
$struct = self::loadStructuredList();
if ( !$struct ) {
$gadgets = $struct;
- wfProfileOut( __METHOD__ );
return $gadgets;
}
@@ -304,7 +302,6 @@ class Gadget {
foreach ( $struct as $entries ) {
$gadgets = array_merge( $gadgets, $entries );
}
- wfProfileOut( __METHOD__ );
return $gadgets;
}
@@ -348,7 +345,6 @@ class Gadget {
return $gadgets;
}
- wfProfileIn( __METHOD__ );
$key = wfMemcKey( 'gadgets-definition', self::GADGET_CLASS_VERSION );
if ( $forceNewText === null ) {
@@ -356,7 +352,6 @@ class Gadget {
// cached?
$gadgets = $wgMemc->get( $key );
if ( self::isValidList( $gadgets ) ) {
- wfProfileOut( __METHOD__ );
return $gadgets;
}
}
@@ -364,7 +359,6 @@ class Gadget {
$g = wfMessage( "gadgets-definition" )->inContentLanguage();
if ( !$g->exists() ) {
$gadgets = false;
- wfProfileOut( __METHOD__ );
return $gadgets;
}
$g = $g->plain();
@@ -374,10 +368,13 @@ class Gadget {
$gadgets = self::listFromDefinition( $g );
- if ( !count( $gadgets ) || !$wgGadgetsCaching ) {
+ if ( !count( $gadgets ) ) {
// Don't cache in case we couldn't find any gadgets. Bug 37228
$gadgets = false;
- wfProfileOut( __METHOD__ );
+ return $gadgets;
+ }
+
+ if ( !$wgGadgetsCaching ) {
return $gadgets;
}
@@ -385,7 +382,6 @@ class Gadget {
$wgMemc->set( $key, $gadgets, 60 * 60 * 24 );
$source = $forceNewText !== null ? 'input text' : 'MediaWiki:Gadgets-definition';
wfDebug( __METHOD__ . ": $source parsed, cache entry $key updated\n" );
- wfProfileOut( __METHOD__ );
return $gadgets;
}
diff --git a/extensions/Gadgets/SpecialGadgets.php b/extensions/Gadgets/SpecialGadgets.php
index f6c3d74c..3cbce480 100644
--- a/extensions/Gadgets/SpecialGadgets.php
+++ b/extensions/Gadgets/SpecialGadgets.php
@@ -106,7 +106,8 @@ class SpecialGadgets extends SpecialPage {
$output->addHTML( Xml::openElement( 'ul' ) );
}
- $lnk = '&#160;&#160;' . $this->msg( 'parentheses', $lang->pipeList( $links ) )->text();
+ $lnk = '&#160;&#160;' .
+ $this->msg( 'parentheses' )->rawParams( $lang->pipeList( $links ) )->escaped();
$output->addHTML( Xml::openElement( 'li' ) .
$ttext . $lnk . "<br />" .
$this->msg( 'gadgets-uses' )->escaped() .
@@ -201,4 +202,8 @@ class SpecialGadgets extends SpecialPage {
. Html::closeElement( 'form' )
);
}
+
+ protected function getGroupName() {
+ return 'wiki';
+ }
}
diff --git a/extensions/Gadgets/api/ApiQueryGadgetCategories.php b/extensions/Gadgets/api/ApiQueryGadgetCategories.php
index 73628085..23257f12 100644
--- a/extensions/Gadgets/api/ApiQueryGadgetCategories.php
+++ b/extensions/Gadgets/api/ApiQueryGadgetCategories.php
@@ -88,10 +88,16 @@ class ApiQueryGadgetCategories extends ApiQueryBase {
);
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getDescription() {
return 'Returns a list of gadget categories';
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getParamDescription() {
return array(
'prop' => array(
@@ -104,6 +110,9 @@ class ApiQueryGadgetCategories extends ApiQueryBase {
);
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getExamples() {
$params = $this->getAllowedParams();
$allProps = implode( '|', $params['prop'][ApiBase::PARAM_TYPE] );
@@ -116,7 +125,15 @@ class ApiQueryGadgetCategories extends ApiQueryBase {
);
}
- public function getVersion() {
- return __CLASS__ . ': $Id$';
+ /**
+ * @see ApiBase::getExamplesMessages()
+ */
+ protected function getExamplesMessages() {
+ return array(
+ 'action=query&list=gadgetcategories'
+ => 'apihelp-query+gadgetcategories-example-1',
+ 'action=query&list=gadgetcategories&gcnames=foo|bar&gcprop=name|title|members'
+ => 'apihelp-query+gadgetcategories-example-2',
+ );
}
}
diff --git a/extensions/Gadgets/api/ApiQueryGadgets.php b/extensions/Gadgets/api/ApiQueryGadgets.php
index b6b00515..46535964 100644
--- a/extensions/Gadgets/api/ApiQueryGadgets.php
+++ b/extensions/Gadgets/api/ApiQueryGadgets.php
@@ -186,10 +186,16 @@ class ApiQueryGadgets extends ApiQueryBase {
);
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getDescription() {
return 'Returns a list of gadgets used on this wiki';
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getParamDescription() {
return array(
'prop' => array(
@@ -205,6 +211,9 @@ class ApiQueryGadgets extends ApiQueryBase {
);
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getExamples() {
$params = $this->getAllowedParams();
$allProps = implode( '|', $params['prop'][ApiBase::PARAM_TYPE] );
@@ -222,7 +231,23 @@ class ApiQueryGadgets extends ApiQueryBase {
);
}
- public function getVersion() {
- return __CLASS__ . ': $Id$';
+ /**
+ * @see ApiBase::getExamplesMessages()
+ */
+ protected function getExamplesMessages() {
+ $params = $this->getAllowedParams();
+ $allProps = implode( '|', $params['prop'][ApiBase::PARAM_TYPE] );
+ return array(
+ 'action=query&list=gadgets&gaprop=id|desc'
+ => 'apihelp-query+gadgets-example-1',
+ "action=query&list=gadgets&gaprop=$allProps"
+ => 'apihelp-query+gadgets-example-2',
+ 'action=query&list=gadgets&gacategories=foo'
+ => 'apihelp-query+gadgets-example-3',
+ 'action=query&list=gadgets&gaids=foo|bar&gaprop=id|desc|metadata'
+ => 'apihelp-query+gadgets-example-4',
+ 'action=query&list=gadgets&gaenabledonly'
+ => 'apihelp-query+gadgets-example-5',
+ );
}
}
diff --git a/extensions/Gadgets/extension.json b/extensions/Gadgets/extension.json
new file mode 100644
index 00000000..f8377ec2
--- /dev/null
+++ b/extensions/Gadgets/extension.json
@@ -0,0 +1,57 @@
+{
+ "name": "Gadgets",
+ "author": [
+ "Daniel Kinzler",
+ "Max Semenik"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:Gadgets",
+ "descriptionmsg": "gadgets-desc",
+ "license-name": "GPL-2.0+",
+ "type": "other",
+ "SpecialPages": {
+ "Gadgets": "SpecialGadgets"
+ },
+ "APIListModules": {
+ "gadgetcategories": "ApiQueryGadgetCategories",
+ "gadgets": "ApiQueryGadgets"
+ },
+ "MessagesDirs": {
+ "Gadgets": [
+ "i18n"
+ ]
+ },
+ "ExtensionMessagesFiles": {
+ "GadgetsAlias": "Gadgets.alias.php"
+ },
+ "AutoloadClasses": {
+ "ApiQueryGadgetCategories": "api/ApiQueryGadgetCategories.php",
+ "ApiQueryGadgets": "api/ApiQueryGadgets.php",
+ "Gadget": "Gadgets_body.php",
+ "GadgetHooks": "GadgetHooks.php",
+ "GadgetResourceLoaderModule": "Gadgets_body.php",
+ "SpecialGadgets": "SpecialGadgets.php"
+ },
+ "Hooks": {
+ "ArticleSaveComplete": [
+ "GadgetHooks::articleSaveComplete"
+ ],
+ "BeforePageDisplay": [
+ "GadgetHooks::beforePageDisplay"
+ ],
+ "UserGetDefaultOptions": [
+ "GadgetHooks::userGetDefaultOptions"
+ ],
+ "GetPreferences": [
+ "GadgetHooks::getPreferences"
+ ],
+ "ResourceLoaderRegisterModules": [
+ "GadgetHooks::registerModules"
+ ],
+ "UnitTestsList": [
+ "GadgetHooks::onUnitTestsList"
+ ]
+ },
+ "config": {
+ "GadgetsCaching": true
+ }
+}
diff --git a/extensions/Gadgets/i18n/ar.json b/extensions/Gadgets/i18n/ar.json
index 48fe496c..726964e4 100644
--- a/extensions/Gadgets/i18n/ar.json
+++ b/extensions/Gadgets/i18n/ar.json
@@ -5,7 +5,8 @@
"DRIHEM",
"Meno25",
"OsamaK",
- "روخو"
+ "روخو",
+ "Abanima"
]
},
"gadgets-desc": "يسمح للمستخدمين باختيار [[Special:Gadgets|إضافات سي إس إس وجافاسكريبت]] معدلة في [[Special:Preferences#mw-prefsection-gadgets|تفضيلاتهم]]",
@@ -22,5 +23,12 @@
"gadgets-export-title": "أداة تصدير",
"gadgets-not-found": "الأداة \"$1\" لم يتم العثور عليها.",
"gadgets-export-text": "لتصدير $1 الأداة، انقر فوق \"{{int:gadgets-export-download}}\" زر حفظ الملف الذي تم تحميله،\n الذهاب إلى الخاص: الاستيراد على واجهة الويكي وتحميله. قم بإضافة ما يلي إلى MediaWiki:Gadgets-definition الصفحة:\n<pre>$2</pre>\nيجب أن يكون لديك الأذونات المناسبة على الويكي (بما في ذلك الحق في تحرير رسائل النظام) ويجب أن يتم تمكين الاستيراد من تحميل الملف.",
- "gadgets-export-download": "نزّل"
+ "gadgets-export-download": "نزّل",
+ "apihelp-query+gadgetcategories-description": "يعطي قائمة بفئات الإضافات.",
+ "apihelp-query+gadgets-description": "يعطي قائمة بالإضافات المستخدمة في هذا الويكي.",
+ "apihelp-query+gadgets-param-allowedonly": "اسرد فقط الإضافات المسموحة للمستخدم الحالي.",
+ "apihelp-query+gadgets-param-enabledonly": "اسرد فقط الإضافات المفعَّلة من قبل المستخدم الحالي.",
+ "apihelp-query+gadgets-example-1": "اعط قائمة بالإضافات مع وصفها.",
+ "apihelp-query+gadgets-example-2": "اعط قائمة بالإضافات مع كامل خصائصها الممكنة",
+ "apihelp-query+gadgets-example-5": "أعط قائمة الإضافات المفعَّلة من قبل المستخدم الحالي"
}
diff --git a/extensions/Gadgets/i18n/awa.json b/extensions/Gadgets/i18n/awa.json
new file mode 100644
index 00000000..1a4991f4
--- /dev/null
+++ b/extensions/Gadgets/i18n/awa.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "prefs-gadgets": "उपकरण (गैजेट)",
+ "gadgets": "उपकरण",
+ "gadgets-title": "उपकरण (गैजेट)"
+}
diff --git a/extensions/Gadgets/i18n/ca.json b/extensions/Gadgets/i18n/ca.json
index 56b9bd4d..f96a6c9d 100644
--- a/extensions/Gadgets/i18n/ca.json
+++ b/extensions/Gadgets/i18n/ca.json
@@ -6,7 +6,8 @@
"Paucabot",
"SMP",
"Toniher",
- "Vriullop"
+ "Vriullop",
+ "Alvaro Vidal-Abarca"
]
},
"gadgets-desc": "Permet als usuaris personalitzar [[Special:Gadgets|ginys CSS i JavaScript]] a les seves [[Special:Preferences#mw-prefsection-gadgets|preferències]]",
@@ -23,5 +24,6 @@
"gadgets-export-title": "Exportació de ginys",
"gadgets-not-found": "No s'ha trobat el giny «$1».",
"gadgets-export-text": "Per a exportar el giny $1, feu clic al botó «{{int:gadgets-export-download}}», deseu el fitxer baixat,\naneu a Special:Import al wiki de destinació i pugeu-lo. Llavors afegiu el següent a la pàgina MediaWiki:Gadgets-definition:\n<pre>$2</pre>\nHeu de tenir els permisos adequats en el wiki de destinació (incloent-hi els permisos per editar missatges del sistema) i s'ha d'habilitar la importació de la pujada de fitxers.",
- "gadgets-export-download": "Baixa"
+ "gadgets-export-download": "Baixa",
+ "apihelp-query+gadgets-example-2": "Obtenir una llista dels ginys amb totes les propietats possibles"
}
diff --git a/extensions/Gadgets/i18n/de.json b/extensions/Gadgets/i18n/de.json
index b49a984c..290caabc 100644
--- a/extensions/Gadgets/i18n/de.json
+++ b/extensions/Gadgets/i18n/de.json
@@ -25,5 +25,18 @@
"gadgets-export-title": "Export der Helferlein",
"gadgets-not-found": "Helferlein „$1“ wurde nicht gefunden.",
"gadgets-export-text": "Um das Helferlein $1 zu exportieren, klicke auf die Schaltfläche „{{int:gadgets-export-download}}“ und speichere die heruntergeladene Datei. Gehe sodann zur Spezialseite Spezial:Import auf dem für den Import vorgesehenen Wiki und lade die Datei hoch. Füge danach den folgenden Text zur Seite MediaWiki:Gadgets-definition hinzu:\n<pre>$2</pre>\nDu musst über die notwendigen Berechtigungen auf dem für den Import vorgesehenen Wiki verfügen (einschließlich der Berechtigung, MediaWiki-Systemnachrichten zu bearbeiten). Zudem muss der Import von Datei-Uploads aktiviert sein.",
- "gadgets-export-download": "Herunterladen"
+ "gadgets-export-download": "Herunterladen",
+ "apihelp-query+gadgetcategories-description": "Gibt eine Liste mit Gadget-Kategorien zurück.",
+ "apihelp-query+gadgetcategories-param-names": "Namen der abzurufenden Kategorien.",
+ "apihelp-query+gadgetcategories-example-1": "Ruft eine Liste vorhandener Helferleinkategorien ab",
+ "apihelp-query+gadgets-description": "Gibt eine Liste der Helferlein zurück, die auf diesem Wiki verwendet werden.",
+ "apihelp-query+gadgets-param-categories": "Von welchen Kategorien die Helferlein abgerufen werden sollen.",
+ "apihelp-query+gadgets-param-ids": "Kennungen der abzurufenden Helferlein.",
+ "apihelp-query+gadgets-param-allowedonly": "Nur Helferlein auflisten, die für den aktuellen Benutzer erlaubt sind.",
+ "apihelp-query+gadgets-param-enabledonly": "Nur Helferlein auflisten, die vom aktuellen Benutzer aktiviert wurden.",
+ "apihelp-query+gadgets-example-1": "Ruft eine Liste der Helferlein zusammen mit ihren Beschreibungen ab",
+ "apihelp-query+gadgets-example-2": "Ruft eine Liste der Helferlein mit allen möglichen Eigenschaften ab",
+ "apihelp-query+gadgets-example-3": "Ruft eine Liste der Helferlein ab, die zur Kategorie „foo“ gehören",
+ "apihelp-query+gadgets-example-4": "Informationen über die Helferlein „foo“ und „bar“ abrufen",
+ "apihelp-query+gadgets-example-5": "Ruft eine Liste der Helferlein ab, die vom aktuellen Benutzer aktiviert wurden"
}
diff --git a/extensions/Gadgets/i18n/en.json b/extensions/Gadgets/i18n/en.json
index 02706581..7f14d624 100644
--- a/extensions/Gadgets/i18n/en.json
+++ b/extensions/Gadgets/i18n/en.json
@@ -1,23 +1,39 @@
{
- "@metadata": {
- "authors": [
- "Daniel Kinzler, brightbyte.de"
- ]
- },
- "gadgets-desc": "Lets users select custom [[Special:Gadgets|CSS and JavaScript gadgets]] in their [[Special:Preferences#mw-prefsection-gadgets|preferences]]",
- "prefs-gadgets": "Gadgets",
- "gadgets-prefstext": "Below is a list of special gadgets you can enable for your account.\nThese gadgets are mostly based on JavaScript, so JavaScript has to be enabled in your browser for them to work.\nNote that these gadgets will have no effect on this preferences page.\n\nAlso note that these special gadgets are not part of the MediaWiki software, and are usually developed and maintained by users on your local wiki.\nLocal administrators can edit the [[MediaWiki:Gadgets-definition|definitions]] and [[Special:Gadgets|descriptions]] of available gadgets.",
- "gadgets": "Gadgets",
- "gadgets-definition": "",
- "gadgets-title": "Gadgets",
- "gadgets-pagetext": "Below is a list of special gadgets users can enable on their [[Special:Preferences#mw-prefsection-gadgets|preferences page]], as defined by the [[MediaWiki:Gadgets-definition|definitions]].\nThis overview provides easy access to the system message pages that define each gadget's description and code.",
- "gadgets-uses": "Uses",
- "gadgets-required-rights": "Requires the following {{PLURAL:$2|right|rights}}:\n\n$1",
- "gadgets-required-skins": "Available on the {{PLURAL:$2|$1 skin|following skins: $1}}.",
- "gadgets-default": "Enabled for everyone by default.",
- "gadgets-export": "Export",
- "gadgets-export-title": "Gadget export",
- "gadgets-not-found": "Gadget \"$1\" not found.",
- "gadgets-export-text": "To export the $1 gadget, click on \"{{int:gadgets-export-download}}\" button, save the downloaded file,\ngo to Special:Import on destination wiki and upload it. Then add the following to MediaWiki:Gadgets-definition page:\n<pre>$2</pre>\nYou must have appropriate permissions on destination wiki (including the right to edit system messages) and import from file uploads must be enabled.",
- "gadgets-export-download": "Download"
-} \ No newline at end of file
+ "@metadata": {
+ "authors": [
+ "Daniel Kinzler, brightbyte.de"
+ ]
+ },
+ "gadgets-desc": "Lets users select custom [[Special:Gadgets|CSS and JavaScript gadgets]] in their [[Special:Preferences#mw-prefsection-gadgets|preferences]]",
+ "prefs-gadgets": "Gadgets",
+ "gadgets-prefstext": "Below is a list of special gadgets you can enable for your account.\nThese gadgets are mostly based on JavaScript, so JavaScript has to be enabled in your browser for them to work.\nNote that these gadgets will have no effect on this preferences page.\n\nAlso note that these special gadgets are not part of the MediaWiki software, and are usually developed and maintained by users on your local wiki.\nLocal administrators can edit the [[MediaWiki:Gadgets-definition|definitions]] and [[Special:Gadgets|descriptions]] of available gadgets.",
+ "gadgets": "Gadgets",
+ "gadgets-definition": "",
+ "gadgets-title": "Gadgets",
+ "gadgets-pagetext": "Below is a list of special gadgets users can enable on their [[Special:Preferences#mw-prefsection-gadgets|preferences page]], as defined by the [[MediaWiki:Gadgets-definition|definitions]].\nThis overview provides easy access to the system message pages that define each gadget's description and code.",
+ "gadgets-uses": "Uses",
+ "gadgets-required-rights": "Requires the following {{PLURAL:$2|right|rights}}:\n\n$1",
+ "gadgets-required-skins": "Available on the {{PLURAL:$2|$1 skin|following skins: $1}}.",
+ "gadgets-default": "Enabled for everyone by default.",
+ "gadgets-export": "Export",
+ "gadgets-export-title": "Gadget export",
+ "gadgets-not-found": "Gadget \"$1\" not found.",
+ "gadgets-export-text": "To export the $1 gadget, click on \"{{int:gadgets-export-download}}\" button, save the downloaded file,\ngo to Special:Import on destination wiki and upload it. Then add the following to MediaWiki:Gadgets-definition page:\n<pre>$2</pre>\nYou must have appropriate permissions on destination wiki (including the right to edit system messages) and import from file uploads must be enabled.",
+ "gadgets-export-download": "Download",
+ "apihelp-query+gadgetcategories-description": "Returns a list of gadget categories.",
+ "apihelp-query+gadgetcategories-param-prop": "What gadget category information to get:\n;name:Internal category name.\n;title:Category title.\n;members:Number of gadgets in category.",
+ "apihelp-query+gadgetcategories-param-names": "Names of categories to retrieve.",
+ "apihelp-query+gadgetcategories-example-1": "Get a list of existing gadget categories",
+ "apihelp-query+gadgetcategories-example-2": "Get all information about categories named \"foo\" and \"bar\"",
+ "apihelp-query+gadgets-description": "Returns a list of gadgets used on this wiki.",
+ "apihelp-query+gadgets-param-prop": "What gadget information to get:\n;id:Internal gadget ID.\n;metadata:The gadget metadata.\n;desc:Gadget description transformed into HTML (can be slow, use only if really needed).",
+ "apihelp-query+gadgets-param-categories": "Gadgets from what categories to retrieve.",
+ "apihelp-query+gadgets-param-ids": "IDs of gadgets to retrieve.",
+ "apihelp-query+gadgets-param-allowedonly": "List only gadgets allowed to current user.",
+ "apihelp-query+gadgets-param-enabledonly": "List only gadgets enabled by current user.",
+ "apihelp-query+gadgets-example-1": "Get a list of gadgets along with their descriptions",
+ "apihelp-query+gadgets-example-2": "Get a list of gadgets with all possible properties",
+ "apihelp-query+gadgets-example-3": "Get a list of gadgets belonging to category \"foo\"",
+ "apihelp-query+gadgets-example-4": "Get information about gadgets \"foo\" and \"bar\"",
+ "apihelp-query+gadgets-example-5": "Get a list of gadgets enabled by current user"
+}
diff --git a/extensions/Gadgets/i18n/es.json b/extensions/Gadgets/i18n/es.json
index 8b77afcf..e18e5151 100644
--- a/extensions/Gadgets/i18n/es.json
+++ b/extensions/Gadgets/i18n/es.json
@@ -6,7 +6,8 @@
"Muro de Aguas",
"Remember the dot",
"Sanbec",
- "Vivaelcelta"
+ "Vivaelcelta",
+ "Themasterriot"
]
},
"gadgets-desc": "Permite a los usuarios seleccionar [[Special:Gadgets|accesorios de CSS y JavaScript personailzados]]\nen sus [[Special:Preferences#mw-prefsection-gadgets|preferencias]].",
@@ -16,7 +17,7 @@
"gadgets-title": "Accesorios",
"gadgets-pagetext": "Debajo hay una lista de accesorios especiales que los usuarios pueden activar en sus [[Special:Preferences#mw-prefsection-gadgets|preferencias]], según la [[MediaWiki:Gadgets-definition|lista de definición de accesorios]]. Esta vista provee un acceso fácil a las páginas de mensajes del sistema que definen la descripción y el código de cada accesorio.",
"gadgets-uses": "Usos",
- "gadgets-required-rights": "Requiere {{PLURAL:$2|el siguiente derecho|los siguientes derechos}}:\n\n$1",
+ "gadgets-required-rights": "Requiere {{PLURAL:$2|el siguiente permiso|los siguientes permisos}}:\n\n$1",
"gadgets-required-skins": "Disponible {{PLURAL:$2|en la apariencia $1|en las siguientes apariencias: $1}}.",
"gadgets-default": "Activado para todos de manera predeterminada.",
"gadgets-export": "Exportar",
diff --git a/extensions/Gadgets/i18n/gl.json b/extensions/Gadgets/i18n/gl.json
index 25c806df..4d9f4588 100644
--- a/extensions/Gadgets/i18n/gl.json
+++ b/extensions/Gadgets/i18n/gl.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Alma",
- "Toliño"
+ "Toliño",
+ "Banjo"
]
},
"gadgets-desc": "Deixa que os usuarios seleccionen [[Special:Gadgets|trebellos CSS e JavaScript]] nas súas [[Special:Preferences#mw-prefsection-gadgets|preferencias]]",
@@ -19,5 +20,13 @@
"gadgets-export-title": "Exportación de trebellos",
"gadgets-not-found": "Non se atopou o trebello \"$1\".",
"gadgets-export-text": "Para exportar o trebello $1, prema sobre o botón \"{{int:gadgets-export-download}}\", garde o ficheiro descargado,\nvaia á páxina especial Special:Import do wiki de destino e cárgueo. A continuación, engada o seguinte texto na páxina MediaWiki:Gadgets-definition:\n<pre>$2</pre>\nDebe ter os permisos axeitados no wiki de destino (incluído o dereito de modificar as mensaxes do sistema) e a importación desde a carga de ficheiros debe estar activada.",
- "gadgets-export-download": "Descargar"
+ "gadgets-export-download": "Descargar",
+ "apihelp-query+gadgets-description": "Retornar unha lista dos trebellos usados nesta wiki.",
+ "apihelp-query+gadgets-param-allowedonly": "Listar só os trebellos permitidos para o usuario actual.",
+ "apihelp-query+gadgets-param-enabledonly": "Listar só os trebellos habilitados polo usuario actual.",
+ "apihelp-query+gadgets-example-1": "Amosar unha lista de trebellos xunto coas súas descricións",
+ "apihelp-query+gadgets-example-2": "Amosar unha lista de trebellos con tódalas propiedades posibles",
+ "apihelp-query+gadgets-example-3": "Amosar unha lista de trebellos que pertenzan á categoría \"foo\"",
+ "apihelp-query+gadgets-example-4": "Amosar información sobre os trebellos \"foo\" e \"bar\"",
+ "apihelp-query+gadgets-example-5": "Amosar unha lista dos trebellos habilitados para o usuario actual"
}
diff --git a/extensions/Gadgets/i18n/ilo.json b/extensions/Gadgets/i18n/ilo.json
index 1e21bcb3..8708397e 100644
--- a/extensions/Gadgets/i18n/ilo.json
+++ b/extensions/Gadgets/i18n/ilo.json
@@ -4,19 +4,35 @@
"Lam-ang"
]
},
- "gadgets-desc": "Agpalubos kadagiti agar-aramat nga agpili kadagiti naiduma a [[Special:Gadgets|CSS ken JavaScript a gadget]] iti [[Special:Preferences#mw-prefsection-gadgets|kakaykayatanda]]",
+ "gadgets-desc": "Agipalubos kadagiti agar-aramat nga agpili kadagiti naiduma a [[Special:Gadgets|CSS ken JavaScript a gadget]] iti [[Special:Preferences#mw-prefsection-gadgets|kakaykayatanda]]",
"prefs-gadgets": "Dagiti gadget",
- "gadgets-prefstext": "Dita baba ket listaan kadagiti naipangruna a gadget a mabalinmo a pakabaelan iti pakabilangam.\nDagitoy a gadget ket naibatay iti JavaScript, isunga masapul a pakabaelan ti JavaScript idiay \"pagbasabasam\" tapno agbalin dagitoy.\nLaglagipen a dagitoy a gadget ket awan ti pagbanaganna iti daytoy panid ti kakaykayatan.\n\nLaglagipen pay a dagitoy a naipangruna a gadget ket saan a paset ti sopwer ti MediaWiki, ken kadawyan a pinarang-ay ken tinartaripato babaen dagiti agar-aramat iti lokal a wiki.\nDagiti lokal nga administrador ket mabalinda nga urnosen dagiti [[MediaWiki:Gadgets-definition|panangipalplawag]] ken dagiti [[Special:Gadgets|deskripsion]] dagiti magun-od a gadget.",
+ "gadgets-prefstext": "Dita baba ket listaan kadagiti naipangruna a gadget a mabalinmo a pakabaelan iti pakabilangam.\nDagitoy a gadget ket naibatay iti JavaScript, isu a masapul a pakabaelan ti JavaScript idiay \"pagbasabasam\" tapno agbalin dagitoy.\nLaglagipen a dagitoy a gadget ket awan ti pagbanaganna iti daytoy panid ti kakaykayatan.\n\nLaglagipen pay a dagitoy a naipangruna a gadget ket saan a paset ti sopwer ti MediaWiki, ken kadawyan a pinarang-ay ken tinartaripato babaen dagiti agar-aramat iti lokal a wiki.\nDagiti lokal nga administrador ket mabalinda nga urnosen dagiti [[MediaWiki:Gadgets-definition|panangipalplawag]] ken dagiti [[Special:Gadgets|deskripsion]] dagiti magun-od a gadget.",
"gadgets": "Dagiti gadget",
"gadgets-title": "Dagiti gadget",
- "gadgets-pagetext": "Dita baba ket listaan dagiti naipangruna a gadget a mabalin a pakabaelan dagiti agar-aramat iti bukodda a [[Special:Preferences#mw-prefsection-gadgets|panid ti kakaykayatan]], a kas naipalawag babaen dagiti [[MediaWiki:Gadgets-definition|pannakaipalawag]].\nDaytoy a nakabuklan ket mangted ti nalaka a panagserrek kadagiti panid ti mensahe ti sistema a mangipalawag ti tungngal maysa a deskripsion ken kodigo ti gadget.",
- "gadgets-uses": "Usar",
+ "gadgets-pagetext": "Dita baba ket listaan dagiti naipangruna a gadget a mabalin a pakabaelan dagiti agar-aramat iti bukodda a [[Special:Preferences#mw-prefsection-gadgets|panid ti kakaykayatan]], a kas naipalawag babaen dagiti [[MediaWiki:Gadgets-definition|pannakaipalawag]].\nDaytoy a pakabuklan ket mangited iti nalaka a panagserrek kadagiti panid ti mensahe ti sistema a mangipalawag ti tungngal maysa a deskripsion ken kodigo ti gadget.",
+ "gadgets-uses": "Us-usar",
"gadgets-required-rights": "Masapul ti sumaganad a {{PLURAL:$2|karbengan|karkarbengan}}:\n\n$1",
"gadgets-required-skins": "Mabalin a magun-od {{PLURAL:$2|iti $1 a kudil|kadagiti sumaganad a kudil: $1}}.",
- "gadgets-default": "Pakabaelan a kasisigud para kadagiti amin.",
- "gadgets-export": "Agipan",
- "gadgets-export-title": "Agipan ti gadget",
- "gadgets-not-found": "Saan a nabirukan ti \"$1\" a gadget.",
- "gadgets-export-text": "Ti panag-ipan ti $1 a gadget, pinduten ti buton ti \"{{int:gadgets-export-download}}\", idulin ti naikarga a papeles,\nmapan idiay Special:Import iti papanan a wiki ken ikarganto. Kalpasanna inayon dagiti sumaganad idiay panid ti MediaWiki:Gadgets-definition:\n<pre>$2</pre>\nNasken nga addaanka ti maitunos a pammalubos iti papanan a wiki (mairaman ti karbengan a panag-urnos kadagiti mensahe ti sistema) ken nasken a napakabaelan ti panagikarga kadagiti papeles.",
- "gadgets-export-download": "Agikaraga"
+ "gadgets-default": "Napakabaelan para iti amin babaen ti kasisigud.",
+ "gadgets-export": "Eksport",
+ "gadgets-export-title": "Eksport ti gadget",
+ "gadgets-not-found": "Saan a nabirukan ti gadget ti \"$1\".",
+ "gadgets-export-text": "Ti panageksport ti gadget ti $1, pinduten ti buton ti \"{{int:gadgets-export-download}}\", idulin ti naikarga a papeles,\nmapan idiay Special:Import iti papanan a wiki ken ikarganto. Kalpasanna inayon dagiti sumaganad idiay panid ti MediaWiki:Gadgets-definition:\n<pre>$2</pre>\nNasken nga addaanka ti maitunos a pammalubos iti papanan a wiki (mairaman ti karbengan a panagurnos kadagiti mensahe ti sistema) ken nasken a napakabaelan ti panagikarga kadagiti papeles.",
+ "gadgets-export-download": "Agikarga",
+ "apihelp-query+gadgetcategories-description": "Mangisubli iti listaan ti katkategoria ti gadget",
+ "apihelp-query+gadgetcategories-param-prop": "Ania ti maala a pakaammo ti kategoria ti gadget:\n;name:Internal a nagan ti kategoria.\n;title:Titulo ti kategoria.\n;members:Bilang dagiti gadget iti kategoria.",
+ "apihelp-query+gadgetcategories-param-names": "Nagnagan ti katkategoria nga alaen.",
+ "apihelp-query+gadgetcategories-example-1": "Mangala iti listaan ti adda a katkategoria ti gadget",
+ "apihelp-query+gadgetcategories-example-2": "Mangala kadagiti amin a pakaammo a maipanggep ti katkategoria a nanaganan ti \"foo\" ken \"bar\"",
+ "apihelp-query+gadgets-description": "Mangisubli ti listaan dagiti gadget a naus-usar iti daytoy a wiki.",
+ "apihelp-query+gadgets-param-prop": "Ania ti maala a pakaaamo ti gadget:\n;id:ID ti internal a gadget.\n;metadata:Ti metadata ti gadget.\n;desc:Deskripsion ti gadget a nabaliwan iti HTML (mabalin a nabuntog, usaren laeng no masapul unay).",
+ "apihelp-query+gadgets-param-categories": "Dagiti gadget a pakaalaan ti katkategoria.",
+ "apihelp-query+gadgets-param-ids": "Dagiti ID ti maala a gadget.",
+ "apihelp-query+gadgets-param-allowedonly": "Ilista laeng dagiti gadget a maipalubos iti agdama nga agar-aramat.",
+ "apihelp-query+gadgets-param-enabledonly": "Ilista laeng dagiti gadget a pinakabaelan iti agdama nga agar-aramat.",
+ "apihelp-query+gadgets-example-1": "Mangala kadagiti gadget a kakuyog dagiti deskripsion",
+ "apihelp-query+gadgets-example-2": "Mangala kadagiti gadget nga addaan kadagiti amin a mabalin a tagtagikua",
+ "apihelp-query+gadgets-example-3": "Mangala ti listaan dagiti gadget a tagikua ti kategoria \"foo\"",
+ "apihelp-query+gadgets-example-4": "Mangala kadagiti pakaammo a manipanggep kadagiti gadegt ti \"foo\" ken \"bar\"",
+ "apihelp-query+gadgets-example-5": "Mangala ti listaan dagiti gadget a pinakabaelan iti agdama nga agar-aramat."
}
diff --git a/extensions/Gadgets/i18n/ja.json b/extensions/Gadgets/i18n/ja.json
index e7d47507..85bec42a 100644
--- a/extensions/Gadgets/i18n/ja.json
+++ b/extensions/Gadgets/i18n/ja.json
@@ -7,7 +7,8 @@
"Mzm5zbC3",
"Shirayuki",
"Whym",
- "青子守歌"
+ "青子守歌",
+ "SkyDaisy9"
]
},
"gadgets-desc": "利用者が [[Special:Gadgets|CSS や JavaScript のカスタム ガジェット]]を[[Special:Preferences#mw-prefsection-gadgets|{{int:preferences}}]]で選択できるようにする",
@@ -24,5 +25,21 @@
"gadgets-export-title": "ガジェットの書き出し",
"gadgets-not-found": "ガジェット「$1」が見つかりません。",
"gadgets-export-text": "$1 ガジェットを書き出すには、「{{int:gadgets-export-download}}」ボタンをクリックし、ダウンロードしたファイルを保存し、\n配布先ウィキの Special:Import に行ってアップロードしてください。そして、以下を MediaWiki:Gadgets-definition ページに追加してください:\n<pre>$2</pre>\nこの操作には、配布先のウィキで適切な権限 (システムメッセージの編集権限を含む) が必要で、さらにファイル アップロードによる取り込みが有効になっている必要があります。",
- "gadgets-export-download": "ダウンロード"
+ "gadgets-export-download": "ダウンロード",
+ "apihelp-query+gadgetcategories-description": "ガジェットのカテゴリの一覧を返します。",
+ "apihelp-query+gadgetcategories-param-prop": "ガジェットのカテゴリのどの情報を取得するかです:\n;name:内部カテゴリ名です。\n;title:カテゴリ名です。\n;members:カテゴリ内のガジェット数です。",
+ "apihelp-query+gadgetcategories-param-names": "取得するカテゴリの名前です。",
+ "apihelp-query+gadgetcategories-example-1": "既存のガジェットのカテゴリの一覧を取得",
+ "apihelp-query+gadgetcategories-example-2": "「foo」および「bar」という名前のカテゴリについてすべての情報を取得",
+ "apihelp-query+gadgets-description": "このウィキで使用されているガジェットの一覧を返します。",
+ "apihelp-query+gadgets-param-prop": "ガジェットのどの情報を取得するかです:\n;id:内部ガジェット ID です。\n;metadata:ガジェットのメタデータです。\n;desc:ガジェットの説明を HTML 形式に変換したものです (時間がかかる場合があるため、本当に必要な場合のみ使用してください)。",
+ "apihelp-query+gadgets-param-categories": "どのカテゴリからガジェットを取得するかです。",
+ "apihelp-query+gadgets-param-ids": "取得するガジェットの ID です。",
+ "apihelp-query+gadgets-param-allowedonly": "現在の利用者が使用できるガジェットのみを列挙します。",
+ "apihelp-query+gadgets-param-enabledonly": "現在の利用者が有効にしているガジェットのみを列挙します。",
+ "apihelp-query+gadgets-example-1": "ガジェットの一覧を、各ガジェットの説明も含めて取得",
+ "apihelp-query+gadgets-example-2": "ガジェットの一覧を、すべてのプロパティを含めて取得",
+ "apihelp-query+gadgets-example-3": "カテゴリ「foo」に属するガジェットの一覧を取得",
+ "apihelp-query+gadgets-example-4": "ガジェット「foo」および「bar」についての情報を取得",
+ "apihelp-query+gadgets-example-5": "現在の利用者が有効にしているガジェットの一覧を取得"
}
diff --git a/extensions/Gadgets/i18n/krc.json b/extensions/Gadgets/i18n/krc.json
index be5fb0b0..c8f71c2f 100644
--- a/extensions/Gadgets/i18n/krc.json
+++ b/extensions/Gadgets/i18n/krc.json
@@ -4,5 +4,6 @@
"Iltever"
]
},
- "gadgets": "Гаджетле"
+ "gadgets": "Гаджетле",
+ "gadgets-export-download": "Эндир"
}
diff --git a/extensions/Gadgets/i18n/ksh.json b/extensions/Gadgets/i18n/ksh.json
index df95238d..8696091e 100644
--- a/extensions/Gadgets/i18n/ksh.json
+++ b/extensions/Gadgets/i18n/ksh.json
@@ -7,7 +7,7 @@
},
"gadgets-desc": "En iere [[Special:Preferences#mw-prefsection-gadgets|Enstellunge]] künne Metmaacher [[Special:Gadgets|CSS- un JavaScrip-Gadgets]] en- un ußschallde.",
"prefs-gadgets": "Gadgets",
- "gadgets-prefstext": "Hee is en Liss met bestemmpte <i lang=\"en\">Gadgets</i>,\ndi för jede Metmaacher enjeschalldt wäde könne.\nDi boue miets op Javascrip op, drom moß mer't em Brauser\nenschallde, domet dat klapp.\n<i lang=\"en\">Gadgets</i> werke nimmohls op dä Sigg hee,\nmet Dinge persönleche Enstellunge.\n\nOpjepaß! <i lang=\"en\">Gadgets</i>, sin kei Schtöck vun MediaWiki,\nsöndern sin extra em Wiki installeet, un sin vun de Wiki-Bedriever\noder Metmaacher ußjedaach un enjerescht.\nWä et Rääsch doför hät, kann se övver de Sigge\n[[MediaWiki:Gadgets-definition|<i lang=\"en\">Gadgets</i> fäßlääje]]\nun [[Special:Gadgets|<i lang=\"en\">Gadgets</i> beschriewe]]\nenreschte un ändere.",
+ "gadgets-prefstext": "Heh is en Leß met beschtemmpte <i xml:lang=\"en\" lang=\"en\">Gadgets</i>,\ndi för jehde Metmaacher enjeschalldt wähde könne.\nDi boue miehts op JavaSkrepte op, drom moß mer dat em Brauser\nenschallde, domet dat klapp.\n\n<i xml:lang=\"en\" lang=\"en\">Gadgets</i> werke nimmohls op dä Sigg\nmet de päsöhnlesche Enschtällonge.\n\nOpjepaß! <i xml:lang=\"en\" lang=\"en\">Gadgets</i>, sin kei Schtöck vum MedijaWikki,\nsöndern sin extra em Wikki enschtalleht, un sin vun de Wikki-Bedrihver\nudder de Metmaacher ußjedaach un enjeerescht.\nWä et Rääsch doför hät, kann se övver de Sigge\n[[MediaWiki:Gadgets-definition|<i xml:lang=\"en\" lang=\"en\">Gadgets</i> fäßlääje]]\nun [[Special:Gadgets|<i xml:lang=\"en\" lang=\"en\">Gadgets</i> beschriewe]]\nenreeschte, un verändere.",
"gadgets": "<i lang=\"en\">Gadgets</i>",
"gadgets-title": "<i lang=\"en\">Gadgets</i>",
"gadgets-pagetext": "He kütt en Liss met spezielle <i lang=\"en\">Gadgets</i>,\ndi jede Metmaacher övver sing\n[[Special:Preferences#mw-prefsection-gadgets|päsönlije Enstellunge]] enschallte kann.\nSe wääde övver [[MediaWiki:Gadgets-definition]] enjerecht.\nDie Övverseech hee jit enne direkte Zohjang op di Texte em Wiki,\nwo de Projramme, un de Erklierunge för de <i lang=\"en\">Gadgets</i> dren enthallde\nsin.",
@@ -15,9 +15,12 @@
"gadgets-required-rights": "Bruch {{PLURAL:$2|dat Rääsch:|de Rääschde:|kein besönder Rääschde.}}\n\n$1",
"gadgets-required-skins": "Kann jebruch wääde met {{PLURAL:$2|dä Bedeenbovverfläsch:|dä Bedeenbovverfläsche:|keine vun dä Bedeenbovverfläsche.}} $1",
"gadgets-default": "Shtandattmääßesh för jeeder_ein ennjeschalldt.",
- "gadgets-export": "Expotteere",
+ "gadgets-export": "Äxpottehre",
"gadgets-export-title": "<i lang=\"en\">Gadgets</i> expotteere",
"gadgets-not-found": "<i lang=\"en\">Gadget</i> „$1“ nit jefonge.",
"gadgets-export-text": "Öm dat <i lang=\"en\">Gadget</i> „$1“ ze expotteere, donn op dä Knopp „{{int:gadgets-export-download}}“ klecke, un donn dann de eronger jelaade Dattei faßhallde. Dann jangk en dat Wiki, woh De dat empotteere wells, un doh op die Extrasigg <code lang=\"en\">Spezial:Import</code>, un donn se huh laade. Dann deihs De en däm Wiki op dä Sigg <code lang=\"en\">MediaWiki:Gadgets-definition</code> dat heh dobei:\n<pre>$2</pre>\nDo moß en däm Wiki de nüüdijje Rääschde han, och dat Rääsch, aan Täxte un Nohreeschte vum Systeem ze ändere, un et Empoteere vun huhjelaade Dateije moß zohjelohße sin.",
- "gadgets-export-download": "Eronger laade"
+ "gadgets-export-download": "Eronger laade",
+ "apihelp-query+gadgetcategories-param-names": "Nahme vun dä Saachjroppe zom Holle.",
+ "apihelp-query+gadgetcategories-example-2": "Holl alle Aanjahbe övver de Saachjroppe met dä Nahme „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">foo</code>“ un „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">bar</code>“.",
+ "apihelp-query+gadgets-param-prop": "What gadget information to get:\n;id:Internal gadget ID.\n;metadata:The gadget metadata.\n;desc:Gadget description transformed into HTML (can be slow, use only if really needed).\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bgadgets-param-prop/en\n-->"
}
diff --git a/extensions/Gadgets/i18n/lb.json b/extensions/Gadgets/i18n/lb.json
index 6a4a8577..65310c13 100644
--- a/extensions/Gadgets/i18n/lb.json
+++ b/extensions/Gadgets/i18n/lb.json
@@ -20,5 +20,7 @@
"gadgets-export-title": "Export vu Gadgeten",
"gadgets-not-found": "Gadget \"$1\" net fonnt.",
"gadgets-export-text": "Fir de Gadget $1 z'exportéieren klickt w.e.g. op de(n) \"{{int:gadgets-export-download}}\"-Knäppchen, späichert den erofgelueden Fichier, gitt op Spezial:Import op der Zil-Wiki a luet en do erop. Duerno setzt der op d'MediaWiki:Gadgets-Definitiouns Säit dëst derbäi:<pre>$2</pre>\nDir musst déi erfuerdert Rechter(inklusiv d'Recht fir Systemmessagen z'änneren) op der Zil-Wiki hunn an den Import vun eropgelueden Fichiere muss ageschalt sinn.",
- "gadgets-export-download": "Eroflueden"
+ "gadgets-export-download": "Eroflueden",
+ "apihelp-query+gadgets-param-allowedonly": "Nëmme Gadgeten opzielen déi fir den aktuelle Benotzer erlaabt sinn.",
+ "apihelp-query+gadgets-example-5": "D'Lëscht vun de Gadgete kréien déi den aktuelle Benotzer aktivéiert huet"
}
diff --git a/extensions/Gadgets/i18n/lrc.json b/extensions/Gadgets/i18n/lrc.json
index aabf3a56..8e9214c5 100644
--- a/extensions/Gadgets/i18n/lrc.json
+++ b/extensions/Gadgets/i18n/lrc.json
@@ -10,6 +10,10 @@
"gadgets-title": "گجت یا",
"gadgets-uses": "کاروردیا",
"gadgets-export": "وه صحرا ديئن",
+ "gadgets-export-title": "وه در دئن گجت",
"gadgets-not-found": "گجت \"$1\" پیدا نبی.",
- "gadgets-export-download": "گرتن"
+ "gadgets-export-download": "گرتن",
+ "apihelp-query+gadgetcategories-example-2": "گرتن همه دونسمنیا دباره دسه یایی که نومشو فو و باره",
+ "apihelp-query+gadgets-param-enabledonly": "فقط نومگه گجتیایی که سی کاریاری ایسنی کنشتگر بینه.",
+ "apihelp-query+gadgets-example-5": "نومگه گجتیایی که سی ای کاریار کنشتگر بینه بئیریت."
}
diff --git a/extensions/Gadgets/i18n/mai.json b/extensions/Gadgets/i18n/mai.json
new file mode 100644
index 00000000..819080af
--- /dev/null
+++ b/extensions/Gadgets/i18n/mai.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "prefs-gadgets": "उपकरण (ग्याजेट)",
+ "gadgets-prefstext": "नीचा विशेष उपकरण सभ कऽ सूची दएल गेल अछि, जें अहाँ अपन खाताके लेल सक्षम कऽ सकएत छी।\nऐ उपकरण अधिकांशतः जावास्क्रिप्ट पर आधारित अछि, ऐ लेल एकरा कार्यशील होवएक लेल अपन ब्राउजर में जावास्क्रिप्ट सक्षम होवाक चाही।\nध्यान देब कि इ उपकरण सभ सँ अहाँके वरीयता पृष्ठमें कोनो असर नै पाडत।\n\nएहो ध्यान देब कि ऐ विशेष उपकरण मिडियाविकी सफ्टवेयरके भाग नै छी, आर प्रायः प्रयोक्ता सभ द्वारा हुनकर स्थानीय विकि पर विकसित एवं अनुरक्षित कएल जाएत अछि।\nस्थानीय प्रबंधक उपकरण सभकऽ [[MediaWiki:Gadgets-definition|परिभाषा सभ]] एवं [[Special:Gadgets|विवरण]] सम्पादित कऽ सकएत अछि।",
+ "gadgets": "उपकरण",
+ "gadgets-title": "उपकरण",
+ "gadgets-pagetext": "नीचा सभ [[MediaWiki:Gadgets-definition|परिभाषित]] विशेष उपकरण सभकऽ सूची दएल गएल अछि, जें कियो प्रयोक्ता [[Special:Preferences#mw-prefsection-gadgets|अपन वरीयता\n]] सँ सक्षम कऽ सकएत अछि।\nई समीक्षा सभ उपकरण सभके विवरण आर कोड भेल अंतरफल पत्र पृष्ठ सभकऽ जडी प्रदान करएत अछि।",
+ "gadgets-uses": "उपयोग",
+ "gadgets-required-rights": "निम्नलिखित {{PLURAL:$2|अधिकार|अधिकार सभ}} कऽ आवश्यकता अछि:\n\n$1",
+ "gadgets-required-skins": "उपलब्ध अछि {{PLURAL:$2|$1 स्किन|निम्नलिखित स्किन: $1}}.",
+ "gadgets-default": "डिफल्ट रूप सँ सभ के लेल सक्षम अछि।",
+ "gadgets-export": "निर्यात",
+ "gadgets-export-title": "उपकरण (ग्याजेट) निर्यात",
+ "gadgets-not-found": "ग्याजेट \"$1\" नै भेटल।",
+ "gadgets-export-text": "$1 उपकरण निर्यात करए के लेल \"{{int:gadgets-export-download}}\" बटन पर क्लिक करु, अवारोपन (डाउनलोड) कएल गेल फाइल रक्षण करु, लक्ष्य विकि पर Special:Import पर जाउ आर फाइल अपलोड करु। तत्पश्चात MediaWiki:Gadgets-definition में निम्न पाठ जोडू:\n<pre>$2</pre>\nमुदा अहाँ लग लक्ष्य विकि पर उपयुक्त अधिकार होवाक चाही(जए में अंतरफल पत्रके सम्पादित करएक अधिकार सामेल अछि)आर विकिमे फाइल द्वारा आयात सक्षम होवाक चाही।",
+ "gadgets-export-download": "अवारोपन",
+ "apihelp-query+gadgetcategories-description": "गैजेट उपसंवर्ग सूचीके वापस करु"
+}
diff --git a/extensions/Gadgets/i18n/mk.json b/extensions/Gadgets/i18n/mk.json
index 65972a93..6c86a47d 100644
--- a/extensions/Gadgets/i18n/mk.json
+++ b/extensions/Gadgets/i18n/mk.json
@@ -7,7 +7,7 @@
},
"gadgets-desc": "Им овозможува на корисниците во нивните [[Special:Preferences#mw-prefsection-gadgets|нагодувања]] да одберат свои сопствени [[Special:Gadgets|CSS- и JavaScript-алатки]]",
"prefs-gadgets": "Алатки",
- "gadgets-prefstext": "Ова е список на псоебни алатки кои можете да ги активирате за вашата корисничка сметка.\nАлатките се основани претежно на JavaScript, па затоа морате да имате овозможено JavaScript на вашиот прелистувач за да можат да работат.\nИмајте предвид дека алатките нема да имаат никаков ефект врз оваа страница за нагодување.\n\nИсто така имајте на ум дека овие псоебни алатки не се дел од програмската опрема на МедијаВики и истите се создаваат и одржуваат од корисници на вашето локално вики.\nЛокалните администратори можат да ги уредуваат и прилагодуваат алатките користејќи се со [[MediaWiki:Gadgets-definition|определби]] и [[Special:Gadgets|описи]].",
+ "gadgets-prefstext": "Ова е список на псоебни алатки кои можете да ги активирате за вашата корисничка сметка.\nАлатките се основани претежно на JavaScript, па затоа морате да имате овозможено JavaScript на вашиот прелистувач за да можат да работат.\nИмајте предвид дека алатките нема да имаат никаков ефект врз оваа страница за нагодување.\n\nИсто така имајте на ум дека овие псоебни алатки не се дел од програмската опрема на МедијаВики и истите се создаваат и одржуваат од корисници на вашето месно вики.\nМесните администратори можат да ги уредуваат и прилагодуваат алатките користејќи се со [[MediaWiki:Gadgets-definition|определби]] и [[Special:Gadgets|описи]].",
"gadgets": "Алатки",
"gadgets-title": "Алатки",
"gadgets-pagetext": "Ова е список на псоебни алатки кои корисниците можат да ги активираат на нивната [[Special:Preferences#mw-prefsection-gadgets|страница за нагодување]], наведени во [[MediaWiki:Gadgets-definition|определувањата]].\nОвој преглед дава лесен пристап до системските пораки кои го определуваат описот и кодот на секоја алатка.",
@@ -19,5 +19,21 @@
"gadgets-export-title": "Извоз на алатка",
"gadgets-not-found": "Алатката „$1“ не е пронајдена.",
"gadgets-export-text": "За да ја извезете алатката $1, стиснете на копчето „{{int:gadgets-export-download}}“, зачувајте ја преземената податотека,\nодете на Special:Import на целното вики и подигнете ја. Потоа на страницата MediaWiki:Gadgets-definition внесете го следново:\n<pre>$2</pre>\nМора да имате соодветни дозволи на целното вики (вклучувајќи го правото за уредување на системски пораки), и мора да биде овозможен увозот од подигања.",
- "gadgets-export-download": "Преземи"
+ "gadgets-export-download": "Преземи",
+ "apihelp-query+gadgetcategories-description": "Дава список на категории за алатки.",
+ "apihelp-query+gadgetcategories-param-prop": "Кои информации за категориите за алатки да се дадат:\n;name: Внатрешен назив на категоријата.\n;title: Наслов на категоријата.\n;members: Број на алатки во категоријата.",
+ "apihelp-query+gadgetcategories-param-names": "Називи на категориите што треба да се дадат.",
+ "apihelp-query+gadgetcategories-example-1": "Дај список на постоечки категории за алатки",
+ "apihelp-query+gadgetcategories-example-2": "Дај ги сите информации за категориите наречени „foo“ и „bar“",
+ "apihelp-query+gadgets-description": "Дава список на алатки што се користат на ова вики.",
+ "apihelp-query+gadgets-param-prop": "Кои информации за алатките да се дадат:\n;id: Внатрешна назнака на алатката.\n;metadata: Метаподатоци за алатката.\n;desc: Описот на алатката преобразен во HTML (може да биде бавно, па користете го само ако навистина ви е потребно).",
+ "apihelp-query+gadgets-param-categories": "За кои категории да се дадат алатките.",
+ "apihelp-query+gadgets-param-ids": "Назнаки на алатките што треба да се дадат.",
+ "apihelp-query+gadgets-param-allowedonly": "Испиши ги само алатките што му се дозволени на тековниот корисник.",
+ "apihelp-query+gadgets-param-enabledonly": "Испиши ги само алатките што ги има вклучено тековниот корисник.",
+ "apihelp-query+gadgets-example-1": "Дај список на алатки заедно со нивните описи",
+ "apihelp-query+gadgets-example-2": "Дај список на алатки со сите можни својства",
+ "apihelp-query+gadgets-example-3": "Дај список на алатки што è припаѓаат на категоријата „foo“",
+ "apihelp-query+gadgets-example-4": "Дај информации за алатките „foo“ и „bar“",
+ "apihelp-query+gadgets-example-5": "Дај список на алатки што ги има вклучено тековниот корисник."
}
diff --git a/extensions/Gadgets/i18n/nds-nl.json b/extensions/Gadgets/i18n/nds-nl.json
index 3095fa82..e60bd417 100644
--- a/extensions/Gadgets/i18n/nds-nl.json
+++ b/extensions/Gadgets/i18n/nds-nl.json
@@ -6,9 +6,9 @@
},
"gadgets-desc": "Laot gebrukers [[Special:Gadgets|CSS en JavaScripts]] aktiveren in der eigen [[Special:Preferences#mw-prefsection-gadgets|veurkeuren]]",
"prefs-gadgets": "Technies spul",
- "gadgets-prefstext": "Hieronder steet spesiaal techiniese spul da'j inschakelen kunnen.\n't Is veurnamelik ebaseerd op JavaScript, dus JavaScript mö'j an hebben staon in joew webkieker um t te laoten warken.\nAl dit techniese spul hef gien invleud op disse veurkeurenpagina.\n\nDisse techniese snufjes maken oek gien deel uut van de MediaWiki-programmatuur, en t wörden meestentieds ontwikkeld en onderhouwen\ndeur gebrukers van joew eigen wiki.\nBeheerders kunnen t beschikbaore techniese spul angeven in [[MediaWiki:Gadgets-definition|defenisies]] en [[Special:Gadgets|beschrievingen]].",
+ "gadgets-prefstext": "Hieronder steet spesiaal techinies spul wa'j anzetten kunnen.\nt Is veurnamelik ebaseerd op JavaScript, dus JavaScript mu'j an hebben staon in joew webkieker um t te laoten warken.\nAl dit techniese spul hef gien invleud op disse veurkeurenzied.\n\nDisse techniese snufjes maken oek gien deel uut van de MediaWiki-programmatuur, en t wördt meestentieds ontwikkeld en onderhouwen\ndeur gebrukers van joew eigen wiki.\nBeheerders kunnen t beschikbaore techniese spul angeven in [[MediaWiki:Gadgets-definition|definisies]] en [[Special:Gadgets|beschrievingen]].",
"gadgets": "Technies spul",
"gadgets-title": "Technies spul",
- "gadgets-pagetext": "Hieronder steet spesiaal technies spul die gebrukers in kunnen schakelen bie [[Special:Preferences#mw-prefsection-gadgets|mien veurkeuren]], zo as in-esteld in de [[MediaWiki:Gadgets-definition|defenisies]].\nDit overzichte biejt eenvoudige toegang tot de systeemtekstzied waor de beschrieving en de programmakode van elke technies snufjen steet.",
+ "gadgets-pagetext": "Hieronder steet spesiaal technies spul die gebrukers in kunnen schakelen bie [[Special:Preferences#mw-prefsection-gadgets|mien veurkeuren]], zo as in-esteld in de [[MediaWiki:Gadgets-definition|defenisies]].\nDit overzicht biejt eenvoudige toegang tot de systeemtekstzied waor de beschrieving en de programmakode van elke technies snufjen steet.",
"gadgets-uses": "Gebruuk"
}
diff --git a/extensions/Gadgets/i18n/pa.json b/extensions/Gadgets/i18n/pa.json
index c6572850..5b2c839e 100644
--- a/extensions/Gadgets/i18n/pa.json
+++ b/extensions/Gadgets/i18n/pa.json
@@ -9,8 +9,8 @@
"gadgets-title": "ਗੈਜਟ",
"gadgets-uses": "ਵਰਤਦਾ ਹੈ",
"gadgets-default": "ਮੂਲ ਤੌਰ 'ਤੇ ਸਾਰਿਆਂ ਲਈ ਚਾਲੂ ਹੈ।",
- "gadgets-export": "ਨਿਰਯਾਤ",
- "gadgets-export-title": "ਗੈਜਟ ਨਿਰਯਾਤ",
+ "gadgets-export": "ਬਰਾਮਦ",
+ "gadgets-export-title": "ਜੁਗਤਾਂ ਦੀ ਬਰਾਮਦ",
"gadgets-not-found": "ਗੈਜਟ \"$1\" ਨਹੀਂ ਲੱਭਾ।",
"gadgets-export-download": "ਡਾਊਨਲੋਡ ਕਰੋ"
}
diff --git a/extensions/Gadgets/i18n/pms.json b/extensions/Gadgets/i18n/pms.json
index 46f3add7..500be790 100644
--- a/extensions/Gadgets/i18n/pms.json
+++ b/extensions/Gadgets/i18n/pms.json
@@ -20,5 +20,15 @@
"gadgets-export-title": "Esportassion d'acessòri",
"gadgets-not-found": "Acessòri \"$1\" pa trovà.",
"gadgets-export-text": "Për esporté l'acessòri $1, sgnaché an sël boton \"{{int:gadgets-export-download}}\", salvé l'archivi dëscarià, andé a Special:Import an sla wiki ëd destinassion e carielo. Peui gionté lòn ch'a-i é sì-sota a la pàgina MediaWiki:Gadgets-definition:\n<pre>$2</pre>\nA-i é da manca d'avèj ij përmess aproprià an sla wiki ëd destinassion (comprèis ij drit për modifiché ij mëssagi ëd sistema) e l'amportassion da archivi carià a dev esse abilità.",
- "gadgets-export-download": "Dëscaria"
+ "gadgets-export-download": "Dëscaria",
+ "apihelp-query+gadgetcategories-description": "A smon na lista ëd categorìe d'acessòri.",
+ "apihelp-query+gadgetcategories-param-prop": "Che anformassion an sla categorìa d'acessòri oten-e:\n;name:Nòm ëd la categorìa anterna.\n;title:Tìtol ëd la categorìa.\n;members:Nùmer d'acessòri ant la categorìa.",
+ "apihelp-query+gadgetcategories-param-names": "Nùmer ëd categorìe da oten-e.",
+ "apihelp-query+gadgetcategories-example-1": "Oten-e na lista dle categorìe d'acessòri esistente",
+ "apihelp-query+gadgetcategories-example-2": "Oten-e tute j'anformassion an sle categorìe ciamà «foo» e «bar»",
+ "apihelp-query+gadgets-description": "A smon na lista d'acessòri dovrà su costa wiki.",
+ "apihelp-query+gadgets-param-prop": "Che anformassion an sj'acessòri oten-e:\n;id:Identificativ antern dl'acessòri.\n;metadata:Ij metadàit dl'acessòri.\n;desc:Descrissio dl'acessòri trasformà an HTML (a peul esse lent, dovré mach s'a-i na j'é pròpi damanca).",
+ "apihelp-query+gadgets-param-categories": "Da che categorìe ciapé j'acessòri.",
+ "apihelp-query+gadgets-param-ids": "Identificativ dj'acessòri da ciapé.",
+ "apihelp-query+gadgets-param-allowedonly": "Listé mach j'acessòri consentì a l'utent atual."
}
diff --git a/extensions/Gadgets/i18n/pt-br.json b/extensions/Gadgets/i18n/pt-br.json
index 041b2a81..8027d29a 100644
--- a/extensions/Gadgets/i18n/pt-br.json
+++ b/extensions/Gadgets/i18n/pt-br.json
@@ -6,7 +6,8 @@
"GoEThe",
"Helder.wiki",
"Rafael Vargas",
- "555"
+ "555",
+ "He7d3r"
]
},
"gadgets-desc": "Permite que os usuários selecionem [[Special:Gadgets|\"gadgets\" JavaScript e CSS]] personalizados nas suas [[Special:Preferences#mw-prefsection-gadgets|preferências]]",
diff --git a/extensions/Gadgets/i18n/pt.json b/extensions/Gadgets/i18n/pt.json
index ef4180e3..1cd77b0d 100644
--- a/extensions/Gadgets/i18n/pt.json
+++ b/extensions/Gadgets/i18n/pt.json
@@ -5,7 +5,8 @@
"Helder.wiki",
"Luckas",
"Malafaya",
- "555"
+ "555",
+ "He7d3r"
]
},
"gadgets-desc": "Permite que os utilizadores seleccionem [[Special:Gadgets|''\"gadgets\"'' em JavaScript e CSS]] personalizados nas suas [[Special:Preferences#mw-prefsection-gadgets|preferências]]",
diff --git a/extensions/Gadgets/i18n/qqq.json b/extensions/Gadgets/i18n/qqq.json
index c97ce326..9fe59aea 100644
--- a/extensions/Gadgets/i18n/qqq.json
+++ b/extensions/Gadgets/i18n/qqq.json
@@ -11,17 +11,18 @@
"Shirayuki",
"Siebrand",
"The Evil IP address",
- "Umherirrender"
+ "Umherirrender",
+ "Liuxinyu970226"
]
},
- "gadgets-desc": "{{desc|name=Gadgets|url=http://www.mediawiki.org/wiki/Extension:Gadgets}}",
+ "gadgets-desc": "{{desc|name=Gadgets|url=https://www.mediawiki.org/wiki/Extension:Gadgets}}",
"prefs-gadgets": "In Gadgets extension. The name of a tab in [[Special:Preferences#mw-prefsection-gadgets|Special:Preferences]] where user set their preferences for the extension.\n\n{{Identical|Gadgets}}",
"gadgets-prefstext": "In Gadgets extension. This is the explanation text displayed under the Gadgets tab in [[Special:Preferences#mw-prefsection-gadgets|Special:Preferences]].",
"gadgets": "{{doc-special|Gadgets}}\n{{Identical|Gadgets}}",
"gadgets-definition": "{{notranslate}}",
"gadgets-title": "{{Identical|Gadgets}}",
"gadgets-pagetext": "Used as intro text in [[Special:Gadgets]].",
- "gadgets-uses": "This is used as a verb in third-person singular. It appears in front of a script name. Example: \"''Uses: Gadget-UTCLiveClock.js''\"\n\nSee [[meta:Special:Gadgets|Gadgets page in meta.wikimedia.org]]",
+ "gadgets-uses": "This is used as a verb in third-person singular. It appears in front of a script name. Example: \"''Uses: Gadget-UTCLiveClock.js''\"\n\nSee [[meta:Special:Gadgets|Gadgets page in meta.wikimedia.org]]\n{{Identical|Use}}",
"gadgets-required-rights": "Parameters:\n* $1 - a list in wikitext.\n* $2 - the number of items in list $1 for PLURAL use.",
"gadgets-required-skins": "Parameters:\n* $1 - a comma separated list.\n* $2 - the number of items in list $1 for PLURAL use.",
"gadgets-default": "Used in [[Special:Gadgets]], if the extension is enabled for everyone by the Wiki's default settings.",
@@ -29,5 +30,21 @@
"gadgets-export-title": "Used as page title. Example: [[Special:Gadgets/export/editbuttons]]",
"gadgets-not-found": "Used as error message. Parameters:\n* $1 - gadget name",
"gadgets-export-text": "Used as page description in [[Special:Gadgets]].\n\nRefers to {{msg-mw|Gadgets-export-download}}.\n\nSee example: [[Special:Gadgets/export/editbuttons]]\n\nFollowed by the \"Export\" form.\n\nParameters:\n* $1 - gadget name\n* $2 - gadget definition (code)",
- "gadgets-export-download": "Use the verb for this message. Submit button.\n{{Identical|Download}}"
+ "gadgets-export-download": "Use the verb for this message. Submit button.\n{{Identical|Download}}",
+ "apihelp-query+gadgetcategories-description": "{{doc-apihelp-description|query+gadgetcategories}}",
+ "apihelp-query+gadgetcategories-param-prop": "{{doc-apihelp-param|query+gadgetcategories|prop}}",
+ "apihelp-query+gadgetcategories-param-names": "{{doc-apihelp-param|query+gadgetcategories|names}}",
+ "apihelp-query+gadgetcategories-example-1": "{{doc-apihelp-example|query+gadgetcategories}}",
+ "apihelp-query+gadgetcategories-example-2": "{{doc-apihelp-example|query+gadgetcategories}}",
+ "apihelp-query+gadgets-description": "{{doc-apihelp-description|query+gadgets}}",
+ "apihelp-query+gadgets-param-prop": "{{doc-apihelp-param|query+gadgets|prop}}",
+ "apihelp-query+gadgets-param-categories": "{{doc-apihelp-param|query+gadgets|categories}}",
+ "apihelp-query+gadgets-param-ids": "{{doc-apihelp-param|query+gadgets|ids}}",
+ "apihelp-query+gadgets-param-allowedonly": "{{doc-apihelp-param|query+gadgets|allowedonly}}",
+ "apihelp-query+gadgets-param-enabledonly": "{{doc-apihelp-param|query+gadgets|enabledonly}}",
+ "apihelp-query+gadgets-example-1": "{{doc-apihelp-example|query+gadgets}}",
+ "apihelp-query+gadgets-example-2": "{{doc-apihelp-example|query+gadgets}}",
+ "apihelp-query+gadgets-example-3": "{{doc-apihelp-example|query+gadgets}}",
+ "apihelp-query+gadgets-example-4": "{{doc-apihelp-example|query+gadgets}}",
+ "apihelp-query+gadgets-example-5": "{{doc-apihelp-example|query+gadgets}}"
}
diff --git a/extensions/Gadgets/i18n/ru.json b/extensions/Gadgets/i18n/ru.json
index b9c1259e..cf4d06ab 100644
--- a/extensions/Gadgets/i18n/ru.json
+++ b/extensions/Gadgets/i18n/ru.json
@@ -8,7 +8,8 @@
"Kaganer",
"MaxSem",
"VasilievVV",
- "Александр Сигачёв"
+ "Александр Сигачёв",
+ "Okras"
]
},
"gadgets-desc": "Позволяет участникам выбирать в своих [[Special:Preferences#mw-prefsection-gadgets|настройках]] те или иные [[Special:Gadgets|CSS- и JavaScript-гаджеты]]",
@@ -25,5 +26,10 @@
"gadgets-export-title": "Экспорт гаджета",
"gadgets-not-found": "Гаджет «$1» не найден.",
"gadgets-export-text": "Для экспорта гаджета $1, нажмите кнопку «{{int:gadgets-export-download}}», сохраните загруженный файл,\nперейдите на страницу Special:Import целевой вики и загрузите файл. Затем добавьте следующие строки на страницу MediaWiki:Gadgets-definition:\n<pre>$2</pre>\nВы должны иметь соответствующие разрешения в целевой вики (в том числе право на редактирование системных сообщений), также на сервере должна быть включена настройка импорта из файлов.",
- "gadgets-export-download": "Скачать"
+ "gadgets-export-download": "Скачать",
+ "apihelp-query+gadgetcategories-description": "Возвращает список категорий гаджетов.",
+ "apihelp-query+gadgetcategories-example-1": "Получить список существующих категорий гаджетов",
+ "apihelp-query+gadgets-description": "Возвращает список гаджетов, используемых в этой вики.",
+ "apihelp-query+gadgets-param-ids": "Идентификаторы гаджетов для получения.",
+ "apihelp-query+gadgets-example-5": "Получить список гаджетов, включённых у данного участника"
}
diff --git a/extensions/Gadgets/i18n/sv.json b/extensions/Gadgets/i18n/sv.json
index 19eaa81c..2c7cdfa8 100644
--- a/extensions/Gadgets/i18n/sv.json
+++ b/extensions/Gadgets/i18n/sv.json
@@ -7,7 +7,8 @@
"Diupwijk",
"Lejonel",
"M.M.S.",
- "Skalman"
+ "Skalman",
+ "Lokal Profil"
]
},
"gadgets-desc": "Låter användare aktivera personliga [[Special:Gadgets|CSS- och JavaScript-finesser]] genom sina [[Special:Preferences#mw-prefsection-gadgets|inställningar]]",
@@ -24,5 +25,20 @@
"gadgets-export-title": "Exportera finess",
"gadgets-not-found": "Tillägg \"$1\" hittades inte.",
"gadgets-export-text": "För att exportera tillägg $1, klicka på \"{{int:gadgets-export-download}}\"-knappen, spara den nedladdade filen, gå till Special:Importera på destinationswikin och ladda upp den. Lägg sedan till följande till MediaWiki:Gadgets-definition sidan:\n<pre>$2</pre>\nDu måste ha tillräckliga behörigheter på destinationswikin (inklusive möjlighet att ändra systemmeddelanden) och att importera från filuppladningar måste vara aktiverad.",
- "gadgets-export-download": "Ladda ner"
+ "gadgets-export-download": "Ladda ner",
+ "apihelp-query+gadgetcategories-description": "Returnerar en lista för finesskategorier.",
+ "apihelp-query+gadgetcategories-param-prop": "Vilken information om finesskategorier som ska tas med:\n;name:Internt kategorinamn.\n;title:Kategorititel.\n;members:Antal finesser i kategorin.",
+ "apihelp-query+gadgetcategories-param-names": "Namn på kategorier som ska hämtas.",
+ "apihelp-query+gadgetcategories-example-1": "Få en lista över befintliga finesskategorier",
+ "apihelp-query+gadgetcategories-example-2": "Få alla information om kategorier med namnen \"foo\" och \"bar\"",
+ "apihelp-query+gadgets-description": "Returnerar en lista med finesser som används på denna wiki.",
+ "apihelp-query+gadgets-param-prop": "Vilken finessinformation som ska tas med:\n;id:Internt finess-ID.\n;metadata:Finessmetadata.\n;desc:Finessbeskrivning omvandlad till HTML (kan vara långsam, använd bara om det verkligen behövs).",
+ "apihelp-query+gadgets-param-ids": "ID för finesser som ska hämtas.",
+ "apihelp-query+gadgets-param-allowedonly": "Listan bara finesser som är tillåts för den aktuella användaren.",
+ "apihelp-query+gadgets-param-enabledonly": "Listan bara finesser aktiverade av den aktuella användaren.",
+ "apihelp-query+gadgets-example-1": "Få en lista över finesser tillsammans med deras beskrivningar",
+ "apihelp-query+gadgets-example-2": "Få en lista över finesser med alla möjliga egenskaper",
+ "apihelp-query+gadgets-example-3": "Få en lista över finesser som tillhör kategorin \"foo\"",
+ "apihelp-query+gadgets-example-4": "Få information om finesserna \"foo\" och \"bar\"",
+ "apihelp-query+gadgets-example-5": "Få en lista över finesser aktiverade av den aktuella användaren"
}
diff --git a/extensions/Gadgets/i18n/vi.json b/extensions/Gadgets/i18n/vi.json
index bf833e02..bfceff82 100644
--- a/extensions/Gadgets/i18n/vi.json
+++ b/extensions/Gadgets/i18n/vi.json
@@ -21,5 +21,16 @@
"gadgets-export-title": "Xuất tiện ích",
"gadgets-not-found": "Không tìm thấy tiện ích “$1”.",
"gadgets-export-text": "Để xuất tiện ích $1, hãy bấm nút “{{int:gadgets-export-download}}”, lưu tập tin được tải về, mở trang Special:Import trên wiki đích và tải nó lên. Sau đó, thêm mã này vào trang MediaWiki:Gadgets-definition:\n<pre>$2</pre>\nBạn phải có đủ quyền truy cập trên wiki đích (bao gồm quyền sửa đổi thông điệp hệ thống) và wiki phải bật chức năng xuất từ tập tin tải lên.",
- "gadgets-export-download": "Tải về"
+ "gadgets-export-download": "Tải về",
+ "apihelp-query+gadgetcategories-description": "Cho ra danh sách thể loại tiện ích.",
+ "apihelp-query+gadgetcategories-param-names": "Tên của các thể loại để lấy.",
+ "apihelp-query+gadgetcategories-example-1": "Lấy danh sách các thể loại tiện ích đang tồn tại",
+ "apihelp-query+gadgetcategories-example-2": "Lấy tất cả thông tin về các thể loại có tên “foo” và “bar”",
+ "apihelp-query+gadgets-description": "Cho ra danh sách các tiện ích được sử dụng trên wiki này.",
+ "apihelp-query+gadgets-param-ids": "ID của các tiện ích để lấy.",
+ "apihelp-query+gadgets-param-allowedonly": "Chỉ liệt kê các tiện ích mà người dùng hiện tại có phép sử dụng.",
+ "apihelp-query+gadgets-param-enabledonly": "Chỉ liệt kê các tiện ích được kích hoạt bởi người dùng hiện tại.",
+ "apihelp-query+gadgets-example-3": "Lấy danh sách các tiện ích thuộc thể loại “foo”",
+ "apihelp-query+gadgets-example-4": "Lấy thông tin về các tiện ích “foo” và “bar”",
+ "apihelp-query+gadgets-example-5": "Lấy danh sách các tiện ích được kích hoạt bởi người dùng hiện tại"
}
diff --git a/extensions/Gadgets/i18n/zh-hans.json b/extensions/Gadgets/i18n/zh-hans.json
index 8b2d9ad7..7e93d020 100644
--- a/extensions/Gadgets/i18n/zh-hans.json
+++ b/extensions/Gadgets/i18n/zh-hans.json
@@ -10,7 +10,11 @@
"Xiaomingyan",
"Yfdyh000",
"阿pp",
- "Mywood"
+ "Mywood",
+ "Impersonator 1",
+ "Liuxinyu970226",
+ "御坂美琴",
+ "Dimension"
]
},
"gadgets-desc": "允许用户在其[[Special:Preferences#mw-prefsection-gadgets|系统设置]]中选择自定义[[Special:Gadgets|CSS和JavaScript工具]]",
@@ -20,12 +24,28 @@
"gadgets-title": "小工具",
"gadgets-pagetext": "下面是用户可以在他们的[[Special:Preferences#mw-prefsection-gadgets|设置页面]]启用的特殊小工具的列表,由[[MediaWiki:Gadgets-definition|定义]]确定。这个概览提供便捷访问确定每个小工具的说明和代码的系统信息页面的途径。",
"gadgets-uses": "使用",
- "gadgets-required-rights": "需要以下{{PLURAL:$2|权限|权限}}:\n\n$1",
+ "gadgets-required-rights": "需要以下{{PLURAL:$2|权限}}:\n\n$1",
"gadgets-required-skins": "可用在{{PLURAL:$2|$1外观|以下外观:$1}}。",
"gadgets-default": "默认所有人启用。",
"gadgets-export": "导出",
"gadgets-export-title": "导出小工具",
"gadgets-not-found": "找不到“$1”小工具。",
"gadgets-export-text": "要导出$1小工具,请单击“{{int:gadgets-export-download}}”按钮,保存下载的文件,前往目标wiki的Special:Import并将文件上传。然后添加下内容至MediaWiki:Gadgets-definition页面:\n<pre>$2</pre>\n您必须在目标wiki上拥有适当的权限(包括编辑系统信息的权限),并且启用从文件上传导入。",
- "gadgets-export-download": "下载"
+ "gadgets-export-download": "下载",
+ "apihelp-query+gadgetcategories-description": "返回小工具分类列表。",
+ "apihelp-query+gadgetcategories-param-prop": "要获取小工具分类的什么信息:\n;name:内部分类名称。\n;title:分类标题。\n;members:在该分类中的小工具数量。",
+ "apihelp-query+gadgetcategories-param-names": "要获取的分类名。",
+ "apihelp-query+gadgetcategories-example-1": "获取现有小工具分类的列表",
+ "apihelp-query+gadgetcategories-example-2": "获取所有有关名称为“foo”和“bar”的分类的信息",
+ "apihelp-query+gadgets-description": "返回一个本Wiki上的小工具的列表。",
+ "apihelp-query+gadgets-param-prop": "要获取的小工具信息:\n;id:内部小工具ID。\n;metadata:小工具元数据。\n;desc:小工具说明转换成HTML(较慢,只在需要的时候使用)。",
+ "apihelp-query+gadgets-param-categories": "来自要检索的分类的小工具。",
+ "apihelp-query+gadgets-param-ids": "要检索的小工具ID。",
+ "apihelp-query+gadgets-param-allowedonly": "只列出允许当前用户使用的小工具。",
+ "apihelp-query+gadgets-param-enabledonly": "只列出当前用户启用的小工具。",
+ "apihelp-query+gadgets-example-1": "获取小工具列表,连带它们的说明",
+ "apihelp-query+gadgets-example-2": "获取含全部可能属性的小工具列表",
+ "apihelp-query+gadgets-example-3": "获取属于分类“foo”的小工具列表",
+ "apihelp-query+gadgets-example-4": "获取有关小工具“foo”和“bar”的信息",
+ "apihelp-query+gadgets-example-5": "获取当前用户启用的小工具列表"
}
diff --git a/extensions/Gadgets/i18n/zh-hant.json b/extensions/Gadgets/i18n/zh-hant.json
index 52124f65..af73a87d 100644
--- a/extensions/Gadgets/i18n/zh-hant.json
+++ b/extensions/Gadgets/i18n/zh-hant.json
@@ -10,7 +10,8 @@
"Mark85296341",
"Shinjiman",
"Waihorace",
- "Cwlin0416"
+ "Cwlin0416",
+ "LNDDYL"
]
},
"gadgets-desc": "讓使用者可以於 [[Special:Preferences#mw-prefsection-gadgets|偏好設定]] 中自訂 [[Special:Gadgets|CSS 與 JavaScript 的小工具]]",
@@ -26,6 +27,6 @@
"gadgets-export": "匯出",
"gadgets-export-title": "匯出小工具",
"gadgets-not-found": "查無小工具 \"$1\"。",
- "gadgets-export-text": "要匯出 $1 小工具,請點選 \"{{int:gadgets-export-download}}\" 按鈕,並儲存下載的檔案,\n至目地 Wiki 的 Special:Import 頁面將其上傳。然後將下列文字新增到 MediaWiki:Gadgets-definition 頁面:\n<pre>$2</pre>\n您必須在在目地的 Wiki 上擁有適當的權限 (如:編輯系統訊息),且須開啟透過檔案上傳匯入的功能。",
+ "gadgets-export-text": "要匯出 $1 小工具,請點選「{{int:gadgets-export-download}}」按鈕,並儲存下載的檔案,前往目標 Wiki 的 Special:Import 並將其上傳。然後將下列文字新增到 MediaWiki:Gadgets-definition 頁面:\n<pre>$2</pre>\n您必須擁有目標 Wiki 的適當權限(包括編輯系統訊息的權限),且須開啟透過檔案上傳匯入的功能。",
"gadgets-export-download": "下載"
}
diff --git a/extensions/ImageMap/ImageMap.i18n.php b/extensions/ImageMap/ImageMap.i18n.php
deleted file mode 100644
index 4b01ab03..00000000
--- a/extensions/ImageMap/ImageMap.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim899c0a5482ee74aa' ) ) {
- function wfJsonI18nShim899c0a5482ee74aa( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim899c0a5482ee74aa';
-}
diff --git a/extensions/ImageMap/ImageMap.php b/extensions/ImageMap/ImageMap.php
index 081eeaa6..71b9d9b2 100644
--- a/extensions/ImageMap/ImageMap.php
+++ b/extensions/ImageMap/ImageMap.php
@@ -1,45 +1,14 @@
<?php
-/**
- * ImageMap extension - Allows clickable HTML image maps.
- *
- * @link https://www.mediawiki.org/wiki/Extension:ImageMap Documentation
- *
- * @file
- * @ingroup Extensions
- * @package MediaWiki
- * @author Tim Starling
- * @copyright (C) 2007 Tim Starling
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
- */
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( 'This file is a MediaWiki extension, it is not a valid entry point' );
-}
-
-//self executing anonymous function to prevent global scope assumptions
-call_user_func( function() {
- $dir = __DIR__ . '/';
- $GLOBALS['wgMessagesDirs']['ImageMap'] = __DIR__ . '/i18n';
- $GLOBALS['wgExtensionMessagesFiles']['ImageMap'] = $dir . 'ImageMap.i18n.php';
- $GLOBALS['wgAutoloadClasses']['ImageMap'] = $dir . 'ImageMap_body.php';
- $GLOBALS['wgHooks']['ParserFirstCallInit'][] = 'wfSetupImageMap';
-
- $GLOBALS['wgExtensionCredits']['parserhook']['ImageMap'] = array(
- 'path' => __FILE__,
- 'name' => 'ImageMap',
- 'author' => 'Tim Starling',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:ImageMap',
- 'descriptionmsg' => 'imagemap_desc',
- );
-
- $GLOBALS['wgParserTestFiles'][] = $dir . 'imageMapParserTests.txt';
-} );
-
-/**
- * @param $parser Parser
- * @return bool
- */
-function wfSetupImageMap( &$parser ) {
- $parser->setHook( 'imagemap', array( 'ImageMap', 'render' ) );
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'ImageMap' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['ImageMap'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for ImageMap extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
return true;
+} else {
+ die( 'This version of the ImageMap extension requires MediaWiki 1.25+' );
}
diff --git a/extensions/ImageMap/ImageMap_body.php b/extensions/ImageMap/ImageMap_body.php
index 7b53285e..86a54f08 100644
--- a/extensions/ImageMap/ImageMap_body.php
+++ b/extensions/ImageMap/ImageMap_body.php
@@ -29,6 +29,15 @@ class ImageMap {
const NONE = 4;
/**
+ * @param Parser $parser
+ * @return bool
+ */
+ public static function onParserFirstCallInit( Parser &$parser ) {
+ $parser->setHook( 'imagemap', array( 'ImageMap', 'render' ) );
+ return true;
+ }
+
+ /**
* @param $input
* @param $params
* @param $parser Parser
diff --git a/extensions/ImageMap/extension.json b/extensions/ImageMap/extension.json
new file mode 100644
index 00000000..df8b3169
--- /dev/null
+++ b/extensions/ImageMap/extension.json
@@ -0,0 +1,23 @@
+{
+ "name": "ImageMap",
+ "author": "Tim Starling",
+ "url": "https://www.mediawiki.org/wiki/Extension:ImageMap",
+ "descriptionmsg": "imagemap_desc",
+ "type": "parserhook",
+ "MessagesDirs": {
+ "ImageMap": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "ParserFirstCallInit": [
+ "ImageMap::onParserFirstCallInit"
+ ]
+ },
+ "AutoloadClasses": {
+ "ImageMap": "ImageMap_body.php"
+ },
+ "ParserTestFiles": [
+ "imageMapParserTests.txt"
+ ]
+}
diff --git a/extensions/ImageMap/i18n/ce.json b/extensions/ImageMap/i18n/ce.json
index 6306112f..5e1d1571 100644
--- a/extensions/ImageMap/i18n/ce.json
+++ b/extensions/ImageMap/i18n/ce.json
@@ -7,7 +7,7 @@
},
"imagemap_desc": "Таро хуьлуьйту картан суьрта таӀийча латораш билгалдан <code>&lt;imagemap&gt;</code> теган гӀуьнца",
"imagemap_invalid_image": "ГӀалат: нийса дац я ишта сурт дац кху чохь",
- "imagemap_no_link": "ГӀалат: $1 могӀанан чаккхехь нийса йоцу хьажораг ю",
+ "imagemap_no_link": "ГӀалат: $1 могӀанан чаккхехь нийса йоцу хьажорг ю",
"imagemap_invalid_title": "ГӀалат: могӀана $1 хьажориган корта нийса яц",
"imagemap_description": "Суьртах лаьцна"
}
diff --git a/extensions/ImageMap/i18n/diq.json b/extensions/ImageMap/i18n/diq.json
index 10dffda9..c5eafd2a 100644
--- a/extensions/ImageMap/i18n/diq.json
+++ b/extensions/ImageMap/i18n/diq.json
@@ -7,8 +7,8 @@
},
"imagemap_desc": "pê şuxulnayişê etiketê <code>&lt;imagemap&gt;</code>i destur dano gırewtox xeritayê resmi bıtıkın",
"imagemap_no_image": "xeta: şıma gani satıro ewwil de yew resm nişan bıkeri",
- "imagemap_invalid_image": "xeta: resım ya çino ya zi meqbul niyo",
- "imagemap_bad_image": "xeta: no pel de resım biyo qereliste",
+ "imagemap_invalid_image": "Xeta: resım ya çıniyo ya zi meqbul niyo.",
+ "imagemap_bad_image": "Xeta: Resım na pele de biyo qereliste.",
"imagemap_no_link": "xeta: peyniyê satıro $1. de yew gıreyo meqbul çino.",
"imagemap_invalid_title": "xeta:satıro $1. de gıre de sernameyo nemeqbul esto.",
"imagemap_missing_coord": "xeta:satıro $1. de qey şekli koordinat tayê",
diff --git a/extensions/ImageMap/i18n/lrc.json b/extensions/ImageMap/i18n/lrc.json
index 9fbead5a..7f522123 100644
--- a/extensions/ImageMap/i18n/lrc.json
+++ b/extensions/ImageMap/i18n/lrc.json
@@ -4,5 +4,8 @@
"Mogoeilor"
]
},
+ "imagemap_bad_image": "خطا:عسگی که ها د ای بلگه ها د نومگه سئ.",
+ "imagemap_invalid_title": "خطا:داسون نامعتور سی هومپیوند خط $1.",
+ "imagemap_invalid_coord": "خطا:تیارگه نامعتور د خط $1، واس یه گل شماره با.",
"imagemap_description": "دباره ای عسگ"
}
diff --git a/extensions/ImageMap/i18n/nl.json b/extensions/ImageMap/i18n/nl.json
index b8532230..7ff42728 100644
--- a/extensions/ImageMap/i18n/nl.json
+++ b/extensions/ImageMap/i18n/nl.json
@@ -7,7 +7,7 @@
},
"imagemap_desc": "Maakt aanklikbare imagemaps mogelijk met de tag <code>&lt;imagemap&gt;</code>",
"imagemap_no_image": "Fout: geef een afbeelding op in de eerste regel",
- "imagemap_invalid_image": "Fout: de afbeelding is corrupt of bestaat niet",
+ "imagemap_invalid_image": "Fout: de afbeelding is beschadigd of bestaat niet",
"imagemap_bad_image": "Fout: de afbeelding staat op de zwarte lijst voor deze pagina",
"imagemap_no_link": "Fout: er is geen geldige koppeling aangetroffen aan het einde van regel $1",
"imagemap_invalid_title": "Fout: er staat een ongeldige titel in de koppeling op regel $1",
diff --git a/extensions/ImageMap/i18n/pt-br.json b/extensions/ImageMap/i18n/pt-br.json
index 77404fbc..19d7f769 100644
--- a/extensions/ImageMap/i18n/pt-br.json
+++ b/extensions/ImageMap/i18n/pt-br.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Carla404",
- "Eduardo.mps"
+ "Eduardo.mps",
+ "Dianakc"
]
},
"imagemap_desc": "Permite mapas de imagem clicáveis no lado do cliente usando a marca <code>&lt;imagemap&gt;</code>",
@@ -10,7 +11,7 @@
"imagemap_invalid_image": "Erro: imagem inválida ou inexistente",
"imagemap_bad_image": "Erro: a imagem está na lista negra para esta página",
"imagemap_no_link": "Erro: não foi encontrada uma ligação válida ao final da linha $1",
- "imagemap_invalid_title": "Erro: título inválido na ligação da linha $1",
+ "imagemap_invalid_title": "Erro: título inválido no link da linha $1",
"imagemap_missing_coord": "Erro: coordenadas insuficientes para formar uma figura na linha $1",
"imagemap_unrecognised_shape": "Erro: figura não reconhecida na linha $1. Cada linha precisa iniciar com: <code>default</code>, <code>rect</code>, <code>circle</code> ou <code>poly</code>",
"imagemap_invalid_coord": "Erro: coordenada inválida na linha $1, é necessário que seja um número",
diff --git a/extensions/ImageMap/i18n/qqq.json b/extensions/ImageMap/i18n/qqq.json
index 8baa60ed..8f7406f9 100644
--- a/extensions/ImageMap/i18n/qqq.json
+++ b/extensions/ImageMap/i18n/qqq.json
@@ -8,7 +8,7 @@
"Umherirrender"
]
},
- "imagemap_desc": "{{desc|name=Image Map|url=http://www.mediawiki.org/wiki/Extension:ImageMap}}",
+ "imagemap_desc": "{{desc|name=Image Map|url=https://www.mediawiki.org/wiki/Extension:ImageMap}}",
"imagemap_no_image": "Used as error message.\n\nThis message indicates that an image must be specified in the first line.",
"imagemap_invalid_image": "Used as error message.",
"imagemap_bad_image": "Used as error message.",
diff --git a/extensions/ImageMap/i18n/sr-ec.json b/extensions/ImageMap/i18n/sr-ec.json
index cfebc6df..6ee44081 100644
--- a/extensions/ImageMap/i18n/sr-ec.json
+++ b/extensions/ImageMap/i18n/sr-ec.json
@@ -9,15 +9,15 @@
]
},
"imagemap_desc": "Омогућава клијентској страни кликабилну мапу коришћњењм ознаке <code>&lt;imagemap&gt;</code>.",
- "imagemap_no_image": "Грешка: Неопходно је одредити слику у првој линији.",
- "imagemap_invalid_image": "Грешка: Слика је лоша или непостојећа.",
+ "imagemap_no_image": "Грешка: неопходно је одредити слику у првој линији.",
+ "imagemap_invalid_image": "Грешка: слика је лоша или непостоји.",
"imagemap_bad_image": "Грешка: слика се налази на црном списку за ову страну",
- "imagemap_no_link": "Грешка: Није пронађена ниједна ваљана веза на крају линије $1.",
+ "imagemap_no_link": "Грешка: није пронађена ниједна ваљана веза на крају линије $1.",
"imagemap_invalid_title": "Грешка: лош наслов у вези у линији $1.",
- "imagemap_missing_coord": "Грешка: Нема довољно координата за криву у линији $1.",
- "imagemap_unrecognised_shape": "Грешка: Непрепозната крива у линији $1, свака линија мора почети једном од: <code>default</code>, <code>rect</code>, <code>circle</code> или <code>poly</code>.",
- "imagemap_invalid_coord": "Грешка: Лоше координате у линији $1; морају бити број.",
- "imagemap_invalid_desc": "Грешка: Лоше desc одређење, мора бити једно од: <code>$1</code>.",
+ "imagemap_missing_coord": "Грешка: нема довољно координата за облик на линији $1.",
+ "imagemap_unrecognised_shape": "Грешка: непознат облик на линији $1, свака линија мора почети једном од: <code>default</code>, <code>rect</code>, <code>circle</code> или <code>poly</code>.",
+ "imagemap_invalid_coord": "Грешка: лоше координате у линији $1; морају бити број.",
+ "imagemap_invalid_desc": "Грешка: лоша спецификација desc, мора бити једно од: <code>$1</code>.",
"imagemap_description": "О слици",
"imagemap_desc_types": "горе-десно, доле-десно, доле-лево, горе-лево, нема",
"imagemap_poly_odd": "Грешка: нађен је полигон са непарним бројем координата у линији $1"
diff --git a/extensions/ImageMap/i18n/sr-el.json b/extensions/ImageMap/i18n/sr-el.json
index fc783b94..6b712923 100644
--- a/extensions/ImageMap/i18n/sr-el.json
+++ b/extensions/ImageMap/i18n/sr-el.json
@@ -6,15 +6,15 @@
]
},
"imagemap_desc": "Omogućava klijentskoj strani klikabilnu mapu korišćnjenjm oznake <code>&lt;imagemap&gt;</code>.",
- "imagemap_no_image": "Greška: Neophodno je odrediti sliku u prvoj liniji.",
- "imagemap_invalid_image": "Greška: Slika je loša ili nepostojeća.",
+ "imagemap_no_image": "Greška: neophodno je odrediti sliku u prvoj liniji.",
+ "imagemap_invalid_image": "Greška: slika je loša ili nepostoji.",
"imagemap_bad_image": "Greška: slika se nalazi na crnom spisku za ovu stranu",
- "imagemap_no_link": "Greška: Nije pronađena nijedna valjana veza na kraju linije $1.",
+ "imagemap_no_link": "Greška: nije pronađena nijedna valjana veza na kraju linije $1.",
"imagemap_invalid_title": "Greška: loš naslov u vezi u liniji $1.",
- "imagemap_missing_coord": "Greška: Nema dovoljno koordinata za krivu u liniji $1.",
- "imagemap_unrecognised_shape": "Greška: Neprepoznata kriva u liniji $1, svaka linija mora početi jednom od: <code>default</code>, <code>rect</code>, <code>circle</code> ili <code>poly</code>.",
- "imagemap_invalid_coord": "Greška: Loše koordinate u liniji $1; moraju biti broj.",
- "imagemap_invalid_desc": "Greška: Loše desc određenje, mora biti jedno od: <code>$1</code>.",
+ "imagemap_missing_coord": "Greška: nema dovoljno koordinata za oblik na liniji $1.",
+ "imagemap_unrecognised_shape": "Greška: nepoznat oblik na liniji $1, svaka linija mora početi jednom od: <code>default</code>, <code>rect</code>, <code>circle</code> ili <code>poly</code>.",
+ "imagemap_invalid_coord": "Greška: loše koordinate u liniji $1; moraju biti broj.",
+ "imagemap_invalid_desc": "Greška: loša specifikacija desc, mora biti jedno od: <code>$1</code>.",
"imagemap_description": "O ovoj slici",
"imagemap_desc_types": "gore-desno, dole-desno, dole-levo, gore-levo, nema",
"imagemap_poly_odd": "Greška: nađen je poligon sa neparnim brojem koordinata u liniji $1"
diff --git a/extensions/ImageMap/i18n/sv.json b/extensions/ImageMap/i18n/sv.json
index 7de2f692..79af5b31 100644
--- a/extensions/ImageMap/i18n/sv.json
+++ b/extensions/ImageMap/i18n/sv.json
@@ -14,7 +14,7 @@
"imagemap_no_link": "Fel: ingen giltig länk fanns i slutet av rad $1",
"imagemap_invalid_title": "Fel: felaktig titel i länken på rad $1",
"imagemap_missing_coord": "Fel: koordinater saknas för området på rad $1",
- "imagemap_unrecognised_shape": "Fel: okänd områdesform på rad $1, varje rad måste börja med något av följande: <code>default</code>, <code>rect</code>, <code>circle</code> or <code>poly</code>",
+ "imagemap_unrecognised_shape": "Fel: Okänd områdesform på rad $1, varje rad måste börja med något av följande: <code>default</code>, <code>rect</code>, <code>circle</code> eller <code>poly</code>",
"imagemap_invalid_coord": "Fel: ogiltig koordinat på rad $1, måste vara ett tal",
"imagemap_invalid_desc": "Fel: ogiltig specifikation av desc, den måste var en av följande: <code>$1</code>",
"imagemap_description": "Bildinformation",
diff --git a/extensions/InputBox/InputBox.classes.php b/extensions/InputBox/InputBox.classes.php
index a9a920f9..4cdcbe9c 100644
--- a/extensions/InputBox/InputBox.classes.php
+++ b/extensions/InputBox/InputBox.classes.php
@@ -15,6 +15,7 @@ class InputBox {
private $mType = '';
private $mWidth = 50;
private $mPreload = '';
+ private $mPreloadparams = array();
private $mEditIntro = '';
private $mSummary = '';
private $mNosummary = '';
@@ -44,7 +45,11 @@ class InputBox {
// Split caches by language, to make sure visitors do not see a cached
// version in a random language (since labels are in the user language)
$this->mParser->getOptions()->getUserLangObj();
- $this->mParser->getOutput()->addModuleStyles( 'ext.inputBox.styles' );
+ $this->mParser->getOutput()->addModuleStyles( array(
+ 'ext.inputBox.styles',
+ 'mediawiki.ui.input',
+ 'mediawiki.ui.checkbox',
+ ) );
}
public function render() {
@@ -52,6 +57,7 @@ class InputBox {
switch ( $this->mType ) {
case 'create':
case 'comment':
+ $this->mParser->getOutput()->addModules( 'ext.inputBox' );
return $this->getCreateForm();
case 'move':
return $this->getMoveForm();
@@ -117,7 +123,7 @@ class InputBox {
);
$htmlOut .= Xml::element( 'input',
array(
- 'class' => 'searchboxInput',
+ 'class' => 'searchboxInput mw-ui-input mw-ui-input-inline',
'name' => 'search',
'type' => $this->mHidden ? 'hidden' : 'text',
'value' => $this->mDefaultText,
@@ -192,7 +198,7 @@ class InputBox {
);
} else {
// Checkbox
- $htmlOut .= ' <div class="inputbox-element">';
+ $htmlOut .= ' <div class="mw-inputbox-element mw-ui-checkbox">';
$htmlOut .= Xml::element( 'input',
array(
'type' => 'checkbox',
@@ -202,7 +208,7 @@ class InputBox {
) + $checked
);
// Label
- $htmlOut .= '&#160;' . Xml::label( $name, 'mw-inputbox-ns' . $i . $idRandStr );
+ $htmlOut .= Xml::label( $name, 'mw-inputbox-ns' . $i . $idRandStr );
$htmlOut .= '</div> ';
}
}
@@ -215,7 +221,7 @@ class InputBox {
array(
'type' => 'submit',
'name' => 'go',
- 'class' => 'searchboxGoButton',
+ 'class' => 'mw-ui-button',
'value' => $this->mButtonLabel
)
);
@@ -227,7 +233,7 @@ class InputBox {
array(
'type' => 'submit',
'name' => 'fulltext',
- 'class' => 'searchboxSearchButton',
+ 'class' => 'mw-ui-button',
'value' => $this->mSearchButtonLabel
)
);
@@ -288,17 +294,18 @@ class InputBox {
array(
'type' => $this->mHidden ? 'hidden' : 'text',
'name' => 'search',
+ 'class' => 'mw-ui-input mw-ui-input-inline',
'size' => $this->mWidth,
'id' => 'bodySearchInput' . $id,
'dir' => $this->mDir,
)
);
- $htmlOut .= Xml::element( 'input',
+ $htmlOut .= '&#160;' . Xml::element( 'input',
array(
'type' => 'submit',
'name' => 'go',
'value' => $this->mButtonLabel,
- 'class' => 'bodySearchBtnGo',
+ 'class' => 'mw-ui-button',
)
);
@@ -308,7 +315,7 @@ class InputBox {
array(
'type' => 'submit',
'name' => 'fulltext',
- 'class' => 'bodySearchBtnSearch',
+ 'class' => 'mw-ui-button',
'value' => $this->mSearchButtonLabel
)
);
@@ -367,6 +374,15 @@ class InputBox {
'value' => $this->mPreload,
)
);
+ foreach ( $this->mPreloadparams as $preloadparams ) {
+ $htmlOut .= Xml::openElement( 'input',
+ array(
+ 'type' => 'hidden',
+ 'name' => 'preloadparams[]',
+ 'value' => $preloadparams,
+ )
+ );
+ }
$htmlOut .= Xml::openElement( 'input',
array(
'type' => 'hidden',
@@ -415,7 +431,7 @@ class InputBox {
array(
'type' => $this->mHidden ? 'hidden' : 'text',
'name' => 'title',
- 'class' => 'createboxInput',
+ 'class' => 'mw-ui-input mw-ui-input-inline createboxInput',
'value' => $this->mDefaultText,
'placeholder' => $this->mPlaceholderText,
'size' => $this->mWidth,
@@ -427,7 +443,7 @@ class InputBox {
array(
'type' => 'submit',
'name' => 'create',
- 'class' => 'createboxButton',
+ 'class' => 'mw-ui-button mw-ui-progressive createboxButton',
'value' => $this->mButtonLabel
)
);
@@ -489,7 +505,7 @@ class InputBox {
array(
'type' => $this->mHidden ? 'hidden' : 'text',
'name' => 'wpNewTitle',
- 'class' => 'mw-moveboxInput',
+ 'class' => 'mw-moveboxInput mw-ui-input mw-ui-input-inline',
'value' => $this->mDefaultText,
'placeholder' => $this->mPlaceholderText,
'size' => $this->mWidth,
@@ -500,7 +516,7 @@ class InputBox {
$htmlOut .= Xml::openElement( 'input',
array(
'type' => 'submit',
- 'class' => 'mw-moveboxButton',
+ 'class' => 'mw-ui-button mw-ui-progressive',
'value' => $this->mButtonLabel
)
);
@@ -551,6 +567,15 @@ class InputBox {
'value' => $this->mPreload,
)
);
+ foreach ( $this->mPreloadparams as $preloadparams ) {
+ $htmlOut .= Xml::openElement( 'input',
+ array(
+ 'type' => 'hidden',
+ 'name' => 'preloadparams[]',
+ 'value' => $preloadparams,
+ )
+ );
+ }
$htmlOut .= Xml::openElement( 'input',
array(
'type' => 'hidden',
@@ -562,7 +587,7 @@ class InputBox {
array(
'type' => $this->mHidden ? 'hidden' : 'text',
'name' => 'preloadtitle',
- 'class' => 'commentboxInput',
+ 'class' => 'commentboxInput mw-ui-input mw-ui-input-inline',
'value' => $this->mDefaultText,
'placeholder' => $this->mPlaceholderText,
'size' => $this->mWidth,
@@ -588,7 +613,7 @@ class InputBox {
array(
'type' => 'submit',
'name' => 'create',
- 'class' => 'commentboxButton',
+ 'class' => 'mw-ui-button mw-ui-progressive',
'value' => $this->mButtonLabel
)
);
@@ -605,15 +630,20 @@ class InputBox {
* @param string $text Tag contents
*/
public function extractOptions( $text ) {
- wfProfileIn( __METHOD__ );
-
// Parse all possible options
$values = array();
foreach ( explode( "\n", $text ) as $line ) {
if ( strpos( $line, '=' ) === false )
continue;
list( $name, $value ) = explode( '=', $line, 2 );
- $values[ strtolower( trim( $name ) ) ] = Sanitizer::decodeCharReferences( trim( $value ) );
+ $name = strtolower( trim( $name ) );
+ $value = Sanitizer::decodeCharReferences( trim( $value ) );
+ if ( $name == 'preloadparams[]' ) {
+ // We have to special-case this one because it's valid for it to appear more than once.
+ $this->mPreloadparams[] = $value;
+ } else {
+ $values[ $name ] = $value;
+ }
}
// Validate the dir value.
@@ -662,7 +692,6 @@ class InputBox {
if ( !$this->isValidColor( $this->mBGColor ) ) {
$this->mBGColor = 'transparent';
}
- wfProfileOut( __METHOD__ );
}
/**
diff --git a/extensions/InputBox/InputBox.i18n.php b/extensions/InputBox/InputBox.i18n.php
deleted file mode 100644
index 73bf23c4..00000000
--- a/extensions/InputBox/InputBox.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim5f0a0d9bac62c1be' ) ) {
- function wfJsonI18nShim5f0a0d9bac62c1be( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim5f0a0d9bac62c1be';
-}
diff --git a/extensions/InputBox/InputBox.php b/extensions/InputBox/InputBox.php
index d5215efa..3f8b9eb4 100644
--- a/extensions/InputBox/InputBox.php
+++ b/extensions/InputBox/InputBox.php
@@ -1,62 +1,13 @@
<?php
-/**
- * InputBox extension
- *
- * @file
- * @ingroup Extensions
- *
- * This file contains the main include file for the Inputbox extension of
- * MediaWiki.
- *
- * Usage: Add the following line in LocalSettings.php:
- * require_once( "$IP/extensions/InputBox/InputBox.php" );
- *
- * @author Erik Moeller <moeller@scireview.de>
- * namespaces search improvements partially by
- * Leonardo Pimenta <leo.lns@gmail.com>
- * Cleaned up by Trevor Parscal <tparscal@wikimedia.org>
- * @copyright Public domain
- * @license Public domain
- * @version 0.1.4
- */
-
-// Check environment
-if ( !defined( 'MEDIAWIKI' ) ) {
- echo "This is an extension to the MediaWiki package and cannot be run standalone.\n";
- die( -1 );
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'InputBox' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['InputBox'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for InputBox extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the InputBox extension requires MediaWiki 1.25+' );
}
-
-/* Configuration */
-
-// Credits
-$wgExtensionCredits['parserhook'][] = array(
- 'path' => __FILE__,
- 'name' => 'InputBox',
- 'author' => array( 'Erik Moeller', 'Leonardo Pimenta', 'Rob Church', 'Trevor Parscal', 'DaSch' ),
- 'version' => '0.2.0',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:InputBox',
- 'description' => 'Allow inclusion of predefined HTML forms.',
- 'descriptionmsg' => 'inputbox-desc',
-);
-
-// Shortcut to this extension directory
-$dir = __DIR__ . '/';
-
-// Internationalization
-$wgMessagesDirs['InputBox'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['InputBox'] = $dir . 'InputBox.i18n.php';
-
-// Register auto load for the special page class
-$wgAutoloadClasses['InputBoxHooks'] = $dir . 'InputBox.hooks.php';
-$wgAutoloadClasses['InputBox'] = $dir . 'InputBox.classes.php';
-
-// Register parser hook
-$wgHooks['ParserFirstCallInit'][] = 'InputBoxHooks::register';
-$wgHooks['MediaWikiPerformAction'][] = 'InputBoxHooks::onMediaWikiPerformAction';
-$wgHooks['SpecialPageBeforeExecute'][] = 'InputBoxHooks::onSpecialPageBeforeExecute';
-
-$wgResourceModules['ext.inputBox.styles'] = array(
- 'localBasePath' => dirname( __FILE__ ) . '/resources',
- 'remoteExtPath' => 'InputBox/resources',
- 'styles' => 'ext.inputBox.styles.css',
-);
diff --git a/extensions/InputBox/extension.json b/extensions/InputBox/extension.json
new file mode 100644
index 00000000..6d786754
--- /dev/null
+++ b/extensions/InputBox/extension.json
@@ -0,0 +1,50 @@
+{
+ "name": "InputBox",
+ "version": "0.3.0",
+ "author": [
+ "Erik Moeller",
+ "Leonardo Pimenta",
+ "Rob Church",
+ "Trevor Parscal",
+ "DaSch"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:InputBox",
+ "description": "Allow inclusion of predefined HTML forms.",
+ "descriptionmsg": "inputbox-desc",
+ "type": "parserhook",
+ "MessagesDirs": {
+ "InputBox": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "InputBoxHooks": "InputBox.hooks.php",
+ "InputBox": "InputBox.classes.php"
+ },
+ "ResourceModules": {
+ "ext.inputBox.styles": {
+ "styles": "ext.inputBox.styles.css"
+ },
+ "ext.inputBox": {
+ "scripts": "ext.inputBox.js",
+ "dependencies": [
+ "jquery.throttle-debounce"
+ ]
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "resources",
+ "remoteExtPath": "InputBox/resources"
+ },
+ "Hooks": {
+ "ParserFirstCallInit": [
+ "InputBoxHooks::register"
+ ],
+ "MediaWikiPerformAction": [
+ "InputBoxHooks::onMediaWikiPerformAction"
+ ],
+ "SpecialPageBeforeExecute": [
+ "InputBoxHooks::onSpecialPageBeforeExecute"
+ ]
+ }
+}
diff --git a/extensions/InputBox/i18n/ang.json b/extensions/InputBox/i18n/ang.json
new file mode 100644
index 00000000..dd10aa41
--- /dev/null
+++ b/extensions/InputBox/i18n/ang.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Espreon"
+ ]
+ },
+ "inputbox-createarticle": "Scieppan tramet",
+ "inputbox-movearticle": "Wegan tramet"
+}
diff --git a/extensions/InputBox/i18n/ar.json b/extensions/InputBox/i18n/ar.json
index 96cf6ad7..0c2fcef3 100644
--- a/extensions/InputBox/i18n/ar.json
+++ b/extensions/InputBox/i18n/ar.json
@@ -2,7 +2,9 @@
"@metadata": {
"authors": [
"Meno25",
- "زكريا"
+ "زكريا",
+ "Omda4wady",
+ "Abanima"
]
},
"inputbox-desc": "يسمح بتضمين أشكال HTML معرفة مسبقا.",
@@ -11,5 +13,8 @@
"inputbox-tryexact": "ابحث عن عنوان مطابق",
"inputbox-searchfulltext": "ابحث في النص الكامل",
"inputbox-createarticle": "إنشاء صفحة",
+ "inputbox-movearticle": "انقل الصفحة",
+ "inputbox-postcomment": "قسم جديد",
+ "inputbox-postcommenttitle": "مقطع جديد",
"inputbox-ns-main": "رئيسي"
}
diff --git a/extensions/InputBox/i18n/arq.json b/extensions/InputBox/i18n/arq.json
new file mode 100644
index 00000000..2449d692
--- /dev/null
+++ b/extensions/InputBox/i18n/arq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Oldstoneage"
+ ]
+ },
+ "inputbox-tryexact": "فتّش على مطابقة سواسوا"
+}
diff --git a/extensions/InputBox/i18n/bcc.json b/extensions/InputBox/i18n/bcc.json
index 61a5e4a1..f56dc696 100644
--- a/extensions/InputBox/i18n/bcc.json
+++ b/extensions/InputBox/i18n/bcc.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Mostafadaneshvar"
+ "Mostafadaneshvar",
+ "Baloch Afghanistan"
]
},
"inputbox-desc": "اجازه داتن په هور بیگ فرم های HTML چه پیش تعریف بوتگین",
@@ -9,5 +10,5 @@
"inputbox-error-bad-type": "نوع جعبه ورودی \"$1\" جاه آرگ نه بیت.\nلطفا مشخص کنیت \"شرکتن\", \"نظر\", \"گردگ\" یا \"گردگ2\".",
"inputbox-tryexact": "تطبیق کامل آزمایش کن",
"inputbox-searchfulltext": "متن کامل گرد",
- "inputbox-createarticle": "شرکتن صفحه"
+ "inputbox-createarticle": "تاکدیمِ جوڑ کورتین"
}
diff --git a/extensions/InputBox/i18n/bgn.json b/extensions/InputBox/i18n/bgn.json
new file mode 100644
index 00000000..258775a0
--- /dev/null
+++ b/extensions/InputBox/i18n/bgn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "inputbox-tryexact": "نزیز به نزیز ئی متابکت ئا آزمایش بکن",
+ "inputbox-movearticle": "تاکدیمی انتقال"
+}
diff --git a/extensions/InputBox/i18n/fi.json b/extensions/InputBox/i18n/fi.json
index ae16b96b..b6025a7d 100644
--- a/extensions/InputBox/i18n/fi.json
+++ b/extensions/InputBox/i18n/fi.json
@@ -3,7 +3,8 @@
"authors": [
"Crt",
"Nike",
- "Olli"
+ "Olli",
+ "Stryn"
]
},
"inputbox-desc": "Mahdollistaa ennalta määriteltyjen lomakkeiden sisällyttämisen sivuille.",
@@ -12,5 +13,7 @@
"inputbox-tryexact": "Yritä tarkkaa osumaa",
"inputbox-searchfulltext": "Etsi koko tekstiä",
"inputbox-createarticle": "Luo sivu",
+ "inputbox-postcomment": "Uusi osio",
+ "inputbox-postcommenttitle": "Uusi osio",
"inputbox-ns-main": "(sivut)"
}
diff --git a/extensions/InputBox/i18n/gl.json b/extensions/InputBox/i18n/gl.json
index a3c80681..75a394f4 100644
--- a/extensions/InputBox/i18n/gl.json
+++ b/extensions/InputBox/i18n/gl.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Alma",
- "Toliño"
+ "Toliño",
+ "Banjo"
]
},
"inputbox-desc": "Permitir a inclusión de formularios predefinidos de HTML",
@@ -11,5 +12,8 @@
"inputbox-tryexact": "Buscar coincidencias exactas",
"inputbox-searchfulltext": "Buscar o texto completo",
"inputbox-createarticle": "Crear a páxina",
+ "inputbox-movearticle": "Mover páxina",
+ "inputbox-postcomment": "Nova sección",
+ "inputbox-postcommenttitle": "Nova sección",
"inputbox-ns-main": "Principal"
}
diff --git a/extensions/InputBox/i18n/gom-deva.json b/extensions/InputBox/i18n/gom-deva.json
new file mode 100644
index 00000000..8710f59a
--- /dev/null
+++ b/extensions/InputBox/i18n/gom-deva.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Supriya kankumbikar"
+ ]
+ },
+ "inputbox-tryexact": "दिल्लेच उतर सोदात"
+}
diff --git a/extensions/InputBox/i18n/hu.json b/extensions/InputBox/i18n/hu.json
index bffd36dd..440728bf 100644
--- a/extensions/InputBox/i18n/hu.json
+++ b/extensions/InputBox/i18n/hu.json
@@ -5,7 +5,8 @@
"Dj",
"Glanthor Reviol",
"KossuthRad",
- "Tgr"
+ "Tgr",
+ "Tacsipacsi"
]
},
"inputbox-desc": "Lehetővé teszi előre megadott HTML-űrlapok beillesztését",
@@ -14,5 +15,8 @@
"inputbox-tryexact": "Ugrás a szócikkre",
"inputbox-searchfulltext": "Keresés a teljes szövegben",
"inputbox-createarticle": "Szócikk létrehozása",
+ "inputbox-movearticle": "Lap átnevezése",
+ "inputbox-postcomment": "Új szakasz",
+ "inputbox-postcommenttitle": "Új szakasz",
"inputbox-ns-main": "Fő"
}
diff --git a/extensions/InputBox/i18n/ia.json b/extensions/InputBox/i18n/ia.json
index 0d6837b3..23fb4508 100644
--- a/extensions/InputBox/i18n/ia.json
+++ b/extensions/InputBox/i18n/ia.json
@@ -7,7 +7,7 @@
"inputbox-desc": "Permitter le inclusion de formularios HTML predefinite",
"inputbox-error-no-type": "Tu non ha specificate le typo de quadro de entrata a crear.",
"inputbox-error-bad-type": "Le typo de quadro de entrata \"$1\" non es recognoscite.\nPer favor specifica \"create\", \"comment\", \"search\", \"search2\" o \"fulltext\".",
- "inputbox-tryexact": "Provar correspondentia exacte",
+ "inputbox-tryexact": "Cercar le titulo exacte",
"inputbox-searchfulltext": "Cercar in texto integre",
"inputbox-createarticle": "Crear pagina",
"inputbox-ns-main": "Principal"
diff --git a/extensions/InputBox/i18n/is.json b/extensions/InputBox/i18n/is.json
index 88e04bd0..6f8e09d7 100644
--- a/extensions/InputBox/i18n/is.json
+++ b/extensions/InputBox/i18n/is.json
@@ -7,6 +7,7 @@
},
"inputbox-error-no-type": "Þú hefur ekki tilgreint hverskonar kassa þú villt búa til.",
"inputbox-error-bad-type": "\"$1\" gerð innsetningarkassa þekkist ekki.\nVinsamlegast tilgreindu \"create\", \"comment\", \"search\", \"search2\" eða \"fulltext\".",
+ "inputbox-tryexact": "Prófa nákvæma samsvörun.",
"inputbox-createarticle": "Búa til síðu",
"inputbox-ns-main": "Aðalsíða"
}
diff --git a/extensions/InputBox/i18n/kn.json b/extensions/InputBox/i18n/kn.json
index a7f0dcb4..8420ad7f 100644
--- a/extensions/InputBox/i18n/kn.json
+++ b/extensions/InputBox/i18n/kn.json
@@ -1,9 +1,11 @@
{
"@metadata": {
"authors": [
- "VASANTH S.N."
+ "VASANTH S.N.",
+ "Omshivaprakash"
]
},
+ "inputbox-tryexact": "ಇದೇ ಹೊಂದಾಣಿಕೆ ಪ್ರಯತ್ನಿಸಿ",
"inputbox-createarticle": "ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸು",
"inputbox-movearticle": "ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ",
"inputbox-postcomment": "ಹೊಸ ವಿಭಾಗ",
diff --git a/extensions/InputBox/i18n/ksh.json b/extensions/InputBox/i18n/ksh.json
index 0da2b7c4..969c38a2 100644
--- a/extensions/InputBox/i18n/ksh.json
+++ b/extensions/InputBox/i18n/ksh.json
@@ -10,5 +10,8 @@
"inputbox-tryexact": "Versök en akkurate Üvvereinstimmung:",
"inputbox-searchfulltext": "Sök durch dä janze Tex",
"inputbox-createarticle": "Sigg aanlääje",
+ "inputbox-movearticle": "Sigg Ömbenänne",
+ "inputbox-postcomment": "Neue Avschnedd onge draan",
+ "inputbox-postcommenttitle": "Neue Avschnedd",
"inputbox-ns-main": "{{int:blanknamespace}}"
}
diff --git a/extensions/InputBox/i18n/lrc.json b/extensions/InputBox/i18n/lrc.json
index 3e1ff8e8..f8e11681 100644
--- a/extensions/InputBox/i18n/lrc.json
+++ b/extensions/InputBox/i18n/lrc.json
@@ -5,6 +5,7 @@
"Mogoeilor"
]
},
+ "inputbox-tryexact": "تلاش سی یکی کردن راستکی",
"inputbox-searchfulltext": "پی جوری متنی",
"inputbox-createarticle": "راس كردن بلگه",
"inputbox-movearticle": "بلگه نه جا وه جا کو",
diff --git a/extensions/InputBox/i18n/mai.json b/extensions/InputBox/i18n/mai.json
new file mode 100644
index 00000000..7b7fa037
--- /dev/null
+++ b/extensions/InputBox/i18n/mai.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "inputbox-tryexact": "देल गेल शब्द मात्र ताकी"
+}
diff --git a/extensions/InputBox/i18n/nap.json b/extensions/InputBox/i18n/nap.json
index 97fe4480..7c99645a 100644
--- a/extensions/InputBox/i18n/nap.json
+++ b/extensions/InputBox/i18n/nap.json
@@ -2,9 +2,11 @@
"@metadata": {
"authors": [
"Chelin",
- "SabineCretella"
+ "SabineCretella",
+ "C.R."
]
},
+ "inputbox-tryexact": "Pròva cu nu cunfronto eguale-eguale",
"inputbox-searchfulltext": "Ascià dint''o testo",
"inputbox-createarticle": "Cria paggena"
}
diff --git a/extensions/InputBox/i18n/pfl.json b/extensions/InputBox/i18n/pfl.json
new file mode 100644
index 00000000..f2524b60
--- /dev/null
+++ b/extensions/InputBox/i18n/pfl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae"
+ ]
+ },
+ "inputbox-tryexact": "Vasugs midda gnaue Iwwaoischdimmung"
+}
diff --git a/extensions/InputBox/i18n/pt.json b/extensions/InputBox/i18n/pt.json
index 99fca2e3..fb62118f 100644
--- a/extensions/InputBox/i18n/pt.json
+++ b/extensions/InputBox/i18n/pt.json
@@ -4,13 +4,14 @@
"Hamilton Abreu",
"Malafaya",
"Imperadeiro98",
- "Vitorvicentevalente"
+ "Vitorvicentevalente",
+ "He7d3r"
]
},
"inputbox-desc": "Permite a inclusão de formulários HTML pré-definidos.",
"inputbox-error-no-type": "Não especificou o tipo de caixa de edição a ser criado.",
"inputbox-error-bad-type": "O tipo de caixa de introdução de dados \"$1\" não foi reconhecido.\nPor favor, especifique \"create\", \"comment\", \"search\", \"search2\" ou \"fulltext\".",
- "inputbox-tryexact": "Tentar a exata expressão",
+ "inputbox-tryexact": "Tentar a expressão exata",
"inputbox-searchfulltext": "Pesquisar no texto completo",
"inputbox-createarticle": "Criar página",
"inputbox-movearticle": "Mover página",
diff --git a/extensions/InputBox/i18n/qqq.json b/extensions/InputBox/i18n/qqq.json
index cb10c9cb..aada0de5 100644
--- a/extensions/InputBox/i18n/qqq.json
+++ b/extensions/InputBox/i18n/qqq.json
@@ -7,10 +7,11 @@
"Shirayuki",
"Siebrand",
"The Evil IP address",
- "Raymond"
+ "Raymond",
+ "Umherirrender"
]
},
- "inputbox-desc": "{{desc|name=Input Box|url=http://www.mediawiki.org/wiki/Extension:InputBox}}",
+ "inputbox-desc": "{{desc|name=Input Box|url=https://www.mediawiki.org/wiki/Extension:InputBox}}",
"inputbox-error-no-type": "Used as error message.\n\nSee also:\n* {{msg-mw|Inputbox-error-bad-type}}",
"inputbox-error-bad-type": "{{doc-important|\"create\", \"comment\", \"search\", \"search2\" and \"fulltext\" should not be translated.}}\nUsed as error message. Parameters:\n* $1 - invalid type. Valid types are: \"create\", \"comment\", \"commenttitle\", \"search\", \"fulltext\", and \"search2\"\nSee also:\n* {{msg-mw|Inputbox-error-no-type}}",
"inputbox-tryexact": "Part of the \"Inputbox\" extension. This message is the text of the button to search the page you typed in the inputbox. If the page with the exact name exists, you will go directly to that page.",
diff --git a/extensions/InputBox/i18n/roa-tara.json b/extensions/InputBox/i18n/roa-tara.json
index fa650227..bdc9a094 100644
--- a/extensions/InputBox/i18n/roa-tara.json
+++ b/extensions/InputBox/i18n/roa-tara.json
@@ -10,5 +10,8 @@
"inputbox-tryexact": "Pruève cu 'u combronde satte-satte",
"inputbox-searchfulltext": "Cirche jndr'à tutte 'u teste",
"inputbox-createarticle": "Ccreje 'a vôsce",
+ "inputbox-movearticle": "Spuèste 'a pàgene",
+ "inputbox-postcomment": "Seziona nove",
+ "inputbox-postcommenttitle": "Seziona nove",
"inputbox-ns-main": "Prengepàle"
}
diff --git a/extensions/InputBox/i18n/shn.json b/extensions/InputBox/i18n/shn.json
new file mode 100644
index 00000000..d8d79de4
--- /dev/null
+++ b/extensions/InputBox/i18n/shn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saimawnkham"
+ ]
+ },
+ "inputbox-tryexact": "သွၵ်ႉႁႃ ႁႂ်ႈၼႄႉၼွၼ်းလီလီ"
+}
diff --git a/extensions/InputBox/i18n/sr-ec.json b/extensions/InputBox/i18n/sr-ec.json
index 7a96a954..22334dce 100644
--- a/extensions/InputBox/i18n/sr-ec.json
+++ b/extensions/InputBox/i18n/sr-ec.json
@@ -8,11 +8,11 @@
]
},
"inputbox-desc": "Омогући укључивање претходно дефинисаних HTML форми.",
- "inputbox-error-no-type": "Ниси одредио тип уносне кутије да би је направио.",
- "inputbox-error-bad-type": "Тип \"$1\" кутијице за унос података је непознат.\nМолимо вас да га промените на \"create\", \"comment\", \"search\", \"search2\" или \"fulltext\".",
+ "inputbox-error-no-type": "Нисте одредили тип кутије за унос коју правите.",
+ "inputbox-error-bad-type": "Тип „$1“ кутијице за унос података је непознат.\nМолимо вас да га промените на „create“, „comment“, „search“, „search2“ или „fulltext“.",
"inputbox-tryexact": "Покушај тачно",
"inputbox-searchfulltext": "Претражи цео текст",
- "inputbox-createarticle": "Направи чланак",
+ "inputbox-createarticle": "Направи страницу",
"inputbox-postcomment": "Нови одељак",
"inputbox-postcommenttitle": "Нови одељак",
"inputbox-ns-main": "Главни"
diff --git a/extensions/InputBox/i18n/sr-el.json b/extensions/InputBox/i18n/sr-el.json
index c34d35ee..aa3b3c74 100644
--- a/extensions/InputBox/i18n/sr-el.json
+++ b/extensions/InputBox/i18n/sr-el.json
@@ -6,11 +6,11 @@
]
},
"inputbox-desc": "Omogući uključivanje prethodno definisanih HTML formi.",
- "inputbox-error-no-type": "Nisi odredio tip unosne kutije da bi je napravio.",
- "inputbox-error-bad-type": "Tip \"$1\" kutijice za unos podataka je nepoznat.\nMolimo vas da ga promenite na \"create\", \"comment\", \"search\", \"search2\" ili \"fulltext\".",
+ "inputbox-error-no-type": "Niste odredili tip kutije za unos koju pravite.",
+ "inputbox-error-bad-type": "Tip „$1“ kutijice za unos podataka je nepoznat.\nMolimo vas da ga promenite na „create“, „comment“, „search“, „search2“ ili „fulltext“.",
"inputbox-tryexact": "Pokušaj tačno",
"inputbox-searchfulltext": "Pretraži ceo tekst",
- "inputbox-createarticle": "Napravi članak",
+ "inputbox-createarticle": "Napravi stranicu",
"inputbox-postcomment": "Novi odeljak",
"inputbox-postcommenttitle": "Novi odeljak",
"inputbox-ns-main": "Glavni"
diff --git a/extensions/InputBox/i18n/th.json b/extensions/InputBox/i18n/th.json
index 66d3514e..fde89e7d 100644
--- a/extensions/InputBox/i18n/th.json
+++ b/extensions/InputBox/i18n/th.json
@@ -1,6 +1,10 @@
{
- "@metadata": [],
- "inputbox-tryexact": "ค้นหาตรงทุกตัวอักษร",
+ "@metadata": {
+ "authors": [
+ "Horus"
+ ]
+ },
+ "inputbox-tryexact": "ลองตรงทุกตัวอักษร",
"inputbox-searchfulltext": "ค้นหาข้อมูล",
"inputbox-createarticle": "สร้างเนื้อหา"
}
diff --git a/extensions/InputBox/i18n/tt-cyrl.json b/extensions/InputBox/i18n/tt-cyrl.json
new file mode 100644
index 00000000..69893e44
--- /dev/null
+++ b/extensions/InputBox/i18n/tt-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Derslek"
+ ]
+ },
+ "inputbox-tryexact": "Төгәл эзләү"
+}
diff --git a/extensions/InputBox/i18n/ur.json b/extensions/InputBox/i18n/ur.json
index 64e1e671..78f689a0 100644
--- a/extensions/InputBox/i18n/ur.json
+++ b/extensions/InputBox/i18n/ur.json
@@ -1,9 +1,11 @@
{
"@metadata": {
"authors": [
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "عثمان خان شاہ"
]
},
+ "inputbox-tryexact": "خو بخو ٹیکسٹ کو ملانے کی کوشش کریں",
"inputbox-searchfulltext": "تلاش ِکل متن",
"inputbox-createarticle": "نیا مضمون",
"inputbox-ns-main": "مین"
diff --git a/extensions/InputBox/i18n/vi.json b/extensions/InputBox/i18n/vi.json
index 44513a10..735c877d 100644
--- a/extensions/InputBox/i18n/vi.json
+++ b/extensions/InputBox/i18n/vi.json
@@ -7,7 +7,7 @@
"inputbox-desc": "Thêm những biểu mẫu HTML đơn giản",
"inputbox-error-no-type": "Bạn chưa định rõ loại biểu mẫu để tạo ra.",
"inputbox-error-bad-type": "Loại biểu mẫu “$1” không hợp lệ. Xin hãy chọn “create”, “comment”, “search”, “search2”, hay “fulltext”.",
- "inputbox-tryexact": "Thử tìm đoạn văn khớp chính xác với từ khóa",
+ "inputbox-tryexact": "Thử khớp chính xác",
"inputbox-searchfulltext": "Tìm toàn văn",
"inputbox-createarticle": "Tạo trang",
"inputbox-movearticle": "Di chuyển trang",
diff --git a/extensions/InputBox/i18n/yi.json b/extensions/InputBox/i18n/yi.json
index def43b29..c6684637 100644
--- a/extensions/InputBox/i18n/yi.json
+++ b/extensions/InputBox/i18n/yi.json
@@ -5,6 +5,7 @@
"פוילישער"
]
},
+ "inputbox-tryexact": "פרובירן גענויעם זוך",
"inputbox-searchfulltext": "זוך אין אלע בלעטער",
"inputbox-createarticle": "באשאפט ארטיקל",
"inputbox-ns-main": "הויפט"
diff --git a/extensions/InputBox/i18n/yue.json b/extensions/InputBox/i18n/yue.json
index c91097ad..d1a42766 100644
--- a/extensions/InputBox/i18n/yue.json
+++ b/extensions/InputBox/i18n/yue.json
@@ -1,9 +1,17 @@
{
- "@metadata": [],
+ "@metadata": {
+ "authors": [
+ "Yueman"
+ ]
+ },
"inputbox-desc": "容許包含預先設定嘅HTML表格",
"inputbox-error-no-type": "你重未指定開輸入盒嘅指定類型。",
- "inputbox-error-bad-type": "輸入盒類型\"$1\"認唔到。請指定\"create\"、\"comment\"、\"search\"或\"search2\"。",
+ "inputbox-error-bad-type": "輸入盒類型\"$1\"認唔到。\n請指定\"create\"、\"comment\"、\"search\"、\"search2\"或者\"fulltext\"。",
"inputbox-tryexact": "試吓精確嘅比較",
"inputbox-searchfulltext": "搵全文",
- "inputbox-createarticle": "建立文章"
+ "inputbox-createarticle": "建立文章",
+ "inputbox-movearticle": "搬頁",
+ "inputbox-postcomment": "新小節",
+ "inputbox-postcommenttitle": "新小節",
+ "inputbox-ns-main": "主要"
}
diff --git a/extensions/InputBox/resources/ext.inputBox.js b/extensions/InputBox/resources/ext.inputBox.js
new file mode 100644
index 00000000..2469fd13
--- /dev/null
+++ b/extensions/InputBox/resources/ext.inputBox.js
@@ -0,0 +1,29 @@
+/**
+ * Disable InputBox submit button when the corresponding text input field is empty.
+ *
+ * @author Tony Thomas
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+( function ( $, mw ) {
+ 'use strict';
+ mw.hook( 'wikipage.content' ).add( function( $content ) {
+ var $input = $content.find( '.createboxInput:not([type=hidden])' ),
+ onChange = function() {
+ var $textbox = $( this ),
+ $submit = $textbox.data( 'form-submit' );
+
+ if ( !$submit ) {
+ $submit = $textbox.nextAll( 'input.createboxButton' ).first();
+ $textbox.data( 'form-submit', $submit );
+ }
+
+ $submit.prop( 'disabled', $textbox.val().length < 1 );
+ }, i;
+
+ for ( i = 0; i < $input.length; i++ ) {
+ onChange.call( $input.get( i ) );
+ }
+
+ $input.on( 'keyup input change', $.debounce( 50, onChange ) );
+ } );
+}( jQuery, mediaWiki ) );
diff --git a/extensions/InputBox/resources/ext.inputBox.styles.css b/extensions/InputBox/resources/ext.inputBox.styles.css
index 30916f57..9a996a4a 100644
--- a/extensions/InputBox/resources/ext.inputBox.styles.css
+++ b/extensions/InputBox/resources/ext.inputBox.styles.css
@@ -8,7 +8,8 @@
display: inline;
}
-.inputbox-element {
- display: inline;
+.mw-inputbox-element {
+ /* important is needed to overwrite display:table from mw-ui checkbox */
+ display: inline-table !important;
white-space: nowrap;
-} \ No newline at end of file
+}
diff --git a/extensions/Interwiki/Interwiki.alias.php b/extensions/Interwiki/Interwiki.alias.php
index 7e585aae..db18c5fe 100644
--- a/extensions/Interwiki/Interwiki.alias.php
+++ b/extensions/Interwiki/Interwiki.alias.php
@@ -29,11 +29,21 @@ $specialPageAliases['as'] = array(
'Interwiki' => array( 'আন্তঃৱিকি' ),
);
+/** Avaric (авар) */
+$specialPageAliases['av'] = array(
+ 'Interwiki' => array( 'Интервики' ),
+);
+
/** Bulgarian (български) */
$specialPageAliases['bg'] = array(
'Interwiki' => array( 'Междууикита' ),
);
+/** Western Balochi (بلوچی رخشانی) */
+$specialPageAliases['bgn'] = array(
+ 'Interwiki' => array( 'مانجین_ویکی' ),
+);
+
/** Breton (brezhoneg) */
$specialPageAliases['br'] = array(
'Interwiki' => array( 'Etrewiki' ),
@@ -169,6 +179,11 @@ $specialPageAliases['lad'] = array(
'Interwiki' => array( 'Interviki' ),
);
+/** لوری (لوری) */
+$specialPageAliases['lrc'] = array(
+ 'Interwiki' => array( 'مینجا_ویکی' ),
+);
+
/** Macedonian (македонски) */
$specialPageAliases['mk'] = array(
'Interwiki' => array( 'Меѓувики' ),
diff --git a/extensions/Interwiki/Interwiki.i18n.php b/extensions/Interwiki/Interwiki.i18n.php
deleted file mode 100644
index cac966a8..00000000
--- a/extensions/Interwiki/Interwiki.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim46f967cdcae391b8' ) ) {
- function wfJsonI18nShim46f967cdcae391b8( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim46f967cdcae391b8';
-}
diff --git a/extensions/Interwiki/Interwiki.php b/extensions/Interwiki/Interwiki.php
index 2c5d76c7..73341819 100644
--- a/extensions/Interwiki/Interwiki.php
+++ b/extensions/Interwiki/Interwiki.php
@@ -1,127 +1,15 @@
<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * @file
- * @ingroup Extensions
- * @version 3.0
- * @author Stephanie Amanda Stevens <phroziac@gmail.com>
- * @author Robin Pepermans (SPQRobin) <robinp.1273@gmail.com>
- * @author Jack Phoenix <jack@shoutwiki.com>
- * @author Calimonius the Estrange <isarra@shoutwiki.com>
- * @copyright Copyright © 2005-2007 Stephanie Amanda Stevens
- * @copyright Copyright © 2007-2011 Robin Pepermans (SPQRobin)
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
- * @link http://www.mediawiki.org/wiki/Extension:SpecialInterwiki Documentation
- * Formatting improvements Stephen Kennedy, 2006.
- */
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( "This is not a valid entry point.\n" );
-}
-
-// Set this value to true in LocalSettings.php if you will not use this
-// extension to actually change any interwiki table entries. It will suppress
-// the addition of a log for interwiki link changes.
-$wgInterwikiViewOnly = false;
-
-// Name of a database where global interwikis will be stored.
-$wgInterwikiCentralDB = null;
-
-// Extension credits for Special:Version
-$wgExtensionCredits['specialpage'][] = array(
- 'path' => __FILE__,
- 'name' => 'Interwiki',
- 'author' => array(
- 'Stephanie Amanda Stevens',
- 'Alexandre Emsenhuber',
- 'Robin Pepermans',
- 'Siebrand Mazeland',
- 'Platonides',
- 'Raimond Spekking',
- 'Sam Reed',
- 'Jack Phoenix',
- 'Calimonius the Estrange',
- '...'
- ),
- 'version' => '3.0 20140719',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Interwiki',
- 'descriptionmsg' => 'interwiki-desc',
-);
-
-$wgExtensionFunctions[] = 'setupInterwikiExtension';
-
-$wgResourceModules['ext.interwiki.specialpage'] = array(
- 'styles' => 'Interwiki.css',
- 'localBasePath' => dirname( __FILE__ ),
- 'remoteExtPath' => 'Interwiki',
- 'dependencies' => array(
- 'jquery.makeCollapsible',
- ),
-);
-
-// Set up the new special page
-$dir = dirname( __FILE__ ) . '/';
-$wgMessagesDirs['Interwiki'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['Interwiki'] = $dir . 'Interwiki.i18n.php';
-$wgExtensionMessagesFiles['InterwikiAlias'] = $dir . 'Interwiki.alias.php';
-$wgAutoloadClasses['SpecialInterwiki'] = $dir . 'Interwiki_body.php';
-$wgAutoloadClasses['InterwikiLogFormatter'] = $dir . 'Interwiki_body.php';
-$wgSpecialPages['Interwiki'] = 'SpecialInterwiki';
-$wgSpecialPageGroups['Interwiki'] = 'wiki';
-
-$wgHooks['InterwikiLoadPrefix'][] = 'wfGlobalInterwikis';
-
-
-function setupInterwikiExtension() {
- global $wgInterwikiViewOnly;
-
- if ( $wgInterwikiViewOnly === false ) {
- global $wgAvailableRights, $wgLogTypes, $wgLogActionsHandlers;
-
- // New user right, required to modify the interwiki table through Special:Interwiki
- $wgAvailableRights[] = 'interwiki';
-
- // Set up the new log type - interwiki actions are logged to this new log
- $wgLogTypes[] = 'interwiki';
- // interwiki, iw_add, iw_delete, iw_edit
- $wgLogActionsHandlers['interwiki/*'] = 'InterwikiLogFormatter';
- }
-
- return true;
-}
-
-function wfGlobalInterwikis( $prefix, &$iwData ) {
- global $wgInterwikiCentralDB;
- // docs/hooks.txt says: Return true without providing an interwiki to continue interwiki search.
- if ( $wgInterwikiCentralDB === null || $wgInterwikiCentralDB === wfWikiId() ) {
- // No global set or this is global, nothing to add
- return true;
- }
- if ( !Language::fetchLanguageName( $prefix ) ) {
- // Check if prefix exists locally and skip
- foreach ( Interwiki::getAllPrefixes( null ) as $id => $localPrefixInfo ) {
- if ( $prefix === $localPrefixInfo['iw_prefix'] ) {
- return true;
- }
- }
- $dbr = wfGetDB( DB_SLAVE, array(), $wgInterwikiCentralDB );
- $res = $dbr->selectRow(
- 'interwiki',
- '*',
- array( 'iw_prefix' => $prefix ),
- __METHOD__
- );
- if ( !$res ) {
- return true;
- }
- // Excplicitly make this an array since it's expected to be one
- $iwData = (array)$res;
- // At this point, we can safely return false because we know that we have something
- return false;
- }
- return true;
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'Interwiki' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Interwiki'] = __DIR__ . '/i18n';
+ $wgExtensionMessagesFiles['InterwikiAlias'] = __DIR__ . '/Interwiki.alias.php';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Interwiki extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the Interwiki extension requires MediaWiki 1.25+' );
}
diff --git a/extensions/Interwiki/Interwiki_body.php b/extensions/Interwiki/Interwiki_body.php
index 87f4371c..5d6d530e 100644
--- a/extensions/Interwiki/Interwiki_body.php
+++ b/extensions/Interwiki/Interwiki_body.php
@@ -38,7 +38,7 @@ class SpecialInterwiki extends SpecialPage {
$action = $par ? $par : $request->getVal( 'action', $par );
$return = $this->getPageTitle();
- switch( $action ) {
+ switch ( $action ) {
case 'delete':
case 'edit':
case 'add':
@@ -231,7 +231,7 @@ class SpecialInterwiki extends SpecialPage {
$reason = $request->getText( 'wpInterwikiReason' );
$selfTitle = $this->getPageTitle();
$dbw = wfGetDB( DB_MASTER );
- switch( $do ) {
+ switch ( $do ) {
case 'delete':
$dbw->delete( 'interwiki', array( 'iw_prefix' => $prefix ), __METHOD__ );
@@ -334,7 +334,7 @@ class SpecialInterwiki extends SpecialPage {
// Page intro content
$this->getOutput()->addWikiMsg( 'interwiki_intro' );
$logLink = Linker::link(
- SpecialPage::getTitleFor( 'log', 'interwiki' ),
+ SpecialPage::getTitleFor( 'Log', 'interwiki' ),
$this->msg( 'interwiki-logtext' )->escaped()
);
$this->getOutput()->addHTML( '<p class="mw-interwiki-log">' . $logLink . '</p>' );
@@ -442,7 +442,7 @@ class SpecialInterwiki extends SpecialPage {
);
$attribs = array( 'class' => 'mw-interwikitable-local' );
// Green background for cells with "yes".
- if( $iwPrefix['iw_local'] ) {
+ if ( isset( $iwPrefix['iw_local'] ) && $iwPrefix['iw_local'] ) {
$attribs['class'] .= ' mw-interwikitable-local-yes';
}
// The messages interwiki_0 and interwiki_1 are used here.
@@ -452,7 +452,7 @@ class SpecialInterwiki extends SpecialPage {
$out .= Html::element( 'td', $attribs, $contents );
$attribs = array( 'class' => 'mw-interwikitable-trans' );
// Green background for cells with "yes".
- if( $iwPrefix['iw_trans'] ) {
+ if ( isset( $iwPrefix['iw_trans'] ) && $iwPrefix['iw_trans'] ) {
$attribs['class'] .= ' mw-interwikitable-trans-yes';
}
// The messages interwiki_0 and interwiki_1 are used here.
@@ -482,6 +482,10 @@ class SpecialInterwiki extends SpecialPage {
$args = func_get_args();
$this->getOutput()->wrapWikiMsg( "<p class='error'>$1</p>", $args );
}
+
+ protected function getGroupName() {
+ return 'wiki';
+ }
}
/**
diff --git a/extensions/Interwiki/Interwiki_hooks.php b/extensions/Interwiki/Interwiki_hooks.php
new file mode 100644
index 00000000..0a7e38a6
--- /dev/null
+++ b/extensions/Interwiki/Interwiki_hooks.php
@@ -0,0 +1,54 @@
+<?php
+
+class InterwikiHooks {
+ public static function onExtensionFunctions() {
+ global $wgInterwikiViewOnly;
+
+ if ( $wgInterwikiViewOnly === false ) {
+ global $wgAvailableRights, $wgLogTypes, $wgLogActionsHandlers;
+
+ // New user right, required to modify the interwiki table through Special:Interwiki
+ $wgAvailableRights[] = 'interwiki';
+
+ // Set up the new log type - interwiki actions are logged to this new log
+ $wgLogTypes[] = 'interwiki';
+ // interwiki, iw_add, iw_delete, iw_edit
+ $wgLogActionsHandlers['interwiki/*'] = 'InterwikiLogFormatter';
+ }
+
+ return true;
+ }
+
+ public static function onInterwikiLoadPrefix( $prefix, &$iwData ) {
+ global $wgInterwikiCentralDB;
+ // docs/hooks.txt says: Return true without providing an interwiki to continue interwiki search.
+ if ( $wgInterwikiCentralDB === null || $wgInterwikiCentralDB === wfWikiId() ) {
+ // No global set or this is global, nothing to add
+ return true;
+ }
+ if ( !Language::fetchLanguageName( $prefix ) ) {
+ // Check if prefix exists locally and skip
+ foreach ( Interwiki::getAllPrefixes( null ) as $id => $localPrefixInfo ) {
+ if ( $prefix === $localPrefixInfo['iw_prefix'] ) {
+ return true;
+ }
+ }
+ $dbr = wfGetDB( DB_SLAVE, array(), $wgInterwikiCentralDB );
+ $res = $dbr->selectRow(
+ 'interwiki',
+ '*',
+ array( 'iw_prefix' => $prefix ),
+ __METHOD__
+ );
+ if ( !$res ) {
+ return true;
+ }
+ // Excplicitly make this an array since it's expected to be one
+ $iwData = (array)$res;
+ // At this point, we can safely return false because we know that we have something
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/extensions/Interwiki/extension.json b/extensions/Interwiki/extension.json
new file mode 100644
index 00000000..49bd511c
--- /dev/null
+++ b/extensions/Interwiki/extension.json
@@ -0,0 +1,59 @@
+{
+ "name": "Interwiki",
+ "version": "3.0 20140719",
+ "author": [
+ "Stephanie Amanda Stevens",
+ "Alexandre Emsenhuber",
+ "Robin Pepermans",
+ "Siebrand Mazeland",
+ "Platonides",
+ "Raimond Spekking",
+ "Sam Reed",
+ "Jack Phoenix",
+ "Calimonius the Estrange",
+ "..."
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:Interwiki",
+ "descriptionmsg": "interwiki-desc",
+ "type": "specialpage",
+ "ExtensionMessagesFiles": {
+ "InterwikiAlias": "Interwiki.alias.php"
+ },
+ "config": {
+ "InterwikiCentralDB": null,
+ "InterwikiViewOnly": false
+ },
+ "MessagesDirs": {
+ "Interwiki": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "InterwikiLoadPrefix": [
+ "InterwikiHooks::onInterwikiLoadPrefix"
+ ]
+ },
+ "ResourceModules": {
+ "ext.interwiki.specialpage": {
+ "styles": "Interwiki.css",
+ "dependencies": [
+ "jquery.makeCollapsible"
+ ]
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteExtPath": "Interwiki"
+ },
+ "SpecialPages": {
+ "Interwiki": "SpecialInterwiki"
+ },
+ "ExtensionFunctions": [
+ "InterwikiHooks::onExtensionFunctions"
+ ],
+ "AutoloadClasses": {
+ "InterwikiHooks": "Interwiki_hooks.php",
+ "SpecialInterwiki": "Interwiki_body.php",
+ "InterwikiLogFormatter": "Interwiki_body.php"
+ }
+}
diff --git a/extensions/Interwiki/i18n/af.json b/extensions/Interwiki/i18n/af.json
index fc5f3e9e..731b5159 100644
--- a/extensions/Interwiki/i18n/af.json
+++ b/extensions/Interwiki/i18n/af.json
@@ -9,23 +9,18 @@
"interwiki-title-norights": "Wys interwikidata",
"interwiki-desc": "Voeg 'n [[Special:Interwiki|spesiale bladsy]] by om die interwiki tabel te bekyk en wysig",
"interwiki_intro": "Hier volg 'n oorsig van die interwikitabel.",
- "interwiki-legend-show": "Wys sleutel",
- "interwiki-legend-hide": "Versteek sleutel",
"interwiki_prefix": "Voorvoegsel",
"interwiki-prefix-label": "Voorvoegsel:",
"interwiki_prefix_intro": "Interwiki-voorvoegsel wat gebruik moet word in die wikiteks-sintaks <code>[<nowiki />[voorvoegsel:<em>bladsynaam</em>]]</code>.",
"interwiki_url_intro": "'n Sjabloon vir URL's. Die plekhouer $1 word met die <em>bladsynaam</em> van die wikiteks vervang as die bovermelde wikiteks-sintaks gebruik word.",
"interwiki_local": "Aanstuur",
"interwiki-local-label": "Aanstuur:",
- "interwiki_local_intro": "'n HTTP-aanvraag na die lokale wiki met hierdie interwiki-voorvoegsel in die URL is:",
"interwiki_local_0_intro": "word nie verwerk nie. Meestal geblokkeer deur 'n \"bladsy nie gevind\"-fout.",
"interwiki_local_1_intro": "aanstuur na die doel-URL verskaf in die definisies van die interwiki-skakels (hierdie word hanteer as verwysings in lokale bladsye)",
"interwiki_trans": "Transkludeer",
"interwiki-trans-label": "Transkludeer:",
- "interwiki_trans_intro": "Indien die wikiteks-sintaks <code>{<nowiki />{voorvoegsel:<em>bladsynaam</em>}}</code> gebruik word, dan:",
"interwiki_trans_1_intro": "laat transklusie van ander wiki's toe as interwiki-transklusies wel in hierdie wiki toegelaat word.",
"interwiki_trans_0_intro": "nie toegelaat nie, soek eerder na 'n bladsy in die sjabloonnaamruimte.",
- "interwiki_intro_footer": "Sien [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] vir meer inligting oor die interwikitabel.\nDaar is 'n [[Special:Log/interwiki|veranderingslogboek]] vir die interwikitabel.",
"interwiki_1": "ja",
"interwiki_0": "nee",
"interwiki_error": "Fout: Die interwikitabel is leeg, of iets anders is verkeerd.",
diff --git a/extensions/Interwiki/i18n/ar.json b/extensions/Interwiki/i18n/ar.json
index e39dd90d..9f33c149 100644
--- a/extensions/Interwiki/i18n/ar.json
+++ b/extensions/Interwiki/i18n/ar.json
@@ -18,15 +18,12 @@
"interwiki_url_intro": "قالب للمسارات. حامل المكان $1 سيتم استبداله بواسطة <em>pagename</em> لنص الويكي، عندما يتم استخدام صياغة نص الويكي المذكورة بالأعلى.",
"interwiki_local": "إرسال",
"interwiki-local-label": "إرسال:",
- "interwiki_local_intro": "طلب http للويكي المحلي ببادئة الإنترويكي هذه في URl هو:",
"interwiki_local_0_intro": "لا يتم أخذها في الاعتبار، عادة يتم المنع بواسطة \"page not found\"،",
"interwiki_local_1_intro": "يتم التحويل للمسار الهدف المعطى في تعريفات وصلة الإنترويكي (أي تتم معاملتها مثل المراجع في الصفحات المحلية)",
"interwiki_trans": "تضمين",
"interwiki-trans-label": "تضمين:",
- "interwiki_trans_intro": "لو أن صياغة نص الويكي <code>{<nowiki />{prefix:<em>pagename</em>}}</code> تم استخدامها، إذا:",
"interwiki_trans_1_intro": "يسمح بالتضمين من الويكي الأجنبي، لو أن تضمينات الإنترويكي مسموح بها عموما في هذا الويكي،",
"interwiki_trans_0_intro": "لا تسمح به، ولكن ابحث عن صفحة في نطاق القوالب.",
- "interwiki_intro_footer": "انظر [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] للمزيد من المعلومات حول جدول الإنترويكي.\nهناك [[Special:Log/interwiki|سجل بالتغييرات]] لجدول الإنترويكي.",
"interwiki_1": "نعم",
"interwiki_0": "لا",
"interwiki_error": "خطأ: جدول الإنترويكي فارغ، أو حدث خطأ آخر.",
diff --git a/extensions/Interwiki/i18n/arz.json b/extensions/Interwiki/i18n/arz.json
index 4d3fba09..ff821844 100644
--- a/extensions/Interwiki/i18n/arz.json
+++ b/extensions/Interwiki/i18n/arz.json
@@ -15,15 +15,12 @@
"interwiki_url_intro": "قالب للمسارات. حامل المكان $1 سيتم استبداله بواسطة <em>pagename</em> لنص الويكى، عندما يتم استخدام صياغة نص الويكى المذكورة بالأعلى.",
"interwiki_local": "إرسال",
"interwiki-local-label": "إرسال:",
- "interwiki_local_intro": "طلب http للويكى المحلى ببادئة الإنترويكى هذه فى URl هو:",
"interwiki_local_0_intro": "لا يتم أخذها فى الاعتبار، عادة يتم المنع بواسطة \"page not found\"،",
"interwiki_local_1_intro": "يتم التحويل للمسار الهدف المعطى فى تعريفات وصلة الإنترويكى (أى تتم معاملتها مثل المراجع فى الصفحات المحلية)",
"interwiki_trans": "تضمين",
"interwiki-trans-label": "تضمين:",
- "interwiki_trans_intro": "لو أن صياغة نص الويكى <code>{<nowiki />{prefix:<em>pagename</em>}}</code> تم استخدامها، إذا:",
"interwiki_trans_1_intro": "يسمح بالتضمين من الويكى الأجنبى، لو أن تضمينات الإنترويكى مسموح بها عموما فى هذا الويكى،",
"interwiki_trans_0_intro": "لا تسمح به، ولكن ابحث عن صفحة فى نطاق القوالب.",
- "interwiki_intro_footer": "انظر [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] للمزيد من المعلومات حول جدول الإنترويكى.\nهناك [[Special:Log/interwiki|سجل بالتغييرات]] لجدول الإنترويكى.",
"interwiki_1": "نعم",
"interwiki_0": "لا",
"interwiki_error": "خطأ: جدول الإنترويكى فارغ، أو حدث خطأ آخر.",
diff --git a/extensions/Interwiki/i18n/ast.json b/extensions/Interwiki/i18n/ast.json
index 02c72fd7..84077de3 100644
--- a/extensions/Interwiki/i18n/ast.json
+++ b/extensions/Interwiki/i18n/ast.json
@@ -8,8 +8,6 @@
"interwiki-title-norights": "Ver los datos d'interwiki",
"interwiki-desc": "Amiesta una [[Special:Interwiki|páxina especial]] pa ver y editar la tabla d'interwiki",
"interwiki_intro": "Esta ye una vista xeneral de la tabla d'interwikis.",
- "interwiki-legend-show": "Amosar lleenda",
- "interwiki-legend-hide": "Anubrir lleenda",
"interwiki_prefix": "Prefixu",
"interwiki-prefix-label": "Prefixu:",
"interwiki_prefix_intro": "Prefixu d'interwiki a usar cola sintaxis de testu wiki <code>[<nowiki />[prefixu:<em>nome de la páxina</em>]]</code>.",
@@ -22,7 +20,6 @@
"interwiki-trans-label": "Trescluír:",
"interwiki_trans_1_intro": "Si s'usa la sintaxis de testu wiki <code>{<nowiki />{prefixu:<em>nome de páxina</em>}}</code>, permite trescluir la páxina/plantía de la wiki esterna si les tresclusiones interwiki tán activaes en xeneral ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion]).",
"interwiki_trans_0_intro": "Nun permite a <code>{<nowiki />{prefixu:<em>nome de páxina</em>}}</code> trescluir páxines/plantíes esternes, busca meyor una páxina llocal nel espaciu de nomes de plantíes.",
- "interwiki_intro_footer": "Pa más información consulta [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] tocante a la tabla d'interwiki.\nHai un [[Special:Log/interwiki|rexistru de cambios]] a la tabla d'interwiki.",
"interwiki_1": "sí",
"interwiki_0": "non",
"interwiki_error": "Error: La tabla d'interwiki ta balera, o salió mal otra cosa.",
diff --git a/extensions/Interwiki/i18n/ba.json b/extensions/Interwiki/i18n/ba.json
index 882e0164..c8a93295 100644
--- a/extensions/Interwiki/i18n/ba.json
+++ b/extensions/Interwiki/i18n/ba.json
@@ -8,23 +8,18 @@
"interwiki-title-norights": "Интервики буйынса мәғлүмәтте ҡарау",
"interwiki-desc": "Интервики таблицаһын ҡарау һәм үҙгәртеү өсөн [[Special:Interwiki|махсус бит]] өҫтәй.",
"interwiki_intro": "Был — интервики таблицаһы.",
- "interwiki-legend-show": "Легенданы күрһәтергә",
- "interwiki-legend-hide": "Легенданы йәшерергә",
"interwiki_prefix": "Ҡушылма",
"interwiki-prefix-label": "Ҡушылма:",
"interwiki_prefix_intro": "<code>[<nowiki />[Ҡушылма:<em>биттең исеме</em>]]</code> вики-текст синтаксисында ҡулланыу өсөн интервики ҡушылмаһы.",
"interwiki_url_intro": "URL өсөн ҡалып. $1 урынына юғарыла күрһәтелгән вики-текст синтаксисында ҡулланылған <em>биттең исеме</em> ҡуйыласаҡ.",
"interwiki_local": "Йүнәлтеү",
"interwiki-local-label": "Йүнәлтеү:",
- "interwiki_local_intro": "Урындағы викиға URL-да интервики ҡушылма менән HTTP-һорау:",
"interwiki_local_0_intro": "рөхсәт ителмәй, ғәҙәттә урынына «бит табылманы» яҙыуы сыға.",
"interwiki_local_1_intro": "интервики-һылтанмала билдәләнгән кәрәкле URL адрес буйынса йүнәлтелә (йәғни урындағы биттәрҙең йүнәлтеүҙәре һымаҡ эшкәртелә)",
"interwiki_trans": "Ҡулланыу",
"interwiki-trans-label": "Ҡулланыу:",
- "interwiki_trans_intro": "Әгәр <code>{<nowiki />{ҡушымта:<em>биттең исеме</em>}}</code> вики-текст синтаксисы ҡулланылһа:",
"interwiki_trans_1_intro": "әгәр был вики-проектта интервики ҡушыуҙар рөхсәт ителһә, башҡа вики-проекттарҙан ҡушыу рөхсәт ителә.",
"interwiki_trans_0_intro": "рөхсәт ителмәй, ҡалып исемдәре арауығынан биттәр эҙләнә,",
- "interwiki_intro_footer": "Интервики таблицаһы тураһында тулыраҡ мәғлүмәт алыр өсөн [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] битенә керегеҙ.\nИнтервики таблицаһында [[Special:Log/interwiki|үҙгәртеү яҙмалары]] бар.",
"interwiki_1": "эйе",
"interwiki_0": "юҡ",
"interwiki_error": "Хата: Интервики таблицаһы буш, йә ниҙер хаталы эшләй.",
diff --git a/extensions/Interwiki/i18n/be-tarask.json b/extensions/Interwiki/i18n/be-tarask.json
index 9dc618b7..e5ed4ebe 100644
--- a/extensions/Interwiki/i18n/be-tarask.json
+++ b/extensions/Interwiki/i18n/be-tarask.json
@@ -10,24 +10,19 @@
"interwiki": "Прагляд і рэдагаваньне зьвестак пра інтэрвікі",
"interwiki-title-norights": "Прагляд зьвестак пра інтэрвікі",
"interwiki-desc": "Дадае [[Special:Interwiki|службовую старонку]] для прагляду і рэдагаваньня табліцы інтэрвікі.",
- "interwiki_intro": "Гэта апісаньне табліцы інтэрвікі.",
- "interwiki-legend-show": "Паказаць легенду",
- "interwiki-legend-hide": "Схаваць легенду",
+ "interwiki_intro": "Гэта агляд табліцы інтэрвікі, якая вызначае прэфіксы для выкарыстаньня ў кароткіх спасылках на розныя вікі і іншыя вонкавыя сайты. Дзеля рэкамэндацыяў у выкарыстаньні, калі ласка, глядзіце [//www.mediawiki.org/wiki/Extension:Interwiki інструкцыю на MediaWiki.org].",
"interwiki_prefix": "Прэфікс",
"interwiki-prefix-label": "Прэфікс:",
"interwiki_prefix_intro": "Прэфікс інтэрвікі, які будзе выкарыстоўвацца ў сынтаксісе <code>[<nowiki />[prefix:<em>назва старонкі</em>]]</code>.",
- "interwiki_url_intro": "Шаблён для URL-адрасоў. Сымбаль $1 будзе заменены <em>назвай старонкі</em> вікі-тэксту, калі будзе ўжывацца вышэйпазначаны сынтаксіс вікі-тэксту.",
+ "interwiki_url_intro": "Шаблён для URL-адрасоў. Сымбаль $1 будзе заменены <em>назвай старонкі</em> ў <code>[<nowiki />[прэфікс:<em>назва старонкі</em>]]</code>.",
"interwiki_local": "Так/Не",
"interwiki-local-label": "Перасылка:",
- "interwiki_local_intro": "HTTP-запыт да лякальнай вікі з гэтым прэфіксам інтэрвікі ў URL-адрасе:",
- "interwiki_local_0_intro": "ігнаруюцца, звычайна блякуюцца з дапамогай «старонка ня знойдзена»,",
- "interwiki_local_1_intro": "перанакіраваньне на мэтавую URL-спасылку пададзенае ў вызначэньнях інтэрвікі-спасылак (разглядаецца як спасылкі ў лякальных старонках)",
+ "interwiki_local_0_intro": "Вонкавыя HTTP-запыты да лякальнай вікі з гэтым інтэрвікі-прэфіксам у URL-адрасе будуць атрымліваць у выніку старонку з памылкай «{{int:badtitle}}».",
+ "interwiki_local_1_intro": "Вонкавыя HTTP-запыты да лякальнай вікі з гэтым інтэрвікі-прэфіксам будуць перанакіраваныя на мэтавы URL-адрас з інтэрвікі (разглядаюцца як спасылкі на лякальныя старонкі).",
"interwiki_trans": "Трансклюзія",
"interwiki-trans-label": "Трансклюзія:",
- "interwiki_trans_intro": "Калі выкарыстоўваецца сынтаксіс вікі-тэксту <code>{<nowiki />{prefix:<em>назва старонкі</em>}}</code>, тады:",
- "interwiki_trans_1_intro": "дазваляе трансклюзію зь іншай вікі, калі трансклюзія інтэрвікі дазволена ў гэтай вікі,",
- "interwiki_trans_0_intro": "не дазваляе гэта, замест шукаць старонку ў прасторы назваў шаблёнаў.",
- "interwiki_intro_footer": "Для дадатковай інфармацыі пра табліцу інтэрвікі глядзіце [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org].\nТут знаходзіцца [[Special:Log/interwiki|журнал зьменаў]] табліцы інтэрвікі.",
+ "interwiki_trans_1_intro": "Калі выкарыстоўваецца сынтаксыс <code>{<nowiki />{прэфікс:<em>назва старонкі</em>}}</code>, дазваляецца ўключэньне шаблёнаў/старонак зь іншых вікі, калі інтэрвікі-ўключэньні дазволеныя ў ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding жудасных уключэньнях]).",
+ "interwiki_trans_0_intro": "Не дазваляе <code>{<nowiki />{прэфікс:<em>назва старонкі</em>}}</code> уключаць шаблёны ці старонкі зь іншых сайтаў, пры гэтым шукае лякальную старонку ў прасторы назваў шаблёнаў.",
"interwiki_1": "так",
"interwiki_0": "не",
"interwiki_error": "Памылка: табліца інтэрвікі пустая альбо ўзьніклі іншыя праблемы.",
@@ -38,7 +33,7 @@
"interwiki_deleting": "Вы выдаляеце прэфікс «$1».",
"interwiki_deleted": "Прэфікс «$1» быў пасьпяхова выдалены з табліцы інтэрвікі.",
"interwiki_delfailed": "Прэфікс «$1» ня можа быць выдалены з табліцы інтэрвікі.",
- "interwiki_addtext": "Дадаць прэфікс інтэрвікі",
+ "interwiki_addtext": "Дадаць прэфікс інтэрвікі або мовы",
"interwiki_addintro": "Вы дадаеце новы прэфікс інтэрвікі.\nПамятайце, што ён ня можа ўтрымліваць прабелы ( ), двукроп'і (:), ампэрсанды (&), ці знакі роўнасьці (=).",
"interwiki_addbutton": "Дадаць",
"interwiki_added": "Прэфікс «$1» быў пасьпяхова дададзены да табліцы інтэрвікі.",
diff --git a/extensions/Interwiki/i18n/be.json b/extensions/Interwiki/i18n/be.json
index 10939e34..57afc222 100644
--- a/extensions/Interwiki/i18n/be.json
+++ b/extensions/Interwiki/i18n/be.json
@@ -5,7 +5,6 @@
"Чаховіч Уладзіслаў"
]
},
- "interwiki-legend-show": "Паказаць легенду",
"interwiki_reasonfield": "Прычына:",
"interwiki_addbutton": "Дадаць"
}
diff --git a/extensions/Interwiki/i18n/bg.json b/extensions/Interwiki/i18n/bg.json
index d631c4f4..5e78478b 100644
--- a/extensions/Interwiki/i18n/bg.json
+++ b/extensions/Interwiki/i18n/bg.json
@@ -12,7 +12,6 @@
"interwiki-prefix-label": "Представка:",
"interwiki_local": "Локално",
"interwiki-local-label": "Локално:",
- "interwiki_intro_footer": "Вижте [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] за повече информация относно таблицата с междууикита.\nСъществува и [[Special:Log/interwiki|дневник на промените]] в таблицата с междууикита.",
"interwiki_1": "да",
"interwiki_0": "не",
"interwiki_error": "ГРЕШКА: Таблицата с междууикита е празна или е възникнала друга грешка.",
diff --git a/extensions/Interwiki/i18n/br.json b/extensions/Interwiki/i18n/br.json
index b083dcf8..12f9d70c 100644
--- a/extensions/Interwiki/i18n/br.json
+++ b/extensions/Interwiki/i18n/br.json
@@ -10,23 +10,19 @@
"interwiki-title-norights": "Gwelet ar roadennoù etrewiki",
"interwiki-desc": "Ouzhpennañ a ra ur [[Special:Interwiki|bajenn dibar]] evit gwelet ha kemmañ taolenn an etrewiki",
"interwiki_intro": "Hemañ zo un alberz eus taolenn an etrewiki.",
- "interwiki-legend-show": "Diskouez an alc'hwez",
- "interwiki-legend-hide": "Kuzhat an alc'hwez",
+ "interwiki-legend-label": "Alc'hwez",
"interwiki_prefix": "Rakger",
"interwiki-prefix-label": "Rakger :",
"interwiki_prefix_intro": "Rakger etrewiki da vezañ implijet en <code>[<nowiki />[prefix:<em>anv ar bajenn</em>]]</code> en ereadur wikitestenn.",
"interwiki_url_intro": "Patrom evit an URLoù. Erlec'hiet e vo $1 gant <em>anv ar bajenn</em> ar wikitestenn, pa vez graet gant an ereadur wikitestenn a-us.",
"interwiki_local": "Treuzkas",
"interwiki-local-label": "Treuzkas :",
- "interwiki_local_intro": "Ur reked HTTP war ar wiki-mañ gant ar rakger etrewiki-mañ en URL a vo :",
"interwiki_local_0_intro": "nac'het, stanket alies gant \"pajenn nann-kavet\",",
"interwiki_local_1_intro": "Adkaset war-du an URL tal roet e termenadurioù al liammoù etrewiki (da lavaret eo e vez gwelet evel daveennoù er pajennoù lec'hel)",
"interwiki_trans": "Ebarzhiñ",
"interwiki-trans-label": "Treuzkludañ :",
- "interwiki_trans_intro": "Ma vez implijet an ereadur wikitestenn <code>{<nowiki />{prefix:<em>anv ar bajenn</em>}}</code>, neuze :",
"interwiki_trans_1_intro": "Aotren an treuzkludañ adalek ar wiki estren, ma vez aotreet treuzkludañ er wiki-mañ dre-vras,",
"interwiki_trans_0_intro": "na aotren an treuzkludañ, kentoc'h klask ur bajenn en esaouenn anv ar patrom.",
- "interwiki_intro_footer": "Gwelet [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] evit gouzout hiroc'h diwar-benn taolenn an etrewiki.\nUr [[Special:Log/interwiki|marilh ar c'hemmoù]] zo e taolenn an etrewiki.",
"interwiki_1": "ya",
"interwiki_0": "ket",
"interwiki_error": "Fazi : goullo eo taolenn an etrewiki, pe un dra bennak all zo aet a-dreuz.",
diff --git a/extensions/Interwiki/i18n/bs.json b/extensions/Interwiki/i18n/bs.json
index 6d7b207c..dfd2c6e6 100644
--- a/extensions/Interwiki/i18n/bs.json
+++ b/extensions/Interwiki/i18n/bs.json
@@ -18,15 +18,12 @@
"interwiki_url_intro": "Šablon za URLove. Šablon $1 će biti zamijenjen sa <em>pagename</em> wikiteksta, ako je gore spomenuta sintaksa wikiteksta korištena.",
"interwiki_local": "naprijed",
"interwiki-local-label": "Naprijed:",
- "interwiki_local_intro": "HTTP zahtjev na lokalnu wiki s ovim interwiki prefiksom u URL jeste:",
"interwiki_local_0_intro": "nije privilegovano, obično blokirano putem \"stranica nije nađena\",",
"interwiki_local_1_intro": "preusmjeravanje na ciljnu URL koja je navedena putem interwiki definicije (tj. tretira se poput referenci na lokalnim stranicama)",
"interwiki_trans": "Uključenja",
"interwiki-trans-label": "Uključenja:",
- "interwiki_trans_intro": "Ako se koristi wikitekst sintaksa <code>{<nowiki />{prefix:<em>pagename</em>}}</code>, onda:",
"interwiki_trans_1_intro": "dopuštena uključenja iz inostrane wiki, ako su međuwiki uključenja općenito dopuštena u ovoj wiki,",
"interwiki_trans_0_intro": "nisu dopuštena, radije treba tražiti stranice u imenskom prostoru šablona.",
- "interwiki_intro_footer": "Pogledaje [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] za više informacija o interwiki tabeli.\nPostoji [[Special:Log/interwiki|zapisnik izmjena]] na interwiki tabeli.",
"interwiki_1": "da",
"interwiki_0": "ne",
"interwiki_error": "Greška: interwiki tabela je prazna ili je nešto drugo pogrešno.",
diff --git a/extensions/Interwiki/i18n/ca.json b/extensions/Interwiki/i18n/ca.json
index 4f564e14..ac1757c8 100644
--- a/extensions/Interwiki/i18n/ca.json
+++ b/extensions/Interwiki/i18n/ca.json
@@ -13,23 +13,18 @@
"interwiki-title-norights": "Mapa de les dades interwiki",
"interwiki-desc": "Afegeix una [[Special:Interwiki|pàgina especial]] per veure i editar la taula interwiki",
"interwiki_intro": "Aquesta és una visió general de la taula d'interwikis.",
- "interwiki-legend-show": "Mostra la llegenda",
- "interwiki-legend-hide": "Amaga la llegenda",
"interwiki_prefix": "Prefix",
"interwiki-prefix-label": "Prefix:",
"interwiki_prefix_intro": "Prefix de interwiki és utilitzat en <code>[<nowiki />[prefix:<em>pagename</em>]]</code> sintaxi wikitext.",
"interwiki_url_intro": "Plantilla per a URLs. El marcador $1 serà substituït per <em>pagename</em> del wikitext, quan s'utilitza la sintaxi de wikitext esmentats.",
"interwiki_local": "Hi encamina",
"interwiki-local-label": "Endavant:",
- "interwiki_local_intro": "Una petició HTTP al wiki local amb aquest prefix interwiki en l'URL és:",
"interwiki_local_0_intro": "no honrat, generalment bloquejat per \"pàgina no trobada\",",
"interwiki_local_1_intro": "s'ha redirigit a l'URL de destinació donada a les definicions d'enllaç d'interwiki (és a dir, tractats com a referències a pàgines locals)",
"interwiki_trans": "Transclusió",
"interwiki-trans-label": "Transclude:",
- "interwiki_trans_intro": "Si la sintaxi wikitext <code>{<nowiki />{prefix:<em>pagename</em>}}</code> s'utilitza, llavors:",
"interwiki_trans_1_intro": "permetre transclusion des del wiki estranger, si aquest wiki, generalment admet interwiki transclusions",
"interwiki_trans_0_intro": "no es permet, busca una pàgina en l'espai de nom de la plantilla.",
- "interwiki_intro_footer": "Veure [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] per obtenir més informació sobre la taula de interwiki.\nHi ha un [[Special:Log/interwiki|registre de canvis]] a la taula de interwiki.",
"interwiki_1": "sí",
"interwiki_0": "no",
"interwiki_error": "Error: La taula interwiki és buida, o alguna cosa ha sortit malament.",
diff --git a/extensions/Interwiki/i18n/ce.json b/extensions/Interwiki/i18n/ce.json
index 990524f1..63bffe21 100644
--- a/extensions/Interwiki/i18n/ce.json
+++ b/extensions/Interwiki/i18n/ce.json
@@ -5,17 +5,19 @@
"Умар"
]
},
- "interwiki-title-norights": "Юкъарвикишан хаамаш хьажар",
+ "interwiki": "Юкъарвикийн нисдаран гӀирсе хьажар а хийцар а",
+ "interwiki-title-norights": "Юкъарвикийн хаамаш хьажар",
"interwiki-desc": "ТӀетуху [[Special:Interwiki|белхан агӀо]] юкъаравикин дешхьалхенашка хьажа а уьш тая а.",
- "interwiki_intro": "ХӀара ду юкъарвикишан таблице хьажар.",
+ "interwiki_intro": "ХӀара ду юкъарвикийн таблице хьажар.",
"interwiki-legend-label": "Легенда",
"interwiki_prefix": "ТӀетоьхна элпаш",
+ "interwiki-prefix-label": "Префикс:",
"interwiki_prefix_intro": "Юкъарвикин дешхьалхе вики-йозана синтаксисехь лело: <code>[<nowiki />[дешхьалхе:<em>агӀона цӀе</em>]]</code>.",
"interwiki_url_intro": "URLлан кеп. $1 метта хира ю <em>агӀона цӀе</em>, Лакхара синтаксис лелачу хенахь гайтина йолу.",
"interwiki_local": "ДӀасхьажор",
"interwiki-local-label": "ДӀасхьажор:",
"interwiki_local_0_intro": "магийна яц, хаамо блоктуху «агӀо цакарий»",
- "interwiki_local_1_intro": "дӀасхьахьажа йо Ӏалашонан URL, юкъарвики-хьажораш билгал еш язйина йолу (кеч йо локальни агӀона хьажораг сана)",
+ "interwiki_local_1_intro": "Арахьара HTTP-дехарш локальни викиш тӀе хӀара юкъаравики-префикс лела еш URL-адрес чохь тӀе хьажа йо URL-адрес юкъаравики-хьаоргаш (локальни агӀонийн тӀе йолу хьажоргаш санна кеч йо).",
"interwiki_trans": "Юкъатохар",
"interwiki-trans-label": "Юкъатохар:",
"interwiki_trans_1_intro": "Кхечу вики чура юкъарвикеш чуяха йиш хуьлуьйту хӀокху вики чохь магийна делахь.",
@@ -25,6 +27,11 @@
"interwiki_edit": "Нисъе",
"interwiki_reasonfield": "Бахьна:",
"interwiki_delquestion": "«$1» дӀаяккхар",
+ "interwiki-logtext": "Тептаршка хьажар",
"interwiki_addbutton": "ТӀетоха",
- "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|хийцина}} префикс «$4» ($5) (trans: $6; local: $7) юкъарвики-таблицехь"
+ "logentry-interwiki-iw_add": "$1 {{GENDER:$2|тӀетоьхна}} префикс «$4» ($5) (trans: $6; local: $7) юкъарвики-таблицехь",
+ "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|хийцина}} префикс «$4» ($5) (trans: $6; local: $7) юкъарвики-таблицехь",
+ "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|дӀаяьккхина}} префикс «$4» юкъарвики-таблицан чура",
+ "log-description-interwiki": "ХӀара [[Special:Interwiki|юкъарвики таблицан]] хицаман тептар ду.",
+ "interwiki-links": "Юкъарвикийн префиксаш"
}
diff --git a/extensions/Interwiki/i18n/cs.json b/extensions/Interwiki/i18n/cs.json
index b3b19ce5..c409b90b 100644
--- a/extensions/Interwiki/i18n/cs.json
+++ b/extensions/Interwiki/i18n/cs.json
@@ -34,6 +34,7 @@
"interwiki_delfailed": "Prefix „$1“ nebylo možné odstranit z tabulky interwiki.",
"interwiki-logtext": "Zobrazit protokolovací záznamy",
"interwiki_addtext": "Přidat prefix interwiki nebo jazyka",
+ "interwiki-addtext-local": "Přidat místní interwiki nebo jazykový prefix",
"interwiki_addintro": "Přidáváte nový interwiki prefix.\nMějte na vědomí, že nemůže obsahovat mezery ( ), dvojtečky (:), ampersandy (&), ani rovnítka (=).",
"interwiki_addbutton": "Přidat",
"interwiki_added": "Prefix „$1“ byl úspěšně přidán do tabulky interwiki.",
@@ -51,5 +52,12 @@
"logentry-interwiki-iw_delete": "$1 {{GENDER:$2|odebral|odebrala}} prefix „$4“ z tabulky interwiki",
"log-description-interwiki": "Toto je seznam změn [[Special:Interwiki|tabulky interwiki]].",
"right-interwiki": "Editování interwiki záznamů",
- "action-interwiki": "změnit tento záznam interwiki"
+ "action-interwiki": "změnit tento záznam interwiki",
+ "interwiki-global-links": "Globální interwiki prefixy",
+ "interwiki-global-description": "Tyto prefixy jsou převzaty z globální konfigurace a lze je editovat jen na zdrojové wiki.",
+ "interwiki-local-links": "Lokální interwiki prefixy",
+ "interwiki-local-description": "Tyto prefixy jsou definovány lokálně. Jakékoli duplicity vůči globální konfiguraci příslušnou globální definici překryjí.",
+ "interwiki-links": "Interwiki prefixy",
+ "interwiki-language-links": "Mezijazykové prefixy",
+ "interwiki-language-description": "Tyto prefixy odpovídají definovaným jazykovým kódům a použijí se k vytvoření seznamu „{{int:otherlanguages}}“, když se přidají do stránky."
}
diff --git a/extensions/Interwiki/i18n/cv.json b/extensions/Interwiki/i18n/cv.json
new file mode 100644
index 00000000..a2e466a1
--- /dev/null
+++ b/extensions/Interwiki/i18n/cv.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chuvash2014"
+ ]
+ },
+ "interwiki_edit": "Тӳрлет",
+ "interwiki_addbutton": "Хуш"
+}
diff --git a/extensions/Interwiki/i18n/cy.json b/extensions/Interwiki/i18n/cy.json
index bbfdc128..ad292280 100644
--- a/extensions/Interwiki/i18n/cy.json
+++ b/extensions/Interwiki/i18n/cy.json
@@ -12,7 +12,6 @@
"interwiki-local-label": "Anfon ymlaen:",
"interwiki_trans": "Trawsgynnwys",
"interwiki-trans-label": "Trawsgynnwys:",
- "interwiki_intro_footer": "Cewch ragor o wybodaeth am y tabl rhyngwici ar [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org].\nCofnodir newidiadau i'r tabl rhyngwici ar y [[Special:Log/interwiki|lòg newidiadau]].",
"interwiki_1": "gellir",
"interwiki_0": "ni ellir",
"interwiki_edit": "Golygu",
diff --git a/extensions/Interwiki/i18n/da.json b/extensions/Interwiki/i18n/da.json
index fdb4b90a..3c050d90 100644
--- a/extensions/Interwiki/i18n/da.json
+++ b/extensions/Interwiki/i18n/da.json
@@ -12,20 +12,16 @@
"interwiki-title-norights": "Vis interwikidata",
"interwiki-desc": "Tilføjer en [[Special:Interwiki|specialside]] til at få vist og redigere interwikitabellen",
"interwiki_intro": "Dette er en oversigt over interwikitabellen.",
- "interwiki-legend-show": "Vis forklaring",
- "interwiki-legend-hide": "Skjul forklaring",
"interwiki_prefix": "Præfiks",
"interwiki-prefix-label": "Præfiks:",
"interwiki_prefix_intro": "Interwiki præfiks som skal anvendes i <code>[<nowiki />[præfiks:<em>sidenavn</em>]]</code> wikitekst syntaks.",
"interwiki_url_intro": "Skabelon til URL-adresser. Pladsholderen $1 vil blive erstattet af <em>sidenavn</em> af wikitekst, når den ovennævnte wikitekst syntaks bruges.",
"interwiki_local": "Videresend",
"interwiki-local-label": "Videresend:",
- "interwiki_local_intro": "En HTTP-forespørgsel til den lokale wiki med denne interwiki præfiks i URL-adressen er:",
"interwiki_local_0_intro": "ikke accepteret, normalt blokeret af \"siden blev ikke fundet\".",
"interwiki_local_1_intro": "Omdirigeret til target URL i interwiki link definitioner (dvs. behandles som referencer i lokale sider).",
"interwiki_trans": "Transkluder",
"interwiki-trans-label": "Transkluder:",
- "interwiki_trans_intro": "Hvis wikitekst syntaksen <code>[<nowiki />[præfiks:<em>sidenavn</em>]]</code> bruges, så:",
"interwiki_1": "ja",
"interwiki_0": "nej",
"interwiki_error": "Fejl: Interwikitabellen er tom eller noget andet gik galt.",
diff --git a/extensions/Interwiki/i18n/de.json b/extensions/Interwiki/i18n/de.json
index 5bda3025..8a566248 100644
--- a/extensions/Interwiki/i18n/de.json
+++ b/extensions/Interwiki/i18n/de.json
@@ -66,5 +66,5 @@
"interwiki-local-description": "Diese Präfixe sind lokal vorhanden. Alle Duplikate mit der globalen Konfiguration überschreiben die globale Definition.",
"interwiki-links": "Interwiki-Präfixe",
"interwiki-language-links": "Interlanguage-Präfixe",
- "interwiki-language-description": "Diese Präfixe stimmen mit definierten Sprachcodes überein und werden zur Erstellung der Liste „In anderen Sprachen“ beim Hinzufügen zu einer Seite verwendet."
+ "interwiki-language-description": "Diese Präfixe stimmen mit definierten Sprachcodes überein und werden zur Erstellung der Liste „{{int:otherlanguages}}“ beim Hinzufügen zu einer Seite verwendet."
}
diff --git a/extensions/Interwiki/i18n/diq.json b/extensions/Interwiki/i18n/diq.json
index 5a3adc5b..b5b35fc7 100644
--- a/extensions/Interwiki/i18n/diq.json
+++ b/extensions/Interwiki/i18n/diq.json
@@ -6,7 +6,6 @@
]
},
"interwiki-title-norights": "Melumatê interwikiya bıvin",
- "interwiki-legend-show": "Lecanti bıvin",
"interwiki_prefix": "Verole",
"interwiki-prefix-label": "Verole:",
"interwiki_local": "Raver",
diff --git a/extensions/Interwiki/i18n/dsb.json b/extensions/Interwiki/i18n/dsb.json
index 2991b68e..ea647c80 100644
--- a/extensions/Interwiki/i18n/dsb.json
+++ b/extensions/Interwiki/i18n/dsb.json
@@ -8,8 +8,6 @@
"interwiki-title-norights": "Daty interwiki se wobglědaś",
"interwiki-desc": "Pśidawa [[Special:Interwiki|specialny bok]] za woglědowanje a wobźěłowanje tabele interwiki",
"interwiki_intro": "Toś to jo pśeglěd tabele interwiki.",
- "interwiki-legend-show": "Legendu pokazaś",
- "interwiki-legend-hide": "Legendu schowaś",
"interwiki_prefix": "Prefiks",
"interwiki-prefix-label": "Prefiks:",
"interwiki_prefix_intro": "Prefiks interwiki, kótaryž ma se we wikitekstowej syntaksy <code>[<nowiki />[prefix:<em>pagename</em>]]</code> wužywaś.",
@@ -17,15 +15,12 @@
"interwiki_url_intro": "Pśedłoga za URL. Zastupne znamješko $1 wuměnijo se pśez <em>mě boka</em> wikijowego teksta, gaž se wušej naspomnjona wikitekstowa syntaksa wužywa.",
"interwiki_local": "Doprědka",
"interwiki-local-label": "Doprědka:",
- "interwiki_local_intro": "Napšašowanje http do lokalnego wikija z toś tym prefiksom interwiki w URL jo:",
"interwiki_local_0_intro": "njepśipóznaty, zmólkowy bok \"{{int:badtitle}}\" zwobranznjujo se město togo.",
"interwiki_local_1_intro": "k celowemu URL pódanemu w definicijach wótkaza interwiki dalej pósrědnjony (t.j. wobchada se z tym, ako z referencami w lokalnych bokach)",
"interwiki_trans": "Transkluděrowaś",
"interwiki-trans-label": "Transkluděrowaś:",
- "interwiki_trans_intro": "Jolic se wikitekstowa syntaksa <code>{<nowiki />{prefix:<em>pagename</em>}}</code> wužywa, ga:",
"interwiki_trans_1_intro": "zapśěgnjenje z cuzego wikija dowóliś, jolic zapśěgnjenja interwiki su powšyknje w toś tom wikiju dopušćone,",
"interwiki_trans_0_intro": "jo njedowóliś, lubjej wuwoglěduj se za bokom w mjenjowem rumje Pśedłoga",
- "interwiki_intro_footer": "Glědaj [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] za dalšne informacije wó tabeli interwikijow.\nJo [[Special:Log/interwiki|protokol změnow]] tabele interwikijow.",
"interwiki_1": "jo",
"interwiki_0": "ně",
"interwiki_error": "Zmólka: Tabela interwiki jo prozna abo něco druge jo wopak.",
diff --git a/extensions/Interwiki/i18n/el.json b/extensions/Interwiki/i18n/el.json
index 5e358d43..04d3eede 100644
--- a/extensions/Interwiki/i18n/el.json
+++ b/extensions/Interwiki/i18n/el.json
@@ -7,30 +7,27 @@
"Evropi",
"Omnipaedista",
"Protnet",
- "ZaDiak"
+ "ZaDiak",
+ "Geraki"
]
},
"interwiki": "Εμφάνιση και επεξεργασία δεδομένων interwiki",
"interwiki-title-norights": "Εμφάνιση δεδομένων interwiki",
"interwiki-desc": "Προσθέτει μια [[Special:Interwiki|ειδική σελίδα]] για την προβολή και επεξεργασία του πίνακα interwiki",
- "interwiki_intro": "Αυτή είναι μια επισκόπηση του πίνακα interwiki.",
- "interwiki-legend-show": "Εμφάνιση υπομνήματος",
- "interwiki-legend-hide": "Απόκρυψη υπομνήματος",
+ "interwiki_intro": "Αυτό είναι μια επισκόπηση του πίνακα interwiki, ο οποίος καθορίζει τις συντομεύσεις πρόθεμα που χρησιμοποιούνται για τη γρήγορη διασύνδεση σε διαφορετικά wiki και άλλες εξωτερικές τοποθεσίες. Για τη συνιστώμενη χρήση, παρακαλούμε δείτε [//www.mediawiki.org/wiki/Extension:Interwiki το εγχειριδίο στο MediaWiki.org].",
+ "interwiki-legend-label": "Υπόμνημα",
"interwiki_prefix": "Πρόθεμα",
"interwiki-prefix-label": "Πρόθεμα:",
"interwiki_prefix_intro": "Πρόθεμα interwiki για χρήση στη σύνταξη του κώδικα wiki <code>[<nowiki />[prefix:<em>pagename</em>]]</code>.",
"interwiki_url_intro": "Πρότυπο για διευθύνσεις URL. Το σύμβολο κράτησης θέσης $1 θα αντικατασταθεί από το <em>pagename</em> του βικικώδικα, όταν χρησιμοποιείται η ανωτέρω σύνταξη βικικώδικα.",
"interwiki_local": "Προώθηση",
"interwiki-local-label": "Προώθηση:",
- "interwiki_local_intro": "Ένα αίτημα HTTP στο τοπικό wiki με αυτό το πρόθεμα interwiki στη διεύθυνση URL είναι:",
"interwiki_local_0_intro": "δεν ολοκληρώνεται, συνήθως μπλοκάρεται από σφάλμα τύπου \"η σελίδα δεν βρέθηκε\".",
"interwiki_local_1_intro": "ανακατευθύνεται στη διεύθυνση URL προορισμού που δίνεται στους ορισμούς συνδέσμου intewiki (δηλαδή αντιμετωπίζεται σαν αναφορά σε τοπικές σελίδες).",
"interwiki_trans": "Ενσωμάτωση",
"interwiki-trans-label": "Ενσωμάτωση:",
- "interwiki_trans_intro": "Εάν χρησιμοποιείται η σύνταξη κώδικα wiki <code>{<nowiki />{prefix:<em>pagename</em>}}</code>, τότε:",
"interwiki_trans_1_intro": "να επιτραπεί η ενσωμάτωση από το ξένο wiki, αν επιτρέπονται γενικά σε αυτό το wiki οι ενσωματώσεις intewiki.",
"interwiki_trans_0_intro": "να μην επιτραπεί, αλλά να αναζητηθεί μια σελίδα στο χώρο ονομάτων των προτύπων.",
- "interwiki_intro_footer": "Ανατρέξτε στο [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] για περισσότερες πληροφορίες σχετικά με τον πίνακα interwiki.\nΥπάρχει μια [[Special:Log/interwiki|καταγραφή των αλλαγών]] στον πίνακα interwiki.",
"interwiki_1": "ναι",
"interwiki_0": "όχι",
"interwiki_error": "Σφάλμα: Ο πίνακας interwiki είναι κενός, ή κάτι άλλο έχει πάει στραβά.",
@@ -41,6 +38,7 @@
"interwiki_deleting": "Διαγράφετε το πρόθεμα «$1».",
"interwiki_deleted": "Το πρόθεμα «$1» αφαιρέθηκε με επιτυχία από τον πίνακα interwiki.",
"interwiki_delfailed": "Το πρόθεμα «$1» δεν μπορεί να καταργηθεί από τον πίνακα interwiki.",
+ "interwiki-logtext": "Προβολή αρχείου καταγραφής",
"interwiki_addtext": "Προσθήκη ενός προθέματος interwiki",
"interwiki_addintro": "Πάτε να προσθέσετε ένα νέο πρόθεμα interwiki.\nΝα θυμάστε ότι δεν μπορεί να περιέχει κενό διάστημα ( ), άνω και κάτω τελεία (:), σύμβολο «και» (&) ή «ίσον» (=).",
"interwiki_addbutton": "Προσθήκη",
diff --git a/extensions/Interwiki/i18n/en-gb.json b/extensions/Interwiki/i18n/en-gb.json
index 0550b8c5..1170b0e0 100644
--- a/extensions/Interwiki/i18n/en-gb.json
+++ b/extensions/Interwiki/i18n/en-gb.json
@@ -1,8 +1,63 @@
{
"@metadata": {
"authors": [
- "Mdann52"
+ "Mdann52",
+ "Chase me ladies, I'm the Cavalry"
]
},
- "interwiki_local_0_intro": "Any external HTTP requests to the local wiki using this interwiki prefix in the URL will result in a \"{{int:badtitle}}\" error page."
+ "interwiki": "View and edit interwiki data",
+ "interwiki-title-norights": "View interwiki data",
+ "interwiki-desc": "Adds a [[Special:Interwiki|special page]] to view and edit the interwiki table",
+ "interwiki_intro": "This is an overview of the interwiki table, which defines the prefix shortcuts used to quickly link to different wikis and other external sites. For recommended use, please see [//www.mediawiki.org/wiki/Extension:Interwiki the manual on MediaWiki.org].",
+ "interwiki-legend-label": "Legend",
+ "interwiki_prefix": "Prefix",
+ "interwiki-prefix-label": "Prefix:",
+ "interwiki_prefix_intro": "Interwiki prefix to be used in <code>[<nowiki />[prefix:<em>pagename</em>]]</code> wikitext syntax.",
+ "interwiki_url_intro": "Template for URLs. The placeholder $1 will be replaced by the <em>pagename</em> in <code>[<nowiki />[prefix:<em>pagename</em>]]</code>.",
+ "interwiki_local": "Forward",
+ "interwiki-local-label": "Forward:",
+ "interwiki_local_0_intro": "Any external HTTP requests to the local wiki using this interwiki prefix in the URL will result in a \"{{int:badtitle}}\" error page.",
+ "interwiki_local_1_intro": "External HTTP requests to the local wiki using this interwiki prefix will be redirected to the target URL of the interwiki (i.e. treated like links to local pages).",
+ "interwiki_trans": "Transclude",
+ "interwiki-trans-label": "Transclude:",
+ "interwiki_trans_1_intro": "If wikitext syntax <code>{<nowiki />{prefix:<em>pagename</em>}}</code> is used, allow template/page transclusion from the foreign wiki if interwiki transclusions are enabled in general ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion]).",
+ "interwiki_trans_0_intro": "Do not allow <code>{<nowiki />{prefix:<em>pagename</em>}}</code> to transclude foreign templates/pages, rather look for a local page in the template namespace.",
+ "interwiki_1": "yes",
+ "interwiki_0": "no",
+ "interwiki_error": "Error: The interwiki table is empty, or something else went wrong.",
+ "interwiki-cached": "The interwiki data is cached. Modifying the cache is not possible.",
+ "interwiki_edit": "Edit",
+ "interwiki_reasonfield": "Reason:",
+ "interwiki_delquestion": "Deleting \"$1\"",
+ "interwiki_deleting": "You are deleting prefix \"$1\".",
+ "interwiki_deleted": "Prefix \"$1\" was successfully removed from the interwiki table.",
+ "interwiki_delfailed": "Prefix \"$1\" could not be removed from the interwiki table.",
+ "interwiki-logtext": "View log",
+ "interwiki_addtext": "Add an interwiki or language prefix",
+ "interwiki-addtext-local": "Add a local interwiki or language prefix",
+ "interwiki_addintro": "You are adding a new interwiki prefix.\nRemember that it cannot contain spaces ( ), colons (:), ampersands (&), or equal signs (=).",
+ "interwiki_addbutton": "Add",
+ "interwiki_added": "Prefix \"$1\" was successfully added to the interwiki table.",
+ "interwiki_addfailed": "Prefix \"$1\" could not be added to the interwiki table.\nPossibly it already exists in the interwiki table.",
+ "interwiki_edittext": "Editing an interwiki prefix",
+ "interwiki_editintro": "You are editing an interwiki prefix.\nRemember that this can break existing links.",
+ "interwiki_edited": "Prefix \"$1\" was successfully modified in the interwiki table.",
+ "interwiki_editerror": "Prefix \"$1\" could not be modified in the interwiki table.\nIt may not exist.",
+ "interwiki-badprefix": "Specified interwiki prefix \"$1\" contains invalid characters",
+ "interwiki-submit-empty": "The prefix and URL cannot be empty.",
+ "interwiki-submit-invalidurl": "The protocol of the URL is invalid.",
+ "log-name-interwiki": "Interwiki table log",
+ "logentry-interwiki-iw_add": "$1 {{GENDER:$2|added}} prefix \"$4\" ($5) (trans: $6; local: $7) to the interwiki table",
+ "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|modified}} prefix \"$4\" ($5) (trans: $6; local: $7) in the interwiki table",
+ "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|removed}} prefix \"$4\" from the interwiki table",
+ "log-description-interwiki": "This is a log of changes to the [[Special:Interwiki|interwiki table]].",
+ "right-interwiki": "Edit interwiki data",
+ "action-interwiki": "change this interwiki entry",
+ "interwiki-global-links": "Global interwiki prefixes",
+ "interwiki-global-description": "These prefixes are inherited from a global configuration, and can only be edited on the source wiki.",
+ "interwiki-local-links": "Local interwiki prefixes",
+ "interwiki-local-description": "These prefixes exist locally. Any duplicates with the global configuration will override the global definition.",
+ "interwiki-links": "Interwiki prefixes",
+ "interwiki-language-links": "Interlanguage prefixes",
+ "interwiki-language-description": "These prefixes match defined language codes, and will be used to create the \"{{int:otherlanguages}}\" listing when added to a page."
}
diff --git a/extensions/Interwiki/i18n/en.json b/extensions/Interwiki/i18n/en.json
index 8e06982c..c9347214 100644
--- a/extensions/Interwiki/i18n/en.json
+++ b/extensions/Interwiki/i18n/en.json
@@ -67,5 +67,5 @@
"interwiki-links": "Interwiki prefixes",
"interwiki-description": "",
"interwiki-language-links": "Interlanguage prefixes",
- "interwiki-language-description": "These prefixes match defined language codes, and will be used to create the 'in other languages' listing when added to a page."
+ "interwiki-language-description": "These prefixes match defined language codes, and will be used to create the \"{{int:otherlanguages}}\" listing when added to a page."
}
diff --git a/extensions/Interwiki/i18n/eo.json b/extensions/Interwiki/i18n/eo.json
index 96398144..20e09726 100644
--- a/extensions/Interwiki/i18n/eo.json
+++ b/extensions/Interwiki/i18n/eo.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Michawiki",
- "Yekrats"
+ "Yekrats",
+ "KuboF"
]
},
"interwiki": "Rigardi kaj redakti intervikiajn datenojn",
@@ -24,7 +25,7 @@
"interwiki_deleting": "Vi forigas prefikson \"$1\".",
"interwiki_deleted": "Prefikso \"$1\" estis sukcese forigita de la intervikia tabelo.",
"interwiki_delfailed": "Prefikso \"$1\" ne eblis esti forigita el la intervikia tabelo.",
- "interwiki_addtext": "Aldonu intervikian prefikson",
+ "interwiki_addtext": "Aldoni intervikian aŭ lingvan prefikson",
"interwiki_addintro": "Vi aldonas novan intervikian prefikson.\nMemoru ke ĝi ne povas enhavi spacetojn ( ), kolojn (:), kajsignojn (&), aŭ egalsignojn (=).",
"interwiki_addbutton": "Aldoni",
"interwiki_added": "Prefikso \"$1\" estis sukcese aldonita al la intervikia tabelo.",
diff --git a/extensions/Interwiki/i18n/es.json b/extensions/Interwiki/i18n/es.json
index 016d6115..f2793ce5 100644
--- a/extensions/Interwiki/i18n/es.json
+++ b/extensions/Interwiki/i18n/es.json
@@ -12,13 +12,15 @@
"Sanbec",
"Translationista",
"Vivaelcelta",
- "Macofe"
+ "Macofe",
+ "Fitoschido",
+ "Gustronico"
]
},
"interwiki": "Ver y editar la tabla de interwikis",
"interwiki-title-norights": "Ver datos de interwikis",
"interwiki-desc": "Añade una [[Special:Interwiki|página especial]] para ver y editar la tabla de interwikis",
- "interwiki_intro": "Esta es una visión general de la tabla intewiki.",
+ "interwiki_intro": "Este es un resumen de la tabla de interwikis, que define los atajos mediante prefijos usados para enlazar rápidamente diferentes wikis y otros sitios externos. Para recomendaciones de uso véase [//www.mediawiki.org/wiki/Extension:Interwiki el manual en MediaWiki.org].",
"interwiki_prefix": "Prefijo",
"interwiki-prefix-label": "Prefijo:",
"interwiki_prefix_intro": "Prefijo interwiki que se utilizará en sintaxis wikitexto <code>[<nowiki />[prefijo:<em>nombre de página</em>]]</code>.",
@@ -30,7 +32,7 @@
"interwiki_trans": "transcluir",
"interwiki-trans-label": "Transcluir:",
"interwiki_trans_1_intro": "Si se usa la sintaxis wikitexto <code>{<nowiki />{prefijo:<em>nombre de página</em>}}</code>, permitir la transclusión de la plantilla/página desde la wiki foránea, si las transclusiones interwikis están activadas en la ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding transclusión escalofriante]) general.",
- "interwiki_trans_0_intro": "no se permitirá, y en su lugar, buscará una página en el espacio de nombres de plantilla.",
+ "interwiki_trans_0_intro": "No permitir <code>{<nowiki />{prefijo:<em>nombredepágina</em>}}</code> transcluir plantillas/páginas foráneas. En su lugar, buscar una página local en el espacio de nombres de la plantilla.",
"interwiki_1": "sí",
"interwiki_0": "no",
"interwiki_error": "Error: La tabla de interwikis está vacía, u otra cosa salió mal.",
@@ -41,7 +43,8 @@
"interwiki_deleting": "Estás borrando el prefijo «$1».",
"interwiki_deleted": "El prefijo «$1» ha sido borrado correctamente de la tabla de interwikis.",
"interwiki_delfailed": "El prefijo «$1» no puede ser borrado de la tabla de interwikis.",
- "interwiki_addtext": "Añadir un prefijo interwiki",
+ "interwiki-logtext": "Ver registro",
+ "interwiki_addtext": "Añadir un prefijo interwiki o de idioma",
"interwiki_addintro": "Estás añadiendo un nuevo prefijo interwiki.\nRecuerda que no puede contener espacios ( ), dos puntos (:), ni los signos ''et'' (&), o ''igual'' (=).",
"interwiki_addbutton": "Agregar",
"interwiki_added": "El prefijo «$1» ha sido añadido correctamente a la tabla de interwikis.",
@@ -59,5 +62,8 @@
"logentry-interwiki-iw_delete": "$1 {{GENDER:$2|eliminó}} el prefijo \"$4\" de la tabla interwiki",
"log-description-interwiki": "Este es un registro de los cambios hechos a la [[Special:Interwiki|tabla interwiki]].",
"right-interwiki": "Editar datos de interwiki",
- "action-interwiki": "cambiar esta entrada interwiki"
+ "action-interwiki": "cambiar esta entrada interwiki",
+ "interwiki-global-links": "Prefijos de interwikis globales",
+ "interwiki-links": "Prefijos de interwikis",
+ "interwiki-language-links": "Prefijos interlingüísticos"
}
diff --git a/extensions/Interwiki/i18n/et.json b/extensions/Interwiki/i18n/et.json
index c46bc5cb..7a24252a 100644
--- a/extensions/Interwiki/i18n/et.json
+++ b/extensions/Interwiki/i18n/et.json
@@ -8,24 +8,19 @@
"interwiki": "Intervikiandmete vaatamine ja muutmine",
"interwiki-title-norights": "Intervikiandmete vaatamine",
"interwiki-desc": "Lisab [[Special:Interwiki|erilehekülje]] intervikitabeli vaatamiseks ja muutmiseks.",
- "interwiki_intro": "See on intervikitabeli ülevaade.",
- "interwiki-legend-show": "Näita legendi",
- "interwiki-legend-hide": "Peida legend",
+ "interwiki_intro": "See on intervikitabeli ülevaade, kus on määratud otseteede eesliited, millega saab hõlpsasti teistesse vikidesse ja muudesse välistesse võrgukohtadesse linkida. Soovitusliku kasutamise kohta loe [//www.mediawiki.org/wiki/Extension:Interwiki juhendit MediaWiki.org-is].",
"interwiki_prefix": "Eesliide",
"interwiki-prefix-label": "Eesliide:",
"interwiki_prefix_intro": "Eesliide, mida kasutatakse intervikilingi süntaksis <code>[<nowiki />[eesliide:<em>lehenimi</em>]]</code>.",
- "interwiki_url_intro": "Internetiaadressi mall. Kui kasutatakse ülaltoodud süntaksit, asendab kohatäidet $1 <em>lehenimi</em>.",
+ "interwiki_url_intro": "Internetiaadressi mall. Kohatäide $1 asendatakse <em>lehekülje pealkirjaga</em>, süntaks: <code>[<nowiki />[eesliide:<em>lehekülje pealkiri</em>]]</code>.",
"interwiki_local": "Suunatud",
"interwiki-local-label": "Suunatud:",
- "interwiki_local_intro": "URL-veerus toodud HTTP-nõue selle interviki eesliitega kohalikku vikisse:",
- "interwiki_local_0_intro": "pole jõus, harilikult päädib teatega \"lehekülge ei leitud\".",
- "interwiki_local_1_intro": "on suunatud interviki määratlustes toodud sihtaadressile (st töötab nagu lingid kohalikel lehekülgedel).",
+ "interwiki_local_0_intro": "Seda interviki eesliidet kasutav HTTP-välispäring kohalikku vikisse päädib tõrkeleheküljega \"{{int:badtitle}}\".",
+ "interwiki_local_1_intro": "Seda interviki eesliidet kasutav HTTP-välispäring kohalikku vikisse suunatakse ümber interviki sihtaadressile (st töötab nagu link kohalikule leheküljele).",
"interwiki_trans": "Kasutamine mallina",
"interwiki-trans-label": "Kasutamine mallina:",
- "interwiki_trans_intro": "Kui kasutatakse vikiteksti süntaksit <code>{<nowiki />{eesliide:<em>lehenimi</em>}}</code>, siis:",
- "interwiki_trans_1_intro": "võimaldatakse välisviki lehekülje kasutamist mallina, kui nii toimimine on selles vikis üldiselt lubatud.",
- "interwiki_trans_0_intro": "seda ei lubata, vaid pöördutakse malli nimeruumis asuva lehekülje poole.",
- "interwiki_intro_footer": "Lisateavet intervikitabeli kohta leiad aadressilt [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org].\nIntervikitabelis tehtud muudatused on [[Special:Log/interwiki|logis]].",
+ "interwiki_trans_1_intro": "Kui kasutatakse süntaksit <code>{<nowiki />{eesliide:<em>lehekülje pealkiri</em>}}</code>, võimaldatakse välisviki malli või lehekülje kasutamist mallina, eeldusel, et nii toiminine on üldiselt lubatud ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding ScaryTranscluding]).",
+ "interwiki_trans_0_intro": "Süntakiga <code>{<nowiki />{eesliide:<em>lehekülje pealkiri</em>}}</code> ei lubata välisviki malli või lehekülge mallina kasutada, vaid pöördutakse kohalikus mallinimeruumis asuva lehekülje poole.",
"interwiki_1": "jah",
"interwiki_0": "ei",
"interwiki_error": "Tõrge: Intervikitabel on tühi või läks midagi muud viltu.",
@@ -36,7 +31,8 @@
"interwiki_deleting": "Kustutad eesliidet \"$1\".",
"interwiki_deleted": "Eesliide \"$1\" eemaldati edukalt intervikitabelist.",
"interwiki_delfailed": "Eesliidet \"$1\" ei saa intervikitabelist eemaldada.",
- "interwiki_addtext": "Lisa interviki eesliide",
+ "interwiki-logtext": "Vaata logi",
+ "interwiki_addtext": "Lisa interviki või keele eesliide",
"interwiki_addintro": "Lisad uut interviki eesliidet.\nPea meeles, et see ei saa sisaldada tühikuid ( ), kooloneid (:), ja-märke (&) ega võrdusmärke (=).",
"interwiki_addbutton": "Lisa",
"interwiki_added": "Eesliide \"$1\" lisati edukalt intervikitabelisse.",
@@ -54,5 +50,8 @@
"logentry-interwiki-iw_delete": "$1 {{GENDER:$2|eemaldas}} intervikitabelist eesliite \"$4\"",
"log-description-interwiki": "See on [[Special:Interwiki|intervikitabelis]] tehtud muudatuste logi.",
"right-interwiki": "Muuta intervikiandmeid",
- "action-interwiki": "muuta seda intervikitabeli sissekannet"
+ "action-interwiki": "muuta seda intervikitabeli sissekannet",
+ "interwiki-links": "Interviki eesliited",
+ "interwiki-language-links": "Keeltevahelised eesliited",
+ "interwiki-language-description": "Need eesliited vastavad määratud keelekoodidele, mida lehekülgedel kasutatakse nimekirja \"{{int:otherlanguages}}\" keelelinkide jaoks."
}
diff --git a/extensions/Interwiki/i18n/eu.json b/extensions/Interwiki/i18n/eu.json
index ae11f86e..fc80da4c 100644
--- a/extensions/Interwiki/i18n/eu.json
+++ b/extensions/Interwiki/i18n/eu.json
@@ -11,15 +11,12 @@
"interwiki-title-norights": "Ikusi interwikiak",
"interwiki-desc": "Interwiki taula ikusi eta aldatzeko [[Special:Interwiki|orrialde berezi]] bat gehitzen du",
"interwiki_intro": "Hau interwiki taularen ikuspegi orokor bat da.",
- "interwiki-legend-show": "Erakutsi azalpenak",
- "interwiki-legend-hide": "Ezkutatu azalpenak",
"interwiki_prefix": "Aurrizkia",
"interwiki-prefix-label": "Aurrizkia:",
"interwiki_local": "Aurrera",
"interwiki-local-label": "Aurrera:",
"interwiki_trans": "Txertatu",
"interwiki-trans-label": "Txertatu:",
- "interwiki_trans_intro": "<code>{<nowiki />{prefix:<em>pagename</em>}}</code> wikitestu erako sintaxia erabiltzen bada, orduan:",
"interwiki_1": "bai",
"interwiki_0": "ez",
"interwiki_edit": "Aldatu",
diff --git a/extensions/Interwiki/i18n/fa.json b/extensions/Interwiki/i18n/fa.json
index 7b76b70c..e7d3a8e4 100644
--- a/extensions/Interwiki/i18n/fa.json
+++ b/extensions/Interwiki/i18n/fa.json
@@ -16,8 +16,6 @@
"interwiki-title-norights": "مشاهدهٔ اطلاعات میان‌ویکی",
"interwiki-desc": "یک [[Special:Interwiki|صفحهٔ ویژه]] برای مشاهده و ویرایش جدول میان‌ویکی می‌افزاید.",
"interwiki_intro": "این یک نمای کلی از جدول interwiki است.",
- "interwiki-legend-show": "نمایش علائم",
- "interwiki-legend-hide": "پنهان‌کردن علائم",
"interwiki_prefix": "پیشوند",
"interwiki-prefix-label": "پیشوند:",
"interwiki_prefix_intro": "پیشوند ویکی داخلی در <code>[<nowiki />[prefix:<em>pagename</em>]]</code> نحو متن ویکی استفاده شده‌است.",
@@ -32,7 +30,6 @@
"interwiki-trans-label": "تراگنجانش:",
"interwiki_trans_1_intro": "اگر نحو ویکی‌متن <code>{<nowiki />{prefix:<em>pagename</em>}}</code> مورد استفاده قرار گرفته‌است، به صفحه/الگو برای تراگنجانش از ویکی خارجی اگر تراگنجانش‌های میان‌ویکی به طور کلی فعال هستند اجازه دهید ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding تراگنجانش ترسناک]).",
"interwiki_trans_0_intro": "به <code>{<nowiki />{prefix:<em>pagename</em>}}</code> اجازه ندهید تا الگوها/صفحات خارجی را تراگنجانش کند، جای آن دنبال یک صفحه محلی در فضای نام آن الگو بگردید.",
- "interwiki_intro_footer": "برای اطلاعات بیشتر در مورد Interwiki به [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] مراحعه نمائید.\nهمچنین می‌توانید [[Special:Log/interwiki|تاریخچهٔ تغییرات]] چدول Interwiki را مشاهده کنید.",
"interwiki_1": "بله",
"interwiki_0": "خیر",
"interwiki_error": "خطا: جدول میان‌ویکی خالی است، یا چیز دیگری مشکل دارد.",
diff --git a/extensions/Interwiki/i18n/fi.json b/extensions/Interwiki/i18n/fi.json
index 6eb81351..6e67560a 100644
--- a/extensions/Interwiki/i18n/fi.json
+++ b/extensions/Interwiki/i18n/fi.json
@@ -15,8 +15,6 @@
"interwiki-title-norights": "Katso interwiki-tietoja",
"interwiki-desc": "Lisää [[Special:Interwiki|toimintosivun]], jonka avulla voi katsoa ja muokata interwiki-taulua.",
"interwiki_intro": "Tämä on yleiskatsaus interwikien taulukosta.",
- "interwiki-legend-show": "Näytä selitykset",
- "interwiki-legend-hide": "Piilota selitykset",
"interwiki_prefix": "Etuliite",
"interwiki-prefix-label": "Etuliite:",
"interwiki_local": "Välitä",
diff --git a/extensions/Interwiki/i18n/fr.json b/extensions/Interwiki/i18n/fr.json
index 719a7d0b..90e88853 100644
--- a/extensions/Interwiki/i18n/fr.json
+++ b/extensions/Interwiki/i18n/fr.json
@@ -13,13 +13,15 @@
"Tititou36",
"Urhixidur",
"Verdy p",
- "Ltrlg"
+ "Ltrlg",
+ "Macofe"
]
},
"interwiki": "Voir et manipuler les données interwiki",
"interwiki-title-norights": "Voir les données interwiki",
"interwiki-desc": "Ajoute une [[Special:Interwiki|page spéciale]] pour voir et modifier la table interwiki",
- "interwiki_intro": "Ceci est un aperçu de la table interwiki.",
+ "interwiki_intro": "Ceci est un aperçu de la table interwiki, qui définit les préfixes raccourcis utilisés pour faire des liens rapides vers différents wikis et d’autres sites externes. Pour l’utilisation recommandée, voyez [//www.mediawiki.org/wiki/Extension:Interwiki le manuel sur MediaWiki.org].",
+ "interwiki-legend-label": "Légende",
"interwiki_prefix": "Préfixe",
"interwiki-prefix-label": "Préfixe :",
"interwiki_prefix_intro": "Préfixe interwiki à utiliser dans <code>[<nowiki />[préfixe:<em>nom de la page</em>]]</code> de la syntaxe wiki.",
@@ -43,6 +45,7 @@
"interwiki_deleting": "Vous effacez présentement le préfixe « $1 ».",
"interwiki_deleted": "« $1 » a été enlevé avec succès de la table interwiki.",
"interwiki_delfailed": "« $1 » n'a pas pu être enlevé de la table interwiki.",
+ "interwiki-logtext": "Afficher le journal",
"interwiki_addtext": "Ajouter un préfixe interwiki ou interlangue",
"interwiki-addtext-local": "Ajouter un préfixe interwiki ou interlangue local",
"interwiki_addintro": "Vous êtes en train d'ajouter un préfixe interwiki. Rappelez-vous qu'il ne peut pas contenir d'espaces ( ), de deux-points (:), d'esperluettes (&) ou de signes égal (=).",
@@ -69,5 +72,5 @@
"interwiki-local-description": "Ces préfixes sont définis localement. Les préfixes locaux remplacent les préfixes globaux en cas de doublon.",
"interwiki-links": "Préfixes interwiki",
"interwiki-language-links": "Préfixes interlangues",
- "interwiki-language-description": "Ces préfixes correspondent à des codes de langue défini et sont utilisés pour créer la liste « dans d’autres langues » lorsqu’ils sont ajoutés à une page."
+ "interwiki-language-description": "Ces préfixes correspondent à des codes de langue défini et sont utilisés pour créer la liste \"{{int:otherlanguages}}\" lorsqu’ils sont ajoutés à une page."
}
diff --git a/extensions/Interwiki/i18n/frp.json b/extensions/Interwiki/i18n/frp.json
index d3f12ed3..675ef7c2 100644
--- a/extensions/Interwiki/i18n/frp.json
+++ b/extensions/Interwiki/i18n/frp.json
@@ -7,8 +7,6 @@
},
"interwiki": "Vêre et changiér les balyês entèrvouiqui",
"interwiki-title-norights": "Vêre les balyês entèrvouiqui",
- "interwiki-legend-show": "Fâre vêre la lègenda",
- "interwiki-legend-hide": "Cachiér la lègenda",
"interwiki_prefix": "Prèfixo",
"interwiki-prefix-label": "Prèfixo :",
"interwiki_local": "Fâre siuvre",
diff --git a/extensions/Interwiki/i18n/fy.json b/extensions/Interwiki/i18n/fy.json
index 91176776..575613bb 100644
--- a/extensions/Interwiki/i18n/fy.json
+++ b/extensions/Interwiki/i18n/fy.json
@@ -1,8 +1,13 @@
{
"@metadata": {
"authors": [
- "Snakesteuben"
+ "Snakesteuben",
+ "Robin0van0der0vliet"
]
},
+ "interwiki-legend-label": "Leginda",
+ "interwiki_1": "ja",
+ "interwiki_0": "nee",
+ "interwiki_edit": "Bewurkje",
"interwiki_addbutton": "Tafoegje"
}
diff --git a/extensions/Interwiki/i18n/gl.json b/extensions/Interwiki/i18n/gl.json
index f47bbcc5..ba52c2ef 100644
--- a/extensions/Interwiki/i18n/gl.json
+++ b/extensions/Interwiki/i18n/gl.json
@@ -6,49 +6,47 @@
"Xosé"
]
},
- "interwiki": "Ver e manipular datos interwiki",
- "interwiki-title-norights": "Ver os datos do interwiki",
+ "interwiki": "Ver e modificar os datos interwiki",
+ "interwiki-title-norights": "Ver os datos interwiki",
"interwiki-desc": "Engade unha [[Special:Interwiki|páxina especial]] para ver e editar a táboa de interwikis",
- "interwiki_intro": "Esta é unha vista xeral da táboa de interwikis.",
- "interwiki-legend-show": "Mostrar a lenda",
- "interwiki-legend-hide": "Agochar a lenda",
+ "interwiki_intro": "Esta é unha vista xeral da táboa de interwikis, que define os atallos mediante prefixos usados para ligar rapidamente diferentes wikis e outros sitios externos. Para consultar as recomendacións de uso, véxase [//www.mediawiki.org/wiki/Extension:Interwiki o manual en MediaWiki.org].",
+ "interwiki-legend-label": "Lenda",
"interwiki_prefix": "Prefixo",
"interwiki-prefix-label": "Prefixo:",
"interwiki_prefix_intro": "Prefixo interwiki a utilizar coa sintaxe de texto wiki <code>[<nowiki />[prefixo:<em>nome da páxina</em>]]</code>.",
"interwiki_url": "URL",
"interwiki-url-label": "URL:",
- "interwiki_url_intro": "Modelo para os enderezos URL. O marcador $1 será substituído polo <em>nome da páxina</em> do texto wiki ao usar a sintaxe do devantito texto wiki.",
+ "interwiki_url_intro": "Modelo para os enderezos URL. O marcador \"$1\" será substituído polo <em>nome da páxina</em> en <code>[<nowiki />[prefixo:<em>nome da páxina</em>]]</code>.",
"interwiki_local": "Avanzar",
"interwiki-local-label": "Avanzar:",
- "interwiki_local_intro": "Unha solicitude HTTP ao wiki local con este prefixo interwiki no URL é:",
- "interwiki_local_0_intro": "ignorada; no seu lugar, móstrase unha páxina de erro do tipo \"{{int:badtitle}}\".",
- "interwiki_local_1_intro": "redirixida cara ao enderezo URL de destino indicado na ligazón interwiki das definicións (ou sexa, será tratada como unha ligazón a unha páxina local).",
+ "interwiki_local_0_intro": "As solicitudes HTTP externas ao wiki local que usen este prefixo interwiki no enderezo URL resultarán nunha páxina de erro \"{{int:badtitle}}\".",
+ "interwiki_local_1_intro": "As solicitudes HTTP externas ao wiki local que usen este prefixo interwiki serán redirixidas cara ao enderezo URL de destino do interwiki (ou sexa, serán tradadas como unha ligazón a unha páxina local).",
"interwiki_trans": "Transcluír",
"interwiki-trans-label": "Transcluír:",
- "interwiki_trans_intro": "Se se utiliza a sintaxe de texto wiki <code>{<nowiki />{prefixo:<em>nome da páxina</em>}}</code>, entón:",
- "interwiki_trans_1_intro": "permitir as transclusións a partir do wiki estranxeiro, se estas transclusións interwiki están xeralmente permitidas neste wiki.",
- "interwiki_trans_0_intro": "non permitir, e procurar a páxina no espazo de nomes \"Modelo\".",
- "interwiki_intro_footer": "Consulte [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] para obter máis información acerca da táboa de interwikis.\nAdemais, existe un [[Special:Log/interwiki|rexistro dos cambios]] realizados á táboa de interwikis.",
+ "interwiki_trans_1_intro": "Se se usa a sintaxe de texto wiki <code>{<nowiki />{prefixo:<em>nomedapáxina</em>}}</code>, permítese a transclusión de modelos/páxinas desde un wiki foráneo se as transclusións interwiki están activadas en xeral ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding transclusións especiais]).",
+ "interwiki_trans_0_intro": "Non permitir a sintaxe <code>{<nowiki />{prefixo:<em>nomedepáxina</em>}}</code> para transcluír modelos/páxinas externos; no seu lugar, procurar unha páxina local no espazo de nomes \"Modelo\".",
"interwiki_1": "si",
"interwiki_0": "non",
"interwiki_error": "Erro: A táboa de interwikis está baleira, ou algo máis saíu mal.",
"interwiki-cached": "Os datos sobre os interwikis almacénanse na caché. Non é posible modificar a caché.",
"interwiki_edit": "Editar",
"interwiki_reasonfield": "Motivo:",
- "interwiki_delquestion": "Eliminando \"$1\"",
- "interwiki_deleting": "Vai eliminar o prefixo \"$1\".",
- "interwiki_deleted": "Eliminouse sen problemas o prefixo \"$1\" da táboa de interwikis.",
+ "interwiki_delquestion": "Borrando \"$1\"",
+ "interwiki_deleting": "Está a piques de borrar o prefixo \"$1\".",
+ "interwiki_deleted": "Eliminouse correctamente o prefixo \"$1\" da táboa de interwikis.",
"interwiki_delfailed": "Non se puido eliminar o prefixo \"$1\" da táboa de interwikis.",
- "interwiki_addtext": "Engadir un prefixo interwiki",
+ "interwiki-logtext": "Ver o rexistro",
+ "interwiki_addtext": "Engadir un interwiki ou prefixo de lingua",
+ "interwiki-addtext-local": "Engadir un interwiki local ou prefixo de lingua",
"interwiki_addintro": "Está engadindo un novo prefixo interwiki. Recorde que non pode conter espazos ( ), dous puntos (:), símbolos de unión (&) ou signos de igual (=).",
"interwiki_addbutton": "Engadir",
- "interwiki_added": "Engadiuse sen problemas o prefixo \"$1\" á táboa de interwikis.",
+ "interwiki_added": "Engadiuse correctamente o prefixo \"$1\" á táboa de interwikis.",
"interwiki_addfailed": "Non se puido engadir o prefixo \"$1\" á táboa de interwikis.\nPosiblemente xa existe na táboa de interwikis.",
"interwiki_edittext": "Editando un prefixo interwiki",
"interwiki_editintro": "Está editando un prefixo interwiki. Lembre que isto pode quebrar ligazóns existentes.",
- "interwiki_edited": "O prefixo \"$1\" foi modificado con éxito na táboa de interwikis.",
- "interwiki_editerror": "O prefixo \"$1\" non se puido modificar na táboa de interwikis. Posiblemente non existe.",
- "interwiki-badprefix": "O prefixo interwiki especificado \"$1\" contén caracteres inválidos",
+ "interwiki_edited": "Modificouse correctamente o prefixo \"$1\" na táboa de interwikis.",
+ "interwiki_editerror": "Non se puido modificar o prefixo \"$1\" na táboa de interwikis.\nPosiblemente non existe.",
+ "interwiki-badprefix": "O prefixo interwiki especificado \"$1\" contén caracteres non válidos",
"interwiki-submit-empty": "O prefixo e o enderezo URL non poden quedar baleiros.",
"interwiki-submit-invalidurl": "O protocolo do enderezo URL non é válido.",
"log-name-interwiki": "Rexistro da táboa de interwikis",
@@ -56,6 +54,13 @@
"logentry-interwiki-iw_edit": "$1 {{GENDER:$2|modificou}} o prefixo \"$4\" ($5) (trans: $6; local: $7) na táboa de interwikis",
"logentry-interwiki-iw_delete": "$1 {{GENDER:$2|eliminou}} o prefixo \"$4\" da táboa de interwikis",
"log-description-interwiki": "Este é un rexistro dos cambios feitos na [[Special:Interwiki|táboa de interwikis]].",
- "right-interwiki": "Editar os datos do interwiki",
- "action-interwiki": "cambiar esta entrada de interwiki"
+ "right-interwiki": "Editar os datos interwiki",
+ "action-interwiki": "cambiar esta entrada de interwiki",
+ "interwiki-global-links": "Prefixos interwiki globais",
+ "interwiki-global-description": "Estes prefixos proveñen dunha configuración global e pódense modificar unicamente no wiki de orixe.",
+ "interwiki-local-links": "Prefixos interwiki locais",
+ "interwiki-local-description": "Estes prefixos existen localmente. De haber un conflito coa configuración global ignórase a definición global.",
+ "interwiki-links": "Prefixos interwiki",
+ "interwiki-language-links": "Prefixos interlingüísticos",
+ "interwiki-language-description": "Estes prefixos correspóndense cos códigos de lingua definidos e úsanse para crear a lista \"{{int:otherlanguages}}\" ao engadirse a unha páxina."
}
diff --git a/extensions/Interwiki/i18n/gsw.json b/extensions/Interwiki/i18n/gsw.json
index 993f0988..e1234c60 100644
--- a/extensions/Interwiki/i18n/gsw.json
+++ b/extensions/Interwiki/i18n/gsw.json
@@ -9,23 +9,18 @@
"interwiki-title-norights": "Interwiki-Date aaluege",
"interwiki-desc": "[[Special:Interwiki|Spezialsyte]] zum Interwiki-Tabälle pfläge",
"interwiki_intro": "Des isch e Iberblick iber d Interwiki-Tabälle.",
- "interwiki-legend-show": "Legende aazeige",
- "interwiki-legend-hide": "Legende ussblände",
"interwiki_prefix": "Präfix",
"interwiki-prefix-label": "Präfix:",
"interwiki_prefix_intro": "Interwiki-Präfix, wu in dr Form <code>[<nowiki />[präfix:<em>Sytename</em>]]</code> im Wikitext cha bruucht wäre.",
"interwiki_url_intro": "Muschter für URL. Dr Platzhalter $1 wird dur <em>Sytename</em> us dr Syntax im Wikitäxt ersetzt, wu oben gnännt wird.",
"interwiki_local": "Wyter",
"interwiki-local-label": "Wyter:",
- "interwiki_local_intro": "E HTTP-Aafrog an s lokal Wiki mit däm Interwiki-Präfix in dr URL wird:",
"interwiki_local_0_intro": "nit gmacht, sundere normalerwyys mit „Syte nit gfunde“ blockiert",
"interwiki_local_1_intro": "automatisch uf d Ziil-URL in dr Interwikigleich-Definitione wytergleitet (d. h. behandlet wie Wikigleicher uf lokali Syte)",
"interwiki_trans": "Quer vernetze",
"interwiki-trans-label": "Quer vernetze:",
- "interwiki_trans_intro": "Wänn Vorlagesyntax <code>{<nowiki />{präfix:<em>Sytename</em>}}</code> bruucht wird, derno:",
"interwiki_trans_1_intro": "erlaub Yybindige vu andere Wiki, wänn Interwiki-Yybindigen in däm Wiki allgmein zuelässig sin,",
"interwiki_trans_0_intro": "erlaub s nit, un nimm e Syte us em Vorlagenamensruum.",
- "interwiki_intro_footer": "Lueg [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] fir meh Informationen iber d Interwiki-Tabälle. S [[Special:Log/interwiki|Logbuech]] zeigt e Protokoll vu allene Änderigen an dr Interwiki-Tabälle.",
"interwiki_1": "jo",
"interwiki_0": "nei",
"interwiki_error": "Fähler: D Interwiki-Tabälle isch läär.",
diff --git a/extensions/Interwiki/i18n/he.json b/extensions/Interwiki/i18n/he.json
index f01c5f6a..6e36c7ac 100644
--- a/extensions/Interwiki/i18n/he.json
+++ b/extensions/Interwiki/i18n/he.json
@@ -13,6 +13,7 @@
"interwiki-title-norights": "הצגת מידע על קידומות בינוויקי",
"interwiki-desc": "הוספת [[Special:Interwiki|דף מיוחד]] להצגה ולעריכה של מידע על קידומות בינוויקי",
"interwiki_intro": "זוהי סקירה של טבלת קידומות בינוויקי.",
+ "interwiki-legend-label": "מקרא",
"interwiki_prefix": "קידומת",
"interwiki-prefix-label": "קידומת:",
"interwiki_prefix_intro": "קידומת הבינוויקי שתשמש בתחביר <code>[<nowiki />[prefix:<em>pagename</em>]]</code>",
@@ -35,6 +36,7 @@
"interwiki_deleting": "הנכם מוחקים את הקידומת \"$1\".",
"interwiki_deleted": "הקידומת \"$1\" הוסרה בהצלחה מטבלת הבינוויקי.",
"interwiki_delfailed": "לא ניתן להסיר את הקידומת \"$1\" מטבלת הבינוויקי.",
+ "interwiki-logtext": "הצגת היומן",
"interwiki_addtext": "הוספת בינוויקי או קידומת שפה",
"interwiki-addtext-local": "הוספת בינוויקי מקומי או קידומת שפה",
"interwiki_addintro": "הנכם מוסיפים קידומת בינוויקי חדשה.\nזכרו שלא ניתן לכלול רווחים ( ), נקודותיים (:), אמפרסנד (&) או הסימן שווה (=).",
@@ -54,7 +56,7 @@
"logentry-interwiki-iw_delete": "$1 {{GENDER:$2|הסיר|הסירה}} את הקידומת \"$4\" מטבלת interwiki",
"log-description-interwiki": "זהו יומן השינויים שנערכו ב[[Special:Interwiki|טבלת הבינוויקי]].",
"right-interwiki": "עריכת נתוני הבינוויקי",
- "action-interwiki": "לשנות את רשומת הבינוויקי הזו",
+ "action-interwiki": "לשנות את רשומת הבינוויקי הזאת",
"interwiki-global-links": "קידומות בינוויקי גלובליות",
"interwiki-global-description": "קידומות אלה עוברות בירושה מתצורה גלובלית, וניתן לערוך אותן רק באתר הוויקי המקורי.",
"interwiki-local-links": "קידומות בינוויקי מקומיות",
diff --git a/extensions/Interwiki/i18n/hr.json b/extensions/Interwiki/i18n/hr.json
index a210a852..8fd20ba7 100644
--- a/extensions/Interwiki/i18n/hr.json
+++ b/extensions/Interwiki/i18n/hr.json
@@ -4,11 +4,12 @@
"Dalibor Bosits",
"Ex13",
"Roberta F.",
- "SpeedyGonsales"
+ "SpeedyGonsales",
+ "MaGa"
]
},
"interwiki": "Vidi i uredi međuwiki podatke",
- "interwiki-title-norights": "Gledanje interwiki tablice",
+ "interwiki-title-norights": "Gledanje međuwiki tablice",
"interwiki-desc": "Dodaje [[Special:Interwiki|posebnu stranicu]] za gledanje i uređivanje interwiki tablice",
"interwiki_intro": "Ovo je pregled međuwiki tablice.",
"interwiki_prefix": "Prefiks",
@@ -28,6 +29,7 @@
"interwiki_deleting": "Brišete prefiks \"$1\".",
"interwiki_deleted": "Prefiks \"$1\" je uspješno uklonjen iz interwiki tablice.",
"interwiki_delfailed": "Prefiks \"$1\" nije mogao biti uklonjen iz interwiki tablice.",
+ "interwiki-logtext": "Vidi evidenciju",
"interwiki_addtext": "Dodaj međuwiki prefiks",
"interwiki_addintro": "Uređujete novi interwiki prefiks. Upamtite, prefiks ne može sadržavati prazno mjesto ( ), dvotočku (:), znak za i (&), ili znakove jednakosti (=).",
"interwiki_addbutton": "Dodaj",
@@ -41,5 +43,6 @@
"log-name-interwiki": "Evidencije interwiki tablice",
"log-description-interwiki": "Ovo su evidencije promjena na [[Special:Interwiki|interwiki tablici]].",
"right-interwiki": "Uređivanje interwiki podataka",
- "action-interwiki": "uredi ovaj međuwiki zapis"
+ "action-interwiki": "uredi ovaj međuwiki zapis",
+ "interwiki-links": "Međuwiki prefiksi"
}
diff --git a/extensions/Interwiki/i18n/hsb.json b/extensions/Interwiki/i18n/hsb.json
index b68ee2fd..d21c88cf 100644
--- a/extensions/Interwiki/i18n/hsb.json
+++ b/extensions/Interwiki/i18n/hsb.json
@@ -8,8 +8,6 @@
"interwiki-title-norights": "Daty interwiki wobhladać",
"interwiki-desc": "Přidawa [[Special:Interwiki|specialnu stronu]] za wobhladowanje a wobdźěłowanje interwiki-tabele",
"interwiki_intro": "Tutón je přehlad tabele interwiki.",
- "interwiki-legend-show": "Legendu pokazać",
- "interwiki-legend-hide": "Legendu schować",
"interwiki_prefix": "Prefiks",
"interwiki-prefix-label": "Prefiks:",
"interwiki_prefix_intro": "Prefiks interwiki, kotryž ma so we wikitekstowej syntaksy <code>[<nowiki />[prefix:<em>pagename</em>]]</code> wužiwać.",
@@ -17,15 +15,12 @@
"interwiki_url_intro": "Předłoha za URL. Zastupne znamjěsko $1 naruna so přez <em>mjeno strony</em> wikijoweho teksta, hdyž so horjeka naspomnjena wikitekstowa syntaksa wužiwa.",
"interwiki_local": "Doprědka",
"interwiki-local-label": "Doprědka:",
- "interwiki_local_intro": "Naprašowanje http do lokalneho wiki z tutym prefiksom interwiki w URL je:",
"interwiki_local_0_intro": "njepřipóznaty, zmylkowa strona \"{{int:badtitle}}\" so město toho zwobraznuje.",
"interwiki_local_1_intro": "k cilowemu URL pódatemu w definicijach wotkaza interwiki (t. j. wobchadźa so z tym kaž z wotkazami w lokalnych stronach).",
"interwiki_trans": "Transkludować",
"interwiki-trans-label": "Transkludować:",
- "interwiki_trans_intro": "Jeli je so wikijowa syntaksa <code>{<nowiki />{prefix:<em>pagename</em>}}</code> wužiwa, to:",
"interwiki_trans_1_intro": "Zapřijeće z cuzeho wikija dowolić, jeli zapřijeća interwiki so powšitkownje w tutym wikiju dopušćeja,",
"interwiki_trans_0_intro": "je njedowolić, pohladaj skerje za stronu w mjenowym rumje Předłoha",
- "interwiki_intro_footer": "Hlej [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] za dalše informacije wo tabeli interwikijow.\nJe [[Special:Log/interwiki|protokol změnow]] tabele interwikijow.",
"interwiki_1": "haj",
"interwiki_0": "ně",
"interwiki_error": "ZMYLK: Interwiki-tabela je prózdna abo něšto je wopak.",
diff --git a/extensions/Interwiki/i18n/hu.json b/extensions/Interwiki/i18n/hu.json
index f18b0f7d..917ecdd8 100644
--- a/extensions/Interwiki/i18n/hu.json
+++ b/extensions/Interwiki/i18n/hu.json
@@ -14,6 +14,7 @@
"interwiki-title-norights": "Wikiközi hivatkozások adatainak megtekintése",
"interwiki-desc": "[[Special:Interwiki|Speciális lap]], ahol megtekinthető és szerkeszthető a wikiközi hivatkozások táblája",
"interwiki_intro": "Ez egy áttekintés a wikiközi hivatkozások táblájáról.",
+ "interwiki-legend-label": "Jelmagyarázat",
"interwiki_prefix": "Előtag",
"interwiki-prefix-label": "Előtag:",
"interwiki_prefix_intro": "Wikiközi előtag az <code>[<nowiki />[előtag:<em>lapnév</em>]]</code> wikiszöveg szintaxisban való használatra.",
diff --git a/extensions/Interwiki/i18n/ia.json b/extensions/Interwiki/i18n/ia.json
index b3096eca..5c9909be 100644
--- a/extensions/Interwiki/i18n/ia.json
+++ b/extensions/Interwiki/i18n/ia.json
@@ -8,8 +8,6 @@
"interwiki-title-norights": "Vider datos interwiki",
"interwiki-desc": "Adde un [[Special:Interwiki|pagina special]] pro vider e modificar le tabella interwiki",
"interwiki_intro": "Isto es un summario del tabella interwiki.",
- "interwiki-legend-show": "Monstrar legenda",
- "interwiki-legend-hide": "Celar legenda",
"interwiki_prefix": "Prefixo",
"interwiki-prefix-label": "Prefixo:",
"interwiki_prefix_intro": "Prefixo interwiki pro usar in le syntaxe de wikitexto <code>[<nowiki />[prefixo:<em>nomine de pagina</em>]]</code>.",
@@ -17,15 +15,12 @@
"interwiki_url_intro": "Patrono pro adresses URL. Le marcator $1 essera reimplaciate per le <em>nomine de pagina</em> del wikitexto, quando le syntaxe de wikitexto supra mentionate es usate.",
"interwiki_local": "Facer sequer",
"interwiki-local-label": "Facer sequer:",
- "interwiki_local_intro": "Un requesta HTTP al wiki local con iste prefixo interwiki in le adresse URL es:",
"interwiki_local_0_intro": "refusate, normalmente blocate con \"pagina non trovate\",",
"interwiki_local_1_intro": "redirigite verso le adresse URL de destination specificate in le definitiones de ligamines interwiki (i.e. tractate como referentias in paginas local)",
"interwiki_trans": "Transcluder",
"interwiki-trans-label": "Transcluder:",
- "interwiki_trans_intro": "Si le syntaxe de wikitexto <code>{<nowiki />{prefixo:<em>nomine de pagina</em>}}</code> es usate, alora:",
"interwiki_trans_1_intro": "permitte le transclusion ab le wiki externe, si le transclusiones interwiki es generalmente permittite in iste wiki,",
"interwiki_trans_0_intro": "non permitte lo, ma cerca un pagina in le spatio de nomines \"Patrono\".",
- "interwiki_intro_footer": "Vide [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] pro plus informationes super le tabella interwiki.\nExiste un [[Special:Log/interwiki|registro de modificationes]] al tabella interwiki.",
"interwiki_1": "si",
"interwiki_0": "no",
"interwiki_error": "Error: Le tabella interwiki es vacue, o un altere cosa faceva falta.",
diff --git a/extensions/Interwiki/i18n/id.json b/extensions/Interwiki/i18n/id.json
index addfdb08..444eb355 100644
--- a/extensions/Interwiki/i18n/id.json
+++ b/extensions/Interwiki/i18n/id.json
@@ -6,30 +6,26 @@
"Irwangatot",
"IvanLanin",
"Kenrick95",
- "Rex"
+ "Rex",
+ "Ahdan"
]
},
"interwiki": "Lihat dan sunting data interwiki",
"interwiki-title-norights": "Lihat data interwiki",
"interwiki-desc": "Menambahkan sebuah [[Special:Interwiki|halaman istimewa]] untuk menampilkan dan menyunting tabel interwiki",
"interwiki_intro": "Ini adalah sebuah laporan mengenai tabel interwiki.",
- "interwiki-legend-show": "Tampilkan legenda",
- "interwiki-legend-hide": "Sembunyikan legenda",
"interwiki_prefix": "Prefiks",
"interwiki-prefix-label": "Prefiks:",
"interwiki_prefix_intro": "Interwiki prefix akan digunakan dalam <code>[<nowiki />[prefix:<em>pagename</em>]]</code> sintak teksWiki",
"interwiki_url_intro": "Template untuk URL. Tempat $1 akan digantikan oleh <em>judul</em> dari teksWiki, ketika sintaks teksWiki tersebut di atas digunakan.",
"interwiki_local": "Meneruskan",
"interwiki-local-label": "Meneruskan:",
- "interwiki_local_intro": "Diperlukan HTTP untuk wiki lokal dengan prefix interwiki ini dalam URL:",
"interwiki_local_0_intro": "tidak dihormati, biasanya diblokir oleh \"halaman tidak ditemukan\",",
"interwiki_local_1_intro": "pengalihan ke URL target akan meberikan definis pranala interwiki (contoh. seperti referensi di halaman lokal)",
"interwiki_trans": "Transklusi",
"interwiki-trans-label": "Mentransklusikan:",
- "interwiki_trans_intro": "Jika sintak tekswiki <code>{<nowiki />{prefix:<em>pagename</em>}}</code> digunakan, maka:",
"interwiki_trans_1_intro": "memperbolehkan transklusi dari wiki lain, jika transklusi interwiki diizinkan di wiki ini,",
"interwiki_trans_0_intro": "tidak mengizinkan hal itu, lebih baik mencari halaman pada ruang nama templat.",
- "interwiki_intro_footer": "Lihat [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] untuk informasi lebih lanjut tentang tabel interwiki.\nAda [[Special:Log/interwiki|log perubahan]] ke tabel interwiki.",
"interwiki_1": "ya",
"interwiki_0": "tidak",
"interwiki_error": "KESALAHAN: Tabel interwiki kosong, atau terjadi kesalahan lain.",
@@ -40,6 +36,7 @@
"interwiki_deleting": "Anda menghapus prefiks \"$1\".",
"interwiki_deleted": "Prefiks \"$1\" berhasil dihapus dari tabel interwiki.",
"interwiki_delfailed": "Prefiks \"$1\" tidak dapat dihapuskan dari tabel interwiki.",
+ "interwiki-logtext": "Lihat log",
"interwiki_addtext": "Menambahkan sebuah prefiks interwiki",
"interwiki_addintro": "Anda akan menambahkan sebuah prefiks interwiki.\nIngat bahwa prefiks tidak boleh mengandung tanda spasi ( ), titik dua (:), lambang dan (&), atau tanda sama dengan (=).",
"interwiki_addbutton": "Tambahkan",
diff --git a/extensions/Interwiki/i18n/ilo.json b/extensions/Interwiki/i18n/ilo.json
index efbd7a29..0ecfa72e 100644
--- a/extensions/Interwiki/i18n/ilo.json
+++ b/extensions/Interwiki/i18n/ilo.json
@@ -8,23 +8,18 @@
"interwiki-title-norights": "Kitaen ti datos ti interwiki",
"interwiki-desc": "Agnayon ti [[Special:Interwiki|espesial a panid]] tapno makita ken maurnos ti tabla ti interwiki",
"interwiki_intro": "Daytoy ket maysa a pakabuklan ti tabla ti interwiki.",
- "interwiki-legend-show": "Ipakita ti leyenda",
- "interwiki-legend-hide": "Ilemmeng ti leyenda",
"interwiki_prefix": "Pagpasaruno",
"interwiki-prefix-label": "Pagpasaruno:",
"interwiki_prefix_intro": "Pagpasaruno ti interwiki a mausarto iti <code>[<nowiki />[pagpasaruno:<em>nagan ti panid</em>]]</code> gramatika ti testo ti wiki.",
"interwiki_url_intro": "Plantilia para kadagiti URL. Ti pagikabilan ti $1 ket masukatanto babaen ti <em>nagan ti panid</em> iti testo ti wiki, no mausar ti naibaga iti ngato a gramatika ti testo ti wiki.",
"interwiki_local": "Agpakauna",
"interwiki-local-label": "Agpakauna:",
- "interwiki_local_intro": "Ti maysa nga HTTP a kiddaw iti lokal a wiki iti daytoy a pagpasaruno ti interwiki iti URL ket:",
"interwiki_local_0_intro": "saan a naawat, ti biddut ti panid ti \"{{int:badtitle}}\" ket imbesto nga isu ti maiparang.",
"interwiki_local_1_intro": "naibaw-ing iti puntaan nga URL a naited kadagiti silpo a panangipalawag ti interwiki (i.e. natrato a kasla dagiti silpo kadagiti lokal a panid).",
"interwiki_trans": "Ilak-am",
"interwiki-trans-label": "Ilak-am:",
- "interwiki_trans_intro": "No ti gramatika ti testo ti wiki ti <code>{<nowiki />{pagpasaruno:<em>nagan ti panid</em>}}</code> ket mausar, no kasta:",
"interwiki_trans_1_intro": "mangpalubos ti panagilak-am manipud ti ganganaet a wiki, no dagiti panagilak-am ti interwiki ket sapasap a maipalubos iti daytoy a wiki.",
"interwiki_trans_0_intro": "saan nga ipalubos dayta, ngem agbiruk para iti panid iti nagan ti espasio ti plantilia.",
- "interwiki_intro_footer": "Kitaen ti [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] para iti adu pay a pakaammo a maipanggep ti tabla ti interwiki.\nAdda met [[Special:Log/interwiki|listaan dagiti binaliwan]] iti tabla ti interwiki.",
"interwiki_1": "wen",
"interwiki_0": "saan",
"interwiki_error": "Biddut: Awan linaon ti tabla ti interwiki, wenno adda madi a napasamak.",
diff --git a/extensions/Interwiki/i18n/it.json b/extensions/Interwiki/i18n/it.json
index 6af55dac..0a4c9866 100644
--- a/extensions/Interwiki/i18n/it.json
+++ b/extensions/Interwiki/i18n/it.json
@@ -7,11 +7,13 @@
"Darth Kule",
"OrbiliusMagister",
"Pietrodn",
- "VittGam"
+ "VittGam",
+ "Macofe",
+ "Nemo bis"
]
},
- "interwiki": "Visualizza e modifica i dati interwiki",
- "interwiki-title-norights": "Visualizza i dati interwiki",
+ "interwiki": "Visualizza e modifica i prefissi interwiki",
+ "interwiki-title-norights": "Elenco dei prefissi interwiki",
"interwiki-desc": "Aggiunge una [[Special:Interwiki|pagina speciale]] per visualizzare e modificare la tabella degli interwiki",
"interwiki_intro": "Questa è una panoramica della tabella degli interwiki, che definisce i prefissi brevi usati per collegare velocemente diversi wiki e altri siti esterni. Per l'utilizzo consigliato vedi [//www.mediawiki.org/wiki/Extension:Interwiki il manuale su MediaWiki.org].",
"interwiki-legend-label": "Legenda",
@@ -64,5 +66,5 @@
"interwiki-local-description": "Questi prefissi esistono localmente. Eventuali duplicati con la configurazione globale sovrascriveranno la definizione globale.",
"interwiki-links": "Prefissi interwiki",
"interwiki-language-links": "Prefissi interlingua",
- "interwiki-language-description": "Questi prefissi corrispondono codici di lingua definiti e verranno utilizzati per creare l'elenco 'in altre lingue' quando aggiunti a una pagina."
+ "interwiki-language-description": "Questi prefissi corrispondono codici di lingua definiti e verranno utilizzati per creare l'elenco \"{{int:otherlanguages}}\" quando aggiunti a una pagina."
}
diff --git a/extensions/Interwiki/i18n/ja.json b/extensions/Interwiki/i18n/ja.json
index e04b8bdb..cb3c549f 100644
--- a/extensions/Interwiki/i18n/ja.json
+++ b/extensions/Interwiki/i18n/ja.json
@@ -7,15 +7,15 @@
"Mzm5zbC3",
"Schu",
"Shirayuki",
- "青子守歌"
+ "青子守歌",
+ "2nd-player"
]
},
"interwiki": "インターウィキデータの閲覧と編集",
"interwiki-title-norights": "インターウィキデータの閲覧",
"interwiki-desc": "インターウィキテーブルの表示と編集を行う[[Special:Interwiki|特別ページ]]を追加する",
"interwiki_intro": "以下はインターウィキの一覧表です。",
- "interwiki-legend-show": "凡例を表示",
- "interwiki-legend-hide": "凡例を隠す",
+ "interwiki-legend-label": "凡例",
"interwiki_prefix": "接頭辞",
"interwiki-prefix-label": "接頭辞:",
"interwiki_prefix_intro": "<code>[<nowiki />[接頭辞:<em>ページ名</em>]]</code> というウィキテキストの構文で使用される、インターウィキ接頭辞です。",
@@ -28,7 +28,6 @@
"interwiki-trans-label": "トランスクルージョン:",
"interwiki_trans_1_intro": "ウィキ間トランスクルージョンがこのウィキで (一般的に) 許可されている場合は、この外部ウィキからのトランスクルージョンを許可します。",
"interwiki_trans_0_intro": "許可せず、テンプレート名前空間でページを探します。",
- "interwiki_intro_footer": "インターウィキテーブルについて、より詳しくは [//www.mediawiki.org/wiki/Manual:Interwiki_table/ja MediaWiki.org] を参照してください。また、インターウィキテーブルの[[Special:Log/interwiki|変更記録]]があります。",
"interwiki_1": "はい",
"interwiki_0": "いいえ",
"interwiki_error": "エラー: インターウィキテーブルが空か、他の理由でうまくいきませんでした。",
@@ -39,8 +38,10 @@
"interwiki_deleting": "接頭辞「$1」を削除しようとしています。",
"interwiki_deleted": "インターウィキテーブルから接頭辞「$1」を除去しました。",
"interwiki_delfailed": "インターウィキテーブルから接頭辞「$1」を除去しました。",
- "interwiki_addtext": "インターウィキ接頭辞を追加",
- "interwiki_addintro": "インターウィキの新しい接頭辞を追加しようとしています。\n空白( )、コロン(:)、アンパーサンド(&)、等号(=)を含めてはいけないことにご注意ください。",
+ "interwiki-logtext": "記録を閲覧",
+ "interwiki_addtext": "インターウィキ接頭辞または言語接頭辞を追加",
+ "interwiki-addtext-local": "ローカルのインターウィキ接頭辞または言語接頭辞を追加",
+ "interwiki_addintro": "インターウィキの新しい接頭辞を追加しようとしています。\n接頭辞には空白( )、コロン(:)、アンパーサンド(&)、等号(=)を含めてはいけないことにご注意ください。",
"interwiki_addbutton": "追加",
"interwiki_added": "インターウィキテーブルに接頭辞「$1」を追加しました。",
"interwiki_addfailed": "インターウィキテーブルに接頭辞「$1」を追加できませんでした。\nインターウィキテーブル内に既に存在する可能性があります。",
@@ -56,6 +57,13 @@
"logentry-interwiki-iw_edit": "$1 がインターウィキテーブル内の接頭辞「$4」($5) (トランスクルージョン: $6、ローカル: $7) を{{GENDER:$2|変更しました}}",
"logentry-interwiki-iw_delete": "$1 がインターウィキテーブルから接頭辞「$4」を{{GENDER:$2|除去しました}}",
"log-description-interwiki": "これは[[Special:Interwiki|インターウィキテーブル]]の変更記録です。",
- "right-interwiki": "インターウィキデータの編集",
- "action-interwiki": "このインターウィキ項目の変更"
+ "right-interwiki": "インターウィキデータを編集",
+ "action-interwiki": "このインターウィキ項目の変更",
+ "interwiki-global-links": "グローバルのインターウィキ接頭辞",
+ "interwiki-global-description": "これらの接頭辞は、グローバル設定から継承されるため、継承元のウィキのみで編集できます。",
+ "interwiki-local-links": "ローカルのインターウィキ接頭辞",
+ "interwiki-local-description": "これらの接頭辞はローカルに存在します。グローバル設定と重複した場合は、すべてグローバルの定義が優先されます。",
+ "interwiki-links": "インターウィキ接頭辞",
+ "interwiki-language-links": "言語間リンク接頭辞",
+ "interwiki-language-description": "これらの接頭辞は、定義済みの言語コードと一致しており、ページに追加する「{{int:otherlanguages}}」の一覧を作成する際に使用されます。"
}
diff --git a/extensions/Interwiki/i18n/ka.json b/extensions/Interwiki/i18n/ka.json
index b6a77528..6f9777b3 100644
--- a/extensions/Interwiki/i18n/ka.json
+++ b/extensions/Interwiki/i18n/ka.json
@@ -7,8 +7,6 @@
},
"interwiki": "ინტერვიკის მონაცემების ხილვა და რედაქტირება",
"interwiki-title-norights": "ინტერვიკის მონაცემების ხილვა",
- "interwiki-legend-show": "ლეგენდის ჩვენება",
- "interwiki-legend-hide": "ლეგენდის დამალვა",
"interwiki_prefix": "წინსართი",
"interwiki-prefix-label": "წინსართი:",
"interwiki_url": "URL",
@@ -17,7 +15,6 @@
"interwiki-local-label": "გადაგზავნა:",
"interwiki_trans": "ჩართვა",
"interwiki-trans-label": "ჩართვა:",
- "interwiki_trans_intro": "თუკი გამოიყენება ვიკი-ტექსტის სინტაქსი შემდეგი სახით <code>{<nowiki />{prefix:<em>გვერდის სახელი</em>}}</code>:",
"interwiki_1": "დიახ",
"interwiki_0": "არა",
"interwiki_edit": "რედაქტირება",
diff --git a/extensions/Interwiki/i18n/kk-cyrl.json b/extensions/Interwiki/i18n/kk-cyrl.json
index 98238477..384f8533 100644
--- a/extensions/Interwiki/i18n/kk-cyrl.json
+++ b/extensions/Interwiki/i18n/kk-cyrl.json
@@ -7,8 +7,6 @@
"interwiki": "интеруики деректерін қарау және өңдеу",
"interwiki-title-norights": "Интеруики дерегін қарау",
"interwiki_intro": "Бұл интеруики кестесін шолып шығу",
- "interwiki-legend-show": "Мәндік белгілерді көрсету",
- "interwiki-legend-hide": "Мәндік белгілерді жасыру",
"interwiki_prefix": "Префикс",
"interwiki-prefix-label": "Префикс",
"interwiki_local": "Алға",
diff --git a/extensions/Interwiki/i18n/km.json b/extensions/Interwiki/i18n/km.json
index 53b07efb..6ec428f5 100644
--- a/extensions/Interwiki/i18n/km.json
+++ b/extensions/Interwiki/i18n/km.json
@@ -12,8 +12,6 @@
"interwiki-title-norights": "មើលទិន្នន័យអន្តរវិគី",
"interwiki-desc": "បន្ថែម[[Special:Interwiki|ទំព័រពិសេស]]ដើម្បីមើលនិងកែប្រែតារាងអន្តរវិគី",
"interwiki_intro": "នេះ​គឺជា​ទិដ្ឋភាពទូទៅ​នៃ​តារាង​អន្តរវិគី​។",
- "interwiki-legend-show": "បង្ហាញកំណត់សំគាល់",
- "interwiki-legend-hide": "លាក់កំណត់សំគាល់",
"interwiki_prefix": "បុព្វបទ",
"interwiki-prefix-label": "បុព្វបទ៖",
"interwiki_1": "បាទ/ចាស៎",
diff --git a/extensions/Interwiki/i18n/ko.json b/extensions/Interwiki/i18n/ko.json
index d93c2d5b..0183f942 100644
--- a/extensions/Interwiki/i18n/ko.json
+++ b/extensions/Interwiki/i18n/ko.json
@@ -6,30 +6,26 @@
"Mintz0223",
"ToePeu",
"아라",
- "Hym411"
+ "Hym411",
+ "Revi"
]
},
"interwiki": "인터위키 목록 보기 및 고치기",
"interwiki-title-norights": "인터위키 목록 보기",
"interwiki-desc": "인터위키 테이블을 보거나 고칠 수 있는 [[Special:Interwiki|특수 문서]]를 추가합니다",
"interwiki_intro": "이 문서는 인터위키 테이블에 대한 둘러보기입니다.",
- "interwiki-legend-show": "범례 보기",
- "interwiki-legend-hide": "범례 숨기기",
"interwiki_prefix": "접두어",
"interwiki-prefix-label": "접두어:",
"interwiki_prefix_intro": "<code>[<nowiki />[접두어:문서 이름]]</code> 위키 링크에 쓰일 인터위키 접두어",
"interwiki_url_intro": "URL 서식. $1 자리에는 위에 위키문법이 쓰인 것에서의 <em>문서 이름</em>으로 바뀔 것입니다.",
"interwiki_local": "전달",
"interwiki-local-label": "전달:",
- "interwiki_local_intro": "URL에 인터위키 접두어가 포함되어 있을 때 로컬 위키로의 HTTP 요청:",
"interwiki_local_0_intro": "무시함, 보통 \"{{int:badtitle}}\"을 대신 출력합니다.",
"interwiki_local_1_intro": "인터위키 링크 정의에 입력된 URL로 이동합니다. (즉, 로컬 문서의 링크로 취급됩니다)",
"interwiki_trans": "인터위키 포함",
"interwiki-trans-label": "인터위키 포함:",
- "interwiki_trans_intro": "<code>{<nowiki />{접두어:<em>pagename</em>}}</code>이 쓰일 경우:",
"interwiki_trans_1_intro": "이 위키에서 일반적으로 인터위키 틀 포함이 허용된다면, 타 위키에서의 틀 포함을 허용합니다,",
"interwiki_trans_0_intro": "허용하지 않고 틀 이름공간의 문서를 찾아봅니다.",
- "interwiki_intro_footer": "인터위키 테이블에 대한 자세한 내용을 [//www.mediawiki.org/wiki/Manual:Interwiki_table/ko MediaWiki.org]에서 보세요.\n인터위키 테이블의 [[Special:Log/interwiki|바뀜 기록]]이 존재합니다.",
"interwiki_1": "예",
"interwiki_0": "아니오",
"interwiki_error": "오류: 인터위키 테이블이 비어 있거나 다른 무엇인가가 잘못되었습니다.",
diff --git a/extensions/Interwiki/i18n/ksh.json b/extensions/Interwiki/i18n/ksh.json
index aae0b058..51ef2646 100644
--- a/extensions/Interwiki/i18n/ksh.json
+++ b/extensions/Interwiki/i18n/ksh.json
@@ -8,8 +8,6 @@
"interwiki-title-norights": "Engerwiki Date beloore",
"interwiki-desc": "Brengk de Sondersigg [[Special:Interwiki]], öm Engerwiki Date ze beloore un ze ändere.",
"interwiki_intro": "Heh is ene Övverbleck övver de Engerwiki-Tabäll.",
- "interwiki-legend-show": "Lejänd aanzeije",
- "interwiki-legend-hide": "Lejänd verschteeische",
"interwiki_prefix": "Försaz",
"interwiki-prefix-label": "Försaz:",
"interwiki_prefix_intro": "Dä Fösatz för Engewiki Lengks wie hä em Wikitex en Sigge jebruch weed, wam_mer <code>[<nowiki />[<em>{{lc:{{int:Interwiki_prefix}}}}</em>:<em>Siggename</em>]]</code> schrieve deijt.",
@@ -18,15 +16,12 @@
"interwiki_url_intro": "E Muster för en URL. Dä Plazhallder „$1“ do dren weet ußjetuusch, wann dat Denge jebruch weet — wann di Syntax vun bovve em Wikitext op en Sigg aanjezeish weed, dann kütt dä <code><i\">Siggenam</em></code> aan dä Plaz vun däm $1.",
"interwiki_local": "Wiggerjevve?",
"interwiki-local-label": "Wiggerjevve?:",
- "interwiki_local_intro": "Wann övver et Internet ene Sigge-Oproof aan dat Wiki hee jescheck weed, un dä Försatz es em Sigge-Tittel dren, dann:",
"interwiki_local_0_intro": "donn dä nit als ene Vöratz behandelle, un sök noh su en Sigg hee em Wiki — dat jeiht fö jewööhnlesch uß met: „esu en Sigg hann mir nit“,",
"interwiki_local_1_intro": "dä Oproof weed wiggerjejovve aan dä Wiki, esu wi et hee unger URL enjedraaren es, well heiße, dä weed jenou esu behandelt, wi ene Oproof ennerhallf vun en Sigg hee em Wiki.",
"interwiki_trans": "Ennfööje?",
"interwiki-trans-label": "Ennfööje?:",
- "interwiki_trans_intro": "Wann em Wikitex en ener Sigg de Syntax <code>{<nowiki />{<em>{{lc:{{int:Interwiki_prefix}}}}</em>:<em>Siggename</em>}}</code> jebruch weed, dann:",
"interwiki_trans_1_intro": "lohß et zoh — wann dat en hee dämm Wiki övverhoup zohjelohße es — dat en Sigg uß däm andere Wiki hee enjeföösh weed,",
"interwiki_trans_0_intro": "dunn dat nit, un sök hee em Wiki noh ene {{ns:template}} met dämm komplätte Name.",
- "interwiki_intro_footer": "Op dä Sigg [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] fingk mer mieh do dröver, wat et met dä Tabäll met de Engerwiki Date op sich hät.\nEt [[Special:Log/interwiki|{{int:interwiki_logpagename}}]] zeichnet all de Änderunge aan de Engerwiki Date op.",
"interwiki_1": "Jo",
"interwiki_0": "Nä",
"interwiki_error": "'''Fähler:''' de Tabäll met de Engerwiki Date is leddisch.",
diff --git a/extensions/Interwiki/i18n/lb.json b/extensions/Interwiki/i18n/lb.json
index e2b4b359..2cfbde6c 100644
--- a/extensions/Interwiki/i18n/lb.json
+++ b/extensions/Interwiki/i18n/lb.json
@@ -10,7 +10,8 @@
"interwiki": "Interwiki-Date kucken a veränneren",
"interwiki-title-norights": "Interwiki-Date kucken",
"interwiki-desc": "Setzt eng [[Special:Interwiki|Spezialsäit]] derbäi fir d'Interwiki-Tabell ze gesinn an z'änneren",
- "interwiki_intro": "Dëst ass en Iwwerbléck iwwer d'Interwikitabell.",
+ "interwiki_intro": "Dëst ass en Iwwerbléck iwwer d'Interwikitabell, déi, déi benotzt Prefix-Ofkierzungen weist, fir séier, déi verschidde Wikien, an aner extern Siten, ze verlinken. Fir déi recommandéiert NOtzung hei vun, kuckt w.e.g. [//www.mediawiki.org/wiki/Extension:Interwiki the manual on MediaWiki.org].",
+ "interwiki-legend-label": "Erklärung",
"interwiki_prefix": "Prefix",
"interwiki-prefix-label": "Prefix:",
"interwiki_prefix_intro": "Interwiki-Prefix fir an der Form <code>[<nowiki />[prefix:<em>Säitennumm</em>]]</code> am Wikitext gebraucht ze ginn.",
@@ -19,10 +20,10 @@
"interwiki_local": "Viruleeden",
"interwiki-local-label": "Viruleeden:",
"interwiki_local_0_intro": "Extern HTTP verlaangt datt déi lokal Wiki wann dësen interwiki-Prefix an der URL benotzt gëtt, d'Feelersäit \"{{int:badtitle}}\" gewise gëtt.",
- "interwiki_local_1_intro": "automatesch op d'Zil-URL virugeleet déi an den Interwikilink-Definitiounen uginn ass (d. h. gëtt wéi e Link op eng lokal Säit behandelt)",
+ "interwiki_local_1_intro": "Extern HTTP Ufroen op déi lokal Wiki déi dësen Interwiki-Prefix benotze ginn automatesch op d'Zil-URL vum Interwiki (z. Bsp. behandelt wéi Linken op eng lokal Säiten)",
"interwiki_trans": "Interwiki-Abannungen",
"interwiki-trans-label": "Abannen:",
- "interwiki_trans_1_intro": "erlaabt Abannunge vun anere Wikien, wann d'Interwiki-Abannungen an dëser Wiki allgemeng zoulässeg sinn,",
+ "interwiki_trans_1_intro": "Wa Wikitext-Syntax <code>{<nowiki />{Prefix:<em>Säitennumm</em>}}</code> benotzt gëtt, Schablounen-/Säitenabannunge vu frieme Wikien erlaben, wann Interwiki-Abannungen allgemeng aktivéiert sinn ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding Scary-Abannung]).",
"interwiki_trans_0_intro": "<code>{<nowiki />{prefix:<em>Säitennumm</em>}}</code> net erlabe friem Schablounen/Säiten anzebannen, éischter no enger lokaler Säit aus dem Nummraum:Schabloun sichen.",
"interwiki_1": "jo",
"interwiki_0": "neen",
@@ -34,6 +35,7 @@
"interwiki_deleting": "Dir läscht de Prefix \"$1\".",
"interwiki_deleted": "De Prefix \"$1\" gouf aus der Interwiki-Tabell erausgeholl.",
"interwiki_delfailed": "Prefix \"$1\" konnt net aus der Interwiki-Tabell erausgeholl ginn.",
+ "interwiki-logtext": "Logbuch weisen",
"interwiki_addtext": "En Interwiki oder e Sproochprefix dobäisetzen",
"interwiki_addintro": "Dir setzt en neien Interwiki-Prefix derbäi.\nDenkt drun datt keng Espacen ( ), Et-commerciale (&), Gläichzeechen (=) a keng Doppelpunkten (:) däerfen dra sinn.",
"interwiki_addbutton": "Derbäisetzen",
diff --git a/extensions/Interwiki/i18n/lt.json b/extensions/Interwiki/i18n/lt.json
index 0fc7d353..4fc6bd3e 100644
--- a/extensions/Interwiki/i18n/lt.json
+++ b/extensions/Interwiki/i18n/lt.json
@@ -2,14 +2,13 @@
"@metadata": {
"authors": [
"Eitvys200",
- "Homo"
+ "Homo",
+ "Hugo.arg"
]
},
"interwiki": "Žiūrėti ir redaguoti interwiki duomenis",
"interwiki-title-norights": "Žiūrėti interwiki duomenis",
"interwiki-desc": "Prideda [[Special:Interwiki|specialųjį puslapį]] interwiki lentelei peržiūrėti ir redaguoti",
- "interwiki-legend-show": "Rodyti legendą",
- "interwiki-legend-hide": "Slėpti legendą",
"interwiki_local": "Persiųsti",
"interwiki-local-label": "Persiųsti:",
"interwiki_1": "taip",
@@ -19,5 +18,5 @@
"interwiki_delquestion": "Trinama \"$1\"",
"interwiki_addbutton": "Pridėti",
"log-description-interwiki": "Tai pakeitimų [[Special:Interwiki|interwiki lentelėje]] sąrašas",
- "right-interwiki": "Redaguoti interwiki duomenis"
+ "right-interwiki": "Keisti interwiki duomenis"
}
diff --git a/extensions/Interwiki/i18n/mg.json b/extensions/Interwiki/i18n/mg.json
index b3e0fc83..d1b49fba 100644
--- a/extensions/Interwiki/i18n/mg.json
+++ b/extensions/Interwiki/i18n/mg.json
@@ -8,8 +8,6 @@
"interwiki-title-norights": "Hijery ny data interwiki",
"interwiki-desc": "Manampy [[Special:Interwiki|pejy manokana iray]] ho an'ny fijerena sy ho an'ny fanovana ny tabilao interwiki",
"interwiki_intro": "Ity dia topi-mason'ny tabilao interwiki.",
- "interwiki-legend-show": "Haneho ny maribolana",
- "interwiki-legend-hide": "Hanitrika ny maribolana",
"interwiki_prefix": "Tovona",
"interwiki-prefix-label": "Tovona",
"interwiki_prefix_intro": "Tovona ampiasaina anatin'i <code>[<nowiki />[tovona:<em>anaram-pejy</em>]]</code> ny rariteny wiki.",
diff --git a/extensions/Interwiki/i18n/min.json b/extensions/Interwiki/i18n/min.json
index 979bf729..7a4fb321 100644
--- a/extensions/Interwiki/i18n/min.json
+++ b/extensions/Interwiki/i18n/min.json
@@ -8,8 +8,6 @@
"interwiki-title-norights": "Caliak data interwiki",
"interwiki-desc": "Menambahan [[Special:Interwiki|laman istimewa]] untuak manampilan jo manyuntiang tabel interwiki",
"interwiki_intro": "Iko gambaran tabel interwiki.",
- "interwiki-legend-show": "Tunjuakan legenda",
- "interwiki-legend-hide": "Suruakan legenda",
"interwiki_prefix": "Kode",
"interwiki-prefix-label": "Kode:",
"interwiki_prefix_intro": "Kode interwiki akan digunoan dalam <code>[<nowiki />[kode:<em>namo laman</em>]]</code> sintak teks wiki.",
diff --git a/extensions/Interwiki/i18n/mk.json b/extensions/Interwiki/i18n/mk.json
index 8e13c7c7..b46662d1 100644
--- a/extensions/Interwiki/i18n/mk.json
+++ b/extensions/Interwiki/i18n/mk.json
@@ -17,8 +17,8 @@
"interwiki_url_intro": "Шаблон за URL-адреси. Наместо $1 ќе биде поставено <em>име на страницата</em> во <code>[<nowiki />[претставка:<em>име на страницата</em>]]</code>.",
"interwiki_local": "Препратка",
"interwiki-local-label": "Препратка:",
- "interwiki_local_0_intro": "Надворешни HTTP-барања од локалното вики користејќи го меѓујазичната претставка во URL-адресата ќе ви ја дадат грешката „{{int:badtitle}}“.",
- "interwiki_local_1_intro": "Надворешни HTTP-барања од локалното вики користејќи го меѓујазичната претставка ќе бидат пренасочени кон целната URL-адреса на меѓувикито (т.е. ќе се сметаат за врски до локални страници)",
+ "interwiki_local_0_intro": "Надворешни HTTP-барања од месното вики користејќи го меѓујазичната претставка во URL-адресата ќе ви ја дадат грешката „{{int:badtitle}}“.",
+ "interwiki_local_1_intro": "Надворешни HTTP-барања од месното вики користејќи го меѓујазичната претставка ќе бидат пренасочени кон целната URL-адреса на меѓувикито (т.е. ќе се сметаат за врски до месни страници)",
"interwiki_trans": "Превметнување",
"interwiki-trans-label": "Превметнување:",
"interwiki_trans_1_intro": "Ако се користи виктекст-синтаксата <code>{<nowiki />{претставка:<em>назив на страница</em>}}</code>, допуштај превметнувања од страното вики ако се начелно овозможени превметнувања од меѓувики ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding превемтнување Scary]).",
@@ -60,5 +60,5 @@
"interwiki-local-description": "Овие поставки постојат месно. Дупликатите на длобаните поставки ќе се наметнат врз глобалните определби.",
"interwiki-links": "Меѓувики-претставки",
"interwiki-language-links": "Меѓујазични претставки",
- "interwiki-language-description": "Овие претставки се совпаѓаат со зададени јазични кодови и ќе се користат за срочување на списокот „на други јазици“ кога ќе се стават во страница."
+ "interwiki-language-description": "Овие претставки се совпаѓаат со зададени јазични кодови и ќе се користат за срочување на списокот „{{int:otherlanguages}}“ кога ќе се стават во страница."
}
diff --git a/extensions/Interwiki/i18n/ml.json b/extensions/Interwiki/i18n/ml.json
index 0120c4ad..6e59cbd8 100644
--- a/extensions/Interwiki/i18n/ml.json
+++ b/extensions/Interwiki/i18n/ml.json
@@ -9,23 +9,18 @@
"interwiki-title-norights": "അന്തർവിക്കി വിവരങ്ങൾ കാണുക",
"interwiki-desc": "അന്തർവിക്കി പട്ടിക കാണാനും തിരുത്താനുമുള്ള [[Special:Interwiki|പ്രത്യേക താൾ]] കൂട്ടിച്ചേർക്കുന്നു",
"interwiki_intro": "അന്തർവിക്കി പട്ടികയുടെ അവലോകനം ഇവിടെ കാണാം.",
- "interwiki-legend-show": "സൂചനകൾ പ്രദർശിപ്പിക്കുക",
- "interwiki-legend-hide": "സൂചനകൾ മറയ്ക്കുക",
"interwiki_prefix": "പൂർവ്വാക്ഷരങ്ങൾ",
"interwiki-prefix-label": "പൂർവ്വാക്ഷരങ്ങൾ:",
"interwiki_prefix_intro": "വിക്കിഎഴുത്ത് രീതിയിൽ ഉപയോഗിക്കുന്ന <code>[<nowiki />[പൂർവ്വാക്ഷരങ്ങൾ:<em>താളിന്റെ_പേര്</em>]]</code> എന്നതിലെ അന്തർവിക്കി പൂർവ്വാക്ഷരങ്ങൾ.",
"interwiki_url_intro": "യൂ.ആർ.എലുകൾക്കുള്ള ഫലകം. മുകളിൽ കൊടുത്തിരിക്കുന്നതു പോലുള്ള വിക്കി എഴുത്ത് രീതി ഉപയോഗിക്കുമ്പോൾ, $1 എന്ന ചരം വിക്കി എഴുത്തിലെ <em>താളിന്റെ_പേര്</em> ഉപയോഗിച്ച് മാറ്റപ്പെടുന്നതായിരിക്കും.",
"interwiki_local": "ഗമനം",
"interwiki-local-label": "ഗമനം:",
- "interwiki_local_intro": "ഉപയോഗിച്ചുകൊണ്ടിരിക്കുന്ന വിക്കിയിൽ ഈ അന്തർവിക്കി പൂർവ്വാക്ഷരങ്ങൾ ഉപയോഗിച്ചാൽ ലഭിക്കേണ്ട യൂ.ആർ.എൽ. ഉപയോഗിച്ച് ഒരു എച്ച്.റ്റി.റ്റി.പി. അഭ്യർത്ഥന:",
"interwiki_local_0_intro": "ചെയ്യാനാവില്ല, പകരം \"{{int:badtitle}}\" എന്ന പിഴവ് താൾ പ്രദർശിപ്പിക്കുന്നതാണ്.",
"interwiki_local_1_intro": "അന്തർവിക്കി കണ്ണി നിർവ്വചനങ്ങൾക്കനുസരിച്ച് ലക്ഷ്യ യൂ.ആർ.എലിലേയ്ക്ക് തിരിച്ചുവിടും (അതായത് വിക്കിയിലെ താളുകളിലെ കണ്ണികൾ കൈകാര്യം ചെയ്യുന്നതു പോലെ).",
"interwiki_trans": "ഉൾപ്പെടുത്തൽ",
"interwiki-trans-label": "ഉൾപ്പെടുത്തൽ:",
- "interwiki_trans_intro": "വിക്കി എഴുത്ത് രീതി <code>{<nowiki />{പൂർവ്വാക്ഷരങ്ങൾ:<em>താളിന്റെ_പേര്</em>}}</code> ഉപയോഗിച്ചിട്ടുണ്ടെങ്കിൽ:",
"interwiki_trans_1_intro": "അന്തർവിക്കി ഉൾപ്പെടുത്തലുകൾ ഈ വിക്കിയിൽ പൊതുവേ അനുവദിച്ചിട്ടുണ്ടെങ്കിൽ, ബാഹ്യ വിക്കിയിൽ നിന്നുള്ള ഉൾപ്പെടുത്തൽ അനുവദിക്കുക.",
"interwiki_trans_0_intro": "അനുവദിക്കരുത്, പകരം ഫലകം നാമമേഖലയിൽ താളിനായി നോക്കുക.",
- "interwiki_intro_footer": "അന്തർവിക്കി പട്ടികയെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് [//www.mediawiki.org/wiki/Manual:Interwiki_table മീഡിയവിക്കി.ഓർഗ്] കാണുക. അന്തർവിക്കി പട്ടികയുടെ [[Special:Log/interwiki|മാറ്റങ്ങളുടെ രേഖയും]] കാണുക.",
"interwiki_1": "ഉണ്ട്",
"interwiki_0": "ഇല്ല",
"interwiki_error": "പിഴവ്: അന്തർവിക്കി കണ്ണി ശൂന്യമാണ്, അല്ലെങ്കിൽ മറ്റെന്തോ പ്രശ്നമുണ്ട്.",
diff --git a/extensions/Interwiki/i18n/ms.json b/extensions/Interwiki/i18n/ms.json
index d4f2a355..c3e4591f 100644
--- a/extensions/Interwiki/i18n/ms.json
+++ b/extensions/Interwiki/i18n/ms.json
@@ -11,23 +11,19 @@
"interwiki-title-norights": "Lihat data interwiki",
"interwiki-desc": "Menambahkan [[Special:Interwiki|laman khas]] untuk melihat dan menyunting jadual interwiki",
"interwiki_intro": "Ini merupakan gambaran keseluruhan jadual interwiki.",
- "interwiki-legend-show": "Tunjukkan petunjuk",
- "interwiki-legend-hide": "Sorokkan petunjuk",
+ "interwiki-legend-label": "Petunjuk",
"interwiki_prefix": "Awalan",
"interwiki-prefix-label": "Awalan:",
"interwiki_prefix_intro": "Awalan interwiki yang hendak digunakan dalam sintaks teks wiki <code>[<nowiki />[awalan:<em>nama laman</em>]]</code>.",
"interwiki_url_intro": "Templat untuk URL. Pemegang tempat $1 akan diganti dengan <em>nama laman</em> wikiteks, apabila sintaks teks wiki yang dinyatakan di atas digunakan.",
"interwiki_local": "Kirim semula",
"interwiki-local-label": "Kirim semula:",
- "interwiki_local_intro": "Permohonan HTTP kepada wiki tempatan dengan awalan interwiki ini dalam URL ialah:",
"interwiki_local_0_intro": "tidak dilunaskan, biasanya disekat oleh \"laman tidak dijumpai\",",
"interwiki_local_1_intro": "dilencongkan ke URL sasaran yang diberikan dalam takrifan pautan interwiki (iaitu dilayan seperti rujukan dalam laman tempatan)",
"interwiki_trans": "Transklusi",
"interwiki-trans-label": "Transklusi:",
- "interwiki_trans_intro": "Jika sintaks teks wiki <code>{<nowiki />{awalan:<em>nama laman</em>}}</code> digunakan, maka:",
"interwiki_trans_1_intro": "benarkan transklusi dari wiki luar, jika transklusi interwiki pada umumnya dibenarkan dalam wiki ini,",
"interwiki_trans_0_intro": "jangan benarkan, sebaliknya cari suatu laman dalam ruang nama templat.",
- "interwiki_intro_footer": "Lihat [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] untuk maklumat lanjut mengenai jadual interwiki.\nTerdapat [[Special:Log/interwiki|log perubahan]] pada jadual interwiki.",
"interwiki_1": "ya",
"interwiki_0": "tidak",
"interwiki_error": "Ralat: Jadual interwiki kosong atau sesuatu yang tidak kena berlaku.",
@@ -38,7 +34,9 @@
"interwiki_deleting": "Anda sedang menghapuskan awalan \"$1\".",
"interwiki_deleted": "Awalan \"$1\" telah dibuang daripada jadual interwiki.",
"interwiki_delfailed": "Awalan \"$1\" tidak dapat dibuang daripada jadual interwiki.",
- "interwiki_addtext": "Tambah awalan interwiki",
+ "interwiki-logtext": "Baca log",
+ "interwiki_addtext": "Tambah awalan bahasa atau interwiki",
+ "interwiki-addtext-local": "Tambah awalan bahasa atau interwiki tempatan",
"interwiki_addintro": "Anda sedang menambah awalan interwiki baru. Sila ingat bahawa awalan interwiki tidak boleh mangandungi jarak ( ), noktah bertindih (:), ampersan (&), atau tanda sama (=).",
"interwiki_addbutton": "Tambahkan",
"interwiki_added": "Awalan \"$1\" telah ditambah ke dalam jadual interwiki.",
@@ -56,5 +54,9 @@
"logentry-interwiki-iw_delete": "$1 {{GENDER:$2|membuang}} awalan \"$4\" daripada jadual interwiki",
"log-description-interwiki": "Ini ialah log perubahan kepada [[Special:Interwiki|jadual interwiki]].",
"right-interwiki": "Menyunting data interwiki",
- "action-interwiki": "tukar data interwiki berikut"
+ "action-interwiki": "tukar data interwiki berikut",
+ "interwiki-global-links": "Awalan interwiki sejagat",
+ "interwiki-local-links": "Awalan interwiki tempatan",
+ "interwiki-links": "Awalan interwiki",
+ "interwiki-language-links": "Awalan antara bahasa"
}
diff --git a/extensions/Interwiki/i18n/mt.json b/extensions/Interwiki/i18n/mt.json
index 5304aff1..50c84a3a 100644
--- a/extensions/Interwiki/i18n/mt.json
+++ b/extensions/Interwiki/i18n/mt.json
@@ -6,8 +6,6 @@
"Leli Forte"
]
},
- "interwiki-legend-show": "Uri l-leġġenda",
- "interwiki-legend-hide": "Aħbi l-leġġenda",
"interwiki_prefix": "Prefiss",
"interwiki-prefix-label": "Prefiss:",
"interwiki_local_0_intro": "It-talbiet tal-HTTP esterni lill-wiki lokali permezz ta' dan il-prefiss tal-interwiki fil-URL jirriżultaw f'paġna ta' żball \"{{int:badtitle}}\".",
diff --git a/extensions/Interwiki/i18n/nb.json b/extensions/Interwiki/i18n/nb.json
index 785459d9..b3608f1a 100644
--- a/extensions/Interwiki/i18n/nb.json
+++ b/extensions/Interwiki/i18n/nb.json
@@ -10,23 +10,18 @@
"interwiki-title-norights": "Vis interwikidata",
"interwiki-desc": "Legger til en [[Special:Interwiki|spesialside]] som gjør at man kan se og redigere interwiki-tabellen.",
"interwiki_intro": "Dette er en oversikt over interwikitabellen.",
- "interwiki-legend-show": "Vis betydninger",
- "interwiki-legend-hide": "Skjul betydninger",
"interwiki_prefix": "Prefiks",
"interwiki-prefix-label": "Prefiks:",
"interwiki_prefix_intro": "Interwikiprefiks som skal brukes i <code>[<nowiki />[prefiks:<em>sidenavn</em>]]</code>-wikisyntaks.",
"interwiki_url_intro": "Mal for internettadresser. Variabelen $1 vil bli erstattet av <em>sidenavnet</em> i wikiteksten når wikisyntaksen ovenfor blir brukt.",
"interwiki_local": "Videresend",
"interwiki-local-label": "Videresend:",
- "interwiki_local_intro": "En HTTP-forespørsel til den lokale wikien med dette interwikiprefikset i internettadressen er:",
"interwiki_local_0_intro": "ikke fulgt, vanligvis blokkert av «siden ble ikke funnet»,",
"interwiki_local_1_intro": "omdirigert til målnettadressen gitt i interwikilenkedefinisjonene (med andre ord behandlet som referanser på lokale sider)",
"interwiki_trans": "Transkluder",
"interwiki-trans-label": "Transkluder:",
- "interwiki_trans_intro": "Dersom wikisyntaksen <code>{<nowiki />{prefiks:<em>sidenavn</em>}}</code> blir brukt, så:",
"interwiki_trans_1_intro": "tillat transklusjon fra en fremmed wiki, om interwikitranskluderinger generellt er tillatt på denne wikien,",
"interwiki_trans_0_intro": "ikke tillat det, se heller etter en side i malnavnerommet.",
- "interwiki_intro_footer": "Se [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] for mer informasjon om interwikitabellen.\nDet finnes en [[Special:Log/interwiki|endringslogg]] for interwikitabellen.",
"interwiki_1": "ja",
"interwiki_0": "nei",
"interwiki_error": "FEIL: Interwikitabellen er tom, eller noe gikk gærent.",
diff --git a/extensions/Interwiki/i18n/nds-nl.json b/extensions/Interwiki/i18n/nds-nl.json
index 059e734f..b781c4e7 100644
--- a/extensions/Interwiki/i18n/nds-nl.json
+++ b/extensions/Interwiki/i18n/nds-nl.json
@@ -6,8 +6,6 @@
},
"interwiki": "Interwikigegevens bekieken en wiezigen",
"interwiki-title-norights": "Interwikigegevens bekieken",
- "interwiki-legend-show": "Legenda laoten zien",
- "interwiki-legend-hide": "Legenda verbargen",
"interwiki_prefix": "Veurvoegsel",
"interwiki-prefix-label": "Veurvoegsel:",
"interwiki_local": "Veuruut",
diff --git a/extensions/Interwiki/i18n/nl.json b/extensions/Interwiki/i18n/nl.json
index 4d8455a4..1fb3a4ff 100644
--- a/extensions/Interwiki/i18n/nl.json
+++ b/extensions/Interwiki/i18n/nl.json
@@ -4,30 +4,27 @@
"SPQRobin",
"Siebrand",
"Tvdm",
- "Mar(c)"
+ "Mar(c)",
+ "Sjoerddebruin"
]
},
"interwiki": "Interwikigegevens bekijken en wijzigen",
"interwiki-title-norights": "Interwikigegevens bekijken",
"interwiki-desc": "Voegt een [[Special:Interwiki|speciale pagina]] toe om de interwikitabel te bekijken en bewerken",
"interwiki_intro": "Dit is een overzicht van de interwikitabel.",
- "interwiki-legend-show": "Legenda weergeven",
- "interwiki-legend-hide": "Legenda verbergen",
+ "interwiki-legend-label": "Legenda",
"interwiki_prefix": "Voorvoegsel",
"interwiki-prefix-label": "Voorvoegsel:",
"interwiki_prefix_intro": "Interwikivoorvoegsel dat gebruikt moet worden in de wikitekstsyntaxis <code>[<nowiki />[voorvoegsel:<em>paginanaam</em>]]</code>.",
"interwiki_url_intro": "Sjabloon voor URL's. De plaatshouder $1 wordt vervangen door de <em>paginanaam</em> van de wikitekst als de bovenvermelde wikitekstsyntaxis gebruikt wordt.",
"interwiki_local": "Doorverwijzen",
"interwiki-local-label": "Doorverwijzen:",
- "interwiki_local_intro": "Een HTTP-aanvraag naar de lokale wiki met dit interwikivoorvoegsel in de URL wordt:",
"interwiki_local_0_intro": "niet verwerkt, in plaats daarvan wordt een foutpagina \"{{int:badtitle}}\" weergegeven.",
"interwiki_local_1_intro": "doorverwezen naar de doel-URL die opgegeven is in de interwikikoppelingdefinities (m.a.w. behandeld als koppelingen naar lokale pagina's).",
"interwiki_trans": "Transcluderen",
"interwiki-trans-label": "Transcluderen:",
- "interwiki_trans_intro": "Indien wikitextsyntaxis <code>{<nowiki />{voorvoegsel:<em>paginanaam</em>}}</code> gebruikt wordt, dan:",
"interwiki_trans_1_intro": "transclusie toestaan van de andere wiki, indien interwikitransclusies over het algemeen toegestaan zijn in deze wiki.",
"interwiki_trans_0_intro": "transclusie niet toestaan, zoek in plaats daarvan naar een pagina in de sjabloonnaamruimte.",
- "interwiki_intro_footer": "Zie [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] voor meer informatie over de interwikitabel.\nEr is een [[Special:Log/interwiki|veranderingslogboek]] voor de interwikitabel.",
"interwiki_1": "ja",
"interwiki_0": "nee",
"interwiki_error": "Fout: De interwikitabel is leeg, of iets anders is misgegaan.",
diff --git a/extensions/Interwiki/i18n/nn.json b/extensions/Interwiki/i18n/nn.json
index ce639172..c9e1c508 100644
--- a/extensions/Interwiki/i18n/nn.json
+++ b/extensions/Interwiki/i18n/nn.json
@@ -8,54 +8,55 @@
"Njardarlogar"
]
},
- "interwiki": "Vis og endre interwikidata",
- "interwiki-title-norights": "Vis interwikidata",
+ "interwiki": "Sjå og endra mellomwikidata",
+ "interwiki-title-norights": "Sjå mellomwikidata",
"interwiki-desc": "Legg til ei [[Special:Interwiki|spesialside]] som gjer at ein kan sjå og endra interwikitabellen.",
- "interwiki_intro": "Dette er eit oversyn over interwikitabellen.",
- "interwiki-legend-show": "Vis ordtydingar",
- "interwiki-legend-hide": "Gøym ordtydingar",
+ "interwiki_intro": "Dette er eit oversyn over mellomwikitabellen, som definerer førefeste som snøgt kan lenkja til andre wikiar og andre eksterne nettstader. For tilrådd bruk, sjå [//www.mediawiki.org/wiki/Extension:Interwiki brukarrettleiinga på MediaWiki.org].",
+ "interwiki-legend-label": "Tydingar",
"interwiki_prefix": "Førefeste",
"interwiki-prefix-label": "Førefeste:",
"interwiki_prefix_intro": "Interwikiførefeste som skal verta nytta i <code>[<nowiki />[førefeste:<em>sidenamn</em>]]</code>-wikisyntaks.",
- "interwiki_url_intro": "Mal for adresser. Variabelen $1 vil verta bytt ut med <em>sidenamn</em> i wikiteksten når wikisyntakset ovanfor vert nytta.",
+ "interwiki_url_intro": "Mal for adresser. Variabelen $1 vil verta bytt ut med <em>sidenamn</em> i <code>[<nowiki />[førefeste:<em>sidenamn</em>]]</code>.",
"interwiki_local": "Send vidare",
"interwiki-local-label": "Send vidare:",
- "interwiki_local_intro": "Ein http-førespurnad til den lokale wikien med dette interwikiførefestet i adressa, er:",
"interwiki_local_0_intro": "ikkje æra, vanlegvis blokkert med «finn ikkje websida»,",
"interwiki_local_1_intro": "omdirigert til måladressa oppgjeven i interwikilenkjedefinisjonane (med andre ord handsama som refereransar på lokale sider)",
"interwiki_trans": "Inkluder",
"interwiki-trans-label": "Inkluder:",
- "interwiki_trans_intro": "Om wikitekstsyntakset <code>{<nowiki />{prefix:<em>pagename</em>}}</code> er nytta, so:",
"interwiki_trans_1_intro": "tillat inkludering frå ein framand wiki, om interwikiinkluderingar generelt sett er tillatne på denne wikien,",
"interwiki_trans_0_intro": "ikkje tillat det, sjå heller etter ei sida i malnamnerommet.",
- "interwiki_intro_footer": "Sjå [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] for meir informasjon om interwikitabellen.\nDet finst ein [[Special:Log/interwiki|logg over endringar]] i interwikitabellen.",
"interwiki_1": "ja",
"interwiki_0": "nei",
- "interwiki_error": "Feil: Interwikitabellen er tom, eller noko anna gjekk gale.",
- "interwiki-cached": "Interwikidataa er mellomlagra. Det er ikkje mogeleg å endra mellomlageret.",
+ "interwiki_error": "Feil: Mellomwikitabellen er tom, eller noko anna gjekk gale.",
+ "interwiki-cached": "Mellomwikidataa er mellomlagra. Det er ikkje mogeleg å endra mellomlageret.",
"interwiki_edit": "Endra",
"interwiki_reasonfield": "Årsak:",
"interwiki_delquestion": "Slettar «$1»",
- "interwiki_deleting": "Du slettar prefikset «$1».",
- "interwiki_deleted": "Prefikset «$1» blei fjerna frå interwikitabellen.",
- "interwiki_delfailed": "Prefikset «$1» kunne ikkje bli fjerna frå interwikitabellen.",
+ "interwiki_deleting": "Du slettar førefestet «$1».",
+ "interwiki_deleted": "Førefestet «$1» vart fjerna frå mellomwikitabellen.",
+ "interwiki_delfailed": "Førefestet «$1» kunne ikkje fjernast frå mellomwikitabellen.",
+ "interwiki-logtext": "Sjå logg",
"interwiki_addtext": "Legg til eit interwikiprefiks",
- "interwiki_addintro": "Du legg til eit nytt interwikiprefiks.\nHugs at det ikkje kan innehalda mellomrom ( ), kolon (:), et (&) eller likskapsteikn (=).",
+ "interwiki_addintro": "Du legg til eit nytt mellomwikiførefeste.\nHugs at det ikkje kan innehalda mellomrom ( ), kolon (:), et (&) eller likskapsteikn (=).",
"interwiki_addbutton": "Legg til",
- "interwiki_added": "Prefikset «$1» blei lagt til i interwikitabellen.",
- "interwiki_addfailed": "Prefikset «$1» kunne ikkje bli lagt til i interwikitabellen.\nKanskje er det i bruk frå før.",
- "interwiki_edittext": "Endrar eit interwikiprefiks",
- "interwiki_editintro": "Du endrar eit interwikiprefiks.\nHugs at dette kan øydeleggja lenkjer som finst frå før.",
- "interwiki_edited": "Prefikset «$1» blei endra i interwikitabellen.",
- "interwiki_editerror": "Prefikset «$1» kan ikkje bli endra i interwikitabellen.\nKanskje finst det ikkje.",
- "interwiki-badprefix": "Det oppgjevne interwikiprefikset «$1» inneheld ugyldige teikn.",
+ "interwiki_added": "Førefestet «$1» vart lagt til i mellomwikitabellen.",
+ "interwiki_addfailed": "Førefestet «$1» kunne ikkje leggjast til i mellomwikitabellen.\nKanskje er det i bruk frå før.",
+ "interwiki_edittext": "Endrar eit mellomwikiførefeste",
+ "interwiki_editintro": "Du endrar eit mellomwikiførefeste.\nHugs at dette kan øydeleggja lenkjer som finst frå før.",
+ "interwiki_edited": "Førefestet «$1» vart endra i mellomwikitabellen.",
+ "interwiki_editerror": "Førefestet «$1» kan ikkje endrast i mellomwikitabellen.\nKanskje finst det ikkje.",
+ "interwiki-badprefix": "Det oppgjevne mellomwikiførefestet «$1» inneheld ugyldige teikn.",
"interwiki-submit-empty": "Førefestet og URL-en kan ikkje vera tomme.",
"interwiki-submit-invalidurl": "Protokollen til URL-en er ugild.",
- "log-name-interwiki": "Logg for interwikitabell",
+ "log-name-interwiki": "Logg for mellomwikitabell",
"logentry-interwiki-iw_add": "$1 {{GENDER:$2|la til}} førefestet «$4» ($5) (omsett: $6; lokalt: $7) til interwikitabellen",
"logentry-interwiki-iw_edit": "$1 {{GENDER:$2|endra}} førefestet «$4» ($5) (omsett: $6; lokalt: $7) i interwikitabellen",
"logentry-interwiki-iw_delete": "$1 {{GENDER:$2|fjerna}} førefestet «$4» frå interwikitabellen",
- "log-description-interwiki": "Dette er ein logg over endringar i [[Special:Interwiki|interwikitabellen]].",
- "right-interwiki": "Endra interwikidata",
- "action-interwiki": "endra dette interwikielementet"
+ "log-description-interwiki": "Dette er ein logg over endringar i [[Special:Interwiki|mellomwikitabellen]].",
+ "right-interwiki": "Endra mellomwikidata",
+ "action-interwiki": "endra dette mellomwikielementet",
+ "interwiki-global-links": "Globale mellomwikiførefeste",
+ "interwiki-links": "Mellomwiki-førefeste",
+ "interwiki-language-links": "Mellomspråklege førefeste",
+ "interwiki-language-description": "Desse førefesta svarar til definerte språkkodar, og vil verta nytta til å laga «{{int:otherlanguages}}»-lista når dei vert lagde til ei side."
}
diff --git a/extensions/Interwiki/i18n/oc.json b/extensions/Interwiki/i18n/oc.json
index 86362472..28799cd9 100644
--- a/extensions/Interwiki/i18n/oc.json
+++ b/extensions/Interwiki/i18n/oc.json
@@ -8,6 +8,7 @@
"interwiki-title-norights": "Veire las donadas interwiki",
"interwiki-desc": "Apond una [[Special:Interwiki|pagina especiala]] per veire e editar la taula interwiki",
"interwiki_intro": "Aquò es un apercebut de la taula interwiki.",
+ "interwiki-legend-label": "Legenda",
"interwiki_prefix": "Prefix",
"interwiki-prefix-label": "Prefix :",
"interwiki_prefix_intro": "Prefix interwiki d'utilizar dins <code>[<nowiki />[prefix :<em>nom de la pagina</em>]]</code> de la sintaxi wiki.",
@@ -20,7 +21,6 @@
"interwiki-trans-label": "Enclure :",
"interwiki_trans_1_intro": "Se la sintaxi wikitèxte <code>{<nowiki />{prefix:<em>nom_pagina</em>}}</code> es utilizada, aquò permet d’inclure un modèl/pagina dempuèi un autre wiki se las inclusions interwiki son activadas d'un biais general ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding inclusion dangierosa]).",
"interwiki_trans_0_intro": "l'inclusion serà regetada, e la pagina correspondenta serà recercada dins l'espaci de noms « Modèl ».",
- "interwiki_intro_footer": "Vejatz [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] per obténer mai d'entresenhas a prepaus de la taula interwiki.\nExistís un [[Special:Log/interwiki|jornal de las modificacions]] de la taula interwiki.",
"interwiki_1": "òc",
"interwiki_0": "non",
"interwiki_error": "Error : la taula dels interwikis es voida o un processús s'es mal desenrotlat.",
@@ -30,7 +30,9 @@
"interwiki_deleting": "Escafatz presentament lo prefix « $1 ».",
"interwiki_deleted": "$1 es estada levada amb succès de la taula interwiki.",
"interwiki_delfailed": "$1 a pas pogut èsser levat de la taula interwiki.",
- "interwiki_addtext": "Apond un prefix interwiki",
+ "interwiki-logtext": "Afichar lo jornal",
+ "interwiki_addtext": "Apondre un prefix interwiki o interlenga",
+ "interwiki-addtext-local": "Apondre un prefix interwiki o interlenga local",
"interwiki_addintro": "Sètz a apondre un prefix interwiki. Rapelatz-vos que pòt pas conténer d'espacis ( ), de punts dobles (:), d'eperluetas (&) o de signes egal (=)",
"interwiki_addbutton": "Apondre",
"interwiki_added": "$1 es estat apondut amb succès dins la taula interwiki.",
@@ -40,6 +42,8 @@
"interwiki_edited": "Lo prefix « $1 » es estat modificat amb succès dins la taula interwiki.",
"interwiki_editerror": "Lo prefix « $1 » pòt pas èsser modificat. Es possible qu'exista pas.",
"interwiki-badprefix": "Lo prefix interwiki especificat « $1 » conten de caractèrs invalids",
+ "interwiki-submit-empty": "Lo prefix e l'URL pòdon pas èsser voids.",
+ "interwiki-submit-invalidurl": "Lo protocòl de l'URL es pas valid.",
"log-name-interwiki": "Jornal de la taula interwiki",
"log-description-interwiki": "Aquò es lo jornal dels cambiaments dins la [[Special:Interwiki|taula interwiki]].",
"right-interwiki": "Modificar las donadas interwiki",
diff --git a/extensions/Interwiki/i18n/pa.json b/extensions/Interwiki/i18n/pa.json
new file mode 100644
index 00000000..6d5b1559
--- /dev/null
+++ b/extensions/Interwiki/i18n/pa.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Babanwalia"
+ ]
+ },
+ "interwiki-legend-label": "ਟੀਕਾ",
+ "interwiki-logtext": "ਰੋਜ਼ਨਾਮਚਾ ਵੇਖੋ",
+ "interwiki_addtext": "ਕੋਈ ਅੰਤਰਵਿਕੀ ਜਾਂ ਭਾਸ਼ਾਈ ਅਗੇਤਰ ਜੋੜੋ",
+ "interwiki-addtext-local": "ਕੋਈ ਸਥਾਨੀ ਅੰਤਰਵਿਕੀ ਜਾਂ ਭਾਸ਼ਾਈ ਅਗੇਤਰ ਜੋੜੋ",
+ "interwiki-global-links": "ਸਰਬ-ਵਿਆਪੀ ਅੰਤਰਵਿਕੀ ਅਗੇਤਰ",
+ "interwiki-local-links": "ਸਥਾਨੀ ਅੰਤਰਵਿਕੀ ਅਗੇਤਰ",
+ "interwiki-links": "ਅੰਤਰਵਿਕੀ ਅਗੇਤਰ",
+ "interwiki-language-links": "ਅੰਤਰਭਾਸ਼ਾਈ ਅਗੇਤਰ"
+}
diff --git a/extensions/Interwiki/i18n/pms.json b/extensions/Interwiki/i18n/pms.json
index 19a2499c..0f8f13f9 100644
--- a/extensions/Interwiki/i18n/pms.json
+++ b/extensions/Interwiki/i18n/pms.json
@@ -9,23 +9,18 @@
"interwiki-title-norights": "Varda dat antërwiki",
"interwiki-desc": "A gionta na [[Special:Interwiki|pàgina special]] për vëdde e modifiché la tàula antërwiki",
"interwiki_intro": "Costa-sì a l'é na previsualisassion dla tàula antërwiki.",
- "interwiki-legend-show": "Mostré la legenda",
- "interwiki-legend-hide": "Stërmé la legenda",
"interwiki_prefix": "Prefiss",
"interwiki-prefix-label": "Prefiss:",
"interwiki_prefix_intro": "Prefiss antërwiki da dovré ant la sintassi dël test wiki <code>[<nowiki />[prefix:<em>nòm pàgina</em>]]</code>",
"interwiki_url_intro": "Stamp për anliure. Ël marca-pòst $1 a sarà rimpiassà dal <em>nòm pàgina</em> dël test wiki, quand la sintassi dël test wiki dzor-dit a l'é dovrà.",
"interwiki_local": "Anans",
"interwiki-local-label": "Anans:",
- "interwiki_local_intro": "N'arcesta HTTP a la wiki local con sto prefiss antërwiki-sì ant l'anliura a l'é:",
"interwiki_local_0_intro": "pa fàit, normalment blocà da \"pàgina pa trovà\"",
"interwiki_local_1_intro": "ridiressionà a l'anliura ëd destinassion dàita ant la definission dël colegament antërwiki (visadì tratà com arferiment ant le pàgine locaj)",
"interwiki_trans": "Anseriment",
"interwiki-trans-label": "Anseriment:",
- "interwiki_trans_intro": "Se la sintassi wikitest <code>{<nowiki />{prefix:<em>nòmpàgina</em>}}</code> a l'é dovrà, antlora:",
"interwiki_trans_1_intro": "a përmet anseriment da la wiki strangera, se j'anseriment antërwiki a son generalment përmëttù an sta wiki-sì,",
"interwiki_trans_0_intro": "a përmet pa lòn, nopà a sërca na pàgina ant lë spassi nominal dlë stamp.",
- "interwiki_intro_footer": "Varda [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] për savèjne ëd pi an sla tàula antërwiki.\nA-i é un [[Special:Log/interwiki|registr dij cambi]] për la tàula antërwiki.",
"interwiki_1": "é!",
"interwiki_0": "nò",
"interwiki_error": "Eror: La tàula antërwiki a l'é veuida, o cheicòs d'àutr a l'é andàit mal.",
diff --git a/extensions/Interwiki/i18n/pt-br.json b/extensions/Interwiki/i18n/pt-br.json
index 3f715bc5..937da38b 100644
--- a/extensions/Interwiki/i18n/pt-br.json
+++ b/extensions/Interwiki/i18n/pt-br.json
@@ -6,30 +6,26 @@
"Giro720",
"Luckas",
"Luckas Blade",
- "555"
+ "555",
+ "Dianakc"
]
},
"interwiki": "Ver e editar dados de interwikis",
"interwiki-title-norights": "Ver dados interwiki",
"interwiki-desc": "Adiciona uma [[Special:Interwiki|página especial]] para visualizar e editar a tabela de interwikis",
"interwiki_intro": "Esta é uma visão geral da tabela de interwikis.",
- "interwiki-legend-show": "Exibir legenda",
- "interwiki-legend-hide": "Ocultar legenda",
"interwiki_prefix": "Prefixo",
"interwiki-prefix-label": "Prefixo:",
"interwiki_prefix_intro": "Prefixo de interwiki a ser usado na sintaxe de wikitexto <code>[<nowiki />[prefix:<em>nome_página</em>]]</code>.",
"interwiki_url_intro": "Modelo para URL. O marcador $1 será substituído pelo <em>nome_página</em> do wikitexto, quando a sintaxe de wikitexto acima mencionada for usada.",
"interwiki_local": "Encaminhar",
"interwiki-local-label": "Encaminhar:",
- "interwiki_local_intro": "Um pedido http para o wiki local com este prefixo de interwiki na URL é:",
"interwiki_local_0_intro": "ignorado, geralmente bloqueado por \"página não encontrada\",",
"interwiki_local_1_intro": "redirecionado para a URL alvo dada nas definições de ligação interwiki (p. ex. tratado como referências em páginas locais)",
"interwiki_trans": "Transcluir",
"interwiki-trans-label": "Transcluir:",
- "interwiki_trans_intro": "Se a sintaxe de wikitexto <code>{<nowiki />{prefix:<em>nome_página</em>}}</code> for usada, então:",
"interwiki_trans_1_intro": "permite transclusão do wiki externo, se transclusões interwiki forem permitidas de forma geral neste wiki,",
"interwiki_trans_0_intro": "não o permite; ao invés, procura uma página no espaço nominal de predefinições.",
- "interwiki_intro_footer": "Veja [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] para mais informações sobre a tabela de interwikis.\nExiste um [[Special:Log/interwiki|registro de modificações]] à tabela de interwikis.",
"interwiki_1": "sim",
"interwiki_0": "não",
"interwiki_error": "ERRO: A tabela de interwikis está vazia, ou alguma outra coisa não correu bem.",
@@ -46,7 +42,7 @@
"interwiki_added": "O prefixo \"$1\" foi adicionado à tabela de interwikis com sucesso.",
"interwiki_addfailed": "O prefixo \"$1\" não pôde ser adicionado à tabela de interwikis. Possivelmente já existe nessa tabela.",
"interwiki_edittext": "Editando um prefixo interwiki",
- "interwiki_editintro": "Você está editando um prefixo interwiki. Lembre-se de que isto pode quebrar ligações existentes.",
+ "interwiki_editintro": "Você está editando um prefixo interwiki. Lembre-se de que isto pode quebrar links existentes.",
"interwiki_edited": "O prefixo \"$1\" foi modificado na tabela de interwikis com sucesso.",
"interwiki_editerror": "O prefixo \"$1\" não pode ser modificado na tabela de interwikis. Possivelmente, não existe.",
"interwiki-badprefix": "O prefixo interwiki \"$1\" contém caracteres inválidos",
diff --git a/extensions/Interwiki/i18n/pt.json b/extensions/Interwiki/i18n/pt.json
index eeede934..73683eb2 100644
--- a/extensions/Interwiki/i18n/pt.json
+++ b/extensions/Interwiki/i18n/pt.json
@@ -64,5 +64,5 @@
"interwiki-local-description": "Estes prefixos existem localmente. Qualquer duplicação da configuração global irá substituir a definição global.",
"interwiki-links": "Prefixos interwiki",
"interwiki-language-links": "Prefixos interlíngua",
- "interwiki-language-description": "Estes prefixos correspondem a códigos de idioma definidos e serão usados para criar a lista \"Noutros idiomas\" quando adicionados a uma página."
+ "interwiki-language-description": "Estes prefixos correspondem a códigos de idioma definidos e serão usados para criar a lista \"{{int:otherlanguages}}\" quando adicionados a uma página."
}
diff --git a/extensions/Interwiki/i18n/qqq.json b/extensions/Interwiki/i18n/qqq.json
index 07ba5b08..53812546 100644
--- a/extensions/Interwiki/i18n/qqq.json
+++ b/extensions/Interwiki/i18n/qqq.json
@@ -19,7 +19,7 @@
},
"interwiki": "{{doc-special|Interwiki}}",
"interwiki-title-norights": "{{doc-special|Interwiki}}\nUsed when the user has no right to edit the interwiki data and can only view them.",
- "interwiki-desc": "{{desc|name=Interwiki|url=http://www.mediawiki.org/wiki/Extension:Interwiki}}",
+ "interwiki-desc": "{{desc|name=Interwiki|url=https://www.mediawiki.org/wiki/Extension:Interwiki}}",
"interwiki_intro": "Part of the interwiki extension. Shown as introductory text on [[Special:Interwiki]].",
"interwiki-legend-label": "Used on [[Special:Interwiki]] as header text for interwiki legend\n{{Identical|Legend}}",
"interwiki-legend": "{{notranslate}}\nLegend on [[Special:Interwiki]].",
@@ -30,7 +30,7 @@
"interwiki-url-label": "{{optional}}\nUsed on [[Special:Interwiki]] as a field label in a form.\n\nSee also:\n* {{msg-mw|interwiki url}}\n{{Identical|URL}}",
"interwiki_url_intro": "Used on [[Special:Interwiki]] so as to explain the data in the {{msg-mw|Interwiki url}} column of the table.\n\nParameters:\n* $1 is being rendered verbatim. It refers to the syntax of the values listed in the \"prefix\" column, and does not mark a substitutable variable of this message.",
"interwiki_local": "Used on [[Special:Interwiki]] as a column header.\n\n{{Identical|Forward}}",
- "interwiki-local-label": "Field label for the interwiki property \"local\", to set if an HTTP request to the local wiki with this interwiki prefix in the URL is redirected to the target URL given in the interwiki link definitions.",
+ "interwiki-local-label": "Field label for the interwiki property \"local\", to set if an HTTP request to the local wiki with this interwiki prefix in the URL is redirected to the target URL given in the interwiki link definitions.\n{{Identical|Forward}}",
"interwiki_local_0_intro": "Used on [[Special:Interwiki]] so as to describe the meaning of the value 0 in the {{msg-mw|Interwiki local}} column of the table.\n\nRefers to {{msg-mw|Badtitle}}.\n\nSee also:\n* {{msg-mw|Interwiki local 1 intro}}",
"interwiki_local_1_intro": "Used on [[Special:Interwiki]] so as to descripe the meaning of the value 1 in the {{msg-mw|Interwiki local}} column of the table.\n\nSee also:\n* {{msg-mw|Interwiki local 0 intro}}",
"interwiki_trans": "Used on [[Special:Interwiki]] as table column header.",
@@ -47,9 +47,9 @@
"interwiki_deleting": "Used as intro message for the table. Parameters:\n* $1 - the specified prefix",
"interwiki_deleted": "Used as success message. Parameters:\n* $1 - interwiki prefix",
"interwiki_delfailed": "Error message when removing an interwiki table entry fails. Parameters:\n* $1 is an interwiki prefix.",
- "interwiki-logtext": "Link description to open log of changes to the interwiki table.",
- "interwiki_addtext": "Link description to open form to add an interwiki prefix.",
- "interwiki-addtext-local": "Link description for wikis with global interwikis to open form to add a local interwiki prefix.",
+ "interwiki-logtext": "Link description to open log of changes to the interwiki table.\n\nThe link points to [[Special:Log/interwiki]].\n{{Identical|View log}}",
+ "interwiki_addtext": "Used as text for the link to open form to add an interwiki prefix.\n\nAlso used as fieldset label.\n\nSee also:\n* {{msg-mw|Interwiki-addtext-local}}",
+ "interwiki-addtext-local": "Used as link text for wikis with global interwikis to open form to add a local interwiki prefix.\n\nSee also:\n* {{msg-mw|Interwiki addtext}}",
"interwiki_addintro": "Form information when adding an interwiki prefix.",
"interwiki_addbutton": "This message is the text of the button to submit the interwiki prefix you are adding.\n\n{{Identical|Add}}",
"interwiki_added": "Success message after adding an interwiki prefix. Parameters:\n* $1 is the added interwiki prefix.",
@@ -77,5 +77,5 @@
"interwiki-links": "Used on [[Special:Interwiki]] as header text for interwiki prefix table if no global table is present",
"interwiki-description": "{{notranslate}}\nAppears under the interwiki-links header on [[Special:Interwiki]]",
"interwiki-language-links": "Used on [[Special:Interwiki]] as header text for interwiki language prefix table",
- "interwiki-language-description": "Appears under the interwiki-language-links header on [[Special:Interwiki]]; explains what interlanguage links do"
+ "interwiki-language-description": "Appears under the interwiki-language-links header on [[Special:Interwiki]]; explains what interlanguage links do.\n\nRefers to {{msg-mw|Otherlanguages}}."
}
diff --git a/extensions/Interwiki/i18n/ro.json b/extensions/Interwiki/i18n/ro.json
index c482bac2..34f430e6 100644
--- a/extensions/Interwiki/i18n/ro.json
+++ b/extensions/Interwiki/i18n/ro.json
@@ -11,8 +11,6 @@
"interwiki-title-norights": "Vizualizare date interwiki",
"interwiki-desc": "Adaugă o [[Special:Interwiki|pagină specială]] pentru vizualizarea și modificarea tabelului interwiki",
"interwiki_intro": "Aceasta este o imagine de ansamblu a tabelului interwiki.",
- "interwiki-legend-show": "Arată legenda",
- "interwiki-legend-hide": "Ascunde legenda",
"interwiki_prefix": "Prefix",
"interwiki-prefix-label": "Prefix:",
"interwiki_local": "Înainte",
diff --git a/extensions/Interwiki/i18n/roa-tara.json b/extensions/Interwiki/i18n/roa-tara.json
index bc29fca6..66a64273 100644
--- a/extensions/Interwiki/i18n/roa-tara.json
+++ b/extensions/Interwiki/i18n/roa-tara.json
@@ -7,16 +7,14 @@
"interwiki": "'Ndruche e cange le date de le inderuicchi",
"interwiki-title-norights": "'Ndruche le date de inderuicchi",
"interwiki-desc": "Aggiunge 'na [[Special:Interwiki|pàgena speciale]] pe 'ndrucà e cangià 'a tabbelle de inderuicchi",
- "interwiki_intro": "Queste jè 'na panorameche d'a tabbelle de inderuicchi.",
- "interwiki-legend-show": "Fà vedè 'a leggende",
- "interwiki-legend-hide": "Scunne 'a leggende",
+ "interwiki_intro": "Queste jè 'na panorameche d'a tabbelle de inderuicchi, 'a quale definisce le scorciatoie pe le prefisse ausate pe collegà veloce veloce le uicchi e otre site de fore. Pe ause raccomandate, pe piacere 'ndruche [//www.mediawiki.org/wiki/Extension:Interwiki 'u manuale sus a MediaWiki.org].",
+ "interwiki-legend-label": "Leggende",
"interwiki_prefix": "Prefisse",
"interwiki-prefix-label": "Prefisse:",
"interwiki_prefix_intro": "'U prefisse inderuicchi avène ausate jndr'à <code>[<nowiki />[prefix:<em>pagename</em>]]</code> sindasse uicchiteste.",
"interwiki_local": "Inoltre",
"interwiki-local-label": "Inoltre:",
- "interwiki_local_intro": "'Na richieste HTTP sus a sta uicchi locale cu ste prefisse inderuicchi jndr'à URL jè:",
- "interwiki_local_0_intro": "none onorate, normalmende bloccate da \"pàgene none acchiate\".",
+ "interwiki_local_0_intro": "Richieste HTTP de fore a 'a uicchi locale ste ause stu prefisse inderuicchi jndr'à URL ca ve spiccie jndr'à pàgene de errore \"{{int:badtitle}}\".",
"interwiki_1": "sine",
"interwiki_0": "none",
"interwiki_edit": "Cange",
@@ -25,7 +23,8 @@
"interwiki_deleting": "Tu ste scangille 'u prefisse \"$1\".",
"interwiki_deleted": "'U prefisse \"$1\" ha state luate da 'a tabbelle de inderuicchi.",
"interwiki_delfailed": "'U prefisse \"$1\" non ge pò essere luate da 'a tabbelle de inderuicchi.",
- "interwiki_addtext": "Aggiunge 'nu prefisse inderuicchi",
+ "interwiki-logtext": "Vide l'archivije",
+ "interwiki_addtext": "Aggiunge 'na inderuicchi o 'nu prefisse d'a lènghe",
"interwiki_addbutton": "Aggiunge",
"right-interwiki": "Cange le date de inderuicchi",
"action-interwiki": "cange sta vôsce de inderuicchi"
diff --git a/extensions/Interwiki/i18n/ru.json b/extensions/Interwiki/i18n/ru.json
index b53837c6..0857b89b 100644
--- a/extensions/Interwiki/i18n/ru.json
+++ b/extensions/Interwiki/i18n/ru.json
@@ -10,13 +10,14 @@
"Lockal",
"Putnik",
"Александр Сигачёв",
- "Okras"
+ "Okras",
+ "Striking Blue"
]
},
"interwiki": "Просмотр и изменение настроек интервики",
"interwiki-title-norights": "Просмотреть данные об интервики",
"interwiki-desc": "Добавляет [[Special:Interwiki|служебную страницу]] для просмотра и редактирования таблицы приставок интервики.",
- "interwiki_intro": "Это обзор таблицы интервики.",
+ "interwiki_intro": "Это обзор таблицы интервики, которая определяет префиксы, используемые для коротких ссылок на различные вики и другие внешние сайты. Для рекомендаций по использованию см. [//www.mediawiki.org/wiki/Extension:Interwiki руководство на MediaWiki.org].",
"interwiki-legend-label": "Легенда",
"interwiki_prefix": "Приставка",
"interwiki-prefix-label": "Префикс:",
@@ -41,7 +42,7 @@
"interwiki_deleted": "Префикс «$1» успешно удалён из таблицы интервики.",
"interwiki_delfailed": "Префикс «$1» не может быть удалён из таблицы интервики.",
"interwiki-logtext": "Просмотр журнала",
- "interwiki_addtext": "Добавить языковую или интервики-приставку",
+ "interwiki_addtext": "Добавить языковой или интервики-префикс",
"interwiki-addtext-local": "Добавить локальный языковой или интервики-префикс",
"interwiki_addintro": "Вы собираетесь добавить новую интервики-приставку. Помните, что она не может содержать пробелы ( ), двоеточия (:), амперсанды (&) и знаки равенства (=).",
"interwiki_addbutton": "Добавить",
@@ -61,8 +62,11 @@
"log-description-interwiki": "Это журнал изменений [[Special:Interwiki|таблицы интервики]].",
"right-interwiki": "правка таблицы интервики",
"action-interwiki": "изменение записи интервики",
- "interwiki-global-links": "Глобальные интервики-префиксы",
- "interwiki-local-links": "Локальные интервики-префиксы",
- "interwiki-links": "Интервики-префиксы",
- "interwiki-language-links": "Межъязыковые префиксы"
+ "interwiki-global-links": "Глобальные префиксы интервики",
+ "interwiki-global-description": "Эти префиксы наследуются из глобальной конфигурации и могут быть отредактированы только на исходной вики.",
+ "interwiki-local-links": "Локальные префиксы интервики",
+ "interwiki-local-description": "Эти префиксы существуют локально. Любые префиксы, дублирующие имеющиеся в глобальной конфигурации, переопределяют глобальные определения.",
+ "interwiki-links": "Префиксы интервики",
+ "interwiki-language-links": "Межъязыковые префиксы",
+ "interwiki-language-description": "Эти префиксы соответствуют определённым языковым кодам и будут использоваться для создания списка «{{int:otherlanguages}}» при добавлении на страницу."
}
diff --git a/extensions/Interwiki/i18n/sa.json b/extensions/Interwiki/i18n/sa.json
index 45780bca..61cd3659 100644
--- a/extensions/Interwiki/i18n/sa.json
+++ b/extensions/Interwiki/i18n/sa.json
@@ -3,6 +3,5 @@
"authors": [
"NehalDaveND"
]
- },
- "interwiki-legend-hide": "शीर्षकविवरणं गोप्यताम्"
+ }
}
diff --git a/extensions/Interwiki/i18n/sco.json b/extensions/Interwiki/i18n/sco.json
index 33344150..da694a1e 100644
--- a/extensions/Interwiki/i18n/sco.json
+++ b/extensions/Interwiki/i18n/sco.json
@@ -7,22 +7,17 @@
"interwiki": "See n eedit the interwiki data",
"interwiki-title-norights": "See interwiki data",
"interwiki-desc": "Eiks ae [[Special:Interwiki|speecial page]] tae see n eedit the interwiki buird",
- "interwiki_intro": "This is aen owerview o the interwiki buird.",
- "interwiki-legend-show": "Shaw legend",
- "interwiki-legend-hide": "Skauk legend",
+ "interwiki_intro": "This is aen owerview o the interwiki buird, this defines the prefix shortcuts that ar uised tae quicklie airt tae different wikis n ither ootby steids. Fer recommendit uise, please see [//www.mediawiki.org/wiki/Extension:Interwiki the manual at MediaWiki.org].",
"interwiki_prefix_intro": "Interwiki prefix tae be uised in <code>[<nowiki />[prefix:<em>pagename</em>]]</code> wikitex syntax.",
- "interwiki_url_intro": "Template fer URLs. The placehauder $1 will be replaced bi the <em>pagename</em> o the wikitex, whan the abuinmentioned wikitex syntax is uised.",
+ "interwiki_url_intro": "Template fer URLs. The placehauder $1 will be replaced wi the <em>pagename</em> in <code>[<nowiki />[prefix:<em>pagename</em>]]</code>.",
"interwiki_local": "Forewaird",
"interwiki-local-label": "Forewaird:",
- "interwiki_local_intro": "Aen HTTP request til the local wiki wi this interwiki prefix in the URL is:",
- "interwiki_local_0_intro": "na honored, ae \"{{int:badtitle}}\" mistak page will be displeyed instead.",
- "interwiki_local_1_intro": "reguided til the tairget URL gien in the interwiki airtin defineetions (i.e. treatit like airtins til local pages).",
+ "interwiki_local_0_intro": "Ootby HTTP requests tae the local wiki uisin this interwiki prefix in the URL will ootcome in ae \"{{int:badtitle}}\" mistak page.",
+ "interwiki_local_1_intro": "Ootby HTTP requests tae the local wiki uisin this interwiki prefix will be reguidit tae the tairget URL o the interwiki (in ither wyrds, treatit lik airtins tae local pages).",
"interwiki_trans": "Transclæde",
"interwiki-trans-label": "Transclæde:",
- "interwiki_trans_intro": "Gif wikitex syntax <code>{<nowiki />{prefix:<em>pagename</em>}}</code> is uised, than:",
- "interwiki_trans_1_intro": "permit transclæsion fae the foreign wiki, gif interwiki transclæsions ar generallie permitted in this wiki.",
- "interwiki_trans_0_intro": "dinna permit it, raither luik fer ae page in the template namespace.",
- "interwiki_intro_footer": "See [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] fer mair information aneat the interwiki buird.\nThaur's ae [[Special:Log/interwiki|log o chynges]] fer the interwiki buird.",
+ "interwiki_trans_1_intro": "Gif wikitext syntax <code>{<nowiki />{prefix:<em>pagename</em>}}</code> is uised, allou template/page transclæsion fae the foreign wiki gif interwiki transclæsions ar enablit in general ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclæsion]).",
+ "interwiki_trans_0_intro": "Dinna allou <code>{<nowiki />{prefix:<em>pagename</em>}}</code> tae transclæde foreign templates/pages, insteid, luik fer ae local page in the template namespace.",
"interwiki_1": "ai",
"interwiki_0": "naw",
"interwiki_error": "Mistak: The interwiki biurd is tuim, or some ither thing gaed wrang.",
@@ -33,8 +28,8 @@
"interwiki_deleting": "Ye'r delytin prefix \"$1\".",
"interwiki_deleted": "Prefix \"$1\" wis successfulie remuived fae the interwiki buird.",
"interwiki_delfailed": "Prefix \"$1\" coudna be remuived fae the interwiki buird.",
- "interwiki_addtext": "Eik aen interwiki prefix",
- "interwiki_addintro": "Ye'r addin ae new interwiki prefix.\nMynd ye that it canna contain spaces ( ), colons (:), ampersands (&), or equal signs (=).",
+ "interwiki_addtext": "Eik aen interwiki or leid prefix",
+ "interwiki_addintro": "Ye'r eikin ae new interwiki prefix.\nMynd ye that it canna contain spaces ( ), colons (:), ampersands (&), or equal signs (=).",
"interwiki_added": "Prefix \"$1\" wis successfulie eikit til the interwiki buird.",
"interwiki_addfailed": "Prefix \"$1\" coudna be added til the interwiki buird.\nPossibly it awreadie exeests in the interwiki buird.",
"interwiki_edittext": "Eiditin aen interwiki prefix",
diff --git a/extensions/Interwiki/i18n/si.json b/extensions/Interwiki/i18n/si.json
index 2f8d3c51..95b0adaa 100644
--- a/extensions/Interwiki/i18n/si.json
+++ b/extensions/Interwiki/i18n/si.json
@@ -8,8 +8,6 @@
},
"interwiki": "අන්තර්විකි දත්ත නැරඹීම සහ සංස්කරණය",
"interwiki-title-norights": "අන්තර්විකි දත්ත නරඹන්න",
- "interwiki-legend-show": "ප්‍රබන්ධය පෙන්වන්න",
- "interwiki-legend-hide": "ප්‍රබන්ධය සඟවන්න",
"interwiki_prefix": "උපසර්ගය",
"interwiki-prefix-label": "උපසර්ගය:",
"interwiki_local": "ඉදිරියට",
diff --git a/extensions/Interwiki/i18n/sk.json b/extensions/Interwiki/i18n/sk.json
index 65bed96d..3ff13234 100644
--- a/extensions/Interwiki/i18n/sk.json
+++ b/extensions/Interwiki/i18n/sk.json
@@ -14,15 +14,12 @@
"interwiki_url_intro": "Šablóna URL. Vyhradené miesto $1 sa nahradí <em>názvom_stránky</em> wikitextu pri použití vyššie uvedenej syntaxi wikitextu.",
"interwiki_local": "Presmerovať",
"interwiki-local-label": "Presmerovať:",
- "interwiki_local_intro": "HTTP požiadavka na lokálnu wiki s touto predponou interwiki v URL je:",
"interwiki_local_0_intro": "nezohľadňuje sa, zvyčajne sa blokuje ako „stránka nenájdená“,",
"interwiki_local_1_intro": "presmerovaná na cieľové URL zadané v definícii interwiki odkazu (t.j. berie sa ako odkazy v rámci lokálnej stránky)",
"interwiki_trans": "Transklúzia",
"interwiki-trans-label": "Transklúzia:",
- "interwiki_trans_intro": "Ak je použitá syntax wikitextu <code>{<nowiki />{predpona:<em>názov_stránky</em>}}</code>,",
"interwiki_trans_1_intro": "povoliť transklúzie z cudzej wiki ak sú na tejto wiki všeobecne povolené transklúzie interwiki,",
"interwiki_trans_0_intro": "nepovoliť ju, namiesto toho hľadať stránku v mennom priestore šablón.",
- "interwiki_intro_footer": "Ďalšie informácie o tabuľke interwiki nájdete na [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org].\nObsahuje [[Special:Log/interwiki|záznam zmien]] tabuľky interwiki.",
"interwiki_1": "áno",
"interwiki_0": "nie",
"interwiki_error": "CHYBA: Tabuľka interwiki je prázdna alebo sa pokazilo niečo iné.",
diff --git a/extensions/Interwiki/i18n/sl.json b/extensions/Interwiki/i18n/sl.json
index 1802c98b..085007e5 100644
--- a/extensions/Interwiki/i18n/sl.json
+++ b/extensions/Interwiki/i18n/sl.json
@@ -8,9 +8,7 @@
"interwiki": "Ogled in urejanje podatkov interwiki",
"interwiki-title-norights": "Ogled podatkov interwiki",
"interwiki-desc": "Doda [[Special:Interwiki|posebno stran]] za ogled in urejanje tabele interwiki",
- "interwiki_intro": "To je pregled tabele interwiki.",
- "interwiki-legend-show": "Prikaži legendo",
- "interwiki-legend-hide": "Skrij legendo",
+ "interwiki_intro": "To je pregled tabele interwiki, ki določa predponske bližnjice, ki se uporabljajo za povezovanje na različne wikije in druge zunanje strani. Za priporočljivo rabo si oglejte [//www.mediawiki.org/wiki/Extension:Interwiki priročnik na MediaWiki.org].",
"interwiki_prefix": "Predpona",
"interwiki-prefix-label": "Predpona:",
"interwiki_prefix_intro": "Predpona interwiki, uporabljena v skladnji wikibesedila <code>[<nowiki />[predpona:<em>imestrani</em>]]</code>.",
@@ -18,7 +16,6 @@
"interwiki-local-label": "Posredovano:",
"interwiki_trans": "Vključeno",
"interwiki-trans-label": "Vključeno:",
- "interwiki_trans_intro": "Če je uporabljena skladnja wikibesedila <code>{<nowiki />{predpona:<em>imestrani</em>}}</code>, potem:",
"interwiki_1": "da",
"interwiki_0": "ne",
"interwiki_error": "Napaka: Tabela interwiki je prazna ali pa je kaj drugega šlo narobe.",
@@ -29,7 +26,8 @@
"interwiki_deleting": "Brišete predpono »$1«.",
"interwiki_deleted": "Predpona »$1« je bila uspešno odstranjena iz tabele interwiki.",
"interwiki_delfailed": "Predpone »$1« ni bilo mogoče odstraniti iz tabele interwiki.",
- "interwiki_addtext": "Dodaj predpono interwiki",
+ "interwiki_addtext": "Dodaj interwiki- ali jezikovno predpono",
+ "interwiki-addtext-local": "Dodaj lokalno interwiki- ali jezikovno predpono",
"interwiki_addintro": "Dodajate novo medwikipredpono.\nUpoštevajte, da ne sme vsebovati presledkov ( ), dvopičij (:), znakov ''in'' (&) ali enačajev (=).",
"interwiki_addbutton": "Dodaj",
"interwiki_added": "Predpona »$1« je bila uspešno dodana v tabelo interwiki.",
@@ -40,6 +38,7 @@
"interwiki_editerror": "Predpone »$1« ni mogoče spremeniti v tabeli interwiki.\nMorda ne obstaja.",
"interwiki-badprefix": "Navedena predpona interwiki »$1« vsebuje neveljavne znake.",
"interwiki-submit-empty": "Predpona in URL ne smeta biti prazna.",
+ "interwiki-submit-invalidurl": "Protokol URL-ja ni veljaven.",
"log-name-interwiki": "Dnevnik tabele interwiki",
"log-description-interwiki": "To je dnevnik sprememb [[Special:Interwiki|tabele interwiki]].",
"right-interwiki": "Urejanje podatkov interwiki",
diff --git a/extensions/Interwiki/i18n/sr-ec.json b/extensions/Interwiki/i18n/sr-ec.json
index 700dce44..98563aad 100644
--- a/extensions/Interwiki/i18n/sr-ec.json
+++ b/extensions/Interwiki/i18n/sr-ec.json
@@ -12,8 +12,7 @@
"interwiki-title-norights": "Међувики",
"interwiki-desc": "Додаје посебну страницу за преглед и измену [[Special:Interwiki|табеле међувикија]]",
"interwiki_intro": "Ово је преглед табеле међувикија.",
- "interwiki-legend-show": "Прикажи легенду",
- "interwiki-legend-hide": "Сакриј легенду",
+ "interwiki-legend-label": "Легенда",
"interwiki_prefix": "Префикс",
"interwiki-prefix-label": "Префикс:",
"interwiki_prefix_intro": "Међувики префикс који ће бити коришћен у <code>[<nowiki />[prefix:<em>pagename</em>]]</code> викитекст синтакси.",
@@ -21,27 +20,28 @@
"interwiki-url-label": "Адреса:",
"interwiki_local": "Напред",
"interwiki-local-label": "Напред:",
- "interwiki_trans_intro": "Ако је коришћена викитекст синтакса <code>{<nowiki />{prefix:<em>pagename</em>}}</code>, онда:",
"interwiki_1": "да",
"interwiki_0": "не",
"interwiki_error": "Грешка: табела међувикија је празна, или нешто друго није у реду.",
"interwiki_edit": "Уреди",
"interwiki_reasonfield": "Разлог:",
"interwiki_delquestion": "Бришем „$1”",
- "interwiki_deleting": "Ви бришете префикс \"$1\".",
- "interwiki_deleted": "Префикс \"$1\" је успешно обрисан из табеле међувикија.",
- "interwiki_delfailed": "Префикс \"$1\" није могао бити обрисан из табеле међувикија.",
+ "interwiki_deleting": "Ви бришете префикс „$1“.",
+ "interwiki_deleted": "Префикс „$1“ је успешно обрисан из табеле међувикија.",
+ "interwiki_delfailed": "Префикс „$1“ није могао бити обрисан из табеле међувикија.",
+ "interwiki-logtext": "Види дневник",
"interwiki_addtext": "Додај интервики префикс",
"interwiki_addintro": "Ви додајете један интервики префикс.\nИмајте на уму да он не може да садржи размаке ( ), двотачку (:), амерсанд (&), или знак једнакости (=).",
"interwiki_addbutton": "Додај",
- "interwiki_added": "Префикс \"$1\" је успешно додат у табелу међувикија.",
- "interwiki_addfailed": "Префикс \"$1\" није могао бити додат у табелу међувикија.\nВероватно већ постоји у њој.",
+ "interwiki_added": "Префикс „$1“ је успешно додат у табелу међувикија.",
+ "interwiki_addfailed": "Префикс „$1“ није могао бити додат у табелу међувикија.\nВероватно већ постоји у њој.",
"interwiki_edittext": "Мењање међувики префикса",
"interwiki_editintro": "Ви мењате један међувики префикс.\nИмајте на уму да може да оштети постојеће међувики везе.",
- "interwiki_edited": "Префикс \"$1\" је успешно измењен у табели међувикија.",
- "interwiki_editerror": "Префикс \"$1\" не може бити измењен у табели међувикија.\nВероватно затшо што не постоји.",
- "interwiki-badprefix": "Задати међувики префикс \"$1\" садржи недозвољене знакове",
+ "interwiki_edited": "Префикс „$1“ је успешно измењен у табели међувикија.",
+ "interwiki_editerror": "Префикс „$1“ не може бити измењен у табели међувикија.\nВероватно затшо што не постоји.",
+ "interwiki-badprefix": "Задати међувики префикс „$1“ садржи недозвољене знакове",
"log-name-interwiki": "Дневник табеле међувикија",
"log-description-interwiki": "Ово је историја измена [[Special:Interwiki|табеле међувикија]].",
- "right-interwiki": "уређивање међувикија"
+ "right-interwiki": "уређивање међувикија",
+ "interwiki-links": "Међувики префикси"
}
diff --git a/extensions/Interwiki/i18n/sr-el.json b/extensions/Interwiki/i18n/sr-el.json
index 5056e951..6bab5d1f 100644
--- a/extensions/Interwiki/i18n/sr-el.json
+++ b/extensions/Interwiki/i18n/sr-el.json
@@ -10,8 +10,7 @@
"interwiki-title-norights": "Pregledaj podatke o međuvikiju",
"interwiki-desc": "Dodaje [[Special:Interwiki|specijalnu stranu]] za pregled i izmenu tabele međuvikija",
"interwiki_intro": "Ovo je pregled tabele međuvikija.",
- "interwiki-legend-show": "Prikaži legendu",
- "interwiki-legend-hide": "Sakrij legendu",
+ "interwiki-legend-label": "Legenda",
"interwiki_prefix": "Prefiks",
"interwiki-prefix-label": "Prefiks:",
"interwiki_prefix_intro": "Međuviki prefiks koji će biti korišćen u <code>[<nowiki />[prefix:<em>pagename</em>]]</code> vikitekst sintaksi.",
@@ -19,27 +18,28 @@
"interwiki-url-label": "Adresa:",
"interwiki_local": "Napred",
"interwiki-local-label": "Napred:",
- "interwiki_trans_intro": "Ako je korišćena vikitekst sintaksa <code>{<nowiki />{prefix:<em>pagename</em>}}</code>, onda:",
"interwiki_1": "da",
"interwiki_0": "ne",
"interwiki_error": "Greška: tabela međuvikija je prazna, ili nešto drugo nije u redu.",
"interwiki_edit": "Izmeni",
"interwiki_reasonfield": "Razlog:",
"interwiki_delquestion": "Brišem „$1”",
- "interwiki_deleting": "Vi brišete prefiks \"$1\".",
- "interwiki_deleted": "Prefiks \"$1\" je uspešno obrisan iz tabele međuvikija.",
- "interwiki_delfailed": "Prefiks \"$1\" nije mogao biti obrisan iz tabele međuvikija.",
+ "interwiki_deleting": "Vi brišete prefiks „$1“.",
+ "interwiki_deleted": "Prefiks „$1“ je uspešno obrisan iz tabele međuvikija.",
+ "interwiki_delfailed": "Prefiks „$1“ nije mogao biti obrisan iz tabele međuvikija.",
+ "interwiki-logtext": "Vidi dnevnik",
"interwiki_addtext": "Dodaj interviki prefiks",
"interwiki_addintro": "Vi dodajete jedan interviki prefiks.\nImajte na umu da on ne može da sadrži razmake ( ), dvotačku (:), amersand (&), ili znak jednakosti (=).",
"interwiki_addbutton": "Dodaj",
- "interwiki_added": "Prefiks \"$1\" je uspešno dodat u tabelu međuvikija.",
- "interwiki_addfailed": "Prefiks \"$1\" nije mogao biti dodat u tabelu međuvikija.\nVerovatno već postoji u njoj.",
+ "interwiki_added": "Prefiks „$1“ je uspešno dodat u tabelu međuvikija.",
+ "interwiki_addfailed": "Prefiks „$1“ nije mogao biti dodat u tabelu međuvikija.\nVerovatno već postoji u njoj.",
"interwiki_edittext": "Menjanje međuviki prefiksa",
"interwiki_editintro": "Vi menjate jedan međuviki prefiks.\nImajte na umu da može da ošteti postojeće međuviki veze.",
- "interwiki_edited": "Prefiks \"$1\" je uspešno izmenjen u tabeli međuvikija.",
- "interwiki_editerror": "Prefiks \"$1\" ne može biti izmenjen u tabeli međuvikija.\nVerovatno zatšo što ne postoji.",
- "interwiki-badprefix": "Zadati međuviki prefiks \"$1\" sadrži nedozvoljene znakove",
+ "interwiki_edited": "Prefiks „$1“ je uspešno izmenjen u tabeli međuvikija.",
+ "interwiki_editerror": "Prefiks „$1“ ne može biti izmenjen u tabeli međuvikija.\nVerovatno zatšo što ne postoji.",
+ "interwiki-badprefix": "Zadati međuviki prefiks „$1“ sadrži nedozvoljene znakove",
"log-name-interwiki": "Dnevnik tabele međuvikija",
"log-description-interwiki": "Ovo je istorija izmena [[Special:Interwiki|tabele međuvikija]].",
- "right-interwiki": "uređivanje međuvikija"
+ "right-interwiki": "uređivanje međuvikija",
+ "interwiki-links": "Međuviki prefiksi"
}
diff --git a/extensions/Interwiki/i18n/sv.json b/extensions/Interwiki/i18n/sv.json
index 9633c5c2..76ae23e3 100644
--- a/extensions/Interwiki/i18n/sv.json
+++ b/extensions/Interwiki/i18n/sv.json
@@ -17,7 +17,8 @@
"interwiki": "Visa och redigera interwiki-data",
"interwiki-title-norights": "Visa interwiki-data",
"interwiki-desc": "Lägger till en [[Special:Interwiki|specialsida]] för att visa och ändra interwikitabellen",
- "interwiki_intro": "Det här är en överblick över interwiki-tabellen.",
+ "interwiki_intro": "Det här är en överblick över interwiki-tabellen, vilken definierar de prefix som används för att snabbt länka till olika wikis och andra externa webbplatser. För rekommenderad användning, se [//www.mediawiki.org/wiki/Extension:Interwiki manualen på MediaWiki.org].",
+ "interwiki-legend-label": "Förklaring",
"interwiki_prefix": "Prefix",
"interwiki-prefix-label": "Prefix:",
"interwiki_prefix_intro": "Interwiki-prefix avsedda att användas i <code>[<nowiki />[prefix:<em>pagename</em>]]</code>-wikisyntax.",
@@ -67,5 +68,5 @@
"interwiki-local-description": "Dessa prefix existerar lokalt. Eventuella dubbletter med den globala konfigurationen åsidosätter den globala definitionen.",
"interwiki-links": "Interwiki-prefix",
"interwiki-language-links": "Interspråk-prefix",
- "interwiki-language-description": "Dessa prefix matchar definierade språkkoder, och används för att skapa \"på andra språk\"-listan när den läggs till på en sida."
+ "interwiki-language-description": "Dessa prefix matchar definierade språkkoder, och används för att skapa \"{{int:otherlanguages}}\"-listan när den läggs till på en sida."
}
diff --git a/extensions/Interwiki/i18n/te.json b/extensions/Interwiki/i18n/te.json
index 0d4e0888..0435045a 100644
--- a/extensions/Interwiki/i18n/te.json
+++ b/extensions/Interwiki/i18n/te.json
@@ -13,7 +13,6 @@
"interwiki-prefix-label": "ఉపసర్గ:",
"interwiki_local": "ముందుకు",
"interwiki-local-label": "ముందుకు:",
- "interwiki_intro_footer": "అంతర్వికీ పట్టిక గురించిన మరింత సమాచారాన్ని [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org]లో చూడండి.\nఅంతర్వికీ పట్టికకి జరిగిన [[Special:Log/interwiki|మార్పుల యొక్క చిట్టా]] కూడా ఉంది.",
"interwiki_1": "అవును",
"interwiki_0": "కాదు",
"interwiki_error": "లోపం: అంతర్వికీ పట్టిక ఖాళీగా ఉంది, లేదా మరేదో తప్పు జరిగింది.",
diff --git a/extensions/Interwiki/i18n/tl.json b/extensions/Interwiki/i18n/tl.json
index fde74e8d..f384a2a9 100644
--- a/extensions/Interwiki/i18n/tl.json
+++ b/extensions/Interwiki/i18n/tl.json
@@ -8,8 +8,6 @@
"interwiki-title-norights": "Tingnan ang datong pangugnayang-wiki (''interwiki'')",
"interwiki-desc": "Nagdaragdag ng isang [[Special:Interwiki|natatanging pahina]] upang matingnan at mabago ang tablang pang-ugnayang wiki",
"interwiki_intro": "Isa itong paglalarawan ng tabla ng ugnayang-wiki (''interwiki'').",
- "interwiki-legend-show": "Ipakita ang alamat",
- "interwiki-legend-hide": "Ikubli ang alamat",
"interwiki_prefix": "Unlapi",
"interwiki-prefix-label": "Unlapi:",
"interwiki_prefix_intro": "Unlapi ng ugnayang-wiki na gagamitin sa loob ng palaugnayang <code>[<nowiki />[prefix:<em>pagename</em>]]</code> ng teksto ng wiki.",
@@ -18,15 +16,12 @@
"interwiki_url_intro": "Suleras para sa mga URL. Ang tagpaghawak ng pook na $1 ay mapapalitan ng <em>pagename</em> ng teksto ng wiki, kapag ginamit ang nabanggit sa itaas na palaugnayang teksto ng wiki.",
"interwiki_local": "Isulong",
"interwiki-local-label": "Pasulong:",
- "interwiki_local_intro": "Ang isang kahilingang http sa pampook na wiki na may ganitong unlapi ng ugnayang-wiki na nasa loob ng URL ay:",
"interwiki_local_0_intro": "huwag tanggapin, karaniwang hinahadlangan ng \"hindi natagpuan ang pahina\",",
"interwiki_local_1_intro": "itinuro papunta sa pinupukol na ibinigay na URL sa loob ng mga kahulugan ng kawing ng ugnayang-wiki (iyong mga itinuturing na katulad ng mga sanggunian sa pampook na mga pahina)",
"interwiki_trans": "Paglilipat-sama (transklusyon)",
"interwiki-trans-label": "Ilipat-sama:",
- "interwiki_trans_intro": "Kapag ginamit ang palaugnayang <code>{<nowiki />{prefix:<em>pagename</em>}}</code> ng teksto ng wiki, kung gayon:",
"interwiki_trans_1_intro": "pahintulutan ang paglilipat-sama mula sa dayuhang wiki, kung pangkalahatang pinapayagan sa wiking ito ang paglilipat-sama",
"interwiki_trans_0_intro": "huwag itong pahintulutan, sa halip maghanap ng isang pahinang nasa loob ng espasyo ng pangalan ng suleras.",
- "interwiki_intro_footer": "Tingnan ang [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] para sa mas marami pang mga kabatiran hinggil sa tabla ng ugnayang-wiki.\nMayroong isang [[Special:Log/interwiki|talaan ng mga pagbabago]] sa tabla ng ugnayang-wiki.",
"interwiki_1": "oo",
"interwiki_0": "hindi",
"interwiki_error": "Kamalian: Walang laman ang tablang pangugnayang-wiki (''interwiki''), o may iba pang bagay na nagkaroon ng kamalian/suliranin.",
diff --git a/extensions/Interwiki/i18n/tr.json b/extensions/Interwiki/i18n/tr.json
index bb267ed6..1f3543d0 100644
--- a/extensions/Interwiki/i18n/tr.json
+++ b/extensions/Interwiki/i18n/tr.json
@@ -5,13 +5,15 @@
"Joseph",
"Karduelis",
"Suelnur",
- "Vito Genovese"
+ "Vito Genovese",
+ "Violetanka"
]
},
"interwiki": "Vikilerarası veriyi gör ve değiştir",
"interwiki-title-norights": "Vikilerarası veriyi gör",
"interwiki-desc": "Vikilerarası tabloyu görmek ve değiştirmek için [[Special:Interwiki|özel bir sayfa]] ekler",
- "interwiki_intro": "Bu vikilerarası tabloya genel bir bakıştır.",
+ "interwiki_intro": "Bu vikilerarası tabloya genel bir bakıştır ve farklı vikiler ile diğer sitelere bağlantı sağlamak amacıyla önceden belirtilmiş kısayolları tanımlar. Tavsiye edilen kullanım için, bkz.[//www.mediawiki.org/wiki/Extension:Interwiki the manual on MediaWiki.org].",
+ "interwiki-legend-label": "Rehber",
"interwiki_prefix": "Önek",
"interwiki-prefix-label": "Önek:",
"interwiki_local": "Yönlendir",
@@ -24,7 +26,8 @@
"interwiki_edit": "Değiştir",
"interwiki_reasonfield": "Neden:",
"interwiki_delquestion": "''$1\" siliniyor",
- "interwiki_addtext": "Bir interviki öneki ekler",
+ "interwiki-logtext": "Günlükleri görüntüleyin",
+ "interwiki_addtext": "Bir interviki ve önceden tanımlı dil ekle",
"interwiki_addbutton": "Ekle",
"right-interwiki": "İnterviki verilerini düzenler",
"action-interwiki": "bu interviki girdisini değiştir"
diff --git a/extensions/Interwiki/i18n/uk.json b/extensions/Interwiki/i18n/uk.json
index d238bee8..5c3958a7 100644
--- a/extensions/Interwiki/i18n/uk.json
+++ b/extensions/Interwiki/i18n/uk.json
@@ -9,30 +9,28 @@
"Microcell",
"Prima klasy4na",
"VolodymyrF",
- "Vox"
+ "Vox",
+ "Olion",
+ "Ата"
]
},
"interwiki": "Перегляд і редагування даних інтервікі",
"interwiki-title-norights": "Переглянути дані інтервікі",
"interwiki-desc": "Додає [[Special:Interwiki|спеціальну сторінку]] для перегляду і редагування таблиці інтервікі",
- "interwiki_intro": "Це огляд таблиці інтервікі.",
- "interwiki-legend-show": "Показати легенду",
- "interwiki-legend-hide": "Приховати легенду",
+ "interwiki_intro": "Це огляд таблиці БД interwiki, в якій визначено префікси для коротких посилань на різні вікі та інші сторонні сайти. Рекомендації із застосування можна побачити в [//www.mediawiki.org/wiki/Extension:Interwiki документації на MediaWiki.org].",
+ "interwiki-legend-label": "Легенда",
"interwiki_prefix": "Префікс",
"interwiki-prefix-label": "Префікс:",
"interwiki_prefix_intro": "Префікс інтервікі для використання у синтаксисі вікі-тексту: <code>[<nowiki />[префікс:<em>назва сторінки</em>]]</code>.",
- "interwiki_url_intro": "Шаблон для URL-адрес. Замість $1 буде підставлено <em>назву сторінки</em> вікітексту, якщо використовується вищезазначений синтаксис вікітексту.",
+ "interwiki_url_intro": "Шаблон для URL-адрес. Замість $1 буде підставлено <em>назву сторінки</em> в <code>[<nowiki />[prefix:<em>назва сторінки</em>]]</code>.",
"interwiki_local": "Відсилання",
"interwiki-local-label": "Відсилання:",
- "interwiki_local_intro": "HTTP-запит у місцеву вікі з інтервікі-префіксом в URL:",
- "interwiki_local_0_intro": "не допускається, як правило, блокується повідомленням \"{{int:badtitle}}\"",
- "interwiki_local_1_intro": "перенаправляє на цільовий URL, вказаний у визначенні інтервікі-посилання (тобто, розглядається як посилання на місцевих сторінках)",
+ "interwiki_local_0_intro": "Зовнішні запити HTTP до локальної вікі з використанням цього interwiki-префіксу в URL-адресі приведуть до помилки \"{{int:badtitle}}\".",
+ "interwiki_local_1_intro": "Зовнішні запити HTTP до локальної вікі з використанням цього interwiki-префіксу в URL-адресі буде перенаправлено на цільову URL-адресу interwiki (тобто оброблено так само, як посилання на локальні сторінки).",
"interwiki_trans": "Включення",
"interwiki-trans-label": "Включення:",
- "interwiki_trans_intro": "Якщо використовується синтаксис вікітексту <code>{<nowiki />{префікс:<em>назва сторінки</em>}}</code>, то:",
- "interwiki_trans_1_intro": "дозволяє включення з інших вікі, якщо інтервікі-включення дозволені в цій вікі,",
- "interwiki_trans_0_intro": "не дозволяє включення, натомість шукається сторінка у просторі імен шаблонів.",
- "interwiki_intro_footer": "Докладніше про таблицю інтервікі можна подивитись на [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org].\nІснує також [[Special:Log/interwiki|журнал змін]] таблиці інтервікі.",
+ "interwiki_trans_1_intro": "Якщо використано синтаксис вікітексту <code>{<nowiki />{prefix:<em>назва сторінки</em>}}</code>, дозволити включення шаблонів/сторінок з інших вікі, якщо інтервікі-включення взагалі дозволено в налаштуванні [//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding жахливі включення].",
+ "interwiki_trans_0_intro": "Не дозволяти конструкції <code>{<nowiki />{prefix:<em>назва сторінки</em>}}</code> включення сторонніх шаблонів/сторінок, натомість шукається сторінка у просторі імен шаблону.",
"interwiki_1": "так",
"interwiki_0": "ні",
"interwiki_error": "Помилка: таблиця інтервікі порожня або щось іще пішло не так.",
@@ -43,7 +41,9 @@
"interwiki_deleting": "Ви видаляєте префікс \"$1\".",
"interwiki_deleted": "Префікс \"$1\" було успішно видалено з таблиці інтервікі.",
"interwiki_delfailed": "Префікс \"$1\" не може бути видалений з таблиці інтервікі.",
- "interwiki_addtext": "Додати префікс інтервікі",
+ "interwiki-logtext": "Переглянути журнал",
+ "interwiki_addtext": "Додати префікс інтервікі або мови",
+ "interwiki-addtext-local": "Додати локальний префікс інтервікі або мови",
"interwiki_addintro": "Ви додаєте новий префікс інтервікі.\nПам'ятайте, що він не може містити пробіли ( ), двокрапки (:), амперсанди (&) або знаки рівності (=).",
"interwiki_addbutton": "Додати",
"interwiki_added": "Префікс \"$1\" було успішно додано до таблиці інтервікі.",
@@ -60,6 +60,13 @@
"logentry-interwiki-iw_edit": "$1 {{GENDER:$2|змінив|змінила}} префікс «$4» ($5) (trans: $6; local: $7) в таблиці інтервікі",
"logentry-interwiki-iw_delete": "$1 {{GENDER:$2|вилучив|вилучила}} префікс «$4» з таблиці інтервікі",
"log-description-interwiki": "Це журнал змін [[Special:Interwiki|таблиці інтервікі]].",
- "right-interwiki": "Редагувати дані інтервікі",
- "action-interwiki": "зміну цього запису інтервікі"
+ "right-interwiki": "редагування даних інтервікі",
+ "action-interwiki": "зміну цього запису інтервікі",
+ "interwiki-global-links": "Глобальні префікси інтервікі",
+ "interwiki-global-description": "Ці префікси успадковано від глобальної конфігурації, і їх можна змінити лише на основній вікі.",
+ "interwiki-local-links": "Локальні інтервікі-префікси",
+ "interwiki-local-description": "Ці префікси існують локально. Локальні дублікати префіксів глобальної конфігурації мають вищий пріоритет.",
+ "interwiki-links": "Інтервікі-префікси",
+ "interwiki-language-links": "Міжмовні префікси",
+ "interwiki-language-description": "Ці префікси збігаються з відомими кодами мов і використовуватимуться для створення списку «{{int:otherlanguages}}» при додаванні на сторінку."
}
diff --git a/extensions/Interwiki/i18n/ur.json b/extensions/Interwiki/i18n/ur.json
index d28f28bd..fe1902bd 100644
--- a/extensions/Interwiki/i18n/ur.json
+++ b/extensions/Interwiki/i18n/ur.json
@@ -5,8 +5,6 @@
"පසිඳු කාවින්ද"
]
},
- "interwiki-legend-show": "لیجنڈ دکھائیں",
- "interwiki-legend-hide": "لیجنڈ چھپائیں",
"interwiki_prefix": "سابقے",
"interwiki-prefix-label": "سابقے",
"interwiki_1": "جی ہاں",
diff --git a/extensions/Interwiki/i18n/vi.json b/extensions/Interwiki/i18n/vi.json
index dbda5aa3..b009e5b2 100644
--- a/extensions/Interwiki/i18n/vi.json
+++ b/extensions/Interwiki/i18n/vi.json
@@ -9,23 +9,18 @@
"interwiki-title-norights": "Xem dữ liệu liên wiki",
"interwiki-desc": "Thêm một [[Special:Interwiki|trang đặc biệt]] để xem sửa đổi bảng liên wiki",
"interwiki_intro": "Đây là nội dung của bảng liên wiki.",
- "interwiki-legend-show": "Xem chú giải",
- "interwiki-legend-hide": "Ẩn chú giải",
"interwiki_prefix": "Tiền tố",
"interwiki-prefix-label": "Tiền tố:",
"interwiki_prefix_intro": "Tiền tố liên wiki dùng trong cú pháp wiki <code>[<nowiki />[tiền tố:<em>tên trang</em>]]</code>.",
"interwiki_url_intro": "Mẫu địa chỉ URL. Dấu hiệu $1 được thay bằng <em>tiền tố</em> khi nào sử dụng cú pháp ở trên.",
"interwiki_local": "Chuyển tiếp",
"interwiki-local-label": "Chuyển tiếp:",
- "interwiki_local_intro": "Khi nào truy cập wiki bộ phận dùng tiền tố liên wiki trong URL, yêu cầu HTTP được:",
"interwiki_local_0_intro": "bác bỏ, thường thông báo lỗi “{{int:badtitle}}” thay thế.",
"interwiki_local_1_intro": "đổi hướng tới URL đích trong định nghĩa liên kết liên wiki, coi như là URL dẫn đến trang địa phương.",
"interwiki_trans": "Nhúng bản mẫu",
"interwiki-trans-label": "Nhúng bản mẫu:",
- "interwiki_trans_intro": "Khi nào sử dụng cú pháp wiki <code>{<nowiki />{tiền tố:<em>tên trang</em>}}</code>:",
"interwiki_trans_1_intro": "cho phép nhúng trang từ wiki bên ngoài, nếu wiki này cho phép nhúng trang liên wiki nói chung",
"interwiki_trans_0_intro": "thay vì cho phép nhúng liên wiki, tìm kiếm trang trong không gian tên bản mẫu địa phương.",
- "interwiki_intro_footer": "Xem [//www.mediawiki.org/wiki/Manual:Interwiki_table?uselang=vi MediaWiki.org] để biết thêm thông tin về bảng liên wiki.\nCó [[Special:Log/interwiki|nhật trình các thay đổi]] tại bảng liên wiki.",
"interwiki_1": "có",
"interwiki_0": "không",
"interwiki_error": "LỖi: Bảng liên wiki hiện đang trống, hoặc có vấn đề gì đó đã xảy ra.",
diff --git a/extensions/Interwiki/i18n/zh-hans.json b/extensions/Interwiki/i18n/zh-hans.json
index cecb7ad1..02da9a66 100644
--- a/extensions/Interwiki/i18n/zh-hans.json
+++ b/extensions/Interwiki/i18n/zh-hans.json
@@ -13,7 +13,8 @@
"Xiaomingyan",
"Yfdyh000",
"Mywood",
- "Impersonator 1"
+ "Impersonator 1",
+ "范"
]
},
"interwiki": "查看和编辑跨wiki数据",
@@ -31,14 +32,14 @@
"interwiki_local_1_intro": "使用此跨wiki前缀到本地wiki的外部HTTP请求将重定向到跨wiki链接的目标URL(即对待本地页面的链接)。",
"interwiki_trans": "嵌入",
"interwiki-trans-label": "嵌入:",
- "interwiki_trans_1_intro": "如果wiki文本语法<code>{<nowiki />{prefix:<em>pagename</em>}}</code>被使用,就允许嵌入自外部wiki的模板/页面,如果嵌入的跨wiki链接被普遍允许([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion])。",
+ "interwiki_trans_1_intro": "如果(一般情况下均)启用了跨wiki 转发,在使用了wiki 语法<code>{<nowiki />{prefix:<em>pagename</em>}}</code>的情况下,就允许嵌入自外部wiki 的模板/页面([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion])。",
"interwiki_trans_0_intro": "不要允许<code>{<nowiki />{prefix:<em>pagename</em>}}</code>以嵌入无关模板/页面,应看作是模板名字空间的本地页面。",
"interwiki_1": "是",
"interwiki_0": "否",
"interwiki_error": "错误: 跨wiki表为空,或是发生其它错误。",
"interwiki-cached": "跨维基数据是缓存的。缓存不能被修改。",
"interwiki_edit": "编辑",
- "interwiki_reasonfield": "理由:",
+ "interwiki_reasonfield": "原因:",
"interwiki_delquestion": "正在删除“$1”",
"interwiki_deleting": "您正在删除前缀“$1”。",
"interwiki_deleted": "已成功地从跨wiki表中删除前缀“$1”。",
@@ -47,7 +48,7 @@
"interwiki_addtext": "添加一个跨wiki或语言前缀",
"interwiki-addtext-local": "添加一个本地跨wiki或语言前缀",
"interwiki_addintro": "您现在加入一个新的跨wiki前缀。\n要记住它不可以包含空格 ( )、冒号 (:)、连字号 (&),或等号 (=)。",
- "interwiki_addbutton": "增加",
+ "interwiki_addbutton": "添加",
"interwiki_added": "前缀 \"$1\" 已经成功地加入到跨wiki表。",
"interwiki_addfailed": "前缀 \"$1\" 不能加入到跨wiki表。\n可能已经在跨wiki表中存在。",
"interwiki_edittext": "修改一个跨wiki前缀",
@@ -65,9 +66,10 @@
"right-interwiki": "编辑跨wiki数据",
"action-interwiki": "更改该跨维基条目",
"interwiki-global-links": "全域跨wiki前缀",
+ "interwiki-global-description": "这些前缀继承于全域配置,并只能在原始wiki编辑。",
"interwiki-local-links": "本地跨wiki前缀",
"interwiki-local-description": "这些前缀于本地存在。任何与全域配置重复的内容会覆盖全域定义。",
"interwiki-links": "跨wiki前缀",
"interwiki-language-links": "跨语言前缀",
- "interwiki-language-description": "这些前缀匹配定义的语言代码,并在加入页面时用于创建“其他语言”列表。"
+ "interwiki-language-description": "这些前缀匹配定义的语言代码,并在加入页面时用于创建“{{int:otherlanguages}}”列表。"
}
diff --git a/extensions/Interwiki/i18n/zh-hant.json b/extensions/Interwiki/i18n/zh-hant.json
index f9e38548..4691e6a4 100644
--- a/extensions/Interwiki/i18n/zh-hant.json
+++ b/extensions/Interwiki/i18n/zh-hant.json
@@ -10,55 +10,63 @@
"Oapbtommy",
"Waihorace",
"Wrightbus",
- "Cwlin0416"
+ "Cwlin0416",
+ "LNDDYL"
]
},
- "interwiki": "檢視並編輯 Interwiki 資料",
- "interwiki-title-norights": "檢視 Interwiki 資料",
- "interwiki-desc": "加入用來檢視和編輯 Interwiki 連結表的 [[Special:Interwiki|特殊頁面]]",
- "interwiki_intro": "此頁為 Interwiki 連結表一覽。",
- "interwiki-legend-show": "顯示說明",
- "interwiki-legend-hide": "隱藏說明",
+ "interwiki": "檢視並編輯跨 Wiki 資料",
+ "interwiki-title-norights": "檢視跨 Wiki 資料",
+ "interwiki-desc": "加入用來檢視和編輯跨 Wiki 連結表的 [[Special:Interwiki|特殊頁面]]",
+ "interwiki_intro": "此頁為跨 Wiki 資料表一覽,資料表中定義了可用來快速連結至其他 Wiki 與其他外部網站的字首。 使用建議請參考 [//www.mediawiki.org/wiki/Extension:Interwiki MediaWiki.org 上的操作手冊]。",
+ "interwiki-legend-label": "說明",
"interwiki_prefix": "字首",
"interwiki-prefix-label": "字首:",
- "interwiki_prefix_intro": "Interwiki 字首,語法為 <code>[<nowiki />[prefix:<em>pagename</em>]]</code>。",
- "interwiki_url_intro": "樣版的 URL。當使用上述語法時,提示文字 $1 會替換為 <code>[<nowiki />[prefix:<em>pagename</em>]]</code> 中\n的 <em>pagename</em>。",
+ "interwiki_prefix_intro": "跨 Wiki 字首,可用 WikiText 語法表示 <code>[<nowiki />[prefix:<em>pagename</em>]]</code>。",
+ "interwiki_url_intro": "模板的 URL。當使用上述語法時,提示文字 $1 會替換為 <code>[<nowiki />[prefix:<em>pagename</em>]]</code> 中\n的 <em>pagename</em>。",
"interwiki_local": "存轉",
"interwiki-local-label": "存轉:",
- "interwiki_local_0_intro": "外部 HTTP 在 URL 中使用此 Interwiki 字首請求本地 Wiki 會造成 \"{{int:badtitle}}\" 錯誤頁面。",
- "interwiki_local_1_intro": "在本站開啟 Interwiki 定義的連結目標 URL (如同進入本地的頁面)。",
+ "interwiki_local_0_intro": "外部 HTTP 請求本地 Wiki 在 URL 中使用此跨 Wiki 字首會顯示 \"{{int:badtitle}}\" 錯誤頁面。",
+ "interwiki_local_1_intro": "外部 HTTP 請求本地 Wiki 在 URL 中使用此跨 Wiki 字首會被重新導向至跨 Wiki 的目標 URL (即當做本地頁面開啟)。",
"interwiki_trans": "引用",
"interwiki-trans-label": "引用:",
- "interwiki_trans_1_intro": "允許引用外部 Wiki,若在此 Wiki 已開啟 Interwiki 引用的權限。",
- "interwiki_trans_0_intro": "不允許引用外部 Wiki,會直接查詢樣板命名空間是否有該頁面。",
- "interwiki_intro_footer": "請參考 [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] 取得更多有關於 Interwiki 資料表的詳細資訊。\nInterwiki 連結表的 [[Special:Log/interwiki|變更日誌]]。",
+ "interwiki_trans_1_intro": "若使用了 <code>{<nowiki />{prefix:<em>pagename</em>}}</code> Wikitext 語法且引用功能已開啟,則可允許引用來自外部 wiki 的模板/頁面 ([//www.mediawiki.org/wiki/Manual:$wgEnableScaryTranscluding scary transclusion])。",
+ "interwiki_trans_0_intro": "不允許 <code>{<nowiki />{prefix:<em>pagename</em>}}</code> 引用外部的模板/頁面,改由模板命名空間中查詢本地頁面。",
"interwiki_1": "是",
"interwiki_0": "否",
- "interwiki_error": "錯誤:Interwiki 連結表無資料,或者發生其它錯誤。",
- "interwiki-cached": "已快取 Interwiki 資料,無法修改快取資料。",
+ "interwiki_error": "錯誤:跨 Wiki 資料表無資料,或者發生其它錯誤。",
+ "interwiki-cached": "已快取跨 Wiki 資料,無法修改快取資料。",
"interwiki_edit": "編輯",
"interwiki_reasonfield": "原因:",
"interwiki_delquestion": "正在刪除 \"$1\"",
"interwiki_deleting": "您正在刪除字首 \"$1\"。",
- "interwiki_deleted": "已成功刪除在 Interwiki 連結表中的字首 \"$1\"。",
- "interwiki_delfailed": "無法刪除 Interwiki 連結表中的字首 \"$1\"。",
- "interwiki_addtext": "新增一個 Interwiki 字首",
- "interwiki_addintro": "您正新增一個 Interwiki 字首。\n字首不可包含空白 ( )、冒號 (:)、連字號 (&) 或等號 (=)。",
+ "interwiki_deleted": "已成功刪除在跨 Wiki 資料表中的字首 \"$1\"。",
+ "interwiki_delfailed": "無法刪除跨 Wiki 資料表中的字首 \"$1\"。",
+ "interwiki-logtext": "檢視日誌",
+ "interwiki_addtext": "新增一個跨 Wiki 或語言字首",
+ "interwiki-addtext-local": "新增本地跨 Wiki 或語言字首",
+ "interwiki_addintro": "您正新增一個跨 Wiki 字首。\n字首不可包含空白 ( )、冒號 (:)、連字號 (&) 或等號 (=)。",
"interwiki_addbutton": "新增",
- "interwiki_added": "已經成功加入字首 \"$1\" 到 Interwiki 連結表。",
- "interwiki_addfailed": "無法新增字首 \"$1\" 到 Interwiki 連結表。\n可能已在 Interwiki 連結表中存在。",
- "interwiki_edittext": "正在編輯 Interwiki 字首",
- "interwiki_editintro": "您現正編輯 Interwiki 字首。\n注意,這個動作會中斷現有的連結。",
- "interwiki_edited": "已成功修改在 Interwiki 連結表中的字首 \"$1\"。",
- "interwiki_editerror": "無法修改 Interwiki 連結表中的字首 \"$1\"。\n可能並不存在。",
- "interwiki-badprefix": "指定的 Interwiki 字首 \"$1\" 中包含了無效的字元",
+ "interwiki_added": "已經成功加入字首 \"$1\" 到跨 Wiki 資料表。",
+ "interwiki_addfailed": "無法新增字首 \"$1\" 到跨 Wiki 資料表。\n可能已存在於跨 Wiki 資料表中。",
+ "interwiki_edittext": "正在編輯跨 Wiki 字首",
+ "interwiki_editintro": "您現正編輯跨 Wiki 字首。\n注意,這個動作會中斷現有的連結。",
+ "interwiki_edited": "已成功修改在 Interwiki 資料表中的字首 \"$1\"。",
+ "interwiki_editerror": "無法修改跨 Wiki 資料表中的字首 \"$1\"。\n可能並不存在。",
+ "interwiki-badprefix": "指定的跨 Wiki 字首 \"$1\" 中包含了無效的字元",
"interwiki-submit-empty": "字首與 URL 不可空白。",
"interwiki-submit-invalidurl": "URL 位址的通訊協定無效。",
- "log-name-interwiki": "Interwiki 連結表日誌",
- "logentry-interwiki-iw_add": "$1 {{GENDER:$2|已新增}}字首 \"$4\" ($5) (引用:$6;存轉:$7) 到 Interwiki 連結表",
- "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|已修改}}在 Interwiki 連結表中的字首 \"$4\" ($5) (引用:$6;存轉:$7)",
- "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|已移除}}在 Interwiki 連結表中的字首 \"$4\"",
- "log-description-interwiki": "此頁面顯示 [[Special:Interwiki|Interwiki 連結表]] 的修改日誌。",
- "right-interwiki": "編輯 Interwiki 資料",
- "action-interwiki": "更改此 Interwiki 項目"
+ "log-name-interwiki": "跨 Wiki 資料表日誌",
+ "logentry-interwiki-iw_add": "$1 {{GENDER:$2|已新增}}字首 \"$4\" ($5) (嵌入:$6;本地:$7) 到跨 Wiki 資料表",
+ "logentry-interwiki-iw_edit": "$1 {{GENDER:$2|已修改}}在跨 Wiki 資料表中的字首 \"$4\" ($5) (引用:$6;存轉:$7)",
+ "logentry-interwiki-iw_delete": "$1 {{GENDER:$2|已移除}}在跨 Wiki 資料表中的字首 \"$4\"",
+ "log-description-interwiki": "此頁面顯示 [[Special:Interwiki|跨 Wiki 資料表]] 的修改日誌。",
+ "right-interwiki": "編輯跨 Wiki 資料",
+ "action-interwiki": "更改此跨 Wiki 項目",
+ "interwiki-global-links": "全域跨 Wiki 字首",
+ "interwiki-global-description": "這些字首均繼承自全域設定,且僅可於來源 Wiki 編輯。",
+ "interwiki-local-links": "本地跨 Wiki 字首",
+ "interwiki-local-description": "這些字首均存在於本地,任何與全域設定重複的部份會使用全域的設定值覆蓋。",
+ "interwiki-links": "跨 Wiki 字首",
+ "interwiki-language-links": "跨語言字首",
+ "interwiki-language-description": "這些字首符合已定義的語言代碼,當加入至頁面時會被用來建立 \"{{int:otherlanguages}}\" 清單。"
}
diff --git a/extensions/LocalisationUpdate/LocalisationUpdate.class.php b/extensions/LocalisationUpdate/LocalisationUpdate.class.php
index 349c35f0..d4413ed7 100644
--- a/extensions/LocalisationUpdate/LocalisationUpdate.class.php
+++ b/extensions/LocalisationUpdate/LocalisationUpdate.class.php
@@ -78,4 +78,22 @@ class LocalisationUpdate {
public static function getFilename( $language ) {
return "l10nupdate-$language.json";
}
+
+ /**
+ * Hook: UnitTestsList
+ */
+ public static function setupUnitTests( array &$files ) {
+ $dir = __DIR__ . '/tests/phpunit';
+ $directoryIterator = new RecursiveDirectoryIterator( $dir );
+ $fileIterator = new RecursiveIteratorIterator( $directoryIterator );
+
+ /// @var SplFileInfo $fileInfo
+ foreach ( $fileIterator as $fileInfo ) {
+ if ( substr( $fileInfo->getFilename(), -8 ) === 'Test.php' ) {
+ $files[] = $fileInfo->getPathname();
+ }
+ }
+
+ return true;
+ }
}
diff --git a/extensions/LocalisationUpdate/LocalisationUpdate.php b/extensions/LocalisationUpdate/LocalisationUpdate.php
index 53aa5adc..6548a3c6 100644
--- a/extensions/LocalisationUpdate/LocalisationUpdate.php
+++ b/extensions/LocalisationUpdate/LocalisationUpdate.php
@@ -1,5 +1,19 @@
<?php
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'LocalisationUpdate' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['LocalisationUpdate'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for LocalisationUpdate extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+}
+/**
+ * Setup for pre-1.25 wikis. Make sure this is kept in sync with extension.json
+ */
+
/**
* Directory to store serialized cache files in. Defaults to $wgCacheDirectory.
* It's OK to share this directory among wikis as long as the wiki you run
@@ -23,9 +37,11 @@ $wgLocalisationUpdateRepository = 'github';
$wgLocalisationUpdateRepositories = array();
$wgLocalisationUpdateRepositories['github'] = array(
'mediawiki' =>
- 'https://raw.github.com/wikimedia/mediawiki-core/master/%PATH%',
+ 'https://raw.github.com/wikimedia/mediawiki/master/%PATH%',
'extension' =>
'https://raw.github.com/wikimedia/mediawiki-extensions-%NAME%/master/%PATH%',
+ 'skin' =>
+ 'https://raw.github.com/wikimedia/mediawiki-skins-%NAME%/master/%PATH%',
);
// Example for local filesystem configuration
@@ -34,6 +50,8 @@ $wgLocalisationUpdateRepositories['github'] = array(
# 'file:///resources/projects/mediawiki/master/%PATH%',
# 'extension' =>
# 'file:///resources/projects/mediawiki-extensions/extensions/%NAME%/%PATH%',
+# 'skin' =>
+# 'file:///resources/projects/mediawiki-skins/skins/%NAME%/%PATH%',
#);
$wgExtensionCredits['other'][] = array(
@@ -47,6 +65,7 @@ $wgExtensionCredits['other'][] = array(
$wgHooks['LocalisationCacheRecache'][] = 'LocalisationUpdate::onRecache';
$wgHooks['LocalisationCacheRecacheFallback'][] = 'LocalisationUpdate::onRecacheFallback';
+$GLOBALS['wgHooks']['UnitTestsList'][] = 'LocalisationUpdate::setupUnitTests';
$dir = __DIR__;
$wgMessagesDirs['LocalisationUpdate'] = __DIR__ . '/i18n';
diff --git a/extensions/LocalisationUpdate/extension.json b/extensions/LocalisationUpdate/extension.json
new file mode 100644
index 00000000..43262f09
--- /dev/null
+++ b/extensions/LocalisationUpdate/extension.json
@@ -0,0 +1,55 @@
+{
+ "@note": "This file must be kept in sync with LocalisationUpdate.php",
+ "name": "LocalisationUpdate",
+ "version": "1.3.0",
+ "author": [
+ "Tom Maaswinkel",
+ "Niklas Laxström",
+ "Roan Kattouw"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:LocalisationUpdate",
+ "descriptionmsg": "localisationupdate-desc",
+ "type": "other",
+ "MessagesDirs": {
+ "LocalisationUpdate": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "LocalisationUpdate": "LocalisationUpdate.class.php",
+ "LU_Updater": "Updater.php",
+ "QuickArrayReader": "QuickArrayReader.php",
+ "LU_Fetcher": "fetcher/Fetcher.php",
+ "LU_FetcherFactory": "fetcher/FetcherFactory.php",
+ "LU_FileSystemFetcher": "fetcher/FileSystemFetcher.php",
+ "LU_GitHubFetcher": "fetcher/GitHubFetcher.php",
+ "LU_HttpFetcher": "fetcher/HttpFetcher.php",
+ "LU_Finder": "finder/Finder.php",
+ "LU_JSONReader": "reader/JSONReader.php",
+ "LU_PHPReader": "reader/PHPReader.php",
+ "LU_Reader": "reader/Reader.php",
+ "LU_ReaderFactory": "reader/ReaderFactory.php"
+ },
+ "Hooks": {
+ "LocalisationCacheRecache": [
+ "LocalisationUpdate::onRecache"
+ ],
+ "LocalisationCacheRecacheFallback": [
+ "LocalisationUpdate::onRecacheFallback"
+ ],
+ "UnitTestsList": [
+ "LocalisationUpdate::setupUnitTests"
+ ]
+ },
+ "config": {
+ "LocalisationUpdateDirectory": false,
+ "LocalisationUpdateRepository": "github",
+ "LocalisationUpdateRepositories": {
+ "github": {
+ "mediawiki": "https://raw.github.com/wikimedia/mediawiki/master/%PATH%",
+ "extension": "https://raw.github.com/wikimedia/mediawiki-extensions-%NAME%/master/%PATH%",
+ "skin": "https://raw.github.com/wikimedia/mediawiki-skins-%NAME%/master/%PATH%"
+ }
+ }
+ }
+}
diff --git a/extensions/LocalisationUpdate/fetcher/GitHubFetcher.php b/extensions/LocalisationUpdate/fetcher/GitHubFetcher.php
index 00c9b6ca..5d25257a 100644
--- a/extensions/LocalisationUpdate/fetcher/GitHubFetcher.php
+++ b/extensions/LocalisationUpdate/fetcher/GitHubFetcher.php
@@ -21,7 +21,7 @@ class LU_GitHubFetcher extends LU_HttpFetcher {
$json = Http::get( "https://api.github.com/repos/{$m['org']}/{$m['repo']}/contents/{$m['path']}" );
if ( !$json ) {
- throw new MWException( "Unable to get directory listing for {$m['org']}/{$m['repo']}" );
+ throw new Exception( "Unable to get directory listing for {$m['org']}/{$m['repo']}" );
}
$files = array();
diff --git a/extensions/LocalisationUpdate/finder/Finder.php b/extensions/LocalisationUpdate/finder/Finder.php
index 5c598730..dc3a7f69 100644
--- a/extensions/LocalisationUpdate/finder/Finder.php
+++ b/extensions/LocalisationUpdate/finder/Finder.php
@@ -41,24 +41,34 @@ class LU_Finder {
unset( $this->php[$key] );
foreach ( (array)$value as $subkey => $subvalue ) {
- // This ignores magic, alias etc. non message files
+ // Mediawiki core files
$matches = array();
- $ok = preg_match( '~/extensions/(?P<name>[^/]+)/(?P<path>.*)$~', $subvalue, $matches );
- if ( !$ok ) {
+ if ( preg_match( '~/(?P<path>(?:includes|languages|resources)/.*)$~', $subvalue, $matches ) ) {
+ $components["$key-$subkey"] = array(
+ 'repo' => 'mediawiki',
+ 'orig' => "file://$value/*.json",
+ 'path' => "{$matches['path']}/*.json",
+ );
continue;
}
- $components["$key-$subkey"] = array(
- 'repo' => 'extension',
- 'name' => $matches['name'],
- 'orig' => "file://$subvalue/*.json",
- 'path' => "{$matches['path']}/*.json",
- );
+ $item = $this->getItem( 'extensions', $subvalue );
+ if ( $item !== null ) {
+ $item['repo'] = 'extension';
+ $components["$key-$subkey"] = $item;
+ continue;
+ }
+
+ $item = $this->getItem( 'skins', $subvalue );
+ if ( $item !== null ) {
+ $item['repo'] = 'skin';
+ $components["$key-$subkey"] = $item;
+ continue;
+ }
}
}
foreach ( $this->php as $key => $value ) {
- // This currently skips core i18n files like resources/oojs-ui/i18n
$matches = array();
$ok = preg_match( '~/extensions/(?P<name>[^/]+)/(?P<path>.*\.i18n\.php)$~', $value, $matches );
if ( !$ok ) {
@@ -75,4 +85,23 @@ class LU_Finder {
return $components;
}
+
+ /**
+ * @param string $dir extensions or skins
+ * @param string $subvalue
+ * @return array|null
+ */
+ private function getItem( $dir, $subvalue ) {
+ // This ignores magic, alias etc. non message files
+ $matches = array();
+ if ( !preg_match( "~/$dir/(?P<name>[^/]+)/(?P<path>.*)$~", $subvalue, $matches ) ) {
+ return null;
+ }
+
+ return array(
+ 'name' => $matches['name'],
+ 'orig' => "file://$subvalue/*.json",
+ 'path' => "{$matches['path']}/*.json",
+ );
+ }
}
diff --git a/extensions/LocalisationUpdate/i18n/qqq.json b/extensions/LocalisationUpdate/i18n/qqq.json
index c6978bbb..c08af070 100644
--- a/extensions/LocalisationUpdate/i18n/qqq.json
+++ b/extensions/LocalisationUpdate/i18n/qqq.json
@@ -3,8 +3,9 @@
"authors": [
"Fryed-peach",
"Purodha",
- "Shirayuki"
+ "Shirayuki",
+ "Umherirrender"
]
},
- "localisationupdate-desc": "{{desc|name=Localisation Update|url=http://www.mediawiki.org/wiki/Extension:LocalisationUpdate}}"
+ "localisationupdate-desc": "{{desc|name=Localisation Update|url=https://www.mediawiki.org/wiki/Extension:LocalisationUpdate}}"
}
diff --git a/extensions/LocalisationUpdate/i18n/zh-hant.json b/extensions/LocalisationUpdate/i18n/zh-hant.json
index 97e51cfe..511b9790 100644
--- a/extensions/LocalisationUpdate/i18n/zh-hant.json
+++ b/extensions/LocalisationUpdate/i18n/zh-hant.json
@@ -2,8 +2,9 @@
"@metadata": {
"authors": [
"Mark85296341",
- "Tom Maaswinkel"
+ "Tom Maaswinkel",
+ "LNDDYL"
]
},
- "localisationupdate-desc": "將本地化的資訊盡可能保持最新"
+ "localisationupdate-desc": "將在地化的資訊盡可能保持最新"
}
diff --git a/extensions/LocalisationUpdate/reader/ReaderFactory.php b/extensions/LocalisationUpdate/reader/ReaderFactory.php
index 530ab3f9..983ec314 100644
--- a/extensions/LocalisationUpdate/reader/ReaderFactory.php
+++ b/extensions/LocalisationUpdate/reader/ReaderFactory.php
@@ -13,7 +13,7 @@ class LU_ReaderFactory {
* Constructs a suitable reader for a given path.
* @param string $filename Usually a relative path to the file name.
* @return LU_Reader
- * @throw MWException
+ * @throw Exception
*/
public function getReader( $filename ) {
if ( preg_match( '/i18n\.php$/', $filename ) ) {
@@ -31,6 +31,6 @@ class LU_ReaderFactory {
return new LU_JSONReader( $code );
}
- throw new MWException( "Unknown file format: " . $filename );
+ throw new Exception( "Unknown file format: " . $filename );
}
}
diff --git a/extensions/LocalisationUpdate/tests/phpunit/finder/FinderTest.php b/extensions/LocalisationUpdate/tests/phpunit/finder/FinderTest.php
index 8cc0f7d7..b8213bac 100644
--- a/extensions/LocalisationUpdate/tests/phpunit/finder/FinderTest.php
+++ b/extensions/LocalisationUpdate/tests/phpunit/finder/FinderTest.php
@@ -18,6 +18,7 @@ class LU_FinderTest extends MediaWikiTestCase {
'core' => '/IP/extensions/Door/i18n/core',
'extra' => '/IP/extensions/Door/i18n/extra',
),
+ 'Vector' => '/IP/skins/Vector/i18n',
),
'/IP'
);
@@ -26,10 +27,11 @@ class LU_FinderTest extends MediaWikiTestCase {
$expected = array(
'repo' => 'mediawiki',
'orig' => "file:///IP/languages/messages/Messages*.php",
- 'path' => 'languages/messages/Messages*.php',
+ 'path' => 'languages/messages/i18n/*.json',
);
+
$this->assertArrayHasKey( 'core', $observed );
- $this->assertSame( $expected, $observed['core'], 'Core php file' );
+ $this->assertEquals( $expected, $observed['core'], 'Core php file' );
$expected = array(
'repo' => 'extension',
@@ -38,7 +40,7 @@ class LU_FinderTest extends MediaWikiTestCase {
'path' => 'TranslateSearch.i18n.php'
);
$this->assertArrayHasKey( 'TranslateSearch', $observed );
- $this->assertSame( $expected, $observed['TranslateSearch'], 'PHP only extension' );
+ $this->assertEquals( $expected, $observed['TranslateSearch'], 'PHP only extension' );
$expected = array(
'repo' => 'extension',
@@ -47,7 +49,7 @@ class LU_FinderTest extends MediaWikiTestCase {
'path' => 'i18n/*.json'
);
$this->assertArrayHasKey( 'Babel-0', $observed );
- $this->assertSame( $expected, $observed['Babel-0'], 'PHP&JSON extension' );
+ $this->assertEquals( $expected, $observed['Babel-0'], 'PHP&JSON extension' );
$expected = array(
'repo' => 'extension',
@@ -56,7 +58,7 @@ class LU_FinderTest extends MediaWikiTestCase {
'path' => 'i18n/core/*.json'
);
$this->assertArrayHasKey( 'Door-core', $observed );
- $this->assertSame( $expected, $observed['Door-core'], 'Multidir json extension' );
+ $this->assertEquals( $expected, $observed['Door-core'], 'Multidir json extension' );
$expected = array(
'repo' => 'extension',
@@ -65,6 +67,15 @@ class LU_FinderTest extends MediaWikiTestCase {
'path' => 'i18n/extra/*.json'
);
$this->assertArrayHasKey( 'Door-extra', $observed );
- $this->assertSame( $expected, $observed['Door-extra'], 'Multidir json extension' );
+ $this->assertEquals( $expected, $observed['Door-extra'], 'Multidir json extension' );
+
+ $expected = array(
+ 'repo' => 'skin',
+ 'name' => 'Vector',
+ 'orig' => 'file:///IP/skins/Vector/i18n/*.json',
+ 'path' => 'i18n/*.json'
+ );
+ $this->assertArrayHasKey( 'Vector-0', $observed );
+ $this->assertEquals( $expected, $observed['Vector-0'], 'Json skin' );
}
}
diff --git a/extensions/LocalisationUpdate/update.php b/extensions/LocalisationUpdate/update.php
index 1f66e736..1f5eaa77 100644
--- a/extensions/LocalisationUpdate/update.php
+++ b/extensions/LocalisationUpdate/update.php
@@ -10,7 +10,7 @@ require "$IP/maintenance/Maintenance.php";
class LU extends Maintenance {
public function __construct() {
parent::__construct();
- $this->mDescription = 'Fetches translation updates to MediaWiki and extensions.';
+ $this->mDescription = 'Fetches translation updates to MediaWiki core, skins and extensions.';
$this->addOption(
'repoid',
'Fetch translations from repositories identified by this',
@@ -25,7 +25,7 @@ class LU extends Maintenance {
ini_set( "max_execution_time", 0 );
ini_set( 'memory_limit', -1 );
- global $wgExtensionMessagesFiles, $wgMessagesDirs, $IP;
+ global $wgExtensionMessagesFiles, $IP;
global $wgLocalisationUpdateRepositories;
global $wgLocalisationUpdateRepository;
@@ -35,7 +35,15 @@ class LU extends Maintenance {
return;
}
- $finder = new LU_Finder( $wgExtensionMessagesFiles, $wgMessagesDirs, $IP );
+ $lc = Language::getLocalisationCache();
+ if ( is_callable( array( $lc, 'getMessagesDirs' ) ) ) { // Introduced in 1.25
+ $messagesDirs = $lc->getMessagesDirs();
+ } else {
+ global $wgMessagesDirs;
+ $messagesDirs = $wgMessagesDirs;
+ }
+
+ $finder = new LU_Finder( $wgExtensionMessagesFiles, $messagesDirs, $IP );
$readerFactory = new LU_ReaderFactory();
$fetcherFactory = new LU_FetcherFactory();
diff --git a/extensions/Nuke/Nuke.alias.php b/extensions/Nuke/Nuke.alias.php
index be9f3450..1291decb 100644
--- a/extensions/Nuke/Nuke.alias.php
+++ b/extensions/Nuke/Nuke.alias.php
@@ -24,6 +24,11 @@ $specialPageAliases['arz'] = array(
'Nuke' => array( 'مسح_كامل' ),
);
+/** Avaric (авар) */
+$specialPageAliases['av'] = array(
+ 'Nuke' => array( 'Множественное_удаление' ),
+);
+
/** Bashkir (башҡортса) */
$specialPageAliases['ba'] = array(
'Nuke' => array( 'Nuke' ),
@@ -76,7 +81,7 @@ $specialPageAliases['fa'] = array(
/** Finnish (suomi) */
$specialPageAliases['fi'] = array(
- 'Nuke' => array( 'Massapoisto' ),
+ 'Nuke' => array( 'Massapoista' ),
);
/** Galician (galego) */
@@ -164,6 +169,11 @@ $specialPageAliases['lb'] = array(
'Nuke' => array( 'Masseläschung' ),
);
+/** لوری (لوری) */
+$specialPageAliases['lrc'] = array(
+ 'Nuke' => array( 'اتمی' ),
+);
+
/** Literary Chinese (文言) */
$specialPageAliases['lzh'] = array(
'Nuke' => array( '量刪' ),
@@ -264,6 +274,11 @@ $specialPageAliases['vi'] = array(
'Nuke' => array( 'Xóa_hàng_loạt', 'Xoá_hàng_loạt' ),
);
+/** Chinese (中文) */
+$specialPageAliases['zh'] = array(
+ 'Nuke' => array( '大量删除', '大量刪除' ),
+);
+
/** Simplified Chinese (中文(简体)‎) */
$specialPageAliases['zh-hans'] = array(
'Nuke' => array( '大量删除' ),
diff --git a/extensions/Nuke/Nuke.i18n.php b/extensions/Nuke/Nuke.i18n.php
deleted file mode 100644
index a01e3a8c..00000000
--- a/extensions/Nuke/Nuke.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim1b110e87fcd3a9cb' ) ) {
- function wfJsonI18nShim1b110e87fcd3a9cb( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim1b110e87fcd3a9cb';
-}
diff --git a/extensions/Nuke/Nuke.php b/extensions/Nuke/Nuke.php
index 12022f28..ec37f1c5 100644
--- a/extensions/Nuke/Nuke.php
+++ b/extensions/Nuke/Nuke.php
@@ -1,48 +1,15 @@
<?php
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( 'Not an entry point.' );
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'Nuke' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Nuke'] = __DIR__ . '/i18n';
+ $wgExtensionMessagesFiles['NukeAlias'] = __DIR__ . '/Nuke.alias.php';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Nuke extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the Nuke extension requires MediaWiki 1.25+' );
}
-
-define( 'Nuke_VERSION', '1.2.0' );
-
-$dir = dirname( __FILE__ ) . '/';
-
-$wgMessagesDirs['Nuke'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['Nuke'] = $dir . 'Nuke.i18n.php';
-$wgExtensionMessagesFiles['NukeAlias'] = $dir . 'Nuke.alias.php';
-
-$wgExtensionCredits['specialpage'][] = array(
- 'path' => __FILE__,
- 'name' => 'Nuke',
- 'descriptionmsg' => 'nuke-desc',
- 'author' => array( 'Brion Vibber', 'Jeroen De Dauw' ),
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Nuke',
- 'version' => Nuke_VERSION,
-);
-
-$wgGroupPermissions['sysop']['nuke'] = true;
-$wgAvailableRights[] = 'nuke';
-
-$wgAutoloadClasses['SpecialNuke'] = $dir . 'Nuke_body.php';
-$wgAutoloadClasses['NukeHooks'] = $dir . 'Nuke.hooks.php';
-$wgSpecialPages['Nuke'] = 'SpecialNuke';
-$wgSpecialPageGroups['Nuke'] = 'pagetools';
-
-$wgHooks['ContributionsToolLinks'][] = 'NukeHooks::nukeContributionsLinks';
-
-// Resource loader modules
-$moduleTemplate = array(
- 'localBasePath' => dirname( __FILE__ ) . '/',
- 'remoteExtPath' => 'Nuke/'
-);
-
-$wgResourceModules['ext.nuke'] = $moduleTemplate + array(
- 'scripts' => array(
- 'ext.nuke.js'
- ),
- 'messages' => array(
- )
-);
-
-unset( $moduleTemplate );
diff --git a/extensions/Nuke/Nuke_body.php b/extensions/Nuke/Nuke_body.php
index 6a6cfec8..b662b7fa 100644
--- a/extensions/Nuke/Nuke_body.php
+++ b/extensions/Nuke/Nuke_body.php
@@ -74,6 +74,7 @@ class SpecialNuke extends SpecialPage {
*/
protected function promptForm( $userName = '' ) {
$out = $this->getOutput();
+ $out->addModules( 'mediawiki.userSuggest' );
$out->addWikiMsg( 'nuke-tools' );
@@ -87,7 +88,7 @@ class SpecialNuke extends SpecialPage {
)
. '<table><tr>'
. '<td>' . Xml::label( $this->msg( 'nuke-userorip' )->text(), 'nuke-target' ) . '</td>'
- . '<td>' . Xml::input( 'target', 40, $userName, array( 'id' => 'nuke-target', 'autofocus' => true ) ) . '</td>'
+ . '<td>' . Xml::input( 'target', 40, $userName, array( 'id' => 'nuke-target', 'class' => 'mw-autocomplete-user', 'autofocus' => true ) ) . '</td>'
. '</tr><tr>'
. '<td>' . Xml::label( $this->msg( 'nuke-pattern' )->text(), 'nuke-pattern' ) . '</td>'
. '<td>' . Xml::input( 'pattern', 40, '', array( 'id' => 'nuke-pattern' ) ) . '</td>'
@@ -155,16 +156,19 @@ class SpecialNuke extends SpecialPage {
)
);
- // Select: All, None
+ // Select: All, None, Invert
$links = array();
$links[] = '<a href="#" id="toggleall">' .
- $this->msg( 'powersearch-toggleall' )->text() . '</a>';
+ $this->msg( 'powersearch-toggleall' )->escaped() . '</a>';
$links[] = '<a href="#" id="togglenone">' .
- $this->msg( 'powersearch-togglenone' )->text() . '</a>';
+ $this->msg( 'powersearch-togglenone' )->escaped() . '</a>';
+ $links[] = '<a href="#" id="toggleinvert">' .
+ $this->msg( 'nuke-toggleinvert' )->escaped() . '</a>';
$out->addHTML(
Xml::tags( 'p',
null,
- $this->msg( 'nuke-select', $this->getLanguage()->commaList( $links ) )->text()
+ $this->msg( 'nuke-select' )
+ ->rawParams( $this->getLanguage()->commaList( $links ) )->escaped()
)
);
@@ -175,8 +179,8 @@ class SpecialNuke extends SpecialPage {
$out->addHTML( '<ul>' );
- $wordSeparator = $this->msg( 'word-separator' )->text();
- $commaSeparator = $this->msg( 'comma-separator' )->text();
+ $wordSeparator = $this->msg( 'word-separator' )->escaped();
+ $commaSeparator = $this->msg( 'comma-separator' )->escaped();
foreach ( $pages as $info ) {
/**
@@ -190,7 +194,7 @@ class SpecialNuke extends SpecialPage {
$userNameText = $userName ? $this->msg( 'nuke-editby', $userName )->parse() . $commaSeparator : '';
$changesLink = Linker::linkKnown(
$title,
- $this->msg( 'nuke-viewchanges' )->text(),
+ $this->msg( 'nuke-viewchanges' )->escaped(),
array(),
array( 'action' => 'history' )
);
@@ -310,4 +314,8 @@ class SpecialNuke extends SpecialPage {
$this->getOutput()->addHTML( "<ul>\n<li>" . implode( "</li>\n<li>", $res ) . "</li>\n</ul>\n" );
$this->getOutput()->addWikiMsg( 'nuke-delete-more' );
}
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
}
diff --git a/extensions/Nuke/SpecialNuke.php b/extensions/Nuke/SpecialNuke.php
index 99fe994f..3a8408a1 100644
--- a/extensions/Nuke/SpecialNuke.php
+++ b/extensions/Nuke/SpecialNuke.php
@@ -1,2 +1,2 @@
<?php
-require_once( dirname( __FILE__ ) . '/Nuke.php' );
+require_once( __DIR__ . '/Nuke.php' );
diff --git a/extensions/Nuke/ext.nuke.js b/extensions/Nuke/ext.nuke.js
index 42f463f7..ff5aecfb 100644
--- a/extensions/Nuke/ext.nuke.js
+++ b/extensions/Nuke/ext.nuke.js
@@ -21,5 +21,10 @@
$( '#togglenone' ).click( function () {
selectPages( false );
} );
+ $( '#toggleinvert' ).click( function () {
+ $( 'input[type="checkbox"]' ).each( function () {
+ $( this ).prop( 'checked', !$( this ).is( ':checked' ) );
+ } );
+ } );
} );
}( jQuery ) );
diff --git a/extensions/Nuke/extension.json b/extensions/Nuke/extension.json
new file mode 100644
index 00000000..14a60b96
--- /dev/null
+++ b/extensions/Nuke/extension.json
@@ -0,0 +1,50 @@
+{
+ "name": "Nuke",
+ "version": "1.2.0",
+ "author": [
+ "Brion Vibber",
+ "Jeroen De Dauw"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:Nuke",
+ "descriptionmsg": "nuke-desc",
+ "type": "specialpage",
+ "ExtensionMessagesFiles": {
+ "NukeAlias": "Nuke.alias.php"
+ },
+ "MessagesDirs": {
+ "Nuke": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "ContributionsToolLinks": [
+ "NukeHooks::nukeContributionsLinks"
+ ]
+ },
+ "ResourceModules": {
+ "ext.nuke": {
+ "scripts": [
+ "ext.nuke.js"
+ ]
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteExtPath": "Nuke"
+ },
+ "GroupPermissions": {
+ "sysop": {
+ "nuke": true
+ }
+ },
+ "AvailableRights": [
+ "nuke"
+ ],
+ "SpecialPages": {
+ "Nuke": "SpecialNuke"
+ },
+ "AutoloadClasses": {
+ "SpecialNuke": "Nuke_body.php",
+ "NukeHooks": "Nuke.hooks.php"
+ }
+}
diff --git a/extensions/Nuke/i18n/az.json b/extensions/Nuke/i18n/az.json
index cf130713..b0fbf621 100644
--- a/extensions/Nuke/i18n/az.json
+++ b/extensions/Nuke/i18n/az.json
@@ -1,8 +1,11 @@
{
"@metadata": {
"authors": [
- "Cekli829"
+ "Cekli829",
+ "Wertuose"
]
},
- "nuke-select": "Seçin: $1"
+ "nuke": "Kütləvi silmə",
+ "nuke-select": "Seçin: $1",
+ "nuke-linkoncontribs": "kütləvi silmə"
}
diff --git a/extensions/Nuke/i18n/bcc.json b/extensions/Nuke/i18n/bcc.json
index a8d84566..55950e83 100644
--- a/extensions/Nuke/i18n/bcc.json
+++ b/extensions/Nuke/i18n/bcc.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Mostafadaneshvar"
+ "Mostafadaneshvar",
+ "Baloch Afghanistan"
]
},
"nuke": "حذف جمعی",
@@ -10,7 +11,7 @@
"nuke-list": "جهلگین صفحات نوکی شر بیتگین گون [[Special:Contributions/$1|$1]];\nتوضیحی بویسیت و دکمه بجنیت تا آیانء حذف کنت.",
"nuke-defaultreason": "حذف جمعی صفحات اضافه بوتت په وسیله $1",
"nuke-tools": "ای وسیله شما را اجازت دن تا صفحاتی که گون یک داتگین کاربر یا آی پی شربیتگن حذفش کنت.\nنام کاربری یا آی پی وارد کنیت تا یک لیستی چه صفحات په حذف پیشداریتن.",
- "nuke-submit-user": "برو",
+ "nuke-submit-user": "برا",
"nuke-submit-delete": "انتخاب بوتگین حذف",
"right-nuke": "حذف جمعی صفحات"
}
diff --git a/extensions/Nuke/i18n/be-tarask.json b/extensions/Nuke/i18n/be-tarask.json
index 65879e5e..9f129ac6 100644
--- a/extensions/Nuke/i18n/be-tarask.json
+++ b/extensions/Nuke/i18n/be-tarask.json
@@ -3,7 +3,8 @@
"authors": [
"EugeneZelenko",
"Jim-by",
- "Wizardist"
+ "Wizardist",
+ "Red Winged Duck"
]
},
"nuke": "Масавае выдаленьне",
@@ -28,5 +29,6 @@
"nuke-pattern": "Узор для назвы старонкі:",
"nuke-nopages-global": "У [[Special:RecentChanges|апошніх зьменах]] больш няма новых старонак.",
"nuke-viewchanges": "праглядзець зьмены",
- "nuke-namespace": "Абмежаваць прасторай назваў:"
+ "nuke-namespace": "Абмежаваць прасторай назваў:",
+ "nuke-linkoncontribs": "масавае выдаленьне"
}
diff --git a/extensions/Nuke/i18n/bn.json b/extensions/Nuke/i18n/bn.json
index 7506da87..c89588da 100644
--- a/extensions/Nuke/i18n/bn.json
+++ b/extensions/Nuke/i18n/bn.json
@@ -4,19 +4,34 @@
"Aftab1995",
"Bellayet",
"Wikitanvir",
- "Zaheen"
+ "Zaheen",
+ "Aftabuzzaman"
]
},
- "nuke": "গণ মুছে ফেলা",
+ "nuke": "গণ অপসারণ",
+ "action-nuke": "অনাবৃত পাতাসমূহ",
"nuke-desc": "প্রশাসকদের পাতাগুলি [[Special:Nuke|গণহারে মুছে ফেলার]] ক্ষমতা দেয়",
- "nuke-nopages": "সাম্প্রতিক পরিবর্তনগুলিতে [[Special:Contributions/$1|{{GENDER:$1|$1}}]]-এর তৈরি কোন নতুন পাতা নেই।",
+ "nuke-nopages": "সাম্প্রতিক পরিবর্তনসমূহে [[Special:Contributions/$1|{{GENDER:$1|$1}}]] কর্তৃক তৈরি কোন নতুন পাতা নেই।",
"nuke-list": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] সাম্প্রতিক কালে নিচের পাতাগুলি সৃষ্টি করেছেন; একটি মন্তব্য দিন এবং বোতাম চেপে এগুলি মুছে ফেলুন।",
- "nuke-defaultreason": "$1-এর যোগ করা পাতাগুলির গণ মুছে-ফেলা",
- "nuke-multiplepeople": "একাধিক ব্যবহারকারী",
- "nuke-tools": "এই সরঞ্জামটি ব্যবহার করে আপনি একটি প্রদত্ত ব্যবহারকারীর বা আইপি ঠিকানার যোগ করা পাতাগুলি গণ আকারে মুছে ফেলতে পারবেন। পাতাগুলির তালিকা পেতে ব্যবহারকারী নাম বা আইপি ঠিকানাটি ইনপুট করুন:",
+ "nuke-list-multiple": "নিচের পাতাসমূহ সম্প্রতি তৈরি করা হয়েছে; একটি মন্তব্য লিখুন এবং বোতাম চেপে তাদের অপসারণ করুন।",
+ "nuke-defaultreason": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] কর্তৃক যোগকৃত পাতাগুলির গণ অপসারণ",
+ "nuke-multiplepeople": "সম্প্রতি যোগ করা পাতার গণ অপসারণ",
+ "nuke-tools": "এই সরঞ্জামটি প্রদত্ত ব্যবহারকারী বা আইপি ঠিকানা দ্বারা সম্প্রতি যোগকৃত পাতাগুলি গণ আকারে অপসারণ করার অনুমতি দেয়। অপসারণ করতে পাতাগুলির তালিকা পেতে ব্যবহারকারী নাম বা আইপি ঠিকানাটি ইনপুট করুন বা সমস্ত ব্যবহারকারীদের জন্য ফাঁকা রেখে দিন।",
"nuke-submit-user": "যাও",
- "nuke-submit-delete": "নির্বাচিত গুলো মুছে ফেলো",
+ "nuke-toggleinvert": "ব্যুত্ক্রমে",
+ "nuke-submit-delete": "নির্বাচিত অপসারণ করো",
+ "right-nuke": "গণ অপসারণ পাতা",
"nuke-select": "নির্বাচন: $1",
"nuke-userorip": "ব্যবহারকারী নাম, আইপি ঠিকানা বা খালি:",
- "nuke-maxpages": "সর্বোচ্চ সংখ্যক পাতাসমূহ:"
+ "nuke-maxpages": "সর্বোচ্চ সংখ্যক পাতাসমূহ:",
+ "nuke-editby": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] দ্বারা তৈরিকৃত।",
+ "nuke-deleted": "পাতা '''$1''' অপসারণ করা হয়েছে।",
+ "nuke-not-deleted": "পাতা [[:$1]] অপসারণ '''করা যাবে না'''।",
+ "nuke-delete-more": "[[Special:Nuke|আরও পাতা অপসারণ করুন]]",
+ "nuke-pattern": "পাতা নামের জন্য প্যাটার্ন:",
+ "nuke-nopages-global": "[[Special:RecentChanges|সাম্প্রতিক পরিবর্তনসমূহে]] নতুন কোন পাতা নেই।",
+ "nuke-viewchanges": "পরিবর্তনসমূহ দেখুন",
+ "nuke-namespace": "নামস্থানে সীমা:",
+ "nuke-linkoncontribs": "গণ অপসারণ",
+ "nuke-linkoncontribs-text": "পাতা গণ অপসারণ করুন যেখানে এই ব্যবহারকারী একমাত্র লেখক"
}
diff --git a/extensions/Nuke/i18n/ca.json b/extensions/Nuke/i18n/ca.json
index d453b330..3c7e593f 100644
--- a/extensions/Nuke/i18n/ca.json
+++ b/extensions/Nuke/i18n/ca.json
@@ -6,7 +6,8 @@
"Paucabot",
"SMP",
"Toniher",
- "Vriullop"
+ "Vriullop",
+ "Fitoschido"
]
},
"nuke": "Eliminació massiva",
@@ -31,7 +32,7 @@
"nuke-pattern": "Patró pel nom de pàgina:",
"nuke-nopages-global": "No hi ha cap pàgina nova als [[Special:RecentChanges|canvis recents]].",
"nuke-viewchanges": "mostra els canvis",
- "nuke-namespace": "Limitat a l'espai de noms:",
+ "nuke-namespace": "Limitat a l’espai de noms:",
"nuke-linkoncontribs": "eliminació massiva",
"nuke-linkoncontribs-text": "Eliminació massiva de pàgines on aquest usuari és l'únic autor"
}
diff --git a/extensions/Nuke/i18n/ce.json b/extensions/Nuke/i18n/ce.json
index 34706d1b..ce5c702d 100644
--- a/extensions/Nuke/i18n/ce.json
+++ b/extensions/Nuke/i18n/ce.json
@@ -14,11 +14,12 @@
"nuke-multiplepeople": "Дуккха агӀонаш дӀаяхар",
"nuke-tools": "ХӀокху агӀонехь йиш ю дуккха агӀонаш дӀаяха, дукх хан йоцуш кхолийна йолу.",
"nuke-submit-user": "Кхочушдé",
+ "nuke-toggleinvert": "Инверт ян",
"nuke-submit-delete": "ДӀаяха хаьржнарш",
"right-nuke": "дуккха агӀонаш дӀаяхар",
"nuke-select": "Харжар: $1",
"nuke-userorip": "Декъашхочун цӀе, IP-адрес (еса йита мега):",
- "nuke-maxpages": "АгӀонашан максимальни дукхалла:",
+ "nuke-maxpages": "АгӀонийн максимальни дукхалла:",
"nuke-editby": "Кхолийна {{GENDER:$1|декъашхочо}} [[Special:Contributions/$1|$1]]",
"nuke-delete-more": "[[Special:Nuke|Дуккха агӀонаш дӀаяхар]]",
"nuke-pattern": "Кеп агӀона цӀеран:",
diff --git a/extensions/Nuke/i18n/cs.json b/extensions/Nuke/i18n/cs.json
index 06dffc93..874bd08f 100644
--- a/extensions/Nuke/i18n/cs.json
+++ b/extensions/Nuke/i18n/cs.json
@@ -19,6 +19,7 @@
"nuke-multiplepeople": "Hromadné smazání nedávno založených stránek",
"nuke-tools": "Tento nástroj umožňuje hromadné smazání stránek nedávno vytvořených zadaným uživatelem nebo IP adresou.\nZadejte uživatelské jméno nebo IP adresu, zobrazí se seznam stránek ke smazání; případně ponechte prázdné pro všechny uživatele.",
"nuke-submit-user": "Provést",
+ "nuke-toggleinvert": "Obrátit",
"nuke-submit-delete": "Smazat vybrané",
"right-nuke": "Hromadné mazání stránek",
"nuke-select": "Vybrat: $1",
diff --git a/extensions/Nuke/i18n/de.json b/extensions/Nuke/i18n/de.json
index e7faadff..791134d6 100644
--- a/extensions/Nuke/i18n/de.json
+++ b/extensions/Nuke/i18n/de.json
@@ -19,6 +19,7 @@
"nuke-multiplepeople": "Massenlöschung kürzlich erstellter Seiten",
"nuke-tools": "Diese Arbeitshilfe ermöglicht die Massenlöschung von Seiten, die von einer IP-Adresse oder einem Benutzer angelegt wurden.\nGib die IP-Adresse oder den Benutzernamen ein, um eine Liste der zu löschenden Seiten zu erhalten. Sofern du keine Angabe machst, werden alle Benutzer ausgewählt.",
"nuke-submit-user": "Abrufen",
+ "nuke-toggleinvert": "Umkehren",
"nuke-submit-delete": "Ausgewählte Seiten löschen",
"right-nuke": "Massenlöschungen von Seiten",
"nuke-select": "Auswählen: $1",
diff --git a/extensions/Nuke/i18n/diq.json b/extensions/Nuke/i18n/diq.json
index 7a8f9f8b..38048325 100644
--- a/extensions/Nuke/i18n/diq.json
+++ b/extensions/Nuke/i18n/diq.json
@@ -12,7 +12,7 @@
"nuke-nopages": "Vuriyayişê ke hetê ıney ra [[Special:Contributions/$1|{{GENDER:$1|$1}}]] biye tede çı pelê neweyi çini .",
"nuke-list": "Pelê ke cêr de yê hetê ıney ra [[Special:Contributions/$1|{{GENDER:$1|$1}}]] yew tarixo nızdi de vıraziyayi; mışore bıkerê u qey hewnakerdışi yew tuş bıtıknê.",
"nuke-defaultreason": "Peleyê ke [[Special:Contributions/$1|{{GENDER:$1|$1}}]] dekerdê de ena pêron hewadayış",
- "nuke-tools": "Na hacet, peleyê ke nezdı ra yew karber yana ip ra akerdê êna pêrun rê esternayış de cı rê mısade dano.\nListanê peleyê ke besternaya vinayışi rê namey karberi yana ip adresi dekere de.",
+ "nuke-tools": "No hacet mısade dano be esteriyayışê pelanê ke nêzdi de terefê yew karberi ya zi yew adresa IPyi ra ilawe biyê.\nSeba gırewtışê lista pelan ra êyê ke esteriyenê nameyê karberi ya zi adresa IPyi cı kewe, ya zi seba pêro karberan ra veng caverde.",
"nuke-submit-user": "Şo",
"nuke-submit-delete": "Weçinayi esterne",
"right-nuke": "pelan yew hew de hewnaker",
diff --git a/extensions/Nuke/i18n/en.json b/extensions/Nuke/i18n/en.json
index 62389dfe..86488682 100644
--- a/extensions/Nuke/i18n/en.json
+++ b/extensions/Nuke/i18n/en.json
@@ -15,6 +15,7 @@
"nuke-multiplepeople": "Mass deletion of recently added pages",
"nuke-tools": "This tool allows for mass deletions of pages recently added by a given user or an IP address.\nInput the username or IP address to get a list of pages to delete, or leave blank for all users.",
"nuke-submit-user": "Go",
+ "nuke-toggleinvert": "Invert",
"nuke-submit-delete": "Delete selected",
"right-nuke": "Mass delete pages",
"nuke-select": "Select: $1",
diff --git a/extensions/Nuke/i18n/es.json b/extensions/Nuke/i18n/es.json
index 727bc66d..cb7f3f59 100644
--- a/extensions/Nuke/i18n/es.json
+++ b/extensions/Nuke/i18n/es.json
@@ -13,7 +13,8 @@
"Platonides",
"Ralgis",
"Remember the dot",
- "Sanbec"
+ "Sanbec",
+ "Macofe"
]
},
"nuke": "Borrado en masa",
@@ -26,6 +27,7 @@
"nuke-multiplepeople": "Eliminación masiva de páginas nuevas de múltiples usuarios",
"nuke-tools": "Esta herramienta permite borrados masivos de páginas creadas recientemente por un usuario o una dirección IP.\nIntroduzca el nombre de usuario o la dirección IP para obtener la lista de páginas a borrar, o déjelo en blanco para todos los usuarios.",
"nuke-submit-user": "Ir",
+ "nuke-toggleinvert": "Invertir",
"nuke-submit-delete": "Borrar lo seleccionado",
"right-nuke": "Borrar páginas masivamente",
"nuke-select": "Seleccionar: $1",
diff --git a/extensions/Nuke/i18n/et.json b/extensions/Nuke/i18n/et.json
index ea2cc5a1..cd57d195 100644
--- a/extensions/Nuke/i18n/et.json
+++ b/extensions/Nuke/i18n/et.json
@@ -14,6 +14,7 @@
"nuke-multiplepeople": "Hiljuti lisatud lehekülgede lauskustutamine",
"nuke-tools": "See tööriist võimaldab kasutaja või IP-aadressi hiljuti lisatud leheküljed lauskustutada.\nKustutatavate lehekülgede nimekirja näitamiseks sisesta kasutajanimi või IP-aadress. Kõigi kasutajate lisatud lehekülgede jaoks jäta väli tühjaks.",
"nuke-submit-user": "Mine",
+ "nuke-toggleinvert": "Pööra ümber",
"nuke-submit-delete": "Kustuta väljavalitud",
"right-nuke": "Lehekülgi lauskustutada",
"nuke-select": "Valik: $1",
diff --git a/extensions/Nuke/i18n/gl.json b/extensions/Nuke/i18n/gl.json
index dee17254..bd3d4b46 100644
--- a/extensions/Nuke/i18n/gl.json
+++ b/extensions/Nuke/i18n/gl.json
@@ -3,7 +3,8 @@
"authors": [
"Alma",
"Toliño",
- "Xosé"
+ "Xosé",
+ "Banjo"
]
},
"nuke": "Eliminar en masa",
@@ -16,6 +17,7 @@
"nuke-multiplepeople": "Eliminación en masa de páxinas recentes",
"nuke-tools": "Esta ferramenta permite borrar en masa as páxinas engadidas recentemente por un determinado usuario ou enderezo IP.\nIntroduza o nome do usuario ou enderezo IP para obter unha lista das páxinas para borrar. Déixeo en branco para todos os usuarios.",
"nuke-submit-user": "Continuar",
+ "nuke-toggleinvert": "Invertir",
"nuke-submit-delete": "Eliminar a selección",
"right-nuke": "Borrar páxinas masivamente",
"nuke-select": "Seleccionar: $1",
diff --git a/extensions/Nuke/i18n/he.json b/extensions/Nuke/i18n/he.json
index 953dd176..288dc7f4 100644
--- a/extensions/Nuke/i18n/he.json
+++ b/extensions/Nuke/i18n/he.json
@@ -15,10 +15,11 @@
"nuke-nopages": "אין דפים חדשים שנוצרו על־ידי [[Special:Contributions/$1|$1]] בשינויים האחרונים.",
"nuke-list": "הדפים הבאים נוצרו לאחרונה על־ידי [[Special:Contributions/$1|$1]];\nאנא כתבו הסבר למחיקה ולחצו על הכפתור כדי למחוק אותם.",
"nuke-list-multiple": "הדפים הבאים נוצרו לאחרונה;\nאנא כתבו נימוק למחיקה ולחצו על הכפתור כדי למחוק אותם.",
- "nuke-defaultreason": "הסרה מרובה של דפים שנוצרו על־ידי [[Special:Contributions/$1|$1]]",
+ "nuke-defaultreason": "מחיקה מרובה של דפים שנוצרו על־ידי [[Special:Contributions/$1|$1]]",
"nuke-multiplepeople": "מחיקה מרובה של דפים שנוספו לאחרונה",
"nuke-tools": "כלי זה מאפשר מחיקות המוניות של דפים שנוספו לאחרונה על־ידי משתמש או כתובת IP מסוימים.\nכתבו את שם המשתמש או כתובת ה־IP כדי לקבל את רשימת הדפים למחיקה, או השאירו את השדה ריק עבור כל המשתמשים.",
"nuke-submit-user": "הצגה",
+ "nuke-toggleinvert": "היפוך",
"nuke-submit-delete": "מחיקת הדפים שנבחרו",
"right-nuke": "מחיקה מרובה של דפים",
"nuke-select": "בחירה: $1",
diff --git a/extensions/Nuke/i18n/hi.json b/extensions/Nuke/i18n/hi.json
index c5a0e937..96a6cb8e 100644
--- a/extensions/Nuke/i18n/hi.json
+++ b/extensions/Nuke/i18n/hi.json
@@ -4,7 +4,8 @@
"Ansumang",
"Kaustubh",
"Shyam",
- "Siddhartha Ghai"
+ "Siddhartha Ghai",
+ "Ayushimrigen"
]
},
"nuke": "एक साथ बहुत सारे पृष्ठ हटायें",
@@ -17,6 +18,7 @@
"nuke-multiplepeople": "हाल में बने पृष्ठ एक साथ हटाए",
"nuke-tools": "यह उपकरण किसी सदस्य या आई॰पी द्वारा हाल ही में जोड़े गए पृष्ठों को सामूहिक रूप से हटाने के लिए है।\nसदस्यनाम या आई॰पी डालकर हटाने हेतु पृष्ठों की सूची प्राप्त करें। सभी सदस्यों के बनाए पृष्ठों की सूची के लिए खाली छोड़ दें।",
"nuke-submit-user": "जायें",
+ "nuke-toggleinvert": "पलटें",
"nuke-submit-delete": "चुने हुए हटायें",
"right-nuke": "बहुत से पृष्ठ एक साथ हटायें",
"nuke-select": "चुनें: $1",
diff --git a/extensions/Nuke/i18n/it.json b/extensions/Nuke/i18n/it.json
index 426a445f..20c13df0 100644
--- a/extensions/Nuke/i18n/it.json
+++ b/extensions/Nuke/i18n/it.json
@@ -19,6 +19,7 @@
"nuke-multiplepeople": "Cancellazione di massa delle pagine create recentemente",
"nuke-tools": "Questo strumento permette la cancellazione in massa delle pagina create di recente da un determinato utente registrato o anonimo (IP).\nInserisci il nome utente o l'indirizzo IP per la lista delle pagine da cancellare, oppure lascia vuoto per tutti gli utenti.",
"nuke-submit-user": "Vai",
+ "nuke-toggleinvert": "Inverti",
"nuke-submit-delete": "Cancella la selezione",
"right-nuke": "Cancella pagine in massa",
"nuke-select": "Seleziona: $1",
diff --git a/extensions/Nuke/i18n/ka.json b/extensions/Nuke/i18n/ka.json
index 1c165f24..e55a2803 100644
--- a/extensions/Nuke/i18n/ka.json
+++ b/extensions/Nuke/i18n/ka.json
@@ -8,7 +8,7 @@
"Sopho"
]
},
- "nuke": "მასობრივი წაშლა",
+ "nuke": "მასიური წაშლა",
"action-nuke": "გვერდების მასიური წაშლა",
"nuke-desc": "ადმინისტრატორებს აძლევს გვერდების [[Special:Nuke|მასობრივად წაშლის]] საშუალებას",
"nuke-nopages": "ბოლო ცვლილებებში არ არის მომხმარებელ [[Special:Contributions/$1|{{GENDER:$1|$1}}]]-ის მიერ შექმნილი ახალი გვერდები.",
@@ -28,5 +28,6 @@
"nuke-pattern": "გვერდის სახელის თარგი:",
"nuke-nopages-global": "[[Special:RecentChanges|ბოლო ცვლილებებში]] არ არის ახალი გვერდები.",
"nuke-viewchanges": "ცვლილებების ჩვენება",
- "nuke-namespace": "სახელთა სივრცის შეზღუდვა:"
+ "nuke-namespace": "სახელთა სივრცის შეზღუდვა:",
+ "nuke-linkoncontribs": "მასიური წაშლა"
}
diff --git a/extensions/Nuke/i18n/ko.json b/extensions/Nuke/i18n/ko.json
index af02d6c2..d6e8e45c 100644
--- a/extensions/Nuke/i18n/ko.json
+++ b/extensions/Nuke/i18n/ko.json
@@ -6,7 +6,9 @@
"Kwj2772",
"Priviet",
"ToePeu",
- "아라"
+ "아라",
+ "Infinity",
+ "IRTC1015"
]
},
"nuke": "문서 대량 삭제",
@@ -17,8 +19,9 @@
"nuke-list-multiple": "다음은 최근에 만들어진 문서입니다.\n문서를 삭제하려면 이유를 입력하고 삭제 버튼을 누르세요.",
"nuke-defaultreason": "[[Special:Contributions/$1|{{GENDER:$1|$1}}]] 사용자가 작성한 문서를 대량 삭제함",
"nuke-multiplepeople": "최근 작성된 문서를 대량 삭제함",
- "nuke-tools": "이 도구를 이용해 특정 사용자나 IP 사용자가 최근 만들어진 문서를 대량으로 삭제할 수 있습니다.\n삭제할 문서 목록을 가져오려면 계정 이름이나 IP 주소를 입력하세요. 입력하지 않으면 모든 사용자를 대상으로 합니다.",
+ "nuke-tools": "이 도구를 이용해 특정 사용자나 IP 사용자가 최근에 만든 문서를 대량으로 삭제할 수 있습니다.\n삭제할 문서 목록을 가져오려면 계정 이름이나 IP 주소를 입력하세요. 입력하지 않으면 모든 사용자를 대상으로 합니다.",
"nuke-submit-user": "계속",
+ "nuke-toggleinvert": "선택 반전",
"nuke-submit-delete": "선택한 문서 삭제",
"right-nuke": "문서 대량 삭제",
"nuke-select": "선택: $1",
diff --git a/extensions/Nuke/i18n/ksh.json b/extensions/Nuke/i18n/ksh.json
index 62fb3dc8..c810d279 100644
--- a/extensions/Nuke/i18n/ksh.json
+++ b/extensions/Nuke/i18n/ksh.json
@@ -7,24 +7,27 @@
"nuke": "Sigge fottschmieße ang Mass",
"action-nuke": "pöngelswies Sigge fottschmiiße.",
"nuke-desc": "Määd_et möjjelesch för de Wiki-Köbesse, [[Special:Nuke|angmass Sigge fottzeschmieße]].",
- "nuke-nopages": "Mer han kein neu Sigge {{GENDER:$1|vum|vum|vum Metmaacher|vun dä|vum}} [[Special:Contributions/$1|$1]] en de {{lcfirst:{{int:Recentchanges}}}}.",
- "nuke-list": "Hee di Sigge sen fum „[[Special:Contributions/$1|$1]]“ neu\naanjelaat woode. Jiff enne Jrond för et Fottschmieße aan,\nun dann donn der Knopp zom Fottschmieße dröcke.",
+ "nuke-nopages": "Mer han kein neu Sigge {{GENDER:$1|vum|vum|vun dämm Metmaacher|vun dä|vum}} [[Special:Contributions/$1|$1]] en de {{lcfirst:{{int:Recentchanges}}}}.",
+ "nuke-list": "Hee di Sigge sen {{GENDER:$1|vum|vum|vumm Metmaacher|vun dä|vum}} „[[Special:Contributions/$1|$1]]“ neu\naanjelaat woode. Jivv enne Jrond för et Fottschmihße aan,\nun dann donn der Knopp zom Fottschmihße dröcke.",
"nuke-list-multiple": "Heh di Sigge woodte köözlesch aanjelaat.\nJiv ene Jrond udder Zosammegfassung aan,\nun kleck op dä Knopp för se fott ze schmiiße.",
- "nuke-defaultreason": "Fum $1 neu aanjelaate Sigge ang Block fottschmieße",
+ "nuke-defaultreason": "{{GENDER:$1|Vum|Vum|Vumm Metmaacher|Vun dä|Vum}} [[Special:Contributions/$1|$1]] neu aanjelaate Sigge ang Block fottschmieße",
"nuke-multiplepeople": "Köözlesch aanjelaate Sigge ang Blok fottjeschmeße.",
- "nuke-tools": "Di Sigg hee hellef Der, angmaß Sigge fottzeschmieße,\ndi ene bestemmpte enjeloggte udder namelose Metmaacher\nköözlesch aanjalaat hät.\nJif dä Metmaacher-Name udder de IP-Address fun däm Naameloose aan,\nöm en Liß met Sigge fun däm ze krijje,\nudder lohß dat Feld läddesch, dann kriß De en Leß vun Alle.",
+ "nuke-tools": "Di Sigg heh hellef, angmaß Sigge fottzeschmiiße,\ndi ene beschtemmpte enjeloggte udder nahmelohse Metmaacher\nköözlesch aanjalaat hät.\nMet jitt däm Metmaacher singe Nahme udder de <i lang=\"en\" xml:lang=\"en\">IP</i>-Addräß fun däm Nahmelohse aan,\nöm en Leß met Sigge fun däm ze krijje,\nudder dat Feld bliehv läddesch, un mer kredd en Leß vun Alle.",
"nuke-submit-user": "Leß holle",
+ "nuke-toggleinvert": "Ömdriehje",
"nuke-submit-delete": "Donn de ußjewählte Sigge fottschmieße!",
"right-nuke": "Massich Sigge Fottschmieße",
"nuke-select": "Ußwähle: $1",
"nuke-userorip": "Metmaacher_Name, <i lang=\"en\">IP</i>-Addräß udder nix:",
"nuke-maxpages": "Nit mieh Sigge, wi:",
- "nuke-editby": "Aanjelaat vum [[Special:Contributions/$1|$1]]",
+ "nuke-editby": "Aanjelaat {{GENDER:$1|vum|vum|vumm Metmaacher|vun dä|vum}} [[Special:Contributions/$1|$1]]",
"nuke-deleted": "Di Sigg '''„$1“''' es fottjeschmeße.",
"nuke-not-deleted": "Di Sigg „[[:$1]]“ '''kunnt nit''' fottjeschmeße wääde.",
"nuke-delete-more": "[[Special:Nuke|Noch mieh Sigge fottschmiiße]]",
"nuke-pattern": "Et Moster för dä Sigge iere Naame:",
"nuke-nopages-global": "Mer han kein neue Sigge en de [[Special:RecentChanges|neuste Änderonge]].",
"nuke-viewchanges": "de Ungerscheide zeije",
- "nuke-namespace": "Beschränke op dat Appachtemang:"
+ "nuke-namespace": "Beschränke op dat Appachtemang:",
+ "nuke-linkoncontribs": "ang Block fottschmiiße",
+ "nuke-linkoncontribs-text": "Schmiiß Sigge en einem Rötsch un ang Block fott, woh heh dä Metmaacher der einzejje Schriiver vun es."
}
diff --git a/extensions/Nuke/i18n/lb.json b/extensions/Nuke/i18n/lb.json
index 4f0f13f4..6d54654c 100644
--- a/extensions/Nuke/i18n/lb.json
+++ b/extensions/Nuke/i18n/lb.json
@@ -16,6 +16,7 @@
"nuke-multiplepeople": "Masse-Läschung vu Säiten déi rezent derbäigesat goufen",
"nuke-tools": "Dësen Tool erlaabt vill Säite mateneen ze läschen, déi vun engem Benotzer oder vun enger IP-Adress ugeluecht goufen.\nGitt w.e.g. d'IP-Adress respektiv de Benotzer u fir eng Lëscht vun de Säiten ze kréien déi geläscht solle ginn, oder loosst et eidel fir all Benotzer.",
"nuke-submit-user": "Lass",
+ "nuke-toggleinvert": "Ëmdréinen",
"nuke-submit-delete": "Ugewielt läschen",
"right-nuke": "Vill Säite matenee läschen",
"nuke-select": "Eraussichen:$1",
diff --git a/extensions/Nuke/i18n/lt.json b/extensions/Nuke/i18n/lt.json
index ad94ed52..45d73d67 100644
--- a/extensions/Nuke/i18n/lt.json
+++ b/extensions/Nuke/i18n/lt.json
@@ -3,7 +3,8 @@
"authors": [
"Eitvys200",
"Homo",
- "Matasg"
+ "Matasg",
+ "Pofka"
]
},
"nuke": "Masinis trynimas",
@@ -13,6 +14,7 @@
"nuke-defaultreason": "Masinis pašalinimas puslapių, kuriuos sukūrė $1",
"nuke-tools": "Šis įrankis leidžia masiškai ištrinti puslapius, neseniai sukurtus nurodyto naudotojo ar IP.\nĮrašykite naudotojo vardą ar IP adresą, kad gautumėte trintinų puslapių sąrašą.",
"nuke-submit-user": "Išsiųsti",
+ "nuke-toggleinvert": "Invertuoti",
"nuke-submit-delete": "Ištrinti pasirinktus(ą)",
"right-nuke": "Masinis puslapių trynėjas",
"nuke-select": "Pasirinkite: $1",
diff --git a/extensions/Nuke/i18n/mk.json b/extensions/Nuke/i18n/mk.json
index 421e2693..f8d617b3 100644
--- a/extensions/Nuke/i18n/mk.json
+++ b/extensions/Nuke/i18n/mk.json
@@ -14,6 +14,7 @@
"nuke-multiplepeople": "Масовно бришење на неодамна додадени страници",
"nuke-tools": "Оваа алатка овозможува збирни бришења на страници неодамна додадени од извесен корисник или IP-адреса.\nВнесете го корисничкото име или IP-адреса за да го добиете списокот на страници за бришење, или пак оставете го празно ако сакате да се наведат сите корисници.",
"nuke-submit-user": "Изврши",
+ "nuke-toggleinvert": "Избери обратно",
"nuke-submit-delete": "Избриши ги избраните",
"right-nuke": "Групно бришење на страници",
"nuke-select": "Одбери: $1",
diff --git a/extensions/Nuke/i18n/nl.json b/extensions/Nuke/i18n/nl.json
index b077dbb8..3127483b 100644
--- a/extensions/Nuke/i18n/nl.json
+++ b/extensions/Nuke/i18n/nl.json
@@ -4,7 +4,8 @@
"SPQRobin",
"Siebrand",
"Sjoerddebruin",
- "Wiki13"
+ "Wiki13",
+ "JensRiskin"
]
},
"nuke": "Massaal verwijderen",
@@ -17,6 +18,7 @@
"nuke-multiplepeople": "Massaal verwijderen van recent toegevoegde pagina's",
"nuke-tools": "Dit hulpmiddel maakt het mogelijk pagina's die recentelijk zijn aangemaakt door een gebruiker of IP-adres massaal te verwijderen.\nVoer de gebruikersnaam of het IP-adres in voor een lijst van te verwijderen pagina's of laat leeg voor alle gebruikers.",
"nuke-submit-user": "OK",
+ "nuke-toggleinvert": "Keer om",
"nuke-submit-delete": "Geselecteerde pagina's verwijderen",
"right-nuke": "Massaal pagina's verwijderen",
"nuke-select": "Selectie: $1",
diff --git a/extensions/Nuke/i18n/pt.json b/extensions/Nuke/i18n/pt.json
index b33a4c43..518e7a79 100644
--- a/extensions/Nuke/i18n/pt.json
+++ b/extensions/Nuke/i18n/pt.json
@@ -12,12 +12,13 @@
"nuke": "Eliminação em massa",
"nuke-desc": "[[Special:Nuke|Página especial]] que permite que os administradores apaguem páginas de forma massiva",
"nuke-nopages": "Não há novas páginas de [[Special:Contributions/$1|{{GENDER:$1|$1}}]] nas mudanças recentes.",
- "nuke-list": "As páginas a seguir foram criadas recentemente por [[Special:Contributions/$1|$1]]; introduza um comentário e pressione o botão a seguir para eliminá-las.",
+ "nuke-list": "As páginas a seguir foram criadas recentemente por [[Special:Contributions/$1|{{GENDER:$1|$1}}]]; \nintroduza um comentário e pressione o botão a seguir para eliminá-las.",
"nuke-list-multiple": "As seguintes páginas foram criadas recentemente;\nintroduza um comentário e clique o botão para eliminá-las.",
- "nuke-defaultreason": "Eliminação em massa de páginas criadas por $1",
+ "nuke-defaultreason": "Eliminação em massa de páginas criadas por [[Special:Contributions/$1|{{GENDER:$1|$1}}]]",
"nuke-multiplepeople": "Eliminação em massa de páginas recentemente adicionadas",
"nuke-tools": "Esta ferramenta permite a eliminação em massa de páginas criadas recentemente por um utilizador ou IP específico. Forneça o nome de utilizador ou o IP para obter a lista de páginas a eliminar, ou deixe em branco para todos os utilizadores.",
"nuke-submit-user": "Ir",
+ "nuke-toggleinvert": "Inverter",
"nuke-submit-delete": "Eliminar as selecionadas",
"right-nuke": "Eliminar páginas em massa",
"nuke-select": "Selecionar: $1",
@@ -26,6 +27,9 @@
"nuke-editby": "Criada por [[Special:Contributions/$1|{{GENDER:$1|$1}}]]",
"nuke-deleted": "A página '''$1''' foi eliminada.",
"nuke-not-deleted": "Não foi possível eliminar a página [[:$1]].",
+ "nuke-delete-more": "[[Special:Nuke|Eliminar mais páginas]]",
+ "nuke-nopages-global": "Não existem páginas novas nas [[Special:RecentChanges|mudanças recentes]].",
+ "nuke-viewchanges": "ver alterações",
"nuke-linkoncontribs": "eliminação em massa",
"nuke-linkoncontribs-text": "Eliminar em massa páginas em que este utilizador é o único autor"
}
diff --git a/extensions/Nuke/i18n/qqq.json b/extensions/Nuke/i18n/qqq.json
index 2156b1db..94f09897 100644
--- a/extensions/Nuke/i18n/qqq.json
+++ b/extensions/Nuke/i18n/qqq.json
@@ -10,12 +10,13 @@
"Siebrand",
"The Evil IP address",
"Umherirrender",
- "Yekrats"
+ "Yekrats",
+ "Liuxinyu970226"
]
},
"nuke": "{{doc-special|Nuke}}\nThe Nuke extension allows for sysops to delete a large number of pages (\"Mass delete\").\nFor more information, see http://www.mediawiki.org/wiki/Extension:Nuke\n{{Identical|Mass delete}}",
"action-nuke": "{{doc-action|nuke}}",
- "nuke-desc": "{{desc|name=Nuke|url=http://www.mediawiki.org/wiki/Extension:Nuke}}\nThe Nuke extension allows for sysops to delete a large number of pages (\"Mass delete\").",
+ "nuke-desc": "{{desc|name=Nuke|url=https://www.mediawiki.org/wiki/Extension:Nuke}}\nThe Nuke extension allows for sysops to delete a large number of pages (\"Mass delete\").",
"nuke-nopages": "Used if there are no pages to delete and the username is not empty.\n\nParameters:\n* $1 - a username\n\nSee also:\n* {{msg-mw|Nuke-nopages-global}}",
"nuke-list": "This message refers to:\n* the comment (reason) field which has the label {{msg-mw|deletecomment}}\n* the button labeled {{msg-mw|nuke-submit-delete}}.\nParameters:\n* $1 - username\nSee also:\n* {{msg-mw|Nuke-list-multiple}}",
"nuke-list-multiple": "This message refers to:\n* the comment (reason) field which has the label {{msg-mw|deletecomment}}\n* the button labeled {{msg-mw|nuke-submit-delete}}.\nSee also:\n* {{msg-mw|Nuke-list}}",
@@ -23,6 +24,7 @@
"nuke-multiplepeople": "Reason for deletion in logs, when pages created by multiple users were deleted.\n\n{{msg-mw|nuke-defaultreason}} is used when pages created by only 1 user are deleted.",
"nuke-tools": "Used as intro text for the Nuke (mass deletion) form.",
"nuke-submit-user": "{{Identical|Go}}",
+ "nuke-toggleinvert": "Used to invert checkbox selection.\n{{Identical|Invert}}",
"nuke-submit-delete": "Submit button to delete the selected pages.",
"right-nuke": "{{doc-right|nuke}}",
"nuke-select": "Parameters:\n* $1 - two links: {{msg-mw|Powersearch-toggleall}} and {{msg-mw|Powersearch-togglenone}} which respectively selects all pages and de-selects all\npages\n{{Identical|Select}}",
diff --git a/extensions/Nuke/i18n/roa-tara.json b/extensions/Nuke/i18n/roa-tara.json
index b09b1fb2..0f9389d6 100644
--- a/extensions/Nuke/i18n/roa-tara.json
+++ b/extensions/Nuke/i18n/roa-tara.json
@@ -14,6 +14,7 @@
"nuke-multiplepeople": "Scangellazione massive de le pàggene aggiunde de recende",
"nuke-tools": "Stu strumende permette le scangellazziune de masse de le pàggene aggiunde de recende da 'nu certe utende o IP.<br />\nMitte 'u nome de l'utende o l'indirizze IP pe avè 'n'elenghe de le pàggene de scangellà, o lasse vianghe pe tutte l'utinde.",
"nuke-submit-user": "Veje",
+ "nuke-toggleinvert": "'Nverte",
"nuke-submit-delete": "Scangelle 'a selezione",
"right-nuke": "Scangellazione de masse de le pàggene",
"nuke-select": "Scacchie: $1",
@@ -27,5 +28,6 @@
"nuke-nopages-global": "Non ge stonne pàggene nove jndr'à le [[Special:RecentChanges|cangiaminde recende]].",
"nuke-viewchanges": "vide le cangiaminde",
"nuke-namespace": "Limite a namespace:",
- "nuke-linkoncontribs": "scangellazione de masse"
+ "nuke-linkoncontribs": "scangellazione de masse",
+ "nuke-linkoncontribs-text": "Pàggene da scangellà massive addò stu utende jè 'u sole autore"
}
diff --git a/extensions/Nuke/i18n/ru.json b/extensions/Nuke/i18n/ru.json
index 7fb378a8..c27a67d9 100644
--- a/extensions/Nuke/i18n/ru.json
+++ b/extensions/Nuke/i18n/ru.json
@@ -22,6 +22,7 @@
"nuke-multiplepeople": "Массовое удаление недавно добавленных страниц",
"nuke-tools": "Эта страница позволяет множественно удалять страницы, недавно созданные определённым участником или с заданного IP-адреса.\nЧтобы получить список страниц для удаления, введите имя участника или IP-адрес или оставьте поле пустым, если хотите выбрать всех участников.",
"nuke-submit-user": "Выполнить",
+ "nuke-toggleinvert": "Инвертировать",
"nuke-submit-delete": "Удалить выбранные",
"right-nuke": "множественное удаление страниц",
"nuke-select": "Выбор: $1",
diff --git a/extensions/Nuke/i18n/sl.json b/extensions/Nuke/i18n/sl.json
index 3c661df1..79852f9d 100644
--- a/extensions/Nuke/i18n/sl.json
+++ b/extensions/Nuke/i18n/sl.json
@@ -14,6 +14,7 @@
"nuke-multiplepeople": "Množični izbris nedavno dodanih strani",
"nuke-tools": "To orodje omogoča množični izbris strani, ki jih je nedavno ustvaril določen uporabnik ali IP.\nVnesite uporabniško ime ali IP, da pridobite seznam strani za izbris, ali pustite prazno za vse uporabnike.",
"nuke-submit-user": "Pojdi",
+ "nuke-toggleinvert": "Obrni",
"nuke-submit-delete": "Izbriši izbrano",
"right-nuke": "Množično brisanje strani",
"nuke-select": "Izberite: $1",
diff --git a/extensions/Nuke/i18n/sr-ec.json b/extensions/Nuke/i18n/sr-ec.json
index f9348e02..812be549 100644
--- a/extensions/Nuke/i18n/sr-ec.json
+++ b/extensions/Nuke/i18n/sr-ec.json
@@ -12,7 +12,7 @@
"nuke-desc": "Даје администратору могућност да [[Special:Nuke|масовно брише]] странице.",
"nuke-nopages": "Нема нових страница од стране корисника [[Special:Contributions/$1|$1]] у скорашњим изменама.",
"nuke-list": "Следеће странице је скоро направио корисник [[Special:Contributions/$1|{{GENDER:$1|$1}}]]; оставите коментар и притисните дугме за њихово брисање.",
- "nuke-defaultreason": "Масовно брисање страница које је направио корисник $1",
+ "nuke-defaultreason": "Масовно брисање страница које је направио/ла [[Special:Contributions/$1|{{GENDER:$1|$1}}]]",
"nuke-multiplepeople": "Масовно брисање недавно додатих страница",
"nuke-tools": "Ова алатка омогућава збирно брисање страница које је недавно додао одређени корисник (са налогом или без њега).\nУнесите корисничко име или ИП адресу да бисте добили списак страница за брисање, или оставите празно ако желите да се наведу сви корисници.",
"nuke-submit-user": "Иди",
@@ -21,7 +21,7 @@
"nuke-select": "Изабери: $1",
"nuke-userorip": "Корисничко име, ИП адреса или празно:",
"nuke-maxpages": "Највећи број страница:",
- "nuke-editby": "Направио [[Special:Contributions/$1|$1]]",
+ "nuke-editby": "Направио [[Special:Contributions/$1|{{GENDER:$1|$1}}]]",
"nuke-deleted": "Страница '''$1''' је обрисана.",
"nuke-not-deleted": "'''Не могу''' да обришем страницу [[:$1]].",
"nuke-delete-more": "[[Special:Nuke|Обриши још страница]]",
diff --git a/extensions/Nuke/i18n/sr-el.json b/extensions/Nuke/i18n/sr-el.json
index 1de4b024..3213960e 100644
--- a/extensions/Nuke/i18n/sr-el.json
+++ b/extensions/Nuke/i18n/sr-el.json
@@ -11,7 +11,7 @@
"nuke-desc": "Daje administratoru mogućnost da [[Special:Nuke|masovno briše]] stranice.",
"nuke-nopages": "Nema novih stranica od strane korisnika [[Special:Contributions/$1|$1]] u skorašnjim izmenama.",
"nuke-list": "Sledeće stranice je skoro napravio korisnik [[Special:Contributions/$1|{{GENDER:$1|$1}}]]; ostavite komentar i pritisnite dugme za njihovo brisanje.",
- "nuke-defaultreason": "Masovno brisanje stranica koje je napravio korisnik $1.",
+ "nuke-defaultreason": "Masovno brisanje stranica koje je napravio/la [[Special:Contributions/$1|{{GENDER:$1|$1}}]]",
"nuke-multiplepeople": "Masovno brisanje nedavno dodatih stranica",
"nuke-tools": "Ova alatka omogućava zbirno brisanje stranica koje je nedavno dodao određeni korisnik (sa nalogom ili bez njega).\nUnesite korisničko ime ili IP adresu da biste dobili spisak stranica za brisanje, ili ostavite prazno ako želite da se navedu svi korisnici.",
"nuke-submit-user": "Idi",
@@ -20,7 +20,7 @@
"nuke-select": "Izaberi: $1",
"nuke-userorip": "Korisničko ime, IP adresa ili prazno:",
"nuke-maxpages": "Najveći broj stranica:",
- "nuke-editby": "Napravio [[Special:Contributions/$1|$1]]",
+ "nuke-editby": "Napravio [[Special:Contributions/$1|{{GENDER:$1|$1}}]]",
"nuke-deleted": "Stranica '''$1''' je obrisana.",
"nuke-not-deleted": "'''Ne mogu''' da obrišem stranicu [[:$1]].",
"nuke-delete-more": "[[Special:Nuke|Obriši još stranica]]",
diff --git a/extensions/Nuke/i18n/sv.json b/extensions/Nuke/i18n/sv.json
index 1aca297b..889188b8 100644
--- a/extensions/Nuke/i18n/sv.json
+++ b/extensions/Nuke/i18n/sv.json
@@ -6,7 +6,8 @@
"Lejonel",
"Martinwiss",
"Tobulos1",
- "WikiPhoenix"
+ "WikiPhoenix",
+ "Ainali"
]
},
"nuke": "Massradering",
@@ -19,6 +20,7 @@
"nuke-multiplepeople": "Massradering av nyligen tillagda sidor",
"nuke-tools": "Det här verktyget gör det möjligt att massradera sidor som nyligen skapats av en viss användare eller IP-adress.\nAnge användarnamnet eller IP-adressen för att se en lista över sidor som kan tas bort, eller lämna tomt för alla användare.",
"nuke-submit-user": "Visa",
+ "nuke-toggleinvert": "Invertera",
"nuke-submit-delete": "Ta bort valda",
"right-nuke": "Massradera sidor",
"nuke-select": "Välj: $1",
diff --git a/extensions/Nuke/i18n/zh-hans.json b/extensions/Nuke/i18n/zh-hans.json
index 8e5089a7..d49f8e0e 100644
--- a/extensions/Nuke/i18n/zh-hans.json
+++ b/extensions/Nuke/i18n/zh-hans.json
@@ -10,7 +10,9 @@
"Xiaomingyan",
"Yfdyh000",
"阿pp",
- "Mywood"
+ "Mywood",
+ "Impersonator 1",
+ "Liuxinyu970226"
]
},
"nuke": "大量删除",
@@ -23,6 +25,7 @@
"nuke-multiplepeople": "大量删除最近添加的页面",
"nuke-tools": "此工具允许大量删除指定用户或IP地址在最近创建的页面。输入用户名或IP地址可获取可删除页面列表,留白则检索所有用户。",
"nuke-submit-user": "提交",
+ "nuke-toggleinvert": "反选",
"nuke-submit-delete": "删除所选",
"right-nuke": "删除大量页面",
"nuke-select": "选择:$1",
diff --git a/extensions/Nuke/i18n/zh-hant.json b/extensions/Nuke/i18n/zh-hant.json
index 6755a932..a1c0b0a9 100644
--- a/extensions/Nuke/i18n/zh-hant.json
+++ b/extensions/Nuke/i18n/zh-hant.json
@@ -7,7 +7,8 @@
"Liangent",
"Liuxinyu970226",
"Mark85296341",
- "Shinjiman"
+ "Shinjiman",
+ "LNDDYL"
]
},
"nuke": "大量刪除",
@@ -18,21 +19,21 @@
"nuke-list-multiple": "下列為最近建立的頁面,\n請填寫評論並且點選按鈕刪除。",
"nuke-defaultreason": "大量刪除由 [[Special:Contributions/$1|$1]] 所建立的頁面",
"nuke-multiplepeople": "大量刪除最近新增的頁面",
- "nuke-tools": "此工具可大量刪除指定使用者或 IP 位址最近新增的頁面。\n請輸入使用者名稱或 IP 位址取得欲刪除的頁面清單,或空白代表不指定。",
+ "nuke-tools": "此工具可大量刪除指定使用者或 IP 位址最近新增的頁面。\n請輸入使用者名稱或 IP 位址取得欲刪除的頁面清單,或留空代表所有使用者。",
"nuke-submit-user": "執行",
"nuke-submit-delete": "刪除已選擇",
"right-nuke": "大量刪除頁面",
"nuke-select": "選擇:$1",
"nuke-userorip": "使用者名稱、IP 位址或空白:",
"nuke-maxpages": "頁面數量上限:",
- "nuke-editby": "由 [[Special:Contributions/$1|$1]] 所建立",
+ "nuke-editby": "由 [[Special:Contributions/$1|$1]] 建立",
"nuke-deleted": "已刪除頁面 '''$1'''。",
"nuke-not-deleted": "'''無法'''刪除頁面 [[:$1]]。",
"nuke-delete-more": "[[Special:Nuke|刪除更多頁面]]",
"nuke-pattern": "頁面名稱模式:",
- "nuke-nopages-global": "[[Special:RecentChanges|最近變更]] 中沒有新的頁面。",
+ "nuke-nopages-global": "[[Special:RecentChanges|近期變更]] 中沒有新的頁面。",
"nuke-viewchanges": "檢視變更",
"nuke-namespace": "限制命名空間為:",
"nuke-linkoncontribs": "大量刪除",
- "nuke-linkoncontribs-text": "只大量刪除此使用者為作者的頁面"
+ "nuke-linkoncontribs-text": "大量刪除此使用者是唯一作者的頁面"
}
diff --git a/extensions/ParserFunctions/Expr.php b/extensions/ParserFunctions/Expr.php
index 70d9b8d4..ef98c263 100644
--- a/extensions/ParserFunctions/Expr.php
+++ b/extensions/ParserFunctions/Expr.php
@@ -48,7 +48,7 @@ define( 'EXPR_PI', 36 );
define( 'EXPR_FMOD', 37 );
define( 'EXPR_SQRT' , 38 );
-class ExprError extends MWException {
+class ExprError extends Exception {
/**
* @param $msg string
* @param $parameter string
diff --git a/extensions/ParserFunctions/ParserFunctions.hooks.php b/extensions/ParserFunctions/ParserFunctions.hooks.php
new file mode 100644
index 00000000..bac580c0
--- /dev/null
+++ b/extensions/ParserFunctions/ParserFunctions.hooks.php
@@ -0,0 +1,68 @@
+<?php
+
+class ParserFunctionsHooks {
+
+ /**
+ * Enable string functions, when running Wikimedia Jenkins unit tests.
+ *
+ * Running Jenkins unit tests without setting $wgPFEnableStringFunctions = true;
+ * will cause all the parser tests for string functions to be skipped.
+ */
+ public static function onRegistration() {
+ if ( isset( $GLOBALS['wgWikimediaJenkinsCI'] ) && $GLOBALS['wgWikimediaJenkinsCI'] === true ) {
+ $GLOBALS['wgPFEnableStringFunctions'] = true;
+ }
+ }
+
+ /**
+ * @param $parser Parser
+ * @return bool
+ */
+ public static function onParserFirstCallInit( $parser ) {
+ global $wgPFEnableStringFunctions;
+
+ // These functions accept DOM-style arguments
+ $parser->setFunctionHook( 'if', 'ExtParserFunctions::ifObj', Parser::SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'ifeq', 'ExtParserFunctions::ifeqObj', Parser::SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'switch', 'ExtParserFunctions::switchObj', Parser::SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'ifexist', 'ExtParserFunctions::ifexistObj', Parser::SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'ifexpr', 'ExtParserFunctions::ifexprObj', Parser::SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'iferror', 'ExtParserFunctions::iferrorObj', Parser::SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'time', 'ExtParserFunctions::timeObj', Parser::SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'timel', 'ExtParserFunctions::localTimeObj', Parser::SFH_OBJECT_ARGS );
+
+ $parser->setFunctionHook( 'expr', 'ExtParserFunctions::expr' );
+ $parser->setFunctionHook( 'rel2abs', 'ExtParserFunctions::rel2abs' );
+ $parser->setFunctionHook( 'titleparts', 'ExtParserFunctions::titleparts' );
+
+ // String Functions
+ if ( $wgPFEnableStringFunctions ) {
+ $parser->setFunctionHook( 'len', 'ExtParserFunctions::runLen' );
+ $parser->setFunctionHook( 'pos', 'ExtParserFunctions::runPos' );
+ $parser->setFunctionHook( 'rpos', 'ExtParserFunctions::runRPos' );
+ $parser->setFunctionHook( 'sub', 'ExtParserFunctions::runSub' );
+ $parser->setFunctionHook( 'count', 'ExtParserFunctions::runCount' );
+ $parser->setFunctionHook( 'replace', 'ExtParserFunctions::runReplace' );
+ $parser->setFunctionHook( 'explode', 'ExtParserFunctions::runExplode' );
+ $parser->setFunctionHook( 'urldecode', 'ExtParserFunctions::runUrlDecode' );
+ }
+
+ return true;
+ }
+
+ /**
+ * @param $files array
+ * @return bool
+ */
+ public static function onUnitTestsList( &$files ) {
+ $files[] = __DIR__ . '/tests/ExpressionTest.php';
+ return true;
+ }
+
+ public static function onScribuntoExternalLibraries( $engine, array &$extraLibraries ) {
+ if ( $engine == 'lua' ) {
+ $extraLibraries['mw.ext.ParserFunctions'] = 'Scribunto_LuaParserFunctionsLibrary';
+ }
+ return true;
+ }
+}
diff --git a/extensions/ParserFunctions/ParserFunctions.i18n.magic.php b/extensions/ParserFunctions/ParserFunctions.i18n.magic.php
index d4e1b0f9..363f8781 100644
--- a/extensions/ParserFunctions/ParserFunctions.i18n.magic.php
+++ b/extensions/ParserFunctions/ParserFunctions.i18n.magic.php
@@ -216,6 +216,20 @@ $magicWords['fr'] = array(
'urldecode' => array( 0, 'décoderurl', 'decodeurl' ),
);
+/** Western Frisian (Frysk) */
+$magicWords['fy'] = array(
+ 'expr' => array( 0, 'ekspresje' ),
+ 'if' => array( 0, 'as' ),
+ 'ifeq' => array( 0, 'asgelyk' ),
+ 'ifexpr' => array( 0, 'asekspresje' ),
+ 'iferror' => array( 0, 'asflater' ),
+ 'switch' => array( 0, 'skeakelje' ),
+ 'default' => array( 0, '#standert' ),
+ 'ifexist' => array( 0, 'asbestiet' ),
+ 'time' => array( 0, 'tiid' ),
+ 'timel' => array( 0, 'tiidl' ),
+);
+
/** Hebrew (עברית) */
$magicWords['he'] = array(
'expr' => array( 0, 'חשב' ),
@@ -607,7 +621,7 @@ $magicWords['ur'] = array(
'if' => array( 0, 'اگر' ),
);
-/** Uzbek (oʻzbekcha) */
+/** Uzbek (oʻzbekcha/ўзбекча) */
$magicWords['uz'] = array(
'expr' => array( 0, 'ifoda' ),
'if' => array( 0, 'agar' ),
@@ -701,7 +715,15 @@ $magicWords['zh-hans'] = array(
/** Traditional Chinese (中文(繁體)‎) */
$magicWords['zh-hant'] = array(
+ 'expr' => array( 0, '表達式' ),
'if' => array( 0, '若' ),
+ 'ifexpr' => array( 0, '若表達式' ),
+ 'iferror' => array( 0, '如果錯誤' ),
+ 'switch' => array( 0, '轉換' ),
+ 'default' => array( 0, '#默認' ),
'time' => array( 0, '時間' ),
'timel' => array( 0, '時間L' ),
+ 'len' => array( 0, '長度' ),
+ 'count' => array( 0, '計算' ),
+ 'urldecode' => array( 0, 'URI解碼' ),
); \ No newline at end of file
diff --git a/extensions/ParserFunctions/ParserFunctions.i18n.php b/extensions/ParserFunctions/ParserFunctions.i18n.php
deleted file mode 100644
index 3b38caf5..00000000
--- a/extensions/ParserFunctions/ParserFunctions.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShimb0a7afe1ea1a4a8b' ) ) {
- function wfJsonI18nShimb0a7afe1ea1a4a8b( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShimb0a7afe1ea1a4a8b';
-}
diff --git a/extensions/ParserFunctions/ParserFunctions.library.php b/extensions/ParserFunctions/ParserFunctions.library.php
index 7f92140f..d07838dc 100644
--- a/extensions/ParserFunctions/ParserFunctions.library.php
+++ b/extensions/ParserFunctions/ParserFunctions.library.php
@@ -6,7 +6,7 @@ class Scribunto_LuaParserFunctionsLibrary extends Scribunto_LuaLibraryBase {
'expr' => array( $this, 'expr' ),
);
- $this->getEngine()->registerInterface( __DIR__ . '/mw.ext.ParserFunctions.lua', $lib, array() );
+ return $this->getEngine()->registerInterface( __DIR__ . '/mw.ext.ParserFunctions.lua', $lib, array() );
}
public function expr( $expression = null ) {
diff --git a/extensions/ParserFunctions/ParserFunctions.php b/extensions/ParserFunctions/ParserFunctions.php
index 963dbc4d..c38db82e 100644
--- a/extensions/ParserFunctions/ParserFunctions.php
+++ b/extensions/ParserFunctions/ParserFunctions.php
@@ -1,118 +1,15 @@
<?php
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( 'This file is a MediaWiki extension, it is not a valid entry point' );
-}
-
-/**
- * CONFIGURATION
- * These variables may be overridden in LocalSettings.php after you include the
- * extension file.
- */
-
-/**
- * Defines the maximum length of a string that string functions are allowed to operate on
- * Prevention against denial of service by string function abuses.
- */
-$wgPFStringLengthLimit = 1000;
-
-/**
- * Enable string functions.
- *
- * Set this to true if you want your users to be able to implement their own
- * parsers in the ugliest, most inefficient programming language known to man:
- * MediaWiki wikitext with ParserFunctions.
- *
- * WARNING: enabling this may have an adverse impact on the sanity of your users.
- * An alternative, saner solution for embedding complex text processing in
- * MediaWiki templates can be found at: http://www.mediawiki.org/wiki/Extension:Scribunto
- */
-$wgPFEnableStringFunctions = false;
-
-/**
- * Enable string functions, when running Wikimedia Jenkins unit tests.
- *
- * Running Jenkins unit tests without setting $wgPFEnableStringFunctions = true;
- * will cause all the parser tests for string functions to be skipped.
- */
-if ( isset( $wgWikimediaJenkinsCI ) && $wgWikimediaJenkinsCI === true ) {
- $wgPFEnableStringFunctions = true;
-}
-
-/** REGISTRATION */
-$wgExtensionCredits['parserhook'][] = array(
- 'path' => __FILE__,
- 'name' => 'ParserFunctions',
- 'version' => '1.6.0',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:ParserFunctions',
- 'author' => array( 'Tim Starling', 'Robert Rohde', 'Ross McClure', 'Juraj Simlovic' ),
- 'descriptionmsg' => 'pfunc_desc',
-);
-
-$wgAutoloadClasses['ExtParserFunctions'] = __DIR__ . '/ParserFunctions_body.php';
-$wgAutoloadClasses['ExprParser'] = __DIR__ . '/Expr.php';
-$wgAutoloadClasses['ExprError'] = __DIR__ . '/Expr.php';
-$wgAutoloadClasses['Scribunto_LuaParserFunctionsLibrary'] = __DIR__ . '/ParserFunctions.library.php';
-
-$wgMessagesDirs['ParserFunctions'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['ParserFunctions'] = __DIR__ . '/ParserFunctions.i18n.php';
-$wgExtensionMessagesFiles['ParserFunctionsMagic'] = __DIR__ . '/ParserFunctions.i18n.magic.php';
-
-$wgParserTestFiles[] = __DIR__ . "/funcsParserTests.txt";
-$wgParserTestFiles[] = __DIR__ . "/stringFunctionTests.txt";
-
-$wgHooks['ParserFirstCallInit'][] = 'wfRegisterParserFunctions';
-
-/**
- * @param $parser Parser
- * @return bool
- */
-function wfRegisterParserFunctions( $parser ) {
- global $wgPFEnableStringFunctions;
-
- // These functions accept DOM-style arguments
- $parser->setFunctionHook( 'if', 'ExtParserFunctions::ifObj', SFH_OBJECT_ARGS );
- $parser->setFunctionHook( 'ifeq', 'ExtParserFunctions::ifeqObj', SFH_OBJECT_ARGS );
- $parser->setFunctionHook( 'switch', 'ExtParserFunctions::switchObj', SFH_OBJECT_ARGS );
- $parser->setFunctionHook( 'ifexist', 'ExtParserFunctions::ifexistObj', SFH_OBJECT_ARGS );
- $parser->setFunctionHook( 'ifexpr', 'ExtParserFunctions::ifexprObj', SFH_OBJECT_ARGS );
- $parser->setFunctionHook( 'iferror', 'ExtParserFunctions::iferrorObj', SFH_OBJECT_ARGS );
- $parser->setFunctionHook( 'time', 'ExtParserFunctions::timeObj', SFH_OBJECT_ARGS );
- $parser->setFunctionHook( 'timel', 'ExtParserFunctions::localTimeObj', SFH_OBJECT_ARGS );
-
- $parser->setFunctionHook( 'expr', 'ExtParserFunctions::expr' );
- $parser->setFunctionHook( 'rel2abs', 'ExtParserFunctions::rel2abs' );
- $parser->setFunctionHook( 'titleparts', 'ExtParserFunctions::titleparts' );
-
- // String Functions
- if ( $wgPFEnableStringFunctions ) {
- $parser->setFunctionHook( 'len', 'ExtParserFunctions::runLen' );
- $parser->setFunctionHook( 'pos', 'ExtParserFunctions::runPos' );
- $parser->setFunctionHook( 'rpos', 'ExtParserFunctions::runRPos' );
- $parser->setFunctionHook( 'sub', 'ExtParserFunctions::runSub' );
- $parser->setFunctionHook( 'count', 'ExtParserFunctions::runCount' );
- $parser->setFunctionHook( 'replace', 'ExtParserFunctions::runReplace' );
- $parser->setFunctionHook( 'explode', 'ExtParserFunctions::runExplode' );
- $parser->setFunctionHook( 'urldecode', 'ExtParserFunctions::runUrlDecode' );
- }
-
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'ParserFunctions' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['ParserFunctions'] = __DIR__ . '/i18n';
+ $wgExtensionMessagesFiles['ParserFunctionsMagic'] = __DIR__ . '/ParserFunctions.i18n.magic.php';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for ParserFunctions extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
return true;
+} else {
+ die( 'This version of the ParserFunctions extension requires MediaWiki 1.25+' );
}
-
-$wgHooks['UnitTestsList'][] = 'wfParserFunctionsTests';
-
-/**
- * @param $files array
- * @return bool
- */
-function wfParserFunctionsTests( &$files ) {
- $files[] = __DIR__ . '/tests/ExpressionTest.php';
- return true;
-}
-
-$wgHooks['ScribuntoExternalLibraries'][] = function( $engine, array &$extraLibraries ) {
- if( $engine == 'lua' ) {
- $extraLibraries['mw.ext.ParserFunctions'] = 'Scribunto_LuaParserFunctionsLibrary';
- }
- return true;
-};
diff --git a/extensions/ParserFunctions/ParserFunctions_body.php b/extensions/ParserFunctions/ParserFunctions_body.php
index d3debf36..2651b06e 100644
--- a/extensions/ParserFunctions/ParserFunctions_body.php
+++ b/extensions/ParserFunctions/ParserFunctions_body.php
@@ -12,7 +12,6 @@ class ExtParserFunctions {
*/
public static function clearState( $parser ) {
self::$mTimeChars = 0;
- $parser->pf_markerRegex = null;
return true;
}
@@ -31,38 +30,6 @@ class ExtParserFunctions {
}
/**
- * Get the marker regex. Cached.
- * @param $parser Parser
- * @return
- */
- public static function getMarkerRegex( $parser ) {
- self::registerClearHook();
- if ( isset( $parser->pf_markerRegex ) ) {
- return $parser->pf_markerRegex;
- }
-
- wfProfileIn( __METHOD__ );
-
- $prefix = preg_quote( $parser->uniqPrefix(), '/' );
-
- $suffix = preg_quote( Parser::MARKER_SUFFIX, '/' );
-
- $parser->pf_markerRegex = '/' . $prefix . '(?:(?!' . $suffix . ').)*' . $suffix . '/us';
-
- wfProfileOut( __METHOD__ );
- return $parser->pf_markerRegex;
- }
-
- /**
- * @param $parser Parser
- * @param $text string
- * @return string
- */
- private static function killMarkers ( $parser, $text ) {
- return preg_replace( self::getMarkerRegex( $parser ), '' , $text );
- }
-
- /**
* @return ExprParser
*/
public static function &getExprParser() {
@@ -621,13 +588,8 @@ class ExtParserFunctions {
* @return int
*/
public static function runLen ( $parser, $inStr = '' ) {
- wfProfileIn( __METHOD__ );
-
- $inStr = self::killMarkers( $parser, (string)$inStr );
- $len = mb_strlen( $inStr );
-
- wfProfileOut( __METHOD__ );
- return $len;
+ $inStr = $parser->killMarkers( (string)$inStr );
+ return mb_strlen( $inStr );
}
/**
@@ -644,23 +606,19 @@ class ExtParserFunctions {
* @return int|string
*/
public static function runPos ( $parser, $inStr = '', $inNeedle = '', $inOffset = 0 ) {
- wfProfileIn( __METHOD__ );
-
- $inStr = self::killMarkers( $parser, (string)$inStr );
- $inNeedle = self::killMarkers( $parser, (string)$inNeedle );
+ $inStr = $parser->killMarkers( (string)$inStr );
+ $inNeedle = $parser->killMarkers( (string)$inNeedle );
if ( !self::checkLength( $inStr ) ||
!self::checkLength( $inNeedle ) ) {
- wfProfileOut( __METHOD__ );
return self::tooLongError();
}
if ( $inNeedle == '' ) { $inNeedle = ' '; }
- $pos = mb_strpos( $inStr, $inNeedle, $inOffset );
+ $pos = mb_strpos( $inStr, $inNeedle, intval( $inOffset ) );
if ( $pos === false ) { $pos = ""; }
- wfProfileOut( __METHOD__ );
return $pos;
}
@@ -677,14 +635,11 @@ class ExtParserFunctions {
* @return int|string
*/
public static function runRPos ( $parser, $inStr = '', $inNeedle = '' ) {
- wfProfileIn( __METHOD__ );
-
- $inStr = self::killMarkers( $parser, (string)$inStr );
- $inNeedle = self::killMarkers( $parser, (string)$inNeedle );
+ $inStr = $parser->killMarkers( (string)$inStr );
+ $inNeedle = $parser->killMarkers( (string)$inNeedle );
if ( !self::checkLength( $inStr ) ||
!self::checkLength( $inNeedle ) ) {
- wfProfileOut( __METHOD__ );
return self::tooLongError();
}
@@ -693,7 +648,6 @@ class ExtParserFunctions {
$pos = mb_strrpos( $inStr, $inNeedle );
if ( $pos === false ) { $pos = -1; }
- wfProfileOut( __METHOD__ );
return $pos;
}
@@ -716,12 +670,9 @@ class ExtParserFunctions {
* @return string
*/
public static function runSub ( $parser, $inStr = '', $inStart = 0, $inLength = 0 ) {
- wfProfileIn( __METHOD__ );
-
- $inStr = self::killMarkers( $parser, (string)$inStr );
+ $inStr = $parser->killMarkers( (string)$inStr );
if ( !self::checkLength( $inStr ) ) {
- wfProfileOut( __METHOD__ );
return self::tooLongError();
}
@@ -731,7 +682,6 @@ class ExtParserFunctions {
$result = mb_substr( $inStr, intval( $inStart ), intval( $inLength ) );
}
- wfProfileOut( __METHOD__ );
return $result;
}
@@ -747,14 +697,11 @@ class ExtParserFunctions {
* @return int|string
*/
public static function runCount ( $parser, $inStr = '', $inSubStr = '' ) {
- wfProfileIn( __METHOD__ );
-
- $inStr = self::killMarkers( $parser, (string)$inStr );
- $inSubStr = self::killMarkers( $parser, (string)$inSubStr );
+ $inStr = $parser->killMarkers( (string)$inStr );
+ $inSubStr = $parser->killMarkers( (string)$inSubStr );
if ( !self::checkLength( $inStr ) ||
!self::checkLength( $inSubStr ) ) {
- wfProfileOut( __METHOD__ );
return self::tooLongError();
}
@@ -764,7 +711,6 @@ class ExtParserFunctions {
$result = mb_substr_count( $inStr, $inSubStr );
- wfProfileOut( __METHOD__ );
return $result;
}
@@ -786,16 +732,14 @@ class ExtParserFunctions {
public static function runReplace( $parser, $inStr = '',
$inReplaceFrom = '', $inReplaceTo = '', $inLimit = -1 ) {
global $wgPFStringLengthLimit;
- wfProfileIn( __METHOD__ );
- $inStr = self::killMarkers( $parser, (string)$inStr );
- $inReplaceFrom = self::killMarkers( $parser, (string)$inReplaceFrom );
- $inReplaceTo = self::killMarkers( $parser, (string)$inReplaceTo );
+ $inStr = $parser->killMarkers( (string)$inStr );
+ $inReplaceFrom = $parser->killMarkers( (string)$inReplaceFrom );
+ $inReplaceTo = $parser->killMarkers( (string)$inReplaceTo );
if ( !self::checkLength( $inStr ) ||
!self::checkLength( $inReplaceFrom ) ||
!self::checkLength( $inReplaceTo ) ) {
- wfProfileOut( __METHOD__ );
return self::tooLongError();
}
@@ -822,11 +766,9 @@ class ExtParserFunctions {
$inReplaceTo, $inStr, $limit );
if ( !self::checkLength( $result ) ) {
- wfProfileOut( __METHOD__ );
return self::tooLongError();
}
- wfProfileOut( __METHOD__ );
return $result;
}
@@ -848,10 +790,8 @@ class ExtParserFunctions {
* @return string
*/
public static function runExplode ( $parser, $inStr = '', $inDiv = '', $inPos = 0, $inLim = null ) {
- wfProfileIn( __METHOD__ );
-
- $inStr = self::killMarkers( $parser, (string)$inStr );
- $inDiv = self::killMarkers( $parser, (string)$inDiv );
+ $inStr = $parser->killMarkers( (string)$inStr );
+ $inDiv = $parser->killMarkers( (string)$inDiv );
if ( $inDiv == '' ) {
$inDiv = ' ';
@@ -859,7 +799,6 @@ class ExtParserFunctions {
if ( !self::checkLength( $inStr ) ||
!self::checkLength( $inDiv ) ) {
- wfProfileOut( __METHOD__ );
return self::tooLongError();
}
@@ -875,7 +814,6 @@ class ExtParserFunctions {
$result = '';
}
- wfProfileOut( __METHOD__ );
return $result;
}
@@ -888,18 +826,12 @@ class ExtParserFunctions {
* @return string
*/
public static function runUrlDecode( $parser, $inStr = '' ) {
- wfProfileIn( __METHOD__ );
-
- $inStr = self::killMarkers( $parser, (string)$inStr );
+ $inStr = $parser->killMarkers( (string)$inStr );
if ( !self::checkLength( $inStr ) ) {
- wfProfileOut( __METHOD__ );
return self::tooLongError();
}
- $result = urldecode( $inStr );
-
- wfProfileOut( __METHOD__ );
- return $result;
+ return urldecode( $inStr );
}
/**
diff --git a/extensions/ParserFunctions/extension.json b/extensions/ParserFunctions/extension.json
new file mode 100644
index 00000000..0198398a
--- /dev/null
+++ b/extensions/ParserFunctions/extension.json
@@ -0,0 +1,48 @@
+{
+ "name": "ParserFunctions",
+ "version": "1.6.0",
+ "author": [
+ "Tim Starling",
+ "Robert Rohde",
+ "Ross McClure",
+ "Juraj Simlovic"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:ParserFunctions",
+ "descriptionmsg": "pfunc_desc",
+ "type": "parserhook",
+ "config": {
+ "PFEnableStringFunctions": false,
+ "PFStringLengthLimit": 1000
+ },
+ "callback": "ParserFunctionsHooks::onRegistration",
+ "ExtensionMessagesFiles": {
+ "ParserFunctionsMagic": "ParserFunctions.i18n.magic.php"
+ },
+ "MessagesDirs": {
+ "ParserFunctions": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "ParserFirstCallInit": [
+ "ParserFunctionsHooks::onParserFirstCallInit"
+ ],
+ "UnitTestsList": [
+ "ParserFunctionsHooks::onUnitTestsList"
+ ],
+ "ScribuntoExternalLibraries": [
+ "ParserFunctionsHooks::onScribuntoExternalLibraries"
+ ]
+ },
+ "AutoloadClasses": {
+ "ExtParserFunctions": "ParserFunctions_body.php",
+ "ExprParser": "Expr.php",
+ "ExprError": "Expr.php",
+ "Scribunto_LuaParserFunctionsLibrary": "ParserFunctions.library.php",
+ "ParserFunctionsHooks": "ParserFunctions.hooks.php"
+ },
+ "ParserTestFiles": [
+ "funcsParserTests.txt",
+ "stringFunctionTests.txt"
+ ]
+}
diff --git a/extensions/ParserFunctions/i18n/ace.json b/extensions/ParserFunctions/i18n/ace.json
new file mode 100644
index 00000000..d4fa7ab5
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/ace.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Si Gam Acèh"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "Reuloh ekspresi: Narit \"$1\" hana geuturi.",
+ "pfunc_expr_unrecognised_punctuation": "Reuloh ekspresi: Karakter tanda beuët \"$1\" hana geuturi."
+}
diff --git a/extensions/ParserFunctions/i18n/arq.json b/extensions/ParserFunctions/i18n/arq.json
new file mode 100644
index 00000000..a8eb5208
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/arq.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bachounda",
+ "Oldstoneage"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "غلط فالتعبير: كلمة غير متعرف عليها \"$1\"",
+ "pfunc_expr_unexpected_operator": "غلطة تاع تعبير : عامل '''$1''' ماشي مقارع.",
+ "pfunc_expr_missing_operand": "غلطة ف`التعبير: معمول مودّر لـ$1",
+ "pfunc_expr_unrecognised_punctuation": "غلطه فالتعبير: علامة تنقيط ماشي متعرف عليها \"$1\""
+}
diff --git a/extensions/ParserFunctions/i18n/az.json b/extensions/ParserFunctions/i18n/az.json
index 05cca268..fa04d6a7 100644
--- a/extensions/ParserFunctions/i18n/az.json
+++ b/extensions/ParserFunctions/i18n/az.json
@@ -1,8 +1,22 @@
{
"@metadata": {
"authors": [
- "Cekli829"
+ "Cekli829",
+ "Dağlı95"
]
},
- "pfunc_time_error": "Xəta: yanlış zaman"
+ "pfunc_time_error": "Xəta: yanlış zaman",
+ "pfunc_expr_stack_exhausted": "İfadə xətası: Stek doludur.",
+ "pfunc_expr_unexpected_number": "İfadə xətası: gözlənilməz ədəd",
+ "pfunc_expr_preg_match_failure": "İfadə xətası: Gözlənilməz preg_match nasazlığı",
+ "pfunc_expr_unrecognised_word": "İfadə xətası: tanınmayan ifadə söz \"$1\".",
+ "pfunc_expr_unexpected_operator": "İfadə xətası: gözlənilməz \"$1\" operatoru.",
+ "pfunc_expr_missing_operand": "İfadə xətası: $1 operantı çatışmır.",
+ "pfunc_expr_unexpected_closing_bracket": "İfadə xətası: Gözlənilməz bağlanmış mötərizə",
+ "pfunc_expr_unrecognised_punctuation": "İfadə xətası: \"$1\" punktuasiyasının tanınmayan simvolu.",
+ "pfunc_expr_unclosed_bracket": "İfadə xətası: Mötərizə bağlanılmamışdır.",
+ "pfunc_expr_division_by_zero": "Sıfıra bölmə",
+ "pfunc_expr_invalid_argument_ln": "ln üçün xətalı arqument: <= 0",
+ "pfunc_expr_unknown_error": "İfadə xətası: naməlum xəta ($1)",
+ "pfunc_expr_not_a_number": "$1-də: nəticə ədəd deyildir."
}
diff --git a/extensions/ParserFunctions/i18n/azb.json b/extensions/ParserFunctions/i18n/azb.json
index f56e506b..d92dc2e6 100644
--- a/extensions/ParserFunctions/i18n/azb.json
+++ b/extensions/ParserFunctions/i18n/azb.json
@@ -4,5 +4,9 @@
"Amir a57"
]
},
- "pfunc_time_error": "ختا: یانلیش زامان"
+ "pfunc_time_error": "ختا: یانلیش زامان",
+ "pfunc_expr_unrecognised_word": "عیبارت خطاسی: تانینمایان سوز «$1»",
+ "pfunc_expr_unexpected_operator": "عیبارت خطاسی: عمل ائدن $1 اینتظار دان اوزاق",
+ "pfunc_expr_missing_operand": "عیبارت خطاسی: ایتمیش عمل ائدن $1 اوچون",
+ "pfunc_expr_unrecognised_punctuation": "عیبارت خطاسی: تانیمایان نوقطالنمیش یازی «$1»"
}
diff --git a/extensions/ParserFunctions/i18n/bgn.json b/extensions/ParserFunctions/i18n/bgn.json
new file mode 100644
index 00000000..ec7e084a
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/bgn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "ئبارت ئی ختا: نازانتین کلمه «$1»",
+ "pfunc_expr_unexpected_operator": "ئبارت ئی ختا: $1 ئی ئمل کورت دور شه انتظارا",
+ "pfunc_expr_missing_operand": "ئبارت ئی ختا: زیان بودین ئمل په $1 ئا",
+ "pfunc_expr_unrecognised_punctuation": "ئبارت ئی ختا: نقطه‌گذاری نویسگ دروست نه بوت «$1»"
+}
diff --git a/extensions/ParserFunctions/i18n/ca.json b/extensions/ParserFunctions/i18n/ca.json
index 93bc9e32..9f14268a 100644
--- a/extensions/ParserFunctions/i18n/ca.json
+++ b/extensions/ParserFunctions/i18n/ca.json
@@ -16,7 +16,7 @@
"pfunc_expr_stack_exhausted": "Error de l'expressió: Pila exhaurida",
"pfunc_expr_unexpected_number": "Error de l'expressió: Nombre inesperat",
"pfunc_expr_preg_match_failure": "Error de l'expressió: Error de funció no compresa i inesperada",
- "pfunc_expr_unrecognised_word": "Error de l'expressió: Paraula no reconeguda \"$1\"",
+ "pfunc_expr_unrecognised_word": "Error de l'expressió: Paraula no reconeguda \"$1\".",
"pfunc_expr_unexpected_operator": "Error de l'expressió: Operador $1 inesperat",
"pfunc_expr_missing_operand": "Error de l'expressió: Falta l'operand de $1",
"pfunc_expr_unexpected_closing_bracket": "Error de l'expressió: Parèntesi inesperat",
diff --git a/extensions/ParserFunctions/i18n/de.json b/extensions/ParserFunctions/i18n/de.json
index 7052807c..70de3373 100644
--- a/extensions/ParserFunctions/i18n/de.json
+++ b/extensions/ParserFunctions/i18n/de.json
@@ -19,11 +19,11 @@
"pfunc_expr_stack_exhausted": "Expression-Fehler: Stacküberlauf",
"pfunc_expr_unexpected_number": "Expression-Fehler: Unerwartete Zahl",
"pfunc_expr_preg_match_failure": "Expression-Fehler: Unerwartete „preg_match“-Fehlfunktion",
- "pfunc_expr_unrecognised_word": "Expression-Fehler: Unerkanntes Wort „$1“",
- "pfunc_expr_unexpected_operator": "Expression-Fehler: Unerwarteter Operator $1",
- "pfunc_expr_missing_operand": "Expression-Fehler: Fehlender Operand für $1",
+ "pfunc_expr_unrecognised_word": "Fehler im Ausdruck: Unerkanntes Wort „$1“",
+ "pfunc_expr_unexpected_operator": "Fehler im Ausdruck: Unerwarteter Operator $1",
+ "pfunc_expr_missing_operand": "Fehler im Ausdruck: Fehlender Operand für $1",
"pfunc_expr_unexpected_closing_bracket": "Expression-Fehler: Unerwartete schließende eckige Klammer",
- "pfunc_expr_unrecognised_punctuation": "Expression-Fehler: Unerkanntes Satzzeichen „$1“",
+ "pfunc_expr_unrecognised_punctuation": "Fehler im Ausdruck: Nicht erkanntes Satzzeichen „$1“",
"pfunc_expr_unclosed_bracket": "Expression-Fehler: Nicht geschlossene eckige Klammer",
"pfunc_expr_division_by_zero": "Division durch Null",
"pfunc_expr_invalid_argument": "Ungültiges Argument für $1: < -1 oder > 1",
diff --git a/extensions/ParserFunctions/i18n/es.json b/extensions/ParserFunctions/i18n/es.json
index f4d63d0a..b1b6bca4 100644
--- a/extensions/ParserFunctions/i18n/es.json
+++ b/extensions/ParserFunctions/i18n/es.json
@@ -6,7 +6,8 @@
"Fitoschido",
"Muro de Aguas",
"Remember the dot",
- "Sanbec"
+ "Sanbec",
+ "Macofe"
]
},
"pfunc_desc": "Mejora el analizador lógico con funciones.",
@@ -17,11 +18,11 @@
"pfunc_expr_stack_exhausted": "Error de expresión: Pila agotada",
"pfunc_expr_unexpected_number": "Error con la expresión: Número no esperado",
"pfunc_expr_preg_match_failure": "Error de expresión: Fracaso preg_match no esperado",
- "pfunc_expr_unrecognised_word": "Error con la expresión: La palabra \"$1\" no se reconoce",
- "pfunc_expr_unexpected_operator": "Error con la expresión: Operador $1 no esperado",
- "pfunc_expr_missing_operand": "Error con la expresión: Falta un operador para $1",
+ "pfunc_expr_unrecognised_word": "Error en la expresión: no se reconoce la palabra «$1».",
+ "pfunc_expr_unexpected_operator": "Error en la expresión: operador $1 no esperado.",
+ "pfunc_expr_missing_operand": "Error en la expresión: falta un operando para $1.",
"pfunc_expr_unexpected_closing_bracket": "Error con la expresión: Paréntesis de cierre no esperado",
- "pfunc_expr_unrecognised_punctuation": "Error con la expresión: Carácter de puntuación no reconocido \"$1\"",
+ "pfunc_expr_unrecognised_punctuation": "Error en la expresión: no se reconoce el carácter de puntuación «$1».",
"pfunc_expr_unclosed_bracket": "Error con la expresión: Paréntesis sin cerrar",
"pfunc_expr_division_by_zero": "División entre cero",
"pfunc_expr_invalid_argument": "Argumento no válido para $1: < -1 o > 1.",
diff --git a/extensions/ParserFunctions/i18n/et.json b/extensions/ParserFunctions/i18n/et.json
index a33128ad..ba832d29 100644
--- a/extensions/ParserFunctions/i18n/et.json
+++ b/extensions/ParserFunctions/i18n/et.json
@@ -17,7 +17,7 @@
"pfunc_expr_missing_operand": "Avaldistõrge: Puudub $1-tehte operand",
"pfunc_expr_unexpected_closing_bracket": "Avaldistõrge: Ootamatu lõpusulg",
"pfunc_expr_unrecognised_punctuation": "Avaldistõrge: Tundmatu kirjavahemärk \"$1\"",
- "pfunc_expr_unclosed_bracket": "Avaldistõrge: sulgemata sulg",
+ "pfunc_expr_unclosed_bracket": "Avaldistõrge: sulgemata sulud",
"pfunc_expr_division_by_zero": "Nulliga jagamine",
"pfunc_expr_invalid_argument": "Vigane $1-tehte argument: < -1 või > 1",
"pfunc_expr_invalid_argument_ln": "Vigane ln-tehte argument: <= 0",
diff --git a/extensions/ParserFunctions/i18n/frr.json b/extensions/ParserFunctions/i18n/frr.json
new file mode 100644
index 00000000..fd327ede
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/frr.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Murma174"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "Tiaken-feeler: Ünbekäänd wurd \"$1\"",
+ "pfunc_expr_unexpected_operator": "Tiaken-feeler: Ünbekäänd operaator $1",
+ "pfunc_expr_missing_operand": "Tiaken-feeler: Operand för $1 ei diar",
+ "pfunc_expr_unrecognised_punctuation": "Tiaken-feeler: Ünbekäänd tiaken \"$1\""
+}
diff --git a/extensions/ParserFunctions/i18n/gom-deva.json b/extensions/ParserFunctions/i18n/gom-deva.json
new file mode 100644
index 00000000..88aabea1
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/gom-deva.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Konknni mogi 24",
+ "Supriya kankumbikar"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "अभिव्यक्तींत त्रुटीः अनवळखी उतर \"$1\".",
+ "pfunc_expr_unexpected_operator": "अभिव्यक्ती त्रुटी: अनवळखी $1 कार्यवाहक",
+ "pfunc_expr_missing_operand": "अभिव्यक्ती त्रुटि: $1 चो घटक मेळूंक ना",
+ "pfunc_expr_unrecognised_punctuation": "अभिव्यक्तींत त्रुटीः अनपेक्षीत उदगार चिन्ह \"$1\"."
+}
diff --git a/extensions/ParserFunctions/i18n/id.json b/extensions/ParserFunctions/i18n/id.json
index d5b6a7e1..5f549f39 100644
--- a/extensions/ParserFunctions/i18n/id.json
+++ b/extensions/ParserFunctions/i18n/id.json
@@ -3,7 +3,8 @@
"authors": [
"IvanLanin",
"Meursault2004",
- "Rex"
+ "Rex",
+ "Iwan Novirion"
]
},
"pfunc_desc": "Mengembangkan parser dengan fungsi logis",
@@ -14,11 +15,11 @@
"pfunc_expr_stack_exhausted": "Kesalahan ekspresi: Stack habis",
"pfunc_expr_unexpected_number": "Kesalahan ekspresi: Angka yang tak terduga",
"pfunc_expr_preg_match_failure": "Kesalahan ekspresi: Kegagalan preg_match tak terduga",
- "pfunc_expr_unrecognised_word": "Kesalahan ekspresi: Kata \"$1\" tak dikenal",
+ "pfunc_expr_unrecognised_word": "Kesalahan ekspresi: Kata \"$1\" tak dikenal.",
"pfunc_expr_unexpected_operator": "Kesalahan ekspresi: Operator $1 tak terduga",
"pfunc_expr_missing_operand": "Kesalahan ekspresi: Operand tak ditemukan untuk $1",
"pfunc_expr_unexpected_closing_bracket": "Kesalahan ekspresi: Kurung tutup tak terduga",
- "pfunc_expr_unrecognised_punctuation": "Kesalahan ekspresi: Karakter tanda baca \"$1\" tak dikenali",
+ "pfunc_expr_unrecognised_punctuation": "Kesalahan ekspresi: Karakter tanda baca \"$1\" tak dikenali.",
"pfunc_expr_unclosed_bracket": "Kesalahan ekspresi: Kurung tanpa tutup",
"pfunc_expr_division_by_zero": "Pembagian oleh nol",
"pfunc_expr_invalid_argument": "Argumen tidak berlaku untuk $1: < -1 or > 1",
diff --git a/extensions/ParserFunctions/i18n/it.json b/extensions/ParserFunctions/i18n/it.json
index c73c0887..23d3ece2 100644
--- a/extensions/ParserFunctions/i18n/it.json
+++ b/extensions/ParserFunctions/i18n/it.json
@@ -4,7 +4,8 @@
"Beta16",
"BrokenArrow",
"Darth Kule",
- "Pietrodn"
+ "Pietrodn",
+ "FRacco"
]
},
"pfunc_desc": "Aggiunge al parser una serie di funzioni logiche",
@@ -16,11 +17,11 @@
"pfunc_expr_stack_exhausted": "Errore nell'espressione: stack esaurito",
"pfunc_expr_unexpected_number": "Errore nell'espressione: numero inatteso",
"pfunc_expr_preg_match_failure": "Errore nell'espressione: errore inatteso in preg_match",
- "pfunc_expr_unrecognised_word": "Errore nell'espressione: parola \"$1\" non riconosciuta",
- "pfunc_expr_unexpected_operator": "Errore nell'espressione: operatore $1 inatteso",
- "pfunc_expr_missing_operand": "Errore nell'espressione: operando mancante per $1",
+ "pfunc_expr_unrecognised_word": "Errore nell'espressione: parola \"$1\" non riconosciuta.",
+ "pfunc_expr_unexpected_operator": "Errore nell'espressione: operatore $1 inatteso.",
+ "pfunc_expr_missing_operand": "Errore nell'espressione: operando mancante per $1.",
"pfunc_expr_unexpected_closing_bracket": "Errore nell'espressione: parentesi chiusa inattesa",
- "pfunc_expr_unrecognised_punctuation": "Errore nell'espressione: carattere di punteggiatura \"$1\" non riconosciuto",
+ "pfunc_expr_unrecognised_punctuation": "Errore nell'espressione: carattere di punteggiatura \"$1\" non riconosciuto.",
"pfunc_expr_unclosed_bracket": "Errore nell'espressione: parentesi non chiusa",
"pfunc_expr_division_by_zero": "Divisione per zero",
"pfunc_expr_invalid_argument": "Argomento non valido per $1: < -1 o > 1",
diff --git a/extensions/ParserFunctions/i18n/ko.json b/extensions/ParserFunctions/i18n/ko.json
index afbbaa43..7c33fc64 100644
--- a/extensions/ParserFunctions/i18n/ko.json
+++ b/extensions/ParserFunctions/i18n/ko.json
@@ -5,7 +5,8 @@
"Kwj2772",
"ToePeu",
"Yknok29",
- "아라"
+ "아라",
+ "IRTC1015"
]
},
"pfunc_desc": "파서에 논리 함수를 추가합니다",
@@ -14,19 +15,19 @@
"pfunc_time_too_big": "오류: #time 함수는 9999년까지만을 지원합니다.",
"pfunc_time_too_small": "오류: #time은 0년부터만을 지원합니다.",
"pfunc_rel2abs_invalid_depth": "오류: 경로 구조가 잘못되었습니다: \"$1\" (루트 노드 위의 노드에 접속을 시도했습니다)",
- "pfunc_expr_stack_exhausted": "표현 오류: 스택이 비어 있습니다.",
+ "pfunc_expr_stack_exhausted": "수식 오류: 스택이 비어 있습니다.",
"pfunc_expr_unexpected_number": "표현식 오류: 예상치 못한 숫자입니다.",
"pfunc_expr_preg_match_failure": "표현식 오류: 예상치 못한 preg_match 실패입니다.",
"pfunc_expr_unrecognised_word": "표현식 오류: \"$1\" 낱말을 알 수 없습니다.",
- "pfunc_expr_unexpected_operator": "표현 오류: 예상치 못한 $1 연산자입니다.",
- "pfunc_expr_missing_operand": "표현 오류: $1의 피연산자가 없습니다.",
- "pfunc_expr_unexpected_closing_bracket": "표현 오류: 예상치 못한 괄호 닫기입니다.",
- "pfunc_expr_unrecognised_punctuation": "표현 오류: 알 수 없는 \"$1\" 구두점 문자입니다.",
- "pfunc_expr_unclosed_bracket": "표현 오류: 괄호를 닫지 않았습니다.",
+ "pfunc_expr_unexpected_operator": "수식 오류: 예상치 못한 $1 연산자입니다.",
+ "pfunc_expr_missing_operand": "수식 오류: $1의 피연산자가 없습니다.",
+ "pfunc_expr_unexpected_closing_bracket": "수식 오류: 예상치 못한 괄호 닫기입니다.",
+ "pfunc_expr_unrecognised_punctuation": "수식 오류: 알 수 없는 \"$1\" 구두점 문자입니다.",
+ "pfunc_expr_unclosed_bracket": "수식 오류: 괄호를 닫지 않았습니다.",
"pfunc_expr_division_by_zero": "0으로 나눴습니다.",
"pfunc_expr_invalid_argument": "$1 함수의 변수가 잘못되었습니다: < -1 또는 > 1",
"pfunc_expr_invalid_argument_ln": "자연로그의 진수가 잘못되었습니다: <= 0",
- "pfunc_expr_unknown_error": "표현 오류: 알 수 없는 오류($1)입니다.",
+ "pfunc_expr_unknown_error": "수식 오류: 알 수 없는 오류입니다($1).",
"pfunc_expr_not_a_number": "$1: 결과가 숫자가 아닙니다.",
"pfunc_string_too_long": "오류: 문자열이 $1 글자 제한을 초과하였습니다."
}
diff --git a/extensions/ParserFunctions/i18n/ksh.json b/extensions/ParserFunctions/i18n/ksh.json
index b55e45b7..6a1a5ad4 100644
--- a/extensions/ParserFunctions/i18n/ksh.json
+++ b/extensions/ParserFunctions/i18n/ksh.json
@@ -7,9 +7,10 @@
]
},
"pfunc_desc": "Deit em Wiki Funxione för Entscheidunge un esu jät dobei.",
- "pfunc_time_error": "Fähler: Onjöltijje Zick.",
- "pfunc_time_too_long": "Fähler: #time weed zo öff jebruch.",
- "pfunc_time_too_big": "Ene Fähleres opjefalle: #time kann bloß bes nohm Johr 9999 jonn.",
+ "pfunc_time_error": "Fähler: En onjöltejje Zigg.",
+ "pfunc_time_too_long": "Fähler: <code lang=\"en\" xml:lang=\"en\">#time</code> weed zo öff jebruch.",
+ "pfunc_time_too_big": "Ene Fähler es opjefalle: <code lang=\"en\" xml:lang=\"en\">#time</code> kann blohß bes nohm Johr 9999 jonn.",
+ "pfunc_time_too_small": "Ene Fähler es opjefalle: <code lang=\"en\" xml:lang=\"en\">#time</code> kann blohß Johre övver Noll.",
"pfunc_rel2abs_invalid_depth": "Fähler: Zo fill „retuur“ em Pahdt „$1“ — mer wöre wigger wi för der Aanfang zeröck jejange.",
"pfunc_expr_stack_exhausted": "Fähler en enem Ußdrock: Dä löht der stack övverloufe.",
"pfunc_expr_unexpected_number": "Fähler en enem Ußdrock: En Zahl dom_mer nit äwaade.",
diff --git a/extensions/ParserFunctions/i18n/lrc.json b/extensions/ParserFunctions/i18n/lrc.json
index 85b963cf..de161b96 100644
--- a/extensions/ParserFunctions/i18n/lrc.json
+++ b/extensions/ParserFunctions/i18n/lrc.json
@@ -1,8 +1,15 @@
{
"@metadata": {
"authors": [
- "Bonevarluri"
+ "Bonevarluri",
+ "Mogoeilor"
]
},
- "pfunc_time_error": "خطا:وخت نامعتور."
+ "pfunc_time_error": "خطا:وخت نامعتور.",
+ "pfunc_expr_unrecognised_word": "خطا جمله ای: کلیمه دسه بنی نبیه \"$1\".",
+ "pfunc_expr_unexpected_operator": "خطا جمله: عملدیارکن ناحاستنی $1",
+ "pfunc_expr_missing_operand": "خطا جمله ای:عملیار گم بیه سی $1",
+ "pfunc_expr_unrecognised_punctuation": "خطا جمله ای: کاراکتر نقطه نیائن دسه بنی نبیه\"$1\".",
+ "pfunc_expr_division_by_zero": "بهرکنون وا صفر",
+ "pfunc_expr_invalid_argument_ln": "چک چنه گن سی درینده:<=0."
}
diff --git a/extensions/ParserFunctions/i18n/lt.json b/extensions/ParserFunctions/i18n/lt.json
index b1bfdd2d..ff569ecd 100644
--- a/extensions/ParserFunctions/i18n/lt.json
+++ b/extensions/ParserFunctions/i18n/lt.json
@@ -4,5 +4,9 @@
"Hugo.arg"
]
},
- "pfunc_time_error": "Klaida: neteisingas laikas"
+ "pfunc_time_error": "Klaida: neteisingas laikas",
+ "pfunc_expr_unrecognised_word": "Išraiškos klaida: nežinomas žodis „$1“.",
+ "pfunc_expr_unexpected_operator": "Išraiškos klaida: netikėtas operatorius „$1“.",
+ "pfunc_expr_missing_operand": "Išraiškos klaida: trūksta operando „$1“.",
+ "pfunc_expr_unrecognised_punctuation": "Išraiškos klaida: neatpažintas punktuacijos ženklas „$1“."
}
diff --git a/extensions/ParserFunctions/i18n/mai.json b/extensions/ParserFunctions/i18n/mai.json
new file mode 100644
index 00000000..f9a69e3c
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/mai.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tulsi Bhagat"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "एक्स्प्रेशन गल्ती: अनपेक्षित शब्द \"$1\"।",
+ "pfunc_expr_unexpected_operator": "एक्स्प्रेशन गल्ती: अनपेक्षित $1 ऑपरेटर।",
+ "pfunc_expr_unrecognised_punctuation": "एक्स्प्रेशन गल्ती: अनपेक्षित उद्गार चिन्ह \"$1\"।"
+}
diff --git a/extensions/ParserFunctions/i18n/nap.json b/extensions/ParserFunctions/i18n/nap.json
new file mode 100644
index 00000000..c0a0e6bc
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/nap.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "Espressione 'n errore: Parola scanusciuta \"$1\"",
+ "pfunc_expr_unexpected_operator": "Espressione 'n errore: Operatore $1 inaspettato",
+ "pfunc_expr_missing_operand": "Espressione 'n errore: Operatore zumpato pe' $1.",
+ "pfunc_expr_unrecognised_punctuation": "Espressione 'n errore: Carattere 'e punteggiatura \"$1\" scanusciuto"
+}
diff --git a/extensions/ParserFunctions/i18n/ne.json b/extensions/ParserFunctions/i18n/ne.json
index f0537cd3..c88152f5 100644
--- a/extensions/ParserFunctions/i18n/ne.json
+++ b/extensions/ParserFunctions/i18n/ne.json
@@ -1,10 +1,13 @@
{
"@metadata": {
"authors": [
- "RajeshPandey"
+ "RajeshPandey",
+ "बिप्लब आनन्द"
]
},
"pfunc_time_error": "त्रुटी: गलत/वा हुदैनहुने समय",
"pfunc_time_too_long": "त्रुटी: एकदम धेरै #time callहरु",
- "pfunc_rel2abs_invalid_depth": "त्रुटी: पाथमा (इनभ्यालिड)गलत गहिराइ(डेप्थ) भयो: \"$1\" (ले रुट नोड भन्दापनि माथिको नोडलाइ चलाउन(एकसेस गर्न) खोज्यो)"
+ "pfunc_rel2abs_invalid_depth": "त्रुटी: पाथमा (इनभ्यालिड)गलत गहिराइ(डेप्थ) भयो: \"$1\" (ले रुट नोड भन्दापनि माथिको नोडलाइ चलाउन(एकसेस गर्न) खोज्यो)",
+ "pfunc_expr_unrecognised_word": "अभिव्यक्ति त्रुटि: अज्ञात शब्द \"$1\"।",
+ "pfunc_expr_unrecognised_punctuation": "अभिव्यक्ति त्रुटि: अज्ञात विराम चिन्ह चरित्र \"$1\"।"
}
diff --git a/extensions/ParserFunctions/i18n/pfl.json b/extensions/ParserFunctions/i18n/pfl.json
new file mode 100644
index 00000000..909f0bf3
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/pfl.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "Fehla im Ausdrugg: Uubekondes Woad „$1“",
+ "pfunc_expr_unexpected_operator": "Fehla im Ausdrugg: Uueawadedi Greeß $1",
+ "pfunc_expr_missing_operand": "Ausdrugg-Fehla: Fehldä Greeß fa $1",
+ "pfunc_expr_unrecognised_punctuation": "Fehla im Ausdrugg: Uubekondes Sadzzaische „$1“"
+}
diff --git a/extensions/ParserFunctions/i18n/ps.json b/extensions/ParserFunctions/i18n/ps.json
index 24f52833..8a79666a 100644
--- a/extensions/ParserFunctions/i18n/ps.json
+++ b/extensions/ParserFunctions/i18n/ps.json
@@ -1,9 +1,14 @@
{
"@metadata": {
"authors": [
- "Ahmed-Najib-Biabani-Ibrahimkhel"
+ "Ahmed-Najib-Biabani-Ibrahimkhel",
+ "عثمان خان شاہ"
]
},
"pfunc_time_error": "ستونزه: ناسم وخت",
+ "pfunc_expr_unrecognised_word": "اصطلاحي تېروتنه: ناپېژندل شوې وييکه \"$1\".",
+ "pfunc_expr_unexpected_operator": "اصطلاحي تېروتنه: نااټکله $1 چارنگر.",
+ "pfunc_expr_missing_operand": "اصطلاحي تېروتنه: د $1 ورک شوی چارنگر.",
+ "pfunc_expr_unrecognised_punctuation": "اصطلاحي تېروتنه: د ناپېژندلې ليکنښې لوښه \"$1\".",
"pfunc_expr_division_by_zero": "وېش په صفر"
}
diff --git a/extensions/ParserFunctions/i18n/qqq.json b/extensions/ParserFunctions/i18n/qqq.json
index f47d1b21..67ff5e66 100644
--- a/extensions/ParserFunctions/i18n/qqq.json
+++ b/extensions/ParserFunctions/i18n/qqq.json
@@ -6,10 +6,11 @@
"Meno25",
"Shirayuki",
"Siebrand",
- "The Evil IP address"
+ "The Evil IP address",
+ "Umherirrender"
]
},
- "pfunc_desc": "{{desc|name=Parser Functions|url=http://www.mediawiki.org/wiki/Extension:ParserFunctions}}",
+ "pfunc_desc": "{{desc|name=Parser Functions|url=https://www.mediawiki.org/wiki/Extension:ParserFunctions}}",
"pfunc_time_error": "Used as error message about DateTime object, so this \"time\" means \"date and time\".\n\nSee also:\n* {{msg-mw|Pfunc time too long}}\n* {{msg-mw|Pfunc time too big}}\n* {{msg-mw|Pfunc time too small}}",
"pfunc_time_too_long": "Used as error message.\n\nSee also:\n* {{msg-mw|Pfunc time error}}\n* {{msg-mw|Pfunc time too big}}\n* {{msg-mw|Pfunc time too small}}",
"pfunc_time_too_big": "Used as error message.\n\nSee also:\n* {{msg-mw|Pfunc time error}}\n* {{msg-mw|Pfunc time too long}}\n* {{msg-mw|Pfunc time too small}}",
diff --git a/extensions/ParserFunctions/i18n/rue.json b/extensions/ParserFunctions/i18n/rue.json
index a592c200..b381e7d0 100644
--- a/extensions/ParserFunctions/i18n/rue.json
+++ b/extensions/ParserFunctions/i18n/rue.json
@@ -1,11 +1,12 @@
{
"@metadata": {
"authors": [
- "Gazeb"
+ "Gazeb",
+ "Tkalyn"
]
},
"pfunc_desc": "Росшырїня парсера о лоґічны функції",
- "pfunc_time_error": "Хына: неплатный час",
+ "pfunc_time_error": "Хыба: неплатный час",
"pfunc_time_too_long": "Хыба: дуже много кликаня #time",
"pfunc_rel2abs_invalid_depth": "Хыба: Неплатна глубка в стежцї: \"$1\" (проба о приступ до узла высшого як корїнь)",
"pfunc_expr_stack_exhausted": "Хыба выразу: Засобник переповненый",
diff --git a/extensions/ParserFunctions/i18n/shn.json b/extensions/ParserFunctions/i18n/shn.json
new file mode 100644
index 00000000..aeb5508d
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/shn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saimawnkham"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "လွင်ႈၽိတ်းပိူင်ႈ : ဢမ်ႇၼႄႉၼွၼ်းလႆႈ တူဝ်လိၵ်ႈ \"$1\"",
+ "pfunc_expr_unrecognised_punctuation": "လွင်ႈၽိတ်းပိူင်ႈ: တူဝ်လိၵ်ႈ လၢၵ်ႇလၢႆး \"$1\" ဢၼ်ၼႆႉ ဢမ်ႇလႆႈမၵ်းမၼ်ႈဝႆႉ"
+}
diff --git a/extensions/ParserFunctions/i18n/sr-ec.json b/extensions/ParserFunctions/i18n/sr-ec.json
index 403d78ce..5514cbde 100644
--- a/extensions/ParserFunctions/i18n/sr-ec.json
+++ b/extensions/ParserFunctions/i18n/sr-ec.json
@@ -3,12 +3,14 @@
"authors": [
"Millosh",
"Rancher",
- "Verlor"
+ "Verlor",
+ "Milicevic01"
]
},
"pfunc_desc": "Проширује рашчлањивач с логичким функцијама",
"pfunc_time_error": "Грешка: лоше време",
"pfunc_time_too_long": "Грешка: превише #time позива",
+ "pfunc_rel2abs_invalid_depth": "Грешка: неправилна дубина у путањи: „$1“ (покушај приступа чвору изнад коренског (root)).",
"pfunc_expr_stack_exhausted": "Грешка у изразу: стек напуњен",
"pfunc_expr_unexpected_number": "Грешка у изразу: неочекивани број",
"pfunc_expr_preg_match_failure": "Грешка у изразу: Неочекивана preg_match грешка",
diff --git a/extensions/ParserFunctions/i18n/sr-el.json b/extensions/ParserFunctions/i18n/sr-el.json
index 00c0a5fa..e0c990ba 100644
--- a/extensions/ParserFunctions/i18n/sr-el.json
+++ b/extensions/ParserFunctions/i18n/sr-el.json
@@ -1,12 +1,14 @@
{
"@metadata": {
"authors": [
- "Michaello"
+ "Michaello",
+ "Milicevic01"
]
},
"pfunc_desc": "obogati parser logičkim funkcijama",
"pfunc_time_error": "Greška: loše vreme",
"pfunc_time_too_long": "Greška: previše #time poziva",
+ "pfunc_rel2abs_invalid_depth": "Greška: nepravilna dubina u putanji: „$1“ (pokušaj pristupa čvoru iznad korenskog (root)).",
"pfunc_expr_stack_exhausted": "Greška u izrazu: stek napunjen",
"pfunc_expr_unexpected_number": "Greška u izrazu: neočekivani broj",
"pfunc_expr_preg_match_failure": "Greška u izrazu: Neočekivana preg_match greška",
diff --git a/extensions/ParserFunctions/i18n/szl.json b/extensions/ParserFunctions/i18n/szl.json
new file mode 100644
index 00000000..84ab4e99
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/szl.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Krol111"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "Błąd we wyrażyńu – felerne słowo „$1”",
+ "pfunc_expr_missing_operand": "Feler we wyrażyńu – brak argumyntu funkcyji $1",
+ "pfunc_expr_unrecognised_punctuation": "Feler we wyrażyńu – felerny znok „$1”"
+}
diff --git a/extensions/ParserFunctions/i18n/th.json b/extensions/ParserFunctions/i18n/th.json
index 3717762d..44a7ccbe 100644
--- a/extensions/ParserFunctions/i18n/th.json
+++ b/extensions/ParserFunctions/i18n/th.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Ans"
+ "Ans",
+ "Horus"
]
},
"pfunc_time_error": "เกิดข้อผิดพลาด: ค่าเวลาไม่ถูกต้อง",
@@ -12,7 +13,7 @@
"pfunc_expr_preg_match_failure": "สูตรเกิดข้อผิดพลาด: เกิดความล้มเหลวในการสั่ง preg_match โดยไม่ทราบสาเหตุ",
"pfunc_expr_unrecognised_word": "สูตรไม่ถูกต้อง: \"$1\" เป็นคำที่ไม่รู้จัก",
"pfunc_expr_unexpected_operator": "สูตรไม่ถูกต้อง: $1 อยู่ผิดที่",
- "pfunc_expr_missing_operand": "สูตรไม่ถูกต้อง: ได้รับค่าไม่ครบในการคำนวณ $1",
+ "pfunc_expr_missing_operand": "สูตรไม่ถูกต้อง: ขาดตัวถูกดำเนินการสำหรับ $1",
"pfunc_expr_unexpected_closing_bracket": "สูตรไม่ถูกต้อง: ปิดวงเล็บเกิน หรือ ปิดวงเล็บผิดที่",
"pfunc_expr_unrecognised_punctuation": "สูตรไม่ถูกต้อง: \"$1\" เป็นเครื่องหมายหรือตัวอักษรที่ไม่รู้จัก",
"pfunc_expr_unclosed_bracket": "สูตรไม่ถูกต้อง: ไม่ได้ปิดวงเล็บ",
diff --git a/extensions/ParserFunctions/i18n/ur.json b/extensions/ParserFunctions/i18n/ur.json
new file mode 100644
index 00000000..af410e94
--- /dev/null
+++ b/extensions/ParserFunctions/i18n/ur.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "عثمان خان شاہ"
+ ]
+ },
+ "pfunc_expr_unrecognised_word": "ظاہریت خطاْْْْ: نامعلوم لفظ \"$1\"",
+ "pfunc_expr_unrecognised_punctuation": "خطائے تعبیری: نامعلوم تلفظ برائے \"$1\""
+}
diff --git a/extensions/ParserFunctions/i18n/yi.json b/extensions/ParserFunctions/i18n/yi.json
index 2d85aebf..9654b788 100644
--- a/extensions/ParserFunctions/i18n/yi.json
+++ b/extensions/ParserFunctions/i18n/yi.json
@@ -5,7 +5,10 @@
]
},
"pfunc_time_error": "גרײַז: אומגילטיגע צײַט",
+ "pfunc_expr_unrecognised_word": "אויסדרוק־גרײַז: אומבעקאנט ווארט \"$1",
"pfunc_expr_unexpected_operator": "אויסדריק גרײַז: אומגעריכטער $1 אפעראַטאר",
+ "pfunc_expr_missing_operand": "אויסדרוק פעלער: פעלט אפעראנד פאר $1.",
+ "pfunc_expr_unrecognised_punctuation": "אויסדרוק־גרײַז: אומבעקאנטער צייכן \"$1\".",
"pfunc_expr_unclosed_bracket": "אויסדריק גרײַז: אומגעשלאסענער קלאַמער",
"pfunc_expr_not_a_number": "אין $1: רעזולטאַט איז נישט קיין נומער"
}
diff --git a/extensions/ParserFunctions/i18n/yue.json b/extensions/ParserFunctions/i18n/yue.json
index 0f0f9898..5738c3e0 100644
--- a/extensions/ParserFunctions/i18n/yue.json
+++ b/extensions/ParserFunctions/i18n/yue.json
@@ -1,12 +1,15 @@
{
"@metadata": {
"authors": [
- "Shinjiman"
+ "Shinjiman",
+ "Yueman"
]
},
"pfunc_desc": "用邏輯功能去加強處理器",
"pfunc_time_error": "錯: 唔啱嘅時間",
"pfunc_time_too_long": "錯: 太多 #time 呼叫",
+ "pfunc_time_too_big": "出錯:#time 只係支援最多 9999 年。",
+ "pfunc_time_too_small": "出錯:#time 只係支援最少 0 年。",
"pfunc_rel2abs_invalid_depth": "錯: 唔啱路徑嘅深度: \"$1\" (已經試過由頭點落個點度)",
"pfunc_expr_stack_exhausted": "表達錯: 堆叠耗盡",
"pfunc_expr_unexpected_number": "表達錯: 未預料嘅數字",
@@ -21,5 +24,6 @@
"pfunc_expr_invalid_argument": "$1嘅無效參數: < -1 or > 1",
"pfunc_expr_invalid_argument_ln": "ln嘅無效參數: <= 0",
"pfunc_expr_unknown_error": "表達錯: 未知嘅錯 ($1)",
- "pfunc_expr_not_a_number": "響 $1: 結果唔係數字"
+ "pfunc_expr_not_a_number": "響 $1: 結果唔係數字",
+ "pfunc_string_too_long": "出錯:字串超過 $1 個字元嘅限制。"
}
diff --git a/extensions/ParserFunctions/i18n/zh-hans.json b/extensions/ParserFunctions/i18n/zh-hans.json
index c7491d22..d2e0b54a 100644
--- a/extensions/ParserFunctions/i18n/zh-hans.json
+++ b/extensions/ParserFunctions/i18n/zh-hans.json
@@ -7,11 +7,12 @@
"PhiLiP",
"Philip",
"Shinjiman",
- "阿pp"
+ "阿pp",
+ "Liuxinyu970226"
]
},
"pfunc_desc": "用逻辑函数加强解析器",
- "pfunc_time_error": "错误:无效时间",
+ "pfunc_time_error": "错误:无效时间。",
"pfunc_time_too_long": "错误:#time调用次数过多",
"pfunc_time_too_big": "错误:#time只支持到9999年",
"pfunc_time_too_small": "错误:#time只支持最低0年。",
diff --git a/extensions/PdfHandler/Gemfile.lock b/extensions/PdfHandler/Gemfile.lock
new file mode 100644
index 00000000..14736585
--- /dev/null
+++ b/extensions/PdfHandler/Gemfile.lock
@@ -0,0 +1,79 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ ast (2.0.0)
+ astrolabe (1.3.0)
+ parser (>= 2.2.0.pre.3, < 3.0)
+ builder (3.2.2)
+ childprocess (0.5.3)
+ ffi (~> 1.0, >= 1.0.11)
+ cucumber (1.3.15)
+ builder (>= 2.1.2)
+ diff-lcs (>= 1.1.3)
+ gherkin (~> 2.12)
+ multi_json (>= 1.7.5, < 2.0)
+ multi_test (>= 0.1.1)
+ data_magic (0.19)
+ faker (>= 1.1.2)
+ yml_reader (>= 0.3)
+ diff-lcs (1.2.5)
+ faker (1.3.0)
+ i18n (~> 0.5)
+ ffi (1.9.3)
+ gherkin (2.12.2)
+ multi_json (~> 1.3)
+ headless (1.0.2)
+ i18n (0.6.9)
+ json (1.8.1)
+ mediawiki_selenium (0.2.25)
+ cucumber (~> 1.3, >= 1.3.10)
+ headless (~> 1.0, >= 1.0.1)
+ json (~> 1.8, >= 1.8.1)
+ page-object (~> 1.0)
+ rest-client (~> 1.6, >= 1.6.7)
+ rspec-expectations (~> 2.14, >= 2.14.4)
+ syntax (~> 1.2, >= 1.2.0)
+ mime-types (2.3)
+ multi_json (1.10.1)
+ multi_test (0.1.1)
+ page-object (1.0)
+ page_navigation (>= 0.9)
+ selenium-webdriver (>= 2.42.0)
+ watir-webdriver (>= 0.6.9)
+ page_navigation (0.9)
+ data_magic (>= 0.14)
+ parser (2.2.0.pre.4)
+ ast (>= 1.1, < 3.0)
+ slop (~> 3.4, >= 3.4.5)
+ powerpack (0.0.9)
+ rainbow (2.0.0)
+ rest-client (1.6.7)
+ mime-types (>= 1.16)
+ rspec-expectations (2.99.1)
+ diff-lcs (>= 1.1.3, < 2.0)
+ rubocop (0.26.1)
+ astrolabe (~> 1.3)
+ parser (>= 2.2.0.pre.4, < 3.0)
+ powerpack (~> 0.0.6)
+ rainbow (>= 1.99.1, < 3.0)
+ ruby-progressbar (~> 1.4)
+ ruby-progressbar (1.6.0)
+ rubyzip (1.1.4)
+ selenium-webdriver (2.42.0)
+ childprocess (>= 0.5.0)
+ multi_json (~> 1.0)
+ rubyzip (~> 1.0)
+ websocket (~> 1.0.4)
+ slop (3.6.0)
+ syntax (1.2.0)
+ watir-webdriver (0.6.10)
+ selenium-webdriver (>= 2.18.0)
+ websocket (1.0.7)
+ yml_reader (0.3)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ mediawiki_selenium
+ rubocop
diff --git a/extensions/PdfHandler/PdfHandler.i18n.php b/extensions/PdfHandler/PdfHandler.i18n.php
deleted file mode 100644
index 46a34a6c..00000000
--- a/extensions/PdfHandler/PdfHandler.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim88f78f66a49810c2' ) ) {
- function wfJsonI18nShim88f78f66a49810c2( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim88f78f66a49810c2';
-}
diff --git a/extensions/PdfHandler/PdfHandler.php b/extensions/PdfHandler/PdfHandler.php
index f4e15657..07ecd104 100644
--- a/extensions/PdfHandler/PdfHandler.php
+++ b/extensions/PdfHandler/PdfHandler.php
@@ -1,66 +1,14 @@
<?php
-/**
- * PDF Handler extension -- handler for viewing PDF files in image mode.
- *
- * @file
- * @ingroup Extensions
- * @author Martin Seidel (Xarax) <jodeldi@gmx.de>
- * @copyright Copyright © 2007 Martin Seidel (Xarax) <jodeldi@gmx.de>
- *
- * 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
- */
-# Not a valid entry point, skip unless MEDIAWIKI is defined
-if ( !defined( 'MEDIAWIKI' ) ) {
- echo 'PdfHandler extension';
- exit( 1 );
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'PdfHandler' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['PdfHandler'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for PdfHandler extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the PdfHandler extension requires MediaWiki 1.25+' );
}
-
-$wgExtensionCredits['media'][] = array(
- 'path' => __FILE__,
- 'name' => 'PDF Handler',
- 'author' => array( 'Martin Seidel', 'Mike Połtyn' ),
- 'descriptionmsg' => 'pdf-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:PdfHandler',
-);
-
-// External program requirements...
-$wgPdfProcessor = 'gs';
-$wgPdfPostProcessor = 'convert';
-$wgPdfInfo = 'pdfinfo';
-$wgPdftoText = 'pdftotext';
-
-$wgPdfOutputExtension = 'jpg';
-$wgPdfHandlerDpi = 150;
-$wgPdfHandlerJpegQuality = 95;
-
-// This setting, if enabled, will put creating thumbnails into a job queue,
-// so they do not have to be created on-the-fly,
-// but rather inconspicuously during normal wiki browsing
-$wgPdfCreateThumbnailsInJobQueue = false;
-
-// To upload new PDF files you'll need to do this too:
-// $wgFileExtensions[] = 'pdf';
-
-$dir = __DIR__ . '/';
-$wgMessagesDirs['PdfHandler'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['PdfHandler'] = $dir . 'PdfHandler.i18n.php';
-$wgAutoloadClasses['PdfImage'] = $dir . 'PdfHandler.image.php';
-$wgAutoloadClasses['PdfHandler'] = $dir . 'PdfHandler_body.php';
-$wgAutoloadClasses['CreatePdfThumbnailsJob'] = $dir . 'CreatePdfThumbnailsJob.class.php';
-$wgMediaHandlers['application/pdf'] = 'PdfHandler';
-$wgJobClasses['createPdfThumbnailsJob'] = 'CreatePdfThumbnailsJob';
-$wgHooks['UploadVerifyFile'][] = 'CreatePdfThumbnailsJob::insertJobs';
diff --git a/extensions/PdfHandler/PdfHandler_body.php b/extensions/PdfHandler/PdfHandler_body.php
index 2a08a95b..0b192bbb 100644
--- a/extensions/PdfHandler/PdfHandler_body.php
+++ b/extensions/PdfHandler/PdfHandler_body.php
@@ -22,6 +22,12 @@
*/
class PdfHandler extends ImageHandler {
+ static $messages = array(
+ 'main' => 'pdf-file-page-warning',
+ 'header' => 'pdf-file-page-warning-header',
+ 'info' => 'pdf-file-page-warning-info',
+ 'footer' => 'pdf-file-page-warning-footer',
+ );
/**
* @return bool
@@ -325,9 +331,10 @@ class PdfHandler extends ImageHandler {
/**
* @param $image File
+ * @param bool|IContextSource $context Context to use (optional)
* @return bool|int
*/
- function formatMetadata( $image ) {
+ function formatMetadata( $image, $context = false ) {
$meta = $image->getMetadata();
if ( !$meta ) {
@@ -345,7 +352,7 @@ class PdfHandler extends ImageHandler {
}
// Inherited from MediaHandler.
- return $this->formatMetadataHelper( $meta['mergedMetadata'] );
+ return $this->formatMetadataHelper( $meta['mergedMetadata'], $context );
}
/**
@@ -383,4 +390,27 @@ class PdfHandler extends ImageHandler {
return $data['text'][$page - 1];
}
+ /**
+ * Adds a warning about PDFs being potentially dangerous to the file
+ * page. Multiple messages with this base will be used.
+ * @param File $file
+ * @return array
+ */
+ function getWarningConfig( $file ) {
+ return array(
+ 'messages' => self::$messages,
+ 'link' => '//www.mediawiki.org/wiki/Special:MyLanguage/Help:Security/PDF_files',
+ 'module' => 'pdfhandler.messages',
+ );
+ }
+
+ /**
+ * Register a module with the warning messages in it.
+ * @param &$resourceLoader ResourceLoader
+ */
+ static function registerWarningModule( &$resourceLoader ) {
+ $resourceLoader->register( 'pdfhandler.messages', array(
+ 'messages' => array_values( self::$messages ),
+ ) );
+ }
}
diff --git a/extensions/PdfHandler/extension.json b/extensions/PdfHandler/extension.json
new file mode 100644
index 00000000..0736ee8e
--- /dev/null
+++ b/extensions/PdfHandler/extension.json
@@ -0,0 +1,45 @@
+{
+ "name": "PDF Handler",
+ "author": [
+ "Martin Seidel",
+ "Mike Połtyn"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:PdfHandler",
+ "descriptionmsg": "pdf-desc",
+ "license-name": "GPL-2.0+",
+ "type": "media",
+ "config": {
+ "PdfOutputExtension": "jpg",
+ "PdfHandlerDpi": 150,
+ "PdfCreateThumbnailsInJobQueue": false,
+ "PdfPostProcessor": "convert",
+ "PdfHandlerJpegQuality": 95,
+ "PdftoText": "pdftotext",
+ "PdfProcessor": "gs",
+ "PdfInfo": "pdfinfo"
+ },
+ "MessagesDirs": {
+ "PdfHandler": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "UploadVerifyFile": [
+ "CreatePdfThumbnailsJob::insertJobs"
+ ],
+ "ResourceLoaderRegisterModules": [
+ "PdfHandler::registerWarningModule"
+ ]
+ },
+ "JobClasses": {
+ "createPdfThumbnailsJob": "CreatePdfThumbnailsJob"
+ },
+ "MediaHandlers": {
+ "application/pdf": "PdfHandler"
+ },
+ "AutoloadClasses": {
+ "PdfImage": "PdfHandler.image.php",
+ "PdfHandler": "PdfHandler_body.php",
+ "CreatePdfThumbnailsJob": "CreatePdfThumbnailsJob.class.php"
+ }
+}
diff --git a/extensions/PdfHandler/i18n/de.json b/extensions/PdfHandler/i18n/de.json
index ea9c169d..858706fd 100644
--- a/extensions/PdfHandler/i18n/de.json
+++ b/extensions/PdfHandler/i18n/de.json
@@ -7,6 +7,10 @@
]
},
"pdf-desc": "Stellt eine Schnittstelle zur Ansicht von PDF-Dateien im Bildermodus bereit",
+ "pdf-file-page-warning": "PDF ist ein komplexes Format, das in bestimmten Fällen einige deiner privaten Informationen preisgeben kann. Stelle sicher, dass du deinen PDF-Betrachter auf sichere Weise konfigurierst.",
+ "pdf-file-page-warning-header": "Datenschutz-Berücksichtigungen",
+ "pdf-file-page-warning-footer": "Dieses Problem ist nicht speziell für diese bestimmte Datei, aber ein generelles Problem mit dem PDF-Format.",
+ "pdf-file-page-warning-info": "Erfahre mehr über dieses Problem.",
"pdf_no_metadata": "Keine Metadaten im PDF vorhanden.",
"pdf_page_error": "Seitenzahl außerhalb des Dokumentes.",
"exif-pdf-producer": "Umwandlungsprogramm",
diff --git a/extensions/PdfHandler/i18n/en.json b/extensions/PdfHandler/i18n/en.json
index 18bdff89..20ad5dbe 100644
--- a/extensions/PdfHandler/i18n/en.json
+++ b/extensions/PdfHandler/i18n/en.json
@@ -3,10 +3,14 @@
"authors": []
},
"pdf-desc": "Handler for viewing PDF files in image mode.",
+ "pdf-file-page-warning": "PDF is a complex format that may expose some of your private information in some cases. Make sure to configure your PDF viewer in a safe way.",
+ "pdf-file-page-warning-header": "Privacy considerations",
+ "pdf-file-page-warning-footer": "This issue is not specific to this particular file, but a general issue with the PDF format.",
+ "pdf-file-page-warning-info": "Learn more about this issue.",
"pdf_no_metadata": "Cannot get metadata from PDF.",
"pdf_page_error": "Page number not in range.",
"exif-pdf-producer": "Conversion program",
"exif-pdf-version": "Version of PDF format",
"exif-pdf-encrypted": "Encrypted",
"exif-pdf-pagesize": "Page size"
-} \ No newline at end of file
+}
diff --git a/extensions/PdfHandler/i18n/es.json b/extensions/PdfHandler/i18n/es.json
index c658bf30..bda980d6 100644
--- a/extensions/PdfHandler/i18n/es.json
+++ b/extensions/PdfHandler/i18n/es.json
@@ -2,10 +2,15 @@
"@metadata": {
"authors": [
"Armando-Martin",
- "Sanbec"
+ "Sanbec",
+ "Macofe"
]
},
"pdf-desc": "Manejador para ver archivos PDF en modo imagen",
+ "pdf-file-page-warning": "PDF es un formato complejo que puede exponer alguna información privada en algunos casos. Asegúrate de configurar tu lector de PDF de una manera segura.",
+ "pdf-file-page-warning-header": "Consideraciones de privacidad",
+ "pdf-file-page-warning-footer": "Este problema no es específico de este archivo en particular, sino un problema general con el formato PDF.",
+ "pdf-file-page-warning-info": "Más información sobre este problema.",
"pdf_no_metadata": "No se obtuvieron metadatos del PDF",
"pdf_page_error": "Número de página fuera de rango",
"exif-pdf-producer": "Programa de conversión",
diff --git a/extensions/PdfHandler/i18n/et.json b/extensions/PdfHandler/i18n/et.json
index 7cebfda7..e062e58c 100644
--- a/extensions/PdfHandler/i18n/et.json
+++ b/extensions/PdfHandler/i18n/et.json
@@ -6,6 +6,10 @@
]
},
"pdf-desc": "Töötleja PDF-failide piltidena kuvamiseks",
+ "pdf-file-page-warning": "PDF on keeruline vorming, mis võib mõnel juhul paljastada isiklikku teavet. Veendu, et sinu PDF-failide vaatur on häälestatud turvaliselt.",
+ "pdf-file-page-warning-header": "Andmekaitse kaalutlused",
+ "pdf-file-page-warning-footer": "See küsimus puudutab PDF-vormingut üldiselt, mitte ei käi selle kindla faili kohta.",
+ "pdf-file-page-warning-info": "Lisateave selle küsimuse kohta.",
"pdf_no_metadata": "Ei õnnestu PDF-faili meta-andmeid saada",
"pdf_page_error": "Leheküljenumber pole vahemikus.",
"exif-pdf-producer": "Teisendusprogramm",
diff --git a/extensions/PdfHandler/i18n/frc.json b/extensions/PdfHandler/i18n/frc.json
new file mode 100644
index 00000000..f788c1c9
--- /dev/null
+++ b/extensions/PdfHandler/i18n/frc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Stisc-14"
+ ]
+ },
+ "pdf-file-page-warning-footer": "La question est pas spécifique à ce dossier, mais une question générale avec le format PDF."
+}
diff --git a/extensions/PdfHandler/i18n/he.json b/extensions/PdfHandler/i18n/he.json
index 1569df31..d82f6a59 100644
--- a/extensions/PdfHandler/i18n/he.json
+++ b/extensions/PdfHandler/i18n/he.json
@@ -7,7 +7,11 @@
]
},
"pdf-desc": "טיפול בצפייה בקובצי PDF במצב תמונה",
- "pdf_no_metadata": "לא ניתן לאחזר את נתוני המסמך מה־PDF",
+ "pdf-file-page-warning": "PDF הוא תסדיר קובץ מורכב שיכול לחשוף חלק מהמידע שלך במקרים מסוימים. נא לוודא שהגדרת את מציג ה־PDF באופן בטוח.",
+ "pdf-file-page-warning-header": "שיקולי פרטיות",
+ "pdf-file-page-warning-footer": "הבעיה הזאת אינה ייחודית לקובץ הזה, אלא כללית לתסדיר PDF.",
+ "pdf-file-page-warning-info": "מידע נוסף על הבעיה הזאת.",
+ "pdf_no_metadata": "לא ניתן לאחזר מטא־נתונים מה־PDF.",
"pdf_page_error": "מספר הדף אינו בטווח",
"exif-pdf-producer": "תוכנת המרה",
"exif-pdf-version": "הגרסה של תסדיר PDF",
diff --git a/extensions/PdfHandler/i18n/ksh.json b/extensions/PdfHandler/i18n/ksh.json
index 75347d70..8901e25c 100644
--- a/extensions/PdfHandler/i18n/ksh.json
+++ b/extensions/PdfHandler/i18n/ksh.json
@@ -5,10 +5,14 @@
]
},
"pdf-desc": "Määd et möjjelesch, PDF-Dateie wie Bellder ze beloore.",
+ "pdf-file-page-warning": "<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Portable Document Format\">PDF</i> es en öpwändesch Dattei_Fommahd un kann onger Ömschtände jebruch wähde, öm päsöhnlejje Dahte vun Der ußzeschpejonihre.\nDonn Ding Projramm för <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Portable Document Format\">PDF</i>-Datteije aanzezeije esu enschtälle, dat dat nit passehre kann, wann De nit meins „Driiß jät drop“",
+ "pdf-file-page-warning-header": "Zom Schoz vun päsöhnlesche Dahte",
+ "pdf-file-page-warning-footer": "Dat hädd och nix met heh dä beschtemmpte Dattei ze donn, ed es esu för jehde Dattei em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Portable Document Format\">PDF</i>-Fommaht.",
+ "pdf-file-page-warning-info": "Donn mih övver dat Jannze lässe.",
"pdf_no_metadata": "Kann de Metta-Date nit fun dä PDF-Datei holle.",
"pdf_page_error": "En Sigge-Nommer es ußerhallef",
"exif-pdf-producer": "Ömwandelongsprojramm",
"exif-pdf-version": "PDF-Fommaat-Version",
"exif-pdf-encrypted": "Verschlößelt",
- "exif-pdf-pagesize": "Dä Sigg(e) ier Jrüüße"
+ "exif-pdf-pagesize": "Dä Sigg(e) ier Jrüüße <--\nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Exif-pdf-pagesize/ksh\nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Exif-pdf-pagesize\n-->"
}
diff --git a/extensions/PdfHandler/i18n/ku-latn.json b/extensions/PdfHandler/i18n/ku-latn.json
new file mode 100644
index 00000000..bb82cb9d
--- /dev/null
+++ b/extensions/PdfHandler/i18n/ku-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bikarhêner"
+ ]
+ },
+ "pdf-file-page-warning-info": "Di vî mijare de hinêkî din agahî bistine."
+}
diff --git a/extensions/PdfHandler/i18n/lb.json b/extensions/PdfHandler/i18n/lb.json
index 36a9a88f..8248a240 100644
--- a/extensions/PdfHandler/i18n/lb.json
+++ b/extensions/PdfHandler/i18n/lb.json
@@ -5,6 +5,7 @@
]
},
"pdf-desc": "\"Programm\" den et erméiglecht PDF-Fichieren als Bild ze kucken",
+ "pdf-file-page-warning-info": "Méi iwwer dëse Sujet gewuer ginn.",
"pdf_no_metadata": "Meta-Informatiounen aus dem PDF Dokument kënnen net gelies ginn",
"pdf_page_error": "D'Säitenzuel ass net an dem Beräich.",
"exif-pdf-producer": "Ëmwandlungsprogramm",
diff --git a/extensions/PdfHandler/i18n/lrc.json b/extensions/PdfHandler/i18n/lrc.json
index b0f7f5ef..f8fabc8a 100644
--- a/extensions/PdfHandler/i18n/lrc.json
+++ b/extensions/PdfHandler/i18n/lrc.json
@@ -4,5 +4,7 @@
"Mogoeilor"
]
},
+ "exif-pdf-producer": "برنامه چک چنه",
+ "exif-pdf-version": "نسقه قالو پی دی اف",
"exif-pdf-pagesize": "انازه بلگه"
}
diff --git a/extensions/PdfHandler/i18n/mk.json b/extensions/PdfHandler/i18n/mk.json
index 30232e1f..b858002d 100644
--- a/extensions/PdfHandler/i18n/mk.json
+++ b/extensions/PdfHandler/i18n/mk.json
@@ -6,6 +6,10 @@
]
},
"pdf-desc": "Ракувач за прегледување PDF податотеки во сликовен режим",
+ "pdf-file-page-warning": "PDF е сложен формат кој, во некои случаи, може да изложи некои од вашите лични податоци. Не заборавајте да ги наместите безбедносните поставки на прегледувачот на PDF.",
+ "pdf-file-page-warning-header": "За личните податоци",
+ "pdf-file-page-warning-footer": "Проблемов не се однесува на оваа дадена податотека, туку претставува начелен проблем со форматот PDF воопшто.",
+ "pdf-file-page-warning-info": "Дознајте повеќе за проблемов.",
"pdf_no_metadata": "Не може да се земат метаподатоци од PDF",
"pdf_page_error": "Бројот на страница е надвор од опсег",
"exif-pdf-producer": "Програм за претворање",
diff --git a/extensions/PdfHandler/i18n/pl.json b/extensions/PdfHandler/i18n/pl.json
index 1eed58a3..c9f3eac8 100644
--- a/extensions/PdfHandler/i18n/pl.json
+++ b/extensions/PdfHandler/i18n/pl.json
@@ -3,10 +3,13 @@
"authors": [
"Holek",
"Matma Rex",
- "Sp5uhe"
+ "Sp5uhe",
+ "VerMa"
]
},
"pdf-desc": "Konwerter graficznego podglądu plików PDF",
+ "pdf-file-page-warning-footer": "Ten problem nie dotyczy tylko tego pliku, lecz formatu PDF w ogóle.",
+ "pdf-file-page-warning-info": "Dowiedz się więcej o tym problemie.",
"pdf_no_metadata": "nie można pobrać metadanych z pliku PDF",
"pdf_page_error": "Numer strony poza zakresem",
"exif-pdf-producer": "Program użyty do konwersji",
diff --git a/extensions/PdfHandler/i18n/pt.json b/extensions/PdfHandler/i18n/pt.json
index 35d892f8..65d41e3e 100644
--- a/extensions/PdfHandler/i18n/pt.json
+++ b/extensions/PdfHandler/i18n/pt.json
@@ -3,10 +3,15 @@
"authors": [
"Hamilton Abreu",
"Malafaya",
- "Vitorvicentevalente"
+ "Vitorvicentevalente",
+ "Fabulous"
]
},
"pdf-desc": "Manuseador de visionamento de ficheiros PDF em modo de imagem",
+ "pdf-file-page-warning": "O PDF é um formato complexo que pode expor algumas das suas informações privadas, em alguns casos. Certifique-se de configurar o seu visualizador de PDF de uma forma segura.",
+ "pdf-file-page-warning-header": "Considerações de privacidade",
+ "pdf-file-page-warning-footer": "Este problema não é específico para este tipo de ficheiro, mas uma questão geral com o formato PDF.",
+ "pdf-file-page-warning-info": "Saiba mais sobre este problema.",
"pdf_no_metadata": "não foi possível obter os metadados do PDF",
"pdf_page_error": "Número de página fora do intervalo",
"exif-pdf-producer": "Programa de conversão",
diff --git a/extensions/PdfHandler/i18n/qqq.json b/extensions/PdfHandler/i18n/qqq.json
index 0d657592..39af89f8 100644
--- a/extensions/PdfHandler/i18n/qqq.json
+++ b/extensions/PdfHandler/i18n/qqq.json
@@ -3,10 +3,11 @@
"authors": [
"Purodha",
"Shirayuki",
- "The Evil IP address"
+ "The Evil IP address",
+ "Umherirrender"
]
},
- "pdf-desc": "{{desc|name=Pdf Handler|url=http://www.mediawiki.org/wiki/Extension:PdfHandler}}",
+ "pdf-desc": "{{desc|name=Pdf Handler|url=https://www.mediawiki.org/wiki/Extension:PdfHandler}}",
"pdf_no_metadata": "Error message given when metadata cannot be retrieved from a PDF file",
"pdf_page_error": "Error message given when a PDF does not have the requested page number",
"exif-pdf-producer": "The label used in the metadata table at the bottom of the file description page for the program used to convert this PDF file into a PDF.\n\nThis is separate from the program used to create the original file (Which is labeled by {{msg-mw|Exif-software}}).",
diff --git a/extensions/PdfHandler/i18n/sv.json b/extensions/PdfHandler/i18n/sv.json
index 2ba54aea..fe32c86c 100644
--- a/extensions/PdfHandler/i18n/sv.json
+++ b/extensions/PdfHandler/i18n/sv.json
@@ -6,6 +6,7 @@
]
},
"pdf-desc": "Hantering av PDF-visning i bildläge",
+ "pdf-file-page-warning-info": "Läs mer om det här problemet.",
"pdf_no_metadata": "Kan inte hämta metadata från PDF",
"pdf_page_error": "Sidnummer överstiger antal sidor i dokumentet",
"exif-pdf-producer": "Konverteringsprogram",
diff --git a/extensions/PdfHandler/i18n/zh-hans.json b/extensions/PdfHandler/i18n/zh-hans.json
index 3b789624..df3681b1 100644
--- a/extensions/PdfHandler/i18n/zh-hans.json
+++ b/extensions/PdfHandler/i18n/zh-hans.json
@@ -2,10 +2,15 @@
"@metadata": {
"authors": [
"Shirayuki",
- "Yfdyh000"
+ "Yfdyh000",
+ "Liuxinyu970226"
]
},
"pdf-desc": "在图像模式中查看PDF文件的处理器。",
+ "pdf-file-page-warning": "PDF是一个复杂格式,它在某些情况下会暴露您的私人信息。确保您的PDF阅读器配置安全。",
+ "pdf-file-page-warning-header": "隐私考虑",
+ "pdf-file-page-warning-footer": "此问题不只发生在此问题上,还是PDF格式的普遍问题。",
+ "pdf-file-page-warning-info": "了解关于此问题的更多信息。",
"pdf_no_metadata": "无法在PDF中获取元数据。",
"pdf_page_error": "页数不在范围内。",
"exif-pdf-producer": "转换程序",
diff --git a/extensions/PdfHandler/tests/browser/Gemfile.lock b/extensions/PdfHandler/tests/browser/Gemfile.lock
deleted file mode 100644
index c48276e7..00000000
--- a/extensions/PdfHandler/tests/browser/Gemfile.lock
+++ /dev/null
@@ -1,62 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- builder (3.2.2)
- childprocess (0.5.3)
- ffi (~> 1.0, >= 1.0.11)
- cucumber (1.3.15)
- builder (>= 2.1.2)
- diff-lcs (>= 1.1.3)
- gherkin (~> 2.12)
- multi_json (>= 1.7.5, < 2.0)
- multi_test (>= 0.1.1)
- data_magic (0.19)
- faker (>= 1.1.2)
- yml_reader (>= 0.3)
- diff-lcs (1.2.5)
- faker (1.3.0)
- i18n (~> 0.5)
- ffi (1.9.3)
- gherkin (2.12.2)
- multi_json (~> 1.3)
- headless (1.0.2)
- i18n (0.6.9)
- json (1.8.1)
- mediawiki_selenium (0.2.25)
- cucumber (~> 1.3, >= 1.3.10)
- headless (~> 1.0, >= 1.0.1)
- json (~> 1.8, >= 1.8.1)
- page-object (~> 1.0)
- rest-client (~> 1.6, >= 1.6.7)
- rspec-expectations (~> 2.14, >= 2.14.4)
- syntax (~> 1.2, >= 1.2.0)
- mime-types (2.3)
- multi_json (1.10.1)
- multi_test (0.1.1)
- page-object (1.0)
- page_navigation (>= 0.9)
- selenium-webdriver (>= 2.42.0)
- watir-webdriver (>= 0.6.9)
- page_navigation (0.9)
- data_magic (>= 0.14)
- rest-client (1.6.7)
- mime-types (>= 1.16)
- rspec-expectations (2.99.1)
- diff-lcs (>= 1.1.3, < 2.0)
- rubyzip (1.1.4)
- selenium-webdriver (2.42.0)
- childprocess (>= 0.5.0)
- multi_json (~> 1.0)
- rubyzip (~> 1.0)
- websocket (~> 1.0.4)
- syntax (1.2.0)
- watir-webdriver (0.6.10)
- selenium-webdriver (>= 2.18.0)
- websocket (1.0.7)
- yml_reader (0.3)
-
-PLATFORMS
- ruby
-
-DEPENDENCIES
- mediawiki_selenium
diff --git a/extensions/Poem/Poem.i18n.php b/extensions/Poem/Poem.i18n.php
deleted file mode 100644
index 748ec734..00000000
--- a/extensions/Poem/Poem.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim6c20180b417f57bc' ) ) {
- function wfJsonI18nShim6c20180b417f57bc( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim6c20180b417f57bc';
-}
diff --git a/extensions/Poem/Poem.php b/extensions/Poem/Poem.php
index e43b199d..3362060b 100644
--- a/extensions/Poem/Poem.php
+++ b/extensions/Poem/Poem.php
@@ -1,34 +1,14 @@
<?php
-# MediaWiki Poem extension v1.1
-#
-# Based on example code from
-# http://www.mediawiki.org/wiki/Manual:Extending_wiki_markup
-#
-# Other code is © 2005 Nikola Smolenski <smolensk@eunet.yu>
-# and © 2011 Zaran <zaran.krleza@gmail.com>
-#
-# Anyone is allowed to use this code for any purpose.
-#
-# To install, copy the extension to your extensions directory and add line
-# require_once( "$IP/extensions/Poem/Poem.php" );
-# to the bottom of your LocalSettings.php
-#
-# To use, put some text between <poem></poem> tags
-#
-# For more information see its page at
-# http://www.mediawiki.org/wiki/Extension:Poem
-$wgExtensionCredits['parserhook'][] = array(
- 'path' => __FILE__,
- 'name' => 'Poem',
- 'author' => array( 'Nikola Smolenski', 'Brion Vibber', 'Steve Sanbeg' ),
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Poem',
- 'descriptionmsg' => 'poem-desc',
-);
-
-$dir = __DIR__ . '/';
-$wgParserTestFiles[] = $dir . 'poemParserTests.txt';
-$wgAutoloadClasses['Poem'] = $dir . 'Poem.class.php';
-$wgMessagesDirs['Poem'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['Poem'] = $dir . 'Poem.i18n.php';
-$wgHooks['ParserFirstCallInit'][] = 'Poem::init';
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'Poem' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Poem'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Poem extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the Poem extension requires MediaWiki 1.25+' );
+}
diff --git a/extensions/Poem/extension.json b/extensions/Poem/extension.json
new file mode 100644
index 00000000..1b8672ee
--- /dev/null
+++ b/extensions/Poem/extension.json
@@ -0,0 +1,27 @@
+{
+ "name": "Poem",
+ "author": [
+ "Nikola Smolenski",
+ "Brion Vibber",
+ "Steve Sanbeg"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:Poem",
+ "descriptionmsg": "poem-desc",
+ "type": "parserhook",
+ "MessagesDirs": {
+ "Poem": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "ParserFirstCallInit": [
+ "Poem::init"
+ ]
+ },
+ "AutoloadClasses": {
+ "Poem": "Poem.class.php"
+ },
+ "ParserTestFiles": [
+ "poemParserTests.txt"
+ ]
+}
diff --git a/extensions/Renameuser/Renameuser.alias.php b/extensions/Renameuser/Renameuser.alias.php
index a296e30c..07790bbc 100644
--- a/extensions/Renameuser/Renameuser.alias.php
+++ b/extensions/Renameuser/Renameuser.alias.php
@@ -29,6 +29,11 @@ $specialPageAliases['as'] = array(
'Renameuser' => array( 'সদস্য_পুনৰ্নামকৰণ' ),
);
+/** Avaric (авар) */
+$specialPageAliases['av'] = array(
+ 'Renameuser' => array( 'Переименовать_участника' ),
+);
+
/** Bashkir (башҡортса) */
$specialPageAliases['ba'] = array(
'Renameuser' => array( 'RenameUser' ),
@@ -354,6 +359,11 @@ $specialPageAliases['vi'] = array(
'Renameuser' => array( 'Đổi_tên_thành_viên', 'Đổi_tên_người_dùng' ),
);
+/** Chinese (中文) */
+$specialPageAliases['zh'] = array(
+ 'Renameuser' => array( '重命名用户', '重新命名用户', '重新命名用戶', '重新命名使用者' ),
+);
+
/** Simplified Chinese (中文(简体)‎) */
$specialPageAliases['zh-hans'] = array(
'Renameuser' => array( '重命名用户' ),
@@ -361,5 +371,5 @@ $specialPageAliases['zh-hans'] = array(
/** Traditional Chinese (中文(繁體)‎) */
$specialPageAliases['zh-hant'] = array(
- 'Renameuser' => array( '重命名使用者' ),
+ 'Renameuser' => array( '重新命名使用者' ),
); \ No newline at end of file
diff --git a/extensions/Renameuser/Renameuser.hooks.php b/extensions/Renameuser/Renameuser.hooks.php
index e5271735..846f9131 100644
--- a/extensions/Renameuser/Renameuser.hooks.php
+++ b/extensions/Renameuser/Renameuser.hooks.php
@@ -46,7 +46,7 @@ class RenameuserHooks {
if ( $wgUser->isAllowed( 'renameuser' ) && $id ) {
$tools[] = Linker::link(
SpecialPage::getTitleFor( 'Renameuser' ),
- wfMessage( 'renameuser-linkoncontribs' )->text(),
+ wfMessage( 'renameuser-linkoncontribs' )->escaped(),
array( 'title' => wfMessage( 'renameuser-linkoncontribs-text' )->parse() ),
array( 'oldusername' => $nt->getText() )
);
diff --git a/extensions/Renameuser/Renameuser.i18n.php b/extensions/Renameuser/Renameuser.i18n.php
deleted file mode 100644
index 009a1cda..00000000
--- a/extensions/Renameuser/Renameuser.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim14f6eb4777dd0358' ) ) {
- function wfJsonI18nShim14f6eb4777dd0358( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim14f6eb4777dd0358';
-}
diff --git a/extensions/Renameuser/Renameuser.php b/extensions/Renameuser/Renameuser.php
index d6832eb9..441b5712 100644
--- a/extensions/Renameuser/Renameuser.php
+++ b/extensions/Renameuser/Renameuser.php
@@ -1,53 +1,15 @@
<?php
-if ( !defined( 'MEDIAWIKI' ) ) die();
-/**
- * A Special Page extension to rename users, runnable by users with renameuser
- * rights
- *
- * @file
- * @ingroup Extensions
- * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
- */
-
-$wgAvailableRights[] = 'renameuser';
-$wgGroupPermissions['bureaucrat']['renameuser'] = true;
-
-$wgExtensionCredits['specialpage'][] = array(
- 'path' => __FILE__,
- 'name' => 'Renameuser',
- 'author' => array( 'Ævar Arnfjörð Bjarmason', 'Aaron Schulz' ),
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Renameuser',
- 'descriptionmsg' => 'renameuser-desc',
-);
-
-# Internationalisation files
-$wgMessagesDirs['Renameuser'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['Renameuser'] = __DIR__ . '/Renameuser.i18n.php';
-$wgExtensionMessagesFiles['RenameuserAliases'] = __DIR__ . '/Renameuser.alias.php';
-
-/**
- * Users with more than this number of edits will have their rename operation
- * deferred via the job queue.
- */
-define( 'RENAMEUSER_CONTRIBJOB', 5000 );
-
-# Add a new log type
-$wgLogTypes[] = 'renameuser';
-$wgLogActionsHandlers['renameuser/renameuser'] = 'RenameuserLogFormatter';
-
-$wgAutoloadClasses['RenameuserHooks'] = __DIR__ . '/Renameuser.hooks.php';
-$wgAutoloadClasses['RenameUserJob'] = __DIR__ . '/RenameUserJob.php';
-$wgAutoloadClasses['RenameuserLogFormatter'] = __DIR__ . '/RenameuserLogFormatter.php';
-$wgAutoloadClasses['RenameuserSQL'] = __DIR__ . '/RenameuserSQL.php';
-$wgAutoloadClasses['SpecialRenameuser'] = __DIR__ . '/specials/SpecialRenameuser.php';
-
-$wgSpecialPages['Renameuser'] = 'SpecialRenameuser';
-$wgSpecialPageGroups['Renameuser'] = 'users';
-$wgJobClasses['renameUser'] = 'RenameUserJob';
-
-$wgHooks['ShowMissingArticle'][] = 'RenameuserHooks::onShowMissingArticle';
-$wgHooks['ContributionsToolLinks'][] = 'RenameuserHooks::onContributionsToolLinks';
-$wgHooks['GetLogTypesOnUser'][] = 'RenameuserHooks::onGetLogTypesOnUser';
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'Renameuser' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Renameuser'] = __DIR__ . '/i18n';
+ $wgExtensionMessagesFiles['RenameuserAliases'] = __DIR__ . '/Renameuser.alias.php';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Renameuser extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the Renameuser extension requires MediaWiki 1.25+' );
+}
diff --git a/extensions/Renameuser/RenameuserLogFormatter.php b/extensions/Renameuser/RenameuserLogFormatter.php
index c7c4678d..37078842 100644
--- a/extensions/Renameuser/RenameuserLogFormatter.php
+++ b/extensions/Renameuser/RenameuserLogFormatter.php
@@ -68,4 +68,25 @@ class RenameuserLogFormatter extends LogFormatter {
return $key;
}
+
+ public function getPreloadTitles() {
+ $params = $this->extractParameters();
+ if ( !isset( $params[3] ) ) {
+ // Very old log format, everything in comment - legaciest
+ return array();
+ }
+ if ( !isset( $params[4] ) ) {
+ // Old log format - legacier
+ $newUserName = $params[3];
+ } else {
+ $newUserName = $params[4];
+ }
+
+ $title = Title::makeTitleSafe( NS_USER, $newUserName );
+ if ( $title ) {
+ return array( $title );
+ }
+
+ return array();
+ }
}
diff --git a/extensions/Renameuser/RenameuserSQL.php b/extensions/Renameuser/RenameuserSQL.php
index 77e4d8a0..dfdb403d 100644
--- a/extensions/Renameuser/RenameuserSQL.php
+++ b/extensions/Renameuser/RenameuserSQL.php
@@ -46,31 +46,68 @@ class RenameuserSQL {
public $checkIfUserExists;
/**
+ * User object of the user performing the rename, for logging purposes
+ *
+ * @var User
+ */
+ private $renamer;
+
+ /**
+ * Reason to be used in the log entry
+ *
+ * @var string
+ */
+ private $reason = '';
+
+ /**
+ * A prefix to use in all debug log messages
+ *
+ * @var string
+ */
+ private $debugPrefix = '';
+
+ /**
+ * Users with more than this number of edits will have their rename operation
+ * deferred via the job queue.
+ */
+ const CONTRIB_JOB = 500;
+
+ /**
* Constructor
*
* @param $old string The old username
* @param $new string The new username
* @param $uid
+ * @param User $renamer
* @param $options Array of options
* 'checkIfUserExists' - bool, whether to update the user table
*/
- function __construct( $old, $new, $uid, $options = array() ) {
+ function __construct( $old, $new, $uid, User $renamer, $options = array() ) {
$this->old = $old;
$this->new = $new;
$this->uid = $uid;
+ $this->renamer = $renamer;
$this->checkIfUserExists = true;
if ( isset ( $options['checkIfUserExists'] ) ) {
$this->checkIfUserExists = $options['checkIfUserExists'];
}
+ if ( isset( $options['debugPrefix'] ) ) {
+ $this->debugPrefix = $options['debugPrefix'];
+ }
+
+ if ( isset( $options['reason'] ) ) {
+ $this->reason = $options['reason'];
+ }
+
$this->tables = array(); // Immediate updates
$this->tables['image'] = array( 'img_user_text', 'img_user' );
$this->tables['oldimage'] = array( 'oi_user_text', 'oi_user' );
$this->tables['filearchive'] = array('fa_user_text','fa_user');
$this->tablesJob = array(); // Slow updates
// If this user has a large number of edits, use the jobqueue
- if ( User::newFromId( $uid )->getEditCount() > RENAMEUSER_CONTRIBJOB ) {
+ if ( User::newFromId( $uid )->getEditCount() > self::CONTRIB_JOB ) {
$this->tablesJob['revision'] = array( 'rev_user_text', 'rev_user', 'rev_timestamp' );
$this->tablesJob['archive'] = array( 'ar_user_text', 'ar_user', 'ar_timestamp' );
$this->tablesJob['logging'] = array( 'log_user_text', 'log_user', 'log_timestamp' );
@@ -86,7 +123,14 @@ class RenameuserSQL {
$this->tables['recentchanges'] = array( 'rc_user_text', 'rc_user' );
}
- wfRunHooks( 'RenameUserSQL', array( $this ) );
+ Hooks::run( 'RenameUserSQL', array( $this ) );
+ }
+
+ protected function debug( $msg ) {
+ if ( $this->debugPrefix ) {
+ $msg = "{$this->debugPrefix}: $msg";
+ }
+ wfDebugLog( 'Renameuser', $msg );
}
/**
@@ -95,15 +139,17 @@ class RenameuserSQL {
function rename() {
global $wgMemc, $wgAuth, $wgUpdateRowsPerJob;
- wfProfileIn( __METHOD__ );
+ // Grab the user's edit count first, used in log entry
+ $contribs = User::newfromId( $this->uid )->getEditCount();
$dbw = wfGetDB( DB_MASTER );
$dbw->begin();
- wfRunHooks( 'RenameUserPreRename', array( $this->uid, $this->old, $this->new ) );
+ Hooks::run( 'RenameUserPreRename', array( $this->uid, $this->old, $this->new ) );
// Rename and touch the user before re-attributing edits,
// this avoids users still being logged in and making new edits while
// being renamed, which leaves edits at the old name.
+ $this->debug( "Starting rename of {$this->old} to {$this->new}" );
$dbw->update( 'user',
array( 'user_name' => $this->new, 'user_touched' => $dbw->timestamp() ),
array( 'user_name' => $this->old, 'user_id' => $this->uid ),
@@ -112,7 +158,7 @@ class RenameuserSQL {
if ( !$dbw->affectedRows() && $this->checkIfUserExists ) {
$dbw->rollback();
- wfProfileOut( __METHOD__ );
+ $this->debug( "User {$this->old} does not exist, bailing out" );
return false;
}
@@ -135,9 +181,16 @@ class RenameuserSQL {
// being renamed, which makes admin tasks more of a pain...
$oldTitle = Title::makeTitle( NS_USER, $this->old );
$newTitle = Title::makeTitle( NS_USER, $this->new );
+ $this->debug( "Updating logging table for {$this->old} to {$this->new}" );
+ if ( is_callable( 'SpecialLog::getLogTypesOnUser' ) ) { // 1.25+
+ $logTypesOnUser = SpecialLog::getLogTypesOnUser();
+ } else {
+ // Fallback to hardcoded list
+ $logTypesOnUser = array( 'block', 'rights' );
+ }
$dbw->update( 'logging',
array( 'log_title' => $newTitle->getDBkey() ),
- array( 'log_type' => array( 'block', 'rights' ),
+ array( 'log_type' => $logTypesOnUser,
'log_namespace' => NS_USER,
'log_title' => $oldTitle->getDBkey() ),
__METHOD__ );
@@ -221,8 +274,10 @@ class RenameuserSQL {
$dbw->freeResult( $res );
}
- if ( count( $jobs ) > 0 ) {
+ $count = count( $jobs );
+ if ( $count > 0 ) {
JobQueueGroup::singleton()->push( $jobs, JobQueue::QOS_ATOMIC ); // don't commit yet
+ $this->debug( "Queued $count jobs for {$this->old} to {$this->new}" );
}
// Commit the transaction
@@ -234,9 +289,24 @@ class RenameuserSQL {
// Clear caches and inform authentication plugins
$user = User::newFromId( $this->uid );
$wgAuth->updateExternalDB( $user );
- wfRunHooks( 'RenameUserComplete', array( $this->uid, $this->old, $this->new ) );
+ Hooks::run( 'RenameUserComplete', array( $this->uid, $this->old, $this->new ) );
+
+ // Log it!
+ $logEntry = new ManualLogEntry( 'renameuser', 'renameuser' );
+ $logEntry->setPerformer( $this->renamer );
+ $logEntry->setTarget( $oldTitle );
+ $logEntry->setComment( $this->reason );
+ $logEntry->setParameters( array(
+ '4::olduser' => $this->old,
+ '5::newuser' => $this->new,
+ '6::edits' => $contribs
+ ) );
+ $logid = $logEntry->insert();
+ $logEntry->publish( $logid );
+
+
+ $this->debug( "Finished rename for {$this->old} to {$this->new}" );
- wfProfileOut( __METHOD__ );
return true;
}
}
diff --git a/extensions/Renameuser/SpecialRenameuser.php b/extensions/Renameuser/SpecialRenameuser.php
index 0a78eed0..c8a0cb70 100644
--- a/extensions/Renameuser/SpecialRenameuser.php
+++ b/extensions/Renameuser/SpecialRenameuser.php
@@ -3,3 +3,7 @@
* Renameuser file for b/c... this sucks
*/
require_once( __DIR__ . '/Renameuser.php' );
+
+$wgExtensionFunctions[] = function() {
+ wfWarn( 'The deprecated entrypoint of SpecialRenameuser.php is being used. It will be removed in a future release. Use Renameuser.php instead' );
+};
diff --git a/extensions/Renameuser/extension.json b/extensions/Renameuser/extension.json
new file mode 100644
index 00000000..b01a6de8
--- /dev/null
+++ b/extensions/Renameuser/extension.json
@@ -0,0 +1,57 @@
+{
+ "name": "Renameuser",
+ "author": [
+ "Ævar Arnfjörð Bjarmason",
+ "Aaron Schulz"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:Renameuser",
+ "descriptionmsg": "renameuser-desc",
+ "license-name": "GPL-2.0+",
+ "type": "specialpage",
+ "ExtensionMessagesFiles": {
+ "RenameuserAliases": "Renameuser.alias.php"
+ },
+ "LogTypes": [
+ "renameuser"
+ ],
+ "MessagesDirs": {
+ "Renameuser": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "ShowMissingArticle": [
+ "RenameuserHooks::onShowMissingArticle"
+ ],
+ "ContributionsToolLinks": [
+ "RenameuserHooks::onContributionsToolLinks"
+ ],
+ "GetLogTypesOnUser": [
+ "RenameuserHooks::onGetLogTypesOnUser"
+ ]
+ },
+ "JobClasses": {
+ "renameUser": "RenameUserJob"
+ },
+ "GroupPermissions": {
+ "bureaucrat": {
+ "renameuser": true
+ }
+ },
+ "LogActionsHandlers": {
+ "renameuser/renameuser": "RenameuserLogFormatter"
+ },
+ "AvailableRights": [
+ "renameuser"
+ ],
+ "SpecialPages": {
+ "Renameuser": "SpecialRenameuser"
+ },
+ "AutoloadClasses": {
+ "RenameuserHooks": "Renameuser.hooks.php",
+ "RenameUserJob": "RenameUserJob.php",
+ "RenameuserLogFormatter": "RenameuserLogFormatter.php",
+ "RenameuserSQL": "RenameuserSQL.php",
+ "SpecialRenameuser": "specials/SpecialRenameuser.php"
+ }
+}
diff --git a/extensions/Renameuser/i18n/ar.json b/extensions/Renameuser/i18n/ar.json
index 6e523408..7cf926dc 100644
--- a/extensions/Renameuser/i18n/ar.json
+++ b/extensions/Renameuser/i18n/ar.json
@@ -5,7 +5,8 @@
"DRIHEM",
"Meno25",
"Mido",
- "OsamaK"
+ "OsamaK",
+ "Abanima"
]
},
"renameuser": "إعادة تسمية مستخدم",
@@ -33,6 +34,7 @@
"renameuser-page-unmoved": "لم يتمكن من نقل الصفحة $1 إلى $2.",
"log-name-renameuser": "سجل إعادة تسمية المستخدمين",
"log-description-renameuser": "هذا سجل بالتغييرات في أسماء المستخدمين.",
+ "logentry-renameuser-renameuser": "{{GENDER:$2|غيّر|غيّرت}} $1 اسم $4 ({{PLURAL:$6|تعديل واحد|تعديلان|$6 تعديلات|$6 تعديلاً|$6 تعديل}}) إلى $5",
"logentry-renameuser-renameuser-legacier": "$1 أعاد تسمية $4 إلى $5",
"renameuser-move-log": "نقل الصفحة تلقائيا خلال إعادة تسمية المستخدم من \"[[User:$1|$1]]\" إلى \"[[User:$2|$2]]\"",
"action-renameuser": "إعادة تسمية المستخدمين",
diff --git a/extensions/Renameuser/i18n/bn.json b/extensions/Renameuser/i18n/bn.json
index 1ed15e27..2e17c3cb 100644
--- a/extensions/Renameuser/i18n/bn.json
+++ b/extensions/Renameuser/i18n/bn.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Bellayet",
- "Nasir8891"
+ "Nasir8891",
+ "Aftabuzzaman"
]
},
"renameuser": "ব্যবহারকারী নামান্তর করো",
@@ -30,7 +31,9 @@
"renameuser-page-unmoved": "পাতাটি $1 থেকে $2 তে সরিয়ে নেওয়া যাবে না।",
"log-name-renameuser": "ব্যবহারকারী নামান্তরের লগ",
"log-description-renameuser": "এটি ব্যাবহারকারী নামের পরিবর্তনের লগ",
- "renameuser-move-log": "যখন ব্যবহারকারী \"[[User:$1|$1]]\" থেকে \"[[User:$2|$2]]\" তে নামান্তরিত হবে তখন সয়ঙ্ক্রিয়ভাবে পাতা সরিয়ে নেওয়া হয়েছে",
+ "logentry-renameuser-renameuser": "$1 ব্যবহারকারী $4 কে ({{PLURAL:$6|$6টি সম্পাদনা}}) $5-এ {{GENDER:$2|নামান্তরিত করেছেন}}",
+ "logentry-renameuser-renameuser-legacier": "$1 ব্যবহারকারী $4 কে $5-এ নামান্তরিত করেছেন",
+ "renameuser-move-log": "যখন ব্যবহারকারী \"[[User:$1|$1]]\" থেকে \"[[User:$2|$2]]\" তে নামান্তরিত হয় তখন স্বয়ংক্রিয়ভাবে পাতা সরিয়ে নেওয়া হয়েছে",
"action-renameuser": "ব্যবহারকারী নাম পরিবর্তন",
"right-renameuser": "ব্যবহারকারীদের পুনরায় নাম দাও",
"renameuser-renamed-notice": "এই ব্যবহারকারীর নাম পরিবর্তন করা হয়েছে।\nসূত্র হিসাবে নিচে নাম পরিবর্তন লগ দেওয়া হল।"
diff --git a/extensions/Renameuser/i18n/crh-cyrl.json b/extensions/Renameuser/i18n/crh-cyrl.json
index bdcb0c31..cfda26c5 100644
--- a/extensions/Renameuser/i18n/crh-cyrl.json
+++ b/extensions/Renameuser/i18n/crh-cyrl.json
@@ -4,5 +4,7 @@
"Don Alessandro"
]
},
+ "renameuser-page-moved": "$1 саифесининъ ады $2 деп денъиштирильди.",
+ "renameuser-page-unmoved": "$1 саифесининъ ады $2 оларакъ денъиштирилип оламай.",
"log-name-renameuser": "Къулланыджы ады денъишиклиги журналы"
}
diff --git a/extensions/Renameuser/i18n/crh-latn.json b/extensions/Renameuser/i18n/crh-latn.json
index 7c0db9dd..4971c51d 100644
--- a/extensions/Renameuser/i18n/crh-latn.json
+++ b/extensions/Renameuser/i18n/crh-latn.json
@@ -4,5 +4,7 @@
"Don Alessandro"
]
},
+ "renameuser-page-moved": "$1 saifesiniñ adı $2 dep deñiştirildi.",
+ "renameuser-page-unmoved": "$1 saifesiniñ adı $2 olaraq deñiştirilip olamay.",
"log-name-renameuser": "Qullanıcı adı deñişikligi jurnalı"
}
diff --git a/extensions/Renameuser/i18n/eo.json b/extensions/Renameuser/i18n/eo.json
index b6505b45..a0cbabf9 100644
--- a/extensions/Renameuser/i18n/eo.json
+++ b/extensions/Renameuser/i18n/eo.json
@@ -3,7 +3,8 @@
"authors": [
"ArnoLagrange",
"Tlustulimu",
- "Yekrats"
+ "Yekrats",
+ "KuboF"
]
},
"renameuser": "Alinomigi uzanton",
@@ -32,7 +33,7 @@
"log-name-renameuser": "Protokolo pri alinomigoj de uzantoj",
"log-description-renameuser": "Jen protokolo pri ŝanĝoj de salutnomoj.",
"logentry-renameuser-renameuser": "$1 {{GENDER:$2|alinomiĝis}} uzanton $4 ({{PLURAL:$6|$6 redakto|$6 redaktoj}}) al $5",
- "logentry-renameuser-renameuser-legacier": "$1 alinomigis uzanton $4 al $5",
+ "logentry-renameuser-renameuser-legacier": "$1 alinomis uzanton $4 al $5",
"renameuser-move-log": "Aŭtomate movis paĝon dum alinomigo de la uzanto \"[[User:$1|$1]]\" al \"[[User:$2|$2]]\"",
"action-renameuser": "Alinomigi uzantojn",
"right-renameuser": "Alinomigi uzantojn",
diff --git a/extensions/Renameuser/i18n/fa.json b/extensions/Renameuser/i18n/fa.json
index eb0ff9e9..7960bd9f 100644
--- a/extensions/Renameuser/i18n/fa.json
+++ b/extensions/Renameuser/i18n/fa.json
@@ -5,7 +5,8 @@
"Huji",
"Reza1615",
"Wayiran",
- "Alirezaaa"
+ "Alirezaaa",
+ "Calak"
]
},
"renameuser": "تغییر نام کاربر",
@@ -35,7 +36,7 @@
"log-description-renameuser": "این سیاههٔ تغییر نام کاربران است.",
"logentry-renameuser-renameuser": "$1 نام $4 ({{PLURAL:$6|$6 ویرایش|}}) را به $5 {{GENDER:$2|تغییر داد}}",
"logentry-renameuser-renameuser-legacier": "$1 نام کاربری $4 را به $5 تغییر داد",
- "renameuser-move-log": "صفحه در ضمن تغییر نام «[[User:$1|$1]]» به «[[User:$2|$2]]» به طور خودکار انتقال داده شد.",
+ "renameuser-move-log": "صفحه در ضمن تغییر نام کاربر «[[User:$1|$1]]» به «[[User:$2|$2]]» به طور خودکار منتقل شد",
"action-renameuser": "تغییر نام کاربران",
"right-renameuser": "تغییر نام کاربران",
"renameuser-renamed-notice": "این کاربر تغییر نام داده‌است.\nسیاهه تغییر نام در ادامه آمده است."
diff --git a/extensions/Renameuser/i18n/fy.json b/extensions/Renameuser/i18n/fy.json
index 3b4311c0..50a0d214 100644
--- a/extensions/Renameuser/i18n/fy.json
+++ b/extensions/Renameuser/i18n/fy.json
@@ -2,14 +2,15 @@
"@metadata": {
"authors": [
"SK-luuut",
- "Snakesteuben"
+ "Snakesteuben",
+ "Robin0van0der0vliet"
]
},
"renameuser": "Feroarje in meidochnamme",
"renameuser-desc": "Foeget in [[Special:RenameUser|spesiale side]] ta om in meidoggersnamme te feroarjen (jo hawwe hjirfoar it ''renameuser'' rjocht nedich)",
"renameuserold": "Alde namme:",
"renameusernew": "Nije namme:",
- "renameuserreason": "Reden foar nammewiziging:",
+ "renameuserreason": "Reden:",
"renameusermove": "Werneam meidogger en oerlis siden (mei ûnderlizzende siden) nei de nije namme",
"renameuserreserve": "Takomst brûken fan de âlde meidoggersnamme foarkomme",
"renameuserwarnings": "Warskôgings:",
diff --git a/extensions/Renameuser/i18n/he.json b/extensions/Renameuser/i18n/he.json
index ad1b6945..f5345946 100644
--- a/extensions/Renameuser/i18n/he.json
+++ b/extensions/Renameuser/i18n/he.json
@@ -36,7 +36,7 @@
"log-name-renameuser": "יומן שינויי שמות משתמש",
"log-description-renameuser": "זהו יומן השינויים בשמות המשתמשים.",
"logentry-renameuser-renameuser": "$1 {{GENDER:$2|שינה|שינתה}} את שם המשתמש $4 &rlm;({{PLURAL:$6|עריכה אחת|$6 עריכות}}) אל $5",
- "logentry-renameuser-renameuser-legacier": "$1 {{GENDER:$2|שינה|שינתה}} את שם המשתמש $4 ל{{GRAMMAR:תחילית|$5}}",
+ "logentry-renameuser-renameuser-legacier": "$1 {{GENDER:$2|שינה|שינתה}} את שם המשתמש $4 ל{{GRAMMAR:תחילית|$5}}&rlm;",
"renameuser-move-log": "העברה אוטומטית בעקבות שינוי שם המשתמש \"[[User:$1|$1]]\" ל־\"[[User:$2|$2]]\"",
"action-renameuser": "לשנות שמות משתמש",
"right-renameuser": "שינוי שמות משתמשים",
diff --git a/extensions/Renameuser/i18n/hr.json b/extensions/Renameuser/i18n/hr.json
index 95f60050..045f3622 100644
--- a/extensions/Renameuser/i18n/hr.json
+++ b/extensions/Renameuser/i18n/hr.json
@@ -6,7 +6,8 @@
"Ex13",
"Roberta F.",
"SpeedyGonsales",
- "Tivek"
+ "Tivek",
+ "MaGa"
]
},
"renameuser": "Preimenuj suradnika",
@@ -34,6 +35,7 @@
"renameuser-page-unmoved": "Stranica $1 ne može biti preimenovana u $2.",
"log-name-renameuser": "Evidencija preimenovanja suradnika",
"log-description-renameuser": "Ovo je evidencija preimenovanja suradničkih imena",
+ "logentry-renameuser-renameuser": "$1 {{GENDER:$2|je preimenovao|je preimenovala}} suradnika $4 ({{PLURAL:$6|$6 uređivanje|$6 uređivanja|$6 uređivanja}}) u $5.",
"renameuser-move-log": "Stranica suradnika je premještena prilikom preimenovanja iz \"[[User:$1|$1]]\" u \"[[User:$2|$2]]\"",
"right-renameuser": "Preimenovati suradnike",
"renameuser-renamed-notice": "Ovaj suradnik je preimenovan.\nEvidencija preimenovanja suradnika je prikazana ispod kao obavijest."
diff --git a/extensions/Renameuser/i18n/kk-cyrl.json b/extensions/Renameuser/i18n/kk-cyrl.json
index 817a24a2..57cfd6fb 100644
--- a/extensions/Renameuser/i18n/kk-cyrl.json
+++ b/extensions/Renameuser/i18n/kk-cyrl.json
@@ -1,22 +1,39 @@
{
"@metadata": {
"authors": [
- "Arystanbek"
+ "Arystanbek",
+ "Нұрлан Рахымжанов"
]
},
- "renameuser": "Қатысушыны қайта атау",
- "renameuserold": "Ағымдағы қатысушы аты:",
+ "renameuser": "Қатысушы есімін өзгерту",
+ "renameuser-linkoncontribs": "қатысушы есімін өзгерту",
+ "renameuser-linkoncontribs-text": "Бұл қатысушының есімін өзгерту",
+ "renameuser-desc": "Қатысушы есімін өзгерту [[Special:RenameUser|мүмкіндігін]] қосады (<code>renameuser</code> құқығын қажет етеді)",
+ "renameuserold": "Қазіргі қатысушы аты:",
"renameusernew": "Жаңа қатысушы аты:",
- "renameuserreason": "Қайта атау себебі:",
+ "renameuserreason": "Себебі:",
"renameusermove": "Қатысушының жеке және талқылау беттерін (және де олардың төменгі беттерін) жаңа атауға жылжыту",
+ "renameusersuppress": "Жаңа атауына бағыттау бетін бастамау",
+ "renameuserreserve": "Бұрынғы қатысушы есімін келешекте қолдана алмайтындай ету",
+ "renameuserwarnings": "Ескертулер:",
+ "renameuserconfirm": "Иә, қатысушы есімін өзгерт",
"renameusersubmit": "Жіберу",
+ "renameuser-submit-blocklog": "Қатысушының бұғатталу журналын көрсету",
"renameusererrordoesnotexist": "«<nowiki>$1</nowiki>» деген қатысушы жоқ",
"renameusererrorexists": "«<nowiki>$1</nowiki>» деген қатысушы бар түге",
"renameusererrorinvalid": "«<nowiki>$1</nowiki>» қатысушы аты жарамсыз",
- "renameusersuccess": "«<nowiki>$1</nowiki>» деген қатысушы аты «<nowiki>$2</nowiki>» дегенге ауыстырылды",
- "renameuser-page-exists": "$1 деген бет бар түге, және өздік түрде оның үстіне ештеңе жазылмайды.",
+ "renameuser-error-request": "Сұранымды жіберуде мәселе шықты.\nАртқа қайтып қайта байқап көріңіз.",
+ "renameuser-error-same-user": "Бұрыңғысымен бірдей нәрсе болғандықтан қатысушы есімін өзгерте алмайсыз.",
+ "renameusersuccess": "«<nowiki>$1</nowiki>» деген қатысушы аты «<nowiki>$2</nowiki>» дегенге ауыстырылды.",
+ "renameuser-page-exists": "$1 деген бет бар түге және өздігінен үстіне жазылмайды.",
"renameuser-page-moved": "$1 деген бет $2 деген бетке жылжытылды.",
"renameuser-page-unmoved": "$1 деген бет $2 деген бетке жылжытылмады.",
"log-name-renameuser": "Қатысушыны есімін өзгеру журналы",
- "renameuser-move-log": "«[[User:$1|$1]]» деген қатысушы атын «[[User:$2|$2]]» дегенге ауысқанда бет өздік түрде жылжытылды"
+ "log-description-renameuser": "Бұл қатысушы есімдерін өзгерту журналы.",
+ "logentry-renameuser-renameuser": "$1 қатысушы есімін $4 дегеннен ({{PLURAL:$6|$6 өңдеме жасаған|$6 өңдеме жасаған}}) $5 дегенге {{GENDER:$2|өзгерті}}",
+ "logentry-renameuser-renameuser-legacier": "$1 қатысушы есімін $4 дегеннен $5 дегенге өзгерті",
+ "renameuser-move-log": "«[[User:$1|$1]]» деген қатысушы атын «[[User:$2|$2]]» дегенге өзгерткенде бет өздігінен жылжытылды",
+ "action-renameuser": "қатысушылардың есімін өзгерту",
+ "right-renameuser": "Қатысушылардың есімін өзгерту",
+ "renameuser-renamed-notice": "Бұл қатысушының есімі өзгертілді.\nДерек үшін есім өзгерту журналы төменде көрсетілген."
}
diff --git a/extensions/Renameuser/i18n/krc.json b/extensions/Renameuser/i18n/krc.json
index efcb7428..e016a6cd 100644
--- a/extensions/Renameuser/i18n/krc.json
+++ b/extensions/Renameuser/i18n/krc.json
@@ -4,5 +4,6 @@
"Iltever"
]
},
- "renameuser-linkoncontribs": "къошулуучуну атын ауушдур"
+ "renameuser-linkoncontribs": "къошулуучуну атын ауушдур",
+ "log-name-renameuser": "Къошулуучуланы атларын ауушдуруу журнал"
}
diff --git a/extensions/Renameuser/i18n/ksh.json b/extensions/Renameuser/i18n/ksh.json
index c6d63078..f42ce440 100644
--- a/extensions/Renameuser/i18n/ksh.json
+++ b/extensions/Renameuser/i18n/ksh.json
@@ -10,7 +10,7 @@
"renameuser-desc": "[[Special:RenameUser|Metmaacher ömdäufe]] — ävver do bruch mer et Rääsch „<i lang=en\">renameuser</i>“ för.",
"renameuserold": "Dä ahle Metmaacher-Name",
"renameusernew": "Dä neue Metmaacher-Name",
- "renameuserreason": "Jrund för et Ömdäufe:",
+ "renameuserreason": "Dä Jrond för et Ömdäufe:",
"renameusermove": "De Metmaachersigg met Klaaf- un Ungersigge op dä neue Metmaacher-Name ömstelle",
"renameusersuppress": "Donn kein Ömleidong op dä neue Name aanlääje",
"renameuserreserve": "Donn dä Name fun dämm Metmaacher dobei sperre, dat_e nit norrens neu aanjemelldt weed.",
@@ -29,6 +29,8 @@
"renameuser-page-unmoved": "Di Sigg „$1“ kunnt nit op „$2“ ömjenannt wääde.",
"log-name-renameuser": "Logboch vum Metmaacher-Ömdäufe",
"log-description-renameuser": "Dat es et Logboch vun de ömjedäufte Metmaachere",
+ "logentry-renameuser-renameuser": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 Hät dä Metmaacher „$4“, dä {{PLURAL:$6|ein Änderong|$6 Änderonge|kein Änderonge}} aam Wikki jemaat hät, op „$5“ ömjedäuf.",
+ "logentry-renameuser-renameuser-legacier": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 Hät dä Metmaacher „$4“ op „$5“ ömjedäuf.",
"renameuser-move-log": "Di Sigg weet automatesch ömjenannt weil mer dä Metmaacher „[[User:$1|$1]]“ op „[[User:$2|$2]]“ öm am däufe sin.",
"action-renameuser": "Metmaacher ömdäufe",
"right-renameuser": "Metmaacher ömdäufe",
diff --git a/extensions/Renameuser/i18n/lrc.json b/extensions/Renameuser/i18n/lrc.json
index b6d0b6d2..e732d27e 100644
--- a/extensions/Renameuser/i18n/lrc.json
+++ b/extensions/Renameuser/i18n/lrc.json
@@ -5,12 +5,29 @@
"Mogoeilor"
]
},
+ "renameuser": "آلشت دئن نوم کاریار",
+ "renameuser-linkoncontribs": "آلشت دئن نوم کاریار",
+ "renameuser-linkoncontribs-text": "آلشت دئن نوم ای کاریار",
+ "renameuserold": "نوم کاریاری ایسنی:",
"renameusernew": "نوم کاروری تازه:",
"renameuserreason": "دلیل:",
+ "renameusersuppress": "سی نوم تازه واگردونی راس نکید",
+ "renameuserwarnings": "زئناریا:",
+ "renameuserconfirm": "هری، کاریار نه د نو نوم بنه",
+ "renameusersubmit": "دئن",
"renameuser-submit-blocklog": "قلف پهرستنومه سی کارور نشو بیه",
+ "renameusererrordoesnotexist": "کاریار \"<nowiki>$1</nowiki>\" وجود ناره.",
+ "renameusererrorexists": "کاریار \"<nowiki>$1</nowiki>\" ایسه هئیش.",
+ "renameusererrorinvalid": "کاریار\"<nowiki>$1</nowiki>\" معتور نئ.",
+ "renameuser-error-same-user": "شما نمی تونیت یه گل کاریار نه چی چی ای که دماتر بیه نوم بنیت.",
+ "renameusersuccess": "کاریار\"<nowiki>$1</nowiki>\" د نو نوم نیائه بیه\"<nowiki>$2</nowiki>\".",
+ "renameuser-page-exists": "بلگه $1 ایسنی هئیش و نبوئه خودانجومن فره نویس با.",
"renameuser-page-moved": "بلگه $1 د $2 جا وه جا بیه",
"renameuser-page-unmoved": "نبوئه بلگه $1 د $2 جا وه جا بوئه",
"log-name-renameuser": "پهرستنومه دواره نوم دئن د کارور",
"log-description-renameuser": "یه پهرستنومه آلشت دئن نوم کاروریا هئ.",
+ "logentry-renameuser-renameuser-legacier": "کاریار $1 سی$4 تا$5 د نوم نیائه بیه",
+ "action-renameuser": "آلشت دئن نوم کاریار",
+ "right-renameuser": "آلشت دئن نوم کاریار",
"renameuser-renamed-notice": "ای کارور یه گل نوم هنی وش دئه بیه.\nپهرستنومه نوم هنی دئن وا سرچشمه زیر دروس بیه."
}
diff --git a/extensions/Renameuser/i18n/ps.json b/extensions/Renameuser/i18n/ps.json
index 059bca18..e7fd00ce 100644
--- a/extensions/Renameuser/i18n/ps.json
+++ b/extensions/Renameuser/i18n/ps.json
@@ -21,6 +21,7 @@
"renameusererrorinvalid": "د \"<nowiki>$1</nowiki>\" کارن نوم سم نه دی.",
"renameuser-error-request": "د غوښتنې په ترلاسه کولو کې يوه ستونزه راپېښه شوه.\nمهرباني وکړی بېرته پرشا ولاړ شی او يو ځل بيا پرې کوښښ وکړی.",
"renameuser-page-moved": "د $1 مخ $2 ته ولېږدل شو.",
+ "renameuser-page-unmoved": "د $1 مخ $2 ته و نه لېږدل شو.",
"log-name-renameuser": "د کارن-نوم يادښت",
"action-renameuser": "کارن-نومونه بدلول",
"right-renameuser": "کارن-نومونه بدلول"
diff --git a/extensions/Renameuser/i18n/qqq.json b/extensions/Renameuser/i18n/qqq.json
index 92246e18..2ceff6e7 100644
--- a/extensions/Renameuser/i18n/qqq.json
+++ b/extensions/Renameuser/i18n/qqq.json
@@ -16,7 +16,7 @@
"renameuser": "{{doc-special|RenameUser}}\n{{Identical|Rename user}}",
"renameuser-linkoncontribs": "Link description used on [[Special:Contributions]] and [[Special:DeletedContributions]]. Only added if a user has rights to rename users.\n{{Identical|Rename user}}",
"renameuser-linkoncontribs-text": "Tooltip for {{msg-mw|renameuser-linkoncontribs}}.",
- "renameuser-desc": "{{desc|name=Rename user|url=http://www.mediawiki.org/wiki/Extension:Renameuser}}",
+ "renameuser-desc": "{{desc|name=Rename user|url=https://www.mediawiki.org/wiki/Extension:Renameuser}}",
"renameuser-summary": "{{notranslate}}",
"renameuserold": "Used as label for the \"Old username\" input box in [[Special:RenameUser]].\n\nSee also:\n* {{msg-mw|Renameusernew}}",
"renameusernew": "Used as label for the \"New username\" input box in [[Special:RenameUser]].\n\nSee also:\n* {{msg-mw|Renameuserold}}",
diff --git a/extensions/Renameuser/i18n/ru.json b/extensions/Renameuser/i18n/ru.json
index 74504ee0..155e2bf8 100644
--- a/extensions/Renameuser/i18n/ru.json
+++ b/extensions/Renameuser/i18n/ru.json
@@ -38,7 +38,7 @@
"renameuser-page-unmoved": "Страница $1 не может быть переименована в $2.",
"log-name-renameuser": "Журнал переименований участников",
"log-description-renameuser": "Это журнал произведённых переименований зарегистрированных участников.",
- "logentry-renameuser-renameuser": "$1 {{GENDER:$2|переименовал}} участника $4 ({{PLURAL:$6|$6 правка|$6 правок|$6 правки}}) в $5",
+ "logentry-renameuser-renameuser": "$1 {{GENDER:$2|переименовал}} участника $4 ({{PLURAL:$6|$6 правка|$6 правки|$6 правок}}) в $5",
"logentry-renameuser-renameuser-legacier": "$1 переименовал пользователя $4 в $5",
"renameuser-move-log": "Автоматически в связи с переименованием учётной записи «[[User:$1|$1]]» в «[[User:$2|$2]]»",
"action-renameuser": "переименование участников",
diff --git a/extensions/Renameuser/i18n/sr-ec.json b/extensions/Renameuser/i18n/sr-ec.json
index 8d8e9c79..831c29b2 100644
--- a/extensions/Renameuser/i18n/sr-ec.json
+++ b/extensions/Renameuser/i18n/sr-ec.json
@@ -22,7 +22,7 @@
"renameuserreserve": "Блокирај старо корисничко име за даљу употребу",
"renameuserwarnings": "Упозорења:",
"renameuserconfirm": "Да, преименуј корисника",
- "renameusersubmit": "Прихвати",
+ "renameusersubmit": "Пошаљи",
"renameuser-submit-blocklog": "Дневник блокирања за корисника",
"renameusererrordoesnotexist": "Корисник „<nowiki>$1</nowiki>“ не постоји.",
"renameusererrorexists": "Корисник „<nowiki>$1</nowiki>“ већ постоји.",
@@ -35,7 +35,7 @@
"renameuser-page-unmoved": "Страница $1 не може да се премести на $2.",
"log-name-renameuser": "Дневник преименовања корисника",
"log-description-renameuser": "Испод је списак преименованих корисника.",
- "logentry-renameuser-renameuser": "$1 је {{GENDER:$2|преименовао|преименовала}} корисника $4 ({{PLURAL:$6|$6 измену|$6 измена}}) у $5",
+ "logentry-renameuser-renameuser": "$1 је {{GENDER:$2|преименовао|преименовала}} корисника $4 ({{PLURAL:$6|$6 измена|$6 измене|$6 измена}}) у $5",
"logentry-renameuser-renameuser-legacier": "$1 је преименовао корисника $4 у $5",
"renameuser-move-log": "Аутоматско премештање странице због преименовања корисника „[[User:$1|$1]]“ у „[[User:$2|$2]]“",
"action-renameuser": "преименовање корисника",
diff --git a/extensions/Renameuser/i18n/sr-el.json b/extensions/Renameuser/i18n/sr-el.json
index dea54752..ea3137c8 100644
--- a/extensions/Renameuser/i18n/sr-el.json
+++ b/extensions/Renameuser/i18n/sr-el.json
@@ -20,7 +20,7 @@
"renameuserreserve": "Blokiraj staro korisničko ime za dalju upotrebu",
"renameuserwarnings": "Upozorenja:",
"renameuserconfirm": "Da, preimenuj korisničko ime.",
- "renameusersubmit": "Prihvati",
+ "renameusersubmit": "Pošalji",
"renameuser-submit-blocklog": "Dnevnik blokiranja za korisnika",
"renameusererrordoesnotexist": "Korisnik „<nowiki>$1</nowiki>“ ne postoji.",
"renameusererrorexists": "Korisnik \"<nowiki>$1</nowiki>\" već postoji",
@@ -33,7 +33,8 @@
"renameuser-page-unmoved": "Stranica $1 ne može biti premeštena na $2.",
"log-name-renameuser": "Dnevnik preimenovanja korisnika",
"log-description-renameuser": "Ispod je spisak preimenovanih korisnika.",
- "logentry-renameuser-renameuser": "$1 je {{GENDER:$2|preimenovao|preimenovala}} korisnika $4 ({{PLURAL:$6|$6 izmenu|$6 izmena}}) u $5",
+ "logentry-renameuser-renameuser": "$1 je {{GENDER:$2|preimenovao|preimenovala}} korisnika $4 ({{PLURAL:$6|$6 izmena|$6 izmene|$6 izmena}}) u $5",
+ "logentry-renameuser-renameuser-legacier": "$1 je preimenovao korisnika $4 u $5",
"renameuser-move-log": "Automatsko premeštanje stranice zbog preimenovanja korisnika „[[User:$1|$1]]“ u „[[User:$2|$2]]“",
"action-renameuser": "preimenovanje korisnika",
"right-renameuser": "preimenovanje korisničkih imena",
diff --git a/extensions/Renameuser/i18n/uz.json b/extensions/Renameuser/i18n/uz.json
index 9f445dff..a15bc500 100644
--- a/extensions/Renameuser/i18n/uz.json
+++ b/extensions/Renameuser/i18n/uz.json
@@ -5,5 +5,7 @@
"Sociologist"
]
},
- "log-name-renameuser": "Foydalanuvchilarni qayta nomlash qaydlari"
+ "log-name-renameuser": "Foydalanuvchilarni qayta nomlash qaydlari",
+ "action-renameuser": "foydalanuvchilar nomini oʻzgartirish",
+ "right-renameuser": "Foydalanuvchilar nomini oʻzgartirish"
}
diff --git a/extensions/Renameuser/i18n/zh-hant.json b/extensions/Renameuser/i18n/zh-hant.json
index eb393083..5683bad2 100644
--- a/extensions/Renameuser/i18n/zh-hant.json
+++ b/extensions/Renameuser/i18n/zh-hant.json
@@ -10,13 +10,14 @@
"Wrightbus",
"Cwlin0416",
"Liflon",
- "LNDDYL"
+ "LNDDYL",
+ "Liuxinyu970226"
]
},
"renameuser": "重新命名使用者",
"renameuser-linkoncontribs": "重新命名使用者",
"renameuser-linkoncontribs-text": "重新命名此使用者",
- "renameuser-desc": "加入用來重新命名使用者的 [[Special:RenameUser|特殊頁面]] (需要開啟 ''renameuser'' 權限)",
+ "renameuser-desc": "加入用來重新命名使用者的[[Special:RenameUser|特殊頁面]] (需要開啟 ''renameuser'' 權限)",
"renameuserold": "目前的使用者名稱:",
"renameusernew": "新的使用者名稱:",
"renameuserreason": "原因:",
@@ -24,7 +25,7 @@
"renameusersuppress": "不要為新的名稱建立重新導向頁面",
"renameuserreserve": "封鎖舊使用者名稱,禁止日後再使用",
"renameuserwarnings": "警告:",
- "renameuserconfirm": "是,重新命名使用者",
+ "renameuserconfirm": "是的,重新命名此使用者",
"renameusersubmit": "送出",
"renameuser-submit-blocklog": "顯示使用者的封鎖日誌",
"renameusererrordoesnotexist": "使用者 \"<nowiki>$1</nowiki>\" 不存在。",
@@ -38,10 +39,10 @@
"renameuser-page-unmoved": "頁面 $1 無法移動至 $2。",
"log-name-renameuser": "使用者重新命名日誌",
"log-description-renameuser": "此頁面為使用者名稱修改日誌。",
- "logentry-renameuser-renameuser": "$1 {{GENDER:$2|重新命名}}使用者 $4 (已編輯 {{PLURAL:$6|$6 次|$6 次}}) 為 $5",
+ "logentry-renameuser-renameuser": "$1 {{GENDER:$2|重新命名}}使用者 $4 (已編輯 {{PLURAL:$6|$6 次}}) 為 $5",
"logentry-renameuser-renameuser-legacier": "$1 重新命名使用者 $4 為 $5",
"renameuser-move-log": "重新命名使用者 \"[[User:$1|$1]]\" 為 \"[[User:$2|$2]]\" 時已自動移動使用者相關頁面",
"action-renameuser": "重新命名使用者",
"right-renameuser": "重新命名使用者",
- "renameuser-renamed-notice": "該使用者已重新命名。\n下列為重新命名日誌以提供參考。"
+ "renameuser-renamed-notice": "本使用者已重新命名。\n下列為重新命名日誌以提供參考。"
}
diff --git a/extensions/Renameuser/specials/SpecialRenameuser.php b/extensions/Renameuser/specials/SpecialRenameuser.php
index f6b9bac1..c8b2a538 100644
--- a/extensions/Renameuser/specials/SpecialRenameuser.php
+++ b/extensions/Renameuser/specials/SpecialRenameuser.php
@@ -54,7 +54,7 @@ class SpecialRenameuser extends SpecialPage {
$warnings = array();
if ( $oun && $nun && !$request->getCheck( 'confirmaction' ) ) {
- wfRunHooks( 'RenameUserWarning', array( $oun, $nun, &$warnings ) );
+ Hooks::run( 'RenameUserWarning', array( $oun, $nun, &$warnings ) );
}
$out->addHTML(
@@ -259,16 +259,19 @@ class SpecialRenameuser extends SpecialPage {
return;
}
- // Always get the edits count, it will be used for the log message
- $contribs = $olduser->getEditCount();
-
// Give other affected extensions a chance to validate or abort
- if ( !wfRunHooks( 'RenameUserAbort', array( $uid, $oldusername->getText(), $newusername->getText() ) ) ) {
+ if ( !Hooks::run( 'RenameUserAbort', array( $uid, $oldusername->getText(), $newusername->getText() ) ) ) {
return;
}
// Do the heavy lifting...
- $rename = new RenameuserSQL( $oldusername->getText(), $newusername->getText(), $uid );
+ $rename = new RenameuserSQL(
+ $oldusername->getText(),
+ $newusername->getText(),
+ $uid,
+ $this->getUser(),
+ array( 'reason' => $reason )
+ );
if ( !$rename->rename() ) {
return;
}
@@ -279,20 +282,6 @@ class SpecialRenameuser extends SpecialPage {
$user->setName( $newusername->getText() );
}
- // Log this rename, updated to 1.19+ Log form.
- // https://www.mediawiki.org/wiki/Logging_to_Special:Log
- $logEntry = new ManualLogEntry( 'renameuser', 'renameuser' );
- $logEntry->setPerformer( $this->getUser() );
- $logEntry->setTarget( $oldusername );
- $logEntry->setComment( $reason );
- $logEntry->setParameters( array(
- '4::olduser' => $oldusername->getText(),
- '5::newuser' => $newusername->getText(),
- '6::edits' => $contribs
- ) );
- $logid = $logEntry->insert();
- $logEntry->publish( $logid );
-
// Move any user pages
if ( $request->getCheck( 'movepages' ) && $user->isAllowed( 'move' ) ) {
$dbr = wfGetDB( DB_SLAVE );
@@ -380,4 +369,8 @@ class SpecialRenameuser extends SpecialPage {
$out->addHTML( Xml::element( 'h2', null, $logPage->getName()->text() ) . "\n" );
LogEventsList::showLogExtract( $out, $type, $username->getPrefixedText() );
}
+
+ protected function getGroupName() {
+ return 'users';
+ }
}
diff --git a/extensions/SpamBlacklist/BaseBlacklist.php b/extensions/SpamBlacklist/BaseBlacklist.php
index 280a614a..b1958c35 100644
--- a/extensions/SpamBlacklist/BaseBlacklist.php
+++ b/extensions/SpamBlacklist/BaseBlacklist.php
@@ -87,11 +87,11 @@ abstract class BaseBlacklist {
*
* @param $type string Code for the blacklist
* @return BaseBlacklist
- * @throws MWException
+ * @throws Exception
*/
public static function getInstance( $type ) {
if ( !isset( self::$blacklistTypes[$type] ) ) {
- throw new MWException( "Invalid blacklist type '$type' passed to " . __METHOD__ );
+ throw new Exception( "Invalid blacklist type '$type' passed to " . __METHOD__ );
}
if ( !isset( self::$instances[$type] ) ) {
@@ -223,15 +223,12 @@ abstract class BaseBlacklist {
function getSharedBlacklists() {
global $wgMemc, $wgDBname;
$listType = $this->getBlacklistType();
- $fname = 'SpamBlacklist::getRegex';
- wfProfileIn( $fname );
wfDebugLog( 'SpamBlacklist', "Loading $listType regex..." );
if ( count( $this->files ) == 0 ){
# No lists
wfDebugLog( 'SpamBlacklist', "no files specified\n" );
- wfProfileOut( $fname );
return array();
}
@@ -240,7 +237,6 @@ abstract class BaseBlacklist {
$cachedRegexes = $wgMemc->get( "$wgDBname:{$listType}_blacklist_regexes" );
if( is_array( $cachedRegexes ) ) {
wfDebugLog( 'SpamBlacklist', "Got shared spam regexes from cache\n" );
- wfProfileOut( $fname );
return $cachedRegexes;
}
diff --git a/extensions/SpamBlacklist/SpamBlacklist.i18n.php b/extensions/SpamBlacklist/SpamBlacklist.i18n.php
deleted file mode 100644
index 7f463b05..00000000
--- a/extensions/SpamBlacklist/SpamBlacklist.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShime2760ddac42b5b1c' ) ) {
- function wfJsonI18nShime2760ddac42b5b1c( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShime2760ddac42b5b1c';
-}
diff --git a/extensions/SpamBlacklist/SpamBlacklist.php b/extensions/SpamBlacklist/SpamBlacklist.php
index b627e00f..a1e4960d 100644
--- a/extensions/SpamBlacklist/SpamBlacklist.php
+++ b/extensions/SpamBlacklist/SpamBlacklist.php
@@ -1,77 +1,13 @@
<?php
-
-# Loader for spam blacklist feature
-# Include this from LocalSettings.php
-
-if ( !defined( 'MEDIAWIKI' ) ) {
- exit;
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'SpamBlacklist' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['SpamBlackList'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for SpamBlacklist extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the SpamBlacklist extension requires MediaWiki 1.25+' );
}
-
-$wgExtensionCredits['antispam'][] = array(
- 'path' => __FILE__,
- 'name' => 'SpamBlacklist',
- 'author' => array( 'Tim Starling', 'John Du Hart', 'Daniel Kinzler' ),
- 'url' => 'https://www.mediawiki.org/wiki/Extension:SpamBlacklist',
- 'descriptionmsg' => 'spam-blacklist-desc',
-);
-
-$dir = __DIR__ . '/';
-$wgMessagesDirs['SpamBlackList'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['SpamBlackList'] = $dir . 'SpamBlacklist.i18n.php';
-
-// Register the API method
-$wgAutoloadClasses['ApiSpamBlacklist'] = "$dir/api/ApiSpamBlacklist.php";
-$wgAPIModules['spamblacklist'] = 'ApiSpamBlacklist';
-
-/**
- * Array of settings for blacklist classes
- */
-$wgBlacklistSettings = array(
- 'spam' => array(
- 'files' => array( "https://meta.wikimedia.org/w/index.php?title=Spam_blacklist&action=raw&sb_ver=1" )
- )
-);
-
-/**
- * Log blacklist hits to Special:Log
- */
-$wgLogSpamBlacklistHits = false;
-
-/**
- * @deprecated
- */
-$wgSpamBlacklistFiles =& $wgBlacklistSettings['spam']['files'];
-
-/**
- * @deprecated
- */
-$wgSpamBlacklistSettings =& $wgBlacklistSettings['spam'];
-
-if ( !defined( 'MW_SUPPORTS_CONTENTHANDLER' ) ) {
- die( "This version of SpamBlacklist requires a version of MediaWiki that supports the ContentHandler facility (supported since MW 1.21)." );
-}
-
-// filter pages on save
-$wgHooks['EditFilterMergedContent'][] = 'SpamBlacklistHooks::filterMergedContent';
-$wgHooks['APIEditBeforeSave'][] = 'SpamBlacklistHooks::filterAPIEditBeforeSave';
-
-// editing filter rules
-$wgHooks['EditFilter'][] = 'SpamBlacklistHooks::validate';
-$wgHooks['PageContentSaveComplete'][] = 'SpamBlacklistHooks::pageSaveContent';
-
-// email filters
-$wgHooks['UserCanSendEmail'][] = 'SpamBlacklistHooks::userCanSendEmail';
-$wgHooks['AbortNewAccount'][] = 'SpamBlacklistHooks::abortNewAccount';
-
-$wgAutoloadClasses['BaseBlacklist'] = $dir . 'BaseBlacklist.php';
-$wgAutoloadClasses['EmailBlacklist'] = $dir . 'EmailBlacklist.php';
-$wgAutoloadClasses['SpamBlacklistHooks'] = $dir . 'SpamBlacklistHooks.php';
-$wgAutoloadClasses['SpamBlacklist'] = $dir . 'SpamBlacklist_body.php';
-$wgAutoloadClasses['SpamRegexBatch'] = $dir . 'SpamRegexBatch.php';
-
-$wgLogTypes[] = 'spamblacklist';
-$wgLogActionsHandlers['spamblacklist/*'] = 'LogFormatter';
-$wgLogRestrictions['spamblacklist'] = 'spamblacklistlog';
-$wgGroupPermissions['sysop']['spamblacklistlog'] = true;
-
-$wgAvailableRights[] = 'spamblacklistlog';
diff --git a/extensions/SpamBlacklist/SpamBlacklistHooks.php b/extensions/SpamBlacklist/SpamBlacklistHooks.php
index 223c1065..c8a322b6 100644
--- a/extensions/SpamBlacklist/SpamBlacklistHooks.php
+++ b/extensions/SpamBlacklist/SpamBlacklistHooks.php
@@ -4,6 +4,30 @@
* Hooks for the spam blacklist extension
*/
class SpamBlacklistHooks {
+
+ /**
+ * T99257: Extension registration does not properly support 2d arrays so set it as a global for now
+ */
+ public static function registerExtension() {
+ global $wgSpamBlacklistFiles, $wgBlacklistSettings, $wgSpamBlacklistSettings;
+
+ $wgBlacklistSettings = array(
+ 'spam' => array(
+ 'files' => array( "https://meta.wikimedia.org/w/index.php?title=Spam_blacklist&action=raw&sb_ver=1" )
+ )
+ );
+
+ /**
+ * @deprecated
+ */
+ $wgSpamBlacklistFiles =& $wgBlacklistSettings['spam']['files'];
+
+ /**
+ * @deprecated
+ */
+ $wgSpamBlacklistSettings =& $wgBlacklistSettings['spam'];
+ }
+
/**
* Hook function for EditFilterMergedContent
*
@@ -25,8 +49,8 @@ class SpamBlacklistHooks {
}
// get the link from the not-yet-saved page content.
- // no need to generate html to get external links
- $pout = $content->getParserOutput( $title, null, null, false );
+ $editInfo = $context->getWikiPage()->prepareContentForEdit( $content );
+ $pout = $editInfo->output;
$links = array_keys( $pout->getExternalLinks() );
// HACK: treat the edit summary as a link
diff --git a/extensions/SpamBlacklist/SpamBlacklist_body.php b/extensions/SpamBlacklist/SpamBlacklist_body.php
index 15fbc72f..8c270f42 100644
--- a/extensions/SpamBlacklist/SpamBlacklist_body.php
+++ b/extensions/SpamBlacklist/SpamBlacklist_body.php
@@ -41,9 +41,6 @@ class SpamBlacklist extends BaseBlacklist {
* @return Array Matched text(s) if the edit should not be allowed, false otherwise
*/
function filter( array $links, Title $title = null, $preventLog = false ) {
- $fname = 'wfSpamBlacklistFilter';
- wfProfileIn( $fname );
-
$blacklists = $this->getBlacklists();
$whitelists = $this->getWhitelists();
@@ -94,7 +91,10 @@ class SpamBlacklist extends BaseBlacklist {
wfDebugLog( 'SpamBlacklist', "Match!\n" );
global $wgRequest;
$ip = $wgRequest->getIP();
- $imploded = implode( ' ', $matches[0] );
+ $fullUrls = array();
+ $fullLineRegex = substr( $regex, 0, strrpos( $regex, '/' ) ) . '.*/Sim';
+ preg_match_all( $fullLineRegex, $links, $fullUrls );
+ $imploded = implode( ' ', $fullUrls[0] );
wfDebugLog( 'SpamBlacklistHit', "$ip caught submitting spam: $imploded\n" );
if( !$preventLog ) {
$this->logFilterHit( $title, $imploded ); // Log it
@@ -102,7 +102,7 @@ class SpamBlacklist extends BaseBlacklist {
if( $retVal === false ){
$retVal = array();
}
- $retVal = array_merge( $retVal, $matches[1] );
+ $retVal = array_merge( $retVal, $fullUrls[1] );
}
}
if ( is_array( $retVal ) ) {
@@ -111,7 +111,7 @@ class SpamBlacklist extends BaseBlacklist {
} else {
$retVal = false;
}
- wfProfileOut( $fname );
+
return $retVal;
}
diff --git a/extensions/SpamBlacklist/api/ApiSpamBlacklist.php b/extensions/SpamBlacklist/api/ApiSpamBlacklist.php
index dad9e8e0..9c5ce3db 100644
--- a/extensions/SpamBlacklist/api/ApiSpamBlacklist.php
+++ b/extensions/SpamBlacklist/api/ApiSpamBlacklist.php
@@ -55,16 +55,25 @@ class ApiSpamBlacklist extends ApiBase {
);
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getParamDescription() {
return array(
'url' => 'A pipe-separated list of URLs to validate against the blacklist',
);
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getDescription() {
return 'Validate one or more URLs against the SpamBlacklist.';
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getExamples() {
return array(
'api.php?action=spamblacklist&url=http%3A%2F%2Fwww.example.com%2F%7Chttp%3A%2F%2Fwww.example.org%2F',
@@ -72,6 +81,16 @@ class ApiSpamBlacklist extends ApiBase {
);
}
+ /**
+ * @see ApiBase::getExamplesMessages()
+ */
+ protected function getExamplesMessages() {
+ return array(
+ 'action=spamblacklist&url=http://www.example.com/|http://www.example.org/'
+ => 'apihelp-spamblacklist-example-1',
+ );
+ }
+
public function getHelpUrls() {
return array( 'https://www.mediawiki.org/wiki/Extension:SpamBlacklist/API' );
}
diff --git a/extensions/SpamBlacklist/extension.json b/extensions/SpamBlacklist/extension.json
new file mode 100644
index 00000000..7aec2bca
--- /dev/null
+++ b/extensions/SpamBlacklist/extension.json
@@ -0,0 +1,69 @@
+{
+ "name": "SpamBlacklist",
+ "author": [
+ "Tim Starling",
+ "John Du Hart",
+ "Daniel Kinzler"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:SpamBlacklist",
+ "descriptionmsg": "spam-blacklist-desc",
+ "type": "antispam",
+ "callback": "SpamBlacklistHooks::registerExtension",
+ "GroupPermissions": {
+ "sysop": {
+ "spamblacklistlog": true
+ }
+ },
+ "AvailableRights": [
+ "spamblacklistlog"
+ ],
+ "LogTypes": [
+ "spamblacklist"
+ ],
+ "LogRestrictions": {
+ "spamblacklist": "spamblacklistlog"
+ },
+ "LogActionsHandlers": {
+ "spamblacklist/*": "LogFormatter"
+ },
+ "APIModules": {
+ "spamblacklist": "ApiSpamBlacklist"
+ },
+ "MessagesDirs": {
+ "SpamBlackList": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "ApiSpamBlacklist": "api/ApiSpamBlacklist.php",
+ "BaseBlacklist": "BaseBlacklist.php",
+ "EmailBlacklist": "EmailBlacklist.php",
+ "SpamBlacklistHooks": "SpamBlacklistHooks.php",
+ "SpamBlacklist": "SpamBlacklist_body.php",
+ "SpamRegexBatch": "SpamRegexBatch.php"
+ },
+ "Hooks": {
+ "EditFilterMergedContent": [
+ "SpamBlacklistHooks::filterMergedContent"
+ ],
+ "APIEditBeforeSave": [
+ "SpamBlacklistHooks::filterAPIEditBeforeSave"
+ ],
+ "EditFilter": [
+ "SpamBlacklistHooks::validate"
+ ],
+ "PageContentSaveComplete": [
+ "SpamBlacklistHooks::pageSaveContent"
+ ],
+ "UserCanSendEmail": [
+ "SpamBlacklistHooks::userCanSendEmail"
+ ],
+ "AbortNewAccount": [
+ "SpamBlacklistHooks::abortNewAccount"
+ ]
+ },
+ "config": {
+ "@doc": "BlacklistSettings are set in SpamBlacklistHooks.php",
+ "LogSpamBlacklistHits": false
+ }
+}
diff --git a/extensions/SpamBlacklist/i18n/ar.json b/extensions/SpamBlacklist/i18n/ar.json
index 121a890e..ccfe1038 100644
--- a/extensions/SpamBlacklist/i18n/ar.json
+++ b/extensions/SpamBlacklist/i18n/ar.json
@@ -3,7 +3,8 @@
"authors": [
"Asaifm",
"Meno25",
- "OsamaK"
+ "OsamaK",
+ "Abanima"
]
},
"spam-blacklist": " # الوصلات الخارجية التي تطابق هذه القائمة سيتم منعها عند إضافتها لصفحة.\n # هذه القائمة تؤثر فقط على هذه الويكي؛ ارجع أيضا للقائمة السوداء العامة.\n # للوثائق انظر https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n #<!-- اترك هذا السطر تماما كما هو --> <pre>\n#\n# الصيغة كالتالي:\n# * كل شيء من علامة \"#\" إلى آخر السطر هو تعليق\n# * كل سطر غير فارغ هو تعبير منتظم يوافق فقط المضيفين داخل الوصلات الخارجية\n\n #</pre> <!-- اترك هذا السطر تماما كما هو -->",
@@ -15,6 +16,7 @@
"spam-blacklist-desc": "أداة ضد السخام تعتمد على التعبيرات النمطية وتسمح بمنع روابط في الصفحات وعنواين البريد الإلكتروني للمستخدمين المسجلين",
"log-name-spamblacklist": "سجل السخام المدرج على القائمة السوداء",
"log-description-spamblacklist": "هذا الأحداث توثق مشاهدات القائمة السوداء للسخام.",
+ "logentry-spamblacklist-hit": "أدى التعديل الذي {{GENDER:$2|قام|قامت}} به $1 إلى تفعيل القائمة السوداء لوصلات السبام في $3 عندما {{GENDER:$2|حاول|حاولت}} إضافة $4.",
"right-spamblacklistlog": "اعرض سجل السخام المدرج على القائمة السوداء",
"action-spamblacklistlog": "اعرض سجل السخام المدرج على القائمة السوداء"
}
diff --git a/extensions/SpamBlacklist/i18n/bcc.json b/extensions/SpamBlacklist/i18n/bcc.json
index 603b262d..87b7bd8b 100644
--- a/extensions/SpamBlacklist/i18n/bcc.json
+++ b/extensions/SpamBlacklist/i18n/bcc.json
@@ -1,8 +1,10 @@
{
"@metadata": {
"authors": [
- "Mostafadaneshvar"
+ "Mostafadaneshvar",
+ "Baloch Afghanistan"
]
},
+ "spam-blacklist": " # از درج پیوندهای بیرونی که با این فهرست مطابقت کنند جلوگیری می‌شود.\n # این فهرست فقط روی همین ویکی اثر دارد؛ به فهرست سیاه سراسری نیز مراجعه کنید.\n # برای مستندات به https://www.mediawiki.org/wiki/Extension:SpamBlacklist مراجعه کنید\n #<!-- این سطر را همان‌گونه که هست رها کنید --> <pre>\n# دستورات به این شکل هستند:\n# * همه چیز از «#» تا پایان سطر به عنوان توضیح در نظر گرفته می‌شود\n# * هر سطر از متن به عنوان یک دستور از نوع عبارت باقاعده در نظر گرفته می‌شود که فقط با نام میزبان در نشانی اینترنتی مطابقت داده می‌شود\n\n #</pre> <!-- این سطر را همان‌گونه که هست رها کنید -->",
"spam-blacklist-desc": "وسیله په ضد اسپم په اساس عبارات منظم: [[MediaWiki:Spam-blacklist]] و [[MediaWiki:Spam-whitelist]]"
}
diff --git a/extensions/SpamBlacklist/i18n/bg.json b/extensions/SpamBlacklist/i18n/bg.json
index e1a42f94..1aa242c4 100644
--- a/extensions/SpamBlacklist/i18n/bg.json
+++ b/extensions/SpamBlacklist/i18n/bg.json
@@ -1,9 +1,11 @@
{
"@metadata": {
"authors": [
- "Spiritia"
+ "Spiritia",
+ "Borislav"
]
},
"spam-invalid-lines": "{{PLURAL:$1|Следният запис|Следните записи}} от черния списък на спама {{PLURAL:$1|е невалиден регулярен израз|са невалидни регулярни изрази}} и трябва да {{PLURAL:$1|бъде коригиран|бъдат коригирани}} преди съхраняване на страницата:",
- "spam-blacklist-desc": "Инструмент за защита от спам, използващ регулярни изрази: [[МедияУики:Spam-blacklist]] и [[МедияУики:Spam-whitelist]]"
+ "spam-blacklist-desc": "Инструмент за защита от спам, използващ регулярни изрази: [[МедияУики:Spam-blacklist]] и [[МедияУики:Spam-whitelist]]",
+ "log-name-spamblacklist": "Дневник на черния списък против спам"
}
diff --git a/extensions/SpamBlacklist/i18n/de.json b/extensions/SpamBlacklist/i18n/de.json
index 076bc029..64e31b45 100644
--- a/extensions/SpamBlacklist/i18n/de.json
+++ b/extensions/SpamBlacklist/i18n/de.json
@@ -12,7 +12,7 @@
},
"spam-blacklist": " # Externe URLs, die in dieser Liste enthalten sind, blockieren das Speichern einer Seite.\n # Diese Liste hat nur Auswirkungen auf dieses Wiki. Siehe ggf. auch die globale Blockierliste.\n # Siehe auch https://www.mediawiki.org/wiki/Extension:SpamBlacklist für die Dokumentation dieser Funktion. \n #<!-- Diese Zeile darf nicht verändert werden! --> <pre>\n#\n# Syntax:\n# * Alles ab dem „#“-Zeichen bis zum Ende der Zeile ist ein Kommentar\n# * Jede nicht-leere Zeile ist ein regulärer Ausdruck, der gegen die Host-Namen in den URLs geprüft wird.\n\n #</pre> <!-- Diese Zeile darf nicht verändert werden! -->",
"spam-whitelist": " #<!-- Diese Zeile darf nicht verändert werden! --> <pre>\n# Externe URLs, die in dieser Liste enthalten sind, blockieren das Speichern einer Seite nicht, \n# auch wenn sie in der lokalen oder ggf. globalen Blockierliste enthalten sind.\n#\n# Syntax:\n# * Alles ab dem „#“-Zeichen bis zum Ende der Zeile ist ein Kommentar\n# * Jede nicht-leere Zeile ist ein regulärer Ausdruck, der gegen die Host-Namen in den URLs geprüft wird.\n\n #</pre> <!-- Diese Zeile darf nicht verändert werden! -->",
- "email-blacklist": " #<!-- Diese Zeile darf nicht verändert werden! --> <pre>\n # E-Mail-Adressen, die in dieser Liste enthalten sind, werden bei der Registrierung sowie beim Senden von E-Mail-Nachrichten geblockt.\n # Diese Liste hat nur Auswirkungen auf dieses Wiki. Siehe gegebenenfalls auch die globale Blockierliste.\n # Zur Dokumentation dieser Funktion siehe auch https://www.mediawiki.org/wiki/Extension:SpamBlacklist.\n#\n# Syntax wie folgt:\n# * Alles ab dem „#“-Zeichen bis zum Ende der Zeile ist ein Kommentar.\n# * Jede nicht-leere Zeile ist ein regulärer Ausdruck, der gegen die Host-Namen in den E-Mail-Adressen abgeglichen wird.\n\n #</pre> <!-- Diese Zeile darf nicht verändert werden! -->",
+ "email-blacklist": " #<!-- Diese Zeile darf nicht verändert werden! --> <pre>\n# E-Mail-Adressen, die in dieser Liste enthalten sind, werden bei der Registrierung sowie beim Senden von E-Mail-Nachrichten blockiert.\n# Diese Liste hat nur Auswirkungen auf dieses Wiki. Siehe gegebenenfalls auch die globale Blockierliste.\n# Siehe auch https://www.mediawiki.org/wiki/Extension:SpamBlacklist für weiterführende Informationen.\n#\n# Syntax wie folgt:\n# * Alles ab dem „#“-Zeichen bis zum Ende der Zeile ist ein Kommentar.\n# * Jede nicht-leere Zeile ist ein regulärer Ausdruck, der mit dem Hostnamen der E-Mail-Adressen abgeglichen wird.\n\n #</pre> <!-- Diese Zeile darf nicht verändert werden! -->",
"email-whitelist": " #<!-- Diese Zeile darf nicht verändert werden! --> <pre>\n# E-Mail-Adressen, die sich in dieser Liste befinden, blockieren die Registrierung sowie\n# das Senden von E-Mail-Nachrichten *nicht*, auch wenn sie in der \n# lokalen oder ggf. globalen Blockierliste enthalten sind.\n#\n #</pre> <!-- Diese Zeile darf nicht verändert werden! -->",
"spam-blacklisted-email": "Blockierte E-Mail-Adressen",
"spam-blacklisted-email-text": "Deine E-Mail-Adresse ist derzeit für das Senden von E-Mail-Nachrichten an andere Benutzer blockiert.",
@@ -21,7 +21,7 @@
"spam-blacklist-desc": "Ergänzt ein auf reguläre Ausdrücke gestütztes Anti-Spam-Werkzeug zum Sperren von URLs und E-Mail-Adressen für das Einfügen durch registrierte Benutzer",
"log-name-spamblacklist": "Spam-Blacklist-Logbuch",
"log-description-spamblacklist": "Es folgt ein Logbuch von Spam-Blacklist-Treffern.",
- "logentry-spamblacklist-hit": "$1 verursachte einen Spam-Blacklist-Treffer auf „$3“ durch das versuchte Hinzufügen von $4.",
+ "logentry-spamblacklist-hit": "{{GENDER:$2|$1}} verursachte einen Spam-Blacklist-Treffer auf „$3“ durch das versuchte Hinzufügen von $4.",
"right-spamblacklistlog": "Spam-Blacklist-Logbuch ansehen",
"action-spamblacklistlog": "dieses Logbuch einzusehen"
}
diff --git a/extensions/SpamBlacklist/i18n/en.json b/extensions/SpamBlacklist/i18n/en.json
index 3ba7bf03..1190a63b 100644
--- a/extensions/SpamBlacklist/i18n/en.json
+++ b/extensions/SpamBlacklist/i18n/en.json
@@ -1,19 +1,22 @@
{
- "@metadata": {
- "authors": []
- },
- "spam-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# External URLs matching this list will be blocked when added to a page.\n# This list affects only this wiki; refer also to the global blacklist.\n# For documentation see https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside URLs\n\n #</pre> <!-- leave this line exactly as it is -->",
- "spam-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# External URLs matching this list will *not* be blocked even if they would\n# have been blocked by blacklist entries.\n#\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside URLs\n\n #</pre> <!-- leave this line exactly as it is -->",
- "email-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# Email addresses matching this list will be blocked from registering or sending emails\n# This list affects only this wiki; refer also to the global blacklist.\n# For documentation see https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside email addresses\n\n #</pre> <!-- leave this line exactly as it is -->",
- "email-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Email addresses matching this list will *not* be blocked even if they would\n# have been blocked by blacklist entries.\n#\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside email addresses\n\n #</pre> <!-- leave this line exactly as it is -->",
- "spam-blacklisted-email": "Blacklisted email address",
- "spam-blacklisted-email-text": "Your email address is currently blacklisted from sending emails to other users.",
- "spam-blacklisted-email-signup": "The given email address is currently blacklisted from use.",
- "spam-invalid-lines": "The following spam blacklist {{PLURAL:$1|line is an|lines are}} invalid regular {{PLURAL:$1|expression|expressions}} and {{PLURAL:$1|needs|need}} to be corrected before saving the page:",
- "spam-blacklist-desc": "Regex-based anti-spam tool allowing to blacklist URLs in pages and email addresses for registered users",
- "log-name-spamblacklist": "Spam blacklist log",
- "log-description-spamblacklist": "These events track spam blacklist hits.",
- "logentry-spamblacklist-hit": "{{GENDER:$2|$1}} caused a spam blacklist hit on $3 by attempting to add $4.",
- "right-spamblacklistlog": "View the spam blacklist log",
- "action-spamblacklistlog": "view the spam blacklist log"
-} \ No newline at end of file
+ "@metadata": {
+ "authors": []
+ },
+ "spam-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# External URLs matching this list will be blocked when added to a page.\n# This list affects only this wiki; refer also to the global blacklist.\n# For documentation see https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside URLs\n\n #</pre> <!-- leave this line exactly as it is -->",
+ "spam-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# External URLs matching this list will *not* be blocked even if they would\n# have been blocked by blacklist entries.\n#\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside URLs\n\n #</pre> <!-- leave this line exactly as it is -->",
+ "email-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# Email addresses matching this list will be blocked from registering or sending emails\n# This list affects only this wiki; refer also to the global blacklist.\n# For documentation see https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside email addresses\n\n #</pre> <!-- leave this line exactly as it is -->",
+ "email-whitelist": " #<!-- leave this line exactly as it is --> <pre>\n# Email addresses matching this list will *not* be blocked even if they would\n# have been blocked by blacklist entries.\n#\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a regex fragment which will only match hosts inside email addresses\n\n #</pre> <!-- leave this line exactly as it is -->",
+ "spam-blacklisted-email": "Blacklisted email address",
+ "spam-blacklisted-email-text": "Your email address is currently blacklisted from sending emails to other users.",
+ "spam-blacklisted-email-signup": "The given email address is currently blacklisted from use.",
+ "spam-invalid-lines": "The following spam blacklist {{PLURAL:$1|line is an|lines are}} invalid regular {{PLURAL:$1|expression|expressions}} and {{PLURAL:$1|needs|need}} to be corrected before saving the page:",
+ "spam-blacklist-desc": "Regex-based anti-spam tool allowing to blacklist URLs in pages and email addresses for registered users",
+ "log-name-spamblacklist": "Spam blacklist log",
+ "log-description-spamblacklist": "These events track spam blacklist hits.",
+ "logentry-spamblacklist-hit": "{{GENDER:$2|$1}} caused a spam blacklist hit on $3 by attempting to add $4.",
+ "right-spamblacklistlog": "View the spam blacklist log",
+ "action-spamblacklistlog": "view the spam blacklist log",
+ "apihelp-spamblacklist-description": "Validate one or more URLs against the SpamBlacklist.",
+ "apihelp-spamblacklist-param-url": "URLs to validate against the blacklist.",
+ "apihelp-spamblacklist-example-1": "Check two URLs against the blacklist"
+}
diff --git a/extensions/SpamBlacklist/i18n/fa.json b/extensions/SpamBlacklist/i18n/fa.json
index ef94cdfc..776cb913 100644
--- a/extensions/SpamBlacklist/i18n/fa.json
+++ b/extensions/SpamBlacklist/i18n/fa.json
@@ -5,18 +5,19 @@
"Ebraminio",
"Huji",
"Meisam",
- "Alirezaaa"
+ "Alirezaaa",
+ "Mjbmr"
]
},
"spam-blacklist": " # از درج پیوندهای بیرونی که با این فهرست مطابقت کنند جلوگیری می‌شود.\n # این فهرست فقط روی همین ویکی اثر دارد؛ به فهرست سیاه سراسری نیز مراجعه کنید.\n # برای مستندات به https://www.mediawiki.org/wiki/Extension:SpamBlacklist مراجعه کنید\n #<!-- این سطر را همان‌گونه که هست رها کنید --> <pre>\n# دستورات به این شکل هستند:\n# * همه چیز از «#» تا پایان سطر به عنوان توضیح در نظر گرفته می‌شود\n# * هر سطر از متن به عنوان یک دستور از نوع عبارت باقاعده در نظر گرفته می‌شود که فقط با نام میزبان در نشانی اینترنتی مطابقت داده می‌شود\n\n #</pre> <!-- این سطر را همان‌گونه که هست رها کنید -->",
"spam-whitelist": " #<!-- این سطر را همان‌گونه که هست رها کنید --> <pre>\n# از درج پیوندهای بیرونی که با این فهرست مطابقت کنند جلوگیری *نمی‌شود* حتی اگر\n# در فهرست سیاه قرار داشته باشند.\n#\n #</pre> <!-- این سطر را همان‌گونه که هست رها کنید -->",
- "email-blacklist": " # از ثبت نام یا ارسال نامه توسط نشانی‌های رایانامه‌ای که با این فهرست مطابقت کنند جلوگیری می‌شود.\n # این فهرست فقط روی همین ویکی اثر دارد؛ به فهرست سیاه سراسری نیز مراجعه کنید.\n # برای مستندات به https://www.mediawiki.org/wiki/Extension:SpamBlacklist مراجعه کنید\n #<!-- این سطر را همان‌گونه که هست رها کنید --> <pre>\n# دستورات به این شکل هستند:\n# * همه چیز از «#» تا پایان سطر به عنوان توضیح در نظر گرفته می‌شود\n# * هر سطر از متن به عنوان یک دستور از نوع عبارت باقاعده در نظر گرفته می‌شود که فقط با نام میزبان در نشانی رایانامه مطابقت داده می‌شود\n\n #</pre> <!-- این سطر را همان‌گونه که هست رها کنید -->",
- "email-whitelist": " #<!-- این سطر را همان‌گونه که هست رها کنید --> <pre>\n# نشانی‌های رایانامه که با این فهرست مطابقت کنند محدود *نمی‌شوند* حتی اگر\n# با فهرست سیاه مطابقت داشته باشند.\n#\n #</pre> <!-- این سطر را همان‌گونه که هست رها کنید -->\n# دستورات به این شکل هستند:\n# * همه چیز از «#» تا پایان سطر به عنوان توضیح در نظر گرفته می‌شود\n# * هر سطر از متن به عنوان یک دستور از نوع عبارت باقاعده در نظر گرفته می‌شود که فقط با نام میزبان در نشانی رایانامه مطابقت داده می‌شود",
- "spam-blacklisted-email": "نشانی رایانامه موجود در فهرست سیاه",
- "spam-blacklisted-email-text": "نشانی رایانامهٔ شما در حال حاضر در فهرست سیاه قرار دارد و نمی‌توانید به دیگر کاربران نامه بفرستید.",
- "spam-blacklisted-email-signup": "نشانی رایانامه داده‌شده در حال حاضر در فهرست سیاه است.",
+ "email-blacklist": " # از ثبت نام یا ارسال ایمیل توسط آدرس‌های ایمیلی که با این فهرست مطابقت کنند جلوگیری می‌شود.\n # این فهرست فقط روی همین ویکی اثر دارد؛ به فهرست سیاه سراسری نیز مراجعه کنید.\n # برای مستندات به https://www.mediawiki.org/wiki/Extension:SpamBlacklist مراجعه کنید\n #<!-- این سطر را همان‌گونه که هست رها کنید --> <pre>\n# دستورات به این شکل هستند:\n# * همه چیز از «#» تا پایان سطر به عنوان توضیح در نظر گرفته می‌شود\n# * هر سطر از متن به عنوان یک دستور از نوع عبارت باقاعده در نظر گرفته می‌شود که فقط با نام دامنه در آدرس ایمیل مطابقت داده می‌شود\n\n #</pre> <!-- این سطر را همان‌گونه که هست رها کنید -->",
+ "email-whitelist": " #<!-- این سطر را همان‌گونه که هست رها کنید --> <pre>\n# آدرس‌های ایمیلی که با این فهرست مطابقت کنند محدود *نمی‌شوند* حتی اگر\n# با فهرست سیاه مطابقت داشته باشند.\n#\n #</pre> <!-- این سطر را همان‌گونه که هست رها کنید -->\n# دستورات به این شکل هستند:\n# * همه چیز از «#» تا پایان سطر به عنوان توضیح در نظر گرفته می‌شود\n# * هر سطر از متن به عنوان یک دستور از نوع عبارت باقاعده در نظر گرفته می‌شود که فقط با نام دامنه در آدرس ایمیل مطابقت داده می‌شود",
+ "spam-blacklisted-email": "آدرس ایمیل موجود در فهرست سیاه",
+ "spam-blacklisted-email-text": "آدرس ایمیل شما در حال حاضر در فهرست سیاه قرار دارد و نمی‌توانید به دیگر کاربران ایمیل بفرستید.",
+ "spam-blacklisted-email-signup": "آدرس ایمیل داده شده در حال حاضر در فهرست سیاه است.",
"spam-invalid-lines": "{{PLURAL:$1|سطر|سطرهای}} زیر در فهرست سیاه هرزنگاری، عبارات باقاعدهٔ نامجاز {{PLURAL:$1|است|هستند}} و قبل از ذخیره کردن صفحه باید اصلاح {{PLURAL:$1|شود|شوند}}:",
- "spam-blacklist-desc": "Regex-based anti-spam tool allowing to blacklist URLs in pages and email addresses for registered users\n\nابزار بر پایهٔ عبارت باقاعده ضدهرزنگاری اجازهٔ فهرست سیاه‌کردن نشانی‌های اینترنتی در صفحات و نشانی‌های رایانامه برای کاربران ثبت نام کرده",
+ "spam-blacklist-desc": "ابزار بر پایهٔ عبارت باقاعده ضدهرزنگاری اجازهٔ افزودن به فهرست سیاه نشانی‌های اینترنتی در صفحات و آدرس‌های ایمیل برای کاربران ثبت نام کرده را می‌دهد",
"log-name-spamblacklist": "سیاههٔ فهرست سیاه هرزنگاری",
"log-description-spamblacklist": "این رویدادها وقوع فهرست سیاه هزنگاری را دنبال می‌کند.",
"logentry-spamblacklist-hit": "$1 در $3 با تلاش در افزودن $4 باعث برخورد به فهرست سیاه هرزنامه شده‌است.",
diff --git a/extensions/SpamBlacklist/i18n/he.json b/extensions/SpamBlacklist/i18n/he.json
index ad0b910b..f1ea9caf 100644
--- a/extensions/SpamBlacklist/i18n/he.json
+++ b/extensions/SpamBlacklist/i18n/he.json
@@ -19,5 +19,8 @@
"log-description-spamblacklist": "האירועים האלה עוקבים אחרי הפעלות של רשימה שחורה של ספאם.",
"logentry-spamblacklist-hit": "$1 {{GENDER:$1|גרם|גרמה}} לפעולת רשימה שחורה בדף $3 תוך כדי ניסיון להוסיף את הכתובת $4.",
"right-spamblacklistlog": "תצוגת יומן רשימה שחורה של ספאם",
- "action-spamblacklistlog": "תצוגת יומן רשימה שחורה של ספאם"
+ "action-spamblacklistlog": "תצוגת יומן רשימה שחורה של ספאם",
+ "apihelp-spamblacklist-description": "לבדוק URL אחד או יותר אל מול SpamBlacklist.",
+ "apihelp-spamblacklist-param-url": "URL־ים לבדוק אל מול SpamBlacklist.",
+ "apihelp-spamblacklist-example-1": "לבדוק שני URL־ים אל מול הרשימה השחורה."
}
diff --git a/extensions/SpamBlacklist/i18n/ja.json b/extensions/SpamBlacklist/i18n/ja.json
index bb6b0a67..6de822e1 100644
--- a/extensions/SpamBlacklist/i18n/ja.json
+++ b/extensions/SpamBlacklist/i18n/ja.json
@@ -22,5 +22,8 @@
"log-description-spamblacklist": "これらのイベントはスパムブラックリストとの一致を追跡します。",
"logentry-spamblacklist-hit": "{{GENDER:$2|$1}} が $3 に $4 を追加しようとした際にスパムブラックリストが発動しました。",
"right-spamblacklistlog": "スパムブラックリストを閲覧",
- "action-spamblacklistlog": "スパムブラックリスト記録の閲覧"
+ "action-spamblacklistlog": "スパムブラックリスト記録の閲覧",
+ "apihelp-spamblacklist-description": "1 件以上の URL についてスパムブラックリストに登録されているか検証します。",
+ "apihelp-spamblacklist-param-url": "ブラックリストに登録されているか検証する URL です。",
+ "apihelp-spamblacklist-example-1": "2 件の URL についてブラックリストに登録されているか検証"
}
diff --git a/extensions/SpamBlacklist/i18n/kk-cyrl.json b/extensions/SpamBlacklist/i18n/kk-cyrl.json
index ecadeab4..31642b9a 100644
--- a/extensions/SpamBlacklist/i18n/kk-cyrl.json
+++ b/extensions/SpamBlacklist/i18n/kk-cyrl.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "AlefZet"
+ "AlefZet",
+ "Arystanbek"
]
},
"spam-blacklist": " # Осы тізімге сәйкес сыртқы URL жайлар бетке үстеуден бұғатталады.\n # Бұл тізім тек мындағы уикиге әсер етеді; тағы да ғаламдық қара тізімді қарап шығыңыз.\n # Құжаттама үшін https://www.mediawiki.org/wiki/Extension:SpamBlacklist бетін қараңыз\n #<!-- бұл жолды болған жағдайымен қалдырыңыз --> <pre>\n#\n# Синтаксисі келесідей:\n# * «#» нышанынан бастап жол аяғына дейінгілерінің бүкілі мәндеме деп саналады\n# * Бос емес әр жол тек URL жайлардың ішіндегі хосттарға сәйкес жүйелі айтылымдың (regex) бөлігі деп саналады\n\n #</pre> <!-- бұл жолды болған жағдайымен қалдырыңыз -->",
"spam-whitelist": " #<!-- бұл жолды болған жағдайымен қалдырыңыз --> <pre>\n# Осы тізімге сәйкес сыртқы URL жайлар *бұғатталмайды*,\n# (қара тізімдегі жазбамен бұғатталған болса да).\n#\n# Синтаксисі келесідей:\n# * «#» нышанынан бастап жол аяғына дейінгілерінің бүкілі мәндеме деп саналады\n# * Бос емес әр жол тек URL жайлардың ішіндегі хосттарға сәйкес жүйелі айтылымдың (regex) бөлігі деп саналады\n\n #</pre> <!-- бұл жолды болған жағдайымен қалдырыңыз -->",
- "spam-invalid-lines": "Спам қара тізіміндегі келесі {{PLURAL:$1|жолда|жолдарда}} жарамсыз жүйелі {{PLURAL:$1|айтылым|айтылымдар}} бар, және бетті сақтаудың {{PLURAL:$1|бұны|бұларды}} дұрыстау керек."
+ "spam-invalid-lines": "Спам қара тізіміндегі келесі {{PLURAL:$1|жолда|жолдарда}} жарамсыз жүйелі {{PLURAL:$1|айтылым|айтылымдар}} бар, және бетті сақтаудың {{PLURAL:$1|бұны|бұларды}} дұрыстау керек.",
+ "log-name-spamblacklist": "Спамдардың қаратізімі журналы"
}
diff --git a/extensions/SpamBlacklist/i18n/ksh.json b/extensions/SpamBlacklist/i18n/ksh.json
index c9bfed71..63f03fef 100644
--- a/extensions/SpamBlacklist/i18n/ksh.json
+++ b/extensions/SpamBlacklist/i18n/ksh.json
@@ -12,5 +12,13 @@
"spam-blacklisted-email-text": "Ding <i lang=\"en\">e-mail</i>-Addräß es em Momang op dä „schwazze Lėß“ un De kanns dermet kein <i lang=\"en\">e-mail</i> aan ander Metmaacher verschecke.",
"spam-blacklisted-email-signup": "Di aanjejovve Addräß för de <i lang=\"en\">e-mail</i> es em Momang op dä „schwazze Lėß“ un kann nit jebruch wääde.",
"spam-invalid-lines": "Mer han Fähler en rejolähre Ußdröck jefonge.\n{{PLURAL:$1|De Reih onge schtemmp nit un moß|Di $1 Reije onge schtemme nit un möße|Dat sull}}\nför em Afschpeischere eets en Oodenong jebraat wääde:",
- "spam-blacklist-desc": "Met rejolähre Ußdröck jääje der <i lang=\"en\">SPAM<i> — övver en [[MediaWiki:Spam-blacklist|„schwazze Leß“]] un en [[MediaWiki:Spam-whitelist|Leß met Ußnahme dohfun]]."
+ "spam-blacklist-desc": "Met rejolähre Ußdröck jääje der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„in der Regel massenhaft übertragene unerwünschte Nachrichten“\">SPAM</i> — övver en [[MediaWiki:Spam-blacklist|„schwazze Leß“]] med <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>s en Sigg un <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräße för aanjemälldte Metmaacher.",
+ "log-name-spamblacklist": "Et Logbohch vun de „schwazze Leß“ för der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"in der Regel massenhaft übertragene unerwünschte Nachrichten\">SPAM</i>",
+ "log-description-spamblacklist": "Heh di Vörjäng verfollje de Träffer en de „schwazze Leß“ jähje der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„in der Regel massenhaft übertragene unerwünschte Nachrichten“\">SPAM</i>.",
+ "logentry-spamblacklist-hit": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hädd_ene Träffer en de „schwazze Leß“ jähje der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„in der Regel massenhaft übertragene unerwünschte Nachrichten“\">SPAM</i> op dä Sigg „$3“ ußjelöhß, wi {{GENDER:$2|hä|et|hä|sei|et}} „$4“ doh eren donn wullt.",
+ "right-spamblacklistlog": "Donn et Logbohch vun de „schwazze Leß“ för der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"in der Regel massenhaft übertragene unerwünschte Nachrichten\">SPAM</i> aanlohre",
+ "action-spamblacklistlog": "donn et Logbohch vun de „schwazze Leß“ för der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"in der Regel massenhaft übertragene unerwünschte Nachrichten\">SPAM</i> aanlohre",
+ "apihelp-spamblacklist-description": "Donn <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locators\">URLs</i> jähje de „schwazze Leß“ jähje der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"in der Regel massenhaft übertragene unerwünschte Nachrichten\">SPAM</i> pröhve.",
+ "apihelp-spamblacklist-param-url": "De <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locators\">URLs</i> zom Pröhve jähje de „schwazze Leß“.",
+ "apihelp-spamblacklist-example-1": "Donn zwai <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locators\">URLs</i> jähje de „schwazze Leß“ pröhve."
}
diff --git a/extensions/SpamBlacklist/i18n/lrc.json b/extensions/SpamBlacklist/i18n/lrc.json
index daf3a2bb..7a0cbb52 100644
--- a/extensions/SpamBlacklist/i18n/lrc.json
+++ b/extensions/SpamBlacklist/i18n/lrc.json
@@ -1,9 +1,11 @@
{
"@metadata": {
"authors": [
- "Bonevarluri"
+ "Bonevarluri",
+ "Mogoeilor"
]
},
+ "spam-blacklisted-email": "تیرنشون انجونامه یایی که ها د نومجا سئ",
"log-name-spamblacklist": "پهرستنومه نوم گه سئ اسپم",
"right-spamblacklistlog": "دیئن پهرستنومه نوم گه سئ اسپم",
"action-spamblacklistlog": "دیئن پهرستنومه نوم گه سئ اسپم"
diff --git a/extensions/SpamBlacklist/i18n/mk.json b/extensions/SpamBlacklist/i18n/mk.json
index 9bc38739..d45fb8eb 100644
--- a/extensions/SpamBlacklist/i18n/mk.json
+++ b/extensions/SpamBlacklist/i18n/mk.json
@@ -17,5 +17,8 @@
"log-description-spamblacklist": "Овие настани следат обиди на спам од црниот список.",
"logentry-spamblacklist-hit": "$1 стави спам заведен во црниот список $3 при обидот да ја додаде адресата $4.",
"right-spamblacklistlog": "Преглед на дневникот за спам од црниот список",
- "action-spamblacklistlog": "преглед на дневникот за спам од црниот список"
+ "action-spamblacklistlog": "преглед на дневникот за спам од црниот список",
+ "apihelp-spamblacklist-description": "Провери една или повеќе URL-адреси во Црниот список на спам.",
+ "apihelp-spamblacklist-param-url": "URL-адреси што треба да се проверат во црниот список.",
+ "apihelp-spamblacklist-example-1": "Провери две URL-адреси во црниот список"
}
diff --git a/extensions/SpamBlacklist/i18n/mr.json b/extensions/SpamBlacklist/i18n/mr.json
index 51eb611f..0d9fe27e 100644
--- a/extensions/SpamBlacklist/i18n/mr.json
+++ b/extensions/SpamBlacklist/i18n/mr.json
@@ -3,7 +3,8 @@
"authors": [
"Hiteshgotarane",
"Kaustubh",
- "Rahuldeshmukh101"
+ "Rahuldeshmukh101",
+ "संतोष दहिवळ"
]
},
"spam-blacklist": " # या यादीशी जुळणारे बाह्य दुवे एखाद्या पानावर दिल्यास ब्लॉक केले जातील.\n # ही यादी फक्त या विकिसाठी आहे, सर्व विकिंसाठीची यादी सुद्धा तपासा.\n # अधिक माहिती साठी पहा https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n #<!-- leave this line exactly as it is --> <pre>\n#\n# रुपरेषा खालीलप्रमाणे:\n# * \"#\" ने सुरु होणारी ओळ शेरा आहे\n# * प्रत्येक रिकामी नसलेली ओळ अंतर्गत URL जुळविणारी regex फ्रॅगमेंट आहे\n\n #</pre> <!-- leave this line exactly as it is -->",
diff --git a/extensions/SpamBlacklist/i18n/pt-br.json b/extensions/SpamBlacklist/i18n/pt-br.json
index cf78faba..000a1881 100644
--- a/extensions/SpamBlacklist/i18n/pt-br.json
+++ b/extensions/SpamBlacklist/i18n/pt-br.json
@@ -5,7 +5,8 @@
"Eduardo.mps",
"Helder.wiki",
"Tuliouel",
- "555"
+ "555",
+ "He7d3r"
]
},
"spam-blacklist": " #<!-- mantenha esta linha exatamente assim --> <pre>\n# URLs externas que coincidam com esta lista serão bloqueadas quando forem\n# adicionadas a uma página.\n# Esta lista refere-se apenas a este wiki. Consulte também a lista-negra global.\n# Veja a documentação em https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# A sintaxe é a seguinte:\n# * Tudo o que estiver após um \"#\" até o final de uma linha será tido como um comentário\n# * Todas as linhas que não estiverem em branco são um fragmento de expressão \n# regular (regex) que abrangem apenas a URL especificada\n\n #</pre> <!-- mantenha esta linha exatamente assim -->",
diff --git a/extensions/SpamBlacklist/i18n/pt.json b/extensions/SpamBlacklist/i18n/pt.json
index 1f6403e5..1d5940fc 100644
--- a/extensions/SpamBlacklist/i18n/pt.json
+++ b/extensions/SpamBlacklist/i18n/pt.json
@@ -5,7 +5,8 @@
"Hamilton Abreu",
"Helder.wiki",
"Malafaya",
- "555"
+ "555",
+ "He7d3r"
]
},
"spam-blacklist": " # URLs externas que coincidam com esta lista serão bloqueadas quando forem\n # adicionadas a uma página.\n # Esta lista aplica-se apenas a esta wiki. Consulte também a lista-negra global.\n # Veja a documentação em https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n #<!-- mantenha esta linha exatamente assim --> <pre>\n#\n# A sintaxe é a seguinte:\n# * Tudo o que estiver após um \"#\" até o final de uma linha é um comentário\n# * Todas as linhas que não estiverem em branco são um fragmento de expressão regular\n# (regex) de busca, que só poderão coincidir com hosts na URL\n\n #</pre> <!-- mantenha esta linha exatamente assim -->",
diff --git a/extensions/SpamBlacklist/i18n/qqq.json b/extensions/SpamBlacklist/i18n/qqq.json
index 61a755eb..a0e0c48b 100644
--- a/extensions/SpamBlacklist/i18n/qqq.json
+++ b/extensions/SpamBlacklist/i18n/qqq.json
@@ -6,7 +6,8 @@
"SPQRobin",
"Shirayuki",
"Siebrand",
- "The Evil IP address"
+ "The Evil IP address",
+ "Umherirrender"
]
},
"spam-blacklist": "See also: [[MediaWiki:spam-whitelist]] and [[MediaWiki:captcha-addurl-whitelist]]. You can translate the text, including 'Leave this line exactly as it is'. Some lines of this messages have one (1) leading space.",
@@ -17,10 +18,13 @@
"spam-blacklisted-email-text": "Text of errorpage when trying to send an e-mail with a blacklisted e-mail address",
"spam-blacklisted-email-signup": "Error when trying to create an account with an invalid e-mail address",
"spam-invalid-lines": "Used as an error message.\n\nThis message is followed by a list of bad lines.\n\nParameters:\n* $1 - the number of bad lines",
- "spam-blacklist-desc": "{{desc|name=Spam Blacklist|url=http://www.mediawiki.org/wiki/Extension:SpamBlacklist}}",
+ "spam-blacklist-desc": "{{desc|name=Spam Blacklist|url=https://www.mediawiki.org/wiki/Extension:SpamBlacklist}}",
"log-name-spamblacklist": "Name of log that appears on [[Special:Log]].",
"log-description-spamblacklist": "Description of spam blacklist log",
"logentry-spamblacklist-hit": "Log entry that is created when a user adds a link that is blacklisted on the spam blacklist.\n\n{{logentry}}\nAdditional parameters:\n* $4 - the URL the user tried to add",
"right-spamblacklistlog": "{{doc-right|spamblacklistlog}}",
- "action-spamblacklistlog": "{{doc-action|spamblacklistlog}}"
+ "action-spamblacklistlog": "{{doc-action|spamblacklistlog}}",
+ "apihelp-spamblacklist-description": "{{doc-apihelp-description|spamblacklist}}",
+ "apihelp-spamblacklist-param-url": "{{doc-apihelp-param|spamblacklist|url}}",
+ "apihelp-spamblacklist-example-1": "{{doc-apihelp-example|spamblacklist}}"
}
diff --git a/extensions/SpamBlacklist/i18n/roa-tara.json b/extensions/SpamBlacklist/i18n/roa-tara.json
index 19c3dcaf..ea757789 100644
--- a/extensions/SpamBlacklist/i18n/roa-tara.json
+++ b/extensions/SpamBlacklist/i18n/roa-tara.json
@@ -17,5 +17,8 @@
"log-description-spamblacklist": "Ste evende tracciane le trasute jndr'à l'elenghe gnure de le rummate.",
"logentry-spamblacklist-hit": "$1 ave fatte 'na trasute jndr'à l'elenghe gnure de le rummate sus a $3 pruvanne a aggiungere $4.",
"right-spamblacklistlog": "'Ndruche l'archivije de l'elenghe gnure de le rummate",
- "action-spamblacklistlog": "'ndruche l'archivije de l'elenghe gnure d'u rummate"
+ "action-spamblacklistlog": "'ndruche l'archivije de l'elenghe gnure d'u rummate",
+ "apihelp-spamblacklist-description": "Valide une o cchiù URL condre 'a SpamBlackList.",
+ "apihelp-spamblacklist-param-url": "URL da validà condre 'a lista gnore.",
+ "apihelp-spamblacklist-example-1": "Verifiche doje URL condre 'a lista gnore"
}
diff --git a/extensions/SpamBlacklist/i18n/ru.json b/extensions/SpamBlacklist/i18n/ru.json
index dbaabb1b..005da121 100644
--- a/extensions/SpamBlacklist/i18n/ru.json
+++ b/extensions/SpamBlacklist/i18n/ru.json
@@ -24,5 +24,6 @@
"log-description-spamblacklist": "Это журнал, отслеживающий срабатывание спам-листа.",
"logentry-spamblacklist-hit": "$1 вызвал срабатывание спам-листа на странице $3 из-за попытки добавить $4.",
"right-spamblacklistlog": "просмотр журнала спам-листа",
- "action-spamblacklistlog": "просмотр журнала спам-листа"
+ "action-spamblacklistlog": "просмотр журнала спам-листа",
+ "apihelp-spamblacklist-param-url": "URL-адреса для проверки в чёрном списке."
}
diff --git a/extensions/SpamBlacklist/i18n/sv.json b/extensions/SpamBlacklist/i18n/sv.json
index abde0a1a..f83f208d 100644
--- a/extensions/SpamBlacklist/i18n/sv.json
+++ b/extensions/SpamBlacklist/i18n/sv.json
@@ -23,5 +23,8 @@
"log-description-spamblacklist": "Här visas händelser som utlöst spamfiltret",
"logentry-spamblacklist-hit": "{{GENDER:$2|$1}} utlöste spamfiltret vid redigering av $3 genom att försöka lägga till $4.",
"right-spamblacklistlog": "Visa svartlistningslogg för spam",
- "action-spamblacklistlog": "visa svartlistningsloggen för spam"
+ "action-spamblacklistlog": "visa svartlistningsloggen för spam",
+ "apihelp-spamblacklist-description": "Validera en eller flera URL:er mot SpamBlacklist.",
+ "apihelp-spamblacklist-param-url": "URL:er att validera mot svartlistan.",
+ "apihelp-spamblacklist-example-1": "Kontrollera två URL:er mot svartlistan"
}
diff --git a/extensions/SpamBlacklist/i18n/zh-hans.json b/extensions/SpamBlacklist/i18n/zh-hans.json
index 0dafaac4..9ef6bf8a 100644
--- a/extensions/SpamBlacklist/i18n/zh-hans.json
+++ b/extensions/SpamBlacklist/i18n/zh-hans.json
@@ -8,21 +8,25 @@
"Mys 721tx",
"PhiLiP",
"Supaiku",
- "乌拉跨氪"
+ "乌拉跨氪",
+ "Yfdyh000"
]
},
- "spam-blacklist": " #<!-- 请完整地保留此行 --> <pre>\n# 当加入的外部URLs匹配该表时则会被禁止。\n# 该表只会影响本wiki项目;请同时参阅全域黑名单。\n# 注解请见 https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# 语法如下:\n# * 由“#”开头的每行均为注释\n# * 非空白行为正则表达式片段,其只与内含该片段的URLs匹配\n\n #</pre> <!-- 请完整地保留此行 -->",
- "spam-whitelist": " #<!-- 请完整地保留此行 --> <pre>\n# 与该表匹配的URLs,即使已被黑名单的规则禁止也*不会*被封禁。\n#\n# 语法如下:\n# * 由“#”开头的每行均为注释\n# * 非空白行为正则表达式片段,其只与内含该片段的URLs匹配\n\n #</pre> <!-- 请完整地保留此行 -->",
+ "spam-blacklist": " #<!-- 请完整地保留此行 --> <pre>\n# 当加入的外部URL匹配该表时则会被禁止。\n# 该表只会影响本wiki项目;请同时参阅全域黑名单。\n# 注解请见 https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# 语法如下:\n# * 由“#”开头的每行均为注释\n# * 非空白行为正则表达式片段,其只与内含该片段的URL匹配\n\n #</pre> <!-- 请完整地保留此行 -->",
+ "spam-whitelist": " #<!-- 请完整地保留此行 --> <pre>\n# 与该表匹配的URL,即使已被黑名单的规则禁止也*不会*被封禁。\n#\n# 语法如下:\n# * 由“#”开头的每行均为注释\n# * 非空白行为正则表达式片段,其只与内含该片段的URL匹配\n\n #</pre> <!-- 请完整地保留此行 -->",
"email-blacklist": " #<!-- 请完整地保留此行 --> <pre>\n# 与该表匹配的电子邮件地址将被禁止注册及发送邮件\n# 该表只会影响本wiki项目;请同时参阅全域黑名单。\n# 注解请见 https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# 语法如下:\n# * 由“#”开头的每行均为注释\n# * 非空白行为正则表达式片段,其只与内含该片段的电子邮件地址匹配\n\n #</pre> <!-- 请完整地保留此行 -->",
"email-whitelist": " #<!-- 请完整地保留此行 --> <pre>\n# 与该表匹配的电子邮件地址,即使已被黑名单的规则禁止也*不会*被封禁。\n#\n# 格式如下:\n# * 由“#”开头的每行均为注释\n# * 非空白行为正则表达式片段,其只与内含该片段的电子邮件地址匹配\n\n #</pre> <!-- 请完整地保留此行 -->",
"spam-blacklisted-email": "黑名单中的电子邮件地址",
"spam-blacklisted-email-text": "您的电子邮件地址目前已被列入黑名单以禁止您给其他用户发送邮件。",
"spam-blacklisted-email-signup": "所给电邮地址已被列入黑名单以禁止使用。",
"spam-invalid-lines": "下列垃圾链接黑名单存在{{PLURAL:$1|一行|多行}}无效的正则表示式,请在保存前修正:",
- "spam-blacklist-desc": "基于正则表达式的反垃圾工具允许将页面URLs及注册用电子邮件地址列入黑名单",
+ "spam-blacklist-desc": "基于正则表达式的反垃圾工具允许将页面URL及注册用电子邮件地址列入黑名单",
"log-name-spamblacklist": "垃圾链接黑名单日志",
"log-description-spamblacklist": "这个列表跟踪垃圾链接黑名单的触发。",
"logentry-spamblacklist-hit": "{{GENDER:$2|$1}}在$3上试图加入$4,触发了垃圾链接黑名单。",
"right-spamblacklistlog": "查看垃圾链接黑名单日志",
- "action-spamblacklistlog": "查看垃圾链接黑名单日志"
+ "action-spamblacklistlog": "查看垃圾链接黑名单日志",
+ "apihelp-spamblacklist-description": "验证一个或多个URL是否触发SpamBlacklist。",
+ "apihelp-spamblacklist-param-url": "要验证是否触发黑名单的URL。",
+ "apihelp-spamblacklist-example-1": "检查两个URL是否触发黑名单"
}
diff --git a/extensions/SpamBlacklist/i18n/zh-hant.json b/extensions/SpamBlacklist/i18n/zh-hant.json
index a0ca2d32..c76d7b5a 100644
--- a/extensions/SpamBlacklist/i18n/zh-hant.json
+++ b/extensions/SpamBlacklist/i18n/zh-hant.json
@@ -15,8 +15,8 @@
"email-blacklist": " #<!-- 請勿更動此行 --> <pre>\n# 任何註冊或送出的 Email 位址於此清單之中將會被封鎖。\n# 此清單有效範圍僅在本 Wiki,詳情請參考全域封鎖清單。\n# 相關文件請參考 https://www.mediawiki.org/wiki/Extension:SpamBlacklist\n#\n# 語法格式如下:\n# * 任何以 \"#\" 字元開頭的行皆為註解\n# * 任何非空白的行會被作為正規表示法用來比對 Email 位址中的主機名稱\n #</pre> <!-- 請勿更動此行 -->",
"email-whitelist": " #<!-- 請勿更動此行 --> <pre>\n# 任何 Email 位址於此清單中將 *不* 會被封鎖\n# 即使已經被加入封鎖清單當中。\n#\n# 語法格式如下:\n# * 任何以 \"#\" 字元開頭的行皆為註解\n# * 任何非空白的行會被作為正規表示法用來比對 Email 位址中的主機名稱\n #</pre> <!-- 請勿更動此行 -->",
"spam-blacklisted-email": "已列入封鎖清單的 Email 位址",
- "spam-blacklisted-email-text": "您的電子郵件位址目前已被列入封鎖清單,以防止您傳送信件給其他使用者。",
- "spam-blacklisted-email-signup": "提供的電子郵件位址目前已被列入封鎖清單,無法使用。",
+ "spam-blacklisted-email-text": "您的電子郵件地址目前已被列入封鎖清單,以防止您傳送郵件給其他使用者。",
+ "spam-blacklisted-email-signup": "提供的電子郵件地址目前已被列入封鎖清單,無法使用。",
"spam-invalid-lines": "下列濫用的封鎖清單中有{{PLURAL:$1|一行|多行}}使用了無效的正規表示法,須修正後才可儲存此頁面:",
"spam-blacklist-desc": "以正規表示法為基礎的防濫用工具,可封鎖頁面中的 URL 及已註冊使用者的 Email 地址。",
"log-name-spamblacklist": "濫用封鎖日誌",
diff --git a/extensions/SyntaxHighlight_GeSHi/README b/extensions/SyntaxHighlight_GeSHi/README
index 31908768..b6af55cf 100644
--- a/extensions/SyntaxHighlight_GeSHi/README
+++ b/extensions/SyntaxHighlight_GeSHi/README
@@ -50,3 +50,9 @@ GeSHi is generous about creating HTML elements: highlighting large blocks of
code can easily generate enough of them to crash a browser. As a guard, symbol
highlighting is turned off for code fragments larger than 100 kB. For fragments
larger than 200 kB, string highlighting is turned off as well.
+
+== Note to maintainers ==
+
+Whenever updating the version of GeSHi embedded in the extension, run
+maintenance/updateLanguageList.php to re-generate the list of supported
+languages.
diff --git a/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiLocalModule.php b/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiLocalModule.php
index c2ad1ef8..7ce87b53 100644
--- a/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiLocalModule.php
+++ b/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiLocalModule.php
@@ -25,8 +25,13 @@ class ResourceLoaderGeSHiLocalModule extends ResourceLoaderWikiModule {
* @return array
*/
protected function getPages( ResourceLoaderContext $context ) {
- return array(
- 'MediaWiki:Geshi.css' => array( 'type' => 'style' ),
- );
+ global $wgUseSiteCss;
+ if ( $wgUseSiteCss ) {
+ return array(
+ 'MediaWiki:Geshi.css' => array( 'type' => 'style' ),
+ );
+ } else {
+ return array();
+ }
}
}
diff --git a/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiModule.php b/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiModule.php
index 63310c5b..98c1c1eb 100644
--- a/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiModule.php
+++ b/extensions/SyntaxHighlight_GeSHi/ResourceLoaderGeSHiModule.php
@@ -51,11 +51,16 @@ class ResourceLoaderGeSHiModule extends ResourceLoaderModule {
* @return int
*/
public function getModifiedTime( ResourceLoaderContext $context ) {
+ static $selfmtime = null;
+ if ( $selfmtime === null ) {
+ // Cache this since there are 100s of instances of this module
+ // See also T93025, T85794.
+ $selfmtime = self::safeFilemtime( __FILE__ );
+ }
+
return max( array(
$this->getDefinitionMtime( $context ),
- self::safeFilemtime( __FILE__ ),
- self::safeFilemtime( __DIR__ . '/SyntaxHighlight_GeSHi.class.php' ),
- self::safeFilemtime( __DIR__ . '/geshi/geshi.php' ),
+ $selfmtime,
self::safeFilemtime( GESHI_LANG_ROOT . "/{$this->lang}.php" ),
) );
}
@@ -68,6 +73,7 @@ class ResourceLoaderGeSHiModule extends ResourceLoaderModule {
return array(
'class' => get_class( $this ),
'lang' => $this->lang,
+ 'geshi' => GESHI_VERSION,
);
}
}
diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php
index 3580d013..732f2195 100644
--- a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php
+++ b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php
@@ -30,6 +30,36 @@ class SyntaxHighlight_GeSHi {
private static $languages = null;
/**
+ * Executed after processing extension.json
+ */
+ public static function registerExtension() {
+ global $wgVersion;
+ if ( version_compare( $wgVersion, '1.25', '<' ) ) {
+ die( 'This version of SyntaxHighlight GeSHi requires MediaWiki 1.25' );
+ }
+
+ global $wgGeSHiSupportedLanguages;
+ if ( !$wgGeSHiSupportedLanguages ) {
+ // If not set already, load it (@see ExtensionRegistry::exportExtractedData)
+ require_once __DIR__ . '/SyntaxHighlight_GeSHi.langs.php';
+ }
+ // @fixme we shouldn't be loading this on ever request
+ require_once __DIR__ . '/geshi/geshi.php';
+ }
+
+ /**
+ * Register parser hook
+ *
+ * @param $parser Parser
+ * @return bool
+ */
+ public static function configureParser( &$parser ) {
+ $parser->setHook( 'source', array( 'SyntaxHighlight_GeSHi', 'parserHook' ) );
+ $parser->setHook( 'syntaxhighlight', array( 'SyntaxHighlight_GeSHi', 'parserHook' ) );
+ return true;
+ }
+
+ /**
* Parser hook
*
* @param string $text
@@ -38,15 +68,14 @@ class SyntaxHighlight_GeSHi {
* @return string
*/
public static function parserHook( $text, $args = array(), $parser ) {
- global $wgSyntaxHighlightDefaultLang, $wgUseSiteCss, $wgUseTidy;
- wfProfileIn( __METHOD__ );
+ global $wgSyntaxHighlightDefaultLang, $wgUseTidy;
self::initialise();
$text = rtrim( $text );
// Don't trim leading spaces away, just the linefeeds
$text = preg_replace( '/^\n+/', '', $text );
// Validate language
- if( isset( $args['lang'] ) && $args['lang'] ) {
+ if ( isset( $args['lang'] ) && $args['lang'] ) {
$lang = $args['lang'];
} else {
// language is not specified. Check if default exists, if yes, use it.
@@ -54,43 +83,40 @@ class SyntaxHighlight_GeSHi {
$lang = $wgSyntaxHighlightDefaultLang;
} else {
$error = self::formatLanguageError( $text );
- wfProfileOut( __METHOD__ );
return $error;
}
}
$lang = strtolower( $lang );
- if( !preg_match( '/^[a-z_0-9-]*$/', $lang ) ) {
+ if ( !preg_match( '/^[a-z_0-9-]*$/', $lang ) ) {
$error = self::formatLanguageError( $text );
- wfProfileOut( __METHOD__ );
return $error;
}
$geshi = self::prepare( $text, $lang );
- if( !$geshi instanceof GeSHi ) {
+ if ( !$geshi instanceof GeSHi ) {
$error = self::formatLanguageError( $text );
- wfProfileOut( __METHOD__ );
return $error;
}
$enclose = self::getEncloseType( $args );
// Line numbers
- if( isset( $args['line'] ) ) {
+ if ( isset( $args['line'] ) ) {
$geshi->enable_line_numbers( GESHI_FANCY_LINE_NUMBERS );
}
// Highlighting specific lines
- if( isset( $args['highlight'] ) ) {
+ if ( isset( $args['highlight'] ) ) {
$lines = self::parseHighlightLines( $args['highlight'] );
if ( count( $lines ) ) {
$geshi->highlight_lines_extra( $lines );
}
}
// Starting line number
- if( isset( $args['start'] ) ) {
+ if ( isset( $args['start'] ) ) {
$geshi->start_line_numbers_at( $args['start'] );
}
$geshi->set_header_type( $enclose );
// Strict mode
- if( isset( $args['strict'] ) ) {
+ if ( isset( $args['strict'] ) ) {
$geshi->enable_strict_mode();
}
// Format
@@ -98,32 +124,26 @@ class SyntaxHighlight_GeSHi {
if ( $geshi->error == GESHI_ERROR_NO_SUCH_LANG ) {
// Common error :D
$error = self::formatLanguageError( $text );
- wfProfileOut( __METHOD__ );
return $error;
}
$err = $geshi->error();
- if( $err ) {
+ if ( $err ) {
// Other unknown error!
$error = self::formatError( $err );
- wfProfileOut( __METHOD__ );
return $error;
}
// Armour for Parser::doBlockLevels()
- if( $enclose === GESHI_HEADER_DIV ) {
+ if ( $enclose === GESHI_HEADER_DIV ) {
$out = str_replace( "\n", '', $out );
}
// HTML Tidy will convert tabs to spaces incorrectly (bug 30930).
// But the conversion from tab to space occurs while reading the input,
// before the conversion from &#9; to tab, so we can armor it that way.
- if( $wgUseTidy ) {
+ if ( $wgUseTidy ) {
$out = str_replace( "\t", '&#9;', $out );
}
// Register CSS
- $parser->getOutput()->addModuleStyles( "ext.geshi.language.$lang" );
-
- if ( $wgUseSiteCss ) {
- $parser->getOutput()->addModuleStyles( 'ext.geshi.local' );
- }
+ $parser->getOutput()->addModuleStyles( array( "ext.geshi.language.$lang", 'ext.geshi.local' ) );
$encloseTag = $enclose === GESHI_HEADER_NONE ? 'span' : 'div';
$attribs = Sanitizer::validateTagAttributes( $args, $encloseTag );
@@ -140,7 +160,6 @@ class SyntaxHighlight_GeSHi {
}
$out = Html::rawElement( $encloseTag, $attribs, $out );
- wfProfileOut( __METHOD__ );
return $out;
}
@@ -151,7 +170,7 @@ class SyntaxHighlight_GeSHi {
* @return array
*/
private static function addAttribute( $attribs, $name, $value ) {
- if( isset( $attribs[$name] ) ) {
+ if ( isset( $attribs[$name] ) ) {
$attribs[$name] = $value . ' ' . $attribs[$name];
} else {
$attribs[$name] = $value;
@@ -243,9 +262,11 @@ class SyntaxHighlight_GeSHi {
global $wgSyntaxHighlightModels, $wgUseSiteCss,
$wgParser, $wgTextModelsToParse;
+ $highlightModels = ExtensionRegistry::getInstance()->getAttribute( 'SyntaxHighlightModels' );
+
// Determine the language
$model = $content->getModel();
- if ( !isset( $wgSyntaxHighlightModels[$model] ) ) {
+ if ( !isset( $highlightModels[$model] ) && !isset( $wgSyntaxHighlightModels[$model] ) ) {
// We don't care about this model, carry on.
return true;
}
@@ -269,19 +290,25 @@ class SyntaxHighlight_GeSHi {
$output = $wgParser->parse( $text, $title, $options, true, true, $revId );
}
- $lang = $wgSyntaxHighlightModels[$model];
+ if ( isset( $highlightModels[$model] ) ) {
+ $lang = $highlightModels[$model];
+ } else {
+ // TODO: Add deprecation warning after a while?
+ $lang = $wgSyntaxHighlightModels[$model];
+ }
+
// Attempt to format
$geshi = self::prepare( $text, $lang );
- if( $geshi instanceof GeSHi ) {
+ if ( $geshi instanceof GeSHi ) {
$out = $geshi->parse_code();
- if( !$geshi->error() ) {
+ if ( !$geshi->error() ) {
// Done
$output->addModuleStyles( "ext.geshi.language.$lang" );
$output->setText( "<div dir=\"ltr\">{$out}</div>" );
- if( $wgUseSiteCss ) {
+ if ( $wgUseSiteCss ) {
$output->addModuleStyles( 'ext.geshi.local' );
}
@@ -295,6 +322,54 @@ class SyntaxHighlight_GeSHi {
}
/**
+ * Hook to provide syntax highlighting for API pretty-printed output
+ *
+ * @param IContextSource $context
+ * @param string $text
+ * @param string $mime
+ * @param string $format
+ * @since MW 1.24
+ */
+ public static function apiFormatHighlight( IContextSource $context, $text, $mime, $format ) {
+ switch ( $mime ) {
+ case 'text/javascript':
+ case 'application/json':
+ $lang = 'javascript';
+ break;
+
+ case 'text/xml':
+ $lang = 'xml';
+ break;
+
+ default:
+ // Don't know how to handle this
+ return true;
+ }
+
+ $geshi = self::prepare( $text, $lang );
+ if ( $geshi instanceof GeSHi ) {
+ $out = $geshi->parse_code();
+ if ( !$geshi->error() ) {
+ if ( preg_match( '/^<pre([^>]*)>/i', $out, $m ) ) {
+ $attrs = Sanitizer::decodeTagAttributes( $m[1] );
+ $attrs['class'] .= ' api-pretty-content';
+ $out = '<pre' . Sanitizer::safeEncodeTagAttributes( $attrs ) . '>' .
+ substr( $out, strlen( $m[0] ) );
+ }
+ $output = $context->getOutput();
+ $output->addModuleStyles( array( "ext.geshi.language.$lang", 'ext.geshi.local' ) );
+ $output->addHTML( "<div dir=\"ltr\">{$out}</div>" );
+
+ // Inform MediaWiki that we have parsed this page and it shouldn't mess with it.
+ return false;
+ }
+ }
+
+ // Bottle out
+ return true;
+ }
+
+ /**
* Initialise a GeSHi object to format some code, performing
* common setup for all our uses of it
*
@@ -308,7 +383,7 @@ class SyntaxHighlight_GeSHi {
self::initialise();
$geshi = new GeSHi( $text, $lang );
- if( $geshi->error() == GESHI_ERROR_NO_SUCH_LANG ) {
+ if ( $geshi->error() == GESHI_ERROR_NO_SUCH_LANG ) {
return null;
}
$geshi->set_encoding( 'UTF-8' );
@@ -410,7 +485,7 @@ class SyntaxHighlight_GeSHi {
*/
private static function formatError( $error = '' ) {
$html = '';
- if( $error ) {
+ if ( $error ) {
$html .= "<p>{$error}</p>";
}
$html .= '<p>' . wfMessage( 'syntaxhighlight-specify')->inContentLanguage()->escaped()
@@ -428,8 +503,8 @@ class SyntaxHighlight_GeSHi {
private static function formatLanguages() {
$langs = self::getSupportedLanguages();
$list = array();
- if( count( $langs ) > 0 ) {
- foreach( $langs as $lang ) {
+ if ( count( $langs ) > 0 ) {
+ foreach ( $langs as $lang ) {
$list[] = '<samp>' . htmlspecialchars( $lang ) . '</samp>';
}
return '<p class="mw-collapsible mw-collapsed" style="padding: 0em 1em;">' . implode( ', ', $list ) . '</p><br style="clear: all"/>';
@@ -444,15 +519,9 @@ class SyntaxHighlight_GeSHi {
* @return array
*/
private static function getSupportedLanguages() {
- if( !is_array( self::$languages ) ) {
- self::initialise();
- self::$languages = array();
- foreach( glob( GESHI_LANG_ROOT . "/*.php" ) as $file ) {
- self::$languages[] = basename( $file, '.php' );
- }
- sort( self::$languages );
- }
- return self::$languages;
+ global $wgGeSHiSupportedLanguages;
+ self::initialise();
+ return $wgGeSHiSupportedLanguages;
}
/**
@@ -460,9 +529,9 @@ class SyntaxHighlight_GeSHi {
* @return bool
*/
private static function initialise() {
- if( !self::$initialised ) {
- if( !class_exists( 'GeSHi' ) ) {
- require( dirname( __FILE__ ) . '/geshi/geshi.php' );
+ if ( !self::$initialised ) {
+ if ( !class_exists( 'GeSHi' ) ) {
+ require ( dirname( __FILE__ ) . '/geshi/geshi.php' );
}
self::$initialised = true;
}
diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.i18n.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.i18n.php
deleted file mode 100644
index 32012d47..00000000
--- a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim6442dc48f1d977f3' ) ) {
- function wfJsonI18nShim6442dc48f1d977f3( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim6442dc48f1d977f3';
-}
diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.langs.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.langs.php
new file mode 100644
index 00000000..deff2980
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.langs.php
@@ -0,0 +1,236 @@
+<?php
+// Generated by updateLanguageList.php on Wed, 20 May 2015 00:14:22 +0000
+global $wgGeSHiSupportedLanguages;
+$wgGeSHiSupportedLanguages = array(
+ "4cs",
+ "6502acme",
+ "6502kickass",
+ "6502tasm",
+ "68000devpac",
+ "abap",
+ "actionscript",
+ "actionscript3",
+ "ada",
+ "aimms",
+ "algol68",
+ "apache",
+ "applescript",
+ "arm",
+ "asm",
+ "asp",
+ "asymptote",
+ "autoconf",
+ "autohotkey",
+ "autoit",
+ "avisynth",
+ "awk",
+ "bascomavr",
+ "bash",
+ "basic4gl",
+ "bf",
+ "bibtex",
+ "blitzbasic",
+ "bnf",
+ "boo",
+ "c",
+ "caddcl",
+ "cadlisp",
+ "cfdg",
+ "cfm",
+ "chaiscript",
+ "chapel",
+ "cil",
+ "clojure",
+ "cmake",
+ "cobol",
+ "coffeescript",
+ "cpp",
+ "csharp",
+ "css",
+ "cuesheet",
+ "d",
+ "dart",
+ "dcl",
+ "dcpu16",
+ "dcs",
+ "delphi",
+ "diff",
+ "div",
+ "dos",
+ "dot",
+ "e",
+ "ecmascript",
+ "eiffel",
+ "email",
+ "epc",
+ "erlang",
+ "euphoria",
+ "ezt",
+ "f1",
+ "falcon",
+ "fo",
+ "fortran",
+ "freebasic",
+ "freeswitch",
+ "fsharp",
+ "gambas",
+ "gdb",
+ "genero",
+ "genie",
+ "gettext",
+ "glsl",
+ "gml",
+ "gnuplot",
+ "go",
+ "groovy",
+ "gwbasic",
+ "haskell",
+ "haxe",
+ "hicest",
+ "hq9plus",
+ "html4strict",
+ "html5",
+ "icon",
+ "idl",
+ "ini",
+ "inno",
+ "intercal",
+ "io",
+ "ispfpanel",
+ "j",
+ "java",
+ "java5",
+ "javascript",
+ "jcl",
+ "jquery",
+ "kixtart",
+ "klonec",
+ "klonecpp",
+ "latex",
+ "lb",
+ "ldif",
+ "lisp",
+ "llvm",
+ "locobasic",
+ "logtalk",
+ "lolcode",
+ "lotusformulas",
+ "lotusscript",
+ "lscript",
+ "lsl2",
+ "lua",
+ "m68k",
+ "magiksf",
+ "make",
+ "mapbasic",
+ "matlab",
+ "mirc",
+ "mmix",
+ "modula2",
+ "modula3",
+ "mpasm",
+ "mxml",
+ "mysql",
+ "nagios",
+ "netrexx",
+ "newlisp",
+ "nginx",
+ "nimrod",
+ "nsis",
+ "oberon2",
+ "objc",
+ "objeck",
+ "ocaml",
+ "octave",
+ "oobas",
+ "oorexx",
+ "oracle11",
+ "oracle8",
+ "oxygene",
+ "oz",
+ "parasail",
+ "parigp",
+ "pascal",
+ "pcre",
+ "per",
+ "perl",
+ "perl6",
+ "pf",
+ "php",
+ "pic16",
+ "pike",
+ "pixelbender",
+ "pli",
+ "plsql",
+ "postgresql",
+ "postscript",
+ "povray",
+ "powerbuilder",
+ "powershell",
+ "proftpd",
+ "progress",
+ "prolog",
+ "properties",
+ "providex",
+ "purebasic",
+ "pycon",
+ "pys60",
+ "python",
+ "q",
+ "qbasic",
+ "qml",
+ "racket",
+ "rails",
+ "rbs",
+ "rebol",
+ "reg",
+ "rexx",
+ "robots",
+ "rpmspec",
+ "rsplus",
+ "ruby",
+ "rust",
+ "sas",
+ "scala",
+ "scheme",
+ "scilab",
+ "scl",
+ "sdlbasic",
+ "smalltalk",
+ "smarty",
+ "spark",
+ "sparql",
+ "sql",
+ "standardml",
+ "stonescript",
+ "systemverilog",
+ "tcl",
+ "teraterm",
+ "text",
+ "thinbasic",
+ "tsql",
+ "typoscript",
+ "unicon",
+ "upc",
+ "urbi",
+ "uscript",
+ "vala",
+ "vb",
+ "vbnet",
+ "vbscript",
+ "vedit",
+ "verilog",
+ "vhdl",
+ "vim",
+ "visualfoxpro",
+ "visualprolog",
+ "whitespace",
+ "whois",
+ "winbatch",
+ "xbasic",
+ "xml",
+ "xpp",
+ "yaml",
+ "z80",
+ "zxbasic"
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php
index 6820ae1e..0c3df7de 100644
--- a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php
+++ b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php
@@ -1,89 +1,13 @@
<?php
-/**
- * Syntax highlighting extension for MediaWiki using GeSHi
- * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- */
-
-/**
- * @file
- * @ingroup Extensions
- * @author Brion Vibber
- *
- * This extension wraps the GeSHi highlighter: http://qbnz.com/highlighter/
- *
- * A language is specified like: <source lang="c">void main() {}</source>
- * If you forget, or give an unsupported value, the extension spits out
- * some help text and a list of all supported languages.
- */
-
-if( !defined( 'MEDIAWIKI' ) ) {
- die();
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'SyntaxHighlight_GeSHi' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['SyntaxHighlight_GeSHi'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for SyntaxHighlight_GeSHi extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the SyntaxHighlight_GeSHi extension requires MediaWiki 1.25+' );
}
-
-require_once __DIR__ . '/geshi/geshi.php';
-
-$wgExtensionCredits['parserhook'][] = array(
- 'path' => __FILE__,
- 'name' => 'SyntaxHighlight',
- 'author' => array( 'Brion Vibber', 'Tim Starling', 'Rob Church', 'Niklas Laxström' ),
- 'descriptionmsg' => 'syntaxhighlight-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi',
- 'version' => GESHI_VERSION,
-);
-
-// Change these in LocalSettings.php
-$wgSyntaxHighlightDefaultLang = null;
-$wgSyntaxHighlightKeywordLinks = false;
-
-$dir = __DIR__ . '/';
-$wgMessagesDirs['SyntaxHighlight_GeSHi'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['SyntaxHighlight_GeSHi'] = $dir . 'SyntaxHighlight_GeSHi.i18n.php';
-
-$wgAutoloadClasses['SyntaxHighlight_GeSHi'] = $dir . 'SyntaxHighlight_GeSHi.class.php';
-$wgAutoloadClasses['ResourceLoaderGeSHiModule'] = $dir . 'ResourceLoaderGeSHiModule.php';
-$wgAutoloadClasses['ResourceLoaderGeSHiLocalModule'] = $dir . 'ResourceLoaderGeSHiLocalModule.php';
-
-$wgHooks['ResourceLoaderRegisterModules'][] = 'SyntaxHighlight_GeSHi::resourceLoaderRegisterModules';
-$wgHooks['ContentGetParserOutput'][] = 'SyntaxHighlight_GeSHi::renderHook';
-
-// Module to load MediaWiki:Geshi.css.
-$wgResourceModules['ext.geshi.local'] = array( 'class' => 'ResourceLoaderGeSHiLocalModule' );
-// More modules are defined by SyntaxHighlight_GeSHi::resourceLoaderRegisterModules,
-// one for each supported language. The general name template is 'ext.geshi.language.<lang>'.
-
-/**
- * Map content models to the corresponding language names to be used with the highlighter.
- * Pages with one of the given content models will automatically be highlighted.
- */
-$wgSyntaxHighlightModels = array(
- CONTENT_MODEL_CSS => 'css',
- CONTENT_MODEL_JAVASCRIPT => 'javascript',
-);
-
-/**
- * Register parser hook
- *
- * @param $parser Parser
- * @return bool
- */
-$wgHooks['ParserFirstCallInit'][] = function ( &$parser ) {
- $parser->setHook( 'source', array( 'SyntaxHighlight_GeSHi', 'parserHook' ) );
- $parser->setHook( 'syntaxhighlight', array( 'SyntaxHighlight_GeSHi', 'parserHook' ) );
- return true;
-};
diff --git a/extensions/SyntaxHighlight_GeSHi/extension.json b/extensions/SyntaxHighlight_GeSHi/extension.json
new file mode 100644
index 00000000..19809bf8
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/extension.json
@@ -0,0 +1,53 @@
+{
+ "name": "SyntaxHighlight",
+ "version": "1.0.8.12",
+ "author": [
+ "Brion Vibber",
+ "Tim Starling",
+ "Rob Church",
+ "Niklas Laxström"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi",
+ "descriptionmsg": "syntaxhighlight-desc",
+ "license-name": "GPL-2.0+",
+ "type": "parserhook",
+ "callback": "SyntaxHighlight_GeSHi::registerExtension",
+ "MessagesDirs": {
+ "SyntaxHighlight_GeSHi": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "SyntaxHighlight_GeSHi": "SyntaxHighlight_GeSHi.class.php",
+ "ResourceLoaderGeSHiModule": "ResourceLoaderGeSHiModule.php",
+ "ResourceLoaderGeSHiLocalModule": "ResourceLoaderGeSHiLocalModule.php"
+ },
+ "ResourceModules": {
+ "ext.geshi.local": {
+ "class": "ResourceLoaderGeSHiLocalModule"
+ }
+ },
+ "Hooks": {
+ "ParserFirstCallInit": [
+ "SyntaxHighlight_GeSHi::configureParser"
+ ],
+ "ResourceLoaderRegisterModules": [
+ "SyntaxHighlight_GeSHi::resourceLoaderRegisterModules"
+ ],
+ "ContentGetParserOutput": [
+ "SyntaxHighlight_GeSHi::renderHook"
+ ],
+ "ApiFormatHighlight": [
+ "SyntaxHighlight_GeSHi::apiFormatHighlight"
+ ]
+ },
+ "SyntaxHighlightModels": {
+ "css": "css",
+ "javascript": "javascript"
+ },
+ "config": {
+ "SyntaxHighlightDefaultLang": null,
+ "SyntaxHighlightKeywordLinks": false,
+ "GeSHiSupportedLanguages" : null
+ }
+}
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/contrib/aliased.php b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/aliased.php
new file mode 100644
index 00000000..0d4b2838
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/aliased.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Another GeSHi example script
+ *
+ * Configure your Apache server with 'AcceptPathInfo true' and something like
+ * 'Alias /viewmysource /var/www/geshi/contrib/aliased.php'. Don't forget
+ * to protect this alias as necessary.
+ *
+ * Usage - visit /viewmysource/file.name.ext to see that file with syntax
+ * highlighting, where "viewmysource" is the name of the alias you set up.
+ * You can use this without an alias too, just by visiting
+ * aliased.php/file.name.ext.
+ *
+ * @author Ross Golder <ross@golder.org>
+ * @version $Id$
+ */
+
+// Your config here
+define("SOURCE_ROOT", "/var/www/your/source/root/");
+
+// Assume you've put geshi in the include_path already
+require_once("geshi.php");
+
+// Get path info
+$path = SOURCE_ROOT.$_SERVER['PATH_INFO'];
+
+// Check for dickheads trying to use '../' to get to sensitive areas
+$base_path_len = strlen(SOURCE_ROOT);
+$real_path = realpath($path);
+if(strncmp($real_path, SOURCE_ROOT, $base_path_len)) {
+ exit("Access outside acceptable path.");
+}
+
+// Check file exists
+if(!file_exists($path)) {
+ exit("File not found ($path).");
+}
+
+// Prepare GeSHi instance
+$geshi = new GeSHi();
+$geshi->set_language('text');
+$geshi->load_from_file($path);
+$geshi->set_header_type(GESHI_HEADER_PRE);
+$geshi->enable_classes();
+$geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 10);
+$geshi->set_overall_style('color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;', true);
+$geshi->set_line_style('font: normal normal 95% \'Courier New\', Courier, monospace; color: #003030;', 'font-weight: bold; color: #006060;', true);
+$geshi->set_code_style('color: #000020;', 'color: #000020;');
+$geshi->set_link_styles(GESHI_LINK, 'color: #000060;');
+$geshi->set_link_styles(GESHI_HOVER, 'background-color: #f0f000;');
+$geshi->set_header_content('Source code viewer - ' . $path . ' - ' . $geshi->get_language_name());
+$geshi->set_header_content_style('font-family: Verdana, Arial, sans-serif; color: #808080; font-size: 70%; font-weight: bold; background-color: #f0f0ff; border-bottom: 1px solid #d0d0d0; padding: 2px;');
+$geshi->set_footer_content('Parsed in <TIME> seconds, using GeSHi <VERSION>');
+$geshi->set_footer_content_style('font-family: Verdana, Arial, sans-serif; color: #808080; font-size: 70%; font-weight: bold; background-color: #f0f0ff; border-top: 1px solid #d0d0d0; padding: 2px;');
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Source code viewer - <?php echo $path; ?> - <?php $geshi->get_language_name(); ?></title>
+ <style type="text/css">
+ <!--
+ <?php
+ // Output the stylesheet. Note it doesn't output the <style> tag
+ echo $geshi->get_stylesheet();
+ ?>
+ html {
+ background-color: #f0f0f0;
+ }
+ body {
+ font-family: Verdana, Arial, sans-serif;
+ margin: 10px;
+ border: 2px solid #e0e0e0;
+ background-color: #fcfcfc;
+ padding: 5px;
+ }
+ h2 {
+ margin: .1em 0 .2em .5em;
+ border-bottom: 1px solid #b0b0b0;
+ color: #b0b0b0;
+ font-weight: normal;
+ font-size: 150%;
+ }
+ h3 {
+ margin: .1em 0 .2em .5em;
+ color: #b0b0b0;
+ font-weight: normal;
+ font-size: 120%;
+ }
+ #footer {
+ text-align: center;
+ font-size: 80%;
+ color: #a9a9a9;
+ }
+ #footer a {
+ color: #9999ff;
+ }
+ textarea {
+ border: 1px solid #b0b0b0;
+ font-size: 90%;
+ color: #333;
+ margin-left: 20px;
+ }
+ select, input {
+ margin-left: 20px;
+ }
+ p {
+ font-size: 90%;
+ margin-left: .5em;
+ }
+ -->
+ </style>
+</head>
+<body>
+<?php
+// The fun part :)
+echo $geshi->parse_code();
+?>
+<hr/>
+</body>
+</html>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/contrib/cssgen.php b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/cssgen.php
new file mode 100644
index 00000000..d0dac0f9
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/cssgen.php
@@ -0,0 +1,464 @@
+<?php
+/*************************************************************************************
+ * cssgen.php
+ * ----------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie
+ * Release Version: 1.0.8.12
+ * Date Started: 2004/05/20
+ *
+ * Application to generate custom CSS files for GeSHi (based on an idea by Andreas
+ * Gohr)
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+set_magic_quotes_runtime(0);
+//
+// Functions
+//
+
+function make_header ( $title )
+{
+ echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>GeSHi CSS Generator :: ' . $title . ' </title>
+ <style type="text/css" media="screen">
+ <!--
+ html {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 80%;
+ background-color: #d0d0d0;
+ }
+ body {
+ margin: 10px;
+ padding: 5px;
+ border: 1px solid #f0f0f0;
+ background-color: #f6f6f6;
+ }
+ h1 {
+ border-bottom: 2px solid #e0e0e0;
+ font-weight: normal;
+ font-size: 150%;
+ color: #c0c0c0;
+ }
+ input, textarea {
+ border: 1px solid #d0d0d0;
+ }
+ th {
+ text-align: right;
+ font-weight: normal;
+ }
+ pre {
+ font-size: 110%;
+ color: #202020;
+ }
+ #footer {
+ color: #b0b0b0;
+ text-align: center;
+ font-size: 90%;
+ margin: 0 auto;
+ border-top: 1px solid #e0e0e0;
+ }
+ #footer a {
+ color: #c0c0c0;
+ }
+ -->
+ </style>
+ <script type="text/javascript">
+ function select (state)
+ {
+ var cboxes = document.getElementsByTagName(\'input\');
+ for (var i = 0; i < cboxes.length; i++) {
+ if (cboxes[i].type == "checkbox") {
+ if (state == "true") {
+ cboxes[i].checked = true;
+ } elseif (state == "false") {
+ cboxes[i].checked = false;
+ } elseif (state == "invert") {
+ cboxes[i].checked = !cboxes[i].checked;
+ }
+ }
+ }
+ }
+ </script>
+</head>
+<body>
+<h1>' . $title . '</h1>
+';
+}
+
+function make_footer ()
+{
+ echo '<div id="footer"><a href="http://qbnz.com/highlighter/">GeSHi</a> &copy; Nigel McNie, 2004, released under the GPL</div></body>
+</html>';
+}
+
+
+function get_var ( $var_name )
+{
+ if ( isset($_GET[$var_name]) )
+ {
+ return str_replace("\'", "'", $_GET[$var_name]);
+ }
+ elseif ( isset($_POST[$var_name]) )
+ {
+ return str_replace("\'", "'", $_POST[$var_name]);
+ }
+ return null;
+}
+
+
+
+//
+// Unset everything
+//
+foreach ( $_REQUEST as $var )
+{
+ unset($$var);
+}
+foreach ( array(
+ '_POST' => 'HTTP_POST_VARS',
+ '_GET' => 'HTTP_GET_VARS',
+ '_COOKIE' => 'HTTP_COOKIE_VARS',
+ '_SERVER' => 'HTTP_SERVER_VARS',
+ '_ENV' => 'HTTP_ENV_VARS',
+ '_FILES' => 'HTTP_POST_FILES') as $array => $other )
+{
+ if ( !isset($$array) )
+ {
+ $$array = $$other;
+ }
+ unset($$other);
+}
+
+
+// Get what step we're up to
+$step = get_var('step');
+
+if ( !$step || $step == 1 )
+{
+ $errors = 0;
+ make_header('Step 1');
+ echo "Welcome to the GeSHi CSS generator.<br /><pre>Searching for GeSHi... ";
+
+ // Find GeSHi
+ $geshi_path = get_var('geshi-path');
+ $geshi_lang_path = get_var('geshi-lang-path');
+
+ if(strstr($geshi_path, '..')) {
+ unset($geshi_path);
+ }
+ if(strstr($geshi_lang_path, '..')) {
+ unset($geshi_lang_path);
+ }
+
+ if ( !$geshi_path )
+ {
+ $geshi_path = '../geshi.php';
+ }
+ if ( !$geshi_lang_path )
+ {
+ $geshi_lang_path = '../geshi/';
+ }
+
+ if ( is_file($geshi_path) && is_readable($geshi_path) )
+ {
+ // Get file contents and see if GeSHi is in here
+ $file = @file($geshi_path);
+ $contents = '';
+ foreach ( $file as $line )
+ {
+ $contents .= $line;
+ }
+ if ( strpos($contents, '<?php
+/**
+ * GeSHi - Generic Syntax Highlighter') !== false )
+ {
+ echo '<span style="color: green;">Found at ' . realpath($geshi_path) . '</span>';
+ }
+ else
+ {
+ ++$errors;
+ $no_geshi_dot_php_error = true;
+ echo '<span style="color: red;">Not found</span>';
+ }
+ }
+ else
+ {
+ ++$errors;
+ $no_geshi_dot_php_error = true;
+ echo '<span style="color: red;">Not found</span>';
+ }
+
+ // Find language files
+ echo "\nSearching for language files... ";
+ if ( is_readable($geshi_lang_path . 'css-gen.cfg') )
+ {
+
+ echo '<span style="color: green;">Found at ' . realpath($geshi_lang_path) . '</span>';
+ }
+ else
+ {
+ ++$errors;
+ $no_lang_dir_error = true;
+ echo '<span style="color: red;">Not found</span>';
+ }
+ echo "</pre>\n";
+
+ if ( $errors > 0 )
+ {
+ // We're gonna have to ask for the paths...
+ echo 'Unfortunately CSSGen could not detect the following paths. Please input them and press &quot;submit&quot; to try again.';
+ echo "
+<form action=\"cssgen.php\" method=\"post\">";
+ if ( $no_geshi_dot_php_error )
+ {
+ echo "
+<br />geshi.php: <input type=\"text\" name=\"geshi-path\" value=\"" . realpath('../geshi.php') . "\" size=\"50\" />";
+ }
+ else
+ {
+ echo '<input type="hidden" name="geshi-path" value="' . htmlspecialchars($geshi_path) . '" />';
+ }
+ if ( $no_lang_dir_error )
+ {
+ echo "
+<br />language files directory: <input type=\"text\" name=\"geshi-lang-path\" value=\"" . realpath('../geshi/') . "/\" size=\"50\" /> (should have a trailing slash)";
+ }
+ else
+ {
+ echo '<input type="hidden" name="geshi-lang-path" value="' . $geshi_lang_path . '" />';
+ }
+
+ echo "
+<br /><input type=\"submit\" value=\"Search\" /></form>";
+ }
+ else
+ {
+ // no errors - echo continue form
+ echo 'Everything seems to be detected successfully. Use the button to continue.
+<br /><br /><form action="cssgen.php?step=2" method="post">
+<input type="hidden" name="geshi-path" value="' . realpath($geshi_path) . '" /><input type="hidden" name="geshi-lang-path" value="' . realpath($geshi_lang_path) . '" />
+<input type="submit" value="Step 2" />';
+ }
+
+ make_footer();
+}
+// Step 2
+elseif ( $step == 2 )
+{
+ make_header('Step 2');
+
+ $geshi_path = get_var('geshi-path');
+ $geshi_lang_path = get_var('geshi-lang-path');
+
+ $dh = opendir($geshi_lang_path);
+ $lang_files = array();
+ $file = readdir($dh);
+ while ( $file !== false )
+ {
+ if ( $file == '.' || $file == '..' || $file == 'CVS' || $file == 'css-gen.cfg' )
+ {
+ $file = readdir($dh);
+ continue;
+ }
+ if(!strstr(file_get_contents($dh . DIRECTORY_SEPARATOR . $file), '$language_data')) {
+ $file = readdir($dh);
+ continue;
+ }
+ $lang_files[] = $file;
+ $file = readdir($dh);
+ }
+ closedir($dh);
+ sort($lang_files);
+
+ // Now installed languages are in $lang_files
+
+ echo '<form action="cssgen.php?step=3" method="post" id="step2">
+What languages are you wanting to make this stylesheet for?<br /><br />
+Detected languages:<br />';
+
+ foreach ( $lang_files as $lang )
+ {
+ $lang = substr($lang, 0, strpos($lang, '.'));
+ if ($lang) {
+ echo "<input type=\"checkbox\" name=\"langs[$lang]\" checked=\"checked\" />&nbsp;$lang<br />\n";
+ }
+ }
+
+ echo "Select: <a href=\"javascript:select('true')\">All</a>, <a href=\"javascript:select('false')\">None</a>, <a href=\"javascript:select('invert')\">Invert</a><br />\n";
+
+ echo 'If you\'d like any other languages not detected here to be supported, please enter
+them here, one per line:<br /><textarea rows="4" cols="20" name="extra-langs"></textarea><br />
+';
+
+ echo '<br />Styles:
+<table>
+ <tr><th>Style for the overall code block:</th><td><input type="text" name="overall" value="border: 1px dotted #a0a0a0; font-family: \'Courier New\', Courier, monospace; background-color: #f0f0f0; color: #0000bb;" /></td></tr>
+ <tr><th>Default Styles</th><td><input type="text" name="default-styles" value="font-weight:normal;background:transparent;color:#000; padding-left: 5px;" /></td></tr>
+ <tr><th>Keywords I (if, do, while etc)</th><td><input type="text" name="keywords-1" value="color: #a1a100;" /></td></tr>
+ <tr><th>Keywords II (null, true, false etc)</th><td><input type="text" name="keywords-2" value="color: #000; font-weight: bold;" /></td></tr>
+ <tr><th>Inbuilt Functions (echo, print etc)</th><td><input type="text" name="keywords-3" value="color: #000066;" /></td></tr>
+ <tr><th>Data Types (int, boolean etc)</th><td><input type="text" name="keywords-4" value="color: #f63333;" /></td></tr>
+
+ <tr><th>Comments (//, <!-- --> etc)</th><td><input type="text" name="comments" value="color: #808080;" /></td></tr>
+ <tr><th>Escaped Characters (\n, \t etc)</th><td><input type="text" name="escaped-chars" value="color: #000033; font-weight: bold;" /></td></tr>
+ <tr><th>Brackets ( ([{}]) etc)</th><td><input type="text" name="brackets" value="color: #66cc66;" /></td></tr>
+ <tr><th>Strings ("foo" etc)</th><td><input type="text" name="strings" value="color: #ff0000;" /></td></tr>
+ <tr><th>Numbers (1, -54, 2.5 etc)</th><td><input type="text" name="numbers" value="color: #ff33ff;" /></td></tr>
+ <tr><th>Methods (Foo.bar() etc)</th><td><input type="text" name="methods" value="color: #006600;" /></td></tr>
+</table>';
+
+ echo '<input type="hidden" name="geshi-path" value="' . realpath($geshi_path) . '" /><input type="hidden" name="geshi-lang-path" value="' . realpath($geshi_lang_path) . '" />
+<input type="submit" value="Step 3" /></form>';
+
+ make_footer();
+}
+// Step 3
+elseif ( $step == 3 )
+{
+ make_header('Step 3');
+ echo '<p>Here is your completed stylesheet. Note that it may not be perfect - no regular expression styles are included for one thing,
+you\'ll have to add those yourself (php and xml are just two languages that use them), and line numbers are not included, however
+it includes most of the basic information.</p>';
+
+ // Make the stylesheet
+ $part_selector_1 = '';
+ $part_selector_2 = '';
+ $part_selector_3 = '';
+
+ $langs = get_var('langs');
+ $extra_langs = trim(get_var('extra-langs'));
+ if ( $extra_langs != '' )
+ {
+ $l = explode("\r\n", $extra_langs);
+ foreach ( $l as $lng )
+ {
+ $langs[$lng] = true;
+ }
+ }
+
+
+ foreach ( $langs as $lang => $dummy )
+ {
+ $part_selector_1 .= ".$lang {PART}, ";
+ $part_selector_2 .= ".$lang {PART1}, .$lang {PART2}, ";
+ $part_selector_3 .= ".$lang {PART1}, .$lang {PART2}, .$lang {PART3}, ";
+ }
+ $part_selector_1 = substr($part_selector_1, 0, -2);
+ $part_selector_2 = substr($part_selector_2, 0, -2);
+ $part_selector_3 = substr($part_selector_3, 0, -2);
+
+
+ $default_styles = get_var('default-styles');
+ $ol_selector = str_replace('{PART}', 'ol', $part_selector_1);
+ $overall_styles = get_var('overall');
+ $overall_selector = str_replace('{PART}', '', $part_selector_1);
+
+ $stylesheet = "/* GeSHi (c) Nigel McNie 2004 (http://qbnz.com/highlighter) */";
+
+ if ( $overall != '' )
+ {
+ $stylesheet .= "\n$overall_selector {{$overall_styles}}";
+ }
+ if ( $default_styles != '' )
+ {
+ $default_selector = str_replace(array('{PART1}', '{PART2}'), array('.de1', '.de2'), $part_selector_2);
+ $stylesheet .= "\n$default_selector {{$default_styles}}";
+ }
+
+ // Do keywords
+ $keywords_1 = get_var('keywords-1');
+ $keyword_selector_1 = str_replace('{PART}', '.kw1', $part_selector_1);
+ if ( $keywords_1 != '' )
+ {
+ $stylesheet .= "\n$keyword_selector_1 {{$keywords_1}}";
+ }
+
+ $keywords_2 = get_var('keywords-2');
+ $keyword_selector_2 = str_replace('{PART}', '.kw2', $part_selector_1);
+ if ( $keywords_2 != '' )
+ {
+ $stylesheet .= "\n$keyword_selector_2 {{$keywords_2}}";
+ }
+
+ $keywords_3 = get_var('keywords-3');
+ $keyword_selector_3 = str_replace('{PART}', '.kw3', $part_selector_1);
+ if ( $keywords_3 != '' )
+ {
+ $stylesheet .= "\n$keyword_selector_3 {{$keywords_3}}";
+ }
+
+ $keywords_4 = get_var('keywords-4');
+ $keyword_selector_4 = str_replace('{PART}', '.kw4', $part_selector_1);
+ if ( $keywords_4 != '' )
+ {
+ $stylesheet .= "\n$keyword_selector_4 {{$keywords_4}}";
+ }
+
+ // Do other lexics
+ $comments = get_var('comments');
+ $comment_selector = str_replace(array('{PART1}', '{PART2}', '{PART3}'), array('.co1', '.co2', '.coMULTI'), $part_selector_3);
+ if ( $comments != '' )
+ {
+ $stylesheet .= "\n$comment_selector {{$comments}}";
+ }
+
+ $esc = get_var('escaped-chars');
+ $esc_selector = str_replace('{PART}', '.es0', $part_selector_1);
+ if ( $esc != '' )
+ {
+ $stylesheet .= "\n$esc_selector {{$esc}}";
+ }
+
+ $brackets = get_var('brackets');
+ $brk_selector = str_replace('{PART}', '.br0', $part_selector_1);
+ if ( $brackets != '' )
+ {
+ $stylesheet .= "\n$brk_selector {{$brackets}}";
+ }
+
+ $strings = get_var('strings');
+ $string_selector = str_replace('{PART}', '.st0', $part_selector_1);
+ if ( $strings != '' )
+ {
+ $stylesheet .= "\n$string_selector {{$strings}}";
+ }
+
+ $numbers = get_var('numbers');
+ $num_selector = str_replace('{PART}', '.nu0', $part_selector_1);
+ if ( $numbers != '' )
+ {
+ $stylesheet .= "\n$num_selector {{$numbers}}";
+ }
+
+ $methods = get_var('methods');
+ $method_selector = str_replace('{PART}', '.me0', $part_selector_1);
+ if ( $methods != '' )
+ {
+ $stylesheet .= "\n$method_selector {{$methods}}";
+ }
+
+ echo "<pre>$stylesheet</pre>";
+
+ make_footer();
+}
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/contrib/cssgen2.php b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/cssgen2.php
new file mode 100644
index 00000000..cc3c39cb
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/cssgen2.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * A simple script which outputs the CSS classes for all languages
+ * supported by GeSHi. You can access it directly to download
+ * the CSS file. On *NIX you can also do a simple `php cssgen.php > geshi.css`.
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * @package geshi
+ * @subpackage contrib
+ * @author revulo <revulon@gmail.com>
+ * @copyright 2008 revulo
+ * @license http://gnu.org/copyleft/gpl.html GNU GPL
+ *
+ */
+
+require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'geshi.php';
+$geshi = new GeSHi;
+
+$languages = array();
+if ($handle = opendir($geshi->language_path)) {
+ while (($file = readdir($handle)) !== false) {
+ $pos = strpos($file, '.');
+ if ($pos > 0 && substr($file, $pos) == '.php') {
+ $languages[] = substr($file, 0, $pos);
+ }
+ }
+ closedir($handle);
+}
+sort($languages);
+
+header('Content-Type: application/octet-stream');
+header('Content-Disposition: attachment; filename="geshi.css"');
+
+echo "/**\n".
+ " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n" .
+ " * (http://qbnz.com/highlighter/ and http://geshi.org/)\n".
+ " */\n";
+
+foreach ($languages as $language) {
+ $geshi->set_language($language);
+ // note: the false argument is required for stylesheet generators, see API documentation
+ $css = $geshi->get_stylesheet(false);
+ echo preg_replace('/^\/\*\*.*?\*\//s', '', $css);
+}
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/contrib/example.php b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/example.php
new file mode 100644
index 00000000..1ad923d0
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/example.php
@@ -0,0 +1,217 @@
+<?php
+/**
+ * GeSHi example script
+ *
+ * Just point your browser at this script (with geshi.php in the parent directory,
+ * and the language files in subdirectory "../geshi/")
+ *
+ * @author Nigel McNie
+ * @version $Id$
+ */
+header('Content-Type: text/html; charset=utf-8');
+
+error_reporting(E_ALL);
+
+// Rudimentary checking of where GeSHi is. In a default install it will be in ../, but
+// it could be in the current directory if the include_path is set. There's nowhere else
+// we can reasonably guess.
+if (is_readable('../geshi.php')) {
+ $path = '../';
+} elseif (is_readable('geshi.php')) {
+ $path = './';
+} else {
+ die('Could not find geshi.php - make sure it is in your include path!');
+}
+require $path . 'geshi.php';
+
+$fill_source = false;
+if (isset($_POST['submit'])) {
+ if (get_magic_quotes_gpc()) {
+ $_POST['source'] = stripslashes($_POST['source']);
+ }
+ if (!strlen(trim($_POST['source']))) {
+ $_POST['language'] = preg_replace('#[^a-zA-Z0-9\-_]#', '', $_POST['language']);
+ $_POST['source'] = implode('', @file($path . 'geshi/' . $_POST['language'] . '.php'));
+ $_POST['language'] = 'php';
+ } else {
+ $fill_source = true;
+ }
+
+ // Here's a free demo of how GeSHi works.
+
+ // First the initialisation: source code to highlight and the language to use. Make sure
+ // you sanitise correctly if you use $_POST of course - this very script has had a security
+ // advisory against it in the past because of this. Please try not to use this script on a
+ // live site.
+ $geshi = new GeSHi($_POST['source'], $_POST['language']);
+
+ // Use the PRE_VALID header. This means less output source since we don't have to output &nbsp;
+ // everywhere. Of course it also means you can't set the tab width.
+ // HEADER_PRE_VALID puts the <pre> tag inside the list items (<li>) thus producing valid HTML markup.
+ // HEADER_PRE puts the <pre> tag around the list (<ol>) which is invalid in HTML 4 and XHTML 1
+ // HEADER_DIV puts a <div> tag arount the list (valid!) but needs to replace whitespaces with &nbsp
+ // thus producing much larger overhead. You can set the tab width though.
+ $geshi->set_header_type(GESHI_HEADER_PRE_VALID);
+
+ // Enable CSS classes. You can use get_stylesheet() to output a stylesheet for your code. Using
+ // CSS classes results in much less output source.
+ $geshi->enable_classes();
+
+ // Enable line numbers. We want fancy line numbers, and we want every 5th line number to be fancy
+ $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, 5);
+
+ // Set the style for the PRE around the code. The line numbers are contained within this box (not
+ // XHTML compliant btw, but if you are liberally minded about these things then you'll appreciate
+ // the reduced source output).
+ $geshi->set_overall_style('font: normal normal 90% monospace; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;', false);
+
+ // Set the style for line numbers. In order to get style for line numbers working, the <li> element
+ // is being styled. This means that the code on the line will also be styled, and most of the time
+ // you don't want this. So the set_code_style reverts styles for the line (by using a <div> on the line).
+ // So the source output looks like this:
+ //
+ // <pre style="[set_overall_style styles]"><ol>
+ // <li style="[set_line_style styles]"><div style="[set_code_style styles]>...</div></li>
+ // ...
+ // </ol></pre>
+ $geshi->set_line_style('color: #003030;', 'font-weight: bold; color: #006060;', true);
+ $geshi->set_code_style('color: #000020;', true);
+
+ // Styles for hyperlinks in the code. GESHI_LINK for default styles, GESHI_HOVER for hover style etc...
+ // note that classes must be enabled for this to work.
+ $geshi->set_link_styles(GESHI_LINK, 'color: #000060;');
+ $geshi->set_link_styles(GESHI_HOVER, 'background-color: #f0f000;');
+
+ // Use the header/footer functionality. This puts a div with content within the PRE element, so it is
+ // affected by the styles set by set_overall_style. So if the PRE has a border then the header/footer will
+ // appear inside it.
+ $geshi->set_header_content('<SPEED> <TIME> GeSHi &copy; 2004-2007, Nigel McNie, 2007-2008 Benny Baumann. View source of example.php for example of using GeSHi');
+ $geshi->set_header_content_style('font-family: sans-serif; color: #808080; font-size: 70%; font-weight: bold; background-color: #f0f0ff; border-bottom: 1px solid #d0d0d0; padding: 2px;');
+
+ // You can use <TIME> and <VERSION> as placeholders
+ $geshi->set_footer_content('Parsed in <TIME> seconds at <SPEED>, using GeSHi <VERSION>');
+ $geshi->set_footer_content_style('font-family: sans-serif; color: #808080; font-size: 70%; font-weight: bold; background-color: #f0f0ff; border-top: 1px solid #d0d0d0; padding: 2px;');
+} else {
+ // make sure we don't preselect any language
+ $_POST['language'] = null;
+}
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>GeSHi examples</title>
+ <style type="text/css">
+ <!--
+ <?php
+ if (isset($_POST['submit'])) {
+ // Output the stylesheet. Note it doesn't output the <style> tag
+ echo $geshi->get_stylesheet(true);
+ }
+ ?>
+ html {
+ background-color: #f0f0f0;
+ }
+ body {
+ font-family: Verdana, Arial, sans-serif;
+ margin: 10px;
+ border: 2px solid #e0e0e0;
+ background-color: #fcfcfc;
+ padding: 5px;
+ }
+ h2 {
+ margin: .1em 0 .2em .5em;
+ border-bottom: 1px solid #b0b0b0;
+ color: #b0b0b0;
+ font-weight: normal;
+ font-size: 150%;
+ }
+ h3 {
+ margin: .1em 0 .2em .5em;
+ color: #b0b0b0;
+ font-weight: normal;
+ font-size: 120%;
+ }
+ #footer {
+ text-align: center;
+ font-size: 80%;
+ color: #a9a9a9;
+ }
+ #footer a {
+ color: #9999ff;
+ }
+ textarea {
+ border: 1px solid #b0b0b0;
+ font-size: 90%;
+ color: #333;
+ margin-left: 20px;
+ }
+ select, input {
+ margin-left: 20px;
+ }
+ p {
+ font-size: 90%;
+ margin-left: .5em;
+ }
+ -->
+ </style>
+</head>
+<body>
+<h2>GeSHi Example Script</h2>
+<p>To use this script, make sure that <strong>geshi.php</strong> is in the parent directory or in your
+include_path, and that the language files are in a subdirectory of GeSHi's directory called <strong>geshi/</strong>.</p>
+<p>Enter your source and a language to highlight the source in and submit, or just choose a language to
+have that language file highlighted in PHP.</p>
+<?php
+if (isset($_POST['submit'])) {
+ // The fun part :)
+ echo $geshi->parse_code();
+ echo '<hr />';
+}
+?>
+<form action="?" method="post">
+<h3>Source to highlight</h3>
+<p>
+<textarea rows="10" cols="60" name="source" id="source"><?php echo $fill_source ? htmlspecialchars($_POST['source']) : '' ?></textarea>
+</p>
+<h3>Choose a language</h3>
+<p>
+<select name="language" id="language">
+<?php
+if (!($dir = @opendir(dirname(__FILE__) . '/geshi'))) {
+ if (!($dir = @opendir(dirname(__FILE__) . '/../geshi'))) {
+ echo '<option>No languages available!</option>';
+ }
+}
+$languages = array();
+while ($file = readdir($dir)) {
+ if ( $file[0] == '.' || strpos($file, '.', 1) === false) {
+ continue;
+ }
+ $lang = substr($file, 0, strpos($file, '.'));
+ $languages[] = $lang;
+}
+closedir($dir);
+sort($languages);
+foreach ($languages as $lang) {
+ if (isset($_POST['language']) && $_POST['language'] == $lang) {
+ $selected = 'selected="selected"';
+ } else {
+ $selected = '';
+ }
+ echo '<option value="' . $lang . '" '. $selected .'>' . $lang . "</option>\n";
+}
+
+?>
+</select>
+</p>
+<p>
+<input type="submit" name="submit" value="Highlight Source" />
+<input type="submit" name="clear" onclick="document.getElementById('source').value='';document.getElementById('language').value='';return false" value="clear" />
+</p>
+</form>
+<div id="footer">GeSHi &copy; Nigel McNie, 2004, released under the GNU GPL<br />
+For a better demonstration, check out the <a href="http://qbnz.com/highlighter/demo.php">online demo</a>
+</div>
+</body>
+</html>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/contrib/langcheck.php b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/langcheck.php
new file mode 100644
index 00000000..ce5aed1f
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/langcheck.php
@@ -0,0 +1,778 @@
+<?php
+/**
+ * GeSHi language file validation script
+ *
+ * Just point your browser at this script (with geshi.php in the parent directory)
+ * and the language files in subdirectory "../geshi/" are being validated
+ *
+ * CLI mode is supported
+ *
+ * @author Benny Baumann
+ * @version $Id$
+ */
+header('Content-Type: text/html; charset=utf-8');
+
+set_time_limit(0);
+error_reporting(E_ALL);
+$time_start = explode(' ', microtime());
+
+function colorize($level, $string) {
+ static $colors, $end;
+ if ( !isset($colors) ) {
+ if ( PHP_SAPI != 'cli' ) {
+ $end = '</span>';
+ $colors = array(
+ TYPE_NOTICE => '<span style="color:#080;font-weight:bold;">',
+ TYPE_WARNING => '<span style="color:#CC0; font-weight: bold;">',
+ TYPE_ERROR => '<span style="color:#F00; font-weight: bold;">',
+ TYPE_OK => '<span style="color: #080; font-weight: bold;">'
+ );
+ } else {
+ $end = chr(27).'[0m';
+ $colors = array(
+ TYPE_NOTICE => chr(27).'[1m',
+ TYPE_WARNING => chr(27).'[1;33m',
+ TYPE_ERROR => chr(27).'[1;31m',
+ TYPE_OK => chr(27).'[1;32m'
+ );
+ }
+ }
+
+ if ( !isset($colors[$level]) ) {
+ trigger_error("no colors for level $level", E_USER_ERROR);
+ }
+
+ return $colors[$level].$string.$end;
+}
+
+define ('TYPE_NOTICE', 0);
+define ('TYPE_WARNING', 1);
+define ('TYPE_ERROR', 2);
+define ('TYPE_OK', 3);
+
+$error_abort = false;
+$error_cache = array();
+function output_error_cache(){
+ global $error_cache;
+
+ if(count($error_cache)) {
+ echo colorize(TYPE_ERROR, "Failed");
+ if ( PHP_SAPI == 'cli' ) {
+ echo "\n\n";
+ } else {
+ echo "<br /><ol>\n";
+ }
+ foreach($error_cache as $error_msg) {
+ if ( PHP_SAPI == 'cli' ) {
+ echo "\n";
+ } else {
+ echo "<li>";
+ }
+ switch($error_msg['t']) {
+ case TYPE_NOTICE:
+ $msg = 'NOTICE';
+ break;
+ case TYPE_WARNING:
+ $msg = 'WARNING';
+ break;
+ case TYPE_ERROR:
+ $msg = 'ERROR';
+ break;
+ }
+ echo colorize($error_msg['t'], $msg);
+ if ( PHP_SAPI == 'cli' ) {
+ echo "\t" . $error_msg['m'];
+ } else {
+ echo " " . $error_msg['m'] . "</li>";
+ }
+ }
+ if ( PHP_SAPI == 'cli' ) {
+ echo "\n";
+ } else {
+ echo "</ol>\n";
+ }
+ } else {
+ echo colorize(TYPE_OK, "OK");
+ if ( PHP_SAPI == 'cli' ) {
+ echo "\n";
+ } else {
+ echo "\n<br />";
+ }
+ }
+ echo "\n";
+
+ $error_cache = array();
+}
+
+function report_error($type, $message) {
+ global $error_cache, $error_abort;
+
+ $error_cache[] = array('t' => $type, 'm' => $message);
+ if(TYPE_ERROR == $type) {
+ $error_abort = true;
+ }
+}
+
+function dupfind_strtolower(&$value){
+ $value = strtolower($value);
+}
+
+if ( PHP_SAPI != 'cli' ) { ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>GeSHi Language File Validation Script</title>
+ <style type="text/css">
+ <!--
+ html {
+ background-color: #f0f0f0;
+ }
+ body {
+ font-family: Verdana, Arial, sans-serif;
+ margin: 10px;
+ border: 2px solid #e0e0e0;
+ background-color: #fcfcfc;
+ padding: 5px;
+ font-size: 10pt;
+ }
+ h2 {
+ margin: .1em 0 .2em .5em;
+ border-bottom: 1px solid #b0b0b0;
+ color: #b0b0b0;
+ font-weight: normal;
+ font-size: 150%;
+ }
+ h3 {
+ margin: .1em 0 .2em .5em;
+ color: #b0b0b0;
+ font-weight: normal;
+ font-size: 120%;
+ }
+ #footer {
+ text-align: center;
+ font-size: 80%;
+ color: #a9a9a9;
+ }
+ #footer a {
+ color: #9999ff;
+ }
+ textarea {
+ border: 1px solid #b0b0b0;
+ font-size: 90%;
+ color: #333;
+ margin-left: 20px;
+ }
+ select, input {
+ margin-left: 20px;
+ }
+ p {
+ font-size: 90%;
+ margin-left: .5em;
+ }
+ -->
+ </style>
+</head>
+<body>
+<h2>GeSHi Language File Validation Script</h2>
+<p>To use this script, make sure that <strong>geshi.php</strong> is in the
+parent directory or in your include_path, and that the language files are in a
+subdirectory of GeSHi's directory called <strong>geshi/</strong>.</p>
+<p>Everything else will be done by this script automatically. After the script
+finished you should see messages of what could cause trouble with GeSHi or where
+your language files can be improved. Please be patient, as this might take some time.</p>
+
+<ol>
+<li>Checking where to find GeSHi installation ...<?php
+} else { ?>
+<?php echo colorize(TYPE_NOTICE, "#### GeSHi Language File Validation Script ####") ?>
+
+
+To use this script, make sure that <?php echo colorize(TYPE_NOTICE, "geshi.php"); ?> is in the
+parent directory or in your include_path, and that the language files are in a
+subdirectory of GeSHi's directory called <?php echo colorize(TYPE_NOTICE, "geshi/"); ?>.
+
+Everything else will be done by this script automatically. After the script
+finished you should see messages of what could cause trouble with GeSHi or where
+your language files can be improved. Please be patient, as this might take some time.
+
+
+Checking where to find GeSHi installation ...<?php echo "\t";
+}
+
+// Rudimentary checking of where GeSHi is. In a default install it will be in ../, but
+// it could be in the current directory if the include_path is set. There's nowhere else
+// we can reasonably guess.
+if (is_readable('../geshi.php')) {
+ $path = '../';
+} elseif (is_readable('geshi.php')) {
+ $path = './';
+} else {
+ report_error(TYPE_ERROR, 'Could not find geshi.php - make sure it is in your include path!');
+}
+
+if(!$error_abort) {
+ require $path . 'geshi.php';
+
+ if(!class_exists('GeSHi')) {
+ report_error(TYPE_ERROR, 'The GeSHi class was not found, although it seemed we loaded the correct file!');
+ }
+}
+
+if(!$error_abort) {
+ if(!defined('GESHI_LANG_ROOT')) {
+ report_error(TYPE_ERROR, 'There\'s no information present on where to find the language files!');
+ } elseif(!is_dir(GESHI_LANG_ROOT)) {
+ report_error(TYPE_ERROR, 'The path "'.GESHI_LANG_ROOT.'" given, does not ressemble a directory!');
+ } elseif(!is_readable(GESHI_LANG_ROOT)) {
+ report_error(TYPE_ERROR, 'The path "'.GESHI_LANG_ROOT.'" is not readable to this script!');
+ }
+}
+
+output_error_cache();
+
+if(!$error_abort) {
+ if ( PHP_SAPI == 'cli' ) {
+ echo "Listing available language files ...\t\t";
+ } else {
+ echo "</li>\n<li>Listing available language files ... ";
+ }
+
+ if (!($dir = @opendir(GESHI_LANG_ROOT))) {
+ report_error(TYPE_ERROR, 'Error requesting listing for available language files!');
+ }
+
+ $languages = array();
+
+ if(!$error_abort) {
+ while ($file = readdir($dir)) {
+ if (!$file || $file[0] == '.' || strpos($file, '.php') === false) {
+ continue;
+ }
+ $lang = substr($file, 0, strpos($file, '.'));
+ if(4 != strlen($file) - strlen($lang)) {
+ continue;
+ }
+ $languages[] = $lang;
+ }
+ closedir($dir);
+ }
+
+ $languages = array_unique($languages);
+ sort($languages);
+
+ if(!count($languages)) {
+ report_error(TYPE_WARNING, 'Unable to locate any usable language files in "'.GESHI_LANG_ROOT.'"!');
+ }
+
+ output_error_cache();
+}
+
+if ( PHP_SAPI == 'cli' ) {
+ if (isset($_SERVER['argv'][1]) && in_array($_SERVER['argv'][1], $languages)) {
+ $languages = array($_SERVER['argv'][1]);
+ }
+} else {
+ if (isset($_REQUEST['show']) && in_array($_REQUEST['show'], $languages)) {
+ $languages = array($_REQUEST['show']);
+ }
+}
+
+if(!$error_abort) {
+ foreach ($languages as $lang) {
+
+ if ( PHP_SAPI == 'cli' ) {
+ echo "Validating language file for '$lang' ...\t\t";
+ } else {
+ echo "</li>\n<li>Validating language file for '$lang' ... ";
+ }
+
+ $langfile = GESHI_LANG_ROOT . $lang . '.php';
+
+ $language_data = array();
+
+ if(!is_file($langfile)) {
+ report_error(TYPE_ERROR, 'The path "' .$langfile. '" does not ressemble a regular file!');
+ } elseif(!is_readable($langfile)) {
+ report_error(TYPE_ERROR, 'Cannot read file "' .$langfile. '"!');
+ } else {
+ $langfile_content = file_get_contents($langfile);
+ if(preg_match("/\?>(?:\r?\n|\r(?!\n)){2,}\Z/", $langfile_content)) {
+ report_error(TYPE_ERROR, 'Language file contains trailing empty lines at EOF!');
+ }
+ if(preg_match("/\?>(?:\r?\n|\r(?!\n))?\Z/", $langfile_content)) {
+ report_error(TYPE_ERROR, 'Language file contains an PHP end marker at EOF!');
+ }
+ if(!preg_match("/(?:\r?\n|\r(?!\n))\Z/", $langfile_content)) {
+ report_error(TYPE_ERROR, 'Language file contains no newline at EOF!');
+ }
+ if(preg_match("/(\r?\n|\r(?!\n))\\1\Z/", $langfile_content)) {
+ report_error(TYPE_ERROR, 'Language file contains trailing empty line before EOF!');
+ }
+ if(preg_match("/[\x20\t]$/m", $langfile_content)) {
+ report_error(TYPE_ERROR, 'Language file contains trailing whitespace at EOL!');
+ }
+ if(preg_match("/\t/", $langfile_content)) {
+ report_error(TYPE_NOTICE, 'Language file contains unescaped tabulator chars (probably for indentation)!');
+ }
+ if(preg_match('/^(?: )*(?! )(?! \*) /m', $langfile_content)) {
+ report_error(TYPE_NOTICE, 'Language file contains irregular indentation (other than 4 spaces per indentation level)!');
+ }
+
+ if(!preg_match("/\/\*\*((?!\*\/).)*?Author:((?!\*\/).)*?\*\//s", $langfile_content)) {
+ report_error(TYPE_WARNING, 'Language file does not contain a specification of an author!');
+ }
+ if(!preg_match("/\/\*\*((?!\*\/).)*?Copyright:((?!\*\/).)*?\*\//s", $langfile_content)) {
+ report_error(TYPE_WARNING, 'Language file does not contain a specification of the copyright!');
+ }
+ if(!preg_match("/\/\*\*((?!\*\/).)*?Release Version:((?!\*\/).)*?\*\//s", $langfile_content)) {
+ report_error(TYPE_WARNING, 'Language file does not contain a specification of the release version!');
+ }
+ if(!preg_match("/\/\*\*((?!\*\/).)*?Date Started:((?!\*\/).)*?\*\//s", $langfile_content)) {
+ report_error(TYPE_WARNING, 'Language file does not contain a specification of the date it was started!');
+ }
+ if(!preg_match("/\/\*\*((?!\*\/).)*?This file is part of GeSHi\.((?!\*\/).)*?\*\//s", $langfile_content)) {
+ report_error(TYPE_WARNING, 'Language file does not state that it belongs to GeSHi!');
+ }
+ if(!preg_match("/\/\*\*((?!\*\/).)*?language file for GeSHi\.((?!\*\/).)*?\*\//s", $langfile_content)) {
+ report_error(TYPE_WARNING, 'Language file does not state that it is a language file for GeSHi!');
+ }
+ if(!preg_match("/\/\*\*((?!\*\/).)*?GNU General Public License((?!\*\/).)*?\*\//s", $langfile_content)) {
+ report_error(TYPE_WARNING, 'Language file does not state that it is provided under the terms of the GNU GPL!');
+ }
+
+ unset($langfile_content);
+
+ include $langfile;
+
+ if(!isset($language_data)) {
+ report_error(TYPE_ERROR, 'Language file does not contain a $language_data structure to check!');
+ } elseif (!is_array($language_data)) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data structure which is not an array!');
+ }
+ }
+
+ if(!$error_abort) {
+ if(!isset($language_data['LANG_NAME'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'LANG_NAME\'] specification!');
+ } elseif (!is_string($language_data['LANG_NAME'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'LANG_NAME\'] specification which is not a string!');
+ }
+
+ if(!isset($language_data['COMMENT_SINGLE'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'COMMENT_SIGNLE\'] structure to check!');
+ } elseif (!is_array($language_data['COMMENT_SINGLE'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'COMMENT_SINGLE\'] structure which is not an array!');
+ }
+
+ if(!isset($language_data['COMMENT_MULTI'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'COMMENT_MULTI\'] structure to check!');
+ } elseif (!is_array($language_data['COMMENT_MULTI'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'COMMENT_MULTI\'] structure which is not an array!');
+ }
+
+ if(isset($language_data['COMMENT_REGEXP'])) {
+ if (!is_array($language_data['COMMENT_REGEXP'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'COMMENT_REGEXP\'] structure which is not an array!');
+ }
+ }
+
+ if(!isset($language_data['QUOTEMARKS'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'QUOTEMARKS\'] structure to check!');
+ } elseif (!is_array($language_data['QUOTEMARKS'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'QUOTEMARKS\'] structure which is not an array!');
+ }
+
+ if(isset($language_data['HARDQUOTE'])) {
+ if (!is_array($language_data['HARDQUOTE'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'HARDQUOTE\'] structure which is not an array!');
+ }
+ }
+
+ if(!isset($language_data['ESCAPE_CHAR'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'ESCAPE_CHAR\'] specification to check!');
+ } elseif (!is_string($language_data['ESCAPE_CHAR'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'ESCAPE_CHAR\'] specification which is not a string!');
+ } elseif (1 < strlen($language_data['ESCAPE_CHAR'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'ESCAPE_CHAR\'] specification is not empty or exactly one char!');
+ }
+
+ if(!isset($language_data['CASE_KEYWORDS'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'CASE_KEYWORDS\'] specification!');
+ } elseif (!is_int($language_data['CASE_KEYWORDS'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'CASE_KEYWORDS\'] specification which is not an integer!');
+ } elseif (GESHI_CAPS_NO_CHANGE != $language_data['CASE_KEYWORDS'] &&
+ GESHI_CAPS_LOWER != $language_data['CASE_KEYWORDS'] &&
+ GESHI_CAPS_UPPER != $language_data['CASE_KEYWORDS']) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'CASE_KEYWORDS\'] specification which is neither of GESHI_CAPS_NO_CHANGE, GESHI_CAPS_LOWER nor GESHI_CAPS_UPPER!');
+ }
+
+ if(!isset($language_data['KEYWORDS'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'KEYWORDS\'] structure to check!');
+ } elseif (!is_array($language_data['KEYWORDS'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'KEYWORDS\'] structure which is not an array!');
+ } else {
+ foreach($language_data['KEYWORDS'] as $kw_key => $kw_value) {
+ if(!is_integer($kw_key)) {
+ report_error(TYPE_WARNING, "Language file contains an key '$kw_key' in \$language_data['KEYWORDS'] that is not integer!");
+ } elseif (!is_array($kw_value)) {
+ report_error(TYPE_ERROR, "Language file contains a \$language_data['KEYWORDS']['$kw_value'] structure which is not an array!");
+ }
+ }
+ }
+
+ if(!isset($language_data['SYMBOLS'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'SYMBOLS\'] structure to check!');
+ } elseif (!is_array($language_data['SYMBOLS'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'SYMBOLS\'] structure which is not an array!');
+ }
+
+ if(!isset($language_data['CASE_SENSITIVE'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'CASE_SENSITIVE\'] structure to check!');
+ } elseif (!is_array($language_data['CASE_SENSITIVE'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'CASE_SENSITIVE\'] structure which is not an array!');
+ } else {
+ foreach($language_data['CASE_SENSITIVE'] as $cs_key => $cs_value) {
+ if(!is_integer($cs_key)) {
+ report_error(TYPE_WARNING, "Language file contains an key '$cs_key' in \$language_data['CASE_SENSITIVE'] that is not integer!");
+ } elseif (!is_bool($cs_value)) {
+ report_error(TYPE_ERROR, "Language file contains a Case Sensitivity specification for \$language_data['CASE_SENSITIVE']['$cs_value'] which is not a boolean!");
+ }
+ }
+ }
+
+ if(!isset($language_data['URLS'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'URLS\'] structure to check!');
+ } elseif (!is_array($language_data['URLS'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'URLS\'] structure which is not an array!');
+ } else {
+ foreach($language_data['URLS'] as $url_key => $url_value) {
+ if(!is_integer($url_key)) {
+ report_error(TYPE_WARNING, "Language file contains an key '$url_key' in \$language_data['URLS'] that is not integer!");
+ } elseif (!is_string($url_value)) {
+ report_error(TYPE_ERROR, "Language file contains a Documentation URL specification for \$language_data['URLS']['$url_value'] which is not a string!");
+ } elseif (preg_match('#&([^;]*(=|$))#U', $url_value)) {
+ report_error(TYPE_ERROR, "Language file contains unescaped ampersands (&amp;) in \$language_data['URLS']!");
+ }
+ }
+ }
+
+ if(!isset($language_data['OOLANG'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'OOLANG\'] specification!');
+ } elseif (!is_int($language_data['OOLANG']) && !is_bool($language_data['OOLANG'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'OOLANG\'] specification which is neither boolean nor integer!');
+ } elseif (false !== $language_data['OOLANG'] &&
+ true !== $language_data['OOLANG'] &&
+ 2 !== $language_data['OOLANG']) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'OOLANG\'] specification which is neither of false, true or 2!');
+ }
+
+ if(!isset($language_data['OBJECT_SPLITTERS'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'OBJECT_SPLITTERS\'] structure to check!');
+ } elseif (!is_array($language_data['OBJECT_SPLITTERS'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'OBJECT_SPLITTERS\'] structure which is not an array!');
+ }
+
+ if(!isset($language_data['REGEXPS'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'REGEXPS\'] structure to check!');
+ } elseif (!is_array($language_data['REGEXPS'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'REGEXPS\'] structure which is not an array!');
+ }
+
+ if(!isset($language_data['STRICT_MODE_APPLIES'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'STRICT_MODE_APPLIES\'] specification!');
+ } elseif (!is_int($language_data['STRICT_MODE_APPLIES'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'STRICT_MODE_APPLIES\'] specification which is not an integer!');
+ } elseif (GESHI_MAYBE != $language_data['STRICT_MODE_APPLIES'] &&
+ GESHI_ALWAYS != $language_data['STRICT_MODE_APPLIES'] &&
+ GESHI_NEVER != $language_data['STRICT_MODE_APPLIES']) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'STRICT_MODE_APPLIES\'] specification which is neither of GESHI_MAYBE, GESHI_ALWAYS nor GESHI_NEVER!');
+ }
+
+ if(!isset($language_data['SCRIPT_DELIMITERS'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'SCRIPT_DELIMITERS\'] structure to check!');
+ } elseif (!is_array($language_data['SCRIPT_DELIMITERS'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'SCRIPT_DELIMITERS\'] structure which is not an array!');
+ }
+
+ if(!isset($language_data['HIGHLIGHT_STRICT_BLOCK'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'HIGHLIGHT_STRICT_BLOCK\'] structure to check!');
+ } elseif (!is_array($language_data['HIGHLIGHT_STRICT_BLOCK'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'HIGHLIGHT_STRICT_BLOCK\'] structure which is not an array!');
+ }
+
+ if(isset($language_data['TAB_WIDTH'])) {
+ if (!is_int($language_data['TAB_WIDTH'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'TAB_WIDTH\'] specification which is not an integer!');
+ } elseif (1 > $language_data['TAB_WIDTH']) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'TAB_WIDTH\'] specification which is less than 1!');
+ }
+ }
+
+ if(isset($language_data['PARSER_CONTROL'])) {
+ if (!is_array($language_data['PARSER_CONTROL'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'PARSER_CONTROL\'] structure which is not an array!');
+ }
+ }
+
+ if(!isset($language_data['STYLES'])) {
+ report_error(TYPE_ERROR, 'Language file contains no $language_data[\'STYLES\'] structure to check!');
+ } elseif (!is_array($language_data['STYLES'])) {
+ report_error(TYPE_ERROR, 'Language file contains a $language_data[\'STYLES\'] structure which is not an array!');
+ } else {
+ $style_arrays = array('KEYWORDS', 'COMMENTS', 'ESCAPE_CHAR',
+ 'BRACKETS', 'STRINGS', 'NUMBERS', 'METHODS', 'SYMBOLS',
+ 'REGEXPS', 'SCRIPT');
+ foreach($style_arrays as $style_kind) {
+ if(!isset($language_data['STYLES'][$style_kind])) {
+ report_error(TYPE_ERROR, "Language file contains no \$language_data['STYLES']['$style_kind'] structure to check!");
+ } elseif (!is_array($language_data['STYLES'][$style_kind])) {
+ report_error(TYPE_ERROR, "Language file contains a \$language_data['STYLES\']['$style_kind'] structure which is not an array!");
+ } else {
+ foreach($language_data['STYLES'][$style_kind] as $sk_key => $sk_value) {
+ if(!is_int($sk_key) && ('COMMENTS' != $style_kind && 'MULTI' != $sk_key)
+ && !(('STRINGS' == $style_kind || 'ESCAPE_CHAR' == $style_kind) && 'HARD' == $sk_key)) {
+ report_error(TYPE_WARNING, "Language file contains an key '$sk_key' in \$language_data['STYLES']['$style_kind'] that is not integer!");
+ } elseif (!is_string($sk_value)) {
+ report_error(TYPE_WARNING, "Language file contains a CSS specification for \$language_data['STYLES']['$style_kind'][$key] which is not a string!");
+ }
+ }
+ }
+ }
+
+ unset($style_arrays);
+ }
+ }
+
+ if(!$error_abort) {
+ //Initial sanity checks survived? --> Let's dig deeper!
+ foreach($language_data['KEYWORDS'] as $key => $keywords) {
+ if(!isset($language_data['CASE_SENSITIVE'][$key])) {
+ report_error(TYPE_ERROR, "Language file contains no \$language_data['CASE_SENSITIVE'] specification for keyword group $key!");
+ }
+ if(!isset($language_data['URLS'][$key])) {
+ report_error(TYPE_ERROR, "Language file contains no \$language_data['URLS'] specification for keyword group $key!");
+ }
+ if(empty($keywords)) {
+ report_error(TYPE_WARNING, "Language file contains an empty keyword list in \$language_data['KEYWORDS'] for group $key!");
+ }
+ foreach($keywords as $id => $kw) {
+ if(!is_string($kw)) {
+ report_error(TYPE_WARNING, "Language file contains an non-string entry at \$language_data['KEYWORDS'][$key][$id]!");
+ } elseif (!strlen($kw)) {
+ report_error(TYPE_ERROR, "Language file contains an empty string entry at \$language_data['KEYWORDS'][$key][$id]!");
+ } elseif (preg_match('/^([\(\)\{\}\[\]\^=.,:;\-+\*\/%\$\"\'\?]|&[\w#]\w*;)+$/i', $kw)) {
+ report_error(TYPE_NOTICE, "Language file contains an keyword ('$kw') at \$language_data['KEYWORDS'][$key][$id] which seems to be better suited for the symbols section!");
+ }
+ }
+ if(isset($language_data['CASE_SENSITIVE'][$key]) && !$language_data['CASE_SENSITIVE'][$key]) {
+ array_walk($keywords, 'dupfind_strtolower');
+ }
+ if(count($keywords) != count(array_unique($keywords))) {
+ $kw_diffs = array_count_values($keywords);
+ foreach($kw_diffs as $kw => $kw_count) {
+ if($kw_count > 1) {
+ report_error(TYPE_WARNING, "Language file contains per-group duplicate keyword '$kw' in \$language_data['KEYWORDS'][$key]!");
+ }
+ }
+ }
+ }
+
+ $disallowed_before = "(?<![a-zA-Z0-9\$_\|\#;>|^&";
+ $disallowed_after = "(?![a-zA-Z0-9_\|%\\-&;";
+
+ foreach($language_data['KEYWORDS'] as $key => $keywords) {
+ foreach($language_data['KEYWORDS'] as $key2 => $keywords2) {
+ if($key2 <= $key) {
+ continue;
+ }
+ $kw_diffs = array_intersect($keywords, $keywords2);
+ foreach($kw_diffs as $kw) {
+ if(isset($language_data['PARSER_CONTROL']['KEYWORDS'])) {
+ //Check the precondition\post-cindition for the involved keyword groups
+ $g1_pre = $disallowed_before;
+ $g2_pre = $disallowed_before;
+ $g1_post = $disallowed_after;
+ $g2_post = $disallowed_after;
+ if(isset($language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'])) {
+ $g1_pre = $language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'];
+ $g2_pre = $language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'];
+ }
+ if(isset($language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'])) {
+ $g1_post = $language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'];
+ $g2_post = $language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'];
+ }
+
+ if(isset($language_data['PARSER_CONTROL']['KEYWORDS'][$key]['DISALLOWED_BEFORE'])) {
+ $g1_pre = $language_data['PARSER_CONTROL']['KEYWORDS'][$key]['DISALLOWED_BEFORE'];
+ }
+ if(isset($language_data['PARSER_CONTROL']['KEYWORDS'][$key]['DISALLOWED_AFTER'])) {
+ $g1_post = $language_data['PARSER_CONTROL']['KEYWORDS'][$key]['DISALLOWED_AFTER'];
+ }
+
+ if(isset($language_data['PARSER_CONTROL']['KEYWORDS'][$key2]['DISALLOWED_BEFORE'])) {
+ $g2_pre = $language_data['PARSER_CONTROL']['KEYWORDS'][$key2]['DISALLOWED_BEFORE'];
+ }
+ if(isset($language_data['PARSER_CONTROL']['KEYWORDS'][$key2]['DISALLOWED_AFTER'])) {
+ $g2_post = $language_data['PARSER_CONTROL']['KEYWORDS'][$key2]['DISALLOWED_AFTER'];
+ }
+
+ if($g1_pre != $g2_pre || $g1_post != $g2_post) {
+ continue;
+ }
+ }
+ report_error(TYPE_WARNING, "Language file contains cross-group duplicate keyword '$kw' in \$language_data['KEYWORDS'][$key] and \$language_data['KEYWORDS'][$key2]!");
+ }
+ }
+ }
+ foreach($language_data['CASE_SENSITIVE'] as $key => $keywords) {
+ if(!isset($language_data['KEYWORDS'][$key]) && $key != GESHI_COMMENTS) {
+ report_error(TYPE_WARNING, "Language file contains an superfluous \$language_data['CASE_SENSITIVE'] specification for non-existing keyword group $key!");
+ }
+ }
+ foreach($language_data['URLS'] as $key => $keywords) {
+ if(!isset($language_data['KEYWORDS'][$key])) {
+ report_error(TYPE_WARNING, "Language file contains an superfluous \$language_data['URLS'] specification for non-existing keyword group $key!");
+ }
+ }
+ foreach($language_data['STYLES']['KEYWORDS'] as $key => $keywords) {
+ if(!isset($language_data['KEYWORDS'][$key])) {
+ report_error(TYPE_WARNING, "Language file contains an superfluous \$language_data['STYLES']['KEYWORDS'] specification for non-existing keyword group $key!");
+ }
+ }
+
+ foreach($language_data['COMMENT_SINGLE'] as $ck => $cv) {
+ if(!is_int($ck)) {
+ report_error(TYPE_WARNING, "Language file contains an key '$ck' in \$language_data['COMMENT_SINGLE'] that is not integer!");
+ }
+ if(!is_string($cv)) {
+ report_error(TYPE_WARNING, "Language file contains an non-string entry at \$language_data['COMMENT_SINGLE'][$ck]!");
+ }
+ if(!isset($language_data['STYLES']['COMMENTS'][$ck])) {
+ report_error(TYPE_WARNING, "Language file contains no \$language_data['STYLES']['COMMENTS'] specification for comment group $ck!");
+ }
+ }
+ if(isset($language_data['COMMENT_REGEXP'])) {
+ foreach($language_data['COMMENT_REGEXP'] as $ck => $cv) {
+ if(!is_int($ck)) {
+ report_error(TYPE_WARNING, "Language file contains an key '$ck' in \$language_data['COMMENT_REGEXP'] that is not integer!");
+ }
+ if(!is_string($cv)) {
+ report_error(TYPE_WARNING, "Language file contains an non-string entry at \$language_data['COMMENT_REGEXP'][$ck]!");
+ }
+ if(!isset($language_data['STYLES']['COMMENTS'][$ck])) {
+ report_error(TYPE_WARNING, "Language file contains no \$language_data['STYLES']['COMMENTS'] specification for comment group $ck!");
+ }
+ }
+ }
+ foreach($language_data['STYLES']['COMMENTS'] as $ck => $cv) {
+ if($ck != 'MULTI' && !isset($language_data['COMMENT_SINGLE'][$ck]) &&
+ !isset($language_data['COMMENT_REGEXP'][$ck])) {
+ report_error(TYPE_NOTICE, "Language file contains an superfluous \$language_data['STYLES']['COMMENTS'] specification for Single Line or Regular-Expression Comment key $ck!");
+ }
+ }
+ if (isset($language_data['STYLES']['STRINGS']['HARD'])) {
+ if (empty($language_data['HARDQUOTE'])) {
+ report_error(TYPE_NOTICE, "Language file contains superfluous \$language_data['STYLES']['STRINGS'] specification for key 'HARD', but no 'HARDQUOTE's are defined!");
+ }
+ unset($language_data['STYLES']['STRINGS']['HARD']);
+ }
+ foreach($language_data['STYLES']['STRINGS'] as $sk => $sv) {
+ if($sk && !isset($language_data['QUOTEMARKS'][$sk])) {
+ report_error(TYPE_NOTICE, "Language file contains an superfluous \$language_data['STYLES']['STRINGS'] specification for non-existing quotemark key $sk!");
+ }
+ }
+
+ foreach($language_data['REGEXPS'] as $rk => $rv) {
+ if(!is_int($rk)) {
+ report_error(TYPE_WARNING, "Language file contains an key '$rk' in \$language_data['REGEXPS'] that is not integer!");
+ }
+ if(is_string($rv)) {
+ //Check for unmasked / in regular expressions ...
+ if(empty($rv)) {
+ report_error(TYPE_WARNING, "Language file contains an empty regular expression at \$language_data['REGEXPS'][$rk]!");
+ } else {
+ if(preg_match("/(?<!\\\\)\//s", $rv)) {
+ report_error(TYPE_WARNING, "Language file contains a regular expression with an unmasked / character at \$language_data['REGEXPS'][$rk]!");
+ } elseif (preg_match("/(?<!<)(\\\\\\\\)*\\\\\|(?!>)/s", $rv)) {
+ report_error(TYPE_WARNING, "Language file contains a regular expression with an unescaped match for a pipe character '|' which needs escaping as '&lt;PIPE&gt;' instead at \$language_data['REGEXPS'][$rk]!");
+ }
+ }
+ } elseif(is_array($rv)) {
+ if(!isset($rv[GESHI_SEARCH])) {
+ report_error(TYPE_ERROR, "Language file contains no GESHI_SEARCH entry in extended regular expression at \$language_data['REGEXPS'][$rk]!");
+ } elseif(!is_string($rv[GESHI_SEARCH])) {
+ report_error(TYPE_ERROR, "Language file contains a GESHI_SEARCH entry in extended regular expression at \$language_data['REGEXPS'][$rk] which is not a string!");
+ } else {
+ if(preg_match("/(?<!\\\\)\//s", $rv[GESHI_SEARCH])) {
+ report_error(TYPE_WARNING, "Language file contains a regular expression with an unmasked / character at \$language_data['REGEXPS'][$rk]!");
+ } elseif (preg_match("/(?<!<)(\\\\\\\\)*\\\\\|(?!>)/s", $rv[GESHI_SEARCH])) {
+ report_error(TYPE_WARNING, "Language file contains a regular expression with an unescaped match for a pipe character '|' which needs escaping as '&lt;PIPE&gt;' instead at \$language_data['REGEXPS'][$rk]!");
+ }
+ }
+ if(!isset($rv[GESHI_REPLACE])) {
+ report_error(TYPE_WARNING, "Language file contains no GESHI_REPLACE entry in extended regular expression at \$language_data['REGEXPS'][$rk]!");
+ } elseif(!is_string($rv[GESHI_REPLACE])) {
+ report_error(TYPE_ERROR, "Language file contains a GESHI_REPLACE entry in extended regular expression at \$language_data['REGEXPS'][$rk] which is not a string!");
+ }
+ if(!isset($rv[GESHI_MODIFIERS])) {
+ report_error(TYPE_WARNING, "Language file contains no GESHI_MODIFIERS entry in extended regular expression at \$language_data['REGEXPS'][$rk]!");
+ } elseif(!is_string($rv[GESHI_MODIFIERS])) {
+ report_error(TYPE_ERROR, "Language file contains a GESHI_MODIFIERS entry in extended regular expression at \$language_data['REGEXPS'][$rk] which is not a string!");
+ }
+ if(!isset($rv[GESHI_BEFORE])) {
+ report_error(TYPE_WARNING, "Language file contains no GESHI_BEFORE entry in extended regular expression at \$language_data['REGEXPS'][$rk]!");
+ } elseif(!is_string($rv[GESHI_BEFORE])) {
+ report_error(TYPE_ERROR, "Language file contains a GESHI_BEFORE entry in extended regular expression at \$language_data['REGEXPS'][$rk] which is not a string!");
+ }
+ if(!isset($rv[GESHI_AFTER])) {
+ report_error(TYPE_WARNING, "Language file contains no GESHI_AFTER entry in extended regular expression at \$language_data['REGEXPS'][$rk]!");
+ } elseif(!is_string($rv[GESHI_AFTER])) {
+ report_error(TYPE_ERROR, "Language file contains a GESHI_AFTER entry in extended regular expression at \$language_data['REGEXPS'][$rk] which is not a string!");
+ }
+ } else {
+ report_error(TYPE_WARNING, "Language file contains an non-string and non-array entry at \$language_data['REGEXPS'][$rk]!");
+ }
+ if(!isset($language_data['STYLES']['REGEXPS'][$rk])) {
+ report_error(TYPE_WARNING, "Language file contains no \$language_data['STYLES']['REGEXPS'] specification for regexp group $rk!");
+ }
+ }
+ foreach($language_data['STYLES']['REGEXPS'] as $rk => $rv) {
+ if(!isset($language_data['REGEXPS'][$rk])) {
+ report_error(TYPE_NOTICE, "Language file contains an superfluous \$language_data['STYLES']['REGEXPS'] specification for regexp key $rk!");
+ }
+ }
+
+
+ }
+
+ output_error_cache();
+
+ flush();
+
+ if($error_abort) {
+ break;
+ }
+ }
+}
+
+$time_end = explode(' ', microtime());
+$time_diff = $time_end[0] + $time_end[1] - $time_start[0] - $time_start[1];
+
+if ( PHP_SAPI != 'cli' ) {
+?></li>
+</ol>
+
+<p>Validation process completed in <?php printf("%.2f", $time_diff); ?> seconds.</p>
+
+<div id="footer">GeSHi &copy; 2004-2007 Nigel McNie, 2007-2008 Benny Baumann, released under the GNU GPL</div>
+</body>
+</html>
+
+<?php } else { ?>
+
+Validation process completed in <?php printf("%.2f", $time_diff); ?> seconds.
+
+GeSHi &copy; 2004-2007 Nigel McNie, 2007-2014 Benny Baumann, released under the GNU GPL
+
+<?php } ?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/contrib/langwiz.php b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/langwiz.php
new file mode 100644
index 00000000..3338fa66
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/contrib/langwiz.php
@@ -0,0 +1,1153 @@
+<?php
+/**
+ * GeSHi example script
+ *
+ * Just point your browser at this script (with geshi.php in the parent directory,
+ * and the language files in subdirectory "../geshi/")
+ *
+ *This script
+ *
+ * @author Nigel McNie, Benny Baumann (BenBE@geshi.org), Andreas 'Segaja' Schleifer (webmaster at segaja dot de)
+ * @version $Id$
+ */
+header('Content-Type: text/html; charset=utf-8');
+
+set_time_limit(0);
+error_reporting(E_ALL);
+$time_start = explode(' ', microtime());
+
+//Handle crappy PHP magic:
+if (get_magic_quotes_gpc()) {
+ function stripslashes_deep($value) {
+ $value = is_array($value) ?
+ array_map('stripslashes_deep', $value) :
+ stripslashes($value);
+
+ return $value;
+ }
+
+ $_POST = array_map('stripslashes_deep', $_POST);
+ $_GET = array_map('stripslashes_deep', $_GET);
+ $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
+ $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
+}
+
+function htmlspecialchars_deep($value) {
+ return is_array($value) ? array_map('htmlspecialchars_deep', $value) : htmlspecialchars($value);
+}
+
+define ('TYPE_NOTICE', 0);
+define ('TYPE_WARNING', 1);
+define ('TYPE_ERROR', 2);
+
+$error_abort = false;
+$error_cache = array();
+function output_error_cache(){
+ global $error_cache;
+
+ if(count($error_cache)) {
+ echo "<span style=\"color: #F00; font-weight: bold;\">Failed</span><br />";
+ echo "<ol>\n";
+ foreach($error_cache as $error_msg) {
+ echo "<li>";
+ switch($error_msg['t']) {
+ case TYPE_NOTICE:
+ echo "<span style=\"color: #080; font-weight: bold;\">NOTICE:</span>";
+ break;
+ case TYPE_WARNING:
+ echo "<span style=\"color: #CC0; font-weight: bold;\">WARNING:</span>";
+ break;
+ case TYPE_ERROR:
+ echo "<span style=\"color: #F00; font-weight: bold;\">ERROR:</span>";
+ break;
+ }
+ echo " " . $error_msg['m'] . "</li>";
+ }
+ echo "</ol>\n";
+ } else {
+ echo "<span style=\"color: #080; font-weight: bold;\">OK</span><br />";
+ }
+ echo "\n";
+
+ $error_cache = array();
+}
+
+function report_error($type, $message) {
+ global $error_cache, $error_abort;
+
+ $error_cache[] = array('t' => $type, 'm' => $message);
+ if(TYPE_ERROR == $type) {
+ $error_abort = true;
+ }
+}
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>GeSHi Language File Generator Script</title>
+ <style type="text/css">
+ <!--
+ html {
+ background-color: #f0f0f0;
+ }
+ body {
+ font-family: Verdana, Arial, sans-serif;
+ margin: 10px;
+ border: 2px solid #e0e0e0;
+ background-color: #fcfcfc;
+ padding: 5px;
+ font-size: 10pt;
+ }
+ h2 {
+ margin: .1em 0 .2em .5em;
+ border-bottom: 1px solid #b0b0b0;
+ color: #b0b0b0;
+ font-weight: normal;
+ font-size: 150%;
+ }
+ h3 {
+ margin: .1em 0 .2em .5em;
+ color: #b0b0b0;
+ font-weight: normal;
+ font-size: 120%;
+ }
+ #footer {
+ text-align: center;
+ font-size: 80%;
+ color: #a9a9a9;
+ }
+ #footer a {
+ color: #9999ff;
+ }
+ textarea {
+ border: 1px solid #b0b0b0;
+ font-size: 90%;
+ color: #333;
+ margin-left: 20px;
+ }
+ select, input {
+ margin-left: 2px;
+ border: 1px solid #808080;
+ }
+ p {
+ font-size: 90%;
+ margin-left: .5em;
+ }
+ fieldset {
+ border: 1px dotted gray;
+ background-color: #f0f0f0;
+ margin-bottom: .5em;
+ }
+ legend {
+ font-weight: bold;
+ background-color: #f9f9f9;
+ border: 1px solid #a0a0a0;
+ border-width: 1px 2px 2px 1px;
+ }
+ fieldset table > tbody > tr > td {
+ width: 20%;
+ }
+ fieldset table > tbody > tr > td+td {
+ width: 80%;
+ }
+
+ fieldset table > tbody > tr > td+td > input {
+ width: 98%;
+ }
+ -->
+ </style>
+</head>
+<body>
+<h2>GeSHi Language File Generator Script</h2>
+<p>To use this script, make sure that <strong>geshi.php</strong> is in the
+parent directory or in your include_path, and that the language files are in a
+subdirectory of GeSHi's directory called <strong>geshi/</strong>.</p>
+<p>If not already done, select a language file below that will be used as
+base for the language file to generate or create a blank one. Following this
+you can do whatever you like to edit your language file. But note that not all
+features are made available through this script.</p>
+
+<p>Checking GeSHi installation ... <?php
+// Rudimentary checking of where GeSHi is. In a default install it will be in ../, but
+// it could be in the current directory if the include_path is set. There's nowhere else
+// we can reasonably guess.
+if (is_readable('../geshi.php')) {
+ $path = '../';
+} elseif (is_readable('geshi.php')) {
+ $path = './';
+} else {
+ report_error(TYPE_ERROR, 'Could not find geshi.php - make sure it is in your include path!');
+}
+
+if(!$error_abort) {
+ require $path . 'geshi.php';
+
+ if(!class_exists('GeSHi')) {
+ report_error(TYPE_ERROR, 'The GeSHi class was not found, although it seemed we loaded the correct file!');
+ }
+}
+
+if(!$error_abort) {
+ if(!defined('GESHI_LANG_ROOT')) {
+ report_error(TYPE_ERROR, 'There\'s no information present on where to find the language files!');
+ } elseif(!is_dir(GESHI_LANG_ROOT)) {
+ report_error(TYPE_ERROR, 'The path "'.GESHI_LANG_ROOT.'" given, does not ressemble a directory!');
+ } elseif(!is_readable(GESHI_LANG_ROOT)) {
+ report_error(TYPE_ERROR, 'The path "'.GESHI_LANG_ROOT.'" is not readable to this script!');
+ }
+}
+
+if(!$error_abort) {
+ if (!($dir = @opendir(GESHI_LANG_ROOT))) {
+ report_error(TYPE_ERROR, 'Error requesting listing for available language files!');
+ }
+
+ $languages = array();
+
+ if(!$error_abort) {
+ while ($file = readdir($dir)) {
+ if (!$file || $file[0] == '.' || strpos($file, '.') === false) {
+ continue;
+ }
+ $lang = substr($file, 0, strpos($file, '.'));
+ $languages[] = $lang;
+ }
+ closedir($dir);
+ }
+
+ $languages = array_unique($languages);
+ sort($languages);
+
+ if(!count($languages)) {
+ report_error(TYPE_WARNING, 'Unable to locate any usable language files in "'.GESHI_LANG_ROOT.'"!');
+ }
+}
+
+output_error_cache();
+
+// --- empty variables for values of $_POST - begin ---
+$post_var_names = array('li', 'ai', 'ld');
+
+$li = array(
+ 'file' => 'example',
+ 'name' => 'Example'
+ );
+
+$ai = array(
+ 'name' => 'Benny Baumann',
+ 'email' => 'BenBE@geshi.org',
+ 'web' => 'http://qbnz.com/highlighter/'
+ );
+
+$ld = array(
+ 'cmt' => array(
+ 'sl' => array(
+ 1 => array(
+ 'start' => '//',
+ 'style' => 'font-style: italic; color: #666666;'
+ ),
+ 2 => array(
+ 'start' => '#',
+ 'style' => 'font-style: italic; color: #666666;'
+ )
+ ),
+ 'ml' => array(
+ 1 => array(
+ 'start' => '/*',
+ 'end' => '*/',
+ 'style' => 'font-style: italic; color: #666666;'
+ ),
+ 2 => array(
+ 'start' => '/**',
+ 'end' => '*/',
+ 'style' => 'font-style: italic; color: #006600;'
+ )
+ ),
+ 'rxc' => array(
+ 1 => array(
+ 'rx' => '/Hello RegExp/',
+ 'style' => 'font-style: italic; color: #666666;'
+ )
+ )
+ ),
+ 'str' => array(
+ 'qm' => array(
+ 1 => array(
+ 'delim' => "'",
+ 'style' => 'color: #0000FF;'
+ ),
+ 2 => array(
+ 'delim' => "&quot;",
+ 'style' => 'color: #0000FF;'
+ )
+ ),
+ 'ec' => array(
+ 'char' => '\\',
+ 'style' => 'font-weight: bold; color: #000080;'
+ ),
+ 'erx' => array(
+ 1 => array(
+ 'rx' => '/\{\\\\$\w+\}/',
+ 'style' => 'font-weight: bold; color: #008080;'
+ ),
+ 2 => array(
+ 'rx'=> '/\{\\\\$\w+\}/',
+ 'style' => 'font-weight: bold; color: #008080;'
+ )
+ )
+ ),
+ 'kw_case' => 'GESHI_CAPS_NO_CHANGE',
+ 'kw' => array(
+ 1 => array(
+ 'list' => '',
+ 'case' => '0',
+ 'style' => 'color: #0000FF; font-weight: bold;',
+ 'docs' => ''
+ )
+ ),
+ 'sy' => array(
+ 0 => array(
+ 'list' => '',
+ 'style' => 'color: #0000FF; font-weight: bold;'
+ )
+ )
+ );
+
+$kw_case_sel = array(
+ 'GESHI_CAPS_NO_CHANGE' => '',
+ 'GESHI_CAPS_UPPER' => '',
+ 'GESHI_CAPS_LOWER' => ''
+ );
+
+$kw_cases_sel = array(
+ 1 => array(
+ 0 => '',
+ 1 => ''
+ )
+ );
+// --- empty variables for values of $_POST - end ---
+
+echo "<pre>";
+//var_dump($languages);
+
+foreach($post_var_names as $varName) { // export wanted variables of $_POST array...
+ if(array_key_exists($varName, $_POST)) {
+ $$varName = htmlspecialchars_deep($_POST[$varName]);
+ }
+}
+
+// determine the selected kw_case...
+$kw_case_sel[$ld['kw_case']] = ' selected="selected"';
+
+// determine the selected kw_cases...
+for($i = 1; $i <= count($kw_cases_sel); $i += 1) {
+ $kw_cases_sel[$i][(int) $ld['kw'][$i]['case']] = ' selected="selected"';
+}
+
+$lang = validate_lang();
+var_dump($lang);
+echo "</pre>";
+
+?>
+
+<form action="?action=test" method="post">
+ <fieldset>
+ <legend>Generic Information</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="li[file]">Language File ID:</label>
+ </td>
+ <td>
+ <input type="text" name="li[file]" id="li[file]" value="<?=$li['file']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="li[name]">Language Name:</label>
+ </td>
+ <td>
+ <input type="text" name="li[name]" id="li[name]" value="<?=$li['name']; ?>" />
+ </td>
+ </tr>
+
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>Author</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ai[name]">Full Name:</label>
+ </td>
+ <td>
+ <input type="text" name="ai[name]" id="ai[name]" value="<?=$ai['name']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ai[email]">eMail address:</label>
+ </td>
+ <td>
+ <input type="text" name="ai[email]" id="ai[email]" value="<?=$ai['email']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ai[web]">Homepage:</label>
+ </td>
+ <td>
+ <input type="text" name="ai[web]" id="ai[web]" value="<?=$ai['web']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>Comments</legend>
+
+ <fieldset>
+ <legend>Single Line</legend>
+
+ <fieldset>
+ <legend>Comment Group 1</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[cmt][sl][1][start]">Comment Start:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][sl][1][start]" id="ld[cmt][sl][1][start]" value="<?=$ld['cmt']['sl'][1]['start']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[cmt][sl][1][style]">Comment Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][sl][1][style]" id="ld[cmt][sl][1][style]" value="<?=$ld['cmt']['sl'][1]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>Comment Group 2</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[cmt][sl][2][start]">Comment Start:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][sl][2][start]" id="ld[cmt][sl][2][start]" value="<?=$ld['cmt']['sl'][2]['start']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[cmt][sl][2][style]">Comment Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][sl][2][style]" id="ld[cmt][sl][2][style]" value="<?=$ld['cmt']['sl'][2]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </fieldset>
+
+ <fieldset>
+ <legend>Multiple Lines</legend>
+
+ <fieldset>
+ <legend>Comment Group 1</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[cmt][ml][1][start]">Comment Start:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][ml][1][start]" id="ld[cmt][ml][1][start]" value="<?=$ld['cmt']['ml'][1]['start']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[cmt][ml][1][end]">Comment End:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][ml][1][end]" id="ld[cmt][ml][1][end]" value="<?=$ld['cmt']['ml'][1]['end']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[cmt][ml][1][style]">Comment Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][ml][1][style]" id="ld[cmt][ml][1][style]" value="<?=$ld['cmt']['ml'][1]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>Comment Group 2</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[cmt][ml][2][start]">Comment Start:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][ml][2][start]" id="ld[cmt][ml][2][start]" value="<?=$ld['cmt']['ml'][2]['start']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[cmt][ml][2][end]">Comment End:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][ml][2][end]" id="ld[cmt][ml][2][end]" value="<?=$ld['cmt']['ml'][2]['end']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[cmt][ml][2][style]">Comment Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][ml][2][style]" id="ld[cmt][ml][2][style]" value="<?=$ld['cmt']['ml'][2]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </fieldset>
+
+ <fieldset>
+ <legend>Regular Expressions</legend>
+
+ <fieldset>
+ <legend>Comment Group 1</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[cmt][rxc][1][rx]">Comment RX:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][rxc][1][rx]" id="ld[cmt][rxc][1][rx]" value="<?=$ld['cmt']['rxc'][1]['rx']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[cmt][rxc][1][style]">Comment Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[cmt][rxc][1][style]" id="ld[cmt][rxc][1][style]" value="<?=$ld['cmt']['rxc'][1]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </fieldset>
+ </fieldset>
+
+ <fieldset>
+ <legend>Strings</legend>
+
+ <fieldset>
+ <legend>String \ Quotes (delimiters, parsed)</legend>
+
+ <fieldset>
+ <legend>Quotemark Group 1</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[str][qm][1][delim]">String Delimiter:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][qm][1][delim]" id="ld[str][qm][1][delim]" value="<?=$ld['str']['qm'][1]['delim']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[str][qm][1][style]">String Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][qm][1][style]" id="ld[str][qm][1][style]" value="<?=$ld['str']['qm'][1]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ <fieldset>
+ <legend>Quotemark Group 2</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[str][qm][1][delim]">String Delimiter:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][qm][2][delim]" id="ld[str][qm][2][delim]" value="<?=$ld['str']['qm'][2]['delim']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[str][qm][1][style]">String Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][qm][2][style]" id="ld[str][qm][2][style]" value="<?=$ld['str']['qm'][2]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+
+ </fieldset>
+
+ <fieldset>
+ <legend>Escape Sequences</legend>
+
+ <fieldset>
+ <legend>Generic Escape Char</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[str][ec][char]">Escape Char:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][ec][char]" id="ld[str][ec][char]" value="<?=$ld['str']['ec']['char']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[str][ec][style]">Escape Char Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][ec][style]" id="ld[str][ec][style]" value="<?=$ld['str']['ec']['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>Escape Regexp Group 1</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[str][erx][1][rx]">Escape Regexp:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][erx][1][rx]" id="ld[str][erx][1][rx]" value="<?=$ld['str']['erx'][1]['rx']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[str][erx][1][style]">Escape Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][erx][1][style]" id="ld[str][erx][1][style]" value="<?=$ld['str']['erx'][1]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>Escape Regexp Group 2</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[str][erx][2][rx]">Escape Regexp:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][erx][2][rx]" id="ld[str][erx][2][rx]" value="<?=$ld['str']['erx'][2]['rx']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[str][erx][2][style]">Escape Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[str][erx][2][style]" id="ld[str][erx][2][style]" value="<?=$ld['str']['erx'][2]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </fieldset>
+ </fieldset>
+
+ <fieldset>
+ <legend>Keywords</legend>
+
+ <fieldset>
+ <legend>Case of Keywords</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[kw_case]">Handling of keywords case:</label>
+ </td>
+ <td>
+ <select name=ld[kw_case]" id="ld[kw_case]">
+ <option value="GESHI_CAPS_NO_CHANGE"<?=$kw_case_sel['GESHI_CAPS_NO_CHANGE']; ?>>Don’t change the case of any keyword</option>
+ <option value="GESHI_CAPS_UPPER"<?=$kw_case_sel['GESHI_CAPS_UPPER']; ?>>Convert the case of all keywords to upper case</option>
+ <option value="GESHI_CAPS_LOWER"<?=$kw_case_sel['GESHI_CAPS_LOWER']; ?>>Convert the case of all keywords to lower case</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>Keyword Group 1</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[kw][1][list]">Keyword List:</label>
+ </td>
+ <td>
+ <textarea name="ld[kw][1][list]" id="ld[kw][1][list]" rows="10" cols="80"><?=$ld['kw'][1]['list']; ?></textarea>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[kw][1][case]">Case Sensitive:</label>
+ </td>
+ <td>
+ <select name="ld[kw][1][case]" id="ld[kw][1][case]">
+ <option value="0"<?=$kw_cases_sel[1][0]; ?>>No</option>
+ <option value="1"<?=$kw_cases_sel[1][1]; ?>>Yes</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[kw][1][style]">Keyword Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[kw][1][style]" id="ld[kw][1][style]" value="<?=$ld['kw'][1]['style']; ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[kw][1][docs]">Documentation URL:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[kw][1][docs]" id="ld[kw][1][docs]" value="<?=$ld['kw'][1]['docs']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ </fieldset>
+
+
+ <fieldset>
+ <legend>Symbols</legend>
+
+ <fieldset>
+ <legend>Symbols Group 1</legend>
+
+ <table width="100%">
+ <tr>
+ <td>
+ <label for="ld[sy][0][list]">Symbols List:</label>
+ </td>
+ <td>
+ <textarea name="ld[sy][0][list]" id="ld[sy][0][list]" rows="10" cols="80"><?=$ld['sy'][0]['list']; ?></textarea>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <label for="ld[sy][0][style]">Symbols Style:</label>
+ </td>
+ <td>
+ <input type="text" name="ld[sy][0][style]" id="ld[sy][0][style]" value="<?=$ld['sy'][0]['style']; ?>" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ </fieldset>
+
+
+ <div id="langfile">
+ <fieldset>
+ <legend>Language File Source</legend>
+<?php
+$G = new GeSHi('', 'php');
+$langfile_source = gen_langfile($lang);
+$G->set_source($langfile_source);
+echo $G->parse_code();
+unset($G);
+?>
+ </fieldset>
+ </div>
+
+ <input type="submit" name="btn" value="Send!" />
+</form>
+
+<p>Operation completed in <?php
+$time_end = explode(' ', microtime());
+$time_diff = $time_end[0] + $time_end[1] - $time_start[0] - $time_start[1];
+
+echo sprintf("%.2f", $time_diff);
+?> seconds.</p>
+
+<div id="footer">GeSHi &copy; 2004-2007 Nigel McNie, 2007-2009 Benny Baumann, released under the GNU GPL</div>
+</body>
+</html>
+<?php
+
+function str_to_phpstring($str, $doublequote = false){
+ if($doublequote) {
+ return '"' . strtr($str,
+ array(
+ "\"" => "\\\"",
+ "\\" => "\\\\",
+ "\0" => "\\0",
+ "\n" => "\\n",
+ "\r" => "\\r",
+ "\t" => "\\t",
+ "\$" => "\\\$"
+ )
+ ) . '"';
+ } else {
+ return "'" . strtr($str,
+ array(
+ "'" => "\\'",
+ "\\" => "\\\\"
+ )
+ ) . "'";
+ }
+}
+
+function validate_lang(){
+ $ai = array(
+ 'name' => 'Benny Baumann',
+ 'email' => 'BenBE@geshi.org',
+ 'web' => 'http://qbnz.com/highlighter/'
+ );
+
+ $li = array(
+ 'file' => 'example',
+ 'desc' => 'Example'
+ );
+
+ if(isset($_POST['ld'])) {
+ $ld = $_POST['ld'];
+ } else {
+ $ld = array(
+ 'cmt' => array(
+ 'sl' => array(
+ 1 => array(
+ 'start' => '//',
+ 'style' => 'test'
+ )
+ ),
+ 'ml' => array(
+ 1 => array(
+ 'start' => '/*',
+ 'end' => '*/',
+ 'style' => 'font-style: italic; color: #666666;'
+ )
+ ),
+ 'rxc' => array(
+ 1 => array(
+ 'rx' => '/Hello/',
+ 'style' => 'color: #00000'
+ )
+ )
+ ),
+ 'str' => array(
+ 'qm' => array(),
+ 'ec' => array(
+ 'char' => ''
+ ),
+ 'erx' => array()
+ ),
+ 'kw' => array(),
+ 'kw_case' => 'GESHI_CAPS_NO_CHANGE',
+ 'sy' => array()
+ );
+ }
+
+ return array('ai' => $ai, 'li' => $li, 'ld' => $ld);
+}
+
+function gen_langfile($lang){
+ $langfile = $lang['li']['file'];
+ $langdesc = $lang['li']['desc'];
+
+ $langauthor_name = $lang['ai']['name'];
+ $langauthor_email = $lang['ai']['email'];
+ $langauthor_web = $lang['ai']['web'];
+
+ $langversion = GESHI_VERSION;
+
+ $langdate = date('Y/m/d');
+ $langyear = date('Y');
+
+ $i = ' ';
+ $i = array('', $i, $i.$i, $i.$i.$i);
+
+ $src = <<<GESHI_LANGFILE_HEAD
+<?php
+/*************************************************************************************
+ * {$langfile}.php
+ * --------
+ * Author: {$langauthor_name} ({$langauthor_email})
+ * Copyright: (c) {$langyear} {$langauthor_name} ({$langauthor_web})
+ * Release Version: {$langversion}
+ * Date Started: {$langdate}
+ *
+ * {$langdesc} language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * {$langdate} ({$langversion})
+ * - First Release
+ *
+ * TODO (updated {$langdate})
+ * -------------------------
+ * * Complete language file
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+\$language_data = array(
+
+GESHI_LANGFILE_HEAD;
+
+ //Language Name
+ $src .= $i[1] . "'LANG_NAME' => ".str_to_phpstring($langdesc).",\n";
+
+ //Comments
+ $src .= $i[1] . "'COMMENT_SINGLE' => array(\n";
+ foreach($lang['ld']['cmt']['sl'] as $idx_cmt_sl => $tmp_cmt_sl) {
+ $src .= $i[2] . ((int)$idx_cmt_sl). " => ". str_to_phpstring($tmp_cmt_sl['start']) . ",\n";
+ }
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'COMMENT_MULTI' => array(\n";
+ foreach($lang['ld']['cmt']['ml'] as $tmp_cmt_ml) {
+ $src .= $i[2] . str_to_phpstring($tmp_cmt_ml['start']). " => ". str_to_phpstring($tmp_cmt_ml['end']) . ",\n";
+ }
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'COMMENT_REGEXP' => array(\n";
+ foreach($lang['ld']['cmt']['rxc'] as $idx_cmt_rxc => $tmp_cmt_rxc) {
+ $src .= $i[2] . ((int)$idx_cmt_rxc). " => ". str_to_phpstring($tmp_cmt_rxc['rx']) . ",\n";
+ }
+ $src .= $i[2] . "),\n";
+
+ //Case Keywords
+ $src .= $i[1] . "'CASE_KEYWORDS' => " . $lang['ld']['kw_case'] . ",\n";
+
+ //Quotes \ Strings
+ $src .= $i[1] . "'QUOTEMARKS' => array(\n";
+ foreach($lang['ld']['str']['qm'] as $idx_str_qm => $tmp_str_qm) {
+ $src .= $i[2] . ((int)$idx_str_qm). " => ". str_to_phpstring($tmp_str_qm['delim']) . ",\n";
+ }
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'ESCAPE_CHAR' => " . str_to_phpstring($lang['ld']['str']['ec']['char']) . ",\n";
+ $src .= $i[1] . "'ESCAPE_REGEXP' => array(\n";
+ foreach($lang['ld']['str']['erx'] as $idx_str_erx => $tmp_str_erx) {
+ $src .= $i[2] . ((int)$idx_str_erx). " => ". str_to_phpstring($tmp_str_erx['rx']) . ",\n";
+ }
+ $src .= $i[2] . "),\n";
+
+ //HardQuotes
+ $src .= $i[1] . "'HARDQUOTE' => array(\n";
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'HARDESCAPE' => array(\n";
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'HARDCHAR' => '',\n";
+
+ //Numbers
+ $src .= $i[1] . "'NUMBERS' =>\n";
+ $src .= $i[2] . "GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |\n";
+ $src .= $i[2] . "GESHI_NUMBER_FLT_SCI_ZERO,\n";
+
+ //Keywords
+ $src .= $i[1] . "'KEYWRODS' => array(\n";
+ foreach($lang['ld']['kw'] as $idx_kw => $tmp_kw) {
+ $src .= $i[2] . ((int)$idx_kw) . " => array(\n";
+ if(!is_array($tmp_kw['list'])) {
+ $tmp_kw['list'] = explode("\n", $tmp_kw['list']);
+ }
+ $tmp_kw['list'] = array_map('trim', $tmp_kw['list']);
+ sort($tmp_kw['list']);
+ $kw_esc = array_map('str_to_phpstring', $tmp_kw['list']);
+ $kw_nl = true;
+ $kw_pos = 0;
+ foreach($kw_esc as $kw_data) {
+ if((strlen($kw_data) + $kw_pos > 79) && $kw_pos > strlen($i[3])) {
+ $src .= "\n";
+ $kw_nl = true;
+ $kw_pos = 0;
+ }
+ if($kw_nl) {
+ $src .= $i[3];
+ $kw_pos += strlen($i[3]);
+ $kw_nl = false;
+ }
+ $src .= $kw_data . ', ';
+ $kw_pos += strlen($kw_data) + 2;
+ }
+ $src .= "\n";
+ $src .= $i[3] . "),\n";
+ }
+ $src .= $i[2] . "),\n";
+
+ //Case Sensitivity
+ $src .= $i[1] . "'CASE_SENSITIVE' => array(\n";
+ foreach($lang['ld']['kw'] as $idx_kw => $tmp_kw) {
+ $src .= $i[2] . ((int)$idx_kw) . " => " . ($tmp_kw['case'] ? 'true' : 'false') . ",\n";
+ }
+ $src .= $i[2] . "),\n";
+
+ //Symbols
+ $src .= $i[1] . "'SYMBOLS' => array(\n";
+ foreach($lang['ld']['sy'] as $idx_kw => $tmp_kw) {
+ $src .= $i[2] . ((int)$idx_kw) . " => array(\n";
+ $tmp_kw['list'] = (array)$tmp_kw['list'];
+ sort($tmp_kw['list']);
+ $kw_esc = array_map('str_to_phpstring', $tmp_kw['list']);
+ $kw_nl = true;
+ $kw_pos = strlen($i[3]);
+ foreach($kw_esc as $kw_data) {
+ if((strlen($kw_data) + $kw_pos > 79) && $kw_pos > strlen($i[3])) {
+ $src .= "\n";
+ $kw_nl = true;
+ $kw_pos = 0;
+ }
+ if($kw_nl) {
+ $src .= $i[3];
+ $kw_pos += strlen($i[3]);
+ $kw_nl = false;
+ }
+ $src .= $kw_data . ', ';
+ $kw_pos += strlen($kw_data) + 2;
+ }
+ $src .= "\n";
+ $src .= $i[3] . "),\n";
+ }
+ $src .= $i[2] . "),\n";
+
+ //Styles \ CSS
+ $src .= $i[1] . "'STYLES' => array(\n";
+ $src .= $i[2] . "'KEYWRODS' => array(\n";
+ foreach($lang['ld']['kw'] as $idx_kw => $tmp_kw) {
+ $src .= $i[3] . ((int)$idx_kw) . " => " . str_to_phpstring($tmp_kw['style']) . ",\n";
+ }
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "'COMMENTS' => array(\n";
+ foreach($lang['ld']['cmt']['sl'] as $idx_cmt_sl => $tmp_cmt_sl) {
+ $src .= $i[3] . ((int)$idx_cmt_sl) . " => " . str_to_phpstring($tmp_cmt_sl['style']) . ",\n";
+ }
+ foreach($lang['ld']['cmt']['rxc'] as $idx_cmt_rxc => $tmp_cmt_rxc) {
+ $src .= $i[3] . ((int)$idx_cmt_rxc) . " => " . str_to_phpstring($tmp_cmt_rxc['style']) . ",\n";
+ }
+ $src .= $i[3] . "'MULTI' => " . str_to_phpstring($lang['ld']['cmt']['ml'][1]['style']) . "\n";
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "'ESCAPE_CHAR' => array(\n";
+ foreach($lang['ld']['str']['erx'] as $idx_str_erx => $tmp_str_erx) {
+ $src .= $i[3] . ((int)$idx_str_erx). " => ". str_to_phpstring($tmp_str_erx['style']) . ",\n";
+ }
+ // 'HARD' => 'color: #000099; font-weight: bold;'
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "'BRACKETS' => array(\n";
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "'STRINGS' => array(\n";
+ foreach($lang['ld']['str']['qm'] as $idx_str_qm => $tmp_str_qm) {
+ $src .= $i[3] . ((int)$idx_str_qm). " => ". str_to_phpstring($tmp_str_qm['style']) . ",\n";
+ }
+ // 'HARD' => 'color: #0000ff;'
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "'NUMBERS' => array(\n";
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "'METHODS' => array(\n";
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "'SYMBOLS' => array(\n";
+ foreach($lang['ld']['sy'] as $idx_kw => $tmp_kw) {
+ $src .= $i[3] . ((int)$idx_kw) . " => " . str_to_phpstring($tmp_kw['style']) . ",\n";
+ }
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "'REGEXPS' => array(\n";
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "'SCRIPT' => array(\n";
+ $src .= $i[3] . "),\n";
+ $src .= $i[2] . "),\n";
+
+ //Keyword Documentation
+ $src .= $i[1] . "'URLS' => array(\n";
+ foreach($lang['ld']['kw'] as $idx_kw => $tmp_kw) {
+ $src .= $i[2] . ((int)$idx_kw) . " => " . str_to_phpstring($tmp_kw['docs']) . ",\n";
+ }
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'OOLANG' => false,\n";
+ $src .= $i[1] . "'OBJECT_SPLITTERS' => array(\n";
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'REGEXPS' => array(\n";
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'STRICT_MODE_APPLIES' => GESHI_MAYBE,\n";
+ $src .= $i[1] . "'SCRIPT_DELIMITERS' => array(\n";
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'HIGHLIGHT_STRICT_BLOCK' => array(\n";
+ $src .= $i[2] . "),\n";
+ $src .= $i[1] . "'TAB_WIDTH' => 4\n";
+
+ $src .= <<<GESHI_LANGFILE_FOOTER
+);
+GESHI_LANGFILE_FOOTER;
+
+ //Reduce source ...
+ $src = preg_replace('/array\(\s*\)/s', 'array()', $src);
+ $src = preg_replace('/\,(\s*\))/s', '\1', $src);
+ $src = preg_replace('/\s+$/m', '', $src);
+
+ return $src;
+}
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/CHANGES b/extensions/SyntaxHighlight_GeSHi/geshi/docs/CHANGES
index ee510fe0..942d09b2 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/CHANGES
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/CHANGES
@@ -1,7 +1,7 @@
CHANGES - Changelog for GeSHi (geshi.php only)
-Changes to the code are listed under the version they occured in, with who suggested
+Changes to the code are listed under the version they occurred in, with who suggested
it by each one (if there's nobody listed as suggesting it I dreamed it up :)). Users
who suggested an idea often also provided the code that was used as a basis for the
changes - thanks to all who suggested these ideas and gave me the code to show me how!
@@ -12,6 +12,59 @@ modified by me for consistency/bug fixing.
Please send any bug reports to BenBE@omorphia.de, or use the bug report tracker
at sourceforge (http://sourceforge.net/tracker/?group_id=114997&atid=670231)
+Version 1.0.8.12
+ - Added language files
+ * AIMMS (Guido Diepen)
+ * C with WinAPI (BenBE)
+ * C++ with WinAPI (BenBE)
+ * Chapel (Richard Molitor)
+ * Dart (Edward Hart)
+ * EZT (Ramesh Vishveshwar)
+ * ISPF Panel (Ramesh Vishveshwar)
+ * Job Control Language (Ramesh Vishveshwar)
+ * nginx (Cliff Wells, Deoren Moor, Thomas Joiner)
+ * Nimrod (Dennis Felsing)
+ * PostScript (BenBE)
+ * QML (J-P Nurmi)
+ * Racket (Tim Brown)
+ * RBScript (Deng Wen Gang)
+ * Rust (Dave Hodder)
+ * SCL (Leonhard Hösch)
+ * StandardML (eldesh)
+ * VBScript (Rory Prendergast)
+ - Allow for global setup of all keyword and comments style at once using '*' (BenBE)
+ - Non-persistent XSS in example contrib script (BenBE, present in intermediate dev versions)
+ - Fix short tag usage to allow for configurations where short tags are disabled (BenBE)
+ - Updated COPYING to use updated version of GPL 2.0 (BenBE)
+ - Improvements to language files (BenBE)
+ * Updated Documentation Link for LaTeX (Johannes Ähling)
+ * Fix some highlighting problems with Octave (Carnë Draug, Juan Pablo Carbajal)
+ * Fix a minor issue with comments in Visual Basic (Plançon, BenBE)
+ * Some LangCheck issues with Visual Basic (BenBE)
+ * Fix a minor issue with keywords in SQL (Gerrit, BenBE)
+ * Force comments in INI files to be their own line (BenBE)
+ * Fix problem with T-SQL keyword highlighting (James Horsley, BenBE)
+ * Some more keywords for Bash (BenBE)
+ * Updated LSL2 language file (BenBE, Sei Lisa)
+ * Fixed langcheck errors in Lua langfile (BenBE)
+ * Fixed double quotes in Tcl (BenBE, stecue)
+ * Updated PARI/GP language file (Charles R Greathouse IV, BenBE)
+ * Updated Cobol language file (Edward Hart, BenBE)
+ * Updated Verilog language file (Tony Carrillo, BenBE)
+ * Updated Lisp language file (Edward Hart, BenBE)
+ * Updated list of Debian and Ubuntu releases (BenBE)
+ * Implemented C++11 string literal support (BenBE)
+ * Updated list of commands on Bash language file (BenBE)
+ * Updated PHP language file (Levi Morrisson)
+ * Updated Haskell language file (duplode)
+ * Updated NSIS language file (Jan T. Scott, BenBE)
+ * Add raw string support for Rust (mbrown1413)
+ * Fix LangCheck issues with LOLcode language file (mudhailess, BenBE)
+ * Updated LSL2 language file (Sei Lisa, BenBE)
+ * Updated Oxygene language file (Carlo Kok, BenBE)
+ * Fixed TCL comment processing (Sei Lisa)
+ * Fixed C++ (Qt) documentation links (Sei Lisa)
+ * Updated CSS language file to include CSS3 keywords (Zéfling, BenBE))
Version 1.0.8.11
- Added language files
* ARM (Marat Dukhan)
@@ -731,7 +784,7 @@ Version 1.0.7.6
- Used hardquote support for ' strings in perl (Cliff Stanford)
- Fixed setting of language path (Cliff Stanford)
- Display source correctly formatted with line numbers (if requested) if an error
- has occured (several people)
+ has occurred (several people)
- Having no source to highlight is not an error condition anymore
- Delphi language updated to include more keywords and types (BenBE)
- Updated NSIS to version 2.11 (deguix)
@@ -920,4 +973,4 @@ Version 1.0.1
* NSIS (Tux)
* Pascal (Tux)
Version 1.0.0
- - Initial Release \ No newline at end of file
+ - Initial Release
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/COPYING b/extensions/SyntaxHighlight_GeSHi/geshi/docs/COPYING
index 5b6e7c66..d159169d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/COPYING
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/COPYING
@@ -1,12 +1,12 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
- Preamble
+ Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
+the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
-
- GNU GENERAL PUBLIC LICENSE
+
+ GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
-
+
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
-
+
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
-
+
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
- NO WARRANTY
+ NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -303,10 +303,9 @@ the "copyright" line and a pointer to where the full notice is found.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
+ 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.
Also add information on how to contact you by electronic and paper mail.
@@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
+library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/THANKS b/extensions/SyntaxHighlight_GeSHi/geshi/docs/THANKS
index be3325e9..258d4a50 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/THANKS
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/THANKS
@@ -50,6 +50,7 @@ PEOPE WHO MADE LANGUAGE FILES
- Actionscript Steffen Krause (french translation by NikO)
- ActionScript 3 Jordi Boggiano (version for ActionScript3 and MXML)
- Ada Tux
+- AIMMS Guido Diepen
- Algol68 Neville Dempsey
- Apache Tux
- Applescript Stephan Klimek
@@ -73,21 +74,26 @@ PEOPE WHO MADE LANGUAGE FILES
- Brainfuck \ Brainfork Benny Baumann
- C for Loadrunner Stuart Moncrieff
- C for Macs M. Uli Kusterer
+- C for Windows Benny Baumann
- C# Alan Juden
- C++ Dennis Bayer, M. Uli Kusterer
-- C++/Qt Iulian M
+- C++ (Qt) Iulian M
+- C++ for Windows Benny Baumann
- CADDCL Roberto Rossi
- CadLisp Roberto Rossi
- CDFG John Horigan
- ChaiScript Jason Turner, Jonathan Turner
+- Chapel Richard Molitor
- CIL Marcus Griep
- Clojure Jess Johnson
- CMake Daniel Nelson
-- COBOL Benny Baumann
+- COBOL Benny Baumann, Edward Hart
- CoffeeScript Trevor Burnham
- ColdFusion Diego
+- CSS Nigel McNie, Zéfling
- Cuesheet Benny Baumann
- D Thomas Kuehne
+- Dart Edward Hart
- DCL Petr Hendl
- DCPU-16 Benny Baumann
- DCS Stelio Passaris
@@ -101,6 +107,7 @@ PEOPE WHO MADE LANGUAGE FILES
- EPC Thorsten Muehlfelder
- Erlang Benny Baumann, Dan Forest-Barbier, Uwe Dauernheim
- Euphoria Nicholas Koceja
+- EZT Ramesh Vishveshwar
- F# Julien Ortin
- Falcon billykater
- FO (abas-ERP) Tan-Vinh Nguyen
@@ -113,7 +120,7 @@ PEOPE WHO MADE LANGUAGE FILES
- Genie Nicolas Joseph
- Gettext Milian Wolff
- glSlang Benny Baumann
-- GML José Jorge Enríquez Rodríguez
+- GML José Jorge Enríquez Rodríguez, Timon Knigge
- GNU make Neil Bird
- Gnuplot Milian Wolff
- Go Markus Jarderot
@@ -128,9 +135,11 @@ PEOPE WHO MADE LANGUAGE FILES
- Ini Deguix
- Inno Thomas Klinger
- INTERCAL Benny Baumann
+- ISPF Panel Ramesh Vishveshwar
- J Ric Sherlock
- Java 5 Clemens Bruckmann
- Javascript Ben Keen
+- Job Control Language Ramesh Vishveshwar
- jQuery Rob Loach
- KiXtart Riley McArdle
- KLone C Mickael Auger
@@ -159,6 +168,8 @@ PEOPE WHO MADE LANGUAGE FILES
- MySQL Carl Fürstenberg, Marjolein Katsma
- Nagios Albéric de Pertat
- NewLisp cormullion
+- nginx Cliff Wells, Deoren Moor, Thomas Joiner
+- Nimrod Dennis Felsing
- NSIS Tux, Deguix
- Oberon-2 Mike Mol
- Objeck Progr. Lang. Randy Hollines
@@ -184,6 +195,7 @@ PEOPE WHO MADE LANGUAGE FILES
- PL/I Robert Prins
- PL/SQL Victor Engmark
- PostgreSQL Christophe Chauvet
+- PostScript Benny Baumann
- POV-Ray Carl Fürstenberg
- PowerBuilder Doug Porter
- PowerShell Frode Aarebrot
@@ -197,22 +209,28 @@ PEOPE WHO MADE LANGUAGE FILES
- Python for S60 Sohan Basak
- PyCon Benny Baumann
- q/kdb+ Ian Roddis
+- QML J-P Nurmi
- R / S+ Ron Fredericks, Fernando H.F.P. da Rosa
+- Racket Tim Brown
- Rails Moises Deniz
+- RBScript Deng Wen Gang
- Rebol Lecanu Guillaume
- Reg SmokingRope
- Rexx Jon Wolfers
- Robots Christian Lescuyer
- RPM Specification File Paul Grinberg
- Ruby Amit Gupta, Moises Deniz
+- Rust Dave Hodder
- SAS Galen Johnson
- Scheme Jon Raphaelson
- SciLab Christophe David
+- SCL Leonhard Hösch
- SDLBasic Roberto Rossi
- Smalltalk Bananeweizen
- Smarty Alan Juden
- SPARK Phil Thornley
- SPARQL Karima Rafes
+- StandardML eldesh
- StoneScript Archimmersion
- SystemVerilog Sean O'Boyle
- TCL Reid van Melle
@@ -229,8 +247,9 @@ PEOPE WHO MADE LANGUAGE FILES
- Vala Nicolas Joseph
- VB Roberto Rossi
- VB.NET Alan Juden
+- VBScript Rory Prendergast
- Vedit Pauli Lindgren
-- Verilog Günter Dannoritzer
+- Verilog Günter Dannoritzer, Tony Carrillo
- VHDL Alexander 'E-Razor' Krause, Kevin Thibedeau
- VIM Script Swaroop C H
- Visual FoxPro Roberto Armellin
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/TODO b/extensions/SyntaxHighlight_GeSHi/geshi/docs/TODO
index d849261c..5fe7afc7 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/TODO
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/TODO
@@ -68,4 +68,4 @@ http://sourceforge.net/tracker/?group_id=114997&atid=670234
and that script would redirect to the correct location.
[BETTER FIX IN 1.2]
- $Id: TODO 1725 2008-08-08 11:56:36Z benbe $
+ $Id$
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/__filesource/fsource_geshi_core_geshi.php.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/__filesource/fsource_geshi_core_geshi.php.html
index 3d799821..a8ff361c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/__filesource/fsource_geshi_core_geshi.php.html
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/__filesource/fsource_geshi_core_geshi.php.html
@@ -615,7 +615,7 @@
<li><div class="src-line"><a name="a600"></a>&nbsp;</div></li>
<li><div class="src-line"><a name="a601"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
<li><div class="src-line"><a name="a602"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Returns&nbsp;an&nbsp;error&nbsp;message&nbsp;associated&nbsp;with&nbsp;the&nbsp;last&nbsp;GeSHi&nbsp;operation,</span></div></li>
-<li><div class="src-line"><a name="a603"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;or&nbsp;false&nbsp;if&nbsp;no&nbsp;error&nbsp;has&nbsp;occured</span></div></li>
+<li><div class="src-line"><a name="a603"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;or&nbsp;false&nbsp;if&nbsp;no&nbsp;error&nbsp;has&nbsp;occurred</span></div></li>
<li><div class="src-line"><a name="a604"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*</span></div></li>
<li><div class="src-line"><a name="a605"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span class="src-doc-coretag">@return&nbsp;</span><span class="src-doc-type">string</span><span class="src-doc">|</span><span class="src-doc-type">false</span><span class="src-doc">An&nbsp;error&nbsp;message&nbsp;if&nbsp;there&nbsp;has&nbsp;been&nbsp;an&nbsp;error,&nbsp;else&nbsp;false</span></div></li>
<li><div class="src-line"><a name="a606"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span class="src-doc-coretag">@since</span><span class="src-doc">&nbsp;&nbsp;1.0.0</span></div></li>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex.html
index 970ebd19..f808e36b 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex.html
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex.html
@@ -153,7 +153,7 @@
</dt>
<dd class="index-item-body">
<div class="index-item-details"><a href="geshi/core/GeSHi.html#methoderror">GeSHi::error()</a> in geshi.php</div>
- <div class="index-item-description">Returns an error message associated with the last GeSHi operation, or false if no error has occured</div>
+ <div class="index-item-description">Returns an error message associated with the last GeSHi operation, or false if no error has occurred</div>
</dd>
</dl>
<a name="g"></a>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex_geshi.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex_geshi.html
index f3193965..c3403081 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex_geshi.html
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/elementindex_geshi.html
@@ -150,7 +150,7 @@
</dt>
<dd class="index-item-body">
<div class="index-item-details"><a href="geshi/core/GeSHi.html#methoderror">GeSHi::error()</a> in geshi.php</div>
- <div class="index-item-description">Returns an error message associated with the last GeSHi operation, or false if no error has occured</div>
+ <div class="index-item-description">Returns an error message associated with the last GeSHi operation, or false if no error has occurred</div>
</dd>
</dl>
<a name="g"></a>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/GeSHi.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/GeSHi.html
index a8ccc7d0..e80e3a1e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/GeSHi.html
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/GeSHi.html
@@ -27,8 +27,8 @@
<p class="short-description">The GeSHi Class.</p>
<p class="description"><p>Please refer to the documentation for GeSHi 1.0.X that is available at http://qbnz.com/highlighter/documentation.php for more information about how to use this class.</p></p>
<ul class="tags">
- <li><span class="field">author:</span> Nigel McNie &lt;<a href="mailto:nigel@geshi.org">nigel@geshi.org</a>&gt;, Benny Baumann &lt;BenBE@omorphia.de&gt;</li>
- <li><span class="field">copyright:</span> (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann</li>
+ <li><span class="field">author:</span> Nigel McNie &lt;<a href="mailto:nigel@geshi.org">nigel@geshi.org</a>&gt;, Benny Baumann &lt;BenBE@geshi.org&gt;</li>
+ <li><span class="field">copyright:</span> (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2014 Benny Baumann</li>
</ul>
<p class="notes">
Located in <a class="field" href="_geshi.php.html">/geshi.php</a> (line <span class="field"><a href="../../__filesource/fsource_geshi_core_geshi.php.html#a253">253</a></span>)
@@ -905,7 +905,7 @@
</div>
<!-- ========== Info from phpDoc block ========= -->
-<p class="short-description">Returns an error message associated with the last GeSHi operation, or false if no error has occured</p>
+<p class="short-description">Returns an error message associated with the last GeSHi operation, or false if no error has occurred</p>
<ul class="tags">
<li><span class="field">return:</span> An error message if there has been an error, else false</li>
<li><span class="field">since:</span> 1.0.0</li>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/_geshi.php.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/_geshi.php.html
index 798f68f2..03527b1a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/_geshi.php.html
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/api/geshi/core/_geshi.php.html
@@ -25,8 +25,8 @@
<p class="short-description">GeSHi - Generic Syntax Highlighter</p>
<p class="description"><p>The GeSHi class for Generic Syntax Highlighting. Please refer to the documentation at http://qbnz.com/highlighter/documentation.php for more information about how to use this class.</p><p>For changes, release notes, TODOs etc, see the relevant files in the docs/ directory.</p><p>This file is part of GeSHi.</p><p>GeSHi 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.</p><p>GeSHi 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.</p><p>You should have received a copy of the GNU General Public License along with GeSHi; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p></p>
<ul class="tags">
- <li><span class="field">author:</span> Nigel McNie &lt;<a href="mailto:nigel@geshi.org">nigel@geshi.org</a>&gt;, Benny Baumann &lt;BenBE@omorphia.de&gt;</li>
- <li><span class="field">copyright:</span> (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann</li>
+ <li><span class="field">author:</span> Nigel McNie &lt;<a href="mailto:nigel@geshi.org">nigel@geshi.org</a>&gt;, Benny Baumann &lt;BenBE@geshi.org&gt;</li>
+ <li><span class="field">copyright:</span> (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2014 Benny Baumann</li>
<li><span class="field">filesource:</span> <a href="../../__filesource/fsource_geshi_core_geshi.php.html">Source Code for this file</a></li>
<li><span class="field">license:</span> <a href="http://gnu.org/copyleft/gpl.html">GNU GPL</a></li>
</ul>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.html b/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.html
index dc5161f4..693617b7 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.html
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.html
@@ -2,7 +2,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
- <title>GeSHi Documentation 1.0.8.11</title>
+ <title>GeSHi Documentation 1.0.8.12</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="keywords" content="GeSHi, syntax, highlighter, colorizer, beautifier, code, generic, php, sql, css, html, syntax, highlighting, documentation" />
@@ -390,7 +390,7 @@
<div class="header">
-<p>Version 1.0.8.11</p>
+<p>Version 1.0.8.12</p>
<p><img src="http://qbnz.com/highlighter/images/geshi.png" alt="The GeSHi Logo" /></p>
@@ -570,7 +570,7 @@ for phpBB<sup id="fnref:phpbb-note"><a href="#fn:phpbb-note" rel="footnote">3</a
<p>Several systems are using <abbr title="Generic Syntax Highlighter">GeSHi</abbr> now, including:</p>
<ul>
-<li><a href="http://www.splitbrain.org/docuwiki/">Dokuwiki</a> - An advanced wiki engine</li>
+<li><a href="https://www.dokuwiki.org/dokuwiki">Dokuwiki</a> - An advanced wiki engine</li>
<li><a href="http://gtk.php.net/">gtk.php.net</a> - Their manual uses <abbr title="Generic Syntax Highlighter">GeSHi</abbr> for syntax highlighting</li>
<li><a href="http://www.wordpress.org/">WordPress</a> - A powerful blogging system<sup id="fnref:plugin-only"><a href="#fn:plugin-only" rel="footnote">4</a></sup></li>
<li><a href="http://www.php-fusion.co.uk/"><abbr title="PHP: HTML Preprocessor">PHP</abbr>-Fusion</a> - A constantly evolving CMS</li>
@@ -2639,7 +2639,7 @@ yourself. And I promise it&#8217;s not too hard - and if you&#8217;re here you&#
</pre></td><td class="de1"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="xtra li2"><span class="de2"><span class="coMULTI">/*************************************************************************************</span></span></span><span class="coMULTI">&nbsp;* php.php</span>
<span class="xtra li2"><span class="de2"><span class="coMULTI">&nbsp;* --------</span></span></span><span class="coMULTI">&nbsp;* Author: Nigel McNie (nigel@geshi.org)</span>
-<span class="xtra li2"><span class="de2"><span class="coMULTI">&nbsp;* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)</span></span></span><span class="coMULTI">&nbsp;* Release Version: 1.0.8.10</span>
+<span class="xtra li2"><span class="de2"><span class="coMULTI">&nbsp;* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)</span></span></span><span class="coMULTI">&nbsp;* Release Version: 1.0.8.12</span>
<span class="xtra li2"><span class="de2"><span class="coMULTI">&nbsp;* Date Started: 2004/06/20</span></span></span><span class="coMULTI">&nbsp;*</span>
<span class="xtra li2"><span class="de2"><span class="coMULTI">&nbsp;* PHP language file for GeSHi.</span></span></span><span class="coMULTI">&nbsp;*</span>
<span class="xtra li2"><span class="de2"><span class="coMULTI">&nbsp;* CHANGES</span></span></span><span class="coMULTI">&nbsp;* -------</span>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt b/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt
index e0f38ff6..a40c7552 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/docs/geshi-doc.txt
@@ -5,7 +5,7 @@ GeSHi Documentation
Version 1.0.7.22
Author: Nigel McNie, Benny Baumann
-Copyright: © 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
+Copyright: © 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann
Email: nigel@geshi.org, BenBE@omorphia.de
GeSHi Website: http://qbnz.com/highlighter
@@ -994,9 +994,9 @@ Let's begin by looking at an example language file - the language file for the f
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
* Release Version: 1.0.2
- * CVS Revision Version: $Revision: 1195 $
+ * CVS Revision Version: $Revision$
* Date Started: 2004/06/20
- * Last Modified: $Date: 2008-06-08 19:44:08 +0200 (So, 08. Jun 2008) $
+ * Last Modified: $Date$
*
* PHP language file for GeSHi.
*
@@ -1356,9 +1356,9 @@ The header of a language file is the first lines with the big comment and the st
* Author: <name> (<e-mail address>)
* Copyright: (c) 2004 <name> (<website URL>)
* Release Version: 1.0.0
- * CVS Revision Version: $Revision: 1195 $
+ * CVS Revision Version: $Revision$
* Date Started: <date started>
- * Last Modified: $Date: 2008-06-08 19:44:08 +0200 (So, 08. Jun 2008) $
+ * Last Modified: $Date$
*
* <name-of-language> language file for GeSHi.
*
@@ -1408,7 +1408,7 @@ Here are the parts you should change:
* <any-comments> - Any comments you have to make about this language file, perhaps on where you got the keywords for, what dialect of the language this language file is for etc etc. If you don't have any comments, remove the space for them.
* <date-of-release - The date you released the language file to the public. If you simply send it to me for inclusion in a new GeSHi and don't release it, leave this blank, and I'll replace it with the date of the GeSHi release that it is first added to.
-Everything should remain the same, including $Revision: 1195 $ and $Date: 2008-06-08 19:44:08 +0200 (So, 08. Jun 2008) $ (I know these may look funny but they have their purpose for those of you who don't know about SVN).
+Everything should remain the same, including $Revision$ and $Date$ (I know these may look funny but they have their purpose for those of you who don't know about SVN).
Also: I'm not sure about the copyright on a new language file. I'm not a lawyer, could someone contact me about whether the copyright for a new language file should be exclusivly the authors, or joint with me (if included in a GeSHi release)?
4.3.2: The First Indices
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php
index 4323d05c..6ade501e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php
@@ -28,7 +28,7 @@
* @package geshi
* @subpackage core
* @author Nigel McNie <nigel@geshi.org>, Benny Baumann <BenBE@omorphia.de>
- * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann
+ * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2014 Benny Baumann
* @license http://gnu.org/copyleft/gpl.html GNU GPL
*
*/
@@ -41,7 +41,7 @@
//
/** The version of this GeSHi file */
-define('GESHI_VERSION', '1.0.8.11-wmf1'); // WMF fix for Haskell (bug 52509)
+define('GESHI_VERSION', '1.0.8.12-wmf1'); // WMF fix for Haskell (bug 52509)
// Define the root directory for the GeSHi code tree
if (!defined('GESHI_ROOT')) {
@@ -254,7 +254,7 @@ define('GESHI_ERROR_INVALID_LINE_NUMBER_TYPE', 5);
*
* @package geshi
* @author Nigel McNie <nigel@geshi.org>, Benny Baumann <BenBE@omorphia.de>
- * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann
+ * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2014 Benny Baumann
*/
class GeSHi {
/**#@+
@@ -617,7 +617,7 @@ class GeSHi {
/**
* Returns an error message associated with the last GeSHi operation,
- * or false if no error has occured
+ * or false if no error has occurred
*
* @return string|false An error message if there has been an error, else false
* @since 1.0.0
@@ -1019,10 +1019,20 @@ class GeSHi {
*/
function set_keyword_group_style($key, $style, $preserve_defaults = false) {
//Set the style for this keyword group
- if (!$preserve_defaults) {
- $this->language_data['STYLES']['KEYWORDS'][$key] = $style;
+ if('*' == $key) {
+ foreach($this->language_data['STYLES']['KEYWORDS'] as $_key => $_value) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['KEYWORDS'][$_key] = $style;
+ } else {
+ $this->language_data['STYLES']['KEYWORDS'][$_key] .= $style;
+ }
+ }
} else {
- $this->language_data['STYLES']['KEYWORDS'][$key] .= $style;
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['KEYWORDS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['KEYWORDS'][$key] .= $style;
+ }
}
//Update the lexic permissions
@@ -1054,10 +1064,20 @@ class GeSHi {
* @since 1.0.0
*/
function set_comments_style($key, $style, $preserve_defaults = false) {
- if (!$preserve_defaults) {
- $this->language_data['STYLES']['COMMENTS'][$key] = $style;
+ if('*' == $key) {
+ foreach($this->language_data['STYLES']['COMMENTS'] as $_key => $_value) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['COMMENTS'][$_key] = $style;
+ } else {
+ $this->language_data['STYLES']['COMMENTS'][$_key] .= $style;
+ }
+ }
} else {
- $this->language_data['STYLES']['COMMENTS'][$key] .= $style;
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['COMMENTS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['COMMENTS'][$key] .= $style;
+ }
}
}
@@ -1445,9 +1465,8 @@ class GeSHi {
* @since 1.0.5
* @todo Re-think about how this method works (maybe make it private and/or make it
* a extension->lang lookup?)
- * @todo static?
*/
- function get_language_name_from_extension( $extension, $lookup = array() ) {
+ static function get_language_name_from_extension( $extension, $lookup = array() ) {
$extension = strtolower($extension);
if ( !is_array($lookup) || empty($lookup)) {
@@ -1557,7 +1576,7 @@ class GeSHi {
function load_from_file($file_name, $lookup = array()) {
if (is_readable($file_name)) {
$this->set_source(file_get_contents($file_name));
- $this->set_language($this->get_language_name_from_extension(substr(strrchr($file_name, '.'), 1), $lookup));
+ $this->set_language(self::get_language_name_from_extension(substr(strrchr($file_name, '.'), 1), $lookup));
} else {
$this->error = GESHI_ERROR_FILE_NOT_READABLE;
}
@@ -3573,7 +3592,6 @@ class GeSHi {
$symbol_length = strlen($symbol_match);
$symbol_offset = $pot_symbols[$s_id][0][1];
unset($pot_symbols[$s_id]);
- $symbol_end = $symbol_length + $symbol_offset;
$symbol_hl = "";
// if we have multiple styles, we have to handle them properly
@@ -3875,9 +3893,6 @@ class GeSHi {
// the <pre> will line-break them (and the <li>s already do this for us)
$ls = ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID) ? "\n" : '';
- // Set vars to defaults for following loop
- $i = 0;
-
// Foreach line...
for ($i = 0, $n = count($code); $i < $n;) {
//Reset the attributes for a new line ...
@@ -4386,13 +4401,13 @@ class GeSHi {
" * --------------------------------------\n".
" * Dynamically generated stylesheet for {$this->language}\n".
" * CSS class: {$this->overall_class}, CSS id: {$this->overall_id}\n".
- " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n" .
+ " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann\n" .
" * (http://qbnz.com/highlighter/ and http://geshi.org/)\n".
" * --------------------------------------\n".
" */\n";
} else {
$stylesheet = "/**\n".
- " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n" .
+ " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2014 Benny Baumann\n" .
" * (http://qbnz.com/highlighter/ and http://geshi.org/)\n".
" */\n";
}
@@ -4771,5 +4786,3 @@ if (!function_exists('geshi_highlight')) {
return true;
}
}
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/4cs.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/4cs.php
index 5209c51e..8fdf9317 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/4cs.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/4cs.php
@@ -4,7 +4,7 @@
* ------
* Author: Jason Curl (jason.curl@continental-corporation.com)
* Copyright: (c) 2009 Jason Curl
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/09/05
*
* 4CS language file for GeSHi.
@@ -135,5 +135,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php
index 203e04df..6b37a279 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502acme.php
@@ -4,7 +4,7 @@
* -------
* Author: Warren Willmey
* Copyright: (c) 2010 Warren Willmey.
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/05/26
*
* MOS 6502 (more specifically 6510) ACME Cross Assembler 0.93 by Marco Baye language file for GeSHi.
@@ -226,5 +226,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502kickass.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502kickass.php
index 80428262..205cdd1d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502kickass.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502kickass.php
@@ -4,7 +4,7 @@
* -------
* Author: Warren Willmey
* Copyright: (c) 2010 Warren Willmey.
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/06/07
*
* MOS 6502 (6510) Kick Assembler 3.13 language file for GeSHi.
@@ -237,5 +237,3 @@ $language_data = array (
)
),
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php
index 86aa479d..4efe25e3 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/6502tasm.php
@@ -4,7 +4,7 @@
* -------
* Author: Warren Willmey
* Copyright: (c) 2010 Warren Willmey.
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/06/02
*
* MOS 6502 (6510) TASM/64TASS (64TASS being the super set of TASM) language file for GeSHi.
@@ -185,5 +185,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/68000devpac.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/68000devpac.php
index f46387ae..90aea4c6 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/68000devpac.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/68000devpac.php
@@ -4,7 +4,7 @@
* -------
* Author: Warren Willmey
* Copyright: (c) 2010 Warren Willmey.
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/06/09
*
* Motorola 68000 - HiSoft Devpac ST 2 Assembler language file for GeSHi.
@@ -164,5 +164,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/abap.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/abap.php
index 5acd261c..faa5efc1 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/abap.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/abap.php
@@ -7,7 +7,7 @@
* - Sandra Rossi (sandra.rossi@gmail.com)
* - Jacob Laursen (jlu@kmd.dk)
* Copyright: (c) 2007 Andres Picazo
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* ABAP language file for GeSHi.
@@ -1405,5 +1405,3 @@ $language_data = array(
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript.php
index 08e5b49a..e8521f24 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript.php
@@ -4,7 +4,7 @@
* ----------------
* Author: Steffen Krause (Steffen.krause@muse.de)
* Copyright: (c) 2004 Steffen Krause, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/20
*
* Actionscript language file for GeSHi.
@@ -193,5 +193,3 @@ $language_data = array (
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript3.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript3.php
index 189d714b..f8425f1f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript3.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/actionscript3.php
@@ -4,7 +4,7 @@
* ----------------
* Author: Jordi Boggiano (j.boggiano@seld.be)
* Copyright: (c) 2007 Jordi Boggiano (http://www.seld.be/), Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/11/26
*
* ActionScript3 language file for GeSHi.
@@ -469,5 +469,3 @@ $language_data = array (
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ada.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ada.php
index c4ef2c39..3e48fd13 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ada.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ada.php
@@ -4,7 +4,7 @@
* -------
* Author: Tux (tux@inmail.cz)
* Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/29
*
* Ada language file for GeSHi.
@@ -94,9 +94,6 @@ $language_data = array (
'ESCAPE_CHAR' => array(
0 => 'color: #000099; font-weight: bold;'
),
- 'BRACKETS' => array(
- 0 => 'color: #66cc66;'
- ),
'STRINGS' => array(
0 => 'color: #7f007f;'
),
@@ -131,5 +128,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/aimms.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/aimms.php
new file mode 100644
index 00000000..f46bdd0b
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/aimms.php
@@ -0,0 +1,316 @@
+<?php
+/*************************************************************************************
+ * aimms.php
+ * --------
+ * Author: Guido Diepen (guido.diepen@aimms.com)
+ * Copyright: (c) 2011 Guido Diepen (http://www.aimms.com)
+ * Release Version: 1.0.8.12
+ * Date Started: 2011/05/05
+ *
+ * AIMMS language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * * Make sure the last few function I may have missed
+ * (like eval()) are included for highlighting
+ * * Split to several files - php4, php5 etc
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'AIMMS3',
+ 'COMMENT_SINGLE' => array(1 => '!'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("'", "\\"),
+ 'HARDCHAR' => "\\",
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'then', 'else', 'endif', 'elseif', 'for', 'do', 'while' , 'endfor' , 'endwhile', 'break', 'switch', 'endswitch',
+ 'display', 'return', 'in', 'apply'
+
+ ),
+ 2 => array(
+ 'main model' , 'declaration section', 'procedure', 'endprocedure', 'endmodel', 'endsection' , 'set', 'parameter',
+ 'string parameter', 'element parameter', 'quantity'
+ ),
+ 3 => array(
+ 'identifier', 'index', 'index domain', 'body'
+ ),
+ 4 => array(
+ 'ActiveCard','Card','ConvertUnit','DistributionCumulative','DistributionDensity','DistributionDeviation',
+ 'DistributionInverseCumulative','DistributionInverseDensity','DistributionKurtosis','DistributionMean',
+ 'DistributionSkewness','DistributionVariance','Element','EvaluateUnit','First','FormatString','Last',
+ 'Ord','Unit','Val','Aggregate','AttributeToString','CaseCompareIdentifier','CaseCreateDifferenceFile',
+ 'CloseDataSource','CreateTimeTable','ConstraintVariables','ConvertReferenceDate','CloneElement',
+ 'FindNthString','FindReplaceNthString','FindReplaceStrings','FindString','StringOccurrences',
+ 'CurrentToMoment','CurrentToString','CurrentToTimeSlot','DaylightsavingEndDate','DaylightsavingStartDate',
+ 'DeclaredSubset','DomainIndex','IndexRange','IsRunningAsViewer','ListingFileCopy','ListingFileDelete',
+ 'DirectoryGetFiles','DirectoryGetSubdirectories','DirectSQL','Disaggregate','ElementCast','ElementRange',
+ 'EnvironmentGetString','EnvironmentSetString','errh::Adapt','errh::Attribute','errh::Category',
+ 'errh::Code','errh::Column','errh::CreationTime','errh::Filename','errh::InsideCategory',
+ 'errh::IsMarkedAsHandled','errh::Line','errh::MarkAsHandled','errh::Message','errh::Multiplicity',
+ 'errh::Node','errh::NumberOfLocations','errh::Severity','ExcelAddNewSheet','ExcelAssignParameter',
+ 'ExcelAssignSet','ExcelAssignTable','ExcelAssignValue','ExcelClearRange','ExcelCloseWorkbook',
+ 'ExcelColumnName','ExcelColumnNumber','ExcelCopyRange','ExcelCreateWorkbook','ExcelDeleteSheet',
+ 'ExcelPrint','ExcelRetrieveParameter','ExcelRetrieveSet','ExcelRetrieveTable','ExcelRetrieveValue',
+ 'ExcelRunMacro','ExcelSaveWorkbook','ExcelSetActiveSheet','ExcelSetUpdateLinksBehavior',
+ 'ExcelSetVisibility','FindUsedElements','GenerateCUT','GMP::Coefficient::Get',
+ 'GMP::Coefficient::GetQuadratic','GMP::Coefficient::Set','GMP::Coefficient::SetQuadratic',
+ 'GMP::Column::Add','GMP::Column::Delete','GMP::Column::Freeze','GMP::Column::GetLowerbound',
+ 'GMP::Column::GetScale','GMP::Column::GetStatus','GMP::Column::GetType','GMP::Column::GetUpperbound',
+ 'GMP::Column::SetAsObjective','GMP::Column::SetLowerbound','GMP::Column::SetType',
+ 'GMP::Column::SetUpperbound','GMP::Column::Unfreeze','GMP::Instance::AddIntegerEliminationRows',
+ 'GMP::Instance::CalculateSubGradient','GMP::Instance::Copy','GMP::Instance::CreateDual',
+ 'GMP::Instance::CreateMasterMip','GMP::Instance::CreatePresolved',
+ 'GMP::SolverSession::CreateProgressCategory','GMP::Instance::CreateProgressCategory',
+ 'GMP::Instance::CreateSolverSession','GMP::Stochastic::CreateBendersRootproblem',
+ 'GMP::Instance::Delete','GMP::Instance::DeleteIntegerEliminationRows',
+ 'GMP::Instance::DeleteSolverSession','GMP::Instance::FindApproximatelyFeasibleSolution',
+ 'GMP::Instance::FixColumns','GMP::Instance::Generate','GMP::Instance::GenerateRobustCounterpart',
+ 'GMP::Instance::GenerateStochasticProgram','GMP::SolverSession::GetCallbackInterruptStatus',
+ 'GMP::SolverSession::WaitForCompletion','GMP::SolverSession::WaitForSingleCompletion',
+ 'GMP::SolverSession::ExecutionStatus','GMP::Instance::GetDirection','GMP::Instance::GetLinearObjective',
+ 'GMP::Instance::GetMathematicalProgrammingType','GMP::Instance::GetMemoryUsed',
+ 'GMP::Instance::GetNumberOfColumns','GMP::Instance::GetNumberOfIndicatorRows',
+ 'GMP::Instance::GetNumberOfIntegerColumns','GMP::Instance::GetNumberOfNonlinearColumns',
+ 'GMP::Instance::GetNumberOfNonlinearNonzeros','GMP::Instance::GetNumberOfNonlinearRows',
+ 'GMP::Instance::GetNumberOfNonzeros','GMP::Instance::GetNumberOfRows',
+ 'GMP::Instance::GetNumberOfSOS1Rows','GMP::Instance::GetNumberOfSOS2Rows',
+ 'GMP::Instance::GetObjective','GMP::Instance::GetOptionValue','GMP::Instance::GetSolver',
+ 'GMP::Instance::GetSymbolicMathematicalProgram','GMP::Instance::MemoryStatistics',
+ 'GMP::Instance::Rename','GMP::Instance::SetCallbackAddCut','GMP::Instance::SetCallbackBranch',
+ 'GMP::Instance::SetCallbackHeuristic','GMP::Instance::SetCallbackIncumbent',
+ 'GMP::Instance::SetCallbackIterations','GMP::Instance::SetCallbackNewIncumbent',
+ 'GMP::Instance::SetCallbackStatusChange','GMP::Instance::SetCutoff','GMP::Instance::SetDirection',
+ 'GMP::Instance::SetMathematicalProgrammingType','GMP::Instance::SetSolver','GMP::Instance::Solve',
+ 'GMP::Stochastic::GetObjectiveBound','GMP::Stochastic::GetRelativeWeight',
+ 'GMP::Stochastic::GetRepresentativeScenario','GMP::Stochastic::UpdateBendersSubproblem',
+ 'GMP::Linearization::Add','GMP::Linearization::AddSingle','GMP::Linearization::Delete',
+ 'GMP::Linearization::GetDeviation','GMP::Linearization::GetDeviationBound',
+ 'GMP::Linearization::GetLagrangeMultiplier','GMP::Linearization::GetType',
+ 'GMP::Linearization::GetWeight','GMP::Linearization::RemoveDeviation',
+ 'GMP::Linearization::SetDeviationBound','GMP::Linearization::SetType',
+ 'GMP::Linearization::SetWeight','GMP::ProgressWindow::DeleteCategory',
+ 'GMP::ProgressWindow::DisplayLine','GMP::ProgressWindow::DisplayProgramStatus',
+ 'GMP::ProgressWindow::DisplaySolver','GMP::ProgressWindow::DisplaySolverStatus',
+ 'GMP::ProgressWindow::FreezeLine','GMP::ProgressWindow::UnfreezeLine',
+ 'GMP::QuadraticCoefficient::Get','GMP::QuadraticCoefficient::Set','GMP::Row::Activate',
+ 'GMP::Stochastic::AddBendersFeasibilityCut','GMP::Stochastic::AddBendersOptimalityCut',
+ 'GMP::Stochastic::BendersFindFeasibilityReference','GMP::Stochastic::MergeSolution',
+ 'GMP::Row::Add','GMP::Row::Deactivate','GMP::Row::Delete','GMP::Row::DeleteIndicatorCondition',
+ 'GMP::Row::Generate','GMP::Row::GetConvex','GMP::Row::GetIndicatorColumn',
+ 'GMP::Row::GetIndicatorCondition','GMP::Row::GetLeftHandSide','GMP::Row::GetRelaxationOnly',
+ 'GMP::Row::GetRightHandSide','GMP::Row::GetScale','GMP::Row::GetStatus','GMP::Row::GetType',
+ 'GMP::Row::SetConvex','GMP::Row::SetIndicatorCondition','GMP::Row::SetLeftHandSide',
+ 'GMP::Row::SetRelaxationOnly','GMP::Row::SetRightHandSide','GMP::Row::SetType',
+ 'GMP::Solution::Check','GMP::Solution::Copy','GMP::Solution::Count','GMP::Solution::Delete',
+ 'GMP::Solution::DeleteAll','GMP::Solution::GetColumnValue','GMP::Solution::GetCPUSecondsUsed',
+ 'GMP::Solution::GetDistance','GMP::Solution::GetFirstOrderDerivative',
+ 'GMP::Solution::GetIterationsUsed','GMP::Solution::GetNodesUsed','GMP::Solution::GetLinearObjective',
+ 'GMP::Solution::GetMemoryUsed','GMP::Solution::GetObjective','GMP::Solution::GetPenalizedObjective',
+ 'GMP::Solution::GetProgramStatus','GMP::Solution::GetRowValue','GMP::Solution::GetSolutionsSet',
+ 'GMP::Solution::GetSolverStatus','GMP::Solution::IsDualDegenerated','GMP::Solution::IsInteger',
+ 'GMP::Solution::IsPrimalDegenerated','GMP::Solution::SetMIPStartFlag','GMP::Solution::Move',
+ 'GMP::Solution::RandomlyGenerate','GMP::Solution::RetrieveFromModel',
+ 'GMP::Solution::RetrieveFromSolverSession','GMP::Solution::SendToModel',
+ 'GMP::Solution::SendToModelSelection','GMP::Solution::SendToSolverSession',
+ 'GMP::Solution::SetIterationCount','GMP::Solution::SetProgramStatus','GMP::Solution::SetSolverStatus',
+ 'GMP::Solution::UpdatePenaltyWeights','GMP::Solution::ConstructMean',
+ 'GMP::SolverSession::AsynchronousExecute','GMP::SolverSession::Execute',
+ 'GMP::SolverSession::Interrupt','GMP::SolverSession::AddLinearization',
+ 'GMP::SolverSession::GenerateBranchLowerBound','GMP::SolverSession::GenerateBranchUpperBound',
+ 'GMP::SolverSession::GenerateBranchRow','GMP::SolverSession::GenerateCut',
+ 'GMP::SolverSession::GenerateBinaryEliminationRow','GMP::SolverSession::GetCPUSecondsUsed',
+ 'GMP::SolverSession::GetHost','GMP::SolverSession::GetInstance',
+ 'GMP::SolverSession::GetIterationsUsed','GMP::SolverSession::GetNodesLeft',
+ 'GMP::SolverSession::GetNodesUsed','GMP::SolverSession::GetNodeNumber',
+ 'GMP::SolverSession::GetNodeObjective','GMP::SolverSession::GetNumberOfBranchNodes',
+ 'GMP::SolverSession::GetLinearObjective','GMP::SolverSession::GetMemoryUsed',
+ 'GMP::SolverSession::GetObjective','GMP::SolverSession::GetOptionValue',
+ 'GMP::SolverSession::GetProgramStatus','GMP::SolverSession::GetSolver',
+ 'GMP::SolverSession::GetSolverStatus','GMP::SolverSession::RejectIncumbent',
+ 'GMP::Event::Create','GMP::Event::Delete','GMP::Event::Reset','GMP::Event::Set',
+ 'GMP::SolverSession::SetObjective','GMP::SolverSession::SetOptionValue',
+ 'GMP::Instance::SetCPUSecondsLimit','GMP::Instance::SetIterationLimit',
+ 'GMP::Instance::SetMemoryLimit','GMP::Instance::SetOptionValue','GMP::Tuning::SolveSingleMPS',
+ 'GMP::Tuning::TuneMultipleMPS','GMP::Tuning::TuneSingleGMP',
+ 'GMP::Solver::GetAsynchronousSessionsLimit','GMP::Robust::EvaluateAdjustableVariables',
+ 'GenerateXML','GetDatasourceProperty','ReadGeneratedXML','ReadXML','ReferencedIdentifiers',
+ 'WriteXML','IdentifierAttributes','IdentifierDimension','IsRuntimeIdentifier','IdentifierMemory',
+ 'IdentifierMemoryStatistics','IdentifierText','IdentifierType','IdentifierUnit','ScalarValue',
+ 'SectionIdentifiers','SubRange','MemoryInUse','CommitTransaction','RollbackTransaction',
+ 'MemoryStatistics','me::AllowedAttribute','me::ChangeType','me::ChangeTypeAllowed','me::Children',
+ 'me::ChildTypeAllowed','me::Compile','me::Create','me::CreateLibrary','me::Delete','me::ExportNode',
+ 'me::GetAttribute','me::ImportLibrary','me::ImportNode','me::IsRunnable','me::Move','me::Parent',
+ 'me::Rename','me::SetAttribute','MomentToString','MomentToTimeSlot','OptionGetValue',
+ 'OptionGetKeywords','OptionGetString','OptionSetString','OptionSetValue','PeriodToString',
+ 'ProfilerContinue','ProfilerPause','ProfilerRestart','RestoreInactiveElements',
+ 'RetrieveCurrentVariableValues','SetAddRecursive','SetElementAdd','SetElementRename',
+ 'SQLColumnData','SQLCreateConnectionString','SQLDriverName','SQLNumberOfColumns',
+ 'SQLNumberOfDrivers','SQLNumberOfTables','SQLNumberOfViews','SQLTableName','SQLViewName',
+ 'StartTransaction','StringToElement','StringToMoment','StringToTimeSlot','TestDatabaseColumn',
+ 'TestDatabaseTable','TestDataSource','TestDate','TimeslotCharacteristic','TimeslotToMoment',
+ 'TimeslotToString','TimeZoneOffset','VariableConstraints','PageOpen','PageOpenSingle','PageClose',
+ 'PageGetActive','PageSetFocus','PageGetFocus','PageSetCursor','PageRefreshAll','PageGetChild',
+ 'PageGetParent','PageGetNext','PageGetPrevious','PageGetNextInTreeWalk','PageGetUsedIdentifiers',
+ 'PageGetTitle','PageGetAll','PageCopyTableToClipboard','PageCopyTableToExcel','PrintPage',
+ 'PrintPageCount','PrintStartReport','PrintEndReport','PivotTableReloadState','PivotTableSaveState',
+ 'PivotTableDeleteState','FileSelect','FileSelectNew','FileDelete','FileExists','FileCopy',
+ 'FileMove','FileView','FileEdit','FilePrint','FileTime','FileTouch','FileAppend','FileGetSize',
+ 'DirectorySelect','DirectoryCreate','DirectoryDelete','DirectoryExists','DirectoryCopy',
+ 'DirectoryMove','DirectoryGetCurrent','DialogProgress','DialogMessage','DialogError',
+ 'StatusMessage','DialogAsk','DialogGetString','DialogGetDate','DialogGetNumber','DialogGetElement',
+ 'DialogGetElementByText','DialogGetElementByData','DialogGetPassword','DialogGetColor','CaseNew',
+ 'CaseFind','CaseCreate','CaseLoadCurrent','CaseMerge','CaseLoadIntoCurrent','CaseSelect',
+ 'CaseSelectNew','CaseSetCurrent','CaseSave','CaseSaveAll','CaseSaveAs','CaseSelectMultiple',
+ 'CaseGetChangedStatus','CaseSetChangedStatus','CaseDelete','CaseGetType','CaseGetDatasetReference',
+ 'CaseWriteToSingleFile','CaseReadFromSingleFile','DatasetNew','DatasetFind','DatasetCreate',
+ 'DatasetLoadCurrent','DatasetMerge','DatasetLoadIntoCurrent','DatasetSelect','DatasetSelectNew',
+ 'DatasetSetCurrent','DatasetSave','DatasetSaveAll','DatasetSaveAs','DatasetGetChangedStatus',
+ 'DatasetSetChangedStatus','DatasetDelete','DatasetGetCategory','DataFileGetName',
+ 'DataFileGetAcronym','DataFileSetAcronym','DataFileGetComment','DataFileSetComment',
+ 'DataFileGetPath','DataFileGetTime','DataFileGetOwner','DataFileGetGroup','DataFileReadPermitted',
+ 'DataFileWritePermitted','DataFileExists','DataFileCopy','DataCategoryContents','CaseTypeContents',
+ 'CaseTypeCategories','Execute','OpenDocument','TestInternetConnection','GeoFindCoordinates',
+ 'ShowHelpTopic','Delay','ScheduleAt','ExitAimms','SessionArgument','SessionHasVisibleGUI',
+ 'ProjectDeveloperMode','DebuggerBreakpoint','ShowProgressWindow','ShowMessageWindow',
+ 'SolverGetControl','SolverReleaseControl','ProfilerStart','DataManagerImport','DataManagerExport',
+ 'DataManagerFileNew','DataManagerFileOpen','DataManagerFileGetCurrent','DataImport220',
+ 'SecurityGetUsers','SecurityGetGroups','UserColorAdd','UserColorDelete','UserColorGetRGB',
+ 'UserColorModify','LicenseNumber','LicenseType','LicenseStartDate','LicenseExpirationDate',
+ 'LicenseMaintenanceExpirationDate','VARLicenseExpirationDate','AimmsRevisionString',
+ 'VARLicenseCreate','HistogramCreate','HistogramDelete','HistogramSetDomain',
+ 'HistogramAddObservation','HistogramGetFrequencies','HistogramGetBounds',
+ 'HistogramGetObservationCount','HistogramGetAverage','HistogramGetDeviation',
+ 'HistogramGetSkewness','HistogramGetKurtosis','DateDifferenceDays','DateDifferenceYearFraction',
+ 'PriceFractional','PriceDecimal','RateEffective','RateNominal','DepreciationLinearLife',
+ 'DepreciationLinearRate','DepreciationNonLinearSumOfYear','DepreciationNonLinearLife',
+ 'DepreciationNonLinearFactor','DepreciationNonLinearRate','DepreciationSum',
+ 'InvestmentConstantPresentValue','InvestmentConstantFutureValue',
+ 'InvestmentConstantPeriodicPayment','InvestmentConstantInterestPayment',
+ 'InvestmentConstantPrincipalPayment','InvestmentConstantCumulativePrincipalPayment',
+ 'InvestmentConstantCumulativeInterestPayment','InvestmentConstantNumberPeriods',
+ 'InvestmentConstantRateAll','InvestmentConstantRate','InvestmentVariablePresentValue',
+ 'InvestmentVariablePresentValueInperiodic','InvestmentSingleFutureValue',
+ 'InvestmentVariableInternalRateReturnAll','InvestmentVariableInternalRateReturn',
+ 'InvestmentVariableInternalRateReturnInperiodicAll','InvestmentVariableInternalRateReturnInperiodic',
+ 'InvestmentVariableInternalRateReturnModified','SecurityDiscountedPrice',
+ 'SecurityDiscountedRedemption','SecurityDiscountedYield','SecurityDiscountedRate',
+ 'TreasuryBillPrice','TreasuryBillYield','TreasuryBillBondEquivalent','SecurityMaturityPrice',
+ 'SecurityMaturityCouponRate','SecurityMaturityYield','SecurityMaturityAccruedInterest',
+ 'SecurityCouponNumber','SecurityCouponPreviousDate','SecurityCouponNextDate','SecurityCouponDays',
+ 'SecurityCouponDaysPreSettlement','SecurityCouponDaysPostSettlement','SecurityPeriodicPrice',
+ 'SecurityPeriodicRedemption','SecurityPeriodicCouponRate','SecurityPeriodicYieldAll',
+ 'SecurityPeriodicYield','SecurityPeriodicAccruedInterest','SecurityPeriodicDuration',
+ 'SecurityPeriodicDurationModified','Abs','AtomicUnit','Ceil','Character','CharacterNumber','Cube',
+ 'Degrees','Div','Exp','FileRead','Floor','Log','Log10','Mapval','Max','Min','Mod','Power',
+ 'Radians','Round','Sign','Sqr','Sqrt','StringCapitalize','StringLength','StringToLower',
+ 'StringToUnit','StringToUpper','SubString','Trunc','Binomial','NegativeBinomial','Poisson',
+ 'Geometric','HyperGeometric','Uniform','Normal','LogNormal','Triangular','Exponential','Weibull',
+ 'Beta','Gamma','Logistic','Pareto','ExtremeValue','Precision','Factorial','Combination',
+ 'Permutation','Errorf','Cos','Sin','Tan','ArcCos','ArcSin','ArcTan','Cosh','Sinh','Tanh',
+ 'ArcCosh','ArcSinh','ArcTanh'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 0 => array(
+ '(', ')', '[', ']', '{', '}',
+ '%', '&', '|', '/',
+ '<', '>', '>=' , '<=', ':=',
+ '=', '-', '+', '*',
+ '.', ','
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #404040;',
+ 4 => 'color: #990000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #808080; font-style: italic ',
+ 'HARD' => 'color: #808080; font-style: italic'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000; font-style: italic;',
+ 'MULTI' => 'color: #008000; font-style: italic;'
+ ),
+
+ 'METHODS' => array(
+ 1 => 'color: #004000;',
+ 2 => 'color: #004000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'ESCAPE_CHAR' => array()
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'TAB_WIDTH' => 4
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/algol68.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/algol68.php
index 5b1e5aa7..2aadb0ce 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/algol68.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/algol68.php
@@ -4,7 +4,7 @@
* --------
* Author: Neville Dempsey (NevilleD.sourceforge@sgr-a.net)
* Copyright: (c) 2010 Neville Dempsey (https://sourceforge.net/projects/algol68/files/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/04/24
*
* ALGOL 68 language file for GeSHi.
@@ -89,14 +89,14 @@ if(!function_exists('geshi_langfile_algol68_vars')) {
# for some reason ".0 e - 2" is not recognised, but ".0 e + 2" IS!
# work around: remove spaces between sign and digits! Maybe because
# of the Unary '-' Operator
- $sign_="(?:-|\-|[-]|[\-]|\+|)"; # attempts #
+ $sign_="(?:-|\-|[-]|[\-]|\+|)"; # attempts # // FIXME: This should be used or removed. Assignment beneath
$sign_="(?:-\s*|\+\s*|)"; # n.b. sign is followed by white space #
$_int=$sign_.$_dec;
$il= $_int; # +_9 #
- $GESHI_NUMBER_INT_BASIC='(?:(?<![0-9a-z_\.%])|(?<=\.\.))(?<![\d\.]e[+\-])([1-9]\d*?|0)(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)';
+ //$GESHI_NUMBER_INT_BASIC='(?:(?<![0-9a-z_\.%])|(?<=\.\.))(?<![\d\.]e[+\-])([1-9]\d*?|0)(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)';
# Define REAL: #
$prereal=$pre; $postreal=$post;
@@ -326,4 +326,3 @@ $language_data = array(
);
unset($a68);
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apache.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apache.php
index c944443c..799f2501 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apache.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apache.php
@@ -4,7 +4,7 @@
* ----------
* Author: Tux (tux@inmail.cz)
* Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/29/07
*
* Apache language file for GeSHi.
@@ -479,5 +479,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/applescript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/applescript.php
index 603fa4a3..fae9bb80 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/applescript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/applescript.php
@@ -4,7 +4,7 @@
* --------
* Author: Stephan Klimek (http://www.initware.org)
* Copyright: Stephan Klimek (http://www.initware.org)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/07/20
*
* AppleScript language file for GeSHi.
@@ -153,5 +153,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apt_sources.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apt_sources.php
index 9f1ed045..f270ea3d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apt_sources.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/apt_sources.php
@@ -4,7 +4,7 @@
* ----------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2008 Milian Wolff (http://milianw.de)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/06/17
*
* Apt sources.list language file for GeSHi.
@@ -55,7 +55,7 @@ $language_data = array (
'stable/updates',
//Debian
'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato', 'woody', 'sarge',
- 'etch', 'lenny', 'wheezy', 'sid',
+ 'etch', 'lenny', 'wheezy', 'jessie', 'sid',
//Ubuntu
'warty', 'warty-updates', 'warty-security', 'warty-proposed', 'warty-backports',
'hoary', 'hoary-updates', 'hoary-security', 'hoary-proposed', 'hoary-backports',
@@ -69,13 +69,20 @@ $language_data = array (
'jaunty', 'jaunty-updates', 'jaunty-security', 'jaunty-proposed', 'jaunty-backports',
'karmic', 'karmic-updates', 'karmic-security', 'karmic-proposed', 'karmic-backports',
'lucid', 'lucid-updates', 'lucid-security', 'lucid-proposed', 'lucid-backports',
- 'maverick', 'maverick-updates', 'maverick-security', 'maverick-proposed', 'maverick-backports'
+ 'maverick', 'maverick-updates', 'maverick-security', 'maverick-proposed', 'maverick-backports',
+ 'natty', 'natty-updates', 'natty-security', 'natty-proposed', 'natty-backports',
+ 'oneiric', 'oneiric-updates', 'oneiric-security', 'oneiric-proposed', 'oneiric-backports',
+ 'precise', 'precise-updates', 'precise-security', 'precise-proposed', 'precise-backports',
+ 'quantal', 'quantal-updates', 'quantal-security', 'quantal-proposed', 'quantal-backports',
+ 'raring', 'raring-updates', 'raring-security', 'raring-proposed', 'raring-backports',
+ 'saucy', 'saucy-updates', 'saucy-security', 'saucy-proposed', 'saucy-backports',
+ 'trusty', 'trusty-updates', 'trusty-security', 'trusty-proposed', 'trusty-backports'
),
3 => array(
'main', 'restricted', 'preview', 'contrib', 'non-free',
'commercial', 'universe', 'multiverse'
)
- ),
+ ),
'REGEXPS' => array(
0 => "(((http|ftp):\/\/|file:\/)[^\s]+)|(cdrom:\[[^\]]*\][^\s]*)",
),
@@ -144,5 +151,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/arm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/arm.php
index 8e3c0a37..dd2870cd 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/arm.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/arm.php
@@ -4,7 +4,7 @@
* -------
* Author: Marat Dukhan (mdukhan3.at.gatech.dot.edu)
* Copyright: (c) Marat Dukhan (mdukhan3.at.gatech.dot.edu)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2011/10/06
*
* ARM Assembler language file for GeSHi.
@@ -3314,5 +3314,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asm.php
index dd0a7ec5..b602830f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asm.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asm.php
@@ -8,7 +8,7 @@
* 2009-2011 Benny Baumann (http://qbnz.com/highlighter),
* 2011 Dennis Yurichev (dennis@conus.info),
* 2011 Marat Dukhan (mdukhan3.at.gatech.dot.edu)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/27
*
* x86 Assembler language file for GeSHi.
@@ -599,5 +599,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asp.php
index 0096a169..c68ba07b 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asp.php
@@ -4,7 +4,7 @@
* --------
* Author: Amit Gupta (http://blog.igeek.info/)
* Copyright: (c) 2004 Amit Gupta (http://blog.igeek.info/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/13
*
* ASP language file for GeSHi.
@@ -160,5 +160,3 @@ $language_data = array (
3 => true
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asymptote.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asymptote.php
index 8683588e..1c5c56a1 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asymptote.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/asymptote.php
@@ -4,7 +4,7 @@
* -------------
* Author: Manuel Yguel (manuel.yguel.robotics@gmail.com)
* Copyright: (c) 2012 Manuel Yguel (http://manuelyguel.eu)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2012/05/24
*
* asymptote language file for GeSHi.
@@ -190,5 +190,3 @@ $language_data = array(
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php
index 7a0f1ee9..ec1cd0a6 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoconf.php
@@ -4,7 +4,7 @@
* -----
* Author: Mihai Vasilian (grayasm@gmail.com)
* Copyright: (c) 2010 Mihai Vasilian
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/01/25
*
* autoconf language file for GeSHi.
@@ -508,5 +508,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autohotkey.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autohotkey.php
index 970684da..f6318af9 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autohotkey.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autohotkey.php
@@ -4,7 +4,7 @@
* --------
* Author: Naveen Garg (naveen.garg@gmail.com)
* Copyright: (c) 2009 Naveen Garg and GeSHi
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/06/11
*
* Autohotkey language file for GeSHi.
@@ -369,5 +369,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoit.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoit.php
index ab401b4c..e794102e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoit.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/autoit.php
@@ -4,7 +4,7 @@
* --------
* Author: big_daddy (robert.i.anthony@gmail.com)
* Copyright: (c) 2006 and to GESHi ;)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/01/26
*
* AutoIT language file for GeSHi.
@@ -1171,5 +1171,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/avisynth.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/avisynth.php
index 88f66288..f259b5c4 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/avisynth.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/avisynth.php
@@ -4,7 +4,7 @@
* --------
* Author: Ryan Jones (sciguyryan@gmail.com)
* Copyright: (c) 2008 Ryan Jones
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/10/08
*
* AviSynth language file for GeSHi.
@@ -191,4 +191,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/awk.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/awk.php
index 1ec239b7..d1bc141f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/awk.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/awk.php
@@ -4,7 +4,7 @@
* -------
* Author: George Pollard (porges@porg.es)
* Copyright: (c) 2009 George Pollard
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/01/28
*
* Awk language file for GeSHi.
@@ -154,5 +154,3 @@ $language_data = array (
'SCRIPT_DELIMITERS' => array (),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bascomavr.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bascomavr.php
index 864f74e8..d913135a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bascomavr.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bascomavr.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: aquaticus.info
* Copyright: (c) 2008 aquaticus.info
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/01/09
*
* BASCOM AVR language file for GeSHi.
@@ -181,5 +181,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bash.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bash.php
index c69f0054..e81b75a3 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bash.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bash.php
@@ -4,7 +4,7 @@
* --------
* Author: Andreas Gohr (andi@splitbrain.org)
* Copyright: (c) 2004 Andreas Gohr, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/20
*
* BASH language file for GeSHi.
@@ -132,7 +132,16 @@ $language_data = array (
'apt-src remove', 'apt-src update', 'apt-src upgrade',
'apt-src version',
- 'basename', 'bash', 'bc', 'bison', 'bunzip2', 'bzcat',
+ 'aptitude autoclean', 'aptitude build-dep', 'aptitude changelog',
+ 'aptitude clean', 'aptitude download', 'aptitude forbid-version',
+ 'aptitude forget-new', 'aptitude full-upgrade', 'aptitude hold',
+ 'aptitude install', 'aptitude markauto', 'aptitude purge',
+ 'aptitude reinstall', 'aptitude remove', 'aptitude safe-upgrade',
+ 'aptitude search', 'aptitude show', 'aptitude unhold',
+ 'aptitude unmarkauto', 'aptitude update', 'aptitude versions',
+ 'aptitude why', 'aptitude why-not',
+
+ 'basename', 'bash', 'batctl', 'bc', 'bison', 'bunzip2', 'bzcat',
'bzcmp', 'bzdiff', 'bzegrep', 'bzfgrep', 'bzgrep',
'bzip2', 'bzip2recover', 'bzless', 'bzmore',
@@ -160,7 +169,7 @@ $language_data = array (
'false', 'fbset', 'fdisk', 'ffmpeg', 'fgconsole','fgrep', 'file',
'find', 'flex', 'flex++', 'fmt', 'free', 'ftp', 'funzip', 'fuser',
- 'g++', 'gawk', 'gc','gcc', 'gdb', 'getent', 'getkeycodes',
+ 'g++', 'gawk', 'gc','gcc', 'gdb', 'gdisk', 'getent', 'getkeycodes',
'getopt', 'gettext', 'gettextize', 'gimp', 'gimp-remote',
'gimptool', 'gmake', 'gocr', 'grep', 'groups', 'gs', 'gunzip',
'gzexe', 'gzip',
@@ -176,7 +185,7 @@ $language_data = array (
'git difftool--helper', 'git diff-tree', 'git fast-export',
'git fast-import', 'git fetch', 'git fetch-pack',
'git filter-branch', 'git fmt-merge-msg', 'git for-each-ref',
- 'git format-patch', 'git fsck', 'git fsck-objects', 'git gc',
+ 'git format-patch', 'git fsck', 'git fsck-objects', 'git gc', 'git gui',
'git get-tar-commit-id', 'git grep', 'git hash-object', 'git help',
'git http-backend', 'git http-fetch', 'git http-push',
'git imap-send', 'git index-pack', 'git init', 'git init-db',
@@ -247,14 +256,14 @@ $language_data = array (
'git-web--browse', 'git-whatchanged', 'gitwhich', 'gitwipe',
'git-write-tree', 'gitxgrep',
- 'head', 'hexdump', 'hostname',
+ 'head', 'hexdump', 'hostname', 'htop',
'id', 'ifconfig', 'ifdown', 'ifup', 'igawk', 'install',
'ip', 'ip addr', 'ip addrlabel', 'ip link', 'ip maddr', 'ip mroute',
'ip neigh', 'ip route', 'ip rule', 'ip tunnel', 'ip xfrm',
- 'join',
+ 'jar', 'java', 'javac', 'join',
'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall',
@@ -271,10 +280,11 @@ $language_data = array (
'od', 'openvt',
- 'passwd', 'patch', 'pcregrep', 'pcretest', 'perl', 'perror',
- 'pgawk', 'pidof', 'ping', 'pr', 'procmail', 'prune', 'ps', 'pstree',
- 'ps2ascii', 'ps2epsi', 'ps2frag', 'ps2pdf', 'ps2ps', 'psbook',
- 'psmerge', 'psnup', 'psresize', 'psselect', 'pstops',
+ 'passwd', 'patch', 'pbzip2', 'pcregrep', 'pcretest', 'perl',
+ 'perror', 'pgawk', 'pidof', 'pigz', 'ping', 'pr', 'procmail',
+ 'prune', 'ps', 'pstree', 'ps2ascii', 'ps2epsi', 'ps2frag',
+ 'ps2pdf', 'ps2ps', 'psbook', 'psmerge', 'psnup', 'psresize',
+ 'psselect', 'pstops',
'rbash', 'rcs', 'rcs2log', 'read', 'readlink', 'red', 'resizecons',
'rev', 'rm', 'rmdir', 'rsh', 'run-parts',
@@ -283,7 +293,7 @@ $language_data = array (
'setkeycodes', 'setleds', 'setmetamode', 'setserial', 'setterm',
'sh', 'showkey', 'shred', 'size', 'size86', 'skill', 'sleep',
'slogin', 'snice', 'sort', 'sox', 'split', 'ssed', 'ssh', 'ssh-add',
- 'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'stat', 'strace',
+ 'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'sshfs', 'stat', 'strace',
'strings', 'strip', 'stty', 'su', 'sudo', 'suidperl', 'sum', 'svn',
'svnadmin', 'svndumpfilter', 'svnlook', 'svnmerge', 'svnmucc',
'svnserve', 'svnshell', 'svnsync', 'svnversion', 'svnwrap', 'sync',
@@ -291,16 +301,40 @@ $language_data = array (
'svn add', 'svn ann', 'svn annotate', 'svn blame', 'svn cat',
'svn changelist', 'svn checkout', 'svn ci', 'svn cl', 'svn cleanup',
'svn co', 'svn commit', 'svn copy', 'svn cp', 'svn del',
- 'svn delete', 'svn di', 'svn diff', 'svn export', 'svn h',
- 'svn help', 'svn import', 'svn info', 'svn list', 'svn lock',
- 'svn log', 'svn ls', 'svn merge', 'svn mergeinfo', 'svn mkdir',
- 'svn move', 'svn mv', 'svn pd', 'svn pdel', 'svn pe', 'svn pedit',
+ 'svn delete', 'svn di', 'svn diff', 'svn export', 'svn help',
+ 'svn import', 'svn info', 'svn list', 'svn lock', 'svn log',
+ 'svn ls', 'svn merge', 'svn mergeinfo', 'svn mkdir', 'svn move',
+ 'svn mv', 'svn patch', 'svn pd', 'svn pdel', 'svn pe', 'svn pedit',
'svn pg', 'svn pget', 'svn pl', 'svn plist', 'svn praise',
'svn propdel', 'svn propedit', 'svn propget', 'svn proplist',
- 'svn propset', 'svn ps', 'svn pset', 'svn remove', 'svn ren',
+ 'svn propset', 'svn ps', 'svn pset', 'svn relocate', 'svn remove',
'svn rename', 'svn resolve', 'svn resolved', 'svn revert', 'svn rm',
'svn st', 'svn stat', 'svn status', 'svn sw', 'svn switch',
- 'svn unlock', 'svn up', 'svn update',
+ 'svn unlock', 'svn up', 'svn update', 'svn upgrade',
+
+ 'svnadmin crashtest', 'svnadmin create', 'svnadmin deltify',
+ 'svnadmin dump', 'svnadmin help', 'svnadmin hotcopy',
+ 'svnadmin list-dblogs', 'svnadmin list-unused-dblogs',
+ 'svnadmin load', 'svnadmin lslocks', 'svnadmin lstxns',
+ 'svnadmin pack', 'svnadmin recover', 'svnadmin rmlocks',
+ 'svnadmin rmtxns', 'svnadmin setlog', 'svnadmin setrevprop',
+ 'svnadmin setuuid', 'svnadmin upgrade', 'svnadmin verify',
+
+ 'svndumpfilter exclude', 'svndumpfilter help',
+ 'svndumpfilter include',
+
+ 'svnlook author', 'svnlook cat', 'svnlook changed', 'svnlook date',
+ 'svnlook diff', 'svnlook dirs-changed', 'svnlook filesize',
+ 'svnlook help', 'svnlook history', 'svnlook info', 'svnlook lock',
+ 'svnlook log', 'svnlook pg', 'svnlook pget', 'svnlook pl',
+ 'svnlook plist', 'svnlook propget', 'svnlook proplist',
+ 'svnlook tree', 'svnlook uuid', 'svnlook youngest',
+
+ 'svnrdump dump', 'svnrdump help', 'svnrdump load',
+
+ 'svnsync copy-revprops', 'svnsync help', 'svnsync info',
+ 'svnsync init', 'svnsync initialize', 'svnsync sync',
+ 'svnsync synchronize',
'tac', 'tail', 'tar', 'tee', 'tempfile', 'touch', 'tr', 'tree',
'true',
@@ -436,5 +470,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php
index 35c92740..b0574cec 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/basic4gl.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Matthew Webb (bmatthew1@blueyonder.co.uk)
* Copyright: (c) 2004 Matthew Webb (http://matthew-4gl.wikispaces.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/09/15
*
* Basic4GL language file for GeSHi.
@@ -337,5 +337,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bf.php
index c06ca5bf..023c059a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bf.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bf.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/10/31
*
* Brainfuck language file for GeSHi.
@@ -111,5 +111,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php
index 51cb4ceb..5afecbfa 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bibtex.php
@@ -4,7 +4,7 @@
* -----
* Author: Quinn Taylor (quinntaylor@mac.com)
* Copyright: (c) 2009 Quinn Taylor (quinntaylor@mac.com), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/04/29
*
* BibTeX language file for GeSHi.
@@ -179,5 +179,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/blitzbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/blitzbasic.php
index 1d3c08d0..8ea60632 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/blitzbasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/blitzbasic.php
@@ -4,7 +4,7 @@
* --------------
* Author: P�draig O`Connel (info@moonsword.info)
* Copyright: (c) 2005 P�draig O`Connel (http://moonsword.info)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 16.10.2005
*
* BlitzBasic language file for GeSHi.
@@ -181,5 +181,3 @@ $language_data = array (
1 => false
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bnf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bnf.php
index ca15cf9e..0fe98d11 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bnf.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/bnf.php
@@ -4,7 +4,7 @@
* --------
* Author: Rowan Rodrik van der Molen (rowan@bigsmoke.us)
* Copyright: (c) 2006 Rowan Rodrik van der Molen (http://www.bigsmoke.us/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/09/28
*
* BNF (Backus-Naur form) language file for GeSHi.
@@ -115,5 +115,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/boo.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/boo.php
index b68d442f..862881a5 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/boo.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/boo.php
@@ -4,7 +4,7 @@
* --------
* Author: Marcus Griep (neoeinstein+GeSHi@gmail.com)
* Copyright: (c) 2007 Marcus Griep (http://www.xpdm.us)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/09/10
*
* Boo language file for GeSHi.
@@ -213,5 +213,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php
index 35d5b019..9dbe6104 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c.php
@@ -7,7 +7,7 @@
* - Jack Lloyd (lloyd@randombit.net)
* - Michael Mol (mikemol@gmail.com)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* C language file for GeSHi.
@@ -277,5 +277,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_loadrunner.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_loadrunner.php
index 42b3d772..12c60df0 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_loadrunner.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_loadrunner.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Stuart Moncrieff (stuart at myloadtest dot com)
* Copyright: (c) 2010 Stuart Moncrieff (http://www.myloadtest.com/loadrunner-syntax-highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010-07-25
*
* C (for LoadRunner) language file for GeSHi.
@@ -319,5 +319,3 @@ $language_data = array (
// Note that if you are using <pre> tags for your code, then the browser chooses how many spaces your tabs will translate to.
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php
index 41c21ce5..94131a57 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_mac.php
@@ -4,7 +4,7 @@
* ---------
* Author: M. Uli Kusterer (witness.of.teachtext@gmx.net)
* Copyright: (c) 2004 M. Uli Kusterer, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* C for Macs language file for GeSHi.
@@ -223,5 +223,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_winapi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_winapi.php
new file mode 100644
index 00000000..69cad2a7
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/c_winapi.php
@@ -0,0 +1,870 @@
+<?php
+/*************************************************************************************
+ * c_winapi.php
+ * -----
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Contributors:
+ * - Jack Lloyd (lloyd@randombit.net)
+ * - Michael Mol (mikemol@gmail.com)
+ * Copyright: (c) 2012 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.12
+ * Date Started: 2012/08/12
+ *
+ * C (WinAPI) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2009/01/22 (1.0.8.3)
+ * - Made keywords case-sensitive.
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/XX/XX (1.0.4)
+ * - Added a couple of new keywords (Jack Lloyd)
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2009/02/08)
+ * -------------------------
+ * - Get a list of inbuilt functions to add (and explore C more
+ * to complete this rather bare language file
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C (WinAPI)',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'return', 'while', 'case', 'continue', 'default',
+ 'do', 'else', 'for', 'switch', 'goto'
+ ),
+ 2 => array(
+ 'null', 'false', 'break', 'true', 'function', 'enum', 'extern', 'inline'
+ ),
+ 3 => array(
+ // assert.h
+ 'assert',
+
+ //complex.h
+ 'cabs', 'cacos', 'cacosh', 'carg', 'casin', 'casinh', 'catan',
+ 'catanh', 'ccos', 'ccosh', 'cexp', 'cimag', 'cis', 'clog', 'conj',
+ 'cpow', 'cproj', 'creal', 'csin', 'csinh', 'csqrt', 'ctan', 'ctanh',
+
+ //ctype.h
+ 'digittoint', 'isalnum', 'isalpha', 'isascii', 'isblank', 'iscntrl',
+ 'isdigit', 'isgraph', 'islower', 'isprint', 'ispunct', 'isspace',
+ 'isupper', 'isxdigit', 'toascii', 'tolower', 'toupper',
+
+ //inttypes.h
+ 'imaxabs', 'imaxdiv', 'strtoimax', 'strtoumax', 'wcstoimax',
+ 'wcstoumax',
+
+ //locale.h
+ 'localeconv', 'setlocale',
+
+ //math.h
+ 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'exp',
+ 'fabs', 'floor', 'frexp', 'ldexp', 'log', 'log10', 'modf', 'pow',
+ 'sin', 'sinh', 'sqrt', 'tan', 'tanh',
+
+ //setjmp.h
+ 'longjmp', 'setjmp',
+
+ //signal.h
+ 'raise',
+
+ //stdarg.h
+ 'va_arg', 'va_copy', 'va_end', 'va_start',
+
+ //stddef.h
+ 'offsetof',
+
+ //stdio.h
+ 'clearerr', 'fclose', 'fdopen', 'feof', 'ferror', 'fflush', 'fgetc',
+ 'fgetpos', 'fgets', 'fopen', 'fprintf', 'fputc', 'fputchar',
+ 'fputs', 'fread', 'freopen', 'fscanf', 'fseek', 'fsetpos', 'ftell',
+ 'fwrite', 'getc', 'getch', 'getchar', 'gets', 'perror', 'printf',
+ 'putc', 'putchar', 'puts', 'remove', 'rename', 'rewind', 'scanf',
+ 'setbuf', 'setvbuf', 'snprintf', 'sprintf', 'sscanf', 'tmpfile',
+ 'tmpnam', 'ungetc', 'vfprintf', 'vfscanf', 'vprintf', 'vscanf',
+ 'vsprintf', 'vsscanf',
+
+ //stdlib.h
+ 'abort', 'abs', 'atexit', 'atof', 'atoi', 'atol', 'bsearch',
+ 'calloc', 'div', 'exit', 'free', 'getenv', 'itoa', 'labs', 'ldiv',
+ 'ltoa', 'malloc', 'qsort', 'rand', 'realloc', 'srand', 'strtod',
+ 'strtol', 'strtoul', 'system',
+
+ //string.h
+ 'memchr', 'memcmp', 'memcpy', 'memmove', 'memset', 'strcat',
+ 'strchr', 'strcmp', 'strcoll', 'strcpy', 'strcspn', 'strerror',
+ 'strlen', 'strncat', 'strncmp', 'strncpy', 'strpbrk', 'strrchr',
+ 'strspn', 'strstr', 'strtok', 'strxfrm',
+
+ //time.h
+ 'asctime', 'clock', 'ctime', 'difftime', 'gmtime', 'localtime',
+ 'mktime', 'strftime', 'time',
+
+ //wchar.h
+ 'btowc', 'fgetwc', 'fgetws', 'fputwc', 'fputws', 'fwide',
+ 'fwprintf', 'fwscanf', 'getwc', 'getwchar', 'mbrlen', 'mbrtowc',
+ 'mbsinit', 'mbsrtowcs', 'putwc', 'putwchar', 'swprintf', 'swscanf',
+ 'ungetwc', 'vfwprintf', 'vswprintf', 'vwprintf', 'wcrtomb',
+ 'wcscat', 'wcschr', 'wcscmp', 'wcscoll', 'wcscpy', 'wcscspn',
+ 'wcsftime', 'wcslen', 'wcsncat', 'wcsncmp', 'wcsncpy', 'wcspbrk',
+ 'wcsrchr', 'wcsrtombs', 'wcsspn', 'wcsstr', 'wcstod', 'wcstok',
+ 'wcstol', 'wcstoul', 'wcsxfrm', 'wctob', 'wmemchr', 'wmemcmp',
+ 'wmemcpy', 'wmemmove', 'wmemset', 'wprintf', 'wscanf',
+
+ //wctype.h
+ 'iswalnum', 'iswalpha', 'iswcntrl', 'iswctype', 'iswdigit',
+ 'iswgraph', 'iswlower', 'iswprint', 'iswpunct', 'iswspace',
+ 'iswupper', 'iswxdigit', 'towctrans', 'towlower', 'towupper',
+ 'wctrans', 'wctype'
+ ),
+ 4 => array(
+ 'auto', 'char', 'const', 'double', 'float', 'int', 'long',
+ 'register', 'short', 'signed', 'sizeof', 'static', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'wchar_t',
+
+ 'int8', 'int16', 'int32', 'int64',
+ 'uint8', 'uint16', 'uint32', 'uint64',
+
+ 'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
+ 'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
+
+ 'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
+ 'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
+
+ 'int8_t', 'int16_t', 'int32_t', 'int64_t',
+ 'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
+
+ 'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t',
+ 'size_t', 'off_t'
+ ),
+ // Public API
+ 5 => array(
+ 'AssignProcessToJobObject', 'CommandLineToArgvW', 'ConvertThreadToFiber',
+ 'CreateFiber', 'CreateJobObjectA', 'CreateJobObjectW', 'CreateProcessA',
+ 'CreateProcessAsUserA', 'CreateProcessAsUserW', 'CreateProcessW',
+ 'CreateRemoteThread', 'CreateThread', 'DeleteFiber', 'ExitProcess',
+ 'ExitThread', 'FreeEnvironmentStringsA', 'FreeEnvironmentStringsW',
+ 'GetCommandLineA', 'GetCommandLineW', 'GetCurrentProcess',
+ 'GetCurrentProcessId', 'GetCurrentThread', 'GetCurrentThreadId',
+ 'GetEnvironmentStringsA', 'GetEnvironmentStringsW',
+ 'GetEnvironmentVariableA', 'GetEnvironmentVariableW', 'GetExitCodeProcess',
+ 'GetExitCodeThread', 'GetGuiResources', 'GetPriorityClass',
+ 'GetProcessAffinityMask', 'GetProcessPriorityBoost',
+ 'GetProcessShutdownParameters', 'GetProcessTimes', 'GetProcessVersion',
+ 'GetProcessWorkingSetSize', 'GetStartupInfoA', 'GetStartupInfoW',
+ 'GetThreadPriority', 'GetThreadPriorityBoost', 'GetThreadTimes',
+ 'OpenJobObjectA', 'OpenJobObjectW', 'OpenProcess',
+ 'QueryInformationJobObject', 'ResumeThread', 'SetEnvironmentVariableA',
+ 'SetEnvironmentVariableW', 'SetInformationJobObject', 'SetPriorityClass',
+ 'SetProcessAffinityMask', 'SetProcessPriorityBoost',
+ 'SetProcessShutdownParameters', 'SetProcessWorkingSetSize',
+ 'SetThreadAffinityMask', 'SetThreadIdealProcessor', 'SetThreadPriority',
+ 'SetThreadPriorityBoost', 'Sleep', 'SleepEx', 'SuspendThread',
+ 'SwitchToFiber', 'SwitchToThread', 'TerminateJobObject', 'TerminateProcess',
+ 'TerminateThread', 'WaitForInputIdle', 'WinExec',
+
+ '_hread', '_hwrite', '_lclose', '_lcreat', '_llseek', '_lopen', '_lread',
+ '_lwrite', 'AreFileApisANSI', 'CancelIo', 'CopyFileA', 'CopyFileW',
+ 'CreateDirectoryA', 'CreateDirectoryExA', 'CreateDirectoryExW',
+ 'CreateDirectoryW', 'CreateFileA', 'CreateFileW', 'DeleteFileA',
+ 'DeleteFileW', 'FindClose', 'FindCloseChangeNotification',
+ 'FindFirstChangeNotificationA', 'FindFirstChangeNotificationW',
+ 'FindFirstFileA', 'FindFirstFileW', 'FindNextFileA', 'FindNextFileW',
+ 'FlushFileBuffers', 'GetCurrentDirectoryA', 'GetCurrentDirectoryW',
+ 'GetDiskFreeSpaceA', 'GetDiskFreeSpaceExA', 'GetDiskFreeSpaceExW',
+ 'GetDiskFreeSpaceW', 'GetDriveTypeA', 'GetDriveTypeW', 'GetFileAttributesA',
+ 'GetFileAttributesExA', 'GetFileAttributesExW', 'GetFileAttributesW',
+ 'GetFileInformationByHandle', 'GetFileSize', 'GetFileType',
+ 'GetFullPathNameA', 'GetFullPathNameW', 'GetLogicalDrives',
+ 'GetLogicalDriveStringsA', 'GetLogicalDriveStringsW', 'GetLongPathNameA',
+ 'GetLongPathNameW', 'GetShortPathNameA', 'GetShortPathNameW',
+ 'GetTempFileNameA', 'GetTempFileNameW', 'GetTempPathA', 'GetTempPathW',
+ 'LockFile', 'MoveFileA', 'MoveFileW', 'MulDiv', 'OpenFile',
+ 'QueryDosDeviceA', 'QueryDosDeviceW', 'ReadFile', 'ReadFileEx',
+ 'RemoveDirectoryA', 'RemoveDirectoryW', 'SearchPathA', 'SearchPathW',
+ 'SetCurrentDirectoryA', 'SetCurrentDirectoryW', 'SetEndOfFile',
+ 'SetFileApisToANSI', 'SetFileApisToOEM', 'SetFileAttributesA',
+ 'SetFileAttributesW', 'SetFilePointer', 'SetHandleCount',
+ 'SetVolumeLabelA', 'SetVolumeLabelW', 'UnlockFile', 'WriteFile',
+ 'WriteFileEx',
+
+ 'DeviceIoControl',
+
+ 'GetModuleFileNameA', 'GetModuleFileNameW', 'GetProcAddress',
+ 'LoadLibraryA', 'LoadLibraryExA', 'LoadLibraryExW', 'LoadLibraryW',
+ 'LoadModule',
+
+ 'GetPrivateProfileIntA', 'GetPrivateProfileIntW',
+ 'GetPrivateProfileSectionA', 'GetPrivateProfileSectionNamesA',
+ 'GetPrivateProfileSectionNamesW', 'GetPrivateProfileSectionW',
+ 'GetPrivateProfileStringA', 'GetPrivateProfileStringW',
+ 'GetPrivateProfileStructA', 'GetPrivateProfileStructW',
+ 'GetProfileIntA', 'GetProfileIntW', 'GetProfileSectionA',
+ 'GetProfileSectionW', 'GetProfileStringA', 'GetProfileStringW',
+ 'RegCloseKey', 'RegConnectRegistryA', 'RegConnectRegistryW',
+ 'RegCreateKeyA', 'RegCreateKeyExA', 'RegCreateKeyExW',
+ 'RegCreateKeyW', 'RegDeleteKeyA', 'RegDeleteKeyW', 'RegDeleteValueA',
+ 'RegDeleteValueW', 'RegEnumKeyA', 'RegEnumKeyExA', 'RegEnumKeyExW',
+ 'RegEnumKeyW', 'RegEnumValueA', 'RegEnumValueW', 'RegFlushKey',
+ 'RegGetKeySecurity', 'RegLoadKeyA', 'RegLoadKeyW',
+ 'RegNotifyChangeKeyValue', 'RegOpenKeyA', 'RegOpenKeyExA', 'RegOpenKeyExW',
+ 'RegOpenKeyW', 'RegOverridePredefKey', 'RegQueryInfoKeyA',
+ 'RegQueryInfoKeyW', 'RegQueryMultipleValuesA', 'RegQueryMultipleValuesW',
+ 'RegQueryValueA', 'RegQueryValueExA', 'RegQueryValueExW', 'RegQueryValueW',
+ 'RegReplaceKeyA', 'RegReplaceKeyW', 'RegRestoreKeyA', 'RegRestoreKeyW',
+ 'RegSaveKeyA', 'RegSaveKeyW', 'RegSetKeySecurity', 'RegSetValueA',
+ 'RegSetValueExA', 'RegSetValueExW', 'RegSetValueW', 'RegUnLoadKeyA',
+ 'RegUnLoadKeyW', 'WritePrivateProfileSectionA', 'WritePrivateProfileSectionW',
+ 'WritePrivateProfileStringA', 'WritePrivateProfileStringW',
+ 'WritePrivateProfileStructA', 'WritePrivateProfileStructW',
+ 'WriteProfileSectionA', 'WriteProfileSectionW', 'WriteProfileStringA',
+ 'WriteProfileStringW',
+
+ 'AccessCheck', 'AccessCheckAndAuditAlarmA', 'AccessCheckAndAuditAlarmW',
+ 'AccessCheckByType', 'AccessCheckByTypeAndAuditAlarmA',
+ 'AccessCheckByTypeAndAuditAlarmW', 'AccessCheckByTypeResultList',
+ 'AccessCheckByTypeResultListAndAuditAlarmA', 'AccessCheckByTypeResultListAndAuditAlarmW',
+ 'AddAccessAllowedAce', 'AddAccessAllowedAceEx', 'AddAccessAllowedObjectAce',
+ 'AddAccessDeniedAce', 'AddAccessDeniedAceEx', 'AddAccessDeniedObjectAce',
+ 'AddAce', 'AddAuditAccessAce', 'AddAuditAccessAceEx', 'AddAuditAccessObjectAce',
+ 'AdjustTokenGroups', 'AdjustTokenPrivileges', 'AllocateAndInitializeSid',
+ 'AllocateLocallyUniqueId', 'AreAllAccessesGranted', 'AreAnyAccessesGranted',
+ 'BuildExplicitAccessWithNameA', 'BuildExplicitAccessWithNameW',
+ 'BuildImpersonateExplicitAccessWithNameA', 'BuildImpersonateExplicitAccessWithNameW',
+ 'BuildImpersonateTrusteeA', 'BuildImpersonateTrusteeW', 'BuildSecurityDescriptorA',
+ 'BuildSecurityDescriptorW', 'BuildTrusteeWithNameA', 'BuildTrusteeWithNameW',
+ 'BuildTrusteeWithSidA', 'BuildTrusteeWithSidW',
+ 'ConvertToAutoInheritPrivateObjectSecurity', 'CopySid', 'CreatePrivateObjectSecurity',
+ 'CreatePrivateObjectSecurityEx', 'CreateRestrictedToken', 'DeleteAce',
+ 'DestroyPrivateObjectSecurity', 'DuplicateToken', 'DuplicateTokenEx',
+ 'EqualPrefixSid', 'EqualSid', 'FindFirstFreeAce', 'FreeSid', 'GetAce',
+ 'GetAclInformation', 'GetAuditedPermissionsFromAclA', 'GetAuditedPermissionsFromAclW',
+ 'GetEffectiveRightsFromAclA', 'GetEffectiveRightsFromAclW',
+ 'GetExplicitEntriesFromAclA', 'GetExplicitEntriesFromAclW', 'GetFileSecurityA',
+ 'GetFileSecurityW', 'GetKernelObjectSecurity', 'GetLengthSid', 'GetMultipleTrusteeA',
+ 'GetMultipleTrusteeOperationA', 'GetMultipleTrusteeOperationW', 'GetMultipleTrusteeW',
+ 'GetNamedSecurityInfoA', 'GetNamedSecurityInfoW', 'GetPrivateObjectSecurity',
+ 'GetSecurityDescriptorControl', 'GetSecurityDescriptorDacl',
+ 'GetSecurityDescriptorGroup', 'GetSecurityDescriptorLength',
+ 'GetSecurityDescriptorOwner', 'GetSecurityDescriptorSacl', 'GetSecurityInfo',
+ 'GetSidIdentifierAuthority', 'GetSidLengthRequired', 'GetSidSubAuthority',
+ 'GetSidSubAuthorityCount', 'GetTokenInformation', 'GetTrusteeFormA',
+ 'GetTrusteeFormW', 'GetTrusteeNameA', 'GetTrusteeNameW', 'GetTrusteeTypeA',
+ 'GetTrusteeTypeW', 'GetUserObjectSecurity', 'ImpersonateLoggedOnUser',
+ 'ImpersonateNamedPipeClient', 'ImpersonateSelf', 'InitializeAcl',
+ 'InitializeSecurityDescriptor', 'InitializeSid', 'IsTokenRestricted', 'IsValidAcl',
+ 'IsValidSecurityDescriptor', 'IsValidSid', 'LogonUserA', 'LogonUserW',
+ 'LookupAccountNameA', 'LookupAccountNameW', 'LookupAccountSidA', 'LookupAccountSidW',
+ 'LookupPrivilegeDisplayNameA', 'LookupPrivilegeDisplayNameW', 'LookupPrivilegeNameA',
+ 'LookupPrivilegeNameW', 'LookupPrivilegeValueA', 'LookupPrivilegeValueW',
+ 'LookupSecurityDescriptorPartsA', 'LookupSecurityDescriptorPartsW', 'MakeAbsoluteSD',
+ 'MakeSelfRelativeSD', 'MapGenericMask', 'ObjectCloseAuditAlarmA',
+ 'ObjectCloseAuditAlarmW', 'ObjectDeleteAuditAlarmA', 'ObjectDeleteAuditAlarmW',
+ 'ObjectOpenAuditAlarmA', 'ObjectOpenAuditAlarmW', 'ObjectPrivilegeAuditAlarmA',
+ 'ObjectPrivilegeAuditAlarmW', 'OpenProcessToken', 'OpenThreadToken', 'PrivilegeCheck',
+ 'PrivilegedServiceAuditAlarmA', 'PrivilegedServiceAuditAlarmW', 'RevertToSelf',
+ 'SetAclInformation', 'SetEntriesInAclA', 'SetEntriesInAclW', 'SetFileSecurityA',
+ 'SetFileSecurityW', 'SetKernelObjectSecurity', 'SetNamedSecurityInfoA',
+ 'SetNamedSecurityInfoW', 'SetPrivateObjectSecurity', 'SetPrivateObjectSecurityEx',
+ 'SetSecurityDescriptorControl', 'SetSecurityDescriptorDacl',
+ 'SetSecurityDescriptorGroup', 'SetSecurityDescriptorOwner',
+ 'SetSecurityDescriptorSacl', 'SetSecurityInfo', 'SetThreadToken',
+ 'SetTokenInformation', 'SetUserObjectSecurity', 'ChangeServiceConfig2A',
+ 'ChangeServiceConfig2W', 'ChangeServiceConfigA', 'ChangeServiceConfigW',
+ 'CloseServiceHandle', 'ControlService', 'CreateServiceA', 'CreateServiceW',
+ 'DeleteService', 'EnumDependentServicesA', 'EnumDependentServicesW',
+ 'EnumServicesStatusA', 'EnumServicesStatusW', 'GetServiceDisplayNameA',
+ 'GetServiceDisplayNameW', 'GetServiceKeyNameA', 'GetServiceKeyNameW',
+ 'LockServiceDatabase', 'NotifyBootConfigStatus', 'OpenSCManagerA', 'OpenSCManagerW',
+ 'OpenServiceA', 'OpenServiceW', 'QueryServiceConfig2A', 'QueryServiceConfig2W',
+ 'QueryServiceConfigA', 'QueryServiceConfigW', 'QueryServiceLockStatusA',
+ 'QueryServiceLockStatusW', 'QueryServiceObjectSecurity', 'QueryServiceStatus',
+ 'RegisterServiceCtrlHandlerA', 'RegisterServiceCtrlHandlerW',
+ 'SetServiceObjectSecurity', 'SetServiceStatus', 'StartServiceA',
+ 'StartServiceCtrlDispatcherA', 'StartServiceCtrlDispatcherW', 'StartServiceW',
+ 'UnlockServiceDatabase',
+
+ 'MultinetGetConnectionPerformanceA', 'MultinetGetConnectionPerformanceW',
+ 'NetAlertRaise', 'NetAlertRaiseEx', 'NetApiBufferAllocate', 'NetApiBufferFree',
+ 'NetApiBufferReallocate', 'NetApiBufferSize', 'NetConnectionEnum', 'NetFileClose',
+ 'NetFileGetInfo', 'NetGetAnyDCName', 'NetGetDCName', 'NetGetDisplayInformationIndex',
+ 'NetGroupAdd', 'NetGroupAddUser', 'NetGroupDel', 'NetGroupDelUser', 'NetGroupEnum',
+ 'NetGroupGetInfo', 'NetGroupGetUsers', 'NetGroupSetInfo', 'NetGroupSetUsers',
+ 'NetLocalGroupAdd', 'NetLocalGroupAddMember', 'NetLocalGroupAddMembers',
+ 'NetLocalGroupDel', 'NetLocalGroupDelMember', 'NetLocalGroupDelMembers',
+ 'NetLocalGroupEnum', 'NetLocalGroupGetInfo', 'NetLocalGroupGetMembers',
+ 'NetLocalGroupSetInfo', 'NetLocalGroupSetMembers', 'NetMessageBufferSend',
+ 'NetMessageNameAdd', 'NetMessageNameDel', 'NetMessageNameEnum',
+ 'NetMessageNameGetInfo', 'NetQueryDisplayInformation', 'NetRemoteComputerSupports',
+ 'NetRemoteTOd', 'NetReplExportDirAdd', 'NetReplExportDirDel', 'NetReplExportDirEnum',
+ 'NetReplExportDirGetInfo', 'NetReplExportDirLock', 'NetReplExportDirSetInfo',
+ 'NetReplExportDirUnlock', 'NetReplGetInfo', 'NetReplImportDirAdd',
+ 'NetReplImportDirDel', 'NetReplImportDirEnum', 'NetReplImportDirGetInfo',
+ 'NetReplImportDirLock', 'NetReplImportDirUnlock', 'NetReplSetInfo',
+ 'NetScheduleJobAdd', 'NetScheduleJobDel', 'NetScheduleJobEnum',
+ 'NetScheduleJobGetInfo', 'NetServerComputerNameAdd', 'NetServerComputerNameDel',
+ 'NetServerDiskEnum', 'NetServerEnum', 'NetServerEnumEx', 'NetServerGetInfo',
+ 'NetServerSetInfo', 'NetServerTransportAdd', 'NetServerTransportAddEx',
+ 'NetServerTransportDel', 'NetServerTransportEnum', 'NetSessionDel', 'NetSessionEnum',
+ 'NetSessionGetInfo', 'NetShareAdd', 'NetShareCheck', 'NetShareDel', 'NetShareEnum',
+ 'NetShareGetInfo', 'NetShareSetInfo', 'NetStatisticsGet', 'NetUseAdd', 'NetUseDel',
+ 'NetUseEnum', 'NetUseGetInfo', 'NetUserAdd', 'NetUserChangePassword', 'NetUserDel',
+ 'NetUserEnum', 'NetUserGetGroups', 'NetUserGetInfo', 'NetUserGetLocalGroups',
+ 'NetUserModalsGet', 'NetUserModalsSet', 'NetUserSetGroups', 'NetUserSetInfo',
+ 'NetWkstaGetInfo', 'NetWkstaSetInfo', 'NetWkstaTransportAdd', 'NetWkstaTransportDel',
+ 'NetWkstaTransportEnum', 'NetWkstaUserEnum', 'NetWkstaUserGetInfo',
+ 'NetWkstaUserSetInfo', 'WNetAddConnection2A', 'WNetAddConnection2W',
+ 'WNetAddConnection3A', 'WNetAddConnection3W', 'WNetAddConnectionA',
+ 'WNetAddConnectionW', 'WNetCancelConnection2A', 'WNetCancelConnection2W',
+ 'WNetCancelConnectionA', 'WNetCancelConnectionW', 'WNetCloseEnum',
+ 'WNetConnectionDialog', 'WNetConnectionDialog1A', 'WNetConnectionDialog1W',
+ 'WNetDisconnectDialog', 'WNetDisconnectDialog1A', 'WNetDisconnectDialog1W',
+ 'WNetEnumResourceA', 'WNetEnumResourceW', 'WNetGetConnectionA', 'WNetGetConnectionW',
+ 'WNetGetLastErrorA', 'WNetGetLastErrorW', 'WNetGetNetworkInformationA',
+ 'WNetGetNetworkInformationW', 'WNetGetProviderNameA', 'WNetGetProviderNameW',
+ 'WNetGetResourceInformationA', 'WNetGetResourceInformationW',
+ 'WNetGetResourceParentA', 'WNetGetResourceParentW', 'WNetGetUniversalNameA',
+ 'WNetGetUniversalNameW', 'WNetGetUserA', 'WNetGetUserW', 'WNetOpenEnumA',
+ 'WNetOpenEnumW', 'WNetUseConnectionA', 'WnetUseConnectionW',
+
+ 'accept', 'bind', 'closesocket', 'connect', 'gethostbyaddr', 'gethostbyname',
+ 'gethostname', 'getpeername', 'getprotobyname', 'getprotobynumber', 'getservbyname',
+ 'getservbyport', 'getsockname', 'getsockopt', 'htonl', 'htons', 'inet_addr',
+ 'inet_ntoa', 'ioctlsocket', 'listen', 'ntohl', 'ntohs', 'recv', 'recvfrom', 'select',
+ 'send', 'sendto', 'setsockopt', 'shutdown', 'socket', 'WSAAccept',
+ 'WSAAddressToStringA', 'WSAAddressToStringW', 'WSAAsyncGetHostByAddr',
+ 'WSAAsyncGetHostByName', 'WSAAsyncGetProtoByName', 'WSAAsyncGetProtoByNumber',
+ 'WSAAsyncGetServByName', 'WSAAsyncGetServByPort', 'WSAAsyncSelect',
+ 'WSACancelAsyncRequest', 'WSACancelBlockingCall', 'WSACleanup', 'WSACloseEvent',
+ 'WSAConnect', 'WSACreateEvent', 'WSADuplicateSocketA', 'WSADuplicateSocketW',
+ 'WSAEnumNameSpaceProvidersA', 'WSAEnumNameSpaceProvidersW', 'WSAEnumNetworkEvents',
+ 'WSAEnumProtocolsA', 'WSAEnumProtocolsW', 'WSAEventSelect', 'WSAGetLastError',
+ 'WSAGetOverlappedResult', 'WSAGetQOSByName', 'WSAGetServiceClassInfoA',
+ 'WSAGetServiceClassInfoW', 'WSAGetServiceClassNameByClassIdA',
+ 'WSAGetServiceClassNameByClassIdW', 'WSAHtonl', 'WSAHtons', 'WSAInstallServiceClassA',
+ 'WSAInstallServiceClassW', 'WSAIoctl', 'WSAIsBlocking', 'WSAJoinLeaf',
+ 'WSALookupServiceBeginA', 'WSALookupServiceBeginW', 'WSALookupServiceEnd',
+ 'WSALookupServiceNextA', 'WSALookupServiceNextW', 'WSANtohl', 'WSANtohs',
+ 'WSAProviderConfigChange', 'WSARecv', 'WSARecvDisconnect', 'WSARecvFrom',
+ 'WSARemoveServiceClass', 'WSAResetEvent', 'WSASend', 'WSASendDisconnect', 'WSASendTo',
+ 'WSASetBlockingHook', 'WSASetEvent', 'WSASetLastError', 'WSASetServiceA',
+ 'WSASetServiceW', 'WSASocketA', 'WSASocketW', 'WSAStartup', 'WSAStringToAddressA',
+ 'WSAStringToAddressW', 'WSAUnhookBlockingHook', 'WSAWaitForMultipleEvents',
+ 'WSCDeinstallProvider', 'WSCEnableNSProvider', 'WSCEnumProtocols',
+ 'WSCGetProviderPath', 'WSCInstallNameSpace', 'WSCInstallProvider',
+ 'WSCUnInstallNameSpace',
+
+ 'ContinueDebugEvent', 'DebugActiveProcess', 'DebugBreak', 'FatalExit',
+ 'FlushInstructionCache', 'GetThreadContext', 'GetThreadSelectorEntry',
+ 'IsDebuggerPresent', 'OutputDebugStringA', 'OutputDebugStringW', 'ReadProcessMemory',
+ 'SetDebugErrorLevel', 'SetThreadContext', 'WaitForDebugEvent', 'WriteProcessMemory',
+
+ 'CloseHandle', 'DuplicateHandle', 'GetHandleInformation', 'SetHandleInformation',
+
+ 'AdjustWindowRect', 'AdjustWindowRectEx', 'AllowSetForegroundWindow',
+ 'AnimateWindow', 'AnyPopup', 'ArrangeIconicWindows', 'BeginDeferWindowPos',
+ 'BringWindowToTop', 'CascadeWindows', 'ChildWindowFromPoint',
+ 'ChildWindowFromPointEx', 'CloseWindow', 'CreateWindowExA', 'CreateWindowExW',
+ 'DeferWindowPos', 'DestroyWindow', 'EndDeferWindowPos', 'EnumChildWindows',
+ 'EnumThreadWindows', 'EnumWindows', 'FindWindowA', 'FindWindowExA', 'FindWindowExW',
+ 'FindWindowW', 'GetAltTabInfoA', 'GetAltTabInfoW', 'GetAncestor', 'GetClientRect',
+ 'GetDesktopWindow', 'GetForegroundWindow', 'GetGUIThreadInfo', 'GetLastActivePopup',
+ 'GetLayout', 'GetParent', 'GetProcessDefaultLayout', 'GetTitleBarInf', 'GetTopWindow',
+ 'GetWindow', 'GetWindowInfo', 'GetWindowModuleFileNameA', 'GetWindowModuleFileNameW',
+ 'GetWindowPlacement', 'GetWindowRect', 'GetWindowTextA', 'GetWindowTextLengthA',
+ 'GetWindowTextLengthW', 'GetWindowTextW', 'GetWindowThreadProcessId', 'IsChild',
+ 'IsIconic', 'IsWindow', 'IsWindowUnicode', 'IsWindowVisible', 'IsZoomed',
+ 'LockSetForegroundWindow', 'MoveWindow', 'OpenIcon', 'RealChildWindowFromPoint',
+ 'RealGetWindowClassA', 'RealGetWindowClassW', 'SetForegroundWindow',
+ 'SetLayeredWindowAttributes', 'SetLayout', 'SetParent', 'SetProcessDefaultLayout',
+ 'SetWindowPlacement', 'SetWindowPos', 'SetWindowTextA', 'SetWindowTextW',
+ 'ShowOwnedPopups', 'ShowWindow', 'ShowWindowAsync', 'TileWindows',
+ 'UpdateLayeredWindow', 'WindowFromPoint',
+
+ 'CreateDialogIndirectParamA', 'CreateDialogIndirectParamW', 'CreateDialogParamA',
+ 'CreateDialogParamW', 'DefDlgProcA', 'DefDlgProcW', 'DialogBoxIndirectParamA',
+ 'DialogBoxIndirectParamW', 'DialogBoxParamA', 'DialogBoxParamW', 'EndDialog',
+ 'GetDialogBaseUnits', 'GetDlgCtrlID', 'GetDlgItem', 'GetDlgItemInt',
+ 'GetDlgItemTextA', 'GetDlgItemTextW', 'GetNextDlgGroupItem', 'GetNextDlgTabItem',
+ 'IsDialogMessageA', 'IsDialogMessageW', 'MapDialogRect', 'MessageBoxA',
+ 'MessageBoxExA', 'MessageBoxExW', 'MessageBoxIndirectA', 'MessageBoxIndirectW',
+ 'MessageBoxW', 'SendDlgItemMessageA', 'SendDlgItemMessageW', 'SetDlgItemInt',
+ 'SetDlgItemTextA', 'SetDlgItemTextW',
+
+ 'GetWriteWatch', 'GlobalMemoryStatus', 'GlobalMemoryStatusEx', 'IsBadCodePtr',
+ 'IsBadReadPtr', 'IsBadStringPtrA', 'IsBadStringPtrW', 'IsBadWritePtr',
+ 'ResetWriteWatch', 'AllocateUserPhysicalPages', 'FreeUserPhysicalPages',
+ 'MapUserPhysicalPages', 'MapUserPhysicalPagesScatter', 'GlobalAlloc', 'GlobalFlags',
+ 'GlobalFree', 'GlobalHandle', 'GlobalLock', 'GlobalReAlloc', 'GlobalSize',
+ 'GlobalUnlock', 'LocalAlloc', 'LocalFlags', 'LocalFree', 'LocalHandle', 'LocalLock',
+ 'LocalReAlloc', 'LocalSize', 'LocalUnlock', 'GetProcessHeap', 'GetProcessHeaps',
+ 'HeapAlloc', 'HeapCompact', 'HeapCreate', 'HeapDestroy', 'HeapFree', 'HeapLock',
+ 'HeapReAlloc', 'HeapSize', 'HeapUnlock', 'HeapValidate', 'HeapWalk', 'VirtualAlloc',
+ 'VirtualAllocEx', 'VirtualFree', 'VirtualFreeEx', 'VirtualLock', 'VirtualProtect',
+ 'VirtualProtectEx', 'VirtualQuery', 'VirtualQueryEx', 'VirtualUnlock',
+ 'GetFreeSpace', 'GlobalCompact', 'GlobalFix', 'GlobalUnfix', 'GlobalUnWire',
+ 'GlobalWire', 'IsBadHugeReadPtr', 'IsBadHugeWritePtr', 'LocalCompact', 'LocalShrink',
+
+ 'GetClassInfoA', 'GetClassInfoW', 'GetClassInfoExA', 'GetClassInfoExW',
+ 'GetClassLongA', 'GetClassLongW', 'GetClassLongPtrA', 'GetClassLongPtrW',
+ 'RegisterClassA', 'RegisterClassW', 'RegisterClassExA', 'RegisterClassExW',
+ 'SetClassLongA', 'SetClassLongW', 'SetClassLongPtrA', 'SetClassLongPtrW',
+ 'SetWindowLongA', 'SetWindowLongW', 'SetWindowLongPtrA', 'SetWindowLongPtrW',
+ 'UnregisterClassA', 'UnregisterClassW', 'GetClassWord', 'GetWindowWord',
+ 'SetClassWord', 'SetWindowWord'
+ ),
+ // Native API
+ 6 => array(
+ 'CsrAllocateCaptureBuffer', 'CsrAllocateCapturePointer', 'CsrAllocateMessagePointer',
+ 'CsrCaptureMessageBuffer', 'CsrCaptureMessageString', 'CsrCaptureTimeout',
+ 'CsrClientCallServer', 'CsrClientConnectToServer', 'CsrFreeCaptureBuffer',
+ 'CsrIdentifyAlertableThread', 'CsrNewThread', 'CsrProbeForRead', 'CsrProbeForWrite',
+ 'CsrSetPriorityClass',
+
+ 'LdrAccessResource', 'LdrDisableThreadCalloutsForDll', 'LdrEnumResources',
+ 'LdrFindEntryForAddress', 'LdrFindResource_U', 'LdrFindResourceDirectory_U',
+ 'LdrGetDllHandle', 'LdrGetProcedureAddress', 'LdrInitializeThunk', 'LdrLoadDll',
+ 'LdrProcessRelocationBlock', 'LdrQueryImageFileExecutionOptions',
+ 'LdrQueryProcessModuleInformation', 'LdrShutdownProcess', 'LdrShutdownThread',
+ 'LdrUnloadDll', 'LdrVerifyImageMatchesChecksum',
+
+ 'NtAcceptConnectPort', 'ZwAcceptConnectPort', 'NtCompleteConnectPort',
+ 'ZwCompleteConnectPort', 'NtConnectPort', 'ZwConnectPort', 'NtCreatePort',
+ 'ZwCreatePort', 'NtImpersonateClientOfPort', 'ZwImpersonateClientOfPort',
+ 'NtListenPort', 'ZwListenPort', 'NtQueryInformationPort', 'ZwQueryInformationPort',
+ 'NtReadRequestData', 'ZwReadRequestData', 'NtReplyPort', 'ZwReplyPort',
+ 'NtReplyWaitReceivePort', 'ZwReplyWaitReceivePort', 'NtReplyWaitReplyPort',
+ 'ZwReplyWaitReplyPort', 'NtRequestPort', 'ZwRequestPort', 'NtRequestWaitReplyPort',
+ 'ZwRequestWaitReplyPort', 'NtSecureConnectPort', 'ZwSecureConnectPort',
+ 'NtWriteRequestData', 'ZwWriteRequestData',
+
+ 'NtAccessCheck', 'ZwAccessCheck', 'NtAccessCheckAndAuditAlarm',
+ 'ZwAccessCheckAndAuditAlarm', 'NtAccessCheckByType', 'ZwAccessCheckByType',
+ 'NtAccessCheckByTypeAndAuditAlarm', 'ZwAccessCheckByTypeAndAuditAlarm',
+ 'NtAccessCheckByTypeResultList', 'ZwAccessCheckByTypeResultList',
+ 'NtAdjustGroupsToken', 'ZwAdjustGroupsToken', 'NtAdjustPrivilegesToken',
+ 'ZwAdjustPrivilegesToken', 'NtCloseObjectAuditAlarm', 'ZwCloseObjectAuditAlarm',
+ 'NtCreateToken', 'ZwCreateToken', 'NtDeleteObjectAuditAlarm',
+ 'ZwDeleteObjectAuditAlarm', 'NtDuplicateToken', 'ZwDuplicateToken',
+ 'NtFilterToken', 'ZwFilterToken', 'NtImpersonateThread', 'ZwImpersonateThread',
+ 'NtOpenObjectAuditAlarm', 'ZwOpenObjectAuditAlarm', 'NtOpenProcessToken',
+ 'ZwOpenProcessToken', 'NtOpenThreadToken', 'ZwOpenThreadToken', 'NtPrivilegeCheck',
+ 'ZwPrivilegeCheck', 'NtPrivilegedServiceAuditAlarm', 'ZwPrivilegedServiceAuditAlarm',
+ 'NtPrivilegeObjectAuditAlarm', 'ZwPrivilegeObjectAuditAlarm',
+ 'NtQueryInformationToken', 'ZwQueryInformationToken', 'NtQuerySecurityObject',
+ 'ZwQuerySecurityObject', 'NtSetInformationToken', 'ZwSetInformationToken',
+ 'NtSetSecurityObject', 'ZwSetSecurityObject',
+
+ 'NtAddAtom', 'ZwAddAtom', 'NtDeleteAtom', 'ZwDeleteAtom', 'NtFindAtom', 'ZwFindAtom',
+ 'NtQueryInformationAtom', 'ZwQueryInformationAtom',
+
+ 'NtAlertResumeThread', 'ZwAlertResumeThread', 'NtAlertThread', 'ZwAlertThread',
+ 'NtCreateProcess', 'ZwCreateProcess', 'NtCreateThread', 'ZwCreateThread',
+ 'NtCurrentTeb', 'NtDelayExecution', 'ZwDelayExecution', 'NtGetContextThread',
+ 'ZwGetContextThread', 'NtOpenProcess', 'ZwOpenProcess', 'NtOpenThread',
+ 'ZwOpenThread', 'NtQueryInformationProcess', 'ZwQueryInformationProcess',
+ 'NtQueryInformationThread', 'ZwQueryInformationThread', 'NtQueueApcThread',
+ 'ZwQueueApcThread', 'NtResumeThread', 'ZwResumeThread', 'NtSetContextThread',
+ 'ZwSetContextThread', 'NtSetHighWaitLowThread', 'ZwSetHighWaitLowThread',
+ 'NtSetInformationProcess', 'ZwSetInformationProcess', 'NtSetInformationThread',
+ 'ZwSetInformationThread', 'NtSetLowWaitHighThread', 'ZwSetLowWaitHighThread',
+ 'NtSuspendThread', 'ZwSuspendThread', 'NtTerminateProcess', 'ZwTerminateProcess',
+ 'NtTerminateThread', 'ZwTerminateThread', 'NtTestAlert', 'ZwTestAlert',
+ 'NtYieldExecution', 'ZwYieldExecution',
+
+ 'NtAllocateVirtualMemory', 'ZwAllocateVirtualMemory', 'NtAllocateVirtualMemory64',
+ 'ZwAllocateVirtualMemory64', 'NtAreMappedFilesTheSame', 'ZwAreMappedFilesTheSame',
+ 'NtCreateSection', 'ZwCreateSection', 'NtExtendSection', 'ZwExtendSection',
+ 'NtFlushVirtualMemory', 'ZwFlushVirtualMemory', 'NtFreeVirtualMemory',
+ 'ZwFreeVirtualMemory', 'NtFreeVirtualMemory64', 'ZwFreeVirtualMemory64',
+ 'NtLockVirtualMemory', 'ZwLockVirtualMemory', 'NtMapViewOfSection',
+ 'ZwMapViewOfSection', 'NtMapViewOfVlmSection', 'ZwMapViewOfVlmSection',
+ 'NtOpenSection', 'ZwOpenSection', 'NtProtectVirtualMemory', 'ZwProtectVirtualMemory',
+ 'NtProtectVirtualMemory64', 'ZwProtectVirtualMemory64', 'NtQueryVirtualMemory',
+ 'ZwQueryVirtualMemory', 'NtQueryVirtualMemory64', 'ZwQueryVirtualMemory64',
+ 'NtReadVirtualMemory', 'ZwReadVirtualMemory', 'NtReadVirtualMemory64',
+ 'ZwReadVirtualMemory64', 'NtUnlockVirtualMemory', 'ZwUnlockVirtualMemory',
+ 'NtUnmapViewOfSection', 'ZwUnmapViewOfSection', 'NtUnmapViewOfVlmSection',
+ 'ZwUnmapViewOfVlmSection', 'NtWriteVirtualMemory', 'ZwWriteVirtualMemory',
+ 'NtWriteVirtualMemory64', 'ZwWriteVirtualMemory64',
+
+ 'NtAssignProcessToJobObject', 'ZwAssignProcessToJobObject', 'NtCreateJobObject',
+ 'ZwCreateJobObject', 'NtOpenJobObject', 'ZwOpenJobObject',
+ 'NtQueryInformationJobObject', 'ZwQueryInformationJobObject',
+ 'NtSetInformationJobObject', 'ZwSetInformationJobObject', 'NtTerminateJobObject',
+ 'ZwTerminateJobObject',
+
+ 'NtCancelIoFile', 'ZwCancelIoFile', 'NtCreateFile', 'ZwCreateFile',
+ 'NtCreateIoCompletion', 'ZwCreateIoCompletion', 'NtDeleteFile', 'ZwDeleteFile',
+ 'NtDeviceIoControlFile', 'ZwDeviceIoControlFile', 'NtFlushBuffersFile',
+ 'ZwFlushBuffersFile', 'NtFsControlFile', 'ZwFsControlFile', 'NtLockFile', 'ZwLockFile',
+ 'NtNotifyChangeDirectoryFile', 'ZwNotifyChangeDirectoryFile', 'NtOpenFile',
+ 'ZwOpenFile', 'NtOpenIoCompletion', 'ZwOpenIoCompletion', 'NtQueryAttributesFile',
+ 'ZwQueryAttributesFile', 'NtQueryDirectoryFile', 'ZwQueryDirectoryFile',
+ 'NtQueryEaFile', 'ZwQueryEaFile', 'NtQueryIoCompletion', 'ZwQueryIoCompletion',
+ 'NtQueryQuotaInformationFile', 'ZwQueryQuotaInformationFile',
+ 'NtQueryVolumeInformationFile', 'ZwQueryVolumeInformationFile', 'NtReadFile',
+ 'ZwReadFile', 'NtReadFile64', 'ZwReadFile64', 'NtReadFileScatter', 'ZwReadFileScatter',
+ 'NtRemoveIoCompletion', 'ZwRemoveIoCompletion', 'NtSetEaFile', 'ZwSetEaFile',
+ 'NtSetInformationFile', 'ZwSetInformationFile', 'NtSetIoCompletion',
+ 'ZwSetIoCompletion', 'NtSetQuotaInformationFile', 'ZwSetQuotaInformationFile',
+ 'NtSetVolumeInformationFile', 'ZwSetVolumeInformationFile', 'NtUnlockFile',
+ 'ZwUnlockFile', 'NtWriteFile', 'ZwWriteFile', 'NtWriteFile64','ZwWriteFile64',
+ 'NtWriteFileGather', 'ZwWriteFileGather', 'NtQueryFullAttributesFile',
+ 'ZwQueryFullAttributesFile', 'NtQueryInformationFile', 'ZwQueryInformationFile',
+
+ 'RtlAbortRXact', 'RtlAbsoluteToSelfRelativeSD', 'RtlAcquirePebLock',
+ 'RtlAcquireResourceExclusive', 'RtlAcquireResourceShared', 'RtlAddAccessAllowedAce',
+ 'RtlAddAccessDeniedAce', 'RtlAddAce', 'RtlAddActionToRXact', 'RtlAddAtomToAtomTable',
+ 'RtlAddAttributeActionToRXact', 'RtlAddAuditAccessAce', 'RtlAddCompoundAce',
+ 'RtlAdjustPrivilege', 'RtlAllocateAndInitializeSid', 'RtlAllocateHandle',
+ 'RtlAllocateHeap', 'RtlAnsiCharToUnicodeChar', 'RtlAnsiStringToUnicodeSize',
+ 'RtlAnsiStringToUnicodeString', 'RtlAppendAsciizToString', 'RtlAppendStringToString',
+ 'RtlAppendUnicodeStringToString', 'RtlAppendUnicodeToString', 'RtlApplyRXact',
+ 'RtlApplyRXactNoFlush', 'RtlAreAllAccessesGranted', 'RtlAreAnyAccessesGranted',
+ 'RtlAreBitsClear', 'RtlAreBitsSet', 'RtlAssert', 'RtlCaptureStackBackTrace',
+ 'RtlCharToInteger', 'RtlCheckRegistryKey', 'RtlClearAllBits', 'RtlClearBits',
+ 'RtlClosePropertySet', 'RtlCompactHeap', 'RtlCompareMemory', 'RtlCompareMemoryUlong',
+ 'RtlCompareString', 'RtlCompareUnicodeString', 'RtlCompareVariants',
+ 'RtlCompressBuffer', 'RtlConsoleMultiByteToUnicodeN', 'RtlConvertExclusiveToShared',
+ 'RtlConvertLongToLargeInteger', 'RtlConvertPropertyToVariant',
+ 'RtlConvertSharedToExclusive', 'RtlConvertSidToUnicodeString',
+ 'RtlConvertUiListToApiList', 'RtlConvertUlongToLargeInteger',
+ 'RtlConvertVariantToProperty', 'RtlCopyLuid', 'RtlCopyLuidAndAttributesArray',
+ 'RtlCopySecurityDescriptor', 'RtlCopySid', 'RtlCopySidAndAttributesArray',
+ 'RtlCopyString', 'RtlCopyUnicodeString', 'RtlCreateAcl', 'RtlCreateAndSetSD',
+ 'RtlCreateAtomTable', 'RtlCreateEnvironment', 'RtlCreateHeap',
+ 'RtlCreateProcessParameters', 'RtlCreatePropertySet', 'RtlCreateQueryDebugBuffer',
+ 'RtlCreateRegistryKey', 'RtlCreateSecurityDescriptor', 'RtlCreateTagHeap',
+ 'RtlCreateUnicodeString', 'RtlCreateUnicodeStringFromAsciiz', 'RtlCreateUserProcess',
+ 'RtlCreateUserSecurityObject', 'RtlCreateUserThread', 'RtlCustomCPToUnicodeN',
+ 'RtlCutoverTimeToSystemTime', 'RtlDecompressBuffer', 'RtlDecompressFragment',
+ 'RtlDelete', 'RtlDeleteAce', 'RtlDeleteAtomFromAtomTable', 'RtlDeleteCriticalSection',
+ 'RtlDeleteElementGenericTable', 'RtlDeleteNoSplay', 'RtlDeleteRegistryValue',
+ 'RtlDeleteResource', 'RtlDeleteSecurityObject', 'RtlDeNormalizeProcessParams',
+ 'RtlDestroyAtomTable', 'RtlDestroyEnvironment', 'RtlDestroyHandleTable',
+ 'RtlDestroyHeap', 'RtlDestroyProcessParameters', 'RtlDestroyQueryDebugBuffer',
+ 'RtlDetermineDosPathNameType_U', 'RtlDoesFileExists_U', 'RtlDosPathNameToNtPathName_U',
+ 'RtlDosSearchPath_U', 'RtlDowncaseUnicodeString', 'RtlDumpResource',
+ 'RtlEmptyAtomTable', 'RtlEnlargedIntegerMultiply', 'RtlEnlargedUnsignedDivide',
+ 'RtlEnlargedUnsignedMultiply', 'RtlEnterCriticalSection', 'RtlEnumerateGenericTable',
+ 'RtlEnumerateGenericTableWithoutSplaying', 'RtlEnumerateProperties',
+ 'RtlEnumProcessHeaps', 'RtlEqualComputerName', 'RtlEqualDomainName', 'RtlEqualLuid',
+ 'RtlEqualPrefixSid', 'RtlEqualSid', 'RtlEqualString', 'RtlEqualUnicodeString',
+ 'RtlEraseUnicodeString', 'RtlExpandEnvironmentStrings_U', 'RtlExtendedIntegerMultiply',
+ 'RtlExtendedLargeIntegerDivide', 'RtlExtendedMagicDivide', 'RtlExtendHeap',
+ 'RtlFillMemory', 'RtlFillMemoryUlong', 'RtlFindClearBits', 'RtlFindClearBitsAndSet',
+ 'RtlFindLongestRunClear', 'RtlFindLongestRunSet', 'RtlFindMessage', 'RtlFindSetBits',
+ 'RtlFindSetBitsAndClear', 'RtlFirstFreeAce', 'RtlFlushPropertySet',
+ 'RtlFormatCurrentUserKeyPath', 'RtlFormatMessage', 'RtlFreeAnsiString',
+ 'RtlFreeHandle', 'RtlFreeHeap', 'RtlFreeOemString', 'RtlFreeSid',
+ 'RtlFreeUnicodeString', 'RtlFreeUserThreadStack', 'RtlGenerate8dot3Name', 'RtlGetAce',
+ 'RtlGetCallersAddress', 'RtlGetCompressionWorkSpaceSize',
+ 'RtlGetControlSecurityDescriptor', 'RtlGetCurrentDirectory_U',
+ 'RtlGetDaclSecurityDescriptor', 'RtlGetElementGenericTable', 'RtlGetFullPathName_U',
+ 'RtlGetGroupSecurityDescriptor', 'RtlGetLongestNtPathLength', 'RtlGetNtGlobalFlags',
+ 'RtlGetNtProductType', 'RtlGetOwnerSecurityDescriptor', 'RtlGetProcessHeaps',
+ 'RtlGetSaclSecurityDescriptor', 'RtlGetUserInfoHeap', 'RtlGuidToPropertySetName',
+ 'RtlIdentifierAuthoritySid', 'RtlImageDirectoryEntryToData', 'RtlImageNtHeader',
+ 'RtlImageRvaToSection', 'RtlImageRvaToVa', 'RtlImpersonateSelf', 'RtlInitAnsiString',
+ 'RtlInitCodePageTable', 'RtlInitializeAtomPackage', 'RtlInitializeBitMap',
+ 'RtlInitializeContext', 'RtlInitializeCriticalSection',
+ 'RtlInitializeCriticalSectionAndSpinCount', 'RtlInitializeGenericTable',
+ 'RtlInitializeHandleTable', 'RtlInitializeResource', 'RtlInitializeRXact',
+ 'RtlInitializeSid', 'RtlInitNlsTables', 'RtlInitString', 'RtlInitUnicodeString',
+ 'RtlInsertElementGenericTable', 'RtlIntegerToChar', 'RtlIntegerToUnicodeString',
+ 'RtlIsDosDeviceName_U', 'RtlIsGenericTableEmpty', 'RtlIsNameLegalDOS8Dot3',
+ 'RtlIsTextUnicode', 'RtlIsValidHandle', 'RtlIsValidIndexHandle', 'RtlLargeIntegerAdd',
+ 'RtlLargeIntegerArithmeticShift', 'RtlLargeIntegerDivide', 'RtlLargeIntegerNegate',
+ 'RtlLargeIntegerShiftLeft', 'RtlLargeIntegerShiftRight', 'RtlLargeIntegerSubtract',
+ 'RtlLargeIntegerToChar', 'RtlLeaveCriticalSection', 'RtlLengthRequiredSid',
+ 'RtlLengthSecurityDescriptor', 'RtlLengthSid', 'RtlLocalTimeToSystemTime',
+ 'RtlLockHeap', 'RtlLookupAtomInAtomTable', 'RtlLookupElementGenericTable',
+ 'RtlMakeSelfRelativeSD', 'RtlMapGenericMask', 'RtlMoveMemory',
+ 'RtlMultiByteToUnicodeN', 'RtlMultiByteToUnicodeSize', 'RtlNewInstanceSecurityObject',
+ 'RtlNewSecurityGrantedAccess', 'RtlNewSecurityObject', 'RtlNormalizeProcessParams',
+ 'RtlNtStatusToDosError', 'RtlNumberGenericTableElements', 'RtlNumberOfClearBits',
+ 'RtlNumberOfSetBits', 'RtlOemStringToUnicodeSize', 'RtlOemStringToUnicodeString',
+ 'RtlOemToUnicodeN', 'RtlOnMappedStreamEvent', 'RtlOpenCurrentUser',
+ 'RtlPcToFileHeader', 'RtlPinAtomInAtomTable', 'RtlpNtCreateKey',
+ 'RtlpNtEnumerateSubKey', 'RtlpNtMakeTemporaryKey', 'RtlpNtOpenKey',
+ 'RtlpNtQueryValueKey', 'RtlpNtSetValueKey', 'RtlPrefixString',
+ 'RtlPrefixUnicodeString', 'RtlPropertySetNameToGuid', 'RtlProtectHeap',
+ 'RtlpUnWaitCriticalSection', 'RtlpWaitForCriticalSection', 'RtlQueryAtomInAtomTable',
+ 'RtlQueryEnvironmentVariable_U', 'RtlQueryInformationAcl',
+ 'RtlQueryProcessBackTraceInformation', 'RtlQueryProcessDebugInformation',
+ 'RtlQueryProcessHeapInformation', 'RtlQueryProcessLockInformation',
+ 'RtlQueryProperties', 'RtlQueryPropertyNames', 'RtlQueryPropertySet',
+ 'RtlQueryRegistryValues', 'RtlQuerySecurityObject', 'RtlQueryTagHeap',
+ 'RtlQueryTimeZoneInformation', 'RtlRaiseException', 'RtlRaiseStatus', 'RtlRandom',
+ 'RtlReAllocateHeap', 'RtlRealPredecessor', 'RtlRealSuccessor', 'RtlReleasePebLock',
+ 'RtlReleaseResource', 'RtlRemoteCall', 'RtlResetRtlTranslations',
+ 'RtlRunDecodeUnicodeString', 'RtlRunEncodeUnicodeString', 'RtlSecondsSince1970ToTime',
+ 'RtlSecondsSince1980ToTime', 'RtlSelfRelativeToAbsoluteSD', 'RtlSetAllBits',
+ 'RtlSetAttributesSecurityDescriptor', 'RtlSetBits', 'RtlSetCriticalSectionSpinCount',
+ 'RtlSetCurrentDirectory_U', 'RtlSetCurrentEnvironment', 'RtlSetDaclSecurityDescriptor',
+ 'RtlSetEnvironmentVariable', 'RtlSetGroupSecurityDescriptor', 'RtlSetInformationAcl',
+ 'RtlSetOwnerSecurityDescriptor', 'RtlSetProperties', 'RtlSetPropertyNames',
+ 'RtlSetPropertySetClassId', 'RtlSetSaclSecurityDescriptor', 'RtlSetSecurityObject',
+ 'RtlSetTimeZoneInformation', 'RtlSetUnicodeCallouts', 'RtlSetUserFlagsHeap',
+ 'RtlSetUserValueHeap', 'RtlSizeHeap', 'RtlSplay', 'RtlStartRXact',
+ 'RtlSubAuthorityCountSid', 'RtlSubAuthoritySid', 'RtlSubtreePredecessor',
+ 'RtlSubtreeSuccessor', 'RtlSystemTimeToLocalTime', 'RtlTimeFieldsToTime',
+ 'RtlTimeToElapsedTimeFields', 'RtlTimeToSecondsSince1970', 'RtlTimeToSecondsSince1980',
+ 'RtlTimeToTimeFields', 'RtlTryEnterCriticalSection', 'RtlUnicodeStringToAnsiSize',
+ 'RtlUnicodeStringToAnsiString', 'RtlUnicodeStringToCountedOemString',
+ 'RtlUnicodeStringToInteger', 'RtlUnicodeStringToOemSize',
+ 'RtlUnicodeStringToOemString', 'RtlUnicodeToCustomCPN', 'RtlUnicodeToMultiByteN',
+ 'RtlUnicodeToMultiByteSize', 'RtlUnicodeToOemN', 'RtlUniform', 'RtlUnlockHeap',
+ 'RtlUnwind', 'RtlUpcaseUnicodeChar', 'RtlUpcaseUnicodeString',
+ 'RtlUpcaseUnicodeStringToAnsiString', 'RtlUpcaseUnicodeStringToCountedOemString',
+ 'RtlUpcaseUnicodeStringToOemString', 'RtlUpcaseUnicodeToCustomCPN',
+ 'RtlUpcaseUnicodeToMultiByteN', 'RtlUpcaseUnicodeToOemN', 'RtlUpperChar',
+ 'RtlUpperString', 'RtlUsageHeap', 'RtlValidAcl', 'RtlValidateHeap',
+ 'RtlValidateProcessHeaps', 'RtlValidSecurityDescriptor', 'RtlValidSid', 'RtlWalkHeap',
+ 'RtlWriteRegistryValue', 'RtlxAnsiStringToUnicodeSize', 'RtlxOemStringToUnicodeSize',
+ 'RtlxUnicodeStringToAnsiSize', 'RtlxUnicodeStringToOemSize', 'RtlZeroHeap',
+ 'RtlZeroMemory',
+
+ 'NtCancelTimer', 'ZwCancelTimer', 'NtCreateTimer', 'ZwCreateTimer', 'NtGetTickCount',
+ 'ZwGetTickCount', 'NtOpenTimer', 'ZwOpenTimer', 'NtQueryPerformanceCounter',
+ 'ZwQueryPerformanceCounter', 'NtQuerySystemTime', 'ZwQuerySystemTime', 'NtQueryTimer',
+ 'ZwQueryTimer', 'NtQueryTimerResolution', 'ZwQueryTimerResolution', 'NtSetSystemTime',
+ 'ZwSetSystemTime', 'NtSetTimer', 'ZwSetTimer', 'NtSetTimerResolution',
+ 'ZwSetTimerResolution',
+
+ 'NtClearEvent', 'ZwClearEvent', 'NtCreateEvent', 'ZwCreateEvent', 'NtCreateEventPair',
+ 'ZwCreateEventPair', 'NtCreateMutant', 'ZwCreateMutant', 'NtCreateSemaphore',
+ 'ZwCreateSemaphore', 'NtOpenEvent', 'ZwOpenEvent', 'NtOpenEventPair',
+ 'ZwOpenEventPair', 'NtOpenMutant', 'ZwOpenMutant', 'NtOpenSemaphore',
+ 'ZwOpenSemaphore', 'NtPulseEvent', 'ZwPulseEvent', 'NtQueryEvent', 'ZwQueryEvent',
+ 'NtQueryMutant', 'ZwQueryMutant', 'NtQuerySemaphore', 'ZwQuerySemaphore',
+ 'NtReleaseMutant', 'ZwReleaseMutant', 'NtReleaseProcessMutant',
+ 'ZwReleaseProcessMutant', 'NtReleaseSemaphore', 'ZwReleaseSemaphore',
+ 'NtReleaseThreadMutant', 'ZwReleaseThreadMutant', 'NtResetEvent', 'ZwResetEvent',
+ 'NtSetEvent', 'ZwSetEvent', 'NtSetHighEventPair', 'ZwSetHighEventPair',
+ 'NtSetHighWaitLowEventPair', 'ZwSetHighWaitLowEventPair', 'NtSetLowEventPair',
+ 'ZwSetLowEventPair', 'NtSetLowWaitHighEventPair', 'ZwSetLowWaitHighEventPair',
+ 'NtSignalAndWaitForSingleObject', 'ZwSignalAndWaitForSingleObject',
+ 'NtWaitForMultipleObjects', 'ZwWaitForMultipleObjects', 'NtWaitForSingleObject',
+ 'ZwWaitForSingleObject', 'NtWaitHighEventPair', 'ZwWaitHighEventPair',
+ 'NtWaitLowEventPair', 'ZwWaitLowEventPair',
+
+ 'NtClose', 'ZwClose', 'NtCreateDirectoryObject', 'ZwCreateDirectoryObject',
+ 'NtCreateSymbolicLinkObject', 'ZwCreateSymbolicLinkObject',
+ 'NtDuplicateObject', 'ZwDuplicateObject', 'NtMakeTemporaryObject',
+ 'ZwMakeTemporaryObject', 'NtOpenDirectoryObject', 'ZwOpenDirectoryObject',
+ 'NtOpenSymbolicLinkObject', 'ZwOpenSymbolicLinkObject', 'NtQueryDirectoryObject',
+ 'ZwQueryDirectoryObject', 'NtQueryObject', 'ZwQueryObject',
+ 'NtQuerySymbolicLinkObject', 'ZwQuerySymbolicLinkObject', 'NtSetInformationObject',
+ 'ZwSetInformationObject',
+
+ 'NtContinue', 'ZwContinue', 'NtRaiseException', 'ZwRaiseException',
+ 'NtRaiseHardError', 'ZwRaiseHardError', 'NtSetDefaultHardErrorPort',
+ 'ZwSetDefaultHardErrorPort',
+
+ 'NtCreateChannel', 'ZwCreateChannel', 'NtListenChannel', 'ZwListenChannel',
+ 'NtOpenChannel', 'ZwOpenChannel', 'NtReplyWaitSendChannel', 'ZwReplyWaitSendChannel',
+ 'NtSendWaitReplyChannel', 'ZwSendWaitReplyChannel', 'NtSetContextChannel',
+ 'ZwSetContextChannel',
+
+ 'NtCreateKey', 'ZwCreateKey', 'NtDeleteKey', 'ZwDeleteKey', 'NtDeleteValueKey',
+ 'ZwDeleteValueKey', 'NtEnumerateKey', 'ZwEnumerateKey', 'NtEnumerateValueKey',
+ 'ZwEnumerateValueKey', 'NtFlushKey', 'ZwFlushKey', 'NtInitializeRegistry',
+ 'ZwInitializeRegistry', 'NtLoadKey', 'ZwLoadKey', 'NtLoadKey2', 'ZwLoadKey2',
+ 'NtNotifyChangeKey', 'ZwNotifyChangeKey', 'NtOpenKey', 'ZwOpenKey', 'NtQueryKey',
+ 'ZwQueryKey', 'NtQueryMultipleValueKey', 'ZwQueryMultipleValueKey',
+ 'NtQueryMultiplValueKey', 'ZwQueryMultiplValueKey', 'NtQueryValueKey',
+ 'ZwQueryValueKey', 'NtReplaceKey', 'ZwReplaceKey', 'NtRestoreKey', 'ZwRestoreKey',
+ 'NtSaveKey', 'ZwSaveKey', 'NtSetInformationKey', 'ZwSetInformationKey',
+ 'NtSetValueKey', 'ZwSetValueKey', 'NtUnloadKey', 'ZwUnloadKey',
+
+ 'NtCreateMailslotFile', 'ZwCreateMailslotFile', 'NtCreateNamedPipeFile',
+ 'ZwCreateNamedPipeFile', 'NtCreatePagingFile', 'ZwCreatePagingFile',
+
+ 'NtCreateProfile', 'ZwCreateProfile', 'NtQueryIntervalProfile',
+ 'ZwQueryIntervalProfile', 'NtRegisterThreadTerminatePort',
+ 'ZwRegisterThreadTerminatePort', 'NtSetIntervalProfile', 'ZwSetIntervalProfile',
+ 'NtStartProfile', 'ZwStartProfile', 'NtStopProfile', 'ZwStopProfile',
+ 'NtSystemDebugControl', 'ZwSystemDebugControl',
+
+ 'NtEnumerateBus', 'ZwEnumerateBus', 'NtFlushInstructionCache',
+ 'ZwFlushInstructionCache', 'NtFlushWriteBuffer', 'ZwFlushWriteBuffer',
+ 'NtSetLdtEntries', 'ZwSetLdtEntries',
+
+ 'NtGetPlugPlayEvent', 'ZwGetPlugPlayEvent', 'NtPlugPlayControl', 'ZwPlugPlayControl',
+
+ 'NtInitiatePowerAction', 'ZwInitiatePowerAction', 'NtPowerInformation',
+ 'ZwPowerInformation', 'NtRequestWakeupLatency', 'ZwRequestWakeupLatency',
+ 'NtSetSystemPowerState', 'ZwSetSystemPowerState', 'NtSetThreadExecutionState',
+ 'ZwSetThreadExecutionState',
+
+ 'NtLoadDriver', 'ZwLoadDriver', 'NtRegisterNewDevice', 'ZwRegisterNewDevice',
+ 'NtUnloadDriver', 'ZwUnloadDriver',
+
+ 'NtQueryDefaultLocale', 'ZwQueryDefaultLocale', 'NtQueryDefaultUILanguage',
+ 'ZwQueryDefaultUILanguage', 'NtQuerySystemEnvironmentValue',
+ 'ZwQuerySystemEnvironmentValue', 'NtSetDefaultLocale', 'ZwSetDefaultLocale',
+ 'NtSetDefaultUILanguage', 'ZwSetDefaultUILanguage', 'NtSetSystemEnvironmentValue',
+ 'ZwSetSystemEnvironmentValue',
+
+ 'DbgBreakPoint', 'DbgPrint', 'DbgPrompt', 'DbgSsHandleKmApiMsg', 'DbgSsInitialize',
+ 'DbgUiConnectToDbg', 'DbgUiContinue', 'DbgUiWaitStateChange', 'DbgUserBreakPoint',
+ 'KiRaiseUserExceptionDispatcher', 'KiUserApcDispatcher', 'KiUserCallbackDispatcher',
+ 'KiUserExceptionDispatcher', 'NlsAnsiCodePage', 'NlsMbCodePageTag',
+ 'NlsMbOemCodePageTag', 'NtAllocateLocallyUniqueId', 'ZwAllocateLocallyUniqueId',
+ 'NtAllocateUuids', 'ZwAllocateUuids', 'NtCallbackReturn', 'ZwCallbackReturn',
+ 'NtDisplayString', 'ZwDisplayString', 'NtQueryOleDirectoryFile',
+ 'ZwQueryOleDirectoryFile', 'NtQuerySection', 'ZwQuerySection',
+ 'NtQuerySystemInformation', 'ZwQuerySystemInformation', 'NtSetSystemInformation',
+ 'ZwSetSystemInformation', 'NtShutdownSystem', 'ZwShutdownSystem', 'NtVdmControl',
+ 'ZwVdmControl', 'NtW32Call', 'ZwW32Call', 'PfxFindPrefix', 'PfxInitialize',
+ 'PfxInsertPrefix', 'PfxRemovePrefix', 'PropertyLengthAsVariant', 'RestoreEm87Context',
+ 'SaveEm87Context'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']',
+ '+', '-', '*', '/', '%',
+ '=', '<', '>',
+ '!', '^', '&', '|',
+ '?', ':',
+ ';', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #993333;',
+ 5 => 'color: #4000dd;',
+ 6 => 'color: #4000dd;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #339933;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+ 4 => '',
+ 5 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com',
+ 6 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php
index 8b8b2f24..8408f29c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/caddcl.php
@@ -4,7 +4,7 @@
* ----------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/30
*
* CAD DCL (Dialog Control Language) language file for GeSHi.
@@ -122,5 +122,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php
index 3fa7ead0..6a913753 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cadlisp.php
@@ -4,7 +4,7 @@
* -----------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/blog)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/30
*
* AutoCAD/IntelliCAD Lisp language file for GeSHi.
@@ -182,5 +182,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php
index e40963f0..788e0564 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfdg.php
@@ -4,7 +4,7 @@
* --------
* Author: John Horigan <john@glyphic.com>
* Copyright: (c) 2006 John Horigan http://www.ozonehouse.com/john/
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/03/11
*
* CFDG language file for GeSHi.
@@ -120,5 +120,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfm.php
index 2d165bd6..c0454660 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfm.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cfm.php
@@ -4,7 +4,7 @@
* -------
* Author: Diego
* Copyright: (c) 2006 Diego
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/02/25
*
* ColdFusion language file for GeSHi.
@@ -295,5 +295,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chaiscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chaiscript.php
index f9d0a868..677f2afb 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chaiscript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chaiscript.php
@@ -6,7 +6,7 @@
* Copyright: (c) 2010 Jason Turner (lefticus@gmail.com),
* (c) 2009 Jonathan Turner,
* (c) 2004 Ben Keen (ben.keen@gmail.com), Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/07/03
*
* ChaiScript language file for GeSHi.
@@ -136,5 +136,3 @@ $language_data = array (
1 => true
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chapel.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chapel.php
new file mode 100644
index 00000000..d0e50e61
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/chapel.php
@@ -0,0 +1,169 @@
+<?php
+/*************************************************************************************
+ * chapel.php
+ * -----
+ * Author: Richard Molitor (richard.molitor@student.kit.edu)
+ * Copyright: (c) 2013 Richard Molitor
+ * Release Version: 1.0.8.12
+ * Date Started: 2013/06/22
+ *
+ * Chapel language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2013/06/22 (1.0.8.12)
+ * - First Release
+ *
+ * TODO (updated 2013/06/22)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Chapel',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F |
+ GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ // statements
+ 1 => array(
+ 'atomic', 'begin', 'break', 'class', 'cobegin', 'coforall',
+ 'continue', 'do', 'else', 'export', 'extern', 'for', 'forall', 'if',
+ 'iter', 'inline', 'label', 'let', 'local', 'module',
+ 'otherwise', 'proc', 'record', 'return', 'select', 'serial',
+ 'then', 'use', 'var', 'when', 'where', 'while', 'yield'
+ ),
+ // literals
+ 2 => array(
+ 'nil', 'true', 'false'
+ ),
+ // built-in functions
+ 3 => array(
+ 'by', 'delete', 'dmapped', 'domain', 'enum', 'index', 'min',
+ 'minloc', 'max', 'maxloc', 'new', 'range', 'reduce', 'scan',
+ 'sparse', 'subdomain', 'sync', 'union', 'zip'
+ ),
+ // built-in types
+ 4 => array(
+ 'config', 'const', 'in', 'inout', 'opaque', 'on', 'out', 'param',
+ 'ref', 'single', 'type'
+ ),
+ // library types
+ 5 => array(
+ 'void', 'bool', 'int', 'uint', 'real', 'imag', 'complex', 'string',
+ 'locale'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']',
+ '+', '-', '*', '/', '%',
+ '=', '<', '>',
+ '!', '^', '&', '|',
+ '?', ':',
+ ';', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ //2 => 'color: #339933;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cil.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cil.php
index 9872e755..c1fe8a9a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cil.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cil.php
@@ -4,7 +4,7 @@
* --------
* Author: Marcus Griep (neoeinstein+GeSHi@gmail.com)
* Copyright: (c) 2007 Marcus Griep (http://www.xpdm.us)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/10/24
*
* CIL (Common Intermediate Language) language file for GeSHi.
@@ -192,5 +192,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/clojure.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/clojure.php
index 0ad4e4ad..0b9ed44c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/clojure.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/clojure.php
@@ -4,7 +4,7 @@
* --------
* Author: Jess Johnson (jess@grok-code.com)
* Copyright: (c) 2009 Jess Johnson (http://grok-code.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/09/20
*
* Clojure language file for GeSHi.
@@ -130,5 +130,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cmake.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cmake.php
index 67277aa9..21552165 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cmake.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cmake.php
@@ -4,7 +4,7 @@
* -------
* Author: Daniel Nelson (danieln@eng.utah.edu)
* Copyright: (c) 2009 Daniel Nelson
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/04/06
*
* CMake language file for GeSHi.
@@ -177,5 +177,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cobol.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cobol.php
index b07be48a..1280a4c7 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cobol.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cobol.php
@@ -4,15 +4,33 @@
* ----------
* Author: BenBE (BenBE@omorphia.org)
* Copyright: (c) 2007-2008 BenBE (http://www.omorphia.de/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/07/02
*
* COBOL language file for GeSHi.
*
+ * Most of the compiler directives, reserved words and intrinsic functions are
+ * from the 2009 COBOL Draft Standard, Micro Focus, and GNU Cobol. The lists of
+ * these were found in the draft standard (Sections 8.9, 8.10, 8.11 and 8.12),
+ * Micro Focus' COBOL Language Reference and the GNU Cobol FAQ.
+ *
* CHANGES
* -------
+ * 2013/11/17 (1.0.8.12)
+ * - Changed compiler directives to be handled like comments.
+ * - Fixed bug where keywords in identifiers were highlighted.
+ * 2013/08/19 (1.0.8.12)
+ * - Added more intrinsic functions, reserved words, and compiler directives
+ * from the (upcoming) standard.
+ * 2013/07/07 (1.0.8.12)
+ * - Added more reserved words, compiler directives and intrinsic functions.
+ * - Added modern comment syntax and corrected the other one.
+ * - Set OOLANG to true and added an object splitter.
+ * - Added extra symbols.
+ * - Fixed bug where scope terminators were only the statement in
+ * end-statement was highlighted.
*
- * TODO (updated 2007/07/02)
+ * TODO (updated 2013/11/17)
* -------------------------
*
*************************************************************************************
@@ -37,145 +55,340 @@
$language_data = array (
'LANG_NAME' => 'COBOL',
- 'COMMENT_SINGLE' => array(),
+ 'COMMENT_SINGLE' => array(
+ 1 => '*>', // COBOL 2002 inline comment
+ 2 => '>>' // COBOL compiler directive indicator
+ ),
'COMMENT_MULTI' => array(),
- 'COMMENT_REGEXP' => array(1 => '/^\*.*?$/m'),
+ 'COMMENT_REGEXP' => array(
+ 1 => '/^......(\*.*?$)/m', // Fixed-form comment
+ 2 => '/\$SET.*/i' // MF compiler directive indicator
+ ),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
'QUOTEMARKS' => array('"', "'"),
- 'ESCAPE_CHAR' => '\\',
+ 'ESCAPE_CHAR' => '',
'NUMBERS' =>
GESHI_NUMBER_INT_BASIC |
GESHI_NUMBER_FLT_NONSCI |
GESHI_NUMBER_FLT_SCI_SHORT |
GESHI_NUMBER_FLT_SCI_ZERO,
'KEYWORDS' => array(
- 1 => array( //Compiler Directives
- 'ANSI', 'BLANK', 'NOBLANK', 'CALL-SHARED', 'CANCEL', 'NOCANCEL',
- 'CHECK', 'CODE', 'NOCODE', 'COLUMNS', 'COMPACT', 'NOCOMPACT',
- 'COMPILE', 'CONSULT', 'NOCONSULT', 'CROSSREF', 'NOCROSSREF',
- 'DIAGNOSE-74', 'NODIAGNOSE-74', 'DIAGNOSE-85', 'NODIAGNOSE-85',
- 'DIAGNOSEALL', 'NODIAGNOSEALL', 'ENDIF', 'ENDUNIT', 'ENV',
- 'ERRORFILE', 'ERRORS', 'FIPS', 'NOFIPS', 'FMAP', 'HEADING', 'HEAP',
- 'HIGHPIN', 'HIGHREQUESTERS', 'ICODE', 'NOICODE', 'IF', 'IFNOT',
- 'INNERLIST', 'NOINNERLIST', 'INSPECT', 'NOINSPECT', 'LARGEDATA',
- 'LD', 'LESS-CODE', 'LIBRARY', 'LINES', 'LIST', 'NOLIST', 'LMAP',
- 'NOLMAP', 'MAIN', 'MAP', 'NOMAP', 'NLD', 'NONSTOP', 'NON-SHARED',
- 'OPTIMIZE', 'PERFORM-TRACE', 'PORT', 'NOPORT', 'RESETTOG',
- 'RUNNABLE', 'RUNNAMED', 'SAVE', 'SAVEABEND', 'NOSAVEABEND',
- 'SEARCH', 'NOSEARCH', 'SECTION', 'SETTOG', 'SHARED', 'SHOWCOPY',
- 'NOSHOWCOPY', 'SHOWFILE', 'NOSHOWFILE', 'SOURCE', 'SQL', 'NOSQL',
- 'SQLMEM', 'SUBSET', 'SUBTYPE', 'SUPPRESS', 'NOSUPPRESS', 'SYMBOLS',
- 'NOSYMBOLS', 'SYNTAX', 'TANDEM', 'TRAP2', 'NOTRAP2', 'TRAP2-74',
- 'NOTRAP2-74', 'UL', 'WARN', 'NOWARN'
+ // Statements containing spaces. These are separate to other statements
+ // so that they are highlighted correctly.
+ 1 => array(
+ 'DELETE FILE', 'GO TO', 'NEXT SENTENCE', 'XML GENERATE',
+ 'XML PARSE'
),
- 2 => array( //Statement Keywords
- 'ACCEPT', 'ADD', 'TO', 'GIVING', 'CORRESPONDING', 'ALTER', 'CALL',
- 'CHECKPOINT', 'CLOSE', 'COMPUTE', 'CONTINUE', 'COPY',
- 'DELETE', 'DISPLAY', 'DIVIDE', 'INTO', 'REMAINDER', 'ENTER',
- 'COBOL', 'EVALUATE', 'EXIT', 'GO', 'INITIALIZE',
- 'TALLYING', 'REPLACING', 'CONVERTING', 'LOCKFILE', 'MERGE', 'MOVE',
- 'MULTIPLY', 'OPEN', 'PERFORM', 'TIMES',
- 'UNTIL', 'VARYING', 'RETURN',
+
+ 2 => array( // Other Reserved Words
+ '3-D', 'ABSENT', 'ABSTRACT', 'ACCESS', 'ACQUIRE',
+ 'ACTION', 'ACTIVE-CLASS', 'ACTIVE-X', 'ACTUAL', 'ADDRESS',
+ 'ADDRESS-ARRAY', 'ADDRESS-OFFSET', 'ADJUSTABLE-COLUMNS',
+ 'ADVANCING', 'AFP-5A', 'AFTER', 'ALIGNED', 'ALIGNMENT', 'ALL',
+ 'ALLOW', 'ALLOWING', 'ALPHABET', 'ALPHABETIC',
+ 'ALPHABETIC-LOWER', 'ALPHABETIC-UPPER', 'ALPHANUMERIC',
+ 'ALPHANUMERIC-EDITED', 'ALSO', 'ALTERNATE', 'AND', 'ANY',
+ 'ANYCASE',
+ 'APPLY', 'ARE', 'AREA', 'AREAS', 'ARGUMENT-NUMBER',
+ 'ARGUMENT-VALUE',
+ 'ARITHMETIC', 'AS', 'ASCENDING',
+ 'ASSEMBLY-ATTRIBUTES', 'ASSIGN', 'AT', 'ATTRIBUTE', 'AUTHOR',
+ 'AUTO', 'AUTO-DECIMAL', 'AUTO-HYPHEN-SKIP', 'AUTO-MINIMIZE',
+ 'AUTO-RESIZE', 'AUTO-SKIP', 'AUTO-SPIN', 'AUTOMATIC',
+ 'AUTOTERMINATE', 'AWAY-FROM-ZERO',
+ 'AX-EVENT-LIST', 'B-AND', 'B-EXOR', 'B-LEFT',
+ 'B-NOT', 'B-OR', 'B-RIGHT', 'B-XOR', 'BACKGROUND-COLOR',
+ 'BACKGROUND-COLOUR', 'BACKGROUND-HIGH', 'BACKGROUND-LOW',
+ 'BACKGROUND-STANDARD', 'BACKWARD', 'BAR', 'BASED', 'BASIS', 'BEEP',
+ 'BEFORE', 'BEGINNING', 'BELL', 'BINARY', 'BINARY-CHAR',
+ 'BINARY-DOUBLE', 'BINARY-LONG', 'BINARY-SHORT', 'BIND', 'BIT',
+ 'BITMAP', 'BITMAP-END', 'BITMAP-HANDLE', 'BITMAP-NUMBER',
+ 'BITMAP-RAW-HEIGHT', 'BITMAP-RAW-WIDTH', 'BITMAP-SCALE',
+ 'BITMAP-START', 'BITMAP-TIMER', 'BITMAP-TRAILING', 'BITMAP-WIDTH',
+ 'BLANK', 'BLINK', 'BLINKING', 'BLOB', 'BLOB-FILE', 'BLOB-LOCATOR',
+ 'BLOCK', 'BOLD', 'BOOLEAN', 'BOTTOM', 'BOX', 'BOXED', 'BROWSING',
+ 'BUSY', 'BUTTONS', 'BY', 'C01', 'C02', 'C03', 'C04',
+ 'C05',
+ 'C06', 'C07', 'C08', 'C09', 'C10', 'C11', 'C12', 'CALENDAR-FONT',
+ 'CALLED', 'CANCEL-BUTTON', 'CAPACITY', 'CATCH', 'CBL',
+ 'CBL-CTR', 'CCOL', 'CD', 'CELL', 'CELL-COLOR', 'CELL-DATA',
+ 'CELL-FONT', 'CELL-PROTECTION', 'CELLS', 'CENTER', 'CENTERED',
+ 'CENTERED-HEADINGS', 'CENTURY-DATE', 'CENTURY-DAY', 'CF', 'CH',
+ 'CHAINING', 'CHANGED', 'CHAR-VARYING',
+ 'CHARACTER',
+ 'CHARACTERS', 'CHART', 'CHECK-BOX', 'CHECKING', 'CLASS',
+ 'CLASS-ATTRIBUTES', 'CLASS-CONTROL', 'CLASS-ID', 'CLASS-OBJECT',
+ 'CLASSIFICATION',
+ 'CLEAR-SELECTION', 'CLINE', 'CLINES', 'CLOB', 'CLOB-FILE',
+ 'CLOB-LOCATOR', 'CLOCK-UNITS', 'COBOL', 'CODE', 'CODE-SET',
+ 'COERCION', 'COL', 'COLLATING', 'COLORS', 'COLOUR',
+ 'COLOURS', 'COLS', 'COLUMN', 'COLUMN-COLOR', 'COLUMN-DIVIDERS',
+ 'COLUMN-FONT', 'COLUMN-HEADINGS', 'COLUMN-PROTECTION', 'COLUMNS',
+ 'COM-REG', 'COMBO-BOX', 'COMMA', 'COMMITMENT', 'COMMON',
+ 'COMMUNICATION', 'COMP', 'COMP-0', 'COMP-1', 'COMP-2', 'COMP-3',
+ 'COMP-4', 'COMP-5', 'COMP-6', 'COMP-X', 'COMPRESSION',
+ 'COMPUTATIONAL', 'COMPUTATIONAL-0', 'COMPUTATIONAL-1',
+ 'COMPUTATIONAL-2', 'COMPUTATIONAL-3', 'COMPUTATIONAL-4',
+ 'COMPUTATIONAL-5', 'COMPUTATIONAL-6', 'COMPUTATIONAL-X',
+ 'CONDITION-VALUE', 'CONFIGURATION', 'CONSOLE', 'CONSTANT',
+ 'CONSTRAIN', 'CONSTRAINTS', 'CONTAINS', 'CONTENT',
+ 'CONTROL', 'CONTROL-AREA', 'CONTROLS', 'CONTROLS-UNCROPPED',
+ 'CONVERSION', 'CONVERT', 'CONVERTING', 'COPY-SELECTION',
+ 'CORE-INDEX', 'CORR', 'CORRESPONDING', 'COUNT',
+ 'CREATING', 'CRT', 'CRT-UNDER', 'CSIZE', 'CSP', 'CURRENCY',
+ 'CURSOR', 'CURSOR-COL', 'CURSOR-COLOR',
+ 'CURSOR-FRAME-WIDTH', 'CURSOR-ROW', 'CURSOR-X', 'CURSOR-Y',
+ 'CUSTOM-ATTRIBUTE', 'CUSTOM-PRINT-TEMPLATE', 'CYCLE', 'CYL-INDEX',
+ 'CYL-OVERFLOW', 'DASHED', 'DATA', 'DATA-COLUMNS',
+ 'DATA-POINTER', 'DATA-TYPES', 'DATABASE-KEY', 'DATABASE-KEY-LONG',
+ 'DATE', 'DATE-COMPILED', 'DATE-ENTRY', 'DATE-RECORD',
+ 'DATE-WRITTEN', 'DAY', 'DAY-OF-WEEK', 'DBCLOB', 'DBCLOB-FILE',
+ 'DBCLOB-LOCATOR', 'DBCS', 'DE', 'DEBUG', 'DEBUG-CONTENTS',
+ 'DEBUG-ITEM', 'DEBUG-LINE', 'DEBUG-NAME', 'DEBUG-SUB-1',
+ 'DEBUG-SUB-2', 'DEBUG-SUB-3', 'DEBUGGING', 'DECIMAL',
+ 'DECIMAL-POINT', 'DECLARATIVES', 'DEFAULT',
+ 'DEFAULT-BUTTON', 'DEFAULT-FONT', 'DEFINITION',
+ 'DELEGATE-ID', 'DELIMITED', 'DELIMITER', 'DEPENDING',
+ 'DESCENDING', 'DESTINATION', 'DESTROY', 'DETAIL', 'DICTIONARY',
+ 'DISABLE', 'DISC', 'DISJOINING', 'DISK', 'DISP',
+ 'DISPLAY-1', 'DISPLAY-COLUMNS', 'DISPLAY-FORMAT', 'DISPLAY-ST',
+ 'DIVIDER-COLOR', 'DIVIDERS', 'DIVISION', 'DOT-DASH',
+ 'DOTTED', 'DOWN', 'DRAG-COLOR', 'DRAW', 'DROP', 'DROP-DOWN',
+ 'DROP-LIST', 'DUPLICATES', 'DYNAMIC', 'EBCDIC', 'EC', 'ECHO', 'EGCS',
+ 'EGI', 'EJECT', 'ELEMENTARY', 'ELSE', 'EMI', 'EMPTY-CHECK',
+ 'ENABLE', 'ENABLED', 'END', 'END-ACCEPT', 'END-ADD', 'END-CALL',
+ 'END-CHAIN', 'END-COLOR', 'END-COMPUTE', 'END-DELEGATE',
+ 'END-DELETE', 'END-DISPLAY', 'END-DIVIDE', 'END-EVALUATE',
+ 'END-IF', 'END-INVOKE', 'END-MODIFY', 'END-MOVE', 'END-MULTIPLY',
+ 'END-OF-PAGE', 'END-PERFORM', 'END-READ', 'END-RECEIVE',
+ 'END-RETURN', 'END-REWRITE', 'END-SEARCH', 'END-START',
+ 'END-STRING', 'END-SUBTRACT', 'END-SYNC', 'END-TRY',
+ 'END-UNSTRING', 'END-WAIT', 'END-WRITE', 'END-XML', 'ENDING',
+ 'ENGRAVED', 'ENSURE-VISIBLE', 'ENTRY-CONVENTION',
+ 'ENTRY-FIELD',
+ 'ENTRY-REASON', 'ENUM', 'ENUM-ID', 'ENVIRONMENT',
+ 'ENVIRONMENT-NAME', 'ENVIRONMENT-VALUE', 'EOL', 'EOP',
+ 'EOS', 'EQUAL', 'EQUALS', 'ERASE', 'ERROR', 'ESCAPE',
+ 'ESCAPE-BUTTON', 'ESI', 'EVENT', 'EVENT-LIST',
+ 'EVENT-POINTER', 'EVERY', 'EXCEEDS', 'EXCEPTION',
+ 'EXCEPTION-OBJECT', 'EXCEPTION-VALUE', 'EXCESS-3',
+ 'EXCLUDE-EVENT-LIST', 'EXCLUSIVE',
+ 'EXPAND', 'EXPANDS', 'EXTEND', 'EXTENDED',
+ 'EXTENDED-SEARCH', 'EXTENSION', 'EXTERNAL', 'EXTERNAL-FORM',
+ 'EXTERNALLY-DESCRIBED-KEY', 'FACTORY', 'FALSE', 'FD',
+ 'FH--FCD', 'FH--KEYDEF', 'FILE', 'FILE-CONTROL', 'FILE-ID',
+ 'FILE-LIMIT', 'FILE-LIMITS', 'FILE-NAME', 'FILE-POS', 'FILL-COLOR',
+ 'FILL-COLOR2', 'FILL-PERCENT', 'FILLER', 'FINAL', 'FINALLY',
+ 'FINISH-REASON', 'FIRST', 'FIXED', 'FIXED-FONT', 'FIXED-WIDTH',
+ 'FLAT', 'FLAT-BUTTONS', 'FLOAT-BINARY-7', 'FLOAT-BINARY-16',
+ 'FLOAT-BINARY-34', 'FLOAT-DECIMAL-16', 'FLOAT-DECIMAL-34',
+ 'FLOAT-EXTENDED', 'FLOAT-LONG',
+ 'FLOAT-SHORT', 'FLOATING', 'FONT', 'FOOTING', 'FOR',
+ 'FOREGROUND-COLOR', 'FOREGROUND-COLOUR', 'FOREVER', 'FORMAT',
+ 'FRAME', 'FRAMED', 'FROM', 'FULL', 'FULL-HEIGHT',
+ 'FUNCTION', 'FUNCTION-ID', 'FUNCTION-POINTER', 'GENERATE',
+ 'GET', 'GETTER', 'GIVING', 'GLOBAL', 'GO-BACK', 'GO-FORWARD',
+ 'GO-HOME', 'GO-SEARCH', 'GRAPHICAL', 'GREATER', 'GRID',
+ 'GRIP', 'GROUP', 'GROUP-USAGE', 'GROUP-VALUE', 'HANDLE',
+ 'HAS-CHILDREN', 'HEADING', 'HEADING-COLOR', 'HEADING-DIVIDER-COLOR',
+ 'HEADING-FONT', 'HEAVY', 'HEIGHT', 'HEIGHT-IN-CELLS', 'HELP-ID',
+ 'HIDDEN-DATA', 'HIGH', 'HIGH-COLOR', 'HIGH-VALUE', 'HIGH-VALUES',
+ 'HIGHLIGHT', 'HORIZONTAL', 'HOT-TRACK', 'HSCROLL', 'HSCROLL-POS',
+ 'I-O', 'I-O-CONTROL', 'ICON', 'ID', 'IDENTIFICATION',
+ 'IDENTIFIED', 'IFINITY', 'IGNORE', 'IGNORING', 'IMPLEMENTS', 'IN',
+ 'INDEPENDENT', 'INDEX', 'INDEXED', 'INDEXER', 'INDEXER-ID', 'INDIC',
+ 'INDICATE', 'INDICATOR', 'INDICATORS', 'INDIRECT',
+ 'INHERITING', 'INHERITS',
+ 'INITIAL', 'INITIALIZED', 'INPUT',
+ 'INPUT-OUTPUT', 'INQUIRE', 'INSERT', 'INSERT-ROWS',
+ 'INSERTION-INDEX', 'INSTALLATION', 'INSTANCE',
+ 'INTERFACE', 'INTERFACE-ID', 'INTERMEDIATE',
+ 'INTERNAL', 'INTO', 'INTRINSIC',
+ 'INVALID', 'INVOKED', 'IS', 'ITEM', 'ITEM-BOLD',
+ 'ITEM-ID', 'ITEM-TEXT', 'ITEM-TO-ADD', 'ITEM-TO-DELETE',
+ 'ITEM-TO-EMPTY', 'ITEM-VALUE', 'ITERATOR', 'ITERATOR-ID', 'J',
+ 'JOINED', 'JOINING', 'JUST', 'JUSTIFIED', 'KANJI',
+ 'KEPT', 'KEY', 'KEY-YY', 'KEYBOARD', 'LABEL', 'LABEL-OFFSET',
+ 'LARGE-FONT', 'LAST', 'LAST-ROW', 'LAYOUT-DATA', 'LAYOUT-MANAGER',
+ 'LC_ALL', 'LC_COLLATE', 'LC_CTYPE', 'LC_CURRENCY', 'LC_MESSAGES',
+ 'LC_MONETARY', 'LC_NUMERIC', 'LC_TIME', 'LEADING', 'LEADING-SHIFT',
+ 'LEAVE', 'LEFT', 'LEFT-JUSTIFY', 'LEFT-TEXT', 'LEFTLINE',
+ 'LENGTH-CHECK', 'LESS', 'LIMIT', 'LIMITS', 'LIN', 'LINAGE',
+ 'LINAGE-COUNTER', 'LINE', 'LINE-COUNTER', 'LINES', 'LINES-AT-ROOT',
+ 'LINK', 'LINKAGE', 'LIST', 'LIST-BOX', 'LM-RESIZE', 'LOCAL-STORAGE',
+ 'LOCALE', 'LOCK', 'LOCKING', 'LONG-DATE', 'LONG-VARBINARY',
+ 'LONG-VARCHAR', 'LOW', 'LOW-COLOR', 'LOW-VALUE', 'LOW-VALUES',
+ 'LOWER', 'LOWERED', 'LOWLIGHT', 'MANUAL', 'MASS-UPDATE',
+ 'MASTER-INDEX', 'MAX-HEIGHT', 'MAX-LINES', 'MAX-PROGRESS',
+ 'MAX-SIZE', 'MAX-TEXT', 'MAX-VAL', 'MAX-WIDTH', 'MDI-CHILD',
+ 'MDI-FRAME', 'MEDIUM-FONT', 'MEMORY', 'MENU', 'MESSAGE',
+ 'MESSAGES', 'METACLASS', 'METHOD', 'METHOD-ID', 'MIN-HEIGHT',
+ 'MIN-LINES', 'MIN-SIZE', 'MIN-VAL', 'MIN-WIDTH', 'MODAL', 'MODE',
+ 'MODELESS', 'MODIFIED', 'MODULES', 'MONITOR-POINTER',
+ 'MORE-LABELS', 'MULTILINE',
+ 'MUTEX-POINTER', 'NAME', 'NAMED', 'NATIONAL',
+ 'NATIONAL-EDITED', 'NATIVE', 'NAVIGATE-URL', 'NCHAR',
+ 'NEAREST-AWAY-FROM-ZERO', 'NEAREST-EVEN', 'NEAREST-TOWARD-ZERO',
+ 'NEGATIVE', 'NEGATIVE-INFINITY',
+ 'NESTED', 'NET-EVENT-LIST', 'NEW', 'NEWABLE', 'NEXT ', 'NEXT-ITEM',
+ 'NO', 'NO-AUTO-DEFAULT', 'NO-AUTOSEL', 'NO-BOX', 'NO-CELL-DRAG',
+ 'NO-CLOSE', 'NO-DIVIDERS', 'NO-ECHO', 'NO-F4', 'NO-FOCUS',
+ 'NO-GROUP-TAB', 'NO-KEY-LETTER', 'NO-SEARCH', 'NO-TAB', 'NO-UPDOWN',
+ 'NOMINAL', 'NONE', 'NORMAL', 'NOT', 'NOT-A-NUMBER', 'NOTIFY',
+ 'NOTIFY-CHANGE', 'NOTIFY-DBLCLICK', 'NOTIFY-SELCHANGE',
+ 'NSTD-REELS', 'NULL', 'NULLS', 'NUM-COL-HEADINGS',
+ 'NUM-ROW-HEADINGS', 'NUM-ROWS', 'NUMBER', 'NUMBERS', 'NUMERIC',
+ 'NUMERIC-EDITED', 'NUMERIC-FILL', 'O-FILL', 'OBJECT',
+ 'OBJECT-COMPUTER', 'OBJECT-ID', 'OBJECT-REFERENCE',
+ 'OBJECT-STORAGE', 'OCCURS', 'OF', 'OFF', 'OK-BUTTON', 'OMITTED',
+ 'ONLY', 'OOSTACKPTR', 'OPERATOR', 'OPERATOR-ID',
+ 'OPTIONAL', 'OPTIONS', 'OR', 'ORDER', 'ORGANIZATION', 'OTHER',
+ 'OTHERWISE', 'OUTPUT', 'OVERFLOW', 'OVERLAP-LEFT', 'OVERLAP-TOP',
+ 'OVERLAPPED', 'OVERLINE', 'OVERRIDE', 'PACKED-DECIMAL',
+ 'PADDING', 'PAGE', 'PAGE-COUNTER', 'PAGE-SETUP', 'PAGE-SIZE',
+ 'PAGED', 'PANEL-INDEX', 'PANEL-STYLE', 'PANEL-TEXT', 'PANEL-WIDTHS',
+ 'PARAGRAPH', 'PARAMS', 'PARENT', 'PARSE', 'PARTIAL', 'PASSWORD',
+ 'PERMANENT', 'PF', 'PH', 'PIC', 'PICTURE', 'PIXEL',
+ 'PIXELS', 'PLACEMENT', 'PLUS', 'POINTER', 'POP-UP', 'POSITION',
+ 'POSITION-SHIFT', 'POSITIONING', 'POSITIVE', 'POSITIVE-INFINITY',
+ 'PREFIXED', 'PREFIXING', 'PRESENT',
+ 'PREVIOUS', 'PRINT', 'PRINT-CONTROL', 'PRINT-NO-PROMPT',
+ 'PRINT-PREVIEW', 'PRINT-SWITCH', 'PRINTER', 'PRINTER-1', 'PRINTING',
+ 'PRIOR', 'PRIORITY', 'PRIVATE', 'PROCEDURE', 'PROCEDURE-POINTER',
+ 'PROCEDURES', 'PROCEED', 'PROCESS', 'PROCESSING', 'PROGRAM',
+ 'PROGRAM-ID', 'PROGRAM-POINTER', 'PROGRESS', 'PROHIBITED',
+ 'PROMPT', 'PROPERTIES',
+ 'PROPERTY', 'PROPERTY-ID', 'PROPERTY-VALUE', 'PROTECTED',
+ 'PROTOTYPE', 'PUBLIC', 'PURGE', 'PUSH-BUTTON', 'QUERY-INDEX',
+ 'QUEUE', 'QUOTE', 'QUOTES', 'RADIO-BUTTON', 'RAISED',
+ 'RAISING', 'RD', 'READ-ONLY', 'READING',
+ 'READY', 'RECORD', 'RECORD-DATA', 'RECORD-OVERFLOW',
+ 'RECORD-TO-ADD', 'RECORD-TO-DELETE', 'RECORDING', 'RECORDS',
+ 'RECURSIVE', 'REDEFINE', 'REDEFINES', 'REDEFINITION', 'REEL',
+ 'REFERENCE', 'REFERENCES', 'REFRESH', 'REGION-COLOR', 'RELATION',
+ 'RELATIVE', 'RELOAD', 'REMAINDER', 'REMARKS', 'REMOVAL',
+ 'RENAMES', 'REORG-CRITERIA', 'REPEATED', 'REPLACE', 'REPLACING',
+ 'REPORT', 'REPORTING', 'REPORTS', 'REPOSITORY', 'REQUIRED',
+ 'REPRESENTS-NOT-A-NUMBER',
+ 'REREAD', 'RERUN', 'RESERVE', 'RESET-GRID', 'RESET-LIST',
+ 'RESET-TABS', 'RESIZABLE', 'RESTRICTED', 'RESULT-SET-LOCATOR',
+ 'RETRY', 'RETURN-CODE', 'RETURNING',
+ 'REVERSE-VIDEO', 'REVERSED', 'REWIND', 'RF', 'RH',
+ 'RIGHT', 'RIGHT-ALIGN', 'RIGHT-JUSTIFY', 'RIMMED',
+ 'ROLLING', 'ROUNDED', 'ROUNDING', 'ROW-COLOR', 'ROW-COLOR-PATTERN',
+ 'ROW-DIVIDERS', 'ROW-FONT', 'ROW-HEADINGS', 'ROW-PROTECTION',
+ 'ROWID', 'RUN', 'S01', 'S02', 'S03', 'S04', 'S05', 'SAME',
+ 'SAVE-AS', 'SAVE-AS-NO-PROMPT', 'SCREEN', 'SCROLL', 'SCROLL-BAR',
+ 'SD', 'SEARCH-OPTIONS', 'SEARCH-TEXT', 'SECONDS',
+ 'SECTION', 'SECURE', 'SECURITY', 'SEEK', 'SEGMENT', 'SEGMENT-LIMIT',
+ 'SELECT-ALL', 'SELECTION-INDEX', 'SELECTION-TEXT',
+ 'SELECTIVE', 'SELF', 'SELF-ACT', 'SELFCLASS', 'SEMAPHORE-POINTER',
+ 'SEND', 'SENTENCE', 'SEPARATE', 'SEPARATION', 'SEQUENCE',
+ 'SEQUENTIAL', 'SETTER', 'SHADING', 'SHADOW',
+ 'SHARING', 'SHIFT-IN', 'SHIFT-OUT', 'SHORT-DATE', 'SHOW-LINES',
+ 'SHOW-NONE', 'SHOW-SEL-ALWAYS', 'SIGNED', 'SIGNED-INT',
+ 'SIGNED-LONG', 'SIGNED-SHORT', 'SIZE', 'SKIP1',
+ 'SKIP2', 'SKIP3', 'SMALL-FONT', 'SORT-CONTROL',
+ 'SORT-CORE-SIZE', 'SORT-FILE-SIZE', 'SORT-MERGE', 'SORT-MESSAGE',
+ 'SORT-MODE-SIZE', 'SORT-OPTION', 'SORT-ORDER', 'SORT-RETURN',
+ 'SORT-TAPE', 'SORT-TAPES', 'SOURCE', 'SOURCE-COMPUTER', 'SOURCES',
+ 'SPACE', 'SPACE-FILL', 'SPACES', 'SPECIAL-NAMES', 'SPINNER', 'SQL',
+ 'SQUARE', 'STANDARD', 'STANDARD-1', 'STANDARD-2', 'STANDARD-3',
+ 'STANDARD-BINARY', 'STANDARD-DECIMAL',
+ 'START-X', 'START-Y', 'STARTING', 'STATEMENT', 'STATIC',
+ 'STATIC-LIST',
+ 'STATUS', 'STATUS-BAR', 'STATUS-TEXT', 'STEP',
+ 'STOP-BROWSER', 'STRONG', 'STYLE', 'SUB-QUEUE-1',
+ 'SUB-QUEUE-2', 'SUB-QUEUE-3', 'SUBFILE', 'SUBWINDOW',
+ 'SUFFIXING', 'SUPER', 'SYMBOL', 'SYMBOLIC',
+ 'SYNCHRONIZED', 'SYSIN', 'SYSIPT', 'SYSLST', 'SYSOUT',
+ 'SYSPCH', 'SYSPUNCH', 'SYSTEM', 'SYSTEM-DEFAULT', 'SYSTEM-INFO',
+ 'TAB', 'TAB-CONTROL', 'TAB-TO-ADD', 'TAB-TO-DELETE', 'TABLE',
+ 'TALLY', 'TALLYING', 'TAPE', 'TAPES', 'TEMPORARY', 'TERMINAL',
+ 'TERMINAL-INFO', 'TERMINATION-VALUE', 'TEST', 'TEXT',
+ 'THAN', 'THEN', 'THREAD', 'THREAD-LOCAL', 'THREAD-LOCAL-STORAGE',
+ 'THREAD-POINTER', 'THROUGH', 'THRU', 'THUMB-POSITION',
+ 'TILED-HEADINGS', 'TIME', 'TIME-OF-DAY', 'TIME-OUT', 'TIME-RECORD',
+ 'TIMEOUT', 'TIMES', 'TIMESTAMP', 'TIMESTAMP-OFFSET',
+ 'TIMESTAMP-OFFSET-RECORD', 'TIMESTAMP-RECORD', 'TITLE', 'TITLE-BAR',
+ 'TITLE-POSITION', 'TO', 'TOOL-BAR', 'TOP', 'TOTALED', 'TOTALING',
+ 'TOWARD-GREATER', 'TOWARD-LESSER',
+ 'TRACE', 'TRACK-AREA', 'TRACK-LIMIT', 'TRACK-THUMB', 'TRACKS',
+ 'TRADITIONAL-FONT', 'TRAILING', 'TRAILING-SHIFT', 'TRAILING-SIGN',
+ 'TRANSACTION', 'TRANSPARENT', 'TRANSPARENT-COLOR',
+ 'TREE-VIEW', 'TRUE', 'TRUNCATION', 'TYPE', 'TYPEDEF', 'UCS-4',
+ 'UNDERLINE', 'UNDERLINED', 'UNEQUAL', 'UNFRAMED', 'UNIT', 'UNITS',
+ 'UNIVERSAL', 'UNSIGNED', 'UNSIGNED-INT', 'UNSIGNED-LONG',
+ 'UNSIGNED-SHORT',
+ 'UNSORTED', 'UP', 'UPDATE', 'UNTIL', 'UPON', 'UPPER',
+ 'UPSI-0', 'UPSI-1', 'UPSI-2', 'UPSI-3', 'UPSI-4', 'UPSI-5',
+ 'UPSI-6', 'UPSI-7', 'USAGE', 'USE-ALT', 'USE-RETURN',
+ 'USE-TAB', 'USER', 'USER-COLORS', 'USER-DEFAULT', 'USER-GRAY',
+ 'USER-WHITE', 'USING', 'UTF-16', 'UTF-8', 'VALID',
+ 'VAL-STATUS', 'VALIDATE-STATUS',
+ 'VALUE', 'VALUE-FORMAT', 'VALUES', 'VALUETYPE', 'VALUETYPE-ID',
+ 'VARBINARY', 'VARIABLE', 'VARIANT', 'VARYING', 'VERTICAL',
+ 'VERY-HEAVY', 'VIRTUAL-WIDTH', 'VISIBLE', 'VPADDING', 'VSCROLL',
+ 'VSCROLL-BAR', 'VSCROLL-POS', 'VTOP', 'WEB-BROWSER', 'WHEN',
+ 'WHERE', 'WIDTH', 'WIDTH-IN-CELLS', 'WINDOW',
+ 'WITH', 'WORDS', 'WORKING-STORAGE', 'WRAP', 'WRITE-ONLY',
+ 'WRITE-VERIFY', 'WRITING', ' XML', 'XML ', 'XML-CODE', 'XML-EVENT',
+ 'XML-NTEXT', 'XML-TEXT', 'YIELDING', 'YYYYDDD', 'YYYYMMDD', 'ZERO',
+ 'ZERO-FILL', 'ZEROES', 'ZEROS'
),
- 3 => array( //Reserved in some contexts
- 'ACCESS', 'ADDRESS', 'ADVANCING', 'AFTER', 'ALL',
- 'ALPHABET', 'ALPHABETIC', 'ALPHABETIC-LOWER', 'ALPHABETIC-UPPER',
- 'ALPHANUMERIC', 'ALPHANUMERIC-EDITED', 'ALSO', 'ALTERNATE',
- 'AND', 'ANY', 'APPROXIMATE', 'AREA', 'AREAS', 'ASCENDING', 'ASSIGN',
- 'AT', 'AUTHOR', 'BEFORE', 'BINARY', 'BLOCK', 'BOTTOM', 'BY',
- 'CD', 'CF', 'CH', 'CHARACTER', 'CHARACTERS',
- 'CHARACTER-SET', 'CLASS', 'CLOCK-UNITS',
- 'CODE-SET', 'COLLATING', 'COLUMN', 'COMMA',
- 'COMMON', 'COMMUNICATION', 'COMP', 'COMP-3', 'COMP-5',
- 'COMPUTATIONAL', 'COMPUTATIONAL-3', 'COMPUTATIONAL-5',
- 'CONFIGURATION', 'CONTAINS', 'CONTENT', 'CONTROL',
- 'CONTROLS', 'CORR', 'COUNT',
- 'CURRENCY', 'DATA', 'DATE', 'DATE-COMPILED', 'DATE-WRITTEN', 'DAY',
- 'DAY-OF-WEEK', 'DE', 'DEBUG-CONTENTS', 'DEBUG-ITEM', 'DEBUG-LINE',
- 'DEBUG-SUB-2', 'DEBUG-SUB-3', 'DEBUGGING', 'DECIMAL-POINT',
- 'DECLARATIVES', 'DEBUG-NAME', 'DEBUG-SUB-1', 'DELIMITED',
- 'DELIMITER', 'DEPENDING', 'DESCENDING', 'DESTINATION', 'DETAIL',
- 'DISABLE', 'DIVISION', 'DOWN', 'DUPLICATES',
- 'DYNAMIC', 'EGI', 'ELSE', 'EMI', 'ENABLE', 'END', 'END-ADD',
- 'END-COMPUTE', 'END-DELETE', 'END-DIVIDE', 'END-EVALUATE', 'END-IF',
- 'END-MULTIPLY', 'END-OF-PAGE', 'END-PERFORM', 'END-READ',
- 'END-RECEIVE', 'END-RETURN', 'END-REWRITE', 'END-SEARCH',
- 'END-START', 'END-STRING', 'END-SUBTRACT', 'END-UNSTRING',
- 'END-WRITE', 'EOP', 'EQUAL', 'ERROR', 'ESI',
- 'EVERY', 'EXCEPTION', 'EXCLUSIVE', 'EXTEND',
- 'EXTENDED-STORAGE', 'EXTERNAL', 'FALSE', 'FD', 'FILE',
- 'FILE-CONTROL', 'FILLER', 'FINAL', 'FIRST', 'FOOTING', 'FOR',
- 'FROM', 'FUNCTION', 'GENERATE', 'GENERIC', 'GLOBAL',
- 'GREATER', 'GROUP', 'GUARDIAN-ERR', 'HIGH-VALUE',
- 'HIGH-VALUES', 'I-O', 'I-O-CONTROL', 'IDENTIFICATION', 'IN',
- 'INDEX', 'INDEXED', 'INDICATE', 'INITIAL', 'INITIATE',
- 'INPUT', 'INPUT-OUTPUT', 'INSTALLATION',
- 'INVALID', 'IS', 'JUST', 'JUSTIFIED', 'KEY', 'LABEL', 'LAST',
- 'LEADING', 'LEFT', 'LESS', 'LIMIT', 'LIMITS', 'LINAGE',
- 'LINAGE-COUNTER', 'LINE', 'LINE-COUNTER', 'LINKAGE', 'LOCK',
- 'LOW-VALUE', 'LOW-VALUES', 'MEMORY', 'MESSAGE',
- 'MODE', 'MODULES', 'MULTIPLE', 'NATIVE',
- 'NEGATIVE', 'NEXT', 'NO', 'NOT', 'NULL', 'NULLS', 'NUMBER',
- 'NUMERIC', 'NUMERIC-EDITED', 'OBJECT-COMPUTER', 'OCCURS', 'OF',
- 'OFF', 'OMITTED', 'ON', 'OPTIONAL', 'OR', 'ORDER',
- 'ORGANIZATION', 'OTHER', 'OUTPUT', 'OVERFLOW', 'PACKED-DECIMAL',
- 'PADDING', 'PAGE', 'PAGE-COUNTER', 'PF', 'PH', 'PIC',
- 'PICTURE', 'PLUS', 'POINTER', 'POSITION', 'POSITIVE', 'PRINTING',
- 'PROCEDURE', 'PROCEDURES', 'PROCEED', 'PROGRAM', 'PROGRAM-ID',
- 'PROGRAM-STATUS', 'PROGRAM-STATUS-1', 'PROGRAM-STATUS-2', 'PROMPT',
- 'PROTECTED', 'PURGE', 'QUEUE', 'QUOTE', 'QUOTES', 'RD',
- 'RECEIVE', 'RECEIVE-CONTROL', 'RECORD', 'RECORDS',
- 'REDEFINES', 'REEL', 'REFERENCE', 'REFERENCES', 'RELATIVE',
- 'REMOVAL', 'RENAMES', 'REPLACE',
- 'REPLY', 'REPORT', 'REPORTING', 'REPORTS', 'RERUN',
- 'RESERVE', 'RESET', 'REVERSED', 'REWIND', 'REWRITE', 'RF',
- 'RH', 'RIGHT', 'ROUNDED', 'RUN', 'SAME', 'SD',
- 'SECURITY', 'SEGMENT', 'SEGMENT-LIMIT', 'SELECT', 'SEND',
- 'SENTENCE', 'SEPARATE', 'SEQUENCE', 'SEQUENTIAL', 'SET',
- 'SIGN', 'SIZE', 'SORT', 'SORT-MERGE', 'SOURCE-COMPUTER',
- 'SPACE', 'SPACES', 'SPECIAL-NAMES', 'STANDARD', 'STANDARD-1',
- 'STANDARD-2', 'START', 'STARTBACKUP', 'STATUS', 'STOP', 'STRING',
- 'SUB-QUEUE-1', 'SUB-QUEUE-2', 'SUB-QUEUE-3', 'SUBTRACT',
- 'SYMBOLIC', 'SYNC', 'SYNCDEPTH', 'SYNCHRONIZED',
- 'TABLE', 'TAL', 'TAPE', 'TERMINAL', 'TERMINATE', 'TEST',
- 'TEXT', 'THAN', 'THEN', 'THROUGH', 'THRU', 'TIME',
- 'TOP', 'TRAILING', 'TRUE', 'TYPE', 'UNIT', 'UNLOCK', 'UNLOCKFILE',
- 'UNLOCKRECORD', 'UNSTRING', 'UP', 'UPON', 'USAGE', 'USE',
- 'USING', 'VALUE', 'VALUES', 'WHEN', 'WITH', 'WORDS',
- 'WORKING-STORAGE', 'WRITE', 'ZERO', 'ZEROES'
+ 3 => array( // Statement Keywords containing no spaces.
+ 'ACCEPT', 'ADD', 'ALTER', 'ALLOCATE', 'ATTACH', 'CALL', 'CANCEL',
+ 'CHAIN', 'CREATE',
+ 'CLOSE', 'COLOR', 'COMPUTE', 'COMMIT', 'CONTINUE',
+ 'COPY', 'DECLARE', 'DELEGATE', 'DELETE', 'DETACH', 'DISPLAY',
+ 'DIVIDE',
+ 'ENTER', 'ENTRY', 'EVALUATE', 'EXAMINE',
+ 'EXEC', 'EXECUTE', 'EXHIBIT', 'EXIT', 'FREE', 'GOBACK',
+ 'IF', 'INITIALIZE', 'INITIATE', 'INSPECT', 'INVOKE', 'MERGE',
+ 'MODIFY', 'MOVE', 'MULTIPLY', 'NOTE', 'ON', 'OPEN',
+ 'PERFORM', 'RAISE', 'READ', 'RECEIVE', 'RELEASE', 'RETURN',
+ 'RESET', 'RESUME',
+ 'REWRITE', 'ROLLBACK', 'SEARCH', 'SELECT', 'SERVICE', 'SET', 'SORT',
+ 'START', 'STOP', 'STRING', 'SUBTRACT', 'SYNC',
+ 'SUPPRESS', 'TERMINATE',
+ 'TRANSFORM', 'TRY', 'UNLOCKFILE', 'UNLOCK', 'UNSTRING', 'USE',
+ 'VALIDATE', 'WAIT', 'WRITE'
),
- 4 => array( //Standard functions
- 'ACOS', 'ANNUITY', 'ASIN', 'ATAN', 'CHAR', 'COS', 'CURRENT-DATE',
- 'DATE-OF-INTEGER', 'DAY-OF-INTEGER', 'FACTORIAL', 'INTEGER',
- 'INTEGER-OF-DATE', 'INTEGER-OF-DAY', 'INTEGER-PART', 'LENGTH',
- 'LOG', 'LOG10', 'LOWER-CASE', 'MAX', 'MEAN', 'MEDIAN', 'MIDRANGE',
- 'MIN', 'MOD', 'NUMVAL', 'NUMVAL-C', 'ORD', 'ORD-MAX', 'ORD-MIN',
- 'PRESENT-VALUE', 'RANDOM', 'RANGE', 'REM', 'REVERSE', 'SIN', 'SQRT',
- 'STANDARD-DEVIATION', 'SUM', 'TAN', 'UPPER-CASE', 'VARIANCE',
- 'WHEN-COMPILED'
+ 4 => array( // Intrinsic functions
+ 'ABS', 'ACOS', 'ANNUITY', 'ASIN', 'ATAN', 'BOOLEAN-OF-INTEGER',
+ 'BYTE-LENGTH', 'CHAR', 'CHAR-NATIONAL',
+ 'COS', 'COMBINED-DATETIME', 'CONCATENATE', 'CURRENT-DATE',
+ 'DATE-OF-INTEGER', 'DATE-TO-YYYYMMDD', 'DAY-TO-YYYYDDD',
+ 'DAY-OF-INTEGER', 'DISPLAY-OF', 'E', 'EXCEPTION-FILE',
+ 'EXCEPTION-FILE-N', 'EXCEPTION-LOCATION',
+ 'EXCEPTION-LOCATION-N', 'EXCEPTION-STATEMENT', 'EXCEPTION-STATUS',
+ 'EXP', 'EXP10', 'FACTORIAL', 'FORMATTED-CURRENT-DATE',
+ 'FORMATTED-DATE', 'FORMATTED-DATETIME', 'FORMATTED-TIME',
+ 'FRACTION-PART', 'HIGHEST-ALGEBRAIC', 'INTEGER',
+ 'INTEGER-OF-BOOLEAN', 'INTEGER-OF-DATE', 'INTEGER-OF-DAY',
+ 'INTEGER-OF-FORMATTED-DATE', 'INTEGER-PART', 'LENGTH',
+ 'LOCALE-COMPARE',
+ 'LOCALE-DATE', 'LOCALE-TIME', 'LOCALE-TIME-FROM-SECONDS',
+ 'LOCALE-TIME-FROM-SECS', 'LOG',
+ 'LOG10', 'LOWER-CASE', 'LOWEST-ALGEBRAIC',
+ 'MAX', 'MEAN', 'MEDIAN', 'MIDRANGE',
+ 'MIN', 'MOD', 'NATIONAL-OF', 'NUMVAL', 'NUMVAL-C', 'NUMVAL-F',
+ 'ORD', 'ORD-MAX', 'ORD-MIN',
+ 'PI', 'PRESENT-VALUE', 'RANDOM', 'RANGE', 'REM', 'REVERSE',
+ 'SECONDS-FROM-FORMATTED-TIME', 'SIGN', 'SIN', 'SQRT',
+ 'SECONDS-PAST-MIDNIGHT', 'STANDARD-DEVIATION', 'STANDARD-COMPARE',
+ 'STORED-CHAR-LENGTH',
+ 'SUBSTITUTE', 'SUBSTITUE-CASE', 'SUM', 'TAN', 'TEST-DATE-YYYYMMDD',
+ 'TEST-DAY-YYYYDDD', 'TEST-FORMATTED-TIME', 'TEST-NUMVAL',
+ 'TEST-NUMVAL-C', 'TEST-NUMVAL-F',
+ 'TRIM', 'UPPER-CASE', 'VARIANCE', 'YEAR-TO-YYYY', 'WHEN-COMPILED'
),
- 5 => array( //Privileged Built-in Functions
- '#IN', '#OUT', '#TERM', '#TEMP', '#DYNAMIC', 'COBOL85^ARMTRAP',
- 'COBOL85^COMPLETION', 'COBOL_COMPLETION_', 'COBOL_CONTROL_',
- 'COBOL_GETENV_', 'COBOL_PUTENV_', 'COBOL85^RETURN^SORT^ERRORS',
- 'COBOL_RETURN_SORT_ERRORS_', 'COBOL85^REWIND^SEQUENTIAL',
- 'COBOL_REWIND_SEQUENTIAL_', 'COBOL85^SET^SORT^PARAM^TEXT',
- 'COBOL_SET_SORT_PARAM_TEXT_', 'COBOL85^SET^SORT^PARAM^VALUE',
- 'COBOL_SET_SORT_PARAM_VALUE_', 'COBOL_SET_MAX_RECORD_',
- 'COBOL_SETMODE_', 'COBOL85^SPECIAL^OPEN', 'COBOL_SPECIAL_OPEN_',
- 'COBOLASSIGN', 'COBOL_ASSIGN_', 'COBOLFILEINFO', 'COBOL_FILE_INFO_',
- 'COBOLSPOOLOPEN', 'CREATEPROCESS', 'ALTERPARAMTEXT',
- 'CHECKLOGICALNAME', 'CHECKMESSAGE', 'DELETEASSIGN', 'DELETEPARAM',
- 'DELETESTARTUP', 'GETASSIGNTEXT', 'GETASSIGNVALUE', 'GETBACKUPCPU',
- 'GETPARAMTEXT', 'GETSTARTUPTEXT', 'PUTASSIGNTEXT', 'PUTASSIGNVALUE',
- 'PUTPARAMTEXT', 'PUTSTARTUPTEXT'
- )
),
'SYMBOLS' => array(
- //Avoid having - in identifiers marked as symbols
- ' + ', ' - ', ' * ', ' / ', ' ** ',
+ // Arithmetic and comparison operators must be surrounded by spaces.
+ ' + ', ' - ', ' * ', ' / ', ' ** ', ' ^ ',
'.', ',',
- '=',
+ ' = ', ' < ', ' > ', ' >= ', ' <= ', ' <> ',
'(', ')', '[', ']'
),
'CASE_SENSITIVE' => array(
@@ -184,22 +397,19 @@ $language_data = array (
2 => false,
3 => false,
4 => false,
- 5 => false
),
'STYLES' => array(
'KEYWORDS' => array(
- 1 => 'color: #000080; font-weight: bold;',
- 2 => 'color: #000000; font-weight: bold;',
- 3 => 'color: #008000; font-weight: bold;',
- 4 => 'color: #000080;',
- 5 => 'color: #008000;',
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #008000; font-weight: bold;',
+ 3 => 'color: #000000; font-weight: bold;',
+ 4 => 'color: #9d7700;',
),
'COMMENTS' => array(
1 => 'color: #a0a0a0; font-style: italic;',
- 'MULTI' => 'color: #a0a0a0; font-style: italic;'
+ 2 => 'color: #000080; font-weight: bold;',
),
'ESCAPE_CHAR' => array(
- 0 => 'color: #000099; font-weight: bold;'
),
'BRACKETS' => array(
0 => 'color: #339933;'
@@ -211,7 +421,7 @@ $language_data = array (
0 => 'color: #993399;'
),
'METHODS' => array(
- 1 => 'color: #202020;'
+ 1 => 'color: #800080;'
),
'SYMBOLS' => array(
0 => 'color: #000066;'
@@ -225,11 +435,11 @@ $language_data = array (
1 => '',
2 => '',
3 => '',
- 4 => '',
- 5 => ''
+ 4 => ''
),
- 'OOLANG' => false,
+ 'OOLANG' => true,
'OBJECT_SPLITTERS' => array(
+ 1 => '::'
),
'REGEXPS' => array(
),
@@ -238,7 +448,10 @@ $language_data = array (
),
'HIGHLIGHT_STRICT_BLOCK' => array(
),
- 'TAB_WIDTH' => 4
- );
-
-?>
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9-\$_\|\#|^&])',
+ ),
+ ),
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/coffeescript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/coffeescript.php
index 194aecd0..7a69e216 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/coffeescript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/coffeescript.php
@@ -4,7 +4,7 @@
* ----------
* Author: Trevor Burnham (trevorburnham@gmail.com)
* Copyright: (c) 2010 Trevor Burnham (http://iterative.ly)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/06/08
*
* CoffeeScript language file for GeSHi.
@@ -142,5 +142,3 @@ $language_data = array (
0 => true
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php
index 36626c90..fbd5c842 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-qt.php
@@ -4,7 +4,7 @@
* -------
* Author: Iulian M
* Copyright: (c) 2006 Iulian M
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/09/27
*
* C++ (with Qt extensions) language file for GeSHi.
@@ -48,7 +48,11 @@ $language_data = array (
//Multiline-continued single-line comments
1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
//Multiline-continued preprocessor define
- 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //C++ 11 string literal extensions
+ 3 => '/(?:L|u8?|U)(?=")/',
+ //C++ 11 string literal extensions (raw)
+ 4 => '/R"([^()\s\\\\]*)\((?:(?!\)\\1").)*\)\\1"/ms'
),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
'QUOTEMARKS' => array("'", '"'),
@@ -489,6 +493,8 @@ $language_data = array (
'COMMENTS' => array(
1 => 'color: #888888;',
2 => 'color: #006E28;',
+ 3 => 'color: #BF0303;',
+ 4 => 'color: #BF0303;',
'MULTI' => 'color: #888888; font-style: italic;'
),
'ESCAPE_CHAR' => array(
@@ -534,7 +540,7 @@ $language_data = array (
2 => '',
3 => '',
4 => '',
- 5 => 'http://doc.trolltech.com/latest/{FNAMEL}.html'
+ 5 => 'http://qt-project.org/doc/latest/{FNAMEL}.html'
),
'OOLANG' => true,
'OBJECT_SPLITTERS' => array(
@@ -560,5 +566,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-winapi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-winapi.php
new file mode 100644
index 00000000..f642616a
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp-winapi.php
@@ -0,0 +1,836 @@
+<?php
+/*************************************************************************************
+ * cpp-winapi.php
+ * -------
+ * Author: Dennis Bayer (Dennis.Bayer@mnifh-giessen.de)
+ * Contributors:
+ * - M. Uli Kusterer (witness.of.teachtext@gmx.net)
+ * - Jack Lloyd (lloyd@randombit.net)
+ * - Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2004 Dennis Bayer, Nigel McNie, 2012 Benny Baumann (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.12
+ * Date Started: 2004/09/27
+ *
+ * C++ language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/XX/XX (1.0.2)
+ * - Added several new keywords (Jack Lloyd)
+ * 2004/11/27 (1.0.1)
+ * - Added StdCLib function and constant names, changed color scheme to
+ * a cleaner one. (M. Uli Kusterer)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C++ (WinAPI)',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //C++ 11 string literal extensions
+ 3 => '/(?:L|u8?|U)(?=")/',
+ //C++ 11 string literal extensions (raw)
+ 4 => '/R"([^()\s\\\\]*)\((?:(?!\)\\1").)*\)\\1"/ms'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[abfnrtv\\\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'break', 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return',
+ 'switch', 'throw', 'while'
+ ),
+ 2 => array(
+ 'NULL', 'false', 'true', 'enum', 'errno', 'EDOM',
+ 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+ 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+ 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+ 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+ 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+ 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+ 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+ 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+ 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
+ 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
+ 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
+ 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
+ 'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
+ 'static_cast', 'explicit', 'friend', 'typename', 'typeid', 'class'
+ ),
+ 3 => array(
+ 'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this',
+ 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+ 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+ 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+ 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+ 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+ 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+ 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+ 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+ 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+ 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+ 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+ 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+ 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+ 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+ 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+ 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+ 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+ 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+ ),
+ 4 => array(
+ 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
+ 'register', 'short', 'shortint', 'signed', 'static', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
+ 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+ 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', 'wchar_t',
+
+ 'int8', 'int16', 'int32', 'int64',
+ 'uint8', 'uint16', 'uint32', 'uint64',
+
+ 'int_fast8_t', 'int_fast16_t', 'int_fast32_t', 'int_fast64_t',
+ 'uint_fast8_t', 'uint_fast16_t', 'uint_fast32_t', 'uint_fast64_t',
+
+ 'int_least8_t', 'int_least16_t', 'int_least32_t', 'int_least64_t',
+ 'uint_least8_t', 'uint_least16_t', 'uint_least32_t', 'uint_least64_t',
+
+ 'int8_t', 'int16_t', 'int32_t', 'int64_t',
+ 'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t',
+
+ 'intmax_t', 'uintmax_t', 'intptr_t', 'uintptr_t'
+ ),
+ // Public API
+ 5 => array(
+ 'AssignProcessToJobObject', 'CommandLineToArgvW', 'ConvertThreadToFiber',
+ 'CreateFiber', 'CreateJobObjectA', 'CreateJobObjectW', 'CreateProcessA',
+ 'CreateProcessAsUserA', 'CreateProcessAsUserW', 'CreateProcessW',
+ 'CreateRemoteThread', 'CreateThread', 'DeleteFiber', 'ExitProcess',
+ 'ExitThread', 'FreeEnvironmentStringsA', 'FreeEnvironmentStringsW',
+ 'GetCommandLineA', 'GetCommandLineW', 'GetCurrentProcess',
+ 'GetCurrentProcessId', 'GetCurrentThread', 'GetCurrentThreadId',
+ 'GetEnvironmentStringsA', 'GetEnvironmentStringsW',
+ 'GetEnvironmentVariableA', 'GetEnvironmentVariableW', 'GetExitCodeProcess',
+ 'GetExitCodeThread', 'GetGuiResources', 'GetPriorityClass',
+ 'GetProcessAffinityMask', 'GetProcessPriorityBoost',
+ 'GetProcessShutdownParameters', 'GetProcessTimes', 'GetProcessVersion',
+ 'GetProcessWorkingSetSize', 'GetStartupInfoA', 'GetStartupInfoW',
+ 'GetThreadPriority', 'GetThreadPriorityBoost', 'GetThreadTimes',
+ 'OpenJobObjectA', 'OpenJobObjectW', 'OpenProcess',
+ 'QueryInformationJobObject', 'ResumeThread', 'SetEnvironmentVariableA',
+ 'SetEnvironmentVariableW', 'SetInformationJobObject', 'SetPriorityClass',
+ 'SetProcessAffinityMask', 'SetProcessPriorityBoost',
+ 'SetProcessShutdownParameters', 'SetProcessWorkingSetSize',
+ 'SetThreadAffinityMask', 'SetThreadIdealProcessor', 'SetThreadPriority',
+ 'SetThreadPriorityBoost', 'Sleep', 'SleepEx', 'SuspendThread',
+ 'SwitchToFiber', 'SwitchToThread', 'TerminateJobObject', 'TerminateProcess',
+ 'TerminateThread', 'WaitForInputIdle', 'WinExec',
+
+ '_hread', '_hwrite', '_lclose', '_lcreat', '_llseek', '_lopen', '_lread',
+ '_lwrite', 'AreFileApisANSI', 'CancelIo', 'CopyFileA', 'CopyFileW',
+ 'CreateDirectoryA', 'CreateDirectoryExA', 'CreateDirectoryExW',
+ 'CreateDirectoryW', 'CreateFileA', 'CreateFileW', 'DeleteFileA',
+ 'DeleteFileW', 'FindClose', 'FindCloseChangeNotification',
+ 'FindFirstChangeNotificationA', 'FindFirstChangeNotificationW',
+ 'FindFirstFileA', 'FindFirstFileW', 'FindNextFileA', 'FindNextFileW',
+ 'FlushFileBuffers', 'GetCurrentDirectoryA', 'GetCurrentDirectoryW',
+ 'GetDiskFreeSpaceA', 'GetDiskFreeSpaceExA', 'GetDiskFreeSpaceExW',
+ 'GetDiskFreeSpaceW', 'GetDriveTypeA', 'GetDriveTypeW', 'GetFileAttributesA',
+ 'GetFileAttributesExA', 'GetFileAttributesExW', 'GetFileAttributesW',
+ 'GetFileInformationByHandle', 'GetFileSize', 'GetFileType',
+ 'GetFullPathNameA', 'GetFullPathNameW', 'GetLogicalDrives',
+ 'GetLogicalDriveStringsA', 'GetLogicalDriveStringsW', 'GetLongPathNameA',
+ 'GetLongPathNameW', 'GetShortPathNameA', 'GetShortPathNameW',
+ 'GetTempFileNameA', 'GetTempFileNameW', 'GetTempPathA', 'GetTempPathW',
+ 'LockFile', 'MoveFileA', 'MoveFileW', 'MulDiv', 'OpenFile',
+ 'QueryDosDeviceA', 'QueryDosDeviceW', 'ReadFile', 'ReadFileEx',
+ 'RemoveDirectoryA', 'RemoveDirectoryW', 'SearchPathA', 'SearchPathW',
+ 'SetCurrentDirectoryA', 'SetCurrentDirectoryW', 'SetEndOfFile',
+ 'SetFileApisToANSI', 'SetFileApisToOEM', 'SetFileAttributesA',
+ 'SetFileAttributesW', 'SetFilePointer', 'SetHandleCount',
+ 'SetVolumeLabelA', 'SetVolumeLabelW', 'UnlockFile', 'WriteFile',
+ 'WriteFileEx',
+
+ 'DeviceIoControl',
+
+ 'GetModuleFileNameA', 'GetModuleFileNameW', 'GetProcAddress',
+ 'LoadLibraryA', 'LoadLibraryExA', 'LoadLibraryExW', 'LoadLibraryW',
+ 'LoadModule',
+
+ 'GetPrivateProfileIntA', 'GetPrivateProfileIntW',
+ 'GetPrivateProfileSectionA', 'GetPrivateProfileSectionNamesA',
+ 'GetPrivateProfileSectionNamesW', 'GetPrivateProfileSectionW',
+ 'GetPrivateProfileStringA', 'GetPrivateProfileStringW',
+ 'GetPrivateProfileStructA', 'GetPrivateProfileStructW',
+ 'GetProfileIntA', 'GetProfileIntW', 'GetProfileSectionA',
+ 'GetProfileSectionW', 'GetProfileStringA', 'GetProfileStringW',
+ 'RegCloseKey', 'RegConnectRegistryA', 'RegConnectRegistryW',
+ 'RegCreateKeyA', 'RegCreateKeyExA', 'RegCreateKeyExW',
+ 'RegCreateKeyW', 'RegDeleteKeyA', 'RegDeleteKeyW', 'RegDeleteValueA',
+ 'RegDeleteValueW', 'RegEnumKeyA', 'RegEnumKeyExA', 'RegEnumKeyExW',
+ 'RegEnumKeyW', 'RegEnumValueA', 'RegEnumValueW', 'RegFlushKey',
+ 'RegGetKeySecurity', 'RegLoadKeyA', 'RegLoadKeyW',
+ 'RegNotifyChangeKeyValue', 'RegOpenKeyA', 'RegOpenKeyExA', 'RegOpenKeyExW',
+ 'RegOpenKeyW', 'RegOverridePredefKey', 'RegQueryInfoKeyA',
+ 'RegQueryInfoKeyW', 'RegQueryMultipleValuesA', 'RegQueryMultipleValuesW',
+ 'RegQueryValueA', 'RegQueryValueExA', 'RegQueryValueExW', 'RegQueryValueW',
+ 'RegReplaceKeyA', 'RegReplaceKeyW', 'RegRestoreKeyA', 'RegRestoreKeyW',
+ 'RegSaveKeyA', 'RegSaveKeyW', 'RegSetKeySecurity', 'RegSetValueA',
+ 'RegSetValueExA', 'RegSetValueExW', 'RegSetValueW', 'RegUnLoadKeyA',
+ 'RegUnLoadKeyW', 'WritePrivateProfileSectionA', 'WritePrivateProfileSectionW',
+ 'WritePrivateProfileStringA', 'WritePrivateProfileStringW',
+ 'WritePrivateProfileStructA', 'WritePrivateProfileStructW',
+ 'WriteProfileSectionA', 'WriteProfileSectionW', 'WriteProfileStringA',
+ 'WriteProfileStringW',
+
+ 'AccessCheck', 'AccessCheckAndAuditAlarmA', 'AccessCheckAndAuditAlarmW',
+ 'AccessCheckByType', 'AccessCheckByTypeAndAuditAlarmA',
+ 'AccessCheckByTypeAndAuditAlarmW', 'AccessCheckByTypeResultList',
+ 'AccessCheckByTypeResultListAndAuditAlarmA', 'AccessCheckByTypeResultListAndAuditAlarmW',
+ 'AddAccessAllowedAce', 'AddAccessAllowedAceEx', 'AddAccessAllowedObjectAce',
+ 'AddAccessDeniedAce', 'AddAccessDeniedAceEx', 'AddAccessDeniedObjectAce',
+ 'AddAce', 'AddAuditAccessAce', 'AddAuditAccessAceEx', 'AddAuditAccessObjectAce',
+ 'AdjustTokenGroups', 'AdjustTokenPrivileges', 'AllocateAndInitializeSid',
+ 'AllocateLocallyUniqueId', 'AreAllAccessesGranted', 'AreAnyAccessesGranted',
+ 'BuildExplicitAccessWithNameA', 'BuildExplicitAccessWithNameW',
+ 'BuildImpersonateExplicitAccessWithNameA', 'BuildImpersonateExplicitAccessWithNameW',
+ 'BuildImpersonateTrusteeA', 'BuildImpersonateTrusteeW', 'BuildSecurityDescriptorA',
+ 'BuildSecurityDescriptorW', 'BuildTrusteeWithNameA', 'BuildTrusteeWithNameW',
+ 'BuildTrusteeWithSidA', 'BuildTrusteeWithSidW',
+ 'ConvertToAutoInheritPrivateObjectSecurity', 'CopySid', 'CreatePrivateObjectSecurity',
+ 'CreatePrivateObjectSecurityEx', 'CreateRestrictedToken', 'DeleteAce',
+ 'DestroyPrivateObjectSecurity', 'DuplicateToken', 'DuplicateTokenEx',
+ 'EqualPrefixSid', 'EqualSid', 'FindFirstFreeAce', 'FreeSid', 'GetAce',
+ 'GetAclInformation', 'GetAuditedPermissionsFromAclA', 'GetAuditedPermissionsFromAclW',
+ 'GetEffectiveRightsFromAclA', 'GetEffectiveRightsFromAclW',
+ 'GetExplicitEntriesFromAclA', 'GetExplicitEntriesFromAclW', 'GetFileSecurityA',
+ 'GetFileSecurityW', 'GetKernelObjectSecurity', 'GetLengthSid', 'GetMultipleTrusteeA',
+ 'GetMultipleTrusteeOperationA', 'GetMultipleTrusteeOperationW', 'GetMultipleTrusteeW',
+ 'GetNamedSecurityInfoA', 'GetNamedSecurityInfoW', 'GetPrivateObjectSecurity',
+ 'GetSecurityDescriptorControl', 'GetSecurityDescriptorDacl',
+ 'GetSecurityDescriptorGroup', 'GetSecurityDescriptorLength',
+ 'GetSecurityDescriptorOwner', 'GetSecurityDescriptorSacl', 'GetSecurityInfo',
+ 'GetSidIdentifierAuthority', 'GetSidLengthRequired', 'GetSidSubAuthority',
+ 'GetSidSubAuthorityCount', 'GetTokenInformation', 'GetTrusteeFormA',
+ 'GetTrusteeFormW', 'GetTrusteeNameA', 'GetTrusteeNameW', 'GetTrusteeTypeA',
+ 'GetTrusteeTypeW', 'GetUserObjectSecurity', 'ImpersonateLoggedOnUser',
+ 'ImpersonateNamedPipeClient', 'ImpersonateSelf', 'InitializeAcl',
+ 'InitializeSecurityDescriptor', 'InitializeSid', 'IsTokenRestricted', 'IsValidAcl',
+ 'IsValidSecurityDescriptor', 'IsValidSid', 'LogonUserA', 'LogonUserW',
+ 'LookupAccountNameA', 'LookupAccountNameW', 'LookupAccountSidA', 'LookupAccountSidW',
+ 'LookupPrivilegeDisplayNameA', 'LookupPrivilegeDisplayNameW', 'LookupPrivilegeNameA',
+ 'LookupPrivilegeNameW', 'LookupPrivilegeValueA', 'LookupPrivilegeValueW',
+ 'LookupSecurityDescriptorPartsA', 'LookupSecurityDescriptorPartsW', 'MakeAbsoluteSD',
+ 'MakeSelfRelativeSD', 'MapGenericMask', 'ObjectCloseAuditAlarmA',
+ 'ObjectCloseAuditAlarmW', 'ObjectDeleteAuditAlarmA', 'ObjectDeleteAuditAlarmW',
+ 'ObjectOpenAuditAlarmA', 'ObjectOpenAuditAlarmW', 'ObjectPrivilegeAuditAlarmA',
+ 'ObjectPrivilegeAuditAlarmW', 'OpenProcessToken', 'OpenThreadToken', 'PrivilegeCheck',
+ 'PrivilegedServiceAuditAlarmA', 'PrivilegedServiceAuditAlarmW', 'RevertToSelf',
+ 'SetAclInformation', 'SetEntriesInAclA', 'SetEntriesInAclW', 'SetFileSecurityA',
+ 'SetFileSecurityW', 'SetKernelObjectSecurity', 'SetNamedSecurityInfoA',
+ 'SetNamedSecurityInfoW', 'SetPrivateObjectSecurity', 'SetPrivateObjectSecurityEx',
+ 'SetSecurityDescriptorControl', 'SetSecurityDescriptorDacl',
+ 'SetSecurityDescriptorGroup', 'SetSecurityDescriptorOwner',
+ 'SetSecurityDescriptorSacl', 'SetSecurityInfo', 'SetThreadToken',
+ 'SetTokenInformation', 'SetUserObjectSecurity', 'ChangeServiceConfig2A',
+ 'ChangeServiceConfig2W', 'ChangeServiceConfigA', 'ChangeServiceConfigW',
+ 'CloseServiceHandle', 'ControlService', 'CreateServiceA', 'CreateServiceW',
+ 'DeleteService', 'EnumDependentServicesA', 'EnumDependentServicesW',
+ 'EnumServicesStatusA', 'EnumServicesStatusW', 'GetServiceDisplayNameA',
+ 'GetServiceDisplayNameW', 'GetServiceKeyNameA', 'GetServiceKeyNameW',
+ 'LockServiceDatabase', 'NotifyBootConfigStatus', 'OpenSCManagerA', 'OpenSCManagerW',
+ 'OpenServiceA', 'OpenServiceW', 'QueryServiceConfig2A', 'QueryServiceConfig2W',
+ 'QueryServiceConfigA', 'QueryServiceConfigW', 'QueryServiceLockStatusA',
+ 'QueryServiceLockStatusW', 'QueryServiceObjectSecurity', 'QueryServiceStatus',
+ 'RegisterServiceCtrlHandlerA', 'RegisterServiceCtrlHandlerW',
+ 'SetServiceObjectSecurity', 'SetServiceStatus', 'StartServiceA',
+ 'StartServiceCtrlDispatcherA', 'StartServiceCtrlDispatcherW', 'StartServiceW',
+ 'UnlockServiceDatabase',
+
+ 'MultinetGetConnectionPerformanceA', 'MultinetGetConnectionPerformanceW',
+ 'NetAlertRaise', 'NetAlertRaiseEx', 'NetApiBufferAllocate', 'NetApiBufferFree',
+ 'NetApiBufferReallocate', 'NetApiBufferSize', 'NetConnectionEnum', 'NetFileClose',
+ 'NetFileGetInfo', 'NetGetAnyDCName', 'NetGetDCName', 'NetGetDisplayInformationIndex',
+ 'NetGroupAdd', 'NetGroupAddUser', 'NetGroupDel', 'NetGroupDelUser', 'NetGroupEnum',
+ 'NetGroupGetInfo', 'NetGroupGetUsers', 'NetGroupSetInfo', 'NetGroupSetUsers',
+ 'NetLocalGroupAdd', 'NetLocalGroupAddMember', 'NetLocalGroupAddMembers',
+ 'NetLocalGroupDel', 'NetLocalGroupDelMember', 'NetLocalGroupDelMembers',
+ 'NetLocalGroupEnum', 'NetLocalGroupGetInfo', 'NetLocalGroupGetMembers',
+ 'NetLocalGroupSetInfo', 'NetLocalGroupSetMembers', 'NetMessageBufferSend',
+ 'NetMessageNameAdd', 'NetMessageNameDel', 'NetMessageNameEnum',
+ 'NetMessageNameGetInfo', 'NetQueryDisplayInformation', 'NetRemoteComputerSupports',
+ 'NetRemoteTOd', 'NetReplExportDirAdd', 'NetReplExportDirDel', 'NetReplExportDirEnum',
+ 'NetReplExportDirGetInfo', 'NetReplExportDirLock', 'NetReplExportDirSetInfo',
+ 'NetReplExportDirUnlock', 'NetReplGetInfo', 'NetReplImportDirAdd',
+ 'NetReplImportDirDel', 'NetReplImportDirEnum', 'NetReplImportDirGetInfo',
+ 'NetReplImportDirLock', 'NetReplImportDirUnlock', 'NetReplSetInfo',
+ 'NetScheduleJobAdd', 'NetScheduleJobDel', 'NetScheduleJobEnum',
+ 'NetScheduleJobGetInfo', 'NetServerComputerNameAdd', 'NetServerComputerNameDel',
+ 'NetServerDiskEnum', 'NetServerEnum', 'NetServerEnumEx', 'NetServerGetInfo',
+ 'NetServerSetInfo', 'NetServerTransportAdd', 'NetServerTransportAddEx',
+ 'NetServerTransportDel', 'NetServerTransportEnum', 'NetSessionDel', 'NetSessionEnum',
+ 'NetSessionGetInfo', 'NetShareAdd', 'NetShareCheck', 'NetShareDel', 'NetShareEnum',
+ 'NetShareGetInfo', 'NetShareSetInfo', 'NetStatisticsGet', 'NetUseAdd', 'NetUseDel',
+ 'NetUseEnum', 'NetUseGetInfo', 'NetUserAdd', 'NetUserChangePassword', 'NetUserDel',
+ 'NetUserEnum', 'NetUserGetGroups', 'NetUserGetInfo', 'NetUserGetLocalGroups',
+ 'NetUserModalsGet', 'NetUserModalsSet', 'NetUserSetGroups', 'NetUserSetInfo',
+ 'NetWkstaGetInfo', 'NetWkstaSetInfo', 'NetWkstaTransportAdd', 'NetWkstaTransportDel',
+ 'NetWkstaTransportEnum', 'NetWkstaUserEnum', 'NetWkstaUserGetInfo',
+ 'NetWkstaUserSetInfo', 'WNetAddConnection2A', 'WNetAddConnection2W',
+ 'WNetAddConnection3A', 'WNetAddConnection3W', 'WNetAddConnectionA',
+ 'WNetAddConnectionW', 'WNetCancelConnection2A', 'WNetCancelConnection2W',
+ 'WNetCancelConnectionA', 'WNetCancelConnectionW', 'WNetCloseEnum',
+ 'WNetConnectionDialog', 'WNetConnectionDialog1A', 'WNetConnectionDialog1W',
+ 'WNetDisconnectDialog', 'WNetDisconnectDialog1A', 'WNetDisconnectDialog1W',
+ 'WNetEnumResourceA', 'WNetEnumResourceW', 'WNetGetConnectionA', 'WNetGetConnectionW',
+ 'WNetGetLastErrorA', 'WNetGetLastErrorW', 'WNetGetNetworkInformationA',
+ 'WNetGetNetworkInformationW', 'WNetGetProviderNameA', 'WNetGetProviderNameW',
+ 'WNetGetResourceInformationA', 'WNetGetResourceInformationW',
+ 'WNetGetResourceParentA', 'WNetGetResourceParentW', 'WNetGetUniversalNameA',
+ 'WNetGetUniversalNameW', 'WNetGetUserA', 'WNetGetUserW', 'WNetOpenEnumA',
+ 'WNetOpenEnumW', 'WNetUseConnectionA', 'WnetUseConnectionW',
+
+ 'accept', 'bind', 'closesocket', 'connect', 'gethostbyaddr', 'gethostbyname',
+ 'gethostname', 'getpeername', 'getprotobyname', 'getprotobynumber', 'getservbyname',
+ 'getservbyport', 'getsockname', 'getsockopt', 'htonl', 'htons', 'inet_addr',
+ 'inet_ntoa', 'ioctlsocket', 'listen', 'ntohl', 'ntohs', 'recv', 'recvfrom', 'select',
+ 'send', 'sendto', 'setsockopt', 'shutdown', 'socket', 'WSAAccept',
+ 'WSAAddressToStringA', 'WSAAddressToStringW', 'WSAAsyncGetHostByAddr',
+ 'WSAAsyncGetHostByName', 'WSAAsyncGetProtoByName', 'WSAAsyncGetProtoByNumber',
+ 'WSAAsyncGetServByName', 'WSAAsyncGetServByPort', 'WSAAsyncSelect',
+ 'WSACancelAsyncRequest', 'WSACancelBlockingCall', 'WSACleanup', 'WSACloseEvent',
+ 'WSAConnect', 'WSACreateEvent', 'WSADuplicateSocketA', 'WSADuplicateSocketW',
+ 'WSAEnumNameSpaceProvidersA', 'WSAEnumNameSpaceProvidersW', 'WSAEnumNetworkEvents',
+ 'WSAEnumProtocolsA', 'WSAEnumProtocolsW', 'WSAEventSelect', 'WSAGetLastError',
+ 'WSAGetOverlappedResult', 'WSAGetQOSByName', 'WSAGetServiceClassInfoA',
+ 'WSAGetServiceClassInfoW', 'WSAGetServiceClassNameByClassIdA',
+ 'WSAGetServiceClassNameByClassIdW', 'WSAHtonl', 'WSAHtons', 'WSAInstallServiceClassA',
+ 'WSAInstallServiceClassW', 'WSAIoctl', 'WSAIsBlocking', 'WSAJoinLeaf',
+ 'WSALookupServiceBeginA', 'WSALookupServiceBeginW', 'WSALookupServiceEnd',
+ 'WSALookupServiceNextA', 'WSALookupServiceNextW', 'WSANtohl', 'WSANtohs',
+ 'WSAProviderConfigChange', 'WSARecv', 'WSARecvDisconnect', 'WSARecvFrom',
+ 'WSARemoveServiceClass', 'WSAResetEvent', 'WSASend', 'WSASendDisconnect', 'WSASendTo',
+ 'WSASetBlockingHook', 'WSASetEvent', 'WSASetLastError', 'WSASetServiceA',
+ 'WSASetServiceW', 'WSASocketA', 'WSASocketW', 'WSAStartup', 'WSAStringToAddressA',
+ 'WSAStringToAddressW', 'WSAUnhookBlockingHook', 'WSAWaitForMultipleEvents',
+ 'WSCDeinstallProvider', 'WSCEnableNSProvider', 'WSCEnumProtocols',
+ 'WSCGetProviderPath', 'WSCInstallNameSpace', 'WSCInstallProvider',
+ 'WSCUnInstallNameSpace',
+
+ 'ContinueDebugEvent', 'DebugActiveProcess', 'DebugBreak', 'FatalExit',
+ 'FlushInstructionCache', 'GetThreadContext', 'GetThreadSelectorEntry',
+ 'IsDebuggerPresent', 'OutputDebugStringA', 'OutputDebugStringW', 'ReadProcessMemory',
+ 'SetDebugErrorLevel', 'SetThreadContext', 'WaitForDebugEvent', 'WriteProcessMemory',
+
+ 'CloseHandle', 'DuplicateHandle', 'GetHandleInformation', 'SetHandleInformation',
+
+ 'AdjustWindowRect', 'AdjustWindowRectEx', 'AllowSetForegroundWindow',
+ 'AnimateWindow', 'AnyPopup', 'ArrangeIconicWindows', 'BeginDeferWindowPos',
+ 'BringWindowToTop', 'CascadeWindows', 'ChildWindowFromPoint',
+ 'ChildWindowFromPointEx', 'CloseWindow', 'CreateWindowExA', 'CreateWindowExW',
+ 'DeferWindowPos', 'DestroyWindow', 'EndDeferWindowPos', 'EnumChildWindows',
+ 'EnumThreadWindows', 'EnumWindows', 'FindWindowA', 'FindWindowExA', 'FindWindowExW',
+ 'FindWindowW', 'GetAltTabInfoA', 'GetAltTabInfoW', 'GetAncestor', 'GetClientRect',
+ 'GetDesktopWindow', 'GetForegroundWindow', 'GetGUIThreadInfo', 'GetLastActivePopup',
+ 'GetLayout', 'GetParent', 'GetProcessDefaultLayout', 'GetTitleBarInf', 'GetTopWindow',
+ 'GetWindow', 'GetWindowInfo', 'GetWindowModuleFileNameA', 'GetWindowModuleFileNameW',
+ 'GetWindowPlacement', 'GetWindowRect', 'GetWindowTextA', 'GetWindowTextLengthA',
+ 'GetWindowTextLengthW', 'GetWindowTextW', 'GetWindowThreadProcessId', 'IsChild',
+ 'IsIconic', 'IsWindow', 'IsWindowUnicode', 'IsWindowVisible', 'IsZoomed',
+ 'LockSetForegroundWindow', 'MoveWindow', 'OpenIcon', 'RealChildWindowFromPoint',
+ 'RealGetWindowClassA', 'RealGetWindowClassW', 'SetForegroundWindow',
+ 'SetLayeredWindowAttributes', 'SetLayout', 'SetParent', 'SetProcessDefaultLayout',
+ 'SetWindowPlacement', 'SetWindowPos', 'SetWindowTextA', 'SetWindowTextW',
+ 'ShowOwnedPopups', 'ShowWindow', 'ShowWindowAsync', 'TileWindows',
+ 'UpdateLayeredWindow', 'WindowFromPoint',
+
+ 'CreateDialogIndirectParamA', 'CreateDialogIndirectParamW', 'CreateDialogParamA',
+ 'CreateDialogParamW', 'DefDlgProcA', 'DefDlgProcW', 'DialogBoxIndirectParamA',
+ 'DialogBoxIndirectParamW', 'DialogBoxParamA', 'DialogBoxParamW', 'EndDialog',
+ 'GetDialogBaseUnits', 'GetDlgCtrlID', 'GetDlgItem', 'GetDlgItemInt',
+ 'GetDlgItemTextA', 'GetDlgItemTextW', 'GetNextDlgGroupItem', 'GetNextDlgTabItem',
+ 'IsDialogMessageA', 'IsDialogMessageW', 'MapDialogRect', 'MessageBoxA',
+ 'MessageBoxExA', 'MessageBoxExW', 'MessageBoxIndirectA', 'MessageBoxIndirectW',
+ 'MessageBoxW', 'SendDlgItemMessageA', 'SendDlgItemMessageW', 'SetDlgItemInt',
+ 'SetDlgItemTextA', 'SetDlgItemTextW',
+
+ 'GetWriteWatch', 'GlobalMemoryStatus', 'GlobalMemoryStatusEx', 'IsBadCodePtr',
+ 'IsBadReadPtr', 'IsBadStringPtrA', 'IsBadStringPtrW', 'IsBadWritePtr',
+ 'ResetWriteWatch', 'AllocateUserPhysicalPages', 'FreeUserPhysicalPages',
+ 'MapUserPhysicalPages', 'MapUserPhysicalPagesScatter', 'GlobalAlloc', 'GlobalFlags',
+ 'GlobalFree', 'GlobalHandle', 'GlobalLock', 'GlobalReAlloc', 'GlobalSize',
+ 'GlobalUnlock', 'LocalAlloc', 'LocalFlags', 'LocalFree', 'LocalHandle', 'LocalLock',
+ 'LocalReAlloc', 'LocalSize', 'LocalUnlock', 'GetProcessHeap', 'GetProcessHeaps',
+ 'HeapAlloc', 'HeapCompact', 'HeapCreate', 'HeapDestroy', 'HeapFree', 'HeapLock',
+ 'HeapReAlloc', 'HeapSize', 'HeapUnlock', 'HeapValidate', 'HeapWalk', 'VirtualAlloc',
+ 'VirtualAllocEx', 'VirtualFree', 'VirtualFreeEx', 'VirtualLock', 'VirtualProtect',
+ 'VirtualProtectEx', 'VirtualQuery', 'VirtualQueryEx', 'VirtualUnlock',
+ 'GetFreeSpace', 'GlobalCompact', 'GlobalFix', 'GlobalUnfix', 'GlobalUnWire',
+ 'GlobalWire', 'IsBadHugeReadPtr', 'IsBadHugeWritePtr', 'LocalCompact', 'LocalShrink',
+
+ 'GetClassInfoA', 'GetClassInfoW', 'GetClassInfoExA', 'GetClassInfoExW',
+ 'GetClassLongA', 'GetClassLongW', 'GetClassLongPtrA', 'GetClassLongPtrW',
+ 'RegisterClassA', 'RegisterClassW', 'RegisterClassExA', 'RegisterClassExW',
+ 'SetClassLongA', 'SetClassLongW', 'SetClassLongPtrA', 'SetClassLongPtrW',
+ 'SetWindowLongA', 'SetWindowLongW', 'SetWindowLongPtrA', 'SetWindowLongPtrW',
+ 'UnregisterClassA', 'UnregisterClassW', 'GetClassWord', 'GetWindowWord',
+ 'SetClassWord', 'SetWindowWord'
+ ),
+ // Native API
+ 6 => array(
+ 'CsrAllocateCaptureBuffer', 'CsrAllocateCapturePointer', 'CsrAllocateMessagePointer',
+ 'CsrCaptureMessageBuffer', 'CsrCaptureMessageString', 'CsrCaptureTimeout',
+ 'CsrClientCallServer', 'CsrClientConnectToServer', 'CsrFreeCaptureBuffer',
+ 'CsrIdentifyAlertableThread', 'CsrNewThread', 'CsrProbeForRead', 'CsrProbeForWrite',
+ 'CsrSetPriorityClass',
+
+ 'LdrAccessResource', 'LdrDisableThreadCalloutsForDll', 'LdrEnumResources',
+ 'LdrFindEntryForAddress', 'LdrFindResource_U', 'LdrFindResourceDirectory_U',
+ 'LdrGetDllHandle', 'LdrGetProcedureAddress', 'LdrInitializeThunk', 'LdrLoadDll',
+ 'LdrProcessRelocationBlock', 'LdrQueryImageFileExecutionOptions',
+ 'LdrQueryProcessModuleInformation', 'LdrShutdownProcess', 'LdrShutdownThread',
+ 'LdrUnloadDll', 'LdrVerifyImageMatchesChecksum',
+
+ 'NtAcceptConnectPort', 'ZwAcceptConnectPort', 'NtCompleteConnectPort',
+ 'ZwCompleteConnectPort', 'NtConnectPort', 'ZwConnectPort', 'NtCreatePort',
+ 'ZwCreatePort', 'NtImpersonateClientOfPort', 'ZwImpersonateClientOfPort',
+ 'NtListenPort', 'ZwListenPort', 'NtQueryInformationPort', 'ZwQueryInformationPort',
+ 'NtReadRequestData', 'ZwReadRequestData', 'NtReplyPort', 'ZwReplyPort',
+ 'NtReplyWaitReceivePort', 'ZwReplyWaitReceivePort', 'NtReplyWaitReplyPort',
+ 'ZwReplyWaitReplyPort', 'NtRequestPort', 'ZwRequestPort', 'NtRequestWaitReplyPort',
+ 'ZwRequestWaitReplyPort', 'NtSecureConnectPort', 'ZwSecureConnectPort',
+ 'NtWriteRequestData', 'ZwWriteRequestData',
+
+ 'NtAccessCheck', 'ZwAccessCheck', 'NtAccessCheckAndAuditAlarm',
+ 'ZwAccessCheckAndAuditAlarm', 'NtAccessCheckByType', 'ZwAccessCheckByType',
+ 'NtAccessCheckByTypeAndAuditAlarm', 'ZwAccessCheckByTypeAndAuditAlarm',
+ 'NtAccessCheckByTypeResultList', 'ZwAccessCheckByTypeResultList',
+ 'NtAdjustGroupsToken', 'ZwAdjustGroupsToken', 'NtAdjustPrivilegesToken',
+ 'ZwAdjustPrivilegesToken', 'NtCloseObjectAuditAlarm', 'ZwCloseObjectAuditAlarm',
+ 'NtCreateToken', 'ZwCreateToken', 'NtDeleteObjectAuditAlarm',
+ 'ZwDeleteObjectAuditAlarm', 'NtDuplicateToken', 'ZwDuplicateToken',
+ 'NtFilterToken', 'ZwFilterToken', 'NtImpersonateThread', 'ZwImpersonateThread',
+ 'NtOpenObjectAuditAlarm', 'ZwOpenObjectAuditAlarm', 'NtOpenProcessToken',
+ 'ZwOpenProcessToken', 'NtOpenThreadToken', 'ZwOpenThreadToken', 'NtPrivilegeCheck',
+ 'ZwPrivilegeCheck', 'NtPrivilegedServiceAuditAlarm', 'ZwPrivilegedServiceAuditAlarm',
+ 'NtPrivilegeObjectAuditAlarm', 'ZwPrivilegeObjectAuditAlarm',
+ 'NtQueryInformationToken', 'ZwQueryInformationToken', 'NtQuerySecurityObject',
+ 'ZwQuerySecurityObject', 'NtSetInformationToken', 'ZwSetInformationToken',
+ 'NtSetSecurityObject', 'ZwSetSecurityObject',
+
+ 'NtAddAtom', 'ZwAddAtom', 'NtDeleteAtom', 'ZwDeleteAtom', 'NtFindAtom', 'ZwFindAtom',
+ 'NtQueryInformationAtom', 'ZwQueryInformationAtom',
+
+ 'NtAlertResumeThread', 'ZwAlertResumeThread', 'NtAlertThread', 'ZwAlertThread',
+ 'NtCreateProcess', 'ZwCreateProcess', 'NtCreateThread', 'ZwCreateThread',
+ 'NtCurrentTeb', 'NtDelayExecution', 'ZwDelayExecution', 'NtGetContextThread',
+ 'ZwGetContextThread', 'NtOpenProcess', 'ZwOpenProcess', 'NtOpenThread',
+ 'ZwOpenThread', 'NtQueryInformationProcess', 'ZwQueryInformationProcess',
+ 'NtQueryInformationThread', 'ZwQueryInformationThread', 'NtQueueApcThread',
+ 'ZwQueueApcThread', 'NtResumeThread', 'ZwResumeThread', 'NtSetContextThread',
+ 'ZwSetContextThread', 'NtSetHighWaitLowThread', 'ZwSetHighWaitLowThread',
+ 'NtSetInformationProcess', 'ZwSetInformationProcess', 'NtSetInformationThread',
+ 'ZwSetInformationThread', 'NtSetLowWaitHighThread', 'ZwSetLowWaitHighThread',
+ 'NtSuspendThread', 'ZwSuspendThread', 'NtTerminateProcess', 'ZwTerminateProcess',
+ 'NtTerminateThread', 'ZwTerminateThread', 'NtTestAlert', 'ZwTestAlert',
+ 'NtYieldExecution', 'ZwYieldExecution',
+
+ 'NtAllocateVirtualMemory', 'ZwAllocateVirtualMemory', 'NtAllocateVirtualMemory64',
+ 'ZwAllocateVirtualMemory64', 'NtAreMappedFilesTheSame', 'ZwAreMappedFilesTheSame',
+ 'NtCreateSection', 'ZwCreateSection', 'NtExtendSection', 'ZwExtendSection',
+ 'NtFlushVirtualMemory', 'ZwFlushVirtualMemory', 'NtFreeVirtualMemory',
+ 'ZwFreeVirtualMemory', 'NtFreeVirtualMemory64', 'ZwFreeVirtualMemory64',
+ 'NtLockVirtualMemory', 'ZwLockVirtualMemory', 'NtMapViewOfSection',
+ 'ZwMapViewOfSection', 'NtMapViewOfVlmSection', 'ZwMapViewOfVlmSection',
+ 'NtOpenSection', 'ZwOpenSection', 'NtProtectVirtualMemory', 'ZwProtectVirtualMemory',
+ 'NtProtectVirtualMemory64', 'ZwProtectVirtualMemory64', 'NtQueryVirtualMemory',
+ 'ZwQueryVirtualMemory', 'NtQueryVirtualMemory64', 'ZwQueryVirtualMemory64',
+ 'NtReadVirtualMemory', 'ZwReadVirtualMemory', 'NtReadVirtualMemory64',
+ 'ZwReadVirtualMemory64', 'NtUnlockVirtualMemory', 'ZwUnlockVirtualMemory',
+ 'NtUnmapViewOfSection', 'ZwUnmapViewOfSection', 'NtUnmapViewOfVlmSection',
+ 'ZwUnmapViewOfVlmSection', 'NtWriteVirtualMemory', 'ZwWriteVirtualMemory',
+ 'NtWriteVirtualMemory64', 'ZwWriteVirtualMemory64',
+
+ 'NtAssignProcessToJobObject', 'ZwAssignProcessToJobObject', 'NtCreateJobObject',
+ 'ZwCreateJobObject', 'NtOpenJobObject', 'ZwOpenJobObject',
+ 'NtQueryInformationJobObject', 'ZwQueryInformationJobObject',
+ 'NtSetInformationJobObject', 'ZwSetInformationJobObject', 'NtTerminateJobObject',
+ 'ZwTerminateJobObject',
+
+ 'NtCancelIoFile', 'ZwCancelIoFile', 'NtCreateFile', 'ZwCreateFile',
+ 'NtCreateIoCompletion', 'ZwCreateIoCompletion', 'NtDeleteFile', 'ZwDeleteFile',
+ 'NtDeviceIoControlFile', 'ZwDeviceIoControlFile', 'NtFlushBuffersFile',
+ 'ZwFlushBuffersFile', 'NtFsControlFile', 'ZwFsControlFile', 'NtLockFile', 'ZwLockFile',
+ 'NtNotifyChangeDirectoryFile', 'ZwNotifyChangeDirectoryFile', 'NtOpenFile',
+ 'ZwOpenFile', 'NtOpenIoCompletion', 'ZwOpenIoCompletion', 'NtQueryAttributesFile',
+ 'ZwQueryAttributesFile', 'NtQueryDirectoryFile', 'ZwQueryDirectoryFile',
+ 'NtQueryEaFile', 'ZwQueryEaFile', 'NtQueryIoCompletion', 'ZwQueryIoCompletion',
+ 'NtQueryQuotaInformationFile', 'ZwQueryQuotaInformationFile',
+ 'NtQueryVolumeInformationFile', 'ZwQueryVolumeInformationFile', 'NtReadFile',
+ 'ZwReadFile', 'NtReadFile64', 'ZwReadFile64', 'NtReadFileScatter', 'ZwReadFileScatter',
+ 'NtRemoveIoCompletion', 'ZwRemoveIoCompletion', 'NtSetEaFile', 'ZwSetEaFile',
+ 'NtSetInformationFile', 'ZwSetInformationFile', 'NtSetIoCompletion',
+ 'ZwSetIoCompletion', 'NtSetQuotaInformationFile', 'ZwSetQuotaInformationFile',
+ 'NtSetVolumeInformationFile', 'ZwSetVolumeInformationFile', 'NtUnlockFile',
+ 'ZwUnlockFile', 'NtWriteFile', 'ZwWriteFile', 'NtWriteFile64','ZwWriteFile64',
+ 'NtWriteFileGather', 'ZwWriteFileGather', 'NtQueryFullAttributesFile',
+ 'ZwQueryFullAttributesFile', 'NtQueryInformationFile', 'ZwQueryInformationFile',
+
+ 'RtlAbortRXact', 'RtlAbsoluteToSelfRelativeSD', 'RtlAcquirePebLock',
+ 'RtlAcquireResourceExclusive', 'RtlAcquireResourceShared', 'RtlAddAccessAllowedAce',
+ 'RtlAddAccessDeniedAce', 'RtlAddAce', 'RtlAddActionToRXact', 'RtlAddAtomToAtomTable',
+ 'RtlAddAttributeActionToRXact', 'RtlAddAuditAccessAce', 'RtlAddCompoundAce',
+ 'RtlAdjustPrivilege', 'RtlAllocateAndInitializeSid', 'RtlAllocateHandle',
+ 'RtlAllocateHeap', 'RtlAnsiCharToUnicodeChar', 'RtlAnsiStringToUnicodeSize',
+ 'RtlAnsiStringToUnicodeString', 'RtlAppendAsciizToString', 'RtlAppendStringToString',
+ 'RtlAppendUnicodeStringToString', 'RtlAppendUnicodeToString', 'RtlApplyRXact',
+ 'RtlApplyRXactNoFlush', 'RtlAreAllAccessesGranted', 'RtlAreAnyAccessesGranted',
+ 'RtlAreBitsClear', 'RtlAreBitsSet', 'RtlAssert', 'RtlCaptureStackBackTrace',
+ 'RtlCharToInteger', 'RtlCheckRegistryKey', 'RtlClearAllBits', 'RtlClearBits',
+ 'RtlClosePropertySet', 'RtlCompactHeap', 'RtlCompareMemory', 'RtlCompareMemoryUlong',
+ 'RtlCompareString', 'RtlCompareUnicodeString', 'RtlCompareVariants',
+ 'RtlCompressBuffer', 'RtlConsoleMultiByteToUnicodeN', 'RtlConvertExclusiveToShared',
+ 'RtlConvertLongToLargeInteger', 'RtlConvertPropertyToVariant',
+ 'RtlConvertSharedToExclusive', 'RtlConvertSidToUnicodeString',
+ 'RtlConvertUiListToApiList', 'RtlConvertUlongToLargeInteger',
+ 'RtlConvertVariantToProperty', 'RtlCopyLuid', 'RtlCopyLuidAndAttributesArray',
+ 'RtlCopySecurityDescriptor', 'RtlCopySid', 'RtlCopySidAndAttributesArray',
+ 'RtlCopyString', 'RtlCopyUnicodeString', 'RtlCreateAcl', 'RtlCreateAndSetSD',
+ 'RtlCreateAtomTable', 'RtlCreateEnvironment', 'RtlCreateHeap',
+ 'RtlCreateProcessParameters', 'RtlCreatePropertySet', 'RtlCreateQueryDebugBuffer',
+ 'RtlCreateRegistryKey', 'RtlCreateSecurityDescriptor', 'RtlCreateTagHeap',
+ 'RtlCreateUnicodeString', 'RtlCreateUnicodeStringFromAsciiz', 'RtlCreateUserProcess',
+ 'RtlCreateUserSecurityObject', 'RtlCreateUserThread', 'RtlCustomCPToUnicodeN',
+ 'RtlCutoverTimeToSystemTime', 'RtlDecompressBuffer', 'RtlDecompressFragment',
+ 'RtlDelete', 'RtlDeleteAce', 'RtlDeleteAtomFromAtomTable', 'RtlDeleteCriticalSection',
+ 'RtlDeleteElementGenericTable', 'RtlDeleteNoSplay', 'RtlDeleteRegistryValue',
+ 'RtlDeleteResource', 'RtlDeleteSecurityObject', 'RtlDeNormalizeProcessParams',
+ 'RtlDestroyAtomTable', 'RtlDestroyEnvironment', 'RtlDestroyHandleTable',
+ 'RtlDestroyHeap', 'RtlDestroyProcessParameters', 'RtlDestroyQueryDebugBuffer',
+ 'RtlDetermineDosPathNameType_U', 'RtlDoesFileExists_U', 'RtlDosPathNameToNtPathName_U',
+ 'RtlDosSearchPath_U', 'RtlDowncaseUnicodeString', 'RtlDumpResource',
+ 'RtlEmptyAtomTable', 'RtlEnlargedIntegerMultiply', 'RtlEnlargedUnsignedDivide',
+ 'RtlEnlargedUnsignedMultiply', 'RtlEnterCriticalSection', 'RtlEnumerateGenericTable',
+ 'RtlEnumerateGenericTableWithoutSplaying', 'RtlEnumerateProperties',
+ 'RtlEnumProcessHeaps', 'RtlEqualComputerName', 'RtlEqualDomainName', 'RtlEqualLuid',
+ 'RtlEqualPrefixSid', 'RtlEqualSid', 'RtlEqualString', 'RtlEqualUnicodeString',
+ 'RtlEraseUnicodeString', 'RtlExpandEnvironmentStrings_U', 'RtlExtendedIntegerMultiply',
+ 'RtlExtendedLargeIntegerDivide', 'RtlExtendedMagicDivide', 'RtlExtendHeap',
+ 'RtlFillMemory', 'RtlFillMemoryUlong', 'RtlFindClearBits', 'RtlFindClearBitsAndSet',
+ 'RtlFindLongestRunClear', 'RtlFindLongestRunSet', 'RtlFindMessage', 'RtlFindSetBits',
+ 'RtlFindSetBitsAndClear', 'RtlFirstFreeAce', 'RtlFlushPropertySet',
+ 'RtlFormatCurrentUserKeyPath', 'RtlFormatMessage', 'RtlFreeAnsiString',
+ 'RtlFreeHandle', 'RtlFreeHeap', 'RtlFreeOemString', 'RtlFreeSid',
+ 'RtlFreeUnicodeString', 'RtlFreeUserThreadStack', 'RtlGenerate8dot3Name', 'RtlGetAce',
+ 'RtlGetCallersAddress', 'RtlGetCompressionWorkSpaceSize',
+ 'RtlGetControlSecurityDescriptor', 'RtlGetCurrentDirectory_U',
+ 'RtlGetDaclSecurityDescriptor', 'RtlGetElementGenericTable', 'RtlGetFullPathName_U',
+ 'RtlGetGroupSecurityDescriptor', 'RtlGetLongestNtPathLength', 'RtlGetNtGlobalFlags',
+ 'RtlGetNtProductType', 'RtlGetOwnerSecurityDescriptor', 'RtlGetProcessHeaps',
+ 'RtlGetSaclSecurityDescriptor', 'RtlGetUserInfoHeap', 'RtlGuidToPropertySetName',
+ 'RtlIdentifierAuthoritySid', 'RtlImageDirectoryEntryToData', 'RtlImageNtHeader',
+ 'RtlImageRvaToSection', 'RtlImageRvaToVa', 'RtlImpersonateSelf', 'RtlInitAnsiString',
+ 'RtlInitCodePageTable', 'RtlInitializeAtomPackage', 'RtlInitializeBitMap',
+ 'RtlInitializeContext', 'RtlInitializeCriticalSection',
+ 'RtlInitializeCriticalSectionAndSpinCount', 'RtlInitializeGenericTable',
+ 'RtlInitializeHandleTable', 'RtlInitializeResource', 'RtlInitializeRXact',
+ 'RtlInitializeSid', 'RtlInitNlsTables', 'RtlInitString', 'RtlInitUnicodeString',
+ 'RtlInsertElementGenericTable', 'RtlIntegerToChar', 'RtlIntegerToUnicodeString',
+ 'RtlIsDosDeviceName_U', 'RtlIsGenericTableEmpty', 'RtlIsNameLegalDOS8Dot3',
+ 'RtlIsTextUnicode', 'RtlIsValidHandle', 'RtlIsValidIndexHandle', 'RtlLargeIntegerAdd',
+ 'RtlLargeIntegerArithmeticShift', 'RtlLargeIntegerDivide', 'RtlLargeIntegerNegate',
+ 'RtlLargeIntegerShiftLeft', 'RtlLargeIntegerShiftRight', 'RtlLargeIntegerSubtract',
+ 'RtlLargeIntegerToChar', 'RtlLeaveCriticalSection', 'RtlLengthRequiredSid',
+ 'RtlLengthSecurityDescriptor', 'RtlLengthSid', 'RtlLocalTimeToSystemTime',
+ 'RtlLockHeap', 'RtlLookupAtomInAtomTable', 'RtlLookupElementGenericTable',
+ 'RtlMakeSelfRelativeSD', 'RtlMapGenericMask', 'RtlMoveMemory',
+ 'RtlMultiByteToUnicodeN', 'RtlMultiByteToUnicodeSize', 'RtlNewInstanceSecurityObject',
+ 'RtlNewSecurityGrantedAccess', 'RtlNewSecurityObject', 'RtlNormalizeProcessParams',
+ 'RtlNtStatusToDosError', 'RtlNumberGenericTableElements', 'RtlNumberOfClearBits',
+ 'RtlNumberOfSetBits', 'RtlOemStringToUnicodeSize', 'RtlOemStringToUnicodeString',
+ 'RtlOemToUnicodeN', 'RtlOnMappedStreamEvent', 'RtlOpenCurrentUser',
+ 'RtlPcToFileHeader', 'RtlPinAtomInAtomTable', 'RtlpNtCreateKey',
+ 'RtlpNtEnumerateSubKey', 'RtlpNtMakeTemporaryKey', 'RtlpNtOpenKey',
+ 'RtlpNtQueryValueKey', 'RtlpNtSetValueKey', 'RtlPrefixString',
+ 'RtlPrefixUnicodeString', 'RtlPropertySetNameToGuid', 'RtlProtectHeap',
+ 'RtlpUnWaitCriticalSection', 'RtlpWaitForCriticalSection', 'RtlQueryAtomInAtomTable',
+ 'RtlQueryEnvironmentVariable_U', 'RtlQueryInformationAcl',
+ 'RtlQueryProcessBackTraceInformation', 'RtlQueryProcessDebugInformation',
+ 'RtlQueryProcessHeapInformation', 'RtlQueryProcessLockInformation',
+ 'RtlQueryProperties', 'RtlQueryPropertyNames', 'RtlQueryPropertySet',
+ 'RtlQueryRegistryValues', 'RtlQuerySecurityObject', 'RtlQueryTagHeap',
+ 'RtlQueryTimeZoneInformation', 'RtlRaiseException', 'RtlRaiseStatus', 'RtlRandom',
+ 'RtlReAllocateHeap', 'RtlRealPredecessor', 'RtlRealSuccessor', 'RtlReleasePebLock',
+ 'RtlReleaseResource', 'RtlRemoteCall', 'RtlResetRtlTranslations',
+ 'RtlRunDecodeUnicodeString', 'RtlRunEncodeUnicodeString', 'RtlSecondsSince1970ToTime',
+ 'RtlSecondsSince1980ToTime', 'RtlSelfRelativeToAbsoluteSD', 'RtlSetAllBits',
+ 'RtlSetAttributesSecurityDescriptor', 'RtlSetBits', 'RtlSetCriticalSectionSpinCount',
+ 'RtlSetCurrentDirectory_U', 'RtlSetCurrentEnvironment', 'RtlSetDaclSecurityDescriptor',
+ 'RtlSetEnvironmentVariable', 'RtlSetGroupSecurityDescriptor', 'RtlSetInformationAcl',
+ 'RtlSetOwnerSecurityDescriptor', 'RtlSetProperties', 'RtlSetPropertyNames',
+ 'RtlSetPropertySetClassId', 'RtlSetSaclSecurityDescriptor', 'RtlSetSecurityObject',
+ 'RtlSetTimeZoneInformation', 'RtlSetUnicodeCallouts', 'RtlSetUserFlagsHeap',
+ 'RtlSetUserValueHeap', 'RtlSizeHeap', 'RtlSplay', 'RtlStartRXact',
+ 'RtlSubAuthorityCountSid', 'RtlSubAuthoritySid', 'RtlSubtreePredecessor',
+ 'RtlSubtreeSuccessor', 'RtlSystemTimeToLocalTime', 'RtlTimeFieldsToTime',
+ 'RtlTimeToElapsedTimeFields', 'RtlTimeToSecondsSince1970', 'RtlTimeToSecondsSince1980',
+ 'RtlTimeToTimeFields', 'RtlTryEnterCriticalSection', 'RtlUnicodeStringToAnsiSize',
+ 'RtlUnicodeStringToAnsiString', 'RtlUnicodeStringToCountedOemString',
+ 'RtlUnicodeStringToInteger', 'RtlUnicodeStringToOemSize',
+ 'RtlUnicodeStringToOemString', 'RtlUnicodeToCustomCPN', 'RtlUnicodeToMultiByteN',
+ 'RtlUnicodeToMultiByteSize', 'RtlUnicodeToOemN', 'RtlUniform', 'RtlUnlockHeap',
+ 'RtlUnwind', 'RtlUpcaseUnicodeChar', 'RtlUpcaseUnicodeString',
+ 'RtlUpcaseUnicodeStringToAnsiString', 'RtlUpcaseUnicodeStringToCountedOemString',
+ 'RtlUpcaseUnicodeStringToOemString', 'RtlUpcaseUnicodeToCustomCPN',
+ 'RtlUpcaseUnicodeToMultiByteN', 'RtlUpcaseUnicodeToOemN', 'RtlUpperChar',
+ 'RtlUpperString', 'RtlUsageHeap', 'RtlValidAcl', 'RtlValidateHeap',
+ 'RtlValidateProcessHeaps', 'RtlValidSecurityDescriptor', 'RtlValidSid', 'RtlWalkHeap',
+ 'RtlWriteRegistryValue', 'RtlxAnsiStringToUnicodeSize', 'RtlxOemStringToUnicodeSize',
+ 'RtlxUnicodeStringToAnsiSize', 'RtlxUnicodeStringToOemSize', 'RtlZeroHeap',
+ 'RtlZeroMemory',
+
+ 'NtCancelTimer', 'ZwCancelTimer', 'NtCreateTimer', 'ZwCreateTimer', 'NtGetTickCount',
+ 'ZwGetTickCount', 'NtOpenTimer', 'ZwOpenTimer', 'NtQueryPerformanceCounter',
+ 'ZwQueryPerformanceCounter', 'NtQuerySystemTime', 'ZwQuerySystemTime', 'NtQueryTimer',
+ 'ZwQueryTimer', 'NtQueryTimerResolution', 'ZwQueryTimerResolution', 'NtSetSystemTime',
+ 'ZwSetSystemTime', 'NtSetTimer', 'ZwSetTimer', 'NtSetTimerResolution',
+ 'ZwSetTimerResolution',
+
+ 'NtClearEvent', 'ZwClearEvent', 'NtCreateEvent', 'ZwCreateEvent', 'NtCreateEventPair',
+ 'ZwCreateEventPair', 'NtCreateMutant', 'ZwCreateMutant', 'NtCreateSemaphore',
+ 'ZwCreateSemaphore', 'NtOpenEvent', 'ZwOpenEvent', 'NtOpenEventPair',
+ 'ZwOpenEventPair', 'NtOpenMutant', 'ZwOpenMutant', 'NtOpenSemaphore',
+ 'ZwOpenSemaphore', 'NtPulseEvent', 'ZwPulseEvent', 'NtQueryEvent', 'ZwQueryEvent',
+ 'NtQueryMutant', 'ZwQueryMutant', 'NtQuerySemaphore', 'ZwQuerySemaphore',
+ 'NtReleaseMutant', 'ZwReleaseMutant', 'NtReleaseProcessMutant',
+ 'ZwReleaseProcessMutant', 'NtReleaseSemaphore', 'ZwReleaseSemaphore',
+ 'NtReleaseThreadMutant', 'ZwReleaseThreadMutant', 'NtResetEvent', 'ZwResetEvent',
+ 'NtSetEvent', 'ZwSetEvent', 'NtSetHighEventPair', 'ZwSetHighEventPair',
+ 'NtSetHighWaitLowEventPair', 'ZwSetHighWaitLowEventPair', 'NtSetLowEventPair',
+ 'ZwSetLowEventPair', 'NtSetLowWaitHighEventPair', 'ZwSetLowWaitHighEventPair',
+ 'NtSignalAndWaitForSingleObject', 'ZwSignalAndWaitForSingleObject',
+ 'NtWaitForMultipleObjects', 'ZwWaitForMultipleObjects', 'NtWaitForSingleObject',
+ 'ZwWaitForSingleObject', 'NtWaitHighEventPair', 'ZwWaitHighEventPair',
+ 'NtWaitLowEventPair', 'ZwWaitLowEventPair',
+
+ 'NtClose', 'ZwClose', 'NtCreateDirectoryObject', 'ZwCreateDirectoryObject',
+ 'NtCreateSymbolicLinkObject', 'ZwCreateSymbolicLinkObject',
+ 'NtDuplicateObject', 'ZwDuplicateObject', 'NtMakeTemporaryObject',
+ 'ZwMakeTemporaryObject', 'NtOpenDirectoryObject', 'ZwOpenDirectoryObject',
+ 'NtOpenSymbolicLinkObject', 'ZwOpenSymbolicLinkObject', 'NtQueryDirectoryObject',
+ 'ZwQueryDirectoryObject', 'NtQueryObject', 'ZwQueryObject',
+ 'NtQuerySymbolicLinkObject', 'ZwQuerySymbolicLinkObject', 'NtSetInformationObject',
+ 'ZwSetInformationObject',
+
+ 'NtContinue', 'ZwContinue', 'NtRaiseException', 'ZwRaiseException',
+ 'NtRaiseHardError', 'ZwRaiseHardError', 'NtSetDefaultHardErrorPort',
+ 'ZwSetDefaultHardErrorPort',
+
+ 'NtCreateChannel', 'ZwCreateChannel', 'NtListenChannel', 'ZwListenChannel',
+ 'NtOpenChannel', 'ZwOpenChannel', 'NtReplyWaitSendChannel', 'ZwReplyWaitSendChannel',
+ 'NtSendWaitReplyChannel', 'ZwSendWaitReplyChannel', 'NtSetContextChannel',
+ 'ZwSetContextChannel',
+
+ 'NtCreateKey', 'ZwCreateKey', 'NtDeleteKey', 'ZwDeleteKey', 'NtDeleteValueKey',
+ 'ZwDeleteValueKey', 'NtEnumerateKey', 'ZwEnumerateKey', 'NtEnumerateValueKey',
+ 'ZwEnumerateValueKey', 'NtFlushKey', 'ZwFlushKey', 'NtInitializeRegistry',
+ 'ZwInitializeRegistry', 'NtLoadKey', 'ZwLoadKey', 'NtLoadKey2', 'ZwLoadKey2',
+ 'NtNotifyChangeKey', 'ZwNotifyChangeKey', 'NtOpenKey', 'ZwOpenKey', 'NtQueryKey',
+ 'ZwQueryKey', 'NtQueryMultipleValueKey', 'ZwQueryMultipleValueKey',
+ 'NtQueryMultiplValueKey', 'ZwQueryMultiplValueKey', 'NtQueryValueKey',
+ 'ZwQueryValueKey', 'NtReplaceKey', 'ZwReplaceKey', 'NtRestoreKey', 'ZwRestoreKey',
+ 'NtSaveKey', 'ZwSaveKey', 'NtSetInformationKey', 'ZwSetInformationKey',
+ 'NtSetValueKey', 'ZwSetValueKey', 'NtUnloadKey', 'ZwUnloadKey',
+
+ 'NtCreateMailslotFile', 'ZwCreateMailslotFile', 'NtCreateNamedPipeFile',
+ 'ZwCreateNamedPipeFile', 'NtCreatePagingFile', 'ZwCreatePagingFile',
+
+ 'NtCreateProfile', 'ZwCreateProfile', 'NtQueryIntervalProfile',
+ 'ZwQueryIntervalProfile', 'NtRegisterThreadTerminatePort',
+ 'ZwRegisterThreadTerminatePort', 'NtSetIntervalProfile', 'ZwSetIntervalProfile',
+ 'NtStartProfile', 'ZwStartProfile', 'NtStopProfile', 'ZwStopProfile',
+ 'NtSystemDebugControl', 'ZwSystemDebugControl',
+
+ 'NtEnumerateBus', 'ZwEnumerateBus', 'NtFlushInstructionCache',
+ 'ZwFlushInstructionCache', 'NtFlushWriteBuffer', 'ZwFlushWriteBuffer',
+ 'NtSetLdtEntries', 'ZwSetLdtEntries',
+
+ 'NtGetPlugPlayEvent', 'ZwGetPlugPlayEvent', 'NtPlugPlayControl', 'ZwPlugPlayControl',
+
+ 'NtInitiatePowerAction', 'ZwInitiatePowerAction', 'NtPowerInformation',
+ 'ZwPowerInformation', 'NtRequestWakeupLatency', 'ZwRequestWakeupLatency',
+ 'NtSetSystemPowerState', 'ZwSetSystemPowerState', 'NtSetThreadExecutionState',
+ 'ZwSetThreadExecutionState',
+
+ 'NtLoadDriver', 'ZwLoadDriver', 'NtRegisterNewDevice', 'ZwRegisterNewDevice',
+ 'NtUnloadDriver', 'ZwUnloadDriver',
+
+ 'NtQueryDefaultLocale', 'ZwQueryDefaultLocale', 'NtQueryDefaultUILanguage',
+ 'ZwQueryDefaultUILanguage', 'NtQuerySystemEnvironmentValue',
+ 'ZwQuerySystemEnvironmentValue', 'NtSetDefaultLocale', 'ZwSetDefaultLocale',
+ 'NtSetDefaultUILanguage', 'ZwSetDefaultUILanguage', 'NtSetSystemEnvironmentValue',
+ 'ZwSetSystemEnvironmentValue',
+
+ 'DbgBreakPoint', 'DbgPrint', 'DbgPrompt', 'DbgSsHandleKmApiMsg', 'DbgSsInitialize',
+ 'DbgUiConnectToDbg', 'DbgUiContinue', 'DbgUiWaitStateChange', 'DbgUserBreakPoint',
+ 'KiRaiseUserExceptionDispatcher', 'KiUserApcDispatcher', 'KiUserCallbackDispatcher',
+ 'KiUserExceptionDispatcher', 'NlsAnsiCodePage', 'NlsMbCodePageTag',
+ 'NlsMbOemCodePageTag', 'NtAllocateLocallyUniqueId', 'ZwAllocateLocallyUniqueId',
+ 'NtAllocateUuids', 'ZwAllocateUuids', 'NtCallbackReturn', 'ZwCallbackReturn',
+ 'NtDisplayString', 'ZwDisplayString', 'NtQueryOleDirectoryFile',
+ 'ZwQueryOleDirectoryFile', 'NtQuerySection', 'ZwQuerySection',
+ 'NtQuerySystemInformation', 'ZwQuerySystemInformation', 'NtSetSystemInformation',
+ 'ZwSetSystemInformation', 'NtShutdownSystem', 'ZwShutdownSystem', 'NtVdmControl',
+ 'ZwVdmControl', 'NtW32Call', 'ZwW32Call', 'PfxFindPrefix', 'PfxInitialize',
+ 'PfxInsertPrefix', 'PfxRemovePrefix', 'PropertyLengthAsVariant', 'RestoreEm87Context',
+ 'SaveEm87Context'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('(', ')', '{', '}', '[', ']'),
+ 1 => array('<', '>','='),
+ 2 => array('+', '-', '*', '/', '%'),
+ 3 => array('!', '^', '&', '|'),
+ 4 => array('?', ':', ';')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #0000dd;',
+ 4 => 'color: #0000ff;',
+ 5 => 'color: #4000dd;',
+ 6 => 'color: #4000dd;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666;',
+ 2 => 'color: #339900;',
+ 3 => 'color: #FF0000;',
+ 4 => 'color: #FF0000;',
+ 'MULTI' => 'color: #ff0000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #007788;',
+ 2 => 'color: #007788;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;',
+ 1 => 'color: #000080;',
+ 2 => 'color: #000040;',
+ 3 => 'color: #000040;',
+ 4 => 'color: #008080;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com',
+ 6 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_\|%\\-])"
+ )
+ )
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp.php
index 42ab311c..05cadf06 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cpp.php
@@ -7,7 +7,7 @@
* - M. Uli Kusterer (witness.of.teachtext@gmx.net)
* - Jack Lloyd (lloyd@randombit.net)
* Copyright: (c) 2004 Dennis Bayer, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/09/27
*
* C++ language file for GeSHi.
@@ -56,14 +56,18 @@ $language_data = array (
//Multiline-continued single-line comments
1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
//Multiline-continued preprocessor define
- 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //C++ 11 string literal extensions
+ 3 => '/(?:L|u8?|U)(?=")/',
+ //C++ 11 string literal extensions (raw)
+ 4 => '/R"([^()\s\\\\]*)\((?:(?!\)\\1").)*\)\\1"/ms'
),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
'QUOTEMARKS' => array("'", '"'),
'ESCAPE_CHAR' => '',
'ESCAPE_REGEXP' => array(
//Simple Single Char Escapes
- 1 => "#\\\\[abfnrtv\\\'\"?\n]#i",
+ 1 => "#\\\\[abfnrtv\\\'\"?\n]#",
//Hexadecimal Char Specs
2 => "#\\\\x[\da-fA-F]{2}#",
//Hexadecimal Char Specs
@@ -167,6 +171,8 @@ $language_data = array (
'COMMENTS' => array(
1 => 'color: #666666;',
2 => 'color: #339900;',
+ 3 => 'color: #FF0000;',
+ 4 => 'color: #FF0000;',
'MULTI' => 'color: #ff0000; font-style: italic;'
),
'ESCAPE_CHAR' => array(
@@ -236,5 +242,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/csharp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/csharp.php
index 26024e91..14f0fa0d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/csharp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/csharp.php
@@ -5,7 +5,7 @@
* Author: Alan Juden (alan@judenware.org)
* Revised by: Michael Mol (mikemol@gmail.com)
* Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* C# language file for GeSHi.
@@ -252,5 +252,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/css.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/css.php
index d09bea7d..bfb6e0e1 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/css.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/css.php
@@ -2,15 +2,19 @@
/*************************************************************************************
* css.php
* -------
- * Author: Nigel McNie (nigel@geshi.org)
+ * Author: Nigel McNie (nigel@geshi.org), Zéfling (zefling@ikilote.net)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/18
*
* CSS language file for GeSHi.
*
* CHANGES
* -------
+ * 2014/07/14 (1.0.8.12)
+ * - update for current CSS3 (properties, value, expression, unites & color)
+ * - remove pseudo class regex
+ * - add rules regex
* 2008/05/23 (1.0.7.22)
* - Added description of extra language features (SF#1970248)
* 2004/11/27 (1.0.3)
@@ -25,7 +29,7 @@
*
* TODO (updated 2004/11/27)
* -------------------------
- * * Improve or drop regexps for class/id/psuedoclass highlighting
+ * * Improve or drop regexps for class/id highlighting
* * Re-look at keywords - possibly to make several CSS language
* files, all with different versions of CSS in them
*
@@ -51,7 +55,7 @@
$language_data = array (
'LANG_NAME' => 'CSS',
- 'COMMENT_SINGLE' => array(1 => '@'),
+ 'COMMENT_SINGLE' => array(),
'COMMENT_MULTI' => array('/*' => '*/'),
'COMMENT_REGEXP' => array(
2 => "/(?<=\\()\\s*(?:(?:[a-z0-9]+?:\\/\\/)?[a-z0-9_\\-\\.\\/:]+?)?[a-z]+?\\.[a-z]+?(\\?[^\)]+?)?\\s*?(?=\\))/i"
@@ -68,79 +72,186 @@ $language_data = array (
//3 => "#\\\\u[\da-fA-F]{1,8}#i",
),
'KEYWORDS' => array(
+ // properties
1 => array(
- 'aqua', 'azimuth', 'background-attachment', 'background-color',
- 'background-image', 'background-position', 'background-repeat',
- 'background', 'black', 'blue', 'border-bottom-color',
- 'border-radius', 'border-top-left-radius', 'border-top-right-radius',
- 'border-bottom-right-radius', 'border-bottom-left-radius',
- 'border-bottom-style', 'border-bottom-width', 'border-left-color',
- 'border-left-style', 'border-left-width', 'border-right',
- 'border-right-color', 'border-right-style', 'border-right-width',
- 'border-top-color', 'border-top-style',
- 'border-top-width','border-bottom', 'border-collapse',
- 'border-left', 'border-width', 'border-color', 'border-spacing',
- 'border-style', 'border-top', 'border', 'caption-side', 'clear',
- 'clip', 'color', 'content', 'counter-increment', 'counter-reset',
- 'cue-after', 'cue-before', 'cue', 'cursor', 'direction', 'display',
- 'elevation', 'empty-cells', 'float', 'font-family', 'font-size',
- 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant',
- 'font-weight', 'font', 'line-height', 'letter-spacing',
- 'list-style', 'list-style-image', 'list-style-position',
- 'list-style-type', 'margin-bottom', 'margin-left', 'margin-right',
- 'margin-top', 'margin', 'marker-offset', 'marks', 'max-height',
- 'max-width', 'min-height', 'min-width', 'orphans', 'outline',
- 'outline-color', 'outline-style', 'outline-width', 'overflow',
- 'padding-bottom', 'padding-left', 'padding-right', 'padding-top',
- 'padding', 'page', 'page-break-after', 'page-break-before',
- 'page-break-inside', 'pause-after', 'pause-before', 'pause',
- 'pitch', 'pitch-range', 'play-during', 'position', 'quotes',
- 'richness', 'right', 'size', 'speak-header', 'speak-numeral',
- 'speak-punctuation', 'speak', 'speech-rate', 'stress',
- 'table-layout', 'text-align', 'text-decoration', 'text-indent',
- 'text-shadow', 'text-transform', 'top', 'unicode-bidi',
- 'vertical-align', 'visibility', 'voice-family', 'volume',
- 'white-space', 'widows', 'width', 'word-spacing', 'z-index',
- 'bottom', 'left', 'height'
+ 'align-content','align-items','align-self','all','animation',
+ 'animation-delay','animation-direction','animation-duration',
+ 'animation-fill-mode','animation-iteration-count','animation-name',
+ 'animation-play-state','animation-timing-function',
+ 'backface-visibility','background','background-attachment',
+ 'background-blend-mode','background-clip','background-color',
+ 'background-image','background-origin','background-position',
+ 'background-repeat','background-size','border','border-bottom',
+ 'border-bottom-color','border-bottom-left-radius',
+ 'border-bottom-right-radius','border-bottom-style',
+ 'border-bottom-width','border-collapse','border-color',
+ 'border-image','border-image-outset','border-image-repeat',
+ 'border-image-slice','border-image-source','border-image-width',
+ 'border-left','border-left-color','border-left-style',
+ 'border-left-width','border-radius','border-right',
+ 'border-right-color','border-right-style','border-right-width',
+ 'border-spacing','border-style','border-top','border-top-color',
+ 'border-top-left-radius','border-top-right-radius',
+ 'border-top-style','border-top-width','border-width','bottom',
+ 'box-decoration-break','box-shadow','box-sizing','break-after',
+ 'break-before','break-inside','caption-side','clear','clip',
+ 'clip-path','color','columns','column-count','column-fill',
+ 'column-gap','column-rule','column-rule-color','column-rule-style',
+ 'column-rule-width','column-span','column-width','content',
+ 'counter-increment','counter-reset','cursor','direction','display',
+ 'empty-cells','filter','flex','flex-basis','flex-direction',
+ 'flex-flow','flex-grow','flex-shrink','flex-wrap','float','font',
+ 'font-family','font-feature-settings','font-kerning',
+ 'font-language-override','font-size','font-size-adjust',
+ 'font-stretch','font-style','font-synthesis','font-variant',
+ 'font-variant-alternates','font-variant-caps',
+ 'font-variant-east-asian','font-variant-ligatures',
+ 'font-variant-numeric','font-variant-position','font-weight','grid',
+ 'grid-area','grid-auto-columns','grid-auto-flow',
+ 'grid-auto-position','grid-auto-rows','grid-column',
+ 'grid-column-start','grid-column-end','grid-row','grid-row-start',
+ 'grid-row-end','grid-template','grid-template-areas',
+ 'grid-template-rows','grid-template-columns','height','hyphens',
+ 'icon','image-rendering','image-resolution','image-orientation',
+ 'ime-mode','justify-content','left','letter-spacing','line-break',
+ 'line-height','list-style','list-style-image','list-style-position',
+ 'list-style-type','margin','margin-bottom','margin-left',
+ 'margin-right','margin-top','marks','mask','mask-type','max-height',
+ 'max-width','min-height','min-width','mix-blend-mode','nav-down',
+ 'nav-index','nav-left','nav-right','nav-up','object-fit',
+ 'object-position','opacity','order','orphans','outline',
+ 'outline-color','outline-offset','outline-style','outline-width',
+ 'overflow','overflow-wrap','overflow-x','overflow-y',
+ 'overflow-clip-box','padding','padding-bottom','padding-left',
+ 'padding-right','padding-top','page-break-after','page-break-before',
+ 'page-break-inside','perspective','perspective-origin',
+ 'pointer-events','position','quotes','resize','right',
+ 'shape-image-threshold','shape-margin','shape-outside',
+ 'table-layout','tab-size','text-align','text-align-last',
+ 'text-combine-horizontal','text-decoration','text-decoration-color',
+ 'text-decoration-line','text-decoration-style','text-indent',
+ 'text-orientation','text-overflow','text-rendering','text-shadow',
+ 'text-transform','text-underline-position','top','touch-action',
+ 'transform','transform-origin','transform-style','transition',
+ 'transition-delay','transition-duration','transition-property',
+ 'transition-timing-function','unicode-bidi','unicode-range',
+ 'vertical-align','visibility','white-space','widows','width',
+ 'will-change','word-break','word-spacing','word-wrap',
+ 'writing-mode','z-index'
),
+ // value
2 => array(
- 'above', 'absolute', 'always', 'armenian', 'aural', 'auto',
- 'avoid', 'baseline', 'behind', 'below', 'bidi-override', 'blink',
- 'block', 'bold', 'bolder', 'both', 'capitalize', 'center-left',
- 'center-right', 'center', 'circle', 'cjk-ideographic',
- 'close-quote', 'collapse', 'condensed', 'continuous', 'crop',
- 'crosshair', 'cross', 'cursive', 'dashed', 'decimal-leading-zero',
- 'decimal', 'default', 'digits', 'disc', 'dotted', 'double',
- 'e-resize', 'embed', 'extra-condensed', 'extra-expanded',
- 'expanded', 'fantasy', 'far-left', 'far-right', 'faster', 'fast',
- 'fixed', 'fuchsia', 'georgian', 'gray', 'green', 'groove',
- 'hebrew', 'help', 'hidden', 'hide', 'higher', 'high',
- 'hiragana-iroha', 'hiragana', 'icon', 'inherit', 'inline-table',
- 'inline', 'inset', 'inside', 'invert', 'italic', 'justify',
- 'katakana-iroha', 'katakana', 'landscape', 'larger', 'large',
- 'left-side', 'leftwards', 'level', 'lighter', 'lime',
- 'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek',
- 'lower-roman', 'lowercase', 'ltr', 'lower', 'low', 'maroon',
- 'medium', 'message-box', 'middle', 'mix', 'monospace', 'n-resize',
- 'narrower', 'navy', 'ne-resize', 'no-close-quote',
- 'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap',
- 'nw-resize', 'oblique', 'olive', 'once', 'open-quote', 'outset',
- 'outside', 'overline', 'pointer', 'portrait', 'purple', 'px',
- 'red', 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb',
- 'ridge', 'right-side', 'rightwards', 's-resize', 'sans-serif',
- 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded',
- 'separate', 'serif', 'show', 'silent', 'silver', 'slow', 'slower',
- 'small-caps', 'small-caption', 'smaller', 'soft', 'solid',
- 'spell-out', 'square', 'static', 'status-bar', 'super',
- 'sw-resize', 'table-caption', 'table-cell', 'table-column',
- 'table-column-group', 'table-footer-group', 'table-header-group',
- 'table-row', 'table-row-group', 'teal', 'text', 'text-bottom',
- 'text-top', 'thick', 'thin', 'transparent', 'ultra-condensed',
- 'ultra-expanded', 'underline', 'upper-alpha', 'upper-latin',
- 'upper-roman', 'uppercase', 'url', 'visible', 'w-resize', 'wait',
- 'white', 'wider', 'x-fast', 'x-high', 'x-large', 'x-loud',
- 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small', 'yellow',
- 'yes'
+ 'absolute','activeborder','activecaption','after-white-space',
+ 'ahead','alternate','always','appworkspace','aqua','armenian','auto',
+ 'avoid','background','backwards','baseline','below','bidi-override',
+ 'blink','block','block clear','block width','block-axis','bold',
+ 'bolder','border','border-box','both','bottom','break-word','button',
+ 'button-bevel','buttonface','buttonhighlight','buttonshadow',
+ 'buttontext','capitalize','caption','captiontext','caret','center',
+ 'checkbox','circle','cjk-ideographic','clip','close-quote',
+ 'collapse','compact','condensed','content','content-box',
+ 'continuous','crop','cross','crosshair','cursive','dashed','decimal',
+ 'decimal-leading-zero','default','disc','discard','dot-dash',
+ 'dot-dot-dash','dotted','double','down','e-resize','element',
+ 'ellipsis','embed','end','expanded','extra-condensed',
+ 'extra-expanded','fantasy','fast','fixed','forwards','georgian',
+ 'graytext','groove','hand','hebrew','help','hidden','hide','higher',
+ 'highlight','highlighttext','hiragana','hiragana-iroha',
+ 'horizontal','icon','ignore','inactiveborder','inactivecaption',
+ 'inactivecaptiontext','infinite','infobackground','infotext',
+ 'inherit','initial','inline','inline-axis','inline-block',
+ 'inline-table','inset','inside','intrinsic','invert','italic',
+ 'justify','katakana','katakana-iroha','landscape','large','larger',
+ 'left','level','lighter','lime','line-through','list-item','listbox',
+ 'listitem','logical','loud','lower','lower-alpha','lower-greek',
+ 'lower-latin','lower-roman','lowercase','ltr','marker','match',
+ 'medium','menu','menulist','menulist-button','menulist-text',
+ 'menulist-textfield','menutext','message-box','middle',
+ 'min-intrinsic','mix','monospace','move','multiple','n-resize',
+ 'narrower','ne-resize','no-close','no-close-quote','no-open-quote',
+ 'no-repeat','none','normal','nowrap','nw-resize','oblique','once',
+ 'open-quote','outset','outside','overline','padding','pointer',
+ 'portrait','pre','pre-line','pre-wrap','push-button','radio',
+ 'read-only','read-write','read-write-plaintext-only','relative',
+ 'repeat','repeat-x','repeat-y','reverse','ridge','right','round',
+ 'rtl','run-in','s-resize','sans-serif','scroll','scrollbar',
+ 'scrollbarbutton-down','scrollbarbutton-left',
+ 'scrollbarbutton-right','scrollbarbutton-up',
+ 'scrollbargripper-horizontal','scrollbargripper-vertical',
+ 'scrollbarthumb-horizontal','scrollbarthumb-vertical',
+ 'scrollbartrack-horizontal','scrollbartrack-vertical',
+ 'se-resize','searchfield','searchfield-close','searchfield-results',
+ 'semi-condensed','semi-expanded','separate','serif','show','single',
+ 'skip-white-space','slide','slider-horizontal','slider-vertical',
+ 'sliderthumb-horizontal','sliderthumb-vertical','slow','small',
+ 'small-caps','small-caption','smaller','solid','space','square',
+ 'square-button','start','static','status-bar','stretch','sub',
+ 'super','sw-resize','table','table-caption','table-cell',
+ 'table-column','table-column-group','table-footer-group',
+ 'table-header-group','table-row','table-row-group','text',
+ 'text-bottom','text-top','textfield','thick','thin',
+ 'threeddarkshadow','threedface','threedhighlight',
+ 'threedlightshadow','threedshadow','top','ultra-condensed',
+ 'ultra-expanded','underline','unfurl','up','upper-alpha',
+ 'upper-latin','upper-roman','uppercase','vertical','visible',
+ 'visual','w-resize','wait','wave','wider','window','windowframe',
+ 'windowtext','x-large','x-small','xx-large','xx-small'
+ ),
+ // function xxx()
+ 3 => array(
+ 'attr','calc','contrast','cross-fade','cubic-bezier','cycle',
+ 'device-cmyk','drop-shadow','element','ellipse','hsl','hsla','hwb',
+ 'image','matrix','matrix3d','minmax','gray','grayscale',
+ 'perspective','polygon','radial-gradient','translate','translatex',
+ 'translatey','translatez','translate3d','skew','skewx','skewy',
+ 'saturate','sepia','scale','scalex','scaley','scalez','scale3d',
+ 'steps','rect','repeating-linear-gradient',
+ 'repeating-radial-gradient','repeat','rgb','rgba','rotate','rotatex',
+ 'rotatey','rotatez','rotate3d','url','var'
+ ),
+ // colors
+ 4 => array(
+ 'aliceblue','antiquewhite','aqua','aquamarine','azure','beige',
+ 'bisque','black','blanchedalmond','blue','blueviolet','brown',
+ 'burlywood','cadetblue','chartreuse','chocolate','coral',
+ 'cornflowerblue','cornsilk','crimson','cyan','darkblue','darkcyan',
+ 'darkgoldenrod','darkgray','darkgreen','darkgrey','darkkhaki',
+ 'darkmagenta','darkolivegreen','darkorange','darkorchid','darkred',
+ 'darksalmon','darkseagreen','darkslateblue','darkslategray',
+ 'darkslategrey','darkturquoise','darkviolet','deeppink',
+ 'deepskyblue','dimgray','dimgrey','dodgerblue','firebrick',
+ 'floralwhite','forestgreen','fuchsia','gainsboro','ghostwhite',
+ 'gold','goldenrod','gray','green','greenyellow','grey','honeydew',
+ 'hotpink','indianred','indigo','ivory','khaki','lavender',
+ 'lavenderblush','lawngreen','lemonchiffon','lightblue','lightcoral',
+ 'lightcyan','lightgoldenrodyellow','lightgray','lightgreen',
+ 'lightgrey','lightpink','lightsalmon','lightseagreen','lightskyblue',
+ 'lightslategray','lightslategrey','lightsteelblue','lightyellow',
+ 'lime','limegreen','linen','magenta','maroon','mediumaquamarine',
+ 'mediumblue','mediumorchid','mediumpurple','mediumseagreen',
+ 'mediumslateblue','mediumspringgreen','mediumturquoise',
+ 'mediumvioletred','midnightblue','mintcream','mistyrose','moccasin',
+ 'navajowhite','navy','oldlace','olive','olivedrab','orange',
+ 'orangered','orchid','palegoldenrod','palegreen','paleturquoise',
+ 'palevioletred','papayawhip','peachpuff','peru','pink','plum',
+ 'powderblue','purple','rebeccapurple','red','rosybrown','royalblue',
+ 'saddlebrown','salmon','sandybrown','seagreen','seashell','sienna',
+ 'silver','skyblue','slateblue','slategray','slategrey','snow',
+ 'springgreen','steelblue','tan','teal','thistle','transparent',
+ 'tomato','turquoise','violet','wheat','white','whitesmoke','yellow',
+ 'yellowgreen'
+ ),
+ // pseudo class
+ 5 => array(
+ 'active','after','before','checked','choices','default','dir',
+ 'disabled','empty','enabled','first','first-child','first-letter',
+ 'first-line','first-of-type','focus','fullscreen','hover',
+ 'indeterminate','in-range','invalid','lang','last-child',
+ 'last-of-type','left','link','not','nth-child','nth-last-child',
+ 'nth-last-of-type','nth-of-type','only-child','only-of-type',
+ 'optional','out-of-range','read-only','read-write','repeat-index',
+ 'repeat-item','required','right','root','scope','selection','target',
+ 'valid','value','visited'
)
),
'SYMBOLS' => array(
@@ -150,12 +261,18 @@ $language_data = array (
'CASE_SENSITIVE' => array(
GESHI_COMMENTS => false,
1 => true,
- 2 => true
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
),
'STYLES' => array(
'KEYWORDS' => array(
1 => 'color: #000000; font-weight: bold;',
- 2 => 'color: #993333;'
+ 2 => 'color: #993333;',
+ 3 => 'color: #9932cc;',
+ 4 => 'color: #dc143c;',
+ 5 => 'color: #F5758F;',
),
'COMMENTS' => array(
1 => 'color: #a1a100;',
@@ -187,13 +304,17 @@ $language_data = array (
'REGEXPS' => array(
0 => 'color: #cc00cc;',
1 => 'color: #6666ff;',
- 2 => 'color: #3333ff;',
- 3 => 'color: #933;'
+ 2 => 'color: #3F84D9; font-weight: bold;',
+ 3 => 'color: #933;',
+ 4 => 'color: #444;'
)
),
'URLS' => array(
1 => '',
- 2 => ''
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
),
'OOLANG' => false,
'OBJECT_SPLITTERS' => array(
@@ -203,11 +324,12 @@ $language_data = array (
0 => '\#[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*',
//CSS classname
1 => '\.(?!\d)[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*\b(?=[\{\.#\s,:].|<\|)',
- //CSS Pseudo classes
- //note: & is needed for &gt; (i.e. > )
- 2 => '(?<!\\\\):(?!\d)[a-zA-Z0-9\-]+\b(?:\s*(?=[\{\.#a-zA-Z,:+*&](.|\n)|<\|))',
+ //CSS rules
+ 2 => '\@(?!\d)[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*\b(?=[\{\.#\s,:].|<\|)',
//Measurements
- 3 => '[+\-]?(\d+|(\d*\.\d+))(em|ex|pt|px|cm|in|%)',
+ 3 => '[+\-]?(\d+|(\d*\.\d+))(em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx|%)',
+ //var
+ 4 => '(--[a-zA-Z0-9\-]*)'
),
'STRICT_MODE_APPLIES' => GESHI_NEVER,
'SCRIPT_DELIMITERS' => array(
@@ -222,5 +344,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cuesheet.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cuesheet.php
index ebaca955..675264dc 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cuesheet.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/cuesheet.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (benbe@geshi.org)
* Copyright: (c) 2009 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/12/21
*
* Cuesheet language file for GeSHi.
@@ -134,5 +134,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php
index 7f3e9857..eb68ea58 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/d.php
@@ -6,7 +6,7 @@
* Contributors:
* - Jimmy Cao
* Copyright: (c) 2005 Thomas Kuehne (http://thomas.kuehne.cn/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/04/22
*
* D language file for GeSHi.
@@ -248,5 +248,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dart.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dart.php
new file mode 100644
index 00000000..932e13e8
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dart.php
@@ -0,0 +1,159 @@
+<?php
+/*************************************************************************************
+ * dart.php
+ * --------
+ * Author: Edward Hart (edward.dan.hart@gmail.com)
+ * Copyright: (c) 2013 Edward Hart
+ * Release Version: 1.0.8.12
+ * Date Started: 2013/10/25
+ *
+ * Dart language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2013/10/25
+ * - First Release
+ *
+ * TODO (updated 2013/10/25)
+ * -------------------------
+ * - Highlight standard library types.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'Dart',
+
+ 'COMMENT_SINGLE' => array('//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(),
+
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\nrfbtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ 4 => "#\\\\u\\{[\da-fA-F]*\\}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE |
+ GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abstract', 'as', 'assert', 'break', 'case', 'catch', 'class',
+ 'const', 'continue', 'default', 'do', 'dynamic', 'else', 'export',
+ 'extends', 'external', 'factory', 'false', 'final', 'finally',
+ 'for', 'get', 'if', 'implements', 'import', 'in', 'is', 'library',
+ 'new', 'null', 'operator', 'part', 'return', 'set', 'static',
+ 'super', 'switch', 'this', 'throw', 'true', 'try', 'typedef', 'var',
+ 'while', 'with'
+ ),
+ 2 => array(
+ 'double', 'bool', 'int', 'num', 'void'
+ ),
+ ),
+
+ 'SYMBOLS' => array(
+ 0 => array('(', ')', '{', '}', '[', ']'),
+ 1 => array('+', '-', '*', '/', '%', '~'),
+ 2 => array('&', '|', '^'),
+ 3 => array('=', '!', '<', '>'),
+ 4 => array('?', ':'),
+ 5 => array('..'),
+ 6 => array(';', ',')
+ ),
+
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ ),
+
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'font-weight: bold;',
+ 2 => 'color: #445588; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #999988; font-style: italic;',
+ 'MULTI' => 'color: #999988; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #d14;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #009999;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'BRACKETS' => array(''),
+ 'METHODS' => array(
+ 1 => 'color: #006633;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'font-weight: bold;',
+ 1 => 'font-weight: bold;',
+ 2 => 'font-weight: bold;',
+ 3 => 'font-weight: bold;',
+ 4 => 'font-weight: bold;',
+ 5 => 'font-weight: bold;',
+ 6 => 'font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcl.php
index db12a4c4..90de8732 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcl.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcl.php
@@ -4,7 +4,7 @@
* --------
* Author: Petr Hendl (petr@hendl.cz)
* Copyright: (c) 2011 Petr Hendl http://hendl.cz/geshi/
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2011/02/17
*
* DCL language file for GeSHi.
@@ -188,5 +188,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php
index 5fcb25e5..4dec5a85 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcpu16.php
@@ -3,8 +3,8 @@
* dcpu16.php
* -------
* Author: Benny Baumann (BenBE@omorphia.de)
- * Copyright: (c) 2007-2012 Benny Baumann (http://geshi.org/)
- * Release Version: 1.0.8.11
+ * Copyright: (c) 2007-2014 Benny Baumann (http://geshi.org/)
+ * Release Version: 1.0.8.12
* Date Started: 2012/04/12
*
* DCPU/16 Assembly language file for GeSHi.
@@ -127,5 +127,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcs.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcs.php
index d32cfc5b..99fa6280 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcs.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dcs.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Stelio Passaris (GeSHi@stelio.net)
* Copyright: (c) 2009 Stelio Passaris (http://stelio.net/stiki/GeSHi)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/01/20
*
* DCS language file for GeSHi.
@@ -178,5 +178,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/delphi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/delphi.php
index d5596e0c..a0cd36eb 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/delphi.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/delphi.php
@@ -4,7 +4,7 @@
* ----------
* Author: J�rja Norbert (jnorbi@vipmail.hu), Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2004 J�rja Norbert, Benny Baumann (BenBE@omorphia.de), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/26
*
* Delphi (Object Pascal) language file for GeSHi.
@@ -297,5 +297,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/diff.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/diff.php
index 5b681717..e4bfc6f4 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/diff.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/diff.php
@@ -4,7 +4,7 @@
* --------
* Author: Conny Brunnkvist (conny@fuchsia.se), W. Tasin (tasin@fhm.edu)
* Copyright: (c) 2004 Fuchsia Open Source Solutions (http://www.fuchsia.se/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/12/29
*
* Diff-output language file for GeSHi.
@@ -192,5 +192,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/div.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/div.php
index aa11795a..8b230da9 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/div.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/div.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Gabriel Lorenzo (ermakina@gmail.com)
* Copyright: (c) 2005 Gabriel Lorenzo (http://ermakina.gazpachito.net)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/06/19
*
* DIV language file for GeSHi.
@@ -122,5 +122,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dos.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dos.php
index 36d99836..080f300d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dos.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dos.php
@@ -4,7 +4,7 @@
* -------
* Author: Alessandro Staltari (staltari@geocities.com)
* Copyright: (c) 2005 Alessandro Staltari (http://www.geocities.com/SiliconValley/Vista/8155/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/07/05
*
* DOS language file for GeSHi.
@@ -223,5 +223,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dot.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dot.php
index bdf240a1..430ea244 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dot.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/dot.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Adrien Friggeri (adrien@friggeri.net)
* Copyright: (c) 2007 Adrien Friggeri (http://www.friggeri.net)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/05/30
*
* dot language file for GeSHi.
@@ -160,5 +160,3 @@ $language_data = array (
3 => true
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php
index 319bee01..4d4c539c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/e.php
@@ -4,7 +4,7 @@
* --------
* Author: Kevin Reid (kpreid@switchb.org)
* Copyright: (c) 2010 Kevin Reid (http://switchb.org/kpreid/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/04/16
*
* E language file for GeSHi.
@@ -204,5 +204,3 @@ $language_data = array(
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ecmascript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ecmascript.php
index 69a55c9a..7a1da92d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ecmascript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ecmascript.php
@@ -4,7 +4,7 @@
* --------------
* Author: Michel Mariani (http://www.tonton-pixel.com/site/)
* Copyright: (c) 2010 Michel Mariani (http://www.tonton-pixel.com/site/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/01/08
*
* ECMAScript language file for GeSHi.
@@ -206,5 +206,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php
index baa13c31..5142e797 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/eiffel.php
@@ -4,7 +4,7 @@
* ----------
* Author: Zoran Simic (zsimic@axarosenberg.com)
* Copyright: (c) 2005 Zoran Simic
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/06/30
*
* Eiffel language file for GeSHi.
@@ -391,5 +391,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/email.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/email.php
index 8a313d48..4ddc6ab6 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/email.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/email.php
@@ -4,7 +4,7 @@
* ---------------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/10/19
*
* Email (mbox \ eml \ RFC format) language file for GeSHi.
@@ -218,5 +218,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/epc.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/epc.php
index c575c0c6..2db41fed 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/epc.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/epc.php
@@ -4,7 +4,7 @@
* --------
* Author: Thorsten Muehlfelder (muehlfelder@enertex.de)
* Copyright: (c) 2010 Enertex Bayern GmbH
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/08/26
*
* Enerscript language file for GeSHi.
@@ -150,5 +150,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/erlang.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/erlang.php
index 4b8d406b..9939d1a7 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/erlang.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/erlang.php
@@ -7,7 +7,7 @@
* - Uwe Dauernheim (uwe@dauernheim.net)
* - Dan Forest-Barbier (dan@twisted.in)
* Copyright: (c) 2008 Uwe Dauernheim (http://www.kreisquadratur.de/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008-09-27
*
* Erlang language file for GeSHi.
@@ -425,17 +425,15 @@ $language_data = array(
3 => array(
'DISALLOWED_BEFORE' => '(?<![\w])',
'DISALLOWED_AFTER' => ''//'(?=\s*\()'
- ),
+ ),
5 => array(
'DISALLOWED_BEFORE' => '(?<=\'|)',
'DISALLOWED_AFTER' => '(?=(\'|):)'
- ),
+ ),
6 => array(
'DISALLOWED_BEFORE' => '(?<=\/|-)',
'DISALLOWED_AFTER' => ''
+ )
)
)
- ),
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php
index 7bbf8846..19897554 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/euphoria.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Nicholas Koceja (nerketur@hotmail.com)
* Copyright: (c) 2010 Nicholas Koceja
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 11/24/2010
*
* Euphoria language file for GeSHi.
@@ -136,5 +136,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ezt.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ezt.php
new file mode 100644
index 00000000..196a56b8
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ezt.php
@@ -0,0 +1,134 @@
+<?php
+/*************************************************************************************
+ * ezt.php
+ * -----------
+ * Author: Ramesh Vishveshwar (ramesh.vishveshwar@gmail.com)
+ * Copyright: (c) 2012 Ramesh Vishveshwar (http://thecodeisclear.in)
+ * Release Version: 1.0.8.12
+ * Date Started: 2012/09/01
+ *
+ * Easytrieve language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2012/09/22 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'EZT',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'COMMENT_REGEXP' => array(
+ // First character of the line is an asterisk. Rest of the line is spaces/null
+ 0 => '/\*(\s|\D)?(\n)/',
+ // Asterisk followed by any character & then a non numeric character.
+ // This is to prevent expressions such as 25 * 4 from being marked as a comment
+ // Note: 25*4 - 100 will mark *4 - 100 as a comment. Pls. space out expressions
+ // In any case, 25*4 will result in an Easytrieve error
+ 1 => '/\*.([^0-9\n])+.*(\n)/'
+ ),
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'CONTROL','DEFINE','DISPLAY','DO','ELSE','END-DO','END-IF',
+ 'END-PROC','FILE','GET','GOTO','HEADING','IF','JOB','LINE',
+ 'PARM','PERFORM','POINT','PRINT','PROC','PUT','READ','RECORD',
+ 'REPORT','RETRIEVE','SEARCH','SELECT','SEQUENCE','SORT','STOP',
+ 'TITLE','WRITE'
+ ),
+ // Procedure Keywords (Names of specific procedures)
+ 2 => array (
+ 'AFTER-BREAK','AFTER-LINE','BEFORE-BREAK','BEFORE-LINE',
+ 'ENDPAGE','REPORT-INPUT','TERMINATION',
+ ),
+ // Macro names, Parameters
+ 3 => array (
+ 'COMPILE','CONCAT','DESC','GETDATE','MASK','PUNCH',
+ 'VALUE','SYNTAX','NEWPAGE','SKIP','COL','TALLY',
+ 'WITH'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(',')','=','&',',','*','>','<','%'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ //4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #FF0000;',
+ 2 => 'color: #21A502;',
+ 3 => 'color: #FF00FF;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #0000FF; font-style: italic;',
+ 1 => 'color: #0000FF; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF7400;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #66CC66;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #736205;'
+ ),
+ 'METHODS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #FF7400;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #E01B6A;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ // We are trying to highlight Macro names here which preceded by %
+ 0 => '(%)([a-zA-Z0-9])+(\s|\n)'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/f1.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/f1.php
index 7d767608..75a7cd5c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/f1.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/f1.php
@@ -4,7 +4,7 @@
* -------
* Author: Juro Bystricky (juro@f1compiler.com)
* Copyright: K2 Software Corp.
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/07/06
*
* Formula One language file for GeSHi.
@@ -147,5 +147,3 @@ $language_data = array(
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/falcon.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/falcon.php
index 2111d9e8..aeb41332 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/falcon.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/falcon.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: billykater (billykater+geshi@gmail.com)
* Copyright: (c) 2010 billykater (http://falconpl.org/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/06/07
*
* Falcon language file for GeSHi.
@@ -215,4 +215,3 @@ $language_data = array (
'.'
)
);
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fo.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fo.php
index ba4a5924..661f5bb3 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fo.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fo.php
@@ -4,7 +4,7 @@
* --------
* Author: Tan-Vinh Nguyen (tvnguyen@web.de)
* Copyright: (c) 2009 Tan-Vinh Nguyen
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/03/23
*
* fo language file for GeSHi.
@@ -324,4 +324,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fortran.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fortran.php
index c21ccd19..c3bd402a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fortran.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fortran.php
@@ -4,7 +4,7 @@
* -----------
* Author: Cedric Arrabie (cedric.arrabie@univ-pau.fr)
* Copyright: (C) 2006 Cetric Arrabie
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/04/22
*
* Fortran language file for GeSHi.
@@ -156,5 +156,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK'=> array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freebasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freebasic.php
index b23f39bc..842a8057 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freebasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freebasic.php
@@ -4,7 +4,7 @@
* -------------
* Author: Roberto Rossi
* Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/08/19
*
* FreeBasic (http://www.freebasic.net/) language file for GeSHi.
@@ -137,5 +137,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freeswitch.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freeswitch.php
index c6fff276..efeceddb 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freeswitch.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/freeswitch.php
@@ -4,7 +4,7 @@
* --------
* Author: James Rose (james.gs@stubbornroses.com)
* Copyright: (c) 2006 Christian Lescuyer http://xtian.goelette.info
- * Release Version: 1.0.8.11n/a
+ * Release Version: 1.0.8.12
* Date Started: 2011/11/18
*
* FreeSWITCH language file for GeSHi.
@@ -164,5 +164,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php
index d85a7c75..33aa1220 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/fsharp.php
@@ -4,7 +4,7 @@
* ----------
* Author: julien ortin (jo_spam-divers@yahoo.fr)
* Copyright: (c) 2009 julien ortin
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/09/20
*
* F# language file for GeSHi.
@@ -209,5 +209,3 @@ $language_data = array(
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gambas.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gambas.php
index 352830eb..4bb582e6 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gambas.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gambas.php
@@ -5,7 +5,7 @@
* Author: Jesus Guardon (jguardon@telefonica.net)
* Copyright: (c) 2009 Jesus Guardon (http://gambas-es.org),
* Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/20
*
* GAMBAS language file for GeSHi.
@@ -210,5 +210,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gdb.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gdb.php
index 0a5e32c3..16cc9fb4 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gdb.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gdb.php
@@ -4,7 +4,7 @@
* --------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2009 Milian Wolff
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/06/24
*
* GDB language file for GeSHi.
@@ -189,10 +189,6 @@ $language_data = array (
'PARSER_CONTROL' => array(
'ENABLE_FLAGS' => array(
'NUMBERS' => false
- ),
+ )
)
);
-
-// kate: replace-tabs on; indent-width 4;
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genero.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genero.php
index e1b20b3e..faac5e88 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genero.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genero.php
@@ -4,7 +4,7 @@
* ----------
* Author: Lars Gersmann (lars.gersmann@gmail.com)
* Copyright: (c) 2007 Lars Gersmann, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/07/01
*
* Genero (FOURJ's Genero 4GL) language file for GeSHi.
@@ -459,5 +459,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genie.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genie.php
index db05ec06..38495627 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genie.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/genie.php
@@ -4,7 +4,7 @@
* ----------
* Author: Nicolas Joseph (nicolas.joseph@valaide.org)
* Copyright: (c) 2009 Nicolas Joseph
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/04/29
*
* Genie language file for GeSHi.
@@ -150,8 +150,6 @@ $language_data = array (
'KEYWORDS' => array(
'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#>|^])",
'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-])"
+ )
)
- )
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gettext.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gettext.php
index 80b531c1..ef4dd96b 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gettext.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gettext.php
@@ -4,7 +4,7 @@
* --------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2008 Milian Wolff
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/05/25
*
* GNU Gettext .po/.pot language file for GeSHi.
@@ -91,7 +91,5 @@ $language_data = array (
),
'HIGHLIGHT_STRICT_BLOCK' => array(
),
- 'TAB_WIDTH' => 4,
+ 'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/glsl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/glsl.php
index 3615cfe7..1eb3918e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/glsl.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/glsl.php
@@ -4,7 +4,7 @@
* -----
* Author: Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2008 Benny Baumann (BenBE@omorphia.de)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/03/20
*
* glSlang language file for GeSHi.
@@ -201,5 +201,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gml.php
index 999251b2..26c913b6 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gml.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gml.php
@@ -1,10 +1,10 @@
<?php
/*************************************************************************************
* gml.php
- * --------
- * Author: Jos� Jorge Enr�quez (jenriquez@users.sourceforge.net)
- * Copyright: (c) 2005 Jos� Jorge Enr�quez Rodr�guez (http://www.zonamakers.com)
- * Release Version: 1.0.8.11
+ * -------
+ * Author: José Jorge Enríquez <jenriquez@users.sourceforge.net>, Timon Knigge <timonknigge@live.nl>
+ * Copyright: (c) 2005 José Jorge Enríquez Rodríguez (http://www.zonamakers.com), (c) 2013 Timon Knigge (http://www.bluemoonproductions.nl)
+ * Release Version: 1.0.8.12
* Date Started: 2005/06/21
*
* GML language file for GeSHi.
@@ -61,388 +61,256 @@
*
************************************************************************************/
-$language_data = array (
+$language_data = array(
'LANG_NAME' => 'GML',
'COMMENT_SINGLE' => array(1 => '//'),
'COMMENT_MULTI' => array('/*' => '*/'),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
- 'QUOTEMARKS' => array("'"),
- 'ESCAPE_CHAR' => '\\',
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '',
'KEYWORDS' => array(
- // language keywords
+ // Variables
1 => array(
- 'break', 'continue', 'do', 'until', 'if', 'else',
- 'exit', 'for', 'repeat', 'return', 'switch',
- 'case', 'default', 'var', 'while', 'with', 'div', 'mod',
- // GML Language overview
- 'self', 'other', 'all', 'noone', 'global',
+ 'argument','argument0','argument1','argument10','argument11','argument12','argument13','argument14','argument15','argument2','argument3','argument4','argument5','argument6','argument7',
+ 'argument8','argument9','argument_count','argument_relative','async_load','background_alpha','background_blend','background_color','background_foreground','background_height','background_hspeed',
+ 'background_htiled','background_index','background_showcolor','background_visible','background_vspeed','background_vtiled','background_width','background_x','background_xscale','background_y',
+ 'background_yscale','browser_height','browser_width','caption_health','caption_lives','caption_score','current_day','current_hour','current_minute','current_month','current_second','current_time',
+ 'current_weekday','current_year','cursor_sprite','debug_mode','delta_time','display_aa','error_last','error_occurred','event_action','event_number','event_object','event_type','fps','fps_real',
+ 'game_id','gamemaker_pro','gamemaker_registered','gamemaker_version','health','instance_count','instance_id','keyboard_key','keyboard_lastchar','keyboard_lastkey','keyboard_string','lives',
+ 'mouse_button','mouse_lastbutton','mouse_x','mouse_y','os_browser','os_device','os_type','os_version','program_directory','room','room_caption','room_first','room_height','room_last',
+ 'room_persistent','room_speed','room_width','score','secure_mode','show_health','show_lives','show_score','temp_directory','transition_color','transition_kind','transition_steps','view_angle',
+ 'view_current','view_enabled','view_hborder','view_hport','view_hspeed','view_hview','view_object','view_surface_id','view_vborder','view_visible','view_vspeed','view_wport','view_wview','view_xport',
+ 'view_xview','view_yport','view_yview','webgl_enabled','working_directory','alarm','bbox_bottom','bbox_left','bbox_right','bbox_top','depth','direction','friction','gravity','gravity_direction',
+ 'hspeed','id','image_alpha','image_angle','image_blend','image_index','image_number','image_single','image_speed','image_xscale','image_yscale','mask_index','object_index','path_endaction','path_index',
+ 'path_orientation','path_position','path_positionprevious','path_scale','path_speed','persistent','phy_active','phy_angular_damping','phy_angular_velocity','phy_bullet','phy_col_normal_x',
+ 'phy_col_normal_y','phy_collision_points','phy_collision_x','phy_collision_y','phy_com_x','phy_com_y','phy_dynamic','phy_fixed_rotation','phy_inertia','phy_kinematic','phy_linear_damping',
+ 'phy_linear_velocity_x','phy_linear_velocity_y','phy_mass','phy_position_x','phy_position_xprevious','phy_position_y','phy_position_yprevious','phy_rotation','phy_sleeping','phy_speed','phy_speed_x',
+ 'phy_speed_y','solid','speed','sprite_height','sprite_index','sprite_width','sprite_xoffset','sprite_yoffset','timeline_index','timeline_loop','timeline_position','timeline_running','timeline_speed',
+ 'visible','vspeed','x','xprevious','xstart','y','yprevious','ystart'
),
- // modifiers and built-in variables
+
+ // Functions
2 => array(
- // Game play
- 'x','y','xprevious','yprevious','xstart','ystart','hspeed','vspeed','direction','speed',
- 'friction','gravity','gravity_direction',
- 'path_index','path_position','path_positionprevious','path_speed','path_orientation',
- 'path_endaction',
- 'object_index','id','mask_index','solid','persistent','instance_count','instance_id',
- 'room_speed','fps','current_time','current_year','current_month','current_day','current_weekday',
- 'current_hour','current_minute','current_second','alarm','timeline_index','timeline_position',
- 'timeline_speed',
- 'room','room_first','room_last','room_width','room_height','room_caption','room_persistent',
- 'score','lives','health','show_score','show_lives','show_health','caption_score','caption_lives',
- 'caption_health',
- 'event_type','event_number','event_object','event_action',
- 'error_occurred','error_last',
- // User interaction
- 'keyboard_lastkey','keyboard_key','keyboard_lastchar','keyboard_string',
- 'mouse_x','mouse_y','mouse_button','mouse_lastbutton',
- // Game Graphics
- 'sprite_index','sprite_width','sprite_height','sprite_xoffset','sprite_yoffset',
- 'image_number','image_index','image_speed','image_xscale','image_yscale','image_angle',
- 'image_alpha','image_blend','bbox_left','bbox_right','bbox_top','bbox_bottom',
- 'background_color','background_showcolor','background_visible','background_foreground',
- 'background_index','background_x','background_y','background_width','background_height',
- 'background_htiled','background_vtiled','background_xscale','background_yscale',
- 'background_hspeed','background_vspeed','background_blend','background_alpha',
- 'background','left, top, width, height','depth','visible','xscale','yscale','blend','alpha',
- 'view_enabled','view_current','view_visible','view_yview','view_wview','view_hview','view_xport',
- 'view_yport','view_wport','view_hport','view_angle','view_hborder','view_vborder','view_hspeed',
- 'view_vspeed','view_object',
- 'transition_kind',
- // Files, registry and executing programs
- 'game_id','working_directory','temp_directory',
- 'secure_mode',
- // Creating particles
- 'xmin', 'xmax', 'ymin', 'ymax','shape','distribution','particle type','number',
- 'force','dist','kind','additive', 'parttype1', 'parttype2'
+ 'YoYo_AchievementsAvailable','YoYo_AddVirtualKey','YoYo_CheckSecurity','YoYo_DeleteVirtualKey','YoYo_DisableAds','YoYo_EnableAds','YoYo_EnableAlphaBlend','YoYo_GetCPUDetails','YoYo_GetConfig',
+ 'YoYo_GetDevice','YoYo_GetDomain','YoYo_GetPictureSprite','YoYo_GetPlatform','YoYo_GetSessionKey','YoYo_GetTiltX','YoYo_GetTiltY','YoYo_GetTiltZ','YoYo_GetTimer','YoYo_HideVirtualKey','YoYo_IsKeypadOpen',
+ 'YoYo_LeaveRating','YoYo_LoginAchievements','YoYo_LogoutAchievements','YoYo_MouseCheckButton','YoYo_MouseCheckButtonPressed','YoYo_MouseCheckButtonReleased','YoYo_MouseX','YoYo_MouseXRaw','YoYo_MouseY',
+ 'YoYo_MouseYRaw','YoYo_OSPauseEvent','YoYo_OpenURL','YoYo_OpenURL_ext','YoYo_OpenURL_full','YoYo_PostAchievement','YoYo_PostScore','YoYo_SelectPicture','YoYo_ShowVirtualKey','abs','achievement_available',
+ 'achievement_event','achievement_get_challenges','achievement_get_info','achievement_get_pic','achievement_increment','achievement_load_friends','achievement_load_leaderboard','achievement_load_progress',
+ 'achievement_login','achievement_login_status','achievement_logout','achievement_post','achievement_post_score','achievement_reset','achievement_send_challenge','achievement_show',
+ 'achievement_show_achievements','achievement_show_challenge_notifications','achievement_show_leaderboards','action_another_room','action_bounce','action_change_object','action_color','action_create_object',
+ 'action_create_object_motion','action_create_object_random','action_current_room','action_draw_arrow','action_draw_background','action_draw_ellipse','action_draw_ellipse_gradient','action_draw_gradient_hor',
+ 'action_draw_gradient_vert','action_draw_health','action_draw_life','action_draw_life_images','action_draw_line','action_draw_rectangle','action_draw_score','action_draw_sprite','action_draw_text',
+ 'action_draw_text_transformed','action_draw_variable','action_effect','action_end_game','action_end_sound','action_execute_script','action_font','action_fullscreen','action_highscore_clear','action_if',
+ 'action_if_aligned','action_if_collision','action_if_dice','action_if_empty','action_if_health','action_if_life','action_if_mouse','action_if_next_room','action_if_number','action_if_object',
+ 'action_if_previous_room','action_if_question','action_if_score','action_if_sound','action_if_variable','action_inherited','action_kill_object','action_kill_position','action_linear_step','action_load_game',
+ 'action_message','action_move','action_move_contact','action_move_point','action_move_random','action_move_start','action_move_to','action_next_room','action_partemit_burst','action_partemit_create',
+ 'action_partemit_destroy','action_partemit_stream','action_partsyst_clear','action_partsyst_create','action_partsyst_destroy','action_parttype_color','action_parttype_create','action_parttype_gravity',
+ 'action_parttype_life','action_parttype_secondary','action_parttype_speed','action_path','action_path_end','action_path_position','action_path_speed','action_potential_step','action_previous_room',
+ 'action_replace_background','action_replace_sound','action_replace_sprite','action_restart_game','action_reverse_xdir','action_reverse_ydir','action_save_game','action_set_alarm','action_set_cursor',
+ 'action_set_friction','action_set_gravity','action_set_health','action_set_hspeed','action_set_life','action_set_motion','action_set_score','action_set_timeline_position','action_set_timeline_speed',
+ 'action_set_vspeed','action_snap','action_snapshot','action_sound','action_sprite_color','action_sprite_set','action_sprite_transform','action_timeline_pause','action_timeline_set','action_timeline_start',
+ 'action_timeline_stop','action_webpage','action_wrap','ads_disable','ads_enable','ads_engagement_active','ads_engagement_available','ads_engagement_launch','ads_event','ads_event_preload',
+ 'ads_get_display_height','ads_get_display_width','ads_interstitial_available','ads_interstitial_display','ads_move','ads_set_reward_callback','ads_setup','analytics_event','analytics_event_ext','ansi_char',
+ 'arccos','arcsin','arctan','arctan2','array_height_2d','array_length_1d','array_length_2d','asset_get_index','asset_get_type','audio_channel_num','audio_emitter_create','audio_emitter_exists',
+ 'audio_emitter_falloff','audio_emitter_free','audio_emitter_gain','audio_emitter_pitch','audio_emitter_position','audio_emitter_velocity','audio_exists','audio_falloff_set_model','audio_get_type',
+ 'audio_is_paused','audio_is_playing','audio_listener_orientation','audio_listener_position','audio_listener_velocity','audio_master_gain','audio_music_gain','audio_music_is_playing','audio_pause_all',
+ 'audio_pause_music','audio_pause_sound','audio_play_music','audio_play_sound','audio_play_sound_at','audio_play_sound_on','audio_resume_all','audio_resume_music','audio_resume_sound','audio_sound_gain',
+ 'audio_sound_length','audio_sound_pitch','audio_stop_all','audio_stop_music','audio_stop_sound','audio_system','background_add','background_assign','background_create_color','background_create_from_surface',
+ 'background_create_gradient','background_delete','background_duplicate','background_exists','background_get_height','background_get_name','background_get_texture','background_get_uvs','background_get_width',
+ 'background_replace','background_save','background_set_alpha_from_background','base64_decode','base64_encode','buffer_base64_decode','buffer_base64_decode_ext','buffer_base64_encode','buffer_copy',
+ 'buffer_create','buffer_delete','buffer_fill','buffer_get_size','buffer_get_surface','buffer_load','buffer_load_ext','buffer_md5','buffer_peek','buffer_poke','buffer_read','buffer_resize','buffer_save',
+ 'buffer_save_ext','buffer_seek','buffer_set_surface','buffer_sha1','buffer_sizeof','buffer_tell','buffer_write','ceil','choose','chr','clamp','clickable_add','clickable_add_ext','clickable_change',
+ 'clickable_change_ext','clickable_delete','clickable_exists','clipboard_get_text','clipboard_has_text','clipboard_set_text','cloud_file_save','cloud_string_save','cloud_synchronise','code_is_compiled',
+ 'collision_circle','collision_ellipse','collision_line','collision_point','collision_rectangle','color_get_blue','color_get_green','color_get_hue','color_get_red','color_get_saturation','color_get_value',
+ 'cos','d3d_draw_block','d3d_draw_cone','d3d_draw_cylinder','d3d_draw_ellipsoid','d3d_draw_floor','d3d_draw_wall','d3d_end','d3d_light_define_ambient','d3d_light_define_direction','d3d_light_define_point',
+ 'd3d_light_enable','d3d_model_block','d3d_model_clear','d3d_model_cone','d3d_model_create','d3d_model_cylinder','d3d_model_destroy','d3d_model_draw','d3d_model_ellipsoid','d3d_model_floor','d3d_model_load',
+ 'd3d_model_primitive_begin','d3d_model_primitive_end','d3d_model_save','d3d_model_vertex','d3d_model_vertex_color','d3d_model_vertex_normal','d3d_model_vertex_normal_color','d3d_model_vertex_normal_texture',
+ 'd3d_model_vertex_normal_texture_color','d3d_model_vertex_texture','d3d_model_vertex_texture_color','d3d_model_wall','d3d_primitive_begin','d3d_primitive_begin_texture','d3d_primitive_end','d3d_set_culling',
+ 'd3d_set_depth','d3d_set_fog','d3d_set_hidden','d3d_set_lighting','d3d_set_perspective','d3d_set_projection','d3d_set_projection_ext','d3d_set_projection_ortho','d3d_set_projection_perspective',
+ 'd3d_set_shading','d3d_set_zwriteenable','d3d_start','d3d_transform_add_rotation_axis','d3d_transform_add_rotation_x','d3d_transform_add_rotation_y','d3d_transform_add_rotation_z','d3d_transform_add_scaling',
+ 'd3d_transform_add_translation','d3d_transform_set_identity','d3d_transform_set_rotation_axis','d3d_transform_set_rotation_x','d3d_transform_set_rotation_y','d3d_transform_set_rotation_z',
+ 'd3d_transform_set_scaling','d3d_transform_set_translation','d3d_transform_stack_clear','d3d_transform_stack_discard','d3d_transform_stack_empty','d3d_transform_stack_pop','d3d_transform_stack_push',
+ 'd3d_transform_stack_top','d3d_transform_vertex','d3d_vertex','d3d_vertex_color','d3d_vertex_normal','d3d_vertex_normal_color','d3d_vertex_normal_texture','d3d_vertex_normal_texture_color','d3d_vertex_texture',
+ 'd3d_vertex_texture_color','date_compare_date','date_compare_datetime','date_compare_time','date_create_datetime','date_current_datetime','date_date_of','date_date_string','date_datetime_string','date_day_span',
+ 'date_days_in_month','date_days_in_year','date_get_day','date_get_day_of_year','date_get_hour','date_get_hour_of_year','date_get_minute','date_get_minute_of_year','date_get_month','date_get_second',
+ 'date_get_second_of_year','date_get_week','date_get_weekday','date_get_year','date_hour_span','date_inc_day','date_inc_hour','date_inc_minute','date_inc_month','date_inc_second','date_inc_week','date_inc_year',
+ 'date_is_today','date_leap_year','date_minute_span','date_month_span','date_second_span','date_time_of','date_time_string','date_valid_datetime','date_week_span','date_year_span','degtorad','device_get_tilt_x',
+ 'device_get_tilt_y','device_get_tilt_z','device_ios_get_image','device_ios_get_imagename','device_is_keypad_open','device_mouse_check_button','device_mouse_check_button_pressed',
+ 'device_mouse_check_button_released','device_mouse_dbclick_enable','device_mouse_raw_x','device_mouse_raw_y','device_mouse_x','device_mouse_y','directory_create','directory_exists','display_get_dpi_x',
+ 'display_get_dpi_y','display_get_gui_height','display_get_gui_width','display_get_height','display_get_orientation','display_get_width','display_mouse_get_x','display_mouse_get_y','display_mouse_set',
+ 'display_reset','display_set_gui_size','distance_to_object','distance_to_point','dot_product','dot_product_3d','dot_product_3d_normalised','dot_product_normalised','draw_arrow','draw_background',
+ 'draw_background_ext','draw_background_general','draw_background_part','draw_background_part_ext','draw_background_stretched','draw_background_stretched_ext','draw_background_tiled','draw_background_tiled_ext',
+ 'draw_button','draw_circle','draw_circle_color','draw_clear','draw_clear_alpha','draw_ellipse','draw_ellipse_color','draw_enable_alphablend','draw_enable_drawevent','draw_get_alpha','draw_get_alpha_test',
+ 'draw_get_alpha_test_ref_value','draw_get_color','draw_getpixel','draw_getpixel_ext','draw_healthbar','draw_highscore','draw_line','draw_line_color','draw_line_width','draw_line_width_color','draw_path',
+ 'draw_point','draw_point_color','draw_primitive_begin','draw_primitive_begin_texture','draw_primitive_end','draw_rectangle','draw_rectangle_color','draw_roundrect','draw_roundrect_color','draw_self',
+ 'draw_set_alpha','draw_set_alpha_test','draw_set_alpha_test_ref_value','draw_set_blend_mode','draw_set_blend_mode_ext','draw_set_circle_precision','draw_set_color','draw_set_color_write_enable',
+ 'draw_set_font','draw_set_halign','draw_set_valign','draw_sprite','draw_sprite_ext','draw_sprite_general','draw_sprite_part','draw_sprite_part_ext','draw_sprite_pos','draw_sprite_stretched',
+ 'draw_sprite_stretched_ext','draw_sprite_tiled','draw_sprite_tiled_ext','draw_surface','draw_surface_ext','draw_surface_general','draw_surface_part','draw_surface_part_ext','draw_surface_stretched',
+ 'draw_surface_stretched_ext','draw_surface_tiled','draw_surface_tiled_ext','draw_text','draw_text_color','draw_text_ext','draw_text_ext_color','draw_text_ext_transformed','draw_text_ext_transformed_color',
+ 'draw_text_transformed','draw_text_transformed_color','draw_texture_flush','draw_triangle','draw_triangle_color','draw_vertex','draw_vertex_color','draw_vertex_texture','draw_vertex_texture_color',
+ 'ds_exists','ds_grid_add','ds_grid_add_disk','ds_grid_add_grid_region','ds_grid_add_region','ds_grid_clear','ds_grid_copy','ds_grid_create','ds_grid_destroy','ds_grid_get','ds_grid_get_disk_max',
+ 'ds_grid_get_disk_mean','ds_grid_get_disk_min','ds_grid_get_disk_sum','ds_grid_get_max','ds_grid_get_mean','ds_grid_get_min','ds_grid_get_sum','ds_grid_height','ds_grid_multiply','ds_grid_multiply_disk',
+ 'ds_grid_multiply_grid_region','ds_grid_multiply_region','ds_grid_read','ds_grid_resize','ds_grid_set','ds_grid_set_disk','ds_grid_set_grid_region','ds_grid_set_region','ds_grid_shuffle','ds_grid_sort',
+ 'ds_grid_value_disk_exists','ds_grid_value_disk_x','ds_grid_value_disk_y','ds_grid_value_exists','ds_grid_value_x','ds_grid_value_y','ds_grid_width','ds_grid_write','ds_list_add','ds_list_clear',
+ 'ds_list_copy','ds_list_create','ds_list_delete','ds_list_destroy','ds_list_empty','ds_list_find_index','ds_list_find_value','ds_list_insert','ds_list_mark_as_list','ds_list_mark_as_map','ds_list_read',
+ 'ds_list_replace','ds_list_shuffle','ds_list_size','ds_list_sort','ds_list_write','ds_map_add','ds_map_add_list','ds_map_add_map','ds_map_clear','ds_map_copy','ds_map_create','ds_map_delete',
+ 'ds_map_destroy','ds_map_empty','ds_map_exists','ds_map_find_first','ds_map_find_last','ds_map_find_next','ds_map_find_previous','ds_map_find_value','ds_map_read','ds_map_replace','ds_map_replace_list',
+ 'ds_map_replace_map','ds_map_size','ds_map_write','ds_priority_add','ds_priority_change_priority','ds_priority_clear','ds_priority_copy','ds_priority_create','ds_priority_delete_max','ds_priority_delete_min',
+ 'ds_priority_delete_value','ds_priority_destroy','ds_priority_empty','ds_priority_find_max','ds_priority_find_min','ds_priority_find_priority','ds_priority_read','ds_priority_size','ds_priority_write',
+ 'ds_queue_clear','ds_queue_copy','ds_queue_create','ds_queue_dequeue','ds_queue_destroy','ds_queue_empty','ds_queue_enqueue','ds_queue_head','ds_queue_read','ds_queue_size','ds_queue_tail','ds_queue_write',
+ 'ds_set_precision','ds_stack_clear','ds_stack_copy','ds_stack_create','ds_stack_destroy','ds_stack_empty','ds_stack_pop','ds_stack_push','ds_stack_read','ds_stack_size','ds_stack_top','ds_stack_write',
+ 'effect_clear','effect_create_above','effect_create_below','environment_get_variable','event_inherited','event_perform','event_perform_object','event_user','exp','external_call','external_define','external_free',
+ 'facebook_accesstoken','facebook_dialog','facebook_graph_request','facebook_init','facebook_launch_offerwall','facebook_login','facebook_logout','facebook_post_message','facebook_send_invite','facebook_status',
+ 'facebook_user_id','file_attributes','file_bin_close','file_bin_open','file_bin_position','file_bin_read_byte','file_bin_rewrite','file_bin_seek','file_bin_size','file_bin_write_byte','file_copy','file_delete',
+ 'file_exists','file_find_close','file_find_first','file_find_next','file_rename','file_text_close','file_text_eof','file_text_eoln','file_text_open_append','file_text_open_from_string','file_text_open_read',
+ 'file_text_open_write','file_text_read_real','file_text_read_string','file_text_readln','file_text_write_real','file_text_write_string','file_text_writeln','filename_change_ext','filename_dir','filename_drive',
+ 'filename_ext','filename_name','filename_path','floor','font_add','font_add_sprite','font_add_sprite_ext','font_delete','font_exists','font_get_bold','font_get_first','font_get_fontname','font_get_italic',
+ 'font_get_last','font_get_name','font_get_size','font_get_texture','font_get_uvs','font_replace','font_replace_sprite','font_replace_sprite_ext','font_set_cache_size','frac','game_end','game_load',
+ 'game_load_buffer','game_restart','game_save','game_save_buffer','gamepad_axis_count','gamepad_axis_value','gamepad_button_check','gamepad_button_check_pressed','gamepad_button_check_released',
+ 'gamepad_button_count','gamepad_button_value','gamepad_get_axis_deadzone','gamepad_get_button_threshold','gamepad_get_description','gamepad_get_device_count','gamepad_is_connected','gamepad_is_supported',
+ 'gamepad_set_axis_deadzone','gamepad_set_button_threshold','gamepad_set_vibration','get_integer','get_integer_async','get_login_async','get_open_filename','get_open_filename_ext','get_save_filename',
+ 'get_save_filename_ext','get_string','get_string_async','get_timer','highscore_add','highscore_clear','highscore_name','highscore_value','http_get','http_get_file','http_post_string','iap_acquire',
+ 'iap_activate','iap_consume','iap_event_queue','iap_files_purchased','iap_is_downloaded','iap_is_purchased','iap_product_details','iap_product_files','iap_product_status','iap_restore_all','iap_status',
+ 'iap_store_status','immersion_play_effect','immersion_stop','ini_close','ini_key_delete','ini_key_exists','ini_open','ini_open_from_string','ini_read_real','ini_read_string','ini_section_delete',
+ 'ini_section_exists','ini_write_real','ini_write_string','instance_activate_all','instance_activate_object','instance_activate_region','instance_change','instance_copy','instance_create',
+ 'instance_deactivate_all','instance_deactivate_object','instance_deactivate_region','instance_destroy','instance_exists','instance_find','instance_furthest','instance_nearest','instance_number',
+ 'instance_place','instance_position','io_clear','irandom','irandom_range','is_array','is_real','is_string','joystick_axes','joystick_buttons','joystick_check_button','joystick_direction','joystick_exists',
+ 'joystick_has_pov','joystick_name','joystick_pov','joystick_rpos','joystick_upos','joystick_vpos','joystick_xpos','joystick_ypos','joystick_zpos','json_decode','json_encode','keyboard_check',
+ 'keyboard_check_direct','keyboard_check_pressed','keyboard_check_released','keyboard_clear','keyboard_get_map','keyboard_get_numlock','keyboard_key_press','keyboard_key_release','keyboard_set_map',
+ 'keyboard_set_numlock','keyboard_unset_map','lengthdir_x','lengthdir_y','lerp','ln','log10','log2','logn','make_color_hsv','make_color_rgb','math_set_epsilon','matrix_build','matrix_get','matrix_multiply',
+ 'matrix_set','max','md5_file','md5_string_unicode','md5_string_utf8','mean','median','merge_color','message_caption','min','motion_add','motion_set','mouse_check_button','mouse_check_button_pressed',
+ 'mouse_check_button_released','mouse_clear','mouse_wheel_down','mouse_wheel_up','move_bounce','move_bounce_all','move_bounce_solid','move_contact','move_contact_all','move_contact_solid','move_outside_all',
+ 'move_outside_solid','move_random','move_snap','move_towards_point','move_wrap','mp_grid_add_cell','mp_grid_add_instances','mp_grid_add_rectangle','mp_grid_clear_all','mp_grid_clear_cell',
+ 'mp_grid_clear_rectangle','mp_grid_create','mp_grid_destroy','mp_grid_draw','mp_grid_path','mp_linear_path','mp_linear_path_object','mp_linear_step','mp_linear_step_object','mp_potential_path',
+ 'mp_potential_path_object','mp_potential_settings','mp_potential_step','mp_potential_step_object','network_connect','network_connect_raw','network_create_server','network_create_socket','network_destroy',
+ 'network_destroy','network_resolve','network_send_broadcast','network_send_packet','network_send_raw','network_send_udp','network_set_timeout','object_exists','object_get_depth','object_get_mask',
+ 'object_get_name','object_get_parent','object_get_persistent','object_get_physics','object_get_solid','object_get_sprite','object_get_visible','object_is_ancestor','object_set_depth','object_set_mask',
+ 'object_set_persistent','object_set_solid','object_set_sprite','object_set_visible','ord','os_get_config','os_get_info','os_get_language','os_is_network_connected','os_is_paused','os_lock_orientation',
+ 'os_powersave_enable','parameter_count','parameter_string','part_emitter_burst','part_emitter_clear','part_emitter_create','part_emitter_destroy','part_emitter_destroy_all','part_emitter_exists',
+ 'part_emitter_region','part_emitter_stream','part_particles_clear','part_particles_count','part_particles_create','part_particles_create_color','part_system_automatic_draw','part_system_automatic_update',
+ 'part_system_clear','part_system_create','part_system_depth','part_system_destroy','part_system_draw_order','part_system_drawit','part_system_exists','part_system_position','part_system_update',
+ 'part_type_alpha','part_type_alpha1','part_type_alpha2','part_type_alpha3','part_type_blend','part_type_clear','part_type_color','part_type_color1','part_type_color2','part_type_color3','part_type_color_hsv',
+ 'part_type_color_mix','part_type_color_rgb','part_type_create','part_type_death','part_type_destroy','part_type_direction','part_type_exists','part_type_gravity','part_type_life','part_type_orientation',
+ 'part_type_scale','part_type_shape','part_type_size','part_type_speed','part_type_sprite','part_type_step','path_add','path_add_point','path_append','path_assign','path_change_point','path_clear_points',
+ 'path_delete','path_delete_point','path_duplicate','path_end','path_exists','path_flip','path_get_closed','path_get_kind','path_get_length','path_get_name','path_get_number','path_get_point_speed',
+ 'path_get_point_x','path_get_point_y','path_get_precision','path_get_speed','path_get_x','path_get_y','path_insert_point','path_mirror','path_rescale','path_reverse','path_rotate','path_set_closed',
+ 'path_set_kind','path_set_precision','path_shift','path_start','physics_apply_force','physics_apply_impulse','physics_apply_local_force','physics_apply_local_impulse','physics_apply_torque',
+ 'physics_draw_debug','physics_fixture_add_point','physics_fixture_bind','physics_fixture_bind_ext','physics_fixture_create','physics_fixture_delete','physics_fixture_set_angular_damping',
+ 'physics_fixture_set_awake','physics_fixture_set_box_shape','physics_fixture_set_circle_shape','physics_fixture_set_collision_group','physics_fixture_set_density','physics_fixture_set_edge_shape',
+ 'physics_fixture_set_friction','physics_fixture_set_kinematic','physics_fixture_set_linear_damping','physics_fixture_set_polygon_shape','physics_fixture_set_restitution','physics_fixture_set_sensor',
+ 'physics_get_density','physics_get_friction','physics_get_restitution','physics_joint_delete','physics_joint_distance_create','physics_joint_enable_motor','physics_joint_gear_create','physics_joint_get_value',
+ 'physics_joint_prismatic_create','physics_joint_pulley_create','physics_joint_revolute_create','physics_joint_set_value','physics_mass_properties','physics_pause_enable','physics_remove_fixture','physics_set_density',
+ 'physics_set_friction','physics_set_restitution','physics_test_overlap','physics_world_create','physics_world_draw_debug','physics_world_gravity','physics_world_update_iterations','physics_world_update_speed',
+ 'place_empty','place_free','place_meeting','place_snapped','playhaven_add_notification_badge','playhaven_hide_notification_badge','playhaven_position_notification_badge','playhaven_update_notification_badge',
+ 'pocketchange_display_reward','pocketchange_display_shop','point_direction','point_distance','point_distance_3d','position_change','position_destroy','position_empty','position_meeting','power','radtodeg','random',
+ 'random_get_seed','random_range','random_set_seed','randomize','real','room_add','room_assign','room_duplicate','room_exists','room_get_name','room_goto','room_goto_next','room_goto_previous','room_instance_add',
+ 'room_instance_clear','room_next','room_previous','room_restart','room_set_background','room_set_background_color','room_set_height','room_set_persistent','room_set_view','room_set_view_enabled','room_set_width',
+ 'room_tile_add','room_tile_add_ext','room_tile_clear','round','screen_save','screen_save_part','script_execute','script_exists','script_get_name','sha1_file','sha1_string_unicode','sha1_string_utf8','shader_enable_corner_id',
+ 'shader_get_sampler_index','shader_get_uniform','shader_is_compiled','shader_reset','shader_set','shader_set_uniform_f','shader_set_uniform_f_array','shader_set_uniform_i','shader_set_uniform_i_array',
+ 'shader_set_uniform_matrix','shader_set_uniform_matrix_array','shaders_are_supported','shop_leave_rating','show_debug_message','show_debug_overlay','show_error','show_message','show_message','show_message_async',
+ 'show_question','show_question_async','sign','sin','sound_add','sound_delete','sound_exists','sound_fade','sound_get_name','sound_global_volume','sound_isplaying','sound_loop','sound_play','sound_replace',
+ 'sound_stop','sound_stop_all','sound_volume','sprite_add','sprite_add_from_surface','sprite_assign','sprite_collision_mask','sprite_create_from_surface','sprite_delete','sprite_duplicate','sprite_exists',
+ 'sprite_get_bbox_bottom','sprite_get_bbox_left','sprite_get_bbox_right','sprite_get_bbox_top','sprite_get_height','sprite_get_name','sprite_get_number','sprite_get_texture','sprite_get_tpe','sprite_get_uvs',
+ 'sprite_get_width','sprite_get_xoffset','sprite_get_yoffset','sprite_merge','sprite_replace','sprite_save','sprite_save_strip','sprite_set_alpha_from_sprite','sprite_set_cache_size','sprite_set_cache_size_ext',
+ 'sprite_set_offset','sqr','sqrt','steam_activate_overlay','steam_clear_achievement','steam_create_leaderboard','steam_download_friends_scores','steam_download_scores','steam_download_scores_around_user',
+ 'steam_file_delete','steam_file_exists','steam_file_persisted','steam_file_read','steam_file_share','steam_file_size','steam_file_write','steam_file_write_file','steam_get_achievement','steam_get_persona_name',
+ 'steam_get_quota_free','steam_get_quota_total','steam_get_stat_avg_rate','steam_get_stat_float','steam_get_stat_int','steam_get_user_steam_id','steam_initialised','steam_is_cloud_enabled_for_account',
+ 'steam_is_cloud_enabled_for_app','steam_is_overlay_activated','steam_is_overlay_enabled','steam_is_screenshot_requested','steam_is_user_logged_on','steam_publish_workshop_file','steam_reset_all_stats',
+ 'steam_reset_all_stats_achievements','steam_send_screenshot','steam_set_achievement','steam_set_stat_avg_rate','steam_set_stat_float','steam_set_stat_int','steam_stats_ready','steam_upload_score',
+ 'steam_user_installed_dlc','steam_user_owns_dlc','string','string_byte_at','string_byte_length','string_char_at','string_copy','string_count','string_delete','string_digits','string_format','string_height',
+ 'string_height_ext','string_insert','string_length','string_letters','string_lettersdigits','string_lower','string_pos','string_repeat','string_replace','string_replace_all','string_set_byte_at','string_upper',
+ 'string_width','string_width_ext','surface_copy','surface_copy_part','surface_create','surface_create_ext','surface_exists','surface_free','surface_get_height','surface_get_texture','surface_get_width',
+ 'surface_getpixel','surface_getpixel_ext','surface_reset_target','surface_save','surface_save_part','surface_set_target','surface_set_target_ext','tan','texture_exists','texture_get_height','texture_get_texel_height',
+ 'texture_get_texel_width','texture_get_width','texture_set_blending','texture_set_interpolation','texture_set_interpolation_ext','texture_set_repeat','texture_set_repeat_ext','texture_set_stage','tile_add',
+ 'tile_delete','tile_delete_at','tile_exists','tile_find','tile_get_alpha','tile_get_background','tile_get_blend','tile_get_depth','tile_get_height','tile_get_left','tile_get_top','tile_get_visible','tile_get_width',
+ 'tile_get_x','tile_get_xscale','tile_get_y','tile_get_yscale','tile_layer_delete','tile_layer_delete_at','tile_layer_depth','tile_layer_find','tile_layer_hide','tile_layer_shift','tile_layer_show','tile_set_alpha',
+ 'tile_set_background','tile_set_blend','tile_set_depth','tile_set_position','tile_set_region','tile_set_scale','tile_set_visible','timeline_add','timeline_clear','timeline_delete','timeline_exists','timeline_get_name',
+ 'timeline_moment_clear','url_get_domain','url_open','url_open_ext','url_open_full','vertex_argb','vertex_begin','vertex_colour','vertex_create_buffer','vertex_create_buffer_ext','vertex_delete_buffer','vertex_end',
+ 'vertex_float1','vertex_float2','vertex_float3','vertex_float4','vertex_format_add_colour','vertex_format_add_custom','vertex_format_add_normal','vertex_format_add_position','vertex_format_add_position_3d',
+ 'vertex_format_add_textcoord','vertex_format_begin','vertex_format_end','vertex_freeze','vertex_normal','vertex_position','vertex_position_3d','vertex_submit','vertex_texcoord','vertex_ubyte4','virtual_key_add',
+ 'virtual_key_delete','virtual_key_hide','virtual_key_show','win8_appbar_add_element','win8_appbar_enable','win8_appbar_remove_element','win8_device_touchscreen_available','win8_license_initialize_sandbox',
+ 'win8_license_trial_version','win8_livetile_badge_clear','win8_livetile_badge_notification','win8_livetile_notification_begin','win8_livetile_notification_end','win8_livetile_notification_expiry',
+ 'win8_livetile_notification_image_add','win8_livetile_notification_secondary_begin','win8_livetile_notification_tag','win8_livetile_notification_text_add','win8_livetile_queue_enable','win8_livetile_tile_clear',
+ 'win8_livetile_tile_notification','win8_search_add_suggestions','win8_search_disable','win8_search_enable','win8_secondarytile_badge_notification','win8_secondarytile_delete','win8_secondarytile_pin',
+ 'win8_settingscharm_add_entry','win8_settingscharm_add_html_entry','win8_settingscharm_add_xaml_entry','win8_settingscharm_get_xaml_property','win8_settingscharm_remove_entry','win8_settingscharm_set_xaml_property',
+ 'win8_share_file','win8_share_image','win8_share_screenshot','win8_share_text','win8_share_url','window_center','window_get_caption','window_get_color','window_get_cursor','window_get_fullscreen','window_get_height',
+ 'window_get_width','window_get_x','window_get_y','window_handle','window_has_focus','window_mouse_get_x','window_mouse_get_y','window_mouse_set','window_set_caption','window_set_color','window_set_cursor',
+ 'window_set_fullscreen','window_set_position','window_set_rectangle','window_set_size','window_view_mouse_get_x','window_view_mouse_get_y','window_views_mouse_get_x','window_views_mouse_get_y',
+ 'winphone_license_trial_version','winphone_tile_back_content','winphone_tile_back_content_wide','winphone_tile_back_image','winphone_tile_back_image_wide','winphone_tile_back_title','winphone_tile_background_color',
+ 'winphone_tile_count','winphone_tile_cycle_images','winphone_tile_front_image','winphone_tile_front_image_small','winphone_tile_front_image_wide','winphone_tile_icon_image','winphone_tile_small_background_image',
+ 'winphone_tile_small_icon_image','winphone_tile_title','winphone_tile_wide_content','zip_unzip'
),
- // functions
+
+ // Constants
3 => array(
- // Computing things
- 'random','choose','abs','sign','round','floor','ceil','frac','sqrt','sqr','power','exp','ln',
- 'log2','log10','logn','sin','cos','tan','arcsin','arccos','arctan','arctan2','degtorad',
- 'radtodeg','min','max','mean','median','point_distance','point_direction','lengthdir_x',
- 'lengthdir_y','is_real','is_string',
- 'chr','ord','real','string','string_format','string_length','string_pos','string_copy',
- 'string_char_at','string_delete','string_insert','string_replace','string_replace_all',
- 'string_count','string_lower','string_upper','string_repeat','string_letters','string_digits',
- 'string_lettersdigits','clipboard_has_text','clipboard_get_text','clipboard_set_text',
- 'date_current_datetime','date_current_date','date_current_time','date_create_datetime',
- 'date_create_date','date_create_time','date_valid_datetime','date_valid_date','date_valid_time',
- 'date_inc_year','date_inc_month','date_inc_week','date_inc_day','date_inc_hour',
- 'date_inc_minute','date_inc_second','date_get_year','date_get_month','date_get_week',
- 'date_get_day','date_get_hour', 'date_get_minute','date_get_second','date_get_weekday',
- 'date_get_day_of_year','date_get_hour_of_year','date_get_minute_of_year',
- 'date_get_second_of_year','date_year_span','date_month_span','date_week_span','date_day_span',
- 'date_hour_span','date_minute_span','date_second_span','date_compare_datetime',
- 'date_compare_date','date_compare_time','date_date_of','date_time_of','date_datetime_string',
- 'date_date_string','date_time_string','date_days_in_month','date_days_in_year','date_leap_year',
- 'date_is_today',
- // Game play
- 'motion_set','motion_add','place_free','place_empty','place_meeting','place_snapped',
- 'move_random','move_snap','move_wrap','move_towards_point','move_bounce_solid','move_bounce_all',
- 'move_contact_solid','move_contact_all','move_outside_solid','move_outside_all',
- 'distance_to_point','distance_to_object','position_empty','position_meeting',
- 'path_start','path_end',
- 'mp_linear_step','mp_linear_step_object','mp_potential_step','mp_potential_step_object',
- 'mp_potential_settings','mp_linear_path','mp_linear_path_object', 'mp_potential_path',
- 'mp_potential_path_object','mp_grid_create','mp_grid_destroy','mp_grid_clear_all',
- 'mp_grid_clear_cell','mp_grid_clear_rectangle','mp_grid_add_cell','mp_grid_add_rectangle',
- 'mp_grid_add_instances','mp_grid_path','mp_grid_draw',
- 'collision_point','collision_rectangle','collision_circle','collision_ellipse','collision_line',
- 'instance_find','instance_exists','instance_number','instance_position','instance_nearest',
- 'instance_furthest','instance_place','instance_create','instance_copy','instance_destroy',
- 'instance_change','position_destroy','position_change',
- 'instance_deactivate_all','instance_deactivate_object','instance_deactivate_region',
- 'instance_activate_all','instance_activate_object','instance_activate_region',
- 'sleep',
- 'room_goto','room_goto_previous','room_goto_next','room_restart','room_previous','room_next',
- 'game_end','game_restart','game_save','game_load',
- 'event_perform', 'event_perform_object','event_user','event_inherited',
- 'show_debug_message','variable_global_exists','variable_local_exists','variable_global_get',
- 'variable_global_array_get','variable_global_array2_get','variable_local_get',
- 'variable_local_array_get','variable_local_array2_get','variable_global_set',
- 'variable_global_array_set','variable_global_array2_set','variable_local_set',
- 'variable_local_array_set','variable_local_array2_set','set_program_priority',
- // User interaction
- 'keyboard_set_map','keyboard_get_map','keyboard_unset_map','keyboard_check',
- 'keyboard_check_pressed','keyboard_check_released','keyboard_check_direct',
- 'keyboard_get_numlock','keyboard_set_numlock','keyboard_key_press','keyboard_key_release',
- 'keyboard_clear','io_clear','io_handle','keyboard_wait',
- 'mouse_check_button','mouse_check_button_pressed','mouse_check_button_released','mouse_clear',
- 'mouse_wait',
- 'joystick_exists','joystick_name','joystick_axes','joystick_buttons','joystick_has_pov',
- 'joystick_direction','joystick_check_button','joystick_xpos','joystick_ypos','joystick_zpos',
- 'joystick_rpos','joystick_upos','joystick_vpos','joystick_pov',
- // Game Graphics
- 'draw_sprite','draw_sprite_stretched','draw_sprite_tiled','draw_sprite_part','draw_background',
- 'draw_background_stretched','draw_background_tiled','draw_background_part','draw_sprite_ext',
- 'draw_sprite_stretched_ext','draw_sprite_tiled_ext','draw_sprite_part_ext','draw_sprite_general',
- 'draw_background_ext','draw_background_stretched_ext','draw_background_tiled_ext',
- 'draw_background_part_ext','draw_background_general',
- 'draw_clear','draw_clear_alpha','draw_point','draw_line','draw_rectangle','draw_roundrect',
- 'draw_triangle','draw_circle','draw_ellipse','draw_arrow','draw_button','draw_path',
- 'draw_healthbar','draw_set_color','draw_set_alpha','draw_get_color','draw_get_alpha',
- 'make_color_rgb','make_color_hsv','color_get_red','color_get_green','color_get_blue',
- 'color_get_hue','color_get_saturation','color_get_value','merge_color','draw_getpixel',
- 'screen_save','screen_save_part',
- 'draw_set_font','draw_set_halign','draw_set_valign','draw_text','draw_text_ext','string_width',
- 'string_height','string_width_ext','string_height_ext','draw_text_transformed',
- 'draw_text_ext_transformed','draw_text_color','draw_text_ext_color',
- 'draw_text_transformed_color','draw_text_ext_transformed_color',
- 'draw_point_color','draw_line_color','draw_rectangle_color','draw_roundrect_color',
- 'draw_triangle_color','draw_circle_color','draw_ellipse_color','draw_primitive_begin',
- 'draw_vertex','draw_vertex_color','draw_primitive_end','sprite_get_texture',
- 'background_get_texture','texture_preload','texture_set_priority',
- 'texture_get_width','texture_get_height','draw_primitive_begin_texture','draw_vertex_texture',
- 'draw_vertex_texture_color','texture_set_interpolation',
- 'texture_set_blending','texture_set_repeat','draw_set_blend_mode','draw_set_blend_mode_ext',
- 'surface_create','surface_free','surface_exists','surface_get_width','surface_get_height',
- 'surface_get_texture','surface_set_target','surface_reset_target','surface_getpixel',
- 'surface_save','surface_save_part','draw_surface','draw_surface_stretched','draw_surface_tiled',
- 'draw_surface_part','draw_surface_ext','draw_surface_stretched_ext','draw_surface_tiled_ext',
- 'draw_surface_part_ext','draw_surface_general','surface_copy','surface_copy_part',
- 'tile_add','tile_delete','tile_exists','tile_get_x','tile_get_y','tile_get_left','tile_get_top',
- 'tile_get_width','tile_get_height','tile_get_depth','tile_get_visible','tile_get_xscale',
- 'tile_get_yscale','tile_get_background','tile_get_blend','tile_get_alpha','tile_set_position',
- 'tile_set_region','tile_set_background','tile_set_visible','tile_set_depth','tile_set_scale',
- 'tile_set_blend','tile_set_alpha','tile_layer_hide','tile_layer_show','tile_layer_delete',
- 'tile_layer_shift','tile_layer_find','tile_layer_delete_at','tile_layer_depth',
- 'display_get_width','display_get_height','display_get_colordepth','display_get_frequency',
- 'display_set_size','display_set_colordepth','display_set_frequency','display_set_all',
- 'display_test_all','display_reset','display_mouse_get_x','display_mouse_get_y','display_mouse_set',
- 'window_set_visible','window_get_visible','window_set_fullscreen','window_get_fullscreen',
- 'window_set_showborder','window_get_showborder','window_set_showicons','window_get_showicons',
- 'window_set_stayontop','window_get_stayontop','window_set_sizeable','window_get_sizeable',
- 'window_set_caption','window_get_caption','window_set_cursor', 'window_get_cursor',
- 'window_set_color','window_get_color','window_set_region_scale','window_get_region_scale',
- 'window_set_position','window_set_size','window_set_rectangle','window_center','window_default',
- 'window_get_x','window_get_y','window_get_width','window_get_height','window_mouse_get_x',
- 'window_mouse_get_y','window_mouse_set',
- 'window_set_region_size','window_get_region_width','window_get_region_height',
- 'window_view_mouse_get_x','window_view_mouse_get_y','window_view_mouse_set',
- 'window_views_mouse_get_x','window_views_mouse_get_y','window_views_mouse_set',
- 'screen_redraw','screen_refresh','set_automatic_draw','set_synchronization','screen_wait_vsync',
- // Sound and music)
- 'sound_play','sound_loop','sound_stop','sound_stop_all','sound_isplaying','sound_volume',
- 'sound_global_volume','sound_fade','sound_pan','sound_background_tempo','sound_set_search_directory',
- 'sound_effect_set','sound_effect_chorus','sound_effect_echo', 'sound_effect_flanger',
- 'sound_effect_gargle','sound_effect_reverb','sound_effect_compressor','sound_effect_equalizer',
- 'sound_3d_set_sound_position','sound_3d_set_sound_velocity','sound_3d_set_sound_distance',
- 'sound_3d_set_sound_cone',
- 'cd_init','cd_present','cd_number','cd_playing','cd_paused','cd_track','cd_length',
- 'cd_track_length','cd_position','cd_track_position','cd_play','cd_stop','cd_pause','cd_resume',
- 'cd_set_position','cd_set_track_position','cd_open_door','cd_close_door','MCI_command',
- // Splash screens, highscores, and other pop-ups
- 'show_text','show_image','show_video','show_info','load_info',
- 'show_message','show_message_ext','show_question','get_integer','get_string',
- 'message_background','message_alpha','message_button','message_text_font','message_button_font',
- 'message_input_font','message_mouse_color','message_input_color','message_caption',
- 'message_position','message_size','show_menu','show_menu_pos','get_color','get_open_filename',
- 'get_save_filename','get_directory','get_directory_alt','show_error',
- 'highscore_show','highscore_set_background','highscore_set_border','highscore_set_font',
- 'highscore_set_colors','highscore_set_strings','highscore_show_ext','highscore_clear',
- 'highscore_add','highscore_add_current','highscore_value','highscore_name','draw_highscore',
- // Resources
- 'sprite_exists','sprite_get_name','sprite_get_number','sprite_get_width','sprite_get_height',
- 'sprite_get_transparent','sprite_get_smooth','sprite_get_preload','sprite_get_xoffset',
- 'sprite_get_yoffset','sprite_get_bbox_left','sprite_get_bbox_right','sprite_get_bbox_top',
- 'sprite_get_bbox_bottom','sprite_get_bbox_mode','sprite_get_precise',
- 'sound_exists','sound_get_name','sound_get_kind','sound_get_preload','sound_discard',
- 'sound_restore',
- 'background_exists','background_get_name','background_get_width','background_get_height',
- 'background_get_transparent','background_get_smooth','background_get_preload',
- 'font_exists','font_get_name','font_get_fontname','font_get_bold','font_get_italic',
- 'font_get_first','font_get_last',
- 'path_exists','path_get_name','path_get_length','path_get_kind','path_get_closed',
- 'path_get_precision','path_get_number','path_get_point_x','path_get_point_y',
- 'path_get_point_speed','path_get_x','path_get_y','path_get_speed',
- 'script_exists','script_get_name','script_get_text',
- 'timeline_exists','timeline_get_name',
- 'object_exists','object_get_name','object_get_sprite','object_get_solid','object_get_visible',
- 'object_get_depth','object_get_persistent','object_get_mask','object_get_parent',
- 'object_is_ancestor',
- 'room_exists','room_get_name',
- // Changing resources
- 'sprite_set_offset','sprite_set_bbox_mode','sprite_set_bbox','sprite_set_precise',
- 'sprite_duplicate','sprite_assign','sprite_merge','sprite_add','sprite_replace',
- 'sprite_create_from_screen','sprite_add_from_screen','sprite_create_from_surface',
- 'sprite_add_from_surface','sprite_delete','sprite_set_alpha_from_sprite',
- 'sound_add','sound_replace','sound_delete',
- 'background_duplicate','background_assign','background_add','background_replace',
- 'background_create_color','background_create_gradient','background_create_from_screen',
- 'background_create_from_surface','background_delete','background_set_alpha_from_background',
- 'font_add','font_add_sprite','font_replace_sprite','font_delete',
- 'path_set_kind','path_set_closed','path_set_precision','path_add','path_delete','path_duplicate',
- 'path_assign','path_append','path_add_point','path_insert_point','path_change_point',
- 'path_delete_point','path_clear_points','path_reverse','path_mirror','path_flip','path_rotate',
- 'path_scale','path_shift',
- 'execute_string','execute_file','script_execute',
- 'timeline_add','timeline_delete','timeline_moment_add','timeline_moment_clear',
- 'object_set_sprite','object_set_solid','object_set_visible','object_set_depth',
- 'object_set_persistent','object_set_mask','object_set_parent','object_add','object_delete',
- 'object_event_add','object_event_clear',
- 'room_set_width','room_set_height','room_set_caption','room_set_persistent','room_set_code',
- 'room_set_background_color','room_set_background','room_set_view','room_set_view_enabled',
- 'room_add','room_duplicate','room_assign','room_instance_add','room_instance_clear',
- 'room_tile_add','room_tile_add_ext','room_tile_clear',
- // Files, registry and executing programs
- 'file_text_open_read','file_text_open_write','file_text_open_append','file_text_close',
- 'file_text_write_string','file_text_write_real','file_text_writeln','file_text_read_string',
- 'file_text_read_real','file_text_readln','file_text_eof','file_exists','file_delete',
- 'file_rename','file_copy','directory_exists','directory_create','file_find_first',
- 'file_find_next','file_find_close','file_attributes', 'filename_name','filename_path',
- 'filename_dir','filename_drive','filename_ext','filename_change_ext','file_bin_open',
- 'file_bin_rewrite','file_bin_close','file_bin_size','file_bin_position','file_bin_seek',
- 'file_bin_write_byte','file_bin_read_byte','parameter_count','parameter_string',
- 'environment_get_variable',
- 'registry_write_string','registry_write_real','registry_read_string','registry_read_real',
- 'registry_exists','registry_write_string_ext','registry_write_real_ext',
- 'registry_read_string_ext','registry_read_real_ext','registry_exists_ext','registry_set_root',
- 'ini_open','ini_close','ini_read_string','ini_read_real','ini_write_string','ini_write_real',
- 'ini_key_exists','ini_section_exists','ini_key_delete','ini_section_delete',
- 'execute_program','execute_shell',
- // Data structures
- 'ds_stack_create','ds_stack_destroy','ds_stack_clear','ds_stack_size','ds_stack_empty',
- 'ds_stack_push','ds_stack_pop','ds_stack_top',
- 'ds_queue_create','ds_queue_destroy','ds_queue_clear','ds_queue_size','ds_queue_empty',
- 'ds_queue_enqueue','ds_queue_dequeue','ds_queue_head','ds_queue_tail',
- 'ds_list_create','ds_list_destroy','ds_list_clear','ds_list_size','ds_list_empty','ds_list_add',
- 'ds_list_insert','ds_list_replace','ds_list_delete','ds_list_find_index','ds_list_find_value',
- 'ds_list_sort',
- 'ds_map_create','ds_map_destroy','ds_map_clear','ds_map_size','ds_map_empty','ds_map_add',
- 'ds_map_replace','ds_map_delete','ds_map_exists','ds_map_find_value','ds_map_find_previous',
- 'ds_map_find_next','ds_map_find_first','ds_map_find_last',
- 'ds_priority_create','ds_priority_destroy','ds_priority_clear','ds_priority_size',
- 'ds_priority_empty','ds_priority_add','ds_priority_change_priority','ds_priority_find_priority',
- 'ds_priority_delete_value','ds_priority_delete_min','ds_priority_find_min',
- 'ds_priority_delete_max','ds_priority_find_max',
- 'ds_grid_create','ds_grid_destroy','ds_grid_resize','ds_grid_width','ds_grid_height',
- 'ds_grid_clear','ds_grid_set','ds_grid_add','ds_grid_multiply','ds_grid_set_region',
- 'ds_grid_add_region','ds_grid_multiply_region','ds_grid_set_disk','ds_grid_add_disk',
- 'ds_grid_multiply_disk','ds_grid_get','ds_grid_get_sum','ds_grid_get_max','ds_grid_get_min',
- 'ds_grid_get_mean','ds_grid_get_disk_sum','ds_grid_get_disk_min','ds_grid_get_disk_max',
- 'ds_grid_get_disk_mean','ds_grid_value_exists','ds_grid_value_x','ds_grid_value_y',
- 'ds_grid_value_disk_exists','ds_grid_value_disk_x','ds_grid_value_disk_y',
- // Creating particles
- 'effect_create_below','effect_create_above','effect_clear',
- 'part_type_create','part_type_destroy','part_type_exists','part_type_clear','part_type_shape',
- 'part_type_sprite','part_type_size','part_type_scale',
- 'part_type_orientation','part_type_color1','part_type_color2','part_type_color3',
- 'part_type_color_mix','part_type_color_rgb','part_type_color_hsv',
- 'part_type_alpha1','part_type_alpha2','part_type_alpha3','part_type_blend','part_type_life',
- 'part_type_step','part_type_death','part_type_speed','part_type_direction','part_type_gravity',
- 'part_system_create','part_system_destroy','part_system_exists','part_system_clear',
- 'part_system_draw_order','part_system_depth','part_system_position',
- 'part_system_automatic_update','part_system_automatic_draw','part_system_update',
- 'part_system_drawit','part_particles_create','part_particles_create_color',
- 'part_particles_clear','part_particles_count',
- 'part_emitter_create','part_emitter_destroy','part_emitter_destroy_all','part_emitter_exists',
- 'part_emitter_clear','part_emitter_region','part_emitter_burst','part_emitter_stream',
- 'part_attractor_create','part_attractor_destroy','part_attractor_destroy_all',
- 'part_attractor_exists','part_attractor_clear','part_attractor_position','part_attractor_force',
- 'part_destroyer_create','part_destroyer_destroy','part_destroyer_destroy_all',
- 'part_destroyer_exists','part_destroyer_clear','part_destroyer_region',
- 'part_deflector_create','part_deflector_destroy','part_deflector_destroy_all',
- 'part_deflector_exists','part_deflector_clear','part_deflector_region','part_deflector_kind',
- 'part_deflector_friction',
- 'part_changer_create','part_changer_destroy','part_changer_destroy_all','part_changer_exists',
- 'part_changer_clear','part_changer_region','part_changer_types','part_changer_kind',
- // Multiplayer games
- 'mplay_init_ipx','mplay_init_tcpip','mplay_init_modem','mplay_init_serial',
- 'mplay_connect_status','mplay_end','mplay_ipaddress',
- 'mplay_session_create','mplay_session_find','mplay_session_name','mplay_session_join',
- 'mplay_session_mode','mplay_session_status','mplay_session_end',
- 'mplay_player_find','mplay_player_name','mplay_player_id',
- 'mplay_data_write','mplay_data_read','mplay_data_mode',
- 'mplay_message_send','mplay_message_send_guaranteed','mplay_message_receive','mplay_message_id',
- 'mplay_message_value','mplay_message_player','mplay_message_name','mplay_message_count',
- 'mplay_message_clear',
- // Using DLL's
- 'external_define','external_call','external_free','window_handle',
- // 3D Graphics
- 'd3d_start','d3d_end','d3d_set_hidden','d3d_set_perspective',
- 'd3d_set_depth',
- 'd3d_primitive_begin','d3d_vertex','d3d_vertex_color','d3d_primitive_end',
- 'd3d_primitive_begin_texture','d3d_vertex_texture','d3d_vertex_texture_color','d3d_set_culling',
- 'd3d_draw_block','d3d_draw_cylinder','d3d_draw_cone','d3d_draw_ellipsoid','d3d_draw_wall',
- 'd3d_draw_floor',
- 'd3d_set_projection','d3d_set_projection_ext','d3d_set_projection_ortho',
- 'd3d_set_projection_perspective',
- 'd3d_transform_set_identity','d3d_transform_set_translation','d3d_transform_set_scaling',
- 'd3d_transform_set_rotation_x','d3d_transform_set_rotation_y','d3d_transform_set_rotation_z',
- 'd3d_transform_set_rotation_axis','d3d_transform_add_translation','d3d_transform_add_scaling',
- 'd3d_transform_add_rotation_x','d3d_transform_add_rotation_y','d3d_transform_add_rotation_z',
- 'd3d_transform_add_rotation_axis','d3d_transform_stack_clear','d3d_transform_stack_empty',
- 'd3d_transform_stack_push','d3d_transform_stack_pop','d3d_transform_stack_top',
- 'd3d_transform_stack_discard',
- 'd3d_set_fog',
- 'd3d_set_lighting','d3d_set_shading','d3d_light_define_direction','d3d_light_define_point',
- 'd3d_light_enable','d3d_vertex_normal','d3d_vertex_normal_color','d3d_vertex_normal_texture',
- 'd3d_vertex_normal_texture_color',
- 'd3d_model_create','d3d_model_destroy','d3d_model_clear','d3d_model_save','d3d_model_load',
- 'd3d_model_draw','d3d_model_primitive_begin','d3d_model_vertex','d3d_model_vertex_color',
- 'd3d_model_vertex_texture','d3d_model_vertex_texture_color','d3d_model_vertex_normal',
- 'd3d_model_vertex_normal_color','d3d_model_vertex_normal_texture',
- 'd3d_model_vertex_normal_texture_color','d3d_model_primitive_end','d3d_model_block',
- 'd3d_model_cylinder','d3d_model_cone','d3d_model_ellipsoid','d3d_model_wall','d3d_model_floor'
+ 'ANSI_CHARSET','ARABIC_CHARSET','BALTIC_CHARSET','CHINESEBIG5_CHARSET','DEFAULT_CHARSET','EASTEUROPE_CHARSET','GB2312_CHARSET','GREEK_CHARSET','HANGEUL_CHARSET','HEBREW_CHARSET','JOHAB_CHARSET',
+ 'MAC_CHARSET','OEM_CHARSET','RUSSIAN_CHARSET','SHIFTJIS_CHARSET','SYMBOL_CHARSET','THAI_CHARSET','TURKISH_CHARSET','VIETNAMESE_CHARSET','achievement_achievement_info','achievement_challenge_completed',
+ 'achievement_challenge_completed_by_remote','achievement_challenge_launched','achievement_challenge_list_received','achievement_challenge_received','achievement_filter_all_players',
+ 'achievement_filter_friends_only','achievement_friends_info','achievement_leaderboard_info','achievement_our_info','achievement_pic_loaded','achievement_player_info','achievement_purchase_info',
+ 'achievement_show_achievement','achievement_show_bank','achievement_show_friend_picker','achievement_show_leaderboard','achievement_show_profile','achievement_show_purchase_prompt','achievement_show_ui',
+ 'achievement_type_achievement_challenge','achievement_type_score_challenge','all','asset_background','asset_font','asset_object','asset_path','asset_room','asset_script','asset_sound','asset_sprite',
+ 'asset_timeline','asset_unknown','audio_falloff_exponent_distance','audio_falloff_exponent_distance_clamped','audio_falloff_inverse_distance','audio_falloff_inverse_distance_clamped',
+ 'audio_falloff_linear_distance','audio_falloff_linear_distance_clamped','audio_falloff_none','audio_new_system','audio_old_system','bm_add','bm_dest_alpha','bm_dest_color','bm_inv_dest_alpha',
+ 'bm_inv_dest_color','bm_inv_src_alpha','bm_inv_src_color','bm_max','bm_normal','bm_one','bm_src_alpha','bm_src_alpha_sat','bm_src_color','bm_subtract','bm_zero','browser_chrome',
+ 'browser_firefox','browser_ie','browser_ie_mobile','browser_not_a_browser','browser_opera','browser_safari','browser_safari_mobile','browser_tizen','browser_unknown','browser_windows_store','buffer_bool',
+ 'buffer_f16','buffer_f32','buffer_f64','buffer_fast','buffer_fixed','buffer_generalerror','buffer_grow','buffer_invalidtype','buffer_outofbounds','buffer_outofspace','buffer_s16','buffer_s32','buffer_s8',
+ 'buffer_seek_end','buffer_seek_relative','buffer_seek_start','buffer_string','buffer_u16','buffer_u32','buffer_u8','buffer_vbuffer','buffer_wrap','button_type','c_aqua','c_black','c_blue','c_dkgray',
+ 'c_fuchsia','c_gray','c_green','c_lime','c_ltgray','c_maroon','c_navy','c_olive','c_orange','c_purple','c_red','c_silver','c_teal','c_white','c_yellow','cr_appstart','cr_arrow','cr_beam','cr_cross',
+ 'cr_default','cr_drag','cr_handpoint','cr_help','cr_hourglass','cr_hsplit','cr_multidrag','cr_no','cr_nodrop','cr_none','cr_size_all','cr_size_nesw','cr_size_ns','cr_size_nwse','cr_size_we','cr_sqlwait',
+ 'cr_uparrow','cr_vsplit','device_emulator','device_ios_ipad','device_ios_ipad_retina','device_ios_iphone','device_ios_iphone5','device_ios_iphone_retina','device_ios_unknown','device_tablet','display_landscape',
+ 'display_landscape_flipped','display_portrait','display_portrait_flipped','dll_cdecl','dll_stdcall','ds_type_grid','ds_type_list','ds_type_map','ds_type_priority','ds_type_queue','ds_type_stack','e','ef_cloud',
+ 'ef_ellipse','ef_explosion','ef_firework','ef_flare','ef_rain','ef_ring','ef_smoke','ef_smokeup','ef_snow','ef_spark','ef_star','ev_alarm','ev_animation_end','ev_boundary','ev_close_button','ev_collision',
+ 'ev_create','ev_destroy','ev_draw','ev_end_of_path','ev_game_end','ev_game_start','ev_global_left_button','ev_global_left_press','ev_global_left_release','ev_global_middle_button','ev_global_middle_press',
+ 'ev_global_middle_release','ev_global_press','ev_global_release','ev_global_right_button','ev_global_right_press','ev_global_right_release','ev_gui','ev_joystick1_button1','ev_joystick1_button2',
+ 'ev_joystick1_button3','ev_joystick1_button4','ev_joystick1_button5','ev_joystick1_button6','ev_joystick1_button7','ev_joystick1_button8','ev_joystick1_down','ev_joystick1_left','ev_joystick1_right',
+ 'ev_joystick1_up','ev_joystick2_button1','ev_joystick2_button2','ev_joystick2_button3','ev_joystick2_button4','ev_joystick2_button5','ev_joystick2_button6','ev_joystick2_button7','ev_joystick2_button8',
+ 'ev_joystick2_down','ev_joystick2_left','ev_joystick2_right','ev_joystick2_up','ev_keyboard','ev_keypress','ev_keyrelease','ev_left_button','ev_left_press','ev_left_release','ev_middle_button',
+ 'ev_middle_press','ev_middle_release','ev_mouse','ev_mouse_enter','ev_mouse_leave','ev_mouse_wheel_down','ev_mouse_wheel_up','ev_no_button','ev_no_more_health','ev_no_more_lives','ev_other','ev_outside',
+ 'ev_right_button','ev_right_press','ev_right_release','ev_room_end','ev_room_start','ev_step','ev_step_begin','ev_step_end','ev_step_normal','ev_trigger','ev_user0','ev_user1','ev_user10','ev_user11',
+ 'ev_user12','ev_user13','ev_user14','ev_user15','ev_user2','ev_user3','ev_user4','ev_user5','ev_user6','ev_user7','ev_user8','ev_user9','fa_archive','fa_bottom','fa_center','fa_directory','fa_hidden',
+ 'fa_left','fa_middle','fa_readonly','fa_right','fa_sysfile','fa_top','fa_volumeid','false','gp_axislh','gp_axislv','gp_axisrh','gp_axisrv','gp_face1','gp_face2','gp_face3','gp_face4','gp_padd',
+ 'gp_padl','gp_padr','gp_padu','gp_select','gp_shoulderl','gp_shoulderlb','gp_shoulderr','gp_shoulderrb','gp_start','gp_stickl','gp_stickr','input_type','lb_disp_none','lb_disp_numeric','lb_disp_time_ms',
+ 'lb_disp_time_sec','lb_sort_ascending','lb_sort_descending','lb_sort_none','leaderboard_type_number','leaderboard_type_time_mins_secs','matrix_projection','matrix_view','matrix_world','mb_any',
+ 'mb_left','mb_middle','mb_none','mb_right','network_socket_bluetooth','network_socket_tcp','network_socket_udp','network_type_connect','network_type_data','network_type_disconnect',
+ 'of_challenge_lose','of_challenge_tie','of_challenge_win','os_android','os_ios','os_linux','os_macosx','os_psp','os_symbian','os_tizen','os_unknown','os_win32','os_win8native','os_windows','os_winphone',
+ 'ov_achievements','ov_community','ov_friends','ov_gamegroup','ov_players','ov_settings','phy_debug_render_aabb','phy_debug_render_collision_pairs','phy_debug_render_coms',
+ 'phy_debug_render_core_shapes','phy_debug_render_joints','phy_debug_render_obb','phy_debug_render_shapes','phy_joint_anchor_1_x','phy_joint_anchor_1_y','phy_joint_anchor_2_x','phy_joint_anchor_2_y',
+ 'phy_joint_angle','phy_joint_angle_limits','phy_joint_damping_ratio','phy_joint_frequency','phy_joint_length_1','phy_joint_length_2','phy_joint_lower_angle_limit','phy_joint_max_motor_force',
+ 'phy_joint_max_motor_torque','phy_joint_motor_force','phy_joint_motor_speed','phy_joint_motor_torque','phy_joint_reaction_force_x','phy_joint_reaction_force_y','phy_joint_reaction_torque','phy_joint_speed',
+ 'phy_joint_translation','phy_joint_upper_angle_limit','pi','pr_linelist','pr_linestrip','pr_pointlist','pr_trianglefan','pr_trianglelist','pr_trianglestrip','ps_change_all','ps_change_motion',
+ 'ps_change_shape','ps_deflect_horizontal','ps_deflect_vertical','ps_distr_gaussian','ps_distr_invgaussian','ps_distr_linear','ps_force_constant','ps_force_linear','ps_force_quadratic','ps_shape_diamond',
+ 'ps_shape_ellipse','ps_shape_line','ps_shape_rectangle','pt_shape_circle','pt_shape_cloud','pt_shape_disk','pt_shape_explosion','pt_shape_flare','pt_shape_line','pt_shape_pixel','pt_shape_ring',
+ 'pt_shape_smoke','pt_shape_snow','pt_shape_spark','pt_shape_sphere','pt_shape_square','pt_shape_star','se_chorus','se_compressor','se_echo','se_equalizer','se_flanger','se_gargle','se_none','se_reverb',
+ 'text_type','true','ty_real','ty_string','vertex_type_colour','vertex_type_float1','vertex_type_float2','vertex_type_float3','vertex_type_float4','vertex_type_ubyte4','vertex_usage_binormal',
+ 'vertex_usage_blendindices','vertex_usage_blendweight','vertex_usage_colour','vertex_usage_depth','vertex_usage_fog','vertex_usage_normal','vertex_usage_position','vertex_usage_psize','vertex_usage_sample',
+ 'vertex_usage_tagnet','vertex_usage_textcoord','vk_add','vk_alt','vk_anykey','vk_backspace','vk_control','vk_decimal','vk_delete','vk_divide','vk_down','vk_end','vk_enter','vk_escape','vk_f1','vk_f10',
+ 'vk_f11','vk_f12','vk_f2','vk_f3','vk_f4','vk_f5','vk_f6','vk_f7','vk_f8','vk_f9','vk_home','vk_insert','vk_lalt','vk_lcontrol','vk_left','vk_lshift','vk_multiply','vk_nokey','vk_numpad0','vk_numpad1',
+ 'vk_numpad2','vk_numpad3','vk_numpad4','vk_numpad5','vk_numpad6','vk_numpad7','vk_numpad8','vk_numpad9','vk_pagedown','vk_pageup','vk_pause','vk_printscreen','vk_ralt','vk_rcontrol','vk_return','vk_right',
+ 'vk_rshift','vk_shift','vk_space','vk_subtract','vk_tab','vk_up'
),
- // constants
+
+ // Keywords
4 => array(
- 'true', 'false', 'pi',
- 'ev_destroy','ev_step','ev_alarm','ev_keyboard','ev_mouse','ev_collision','ev_other','ev_draw',
- 'ev_keypress','ev_keyrelease','ev_left_button','ev_right_button','ev_middle_button',
- 'ev_no_button','ev_left_press','ev_right_press','ev_middle_press','ev_left_release',
- 'ev_right_release','ev_middle_release','ev_mouse_enter','ev_mouse_leave','ev_mouse_wheel_up',
- 'ev_mouse_wheel_down','ev_global_left_button','ev_global_right_button','ev_global_middle_button',
- 'ev_global_left_press','ev_global_right_press','ev_global_middle_press','ev_global_left_release',
- 'ev_global_right_release','ev_global_middle_release','ev_joystick1_left','ev_joystick1_right',
- 'ev_joystick1_up','ev_joystick1_down','ev_joystick1_button1','ev_joystick1_button2',
- 'ev_joystick1_button3','ev_joystick1_button4','ev_joystick1_button5','ev_joystick1_button6',
- 'ev_joystick1_button7','ev_joystick1_button8','ev_joystick2_left','ev_joystick2_right',
- 'ev_joystick2_up','ev_joystick2_down','ev_joystick2_button1','ev_joystick2_button2',
- 'ev_joystick2_button3','ev_joystick2_button4','ev_joystick2_button5','ev_joystick2_button6',
- 'ev_joystick2_button7','ev_joystick2_button8',
- 'ev_outside','ev_boundary','ev_game_start','ev_game_end','ev_room_start','ev_room_end',
- 'ev_no_more_lives','ev_no_more_health','ev_animation_end','ev_end_of_path','ev_user0','ev_user1',
- 'ev_user2','ev_user3','ev_user4','ev_user5','ev_user6','ev_user7','ev_user8','ev_user9',
- 'ev_user10','ev_user11','ev_user12','ev_user13','ev_user14','ev_user15','ev_step_normal',
- 'ev_step_begin','ev_step_end',
- 'vk_nokey','vk_anykey','vk_left','vk_right','vk_up','vk_down','vk_enter','vk_escape','vk_space',
- 'vk_shift','vk_control','vk_alt','vk_backspace','vk_tab','vk_home','vk_end','vk_delete',
- 'vk_insert','vk_pageup','vk_pagedown','vk_pause','vk_printscreen',
- 'vk_f1','vk_f2','vk_f3','vk_f4','vk_f5','vk_f6','vk_f7','vk_f8','vk_f9','vk_f10','vk_f11','vk_f12',
- 'vk_numpad0','vk_numpad1','vk_numpad2','vk_numpad3','vk_numpad4','vk_numpad5','vk_numpad6',
- 'vk_numpad7','vk_numpad8','vk_numpad9', 'vk_multiply','vk_divide','vk_add','vk_subtract',
- 'vk_decimal','vk_lshift','vk_lcontrol','vk_lalt','vk_rshift','vk_rcontrol','vk_ralt',
- 'c_aqua','c_black','c_blue','c_dkgray','c_fuchsia','c_gray','c_green','c_lime','c_ltgray',
- 'c_maroon','c_navy','c_olive','c_purple','c_red','c_silver','c_teal','c_white','c_yellow',
- 'fa_left', 'fa_center','fa_right','fa_top','fa_middle','fa_bottom',
- 'pr_pointlist','pr_linelist','pr_linestrip','pr_trianglelist','pr_trianglestrip',
- 'pr_trianglefan',
- 'cr_none','cr_arrow','cr_cross','cr_beam','cr_size_nesw','cr_size_ns','cr_size_nwse',
- 'cr_size_we','cr_uparrow','cr_hourglass','cr_drag','cr_nodrop','cr_hsplit','cr_vsplit',
- 'cr_multidrag','cr_sqlwait','cr_no','cr_appstart','cr_help','cr_handpoint','cr_size_all',
- 'se_chorus','se_echo','se_flanger','se_gargle','se_reverb','se_compressor','se_equalizer',
- 'fa_readonly','fa_hidden','fa_sysfile','fa_volumeid','fa_directory','fa_archive',
- 'pt_shape_pixel','pt_shape_disk','pt_shape_square','pt_shape_line','pt_shape_star',
- 'pt_shape_circle','pt_shape_ring','pt_shape_sphere','pt_shape_flare','pt_shape_spark',
- 'pt_shape_explosion','pt_shape_cloud','pt_shape_smoke','pt_shape_snow',
- 'ps_shape_rectangle','ps_shape_ellipse ','ps_shape_diamond','ps_shape_line',
- 'ps_distr_linear','ps_distr_gaussian','ps_force_constant','ps_force_linear','ps_force_quadratic',
- 'ps_deflect_horizontal', 'ps_deflect_vertical',
- 'ps_change_motion','ps_change_shape','ps_change_all'
- ),
+ 'if','while','do','until','exit','break','continue','for','switch','case','default',
+ 'else','then','begin','end','repeat','switch','var','globalvar','with','div','mod',
+ 'self','noone','other','all','global','local','return',
+ 'and','or','xor','not'
+ )
),
+
'SYMBOLS' => array(
- '(', ')', '{', '}', '[', ']',
- '&&', '||', '^^', '&', '|', '^',
- '<', '<=', '==', '!=', '>', '>=', '=',
- '<<', '>>',
- '+=', '-=', '*=', '/=',
- '+', '-', '*', '/',
- '!', '~', ',', ';'
- ),
+ // Angled brackets
+ 0 => array('{','}'),
+ // Other brackets
+ 1 => array('(',')','[',']'),
+ // Operators (NOTE: Operators and/or/not/xor are included in the keywords section. These are non-alphanumeric operators
+ 2 => array('&&', '||', '^^', '&', '|', '^',
+ '<', '<=', '==', '!=', '>', '>=', '=',
+ '<<', '>>',
+ '+=', '-=', '*=', '/=',
+ '+', '-', '*', '/',
+ '!', '~', ',', ';'
+ )),
'CASE_SENSITIVE' => array(
GESHI_COMMENTS => false,
1 => true,
@@ -452,33 +320,28 @@ $language_data = array (
),
'STYLES' => array(
'KEYWORDS' => array(
- 1 => 'font-weight: bold; color: #000000;',
- 2 => 'font-weight: bold; color: #000000;',
- 3 => 'color: navy;',
- 4 => 'color: #663300;',
- ),
+ 1 => 'color: #800000;',
+ 2 => 'color: #800000;',
+ 3 => 'color: #800000;',
+ 4 => 'color: #000080; font-weight: bold;'),
'COMMENTS' => array(
- 1 => 'font-style: italic; color: green;',
- 'MULTI' => 'font-style: italic; color: green;'
- ),
+ 1 => 'font-style: italic; color: #008000;',
+ 'MULTI' => 'font-style: italic; color: #008000;'),
'ESCAPE_CHAR' => array(
- 0 => 'color: #000099; font-weight: bold;'
- ),
+ 0 => ''),
'BRACKETS' => array(
- 0 => 'color: #000000;' //'color: #66cc66;'
- ),
+ 0 => 'color: #000080;'),
'STRINGS' => array(
- 0 => 'color: #ff0000;'
- ),
+ 0 => 'color: #0000FF;',
+ 1 => 'color: #0000FF;'),
'NUMBERS' => array(
- 0 => 'color: #cc66cc;'
- ),
+ 0 => 'color: #0000FF;'),
'METHODS' => array(
- 1 => 'color: #202020;'
- ),
+ 0 => 'color: #800000;'),
'SYMBOLS' => array(
- 0 => 'color: #66cc66; font-weight: bold;'
- ),
+ 0 => 'color: #000080; font-weight: bold;',
+ 1 => 'color: #000000;',
+ 2 => 'color: #000000;'),
'REGEXPS' => array(
),
'SCRIPT' => array(
@@ -502,5 +365,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php
index d8445eab..27a2a639 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gnuplot.php
@@ -4,7 +4,7 @@
* ----------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2008 Milian Wolff (http://milianw.de)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/07/07
*
* Gnuplot script language file for GeSHi.
@@ -292,5 +292,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/go.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/go.php
index 5b7a47db..7f1b825f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/go.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/go.php
@@ -4,7 +4,7 @@
* --------
* Author: Markus Jarderot (mizardx at gmail dot com)
* Copyright: (c) 2010 Markus Jarderot
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/05/20
*
* Go language file for GeSHi.
@@ -321,7 +321,7 @@ $language_data = array(
),
'STRINGS' => array(
0 => 'color: #0000ff;',
- 0 => 'color: #cc66cc;'
+ 0 => 'color: #cc66cc;' // FIXME: Duplicate array key
),
'NUMBERS' => array(
0 => 'color: #cc66cc;'
@@ -371,5 +371,3 @@ $language_data = array(
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/groovy.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/groovy.php
index 45290d2f..37fc8174 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/groovy.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/groovy.php
@@ -4,7 +4,7 @@
* ----------
* Author: Ivan F. Villanueva B. (geshi_groovy@artificialidea.com)
* Copyright: (c) 2006 Ivan F. Villanueva B.(http://www.artificialidea.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/04/29
*
* Groovy language file for GeSHi.
@@ -1007,5 +1007,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php
index ecc16341..97310df1 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/gwbasic.php
@@ -4,7 +4,7 @@
* ----------
* Author: José Gabriel Moya Yangüela (josemoya@gmail.com)
* Copyright: (c) 2010 José Gabriel Moya Yangüela (http://doc.apagada.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/01/30
*
* GwBasic language file for GeSHi.
@@ -149,5 +149,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php
index d3b494ed..6fdc2cec 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php
@@ -2,17 +2,17 @@
/*************************************************************************************
* haskell.php
* ----------
- * Author: Jason Dagit (dagit@codersbase.com) based on ocaml.php by Flaie (fireflaie@gmail.com)
+ * Author: Daniel Mlot (duplode_1 at yahoo dot com dot br)
+ * Based on haskell.php by Jason Dagit (dagit@codersbase.com), which was
+ * based on ocaml.php by Flaie (fireflaie@gmail.com).
* Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
- * Date Started: 2005/08/27
+ * Release Version: 1.0.8.12
+ * Date Started: 2014/05/12
*
* Haskell language file for GeSHi.
*
* CHANGES
* -------
- * 2005/08/27 (1.0.0)
- * - First Release
* 2013/09/28
* - Single quotes dropped from QUOTEMARKS to resolve <https://bugzilla.wikimedia.org/52509>.
* Change is local to SyntaxHighlight_GeSHi, made by Ori Livneh (ori@wikimedia.org), based
@@ -22,9 +22,6 @@
* Upstream patch (stalled since 2012):
* <http://sourceforge.net/p/geshi/bugs/219/>
*
- * TODO (updated 2005/08/27)
- * -------------------------
- *
*************************************************************************************
*
* This file is part of GeSHi.
@@ -66,7 +63,7 @@ $language_data = array (
'instance', 'let', 'in', 'module', 'newtype',
'qualified', 'type', 'where'
),
- /* define names of main librarys, so we can link to it */
+ /* define names of main libraries, so we can link to it */
2 => array(
'Foreign', 'Numeric', 'Prelude'
),
@@ -115,35 +112,34 @@ $language_data = array (
'interact', 'readFile', 'writeFile', 'appendFile',
'readIO', 'readLn', 'ioError', 'userError', 'catch'
),
- /* here Prelude Types */
+ /* Prelude types */
4 => array (
- 'Bool', 'Maybe', 'Either', 'Ord', 'Ordering',
- 'Char', 'String', 'Eq', 'Enum', 'Bounded',
+ 'Bool', 'Maybe', 'Either', 'Ordering',
+ 'Char', 'String',
'Int', 'Integer', 'Float', 'Double', 'Rational',
- 'Num', 'Real', 'Integral', 'Fractional',
- 'Floating', 'RealFrac', 'RealFloat', 'Monad',
- 'Functor', 'Show', 'ShowS', 'Read', 'ReadS',
- 'IO'
+ 'ShowS', 'ReadS',
+ 'IO', 'IOError', 'IOException'
),
- /* finally Prelude Exceptions */
+ /* Prelude classes */
5 => array (
- 'IOError', 'IOException'
+ 'Ord', 'Eq', 'Enum', 'Bounded',
+ 'Num', 'Real', 'Integral', 'Fractional',
+ 'Floating', 'RealFrac', 'RealFloat',
+ 'Monad', 'Functor',
+ 'Show', 'Read'
)
),
- /* highlighting symbols is really important in Haskell */
+ /* Most symbol combinations can be valid Haskell operators */
'SYMBOLS' => array(
- '|', '->', '<-', '@', '!', '::', '_', '~', '=', '?',
- '&&', '||', '==', '/=', '<', '<=', '>',
- '>=','+', '-', '*','/', '%', '**', '^', '^^',
- '>>=', '>>', '=<<', '$', '.', ',', '$!',
- '++', '!!'
+ '!', '@', '#', '$', '%', '&', '*', '-', '+', '=',
+ '^', '~', '|', '\\', '>', '<', ':', '?', '/'
),
'CASE_SENSITIVE' => array(
GESHI_COMMENTS => false,
- 1 => true,
- 2 => true, /* functions name are case seinsitive */
- 3 => true, /* types name too */
- 4 => true, /* finally exceptions too */
+ 1 => true, /* Haskell is a case sensitive language */
+ 2 => true,
+ 3 => true,
+ 4 => true,
5 => true
),
'STYLES' => array(
@@ -152,7 +148,7 @@ $language_data = array (
2 => 'color: #06c; font-weight: bold;', /* blue as well */
3 => 'font-weight: bold;', /* make the preduled functions bold */
4 => 'color: #cccc00; font-weight: bold;', /* give types a different bg */
- 5 => 'color: maroon;'
+ 5 => 'color: maroon; font-weight: bold;' /* similarly for classes */
),
'COMMENTS' => array(
1 => 'color: #5d478b; font-style: italic;',
@@ -193,7 +189,7 @@ $language_data = array (
/* link to Prelude types */
4 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}',
/* link to Prelude exceptions */
- 5 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}',
+ 5 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}'
),
'OOLANG' => false,
'OBJECT_SPLITTERS' => array(
@@ -206,5 +202,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haxe.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haxe.php
index 778637e2..17f8394b 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haxe.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haxe.php
@@ -6,7 +6,7 @@
* John Liao (colorhook@gmail.com)
* Copyright: (c) 2012 onthewings (http://www.onthewings.net/)
* 2010 colorhook (http://colorhook.com/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/10/05
*
* Haxe language file for GeSHi.
@@ -111,7 +111,6 @@ $language_data = array (
1 => 'color: #666666; font-style: italic;',
2 => 'color: #006699;',
3 => 'color: #008000; font-style: italic; font-weight: bold;',
- 3 => 'color: #008000; font-style: italic; font-weight: bold;',
'MULTI' => 'color: #666666; font-style: italic;',
),
'ESCAPE_CHAR' => array(
@@ -157,5 +156,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
),
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hicest.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hicest.php
index 78a2bc20..cc2c0172 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hicest.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hicest.php
@@ -4,7 +4,7 @@
* --------
* Author: Georg Petrich (spt@hicest.com)
* Copyright: (c) 2010 Georg Petrich (http://www.HicEst.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/03/15
*
* HicEst language file for GeSHi.
@@ -104,5 +104,3 @@ $language_data = array(
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php
index 7ba1a73c..bb461b14 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/hq9plus.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/10/31
*
* HQ9+ language file for GeSHi.
@@ -100,5 +100,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html4strict.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html4strict.php
index 97392fa8..1f01f68e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html4strict.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html4strict.php
@@ -4,7 +4,7 @@
* ---------------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/10
*
* HTML 4.01 strict language file for GeSHi.
@@ -186,5 +186,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html5.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html5.php
index 0d975594..04fb8203 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html5.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/html5.php
@@ -4,7 +4,7 @@
* ---------------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/10
*
* HTML 5 language file for GeSHi.
@@ -208,5 +208,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/icon.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/icon.php
index 06383ea5..eddc88bc 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/icon.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/icon.php
@@ -4,7 +4,7 @@
* --------
* Author: Matt Oates (mattoates@gmail.com)
* Copyright: (c) 2010 Matt Oates (http://mattoates.co.uk)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/04/24
*
* Icon language file for GeSHi.
@@ -208,5 +208,3 @@ $language_data = array(
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/idl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/idl.php
index 69bd14ff..0bdeb9ce 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/idl.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/idl.php
@@ -4,7 +4,7 @@
* -------
* Author: Cedric Bosdonnat (cedricbosdo@openoffice.org)
* Copyright: (c) 2006 Cedric Bosdonnat
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/08/20
*
* Unoidl language file for GeSHi.
@@ -119,5 +119,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ini.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ini.php
index 8e6ca76d..914ebdfe 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ini.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ini.php
@@ -4,7 +4,7 @@
* --------
* Author: deguix (cevo_deguix@yahoo.com.br)
* Copyright: (c) 2005 deguix
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/03/27
*
* INI language file for GeSHi.
@@ -44,8 +44,9 @@
$language_data = array (
'LANG_NAME' => 'INI',
- 'COMMENT_SINGLE' => array(0 => ';'),
+ 'COMMENT_SINGLE' => array(),
'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(0 => '/^\s*;.*?$/m'),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
'QUOTEMARKS' => array('"'),
'ESCAPE_CHAR' => '',
@@ -124,5 +125,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/inno.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/inno.php
index 1e2ee8be..5fde614b 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/inno.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/inno.php
@@ -4,7 +4,7 @@
* ----------
* Author: Thomas Klingler (hotline@theratech.de) based on delphi.php from J�rja Norbert (jnorbi@vipmail.hu)
* Copyright: (c) 2004 J�rja Norbert, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/07/29
*
* Inno Script language inkl. Delphi (Object Pascal) language file for GeSHi.
@@ -208,5 +208,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/intercal.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/intercal.php
index 3c81b81c..c68b9791 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/intercal.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/intercal.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/10/31
*
* INTERCAL language file for GeSHi.
@@ -118,5 +118,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/io.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/io.php
index 51fad43a..b57ab857 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/io.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/io.php
@@ -4,7 +4,7 @@
* -------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2006 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/09/23
*
* Io language file for GeSHi. Thanks to Johnathan Wright for the suggestion and help
@@ -134,5 +134,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ispfpanel.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ispfpanel.php
new file mode 100644
index 00000000..a0b0541b
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ispfpanel.php
@@ -0,0 +1,165 @@
+<?php
+/*************************************************************************************
+ * ispfpanel.php
+ * -------------
+ * Author: Ramesh Vishveshwar (ramesh.vishveshwar@gmail.com)
+ * Copyright: (c) 2012 Ramesh Vishveshwar (http://thecodeisclear.in)
+ * Release Version: 1.0.8.12
+ * Date Started: 2012/09/18
+ *
+ * ISPF Panel Definition (MVS) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2011/09/22 (1.0.0)
+ * - First Release
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ISPF Panel',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ // Panel Definition Statements
+ 1 => array(
+ ')CCSID',')PANEL',')ATTR',')ABC',')ABCINIT',')ABCPROC',')BODY',')MODEL',
+ ')AREA',')INIT',')REINIT',')PROC',')FIELD',')HELP',')LIST',')PNTS',')END'
+ ),
+ // File-Tailoring Skeletons
+ 2 => array (
+ ')DEFAULT',')BLANK', ')CM', ')DO', ')DOT', ')ELSE', ')ENDSEL',
+ ')ENDDO', ')ENDDOT', ')IF', ')IM', ')ITERATE', ')LEAVE', ')NOP', ')SEL',
+ ')SET', ')TB', ')TBA'
+ ),
+ // Control Variables
+ 3 => array (
+ '.ALARM','.ATTR','.ATTRCHAR','.AUTOSEL','.CSRPOS','.CSRROW','.CURSOR','.HELP',
+ '.HHELP','.KANA','.MSG','.NRET','.PFKEY','.RESP','.TRAIL','.ZVARS'
+ ),
+ // Keywords
+ 4 => array (
+ 'WINDOW','ALARM','ATTN','BARRIER','HILITE','CAPS',
+ 'CKBOX','CLEAR','CMD','COLOR','COMBO','CSRGRP','CUADYN',
+ 'SKIP','INTENS','AREA','EXTEND',
+ 'DESC','ASIS','VGET','VPUT','JUST','BATSCRD','BATSCRW',
+ 'BDBCS','BDISPMAX','BIT','BKGRND','BREDIMAX','PAD','PADC',
+ 'PAS','CHINESES','CHINESET','DANISH','DATAMOD','DDLIST',
+ 'DEPTH','DUMP','ENGLISH','ERROR','EXIT','EXPAND','FIELD',
+ 'FORMAT','FRENCH','GE','GERMAN','IMAGE','IND','TYPE',
+ 'ITALIAN','JAPANESE','KOREAN','LCOL','LEN','LIND','LISTBOX',
+ 'MODE','NEST','NOJUMP','NOKANA','NUMERIC','OUTLINE','PARM',
+ 'PGM','PORTUGESE','RADIO','RCOL','REP','RIND','ROWS',
+ 'SCALE','SCROLL','SFIHDR','SGERMAN','SIND','SPANISH',
+ 'UPPERENG','WIDTH'
+ ),
+ // Parameters
+ 5 => array (
+ 'ADDPOP','ALPHA','ALPHAB','DYNAMIC','SCRL',
+ 'CCSID','COMMAND','DSNAME','DSNAMEF','DSNAMEFM',
+ 'DSNAMEPQ','DSNAMEQ','EBCDIC','ENBLDUMP','ENUM',// 'EXTEND',
+ 'FI','FILEID','FRAME','GUI','GUISCRD','GUISCRW','HEX',
+ 'HIGH','IDATE','IN','INCLUDE','INPUT','ITIME','JDATE',
+ 'JSTD','KEYLIST','LANG','LEFT','LIST','LISTV','LISTVX',
+ 'LISTX','LMSG','LOGO','LOW','MIX','NAME','NAMEF','NB',
+ 'NEWAPPL','NEWPOOL','NOCHECK','NOLOGO','NON','NONBLANK',
+ 'NULLS','NUM','OFF','ON','OPT','OUT','OUTPUT','PANEL',
+ /* 'PGM',*/'PICT','PICTN','POSITION','TBDISPL','PROFILE',
+ 'QUERY','RANGE','REVERSE','RIGHT','SHARED','SMSG',
+ 'STDDATE','STDTIME','TERMSTAT','TERMTRAC','TEST',
+ 'TESTX','TEXT','TRACE','TRACEX','USCORE','USER',
+ 'USERMOD','WSCMD','WSCMDV'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(',')','=','&',',','*','#','+','&','%','_','-','@','!'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'BKGROUND' => 'background-color: #000000; color: #00FFFF;',
+ 'KEYWORDS' => array(
+ 1 => 'color: #FF0000;',
+ 2 => 'color: #21A502;',
+ 3 => 'color: #FF00FF;',
+ 4 => 'color: #876C00;',
+ 5 => 'color: #00FF00;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #002EB8; font-style: italic;',
+ //1 => 'color: #002EB8; font-style: italic;',
+ //2 => 'color: #002EB8; font-style: italic;',
+ 'MULTI' => 'color: #002EB8; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF7400;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #700000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF6633;'
+ ),
+ 'METHODS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #FF7400;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #6B1F6B;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ // Variables Defined in the Panel
+ 0 => '&amp;[a-zA-Z]{1,8}[0-9]{0,}',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php
index 5565bb49..4cfda8b5 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/j.php
@@ -4,7 +4,7 @@
* --------
* Author: Ric Sherlock (tikkanz@gmail.com)
* Copyright: (c) 2009 Ric Sherlock
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/11/10
*
* J language file for GeSHi.
@@ -186,5 +186,3 @@ $language_data = array(
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java.php
index 652b8ddd..b7323cd0 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java.php
@@ -4,7 +4,7 @@
* --------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/10
*
* Java language file for GeSHi.
@@ -934,7 +934,6 @@ $language_data = array (
1 => 'color: #666666; font-style: italic;',
2 => 'color: #006699;',
3 => 'color: #008000; font-style: italic; font-weight: bold;',
- 3 => 'color: #008000; font-style: italic; font-weight: bold;',
'MULTI' => 'color: #666666; font-style: italic;'
),
'ESCAPE_CHAR' => array(
@@ -979,5 +978,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java5.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java5.php
index af16bd1e..8f0d6704 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java5.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/java5.php
@@ -4,7 +4,7 @@
* --------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/10
*
* Java language file for GeSHi.
@@ -1033,5 +1033,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/javascript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/javascript.php
index b96d1b5b..439b7a9b 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/javascript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/javascript.php
@@ -4,7 +4,7 @@
* --------------
* Author: Ben Keen (ben.keen@gmail.com)
* Copyright: (c) 2004 Ben Keen (ben.keen@gmail.com), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/20
*
* JavaScript language file for GeSHi.
@@ -170,5 +170,3 @@ $language_data = array (
1 => true
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jcl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jcl.php
new file mode 100644
index 00000000..74fe0fd8
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jcl.php
@@ -0,0 +1,155 @@
+<?php
+/*************************************************************************************
+ * jcl.php
+ * -----------
+ * Author: Ramesh Vishveshwar (ramesh.vishveshwar@gmail.com)
+ * Copyright: (c) 2012 Ramesh Vishveshwar (http://thecodeisclear.in)
+ * Release Version: 1.0.8.12
+ * Date Started: 2011/09/16
+ *
+ * JCL (MVS), DFSORT, IDCAMS language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2011/09/16 (1.0.0)
+ * - Internal Release (for own blog/testing)
+ * 2012/09/22 (1.0.1)
+ * - Released with support for DFSORT, ICETOOL, IDCAMS
+ * - Added support for Symbolic variables in JCL
+ * - Added support for TWS OPC variables
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'JCL',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ // Comments identified using REGEX
+ // Comments start with //* but should not be followed by % (TWS) or + (some JES3 stmts)
+ 3 => "\/\/\*[^%](.*?)(\n)"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'COMMAND', 'CNTL', 'DD', 'ENDCNTL', 'EXEC', 'IF', 'THEN', 'ELSE',
+ 'ENDIF', 'JCLLIB', 'JOB', 'OUTPUT', 'PEND',
+ 'PROC', 'SET', 'XMIT'
+ ),
+ 2 => array (
+ 'PGM','CLASS','NOTIFY','MSGCLASS','DSN','KEYLEN','LABEL','LIKE',
+ 'RECFM','LRECL','DCB','DSORG','BLKSIZE','SPACE','STORCLAS',
+ 'DUMMY','DYNAM','AVGREC','BURST','DISP','UNIT','VOLUME',
+ 'MSGLEVEL','REGION'
+ ),
+ // Keywords set 3: DFSORT, ICETOOL
+ 3 => array (
+ 'ALTSEQ','DEBUG','END','INCLUDE','INREC','MERGE','MODS','OMIT',
+ 'OPTION','OUTFIL','OUTREC','RECORD','SORT','SUM',
+ 'COPY','COUNT','DEFAULTS','DISPLAY','MODE','OCCUR','RANGE',
+ 'SELECT','STATS','UNIQUE','VERIFY'
+ ),
+ // Keywords set 4: IDCAMS
+ 4 => array (
+ 'ALTER','BLDINDEX','CNVTCAT','DEFINE','ALIAS','ALTERNATEINDEX',
+ 'CLUSTER','GENERATIONDATAGROUP','GDG','NONVSAM','PAGESPACE','PATH',
+ /* 'SPACE',*/'USERCATALOG','DELETE','EXAMINE','EXPORT','DISCONNECT',
+ 'EXPORTRA','IMPORT','CONNECT','IMPORTRA','LISTCAT','LISTCRA',
+ 'PRINT','REPRO','RESETCAT'//,'VERIFY'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(',')','=',',','>','<'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #FF0000;',
+ 2 => 'color: #21A502;',
+ 3 => 'color: #FF00FF;',
+ 4 => 'color: #876C00;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #0000FF;',
+ //1 => 'color: #0000FF;',
+ //2 => 'color: #0000FF;',
+ 3 => 'color: #0000FF;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF7400;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #66CC66;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #336633;'
+ ),
+ 'METHODS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #FF7400;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #6B1F6B;',
+ 1 => 'color: #6B1F6B;',
+ 2 => 'color: #6B1F6B;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ // JCL book at IBM Bookshelf is http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/handheld/Connected/BOOKS/IEA2B680/CONTENTS?SHELF=&DT=20080604022956#3.1
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ // The following regular expressions solves three purposes
+ // - Identify Temp Variables in JCL (e.g. &&TEMP)
+ // - Symbolic variables in JCL (e.g. &SYSUID)
+ // - TWS OPC Variables (e.g. %OPC)
+ // Thanks to Simon for pointing me to this
+ 0 => '&amp;&amp;[a-zA-Z]{1,8}[0-9]{0,}',
+ 1 => '&amp;[a-zA-Z]{1,8}[0-9]{0,}',
+ 2 => '&amp;|\?|%[a-zA-Z]{1,8}[0-9]{0,}'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jquery.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jquery.php
index a75320d5..02a9eeef 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jquery.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/jquery.php
@@ -4,7 +4,7 @@
* --------------
* Author: Rob Loach (http://www.robloach.net)
* Copyright: (c) 2009 Rob Loach (http://www.robloach.net)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/07/20
*
* jQuery 1.3 language file for GeSHi.
@@ -234,5 +234,3 @@ $language_data = array (
1 => true
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php
index 5b909198..b2b7b935 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/kixtart.php
@@ -4,7 +4,7 @@
* --------
* Author: Riley McArdle (riley@glyff.net)
* Copyright: (c) 2007 Riley McArdle (http://www.glyff.net/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/08/31
*
* PHP language file for GeSHi.
@@ -325,5 +325,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonec.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonec.php
index 5f86e78d..f4f8ac43 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonec.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonec.php
@@ -4,7 +4,7 @@
* --------
* Author: AUGER Mickael
* Copyright: Synchronic
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/04/16
*
* KLone with C language file for GeSHi.
@@ -278,5 +278,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php
index 6564c6b7..e11015e6 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/klonecpp.php
@@ -4,7 +4,7 @@
* --------
* Author: AUGER Mickael
* Copyright: Synchronic
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/04/16
*
* KLone with C++ language file for GeSHi.
@@ -306,5 +306,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/latex.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/latex.php
index 386a0b98..8b28e344 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/latex.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/latex.php
@@ -4,7 +4,7 @@
* -----
* Author: efi, Matthias Pospiech (matthias@pospiech.eu)
* Copyright: (c) 2006 efi, Matthias Pospiech (matthias@pospiech.eu), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/09/23
*
* LaTeX language file for GeSHi.
@@ -131,7 +131,7 @@ $language_data = array (
)
),
'URLS' => array(
- 1 => 'http://www.golatex.de/wiki/index.php?title=%5C{FNAME}',
+ 1 => 'http://www.golatex.de/wiki/%5C{FNAME}',
),
'OOLANG' => false,
'OBJECT_SPLITTERS' => array(
@@ -219,5 +219,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lb.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lb.php
index 6c288289..aa3f5c0d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lb.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lb.php
@@ -4,7 +4,7 @@
* --------
* Author: Chris Iverson (cj.no.one@gmail.com)
* Copyright: (c) 2010 Chris Iverson
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/07/18
*
* Liberty BASIC language file for GeSHi.
@@ -158,5 +158,3 @@ $language_data = array(
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ldif.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ldif.php
index 42481838..c4135137 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ldif.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ldif.php
@@ -4,7 +4,7 @@
* --------
* Author: Bruno Harbulot (Bruno.Harbulot@manchester.ac.uk)
* Copyright: (c) 2005 deguix, (c) 2010 Bruno Harbulot
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/03/01
*
* LDIF language file for GeSHi.
@@ -112,5 +112,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lisp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lisp.php
index be823a40..a2301914 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lisp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lisp.php
@@ -3,14 +3,16 @@
* lisp.php
* --------
* Author: Roberto Rossi (rsoftware@altervista.org)
- * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter
- * Release Version: 1.0.8.11
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/30
*
* Generic Lisp language file for GeSHi.
*
* CHANGES
* -------
+ * 2013/11/13 (1.0.8.12)
+ * - Fixed bug where a keyword was highlighted in identifiers (Edward Hart)
* 2005/12/9 (1.0.2)
* - Added support for :keywords and ::access (Denis Mashkevich)
* 2004/11/27 (1.0.1)
@@ -135,10 +137,11 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
),
'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9-\$_\|\#|^&])',
+ ),
'OOLANG' => array(
'MATCH_AFTER' => '[a-zA-Z][a-zA-Z0-9_\-]*'
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/llvm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/llvm.php
index 580099b5..4fc2040c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/llvm.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/llvm.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@geshi.org), Azriel Fasten (azriel.fasten@gmail.com)
* Copyright: (c) 2010 Benny Baumann (http://qbnz.com/highlighter/), Azriel Fasten (azriel.fasten@gmail.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/10/14
*
* LLVM language file for GeSHi.
@@ -381,5 +381,3 @@ $language_data = array(
'SCRIPT_DELIMITERS' => array(),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/locobasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/locobasic.php
index 61c8a3c8..686bb6c5 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/locobasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/locobasic.php
@@ -4,7 +4,7 @@
* -------------
* Author: Nacho Cabanes
* Copyright: (c) 2009 Nacho Cabanes (http://www.nachocabanes.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/03/22
*
* Locomotive Basic (Amstrad CPC series) language file for GeSHi.
@@ -126,5 +126,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php
index 05734663..c72e548d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/logtalk.php
@@ -5,7 +5,7 @@
*
* Author: Paulo Moura (pmoura@logtalk.org)
* Copyright: (c) 2009-2011 Paulo Moura (http://logtalk.org/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/10/24
*
* Logtalk language file for GeSHi.
@@ -308,38 +308,36 @@ $language_data = array(
'PARSER_CONTROL' => array(
'ENABLE_FLAGS' => array(
'BRACKETS' => GESHI_NEVER
- ),
+ ),
'KEYWORDS' => array(
1 => array(
'DISALLOWED_BEFORE' => '(?<=:-\s)',
'DISALLOWED_AFTER' => '(?=\()'
- ),
+ ),
2 => array(
'DISALLOWED_BEFORE' => '(?<=:-\s)',
'DISALLOWED_AFTER' => '(?=\.)'
- ),
+ ),
3 => array(
'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#>|^&\'"])',
'DISALLOWED_AFTER' => '(?=\()'
- ),
+ ),
4 => array(
'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#>|^&\'"])',
'DISALLOWED_AFTER' => '(?=\()'
- ),
+ ),
5 => array(
'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#>|^&\'"])',
'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\'"])'
- ),
+ ),
6 => array(
'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#;>|^&\'"])',
'DISALLOWED_AFTER' => '(?=\()'
- ),
+ ),
7 => array(
'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#;>|^&\'"])',
'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\'"])'
+ )
)
)
- ),
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php
index ab6088b1..3dee0921 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lolcode.php
@@ -4,13 +4,16 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/10/31
*
* LOLcode language file for GeSHi.
*
* CHANGES
* -------
+ * 2014/2/25
+ * - Fixed to not throw missing index exception.
+ *
* 2008/10/31 (1.0.8.1)
* - First Release
*
@@ -36,10 +39,11 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
************************************************************************************/
-$language_data = array (
+
+$language_data = array(
'LANG_NAME' => 'LOLcode',
- 'COMMENT_SINGLE' => array(),
- 'COMMENT_MULTI' => array(),
+ 'COMMENT_SINGLE' => array('BTW'),
+ 'COMMENT_MULTI' => array('BTW','WTB'),
'COMMENT_REGEXP' => array(
1 => "/\bBTW\b.*$/im",
2 => "/(^|\b)(?:OBTW\b.+?\bTLDR|LOL\b.+?\/LOL)(\b|$)/si"
@@ -102,6 +106,7 @@ $language_data = array (
4 => 'color: #800000;'
),
'COMMENTS' => array(
+ 0 => 'color: #666666; style: italic;',
1 => 'color: #666666; style: italic;',
2 => 'color: #666666; style: italic;'
),
@@ -112,15 +117,19 @@ $language_data = array (
0 => 'color: #ff0000;'
),
'NUMBERS' => array(
+ 0 => 'color: #00F;'
),
'METHODS' => array(
+ 0 => 'color: #0F0;'
),
'SYMBOLS' => array(
0 => 'color: #66cc66;'
),
'ESCAPE_CHAR' => array(
+ 0 => 'color: #00F;'
),
'SCRIPT' => array(
+ 0 => 'color: #00F;'
),
'REGEXPS' => array(
)
@@ -148,5 +157,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusformulas.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusformulas.php
index 12257d74..e94f5df8 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusformulas.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusformulas.php
@@ -4,7 +4,7 @@
* ------------------------
* Author: Richard Civil (info@richardcivil.net)
* Copyright: (c) 2008 Richard Civil (info@richardcivil.net), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/04/12
*
* @Formula/@Command language file for GeSHi.
@@ -313,6 +313,4 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
),
'TAB_WIDTH' => 2
- );
-
-?>
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusscript.php
index b8b65f20..e5a8971f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusscript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lotusscript.php
@@ -4,7 +4,7 @@
* ------------------------
* Author: Richard Civil (info@richardcivil.net)
* Copyright: (c) 2008 Richard Civil (info@richardcivil.net), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/04/12
*
* LotusScript language file for GeSHi.
@@ -187,5 +187,3 @@ $language_data = array (
),
'TAB_WIDTH' => 2
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lscript.php
index 298af618..acfd18e2 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lscript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lscript.php
@@ -4,7 +4,7 @@
* ---------
* Author: Arendedwinter (admin@arendedwinter.com)
* Copyright: (c) 2008 Beau McGuigan (http://www.arendedwinter.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 15/11/2008
*
* Lightwave Script language file for GeSHi.
@@ -383,5 +383,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php
index f80cf4f2..1bbf1c05 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lsl2.php
@@ -4,23 +4,21 @@
* --------
* Author: William Fry (william.fry@nyu.edu)
* Copyright: (c) 2009 William Fry
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/02/04
*
* Linden Scripting Language (LSL2) language file for GeSHi.
*
- * Data derived and validated against the following:
- * http://wiki.secondlife.com/wiki/LSL_Portal
- * http://www.lslwiki.net/lslwiki/wakka.php?wakka=HomePage
- * http://rpgstats.com/wiki/index.php?title=Main_Page
- *
* CHANGES
* -------
- * 2009/02/05 (1.0.0)
+ * 2009-02-05 (1.0.0)
* - First Release
- *
- * TODO (updated 2009/02/05)
- * -------------------------
+ * 2013-01-01
+ * - Modified by Sei Lisa for compatibility with the geshi.py output module
+ * which is part of the LSL2 Derived Files Generator, available at:
+ * http://code.google.com/p/lsl-keywords
+ * 2013-07-11
+ * - Modified by Sei Lisa to fix symbols and to add multiline comment support
*
*************************************************************************************
*
@@ -42,10 +40,12 @@
*
************************************************************************************/
-$language_data = array (
+// Generated by LSL2 Derived Files Generator. Database version: 0.0.20140116001; output module version: 0.0.20130817000
+
+$language_data = array(
'LANG_NAME' => 'LSL2',
'COMMENT_SINGLE' => array(1 => '//'),
- 'COMMENT_MULTI' => array(),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
'QUOTEMARKS' => array('"'),
'ESCAPE_CHAR' => '\\',
@@ -65,11 +65,17 @@ $language_data = array (
'AGENT',
'AGENT_ALWAYS_RUN',
'AGENT_ATTACHMENTS',
+ 'AGENT_AUTOPILOT',
'AGENT_AWAY',
'AGENT_BUSY',
+ 'AGENT_BY_LEGACY_NAME',
+ 'AGENT_BY_USERNAME',
'AGENT_CROUCHING',
'AGENT_FLYING',
'AGENT_IN_AIR',
+ 'AGENT_LIST_PARCEL',
+ 'AGENT_LIST_PARCEL_OWNER',
+ 'AGENT_LIST_REGION',
'AGENT_MOUSELOOK',
'AGENT_ON_OBJECT',
'AGENT_SCRIPTED',
@@ -78,6 +84,7 @@ $language_data = array (
'AGENT_WALKING',
'ALL_SIDES',
'ANIM_ON',
+ 'ATTACH_AVATAR_CENTER',
'ATTACH_BACK',
'ATTACH_BELLY',
'ATTACH_CHEST',
@@ -92,17 +99,18 @@ $language_data = array (
'ATTACH_HUD_TOP_LEFT',
'ATTACH_HUD_TOP_RIGHT',
'ATTACH_LEAR',
+ 'ATTACH_LEFT_PEC',
'ATTACH_LEYE',
'ATTACH_LFOOT',
'ATTACH_LHAND',
'ATTACH_LHIP',
'ATTACH_LLARM',
'ATTACH_LLLEG',
- 'ATTACH_LPEC',
'ATTACH_LSHOULDER',
'ATTACH_LUARM',
'ATTACH_LULEG',
'ATTACH_MOUTH',
+ 'ATTACH_NECK',
'ATTACH_NOSE',
'ATTACH_PELVIS',
'ATTACH_REAR',
@@ -110,12 +118,15 @@ $language_data = array (
'ATTACH_RFOOT',
'ATTACH_RHAND',
'ATTACH_RHIP',
+ 'ATTACH_RIGHT_PEC',
'ATTACH_RLARM',
'ATTACH_RLLEG',
- 'ATTACH_RPEC',
'ATTACH_RSHOULDER',
'ATTACH_RUARM',
'ATTACH_RULEG',
+ 'AVOID_CHARACTERS',
+ 'AVOID_DYNAMIC_OBSTACLES',
+ 'AVOID_NONE',
'CAMERA_ACTIVE',
'CAMERA_BEHINDNESS_ANGLE',
'CAMERA_BEHINDNESS_LAG',
@@ -134,18 +145,52 @@ $language_data = array (
'CHANGED_COLOR',
'CHANGED_INVENTORY',
'CHANGED_LINK',
+ 'CHANGED_MEDIA',
'CHANGED_OWNER',
'CHANGED_REGION',
+ 'CHANGED_REGION_START',
'CHANGED_SCALE',
'CHANGED_SHAPE',
'CHANGED_TELEPORT',
'CHANGED_TEXTURE',
+ 'CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES',
+ 'CHARACTER_AVOIDANCE_MODE',
+ 'CHARACTER_CMD_JUMP',
+ 'CHARACTER_CMD_SMOOTH_STOP',
+ 'CHARACTER_CMD_STOP',
+ 'CHARACTER_DESIRED_SPEED',
+ 'CHARACTER_DESIRED_TURN_SPEED',
+ 'CHARACTER_LENGTH',
+ 'CHARACTER_MAX_ACCEL',
+ 'CHARACTER_MAX_DECEL',
+ 'CHARACTER_MAX_SPEED',
+ 'CHARACTER_MAX_TURN_RADIUS',
+ 'CHARACTER_ORIENTATION',
+ 'CHARACTER_RADIUS',
+ 'CHARACTER_STAY_WITHIN_PARCEL',
+ 'CHARACTER_TYPE',
+ 'CHARACTER_TYPE_A',
+ 'CHARACTER_TYPE_B',
+ 'CHARACTER_TYPE_C',
+ 'CHARACTER_TYPE_D',
+ 'CHARACTER_TYPE_NONE',
+ 'CLICK_ACTION_BUY',
'CLICK_ACTION_NONE',
'CLICK_ACTION_OPEN',
'CLICK_ACTION_OPEN_MEDIA',
'CLICK_ACTION_PAY',
+ 'CLICK_ACTION_PLAY',
'CLICK_ACTION_SIT',
'CLICK_ACTION_TOUCH',
+ 'CONTENT_TYPE_ATOM',
+ 'CONTENT_TYPE_FORM',
+ 'CONTENT_TYPE_HTML',
+ 'CONTENT_TYPE_JSON',
+ 'CONTENT_TYPE_LLSD',
+ 'CONTENT_TYPE_RSS',
+ 'CONTENT_TYPE_TEXT',
+ 'CONTENT_TYPE_XHTML',
+ 'CONTENT_TYPE_XML',
'CONTROL_BACK',
'CONTROL_DOWN',
'CONTROL_FWD',
@@ -160,18 +205,38 @@ $language_data = array (
'DATA_NAME',
'DATA_ONLINE',
'DATA_PAYINFO',
- 'DATA_RATING',
'DATA_SIM_POS',
'DATA_SIM_RATING',
'DATA_SIM_STATUS',
'DEBUG_CHANNEL',
'DEG_TO_RAD',
+ 'DENSITY',
'EOF',
+ 'ERR_GENERIC',
+ 'ERR_MALFORMED_PARAMS',
+ 'ERR_PARCEL_PERMISSIONS',
+ 'ERR_RUNTIME_PERMISSIONS',
+ 'ERR_THROTTLED',
+ 'ESTATE_ACCESS_ALLOWED_AGENT_ADD',
+ 'ESTATE_ACCESS_ALLOWED_AGENT_REMOVE',
+ 'ESTATE_ACCESS_ALLOWED_GROUP_ADD',
+ 'ESTATE_ACCESS_ALLOWED_GROUP_REMOVE',
+ 'ESTATE_ACCESS_BANNED_AGENT_ADD',
+ 'ESTATE_ACCESS_BANNED_AGENT_REMOVE',
'FALSE',
+ 'FORCE_DIRECT_PATH',
+ 'FRICTION',
+ 'GCNP_RADIUS',
+ 'GCNP_STATIC',
+ 'GRAVITY_MULTIPLIER',
+ 'HORIZONTAL',
'HTTP_BODY_MAXLENGTH',
'HTTP_BODY_TRUNCATED',
+ 'HTTP_CUSTOM_HEADER',
'HTTP_METHOD',
'HTTP_MIMETYPE',
+ 'HTTP_PRAGMA_NO_CACHE',
+ 'HTTP_VERBOSE_THROTTLE',
'HTTP_VERIFY_CERT',
'INVENTORY_ALL',
'INVENTORY_ANIMATION',
@@ -185,11 +250,37 @@ $language_data = array (
'INVENTORY_SCRIPT',
'INVENTORY_SOUND',
'INVENTORY_TEXTURE',
+ 'JSON_APPEND',
+ 'JSON_ARRAY',
+ 'JSON_DELETE',
+ 'JSON_FALSE',
+ 'JSON_INVALID',
+ 'JSON_NULL',
+ 'JSON_NUMBER',
+ 'JSON_OBJECT',
+ 'JSON_STRING',
+ 'JSON_TRUE',
+ 'KFM_CMD_PAUSE',
+ 'KFM_CMD_PLAY',
+ 'KFM_CMD_SET_MODE',
+ 'KFM_CMD_STOP',
+ 'KFM_COMMAND',
+ 'KFM_DATA',
+ 'KFM_FORWARD',
+ 'KFM_LOOP',
+ 'KFM_MODE',
+ 'KFM_PING_PONG',
+ 'KFM_REVERSE',
+ 'KFM_ROTATION',
+ 'KFM_TRANSLATION',
+ 'LAND_LARGE_BRUSH',
'LAND_LEVEL',
'LAND_LOWER',
+ 'LAND_MEDIUM_BRUSH',
'LAND_NOISE',
'LAND_RAISE',
'LAND_REVERT',
+ 'LAND_SMALL_BRUSH',
'LAND_SMOOTH',
'LINK_ALL_CHILDREN',
'LINK_ALL_OTHERS',
@@ -213,20 +304,55 @@ $language_data = array (
'MASK_NEXT',
'MASK_OWNER',
'NULL_KEY',
+ 'OBJECT_ATTACHED_POINT',
+ 'OBJECT_CHARACTER_TIME',
'OBJECT_CREATOR',
'OBJECT_DESC',
'OBJECT_GROUP',
'OBJECT_NAME',
'OBJECT_OWNER',
+ 'OBJECT_PATHFINDING_TYPE',
+ 'OBJECT_PHANTOM',
+ 'OBJECT_PHYSICS',
+ 'OBJECT_PHYSICS_COST',
'OBJECT_POS',
+ 'OBJECT_PRIM_EQUIVALENCE',
+ 'OBJECT_RENDER_WEIGHT',
+ 'OBJECT_RETURN_PARCEL',
+ 'OBJECT_RETURN_PARCEL_OWNER',
+ 'OBJECT_RETURN_REGION',
+ 'OBJECT_ROOT',
'OBJECT_ROT',
+ 'OBJECT_RUNNING_SCRIPT_COUNT',
+ 'OBJECT_SCRIPT_MEMORY',
+ 'OBJECT_SCRIPT_TIME',
+ 'OBJECT_SERVER_COST',
+ 'OBJECT_STREAMING_COST',
+ 'OBJECT_TEMP_ON_REZ',
+ 'OBJECT_TOTAL_SCRIPT_COUNT',
'OBJECT_UNKNOWN_DETAIL',
'OBJECT_VELOCITY',
+ 'OPT_AVATAR',
+ 'OPT_CHARACTER',
+ 'OPT_EXCLUSION_VOLUME',
+ 'OPT_LEGACY_LINKSET',
+ 'OPT_MATERIAL_VOLUME',
+ 'OPT_OTHER',
+ 'OPT_STATIC_OBSTACLE',
+ 'OPT_WALKABLE',
+ 'PARCEL_COUNT_GROUP',
+ 'PARCEL_COUNT_OTHER',
+ 'PARCEL_COUNT_OWNER',
+ 'PARCEL_COUNT_SELECTED',
+ 'PARCEL_COUNT_TEMP',
+ 'PARCEL_COUNT_TOTAL',
'PARCEL_DETAILS_AREA',
'PARCEL_DETAILS_DESC',
'PARCEL_DETAILS_GROUP',
+ 'PARCEL_DETAILS_ID',
'PARCEL_DETAILS_NAME',
'PARCEL_DETAILS_OWNER',
+ 'PARCEL_DETAILS_SEE_AVATARS',
'PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY',
'PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS',
'PARCEL_FLAG_ALLOW_CREATE_OBJECTS',
@@ -246,6 +372,7 @@ $language_data = array (
'PARCEL_MEDIA_COMMAND_AGENT',
'PARCEL_MEDIA_COMMAND_AUTO_ALIGN',
'PARCEL_MEDIA_COMMAND_DESC',
+ 'PARCEL_MEDIA_COMMAND_LOOP',
'PARCEL_MEDIA_COMMAND_LOOP_SET',
'PARCEL_MEDIA_COMMAND_PAUSE',
'PARCEL_MEDIA_COMMAND_PLAY',
@@ -254,8 +381,10 @@ $language_data = array (
'PARCEL_MEDIA_COMMAND_TEXTURE',
'PARCEL_MEDIA_COMMAND_TIME',
'PARCEL_MEDIA_COMMAND_TYPE',
+ 'PARCEL_MEDIA_COMMAND_UNLOAD',
'PARCEL_MEDIA_COMMAND_URL',
'PASSIVE',
+ 'PATROL_PAUSE_AT_WAYPOINTS',
'PAYMENT_INFO_ON_FILE',
'PAYMENT_INFO_USED',
'PAY_DEFAULT',
@@ -264,7 +393,11 @@ $language_data = array (
'PERMISSION_CHANGE_LINKS',
'PERMISSION_CONTROL_CAMERA',
'PERMISSION_DEBIT',
+ 'PERMISSION_OVERRIDE_ANIMATIONS',
+ 'PERMISSION_RETURN_OBJECTS',
+ 'PERMISSION_SILENT_ESTATE_MANAGEMENT',
'PERMISSION_TAKE_CONTROLS',
+ 'PERMISSION_TELEPORT',
'PERMISSION_TRACK_CAMERA',
'PERMISSION_TRIGGER_ANIMATION',
'PERM_ALL',
@@ -273,6 +406,7 @@ $language_data = array (
'PERM_MOVE',
'PERM_TRANSFER',
'PI',
+ 'PING_PONG',
'PI_BY_TWO',
'PRIM_BUMP_BARK',
'PRIM_BUMP_BLOBS',
@@ -294,43 +428,108 @@ $language_data = array (
'PRIM_BUMP_WEAVE',
'PRIM_BUMP_WOOD',
'PRIM_COLOR',
+ 'PRIM_DESC',
+ 'PRIM_FLEXIBLE',
'PRIM_FULLBRIGHT',
+ 'PRIM_GLOW',
'PRIM_HOLE_CIRCLE',
'PRIM_HOLE_DEFAULT',
'PRIM_HOLE_SQUARE',
'PRIM_HOLE_TRIANGLE',
+ 'PRIM_LINK_TARGET',
'PRIM_MATERIAL',
'PRIM_MATERIAL_FLESH',
'PRIM_MATERIAL_GLASS',
- 'PRIM_MATERIAL_LIGHT',
'PRIM_MATERIAL_METAL',
'PRIM_MATERIAL_PLASTIC',
'PRIM_MATERIAL_RUBBER',
'PRIM_MATERIAL_STONE',
'PRIM_MATERIAL_WOOD',
+ 'PRIM_MEDIA_ALT_IMAGE_ENABLE',
+ 'PRIM_MEDIA_AUTO_LOOP',
+ 'PRIM_MEDIA_AUTO_PLAY',
+ 'PRIM_MEDIA_AUTO_SCALE',
+ 'PRIM_MEDIA_AUTO_ZOOM',
+ 'PRIM_MEDIA_CONTROLS',
+ 'PRIM_MEDIA_CONTROLS_MINI',
+ 'PRIM_MEDIA_CONTROLS_STANDARD',
+ 'PRIM_MEDIA_CURRENT_URL',
+ 'PRIM_MEDIA_FIRST_CLICK_INTERACT',
+ 'PRIM_MEDIA_HEIGHT_PIXELS',
+ 'PRIM_MEDIA_HOME_URL',
+ 'PRIM_MEDIA_MAX_HEIGHT_PIXELS',
+ 'PRIM_MEDIA_MAX_URL_LENGTH',
+ 'PRIM_MEDIA_MAX_WHITELIST_COUNT',
+ 'PRIM_MEDIA_MAX_WHITELIST_SIZE',
+ 'PRIM_MEDIA_MAX_WIDTH_PIXELS',
+ 'PRIM_MEDIA_PARAM_MAX',
+ 'PRIM_MEDIA_PERMS_CONTROL',
+ 'PRIM_MEDIA_PERMS_INTERACT',
+ 'PRIM_MEDIA_PERM_ANYONE',
+ 'PRIM_MEDIA_PERM_GROUP',
+ 'PRIM_MEDIA_PERM_NONE',
+ 'PRIM_MEDIA_PERM_OWNER',
+ 'PRIM_MEDIA_WHITELIST',
+ 'PRIM_MEDIA_WHITELIST_ENABLE',
+ 'PRIM_MEDIA_WIDTH_PIXELS',
+ 'PRIM_NAME',
+ 'PRIM_OMEGA',
'PRIM_PHANTOM',
'PRIM_PHYSICS',
+ 'PRIM_PHYSICS_SHAPE_CONVEX',
+ 'PRIM_PHYSICS_SHAPE_NONE',
+ 'PRIM_PHYSICS_SHAPE_PRIM',
+ 'PRIM_PHYSICS_SHAPE_TYPE',
+ 'PRIM_POINT_LIGHT',
'PRIM_POSITION',
+ 'PRIM_POS_LOCAL',
'PRIM_ROTATION',
+ 'PRIM_ROT_LOCAL',
+ 'PRIM_SCULPT_FLAG_INVERT',
+ 'PRIM_SCULPT_FLAG_MIRROR',
+ 'PRIM_SCULPT_TYPE_CYLINDER',
+ 'PRIM_SCULPT_TYPE_MASK',
+ 'PRIM_SCULPT_TYPE_PLANE',
+ 'PRIM_SCULPT_TYPE_SPHERE',
+ 'PRIM_SCULPT_TYPE_TORUS',
'PRIM_SHINY_HIGH',
'PRIM_SHINY_LOW',
'PRIM_SHINY_MEDIUM',
'PRIM_SHINY_NONE',
'PRIM_SIZE',
+ 'PRIM_SLICE',
'PRIM_TEMP_ON_REZ',
+ 'PRIM_TEXGEN',
+ 'PRIM_TEXGEN_DEFAULT',
+ 'PRIM_TEXGEN_PLANAR',
+ 'PRIM_TEXT',
'PRIM_TEXTURE',
'PRIM_TYPE',
'PRIM_TYPE_BOX',
'PRIM_TYPE_CYLINDER',
'PRIM_TYPE_PRISM',
'PRIM_TYPE_RING',
+ 'PRIM_TYPE_SCULPT',
'PRIM_TYPE_SPHERE',
'PRIM_TYPE_TORUS',
'PRIM_TYPE_TUBE',
+ 'PROFILE_NONE',
+ 'PROFILE_SCRIPT_MEMORY',
+ 'PSYS_PART_BF_DEST_COLOR',
+ 'PSYS_PART_BF_ONE',
+ 'PSYS_PART_BF_ONE_MINUS_DEST_COLOR',
+ 'PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA',
+ 'PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR',
+ 'PSYS_PART_BF_SOURCE_ALPHA',
+ 'PSYS_PART_BF_SOURCE_COLOR',
+ 'PSYS_PART_BF_ZERO',
+ 'PSYS_PART_BLEND_FUNC_DEST',
+ 'PSYS_PART_BLEND_FUNC_SOURCE',
'PSYS_PART_BOUNCE_MASK',
'PSYS_PART_EMISSIVE_MASK',
'PSYS_PART_END_ALPHA',
'PSYS_PART_END_COLOR',
+ 'PSYS_PART_END_GLOW',
'PSYS_PART_END_SCALE',
'PSYS_PART_FLAGS',
'PSYS_PART_FOLLOW_SRC_MASK',
@@ -338,8 +537,10 @@ $language_data = array (
'PSYS_PART_INTERP_COLOR_MASK',
'PSYS_PART_INTERP_SCALE_MASK',
'PSYS_PART_MAX_AGE',
+ 'PSYS_PART_RIBBON_MASK',
'PSYS_PART_START_ALPHA',
'PSYS_PART_START_COLOR',
+ 'PSYS_PART_START_GLOW',
'PSYS_PART_START_SCALE',
'PSYS_PART_TARGET_LINEAR_MASK',
'PSYS_PART_TARGET_POS_MASK',
@@ -352,10 +553,8 @@ $language_data = array (
'PSYS_SRC_BURST_RATE',
'PSYS_SRC_BURST_SPEED_MAX',
'PSYS_SRC_BURST_SPEED_MIN',
- 'PSYS_SRC_INNERANGLE',
'PSYS_SRC_MAX_AGE',
'PSYS_SRC_OMEGA',
- 'PSYS_SRC_OUTERANGLE',
'PSYS_SRC_PATTERN',
'PSYS_SRC_PATTERN_ANGLE',
'PSYS_SRC_PATTERN_ANGLE_CONE',
@@ -364,13 +563,70 @@ $language_data = array (
'PSYS_SRC_PATTERN_EXPLODE',
'PSYS_SRC_TARGET_KEY',
'PSYS_SRC_TEXTURE',
+ 'PUBLIC_CHANNEL',
+ 'PURSUIT_FUZZ_FACTOR',
+ 'PURSUIT_GOAL_TOLERANCE',
+ 'PURSUIT_INTERCEPT',
+ 'PURSUIT_OFFSET',
+ 'PU_EVADE_HIDDEN',
+ 'PU_EVADE_SPOTTED',
+ 'PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED',
+ 'PU_FAILURE_INVALID_GOAL',
+ 'PU_FAILURE_INVALID_START',
+ 'PU_FAILURE_NO_NAVMESH',
+ 'PU_FAILURE_NO_VALID_DESTINATION',
+ 'PU_FAILURE_OTHER',
+ 'PU_FAILURE_PARCEL_UNREACHABLE',
+ 'PU_FAILURE_TARGET_GONE',
+ 'PU_FAILURE_UNREACHABLE',
+ 'PU_GOAL_REACHED',
+ 'PU_SLOWDOWN_DISTANCE_REACHED',
'RAD_TO_DEG',
+ 'RCERR_CAST_TIME_EXCEEDED',
+ 'RCERR_SIM_PERF_LOW',
+ 'RCERR_UNKNOWN',
+ 'RC_DATA_FLAGS',
+ 'RC_DETECT_PHANTOM',
+ 'RC_GET_LINK_NUM',
+ 'RC_GET_NORMAL',
+ 'RC_GET_ROOT_KEY',
+ 'RC_MAX_HITS',
+ 'RC_REJECT_AGENTS',
+ 'RC_REJECT_LAND',
+ 'RC_REJECT_NONPHYSICAL',
+ 'RC_REJECT_PHYSICAL',
+ 'RC_REJECT_TYPES',
+ 'REGION_FLAG_ALLOW_DAMAGE',
+ 'REGION_FLAG_ALLOW_DIRECT_TELEPORT',
+ 'REGION_FLAG_BLOCK_FLY',
+ 'REGION_FLAG_BLOCK_TERRAFORM',
+ 'REGION_FLAG_DISABLE_COLLISIONS',
+ 'REGION_FLAG_DISABLE_PHYSICS',
+ 'REGION_FLAG_FIXED_SUN',
+ 'REGION_FLAG_RESTRICT_PUSHOBJECT',
+ 'REGION_FLAG_SANDBOX',
'REMOTE_DATA_CHANNEL',
+ 'REMOTE_DATA_REPLY',
'REMOTE_DATA_REQUEST',
+ 'REQUIRE_LINE_OF_SIGHT',
+ 'RESTITUTION',
+ 'REVERSE',
+ 'ROTATE',
+ 'SCALE',
'SCRIPTED',
+ 'SIM_STAT_PCT_CHARS_STEPPED',
+ 'SMOOTH',
'SQRT2',
'STATUS_BLOCK_GRAB',
+ 'STATUS_BLOCK_GRAB_OBJECT',
+ 'STATUS_BOUNDS_ERROR',
+ 'STATUS_CAST_SHADOWS',
'STATUS_DIE_AT_EDGE',
+ 'STATUS_INTERNAL_ERROR',
+ 'STATUS_MALFORMED_PARAMS',
+ 'STATUS_NOT_FOUND',
+ 'STATUS_NOT_SUPPORTED',
+ 'STATUS_OK',
'STATUS_PHANTOM',
'STATUS_PHYSICS',
'STATUS_RETURN_AT_EDGE',
@@ -378,8 +634,34 @@ $language_data = array (
'STATUS_ROTATE_Y',
'STATUS_ROTATE_Z',
'STATUS_SANDBOX',
+ 'STATUS_TYPE_MISMATCH',
+ 'STATUS_WHITELIST_FAILED',
+ 'STRING_TRIM',
+ 'STRING_TRIM_HEAD',
+ 'STRING_TRIM_TAIL',
+ 'TEXTURE_BLANK',
+ 'TEXTURE_DEFAULT',
+ 'TEXTURE_MEDIA',
+ 'TEXTURE_PLYWOOD',
+ 'TEXTURE_TRANSPARENT',
+ 'TOUCH_INVALID_FACE',
+ 'TOUCH_INVALID_TEXCOORD',
+ 'TOUCH_INVALID_VECTOR',
+ 'TRAVERSAL_TYPE',
+ 'TRAVERSAL_TYPE_FAST',
+ 'TRAVERSAL_TYPE_NONE',
+ 'TRAVERSAL_TYPE_SLOW',
'TRUE',
'TWO_PI',
+ 'TYPE_FLOAT',
+ 'TYPE_INTEGER',
+ 'TYPE_INVALID',
+ 'TYPE_KEY',
+ 'TYPE_ROTATION',
+ 'TYPE_STRING',
+ 'TYPE_VECTOR',
+ 'URL_REQUEST_DENIED',
+ 'URL_REQUEST_GRANTED',
'VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY',
'VEHICLE_ANGULAR_DEFLECTION_TIMESCALE',
'VEHICLE_ANGULAR_FRICTION_TIMESCALE',
@@ -419,13 +701,15 @@ $language_data = array (
'VEHICLE_TYPE_SLED',
'VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY',
'VEHICLE_VERTICAL_ATTRACTION_TIMESCALE',
+ 'VERTICAL',
+ 'WANDER_PAUSE_AT_WAYPOINTS',
'ZERO_ROTATION',
'ZERO_VECTOR',
),
3 => array( // handlers
'at_rot_target',
'at_target',
- 'attached',
+ 'attach',
'changed',
'collision',
'collision_end',
@@ -433,6 +717,7 @@ $language_data = array (
'control',
'dataserver',
'email',
+ 'http_request',
'http_response',
'land_collision',
'land_collision_end',
@@ -447,6 +732,7 @@ $language_data = array (
'not_at_target',
'object_rez',
'on_rez',
+ 'path_update',
'remote_data',
'run_time_permissions',
'sensor',
@@ -456,12 +742,14 @@ $language_data = array (
'touch',
'touch_end',
'touch_start',
+ 'transaction_result',
),
4 => array( // data types
'float',
'integer',
'key',
'list',
+ 'quaternion',
'rotation',
'string',
'vector',
@@ -480,6 +768,8 @@ $language_data = array (
'llAsin',
'llAtan2',
'llAttachToAvatar',
+ 'llAttachToAvatarTemp',
+ 'llAvatarOnLinkSitTarget',
'llAvatarOnSitTarget',
'llAxes2Rot',
'llAxisAngle2Rot',
@@ -487,16 +777,19 @@ $language_data = array (
'llBase64ToString',
'llBreakAllLinks',
'llBreakLink',
+ 'llCastRay',
'llCeil',
'llClearCameraParams',
+ 'llClearLinkMedia',
+ 'llClearPrimMedia',
'llCloseRemoteDataChannel',
- 'llCloud',
'llCollisionFilter',
'llCollisionSound',
- 'llCollisionSprite',
'llCos',
+ 'llCreateCharacter',
'llCreateLink',
'llCSV2List',
+ 'llDeleteCharacter',
'llDeleteSubList',
'llDeleteSubString',
'llDetachFromAvatar',
@@ -524,31 +817,42 @@ $language_data = array (
'llEmail',
'llEscapeURL',
'llEuler2Rot',
+ 'llEvade',
+ 'llExecCharacterCmd',
'llFabs',
+ 'llFleeFrom',
'llFloor',
'llForceMouselook',
'llFrand',
+ 'llGenerateKey',
'llGetAccel',
'llGetAgentInfo',
'llGetAgentLanguage',
+ 'llGetAgentList',
'llGetAgentSize',
'llGetAlpha',
'llGetAndResetTime',
'llGetAnimation',
'llGetAnimationList',
+ 'llGetAnimationOverride',
'llGetAttached',
'llGetBoundingBox',
'llGetCameraPos',
'llGetCameraRot',
'llGetCenterOfMass',
+ 'llGetClosestNavPoint',
'llGetColor',
'llGetCreator',
'llGetDate',
+ 'llGetDisplayName',
'llGetEnergy',
+ 'llGetEnv',
'llGetForce',
'llGetFreeMemory',
+ 'llGetFreeURLs',
'llGetGeometricCenter',
'llGetGMTclock',
+ 'llGetHTTPHeader',
'llGetInventoryCreator',
'llGetInventoryKey',
'llGetInventoryName',
@@ -558,13 +862,20 @@ $language_data = array (
'llGetKey',
'llGetLandOwnerAt',
'llGetLinkKey',
+ 'llGetLinkMedia',
'llGetLinkName',
'llGetLinkNumber',
+ 'llGetLinkNumberOfSides',
+ 'llGetLinkPrimitiveParams',
'llGetListEntryType',
'llGetListLength',
'llGetLocalPos',
'llGetLocalRot',
'llGetMass',
+ 'llGetMassMKS',
+ 'llGetMaxScaleFactor',
+ 'llGetMemoryLimit',
+ 'llGetMinScaleFactor',
'llGetNextEmail',
'llGetNotecardLine',
'llGetNumberOfNotecardLines',
@@ -582,12 +893,15 @@ $language_data = array (
'llGetParcelDetails',
'llGetParcelFlags',
'llGetParcelMaxPrims',
+ 'llGetParcelMusicURL',
'llGetParcelPrimCount',
'llGetParcelPrimOwners',
'llGetPermissions',
'llGetPermissionsKey',
+ 'llGetPhysicsMaterial',
'llGetPos',
'llGetPrimitiveParams',
+ 'llGetPrimMediaParams',
'llGetRegionAgentCount',
'llGetRegionCorner',
'llGetRegionFlags',
@@ -600,8 +914,11 @@ $language_data = array (
'llGetScale',
'llGetScriptName',
'llGetScriptState',
+ 'llGetSimStats',
'llGetSimulatorHostname',
+ 'llGetSPMaxMemory',
'llGetStartParameter',
+ 'llGetStaticPath',
'llGetStatus',
'llGetSubString',
'llGetSunDirection',
@@ -614,6 +931,8 @@ $language_data = array (
'llGetTimestamp',
'llGetTorque',
'llGetUnixTime',
+ 'llGetUsedMemory',
+ 'llGetUsername',
'llGetVel',
'llGetWallclock',
'llGiveInventory',
@@ -625,13 +944,21 @@ $language_data = array (
'llGroundRepel',
'llGroundSlope',
'llHTTPRequest',
+ 'llHTTPResponse',
'llInsertString',
'llInstantMessage',
'llIntegerToBase64',
+ 'llJson2List',
+ 'llJsonGetValue',
+ 'llJsonSetValue',
+ 'llJsonValueType',
'llKey2Name',
+ 'llLinkParticleSystem',
+ 'llLinkSitTarget',
'llList2CSV',
'llList2Float',
'llList2Integer',
+ 'llList2Json',
'llList2Key',
'llList2List',
'llList2ListStrided',
@@ -654,6 +981,7 @@ $language_data = array (
'llLoopSound',
'llLoopSoundMaster',
'llLoopSoundSlave',
+ 'llManageEstateAccess',
'llMapDestination',
'llMD5String',
'llMessageLinked',
@@ -661,6 +989,7 @@ $language_data = array (
'llModifyLand',
'llModPow',
'llMoveToTarget',
+ 'llNavigateTo',
'llOffsetTexture',
'llOpenRemoteDataChannel',
'llOverMyLand',
@@ -672,29 +1001,39 @@ $language_data = array (
'llParticleSystem',
'llPassCollisions',
'llPassTouches',
+ 'llPatrolPoints',
'llPlaySound',
'llPlaySoundSlave',
'llPow',
'llPreloadSound',
+ 'llPursue',
'llPushObject',
'llRegionSay',
+ 'llRegionSayTo',
'llReleaseControls',
+ 'llReleaseURL',
'llRemoteDataReply',
- 'llRemoteDataSetRegion',
'llRemoteLoadScriptPin',
'llRemoveFromLandBanList',
'llRemoveFromLandPassList',
'llRemoveInventory',
'llRemoveVehicleFlags',
'llRequestAgentData',
+ 'llRequestDisplayName',
'llRequestInventoryData',
'llRequestPermissions',
+ 'llRequestSecureURL',
'llRequestSimulatorData',
+ 'llRequestURL',
+ 'llRequestUsername',
+ 'llResetAnimationOverride',
'llResetLandBanList',
'llResetLandPassList',
'llResetOtherScript',
'llResetScript',
'llResetTime',
+ 'llReturnObjectsByID',
+ 'llReturnObjectsByOwner',
'llRezAtRoot',
'llRezObject',
'llRot2Angle',
@@ -711,34 +1050,48 @@ $language_data = array (
'llRound',
'llSameGroup',
'llSay',
+ 'llScaleByFactor',
'llScaleTexture',
'llScriptDanger',
+ 'llScriptProfiler',
'llSendRemoteData',
'llSensor',
'llSensorRemove',
'llSensorRepeat',
'llSetAlpha',
+ 'llSetAngularVelocity',
+ 'llSetAnimationOverride',
'llSetBuoyancy',
'llSetCameraAtOffset',
'llSetCameraEyeOffset',
'llSetCameraParams',
'llSetClickAction',
'llSetColor',
+ 'llSetContentType',
'llSetDamage',
'llSetForce',
'llSetForceAndTorque',
'llSetHoverHeight',
+ 'llSetKeyframedMotion',
'llSetLinkAlpha',
+ 'llSetLinkCamera',
'llSetLinkColor',
+ 'llSetLinkMedia',
'llSetLinkPrimitiveParams',
+ 'llSetLinkPrimitiveParamsFast',
'llSetLinkTexture',
+ 'llSetLinkTextureAnim',
'llSetLocalRot',
+ 'llSetMemoryLimit',
'llSetObjectDesc',
'llSetObjectName',
'llSetParcelMusicURL',
'llSetPayPrice',
+ 'llSetPhysicsMaterial',
'llSetPos',
'llSetPrimitiveParams',
+ 'llSetPrimMediaParams',
+ 'llSetRegionPos',
'llSetRemoteScriptAccessPin',
'llSetRot',
'llSetScale',
@@ -758,6 +1111,7 @@ $language_data = array (
'llSetVehicleRotationParam',
'llSetVehicleType',
'llSetVehicleVectorParam',
+ 'llSetVelocity',
'llSHA1String',
'llShout',
'llSin',
@@ -779,32 +1133,57 @@ $language_data = array (
'llTarget',
'llTargetOmega',
'llTargetRemove',
+ 'llTeleportAgent',
+ 'llTeleportAgentGlobalCoords',
'llTeleportAgentHome',
+ 'llTextBox',
'llToLower',
'llToUpper',
+ 'llTransferLindenDollars',
'llTriggerSound',
'llTriggerSoundLimited',
'llUnescapeURL',
'llUnSit',
+ 'llUpdateCharacter',
'llVecDist',
'llVecMag',
'llVecNorm',
'llVolumeDetect',
+ 'llWanderWithin',
'llWater',
'llWhisper',
'llWind',
- 'llXorBase64StringsCorrect',
+ 'llXorBase64',
+ 'print',
),
6 => array( // deprecated
+ 'ATTACH_LPEC',
+ 'ATTACH_RPEC',
+ 'DATA_RATING',
+ 'PERMISSION_CHANGE_JOINTS',
+ 'PERMISSION_CHANGE_PERMISSIONS',
+ 'PERMISSION_RELEASE_OWNERSHIP',
+ 'PERMISSION_REMAP_CONTROLS',
+ 'PRIM_CAST_SHADOWS',
+ 'PRIM_MATERIAL_LIGHT',
+ 'PSYS_SRC_INNERANGLE',
+ 'PSYS_SRC_OBJ_REL_MASK',
+ 'PSYS_SRC_OUTERANGLE',
+ 'VEHICLE_FLAG_NO_FLY_UP',
+ 'llCloud',
'llMakeExplosion',
'llMakeFire',
'llMakeFountain',
'llMakeSmoke',
+ 'llRemoteDataSetRegion',
'llSound',
'llSoundPreload',
'llXorBase64Strings',
+ 'llXorBase64StringsCorrect',
),
7 => array( // unimplemented
+ 'event',
+ 'llCollisionSprite',
'llPointAt',
'llRefreshPrimURL',
'llReleaseCamera',
@@ -812,7 +1191,6 @@ $language_data = array (
'llSetPrimURL',
'llStopPointAt',
'llTakeCamera',
- 'llTextBox',
),
8 => array( // God mode
'llGodLikeRezObject',
@@ -823,10 +1201,10 @@ $language_data = array (
'SYMBOLS' => array(
'{', '}', '(', ')', '[', ']',
'=', '+', '-', '*', '/',
- '+=', '-=', '*=', '/=', '++', '--',
- '!', '%', '&amp;', '|', '&amp;&amp;', '||',
- '==', '!=', '&lt;', '&gt;', '&lt;=', '&gt;=',
- '~', '&lt;&lt;', '&gt;&gt;', '^', ':',
+ '+=', '-=', '*=', '/=', '%=', '++', '--',
+ '!', '%', '&', '|', '&&', '||',
+ '==', '!=', '<', '>', '<=', '>=',
+ '~', '<<', '>>', '^', ':',
),
'CASE_SENSITIVE' => array(
GESHI_COMMENTS => true,
@@ -852,6 +1230,7 @@ $language_data = array (
),
'COMMENTS' => array(
1 => 'color: #ff7f50; font-style: italic;',
+ 'MULTI' => 'color: #ff7f50; font-style: italic;',
),
'ESCAPE_CHAR' => array(
0 => 'color: #000099;'
@@ -878,12 +1257,12 @@ $language_data = array (
'URLS' => array(
1 => '',
2 => '',
- 3 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
- 4 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
- 5 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
- 6 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
- 7 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
- 8 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 3 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+ 4 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+ 5 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+ 6 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+ 7 => 'http://wiki.secondlife.com/wiki/{FNAME}',
+ 8 => 'http://wiki.secondlife.com/wiki/{FNAME}',
),
'OOLANG' => false,
'OBJECT_SPLITTERS' => array(),
@@ -895,4 +1274,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lua.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lua.php
index 8a09ba20..9bd67151 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lua.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/lua.php
@@ -4,7 +4,7 @@
* -------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/10
*
* LUA language file for GeSHi.
@@ -45,8 +45,14 @@
$language_data = array (
'LANG_NAME' => 'Lua',
'COMMENT_SINGLE' => array(1 => "--"),
- 'COMMENT_MULTI' => array('--[[' => ']]'),
- 'COMMENT_REGEXP' => array(2 => '/\[(=*)\[.*?\]\1\]/s'),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ // Multiline comments
+ 2 => '/--\[(=*)\[.*?\]\1\]/s',
+ // Multi line literal strings (should not interpret escape sequences)
+ // Here because no STRING_REGEXP
+ 3 => '/(?<!--)\[(=*)\[.*?\]\1\]/s',
+ ),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
'QUOTEMARKS' => array("'", '"'),
'ESCAPE_CHAR' => '',
@@ -127,8 +133,9 @@ $language_data = array (
),
'COMMENTS' => array(
1 => 'color: #808080; font-style: italic;',
- 2 => 'color: #ff0000;',
- 'MULTI' => 'color: #808080; font-style: italic;'
+ 2 => 'color: #808080; font-style: italic;',
+ // Actually a string
+ 3 => 'color: #ff0000;',
),
'ESCAPE_CHAR' => array(
0 => 'color: #000099; font-weight: bold;',
@@ -173,5 +180,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/m68k.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/m68k.php
index 98321577..aff1994c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/m68k.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/m68k.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2007 Benny Baumann (http://www.omorphia.de/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/02/06
*
* Motorola 68000 Assembler language file for GeSHi.
@@ -139,5 +139,3 @@ $language_data = array (
),
'TAB_WIDTH' => 8
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/magiksf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/magiksf.php
index 612e1603..74e794e7 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/magiksf.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/magiksf.php
@@ -4,7 +4,7 @@
* --------
* Author: Sjoerd van Leent (svanleent@gmail.com)
* Copyright: (c) 2010 Sjoerd van Leent
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/02/15
*
* MagikSF language file for GeSHi.
@@ -51,7 +51,7 @@ $language_data = array (
//Multiline-continued single-line comments
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
'QUOTEMARKS' => array("'", '"'),
- 'ESCAPE_CHAR' => '',
+ 'ESCAPE_CHAR' => '', // FIXME: Duplicate array key. null or ''?
'KEYWORDS' => array(
1 => array(
'_block', '_endblock', '_proc', '_endproc', '_loop', '_endloop',
@@ -189,5 +189,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/make.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/make.php
index 885fa176..4567dab9 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/make.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/make.php
@@ -4,7 +4,7 @@
* --------
* Author: Neil Bird <phoenix@fnxweb.com>
* Copyright: (c) 2008 Neil Bird
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/08/26
*
* make language file for GeSHi.
@@ -146,6 +146,4 @@ $language_data = array (
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array(),
'TAB_WIDTH' => 8
-// vim: set sw=4 sts=4 :
);
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mapbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mapbasic.php
index 8859c483..2672eb72 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mapbasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mapbasic.php
@@ -4,7 +4,7 @@
* ------
* Author: Tomasz Berus (t.berus@gisodkuchni.pl)
* Copyright: (c) 2009 Tomasz Berus (http://sourceforge.net/projects/mbsyntax/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/11/25
*
* MapBasic language file for GeSHi.
@@ -904,5 +904,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
),
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/matlab.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/matlab.php
index 7cdd50e5..ee275f03 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/matlab.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/matlab.php
@@ -4,7 +4,7 @@
* -----------
* Author: Florian Knorn (floz@gmx.de)
* Copyright: (c) 2004 Florian Knorn (http://www.florian-knorn.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/02/09
*
* Matlab M-file language file for GeSHi.
@@ -223,5 +223,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mirc.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mirc.php
index fa2f307e..4b62bc4f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mirc.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mirc.php
@@ -4,7 +4,7 @@
* -----
* Author: Alberto 'Birckin' de Areba (Birckin@hotmail.com)
* Copyright: (c) 2006 Alberto de Areba
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/05/29
*
* mIRC Scripting language file for GeSHi.
@@ -167,5 +167,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mmix.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mmix.php
index 60b6e28c..b4dacdbf 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mmix.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mmix.php
@@ -4,7 +4,7 @@
* -------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2009 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/10/16
*
* MMIX Assembler language file for GeSHi.
@@ -189,5 +189,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula2.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula2.php
index 18508340..522f46c9 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula2.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula2.php
@@ -4,7 +4,7 @@
* -----------
* Author: Benjamin Kowarsch (benjamin@modula2.net)
* Copyright: (c) 2009 Benjamin Kowarsch (benjamin@modula2.net)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/11/05
*
* Modula-2 language file for GeSHi.
@@ -132,5 +132,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula3.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula3.php
index ae08dcf9..3b40a680 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula3.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/modula3.php
@@ -4,7 +4,7 @@
* ----------
* Author: mbishop (mbishop@esoteriq.org)
* Copyright: (c) 2009 mbishop (mbishop@esoteriq.org)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/01/21
*
* Modula-3 language file for GeSHi.
@@ -131,5 +131,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mpasm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mpasm.php
index f724a941..3bdc1a0c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mpasm.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mpasm.php
@@ -4,7 +4,7 @@
* ---------
* Author: Bakalex (bakalex@gmail.com)
* Copyright: (c) 2004 Bakalex, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/12/6
*
* Microchip Assembler language file for GeSHi.
@@ -160,5 +160,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mxml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mxml.php
index 0cc8287a..53945f9a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mxml.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mxml.php
@@ -4,7 +4,7 @@
* -------
* Author: David Spurr
* Copyright: (c) 2007 David Spurr (http://www.defusion.org.uk/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/10/04
*
* MXML language file for GeSHi. Based on the XML file by Nigel McNie
@@ -141,5 +141,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mysql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mysql.php
index 507da2d0..ff36cdec 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mysql.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/mysql.php
@@ -4,7 +4,7 @@
* ---------
* Author: Marjolein Katsma (marjolein.is.back@gmail.com)
* Copyright: (c) 2008 Marjolein Katsma (http://blog.marjoleinkatsma.com/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008-12-12
*
* MySQL language file for GeSHi.
@@ -313,7 +313,6 @@ $language_data = array (
11 => false,
12 => false,
13 => false,
- 13 => false,
14 => false,
15 => false,
16 => false,
@@ -471,5 +470,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nagios.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nagios.php
index 32cbaef9..6dec5dfe 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nagios.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nagios.php
@@ -4,7 +4,7 @@
* --------
* Author: Albéric de Pertat <alberic@depertat.net>
* Copyright: (c) 2012 Albéric de Pertat (https://github.com/adepertat/geshi-nagios)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2012/01/19
*
* Nagios language file for GeSHi.
@@ -221,5 +221,3 @@ $language_data = array(
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php
index 14a2d23f..0ef4be0a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/netrexx.php
@@ -6,7 +6,7 @@
* Contributors:
* - Walter Pachl (pachl@chello.at)
* Copyright: (c) 2008 Jon Wolfers, (c) 2012 Walter Pachl
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/01/07
*
* NetRexx language file for GeSHi.
@@ -159,5 +159,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php
index 0dc6c161..134ccfc5 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/newlisp.php
@@ -4,7 +4,7 @@
* ----------
* Author: cormullion (cormullion@mac.com) Sept 2009
* Copyright: (c) 2009 Cormullion (http://unbalanced-parentheses.nfshost.com/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/09/30
*
* newLISP language file for GeSHi.
@@ -187,5 +187,3 @@ $language_data = array (
),
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nginx.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nginx.php
new file mode 100644
index 00000000..0d4fe3b4
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nginx.php
@@ -0,0 +1,868 @@
+<?php
+/*************************************************************************************
+ * nginx.php
+ * ------
+ * Author: Cliff Wells (cliff@nginx.org)
+ * Copyright: (c) Cliff Wells (http://wiki.nginx.org/CliffWells)
+ * Contributors:
+ * - Deoren Moor (http://www.whyaskwhy.org/blog/)
+ * - Thomas Joiner
+ * Release Version: 1.0.8.12
+ * Date Started: 2010/08/24
+ *
+ * nginx language file for GeSHi.
+ *
+ * Original release found at http://forum.nginx.org/read.php?2,123194,123210
+ *
+ * CHANGES
+ * -------
+ * 2012/08/29
+ * - Clean up the duplicate keywords
+ *
+ * 2012/08/26
+ * - Synchronized with directives listed on wiki/doc pages
+ * - Misc formatting tweaks and language fixes to pass langcheck
+ *
+ * 2010/08/24
+ * - First Release
+ *
+ * TODO (updated 2012/08/26)
+ * -------------------------
+ * - Verify PARSER_CONTROL items are correct
+ * - Verify REGEXPS
+ * - Verify ['STYLES']['REGEXPS'] entries
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'nginx',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array( // core module
+ // http://wiki.nginx.org/CoreModule
+ // http://nginx.org/en/docs/ngx_core_module.html
+ 'daemon',
+ 'debug_points',
+ 'env',
+ 'error_log',
+ 'events',
+ 'include',
+ 'lock_file',
+ 'master_process',
+ 'pcre_jit',
+ 'pid',
+ 'ssl_engine',
+ 'timer_resolution',
+ 'user',
+ 'worker_cpu_affinity',
+ 'worker_priority',
+ 'worker_processes',
+ 'worker_rlimit_core',
+ 'worker_rlimit_nofile',
+ 'worker_rlimit_sigpending',
+ 'working_directory',
+ // see EventsModule due to organization of wiki
+ //'accept_mutex',
+ //'accept_mutex_delay',
+ //'debug_connection',
+ //'multi_accept',
+ //'use',
+ //'worker_connections',
+ ),
+ 2 => array( // events module
+ // http://wiki.nginx.org/EventsModule
+ // http://nginx.org/en/docs/ngx_core_module.html
+ 'accept_mutex',
+ 'accept_mutex_delay',
+ 'debug_connection',
+ 'devpoll_changes',
+ 'devpoll_events',
+ 'kqueue_changes',
+ 'kqueue_events',
+ 'epoll_events',
+ 'multi_accept',
+ 'rtsig_signo',
+ 'rtsig_overflow_events',
+ 'rtsig_overflow_test',
+ 'rtsig_overflow_threshold',
+ 'use',
+ 'worker_connections',
+ ),
+ 3 => array( // http module
+ // http://wiki.nginx.org/HttpCoreModule
+ // http://nginx.org/en/docs/http/ngx_http_core_module.html
+ 'aio',
+ 'alias',
+ 'chunked_transfer_encoding',
+ 'client_body_buffer_size',
+ 'client_body_in_file_only',
+ 'client_body_in_single_buffer',
+ 'client_body_temp_path',
+ 'client_body_timeout',
+ 'client_header_buffer_size',
+ 'client_header_timeout',
+ 'client_max_body_size',
+ 'connection_pool_size',
+ 'default_type',
+ 'directio',
+ 'directio_alignment',
+ 'disable_symlinks',
+ 'error_page',
+ 'etag',
+ 'http',
+ 'if_modified_since',
+ 'ignore_invalid_headers',
+ 'internal',
+ 'keepalive_disable',
+ 'keepalive_requests',
+ 'keepalive_timeout',
+ 'large_client_header_buffers',
+ 'limit_except',
+ 'limit_rate',
+ 'limit_rate_after',
+ 'lingering_close',
+ 'lingering_time',
+ 'lingering_timeout',
+ 'listen',
+ 'location',
+ 'log_not_found',
+ 'log_subrequest',
+ 'max_ranges',
+ 'merge_slashes',
+ 'msie_padding',
+ 'msie_refresh',
+ 'open_file_cache',
+ 'open_file_cache_errors',
+ 'open_file_cache_min_uses',
+ 'open_file_cache_valid',
+ 'optimize_server_names',
+ 'port_in_redirect',
+ 'postpone_output',
+ 'read_ahead',
+ 'recursive_error_pages',
+ 'request_pool_size',
+ 'reset_timedout_connection',
+ 'resolver',
+ 'resolver_timeout',
+ 'root',
+ 'satisfy',
+ 'satisfy_any',
+ 'send_lowat',
+ 'send_timeout',
+ 'sendfile',
+ 'sendfile_max_chunk',
+ 'server',
+ 'server_name',
+ 'server_name_in_redirect',
+ 'server_names_hash_bucket_size',
+ 'server_names_hash_max_size',
+ 'server_tokens',
+ 'tcp_nodelay',
+ 'tcp_nopush',
+ 'try_files',
+ 'types',
+ 'types_hash_bucket_size',
+ 'types_hash_max_size',
+ 'underscores_in_headers',
+ 'variables_hash_bucket_size',
+ 'variables_hash_max_size',
+ ),
+ 4 => array( // upstream module
+ // http://wiki.nginx.org/HttpUpstreamModule
+ // http://nginx.org/en/docs/http/ngx_http_upstream_module.html
+ 'ip_hash',
+ 'keepalive',
+ 'least_conn',
+ // Use the documentation from the core module since every conf will have at least one of those.
+ //'server',
+ 'upstream',
+ ),
+ 5 => array( // access module
+ // http://wiki.nginx.org/HttpAccessModule
+ // http://nginx.org/en/docs/http/ngx_http_access_module.html
+ 'deny',
+ 'allow',
+ ),
+ 6 => array( // auth basic module
+ // http://wiki.nginx.org/HttpAuthBasicModule
+ // http://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
+ 'auth_basic',
+ 'auth_basic_user_file'
+ ),
+ 7 => array( // auto index module
+ // http://wiki.nginx.org/HttpAutoindexModule
+ // http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
+ 'autoindex',
+ 'autoindex_exact_size',
+ 'autoindex_localtime',
+ ),
+ 8 => array( // browser module
+ // http://wiki.nginx.org/HttpBrowserModule
+ // http://nginx.org/en/docs/http/ngx_http_browser_module.html
+ 'ancient_browser',
+ 'ancient_browser_value',
+ 'modern_browser',
+ 'modern_browser_value',
+ ),
+ 9 => array( // charset module
+ // http://wiki.nginx.org/HttpCharsetModule
+ // http://nginx.org/en/docs/http/ngx_http_charset_module.html
+ 'charset',
+ 'charset_map',
+ 'charset_types',
+ 'override_charset',
+ 'source_charset',
+ ),
+ 10 => array( // empty gif module
+ // http://wiki.nginx.org/HttpEmptyGifModule
+ // http://nginx.org/en/docs/http/ngx_http_empty_gif_module.html
+ 'empty_gif',
+ ),
+ 11 => array( // fastcgi module
+ // http://wiki.nginx.org/HttpFastcgiModule
+ // http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html
+ 'fastcgi_bind',
+ 'fastcgi_buffer_size',
+ 'fastcgi_buffers',
+ 'fastcgi_busy_buffers_size',
+ 'fastcgi_cache',
+ 'fastcgi_cache_bypass',
+ 'fastcgi_cache_key',
+ 'fastcgi_cache_lock',
+ 'fastcgi_cache_lock_timeout',
+ 'fastcgi_cache_methods',
+ 'fastcgi_cache_min_uses',
+ 'fastcgi_cache_path',
+ 'fastcgi_cache_use_stale',
+ 'fastcgi_cache_valid',
+ 'fastcgi_connect_timeout',
+ 'fastcgi_hide_header',
+ 'fastcgi_ignore_client_abort',
+ 'fastcgi_ignore_headers',
+ 'fastcgi_index',
+ 'fastcgi_intercept_errors',
+ 'fastcgi_keep_conn',
+ 'fastcgi_max_temp_file_size',
+ 'fastcgi_next_upstream',
+ 'fastcgi_no_cache',
+ 'fastcgi_param',
+ 'fastcgi_pass',
+ 'fastcgi_pass_header',
+ 'fastcgi_pass_request_body',
+ 'fastcgi_pass_request_headers',
+ 'fastcgi_read_timeout',
+ 'fastcgi_redirect_errors',
+ 'fastcgi_send_timeout',
+ 'fastcgi_split_path_info',
+ 'fastcgi_store',
+ 'fastcgi_store_access',
+ 'fastcgi_temp_file_write_size',
+ 'fastcgi_temp_path',
+ ),
+ 12 => array( // geo module
+ // http://wiki.nginx.org/HttpGeoModule
+ // http://nginx.org/en/docs/http/ngx_http_geo_module.html
+ 'geo'
+ ),
+ 13 => array( // gzip module
+ // http://wiki.nginx.org/HttpGzipModule
+ // http://nginx.org/en/docs/http/ngx_http_gzip_module.html
+ 'gzip',
+ 'gzip_buffers',
+ 'gzip_comp_level',
+ 'gzip_disable',
+ 'gzip_min_length',
+ 'gzip_http_version',
+ 'gzip_proxied',
+ 'gzip_types',
+ 'gzip_vary',
+ ),
+ 14 => array( // headers module
+ // http://wiki.nginx.org/HttpHeadersModule
+ // http://nginx.org/en/docs/http/ngx_http_headers_module.html
+ 'add_header',
+ 'expires',
+ ),
+ 15 => array( // index module
+ // http://wiki.nginx.org/HttpIndexModule
+ // http://nginx.org/en/docs/http/ngx_http_index_module.html
+ 'index',
+ ),
+ 16 => array( // limit requests module
+ // http://wiki.nginx.org/HttpLimitReqModule
+ // http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
+ 'limit_req',
+ 'limit_req_log_level',
+ 'limit_req_zone',
+ ),
+ 17 => array( // referer module
+ // http://wiki.nginx.org/HttpRefererModule
+ // http://nginx.org/en/docs/http/ngx_http_referer_module.html
+ 'referer_hash_bucket_size',
+ 'referer_hash_max_size',
+ 'valid_referers',
+ ),
+ 18 => array( // limit zone module
+ // deprecated in 1.1.8
+ // http://wiki.nginx.org/HttpLimitZoneModule
+ 'limit_zone',
+ // Covered by documentation for ngx_http_limit_conn_module
+ //'limit_conn',
+ ),
+ 19 => array( // limit connection module
+ // http://wiki.nginx.org/HttpLimitConnModule
+ // http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
+ 'limit_conn',
+ 'limit_conn_zone',
+ 'limit_conn_log_level',
+ ),
+ 20 => array( // log module
+ // http://wiki.nginx.org/HttpLogModule
+ // http://nginx.org/en/docs/http/ngx_http_log_module.html
+ 'access_log',
+ 'log_format',
+ // Appears to be deprecated
+ 'log_format_combined',
+ 'open_log_file_cache',
+ ),
+ 21 => array( // map module
+ // http://wiki.nginx.org/HttpMapModule
+ // http://nginx.org/en/docs/http/ngx_http_map_module.html
+ 'map',
+ 'map_hash_max_size',
+ 'map_hash_bucket_size',
+ ),
+ 22 => array( // memcached module
+ // http://wiki.nginx.org/HttpMemcachedModule
+ // http://nginx.org/en/docs/http/ngx_http_memcached_module.html
+ 'memcached_buffer_size',
+ 'memcached_connect_timeout',
+ 'memcached_next_upstream',
+ 'memcached_pass',
+ 'memcached_read_timeout',
+ 'memcached_send_timeout',
+ ),
+ 23 => array( // proxy module
+ // http://wiki.nginx.org/HttpProxyModule
+ // http://nginx.org/en/docs/http/ngx_http_proxy_module.html
+ 'proxy_bind',
+ 'proxy_buffer_size',
+ 'proxy_buffering',
+ 'proxy_buffers',
+ 'proxy_busy_buffers_size',
+ 'proxy_cache',
+ 'proxy_cache_bypass',
+ 'proxy_cache_key',
+ 'proxy_cache_lock',
+ 'proxy_cache_lock_timeout',
+ 'proxy_cache_methods',
+ 'proxy_cache_min_uses',
+ 'proxy_cache_path',
+ 'proxy_cache_use_stale',
+ 'proxy_cache_valid',
+ 'proxy_connect_timeout',
+ 'proxy_cookie_domain',
+ 'proxy_cookie_path',
+ 'proxy_headers_hash_bucket_size',
+ 'proxy_headers_hash_max_size',
+ 'proxy_hide_header',
+ 'proxy_http_version',
+ 'proxy_ignore_client_abort',
+ 'proxy_ignore_headers',
+ 'proxy_intercept_errors',
+ 'proxy_max_temp_file_size',
+ 'proxy_method',
+ 'proxy_next_upstream',
+ 'proxy_no_cache',
+ 'proxy_pass',
+ 'proxy_pass_header',
+ 'proxy_pass_request_body',
+ 'proxy_pass_request_headers',
+ 'proxy_redirect',
+ 'proxy_read_timeout',
+ 'proxy_redirect_errors',
+ 'proxy_send_lowat',
+ 'proxy_send_timeout',
+ 'proxy_set_body',
+ 'proxy_set_header',
+ 'proxy_ssl_session_reuse',
+ 'proxy_store',
+ 'proxy_store_access',
+ 'proxy_temp_file_write_size',
+ 'proxy_temp_path',
+ 'proxy_upstream_fail_timeout',
+ 'proxy_upstream_max_fails',
+ ),
+ 24 => array( // rewrite module
+ // http://wiki.nginx.org/HttpRewriteModule
+ // http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
+ 'break',
+ 'if',
+ 'return',
+ 'rewrite',
+ 'rewrite_log',
+ 'set',
+ 'uninitialized_variable_warn',
+ ),
+ 25 => array( // ssi module
+ // http://wiki.nginx.org/HttpSsiModule
+ // http://nginx.org/en/docs/http/ngx_http_ssi_module.html
+ 'ssi',
+ 'ssi_silent_errors',
+ 'ssi_types',
+ 'ssi_value_length',
+ ),
+ 26 => array( // user id module
+ // http://wiki.nginx.org/HttpUseridModule
+ // http://nginx.org/en/docs/http/ngx_http_userid_module.html
+ 'userid',
+ 'userid_domain',
+ 'userid_expires',
+ 'userid_name',
+ 'userid_p3p',
+ 'userid_path',
+ 'userid_service',
+ ),
+ 27 => array( // addition module
+ // http://wiki.nginx.org/HttpAdditionModule
+ // http://nginx.org/en/docs/http/ngx_http_addition_module.html
+ 'add_before_body',
+ 'add_after_body',
+ 'addition_types',
+ ),
+ 28 => array( // embedded Perl module
+ // http://wiki.nginx.org/HttpPerlModule
+ // http://nginx.org/en/docs/http/ngx_http_perl_module.html
+ 'perl',
+ 'perl_modules',
+ 'perl_require',
+ 'perl_set',
+ ),
+ 29 => array( // flash video files module
+ // http://wiki.nginx.org/HttpFlvModule
+ // http://nginx.org/en/docs/http/ngx_http_flv_module.html
+ 'flv',
+ ),
+ 30 => array( // gzip precompression module
+ // http://wiki.nginx.org/HttpGzipStaticModule
+ // http://nginx.org/en/docs/http/ngx_http_gzip_static_module.html
+ 'gzip_static',
+ // Removed to remove duplication with ngx_http_gzip_module
+ //'gzip_http_version',
+ //'gzip_proxied',
+ //'gzip_disable',
+ //'gzip_vary',
+ ),
+ 31 => array( // random index module
+ // http://wiki.nginx.org/HttpRandomIndexModule
+ // http://nginx.org/en/docs/http/ngx_http_random_index_module.html
+ 'random_index',
+ ),
+ 32 => array( // real ip module
+ // http://wiki.nginx.org/HttpRealipModule
+ // http://nginx.org/en/docs/http/ngx_http_realip_module.html
+ 'set_real_ip_from',
+ 'real_ip_header',
+ 'real_ip_recursive',
+ ),
+ 33 => array( // https module
+ // http://wiki.nginx.org/HttpSslModule
+ // http://nginx.org/en/docs/http/ngx_http_ssl_module.html
+ 'ssl',
+ 'ssl_certificate',
+ 'ssl_certificate_key',
+ 'ssl_ciphers',
+ 'ssl_client_certificate',
+ 'ssl_crl',
+ 'ssl_dhparam',
+ // Use the documentation for the core module since it links to the
+ // original properly
+ //'ssl_engine',
+ 'ssl_prefer_server_ciphers',
+ 'ssl_protocols',
+ 'ssl_session_cache',
+ 'ssl_session_timeout',
+ 'ssl_verify_client',
+ 'ssl_verify_depth',
+ ),
+ 34 => array( // status module
+ // http://wiki.nginx.org/HttpStubStatusModule
+ 'stub_status',
+ ),
+ 35 => array( // substitution module
+ // http://wiki.nginx.org/HttpSubModule
+ // http://nginx.org/en/docs/http/ngx_http_sub_module.html
+ 'sub_filter',
+ 'sub_filter_once',
+ 'sub_filter_types',
+ ),
+ 36 => array( // NginxHttpDavModule
+ // http://wiki.nginx.org/HttpDavModule
+ // http://nginx.org/en/docs/http/ngx_http_dav_module.html
+ 'dav_access',
+ 'dav_methods',
+ 'create_full_put_path',
+ 'min_delete_depth',
+ ),
+ 37 => array( // Google performance tools module
+ // http://wiki.nginx.org/GooglePerftoolsModule
+ 'google_perftools_profiles',
+ ),
+ 38 => array( // xslt module
+ // http://wiki.nginx.org/HttpXsltModule
+ // http://nginx.org/en/docs/http/ngx_http_xslt_module.html
+ 'xslt_entities',
+ 'xslt_param',
+ 'xslt_string_param',
+ 'xslt_stylesheet',
+ 'xslt_types',
+ ),
+ 39 => array( // uWSGI module
+ // http://wiki.nginx.org/HttpUwsgiModule
+ 'uwsgi_bind',
+ 'uwsgi_buffer_size',
+ 'uwsgi_buffering',
+ 'uwsgi_buffers',
+ 'uwsgi_busy_buffers_size',
+ 'uwsgi_cache',
+ 'uwsgi_cache_bypass',
+ 'uwsgi_cache_key',
+ 'uwsgi_cache_lock',
+ 'uwsgi_cache_lock_timeout',
+ 'uwsgi_cache_methods',
+ 'uwsgi_cache_min_uses',
+ 'uwsgi_cache_path',
+ 'uwsgi_cache_use_stale',
+ 'uwsgi_cache_valid',
+ 'uwsgi_connect_timeout',
+ 'uwsgi_hide_header',
+ 'uwsgi_ignore_client_abort',
+ 'uwsgi_ignore_headers',
+ 'uwsgi_intercept_errors',
+ 'uwsgi_max_temp_file_size',
+ 'uwsgi_modifier',
+ 'uwsgi_next_upstream',
+ 'uwsgi_no_cache',
+ 'uwsgi_param',
+ 'uwsgi_pass',
+ 'uwsgi_pass_header',
+ 'uwsgi_pass_request_body',
+ 'uwsgi_pass_request_headers',
+ 'uwsgi_read_timeout',
+ 'uwsgi_send_timeout',
+ 'uwsgi_store',
+ 'uwsgi_store_access',
+ 'uwsgi_string',
+ 'uwsgi_temp_file_write_size',
+ 'uwsgi_temp_path',
+ ),
+ 40 => array( // SCGI module
+ // http://wiki.nginx.org/HttpScgiModule
+ // Note: These directives were pulled from nginx 1.2.3
+ // ngx_http_scgi_module.c source file.
+ 'scgi_bind',
+ 'scgi_buffering',
+ 'scgi_buffers',
+ 'scgi_buffer_size',
+ 'scgi_busy_buffers_size',
+ 'scgi_cache',
+ 'scgi_cache_bypass',
+ 'scgi_cache_key',
+ 'scgi_cache_lock',
+ 'scgi_cache_lock_timeout',
+ 'scgi_cache_methods',
+ 'scgi_cache_min_uses',
+ 'scgi_cache_path',
+ 'scgi_cache_use_stale',
+ 'scgi_cache_valid',
+ 'scgi_connect_timeout',
+ 'scgi_hide_header',
+ 'scgi_ignore_client_abort',
+ 'scgi_ignore_headers',
+ 'scgi_intercept_errors',
+ 'scgi_max_temp_file_size',
+ 'scgi_next_upstream',
+ 'scgi_no_cache',
+ 'scgi_param',
+ 'scgi_pass',
+ 'scgi_pass_header',
+ 'scgi_pass_request_body',
+ 'scgi_pass_request_headers',
+ 'scgi_read_timeout',
+ 'scgi_send_timeout',
+ 'scgi_store',
+ 'scgi_store_access',
+ 'scgi_temp_file_write_size',
+ 'scgi_temp_path',
+ ),
+ 41 => array( // split clients module
+ // http://wiki.nginx.org/HttpSplitClientsModule
+ // http://nginx.org/en/docs/http/ngx_http_split_clients_module.html
+ 'split_clients',
+ ),
+ 42 => array( // X-Accel module
+ // http://wiki.nginx.org/X-accel
+ 'X-Accel-Redirect',
+ 'X-Accel-Buffering',
+ 'X-Accel-Charset',
+ 'X-Accel-Expires',
+ 'X-Accel-Limit-Rate',
+ ),
+ 43 => array( // degradation module
+ // http://wiki.nginx.org/HttpDegradationModule
+ 'degradation',
+ 'degrade',
+ ),
+ 44 => array( // GeoIP module
+ // http://wiki.nginx.org/HttpGeoipModule
+ // http://nginx.org/en/docs/http/ngx_http_geoip_module.html
+ 'geoip_country',
+ 'geoip_city',
+ 'geoip_proxy',
+ 'geoip_proxy_recursive',
+ ),
+ 45 => array( // Image filter module
+ // http://wiki.nginx.org/HttpImageFilterModule
+ // http://nginx.org/en/docs/http/ngx_http_image_filter_module.html
+ 'image_filter',
+ 'image_filter_buffer',
+ 'image_filter_jpeg_quality',
+ 'image_filter_sharpen',
+ 'image_filter_transparency',
+ ),
+ 46 => array( // MP4 module
+ // http://wiki.nginx.org/HttpMp4Module
+ // http://nginx.org/en/docs/http/ngx_http_mp4_module.html
+ 'mp4',
+ 'mp4_buffer_size',
+ 'mp4_max_buffer_size',
+ ),
+ 47 => array( // Secure Link module
+ // http://wiki.nginx.org/HttpSecureLinkModule
+ // http://nginx.org/en/docs/http/ngx_http_secure_link_module.html
+ 'secure_link',
+ 'secure_link_md',
+ 'secure_link_secret',
+ ),
+ 48 => array( // Mail Core module
+ // http://wiki.nginx.org/MailCoreModule
+ 'auth',
+ 'imap_capabilities',
+ 'imap_client_buffer',
+ 'pop_auth',
+ 'pop_capabilities',
+ 'protocol',
+ 'smtp_auth',
+ 'smtp_capabilities',
+ 'so_keepalive',
+ 'timeout',
+ // Removed to prioritize documentation for core module
+ //'listen',
+ //'server',
+ //'server_name',
+ ),
+ 49 => array( // Mail Auth module
+ // http://wiki.nginx.org/MailAuthModule
+ 'auth_http',
+ 'auth_http_header',
+ 'auth_http_timeout',
+ ),
+ 50 => array( // Mail Proxy module
+ // http://wiki.nginx.org/MailProxyModule
+ 'proxy',
+ 'proxy_buffer',
+ 'proxy_pass_error_message',
+ 'proxy_timeout',
+ 'xclient',
+ ),
+ 51 => array( // Mail SSL module
+ // http://wiki.nginx.org/MailSslModule
+ // Removed to prioritize documentation for http
+ //'ssl',
+ //'ssl_certificate',
+ //'ssl_certificate_key',
+ //'ssl_ciphers',
+ //'ssl_prefer_server_ciphers',
+ //'ssl_protocols',
+ //'ssl_session_cache',
+ //'ssl_session_timeout',
+ 'starttls',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '=', '~', ';'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true,
+ 10 => true,
+ 11 => true,
+ 12 => true,
+ 13 => true,
+ 14 => true,
+ 15 => true,
+ 16 => true,
+ 17 => true,
+ 18 => true,
+ 19 => true,
+ 20 => true,
+ 21 => true,
+ 22 => true,
+ 23 => true,
+ 24 => true,
+ 25 => true,
+ 26 => true,
+ 27 => true,
+ 28 => true,
+ 29 => true,
+ 30 => true,
+ 31 => true,
+ 32 => true,
+ 33 => true,
+ 34 => true,
+ 35 => true,
+ 36 => true,
+ 37 => true,
+ 38 => true,
+ 39 => true,
+ 40 => true,
+ 41 => true,
+ 42 => true,
+ 43 => true,
+ 44 => true,
+ 45 => true,
+ 46 => true,
+ 47 => true,
+ 48 => true,
+ 49 => true,
+ 50 => true,
+ 51 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000066;',
+ 4 => 'color: #000000; font-weight: bold;',
+ ),
+ 'SCRIPT' => array()
+ ),
+ 'URLS' => array(
+ 1 => 'http://wiki.nginx.org/CoreModule#{FNAME}',
+ 2 => 'http://wiki.nginx.org/NginxHttpEventsModule#{FNAME}',
+ 3 => 'http://wiki.nginx.org/NginxHttpCoreModule#{FNAME}',
+ 4 => 'http://wiki.nginx.org/NginxHttpUpstreamModule#{FNAME}',
+ 5 => 'http://wiki.nginx.org/NginxHttpAccessModule#{FNAME}',
+ 6 => 'http://wiki.nginx.org/NginxHttpAuthBasicModule#{FNAME}',
+ 7 => 'http://wiki.nginx.org/NginxHttpAutoIndexModule#{FNAME}',
+ 8 => 'http://wiki.nginx.org/NginxHttpBrowserModule#{FNAME}',
+ 9 => 'http://wiki.nginx.org/NginxHttpCharsetModule#{FNAME}',
+ 10 => 'http://wiki.nginx.org/NginxHttpEmptyGifModule#{FNAME}',
+ 11 => 'http://wiki.nginx.org/NginxHttpFcgiModule#{FNAME}',
+ 12 => 'http://wiki.nginx.org/NginxHttpGeoModule#{FNAME}',
+ 13 => 'http://wiki.nginx.org/NginxHttpGzipModule#{FNAME}',
+ 14 => 'http://wiki.nginx.org/NginxHttpHeadersModule#{FNAME}',
+ 15 => 'http://wiki.nginx.org/NginxHttpIndexModule#{FNAME}',
+ 16 => 'http://wiki.nginx.org/HttpLimitReqModule#{FNAME}',
+ 17 => 'http://wiki.nginx.org/NginxHttpRefererModule#{FNAME}',
+ 18 => 'http://wiki.nginx.org/NginxHttpLimitZoneModule#{FNAME}',
+ 19 => 'http://wiki.nginx.org/HttpLimitConnModule#{FNAME}',
+ 20 => 'http://wiki.nginx.org/NginxHttpLogModule#{FNAME}',
+ 21 => 'http://wiki.nginx.org/NginxHttpMapModule#{FNAME}',
+ 22 => 'http://wiki.nginx.org/NginxHttpMemcachedModule#{FNAME}',
+ 23 => 'http://wiki.nginx.org/NginxHttpProxyModule#{FNAME}',
+ 24 => 'http://wiki.nginx.org/NginxHttpRewriteModule#{FNAME}',
+ 25 => 'http://wiki.nginx.org/NginxHttpSsiModule#{FNAME}',
+ 26 => 'http://wiki.nginx.org/NginxHttpUserIdModule#{FNAME}',
+ 27 => 'http://wiki.nginx.org/NginxHttpAdditionModule#{FNAME}',
+ 28 => 'http://wiki.nginx.org/NginxHttpEmbeddedPerlModule#{FNAME}',
+ 29 => 'http://wiki.nginx.org/NginxHttpFlvStreamModule#{FNAME}',
+ 30 => 'http://wiki.nginx.org/NginxHttpGzipStaticModule#{FNAME}',
+ 31 => 'http://wiki.nginx.org/NginxHttpRandomIndexModule#{FNAME}',
+ 32 => 'http://wiki.nginx.org/NginxHttpRealIpModule#{FNAME}',
+ 33 => 'http://wiki.nginx.org/NginxHttpSslModule#{FNAME}',
+ 34 => 'http://wiki.nginx.org/NginxHttpStubStatusModule#{FNAME}',
+ 35 => 'http://wiki.nginx.org/NginxHttpSubModule#{FNAME}',
+ 36 => 'http://wiki.nginx.org/NginxHttpDavModule#{FNAME}',
+ 37 => 'http://wiki.nginx.org/NginxHttpGooglePerfToolsModule#{FNAME}',
+ 38 => 'http://wiki.nginx.org/NginxHttpXsltModule#{FNAME}',
+ 39 => 'http://wiki.nginx.org/NginxHttpUwsgiModule#{FNAME}',
+ 40 => 'http://wiki.nginx.org/HttpScgiModule',
+ 41 => 'http://wiki.nginx.org/HttpSplitClientsModule#{FNAME}',
+ 42 => 'http://wiki.nginx.org/X-accel#{FNAME}',
+ 43 => 'http://wiki.nginx.org/HttpDegradationModule#{FNAME}',
+ 44 => 'http://wiki.nginx.org/HttpGeoipModule#{FNAME}',
+ 45 => 'http://wiki.nginx.org/HttpImageFilterModule#{FNAME}',
+ 46 => 'http://wiki.nginx.org/HttpMp4Module#{FNAME}',
+ 47 => 'http://wiki.nginx.org/HttpSecureLinkModule#{FNAME}',
+ 48 => 'http://wiki.nginx.org/MailCoreModule#{FNAME}',
+ 49 => 'http://wiki.nginx.org/MailAuthModule#{FNAME}',
+ 50 => 'http://wiki.nginx.org/MailProxyModule#{FNAME}',
+ 51 => 'http://wiki.nginx.org/MailSslModule#{FNAME}',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*',
+ 4 => '&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nimrod.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nimrod.php
new file mode 100644
index 00000000..b288ae09
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nimrod.php
@@ -0,0 +1,201 @@
+<?php
+/*************************************************************************************
+ * nimrod.php
+ * ----------
+ * Author: Dennis Felsing (dennis@felsin9.de)
+ * Copyright: (c) 2014 Dennis Felsing
+ * Release Version: 1.0.8.12
+ * Date Started: 2014/07/15
+ *
+ * Nimrod language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2014/07/15 (1.0.8.12)
+ * - First Release
+ *
+ * TODO (updated 2014/07/15)
+ * -------------------------
+ * - Int literals like 50'u8
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Nimrod',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ //Longest quotemarks ALWAYS first
+ 'QUOTEMARKS' => array('"""', '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX_0O | GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F |
+ GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+
+ /*
+ ** Set 1: reserved words
+ ** http://nimrod-lang.org/manual.html#identifiers-keywords
+ */
+ 1 => array(
+ 'addr', 'and', 'as', 'asm', 'atomic',
+ 'bind', 'block', 'break',
+ 'case', 'cast', 'const', 'continue', 'converter',
+ 'discard', 'distinct', 'div', 'do',
+ 'elif', 'else', 'end', 'enum', 'except', 'export',
+ 'finally', 'for', 'from',
+ 'generic',
+ 'if', 'import', 'in', 'include', 'interface', 'is', 'isnot', 'iterator',
+ 'lambda', 'let',
+ 'macro', 'method', 'mixin', 'mod',
+ 'nil', 'not', 'notin',
+ 'object', 'of', 'or', 'out',
+ 'proc',
+ 'raise', 'ref', 'return',
+ 'shl', 'shr', 'static',
+ 'template', 'try', 'tuple', 'type',
+ 'using',
+ 'var',
+ 'when', 'while', 'with', 'without',
+ 'xor',
+ 'yield'
+ ),
+
+ 2 => array(
+ 'true', 'false'
+ ),
+
+ 3 => array(
+ /* system module */
+ 'abs', 'accumulateResult', 'add', 'addAndFetch', 'addQuitProc',
+ 'alloc', 'alloc0', 'allocCStringArray', 'allocShared',
+ 'allocShared0', 'assert', 'astToStr', 'atomicDec', 'atomicInc',
+ 'card', 'chr', 'clamp', 'close', 'cmp', 'compileOption',
+ 'compiles', 'contains', 'copy', 'copyMem', 'countdown', 'countup',
+ 'create', 'createShared', 'createSharedU', 'createU',
+ 'cstringArrayToSeq', 'currentSourcePath', 'dealloc',
+ 'deallocCStringArray', 'deallocShared', 'debugEcho', 'dec',
+ 'defined', 'definedInScope', 'del', 'delete', 'doAssert', 'each',
+ 'echo', 'endOfFile', 'equalMem', 'excl', 'failedAssertImpl',
+ 'fieldPairs', 'fields', 'fileHandle', 'find', 'finished',
+ 'flushFile', 'free', 'freeShared', 'GC_addCycleRoot', 'GC_disable',
+ 'GC_disableMarkAndSweep', 'GC_enable', 'GC_enableMarkAndSweep',
+ 'GC_fullCollect', 'GC_getStatistics', 'gcInvariant', 'GC_ref',
+ 'GC_setStrategy', 'GC_unref', 'getCurrentException',
+ 'getCurrentExceptionMsg', 'getFilePos', 'getFileSize',
+ 'getFreeMem', 'getOccupiedMem', 'getRefcount', 'getStackTrace',
+ 'getTotalMem', 'getTypeInfo', 'gorge', 'high', 'inc', 'incl',
+ 'insert', 'instantiationInfo', 'internalNew', 'isNil', 'isOnStack',
+ 'isStatic', 'items', 'len', 'likely', 'lines', 'locals', 'low',
+ 'map', 'max', 'min', 'moveMem', 'new', 'newException', 'newSeq',
+ 'newString', 'newStringOfCap', 'newWideCString', 'nimDestroyRange',
+ 'onFailedAssert', 'onRaise', 'open', 'ord', 'pairs', 'pop', 'pred',
+ 'quit', 'raiseAssert', 'rand', 'rawEnv', 'rawProc', 'readAll',
+ 'readBuffer', 'readBytes', 'readChar', 'readChars', 'readFile',
+ 'readLine', 'realloc', 'reallocShared', 'reopen', 'repr', 'reset',
+ 'resize', 'safeAdd', 'setControlCHook', 'setFilePos', 'setLen',
+ 'shallow', 'shallowCopy', 'sizeof', 'slurp', 'staticExec',
+ 'staticRead', 'stdmsg', 'substr', 'succ', 'swap', 'toBiggestFloat',
+ 'toBiggestInt', 'toFloat', 'toInt', 'toU16', 'toU32', 'toU8',
+ 'unlikely', 'unsafeNew', 'write', 'writeBuffer', 'writeBytes',
+ 'writeChars', 'writeFile', 'writeln', 'writeStackTrace', 'ze',
+ 'ze64', 'zeroMem'
+ ),
+
+ 4 => array(
+ 'auto', 'pointer', 'ptr', 'void', 'any', 'expr', 'stmt', 'typedesc',
+ 'int', 'int8', 'int16', 'int32', 'int64', 'float', 'float32', 'float64',
+ 'uint', 'uint8', 'uint16', 'uint32', 'uint64',
+ 'bool', 'char', 'range', 'array', 'seq', 'set', 'string', 'TSlice',
+ 'cstring', 'cint', 'clong', 'culong', 'cchar', 'cschar', 'cshort',
+ 'csize', 'clonglong', 'cfloat', 'cdouble', 'clongdouble', 'cuchar',
+ 'cushort', 'cuint', 'culonglong', 'cstringArray'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '*', '/', '%', '\\',
+ '+', '-', '~', '|',
+ '&',
+ '..',
+ '=', '<', '>', '!',
+ '@', '?'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #ff7700;font-weight:bold;', // Reserved
+ 2 => 'color: #008000;', // Built-ins + self
+ 3 => 'color: #dc143c;', // Standard lib
+ 4 => 'color: #0000cd;' // Special methods
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: black;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #483d8b;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff4500;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: black;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nsis.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nsis.php
index 35df9b4b..02b1eb27 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nsis.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/nsis.php
@@ -2,15 +2,18 @@
/*************************************************************************************
* nsis.php
* --------
- * Author: deguix (cevo_deguix@yahoo.com.br), Tux (http://tux.a4.cz/)
+ * Author: deguix (cevo_deguix@yahoo.com.br), Tux (http://tux.a4.cz/), Jan T. Sott (http://github.com/idleberg)
* Copyright: (c) 2005 deguix, 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/12/03
*
* Nullsoft Scriptable Install System language file for GeSHi.
*
* CHANGES
* -------
+ * 2014/04/23 (2.0.3)
+ * - Updated to NSIS 3.0a2
+ * - Removed deprecated commands
* 2005/12/03 (2.0.2)
* - Updated to NSIS 2.11.
* 2005/06/17 (2.0.1)
@@ -47,7 +50,7 @@
*
************************************************************************************/
-$language_data = array (
+$language_data = array(
'LANG_NAME' => 'NSIS',
'COMMENT_SINGLE' => array(1 => ';', 2 => '#'),
'COMMENT_MULTI' => array('/*' => '*/'),
@@ -56,27 +59,26 @@ $language_data = array (
'ESCAPE_CHAR' => '',
'KEYWORDS' => array(
1 => array(
- '!appendfile', '!addIncludeDir', '!addplugindir', '!cd', '!define', '!delfile', '!echo', '!else',
- '!endif', '!error', '!execute', '!ifdef', '!ifmacrodef', '!ifmacrondef', '!ifndef', '!include',
- '!insertmacro', '!macro', '!macroend', '!packhdr', '!tempfile', '!system', '!undef', '!verbose',
- '!warning'
+ '!addincludedir', '!addplugindir', '!appendfile', '!cd', '!define', '!delfile', '!echo', '!error',
+ '!execute', '!finalize', '!getdllversion', '!include', '!insertmacro', '!macro', '!macroend', '!makensis', '!packhdr',
+ '!searchparse', '!searchreplace', '!system', '!tempfile', '!undef', '!verbose', '!warning'
),
2 => array(
'AddBrandingImage', 'AllowRootDirInstall', 'AutoCloseWindow', 'BGFont',
'BGGradient', 'BrandingText', 'Caption', 'ChangeUI', 'CheckBitmap', 'CompletedText', 'ComponentText',
- 'CRCCheck', 'DetailsButtonText', 'DirShow', 'DirText', 'DirVar', 'DirVerify', 'FileErrorText',
+ 'CRCCheck', 'DetailsButtonText', 'DirText', 'DirVar', 'DirVerify', 'FileErrorText',
'Function', 'FunctionEnd', 'Icon', 'InstallButtonText', 'InstallColors', 'InstallDir',
- 'InstallDirRegKey', 'InstProgressFlags', 'InstType', 'LangString', 'LangStringUP', 'LicenseBkColor',
- 'LicenseData', 'LicenseForceSelection', 'LicenseLangString', 'LicenseText', 'LoadLanguageFile',
- 'MiscButtonText', 'Name', 'OutFile', 'Page', 'PageEx', 'PageExEnd', 'Section',
+ 'InstallDirRegKey', 'InstProgressFlags', 'InstType', 'LangString', 'LicenseBkColor',
+ 'LicenseData', 'LicenseForceSelection', 'LicenseLangString', 'LicenseText', 'LoadLanguageFile', 'ManifestDPIAware', 'ManifestSupportedOS',
+ 'MiscButtonText', 'Name', 'OutFile', 'Page', 'PageEx', 'PageExEnd', 'RequestExecutionLevel', 'Section',
'SectionEnd', 'SectionGroup', 'SectionGroupEnd', 'SetCompressor', 'SetFont', 'ShowInstDetails',
'ShowUninstDetails', 'SilentInstall', 'SilentUnInstall', 'SpaceTexts', 'SubCaption', 'SubSection',
- 'SubSectionEnd', 'UninstallButtonText', 'UninstallCaption', 'UninstallIcon', 'UninstallSubCaption',
- 'UninstallText', 'UninstPage', 'Var', 'VIAddVersionKey', 'VIProductVersion', 'WindowIcon', 'XPStyle'
+ 'SubSectionEnd', 'Unicode', 'UninstallButtonText', 'UninstallCaption', 'UninstallIcon', 'UninstallSubCaption',
+ 'UninstallText', 'UninstPage', 'Var', 'VIAddVersionKey', 'VIFileVersion', 'VIProductVersion', 'WindowIcon', 'XPStyle'
),
3 => array(
'AddSize', 'AllowSkipFiles', 'FileBufSize', 'GetInstDirError', 'PageCallbacks',
- 'SectionIn', 'SetCompress', 'SetCompressionLevel', 'SetCompressorDictSize',
+ 'SectionIn', 'SetCompress', 'SetCompressorDictSize',
'SetDatablockOptimize', 'SetDateSave', 'SetOverwrite', 'SetPluginUnload'
),
4 => array(
@@ -84,18 +86,18 @@ $language_data = array (
'CreateFont', 'CreateShortCut', 'Delete', 'DeleteINISec', 'DeleteINIStr', 'DeleteRegKey',
'DeleteRegValue', 'DetailPrint', 'EnableWindow', 'EnumRegKey', 'EnumRegValue', 'Exch', 'Exec',
'ExecShell', 'ExecWait', 'ExpandEnvStrings', 'File', 'FileClose', 'FileOpen', 'FileRead',
- 'FileReadByte', 'FileSeek', 'FileWrite', 'FileWriteByte', 'FindClose', 'FindFirst', 'FindNext',
+ 'FileReadByte', 'FileReadUTF16LE', 'FileReadWord', 'FileSeek', 'FileWrite', 'FileWriteByte', 'FileWriteUTF16LE', 'FileWriteWord', 'FindClose', 'FindFirst', 'FindNext',
'FindWindow', 'FlushINI', 'GetCurInstType', 'GetCurrentAddress', 'GetDlgItem', 'GetDLLVersion',
'GetDLLVersionLocal', 'GetErrorLevel', 'GetFileTime', 'GetFileTimeLocal', 'GetFullPathName',
- 'GetFunctionAddress', 'GetLabelAddress', 'GetTempFileName', 'GetWindowText', 'Goto', 'HideWindow',
+ 'GetFunctionAddress', 'GetLabelAddress', 'GetTempFileName', 'Goto', 'HideWindow',
'IfAbort', 'IfErrors', 'IfFileExists', 'IfRebootFlag', 'IfSilent', 'InitPluginsDir', 'InstTypeGetText',
'InstTypeSetText', 'IntCmp', 'IntCmpU', 'IntFmt', 'IntOp', 'IsWindow', 'LockWindow', 'LogSet', 'LogText',
- 'MessageBox', 'Nop', 'Pop', 'Push', 'Quit', 'ReadEnvStr', 'ReadIniStr', 'ReadRegDWORD', 'ReadRegStr',
+ 'MessageBox', 'Nop', 'Pop', 'Push', 'Quit', 'ReadEnvStr', 'ReadINIStr', 'ReadRegDWORD', 'ReadRegStr',
'Reboot', 'RegDLL', 'Rename', 'ReserveFile', 'Return', 'RMDir', 'SearchPath', 'SectionGetFlags',
'SectionGetInstTypes', 'SectionGetSize', 'SectionGetText', 'SectionSetFlags', 'SectionSetInstTypes',
'SectionSetSize', 'SectionSetText', 'SendMessage', 'SetAutoClose', 'SetBrandingImage', 'SetCtlColors',
'SetCurInstType', 'SetDetailsPrint', 'SetDetailsView', 'SetErrorLevel', 'SetErrors', 'SetFileAttributes',
- 'SetOutPath', 'SetRebootFlag', 'SetShellVarContext', 'SetSilent', 'ShowWindow', 'Sleep', 'StrCmp',
+ 'SetOutPath', 'SetRebootFlag', 'SetRegView', 'SetShellVarContext', 'SetSilent', 'ShowWindow', 'Sleep', 'StrCmp', 'StrCmpS',
'StrCpy', 'StrLen', 'UnRegDLL', 'WriteINIStr', 'WriteRegBin', 'WriteRegDWORD', 'WriteRegExpandStr',
'WriteRegStr', 'WriteUninstaller'
),
@@ -347,5 +349,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php
index b43f8140..30869ff3 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oberon2.php
@@ -4,7 +4,7 @@
* ----------
* Author: mbishop (mbishop@esoteriq.org)
* Copyright: (c) 2009 mbishop (mbishop@esoteriq.org)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/02/10
*
* Oberon-2 language file for GeSHi.
@@ -131,5 +131,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objc.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objc.php
index 2f5162d7..4da05b68 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objc.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objc.php
@@ -5,7 +5,7 @@
* Author: M. Uli Kusterer (witness.of.teachtext@gmx.net)
* Contributors: Quinn Taylor (quinntaylor@mac.com)
* Copyright: (c) 2008 Quinn Taylor, 2004 M. Uli Kusterer, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* Objective-C language file for GeSHi.
@@ -354,5 +354,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objeck.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objeck.php
index bf9dab56..34dd091f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objeck.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/objeck.php
@@ -4,7 +4,7 @@
* --------
* Author: Randy Hollines (objeck@gmail.com)
* Copyright: (c) 2010 Randy Hollines (http://code.google.com/p/objeck-lang/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/07/01
*
* Objeck Programming Language language file for GeSHi.
@@ -112,5 +112,3 @@ $language_data = array(
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml-brief.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml-brief.php
index b518adf8..84c74bfe 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml-brief.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml-brief.php
@@ -4,7 +4,7 @@
* ----------
* Author: Flaie (fireflaie@gmail.com)
* Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/08/27
*
* OCaml (Objective Caml) language file for GeSHi.
@@ -108,5 +108,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php
index ac6c29bc..364f5567 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ocaml.php
@@ -4,7 +4,7 @@
* ----------
* Author: Flaie (fireflaie@gmail.com)
* Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/08/27
*
* OCaml (Objective Caml) language file for GeSHi.
@@ -183,5 +183,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/octave.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/octave.php
index ccffcd97..4f6677f3 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/octave.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/octave.php
@@ -6,10 +6,10 @@
* Juan Pablo Carbajal (carbajal@ifi.uzh.ch)
* Copyright: (c) 2012 Carnë Draug
* (c) 2012 Juan Pablo Carbajal
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2012/05/22
*
- * GNU Octave M-file language file for GeSHi.
+ * GNU/Octave M-file language file for GeSHi.
*
* This file was heavily based on octave.lang from gtksourceview. If bugs are
* found and/or fixed on this file, please send them to the gtksourceview
@@ -41,7 +41,7 @@
************************************************************************************/
$language_data = array (
- 'LANG_NAME' => 'GNU Octave',
+ 'LANG_NAME' => 'GNU/Octave',
'COMMENT_SINGLE' => array(1 => '#', 2 => '%'),
// we can't use COMMENT_MULTI since start and end of block comments need to
// be alone on the line (optionally, with whitespace). See COMMENT_REGEXP
@@ -82,10 +82,14 @@ $language_data = array (
GESHI_NUMBER_FLT_SCI_ZERO,
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
'KEYWORDS' => array(
- // Data types
+ // Reserved words
1 => array(
- 'cell', 'char', 'double', 'uint8', 'uint16', 'uint32', 'uint64',
- 'int8','int16', 'int32', 'int64', 'logical', 'single', 'struct'
+ 'break', 'case', 'catch', 'continue', 'do', 'else', 'elseif', 'end',
+ 'end_try_catch', 'end_unwind_protect', 'endfor', 'endfunction',
+ 'endif', 'endparfor', 'endswitch', 'endwhile', 'for', 'function',
+ 'if', 'otherwise', 'parfor', 'return',
+ 'switch', 'try', 'until', 'unwind_protect',
+ 'unwind_protect_cleanup', 'varargin', 'varargout', 'while'
),
// Storage type
2 => array(
@@ -95,14 +99,10 @@ $language_data = array (
3 => array(
'ans'
),
- // Reserved words
+ // Data types
4 => array(
- 'break', 'case', 'catch', 'continue', 'do', 'else', 'elseif', 'end',
- 'end_try_catch', 'end_unwind_protect', 'endfor', 'endfunction',
- 'endif', 'endparfor', 'endswitch', 'endwhile', 'for', 'function',
- 'if', 'otherwise', 'parfor', 'return',
- 'switch', 'try', 'until', 'unwind_protect',
- 'unwind_protect_cleanup', 'varargin', 'varargout', 'while'
+ 'cell', 'char', 'double', 'uint8', 'uint16', 'uint32', 'uint64',
+ 'int8','int16', 'int32', 'int64', 'logical', 'single', 'struct'
),
// Built in
5 => array(
@@ -370,7 +370,7 @@ $language_data = array (
'__pathorig__', '__profiler_data__', '__profiler_enable__',
'__profiler_reset__', '__request_drawnow__', '__sort_rows_idx__',
'__token_count__', '__varval__', '__version_info__', '__which__'
- ),
+ ),
// Private Octave functions
8 => array(
'__all_opts__', '__contourc__', '__delaunayn__', '__dispatch__',
@@ -445,10 +445,10 @@ $language_data = array (
10 => true,
),
'URLS' => array(
- 1 => 'http://octave.sourceforge.net/octave/function/{FNAME}.html',
+ 1 => '',
2 => '',
3 => '',
- 4 => '',
+ 4 => 'http://octave.sourceforge.net/octave/function/{FNAME}.html',
5 => 'http://octave.sourceforge.net/octave/function/{FNAME}.html',
6 => 'http://octave.sourceforge.net/octave/function/{FNAME}.html',
7 => '',
@@ -466,8 +466,8 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(),
'STYLES' => array(
'COMMENTS' => array(
- 1 => 'color: #0000FF; font-style: italic;', // single quote strings
- 2 => 'color: #0000FF; font-style: italic;', // double quote strings
+ 1 => 'color: #0000FF; font-style: italic;', // comments with #
+ 2 => 'color: #0000FF; font-style: italic;', // comments with %
3 => 'color: #FF00FF; font-style: italic;', // single quote strings
4 => 'color: #FF00FF; font-style: italic;', // double quote strings
5 => 'color: #0000FF; font-style: italic;', // block comments
@@ -476,10 +476,10 @@ $language_data = array (
'MULTI' => 'color: #0000FF; font-style: italic;',
),
'KEYWORDS' => array(
- 1 => 'color: #2E8B57; font-weight:bold;', // Data types
+ 1 => 'color: #990000; font-weight:bold;', // Reserved words
2 => 'color: #2E8B57;', // Storage type
3 => 'color: #0000FF; font-weight:bold;', // Internal variable
- 4 => 'color: #990000; font-weight:bold;', // Reserved words
+ 4 => 'color: #2E8B57; font-weight:bold;', // Data types
5 => 'color: #008A8C; font-weight:bold;', // Built-in
6 => 'color: #008A8C;', // Octave functions
9 => 'color: #000000; font-weight:bold;', // Builtin Global Variables
@@ -511,5 +511,3 @@ $language_data = array (
'SCRIPT' => array(),
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oobas.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oobas.php
index ff75af65..4a314df4 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oobas.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oobas.php
@@ -4,7 +4,7 @@
* ---------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/30
*
* OpenOffice.org Basic language file for GeSHi.
@@ -131,5 +131,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php
index 62c6cc46..7eda35e3 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oorexx.php
@@ -6,7 +6,7 @@
* Contributors:
* - Walter Pachl (pachl@chello.at)
* Copyright: (c) 2008 Jon Wolfers, (c) 2012 Walter Pachl
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/01/07
*
* ooRexx language file for GeSHi.
@@ -167,5 +167,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php
index 16259e69..8681236c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle11.php
@@ -6,7 +6,7 @@
* Contributions:
* - Updated for 11i by Simon Redhead
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* Oracle 11i language file for GeSHi.
@@ -610,5 +610,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php
index 145bda40..acf6d994 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oracle8.php
@@ -4,7 +4,7 @@
* -----------
* Author: Guy Wicks (Guy.Wicks@rbs.co.uk)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* Oracle 8 language file for GeSHi.
@@ -492,5 +492,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php
index bc2ee656..2ee1998e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oxygene.php
@@ -4,7 +4,7 @@
* ----------
* Author: Carlo Kok (ck@remobjects.com), J�rja Norbert (jnorbi@vipmail.hu), Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2004 J�rja Norbert, Benny Baumann (BenBE@omorphia.de), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/01/11
*
* Delphi Prism (Oxygene) language file for GeSHi.
@@ -12,6 +12,8 @@
*
* CHANGES
* -------
+ * 2014/01/09 (1.0.8.12)
+ * - New keywords & updated languge name
* 2012/06/28 (1.0.8.11)
* - Added "write" keyword for properties
* 2010/01/11 (1.0.0)
@@ -38,7 +40,7 @@
************************************************************************************/
$language_data = array (
- 'LANG_NAME' => 'Oxygene (Delphi Prism)',
+ 'LANG_NAME' => 'Oxygene',
'COMMENT_SINGLE' => array(1 => '//'),
'COMMENT_MULTI' => array('(*' => '*)', '{' => '}'),
//Compiler directives
@@ -58,7 +60,7 @@ $language_data = array (
'false', 'new', 'ensure', 'require', 'on', 'event', 'delegate', 'method',
'raise', 'assembly', 'module', 'using','locking', 'old', 'invariants', 'operator',
'self', 'async', 'finalizer', 'where', 'yield', 'nullable', 'Future',
- 'From', 'Finally', 'dynamic'
+ 'From', 'Finally', 'dynamic', 'mapped'
),
2 => array(
'override', 'virtual', 'External', 'read', 'add', 'remove','final', 'abstract',
@@ -68,7 +70,8 @@ $language_data = array (
'Implies', 'Select', 'Order', 'By', 'Desc', 'Asc', 'Group', 'Join', 'Take',
'Skip', 'Concat', 'Union', 'Reverse', 'Distinct', 'Into', 'Equals', 'params',
'sequence', 'index', 'notify', 'Parallel', 'create', 'array', 'Queryable', 'Aspect',
- 'volatile', 'write'
+ 'volatile', 'write', 'autoreleasepool', 'await', 'block', 'deprecated', 'extension',
+ 'optional', 'raises', 'selector', 'strong', 'weak', 'tuple', 'unretained'
),
3 => array(
'chr', 'ord', 'inc', 'dec', 'assert', 'iff', 'assigned','futureAssigned', 'length', 'low', 'high', 'typeOf', 'sizeOf', 'disposeAndNil', 'Coalesce', 'unquote'
@@ -150,5 +153,3 @@ $language_data = array (
),
'TAB_WIDTH' => 2
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oz.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oz.php
index d24561bf..e31852d9 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oz.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/oz.php
@@ -4,7 +4,7 @@
* --------
* Author: Wolfgang Meyer (Wolfgang.Meyer@gmx.net)
* Copyright: (c) 2010 Wolfgang Meyer
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/01/03
*
* Oz language file for GeSHi.
@@ -140,5 +140,3 @@ $language_data = array(
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parasail.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parasail.php
index 864eba1e..98e2ab8e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parasail.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parasail.php
@@ -4,7 +4,7 @@
* -------
* Author: T. Taft (taft@adacore.com)
* Copyright: (c) 2012 AdaCore (http://adacore.com/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2012/08/02
*
* ParaSail language file for GeSHi.
@@ -58,10 +58,10 @@ $language_data = array (
),
3 => array(
'abstract', 'class',
- 'concurrent', 'const',
- 'end', 'extends', 'exports',
+ 'concurrent', 'const',
+ 'end', 'extends', 'exports',
'func', 'global', 'implements', 'import',
- 'interface', 'is', 'lambda', 'locked',
+ 'interface', 'is', 'lambda', 'locked',
'new', 'of', 'op', 'optional',
'private', 'queued', 'ref',
'separate', 'type', 'var',
@@ -92,9 +92,6 @@ $language_data = array (
'ESCAPE_CHAR' => array(
0 => 'color: #000099; font-weight: bold;'
),
- 'BRACKETS' => array(
- 0 => 'color: #66cc66;'
- ),
'STRINGS' => array(
0 => 'color: #7f007f;'
),
@@ -129,5 +126,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parigp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parigp.php
index c9c73095..1a5d4a73 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parigp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/parigp.php
@@ -3,8 +3,8 @@
* parigp.php
* --------
* Author: Charles R Greathouse IV (charles@crg4.com)
- * Copyright: 2011 Charles R Greathouse IV (http://math.crg4.com/)
- * Release Version: 1.0.8.11
+ * Copyright: 2011-2013 Charles R Greathouse IV (http://math.crg4.com/)
+ * Release Version: 1.0.8.12
* Date Started: 2011/05/11
*
* PARI/GP language file for GeSHi.
@@ -13,6 +13,8 @@
* -------
* 2011/07/09 (1.0.8.11)
* - First Release
+ * 2013/02/05 (1.0.8.12)
+ * - Added 2.6.0 commands, default, member functions, and error-handling
*
* TODO (updated 2011/07/09)
* -------------------------
@@ -53,51 +55,66 @@ $language_data = array(
),
'KEYWORDS' => array(
1 => array(
- 'addprimes','bestappr','bezout','bezoutres','bigomega','binomial',
- 'chinese','content','contfrac','contfracpnqn','core','coredisc',
- 'dirdiv','direuler','dirmul','divisors','eulerphi','factor',
- 'factorback','factorcantor','factorff','factorial','factorint',
- 'factormod','ffgen','ffinit','fflog','fforder','ffprimroot',
- 'fibonacci','gcd','hilbert','isfundamental','ispower','isprime',
- 'ispseudoprime','issquare','issquarefree','kronecker','lcm',
- 'moebius','nextprime','numbpart','numdiv','omega','partitions',
- 'polrootsff','precprime','prime','primepi','primes','qfbclassno',
- 'qfbcompraw','qfbhclassno','qfbnucomp','qfbnupow','qfbpowraw',
- 'qfbprimeform','qfbred','qfbsolve','quadclassunit','quaddisc',
- 'quadgen','quadhilbert','quadpoly','quadray','quadregulator',
- 'quadunit','removeprimes','sigma','sqrtint','stirling',
- 'sumdedekind','zncoppersmith','znlog','znorder','znprimroot',
- 'znstar','Col','List','Mat','Mod','Pol','Polrev','Qfb','Ser','Set',
- 'Str','Strchr','Strexpand','Strtex','Vec','Vecrev','Vecsmall',
- 'binary','bitand','bitneg','bitnegimply','bitor','bittest','bitxor',
- 'ceil','centerlift','component','conj','conjvec','denominator',
- 'floor','frac','imag','length','lift','norm','norml2','numerator',
- 'numtoperm','padicprec','permtonum','precision','random','real',
- 'round','simplify','sizebyte','sizedigit','truncate','valuation',
- 'variable','ellL1','elladd','ellak','ellan','ellanalyticrank',
- 'ellap','ellbil','ellchangecurve','ellchangepoint','ellconvertname',
- 'elldivpol','elleisnum','elleta','ellgenerators','ellglobalred',
- 'ellgroup','ellheight','ellheightmatrix','ellidentify','ellinit',
- 'ellisoncurve','ellj','elllocalred','elllog','elllseries',
- 'ellminimalmodel','ellmodulareqn','ellorder','ellordinate',
- 'ellpointtoz','ellpow','ellrootno','ellsearch','ellsigma','ellsub',
- 'elltaniyama','elltatepairing','elltors','ellweilpairing','ellwp',
- 'ellzeta','ellztopoint','bnfcertify','bnfcompress',
- 'bnfdecodemodule','bnfinit','bnfisintnorm','bnfisnorm',
- 'bnfisprincipal','bnfissunit','bnfisunit','bnfnarrow','bnfsignunit',
- 'bnfsunit','bnrL1','bnrclassno','bnrclassnolist','bnrconductor',
- 'bnrconductorofchar','bnrdisc','bnrdisclist','bnrinit',
- 'bnrisconductor','bnrisprincipal','bnrrootnumber','bnrstark',
- 'dirzetak','factornf','galoisexport','galoisfixedfield',
- 'galoisgetpol','galoisidentify','galoisinit','galoisisabelian',
- 'galoisisnormal','galoispermtopol','galoissubcyclo',
- 'galoissubfields','galoissubgroups','idealadd','idealaddtoone',
- 'idealappr','idealchinese','idealcoprime','idealdiv','idealfactor',
- 'idealfactorback','idealfrobenius','idealhnf','idealintersect',
- 'idealinv','ideallist','ideallistarch','ideallog','idealmin',
- 'idealmul','idealnorm','idealpow','idealprimedec','idealramgroups',
- 'idealred','idealstar','idealtwoelt','idealval','matalgtobasis',
- 'matbasistoalg','modreverse','newtonpoly','nfalgtobasis','nfbasis',
+ 'abs','acos','acosh','addhelp','addprimes','agm','alarm','algdep',
+ 'alias','allocatemem','apply','arg','asin','asinh','atan','atanh',
+ 'bernfrac','bernpol','bernreal','bernvec','besselh1','besselh2',
+ 'besseli','besselj','besseljh','besselk','besseln','bestappr',
+ 'bestapprPade','bezout','bezoutres','bigomega','binary','binomial',
+ 'bitand','bitneg','bitnegimply','bitor','bittest','bitxor',
+ 'bnfcertify','bnfcompress','bnfdecodemodule','bnfinit',
+ 'bnfisintnorm','bnfisnorm','bnfisprincipal','bnfissunit',
+ 'bnfisunit','bnfnarrow','bnfsignunit','bnfsunit','bnrclassno',
+ 'bnrclassnolist','bnrconductor','bnrconductorofchar','bnrdisc',
+ 'bnrdisclist','bnrinit','bnrisconductor','bnrisprincipal','bnrL1',
+ 'bnrrootnumber','bnrstark','break','breakpoint','Catalan','ceil',
+ 'centerlift','charpoly','chinese','cmp','Col','component','concat',
+ 'conj','conjvec','content','contfrac','contfracpnqn','core',
+ 'coredisc','cos','cosh','cotan','dbg_down','dbg_err','dbg_up',
+ 'dbg_x','default','denominator','deriv','derivnum','diffop',
+ 'digits','dilog','dirdiv','direuler','dirmul','dirzetak','divisors',
+ 'divrem','eint1','elladd','ellak','ellan','ellanalyticrank','ellap',
+ 'ellbil','ellcard','ellchangecurve','ellchangepoint',
+ 'ellconvertname','elldivpol','elleisnum','elleta','ellffinit',
+ 'ellfromj','ellgenerators','ellglobalred','ellgroup','ellheegner',
+ 'ellheight','ellheightmatrix','ellidentify','ellinit',
+ 'ellisoncurve','ellj','ellL1','elllocalred','elllog','elllseries',
+ 'ellminimalmodel','ellmodulareqn','ellmul','ellneg','ellorder',
+ 'ellordinate','ellpointtoz','ellrootno','ellsearch','ellsigma',
+ 'ellsub','elltaniyama','elltatepairing','elltors','ellweilpairing',
+ 'ellwp','ellzeta','ellztopoint','erfc','errname','error','eta','Euler',
+ 'eulerphi','eval','exp','extern','externstr','factor','factorback',
+ 'factorcantor','factorff','factorial','factorint','factormod',
+ 'factornf','factorpadic','ffgen','ffinit','fflog','ffnbirred',
+ 'fforder','ffprimroot','fibonacci','floor','for','forcomposite','fordiv','forell',
+ 'forprime','forqfvec','forstep','forsubgroup','forvec','frac','galoisexport',
+ 'galoisfixedfield','galoisgetpol','galoisidentify','galoisinit',
+ 'galoisisabelian','galoisisnormal','galoispermtopol',
+ 'galoissubcyclo','galoissubfields','galoissubgroups','gamma',
+ 'gammah','gcd','getenv','getheap','getrand','getstack','gettime',
+ 'global','hammingweight','hilbert','hyperu','I','idealadd',
+ 'idealaddtoone','idealappr','idealchinese','idealcoprime',
+ 'idealdiv','idealfactor','idealfactorback','idealfrobenius',
+ 'idealhnf','idealintersect','idealinv','ideallist','ideallistarch',
+ 'ideallog','idealmin','idealmul','idealnorm','idealnumden',
+ 'idealpow','idealprimedec','idealramgroups','idealred','idealstar',
+ 'idealtwoelt','idealval','if','iferr','iferrname','imag','incgam','incgamc','input',
+ 'install','intcirc','intformal','intfouriercos','intfourierexp',
+ 'intfouriersin','intfuncinit','intlaplaceinv','intmellininv',
+ 'intmellininvshort','intnum','intnuminit','intnuminitgen',
+ 'intnumromb','intnumstep','isfundamental','ispolygonal','ispower','ispowerful',
+ 'isprime','isprimepower','ispseudoprime','issquare','issquarefree','istotient',
+ 'kill','kronecker','lcm','length','lex','lift','lindep','List',
+ 'listcreate','listinsert','listkill','listpop','listput','listsort',
+ 'lngamma','local','log','Mat','matadjoint','matalgtobasis',
+ 'matbasistoalg','matcompanion','matconcat','matcontent','matdet','matdetint',
+ 'matdiagonal','mateigen','matfrobenius','mathess','mathilbert',
+ 'mathnf','mathnfmod','mathnfmodid','matid','matimage',
+ 'matimagecompl','matindexrank','matintersect','matinverseimage',
+ 'matisdiagonal','matker','matkerint','matmuldiagonal',
+ 'matmultodiagonal','matpascal','matrank','matrix','matrixqz',
+ 'matsize','matsnf','matsolve','matsolvemod','matsupplement',
+ 'mattranspose','max','min','minpoly','Mod','modreverse','moebius',
+ 'my','newtonpoly','next','nextprime','nfalgtobasis','nfbasis',
'nfbasistoalg','nfdetint','nfdisc','nfeltadd','nfeltdiv',
'nfeltdiveuc','nfeltdivmodpr','nfeltdivrem','nfeltmod','nfeltmul',
'nfeltmulmodpr','nfeltnorm','nfeltpow','nfeltpowmodpr',
@@ -105,63 +122,52 @@ $language_data = array(
'nffactorback','nffactormod','nfgaloisapply','nfgaloisconj',
'nfhilbert','nfhnf','nfhnfmod','nfinit','nfisideal','nfisincl',
'nfisisom','nfkermodpr','nfmodprinit','nfnewprec','nfroots',
- 'nfrootsof1','nfsnf','nfsolvemodpr','nfsubfields','polcompositum',
- 'polgalois','polred','polredabs','polredord','poltschirnhaus',
- 'rnfalgtobasis','rnfbasis','rnfbasistoalg','rnfcharpoly',
- 'rnfconductor','rnfdedekind','rnfdet','rnfdisc','rnfeltabstorel',
- 'rnfeltdown','rnfeltreltoabs','rnfeltup','rnfequation',
- 'rnfhnfbasis','rnfidealabstorel','rnfidealdown','rnfidealhnf',
- 'rnfidealmul','rnfidealnormabs','rnfidealnormrel',
+ 'nfrootsof1','nfsnf','nfsolvemodpr','nfsubfields','norm','norml2',
+ 'numbpart','numdiv','numerator','numtoperm','O','omega','padicappr',
+ 'padicfields','padicprec','partitions','permtonum','Pi','plot',
+ 'plotbox','plotclip','plotcolor','plotcopy','plotcursor','plotdraw',
+ 'ploth','plothraw','plothsizes','plotinit','plotkill','plotlines',
+ 'plotlinetype','plotmove','plotpoints','plotpointsize',
+ 'plotpointtype','plotrbox','plotrecth','plotrecthraw','plotrline',
+ 'plotrmove','plotrpoint','plotscale','plotstring','Pol',
+ 'polchebyshev','polcoeff','polcompositum','polcyclo','polcyclofactors','poldegree',
+ 'poldisc','poldiscreduced','polgalois','polgraeffe','polhensellift',
+ 'polhermite','polinterpolate','poliscyclo','poliscycloprod',
+ 'polisirreducible','pollead','pollegendre','polrecip','polred',
+ 'polredabs','polredbest','polredord','polresultant','Polrev','polroots',
+ 'polrootsff','polrootsmod','polrootspadic','polsturm','polsubcyclo',
+ 'polsylvestermatrix','polsym','poltchebi','poltschirnhaus',
+ 'polylog','polzagier','precision','precprime','prime','primepi',
+ 'primes','print','print1','printf','printsep','printtex','prod','prodeuler',
+ 'prodinf','psdraw','psi','psploth','psplothraw','Qfb','qfbclassno',
+ 'qfbcompraw','qfbhclassno','qfbnucomp','qfbnupow','qfbpowraw',
+ 'qfbprimeform','qfbred','qfbsolve','qfgaussred','qfjacobi','qflll',
+ 'qflllgram','qfminim','qfperfection','qfrep','qfsign',
+ 'quadclassunit','quaddisc','quadgen','quadhilbert','quadpoly',
+ 'quadray','quadregulator','quadunit','quit','random','randomprime','read',
+ 'readvec','real','removeprimes','return','rnfalgtobasis','rnfbasis',
+ 'rnfbasistoalg','rnfcharpoly','rnfconductor','rnfdedekind','rnfdet',
+ 'rnfdisc','rnfeltabstorel','rnfeltdown','rnfeltreltoabs','rnfeltup',
+ 'rnfequation','rnfhnfbasis','rnfidealabstorel','rnfidealdown',
+ 'rnfidealhnf','rnfidealmul','rnfidealnormabs','rnfidealnormrel',
'rnfidealreltoabs','rnfidealtwoelt','rnfidealup','rnfinit',
'rnfisabelian','rnfisfree','rnfisnorm','rnfisnorminit','rnfkummer',
'rnflllgram','rnfnormgroup','rnfpolred','rnfpolredabs',
- 'rnfpseudobasis','rnfsteinitz','subgrouplist','zetak','zetakinit',
- 'plot','plotbox','plotclip','plotcolor','plotcopy','plotcursor',
- 'plotdraw','ploth','plothraw','plothsizes','plotinit','plotkill',
- 'plotlines','plotlinetype','plotmove','plotpoints','plotpointsize',
- 'plotpointtype','plotrbox','plotrecth','plotrecthraw','plotrline',
- 'plotrmove','plotrpoint','plotscale','plotstring','psdraw',
- 'psploth','psplothraw','O','deriv','diffop','eval','factorpadic',
- 'intformal','padicappr','padicfields','polchebyshev','polcoeff',
- 'polcyclo','poldegree','poldisc','poldiscreduced','polhensellift',
- 'polhermite','polinterpolate','polisirreducible','pollead',
- 'pollegendre','polrecip','polresultant','polroots','polrootsmod',
- 'polrootspadic','polsturm','polsubcyclo','polsylvestermatrix',
- 'polsym','poltchebi','polzagier','serconvol','serlaplace',
- 'serreverse','subst','substpol','substvec','taylor','thue',
- 'thueinit','break','for','fordiv','forell','forprime','forstep',
- 'forsubgroup','forvec','if','next','return','until','while',
- 'Strprintf','addhelp','alarm','alias','allocatemem','apply',
- 'default','error','extern','externstr','getheap','getrand',
- 'getstack','gettime','global','input','install','kill','print1',
- 'print','printf','printtex','quit','read','readvec','select',
- 'setrand','system','trap','type','version','warning','whatnow',
- 'write1','write','writebin','writetex','divrem','lex','max','min',
- 'shift','shiftmul','sign','vecmax','vecmin','derivnum','intcirc',
- 'intfouriercos','intfourierexp','intfouriersin','intfuncinit',
- 'intlaplaceinv','intmellininv','intmellininvshort','intnum',
- 'intnuminit','intnuminitgen','intnumromb','intnumstep','prod',
- 'prodeuler','prodinf','solve','sum','sumalt','sumdiv','suminf',
- 'sumnum','sumnumalt','sumnuminit','sumpos','Euler','I','Pi','abs',
- 'acos','acosh','agm','arg','asin','asinh','atan','atanh','bernfrac',
- 'bernreal','bernvec','besselh1','besselh2','besseli','besselj',
- 'besseljh','besselk','besseln','cos','cosh','cotan','dilog','eint1',
- 'erfc','eta','exp','gamma','gammah','hyperu','incgam','incgamc',
- 'lngamma','log','polylog','psi','sin','sinh','sqr','sqrt','sqrtn',
- 'tan','tanh','teichmuller','theta','thetanullk','weber','zeta',
- 'algdep','charpoly','concat','lindep','listcreate','listinsert',
- 'listkill','listpop','listput','listsort','matadjoint',
- 'matcompanion','matdet','matdetint','matdiagonal','mateigen',
- 'matfrobenius','mathess','mathilbert','mathnf','mathnfmod',
- 'mathnfmodid','matid','matimage','matimagecompl','matindexrank',
- 'matintersect','matinverseimage','matisdiagonal','matker',
- 'matkerint','matmuldiagonal','matmultodiagonal','matpascal',
- 'matrank','matrix','matrixqz','matsize','matsnf','matsolve',
- 'matsolvemod','matsupplement','mattranspose','minpoly','qfgaussred',
- 'qfjacobi','qflll','qflllgram','qfminim','qfperfection','qfrep',
- 'qfsign','setintersect','setisset','setminus','setsearch','cmp',
- 'setunion','trace','vecextract','vecsort','vector','vectorsmall',
- 'vectorv','ellheegner'
+ 'rnfpseudobasis','rnfsteinitz','round','select','Ser','serconvol',
+ 'serlaplace','serreverse','Set','setbinop','setintersect',
+ 'setisset','setminus','setrand','setsearch','setunion','shift',
+ 'shiftmul','sigma','sign','simplify','sin','sinh','sizebyte',
+ 'sizedigit','solve','sqr','sqrt','sqrtint','sqrtn','sqrtnint','stirling','Str',
+ 'Strchr','Strexpand','Strprintf','Strtex','subgrouplist','subst',
+ 'substpol','substvec','sum','sumalt','sumdedekind','sumdiv','sumdivmult','sumdigits',
+ 'sumformal','suminf','sumnum','sumnumalt','sumnuminit','sumpos','system','tan',
+ 'tanh','taylor','teichmuller','theta','thetanullk','thue',
+ 'thueinit','trace','trap','truncate','type','until','valuation',
+ 'variable','Vec','vecextract','vecmax','vecmin','Vecrev',
+ 'vecsearch','Vecsmall','vecsort','vector','vectorsmall','vectorv',
+ 'version','warning','weber','whatnow','while','write','write1',
+ 'writebin','writetex','zeta','zetak','zetakinit','zncoppersmith',
+ 'znlog','znorder','znprimroot','znstar'
),
2 => array(
@@ -176,12 +182,16 @@ $language_data = array(
'lines','linewrap',/*'log',*/'logfile','new_galois_format','output',
'parisize','path','prettyprinter','primelimit','prompt_cont',
'prompt','psfile','readline','realprecision','recover','secure',
- 'seriesprecision',/*'simplify',*/'strictmatch','timer'
+ 'seriesprecision',/*'simplify',*/'sopath','strictmatch','timer'
),
4 => array(
- 'alarmer','archer','errpile','gdiver','impl','syntaxer','invmoder',
- 'overflower','talker','typeer','user'
+ '"e_ARCH"','"e_BUG"','"e_FILE"','"e_IMPL"','"e_PACKAGE"','"e_DIM"',
+ '"e_FLAG"','"e_NOTFUNC"','"e_OP"','"e_TYPE"','"e_TYPE2"',
+ '"e_PRIORITY"','"e_VAR"','"e_DOMAIN"','"e_MAXPRIME"','"e_MEM"',
+ '"e_OVERFLOW"','"e_PREC"','"e_STACK"','"e_ALARM"','"e_USER"',
+ '"e_CONSTPOL"','"e_COPRIME"','"e_INV"','"e_IRREDPOL"','"e_MISC"',
+ '"e_MODULUS"','"e_NEGVAL"','"e_PRIME"','"e_ROOTS0"','"e_SQRTN"'
)
),
'SYMBOLS' => array(
@@ -229,7 +239,8 @@ $language_data = array(
),
'REGEXPS' => array(
0 => 'color: #e07022', # Should be the same as keyword group 2
- 1 => 'color: #555555'
+ 1 => 'color: #555555',
+ 2 => 'color: #0000ff' # Should be the same as keyword group 1
),
'SCRIPT' => array()
),
@@ -245,7 +256,7 @@ $language_data = array(
),
'REGEXPS' => array(
0 => array( # types marked on variables
- GESHI_SEARCH => '(?<!\\\\ )"(t_(?:INT|REAL|INTMOD|FRAC|FFELT|COMPLEX|PADIC|QUAD|POLMOD|POL|SER|RFRAC|QFR|QFI|VEC|COL|MAT|LIST|STR|VECSMALL|CLOSURE))"',
+ GESHI_SEARCH => '(?<!\\\\ )"(t_(?:INT|REAL|INTMOD|FRAC|FFELT|COMPLEX|PADIC|QUAD|POLMOD|POL|SER|RFRAC|QFR|QFI|VEC|COL|MAT|LIST|STR|VECSMALL|CLOSURE|ERROR))"',
GESHI_REPLACE => '\\1',
GESHI_MODIFIERS => '',
GESHI_BEFORE => '"',
@@ -257,6 +268,13 @@ $language_data = array(
GESHI_MODIFIERS => '',
GESHI_BEFORE => '',
GESHI_AFTER => ''
+ ),
+ 2 => array( # member functions
+ GESHI_SEARCH => '(?<=[.])(a[1-6]|b[2-8]|c[4-6]|area|bid|bnf|clgp|cyc|diff|disc|[efjp]|fu|gen|index|mod|nf|no|omega|pol|reg|roots|sign|r[12]|t2|tate|tu|zk|zkst)\b',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
)
),
'STRICT_MODE_APPLIES' => GESHI_NEVER,
@@ -268,10 +286,8 @@ $language_data = array(
'default(' => ''
),
4 => array(
- 'trap(' => ''
+ 'iferrname(' => ''
),
),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pascal.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pascal.php
index de5ca871..5b9d986e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pascal.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pascal.php
@@ -4,7 +4,7 @@
* ----------
* Author: Tux (tux@inamil.cz)
* Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/26
*
* Pascal language file for GeSHi.
@@ -161,5 +161,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pcre.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pcre.php
index 13a2e024..29bbf472 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pcre.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pcre.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2010 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/05/22
*
* PCRE language file for GeSHi.
@@ -184,5 +184,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/per.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/per.php
index c42ddb58..b9117a2b 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/per.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/per.php
@@ -4,7 +4,7 @@
* --------
* Author: Lars Gersmann (lars.gersmann@gmail.com)
* Copyright: (c) 2007 Lars Gersmann
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/06/03
*
* Per (forms) (FOURJ's Genero 4GL) language file for GeSHi.
@@ -298,5 +298,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl.php
index 309ebd86..15ab836a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl.php
@@ -4,7 +4,7 @@
* --------
* Author: Andreas Gohr (andi@splitbrain.org), Ben Keen (ben.keen@gmail.com)
* Copyright: (c) 2004 Andreas Gohr, Ben Keen (http://www.benjaminkeen.org/), Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/20
*
* Perl language file for GeSHi.
@@ -209,5 +209,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl6.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl6.php
index 706eabcb..3bd5f0a2 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl6.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/perl6.php
@@ -4,7 +4,7 @@
* ---------
* Author: Kodi Arfer (kodiarfer {at} warpmail {period} net); forked from perl.php 1.0.8 by Andreas Gohr (andi@splitbrain.org), Ben Keen (ben.keen@gmail.com)
* Copyright: (c) 2009 Kodi Arfer, (c) 2004 Andreas Gohr, Ben Keen (http://www.benjaminkeen.org/), Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/11/07
*
* Perl 6 language file for GeSHi.
@@ -193,5 +193,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pf.php
index 818e11bc..37b30fe9 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pf.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pf.php
@@ -4,7 +4,7 @@
* --------
* Author: David Berard (david@nfrance.com)
* Copyright: (c) 2010 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/10/16
* Based on bash.php
*
@@ -174,5 +174,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php-brief.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php-brief.php
index a4804b4d..36a960a0 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php-brief.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php-brief.php
@@ -4,7 +4,7 @@
* -------------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/02
*
* PHP (brief version) language file for GeSHi.
@@ -218,5 +218,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php.php
index 2827457b..fa50ee88 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/php.php
@@ -4,7 +4,7 @@
* --------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/20
*
* PHP language file for GeSHi.
@@ -90,15 +90,15 @@ $language_data = array(
'as','break','case','continue','default','do','else','elseif',
'endfor','endforeach','endif','endswitch','endwhile','for',
'foreach','if','include','include_once','require','require_once',
- 'return','switch','throw','while',
+ 'return','switch','throw','while', 'yield',
'echo','print'
),
2 => array(
'&amp;new','&lt;/script&gt;','&lt;?php','&lt;script language',
'abstract','class','const','declare','extends','function','global',
- 'interface','namespace','new','private','protected','public','self',
- 'use','var'
+ 'implements', 'interface','namespace','new','private','protected',
+ 'public','self','trait','use','var'
),
3 => array(
'abs','acos','acosh','addcslashes','addslashes','aggregate',
@@ -1113,5 +1113,3 @@ $language_data = array(
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pic16.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pic16.php
index 46d7ac94..9058a868 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pic16.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pic16.php
@@ -4,7 +4,7 @@
* -------
* Author: Phil Mattison (mattison@ohmikron.com)
* Copyright: (c) 2008 Ohmikron Corp. (http://www.ohmikron.com/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/07/30
*
* PIC16 Assembler language file for GeSHi.
@@ -137,5 +137,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pike.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pike.php
index 743f711b..f5cc9050 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pike.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pike.php
@@ -4,7 +4,7 @@
* --------
* Author: Rick E. (codeblock@eighthbit.net)
* Copyright: (c) 2009 Rick E.
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/12/10
*
* Pike language file for GeSHi.
@@ -99,5 +99,3 @@ $language_data = array(
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pixelbender.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pixelbender.php
index 7b29ee6c..45afc173 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pixelbender.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pixelbender.php
@@ -4,7 +4,7 @@
* ----------------
* Author: Richard Olsson (r@richardolsson.se)
* Copyright: (c) 2008 Richard Olsson (richardolsson.se)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/11/16
*
* Pixel Bender 1.0 language file for GeSHi.
@@ -171,6 +171,3 @@ $language_data = array(
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pli.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pli.php
index c2998514..32a0cb75 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pli.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pli.php
@@ -4,7 +4,7 @@
* --------
* Author: Robert AH Prins (robert@prino.org)
* Copyright: (c) 2011 Robert AH Prins (http://hitchwiki.org/en/User:Prino)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2011/02/09
*
* PL/I language file for GeSHi.
@@ -196,5 +196,3 @@ $language_data = array(
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/plsql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/plsql.php
index 09f90a22..1a9edea7 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/plsql.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/plsql.php
@@ -4,7 +4,7 @@
* -------
* Author: Victor Engmark <victor.engmark@gmail.com>
* Copyright: (c) 2006 Victor Engmark (http://l0b0.net/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/10/26
*
* Oracle 9.2 PL/SQL language file for GeSHi.
@@ -252,5 +252,3 @@ $language_data = array (
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postgresql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postgresql.php
index 662fdd76..1f9d9e57 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postgresql.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postgresql.php
@@ -5,7 +5,7 @@
* Author: Christophe Chauvet (christophe_at_kryskool_dot_org)
* Contributors: Leif Biberg Kristensen <leif_at_solumslekt_dot_org> 2010-05-03
* Copyright: (c) 2007 Christophe Chauvet (http://kryskool.org/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/07/20
*
* PostgreSQL language file for GeSHi.
@@ -282,7 +282,4 @@ $language_data = array (
),
)
)
-
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postscript.php
new file mode 100644
index 00000000..cbd10f68
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/postscript.php
@@ -0,0 +1,217 @@
+<?php
+/*************************************************************************************
+ * c.php
+ * -----
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2014 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.12
+ * Date Started: 2014/08/10
+ *
+ * PostScript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2014/08/10 (1.0.8.12)
+ * - First Release
+ *
+ * TODO (updated 2014/08/10)
+ * -------------------------
+ * - Get a list of inbuilt functions to add
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'PostScript',
+ 'COMMENT_SINGLE' => array(0 => '%'),
+ 'COMMENT_MULTI' => array(), //array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ // Strings
+ 1 => "/\((?:\\\\[0-7]{3}|\\\\.|(?R)|[^)])*\)/s",
+ // Hex Strings
+ 2 => "/<(?!<)[0-9a-f\s]*>/si",
+ // ASCII-85 Strings
+ 3 => "/<~.*~>/si",
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ ),
+ 'NUMBERS' => array(
+ 0 => GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_NONSCI | GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 1 => "\d+#[0-9a-zA-Z]+"
+ ),
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'countexecstack', 'def', 'dup', 'exch', 'exec', 'execstack', 'exit',
+ 'for', 'if', 'ifelse', 'loop', 'pop', 'repeat',
+
+ 'abs', 'add', 'atan', 'ceiling', 'cos', 'div', 'exp', 'floor',
+ 'idiv', 'ln', 'log', 'mul', 'mod', 'neg', 'rand', 'round', 'rrand',
+ 'sin', 'sqrt', 'srand', 'sub', 'truncate',
+
+ 'and', 'bitshift', 'eq', 'ge', 'gt', 'le', 'lt', 'ne', 'not', 'or', 'xor',
+ ),
+ 2 => array(
+ 'false', 'null', 'true', 'version'
+ ),
+ 3 => array(
+ 'quit', 'start', 'stop', 'stopped',
+
+ 'clear', 'cleartomark', 'copy', 'count', 'counttomark', 'index', 'roll',
+
+ 'aload', 'astore', 'begin', 'countdictstack', 'currentdict',
+ 'dictstack', 'end', 'errordict', 'forall', 'get',
+ 'getinterval', 'known', 'length', 'load', 'maxlength', 'put',
+ 'putinterval', 'store', 'systemdict', 'userdict', 'where',
+
+ 'anchorsearch', 'search', 'token',
+
+ 'cvi', 'cvlit', 'cvn', 'cvr', 'cvrs', 'cvs', 'cvx', 'executeonly',
+ 'noaccess', 'rcheck', 'readonly', 'type', 'wcheck', 'xcheck',
+
+ 'bytesavailable', 'closefile', 'currentfile', 'echo', 'file',
+ 'flush', 'flushfile', 'print', 'prompt', 'pstack', 'read',
+ 'readhexstring', 'readline', 'readstring', 'resetfile', 'restore',
+ 'run', 'save', 'stack', 'status', 'vmstatus', 'write',
+ 'writehexstring', 'writestring',
+
+ 'bind', 'usertime',
+
+ 'currentdash', 'currentflat', 'currentgray', 'currenthsbcolor',
+ 'currentlinecap', 'currentlinejoin', 'currentlinewidth',
+ 'currentmiterlimit', 'currentrgbcolor', 'currentscreen',
+ 'currenttransfer', 'grestore', 'grestoreall', 'gsave',
+ 'initgraphics', 'proc', 'setdash', 'setflat', 'setgray',
+ 'sethsbcolor', 'setlinecap', 'setlinejoin', 'setlinewidth',
+ 'setmiterlimit', 'setrgbcolor', 'setscreen', 'settransfer',
+
+ 'concat', 'concatmatrix', 'currentmatrix', 'defaultmatrix',
+ 'dtransform', 'identmatrix', 'idtransform', 'initmatrix',
+ 'invertmatrix', 'itransform', 'rotate', 'scale', 'setmatrix',
+ 'transform', 'translate',
+
+ 'arc', 'arcn', 'arcto', 'charpath', 'clip', 'clippath', 'closepath',
+ 'currentpoint', 'curveto', 'eoclip', 'eofill', 'erasepage', 'fill',
+ 'flattenpath', 'image', 'imagemask', 'initclip', 'lineto', 'moveto',
+ 'newpath', 'pathbbox', 'pathforall', 'rcurveto', 'reversepath',
+ 'rlineto', 'rmoveto', 'stroke', 'strokepath',
+
+ 'banddevice', 'copypage', 'framedevice', 'nulldevice', 'renderbands',
+ 'showpage',
+
+ 'ashow', 'awidthshow', 'currentfont', 'definefont', 'findfont',
+ 'fontdict', 'kshow', 'makefont', 'scalefont', 'setfont', 'show',
+ 'stringwidth', 'widthshow', 'FontDirectory', 'StandardEncoding',
+
+ 'cachestatus', 'setcachedevice', 'setcachelimit', 'setcharwidth',
+
+ 'dictfull', 'dictstackoverflow', 'dictstackunderflow',
+ 'execstackoverflow', 'handleerror', 'interrupt', 'invalidaccess',
+ 'invalidexit', 'invalidfileaccess', 'invalidfont', 'invalidrestore',
+ 'ioerror', 'limitcheck', 'nocurrentpoint', 'rangecheck',
+ 'stackoverflow', 'stackunderflow', 'syntaxerror', 'timeout',
+ 'typecheck', 'undefined', 'undefinedfilename', 'undefinedresult',
+ 'unmatchedmark', 'unregistered', 'VMerror'
+ ),
+ 4 => array(
+ 'array', 'dict', 'mark', 'matrix', 'string'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('==', '=', '/', '//'),
+ 1 => array('[', ']'),
+ 2 => array('{', '}'),
+ 3 => array('<<', '>>')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066; font-weight: bold;',
+ 2 => 'color: #0000ff; font-weight: bold;',
+ 3 => 'color: #000000; font-weight: bold;',
+ 4 => 'color: #993333; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #333333; font-style: italic;',
+ 1 => 'color: #339933;',
+ 2 => 'color: #006600;',
+ 3 => 'color: #666666;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 'HARD' => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;',
+ 1 => 'color: #009900;',
+ 2 => 'color: #009900;',
+ 3 => 'color: #009900;'
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 1 => "#(?<=\\x2F)[\\w-]+#"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/povray.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/povray.php
index c0ce35ca..19d6c38e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/povray.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/povray.php
@@ -4,7 +4,7 @@
* --------
* Author: Carl Fürstenberg (azatoth@gmail.com)
* Copyright: © 2007 Carl Fürstenberg
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/07/11
*
* Povray language file for GeSHi.
@@ -196,4 +196,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powerbuilder.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powerbuilder.php
index d3fcf615..7b5c4fd8 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powerbuilder.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powerbuilder.php
@@ -4,7 +4,7 @@
* ------
* Author: Doug Porter (powerbuilder.geshi@gmail.com)
* Copyright: (c) 2009 Doug Porter
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/07/13
*
* PowerBuilder (PowerScript) language file for GeSHi.
@@ -414,5 +414,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powershell.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powershell.php
index bd78d739..2900abd4 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powershell.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/powershell.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Frode Aarebrot (frode@aarebrot.net)
* Copyright: (c) 2008 Frode Aarebrot (http://www.aarebrot.net)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/06/20
*
* PowerShell language file for GeSHi.
@@ -273,5 +273,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php
index 330db4b2..0668eec9 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/proftpd.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2010 Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2011/01/25
*
* ProFTPd language file for GeSHi.
@@ -353,22 +353,20 @@ $language_data = array (
'ENABLE_FLAGS' => array(
'BRACKETS' => GESHI_NEVER,
'SYMBOLS' => GESHI_NEVER
- ),
+ ),
'KEYWORDS' => array(
2 => array(
'DISALLOWED_BEFORE' => '(?<=\s)(?<!=)',
'DISALLOWED_AFTER' => '(?!\+)(?!\w)',
- ),
+ ),
3 => array(
'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
- ),
+ ),
4 => array(
'DISALLOWED_BEFORE' => '(?<=\s)(?<!=)',
'DISALLOWED_AFTER' => '(?!\+)(?=\/|(?:\s+\w+)*\s*&gt;)',
+ )
)
)
- )
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/progress.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/progress.php
index 79900261..dc99dbf4 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/progress.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/progress.php
@@ -4,7 +4,7 @@
* --------
* Author: Marco Aurelio de Pasqual (marcop@hdi.com.br)
* Copyright: (c) 2008 Marco Aurelio de Pasqual, Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/07/11
*
* Progress language file for GeSHi.
@@ -481,5 +481,3 @@ $language_data = array(
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/prolog.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/prolog.php
index a106a4e4..e8b5df09 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/prolog.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/prolog.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/10/02
*
* Prolog language file for GeSHi.
@@ -139,5 +139,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/properties.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/properties.php
index e1317b22..b7160183 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/properties.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/properties.php
@@ -4,7 +4,7 @@
* --------
* Author: Edy Hinzen
* Copyright: (c) 2009 Edy Hinzen
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/04/03
*
* Property language file for GeSHi.
@@ -123,5 +123,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/providex.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/providex.php
index 1e735bd0..e2ab4a56 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/providex.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/providex.php
@@ -4,7 +4,7 @@
* ----------
* Author: Jeff Wilder (jeff@coastallogix.com)
* Copyright: (c) 2008 Coastal Logix (http://www.coastallogix.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/10/18
*
* ProvideX language file for GeSHi.
@@ -295,5 +295,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/purebasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/purebasic.php
index d78ffe97..f685dd0e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/purebasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/purebasic.php
@@ -4,7 +4,7 @@
* -------
* Author: GuShH
* Copyright: (c) 2009 Gustavo Julio Fiorenza
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 13/06/2009
*
* PureBasic language file for GeSHi.
@@ -299,5 +299,3 @@ $language_data = array (
1 => false
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pycon.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pycon.php
index ac2b34d0..f6fd44be 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pycon.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pycon.php
@@ -4,7 +4,7 @@
* ----------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/30
*
* Python language file for GeSHi.
@@ -60,5 +60,3 @@ if(!isset($language_data['COMMENT_REGEXP'])) {
$language_data['COMMENT_REGEXP'][-1] = '/(?:^|\A\s)(?:>>>|\.\.\.)/m';
$language_data['STYLES']['COMMENTS'][-1] = 'color: #444444;';
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pys60.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pys60.php
index 59c67fac..9b83c747 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pys60.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/pys60.php
@@ -4,7 +4,7 @@
* ----------
* Author: Sohan Basak (ronnie.basak96 @gmail.com)
* Copyright: (c) 2012 Sohan Basak (http://tothepower.tk), Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2012/05/03
*
* Python for S60 language file for GeSHi.
@@ -269,5 +269,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/python.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/python.php
index ec9b17e6..2c524848 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/python.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/python.php
@@ -4,7 +4,7 @@
* ----------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/30
*
* Python language file for GeSHi.
@@ -240,5 +240,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php
index ade9928d..5840b58c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/q.php
@@ -4,7 +4,7 @@
* -----
* Author: Ian Roddis (ian.roddis@proteanmind.net)
* Copyright: (c) 2008 Ian Roddis (http://proteanmind.net)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/01/21
*
* q/kdb+ language file for GeSHi.
@@ -145,5 +145,3 @@ $language_data = array (
2 => '',
),
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php
index 3345e3c6..f4f898ea 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qbasic.php
@@ -4,7 +4,7 @@
* ----------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/20
*
* QBasic/QuickBASIC language file for GeSHi.
@@ -158,5 +158,3 @@ $language_data = array (
),
'TAB_WIDTH' => 8
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qml.php
new file mode 100644
index 00000000..1805f341
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/qml.php
@@ -0,0 +1,351 @@
+<?php
+/*************************************************************************************
+ * qml.php
+ * --------------
+ * Author: J-P Nurmi <jpnurmi@gmail.com>
+ * Copyright: (c) 2012-2014 J-P Nurmi <jpnurmi@gmail.com>
+ * Release Version: 1.0.8.12
+ * Date Started: 2012/08/19
+ *
+ * QML language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2014/06/29 (1.0.8.12)
+ * - Synced QML types from Qt 5.3:
+ * http://qt-project.org/doc/qt-5/modules-qml.html
+ * 2012/08/19
+ * - First version based on Qt 4
+ *
+ * TODO (updated 2014/06/29)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'QML',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ // comments
+ 2 => "/(?<=[\\s^])(s|tr|y)\\/(?!\*)(?!\s)(?:\\\\.|(?!\n)[^\\/\\\\])+(?<!\s)\\/(?!\s)(?:\\\\.|(?!\n)[^\\/\\\\])*(?<!\s)\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?!\*)(?!\s)(?:\\\\.|(?!\n)[^\\/\\\\])+(?<!\s)\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU",
+ // property binding
+ 3 => "/([a-z][\\w\\.]+)(?=:)/",
+ // TODO: property name (fixed length lookbehind assertion?)
+ 4 => "/(?<=property\\s+\\w+\\s+)(\\w+)/"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'as','break','case','catch','continue','const','debugger',
+ 'default','delete','do','else','finally','for','function',
+ 'if','import','in','instanceof','new','on','public','property',
+ 'readonly','return','signal','switch','this','throw','try',
+ 'typeof','while','with'
+ ),
+ 2 => array(
+ 'action','bool','color','date','double','enumeration','font',
+ 'int','list','matrix4x4','point','quaternion','real','rect',
+ 'size','string','time','url','var','variant','vector2d',
+ 'vector3d','vector4d','void'
+ ),
+ // http://qt-project.org/doc/qt-5/qtbluetooth-qmlmodule.html
+ 3 => array(
+ 'BluetoothDiscoveryModel','BluetoothService','BluetoothSocket'
+ ),
+ // http://qt-project.org/doc/qt-5/qtgraphicaleffects-qmlmodule.html
+ 4 => array(
+ 'Blend','BrightnessContrast','ColorOverlay','Colorize',
+ 'ConicalGradient','Desaturate','DirectionalBlur','Displace',
+ 'DropShadow','FastBlur','GammaAdjust','GaussianBlur','Glow',
+ 'HueSaturation','InnerShadow','LevelAdjust','LinearGradient',
+ 'MaskedBlur','OpacityMask','RadialBlur','RadialGradient',
+ 'RectangularGlow','RecursiveBlur','ThresholdMask','ZoomBlur'
+ ),
+ // http://qt-project.org/doc/qt-5/qtaudioengine-qmlmodule.html
+ 5 => array(
+ 'AttenuationModelLinear','AttenuationModelInverse','AudioCategory',
+ 'AudioEngine','AudioListener','AudioSample','PlayVariation',
+ 'Sound','SoundInstance'
+ ),
+ // http://qt-project.org/doc/qt-5/qtmultimedia-qmlmodule.html
+ 6 => array(
+ 'Video','Audio','MediaPlayer','Camera','CameraCapture',
+ 'CameraExposure','CameraFlash','CameraFocus','CameraImageProcessing',
+ 'CameraRecorder','Radio','RadioData','Torch','SoundEffect','VideoOutput'
+ ),
+ // http://qt-project.org/doc/qt-5/qtnfc-qmlmodule.html
+ 7 => array(
+ 'NdefFilter','NdefMimeRecord','NdefTextRecord','NdefUriRecord',
+ 'NearField','NdefRecord'
+ ),
+ // http://qt-project.org/doc/qt-5/qtpositioning-qmlmodule.html
+ 8 => array(
+ 'QtPositioning','CoordinateAnimation','Position','PositionSource',
+ 'Address','Location'
+ ),
+ // http://qt-project.org/doc/qt-5/qtqml-models-qmlmodule.html
+ 9 => array(
+ 'DelegateModel','DelegateModelGroup','ListModel','ListElement','ObjectModel'
+ ),
+ // http://qt-project.org/doc/qt-5/qtqml-qmlmodule.html
+ 10 => array(
+ 'Binding','Component','Connections','Date','Instantiator',
+ 'Locale','Number','Qt','QtObject','String','Timer'
+ ),
+ // http://qt-project.org/doc/qt-5/qt-labs-folderlistmodel-qmlmodule.html
+ 11 => array(
+ 'FolderListModel'
+ ),
+ // http://qt-project.org/doc/qt-5/qtquick-localstorage-qmlmodule.html
+ 12 => array(
+ 'openDatabaseSync'
+ ),
+ // http://qt-project.org/doc/qt-5/qt-labs-settings-qmlmodule.html
+ 13 => array(
+ 'Settings'
+ ),
+ // http://qt-project.org/doc/qt-5/qtquick-window-qmlmodule.html
+ 14 => array(
+ 'Screen','Window','CloseEvent'
+ ),
+ // http://qt-project.org/doc/qt-5/qtquick-xmllistmodel-qmlmodule.html
+ 15 => array(
+ 'XmlRole','XmlListModel'
+ ),
+ // http://qt-project.org/doc/qt-5/qtquick-particles-qmlmodule.html
+ 16 => array(
+ 'Age','AngleDirection','CumulativeDirection','CustomParticle',
+ 'Direction','EllipseShape','Friction','Gravity','GroupGoal',
+ 'ImageParticle','ItemParticle','LineShape','MaskShape','Affector',
+ 'Emitter','Shape','ParticleGroup','ParticlePainter','ParticleSystem',
+ 'Attractor','PointDirection','RectangleShape','SpriteGoal',
+ 'TargetDirection','TrailEmitter','Turbulence','Particle','Wander'
+ ),
+ // http://qt-project.org/doc/qt-5/qttest-qmlmodule.html
+ 17 => array(
+ 'SignalSpy','TestCase'
+ ),
+ // http://qt-project.org/doc/qt-5/qtquick-qmltypereference.html
+ 18 => array(
+ 'Item','Rectangle','Image','BorderImage','AnimatedImage','AnimatedSprite',
+ 'SpriteSequence','Text','Accessible','Gradient','GradientStop','SystemPalette',
+ 'Sprite','FontLoader','Repeater','Loader','Visual Item Transformations','Transform',
+ 'Scale','Rotation','Translate','MouseArea','Keys','KeyNavigation','FocusScope',
+ 'Flickable','PinchArea','MultiPointTouchArea','Drag','DropArea','TextInput',
+ 'TextEdit','IntValidator','DoubleValidator','RegExpValidator','TouchPoint',
+ 'PinchEvent','WheelEvent','MouseEvent','KeyEvent','DragEvent','Positioner',
+ 'Column','Row','Grid','Flow','LayoutMirroring','State','PropertyChanges',
+ 'StateGroup','StateChangeScript','ParentChange','AnchorChanges','Transition',
+ 'ViewTransition','SequentialAnimation','ParallelAnimation','Behavior','PropertyAction',
+ 'PauseAnimation','SmoothedAnimation','SpringAnimation','ScriptAction','PropertyAnimation',
+ 'NumberAnimation','Vector3dAnimation','ColorAnimation','RotationAnimation','ParentAnimation',
+ 'AnchorAnimation','PathAnimation','XAnimator','YAnimator','ScaleAnimator','RotationAnimator',
+ 'OpacityAnimator','UniformAnimator','Lower-level Animation Types','PathInterpolator',
+ 'AnimationController','Path','PathLine','PathQuad','PathCubic','PathArc','PathCurve',
+ 'PathSvg','PathAttribute','PathPercent','VisualItemModel','VisualDataModel','VisualDataGroup',
+ 'ListView','GridView','PathView','Package','Flipable','ShaderEffect','ShaderEffectSource',
+ 'GridMesh','WorkerScript','Canvas','Context2D','CanvasGradient','CanvasPixelArray',
+ 'CanvasImageData','TextMetrics',
+ ),
+ // http://qt-project.org/doc/qt-5/qtquick-controls-qmlmodule.html
+ 19 => array(
+ 'ApplicationWindow','BusyIndicator','Button','Calendar',
+ 'CheckBox','ComboBox','GroupBox','Label','Menu','MenuBar',
+ 'ProgressBar','RadioButton','ScrollView','Slider','SpinBox',
+ 'SplitView','StackView','StackViewDelegate','StatusBar',
+ 'Switch','Tab','TabView','TableView','TableViewColumn',
+ 'TextArea','TextField','ToolBar','ToolButton','Action',
+ 'ExclusiveGroup','MenuSeparator','MenuItem','Stack'
+ ),
+ // http://qt-project.org/doc/qt-5/qtquick-dialogs-qmlmodule.html
+ 20 => array(
+ 'Dialog','ColorDialog','FileDialog','FontDialog','MessageDialog'
+ ),
+ // http://qt-project.org/doc/qt-5/qtquick-layouts-qmlmodule.html
+ 21 => array(
+ 'Layout','RowLayout','ColumnLayout','GridLayout'
+ ),
+ // http://qt-project.org/doc/qt-5/qtsensors-qmlmodule.html
+ 22 => array(
+ 'Accelerometer','AccelerometerReading','Altimeter','AltimeterReading',
+ 'AmbientLightReading','AmbientLightSensor','AmbientTemperatureReading',
+ 'AmbientTemperatureSensor','Compass','CompassReading','Gyroscope',
+ 'GyroscopeReading','HolsterReading','HolsterSensor','IRProximityReading',
+ 'IRProximitySensor','LightReading','LightSensor','Magnetometer',
+ 'MagnetometerReading','OrientationReading','OrientationSensor',
+ 'PressureReading','PressureSensor','ProximityReading','ProximitySensor',
+ 'RotationReading','RotationSensor','SensorGesture','SensorGlobal',
+ 'SensorReading','TapReading','TapSensor','TiltReading','TiltSensor'
+ ),
+ // http://qt-project.org/doc/qt-5/qtwinextras-qmlmodule.html
+ 23 => array(
+ 'JumpListDestination','JumpListLink','JumpListSeparator','DwmFeatures',
+ 'JumpList','JumpListCategory','TaskbarButton','ThumbnailToolBar','ThumbnailToolButton'
+ ),
+ // http://qt-project.org/doc/qt-5/qtwebkit-qmlmodule.html
+ 24 => array(
+ 'WebView','WebLoadRequest'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}',
+ '+', '-', '*', '/', '%',
+ '!', '@', '&', '|', '^',
+ '<', '>', '=',
+ ',', ';', '?', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true,
+ 10 => true,
+ 11 => true,
+ 12 => true,
+ 13 => true,
+ 14 => true,
+ 15 => true,
+ 16 => true,
+ 17 => true,
+ 18 => true,
+ 19 => true,
+ 20 => true,
+ 21 => true,
+ 22 => true,
+ 23 => true,
+ 24 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #808041;',
+ 2 => 'color: #808041;',
+ 3 => 'color: #800780;',
+ 4 => 'color: #800780;',
+ 5 => 'color: #800780;',
+ 6 => 'color: #800780;',
+ 7 => 'color: #800780;',
+ 8 => 'color: #800780;',
+ 9 => 'color: #800780;',
+ 10 => 'color: #800780;',
+ 11 => 'color: #800780;',
+ 12 => 'color: #800780;',
+ 13 => 'color: #800780;',
+ 14 => 'color: #800780;',
+ 15 => 'color: #800780;',
+ 16 => 'color: #800780;',
+ 17 => 'color: #800780;',
+ 18 => 'color: #800780;',
+ 19 => 'color: #800780;',
+ 20 => 'color: #800780;',
+ 21 => 'color: #800780;',
+ 22 => 'color: #800780;',
+ 23 => 'color: #800780;',
+ 24 => 'color: #800780;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008025;',
+ 2 => 'color: #008025;',
+ 3 => 'color: #970009;',
+ 4 => 'color: #970009;',
+ 'MULTI' => 'color: #008025;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #008025;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #000000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://qt-project.org/doc/qt-5/qml-qtbluetooth-{FNAMEL}.html',
+ 4 => 'http://qt-project.org/doc/qt-5/qml-qtgraphicaleffects-{FNAMEL}.html',
+ 5 => 'http://qt-project.org/doc/qt-5/qml-qtaudioengine-{FNAMEL}.html',
+ 6 => 'http://qt-project.org/doc/qt-5/qml-qtmultimedia-{FNAMEL}.html',
+ 7 => 'http://qt-project.org/doc/qt-5/qml-qtnfc-{FNAMEL}.html',
+ 8 => 'http://qt-project.org/doc/qt-5/qml-qtpositioning-{FNAMEL}.html',
+ 9 => 'http://qt-project.org/doc/qt-5/qml-qtqml-models-{FNAMEL}.html',
+ 10 => 'http://qt-project.org/doc/qt-5/qml-qtqml-{FNAMEL}.html',
+ 11 => 'http://qt-project.org/doc/qt-5/qml-qt-labs-folderlistmodel-{FNAMEL}.html',
+ 12 => 'http://qt-project.org/doc/qt-5/qtquick-localstorage-qmlmodule.html',
+ 13 => 'http://qt-project.org/doc/qt-5/qml-qt-labs-settings-{FNAMEL}.html',
+ 14 => 'http://qt-project.org/doc/qt-5/qml-qtquick-window-{FNAMEL}.html',
+ 15 => 'http://qt-project.org/doc/qt-5/qml-qtquick-xmllistmodel-{FNAMEL}.html',
+ 16 => 'http://qt-project.org/doc/qt-5/qml-qtquick-particles-{FNAMEL}.html',
+ 17 => 'http://qt-project.org/doc/qt-5/qml-qttest-{FNAMEL}.html',
+ 18 => 'http://qt-project.org/doc/qt-5/qml-qtquick-{FNAMEL}.html',
+ 19 => 'http://qt-project.org/doc/qt-5/qml-qtquick-controls-{FNAMEL}.html',
+ 20 => 'http://qt-project.org/doc/qt-5/qml-qtquick-dialogs-{FNAMEL}.html',
+ 21 => 'http://qt-project.org/doc/qt-5/qml-qtquick-layouts-{FNAMEL}.html',
+ 22 => 'http://qt-project.org/doc/qt-5/qml-qtsensors-{FNAMEL}.html',
+ 23 => 'http://qt-project.org/doc/qt-5/qml-qtwinextras-{FNAMEL}.html',
+ 24 => 'http://qt-project.org/doc/qt-5/qml-qtwebkit-{FNAMEL}.html'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<script type="text/javascript">' => '</script>'
+ ),
+ 1 => array(
+ '<script language="javascript">' => '</script>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true
+ )
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/racket.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/racket.php
new file mode 100644
index 00000000..09d6bb88
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/racket.php
@@ -0,0 +1,964 @@
+<?php
+/*************************************************************************************
+ * racket.php
+ * ----------
+ * Author: Tim Brown (tim@timb.net)
+ * Copyright: (c) 2013 Tim Brown ((https://github.com/tim-brown/geshi-racket))
+ * Release Version: 1.0.8.12
+ * Date Started: 2013-03-01
+ *
+ * Racket language file for GeSHi.
+ *
+ * This file was built automatically from the scripts in
+ * https://github.com/tim-brown/geshi-racket (you didn't think
+ * I typed those NUMBER regular expressions in myself, did you?).
+ * Use those scripts to regenerate the file.
+ *
+ * CHANGES
+ * -------
+ * 1.0 (2013-03-31)
+ * - Initial Release1.1 (2013-03-31)
+ * - Added URLs, "symbol"-like identifiers moved to SYMBOLS*
+ *
+ * TODO (updated 2013-04-25)
+ * -------------------------
+ * * better handling of empty and short arrays
+ * * care more about indentation and line lengths
+ * * most compound regexps are possibly over-bracketed: (or ...)
+ * * most compound regexps are possibly over-bracketed: (: ...)
+ * * URLs should be formed more smartly by discovering which module they came from.
+ * * '|...| identifiers
+ * * #<<HERE strings
+ * * #;(...) comments -- (note: requires balanced parenthesis regexp)
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'Racket',
+ 'COMMENT_SINGLE' => array(
+ 1 => ';',
+ ),
+ 'COMMENT_MULTI' => array(
+ '#|' => '|#',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"',
+ ),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abort-current-continuation', 'abs', 'absolute-path?', 'acos', 'add1',
+ 'alarm-evt', 'always-evt', 'andmap', 'angle', 'append',
+ 'arithmetic-shift', 'arity-at-least-value', 'arity-at-least?',
+ 'asin', 'assf', 'assoc', 'assq', 'assv', 'atan', 'banner',
+ 'bitwise-and', 'bitwise-bit-field', 'bitwise-bit-set?',
+ 'bitwise-ior', 'bitwise-not', 'bitwise-xor', 'boolean?',
+ 'bound-identifier=?', 'box', 'box-cas!', 'box-immutable', 'box?',
+ 'break-enabled', 'break-thread', 'build-list', 'build-path',
+ 'build-path/convention-type', 'build-string', 'build-vector',
+ 'byte-pregexp', 'byte-pregexp?', 'byte-ready?', 'byte-regexp',
+ 'byte-regexp?', 'byte?', 'bytes', 'bytes&gt;?', 'bytes&lt;?',
+ 'bytes-&gt;immutable-bytes', 'bytes-&gt;list', 'bytes-&gt;path',
+ 'bytes-&gt;path-element', 'bytes-&gt;string/latin-1',
+ 'bytes-&gt;string/locale', 'bytes-&gt;string/utf-8',
+ 'bytes-append', 'bytes-close-converter', 'bytes-convert',
+ 'bytes-convert-end', 'bytes-converter?', 'bytes-copy',
+ 'bytes-copy!', 'bytes-fill!', 'bytes-length',
+ 'bytes-open-converter', 'bytes-ref', 'bytes-set!',
+ 'bytes-utf-8-index', 'bytes-utf-8-length', 'bytes-utf-8-ref',
+ 'bytes=?', 'bytes?', 'caaaar', 'caaadr', 'caaar', 'caadar',
+ 'caaddr', 'caadr', 'caar', 'cadaar', 'cadadr', 'cadar', 'caddar',
+ 'cadddr', 'caddr', 'cadr', 'call-in-nested-thread',
+ 'call-with-break-parameterization',
+ 'call-with-composable-continuation',
+ 'call-with-continuation-barrier', 'call-with-continuation-prompt',
+ 'call-with-current-continuation', 'call-with-escape-continuation',
+ 'call-with-exception-handler',
+ 'call-with-immediate-continuation-mark',
+ 'call-with-parameterization', 'call-with-semaphore',
+ 'call-with-semaphore/enable-break', 'call-with-values', 'call/cc',
+ 'call/ec', 'car', 'cdaaar', 'cdaadr', 'cdaar', 'cdadar', 'cdaddr',
+ 'cdadr', 'cdar', 'cddaar', 'cddadr', 'cddar', 'cdddar', 'cddddr',
+ 'cdddr', 'cddr', 'cdr', 'ceiling', 'channel-get', 'channel-put',
+ 'channel-put-evt', 'channel-put-evt?', 'channel-try-get',
+ 'channel?', 'chaperone-box', 'chaperone-continuation-mark-key',
+ 'chaperone-evt', 'chaperone-hash', 'chaperone-of?',
+ 'chaperone-procedure', 'chaperone-prompt-tag', 'chaperone-struct',
+ 'chaperone-struct-type', 'chaperone-vector', 'chaperone?',
+ 'char&gt;=?', 'char&gt;?', 'char&lt;=?', 'char&lt;?',
+ 'char-&gt;integer', 'char-alphabetic?', 'char-blank?',
+ 'char-ci&gt;=?', 'char-ci&gt;?', 'char-ci&lt;=?', 'char-ci&lt;?',
+ 'char-ci=?', 'char-downcase', 'char-foldcase',
+ 'char-general-category', 'char-graphic?', 'char-iso-control?',
+ 'char-lower-case?', 'char-numeric?', 'char-punctuation?',
+ 'char-ready?', 'char-symbolic?', 'char-title-case?',
+ 'char-titlecase', 'char-upcase', 'char-upper-case?',
+ 'char-utf-8-length', 'char-whitespace?', 'char=?', 'char?',
+ 'check-duplicate-identifier',
+ 'checked-procedure-check-and-extract', 'choice-evt',
+ 'cleanse-path', 'close-input-port', 'close-output-port',
+ 'collect-garbage', 'collection-file-path', 'collection-path',
+ 'compile', 'compile-allow-set!-undefined',
+ 'compile-context-preservation-enabled',
+ 'compile-enforce-module-constants', 'compile-syntax',
+ 'compiled-expression?', 'compiled-module-expression?',
+ 'complete-path?', 'complex?', 'compose', 'compose1', 'cons',
+ 'continuation-mark-key?', 'continuation-mark-set-&gt;context',
+ 'continuation-mark-set-&gt;list',
+ 'continuation-mark-set-&gt;list*', 'continuation-mark-set-first',
+ 'continuation-mark-set?', 'continuation-marks',
+ 'continuation-prompt-available?', 'continuation-prompt-tag?',
+ 'continuation?', 'copy-file', 'cos',
+ 'current-break-parameterization', 'current-code-inspector',
+ 'current-command-line-arguments', 'current-compile',
+ 'current-compiled-file-roots', 'current-continuation-marks',
+ 'current-custodian', 'current-directory', 'current-drive',
+ 'current-error-port', 'current-eval',
+ 'current-evt-pseudo-random-generator', 'current-gc-milliseconds',
+ 'current-get-interaction-input-port',
+ 'current-inexact-milliseconds', 'current-input-port',
+ 'current-inspector', 'current-library-collection-paths',
+ 'current-load', 'current-load-extension',
+ 'current-load-relative-directory', 'current-load/use-compiled',
+ 'current-locale', 'current-logger', 'current-memory-use',
+ 'current-milliseconds', 'current-module-declare-name',
+ 'current-module-declare-source', 'current-module-name-resolver',
+ 'current-namespace', 'current-output-port',
+ 'current-parameterization', 'current-preserved-thread-cell-values',
+ 'current-print', 'current-process-milliseconds',
+ 'current-prompt-read', 'current-pseudo-random-generator',
+ 'current-read-interaction', 'current-reader-guard',
+ 'current-readtable', 'current-seconds', 'current-security-guard',
+ 'current-subprocess-custodian-mode', 'current-thread',
+ 'current-thread-group', 'current-thread-initial-stack-size',
+ 'current-write-relative-directory', 'custodian-box-value',
+ 'custodian-box?', 'custodian-limit-memory',
+ 'custodian-managed-list', 'custodian-memory-accounting-available?',
+ 'custodian-require-memory', 'custodian-shutdown-all', 'custodian?',
+ 'custom-print-quotable-accessor', 'custom-print-quotable?',
+ 'custom-write-accessor', 'custom-write?', 'date*-nanosecond',
+ 'date*-time-zone-name', 'date*?', 'date-day', 'date-dst?',
+ 'date-hour', 'date-minute', 'date-month', 'date-second',
+ 'date-time-zone-offset', 'date-week-day', 'date-year',
+ 'date-year-day', 'date?', 'datum-&gt;syntax',
+ 'datum-intern-literal', 'default-continuation-prompt-tag',
+ 'delete-directory', 'delete-file', 'denominator',
+ 'directory-exists?', 'directory-list', 'display', 'displayln',
+ 'double-flonum?', 'dump-memory-stats', 'dynamic-require',
+ 'dynamic-require-for-syntax', 'dynamic-wind', 'eof', 'eof-object?',
+ 'ephemeron-value', 'ephemeron?', 'eprintf', 'eq-hash-code', 'eq?',
+ 'equal-hash-code', 'equal-secondary-hash-code', 'equal?',
+ 'equal?/recur', 'eqv-hash-code', 'eqv?', 'error',
+ 'error-display-handler', 'error-escape-handler',
+ 'error-print-context-length', 'error-print-source-location',
+ 'error-print-width', 'error-value-&gt;string-handler', 'eval',
+ 'eval-jit-enabled', 'eval-syntax', 'even?', 'evt?',
+ 'exact-&gt;inexact', 'exact-integer?',
+ 'exact-nonnegative-integer?', 'exact-positive-integer?', 'exact?',
+ 'executable-yield-handler', 'exit', 'exit-handler',
+ 'exn-continuation-marks', 'exn-message', 'exn:break-continuation',
+ 'exn:break:hang-up?', 'exn:break:terminate?', 'exn:break?',
+ 'exn:fail:contract:arity?', 'exn:fail:contract:continuation?',
+ 'exn:fail:contract:divide-by-zero?',
+ 'exn:fail:contract:non-fixnum-result?',
+ 'exn:fail:contract:variable-id', 'exn:fail:contract:variable?',
+ 'exn:fail:contract?', 'exn:fail:filesystem:errno-errno',
+ 'exn:fail:filesystem:errno?', 'exn:fail:filesystem:exists?',
+ 'exn:fail:filesystem:version?', 'exn:fail:filesystem?',
+ 'exn:fail:network:errno-errno', 'exn:fail:network:errno?',
+ 'exn:fail:network?', 'exn:fail:out-of-memory?',
+ 'exn:fail:read-srclocs', 'exn:fail:read:eof?',
+ 'exn:fail:read:non-char?', 'exn:fail:read?',
+ 'exn:fail:syntax-exprs', 'exn:fail:syntax:unbound?',
+ 'exn:fail:syntax?', 'exn:fail:unsupported?', 'exn:fail:user?',
+ 'exn:fail?', 'exn:srclocs-accessor', 'exn:srclocs?', 'exn?', 'exp',
+ 'expand', 'expand-once', 'expand-syntax', 'expand-syntax-once',
+ 'expand-syntax-to-top-form', 'expand-to-top-form',
+ 'expand-user-path', 'expt', 'file-exists?',
+ 'file-or-directory-identity', 'file-or-directory-modify-seconds',
+ 'file-or-directory-permissions', 'file-position', 'file-position*',
+ 'file-size', 'file-stream-buffer-mode', 'file-stream-port?',
+ 'filesystem-root-list', 'filter', 'find-executable-path',
+ 'find-library-collection-paths', 'find-system-path', 'findf',
+ 'fixnum?', 'floating-point-bytes-&gt;real', 'flonum?', 'floor',
+ 'flush-output', 'foldl', 'foldr', 'for-each', 'format', 'fprintf',
+ 'free-identifier=?', 'free-label-identifier=?',
+ 'free-template-identifier=?', 'free-transformer-identifier=?',
+ 'gcd', 'generate-temporaries', 'gensym', 'get-output-bytes',
+ 'get-output-string', 'getenv', 'global-port-print-handler',
+ 'guard-evt', 'handle-evt', 'handle-evt?', 'hash', 'hash-&gt;list',
+ 'hash-copy', 'hash-count', 'hash-eq?', 'hash-equal?', 'hash-eqv?',
+ 'hash-for-each', 'hash-has-key?', 'hash-iterate-first',
+ 'hash-iterate-key', 'hash-iterate-next', 'hash-iterate-value',
+ 'hash-keys', 'hash-map', 'hash-placeholder?', 'hash-ref',
+ 'hash-ref!', 'hash-remove', 'hash-remove!', 'hash-set',
+ 'hash-set!', 'hash-set*', 'hash-set*!', 'hash-update',
+ 'hash-update!', 'hash-values', 'hash-weak?', 'hash?', 'hasheq',
+ 'hasheqv', 'identifier-binding', 'identifier-label-binding',
+ 'identifier-prune-lexical-context',
+ 'identifier-prune-to-source-module',
+ 'identifier-remove-from-definition-context',
+ 'identifier-template-binding', 'identifier-transformer-binding',
+ 'identifier?', 'imag-part', 'immutable?', 'impersonate-box',
+ 'impersonate-continuation-mark-key', 'impersonate-hash',
+ 'impersonate-procedure', 'impersonate-prompt-tag',
+ 'impersonate-struct', 'impersonate-vector', 'impersonator-of?',
+ 'impersonator-prop:application-mark',
+ 'impersonator-property-accessor-procedure?',
+ 'impersonator-property?', 'impersonator?', 'in-cycle',
+ 'in-directory', 'in-hash', 'in-hash-keys', 'in-hash-pairs',
+ 'in-hash-values', 'in-parallel', 'in-sequences',
+ 'in-values*-sequence', 'in-values-sequence', 'inexact-&gt;exact',
+ 'inexact-real?', 'inexact?', 'input-port?', 'inspector?',
+ 'integer-&gt;char', 'integer-&gt;integer-bytes',
+ 'integer-bytes-&gt;integer', 'integer-length', 'integer-sqrt',
+ 'integer-sqrt/remainder', 'integer?',
+ 'internal-definition-context-seal', 'internal-definition-context?',
+ 'keyword&lt;?', 'keyword-&gt;string', 'keyword-apply', 'keyword?',
+ 'kill-thread', 'lcm', 'length', 'liberal-define-context?',
+ 'link-exists?', 'list', 'list*', 'list-&gt;bytes',
+ 'list-&gt;string', 'list-&gt;vector', 'list-ref', 'list-tail',
+ 'list?', 'load', 'load-extension', 'load-on-demand-enabled',
+ 'load-relative', 'load-relative-extension', 'load/cd',
+ 'load/use-compiled', 'local-expand', 'local-expand/capture-lifts',
+ 'local-transformer-expand',
+ 'local-transformer-expand/capture-lifts', 'locale-string-encoding',
+ 'log', 'log-level?', 'log-max-level', 'log-message',
+ 'log-receiver?', 'logger-name', 'logger?', 'magnitude',
+ 'make-arity-at-least', 'make-base-empty-namespace',
+ 'make-base-namespace', 'make-bytes', 'make-channel',
+ 'make-continuation-mark-key', 'make-continuation-prompt-tag',
+ 'make-custodian', 'make-custodian-box', 'make-date', 'make-date*',
+ 'make-derived-parameter', 'make-directory', 'make-do-sequence',
+ 'make-empty-namespace', 'make-ephemeron', 'make-exn',
+ 'make-exn:break', 'make-exn:break:hang-up',
+ 'make-exn:break:terminate', 'make-exn:fail',
+ 'make-exn:fail:contract', 'make-exn:fail:contract:arity',
+ 'make-exn:fail:contract:continuation',
+ 'make-exn:fail:contract:divide-by-zero',
+ 'make-exn:fail:contract:non-fixnum-result',
+ 'make-exn:fail:contract:variable', 'make-exn:fail:filesystem',
+ 'make-exn:fail:filesystem:errno',
+ 'make-exn:fail:filesystem:exists',
+ 'make-exn:fail:filesystem:version', 'make-exn:fail:network',
+ 'make-exn:fail:network:errno', 'make-exn:fail:out-of-memory',
+ 'make-exn:fail:read', 'make-exn:fail:read:eof',
+ 'make-exn:fail:read:non-char', 'make-exn:fail:syntax',
+ 'make-exn:fail:syntax:unbound', 'make-exn:fail:unsupported',
+ 'make-exn:fail:user', 'make-file-or-directory-link', 'make-hash',
+ 'make-hash-placeholder', 'make-hasheq', 'make-hasheq-placeholder',
+ 'make-hasheqv', 'make-hasheqv-placeholder', 'make-immutable-hash',
+ 'make-immutable-hasheq', 'make-immutable-hasheqv',
+ 'make-impersonator-property', 'make-input-port', 'make-inspector',
+ 'make-keyword-procedure', 'make-known-char-range-list',
+ 'make-log-receiver', 'make-logger', 'make-output-port',
+ 'make-parameter', 'make-phantom-bytes', 'make-pipe',
+ 'make-placeholder', 'make-polar', 'make-prefab-struct',
+ 'make-pseudo-random-generator', 'make-reader-graph',
+ 'make-readtable', 'make-rectangular', 'make-rename-transformer',
+ 'make-resolved-module-path', 'make-security-guard',
+ 'make-semaphore', 'make-set!-transformer', 'make-shared-bytes',
+ 'make-sibling-inspector', 'make-special-comment', 'make-srcloc',
+ 'make-string', 'make-struct-field-accessor',
+ 'make-struct-field-mutator', 'make-struct-type',
+ 'make-struct-type-property', 'make-syntax-delta-introducer',
+ 'make-syntax-introducer', 'make-thread-cell', 'make-thread-group',
+ 'make-vector', 'make-weak-box', 'make-weak-hash',
+ 'make-weak-hasheq', 'make-weak-hasheqv', 'make-will-executor',
+ 'map', 'max', 'mcar', 'mcdr', 'mcons', 'member', 'memf', 'memq',
+ 'memv', 'min', 'module-&gt;exports', 'module-&gt;imports',
+ 'module-&gt;language-info', 'module-&gt;namespace',
+ 'module-compiled-exports', 'module-compiled-imports',
+ 'module-compiled-language-info', 'module-compiled-name',
+ 'module-compiled-submodules', 'module-declared?',
+ 'module-path-index-join', 'module-path-index-resolve',
+ 'module-path-index-split', 'module-path-index-submodule',
+ 'module-path-index?', 'module-path?', 'module-predefined?',
+ 'module-provide-protected?', 'modulo', 'mpair?', 'nack-guard-evt',
+ 'namespace-anchor-&gt;empty-namespace',
+ 'namespace-anchor-&gt;namespace', 'namespace-anchor?',
+ 'namespace-attach-module', 'namespace-attach-module-declaration',
+ 'namespace-base-phase', 'namespace-mapped-symbols',
+ 'namespace-module-identifier', 'namespace-module-registry',
+ 'namespace-require', 'namespace-require/constant',
+ 'namespace-require/copy', 'namespace-require/expansion-time',
+ 'namespace-set-variable-value!', 'namespace-symbol-&gt;identifier',
+ 'namespace-syntax-introduce', 'namespace-undefine-variable!',
+ 'namespace-unprotect-module', 'namespace-variable-value',
+ 'namespace?', 'negative?', 'never-evt', 'newline',
+ 'normal-case-path', 'not', 'null', 'null?', 'number-&gt;string',
+ 'number?', 'numerator', 'object-name', 'odd?', 'open-input-bytes',
+ 'open-input-string', 'open-output-bytes', 'open-output-string',
+ 'ormap', 'output-port?', 'pair?', 'parameter-procedure=?',
+ 'parameter?', 'parameterization?', 'path-&gt;bytes',
+ 'path-&gt;complete-path', 'path-&gt;directory-path',
+ 'path-&gt;string', 'path-add-suffix', 'path-convention-type',
+ 'path-element-&gt;bytes', 'path-element-&gt;string',
+ 'path-for-some-system?', 'path-list-string-&gt;path-list',
+ 'path-replace-suffix', 'path-string?', 'path?', 'peek-byte',
+ 'peek-byte-or-special', 'peek-bytes', 'peek-bytes!',
+ 'peek-bytes-avail!', 'peek-bytes-avail!*',
+ 'peek-bytes-avail!/enable-break', 'peek-char',
+ 'peek-char-or-special', 'peek-string', 'peek-string!',
+ 'phantom-bytes?', 'pipe-content-length', 'placeholder-get',
+ 'placeholder-set!', 'placeholder?', 'poll-guard-evt',
+ 'port-closed-evt', 'port-closed?', 'port-commit-peeked',
+ 'port-count-lines!', 'port-count-lines-enabled',
+ 'port-display-handler', 'port-file-identity', 'port-file-unlock',
+ 'port-next-location', 'port-print-handler', 'port-progress-evt',
+ 'port-provides-progress-evts?', 'port-read-handler',
+ 'port-try-file-lock?', 'port-write-handler', 'port-writes-atomic?',
+ 'port-writes-special?', 'port?', 'positive?',
+ 'prefab-key-&gt;struct-type', 'prefab-key?', 'prefab-struct-key',
+ 'pregexp', 'pregexp?', 'primitive-closure?',
+ 'primitive-result-arity', 'primitive?', 'print',
+ 'print-as-expression', 'print-boolean-long-form', 'print-box',
+ 'print-graph', 'print-hash-table', 'print-mpair-curly-braces',
+ 'print-pair-curly-braces', 'print-reader-abbreviations',
+ 'print-struct', 'print-syntax-width', 'print-unreadable',
+ 'print-vector-length', 'printf', 'procedure-&gt;method',
+ 'procedure-arity', 'procedure-arity-includes?', 'procedure-arity?',
+ 'procedure-closure-contents-eq?', 'procedure-extract-target',
+ 'procedure-keywords', 'procedure-reduce-arity',
+ 'procedure-reduce-keyword-arity', 'procedure-rename',
+ 'procedure-struct-type?', 'procedure?', 'progress-evt?',
+ 'prop:arity-string', 'prop:checked-procedure',
+ 'prop:custom-print-quotable', 'prop:custom-write',
+ 'prop:equal+hash', 'prop:evt', 'prop:exn:srclocs',
+ 'prop:impersonator-of', 'prop:input-port',
+ 'prop:liberal-define-context', 'prop:output-port',
+ 'prop:procedure', 'prop:rename-transformer', 'prop:sequence',
+ 'prop:set!-transformer', 'pseudo-random-generator-&gt;vector',
+ 'pseudo-random-generator-vector?', 'pseudo-random-generator?',
+ 'putenv', 'quotient', 'quotient/remainder', 'raise',
+ 'raise-argument-error', 'raise-arguments-error',
+ 'raise-arity-error', 'raise-mismatch-error', 'raise-range-error',
+ 'raise-result-error', 'raise-syntax-error', 'raise-type-error',
+ 'raise-user-error', 'random', 'random-seed', 'rational?',
+ 'rationalize', 'read', 'read-accept-bar-quote', 'read-accept-box',
+ 'read-accept-compiled', 'read-accept-dot', 'read-accept-graph',
+ 'read-accept-infix-dot', 'read-accept-lang',
+ 'read-accept-quasiquote', 'read-accept-reader', 'read-byte',
+ 'read-byte-or-special', 'read-bytes', 'read-bytes!',
+ 'read-bytes-avail!', 'read-bytes-avail!*',
+ 'read-bytes-avail!/enable-break', 'read-bytes-line',
+ 'read-case-sensitive', 'read-char', 'read-char-or-special',
+ 'read-curly-brace-as-paren', 'read-decimal-as-inexact',
+ 'read-eval-print-loop', 'read-language', 'read-line',
+ 'read-on-demand-source', 'read-square-bracket-as-paren',
+ 'read-string', 'read-string!', 'read-syntax',
+ 'read-syntax/recursive', 'read/recursive', 'readtable-mapping',
+ 'readtable?', 'real-&gt;decimal-string', 'real-&gt;double-flonum',
+ 'real-&gt;floating-point-bytes', 'real-&gt;single-flonum',
+ 'real-part', 'real?', 'regexp', 'regexp-match',
+ 'regexp-match-exact?', 'regexp-match-peek',
+ 'regexp-match-peek-immediate', 'regexp-match-peek-positions',
+ 'regexp-match-peek-positions-immediate',
+ 'regexp-match-peek-positions-immediate/end',
+ 'regexp-match-peek-positions/end', 'regexp-match-positions',
+ 'regexp-match-positions/end', 'regexp-match/end', 'regexp-match?',
+ 'regexp-max-lookbehind', 'regexp-quote', 'regexp-replace',
+ 'regexp-replace*', 'regexp-replace-quote', 'regexp-replaces',
+ 'regexp-split', 'regexp-try-match', 'regexp?', 'relative-path?',
+ 'remainder', 'remove', 'remove*', 'remq', 'remq*', 'remv', 'remv*',
+ 'rename-file-or-directory', 'rename-transformer-target',
+ 'rename-transformer?', 'reroot-path', 'resolve-path',
+ 'resolved-module-path-name', 'resolved-module-path?', 'reverse',
+ 'round', 'seconds-&gt;date', 'security-guard?',
+ 'semaphore-peek-evt', 'semaphore-peek-evt?', 'semaphore-post',
+ 'semaphore-try-wait?', 'semaphore-wait',
+ 'semaphore-wait/enable-break', 'semaphore?', 'sequence-&gt;stream',
+ 'sequence-generate', 'sequence-generate*', 'sequence?',
+ 'set!-transformer-procedure', 'set!-transformer?', 'set-box!',
+ 'set-mcar!', 'set-mcdr!', 'set-phantom-bytes!',
+ 'set-port-next-location!', 'shared-bytes', 'shell-execute',
+ 'simplify-path', 'sin', 'single-flonum?', 'sleep',
+ 'special-comment-value', 'special-comment?', 'split-path', 'sqrt',
+ 'srcloc-column', 'srcloc-line', 'srcloc-position', 'srcloc-source',
+ 'srcloc-span', 'srcloc?', 'stop-after', 'stop-before', 'string',
+ 'string&gt;=?', 'string&gt;?', 'string&lt;=?', 'string&lt;?',
+ 'string-&gt;bytes/latin-1', 'string-&gt;bytes/locale',
+ 'string-&gt;bytes/utf-8', 'string-&gt;immutable-string',
+ 'string-&gt;keyword', 'string-&gt;list', 'string-&gt;number',
+ 'string-&gt;path', 'string-&gt;path-element', 'string-&gt;symbol',
+ 'string-&gt;uninterned-symbol', 'string-&gt;unreadable-symbol',
+ 'string-append', 'string-ci&gt;=?', 'string-ci&gt;?',
+ 'string-ci&lt;=?', 'string-ci&lt;?', 'string-ci=?', 'string-copy',
+ 'string-copy!', 'string-downcase', 'string-fill!',
+ 'string-foldcase', 'string-length', 'string-locale&gt;?',
+ 'string-locale&lt;?', 'string-locale-ci&gt;?',
+ 'string-locale-ci&lt;?', 'string-locale-ci=?',
+ 'string-locale-downcase', 'string-locale-upcase',
+ 'string-locale=?', 'string-normalize-nfc', 'string-normalize-nfd',
+ 'string-normalize-nfkc', 'string-normalize-nfkd', 'string-ref',
+ 'string-set!', 'string-titlecase', 'string-upcase',
+ 'string-utf-8-length', 'string=?', 'string?', 'struct-&gt;vector',
+ 'struct-accessor-procedure?', 'struct-constructor-procedure?',
+ 'struct-info', 'struct-mutator-procedure?',
+ 'struct-predicate-procedure?', 'struct-type-info',
+ 'struct-type-make-constructor', 'struct-type-make-predicate',
+ 'struct-type-property-accessor-procedure?',
+ 'struct-type-property?', 'struct-type?', 'struct:arity-at-least',
+ 'struct:date', 'struct:date*', 'struct:exn', 'struct:exn:break',
+ 'struct:exn:break:hang-up', 'struct:exn:break:terminate',
+ 'struct:exn:fail', 'struct:exn:fail:contract',
+ 'struct:exn:fail:contract:arity',
+ 'struct:exn:fail:contract:continuation',
+ 'struct:exn:fail:contract:divide-by-zero',
+ 'struct:exn:fail:contract:non-fixnum-result',
+ 'struct:exn:fail:contract:variable', 'struct:exn:fail:filesystem',
+ 'struct:exn:fail:filesystem:errno',
+ 'struct:exn:fail:filesystem:exists',
+ 'struct:exn:fail:filesystem:version', 'struct:exn:fail:network',
+ 'struct:exn:fail:network:errno', 'struct:exn:fail:out-of-memory',
+ 'struct:exn:fail:read', 'struct:exn:fail:read:eof',
+ 'struct:exn:fail:read:non-char', 'struct:exn:fail:syntax',
+ 'struct:exn:fail:syntax:unbound', 'struct:exn:fail:unsupported',
+ 'struct:exn:fail:user', 'struct:srcloc', 'struct?', 'sub1',
+ 'subbytes', 'subprocess', 'subprocess-group-enabled',
+ 'subprocess-kill', 'subprocess-pid', 'subprocess-status',
+ 'subprocess-wait', 'subprocess?', 'substring', 'symbol-&gt;string',
+ 'symbol-interned?', 'symbol-unreadable?', 'symbol?', 'sync',
+ 'sync/enable-break', 'sync/timeout', 'sync/timeout/enable-break',
+ 'syntax-&gt;datum', 'syntax-&gt;list', 'syntax-arm',
+ 'syntax-column', 'syntax-disarm', 'syntax-e', 'syntax-line',
+ 'syntax-local-bind-syntaxes', 'syntax-local-certifier',
+ 'syntax-local-context', 'syntax-local-expand-expression',
+ 'syntax-local-get-shadower', 'syntax-local-introduce',
+ 'syntax-local-lift-context', 'syntax-local-lift-expression',
+ 'syntax-local-lift-module-end-declaration',
+ 'syntax-local-lift-provide', 'syntax-local-lift-require',
+ 'syntax-local-lift-values-expression',
+ 'syntax-local-make-definition-context',
+ 'syntax-local-make-delta-introducer',
+ 'syntax-local-module-defined-identifiers',
+ 'syntax-local-module-exports',
+ 'syntax-local-module-required-identifiers', 'syntax-local-name',
+ 'syntax-local-phase-level', 'syntax-local-submodules',
+ 'syntax-local-transforming-module-provides?', 'syntax-local-value',
+ 'syntax-local-value/immediate', 'syntax-original?',
+ 'syntax-position', 'syntax-property',
+ 'syntax-property-symbol-keys', 'syntax-protect', 'syntax-rearm',
+ 'syntax-recertify', 'syntax-shift-phase-level', 'syntax-source',
+ 'syntax-source-module', 'syntax-span', 'syntax-taint',
+ 'syntax-tainted?', 'syntax-track-origin',
+ 'syntax-transforming-module-expression?', 'syntax-transforming?',
+ 'syntax?', 'system-big-endian?', 'system-idle-evt',
+ 'system-language+country', 'system-library-subpath',
+ 'system-path-convention-type', 'system-type', 'tan',
+ 'terminal-port?', 'thread', 'thread-cell-ref', 'thread-cell-set!',
+ 'thread-cell-values?', 'thread-cell?', 'thread-dead-evt',
+ 'thread-dead?', 'thread-group?', 'thread-receive',
+ 'thread-receive-evt', 'thread-resume', 'thread-resume-evt',
+ 'thread-rewind-receive', 'thread-running?', 'thread-send',
+ 'thread-suspend', 'thread-suspend-evt', 'thread-try-receive',
+ 'thread-wait', 'thread/suspend-to-kill', 'thread?', 'time-apply',
+ 'truncate', 'unbox', 'uncaught-exception-handler',
+ 'use-collection-link-paths', 'use-compiled-file-paths',
+ 'use-user-specific-search-paths', 'values',
+ 'variable-reference-&gt;empty-namespace',
+ 'variable-reference-&gt;module-base-phase',
+ 'variable-reference-&gt;module-declaration-inspector',
+ 'variable-reference-&gt;module-path-index',
+ 'variable-reference-&gt;module-source',
+ 'variable-reference-&gt;namespace', 'variable-reference-&gt;phase',
+ 'variable-reference-&gt;resolved-module-path',
+ 'variable-reference-constant?', 'variable-reference?', 'vector',
+ 'vector-&gt;immutable-vector', 'vector-&gt;list',
+ 'vector-&gt;pseudo-random-generator',
+ 'vector-&gt;pseudo-random-generator!', 'vector-&gt;values',
+ 'vector-copy!', 'vector-fill!', 'vector-immutable',
+ 'vector-length', 'vector-ref', 'vector-set!',
+ 'vector-set-performance-stats!', 'vector?', 'version', 'void',
+ 'void?', 'weak-box-value', 'weak-box?', 'will-execute',
+ 'will-executor?', 'will-register', 'will-try-execute', 'wrap-evt',
+ 'write', 'write-byte', 'write-bytes', 'write-bytes-avail',
+ 'write-bytes-avail*', 'write-bytes-avail-evt',
+ 'write-bytes-avail/enable-break', 'write-char', 'write-special',
+ 'write-special-avail*', 'write-special-evt', 'write-string',
+ 'zero?',
+ ),
+
+ 2 => array(
+ '#%app', '#%datum', '#%expression', '#%module-begin', '#%plain-app',
+ '#%plain-lambda', '#%plain-module-begin', '#%provide', '#%require',
+ '#%stratified-body', '#%top', '#%top-interaction',
+ '#%variable-reference', ':do-in', 'all-defined-out',
+ 'all-from-out', 'and', 'apply', 'arity-at-least', 'begin',
+ 'begin-for-syntax', 'begin0', 'call-with-input-file',
+ 'call-with-input-file*', 'call-with-output-file',
+ 'call-with-output-file*', 'case', 'case-lambda', 'combine-in',
+ 'combine-out', 'cond', 'date', 'date*', 'define',
+ 'define-for-syntax', 'define-logger', 'define-namespace-anchor',
+ 'define-sequence-syntax', 'define-struct', 'define-struct/derived',
+ 'define-syntax', 'define-syntax-rule', 'define-syntaxes',
+ 'define-values', 'define-values-for-syntax', 'do', 'else',
+ 'except-in', 'except-out', 'exn', 'exn:break', 'exn:break:hang-up',
+ 'exn:break:terminate', 'exn:fail', 'exn:fail:contract',
+ 'exn:fail:contract:arity', 'exn:fail:contract:continuation',
+ 'exn:fail:contract:divide-by-zero',
+ 'exn:fail:contract:non-fixnum-result',
+ 'exn:fail:contract:variable', 'exn:fail:filesystem',
+ 'exn:fail:filesystem:errno', 'exn:fail:filesystem:exists',
+ 'exn:fail:filesystem:version', 'exn:fail:network',
+ 'exn:fail:network:errno', 'exn:fail:out-of-memory',
+ 'exn:fail:read', 'exn:fail:read:eof', 'exn:fail:read:non-char',
+ 'exn:fail:syntax', 'exn:fail:syntax:unbound',
+ 'exn:fail:unsupported', 'exn:fail:user', 'file', 'for', 'for*',
+ 'for*/and', 'for*/first', 'for*/fold', 'for*/fold/derived',
+ 'for*/hash', 'for*/hasheq', 'for*/hasheqv', 'for*/last',
+ 'for*/list', 'for*/lists', 'for*/or', 'for*/product', 'for*/sum',
+ 'for*/vector', 'for-label', 'for-meta', 'for-syntax',
+ 'for-template', 'for/and', 'for/first', 'for/fold',
+ 'for/fold/derived', 'for/hash', 'for/hasheq', 'for/hasheqv',
+ 'for/last', 'for/list', 'for/lists', 'for/or', 'for/product',
+ 'for/sum', 'for/vector', 'gen:custom-write', 'gen:equal+hash',
+ 'if', 'in-bytes', 'in-bytes-lines', 'in-indexed',
+ 'in-input-port-bytes', 'in-input-port-chars', 'in-lines',
+ 'in-list', 'in-mlist', 'in-naturals', 'in-port', 'in-producer',
+ 'in-range', 'in-string', 'in-value', 'in-vector', 'lambda', 'let',
+ 'let*', 'let*-values', 'let-syntax', 'let-syntaxes', 'let-values',
+ 'let/cc', 'let/ec', 'letrec', 'letrec-syntax', 'letrec-syntaxes',
+ 'letrec-syntaxes+values', 'letrec-values', 'lib', 'local-require',
+ 'log-debug', 'log-error', 'log-fatal', 'log-info', 'log-warning',
+ 'module', 'module*', 'module+', 'only-in', 'only-meta-in',
+ 'open-input-file', 'open-input-output-file', 'open-output-file',
+ 'or', 'parameterize', 'parameterize*', 'parameterize-break',
+ 'planet', 'prefix-in', 'prefix-out', 'protect-out', 'provide',
+ 'quasiquote', 'quasisyntax', 'quasisyntax/loc', 'quote',
+ 'quote-syntax', 'quote-syntax/prune', 'regexp-match*',
+ 'regexp-match-peek-positions*', 'regexp-match-positions*',
+ 'relative-in', 'rename-in', 'rename-out', 'require', 'set!',
+ 'set!-values', 'sort', 'srcloc', 'struct', 'struct-copy',
+ 'struct-field-index', 'struct-out', 'submod', 'syntax',
+ 'syntax-case', 'syntax-case*', 'syntax-id-rules', 'syntax-rules',
+ 'syntax/loc', 'time', 'unless', 'unquote', 'unquote-splicing',
+ 'unsyntax', 'unsyntax-splicing', 'when', 'with-continuation-mark',
+ 'with-handlers', 'with-handlers*', 'with-input-from-file',
+ 'with-output-to-file', 'with-syntax', 'λ',
+ ),
+
+ 3 => array(
+ '&gt;/c', '&lt;/c', 'append*', 'append-map', 'argmax', 'argmin',
+ 'bad-number-of-results', 'base-&gt;-doms/c', 'base-&gt;-rngs/c',
+ 'base-&gt;?', 'blame-add-unknown-context', 'blame-context',
+ 'blame-contract', 'blame-fmt-&gt;-string', 'blame-negative',
+ 'blame-original?', 'blame-positive', 'blame-replace-negative',
+ 'blame-source', 'blame-swap', 'blame-swapped?', 'blame-value',
+ 'blame?', 'boolean=?', 'build-chaperone-contract-property',
+ 'build-compound-type-name', 'build-contract-property',
+ 'build-flat-contract-property', 'bytes-append*', 'bytes-join',
+ 'bytes-no-nuls?', 'call-with-input-bytes',
+ 'call-with-input-string', 'call-with-output-bytes',
+ 'call-with-output-string', 'chaperone-contract-property?',
+ 'chaperone-contract?', 'class-&gt;interface', 'class-info',
+ 'class?', 'coerce-chaperone-contract',
+ 'coerce-chaperone-contracts', 'coerce-contract',
+ 'coerce-contract/f', 'coerce-contracts', 'coerce-flat-contract',
+ 'coerce-flat-contracts', 'conjugate', 'cons?', 'const',
+ 'contract-first-order', 'contract-first-order-passes?',
+ 'contract-name', 'contract-proc', 'contract-projection',
+ 'contract-property?', 'contract-random-generate',
+ 'contract-stronger?', 'contract-struct-exercise',
+ 'contract-struct-generate', 'contract?', 'convert-stream',
+ 'copy-directory/files', 'copy-port', 'cosh', 'count',
+ 'current-blame-format', 'current-future', 'curry', 'curryr',
+ 'degrees-&gt;radians', 'delete-directory/files',
+ 'deserialize-info:set-v0', 'dict-iter-contract',
+ 'dict-key-contract', 'dict-value-contract', 'drop', 'drop-right',
+ 'dup-input-port', 'dup-output-port', 'dynamic-get-field',
+ 'dynamic-send', 'dynamic-set-field!', 'eighth', 'empty',
+ 'empty-sequence', 'empty-stream', 'empty?', 'env-stash',
+ 'eq-contract-val', 'eq-contract?', 'equal&lt;%&gt;',
+ 'equal-contract-val', 'equal-contract?', 'exact-ceiling',
+ 'exact-floor', 'exact-round', 'exact-truncate',
+ 'exn:fail:contract:blame-object', 'exn:fail:contract:blame?',
+ 'exn:fail:object?', 'exn:misc:match?', 'explode-path',
+ 'externalizable&lt;%&gt;', 'false', 'false/c', 'false?',
+ 'field-names', 'fifth', 'file-name-from-path',
+ 'filename-extension', 'filter-map', 'filter-not',
+ 'filter-read-input-port', 'find-files', 'first', 'flat-contract',
+ 'flat-contract-predicate', 'flat-contract-property?',
+ 'flat-contract?', 'flat-named-contract', 'flatten', 'fold-files',
+ 'force', 'fourth', 'fsemaphore-count', 'fsemaphore-post',
+ 'fsemaphore-try-wait?', 'fsemaphore-wait', 'fsemaphore?', 'future',
+ 'future?', 'futures-enabled?', 'generate-ctc-fail?',
+ 'generate-env', 'generate-member-key', 'generate/choose',
+ 'generate/direct', 'generic?', 'group-execute-bit',
+ 'group-read-bit', 'group-write-bit', 'has-contract?', 'identity',
+ 'impersonator-contract?', 'impersonator-prop:contracted',
+ 'implementation?', 'implementation?/c', 'in-dict', 'in-dict-keys',
+ 'in-dict-pairs', 'in-dict-values', 'infinite?',
+ 'input-port-append', 'instanceof/c', 'interface-&gt;method-names',
+ 'interface-extension?', 'interface?', 'is-a?', 'is-a?/c', 'last',
+ 'last-pair', 'list-&gt;set', 'list-&gt;seteq', 'list-&gt;seteqv',
+ 'make-chaperone-contract', 'make-contract', 'make-custom-hash',
+ 'make-directory*', 'make-exn:fail:contract:blame',
+ 'make-exn:fail:object', 'make-flat-contract', 'make-fsemaphore',
+ 'make-generate-ctc-fail', 'make-generic',
+ 'make-immutable-custom-hash', 'make-input-port/read-to-peek',
+ 'make-limited-input-port', 'make-list', 'make-lock-file-name',
+ 'make-mixin-contract', 'make-none/c', 'make-pipe-with-specials',
+ 'make-primitive-class', 'make-proj-contract',
+ 'make-tentative-pretty-print-output-port', 'make-weak-custom-hash',
+ 'match-equality-test', 'matches-arity-exactly?',
+ 'member-name-key-hash-code', 'member-name-key=?',
+ 'member-name-key?', 'merge-input', 'method-in-interface?',
+ 'mixin-contract', 'n-&gt;th', 'nan?', 'natural-number/c', 'negate',
+ 'new-∀/c', 'new-∃/c', 'ninth', 'normalize-path', 'object%',
+ 'object-&gt;vector', 'object-info', 'object-interface',
+ 'object-method-arity-includes?', 'object=?', 'object?',
+ 'open-output-nowhere', 'order-of-magnitude', 'other-execute-bit',
+ 'other-read-bit', 'other-write-bit', 'parse-command-line',
+ 'partition', 'path-element?', 'path-only', 'pathlist-closure',
+ 'pi', 'pi.f', 'place-break', 'place-channel', 'place-channel-get',
+ 'place-channel-put', 'place-channel-put/get', 'place-channel?',
+ 'place-dead-evt', 'place-enabled?', 'place-kill',
+ 'place-message-allowed?', 'place-sleep', 'place-wait', 'place?',
+ 'port-&gt;bytes', 'port-&gt;list', 'port-&gt;string',
+ 'predicate/c', 'preferences-lock-file-mode', 'pretty-display',
+ 'pretty-format', 'pretty-print',
+ 'pretty-print-.-symbol-without-bars',
+ 'pretty-print-abbreviate-read-macros', 'pretty-print-columns',
+ 'pretty-print-current-style-table', 'pretty-print-depth',
+ 'pretty-print-exact-as-decimal', 'pretty-print-extend-style-table',
+ 'pretty-print-handler', 'pretty-print-newline',
+ 'pretty-print-post-print-hook', 'pretty-print-pre-print-hook',
+ 'pretty-print-print-hook', 'pretty-print-print-line',
+ 'pretty-print-remap-stylable', 'pretty-print-show-inexactness',
+ 'pretty-print-size-hook', 'pretty-print-style-table?',
+ 'pretty-printing', 'pretty-write', 'printable&lt;%&gt;',
+ 'printable/c', 'process', 'process*', 'process*/ports',
+ 'process/ports', 'processor-count', 'promise-forced?',
+ 'promise-running?', 'promise?', 'prop:chaperone-contract',
+ 'prop:contract', 'prop:contracted', 'prop:dict',
+ 'prop:flat-contract', 'prop:opt-chaperone-contract',
+ 'prop:opt-chaperone-contract-get-test',
+ 'prop:opt-chaperone-contract?', 'prop:stream', 'proper-subset?',
+ 'put-preferences', 'radians-&gt;degrees', 'raise-blame-error',
+ 'raise-contract-error', 'range', 'reencode-input-port',
+ 'reencode-output-port', 'relocate-input-port',
+ 'relocate-output-port', 'rest', 'second', 'sequence-&gt;list',
+ 'sequence-add-between', 'sequence-andmap', 'sequence-append',
+ 'sequence-count', 'sequence-filter', 'sequence-fold',
+ 'sequence-for-each', 'sequence-length', 'sequence-map',
+ 'sequence-ormap', 'sequence-ref', 'sequence-tail', 'set',
+ 'set-&gt;list', 'set-add', 'set-count', 'set-empty?', 'set-eq?',
+ 'set-equal?', 'set-eqv?', 'set-first', 'set-for-each',
+ 'set-intersect', 'set-map', 'set-member?', 'set-remove',
+ 'set-rest', 'set-subtract', 'set-symmetric-difference',
+ 'set-union', 'set/c', 'set=?', 'set?', 'seteq', 'seteqv',
+ 'seventh', 'sgn', 'shuffle', 'simple-form-path', 'sinh', 'sixth',
+ 'skip-projection-wrapper?', 'some-system-path-&gt;string',
+ 'special-filter-input-port', 'split-at', 'split-at-right', 'sqr',
+ 'stream-&gt;list', 'stream-add-between', 'stream-andmap',
+ 'stream-append', 'stream-count', 'stream-empty?', 'stream-filter',
+ 'stream-first', 'stream-fold', 'stream-for-each', 'stream-length',
+ 'stream-map', 'stream-ormap', 'stream-ref', 'stream-rest',
+ 'stream-tail', 'stream?', 'string-&gt;some-system-path',
+ 'string-append*', 'string-no-nuls?', 'struct-type-property/c',
+ 'struct:exn:fail:contract:blame', 'struct:exn:fail:object',
+ 'subclass?', 'subclass?/c', 'subset?', 'symbol=?', 'system',
+ 'system*', 'system*/exit-code', 'system/exit-code', 'take',
+ 'take-right', 'tanh', 'tcp-abandon-port', 'tcp-accept',
+ 'tcp-accept-evt', 'tcp-accept-ready?', 'tcp-accept/enable-break',
+ 'tcp-addresses', 'tcp-close', 'tcp-connect',
+ 'tcp-connect/enable-break', 'tcp-listen', 'tcp-listener?',
+ 'tcp-port?', 'tentative-pretty-print-port-cancel',
+ 'tentative-pretty-print-port-transfer', 'tenth',
+ 'the-unsupplied-arg', 'third', 'touch', 'transplant-input-port',
+ 'transplant-output-port', 'true', 'udp-addresses', 'udp-bind!',
+ 'udp-bound?', 'udp-close', 'udp-connect!', 'udp-connected?',
+ 'udp-open-socket', 'udp-receive!', 'udp-receive!*',
+ 'udp-receive!-evt', 'udp-receive!/enable-break',
+ 'udp-receive-ready-evt', 'udp-send', 'udp-send*', 'udp-send-evt',
+ 'udp-send-ready-evt', 'udp-send-to', 'udp-send-to*',
+ 'udp-send-to-evt', 'udp-send-to/enable-break',
+ 'udp-send/enable-break', 'udp?', 'unit?', 'unsupplied-arg?',
+ 'user-execute-bit', 'user-read-bit', 'user-write-bit',
+ 'value-contract', 'vector-append', 'vector-argmax',
+ 'vector-argmin', 'vector-copy', 'vector-count', 'vector-drop',
+ 'vector-drop-right', 'vector-filter', 'vector-filter-not',
+ 'vector-map', 'vector-map!', 'vector-member', 'vector-memq',
+ 'vector-memv', 'vector-set*!', 'vector-split-at',
+ 'vector-split-at-right', 'vector-take', 'vector-take-right',
+ 'with-input-from-bytes', 'with-input-from-string',
+ 'with-output-to-bytes', 'with-output-to-string', 'would-be-future',
+ 'writable&lt;%&gt;', 'xor',
+ ),
+ 4 => array(
+ '&gt;=/c', '&lt;=/c', '-&gt;*m', '-&gt;d', '-&gt;dm', '-&gt;i', '-&gt;m',
+ '=/c', 'absent', 'abstract', 'add-between', 'and/c', 'any',
+ 'any/c', 'augment', 'augment*', 'augment-final', 'augment-final*',
+ 'augride', 'augride*', 'between/c', 'blame-add-context',
+ 'box-immutable/c', 'box/c', 'call-with-file-lock/timeout',
+ 'case-&gt;', 'case-&gt;m', 'class', 'class*',
+ 'class-field-accessor', 'class-field-mutator', 'class/c',
+ 'class/derived', 'command-line', 'compound-unit',
+ 'compound-unit/infer', 'cons/c', 'continuation-mark-key/c',
+ 'contract', 'contract-out', 'contract-struct', 'contracted',
+ 'current-contract-region', 'define-compound-unit',
+ 'define-compound-unit/infer', 'define-contract-struct',
+ 'define-local-member-name', 'define-match-expander',
+ 'define-member-name', 'define-opt/c', 'define-serializable-class',
+ 'define-serializable-class*', 'define-signature',
+ 'define-signature-form', 'define-struct/contract', 'define-unit',
+ 'define-unit-binding', 'define-unit-from-context',
+ 'define-unit/contract', 'define-unit/new-import-export',
+ 'define-unit/s', 'define-values-for-export',
+ 'define-values/invoke-unit', 'define-values/invoke-unit/infer',
+ 'define/augment', 'define/augment-final', 'define/augride',
+ 'define/contract', 'define/final-prop', 'define/match',
+ 'define/overment', 'define/override', 'define/override-final',
+ 'define/private', 'define/public', 'define/public-final',
+ 'define/pubment', 'define/subexpression-pos-prop', 'delay',
+ 'delay/idle', 'delay/name', 'delay/strict', 'delay/sync',
+ 'delay/thread', 'dict-&gt;list', 'dict-can-functional-set?',
+ 'dict-can-remove-keys?', 'dict-count', 'dict-for-each',
+ 'dict-has-key?', 'dict-iterate-first', 'dict-iterate-key',
+ 'dict-iterate-next', 'dict-iterate-value', 'dict-keys', 'dict-map',
+ 'dict-mutable?', 'dict-ref', 'dict-ref!', 'dict-remove',
+ 'dict-remove!', 'dict-set', 'dict-set!', 'dict-set*', 'dict-set*!',
+ 'dict-update', 'dict-update!', 'dict-values', 'dict?',
+ 'display-lines', 'display-lines-to-file', 'display-to-file',
+ 'dynamic-place', 'dynamic-place*', 'eof-evt', 'except',
+ 'exn:fail:contract:blame', 'exn:fail:object', 'export', 'extends',
+ 'field', 'field-bound?', 'file-&gt;bytes', 'file-&gt;bytes-lines',
+ 'file-&gt;lines', 'file-&gt;list', 'file-&gt;string',
+ 'file-&gt;value', 'find-relative-path', 'flat-murec-contract',
+ 'flat-rec-contract', 'for*/set', 'for*/seteq', 'for*/seteqv',
+ 'for/set', 'for/seteq', 'for/seteqv', 'gen:dict', 'gen:stream',
+ 'generic', 'get-field', 'get-preference', 'hash/c', 'implies',
+ 'import', 'in-set', 'in-stream', 'include',
+ 'include-at/relative-to', 'include-at/relative-to/reader',
+ 'include/reader', 'inherit', 'inherit-field', 'inherit/inner',
+ 'inherit/super', 'init', 'init-depend', 'init-field', 'init-rest',
+ 'inner', 'inspect', 'instantiate', 'integer-in', 'interface',
+ 'interface*', 'invoke-unit', 'invoke-unit/infer', 'lazy', 'link',
+ 'list/c', 'listof', 'local', 'make-handle-get-preference-locked',
+ 'make-object', 'make-temporary-file', 'match', 'match*',
+ 'match*/derived', 'match-define', 'match-define-values',
+ 'match-lambda', 'match-lambda*', 'match-lambda**', 'match-let',
+ 'match-let*', 'match-let*-values', 'match-let-values',
+ 'match-letrec', 'match/derived', 'match/values', 'member-name-key',
+ 'method-contract?', 'mixin', 'nand', 'new', 'non-empty-listof',
+ 'none/c', 'nor', 'not/c', 'object-contract', 'object/c',
+ 'one-of/c', 'only', 'open', 'opt/c', 'or/c', 'overment',
+ 'overment*', 'override', 'override*', 'override-final',
+ 'override-final*', 'parameter/c', 'parametric-&gt;/c',
+ 'peek-bytes!-evt', 'peek-bytes-avail!-evt', 'peek-bytes-evt',
+ 'peek-string!-evt', 'peek-string-evt', 'peeking-input-port',
+ 'place', 'place*', 'port-&gt;bytes-lines', 'port-&gt;lines',
+ 'prefix', 'private', 'private*', 'procedure-arity-includes/c',
+ 'promise/c', 'prompt-tag/c', 'prop:dict/contract',
+ 'provide-signature-elements', 'provide/contract', 'public',
+ 'public*', 'public-final', 'public-final*', 'pubment', 'pubment*',
+ 'read-bytes!-evt', 'read-bytes-avail!-evt', 'read-bytes-evt',
+ 'read-bytes-line-evt', 'read-line-evt', 'read-string!-evt',
+ 'read-string-evt', 'real-in', 'recursive-contract',
+ 'regexp-match-evt', 'remove-duplicates', 'rename', 'rename-inner',
+ 'rename-super', 'send', 'send*', 'send+', 'send-generic',
+ 'send/apply', 'send/keyword-apply', 'set-field!', 'shared',
+ 'stream', 'stream-cons', 'string-join', 'string-len/c',
+ 'string-normalize-spaces', 'string-replace', 'string-split',
+ 'string-trim', 'struct*', 'struct/c', 'struct/ctc', 'struct/dc',
+ 'super', 'super-instantiate', 'super-make-object', 'super-new',
+ 'symbols', 'syntax/c', 'tag', 'this', 'this%', 'thunk', 'thunk*',
+ 'unconstrained-domain-&gt;', 'unit', 'unit-from-context', 'unit/c',
+ 'unit/new-import-export', 'unit/s', 'vector-immutable/c',
+ 'vector-immutableof', 'vector/c', 'vectorof', 'with-contract',
+ 'with-method', 'write-to-file', '~.a', '~.s', '~.v', '~a', '~e',
+ '~r', '~s', '~v',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ 0 => array(
+ '&gt;', '&gt;=', '&lt;', '&lt;=', '*', '+', '-', '-&gt;', '-&gt;*', '...', '/',
+ '=', '=&gt;', '==', '_', '#fl', '#fx', '#s', '#', '#f', '#F',
+ '#false', '#t', '#T', '#true', '#lang', '#reader', '.', '\'', '#`',
+ '#,@', '#,', '#\'', '`', '@', ',', '#%', '#$', '#&', '#~', '#rx',
+ '#px', '#<<', '#;', '#hash', '#',
+ ),
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'NUMBERS' => array(
+ 1 => '(((#x#e)|(#e#x)|(#x#i)|(#i#x)|(#x))((((((((((((-)|(\+)))?(((('.
+ '(([0-9])+)?(\.)?(([0-9a-fA-F])+(#)*)))|(((([0-9a-fA-F])+(#)*)'.
+ '(\.)?(#)*))|(((([0-9a-fA-F])+(#)*)\\/(([0-9a-fA-F])+(#)*))))('.
+ '([sl]((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan'.
+ '\.))[0f])))))?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-9a-fA-F])+'.
+ '(#)*)))|(((([0-9a-fA-F])+(#)*)(\.)?(#)*))|(((([0-9a-fA-F])+(#'.
+ ')*)\\/(([0-9a-fA-F])+(#)*))))(([sl]((((-)|(\+)))?([0-9])+)))?'.
+ '))|((((inf\.)|(nan\.))[0f])))i))|((((((((-)|(\+)))?(((((([0-9'.
+ '])+)?(\.)?(([0-9a-fA-F])+(#)*)))|(((([0-9a-fA-F])+(#)*)(\.)?('.
+ '#)*))|(((([0-9a-fA-F])+(#)*)\\/(([0-9a-fA-F])+(#)*))))(([sl]('.
+ '(((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0'.
+ 'f]))))@((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-9a-fA-F])+(#)'.
+ '*)))|(((([0-9a-fA-F])+(#)*)(\.)?(#)*))|(((([0-9a-fA-F])+(#)*)'.
+ '\\/(([0-9a-fA-F])+(#)*))))(([sl]((((-)|(\+)))?([0-9])+)))?)))'.
+ '|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))))))|((((((-)|(\+)))?('.
+ '([0-9])+\\/([0-9])+))((-)|(\+))(([0-9])+\\/([0-9])+)i))|((((('.
+ '-)|(\+)))?(([0-9])+\\/([0-9])+)))|(((((((-)|(\+)))?(((((([0-9'.
+ '])+)?(\.)?(([0-9a-fA-F])+(#)*)))|(((([0-9a-fA-F])+(#)*)(\.)?('.
+ '#)*))|(((([0-9a-fA-F])+(#)*)\\/(([0-9a-fA-F])+(#)*))))(([sl]('.
+ '(((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0'.
+ 'f])))))|(((((-)|(\+)))?([0-9])+))))',
+ 2 => '(((#o#e)|(#e#o)|(#o#i)|(#i#o)|(#o))((((((((((((-)|(\+)))?(((('.
+ '(([0-9])+)?(\.)?(([0-7])+(#)*)))|(((([0-7])+(#)*)(\.)?(#)*))|'.
+ '(((([0-7])+(#)*)\\/(([0-7])+(#)*))))(((([sl])|([def]))((((-)|'.
+ '(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))'.
+ ')?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-7])+(#)*)))|(((([0-7])'.
+ '+(#)*)(\.)?(#)*))|(((([0-7])+(#)*)\\/(([0-7])+(#)*))))(((([sl'.
+ '])|([def]))((((-)|(\+)))?([0-9])+)))?))|((((inf\.)|(nan\.))[0'.
+ 'f])))i))|((((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-7])+(#)*)'.
+ '))|(((([0-7])+(#)*)(\.)?(#)*))|(((([0-7])+(#)*)\\/(([0-7])+(#'.
+ ')*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|'.
+ '(\+))(((inf\.)|(nan\.))[0f]))))@((((((-)|(\+)))?(((((([0-9])+'.
+ ')?(\.)?(([0-7])+(#)*)))|(((([0-7])+(#)*)(\.)?(#)*))|(((([0-7]'.
+ ')+(#)*)\\/(([0-7])+(#)*))))(((([sl])|([def]))((((-)|(\+)))?(['.
+ '0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))))))|(((('.
+ '((-)|(\+)))?(([0-9])+\\/([0-9])+))((-)|(\+))(([0-9])+\\/([0-9'.
+ '])+)i))|(((((-)|(\+)))?(([0-9])+\\/([0-9])+)))|(((((((-)|(\+)'.
+ '))?(((((([0-9])+)?(\.)?(([0-7])+(#)*)))|(((([0-7])+(#)*)(\.)?'.
+ '(#)*))|(((([0-7])+(#)*)\\/(([0-7])+(#)*))))(((([sl])|([def]))'.
+ '((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))['.
+ '0f])))))|(((((-)|(\+)))?([0-9])+))))',
+ 3 => '(((#b#e)|(#e#b)|(#b#i)|(#i#b)|(#b))((((((((((((-)|(\+)))?(((('.
+ '(([0-9])+)?(\.)?(([0-1])+(#)*)))|(((([0-1])+(#)*)(\.)?(#)*))|'.
+ '(((([0-1])+(#)*)\\/(([0-1])+(#)*))))(((([sl])|([def]))((((-)|'.
+ '(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))'.
+ ')?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-1])+(#)*)))|(((([0-1])'.
+ '+(#)*)(\.)?(#)*))|(((([0-1])+(#)*)\\/(([0-1])+(#)*))))(((([sl'.
+ '])|([def]))((((-)|(\+)))?([0-9])+)))?))|((((inf\.)|(nan\.))[0'.
+ 'f])))i))|((((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-1])+(#)*)'.
+ '))|(((([0-1])+(#)*)(\.)?(#)*))|(((([0-1])+(#)*)\\/(([0-1])+(#'.
+ ')*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|'.
+ '(\+))(((inf\.)|(nan\.))[0f]))))@((((((-)|(\+)))?(((((([0-9])+'.
+ ')?(\.)?(([0-1])+(#)*)))|(((([0-1])+(#)*)(\.)?(#)*))|(((([0-1]'.
+ ')+(#)*)\\/(([0-1])+(#)*))))(((([sl])|([def]))((((-)|(\+)))?(['.
+ '0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))))))|(((('.
+ '((-)|(\+)))?(([0-9])+\\/([0-9])+))((-)|(\+))(([0-9])+\\/([0-9'.
+ '])+)i))|(((((-)|(\+)))?(([0-9])+\\/([0-9])+)))|(((((((-)|(\+)'.
+ '))?(((((([0-9])+)?(\.)?(([0-1])+(#)*)))|(((([0-1])+(#)*)(\.)?'.
+ '(#)*))|(((([0-1])+(#)*)\\/(([0-1])+(#)*))))(((([sl])|([def]))'.
+ '((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))['.
+ '0f])))))|(((((-)|(\+)))?([0-9])+))))',
+ 4 => '((((#d#e)|(#e#d)|(#d#i)|(#i#d)|(#e)|(#i)|(#d)))?((((((((((((-'.
+ ')|(\+)))?(((((([0-9])+)?(\.)?(([0-9])+(#)*)))|(((([0-9])+(#)*'.
+ ')(\.)?(#)*))|(((([0-9])+(#)*)\\/(([0-9])+(#)*))))(((([sl])|(['.
+ 'def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(na'.
+ 'n\.))[0f])))))?((-)|(\+))(((((((([0-9])+)?(\.)?(([0-9])+(#)*)'.
+ '))|(((([0-9])+(#)*)(\.)?(#)*))|(((([0-9])+(#)*)\\/(([0-9])+(#'.
+ ')*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)))?))|((((inf'.
+ '\.)|(nan\.))[0f])))i))|((((((((-)|(\+)))?(((((([0-9])+)?(\.)?'.
+ '(([0-9])+(#)*)))|(((([0-9])+(#)*)(\.)?(#)*))|(((([0-9])+(#)*)'.
+ '\\/(([0-9])+(#)*))))(((([sl])|([def]))((((-)|(\+)))?([0-9])+)'.
+ '))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f]))))@((((((-)|(\+)))'.
+ '?(((((([0-9])+)?(\.)?(([0-9])+(#)*)))|(((([0-9])+(#)*)(\.)?(#'.
+ ')*))|(((([0-9])+(#)*)\\/(([0-9])+(#)*))))(((([sl])|([def]))(('.
+ '((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((inf\.)|(nan\.))[0f'.
+ ']))))))))|((((((-)|(\+)))?(([0-9])+\\/([0-9])+))((-)|(\+))((['.
+ '0-9])+\\/([0-9])+)i))|(((((-)|(\+)))?(([0-9])+\\/([0-9])+)))|'.
+ '(((((((-)|(\+)))?(((((([0-9])+)?(\.)?(([0-9])+(#)*)))|(((([0-'.
+ '9])+(#)*)(\.)?(#)*))|(((([0-9])+(#)*)\\/(([0-9])+(#)*))))(((('.
+ '[sl])|([def]))((((-)|(\+)))?([0-9])+)))?)))|((((-)|(\+))(((in'.
+ 'f\.)|(nan\.))[0f])))))|(((((-)|(\+)))?([0-9])+))))',
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: blue;',
+ 2 => 'color: rgb(34, 34, 139);',
+ 3 => 'color: blue;',
+ 4 => 'color: rgb(34, 34, 139);',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: rgb(194, 116, 31);',
+ 'MULTI' => 'color: rgb(194, 116, 31);',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: rgb(132, 60,36);',
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: rgb(34, 139, 34);',
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: rgb(34, 139, 34);',
+ 1 => 'color: rgb(34, 139, 34);',
+ 2 => 'color: rgb(34, 139, 34);',
+ 3 => 'color: rgb(34, 139, 34);',
+ 4 => 'color: rgb(34, 139, 34);',
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #202020;',
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: rgb(132, 60,36);',
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: rgb(34, 139, 34);',
+ 2 => 'color: rgb(132, 60,36);',
+ 3 => 'color: rgb(34, 139, 34);',
+ ),
+ 'SCRIPT' => array(
+ ),
+ ),
+ 'URLS' => array(
+ 1 => 'http://docs.racket-lang.org/reference/',
+ 2 => 'http://docs.racket-lang.org/reference/',
+ 3 => 'http://docs.racket-lang.org/reference/',
+ 4 => 'http://docs.racket-lang.org/reference/',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 1 => '#\\\\(nul|null|backspace|tab|newline|linefeed|vtab|page|retur'.
+ 'n|space|rubout|([0-7]{1,3})|(u[[:xdigit:]]{1,4})|(U[[:xdigit:'.
+ ']]{1,6})|[a-z])',
+ 2 => '#:[^[:space:]()[\\]{}",\']+',
+ 3 => '\'((\\\\ )|([^[:space:]()[\\]{}",\']))+',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => '[[:space:]()[\\]{}",\']',
+ ),
+ 'ENABLE_FLAGS' => array(
+ 'SYMBOLS' => GESHI_MAYBE,
+ 'BRACKETS' => GESHI_MAYBE,
+ 'REGEXPS' => GESHI_MAYBE,
+ 'ESCAPE_CHAR' => GESHI_MAYBE,
+ )
+ )
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rails.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rails.php
index 65ddee88..2838719c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rails.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rails.php
@@ -4,7 +4,7 @@
* ---------
* Author: Moises Deniz
* Copyright: (c) 2005 Moises Deniz
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/03/21
*
* Ruby (with Ruby on Rails Framework) language file for GeSHi.
@@ -399,8 +399,6 @@ $language_data = array (
)
),
'HIGHLIGHT_STRICT_BLOCK' => array(
- 0 => true,
+ 0 => true
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rbs.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rbs.php
new file mode 100644
index 00000000..02c2fcfa
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rbs.php
@@ -0,0 +1,224 @@
+<?php
+/*************************************************************************************
+ * rbs.php
+ * ------
+ * Author: Deng Wen Gang (deng@priity.com)
+ * Copyright: (c) 2013 Deng Wen Gang
+ * Release Version: 1.0.8.12
+ * Date Started: 2013/01/15
+ *
+ * RBScript language file for GeSHi.
+ *
+ * RBScript official website: http://docs.realsoftware.com/index.php/Rbscript
+ *
+ * CHANGES
+ * -------
+ * 2013/01/15 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'RBScript',
+ 'COMMENT_SINGLE' => array( 1 => '//', 2 => "'" ),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 3 => '/REM\s.*$/im',
+ 4 => '/&b[01]+/',
+ 5 => '/&o[0-7]+/',
+ 6 => '/&h[a-f0-9]+/i',
+ 7 => '/&c[a-f0-9]+/i',
+ 8 => '/&u[a-f0-9]+/i',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'Uint32', 'Uint64', 'Byte', 'Integer',
+ 'Single', 'Double', 'Boolean', 'String', 'Color', 'Object', 'Variant'
+ ),
+ 2 => array(
+ 'Private', 'Public', 'Protected',
+ 'Sub', 'Function', 'Delegate', 'Exception',
+ ),
+ 3 => array(
+ 'IsA',
+ 'And', 'Or', 'Not', 'Xor',
+ 'If', 'Then', 'Else', 'ElseIf',
+ 'Select', 'Case',
+ 'For', 'Each', 'In', 'To', 'Step', 'Next',
+ 'Do', 'Loop', 'Until',
+ 'While', 'Wend',
+ 'Continue', 'Exit', 'Goto', 'End',
+ ),
+ 4 => array(
+ 'Const', 'Static',
+ 'Dim', 'As', 'Redim',
+ 'Me', 'Self', 'Super', 'Extends', 'Implements',
+ 'ByRef', 'ByVal', 'Assigns', 'ParamArray',
+ 'Mod',
+ 'Raise',
+ ),
+ 5 => array(
+ 'False', 'True', 'Nil'
+ ),
+ 6 => array(
+ 'Abs',
+ 'Acos',
+ 'Asc',
+ 'AscB',
+ 'Asin',
+ 'Atan',
+ 'Atan2',
+ 'CDbl',
+ 'Ceil',
+ 'Chr',
+ 'ChrB',
+ 'CMY',
+ 'Cos',
+ 'CountFields',
+ 'CStr',
+ 'Exp',
+ 'Floor',
+ 'Format',
+ 'Hex',
+ 'HSV',
+ 'InStr',
+ 'InStrB',
+ 'Left',
+ 'LeftB',
+ 'Len',
+ 'LenB',
+ 'Log',
+ 'Lowercase',
+ 'LTrim',
+ 'Max',
+ 'Microseconds',
+ 'Mid',
+ 'MidB',
+ 'Min',
+ 'NthField',
+ 'Oct',
+ 'Pow',
+ 'Replace',
+ 'ReplaceB',
+ 'ReplaceAll',
+ 'ReplaceAllB',
+ 'RGB',
+ 'Right',
+ 'RightB',
+ 'Rnd',
+ 'Round',
+ 'RTrim',
+ 'Sin',
+ 'Sqrt',
+ 'Str',
+ 'StrComp',
+ 'Tan',
+ 'Ticks',
+ 'Titlecase',
+ 'Trim',
+ 'UBound',
+ 'Uppercase',
+ 'Val',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '/', '\\', '^', '<', '>', '=', '<>', '&'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #F660AB; font-weight: bold;',
+ 2 => 'color: #E56717; font-weight: bold;',
+ 3 => 'color: #8D38C9; font-weight: bold;',
+ 4 => 'color: #151B8D; font-weight: bold;',
+ 5 => 'color: #00C2FF; font-weight: bold;',
+ 6 => 'color: #3EA99F; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;',
+ 2 => 'color: #008000;',
+ 3 => 'color: #008000;',
+
+ 4 => 'color: #800000;',
+ 5 => 'color: #800000;',
+ 6 => 'color: #800000;',
+ 7 => 'color: #800000;',
+ 8 => 'color: #800000;',
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #800000; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'BRACKETS' => GESHI_NEVER,
+ 'SYMBOLS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rebol.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rebol.php
index ea86c21c..7acb736a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rebol.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rebol.php
@@ -4,7 +4,7 @@
* --------
* Author: Lecanu Guillaume (Guillaume@LyA.fr)
* Copyright: (c) 2004-2005 Lecanu Guillaume (Guillaume@LyA.fr)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/12/22
*
* Rebol language file for GeSHi.
@@ -192,5 +192,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/reg.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/reg.php
index 157b2bd2..f2978397 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/reg.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/reg.php
@@ -4,7 +4,7 @@
* -------
* Author: Sean Hanna (smokingrope@gmail.com)
* Copyright: (c) 2006 Sean Hanna
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 03/15/2006
*
* Microsoft Registry Editor language file for GeSHi.
@@ -229,5 +229,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rexx.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rexx.php
index b3cb9322..86f44a22 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rexx.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rexx.php
@@ -6,7 +6,7 @@
* Contributors:
* - Walter Pachl (pachl@chello.at)
* Copyright: (c) 2008 Jon Wolfers, (c) 2012 Walter Pachl
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/01/07
*
* Rexx language file for GeSHi.
@@ -158,5 +158,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/robots.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/robots.php
index 0b75f711..8b1fb234 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/robots.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/robots.php
@@ -4,7 +4,7 @@
* --------
* Author: Christian Lescuyer (cl@goelette.net)
* Copyright: (c) 2006 Christian Lescuyer http://xtian.goelette.info
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/02/17
*
* robots.txt language file for GeSHi.
@@ -96,5 +96,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php
index fd6a561f..3ef70e6e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rpmspec.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Paul Grinberg (gri6507 TA unity-linux TOD org)
* Copyright: (c) 2010 Paul Grinberg
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/04/27
*
* RPM Spec language file for GeSHi.
@@ -129,5 +129,3 @@ $language_data = array (
'STRICT_MODE_APPLIES' => GESHI_NEVER,
'SCRIPT_DELIMITERS' => array(),
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php
index e8a4e722..7b15f517 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rsplus.php
@@ -7,7 +7,7 @@
* - Benilton Carvalho (beniltoncarvalho@gmail.com)
* - Fernando Henrique Ferraz Pereira da Rosa (mentus@gmail.com)
* Copyright: (c) 2009 Ron Fredericks (http://www.LectureMaker.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/03/28
*
* R language file for GeSHi.
@@ -479,5 +479,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ruby.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ruby.php
index f6eb1b1e..8c96a239 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ruby.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/ruby.php
@@ -4,7 +4,7 @@
* --------
* Author: Moises Deniz
* Copyright: (c) 2007 Moises Deniz
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/03/21
*
* Ruby language file for GeSHi.
@@ -227,5 +227,3 @@ $language_data = array (
),
'TAB_WIDTH' => 2
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rust.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rust.php
new file mode 100644
index 00000000..c213ab43
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/rust.php
@@ -0,0 +1,235 @@
+<?php
+/*************************************************************************************
+ * rust.php
+ * --------
+ * Author: Edward Hart (edward.dan.hart@gmail.com)
+ * Copyright: (c) 2013 Edward Hart
+ * Release Version: 1.0.8.12
+ * Date Started: 2013/10/20
+ *
+ * Rust language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2014/03/18
+ * - Added support for raw strings
+ * - Color symbols
+ * 2013/10/20
+ * - First Release
+ *
+ * TODO (updated 2013/10/20)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'Rust',
+
+ 'COMMENT_SINGLE' => array('//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ // Raw strings
+ 1 => '/\\br(\\#*)".*?"\\1/'
+ ),
+
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\nrt\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+
+ 'KEYWORDS' => array(
+ // Keywords
+ 1 => array(
+ 'alt', 'as', 'assert', 'break', 'const', 'continue', 'copy', 'do',
+ 'else', 'enum', 'extern', 'fn', 'for', 'if',
+ 'impl', 'in', 'let', 'log', 'loop', 'match', 'mod', 'mut', 'of',
+ 'priv', 'pub', 'ref', 'return', 'self', 'static', 'struct', 'super',
+ 'to', 'trait', 'type', 'unsafe', 'use', 'with', 'while'
+ ),
+ // Boolean values
+ 2 => array( 'true', 'false' ),
+ // Structs and built-in types
+ 3 => array(
+ 'u8', 'i8',
+ 'u16', 'i16',
+ 'u32', 'i32',
+ 'u64', 'i64',
+ 'f32', 'f64',
+ 'int', 'uint',
+ 'float',
+ 'bool',
+ 'str', 'char',
+ 'Argument', 'AsyncWatcher', 'BorrowRecord', 'BufReader',
+ 'BufWriter', 'BufferedReader', 'BufferedStream', 'BufferedWriter',
+ 'ByRef', 'ByteIterator', 'CFile', 'CString', 'CStringIterator',
+ 'Cell', 'Chain', 'Chan', 'ChanOne', 'CharIterator',
+ 'CharOffsetIterator', 'CharRange', 'CharSplitIterator',
+ 'CharSplitNIterator', 'ChunkIter', 'Condition', 'ConnectRequest',
+ 'Coroutine', 'Counter', 'CrateMap', 'Cycle', 'DeflateWriter',
+ 'Display', 'ElementSwaps', 'Enumerate', 'Exp', 'Exp1', 'FileDesc',
+ 'FileReader', 'FileStat', 'FileStream', 'FileWriter', 'Filter',
+ 'FilterMap', 'FlatMap', 'FormatSpec', 'Formatter', 'FsRequest',
+ 'Fuse', 'GarbageCollector', 'GetAddrInfoRequest', 'Handle',
+ 'HashMap', 'HashMapIterator', 'HashMapMoveIterator',
+ 'HashMapMutIterator', 'HashSet', 'HashSetIterator',
+ 'HashSetMoveIterator', 'Hint', 'IdleWatcher', 'InflateReader',
+ 'Info', 'Inspect', 'Invert', 'IoError', 'Isaac64Rng', 'IsaacRng',
+ 'LineBufferedWriter', 'Listener', 'LocalHeap', 'LocalStorage',
+ 'Loop', 'Map', 'MatchesIndexIterator', 'MemReader', 'MemWriter',
+ 'MemoryMap', 'ModEntry', 'MoveIterator', 'MovePtrAdaptor',
+ 'MoveRevIterator', 'NoOpRunnable', 'NonCopyable', 'Normal',
+ 'OSRng', 'OptionIterator', 'Parser', 'Path', 'Peekable',
+ 'Permutations', 'Pipe', 'PipeStream', 'PluralArm', 'Port',
+ 'PortOne', 'Process', 'ProcessConfig', 'ProcessOptions',
+ 'ProcessOutput', 'RC', 'RSplitIterator', 'RandSample', 'Range',
+ 'RangeInclusive', 'RangeStep', 'RangeStepInclusive', 'Rc', 'RcMut',
+ 'ReaderRng', 'Repeat', 'ReprVisitor', 'RequestData',
+ 'ReseedWithDefault', 'ReseedingRng', 'Scan', 'SchedOpts',
+ 'SelectArm', 'SharedChan', 'SharedPort', 'SignalWatcher',
+ 'SipState', 'Skip', 'SkipWhile', 'SocketAddr', 'SplitIterator',
+ 'StackPool', 'StackSegment', 'StandardNormal', 'StdErrLogger',
+ 'StdIn', 'StdOut', 'StdReader', 'StdRng', 'StdWriter',
+ 'StrSplitIterator', 'StreamWatcher', 'TTY', 'Take', 'TakeWhile',
+ 'Task', 'TaskBuilder', 'TaskOpts', 'TcpAcceptor', 'TcpListener',
+ 'TcpStream', 'TcpWatcher', 'Timer', 'TimerWatcher', 'TrieMap',
+ 'TrieMapIterator', 'TrieSet', 'TrieSetIterator', 'Tube',
+ 'UdpSendRequest', 'UdpSocket', 'UdpStream', 'UdpWatcher', 'Unfold',
+ 'UnixAcceptor', 'UnixListener', 'UnixStream', 'Unwinder',
+ 'UvAddrInfo', 'UvError', 'UvEventLoop', 'UvFileStream',
+ 'UvIoFactory', 'UvPausibleIdleCallback', 'UvPipeStream',
+ 'UvProcess', 'UvRemoteCallback', 'UvSignal', 'UvTTY',
+ 'UvTcpAcceptor', 'UvTcpListener', 'UvTcpStream', 'UvTimer',
+ 'UvUdpSocket', 'UvUnboundPipe', 'UvUnixAcceptor', 'UvUnixListener',
+ 'VecIterator', 'VecMutIterator', 'Weighted', 'WeightedChoice',
+ 'WindowIter', 'WriteRequest', 'XorShiftRng', 'Zip', 'addrinfo',
+ 'uv_buf_t', 'uv_err_data', 'uv_process_options_t', 'uv_stat_t',
+ 'uv_stdio_container_t', 'uv_timespec_t'
+ ),
+ // Enums
+ 4 => array(
+ 'Alignment', 'Count', 'Either', 'ExponentFormat', 'FPCategory',
+ 'FileAccess', 'FileMode', 'Flag', 'IoErrorKind', 'IpAddr',
+ 'KeyValue', 'MapError', 'MapOption', 'MemoryMapKind', 'Method',
+ 'NullByteResolution', 'Option', 'Ordering', 'PathPrefix', 'Piece',
+ 'PluralKeyword', 'Position', 'Protocol', 'Result', 'SchedHome',
+ 'SchedMode', 'SeekStyle', 'SendStr', 'SignFormat',
+ 'SignificantDigits', 'Signum', 'SocketType', 'StdioContainer',
+ 'TaskResult', 'TaskType', 'UvSocketAddr', 'Void', 'uv_handle_type',
+ 'uv_membership', 'uv_req_type'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']',
+ '+', '-', '*', '/', '%',
+ '&', '|', '^', '!', '<', '>', '~', '@',
+ ':',
+ ';', ',',
+ '='
+ ),
+
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true
+ ),
+
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #708;',
+ 2 => 'color: #219;',
+ 3 => 'color: #05a;',
+ 4 => 'color: #800;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #a50; font-style: italic;',
+ 1 => 'color: #a11;',
+ 'MULTI' => 'color: #a50; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #a11;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'BRACKETS' => array(''),
+ 'METHODS' => array(
+ 1 => 'color: #164;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sas.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sas.php
index dbf95a14..a5f463cf 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sas.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sas.php
@@ -4,7 +4,7 @@
* -------
* Author: Galen Johnson (solitaryr@gmail.com)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/12/27
*
* SAS language file for GeSHi. Based on the sas vim file.
@@ -286,5 +286,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scala.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scala.php
index 405f59de..dcfb2775 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scala.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scala.php
@@ -4,7 +4,7 @@
* ----------
* Author: Franco Lombardo (franco@francolombardo.net)
* Copyright: (c) 2008 Franco Lombardo, Benny Baumann
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/02/08
*
* Scala language file for GeSHi.
@@ -134,5 +134,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scheme.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scheme.php
index a84b9080..2a6c972f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scheme.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scheme.php
@@ -4,7 +4,7 @@
* ----------
* Author: Jon Raphaelson (jonraphaelson@gmail.com)
* Copyright: (c) 2005 Jon Raphaelson, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/30
*
* Scheme language file for GeSHi.
@@ -166,5 +166,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scilab.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scilab.php
index f011497d..b0951d95 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scilab.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scilab.php
@@ -4,7 +4,7 @@
* --------
* Author: Christophe David (geshi@christophedavid.org)
* Copyright: (c) 2008 Christophe David (geshi@christophedavid.org)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/08/04
*
* SciLab language file for GeSHi.
@@ -291,5 +291,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scl.php
new file mode 100644
index 00000000..1401dcd2
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/scl.php
@@ -0,0 +1,148 @@
+<?php
+/*************************************************************************************
+ * <scl.php>
+ * ---------------------------------
+ * Author: Leonhard Hösch (leonhard.hoesch@siemens.com)
+ * Copyright: (c) 2008 by Leonhard Hösch (siemens.de)
+ * Release Version: 1.0.8.12
+ * Date Started: 2012/09/25
+ *
+ * SCL language file for GeSHi.
+ *
+ * A SCL langauge file.
+ *
+ * CHANGES
+ * -------
+ * <date-of-release> (<GeSHi release>)
+ * - First Release
+ *
+ * TODO (updated <date-of-release>)
+ * -------------------------
+ * <things-to-do>
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'SCL',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'"),
+ 'ESCAPE_CHAR' => '$',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'AND','ANY','ARRAY','AT','BEGIN','BLOCK_DB','BLOCK_FB','BLOCK_FC','BLOCK_SDB',
+ 'BLOCK_SFB','BLOCK_SFC','BOOL','BY','BYTE','CASE','CHAR','CONST','CONTINUE','COUNTER',
+ 'DATA_BLOCK','DATE','DATE_AND_TIME','DINT','DIV','DO','DT','DWORD','ELSE','ELSIF',
+ 'EN','END_CASE','END_CONST','END_DATA_BLOCK','END_FOR','END_FUNCTION',
+ 'END_FUNCTION_BLOCK','END_IF','END_LABEL','END_TYPE','END_ORGANIZATION_BLOCK',
+ 'END_REPEAT','END_STRUCT','END_VAR','END_WHILE','ENO','EXIT','FALSE','FOR','FUNCTION',
+ 'FUNCTION_BLOCK','GOTO','IF','INT','LABEL','MOD','NIL','NOT','OF','OK','OR',
+ 'ORGANIZATION_BLOCK','POINTER','PROGRAM','REAL','REPEAT','RETURN','S5TIME','STRING',
+ 'STRUCT','THEN','TIME','TIMER','TIME_OF_DAY','TO','TOD','TRUE','TYPE','VAR',
+ 'VAR_TEMP','UNTIL','VAR_INPUT','VAR_IN_OUT','VAR_OUTPUT','VOID','WHILE','WORD','XOR'
+ ),
+ 2 =>array(
+ 'UBLKMOV','FILL','CREAT_DB','DEL_DB','TEST_DB','COMPRESS','REPL_VAL','CREA_DBL','READ_DBL',
+ 'WRIT_DBL','CREA_DB','RE_TRIGR','STP','WAIT','MP_ALM','CiR','PROTECT','SET_CLK','READ_CLK',
+ 'SNC_RTCB','SET_CLKS','RTM','SET_RTM','CTRL_RTM','READ_RTM','TIME_TCK','RD_DPARM',
+ 'RD_DPARA','WR_PARM','WR_DPARM','PARM_MOD','WR_REC','RD_REC','RD_DPAR','RDREC','WRREC','RALRM',
+ 'SALRM','RCVREC','PRVREC','SET_TINT','CAN_TINT','ACT_TINT','QRY_TINT','SRT_DINT','QRY_DINT',
+ 'CAN_DINT','MSK_FLT','DMSK_FLT','READ_ERR','DIS_IRT','EN_IRT','DIS_AIRT','EN_AIRT','RD_SINFO',
+ 'RDSYSST','WR_USMSG','OB_RT','C_DIAG','DP_TOPOL','UPDAT_PI','UPDAT_PO','SYNC_PI','SYNC_PO',
+ 'SET','RSET','DRUM','GADR_LGC','LGC_GADR','RD_LGADR','GEO_LOG','LOG_GEO','DP_PRAL','DPSYC_FR',
+ 'D_ACT_DP','DPNRM_DG','DPRD_DAT','DPWR_DAT','PN_IN','PN_OUT','PN_DP','WWW','IP_CONF','GETIO',
+ 'SETIO','GETIO_PART','SETIO_PART','GD_SND','GD_RCV','USEND','URCV','BSEND','BRCV','PUT','GET',
+ 'PRINT','START','STOP','RESUME','STATUS','USTATUS','CONTROL','C_CNTRL','X_SEND','X_RCV',
+ 'X_GET','X_PUT','X_ABORT','I_GET','I_PUT','I_ABORT','TCON','TDISCON','TSEND','TRCV','TUSEND',
+ 'TURCV','NOTIFY','NOTIFY_8P','ALARM','ALARM_8P','ALARM_8','AR_SEND','DIS_MSG','EN_MSG',
+ 'ALARM_SQ','ALARM_S','ALARM_SC','ALARM_DQ','LARM_D','READ_SI','DEL_SI','TP','TON','TOF','CTU',
+ 'CTD','CTUD','CONT_C','CONT_S','PULSEGEN','Analog','DIGITAL','COUNT','FREQUENC','PULSE',
+ 'SEND_PTP','RECV_PTP','RES_RECV','SEND_RK','FETCH_RK','SERVE_RK','H_CTRL','state'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '.', '"', '|', ';', ',', '=>', '>=', '<=', ':=', '=', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #ff6f00;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #009600; font-style: italic;',
+ 'MULTI' => 'color: #009600; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'NUMBERS' => GESHI_NUMBER_INT_BASIC,
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<?php11!!' => '!!11?>'
+ ),
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ ),
+ 'TAB_WIDTH' => 4
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php
index 381161fd..90b06abe 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sdlbasic.php
@@ -4,7 +4,7 @@
* ------------
* Author: Roberto Rossi
* Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/08/19
*
* sdlBasic (http://sdlbasic.sf.net) language file for GeSHi.
@@ -161,5 +161,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smalltalk.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smalltalk.php
index 5b61bada..bd6b4044 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smalltalk.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smalltalk.php
@@ -4,7 +4,7 @@
* --------
* Author: Bananeweizen (Bananeweizen@gmx.de)
* Copyright: (c) 2005 Bananeweizen (www.bananeweizen.de)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/03/27
*
* Smalltalk language file for GeSHi.
@@ -150,5 +150,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smarty.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smarty.php
index 86e9d44c..5c22415b 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smarty.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/smarty.php
@@ -4,7 +4,7 @@
* ----------
* Author: Alan Juden (alan@judenware.org)
* Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/07/10
*
* Smarty template language file for GeSHi.
@@ -188,5 +188,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/spark.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/spark.php
index 0284a1a4..4999e788 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/spark.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/spark.php
@@ -4,7 +4,7 @@
* -------
* Author: Phil Thornley (tux@inmail.cz)
* Copyright: (c) 2004 Phil Thornley (http://www.sparksure.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/08/22
*
* SPARK language file for GeSHi.
@@ -91,9 +91,6 @@ $language_data = array (
'ESCAPE_CHAR' => array(
0 => 'color: #000099; font-weight: bold;'
),
- 'BRACKETS' => array(
- 0 => 'color: #66cc66;'
- ),
'STRINGS' => array(
0 => 'color: #7f007f;'
),
@@ -128,5 +125,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sparql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sparql.php
index 282165a0..feb1f983 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sparql.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sparql.php
@@ -4,7 +4,7 @@
* -------
* Author: Karima Rafes (karima.rafes@bordercloud.com)
* Copyright: (c) 2011 Bourdercloud.com
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2011/11/05
*
* SPARQL language file for GeSHi.
@@ -151,5 +151,3 @@ $language_data = array (
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sql.php
index 4d08a51f..47c50328 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sql.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/sql.php
@@ -6,7 +6,7 @@
* Contributors:
* - Jürgen Thomas (Juergen.Thomas@vs-polis.de)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* SQL language file for GeSHi.
@@ -159,7 +159,10 @@ $language_data = array (
'SCRIPT_DELIMITERS' => array(
),
'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array( //'
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\.\|\#|^&])"
+ )
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/standardml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/standardml.php
new file mode 100644
index 00000000..970aa110
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/standardml.php
@@ -0,0 +1,216 @@
+<?php
+/*************************************************************************************
+ * standardml.php
+ * ----------
+ * Author: eldesh (nephits@gmail.com)
+ * Copyright: (c) 2014 eldesh (http://d.hatena.ne.jp/eldesh/)
+ * Release Version: 1.0.8.12
+ * Date Started: 2014/02/04
+ *
+ * SML (StandardML'97) language file for GeSHi.
+ * This file also support some implementation dependent keywords by SML/NJ and SML#.
+ *
+ * CHANGES
+ * -------
+ * 2014/02/05 (1.0.8.11)
+ * - First Release
+ *
+ * TODO (updated 2014/02/04)
+ * -------------------------
+ * - support character literal
+ * - support Vector expressions and patterns (http://www.smlnj.org/doc/features.html)
+ * - support more Basis functions...?
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'StandardML',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'COMMENT_REGEXP' => array(1 => '/\(\*(?:(?R)|.)+?\*\)/s'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'NUMBERS' =>
+ array(
+ /* integer dec */
+ 0 => GESHI_NUMBER_INT_BASIC,
+ /* integer hex */
+ 1 => GESHI_NUMBER_HEX_PREFIX,
+ /* real */
+ 2 => GESHI_NUMBER_FLT_SCI_ZERO,
+ /* word dec */
+ 3 => '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])0w[0-9]+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)',
+ /* word hex */
+ 4 => '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])0wx[0-9a-fA-F]+?(?![0-9a-z]|\.(?:[eE][+\-]?)?\d)'
+ ),
+ 'KEYWORDS' => array(
+ /* main SML keywords */
+ 1 => array(
+ /* deprecated: SML90 */
+ 'abstype',
+
+ 'and', 'andalso', 'as', 'begin', 'case', 'datatype', 'else',
+ 'end', 'exception', 'fn', 'fun', 'functor',
+ 'if', 'in', 'infix', 'infixr', 'include', 'let', 'local', 'nonfix',
+ 'of', 'op', 'open', 'orelse',
+ 'rec', 'raise', 'sharing', 'sig', 'signature', 'struct', 'structure', 'then',
+ 'type', 'val', 'while', 'where', 'with', 'withtype'
+ ),
+ /* Top-level type and constructors */
+ 2 => array(
+ 'unit', 'int', 'word', 'real', 'char', 'string', 'substring', 'exn',
+ 'array', 'vector', 'bool', 'option',
+ 'list'
+ ),
+ /* standard structures/signatures/functors provided by Basis library */
+ 3 => array(
+ 'ARRAY', 'Array', 'Array2', 'ARRAY2', 'ArraySlice', 'ARRAY_SLICE',
+ 'BinIO', 'BIT_FLAGS', 'Bool', 'BOOL', 'Byte', 'CHAR', 'Char',
+ 'CommandLine', 'Date', 'General', 'GenericSock', 'IEEEReal', 'IMPERATIVE_IO',
+ 'ImperativeIO', 'INetSock', 'INTEGER', 'Int', 'IntInf', 'IO', 'List', 'ListPair',
+ 'MATH', 'MONO_ARRAY', 'MONO_ARRAY2', 'MONO_ARRAY_SLICE', 'MONO_VECTOR',
+ 'MONO_VECTOR_SLICE', 'NetHostDB', 'NetProtDB', 'NetServDB', 'Option',
+ 'OS', 'OS.FileSys', 'OS.IO', 'OS.Path', 'OS.Process', 'PACK_REAL', 'PACK_WORD',
+ 'Posix', 'Posix.Error', 'Posix.FileSys', 'Posix.IO', 'Posix.ProcEnv', 'Posix.Process',
+ 'Posix.Signal', 'Posix.SysDB', 'Posix.TTY', 'PRIM_IO', 'PrimIO', 'REAL', 'Real', 'Socket',
+ 'STREAM_IO', 'StreamIO', 'STRING', 'String', 'StringCvt', 'SUBSTRING', 'Substring', 'TEXT', 'TEXT_IO',
+ 'TEXT_STREAM_IO', 'Time', 'Timer', 'Unix', 'UnixSock', 'VECTOR', 'Vector', 'VECTOR_SLICE',
+ 'Windows', 'WORD', 'Word'
+ ),
+ /* Top-level value identifiers / constructors */
+ 4 => array(
+ 'app', 'before', 'ceil', 'chr', 'concat', 'exnMessage', 'exnName', 'explode',
+ 'floor', 'foldl', 'foldr', 'getOpt', 'hd', 'ignore', 'implode', 'isSome', 'length', 'map', 'not',
+ 'null', 'o', 'ord', 'print', 'rev', 'round', 'size', 'str', 'tl', 'trunc',
+ 'use', 'valOf',
+ /* constructors */
+ 'ref', 'true', 'false', 'NONE', 'SOME', 'LESS', 'EQUAL', 'GREATER', 'nil',
+ /* overloaded identifiers */
+ 'div', 'mod', 'abs'
+ ),
+ /* standard exceptions */
+ 5 => array (
+ 'Bind', 'Chr', 'Div', 'Domain', 'Empty', 'Fail', 'Match', 'Overflow', 'Size', 'Span', 'Subscript'
+ ),
+ /* implementation dependent keyword (not be sorted) */
+ 6 => array (
+ /** SML/NJ */
+ /* functor signature > http://www.smlnj.org/doc/features.html */
+ 'funsig',
+ /* lazy evaluation */
+ 'lazy',
+ /** SML# */
+ /* binding to C function */
+ '_import',
+ /* read other source */
+ '_require',
+ /* export aggregated interface files */
+ 'include',
+ /* integrated sql */
+ '_sqlserver', '_sql', 'from', 'where', '_sqleval', '_sqlexec',
+ 'select', 'insert', 'update', 'begin', 'commit', 'rollback',
+ 'values', 'delete'
+ )
+ ),
+ /* highlighting symbols */
+ 'SYMBOLS' => array(
+ 0 => array('=', ':', ':>', '=>', '(', ')', '|', '_', '==', ';', '.'),
+ 1 => array('!', ':=', '@', '^'),
+ 2 => array('[', ']', '::', '{', '}'),
+ /* overloaded identifiers */
+ 3 => array('+', '-', '*', '/', '~', '<', '>', '<=', '>=')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true, /* keywords */
+ 2 => true, /* top level types */
+ 3 => true, /* structures */
+ 4 => true, /* top level identifiers */
+ 5 => true, /* top level exceptions */
+ 6 => true /* implementation dependent keyword */
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #557cde; font-weight: bold;',
+ 2 => 'color: #8dda4a; font-weight: bold;',
+ 3 => 'color: #0066cc; font-weight: bold;',
+ 4 => 'color: #5c8cbb;',
+ 5 => 'color: #f33e64; font-weight: bold;',
+ 6 => 'color: #f33e64;'
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #5d478b; font-style: italic;', /* light purple */
+ 1 => 'color: #5d478b; font-style: italic;' /* light purple */
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #79c200;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #488614;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #fb7600;',
+ 1 => 'color: #fb7600;',
+ 2 => 'color: #fb7600;',
+ 3 => 'color: #fb7600;',
+ 4 => 'color: #fb7600;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0066cc;'
+ ),
+ 'REGEXPS' => array(
+ 1 => 'font-style:italic; color:#9f7eff;',
+ 2 => 'font-weight:bold; color:#8dda4a;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #ff4bcf;',
+ 1 => 'color: #ff4bcf; font-weight: bold;', // pink
+ 2 => 'color: #90f963;', // orange
+ 3 => 'color: #fa5bf8;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => 'http://www.standardml.org/Basis/top-level-chapter.html',
+ 3 => '',
+ 4 => '',
+ 5 => 'http://www.standardml.org/Basis/top-level-chapter.html#section:2',
+ 6 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ 1 => '(?<!\w)#\w+', /* record field access */
+ 2 => '(?:(?<![0-9a-zA-Z]))\'[a-z]+' /* type variable */
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/stonescript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/stonescript.php
index 2844e885..e1697d88 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/stonescript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/stonescript.php
@@ -4,7 +4,7 @@
* --------
* Author: Archimmersion ( based on ruby.php by Moises Deniz )
* Copyright: (c) 2011 Archimmersion ( http://www.archimmersion.com )
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2011/03/30
*
* StoneScript language file for GeSHi.
@@ -303,5 +303,3 @@ $language_data = array (
),
'TAB_WIDTH' => 2
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/systemverilog.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/systemverilog.php
index f2ba92b1..125b8c16 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/systemverilog.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/systemverilog.php
@@ -4,7 +4,7 @@
* -------
* Author: Sean O'Boyle
* Copyright: (C) 2008 IntelligentDV
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/06/25
*
* SystemVerilog IEEE 1800-2009(draft8) language file for GeSHi.
@@ -52,9 +52,9 @@
* Project: SyntaxFiles
*
* File: systemverilog.php
- * $LastChangedBy: benbe $
- * $LastChangedDate: 2012-08-18 01:56:20 +0200 (Sa, 18. Aug 2012) $
- * $LastChangedRevision: 2542 $
+ * $LastChangedBy$
+ * $LastChangedDate$
+ * $LastChangedRevision$
*
************************************************************************/
@@ -313,5 +313,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tcl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tcl.php
index 4dd7be87..697411fe 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tcl.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tcl.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Reid van Melle (rvanmelle@gmail.com)
* Copyright: (c) 2004 Reid van Melle (sorry@nowhere)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/05/05
*
* TCL/iTCL language file for GeSHi.
@@ -50,14 +50,14 @@
$language_data = array (
'LANG_NAME' => 'TCL',
- 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_SINGLE' => array(),
'COMMENT_MULTI' => array(),
'COMMENT_REGEXP' => array(
- 1 => '/(?<!\\\\)#(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ 1 => '/(?:^|(?<=\{|;))\s*#(?:\\\\\\\\|\\\\\\n|.)*$/m',
//2 => '/{[^}\n]+}/'
),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
- 'QUOTEMARKS' => array('"', "'"),
+ 'QUOTEMARKS' => array('"'),
'ESCAPE_CHAR' => '\\',
'KEYWORDS' => array(
/*
@@ -187,8 +187,6 @@ $language_data = array (
'PARSER_CONTROL' => array(
'COMMENTS' => array(
'DISALLOWED_BEFORE' => '\\'
+ )
)
- )
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php
index f125642d..2a4b412c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/teraterm.php
@@ -4,7 +4,7 @@
* --------
* Author: Boris Maisuradze (boris at logmett.com)
* Copyright: (c) 2008 Boris Maisuradze (http://logmett.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/09/26
*
* Tera Term Macro language file for GeSHi.
@@ -350,5 +350,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/text.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/text.php
index 87fb7110..dbb97a3b 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/text.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/text.php
@@ -4,7 +4,7 @@
* --------
* Author: Sean Hanna (smokingrope@gmail.com)
* Copyright: (c) 2006 Sean Hanna
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 04/23/2006
*
* Standard Text File (No Syntax Highlighting).
@@ -77,8 +77,6 @@ $language_data = array (
'PARSER_CONTROL' => array(
'ENABLE_FLAGS' => array(
'ALL' => GESHI_NEVER
- ),
- )
+ )
+ )
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/thinbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/thinbasic.php
index f54959e1..0783b315 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/thinbasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/thinbasic.php
@@ -4,7 +4,7 @@
* ------
* Author: Eros Olmi (eros.olmi@thinbasic.com)
* Copyright: (c) 2006 Eros Olmi (http://www.thinbasic.com), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/05/12
*
* thinBasic language file for GeSHi.
@@ -864,5 +864,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tsql.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tsql.php
index b4bf6bda..a990018f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tsql.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/tsql.php
@@ -4,7 +4,7 @@
* --------
* Author: Duncan Lock (dunc@dflock.co.uk)
* Copyright: (c) 2006 Duncan Lock (http://dflock.co.uk/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/11/22
*
* T-SQL language file for GeSHi.
@@ -305,11 +305,14 @@ $language_data = array (
'fn_trace_geteventinfo', 'fn_trace_getfilterinfo', 'fn_trace_getinfo',
'fn_trace_gettable', 'fn_virtualfilestats','fn_listextendedproperty',
),
+ 5 => array(
+ 'ALL', 'AND', 'ANY', 'BETWEEN', 'CROSS', 'EXISTS', 'IN', 'JOIN', 'LIKE', 'NOT', 'NULL',
+ 'OR', 'OUTER', 'SOME',
+ )
),
'SYMBOLS' => array(
'!', '!=', '%', '&', '&&', '(', ')', '*', '+', '-', '/', '<', '<<', '<=',
- '<=>', '<>', '=', '>', '>=', '>>', '^', 'ALL', 'AND', 'ANY', 'BETWEEN', 'CROSS',
- 'EXISTS', 'IN', 'JOIN', 'LIKE', 'NOT', 'NULL', 'OR', 'OUTER', 'SOME', '|', '||', '~'
+ '<=>', '<>', '=', '>', '>=', '>>', '^', '|', '||', '~'
),
'CASE_SENSITIVE' => array(
GESHI_COMMENTS => false,
@@ -317,13 +320,15 @@ $language_data = array (
2 => false,
3 => false,
4 => false,
+ 5 => false
),
'STYLES' => array(
'KEYWORDS' => array(
1 => 'color: #0000FF;',
2 => 'color: #FF00FF;',
3 => 'color: #AF0000;',
- 4 => 'color: #AF0000;'
+ 4 => 'color: #AF0000;',
+ 5 => 'color: #808080;'
),
'COMMENTS' => array(
1 => 'color: #008080;',
@@ -357,7 +362,8 @@ $language_data = array (
1 => '',
2 => '',
3 => '',
- 4 => ''
+ 4 => '',
+ 5 => ''
),
'OOLANG' => true,
'OBJECT_SPLITTERS' => array(
@@ -371,5 +377,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/typoscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/typoscript.php
index 6751aaa8..c5488661 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/typoscript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/typoscript.php
@@ -4,7 +4,7 @@
* --------
* Author: Jan-Philipp Halle (typo3@jphalle.de)
* Copyright: (c) 2005 Jan-Philipp Halle (http://www.jphalle.de/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/07/29
*
* TypoScript language file for GeSHi.
@@ -220,7 +220,7 @@ $language_data = array (
'REGEXPS' => array(
// xhtml tag
2 => array(
- GESHI_SEARCH => '(&lt;)([a-zA-Z\\/][^\\/\\|]*?)(&gt;)',
+ GESHI_SEARCH => '(&lt;)([a-zA-Z\\/][^\\/\\\x7C]*?)(&gt;)',
GESHI_REPLACE => '\\2',
GESHI_MODIFIERS => 's',
GESHI_BEFORE => '\\1',
@@ -294,7 +294,5 @@ $language_data = array (
'SCRIPT_DELIMITERS' => array(
),
'HIGHLIGHT_STRICT_BLOCK' => array(
- ),
+ )
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/unicon.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/unicon.php
index 6fe62d0f..7bc377bd 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/unicon.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/unicon.php
@@ -4,7 +4,7 @@
* --------
* Author: Matt Oates (mattoates@gmail.com)
* Copyright: (c) 2010 Matt Oates (http://mattoates.co.uk)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/04/20
*
* Unicon the Unified Extended Dialect of Icon language file for GeSHi.
@@ -206,5 +206,3 @@ $language_data = array(
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/upc.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/upc.php
index e0530322..b1e873ef 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/upc.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/upc.php
@@ -8,7 +8,7 @@
* - Jack Lloyd (lloyd@randombit.net)
* - Michael Mol (mikemol@gmail.com)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* UPC language file for GeSHi.
@@ -266,5 +266,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/urbi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/urbi.php
index a7353ea8..ec2aec49 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/urbi.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/urbi.php
@@ -4,7 +4,7 @@
* -------
* Author: Alexandre Morgand (morgand.alexandre@gmail.com)
* Copyright: (c) 2011 Morgand (http://gostai.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2011/09/10
*
* Urbi language file for GeSHi.
@@ -196,5 +196,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4,
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/uscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/uscript.php
index 58cdb8d9..f76a2dc7 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/uscript.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/uscript.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: pospi (pospi@spadgos.com)
* Copyright: (c) 2007 pospi (http://pospi.spadgos.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/05/21
*
* UnrealScript language file for GeSHi.
@@ -295,5 +295,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vala.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vala.php
index acac57e2..a823dbfd 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vala.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vala.php
@@ -4,7 +4,7 @@
* ----------
* Author: Nicolas Joseph (nicolas.joseph@valaide.org)
* Copyright: (c) 2009 Nicolas Joseph
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/04/29
*
* Vala language file for GeSHi.
@@ -147,5 +147,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vb.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vb.php
index 528e7cd4..bcfe614c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vb.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vb.php
@@ -5,7 +5,7 @@
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org),
* Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/08/30
*
* Visual Basic language file for GeSHi.
@@ -50,7 +50,7 @@ $language_data = array (
'COMMENT_MULTI' => array(),
'COMMENT_REGEXP' => array(
// Comments (either single or multiline with _
- 1 => '/\'.*(?<! _)\n/sU',
+ 1 => '/\'.*(?<! _)$/sUm',
),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
'QUOTEMARKS' => array('"'),
@@ -65,16 +65,16 @@ $language_data = array (
'Call', 'Private', 'Public', 'Sub', 'Explicit', 'Compare', 'Exit'
),
3 => array(
- 'And', 'Case', 'Do', 'Each', 'Else', 'ElseIf', 'For',
- 'Goto', 'If', 'Is', 'Loop', 'Next', 'Not', 'Or', 'Select', 'Step',
- 'Then', 'To', 'Until', 'While', 'With', 'Xor', 'WithEvents',
- 'DoEvents', 'Close', 'Like', 'In', 'End'
+ 'And', 'Case', 'Do', 'Each', 'Else', 'ElseIf', 'End', 'For', 'GoSub',
+ 'Goto', 'If', 'Is', 'Loop', 'Next', 'Not', 'Or', 'Resume', 'Select',
+ 'Step', 'Then', 'To', 'Until', 'While', 'With', 'Xor', 'WithEvents',
+ 'DoEvents', 'Close', 'Like', 'In'
),
4 => array(
'As', 'Dim', 'Get', 'Set', 'ReDim', 'Error',
- 'Resume', 'Declare', 'Let', 'ByRef', 'ByVal',
+ 'Declare', 'Let', 'ByRef', 'ByVal',
'Optional', 'Property', 'Control', 'UBound', 'Mod',
- 'GoSub', 'Implements', 'Input', 'LBound', 'Static', 'Stop',
+ 'Implements', 'Input', 'LBound', 'Static', 'Stop',
'Type', 'TypeOf', 'On', 'Open', 'Output', 'ParamArray',
'Preserve', 'Print', 'RaiseEvent', 'Random', 'Line'
),
@@ -153,5 +153,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php
index 758df989..e4d1464c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbnet.php
@@ -4,7 +4,7 @@
* ---------
* Author: Alan Juden (alan@judenware.org)
* Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/06/04
*
* VB.NET language file for GeSHi.
@@ -178,5 +178,3 @@ $language_data = array (
)
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbscript.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbscript.php
new file mode 100644
index 00000000..6db3bbd3
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vbscript.php
@@ -0,0 +1,153 @@
+<?php
+/*************************************************************************************
+ * vbscript.php
+ * ------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org),
+ * Nigel McNie (http://qbnz.com/highlighter),
+ * Rory Prendergast (http://www.tanium.com)
+ * Release Version: 1.0.8.12
+ * Date Started: 2012/08/20
+ *
+ * VBScript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2012/08/20 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi 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.
+ *
+ * GeSHi 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 GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'VBScript',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ // Comments (either single or multiline with _
+ 1 => '/\'.*(?<! _)\n/sU',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'Empty', 'Nothing', 'Null', 'vbArray', 'vbBoolean', 'vbByte',
+ 'vbCr', 'vbCrLf', 'vbCurrency', 'vbDate', 'vbDouble', 'vbEmpty',
+ 'vbError', 'vbFirstFourDays', 'vbFirstFullWeek', 'vbFirstJan1',
+ 'vbFormFeed', 'vbFriday', 'vbInteger', 'vbLf', 'vbLong', 'vbMonday',
+ 'vbNewLine', 'vbNull', 'vbNullChar', 'vbNullString', 'vbObject',
+ 'vbSaturday', 'vbSingle', 'vbString', 'vbSunday', 'vbTab',
+ 'vbThursday', 'vbTuesday', 'vbUseSystem', 'vbUseSystemDayOfWeek',
+ 'vbVariant', 'vbWednesday', 'FALSE', 'TRUE'
+ ),
+ 2 => array(
+ 'bs', 'Array', 'Asc', 'Atn', 'CBool', 'CByte', 'CDate', 'CDbl', 'Chr',
+ 'CInt', 'CLng', 'Cos', 'CreateObject', 'CSng', 'CStr', 'Date', 'DateAdd',
+ 'DateDiff', 'DatePart', 'DateSerial', 'DateValue', 'Day', 'Eval', 'Exp',
+ 'Filter', 'Fix', 'FormatDateTime', 'FormatNumber', 'FormatPercent',
+ 'GetObject', 'Hex', 'Hour', 'InputBox', 'InStr', 'InstrRev', 'Int',
+ 'IsArray', 'IsDate', 'IsEmpty', 'IsNull', 'IsNumeric', 'IsObject', 'Join',
+ 'LBound', 'LCase', 'Left', 'Len', 'Log', 'LTrim', 'Mid', 'Minute', 'Month',
+ 'MonthName', 'MsgBox', 'Now', 'Oct', 'Replace', 'RGB', 'Right', 'Rnd',
+ 'Round', 'RTrim', 'ScriptEngine', 'ScriptEngineBuildVersion',
+ 'ScriptEngineMajorVersion', 'ScriptEngineMinorVersion', 'Second',
+ 'Sgn', 'Sin', 'Space', 'Split', 'Sqr', 'StrComp', 'String', 'StrReverse',
+ 'Tan', 'Time', 'TimeSerial', 'TimeValue', 'Trim', 'TypeName', 'UBound',
+ 'UCase', 'VarType', 'Weekday', 'WeekdayName', 'Year'
+ ),
+ 3 => array(
+ 'Call', 'Case', 'Const', 'Dim', 'Do', 'Each', 'Else', 'End', 'Erase',
+ 'Execute', 'Exit', 'For', 'Function', 'Gosub', 'Goto', 'If', 'Loop',
+ 'Next', 'On Error', 'Option Explicit', 'Private', 'Public',
+ 'Randomize', 'ReDim', 'Rem', 'Resume', 'Select', 'Set', 'Sub', 'Then',
+ 'Wend', 'While', 'With', 'In', 'To', 'Step'
+ ),
+ 4 => array(
+ 'And', 'Eqv', 'Imp', 'Is', 'Mod', 'Not', 'Or', 'Xor'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '-', '&', '*', '/', '\\', '^', '+', '<', '<=', '<>', '=', '>', '>='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #F660AB; font-weight: bold;',
+ 2 => 'color: #E56717; font-weight: bold;',
+ 3 => 'color: #8D38C9; font-weight: bold;',
+ 4 => 'color: #151B8D; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;'
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #800000; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'SPACE_AS_WHITESPACE' => true
+ ),
+ 'ENABLE_FLAGS' => array(
+ 'BRACKETS' => GESHI_NEVER
+ )
+ )
+);
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vedit.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vedit.php
index 19b2bdb2..72f4b535 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vedit.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vedit.php
@@ -4,7 +4,7 @@
* --------
* Author: Pauli Lindgren (pauli0212@yahoo.com)
* Copyright: (c) 2009 Pauli Lindgren (http://koti.mbnet.fi/pkl/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/12/16
*
* Vedit macro language language file for GeSHi.
@@ -99,5 +99,3 @@ $language_data = array(
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/verilog.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/verilog.php
index 2bf66d1c..77e5927d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/verilog.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/verilog.php
@@ -2,9 +2,9 @@
/**
* verilog.php
* -----------
- * Author: G�nter Dannoritzer <dannoritzer@web.de>
- * Copyright: (C) 2008 Guenter Dannoritzer
- * Release Version: 1.0.8.11
+ * Author: Günter Dannoritzer <dannoritzer@web.de>
+ * Copyright: (C) 2008 Günter Dannoritzer
+ * Release Version: 1.0.8.12
* Date Started: 2008/05/28
*
* Verilog language file for GeSHi.
@@ -19,6 +19,9 @@
* TODO (updated 2008/05/29)
* -------------------------
*
+ * 2013/01/08
+ * - extended keywords to include system keywords
+ *
*************************************************************************************
*
* This file is part of GeSHi.
@@ -49,22 +52,41 @@ $language_data = array (
'ESCAPE_CHAR' => '\\',
'KEYWORDS' => array(
// keywords
- 1 => array('always', 'and', 'assign', 'begin', 'buf', 'bufif0', 'bufif1', 'case',
- 'casex', 'casez', 'cmos', 'deassign', 'default', 'defparam',
- 'disable', 'edge', 'else', 'end', 'endcase', 'endfunction',
- 'endmodule', 'endprimitive', 'endspecify', 'endtable', 'endtask',
- 'event', 'fork', 'for', 'force', 'forever', 'function', 'highz0',
- 'highz1', 'if', 'ifnone', 'initial', 'inout', 'input', 'integer',
- 'join', 'large', 'macromodule', 'medium', 'module', 'nand',
- 'negedge', 'nmos', 'nor', 'not', 'notif0', 'notif1', 'or',
- 'output', 'parameter', 'pmos', 'posedge', 'primitive', 'pull0',
- 'pull1', 'pulldown', 'pullup', 'rcmos', 'real', 'realtime', 'reg',
- 'release', 'repeat', 'rnmos', 'rpmos', 'rtran', 'rtranif0',
- 'rtranif1', 'scalared', 'small', 'specify', 'specparam',
- 'strong0', 'strong1', 'supply0', 'supply1', 'table', 'task',
- 'time', 'tran', 'tranif0', 'tranif1', 'tri', 'tri0', 'tri1',
- 'triand', 'trior', 'trireg', 'vectored', 'wait', 'wand', 'weak0',
- 'weak1', 'while', 'wire', 'wor', 'xnor', 'xor'
+ 1 => array(
+ 'accept_on','alias',
+ 'always','always_comb','always_ff','always_latch','and','assert',
+ 'assign','assume','automatic','before','begin','bind','bins','binsof',
+ 'bit','break','buf','bufif0','bufif1','byte','case','casex','casez',
+ 'cell','chandle','checker','class','clocking','cmos','config','const',
+ 'constraint','context','continue','cover','covergroup','coverpoint','cross',
+ 'deassign','default','defparam','design','disable','dist','do','edge','else',
+ 'end','endcase','endchecker','endclass','endclocking','endconfig',
+ 'endfunction','endgenerate','endgroup','endinterface','endmodule',
+ 'endpackage','endprimitive','endprogram','endproperty','endspecify',
+ 'endsequence','endtable','endtask','enum','event','eventually','expect',
+ 'export','extends','extern','final','first_match','for','force','foreach',
+ 'forever','fork','forkjoin','function','generate','genvar','global',
+ 'highz0','highz1','if','iff','ifnone','ignore_bins','illegal_bins',
+ 'implies','import','incdir','include','initial','inout','input','inside',
+ 'instance','int','integer','interface','intersect','join','join_any',
+ 'join_none','large','let','liblist','library','local','localparam',
+ 'logic','longint','macromodule','matches','medium','modport','module','nand',
+ 'negedge','new','nexttime','nmos','nor','noshowcancelled','not','notif0',
+ 'notif1','null','or','output','package','packed','parameter','pmos','posedge',
+ 'primitive','priority','program','property','protected','pull0','pull1',
+ 'pulldown','pullup','pulsestyle_ondetect','pulsestyle_onevent','pure',
+ 'rand','randc','randcase','randsequence','rcmos','real','realtime','ref',
+ 'reg','reject_on','release','repeat','restrict','return','rnmos','rpmos',
+ 'rtran','rtranif0','rtranif1','s_always','s_eventually','s_nexttime',
+ 's_until','s_until_with','scalared','sequence','shortint','shortreal',
+ 'showcancelled','signed','small','solve','specify','specparam','static',
+ 'string','strong','strong0','strong1','struct','super','supply0','supply1',
+ 'sync_accept_on','sync_reject_on','table','tagged','task','this','throughout',
+ 'time','timeprecision','timeunit','tran','tranif0','tranif1','tri','tri0',
+ 'tri1','triand','trior','trireg','type','typedef','union','unique','unique0',
+ 'unsigned','until','until_with','untyped','use','uwire','var','vectored',
+ 'virtual','void','wait','wait_order','wand','weak','weak0','weak1','while',
+ 'wildcard','wire','with','within','wor','xnor','xor'
),
// system tasks
2 => array(
@@ -169,5 +191,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php
index a8f37e67..c89a098e 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vhdl.php
@@ -6,7 +6,7 @@
* Contributors:
* - Kevin Thibedeau (kevinpt@yahoo.com)
* Copyright: (c) 2005 Alexander Krause
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/06/15
*
* VHDL (VHSICADL, very high speed integrated circuit HDL) language file for GeSHi.
@@ -179,5 +179,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vim.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vim.php
index fe7e5e00..43539435 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vim.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/vim.php
@@ -6,7 +6,7 @@
* Contributors:
* - Laurent Peuch (psycojoker@gmail.com)
* Copyright: (c) 2008 Swaroop C H (http://www.swaroopch.com)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/10/19
*
* Vim scripting language file for GeSHi.
@@ -416,5 +416,3 @@ $language_data = array(
'SCRIPT_DELIMITERS' => array(),
'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualfoxpro.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualfoxpro.php
index 123a3db4..e3cd748f 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualfoxpro.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualfoxpro.php
@@ -4,7 +4,7 @@
* ----------------
* Author: Roberto Armellin (r.armellin@tin.it)
* Copyright: (c) 2004 Roberto Armellin, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/09/17
*
* Visual FoxPro language file for GeSHi.
@@ -452,5 +452,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualprolog.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualprolog.php
index d36f1c67..1a05e75a 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualprolog.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/visualprolog.php
@@ -4,7 +4,7 @@
* ----------
* Author: Thomas Linder Puls (puls@pdc.dk)
* Copyright: (c) 2008 Thomas Linder Puls (puls@pdc.dk)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/11/20
*
* Visual Prolog language file for GeSHi.
@@ -125,5 +125,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whitespace.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whitespace.php
index 58f39637..4a6957b5 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whitespace.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whitespace.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2009/10/31
*
* Whitespace language file for GeSHi.
@@ -117,5 +117,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whois.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whois.php
index b1386944..0eebde20 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whois.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/whois.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/09/14
*
* Whois response (RPSL format) language file for GeSHi.
@@ -174,7 +174,5 @@ $language_data = array (
'METHODS' => GESHI_NEVER,
'SCRIPT' => GESHI_NEVER
)
- ),
+ )
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php
index 3599a027..bae96a0c 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/winbatch.php
@@ -4,7 +4,7 @@
* ------------
* Author: Craig Storey (storey.craig@gmail.com)
* Copyright: (c) 2004 Craig Storey (craig.xcottawa.ca)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2006/05/19
*
* WinBatch language file for GeSHi.
@@ -365,5 +365,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php
index 2edede36..4f9cd800 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xbasic.php
@@ -4,7 +4,7 @@
* ----------
* Author: Jos Gabriel Moya Yangela (josemoya@gmail.com)
* Copyright: (c) 2005 Jos Gabriel Moya Yangela (http://aprenderadesaprender.6te.net)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2005/11/23
*
* XBasic language file for GeSHi.
@@ -139,5 +139,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xml.php
index 6354e457..b7a416e1 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xml.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xml.php
@@ -4,7 +4,7 @@
* -------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2004/09/01
*
* XML language file for GeSHi. Based on the idea/file by Christian Weiske
@@ -153,5 +153,3 @@ $language_data = array (
)
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xorg_conf.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xorg_conf.php
index 99edc665..35718beb 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xorg_conf.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xorg_conf.php
@@ -4,7 +4,7 @@
* ----------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2008 Milian Wolff (http://milianw.de)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2008/06/18
*
* xorg.conf language file for GeSHi.
@@ -120,5 +120,3 @@ $language_data = array (
),
'TAB_WIDTH' => 4
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xpp.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xpp.php
index a06e2779..4ea5e227 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xpp.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/xpp.php
@@ -4,7 +4,7 @@
* -------
* Author: Simon Butcher (simon@butcher.name)
* Copyright: (c) 2007 Simon Butcher (http://simon.butcher.name/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/02/27
*
* Axapta/Dynamics Ax X++ language file for GeSHi.
@@ -432,5 +432,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?>
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/yaml.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/yaml.php
index a2974eb5..7e640386 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/yaml.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/yaml.php
@@ -4,7 +4,7 @@
* --------
* Author: Josh Ventura (JoshV10@gmail.com)
* Copyright: (c) 2010 Josh Ventura
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/12/14
*
* YAML language file for GeSHi.
@@ -140,11 +140,9 @@ $language_data = array (
),
'URLS' => array(1 => ''),
'OOLANG' => false,
- 'OBJECT_SPLITTERS' => array( ),
- 'REGEXPS' => array( ),
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
'STRICT_MODE_APPLIES' => GESHI_NEVER,
- 'SCRIPT_DELIMITERS' => array( ),
- 'HIGHLIGHT_STRICT_BLOCK' => array( )
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/z80.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/z80.php
index 47326bb2..07df46d0 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/z80.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/z80.php
@@ -4,7 +4,7 @@
* -------
* Author: Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2007-2008 Benny Baumann (http://www.omorphia.de/)
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2007/02/06
*
* ZiLOG Z80 Assembler language file for GeSHi.
@@ -140,5 +140,3 @@ $language_data = array (
),
'TAB_WIDTH' => 8
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php
index b1de472b..1017678d 100644
--- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php
+++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/zxbasic.php
@@ -4,7 +4,7 @@
* -------------
* Author: Jose Rodriguez (a.k.a. Boriel)
* Based on Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org) Freebasic template
- * Release Version: 1.0.8.11
+ * Release Version: 1.0.8.12
* Date Started: 2010/06/19
*
* ZXBasic language file for GeSHi.
@@ -146,5 +146,3 @@ $language_data = array (
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
-
-?> \ No newline at end of file
diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/ksh.json b/extensions/SyntaxHighlight_GeSHi/i18n/ksh.json
index 08f6e410..252f1d64 100644
--- a/extensions/SyntaxHighlight_GeSHi/i18n/ksh.json
+++ b/extensions/SyntaxHighlight_GeSHi/i18n/ksh.json
@@ -5,9 +5,9 @@
]
},
"syntaxhighlight-desc": "Deijt — en <code>&lt;syntaxhighlight&gt;</code>-Affschnedde — de Syntax fon beshtemmpte Computer-Shprooche makeere. Bruch dobei dä [http://qbnz.com/highlighter/ GeSHi Highlighter]",
- "syntaxhighlight-specify": "Mer moß en Shprooch aanjevve, esu en dä Aat wi hee:",
+ "syntaxhighlight-specify": "Mer moss en Schprohch aanjävve, esu en dä Aat wi heh:",
"syntaxhighlight-supported": "Di Shprooche, dänne ier Syntax mer makeere könne, sin:",
- "syntaxhighlight-err-loading": "(Enne Fääler es opjetrodde, wi mer de Leß met de Shprooch laade wollte)",
- "syntaxhighlight-err-language": "Di Schprooch kenne mer nit.",
+ "syntaxhighlight-err-loading": "(Enne Fääler es opjetrodde, wi mer di Leß met de Schprohche lahde wullte)",
+ "syntaxhighlight-err-language": "Di Schprohch känne mer nit.",
"geshi.css": "/* Dat es dat CCS för de Afschnedde med däm GeSHi syntax highlighting */"
}
diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json b/extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json
index 54cd7e3d..e07cc553 100644
--- a/extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json
+++ b/extensions/SyntaxHighlight_GeSHi/i18n/pt-br.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Helder.wiki"
+ "Helder.wiki",
+ "He7d3r"
]
},
"syntaxhighlight-desc": "Providencia realce de sintaxe <code>&lt;syntaxhighlight&gt;</code> através do [http://qbnz.com/highlighter/ GeSHi Highlighter]",
diff --git a/extensions/SyntaxHighlight_GeSHi/i18n/qqq.json b/extensions/SyntaxHighlight_GeSHi/i18n/qqq.json
index 80fc4117..ccec7924 100644
--- a/extensions/SyntaxHighlight_GeSHi/i18n/qqq.json
+++ b/extensions/SyntaxHighlight_GeSHi/i18n/qqq.json
@@ -3,8 +3,11 @@
"authors": [
"Meno25",
"Shirayuki",
- "The Evil IP address"
+ "The Evil IP address",
+ "Legoktm",
+ "Umherirrender"
]
},
- "syntaxhighlight-desc": "{{desc|name=Syntax Highlight GeSHi|url=http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi}}"
+ "syntaxhighlight-desc": "{{desc|name=Syntax Highlight GeSHi|url=https://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi}}",
+ "geshi.css": "CSS comment"
}
diff --git a/extensions/SyntaxHighlight_GeSHi/maintenance/updateLanguageList.php b/extensions/SyntaxHighlight_GeSHi/maintenance/updateLanguageList.php
new file mode 100644
index 00000000..6e9feb33
--- /dev/null
+++ b/extensions/SyntaxHighlight_GeSHi/maintenance/updateLanguageList.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Script to update list of supported languages.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Ori Livneh <ori@wikimedia.org>
+ * @ingroup Maintenance
+ */
+
+$IP = getenv( 'MW_INSTALL_PATH' ) ?: __DIR__ . '/../../..';
+
+require_once "$IP/maintenance/Maintenance.php";
+require_once __DIR__ . "/../geshi/geshi.php";
+
+class UpdateLanguageList extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addDescription( 'Update list of languages supported by SyntaxHighlight_GeSHi' );
+ }
+
+ public function execute() {
+ global $IP;
+
+ $geshi = new GeSHi;
+ $header = '// Generated by ' . basename( __FILE__ ) . ' on ' . date( DATE_RFC2822 ) . "\n";
+ $langs = array_values( array_filter( $geshi->get_supported_languages( false ), 'ctype_alnum' ) );
+ sort( $langs );
+ $replace = array( '[' => "array(\n\t", ']' => "\n);\n", '",' => "\",\n\t" );
+ $code = "<?php\n" .
+ $header .
+ "global \$wgGeSHiSupportedLanguages;\n" .
+ '$wgGeSHiSupportedLanguages = ' . strtr( json_encode( $langs ), $replace );
+ file_put_contents( __DIR__ . '/../SyntaxHighlight_GeSHi.langs.php', $code );
+ $this->output( "Updated language list written to SyntaxHighlight_GeSHi.langs.php\n" );
+ }
+}
+
+$maintClass = "UpdateLanguageList";
+require_once( RUN_MAINTENANCE_IF_MAIN );
diff --git a/extensions/TitleBlacklist/TitleBlacklist.hooks.php b/extensions/TitleBlacklist/TitleBlacklist.hooks.php
index 78379a3d..34be8eb7 100644
--- a/extensions/TitleBlacklist/TitleBlacklist.hooks.php
+++ b/extensions/TitleBlacklist/TitleBlacklist.hooks.php
@@ -32,7 +32,12 @@ class TitleBlacklistHooks {
if ( $action == 'create' || $action == 'edit' || $action == 'upload' ) {
$blacklisted = TitleBlacklist::singleton()->userCannot( $title, $user, $action );
if ( $blacklisted instanceof TitleBlacklistEntry ) {
- $result = array( $blacklisted->getErrorMessage( 'edit' ),
+ $errmsg = $blacklisted->getErrorMessage( 'edit' );
+ ApiBase::$messageMap[$errmsg] = array(
+ 'code' => $errmsg,
+ 'info' => 'TitleBlacklist prevents this title from being created'
+ );
+ $result = array( $errmsg,
htmlspecialchars( $blacklisted->getRaw() ),
$title->getFullText() );
return false;
@@ -68,31 +73,64 @@ class TitleBlacklistHooks {
}
/**
- * AbortMove hook
+ * MovePageCheckPermissions hook (1.25+)
*
- * @param $old Title
- * @param $nt Title
- * @param $user User
- * @param $err
+ * @param Title $oldTitle
+ * @param Title $newTitle
+ * @param User $user
+ * @param $reason
+ * @param Status $status
* @return bool
*/
- public static function abortMove( $old, $nt, $user, &$err ) {
+ public static function onMovePageCheckPermissions( Title $oldTitle, Title $newTitle, User $user, $reason, Status $status ) {
$titleBlacklist = TitleBlacklist::singleton();
- $blacklisted = $titleBlacklist->userCannot( $nt, $user, 'move' );
+ $blacklisted = $titleBlacklist->userCannot( $newTitle, $user, 'move' );
if ( !$blacklisted ) {
- $blacklisted = $titleBlacklist->userCannot( $old, $user, 'edit' );
+ $blacklisted = $titleBlacklist->userCannot( $oldTitle, $user, 'edit' );
}
if ( $blacklisted instanceof TitleBlacklistEntry ) {
- $err = wfMessage( $blacklisted->getErrorMessage( 'move' ),
+ $errmsg = $blacklisted->getErrorMessage( 'move' );
+ ApiBase::$messageMap[$errmsg] = array(
+ 'code' => $errmsg,
+ 'info' => 'TitleBlacklist prevents this new title from being created or old title from being edited'
+ );
+ $status->fatal( $errmsg,
$blacklisted->getRaw(),
- $old->getFullText(),
- $nt->getFullText() )->parse();
+ $oldTitle->getFullText(),
+ $newTitle->getFullText() );
return false;
}
+
return true;
}
/**
+ * AbortMove hook (<1.24)
+ *
+ * @todo: Remove once 1.24 support is dropped
+ *
+ * @param $old Title
+ * @param $nt Title
+ * @param $user User
+ * @param $err
+ * @return bool
+ */
+ public static function abortMove( $old, $nt, $user, &$err, $reason ) {
+ if ( method_exists( 'MovePage', 'checkPermissions' ) ) {
+ // Don't use this hook, use MovePageCheckPermissions instead
+ return true;
+ }
+
+ $status = new Status();
+ self::onMovePageCheckPermissions( $old, $nt, $user, $reason, $status );
+ if ( !$status->isOK() ) {
+ $err = $status->getHTML();
+ }
+
+ return $status->isOK();
+ }
+
+ /**
* Check whether a user name is acceptable,
* and set a message if unacceptable.
*
@@ -107,6 +145,10 @@ class TitleBlacklistHooks {
'new-account', $override );
if ( $blacklisted instanceof TitleBlacklistEntry ) {
$message = $blacklisted->getErrorMessage( 'new-account' );
+ ApiBase::$messageMap[$message] = array(
+ 'code' => $message,
+ 'info' => 'TitleBlacklist prevents this username from being created'
+ );
$err = wfMessage( $message, $blacklisted->getRaw(), $userName )->parse();
if ( $log ) {
self::logFilterHitUsername( $wgUser, $title, $blacklisted->getRaw() );
@@ -155,23 +197,6 @@ class TitleBlacklistHooks {
Html::element( 'br', array( 'clear' => 'all' ) ) . "\n";
// $error will be displayed by the edit class
- return true;
- } elseif ( !$section ) {
- # Block redirects to nonexistent blacklisted titles
- $retitle = Title::newFromRedirect( $text );
- if ( $retitle !== null && !$retitle->exists() ) {
- $blacklisted = TitleBlacklist::singleton()->userCannot( $retitle, $wgUser, 'create' );
- if ( $blacklisted instanceof TitleBlacklistEntry ) {
- $error = Html::openElement( 'div', array( 'class' => 'errorbox' ) ) .
- wfMessage( 'titleblacklist-forbidden-edit',
- $blacklisted->getRaw(),
- $retitle->getFullText() )->escaped() .
- Html::closeElement( 'div' ) . "\n" .
- Html::element( 'br', array( 'clear' => 'all' ) ) . "\n";
- }
- }
-
- return true;
}
return true;
}
@@ -224,4 +249,29 @@ class TitleBlacklistHooks {
$logEntry->publish( $logid );
}
}
+
+ /**
+ * Add phpunit tests
+ *
+ * @param array &$files List of test cases and directories to search
+ * @return bool
+ */
+ public static function unitTestsList( &$files ) {
+ $files = array_merge( $files, glob( __DIR__ . '/tests/*Test.php' ) );
+ return true;
+ }
+
+ /**
+ * External Lua library for Scribunto
+ *
+ * @param string $engine
+ * @param array $extraLibraries
+ * @return bool
+ */
+ public static function scribuntoExternalLibraries( $engine, array &$extraLibraries ) {
+ if( $engine == 'lua' ) {
+ $extraLibraries['mw.ext.TitleBlacklist'] = 'Scribunto_LuaTitleBlacklistLibrary';
+ }
+ return true;
+ }
}
diff --git a/extensions/TitleBlacklist/TitleBlacklist.i18n.php b/extensions/TitleBlacklist/TitleBlacklist.i18n.php
deleted file mode 100644
index 2b751362..00000000
--- a/extensions/TitleBlacklist/TitleBlacklist.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShimc2acbcab55cdf68b' ) ) {
- function wfJsonI18nShimc2acbcab55cdf68b( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShimc2acbcab55cdf68b';
-}
diff --git a/extensions/TitleBlacklist/TitleBlacklist.library.php b/extensions/TitleBlacklist/TitleBlacklist.library.php
index 0c2a599c..fd767d1e 100644
--- a/extensions/TitleBlacklist/TitleBlacklist.library.php
+++ b/extensions/TitleBlacklist/TitleBlacklist.library.php
@@ -6,7 +6,7 @@ class Scribunto_LuaTitleBlacklistLibrary extends Scribunto_LuaLibraryBase {
'test' => array( $this, 'test' ),
);
- $this->getEngine()->registerInterface( __DIR__ . '/mw.ext.TitleBlacklist.lua', $lib, array() );
+ return $this->getEngine()->registerInterface( __DIR__ . '/mw.ext.TitleBlacklist.lua', $lib, array() );
}
public function test( $action = null, $title = null ) {
diff --git a/extensions/TitleBlacklist/TitleBlacklist.list.php b/extensions/TitleBlacklist/TitleBlacklist.list.php
index 3947e8ae..a9578a59 100644
--- a/extensions/TitleBlacklist/TitleBlacklist.list.php
+++ b/extensions/TitleBlacklist/TitleBlacklist.list.php
@@ -38,23 +38,22 @@ class TitleBlacklist {
*/
public function load() {
global $wgTitleBlacklistSources, $wgMemc, $wgTitleBlacklistCaching;
- wfProfileIn( __METHOD__ );
// Try to find something in the cache
$cachedBlacklist = $wgMemc->get( wfMemcKey( "title_blacklist_entries" ) );
if ( is_array( $cachedBlacklist ) && count( $cachedBlacklist ) > 0 && ( $cachedBlacklist[0]->getFormatVersion() == self::VERSION ) ) {
$this->mBlacklist = $cachedBlacklist;
- wfProfileOut( __METHOD__ );
return;
}
$sources = $wgTitleBlacklistSources;
- $sources['local'] = array( 'type' => TBLSRC_MSG );
+ $sources['local'] = array( 'type' => 'message' );
$this->mBlacklist = array();
foreach( $sources as $sourceName => $source ) {
$this->mBlacklist = array_merge( $this->mBlacklist, $this->parseBlacklist( $this->getBlacklistText( $source ), $sourceName ) );
}
$wgMemc->set( wfMemcKey( "title_blacklist_entries" ), $this->mBlacklist, $wgTitleBlacklistCaching['expiry'] );
- wfProfileOut( __METHOD__ );
+ wfDebugLog( 'TitleBlacklist-cache', 'Updated ' . wfMemcKey( "title_blacklist_entries" )
+ . ' with ' . count( $this->mBlacklist ) . ' entries.' );
}
/**
@@ -62,17 +61,14 @@ class TitleBlacklist {
*/
public function loadWhitelist() {
global $wgMemc, $wgTitleBlacklistCaching;
- wfProfileIn( __METHOD__ );
$cachedWhitelist = $wgMemc->get( wfMemcKey( "title_whitelist_entries" ) );
if ( is_array( $cachedWhitelist ) && count( $cachedWhitelist ) > 0 && ( $cachedWhitelist[0]->getFormatVersion() != self::VERSION ) ) {
$this->mWhitelist = $cachedWhitelist;
- wfProfileOut( __METHOD__ );
return;
}
$this->mWhitelist = $this->parseBlacklist( wfMessage( 'titlewhitelist' )
->inContentLanguage()->text(), 'whitelist' );
$wgMemc->set( wfMemcKey( "title_whitelist_entries" ), $this->mWhitelist, $wgTitleBlacklistCaching['expiry'] );
- wfProfileOut( __METHOD__ );
}
/**
@@ -86,9 +82,9 @@ class TitleBlacklist {
return ''; // Return empty string in error case
}
- if ( $source['type'] == TBLSRC_MSG ) {
+ if ( $source['type'] == 'message' ) {
return wfMessage( 'titleblacklist' )->inContentLanguage()->text();
- } elseif ( $source['type'] == TBLSRC_LOCALPAGE && count( $source ) >= 2 ) {
+ } elseif ( $source['type'] == 'localpage' && count( $source ) >= 2 ) {
$title = Title::newFromText( $source['src'] );
if ( is_null( $title ) ) {
return '';
@@ -107,9 +103,9 @@ class TitleBlacklist {
return $article->getContent();
}
}
- } elseif ( $source['type'] == TBLSRC_URL && count( $source ) >= 2 ) {
+ } elseif ( $source['type'] == 'url' && count( $source ) >= 2 ) {
return self::getHttp( $source['src'] );
- } elseif ( $source['type'] == TBLSRC_FILE && count( $source ) >= 2 ) {
+ } elseif ( $source['type'] == 'file' && count( $source ) >= 2 ) {
if ( file_exists( $source['src'] ) ) {
return file_get_contents( $source['src'] );
} else {
@@ -127,7 +123,6 @@ class TitleBlacklist {
* @return array of TitleBlacklistEntry entries
*/
public static function parseBlacklist( $list, $sourceName ) {
- wfProfileIn( __METHOD__ );
$lines = preg_split( "/\r?\n/", $list );
$result = array();
foreach ( $lines as $line ) {
@@ -137,7 +132,6 @@ class TitleBlacklist {
}
}
- wfProfileOut( __METHOD__ );
return $result;
}
@@ -349,7 +343,7 @@ class TitleBlacklistEntry {
}
if( !is_array( $wgTitleBlacklistUsernameSources ) ) {
- throw new MWException(
+ throw new Exception(
'$wgTitleBlacklistUsernameSources must be "*", false or an array' );
}
@@ -528,6 +522,9 @@ class TitleBlacklistEntry {
*/
public function getErrorMessage( $operation ) {
$message = $this->getCustomMessage();
+ // For grep:
+ // titleblacklist-forbidden-edit, titleblacklist-forbidden-move,
+ // titleblacklist-forbidden-upload, titleblacklist-forbidden-new-account
return $message ? $message : "titleblacklist-forbidden-{$operation}";
}
}
diff --git a/extensions/TitleBlacklist/TitleBlacklist.php b/extensions/TitleBlacklist/TitleBlacklist.php
index 7b5c67d2..c66a760b 100644
--- a/extensions/TitleBlacklist/TitleBlacklist.php
+++ b/extensions/TitleBlacklist/TitleBlacklist.php
@@ -1,109 +1,23 @@
<?php
-if ( !defined( 'MEDIAWIKI' ) ) {
- exit( 1 );
-}
-
-// @{
-/**
- * @file
- * @ingroup Extensions
- */
-
-$wgExtensionCredits['antispam'][] = array(
- 'path' => __FILE__,
- 'name' => 'Title Blacklist',
- 'author' => array( 'Victor Vasiliev', 'Fran Rogers' ),
- 'version' => '1.5.0',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Title_Blacklist',
- 'descriptionmsg' => 'titleblacklist-desc',
-);
-
-$dir = __DIR__;
-$wgMessagesDirs['TitleBlacklist'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['TitleBlacklist'] = $dir . '/TitleBlacklist.i18n.php';
-$wgAutoloadClasses['TitleBlacklist'] = $dir . '/TitleBlacklist.list.php';
-$wgAutoloadClasses['TitleBlacklistHooks'] = $dir . '/TitleBlacklist.hooks.php';
-$wgAutoloadClasses['Scribunto_LuaTitleBlacklistLibrary'] = $dir . '/TitleBlacklist.library.php';
-
-/** @defgroup Title blacklist source types
- * @{
- */
-define( 'TBLSRC_MSG', 0 ); ///< For internal usage
-define( 'TBLSRC_LOCALPAGE', 1 ); ///< Local wiki page
-define( 'TBLSRC_URL', 2 ); ///< Load blacklist from URL
-define( 'TBLSRC_FILE', 3 ); ///< Load from file
-/** @} */
-
-/**
- * Array of title blacklist sources.
- *
- * Should be in array( name => source description ) format.
- * See extension documentation for details of source description.
- */
-$wgTitleBlacklistSources = array();
-
-/**
- * Sets the sources which may work as a username filter.
- *
- * '*' is for all; false disables all.
- *
- * If you want to limit it to particular sources, use
- * array( source name 1, source name 2 ).
- * This may be useful when you have shared account creation system
- * in order to avoid blacklist fragmentation.
- */
-$wgTitleBlacklistUsernameSources = '*';
-
-/**
- * Log blacklist hits to Special:Log
- */
-$wgTitleBlacklistLogHits = false;
-$wgTitleBlacklistCaching = array(
- 'warningchance' => 100,
- 'expiry' => 900,
- 'warningexpiry' => 600,
-);
-
-$dir = dirname( __FILE__ );
-
-// Register the API method
-$wgAutoloadClasses['ApiQueryTitleBlacklist'] = "$dir/api/ApiQueryTitleBlacklist.php";
-$wgAPIModules['titleblacklist'] = 'ApiQueryTitleBlacklist';
-
-$wgAvailableRights[] = 'tboverride'; // Implies tboverride-account
-$wgAvailableRights[] = 'tboverride-account'; // For account creation
-$wgGroupPermissions['sysop']['tboverride'] = true;
-
-$wgHooks['getUserPermissionsErrorsExpensive'][] = 'TitleBlacklistHooks::userCan';
-$wgHooks['TitleGetEditNotices'][] = 'TitleBlacklistHooks::displayBlacklistOverrideNotice';
-$wgHooks['AbortMove'][] = 'TitleBlacklistHooks::abortMove';
-$wgHooks['AbortNewAccount'][] = 'TitleBlacklistHooks::abortNewAccount';
-$wgHooks['AbortAutoAccount'][] = 'TitleBlacklistHooks::abortNewAccount';
-$wgHooks['EditFilter'][] = 'TitleBlacklistHooks::validateBlacklist';
-$wgHooks['ArticleSaveComplete'][] = 'TitleBlacklistHooks::clearBlacklist';
-$wgHooks['UserCreateForm'][] = 'TitleBlacklistHooks::addOverrideCheckbox';
-$wgHooks['UnitTestsList'][] = function( &$files ) {
- $files += glob( __DIR__ . '/tests/*Test.php' );
- return true;
-};
-$wgHooks['ScribuntoExternalLibraries'][] = function( $engine, array &$extraLibraries ) {
- if( $engine == 'lua' ) {
- $extraLibraries['mw.ext.TitleBlacklist'] = 'Scribunto_LuaTitleBlacklistLibrary';
- }
- return true;
-};
-
-$wgLogTypes[] = 'titleblacklist';
-$wgLogActionsHandlers['titleblacklist/*'] = 'LogFormatter';
-$wgLogRestrictions['titleblacklist'] = 'titleblacklistlog';
-$wgGroupPermissions['sysop']['titleblacklistlog'] = true;
-$wgAvailableRights[] = 'titleblacklistlog';
-
-$wgResourceModules['mediawiki.api.titleblacklist'] = array(
- 'scripts' => 'mediawiki.api.titleblacklist.js',
- 'localBasePath' => $dir . '/modules',
- 'remoteExtPath' => 'TitleBlacklist/modules',
- 'dependencies' => array( 'mediawiki.api' ),
-);
-// @}
+if ( function_exists( 'wfLoadExtension' ) ) {
+
+ /** @defgroup Title blacklist source types
+ * @deprecated Use values directly instead.
+ */
+ define( 'TBLSRC_MSG', 'message' ); ///< For internal usage
+ define( 'TBLSRC_LOCALPAGE', 'localpage' ); ///< Local wiki page
+ define( 'TBLSRC_URL', 'url' ); ///< Load blacklist from URL
+ define( 'TBLSRC_FILE', 'file' ); ///< Load from file
+
+ wfLoadExtension( 'TitleBlacklist' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['TitleBlacklist'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for TitleBlacklist extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the TitleBlacklist extension requires MediaWiki 1.25+' );
+}
diff --git a/extensions/TitleBlacklist/api/ApiQueryTitleBlacklist.php b/extensions/TitleBlacklist/api/ApiQueryTitleBlacklist.php
index 1da70d2a..6fa9db59 100644
--- a/extensions/TitleBlacklist/api/ApiQueryTitleBlacklist.php
+++ b/extensions/TitleBlacklist/api/ApiQueryTitleBlacklist.php
@@ -90,6 +90,9 @@ class ApiQueryTitleBlacklist extends ApiBase {
);
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getParamDescription() {
return array(
'title' => 'The string to validate against the blacklist',
@@ -98,10 +101,16 @@ class ApiQueryTitleBlacklist extends ApiBase {
);
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getDescription() {
return 'Validate an article title, filename, or username against the TitleBlacklist.';
}
+ /**
+ * @deprecated since MediaWiki core 1.25
+ */
public function getExamples() {
return array(
'api.php?action=titleblacklist&tbtitle=Foo',
@@ -109,7 +118,15 @@ class ApiQueryTitleBlacklist extends ApiBase {
);
}
- public function getVersion() {
- return __CLASS__ . ': $Id$';
+ /**
+ * @see ApiBase::getExamplesMessages()
+ */
+ protected function getExamplesMessages() {
+ return array(
+ 'action=titleblacklist&tbtitle=Foo'
+ => 'apihelp-titleblacklist-example-1',
+ 'action=titleblacklist&tbtitle=Bar&tbaction=edit'
+ => 'apihelp-titleblacklist-example-2',
+ );
}
}
diff --git a/extensions/TitleBlacklist/extension.json b/extensions/TitleBlacklist/extension.json
new file mode 100644
index 00000000..2e64802d
--- /dev/null
+++ b/extensions/TitleBlacklist/extension.json
@@ -0,0 +1,104 @@
+{
+ "name": "Title Blacklist",
+ "version": "1.5.0",
+ "author": [
+ "Victor Vasiliev",
+ "Fran Rogers"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:Title_Blacklist",
+ "descriptionmsg": "titleblacklist-desc",
+ "license-name": "GPL-2.0+",
+ "type": "antispam",
+ "GroupPermissions": {
+ "sysop": {
+ "tboverride": true,
+ "titleblacklistlog": true
+ }
+ },
+ "AvailableRights": [
+ "tboverride",
+ "tboverride-account",
+ "titleblacklistlog"
+ ],
+ "LogTypes": [
+ "titleblacklist"
+ ],
+ "LogRestrictions": {
+ "titleblacklist": "titleblacklistlog"
+ },
+ "LogActionsHandlers": {
+ "titleblacklist/*": "LogFormatter"
+ },
+ "APIModules": {
+ "titleblacklist": "ApiQueryTitleBlacklist"
+ },
+ "MessagesDirs": {
+ "TitleBlacklist": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "TitleBlacklist": "TitleBlacklist.list.php",
+ "TitleBlacklistEntry": "TitleBlacklist.list.php",
+ "TitleBlacklistHooks": "TitleBlacklist.hooks.php",
+ "Scribunto_LuaTitleBlacklistLibrary": "TitleBlacklist.library.php",
+ "ApiQueryTitleBlacklist": "api/ApiQueryTitleBlacklist.php"
+ },
+ "ResourceModules": {
+ "mediawiki.api.titleblacklist": {
+ "scripts": "mediawiki.api.titleblacklist.js",
+ "dependencies": [
+ "mediawiki.api"
+ ]
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "modules",
+ "remoteExtPath": "TitleBlacklist/modules"
+ },
+ "Hooks": {
+ "getUserPermissionsErrorsExpensive": [
+ "TitleBlacklistHooks::userCan"
+ ],
+ "TitleGetEditNotices": [
+ "TitleBlacklistHooks::displayBlacklistOverrideNotice"
+ ],
+ "AbortMove": [
+ "TitleBlacklistHooks::abortMove"
+ ],
+ "MovePageCheckPermissions": [
+ "TitleBlacklistHooks::onMovePageCheckPermissions"
+ ],
+ "AbortNewAccount": [
+ "TitleBlacklistHooks::abortNewAccount"
+ ],
+ "AbortAutoAccount": [
+ "TitleBlacklistHooks::abortNewAccount"
+ ],
+ "EditFilter": [
+ "TitleBlacklistHooks::validateBlacklist"
+ ],
+ "ArticleSaveComplete": [
+ "TitleBlacklistHooks::clearBlacklist"
+ ],
+ "UserCreateForm": [
+ "TitleBlacklistHooks::addOverrideCheckbox"
+ ],
+ "UnitTestsList": [
+ "TitleBlacklistHooks::unitTestsList"
+ ],
+ "ScribuntoExternalLibraries": [
+ "TitleBlacklistHooks::scribuntoExternalLibraries"
+ ]
+ },
+ "config": {
+ "TitleBlacklistSources": [],
+ "TitleBlacklistUsernameSources": "*",
+ "TitleBlacklistLogHits": false,
+ "TitleBlacklistCaching": {
+ "warningchance": 100,
+ "expiry": 900,
+ "warningexpiry": 600
+ }
+ }
+}
diff --git a/extensions/TitleBlacklist/i18n/ar.json b/extensions/TitleBlacklist/i18n/ar.json
index 9e687de3..e947d925 100644
--- a/extensions/TitleBlacklist/i18n/ar.json
+++ b/extensions/TitleBlacklist/i18n/ar.json
@@ -3,9 +3,13 @@
"authors": [
"Aiman titi",
"Meno25",
- "OsamaK"
+ "OsamaK",
+ "Abanima"
]
},
+ "action-titleblacklistlog": "استعراض سجل القائمة السوداء للعناوين",
+ "log-name-titleblacklist": "القائمة السوداء للعناوين",
+ "logentry-titleblacklist-hit-username": "{{GENDER:$2|سبّب|سبّبت}} $1 تفعيل القائمة السوداء للعناوين عندما {{GENDER:$2|حاول|حاولت}} إنشاء الحساب $3 المطابق لـ$4.",
"titleblacklist-desc": "يسمح للإداريين بمنع إنشاء الصفحات وحسابات المستخدمين حسب [[MediaWiki:Titleblacklist|قائمة سوداء]] و [[MediaWiki:Titlewhitelist|قائمة بيضاء]]",
"titleblacklist": "# هذه قائمة سوداء للعناوين. العناوين والمستخدمون الذين يطابقون تعبيرا منتظما هنا لا يمكن إنشاؤهم.\n# استخدم \"#\" للتعليقات.\n# هذه لا تتأثر بحالة الحروف افتراضيا",
"titlewhitelist": "# هذه قائمة بيضاء للعناوين. استخدم \"#\" للتعليقات\n# هذه لا تتأثر بحالة الحروف افتراضيا",
@@ -15,6 +19,9 @@
"titleblacklist-forbidden-new-account": "إنشاء اسم المستخدم \"$2\" ممنوع.\nهو يطابق مدخلة القائمة السوداء التالية: <code>$1</code>",
"titleblacklist-invalid": "{{PLURAL:$1||السطر التالي|السطران التاليان|السطور التالية}} في قائمة العناوين السوداء {{PLURAL:$1||غير صحيح|غير صحيحان|غير صحيحة}}؛ من فضلك {{PLURAL:$1||صححه|صححهما|صححهم}} قبل الحفظ:",
"titleblacklist-override": "تجاهل القائمة السوداء",
+ "titleblacklist-autoconfirmed-warning": "<strong>ملاحظة:</strong> لا يمكن تحرير هذه الصفحة إلا للمستخدمين <code>المؤكدين تلقائياً</code> لأنها تطابق مدخلة القائمة السوداء التالية:<br /><code>$1</code>",
+ "titleblacklist-warning": "<strong>ملاحظة:</strong> لا يمكن تحرير هذه الصفحة إلا للإداريين والمستخدمين الآخرين الذين لديهم صلاحية <code>tboverride</code> لأنها تطابق مدخلة القائمة السوداء التالية:<br /><code>$1</code>",
"right-tboverride": "تجاوز قائمتي العناوين أو أسماء المستخدمين السوداوين",
- "right-tboverride-account": "تجاوز قائمة اسم المستخدم السوداء."
+ "right-tboverride-account": "تجاوز قائمة اسم المستخدم السوداء.",
+ "right-titleblacklistlog": "استعراض سجل القائمة السوداء للعناوين"
}
diff --git a/extensions/TitleBlacklist/i18n/az.json b/extensions/TitleBlacklist/i18n/az.json
new file mode 100644
index 00000000..1eb4296a
--- /dev/null
+++ b/extensions/TitleBlacklist/i18n/az.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wertuose"
+ ]
+ },
+ "titleblacklist-override": "Qara siyahını nəzərə alma"
+}
diff --git a/extensions/TitleBlacklist/i18n/bg.json b/extensions/TitleBlacklist/i18n/bg.json
index daadcfb4..a42ede48 100644
--- a/extensions/TitleBlacklist/i18n/bg.json
+++ b/extensions/TitleBlacklist/i18n/bg.json
@@ -6,6 +6,7 @@
"Spiritia"
]
},
+ "log-name-titleblacklist": "Дневник на черния списък на заглавията",
"titleblacklist-desc": "Позволява на администраторите да забраняват създаването на страници и потребителски сметки чрез [[MediaWiki:Titleblacklist|черен]] и [[MediaWiki:Titlewhitelist|бял списък]].",
"titleblacklist": "# Страницата съдържа черен списък за заглавия на страници\n# Страници и потребители, чиито имена съответстват с регулярните изрази в списъка, не могат да бъдат създавани.\n# За коментари се използва символът „#“.",
"titlewhitelist": "# Това е бял списък на заглавията. Използвайте \"#\" за въвеждане на коментари.\n# По подразбиране списъкът е нечувствителен на малки и главни букви",
diff --git a/extensions/TitleBlacklist/i18n/cs.json b/extensions/TitleBlacklist/i18n/cs.json
index e88b4666..5210543c 100644
--- a/extensions/TitleBlacklist/i18n/cs.json
+++ b/extensions/TitleBlacklist/i18n/cs.json
@@ -24,5 +24,11 @@
"titleblacklist-warning": "<strong>Upozornění: Tuto stránku mohou editovat jen správci a další uživatelé s oprávněním <code>tboverride</code>, protože odpovídá následujícímu záznamu černé listiny názvů:</strong><br /><code>$1</code>",
"right-tboverride": "Překonání zakázaných názvů stránek nebo uživatelských jmen",
"right-tboverride-account": "Překonání černé listiny uživatelských jmen",
- "right-titleblacklistlog": "Prohlížení knihy černé listiny názvů"
+ "right-titleblacklistlog": "Prohlížení knihy černé listiny názvů",
+ "apihelp-titleblacklist-description": "Zkontrolovat název článku, souboru nebo uživatelské jméno vůči černé listině TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "Řetězec, který se má vůči černé listině zkontrolovat.",
+ "apihelp-titleblacklist-param-action": "Akce, která se má zkontrolovat.",
+ "apihelp-titleblacklist-param-nooverride": "Nepokoušet se o překonání černé listiny názvů.",
+ "apihelp-titleblacklist-example-1": "Zkontrolovat, jestli je [[Foo]] na černé listině.",
+ "apihelp-titleblacklist-example-2": "Zkontrolovat, zda je černou listinou zakázána editace [[Bar]]."
}
diff --git a/extensions/TitleBlacklist/i18n/en.json b/extensions/TitleBlacklist/i18n/en.json
index 5b6a86df..a7efd2a6 100644
--- a/extensions/TitleBlacklist/i18n/en.json
+++ b/extensions/TitleBlacklist/i18n/en.json
@@ -1,23 +1,29 @@
{
- "@metadata": {
- "authors": []
- },
- "action-titleblacklistlog": "view the title blacklist log",
- "log-name-titleblacklist": "Title blacklist log",
- "log-description-titleblacklist": "These events track title blacklist hits.",
- "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|caused}} a title blacklist hit when trying to create account $3 matching $4.",
- "titleblacklist-desc": "Allows administrators to forbid creation of pages and user accounts per a [[MediaWiki:Titleblacklist|blacklist]] and [[MediaWiki:Titlewhitelist|whitelist]]",
- "titleblacklist": "# This is a title blacklist. Titles and users that match a regular expression here cannot be created.\n# Use \"#\" for comments.\n# This is case insensitive by default",
- "titlewhitelist": "# This is a title whitelist. Use \"#\" for comments.\n# This is case insensitive by default",
- "titleblacklist-forbidden-edit": "The title \"$2\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
- "titleblacklist-forbidden-move": "\"$2\" cannot be moved to \"$3\", because the title \"$3\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
- "titleblacklist-forbidden-upload": "The file name \"$2\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
- "titleblacklist-forbidden-new-account": "The user name \"$2\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
- "titleblacklist-invalid": "The following {{PLURAL:$1|line|lines}} in the title blacklist {{PLURAL:$1|is|are}} invalid;\nplease correct {{PLURAL:$1|it|them}} before saving:",
- "titleblacklist-override": "Ignore the blacklist",
- "titleblacklist-autoconfirmed-warning": "<strong>Note:</strong> This page can only be edited by users with the <code>autoconfirmed</code> right because it matches the following title blacklist entry:<br /><code>$1</code>",
- "titleblacklist-warning": "<strong>Warning: This page can only be edited by administrators and other users with the <code>tboverride</code> right because it matches the following title blacklist entry:</strong><br /><code>$1</code>",
- "right-tboverride": "Override the title or username blacklist",
- "right-tboverride-account": "Override the username blacklist",
- "right-titleblacklistlog": "View title blacklist log"
+ "@metadata": {
+ "authors": []
+ },
+ "action-titleblacklistlog": "view the title blacklist log",
+ "log-name-titleblacklist": "Title blacklist log",
+ "log-description-titleblacklist": "These events track title blacklist hits.",
+ "logentry-titleblacklist-hit-username": "$1 {{GENDER:$2|caused}} a title blacklist hit when trying to create account $3 matching $4.",
+ "titleblacklist-desc": "Allows administrators to forbid creation of pages and user accounts per a [[MediaWiki:Titleblacklist|blacklist]] and [[MediaWiki:Titlewhitelist|whitelist]]",
+ "titleblacklist": "# This is a title blacklist. Titles and users that match a regular expression here cannot be created.\n# Use \"#\" for comments.\n# This is case insensitive by default",
+ "titlewhitelist": "# This is a title whitelist. Use \"#\" for comments.\n# This is case insensitive by default",
+ "titleblacklist-forbidden-edit": "The title \"$2\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
+ "titleblacklist-forbidden-move": "\"$2\" cannot be moved to \"$3\", because the title \"$3\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "The filename \"$2\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
+ "titleblacklist-forbidden-new-account": "The user name \"$2\" has been banned from creation.\nIt matches the following blacklist entry: <code>$1</code>",
+ "titleblacklist-invalid": "The following {{PLURAL:$1|line|lines}} in the title blacklist {{PLURAL:$1|is|are}} invalid;\nplease correct {{PLURAL:$1|it|them}} before saving:",
+ "titleblacklist-override": "Ignore the blacklist",
+ "titleblacklist-autoconfirmed-warning": "<strong>Note:</strong> This page can only be edited by users with the <code>autoconfirmed</code> right because it matches the following title blacklist entry:<br /><code>$1</code>",
+ "titleblacklist-warning": "<strong>Warning: This page can only be edited by administrators and other users with the <code>tboverride</code> right because it matches the following title blacklist entry:</strong><br /><code>$1</code>",
+ "right-tboverride": "Override the title or username blacklist",
+ "right-tboverride-account": "Override the username blacklist",
+ "right-titleblacklistlog": "View title blacklist log",
+ "apihelp-titleblacklist-description": "Validate an article title, filename, or username against the TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "The string to validate against the blacklist.",
+ "apihelp-titleblacklist-param-action": "The action to be checked.",
+ "apihelp-titleblacklist-param-nooverride": "Don't try to override the titleblacklist.",
+ "apihelp-titleblacklist-example-1": "Check whether [[Foo]] is blacklisted",
+ "apihelp-titleblacklist-example-2": "Check whether [[Bar]] is blacklisted for editing"
}
diff --git a/extensions/TitleBlacklist/i18n/es.json b/extensions/TitleBlacklist/i18n/es.json
index 70814db3..c5dea1b8 100644
--- a/extensions/TitleBlacklist/i18n/es.json
+++ b/extensions/TitleBlacklist/i18n/es.json
@@ -5,9 +5,12 @@
"Crazymadlover",
"Locos epraix",
"Remember the dot",
- "Sanbec"
+ "Sanbec",
+ "MarcoAurelio"
]
},
+ "action-titleblacklistlog": "ver el registro de la lista negra de títulos",
+ "log-name-titleblacklist": "Registro de la lista negra de títulos",
"titleblacklist-desc": "Permite que los administradores prohíban la creación de páginas y cuentas de usuario mediante una [[MediaWiki:Titleblacklist|lista negra]] y una [[MediaWiki:Titlewhitelist|lista blanca]]",
"titleblacklist": "# Esta es una lista negra de títulos. No se pueden crear títulos o usuarios que coincidan con una de estas expresiones regulares.\n# Use «#» para comentarios.\n# Esta es insensible a las mayúsculas por defecto",
"titlewhitelist": "# Esta es una lista blanca de títulos. Use «#» para comentarios.\n# Esta es insensible a las mayúsculas por defecto",
@@ -18,5 +21,6 @@
"titleblacklist-invalid": "{{PLURAL:$1|La siguiente línea|Las siguientes líneas}} de la lista negra no {{PLURAL:$1|es válida|son válidas}};\npor favor corríge{{PLURAL:$1|la|las}} antes de grabar:",
"titleblacklist-override": "Ignorar la lista negra",
"right-tboverride": "Ignorar la lista negra de títulos o de nombres de usuario",
- "right-tboverride-account": "Ignorar la lista negra de los nombres de usuario"
+ "right-tboverride-account": "Ignorar la lista negra de los nombres de usuario",
+ "right-titleblacklistlog": "Ver el registro de la lista negra de títulos"
}
diff --git a/extensions/TitleBlacklist/i18n/fi.json b/extensions/TitleBlacklist/i18n/fi.json
index 12ad9965..9b024924 100644
--- a/extensions/TitleBlacklist/i18n/fi.json
+++ b/extensions/TitleBlacklist/i18n/fi.json
@@ -25,5 +25,6 @@
"titleblacklist-override": "Ohita mustan listan merkinnät",
"right-tboverride": "Ohittaa sivunimien tai käyttäjänimien musta lista",
"right-tboverride-account": "Ohittaa käyttäjänimien musta lista",
- "right-titleblacklistlog": "Tarkastella nimien mustan listan lokia"
+ "right-titleblacklistlog": "Tarkastella nimien mustan listan lokia",
+ "apihelp-titleblacklist-example-2": "Tarkista, onko [[Bar]] on mustalla listalla muokkausta varten"
}
diff --git a/extensions/TitleBlacklist/i18n/he.json b/extensions/TitleBlacklist/i18n/he.json
index 35a41a6b..c64c9dbd 100644
--- a/extensions/TitleBlacklist/i18n/he.json
+++ b/extensions/TitleBlacklist/i18n/he.json
@@ -4,7 +4,9 @@
"Amire80",
"Guycn2",
"Rotem Liss",
- "Rotemliss"
+ "Rotemliss",
+ "Yona b",
+ "Danny-w"
]
},
"action-titleblacklistlog": "להציג את יומן הרשימה השחורה של הכותרות",
@@ -22,7 +24,13 @@
"titleblacklist-override": "להתעלם מהרשימה השחורה",
"titleblacklist-autoconfirmed-warning": "<strong>לתשומת לבך:</strong> רק משתמשים בעלי הרשאת <code>autoconfirmed</code> (משתמשים ותיקים) יכולים לערוך את הדף הזה כי הוא מתאים לשורה הבאה ברשימה השחורה:<br /><code>$1</code>",
"titleblacklist-warning": "<strong>לתשומת לבך:</strong> רק מפעילים ומשתמשים אחרים בעלי הרשאת <code>tboverride</code> יכולים לערוך את הדף הזה כי הוא מתאים לשורה הבאה ברשימה השחורה:<br /><code>$1</code>",
- "right-tboverride": "עקיפת רשימת שמות המשתמשים האסורים",
+ "right-tboverride": "עקיפת כותרת הרשימה השחורה של שמות המשתמשים",
"right-tboverride-account": "עקיפת הרשימה השחורה של שמות המשתמשים",
- "right-titleblacklistlog": "הצגת יומן הרשימה השחורה של הכותרות"
+ "right-titleblacklistlog": "הצגת יומן הרשימה השחורה של הכותרות",
+ "apihelp-titleblacklist-description": "בדיקת כותרת דף, שם קובץ או שם משתמש אל מול TitleBlacklist",
+ "apihelp-titleblacklist-param-title": "המחרוזת שצריך לבדוק אל מול הרשימה השחורה.",
+ "apihelp-titleblacklist-param-action": "הפעולה שצריך לבדוק.",
+ "apihelp-titleblacklist-param-nooverride": "לא לנסות לעקוף את הרשימה השחורה.",
+ "apihelp-titleblacklist-example-1": "לבדוק אם [[Foo]] ברשימה השחורה",
+ "apihelp-titleblacklist-example-2": "לבדוק עם [[Bar]] ברשימה השחורה לעריכה"
}
diff --git a/extensions/TitleBlacklist/i18n/hu.json b/extensions/TitleBlacklist/i18n/hu.json
index f7b5930e..92d2ae29 100644
--- a/extensions/TitleBlacklist/i18n/hu.json
+++ b/extensions/TitleBlacklist/i18n/hu.json
@@ -12,7 +12,7 @@
"action-titleblacklistlog": "címek feketelista-naplójának megtekintése",
"log-name-titleblacklist": "Címek feketelista-naplója",
"titleblacklist-desc": "Lehetővé teszi az adminisztrátorok számára, hogy letiltsák adott című lapok vagy nevű felhasználói fiókok készítését a [[MediaWiki:Titleblacklist]] és [[MediaWiki:Titlewhitelist]] alapján",
- "titleblacklist": "# Ez a címek feketelistája. Azon címek, amelyek illeszkednek az itt található reguláris kifejezések valamelyikére, nem hozhatóak létre.\n# Használd a „#” karaktert megjegyzések írásához.\n# A sorok kis- és nagybetűérzékenyek alapértelmezettként",
+ "titleblacklist": "# Ez a címek feketelistája. Azon címek, amelyek illeszkednek az itt található reguláris kifejezések valamelyikére, nem hozhatóak létre.\n# Használd a „#” karaktert megjegyzések írásához.\n# A sorok nem kis- és nagybetűérzékenyek alapértelmezettként",
"titlewhitelist": "# Ez egy engedélyező lista. A „#” karakterrel írhatsz megjegyzéseket.\n# A sorok kis- és nagybetűérzékenyek alapértelmezettként",
"titleblacklist-forbidden-edit": "„$2” címmel tilos lapot készíteni, mert illeszkedik a feketelista <code>$1</code> bejegyzésére.",
"titleblacklist-forbidden-move": "„$2” nem nevezhető át „$3” névre, mert „$3” névvel tilos lapot készíteni. Illeszkedik a következő feketelistás bejegyzéssel: <code>$1</code>",
diff --git a/extensions/TitleBlacklist/i18n/ja.json b/extensions/TitleBlacklist/i18n/ja.json
index 9fb1426c..4815c660 100644
--- a/extensions/TitleBlacklist/i18n/ja.json
+++ b/extensions/TitleBlacklist/i18n/ja.json
@@ -22,11 +22,11 @@
"titleblacklist-forbidden-edit": "「$2」という名前のページの作成は禁止されています。\nこれは以下のブラックリスト項目に一致します: <code>$1</code>",
"titleblacklist-forbidden-move": "「$3」という名前のページの作成が禁止されているため、「$2」を「$3」に移動できません。\nこれは以下のブラックリスト項目に一致します: <code>$1</code>",
"titleblacklist-forbidden-upload": "「$2」という名前でのファイルのアップロードは禁止されています。\nこれは以下のブラックリスト項目に一致します: <code>$1</code>",
- "titleblacklist-forbidden-new-account": "「$2」という名前のユーザーの作成は禁止されています。\nこれは以下のブラックリスト項目と一致します: <code>$1</code>",
- "titleblacklist-invalid": "タイトルブラックリスト中の以下の{{PLURAL:$1|行}}は正しく記述できて{{PLURAL:$1|いません}}。保存する前に{{PLURAL:$1|修正して}}ください:",
+ "titleblacklist-forbidden-new-account": "利用者名「$2」の作成は禁止されています。\nこれは以下のブラックリスト項目と一致します: <code>$1</code>",
+ "titleblacklist-invalid": "ページ名ブラックリスト内の以下の{{PLURAL:$1|行}}は無効{{PLURAL:$1|です}}。\n保存する前に{{PLURAL:$1|修正して}}ください:",
"titleblacklist-override": "ブラックリストを無視",
- "titleblacklist-autoconfirmed-warning": "<strong>注意:</strong>このページは下記のタイトルブラックリスト項目に適合しているため <code>autoconfirmed</code> 権限のある利用者だけが編集できます:<br /><code>$1</code>",
- "titleblacklist-warning": "<strong>注意:このページは下記のタイトルブラックリスト項目に適合しているため管理者と <code>tboverride</code> 権限のある利用者だけが編集できます:</strong><br />\n<code>$1</code>",
+ "titleblacklist-autoconfirmed-warning": "<strong>注意:</strong> このページは下記のページ名ブラックリスト項目に一致しているため <code>autoconfirmed</code> 権限のある利用者のみが編集できます:<br /><code>$1</code>",
+ "titleblacklist-warning": "<strong>警告: このページは下記のページ名ブラックリスト項目に一致しているため管理者と <code>tboverride</code> 権限のある利用者のみが編集できます:</strong><br /><code>$1</code>",
"right-tboverride": "ページ名/利用者名のブラックリストによる制限を受けない",
"right-tboverride-account": "利用者名ブラックリストを無視",
"right-titleblacklistlog": "ページ名ブラックリストの記録を閲覧"
diff --git a/extensions/TitleBlacklist/i18n/ko.json b/extensions/TitleBlacklist/i18n/ko.json
index 3c81c25f..874eab3b 100644
--- a/extensions/TitleBlacklist/i18n/ko.json
+++ b/extensions/TitleBlacklist/i18n/ko.json
@@ -5,7 +5,9 @@
"Kwj2772",
"ToePeu",
"아라",
- "Hym411"
+ "Hym411",
+ "Revi",
+ "IRTC1015"
]
},
"action-titleblacklistlog": "제목 블랙리스트 로그를 봅니다",
@@ -13,7 +15,7 @@
"log-description-titleblacklist": "이 기록은 제목 블랙리스트 로그의 일치를 추적합니다.",
"logentry-titleblacklist-hit-username": "$1 사용자가 제목 블랙리스트 $4 패턴에 일치하는 $3 계정을 생성하려고 하였습니다.",
"titleblacklist-desc": "관리자가 [[MediaWiki:Titleblacklist]], [[MediaWiki:Titlewhitelist]]마다 문서와 사용자 계정을 만드는 것을 금지할 수 있습니다",
- "titleblacklist": "# 제목 금지 목록입니다. 정규 표현식과 일치하는 제목나 사용자는 만들 수 없습니다.\n# 주석 내용에는 앞에 \"#\"을 붙여 주세요.\n# 기본적으로 규칙은 대소문자를 구별하지 않습니다",
+ "titleblacklist": "# 제목 금지 목록입니다. 정규 표현식과 일치하는 제목이나 사용자 계정은 만들 수 없습니다.\n# 주석 내용에는 앞에 \"#\"을 붙여 주세요.\n# 기본적으로 규칙은 대소문자를 구별하지 않습니다",
"titlewhitelist": "# 제목 허용 목록입니다. 주석 내용에는 앞에 \"#\"을 붙여 주세요.\n# 기본적으로 규칙은 대소문자를 구별하지 않습니다",
"titleblacklist-forbidden-edit": "\"$2\" 문서는 만들기 금지 목록에 포함되어 있습니다.\n해당 만들기 금지 조건은 <code>$1</code>입니다.",
"titleblacklist-forbidden-move": "\"$2\" 문서를 \"$3\" 제목으로 옮길 수 없습니다. 문서 만들기 금지 조건이 걸려 있습니다.\n해당 금지 조건은 <code>$1</code>입니다.",
@@ -21,6 +23,8 @@
"titleblacklist-forbidden-new-account": "\"$2\" 이름으로 계정을 만드는 것이 제한되어 있습니다.\n계정 이름이 다음의 규칙에 해당됩니다: <code>$1</code>",
"titleblacklist-invalid": "제목 블랙리스트의 다음 {{PLURAL:$1|줄}}에 잘못된 구문이 {{PLURAL:$1|있습니다}}.\n저장하기 전에 {{PLURAL:$1}}올바르게 수정해주세요:",
"titleblacklist-override": "블랙리스트를 무시",
+ "titleblacklist-autoconfirmed-warning": "<strong>참고:</strong> 이 문서는 <code>autoconfirmed</code> 권한을 가진 사용자만 편집할 수 있도록 제목 블랙리스트의 다음 항목에 지정되었습니다:<br /><code>$1</code>",
+ "titleblacklist-warning": "<strong>경고: 이 문서는 제목 금지 목록의 다음 항목과 일치하기 때문에 관리자와 <code>tboverride</code> 권한을 가진 사용자만 편집할 수 있습니다.</strong><br /><code>$1</code>",
"right-tboverride": "문서 제목이나 사용자 이름 블랙리스트 무시",
"right-tboverride-account": "사용자 이름 블랙리스트를 무시",
"right-titleblacklistlog": "제목 블랙리스트 로그 보기"
diff --git a/extensions/TitleBlacklist/i18n/ksh.json b/extensions/TitleBlacklist/i18n/ksh.json
index d35435ba..9dc10852 100644
--- a/extensions/TitleBlacklist/i18n/ksh.json
+++ b/extensions/TitleBlacklist/i18n/ksh.json
@@ -4,6 +4,10 @@
"Purodha"
]
},
+ "action-titleblacklistlog": "donn et Logbohch vun de „schwazze Leß“ för Övvverschreffte aanlohre",
+ "log-name-titleblacklist": "De „schwazze Leß“ för Övvverschreffte",
+ "log-description-titleblacklist": "Heh di Vörjäng verfollje de Träffer en de „schwazze Leß“ för Övverschreffte vun Sigge.",
+ "logentry-titleblacklist-hit-username": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 wulld ene Zohjang för „$3“ aanlähje un dat wood övver dä Endraach „$4“ de „schwazze Leß“ för Övverschreffte vun Sigge ongerbonge.",
"titleblacklist-desc": "Määt et möjjelesch, bestemmpte neuje Sigge un neuje Metmaacher-Name övver en [[MediaWiki:Titleblacklist|„schwatze Leß“]] un en [[MediaWiki:Titlewhitelist|Leß met Ußnahme dofun]] ze verbeede.",
"titleblacklist": "# Dat hee eß en „schwatze Leß“ met verbodde Tittele för Sigge.\n# Dä ier Enhallt sen rejolähre Ußdrök,\n# wat do drop paß, kam_mer nit aanläje.\n# Wam_mer et nit ömschtällt, es Jruß- un Kleinschrevv_ejaal.\n# Donn „#“ aan der Aanfang fun en Reih, dann häß ene Kommentaa.",
"titlewhitelist": "# Dat hee eß en Leß met Ußnahme fun de „schwatze Leß“ met verbodde\n# Tittele för Sigge. Dä ier Enhallt sen rejolähre Ußdrök,\n# wat do drop paß, kam_mer aanläje.\n# Wam_mer et nit ömschtällt, es Jruß- un Kleinschrevv_ejaal.\n# Donn „#“ aan der Aanfang fun en Reih, dann häß ene Kommentaa.",
@@ -13,6 +17,15 @@
"titleblacklist-forbidden-new-account": "Enne Metmaacher met dämm Name „$2“ aanzelääje es verbodde per dämm Enndraach <code>$1</code> en de „schwazze Leß.“",
"titleblacklist-invalid": "{{PLURAL:$1|De Reih unge stemmp nit un moß|De $1 Reije unge stimme nit un möße|Dat he sull}} för em Afspeichere eets en Odenung jebraat wäde:",
"titleblacklist-override": "De schwazze Leß övverjonn",
+ "titleblacklist-autoconfirmed-warning": "<strong>Opjepaß:</strong> heh di Sigg kann blohß vun Metmaachere met däm Rääsch <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">autoconfirmed</code> ({{int:group-autoconfirmed}}) weil se en dä „schwazze Leß“ för Övverschreffte op heh dä Enndraach paß:<br /><code>$1</code>",
+ "titleblacklist-warning": "<strong>Opjepaß:</strong> heh di Sigg kann blohß vun Wikki_Köhbeße un vun andere Metmaacher met däm Rääsch <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">tboverride</code>, weil se en dä „schwazze Leß“ för Övverschreffte op heh dä Enndraach paß:<br /><code>$1</code>",
"right-tboverride": "De Lėß met verbodde Naame un Titelle för Sigge övverjonn",
- "right-tboverride-account": "De Leß met verbodde Metmaacher-Name övverjonn"
+ "right-tboverride-account": "De Leß met verbodde Metmaacher-Name övverjonn",
+ "right-titleblacklistlog": "Donn et Logbohch vun de „schwazze Leß“ för Övvverschreffte aanlohre",
+ "apihelp-titleblacklist-description": "Donn de Övverschreffte vun Sigge, Datteije udder de Nahme vun Metmaacher jähje de „schwazze Leß“ för Övvverschreffte pröhve.",
+ "apihelp-titleblacklist-param-title": "De Zäijschekätt, öm se jähje de „schwazze Leß“ ze pröhve.",
+ "apihelp-titleblacklist-param-action": "Der Vörjang zom Pröhve.",
+ "apihelp-titleblacklist-param-nooverride": "Donn nit versöhke, de „schwazze Leß“ för Övvverschreffte ze övverjonn.",
+ "apihelp-titleblacklist-example-1": "Donn pröhfe, ov „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Foo]]</code>“ en de „schwazze Leß“ es.",
+ "apihelp-titleblacklist-example-2": "Donn pröhfe, ov „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Bar]]</code>“ en de „schwazze Leß“ för et Verändere es."
}
diff --git a/extensions/TitleBlacklist/i18n/lrc.json b/extensions/TitleBlacklist/i18n/lrc.json
new file mode 100644
index 00000000..40d3a587
--- /dev/null
+++ b/extensions/TitleBlacklist/i18n/lrc.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mogoeilor"
+ ]
+ },
+ "log-name-titleblacklist": "داسون پهرستنومه نومگه سئ",
+ "titleblacklist-override": "تیه پوشی د نومگه سئ",
+ "right-titleblacklistlog": "دیئن داسون پهرستنومه نومگه سئ",
+ "apihelp-titleblacklist-param-action": "کنشت وارسی بیه."
+}
diff --git a/extensions/TitleBlacklist/i18n/mk.json b/extensions/TitleBlacklist/i18n/mk.json
index e1e9cf43..fd4faa97 100644
--- a/extensions/TitleBlacklist/i18n/mk.json
+++ b/extensions/TitleBlacklist/i18n/mk.json
@@ -21,5 +21,11 @@
"titleblacklist-warning": "<strong>Предупредување: Страницава можат да ја уредуваат само администратори и други корисници со правото <code>tboverride</code> бидејќи се совпаѓа со следниов наслов на црниот список:</strong><br /><code>$1</code>",
"right-tboverride": "Занемарување на црниот список на наслови или корисници",
"right-tboverride-account": "Потиснување на црниот список на кориснички имиња",
- "right-titleblacklistlog": "Преглед на дневникот на наслови на црниот список"
+ "right-titleblacklistlog": "Преглед на дневникот на наслови на црниот список",
+ "apihelp-titleblacklist-description": "Провери наслов на статија, име на податотека или корисничко име во Црниот список.",
+ "apihelp-titleblacklist-param-title": "Низата што треба да се провери во црниот список.",
+ "apihelp-titleblacklist-param-action": "Дејството што треба да се провери.",
+ "apihelp-titleblacklist-param-nooverride": "Не се обидувај да наметнеш врз titleblacklist.",
+ "apihelp-titleblacklist-example-1": "Провери дали [[Foo]] е на црниот список",
+ "apihelp-titleblacklist-example-2": "Провери дали [[Bar]] е на црниот список за уредување"
}
diff --git a/extensions/TitleBlacklist/i18n/nl.json b/extensions/TitleBlacklist/i18n/nl.json
index 8f06c7ee..42f10e8a 100644
--- a/extensions/TitleBlacklist/i18n/nl.json
+++ b/extensions/TitleBlacklist/i18n/nl.json
@@ -2,11 +2,12 @@
"@metadata": {
"authors": [
"SPQRobin",
- "Siebrand"
+ "Siebrand",
+ "Southparkfan"
]
},
"titleblacklist-desc": "Voorkomt het aanmaken van pagina's en gebruikers via een [[MediaWiki:Titleblacklist|zwarte lijst]] en een [[MediaWiki:Titlewhitelist|witte lijst]]",
- "titleblacklist": "# Dit is een zwarte lijst voor paginanamen. Paginanamen en gebruikers die voldoen aan een reguliere expressie op deze paina kunnen niet aangemaakt worden.\n# Gebruik \"#\" voor opmerkingen.\n# Regels in de zwarte lijst zijn niet hoofdlettergevoelig.",
+ "titleblacklist": "# Dit is een zwarte lijst voor paginanamen. Paginanamen en gebruikers die voldoen aan een reguliere expressie op deze pagina kunnen niet aangemaakt worden.\n# Gebruik \"#\" voor opmerkingen.\n# Regels in de zwarte lijst zijn niet hoofdlettergevoelig.",
"titlewhitelist": "# Dit is een witte lijst voor paginanamen. Gebruik \"#\" voor opmerkingen.\n# Regels in de witte lijst zijn niet hoofdlettergevoelig.",
"titleblacklist-forbidden-edit": "Een pagina met de naam \"$2\" kan niet aangemaakt worden. Deze paginanaam voldoet aan de volgende beperking op de zwarte lijst: <code>$1</code>",
"titleblacklist-forbidden-move": "\"$2\" kan niet hernoemd worden naar \"$3\", omdat pagina's met de naam \"$3\" niet aangemaakt kunnen worden. Deze paginanaam voldoet aan de volgende beperking op de zwarte lijst: <code>$1</code>",
diff --git a/extensions/TitleBlacklist/i18n/pt.json b/extensions/TitleBlacklist/i18n/pt.json
index 01985bba..d6441649 100644
--- a/extensions/TitleBlacklist/i18n/pt.json
+++ b/extensions/TitleBlacklist/i18n/pt.json
@@ -5,10 +5,11 @@
"Hamilton Abreu",
"Malafaya",
"Waldir",
- "555"
+ "555",
+ "Vitorvicentevalente"
]
},
- "titleblacklist-desc": "Permite que os administradores proibam a criação de páginas e contas de utilizadores através de uma [[MediaWiki:Titleblacklist|lista negra]] e de uma [[MediaWiki:Titlewhitelist|lista de excepções]]",
+ "titleblacklist-desc": "Permite que os administradores proíbam a criação de páginas e contas de utilizadores através de uma [[MediaWiki:Titleblacklist|lista negra]] e de uma [[MediaWiki:Titlewhitelist|lista de excepções]]",
"titleblacklist": "# Esta é uma lista negra de títulos. Títulos de páginas e nomes de utilizadores que sejam filtrados por uma expressão regular desta lista, não poderão ser criados.\n# Use \"#\" para comentários.\n# Por omissão, esta lista não distingue maiúsculas de minúsculas",
"titlewhitelist": "# Esta é uma lista branca de títulos. Use \"#\" para comentários.\n# Por omissão, esta lista não distingue maiúsculas de minúsculas",
"titleblacklist-forbidden-edit": "Foi bloqueada a criação do título \"$2\".\nO título corresponde à seguinte entrada da lista negra: <code>$1</code>",
@@ -17,6 +18,8 @@
"titleblacklist-forbidden-new-account": "Foi bloqueada a criação de utilizadores com o nome \"$2\".\nO nome corresponde à seguinte entrada da lista negra: <code>$1</code>",
"titleblacklist-invalid": "{{PLURAL:$1|A seguinte linha|As seguintes linhas}} da lista negra {{PLURAL:$1|é inválida|são inválidas}}. Por favor, {{PLURAL:$1|corrija-a|corrija-as}} antes de gravar:",
"titleblacklist-override": "Ignorar a lista negra",
+ "titleblacklist-autoconfirmed-warning": "<strong>Nota:</strong> Esta página só pode ser editada por utilizadores <code>autoconfirmados</code>, pois corresponde com o seguinte título de entrada da lista negra:<br /><code>$1</code>",
+ "titleblacklist-warning": "<strong>Aviso: Esta página só pode ser editada por administradores e outros utilizadores com o privilégio <code>tboverride</code>, pois corresponde com o seguinte título de entrada da lista negra:</strong><br /><code>$1</code>",
"right-tboverride": "Sobrepor a lista negra de títulos e nomes de utilizador",
"right-tboverride-account": "Ignorar a lista negra de nomes de utilizador"
}
diff --git a/extensions/TitleBlacklist/i18n/qqq.json b/extensions/TitleBlacklist/i18n/qqq.json
index 6cdeff55..342305a5 100644
--- a/extensions/TitleBlacklist/i18n/qqq.json
+++ b/extensions/TitleBlacklist/i18n/qqq.json
@@ -14,7 +14,7 @@
"log-name-titleblacklist": "Name of log that appears on [[Special:Log]].",
"log-description-titleblacklist": "Description of title blacklist log",
"logentry-titleblacklist-hit-username": "Log entry that is created when someone tries to create an account with a name that is blacklisted on the title blacklist.\n\n{{logentry}}\nAdditional parameters:\n* $4 - the blacklist entry",
- "titleblacklist-desc": "{{desc|name=Title Blacklist|url=http://www.mediawiki.org/wiki/Extension:TitleBlacklist}}",
+ "titleblacklist-desc": "{{desc|name=Title Blacklist|url=https://www.mediawiki.org/wiki/Extension:TitleBlacklist}}",
"titleblacklist": "The [[mw:Extension:TitleBlacklist|extension Title Blacklist]] gives the ability to block certain unallowed words appearing in the title through regular expressions.\nThis will be the first explanatory paragraph of the blacklist. (Characters after the #-signs are ignored.) \nTo see an example list in context, see: http://www.mediawiki.org/wiki/MediaWiki:Titleblacklist",
"titlewhitelist": "The whitelist is a feature of the [[mw:Extension:TitleBlacklist|extension Title Blacklist]], which gives the ability to block certain words (or explicitly allow them) appearing in the title through regular expressions.\nThis will be the explanatory paragraph of the blacklist. (Characters after the #-signs are ignored.) \nTo see an example list in context, see: http://www.mediawiki.org/wiki/MediaWiki:Titlewhitelist",
"titleblacklist-forbidden-edit": "\"title\" stands for \"page title\". Parameters:\n* $1 - blacklist entry\n* $2 - page title\n{{Related|Titleblacklist-forbidden}}",
@@ -27,5 +27,11 @@
"titleblacklist-warning": "Displayed when a user is editing a page that only administrators (or custom user groups with the tboverride right) can edit due to the title blacklist. Parameters:\n* $1 - blacklist entry",
"right-tboverride": "{{doc-right|tboverride}}",
"right-tboverride-account": "{{doc-right|tboverride-account}}",
- "right-titleblacklistlog": "{{doc-right|titleblacklistlog}}"
+ "right-titleblacklistlog": "{{doc-right|titleblacklistlog}}",
+ "apihelp-titleblacklist-description": "{{doc-apihelp-description|titleblacklist}}",
+ "apihelp-titleblacklist-param-title": "{{doc-apihelp-param|titleblacklist|title}}",
+ "apihelp-titleblacklist-param-action": "{{doc-apihelp-param|titleblacklist|action}}",
+ "apihelp-titleblacklist-param-nooverride": "{{doc-apihelp-param|titleblacklist|nooverride}}",
+ "apihelp-titleblacklist-example-1": "{{doc-apihelp-example|titleblacklist}}",
+ "apihelp-titleblacklist-example-2": "{{doc-apihelp-example|titleblacklist}}"
}
diff --git a/extensions/TitleBlacklist/i18n/sr-el.json b/extensions/TitleBlacklist/i18n/sr-el.json
index 64102e5e..bbd60fa1 100644
--- a/extensions/TitleBlacklist/i18n/sr-el.json
+++ b/extensions/TitleBlacklist/i18n/sr-el.json
@@ -8,6 +8,8 @@
"titleblacklist-desc": "Dopušta zabranu stvaranja strana s određenim naslovima: [[MediaWiki:Titleblacklist|crna lista]] i [[MediaWiki:Titlewhitelist|bela lista]].",
"titleblacklist": "# Ovo je naslov crnog spiska. Naslovi koji sadrže regularni izraz iz ovog spiska ne mogu biti napravljeni.\n# Koristi \"#\" za komentare.\n# Podrazumevano je neosetljiv na veličinu slova",
"titlewhitelist": "# Ovo je beli spisak naslova. Koristi \"#\" za komentare.\n# Podrazumevano je neosetljiv na veličinu slova",
+ "titleblacklist-forbidden-edit": "Naslov „$2“ nalazi se na crnoj listi.\nPoklapa se sa sledećim unosom na crnoj listi: <code>$1</code>",
+ "titleblacklist-forbidden-upload": "Naziv datoteke „$2“ je na crnoj listi.\nPoklapa se sa sledećim unosom na crnoj listi: <code>$1</code>",
"titleblacklist-forbidden-new-account": "Korisničko ime „$2“ nalazi se na crnoj listi.\nPoklapa se sa sledećim unosom na crnoj listi: <code>$1</code>",
"titleblacklist-override": "Zanemari crnu listu",
"right-tboverride": "zaobilaženje crne liste naslova ili korisničkih imena",
diff --git a/extensions/TitleBlacklist/i18n/sv.json b/extensions/TitleBlacklist/i18n/sv.json
index ac7b6dc9..d54fcd72 100644
--- a/extensions/TitleBlacklist/i18n/sv.json
+++ b/extensions/TitleBlacklist/i18n/sv.json
@@ -25,5 +25,11 @@
"titleblacklist-warning": "<strong>Varning: Denna sida kan endast redigeras av administratörer och andra användare med <code>tboverride</code>-rättigheten eftersom den matchar följande post i svartlistan över titlar:</strong><br /><code>$1</code>",
"right-tboverride": "Åsidosätt svartlistan med titlar och användarnamn",
"right-tboverride-account": "Kör över svartlistan för användarnamn",
- "right-titleblacklistlog": "Visa svartlistningslogg för titlar"
+ "right-titleblacklistlog": "Visa svartlistningslogg för titlar",
+ "apihelp-titleblacklist-description": "Validera en artikeltitel, filnamn, eller användarnamn mot TitleBlacklist.",
+ "apihelp-titleblacklist-param-title": "Strängen som ska valideras mot svartlistan.",
+ "apihelp-titleblacklist-param-action": "Åtgärden som ska kontrolleras.",
+ "apihelp-titleblacklist-param-nooverride": "Försök inte att åsidosätta svartlistan för titlar.",
+ "apihelp-titleblacklist-example-1": "Kontrollera om [[Foo]] är svartlistad",
+ "apihelp-titleblacklist-example-2": "Kontrollera om [[Bar]] är svartlistad för redigering"
}
diff --git a/extensions/TitleBlacklist/i18n/uk.json b/extensions/TitleBlacklist/i18n/uk.json
index 757c6691..1d1a63ba 100644
--- a/extensions/TitleBlacklist/i18n/uk.json
+++ b/extensions/TitleBlacklist/i18n/uk.json
@@ -7,7 +7,9 @@
"Base",
"JenVan",
"Prima klasy4na",
- "Ата"
+ "Ата",
+ "Green Zero",
+ "Piramidion"
]
},
"action-titleblacklistlog": "перегляд журналу заборонених назв",
@@ -23,6 +25,8 @@
"titleblacklist-forbidden-new-account": "Заборонено використовувати ім'я користувача «$2».\nІм'я відповідає наступному запису з чорного списку: <code>$1</code>",
"titleblacklist-invalid": "{{PLURAL:$1|1=Наступний рядок|Наступні рядки}} списку заборонених назв є {{PLURAL:$1|1=помилковим|помилковими}};\nбудь ласка, виправте {{PLURAL:$1|1=його|їх}} перед збереженням:",
"titleblacklist-override": "Ігнорувати чорний список",
+ "titleblacklist-autoconfirmed-warning": "<strong>Зверніть увагу:</strong> Цю сторінку можуть редагувати лише <code>автопідтверджені користувачі</code>, оскільки вона збігається з наступним записом із «чорного списку» назв:<br /><code>$1</code>",
+ "titleblacklist-warning": "<strong>Зверніть увагу:</strong> Цю сторінку можуть редагувати лише адміністратори та інші користувачі з правами <code>tboverride</code>, оскільки вона збігається з наступним записом із «чорного списку» назв:<br /><code>$1</code>",
"right-tboverride": "ігнорування чорного списку назв сторінок або користувачів",
"right-tboverride-account": "ігнорування чорного списку імен користувачів",
"right-titleblacklistlog": "перегляд чорного списку назв"
diff --git a/extensions/TitleBlacklist/i18n/zh-hans.json b/extensions/TitleBlacklist/i18n/zh-hans.json
index def18e56..45c93522 100644
--- a/extensions/TitleBlacklist/i18n/zh-hans.json
+++ b/extensions/TitleBlacklist/i18n/zh-hans.json
@@ -29,5 +29,11 @@
"titleblacklist-warning": "<strong>警告:此页面只能由管理员和其他拥有<code>tboverride</code>权限的用户编辑,因为它匹配以下标题黑名单:</strong><br /><code>$1</code>",
"right-tboverride": "覆盖标题或用户名黑名单",
"right-tboverride-account": "覆盖用户名黑名单",
- "right-titleblacklistlog": "查看标题黑名单日志"
+ "right-titleblacklistlog": "查看标题黑名单日志",
+ "apihelp-titleblacklist-description": "验证一篇条目的标题、文件名或用户名是否触发标题黑名单。",
+ "apihelp-titleblacklist-param-title": "验证是否触发黑名单的字符串。",
+ "apihelp-titleblacklist-param-action": "要检查的操作。",
+ "apihelp-titleblacklist-param-nooverride": "不要尝试绕开标题黑名单。",
+ "apihelp-titleblacklist-example-1": "检查[[Foo]]是否被列入黑名单",
+ "apihelp-titleblacklist-example-2": "检查[[Bar]]是否被列入禁止编辑的黑名单"
}
diff --git a/extensions/TitleBlacklist/i18n/zh-hant.json b/extensions/TitleBlacklist/i18n/zh-hant.json
index bf92a4a7..9ff9db4a 100644
--- a/extensions/TitleBlacklist/i18n/zh-hant.json
+++ b/extensions/TitleBlacklist/i18n/zh-hant.json
@@ -27,7 +27,13 @@
"titleblacklist-override": "忽略封鎖清單",
"titleblacklist-autoconfirmed-warning": "<strong>注意:</strong>此頁面符合下列標題封鎖清單項目,僅可由擁有 <code>已自動確認</code> 權限的使用者編輯:<br /><code>$1</code>",
"titleblacklist-warning": "<strong>警告:此頁面符合下列標題封鎖清單項目,僅可由管理員或擁有 <code>tboverride</code> 權限的使用者編輯:</strong><br /><code>$1</code>",
- "right-tboverride": "覆蓋標題或使用者名稱封鎖清單",
- "right-tboverride-account": "覆蓋使用者名稱封鎖清單",
- "right-titleblacklistlog": "檢視標題封鎖清單日誌"
+ "right-tboverride": "覆蓋標題或使用者名稱黑名單",
+ "right-tboverride-account": "覆蓋使用者名稱黑名單",
+ "right-titleblacklistlog": "檢視標題封鎖清單日誌",
+ "apihelp-titleblacklist-description": "使用 TitleBlacklist 檢驗文章標題、檔案名稱或使用者名稱。",
+ "apihelp-titleblacklist-param-title": "要用來檢驗封鎖清單的字串。",
+ "apihelp-titleblacklist-param-action": "要檢查的操作。",
+ "apihelp-titleblacklist-param-nooverride": "不要嘗試覆蓋標題封鎖清單。",
+ "apihelp-titleblacklist-example-1": "檢查 [[Foo]] 是否已被列入封鎖名單",
+ "apihelp-titleblacklist-example-2": "檢查 [[Bar]] 是否已被列入編輯的封鎖名單"
}
diff --git a/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php b/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php
index 344e9996..734fec7e 100644
--- a/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php
+++ b/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php
@@ -24,10 +24,10 @@ class ApiQueryTitleBlacklistTest extends ApiTestCase {
$this->doLogin();
$wgTitleBlacklistSources = array(
- array(
- 'type' => TBLSRC_FILE,
- 'src' => __DIR__ . '/testSource',
- ),
+ array(
+ 'type' => 'file',
+ 'src' => __DIR__ . '/testSource',
+ ),
);
}
diff --git a/extensions/WikiEditor/WikiEditor.hooks.php b/extensions/WikiEditor/WikiEditor.hooks.php
index 8c6800c1..6dfdb691 100644
--- a/extensions/WikiEditor/WikiEditor.hooks.php
+++ b/extensions/WikiEditor/WikiEditor.hooks.php
@@ -7,6 +7,9 @@
*/
class WikiEditorHooks {
+ // ID used for grouping entries all of a session's entries together in
+ // EventLogging.
+ private static $statsId = false;
/* Protected Static Members */
@@ -84,21 +87,6 @@ class WikiEditorHooks {
'ext.wikiEditor.preview',
),
),
- 'previewDialog' => array(
- 'preferences' => array(
- 'wikieditor-previewDialog' => array(
- 'type' => 'toggle',
- 'label-message' => 'wikieditor-previewDialog-preference',
- 'section' => 'editing/labs',
- ),
- ),
- 'requirements' => array(
- 'wikieditor-previewDialog' => true,
- ),
- 'modules' => array(
- 'ext.wikiEditor.previewDialog',
- ),
- ),
'publish' => array(
'preferences' => array(
'wikieditor-publish' => array(
@@ -119,6 +107,45 @@ class WikiEditorHooks {
/* Static Methods */
/**
+ * T99257: Extension registration does not properly support 2d arrays so set it as a global for now
+ */
+ public static function onRegistration() {
+ // Each module may be configured individually to be globally on/off or user preference based
+ $features = array(
+
+ /* Textarea / i-frame compatible (OK to deploy) */
+
+ 'toolbar' => array( 'global' => false, 'user' => true ),
+ // Provides interactive tools
+ 'dialogs' => array( 'global' => false, 'user' => true ),
+ // Hide signature button from main namespace
+ 'hidesig' => array( 'global' => true, 'user' => false ),
+
+ /* Textarea / i-frame compatible, but still experimental and unstable (do not deploy!) */
+
+ // Adds a tab for previewing in-line
+ 'preview' => array( 'global' => false, 'user' => true ),
+ // Adds a button and dialog for step-by-step publishing
+ 'publish' => array( 'global' => false, 'user' => true ),
+ );
+
+ // Eww, do a 2d array merge so we don't wipe out settings
+ global $wgWikiEditorFeatures;
+ if ( $wgWikiEditorFeatures ) {
+ foreach ( $features as $name => $settings ) {
+ if ( isset( $wgWikiEditorFeatures[$name] ) ) {
+ $wgWikiEditorFeatures[$name] += $settings;
+ } else {
+ $wgWikiEditorFeatures[$name] = $settings;
+ }
+ }
+ } else {
+ $wgWikiEditorFeatures = $features;
+ }
+
+ }
+
+ /**
* Checks if a certain option is enabled
*
* This method is public to allow other extensions that use WikiEditor to use the
@@ -134,7 +161,8 @@ class WikiEditorHooks {
if ( !isset( $wgWikiEditorFeatures[$name] ) || $wgWikiEditorFeatures[$name]['global'] ) {
return true;
}
- // Features with user preference control can have any number of preferences to be specific values to be enabled
+ // Features with user preference control can have any number of preferences
+ // to be specific values to be enabled
if ( $wgWikiEditorFeatures[$name]['user'] ) {
if ( isset( self::$features[$name]['requirements'] ) ) {
foreach ( self::$features[$name]['requirements'] as $requirement => $value ) {
@@ -146,17 +174,60 @@ class WikiEditorHooks {
}
return true;
}
- // Features controlled by $wgWikiEditorFeatures with both global and user set to false are awlways disabled
+ // Features controlled by $wgWikiEditorFeatures with both global and user
+ // set to false are always disabled
return false;
}
/**
+ * Log stuff to EventLogging's Schema:Edit - see https://meta.wikimedia.org/wiki/Schema:Edit
+ * If you don't have EventLogging installed, does nothing.
+ *
+ * @param string $action
+ * @param Article $article Which article (with full context, page, title, etc.)
+ * @param array $data Data to log for this action
+ * @return bool Whether the event was logged or not.
+ */
+ public static function doEventLogging( $action, $article, $data = array() ) {
+ global $wgVersion;
+ if ( !class_exists( 'EventLogging' ) ) {
+ return false;
+ }
+
+ $user = $article->getContext()->getUser();
+ $page = $article->getPage();
+ $title = $article->getTitle();
+
+ $data = array(
+ 'action' => $action,
+ 'version' => 1,
+ 'editor' => 'wikitext',
+ 'platform' => 'desktop', // FIXME
+ 'integration' => 'page',
+ 'page.length' => -1, // FIXME
+ 'page.id' => $page->getId(),
+ 'page.title' => $title->getPrefixedText(),
+ 'page.ns' => $title->getNamespace(),
+ 'page.revid' => $page->getRevision() ? $page->getRevision()->getId() : 0,
+ 'user.id' => $user->getId(),
+ 'user.editCount' => $user->getEditCount() ?: 0,
+ 'mediawiki.version' => $wgVersion
+ ) + $data;
+
+ if ( $user->isAnon() ) {
+ $data['user.class'] = 'IP';
+ }
+
+ return EventLogging::logEvent( 'Edit', 11448630, $data );
+ }
+
+ /**
* EditPage::showEditForm:initial hook
*
* Adds the modules to the edit form
*
- * @param $editPage EditPage the current EditPage object.
- * @param $output OutputPage object.
+ * @param EditPage $editPage the current EditPage object.
+ * @param OutputPage $outputPage object.
* @return bool
*/
public static function editPageShowEditFormInitial( $editPage, $outputPage ) {
@@ -176,6 +247,66 @@ class WikiEditorHooks {
$outputPage->addModules( $feature['modules'] );
}
}
+
+ $article = $editPage->getArticle();
+ $request = $article->getContext()->getRequest();
+ // Don't run this if the request was posted - we don't want to log 'init' when the
+ // user just pressed 'Show preview' or 'Show changes', or switched from VE keeping
+ // changes.
+ if ( class_exists( 'EventLogging' ) && !$request->wasPosted() ) {
+ $data = array();
+ $data['editingSessionId'] = self::getEditingStatsId();
+ if ( $request->getVal( 'section' ) ) {
+ $data['action.init.type'] = 'section';
+ } else {
+ $data['action.init.type'] = 'page';
+ }
+ if ( $request->getHeader( 'Referer' ) ) {
+ if ( $request->getVal( 'section' ) === 'new' || !$article->exists() ) {
+ $data['action.init.mechanism'] = 'new';
+ } else {
+ $data['action.init.mechanism'] = 'click';
+ }
+ } else {
+ $data['action.init.mechanism'] = 'url';
+ }
+
+ self::doEventLogging( 'init', $article, $data );
+ }
+
+ return true;
+ }
+
+ /**
+ * EditPage::showEditForm:fields hook
+ *
+ * Adds the event fields to the edit form
+ *
+ * @param EditPage $editPage the current EditPage object.
+ * @param OutputPage $outputPage object.
+ * @return bool
+ */
+ public static function editPageShowEditFormFields( $editPage, $outputPage ) {
+ if ( $editPage->contentModel !== CONTENT_MODEL_WIKITEXT ) {
+ return true;
+ }
+
+ $req = $outputPage->getContext()->getRequest();
+ $editingStatsId = $req->getVal( 'editingStatsId' );
+ if ( !$editingStatsId ) {
+ $editingStatsId = self::getEditingStatsId();
+ }
+ $outputPage->addHTML(
+ Xml::element(
+ 'input',
+ array(
+ 'type' => 'hidden',
+ 'name' => 'editingStatsId',
+ 'id' => 'editingStatsId',
+ 'value' => $editingStatsId
+ )
+ )
+ );
return true;
}
@@ -202,10 +333,10 @@ class WikiEditorHooks {
/**
* GetPreferences hook
*
- * Adds WikiEditor-releated items to the preferences
+ * Adds WikiEditor-related items to the preferences
*
- * @param $user User current user
- * @param $defaultPreferences array list of default user preference controls
+ * @param User $user current user
+ * @param array $defaultPreferences list of default user preference controls
* @return bool
*/
public static function getPreferences( $user, &$defaultPreferences ) {
@@ -225,36 +356,39 @@ class WikiEditorHooks {
}
/**
- * MakeGlobalVariablesScript hook
- *
- * Adds enabled/disabled switches for WikiEditor modules
* @param $vars array
* @return bool
*/
public static function resourceLoaderGetConfigVars( &$vars ) {
- global $wgWikiEditorFeatures;
-
- $configurations = array();
- foreach ( self::$features as $name => $feature ) {
- if (
- isset( $feature['configurations'] ) &&
- ( !isset( $wgWikiEditorFeatures[$name] ) || self::isEnabled( $name ) )
- ) {
- foreach ( $feature['configurations'] as $configuration ) {
- global $$configuration;
- $configurations[$configuration] = $$configuration;
- }
- }
- }
- if ( count( $configurations ) ) {
- $vars = array_merge( $vars, $configurations );
- }
- //expose magic words for use by the wikieditor toolbar
+ // expose magic words for use by the wikieditor toolbar
WikiEditorHooks::getMagicWords( $vars );
return true;
}
/**
+ * ResourceLoaderTestModules hook
+ *
+ * Registers JavaScript test modules
+ *
+ * @param $testModules array of javascript testing modules. 'qunit' is fed using
+ * tests/qunit/QUnitTestResources.php.
+ * @param $resourceLoader object
+ * @return bool
+ */
+ public static function resourceLoaderTestModules( &$testModules, &$resourceLoader ) {
+ $testModules['qunit']['ext.wikiEditor.toolbar.test'] = array(
+ 'scripts' => array( 'tests/qunit/ext.wikiEditor.toolbar.test.js' ),
+ 'dependencies' => array( 'ext.wikiEditor.toolbar' ),
+ 'localBasePath' => __DIR__,
+ 'remoteExtPath' => 'WikiEditor',
+ );
+ return true;
+ }
+
+ /**
+ * MakeGlobalVariablesScript hook
+ *
+ * Adds enabled/disabled switches for WikiEditor modules
* @param $vars array
* @return bool
*/
@@ -274,7 +408,7 @@ class WikiEditorHooks {
* @param $vars array
* @return bool
*/
- private static function getMagicWords( &$vars ){
+ private static function getMagicWords( &$vars ) {
$requiredMagicWords = array(
'redirect',
'img_right',
@@ -285,10 +419,104 @@ class WikiEditorHooks {
'img_framed',
'img_frameless',
);
+ $magicWords = array();
foreach ( $requiredMagicWords as $name ) {
- $magicWords[$name] = MagicWord::get( $name )->getSynonym( 0 );
- }
+ $magicWords[$name] = MagicWord::get( $name )->getSynonym( 0 );
+ }
$vars['wgWikiEditorMagicWords'] = $magicWords;
}
+
+ /**
+ * Adds WikiEditor JS to the output.
+ *
+ * This is attached to the MediaWiki 'BeforePageDisplay' hook.
+ *
+ * @param OutputPage $output
+ * @param Skin $skin
+ * @return boolean
+ */
+ public static function onBeforePageDisplay( OutputPage &$output, Skin &$skin ) {
+ $output->addModules( array( 'ext.wikiEditor.init' ) );
+ return true;
+ }
+
+ /**
+ * Gets a 32 character alphanumeric random string to be used for stats.
+ * @return string
+ */
+ private static function getEditingStatsId() {
+ if ( self::$statsId ) {
+ return self::$statsId;
+ }
+ return self::$statsId = MWCryptRand::generateHex( 32 );
+ }
+
+ /**
+ * This is attached to the MediaWiki 'EditPage::attemptSave' hook.
+ *
+ * @param EditPage $editPage
+ * @param Status $status
+ * @return boolean
+ */
+ public static function editPageAttemptSave( EditPage $editPage ) {
+ $article = $editPage->getArticle();
+ $request = $article->getContext()->getRequest();
+ if ( $request->getVal( 'editingStatsId' ) ) {
+ self::doEventLogging(
+ 'saveAttempt',
+ $article,
+ array( 'editingSessionId' => $request->getVal( 'editingStatsId' ) )
+ );
+ }
+
+ return true;
+ }
+
+ /**
+ * This is attached to the MediaWiki 'EditPage::attemptSave:after' hook.
+ *
+ * @param EditPage $editPage
+ * @param Status $status
+ * @return boolean
+ */
+ public static function editPageAttemptSaveAfter( EditPage $editPage, Status $status ) {
+ $article = $editPage->getArticle();
+ $request = $article->getContext()->getRequest();
+ if ( $request->getVal( 'editingStatsId' ) ) {
+ $data = array();
+ $data['editingSessionId'] = $request->getVal( 'editingStatsId' );
+
+ if ( $status->isOK() ) {
+ $action = 'saveSuccess';
+ } else {
+ $action = 'saveFailure';
+ $errors = $status->getErrorsArray();
+
+ if ( isset( $errors[0][0] ) ) {
+ $data['action.saveFailure.message'] = $errors[0][0];
+ }
+
+ if ( $status->value === EditPage::AS_CONFLICT_DETECTED ) {
+ $data['action.saveFailure.type'] = 'editConflict';
+ } elseif ( $status->value === EditPage::AS_ARTICLE_WAS_DELETED ) {
+ $data['action.saveFailure.type'] = 'editPageDeleted';
+ } elseif ( isset( $errors[0][0] ) && $errors[0][0] === 'abusefilter-disallowed' ) {
+ $data['action.saveFailure.type'] = 'extensionAbuseFilter';
+ } elseif ( isset( $editPage->getArticle()->getPage()->ConfirmEdit_ActivateCaptcha ) ) {
+ // TODO: :(
+ $data['action.saveFailure.type'] = 'extensionCaptcha';
+ } elseif ( isset( $errors[0][0] ) && $errors[0][0] === 'spamprotectiontext' ) {
+ $data['action.saveFailure.type'] = 'extensionSpamBlacklist';
+ } else {
+ // Catch everything else... We don't seem to get userBadToken or
+ // userNewUser through this hook.
+ $data['action.saveFailure.type'] = 'responseUnknown';
+ }
+ }
+ self::doEventLogging( $action, $article, $data );
+ }
+
+ return true;
+ }
}
diff --git a/extensions/WikiEditor/WikiEditor.i18n.php b/extensions/WikiEditor/WikiEditor.i18n.php
deleted file mode 100644
index c5061d6f..00000000
--- a/extensions/WikiEditor/WikiEditor.i18n.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * This is a backwards-compatibility shim, generated by:
- * https://git.wikimedia.org/blob/mediawiki%2Fcore.git/HEAD/maintenance%2FgenerateJsonI18n.php
- *
- * Beginning with MediaWiki 1.23, translation strings are stored in json files,
- * and the EXTENSION.i18n.php file only exists to provide compatibility with
- * older releases of MediaWiki. For more information about this migration, see:
- * https://www.mediawiki.org/wiki/Requests_for_comment/Localisation_format
- *
- * This shim maintains compatibility back to MediaWiki 1.17.
- */
-$messages = array();
-if ( !function_exists( 'wfJsonI18nShim6684a292eeedc222' ) ) {
- function wfJsonI18nShim6684a292eeedc222( $cache, $code, &$cachedData ) {
- $codeSequence = array_merge( array( $code ), $cachedData['fallbackSequence'] );
- foreach ( $codeSequence as $csCode ) {
- $fileName = dirname( __FILE__ ) . "/i18n/$csCode.json";
- if ( is_readable( $fileName ) ) {
- $data = FormatJson::decode( file_get_contents( $fileName ), true );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key === '' || $key[0] === '@' ) {
- unset( $data[$key] );
- }
- }
- $cachedData['messages'] = array_merge( $data, $cachedData['messages'] );
- }
-
- $cachedData['deps'][] = new FileDependency( $fileName );
- }
- return true;
- }
-
- $GLOBALS['wgHooks']['LocalisationCacheRecache'][] = 'wfJsonI18nShim6684a292eeedc222';
-}
diff --git a/extensions/WikiEditor/WikiEditor.php b/extensions/WikiEditor/WikiEditor.php
index 723c4bfc..fe61803d 100644
--- a/extensions/WikiEditor/WikiEditor.php
+++ b/extensions/WikiEditor/WikiEditor.php
@@ -1,434 +1,13 @@
<?php
-/**
- * WikiEditor extension
- *
- * @file
- * @ingroup Extensions
- *
- * @author Trevor Parscal <trevor@wikimedia.org>
- * @author Roan Kattouw <roan.kattouw@gmail.com>
- * @author Nimish Gautam <nimish@wikimedia.org>
- * @author Adam Miller <amiller@wikimedia.org>
- * @license GPL v2 or later
- * @version 0.4.0
- */
-
-/* Configuration */
-
-// Each module may be configured individually to be globally on/off or user preference based
-$wgWikiEditorFeatures = array(
-
- /* Textarea / i-frame compatible (OK to deploy) */
-
- 'toolbar' => array( 'global' => false, 'user' => true ),
- // Provides interactive tools
- 'dialogs' => array( 'global' => false, 'user' => true ),
- // Hide signature button from main namespace
- 'hidesig' => array( 'global' => true, 'user' => false ),
-
- /* Textarea / i-frame compatible, but still experimental and unstable (do not deploy!) */
-
- // Adds a tab for previewing in-line
- 'preview' => array( 'global' => false, 'user' => true ),
- // Adds a button for previewing in a dialog
- 'previewDialog' => array( 'global' => false, 'user' => false ),
- // Adds a button and dialog for step-by-step publishing
- 'publish' => array( 'global' => false, 'user' => true ),
-);
-
-/* Setup */
-
-$wgExtensionCredits['other'][] = array(
- 'path' => __FILE__,
- 'name' => 'WikiEditor',
- 'author' => array( 'Trevor Parscal', 'Roan Kattouw', 'Nimish Gautam', 'Adam Miller' ),
- 'version' => '0.4.0',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:WikiEditor',
- 'descriptionmsg' => 'wikieditor-desc',
-);
-$wgAutoloadClasses['WikiEditorHooks'] = __DIR__ . '/WikiEditor.hooks.php';
-$wgMessagesDirs['WikiEditor'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['WikiEditor'] = __DIR__ . '/WikiEditor.i18n.php';
-$wgHooks['EditPage::showEditForm:initial'][] = 'WikiEditorHooks::editPageShowEditFormInitial';
-$wgHooks['GetPreferences'][] = 'WikiEditorHooks::getPreferences';
-$wgHooks['ResourceLoaderGetConfigVars'][] = 'WikiEditorHooks::resourceLoaderGetConfigVars';
-$wgHooks['MakeGlobalVariablesScript'][] = 'WikiEditorHooks::makeGlobalVariablesScript';
-$wgHooks['EditPageBeforeEditToolbar'][] = 'WikiEditorHooks::EditPageBeforeEditToolbar';
-
-$wikiEditorTpl = array(
- 'localBasePath' => __DIR__ . '/modules',
- 'remoteExtPath' => 'WikiEditor/modules',
- 'group' => 'ext.wikiEditor',
-);
-
-$wgResourceModules += array(
-
- /* WikiEditor jQuery plugin Resources */
-
- 'jquery.wikiEditor' => $wikiEditorTpl + array(
- 'scripts' => 'jquery.wikiEditor.js',
- 'styles' => 'jquery.wikiEditor.css',
- 'dependencies' => array(
- 'jquery.client',
- 'jquery.textSelection',
- ),
- 'messages' => array(
- 'wikieditor-wikitext-tab',
- 'wikieditor-loading',
- ),
- ),
- 'jquery.wikiEditor.dialogs' => $wikiEditorTpl + array(
- 'scripts' => 'jquery.wikiEditor.dialogs.js',
- 'styles' => 'jquery.wikiEditor.dialogs.css',
- 'dependencies' => array(
- 'jquery.wikiEditor',
- 'jquery.wikiEditor.toolbar',
- 'jquery.ui.dialog',
- 'jquery.ui.button',
- 'jquery.ui.draggable',
- 'jquery.ui.resizable',
- 'jquery.tabIndex',
- ),
- ),
- 'jquery.wikiEditor.dialogs.config' => $wikiEditorTpl + array(
- 'scripts' => 'jquery.wikiEditor.dialogs.config.js',
- 'styles' => 'jquery.wikiEditor.dialogs.config.css',
- 'dependencies' => array(
- 'jquery.wikiEditor',
- 'jquery.wikiEditor.dialogs',
- 'jquery.wikiEditor.toolbar.i18n',
- 'jquery.suggestions',
- 'mediawiki.Title',
- 'mediawiki.jqueryMsg',
- ),
- 'messages' => array(
- 'wikieditor-toolbar-tool-file-title',
- 'wikieditor-toolbar-file-target',
- 'wikieditor-toolbar-file-caption',
- 'wikieditor-toolbar-file-size',
- 'wikieditor-toolbar-file-float',
- 'wikieditor-toolbar-file-default',
- 'wikieditor-toolbar-file-format-none',
- 'wikieditor-toolbar-file-format',
- 'wikieditor-toolbar-tool-file-insert',
- 'wikieditor-toolbar-tool-file-cancel',
- ),
- ),
- 'jquery.wikiEditor.preview' => $wikiEditorTpl + array(
- 'scripts' => 'jquery.wikiEditor.preview.js',
- 'styles' => 'jquery.wikiEditor.preview.css',
- 'dependencies' => 'jquery.wikiEditor',
- ),
- 'jquery.wikiEditor.previewDialog' => $wikiEditorTpl + array(
- 'scripts' => 'jquery.wikiEditor.previewDialog.js',
- 'styles' => 'jquery.wikiEditor.previewDialog.css',
- 'dependencies' => array(
- 'jquery.wikiEditor',
- 'jquery.wikiEditor.dialogs',
- ),
- ),
- 'jquery.wikiEditor.publish' => $wikiEditorTpl + array(
- 'scripts' => 'jquery.wikiEditor.publish.js',
- 'dependencies' => array(
- 'jquery.wikiEditor',
- 'jquery.wikiEditor.dialogs',
- ),
- ),
- 'jquery.wikiEditor.toolbar' => $wikiEditorTpl + array(
- 'scripts' => 'jquery.wikiEditor.toolbar.js',
- 'styles' => 'jquery.wikiEditor.toolbar.css',
- 'dependencies' => array(
- 'jquery.wikiEditor',
- 'jquery.wikiEditor.toolbar.i18n',
- 'jquery.cookie',
- 'jquery.async',
- ),
- ),
- 'jquery.wikiEditor.toolbar.config' => $wikiEditorTpl + array(
- 'scripts' => 'jquery.wikiEditor.toolbar.config.js',
- 'dependencies' => array(
- 'jquery.wikiEditor',
- 'jquery.wikiEditor.toolbar.i18n',
- 'jquery.wikiEditor.toolbar',
- )
- ),
- 'jquery.wikiEditor.toolbar.i18n' => $wikiEditorTpl + array(
- 'messages' => array(
- // This is a mixed bunch that needs to be separated between dialog and toolbar messages,
- // but since both the dialog and toolbar config have this as dependency, it's not urgent
- 'wikieditor-toolbar-loading',
- /* Main Section */
- 'wikieditor-toolbar-tool-bold',
- 'wikieditor-toolbar-tool-bold-example',
- 'wikieditor-toolbar-tool-italic',
- 'wikieditor-toolbar-tool-italic-example',
- 'wikieditor-toolbar-tool-ilink',
- 'wikieditor-toolbar-tool-ilink-example',
- 'wikieditor-toolbar-tool-xlink',
- 'wikieditor-toolbar-tool-xlink-example',
- 'wikieditor-toolbar-tool-link',
- 'wikieditor-toolbar-tool-link-title',
- 'wikieditor-toolbar-tool-link-int',
- 'wikieditor-toolbar-tool-link-int-target',
- 'wikieditor-toolbar-tool-link-int-target-tooltip',
- 'wikieditor-toolbar-tool-link-int-text',
- 'wikieditor-toolbar-tool-link-int-text-tooltip',
- 'wikieditor-toolbar-tool-link-ext',
- 'wikieditor-toolbar-tool-link-ext-target',
- 'wikieditor-toolbar-tool-link-ext-text',
- 'wikieditor-toolbar-tool-link-insert',
- 'wikieditor-toolbar-tool-link-cancel',
- 'wikieditor-toolbar-tool-link-int-target-status-exists',
- 'wikieditor-toolbar-tool-link-int-target-status-notexists',
- 'wikieditor-toolbar-tool-link-int-target-status-invalid',
- 'wikieditor-toolbar-tool-link-int-target-status-external',
- 'wikieditor-toolbar-tool-link-int-target-status-loading',
- 'wikieditor-toolbar-tool-link-int-target-status-disambig',
- 'wikieditor-toolbar-tool-link-int-invalid',
- 'wikieditor-toolbar-tool-link-lookslikeinternal',
- 'wikieditor-toolbar-tool-link-lookslikeinternal-int',
- 'wikieditor-toolbar-tool-link-lookslikeinternal-ext',
- 'wikieditor-toolbar-tool-link-empty',
- 'wikieditor-toolbar-tool-file',
- 'wikieditor-toolbar-tool-file-example',
- 'wikieditor-toolbar-tool-file-pre',
- 'wikieditor-toolbar-tool-reference',
- 'wikieditor-toolbar-tool-reference-title',
- 'wikieditor-toolbar-tool-reference-cancel',
- 'wikieditor-toolbar-tool-reference-text',
- 'wikieditor-toolbar-tool-reference-insert',
- 'wikieditor-toolbar-tool-reference-example',
- 'wikieditor-toolbar-tool-signature',
- /* Formatting Section */
- 'wikieditor-toolbar-section-advanced',
- 'wikieditor-toolbar-tool-heading',
- 'wikieditor-toolbar-tool-heading-1',
- 'wikieditor-toolbar-tool-heading-2',
- 'wikieditor-toolbar-tool-heading-3',
- 'wikieditor-toolbar-tool-heading-4',
- 'wikieditor-toolbar-tool-heading-5',
- 'wikieditor-toolbar-tool-heading-example',
- 'wikieditor-toolbar-group-format',
- 'wikieditor-toolbar-tool-ulist',
- 'wikieditor-toolbar-tool-ulist-example',
- 'wikieditor-toolbar-tool-olist',
- 'wikieditor-toolbar-tool-olist-example',
- 'wikieditor-toolbar-tool-nowiki',
- 'wikieditor-toolbar-tool-nowiki-example',
- 'wikieditor-toolbar-tool-redirect',
- 'wikieditor-toolbar-tool-redirect-example',
- 'wikieditor-toolbar-tool-big',
- 'wikieditor-toolbar-tool-big-example',
- 'wikieditor-toolbar-tool-small',
- 'wikieditor-toolbar-tool-small-example',
- 'wikieditor-toolbar-tool-superscript',
- 'wikieditor-toolbar-tool-superscript-example',
- 'wikieditor-toolbar-tool-subscript',
- 'wikieditor-toolbar-tool-subscript-example',
- 'wikieditor-toolbar-group-insert',
- 'wikieditor-toolbar-tool-gallery',
- 'wikieditor-toolbar-tool-gallery-example',
- 'wikieditor-toolbar-tool-newline',
- 'wikieditor-toolbar-tool-table',
- 'wikieditor-toolbar-tool-table-example-old',
- 'wikieditor-toolbar-tool-table-example-cell-text',
- 'wikieditor-toolbar-tool-table-example',
- 'wikieditor-toolbar-tool-table-example-header',
- 'wikieditor-toolbar-tool-table-title',
- 'wikieditor-toolbar-tool-table-dimensions-rows',
- 'wikieditor-toolbar-tool-table-dimensions-columns',
- 'wikieditor-toolbar-tool-table-dimensions-header',
- 'wikieditor-toolbar-tool-table-wikitable',
- 'wikieditor-toolbar-tool-table-sortable',
- 'wikieditor-toolbar-tool-table-insert',
- 'wikieditor-toolbar-tool-table-cancel',
- 'wikieditor-toolbar-tool-table-example-text',
- 'wikieditor-toolbar-tool-table-toomany',
- 'wikieditor-toolbar-tool-table-invalidnumber',
- 'wikieditor-toolbar-tool-table-zero',
- 'wikieditor-toolbar-tool-replace',
- 'wikieditor-toolbar-tool-replace-title',
- 'wikieditor-toolbar-tool-replace-search',
- 'wikieditor-toolbar-tool-replace-replace',
- 'wikieditor-toolbar-tool-replace-case',
- 'wikieditor-toolbar-tool-replace-regex',
- 'wikieditor-toolbar-tool-replace-button-findnext',
- 'wikieditor-toolbar-tool-replace-button-replace',
- 'wikieditor-toolbar-tool-replace-button-replaceall',
- 'wikieditor-toolbar-tool-replace-close',
- 'wikieditor-toolbar-tool-replace-nomatch',
- 'wikieditor-toolbar-tool-replace-success',
- 'wikieditor-toolbar-tool-replace-emptysearch',
- 'wikieditor-toolbar-tool-replace-invalidregex',
- /* Special Characters Section */
- 'wikieditor-toolbar-section-characters',
- 'wikieditor-toolbar-characters-page-latin',
- 'wikieditor-toolbar-characters-page-latinextended',
- 'wikieditor-toolbar-characters-page-ipa',
- 'wikieditor-toolbar-characters-page-symbols',
- 'wikieditor-toolbar-characters-page-greek',
- 'wikieditor-toolbar-characters-page-cyrillic',
- 'wikieditor-toolbar-characters-page-arabic',
- 'wikieditor-toolbar-characters-page-arabicextended',
- 'wikieditor-toolbar-characters-page-persian',
- 'wikieditor-toolbar-characters-page-hebrew',
- 'wikieditor-toolbar-characters-page-bangla',
- 'wikieditor-toolbar-characters-page-tamil',
- 'wikieditor-toolbar-characters-page-telugu',
- 'wikieditor-toolbar-characters-page-sinhala',
- 'wikieditor-toolbar-characters-page-devanagari',
- 'wikieditor-toolbar-characters-page-gujarati',
- 'wikieditor-toolbar-characters-page-thai',
- 'wikieditor-toolbar-characters-page-lao',
- 'wikieditor-toolbar-characters-page-khmer',
- 'wikieditor-toolbar-characters-endash',
- 'wikieditor-toolbar-characters-emdash',
- 'wikieditor-toolbar-characters-minus',
- /* Help Section */
- 'wikieditor-toolbar-section-help',
- 'wikieditor-toolbar-help-heading-description',
- 'wikieditor-toolbar-help-heading-syntax',
- 'wikieditor-toolbar-help-heading-result',
- 'wikieditor-toolbar-help-page-format',
- 'wikieditor-toolbar-help-page-link',
- 'wikieditor-toolbar-help-page-heading',
- 'wikieditor-toolbar-help-page-list',
- 'wikieditor-toolbar-help-page-file',
- 'wikieditor-toolbar-help-page-reference',
- 'wikieditor-toolbar-help-page-discussion',
- 'wikieditor-toolbar-help-content-bold-description',
- 'wikieditor-toolbar-help-content-bold-syntax',
- 'wikieditor-toolbar-help-content-bold-result',
- 'wikieditor-toolbar-help-content-italic-description',
- 'wikieditor-toolbar-help-content-italic-syntax',
- 'wikieditor-toolbar-help-content-italic-result',
- 'wikieditor-toolbar-help-content-bolditalic-description',
- 'wikieditor-toolbar-help-content-bolditalic-syntax',
- 'wikieditor-toolbar-help-content-bolditalic-result',
- 'wikieditor-toolbar-help-content-ilink-description',
- 'wikieditor-toolbar-help-content-ilink-syntax',
- 'wikieditor-toolbar-help-content-ilink-result',
- 'wikieditor-toolbar-help-content-xlink-description',
- 'wikieditor-toolbar-help-content-xlink-syntax',
- 'wikieditor-toolbar-help-content-xlink-result',
- 'wikieditor-toolbar-help-content-heading1-description',
- 'wikieditor-toolbar-help-content-heading1-syntax',
- 'wikieditor-toolbar-help-content-heading1-result',
- 'wikieditor-toolbar-help-content-heading2-description',
- 'wikieditor-toolbar-help-content-heading2-syntax',
- 'wikieditor-toolbar-help-content-heading2-result',
- 'wikieditor-toolbar-help-content-heading3-description',
- 'wikieditor-toolbar-help-content-heading3-syntax',
- 'wikieditor-toolbar-help-content-heading3-result',
- 'wikieditor-toolbar-help-content-heading4-description',
- 'wikieditor-toolbar-help-content-heading4-syntax',
- 'wikieditor-toolbar-help-content-heading4-result',
- 'wikieditor-toolbar-help-content-heading5-description',
- 'wikieditor-toolbar-help-content-heading5-syntax',
- 'wikieditor-toolbar-help-content-heading5-result',
- 'wikieditor-toolbar-help-content-ulist-description',
- 'wikieditor-toolbar-help-content-ulist-syntax',
- 'wikieditor-toolbar-help-content-ulist-result',
- 'wikieditor-toolbar-help-content-olist-description',
- 'wikieditor-toolbar-help-content-olist-syntax',
- 'wikieditor-toolbar-help-content-olist-result',
- 'wikieditor-toolbar-help-content-file-description',
- 'wikieditor-toolbar-help-content-file-syntax',
- 'wikieditor-toolbar-help-content-file-result',
- 'wikieditor-toolbar-help-content-reference-description',
- 'wikieditor-toolbar-help-content-reference-syntax',
- 'wikieditor-toolbar-help-content-reference-result',
- 'wikieditor-toolbar-help-content-rereference-description',
- 'wikieditor-toolbar-help-content-rereference-syntax',
- 'wikieditor-toolbar-help-content-rereference-result',
- 'wikieditor-toolbar-help-content-showreferences-description',
- 'wikieditor-toolbar-help-content-showreferences-syntax',
- 'wikieditor-toolbar-help-content-showreferences-result',
- 'wikieditor-toolbar-help-content-signaturetimestamp-description',
- 'wikieditor-toolbar-help-content-signaturetimestamp-syntax',
- 'wikieditor-toolbar-help-content-signaturetimestamp-result',
- 'wikieditor-toolbar-help-content-signature-description',
- 'wikieditor-toolbar-help-content-signature-syntax',
- 'wikieditor-toolbar-help-content-signature-result',
- 'wikieditor-toolbar-help-content-indent-description',
- 'wikieditor-toolbar-help-content-indent-syntax',
- 'wikieditor-toolbar-help-content-indent-result',
- ),
- ),
-
- /* WikiEditor Resources */
-
- 'ext.wikiEditor' => $wikiEditorTpl + array(
- 'scripts' => 'ext.wikiEditor.js',
- 'styles' => 'ext.wikiEditor.css',
- 'dependencies' => 'jquery.wikiEditor',
- ),
- 'ext.wikiEditor.dialogs' => $wikiEditorTpl + array(
- 'scripts' => 'ext.wikiEditor.dialogs.js',
- 'dependencies' => array(
- 'ext.wikiEditor',
- 'ext.wikiEditor.toolbar',
- 'jquery.wikiEditor.dialogs',
- 'jquery.wikiEditor.dialogs.config',
- ),
- ),
- 'ext.wikiEditor.preview' => $wikiEditorTpl + array(
- 'scripts' => 'ext.wikiEditor.preview.js',
- 'dependencies' => array(
- 'ext.wikiEditor',
- 'jquery.wikiEditor.preview',
- ),
- 'messages' => array(
- 'wikieditor-preview-tab',
- 'wikieditor-preview-changes-tab',
- 'wikieditor-preview-loading',
- ),
- ),
- 'ext.wikiEditor.previewDialog' => $wikiEditorTpl + array(
- 'scripts' => 'ext.wikiEditor.previewDialog.js',
- 'dependencies' => array(
- 'ext.wikiEditor',
- 'jquery.wikiEditor.previewDialog',
- ),
- 'messages' => array(
- 'wikieditor-previewDialog-preference',
- 'wikieditor-previewDialog-tab',
- 'wikieditor-previewDialog-loading',
- ),
- ),
- 'ext.wikiEditor.publish' => $wikiEditorTpl + array(
- 'scripts' => 'ext.wikiEditor.publish.js',
- 'dependencies' => array(
- 'ext.wikiEditor',
- 'jquery.wikiEditor.publish',
- ),
- 'messages' => array(
- 'wikieditor-publish-button-publish',
- 'wikieditor-publish-button-cancel',
- 'wikieditor-publish-dialog-title',
- 'wikieditor-publish-dialog-summary',
- 'wikieditor-publish-dialog-minor',
- 'wikieditor-publish-dialog-watch',
- 'wikieditor-publish-dialog-publish',
- 'wikieditor-publish-dialog-goback',
- ),
- ),
- 'ext.wikiEditor.tests.toolbar' => $wikiEditorTpl + array(
- 'scripts' => 'ext.wikiEditor.tests.toolbar.js',
- 'dependencies' => 'ext.wikiEditor.toolbar',
- ),
- 'ext.wikiEditor.toolbar' => $wikiEditorTpl + array(
- 'scripts' => 'ext.wikiEditor.toolbar.js',
- 'dependencies' => array(
- 'ext.wikiEditor',
- 'jquery.wikiEditor.toolbar',
- 'jquery.wikiEditor.toolbar.config',
- )
- ),
- 'ext.wikiEditor.toolbar.styles' => $wikiEditorTpl + array(
- 'styles' => 'ext.wikiEditor.toolbar.styles.css',
- ),
- 'ext.wikiEditor.toolbar.hideSig' => $wikiEditorTpl + array(
- 'scripts' => 'ext.wikiEditor.toolbar.hideSig.js',
- ),
-);
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'WikiEditor' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['WikiEditor'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for WikiEditor extension. Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the WikiEditor extension requires MediaWiki 1.25+' );
+}
diff --git a/extensions/WikiEditor/composer.json b/extensions/WikiEditor/composer.json
index 38f13e72..800bf156 100644
--- a/extensions/WikiEditor/composer.json
+++ b/extensions/WikiEditor/composer.json
@@ -1,11 +1,12 @@
{
- "name": "mediawiki/wiki-editor",
- "type": "mediawiki-extension",
- "description": "WikiEditor is an extendable framework with a set of feature-based modules that improve the user experience of editing.",
- "homepage": "http://www.mediawiki.org/wiki/Extension:WikiEditor",
- "license" : "GPL-2.0",
-
- "require": {
- "composer/installers" : "*"
- }
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.8.0",
+ "mediawiki/mediawiki-codesniffer": "0.1.0"
+ },
+ "scripts": {
+ "test": [
+ "parallel-lint . --exclude vendor",
+ "phpcs --standard=vendor/mediawiki/mediawiki-codesniffer/MediaWiki --extensions=php,php5,inc --ignore=vendor -p ."
+ ]
+ }
}
diff --git a/extensions/WikiEditor/extension.json b/extensions/WikiEditor/extension.json
new file mode 100644
index 00000000..d8889517
--- /dev/null
+++ b/extensions/WikiEditor/extension.json
@@ -0,0 +1,420 @@
+{
+ "name": "WikiEditor",
+ "version": "0.4.0",
+ "author": [
+ "Trevor Parscal",
+ "Roan Kattouw",
+ "Nimish Gautam",
+ "Adam Miller"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:WikiEditor",
+ "descriptionmsg": "wikieditor-desc",
+ "type": "other",
+ "callback": "WikiEditorHooks::onRegistration",
+ "MessagesDirs": {
+ "WikiEditor": [
+ "i18n"
+ ]
+ },
+ "Hooks": {
+ "EditPage::showEditForm:initial": [
+ "WikiEditorHooks::editPageShowEditFormInitial"
+ ],
+ "GetPreferences": [
+ "WikiEditorHooks::getPreferences"
+ ],
+ "ResourceLoaderGetConfigVars": [
+ "WikiEditorHooks::resourceLoaderGetConfigVars"
+ ],
+ "ResourceLoaderTestModules": [
+ "WikiEditorHooks::resourceLoaderTestModules"
+ ],
+ "MakeGlobalVariablesScript": [
+ "WikiEditorHooks::makeGlobalVariablesScript"
+ ],
+ "EditPageBeforeEditToolbar": [
+ "WikiEditorHooks::EditPageBeforeEditToolbar"
+ ],
+ "EditPage::showEditForm:fields": [
+ "WikiEditorHooks::editPageShowEditFormFields"
+ ],
+ "BeforePageDisplay": [
+ "WikiEditorHooks::onBeforePageDisplay"
+ ],
+ "EditPage::attemptSave": [
+ "WikiEditorHooks::editPageAttemptSave"
+ ],
+ "EditPage::attemptSave:after": [
+ "WikiEditorHooks::editPageAttemptSaveAfter"
+ ]
+ },
+ "ResourceModules": {
+ "jquery.wikiEditor": {
+ "group": "ext.wikiEditor",
+ "scripts": "jquery.wikiEditor.js",
+ "styles": "jquery.wikiEditor.less",
+ "dependencies": [
+ "jquery.client",
+ "jquery.textSelection"
+ ],
+ "messages": [
+ "wikieditor-wikitext-tab",
+ "wikieditor-loading"
+ ]
+ },
+ "jquery.wikiEditor.dialogs": {
+ "group": "ext.wikiEditor",
+ "scripts": "jquery.wikiEditor.dialogs.js",
+ "styles": "jquery.wikiEditor.dialogs.less",
+ "dependencies": [
+ "jquery.wikiEditor",
+ "jquery.wikiEditor.toolbar",
+ "jquery.ui.dialog",
+ "jquery.ui.button",
+ "jquery.ui.draggable",
+ "jquery.ui.resizable",
+ "jquery.tabIndex"
+ ]
+ },
+ "jquery.wikiEditor.dialogs.config": {
+ "group": "ext.wikiEditor",
+ "scripts": "jquery.wikiEditor.dialogs.config.js",
+ "styles": "jquery.wikiEditor.dialogs.config.less",
+ "dependencies": [
+ "jquery.mwExtension",
+ "jquery.wikiEditor",
+ "jquery.wikiEditor.dialogs",
+ "jquery.wikiEditor.toolbar.i18n",
+ "jquery.suggestions",
+ "mediawiki.api",
+ "mediawiki.Title",
+ "mediawiki.jqueryMsg"
+ ],
+ "messages": [
+ "wikieditor-toolbar-tool-file-title",
+ "wikieditor-toolbar-file-target",
+ "wikieditor-toolbar-file-caption",
+ "wikieditor-toolbar-file-size",
+ "wikieditor-toolbar-file-float",
+ "wikieditor-toolbar-file-default",
+ "wikieditor-toolbar-file-format-none",
+ "wikieditor-toolbar-file-format",
+ "wikieditor-toolbar-tool-file-insert",
+ "wikieditor-toolbar-tool-file-cancel"
+ ]
+ },
+ "jquery.wikiEditor.preview": {
+ "group": "ext.wikiEditor",
+ "scripts": "jquery.wikiEditor.preview.js",
+ "styles": "jquery.wikiEditor.preview.less",
+ "dependencies": [
+ "jquery.wikiEditor",
+ "mediawiki.api"
+ ]
+ },
+ "jquery.wikiEditor.publish": {
+ "group": "ext.wikiEditor",
+ "scripts": "jquery.wikiEditor.publish.js",
+ "dependencies": [
+ "jquery.wikiEditor",
+ "jquery.wikiEditor.dialogs"
+ ]
+ },
+ "jquery.wikiEditor.toolbar": {
+ "group": "ext.wikiEditor",
+ "scripts": "jquery.wikiEditor.toolbar.js",
+ "styles": "jquery.wikiEditor.toolbar.less",
+ "dependencies": [
+ "jquery.wikiEditor",
+ "jquery.wikiEditor.toolbar.i18n",
+ "jquery.cookie",
+ "jquery.async"
+ ]
+ },
+ "jquery.wikiEditor.toolbar.config": {
+ "group": "ext.wikiEditor",
+ "scripts": "jquery.wikiEditor.toolbar.config.js",
+ "dependencies": [
+ "jquery.wikiEditor",
+ "jquery.wikiEditor.toolbar.i18n",
+ "jquery.wikiEditor.toolbar",
+ "mediawiki.language.specialCharacters"
+ ]
+ },
+ "jquery.wikiEditor.toolbar.i18n": {
+ "group": "ext.wikiEditor",
+ "messages": [
+ "wikieditor-toolbar-loading",
+ "wikieditor-toolbar-tool-bold",
+ "wikieditor-toolbar-tool-bold-example",
+ "wikieditor-toolbar-tool-italic",
+ "wikieditor-toolbar-tool-italic-example",
+ "wikieditor-toolbar-tool-ilink",
+ "wikieditor-toolbar-tool-ilink-example",
+ "wikieditor-toolbar-tool-xlink",
+ "wikieditor-toolbar-tool-xlink-example",
+ "wikieditor-toolbar-tool-link",
+ "wikieditor-toolbar-tool-link-title",
+ "wikieditor-toolbar-tool-link-int",
+ "wikieditor-toolbar-tool-link-int-target",
+ "wikieditor-toolbar-tool-link-int-target-tooltip",
+ "wikieditor-toolbar-tool-link-int-text",
+ "wikieditor-toolbar-tool-link-int-text-tooltip",
+ "wikieditor-toolbar-tool-link-ext",
+ "wikieditor-toolbar-tool-link-ext-target",
+ "wikieditor-toolbar-tool-link-ext-text",
+ "wikieditor-toolbar-tool-link-insert",
+ "wikieditor-toolbar-tool-link-cancel",
+ "wikieditor-toolbar-tool-link-int-target-status-exists",
+ "wikieditor-toolbar-tool-link-int-target-status-notexists",
+ "wikieditor-toolbar-tool-link-int-target-status-invalid",
+ "wikieditor-toolbar-tool-link-int-target-status-external",
+ "wikieditor-toolbar-tool-link-int-target-status-loading",
+ "wikieditor-toolbar-tool-link-int-target-status-disambig",
+ "wikieditor-toolbar-tool-link-int-invalid",
+ "wikieditor-toolbar-tool-link-lookslikeinternal",
+ "wikieditor-toolbar-tool-link-lookslikeinternal-int",
+ "wikieditor-toolbar-tool-link-lookslikeinternal-ext",
+ "wikieditor-toolbar-tool-link-empty",
+ "wikieditor-toolbar-tool-file",
+ "wikieditor-toolbar-tool-file-example",
+ "wikieditor-toolbar-tool-file-pre",
+ "wikieditor-toolbar-tool-reference",
+ "wikieditor-toolbar-tool-reference-title",
+ "wikieditor-toolbar-tool-reference-cancel",
+ "wikieditor-toolbar-tool-reference-text",
+ "wikieditor-toolbar-tool-reference-insert",
+ "wikieditor-toolbar-tool-reference-example",
+ "wikieditor-toolbar-tool-signature",
+ "wikieditor-toolbar-section-advanced",
+ "wikieditor-toolbar-tool-heading",
+ "wikieditor-toolbar-tool-heading-1",
+ "wikieditor-toolbar-tool-heading-2",
+ "wikieditor-toolbar-tool-heading-3",
+ "wikieditor-toolbar-tool-heading-4",
+ "wikieditor-toolbar-tool-heading-5",
+ "wikieditor-toolbar-tool-heading-example",
+ "wikieditor-toolbar-group-format",
+ "wikieditor-toolbar-tool-ulist",
+ "wikieditor-toolbar-tool-ulist-example",
+ "wikieditor-toolbar-tool-olist",
+ "wikieditor-toolbar-tool-olist-example",
+ "wikieditor-toolbar-tool-nowiki",
+ "wikieditor-toolbar-tool-nowiki-example",
+ "wikieditor-toolbar-tool-redirect",
+ "wikieditor-toolbar-tool-redirect-example",
+ "wikieditor-toolbar-tool-big",
+ "wikieditor-toolbar-tool-big-example",
+ "wikieditor-toolbar-tool-small",
+ "wikieditor-toolbar-tool-small-example",
+ "wikieditor-toolbar-tool-superscript",
+ "wikieditor-toolbar-tool-superscript-example",
+ "wikieditor-toolbar-tool-subscript",
+ "wikieditor-toolbar-tool-subscript-example",
+ "wikieditor-toolbar-group-insert",
+ "wikieditor-toolbar-tool-gallery",
+ "wikieditor-toolbar-tool-gallery-example",
+ "wikieditor-toolbar-tool-newline",
+ "wikieditor-toolbar-tool-table",
+ "wikieditor-toolbar-tool-table-example-old",
+ "wikieditor-toolbar-tool-table-example-cell-text",
+ "wikieditor-toolbar-tool-table-example",
+ "wikieditor-toolbar-tool-table-example-header",
+ "wikieditor-toolbar-tool-table-title",
+ "wikieditor-toolbar-tool-table-dimensions-rows",
+ "wikieditor-toolbar-tool-table-dimensions-columns",
+ "wikieditor-toolbar-tool-table-dimensions-header",
+ "wikieditor-toolbar-tool-table-wikitable",
+ "wikieditor-toolbar-tool-table-sortable",
+ "wikieditor-toolbar-tool-table-insert",
+ "wikieditor-toolbar-tool-table-cancel",
+ "wikieditor-toolbar-tool-table-example-text",
+ "wikieditor-toolbar-tool-table-toomany",
+ "wikieditor-toolbar-tool-table-invalidnumber",
+ "wikieditor-toolbar-tool-table-zero",
+ "wikieditor-toolbar-tool-replace",
+ "wikieditor-toolbar-tool-replace-title",
+ "wikieditor-toolbar-tool-replace-search",
+ "wikieditor-toolbar-tool-replace-replace",
+ "wikieditor-toolbar-tool-replace-case",
+ "wikieditor-toolbar-tool-replace-regex",
+ "wikieditor-toolbar-tool-replace-button-findnext",
+ "wikieditor-toolbar-tool-replace-button-replace",
+ "wikieditor-toolbar-tool-replace-button-replaceall",
+ "wikieditor-toolbar-tool-replace-close",
+ "wikieditor-toolbar-tool-replace-nomatch",
+ "wikieditor-toolbar-tool-replace-success",
+ "wikieditor-toolbar-tool-replace-emptysearch",
+ "wikieditor-toolbar-tool-replace-invalidregex",
+ "wikieditor-toolbar-section-characters",
+ "wikieditor-toolbar-characters-page-latin",
+ "wikieditor-toolbar-characters-page-latinextended",
+ "wikieditor-toolbar-characters-page-ipa",
+ "wikieditor-toolbar-characters-page-symbols",
+ "wikieditor-toolbar-characters-page-greek",
+ "wikieditor-toolbar-characters-page-cyrillic",
+ "wikieditor-toolbar-characters-page-arabic",
+ "wikieditor-toolbar-characters-page-arabicextended",
+ "wikieditor-toolbar-characters-page-persian",
+ "wikieditor-toolbar-characters-page-hebrew",
+ "wikieditor-toolbar-characters-page-bangla",
+ "wikieditor-toolbar-characters-page-tamil",
+ "wikieditor-toolbar-characters-page-telugu",
+ "wikieditor-toolbar-characters-page-sinhala",
+ "wikieditor-toolbar-characters-page-devanagari",
+ "wikieditor-toolbar-characters-page-gujarati",
+ "wikieditor-toolbar-characters-page-thai",
+ "wikieditor-toolbar-characters-page-lao",
+ "wikieditor-toolbar-characters-page-khmer",
+ "wikieditor-toolbar-characters-endash",
+ "wikieditor-toolbar-characters-emdash",
+ "wikieditor-toolbar-characters-minus",
+ "wikieditor-toolbar-section-help",
+ "wikieditor-toolbar-help-heading-description",
+ "wikieditor-toolbar-help-heading-syntax",
+ "wikieditor-toolbar-help-heading-result",
+ "wikieditor-toolbar-help-page-format",
+ "wikieditor-toolbar-help-page-link",
+ "wikieditor-toolbar-help-page-heading",
+ "wikieditor-toolbar-help-page-list",
+ "wikieditor-toolbar-help-page-file",
+ "wikieditor-toolbar-help-page-reference",
+ "wikieditor-toolbar-help-page-discussion",
+ "wikieditor-toolbar-help-content-bold-description",
+ "wikieditor-toolbar-help-content-bold-syntax",
+ "wikieditor-toolbar-help-content-bold-result",
+ "wikieditor-toolbar-help-content-italic-description",
+ "wikieditor-toolbar-help-content-italic-syntax",
+ "wikieditor-toolbar-help-content-italic-result",
+ "wikieditor-toolbar-help-content-bolditalic-description",
+ "wikieditor-toolbar-help-content-bolditalic-syntax",
+ "wikieditor-toolbar-help-content-bolditalic-result",
+ "wikieditor-toolbar-help-content-ilink-description",
+ "wikieditor-toolbar-help-content-ilink-syntax",
+ "wikieditor-toolbar-help-content-ilink-result",
+ "wikieditor-toolbar-help-content-xlink-description",
+ "wikieditor-toolbar-help-content-xlink-syntax",
+ "wikieditor-toolbar-help-content-xlink-result",
+ "wikieditor-toolbar-help-content-heading1-description",
+ "wikieditor-toolbar-help-content-heading1-syntax",
+ "wikieditor-toolbar-help-content-heading1-result",
+ "wikieditor-toolbar-help-content-heading2-description",
+ "wikieditor-toolbar-help-content-heading2-syntax",
+ "wikieditor-toolbar-help-content-heading2-result",
+ "wikieditor-toolbar-help-content-heading3-description",
+ "wikieditor-toolbar-help-content-heading3-syntax",
+ "wikieditor-toolbar-help-content-heading3-result",
+ "wikieditor-toolbar-help-content-heading4-description",
+ "wikieditor-toolbar-help-content-heading4-syntax",
+ "wikieditor-toolbar-help-content-heading4-result",
+ "wikieditor-toolbar-help-content-heading5-description",
+ "wikieditor-toolbar-help-content-heading5-syntax",
+ "wikieditor-toolbar-help-content-heading5-result",
+ "wikieditor-toolbar-help-content-ulist-description",
+ "wikieditor-toolbar-help-content-ulist-syntax",
+ "wikieditor-toolbar-help-content-ulist-result",
+ "wikieditor-toolbar-help-content-olist-description",
+ "wikieditor-toolbar-help-content-olist-syntax",
+ "wikieditor-toolbar-help-content-olist-result",
+ "wikieditor-toolbar-help-content-file-description",
+ "wikieditor-toolbar-help-content-file-syntax",
+ "wikieditor-toolbar-help-content-file-caption",
+ "thumbnail-more",
+ "wikieditor-toolbar-help-content-reference-description",
+ "wikieditor-toolbar-help-content-reference-syntax",
+ "wikieditor-toolbar-help-content-reference-result",
+ "wikieditor-toolbar-help-content-rereference-description",
+ "wikieditor-toolbar-help-content-rereference-syntax",
+ "wikieditor-toolbar-help-content-rereference-result",
+ "wikieditor-toolbar-help-content-showreferences-description",
+ "wikieditor-toolbar-help-content-showreferences-syntax",
+ "wikieditor-toolbar-help-content-showreferences-result",
+ "wikieditor-toolbar-help-content-signaturetimestamp-description",
+ "wikieditor-toolbar-help-content-signaturetimestamp-syntax",
+ "wikieditor-toolbar-help-content-signaturetimestamp-result",
+ "wikieditor-toolbar-help-content-signature-description",
+ "wikieditor-toolbar-help-content-signature-syntax",
+ "wikieditor-toolbar-help-content-signature-result",
+ "wikieditor-toolbar-help-content-indent-description",
+ "wikieditor-toolbar-help-content-indent-syntax",
+ "wikieditor-toolbar-help-content-indent-result"
+ ]
+ },
+ "ext.wikiEditor": {
+ "group": "ext.wikiEditor",
+ "scripts": "ext.wikiEditor.js",
+ "styles": "ext.wikiEditor.less",
+ "dependencies": [
+ "jquery.wikiEditor"
+ ]
+ },
+ "ext.wikiEditor.dialogs": {
+ "group": "ext.wikiEditor",
+ "scripts": "ext.wikiEditor.dialogs.js",
+ "dependencies": [
+ "ext.wikiEditor",
+ "ext.wikiEditor.toolbar",
+ "jquery.wikiEditor.dialogs",
+ "jquery.wikiEditor.dialogs.config"
+ ]
+ },
+ "ext.wikiEditor.preview": {
+ "group": "ext.wikiEditor",
+ "scripts": "ext.wikiEditor.preview.js",
+ "dependencies": [
+ "ext.wikiEditor",
+ "jquery.wikiEditor.preview"
+ ],
+ "messages": [
+ "wikieditor-preview-tab",
+ "wikieditor-preview-changes-tab",
+ "wikieditor-preview-loading"
+ ]
+ },
+ "ext.wikiEditor.publish": {
+ "group": "ext.wikiEditor",
+ "scripts": "ext.wikiEditor.publish.js",
+ "dependencies": [
+ "ext.wikiEditor",
+ "jquery.wikiEditor.publish"
+ ],
+ "messages": [
+ "wikieditor-publish-button-publish",
+ "wikieditor-publish-button-cancel",
+ "wikieditor-publish-dialog-title",
+ "wikieditor-publish-dialog-summary",
+ "wikieditor-publish-dialog-minor",
+ "wikieditor-publish-dialog-watch",
+ "wikieditor-publish-dialog-publish",
+ "wikieditor-publish-dialog-goback"
+ ]
+ },
+ "ext.wikiEditor.toolbar": {
+ "group": "ext.wikiEditor",
+ "scripts": "ext.wikiEditor.toolbar.js",
+ "dependencies": [
+ "ext.wikiEditor",
+ "jquery.wikiEditor.toolbar",
+ "jquery.wikiEditor.toolbar.config"
+ ]
+ },
+ "ext.wikiEditor.toolbar.styles": {
+ "group": "ext.wikiEditor",
+ "styles": "ext.wikiEditor.toolbar.styles.less"
+ },
+ "ext.wikiEditor.toolbar.hideSig": {
+ "group": "ext.wikiEditor",
+ "scripts": "ext.wikiEditor.toolbar.hideSig.js"
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "modules",
+ "remoteExtPath": "WikiEditor/modules"
+ },
+ "config": {
+ "@doc": "WikiEditorFeatures is set in WikiEditor.hooks.php"
+ },
+ "AutoloadClasses": {
+ "WikiEditorHooks": "WikiEditor.hooks.php"
+ }
+}
diff --git a/extensions/WikiEditor/i18n/af.json b/extensions/WikiEditor/i18n/af.json
index e6ed73da..75f30652 100644
--- a/extensions/WikiEditor/i18n/af.json
+++ b/extensions/WikiEditor/i18n/af.json
@@ -4,7 +4,8 @@
"Adriaan",
"Anrie",
"Naudefj",
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "Macofe"
]
},
"wikieditor": "Uitgebreide teksverwerker vir wikiteks",
@@ -15,9 +16,6 @@
"wikieditor-preview-tab": "Voorskou",
"wikieditor-preview-changes-tab": "Wysigings",
"wikieditor-preview-loading": "Besig om te laai...",
- "wikieditor-previewDialog-preference": "Aktiveer voorskou-dialoog",
- "wikieditor-previewDialog-tab": "Voorskou",
- "wikieditor-previewDialog-loading": "Besig om te laai...",
"wikieditor-publish-preference": "Aktiveer stap-vir-stap publisering",
"wikieditor-publish-button-publish": "Publiseer",
"wikieditor-publish-button-cancel": "Kanselleer",
@@ -143,25 +141,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "U het niks ingesleutel om na te soek nie.",
"wikieditor-toolbar-tool-replace-invalidregex": "Die \"regular expression\" wat u verskaf het is ongeldig: $1",
"wikieditor-toolbar-section-characters": "Spesiale karakters",
- "wikieditor-toolbar-characters-page-latin": "Latyns",
- "wikieditor-toolbar-characters-page-latinextended": "Latyns uitgebreid",
- "wikieditor-toolbar-characters-page-ipa": "IFA",
- "wikieditor-toolbar-characters-page-symbols": "Simbole",
- "wikieditor-toolbar-characters-page-greek": "Grieks",
- "wikieditor-toolbar-characters-page-cyrillic": "Cyrillies",
- "wikieditor-toolbar-characters-page-arabic": "Arabies",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabies uitgebrei",
- "wikieditor-toolbar-characters-page-persian": "Persiese",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreeus",
- "wikieditor-toolbar-characters-page-bangla": "Bengaals",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Hulp",
"wikieditor-toolbar-help-heading-description": "Beskrywing",
"wikieditor-toolbar-help-heading-syntax": "Wat u tik",
@@ -207,8 +186,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Lyn in genommerde lys<br /># Lyn in genommerde lys",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Lyn in genommerde lys</li><li>Lyn in genommerde lys</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ingebedde lêer",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Voorbeeld.png|thumb|Byskrif]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Byskrif' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergroot' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Byskrif</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Voorbeeld.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Verwysing",
"wikieditor-toolbar-help-content-reference-syntax": "Bladsyteks.&lt;ref name=\"test\"&gt;[http://www.voorbeeld.org Skakel se teks], addisionele teks.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Bladsyteks <sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/aln.json b/extensions/WikiEditor/i18n/aln.json
index 0ac5d2ef..87e9f399 100644
--- a/extensions/WikiEditor/i18n/aln.json
+++ b/extensions/WikiEditor/i18n/aln.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Mdupont"
+ "Mdupont",
+ "Macofe"
]
},
"wikieditor": "redaktimi i avancuar wikitext interface",
@@ -12,8 +13,6 @@
"wikieditor-preview-tab": "Preview",
"wikieditor-preview-changes-tab": "Ndryshimet",
"wikieditor-preview-loading": "Loading ...",
- "wikieditor-previewDialog-tab": "Preview",
- "wikieditor-previewDialog-loading": "Loading ...",
"wikieditor-publish-preference": "Aktivizo-hap pas hapi botuese",
"wikieditor-publish-button-publish": "Publikoj",
"wikieditor-publish-button-cancel": "Anuloj",
@@ -127,18 +126,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Ju nuk shkruani ndonjë gjë për të kërkuar për.",
"wikieditor-toolbar-tool-replace-invalidregex": "Shprehje e rregullt keni hyrë është i pavlefshëm: $1",
"wikieditor-toolbar-section-characters": "karaktere të veçanta",
- "wikieditor-toolbar-characters-page-latin": "Latinisht",
- "wikieditor-toolbar-characters-page-latinextended": "Latine zgjeruar",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simbolet",
- "wikieditor-toolbar-characters-page-greek": "Grek",
- "wikieditor-toolbar-characters-page-cyrillic": "I sllavishtes së vjetër",
- "wikieditor-toolbar-characters-page-arabic": "Arabisht",
- "wikieditor-toolbar-characters-page-hebrew": "Hebraisht",
- "wikieditor-toolbar-characters-page-bangla": "Shqip",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Guxharati",
"wikieditor-toolbar-section-help": "Ndihmë",
"wikieditor-toolbar-help-heading-description": "Përshkrim",
"wikieditor-toolbar-help-heading-syntax": "Çfarë ju lloji",
@@ -184,8 +171,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "pika # Lista <br /> pika # Lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li> pika Lista </li><li> pika Lista </li></ol>",
"wikieditor-toolbar-help-content-file-description": "Embedded file",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Caption teksti]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'> <a title=\"tekstit Legjenda\" class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a> <div class='thumbcaption'><div class='magnify'> <a title=\"Zmadho\" class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a> </div> tekstit Legjenda </div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referim",
"wikieditor-toolbar-help-content-reference-syntax": "Tekst faqesh. name=\"test\"> <ref [http://www.example.org] teksti Link, teksti shtesë. </> ref",
"wikieditor-toolbar-help-content-reference-result": "Tekst faqesh. <a href='#'><sup>[1]</sup></a>",
diff --git a/extensions/WikiEditor/i18n/an.json b/extensions/WikiEditor/i18n/an.json
index 9bf299b7..fe431353 100644
--- a/extensions/WikiEditor/i18n/an.json
+++ b/extensions/WikiEditor/i18n/an.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Juanpabl"
+ "Juanpabl",
+ "Macofe"
]
},
"wikieditor": "Interficie abanzada d'edición de wikitexto",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Previsualizar",
"wikieditor-preview-changes-tab": "Cambios",
"wikieditor-preview-loading": "Cargando...",
- "wikieditor-previewDialog-preference": "Activar o dialogo de visualización previa",
- "wikieditor-previewDialog-tab": "Previsualización",
- "wikieditor-previewDialog-loading": "Cargando…",
"wikieditor-publish-preference": "Activar a publicación trango a trango",
"wikieditor-publish-button-publish": "Publicar",
"wikieditor-publish-button-cancel": "Cancelar",
@@ -130,23 +128,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "No ha escrito garra cosa ta mirar.",
"wikieditor-toolbar-tool-replace-invalidregex": "A expresión regular que ha escrito ye invalida: $1",
"wikieditor-toolbar-section-characters": "Carácters especials",
- "wikieditor-toolbar-characters-page-latin": "Latín",
- "wikieditor-toolbar-characters-page-latinextended": "Latín enamplau",
- "wikieditor-toolbar-characters-page-ipa": "AFI(IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Símbols",
- "wikieditor-toolbar-characters-page-greek": "Griego",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirilico",
- "wikieditor-toolbar-characters-page-arabic": "Arabico",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabigo extendiu",
- "wikieditor-toolbar-characters-page-persian": "Persa",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreu",
- "wikieditor-toolbar-characters-page-bangla": "Bengalí",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Cingalés",
- "wikieditor-toolbar-characters-page-gujarati": "Gujaratí",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Laosiano",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Aduya",
"wikieditor-toolbar-help-heading-description": "Descripción",
"wikieditor-toolbar-help-heading-syntax": "O que vusté escribe",
@@ -192,8 +173,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elemento d'a lista<br /># Elemento d'a lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elemento d'a lista</li><li>Elemento d'a lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fichero incorporato",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Eixemplo.png|thumb|Texto descriptivo d'a imachen]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Texto de piet de foto' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Fer más gran' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Texto de piet de foto</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Eixemplo.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referencia",
"wikieditor-toolbar-help-content-reference-syntax": "Texto d'a pachina.&lt;ref name=\"test\"&gt;[http://www.example.org Texto d'o vinclo], texto adicional.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Texto d'a pachina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ang.json b/extensions/WikiEditor/i18n/ang.json
index 87af5e25..10f11d99 100644
--- a/extensions/WikiEditor/i18n/ang.json
+++ b/extensions/WikiEditor/i18n/ang.json
@@ -37,7 +37,7 @@
"wikieditor-toolbar-tool-table": "Tabelle",
"wikieditor-toolbar-tool-table-dimensions-rows": "Rǣwa",
"wikieditor-toolbar-tool-table-example": "Bysen",
- "wikieditor-toolbar-tool-table-preview": "Fōrebysen",
+ "wikieditor-toolbar-tool-table-preview": "Forebysen",
"wikieditor-toolbar-characters-page-latin": "Lǣden",
"wikieditor-toolbar-characters-page-latinextended": "Ēacnod Lǣden",
"wikieditor-toolbar-characters-page-symbols": "Tācnu",
diff --git a/extensions/WikiEditor/i18n/ar.json b/extensions/WikiEditor/i18n/ar.json
index b463b1fe..b02ef89c 100644
--- a/extensions/WikiEditor/i18n/ar.json
+++ b/extensions/WikiEditor/i18n/ar.json
@@ -10,7 +10,8 @@
"Samer",
"Zack wadghiri",
"ترجمان05",
- "زكريا"
+ "زكريا",
+ "Macofe"
]
},
"wikieditor": "الواجهة المتقدمة لتعديل نص ويكي",
@@ -21,9 +22,6 @@
"wikieditor-preview-tab": "معاينة",
"wikieditor-preview-changes-tab": "تغييرات",
"wikieditor-preview-loading": "تحميل...",
- "wikieditor-previewDialog-preference": "تفعيل حوار المعاينة",
- "wikieditor-previewDialog-tab": "معاينة",
- "wikieditor-previewDialog-loading": "تحميل...",
"wikieditor-publish-preference": "تفعيل النشر خطوة بخطوة",
"wikieditor-publish-button-publish": "انشر",
"wikieditor-publish-button-cancel": "إلغاء",
@@ -150,28 +148,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "لم تكتب شيئا لتبحث عنه.",
"wikieditor-toolbar-tool-replace-invalidregex": "التعبير النمطي الذي أدخلته غير صالح: $1",
"wikieditor-toolbar-section-characters": "أحرف خاصة",
- "wikieditor-toolbar-characters-page-latin": "لاتينية",
- "wikieditor-toolbar-characters-page-latinextended": "لاتينية موسعة",
- "wikieditor-toolbar-characters-page-ipa": "صوتية دولية",
- "wikieditor-toolbar-characters-page-symbols": "رموز",
- "wikieditor-toolbar-characters-page-greek": "يونانية",
- "wikieditor-toolbar-characters-page-cyrillic": "كيريلية",
- "wikieditor-toolbar-characters-page-arabic": "عربية",
- "wikieditor-toolbar-characters-page-arabicextended": "عربية موسعة",
- "wikieditor-toolbar-characters-page-persian": "فارسية",
- "wikieditor-toolbar-characters-page-hebrew": "عبرية",
- "wikieditor-toolbar-characters-page-bangla": "بنغالية",
- "wikieditor-toolbar-characters-page-tamil": "تاميلية",
- "wikieditor-toolbar-characters-page-telugu": "تيلوجية",
- "wikieditor-toolbar-characters-page-sinhala": "سنهالية",
- "wikieditor-toolbar-characters-page-gujarati": "غجراتية",
- "wikieditor-toolbar-characters-page-devanagari": "ديوناكرية",
- "wikieditor-toolbar-characters-page-thai": "تايلندية",
- "wikieditor-toolbar-characters-page-lao": "لاوية",
- "wikieditor-toolbar-characters-page-khmer": "خميرية",
- "wikieditor-toolbar-characters-endash": "واصلة قصيرة",
- "wikieditor-toolbar-characters-emdash": "واصلة طويلة",
- "wikieditor-toolbar-characters-minus": "علامة الطرح",
"wikieditor-toolbar-section-help": "مساعدة",
"wikieditor-toolbar-help-heading-description": "وصف",
"wikieditor-toolbar-help-heading-syntax": "ما تكتبه",
@@ -217,8 +193,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# عنصر قائمة<br /># عنصر قائمة",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>عنصر قائمة</li><li>عنصر قائمة</li></ol>",
"wikieditor-toolbar-help-content-file-description": "ملف مضمن",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|تصغير|نص التعليق]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='نص التعليق' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='تكبير' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>نص التعليق</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "مرجع",
"wikieditor-toolbar-help-content-reference-syntax": "نص الصفحة.&lt;ref name=\"test\"&gt;[http://www.example.org نص الوصلة]، نص إضافي.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "نص الصفحة.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/arz.json b/extensions/WikiEditor/i18n/arz.json
index c26475c9..0a9da54f 100644
--- a/extensions/WikiEditor/i18n/arz.json
+++ b/extensions/WikiEditor/i18n/arz.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Dudi",
- "Meno25"
+ "Meno25",
+ "Macofe"
]
},
"wikieditor": "Interface متقدم بتاع تعديل wikitext",
@@ -13,8 +14,6 @@
"wikieditor-preview-tab": "پروڤه",
"wikieditor-preview-changes-tab": "تغييرات",
"wikieditor-preview-loading": "بيلوّد...",
- "wikieditor-previewDialog-tab": "پروڤه",
- "wikieditor-previewDialog-loading": "بيلوّد...",
"wikieditor-publish-preference": "شغل النشر واحده بواحده",
"wikieditor-publish-button-publish": "انشر",
"wikieditor-publish-button-cancel": "كانسل",
@@ -119,17 +118,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "انت ما حطّيتش اى حاجه علشان تدوّر عليها.",
"wikieditor-toolbar-tool-replace-invalidregex": "The regular expression you entered is invalid: $1",
"wikieditor-toolbar-section-characters": "Special characters",
- "wikieditor-toolbar-characters-page-latin": "لاتينى",
- "wikieditor-toolbar-characters-page-latinextended": "Latin extended",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-greek": "يونانى",
- "wikieditor-toolbar-characters-page-cyrillic": "كيريلى",
- "wikieditor-toolbar-characters-page-arabic": "عربى",
- "wikieditor-toolbar-characters-page-hebrew": "عبرى",
- "wikieditor-toolbar-characters-page-bangla": "بانجلاديشى",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
"wikieditor-toolbar-section-help": "مساعده",
"wikieditor-toolbar-help-heading-description": "الوصف",
"wikieditor-toolbar-help-heading-syntax": "اللى بتكتبه",
@@ -173,8 +161,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# List item<br /># List item",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>List item</li><li>List item</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Embedded file",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Caption text]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Caption text</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "مرجع",
"wikieditor-toolbar-help-content-reference-syntax": "Page text.&lt;ref name=\"test\"&gt;[http://www.example.org Link text], additional text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Page text.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/as.json b/extensions/WikiEditor/i18n/as.json
index 3cc0be10..e54b0776 100644
--- a/extensions/WikiEditor/i18n/as.json
+++ b/extensions/WikiEditor/i18n/as.json
@@ -4,7 +4,8 @@
"Bishnu Saikia",
"Chaipau",
"Gitartha.bordoloi",
- "Nilamdyuti"
+ "Nilamdyuti",
+ "Macofe"
]
},
"wikieditor": "উচ্চতৰ ৱিকিপাঠ্য সম্পাদনা ইণ্টাৰফে'চ",
@@ -15,9 +16,6 @@
"wikieditor-preview-tab": "প্রাকদর্শন",
"wikieditor-preview-changes-tab": "পৰিবৰ্তনসমূহ",
"wikieditor-preview-loading": "ল'ড হৈ আছে…",
- "wikieditor-previewDialog-preference": "প্ৰাকদৰ্শন বাৰ্তা সক্ৰিয় কৰক",
- "wikieditor-previewDialog-tab": "খচৰা",
- "wikieditor-previewDialog-loading": "ল'ড হৈ আছে…",
"wikieditor-publish-preference": "ধাপে ধাপে প্ৰকাশ কৰা সক্ৰিয় কৰক",
"wikieditor-publish-button-publish": "প্ৰকাশ কৰক",
"wikieditor-publish-button-cancel": "বাতিল কৰক",
@@ -143,28 +141,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "সন্ধান কৰিবলৈ আপুনি একো টাইপ কৰা নাই।",
"wikieditor-toolbar-tool-replace-invalidregex": "আপুনি প্ৰদান কৰা ৰেগুলাৰ এক্সপ্রেছনটো অবৈধ: $1",
"wikieditor-toolbar-section-characters": "বিশেষ চিহ্নসমূহ:",
- "wikieditor-toolbar-characters-page-latin": "লেটিন",
- "wikieditor-toolbar-characters-page-latinextended": "সম্প্ৰসাৰিত লেটিন",
- "wikieditor-toolbar-characters-page-ipa": "আইপিএ (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "চিহ্নসমূহ",
- "wikieditor-toolbar-characters-page-greek": "গ্ৰীক",
- "wikieditor-toolbar-characters-page-cyrillic": "ছিৰিলিক",
- "wikieditor-toolbar-characters-page-arabic": "আৰবীক",
- "wikieditor-toolbar-characters-page-arabicextended": "সম্প্ৰসাৰিত আৰবীক",
- "wikieditor-toolbar-characters-page-persian": "ফাৰ্ছী",
- "wikieditor-toolbar-characters-page-hebrew": "হিব্ৰু",
- "wikieditor-toolbar-characters-page-bangla": "বাংলা",
- "wikieditor-toolbar-characters-page-tamil": "তামিল",
- "wikieditor-toolbar-characters-page-telugu": "তেলেগু",
- "wikieditor-toolbar-characters-page-sinhala": "সিংহলী",
- "wikieditor-toolbar-characters-page-gujarati": "গুজৰাটী",
- "wikieditor-toolbar-characters-page-devanagari": "দেবনাগৰী",
- "wikieditor-toolbar-characters-page-thai": "থাই",
- "wikieditor-toolbar-characters-page-lao": "লাও",
- "wikieditor-toolbar-characters-page-khmer": "খেমাৰ",
- "wikieditor-toolbar-characters-endash": "en দেছ্‌",
- "wikieditor-toolbar-characters-emdash": "em দেছ‌",
- "wikieditor-toolbar-characters-minus": "বিয়োগ চিন",
"wikieditor-toolbar-section-help": "সহায়",
"wikieditor-toolbar-help-heading-description": "বিৱৰণ",
"wikieditor-toolbar-help-heading-syntax": "আপনি যি টাইপ কৰিছে",
@@ -210,8 +186,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# তালিকা আইটেম <br /># তালিকা আইটেম",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>তালিকা আইটেম</li><li>তালিকা আইটেম</li></ol>",
"wikieditor-toolbar-help-content-file-description": "এম্বেডেড ফাইল",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|শিৰোনাম পাঠ্য]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title=''শীৰ্ষ পাঠ্য'' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='ডাঙৰকৈ চাওক' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>শীৰ্ষ পাঠ্য'</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "তথ্যসংগ্ৰহ",
"wikieditor-toolbar-help-content-reference-syntax": "Page text.&lt;ref name=\"test\"&gt;[http://www.example.org Link text], additional text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "পৃষ্ঠাৰ পাঠ্য।<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ast.json b/extensions/WikiEditor/i18n/ast.json
index cf354952..f96dd1e8 100644
--- a/extensions/WikiEditor/i18n/ast.json
+++ b/extensions/WikiEditor/i18n/ast.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Xuacu"
+ "Xuacu",
+ "Macofe"
]
},
"wikieditor": "Interfaz avanzada d'edición de testu wiki",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Vista previa",
"wikieditor-preview-changes-tab": "Cambios",
"wikieditor-preview-loading": "Cargando...",
- "wikieditor-previewDialog-preference": "Activar el diálogu de vista previa",
- "wikieditor-previewDialog-tab": "Vista previa",
- "wikieditor-previewDialog-loading": "Cargando...",
"wikieditor-publish-preference": "Activar la publicación pasu a pasu",
"wikieditor-publish-button-publish": "Publicar",
"wikieditor-publish-button-cancel": "Encaboxar",
@@ -141,28 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Nun escribisti nada pa guetar.",
"wikieditor-toolbar-tool-replace-invalidregex": "La espresión regular qu'escribisti ye inválida: $1",
"wikieditor-toolbar-section-characters": "Caráuteres especiales",
- "wikieditor-toolbar-characters-page-latin": "Llatín",
- "wikieditor-toolbar-characters-page-latinextended": "Llatín estendíu",
- "wikieditor-toolbar-characters-page-ipa": "AFI",
- "wikieditor-toolbar-characters-page-symbols": "Símbolos",
- "wikieditor-toolbar-characters-page-greek": "Griegu",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirílicu",
- "wikieditor-toolbar-characters-page-arabic": "Árabe",
- "wikieditor-toolbar-characters-page-arabicextended": "Árabe estendíu",
- "wikieditor-toolbar-characters-page-persian": "Persa",
- "wikieditor-toolbar-characters-page-hebrew": "Hebréu",
- "wikieditor-toolbar-characters-page-bangla": "Bengalín",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Cingalés",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Tailandés",
- "wikieditor-toolbar-characters-page-lao": "Laosianu",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "guión curtiu",
- "wikieditor-toolbar-characters-emdash": "guión llargu",
- "wikieditor-toolbar-characters-minus": "signu menos",
"wikieditor-toolbar-section-help": "Ayuda",
"wikieditor-toolbar-help-heading-description": "Descripción",
"wikieditor-toolbar-help-heading-syntax": "Lo qu'escribes",
@@ -208,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elementu de la llista<br /># Elementu de la llista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elementu de la llista</li><li>Elementu de la llista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ficheru incrustáu",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplu.png|thumb|Testu del pie]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Testu del pie' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Ampliar' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Testu del pie</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplu.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referencia",
"wikieditor-toolbar-help-content-reference-syntax": "Testu de la páxina&lt;ref name=\"test\"&gt;[http://www.example.org Testu del enllaz], otru testu.&lt;/ref&gt;.",
"wikieditor-toolbar-help-content-reference-result": "Testu de la páxina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/az.json b/extensions/WikiEditor/i18n/az.json
index 78e8f461..2ec9ad2c 100644
--- a/extensions/WikiEditor/i18n/az.json
+++ b/extensions/WikiEditor/i18n/az.json
@@ -6,7 +6,9 @@
"Koc61",
"PPerviz",
"Vago",
- "Vugar 1981"
+ "Vugar 1981",
+ "Wertuose",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "Vikimətn",
@@ -14,8 +16,6 @@
"wikieditor-preview-tab": "Sınaq görüntüsü",
"wikieditor-preview-changes-tab": "Dəyişikliklər",
"wikieditor-preview-loading": "Yüklənir…",
- "wikieditor-previewDialog-tab": "Sınaq görüntüsü",
- "wikieditor-previewDialog-loading": "Yüklənir…",
"wikieditor-publish-button-publish": "Yeniləmə",
"wikieditor-publish-button-cancel": "Ləğv et",
"wikieditor-publish-dialog-minor": "Kiçik dəyişiklik",
@@ -83,22 +83,6 @@
"wikieditor-toolbar-tool-replace-button-replaceall": "Hamısını dəyiş",
"wikieditor-toolbar-tool-replace-close": "Bağla",
"wikieditor-toolbar-section-characters": "Xüsusi işarələr",
- "wikieditor-toolbar-characters-page-latin": "Latın",
- "wikieditor-toolbar-characters-page-latinextended": "Latın genişləndirilmiş",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simvollar",
- "wikieditor-toolbar-characters-page-greek": "Yunan",
- "wikieditor-toolbar-characters-page-cyrillic": "Kiril",
- "wikieditor-toolbar-characters-page-arabic": "Ərəb",
- "wikieditor-toolbar-characters-page-persian": "Fars",
- "wikieditor-toolbar-characters-page-hebrew": "İvrit",
- "wikieditor-toolbar-characters-page-bangla": "Benqal",
- "wikieditor-toolbar-characters-page-telugu": "Teluqu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinqal",
- "wikieditor-toolbar-characters-page-gujarati": "Qucarat",
- "wikieditor-toolbar-characters-page-thai": "Tay",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Kömək",
"wikieditor-toolbar-help-heading-description": "Təsvir",
"wikieditor-toolbar-help-heading-syntax": "Yazdığınız",
@@ -144,8 +128,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Siyahı bəndi<br /># Siyahı bəndi",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Siyahı bəndi</li><li>Siyahı bəndi</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Şəkil əlavə etmə",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Mövzu mətni]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Mövzu mətni' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Böyüt' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Mövzu mətni</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "İstinad",
"wikieditor-toolbar-help-content-reference-syntax": "Səhifənin mətni.&lt;ref name=\"test\"&gt;[http://www.example.org Keçidin mətni], əlavə mətnt.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Səhifənin mətni.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/azb.json b/extensions/WikiEditor/i18n/azb.json
index 80c39536..a87afdf0 100644
--- a/extensions/WikiEditor/i18n/azb.json
+++ b/extensions/WikiEditor/i18n/azb.json
@@ -12,8 +12,6 @@
"wikieditor-preview-tab": "سیناق گؤستریشی",
"wikieditor-preview-changes-tab": "ديَیشیکلیک‌لر",
"wikieditor-preview-loading": "یوکلنیر...",
- "wikieditor-previewDialog-tab": "سیناق گؤستریشی",
- "wikieditor-previewDialog-loading": "یوکلنیر...",
"wikieditor-publish-button-publish": "یئنیلمه",
"wikieditor-publish-button-cancel": "لغو ائت",
"wikieditor-publish-dialog-minor": "کیچیک دییشیک‌لیک",
@@ -198,8 +196,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# سیاهی بندی<br /># سیاهی بندی",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>سیاهی بندی</li><li>سیاهی بندی</li></ol>",
"wikieditor-toolbar-help-content-file-description": "یئرلشدیریلمیش فایل",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:مثال.png|thumb|موضوع متنی]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='باشلیق متنی' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='یئکتمه' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>عنوان باشلیقی</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:مثال.png|$2|موضوع متنی]]",
+ "wikieditor-toolbar-help-content-file-result": "<div style='width:102px;' class='thumbinner'><a title='باشلیق متنی' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$1/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='یئکتمه' class='internal' href='#'></a></div>عنوان باشلیقی</div></div>",
"wikieditor-toolbar-help-content-reference-description": "قایناق",
"wikieditor-toolbar-help-content-reference-syntax": "صحیفه‌نین متنی.&lt;ref name=\"test\"&gt;[http://www.example.org کئچیدین متنی]، علاوه متنت.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "صحیفه متنی.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ba.json b/extensions/WikiEditor/i18n/ba.json
index 1dcc64a6..ed3c8e70 100644
--- a/extensions/WikiEditor/i18n/ba.json
+++ b/extensions/WikiEditor/i18n/ba.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Assele",
- "Haqmar"
+ "Haqmar",
+ "Macofe"
]
},
"wikieditor": "Киңәйтелгән викитекст мөхәррирләү интерфейсы",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Ҡарап сығыу",
"wikieditor-preview-changes-tab": "Үҙгәрештәр",
"wikieditor-preview-loading": "Сығарыу...",
- "wikieditor-previewDialog-preference": "Ҡарап сығыу диалогын тоҡандырырға",
- "wikieditor-previewDialog-tab": "Ҡарап сығыу",
- "wikieditor-previewDialog-loading": "Сығарыу...",
"wikieditor-publish-preference": "Аҙымлап баҫтырыуҙы тоҡандырырға",
"wikieditor-publish-button-publish": "Баҫтырып сығарырға",
"wikieditor-publish-button-cancel": "Кире алырға",
@@ -141,28 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Һеҙ нимә эҙләгәнегеҙҙе күрһәтмәгәнһегеҙ.",
"wikieditor-toolbar-tool-replace-invalidregex": "Һеҙ кереткән регуляр аңлатма дөрөҫ түгел: $1",
"wikieditor-toolbar-section-characters": "Махсус тамғалар",
- "wikieditor-toolbar-characters-page-latin": "Латин",
- "wikieditor-toolbar-characters-page-latinextended": "Латин (киңәйтелгән)",
- "wikieditor-toolbar-characters-page-ipa": "ХАФӘ (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Тамғалар",
- "wikieditor-toolbar-characters-page-greek": "Грек",
- "wikieditor-toolbar-characters-page-cyrillic": "Кириллик",
- "wikieditor-toolbar-characters-page-arabic": "Ғәрәп",
- "wikieditor-toolbar-characters-page-arabicextended": "Ғәрәп (киңәйтелгән)",
- "wikieditor-toolbar-characters-page-persian": "Фарсы",
- "wikieditor-toolbar-characters-page-hebrew": "Йәһүд",
- "wikieditor-toolbar-characters-page-bangla": "Бенгал",
- "wikieditor-toolbar-characters-page-tamil": "Тамиль",
- "wikieditor-toolbar-characters-page-telugu": "Телугу",
- "wikieditor-toolbar-characters-page-sinhala": "Сингал",
- "wikieditor-toolbar-characters-page-gujarati": "Гуджарати",
- "wikieditor-toolbar-characters-page-devanagari": "Деванагари",
- "wikieditor-toolbar-characters-page-thai": "Тай",
- "wikieditor-toolbar-characters-page-lao": "Лао",
- "wikieditor-toolbar-characters-page-khmer": "Кһмер",
- "wikieditor-toolbar-characters-endash": "уртаса һыҙыҡ",
- "wikieditor-toolbar-characters-emdash": "оҙон һыҙыҡ",
- "wikieditor-toolbar-characters-minus": "минус билдәһе",
"wikieditor-toolbar-section-help": "Белешмә",
"wikieditor-toolbar-help-heading-description": "Тасуирлама",
"wikieditor-toolbar-help-heading-syntax": "Һеҙ керетәһегеҙ",
@@ -208,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Исемлектең бер юлы<br /># Исемлектең бер юлы",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Исемлектең бер юлы</li><li>Исемлектең бер юлы</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Индерелгән файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Миҫал.png|thumb|Аңлатма]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Аңлатма' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Ҙурайтырға' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Аңлатма</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Миҫал.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Төшөрмә",
"wikieditor-toolbar-help-content-reference-syntax": "Биттәге текст.&lt;ref name=\"test\"&gt;[http://www.example.org Һылтанма тексты], өҫтәмә текст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Биттәге текст.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/bcc.json b/extensions/WikiEditor/i18n/bcc.json
new file mode 100644
index 00000000..75a8c376
--- /dev/null
+++ b/extensions/WikiEditor/i18n/bcc.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "wikieditor-toolbar-tool-link": "لینک",
+ "wikieditor-toolbar-tool-file-cancel": "کنسیل",
+ "wikieditor-toolbar-tool-reference-cancel": "کنسیل",
+ "wikieditor-toolbar-tool-heading-1": "مرئله ۱",
+ "wikieditor-toolbar-tool-heading-2": "مرئله ۲",
+ "wikieditor-toolbar-tool-heading-3": "مرئله ۳",
+ "wikieditor-toolbar-tool-heading-4": "مرئله ۴",
+ "wikieditor-toolbar-tool-heading-5": "مرئله ۵",
+ "wikieditor-toolbar-tool-newline": "نوکین لین",
+ "wikieditor-toolbar-tool-table": "جدول",
+ "wikieditor-toolbar-tool-table-example-old": "-\n! ئنوان ۱\n! ئنوان ۲\n! ئنوان ۳\n|-\n| ردیپ ۱، گیس ۱\n| ردیپ ۱، گیس ۲\n| ردیپ ۱، گیس ۳\n|-\n| ردیپ ۲، گیس ۱\n| ردیپ ۲، گیس ۲\n| ردیپ ۲، گیس ۳",
+ "wikieditor-toolbar-tool-table-example-cell-text": "گیسی متن",
+ "wikieditor-toolbar-tool-table-example-header": "ئنوانی متن",
+ "wikieditor-toolbar-tool-table-title": "جدول ئزاپه کورتین",
+ "wikieditor-toolbar-tool-table-dimensions-rows": "ردیپان",
+ "wikieditor-toolbar-tool-table-dimensions-columns": "ستونان",
+ "wikieditor-toolbar-tool-table-cancel": "کنسیل",
+ "wikieditor-toolbar-tool-replace-close": "بستین",
+ "wikieditor-toolbar-characters-page-latin": "لاتین",
+ "wikieditor-toolbar-characters-page-greek": "یونانی",
+ "wikieditor-toolbar-characters-page-cyrillic": "سیریلیک",
+ "wikieditor-toolbar-characters-page-arabic": "ئربی",
+ "wikieditor-toolbar-characters-page-arabicextended": "پیشرپته ئربی",
+ "wikieditor-toolbar-characters-page-persian": "پارسی",
+ "wikieditor-toolbar-characters-page-hebrew": "ئبری",
+ "wikieditor-toolbar-characters-page-bangla": "بنگالی",
+ "wikieditor-toolbar-characters-page-tamil": "تامیلی",
+ "wikieditor-toolbar-characters-page-telugu": "تالوگو",
+ "wikieditor-toolbar-characters-page-sinhala": "سینهالی",
+ "wikieditor-toolbar-characters-page-gujarati": "گجراتی",
+ "wikieditor-toolbar-characters-page-devanagari": "دیواناگرى",
+ "wikieditor-toolbar-characters-page-thai": "تایلندی",
+ "wikieditor-toolbar-characters-page-lao": "لائو",
+ "wikieditor-toolbar-characters-page-khmer": "خمر",
+ "wikieditor-toolbar-section-help": "کومک"
+}
diff --git a/extensions/WikiEditor/i18n/be-tarask.json b/extensions/WikiEditor/i18n/be-tarask.json
index a7e00869..d95bc694 100644
--- a/extensions/WikiEditor/i18n/be-tarask.json
+++ b/extensions/WikiEditor/i18n/be-tarask.json
@@ -5,7 +5,8 @@
"Jim-by",
"Renessaince",
"Wizardist",
- "Zedlik"
+ "Zedlik",
+ "Macofe"
]
},
"wikieditor": "Пашыраны інтэрфэйс рэдагаваньня вікі-тэксту",
@@ -16,9 +17,6 @@
"wikieditor-preview-tab": "Папярэдні прагляд",
"wikieditor-preview-changes-tab": "Зьмены",
"wikieditor-preview-loading": "Загрузка…",
- "wikieditor-previewDialog-preference": "Уключыць дыялёг папярэдняга прагляду",
- "wikieditor-previewDialog-tab": "Папярэдні прагляд",
- "wikieditor-previewDialog-loading": "Загрузка…",
"wikieditor-publish-preference": "Уключыць пакрокавую публікацыю",
"wikieditor-publish-button-publish": "Апублікаваць",
"wikieditor-publish-button-cancel": "Скасаваць",
@@ -145,28 +143,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Вы не ўвялі нічога для пошуку.",
"wikieditor-toolbar-tool-replace-invalidregex": "Уведзены Вамі рэгулярны выраз зьяўляецца няслушным: $1",
"wikieditor-toolbar-section-characters": "Спэцыяльныя сымбалі",
- "wikieditor-toolbar-characters-page-latin": "Лацінскія",
- "wikieditor-toolbar-characters-page-latinextended": "Лацінскія дадатковыя",
- "wikieditor-toolbar-characters-page-ipa": "МФА (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Сымбалі",
- "wikieditor-toolbar-characters-page-greek": "Грэцкія",
- "wikieditor-toolbar-characters-page-cyrillic": "Кірылічныя",
- "wikieditor-toolbar-characters-page-arabic": "Арабскія",
- "wikieditor-toolbar-characters-page-arabicextended": "Арабскія пашыраныя",
- "wikieditor-toolbar-characters-page-persian": "Пэрсыдзкія",
- "wikieditor-toolbar-characters-page-hebrew": "Іўрыт",
- "wikieditor-toolbar-characters-page-bangla": "Бэнгальскія",
- "wikieditor-toolbar-characters-page-tamil": "Тамільскія",
- "wikieditor-toolbar-characters-page-telugu": "Тэлугу",
- "wikieditor-toolbar-characters-page-sinhala": "Сынгальскія",
- "wikieditor-toolbar-characters-page-gujarati": "Гуджараці",
- "wikieditor-toolbar-characters-page-devanagari": "Дэванагары",
- "wikieditor-toolbar-characters-page-thai": "Тайскія",
- "wikieditor-toolbar-characters-page-lao": "Лаоскія",
- "wikieditor-toolbar-characters-page-khmer": "Кхмэрскія",
- "wikieditor-toolbar-characters-endash": "кароткі працяжнік",
- "wikieditor-toolbar-characters-emdash": "доўгі працяжнік",
- "wikieditor-toolbar-characters-minus": "мінус",
"wikieditor-toolbar-section-help": "Дапамога",
"wikieditor-toolbar-help-heading-description": "Апісаньне",
"wikieditor-toolbar-help-heading-syntax": "Што Вы ўводзіце",
@@ -212,8 +188,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Элемэнт сьпісу<br /># Элемэнт сьпісу",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Элемэнт сьпісу</li><li>Элемэнт сьпісу</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Укладзены файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Прыклад.png|thumb|Тэкст подпісу]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Тэкст подпісу' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Тэкст подпісу</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Прыклад.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Зноска",
"wikieditor-toolbar-help-content-reference-syntax": "Тэкст старонкі.&lt;ref name=\"test\"&gt;[http://www.example.org Тэкст спасылкі], дадатковы тэкст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Тэкст старонкі.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/be.json b/extensions/WikiEditor/i18n/be.json
index 2d62bb6c..35a4a4bb 100644
--- a/extensions/WikiEditor/i18n/be.json
+++ b/extensions/WikiEditor/i18n/be.json
@@ -3,7 +3,8 @@
"authors": [
"Maksim L.",
"Yury Tarasievich",
- "Mikalai Udodau"
+ "Mikalai Udodau",
+ "Macofe"
]
},
"wikieditor": "Палепшаны інтэрфейс праўкі вікітэкста",
@@ -14,7 +15,6 @@
"wikieditor-preview-tab": "Перадпаказ",
"wikieditor-preview-changes-tab": "Змены",
"wikieditor-preview-loading": "Загрузка...",
- "wikieditor-previewDialog-tab": "Перадпаказ",
"wikieditor-publish-preference": "Уключыць пакрокавую публікацыю",
"wikieditor-publish-button-publish": "Апублікаваць",
"wikieditor-publish-button-cancel": "Закрыць",
@@ -139,28 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Вы не далі чаго шукаць.",
"wikieditor-toolbar-tool-replace-invalidregex": "Вы далі няверны рэгулярны выраз: $1",
"wikieditor-toolbar-section-characters": "Спецыяльныя сімвалы",
- "wikieditor-toolbar-characters-page-latin": "Лацінскія",
- "wikieditor-toolbar-characters-page-latinextended": "Лацінскія дадатковыя",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Сімвалы",
- "wikieditor-toolbar-characters-page-greek": "Грэчаскія",
- "wikieditor-toolbar-characters-page-cyrillic": "Кірылічныя",
- "wikieditor-toolbar-characters-page-arabic": "Арабскія",
- "wikieditor-toolbar-characters-page-arabicextended": "Арабскія дадатковыя",
- "wikieditor-toolbar-characters-page-persian": "Персідскія",
- "wikieditor-toolbar-characters-page-hebrew": "Іўрыт",
- "wikieditor-toolbar-characters-page-bangla": "Бенгальскія",
- "wikieditor-toolbar-characters-page-tamil": "Тамільскія",
- "wikieditor-toolbar-characters-page-telugu": "Целугу",
- "wikieditor-toolbar-characters-page-sinhala": "Сінгальскія",
- "wikieditor-toolbar-characters-page-gujarati": "Гуджараці",
- "wikieditor-toolbar-characters-page-devanagari": "Дэванагары",
- "wikieditor-toolbar-characters-page-thai": "Тайскія",
- "wikieditor-toolbar-characters-page-lao": "Лаоскія",
- "wikieditor-toolbar-characters-page-khmer": "Кхмерскія",
- "wikieditor-toolbar-characters-endash": "кароткі працяжнік",
- "wikieditor-toolbar-characters-emdash": "доўгі працяжнік",
- "wikieditor-toolbar-characters-minus": "мінус",
"wikieditor-toolbar-section-help": "Даведка",
"wikieditor-toolbar-help-heading-description": "Апісанне",
"wikieditor-toolbar-help-heading-syntax": "Што Вы ўпісваеце",
@@ -206,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Элемент пераліка<br /># Элемент пераліка",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Элемент пераліка</li><li>Элемент пераліка</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Файл у тэксце",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Апісанне файла]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Апісанне файла' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Апісанне файла</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Зноска",
"wikieditor-toolbar-help-content-reference-syntax": "Тэкст на старонцы.&lt;ref name=\"test\"&gt;[http://www.example.org Тэкст спасылкі], астатні тэкст зноскі.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Тэкст на старонцы.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/bg.json b/extensions/WikiEditor/i18n/bg.json
index a488df33..1c196c0a 100644
--- a/extensions/WikiEditor/i18n/bg.json
+++ b/extensions/WikiEditor/i18n/bg.json
@@ -6,7 +6,8 @@
"Spiritia",
"Stanqo",
"Turin",
- "Wizardist"
+ "Wizardist",
+ "Macofe"
]
},
"wikieditor": "Подобрен интерфейс за редактиране на уикитекст",
@@ -16,8 +17,6 @@
"wikieditor-preview-tab": "Предварителен преглед",
"wikieditor-preview-changes-tab": "Промени",
"wikieditor-preview-loading": "Зареждане...",
- "wikieditor-previewDialog-tab": "Предварителен преглед",
- "wikieditor-previewDialog-loading": "Зареждане...",
"wikieditor-publish-preference": "Включване на публикуване стъпка по стъпка",
"wikieditor-publish-button-publish": "Публикуване",
"wikieditor-publish-button-cancel": "Отказване",
@@ -143,28 +142,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Не сте въвели низ за търсене.",
"wikieditor-toolbar-tool-replace-invalidregex": "Въведеният от вас регулярен израз е невалиден: $1",
"wikieditor-toolbar-section-characters": "Специални символи",
- "wikieditor-toolbar-characters-page-latin": "Латиница",
- "wikieditor-toolbar-characters-page-latinextended": "Латиница – разширена",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Символи",
- "wikieditor-toolbar-characters-page-greek": "Гръцки",
- "wikieditor-toolbar-characters-page-cyrillic": "Кирилица",
- "wikieditor-toolbar-characters-page-arabic": "Арабски",
- "wikieditor-toolbar-characters-page-arabicextended": "Разширен арабски",
- "wikieditor-toolbar-characters-page-persian": "персийски",
- "wikieditor-toolbar-characters-page-hebrew": "Иврит",
- "wikieditor-toolbar-characters-page-bangla": "Бенгалски",
- "wikieditor-toolbar-characters-page-tamil": "Тамилски",
- "wikieditor-toolbar-characters-page-telugu": "Телугу",
- "wikieditor-toolbar-characters-page-sinhala": "Синхалски",
- "wikieditor-toolbar-characters-page-gujarati": "Гуджарати",
- "wikieditor-toolbar-characters-page-devanagari": "Деванагари",
- "wikieditor-toolbar-characters-page-thai": "тайландски",
- "wikieditor-toolbar-characters-page-lao": "Лао",
- "wikieditor-toolbar-characters-page-khmer": "кхмерски",
- "wikieditor-toolbar-characters-endash": "средно тире",
- "wikieditor-toolbar-characters-emdash": "дълго тире",
- "wikieditor-toolbar-characters-minus": "знак минус",
"wikieditor-toolbar-section-help": "Помощ",
"wikieditor-toolbar-help-heading-description": "Описание",
"wikieditor-toolbar-help-heading-syntax": "В режим на редактиране",
@@ -210,8 +187,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Елемент от списъка<br /># Елемент от списъка",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Елемент от списъка</li><li>Елемент от списъка</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Вграден файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Текст под картинката]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Текст под картинката' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Уголемяване' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Текст под картинката</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Източник",
"wikieditor-toolbar-help-content-reference-syntax": "Текст на страницата.&lt;ref name=\"test\"&gt;[http://www.example.org Текст на външната препратка], допълнителен текст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Текст на страницата.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/bjn.json b/extensions/WikiEditor/i18n/bjn.json
index 02ee6511..b10a625f 100644
--- a/extensions/WikiEditor/i18n/bjn.json
+++ b/extensions/WikiEditor/i18n/bjn.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Ezagren",
- "J Subhi"
+ "J Subhi",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "NaskahWiki",
@@ -10,7 +11,6 @@
"wikieditor-preview-tab": "Tilik",
"wikieditor-preview-changes-tab": "Parubahan",
"wikieditor-preview-loading": "Ma'unggah...",
- "wikieditor-previewDialog-tab": "Tilik",
"wikieditor-publish-button-cancel": "Walangi",
"wikieditor-publish-dialog-minor": "Babakan sapalih",
"wikieditor-publish-dialog-watch": "Itihi tungkaran ini",
@@ -109,21 +109,6 @@
"wikieditor-toolbar-tool-replace-nomatch": "Panggagaian Pian kadada ruhuinya.",
"wikieditor-toolbar-tool-replace-emptysearch": "Pian kada mambuatakan apa pun gasan di panggagaian",
"wikieditor-toolbar-section-characters": "Karakter istimiwa",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simbul",
- "wikieditor-toolbar-characters-page-greek": "Yunani",
- "wikieditor-toolbar-characters-page-cyrillic": "Sirilik",
- "wikieditor-toolbar-characters-page-arabic": "Arab",
- "wikieditor-toolbar-characters-page-persian": "Parsia",
- "wikieditor-toolbar-characters-page-hebrew": "Ibrani",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Patulung",
"wikieditor-toolbar-help-heading-description": "Katarangan",
"wikieditor-toolbar-help-heading-syntax": "Apa nang Pian katik",
@@ -169,7 +154,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Isi daptar<br /># Isi daptar",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Isi daptar</li><li>Isi daptar</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Maktub-akan barakas",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Cuntuh.png|thumb|Naskah judul gambar]]",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Cuntuh.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Rujukan",
"wikieditor-toolbar-help-content-reference-result": "Naskah tungkaran.<sup><a href='#'>[1]</a></sup>",
"wikieditor-toolbar-help-content-rereference-result": "Naskah tungkaran.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/bn.json b/extensions/WikiEditor/i18n/bn.json
index ef3db32d..2c5b4a28 100644
--- a/extensions/WikiEditor/i18n/bn.json
+++ b/extensions/WikiEditor/i18n/bn.json
@@ -5,19 +5,18 @@
"Bellayet",
"Leemon2010",
"Nasir8891",
- "Wikitanvir"
+ "Wikitanvir",
+ "Aftabuzzaman",
+ "Macofe"
]
},
"wikieditor": "উন্নত উইকিটেক্সট সম্পাদনা ইন্টারফেস",
"wikieditor-wikitext-tab": "উইকিটেক্সট",
- "wikieditor-loading": "লোডিং...",
+ "wikieditor-loading": "লোড হচ্ছে...",
"wikieditor-preview-preference": "পাশাপাশি প্রাকদর্শন সক্রিয় করো",
"wikieditor-preview-tab": "প্রাকদর্শন",
"wikieditor-preview-changes-tab": "পরিবর্তনসমূহ",
- "wikieditor-preview-loading": "লোডিং...",
- "wikieditor-previewDialog-preference": "প্রাকদর্শন ডায়লগ সক্রিয় করো",
- "wikieditor-previewDialog-tab": "প্রাকদর্শন",
- "wikieditor-previewDialog-loading": "লোডিং...",
+ "wikieditor-preview-loading": "লোড হচ্ছে...",
"wikieditor-publish-preference": "ধাপে ধাপে প্রকাশ করা সক্রিয় করো",
"wikieditor-publish-button-publish": "প্রকাশ করো",
"wikieditor-publish-button-cancel": "বাতিল",
@@ -32,7 +31,7 @@
"wikieditor-toolbar-preference": "শক্তিশালী সম্পাদনা টুলবার সক্রিয় করো",
"wikieditor-toolbar-dialogs-preference": "লিংক যোগ, ছকসহ অনুসন্ধান ও ফাংশন প্রতিস্থাপনের জন্য উইজার্ড সক্রিয় করো",
"wikieditor-toolbar-hidesig": "প্রধান নামস্থানের পাতায় স্বাক্ষর বোতাম লুকাও",
- "wikieditor-toolbar-loading": "লোডিং...",
+ "wikieditor-toolbar-loading": "লোড হচ্ছে...",
"wikieditor-toolbar-tool-bold": "গাঢ়",
"wikieditor-toolbar-tool-bold-example": "গাঢ় লেখা",
"wikieditor-toolbar-tool-italic": "ইটালিক",
@@ -48,7 +47,7 @@
"wikieditor-toolbar-tool-link-int-target-tooltip": "পাতার শিরোনাম অথবা ইউআরএল",
"wikieditor-toolbar-tool-link-int-text": "লিংক লেখা:",
"wikieditor-toolbar-tool-link-int-text-tooltip": "যে লেখা দৃশ্যমান হবে",
- "wikieditor-toolbar-tool-link-ext": "বহিঃস্থ কোনো ওয়েব পেইজে",
+ "wikieditor-toolbar-tool-link-ext": "বহিঃস্থ কোনো ওয়েব পাতায়",
"wikieditor-toolbar-tool-link-ext-target": "লিংক ইউআরএল:",
"wikieditor-toolbar-tool-link-ext-text": "সংযোগ লেখ:",
"wikieditor-toolbar-tool-link-insert": "লিংক যোগ করো",
@@ -64,7 +63,7 @@
"wikieditor-toolbar-tool-link-lookslikeinternal-int": "আন্তঃসংযোগ",
"wikieditor-toolbar-tool-link-lookslikeinternal-ext": "বহিঃসংযোগ",
"wikieditor-toolbar-tool-link-empty": "লিঙ্ক করা জন্য আপনি কোনো কিছু টাইপ করেননি।",
- "wikieditor-toolbar-tool-file": "এম্বেডেড ফাইল",
+ "wikieditor-toolbar-tool-file": "এম্বেডকৃত ফাইল",
"wikieditor-toolbar-tool-file-example": "উদাহরণ.jpg",
"wikieditor-toolbar-tool-file-title": "ফাইল সংযোজন",
"wikieditor-toolbar-file-target": "ফাইলের নাম:",
@@ -120,7 +119,7 @@
"wikieditor-toolbar-tool-table-dimensions-rows": "সারি",
"wikieditor-toolbar-tool-table-dimensions-columns": "কলাম",
"wikieditor-toolbar-tool-table-dimensions-header": "শিরোনাম সারি অন্তর্ভুক্ত করো",
- "wikieditor-toolbar-tool-table-wikitable": "সীমান্ত শৈলী",
+ "wikieditor-toolbar-tool-table-wikitable": "সীমানাসহ শৈলী",
"wikieditor-toolbar-tool-table-sortable": "ছক ক্রমায়ন করো",
"wikieditor-toolbar-tool-table-example": "উদাহরণ",
"wikieditor-toolbar-tool-table-preview": "প্রাকদর্শন",
@@ -144,28 +143,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "আপনি অনুসন্ধানের জন্য কোনো কিছু দেননি।",
"wikieditor-toolbar-tool-replace-invalidregex": "আপনার দেওয়া রেগুলার এক্সপ্রেশনটি ঠিক নয়: $1",
"wikieditor-toolbar-section-characters": "বিশেষ বর্ণসমূহ",
- "wikieditor-toolbar-characters-page-latin": "লাতিন",
- "wikieditor-toolbar-characters-page-latinextended": "সম্প্রসারিত লাতিন",
- "wikieditor-toolbar-characters-page-ipa": "আইপিএ (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "চিহ্নসমূহ",
- "wikieditor-toolbar-characters-page-greek": "গ্রিক",
- "wikieditor-toolbar-characters-page-cyrillic": "সিরিলিক",
- "wikieditor-toolbar-characters-page-arabic": "আরবীয়",
- "wikieditor-toolbar-characters-page-arabicextended": "সম্প্রসারিত আরবি",
- "wikieditor-toolbar-characters-page-persian": "ফারসি",
- "wikieditor-toolbar-characters-page-hebrew": "হিব্রু",
- "wikieditor-toolbar-characters-page-bangla": "বাংলা",
- "wikieditor-toolbar-characters-page-tamil": "তামিল",
- "wikieditor-toolbar-characters-page-telugu": "তেলেগু",
- "wikieditor-toolbar-characters-page-sinhala": "সিংহলী",
- "wikieditor-toolbar-characters-page-gujarati": "গুজরাটি",
- "wikieditor-toolbar-characters-page-devanagari": "দেবনাগরী",
- "wikieditor-toolbar-characters-page-thai": "থাই",
- "wikieditor-toolbar-characters-page-lao": "লাও",
- "wikieditor-toolbar-characters-page-khmer": "খেমার",
- "wikieditor-toolbar-characters-endash": "en ড্যাশ",
- "wikieditor-toolbar-characters-emdash": "em ড্যাশ",
- "wikieditor-toolbar-characters-minus": "বিয়োগ চিহ্ন",
"wikieditor-toolbar-section-help": "সাহায্য",
"wikieditor-toolbar-help-heading-description": "বিবরণ",
"wikieditor-toolbar-help-heading-syntax": "আপনি যা টাইপ করেছেন",
@@ -211,7 +188,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# তালিকা আইটেম <br /># তালিকা আইটেম",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>তালিকা আইটেম</li><li>তালিকা আইটেম</li></ol>",
"wikieditor-toolbar-help-content-file-description": "এম্বেডেড ফাইল",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:উদাহরণ.png|thumb|ক্যাপশন লেখা]]",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:উদাহরণ.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "ক্যাপশন লেখা",
"wikieditor-toolbar-help-content-reference-description": "তথ্যসূত্র",
"wikieditor-toolbar-help-content-reference-syntax": "পাতার লেখা।&lt;ref name=\"test\"&gt;[http://www.example.org লিংকের লেখা], অতিরিক্ত লেখা।&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "পাতার লেখা।<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/bpy.json b/extensions/WikiEditor/i18n/bpy.json
index 559cb6ab..c6cd80f4 100644
--- a/extensions/WikiEditor/i18n/bpy.json
+++ b/extensions/WikiEditor/i18n/bpy.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Usingha"
+ "Usingha",
+ "Macofe"
]
},
"wikieditor": "উচ উইকিটেক্সট পাতানির ইন্টারফেসহান",
@@ -125,22 +126,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "মিলাপ কারানির কা কিত্তাউ না ইকরলে।",
"wikieditor-toolbar-tool-replace-invalidregex": "তি দিয়াসত রেগুলার এক্সপ্রেশনহান চুম নাইসে: $1",
"wikieditor-toolbar-section-characters": "বিশেষ আখরগি",
- "wikieditor-toolbar-characters-page-latin": "লাতিন",
- "wikieditor-toolbar-characters-page-latinextended": "সালকরিসি লাতিন",
- "wikieditor-toolbar-characters-page-ipa": "আইপিএ (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "চিন্নতহানি",
- "wikieditor-toolbar-characters-page-greek": "গ্রিক",
- "wikieditor-toolbar-characters-page-cyrillic": "সিরিলিক",
- "wikieditor-toolbar-characters-page-arabic": "আরবীয়",
- "wikieditor-toolbar-characters-page-persian": "ফারসি",
- "wikieditor-toolbar-characters-page-hebrew": "হিব্রু",
- "wikieditor-toolbar-characters-page-bangla": "বাংলা",
- "wikieditor-toolbar-characters-page-telugu": "তেলেগু",
- "wikieditor-toolbar-characters-page-sinhala": "শিংহলী",
- "wikieditor-toolbar-characters-page-gujarati": "গুজরাতি",
- "wikieditor-toolbar-characters-page-thai": "থাই",
- "wikieditor-toolbar-characters-page-lao": "লাও",
- "wikieditor-toolbar-characters-page-khmer": "খেমার",
"wikieditor-toolbar-section-help": "পাংলাক",
"wikieditor-toolbar-help-heading-description": "বর্ণনা",
"wikieditor-toolbar-help-heading-syntax": "তি যেহান টাইপ করিসত",
@@ -186,8 +171,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# পারেঙর মেথেল<br /># পারেঙর মেথেল",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>পারেঙর মেথেল</li><li>পারেঙর মেথেল</li></ol>",
"wikieditor-toolbar-help-content-file-description": "এম্বেডেড ফাইলগ",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|ক্যাপশনর মেয়ক]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='ক্যাপশর মেয়েক' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='ডাঙরকর' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>ক্যাপশর মেয়েক</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "রেফারেন্সহানি",
"wikieditor-toolbar-help-content-reference-syntax": "পাতার ইকাহানি।&lt;ref name=\"test\"&gt;[http://www.example.org মিলাপর মেয়েকগি], আরতাউ মেয়েক।&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "পাতার ইকা।<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/br.json b/extensions/WikiEditor/i18n/br.json
index d2287a92..e0d84895 100644
--- a/extensions/WikiEditor/i18n/br.json
+++ b/extensions/WikiEditor/i18n/br.json
@@ -4,7 +4,8 @@
"Fohanno",
"Fulup",
"Gwendal",
- "Y-M D"
+ "Y-M D",
+ "Macofe"
]
},
"wikieditor": "Etrefas kemmañ wikitestenn klokaet",
@@ -15,9 +16,6 @@
"wikieditor-preview-tab": "Rakwelet",
"wikieditor-preview-changes-tab": "Kemmoù",
"wikieditor-preview-loading": "O kargañ...",
- "wikieditor-previewDialog-preference": "Gweredekaat prenestr kendivizout ar rakweled",
- "wikieditor-previewDialog-tab": "Rakwelet",
- "wikieditor-previewDialog-loading": "O kargañ...",
"wikieditor-publish-preference": "Gweredekaat an embann pazenn-ha-pazenn",
"wikieditor-publish-button-publish": "Embann",
"wikieditor-publish-button-cancel": "Nullañ",
@@ -143,25 +141,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "N'hoc'h eus ebarzhet netra da glask.",
"wikieditor-toolbar-tool-replace-invalidregex": "Direizh eo ar jedad reoliek hoc'h eus lakaet : $1",
"wikieditor-toolbar-section-characters": "Arouezennoù dibar",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin astennet",
- "wikieditor-toolbar-characters-page-ipa": "LFE (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Arouezennoù",
- "wikieditor-toolbar-characters-page-greek": "Gresianek",
- "wikieditor-toolbar-characters-page-cyrillic": "Kirillek",
- "wikieditor-toolbar-characters-page-arabic": "Arabeg",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabeg astennet",
- "wikieditor-toolbar-characters-page-persian": "Perseg",
- "wikieditor-toolbar-characters-page-hebrew": "Hebraek",
- "wikieditor-toolbar-characters-page-bangla": "Banglaek",
- "wikieditor-toolbar-characters-page-tamil": "Tamileg",
- "wikieditor-toolbar-characters-page-telugu": "Telougou",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Laoseg",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Skoazell",
"wikieditor-toolbar-help-heading-description": "Deskrivadur",
"wikieditor-toolbar-help-heading-syntax": "Ar pezh a skrivit",
@@ -207,8 +186,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elfenn eus ar roll<br /># Elfenn eus ar roll",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elfenn eus ar roll</li><li>Elfenn eus ar roll</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Restr enframmet",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Alc'hwez ar skeudenn]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Testenn an alc'hwez' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Brasaat' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Testenn an alc'hwez</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Daveenn",
"wikieditor-toolbar-help-content-reference-syntax": "Testenn ar bajenn.&lt;ref name=\"test\"&gt;[http://www.example.org testenn al liamm], testenn ouzhpenn.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Testenn ar bajenn.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/bs.json b/extensions/WikiEditor/i18n/bs.json
index 8e7bd292..1747785a 100644
--- a/extensions/WikiEditor/i18n/bs.json
+++ b/extensions/WikiEditor/i18n/bs.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"CERminator",
- "Palapa"
+ "Palapa",
+ "Macofe"
]
},
"wikieditor": "Napredni interfejs za uređivanje wikiteksta",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Pregled",
"wikieditor-preview-changes-tab": "Promjene",
"wikieditor-preview-loading": "Učitavam...",
- "wikieditor-previewDialog-preference": "Omogući dijalog pretpregleda",
- "wikieditor-previewDialog-tab": "Pregled",
- "wikieditor-previewDialog-loading": "Učitavam...",
"wikieditor-publish-preference": "Omogući objavljivanje u koracima",
"wikieditor-publish-button-publish": "Objavi",
"wikieditor-publish-button-cancel": "Odustani",
@@ -130,22 +128,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Niste unijeli ništa za pretragu.",
"wikieditor-toolbar-tool-replace-invalidregex": "Regularni izraz koji ste unijeli nije valjan: $1",
"wikieditor-toolbar-section-characters": "Posebni znakovi",
- "wikieditor-toolbar-characters-page-latin": "Latinica",
- "wikieditor-toolbar-characters-page-latinextended": "Prošireni latinski",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simboli",
- "wikieditor-toolbar-characters-page-greek": "Grčki",
- "wikieditor-toolbar-characters-page-cyrillic": "Ćirilica",
- "wikieditor-toolbar-characters-page-arabic": "Arapski",
- "wikieditor-toolbar-characters-page-persian": "Perzijski",
- "wikieditor-toolbar-characters-page-hebrew": "Hebrejski",
- "wikieditor-toolbar-characters-page-bangla": "Bangladeški",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-thai": "Tajlandski",
- "wikieditor-toolbar-characters-page-lao": "Laoški",
- "wikieditor-toolbar-characters-page-khmer": "Kmerski",
"wikieditor-toolbar-section-help": "Pomoć",
"wikieditor-toolbar-help-heading-description": "Opis",
"wikieditor-toolbar-help-heading-syntax": "Šta upisujete",
@@ -191,8 +173,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Stavka spiska<br /># Stavka spiska",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Stavka spiska</li><li>Stavka spiska</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Uklopljena datoteka",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Opis slike]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Opis slike' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Uvećajte' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Opis slike</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Reference",
"wikieditor-toolbar-help-content-reference-syntax": "Tekst stranice.&lt;ref name=\"test\"&gt;[http://www.example.org Tekst linka], dodatni tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tekst stranice.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ca.json b/extensions/WikiEditor/i18n/ca.json
index 455a5ada..b30f9d74 100644
--- a/extensions/WikiEditor/i18n/ca.json
+++ b/extensions/WikiEditor/i18n/ca.json
@@ -8,7 +8,9 @@
"SMP",
"Solde",
"Toniher",
- "Vriullop"
+ "Vriullop",
+ "Nemo bis",
+ "Macofe"
]
},
"wikieditor": "Interfície avançada de modificació de wikitext",
@@ -19,9 +21,6 @@
"wikieditor-preview-tab": "Previsualització",
"wikieditor-preview-changes-tab": "Canvis",
"wikieditor-preview-loading": "Carregant ...",
- "wikieditor-previewDialog-preference": "Activa el diàleg de vista prèvia",
- "wikieditor-previewDialog-tab": "Previsualització",
- "wikieditor-previewDialog-loading": "Carregant ...",
"wikieditor-publish-preference": "Habilita la publicació pas a pas",
"wikieditor-publish-button-publish": "Publica",
"wikieditor-publish-button-cancel": "Anuŀla",
@@ -147,28 +146,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "No heu introduït res per a cercar.",
"wikieditor-toolbar-tool-replace-invalidregex": "L'expressió regular que heu introduït no és vàlida: $1",
"wikieditor-toolbar-section-characters": "Caràcters especials",
- "wikieditor-toolbar-characters-page-latin": "Llatí",
- "wikieditor-toolbar-characters-page-latinextended": "Llatí ampliat",
- "wikieditor-toolbar-characters-page-ipa": "AFI",
- "wikieditor-toolbar-characters-page-symbols": "Símbols",
- "wikieditor-toolbar-characters-page-greek": "Grec",
- "wikieditor-toolbar-characters-page-cyrillic": "Ciríŀlic",
- "wikieditor-toolbar-characters-page-arabic": "Aràbic",
- "wikieditor-toolbar-characters-page-arabicextended": "Aràbic estès",
- "wikieditor-toolbar-characters-page-persian": "Persa",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreu",
- "wikieditor-toolbar-characters-page-bangla": "Bengalí",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Tailandès",
- "wikieditor-toolbar-characters-page-lao": "Laosià",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "guió curt",
- "wikieditor-toolbar-characters-emdash": "guió llarg",
- "wikieditor-toolbar-characters-minus": "signe menys",
"wikieditor-toolbar-section-help": "Ajuda",
"wikieditor-toolbar-help-heading-description": "Descripció",
"wikieditor-toolbar-help-heading-syntax": "El que teclegeu",
@@ -214,8 +191,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Element de la llista<br /># Element de la llista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Element de la llista</li><li>Element de la llista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fitxer incrustat",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Text descriptiu de la imatge]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Llegenda</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referències",
"wikieditor-toolbar-help-content-reference-syntax": "Text de la pàgina.&lt;ref name=\"test\"&gt;[http://www.exemple.cat Nom de l'enllaç], text addicional.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Text de la pàgina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ce.json b/extensions/WikiEditor/i18n/ce.json
index 4499e48f..c920cf58 100644
--- a/extensions/WikiEditor/i18n/ce.json
+++ b/extensions/WikiEditor/i18n/ce.json
@@ -9,13 +9,10 @@
"wikieditor-desc": "Тадарш даран шоьйра интерфейс латайо кхин дукху фукцеш а",
"wikieditor-wikitext-tab": "Викийоза",
"wikieditor-loading": "Чуйолуш",
- "wikieditor-preview-preference": "Латайé хьалха муха ю хьажар дуьхь дуьхьал",
- "wikieditor-preview-tab": "Хьалха муха ю хьажа",
- "wikieditor-preview-changes-tab": "Хийцам",
+ "wikieditor-preview-preference": "Латайé хьалха хьажар дуьхь дуьхьал",
+ "wikieditor-preview-tab": "Хьалха хьажар",
+ "wikieditor-preview-changes-tab": "хийцамаш",
"wikieditor-preview-loading": "Чуйолуш…",
- "wikieditor-previewDialog-preference": "Латайé йоза хьалха муха ду хьажар",
- "wikieditor-previewDialog-tab": "Хьалха муха ю хьажа",
- "wikieditor-previewDialog-loading": "Чуйолуш…",
"wikieditor-publish-preference": "Латайé цхьац ког бокхуш чутохар",
"wikieditor-publish-button-publish": "Нахангайта",
"wikieditor-publish-button-cancel": "Цаоьшу",
@@ -27,20 +24,20 @@
"wikieditor-publish-dialog-goback": "Юха",
"wikieditor-toolbar": "Тадаран меттиг",
"wikieditor-toolbar-desc": "Тадаран меттиг гӀоле лелорца",
- "wikieditor-toolbar-preference": "Латайé гlоле йолу тадар",
- "wikieditor-toolbar-dialogs-preference": "Латайé йозан хьажораг йуьллург, таблицан а кхин хӀумнашна а",
+ "wikieditor-toolbar-preference": "Гайта дика кечйина панель",
+ "wikieditor-toolbar-dialogs-preference": "Латайé йозан хьажорг йуьллург, таблицан а кхин хӀумнашна а",
"wikieditor-toolbar-hidesig": "Коьрта цӀерийн аннийн агӀонашкахь къайлаяккха куьйг таӀо кнопка",
"wikieditor-toolbar-loading": "Чуйолуш…",
"wikieditor-toolbar-tool-bold": "Дерстино",
"wikieditor-toolbar-tool-bold-example": "Дерстино до йоза",
"wikieditor-toolbar-tool-italic": "Сетта",
"wikieditor-toolbar-tool-italic-example": "Сеттан до йоза",
- "wikieditor-toolbar-tool-ilink": "Чоьхьа хьажораг",
+ "wikieditor-toolbar-tool-ilink": "Чоьхьа хьажорг",
"wikieditor-toolbar-tool-ilink-example": "Хьажориган коьрта могlа",
- "wikieditor-toolbar-tool-xlink": "Арахьара хьажораг (йиц ма йе хӀотталушерг http://)",
- "wikieditor-toolbar-tool-xlink-example": "http://www.example.com хьажораг корта",
- "wikieditor-toolbar-tool-link": "Хьажораг",
- "wikieditor-toolbar-tool-link-title": "Чуйилла хьажораг",
+ "wikieditor-toolbar-tool-xlink": "Арахьара хьажорг (йиц ма йе хӀотталушерг http://)",
+ "wikieditor-toolbar-tool-xlink-example": "http://www.example.com хьажорг корта",
+ "wikieditor-toolbar-tool-link": "Хьажорг",
+ "wikieditor-toolbar-tool-link-title": "Чуйилла хьажорг",
"wikieditor-toolbar-tool-link-int": "Вики агӀоне",
"wikieditor-toolbar-tool-link-int-target": "Хьажийна агӀо я URL:",
"wikieditor-toolbar-tool-link-int-target-tooltip": "АгӀон цӀе я URL",
@@ -49,19 +46,19 @@
"wikieditor-toolbar-tool-link-ext": "Хьалхара агlон чохь",
"wikieditor-toolbar-tool-link-ext-target": "URL хьажоргаш:",
"wikieditor-toolbar-tool-link-ext-text": "Хьажораган йоза:",
- "wikieditor-toolbar-tool-link-insert": "Чуйилла хьажораг",
+ "wikieditor-toolbar-tool-link-insert": "Чуйилла хьажорг",
"wikieditor-toolbar-tool-link-cancel": "Цаоьшу",
"wikieditor-toolbar-tool-link-int-target-status-exists": "Ишта агlо йолш ю",
"wikieditor-toolbar-tool-link-int-target-status-notexists": "Ишта агlо яц",
"wikieditor-toolbar-tool-link-int-target-status-invalid": "Ца магайо цӀе",
- "wikieditor-toolbar-tool-link-int-target-status-external": "Арахьара хьажораг",
+ "wikieditor-toolbar-tool-link-int-target-status-external": "Арахьара хьажорг",
"wikieditor-toolbar-tool-link-int-target-status-loading": "Агlо ю яц хьоьжуш…",
"wikieditor-toolbar-tool-link-int-target-status-disambig": "Дуккха маьӀнаш долу агӀонаш",
"wikieditor-toolbar-tool-link-int-invalid": "Гойтуш йолу цӀе ца магайо.",
- "wikieditor-toolbar-tool-link-lookslikeinternal": "Ахьа хоттийна URL кхечу вики-агӀонан хьажорагах тера ю. Лаьий хьуна и хьажораг чоьхьарчех я?",
- "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Чоьхьа хьажораг",
- "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Арахьара хьажораг",
- "wikieditor-toolbar-tool-link-empty": "Ахьа ца гайтин мичхьа хьажойеза хьажораг.",
+ "wikieditor-toolbar-tool-link-lookslikeinternal": "Ахьа хоттийна URL кхечу вики-агӀонан хьажорагах тера ю. Лаьий хьуна и хьажорг чоьхьарчех я?",
+ "wikieditor-toolbar-tool-link-lookslikeinternal-int": "Чоьхьа хьажорг",
+ "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "Арахьара хьажорг",
+ "wikieditor-toolbar-tool-link-empty": "Ахьа ца гайтин мичхьа хьажойеза хьажорг.",
"wikieditor-toolbar-tool-file": "Чохь йолу файл",
"wikieditor-toolbar-tool-file-example": "Example.jpg",
"wikieditor-toolbar-tool-file-title": "Файл чуйиллар",
@@ -96,7 +93,7 @@
"wikieditor-toolbar-tool-olist-example": "Терахьца болу могlаман файл",
"wikieditor-toolbar-tool-nowiki": "Тергал ца бо вики-бáрамхlоттор",
"wikieditor-toolbar-tool-nowiki-example": "Чудилла кхузе йоза, бáрам хlотто ца оьшуш дерг",
- "wikieditor-toolbar-tool-redirect": "Дlасахьажор",
+ "wikieditor-toolbar-tool-redirect": "ДӀасахьажор",
"wikieditor-toolbar-tool-redirect-example": "Хьажочу агӀонан цӀе",
"wikieditor-toolbar-tool-big": "Доккха",
"wikieditor-toolbar-tool-big-example": "Доккха йоза",
@@ -121,13 +118,13 @@
"wikieditor-toolbar-tool-table-wikitable": "Кечйеш дозанашца",
"wikieditor-toolbar-tool-table-sortable": "Листалуш йе таблица",
"wikieditor-toolbar-tool-table-example": "Чоьнан йоза",
- "wikieditor-toolbar-tool-table-preview": "Хьалха муха ю хьажа",
+ "wikieditor-toolbar-tool-table-preview": "Хьалха хьажар",
"wikieditor-toolbar-tool-table-insert": "Чуйилла",
"wikieditor-toolbar-tool-table-cancel": "Цаоьшу",
"wikieditor-toolbar-tool-table-toomany": "Оцул чоьнаш я аьтту ца болу, таблицан чоьнашна бáрам $1 хоттало.",
"wikieditor-toolbar-tool-table-invalidnumber": "Ахьа нийса ца хоттийн цхьатерра могlанаш ле бlогlамаш.",
"wikieditor-toolbar-tool-table-zero": "Хьога йиллалур яц таблица йоцургца могӀанаш ле бӀогӀамаш долуш.",
- "wikieditor-toolbar-tool-replace": "Лаха хийца а хуьйцуш",
+ "wikieditor-toolbar-tool-replace": "Лахар а хийцар а",
"wikieditor-toolbar-tool-replace-title": "Лаха хийца а хуьйцуш",
"wikieditor-toolbar-tool-replace-search": "Лаха:",
"wikieditor-toolbar-tool-replace-replace": "Хийца оцуьнца:",
@@ -138,7 +135,7 @@
"wikieditor-toolbar-tool-replace-button-replaceall": "Дерриге хийца",
"wikieditor-toolbar-tool-replace-close": "ДӀачӀагӀа",
"wikieditor-toolbar-tool-replace-nomatch": "Хьан дехарца хlумма ца карийна.",
- "wikieditor-toolbar-tool-replace-success": "Балийна хийцам: $1.",
+ "wikieditor-toolbar-tool-replace-success": "$1 {{PLURAL:$1|балийна хийцам}}.",
"wikieditor-toolbar-tool-replace-emptysearch": "Ахьа ца гайтна хlу лаха деза.",
"wikieditor-toolbar-tool-replace-invalidregex": "Ахьа язйина цlе юх-юха нийса яц: $1",
"wikieditor-toolbar-section-characters": "Леррина символаш",
@@ -184,10 +181,10 @@
"wikieditor-toolbar-help-content-bolditalic-description": "Дерстино сеттан",
"wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Дерстино сеттан'''''",
"wikieditor-toolbar-help-content-bolditalic-result": "<em><strong>Дерстино курсеттан</strong></em>",
- "wikieditor-toolbar-help-content-ilink-description": "Чоьхьа хьажораг",
+ "wikieditor-toolbar-help-content-ilink-description": "Чоьхьа хьажорг",
"wikieditor-toolbar-help-content-ilink-syntax": "[[Агlонан коьрта могlа|Хьажориган йоза]]<br />[[Агlонан коьрта могlа]]",
"wikieditor-toolbar-help-content-ilink-result": "<a href='#'>Хьажориган йоза</a><br /><a href='#'>Агlонан коьрта могlа</a>",
- "wikieditor-toolbar-help-content-xlink-description": "Арахьара хьажораг",
+ "wikieditor-toolbar-help-content-xlink-description": "Арахьара хьажорг",
"wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Хьажориган йоза]<br />[http://www.example.org]<br />http://www.example.org",
"wikieditor-toolbar-help-content-xlink-result": "<a href='#' class='external'>Хьажориган йоза</a><br /><a href='#' class='external autonumber'>[1]</a><br /><a href='#' class='external'>http://www.example.org</a>",
"wikieditor-toolbar-help-content-heading2-description": "Коьрта могlа 2-гlа локхалла",
@@ -209,12 +206,12 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Могlаман файл<br /># Могlаман файл",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Могlаман файл</li><li>Могlаман файл</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Чохь йолу файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Оцуьнах лаьцна йоза]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='\nОцуьнах лаьцна йоза' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Доккха дан' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>\nОцуьнах лаьцна йоза</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Куьйгаш:",
"wikieditor-toolbar-help-content-reference-description": "Билгалдаккхар",
"wikieditor-toolbar-help-content-reference-syntax": "Агlонан йоза.&lt;ref name=\"test\"&gt;[http://www.example.org Хьажориган йоза], кхин тlе дузуш йоза.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Агlонан йоза.<sup><a href='#'>[1]</a></sup>",
- "wikieditor-toolbar-help-content-rereference-description": "Кхин тӀе лело изза хьажораг",
+ "wikieditor-toolbar-help-content-rereference-description": "Кхин тӀе лело изза хьажорг",
"wikieditor-toolbar-help-content-rereference-result": "Агlонан йоза<sup><a href='#'>[1]</a></sup>.",
"wikieditor-toolbar-help-content-showreferences-description": "Гайта билгалдаккхар",
"wikieditor-toolbar-help-content-showreferences-result": "<ol class='references'><li id='cite_note-test-0'><b><a title='' href='#'>^</a></b> <a rel='nofollow' title='http://www.example.org' class='external text' href='#'>Хьажориган йоза</a>, кхин тlе дузуш йоза.</li></ol>",
diff --git a/extensions/WikiEditor/i18n/ckb.json b/extensions/WikiEditor/i18n/ckb.json
index 77a7e9ef..127d32ca 100644
--- a/extensions/WikiEditor/i18n/ckb.json
+++ b/extensions/WikiEditor/i18n/ckb.json
@@ -7,7 +7,8 @@
"Ebraminio",
"Marmzok",
"McDutchie",
- "Muhammed taha"
+ "Muhammed taha",
+ "Macofe"
]
},
"wikieditor": "ڕووکاری پێشکەوتووی دەستکاریکردنی ویکیدەق",
@@ -17,9 +18,6 @@
"wikieditor-preview-tab": "پێشبینین",
"wikieditor-preview-changes-tab": "گۆڕانکارییەکان",
"wikieditor-preview-loading": "باركردن‌ ...",
- "wikieditor-previewDialog-preference": "ڕێگە بدە بە پەنجەرەی پێشبینین",
- "wikieditor-previewDialog-tab": "پێشبینین",
- "wikieditor-previewDialog-loading": "باركردن‌ ...",
"wikieditor-publish-preference": "ڕێگە بدە بە بڵاوکردنەوەی ھەنگاوبەھەنگاو",
"wikieditor-publish-button-publish": "بڵاوی بکەوە",
"wikieditor-publish-button-cancel": "ھەڵوەشاندنەوە",
@@ -139,22 +137,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "ھیچ شتێکت بۆ گەڕان ڕەچاو نەکردوو.",
"wikieditor-toolbar-tool-replace-invalidregex": "ئەو regular expression کە نووسیوتە گونجاو نییە: $1",
"wikieditor-toolbar-section-characters": "نووسە تایبەتەکان",
- "wikieditor-toolbar-characters-page-latin": "لاتینی",
- "wikieditor-toolbar-characters-page-latinextended": "لاتینیی پەرەپێدراو",
- "wikieditor-toolbar-characters-page-ipa": "ئای پی ئەی",
- "wikieditor-toolbar-characters-page-symbols": "ھێماکان",
- "wikieditor-toolbar-characters-page-greek": "یۆنانی",
- "wikieditor-toolbar-characters-page-cyrillic": "کیریلی",
- "wikieditor-toolbar-characters-page-arabic": "عەرەبی",
- "wikieditor-toolbar-characters-page-arabicextended": "عەرەبیی پەرەپێدراو",
- "wikieditor-toolbar-characters-page-persian": "فارسی",
- "wikieditor-toolbar-characters-page-hebrew": "عیبری",
- "wikieditor-toolbar-characters-page-bangla": "بەنگالی",
- "wikieditor-toolbar-characters-page-telugu": "تێلوگو",
- "wikieditor-toolbar-characters-page-sinhala": "سینھالا",
- "wikieditor-toolbar-characters-page-gujarati": "گوجەراتی",
- "wikieditor-toolbar-characters-page-thai": "تایلەندی",
- "wikieditor-toolbar-characters-page-khmer": "خمێری",
"wikieditor-toolbar-section-help": "یارمەتی",
"wikieditor-toolbar-help-heading-description": "وەسف",
"wikieditor-toolbar-help-heading-syntax": "ئەوی تایپی دەکەی",
@@ -200,8 +182,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# ئەندامی لیست<br /># ئەندامی لیست",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>ئەندامی لیست</li><li>ئەندامی لیست</li></ol>",
"wikieditor-toolbar-help-content-file-description": "پەڕگەی نێودەق",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|دەقی شرۆڤە]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='دەقی شرۆڤە' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='گەورەکردنەوە' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>دەقی شرۆڤە</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "سەرچاوە",
"wikieditor-toolbar-help-content-reference-syntax": "دەقی پەڕە.&lt;ref name=\"test\"&gt;[http://www.example.org دەقی بەستەر], دەقی زیادی.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "دەقی پەڕە.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/cs.json b/extensions/WikiEditor/i18n/cs.json
index cecf467f..67037f95 100644
--- a/extensions/WikiEditor/i18n/cs.json
+++ b/extensions/WikiEditor/i18n/cs.json
@@ -4,7 +4,8 @@
"Jkjk",
"Kuvaly",
"Littledogboy",
- "Mormegil"
+ "Mormegil",
+ "Macofe"
]
},
"wikieditor": "Vylepšené rozhraní pro editaci wikitextu",
@@ -15,9 +16,6 @@
"wikieditor-preview-tab": "Náhled",
"wikieditor-preview-changes-tab": "Změny",
"wikieditor-preview-loading": "Načítá se…",
- "wikieditor-previewDialog-preference": "Používat dialog pro náhled",
- "wikieditor-previewDialog-tab": "Náhled",
- "wikieditor-previewDialog-loading": "Načítá se…",
"wikieditor-publish-preference": "Zapnout průvodce publikováním",
"wikieditor-publish-button-publish": "Publikovat",
"wikieditor-publish-button-cancel": "Storno",
@@ -144,28 +142,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Musíte uvést, co se má hledat.",
"wikieditor-toolbar-tool-replace-invalidregex": "Zadaný regulární výraz je neplatný: $1",
"wikieditor-toolbar-section-characters": "Zvláštní znaky",
- "wikieditor-toolbar-characters-page-latin": "Latinka",
- "wikieditor-toolbar-characters-page-latinextended": "Rozšíření latinky",
- "wikieditor-toolbar-characters-page-ipa": "Mezinárodní fonetická abeceda (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Symboly",
- "wikieditor-toolbar-characters-page-greek": "Řecká abeceda",
- "wikieditor-toolbar-characters-page-cyrillic": "Cyrilice",
- "wikieditor-toolbar-characters-page-arabic": "Arabské písmo",
- "wikieditor-toolbar-characters-page-arabicextended": "Rozšíření arabštiny",
- "wikieditor-toolbar-characters-page-persian": "Perština",
- "wikieditor-toolbar-characters-page-hebrew": "Hebrejské písmo",
- "wikieditor-toolbar-characters-page-bangla": "Bengálské písmo",
- "wikieditor-toolbar-characters-page-tamil": "Tamilština",
- "wikieditor-toolbar-characters-page-telugu": "Telugské písmo",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhálské písmo",
- "wikieditor-toolbar-characters-page-gujarati": "Gudžarátské písmo",
- "wikieditor-toolbar-characters-page-devanagari": "Dévanágarí",
- "wikieditor-toolbar-characters-page-thai": "Thajština",
- "wikieditor-toolbar-characters-page-lao": "Laoština",
- "wikieditor-toolbar-characters-page-khmer": "Khmerština",
- "wikieditor-toolbar-characters-endash": "krátká pomlčka",
- "wikieditor-toolbar-characters-emdash": "dlouhá pomlčka",
- "wikieditor-toolbar-characters-minus": "znaménko minus",
"wikieditor-toolbar-section-help": "Nápověda",
"wikieditor-toolbar-help-heading-description": "Popis",
"wikieditor-toolbar-help-heading-syntax": "Napíšete",
@@ -211,8 +187,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Položka seznamu<br /># Položka seznamu",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Položka seznamu</li><li>Položka seznamu</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Vložení souboru",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Příklad.png|thumb|Text titulku]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Text titulku' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Zvětšit' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Text titulku</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Příklad.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Text nadpisu",
"wikieditor-toolbar-help-content-reference-description": "Reference",
"wikieditor-toolbar-help-content-reference-syntax": "Text stránky.&lt;ref name=\"test\"&gt;[http://www.example.org Text odkazu], další text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Text stránky.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/cu.json b/extensions/WikiEditor/i18n/cu.json
index 6b560904..a60860e3 100644
--- a/extensions/WikiEditor/i18n/cu.json
+++ b/extensions/WikiEditor/i18n/cu.json
@@ -22,22 +22,11 @@
"wikieditor-toolbar-tool-big": "вєликъ",
"wikieditor-toolbar-tool-small": "малъ",
"wikieditor-toolbar-tool-newline": "новъ рѧдъ",
- "wikieditor-toolbar-tool-table": "та́влїѥ",
+ "wikieditor-toolbar-tool-table": "тавлїѥ",
"wikieditor-toolbar-tool-table-dimensions-rows": "рѧдꙑ",
"wikieditor-toolbar-tool-table-example": "прикладъ",
"wikieditor-toolbar-tool-replace-close": "ꙁакрꙑи",
"wikieditor-toolbar-section-characters": "допльнитєл҄ьнꙑ сѷмволи",
- "wikieditor-toolbar-characters-page-latin": "латиньска аꙁъбоукꙑ",
- "wikieditor-toolbar-characters-page-latinextended": "латиньскꙑ аꙁъбоукьвє доложєниѥ",
- "wikieditor-toolbar-characters-page-ipa": "М҃ФА",
- "wikieditor-toolbar-characters-page-symbols": "сѷмволи",
- "wikieditor-toolbar-characters-page-greek": "грьчьска аꙁъбоукꙑ",
- "wikieditor-toolbar-characters-page-cyrillic": "климєнтовица / гражданьска аꙁъбоукꙑ",
- "wikieditor-toolbar-characters-page-arabic": "аравьска аꙁъбоукꙑ",
- "wikieditor-toolbar-characters-page-hebrew": "єврєиска аꙁъбоукꙑ",
- "wikieditor-toolbar-characters-page-bangla": "бангальска аꙁъбоукꙑ",
- "wikieditor-toolbar-characters-page-telugu": "тєлоужьска аꙁъбоукꙑ",
- "wikieditor-toolbar-characters-page-sinhala": "синхальска аꙁъбоукꙑ",
"wikieditor-toolbar-section-help": "помощь",
"wikieditor-toolbar-help-page-link": "съвѧꙁи",
"wikieditor-toolbar-help-page-file": "дѣла",
diff --git a/extensions/WikiEditor/i18n/cv.json b/extensions/WikiEditor/i18n/cv.json
new file mode 100644
index 00000000..0e76ecbc
--- /dev/null
+++ b/extensions/WikiEditor/i18n/cv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chuvash2014"
+ ]
+ },
+ "wikieditor-toolbar-section-characters": "Спецсимволсем"
+}
diff --git a/extensions/WikiEditor/i18n/cy.json b/extensions/WikiEditor/i18n/cy.json
index 13f6ab63..4af0b0fe 100644
--- a/extensions/WikiEditor/i18n/cy.json
+++ b/extensions/WikiEditor/i18n/cy.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Lloffiwr",
- "Xxglennxx"
+ "Xxglennxx",
+ "Macofe"
]
},
"wikieditor": "Rhyngwyneb golygu testun wici uwch",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Rhagolwg",
"wikieditor-preview-changes-tab": "Newidiadau",
"wikieditor-preview-loading": "Wrthi'n llwytho...",
- "wikieditor-previewDialog-preference": "Galluogi blwch deialog rhagolygon",
- "wikieditor-previewDialog-tab": "Rhagolwg",
- "wikieditor-previewDialog-loading": "Wrthi'n llwytho...",
"wikieditor-publish-preference": "Galluogi cyhoeddi cam-wrth-gam",
"wikieditor-publish-button-publish": "Cyhoeddi",
"wikieditor-publish-button-cancel": "Diddymu",
@@ -142,28 +140,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Ni osodwyd unrhywbeth yn y blwch chwilio.",
"wikieditor-toolbar-tool-replace-invalidregex": "Nid yw'r ymadrodd rheolaidd a ysgrifennwyd gennych yn ddilys: $1",
"wikieditor-toolbar-section-characters": "Nodau arbennig",
- "wikieditor-toolbar-characters-page-latin": "Lladin",
- "wikieditor-toolbar-characters-page-latinextended": "Lladin estynedig",
- "wikieditor-toolbar-characters-page-ipa": "Yr wyddor phonetig rhyngwladol (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Symbolau",
- "wikieditor-toolbar-characters-page-greek": "Groeg",
- "wikieditor-toolbar-characters-page-cyrillic": "Cyrilig",
- "wikieditor-toolbar-characters-page-arabic": "Arabeg",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabeg estynedig",
- "wikieditor-toolbar-characters-page-persian": "Perseg",
- "wikieditor-toolbar-characters-page-hebrew": "Hebraeg",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamileg",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gwjarati",
- "wikieditor-toolbar-characters-page-devanagari": "Defanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Laoseg",
- "wikieditor-toolbar-characters-page-khmer": "Chmereg",
- "wikieditor-toolbar-characters-endash": "heiffen en",
- "wikieditor-toolbar-characters-emdash": "heiffen em",
- "wikieditor-toolbar-characters-minus": "arwydd minws",
"wikieditor-toolbar-section-help": "Cymorth",
"wikieditor-toolbar-help-heading-description": "Disgrifiad",
"wikieditor-toolbar-help-heading-syntax": "Pan deipiwch hyn",
@@ -209,8 +185,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Eitem ar y rhestr<br /># Eitem ar y rhestr",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Eitem ar y rhestr</li><li>Eitem ar y rhestr</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ffeil mewnosodol",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Disgrifiad]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Egluryn' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Chwyddo' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Egluryn</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Troednodyn",
"wikieditor-toolbar-help-content-reference-syntax": "Testun y dudalen.&lt;ref name=\"test\"&gt;[http://www.enghraifft.org ysgrifen y cyswllt], ysgrifen ychwanegol.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Testun y dudalen.",
diff --git a/extensions/WikiEditor/i18n/da.json b/extensions/WikiEditor/i18n/da.json
index 6faf1805..9ce64dcc 100644
--- a/extensions/WikiEditor/i18n/da.json
+++ b/extensions/WikiEditor/i18n/da.json
@@ -7,7 +7,8 @@
"Hylle",
"Peter Alberti",
"Sarrus",
- "Sir48"
+ "Sir48",
+ "Macofe"
]
},
"wikieditor": "Avanceret interface til redigering af wikitekst",
@@ -18,9 +19,6 @@
"wikieditor-preview-tab": "Forhåndsvisning",
"wikieditor-preview-changes-tab": "Ændringer",
"wikieditor-preview-loading": "Indlæser...",
- "wikieditor-previewDialog-preference": "Aktiver forhåndsvisningsdialog",
- "wikieditor-previewDialog-tab": "Forhåndsvisning",
- "wikieditor-previewDialog-loading": "Indlæser…",
"wikieditor-publish-preference": "Aktiver skridt-for-skridt udgivelse",
"wikieditor-publish-button-publish": "Udgiv",
"wikieditor-publish-button-cancel": "Afbryd",
@@ -147,28 +145,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Du skrev ikke noget at søge efter",
"wikieditor-toolbar-tool-replace-invalidregex": "Det regulære udtryk du skrev er ugyldigt: $1",
"wikieditor-toolbar-section-characters": "Specialtegn",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Udvidet latin",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symboler",
- "wikieditor-toolbar-characters-page-greek": "Græsk",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrillisk",
- "wikieditor-toolbar-characters-page-arabic": "Arabisk",
- "wikieditor-toolbar-characters-page-arabicextended": "Udvidet arabisk",
- "wikieditor-toolbar-characters-page-persian": "Persisk",
- "wikieditor-toolbar-characters-page-hebrew": "Hebraisk",
- "wikieditor-toolbar-characters-page-bangla": "Bengali",
- "wikieditor-toolbar-characters-page-tamil": "Tamilsk",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalesisk",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Laotisk",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "tankestreg",
- "wikieditor-toolbar-characters-emdash": "lang tankestreg",
- "wikieditor-toolbar-characters-minus": "minustegn",
"wikieditor-toolbar-section-help": "Hjælp",
"wikieditor-toolbar-help-heading-description": "Beskrivelse",
"wikieditor-toolbar-help-heading-syntax": "Hvad du skriver",
@@ -214,8 +190,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Listeelement<br /># Listeelement",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Listeelement</li><li>Listeelement</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Indlejret fil",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Billedtekst]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Billedtekst' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Forstør' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Billedtekst</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Eksempel.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Fodnote",
"wikieditor-toolbar-help-content-reference-syntax": "Sidetekst.&lt;ref name=\"test\"&gt;[http://www.example.org Henvisningstekst], yderligere tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Sidetekst.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/de-ch.json b/extensions/WikiEditor/i18n/de-ch.json
index 2e3ef3c2..2ae23216 100644
--- a/extensions/WikiEditor/i18n/de-ch.json
+++ b/extensions/WikiEditor/i18n/de-ch.json
@@ -12,5 +12,5 @@
"wikieditor-toolbar-tool-newline": "Zeilenumbruch erzwingen (nicht im Fliesstext verwenden)",
"wikieditor-toolbar-tool-replace-case": "Gross- und Kleinschreibung beachten",
"wikieditor-toolbar-tool-replace-close": "Schliessen",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Beschreibung' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergrössern' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Beschreibung</div></div>"
+ "wikieditor-toolbar-help-content-file-result": "<div style='width:102px;' class='thumbinner'><a title='Beschreibung' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$1/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergrössern' class='internal' href='#'></a></div>Beschreibung</div></div>"
}
diff --git a/extensions/WikiEditor/i18n/de.json b/extensions/WikiEditor/i18n/de.json
index 1424f477..1b040a36 100644
--- a/extensions/WikiEditor/i18n/de.json
+++ b/extensions/WikiEditor/i18n/de.json
@@ -23,9 +23,6 @@
"wikieditor-preview-tab": "Vorschau",
"wikieditor-preview-changes-tab": "Änderungen",
"wikieditor-preview-loading": "Lade …",
- "wikieditor-previewDialog-preference": "Aktiviere die Abfrage zur Vorschau",
- "wikieditor-previewDialog-tab": "Vorschau",
- "wikieditor-previewDialog-loading": "Lade …",
"wikieditor-publish-preference": "Schritt-für-Schritt-Veröffentlichung ermöglichen",
"wikieditor-publish-button-publish": "Veröffentlichen",
"wikieditor-publish-button-cancel": "Abbrechen",
@@ -219,8 +216,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Listeneintrag<br /># Listeneintrag",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Listeneintrag</li><li>Listeneintrag</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Eingebettete Datei",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Beispiel.png|miniatur|Beschreibung]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Beschreibung' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergrößern' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Beschreibung</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Beispiel.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Beschreibung",
"wikieditor-toolbar-help-content-reference-description": "Einzelnachweis",
"wikieditor-toolbar-help-content-reference-syntax": "Seitentext.&lt;ref name=\"test\"&gt;[http://www.example.org Linktext], zusätzlicher Text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Seitentext.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/diq.json b/extensions/WikiEditor/i18n/diq.json
index 6b32689d..50bbe1aa 100644
--- a/extensions/WikiEditor/i18n/diq.json
+++ b/extensions/WikiEditor/i18n/diq.json
@@ -5,7 +5,8 @@
"Gorizon",
"Marmase",
"Mirzali",
- "Xoser"
+ "Xoser",
+ "Macofe"
]
},
"wikieditor": "Miyanriyê wikitekstio ke raverşiyayo",
@@ -16,9 +17,6 @@
"wikieditor-preview-tab": "Verqayt",
"wikieditor-preview-changes-tab": "Vurnayışi",
"wikieditor-preview-loading": "Bar beno...",
- "wikieditor-previewDialog-preference": "Verqaytê mesacan bıqefılne",
- "wikieditor-previewDialog-tab": "Verqayt",
- "wikieditor-previewDialog-loading": "Bar beno...",
"wikieditor-publish-preference": "Game be game çap kerdişi a bike",
"wikieditor-publish-button-publish": "Vıla ke",
"wikieditor-publish-button-cancel": "Bıtexelne",
@@ -145,28 +143,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "şıma qey cıgêrayiş taway/çiyek nênuşt",
"wikieditor-toolbar-tool-replace-invalidregex": "ifadeya normal a ke şıma kwene cı meqbul niya: $1",
"wikieditor-toolbar-section-characters": "Karakterê xısusiy",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "latinkiya hêrabiyaye",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Semboli",
- "wikieditor-toolbar-characters-page-greek": "Yunan",
- "wikieditor-toolbar-characters-page-cyrillic": "Kiril",
- "wikieditor-toolbar-characters-page-arabic": "Erebki",
- "wikieditor-toolbar-characters-page-arabicextended": "Erebkiya Heraye",
- "wikieditor-toolbar-characters-page-persian": "Fariski",
- "wikieditor-toolbar-characters-page-hebrew": "İbraniki",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhalaki",
- "wikieditor-toolbar-characters-page-gujarati": "Gujaratki",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "tira kılme",
- "wikieditor-toolbar-characters-emdash": "tira derge",
- "wikieditor-toolbar-characters-minus": "işaretê kemiye",
"wikieditor-toolbar-section-help": "Peşti",
"wikieditor-toolbar-help-heading-description": "Şınasnayış",
"wikieditor-toolbar-help-heading-syntax": "o yo ke şıma nuşt",
@@ -212,8 +188,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# unsurê listeyi<br /># unsurê listeyi",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>unsurê listeyi</li><li>unsurê listeyi</li></ol>",
"wikieditor-toolbar-help-content-file-description": "dosyaya weradaye/nımıte",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Nuşteyê resîmî]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>metnê resmi</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referans",
"wikieditor-toolbar-help-content-reference-syntax": "metnê peli.&lt;ref name=\"tesel kerdış/cerebnayiş\"&gt;[http://www.misal.org metnê gıreyi], zeylê metni.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "metnê peli.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/dsb.json b/extensions/WikiEditor/i18n/dsb.json
index a70bb85d..01f2bd90 100644
--- a/extensions/WikiEditor/i18n/dsb.json
+++ b/extensions/WikiEditor/i18n/dsb.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Michawiki"
+ "Michawiki",
+ "Macofe"
]
},
"wikieditor": "Rozšyrjony pówjerch za wobźěkowabnje wikiteksta",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Pśeglěd",
"wikieditor-preview-changes-tab": "Změny",
"wikieditor-preview-loading": "Zacytujo se...",
- "wikieditor-previewDialog-preference": "Pśeglědowy dialog zmóžniś",
- "wikieditor-previewDialog-tab": "Pśeglěd",
- "wikieditor-previewDialog-loading": "Zacytujo se...",
"wikieditor-publish-preference": "Publicěrowanje kšać pó kšacu zmóžniś",
"wikieditor-publish-button-publish": "Wózjawiś",
"wikieditor-publish-button-cancel": "Pśetergnuś",
@@ -141,28 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Njejsy žeden pytański wuraz zapódał.",
"wikieditor-toolbar-tool-replace-invalidregex": "Regularny wuraz, kótaryž sy zapódał, jo njepłaśiwy: $1",
"wikieditor-toolbar-section-characters": "Specialne znamješka",
- "wikieditor-toolbar-characters-page-latin": "Łatyńske",
- "wikieditor-toolbar-characters-page-latinextended": "Łatyńske rozšyrjone",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symbole",
- "wikieditor-toolbar-characters-page-greek": "Grichiske",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyriliske",
- "wikieditor-toolbar-characters-page-arabic": "Arabiske",
- "wikieditor-toolbar-characters-page-arabicextended": "Rozšyrjona arabšćina",
- "wikieditor-toolbar-characters-page-persian": "Persiske",
- "wikieditor-toolbar-characters-page-hebrew": "Hebrejske",
- "wikieditor-toolbar-characters-page-bangla": "Bengalšćina",
- "wikieditor-toolbar-characters-page-tamil": "Tamilšćina",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalezišćina",
- "wikieditor-toolbar-characters-page-gujarati": "Guźarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "thailandšćina",
- "wikieditor-toolbar-characters-page-lao": "Laošćina",
- "wikieditor-toolbar-characters-page-khmer": "Khmeršćina",
- "wikieditor-toolbar-characters-endash": "krotka lažaca smužka",
- "wikieditor-toolbar-characters-emdash": "dłujka lažaca smužka",
- "wikieditor-toolbar-characters-minus": "minusowe znamuško",
"wikieditor-toolbar-section-help": "Pomoc",
"wikieditor-toolbar-help-heading-description": "Wopisanje",
"wikieditor-toolbar-help-heading-syntax": "Což zapisujoš",
@@ -208,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Lisćinowy zapisk<br /># Lisćinowy zapisk",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Lisćinowy zapisk</li><li>Lisćinowy zapisk</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Zasajźona dataja",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Wobrazowe pópisanje]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Wobrazowe pópisanje' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Powětšyś' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Wobrazowe pópisanje</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referenca",
"wikieditor-toolbar-help-content-reference-syntax": "Tekst boka.&lt;ref name=\"test\"&gt;[http://www.example.org Tekst wótkaza], pśidatny tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tekst boka.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/el.json b/extensions/WikiEditor/i18n/el.json
index cedc5a00..0010026a 100644
--- a/extensions/WikiEditor/i18n/el.json
+++ b/extensions/WikiEditor/i18n/el.json
@@ -9,7 +9,8 @@
"Lou",
"ZaDiak",
"Απεργός",
- "Περίεργος"
+ "Περίεργος",
+ "Macofe"
]
},
"wikieditor": "Προχωρημένη διεπαφή επεξεργασίας κειμένου wiki",
@@ -20,9 +21,6 @@
"wikieditor-preview-tab": "Προεπισκόπηση",
"wikieditor-preview-changes-tab": "Αλλαγές",
"wikieditor-preview-loading": "Φόρτωση...",
- "wikieditor-previewDialog-preference": "Ενεργοποίηση διαλόγου προεπισκόπησης",
- "wikieditor-previewDialog-tab": "Προεπισκόπηση",
- "wikieditor-previewDialog-loading": "Φόρτωση...",
"wikieditor-publish-preference": "Ενεργοποίηση δημοσίευσης βήμα προς βήμα",
"wikieditor-publish-button-publish": "Δημοσίευση",
"wikieditor-publish-button-cancel": "Άκυρο",
@@ -149,28 +147,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Δεν εισάγατε τίποτα προς αναζήτηση.",
"wikieditor-toolbar-tool-replace-invalidregex": "Η κανονική έκφραση που δώσατε είναι άκυρη: $1",
"wikieditor-toolbar-section-characters": "Ειδικοί χαρακτήρες",
- "wikieditor-toolbar-characters-page-latin": "Λατινικό",
- "wikieditor-toolbar-characters-page-latinextended": "Προέκταση του λατινικού",
- "wikieditor-toolbar-characters-page-ipa": "ΔΦΑ",
- "wikieditor-toolbar-characters-page-symbols": "Σύμβολα",
- "wikieditor-toolbar-characters-page-greek": "Ελληνικό",
- "wikieditor-toolbar-characters-page-cyrillic": "Κυριλλικό",
- "wikieditor-toolbar-characters-page-arabic": "Αραβικό",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabic extended",
- "wikieditor-toolbar-characters-page-persian": "Περσικό",
- "wikieditor-toolbar-characters-page-hebrew": "Εβραϊκό",
- "wikieditor-toolbar-characters-page-bangla": "Μπενγκάλι",
- "wikieditor-toolbar-characters-page-tamil": "Ταμίλ",
- "wikieditor-toolbar-characters-page-telugu": "Τελούγκου",
- "wikieditor-toolbar-characters-page-sinhala": "Σινχάλα",
- "wikieditor-toolbar-characters-page-gujarati": "Γκουχαράτι",
- "wikieditor-toolbar-characters-page-devanagari": "Ντεβαναγκάρι",
- "wikieditor-toolbar-characters-page-thai": "ταϊλανδικά",
- "wikieditor-toolbar-characters-page-lao": "λαοτινά",
- "wikieditor-toolbar-characters-page-khmer": "καμποτζιανά",
- "wikieditor-toolbar-characters-endash": "παύλα",
- "wikieditor-toolbar-characters-emdash": "διπλή παύλα",
- "wikieditor-toolbar-characters-minus": "σύμβολο πλην",
"wikieditor-toolbar-section-help": "Βοήθεια",
"wikieditor-toolbar-help-heading-description": "Περιγραφή",
"wikieditor-toolbar-help-heading-syntax": "Τι πληκτρολογείς",
@@ -216,8 +192,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Αντικείμενο της λίστας<br /># Αντικείμενο της λίστας",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Στοιχείο λίστας</li><li>Στοιχείο λίστας</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ενσωματωμένο αρχείο",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Κείμενο περιγραφής]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Κείμενο τίτλων' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Κείμενο τίτλων</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Παραπομπή",
"wikieditor-toolbar-help-content-reference-syntax": "Κείμενο σελίδας.&lt;ref name=\"test\"&gt;[http://www.example.org Κείμενο συνδέσμου], επιπλέον κείμενο.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Κείμενο σελίδας.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/en.json b/extensions/WikiEditor/i18n/en.json
index 5d4ae479..2138026d 100644
--- a/extensions/WikiEditor/i18n/en.json
+++ b/extensions/WikiEditor/i18n/en.json
@@ -12,9 +12,6 @@
"wikieditor-preview-tab": "Preview",
"wikieditor-preview-changes-tab": "Changes",
"wikieditor-preview-loading": "Loading...",
- "wikieditor-previewDialog-preference": "Enable preview dialog",
- "wikieditor-previewDialog-tab": "Preview",
- "wikieditor-previewDialog-loading": "Loading...",
"wikieditor-publish-preference": "Enable step-by-step publishing",
"wikieditor-publish-button-publish": "Publish",
"wikieditor-publish-button-cancel": "Cancel",
@@ -142,28 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "You did not enter anything to search for.",
"wikieditor-toolbar-tool-replace-invalidregex": "The regular expression you entered is invalid: $1",
"wikieditor-toolbar-section-characters": "Special characters",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin extended",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symbols",
- "wikieditor-toolbar-characters-page-greek": "Greek",
- "wikieditor-toolbar-characters-page-cyrillic": "Cyrillic",
- "wikieditor-toolbar-characters-page-arabic": "Arabic",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabic extended",
- "wikieditor-toolbar-characters-page-persian": "Persian",
- "wikieditor-toolbar-characters-page-hebrew": "Hebrew",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "en dash",
- "wikieditor-toolbar-characters-emdash": "em dash",
- "wikieditor-toolbar-characters-minus": "minus sign",
"wikieditor-toolbar-section-help": "Help",
"wikieditor-toolbar-help-heading-description": "Description",
"wikieditor-toolbar-help-heading-syntax": "What you type",
@@ -209,8 +184,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# List item<br /># List item",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>List item</li><li>List item</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Embedded file",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Caption text]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Caption text</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Caption text",
"wikieditor-toolbar-help-content-reference-description": "Reference",
"wikieditor-toolbar-help-content-reference-syntax": "Page text.&lt;ref name=\"test\"&gt;[http://www.example.org Link text], additional text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Page text.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/eo.json b/extensions/WikiEditor/i18n/eo.json
index 87e84fc5..32d01550 100644
--- a/extensions/WikiEditor/i18n/eo.json
+++ b/extensions/WikiEditor/i18n/eo.json
@@ -7,7 +7,10 @@
"Marcos",
"Michawiki",
"Yekrats",
- "Ziko"
+ "Ziko",
+ "Nemo bis",
+ "KuboF",
+ "Macofe"
]
},
"wikieditor": "Progresa redaktilo por vikiteksto",
@@ -18,9 +21,6 @@
"wikieditor-preview-tab": "Antaŭvido",
"wikieditor-preview-changes-tab": "Ŝanĝoj",
"wikieditor-preview-loading": "Ŝargante...",
- "wikieditor-previewDialog-preference": "Ŝalti antaŭvidan dialogon",
- "wikieditor-previewDialog-tab": "Antaŭvido",
- "wikieditor-previewDialog-loading": "Ŝargante...",
"wikieditor-publish-preference": "Ŝalti po-paŝan eldonadon",
"wikieditor-publish-button-publish": "Konservi",
"wikieditor-publish-button-cancel": "Nuligi",
@@ -61,6 +61,7 @@
"wikieditor-toolbar-tool-link-int-target-status-invalid": "Nepermesita titolo",
"wikieditor-toolbar-tool-link-int-target-status-external": "Ligilo al ekstero",
"wikieditor-toolbar-tool-link-int-target-status-loading": "Kontrolante ekziston de paĝo...",
+ "wikieditor-toolbar-tool-link-int-target-status-disambig": "Apartigilo",
"wikieditor-toolbar-tool-link-int-invalid": "La titolo kiun vi enmetis estas nepermesita.",
"wikieditor-toolbar-tool-link-lookslikeinternal": "La retadreso (URL), kiun vi indikis, aspektas kvazaŭ ĝi estas ligilo al paĝo de alia vikio.\nĈu vi volas ŝanĝi ĝin al interna ligilo?",
"wikieditor-toolbar-tool-link-lookslikeinternal-int": "Interna ligilo",
@@ -121,14 +122,14 @@
"wikieditor-toolbar-tool-table-title": "Enmeti tabelon",
"wikieditor-toolbar-tool-table-dimensions-rows": "Linioj",
"wikieditor-toolbar-tool-table-dimensions-columns": "Kolumnoj",
- "wikieditor-toolbar-tool-table-dimensions-header": "Aldonu titolan linion",
- "wikieditor-toolbar-tool-table-wikitable": "Akdonu bordojn",
+ "wikieditor-toolbar-tool-table-dimensions-header": "Aldoni titolan linion",
+ "wikieditor-toolbar-tool-table-wikitable": "Aldoni bordojn",
"wikieditor-toolbar-tool-table-sortable": "Fari tabelon ordigebla",
"wikieditor-toolbar-tool-table-example": "Teksto de ĉelo",
"wikieditor-toolbar-tool-table-preview": "Antaŭvido",
"wikieditor-toolbar-tool-table-insert": "Enmeti",
"wikieditor-toolbar-tool-table-cancel": "Nuligi",
- "wikieditor-toolbar-tool-table-toomany": "Enmeti tabelon kun pli ol $1 ĉeloj ne eblas per ĉi tiu dialogujo.",
+ "wikieditor-toolbar-tool-table-toomany": "Enmeti tabelon kun pli ol 1000 ĉeloj ne eblas per ĉi tiu dialogujo.",
"wikieditor-toolbar-tool-table-invalidnumber": "Vi ne enigis permesitan nombron de linioj aŭ kolumnoj.",
"wikieditor-toolbar-tool-table-zero": "Vi ne povas enigi tabelon kun nul linioj aŭ kolumnoj.",
"wikieditor-toolbar-tool-replace": "Serĉi kaj anstataŭigi",
@@ -146,28 +147,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Vi ne enigis ion ajn por serĉi.",
"wikieditor-toolbar-tool-replace-invalidregex": "La regula esprimo kiun vi enigis estas nepermesita: $1",
"wikieditor-toolbar-section-characters": "Specialaj signoj",
- "wikieditor-toolbar-characters-page-latin": "Latina",
- "wikieditor-toolbar-characters-page-latinextended": "Latina etendita",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simboloj",
- "wikieditor-toolbar-characters-page-greek": "Greka",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirila",
- "wikieditor-toolbar-characters-page-arabic": "Araba",
- "wikieditor-toolbar-characters-page-arabicextended": "araba etendite",
- "wikieditor-toolbar-characters-page-persian": "persa",
- "wikieditor-toolbar-characters-page-hebrew": "Hebrea",
- "wikieditor-toolbar-characters-page-bangla": "Bengala",
- "wikieditor-toolbar-characters-page-tamil": "Tamila",
- "wikieditor-toolbar-characters-page-telugu": "Telegua",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Guĝarata",
- "wikieditor-toolbar-characters-page-devanagari": "Nagario",
- "wikieditor-toolbar-characters-page-thai": "Taja",
- "wikieditor-toolbar-characters-page-lao": "laŭa",
- "wikieditor-toolbar-characters-page-khmer": "kmera",
- "wikieditor-toolbar-characters-endash": "mallonga streketo",
- "wikieditor-toolbar-characters-emdash": "longa streketo",
- "wikieditor-toolbar-characters-minus": "minus-signo",
"wikieditor-toolbar-section-help": "Helpo",
"wikieditor-toolbar-help-heading-description": "Priskribo",
"wikieditor-toolbar-help-heading-syntax": "Kion vi tajpas",
@@ -213,8 +192,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Listero<br /># Listero",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Listero</li><li>Listero</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Enmetita dosiero",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Teksto pri dosiero]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Pligrandigi' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Teksto pri dosiero</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Piednoto",
"wikieditor-toolbar-help-content-reference-syntax": "Paĝa teksto.&lt;ref name=\"test\"&gt;[http://www.ekzemplo.org Ligila teksto], aldona teksto.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Paĝa teksto.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/es.json b/extensions/WikiEditor/i18n/es.json
index fdf8dbe4..3567e04d 100644
--- a/extensions/WikiEditor/i18n/es.json
+++ b/extensions/WikiEditor/i18n/es.json
@@ -16,7 +16,8 @@
"Platonides",
"Translationista",
"Vivaelcelta",
- "Luis Felipe Schenone"
+ "Luis Felipe Schenone",
+ "Macofe"
]
},
"wikieditor": "Interfaz avanzada de edición de wikitexto",
@@ -27,9 +28,6 @@
"wikieditor-preview-tab": "Previsualizar",
"wikieditor-preview-changes-tab": "Cambios",
"wikieditor-preview-loading": "Cargando...",
- "wikieditor-previewDialog-preference": "Activar el diálogo de previsualización",
- "wikieditor-previewDialog-tab": "Previsualizar",
- "wikieditor-previewDialog-loading": "Cargando...",
"wikieditor-publish-preference": "Habilitar publicación paso a paso",
"wikieditor-publish-button-publish": "Publicar",
"wikieditor-publish-button-cancel": "Cancelar",
@@ -134,7 +132,7 @@
"wikieditor-toolbar-tool-table-dimensions-header": "Incluir encabezado de fila",
"wikieditor-toolbar-tool-table-wikitable": "Estilo con bordes",
"wikieditor-toolbar-tool-table-sortable": "Hacer la tabla organizable",
- "wikieditor-toolbar-tool-table-example": "Texto de celda",
+ "wikieditor-toolbar-tool-table-example": "Ejemplo",
"wikieditor-toolbar-tool-table-preview": "Previsualización",
"wikieditor-toolbar-tool-table-insert": "Insertar",
"wikieditor-toolbar-tool-table-cancel": "Cancelar",
@@ -223,8 +221,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elemento de la lista<br /># Elemento de la lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elemento de la lista</li><li>Elemento de la lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Archivo incrustado",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ejemplo.png|thumb|Texto de la leyenda]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Texto leyenda</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ejemplo.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Texto de la leyenda",
"wikieditor-toolbar-help-content-reference-description": "Referencia",
"wikieditor-toolbar-help-content-reference-syntax": "Texto de página.&lt;ref name=\"test\"&gt;[http://www.example.org Texto de vínculo], texto adicional.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Texto de página.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/et.json b/extensions/WikiEditor/i18n/et.json
index 3c0c9816..b0dccf99 100644
--- a/extensions/WikiEditor/i18n/et.json
+++ b/extensions/WikiEditor/i18n/et.json
@@ -15,8 +15,6 @@
"wikieditor-preview-tab": "Eelvaade",
"wikieditor-preview-changes-tab": "Muudatused",
"wikieditor-preview-loading": "Laadimine...",
- "wikieditor-previewDialog-tab": "Eelvaade",
- "wikieditor-previewDialog-loading": "Laadimine...",
"wikieditor-publish-preference": "Kasuta astmelist avaldamist",
"wikieditor-publish-button-publish": "Avalda",
"wikieditor-publish-button-cancel": "Loobu",
@@ -210,8 +208,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Loendi liige<br /># Loendi liige",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Loendi liige</li><li>Loendi liige</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Manusfail",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Näide.png|thumb|Pildiallkiri]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Pildiallkiri' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Suurenda' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Pildiallkiri</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Näide.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Pildiallkiri",
"wikieditor-toolbar-help-content-reference-description": "Viide",
"wikieditor-toolbar-help-content-reference-syntax": "Lehekülje tekst.&lt;ref name=\"test\"&gt;[http://www.näide.ee Lingi tekst], täiendav tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Lehekülje tekst.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/eu.json b/extensions/WikiEditor/i18n/eu.json
index 5d1c281c..70b0bc6a 100644
--- a/extensions/WikiEditor/i18n/eu.json
+++ b/extensions/WikiEditor/i18n/eu.json
@@ -5,7 +5,8 @@
"Inorbez",
"Joxemai",
"Xabier Armendaritz",
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "Macofe"
]
},
"wikieditor": "Wikitestu edizio-interfaze aurreratua",
@@ -16,9 +17,6 @@
"wikieditor-preview-tab": "Aurreikuspena",
"wikieditor-preview-changes-tab": "Aldaketak",
"wikieditor-preview-loading": "Kargatzen...",
- "wikieditor-previewDialog-preference": "Aurrikuspen kutxa gaitu",
- "wikieditor-previewDialog-tab": "Aurreikuspena",
- "wikieditor-previewDialog-loading": "Kargatzen...",
"wikieditor-publish-preference": "Pausoz pausoko argitarapena ahalbideratu",
"wikieditor-publish-button-publish": "Argitaratu",
"wikieditor-publish-button-cancel": "Utzi",
@@ -137,22 +135,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Ez duzu bilatu beharreko ezer adierazi.",
"wikieditor-toolbar-tool-replace-invalidregex": "Txertatu duzun adierazpen erregularra ez da zzuena: $1",
"wikieditor-toolbar-section-characters": "Karaktere bereziak",
- "wikieditor-toolbar-characters-page-latin": "Latina",
- "wikieditor-toolbar-characters-page-latinextended": "Latin hedatua",
- "wikieditor-toolbar-characters-page-ipa": "NAF",
- "wikieditor-toolbar-characters-page-symbols": "Ikurrak",
- "wikieditor-toolbar-characters-page-greek": "Greziera",
- "wikieditor-toolbar-characters-page-cyrillic": "Zirilikoa",
- "wikieditor-toolbar-characters-page-arabic": "Arabiera",
- "wikieditor-toolbar-characters-page-persian": "Persiera",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreera",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Guajarati",
- "wikieditor-toolbar-characters-page-thai": "Thaiera",
- "wikieditor-toolbar-characters-page-lao": "Laosera",
- "wikieditor-toolbar-characters-page-khmer": "Khmerrera",
"wikieditor-toolbar-section-help": "Laguntza",
"wikieditor-toolbar-help-heading-description": "Deskribapena",
"wikieditor-toolbar-help-heading-syntax": "Idazten duzuna",
@@ -198,8 +180,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Zerrendako elementua<br /># Zerrendako elementua",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Zerrendako elementua</li><li>Zerrendako elementua</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fitxategia txertatu",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Adibidea.png|thumb|Irudi oina]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Irudiaren testua' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Handitu' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Irudi oina</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Adibidea.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Erreferentzia",
"wikieditor-toolbar-help-content-reference-syntax": "Orrialdearen testua.&lt;ref name=\"proba\"&gt;[http://www.adibidea.org Loturaren testua], testu gehigarria.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Orrialdearen testua.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/fa.json b/extensions/WikiEditor/i18n/fa.json
index 151cd280..f3aad408 100644
--- a/extensions/WikiEditor/i18n/fa.json
+++ b/extensions/WikiEditor/i18n/fa.json
@@ -9,7 +9,8 @@
"Reza1615",
"Wayiran",
"ZxxZxxZ",
- "Alirezaaa"
+ "Alirezaaa",
+ "MohandesWiki"
]
},
"wikieditor": "رابط ویرایش پیشرفته ویکی‌متن",
@@ -20,9 +21,6 @@
"wikieditor-preview-tab": "پیش‌نمایش",
"wikieditor-preview-changes-tab": "تغییرها",
"wikieditor-preview-loading": "در حال بارگیری...",
- "wikieditor-previewDialog-preference": "فعال‌کردن پنجره‌های تعاملی پیش‌نمایش",
- "wikieditor-previewDialog-tab": "پیش‌نمایش",
- "wikieditor-previewDialog-loading": "در حال بارگیری...",
"wikieditor-publish-preference": "فعال‌سازی انتشار گام‌به‌گام",
"wikieditor-publish-button-publish": "انتشار",
"wikieditor-publish-button-cancel": "لغو",
@@ -104,7 +102,7 @@
"wikieditor-toolbar-tool-nowiki": "نادیده‌گرفتن قالب‌بندی ویکی",
"wikieditor-toolbar-tool-nowiki-example": "اینجا متن قالب‌بندی‌نشده وارد شود",
"wikieditor-toolbar-tool-redirect": "تغییرمسیر",
- "wikieditor-toolbar-tool-redirect-example": "نام صفحه مقصد",
+ "wikieditor-toolbar-tool-redirect-example": "نام صفحهٔ هدف",
"wikieditor-toolbar-tool-big": "بزرگ",
"wikieditor-toolbar-tool-big-example": "متن بزرگ",
"wikieditor-toolbar-tool-small": "کوچک",
@@ -217,7 +215,7 @@
"wikieditor-toolbar-help-content-olist-result": "<ol><li>مورد فهرست</li><li>مورد فهرست</li></ol>",
"wikieditor-toolbar-help-content-file-description": "پرونده جاسازی‌شده",
"wikieditor-toolbar-help-content-file-syntax": "[[$1:مثال.png|بندانگشتی|متن عنوان]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='متن عنوان' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='بزرگ‌نمایی' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>متن عنوان</div></div>",
+ "wikieditor-toolbar-help-content-file-result": "<div style='width:102px;' class='thumbinner'><a title='متن عنوان' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$1/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='بزرگ‌نمایی' class='internal' href='#'></a></div>متن عنوان</div></div>",
"wikieditor-toolbar-help-content-reference-description": "منبع",
"wikieditor-toolbar-help-content-reference-syntax": "متن صفحه.&lt;ref name=\"test\"&gt;[http://www.example.org متن پیوند]، متن اضافی.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "متن صفحه.<sup><a href='#'>[1]</a></sup>",
@@ -226,7 +224,7 @@
"wikieditor-toolbar-help-content-showreferences-description": "نمایش منابع",
"wikieditor-toolbar-help-content-showreferences-result": "<ol class='references'><li id='cite_note-test-0'><b><a title='' href='#'>^</a></b> <a rel='nofollow' title='http://www.example.org' class='external text' href='#'>متن پیوند</a>، متن اضافی.</li></ol>",
"wikieditor-toolbar-help-content-signaturetimestamp-description": "امضا به همراه برچسب زمان",
- "wikieditor-toolbar-help-content-signaturetimestamp-result": "<a href='#' title='{{#special:mypage}}'>نام کاربری</a> (<a href='#' title='{{#special:mytalk}}'>بحث</a>) 15:54, 10 June 2009 (UTC)",
+ "wikieditor-toolbar-help-content-signaturetimestamp-result": "<a href='#' title='{{#special:mypage}}'>نام کاربری</a> (<a href='#' title='{{#special:mytalk}}'>بحث</a>)",
"wikieditor-toolbar-help-content-signature-description": "امضا",
"wikieditor-toolbar-help-content-signature-result": "<a href='#' title='{{#special:mypage}}'>نام کاربری</a> (<a href='#' title='{{#special:mytalk}}'>بحث</a>)",
"wikieditor-toolbar-help-content-indent-description": "تورفتگی",
diff --git a/extensions/WikiEditor/i18n/fi.json b/extensions/WikiEditor/i18n/fi.json
index ae4a51ab..743bff90 100644
--- a/extensions/WikiEditor/i18n/fi.json
+++ b/extensions/WikiEditor/i18n/fi.json
@@ -14,7 +14,8 @@
"Stryn",
"VezonThunder",
"ZeiP",
- "Syreeni"
+ "Syreeni",
+ "Macofe"
]
},
"wikieditor": "Edistynyt wikitekstin muokkauskäyttöliittymä",
@@ -25,9 +26,6 @@
"wikieditor-preview-tab": "Esikatselu",
"wikieditor-preview-changes-tab": "Muutokset",
"wikieditor-preview-loading": "Ladataan…",
- "wikieditor-previewDialog-preference": "Ota esikatseluikkuna käyttöön",
- "wikieditor-previewDialog-tab": "Esikatselu",
- "wikieditor-previewDialog-loading": "Ladataan…",
"wikieditor-publish-preference": "Ota käyttöön vaiheittainen julkaisu",
"wikieditor-publish-button-publish": "Julkaise",
"wikieditor-publish-button-cancel": "Peruuta",
@@ -154,28 +152,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Et antanut mitään haettavaa.",
"wikieditor-toolbar-tool-replace-invalidregex": "Syöttämäsi säännöllinen lauseke ei ole kelvollinen: $1",
"wikieditor-toolbar-section-characters": "Erikoismerkit",
- "wikieditor-toolbar-characters-page-latin": "Latina",
- "wikieditor-toolbar-characters-page-latinextended": "Laajennettu latina",
- "wikieditor-toolbar-characters-page-ipa": "Kansainvälinen foneettinen kirjaimisto (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Symbolit",
- "wikieditor-toolbar-characters-page-greek": "Kreikka",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrillinen",
- "wikieditor-toolbar-characters-page-arabic": "Arabia",
- "wikieditor-toolbar-characters-page-arabicextended": "Laajennettu arabia",
- "wikieditor-toolbar-characters-page-persian": "Persia",
- "wikieditor-toolbar-characters-page-hebrew": "Heprea",
- "wikieditor-toolbar-characters-page-bangla": "Bengali",
- "wikieditor-toolbar-characters-page-tamil": "Tamili",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhali",
- "wikieditor-toolbar-characters-page-gujarati": "Gudžarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanāgarī",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "ajatusviiva",
- "wikieditor-toolbar-characters-emdash": "pitkä ajatusviiva",
- "wikieditor-toolbar-characters-minus": "miinusmerkki",
"wikieditor-toolbar-section-help": "Ohje",
"wikieditor-toolbar-help-heading-description": "Kuvaus",
"wikieditor-toolbar-help-heading-syntax": "Mitä kirjoitat",
@@ -221,8 +197,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Luettelon kohta<br /># Luettelon kohta",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Luettelon kohta</li><li>Luettelon kohta</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Tallennettu tiedosto",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Kuvateksti]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Kuvateksti' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Suurenna' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Kuvateksti</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Viite",
"wikieditor-toolbar-help-content-reference-syntax": "Sivun teksti.&lt;ref name=\"testi\"&gt;[http://www.example.org Linkin teksti], lisäteksti.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Sivun teksti.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/fr.json b/extensions/WikiEditor/i18n/fr.json
index 2b0d492f..b2ae9e8d 100644
--- a/extensions/WikiEditor/i18n/fr.json
+++ b/extensions/WikiEditor/i18n/fr.json
@@ -14,7 +14,8 @@
"Urhixidur",
"Verdy p",
"Wyz",
- "Zetud"
+ "Zetud",
+ "Macofe"
]
},
"wikieditor": "Interface avancée de modification de wikitexte",
@@ -25,9 +26,6 @@
"wikieditor-preview-tab": "Prévisualisation",
"wikieditor-preview-changes-tab": "Changements",
"wikieditor-preview-loading": "Chargement...",
- "wikieditor-previewDialog-preference": "Activer la boîte de dialogue d’aperçu",
- "wikieditor-previewDialog-tab": "Prévisualisation",
- "wikieditor-previewDialog-loading": "Chargement...",
"wikieditor-publish-preference": "Activer la publication étape par étape",
"wikieditor-publish-button-publish": "Publier",
"wikieditor-publish-button-cancel": "Annuler",
@@ -154,28 +152,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Vous n’avez pas indiqué de texte à rechercher.",
"wikieditor-toolbar-tool-replace-invalidregex": "L’expression rationnelle entrée est invalide : $1",
"wikieditor-toolbar-section-characters": "Caractères spéciaux",
- "wikieditor-toolbar-characters-page-latin": "latin",
- "wikieditor-toolbar-characters-page-latinextended": "latin étendu",
- "wikieditor-toolbar-characters-page-ipa": "API",
- "wikieditor-toolbar-characters-page-symbols": "symboles",
- "wikieditor-toolbar-characters-page-greek": "grec",
- "wikieditor-toolbar-characters-page-cyrillic": "cyrillique",
- "wikieditor-toolbar-characters-page-arabic": "arabe",
- "wikieditor-toolbar-characters-page-arabicextended": "arabe étendu",
- "wikieditor-toolbar-characters-page-persian": "persan",
- "wikieditor-toolbar-characters-page-hebrew": "hébreu",
- "wikieditor-toolbar-characters-page-bangla": "bengalî",
- "wikieditor-toolbar-characters-page-tamil": "tamoul",
- "wikieditor-toolbar-characters-page-telugu": "télougou",
- "wikieditor-toolbar-characters-page-sinhala": "cingalais",
- "wikieditor-toolbar-characters-page-gujarati": "gujarâtî",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "thaï",
- "wikieditor-toolbar-characters-page-lao": "laotien",
- "wikieditor-toolbar-characters-page-khmer": "khmer",
- "wikieditor-toolbar-characters-endash": "tiret anglais",
- "wikieditor-toolbar-characters-emdash": "tiret em",
- "wikieditor-toolbar-characters-minus": "signe moins",
"wikieditor-toolbar-section-help": "Aide",
"wikieditor-toolbar-help-heading-description": "Description",
"wikieditor-toolbar-help-heading-syntax": "Ce que vous tapez",
@@ -221,8 +197,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Élément de la liste<br /># Élément de la liste",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Élément de la liste</li><li>Élément de la liste</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fichier inséré",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemple.png|thumb|Texte affiché]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Texte affiché' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Texte affiché</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemple.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Référence",
"wikieditor-toolbar-help-content-reference-syntax": "Texte de la page&lt;ref name=\"test\"&gt;[http://www.example.org texte du lien], texte additionnel.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Texte de la page <sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/frp.json b/extensions/WikiEditor/i18n/frp.json
index 5c8b0a03..7fd9b9c8 100644
--- a/extensions/WikiEditor/i18n/frp.json
+++ b/extensions/WikiEditor/i18n/frp.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "ChrisPtDe"
+ "ChrisPtDe",
+ "Macofe"
]
},
"wikieditor": "Entèrface avanciê de changement de vouiquitèxto",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Prèvisualisacion",
"wikieditor-preview-changes-tab": "Changements",
"wikieditor-preview-loading": "Chargement...",
- "wikieditor-previewDialog-preference": "Activar la bouèta de dialogo d’apèrçu",
- "wikieditor-previewDialog-tab": "Prèvisualisacion",
- "wikieditor-previewDialog-loading": "Chargement...",
"wikieditor-publish-preference": "Activar la publecacion a châ ètapa",
"wikieditor-publish-button-publish": "Publeyér",
"wikieditor-publish-button-cancel": "Anular",
@@ -140,28 +138,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Vos éd buchiê gins de tèxto a rechèrchiér.",
"wikieditor-toolbar-tool-replace-invalidregex": "L’èxprèssion racionèla buchiê est envalida : $1",
"wikieditor-toolbar-section-characters": "Caractèros spèciâls",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin ètendu",
- "wikieditor-toolbar-characters-page-ipa": "AFE (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Simbolos",
- "wikieditor-toolbar-characters-page-greek": "Grèco",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirilico",
- "wikieditor-toolbar-characters-page-arabic": "Arabo",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabo ètendu",
- "wikieditor-toolbar-characters-page-persian": "Pèrsan",
- "wikieditor-toolbar-characters-page-hebrew": "Hèbrèo",
- "wikieditor-toolbar-characters-page-bangla": "Bengali",
- "wikieditor-toolbar-characters-page-tamil": "Tamoul",
- "wikieditor-toolbar-characters-page-telugu": "Tèlougou",
- "wikieditor-toolbar-characters-page-sinhala": "Cingalês",
- "wikieditor-toolbar-characters-page-gujarati": "Goudjarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Tayi",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "C’mère",
- "wikieditor-toolbar-characters-endash": "terèt anglès",
- "wikieditor-toolbar-characters-emdash": "terèt èm",
- "wikieditor-toolbar-characters-minus": "segno muens",
"wikieditor-toolbar-section-help": "Éde",
"wikieditor-toolbar-help-heading-description": "Dèscripcion",
"wikieditor-toolbar-help-heading-syntax": "Cen que vos buchiéd",
@@ -207,8 +183,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Èlèment de la lista<br /># Èlèment de la lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Èlèment de la lista</li><li>Èlèment de la lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fichiér entrebetâ",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ègzemplo.png|thumb|Tèxto montrâ]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Tèxto montrâ' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Agrantir' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Tèxto montrâ</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ègzemplo.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Refèrence",
"wikieditor-toolbar-help-content-reference-syntax": "Tèxto de la pâge.&lt;ref name=\"test\"&gt;[http://www.example.org tèxto du lim], tèxto de ples.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tèxto de la pâge.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/fy.json b/extensions/WikiEditor/i18n/fy.json
index 038b6560..b4a79c39 100644
--- a/extensions/WikiEditor/i18n/fy.json
+++ b/extensions/WikiEditor/i18n/fy.json
@@ -1,24 +1,28 @@
{
"@metadata": {
"authors": [
- "Kening Aldgilles"
+ "Kening Aldgilles",
+ "Robin0van0der0vliet"
]
},
- "wikieditor-publish-button-cancel": "Ofbrekke",
+ "wikieditor-publish-button-cancel": "Annulearje",
"wikieditor-toolbar": "Bewurkingsbalke",
+ "wikieditor-toolbar-tool-bold": "Fet",
+ "wikieditor-toolbar-tool-italic": "Kursyf",
"wikieditor-toolbar-tool-link-title": "Keppeling ynfoegje",
"wikieditor-toolbar-tool-link-insert": "Keppeling ynfoegje",
- "wikieditor-toolbar-tool-link-cancel": "Ofbrekke",
- "wikieditor-toolbar-tool-file-example": "Eksimpel.jpg",
- "wikieditor-toolbar-tool-file-title": "Bestân ynfoegje",
+ "wikieditor-toolbar-tool-link-cancel": "Annulearje",
+ "wikieditor-toolbar-tool-file-example": "Foarbyld.jpg",
+ "wikieditor-toolbar-tool-file-title": "Triem ynfoegje",
+ "wikieditor-toolbar-file-target": "Triemnamme:",
"wikieditor-toolbar-file-size": "Grutte:",
"wikieditor-toolbar-file-default": "(standert)",
"wikieditor-toolbar-file-format-none": "gjin",
"wikieditor-toolbar-tool-file-insert": "Ynfoegje",
- "wikieditor-toolbar-tool-file-cancel": "Ofbrekke",
+ "wikieditor-toolbar-tool-file-cancel": "Annulearje",
"wikieditor-toolbar-tool-reference": "Referinsje",
"wikieditor-toolbar-tool-reference-example": "Foettekst hjir ynfoegje",
- "wikieditor-toolbar-tool-reference-cancel": "Ofbrekke",
+ "wikieditor-toolbar-tool-reference-cancel": "Annulearje",
"wikieditor-toolbar-tool-reference-title": "Referinsje ynfoegje",
"wikieditor-toolbar-tool-reference-insert": "Ynfoegje",
"wikieditor-toolbar-tool-reference-text": "Referinsjetekst",
@@ -30,18 +34,20 @@
"wikieditor-toolbar-tool-heading-example": "Koptekst",
"wikieditor-toolbar-tool-ulist": "List sûnder nûmers",
"wikieditor-toolbar-tool-olist": "List mei nûmers",
+ "wikieditor-toolbar-tool-small": "Lyts",
"wikieditor-toolbar-group-insert": "Ynfoegje",
"wikieditor-toolbar-tool-table-title": "Tabel ynfoegje",
"wikieditor-toolbar-tool-table-dimensions-rows": "Rigen",
"wikieditor-toolbar-tool-table-dimensions-columns": "Kolommen",
"wikieditor-toolbar-tool-table-dimensions-header": "Koprigel ynfoegje",
- "wikieditor-toolbar-tool-table-example": "Eksimpel",
+ "wikieditor-toolbar-tool-table-example": "Foarbyld",
"wikieditor-toolbar-tool-table-insert": "Ynfoegje",
- "wikieditor-toolbar-tool-table-cancel": "Ofbrekke",
+ "wikieditor-toolbar-tool-table-cancel": "Annulearje",
"wikieditor-toolbar-tool-replace-search": "Sykje op:",
"wikieditor-toolbar-tool-replace-replace": "Ferfange mei:",
"wikieditor-toolbar-section-characters": "Spesjale tekens",
- "wikieditor-toolbar-characters-page-latin": "Latyn",
+ "wikieditor-toolbar-section-help": "Help",
+ "wikieditor-toolbar-help-page-file": "Triemmen",
"wikieditor-toolbar-help-page-reference": "Referinsjes",
"wikieditor-toolbar-help-page-discussion": "Oerlis",
"wikieditor-toolbar-help-content-italic-description": "Kursyf",
diff --git a/extensions/WikiEditor/i18n/gd.json b/extensions/WikiEditor/i18n/gd.json
index 44f74479..a1ff0a2f 100644
--- a/extensions/WikiEditor/i18n/gd.json
+++ b/extensions/WikiEditor/i18n/gd.json
@@ -3,7 +3,8 @@
"authors": [
"Akerbeltz",
"Shirayuki",
- "GunChleoc"
+ "GunChleoc",
+ "Macofe"
]
},
"wikieditor": "Eadar-aghaidh deasachadh wikitext adhartach",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "Ro-shealladh",
"wikieditor-preview-changes-tab": "Mùthaidhean",
"wikieditor-preview-loading": "'Ga luchdadh...",
- "wikieditor-previewDialog-preference": "Cuir an comas còmhradh an ro-sheallaidh",
- "wikieditor-previewDialog-tab": "Ro-shealladh",
- "wikieditor-previewDialog-loading": "'Ga luchdadh...",
"wikieditor-publish-preference": "Cuir an comas foillseachadh ceum air cheum",
"wikieditor-publish-button-publish": "Foillisch",
"wikieditor-publish-button-cancel": "Sguir dheth",
@@ -130,19 +128,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Cha do chuir thu càil a-steach as urrainnear lorg.",
"wikieditor-toolbar-tool-replace-invalidregex": "Tha an regular expression a chuir thu a-steach mì-dhligheach: $1",
"wikieditor-toolbar-section-characters": "Caractairean sònraichte",
- "wikieditor-toolbar-characters-page-latin": "Laideann",
- "wikieditor-toolbar-characters-page-latinextended": "Laideann leudaichte",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Siombalan",
- "wikieditor-toolbar-characters-page-greek": "Greugais",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirilis",
- "wikieditor-toolbar-characters-page-arabic": "Arabais",
- "wikieditor-toolbar-characters-page-persian": "Farsaidh",
- "wikieditor-toolbar-characters-page-hebrew": "Eabhra",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
"wikieditor-toolbar-section-help": "Help",
"wikieditor-toolbar-help-heading-description": "Tuairisgeul",
"wikieditor-toolbar-help-heading-syntax": "Na chuireas tu a-steach",
@@ -188,8 +173,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "* Ball na liosta<br />* Ball na liosta",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Ball na liosta</li><li>Ball na liosta</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Embedded file",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Caipsean]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Mìneachadh an deilbht' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Meudaich' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Mìneachadh an deilbh</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Iomradh",
"wikieditor-toolbar-help-content-reference-syntax": "Teacsa na duilleige.&lt;ref name=\"test\"&gt;[http://www.ballsampaill.org Teacsa a' cheangail], teacsa eile.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Teacsa na duilleige.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/gl.json b/extensions/WikiEditor/i18n/gl.json
index 8b695111..b520e286 100644
--- a/extensions/WikiEditor/i18n/gl.json
+++ b/extensions/WikiEditor/i18n/gl.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Toliño"
+ "Toliño",
+ "Banjo"
]
},
"wikieditor": "Interface avanzada de edición de texto wiki",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Vista previa",
"wikieditor-preview-changes-tab": "Cambios",
"wikieditor-preview-loading": "Cargando...",
- "wikieditor-previewDialog-preference": "Activar o diálogo de vista previa",
- "wikieditor-previewDialog-tab": "Vista previa",
- "wikieditor-previewDialog-loading": "Cargando...",
"wikieditor-publish-preference": "Activar a publicación paso a paso",
"wikieditor-publish-button-publish": "Publicar",
"wikieditor-publish-button-cancel": "Cancelar",
@@ -208,8 +206,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elemento da lista<br /># Elemento da lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elemento da lista</li><li>Elemento da lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ficheiro embelecido",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Pé de foto.]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Pé de foto' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Ampliar' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Pé de foto.</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referencia",
"wikieditor-toolbar-help-content-reference-syntax": "Texto da páxina&lt;ref name=\"test\"&gt;[http://www.example.org Texto da ligazón], texto adicional.&lt;/ref&gt;.",
"wikieditor-toolbar-help-content-reference-result": "Texto da páxina<sup><a href='#'>[1]</a></sup>.",
diff --git a/extensions/WikiEditor/i18n/gsw.json b/extensions/WikiEditor/i18n/gsw.json
index d9af53a9..c5200fdc 100644
--- a/extensions/WikiEditor/i18n/gsw.json
+++ b/extensions/WikiEditor/i18n/gsw.json
@@ -3,7 +3,8 @@
"authors": [
"Als-Chlämens",
"Als-Holder",
- "Kghbln"
+ "Kghbln",
+ "Macofe"
]
},
"wikieditor": "Oberflechi fir s fortgschritte Wikitext-Bearbeite",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "Vorschau",
"wikieditor-preview-changes-tab": "Änderige",
"wikieditor-preview-loading": "Am Lade ...",
- "wikieditor-previewDialog-preference": "D Abfrog zue dr Vorschau aaschalte",
- "wikieditor-previewDialog-tab": "Vorschau",
- "wikieditor-previewDialog-loading": "Am Lade ...",
"wikieditor-publish-preference": "Schritt-fir-Schritt-Vereffentlichung meglig mache",
"wikieditor-publish-button-publish": "Publiziere",
"wikieditor-publish-button-cancel": "Abbräche",
@@ -142,25 +140,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Du hesch nyt yygee zum Sueche.",
"wikieditor-toolbar-tool-replace-invalidregex": "Dää regulär Uusdruck, wu Du yygee hesch, isch nit giltig: $1",
"wikieditor-toolbar-section-characters": "Sunderzeiche",
- "wikieditor-toolbar-characters-page-latin": "Latynisch",
- "wikieditor-toolbar-characters-page-latinextended": "Latin Extended",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symbol",
- "wikieditor-toolbar-characters-page-greek": "Griechisch",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrillisch",
- "wikieditor-toolbar-characters-page-arabic": "Arabisch",
- "wikieditor-toolbar-characters-page-arabicextended": "Erwyyterts Arabisch",
- "wikieditor-toolbar-characters-page-persian": "Persisch",
- "wikieditor-toolbar-characters-page-hebrew": "Hebräisch",
- "wikieditor-toolbar-characters-page-bangla": "Bengalisch",
- "wikieditor-toolbar-characters-page-tamil": "Tamilisch",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singhalesisch",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Hilf",
"wikieditor-toolbar-help-heading-description": "Bschrybig",
"wikieditor-toolbar-help-heading-syntax": "Was Du schrybsch",
@@ -206,8 +185,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Lischtepunkt<br /># Lischtepunkt",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Lischtepunkt</li><li>Lischtepunkt</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Yygfiegti Datei",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Bildbschriftig]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Bildbschriftig' class='image' href='/wiki/Datei:Wiki.png'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='Bschriftig'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Bildbschriftig</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Quälle",
"wikieditor-toolbar-help-content-reference-syntax": "Sytetekscht.&lt;ref name=\"test\"&gt;[http://www.byschpil.org Gleichtekscht], zuesätzlige Tekscht.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Sytetekscht.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/gu.json b/extensions/WikiEditor/i18n/gu.json
index c537ed3a..27bce66f 100644
--- a/extensions/WikiEditor/i18n/gu.json
+++ b/extensions/WikiEditor/i18n/gu.json
@@ -3,7 +3,8 @@
"authors": [
"Ashok modhvadia",
"KartikMistry",
- "Sushant savla"
+ "Sushant savla",
+ "Macofe"
]
},
"wikieditor": "ઉચ્ચ વિકિલખાણ ફેરફાર દેખાવ",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "પૂર્વદર્શન",
"wikieditor-preview-changes-tab": "ફેરફારો",
"wikieditor-preview-loading": "લવાઇ રહ્યું છે...",
- "wikieditor-previewDialog-preference": "સંભાષણ પુનરાવલોકન સક્રીય કરો",
- "wikieditor-previewDialog-tab": "પૂર્વદર્શન",
- "wikieditor-previewDialog-loading": "લવાઇ રહ્યું છે...",
"wikieditor-publish-preference": "ટપ્પા વાર પ્રકાશન કાર્યાન્વીત કરો",
"wikieditor-publish-button-publish": "પ્રસિદ્ધ કરો",
"wikieditor-publish-button-cancel": "રદ કરો",
@@ -59,7 +57,7 @@
"wikieditor-toolbar-tool-link-int-target-status-loading": "અન્ય સ્થળે પાનાની મોજૂદગી ચકાસાઈ રહી છે",
"wikieditor-toolbar-tool-link-int-invalid": "આ શીર્ષક અમાન્ય છે.",
"wikieditor-toolbar-tool-link-lookslikeinternal": "તમે જણાવેલ URL પરથી લાગે છે કે તમે અન્ય વિકિ સાથે કડી જોડવા માંગો છો.\nશું તમે આંતરીક કડી બનાવવા માંગો છો?",
- "wikieditor-toolbar-tool-link-lookslikeinternal-int": "બાહ્ય કડીઓ",
+ "wikieditor-toolbar-tool-link-lookslikeinternal-int": "આંતરિક કડી",
"wikieditor-toolbar-tool-link-lookslikeinternal-ext": "બાહ્ય કડી",
"wikieditor-toolbar-tool-link-empty": "તમે શોધવા માટે કંઈ દાખલ કર્યું નથી.",
"wikieditor-toolbar-tool-file": "અંદર વણાયેલી (Embedded) ફાઇલ",
@@ -139,25 +137,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "તમે શોધવા માટે કંઈ દાખલ કર્યું નથી.",
"wikieditor-toolbar-tool-replace-invalidregex": "તમે માહિતી મૂકી તે અમાન્ય છે : $1",
"wikieditor-toolbar-section-characters": "ખાસ અક્ષરો કે ચિન્હો",
- "wikieditor-toolbar-characters-page-latin": "લેટિન",
- "wikieditor-toolbar-characters-page-latinextended": "લેટિન વિસ્તૃત",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "સંજ્ઞાઓ",
- "wikieditor-toolbar-characters-page-greek": "ગ્રીક",
- "wikieditor-toolbar-characters-page-cyrillic": "સીરિલિક",
- "wikieditor-toolbar-characters-page-arabic": "અરેબિક",
- "wikieditor-toolbar-characters-page-arabicextended": "અરેબિક વિસ્તૃત",
- "wikieditor-toolbar-characters-page-persian": "પર્સિયન",
- "wikieditor-toolbar-characters-page-hebrew": "હિબ્રૂ",
- "wikieditor-toolbar-characters-page-bangla": "બાંગ્લા",
- "wikieditor-toolbar-characters-page-tamil": "તામિલ",
- "wikieditor-toolbar-characters-page-telugu": "તેલુગુ",
- "wikieditor-toolbar-characters-page-sinhala": "સિંહાલા",
- "wikieditor-toolbar-characters-page-gujarati": "ગુજરાતી",
- "wikieditor-toolbar-characters-page-devanagari": "દેવનાગરી",
- "wikieditor-toolbar-characters-page-thai": "થાઈ",
- "wikieditor-toolbar-characters-page-lao": "લાઓ",
- "wikieditor-toolbar-characters-page-khmer": "ખ્મેર",
"wikieditor-toolbar-section-help": "મદદ",
"wikieditor-toolbar-help-heading-description": "વર્ણન",
"wikieditor-toolbar-help-heading-syntax": "તમે જે લખો",
@@ -203,8 +182,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# યાદી વસ્તુ<br /># યાદી વસ્તુ",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>વસ્તુ યાદી</li><li>વસ્તુ યાદી</li></ol>",
"wikieditor-toolbar-help-content-file-description": "અંદર વણાયેલી (Embedded) ફાઇલ",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|કેપ્શન લખાણ]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Caption text</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "સંદર્ભ",
"wikieditor-toolbar-help-content-reference-syntax": "પાનાં લખાણ.&lt;ref name=\"test\"&gt;[http://www.example.org કડી લખાણ], વધારાનું લખાણ.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "પૃષ્ઠ લેખન.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/gv.json b/extensions/WikiEditor/i18n/gv.json
index d7d1f2b9..e0efc951 100644
--- a/extensions/WikiEditor/i18n/gv.json
+++ b/extensions/WikiEditor/i18n/gv.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"MacTire02",
- "Shimmin Beg"
+ "Shimmin Beg",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "Teks wiki",
@@ -124,22 +125,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Cha dug oo stiagh red erbee dy hirrey.",
"wikieditor-toolbar-tool-replace-invalidregex": "Hug oo stiagh slonn reiltagh gyn vree: $1",
"wikieditor-toolbar-section-characters": "Cowraghyn er lheh",
- "wikieditor-toolbar-characters-page-latin": "Romanagh",
- "wikieditor-toolbar-characters-page-latinextended": "Romanagh sheeynt",
- "wikieditor-toolbar-characters-page-ipa": "ASE",
- "wikieditor-toolbar-characters-page-symbols": "Cowraghyn",
- "wikieditor-toolbar-characters-page-greek": "Greagagh",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrillagh",
- "wikieditor-toolbar-characters-page-arabic": "Arabagh",
- "wikieditor-toolbar-characters-page-persian": "Pershish",
- "wikieditor-toolbar-characters-page-hebrew": "Ewagh",
- "wikieditor-toolbar-characters-page-bangla": "Bengaalish",
- "wikieditor-toolbar-characters-page-telugu": "Telugish",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhalish",
- "wikieditor-toolbar-characters-page-gujarati": "Gujaratish",
- "wikieditor-toolbar-characters-page-thai": "Thaish",
- "wikieditor-toolbar-characters-page-lao": "Laosish",
- "wikieditor-toolbar-characters-page-khmer": "Khmerish",
"wikieditor-toolbar-section-help": "Cooney",
"wikieditor-toolbar-help-heading-description": "Coontey",
"wikieditor-toolbar-help-heading-syntax": "Ny t'ou uss screeu",
@@ -185,8 +170,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Meer rolley<br /># Meer rolley",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Meer rolley</li><li>Meer rolley</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Coadan jingit",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Teks fo-heidyl]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Teks fo-heidyl' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Mooadaghey' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Teks fo-heidyl</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Imraa",
"wikieditor-toolbar-help-content-reference-syntax": "Teks duillag.&lt;ref name=\"test\"&gt;[http://www.example.org Teks kiangley], tooilley teks.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Teks duillag.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/he.json b/extensions/WikiEditor/i18n/he.json
index c55fbcda..55ea291e 100644
--- a/extensions/WikiEditor/i18n/he.json
+++ b/extensions/WikiEditor/i18n/he.json
@@ -5,7 +5,9 @@
"Rotemliss",
"YaronSh",
"Yonidebest",
- "חיים"
+ "חיים",
+ "Guycn2",
+ "Meni181818"
]
},
"wikieditor": "ממשק מתקדם לעריכת טקסט ויקי",
@@ -16,9 +18,6 @@
"wikieditor-preview-tab": "תצוגה מקדימה",
"wikieditor-preview-changes-tab": "שינויים",
"wikieditor-preview-loading": "נטען...",
- "wikieditor-previewDialog-preference": "הפעלת תיבת דו־שיח התצוגה המקדימה",
- "wikieditor-previewDialog-tab": "תצוגה מקדימה",
- "wikieditor-previewDialog-loading": "נטען...",
"wikieditor-publish-preference": "הפעלת פרסום \"צעד־אחר־צעד\"",
"wikieditor-publish-button-publish": "פרסום",
"wikieditor-publish-button-cancel": "ביטול",
@@ -61,7 +60,7 @@
"wikieditor-toolbar-tool-link-int-target-status-loading": "בדיקה האם הדף קיים...",
"wikieditor-toolbar-tool-link-int-target-status-disambig": "דף פירושונים",
"wikieditor-toolbar-tool-link-int-invalid": "הכותרת שצוינה אינה תקינה.",
- "wikieditor-toolbar-tool-link-lookslikeinternal": "הכתובת שציינתם נראית כאילו היא מיועדת לקשר לדף אחר בוויקי. האם ברצונכם להפוך זאת לקישור פנימי?",
+ "wikieditor-toolbar-tool-link-lookslikeinternal": "הכתובת שציינת נראית כאילו היא מיועדת לקשר לדף אחר בוויקי.\nהאם ברצונך להפוך זאת לקישור פנימי?",
"wikieditor-toolbar-tool-link-lookslikeinternal-int": "קישור פנימי",
"wikieditor-toolbar-tool-link-lookslikeinternal-ext": "קישור חיצוני",
"wikieditor-toolbar-tool-link-empty": "לא הזנתם שום דבר לקשר אליו.",
@@ -141,9 +140,9 @@
"wikieditor-toolbar-tool-replace-button-replace": "החלפה",
"wikieditor-toolbar-tool-replace-button-replaceall": "החלפת הכול",
"wikieditor-toolbar-tool-replace-close": "סגירה",
- "wikieditor-toolbar-tool-replace-nomatch": "לא התקבלו התאמות לחיפושכם.",
+ "wikieditor-toolbar-tool-replace-nomatch": "לא התקבלו התאמות לחיפושך.",
"wikieditor-toolbar-tool-replace-success": "{{PLURAL:$1|בוצעה החלפה אחת|בוצעו $1 החלפות}}.",
- "wikieditor-toolbar-tool-replace-emptysearch": "לא כתבתם טקסט לחיפוש.",
+ "wikieditor-toolbar-tool-replace-emptysearch": "לא הזנת טקסט לחיפוש.",
"wikieditor-toolbar-tool-replace-invalidregex": "הביטוי הרגולרי שהוכנס אינו תקין: $1",
"wikieditor-toolbar-section-characters": "תווים מיוחדים",
"wikieditor-toolbar-characters-page-latin": "לטיני",
@@ -155,7 +154,7 @@
"wikieditor-toolbar-characters-page-arabic": "ערבי",
"wikieditor-toolbar-characters-page-arabicextended": "ערבי מורחב",
"wikieditor-toolbar-characters-page-persian": "פרסית",
- "wikieditor-toolbar-characters-page-hebrew": "עברי",
+ "wikieditor-toolbar-characters-page-hebrew": "עברית",
"wikieditor-toolbar-characters-page-bangla": "בנגלית",
"wikieditor-toolbar-characters-page-tamil": "טמילית",
"wikieditor-toolbar-characters-page-telugu": "טלוגו",
@@ -213,8 +212,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# פריט רשימה<br /># פריט רשימה",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>פריט רשימה</li><li>פריט רשימה</li></ol>",
"wikieditor-toolbar-help-content-file-description": "קובץ המוצג בדף",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|טקסט הכותרת]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='טקסט הכותרת' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>טקסט הכותרת</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:דוגמה.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "טקסט הכיתוב",
"wikieditor-toolbar-help-content-reference-description": "הערת שוליים",
"wikieditor-toolbar-help-content-reference-syntax": "טקסט הדף.&lt;ref name=\"test\"&gt;[http://www.example.org טקסט הקישור], טקסט נוסף.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "טקסט הדף.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/hi.json b/extensions/WikiEditor/i18n/hi.json
index 9735da4c..bfc00197 100644
--- a/extensions/WikiEditor/i18n/hi.json
+++ b/extensions/WikiEditor/i18n/hi.json
@@ -4,7 +4,8 @@
"Ansumang",
"Karthi.dr",
"Pooja.srivastava",
- "Siddhartha Ghai"
+ "Siddhartha Ghai",
+ "Macofe"
]
},
"wikieditor": "उन्नत विकितेक्ष्त् संपादन इन्तेर्फचे",
@@ -15,9 +16,6 @@
"wikieditor-preview-tab": "पूर्वावलोकन",
"wikieditor-preview-changes-tab": "बदलाव",
"wikieditor-preview-loading": "लदान्",
- "wikieditor-previewDialog-preference": "सक्श्म्",
- "wikieditor-previewDialog-tab": "पूर्वावलोकन",
- "wikieditor-previewDialog-loading": "लदान्",
"wikieditor-publish-preference": "सक्श्म्",
"wikieditor-publish-button-publish": "प्प्रकाशित करना",
"wikieditor-publish-button-cancel": "रद्द करें",
@@ -122,25 +120,6 @@
"wikieditor-toolbar-tool-replace-nomatch": "आपके खोज कुछ मिला नहीं",
"wikieditor-toolbar-tool-replace-success": "$1 प्रतिस्थापन बनें ।",
"wikieditor-toolbar-section-characters": "विशेष अक्षर",
- "wikieditor-toolbar-characters-page-latin": "लाटिन",
- "wikieditor-toolbar-characters-page-latinextended": "लाटिन विस्तारित",
- "wikieditor-toolbar-characters-page-ipa": "आइपीए",
- "wikieditor-toolbar-characters-page-symbols": "प्रतीक",
- "wikieditor-toolbar-characters-page-greek": "ग्रीक",
- "wikieditor-toolbar-characters-page-cyrillic": "सिरिलिक",
- "wikieditor-toolbar-characters-page-arabic": "अरबी",
- "wikieditor-toolbar-characters-page-arabicextended": "अरबी विस्तारित",
- "wikieditor-toolbar-characters-page-persian": "फार्सी",
- "wikieditor-toolbar-characters-page-hebrew": "हिब्रू",
- "wikieditor-toolbar-characters-page-bangla": "बांग्ला",
- "wikieditor-toolbar-characters-page-tamil": "तमिल",
- "wikieditor-toolbar-characters-page-telugu": "तेलूगू",
- "wikieditor-toolbar-characters-page-sinhala": "सिंहल",
- "wikieditor-toolbar-characters-page-gujarati": "गुजराती",
- "wikieditor-toolbar-characters-page-devanagari": "देवनागरी",
- "wikieditor-toolbar-characters-page-thai": "थाई",
- "wikieditor-toolbar-characters-page-lao": "लाओ",
- "wikieditor-toolbar-characters-page-khmer": "खमेर",
"wikieditor-toolbar-section-help": "सहायता",
"wikieditor-toolbar-help-heading-description": "वर्णन",
"wikieditor-toolbar-help-heading-syntax": "तुम क्या लिखोगे",
@@ -186,8 +165,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# सूची आइटम<br /># सूची आइटम",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>सूची आइटम</li><li>सूची आइटम</li></ol>",
"wikieditor-toolbar-help-content-file-description": "संलग्न फ़ाइल",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:उदाहरण.png|thumb|शीर्षक नाम]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='चौड़ाई:104px;' class='thumbinner'><a title='शीर्षक नाम' class='इमेज' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='बढ़ाना' class='आंतरिक' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>शीर्षक नाम</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:उदाहरण.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "संदर्भ",
"wikieditor-toolbar-help-content-reference-syntax": "पृष्ठ लेख ।&lt;ref name=\"test\"&gt;[http://www.example.org लिंक लेख], अतिरिक्त लेख.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "पृष्ठ लेख ।<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/hr.json b/extensions/WikiEditor/i18n/hr.json
index aa864943..8b9dcf58 100644
--- a/extensions/WikiEditor/i18n/hr.json
+++ b/extensions/WikiEditor/i18n/hr.json
@@ -7,7 +7,8 @@
"Excaliboor",
"MaGa",
"Roberta F.",
- "SpeedyGonsales"
+ "SpeedyGonsales",
+ "Macofe"
]
},
"wikieditor": "Napredno sučelje uređivanja wikiteksta",
@@ -18,10 +19,7 @@
"wikieditor-preview-tab": "Pregled",
"wikieditor-preview-changes-tab": "Promjene",
"wikieditor-preview-loading": "Učitavam…",
- "wikieditor-previewDialog-preference": "Omogući dijalog za pregled",
- "wikieditor-previewDialog-tab": "Pregled kako će stranica izgledati",
- "wikieditor-previewDialog-loading": "Učitavam…",
- "wikieditor-publish-preference": "Omogućiti korak-po-korak izdavanje",
+ "wikieditor-publish-preference": "Omogući postupno objavljivanje",
"wikieditor-publish-button-publish": "Objaviti",
"wikieditor-publish-button-cancel": "Odustani",
"wikieditor-publish-dialog-title": "Objavi na {{GRAMMAR:dajalnik|{{SITENAME}}}}",
@@ -135,22 +133,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Niste unijeli ništa za pretragu.",
"wikieditor-toolbar-tool-replace-invalidregex": "Izraz koji ste unijeli nije ispravan: $1",
"wikieditor-toolbar-section-characters": "Posebni znakovi",
- "wikieditor-toolbar-characters-page-latin": "latinica",
- "wikieditor-toolbar-characters-page-latinextended": "proširena latinica",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "simboli",
- "wikieditor-toolbar-characters-page-greek": "grčki",
- "wikieditor-toolbar-characters-page-cyrillic": "ćirilica",
- "wikieditor-toolbar-characters-page-arabic": "arapski",
- "wikieditor-toolbar-characters-page-persian": "Perzijski",
- "wikieditor-toolbar-characters-page-hebrew": "hebrejski",
- "wikieditor-toolbar-characters-page-bangla": "Bangla znakovi",
- "wikieditor-toolbar-characters-page-telugu": "telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhaleški znakovi",
- "wikieditor-toolbar-characters-page-gujarati": "Gudžaratski znakovi",
- "wikieditor-toolbar-characters-page-thai": "Tajlandski (tajski) znakovi",
- "wikieditor-toolbar-characters-page-lao": "Laoski znakovi",
- "wikieditor-toolbar-characters-page-khmer": "kmerski",
"wikieditor-toolbar-section-help": "Pomoć",
"wikieditor-toolbar-help-heading-description": "Opis",
"wikieditor-toolbar-help-heading-syntax": "Što upisujete",
@@ -196,8 +178,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# stavka popisa<br /># stavka popisa",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>stavka popisa</li><li>stavka popisa</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Uložena datoteka",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Tekst opisa]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Tekst opisa' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Povećaj' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Tekst opisa'</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Bilješke",
"wikieditor-toolbar-help-content-reference-syntax": "Tekst stranice.&lt;ref name=\"test\"&gt;[http://www.primjer.org Tekst poveznice], dodatni tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tekst stranice.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/hsb.json b/extensions/WikiEditor/i18n/hsb.json
index 3ed04ffc..ecb6cc28 100644
--- a/extensions/WikiEditor/i18n/hsb.json
+++ b/extensions/WikiEditor/i18n/hsb.json
@@ -1,7 +1,9 @@
{
"@metadata": {
"authors": [
- "Michawiki"
+ "Michawiki",
+ "Mikławš",
+ "Macofe"
]
},
"wikieditor": "Rozšěrjeny powjerch za wobdźěłowanje wikiteksta",
@@ -12,9 +14,6 @@
"wikieditor-preview-tab": "Přehlad",
"wikieditor-preview-changes-tab": "Změny",
"wikieditor-preview-loading": "Začituje so...",
- "wikieditor-previewDialog-preference": "Dialog za přehlad zmóžnić",
- "wikieditor-previewDialog-tab": "Přehlad",
- "wikieditor-previewDialog-loading": "Začituje so...",
"wikieditor-publish-preference": "Publikowanje krok po kroku zmóžnić",
"wikieditor-publish-button-publish": "Wozjewić",
"wikieditor-publish-button-cancel": "Přetorhnyć",
@@ -141,28 +140,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Njejsy žadyn pytanski wuraz zapodał.",
"wikieditor-toolbar-tool-replace-invalidregex": "Regularny wuraz, kotryž sy zapodał, je njepłaćiwy: $1",
"wikieditor-toolbar-section-characters": "Specialne znamješka",
- "wikieditor-toolbar-characters-page-latin": "Łaćonske",
- "wikieditor-toolbar-characters-page-latinextended": "Łaćonske rozšěrjene",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symbole",
- "wikieditor-toolbar-characters-page-greek": "Grjekske",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyriliske",
- "wikieditor-toolbar-characters-page-arabic": "Arabske",
- "wikieditor-toolbar-characters-page-arabicextended": "Rozšěrjena arabšćina",
- "wikieditor-toolbar-characters-page-persian": "Persiske",
- "wikieditor-toolbar-characters-page-hebrew": "Hebrejske",
- "wikieditor-toolbar-characters-page-bangla": "Bengalšćina",
- "wikieditor-toolbar-characters-page-tamil": "Tamilšćina",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalezišćina",
- "wikieditor-toolbar-characters-page-gujarati": "Gudźarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thailandšćina",
- "wikieditor-toolbar-characters-page-lao": "Laošćina",
- "wikieditor-toolbar-characters-page-khmer": "Khmeršćina",
- "wikieditor-toolbar-characters-endash": "krótka ležaca smužka",
- "wikieditor-toolbar-characters-emdash": "dołha ležaca smužka",
- "wikieditor-toolbar-characters-minus": "minusowe znamješko",
"wikieditor-toolbar-section-help": "Pomoc",
"wikieditor-toolbar-help-heading-description": "Wopisanje",
"wikieditor-toolbar-help-heading-syntax": "Štož zapisuješ",
@@ -208,8 +185,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Lisćinowy zapisk<br /># Lisćinowy zapisk",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Lisćinowy zapisk</li><li>Lisćinowy zapisk</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Zasadźena dataja",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Tekst wobrazoweho popisa]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Tekst wobrazeho popisa' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Powjetšić' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Tekst wobrazoweho popisa</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referenca",
"wikieditor-toolbar-help-content-reference-syntax": "Tekst strony.&lt;ref name=\"test\"&gt;[http://www.example.org tekst wotkaza], přidatny tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tekst strony.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/hu.json b/extensions/WikiEditor/i18n/hu.json
index b2600f03..900940f8 100644
--- a/extensions/WikiEditor/i18n/hu.json
+++ b/extensions/WikiEditor/i18n/hu.json
@@ -8,7 +8,8 @@
"Hunyadym",
"McDutchie",
"Misibacsi",
- "Csega"
+ "Csega",
+ "Macofe"
]
},
"wikieditor": "Fejlett szerkesztőfelület wikiszöveghez",
@@ -19,9 +20,6 @@
"wikieditor-preview-tab": "Előnézet",
"wikieditor-preview-changes-tab": "Változtatások",
"wikieditor-preview-loading": "Betöltés…",
- "wikieditor-previewDialog-preference": "Előnézet párbeszédablak bekapcsolása",
- "wikieditor-previewDialog-tab": "Előnézet",
- "wikieditor-previewDialog-loading": "Betöltés…",
"wikieditor-publish-preference": "Lépésről-lépésre közzététel engedélyezése",
"wikieditor-publish-button-publish": "Közzététel",
"wikieditor-publish-button-cancel": "Mégse",
@@ -146,25 +144,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Nem adtad meg, hogy mit akarsz keresni.",
"wikieditor-toolbar-tool-replace-invalidregex": "A megadott reguláris kifejezés érvénytelen: $1",
"wikieditor-toolbar-section-characters": "Különleges karakterek",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Bővített latin",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Szimbólumok",
- "wikieditor-toolbar-characters-page-greek": "Görög",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirill",
- "wikieditor-toolbar-characters-page-arabic": "Arab",
- "wikieditor-toolbar-characters-page-arabicextended": "Arab (bővített)",
- "wikieditor-toolbar-characters-page-persian": "Perzsa",
- "wikieditor-toolbar-characters-page-hebrew": "Héber",
- "wikieditor-toolbar-characters-page-bangla": "Bengáli",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Szingaléz",
- "wikieditor-toolbar-characters-page-gujarati": "Gudzsaráti",
- "wikieditor-toolbar-characters-page-devanagari": "Dévanágari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Segítség",
"wikieditor-toolbar-help-heading-description": "Leírás",
"wikieditor-toolbar-help-heading-syntax": "Amit be kell írnod",
@@ -210,8 +189,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Listaelem<br /># Listaelem",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Listaelem</li><li>Listaelem</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Beszúrt fájl",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Képaláírás]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='A kép nagyítása' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Képaláírás</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Forráshivatkozás",
"wikieditor-toolbar-help-content-reference-syntax": "Lap szövege.&lt;ref name=\"test\"&gt;[http://www.példaoldal.hu Hivatkozás szövege], további szöveg.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Lap szövege.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/hy.json b/extensions/WikiEditor/i18n/hy.json
index ad6ee925..e1cbe042 100644
--- a/extensions/WikiEditor/i18n/hy.json
+++ b/extensions/WikiEditor/i18n/hy.json
@@ -3,7 +3,8 @@
"authors": [
"Chaojoker",
"Vadgt",
- "Xelgen"
+ "Xelgen",
+ "Macofe"
]
},
"wikieditor-loading": "Բեռնվում է…",
@@ -11,8 +12,6 @@
"wikieditor-preview-tab": "Նախադիտել",
"wikieditor-preview-changes-tab": "Փոփոխություններ",
"wikieditor-preview-loading": "Բեռնում…",
- "wikieditor-previewDialog-tab": "Նախադիտել",
- "wikieditor-previewDialog-loading": "Բեռնում…",
"wikieditor-publish-button-publish": "Հրատարակել",
"wikieditor-publish-button-cancel": "Բեկանել",
"wikieditor-publish-dialog-title": "Հրատարակել {{SITENAME}} նախագծում",
@@ -137,28 +136,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Դուք որոնելու որևէ բան չեք նշել։",
"wikieditor-toolbar-tool-replace-invalidregex": "Ձեր նշած regular expression-ը սխալ է․ $1",
"wikieditor-toolbar-section-characters": "Հատուկ նշաններ",
- "wikieditor-toolbar-characters-page-latin": "Լատիներեն",
- "wikieditor-toolbar-characters-page-latinextended": "Լատիներեն ընդլայնված",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Սիմվոլներ",
- "wikieditor-toolbar-characters-page-greek": "Հունարեն",
- "wikieditor-toolbar-characters-page-cyrillic": "Կիրիլիցա",
- "wikieditor-toolbar-characters-page-arabic": "Արաբերեն",
- "wikieditor-toolbar-characters-page-arabicextended": "Արաբերեն ընդլայնված",
- "wikieditor-toolbar-characters-page-persian": "Պարսկերեն",
- "wikieditor-toolbar-characters-page-hebrew": "Եբրայերեն",
- "wikieditor-toolbar-characters-page-bangla": "Բենգալերեն",
- "wikieditor-toolbar-characters-page-tamil": "Թամիլերեն",
- "wikieditor-toolbar-characters-page-telugu": "Տելուգու",
- "wikieditor-toolbar-characters-page-sinhala": "Սինհալերեն",
- "wikieditor-toolbar-characters-page-gujarati": "Գուջարատի",
- "wikieditor-toolbar-characters-page-devanagari": "Դեվանգարի",
- "wikieditor-toolbar-characters-page-thai": "Թայերեն",
- "wikieditor-toolbar-characters-page-lao": "Լաոերեն",
- "wikieditor-toolbar-characters-page-khmer": "Կխմեր",
- "wikieditor-toolbar-characters-endash": "ո գծիկ (en dash)",
- "wikieditor-toolbar-characters-emdash": "ա գծիկ (em dash)",
- "wikieditor-toolbar-characters-minus": "հանածի նշան",
"wikieditor-toolbar-section-help": "Օգնություն",
"wikieditor-toolbar-help-heading-description": "Նկարագրություն",
"wikieditor-toolbar-help-heading-syntax": "Ինչ եք հավաքում",
@@ -204,8 +181,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Ցանկի տարր<br /># Ցանկի տարր",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Ցանկի տարր</li><li>Ցանկի տարր</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ներկառուցված նիշք",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Նկարագրություն]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Նկարագրություն' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Ընդարձակել' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Նկարագրություն</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Ծանոթագրություն",
"wikieditor-toolbar-help-content-reference-syntax": "Տեքստ էջում&lt;ref name=\"test\"&gt;[http://www.example.org Հղման տեքստ], հավելյալ տեքստ։&lt;/ref&gt;։",
"wikieditor-toolbar-help-content-reference-result": "Տեքստ էջում<sup><a href='#'>[1]</a></sup>։",
diff --git a/extensions/WikiEditor/i18n/ia.json b/extensions/WikiEditor/i18n/ia.json
index 43f3d474..7614a5c1 100644
--- a/extensions/WikiEditor/i18n/ia.json
+++ b/extensions/WikiEditor/i18n/ia.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "McDutchie"
+ "McDutchie",
+ "Macofe"
]
},
"wikieditor": "Interfacie avantiate de modification de wikitexto",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Previsualisation",
"wikieditor-preview-changes-tab": "Modificationes",
"wikieditor-preview-loading": "Cargamento...",
- "wikieditor-previewDialog-preference": "Activar le dialogo de previsualisation",
- "wikieditor-previewDialog-tab": "Previsualisation",
- "wikieditor-previewDialog-loading": "Cargamento...",
"wikieditor-publish-preference": "Activar publication passo a passo",
"wikieditor-publish-button-publish": "Publicar",
"wikieditor-publish-button-cancel": "Cancellar",
@@ -141,26 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Tu non entrava texto a cercar.",
"wikieditor-toolbar-tool-replace-invalidregex": "Le expression regular que tu entrava es invalide: $1",
"wikieditor-toolbar-section-characters": "Characteres special",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin extendite",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symbolos",
- "wikieditor-toolbar-characters-page-greek": "Greco",
- "wikieditor-toolbar-characters-page-cyrillic": "Cyrillic",
- "wikieditor-toolbar-characters-page-arabic": "Arabe",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabe extendite",
- "wikieditor-toolbar-characters-page-persian": "Persiano",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreo",
- "wikieditor-toolbar-characters-page-bangla": "Bengali",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanāgarī",
- "wikieditor-toolbar-characters-page-thai": "Thailandese",
- "wikieditor-toolbar-characters-page-lao": "Laotiano",
- "wikieditor-toolbar-characters-page-khmer": "Cambodgiano",
- "wikieditor-toolbar-characters-minus": "signo minus",
"wikieditor-toolbar-section-help": "Adjuta",
"wikieditor-toolbar-help-heading-description": "Description",
"wikieditor-toolbar-help-heading-syntax": "Entrata",
@@ -206,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elemento del lista<br /># Elemento del lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elemento del lista</li><li>Elemento del lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "File incastrate",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|thumb|Texto del legenda]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Texto del legenda' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Texto del legenda</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referentia",
"wikieditor-toolbar-help-content-reference-syntax": "Texto del pagina.&lt;ref name=\"test\"&gt;[http://www.example.org Texto del ligamine], texto additional.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Texto del pagina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/id.json b/extensions/WikiEditor/i18n/id.json
index 0f4a0b06..a7a8d0f1 100644
--- a/extensions/WikiEditor/i18n/id.json
+++ b/extensions/WikiEditor/i18n/id.json
@@ -6,7 +6,9 @@
"Irwangatot",
"IvanLanin",
"Iwan Novirion",
- "Kenrick95"
+ "Kenrick95",
+ "William Surya Permana",
+ "Macofe"
]
},
"wikieditor": "Antarmuka penyuntingan teks wiki canggih",
@@ -17,9 +19,6 @@
"wikieditor-preview-tab": "Pratayang",
"wikieditor-preview-changes-tab": "Perubahan",
"wikieditor-preview-loading": "Mengunggah...",
- "wikieditor-previewDialog-preference": "Izinkan kotak pratayang",
- "wikieditor-previewDialog-tab": "Pratayang",
- "wikieditor-previewDialog-loading": "Mengunggah...",
"wikieditor-publish-preference": "Aktifkan penerbitan langkah demi langkah",
"wikieditor-publish-button-publish": "Terbitkan",
"wikieditor-publish-button-cancel": "Batalkan",
@@ -81,7 +80,7 @@
"wikieditor-toolbar-tool-reference-example": "Sisipkan teks catatan kaki di sini",
"wikieditor-toolbar-tool-reference-cancel": "Batalkan",
"wikieditor-toolbar-tool-reference-title": "Masukkan referensi",
- "wikieditor-toolbar-tool-reference-insert": "Masukkan",
+ "wikieditor-toolbar-tool-reference-insert": "Sisipkan",
"wikieditor-toolbar-tool-reference-text": "Teks referensi",
"wikieditor-toolbar-tool-signature": "Tanda tangan dan waktu",
"wikieditor-toolbar-section-advanced": "Lanjutan",
@@ -145,28 +144,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Anda tidak memasukan apa pun untuk di pencarian.",
"wikieditor-toolbar-tool-replace-invalidregex": "Kalimat biasa yang Anda masukkan tidak sah: $1",
"wikieditor-toolbar-section-characters": "Karakter spesial",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Ekstensi Latin",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simbol",
- "wikieditor-toolbar-characters-page-greek": "Yunani",
- "wikieditor-toolbar-characters-page-cyrillic": "Sirilik",
- "wikieditor-toolbar-characters-page-arabic": "Arab",
- "wikieditor-toolbar-characters-page-arabicextended": "Arab tambahan",
- "wikieditor-toolbar-characters-page-persian": "Persia",
- "wikieditor-toolbar-characters-page-hebrew": "Ibrani",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Dewanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "en dash",
- "wikieditor-toolbar-characters-emdash": "em dash",
- "wikieditor-toolbar-characters-minus": "tanda kurang",
"wikieditor-toolbar-section-help": "Bantuan",
"wikieditor-toolbar-help-heading-description": "Keterangan",
"wikieditor-toolbar-help-heading-syntax": "Yang Anda ketikkan",
@@ -212,8 +189,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Isi daftar<br /># Isi daftar",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Isi daftar</li><li>Isi daftar</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Menyisipkan berkas",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Contoh.png|thumb|Teks judul gambar]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Teks judul gambar' class='image' href='/wiki/Berkas:Wiki.png'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Perbesar' class='internal' href='/wiki/Berkas:Wiki.png'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Teks judul gambar</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Contoh.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referensi",
"wikieditor-toolbar-help-content-reference-syntax": "Teks halaman.&lt;ref name=\"test\"&gt;[http://www.contoh.org Teks pranala], teks tambahan.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Teks halaman.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ilo.json b/extensions/WikiEditor/i18n/ilo.json
index 268894d4..88c3481c 100644
--- a/extensions/WikiEditor/i18n/ilo.json
+++ b/extensions/WikiEditor/i18n/ilo.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Lam-ang"
+ "Lam-ang",
+ "Macofe"
]
},
"wikieditor": "Napasayaat a wikitext nga interface ti panagurnos",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Ipadas",
"wikieditor-preview-changes-tab": "Dagiti sinukatan",
"wikieditor-preview-loading": "Agkarkarga...",
- "wikieditor-previewDialog-preference": "Pakabaelan ti panakisinnarita a panagipadas",
- "wikieditor-previewDialog-tab": "Ipadas",
- "wikieditor-previewDialog-loading": "Agkarkarga...",
"wikieditor-publish-preference": "Pakabaelan ti naiyaddang a panagipablaak",
"wikieditor-publish-button-publish": "Ipablaak",
"wikieditor-publish-button-cancel": "Ukasen",
@@ -141,28 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Awan ti inkabilmo a biruken.",
"wikieditor-toolbar-tool-replace-invalidregex": "Ti kadawyan a panangisao nga inkabilmo ket imbalido: $1",
"wikieditor-toolbar-section-characters": "Dagiti naipangpangruna a karakter",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin napaatiddog",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Dagiti simbolo",
- "wikieditor-toolbar-characters-page-greek": "Griego",
- "wikieditor-toolbar-characters-page-cyrillic": "Siriliko",
- "wikieditor-toolbar-characters-page-arabic": "Arabiko",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabiko a napaatiddog",
- "wikieditor-toolbar-characters-page-persian": "Persiano",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreo",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "en dash",
- "wikieditor-toolbar-characters-emdash": "em dash",
- "wikieditor-toolbar-characters-minus": "senial a panagkissay",
"wikieditor-toolbar-section-help": "Tulong",
"wikieditor-toolbar-help-heading-description": "Panagipalpalawag",
"wikieditor-toolbar-help-heading-syntax": "Ti imakiniliam",
@@ -208,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Ilista ti banag<br /># Ilista ti banag",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Ilista ti banag</li><li>Ilista ti banag</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Naisengngat a papeles",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Naisurat a testo]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Naisurat a testo' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Padakkelen' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Naisurat a testo</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Pinagibasaran",
"wikieditor-toolbar-help-content-reference-syntax": "Testo ti panid.&lt;ref name=\"test\"&gt;[http://www.example.org Testo ti panilpo], nainayon a testo.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Testo ti panid.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/is.json b/extensions/WikiEditor/i18n/is.json
index e5e77717..58f5a228 100644
--- a/extensions/WikiEditor/i18n/is.json
+++ b/extensions/WikiEditor/i18n/is.json
@@ -3,7 +3,8 @@
"authors": [
"Krun",
"Maxí",
- "Snævar"
+ "Snævar",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "Wiki-texti",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Forskoða",
"wikieditor-preview-changes-tab": "Breytingar",
"wikieditor-preview-loading": "Hleð...",
- "wikieditor-previewDialog-preference": "Virkja forskoðunar valmynd",
- "wikieditor-previewDialog-tab": "Forskoða",
- "wikieditor-previewDialog-loading": "Hleð...",
"wikieditor-publish-preference": "Virkja skref-eftir-skref útgáfu",
"wikieditor-publish-button-publish": "Útgefa",
"wikieditor-publish-button-cancel": "Hætta við",
@@ -138,23 +136,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Þú slóst ekki inn neitt til að leita að.",
"wikieditor-toolbar-tool-replace-invalidregex": "Ógild regluleg segð: $1",
"wikieditor-toolbar-section-characters": "Sérstafir",
- "wikieditor-toolbar-characters-page-latin": "Latneskt",
- "wikieditor-toolbar-characters-page-latinextended": "Aukið latneskt",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Tákn",
- "wikieditor-toolbar-characters-page-greek": "Grískt",
- "wikieditor-toolbar-characters-page-cyrillic": "Kýrillískt",
- "wikieditor-toolbar-characters-page-arabic": "Arabískt",
- "wikieditor-toolbar-characters-page-arabicextended": "Aukið arabískt",
- "wikieditor-toolbar-characters-page-persian": "Persneskt",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreskt",
- "wikieditor-toolbar-characters-page-bangla": "Bengalskt",
- "wikieditor-toolbar-characters-page-tamil": "Tamílska",
- "wikieditor-toolbar-characters-page-telugu": "Telúgú",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhalskt",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Taílenskt",
- "wikieditor-toolbar-characters-page-lao": "Laoskt",
"wikieditor-toolbar-section-help": "Hjálp",
"wikieditor-toolbar-help-heading-description": "Lýsing",
"wikieditor-toolbar-help-heading-syntax": "Það sem þú skrifar",
@@ -200,8 +181,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Lista atriði<br /># Lista atriði",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Lista atriði</li><li>Lista atriði</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Bæta við mynd",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Myndlýsing]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Myndlýsing' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Stækka' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Myndlýsing</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Tilvísun",
"wikieditor-toolbar-help-content-reference-syntax": "Texti síðu.&lt;ref name=\"test\"&gt;[http://www.example.org Titill síðu], Skoðað 1. janúar 2010.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Texti síðu.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/it.json b/extensions/WikiEditor/i18n/it.json
index 486296a4..cdeafc2c 100644
--- a/extensions/WikiEditor/i18n/it.json
+++ b/extensions/WikiEditor/i18n/it.json
@@ -12,7 +12,8 @@
"Nemo bis",
"PaoloRomano",
"Una giornata uggiosa '94",
- "Vituzzu"
+ "Vituzzu",
+ "Toadino2"
]
},
"wikieditor": "Interfaccia avanzata di modifica del wikitesto",
@@ -23,9 +24,6 @@
"wikieditor-preview-tab": "Anteprima",
"wikieditor-preview-changes-tab": "Modifiche",
"wikieditor-preview-loading": "Caricamento in corso...",
- "wikieditor-previewDialog-preference": "Abilita la finestra di dialogo di anteprima",
- "wikieditor-previewDialog-tab": "Anteprima",
- "wikieditor-previewDialog-loading": "Caricamento in corso...",
"wikieditor-publish-preference": "Abilita pubblicazione passo dopo passo",
"wikieditor-publish-button-publish": "Pubblica",
"wikieditor-publish-button-cancel": "Annulla",
@@ -219,8 +217,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elemento dell'elenco<br /># Elemento dell'elenco",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elemento dell'elenco</li><li>Elemento dell'elenco</li></ol>",
"wikieditor-toolbar-help-content-file-description": "File incorporato",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Esempio.png|thumb|Testo della didascalia]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Testo della didascalia</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Esempio.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Testo della didascalia",
"wikieditor-toolbar-help-content-reference-description": "Nota",
"wikieditor-toolbar-help-content-reference-syntax": "Testo della pagina.&lt;ref name=\"test\"&gt;[http://www.example.org Testo del collegamento], testo aggiuntivo.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Testo della pagina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ja.json b/extensions/WikiEditor/i18n/ja.json
index b579d731..c82a3042 100644
--- a/extensions/WikiEditor/i18n/ja.json
+++ b/extensions/WikiEditor/i18n/ja.json
@@ -10,7 +10,8 @@
"Shirayuki",
"Whym",
"青子守歌",
- "Rxy"
+ "Rxy",
+ "Macofe"
]
},
"wikieditor": "高度なウィキテキスト編集インターフェイス",
@@ -21,9 +22,6 @@
"wikieditor-preview-tab": "プレビュー",
"wikieditor-preview-changes-tab": "差分",
"wikieditor-preview-loading": "読み込み中...",
- "wikieditor-previewDialog-preference": "プレビューダイアログを有効にする",
- "wikieditor-previewDialog-tab": "プレビュー",
- "wikieditor-previewDialog-loading": "読み込み中...",
"wikieditor-publish-preference": "段階的投稿を有効にする",
"wikieditor-publish-button-publish": "投稿",
"wikieditor-publish-button-cancel": "中止",
@@ -150,28 +148,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "検索するものを何も入力していません。",
"wikieditor-toolbar-tool-replace-invalidregex": "入力された正規表現に誤りがあります: $1",
"wikieditor-toolbar-section-characters": "特殊文字",
- "wikieditor-toolbar-characters-page-latin": "ラテン文字",
- "wikieditor-toolbar-characters-page-latinextended": "ラテン文字拡張",
- "wikieditor-toolbar-characters-page-ipa": "国際音声記号",
- "wikieditor-toolbar-characters-page-symbols": "記号",
- "wikieditor-toolbar-characters-page-greek": "ギリシア文字",
- "wikieditor-toolbar-characters-page-cyrillic": "キリル文字",
- "wikieditor-toolbar-characters-page-arabic": "アラビア文字",
- "wikieditor-toolbar-characters-page-arabicextended": "アラビア文字拡張",
- "wikieditor-toolbar-characters-page-persian": "ペルシア文字",
- "wikieditor-toolbar-characters-page-hebrew": "ヘブライ文字",
- "wikieditor-toolbar-characters-page-bangla": "ベンガル文字",
- "wikieditor-toolbar-characters-page-tamil": "タミール",
- "wikieditor-toolbar-characters-page-telugu": "テルグ文字",
- "wikieditor-toolbar-characters-page-sinhala": "シンハラ文字",
- "wikieditor-toolbar-characters-page-gujarati": "グジャラート文字",
- "wikieditor-toolbar-characters-page-devanagari": "デーヴァナーガリー文字",
- "wikieditor-toolbar-characters-page-thai": "タイ文字",
- "wikieditor-toolbar-characters-page-lao": "ラオス文字",
- "wikieditor-toolbar-characters-page-khmer": "クメール文字",
- "wikieditor-toolbar-characters-endash": "en ダッシュ",
- "wikieditor-toolbar-characters-emdash": "em ダッシュ",
- "wikieditor-toolbar-characters-minus": "マイナス記号",
"wikieditor-toolbar-section-help": "ヘルプ",
"wikieditor-toolbar-help-heading-description": "解説",
"wikieditor-toolbar-help-heading-syntax": "入力内容",
@@ -217,8 +193,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# 箇条書き項目<br /># 箇条書き項目",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>箇条書き項目</li><li>箇条書き項目</li></ol>",
"wikieditor-toolbar-help-content-file-description": "埋め込みファイル",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|キャプション]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='キャプション' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='拡大' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>キャプション</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "注釈",
"wikieditor-toolbar-help-content-reference-syntax": "ページ本文&lt;ref name=\"test\"&gt;[http://www.example.org リンクタイトル]、追加テキスト&lt;/ref&gt;。",
"wikieditor-toolbar-help-content-reference-result": "ページ本文<sup><a href='#'>[1]</a></sup>。",
diff --git a/extensions/WikiEditor/i18n/jv.json b/extensions/WikiEditor/i18n/jv.json
index 14f52180..880b8fa3 100644
--- a/extensions/WikiEditor/i18n/jv.json
+++ b/extensions/WikiEditor/i18n/jv.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Meursault2004",
- "NoiX180"
+ "NoiX180",
+ "Macofe"
]
},
"wikieditor": "Antarmuka panyuntingan tèks wiki canggih",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Pratayang",
"wikieditor-preview-changes-tab": "Owah-owahan",
"wikieditor-preview-loading": "Ngemot...",
- "wikieditor-previewDialog-preference": "Urubaké dialog pratayang",
- "wikieditor-previewDialog-tab": "Pratayang",
- "wikieditor-previewDialog-loading": "Ngemot...",
"wikieditor-publish-preference": "Urubaké panerbitan tahap mbaka tahap",
"wikieditor-publish-button-publish": "Terbitaké",
"wikieditor-publish-button-cancel": "Batalna",
@@ -139,25 +137,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Sampéyan ora nglebokaké apa-apa kanggo digolèki.",
"wikieditor-toolbar-tool-replace-invalidregex": "Èkspresi biasa sing Sampéyan lebokaké ora sah: $1",
"wikieditor-toolbar-section-characters": "Karakter kusus",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin pepak",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simbol",
- "wikieditor-toolbar-characters-page-greek": "Yunani",
- "wikieditor-toolbar-characters-page-cyrillic": "Srilik",
- "wikieditor-toolbar-characters-page-arabic": "Arab",
- "wikieditor-toolbar-characters-page-arabicextended": "Arab pepak",
- "wikieditor-toolbar-characters-page-persian": "Persia",
- "wikieditor-toolbar-characters-page-hebrew": "Ibrani",
- "wikieditor-toolbar-characters-page-bangla": "Bengali",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarat",
- "wikieditor-toolbar-characters-page-devanagari": "Dewanagari",
- "wikieditor-toolbar-characters-page-thai": "Thailand",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Pitulung",
"wikieditor-toolbar-help-heading-description": "Wedharan",
"wikieditor-toolbar-help-heading-syntax": "Sing Sampéyan tulis",
@@ -203,7 +182,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Baranging daptar<br /># Baranging daptar",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Baranging daptar</li><li>Baranging daptar</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Berkas kasisipaké",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Conto.png|gambar|Tulisan katrangan]]",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Conto.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Rujukan",
"wikieditor-toolbar-help-content-reference-syntax": "Tèks kaca.&lt;ref name=\"test\"&gt;[http://www.conto.org Tèks pranala], tèks tambahan.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tèks kaca.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ka.json b/extensions/WikiEditor/i18n/ka.json
index e7babb2c..37873bf5 100644
--- a/extensions/WikiEditor/i18n/ka.json
+++ b/extensions/WikiEditor/i18n/ka.json
@@ -5,7 +5,8 @@
"David1010",
"Dawid Deutschland",
"ITshnik",
- "გიორგიმელა"
+ "გიორგიმელა",
+ "Macofe"
]
},
"wikieditor": "ვიკიტექსტის რედაქტირების გაფართოებული ინტერფეისი",
@@ -16,9 +17,6 @@
"wikieditor-preview-tab": "წინასწარ",
"wikieditor-preview-changes-tab": "ცვლილებები",
"wikieditor-preview-loading": "იტვირთება...",
- "wikieditor-previewDialog-preference": "წინასწარი გადახედვის დიალოგის ჩართვა",
- "wikieditor-previewDialog-tab": "წინასწარ",
- "wikieditor-previewDialog-loading": "იტვირთება...",
"wikieditor-publish-preference": "ჩართეთ ნაბიჯ-ნაბიჯი პუბლიკაცია",
"wikieditor-publish-button-publish": "გამოქვეყნება",
"wikieditor-publish-button-cancel": "გაუქმება",
@@ -144,28 +142,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "თქვენ არ მიუთითეთ საძიებელი.",
"wikieditor-toolbar-tool-replace-invalidregex": "თქვენს მიერ შეტანილი რეგულარული გამოსახულება არასწორია: $1",
"wikieditor-toolbar-section-characters": "სპეციალური სიმბოლოები",
- "wikieditor-toolbar-characters-page-latin": "ლათინური",
- "wikieditor-toolbar-characters-page-latinextended": "ლათინური გაფართოება",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "სიმბოლოები",
- "wikieditor-toolbar-characters-page-greek": "ბერძნული",
- "wikieditor-toolbar-characters-page-cyrillic": "კირილიცა",
- "wikieditor-toolbar-characters-page-arabic": "არაბული",
- "wikieditor-toolbar-characters-page-arabicextended": "არაბული გაფართოება",
- "wikieditor-toolbar-characters-page-persian": "სპარსული",
- "wikieditor-toolbar-characters-page-hebrew": "ებრაული",
- "wikieditor-toolbar-characters-page-bangla": "ბენგალური",
- "wikieditor-toolbar-characters-page-tamil": "ტამილური",
- "wikieditor-toolbar-characters-page-telugu": "ტელუგუ",
- "wikieditor-toolbar-characters-page-sinhala": "სინგალური",
- "wikieditor-toolbar-characters-page-gujarati": "გუჯარათი",
- "wikieditor-toolbar-characters-page-devanagari": "დევანაგარი",
- "wikieditor-toolbar-characters-page-thai": "ტაილანდური",
- "wikieditor-toolbar-characters-page-lao": "ლაოსური",
- "wikieditor-toolbar-characters-page-khmer": "ქჰმერული",
- "wikieditor-toolbar-characters-endash": "ტირე",
- "wikieditor-toolbar-characters-emdash": "გრძელი ტირე",
- "wikieditor-toolbar-characters-minus": "მინუსის ნიშანი",
"wikieditor-toolbar-section-help": "დახმარება",
"wikieditor-toolbar-help-heading-description": "აღწერა",
"wikieditor-toolbar-help-heading-syntax": "რას ბეჭდავთ",
@@ -211,8 +187,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "#სიის ელემენტი<br /># სიის ელემენტი",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>სიის ელემენტი</li><li>სიის ელემენტი</li></ol>",
"wikieditor-toolbar-help-content-file-description": "ჩასმული ფაილი",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|წარწერის ტექსტი]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='წარწერის ტექსტი' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>წარწერის ტექსტი</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "მინიშნება",
"wikieditor-toolbar-help-content-reference-syntax": "გვერდის ტექსტი&lt;ref name=\"test\"&gt;[http://www.example.org ბმულის ტექსტი], დამატებითი ტექსტი.&lt;/ref&gt;.",
"wikieditor-toolbar-help-content-reference-result": "გვერდის ტექსტი<sup><a href='#'>[1]</a></sup>.",
diff --git a/extensions/WikiEditor/i18n/kk-cyrl.json b/extensions/WikiEditor/i18n/kk-cyrl.json
index 8d2956b1..c7d3e8d9 100644
--- a/extensions/WikiEditor/i18n/kk-cyrl.json
+++ b/extensions/WikiEditor/i18n/kk-cyrl.json
@@ -12,9 +12,6 @@
"wikieditor-preview-tab": "Қарап шығу",
"wikieditor-preview-changes-tab": "Өзгерістер",
"wikieditor-preview-loading": "Күте тұр...",
- "wikieditor-previewDialog-preference": "Қарап шығу диалогын қосу",
- "wikieditor-previewDialog-tab": "Қарап шығу",
- "wikieditor-previewDialog-loading": "Күте тұр...",
"wikieditor-publish-preference": "Саты-сатысымен жариялауды қосу",
"wikieditor-publish-button-publish": "Жариялау",
"wikieditor-publish-button-cancel": "Болдырмау",
@@ -137,7 +134,7 @@
"wikieditor-toolbar-tool-replace-button-replaceall": "Барлығын алмастыру",
"wikieditor-toolbar-tool-replace-close": "Жабу",
"wikieditor-toolbar-tool-replace-nomatch": "Сіздің сұрауыңыз бойынша еш нәрсе табылмады.",
- "wikieditor-toolbar-tool-replace-success": "$1 {{PLURAL:$1|алмастыру|алмастырулар}} жасалды.",
+ "wikieditor-toolbar-tool-replace-success": "$1 {{PLURAL:$1|алмастыру|алмастыру}} жасалды.",
"wikieditor-toolbar-tool-replace-emptysearch": "Іздеу үшін ештеңе енгізбедіңіз.",
"wikieditor-toolbar-tool-replace-invalidregex": "Сіз енгізген жүйелі айтылым жарамды емес: $1",
"wikieditor-toolbar-section-characters": "Арнайы таңбалар",
@@ -208,8 +205,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Элемент тізімі<br /># Элемент тізімі",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Элемент тізімі</li><li>Элемент тізімі</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Файл орнату",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Файл тақырыбы]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Тақырып мәтіні</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Файл тақырыбы",
"wikieditor-toolbar-help-content-reference-description": "Дереккөз",
"wikieditor-toolbar-help-content-reference-syntax": "Бет мәтіні.&lt;ref name=\"test\"&gt;[http://www.мысал.org Сілтеме мәтіні], қосымша мәтін.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Бет мәтіні.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/km.json b/extensions/WikiEditor/i18n/km.json
index fb704c43..52c53583 100644
--- a/extensions/WikiEditor/i18n/km.json
+++ b/extensions/WikiEditor/i18n/km.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "គីមស៊្រុន"
+ "គីមស៊្រុន",
+ "Macofe"
]
},
"wikieditor": "អន្តរមុខសំរាប់កែប្រែអត្ថបទវិគីថ្នាក់ខ្ពស់",
@@ -11,8 +12,6 @@
"wikieditor-preview-tab": "ការមើលមុន",
"wikieditor-preview-changes-tab": "បំលាស់ប្ដូរ",
"wikieditor-preview-loading": "កំពុងផ្ទុក…",
- "wikieditor-previewDialog-tab": "ការមើលមុន",
- "wikieditor-previewDialog-loading": "កំពុងផ្ទុក…",
"wikieditor-publish-preference": "ប្រើការផ្សព្វផ្យាយជាដំណាក់ៗ",
"wikieditor-publish-button-publish": "បោះផ្សាយ",
"wikieditor-publish-button-cancel": "បោះបង់",
@@ -122,23 +121,6 @@
"wikieditor-toolbar-tool-replace-success": "បានធ្វើការជំនួសចំនួន $1។",
"wikieditor-toolbar-tool-replace-emptysearch": "អ្នកមិនបានវាយបញ្ចូលពាក្យសំរាប់ស្វែងរកទេ។",
"wikieditor-toolbar-section-characters": "តួអក្សរពិសេសៗ",
- "wikieditor-toolbar-characters-page-latin": "អក្សរឡាតាំង",
- "wikieditor-toolbar-characters-page-latinextended": "អក្សរឡាតាំងផ្សេងទៀត",
- "wikieditor-toolbar-characters-page-ipa": "អក្ខរក្រមសំលេងអន្តរជាតិ",
- "wikieditor-toolbar-characters-page-symbols": "សញ្ញា",
- "wikieditor-toolbar-characters-page-greek": "អក្សរក្រិច",
- "wikieditor-toolbar-characters-page-cyrillic": "អក្សរស៊ីរីល",
- "wikieditor-toolbar-characters-page-arabic": "អក្សរអារ៉ាប់",
- "wikieditor-toolbar-characters-page-arabicextended": "អក្សរអារ៉ាប់បន្ថែម",
- "wikieditor-toolbar-characters-page-persian": "អក្សរពែក្ស",
- "wikieditor-toolbar-characters-page-hebrew": "អក្សរហេប៊្រូ",
- "wikieditor-toolbar-characters-page-bangla": "អក្សរបេងក្លា",
- "wikieditor-toolbar-characters-page-telugu": "អក្សរតិលគ្គ",
- "wikieditor-toolbar-characters-page-sinhala": "អក្សរស៊ិនហាឡា",
- "wikieditor-toolbar-characters-page-gujarati": "អក្សរគុចរទី",
- "wikieditor-toolbar-characters-page-thai": "អក្សរថៃ",
- "wikieditor-toolbar-characters-page-lao": "អក្សរឡាវ",
- "wikieditor-toolbar-characters-page-khmer": "អក្សរខ្មែរ",
"wikieditor-toolbar-section-help": "ជំនួយ",
"wikieditor-toolbar-help-heading-description": "ការពិពណ៌នា",
"wikieditor-toolbar-help-heading-syntax": "អ្វីដែលអ្នកវាយបញ្ចូល",
@@ -184,8 +166,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# ធាតុរបស់បញ្ជី<br /># ធាតុរបស់បញ្ចី",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>ធាតុរបស់បញ្ជី</li><li>ធាតុរបស់បញ្ជី</li></ol>",
"wikieditor-toolbar-help-content-file-description": "រូបភាពបង្កប់",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:ឧទាហរណ៍.png|thumb|ចំនងជើងក្រោមរូបភាព]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='ចំណងជើងក្រោមរូបភាព' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='ពង្រីក' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>ចំណងជើងក្រោមរូបភាព</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:ឧទាហរណ៍.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "ឯកសារ​យោង​",
"wikieditor-toolbar-help-content-reference-syntax": "អត្ថបទ​ទំព័រ​.&lt;ref name=\"test\"&gt;[http://www.example.org តំណ​ភ្ជាប់], អក្សរ​បន្ថែម​.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "អត្ថបទ​ទំព័រ​.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ko.json b/extensions/WikiEditor/i18n/ko.json
index af39a094..bf093b47 100644
--- a/extensions/WikiEditor/i18n/ko.json
+++ b/extensions/WikiEditor/i18n/ko.json
@@ -9,7 +9,8 @@
"Mintz0223",
"Priviet",
"관인생략",
- "아라"
+ "아라",
+ "Macofe"
]
},
"wikieditor": "확장된 위키텍스트 편집 인터페이스",
@@ -20,9 +21,6 @@
"wikieditor-preview-tab": "미리 보기",
"wikieditor-preview-changes-tab": "차이",
"wikieditor-preview-loading": "불러오는 중...",
- "wikieditor-previewDialog-preference": "미리 보기 대화 상자 사용하기",
- "wikieditor-previewDialog-tab": "미리 보기",
- "wikieditor-previewDialog-loading": "불러오는 중...",
"wikieditor-publish-preference": "한 단계씩 게시 활성화",
"wikieditor-publish-button-publish": "게시",
"wikieditor-publish-button-cancel": "취소",
@@ -145,32 +143,10 @@
"wikieditor-toolbar-tool-replace-button-replaceall": "모두 바꾸기",
"wikieditor-toolbar-tool-replace-close": "닫기",
"wikieditor-toolbar-tool-replace-nomatch": "일치하는 문자열을 찾지 못했습니다.",
- "wikieditor-toolbar-tool-replace-success": "$1회 {{PLURAL:$1|바꿨습니다}}.",
+ "wikieditor-toolbar-tool-replace-success": "$1번 {{PLURAL:$1|바꿨습니다}}.",
"wikieditor-toolbar-tool-replace-emptysearch": "찾을 문자열을 입력하지 않았습니다.",
"wikieditor-toolbar-tool-replace-invalidregex": "입력한 정규 표현식이 잘못되었습니다: $1",
"wikieditor-toolbar-section-characters": "특수 문자",
- "wikieditor-toolbar-characters-page-latin": "라틴 문자",
- "wikieditor-toolbar-characters-page-latinextended": "확장 라틴 문자",
- "wikieditor-toolbar-characters-page-ipa": "IPA 문자",
- "wikieditor-toolbar-characters-page-symbols": "기호",
- "wikieditor-toolbar-characters-page-greek": "그리스 문자",
- "wikieditor-toolbar-characters-page-cyrillic": "키릴 문자",
- "wikieditor-toolbar-characters-page-arabic": "아랍 문자",
- "wikieditor-toolbar-characters-page-arabicextended": "아랍어 확장",
- "wikieditor-toolbar-characters-page-persian": "페르시아어",
- "wikieditor-toolbar-characters-page-hebrew": "히브리 문자",
- "wikieditor-toolbar-characters-page-bangla": "뱅골어",
- "wikieditor-toolbar-characters-page-tamil": "타밀어",
- "wikieditor-toolbar-characters-page-telugu": "텔루구어 문자",
- "wikieditor-toolbar-characters-page-sinhala": "싱할라 문자",
- "wikieditor-toolbar-characters-page-gujarati": "구자라트 문자",
- "wikieditor-toolbar-characters-page-devanagari": "데바나가리어",
- "wikieditor-toolbar-characters-page-thai": "타이어",
- "wikieditor-toolbar-characters-page-lao": "라오어",
- "wikieditor-toolbar-characters-page-khmer": "크메르어",
- "wikieditor-toolbar-characters-endash": "en 대시",
- "wikieditor-toolbar-characters-emdash": "em 대시",
- "wikieditor-toolbar-characters-minus": "빼기 기호",
"wikieditor-toolbar-section-help": "도움말",
"wikieditor-toolbar-help-heading-description": "설명",
"wikieditor-toolbar-help-heading-syntax": "입력하는 내용",
@@ -216,8 +192,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# 목록 항목<br /># 목록 항목",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>목록 항목</li><li>목록 항목</li></ol>",
"wikieditor-toolbar-help-content-file-description": "파일 넣기",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|그림 설명]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='실제 크기로' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>그림 설명</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "출처",
"wikieditor-toolbar-help-content-reference-syntax": "문서 내용.&lt;ref name=\"test\"&gt;[http://www.example.org 링크 제목], 기타 설명.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "문서 내용.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/krc.json b/extensions/WikiEditor/i18n/krc.json
index 469c92e6..bb4cc3db 100644
--- a/extensions/WikiEditor/i18n/krc.json
+++ b/extensions/WikiEditor/i18n/krc.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Iltever",
- "Къарачайлы"
+ "Къарачайлы",
+ "Macofe"
]
},
"wikieditor": "Викитекст редакторлауну кенгертилген интерфейси",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Ал къарау",
"wikieditor-preview-changes-tab": "Тюрлениуле",
"wikieditor-preview-loading": "Джюклениу...",
- "wikieditor-previewDialog-preference": "Ал къарау диалогну джандыр",
- "wikieditor-previewDialog-tab": "Ал къарау",
- "wikieditor-previewDialog-loading": "Джюклеу...",
"wikieditor-publish-preference": "Атлам-атлам чыгъарыуну джандыр",
"wikieditor-publish-button-publish": "Чыгъар",
"wikieditor-publish-button-cancel": "Ызына алыу",
@@ -141,27 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Нени излерге керек болгъанын белгилемегенсиз.",
"wikieditor-toolbar-tool-replace-invalidregex": "Сиз джазгъан регуляр выражение терсди: $1",
"wikieditor-toolbar-section-characters": "Энчи символла",
- "wikieditor-toolbar-characters-page-latin": "Латинча",
- "wikieditor-toolbar-characters-page-latinextended": "Кенгертилген латинча",
- "wikieditor-toolbar-characters-page-ipa": "ХАФА (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Символла",
- "wikieditor-toolbar-characters-page-greek": "Грекча",
- "wikieditor-toolbar-characters-page-cyrillic": "Кириллица",
- "wikieditor-toolbar-characters-page-arabic": "Арабча",
- "wikieditor-toolbar-characters-page-arabicextended": "Кенгерген арабча",
- "wikieditor-toolbar-characters-page-persian": "Къаджарча",
- "wikieditor-toolbar-characters-page-hebrew": "Иврит",
- "wikieditor-toolbar-characters-page-bangla": "Бенгалча",
- "wikieditor-toolbar-characters-page-tamil": "Тамил",
- "wikieditor-toolbar-characters-page-telugu": "Телугу",
- "wikieditor-toolbar-characters-page-sinhala": "Сингалча",
- "wikieditor-toolbar-characters-page-gujarati": "Гуджарати",
- "wikieditor-toolbar-characters-page-thai": "Тай",
- "wikieditor-toolbar-characters-page-lao": "Лаос",
- "wikieditor-toolbar-characters-page-khmer": "Кхмер",
- "wikieditor-toolbar-characters-endash": "орта тире",
- "wikieditor-toolbar-characters-emdash": "узун тире",
- "wikieditor-toolbar-characters-minus": "минус белги",
"wikieditor-toolbar-section-help": "Ангылатыу",
"wikieditor-toolbar-help-heading-description": "Ачыкълау",
"wikieditor-toolbar-help-heading-syntax": "Джазгъаныгъыз",
@@ -207,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Тизимни элементи<br /># Тизимни элементи",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Тизимни элементи</li><li>Тизимни элементи</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Эндирилген файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Ачыкълау текст]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='\nАчыкълау текст' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Уллайт' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>\nАчыкълау текст</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Белги",
"wikieditor-toolbar-help-content-reference-syntax": "Бетни тексти.&lt;ref name=\"test\"&gt;[http://www.example.org Джибериуню тексти], къошакъ текст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Бетни тексти.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ksh.json b/extensions/WikiEditor/i18n/ksh.json
index ddab011b..3adf5323 100644
--- a/extensions/WikiEditor/i18n/ksh.json
+++ b/extensions/WikiEditor/i18n/ksh.json
@@ -7,14 +7,11 @@
"wikieditor": "Fottjeschredde Eddiror för der WikiTäx",
"wikieditor-desc": "Brängk en Möjjeleschkeit för Wikitäx enzejävve un ze ändere en et Wiki, di mer ußboue kann, un di noch allerhand Kröhmsches met dobei hät.",
"wikieditor-wikitext-tab": "Wikitäx",
- "wikieditor-loading": "Ben aam Laade&nbsp;&hellip;",
+ "wikieditor-loading": "Ben aam Lahde&nbsp;…",
"wikieditor-preview-preference": "Donn de {{int:preview}} nevvedraan zohlohße",
"wikieditor-preview-tab": "{{int:preview}}",
"wikieditor-preview-changes-tab": "Änderonge",
- "wikieditor-preview-loading": "Ben aam Laade{{int:ellipsis}}",
- "wikieditor-previewDialog-preference": "Donn de Frooch noh ene Aansish vöraf aanschallde",
- "wikieditor-previewDialog-tab": "{{int:preview}}",
- "wikieditor-previewDialog-loading": "Ben aam Laade{{int:ellipsis}}",
+ "wikieditor-preview-loading": "Ben aam Lahde&nbsp;…",
"wikieditor-publish-preference": "Et Schrett för Schrett öffentlesch Maache zohlohße",
"wikieditor-publish-button-publish": "Öffentlesch maache!",
"wikieditor-publish-button-cancel": "{{int:cancel}}",
@@ -27,9 +24,9 @@
"wikieditor-toolbar": "Werkzüsh för et Ändere",
"wikieditor-toolbar-desc": "Verbesserte Werkzüsh för et Ändere",
"wikieditor-toolbar-preference": "Donn et ußföerlesh Werkzüsh för et Ändere aanzeije (bruch Java_Skripp)",
- "wikieditor-toolbar-dialogs-preference": "Donn de Lengks aanzeije för Lengks, Tabälle, un mieh en Sigge em Wiki ennzefööje",
+ "wikieditor-toolbar-dialogs-preference": "Donn de Lengks aanzeije för Lengks, Tabälle en Sigge em Wiki ennzeföhje un schalld et Söhke un Ußtuusche en.",
"wikieditor-toolbar-hidesig": "Donn dä Knopp för de „Ongerschreff“ nit aanzeije för nomaale Sigge vum Wiki singem Enhalld.",
- "wikieditor-toolbar-loading": "Ben aam Laade{{int:ellipsis}}",
+ "wikieditor-toolbar-loading": "Ben aam Lahde&nbsp;…",
"wikieditor-toolbar-tool-bold": "Fätte Schreff",
"wikieditor-toolbar-tool-bold-example": "Fätte Schreff",
"wikieditor-toolbar-tool-italic": "Scheive Schreff",
@@ -41,8 +38,8 @@
"wikieditor-toolbar-tool-link": "Lengk",
"wikieditor-toolbar-tool-link-title": "Donn ene Lengk dobei",
"wikieditor-toolbar-tool-link-int": "Op en Sigg em Wiki",
- "wikieditor-toolbar-tool-link-int-target": "Dä Sigg iere Tittel:",
- "wikieditor-toolbar-tool-link-int-target-tooltip": "Jif dä Sigg iere Tittel udder ene <i lang=\"en\">URL</i> en",
+ "wikieditor-toolbar-tool-link-int-target": "Dä Sigg ier Övverschreff udder <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>:",
+ "wikieditor-toolbar-tool-link-int-target-tooltip": "Jif dä Sigg ier Övverschreff udder ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> en",
"wikieditor-toolbar-tool-link-int-text": "Dat Woot udder de Wööter zom Aanklecke:",
"wikieditor-toolbar-tool-link-int-text-tooltip": "Jif dä Täx en, dä aanjezeijsch wääde sullt",
"wikieditor-toolbar-tool-link-ext": "Op en Websigg ußerhallef",
@@ -55,6 +52,7 @@
"wikieditor-toolbar-tool-link-int-target-status-invalid": "Dat es ene onjöltijje Tittel för en Sigg",
"wikieditor-toolbar-tool-link-int-target-status-external": "Ene Lengk noh ußerhallef vum Wiki",
"wikieditor-toolbar-tool-link-int-target-status-loading": "Ben aam Prööfe, ov et di Sigg jitt{{int:ellipsis}}",
+ "wikieditor-toolbar-tool-link-int-target-status-disambig": "„Wadd eß dat?“ Sigg",
"wikieditor-toolbar-tool-link-int-invalid": "Dä aanjejovve Tittel för en Sigg en onjöltesch.",
"wikieditor-toolbar-tool-link-lookslikeinternal": "Ding <i lang=\"en\">URL</i> schingk obb en Sigg em Wiki sellver ze jon. Wells De ene ääschte Lengk en et Wiki druß maache?",
"wikieditor-toolbar-tool-link-lookslikeinternal-int": "Ene Lengk en et Wiki",
@@ -123,9 +121,9 @@
"wikieditor-toolbar-tool-table-insert": "Lohß Jonn!",
"wikieditor-toolbar-tool-table-cancel": "Schloß! Ophüüre!",
"wikieditor-toolbar-tool-table-example-text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec purus diam. Sed aliquam imperdiet nunc quis lacinia. Donec rutrum consectetur placerat. Sed volutpat neque non purus faucibus id ultricies enim euismod. Un der Öhl läuf küßde Postölling Ähzebülle wann Ühle de Sohd beije.",
- "wikieditor-toolbar-tool-table-toomany": "En Tabäll met mieh wi $1 Pläz kann heh dat Projramm nit en dä Täx enboue.",
+ "wikieditor-toolbar-tool-table-toomany": "En Tabäll met mieh wi {{PLUTAL:$1|einem Plaz|$1 Pläz|keinem Plaz}} kann heh dat Projramm nit en der Täx enboue.",
"wikieditor-toolbar-tool-table-invalidnumber": "Do häs kein jöltije Zahl för de Reije udder de Schpallde enjejovve.",
- "wikieditor-toolbar-tool-table-zero": "Do kanns kein Tabäll ennfööje, woh kein Schpallde udder kein Reije dren sin.",
+ "wikieditor-toolbar-tool-table-zero": "Do kanns kein Tabäll ennföhje, woh kein Schpallde udder kein Reihje dren sin.",
"wikieditor-toolbar-tool-replace": "Söhke un Tuusche",
"wikieditor-toolbar-tool-replace-title": "Söhke un Ußtuusche",
"wikieditor-toolbar-tool-replace-search": "Söhk noh:",
@@ -141,28 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Do häs nix aanjejovve, för donoh ze söhke.",
"wikieditor-toolbar-tool-replace-invalidregex": "Do häs ene onjöltijje rejolähre Ußdrok aanjejovve: $1",
"wikieditor-toolbar-section-characters": "Sönderzeijsche",
- "wikieditor-toolbar-characters-page-latin": "Lateinesch",
- "wikieditor-toolbar-characters-page-latinextended": "Lateinesch met Extras",
- "wikieditor-toolbar-characters-page-ipa": "IPA, et engernazjonal foneetesch Alfabeet",
- "wikieditor-toolbar-characters-page-symbols": "Symbole",
- "wikieditor-toolbar-characters-page-greek": "Jriischesch",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrillesch",
- "wikieditor-toolbar-characters-page-arabic": "Arabesch",
- "wikieditor-toolbar-characters-page-arabicextended": "Araabesch met Extras",
- "wikieditor-toolbar-characters-page-persian": "Pärsesch",
- "wikieditor-toolbar-characters-page-hebrew": "Hebräjesch",
- "wikieditor-toolbar-characters-page-bangla": "Benjaalesch",
- "wikieditor-toolbar-characters-page-tamil": "Tamiilesch",
- "wikieditor-toolbar-characters-page-telugu": "Teluuju",
- "wikieditor-toolbar-characters-page-sinhala": "Singhaleesesch",
- "wikieditor-toolbar-characters-page-gujarati": "Jujaraatesch",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thailändesch",
- "wikieditor-toolbar-characters-page-lao": "Laotesch",
- "wikieditor-toolbar-characters-page-khmer": "Khmer-Kambodschaanesch",
- "wikieditor-toolbar-characters-endash": "Ene Halfjeviertschtresch",
- "wikieditor-toolbar-characters-emdash": "Ene Jeviertschtresch",
- "wikieditor-toolbar-characters-minus": "Et Winnijer-Zeische",
"wikieditor-toolbar-section-help": "Hölp",
"wikieditor-toolbar-help-heading-description": "Beschrevve",
"wikieditor-toolbar-help-heading-syntax": "Wat De schriifs",
@@ -208,8 +184,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Enndraach en de Leß<br /># Enndraach en de Leß",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Enndraach en de Leß</li><li>Enndraach en de Leß</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Enjeföösch Dattei",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Beld_Ungerschreff]]",
- "wikieditor-toolbar-help-content-file-result": "<div style=\"width:104px;\" class=\"thumbinner\"><a title=\"Schreff unger dä Beld\" class=\"image\" href=\"/wiki/File:Wiki.png\"><img height=\"50\" width=\"100\" border=\"0\" class=\"thumbimage\" src=\"extensions/WikiEditor/modules/images/toolbar/example-image.png\" alt=\"\"/></a><div class=\"thumbcaption\"><div class=\"magnify\"><a title=\"Enlarge\" class=\"internal\" href=\"/wiki/File:Wiki.png\"><img height=\"11\" width=\"15\" alt=\"\" src=\"$1/common/images/magnify-clip.png\"/></a></div>Schreff unger dä Beld</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Täx zom Beld",
"wikieditor-toolbar-help-content-reference-description": "Fohßnoht",
"wikieditor-toolbar-help-content-reference-syntax": "Tex en dä Sigg. &lt;ref name=\"versoht\"&gt;[http://www.example.org Täx för dä Lengk], un noch jät mieh Täx.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tex en dä Sigg. <sup><a href=\"#\">[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ku-latn.json b/extensions/WikiEditor/i18n/ku-latn.json
index b1ebfb9b..b217d2d2 100644
--- a/extensions/WikiEditor/i18n/ku-latn.json
+++ b/extensions/WikiEditor/i18n/ku-latn.json
@@ -4,15 +4,14 @@
"Erdal Ronahi",
"George Animal",
"Ghybu",
- "Gomada"
+ "Gomada",
+ "Bikarhêner"
]
},
"wikieditor-loading": "Bar dibe",
"wikieditor-preview-tab": "Pêşdîtin",
"wikieditor-preview-changes-tab": "Guhartin",
"wikieditor-preview-loading": "Bar dibe…",
- "wikieditor-previewDialog-tab": "Pêşdîtin",
- "wikieditor-previewDialog-loading": "Bar dibe…",
"wikieditor-publish-button-publish": "Weşandin",
"wikieditor-publish-button-cancel": "Betal bike",
"wikieditor-publish-dialog-minor": "Guhertina biçûk",
@@ -69,22 +68,6 @@
"wikieditor-toolbar-tool-table-cancel": "Betal bike",
"wikieditor-toolbar-tool-replace-close": "Girtin",
"wikieditor-toolbar-section-characters": "Karakterên taybet",
- "wikieditor-toolbar-characters-page-latin": "Latînî",
- "wikieditor-toolbar-characters-page-latinextended": "Latînî berfirehkirî",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Sembol",
- "wikieditor-toolbar-characters-page-greek": "Yewnanî",
- "wikieditor-toolbar-characters-page-cyrillic": "Kirîlî",
- "wikieditor-toolbar-characters-page-arabic": "Erebî",
- "wikieditor-toolbar-characters-page-persian": "Farsî",
- "wikieditor-toolbar-characters-page-hebrew": "Îbranî",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-telugu": "Telûgû",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gucaratî",
- "wikieditor-toolbar-characters-page-thai": "Tay",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Alîkarî",
"wikieditor-toolbar-help-heading-description": "Danasîn",
"wikieditor-toolbar-help-heading-syntax": "Tu çi dinivîsî",
@@ -106,6 +89,8 @@
"wikieditor-toolbar-help-content-bolditalic-result": "<strong><em>Nivîsa stûr û xwahr</em></strong>",
"wikieditor-toolbar-help-content-ilink-description": "Girêdana hundirî",
"wikieditor-toolbar-help-content-xlink-description": "Girêdana derve",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Mînak.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Nivîsa sernavê",
"wikieditor-toolbar-help-content-reference-description": "Referans",
"wikieditor-toolbar-help-content-signature-description": "Îmze"
}
diff --git a/extensions/WikiEditor/i18n/kw.json b/extensions/WikiEditor/i18n/kw.json
index 095bdb99..add86ff9 100644
--- a/extensions/WikiEditor/i18n/kw.json
+++ b/extensions/WikiEditor/i18n/kw.json
@@ -3,7 +3,8 @@
"authors": [
"Kernoweger",
"Kw-Moon",
- "Nrowe"
+ "Nrowe",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "Wikitekst",
@@ -11,8 +12,6 @@
"wikieditor-preview-tab": "Ragweles",
"wikieditor-preview-changes-tab": "Chanjyow",
"wikieditor-preview-loading": "Ow karga...",
- "wikieditor-previewDialog-tab": "Ragwel",
- "wikieditor-previewDialog-loading": "Ow karga...",
"wikieditor-publish-button-publish": "Dyllo",
"wikieditor-publish-button-cancel": "Hedhi",
"wikieditor-publish-dialog-title": "Dyllo war {{SITENAME}}",
@@ -118,22 +117,6 @@
"wikieditor-toolbar-tool-replace-nomatch": "Ny omdhesedhas agas hwilans orth tra vyth.",
"wikieditor-toolbar-tool-replace-emptysearch": "Ny entersowgh tra vyth dhe hwilas.",
"wikieditor-toolbar-section-characters": "Lytherennow arbennek",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin ystynnys",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Arwodhyow",
- "wikieditor-toolbar-characters-page-greek": "Greka",
- "wikieditor-toolbar-characters-page-arabic": "Arabek",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabek ystynnys",
- "wikieditor-toolbar-characters-page-persian": "Persek",
- "wikieditor-toolbar-characters-page-hebrew": "Ebrow",
- "wikieditor-toolbar-characters-page-bangla": "Bengalek",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-thai": "Tay",
- "wikieditor-toolbar-characters-page-lao": "Laosek",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Gweres",
"wikieditor-toolbar-help-heading-description": "Deskrifans",
"wikieditor-toolbar-help-heading-syntax": "An pyth a skrifowgh",
@@ -179,8 +162,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elven a'n rol<br /># Elven a'n rol",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elven a'n rol</li><li>Elven a'n rol</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Restren neythys",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ensampel.png|thumb|Tekst an deskrifans]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Tekst an deskrifans' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Brashe' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Tekst an deskrifans</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ensampel.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Devyn",
"wikieditor-toolbar-help-content-reference-syntax": "Tekst an folen.&lt;ref name=\"test\"&gt;[http://www.ensampel.org Tekst an gevren], tekst keworansel.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tekst an folen.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ky.json b/extensions/WikiEditor/i18n/ky.json
index 1f281cb4..76c9bacc 100644
--- a/extensions/WikiEditor/i18n/ky.json
+++ b/extensions/WikiEditor/i18n/ky.json
@@ -2,13 +2,13 @@
"@metadata": {
"authors": [
"Chorobek",
- "Викиней"
+ "Викиней",
+ "Macofe"
]
},
"wikieditor-loading": "Жүктөлүүдө...",
"wikieditor-preview-changes-tab": "Өзгөртүүлөр",
"wikieditor-preview-loading": "Жүктөлүүдө...",
- "wikieditor-previewDialog-loading": "Жүктөлүүдө...",
"wikieditor-publish-button-cancel": "Жокко чыгаруу",
"wikieditor-publish-dialog-goback": "Артка",
"wikieditor-toolbar-loading": "Жүктөлүүдө...",
@@ -92,25 +92,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Сиз издегенге эч нерсе көргөзгөн жоксуз.",
"wikieditor-toolbar-tool-replace-invalidregex": "Сиз киргизген регулярдуу айтылыш туура эмес: $1",
"wikieditor-toolbar-section-characters": "Атайын белгилер",
- "wikieditor-toolbar-characters-page-latin": "Латынча",
- "wikieditor-toolbar-characters-page-latinextended": "Латынча кеңейтилген",
- "wikieditor-toolbar-characters-page-ipa": "ЭФА (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Белгилер",
- "wikieditor-toolbar-characters-page-greek": "Грек",
- "wikieditor-toolbar-characters-page-cyrillic": "Кирилик",
- "wikieditor-toolbar-characters-page-arabic": "Араб",
- "wikieditor-toolbar-characters-page-arabicextended": "Арабча кеңейтилген",
- "wikieditor-toolbar-characters-page-persian": "Перс",
- "wikieditor-toolbar-characters-page-hebrew": "Иврит",
- "wikieditor-toolbar-characters-page-bangla": "Бенгал",
- "wikieditor-toolbar-characters-page-tamil": "Тамил",
- "wikieditor-toolbar-characters-page-telugu": "Телугу",
- "wikieditor-toolbar-characters-page-sinhala": "Сингала",
- "wikieditor-toolbar-characters-page-gujarati": "Гужарати",
- "wikieditor-toolbar-characters-page-devanagari": "Деванагари",
- "wikieditor-toolbar-characters-page-thai": "Тай",
- "wikieditor-toolbar-characters-page-lao": "Лаос",
- "wikieditor-toolbar-characters-page-khmer": "Кхмер",
"wikieditor-toolbar-section-help": "Жардам",
"wikieditor-toolbar-help-heading-description": "Баяндамасы",
"wikieditor-toolbar-help-heading-syntax": "Сиз ушуну киргизсеңиз",
@@ -156,8 +137,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Тизме бирдиги<br /># Тизме бирдиги",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Тизме бирдиги</li><li>Тизме бирдиги</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Кыстарылган файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Түшүндүрмө текст]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Түшүндүрмө текст' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Чоңойт' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Түшүндүрмө текст</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Шилтемелер",
"wikieditor-toolbar-help-content-reference-syntax": "Барактын тексти.&lt;ref name=\"test\"&gt;[http://www.example.org Шилтеменин тексти], кошумча текст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Барактын тексти.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/la.json b/extensions/WikiEditor/i18n/la.json
index 8a88d5eb..77e2ae3d 100644
--- a/extensions/WikiEditor/i18n/la.json
+++ b/extensions/WikiEditor/i18n/la.json
@@ -3,14 +3,13 @@
"authors": [
"Autokrator",
"OrbiliusMagister",
- "UV"
+ "UV",
+ "Macofe"
]
},
"wikieditor-preview-tab": "Praevisum",
"wikieditor-preview-changes-tab": "Mutata",
"wikieditor-preview-loading": "Depromens...",
- "wikieditor-previewDialog-tab": "Praevisum",
- "wikieditor-previewDialog-loading": "Depromens...",
"wikieditor-toolbar-loading": "Depromens…",
"wikieditor-toolbar-tool-bold": "Litterae pingues",
"wikieditor-toolbar-tool-bold-example": "Textus litteris pinguibus scriptus",
@@ -50,15 +49,6 @@
"wikieditor-toolbar-tool-newline": "Nova linea",
"wikieditor-toolbar-tool-table": "Tabula",
"wikieditor-toolbar-section-characters": "Characteres speciales",
- "wikieditor-toolbar-characters-page-latin": "Latinum",
- "wikieditor-toolbar-characters-page-latinextended": "Latinum extensum",
- "wikieditor-toolbar-characters-page-ipa": "API",
- "wikieditor-toolbar-characters-page-symbols": "Symbola",
- "wikieditor-toolbar-characters-page-greek": "Graecum",
- "wikieditor-toolbar-characters-page-cyrillic": "Cyrillicum",
- "wikieditor-toolbar-characters-page-arabic": "Arabicum",
- "wikieditor-toolbar-characters-page-hebrew": "Hebraicum",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
"wikieditor-toolbar-section-help": "Adiutatum",
"wikieditor-toolbar-help-heading-description": "Descriptio",
"wikieditor-toolbar-help-heading-syntax": "Quod scribis",
@@ -101,8 +91,7 @@
"wikieditor-toolbar-help-content-ulist-syntax": "* Res indicata<br />* Res indicata",
"wikieditor-toolbar-help-content-ulist-result": "<ul><li>Res indicata</li><li>Res indicata</li></ul>",
"wikieditor-toolbar-help-content-file-description": "Fasciculus in pagina impositus",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplum.png|thumb|Descriptio fasciculi]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Descriptio fasciculi' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Augere' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Descriptio fasciculi</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplum.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referentia bibliographica",
"wikieditor-toolbar-help-content-reference-syntax": "Textus paginae.&lt;ref name=\"test\"&gt;[http://www.example.org Textus nexus], textus additus.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Textus paginae.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/lb.json b/extensions/WikiEditor/i18n/lb.json
index 179d695e..71522b62 100644
--- a/extensions/WikiEditor/i18n/lb.json
+++ b/extensions/WikiEditor/i18n/lb.json
@@ -13,9 +13,6 @@
"wikieditor-preview-tab": "Kucken ouni ze späicheren",
"wikieditor-preview-changes-tab": "Ännerungen",
"wikieditor-preview-loading": "Lueden...",
- "wikieditor-previewDialog-preference": "Preview-Dialog aschalten",
- "wikieditor-previewDialog-tab": "Kucken ouni ze späicheren",
- "wikieditor-previewDialog-loading": "Lueden...",
"wikieditor-publish-preference": "Schrëtt-fir-Schrëtt Publikatioun aschalten",
"wikieditor-publish-button-publish": "Verëffentlechen",
"wikieditor-publish-button-cancel": "Ofbriechen",
@@ -142,26 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Dir hutt näisch aginn nodeem Dir siche wëllt.",
"wikieditor-toolbar-tool-replace-invalidregex": "De regulären Ausdrock deen Dir aginn hutt ass net valabel: $1",
"wikieditor-toolbar-section-characters": "Spezialzeechen",
- "wikieditor-toolbar-characters-page-latin": "Laténgesch",
- "wikieditor-toolbar-characters-page-latinextended": "Laténgesch, erweidert",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symboler",
- "wikieditor-toolbar-characters-page-greek": "Griichesch",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrillisch",
- "wikieditor-toolbar-characters-page-arabic": "Arabesch",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabesch, erweidert",
- "wikieditor-toolbar-characters-page-persian": "Persesch",
- "wikieditor-toolbar-characters-page-hebrew": "Hebräisch",
- "wikieditor-toolbar-characters-page-bangla": "Bangalesch",
- "wikieditor-toolbar-characters-page-tamil": "Tamilesch",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-minus": "Minus-Zeechen",
"wikieditor-toolbar-section-help": "Hëllef",
"wikieditor-toolbar-help-heading-description": "Beschreiwung",
"wikieditor-toolbar-help-heading-syntax": "Wat Dir antippt",
@@ -207,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Element vun der Lëscht<br />\n# Element vun der Lëscht",
"wikieditor-toolbar-help-content-olist-result": "<ol>\n <li>Element vun der Lëscht</li>\n <li>Element vun der Lëscht</li>\n</ol>",
"wikieditor-toolbar-help-content-file-description": "Agebonnene Fichier",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Ugewisenen Text]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Ugewisenen Texte' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Ugewisenen Text</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Beispill.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referenz",
"wikieditor-toolbar-help-content-reference-syntax": "Text vun der Säit.&lt;ref name=\"test\"&gt;[http://www.example.org Text vum Link], zousätzlechen Text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Text vun der Säit <sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/li.json b/extensions/WikiEditor/i18n/li.json
index 830ac0c1..79321cba 100644
--- a/extensions/WikiEditor/i18n/li.json
+++ b/extensions/WikiEditor/i18n/li.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Ooswesthoesbes",
- "Pahles"
+ "Pahles",
+ "Macofe"
]
},
"wikieditor": "Oetgebreijde teksverwèrker veur wikiteks",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Veurbesjouwing",
"wikieditor-preview-changes-tab": "Verangeringe",
"wikieditor-preview-loading": "Laje...",
- "wikieditor-previewDialog-preference": "Zèt 't betrachtingsvinster aan",
- "wikieditor-previewDialog-tab": "Veurbesjouwing",
- "wikieditor-previewDialog-loading": "Laje…",
"wikieditor-publish-preference": "Zèt oetbringe ein veur ein aan",
"wikieditor-publish-button-publish": "Bring oet",
"wikieditor-publish-button-cancel": "Braek aaf",
@@ -131,25 +129,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Doe höbs gein zeukterme opgegaeve.",
"wikieditor-toolbar-tool-replace-invalidregex": "De door dich ingegaeve regulier oetdrokkig is valsj: $1",
"wikieditor-toolbar-section-characters": "Speciaal teikes",
- "wikieditor-toolbar-characters-page-latin": "Letien",
- "wikieditor-toolbar-characters-page-latinextended": "Oetgebreid letien",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symbole",
- "wikieditor-toolbar-characters-page-greek": "Grieks",
- "wikieditor-toolbar-characters-page-cyrillic": "Cyrillisch",
- "wikieditor-toolbar-characters-page-arabic": "Arabisch",
- "wikieditor-toolbar-characters-page-arabicextended": "Oetgebreid Arabisch",
- "wikieditor-toolbar-characters-page-persian": "Perzisch",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreeuws",
- "wikieditor-toolbar-characters-page-bangla": "Bengaals",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Teloegoe",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Goedzjarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Cambodzjaans",
"wikieditor-toolbar-section-help": "Hölp",
"wikieditor-toolbar-help-heading-description": "Besjrieving",
"wikieditor-toolbar-help-heading-syntax": "Det se tieps",
@@ -195,8 +174,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Regel in genummerde lies<br /># Regel in genummerde lies",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Regel in genummerde lies</li><li>Regel in genummerde lies</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Mediabesjtandj",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Biesjrif]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Biesjrif' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergroeat' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Biesjrif</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Verwiezing",
"wikieditor-toolbar-help-content-reference-syntax": "Paginateks.&lt;ref name=\"test\"&gt;[http://www.example.org Verwiezingsteks], biekómmendje teks.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Paginateks. <sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/lrc.json b/extensions/WikiEditor/i18n/lrc.json
index 02bdc156..851565eb 100644
--- a/extensions/WikiEditor/i18n/lrc.json
+++ b/extensions/WikiEditor/i18n/lrc.json
@@ -11,8 +11,6 @@
"wikieditor-preview-tab": "پيش زمينه",
"wikieditor-preview-changes-tab": "آلشتيا",
"wikieditor-preview-loading": "د حالت سوار كرد",
- "wikieditor-previewDialog-tab": "پيش زمينه",
- "wikieditor-previewDialog-loading": "د حالت سوار كرد",
"wikieditor-publish-preference": "توانايی پا وه پا سی انتشار",
"wikieditor-publish-button-publish": "منتشر كردن",
"wikieditor-publish-button-cancel": "رد كردن",
@@ -29,12 +27,29 @@
"wikieditor-toolbar-tool-italic-example": "نوشته كج كوله",
"wikieditor-toolbar-tool-ilink": "لینک مئن ون",
"wikieditor-toolbar-tool-ilink-example": "عنوان لينك",
+ "wikieditor-toolbar-tool-xlink": "هوم پیوند خارجی(د ویر داشتو)",
"wikieditor-toolbar-tool-xlink-example": "http://www.example.com نوم ديس ون",
"wikieditor-toolbar-tool-link": "ديس ون",
+ "wikieditor-toolbar-tool-link-title": "نیائن هوم پیوند",
"wikieditor-toolbar-tool-link-int": "سی ويكی بلگه",
+ "wikieditor-toolbar-tool-link-int-target-tooltip": "داسون بلگه یا یو آر ال",
+ "wikieditor-toolbar-tool-link-int-text": "نیسسه سی دیئن:",
+ "wikieditor-toolbar-tool-link-int-text-tooltip": "نیسسه دیاری کرد",
+ "wikieditor-toolbar-tool-link-ext": "سی یه گل بلگه دیارگه خارجی",
+ "wikieditor-toolbar-tool-link-ext-target": "هوم پیوند يو آر ال:",
+ "wikieditor-toolbar-tool-link-ext-text": "هوم پیوند نیسسه دار:",
+ "wikieditor-toolbar-tool-link-insert": "نیائن هوم پیوند",
"wikieditor-toolbar-tool-link-cancel": "رد كردن",
+ "wikieditor-toolbar-tool-link-int-target-status-exists": "بلگه هیئش",
"wikieditor-toolbar-tool-link-int-target-status-notexists": "بلگه نیئش",
+ "wikieditor-toolbar-tool-link-int-target-status-invalid": "داسون نامعتور",
+ "wikieditor-toolbar-tool-link-int-target-status-external": "هوم پیوند خارجی",
+ "wikieditor-toolbar-tool-link-int-target-status-loading": "د حال و بال وارسی سی بیین بلگه...",
+ "wikieditor-toolbar-tool-link-int-invalid": "داسونی که شما تیار کردیته خو نئ.",
+ "wikieditor-toolbar-tool-link-lookslikeinternal-int": "هوم پیوند داخلی",
+ "wikieditor-toolbar-tool-link-lookslikeinternal-ext": "هوم پیوند خارجی",
"wikieditor-toolbar-tool-file-title": "نیائن جانیا",
+ "wikieditor-toolbar-file-target": "نوم جانیا:",
"wikieditor-toolbar-file-size": "انازه",
"wikieditor-toolbar-file-float": "د راست چيين",
"wikieditor-toolbar-file-default": "پيش فرض",
@@ -50,17 +65,29 @@
"wikieditor-toolbar-section-advanced": "پيشرفته",
"wikieditor-toolbar-tool-heading": "سربلگه",
"wikieditor-toolbar-tool-heading-1": "ریتراز1",
+ "wikieditor-toolbar-tool-heading-2": "ریتراز2",
"wikieditor-toolbar-tool-heading-3": "ریتراز3",
+ "wikieditor-toolbar-tool-heading-4": "ریتراز4",
"wikieditor-toolbar-tool-heading-5": "ریتراز5",
+ "wikieditor-toolbar-group-format": "قالو",
"wikieditor-toolbar-tool-ulist": "نوم گه توپر بیه",
"wikieditor-toolbar-tool-olist": "نوم گه شماره دار",
+ "wikieditor-toolbar-tool-redirect": "واگردونی",
"wikieditor-toolbar-tool-redirect-example": "نوم بلگه حاستنی",
+ "wikieditor-toolbar-tool-big": "گپ",
+ "wikieditor-toolbar-tool-big-example": "نیسسه گپ",
"wikieditor-toolbar-tool-small": "كؤچك",
"wikieditor-toolbar-tool-small-example": "متن كؤچك",
+ "wikieditor-toolbar-tool-superscript": "شا اسکریپت",
"wikieditor-toolbar-group-insert": "دائن",
"wikieditor-toolbar-tool-gallery": "عسگدونی",
"wikieditor-toolbar-tool-newline": "خط تازه",
"wikieditor-toolbar-tool-table": "جعوه",
+ "wikieditor-toolbar-tool-table-dimensions-columns": "ستينا",
+ "wikieditor-toolbar-tool-table-example": "نمونه",
+ "wikieditor-toolbar-tool-table-preview": "پيش سيل",
+ "wikieditor-toolbar-tool-table-insert": "نهائن",
+ "wikieditor-toolbar-tool-table-cancel": "انجوم شیو کردن",
"wikieditor-toolbar-tool-replace": "بگرد و جاگزین کو",
"wikieditor-toolbar-tool-replace-title": "بگرد و جاگزین کو",
"wikieditor-toolbar-tool-replace-search": "پی جوری سی",
@@ -68,6 +95,7 @@
"wikieditor-toolbar-tool-replace-close": "بسن",
"wikieditor-toolbar-tool-replace-emptysearch": "شما سی پی جوری هیچی وارد نکردیته.",
"wikieditor-toolbar-characters-page-latin": "لاتين",
+ "wikieditor-toolbar-characters-page-ipa": "آی پی آ",
"wikieditor-toolbar-characters-page-symbols": "نماديا",
"wikieditor-toolbar-characters-page-greek": "هلنی",
"wikieditor-toolbar-characters-page-cyrillic": "سريليك",
@@ -84,9 +112,21 @@
"wikieditor-toolbar-characters-page-lao": "لائو",
"wikieditor-toolbar-characters-page-khmer": "خمر",
"wikieditor-toolbar-section-help": "هومياری",
+ "wikieditor-toolbar-help-page-link": "هوم پیوندیا",
"wikieditor-toolbar-help-page-list": "نوم گه یا",
"wikieditor-toolbar-help-page-file": "جانیایا",
"wikieditor-toolbar-help-page-discussion": "گپ",
+ "wikieditor-toolbar-help-content-italic-description": "كج كوله",
+ "wikieditor-toolbar-help-content-italic-syntax": "نیسسه کج و کوله",
+ "wikieditor-toolbar-help-content-italic-result": "<em>نیسسه کج و کوله</em>",
+ "wikieditor-toolbar-help-content-bold-description": "مین پر",
+ "wikieditor-toolbar-help-content-bold-syntax": "'''نیسسه مین پر'''",
+ "wikieditor-toolbar-help-content-bold-result": "<strong>نیسسه مین پر</strong>",
+ "wikieditor-toolbar-help-content-ilink-description": "هوم پیوند تویئ",
+ "wikieditor-toolbar-help-content-ilink-result": "<a href='#'>ری دیس هوم پیوند</a><br /><a href='#'>داسون بلگه</a>",
+ "wikieditor-toolbar-help-content-xlink-description": "هوم پیوند خارجی",
+ "wikieditor-toolbar-help-content-xlink-syntax": "[http://www.example.org Link label]<br />[http://www.example.org]<br />http://www.example.org",
+ "wikieditor-toolbar-help-content-xlink-result": "<a href='#' class='external'>ری دیس هوم پیوند</a><br /><a href='#' class='external autonumber'>[1]</a><br /><a href='#' class='external'>http://www.example.org</a>",
"wikieditor-toolbar-help-content-heading2-description": "دوئمی ریتراز سرون",
"wikieditor-toolbar-help-content-heading3-description": "سئمین ریتراز سرون",
"wikieditor-toolbar-help-content-heading4-description": "چئارمی ریتراز سرون",
@@ -96,7 +136,16 @@
"wikieditor-toolbar-help-content-ulist-result": "<ul><li>قلم نوم گه</li><li>قلم نوم گه</li></ul>",
"wikieditor-toolbar-help-content-olist-syntax": "# قلم نوم گه<br />* قلم نوم گه",
"wikieditor-toolbar-help-content-olist-result": "<ul><li>قلم نوم گه</li><li>قلم نوم گه</li></ul>",
+ "wikieditor-toolbar-help-content-reference-description": "سرچشمه",
+ "wikieditor-toolbar-help-content-reference-result": "نیسسه بلگه.<sup><a href='#'>[1]</a></sup>",
+ "wikieditor-toolbar-help-content-rereference-result": "نیسسه بلگه.<sup><a href='#'>[1]</a></sup>",
+ "wikieditor-toolbar-help-content-showreferences-description": "نشو دئن سرچشمه یا",
+ "wikieditor-toolbar-help-content-showreferences-result": "<ol class='references'><li id='cite_note-test-0'><b><a title='' href='#'>^</a></b> <a rel='nofollow' title='http://www.example.org' class='external text' href='#'>نیسسه هوم پیوند</a>, نیسسه اضافی.</li></ol>",
"wikieditor-toolbar-help-content-signaturetimestamp-description": "امضا و دیسمن وخت",
+ "wikieditor-toolbar-help-content-signaturetimestamp-result": "<a href='#' title='{{#special:mypage}}'>نوم کاریاری</a> (<a href='#' title='{{#special:mytalk}}'>چک چنه</a>) 15:54, 10 جوئن2009 (UTC)",
"wikieditor-toolbar-help-content-signature-description": "امضا",
- "wikieditor-toolbar-help-content-indent-description": "مئن رئته"
+ "wikieditor-toolbar-help-content-signature-result": "<a href='#' title='{{#special:mypage}}'>نوم کاریاری</a> (<a href='#' title='{{#special:mytalk}}'>چک چنه</a>)",
+ "wikieditor-toolbar-help-content-indent-description": "مئن رئته",
+ "wikieditor-toolbar-help-content-indent-syntax": "نیسسه نرمال<br />:نیسسه مین رئته<br />::نیسسه مین رئته",
+ "wikieditor-toolbar-help-content-indent-result": "نیسسه نرمال<dl><dd>نیسسه مین رئته<dl><dd>نیسسه مین رئته</dd></dl></dd></dl>"
}
diff --git a/extensions/WikiEditor/i18n/lt.json b/extensions/WikiEditor/i18n/lt.json
index ca04c4f2..e964eccf 100644
--- a/extensions/WikiEditor/i18n/lt.json
+++ b/extensions/WikiEditor/i18n/lt.json
@@ -6,7 +6,8 @@
"Hugo.arg",
"Matasg",
"Vogone",
- "Vpovilaitis"
+ "Vpovilaitis",
+ "Pofka"
]
},
"wikieditor": "Išplėstinė wikiteksto redagavimo sąsaja",
@@ -17,8 +18,6 @@
"wikieditor-preview-tab": "Peržiūra",
"wikieditor-preview-changes-tab": "Pokyčiai",
"wikieditor-preview-loading": "Kraunama...",
- "wikieditor-previewDialog-tab": "Peržiūra",
- "wikieditor-previewDialog-loading": "Įkeliama…",
"wikieditor-publish-preference": "Įjungti žingsnis po žingsnio publikavimą",
"wikieditor-publish-button-publish": "Publikuoti",
"wikieditor-publish-button-cancel": "Atšaukti",
@@ -206,8 +205,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Sąrašo elementas<br /># Sąrašo elementas",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Sąrašo elementas</li><li>Sąrašo elementas</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Įterpti failą",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Aprašymas]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Aprašymas</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Pavyzdys.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Antraštės tekstas",
"wikieditor-toolbar-help-content-reference-description": "Išnaša",
"wikieditor-toolbar-help-content-reference-syntax": "Puslapio tekstas.&lt;ref name=\"test\"&gt;[http://www.example.org Nuorodos tekstas], papildomas tekstas.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Puslapio tekstas.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/lus.json b/extensions/WikiEditor/i18n/lus.json
index 41ba2b7a..11b5c610 100644
--- a/extensions/WikiEditor/i18n/lus.json
+++ b/extensions/WikiEditor/i18n/lus.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "RMizo"
+ "RMizo",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "Wikithu",
@@ -106,25 +107,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Zawn tùr i ziak miah lo.",
"wikieditor-toolbar-tool-replace-invalidregex": "I thu ziah a dik lo: $1",
"wikieditor-toolbar-section-characters": "Hawrawp bîkte",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin säwizàu",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Chhinchhiahnate",
- "wikieditor-toolbar-characters-page-greek": "Grik",
- "wikieditor-toolbar-characters-page-cyrillic": "Sirilik (russia hawrawp ang chi)",
- "wikieditor-toolbar-characters-page-arabic": "arabik",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabik sâwizàu",
- "wikieditor-toolbar-characters-page-persian": "Persia",
- "wikieditor-toolbar-characters-page-hebrew": "Hebrai",
- "wikieditor-toolbar-characters-page-bangla": "benggawli",
- "wikieditor-toolbar-characters-page-tamil": "Tamil ṭawng",
- "wikieditor-toolbar-characters-page-telugu": "Telegu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Hindihawrawp",
- "wikieditor-toolbar-characters-page-thai": "Thaiţawng",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Ţanpuina",
"wikieditor-toolbar-help-heading-description": "Sawifiahna",
"wikieditor-toolbar-help-heading-syntax": "I thu ziah",
@@ -164,7 +146,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Tlar tùra<br /># Tlar tùra",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Tlar tùra</li><li>Tlar tùra</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Taksa telh",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Entirna.png|thumb|Sawifiahna thü]]",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Entirna.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Ràwnte",
"wikieditor-toolbar-help-content-reference-syntax": "Thu inziak.&lt;ref name=\"test\"&gt;[http://www.example.org zawmna thü], thu dang.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Thu inziak.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/lv.json b/extensions/WikiEditor/i18n/lv.json
index 6e07dff6..e39097b2 100644
--- a/extensions/WikiEditor/i18n/lv.json
+++ b/extensions/WikiEditor/i18n/lv.json
@@ -5,7 +5,8 @@
"GreenZeb",
"Marozols",
"Papuass",
- "Xil"
+ "Xil",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "Vikiteksts",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "Pirmskats",
"wikieditor-preview-changes-tab": "Izmaiņas",
"wikieditor-preview-loading": "Ielādē…",
- "wikieditor-previewDialog-preference": "Atļaut priekšskates dialogu",
- "wikieditor-previewDialog-tab": "Pirmskats",
- "wikieditor-previewDialog-loading": "Ielādē…",
"wikieditor-publish-button-publish": "Publicēt",
"wikieditor-publish-button-cancel": "Atcelt",
"wikieditor-publish-dialog-minor": "Maznozīmīgs labojums",
@@ -135,19 +133,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Nav norādīta meklējamā simbolu virkne.",
"wikieditor-toolbar-tool-replace-invalidregex": "Šī ievadītā regulārā izteiksme nav korekta: $1",
"wikieditor-toolbar-section-characters": "Īpašie simboli",
- "wikieditor-toolbar-characters-page-latin": "Latīņu",
- "wikieditor-toolbar-characters-page-latinextended": "Latīņu (papildus)",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simboli",
- "wikieditor-toolbar-characters-page-greek": "Grieķu",
- "wikieditor-toolbar-characters-page-cyrillic": "Kirilica",
- "wikieditor-toolbar-characters-page-arabic": "Arābu",
- "wikieditor-toolbar-characters-page-persian": "Persiešu",
- "wikieditor-toolbar-characters-page-hebrew": "Ebreju",
- "wikieditor-toolbar-characters-page-bangla": "Bengāļu",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singāļu",
- "wikieditor-toolbar-characters-page-gujarati": "Gudžarati",
"wikieditor-toolbar-section-help": "Palīdzība",
"wikieditor-toolbar-help-heading-description": "Paskaidrojums",
"wikieditor-toolbar-help-heading-syntax": "Ko tu raksti",
@@ -193,8 +178,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Saraksta elements<br /># Saraksta elements",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Saraksta elements</li><li>Saraksta elements</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Iekļauts fails",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Apraksts]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Apraksts' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Palielināt' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Apraksts</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Atsauce",
"wikieditor-toolbar-help-content-reference-syntax": "Lapas teksts.&lt;ref name=\"test\"&gt;[http://www.example.org Saites teksts], papildus teksts.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Lapas teksts.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/min.json b/extensions/WikiEditor/i18n/min.json
index 99243d09..d912f1a8 100644
--- a/extensions/WikiEditor/i18n/min.json
+++ b/extensions/WikiEditor/i18n/min.json
@@ -3,7 +3,8 @@
"authors": [
"Iwan Novirion",
"Naval Scene",
- "VoteITP"
+ "VoteITP",
+ "Macofe"
]
},
"wikieditor": "Antarmuko panyuntiangan teks wiki tingkek lanjuik",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "Pratonton",
"wikieditor-preview-changes-tab": "Parubahan",
"wikieditor-preview-loading": "Loading...",
- "wikieditor-previewDialog-preference": "Aktifkan dialog pratonton",
- "wikieditor-previewDialog-tab": "Pratonton",
- "wikieditor-previewDialog-loading": "Loading...",
"wikieditor-publish-preference": "Aktifkan panarbitan batahap",
"wikieditor-publish-button-publish": "Tabikan",
"wikieditor-publish-button-cancel": "Batal",
@@ -143,28 +141,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Sanak indak mamasuakan apopun untuak dicari.",
"wikieditor-toolbar-tool-replace-invalidregex": "Regex (regular expression) nan Sanak masuakan indak sah: $1",
"wikieditor-toolbar-section-characters": "Karakter istimewa",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin tambahan",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simbol",
- "wikieditor-toolbar-characters-page-greek": "Yunani",
- "wikieditor-toolbar-characters-page-cyrillic": "Sirilik",
- "wikieditor-toolbar-characters-page-arabic": "Arab",
- "wikieditor-toolbar-characters-page-arabicextended": "Arab tambahan",
- "wikieditor-toolbar-characters-page-persian": "Persia",
- "wikieditor-toolbar-characters-page-hebrew": "Ibrani",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarat",
- "wikieditor-toolbar-characters-page-devanagari": "India kuno",
- "wikieditor-toolbar-characters-page-thai": "Siam",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "en dash",
- "wikieditor-toolbar-characters-emdash": "em dash",
- "wikieditor-toolbar-characters-minus": "tando kurang",
"wikieditor-toolbar-section-help": "Bantuan",
"wikieditor-toolbar-help-heading-description": "Katarangan",
"wikieditor-toolbar-help-heading-syntax": "Apo nan Sanak ketik",
@@ -210,8 +186,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Isi daftar<br /># Isi daftar",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Isi daftar</li><li>Isi daftar</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Cantumkan berkas",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Contoh.png|thumb|Teks gambar]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Teks katarangan' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Pagadang' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Teks katarangan</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Contoh.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Rujuakan",
"wikieditor-toolbar-help-content-reference-syntax": "Teks laman.&lt;ref name=\"test\"&gt;[http://www.contoh_sajo.org Teks pautan], teks tambahan.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Teks laman.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/mk.json b/extensions/WikiEditor/i18n/mk.json
index 4eac73ce..87f6f14b 100644
--- a/extensions/WikiEditor/i18n/mk.json
+++ b/extensions/WikiEditor/i18n/mk.json
@@ -13,9 +13,6 @@
"wikieditor-preview-tab": "Преглед",
"wikieditor-preview-changes-tab": "Промени",
"wikieditor-preview-loading": "Вчитувам...",
- "wikieditor-previewDialog-preference": "Овозможи дијалог за преглед",
- "wikieditor-previewDialog-tab": "Преглед",
- "wikieditor-previewDialog-loading": "Вчитувам...",
"wikieditor-publish-preference": "Овозможи објавување „чекор по чекор“",
"wikieditor-publish-button-publish": "Објави",
"wikieditor-publish-button-cancel": "Откажи",
@@ -131,7 +128,7 @@
"wikieditor-toolbar-tool-replace-title": "Најди и замени",
"wikieditor-toolbar-tool-replace-search": "Барај:",
"wikieditor-toolbar-tool-replace-replace": "Замени со:",
- "wikieditor-toolbar-tool-replace-case": "Прави разлика помеѓу големи и мали букви",
+ "wikieditor-toolbar-tool-replace-case": "Разликувај големи/мали букви",
"wikieditor-toolbar-tool-replace-regex": "Сметај ја низата за пребарување за регуларен израз",
"wikieditor-toolbar-tool-replace-button-findnext": "Пронајди следно",
"wikieditor-toolbar-tool-replace-button-replace": "Замени",
@@ -209,8 +206,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Ставка<br /># Ставка",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Ставка</li><li>Ставка</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Вметната податотека",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Описен текст]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Опис' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Зголеми' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Опис</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Описен текст",
"wikieditor-toolbar-help-content-reference-description": "Навод",
"wikieditor-toolbar-help-content-reference-syntax": "Текст во страницата.&lt;ref name=\"test\"&gt;[http://www.пример.org Текст на врската], дополнителен текст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Текст во страницата.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ml.json b/extensions/WikiEditor/i18n/ml.json
index 8b118b78..df5eff82 100644
--- a/extensions/WikiEditor/i18n/ml.json
+++ b/extensions/WikiEditor/i18n/ml.json
@@ -3,7 +3,8 @@
"authors": [
"Akhilan",
"McDutchie",
- "Praveenp"
+ "Praveenp",
+ "Macofe"
]
},
"wikieditor": "വിക്കിഎഴുത്തുകൾ തിരുത്തുവാനുള്ള നൂതന സമ്പർക്കമുഖം",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "എങ്ങനെയുണ്ടെന്നു കാണുക",
"wikieditor-preview-changes-tab": "മാറ്റങ്ങൾ",
"wikieditor-preview-loading": "ശേഖരിക്കുന്നു...",
- "wikieditor-previewDialog-preference": "എങ്ങനെയുണ്ടെന്ന് കാണൽ സൗകര്യം സജ്ജമാക്കുക",
- "wikieditor-previewDialog-tab": "എങ്ങനെയുണ്ടെന്നു കാണുക",
- "wikieditor-previewDialog-loading": "ശേഖരിക്കുന്നു...",
"wikieditor-publish-preference": "ഘട്ടം ഘട്ടമായുള്ള പ്രസിദ്ധപ്പെടുത്തൽ സജ്ജമാക്കുക",
"wikieditor-publish-button-publish": "പ്രസിദ്ധീകരിക്കുക",
"wikieditor-publish-button-cancel": "റദ്ദാക്കുക",
@@ -143,28 +141,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "തിരയാനായി താങ്കൾ ഒന്നും നൽകിയിട്ടില്ല.",
"wikieditor-toolbar-tool-replace-invalidregex": "താങ്കൾ നൽകിയ റെഗുലർ എക്സ്പ്രഷൻ അസാധുവാണ്‌: $1",
"wikieditor-toolbar-section-characters": "പ്രത്യേക ലിപികൾ",
- "wikieditor-toolbar-characters-page-latin": "ലാറ്റിൻ",
- "wikieditor-toolbar-characters-page-latinextended": "ലാറ്റിൻ വിപുലം",
- "wikieditor-toolbar-characters-page-ipa": "ഐ.പി.എ.",
- "wikieditor-toolbar-characters-page-symbols": "ചിഹ്നങ്ങൾ",
- "wikieditor-toolbar-characters-page-greek": "ഗ്രീക്ക്",
- "wikieditor-toolbar-characters-page-cyrillic": "സിറിലിക്",
- "wikieditor-toolbar-characters-page-arabic": "അറബിക്",
- "wikieditor-toolbar-characters-page-arabicextended": "അറബി വിപുലം",
- "wikieditor-toolbar-characters-page-persian": "പേർഷ്യൻ",
- "wikieditor-toolbar-characters-page-hebrew": "ഹീബ്രു",
- "wikieditor-toolbar-characters-page-bangla": "ബംഗ്ലാ",
- "wikieditor-toolbar-characters-page-tamil": "തമിഴ്",
- "wikieditor-toolbar-characters-page-telugu": "തെലുങ്ക്",
- "wikieditor-toolbar-characters-page-sinhala": "സിംഹള",
- "wikieditor-toolbar-characters-page-gujarati": "ഗുജറാത്തി",
- "wikieditor-toolbar-characters-page-devanagari": "ദേവനാഗരി",
- "wikieditor-toolbar-characters-page-thai": "തായ്",
- "wikieditor-toolbar-characters-page-lao": "ലാവോ",
- "wikieditor-toolbar-characters-page-khmer": "ഖെമർ",
- "wikieditor-toolbar-characters-endash": "ഇം ഡാഷ്",
- "wikieditor-toolbar-characters-emdash": "എം ഡാഷ്",
- "wikieditor-toolbar-characters-minus": "വ്യവകലന ചിഹ്നം",
"wikieditor-toolbar-section-help": "സഹായം",
"wikieditor-toolbar-help-heading-description": "വിവരണം",
"wikieditor-toolbar-help-heading-syntax": "താങ്കൾ ടൈപ്പ് ചെയ്യുന്നത്",
@@ -210,8 +186,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "#ലിസ്റ്റിലെ അംഗം<br />#ലിസ്റ്റിലെ അംഗം",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>ലിസ്റ്റിലെ അംഗം</li><li>ലിസ്റ്റിലെ അംഗം</li></ol>",
"wikieditor-toolbar-help-content-file-description": "പ്രമാണം ചേർക്കൽ",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|വിവരണ കുറിപ്പ്]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='കുറിപ്പായുള്ള എഴുത്ത്' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt='ലഘുചിത്രം'/></a><div class='thumbcaption'><div class='magnify'><a title='വലുതാക്കുക' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>കുറിപ്പായുള്ള എഴുത്ത്</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "അവലംബം",
"wikieditor-toolbar-help-content-reference-syntax": "താളിലെ എഴുത്ത്.&lt;ref name=\"test\"&gt;[http://www.example.org കണ്ണിയായുള്ള എഴുത്ത്], കൂടുതൽ എഴുത്ത്.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "താളിലെ എഴുത്ത്.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/mr.json b/extensions/WikiEditor/i18n/mr.json
index ecc59168..65b9e720 100644
--- a/extensions/WikiEditor/i18n/mr.json
+++ b/extensions/WikiEditor/i18n/mr.json
@@ -8,7 +8,8 @@
"Shantanoo",
"V.narsikar",
"अभय नातू",
- "संतोष दहिवळ"
+ "संतोष दहिवळ",
+ "Macofe"
]
},
"wikieditor": "विकिमजकूर संपादनाची विकसित सुविधा",
@@ -19,9 +20,6 @@
"wikieditor-preview-tab": "झलक",
"wikieditor-preview-changes-tab": "बदल",
"wikieditor-preview-loading": "प्रभारण करीत आहे",
- "wikieditor-previewDialog-preference": "\"झलक पहा\" चौकट सक्षम करा",
- "wikieditor-previewDialog-tab": "झलक पहा",
- "wikieditor-previewDialog-loading": "प्रभारण करीत आहे",
"wikieditor-publish-preference": "टप्प्या-टप्प्याने प्रकाशन शक्य करा",
"wikieditor-publish-button-publish": "प्रकाशित करा\nदाखवा",
"wikieditor-publish-button-cancel": "रद्द करा",
@@ -148,26 +146,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "आपण शोधण्यासाठी काहीही भरले नाही.",
"wikieditor-toolbar-tool-replace-invalidregex": "या तुम्ही टाकलेलेली नेहमीची पदावली अग्राह्य आहे:$1",
"wikieditor-toolbar-section-characters": "विशेष वर्ण",
- "wikieditor-toolbar-characters-page-latin": "लॅटीन",
- "wikieditor-toolbar-characters-page-latinextended": "विस्तारीत लॅटीन भाषा",
- "wikieditor-toolbar-characters-page-ipa": "आंतरराष्ट्रीय उच्चारानुरूप अक्षरपद्धती",
- "wikieditor-toolbar-characters-page-symbols": "चिन्ह",
- "wikieditor-toolbar-characters-page-greek": "ग्रीक भाषा",
- "wikieditor-toolbar-characters-page-cyrillic": "सिरिलीक",
- "wikieditor-toolbar-characters-page-arabic": "अरेबिक भाषा",
- "wikieditor-toolbar-characters-page-arabicextended": "अरबी विस्तारित",
- "wikieditor-toolbar-characters-page-persian": "फार्सी",
- "wikieditor-toolbar-characters-page-hebrew": "हिब्रू भाषा",
- "wikieditor-toolbar-characters-page-bangla": "बंगाली भाषा",
- "wikieditor-toolbar-characters-page-tamil": "तमिळ",
- "wikieditor-toolbar-characters-page-telugu": "तेलगु भाषा",
- "wikieditor-toolbar-characters-page-sinhala": "सिंहला",
- "wikieditor-toolbar-characters-page-gujarati": "गुजराती भाषा",
- "wikieditor-toolbar-characters-page-devanagari": "देवनागरी",
- "wikieditor-toolbar-characters-page-thai": "थाई भाषा",
- "wikieditor-toolbar-characters-page-lao": "लाऒ भाषा",
- "wikieditor-toolbar-characters-page-khmer": "ख्मेर",
- "wikieditor-toolbar-characters-minus": "ॠण चिन्ह",
"wikieditor-toolbar-section-help": "साहाय्य",
"wikieditor-toolbar-help-heading-description": "वर्णन",
"wikieditor-toolbar-help-heading-syntax": "जे तुम्ही टंकीत(टाईप) कराल",
@@ -213,8 +191,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# यादी घटक<br /># यादी घटक",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>यादी घटक</li><li>यादी घटक</li></ol>",
"wikieditor-toolbar-help-content-file-description": "संलग्न संचिका",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|मथळा मजकूर]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='मथळा मजकूर' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Caption text</div></div>\n<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Caption text</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "संदर्भ",
"wikieditor-toolbar-help-content-reference-syntax": "Page text.&lt;ref name=\"test\"&gt;[http://www.example.org Link text], additional text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Page text.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ms.json b/extensions/WikiEditor/i18n/ms.json
index 0317833c..b89b5f66 100644
--- a/extensions/WikiEditor/i18n/ms.json
+++ b/extensions/WikiEditor/i18n/ms.json
@@ -7,7 +7,8 @@
"CoolCityCat",
"Diagramma Della Verita",
"Yosri",
- "Pizza1016"
+ "Pizza1016",
+ "Macofe"
]
},
"wikieditor": "Wikiteks keutamaan halaman suntingan",
@@ -18,9 +19,6 @@
"wikieditor-preview-tab": "Pralihat",
"wikieditor-preview-changes-tab": "Perubahan",
"wikieditor-preview-loading": "Memuatkan...",
- "wikieditor-previewDialog-preference": "Aktifkan dialog pralihat",
- "wikieditor-previewDialog-tab": "Pralihat",
- "wikieditor-previewDialog-loading": "Memuatkan...",
"wikieditor-publish-preference": "Aktifkan tutorial penerbitan",
"wikieditor-publish-button-publish": "Terbitkan",
"wikieditor-publish-button-cancel": "Batalkan",
@@ -148,28 +146,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Anda tidak memasukkan apa-apa untuk dicari.",
"wikieditor-toolbar-tool-replace-invalidregex": "Ungkapan yang anda masukkan tidak sah: $1",
"wikieditor-toolbar-section-characters": "Aksara khas",
- "wikieditor-toolbar-characters-page-latin": "Rumi",
- "wikieditor-toolbar-characters-page-latinextended": "Rumi lanjutan",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simbol",
- "wikieditor-toolbar-characters-page-greek": "Yunani",
- "wikieditor-toolbar-characters-page-cyrillic": "Cyril",
- "wikieditor-toolbar-characters-page-arabic": "Arab",
- "wikieditor-toolbar-characters-page-arabicextended": "Arab lanjutan",
- "wikieditor-toolbar-characters-page-persian": "Parsi",
- "wikieditor-toolbar-characters-page-hebrew": "Ibrani",
- "wikieditor-toolbar-characters-page-bangla": "Benggala",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "sengkang en",
- "wikieditor-toolbar-characters-emdash": "sengkang em",
- "wikieditor-toolbar-characters-minus": "tanda tolak",
"wikieditor-toolbar-section-help": "Bantuan",
"wikieditor-toolbar-help-heading-description": "Keterangan",
"wikieditor-toolbar-help-heading-syntax": "Yang ditaip",
@@ -215,8 +191,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Perkara senarai<br />\n# Perkara senarai",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Perkara senarai</li><li>Perkara senarai</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fail terbenam",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Contoh.png|thumb|Teks kapsyen]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Teks kapsyen' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Besarkan' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Teks kapsyen</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Contoh.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Rujukan",
"wikieditor-toolbar-help-content-reference-syntax": "Teks laman.&lt;ref nama=\"cubaan\"&gt;[http://www.contoh.org Teks pautan], teks tambahan.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Teks laman.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/mt.json b/extensions/WikiEditor/i18n/mt.json
index 7c8908e9..1319952c 100644
--- a/extensions/WikiEditor/i18n/mt.json
+++ b/extensions/WikiEditor/i18n/mt.json
@@ -1,7 +1,9 @@
{
"@metadata": {
"authors": [
- "Chrisportelli"
+ "Chrisportelli",
+ "Macofe",
+ "Leli Forte"
]
},
"wikieditor": "Interfaċċa avvanzata ta' modifika tat-test tal-wiki",
@@ -12,8 +14,6 @@
"wikieditor-preview-tab": "Dehra proviżorja",
"wikieditor-preview-changes-tab": "Tibdil",
"wikieditor-preview-loading": "Tiela'...",
- "wikieditor-previewDialog-tab": "Dehra proviżorja",
- "wikieditor-previewDialog-loading": "Tiela'...",
"wikieditor-publish-preference": "Ippermetti pubblikazzjoni pass pass",
"wikieditor-publish-button-publish": "Ippubblika",
"wikieditor-publish-button-cancel": "Annulla",
@@ -87,7 +87,7 @@
"wikieditor-toolbar-tool-heading-example": "Titlu tas-sezzjoni",
"wikieditor-toolbar-group-format": "Format",
"wikieditor-toolbar-tool-ulist": "Lista puntata",
- "wikieditor-toolbar-tool-ulist-example": "Element tal-lista puntata",
+ "wikieditor-toolbar-tool-ulist-example": "Element tal-lista bil-punti",
"wikieditor-toolbar-tool-olist": "Lista numerata",
"wikieditor-toolbar-tool-olist-example": "Element tal-lista numerata",
"wikieditor-toolbar-tool-nowiki": "Injora l-ifformattjar wiki",
@@ -138,25 +138,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Ma indikajt xejn xi trid tfittex.",
"wikieditor-toolbar-tool-replace-invalidregex": "L-espressjonali regolari li daħħalt hi invalida: $1",
"wikieditor-toolbar-section-characters": "Karattri speċjali",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin estiż",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simboli",
- "wikieditor-toolbar-characters-page-greek": "Grieg",
- "wikieditor-toolbar-characters-page-cyrillic": "Ċirilliku",
- "wikieditor-toolbar-characters-page-arabic": "Għarbi",
- "wikieditor-toolbar-characters-page-arabicextended": "Għarbi estiż",
- "wikieditor-toolbar-characters-page-persian": "Persjan",
- "wikieditor-toolbar-characters-page-hebrew": "Ebrajk",
- "wikieditor-toolbar-characters-page-bangla": "Bengali",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinħaliż",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Tajlandiż",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Għajnuna",
"wikieditor-toolbar-help-heading-description": "Deskrizzjoni",
"wikieditor-toolbar-help-heading-syntax": "X'tikteb",
@@ -202,8 +183,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Element tal-lista<br /># Element tal-lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Element tal-lista</li><li>Element tal-lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fajl inkorporat",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Eżempju.png|thumb|thumb|Test ta' deskrizzjoni]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Test tad-deskrizzjoni' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Kabbar' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Test tad-deskrizzjoni</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Eżempju.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referenza",
"wikieditor-toolbar-help-content-reference-syntax": "Test tal-paġna.&lt;ref name=\"test\"&gt;[http://www.example.org Test tal-ħolqa], test addizzjonali.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Test tal-paġna.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/mzn.json b/extensions/WikiEditor/i18n/mzn.json
index f5141705..2180c929 100644
--- a/extensions/WikiEditor/i18n/mzn.json
+++ b/extensions/WikiEditor/i18n/mzn.json
@@ -1,8 +1,10 @@
{
"@metadata": {
"authors": [
- "Mehdi"
+ "Mehdi",
+ "محک"
]
},
- "wikieditor-toolbar-tool-replace-title": "چرخه‌تو و جایگزین هاکردن"
+ "wikieditor-toolbar-tool-replace-title": "چرخه‌تو و جایگزین هاکردن",
+ "wikieditor-toolbar-tool-replace-search": "چرخه‌تو اینان وسّه:"
}
diff --git a/extensions/WikiEditor/i18n/nah.json b/extensions/WikiEditor/i18n/nah.json
index 0972740e..5674bcf5 100644
--- a/extensions/WikiEditor/i18n/nah.json
+++ b/extensions/WikiEditor/i18n/nah.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Ricardo gs",
- "Teòtlalili"
+ "Teòtlalili",
+ "Macofe"
]
},
"wikieditor": "Wel senka yankuik netzòwilìxtlâtli in tlenìk moyêyèktlàlia in wikitlâkuilòlmantli",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Achtỏpaỉtalistli",
"wikieditor-preview-changes-tab": "Tlapảtlalistli",
"wikieditor-preview-loading": "Motlamàmaltîtỉka....",
- "wikieditor-previewDialog-preference": "Motekitìltìs ìyachtỏpaỉtalis in nenônòtzalistli",
- "wikieditor-previewDialog-tab": "Tlachtỏpaỉtalòs",
- "wikieditor-previewDialog-loading": "Tlamàmâtỉka...",
"wikieditor-publish-preference": "Motekitìltìs tlasêsêsèntèìxmảchìltìstli",
"wikieditor-publish-button-publish": "Motèìxmảchìltìs",
"wikieditor-publish-button-cancel": "Moxỉtìnìs",
@@ -109,20 +107,6 @@
"wikieditor-toolbar-tool-replace-close": "Tiquitzacuāz",
"wikieditor-toolbar-tool-replace-nomatch": "Âmò tlèn òkâsik in motlatemòlistzìn",
"wikieditor-toolbar-tool-replace-invalidregex": "In nāhuatīlmatillahtōliztli tlein ōtitlahcuiloh ahtlaceliāni ca: $1",
- "wikieditor-toolbar-characters-page-latin": "Latintlahcuilōlli",
- "wikieditor-toolbar-characters-page-latinextended": "Mantoc latintlahcuilōlli",
- "wikieditor-toolbar-characters-page-greek": "Greciatlahcuilōlli",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirilotlahcuilōlli",
- "wikieditor-toolbar-characters-page-arabic": "Arabiatlahcuilōlli",
- "wikieditor-toolbar-characters-page-persian": "Persiatlahcuilōlli",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreotlahcuilōlli",
- "wikieditor-toolbar-characters-page-bangla": "Banglatlahcuilōlli",
- "wikieditor-toolbar-characters-page-telugu": "Telugutlahcuilōlli",
- "wikieditor-toolbar-characters-page-sinhala": "Cingalatlahcuilōlli",
- "wikieditor-toolbar-characters-page-gujarati": "Guyaratitlahcuilōlli",
- "wikieditor-toolbar-characters-page-thai": "Taitlahcuilōlli",
- "wikieditor-toolbar-characters-page-lao": "Laotlahcuilōlli",
- "wikieditor-toolbar-characters-page-khmer": "Jemertlahcuilōlli",
"wikieditor-toolbar-section-help": "Tēpalēhuiliztli",
"wikieditor-toolbar-help-page-link": "Tzòtzòwistìn",
"wikieditor-toolbar-help-page-heading": "Tòkâtlàlistìn",
@@ -140,8 +124,7 @@
"wikieditor-toolbar-help-content-bolditalic-result": "<strong><em>Tlīltic &amp; cōliuhqui tlahcuilōliztli</em></strong>",
"wikieditor-toolbar-help-content-ilink-description": "Tlâtek tzòwistli",
"wikieditor-toolbar-help-content-xlink-description": "Calān tzonhuiliztli",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ejemplo.png|thumb|Tlatòkâyòtilisyòtl]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Tlatòkâyòtilisyòtl</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ejemplo.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Tlànalòyàntli",
"wikieditor-toolbar-help-content-reference-syntax": "Tlaìxtlapallâkuilòlmantli.&lt;ref name=\"test\"&gt;[http://www.example.org Tzòwistlâkuilòlmantli], tlâxitìllâkuilòlmantli.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tlaìxtlapallâkuilòlmantli.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/nb.json b/extensions/WikiEditor/i18n/nb.json
index ed8d1b8f..364e28b8 100644
--- a/extensions/WikiEditor/i18n/nb.json
+++ b/extensions/WikiEditor/i18n/nb.json
@@ -8,7 +8,8 @@
"Jsoby",
"Laaknor",
"Nghtwlkr",
- "Simny"
+ "Simny",
+ "Macofe"
]
},
"wikieditor": "Avansert grensesnitt for redigering av wikitekst",
@@ -19,9 +20,6 @@
"wikieditor-preview-tab": "Forhåndsvisning",
"wikieditor-preview-changes-tab": "Endringer",
"wikieditor-preview-loading": "Laster…",
- "wikieditor-previewDialog-preference": "Aktiver forhåndsvisningsdialog",
- "wikieditor-previewDialog-tab": "Forhåndsvisning",
- "wikieditor-previewDialog-loading": "Laster…",
"wikieditor-publish-preference": "Aktiver steg-for-steg publisering",
"wikieditor-publish-button-publish": "Publiser",
"wikieditor-publish-button-cancel": "Avbryt",
@@ -147,28 +145,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Du skrev ikke inn noe å søke etter.",
"wikieditor-toolbar-tool-replace-invalidregex": "Det regulære uttrykket du skrev inn er ugyldig: $1",
"wikieditor-toolbar-section-characters": "Spesialtegn",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Utvidet Latin",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symboler",
- "wikieditor-toolbar-characters-page-greek": "Gresk",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrillisk",
- "wikieditor-toolbar-characters-page-arabic": "Arabisk",
- "wikieditor-toolbar-characters-page-arabicextended": "Utvidet arabisk",
- "wikieditor-toolbar-characters-page-persian": "Persisk",
- "wikieditor-toolbar-characters-page-hebrew": "Hebraisk",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamilsk",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalesisk",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Laotisk",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "tankestrek",
- "wikieditor-toolbar-characters-emdash": "lang tankestrek",
- "wikieditor-toolbar-characters-minus": "minustegn",
"wikieditor-toolbar-section-help": "Hjelp",
"wikieditor-toolbar-help-heading-description": "Beskrivelse",
"wikieditor-toolbar-help-heading-syntax": "Hva du skriver",
@@ -214,8 +190,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Listeelement<br />\n# Listeelement",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Listeelement</li><li>Listeelement</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fil",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Bildetekst]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Bildetekst' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Forstørr' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Bildetekst</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referanse",
"wikieditor-toolbar-help-content-reference-syntax": "Tekst.&lt;ref name=\"test\"&gt;[http://www.example.org Lenketekst], ytterligere tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tekst.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/nds-nl.json b/extensions/WikiEditor/i18n/nds-nl.json
index 246b4c5b..825dd7d0 100644
--- a/extensions/WikiEditor/i18n/nds-nl.json
+++ b/extensions/WikiEditor/i18n/nds-nl.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Servien"
+ "Servien",
+ "Macofe"
]
},
"wikieditor": "Uutebreien tekstverwarker veur wikitekste",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Naokieken",
"wikieditor-preview-changes-tab": "Wiezigingen",
"wikieditor-preview-loading": "An t laojen...",
- "wikieditor-previewDialog-preference": "t Naokiekvienster anzetten",
- "wikieditor-previewDialog-tab": "Naokieken",
- "wikieditor-previewDialog-loading": "An t laojen...",
"wikieditor-publish-preference": "Stap veur stap publiseren inschakelen",
"wikieditor-publish-button-publish": "Publiseren",
"wikieditor-publish-button-cancel": "Aofbreken",
@@ -32,7 +30,7 @@
"wikieditor-toolbar-loading": "An t laojen...",
"wikieditor-toolbar-tool-bold": "Vet",
"wikieditor-toolbar-tool-bold-example": "Vet-edrokten tekste",
- "wikieditor-toolbar-tool-italic": "Schunedrokt",
+ "wikieditor-toolbar-tool-italic": "Schuun",
"wikieditor-toolbar-tool-italic-example": "Schunedrokten tekste",
"wikieditor-toolbar-tool-ilink": "Interne verwiezing",
"wikieditor-toolbar-tool-ilink-example": "Verwiezingsbeschrieving",
@@ -129,7 +127,7 @@
"wikieditor-toolbar-tool-replace": "Zeuken en vervangen",
"wikieditor-toolbar-tool-replace-title": "Zeuken en vervangen",
"wikieditor-toolbar-tool-replace-search": "Zeuken naor:",
- "wikieditor-toolbar-tool-replace-replace": "Vervöngen deur:",
+ "wikieditor-toolbar-tool-replace-replace": "Vervangen deur:",
"wikieditor-toolbar-tool-replace-case": "Heufdlettergeveulig",
"wikieditor-toolbar-tool-replace-regex": "De zeukreeks as reguliere expressie behaandelen",
"wikieditor-toolbar-tool-replace-button-findnext": "Volgende zeuken",
@@ -141,28 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Je hebben gien zeukterm op-egeven.",
"wikieditor-toolbar-tool-replace-invalidregex": "De reguliere die'j op-egeven hebben is ongeldig: $1",
"wikieditor-toolbar-section-characters": "Spesiale tekens",
- "wikieditor-toolbar-characters-page-latin": "Latien",
- "wikieditor-toolbar-characters-page-latinextended": "Latien uutebreid",
- "wikieditor-toolbar-characters-page-ipa": "Internasionaal Klankeschrift",
- "wikieditor-toolbar-characters-page-symbols": "Symbolen",
- "wikieditor-toolbar-characters-page-greek": "Grieks",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrillies",
- "wikieditor-toolbar-characters-page-arabic": "Arabies",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabies uutebreid",
- "wikieditor-toolbar-characters-page-persian": "Perzies",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreeuws",
- "wikieditor-toolbar-characters-page-bangla": "Bengaals",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalees",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Laotiaans",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "liggend streepjen",
- "wikieditor-toolbar-characters-emdash": "gedachtenstreepjen",
- "wikieditor-toolbar-characters-minus": "minteken",
"wikieditor-toolbar-section-help": "Hulpe",
"wikieditor-toolbar-help-heading-description": "Beschrieving",
"wikieditor-toolbar-help-heading-syntax": "Wa'j tikken",
@@ -174,13 +150,13 @@
"wikieditor-toolbar-help-page-file": "Bestaanden",
"wikieditor-toolbar-help-page-reference": "Referensies",
"wikieditor-toolbar-help-page-discussion": "Overleg",
- "wikieditor-toolbar-help-content-italic-description": "Schunedrokt",
+ "wikieditor-toolbar-help-content-italic-description": "Schuun",
"wikieditor-toolbar-help-content-italic-syntax": "Schunedrokten tekste",
"wikieditor-toolbar-help-content-italic-result": "<em>Schunedrokten tekste</em>",
- "wikieditor-toolbar-help-content-bold-description": "Vet-edrokt",
+ "wikieditor-toolbar-help-content-bold-description": "Vet",
"wikieditor-toolbar-help-content-bold-syntax": "'''Vet-edrokten tekste'''",
"wikieditor-toolbar-help-content-bold-result": "<strong>Vet-edrokten tekste</strong>",
- "wikieditor-toolbar-help-content-bolditalic-description": "Vet- en schunedrokt",
+ "wikieditor-toolbar-help-content-bolditalic-description": "Vet en schuun",
"wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Vet- en schunedrokten tekste'''''",
"wikieditor-toolbar-help-content-bolditalic-result": "<em><strong>Vet- en schunedrokten tekste</strong></em>",
"wikieditor-toolbar-help-content-ilink-description": "Interne verwiezing",
@@ -208,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Regel in n lieste mit nummers<br /># Regel in n lieste mit nummers",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Regel in n lieste mit nummers</li><li>Regel in n lieste mit nummers</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Bestaand derbie doon",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Veurbeeld.png|thumb|Bieschrift]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Bieschrift' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergroten' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Bieschrift</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Veurbeeld.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referensie",
"wikieditor-toolbar-help-content-reference-syntax": "Ziedtekste.&lt;ref name=\"test\"&gt;[http://www.example.org Beschrieving], eventuele tekste.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Ziedtekste <sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/nl.json b/extensions/WikiEditor/i18n/nl.json
index 8d0d87a4..d35fb110 100644
--- a/extensions/WikiEditor/i18n/nl.json
+++ b/extensions/WikiEditor/i18n/nl.json
@@ -7,7 +7,9 @@
"SPQRobin",
"Siebrand",
"Tvdm",
- "Wiki13"
+ "Wiki13",
+ "Macofe",
+ "MedShot"
]
},
"wikieditor": "Uitgebreide tekstverwerker voor wikitekst",
@@ -18,9 +20,6 @@
"wikieditor-preview-tab": "Voorvertoning",
"wikieditor-preview-changes-tab": "Wijzigingen",
"wikieditor-preview-loading": "Bezig met laden…",
- "wikieditor-previewDialog-preference": "Voorvertoningsdialoogvenster inschakelen",
- "wikieditor-previewDialog-tab": "Voorvertoning",
- "wikieditor-previewDialog-loading": "Bezig met laden…",
"wikieditor-publish-preference": "Stap voor stap publiceren inschakelen",
"wikieditor-publish-button-publish": "Publiceren",
"wikieditor-publish-button-cancel": "Annuleren",
@@ -147,28 +146,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "U hebt geen zoekterm opgegeven.",
"wikieditor-toolbar-tool-replace-invalidregex": "De door u opgegeven reguliere expressie is ongeldig: $1",
"wikieditor-toolbar-section-characters": "Speciale tekens",
- "wikieditor-toolbar-characters-page-latin": "Latijn",
- "wikieditor-toolbar-characters-page-latinextended": "Latijn uitgebreid",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symbolen",
- "wikieditor-toolbar-characters-page-greek": "Grieks",
- "wikieditor-toolbar-characters-page-cyrillic": "Cyrillisch",
- "wikieditor-toolbar-characters-page-arabic": "Arabisch",
- "wikieditor-toolbar-characters-page-arabicextended": "Uitgebreid Arabisch",
- "wikieditor-toolbar-characters-page-persian": "Farsi",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreeuws",
- "wikieditor-toolbar-characters-page-bangla": "Bengaals",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalees",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Laotiaans",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "liggend streepje",
- "wikieditor-toolbar-characters-emdash": "gedachtenstreepje",
- "wikieditor-toolbar-characters-minus": "minteken",
"wikieditor-toolbar-section-help": "Hulp",
"wikieditor-toolbar-help-heading-description": "Beschrijving",
"wikieditor-toolbar-help-heading-syntax": "Wat u typt",
@@ -214,8 +191,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Regel in genummerde lijst<br /># Regel in genummerde lijst",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Regel in genummerde lijst</li><li>Regel in genummerde lijst</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ingebed bestand",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Voorbeeld.png|thumb|Bijschrift]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Bijschrift' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Vergroten' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Bijschrift</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Voorbeeld.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referentie",
"wikieditor-toolbar-help-content-reference-syntax": "Paginatekst.&lt;ref name=\"test\"&gt;[http://www.example.org Koppelingstekst], extra tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Paginatekst. <sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/nn.json b/extensions/WikiEditor/i18n/nn.json
index 3f86d8ff..f3055838 100644
--- a/extensions/WikiEditor/i18n/nn.json
+++ b/extensions/WikiEditor/i18n/nn.json
@@ -5,7 +5,8 @@
"Gunnernett",
"Harald Khan",
"Nghtwlkr",
- "Njardarlogar"
+ "Njardarlogar",
+ "Macofe"
]
},
"wikieditor": "Avansert grensesnitt for endring av wikitekst",
@@ -15,8 +16,6 @@
"wikieditor-preview-tab": "Førehandsvising",
"wikieditor-preview-changes-tab": "Endringar",
"wikieditor-preview-loading": "Lastar…",
- "wikieditor-previewDialog-tab": "Førehandsvising",
- "wikieditor-previewDialog-loading": "Lastar…",
"wikieditor-publish-preference": "Ta i bruk steg for steg-publisering",
"wikieditor-publish-button-publish": "Publiser",
"wikieditor-publish-button-cancel": "Avbryt",
@@ -140,20 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Du skreiv ikkje inn noko å søkja etter.",
"wikieditor-toolbar-tool-replace-invalidregex": "Regulæruttrykket du skreiv inn er ugyldig: $1",
"wikieditor-toolbar-section-characters": "Spesialteikn",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Utvida latin",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symbol",
- "wikieditor-toolbar-characters-page-greek": "Gresk",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrillisk",
- "wikieditor-toolbar-characters-page-arabic": "Arabisk",
- "wikieditor-toolbar-characters-page-arabicextended": "Utvida arabisk",
- "wikieditor-toolbar-characters-page-persian": "Persisk",
- "wikieditor-toolbar-characters-page-hebrew": "Hebraisk",
- "wikieditor-toolbar-characters-page-bangla": "Bengali",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalesisk",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
"wikieditor-toolbar-section-help": "Hjelp",
"wikieditor-toolbar-help-heading-description": "Skildring",
"wikieditor-toolbar-help-heading-syntax": "Kva du skriv inn",
@@ -199,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Listeelement<br /># Listeelement",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Listeelement</li><li>Listeelement</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fil",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Bilettekst]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Bilettekst'class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Forstørr' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Bilettekst</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referanse",
"wikieditor-toolbar-help-content-reference-syntax": "Sidetekst.&lt;ref name=\"test\"&gt;[http://www.døme.org Lenkjetekst], ekstra lenkjetekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Sidetekst.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/oc.json b/extensions/WikiEditor/i18n/oc.json
index e0d859c0..c17fce26 100644
--- a/extensions/WikiEditor/i18n/oc.json
+++ b/extensions/WikiEditor/i18n/oc.json
@@ -16,9 +16,6 @@
"wikieditor-preview-tab": "Previsualizacion",
"wikieditor-preview-changes-tab": "Cambiaments",
"wikieditor-preview-loading": "Cargament...",
- "wikieditor-previewDialog-preference": "Activar la bóstia de dialòg d’apercebut",
- "wikieditor-previewDialog-tab": "Previsualizacion",
- "wikieditor-previewDialog-loading": "Cargament...",
"wikieditor-publish-preference": "Activar la publicacion etapa per etapa",
"wikieditor-publish-button-publish": "Publicar",
"wikieditor-publish-button-cancel": "Anullar",
@@ -211,8 +208,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Element de la lista<br /># Element de la lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Element de la lista</li><li>Element de la lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fichièr inserit",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Tèxte afichat]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Tèxte afichat' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Tèxte afichat</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemple.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referéncia",
"wikieditor-toolbar-help-content-reference-syntax": "Tèxte de la pagina.&lt;ref name=\"test\"&gt;[http://www.example.org tèxte del ligam], tèxte adicional.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tèxte de la pagina <sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/om.json b/extensions/WikiEditor/i18n/om.json
new file mode 100644
index 00000000..996a50ca
--- /dev/null
+++ b/extensions/WikiEditor/i18n/om.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tumsaa"
+ ]
+ },
+ "wikieditor-toolbar-help-content-file-caption": "Barreeffama goodayyaa"
+}
diff --git a/extensions/WikiEditor/i18n/or.json b/extensions/WikiEditor/i18n/or.json
index e1741309..cf9f52fa 100644
--- a/extensions/WikiEditor/i18n/or.json
+++ b/extensions/WikiEditor/i18n/or.json
@@ -5,7 +5,8 @@
"Jnanaranjan Sahu",
"Odisha1",
"Psubhashish",
- "Shisir 1945"
+ "Shisir 1945",
+ "Macofe"
]
},
"wikieditor": "ଉନ୍ନତ ଉଇକିଟେକ୍ସଟ ସମ୍ପାଦନା ଇଣ୍ଟରଫେସ",
@@ -16,9 +17,6 @@
"wikieditor-preview-tab": "ସାଇତିବା ଆଗରୁ ଦେଖଣା",
"wikieditor-preview-changes-tab": "ବଦଳମାନ",
"wikieditor-preview-loading": "ଖୋଲୁଛି...",
- "wikieditor-previewDialog-preference": "ଦେଖଣା ଘରଟି ଖୋଲୁଅଛି",
- "wikieditor-previewDialog-tab": "ସାଇତା ଆଗରୁ ଦେଖଣା",
- "wikieditor-previewDialog-loading": "ଲୋଡ଼ ହେଉଛି...",
"wikieditor-publish-preference": "ସ୍ତର ପରେ ସ୍ତର ପ୍ରକାଶନ",
"wikieditor-publish-button-publish": "ପ୍ରକାଶ କରିବେ",
"wikieditor-publish-button-cancel": "ନାକଚ",
@@ -145,28 +143,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "ଆପଣ କିଛି ଖୋଜିନାହାଁନ୍ତି ।",
"wikieditor-toolbar-tool-replace-invalidregex": "ଆପଣ ଦେଇଥିବା ରେଗୁଲାର ଏକ୍ସ‌ପ୍ରେସନ‌ଟି ଭୁଲ: $1",
"wikieditor-toolbar-section-characters": "ବିଶେଷ ସଙ୍କେତ",
- "wikieditor-toolbar-characters-page-latin": "ଲାଟିନ",
- "wikieditor-toolbar-characters-page-latinextended": "ଲାଟିନ ଅଧିକ ଅକ୍ଷର",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "ସଙ୍କେତ",
- "wikieditor-toolbar-characters-page-greek": "ଗ୍ରୀକ",
- "wikieditor-toolbar-characters-page-cyrillic": "ସିରିଲିକ",
- "wikieditor-toolbar-characters-page-arabic": "ଆରବୀ",
- "wikieditor-toolbar-characters-page-arabicextended": "ଆରବୀ ଅଧିକ ଅକ୍ଷର",
- "wikieditor-toolbar-characters-page-persian": "ପାରସୀ",
- "wikieditor-toolbar-characters-page-hebrew": "ହିବ୍ରୁ",
- "wikieditor-toolbar-characters-page-bangla": "ବଙ୍ଗଳା",
- "wikieditor-toolbar-characters-page-tamil": "ତାମିଲ",
- "wikieditor-toolbar-characters-page-telugu": "ତେଲୁଗୁ",
- "wikieditor-toolbar-characters-page-sinhala": "ସିଂହଳୀ",
- "wikieditor-toolbar-characters-page-gujarati": "ଗୁଜୁରାଟୀ",
- "wikieditor-toolbar-characters-page-devanagari": "ଦେବନାଗରୀ",
- "wikieditor-toolbar-characters-page-thai": "ଥାଇ",
- "wikieditor-toolbar-characters-page-lao": "ଲାଓ",
- "wikieditor-toolbar-characters-page-khmer": "ଖମେର ଭାଷା",
- "wikieditor-toolbar-characters-endash": "en ଡ୍ୟାସ",
- "wikieditor-toolbar-characters-emdash": "em dash",
- "wikieditor-toolbar-characters-minus": "ମେନୁଗୁଡିକର ଚିହ୍ନ",
"wikieditor-toolbar-section-help": "ସହଯୋଗ (Help)",
"wikieditor-toolbar-help-heading-description": "ବିବରଣ",
"wikieditor-toolbar-help-heading-syntax": "ଆପଣ ଯାହା ଟାଇପ କରିବେ",
@@ -212,8 +188,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# ତାଲିକା ବସ୍ତୁ<br /># ତାଲିକା ବସ୍ତୁ",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>ତାଲିକା ବସ୍ତୁ</li><li>ତାଲିକା ବସ୍ତୁ</li></ol>",
"wikieditor-toolbar-help-content-file-description": "ଏମବେଡ଼ ହୋଇଥିବା ଫାଇଲ",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Caption text]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='ଶିରୋନାମ ଲେଖା' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='ବଢ଼ାଇବେ' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>ଶିରୋନାମ ଲେଖା</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "ଆଧାର",
"wikieditor-toolbar-help-content-reference-syntax": "Page text.&lt;ref name=\"test\"&gt;[http://www.example.org Link text], additional text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "ପୃଷ୍ଠା ଲେଖା ।<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/os.json b/extensions/WikiEditor/i18n/os.json
index d286003c..667e50a4 100644
--- a/extensions/WikiEditor/i18n/os.json
+++ b/extensions/WikiEditor/i18n/os.json
@@ -1,7 +1,9 @@
{
"@metadata": {
"authors": [
- "Bouron"
+ "Bouron",
+ "Amikeco",
+ "Macofe"
]
},
"wikieditor": "Размæцыд викитекст ивыны интерфейс",
@@ -12,9 +14,6 @@
"wikieditor-preview-tab": "Разæркаст",
"wikieditor-preview-changes-tab": "Ивдтытæ",
"wikieditor-preview-loading": "Æвгæд цæуы...",
- "wikieditor-previewDialog-preference": "Разбакасты диалог баиу кæнын",
- "wikieditor-previewDialog-tab": "Разæркаст",
- "wikieditor-previewDialog-loading": "Æвгæд цæуы...",
"wikieditor-publish-preference": "Радгай рауагъд баиу кæнын",
"wikieditor-publish-button-publish": "Рауадзын",
"wikieditor-publish-button-cancel": "Ныууадзын",
@@ -140,35 +139,13 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Ды ницы бацамыдтай агурынæн",
"wikieditor-toolbar-tool-replace-invalidregex": "Ды цы реулярон ныхас бацамыдтай, уый раст нæу: $1",
"wikieditor-toolbar-section-characters": "Сæрмагонд дамгъæтæ",
- "wikieditor-toolbar-characters-page-latin": "Латинаг",
- "wikieditor-toolbar-characters-page-latinextended": "Латинаг, уæрæхгонд",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Символтæ",
- "wikieditor-toolbar-characters-page-greek": "Грекъаг",
- "wikieditor-toolbar-characters-page-cyrillic": "Кириллон",
- "wikieditor-toolbar-characters-page-arabic": "Араббаг",
- "wikieditor-toolbar-characters-page-arabicextended": "Араббаг, уæрæхгонд",
- "wikieditor-toolbar-characters-page-persian": "Персайнаг",
- "wikieditor-toolbar-characters-page-hebrew": "Иврит",
- "wikieditor-toolbar-characters-page-bangla": "Бенгалаг",
- "wikieditor-toolbar-characters-page-tamil": "Тамилаг",
- "wikieditor-toolbar-characters-page-telugu": "Телугуйаг",
- "wikieditor-toolbar-characters-page-sinhala": "Сингалаг",
- "wikieditor-toolbar-characters-page-gujarati": "Гуджараттаг",
- "wikieditor-toolbar-characters-page-devanagari": "Девангариаг",
- "wikieditor-toolbar-characters-page-thai": "Тайаг",
- "wikieditor-toolbar-characters-page-lao": "Лаойаг",
- "wikieditor-toolbar-characters-page-khmer": "Кхмераг",
- "wikieditor-toolbar-characters-endash": "ен дæш",
- "wikieditor-toolbar-characters-emdash": "ем дæш",
- "wikieditor-toolbar-characters-minus": "минусы нысан",
"wikieditor-toolbar-section-help": "Æххуыс",
"wikieditor-toolbar-help-heading-description": "Амынд",
"wikieditor-toolbar-help-heading-syntax": "Цы фыссыс",
"wikieditor-toolbar-help-heading-result": "Цы исыс",
"wikieditor-toolbar-help-page-format": "Фæлындын",
"wikieditor-toolbar-help-page-link": "Æрвитæнтæ",
- "wikieditor-toolbar-help-page-heading": "Сæртæ",
+ "wikieditor-toolbar-help-page-heading": "Сæргæндтæ",
"wikieditor-toolbar-help-page-list": "Номхыгъдтæ",
"wikieditor-toolbar-help-page-file": "Файлтæ",
"wikieditor-toolbar-help-page-reference": "Фиппаинæгтæ",
@@ -207,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Номхыгъды иуæг<br /># Номхыгъды иуæг",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Номхыгъды иуæг</li><li>Номхыгъды иуæг</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Æфтыд файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Æмбарынггæнæн текст]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Æмбарынгæнæн текст' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Баввахс кæнын' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Æмбарынгæнæн текст</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Фиппаинаг",
"wikieditor-toolbar-help-content-reference-syntax": "Фарсы текст.&lt;ref name=\"test\"&gt;[http://www.example.org Æрвитæны текст], уæлæмхасæн текст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Фарсы текст.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/pl.json b/extensions/WikiEditor/i18n/pl.json
index fba69da8..b477be7c 100644
--- a/extensions/WikiEditor/i18n/pl.json
+++ b/extensions/WikiEditor/i18n/pl.json
@@ -11,7 +11,8 @@
"Sp5uhe",
"ToSter",
"WTM",
- "Wpedzich"
+ "Wpedzich",
+ "Mareklug"
]
},
"wikieditor": "Zaawansowany interfejs edycji wikitekstu",
@@ -22,9 +23,6 @@
"wikieditor-preview-tab": "Podgląd",
"wikieditor-preview-changes-tab": "Zmiany",
"wikieditor-preview-loading": "Wczytywanie...",
- "wikieditor-previewDialog-preference": "Włącz okno podglądu",
- "wikieditor-previewDialog-tab": "Podgląd",
- "wikieditor-previewDialog-loading": "Wczytywanie...",
"wikieditor-publish-preference": "Wspomaga publikację materiału krok po kroku",
"wikieditor-publish-button-publish": "Opublikuj",
"wikieditor-publish-button-cancel": "Anuluj",
@@ -218,8 +216,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Pozycja listy<br /># Pozycja listy",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Pozycja listy</li><li>Pozycja listy</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Plik osadzony",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Przykład.png|thumb|Tekst podpisu]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Tekst podpisu</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Przykład.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Przypis",
"wikieditor-toolbar-help-content-reference-syntax": "Treść strony&lt;ref name=\"test\"&gt; [http://www.przyklad.org Opis linku], dodatkowy tekst. &lt;/ref&gt;.",
"wikieditor-toolbar-help-content-reference-result": "Treść strony<sup><a href='#'>[1]</a></sup>.",
diff --git a/extensions/WikiEditor/i18n/pms.json b/extensions/WikiEditor/i18n/pms.json
index 58b373d7..8cdaa71d 100644
--- a/extensions/WikiEditor/i18n/pms.json
+++ b/extensions/WikiEditor/i18n/pms.json
@@ -3,7 +3,8 @@
"authors": [
"Borichèt",
"Dragonòt",
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "Macofe"
]
},
"wikieditor": "Antërfacia ëd modìfica avansà ëd wikitext",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "Previsualisassion",
"wikieditor-preview-changes-tab": "Cangiament",
"wikieditor-preview-loading": "A caria ...",
- "wikieditor-previewDialog-preference": "Abilité le conversassion ëd preuva",
- "wikieditor-previewDialog-tab": "Previsualisassion",
- "wikieditor-previewDialog-loading": "A caria ...",
"wikieditor-publish-preference": "Abìlita publicassion pass për pass",
"wikieditor-publish-button-publish": "Pùblica",
"wikieditor-publish-button-cancel": "Scancela",
@@ -143,28 +141,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "A l'ha butà gnun test da arserché.",
"wikieditor-toolbar-tool-replace-invalidregex": "L'espression regolar ch'a l'ha anserì a l'é nen bon-a: $1",
"wikieditor-toolbar-section-characters": "Caràter speciaj",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin ëspantià",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Sìmboj",
- "wikieditor-toolbar-characters-page-greek": "Grech",
- "wikieditor-toolbar-characters-page-cyrillic": "Sirìlich",
- "wikieditor-toolbar-characters-page-arabic": "Àrabo",
- "wikieditor-toolbar-characters-page-arabicextended": "Àrabo spantià",
- "wikieditor-toolbar-characters-page-persian": "Persian",
- "wikieditor-toolbar-characters-page-hebrew": "Ebréo",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalèis",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "tratin en",
- "wikieditor-toolbar-characters-emdash": "tratin em",
- "wikieditor-toolbar-characters-minus": "segn meno",
"wikieditor-toolbar-section-help": "Agiut",
"wikieditor-toolbar-help-heading-description": "Descrission",
"wikieditor-toolbar-help-heading-syntax": "Lòn ch'a bat",
@@ -210,8 +186,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Element ëd la lista<br /># Element ëd la lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Element ëd la lista</li><li>Element ëd la lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Archivi anserì",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Test dël tìtol]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Test mostrà' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Test mostrà</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Arferiment",
"wikieditor-toolbar-help-content-reference-syntax": "Test ëd dla pàgina.&lt;ref name=\"test\"&gt;[http://www.example.org Test dël colegament], test adissional.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Test ëd la pàgina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/pnb.json b/extensions/WikiEditor/i18n/pnb.json
index ab4eeb0e..49870b62 100644
--- a/extensions/WikiEditor/i18n/pnb.json
+++ b/extensions/WikiEditor/i18n/pnb.json
@@ -3,7 +3,8 @@
"authors": [
"BMRG14",
"Ebraminio",
- "Khalid Mahmood"
+ "Khalid Mahmood",
+ "Macofe"
]
},
"wikieditor": "اگیودواں وکیٹکسٹ نوں تبدیل کرن دا سسٹم",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "کچا کم وکھاؤ",
"wikieditor-preview-changes-tab": "تبدیلیاں",
"wikieditor-preview-loading": "لوڈنگ۔۔۔",
- "wikieditor-previewDialog-preference": "پریویو ڈائیلاگ قابل کرو۔",
- "wikieditor-previewDialog-tab": "کچا کم وکھاؤ",
- "wikieditor-previewDialog-loading": "لوڈنگ۔۔۔",
"wikieditor-publish-preference": "تھوڑی تھوڑی چھپائی قابل کرو۔",
"wikieditor-publish-button-publish": "چھاپو",
"wikieditor-publish-button-cancel": "کینسل",
@@ -131,23 +129,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "جوڑ لئی تساں کوئی شے نئیں لکھی۔",
"wikieditor-toolbar-tool-replace-invalidregex": "ایکسپریشن جیہڑی تساں پائی اے ٹھیک نغیں:$1",
"wikieditor-toolbar-section-characters": "خاص کیریکٹرز",
- "wikieditor-toolbar-characters-page-latin": "لاطینی",
- "wikieditor-toolbar-characters-page-latinextended": "ودویں لاطینی",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "نشان",
- "wikieditor-toolbar-characters-page-greek": "یونانی",
- "wikieditor-toolbar-characters-page-cyrillic": "سریلیک",
- "wikieditor-toolbar-characters-page-arabic": "عربی",
- "wikieditor-toolbar-characters-page-arabicextended": "عربی ودویں",
- "wikieditor-toolbar-characters-page-persian": "فارسی",
- "wikieditor-toolbar-characters-page-hebrew": "عبرانی",
- "wikieditor-toolbar-characters-page-bangla": "بنگالی",
- "wikieditor-toolbar-characters-page-telugu": "تلیگو",
- "wikieditor-toolbar-characters-page-sinhala": "سنہالی",
- "wikieditor-toolbar-characters-page-gujarati": "گجراتی",
- "wikieditor-toolbar-characters-page-thai": "تھائی",
- "wikieditor-toolbar-characters-page-lao": "لاؤ",
- "wikieditor-toolbar-characters-page-khmer": "کھیمر",
"wikieditor-toolbar-section-help": "مدد",
"wikieditor-toolbar-help-heading-description": "بیان",
"wikieditor-toolbar-help-heading-syntax": "تسی کی لکھدے او",
@@ -193,8 +174,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "#لسٹ آئٹم<br />#لسٹ آئٹم",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>لسٹ آئٹم</li><li>لسٹ آئٹم</li></ol>",
"wikieditor-toolbar-help-content-file-description": "مورت لگی فائل",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|سرخی]]",
- "wikieditor-toolbar-help-content-file-result": "<div سٹائل='چوڑائی:104px;' کلاس='تھمبنر'><اک سرخی='سرخی لکھت' کلاس='مورت' href='#'><مورت اونچائی='50' چوڑائی='100' باڈر='0' کلاس='تھمبامیج' src='ایکسٹنشن/وکیایڈیٹر/موڈیولز/مورتاں/اوزار پٹی/ادھارن-مورت.پیاینجی' alt=''/></a><ڈو کلاس='تھمبسرخی'><ڈو کلاس='وڈاکرنا'><اک سرخی='وڈا' کلاس='انٹرنل' href='#'><مورت انچائی='11' چوڑائی='15' alt='' src='$1/کامن/مورتاں/وڈا کلپ۔پیاینجی.پیاینجی'/></a></div>سرخی لکھت</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "اتے پتے",
"wikieditor-toolbar-help-content-reference-syntax": "صفہ لکھت.&lt;ref name=\"test\"&gt;[http://www.example.org جوڑ لکھت], ہور لکھت.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "صفا لکھت.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ps.json b/extensions/WikiEditor/i18n/ps.json
index 649765dc..ecd204a3 100644
--- a/extensions/WikiEditor/i18n/ps.json
+++ b/extensions/WikiEditor/i18n/ps.json
@@ -11,8 +11,6 @@
"wikieditor-preview-tab": "مخليدنه",
"wikieditor-preview-changes-tab": "بدلونونه",
"wikieditor-preview-loading": "برسېرېدنې کې دی...",
- "wikieditor-previewDialog-tab": "مخليدنه",
- "wikieditor-previewDialog-loading": "برسېرېدنې کې دی...",
"wikieditor-publish-preference": "ګام په ګام خپرېدنه چارنده کول",
"wikieditor-publish-button-publish": "خپرول",
"wikieditor-publish-button-cancel": "ناگارل",
@@ -176,7 +174,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# د لړليک توکی<br /># د لړليک توکی",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>د لړليک توکی</li><li>د لړليک توکی</li></ol>",
"wikieditor-toolbar-help-content-file-description": "خښه شوې دوتنه",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|د څرګندولو متن]]",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:بېلگه.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "سرچينه",
"wikieditor-toolbar-help-content-reference-syntax": "د مخ متن.&lt;ref name=\"test\"&gt;[http://www.example.org د تړنې متن], اضافي متن.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "د مخ متن.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/pt-br.json b/extensions/WikiEditor/i18n/pt-br.json
index 90d9df24..8176642b 100644
--- a/extensions/WikiEditor/i18n/pt-br.json
+++ b/extensions/WikiEditor/i18n/pt-br.json
@@ -12,7 +12,11 @@
"Luckas Blade",
"MetalBrasil",
"Rafael Vargas",
- "555"
+ "555",
+ "Dianakc",
+ "He7d3r",
+ "Opraco",
+ "Macofe"
]
},
"wikieditor": "Interface avançada de edição de wikitexto",
@@ -23,9 +27,6 @@
"wikieditor-preview-tab": "Pré-visualização",
"wikieditor-preview-changes-tab": "Alterações",
"wikieditor-preview-loading": "Carregando...",
- "wikieditor-previewDialog-preference": "Ativar o diálogo de previsão",
- "wikieditor-previewDialog-tab": "Pré-visualização",
- "wikieditor-previewDialog-loading": "Carregando...",
"wikieditor-publish-preference": "Ativar publicação passo-a-passo",
"wikieditor-publish-button-publish": "Publicar",
"wikieditor-publish-button-cancel": "Cancelar",
@@ -38,7 +39,7 @@
"wikieditor-toolbar": "Barra de ferramentas de edição",
"wikieditor-toolbar-desc": "Barra de ferramentas de edição com usabilidade melhorada",
"wikieditor-toolbar-preference": "Ativar a barra de ferramentas de edição melhorada",
- "wikieditor-toolbar-dialogs-preference": "Possibilitar diálogos de inserção de ligações, tabelas assim como a função de buscar e substituir",
+ "wikieditor-toolbar-dialogs-preference": "Ativa assistentes para a inserção de links, tabelas assim como a função de procurar e substituir",
"wikieditor-toolbar-hidesig": "Esconder o botão da assinatura nas páginas do espaço nominal principal",
"wikieditor-toolbar-loading": "Carregando...",
"wikieditor-toolbar-tool-bold": "Negrito",
@@ -51,12 +52,12 @@
"wikieditor-toolbar-tool-xlink-example": "http://www.example.com título do link",
"wikieditor-toolbar-tool-link": "Link",
"wikieditor-toolbar-tool-link-title": "Inserir link",
- "wikieditor-toolbar-tool-link-int": "Para uma página wiki",
+ "wikieditor-toolbar-tool-link-int": "Para uma página na wiki",
"wikieditor-toolbar-tool-link-int-target": "Página ou URL de destino:",
"wikieditor-toolbar-tool-link-int-target-tooltip": "Título ou URL da página",
"wikieditor-toolbar-tool-link-int-text": "Texto de exibição:",
"wikieditor-toolbar-tool-link-int-text-tooltip": "Insira o texto a ser exibido",
- "wikieditor-toolbar-tool-link-ext": "À uma página web externa",
+ "wikieditor-toolbar-tool-link-ext": "Para uma página web externa",
"wikieditor-toolbar-tool-link-ext-target": "URL do link:",
"wikieditor-toolbar-tool-link-ext-text": "Título do link:",
"wikieditor-toolbar-tool-link-insert": "Inserir link",
@@ -152,29 +153,10 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Você não introduziu nada para buscar.",
"wikieditor-toolbar-tool-replace-invalidregex": "A expressão regular ''(regex)'' que você introduziu é inválida: $1",
"wikieditor-toolbar-section-characters": "Caracteres especiais",
- "wikieditor-toolbar-characters-page-latin": "Latino",
- "wikieditor-toolbar-characters-page-latinextended": "Latino estendido",
- "wikieditor-toolbar-characters-page-ipa": "AFI (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Símbolos",
- "wikieditor-toolbar-characters-page-greek": "Grego",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirílico",
- "wikieditor-toolbar-characters-page-arabic": "Árabe",
- "wikieditor-toolbar-characters-page-arabicextended": "Árabe estendido",
- "wikieditor-toolbar-characters-page-persian": "Persa",
- "wikieditor-toolbar-characters-page-hebrew": "Hebraico",
- "wikieditor-toolbar-characters-page-bangla": "Bengali",
- "wikieditor-toolbar-characters-page-tamil": "Tâmil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Cingalês",
- "wikieditor-toolbar-characters-page-gujarati": "Guzerate",
- "wikieditor-toolbar-characters-page-devanagari": "Devanágari",
- "wikieditor-toolbar-characters-page-thai": "Tailandês",
- "wikieditor-toolbar-characters-page-lao": "Laociano",
- "wikieditor-toolbar-characters-page-khmer": "Cambojano",
"wikieditor-toolbar-section-help": "Ajuda",
"wikieditor-toolbar-help-heading-description": "Descrição",
"wikieditor-toolbar-help-heading-syntax": "O que você digita",
- "wikieditor-toolbar-help-heading-result": "O que você obtém",
+ "wikieditor-toolbar-help-heading-result": "Resultado",
"wikieditor-toolbar-help-page-format": "Formatação",
"wikieditor-toolbar-help-page-link": "Links",
"wikieditor-toolbar-help-page-heading": "Títulos de seções",
@@ -188,9 +170,9 @@
"wikieditor-toolbar-help-content-bold-description": "Negrito",
"wikieditor-toolbar-help-content-bold-syntax": "'''Texto em negrito'''",
"wikieditor-toolbar-help-content-bold-result": "<strong>Texto em negrito</strong>",
- "wikieditor-toolbar-help-content-bolditalic-description": "Negrito &amp; itálico",
- "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Texto em negrito &amp; itálico'''''",
- "wikieditor-toolbar-help-content-bolditalic-result": "<strong><em>Texto em negrito &amp; itálico</em></strong>",
+ "wikieditor-toolbar-help-content-bolditalic-description": "Negrito e itálico",
+ "wikieditor-toolbar-help-content-bolditalic-syntax": "'''''Texto em negrito e itálico'''''",
+ "wikieditor-toolbar-help-content-bolditalic-result": "<strong><em>Texto em negrito e itálico</em></strong>",
"wikieditor-toolbar-help-content-ilink-description": "Link interno",
"wikieditor-toolbar-help-content-ilink-syntax": "[[Título da página|texto do link]]<br />[[Título da página]]",
"wikieditor-toolbar-help-content-ilink-result": "<a href='#'>Título do link</a><br /><a href='#'>Título da página</a>",
@@ -216,8 +198,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Item de lista<br /># Item de lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Item de lista</li><li>Item de lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Arquivo embutido",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|thumb|Legenda]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Legenda' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Aumentar' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Legenda</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referência",
"wikieditor-toolbar-help-content-reference-syntax": "Texto da página.&lt;ref name=\"teste\"&gt;[http://www.exemplo.org Texto do link], texto adicional.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Texto da página.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/pt.json b/extensions/WikiEditor/i18n/pt.json
index fe74b679..4a56ac28 100644
--- a/extensions/WikiEditor/i18n/pt.json
+++ b/extensions/WikiEditor/i18n/pt.json
@@ -12,7 +12,9 @@
"SandroHc",
"Vitorvicentevalente",
"Waldir",
- "555"
+ "555",
+ "He7d3r",
+ "Opraco"
]
},
"wikieditor": "Interface avançada de edição de texto wiki",
@@ -23,9 +25,6 @@
"wikieditor-preview-tab": "Antevisão",
"wikieditor-preview-changes-tab": "Alterações",
"wikieditor-preview-loading": "A carregar…",
- "wikieditor-previewDialog-preference": "Activar o diálogo de antevisão",
- "wikieditor-previewDialog-tab": "Antevisão",
- "wikieditor-previewDialog-loading": "A carregar…",
"wikieditor-publish-preference": "Possibilitar publicação passo a passo",
"wikieditor-publish-button-publish": "Publicar",
"wikieditor-publish-button-cancel": "Cancelar",
@@ -51,7 +50,7 @@
"wikieditor-toolbar-tool-xlink-example": "http://www.example.com título do link",
"wikieditor-toolbar-tool-link": "Link",
"wikieditor-toolbar-tool-link-title": "Inserir um link",
- "wikieditor-toolbar-tool-link-int": "Para uma página wiki",
+ "wikieditor-toolbar-tool-link-int": "Para uma página na wiki",
"wikieditor-toolbar-tool-link-int-target": "Página ou URL de destino:",
"wikieditor-toolbar-tool-link-int-target-tooltip": "Título ou URL da página",
"wikieditor-toolbar-tool-link-int-text": "Texto a apresentar:",
@@ -66,6 +65,7 @@
"wikieditor-toolbar-tool-link-int-target-status-invalid": "Título inválido",
"wikieditor-toolbar-tool-link-int-target-status-external": "Link externo",
"wikieditor-toolbar-tool-link-int-target-status-loading": "A verificar se a página existe...",
+ "wikieditor-toolbar-tool-link-int-target-status-disambig": "Página de desambiguação",
"wikieditor-toolbar-tool-link-int-invalid": "O título que especificou é inválido.",
"wikieditor-toolbar-tool-link-lookslikeinternal": "A URL que especificou parece ser um link para outra página da wiki. Deseja torná-la num link interno?",
"wikieditor-toolbar-tool-link-lookslikeinternal-int": "Link interno",
@@ -80,6 +80,7 @@
"wikieditor-toolbar-file-float": "Alinhamento:",
"wikieditor-toolbar-file-default": "(padrão)",
"wikieditor-toolbar-file-format": "Formato:",
+ "wikieditor-toolbar-file-format-none": "nenhuma",
"wikieditor-toolbar-tool-file-insert": "Inserir",
"wikieditor-toolbar-tool-file-cancel": "Cancelar",
"wikieditor-toolbar-tool-reference": "Referência",
@@ -217,8 +218,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elemento de lista<br /># Elemento de lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elemento de lista</li><li>Elemento de lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ficheiro incorporado",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|thumb|Texto da legenda]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Legenda' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Aumentar' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Legenda</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplo.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Texto da legenda",
"wikieditor-toolbar-help-content-reference-description": "Referência",
"wikieditor-toolbar-help-content-reference-syntax": "Texto da página.&lt;ref name=\"teste\"&gt;[http://www.exemplo.org Texto do link], texto adicional.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Texto da página.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/qqq.json b/extensions/WikiEditor/i18n/qqq.json
index 1793d5a7..452d6738 100644
--- a/extensions/WikiEditor/i18n/qqq.json
+++ b/extensions/WikiEditor/i18n/qqq.json
@@ -19,19 +19,19 @@
"Siebrand",
"Umherirrender",
"Yekrats",
- "Liuxinyu970226"
+ "Liuxinyu970226",
+ "Metalhead64",
+ "Mareklug"
]
},
"wikieditor": "An extension to allow for advanced editing features.\nhttp://www.mediawiki.org/wiki/Extension:WikiEditor",
- "wikieditor-desc": "{{desc|name=Wiki Editor|url=http://www.mediawiki.org/wiki/Extension:WikiEditor}}\nI guess that \"feature-providing modules\" means the same as \"modules providing features\".",
+ "wikieditor-desc": "{{desc|name=Wiki Editor|url=https://www.mediawiki.org/wiki/Extension:WikiEditor}}\nI guess that \"feature-providing modules\" means the same as \"modules providing features\".",
"wikieditor-wikitext-tab": "Caption of the tab containing the edit box",
"wikieditor-loading": "Explanatory text for the temporary cover placed over the wikieditor while it's being assembled.\n{{Identical|Loading}}",
"wikieditor-preview-preference": "Option in [[Special:Preferences]], tab ''{{int:prefs-editing}}''",
"wikieditor-preview-tab": "Caption of the tab containing the preview\n\n{{Identical|Preview}}",
"wikieditor-preview-changes-tab": "Caption of the tab containing a diff of the user's changes, à la ''{{int:Showdiff}}'' ({{msg-mw|Showdiff|notext=1}}).\n\n{{Identical|Change}}",
"wikieditor-preview-loading": "Alt text for spinner displayed while preview is being loaded\n{{Identical|Loading}}",
- "wikieditor-previewDialog-tab": "Caption of the tab containing the preview\n\n{{Identical|Preview}}",
- "wikieditor-previewDialog-loading": "Alt text for spinner displayed while preview is being loaded\n{{Identical|Loading}}",
"wikieditor-publish-preference": "Option in [[Special:Preferences]], tab ''{{int:prefs-editing}}''",
"wikieditor-publish-button-publish": "Button to the right of the Edit/Preview tabs that opens a dialog window that lets the user save their edit\n\n{{Identical|Publish}}",
"wikieditor-publish-button-cancel": "Button to the right of the Edit/Preview tabs that has the same effect as the {{msg-mw|Cancel}} link below the edit box.\n\n{{Identical|Cancel}}",
@@ -111,7 +111,7 @@
"wikieditor-toolbar-tool-table-insert": "See screenshot.\n[[File:Wikieditor-toolbar-tool-table.png|thumb]]\n{{Identical|Insert}}",
"wikieditor-toolbar-tool-table-cancel": "{{Identical|Cancel}}",
"wikieditor-toolbar-tool-table-example-text": "{{optional}}\nPlaceholder text to help the table example appear to be in the context of an article. Should be lorem ipsum, or equivalent.",
- "wikieditor-toolbar-tool-table-toomany": "See also:\n* {{msg-mw|wikieditor-toolbar-tool-table-invalidnumber}}\n* {{msg-mw|wikieditor-toolbar-tool-table-zero}}\n* {{msg-mw|wikieditor-toolbar-tool-table-toomany}}",
+ "wikieditor-toolbar-tool-table-toomany": "See also:\n* {{msg-mw|wikieditor-toolbar-tool-table-invalidnumber}}\n* {{msg-mw|wikieditor-toolbar-tool-table-zero}}\n* {{msg-mw|wikieditor-toolbar-tool-table-toomany}}\n\nParameter:\n* $1 - Maximum number of permitted table cells (currently 1000)",
"wikieditor-toolbar-tool-table-invalidnumber": "See also:\n* {{msg-mw|wikieditor-toolbar-tool-table-invalidnumber}}\n* {{msg-mw|wikieditor-toolbar-tool-table-zero}}\n* {{msg-mw|wikieditor-toolbar-tool-table-toomany}}",
"wikieditor-toolbar-tool-table-zero": "See also:\n* {{msg-mw|wikieditor-toolbar-tool-table-invalidnumber}}\n* {{msg-mw|wikieditor-toolbar-tool-table-zero}}\n* {{msg-mw|wikieditor-toolbar-tool-table-toomany}}",
"wikieditor-toolbar-tool-replace": "{{Identical|Search and replace}}",
@@ -125,26 +125,9 @@
"wikieditor-toolbar-tool-replace-success": "Parameter:\n* $1 - the number of replacements",
"wikieditor-toolbar-tool-replace-invalidregex": "Parameters:\n* $1 - a browser-supplied error message, probably in English, possibly in the browser language.\n\nA \"regular expression\" is a syntax to find strings based on patterns, for more see [[wikipedia:Regular expression|the Wikipedia article]].\n\nRegular expressions are mostly a programmer tool, which is sometimes exposed to normal users too.\n\nIt's almost as a programming language, but it is used to describe different kinds of strings (sometimes also called patterns and pattern matching), and is often used to change (parts of) the strings too.",
"wikieditor-toolbar-section-characters": "This will be a toolbar for special characters, like emoticons.\nFor more information, see http://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization\n{{Identical|Special character}}",
- "wikieditor-toolbar-characters-page-latin": "This is the name of a script, or alphabet, not a language",
- "wikieditor-toolbar-characters-page-latinextended": "The name of the Latin Extended character set section of the toolbar.\nFor more information, see http://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization",
- "wikieditor-toolbar-characters-page-ipa": "IPA means a script: \"international phonetic alphabet\" here, and not \"international phonetic association\", the organization behind it.",
- "wikieditor-toolbar-characters-page-symbols": "The section name for symbols on the wiki-toolbar.\nFor more information, see http://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization",
- "wikieditor-toolbar-characters-page-greek": "This is the name of a script, or alphabet, not a language.",
- "wikieditor-toolbar-characters-page-cyrillic": "This is the name of a script, or a group of alphabets, used mainly in Eastern Europe and North and Central Asia.",
- "wikieditor-toolbar-characters-page-arabic": "This is the name of a script, or alphabet, not a language.",
- "wikieditor-toolbar-characters-page-arabicextended": "This is a description of the additional group of Arabic script characters for languages such as a Persian, Urdu, Pashto and others. This message is supposed to be similar to {{msg-mw|Wikieditor-toolbar-characters-page-latinextended}}.",
- "wikieditor-toolbar-characters-page-persian": "The name of the Persian character set (alphabet) on the toolbar.\nFor more information, see http://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization",
- "wikieditor-toolbar-characters-page-hebrew": "This is the name of a script, or alphabet, not a language.",
- "wikieditor-toolbar-characters-page-bangla": "The name of the [[w:Bengali alphabet|Bangla]] (a.k.a. Bengali) character set (alphabet) on the toolbar.\nFor more information, see http://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization",
- "wikieditor-toolbar-characters-page-tamil": "The name of the [[w:Tamil_Script#Numerals_and_symbols|Tamil]] numerals and symbols on the toolbar.\nFor more information, see http://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization",
- "wikieditor-toolbar-characters-page-telugu": "The name of the [[w:Telugu language#Alphabet|Telugu]] character set (alphabet) on the toolbar.\nFor more information, see http://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization",
- "wikieditor-toolbar-characters-page-lao": "{{Identical|Lao}}",
- "wikieditor-toolbar-characters-page-khmer": "{{Identical|Khmer}}",
- "wikieditor-toolbar-characters-endash": "Title tooltip for the en dash character (–); See https://en.wikipedia.org/wiki/Dash",
- "wikieditor-toolbar-characters-emdash": "Title tooltip for the em dash character (—); See https://en.wikipedia.org/wiki/Dash",
- "wikieditor-toolbar-characters-minus": "Title tooltip for the minus sign character (−), not to be confused with a hyphen",
"wikieditor-toolbar-section-help": "{{Identical|Help}}",
"wikieditor-toolbar-help-heading-description": "{{Identical|Description}}",
+ "wikieditor-toolbar-help-page-format": "{{Identical|Formatting}}",
"wikieditor-toolbar-help-page-link": "{{Identical|Link}}",
"wikieditor-toolbar-help-page-heading": "{{Identical|Heading}}",
"wikieditor-toolbar-help-page-list": "{{Identical|List}}",
@@ -175,8 +158,8 @@
"wikieditor-toolbar-help-content-ulist-description": "{{Identical|Bulleted list}}",
"wikieditor-toolbar-help-content-olist-description": "{{Identical|Numbered list}}",
"wikieditor-toolbar-help-content-file-description": "{{Identical|Embedded file}}",
- "wikieditor-toolbar-help-content-file-syntax": "{{doc-important|''thumb'' is a magic word. Leave it untranslated!}}\nParameters:\n* $1 - \"File\" namespace name",
- "wikieditor-toolbar-help-content-file-result": "{{doc-important|Do not translate anything except \"Caption text\" (twice) and \"Enlarge\" (to \"{{int:thumbnail-more}}\").}}\nParameters:\n* $1 - style path. e.g. \"/w/skins\"\n* $2 - extension assets path. e.g. \"/w/extensions\"",
+ "wikieditor-toolbar-help-content-file-syntax": "Parameters:\n* $1 - \"File\" namespace name\n* $2 - the image syntax parameter for a thumbnail\n* $3 - the caption for the a thumbnail",
+ "wikieditor-toolbar-help-content-file-caption": "Placeholder text for file caption. Must match {{msg-mw|wikieditor-toolbar-help-content-file-syntax}}.",
"wikieditor-toolbar-help-content-reference-description": "{{Identical|Reference}}",
"wikieditor-toolbar-help-content-reference-syntax": "I suggest leaving the <code>name=\"test\"</code> string in English\n\nwww.example.org is not a real website, but it has been reserved to use in software documentation. If you translate the word example and try to go to that web address then you might get a message that it doesn't exist. But somebody may have created a commercial web page for that address, such as www.Beispiel.org, using the German word for example. It is therefore recommended that you do not translate http://www.example.org at all. If you do wish to translate it you should first check where the translated link takes you.",
"wikieditor-toolbar-help-content-rereference-syntax": "{{Optional}}",
diff --git a/extensions/WikiEditor/i18n/qu.json b/extensions/WikiEditor/i18n/qu.json
index 6551f39e..bf4a270f 100644
--- a/extensions/WikiEditor/i18n/qu.json
+++ b/extensions/WikiEditor/i18n/qu.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "AlimanRuna"
+ "AlimanRuna",
+ "Macofe"
]
},
"wikieditor": "Ñawparikusqa wiki qillqa llamk'apuna uyapura",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Ñawpaqta qhawallay",
"wikieditor-preview-changes-tab": "Hukchasqakuna",
"wikieditor-preview-loading": "Chaqnamuspa…",
- "wikieditor-previewDialog-preference": "Ñawpaq qhawana willanakuyta atichiy",
- "wikieditor-previewDialog-tab": "Ñawpaqta qhawallay",
- "wikieditor-previewDialog-loading": "Chaqnamuspa…",
"wikieditor-publish-preference": "Thatki-thatkilla uyaychayta atichiy",
"wikieditor-publish-button-publish": "Uyaychay",
"wikieditor-publish-button-cancel": "Ama niy",
@@ -141,28 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Manam ima maskanatapas yaykuchirqunkichu.",
"wikieditor-toolbar-tool-replace-invalidregex": "Qusqayki patanchay qillqananchaqa manam allinchu: $1",
"wikieditor-toolbar-section-characters": "Sapaq sanampakuna",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Latin mast'arisqa",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Sananchakuna",
- "wikieditor-toolbar-characters-page-greek": "Grigu",
- "wikieditor-toolbar-characters-page-cyrillic": "Kirilitsa",
- "wikieditor-toolbar-characters-page-arabic": "Arabya",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabya mast'arisqa",
- "wikieditor-toolbar-characters-page-persian": "Pharsi",
- "wikieditor-toolbar-characters-page-hebrew": "Iwriyu",
- "wikieditor-toolbar-characters-page-bangla": "Banla",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Guyarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thay",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "kuru aspi",
- "wikieditor-toolbar-characters-emdash": "suni aspi",
- "wikieditor-toolbar-characters-minus": "qichuy sanancha",
"wikieditor-toolbar-section-help": "Yanapa",
"wikieditor-toolbar-help-heading-description": "T'iktuna",
"wikieditor-toolbar-help-heading-syntax": "Qillqasqayki kaq",
@@ -208,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Sutisuyup qallawan<br /># Sutisuyup qallawan",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Sutisuyup qallawan</li><li>Sutisuyup qallawan</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ch'aqtasqa rikcha",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Qhawarichiy.png|thumb|Ch'uyanchay qillqa]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Ch'uyanchay qillqa' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Hatunchay' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Ch'uyanchay qillqa</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Qhawarichiy.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Pukyumanta willay",
"wikieditor-toolbar-help-content-reference-syntax": "P'anqa qillqa.&lt;ref name=\"test\"&gt;[http://www.example.org T'inki qillqa], yapasqa qillqa.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "P'anqa qillqa.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ro.json b/extensions/WikiEditor/i18n/ro.json
index 90ac4bc3..c07d539e 100644
--- a/extensions/WikiEditor/i18n/ro.json
+++ b/extensions/WikiEditor/i18n/ro.json
@@ -5,7 +5,8 @@
"Cin",
"Firilacroco",
"Minisarm",
- "Stelistcristi"
+ "Stelistcristi",
+ "Macofe"
]
},
"wikieditor": "Interfață de modificare wikitext avansată",
@@ -16,9 +17,6 @@
"wikieditor-preview-tab": "Previzualizare",
"wikieditor-preview-changes-tab": "Modificări",
"wikieditor-preview-loading": "Se încarcă...",
- "wikieditor-previewDialog-preference": "Activează caseta de dialog pentru previzualizare",
- "wikieditor-previewDialog-tab": "Previzualizare",
- "wikieditor-previewDialog-loading": "Se încarcă...",
"wikieditor-publish-preference": "Activează publicarea pas cu pas",
"wikieditor-publish-button-publish": "Salvează pagina",
"wikieditor-publish-button-cancel": "Renunță",
@@ -145,28 +143,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Nu ați introdus niciun cuvânt după care să căutați",
"wikieditor-toolbar-tool-replace-invalidregex": "Expresia regulată introdusă nu este corectă: $1",
"wikieditor-toolbar-section-characters": "Caractere speciale",
- "wikieditor-toolbar-characters-page-latin": "Latină",
- "wikieditor-toolbar-characters-page-latinextended": "Latină extinsă",
- "wikieditor-toolbar-characters-page-ipa": "AFI",
- "wikieditor-toolbar-characters-page-symbols": "Simboluri",
- "wikieditor-toolbar-characters-page-greek": "Greacă",
- "wikieditor-toolbar-characters-page-cyrillic": "Chirilică",
- "wikieditor-toolbar-characters-page-arabic": "Arabă",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabă extinsă",
- "wikieditor-toolbar-characters-page-persian": "Persană",
- "wikieditor-toolbar-characters-page-hebrew": "Ebraică",
- "wikieditor-toolbar-characters-page-bangla": "Bengaleză",
- "wikieditor-toolbar-characters-page-tamil": "tamilă",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thailandeză",
- "wikieditor-toolbar-characters-page-lao": "Laoțiană",
- "wikieditor-toolbar-characters-page-khmer": "Khmeră",
- "wikieditor-toolbar-characters-endash": "linie de pauză (en dash)",
- "wikieditor-toolbar-characters-emdash": "linie de pauză (em dash)",
- "wikieditor-toolbar-characters-minus": "semnul minus",
"wikieditor-toolbar-section-help": "Ajutor",
"wikieditor-toolbar-help-heading-description": "Descriere",
"wikieditor-toolbar-help-heading-syntax": "Ceea ce scrieți",
@@ -212,8 +188,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Element<br /># Element",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Element</li><li>Element</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fișier inserat",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplu.png|thumb|Descrierea imaginii]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Descrierea imaginii' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Mărește' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Descrierea imaginii</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exemplu.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referință",
"wikieditor-toolbar-help-content-reference-syntax": "Textul paginii.&lt;ref name=\"test\"&gt;[http://www.exemplu.org Textul legăturii], text suplimentar.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Textul paginii.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/roa-tara.json b/extensions/WikiEditor/i18n/roa-tara.json
index d059972b..113f3b44 100644
--- a/extensions/WikiEditor/i18n/roa-tara.json
+++ b/extensions/WikiEditor/i18n/roa-tara.json
@@ -13,9 +13,6 @@
"wikieditor-preview-tab": "Andeprime",
"wikieditor-preview-changes-tab": "Cangiaminde",
"wikieditor-preview-loading": "Carecamende...",
- "wikieditor-previewDialog-preference": "Abbilete 'u dialoghe de l'andeprime",
- "wikieditor-previewDialog-tab": "Andeprime",
- "wikieditor-previewDialog-loading": "Stoche a careche…",
"wikieditor-publish-preference": "Abbilete 'a pubblecazione passe pe passe",
"wikieditor-publish-button-publish": "Pubbleche",
"wikieditor-publish-button-cancel": "Annulle",
@@ -209,8 +206,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elemende de l'elenghe numerate<br /># Elemende de l'elenghe numerate",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elemende de l'elenghe</li><li>Elemende de l'elenghe</li></ol>",
"wikieditor-toolbar-help-content-file-description": "File 'ngorporate",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Teste d'u titele]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Teste d'u titele' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Allarie' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Teste d'u titele</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Teste d'u titole",
"wikieditor-toolbar-help-content-reference-description": "Riferimende",
"wikieditor-toolbar-help-content-reference-syntax": "Teste d'a pàgene.&lt;ref name=\"test\"&gt;[http://www.example.org Teste d'u collegamende], teste addizionale.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Teste d'a pàgene.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ru.json b/extensions/WikiEditor/i18n/ru.json
index d17200e0..b5016424 100644
--- a/extensions/WikiEditor/i18n/ru.json
+++ b/extensions/WikiEditor/i18n/ru.json
@@ -25,9 +25,6 @@
"wikieditor-preview-tab": "Предпросмотр",
"wikieditor-preview-changes-tab": "Изменения",
"wikieditor-preview-loading": "Загрузка…",
- "wikieditor-previewDialog-preference": "Включить диалог предпросмотра",
- "wikieditor-previewDialog-tab": "Предпросмотр",
- "wikieditor-previewDialog-loading": "Загрузка…",
"wikieditor-publish-preference": "Включить пошаговую публикацию",
"wikieditor-publish-button-publish": "Опубликовать",
"wikieditor-publish-button-cancel": "Отмена",
@@ -151,7 +148,7 @@
"wikieditor-toolbar-tool-replace-button-replaceall": "Заменить все",
"wikieditor-toolbar-tool-replace-close": "Закрыть",
"wikieditor-toolbar-tool-replace-nomatch": "По вашему запросу ничего не найдено.",
- "wikieditor-toolbar-tool-replace-success": "$1 {{PLURAL:$1|замена произведена|замен произведено|замены произведены}}.",
+ "wikieditor-toolbar-tool-replace-success": "$1 {{PLURAL:$1|замена произведена|замены произведены|замен произведено}}.",
"wikieditor-toolbar-tool-replace-emptysearch": "Вы не указали что следует искать.",
"wikieditor-toolbar-tool-replace-invalidregex": "Введённое вами регулярное выражение ошибочно: $1",
"wikieditor-toolbar-section-characters": "Спецсимволы",
@@ -222,8 +219,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Элемент списка<br /># Элемент списка",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Элемент списка</li><li>Элемент списка</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Встроенный файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Пояснительный текст]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='\nПояснительный текст' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Увеличить' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>\nПояснительный текст</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Пояснительный текст",
"wikieditor-toolbar-help-content-reference-description": "Примечание",
"wikieditor-toolbar-help-content-reference-syntax": "Текст страницы.&lt;ref name=\"test\"&gt;[http://www.example.org Текст ссылки], дополнительный текст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Текст страницы.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/rue.json b/extensions/WikiEditor/i18n/rue.json
index d9646ff3..5d5b13ba 100644
--- a/extensions/WikiEditor/i18n/rue.json
+++ b/extensions/WikiEditor/i18n/rue.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Gazeb"
+ "Gazeb",
+ "Macofe"
]
},
"wikieditor": "Росшыреный інтерфейс едітованя вікітексту",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Нагляд",
"wikieditor-preview-changes-tab": "Зміны",
"wikieditor-preview-loading": "Награваня...",
- "wikieditor-previewDialog-preference": "Хосновати діалоґ про нагляд",
- "wikieditor-previewDialog-tab": "Нагляд",
- "wikieditor-previewDialog-loading": "Награваня...",
"wikieditor-publish-preference": "Запнути кроковане публікованя",
"wikieditor-publish-button-publish": "Публіковати",
"wikieditor-publish-button-cancel": "Сторно",
@@ -134,23 +132,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Мусите увести што ся має глядати.",
"wikieditor-toolbar-tool-replace-invalidregex": "Заданый реґуларный выраз не є платный: $1",
"wikieditor-toolbar-section-characters": "Шпеціалны сімболы",
- "wikieditor-toolbar-characters-page-latin": "Латиньскы",
- "wikieditor-toolbar-characters-page-latinextended": "Росшырена латинка",
- "wikieditor-toolbar-characters-page-ipa": "МФА (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Сімболы",
- "wikieditor-toolbar-characters-page-greek": "Ґрецькы",
- "wikieditor-toolbar-characters-page-cyrillic": "Кірíліця",
- "wikieditor-toolbar-characters-page-arabic": "Арабськы",
- "wikieditor-toolbar-characters-page-arabicextended": "Росшырїня Аравчіны",
- "wikieditor-toolbar-characters-page-persian": "Перськы",
- "wikieditor-toolbar-characters-page-hebrew": "Гебрейскы",
- "wikieditor-toolbar-characters-page-bangla": "Бенгалскы",
- "wikieditor-toolbar-characters-page-telugu": "Телуґу",
- "wikieditor-toolbar-characters-page-sinhala": "Сінгалскы",
- "wikieditor-toolbar-characters-page-gujarati": "Ґуджараті",
- "wikieditor-toolbar-characters-page-thai": "Тайськы",
- "wikieditor-toolbar-characters-page-lao": "Лаоськы",
- "wikieditor-toolbar-characters-page-khmer": "Кгмерськы",
"wikieditor-toolbar-section-help": "Поміч",
"wikieditor-toolbar-help-heading-description": "Попис",
"wikieditor-toolbar-help-heading-syntax": "Што пишете",
@@ -196,8 +177,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Положка списку<br /># Положка списку",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Положка списку</li><li>Положка списку</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Вложіня файлу",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Пояснюючій текст]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Пояснюючій текст' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Звекшыти' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Пояснюючій текст</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Позначка",
"wikieditor-toolbar-help-content-reference-syntax": "Текст сторінкы&lt;ref name=\"test\"&gt;[http://www.example.org Текст одказу], додатковый текст.&lt;/ref&gt;.",
"wikieditor-toolbar-help-content-reference-result": "Текст сторінкы.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sa.json b/extensions/WikiEditor/i18n/sa.json
index afe9c60a..127be4e6 100644
--- a/extensions/WikiEditor/i18n/sa.json
+++ b/extensions/WikiEditor/i18n/sa.json
@@ -3,7 +3,8 @@
"authors": [
"Ansumang",
"Bhawani Gautam",
- "Shubha"
+ "Shubha",
+ "Macofe"
]
},
"wikieditor": "उन्नतवीकिपाठ्यांशस्य सम्पादनमाध्यमम्",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "प्राग्दृश्यम्",
"wikieditor-preview-changes-tab": "परिवर्तनानि",
"wikieditor-preview-loading": "आरोप्यमाणमस्ति.....",
- "wikieditor-previewDialog-preference": "प्राग्दृश्यं सक्षमं क्रियताम्",
- "wikieditor-previewDialog-tab": "प्राग्दृश्यम्",
- "wikieditor-previewDialog-loading": "आरोप्यमाणमस्ति.....",
"wikieditor-publish-preference": "सोपानशः प्रकाशनं सक्षमं क्रियताम्",
"wikieditor-publish-button-publish": "प्रकाश्यताम्",
"wikieditor-publish-button-cancel": "निरस्यताम्",
@@ -141,25 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "अन्वेषणाय न किञ्चित् सूचितम् ।",
"wikieditor-toolbar-tool-replace-invalidregex": "भवता योजिता नियताभिव्यक्तिः अमान्या विद्यते : $1",
"wikieditor-toolbar-section-characters": "विशेष-वर्णानि",
- "wikieditor-toolbar-characters-page-latin": "ल्याटिन्",
- "wikieditor-toolbar-characters-page-latinextended": "ल्याटिन्-विस्तारितम्",
- "wikieditor-toolbar-characters-page-ipa": "ऐपिए",
- "wikieditor-toolbar-characters-page-symbols": "प्रतीक",
- "wikieditor-toolbar-characters-page-greek": "ग्रीक",
- "wikieditor-toolbar-characters-page-cyrillic": "सिरिलिक्",
- "wikieditor-toolbar-characters-page-arabic": "अरबी",
- "wikieditor-toolbar-characters-page-arabicextended": "अरबीविस्तारितम्",
- "wikieditor-toolbar-characters-page-persian": "पर्शियन्",
- "wikieditor-toolbar-characters-page-hebrew": "हिब्रू",
- "wikieditor-toolbar-characters-page-bangla": "वङ्गलिपि",
- "wikieditor-toolbar-characters-page-tamil": "तमिल्",
- "wikieditor-toolbar-characters-page-telugu": "तेलुगु",
- "wikieditor-toolbar-characters-page-sinhala": "सिंहल",
- "wikieditor-toolbar-characters-page-gujarati": "गुजराती",
- "wikieditor-toolbar-characters-page-devanagari": "देवनागरी",
- "wikieditor-toolbar-characters-page-thai": "थाई",
- "wikieditor-toolbar-characters-page-lao": "लाओ",
- "wikieditor-toolbar-characters-page-khmer": "खमेर",
"wikieditor-toolbar-section-help": "साहाय्यम्",
"wikieditor-toolbar-help-heading-description": "वर्णनम्",
"wikieditor-toolbar-help-heading-syntax": "भवता किं लिख्यते",
@@ -205,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# अंशानां सूची <br /># अंशानां सूची",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>अंशानां सूची </li><li>अंशानां सूची </li></ol>",
"wikieditor-toolbar-help-content-file-description": "अन्तर्गता सञ्चिका",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:उदाहरणम्.png|thumb|शीर्षकपाठः]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='व्यासः:१०४px;' class='thumbinner'><a title='शीर्षकम्' class='चित्रम्' href='#'><img height='५०' व्यासः='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='विशालीकरोतु' class='आन्तरिकम्' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>शीर्षकम्</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:उदाहरणम्.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "आधारः",
"wikieditor-toolbar-help-content-reference-syntax": "पृष्ठपाठः ।&lt;ref name=\"test\"&gt;[http://www.example.org अनुबन्धपाठः], अतिरिक्तपाठः.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "पृष्ठपाठः.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sah.json b/extensions/WikiEditor/i18n/sah.json
index 034420ba..9a67eb41 100644
--- a/extensions/WikiEditor/i18n/sah.json
+++ b/extensions/WikiEditor/i18n/sah.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "HalanTul"
+ "HalanTul",
+ "Macofe"
]
},
"wikieditor": "Биики тиэкиһи эрэдээксийэлиир кэҥэтиллибит интерфейс",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Холоон көрүү",
"wikieditor-preview-changes-tab": "Уларыйыылар",
"wikieditor-preview-loading": "Хачайдана турар...",
- "wikieditor-previewDialog-preference": "Эрдэ көрүү диалогын холбуурга",
- "wikieditor-previewDialog-tab": "Холоон көрүү",
- "wikieditor-previewDialog-loading": "Хачайдана турар...",
"wikieditor-publish-preference": "Биирдии хаамыынан бэчээккэ таһаарыыны холбоо",
"wikieditor-publish-button-publish": "Бэчээккэ таһаарарга",
"wikieditor-publish-button-cancel": "Төнүн",
@@ -128,22 +126,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Тугу көрдүүргүн эппэтэххин.",
"wikieditor-toolbar-tool-replace-invalidregex": "Суруйбут этииҥ сыыһалаах: $1",
"wikieditor-toolbar-section-characters": "Анал бэлиэлэр",
- "wikieditor-toolbar-characters-page-latin": "Латыынныы",
- "wikieditor-toolbar-characters-page-latinextended": "Латыынныы кэтирэтиллибиттэр",
- "wikieditor-toolbar-characters-page-ipa": "МФА (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Бэлиэлэр",
- "wikieditor-toolbar-characters-page-greek": "Гириэктии",
- "wikieditor-toolbar-characters-page-cyrillic": "Кириллица",
- "wikieditor-toolbar-characters-page-arabic": "Араабтыы",
- "wikieditor-toolbar-characters-page-persian": "Персия",
- "wikieditor-toolbar-characters-page-hebrew": "Иврит",
- "wikieditor-toolbar-characters-page-bangla": "Бенгаал",
- "wikieditor-toolbar-characters-page-telugu": "Телугу",
- "wikieditor-toolbar-characters-page-sinhala": "Сингаал",
- "wikieditor-toolbar-characters-page-gujarati": "Гудьараат",
- "wikieditor-toolbar-characters-page-thai": "Таай",
- "wikieditor-toolbar-characters-page-lao": "Лаос",
- "wikieditor-toolbar-characters-page-khmer": "Кхмер",
"wikieditor-toolbar-section-help": "Көмө",
"wikieditor-toolbar-help-heading-description": "Быһаарыыта",
"wikieditor-toolbar-help-heading-syntax": "Тугу киллэрэҕин",
@@ -189,8 +171,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Тиһик бэлиэтэ<br /># Тиһик бэлиэтэ",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Тиһик бэлиэтэ</li><li>Тиһик бэлиэтэ</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Иһинээҕи билэ",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Быһаарыыта]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='\nБыһаарыы сурук' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>\nБыһаарыы сурук</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Быһаарыы",
"wikieditor-toolbar-help-content-reference-syntax": "Сирэй тиэкиһэ.&lt;ref name=\"test\"&gt;[http://www.example.org Сигэ быһаарыыта], эбии быһаарыы.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Сирэй тиэкиһэ.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sc.json b/extensions/WikiEditor/i18n/sc.json
index 003b3de6..e1b1ab60 100644
--- a/extensions/WikiEditor/i18n/sc.json
+++ b/extensions/WikiEditor/i18n/sc.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Andria",
- "Taxandru"
+ "Taxandru",
+ "Macofe"
]
},
"wikieditor-loading": "Carrigamentu",
@@ -10,8 +11,6 @@
"wikieditor-preview-tab": "Antiprima",
"wikieditor-preview-changes-tab": "Mudàntzias",
"wikieditor-preview-loading": "Carrigamentu...",
- "wikieditor-previewDialog-tab": "Antiprima",
- "wikieditor-previewDialog-loading": "Carrigamentu...",
"wikieditor-publish-button-publish": "Pùblica",
"wikieditor-publish-dialog-minor": "Modìfica minore",
"wikieditor-publish-dialog-watch": "Pone custa pàgina in sa watchlist mea",
@@ -102,7 +101,7 @@
"wikieditor-toolbar-tool-table-preview": "Antiprima",
"wikieditor-toolbar-tool-table-insert": "Inserta",
"wikieditor-toolbar-tool-table-cancel": "Annudda",
- "wikieditor-toolbar-tool-table-toomany": "Cun custu cuadru de allega no est possìbile insertare una tabella cun prus de $1 tzellas.",
+ "wikieditor-toolbar-tool-table-toomany": "Cun custu cuadru de allega no est possìbile insertare una tabella cun prus de 1000 tzellas.",
"wikieditor-toolbar-tool-table-invalidnumber": "No as insertadu unu nùmeru vàlidu de lìnias o colunnas.",
"wikieditor-toolbar-tool-table-zero": "Non podes insertare una tabella cun zeru lìnias o colunnas.",
"wikieditor-toolbar-tool-replace": "Chirca e rimpiatza",
@@ -115,26 +114,10 @@
"wikieditor-toolbar-tool-replace-button-replaceall": "Remplasa totu",
"wikieditor-toolbar-tool-replace-close": "Serra",
"wikieditor-toolbar-tool-replace-nomatch": "Sa chirca tua no at agatadu cointzidèntzias.",
- "wikieditor-toolbar-tool-replace-success": "$1 rimpiatzadu/os.",
+ "wikieditor-toolbar-tool-replace-success": "$1 {{PLURAL:$1|sostitutzione fata|sostitutziones fatas}}.",
"wikieditor-toolbar-tool-replace-emptysearch": "No as indicadu ite chircare.",
"wikieditor-toolbar-tool-replace-invalidregex": "S'espressione regulare insertada no est vàlida: $1",
"wikieditor-toolbar-section-characters": "Caràteres spetziales",
- "wikieditor-toolbar-characters-page-latin": "Latinu",
- "wikieditor-toolbar-characters-page-latinextended": "Latinu disterradu",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Sìmbulos",
- "wikieditor-toolbar-characters-page-greek": "Grecu",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirìllicu",
- "wikieditor-toolbar-characters-page-arabic": "Aràbicu",
- "wikieditor-toolbar-characters-page-persian": "Persianu",
- "wikieditor-toolbar-characters-page-hebrew": "Ebreu",
- "wikieditor-toolbar-characters-page-bangla": "Bengalesu",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalesu",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Agiudu",
"wikieditor-toolbar-help-heading-description": "Descritzione",
"wikieditor-toolbar-help-heading-syntax": "Ite scries",
@@ -180,8 +163,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elementu de sa lista<br /># Elementu de sa lista",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elementu de sa lista</li><li>Elementu de sa lista</li></ol>",
"wikieditor-toolbar-help-content-file-description": "File incorporadu",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Esempru.png|thumb|Testu de sa didascalia]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Testu de sa didascalia' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Amannia' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Testu de sa didascalia</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Esempru.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referèntzia",
"wikieditor-toolbar-help-content-reference-result": "Testu de sa pàgina.<sup><a href='#'>[1]</a></sup>",
"wikieditor-toolbar-help-content-rereference-result": "Testu de sa pàgina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/scn.json b/extensions/WikiEditor/i18n/scn.json
index e27f62a2..8e2aa0fa 100644
--- a/extensions/WikiEditor/i18n/scn.json
+++ b/extensions/WikiEditor/i18n/scn.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Aushulz",
- "Gmelfi"
+ "Gmelfi",
+ "Macofe"
]
},
"wikieditor": "Ntirfazza avanzata di canci di testu wiki",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Antiprima",
"wikieditor-preview-changes-tab": "Canci",
"wikieditor-preview-loading": "Caricamentu...",
- "wikieditor-previewDialog-preference": "Abbilita la finestra di diàlucu di antiprima",
- "wikieditor-previewDialog-tab": "Antiprima",
- "wikieditor-previewDialog-loading": "Carricamentu 'n cursu...",
"wikieditor-publish-preference": "Abbilita pubblicazzioni passu doppu passu",
"wikieditor-publish-button-publish": "Pubblica",
"wikieditor-publish-button-cancel": "Annulla",
@@ -130,22 +128,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Nun annicasti chidda ca s'havi a circari",
"wikieditor-toolbar-tool-replace-invalidregex": "L'esprissioni rigulari misa nun è vàlidda: $1",
"wikieditor-toolbar-section-characters": "Carattiri spiciali",
- "wikieditor-toolbar-characters-page-latin": "Latinu",
- "wikieditor-toolbar-characters-page-latinextended": "Latinu estinnutu",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Sìmmuli",
- "wikieditor-toolbar-characters-page-greek": "Grecu",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirillicu",
- "wikieditor-toolbar-characters-page-arabic": "Àrabbu",
- "wikieditor-toolbar-characters-page-persian": "Persianu",
- "wikieditor-toolbar-characters-page-hebrew": "Ebbreu",
- "wikieditor-toolbar-characters-page-bangla": "Bengalisi",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalisi",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-thai": "Tailannisi",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Aiutu",
"wikieditor-toolbar-help-heading-description": "Discrizzioni",
"wikieditor-toolbar-help-heading-syntax": "Chiddu ca scriviti",
@@ -191,8 +173,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "* Elementu di l'elencu<br />* Elementu di l'elencu",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elementu di l'elencu</li><li>Elementu di l'elencu</li></ol>",
"wikieditor-toolbar-help-content-file-description": "File ncurpuratu",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Testu dâ didascalia]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Testu dâ didascalia' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Ngrannisci' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Testu dâ didascalia</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Rifirenza",
"wikieditor-toolbar-help-content-reference-syntax": "Testu dâ pàggina.&lt;ref name=\"test\"&gt;[http://www.example.org Testu dû culligamentu], testu ca si pò junciri.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Testu dâ pàggina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sdh.json b/extensions/WikiEditor/i18n/sdh.json
new file mode 100644
index 00000000..22b3832d
--- /dev/null
+++ b/extensions/WikiEditor/i18n/sdh.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kurdbuddha"
+ ]
+ },
+ "wikieditor-toolbar-tool-big": "گەورا",
+ "wikieditor-toolbar-tool-small": "بۊچگ",
+ "wikieditor-toolbar-characters-page-latin": "لاتین",
+ "wikieditor-toolbar-characters-page-greek": "یوونانی",
+ "wikieditor-toolbar-characters-page-cyrillic": "سیریلیک",
+ "wikieditor-toolbar-characters-page-arabic": "عەرەبی",
+ "wikieditor-toolbar-characters-page-persian": "پارسی",
+ "wikieditor-toolbar-characters-page-hebrew": "عبری",
+ "wikieditor-toolbar-characters-page-bangla": "بەنگالی",
+ "wikieditor-toolbar-characters-page-tamil": "تامیل",
+ "wikieditor-toolbar-characters-page-telugu": "تێلوگو",
+ "wikieditor-toolbar-characters-page-sinhala": "سینھالا",
+ "wikieditor-toolbar-characters-page-gujarati": "گوجەراتی",
+ "wikieditor-toolbar-characters-page-devanagari": "دێڤاناگاری",
+ "wikieditor-toolbar-characters-page-thai": "تایلەندی",
+ "wikieditor-toolbar-characters-page-lao": "لائۆ",
+ "wikieditor-toolbar-characters-page-khmer": "کمێر",
+ "wikieditor-toolbar-section-help": "کۆمەک",
+ "wikieditor-toolbar-help-page-list": "پێرستەیل",
+ "wikieditor-toolbar-help-page-file": "پەڕگەیل",
+ "wikieditor-toolbar-help-page-discussion": "وەتوویش"
+}
diff --git a/extensions/WikiEditor/i18n/si.json b/extensions/WikiEditor/i18n/si.json
index 5378e801..38a31138 100644
--- a/extensions/WikiEditor/i18n/si.json
+++ b/extensions/WikiEditor/i18n/si.json
@@ -8,7 +8,8 @@
"චතුනි අලහප්පෙරුම",
"තඹරු විජේසේකර",
"පසිඳු කාවින්ද",
- "බිඟුවා"
+ "බිඟුවා",
+ "Macofe"
]
},
"wikieditor": "දියුණු කළ විකි පෙළ සංස්කරණය කිරීමේ අතුරු මුහුණත",
@@ -19,9 +20,6 @@
"wikieditor-preview-tab": "පෙර දසුන",
"wikieditor-preview-changes-tab": "වෙනස් කිරීම්",
"wikieditor-preview-loading": "ප්‍රවේශනය වෙමින් පවතී...",
- "wikieditor-previewDialog-preference": "පෙර-දැකුම් කවුළුව බලගන්වන්න.",
- "wikieditor-previewDialog-tab": "පෙර දසුන",
- "wikieditor-previewDialog-loading": "ප්‍රවේශනය වෙමින් පවතී...",
"wikieditor-publish-preference": "පියවරෙන්-පියවර ප්‍රකාශනය කළ හැකියි",
"wikieditor-publish-button-publish": "ප්‍රකාශයට පත්කරන්න",
"wikieditor-publish-button-cancel": "අත් හරින්න",
@@ -147,28 +145,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "ඔබ සෙවීම සඳහා කිසිවක් ඇතුල් කර නැත.",
"wikieditor-toolbar-tool-replace-invalidregex": "ඔබ ඇතුළත් කළ නිත්‍ය ප්‍රකාශනය වලංගු නොවේ:$1",
"wikieditor-toolbar-section-characters": "විශේෂ අනු ලකුණු",
- "wikieditor-toolbar-characters-page-latin": "ලතින් අක්ෂර",
- "wikieditor-toolbar-characters-page-latinextended": "දීර්ඝ කළ ලතින් අක්ෂර",
- "wikieditor-toolbar-characters-page-ipa": "IPA(ජාත්‍යන්තර වාග්විෂයක හෝඩිය)",
- "wikieditor-toolbar-characters-page-symbols": "සංකේත",
- "wikieditor-toolbar-characters-page-greek": "ග්‍රීක අක්ෂර",
- "wikieditor-toolbar-characters-page-cyrillic": "සිරිලික් අක්ෂර",
- "wikieditor-toolbar-characters-page-arabic": "අරාබි අක්ෂර",
- "wikieditor-toolbar-characters-page-arabicextended": "අරාබි දීර්ඝ කල",
- "wikieditor-toolbar-characters-page-persian": "පර්සියානු",
- "wikieditor-toolbar-characters-page-hebrew": "හෙබ්‍රෙව් අක්ෂර",
- "wikieditor-toolbar-characters-page-bangla": "බංග්ලා",
- "wikieditor-toolbar-characters-page-tamil": "දෙමළ",
- "wikieditor-toolbar-characters-page-telugu": "තෙලිඟු අක්ෂර",
- "wikieditor-toolbar-characters-page-sinhala": "සිංහල",
- "wikieditor-toolbar-characters-page-gujarati": "ගුජරාටි",
- "wikieditor-toolbar-characters-page-devanagari": "දේවනගරි",
- "wikieditor-toolbar-characters-page-thai": "තායි",
- "wikieditor-toolbar-characters-page-lao": "ලාඕ",
- "wikieditor-toolbar-characters-page-khmer": "ඛෙමර්",
- "wikieditor-toolbar-characters-endash": "en තේජස",
- "wikieditor-toolbar-characters-emdash": "em තේජස",
- "wikieditor-toolbar-characters-minus": "ඍණ ලකුණ",
"wikieditor-toolbar-section-help": "උදව්",
"wikieditor-toolbar-help-heading-description": "විස්තරය",
"wikieditor-toolbar-help-heading-syntax": "ඔබ යතුරු ලියනය කරන දෙය",
@@ -214,8 +190,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# ලැයිස්තු අයිතමය<br /># ලැයිස්තු අයිතමය",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>ලැයිස්තු අයිතමය</li><li>ලැයිස්තු අයිතමය</li></ol>",
"wikieditor-toolbar-help-content-file-description": "කා වැද්දූ ගොනුව",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|යටි ලියමන් පෙළ]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='යටි ලියමන් පෙළ' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='විශාලනය කිරීම' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>යටි ලියමන් පෙළ</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "යොමුව",
"wikieditor-toolbar-help-content-reference-syntax": "පිටු පෙළ.&lt;ref name=\"test\"&gt;[http://www.example.org සබැඳුම් පෙළ], අමතර පෙළ.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "පිටු පෙළ.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sk.json b/extensions/WikiEditor/i18n/sk.json
index 9fbe2681..e4e89e8f 100644
--- a/extensions/WikiEditor/i18n/sk.json
+++ b/extensions/WikiEditor/i18n/sk.json
@@ -4,7 +4,8 @@
"Helix84",
"Jkjk",
"McDutchie",
- "Teslaton"
+ "Teslaton",
+ "Macofe"
]
},
"wikieditor": "Pokročilé rozhranie na úpravu wikitextu",
@@ -15,9 +16,6 @@
"wikieditor-preview-tab": "Náhľad",
"wikieditor-preview-changes-tab": "Zmeny",
"wikieditor-preview-loading": "Načítava sa...",
- "wikieditor-previewDialog-preference": "Zapnúť dialóg s náhľadom",
- "wikieditor-previewDialog-tab": "Náhľad",
- "wikieditor-previewDialog-loading": "Načítava sa...",
"wikieditor-publish-preference": "Zapnúť publikovanie krok za krokom",
"wikieditor-publish-button-publish": "Publikovať",
"wikieditor-publish-button-cancel": "Zrušiť",
@@ -133,23 +131,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Nezadali ste, čo sa má hľadať.",
"wikieditor-toolbar-tool-replace-invalidregex": "Regulárny výraz, ktorý ste zadali je neplatný: $1",
"wikieditor-toolbar-section-characters": "Špeciálne znaky",
- "wikieditor-toolbar-characters-page-latin": "Latinka",
- "wikieditor-toolbar-characters-page-latinextended": "Latina rozšírené",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symboly",
- "wikieditor-toolbar-characters-page-greek": "Grécke",
- "wikieditor-toolbar-characters-page-cyrillic": "Azbuka",
- "wikieditor-toolbar-characters-page-arabic": "Arabské",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabské rozšírené",
- "wikieditor-toolbar-characters-page-persian": "Perzský",
- "wikieditor-toolbar-characters-page-hebrew": "Hebrejské",
- "wikieditor-toolbar-characters-page-bangla": "Bengálčina",
- "wikieditor-toolbar-characters-page-telugu": "Telugčina",
- "wikieditor-toolbar-characters-page-sinhala": "sinhalčina",
- "wikieditor-toolbar-characters-page-gujarati": "gudžarátčina",
- "wikieditor-toolbar-characters-page-thai": "Thajské",
- "wikieditor-toolbar-characters-page-lao": "Laoské",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Pomocník",
"wikieditor-toolbar-help-heading-description": "Popis",
"wikieditor-toolbar-help-heading-syntax": "Čo napíšete",
@@ -195,8 +176,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Položka zoznamu<br /># Položka zoznamu",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Položka zoznamu</li><li>Položka zoznamu</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Vložený súbor",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Príklad.png|thumb|Text nadpisu]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Text nadpisu' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Zväčšiť' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Text nadpisu</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Príklad.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Referencie",
"wikieditor-toolbar-help-content-reference-syntax": "Text stránky.&lt;ref name=\"test\"&gt;[http://www.example.org Text odkazu], ďalší text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Text stránky.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sl.json b/extensions/WikiEditor/i18n/sl.json
index 3547a25b..545586e0 100644
--- a/extensions/WikiEditor/i18n/sl.json
+++ b/extensions/WikiEditor/i18n/sl.json
@@ -14,9 +14,6 @@
"wikieditor-preview-tab": "Predogled",
"wikieditor-preview-changes-tab": "Spremembe",
"wikieditor-preview-loading": "Nalaganje ...",
- "wikieditor-previewDialog-preference": "Omogoči predogledno pogovorno okno",
- "wikieditor-previewDialog-tab": "Predogled",
- "wikieditor-previewDialog-loading": "Nalaganje ...",
"wikieditor-publish-preference": "Omogoči objavljanje korak-po-koraku",
"wikieditor-publish-button-publish": "Objavi",
"wikieditor-publish-button-cancel": "Prekliči",
@@ -210,8 +207,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Vnos a <br /> # Vnos b",
"wikieditor-toolbar-help-content-olist-result": "<ol><li> Vnos a </li><li> Vnos b </li></ol>",
"wikieditor-toolbar-help-content-file-description": "Vgradnja slike",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Primer.png|thumb|Napis pod sliko]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'> <a title=\"Napis pod sliko\" class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a> <div class='thumbcaption'><div class='magnify'> <a title=\"Povečaj\" class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a> </div> Napis pod sliko </div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Primer.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Napis pod sliko",
"wikieditor-toolbar-help-content-reference-description": "Sprotna opomba",
"wikieditor-toolbar-help-content-reference-syntax": "Besedilo strani. &lt;ref name=&quot;test&quot;&gt; [http://www.example.org Oznaka povezave], dodatno besedilo. &lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Besedilo strani. <a href='#'><sup>[1]</sup></a>",
diff --git a/extensions/WikiEditor/i18n/sq.json b/extensions/WikiEditor/i18n/sq.json
index c51cc0b3..7ab07a76 100644
--- a/extensions/WikiEditor/i18n/sq.json
+++ b/extensions/WikiEditor/i18n/sq.json
@@ -2,7 +2,9 @@
"@metadata": {
"authors": [
"Mikullovci11",
- "Olsi"
+ "Olsi",
+ "Nemo bis",
+ "Macofe"
]
},
"wikieditor": "Editori i përparuar",
@@ -13,9 +15,6 @@
"wikieditor-preview-tab": "Parapamje",
"wikieditor-preview-changes-tab": "Ndryshimet",
"wikieditor-preview-loading": "Duke u ngarkuar...",
- "wikieditor-previewDialog-preference": "Aktivizoni parapamjen e një dialogu",
- "wikieditor-previewDialog-tab": "Parapamje",
- "wikieditor-previewDialog-loading": "Duke u ngarkuar...",
"wikieditor-publish-preference": "Aktivizoni publikimin hap-pas-hapi",
"wikieditor-publish-button-publish": "Publikuar",
"wikieditor-publish-button-cancel": "Anulo",
@@ -129,22 +128,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Ju nuk keni futur asgjë për të kërkuar.",
"wikieditor-toolbar-tool-replace-invalidregex": "Shprehja që e keni futur është i pavlefshëm: $1",
"wikieditor-toolbar-section-characters": "Karaktere të veçanta",
- "wikieditor-toolbar-characters-page-latin": "Latinisht",
- "wikieditor-toolbar-characters-page-latinextended": "Latanisht, zgjeruar",
- "wikieditor-toolbar-characters-page-ipa": "Alfabeti Fonetik Ndërkombëtar (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Simbolet",
- "wikieditor-toolbar-characters-page-greek": "Grezisht",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirilik",
- "wikieditor-toolbar-characters-page-arabic": "Arabisht",
- "wikieditor-toolbar-characters-page-persian": "Persisht",
- "wikieditor-toolbar-characters-page-hebrew": "Hebraisht",
- "wikieditor-toolbar-characters-page-bangla": "Bengalisht",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singhalisht",
- "wikieditor-toolbar-characters-page-gujarati": "Guxharati",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Ndihmë",
"wikieditor-toolbar-help-heading-description": "Përshkrimi",
"wikieditor-toolbar-help-heading-syntax": "Çfarë ju shkruajti",
@@ -190,8 +173,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Listo artikullin<br /># Listo artikullin",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Listo artikullin</li><li>Listo artikullin</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Vendos një figurë",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Caption text]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Përshkrimi' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Zmadhoe' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Përshkrimi</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Burimi",
"wikieditor-toolbar-help-content-reference-syntax": "Teksti i Faqës.&lt;ref name=\"test\"&gt;[http://www.shembull.org Teksti i lidhjes], Tekst shtues.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Teksti i Faqës.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sr-ec.json b/extensions/WikiEditor/i18n/sr-ec.json
index 2bf58bf3..87f8c5a7 100644
--- a/extensions/WikiEditor/i18n/sr-ec.json
+++ b/extensions/WikiEditor/i18n/sr-ec.json
@@ -9,7 +9,8 @@
"Rancher",
"Sasa Stefanovic",
"Жељко Тодоровић",
- "Михајло Анђелковић"
+ "Михајло Анђелковић",
+ "Macofe"
]
},
"wikieditor": "Напредно окружење за уређивање вики-текста",
@@ -20,9 +21,6 @@
"wikieditor-preview-tab": "Преглед",
"wikieditor-preview-changes-tab": "Измене",
"wikieditor-preview-loading": "Учитавам…",
- "wikieditor-previewDialog-preference": "Омогући прозорче за преглед",
- "wikieditor-previewDialog-tab": "Преглед",
- "wikieditor-previewDialog-loading": "Учитавам…",
"wikieditor-publish-preference": "Омогући постепено објављивање",
"wikieditor-publish-button-publish": "Објави",
"wikieditor-publish-button-cancel": "Откажи",
@@ -74,7 +72,7 @@
"wikieditor-toolbar-file-target": "Назив датотеке:",
"wikieditor-toolbar-file-caption": "Наслов:",
"wikieditor-toolbar-file-size": "Величина:",
- "wikieditor-toolbar-file-float": "Поравнање:",
+ "wikieditor-toolbar-file-float": "Позиција:",
"wikieditor-toolbar-file-default": "(подразумевано)",
"wikieditor-toolbar-file-format": "Формат:",
"wikieditor-toolbar-tool-file-insert": "Убаци",
@@ -148,24 +146,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Нисте унели ништа за претрагу.",
"wikieditor-toolbar-tool-replace-invalidregex": "Израз који сте унели није исправан: $1",
"wikieditor-toolbar-section-characters": "Посебни знакови",
- "wikieditor-toolbar-characters-page-latin": "латиница",
- "wikieditor-toolbar-characters-page-latinextended": "проширена латиница",
- "wikieditor-toolbar-characters-page-ipa": "ИПА",
- "wikieditor-toolbar-characters-page-symbols": "симболи",
- "wikieditor-toolbar-characters-page-greek": "грчки",
- "wikieditor-toolbar-characters-page-cyrillic": "ћирилица",
- "wikieditor-toolbar-characters-page-arabic": "арапски",
- "wikieditor-toolbar-characters-page-arabicextended": "проширени арапски",
- "wikieditor-toolbar-characters-page-persian": "персијски",
- "wikieditor-toolbar-characters-page-hebrew": "хебрејски",
- "wikieditor-toolbar-characters-page-bangla": "бенгалски",
- "wikieditor-toolbar-characters-page-tamil": "тамилски",
- "wikieditor-toolbar-characters-page-telugu": "телугу",
- "wikieditor-toolbar-characters-page-sinhala": "синхалски",
- "wikieditor-toolbar-characters-page-gujarati": "гуџарати",
- "wikieditor-toolbar-characters-page-thai": "тајландски",
- "wikieditor-toolbar-characters-page-lao": "лаоски",
- "wikieditor-toolbar-characters-page-khmer": "кмерски",
"wikieditor-toolbar-section-help": "Помоћ",
"wikieditor-toolbar-help-heading-description": "Опис",
"wikieditor-toolbar-help-heading-syntax": "Шта куцате",
@@ -210,8 +190,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Ставка<br /># Ставка",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Ставка</li><li>Ставка</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Уграђена датотека",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Пример.png|thumb|Описни текст]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Опис' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Повећај' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Опис</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Пример.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Навод",
"wikieditor-toolbar-help-content-reference-syntax": "Текст странице.&lt;ref name=\"test\"&gt;[http://www.primer.org Текст везе], додатни текст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Текст странице.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sr-el.json b/extensions/WikiEditor/i18n/sr-el.json
index bb042fb0..6e5740e4 100644
--- a/extensions/WikiEditor/i18n/sr-el.json
+++ b/extensions/WikiEditor/i18n/sr-el.json
@@ -5,7 +5,8 @@
"McDutchie",
"Rancher",
"Жељко Тодоровић",
- "Milicevic01"
+ "Milicevic01",
+ "Macofe"
]
},
"wikieditor": "Napredno sučelje uređivanja vikiteksta",
@@ -16,9 +17,6 @@
"wikieditor-preview-tab": "Pretpregled",
"wikieditor-preview-changes-tab": "Izmene",
"wikieditor-preview-loading": "Učitavanje...",
- "wikieditor-previewDialog-preference": "Omogući prozorče za pregled",
- "wikieditor-previewDialog-tab": "Pregled",
- "wikieditor-previewDialog-loading": "Učitavanje...",
"wikieditor-publish-preference": "Omogući postepeno objavljivanje",
"wikieditor-publish-button-publish": "Objavi",
"wikieditor-publish-button-cancel": "Otkaži",
@@ -70,7 +68,7 @@
"wikieditor-toolbar-file-target": "Naziv datoteke:",
"wikieditor-toolbar-file-caption": "Naslov:",
"wikieditor-toolbar-file-size": "Veličina:",
- "wikieditor-toolbar-file-float": "Poravnanje:",
+ "wikieditor-toolbar-file-float": "Pozicija:",
"wikieditor-toolbar-file-default": "(podrazumevano)",
"wikieditor-toolbar-file-format": "Format:",
"wikieditor-toolbar-tool-file-insert": "Ubaci",
@@ -144,24 +142,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Niste uneli ništa za pretragu.",
"wikieditor-toolbar-tool-replace-invalidregex": "Izraz koji ste uneli nije ispravan: $1",
"wikieditor-toolbar-section-characters": "Posebni znakovi",
- "wikieditor-toolbar-characters-page-latin": "latinica",
- "wikieditor-toolbar-characters-page-latinextended": "proširena latinica",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Simboli",
- "wikieditor-toolbar-characters-page-greek": "grčki",
- "wikieditor-toolbar-characters-page-cyrillic": "ćirilica",
- "wikieditor-toolbar-characters-page-arabic": "arapski",
- "wikieditor-toolbar-characters-page-arabicextended": "prošireni arapski",
- "wikieditor-toolbar-characters-page-persian": "persijski",
- "wikieditor-toolbar-characters-page-hebrew": "jevrejsko",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "tamilski",
- "wikieditor-toolbar-characters-page-telugu": "telugu",
- "wikieditor-toolbar-characters-page-sinhala": "sinhalski",
- "wikieditor-toolbar-characters-page-gujarati": "Gudžarati",
- "wikieditor-toolbar-characters-page-thai": "tajlandski",
- "wikieditor-toolbar-characters-page-lao": "laoski",
- "wikieditor-toolbar-characters-page-khmer": "kmerski",
"wikieditor-toolbar-section-help": "Pomoć",
"wikieditor-toolbar-help-heading-description": "Opis",
"wikieditor-toolbar-help-heading-syntax": "Šta kucate",
@@ -206,8 +186,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Stavka<br /># Stavka",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Stavka</li><li>Stavka</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ugrađena datoteka",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Primjer.png|thumb|Naziv slike]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Opis' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Povećaj' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Opis</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Primjer.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Reference",
"wikieditor-toolbar-help-content-reference-syntax": "Tekst stranice.&lt;ref name=\"test\"&gt;[http://www.primer.org Tekst veze], dodatni tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Tekst stranice.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/su.json b/extensions/WikiEditor/i18n/su.json
index 4a2425fe..a659deb8 100644
--- a/extensions/WikiEditor/i18n/su.json
+++ b/extensions/WikiEditor/i18n/su.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Kandar"
+ "Kandar",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "Wikitext",
@@ -111,21 +112,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Anjeun teu ngasupkeun naon anu kudu disungsi.",
"wikieditor-toolbar-tool-replace-invalidregex": "Éksprési régulér anu diasupkeun teu bener: $1",
"wikieditor-toolbar-section-characters": "Karakter husus",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Lambang",
- "wikieditor-toolbar-characters-page-greek": "Yunani",
- "wikieditor-toolbar-characters-page-cyrillic": "Sirilik",
- "wikieditor-toolbar-characters-page-arabic": "Arab",
- "wikieditor-toolbar-characters-page-persian": "Parsi",
- "wikieditor-toolbar-characters-page-hebrew": "Ibrani",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Pitulung",
"wikieditor-toolbar-help-heading-description": "Pedaran",
"wikieditor-toolbar-help-heading-syntax": "NU diketikkeun",
@@ -165,8 +151,7 @@
"wikieditor-toolbar-help-content-heading5-result": "<h5>Téks subjudul</h5>",
"wikieditor-toolbar-help-content-ulist-description": "Béréndélan pélor",
"wikieditor-toolbar-help-content-olist-description": "Béréndélan nomer",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Conto.png|thumb|Téks gambar]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Téks pedaran' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Gedéan' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Téks pedaran</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Conto.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Rujukan",
"wikieditor-toolbar-help-content-reference-syntax": "Téks kaca.&lt;ref name=\"test\"&gt;[http://www.conto.org Téks tutumbu], téks panambih.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Téks kaca.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sv.json b/extensions/WikiEditor/i18n/sv.json
index 24441bbf..a7a5ffd9 100644
--- a/extensions/WikiEditor/i18n/sv.json
+++ b/extensions/WikiEditor/i18n/sv.json
@@ -12,7 +12,8 @@
"McDutchie",
"Sertion",
"Warrakkk",
- "WikiPhoenix"
+ "WikiPhoenix",
+ "Macofe"
]
},
"wikieditor": "Avancerat gränssnitt för redigering av wikitext",
@@ -23,9 +24,6 @@
"wikieditor-preview-tab": "Förhandsgranska",
"wikieditor-preview-changes-tab": "Ändringar",
"wikieditor-preview-loading": "Laddar...",
- "wikieditor-previewDialog-preference": "Aktivera förhandsgranska",
- "wikieditor-previewDialog-tab": "Förhandsgranska",
- "wikieditor-previewDialog-loading": "Laddar...",
"wikieditor-publish-preference": "Aktivera steg-för-steg-publicering",
"wikieditor-publish-button-publish": "Publicera",
"wikieditor-publish-button-cancel": "Avbryt",
@@ -152,28 +150,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Du matade inte in något att söka efter.",
"wikieditor-toolbar-tool-replace-invalidregex": "Det reguljära uttryck du angav är ogiltigt: $1",
"wikieditor-toolbar-section-characters": "Specialtecken",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Utökad latin",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Symboler",
- "wikieditor-toolbar-characters-page-greek": "Grekiska",
- "wikieditor-toolbar-characters-page-cyrillic": "Kyrilliskt",
- "wikieditor-toolbar-characters-page-arabic": "Arabiska",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabiska utökade",
- "wikieditor-toolbar-characters-page-persian": "Persiska",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreiska",
- "wikieditor-toolbar-characters-page-bangla": "Bengali",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalesiska",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devenagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Laotisk",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "tankstreck",
- "wikieditor-toolbar-characters-emdash": "långt tankstreck",
- "wikieditor-toolbar-characters-minus": "minustecken",
"wikieditor-toolbar-section-help": "Hjälp",
"wikieditor-toolbar-help-heading-description": "Beskrivning",
"wikieditor-toolbar-help-heading-syntax": "Vad du skriver",
@@ -219,8 +195,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Listelement<br /># Listelement",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Listelement</li><li>Listelement</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Inbäddad fil",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exempel.png|thumb|Bildtext]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Bildtext' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Förstora' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Bildtext</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Exempel.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "Bildtext",
"wikieditor-toolbar-help-content-reference-description": "Referens",
"wikieditor-toolbar-help-content-reference-syntax": "Brödtext.&lt;ref name=\"test\"&gt;[http://www.example.org Länktext], ytterligare text.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Brödtext.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/sw.json b/extensions/WikiEditor/i18n/sw.json
index 18c12fb0..d6c4df9e 100644
--- a/extensions/WikiEditor/i18n/sw.json
+++ b/extensions/WikiEditor/i18n/sw.json
@@ -3,7 +3,8 @@
"authors": [
"Kwisha",
"Lloffiwr",
- "Muddyb Blast Producer"
+ "Muddyb Blast Producer",
+ "Macofe"
]
},
"wikieditor": "Kusano ya juu ya kuandika kiwiki",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Hakiki",
"wikieditor-preview-changes-tab": "Mabadiliko",
"wikieditor-preview-loading": "Inapakiwa...",
- "wikieditor-previewDialog-preference": "Wezesha kisanduku cha kudhibiti hakikisho",
- "wikieditor-previewDialog-tab": "Hakiki",
- "wikieditor-previewDialog-loading": "Inapakiwa...",
"wikieditor-publish-preference": "Kuwezesha kutoa mabadiliko hatua kwa hatua",
"wikieditor-publish-button-publish": "Toa",
"wikieditor-publish-button-cancel": "Batilisha",
@@ -135,23 +133,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Hukuweka maandishi ya kutafutwa.",
"wikieditor-toolbar-tool-replace-invalidregex": "Uonyesho wa kawaida ulichoingiza ni batili: $1",
"wikieditor-toolbar-section-characters": "Herufi maalum",
- "wikieditor-toolbar-characters-page-latin": "Kilatini",
- "wikieditor-toolbar-characters-page-latinextended": "Kilatini kilichoongezwa",
- "wikieditor-toolbar-characters-page-ipa": "Herufi za Fonetiki za Kimataifa (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Alama",
- "wikieditor-toolbar-characters-page-greek": "Kigiriki",
- "wikieditor-toolbar-characters-page-cyrillic": "Kikyrili",
- "wikieditor-toolbar-characters-page-arabic": "Kiarabu",
- "wikieditor-toolbar-characters-page-arabicextended": "Kiarabu kilichoongezwa",
- "wikieditor-toolbar-characters-page-persian": "Kiajemi",
- "wikieditor-toolbar-characters-page-hebrew": "Kiyahudi",
- "wikieditor-toolbar-characters-page-bangla": "Kibangla",
- "wikieditor-toolbar-characters-page-telugu": "Kitelugu",
- "wikieditor-toolbar-characters-page-sinhala": "Kisinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Kigujarati",
- "wikieditor-toolbar-characters-page-thai": "Kitai",
- "wikieditor-toolbar-characters-page-lao": "Kilao",
- "wikieditor-toolbar-characters-page-khmer": "Kikhmeri",
"wikieditor-toolbar-section-help": "Msaada",
"wikieditor-toolbar-help-heading-description": "Elezo",
"wikieditor-toolbar-help-heading-syntax": "Ukiandika haya",
@@ -197,8 +178,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Aya<br /># Aya",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Aya</li><li>Aya</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Ingiza faili",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Maelezo mafupi]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Maelezo mafupi' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Kuza' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Maelezo mafupi</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Marejeo",
"wikieditor-toolbar-help-content-reference-syntax": "Maandishi ya ukurasa.&lt;ref name=\"mfano\"&gt;[http://www.example.org Maandishi ya kiungo], maandishi mengine.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Maandiko.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ta.json b/extensions/WikiEditor/i18n/ta.json
index b321d83e..e5b820b7 100644
--- a/extensions/WikiEditor/i18n/ta.json
+++ b/extensions/WikiEditor/i18n/ta.json
@@ -8,7 +8,8 @@
"Surya Prakash.S.A.",
"TRYPPN",
"செல்வா",
- "மதனாஹரன்"
+ "மதனாஹரன்",
+ "Macofe"
]
},
"wikieditor": "மேம்பட்ட விக்கியுரைத் தொகுப்பு இடைமுகம்",
@@ -19,9 +20,6 @@
"wikieditor-preview-tab": "முன்தோற்றம்",
"wikieditor-preview-changes-tab": "மாற்றங்கள்",
"wikieditor-preview-loading": "ஏற்றப்படுகிறது...",
- "wikieditor-previewDialog-preference": "முன்னோட்ட உரையாடலைச் செயல்படுத்துக",
- "wikieditor-previewDialog-tab": "முன்தோற்றம்",
- "wikieditor-previewDialog-loading": "ஏற்றப்படுகிறது...",
"wikieditor-publish-preference": "படிப்படியாக வெளியிடலைச் செயல்படுத்துக",
"wikieditor-publish-button-publish": "வெளியிடு",
"wikieditor-publish-button-cancel": "விட்டுவிடு",
@@ -146,25 +144,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "எதனைத்தேடுவது என்று தாங்கள் குறிப்பிடவில்லை.",
"wikieditor-toolbar-tool-replace-invalidregex": "நீங்கள் உள்ளிட்ட வழக்கமான தொடர் செல்லாது: $1",
"wikieditor-toolbar-section-characters": "சிறப்பு எழுத்துருக்கள்",
- "wikieditor-toolbar-characters-page-latin": "இலத்தீன்",
- "wikieditor-toolbar-characters-page-latinextended": "இலத்தீன் விரிவு",
- "wikieditor-toolbar-characters-page-ipa": "பன்னாட்டு ஒலிப்பு அரிச்சுவடி",
- "wikieditor-toolbar-characters-page-symbols": "குறியீடுகள்",
- "wikieditor-toolbar-characters-page-greek": "கிரேக்கம்",
- "wikieditor-toolbar-characters-page-cyrillic": "சைரிலிக் (Cyrillic)",
- "wikieditor-toolbar-characters-page-arabic": "அரபு",
- "wikieditor-toolbar-characters-page-arabicextended": "அரபு விரிவு",
- "wikieditor-toolbar-characters-page-persian": "பாரசீகம்",
- "wikieditor-toolbar-characters-page-hebrew": "எபிரேயம் (ஈபுரு)",
- "wikieditor-toolbar-characters-page-bangla": "வங்காளம்",
- "wikieditor-toolbar-characters-page-tamil": "தமிழ்",
- "wikieditor-toolbar-characters-page-telugu": "தெலுங்கு",
- "wikieditor-toolbar-characters-page-sinhala": "சிங்களம்",
- "wikieditor-toolbar-characters-page-gujarati": "குசராத்தி",
- "wikieditor-toolbar-characters-page-devanagari": "தேவநாகரி",
- "wikieditor-toolbar-characters-page-thai": "தாய்",
- "wikieditor-toolbar-characters-page-lao": "இலாவோ",
- "wikieditor-toolbar-characters-page-khmer": "கெமெர்",
"wikieditor-toolbar-section-help": "உதவி",
"wikieditor-toolbar-help-heading-description": "விளக்கம்",
"wikieditor-toolbar-help-heading-syntax": "தாங்கள் தட்டச்சு செய்தது",
@@ -210,8 +189,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# வரிசையில் உள்ள உறுப்பினர் <br /># வரிசையில் உள்ள உறுப்பினர்",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>பட்டியல் உருப்படி</li><li>பட்டியல் உருப்படி</li></ol>",
"wikieditor-toolbar-help-content-file-description": "பொதிந்துள்ள படிமம்",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:எடுத்துக்காட்டு.png|விரலளவுப்படம்|படவிளக்கவுரை]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='தலைப்புப் பெயர்' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='பெரிதாக்கு' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>தலைப்புப் பெயர்</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:எடுத்துக்காட்டு.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "# மேற்கோள்\n# முன்மாதிரி",
"wikieditor-toolbar-help-content-reference-syntax": "பக்க உரை.&lt;ref name=\"சோதனை\"&gt;[http://www.example.org இணைப்பு உரை], கூடுதல் உரை.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "பக்க உரை.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/te.json b/extensions/WikiEditor/i18n/te.json
index e05e24a8..c806a893 100644
--- a/extensions/WikiEditor/i18n/te.json
+++ b/extensions/WikiEditor/i18n/te.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Veeven"
+ "Veeven",
+ "Macofe"
]
},
"wikieditor": "ఉన్నత వికీపాఠ్య దిద్దుబాటు ముఖాంతరం",
@@ -11,9 +12,6 @@
"wikieditor-preview-tab": "మునుజూపు",
"wikieditor-preview-changes-tab": "మార్పులు",
"wikieditor-preview-loading": "లోడవుతోంది...",
- "wikieditor-previewDialog-preference": "మునుజూపు పేటికని చేతనం చేయి",
- "wikieditor-previewDialog-tab": "మునుజూపు",
- "wikieditor-previewDialog-loading": "లోడవుతోంది...",
"wikieditor-publish-button-publish": "ప్రచురించు",
"wikieditor-publish-button-cancel": "రద్దుచేయి",
"wikieditor-publish-dialog-title": "{{SITENAME}}లో ప్రచురించు",
@@ -113,24 +111,6 @@
"wikieditor-toolbar-tool-replace-success": "$1 మార్పిడి(లు) చేసాం.",
"wikieditor-toolbar-tool-replace-emptysearch": "వెతకడానికి ఏమీ ఇవ్వలేదు.",
"wikieditor-toolbar-section-characters": "ప్రత్యేక అక్షరాలు",
- "wikieditor-toolbar-characters-page-latin": "లాటిన్",
- "wikieditor-toolbar-characters-page-latinextended": "విస్తరిత లాటిన్",
- "wikieditor-toolbar-characters-page-ipa": "ఐపిఎ",
- "wikieditor-toolbar-characters-page-symbols": "గుర్తులు",
- "wikieditor-toolbar-characters-page-greek": "గ్రీకు",
- "wikieditor-toolbar-characters-page-cyrillic": "సిరిలిక్",
- "wikieditor-toolbar-characters-page-arabic": "అరబిక్",
- "wikieditor-toolbar-characters-page-persian": "పర్షియన్",
- "wikieditor-toolbar-characters-page-hebrew": "హిబ్రూ",
- "wikieditor-toolbar-characters-page-bangla": "బంగ్లా",
- "wikieditor-toolbar-characters-page-tamil": "తమిళం",
- "wikieditor-toolbar-characters-page-telugu": "తెలుగు",
- "wikieditor-toolbar-characters-page-sinhala": "సింహళ",
- "wikieditor-toolbar-characters-page-gujarati": "గుజరాతీ",
- "wikieditor-toolbar-characters-page-devanagari": "దేవనాగరి",
- "wikieditor-toolbar-characters-page-thai": "థాయి",
- "wikieditor-toolbar-characters-page-lao": "లావో",
- "wikieditor-toolbar-characters-page-khmer": "ఖ్మెర్",
"wikieditor-toolbar-section-help": "సహాయం",
"wikieditor-toolbar-help-heading-description": "వివరణ",
"wikieditor-toolbar-help-heading-syntax": "మీరు టైపు చేసేది",
@@ -174,8 +154,7 @@
"wikieditor-toolbar-help-content-olist-description": "సంఖ్యానుగుణ జాబితా",
"wikieditor-toolbar-help-content-olist-syntax": "# జాబితా అంశం<br /># జాబితా అంశం",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>జాబితా అంశం</li><li>జాబితా అంశం</li></ol>",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|వివరణ పాఠ్యం]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>వివరణ పాఠ్యం</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "సాక్ష్యాలు",
"wikieditor-toolbar-help-content-reference-syntax": "పేజీ పాఠ్యం.&lt;ref name=\"test\"&gt;[http://www.example.org లింకు పాఠ్యం], అదనపు పాఠ్యం.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "పేజీ పాఠ్యం.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/th.json b/extensions/WikiEditor/i18n/th.json
index 55f756a3..84e90317 100644
--- a/extensions/WikiEditor/i18n/th.json
+++ b/extensions/WikiEditor/i18n/th.json
@@ -4,7 +4,8 @@
"Horus",
"Korrawit",
"Octahedron80",
- "Woraponboonkerd"
+ "Woraponboonkerd",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "ข้อความวิกิ",
@@ -13,8 +14,6 @@
"wikieditor-preview-tab": "แสดงตัวอย่าง",
"wikieditor-preview-changes-tab": "ความเปลี่ยนแปลง",
"wikieditor-preview-loading": "กำลังโหลด...",
- "wikieditor-previewDialog-tab": "แสดงตัวอย่าง",
- "wikieditor-previewDialog-loading": "กำลังโหลด...",
"wikieditor-publish-preference": "เปิดใช้งานการเผยแพร่ทีละขั้นตอน",
"wikieditor-publish-button-publish": "เผยแพร่",
"wikieditor-publish-button-cancel": "ยกเลิก",
@@ -128,18 +127,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "คุณไม่ได้ใส่คำที่จะค้นหา",
"wikieditor-toolbar-tool-replace-invalidregex": "นิพจน์ปรกติที่คุณป้อนไม่ถูกต้อง: $1",
"wikieditor-toolbar-section-characters": "ตัวอักษรพิเศษ",
- "wikieditor-toolbar-characters-page-latin": "ละติน",
- "wikieditor-toolbar-characters-page-latinextended": "ละตินส่วนขยาย",
- "wikieditor-toolbar-characters-page-ipa": "สัทอักษรสากล",
- "wikieditor-toolbar-characters-page-symbols": "สัญลักษณ์",
- "wikieditor-toolbar-characters-page-greek": "กรีก",
- "wikieditor-toolbar-characters-page-cyrillic": "ซีริลลิก",
- "wikieditor-toolbar-characters-page-arabic": "อาหรับ",
- "wikieditor-toolbar-characters-page-hebrew": "ฮีบรู",
- "wikieditor-toolbar-characters-page-bangla": "บังคลา",
- "wikieditor-toolbar-characters-page-telugu": "เตลูกู",
- "wikieditor-toolbar-characters-page-sinhala": "สิงหล",
- "wikieditor-toolbar-characters-page-gujarati": "คุชราต",
"wikieditor-toolbar-section-help": "วิธีใช้",
"wikieditor-toolbar-help-heading-description": "คำอธิบาย",
"wikieditor-toolbar-help-heading-syntax": "สิ่งที่คุณพิมพ์",
@@ -185,8 +172,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# เนื้อหารายการ<br /># เนื้อหารายการ",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>เนื้อหารายการ</li><li>เนื้อหารายการ</li></ol>",
"wikieditor-toolbar-help-content-file-description": "แทรกไฟล์",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|คำอธิบายภาพ]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='คำอธิบาย' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='ขยายใหญ่' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>คำอธิบาย</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "อ้างอิง",
"wikieditor-toolbar-help-content-reference-syntax": "ชื่อหน้า.&lt;ref name=\"test\"&gt;[http://www.example.org ชื่อลิงก์], คำอธิบายเพิ่มเติม.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "ข้อความในหน้า<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/tk.json b/extensions/WikiEditor/i18n/tk.json
index f4160835..1baf2726 100644
--- a/extensions/WikiEditor/i18n/tk.json
+++ b/extensions/WikiEditor/i18n/tk.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Hanberke"
+ "Hanberke",
+ "Macofe"
]
},
"wikieditor": "Giňeldilen wikitekst redaktirleme interfeýsi",
@@ -12,9 +13,6 @@
"wikieditor-preview-tab": "Deslapky syn",
"wikieditor-preview-changes-tab": "Üýtgeşmeler",
"wikieditor-preview-loading": "Ýüklenilýär...",
- "wikieditor-previewDialog-preference": "Deslapky syn dialogyny aç",
- "wikieditor-previewDialog-tab": "Deslapky syn",
- "wikieditor-previewDialog-loading": "Ýüklenilýär...",
"wikieditor-publish-preference": "Ädimme-ädim neşir etmekligi aç",
"wikieditor-publish-button-publish": "Neşir et",
"wikieditor-publish-button-cancel": "Goýbolsun et",
@@ -128,22 +126,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Gözlär ýaly hiçbir zat ýazmadyňyz.",
"wikieditor-toolbar-tool-replace-invalidregex": "Ýazan adaty aňlatmaňyz nädogry: $1",
"wikieditor-toolbar-section-characters": "Ýörite simwollar",
- "wikieditor-toolbar-characters-page-latin": "Latyn",
- "wikieditor-toolbar-characters-page-latinextended": "Giňeldilen latyn",
- "wikieditor-toolbar-characters-page-ipa": "HFE (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Simwollar",
- "wikieditor-toolbar-characters-page-greek": "Grek",
- "wikieditor-toolbar-characters-page-cyrillic": "Kirillisa",
- "wikieditor-toolbar-characters-page-arabic": "Arap",
- "wikieditor-toolbar-characters-page-persian": "Parsça",
- "wikieditor-toolbar-characters-page-hebrew": "Iwrit",
- "wikieditor-toolbar-characters-page-bangla": "Bengalça",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singal",
- "wikieditor-toolbar-characters-page-gujarati": "Güjerat",
- "wikieditor-toolbar-characters-page-thai": "Taýlandça",
- "wikieditor-toolbar-characters-page-lao": "Laosça",
- "wikieditor-toolbar-characters-page-khmer": "Khmerçe",
"wikieditor-toolbar-section-help": "Ýardam",
"wikieditor-toolbar-help-heading-description": "Düşündiriş",
"wikieditor-toolbar-help-heading-syntax": "Ýazylyşy",
@@ -189,8 +171,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Sanaw elementi<br /># Sanaw elementi",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Sanaw elementi</li><li>Sanaw elementi</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Salnan faýl",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Titriň teksti]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Titriň teksti' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Ulalt' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Titriň teksti</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Salgylanma",
"wikieditor-toolbar-help-content-reference-syntax": "Sahypanyň teksti.&lt;ref name=\"test\"&gt;[http://www.example.org Çykgydyň teksti], goşmaça tekst.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Sahypa teksti.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/tl.json b/extensions/WikiEditor/i18n/tl.json
index bb7340eb..4e3678e9 100644
--- a/extensions/WikiEditor/i18n/tl.json
+++ b/extensions/WikiEditor/i18n/tl.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"AnakngAraw",
- "McDutchie"
+ "McDutchie",
+ "Macofe"
]
},
"wikieditor": "Mas masulong na dugtungang-mukha na pambago ng wikiteksto",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Paunang tanaw",
"wikieditor-preview-changes-tab": "Mga pagbabago",
"wikieditor-preview-loading": "Ikinakarga...",
- "wikieditor-previewDialog-preference": "Paganahin ang diyalogo ng paunang pagpapatanaw",
- "wikieditor-previewDialog-tab": "Paunang tanaw",
- "wikieditor-previewDialog-loading": "Ikinakarga...",
"wikieditor-publish-preference": "Paganahin ang hakbang-hakbang na paglalathala",
"wikieditor-publish-button-publish": "Ilathala",
"wikieditor-publish-button-cancel": "Huwag ituloy",
@@ -141,25 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Hindi ka naglagay ng anumang hahanapin.",
"wikieditor-toolbar-tool-replace-invalidregex": "Hindi tanggap ang inilagay mong pangkaraniwang pananalita: $1",
"wikieditor-toolbar-section-characters": "Natatanging mga panitik",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Pinalawig na Latin",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Mga sagisag",
- "wikieditor-toolbar-characters-page-greek": "Griyego",
- "wikieditor-toolbar-characters-page-cyrillic": "Siriliko",
- "wikieditor-toolbar-characters-page-arabic": "Arabe",
- "wikieditor-toolbar-characters-page-arabicextended": "Pinalawig na Arabe",
- "wikieditor-toolbar-characters-page-persian": "Persyano",
- "wikieditor-toolbar-characters-page-hebrew": "Hebreo",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Guharati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Tulong",
"wikieditor-toolbar-help-heading-description": "Paglalarawan",
"wikieditor-toolbar-help-heading-syntax": "Kung ano ang iminakinilya mo",
@@ -205,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Bagay sa talaan<br /># Bagay sa talaan",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Bagay sa talaan</li><li>Bagay sa talaan</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Talaksang nakabaon",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Halimbawa.png|thumb|Teksto ng kapsyon]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Tekstong nagpapaliwanag</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Halimbawa.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Sanggunian",
"wikieditor-toolbar-help-content-reference-syntax": "Taksto ng pahina.&lt;ref name=\"test\"&gt;[http://www.halimbawa.org Teksto ng kawing], karagdagang teksto.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Teksto ng pahina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/tr.json b/extensions/WikiEditor/i18n/tr.json
index a1209def..57c9cf6f 100644
--- a/extensions/WikiEditor/i18n/tr.json
+++ b/extensions/WikiEditor/i18n/tr.json
@@ -10,7 +10,8 @@
"Rapsar",
"Sadrettin",
"Srhat",
- "Vito Genovese"
+ "Vito Genovese",
+ "Macofe"
]
},
"wikieditor": "Gelişmiş viki metni düzenleme arayüzü",
@@ -21,9 +22,6 @@
"wikieditor-preview-tab": "Ön izleme",
"wikieditor-preview-changes-tab": "Değişiklikler",
"wikieditor-preview-loading": "Yükleniyor...",
- "wikieditor-previewDialog-preference": "Ön izleme iletisini etkinleştir",
- "wikieditor-previewDialog-tab": "Ön izleme",
- "wikieditor-previewDialog-loading": "Yükleniyor...",
"wikieditor-publish-preference": "Adım adım yayınlamayı etkinleştir",
"wikieditor-publish-button-publish": "Yayınla",
"wikieditor-publish-button-cancel": "İptal",
@@ -142,24 +140,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Aramak için herhangi birşey girmediniz.",
"wikieditor-toolbar-tool-replace-invalidregex": "Girdiğiniz düzenli ifade geçersiz: $1",
"wikieditor-toolbar-section-characters": "Özel karakterler",
- "wikieditor-toolbar-characters-page-latin": "Latin",
- "wikieditor-toolbar-characters-page-latinextended": "Genişletilmiş Latince",
- "wikieditor-toolbar-characters-page-ipa": "UFA",
- "wikieditor-toolbar-characters-page-symbols": "Simgeler",
- "wikieditor-toolbar-characters-page-greek": "Yunan",
- "wikieditor-toolbar-characters-page-cyrillic": "Kiril",
- "wikieditor-toolbar-characters-page-arabic": "Arap",
- "wikieditor-toolbar-characters-page-arabicextended": "Genişletilmiş Arapça",
- "wikieditor-toolbar-characters-page-persian": "Fars",
- "wikieditor-toolbar-characters-page-hebrew": "İbrani",
- "wikieditor-toolbar-characters-page-bangla": "Bengalce",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gücerat",
- "wikieditor-toolbar-characters-page-thai": "Tay",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Kmer",
"wikieditor-toolbar-section-help": "Yardım",
"wikieditor-toolbar-help-heading-description": "Açıklama",
"wikieditor-toolbar-help-heading-syntax": "Yazdığınız",
@@ -205,8 +185,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Liste ögesi<br /># Liste ögesi",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Liste ögesi</li><li>Liste ögesi</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Gömülü dosya",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Örnek.png|thumb|Başlık metni]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Altyazı metni' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Büyüt' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Altyazı metni</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Örnek.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Kaynak",
"wikieditor-toolbar-help-content-reference-syntax": "Sayfa metni.&lt;ref name=\"deneme\"&gt;[http://www.ornek.org Bağlanı metni], ek metin.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Sayfa metni.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/tt-cyrl.json b/extensions/WikiEditor/i18n/tt-cyrl.json
index 72ccb5aa..a4ef8c36 100644
--- a/extensions/WikiEditor/i18n/tt-cyrl.json
+++ b/extensions/WikiEditor/i18n/tt-cyrl.json
@@ -4,7 +4,8 @@
"Bulatbulat",
"Zahidulla",
"Ильнар",
- "Рашат Якупов"
+ "Рашат Якупов",
+ "Macofe"
]
},
"wikieditor": "Викитекстны үзгәртү буенча киңәйтелгән интерфейс",
@@ -15,9 +16,6 @@
"wikieditor-preview-tab": "Алдан карау",
"wikieditor-preview-changes-tab": "Үзгәртүләр",
"wikieditor-preview-loading": "Йөкләү...",
- "wikieditor-previewDialog-preference": "Алдан карау диалогын ачу",
- "wikieditor-previewDialog-tab": "Алдан карау",
- "wikieditor-previewDialog-loading": "Йөкләү...",
"wikieditor-publish-preference": "Баскычлы куюны ачу",
"wikieditor-publish-button-publish": "Чыгарырга",
"wikieditor-publish-button-cancel": "Кире кагу",
@@ -131,22 +129,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Сез нәрсә эзләргә икәнлеген күрсәтмәдегез.",
"wikieditor-toolbar-tool-replace-invalidregex": "Сезнең тарафтан кертелгән $1 аңлатмасы дөрес түгел.",
"wikieditor-toolbar-section-characters": "Махсус тамгалар",
- "wikieditor-toolbar-characters-page-latin": "Латин",
- "wikieditor-toolbar-characters-page-latinextended": "Латин (киңәйтелгән)",
- "wikieditor-toolbar-characters-page-ipa": "ХФӘ (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Тамгалар",
- "wikieditor-toolbar-characters-page-greek": "Грек",
- "wikieditor-toolbar-characters-page-cyrillic": "Кирилл",
- "wikieditor-toolbar-characters-page-arabic": "Гарәп",
- "wikieditor-toolbar-characters-page-persian": "Фарсы",
- "wikieditor-toolbar-characters-page-hebrew": "Яхүд",
- "wikieditor-toolbar-characters-page-bangla": "Бенгаль",
- "wikieditor-toolbar-characters-page-telugu": "Телугу",
- "wikieditor-toolbar-characters-page-sinhala": "Сингаль",
- "wikieditor-toolbar-characters-page-gujarati": "Гуҗарати",
- "wikieditor-toolbar-characters-page-thai": "Таиланд",
- "wikieditor-toolbar-characters-page-lao": "Лаос",
- "wikieditor-toolbar-characters-page-khmer": "Кһмер",
"wikieditor-toolbar-section-help": "Ярдәм",
"wikieditor-toolbar-help-heading-description": "Тасвир",
"wikieditor-toolbar-help-heading-syntax": "Кертелгән",
@@ -192,8 +174,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Исемлекнең тәртибе<br /># Исемлекнең тәртибе",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Исемлекнең тәртибе</li><li>Исемлекнең тәртибе</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Куелган файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Аңлатмалы текст]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='\nАңлатмалы текст' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Зурайтырга' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>\nАңлатмалы текст</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Искәрмә",
"wikieditor-toolbar-help-content-reference-syntax": "Битнең тексты.&lt;ref name=\"test\"&gt;[http://www.example.org Сылтаманың тексты], өстәмә текст.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Битнең тексты.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/uk.json b/extensions/WikiEditor/i18n/uk.json
index e05b75f5..9853cc6e 100644
--- a/extensions/WikiEditor/i18n/uk.json
+++ b/extensions/WikiEditor/i18n/uk.json
@@ -11,7 +11,8 @@
"NickK",
"Olvin",
"Prima klasy4na",
- "Тест"
+ "Тест",
+ "Macofe"
]
},
"wikieditor": "Розширений інтерфейс редагування вікітексту",
@@ -22,9 +23,6 @@
"wikieditor-preview-tab": "Попередній перегляд",
"wikieditor-preview-changes-tab": "Зміни",
"wikieditor-preview-loading": "Завантаження…",
- "wikieditor-previewDialog-preference": "Увімкнути діалог попереднього перегляду",
- "wikieditor-previewDialog-tab": "Попередній перегляд",
- "wikieditor-previewDialog-loading": "Завантаження…",
"wikieditor-publish-preference": "Увімкнути публікацію крок за кроком",
"wikieditor-publish-button-publish": "Опублікувати",
"wikieditor-publish-button-cancel": "Скасувати",
@@ -152,28 +150,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Ви не зазначили, що треба шукати.",
"wikieditor-toolbar-tool-replace-invalidregex": "Введений вами регулярний вираз помилковий: $1",
"wikieditor-toolbar-section-characters": "Спеціальні символи",
- "wikieditor-toolbar-characters-page-latin": "Латинські",
- "wikieditor-toolbar-characters-page-latinextended": "Розширена латинська",
- "wikieditor-toolbar-characters-page-ipa": "МФА (IPA)",
- "wikieditor-toolbar-characters-page-symbols": "Символи",
- "wikieditor-toolbar-characters-page-greek": "Грецькі",
- "wikieditor-toolbar-characters-page-cyrillic": "Кирилиця",
- "wikieditor-toolbar-characters-page-arabic": "Арабські",
- "wikieditor-toolbar-characters-page-arabicextended": "Арабська розширена",
- "wikieditor-toolbar-characters-page-persian": "Перські",
- "wikieditor-toolbar-characters-page-hebrew": "Іврит",
- "wikieditor-toolbar-characters-page-bangla": "Бенгальські",
- "wikieditor-toolbar-characters-page-tamil": "Тамільська",
- "wikieditor-toolbar-characters-page-telugu": "Телугу",
- "wikieditor-toolbar-characters-page-sinhala": "Сингальська",
- "wikieditor-toolbar-characters-page-gujarati": "Гуджараті",
- "wikieditor-toolbar-characters-page-devanagari": "Деванагарі",
- "wikieditor-toolbar-characters-page-thai": "Тайські",
- "wikieditor-toolbar-characters-page-lao": "Лаоські",
- "wikieditor-toolbar-characters-page-khmer": "Кхмерські",
- "wikieditor-toolbar-characters-endash": "коротке тире",
- "wikieditor-toolbar-characters-emdash": "довге тире",
- "wikieditor-toolbar-characters-minus": "мінус",
"wikieditor-toolbar-section-help": "Довідка",
"wikieditor-toolbar-help-heading-description": "Опис",
"wikieditor-toolbar-help-heading-syntax": "Що ви вводите",
@@ -219,8 +195,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Елемент списку<br /># Елемент списку",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Елемент списку</li><li>Елемент списку</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Вбудований файл",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Пояснювальний текст]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Пояснювальний текст' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Збільшити' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Пояснювальний текст</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Виноска",
"wikieditor-toolbar-help-content-reference-syntax": "Текст сторінки&lt;ref name=\"test\"&gt;[http://www.example.org Текст посилання], додатковий текст.&lt;/ref&gt;.",
"wikieditor-toolbar-help-content-reference-result": "Текст сторінки.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/ur.json b/extensions/WikiEditor/i18n/ur.json
index c8cda28a..97b09567 100644
--- a/extensions/WikiEditor/i18n/ur.json
+++ b/extensions/WikiEditor/i18n/ur.json
@@ -15,9 +15,6 @@
"wikieditor-preview-tab": "پیش منظر",
"wikieditor-preview-changes-tab": "تبدیلیاں",
"wikieditor-preview-loading": "لادرہا ہے۔۔",
- "wikieditor-previewDialog-preference": "پیش منظر خانہ فعال کرو",
- "wikieditor-previewDialog-tab": "پیش منظر",
- "wikieditor-previewDialog-loading": "لادرہا ہے۔۔",
"wikieditor-publish-preference": "قدم بہ قدم شائع کاری فعال کرو",
"wikieditor-publish-button-publish": "شائع کرو",
"wikieditor-publish-button-cancel": "منسوخ",
@@ -196,7 +193,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# فہرستی مد<br /># فہرستی مد",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>فہرستی مد</li><li>فہرستی مد</li></ol>",
"wikieditor-toolbar-help-content-file-description": "پیوستہ ملف",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:مثال.png|thumb|تعقیبی متن]]",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:مثال.png|$2|تعقیبی متن]]",
"wikieditor-toolbar-help-content-reference-description": "حوالہ",
"wikieditor-toolbar-help-content-showreferences-description": "حوالہ جات دکھاؤ",
"wikieditor-toolbar-help-content-signaturetimestamp-description": "دستخط بمع مُہرِوقت",
diff --git a/extensions/WikiEditor/i18n/uz.json b/extensions/WikiEditor/i18n/uz.json
index 51c88a59..583ad3a4 100644
--- a/extensions/WikiEditor/i18n/uz.json
+++ b/extensions/WikiEditor/i18n/uz.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"CoderSI",
- "Sociologist"
+ "Sociologist",
+ "Macofe"
]
},
"wikieditor": "Vikimatnni tahrirlashning kengaytirilgan interfeysi",
@@ -13,9 +14,6 @@
"wikieditor-preview-tab": "Batafsil koʻrsatish",
"wikieditor-preview-changes-tab": "Oʻzgarishlar",
"wikieditor-preview-loading": "Yuklash...",
- "wikieditor-previewDialog-preference": "Batafsil koʻrsatish dialogini yoqish",
- "wikieditor-previewDialog-tab": "Batafsil koʻrsatish",
- "wikieditor-previewDialog-loading": "Yuklash...",
"wikieditor-publish-preference": "Qadamba-qadam nashr qilishni yoqish",
"wikieditor-publish-button-publish": "Nashr qilish",
"wikieditor-publish-button-cancel": "Bekor qilish",
@@ -141,27 +139,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Nimani qidirishni koʻrsatmadingiz.",
"wikieditor-toolbar-tool-replace-invalidregex": "Siz kiritgan muntazam ifodada xatolik: $1",
"wikieditor-toolbar-section-characters": "Maxsus belgilar",
- "wikieditor-toolbar-characters-page-latin": "Lotin",
- "wikieditor-toolbar-characters-page-latinextended": "Lotin kengaytirilgan",
- "wikieditor-toolbar-characters-page-ipa": "XFA (MFA)",
- "wikieditor-toolbar-characters-page-symbols": "Belgilar",
- "wikieditor-toolbar-characters-page-greek": "Yunon",
- "wikieditor-toolbar-characters-page-cyrillic": "Kirill",
- "wikieditor-toolbar-characters-page-arabic": "Arab",
- "wikieditor-toolbar-characters-page-arabicextended": "Arab kengaytirilgan",
- "wikieditor-toolbar-characters-page-persian": "Forsiy",
- "wikieditor-toolbar-characters-page-hebrew": "Yahudiy",
- "wikieditor-toolbar-characters-page-bangla": "Bengal",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singal",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Tay",
- "wikieditor-toolbar-characters-page-lao": "Laos",
- "wikieditor-toolbar-characters-page-khmer": "Kxmer",
- "wikieditor-toolbar-characters-emdash": "uzun tire",
- "wikieditor-toolbar-characters-minus": "minus belgisi",
"wikieditor-toolbar-section-help": "Yordam",
"wikieditor-toolbar-help-heading-description": "Taʼrif",
"wikieditor-toolbar-help-heading-syntax": "Nima kirityapsiz",
@@ -207,8 +184,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Roʻyxat qismi<br /># Roʻyxat qismi",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Roʻyxat qismi</li><li>Roʻyxat qismi</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fayl oʻrnatish",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Izohlovchi matn]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='\nIzohlovchi matn' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Kattalashtirish' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>\nIzohlovchi matn</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Izoh",
"wikieditor-toolbar-help-content-reference-syntax": "Sahifa matni.&lt;ref name=\"test\"&gt;[http://www.example.org Havola matni], qoʻshimcha matn.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Sahifa matni.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/vec.json b/extensions/WikiEditor/i18n/vec.json
index 590a1e0a..b44c64de 100644
--- a/extensions/WikiEditor/i18n/vec.json
+++ b/extensions/WikiEditor/i18n/vec.json
@@ -3,7 +3,8 @@
"authors": [
"Candalua",
"GatoSelvadego",
- "Vajotwo"
+ "Vajotwo",
+ "Macofe"
]
},
"wikieditor": "Interfacia avansada de modifica testo wiki",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "Anteprima",
"wikieditor-preview-changes-tab": "Canbiamenti",
"wikieditor-preview-loading": "So' drio cargar...",
- "wikieditor-previewDialog-preference": "Abilita la finestra de dialogo de anteprima",
- "wikieditor-previewDialog-tab": "Anteprima",
- "wikieditor-previewDialog-loading": "So' drio cargar...",
"wikieditor-publish-preference": "Intaca la publicasion un toco a la olta",
"wikieditor-publish-button-publish": "Pùblica",
"wikieditor-publish-button-cancel": "Anula",
@@ -142,28 +140,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "No te ghè inserìo gnente da sercar.",
"wikieditor-toolbar-tool-replace-invalidregex": "L'espresion regolare che te ghè inserìo no la xe mia valida: $1",
"wikieditor-toolbar-section-characters": "Caràteri speciali",
- "wikieditor-toolbar-characters-page-latin": "Latìn",
- "wikieditor-toolbar-characters-page-latinextended": "Latìn estexo",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Sìnboli",
- "wikieditor-toolbar-characters-page-greek": "Grego",
- "wikieditor-toolbar-characters-page-cyrillic": "Cirìlico",
- "wikieditor-toolbar-characters-page-arabic": "Àrabo",
- "wikieditor-toolbar-characters-page-arabicextended": "Arabo estexo",
- "wikieditor-toolbar-characters-page-persian": "Persian",
- "wikieditor-toolbar-characters-page-hebrew": "Abràego",
- "wikieditor-toolbar-characters-page-bangla": "Bengałexe",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Singalese",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thaiłandexe",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
- "wikieditor-toolbar-characters-endash": "lineeta ene",
- "wikieditor-toolbar-characters-emdash": "lineeta eme",
- "wikieditor-toolbar-characters-minus": "segno meno",
"wikieditor-toolbar-section-help": "Ajuto",
"wikieditor-toolbar-help-heading-description": "Descrision",
"wikieditor-toolbar-help-heading-syntax": "Cuel che te scrivi",
@@ -209,8 +185,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Elemento de l'elenco<br /># Elemento de l'elenco",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Elemento de l'elenco</li><li>Elemento de l'elenco</li></ol>",
"wikieditor-toolbar-help-content-file-description": "File incorporado",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Testo de la didascalia]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Testo de la didascalia</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Nòda",
"wikieditor-toolbar-help-content-reference-syntax": "Testo de la pàgina.&lt;ref name=\"test\"&gt;[http://www.exenpio.org Testo del colegamento], altro testo in pì.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Testo de la pàgina.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/vi.json b/extensions/WikiEditor/i18n/vi.json
index 7756fefd..3433aaf6 100644
--- a/extensions/WikiEditor/i18n/vi.json
+++ b/extensions/WikiEditor/i18n/vi.json
@@ -3,7 +3,8 @@
"authors": [
"Minh Nguyen",
"Vinhtantran",
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "Macofe"
]
},
"wikieditor": "Giao diện sửa đổi mã wiki nâng cao",
@@ -14,9 +15,6 @@
"wikieditor-preview-tab": "Xem trước",
"wikieditor-preview-changes-tab": "Các thay đổi",
"wikieditor-preview-loading": "Đang tải…",
- "wikieditor-previewDialog-preference": "Mở hộp thoại để xem trước",
- "wikieditor-previewDialog-tab": "Xem trước",
- "wikieditor-previewDialog-loading": "Đang tải…",
"wikieditor-publish-preference": "Xuất bản từng bước một",
"wikieditor-publish-button-publish": "Xuất bản",
"wikieditor-publish-button-cancel": "Hủy bỏ",
@@ -143,28 +141,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Bạn chưa nhập gì để tìm kiếm.",
"wikieditor-toolbar-tool-replace-invalidregex": "Biểu thức chính quy do bạn nhập vào không hợp lệ: $1",
"wikieditor-toolbar-section-characters": "Ký tự đặc biệt",
- "wikieditor-toolbar-characters-page-latin": "La tinh",
- "wikieditor-toolbar-characters-page-latinextended": "La tinh mở rộng",
- "wikieditor-toolbar-characters-page-ipa": "Phiên âm quốc tế",
- "wikieditor-toolbar-characters-page-symbols": "Ký hiệu",
- "wikieditor-toolbar-characters-page-greek": "Hy Lạp",
- "wikieditor-toolbar-characters-page-cyrillic": "Kirin",
- "wikieditor-toolbar-characters-page-arabic": "Ả Rập",
- "wikieditor-toolbar-characters-page-arabicextended": "Ả Rập mở rộng",
- "wikieditor-toolbar-characters-page-persian": "Ba Tư",
- "wikieditor-toolbar-characters-page-hebrew": "Hê-brơ",
- "wikieditor-toolbar-characters-page-bangla": "Bangla",
- "wikieditor-toolbar-characters-page-tamil": "Tamil",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarat",
- "wikieditor-toolbar-characters-page-devanagari": "Devanagari",
- "wikieditor-toolbar-characters-page-thai": "Thái",
- "wikieditor-toolbar-characters-page-lao": "Lào",
- "wikieditor-toolbar-characters-page-khmer": "Khơ-me",
- "wikieditor-toolbar-characters-endash": "dấu gạch en",
- "wikieditor-toolbar-characters-emdash": "dấu gạch em",
- "wikieditor-toolbar-characters-minus": "dấu trừ",
"wikieditor-toolbar-section-help": "Trợ giúp",
"wikieditor-toolbar-help-heading-description": "Miêu tả",
"wikieditor-toolbar-help-heading-syntax": "Bạn nhập",
@@ -210,8 +186,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Mục danh sách<br /># Mục danh sách",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Mục danh sách</li><li>Mục danh sách</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Chèn tập tin",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ví dụ.png|thumb|Văn bản chú thích]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Văn bản chú thích' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Phóng lớn' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Văn bản chú thích</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Ví dụ.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Tham khảo",
"wikieditor-toolbar-help-content-reference-syntax": "Nội dung trang&lt;ref name=\"thử\"&gt;[http://www.example.org Văn bản liên kết], văn bản bổ sung.&lt;/ref&gt;.",
"wikieditor-toolbar-help-content-reference-result": "Nội dung trang<sup><a href='#'>[1]</a></sup>.",
diff --git a/extensions/WikiEditor/i18n/yi.json b/extensions/WikiEditor/i18n/yi.json
index 8bcc59ee..0deed3b8 100644
--- a/extensions/WikiEditor/i18n/yi.json
+++ b/extensions/WikiEditor/i18n/yi.json
@@ -13,9 +13,6 @@
"wikieditor-preview-tab": "פֿאראויסשטעלונג",
"wikieditor-preview-changes-tab": "ענדערונגען",
"wikieditor-preview-loading": "לאָדט…",
- "wikieditor-previewDialog-preference": "אקטיווירן פאראויסקוק דיאלאג",
- "wikieditor-previewDialog-tab": "פֿאראויסשטעלונג",
- "wikieditor-previewDialog-loading": "לאָדט…",
"wikieditor-publish-button-publish": "פֿאַרעפֿנטלעכן",
"wikieditor-publish-button-cancel": "אַנולירן",
"wikieditor-publish-dialog-title": "פארעפנטלעכן אויף {{SITENAME}}",
@@ -207,8 +204,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# ליסטע איינצל<br /># ליסטע איינצל",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>ליסטע איינצל</li><li>ליסטע איינצל</li></ol>",
"wikieditor-toolbar-help-content-file-description": "אײַנגעבעטעטע טעקע",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|באשרייבונג]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='קעפל טעקסט' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='פארגרעסערן' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>באַשרײַבונג</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "רעפערענץ",
"wikieditor-toolbar-help-content-reference-syntax": "בלאַט טעקסט.&lt;ref name=\"test\"&gt;[http://www.example.org לינק טעקסט], צוגעגעבענער טעקסט.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "בלאַט טעקסט. <a href='#'><sup>[1]</sup></a>",
diff --git a/extensions/WikiEditor/i18n/yo.json b/extensions/WikiEditor/i18n/yo.json
index 048667c1..7fddef46 100644
--- a/extensions/WikiEditor/i18n/yo.json
+++ b/extensions/WikiEditor/i18n/yo.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Demmy"
+ "Demmy",
+ "Macofe"
]
},
"wikieditor-wikitext-tab": "Ìkọ wiki",
@@ -10,9 +11,6 @@
"wikieditor-preview-tab": "Àyẹ̀wò",
"wikieditor-preview-changes-tab": "Àwọn àtúnṣe",
"wikieditor-preview-loading": "Óúnbọ̀wá...",
- "wikieditor-previewDialog-preference": "Ìgbàláyè pátákó àkíyèsí fún àyẹ̀wò",
- "wikieditor-previewDialog-tab": "Àyẹ̀wò",
- "wikieditor-previewDialog-loading": "Óúnbọ̀wá...",
"wikieditor-publish-preference": "Ìgbàláyè ìtẹ̀jáde lẹ́sẹ-sẹ",
"wikieditor-publish-button-publish": "Ìtẹ̀jáde",
"wikieditor-publish-button-cancel": "Fagilé",
@@ -126,22 +124,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "Ẹ kò kọ ohun kankan láti wárí.",
"wikieditor-toolbar-tool-replace-invalidregex": "Ìgbékalẹ̀ọ̀rọ̀ dédé tí ẹ kọ kò yẹ: $1",
"wikieditor-toolbar-section-characters": "Àwọn lẹ́tà pàtàkì",
- "wikieditor-toolbar-characters-page-latin": "Látìnì",
- "wikieditor-toolbar-characters-page-latinextended": "Látìnì títóbi",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "Àwọn àmì ìdámọ̀",
- "wikieditor-toolbar-characters-page-greek": "Gíríkì",
- "wikieditor-toolbar-characters-page-cyrillic": "Kíúrílíkì",
- "wikieditor-toolbar-characters-page-arabic": "Lárúbáwá",
- "wikieditor-toolbar-characters-page-persian": "Èdè Pẹrsíà",
- "wikieditor-toolbar-characters-page-hebrew": "Hébérù",
- "wikieditor-toolbar-characters-page-bangla": "Bánglà",
- "wikieditor-toolbar-characters-page-telugu": "Tèlúgù",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
- "wikieditor-toolbar-characters-page-thai": "Thai",
- "wikieditor-toolbar-characters-page-lao": "Lao",
- "wikieditor-toolbar-characters-page-khmer": "Khmer",
"wikieditor-toolbar-section-help": "Ìrànwọ́",
"wikieditor-toolbar-help-heading-description": "Ìjúwe",
"wikieditor-toolbar-help-heading-syntax": "Ohun tí ẹ tẹ̀",
@@ -187,8 +169,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# Ohun àkójọ<br /># Ohun àkójọ",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>Ohun àkójọ</li><li>Ohun àkójọ</li></ol>",
"wikieditor-toolbar-help-content-file-description": "Fáìlì alákòósínú",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|Àkọlé]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='Ìkọ àkọlé' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Ìkọ àkọlé</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "Ìtọ́kasí",
"wikieditor-toolbar-help-content-reference-syntax": "Íkọ ojúewé.&lt;ref name=\"test\"&gt;[http://www.example.org Ìkọ ìjápọ̀], ìkọ mìràn.&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "Ìkọ ojúewé.<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/yue.json b/extensions/WikiEditor/i18n/yue.json
index 7b61e7f2..d65471e2 100644
--- a/extensions/WikiEditor/i18n/yue.json
+++ b/extensions/WikiEditor/i18n/yue.json
@@ -4,7 +4,9 @@
"Horacewai2",
"Simon Shek",
"Waihorace",
- "Xiaomingyan"
+ "Xiaomingyan",
+ "LNDDYL",
+ "Macofe"
]
},
"wikieditor": "進階維基文字編輯界面",
@@ -15,8 +17,6 @@
"wikieditor-preview-tab": "預覽",
"wikieditor-preview-changes-tab": "改動",
"wikieditor-preview-loading": "載入緊…",
- "wikieditor-previewDialog-tab": "預覽",
- "wikieditor-previewDialog-loading": "載入緊…",
"wikieditor-publish-preference": "啟用一步還一步嘅發佈功能",
"wikieditor-publish-button-publish": "發佈",
"wikieditor-publish-button-cancel": "取消",
@@ -109,7 +109,7 @@
"wikieditor-toolbar-tool-table-dimensions-header": "新增標題行",
"wikieditor-toolbar-tool-table-wikitable": "連埋外框同格式",
"wikieditor-toolbar-tool-table-sortable": "整一個可以排序嘅表格",
- "wikieditor-toolbar-tool-table-example": "-\n! 表頭 1\n! 表頭 2\n! 表頭 3\n|-\n| 行 1, 格 1\n| 行 1, 格 2\n| 行 1, 格 3\n|-\n| 行 2, 格 1\n| 行 2, 格 2\n| 行 2, 格 3",
+ "wikieditor-toolbar-tool-table-example": "範例",
"wikieditor-toolbar-tool-table-preview": "預覽",
"wikieditor-toolbar-tool-table-insert": "插入",
"wikieditor-toolbar-tool-table-cancel": "取消",
@@ -130,18 +130,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "你無打要搵啲咩。",
"wikieditor-toolbar-tool-replace-invalidregex": "你打入嘅運算係錯嘅:$1",
"wikieditor-toolbar-section-characters": "特別字元",
- "wikieditor-toolbar-characters-page-latin": "拉丁文",
- "wikieditor-toolbar-characters-page-latinextended": "Latin擴展左",
- "wikieditor-toolbar-characters-page-ipa": "IPA",
- "wikieditor-toolbar-characters-page-symbols": "符號",
- "wikieditor-toolbar-characters-page-greek": "希臘文",
- "wikieditor-toolbar-characters-page-cyrillic": "西里爾文",
- "wikieditor-toolbar-characters-page-arabic": "阿拉伯文",
- "wikieditor-toolbar-characters-page-hebrew": "希伯來文",
- "wikieditor-toolbar-characters-page-bangla": "Bangla\nBangla",
- "wikieditor-toolbar-characters-page-telugu": "Telugu",
- "wikieditor-toolbar-characters-page-sinhala": "Sinhala",
- "wikieditor-toolbar-characters-page-gujarati": "Gujarati",
"wikieditor-toolbar-section-help": "幫手",
"wikieditor-toolbar-help-heading-description": "说明",
"wikieditor-toolbar-help-heading-syntax": "你輸入啲乜",
@@ -187,8 +175,7 @@
"wikieditor-toolbar-help-content-olist-syntax": "# 一覽項目<br /># 一覽項目",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>一覽項目</li><li>一覽項目</li></ol>",
"wikieditor-toolbar-help-content-file-description": "結合檔",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|標題字]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='標題字' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='放大' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>標題字</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
"wikieditor-toolbar-help-content-reference-description": "參考",
"wikieditor-toolbar-help-content-reference-syntax": "頁字。&lt;ref name=\"test\"&gt;[http://www.example.org 連字],附加字。&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "頁字。<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/zh-hans.json b/extensions/WikiEditor/i18n/zh-hans.json
index 3eba42c5..63a5407e 100644
--- a/extensions/WikiEditor/i18n/zh-hans.json
+++ b/extensions/WikiEditor/i18n/zh-hans.json
@@ -19,14 +19,11 @@
"wikieditor": "高级维基文本编辑界面",
"wikieditor-desc": "提供可扩充的维基文本编辑界面及功能组件",
"wikieditor-wikitext-tab": "维基文本",
- "wikieditor-loading": "正在载入",
+ "wikieditor-loading": "正在载入……",
"wikieditor-preview-preference": "启用双列对比预览",
"wikieditor-preview-tab": "预览",
"wikieditor-preview-changes-tab": "更改",
"wikieditor-preview-loading": "正在载入...",
- "wikieditor-previewDialog-preference": "启用预览对话框的",
- "wikieditor-previewDialog-tab": "预览",
- "wikieditor-previewDialog-loading": "正在载入...",
"wikieditor-publish-preference": "启用逐步发表功能",
"wikieditor-publish-button-publish": "发表",
"wikieditor-publish-button-cancel": "取消",
@@ -41,7 +38,7 @@
"wikieditor-toolbar-preference": "启用增强的编辑工具栏",
"wikieditor-toolbar-dialogs-preference": "启用插入链接表格向导及查找和替换功能",
"wikieditor-toolbar-hidesig": "在主名字空间中隐藏签名按钮",
- "wikieditor-toolbar-loading": "正在载入",
+ "wikieditor-toolbar-loading": "正在载入……",
"wikieditor-toolbar-tool-bold": "粗体",
"wikieditor-toolbar-tool-bold-example": "粗体文字",
"wikieditor-toolbar-tool-italic": "斜体",
@@ -80,7 +77,7 @@
"wikieditor-toolbar-file-caption": "标题:",
"wikieditor-toolbar-file-size": "尺寸:",
"wikieditor-toolbar-file-float": "对齐:",
- "wikieditor-toolbar-file-default": "(默认)",
+ "wikieditor-toolbar-file-default": "(默认)",
"wikieditor-toolbar-file-format": "格式:",
"wikieditor-toolbar-file-format-none": "无",
"wikieditor-toolbar-tool-file-insert": "插入",
@@ -161,9 +158,9 @@
"wikieditor-toolbar-characters-page-cyrillic": "西里尔字母",
"wikieditor-toolbar-characters-page-arabic": "阿拉伯字母",
"wikieditor-toolbar-characters-page-arabicextended": "扩展阿拉伯字母",
- "wikieditor-toolbar-characters-page-persian": "波斯语",
+ "wikieditor-toolbar-characters-page-persian": "波斯语字母",
"wikieditor-toolbar-characters-page-hebrew": "希伯来字母",
- "wikieditor-toolbar-characters-page-bangla": "孟加拉",
+ "wikieditor-toolbar-characters-page-bangla": "孟加拉字母",
"wikieditor-toolbar-characters-page-tamil": "泰米尔数字和符号",
"wikieditor-toolbar-characters-page-telugu": "泰卢固字母",
"wikieditor-toolbar-characters-page-sinhala": "僧伽罗语",
@@ -220,8 +217,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# 列表项<br /># 列表项",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>列表项</li><li>列表项</li></ol>",
"wikieditor-toolbar-help-content-file-description": "嵌入文件",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|说明文字]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='说明文字' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='放大' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>说明文字</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "标题文本",
"wikieditor-toolbar-help-content-reference-description": "参考",
"wikieditor-toolbar-help-content-reference-syntax": "页面文本。&lt;ref name=\"测试\"&gt;[http://www.example.org 链接文本],附加文本。&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "页面文本。<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/i18n/zh-hant.json b/extensions/WikiEditor/i18n/zh-hant.json
index ee9b6f47..b0613b33 100644
--- a/extensions/WikiEditor/i18n/zh-hant.json
+++ b/extensions/WikiEditor/i18n/zh-hant.json
@@ -19,20 +19,19 @@
"Wrightbus",
"Xiaomingyan",
"Cwlin0416",
- "Liflon"
+ "Liflon",
+ "LNDDYL",
+ "Macofe"
]
},
"wikieditor": "進階 Wiki 文字編輯介面",
"wikieditor-desc": "提供 Wiki 文字編輯介面擴充功能及相關模組",
"wikieditor-wikitext-tab": "Wiki 文字",
"wikieditor-loading": "讀取中...",
- "wikieditor-preview-preference": "啟用並排預覽",
+ "wikieditor-preview-preference": "開啟並排預覽",
"wikieditor-preview-tab": "預覽",
"wikieditor-preview-changes-tab": "變更",
"wikieditor-preview-loading": "讀取中...",
- "wikieditor-previewDialog-preference": "開啟預覽對話框",
- "wikieditor-previewDialog-tab": "預覽",
- "wikieditor-previewDialog-loading": "讀取中...",
"wikieditor-publish-preference": "開啟發佈協助功能",
"wikieditor-publish-button-publish": "發佈",
"wikieditor-publish-button-cancel": "取消",
@@ -44,8 +43,8 @@
"wikieditor-publish-dialog-goback": "返回",
"wikieditor-toolbar": "編輯工具列",
"wikieditor-toolbar-desc": "使編輯頁面更簡單的頁面工具列",
- "wikieditor-toolbar-preference": "啟用進階編輯工具列",
- "wikieditor-toolbar-dialogs-preference": "啟用插入連結、表格、搜尋與取代的協助功能",
+ "wikieditor-toolbar-preference": "開啟進階編輯工具列",
+ "wikieditor-toolbar-dialogs-preference": "開啟插入連結、表格、搜尋與取代的協助功能",
"wikieditor-toolbar-hidesig": "隱藏在主要命名空間頁面中的簽名按鈕",
"wikieditor-toolbar-loading": "讀取中...",
"wikieditor-toolbar-tool-bold": "粗體",
@@ -80,7 +79,7 @@
"wikieditor-toolbar-tool-link-lookslikeinternal-ext": "外部連結",
"wikieditor-toolbar-tool-link-empty": "您未輸入要連結的對象。",
"wikieditor-toolbar-tool-file": "附加檔案",
- "wikieditor-toolbar-tool-file-example": "Example.jpg",
+ "wikieditor-toolbar-tool-file-example": "範例.jpg",
"wikieditor-toolbar-tool-file-title": "插入檔案",
"wikieditor-toolbar-file-target": "檔案名稱:",
"wikieditor-toolbar-file-caption": "標題:",
@@ -141,7 +140,7 @@
"wikieditor-toolbar-tool-table-preview": "預覽",
"wikieditor-toolbar-tool-table-insert": "插入",
"wikieditor-toolbar-tool-table-cancel": "取消",
- "wikieditor-toolbar-tool-table-toomany": "此對話框中無法插入超過 1000 個儲存格的表格。",
+ "wikieditor-toolbar-tool-table-toomany": "此對話方塊中無法插入超過 1000 個儲存格的表格。",
"wikieditor-toolbar-tool-table-invalidnumber": "您輸入的列數或欄數無效。",
"wikieditor-toolbar-tool-table-zero": "您不能插入一個零列或零欄的表格。",
"wikieditor-toolbar-tool-replace": "搜尋與取代",
@@ -159,28 +158,6 @@
"wikieditor-toolbar-tool-replace-emptysearch": "您沒有輸入要搜尋的內容。",
"wikieditor-toolbar-tool-replace-invalidregex": "您輸入的正規表式法無效:$1",
"wikieditor-toolbar-section-characters": "特殊文字",
- "wikieditor-toolbar-characters-page-latin": "拉丁文",
- "wikieditor-toolbar-characters-page-latinextended": "拉丁文擴充",
- "wikieditor-toolbar-characters-page-ipa": "國際音標",
- "wikieditor-toolbar-characters-page-symbols": "符號",
- "wikieditor-toolbar-characters-page-greek": "希臘文",
- "wikieditor-toolbar-characters-page-cyrillic": "斯拉夫文",
- "wikieditor-toolbar-characters-page-arabic": "阿拉伯文",
- "wikieditor-toolbar-characters-page-arabicextended": "阿拉伯文擴充",
- "wikieditor-toolbar-characters-page-persian": "波斯文",
- "wikieditor-toolbar-characters-page-hebrew": "希伯來文",
- "wikieditor-toolbar-characters-page-bangla": "孟加拉文",
- "wikieditor-toolbar-characters-page-tamil": "坦米爾文",
- "wikieditor-toolbar-characters-page-telugu": "特拉古文",
- "wikieditor-toolbar-characters-page-sinhala": "僧伽羅文",
- "wikieditor-toolbar-characters-page-gujarati": "古吉拉特文",
- "wikieditor-toolbar-characters-page-devanagari": "梵文",
- "wikieditor-toolbar-characters-page-thai": "泰文",
- "wikieditor-toolbar-characters-page-lao": "寮文",
- "wikieditor-toolbar-characters-page-khmer": "高棉文",
- "wikieditor-toolbar-characters-endash": "en dash",
- "wikieditor-toolbar-characters-emdash": "em dash",
- "wikieditor-toolbar-characters-minus": "減號",
"wikieditor-toolbar-section-help": "說明",
"wikieditor-toolbar-help-heading-description": "描述",
"wikieditor-toolbar-help-heading-syntax": "您輸入的內容",
@@ -226,8 +203,8 @@
"wikieditor-toolbar-help-content-olist-syntax": "# 清單項目<br /># 清單項目",
"wikieditor-toolbar-help-content-olist-result": "<ol><li>清單項目</li><li>清單項目</li></ol>",
"wikieditor-toolbar-help-content-file-description": "附加檔案",
- "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|thumb|標題文字]]",
- "wikieditor-toolbar-help-content-file-result": "<div style='width:104px;' class='thumbinner'><a title='標題文字' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='放大' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>標題文字</div></div>",
+ "wikieditor-toolbar-help-content-file-syntax": "[[$1:Example.png|$2|$3]]",
+ "wikieditor-toolbar-help-content-file-caption": "標題文字",
"wikieditor-toolbar-help-content-reference-description": "參考來源",
"wikieditor-toolbar-help-content-reference-syntax": "頁面文字。&lt;ref name=\"test\"&gt;[http://www.example.org 連結文字],附加文字。&lt;/ref&gt;",
"wikieditor-toolbar-help-content-reference-result": "頁面文字。<sup><a href='#'>[1]</a></sup>",
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.css b/extensions/WikiEditor/modules/ext.wikiEditor.css
deleted file mode 100644
index 6ea7e631..00000000
--- a/extensions/WikiEditor/modules/ext.wikiEditor.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * CSS for WikiEditor
- */
-
-/* Hide vanilla MediaWiki's "Editing help" link, as we provide it in the toolbar */
-.editButtons .editHelp,
-.editButtons .mw-editButtons-pipe-separator {
- display: none;
-}
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.js b/extensions/WikiEditor/modules/ext.wikiEditor.js
index 46087989..7e3baed6 100644
--- a/extensions/WikiEditor/modules/ext.wikiEditor.js
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.js
@@ -1,7 +1,80 @@
/*
* JavaScript for WikiEditor
*/
-jQuery( document ).ready( function ( $ ) {
- // Initialize wikiEditor
- $( '#wpTextbox1' ).wikiEditor();
-} );
+
+( function ( $, mw ) {
+ function logEditEvent( action, data ) {
+ if ( mw.loader.getState( 'schema.Edit' ) === null ) {
+ return;
+ }
+
+ mw.loader.using( 'schema.Edit' ).done( function () {
+ data = $.extend( {
+ version: 1,
+ action: action,
+ editor: 'wikitext',
+ platform: 'desktop', // FIXME
+ integration: 'page',
+ 'page.id': mw.config.get( 'wgArticleId' ),
+ 'page.title': mw.config.get( 'wgPageName' ),
+ 'page.ns': mw.config.get( 'wgNamespaceNumber' ),
+ 'page.revid': mw.config.get( 'wgRevisionId' ),
+ 'page.length': -1, // FIXME
+ 'user.id': mw.user.getId(),
+ 'user.editCount': mw.config.get( 'wgUserEditCount', 0 ),
+ 'mediawiki.version': mw.config.get( 'wgVersion' )
+ }, data );
+
+ if ( mw.user.isAnon() ) {
+ data['user.class'] = 'IP';
+ }
+
+ data['action.' + action + '.type'] = data.type;
+ data['action.' + action + '.mechanism'] = data.mechanism;
+ data['action.' + action + '.timing'] = data.timing === undefined ?
+ 0 : Math.floor( data.timing );
+ // Remove renamed properties
+ delete data.type;
+ delete data.mechanism;
+ delete data.timing;
+
+ mw.eventLog.logEvent( 'Edit', data );
+ } );
+ }
+
+ $( function () {
+ var $textarea = $( '#wpTextbox1' ),
+ editingSessionIdInput = $( '#editingStatsId' ),
+ editingSessionId, submitting, onUnloadFallback;
+
+ // Initialize wikiEditor
+ $textarea.wikiEditor();
+
+ if ( editingSessionIdInput.length ) {
+ editingSessionId = editingSessionIdInput.val();
+ logEditEvent( 'ready', {
+ editingSessionId: editingSessionId
+ } );
+ $textarea.closest( 'form' ).submit( function () {
+ submitting = true;
+ } );
+ onUnloadFallback = window.onunload;
+ window.onunload = function () {
+ var fallbackResult;
+
+ if ( onUnloadFallback ) {
+ fallbackResult = onUnloadFallback();
+ }
+
+ if ( !submitting ) {
+ logEditEvent( 'abort', {
+ editingSessionId: editingSessionId,
+ // TODO: abort.type
+ } );
+ }
+
+ return fallbackResult;
+ };
+ }
+ } );
+}( jQuery, mediaWiki ) ); \ No newline at end of file
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.less b/extensions/WikiEditor/modules/ext.wikiEditor.less
new file mode 100644
index 00000000..0163242d
--- /dev/null
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.less
@@ -0,0 +1,11 @@
+/**
+ * CSS for WikiEditor
+ */
+
+/* Hide vanilla MediaWiki's "Editing help" link, as we provide it in the toolbar */
+.editButtons {
+ .editHelp,
+ .mw-editButtons-pipe-separator {
+ display: none;
+ }
+}
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js b/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js
deleted file mode 100644
index 3b1acd7c..00000000
--- a/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- * JavaScript for WikiEditor Preview Dialog
- */
-jQuery( document ).ready( function ( $ ) {
- // Add preview module
- $( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'previewDialog' );
-} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js b/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js
deleted file mode 100644
index 3475284b..00000000
--- a/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js
+++ /dev/null
@@ -1,255 +0,0 @@
-/**
- * Test set for the edit toolbar
- */
-var textareaId = '#wpTextbox1';
-var wikiEditorTests = {
- // Add emoticons section
- 'add_sections_toolbar': {
- call: 'addToToolbar',
- data: {
- 'sections': {
- 'emoticons': {
- 'type': 'toolbar',
- 'label': 'Emoticons'
- }
- }
- },
- test: '*[rel=emoticons].section',
- pre: 0,
- post: 1
- },
- // Add faces group to emoticons section
- 'add_groups': {
- call: 'addToToolbar',
- data: {
- section: 'emoticons',
- 'groups': {
- 'faces': {
- 'label': 'Faces'
- }
- }
- },
- test: '*[rel=emoticons].section *[rel=faces].group',
- pre: 0,
- post: 1
- },
- // Add smile tool to faces group of emoticons section
- 'add_tools': {
- call: 'addToToolbar',
- data: {
- section: 'emoticons',
- 'group': 'faces',
- 'tools': {
- 'smile': {
- label: 'Smile!',
- type: 'button',
- icon: 'http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Gnome-face-smile.svg/22px-Gnome-face-smile.svg.png',
- action: {
- type: 'encapsulate',
- options: {
- pre: ':)'
- }
- }
- }
- }
- },
- test: '*[rel=emoticons].section *[rel=faces].group *[rel=smile].tool',
- pre: 0,
- post: 1
- },
- // Add info section
- 'add_sections_booklet': {
- call: 'addToToolbar',
- data: {
- 'sections': {
- 'info': {
- 'type': 'booklet',
- 'label': 'Info'
- }
- }
- },
- test: '*[rel=info].section',
- pre: 0,
- post: 1
- },
- // Add info section
- 'add_pages_table': {
- call: 'addToToolbar',
- data: {
- section: 'info',
- pages: {
- 'colors': {
- 'layout': 'table',
- 'label': 'Colors',
- 'headings': [
- { text: 'Name' },
- { text: 'Temperature' },
- { text: 'Swatch' }
- ]
- }
- }
- },
- test: '*[rel=info].section *[rel=colors].page',
- pre: 0,
- post: 1
- },
- // Add colors rows
- 'add_rows': {
- call: 'addToToolbar',
- data: {
- section: 'info',
- page: 'colors',
- 'rows': [
- {
- 'name': { text: 'Red' },
- 'temp': { text: 'Warm' },
- 'swatch': { html: '<div style="width: 10px; height: 10px; background-color: red;">' }
- },
- {
- 'name': { text: 'Blue' },
- 'temp': { text: 'Cold' },
- 'swatch': { html: '<div style="width: 10px; height: 10px; background-color: blue;">' }
- },
- {
- 'name': { text: 'Silver' },
- 'temp': { text: 'Neutral' },
- 'swatch': { html: '<div style="width: 10px; height: 10px; background-color: silver;">' }
- }
- ]
- },
- test: '*[rel=info].section *[rel=colors].page tr td',
- pre: 0,
- post: 9
- },
- // Add
- 'add_pages_characters': {
- call: 'addToToolbar',
- data: {
- section: 'info',
- pages: {
- 'emoticons': {
- 'layout': 'characters',
- 'label': 'Emoticons'
- },
- 'removeme': {
- 'layout': 'characters',
- 'label': 'Remove Me!'
- }
- }
- },
- test: '*[rel=info].section *[rel=emoticons].page',
- pre: 0,
- post: 1
- },
- // Add
- 'add_characters': {
- call: 'addToToolbar',
- data: {
- section: 'info',
- page: 'emoticons',
- characters: [ ':)', ':))', ':(', '<3', ';)' ]
- },
- test: '*[rel=info].section *[rel=emoticons].page *[rel=":)"]',
- pre: 0,
- post: 1
- },
- // Remove page
- 'remove_page': {
- call: 'removeFromToolbar',
- data: {
- section: 'info',
- page: 'removeme'
- },
- test: '*[rel=info].section *[rel=removeme].page',
- pre: 1,
- post: 0
- },
- // Remove :)) from emoticon characters
- 'remove_character': {
- call: 'removeFromToolbar',
- data: {
- section: 'info',
- page: 'emoticons',
- 'character': ':))'
- },
- test: '*[rel=info].section *[rel=emoticons].page *[rel=":))"]',
- pre: 1,
- post: 0
- },
- // Remove row from colors table of info section
- 'remove_row': {
- call: 'removeFromToolbar',
- data: {
- section: 'info',
- page: 'colors',
- 'row': 0
- },
- test: '*[rel=info].section *[rel=colors].page tr td',
- pre: 9,
- post: 6
- }
-};
-
-jQuery( document ).ready( function ( $ ) {
- var $button = $( '<button>Run wikiEditor Tests!</button>' )
- .css( {
- position: 'fixed',
- bottom: 0,
- right: 0,
- width: '100%',
- backgroundColor: '#333',
- opacity: 0.75,
- color: '#DDDDDD',
- padding: '0.7em',
- border: 'none',
- display: 'none',
- cursor: 'pointer'
- } )
- .click( function () {
- if ( $( this ).data( 'testDone' ) ) {
- $( this ).slideUp( 'fast' );
- return false;
- }
-
- var test, pre, post, i,
- messages = [ 'Running tests for wikiEditor API' ],
- $target = $( textareaId ),
- $ui = $target.data( 'wikiEditor-context' ).$ui,
- passes = 0,
- tests = 0;
-
- for ( test in wikiEditorTests ) {
- pre = $ui.find( wikiEditorTests[test].test ).length === wikiEditorTests[test].pre;
- messages.push ( test + '-pre: ' + ( pre ? 'PASS' : 'FAIL' ) );
- $target.wikiEditor(
- wikiEditorTests[test].call,
- wikiEditorTests[test].data
- );
- post = $ui.find( wikiEditorTests[test].test ).length === wikiEditorTests[test].post;
- messages.push ( test + '-post: ' + ( post ? 'PASS' : 'FAIL' ) );
- if ( pre && post ) {
- passes++;
- }
- tests++;
- }
-
- if ( window.console ) {
- for ( i = 0; i < messages.length; i++ ) {
- window.console.log( messages[i] );
- }
- }
-
- $( this )
- .attr( 'title', messages.join( ' | ' ) )
- .text( passes + ' / ' + tests + ' were successful' )
- .css( 'backgroundColor', passes < tests ? 'red' : 'green' )
- .data( 'testDone', 'true' )
- .blur();
- } )
- .appendTo( $( 'body' ) );
-
- setTimeout( function () {
- $button.slideDown( 'fast' );
- }, 1500 );
-
-} );
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.css b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.css
deleted file mode 100644
index cc80c169..00000000
--- a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.css
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * CSS for WikiEditor
- */
-
-form#editform {
- margin: 0;
- padding: 0;
-}
-
-#wpSummary,
-#wpSummaryLabel {
- margin-bottom: 1em;
-}
-
-#wpTextbox1 {
- line-height: 1.5em;
- resize: vertical;
-}
-
-/* Hide the old toolbar until the wikiEditor toolbar is deemed not supported,
- * hide the WikiEditor toolbar until it's css has loaded */
-.wikiEditor-oldToolbar,
-.wikiEditor-ui-toolbar {
- display: none;
-}
diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.less b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.less
new file mode 100644
index 00000000..67da9329
--- /dev/null
+++ b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.styles.less
@@ -0,0 +1,20 @@
+/**
+ * CSS for WikiEditor
+ */
+
+form#editform {
+ margin: 0;
+ padding: 0;
+}
+
+#wpTextbox1 {
+ line-height: 1.5em;
+ resize: vertical;
+}
+
+/* Hide the old toolbar until the wikiEditor toolbar is deemed not supported,
+ * hide the WikiEditor toolbar until it's css has loaded */
+.wikiEditor-oldToolbar,
+.wikiEditor-ui-toolbar {
+ display: none;
+}
diff --git a/extensions/WikiEditor/modules/images/toolbar/button-sprite.svg b/extensions/WikiEditor/modules/images/toolbar/button-sprite.svg
deleted file mode 100644
index 061ffa38..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/button-sprite.svg
+++ /dev/null
@@ -1,3038 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- version="1.1"
- width="94"
- height="2038"
- id="svg3752">
- <defs
- id="defs3754">
- <filter
- color-interpolation-filters="sRGB"
- id="filter11735">
- <feGaussianBlur
- stdDeviation="0.22248641"
- id="feGaussianBlur11737" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter11711">
- <feGaussianBlur
- stdDeviation="0.40047554"
- id="feGaussianBlur11713" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3837">
- <feGaussianBlur
- stdDeviation="0.4021875"
- id="feGaussianBlur3839" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3809">
- <feGaussianBlur
- stdDeviation="0.30164062"
- id="feGaussianBlur3811" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3776">
- <feGaussianBlur
- stdDeviation="0.28441406"
- id="feGaussianBlur3778" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3772">
- <feGaussianBlur
- stdDeviation="0.380625"
- id="feGaussianBlur3774" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-3">
- <feGaussianBlur
- id="feGaussianBlur5058-1"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-5"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-0"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-6" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3886">
- <feGaussianBlur
- stdDeviation="0.3665625"
- id="feGaussianBlur3888" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3882">
- <feGaussianBlur
- stdDeviation="0.27492187"
- id="feGaussianBlur3884" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-4">
- <feGaussianBlur
- id="feGaussianBlur5058-8"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-7"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-5"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-4" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3912">
- <feGaussianBlur
- stdDeviation="0.28933594"
- id="feGaussianBlur3914" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3908">
- <feGaussianBlur
- stdDeviation="0.35953125"
- id="feGaussianBlur3910" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-6">
- <feGaussianBlur
- id="feGaussianBlur5058-6"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-6"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-3"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-40" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3973">
- <feGaussianBlur
- stdDeviation="0.41109375"
- id="feGaussianBlur3975" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3953">
- <feGaussianBlur
- stdDeviation="0.30832031"
- id="feGaussianBlur3955" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-0">
- <feGaussianBlur
- id="feGaussianBlur5058-4"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-67"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-1"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-1" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4022">
- <feGaussianBlur
- stdDeviation="0.36515625"
- id="feGaussianBlur4024" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4018">
- <feGaussianBlur
- stdDeviation="0.27"
- id="feGaussianBlur4020" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-7">
- <feGaussianBlur
- id="feGaussianBlur5058-7"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-9"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-02"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-2" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4067">
- <feGaussianBlur
- stdDeviation="0.40265625"
- id="feGaussianBlur4069" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4063">
- <feGaussianBlur
- stdDeviation="0.30199219"
- id="feGaussianBlur4065" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-30">
- <feGaussianBlur
- id="feGaussianBlur5058-85"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-64"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-58"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-7" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3837-2">
- <feGaussianBlur
- stdDeviation="0.4021875"
- id="feGaussianBlur3839-1" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter3809-1">
- <feGaussianBlur
- stdDeviation="0.30164062"
- id="feGaussianBlur3811-8" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-62">
- <feGaussianBlur
- id="feGaussianBlur5058-9"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-8"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-54"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-42" />
- </filter>
- <linearGradient
- x1="1.1049798"
- y1="13.152683"
- x2="6.6379666"
- y2="10.024924"
- id="linearGradient3986"
- xlink:href="#linearGradient3980"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3195"
- xlink:href="#linearGradient9497"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.74596729,0,0,0.94314201,-405.98488,-465.30597)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3192"
- xlink:href="#linearGradient9497-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3202618,0,0,0.84666939,-733.334,-423.58754)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3189"
- xlink:href="#linearGradient9497-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3098397,0,0,0.848111,-727.30273,-410.25386)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-2"
- xlink:href="#linearGradient9497-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
- <linearGradient
- id="linearGradient9497-6">
- <stop
- id="stop9499-0"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-1"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-3"
- xlink:href="#linearGradient9497-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520"
- xlink:href="#linearGradient9497-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
- <linearGradient
- id="linearGradient9497-1">
- <stop
- id="stop9499-6"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-7"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-1"
- xlink:href="#linearGradient9497-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503"
- xlink:href="#linearGradient9497"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497">
- <stop
- id="stop9499"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3980">
- <stop
- id="stop3982"
- style="stop-color:#fcc273;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3984"
- style="stop-color:#fc916b;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4112">
- <feGaussianBlur
- stdDeviation="0.3909375"
- id="feGaussianBlur4114" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4108">
- <feGaussianBlur
- stdDeviation="0.29320256"
- id="feGaussianBlur4110" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-68">
- <feGaussianBlur
- id="feGaussianBlur5058-67"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-1"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-6"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-24" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4184">
- <feGaussianBlur
- stdDeviation="0.35995908"
- id="feGaussianBlur4186" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4180">
- <feGaussianBlur
- stdDeviation="0.28407221"
- id="feGaussianBlur4182" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-1">
- <feGaussianBlur
- id="feGaussianBlur5058-64"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-0"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-8"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-74" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5879">
- <feGaussianBlur
- stdDeviation="0.30769604"
- id="feGaussianBlur5881" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5867">
- <feGaussianBlur
- stdDeviation="0.23529697"
- id="feGaussianBlur5869" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4229">
- <feGaussianBlur
- stdDeviation="0.4059375"
- id="feGaussianBlur4231" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4225">
- <feGaussianBlur
- stdDeviation="0.30445256"
- id="feGaussianBlur4227" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-44">
- <feGaussianBlur
- id="feGaussianBlur5058-76"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-85"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-52"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-22" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4112-0">
- <feGaussianBlur
- stdDeviation="0.3909375"
- id="feGaussianBlur4114-3" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter4108-5">
- <feGaussianBlur
- stdDeviation="0.29320256"
- id="feGaussianBlur4110-7" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter5056-38">
- <feGaussianBlur
- id="feGaussianBlur5058-47"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060-4"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062-7"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="1"
- k2="0"
- k3="0.6"
- k4="0"
- in="result5"
- result="result4"
- id="feComposite5064-420" />
- </filter>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-2-9"
- xlink:href="#linearGradient9497-6-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
- <linearGradient
- id="linearGradient9497-6-5">
- <stop
- id="stop9499-0-5"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-1-1"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-3-6"
- xlink:href="#linearGradient9497-6-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-6"
- xlink:href="#linearGradient9497-1-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
- <linearGradient
- id="linearGradient9497-1-0">
- <stop
- id="stop9499-6-9"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-7-9"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-1-8"
- xlink:href="#linearGradient9497-1-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-34"
- xlink:href="#linearGradient9497-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-9">
- <stop
- id="stop9499-3"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-8"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <filter
- color-interpolation-filters="sRGB"
- id="filter11735-4">
- <feGaussianBlur
- stdDeviation="0.22248641"
- id="feGaussianBlur11737-9" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter11711-5">
- <feGaussianBlur
- stdDeviation="0.40047554"
- id="feGaussianBlur11713-9" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter11735-7">
- <feGaussianBlur
- stdDeviation="0.22248641"
- id="feGaussianBlur11737-4" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter11711-8">
- <feGaussianBlur
- stdDeviation="0.40047554"
- id="feGaussianBlur11713-1" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter11735-9">
- <feGaussianBlur
- stdDeviation="0.22248641"
- id="feGaussianBlur11737-48" />
- </filter>
- <filter
- color-interpolation-filters="sRGB"
- id="filter11711-3">
- <feGaussianBlur
- stdDeviation="0.40047554"
- id="feGaussianBlur11713-7" />
- </filter>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3195-7"
- xlink:href="#linearGradient9497-18"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13325,-446.76257)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3192-9"
- xlink:href="#linearGradient9497-1-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13136,-453.81692)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3189-5"
- xlink:href="#linearGradient9497-6-2"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.04207,-439.75442)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-2-6"
- xlink:href="#linearGradient9497-6-2"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
- <linearGradient
- id="linearGradient9497-6-2">
- <stop
- id="stop9499-0-0"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-1-0"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-3-2"
- xlink:href="#linearGradient9497-6-2"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-8"
- xlink:href="#linearGradient9497-1-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
- <linearGradient
- id="linearGradient9497-1-4">
- <stop
- id="stop9499-6-5"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-7-95"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-1-5"
- xlink:href="#linearGradient9497-1-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-8"
- xlink:href="#linearGradient9497-18"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-18">
- <stop
- id="stop9499-1"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-5"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="805.19128"
- y1="693.05548"
- x2="805.19128"
- y2="702.22186"
- id="linearGradient9194"
- xlink:href="#linearGradient9090"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-22.749292,0.238835)" />
- <radialGradient
- cx="30.513159"
- cy="16.796043"
- r="3.140625"
- fx="30.513159"
- fy="16.796043"
- id="radialGradient9190"
- xlink:href="#linearGradient9124"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5528787,-1.1867658e-7,7.6106348e-8,0.99584878,732.27147,685.88005)" />
- <radialGradient
- cx="31.993927"
- cy="9.0202503"
- r="6.8660588"
- fx="31.993927"
- fy="9.0202503"
- id="radialGradient9185"
- xlink:href="#linearGradient9100"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5459471,-0.89508966,0.42455384,0.72967733,727.79019,718.64005)" />
- <radialGradient
- cx="31.993927"
- cy="9.0202503"
- r="6.8660588"
- fx="31.993927"
- fy="9.0202503"
- id="radialGradient9163"
- xlink:href="#linearGradient9100"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5459471,-0.89508966,0.42455384,0.72967733,750.53948,718.40122)" />
- <radialGradient
- cx="30.513159"
- cy="16.796043"
- r="3.140625"
- fx="30.513159"
- fy="16.796043"
- id="radialGradient9161"
- xlink:href="#linearGradient9124"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5528787,-1.1867658e-7,7.6106348e-8,0.99584878,755.02076,685.64122)" />
- <linearGradient
- x1="805.19128"
- y1="693.05548"
- x2="805.19128"
- y2="702.22186"
- id="linearGradient9159"
- xlink:href="#linearGradient9090"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient9090">
- <stop
- id="stop9092"
- style="stop-color:#766649;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9094"
- style="stop-color:#e6a540;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient9100">
- <stop
- id="stop9102"
- style="stop-color:#f4f5f4;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9104"
- style="stop-color:#f4f5f4;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient9124">
- <stop
- id="stop9126"
- style="stop-color:#ffedbc;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9128"
- style="stop-color:#f7eca1;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <filter
- color-interpolation-filters="sRGB"
- id="filter9873">
- <feGaussianBlur
- stdDeviation="0.12340545"
- id="feGaussianBlur9875" />
- </filter>
- <linearGradient
- x1="7.7878532"
- y1="12.734541"
- x2="17.905109"
- y2="8.1800375"
- id="linearGradient9784"
- xlink:href="#linearGradient9778"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1631645,0,0,1.3512007,858.27422,629.02856)" />
- <radialGradient
- cx="8.1702919"
- cy="6.458025"
- r="5.4584503"
- fx="8.1702919"
- fy="6.458025"
- id="radialGradient9772"
- xlink:href="#linearGradient9760"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1.0337084,0.97885003,-0.83095482,-1.1642322,881.6209,640.19021)" />
- <linearGradient
- id="linearGradient9760">
- <stop
- id="stop9762"
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9764"
- style="stop-color:#ffffff;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient9778">
- <stop
- id="stop9780"
- style="stop-color:#f0a829;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9782"
- style="stop-color:#f0ad3e;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <mask
- id="mask3773">
- <rect
- width="13.657221"
- height="13.439366"
- x="847.49951"
- y="705.51801"
- id="rect3775"
- style="fill:url(#linearGradient3777);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- </mask>
- <linearGradient
- x1="843.28571"
- y1="721.07123"
- x2="865.29926"
- y2="721.07123"
- id="linearGradient3777"
- xlink:href="#linearGradient3759"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62040131,0,0,3.4971952,324.32395,-1809.4892)"
- spreadMethod="pad" />
- <linearGradient
- x1="843.28571"
- y1="721.07123"
- x2="865.29926"
- y2="721.07123"
- id="linearGradient3765"
- xlink:href="#linearGradient3759"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,5.6369887,0,-3352.5089)"
- spreadMethod="pad" />
- <linearGradient
- id="linearGradient8229">
- <stop
- id="stop8231"
- style="stop-color:#ececec;stop-opacity:1"
- offset="0" />
- <stop
- id="stop8233"
- style="stop-color:#9da09f;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3759">
- <stop
- id="stop3761"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3767"
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0.25" />
- <stop
- id="stop3769"
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0.75" />
- <stop
- id="stop3763"
- style="stop-color:#000000;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient8229-5">
- <stop
- id="stop8231-2"
- style="stop-color:#ececec;stop-opacity:1"
- offset="0" />
- <stop
- id="stop8233-6"
- style="stop-color:#9da09f;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <filter
- x="-0.13307104"
- y="-0.085893638"
- width="1.2661421"
- height="1.1717873"
- color-interpolation-filters="sRGB"
- id="filter10491">
- <feGaussianBlur
- stdDeviation="0.58045312"
- id="feGaussianBlur10493" />
- </filter>
- <filter
- x="-0.083735459"
- y="-0.13860559"
- width="1.1674709"
- height="1.2772112"
- color-interpolation-filters="sRGB"
- id="filter10487">
- <feGaussianBlur
- stdDeviation="0.58113281"
- id="feGaussianBlur10489" />
- </filter>
- <radialGradient
- cx="921.40735"
- cy="698.09576"
- r="3.38059"
- fx="921.40735"
- fy="698.09576"
- id="radialGradient3875"
- xlink:href="#linearGradient3844"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.32194816,0.22927541,-0.63390316,0.81005546,1060.6407,-75.559535)" />
- <linearGradient
- x1="910.96173"
- y1="694.78741"
- x2="921.80005"
- y2="696.93402"
- id="linearGradient3873"
- xlink:href="#linearGradient8680"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-26.508294,6.8837482)" />
- <radialGradient
- cx="921.40735"
- cy="698.09576"
- r="3.38059"
- fx="921.40735"
- fy="698.09576"
- id="radialGradient3865"
- xlink:href="#linearGradient3844"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.32194816,0.22927541,-0.63390316,0.81005546,1060.6407,-75.559535)" />
- <radialGradient
- cx="921.40735"
- cy="698.09576"
- r="3.38059"
- fx="921.40735"
- fy="698.09576"
- id="radialGradient3861"
- xlink:href="#linearGradient3844"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.37329045,0.12989255,-0.3815617,0.95521397,839.37118,-91.004306)" />
- <linearGradient
- x1="910.96173"
- y1="694.78741"
- x2="921.80005"
- y2="696.93402"
- id="linearGradient3859"
- xlink:href="#linearGradient8680"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-26.508294,6.8837482)" />
- <radialGradient
- cx="921.40735"
- cy="698.09576"
- r="3.38059"
- fx="921.40735"
- fy="698.09576"
- id="radialGradient3850"
- xlink:href="#linearGradient3844"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.37329045,0.12989255,-0.3815617,0.95521397,839.37118,-91.004306)" />
- <mask
- id="mask3836">
- <rect
- width="21.294643"
- height="21.741072"
- x="874.80103"
- y="689.3111"
- id="rect3838"
- style="fill:url(#linearGradient3840);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- </mask>
- <linearGradient
- x1="914.08923"
- y1="691.73273"
- x2="914.625"
- y2="689.00946"
- id="linearGradient3840"
- xlink:href="#linearGradient3780"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-19.422226,4.7882523)" />
- <linearGradient
- x1="910.96173"
- y1="694.78741"
- x2="921.80005"
- y2="696.93402"
- id="linearGradient8809"
- xlink:href="#linearGradient8680"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-26.508294,6.8837482)" />
- <linearGradient
- x1="12.19534"
- y1="11.109293"
- x2="20.350513"
- y2="12.52982"
- id="linearGradient8686"
- xlink:href="#linearGradient8680"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- x1="16.330652"
- y1="8.7101812"
- x2="17.635729"
- y2="1.9547856"
- id="linearGradient8670"
- xlink:href="#linearGradient8662"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient7212">
- <stop
- id="stop7214"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop7216"
- style="stop-color:#000000;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient8656">
- <stop
- id="stop8658"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- </linearGradient>
- <linearGradient
- id="linearGradient8662">
- <stop
- id="stop8664"
- style="stop-color:#000000;stop-opacity:1"
- offset="0" />
- <stop
- id="stop8666"
- style="stop-color:#000000;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient8680">
- <stop
- id="stop8682"
- style="stop-color:#2e366a;stop-opacity:0.99215686"
- offset="0" />
- <stop
- id="stop8688"
- style="stop-color:#3c91de;stop-opacity:1"
- offset="0.4154374" />
- <stop
- id="stop8684"
- style="stop-color:#2e366a;stop-opacity:0.99358976"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3780">
- <stop
- id="stop3782"
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3784"
- style="stop-color:#000000;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3844">
- <stop
- id="stop3846"
- style="stop-color:#ececec;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3848"
- style="stop-color:#cecece;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="1.9835248"
- y1="1.7316169"
- x2="-3.7763"
- y2="15.516348"
- id="linearGradient7130"
- xlink:href="#linearGradient7004"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- x1="1.9835248"
- y1="1.7316169"
- x2="-3.7763"
- y2="15.516348"
- id="linearGradient7010"
- xlink:href="#linearGradient7004"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient7004">
- <stop
- id="stop7006"
- style="stop-color:#8ea8c5;stop-opacity:1"
- offset="0" />
- <stop
- id="stop7008"
- style="stop-color:#365f96;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="896.22729"
- y1="642.37769"
- x2="884.73309"
- y2="650.4939"
- id="linearGradient4379"
- xlink:href="#linearGradient4373"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.97557742,0,0,0.97557742,-0.43357327,15.714485)" />
- <linearGradient
- id="linearGradient4373">
- <stop
- id="stop4375"
- style="stop-color:#a1a0a0;stop-opacity:1"
- offset="0" />
- <stop
- id="stop4377"
- style="stop-color:#616363;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="880.47321"
- y1="718.15826"
- x2="880.47321"
- y2="738.3028"
- id="linearGradient6454"
- xlink:href="#linearGradient6439"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-46,0)" />
- <linearGradient
- x1="880.47321"
- y1="718.15826"
- x2="880.47321"
- y2="738.3028"
- id="linearGradient6445"
- xlink:href="#linearGradient6439"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-46,0)" />
- <linearGradient
- id="linearGradient6439">
- <stop
- id="stop6441"
- style="stop-color:#e5e7e2;stop-opacity:1"
- offset="0" />
- <stop
- id="stop6443"
- style="stop-color:#e5e7e2;stop-opacity:0"
- offset="1" />
- </linearGradient>
- <radialGradient
- cx="6.7155318"
- cy="4.395853"
- r="5.4276505"
- fx="6.7155318"
- fy="4.395853"
- id="radialGradient11146"
- xlink:href="#linearGradient11111"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- x1="814.55927"
- y1="726.61975"
- x2="813.53076"
- y2="725.49475"
- id="linearGradient11144"
- xlink:href="#linearGradient11103"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(55.60781,8.9693543)" />
- <linearGradient
- x1="819.42767"
- y1="729.21069"
- x2="818.52716"
- y2="728.31018"
- id="linearGradient11142"
- xlink:href="#linearGradient11077"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(66.373514,4.6113592)" />
- <radialGradient
- cx="6.7155318"
- cy="4.395853"
- r="5.4276505"
- fx="6.7155318"
- fy="4.395853"
- id="radialGradient11119"
- xlink:href="#linearGradient11111"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- x1="814.55927"
- y1="726.61975"
- x2="813.53076"
- y2="725.49475"
- id="linearGradient11109"
- xlink:href="#linearGradient11103"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(55.60781,8.9693543)" />
- <linearGradient
- x1="819.42767"
- y1="729.21069"
- x2="818.52716"
- y2="728.31018"
- id="linearGradient11095"
- xlink:href="#linearGradient11077"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(66.373514,4.6113592)" />
- <linearGradient
- id="linearGradient11077">
- <stop
- id="stop11079"
- style="stop-color:#a48757;stop-opacity:1"
- offset="0" />
- <stop
- id="stop11081"
- style="stop-color:#eeeac6;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient11103">
- <stop
- id="stop11105"
- style="stop-color:#b8b8b7;stop-opacity:1"
- offset="0" />
- <stop
- id="stop11107"
- style="stop-color:#a3a4a3;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient11111">
- <stop
- id="stop11113"
- style="stop-color:#e6edf5;stop-opacity:1"
- offset="0" />
- <stop
- id="stop11115"
- style="stop-color:#7da2cc;stop-opacity:0.58333331"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3195-9"
- xlink:href="#linearGradient9497-2"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13325,-446.76257)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3192-4"
- xlink:href="#linearGradient9497-1-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13136,-453.81692)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3189-4"
- xlink:href="#linearGradient9497-6-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.04207,-439.75442)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-2-2"
- xlink:href="#linearGradient9497-6-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
- <linearGradient
- id="linearGradient9497-6-9">
- <stop
- id="stop9499-0-7"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-1-4"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-3-0"
- xlink:href="#linearGradient9497-6-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-5"
- xlink:href="#linearGradient9497-1-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
- <linearGradient
- id="linearGradient9497-1-9">
- <stop
- id="stop9499-6-1"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-7-7"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-1-53"
- xlink:href="#linearGradient9497-1-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-0"
- xlink:href="#linearGradient9497-2"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-2">
- <stop
- id="stop9499-9"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-6"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-2-7"
- xlink:href="#linearGradient9497-6-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
- <linearGradient
- id="linearGradient9497-6-0">
- <stop
- id="stop9499-0-9"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-1-9"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-3-8"
- xlink:href="#linearGradient9497-6-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-29"
- xlink:href="#linearGradient9497-1-95"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
- <linearGradient
- id="linearGradient9497-1-95">
- <stop
- id="stop9499-6-16"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-7-0"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-1-1"
- xlink:href="#linearGradient9497-1-95"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-07"
- xlink:href="#linearGradient9497-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-5">
- <stop
- id="stop9499-2"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-67"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient4291"
- xlink:href="#linearGradient9497-6-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.08618,-82.674677)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient4294"
- xlink:href="#linearGradient9497-1-95"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.17547,-96.737178)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient4297"
- xlink:href="#linearGradient9497-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.17736,-89.68283)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient4316"
- xlink:href="#linearGradient9497-5"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.17736,-89.68283)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient4318"
- xlink:href="#linearGradient9497-1-95"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.17547,-96.737178)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient4320"
- xlink:href="#linearGradient9497-6-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-646.08618,-82.674677)" />
- <linearGradient
- x1="1.1049798"
- y1="13.152683"
- x2="6.6379666"
- y2="10.024924"
- id="linearGradient3986-8"
- xlink:href="#linearGradient3980-1"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3195-1"
- xlink:href="#linearGradient9497-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.74596729,0,0,0.94314201,-405.98488,-465.30597)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3192-43"
- xlink:href="#linearGradient9497-1-47"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3202618,0,0,0.84666939,-733.334,-423.58754)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient3189-2"
- xlink:href="#linearGradient9497-6-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3098397,0,0,0.848111,-727.30273,-410.25386)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-2-74"
- xlink:href="#linearGradient9497-6-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
- <linearGradient
- id="linearGradient9497-6-1">
- <stop
- id="stop9499-0-6"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-1-2"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-3-67"
- xlink:href="#linearGradient9497-6-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-57"
- xlink:href="#linearGradient9497-1-47"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
- <linearGradient
- id="linearGradient9497-1-47">
- <stop
- id="stop9499-6-14"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-7-71"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-1-2"
- xlink:href="#linearGradient9497-1-47"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-35"
- xlink:href="#linearGradient9497-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-0">
- <stop
- id="stop9499-26"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-13"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3980-1">
- <stop
- id="stop3982-0"
- style="stop-color:#fcc273;stop-opacity:1"
- offset="0" />
- <stop
- id="stop3984-7"
- style="stop-color:#fc916b;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="880.47321"
- y1="718.15826"
- x2="880.47321"
- y2="738.3028"
- id="linearGradient6454-9"
- xlink:href="#linearGradient6439-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-46,0)" />
- <linearGradient
- x1="880.47321"
- y1="718.15826"
- x2="880.47321"
- y2="738.3028"
- id="linearGradient6445-1"
- xlink:href="#linearGradient6439-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-46,0)" />
- <linearGradient
- id="linearGradient6439-6">
- <stop
- id="stop6441-4"
- style="stop-color:#e5e7e2;stop-opacity:1"
- offset="0" />
- <stop
- id="stop6443-0"
- style="stop-color:#e5e7e2;stop-opacity:0"
- offset="1" />
- </linearGradient>
- </defs>
- <metadata
- id="metadata3757">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-823.6913,-707.53376)"
- id="layer1-5">
- <text
- x="835.85748"
- y="718.30353"
- id="text11171"
- xml:space="preserve"
- style="font-size:10.12465572px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.70751727;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="835.85748"
- y="718.30353"
- id="tspan11173"
- style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.70751727;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">+</tspan></text>
- <text
- x="825.39417"
- y="725.07898"
- id="text11693"
- xml:space="preserve"
- style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="825.39417"
- y="725.07898"
- id="tspan11695"
- style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif">A</tspan></text>
- <path
- d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
- id="text11167"
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
- id="text11683"
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.69182392;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-523.14178,-440.08317)"
- id="layer1-6">
- <text
- x="566.91028"
- y="492.98608"
- transform="scale(0.93034878,1.0748657)"
- id="text5195"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="566.91028"
- y="492.98608"
- id="tspan5197"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">A</tspan></text>
- <path
- d="m 532.75446,516.10773 -4.46875,12.65625 -1,0 0,1.125 0.5,0 0,-0.625 1,0 4.46875,-12.65625 1.625,0 -0.1875,-0.5 -1.9375,0 z m 0.4375,3.96875 -0.15625,0.46875 1.46875,4.28125 -3,0 -0.1875,0.5 3.6875,0 -1.8125,-5.25 z m 1.90625,6.375 0.8125,2.3125 -1.1875,0 0,1.125 0.5,0 0,-0.625 1.1875,0 -1,-2.8125 -0.3125,0 z m -5,2.3125 -0.1875,0.5 0.9375,0 0,-0.5 -0.75,0 z m 9.40625,0 0.1875,0.5 0.625,0 0,-0.5 -0.8125,0 z"
- id="text3023"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3809);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 534.37946,516.10773 4.3125,12.15625 0.3125,0 -4.3125,-12.15625 -0.3125,0 z m -2.1875,2.9375 -1.875,5.28125 0.6875,0 1.53125,-4.28125 -0.34375,-1 z m -2.28125,6.40625 -1,2.8125 0.6875,0 0.8125,-2.3125 4.1875,0 -0.1875,-0.5 -4.5,0 z m 0.4375,3.3125 0,0.625 -3.0625,0 0,0.5 3.5625,0 0,-1.125 -0.5,0 z m 9.46875,0 0,0.625 -5.09375,0 0,0.5 5.59375,0 0,-1.125 -0.5,0 z"
- id="text3027"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3837);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-523.22136,-367.94934)"
- id="layer1-3">
- <text
- x="566.91028"
- y="492.98608"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-8"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="566.91028"
- y="492.98608"
- id="tspan5197-4"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">B</tspan></text>
- <path
- d="m 528.19196,516.7064 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.09375,0 0,4.65625 0.5,0 0,-4.15625 1.0625,0 c 0.82594,10e-6 1.44511,0.15919 1.875,0.4375 -0.0892,-0.14324 -0.18651,-0.26897 -0.3125,-0.375 -0.42665,-0.36351 -1.11857,-0.56249 -2.0625,-0.5625 l -1.0625,0 z m 6.28125,0.25 c 0.39409,0.52808 0.59374,1.22535 0.59375,2.0625 -10e-6,0.81947 -0.27463,1.45692 -0.78125,1.9375 -0.50131,0.48059 -1.22683,0.78303 -2.21875,0.90625 0.52107,0.0562 0.95953,0.16568 1.375,0.3125 0.55687,-0.16157 1.00754,-0.39644 1.34375,-0.71875 0.50662,-0.48058 0.78124,-1.11803 0.78125,-1.9375 -10e-6,-1.13984 -0.36315,-1.99564 -1.09375,-2.5625 z m -6.28125,5.5 0,5.8125 0.5,0 0,-5.3125 1.15625,0 c 0.83936,10e-6 1.48442,0.1937 1.96875,0.53125 -0.0691,-0.0954 -0.13581,-0.19985 -0.21875,-0.28125 -0.49597,-0.48674 -1.24208,-0.74999 -2.25,-0.75 l -1.15625,0 z m 6.90625,0.84375 c 0.44148,0.56299 0.68749,1.25448 0.6875,2.09375 -10e-6,1.36783 -0.44782,2.38431 -1.34375,3.03125 -0.89062,0.64694 -2.31489,0.96875 -4.21875,0.96875 l -6.125,0 0,0.5 6.625,0 c 1.90386,0 3.32813,-0.32181 4.21875,-0.96875 0.89593,-0.64694 1.34374,-1.66342 1.34375,-3.03125 -10e-6,-1.01046 -0.32881,-1.79627 -0.96875,-2.40625 -0.067,-0.0638 -0.14565,-0.12894 -0.21875,-0.1875 z"
- id="text5199"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3772);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 528.19654,516.11548 0,1.09375 0.5,0 0,-0.59375 7.09375,0 c 1.43448,10e-6 2.51961,0.26222 3.25,0.8125 -0.13699,-0.17753 -0.2861,-0.32704 -0.46875,-0.46875 -0.73063,-0.56683 -1.82536,-0.84374 -3.28125,-0.84375 l -7.09375,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 6.5,0.4375 c 0.21673,0.34787 0.34374,0.80765 0.34375,1.375 -10e-6,0.79483 -0.24487,1.36184 -0.6875,1.75 -0.44264,0.38201 -1.11399,0.59376 -2.03125,0.59375 l -0.5625,0 0,0.5 1.0625,0 c 0.91726,10e-6 1.58861,-0.21174 2.03125,-0.59375 0.44263,-0.38816 0.68749,-0.95517 0.6875,-1.75 -10e-6,-0.80097 -0.22429,-1.38647 -0.65625,-1.75 -0.0533,-0.0454 -0.12609,-0.0852 -0.1875,-0.125 z m 1.8125,4.53125 c -0.27347,0.0794 -0.54832,0.14692 -0.875,0.1875 1.07435,0.11586 1.90579,0.43638 2.53125,0.9375 -0.0901,-0.11484 -0.17283,-0.20916 -0.28125,-0.3125 -0.36206,-0.34509 -0.83372,-0.62123 -1.375,-0.8125 z m -1.625,1.3125 c 0.34394,0.47485 0.53124,1.0853 0.53125,1.90625 -10e-6,0.97966 -0.22813,1.71924 -0.71875,2.1875 -0.49064,0.46826 -1.26266,0.6875 -2.28125,0.6875 l -0.65625,0 0,0.5 1.15625,0 c 1.01859,0 1.79061,-0.21924 2.28125,-0.6875 0.49062,-0.46826 0.71874,-1.20784 0.71875,-2.1875 -10e-6,-0.98581 -0.25404,-1.70075 -0.75,-2.1875 -0.0829,-0.0814 -0.18398,-0.15096 -0.28125,-0.21875 z"
- id="text5217"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3776);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-522.92799,-296.1791)"
- id="layer1-7">
- <text
- x="566.91028"
- y="492.98608"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-7"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="566.91028"
- y="492.98608"
- id="tspan5197-0"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">F</tspan></text>
- <path
- d="m 538.34821,516.10773 0,2.75 -0.59375,0 0,0.5 1.09375,0 0,-3.25 -0.5,0 z m -10.15625,0.59375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.125,0.15625 0,4.4375 0.5,0 0,-3.9375 4.4375,0 0,-0.5 -4.9375,0 z m 4.125,3.1875 0,4.25 -0.59375,0 0,0.5 1.09375,0 0,-4.75 -0.5,0 z m -4.125,2.5 0,5.71875 0.5,0 0,-5.21875 2.53125,0 0,-0.5 -3.03125,0 z m 1.875,6.21875 0,0.625 -6,0 0,0.5 6.5,0 0,-1.125 -0.5,0 z"
- id="text3860"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3886);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 528.19196,516.10773 0,1.09375 0.5,0 0,-0.59375 10.15625,0 0,-0.5 -10.65625,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 8.03125,0.15625 0,1.5 0.5,0 0,-1.5 -0.5,0 z m -1.90625,2.1875 0,1.75 -2.53125,0 0,0.5 3.03125,0 0,-1.75 0.59375,0 0,-0.5 -1.09375,0 z m 0,3.5 0,1.25 0.5,0 0,-1.25 -0.5,0 z m -2.53125,5.21875 0,0.5 1.375,0 0,-0.5 -1.375,0 z"
- id="text3864"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3882);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-524.21316,-223.95587)"
- id="layer1-8">
- <text
- x="566.91028"
- y="492.98608"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-6"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="566.91028"
- y="492.98608"
- id="tspan5197-06"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">G</tspan></text>
- <path
- d="m 534.62946,516.45148 c -1.23726,1e-5 -2.13746,0.49527 -2.71875,1.46875 -0.57597,0.96735 -0.875,2.50505 -0.875,4.59375 0,2.07022 0.28912,3.58285 0.84375,4.5625 0.20798,0.36506 0.45502,0.67809 0.75,0.90625 -0.0944,-0.12162 -0.16884,-0.26379 -0.25,-0.40625 -0.55463,-0.97965 -0.84375,-2.49228 -0.84375,-4.5625 0,-2.0887 0.29903,-3.6264 0.875,-4.59375 0.58129,-0.97348 1.48149,-1.46874 2.71875,-1.46875 0.86746,1e-5 1.55891,0.2273 2.09375,0.625 -0.076,-0.0954 -0.13567,-0.2008 -0.21875,-0.28125 -0.55997,-0.54835 -1.35641,-0.84374 -2.375,-0.84375 z m 4.59375,0.375 0,3.09375 -0.65625,0 c 0.0425,0.16552 0.0895,0.31967 0.125,0.5 l 1.03125,0 0,-3.375 c -0.16821,-0.0805 -0.33222,-0.1465 -0.5,-0.21875 z m 0.40625,6.625 0,4.78125 c -0.89595,0.48059 -1.79157,0.82837 -2.6875,1.0625 -0.89062,0.23413 -1.81674,0.375 -2.75,0.375 -1.75604,0 -3.19957,-0.46844 -4.3125,-1.40625 1.17325,1.2754 2.76464,1.90625 4.8125,1.90625 0.93326,0 1.85938,-0.14087 2.75,-0.375 0.89593,-0.23413 1.79155,-0.58191 2.6875,-1.0625 l 0,-5.28125 -0.5,0 z m -3.8125,0.59375 0,0.5 0.9375,0 0,-0.5 -0.9375,0 z"
- id="text3890"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3908);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 534.69196,515.85773 c -2.04786,1e-5 -3.63925,0.63086 -4.8125,1.90625 -1.16792,1.27541 -1.78125,3.02575 -1.78125,5.25 0,2.2181 0.61333,3.9746 1.78125,5.25 0.12571,0.13665 0.23925,0.25299 0.375,0.375 -1.1007,-1.26488 -1.65625,-2.97168 -1.65625,-5.125 0,-2.22425 0.58208,-3.97459 1.75,-5.25 1.17325,-1.27539 2.79589,-1.90624 4.84375,-1.90625 0.85327,1e-5 1.70463,0.0841 2.53125,0.28125 0.66053,0.15756 1.33264,0.40012 2,0.6875 l 0,-0.28125 c -0.83729,-0.40048 -1.6734,-0.70907 -2.5,-0.90625 -0.82662,-0.19715 -1.67798,-0.28124 -2.53125,-0.28125 z m 3.03125,2.21875 c 0.43644,0.5474 0.76436,1.30482 0.96875,2.34375 l 0.375,0 c -0.24482,-0.95424 -0.58532,-1.66293 -1.0625,-2.125 -0.0831,-0.0814 -0.18807,-0.14946 -0.28125,-0.21875 z m -1.90625,5.375 0,1.09375 0.5,0 0,-0.59375 3.8125,0 0,-0.5 -4.3125,0 z m 1.4375,1.59375 0,3.28125 c -0.31466,0.23413 -0.67854,0.41418 -1.0625,0.53125 -0.38398,0.11707 -0.77079,0.1875 -1.21875,0.1875 -0.71603,0 -1.32688,-0.16866 -1.8125,-0.53125 0.54902,0.6868 1.32703,1.03125 2.3125,1.03125 0.44796,0 0.83477,-0.0704 1.21875,-0.1875 0.38396,-0.11707 0.74784,-0.29712 1.0625,-0.53125 l 0,-3.78125 -0.5,0 z"
- id="text3894"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3912);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-523.54028,-152.07265)"
- id="layer1-9">
- <text
- x="566.91028"
- y="492.98608"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-9"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="566.91028"
- y="492.98608"
- id="tspan5197-1"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">N</tspan></text>
- <path
- d="m 531.75446,516.10773 6.84375,9.25 0,-0.1875 -6.71875,-9.0625 -0.125,0 z m 9.5,0 0,0.59375 -1.53125,0 0,12.6875 -1.96875,0 0.375,0.5 2.09375,0 0,-12.6875 1.53125,0 0,-1.09375 -0.5,0 z m -13.125,0.59375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 9.4375,0 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m -7.28125,2.71875 0,8.84375 0.5,0 0,-8.15625 -0.5,-0.6875 z m 1.53125,9.34375 0,0.625 -3.6875,0 0,0.5 4.1875,0 0,-1.125 -0.5,0 z"
- id="text3939"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3973);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 528.12946,516.10773 0,1.09375 0.5,0 0,-0.59375 3.625,0 -0.375,-0.5 -3.75,0 z m 9.4375,0 0,1.09375 0.5,0 0,-0.59375 3.6875,0 0,-0.5 -4.1875,0 z m -7.90625,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 9.4375,0 0,7.96875 0.5,0.6875 0,-8.65625 -0.5,0 z m -7.8125,2.71875 0,0.1875 6.84375,9.28125 0.125,0 -6.96875,-9.46875 z m 0,8.34375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z"
- id="text3935"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3953);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-523.04306,-80.268534)"
- id="layer1-54">
- <text
- x="566.91028"
- y="492.98608"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-70"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="566.91028"
- y="492.98608"
- id="tspan5197-2"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">P</tspan></text>
- <path
- d="m 528.19196,516.70148 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.09375,0 0,5.875 0.5,0 0,-5.375 0.90625,0 c 0.46699,1e-5 0.88043,0.13824 1.21875,0.375 -0.0173,-0.0237 -0.0444,-0.0395 -0.0625,-0.0625 -0.41065,-0.52987 -0.95764,-0.81249 -1.65625,-0.8125 l -0.90625,0 z m 5.625,0.3125 c 0.59493,0.68939 0.93749,1.55688 0.9375,2.625 -10e-6,1.23228 -0.39823,2.19814 -1.1875,2.9375 -0.78396,0.73321 -1.83368,1.09376 -3.15625,1.09375 l -2.21875,0 0,4.59375 0.5,0 0,-4.09375 2.21875,0 c 1.32257,1e-5 2.37229,-0.36054 3.15625,-1.09375 0.78927,-0.73936 1.18749,-1.70522 1.1875,-2.9375 -10e-6,-1.2261 -0.40356,-2.21045 -1.1875,-2.9375 -0.0765,-0.0715 -0.16834,-0.12295 -0.25,-0.1875 z m -3.6875,11.75 0,0.625 -6.03125,0 0,0.5 6.53125,0 0,-1.125 -0.5,0 z"
- id="text4000"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4022);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 528.19196,516.10773 0,1.09375 0.5,0 0,-0.59375 6.8125,0 c 1.19835,1e-5 2.15089,0.30914 2.90625,0.90625 -0.088,-0.10197 -0.14899,-0.21882 -0.25,-0.3125 -0.78396,-0.73319 -1.82835,-1.09374 -3.15625,-1.09375 l -6.8125,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 5.6875,0.375 c 0.37529,0.51597 0.56249,1.21431 0.5625,2.0625 -10e-6,0.89341 -0.20904,1.58897 -0.625,2.125 -0.41065,0.52988 -0.96297,0.81251 -1.65625,0.8125 l -0.40625,0 0,0.5 0.90625,0 c 0.69328,1e-5 1.2456,-0.28262 1.65625,-0.8125 0.41596,-0.53603 0.62499,-1.23159 0.625,-2.125 -10e-6,-0.88723 -0.21437,-1.60127 -0.625,-2.125 -0.13615,-0.17567 -0.2697,-0.32007 -0.4375,-0.4375 z m -2.125,10.6875 0,0.5 1.4375,0 0,-0.5 -1.4375,0 z"
- id="text3996"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4018);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-523.12118,-7.8312526)"
- id="layer1-2">
- <text
- x="566.91028"
- y="492.98608"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-94"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="566.91028"
- y="492.98608"
- id="tspan5197-07"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">V</tspan></text>
- <path
- d="m 532.44196,516.10773 0,0.59375 -1.1875,0 3.25,9.15625 0.15625,-0.46875 -2.90625,-8.1875 1.1875,0 0,-1.09375 -0.5,0 z m 7.4375,0 0,0.59375 -1,0 -4.5,12.6875 -1.59375,0 0.1875,0.5 1.875,0 4.53125,-12.6875 1,0 0,-1.09375 -0.5,0 z m -12.5625,0.59375 0,0.5 0.8125,0 -0.1875,-0.5 -0.625,0 z m 9.5,0 0,0.5 0.75,0 0.1875,-0.5 -0.9375,0 z"
- id="text4049"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4067);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 527.31696,516.10773 0,1.09375 0.5,0 0,-0.59375 5.125,0 0,-0.5 -5.625,0 z m 9.5,0 0,1.09375 0.5,0 0,-0.59375 3.0625,0 0,-0.5 -3.5625,0 z m -8.1875,1.59375 4.34375,12.1875 0.3125,0 -4.34375,-12.1875 -0.3125,0 z m 9.4375,0 -2.90625,8.1875 0.34375,0.96875 3.25,-9.15625 -0.6875,0 z"
- id="text4045"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4063);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-523.20924,63.952116)"
- id="layer1-25">
- <text
- x="566.91028"
- y="492.98608"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-3"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="566.91028"
- y="492.98608"
- id="tspan5197-01"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">A</tspan></text>
- <path
- d="m 532.75446,516.10773 -4.46875,12.65625 -1,0 0,1.125 0.5,0 0,-0.625 1,0 4.46875,-12.65625 1.625,0 -0.1875,-0.5 -1.9375,0 z m 0.4375,3.96875 -0.15625,0.46875 1.46875,4.28125 -3,0 -0.1875,0.5 3.6875,0 -1.8125,-5.25 z m 1.90625,6.375 0.8125,2.3125 -1.1875,0 0,1.125 0.5,0 0,-0.625 1.1875,0 -1,-2.8125 -0.3125,0 z m -5,2.3125 -0.1875,0.5 0.9375,0 0,-0.5 -0.75,0 z m 9.40625,0 0.1875,0.5 0.625,0 0,-0.5 -0.8125,0 z"
- id="text3023-0"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3809-1);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 534.37946,516.10773 4.3125,12.15625 0.3125,0 -4.3125,-12.15625 -0.3125,0 z m -2.1875,2.9375 -1.875,5.28125 0.6875,0 1.53125,-4.28125 -0.34375,-1 z m -2.28125,6.40625 -1,2.8125 0.6875,0 0.8125,-2.3125 4.1875,0 -0.1875,-0.5 -4.5,0 z m 0.4375,3.3125 0,0.625 -3.0625,0 0,0.5 3.5625,0 0,-1.125 -0.5,0 z m 9.46875,0 0,0.625 -5.09375,0 0,0.5 5.59375,0 0,-1.125 -0.5,0 z"
- id="text3027-7"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3837-2);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-0.09178666,648.05602)"
- id="g3372">
- <rect
- width="9.2080336"
- height="2.0841758"
- x="9.9951382"
- y="10.467622"
- id="rect8987"
- style="fill:url(#linearGradient3195);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="16.296982"
- height="1.8709884"
- x="2.8947093"
- y="3.5198629"
- id="rect8987-2"
- style="fill:url(#linearGradient3192);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="16.168335"
- height="1.874174"
- x="3.1143055"
- y="17.58077"
- id="rect8987-5"
- style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 6.1401918,11.71699 -2.6276419,1.51707 -2.6276417,1.51707 0,-3.03414 0,-3.0341389 2.6276419,1.5170699 z"
- transform="matrix(0.90902794,0,0,0.90902794,2.2305609,0.83286798)"
- id="path3978"
- style="fill:url(#linearGradient3986);fill-opacity:1;fill-rule:nonzero;stroke:#e0926b;stroke-width:0.89300001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- <g
- transform="translate(-524.03097,207.77805)"
- id="layer1-56">
- <text
- x="569.04468"
- y="493.06223"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-65"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="569.04468"
- y="493.06223"
- id="tspan5197-12"
- style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">A</tspan></text>
- <path
- d="m 535.78571,516.17023 -6.40625,12.8125 -1.0625,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.0625,0 6.40625,-12.8125 0.9375,0 -0.0937,-0.5 -1.34375,0 z m 0.375,2.75 -0.3125,0.625 0.90625,5.4375 -3.625,0 -0.25,0.5 4.375,0 -1.09375,-6.5625 z m 0.8125,7.53125 0.40625,2.53125 -1.3125,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.3125,0 -0.46875,-3.03125 -0.4375,0 z m -5.84375,2.53125 -0.25,0.5 0.71875,0 0.0937,-0.5 -0.5625,0 z m 8.53125,0 0.0937,0.5 0.59375,0 0.0625,-0.5 -0.75,0 z"
- id="text4090"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4108);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 536.72321,516.17023 2.03125,12.3125 0.40625,0 -2.03125,-12.3125 -0.40625,0 z m -1.5625,1.75 -3.28125,6.5625 0.75,0 2.71875,-5.4375 -0.1875,-1.125 z m -3.78125,7.53125 -1.5,3.03125 0.75,0 1.25,-2.53125 4.59375,0 -0.0625,-0.5 -5.03125,0 z m -0.28125,3.53125 -0.0625,0.5 -2.8125,0 -0.0625,0.5 3.375,0 0.15625,-1 -0.59375,0 z m 8.75,0 -0.0937,0.5 -3.78125,0 -0.0625,0.5 4.34375,0 0.15625,-1 -0.5625,0 z"
- id="text4094"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4112);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-523.77923,280.07755)"
- id="layer1-34">
- <text
- x="567.37231"
- y="493.05362"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-4"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="567.37231"
- y="493.05362"
- id="tspan5197-3"
- style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">C</tspan></text>
- <path
- d="m 534.56696,516.42023 c -1.06685,0.11457 -1.95956,0.64601 -2.6875,1.5625 -0.83195,1.04128 -1.43994,2.56667 -1.78125,4.59375 -0.34131,2.02093 -0.26122,3.54632 0.21875,4.59375 0.20629,0.44755 0.49066,0.80731 0.84375,1.0625 -0.12875,-0.16736 -0.24717,-0.35298 -0.34375,-0.5625 -0.47997,-1.04743 -0.56006,-2.57282 -0.21875,-4.59375 0.34131,-2.02708 0.9493,-3.55247 1.78125,-4.59375 0.83194,-1.04742 1.88166,-1.56249 3.15625,-1.5625 0.85596,1e-5 1.50789,0.15034 2,0.5 -0.0471,-0.0641 -0.10373,-0.13005 -0.15625,-0.1875 -0.50131,-0.54835 -1.27183,-0.81249 -2.34375,-0.8125 -0.15932,0 -0.31634,-0.0164 -0.46875,0 z m 4.96875,0.4375 -0.5,2.9375 -0.40625,0 c 0.0125,0.1636 0.0304,0.32199 0.0312,0.5 l 0.875,0 0.53125,-3.1875 c -0.18373,-0.0945 -0.35168,-0.16682 -0.53125,-0.25 z m -1.4375,9.46875 c -0.53603,1.0345 -1.18715,1.83323 -2,2.40625 -0.93861,0.65927 -2.04326,1 -3.3125,1 -0.77862,0 -1.48046,-0.16068 -2.09375,-0.46875 -0.28043,-0.14086 -0.54208,-0.29859 -0.78125,-0.5 0.36218,0.42621 0.79506,0.75578 1.28125,1 0.61329,0.30807 1.31513,0.46875 2.09375,0.46875 1.26924,0 2.37389,-0.34073 3.3125,-1 0.94393,-0.66543 1.67936,-1.61852 2.25,-2.90625 l -0.75,0 z"
- id="text4162"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4184);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 535.81696,515.92023 c -1.75455,1e-5 -3.26659,0.65023 -4.5625,1.96875 -1.29058,1.31238 -2.10611,3.04335 -2.46875,5.1875 -0.18665,1.10905 -0.20649,2.11893 -0.0625,3 0.14399,0.87492 0.45753,1.65368 0.9375,2.34375 0.22577,0.32438 0.4661,0.60468 0.75,0.84375 -0.0947,-0.11143 -0.16379,-0.21989 -0.25,-0.34375 -0.47997,-0.69007 -0.79351,-1.46883 -0.9375,-2.34375 -0.14399,-0.88107 -0.12415,-1.89095 0.0625,-3 0.36264,-2.14415 1.17817,-3.87512 2.46875,-5.1875 1.29591,-1.31852 2.80795,-1.96874 4.5625,-1.96875 0.65061,1e-5 1.33262,0.0841 2.03125,0.28125 0.53784,0.15065 1.10607,0.38692 1.6875,0.65625 l 0.0312,-0.25 c -0.77863,-0.40048 -1.51481,-0.70907 -2.21875,-0.90625 -0.69863,-0.19715 -1.38064,-0.28124 -2.03125,-0.28125 z m 2.21875,2 c 0.40225,0.54813 0.62022,1.33803 0.625,2.375 l 0.4375,0 c -0.0691,-0.9005 -0.29465,-1.59857 -0.71875,-2.0625 -0.101,-0.11048 -0.21959,-0.22428 -0.34375,-0.3125 z m -0.65625,8.40625 c -0.42131,0.9735 -0.96372,1.69459 -1.625,2.1875 -0.65596,0.48675 -1.4219,0.71875 -2.3125,0.71875 -0.72676,0 -1.31284,-0.16146 -1.78125,-0.5 0.51111,0.66438 1.26314,1 2.28125,1 0.8906,0 1.65654,-0.232 2.3125,-0.71875 0.66128,-0.49291 1.20369,-1.214 1.625,-2.1875 l 0.71875,0 c 0.0864,-0.16682 0.17076,-0.32118 0.25,-0.5 l -1.46875,0 z"
- id="text4158"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4180);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-840.97142,171.10277)"
- id="layer1-0">
- <g
- transform="translate(-19.62505,-0.15625)"
- id="g5883">
- <text
- x="808.40424"
- y="762.1983"
- transform="scale(1.0721134,0.93273715)"
- id="text5269"
- xml:space="preserve"
- style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#565758;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="808.40424"
- y="762.1983"
- id="tspan5271"
- style="font-style:italic;font-weight:normal;fill:#565758;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">I</tspan></text>
- <path
- d="m 875.11609,696.97827 -0.0937,0.5 -2.03125,0 -2.6875,11.96875 0.625,0 2.53125,-11.46875 2.0625,0 0.21875,-1 -0.625,0 z m -5.75,0.5 -0.125,0.5 1.4375,0 0.125,-0.5 -1.4375,0 z m 2.84375,12.46875 -0.0937,0.46875 -5.625,0 -0.125,0.5 6.25,0 0.21875,-0.96875 -0.625,0 z"
- id="text5273"
- style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter5879);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 869.49109,696.97827 -0.25,1 0.625,0 0.125,-0.5 5.625,0 0.125,-0.5 -6.25,0 z m 1.6875,1.5 -2.5625,11.46875 -2.03125,0 -0.21875,0.96875 0.625,0 0.0937,-0.46875 2.03125,0 2.6875,-11.96875 -0.625,0 z m 0.25,11.46875 -0.125,0.5 1.40625,0 0.125,-0.5 -1.40625,0 z"
- id="text5282"
- style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.87735847;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter5867);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- </g>
- <g
- transform="translate(-523.96353,423.93775)"
- id="layer1-21">
- <text
- x="567.41534"
- y="493.06223"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-0"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="567.41534"
- y="493.06223"
- id="tspan5197-6"
- style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">K</tspan></text>
- <path
- d="m 529.97321,516.17023 -0.1875,1 0.59375,0 0.0937,-0.5 4.0625,0 0.0937,-0.5 -4.65625,0 z m 6.96875,0 -0.15625,1 0.5625,0 0.0937,-0.5 3.40625,0 0.0625,-0.5 -3.96875,0 z m -5.71875,1.5 -1.90625,11.3125 -1.5,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.5,0 2,-11.8125 -0.59375,0 z m 6.3125,0 -4.78125,4.125 -0.1875,1.09375 6.03125,-5.21875 -1.0625,0 z m -5.15625,6.25 -0.0312,0.1875 4.09375,5.875 0.15625,0 -4.21875,-6.0625 z m -0.84375,5.0625 -0.0937,0.5 0.96875,0 0.0625,-0.5 -0.9375,0 z m 6.65625,0 0.34375,0.5 0.75,0 0.0937,-0.5 -1.1875,0 z"
- id="text4207"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4225);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 534.03571,516.17023 -0.0625,0.5 -1.53125,0 -0.875,5.21875 0.6875,-0.59375 0.6875,-4.125 1.53125,0 0.15625,-1 -0.59375,0 z m 6.3125,0 -0.0937,0.5 -1.34375,0 -6,5.1875 4.625,6.625 0.15625,0 -4.28125,-6.125 6,-5.1875 1.34375,0 0.15625,-1 -0.5625,0 z m -10.46875,0.5 -0.0937,0.5 0.9375,0 0.0937,-0.5 -0.9375,0 z m 6.96875,0 -0.0625,0.5 0.25,0 0.5625,-0.5 -0.75,0 z m -5.46875,6.25 -0.9375,5.5625 0.59375,0 0.8125,-4.875 -0.46875,-0.6875 z m 0.53125,6.0625 -0.0937,0.5 -4.09375,0 -0.0625,0.5 4.65625,0 0.15625,-1 -0.5625,0 z m 6.875,0 -0.0625,0.5 -2.625,0 0.34375,0.5 2.78125,0 0.15625,-1 -0.59375,0 z"
- id="text4211"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;filter:url(#filter4229);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-523.9635,495.85605)"
- id="layer1-87">
- <text
- x="569.04468"
- y="493.06223"
- transform="scale(0.93034878,1.0748657)"
- id="text5195-1"
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="569.04468"
- y="493.06223"
- id="tspan5197-09"
- style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">A</tspan></text>
- <path
- d="m 535.78571,516.17023 -6.40625,12.8125 -1.0625,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.0625,0 6.40625,-12.8125 0.9375,0 -0.0937,-0.5 -1.34375,0 z m 0.375,2.75 -0.3125,0.625 0.90625,5.4375 -3.625,0 -0.25,0.5 4.375,0 -1.09375,-6.5625 z m 0.8125,7.53125 0.40625,2.53125 -1.3125,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.3125,0 -0.46875,-3.03125 -0.4375,0 z m -5.84375,2.53125 -0.25,0.5 0.71875,0 0.0937,-0.5 -0.5625,0 z m 8.53125,0 0.0937,0.5 0.59375,0 0.0625,-0.5 -0.75,0 z"
- id="text4090-3"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter4108-5);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 536.72321,516.17023 2.03125,12.3125 0.40625,0 -2.03125,-12.3125 -0.40625,0 z m -1.5625,1.75 -3.28125,6.5625 0.75,0 2.71875,-5.4375 -0.1875,-1.125 z m -3.78125,7.53125 -1.5,3.03125 0.75,0 1.25,-2.53125 4.59375,0 -0.0625,-0.5 -5.03125,0 z m -0.28125,3.53125 -0.0625,0.5 -2.8125,0 -0.0625,0.5 3.375,0 0.15625,-1 -0.59375,0 z m 8.75,0 -0.0937,0.5 -3.78125,0 -0.0625,0.5 4.34375,0 0.15625,-1 -0.5625,0 z"
- id="text4094-3"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4112-0);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-550.30419,585.78061)"
- id="layer1-51">
- <text
- x="551.98376"
- y="500.20258"
- id="text8953"
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
- x="551.98376"
- y="500.20258"
- id="tspan8955"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">1</tspan></text>
- <text
- x="552.23047"
- y="507.20078"
- id="text8953-1"
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
- x="552.23047"
- y="507.20078"
- id="tspan8955-5"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">2</tspan></text>
- <text
- x="552.19891"
- y="514.17712"
- id="text8953-8"
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
- x="552.19891"
- y="514.17712"
- id="tspan8955-55"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">3</tspan></text>
- <rect
- width="11.551277"
- height="2.0031219"
- x="558.13318"
- y="504.72748"
- id="rect8987-8"
- style="fill:url(#linearGradient9503-34);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="11.551277"
- height="2.0031219"
- x="558.13507"
- y="497.67313"
- id="rect8987-2-0"
- style="fill:url(#linearGradient9520-6);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="11.551277"
- height="2.0031219"
- x="558.22443"
- y="511.73563"
- id="rect8987-5-2"
- style="fill:url(#linearGradient9520-2-9);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- <g
- transform="translate(-823.84926,444.77821)"
- id="layer1-71">
- <text
- x="674.32245"
- y="890.06787"
- transform="scale(1.2392818,0.80691899)"
- id="text11171-0"
- xml:space="preserve"
- style="font-size:15.80470848px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="674.32245"
- y="890.06787"
- id="tspan11173-0"
- style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">-</tspan></text>
- <text
- x="825.39417"
- y="725.07898"
- id="text11693-2"
- xml:space="preserve"
- style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="825.39417"
- y="725.07898"
- id="tspan11695-3"
- style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif">A</tspan></text>
- <path
- d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
- id="text11167-3"
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735-4);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
- id="text11683-3"
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.69182392;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711-5);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-823.58442,516.56157)"
- id="layer1-29">
- <text
- x="676.90649"
- y="897.27142"
- transform="scale(1.2392818,0.80691898)"
- id="text11171-3"
- xml:space="preserve"
- style="font-size:5.07652283px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="676.90649"
- y="897.27142"
- id="tspan11173-3"
- style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">▼</tspan></text>
- <text
- x="825.39417"
- y="725.07898"
- id="text11693-7"
- xml:space="preserve"
- style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="825.39417"
- y="725.07898"
- id="tspan11695-2"
- style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif">A</tspan></text>
- <path
- d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
- id="text11167-8"
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735-7);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
- id="text11683-2"
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.69182392;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711-8);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(-823.85428,588.68226)"
- id="layer1-1">
- <text
- x="676.90649"
- y="884.87854"
- transform="scale(1.2392818,0.80691898)"
- id="text11171-9"
- xml:space="preserve"
- style="font-size:5.07652283px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="676.90649"
- y="884.87854"
- id="tspan11173-30"
- style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">▲</tspan></text>
- <text
- x="825.39417"
- y="725.07898"
- id="text11693-3"
- xml:space="preserve"
- style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="825.39417"
- y="725.07898"
- id="tspan11695-28"
- style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif">A</tspan></text>
- <path
- d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
- id="text11167-7"
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735-9);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)"
- id="text11683-28"
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.69182392;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711-3);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- <g
- transform="translate(0.23496604,1367.9407)"
- id="g3736">
- <rect
- width="11.551277"
- height="2.0031219"
- x="7.7045889"
- y="10.508148"
- id="rect8987-0"
- style="fill:url(#linearGradient3195-7);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="11.551277"
- height="2.0031219"
- x="7.706481"
- y="3.4537961"
- id="rect8987-2-9"
- style="fill:url(#linearGradient3192-9);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="11.551277"
- height="2.0031219"
- x="7.7958364"
- y="17.516296"
- id="rect8987-5-8"
- style="fill:url(#linearGradient3189-5);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="2.2180145"
- height="2.2927809"
- x="2.3276966"
- y="3.282562"
- id="rect3039"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="2.2180145"
- height="2.2927809"
- x="2.3276966"
- y="10.337555"
- id="rect3039-7"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="2.2180145"
- height="2.2927809"
- x="2.3276966"
- y="17.345551"
- id="rect3039-6"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- <g
- transform="translate(-771.7253,752.90558)"
- id="layer1-13">
- <path
- d="m 773.33551,690.56085 0,15.03125 15.6875,0 1.6875,-1.6875 1.625,-1.59375 0,-11.75 -19,0 z"
- id="rect8568"
- style="fill:#f4f5f4;fill-opacity:1;fill-rule:nonzero;stroke:#979995;stroke-width:0.98371369;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="14.78293"
- height="10.804496"
- x="775.41565"
- y="692.71948"
- id="rect9088"
- style="fill:url(#linearGradient9194);fill-opacity:1;fill-rule:nonzero;stroke:#8a8475;stroke-width:0.98447442;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:1.5;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 784.01425,702.59563 0.0601,-2.9358 -1.26032,-1.93639 -1.8605,-1.24927 1.80048,0.62463 -0.26028,-1.46793 -1.82531,-2.19755 1.32363,0.61702 0.91039,1.03764 0.35492,1.31728 0.18635,0.79469 1.17065,1.79054 2.04124,-1.92043 1.67975,-2.40736 -0.62239,2.53228 -2.32245,2.54612 0,2.97449 z"
- id="path9114"
- style="fill:#001700;fill-opacity:1;stroke:none" />
- <path
- d="m 779.6728,699.1081 c -1.73172,0 -3.125,1.39328 -3.125,3.125 0,0.1736 0.0354,0.33407 0.0625,0.5 l 6.15625,0 c 0.0271,-0.16593 0.0625,-0.3264 0.0625,-0.5 0,-1.73172 -1.42454,-3.125 -3.15625,-3.125 z"
- id="path9118"
- style="fill:url(#radialGradient9190);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- d="m 775.90453,703.04526 13.73212,0 0,-0.54833 -13.7798,0 z"
- id="path9112"
- style="fill:#193119;fill-opacity:1;stroke:none" />
- <path
- d="m 789.0447,705.53374 3.32589,-3.32589 -3.32589,0 z"
- id="path9086"
- style="fill:#f4f5f4;fill-opacity:1;stroke:#979995;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1.5;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 775.9663,700.54201 c 0,0 1.79546,-2.81322 6.35713,-4.86346 4.34963,-1.95492 7.3609,-2.47941 7.3609,-2.47941 l -13.76583,0 z"
- id="path9098"
- style="opacity:0.31132076;fill:url(#radialGradient9185);fill-opacity:1;stroke:none" />
- </g>
- <g
- transform="translate(-860.64588,879.10051)"
- id="layer1-86">
- <g
- transform="matrix(0.96583758,-0.25914815,0.25914815,0.96583758,-155.70545,250.69009)"
- id="g9740">
- <rect
- width="15.655096"
- height="10.078743"
- x="883.86444"
- y="638.2356"
- id="rect9216"
- style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
- <rect
- width="12.767857"
- height="7.0982141"
- x="885.29468"
- y="639.74615"
- id="rect9726"
- style="fill:#88acd3;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- </g>
- <g
- transform="matrix(0.94980636,0.31283842,-0.31283842,0.94980636,225.23946,-243.05113)"
- id="g9732">
- <rect
- width="15.655096"
- height="10.078743"
- x="883.86444"
- y="638.2356"
- id="rect9734"
- style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
- <rect
- width="12.767857"
- height="7.0982141"
- x="885.29468"
- y="639.74615"
- id="rect9736"
- style="fill:#6bbe21;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- </g>
- <rect
- width="15.655096"
- height="10.078743"
- x="865.33765"
- y="638.32489"
- id="rect9746"
- style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
- <rect
- width="12.698151"
- height="7.0935974"
- x="866.7262"
- y="639.77606"
- id="rect9774"
- style="fill:url(#linearGradient9784);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- d="m 13.872113,11.500305 a 1.5297568,1.5297568 0 1 1 -3.059514,0 1.5297568,1.5297568 0 1 1 3.059514,0 z"
- transform="translate(860.60243,632.92984)"
- id="path9756"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- width="12.698151"
- height="7.0336046"
- x="866.75745"
- y="639.80731"
- id="rect9758"
- style="opacity:0.73899369;fill:url(#radialGradient9772);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- d="m 866.7472,646.07035 1.91945,-0.11086 0.32595,-0.96072 1.19513,-1.14548 0.97784,1.10853 1.70216,0.25865 2.60756,-0.25865 0.50702,-0.99768 1.41243,0.36951 1.05027,1.29328 1.05027,0.44342 0,0.84987 -12.71186,0 z"
- id="path9752"
- style="fill:#000000;fill-opacity:1;stroke:none" />
- <path
- d="m 6.34375,7.03125 0,7.125 12.75,0 0,-7.125 -12.75,0 z m 0.71875,0.6875 11.125,0 0,5.71875 -11.125,0 0,-5.71875 z"
- transform="matrix(1.018707,0,0,1.0633975,860.12972,632.15392)"
- id="rect9748"
- style="opacity:0.45911949;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter9873)" />
- </g>
- <g
- transform="translate(-843.15385,882.99624)"
- id="layer1-76">
- <g
- transform="matrix(1.6118599,0,0,1.6118599,-522.76477,-435.86589)"
- mask="url(#mask3773)"
- id="g8544">
- <path
- d="m 847.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
- id="rect8508"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 857.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
- id="path8520"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 9.90625,8.3125 c 0.219379,0.2493818 0.400172,0.5353409 0.53125,0.84375 l 1.21875,0 C 11.78881,8.8397468 11.967186,8.5700989 12.1875,8.3125 l -2.28125,0 z M 6.375,9.09375 C 5.9621997,9.4039663 5.725025,9.7591417 5.71875,10.0625 l -0.03125,1.25 c -0.0151,0.72807 1.26414,2.375 3.53125,2.375 l 3.6875,0 c 2.26711,0 3.46875,-1.61553 3.46875,-2.34375 l 0,-1.28125 c 0,-0.2949291 -0.211045,-0.6348842 -0.59375,-0.9375 l -0.4375,0 c -0.63503,0 -1.1133,0.14044 -1.40625,0.4375 0.224818,0.1572379 0.34375,0.3524935 0.34375,0.53125 l 0,0.75 c 0,0.45142 -0.90722,0.78125 -2.3125,0.78125 l -2.28125,0 C 8.28222,11.625 7.75,11.29515 7.75,10.84375 l 0,-0.6875 c 0,-0.1767274 0.1306645,-0.3924485 0.375,-0.5625 -0.2943153,-0.3314596 -0.7859446,-0.5 -1.4375,-0.5 l -0.3125,0 z"
- transform="translate(843.28571,701.36218)"
- id="path8522"
- style="fill:#f4f4f5;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
- <g
- transform="translate(-843.15389,954.64464)"
- id="layer1-72">
- <g
- transform="translate(-0.03819,0)"
- id="g8544-0">
- <path
- d="m 847.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
- id="rect8508-4"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 857.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
- id="path8520-0"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 9.90625,8.3125 c 0.219379,0.2493818 0.400172,0.5353409 0.53125,0.84375 l 1.21875,0 C 11.78881,8.8397468 11.967186,8.5700989 12.1875,8.3125 l -2.28125,0 z M 6.375,9.09375 C 5.9621997,9.4039663 5.725025,9.7591417 5.71875,10.0625 l -0.03125,1.25 c -0.0151,0.72807 1.26414,2.375 3.53125,2.375 l 3.6875,0 c 2.26711,0 3.46875,-1.61553 3.46875,-2.34375 l 0,-1.28125 c 0,-0.2949291 -0.211045,-0.6348842 -0.59375,-0.9375 l -0.4375,0 c -0.63503,0 -1.1133,0.14044 -1.40625,0.4375 0.224818,0.1572379 0.34375,0.3524935 0.34375,0.53125 l 0,0.75 c 0,0.45142 -0.90722,0.78125 -2.3125,0.78125 l -2.28125,0 C 8.28222,11.625 7.75,11.29515 7.75,10.84375 l 0,-0.6875 c 0,-0.1767274 0.1306645,-0.3924485 0.375,-0.5625 -0.2943153,-0.3314596 -0.7859446,-0.5 -1.4375,-0.5 l -0.3125,0 z"
- transform="translate(843.28571,701.36218)"
- id="path8522-7"
- style="fill:#f4f4f5;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
- <g
- transform="translate(-364.34044,1207.5749)"
- id="layer1-85">
- <g
- transform="translate(20.359375,-0.98355932)"
- id="g10495">
- <path
- d="m 353.50893,536.39789 0,5.04465 -7.1875,-7.14286 7.1875,-7.1875 0,4.24107 4.28571,0 0,-6.11607 5.17857,0 0,11.20536 z"
- id="path9915"
- style="fill:#373736;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- d="m 361.96875,525.23718 0,10.21875 -9.46875,-0.0625 0,5.0625 1,1 0,-5.0625 9.46875,0.0625 0,-11.21875 -1,0 z m -8.46875,1.875 -1,1 0,2.25 1,0 0,-3.25 z"
- id="path10454"
- style="opacity:0.6;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter10491)" />
- <path
- d="m 357.78125,525.23718 0,6.125 -3.28125,0 0,1 4.28125,0 0,-6.125 4.1875,0 0,-1 -5.1875,0 z m -4.28125,1.875 -7.1875,7.1875 1,1 6.1875,-6.1875 0,-2 z"
- id="path10425"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter10487)" />
- </g>
- </g>
- <g
- transform="translate(-714.38007,1098.2114)"
- id="layer1-65">
- <g
- transform="translate(26.036511,-0.0978784)"
- id="g7675">
- <path
- d="m 691.68161,706.63153 -1.45209,12.6269 c 0,0 3.54369,-1.49312 6.50286,-0.88388 2.14658,0.44194 3.34613,1.38896 3.34613,1.38896 0,0 2.77792,-2.39911 6.12405,-1.6415 3.34613,0.75762 2.90418,0.69448 2.90418,0.69448 l -1.19955,-12.2481"
- id="path7155"
- style="fill:#52394e;fill-opacity:1;stroke:#52394e;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 692.06042,707.26287 -0.82075,10.60661 c 0,0 2.39912,-1.76777 4.9245,-1.19956 2.84205,0.63945 3.47239,1.76776 3.47239,1.76776 l 0,-12.6269 c 0,0 -2.58851,-1.89404 -4.86135,-0.82075 -2.27285,1.07329 -2.71479,2.27284 -2.71479,2.27284 z"
- id="path7151"
- style="fill:#ffffff;fill-opacity:1;stroke:#b1b2af;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- d="m 699.63656,706.06332 c 0,0 2.27285,-2.14658 4.98763,-1.13642 2.71479,1.01015 2.65165,2.0203 2.65165,2.0203 l 1.01016,10.79601 c 0,0 -1.95717,-1.26269 -4.29315,-0.69448 -2.33598,0.56821 -3.53553,1.76776 -3.53553,1.76776 z"
- id="path7153"
- style="fill:#ffffff;fill-opacity:1;stroke:#b1b2af;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- d="m 699.8891,706.56839 c 0,0 -0.31573,1.12962 2.28105,5.17626 2.65428,4.13625 2.07524,6.56677 2.07524,6.56677"
- id="path7157"
- style="fill:none;stroke:#c04848;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
- <g
- transform="translate(-900.39782,1187.6647)"
- id="layer1-68">
- <path
- d="m 2.7162576,15.606291 c 0.014982,-0.0061 0.030116,-0.01186 0.044947,-0.01833 0.044032,-0.0192 0.097586,-0.04461 0.1391489,-0.06714 0.029295,-0.01588 0.115542,-0.06645 0.08666,-0.04983 -1.0038452,0.57765 -1.2838827,0.741183 -0.8581766,0.492994 0.037046,-0.02158 0.073951,-0.0434 0.111137,-0.06473 C 2.6300793,15.67546 3.0195615,15.45057 3.4107098,15.228603 3.5742777,15.135783 3.7473,15.057838 3.9139685,14.970667 4.171548,14.829805 4.4327254,14.695431 4.6862561,14.547333 2.5032639,15.853906 3.593205,15.175217 3.8660407,15.017504 c 0.4751945,-0.274686 0.9514185,-0.555191 1.4317232,-0.823686 0.142362,-0.0764 0.2991256,-0.120806 0.4528415,-0.168535 0.092107,-0.02377 0.1895155,-0.05226 0.2845027,-0.03273 0.1019002,0.05033 0.1453779,0.142963 0.182287,0.24448 0.042624,0.163605 0.049796,0.334568 0.06126,0.502654 0.01013,0.221059 0.018945,0.44211 0.029896,0.663161 0.016456,0.256167 0.00893,0.51265 -0.014887,0.767993 -0.02608,0.262109 -0.085432,0.519124 -0.1458886,0.774983 -0.058063,0.245373 -0.1262914,0.488199 -0.1847641,0.733455 -0.048858,0.231812 -0.099166,0.463109 -0.1648223,0.690807 -0.060983,0.207897 -0.1436609,0.408045 -0.224407,0.60874 -0.076214,0.195637 -0.1765255,0.379946 -0.2875951,0.55762 -0.1229874,0.189026 -0.2690224,0.36206 -0.4187308,0.530284 -0.1080837,0.122432 -0.2253887,0.23643 -0.3582161,0.331605 -0.9365499,0.568706 -0.9088579,0.650165 -1.6646157,0.742537 -0.1617523,0.01598 -0.3238321,0.02852 -0.4862917,0.03398 -0.1146667,-0.0056 -0.2089106,-0.0583 -0.3027264,-0.11981 C 1.9620107,20.999097 1.8715075,20.938702 1.7802895,20.879209 1.6972907,20.817586 1.653071,20.717491 1.6033139,20.62964 1.5322312,20.50861 1.4548867,20.391629 1.3913122,20.26633 c -0.07264,-0.167297 -0.077499,-0.350154 -0.075953,-0.529538 0.00745,-0.273623 0.081469,-0.538238 0.1656536,-0.796711 0.1177555,-0.330292 0.2815884,-0.640339 0.4449819,-0.949575 0.1838689,-0.336162 0.3698925,-0.67143 0.574008,-0.995796 0.1722137,-0.280536 0.3960701,-0.521103 0.6240914,-0.756187 0.2471914,-0.251128 0.5159797,-0.479759 0.7906068,-0.700066 0.313975,-0.239169 0.6487409,-0.449607 0.9828024,-0.659265 0.2562013,-0.152136 0.5076318,-0.311266 0.7522445,-0.481369 0.1960321,-0.137571 0.3878661,-0.280917 0.5829129,-0.419856 0.1499281,-0.112844 0.3077473,-0.213969 0.4533425,-0.332505 0.1496353,-0.126105 0.3009994,-0.250081 0.4379018,-0.390134 0.1195688,-0.131818 0.2271819,-0.274088 0.3189983,-0.426504 0.062814,-0.102531 0.113777,-0.2116 0.1599077,-0.322448 0.063539,-0.144198 0.1109773,-0.294886 0.1634422,-0.443344 0.064032,-0.188872 0.126562,-0.378363 0.1864819,-0.568603 0.069997,-0.218007 0.1527336,-0.431587 0.2355382,-0.644965 0.054774,-0.155522 0.1151256,-0.309556 0.1523278,-0.470447 0.026038,-0.144681 0.049854,-0.290434 0.045029,-0.4377538 C 8.3728056,9.8149502 8.2986317,9.7164754 8.2186271,9.6233765 8.1527242,9.5612044 8.0878966,9.4961292 7.9999384,9.4682539 7.8943613,9.4485021 7.7961169,9.4921617 7.7002258,9.5308343 7.672613,9.5438024 7.6443143,9.5554004 7.6173876,9.5697387 7.5876293,9.5855848 7.501067,9.6379656 7.530365,9.621284 7.854214,9.4368913 8.1754789,9.2479294 8.5010524,9.0665988 c 0.033437,-0.018623 -0.06322,0.04321 -0.093763,0.066276 C 8.3324417,9.1893972 8.3044135,9.2171152 8.2347401,9.279519 8.0586202,9.4483447 7.9233976,9.6519943 7.8010037,9.8614313 7.6446745,10.143055 7.5121438,10.43663 7.4008933,10.738685 7.2913871,11.042517 7.242477,11.362648 7.1966248,11.68095 c -0.046701,0.306129 -0.098682,0.611218 -0.1604766,0.914653 -0.069932,0.311062 -0.1303383,0.624124 -0.2053817,0.934029 -0.053132,0.217313 -0.1256675,0.428574 -0.2144463,0.633693 -0.070224,0.153442 -0.1444406,0.304866 -0.2009688,0.464022 -0.023085,0.08928 -0.044673,0.04986 -0.027236,0.02219 0.00703,-0.01116 0.023065,-0.01327 0.03568,-0.01714 0.055026,-0.01686 0.1124832,-0.02441 0.1687912,-0.03631 0.2495019,-0.05445 0.4969053,-0.117852 0.7472309,-0.168556 0.2078164,-0.04257 0.4206442,-0.04789 0.6319581,-0.05484 0.1112543,0.0017 0.222991,-0.008 0.3342245,-0.0037 0.010785,4.09e-4 0.1315998,0.01128 0.1444173,0.01242 0.085402,0.01413 0.1710335,0.02622 0.2517865,0.05899 0.069322,0.0321 0.035224,0.0175 0.1021532,0.04413 0.096055,0.03846 0.1784192,0.09809 0.2647994,0.153327 0.073649,0.04237 0.1387492,0.09149 0.1985346,0.151826 0.069801,0.07284 0.1257312,0.157748 0.1829061,0.240546 0.075399,0.100562 0.1419414,0.207061 0.2040451,0.316171 0.053096,0.100156 0.083151,0.209652 0.117392,0.317073 0.028897,0.07491 0.054643,0.150188 0.066664,0.229714 0.00421,0.07158 0.015172,0.141967 0.026594,0.212643 0.011359,0.02911 2.46e-4,0.06649 0.011714,0.09523 0.00541,0.01355 0.015129,-0.02494 0.023065,-0.03718 0.011365,-0.01752 0.025663,-0.03295 0.038495,-0.04943 -1.6473699,0.951732 -1.0951999,0.71807 -0.7535789,0.329888 0.1826495,-0.207543 0.3377825,-0.433409 0.4931041,-0.661483 0.3230555,-0.499315 0.6008615,-1.025465 0.8693005,-1.555496 0.221221,-0.454212 0.697738,-1.414258 1.360067,-1.001832 0.09569,0.09864 0.130656,0.235312 0.170828,0.363106 0.05204,0.175681 0.102576,0.351999 0.149221,0.529214 0.04699,0.18583 0.08151,0.37423 0.112944,0.563198 0.02677,0.237133 0.05235,0.47409 0.08814,0.710058 0.03428,0.212668 0.06367,0.426352 0.108012,0.637221 0.04557,0.169703 0.07868,0.34187 0.105252,0.515444 0.02396,0.171647 0.0343,0.344972 0.04747,0.517733 0.01488,0.200315 0.04953,0.398524 0.07848,0.597144 0.03496,0.229975 0.07662,0.458743 0.120696,0.687112 0.03845,0.200967 0.0777,0.401683 0.134613,0.598349 0.0354,0.13636 0.08742,0.26712 0.140805,0.39718 0.03573,0.09033 0.07249,0.179719 0.116236,0.266461 0.03868,0.06517 0.07198,0.136032 0.124362,0.191551 0.03586,0.04701 0.07495,0.09145 0.110956,0.138208 0,0 -1.101429,0.656126 -1.101429,0.656126 l 0,0 c -0.03528,-0.04495 -0.06752,-0.09205 -0.102723,-0.137022 -0.05344,-0.0685 -0.09652,-0.143971 -0.136931,-0.220759 -0.04265,-0.09072 -0.08493,-0.180839 -0.113685,-0.277246 -0.05547,-0.135393 -0.09871,-0.27549 -0.133505,-0.417596 -0.05566,-0.202218 -0.09403,-0.407487 -0.128609,-0.614261 -0.04161,-0.229361 -0.09004,-0.457466 -0.127185,-0.687658 -0.034,-0.200007 -0.06664,-0.400419 -0.09074,-0.601875 -0.01332,-0.169591 -0.02923,-0.339002 -0.04597,-0.508257 -0.02563,-0.172233 -0.05242,-0.344519 -0.09624,-0.513271 -0.04161,-0.214841 -0.06837,-0.432032 -0.102606,-0.64811 -0.03153,-0.234649 -0.06223,-0.469334 -0.09324,-0.704051 -0.03109,-0.185035 -0.07426,-0.367436 -0.112127,-0.551139 -0.04449,-0.173758 -0.09469,-0.346743 -0.151172,-0.516884 -0.02349,-0.06181 -0.04615,-0.124371 -0.07439,-0.184247 -0.0027,-0.0058 -0.02385,-0.05109 -0.03331,-0.05446 -0.0038,-0.0014 -0.0056,0.0059 -0.0083,0.0089 -0.04238,0.431954 -0.01018,0.02835 1.044188,-0.598079 0.01795,-0.01066 -0.03748,0.01977 -0.05228,0.03449 -0.08975,0.08926 -0.153018,0.24089 -0.225393,0.341311 -0.31381,0.519598 -0.596513,1.057134 -0.904591,1.580105 -0.138226,0.221515 -0.277079,0.440545 -0.431606,0.651159 -0.01081,0.01474 -0.15741,0.215292 -0.191992,0.237176 -0.3772716,0.238747 -0.7672828,0.456741 -1.1509239,0.685111 -0.02887,0.0019 -0.058438,0.0124 -0.08661,0.0058 -0.026874,-0.0063 -0.050191,-0.02451 -0.070937,-0.04271 -0.052286,-0.04588 -0.053976,-0.09572 -0.057642,-0.158149 -0.00887,-0.0718 -0.026621,-0.142245 -0.026236,-0.214908 -0.00741,-0.07405 -0.025133,-0.145375 -0.052512,-0.214763 C 8.6302021,16.171687 8.6048321,16.070436 8.5574511,15.977141 8.5005391,15.870804 8.4364921,15.768984 8.3625577,15.673459 8.3058307,15.598729 8.2492331,15.522867 8.1810749,15.458022 8.1251659,15.406392 8.061785,15.365912 7.998907,15.323277 7.921282,15.269527 7.8377632,15.225837 7.750429,15.189793 c -0.1039986,-0.04318 -0.2122199,-0.06926 -0.325112,-0.0758 -0.1533511,-0.01046 -0.3072442,-0.0072 -0.4608359,-0.0046 -0.2041835,0.0058 -0.4080615,0.02076 -0.6082629,0.06387 -0.2525206,0.05286 -0.5027377,0.115275 -0.7545027,0.171468 -0.057625,0.0097 -0.1476894,0.03013 -0.2085337,0.02141 -0.077663,-0.01112 -0.1597738,-0.07269 -0.1470492,-0.160339 0.00262,-0.01803 0.014679,-0.03336 0.022018,-0.05004 0.033638,-0.06959 0.058539,-0.142074 0.090848,-0.212291 0.040671,-0.08839 0.087761,-0.17386 0.1263158,-0.263273 0.096033,-0.201276 0.1759203,-0.40906 0.2395654,-0.622927 0.090072,-0.307158 0.1542067,-0.620475 0.2222366,-0.933056 C 6.0042224,12.823173 6.0498604,12.520549 6.102327,12.21873 6.15093,11.892267 6.2028259,11.563462 6.3082068,11.249755 6.4103983,10.945225 6.5353501,10.649404 6.6797727,10.36247 6.7961866,10.144795 6.9232919,9.9336751 7.0902422,9.75003 7.5351459,9.3040342 8.1056686,8.9955291 8.6884875,8.7620282 c 0.1256889,-0.036068 0.2543632,-0.060833 0.3757558,0.00346 0.090074,0.055422 0.1667795,0.1286976 0.2358293,0.2085297 0.094252,0.116132 0.178679,0.2377166 0.2036035,0.3889655 0.013427,0.1577518 -0.011563,0.3119029 -0.031747,0.4682589 -0.010529,0.057463 -0.016746,0.099176 -0.032934,0.1556224 -0.033401,0.1164623 -0.088218,0.2259293 -0.1246818,0.3413883 -0.08508,0.210344 -0.1722066,0.420098 -0.2404575,0.636732 -0.05771,0.189481 -0.1147613,0.379157 -0.1751629,0.567705 -0.050196,0.148813 -0.1005161,0.297497 -0.1471959,0.447455 -0.053123,0.11273 -0.089635,0.233814 -0.1582751,0.339371 -0.096677,0.159039 -0.2018903,0.312507 -0.3232974,0.454109 -0.1258605,0.151197 -0.275562,0.276538 -0.4247797,0.404024 -0.045588,0.03882 -0.089538,0.07961 -0.1363751,0.11691 -0.1032697,0.08224 -0.2199272,0.145039 -0.323707,0.226493 -0.1983624,0.149887 0.023963,-0.01524 -0.183262,0.129644 -0.1386032,0.0969 -0.2707178,0.203158 -0.4112703,0.2974 -0.2489405,0.177555 -0.5042078,0.345361 -0.7704442,0.496145 -0.3367592,0.206226 -0.6724487,0.415458 -0.991997,0.64776 -0.2723213,0.214778 -0.5364281,0.440516 -0.7857476,0.681775 -0.2271957,0.231058 -0.4562523,0.46292 -0.6347064,0.735237 -0.216352,0.317721 -0.408533,0.650929 -0.5897197,0.989826 -0.1558498,0.301637 -0.3127824,0.603033 -0.4306315,0.922183 -0.084928,0.243041 -0.1568744,0.493451 -0.1660699,0.752465 0.00113,0.158061 0.00729,0.320518 0.065694,0.469435 0.05965,0.123148 0.1362585,0.236855 0.2074265,0.353521 0.046765,0.07192 0.090011,0.149767 0.1629358,0.198684 0.08101,0.06413 0.1666965,0.122086 0.2574145,0.171736 0.088055,0.04281 0.1695465,0.06715 0.2686271,0.05993 0.1515264,-0.0012 0.3032783,-0.0066 0.4535735,-0.02736 0.1103917,-0.01631 0.2201976,-0.03396 0.3278808,-0.06409 0.4145129,-0.115996 1.0197914,-0.60846 -0.8266012,0.516908 0.1478191,-0.07849 0.2650675,-0.184499 0.3818233,-0.303699 0.151761,-0.164142 0.3038857,-0.328394 0.4326506,-0.511896 0.107296,-0.1733 0.2140082,-0.347559 0.2928106,-0.536247 0.080229,-0.199643 0.1698965,-0.395509 0.2334674,-0.601419 0.073219,-0.224178 0.1261847,-0.45457 0.1742457,-0.685327 0.054259,-0.247041 0.1255423,-0.489938 0.1861619,-0.735462 0.060901,-0.251514 0.1218702,-0.503683 0.1555321,-0.760603 0.024278,-0.248577 0.033736,-0.498072 0.014942,-0.747532 -0.012474,-0.218845 -0.024976,-0.437614 -0.035828,-0.656534 -0.013863,-0.15431 -0.027381,-0.310524 -0.064487,-0.461133 -0.019344,-0.04998 -0.042869,-0.128433 -0.1102792,-0.113455 -0.082695,0.01604 -0.1659707,0.02956 -0.2455245,0.05872 -0.1468592,0.04807 -0.2935592,0.09717 -0.4257726,0.179398 -0.1044819,0.05858 -0.061879,0.03454 -0.1701311,0.0959 -0.031925,0.0181 -0.1275071,0.07272 -0.095761,0.05431 0.3172726,-0.183974 0.6350084,-0.367149 0.9523446,-0.551014 0.037701,-0.02184 -0.075626,0.0433 -0.1134385,0.06495 -0.3883499,0.224961 -0.7766997,0.449922 -1.1650496,0.674883 -0.2573702,0.143147 -0.5166836,0.282804 -0.7769328,0.42064 -0.1266246,0.06474 -0.2537499,0.128578 -0.3794392,0.195128 -0.041511,0.02198 -0.1646218,0.09051 -0.1240878,0.06677 0.065161,-0.03815 1.3501761,-0.781852 0.8252087,-0.478022 -0.4634021,0.276695 -0.3115777,0.186742 -1.2613365,0.729481 -0.099927,0.0571 -0.208062,0.102156 -0.3188431,0.132947 0,0 1.0158165,-0.776752 1.0158165,-0.776752 z"
- transform="translate(900.42859,684.2193)"
- id="path7202"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <g
- transform="translate(-0.1875,0.375)"
- id="g3868">
- <path
- d="m 888.30688,690.10346 -2.60119,12.43889 5.91169,1.23434 2.57512,-12.50165"
- transform="matrix(0.9138951,0.02916988,-0.12956575,1.1023997,194.56326,-104.29886)"
- mask="url(#mask3836)"
- id="path7210"
- style="fill:url(#linearGradient3873);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50066453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 912.90679,696.01618 0.30405,5.25331 2.08892,0.60935 2.98991,-4.27396"
- id="path3842"
- style="fill:url(#radialGradient3875);fill-opacity:1;stroke:#000000;stroke-width:0.45993432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 913.18227,701.08114 0.31101,3.10057 1.90916,-2.43627"
- id="path3852"
- style="fill:#313131;fill-opacity:1;stroke:#000000;stroke-width:0.45736727;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
- <rect
- width="20.883707"
- height="17.976885"
- x="0.58360565"
- y="1945.7407"
- id="rect6294"
- style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#8c8e89;stroke-width:1.03740442;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="17.572828"
- height="2.1966035"
- x="2.2779477"
- y="1947.4938"
- id="rect6055"
- style="fill:#a0bdd9;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- width="3.2949049"
- height="11.035022"
- x="2.2779477"
- y="1950.7856"
- id="rect6057"
- style="fill:#cfd0c8;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- width="13.163168"
- height="12.125098"
- x="6.6600266"
- y="1949.6956"
- id="rect6059"
- style="fill:#f0f2eb;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- d="m 6.1259087,1961.2303 0,-13.1952"
- id="path6061"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.09438753;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 11.32115,1961.7717 0,-14.4152"
- id="path6061-6"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 10.809539,1961.2225 0,-13.1952"
- id="path6061-65"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.09830177;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 16.148779,1961.2225 0,-13.1952"
- id="path6061-5"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.09830177;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 19.292723,1953.4289 -16.456733,0"
- id="path6061-68"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.10716188;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 19.300499,1950.2395 -16.4734053,0"
- id="path6061-68-8"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.09830177;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 19.292723,1956.7927 -16.456733,0"
- id="path6061-68-84"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.10716188;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 19.292723,1961.2225 -16.456733,0"
- id="path6061-68-9"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.10716188;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <g
- transform="translate(-291.88242,-521.02797)"
- id="layer1-05">
- <g
- transform="translate(-37.98214,-0.06250444)"
- id="g7123">
- <path
- d="m 7.7678573,8.5848217 a 8.3705359,8.3705359 0 1 1 -16.7410717,0 8.3705359,8.3705359 0 1 1 16.7410717,0 z"
- transform="matrix(1.1399776,0,0,1.1399776,413.66918,522.63818)"
- id="path6494"
- style="fill:url(#linearGradient7130);fill-opacity:1;fill-rule:nonzero;stroke:#1d497d;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 414.36607,528.58539 0.625,1.65179 -0.9375,0.71429 -0.89286,0.80357 0.84822,1.51785 2.00893,0.89286 0.58035,3.125 0.80358,2.00893 1.02678,-0.89286 0.80357,-2.36607 0.0446,-1.38393 0.75893,-1.07143 -1.25,-1.875 -1.25,-1.25 -1.60714,-1.38392 z"
- id="path7012"
- style="fill:#a2b52f;fill-opacity:1;stroke:none" />
- <path
- d="m 406.86607,533.58539 0.58036,2.8125 0.625,0.80358 0.75893,2.36607 0.80357,0.53571 0.58036,-2.27678 0.89285,-0.89286 0.71429,-0.89286 -1.16072,-1.16071 -0.98214,-1.25 -1.20536,-0.66965 -1.83035,-0.26785 -0.80357,-1.11607 -0.84822,-0.66965 1.875,-0.75893 0.625,-1.02678 0.9375,-0.66964 1.38393,-0.89286 0.58036,-0.98214 -2.09822,-0.40179 -0.84821,-0.80357 -1.16072,1.42857 -1.16071,1.38393 -0.3125,1.69643 -0.53571,1.02678 2.09821,1.78572 z"
- id="path7014"
- style="fill:#a2b52f;fill-opacity:1;stroke:none" />
- <path
- d="m 410.16964,524.29968 1.20536,1.875 1.20536,-0.9375 1.5625,-0.98214 -0.22322,-0.9375 -2.76785,0.0893 z"
- id="path7016"
- style="fill:#a2b52f;fill-opacity:1;stroke:none" />
- <path
- d="m 415.125,527.82647 1.42857,-0.40179 -0.0446,-1.78571 1.33929,-0.35715 1.02678,0.35715 0.89286,1.25 1.29464,1.60714 0.75893,1.83036 -0.13393,1.11607 -1.42857,1.02678 -0.98214,-1.47321 -0.89286,-1.83036 -1.33929,-0.75893 z"
- id="path7018"
- style="fill:#a2b52f;fill-opacity:1;stroke:none" />
- </g>
- </g>
- <g
- transform="translate(-699.478,-632.13055)"
- id="layer1-4">
- <text
- x="861.17706"
- y="650.73999"
- transform="scale(0.90019997,1.1108643)"
- id="text4348"
- xml:space="preserve"
- style="font-size:15.19591999px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient4379);fill-opacity:1;stroke:#1d201d;stroke-width:0.48778871;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"><tspan
- x="861.17706"
- y="650.73999"
- id="tspan4350"
- style="font-weight:bold;fill:url(#linearGradient4379);fill-opacity:1;stroke:#1d201d;stroke-width:0.48778871;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">W</tspan></text>
- <path
- d="m -4.6088209,10.604217 a 10.196227,10.196227 0 1 1 -20.3924541,0 10.196227,10.196227 0 1 1 20.3924541,0 z"
- transform="matrix(0.87014489,0,0,0.87014489,795.88291,706.29079)"
- id="path3836"
- style="fill:none;stroke:#c32f2f;stroke-width:2.06862092;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="M 2.6516504,8.5523442 19.571706,13.981914"
- transform="translate(771.85712,704.2193)"
- id="path4346"
- style="fill:none;stroke:#c32f2f;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- <g
- transform="translate(-817.01734,-569.02475)"
- id="layer1-12">
- <g
- transform="translate(65.25943,0.00449032)"
- id="g6449">
- <rect
- width="16.141386"
- height="19.087818"
- x="824.81775"
- y="714.24237"
- id="rect5927"
- style="opacity:0.87735847;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#cccdca;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="13.214286"
- height="16.294643"
- x="826.21429"
- y="715.54968"
- id="rect6437"
- style="opacity:0.87735847;fill:url(#linearGradient6454);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- d="m 835.61419,718.03653 c 0,0 -2.85604,2.15041 -2.88205,5.68281 -0.0434,5.8954 6.51786,6.38393 6.51786,6.38393 l 0,2.99107 5.51339,-5.51339 -5.55803,-5.55804 0,3.83929 c 0,0 -4.49554,0.91071 -4.71875,-2.39286 -0.1521,-1.68723 -0.19967,-3.02945 1.12758,-5.43281 z"
- id="path6447"
- style="fill:#127ea5;fill-opacity:1;stroke:#003553;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
- <g
- transform="matrix(1.0182686,0,0,1.0182686,-766.56233,-516.75536)"
- id="layer1-61">
- <g
- transform="matrix(0.87945853,0,0,0.87945853,60.516821,83.916706)"
- id="g11129">
- <rect
- width="14.18633"
- height="17.014757"
- x="869.68085"
- y="725.56744"
- id="rect10538"
- style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#878984;stroke-linejoin:round;stroke-opacity:1" />
- <rect
- width="11.048544"
- height="14.097941"
- x="871.19214"
- y="726.98163"
- id="rect11048"
- style="fill:#eaeaea;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- width="8.9714174"
- height="1.1048543"
- x="872.24414"
- y="729.05878"
- id="rect11050"
- style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- width="8.9714174"
- height="1.1048543"
- x="872.24414"
- y="731.05878"
- id="rect11052"
- style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- width="8.9714174"
- height="1.1048543"
- x="872.24414"
- y="735.05878"
- id="rect11054"
- style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <g
- id="g11125">
- <path
- d="m 880.00066,736.45436 9.30287,-9.43545 2.45278,2.34229 -9.30287,9.25867 -3.97748,1.67938 z"
- id="path11075"
- style="fill:url(#linearGradient11142);fill-opacity:1;stroke:#804f01;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 878.68802,738.78561 -1.02751,2.33124 2.37543,-1.0938 z"
- id="path11085"
- style="fill:#000000;fill-opacity:1;stroke:none" />
- </g>
- <g
- id="g11121">
- <path
- d="m 870.39783,732.42847 -2.45576,2.45578 0,1.99046 1.62855,0 2.63673,-2.63672"
- id="path11097"
- style="fill:url(#linearGradient11144);fill-opacity:1;stroke:#878984;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 11.91033,5.9796119 a 4.9276505,4.9276505 0 1 1 -9.8553011,0 4.9276505,4.9276505 0 1 1 9.8553011,0 z"
- transform="matrix(0.92061147,0,0,0.92061147,867.88725,724.95103)"
- id="path11101"
- style="fill:url(#radialGradient11146);fill-opacity:1;fill-rule:nonzero;stroke:#878984;stroke-opacity:1" />
- </g>
- </g>
- </g>
- <g
- transform="matrix(-1,0,0,1,94.095014,288.15611)"
- id="g4230">
- <rect
- width="11.551277"
- height="2.0031219"
- x="7.7045889"
- y="10.508148"
- id="rect8987-09"
- style="fill:url(#linearGradient3195-9);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="11.551277"
- height="2.0031219"
- x="7.706481"
- y="3.4537961"
- id="rect8987-2-7"
- style="fill:url(#linearGradient3192-4);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="11.551277"
- height="2.0031219"
- x="7.7958364"
- y="17.516296"
- id="rect8987-5-0"
- style="fill:url(#linearGradient3189-4);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="2.2180145"
- height="2.2927809"
- x="2.3276966"
- y="3.282562"
- id="rect3039-8"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="2.2180145"
- height="2.2927809"
- x="2.3276966"
- y="10.337555"
- id="rect3039-7-6"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="2.2180145"
- height="2.2927809"
- x="2.3276966"
- y="17.345551"
- id="rect3039-6-2"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- <g
- transform="translate(-38.164291,3.0531433)"
- id="g4305">
- <text
- x="126.79857"
- y="363.06299"
- id="text8953-2"
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
- x="126.79857"
- y="363.06299"
- id="tspan8955-7"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">1</tspan></text>
- <text
- x="127.04527"
- y="370.06119"
- id="text8953-1-3"
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
- x="127.04527"
- y="370.06119"
- id="tspan8955-5-4"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">2</tspan></text>
- <text
- x="127.01372"
- y="377.03754"
- id="text8953-8-8"
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><tspan
- x="127.01372"
- y="377.03754"
- id="tspan8955-55-0"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">3</tspan></text>
- <rect
- width="11.551277"
- height="2.0031219"
- x="-124.33952"
- y="367.58789"
- transform="scale(-1,1)"
- id="rect8987-7"
- style="fill:url(#linearGradient4316);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="11.551277"
- height="2.0031219"
- x="-124.33763"
- y="360.53354"
- transform="scale(-1,1)"
- id="rect8987-2-6"
- style="fill:url(#linearGradient4318);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="11.551277"
- height="2.0031219"
- x="-124.24828"
- y="374.59604"
- transform="scale(-1,1)"
- id="rect8987-5-81"
- style="fill:url(#linearGradient4320);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- <g
- transform="matrix(-1,0,0,1,94.28683,432.19934)"
- id="g4372">
- <rect
- width="9.2080336"
- height="2.0841758"
- x="9.9951382"
- y="10.467622"
- id="rect8987-6"
- style="fill:url(#linearGradient3195-1);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="16.296982"
- height="1.8709884"
- x="2.8947093"
- y="3.5198629"
- id="rect8987-2-3"
- style="fill:url(#linearGradient3192-43);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="16.168335"
- height="1.874174"
- x="3.1143055"
- y="17.58077"
- id="rect8987-5-7"
- style="fill:url(#linearGradient3189-2);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- d="m 6.1401918,11.71699 -2.6276419,1.51707 -2.6276417,1.51707 0,-3.03414 0,-3.0341389 2.6276419,1.5170699 z"
- transform="matrix(0.90902794,0,0,0.90902794,2.2305609,0.83286798)"
- id="path3978-7"
- style="fill:url(#linearGradient3986-8);fill-opacity:1;fill-rule:nonzero;stroke:#e0926b;stroke-width:0.89300001;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- <g
- transform="matrix(-1,0,0,1,982.4349,-208.7368)"
- id="layer1-53">
- <g
- transform="translate(65.25943,0.00449032)"
- id="g6449-3">
- <rect
- width="16.141386"
- height="19.087818"
- x="824.81775"
- y="714.24237"
- id="rect5927-5"
- style="opacity:0.87735847;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#cccdca;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- width="13.214286"
- height="16.294643"
- x="826.21429"
- y="715.54968"
- id="rect6437-5"
- style="opacity:0.87735847;fill:url(#linearGradient6454-9);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- d="m 835.61419,718.03653 c 0,0 -2.85604,2.15041 -2.88205,5.68281 -0.0434,5.8954 6.51786,6.38393 6.51786,6.38393 l 0,2.99107 5.51339,-5.51339 -5.55803,-5.55804 0,3.83929 c 0,0 -4.49554,0.91071 -4.71875,-2.39286 -0.1521,-1.68723 -0.19967,-3.02945 1.12758,-5.43281 z"
- id="path6447-9"
- style="fill:#127ea5;fill-opacity:1;stroke:#003553;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-big.svg b/extensions/WikiEditor/modules/images/toolbar/format-big.svg
deleted file mode 100644
index 68d0193a..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-big.svg
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg11148"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-big.svg">
- <defs
- id="defs11150">
- <filter
- inkscape:collect="always"
- id="filter11711">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.40047554"
- id="feGaussianBlur11713" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter11735">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.22248641"
- id="feGaussianBlur11737" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.627418"
- inkscape:cx="3.4653374"
- inkscape:cy="10.767942"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata11153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-823.28571,-707.07648)">
- <text
- xml:space="preserve"
- style="font-size:10.12465572px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.70751727;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="835.85748"
- y="718.30353"
- id="text11171"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan11173"
- x="835.85748"
- y="718.30353"
- style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.70751727;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">+</tspan></text>
- <text
- sodipodi:linespacing="125%"
- id="text11693"
- y="725.07898"
- x="825.39417"
- style="font-size:18.17164040000000114px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- xml:space="preserve"><tspan
- style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif"
- y="725.07898"
- x="825.39417"
- id="tspan11695"
- sodipodi:role="line">A</tspan></text>
- <path
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
- id="text11167"
- inkscape:connector-curvature="0"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
- <path
- style="font-size:19.56149483000000089px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.6918239"
- d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
- id="text11683"
- inkscape:connector-curvature="0"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg
deleted file mode 100644
index 83a0cb81..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-bold-A.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-bold-a.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3809">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30164062"
- id="feGaussianBlur3811" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3837">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.4021875"
- id="feGaussianBlur3839" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.4"
- inkscape:cx="10.896612"
- inkscape:cy="10.315032"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="566.91028"
- y="492.98608"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="566.91028"
- y="492.98608"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">A</tspan></text>
- <path
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3809);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 532.75446,516.10773 -4.46875,12.65625 -1,0 0,1.125 0.5,0 0,-0.625 1,0 4.46875,-12.65625 1.625,0 -0.1875,-0.5 -1.9375,0 z m 0.4375,3.96875 -0.15625,0.46875 1.46875,4.28125 -3,0 -0.1875,0.5 3.6875,0 -1.8125,-5.25 z m 1.90625,6.375 0.8125,2.3125 -1.1875,0 0,1.125 0.5,0 0,-0.625 1.1875,0 -1,-2.8125 -0.3125,0 z m -5,2.3125 -0.1875,0.5 0.9375,0 0,-0.5 -0.75,0 z m 9.40625,0 0.1875,0.5 0.625,0 0,-0.5 -0.8125,0 z"
- id="text3023"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3837);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 534.37946,516.10773 4.3125,12.15625 0.3125,0 -4.3125,-12.15625 -0.3125,0 z m -2.1875,2.9375 -1.875,5.28125 0.6875,0 1.53125,-4.28125 -0.34375,-1 z m -2.28125,6.40625 -1,2.8125 0.6875,0 0.8125,-2.3125 4.1875,0 -0.1875,-0.5 -4.5,0 z m 0.4375,3.3125 0,0.625 -3.0625,0 0,0.5 3.5625,0 0,-1.125 -0.5,0 z m 9.46875,0 0,0.625 -5.09375,0 0,0.5 5.59375,0 0,-1.125 -0.5,0 z"
- id="text3027"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg
deleted file mode 100644
index ef04e499..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-bold-B.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-bold-b.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter5232">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.29260706"
- id="feGaussianBlur5234" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter5240">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.35243056"
- id="feGaussianBlur5242" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3772">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.380625"
- id="feGaussianBlur3774" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3776">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.28441406"
- id="feGaussianBlur3778" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.4"
- inkscape:cx="1.9680403"
- inkscape:cy="10.315032"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="566.91028"
- y="492.98608"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="566.91028"
- y="492.98608"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">B</tspan></text>
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:1;filter:url(#filter3772)"
- d="m 528.19196,516.7064 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.09375,0 0,4.65625 0.5,0 0,-4.15625 1.0625,0 c 0.82594,10e-6 1.44511,0.15919 1.875,0.4375 -0.0892,-0.14324 -0.18651,-0.26897 -0.3125,-0.375 -0.42665,-0.36351 -1.11857,-0.56249 -2.0625,-0.5625 l -1.0625,0 z m 6.28125,0.25 c 0.39409,0.52808 0.59374,1.22535 0.59375,2.0625 -10e-6,0.81947 -0.27463,1.45692 -0.78125,1.9375 -0.50131,0.48059 -1.22683,0.78303 -2.21875,0.90625 0.52107,0.0562 0.95953,0.16568 1.375,0.3125 0.55687,-0.16157 1.00754,-0.39644 1.34375,-0.71875 0.50662,-0.48058 0.78124,-1.11803 0.78125,-1.9375 -10e-6,-1.13984 -0.36315,-1.99564 -1.09375,-2.5625 z m -6.28125,5.5 0,5.8125 0.5,0 0,-5.3125 1.15625,0 c 0.83936,10e-6 1.48442,0.1937 1.96875,0.53125 -0.0691,-0.0954 -0.13581,-0.19985 -0.21875,-0.28125 -0.49597,-0.48674 -1.24208,-0.74999 -2.25,-0.75 l -1.15625,0 z m 6.90625,0.84375 c 0.44148,0.56299 0.68749,1.25448 0.6875,2.09375 -10e-6,1.36783 -0.44782,2.38431 -1.34375,3.03125 -0.89062,0.64694 -2.31489,0.96875 -4.21875,0.96875 l -6.125,0 0,0.5 6.625,0 c 1.90386,0 3.32813,-0.32181 4.21875,-0.96875 0.89593,-0.64694 1.34374,-1.66342 1.34375,-3.03125 -10e-6,-1.01046 -0.32881,-1.79627 -0.96875,-2.40625 -0.067,-0.0638 -0.14565,-0.12894 -0.21875,-0.1875 z"
- id="text5199"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.8;filter:url(#filter3776)"
- d="m 528.19654,516.11548 0,1.09375 0.5,0 0,-0.59375 7.09375,0 c 1.43448,10e-6 2.51961,0.26222 3.25,0.8125 -0.13699,-0.17753 -0.2861,-0.32704 -0.46875,-0.46875 -0.73063,-0.56683 -1.82536,-0.84374 -3.28125,-0.84375 l -7.09375,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 6.5,0.4375 c 0.21673,0.34787 0.34374,0.80765 0.34375,1.375 -10e-6,0.79483 -0.24487,1.36184 -0.6875,1.75 -0.44264,0.38201 -1.11399,0.59376 -2.03125,0.59375 l -0.5625,0 0,0.5 1.0625,0 c 0.91726,10e-6 1.58861,-0.21174 2.03125,-0.59375 0.44263,-0.38816 0.68749,-0.95517 0.6875,-1.75 -10e-6,-0.80097 -0.22429,-1.38647 -0.65625,-1.75 -0.0533,-0.0454 -0.12609,-0.0852 -0.1875,-0.125 z m 1.8125,4.53125 c -0.27347,0.0794 -0.54832,0.14692 -0.875,0.1875 1.07435,0.11586 1.90579,0.43638 2.53125,0.9375 -0.0901,-0.11484 -0.17283,-0.20916 -0.28125,-0.3125 -0.36206,-0.34509 -0.83372,-0.62123 -1.375,-0.8125 z m -1.625,1.3125 c 0.34394,0.47485 0.53124,1.0853 0.53125,1.90625 -10e-6,0.97966 -0.22813,1.71924 -0.71875,2.1875 -0.49064,0.46826 -1.26266,0.6875 -2.28125,0.6875 l -0.65625,0 0,0.5 1.15625,0 c 1.01859,0 1.79061,-0.21924 2.28125,-0.6875 0.49062,-0.46826 0.71874,-1.20784 0.71875,-2.1875 -10e-6,-0.98581 -0.25404,-1.70075 -0.75,-2.1875 -0.0829,-0.0814 -0.18398,-0.15096 -0.28125,-0.21875 z"
- id="text5217"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg
deleted file mode 100644
index 8c8de992..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-bold-F.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-bold-f.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3809">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30164062"
- id="feGaussianBlur3811" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3837">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.4021875"
- id="feGaussianBlur3839" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3882">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.27492187"
- id="feGaussianBlur3884" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3886">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.3665625"
- id="feGaussianBlur3888" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.4"
- inkscape:cx="12.662998"
- inkscape:cy="19.259521"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="566.91028"
- y="492.98608"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="566.91028"
- y="492.98608"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">F</tspan></text>
- <path
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3886);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 538.34821,516.10773 0,2.75 -0.59375,0 0,0.5 1.09375,0 0,-3.25 -0.5,0 z m -10.15625,0.59375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.125,0.15625 0,4.4375 0.5,0 0,-3.9375 4.4375,0 0,-0.5 -4.9375,0 z m 4.125,3.1875 0,4.25 -0.59375,0 0,0.5 1.09375,0 0,-4.75 -0.5,0 z m -4.125,2.5 0,5.71875 0.5,0 0,-5.21875 2.53125,0 0,-0.5 -3.03125,0 z m 1.875,6.21875 0,0.625 -6,0 0,0.5 6.5,0 0,-1.125 -0.5,0 z"
- id="text3860"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.80000000000000004;filter:url(#filter3882)"
- d="m 528.19196,516.10773 0,1.09375 0.5,0 0,-0.59375 10.15625,0 0,-0.5 -10.65625,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 8.03125,0.15625 0,1.5 0.5,0 0,-1.5 -0.5,0 z m -1.90625,2.1875 0,1.75 -2.53125,0 0,0.5 3.03125,0 0,-1.75 0.59375,0 0,-0.5 -1.09375,0 z m 0,3.5 0,1.25 0.5,0 0,-1.25 -0.5,0 z m -2.53125,5.21875 0,0.5 1.375,0 0,-0.5 -1.375,0 z"
- id="text3864"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg
deleted file mode 100644
index 4c924a63..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-bold-G.svg
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-bold-f.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3809">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30164062"
- id="feGaussianBlur3811" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3837">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.4021875"
- id="feGaussianBlur3839" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3882">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.27492187"
- id="feGaussianBlur3884" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3886">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.3665625"
- id="feGaussianBlur3888" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3908">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.35953125"
- id="feGaussianBlur3910" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3912">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.28933594"
- id="feGaussianBlur3914" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.4"
- inkscape:cx="16.234427"
- inkscape:cy="13.902379"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="566.91028"
- y="492.98608"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="566.91028"
- y="492.98608"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">G</tspan></text>
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter3908)"
- d="m 534.62946,516.45148 c -1.23726,1e-5 -2.13746,0.49527 -2.71875,1.46875 -0.57597,0.96735 -0.875,2.50505 -0.875,4.59375 0,2.07022 0.28912,3.58285 0.84375,4.5625 0.20798,0.36506 0.45502,0.67809 0.75,0.90625 -0.0944,-0.12162 -0.16884,-0.26379 -0.25,-0.40625 -0.55463,-0.97965 -0.84375,-2.49228 -0.84375,-4.5625 0,-2.0887 0.29903,-3.6264 0.875,-4.59375 0.58129,-0.97348 1.48149,-1.46874 2.71875,-1.46875 0.86746,1e-5 1.55891,0.2273 2.09375,0.625 -0.076,-0.0954 -0.13567,-0.2008 -0.21875,-0.28125 -0.55997,-0.54835 -1.35641,-0.84374 -2.375,-0.84375 z m 4.59375,0.375 0,3.09375 -0.65625,0 c 0.0425,0.16552 0.0895,0.31967 0.125,0.5 l 1.03125,0 0,-3.375 c -0.16821,-0.0805 -0.33222,-0.1465 -0.5,-0.21875 z m 0.40625,6.625 0,4.78125 c -0.89595,0.48059 -1.79157,0.82837 -2.6875,1.0625 -0.89062,0.23413 -1.81674,0.375 -2.75,0.375 -1.75604,0 -3.19957,-0.46844 -4.3125,-1.40625 1.17325,1.2754 2.76464,1.90625 4.8125,1.90625 0.93326,0 1.85938,-0.14087 2.75,-0.375 0.89593,-0.23413 1.79155,-0.58191 2.6875,-1.0625 l 0,-5.28125 -0.5,0 z m -3.8125,0.59375 0,0.5 0.9375,0 0,-0.5 -0.9375,0 z"
- id="text3890"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter3912);opacity:0.80000000000000004"
- d="m 534.69196,515.85773 c -2.04786,1e-5 -3.63925,0.63086 -4.8125,1.90625 -1.16792,1.27541 -1.78125,3.02575 -1.78125,5.25 0,2.2181 0.61333,3.9746 1.78125,5.25 0.12571,0.13665 0.23925,0.25299 0.375,0.375 -1.1007,-1.26488 -1.65625,-2.97168 -1.65625,-5.125 0,-2.22425 0.58208,-3.97459 1.75,-5.25 1.17325,-1.27539 2.79589,-1.90624 4.84375,-1.90625 0.85327,1e-5 1.70463,0.0841 2.53125,0.28125 0.66053,0.15756 1.33264,0.40012 2,0.6875 l 0,-0.28125 c -0.83729,-0.40048 -1.6734,-0.70907 -2.5,-0.90625 -0.82662,-0.19715 -1.67798,-0.28124 -2.53125,-0.28125 z m 3.03125,2.21875 c 0.43644,0.5474 0.76436,1.30482 0.96875,2.34375 l 0.375,0 c -0.24482,-0.95424 -0.58532,-1.66293 -1.0625,-2.125 -0.0831,-0.0814 -0.18807,-0.14946 -0.28125,-0.21875 z m -1.90625,5.375 0,1.09375 0.5,0 0,-0.59375 3.8125,0 0,-0.5 -4.3125,0 z m 1.4375,1.59375 0,3.28125 c -0.31466,0.23413 -0.67854,0.41418 -1.0625,0.53125 -0.38398,0.11707 -0.77079,0.1875 -1.21875,0.1875 -0.71603,0 -1.32688,-0.16866 -1.8125,-0.53125 0.54902,0.6868 1.32703,1.03125 2.3125,1.03125 0.44796,0 0.83477,-0.0704 1.21875,-0.1875 0.38396,-0.11707 0.74784,-0.29712 1.0625,-0.53125 l 0,-3.78125 -0.5,0 z"
- id="text3894"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg
deleted file mode 100644
index 69c9c5a1..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-bold-N.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-bold-G.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3908">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.35953125"
- id="feGaussianBlur3910" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3912">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.28933594"
- id="feGaussianBlur3914" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3953">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30832031"
- id="feGaussianBlur3955" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3973">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.41109375"
- id="feGaussianBlur3975" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.4"
- inkscape:cx="18.020141"
- inkscape:cy="12.116664"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="566.91028"
- y="492.98608"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="566.91028"
- y="492.98608"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">N</tspan></text>
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter3973)"
- d="m 531.75446,516.10773 6.84375,9.25 0,-0.1875 -6.71875,-9.0625 -0.125,0 z m 9.5,0 0,0.59375 -1.53125,0 0,12.6875 -1.96875,0 0.375,0.5 2.09375,0 0,-12.6875 1.53125,0 0,-1.09375 -0.5,0 z m -13.125,0.59375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 9.4375,0 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m -7.28125,2.71875 0,8.84375 0.5,0 0,-8.15625 -0.5,-0.6875 z m 1.53125,9.34375 0,0.625 -3.6875,0 0,0.5 4.1875,0 0,-1.125 -0.5,0 z"
- id="text3939"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter3953);opacity:0.8"
- d="m 528.12946,516.10773 0,1.09375 0.5,0 0,-0.59375 3.625,0 -0.375,-0.5 -3.75,0 z m 9.4375,0 0,1.09375 0.5,0 0,-0.59375 3.6875,0 0,-0.5 -4.1875,0 z m -7.90625,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 9.4375,0 0,7.96875 0.5,0.6875 0,-8.65625 -0.5,0 z m -7.8125,2.71875 0,0.1875 6.84375,9.28125 0.125,0 -6.96875,-9.46875 z m 0,8.34375 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z"
- id="text3935"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg
deleted file mode 100644
index 96d36e6d..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-bold-P.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-bold-N.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3953">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30832031"
- id="feGaussianBlur3955" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3973">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.41109375"
- id="feGaussianBlur3975" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4018">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.27"
- id="feGaussianBlur4020" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4022">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.36515625"
- id="feGaussianBlur4024" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.4"
- inkscape:cx="15.564784"
- inkscape:cy="10.33095"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="566.91028"
- y="492.98608"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="566.91028"
- y="492.98608"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">P</tspan></text>
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4022)"
- d="m 528.19196,516.70148 0,0.5 1.03125,0 0,-0.5 -1.03125,0 z m 4.09375,0 0,5.875 0.5,0 0,-5.375 0.90625,0 c 0.46699,1e-5 0.88043,0.13824 1.21875,0.375 -0.0173,-0.0237 -0.0444,-0.0395 -0.0625,-0.0625 -0.41065,-0.52987 -0.95764,-0.81249 -1.65625,-0.8125 l -0.90625,0 z m 5.625,0.3125 c 0.59493,0.68939 0.93749,1.55688 0.9375,2.625 -10e-6,1.23228 -0.39823,2.19814 -1.1875,2.9375 -0.78396,0.73321 -1.83368,1.09376 -3.15625,1.09375 l -2.21875,0 0,4.59375 0.5,0 0,-4.09375 2.21875,0 c 1.32257,1e-5 2.37229,-0.36054 3.15625,-1.09375 0.78927,-0.73936 1.18749,-1.70522 1.1875,-2.9375 -10e-6,-1.2261 -0.40356,-2.21045 -1.1875,-2.9375 -0.0765,-0.0715 -0.16834,-0.12295 -0.25,-0.1875 z m -3.6875,11.75 0,0.625 -6.03125,0 0,0.5 6.53125,0 0,-1.125 -0.5,0 z"
- id="text4000"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.80000000000000004;filter:url(#filter4018)"
- d="m 528.19196,516.10773 0,1.09375 0.5,0 0,-0.59375 6.8125,0 c 1.19835,1e-5 2.15089,0.30914 2.90625,0.90625 -0.088,-0.10197 -0.14899,-0.21882 -0.25,-0.3125 -0.78396,-0.73319 -1.82835,-1.09374 -3.15625,-1.09375 l -6.8125,0 z m 1.53125,1.59375 0,11.0625 -1.53125,0 0,1.125 0.5,0 0,-0.625 1.53125,0 0,-11.5625 -0.5,0 z m 5.6875,0.375 c 0.37529,0.51597 0.56249,1.21431 0.5625,2.0625 -10e-6,0.89341 -0.20904,1.58897 -0.625,2.125 -0.41065,0.52988 -0.96297,0.81251 -1.65625,0.8125 l -0.40625,0 0,0.5 0.90625,0 c 0.69328,1e-5 1.2456,-0.28262 1.65625,-0.8125 0.41596,-0.53603 0.62499,-1.23159 0.625,-2.125 -10e-6,-0.88723 -0.21437,-1.60127 -0.625,-2.125 -0.13615,-0.17567 -0.2697,-0.32007 -0.4375,-0.4375 z m -2.125,10.6875 0,0.5 1.4375,0 0,-0.5 -1.4375,0 z"
- id="text3996"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg
deleted file mode 100644
index 2ef715af..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-bold-V.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-bold-P.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4018">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.27"
- id="feGaussianBlur4020" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4022">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.36515625"
- id="feGaussianBlur4024" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4063">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30199219"
- id="feGaussianBlur4065" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4067">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.40265625"
- id="feGaussianBlur4069" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.4"
- inkscape:cx="14.448713"
- inkscape:cy="13.902379"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="566.91028"
- y="492.98608"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="566.91028"
- y="492.98608"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">V</tspan></text>
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4067)"
- d="m 532.44196,516.10773 0,0.59375 -1.1875,0 3.25,9.15625 0.15625,-0.46875 -2.90625,-8.1875 1.1875,0 0,-1.09375 -0.5,0 z m 7.4375,0 0,0.59375 -1,0 -4.5,12.6875 -1.59375,0 0.1875,0.5 1.875,0 4.53125,-12.6875 1,0 0,-1.09375 -0.5,0 z m -12.5625,0.59375 0,0.5 0.8125,0 -0.1875,-0.5 -0.625,0 z m 9.5,0 0,0.5 0.75,0 0.1875,-0.5 -0.9375,0 z"
- id="text4049"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4063);opacity:0.8"
- d="m 527.31696,516.10773 0,1.09375 0.5,0 0,-0.59375 5.125,0 0,-0.5 -5.625,0 z m 9.5,0 0,1.09375 0.5,0 0,-0.59375 3.0625,0 0,-0.5 -3.5625,0 z m -8.1875,1.59375 4.34375,12.1875 0.3125,0 -4.34375,-12.1875 -0.3125,0 z m 9.4375,0 -2.90625,8.1875 0.34375,0.96875 3.25,-9.15625 -0.6875,0 z"
- id="text4045"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-bold.svg b/extensions/WikiEditor/modules/images/toolbar/format-bold.svg
deleted file mode 100644
index 83a0cb81..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-bold.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-bold-a.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3809">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30164062"
- id="feGaussianBlur3811" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter3837">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.4021875"
- id="feGaussianBlur3839" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.4"
- inkscape:cx="10.896612"
- inkscape:cy="10.315032"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="566.91028"
- y="492.98608"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="566.91028"
- y="492.98608"
- style="font-weight:bold;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Bold">A</tspan></text>
- <path
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.8;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter3809);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 532.75446,516.10773 -4.46875,12.65625 -1,0 0,1.125 0.5,0 0,-0.625 1,0 4.46875,-12.65625 1.625,0 -0.1875,-0.5 -1.9375,0 z m 0.4375,3.96875 -0.15625,0.46875 1.46875,4.28125 -3,0 -0.1875,0.5 3.6875,0 -1.8125,-5.25 z m 1.90625,6.375 0.8125,2.3125 -1.1875,0 0,1.125 0.5,0 0,-0.625 1.1875,0 -1,-2.8125 -0.3125,0 z m -5,2.3125 -0.1875,0.5 0.9375,0 0,-0.5 -0.75,0 z m 9.40625,0 0.1875,0.5 0.625,0 0,-0.5 -0.8125,0 z"
- id="text3023"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3837);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 534.37946,516.10773 4.3125,12.15625 0.3125,0 -4.3125,-12.15625 -0.3125,0 z m -2.1875,2.9375 -1.875,5.28125 0.6875,0 1.53125,-4.28125 -0.34375,-1 z m -2.28125,6.40625 -1,2.8125 0.6875,0 0.8125,-2.3125 4.1875,0 -0.1875,-0.5 -4.5,0 z m 0.4375,3.3125 0,0.625 -3.0625,0 0,0.5 3.5625,0 0,-1.125 -0.5,0 z m 9.46875,0 0,0.625 -5.09375,0 0,0.5 5.59375,0 0,-1.125 -0.5,0 z"
- id="text3027"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-indent.svg b/extensions/WikiEditor/modules/images/toolbar/format-indent.svg
deleted file mode 100644
index 870274f9..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-indent.svg
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- width="22"
- height="22"
- id="svg8934"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-ulist.svg">
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- id="namedview3183"
- showgrid="false"
- inkscape:zoom="11.313708"
- inkscape:cx="-8.2391735"
- inkscape:cy="10.499687"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg8934" />
- <defs
- id="defs8936">
- <linearGradient
- id="linearGradient3980">
- <stop
- style="stop-color:#fcc273;stop-opacity:1;"
- offset="0"
- id="stop3982" />
- <stop
- style="stop-color:#fc916b;stop-opacity:1;"
- offset="1"
- id="stop3984" />
- </linearGradient>
- <linearGradient
- id="linearGradient9497">
- <stop
- id="stop9499"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503"
- xlink:href="#linearGradient9497"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-1"
- xlink:href="#linearGradient9497-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-1">
- <stop
- id="stop9499-6"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-7"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520"
- xlink:href="#linearGradient9497-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-3"
- xlink:href="#linearGradient9497-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-6">
- <stop
- id="stop9499-0"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-1"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-2"
- xlink:href="#linearGradient9497-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9497-6"
- id="linearGradient3189"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3098397,0,0,0.848111,-727.30273,-410.25386)"
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9497-1"
- id="linearGradient3192"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3202618,0,0,0.84666939,-733.334,-423.58754)"
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9497"
- id="linearGradient3195"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.74596729,0,0,0.94314201,-405.98488,-465.30597)"
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3980"
- id="linearGradient3986"
- x1="1.1049798"
- y1="13.152683"
- x2="6.6379666"
- y2="10.024924"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <metadata
- id="metadata8939">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <rect
- style="fill:url(#linearGradient3195);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89300001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect8987"
- y="10.467622"
- x="9.9951382"
- height="2.0841758"
- width="9.2080336" />
- <rect
- style="fill:url(#linearGradient3192);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.893;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect8987-2"
- y="3.5198629"
- x="2.8947093"
- height="1.8709884"
- width="16.296982" />
- <rect
- style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.893;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect8987-5"
- y="17.58077"
- x="3.1143055"
- height="1.874174"
- width="16.168335" />
- <path
- sodipodi:type="star"
- style="fill:url(#linearGradient3986);fill-opacity:1;fill-rule:nonzero;stroke:#e0926b;stroke-width:0.89300000999999984;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="path3978"
- sodipodi:sides="3"
- sodipodi:cx="2.6366694"
- sodipodi:cy="11.71699"
- sodipodi:r1="3.5035224"
- sodipodi:r2="1.7517612"
- sodipodi:arg1="0"
- sodipodi:arg2="1.0471976"
- inkscape:flatsided="false"
- inkscape:rounded="0"
- inkscape:randomized="0"
- d="m 6.1401918,11.71699 -2.6276419,1.51707 -2.6276417,1.51707 0,-3.03414 0,-3.0341389 2.6276419,1.5170699 z"
- inkscape:transform-center-x="-0.79619997"
- transform="matrix(0.90902794,0,0,0.90902794,2.2305609,0.83286798)" />
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg
deleted file mode 100644
index 0e484a13..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-italic-A.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-bold-V.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4063">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30199219"
- id="feGaussianBlur4065" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4067">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.40265625"
- id="feGaussianBlur4069" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4108">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.29320256"
- id="feGaussianBlur4110" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4112">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.3909375"
- id="feGaussianBlur4114" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="15.839192"
- inkscape:cx="10.63356"
- inkscape:cy="15.345202"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="569.04468"
- y="493.06223"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="569.04468"
- y="493.06223"
- style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">A</tspan></text>
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4108);opacity:0.8"
- d="m 535.78571,516.17023 -6.40625,12.8125 -1.0625,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.0625,0 6.40625,-12.8125 0.9375,0 -0.0937,-0.5 -1.34375,0 z m 0.375,2.75 -0.3125,0.625 0.90625,5.4375 -3.625,0 -0.25,0.5 4.375,0 -1.09375,-6.5625 z m 0.8125,7.53125 0.40625,2.53125 -1.3125,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.3125,0 -0.46875,-3.03125 -0.4375,0 z m -5.84375,2.53125 -0.25,0.5 0.71875,0 0.0937,-0.5 -0.5625,0 z m 8.53125,0 0.0937,0.5 0.59375,0 0.0625,-0.5 -0.75,0 z"
- id="text4090"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4112);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 536.72321,516.17023 2.03125,12.3125 0.40625,0 -2.03125,-12.3125 -0.40625,0 z m -1.5625,1.75 -3.28125,6.5625 0.75,0 2.71875,-5.4375 -0.1875,-1.125 z m -3.78125,7.53125 -1.5,3.03125 0.75,0 1.25,-2.53125 4.59375,0 -0.0625,-0.5 -5.03125,0 z m -0.28125,3.53125 -0.0625,0.5 -2.8125,0 -0.0625,0.5 3.375,0 0.15625,-1 -0.59375,0 z m 8.75,0 -0.0937,0.5 -3.78125,0 -0.0625,0.5 4.34375,0 0.15625,-1 -0.5625,0 z"
- id="text4094"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg
deleted file mode 100644
index d58e1deb..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-italic-C.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-italic.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4108">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.29320256"
- id="feGaussianBlur4110" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4112">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.3909375"
- id="feGaussianBlur4114" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4180">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.28407221"
- id="feGaussianBlur4182" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4184">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.35995908"
- id="feGaussianBlur4186" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="15.839192"
- inkscape:cx="30.773476"
- inkscape:cy="10.294439"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="567.37231"
- y="493.05362"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="567.37231"
- y="493.05362"
- style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">C</tspan></text>
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4184)"
- d="m 534.56696,516.42023 c -1.06685,0.11457 -1.95956,0.64601 -2.6875,1.5625 -0.83195,1.04128 -1.43994,2.56667 -1.78125,4.59375 -0.34131,2.02093 -0.26122,3.54632 0.21875,4.59375 0.20629,0.44755 0.49066,0.80731 0.84375,1.0625 -0.12875,-0.16736 -0.24717,-0.35298 -0.34375,-0.5625 -0.47997,-1.04743 -0.56006,-2.57282 -0.21875,-4.59375 0.34131,-2.02708 0.9493,-3.55247 1.78125,-4.59375 0.83194,-1.04742 1.88166,-1.56249 3.15625,-1.5625 0.85596,1e-5 1.50789,0.15034 2,0.5 -0.0471,-0.0641 -0.10373,-0.13005 -0.15625,-0.1875 -0.50131,-0.54835 -1.27183,-0.81249 -2.34375,-0.8125 -0.15932,0 -0.31634,-0.0164 -0.46875,0 z m 4.96875,0.4375 -0.5,2.9375 -0.40625,0 c 0.0125,0.1636 0.0304,0.32199 0.0312,0.5 l 0.875,0 0.53125,-3.1875 c -0.18373,-0.0945 -0.35168,-0.16682 -0.53125,-0.25 z m -1.4375,9.46875 c -0.53603,1.0345 -1.18715,1.83323 -2,2.40625 -0.93861,0.65927 -2.04326,1 -3.3125,1 -0.77862,0 -1.48046,-0.16068 -2.09375,-0.46875 -0.28043,-0.14086 -0.54208,-0.29859 -0.78125,-0.5 0.36218,0.42621 0.79506,0.75578 1.28125,1 0.61329,0.30807 1.31513,0.46875 2.09375,0.46875 1.26924,0 2.37389,-0.34073 3.3125,-1 0.94393,-0.66543 1.67936,-1.61852 2.25,-2.90625 l -0.75,0 z"
- id="text4162"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4180);opacity:0.8"
- d="m 535.81696,515.92023 c -1.75455,1e-5 -3.26659,0.65023 -4.5625,1.96875 -1.29058,1.31238 -2.10611,3.04335 -2.46875,5.1875 -0.18665,1.10905 -0.20649,2.11893 -0.0625,3 0.14399,0.87492 0.45753,1.65368 0.9375,2.34375 0.22577,0.32438 0.4661,0.60468 0.75,0.84375 -0.0947,-0.11143 -0.16379,-0.21989 -0.25,-0.34375 -0.47997,-0.69007 -0.79351,-1.46883 -0.9375,-2.34375 -0.14399,-0.88107 -0.12415,-1.89095 0.0625,-3 0.36264,-2.14415 1.17817,-3.87512 2.46875,-5.1875 1.29591,-1.31852 2.80795,-1.96874 4.5625,-1.96875 0.65061,1e-5 1.33262,0.0841 2.03125,0.28125 0.53784,0.15065 1.10607,0.38692 1.6875,0.65625 l 0.0312,-0.25 c -0.77863,-0.40048 -1.51481,-0.70907 -2.21875,-0.90625 -0.69863,-0.19715 -1.38064,-0.28124 -2.03125,-0.28125 z m 2.21875,2 c 0.40225,0.54813 0.62022,1.33803 0.625,2.375 l 0.4375,0 c -0.0691,-0.9005 -0.29465,-1.59857 -0.71875,-2.0625 -0.101,-0.11048 -0.21959,-0.22428 -0.34375,-0.3125 z m -0.65625,8.40625 c -0.42131,0.9735 -0.96372,1.69459 -1.625,2.1875 -0.65596,0.48675 -1.4219,0.71875 -2.3125,0.71875 -0.72676,0 -1.31284,-0.16146 -1.78125,-0.5 0.51111,0.66438 1.26314,1 2.28125,1 0.8906,0 1.65654,-0.232 2.3125,-0.71875 0.66128,-0.49291 1.20369,-1.214 1.625,-2.1875 l 0.71875,0 c 0.0864,-0.16682 0.17076,-0.32118 0.25,-0.5 l -1.46875,0 z"
- id="text4158"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg
deleted file mode 100644
index 25f31558..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-italic-K.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-italic-C.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4180">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.28407221"
- id="feGaussianBlur4182" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4184">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.35995908"
- id="feGaussianBlur4186" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4225">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30445256"
- id="feGaussianBlur4227" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4229">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.4059375"
- id="feGaussianBlur4231" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="15.839192"
- inkscape:cx="13.095807"
- inkscape:cy="7.7690577"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="567.41534"
- y="493.06223"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="567.41534"
- y="493.06223"
- style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">K</tspan></text>
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4225);opacity:0.8"
- d="m 529.97321,516.17023 -0.1875,1 0.59375,0 0.0937,-0.5 4.0625,0 0.0937,-0.5 -4.65625,0 z m 6.96875,0 -0.15625,1 0.5625,0 0.0937,-0.5 3.40625,0 0.0625,-0.5 -3.96875,0 z m -5.71875,1.5 -1.90625,11.3125 -1.5,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.5,0 2,-11.8125 -0.59375,0 z m 6.3125,0 -4.78125,4.125 -0.1875,1.09375 6.03125,-5.21875 -1.0625,0 z m -5.15625,6.25 -0.0312,0.1875 4.09375,5.875 0.15625,0 -4.21875,-6.0625 z m -0.84375,5.0625 -0.0937,0.5 0.96875,0 0.0625,-0.5 -0.9375,0 z m 6.65625,0 0.34375,0.5 0.75,0 0.0937,-0.5 -1.1875,0 z"
- id="text4207"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;filter:url(#filter4229);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 534.03571,516.17023 -0.0625,0.5 -1.53125,0 -0.875,5.21875 0.6875,-0.59375 0.6875,-4.125 1.53125,0 0.15625,-1 -0.59375,0 z m 6.3125,0 -0.0937,0.5 -1.34375,0 -6,5.1875 4.625,6.625 0.15625,0 -4.28125,-6.125 6,-5.1875 1.34375,0 0.15625,-1 -0.5625,0 z m -10.46875,0.5 -0.0937,0.5 0.9375,0 0.0937,-0.5 -0.9375,0 z m 6.96875,0 -0.0625,0.5 0.25,0 0.5625,-0.5 -0.75,0 z m -5.46875,6.25 -0.9375,5.5625 0.59375,0 0.8125,-4.875 -0.46875,-0.6875 z m 0.53125,6.0625 -0.0937,0.5 -4.09375,0 -0.0625,0.5 4.65625,0 0.15625,-1 -0.5625,0 z m 6.875,0 -0.0625,0.5 -2.625,0 0.34375,0.5 2.78125,0 0.15625,-1 -0.59375,0 z"
- id="text4211"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic-i.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic-i.svg
deleted file mode 100644
index c5183082..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-italic-i.svg
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg5250"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="Nowy dokument 15">
- <defs
- id="defs5252">
- <filter
- inkscape:collect="always"
- id="filter5867">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.23529697"
- id="feGaussianBlur5869" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter5879">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30769604"
- id="feGaussianBlur5881" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="15.839192"
- inkscape:cx="13.978787"
- inkscape:cy="12.402617"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata5255">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-840.42859,-692.79077)">
- <g
- id="g5883"
- transform="translate(-19.62505,-0.15625)">
- <text
- transform="scale(1.0721134,0.93273715)"
- sodipodi:linespacing="125%"
- id="text5269"
- y="762.1983"
- x="808.40424"
- style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#565758;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- xml:space="preserve"><tspan
- style="font-style:italic;font-weight:normal;fill:#565758;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic"
- y="762.1983"
- x="808.40424"
- id="tspan5271"
- sodipodi:role="line">I</tspan></text>
- <path
- inkscape:connector-curvature="0"
- id="text5273"
- d="m 875.11609,696.97827 -0.0937,0.5 -2.03125,0 -2.6875,11.96875 0.625,0 2.53125,-11.46875 2.0625,0 0.21875,-1 -0.625,0 z m -5.75,0.5 -0.125,0.5 1.4375,0 0.125,-0.5 -1.4375,0 z m 2.84375,12.46875 -0.0937,0.46875 -5.625,0 -0.125,0.5 6.25,0 0.21875,-0.96875 -0.625,0 z"
- style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter5879);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- <path
- inkscape:connector-curvature="0"
- id="text5282"
- d="m 869.49109,696.97827 -0.25,1 0.625,0 0.125,-0.5 5.625,0 0.125,-0.5 -6.25,0 z m 1.6875,1.5 -2.5625,11.46875 -2.03125,0 -0.21875,0.96875 0.625,0 0.0937,-0.46875 2.03125,0 2.6875,-11.96875 -0.625,0 z m 0.25,11.46875 -0.125,0.5 1.40625,0 0.125,-0.5 -1.40625,0 z"
- style="font-size:20.50770187px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;opacity:0.87735847;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter5867);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-italic.svg b/extensions/WikiEditor/modules/images/toolbar/format-italic.svg
deleted file mode 100644
index 23b01c9c..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-italic.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4055"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-italic-A.svg">
- <defs
- id="defs4057">
- <filter
- id="filter5056"
- inkscape:label="Diffuse light"
- inkscape:menu="ABCs"
- inkscape:menu-tooltip="Basic diffuse bevel to use for building textures"
- color-interpolation-filters="sRGB">
- <feGaussianBlur
- id="feGaussianBlur5058"
- stdDeviation="6"
- in="SourceGraphic"
- result="result0" />
- <feDiffuseLighting
- id="feDiffuseLighting5060"
- diffuseConstant="1"
- surfaceScale="10"
- result="result5">
- <feDistantLight
- id="feDistantLight5062"
- elevation="25"
- azimuth="235" />
- </feDiffuseLighting>
- <feComposite
- id="feComposite5064"
- in2="SourceGraphic"
- k1="1"
- in="result5"
- result="result4"
- operator="arithmetic"
- k2="0"
- k3="0.6" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4063">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.30199219"
- id="feGaussianBlur4065" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4067">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.40265625"
- id="feGaussianBlur4069" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4108">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.29320256"
- id="feGaussianBlur4110" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter4112">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.3909375"
- id="feGaussianBlur4114" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="15.839192"
- inkscape:cx="10.63356"
- inkscape:cy="15.345202"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4060">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-523.28571,-512.07648)">
- <text
- xml:space="preserve"
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#444444;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="569.04468"
- y="493.06223"
- id="text5195"
- sodipodi:linespacing="125%"
- transform="scale(0.93034878,1.0748657)"><tspan
- sodipodi:role="line"
- id="tspan5197"
- x="569.04468"
- y="493.06223"
- style="font-style:italic;font-weight:normal;fill:#444444;fill-opacity:1;-inkscape-font-specification:DejaVu Serif Italic">A</tspan></text>
- <path
- style="font-size:17.60938834999999969px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;filter:url(#filter4108);opacity:0.8"
- d="m 535.78571,516.17023 -6.40625,12.8125 -1.0625,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.0625,0 6.40625,-12.8125 0.9375,0 -0.0937,-0.5 -1.34375,0 z m 0.375,2.75 -0.3125,0.625 0.90625,5.4375 -3.625,0 -0.25,0.5 4.375,0 -1.09375,-6.5625 z m 0.8125,7.53125 0.40625,2.53125 -1.3125,0 -0.15625,1 0.5625,0 0.0937,-0.5 1.3125,0 -0.46875,-3.03125 -0.4375,0 z m -5.84375,2.53125 -0.25,0.5 0.71875,0 0.0937,-0.5 -0.5625,0 z m 8.53125,0 0.0937,0.5 0.59375,0 0.0625,-0.5 -0.75,0 z"
- id="text4090"
- inkscape:connector-curvature="0" />
- <path
- style="font-size:17.60938835px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4112);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 536.72321,516.17023 2.03125,12.3125 0.40625,0 -2.03125,-12.3125 -0.40625,0 z m -1.5625,1.75 -3.28125,6.5625 0.75,0 2.71875,-5.4375 -0.1875,-1.125 z m -3.78125,7.53125 -1.5,3.03125 0.75,0 1.25,-2.53125 4.59375,0 -0.0625,-0.5 -5.03125,0 z m -0.28125,3.53125 -0.0625,0.5 -2.8125,0 -0.0625,0.5 3.375,0 0.15625,-1 -0.59375,0 z m 8.75,0 -0.0937,0.5 -3.78125,0 -0.0625,0.5 4.34375,0 0.15625,-1 -0.5625,0 z"
- id="text4094"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-olist.svg b/extensions/WikiEditor/modules/images/toolbar/format-olist.svg
deleted file mode 100644
index 909cb94b..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-olist.svg
+++ /dev/null
@@ -1,202 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg8934"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="Nowy dokument 47">
- <defs
- id="defs8936">
- <linearGradient
- id="linearGradient9497">
- <stop
- style="stop-color:#757772;stop-opacity:1;"
- offset="0"
- id="stop9499" />
- <stop
- style="stop-color:#6d6f6a;stop-opacity:1;"
- offset="1"
- id="stop9501" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9497"
- id="linearGradient9503"
- x1="557.13837"
- y1="505.56084"
- x2="570.48212"
- y2="505.56084"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9497-1"
- id="linearGradient9503-1"
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-1">
- <stop
- style="stop-color:#757772;stop-opacity:1;"
- offset="0"
- id="stop9499-6" />
- <stop
- style="stop-color:#6d6f6a;stop-opacity:1;"
- offset="1"
- id="stop9501-7" />
- </linearGradient>
- <linearGradient
- y2="505.56085"
- x2="570.48212"
- y1="505.56085"
- x1="557.13837"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient9520"
- xlink:href="#linearGradient9497-1"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9497-6"
- id="linearGradient9503-3"
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-6">
- <stop
- style="stop-color:#757772;stop-opacity:1;"
- offset="0"
- id="stop9499-0" />
- <stop
- style="stop-color:#6d6f6a;stop-opacity:1;"
- offset="1"
- id="stop9501-1" />
- </linearGradient>
- <linearGradient
- y2="505.56085"
- x2="570.48212"
- y1="505.56085"
- x1="557.13837"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient9520-2"
- xlink:href="#linearGradient9497-6"
- inkscape:collect="always" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.98994949"
- inkscape:cx="-338.44907"
- inkscape:cy="56.302882"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata8939">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-550.42859,-494.21933)">
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
- x="551.98376"
- y="500.20258"
- id="text8953"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan8955"
- x="551.98376"
- y="500.20258"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">1</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
- x="552.23047"
- y="507.20078"
- id="text8953-1"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan8955-5"
- x="552.23047"
- y="507.20078"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">2</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
- x="552.19891"
- y="514.17712"
- id="text8953-8"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan8955-55"
- x="552.19891"
- y="514.17712"
- style="font-size:6px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial Bold">3</tspan></text>
- <rect
- style="fill:url(#linearGradient9503);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect8987"
- width="11.551277"
- height="2.0031219"
- x="558.13318"
- y="504.72748" />
- <rect
- style="fill:url(#linearGradient9520);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect8987-2"
- width="11.551277"
- height="2.0031219"
- x="558.13507"
- y="497.67313" />
- <rect
- style="fill:url(#linearGradient9520-2);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect8987-5"
- width="11.551277"
- height="2.0031219"
- x="558.22443"
- y="511.73563" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-small.svg b/extensions/WikiEditor/modules/images/toolbar/format-small.svg
deleted file mode 100644
index af49cc73..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-small.svg
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg11148"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-small.svg">
- <defs
- id="defs11150">
- <filter
- inkscape:collect="always"
- id="filter11711">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.40047554"
- id="feGaussianBlur11713" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter11735">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.22248641"
- id="feGaussianBlur11737" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.627418"
- inkscape:cx="9.4578669"
- inkscape:cy="10.767942"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata11153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-823.28571,-707.07648)">
- <text
- xml:space="preserve"
- style="font-size:15.80470848000000039px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999999;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="674.32245"
- y="890.06787"
- id="text11171"
- sodipodi:linespacing="125%"
- transform="scale(1.2392818,0.80691899)"><tspan
- sodipodi:role="line"
- id="tspan11173"
- x="674.32245"
- y="890.06787"
- style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999999;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">-</tspan></text>
- <text
- sodipodi:linespacing="125%"
- id="text11693"
- y="725.07898"
- x="825.39417"
- style="font-size:18.17164040000000114px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- xml:space="preserve"><tspan
- style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif"
- y="725.07898"
- x="825.39417"
- id="tspan11695"
- sodipodi:role="line">A</tspan></text>
- <path
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
- id="text11167"
- inkscape:connector-curvature="0"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
- <path
- style="font-size:19.56149483000000089px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.6918239"
- d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
- id="text11683"
- inkscape:connector-curvature="0"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-subscript.svg b/extensions/WikiEditor/modules/images/toolbar/format-subscript.svg
deleted file mode 100644
index f6d094da..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-subscript.svg
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg11148"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-subscript.svg">
- <defs
- id="defs11150">
- <filter
- inkscape:collect="always"
- id="filter11711">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.40047554"
- id="feGaussianBlur11713" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter11735">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.22248641"
- id="feGaussianBlur11737" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.627418"
- inkscape:cx="9.4578669"
- inkscape:cy="10.767942"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata11153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-823.28571,-707.07648)">
- <text
- xml:space="preserve"
- style="font-size:5.07652283000000004px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998000000003;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="676.90649"
- y="897.27142"
- id="text11171"
- sodipodi:linespacing="125%"
- transform="scale(1.2392818,0.80691898)"><tspan
- sodipodi:role="line"
- id="tspan11173"
- x="676.90649"
- y="897.27142"
- style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998000000003;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">▼</tspan></text>
- <text
- sodipodi:linespacing="125%"
- id="text11693"
- y="725.07898"
- x="825.39417"
- style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- xml:space="preserve"><tspan
- style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif"
- y="725.07898"
- x="825.39417"
- id="tspan11695"
- sodipodi:role="line">A</tspan></text>
- <path
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
- id="text11167"
- inkscape:connector-curvature="0"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
- <path
- style="font-size:19.56149483000000089px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.6918239"
- d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
- id="text11683"
- inkscape:connector-curvature="0"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-superscript.svg b/extensions/WikiEditor/modules/images/toolbar/format-superscript.svg
deleted file mode 100644
index 0c94275c..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-superscript.svg
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg11148"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-subscript.svg">
- <defs
- id="defs11150">
- <filter
- inkscape:collect="always"
- id="filter11711">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.40047554"
- id="feGaussianBlur11713" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter11735">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.22248641"
- id="feGaussianBlur11737" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.627418"
- inkscape:cx="9.4578669"
- inkscape:cy="10.767942"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata11153">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-823.28571,-707.07648)">
- <text
- xml:space="preserve"
- style="font-size:5.07652283px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="676.90649"
- y="884.87854"
- id="text11171"
- sodipodi:linespacing="125%"
- transform="scale(1.2392818,0.80691898)"><tspan
- sodipodi:role="line"
- id="tspan11173"
- x="676.90649"
- y="884.87854"
- style="font-weight:bold;fill:#969795;fill-opacity:1;stroke:#2e3436;stroke-width:0.76999998;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">▲</tspan></text>
- <text
- sodipodi:linespacing="125%"
- id="text11693"
- y="725.07898"
- x="825.39417"
- style="font-size:18.1716404px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#212222;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- xml:space="preserve"><tspan
- style="font-weight:normal;fill:#212222;fill-opacity:1;-inkscape-font-specification:DejaVu Serif"
- y="725.07898"
- x="825.39417"
- id="tspan11695"
- sodipodi:role="line">A</tspan></text>
- <path
- style="font-size:19.56149483px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter11735);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- d="m 831.84511,710.73333 4.90625,12.71875 0.28125,0 -4.875,-12.71875 -0.3125,0 z m -1.5,1.8125 -2.59375,6.78125 0.6875,0 2.25,-5.875 -0.34375,-0.90625 z m -3,7.78125 -1.1875,3.125 0.6875,0 1,-2.625 5.6875,0 -0.1875,-0.5 -6,0 z m 0.375,3.65625 0,0.5 -3.5,0 0,0.5 4,0 0,-1 -0.5,0 z m 10.40625,0 0,0.5 -4.65625,0 0,0.5 5.15625,0 0,-1 -0.5,0 z"
- id="text11167"
- inkscape:connector-curvature="0"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
- <path
- style="font-size:19.56149483000000089px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter11711);font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif;opacity:0.6918239"
- d="m 830.51875,710.76366 -5.0625,13.21875 -1.25,0 0,1.03125 0.5,0 0,-0.5 1.25,0 5.0625,-13.25 1.3125,0 -0.1875,-0.5 -1.625,0 z m 0.8125,2.8125 -0.15625,0.40625 2.28125,5.875 -4.53125,0 -0.1875,0.5 5.21875,0 -2.625,-6.78125 z m 2.6875,7.78125 1,2.625 -1.5625,0 0,1.03125 0.5,0 0,-0.5 1.5625,0 -1.1875,-3.15625 -0.3125,0 z m -6.6875,2.625 -0.1875,0.53125 1.0625,0 0,-0.53125 -0.875,0 z m 10.1875,0 0.21875,0.53125 0.875,0 0,-0.53125 -1.09375,0 z"
- id="text11683"
- inkscape:connector-curvature="0"
- transform="matrix(0.92894952,0,0,0.92894952,59.652113,51.58086)" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/format-ulist.svg b/extensions/WikiEditor/modules/images/toolbar/format-ulist.svg
deleted file mode 100644
index 21091807..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/format-ulist.svg
+++ /dev/null
@@ -1,204 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.1"
- width="22"
- height="22"
- id="svg8934"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="format-indent.svg">
- <sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- id="namedview3183"
- showgrid="false"
- inkscape:zoom="8"
- inkscape:cx="-21.518622"
- inkscape:cy="4.2550987"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1"
- inkscape:current-layer="svg8934" />
- <defs
- id="defs8936">
- <linearGradient
- id="linearGradient9497">
- <stop
- id="stop9499"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503"
- xlink:href="#linearGradient9497"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-1"
- xlink:href="#linearGradient9497-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-1">
- <stop
- id="stop9499-6"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-7"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520"
- xlink:href="#linearGradient9497-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.297231,40.402412)" />
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9503-3"
- xlink:href="#linearGradient9497-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.295341,47.45676)" />
- <linearGradient
- id="linearGradient9497-6">
- <stop
- id="stop9499-0"
- style="stop-color:#757772;stop-opacity:1"
- offset="0" />
- <stop
- id="stop9501-1"
- style="stop-color:#6d6f6a;stop-opacity:1"
- offset="1" />
- </linearGradient>
- <linearGradient
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085"
- id="linearGradient9520-2"
- xlink:href="#linearGradient9497-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,36.386517,54.464913)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9497-6"
- id="linearGradient3189"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.04207,-439.75442)"
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9497-1"
- id="linearGradient3192"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13136,-453.81692)"
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9497"
- id="linearGradient3195"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.93579965,0,0,0.90646314,-514.13325,-446.76257)"
- x1="557.13837"
- y1="505.56085"
- x2="570.48212"
- y2="505.56085" />
- </defs>
- <metadata
- id="metadata8939">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <rect
- style="fill:url(#linearGradient3195);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect8987"
- y="10.508148"
- x="7.7045889"
- height="2.0031219"
- width="11.551277" />
- <rect
- style="fill:url(#linearGradient3192);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect8987-2"
- y="3.4537961"
- x="7.706481"
- height="2.0031219"
- width="11.551277" />
- <rect
- style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.89313626;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect8987-5"
- y="17.516296"
- x="7.7958364"
- height="2.0031219"
- width="11.551277" />
- <rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect3039"
- y="3.282562"
- x="2.3276966"
- height="2.2927809"
- width="2.2180145" />
- <rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect3039-7"
- y="10.337555"
- x="2.3276966"
- height="2.2927809"
- width="2.2180145" />
- <rect
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.65534317;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect3039-6"
- y="17.345551"
- x="2.3276966"
- height="2.2927809"
- width="2.2180145" />
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-file.svg b/extensions/WikiEditor/modules/images/toolbar/insert-file.svg
deleted file mode 100644
index 012ffeff..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-file.svg
+++ /dev/null
@@ -1,206 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg8549"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="insert-file.svg">
- <defs
- id="defs8551">
- <linearGradient
- id="linearGradient9124">
- <stop
- style="stop-color:#ffedbc;stop-opacity:1;"
- offset="0"
- id="stop9126" />
- <stop
- style="stop-color:#f7eca1;stop-opacity:1;"
- offset="1"
- id="stop9128" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9100">
- <stop
- style="stop-color:#f4f5f4;stop-opacity:1;"
- offset="0"
- id="stop9102" />
- <stop
- style="stop-color:#f4f5f4;stop-opacity:0;"
- offset="1"
- id="stop9104" />
- </linearGradient>
- <linearGradient
- id="linearGradient9090">
- <stop
- style="stop-color:#766649;stop-opacity:1;"
- offset="0"
- id="stop9092" />
- <stop
- style="stop-color:#e6a540;stop-opacity:1;"
- offset="1"
- id="stop9094" />
- </linearGradient>
- <filter
- inkscape:collect="always"
- id="filter9146">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.0990625"
- id="feGaussianBlur9148" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9090"
- id="linearGradient9159"
- gradientUnits="userSpaceOnUse"
- x1="805.19128"
- y1="693.05548"
- x2="805.19128"
- y2="702.22186" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9124"
- id="radialGradient9161"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5528787,-1.1867658e-7,7.6106348e-8,0.99584878,755.02076,685.64122)"
- cx="30.513159"
- cy="16.796043"
- fx="30.513159"
- fy="16.796043"
- r="3.140625" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9100"
- id="radialGradient9163"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5459471,-0.89508966,0.42455384,0.72967733,750.53948,718.40122)"
- cx="31.993927"
- cy="9.0202503"
- fx="31.993927"
- fy="9.0202503"
- r="6.866059" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9100"
- id="radialGradient9185"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5459471,-0.89508966,0.42455384,0.72967733,727.79019,718.64005)"
- cx="31.993927"
- cy="9.0202503"
- fx="31.993927"
- fy="9.0202503"
- r="6.866059" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9124"
- id="radialGradient9190"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5528787,-1.1867658e-7,7.6106348e-8,0.99584878,732.27147,685.88005)"
- cx="30.513159"
- cy="16.796043"
- fx="30.513159"
- fy="16.796043"
- r="3.140625" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9090"
- id="linearGradient9194"
- gradientUnits="userSpaceOnUse"
- x1="805.19128"
- y1="693.05548"
- x2="805.19128"
- y2="702.22186"
- gradientTransform="translate(-22.749292,0.238835)" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1"
- inkscape:cx="11.000002"
- inkscape:cy="11.000005"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata8554">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-771.85712,-687.07648)">
- <path
- style="fill:#f4f5f4;fill-opacity:1;fill-rule:nonzero;stroke:#979995;stroke-width:0.98371369;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 773.33551,690.56085 0,15.03125 15.6875,0 1.6875,-1.6875 1.625,-1.59375 0,-11.75 -19,0 z"
- id="rect8568"
- inkscape:connector-curvature="0" />
- <rect
- style="fill:url(#linearGradient9194);fill-opacity:1;fill-rule:nonzero;stroke:#8a8475;stroke-width:0.98447442;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:1.5;stroke-opacity:1;stroke-dasharray:none"
- id="rect9088"
- width="14.78293"
- height="10.804496"
- x="775.41565"
- y="692.71948" />
- <path
- style="fill:#001700;fill-opacity:1;stroke:none"
- d="m 784.01425,702.59563 0.0601,-2.9358 -1.26032,-1.93639 -1.8605,-1.24927 1.80048,0.62463 -0.26028,-1.46793 -1.82531,-2.19755 1.32363,0.61702 0.91039,1.03764 0.35492,1.31728 0.18635,0.79469 1.17065,1.79054 2.04124,-1.92043 1.67975,-2.40736 -0.62239,2.53228 -2.32245,2.54612 0,2.97449 z"
- id="path9114"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccccccccc" />
- <path
- style="fill:url(#radialGradient9190);fill-opacity:1;fill-rule:nonzero;stroke:none;"
- d="m 779.6728,699.1081 c -1.73172,0 -3.125,1.39328 -3.125,3.125 0,0.1736 0.0354,0.33407 0.0625,0.5 l 6.15625,0 c 0.0271,-0.16593 0.0625,-0.3264 0.0625,-0.5 0,-1.73172 -1.42454,-3.125 -3.15625,-3.125 z"
- id="path9118"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#193119;fill-opacity:1;stroke:none"
- d="m 775.90453,703.04526 13.73212,0 0,-0.54833 -13.7798,0 z"
- id="path9112"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#f4f5f4;fill-opacity:1;stroke:#979995;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:1.5;stroke-opacity:1;stroke-dasharray:none"
- d="m 789.0447,705.53374 3.32589,-3.32589 -3.32589,0 z"
- id="path9086"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.31132076;fill:url(#radialGradient9185);fill-opacity:1;stroke:none"
- d="m 775.9663,700.54201 c 0,0 1.79546,-2.81322 6.35713,-4.86346 4.34963,-1.95492 7.3609,-2.47941 7.3609,-2.47941 l -13.76583,0 z"
- id="path9098"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csccc" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg b/extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg
deleted file mode 100644
index 99d73797..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-gallery.svg
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg9197"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="Nowy dokument 44">
- <defs
- id="defs9199">
- <linearGradient
- id="linearGradient9778">
- <stop
- style="stop-color:#f0a829;stop-opacity:1;"
- offset="0"
- id="stop9780" />
- <stop
- style="stop-color:#f0ad3e;stop-opacity:1;"
- offset="1"
- id="stop9782" />
- </linearGradient>
- <linearGradient
- id="linearGradient9760">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9762" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop9764" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9760"
- id="radialGradient9772"
- cx="8.1702919"
- cy="6.458025"
- fx="8.1702919"
- fy="6.458025"
- r="5.4584503"
- gradientTransform="matrix(-1.0337084,0.97885003,-0.83095482,-1.1642322,881.6209,640.19021)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9778"
- id="linearGradient9784"
- x1="7.7878532"
- y1="12.734541"
- x2="17.905109"
- y2="8.1800375"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1631645,0,0,1.3512007,858.27422,629.02856)" />
- <filter
- inkscape:collect="always"
- id="filter9873">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.12340545"
- id="feGaussianBlur9875" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="14.381371"
- inkscape:cx="7.555295"
- inkscape:cy="18.334089"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata9202">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-860.42859,-632.79077)">
- <g
- id="g9740"
- transform="matrix(0.96583758,-0.25914815,0.25914815,0.96583758,-155.70545,250.69009)">
- <rect
- y="638.2356"
- x="883.86444"
- height="10.078743"
- width="15.655096"
- id="rect9216"
- style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
- <rect
- y="639.74615"
- x="885.29468"
- height="7.0982141"
- width="12.767857"
- id="rect9726"
- style="fill:#88acd3;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- </g>
- <g
- id="g9732"
- transform="matrix(0.94980636,0.31283842,-0.31283842,0.94980636,225.23946,-243.05113)">
- <rect
- style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1"
- id="rect9734"
- width="15.655096"
- height="10.078743"
- x="883.86444"
- y="638.2356" />
- <rect
- style="fill:#6bbe21;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="rect9736"
- width="12.767857"
- height="7.0982141"
- x="885.29468"
- y="639.74615" />
- </g>
- <rect
- y="638.32489"
- x="865.33765"
- height="10.078743"
- width="15.655096"
- id="rect9746"
- style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#88897f;stroke-width:0.92526156;stroke-opacity:1" />
- <rect
- y="639.77606"
- x="866.7262"
- height="7.0935974"
- width="12.698151"
- id="rect9774"
- style="fill:url(#linearGradient9784);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- sodipodi:type="arc"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path9756"
- sodipodi:cx="12.342356"
- sodipodi:cy="11.500305"
- sodipodi:rx="1.5297568"
- sodipodi:ry="1.5297568"
- d="m 13.872113,11.500305 a 1.5297568,1.5297568 0 1 1 -3.059514,0 1.5297568,1.5297568 0 1 1 3.059514,0 z"
- transform="translate(860.60243,632.92984)" />
- <rect
- style="opacity:0.73899369;fill:url(#radialGradient9772);fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="rect9758"
- width="12.698151"
- height="7.0336046"
- x="866.75745"
- y="639.80731" />
- <path
- style="fill:#000000;fill-opacity:1;stroke:none"
- d="m 866.7472,646.07035 1.91945,-0.11086 0.32595,-0.96072 1.19513,-1.14548 0.97784,1.10853 1.70216,0.25865 2.60756,-0.25865 0.50702,-0.99768 1.41243,0.36951 1.05027,1.29328 1.05027,0.44342 0,0.84987 -12.71186,0 z"
- id="path9752"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.45911949;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter9873)"
- d="m 6.34375,7.03125 0,7.125 12.75,0 0,-7.125 -12.75,0 z m 0.71875,0.6875 11.125,0 0,5.71875 -11.125,0 0,-5.71875 z"
- transform="matrix(1.018707,0,0,1.0633975,860.12972,632.15392)"
- id="rect9748"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg b/extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg
deleted file mode 100644
index 58a64a6c..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-ilink.svg
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg7700"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="insert-ilink.svg">
- <defs
- id="defs7702">
- <linearGradient
- id="linearGradient3759">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop3761" />
- <stop
- id="stop3767"
- offset="0.25"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0.75"
- id="stop3769" />
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="1"
- id="stop3763" />
- </linearGradient>
- <linearGradient
- id="linearGradient8229">
- <stop
- style="stop-color:#ececec;stop-opacity:1;"
- offset="0"
- id="stop8231" />
- <stop
- style="stop-color:#9da09f;stop-opacity:1;"
- offset="1"
- id="stop8233" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3759"
- id="linearGradient3765"
- x1="843.28571"
- y1="721.07123"
- x2="865.29926"
- y2="721.07123"
- gradientUnits="userSpaceOnUse"
- spreadMethod="pad"
- gradientTransform="matrix(1,0,0,5.6369887,0,-3352.5089)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3759"
- id="linearGradient3777"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62040131,0,0,3.4971952,324.32395,-1809.4892)"
- spreadMethod="pad"
- x1="843.28571"
- y1="721.07123"
- x2="865.29926"
- y2="721.07123" />
- <mask
- maskUnits="userSpaceOnUse"
- id="mask3773">
- <rect
- style="fill:url(#linearGradient3777);fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="rect3775"
- width="13.657221"
- height="13.439366"
- x="847.49951"
- y="705.51801" />
- </mask>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1.6914316"
- inkscape:cx="-15.694299"
- inkscape:cy="66.481165"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata7705">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-843.28571,-701.36218)">
- <g
- id="g8544"
- transform="matrix(1.6118599,0,0,1.6118599,-522.76477,-435.86589)"
- mask="url(#mask3773)">
- <path
- sodipodi:nodetypes="ssssssssssssssssss"
- inkscape:connector-curvature="0"
- id="rect8508"
- d="m 847.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 857.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
- id="path8520"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ssssssssssssssssss" />
- <path
- id="path8522"
- transform="translate(843.28571,701.36218)"
- d="m 9.90625,8.3125 c 0.219379,0.2493818 0.400172,0.5353409 0.53125,0.84375 l 1.21875,0 C 11.78881,8.8397468 11.967186,8.5700989 12.1875,8.3125 l -2.28125,0 z M 6.375,9.09375 C 5.9621997,9.4039663 5.725025,9.7591417 5.71875,10.0625 l -0.03125,1.25 c -0.0151,0.72807 1.26414,2.375 3.53125,2.375 l 3.6875,0 c 2.26711,0 3.46875,-1.61553 3.46875,-2.34375 l 0,-1.28125 c 0,-0.2949291 -0.211045,-0.6348842 -0.59375,-0.9375 l -0.4375,0 c -0.63503,0 -1.1133,0.14044 -1.40625,0.4375 0.224818,0.1572379 0.34375,0.3524935 0.34375,0.53125 l 0,0.75 c 0,0.45142 -0.90722,0.78125 -2.3125,0.78125 l -2.28125,0 C 8.28222,11.625 7.75,11.29515 7.75,10.84375 l 0,-0.6875 c 0,-0.1767274 0.1306645,-0.3924485 0.375,-0.5625 -0.2943153,-0.3314596 -0.7859446,-0.5 -1.4375,-0.5 l -0.3125,0 z"
- style="fill:#f4f4f5;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- inkscape:connector-curvature="0" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-link.svg b/extensions/WikiEditor/modules/images/toolbar/insert-link.svg
deleted file mode 100644
index 0a0f8c4a..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-link.svg
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg7700"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="insert-link.svg">
- <defs
- id="defs7702">
- <linearGradient
- id="linearGradient8229">
- <stop
- style="stop-color:#ececec;stop-opacity:1;"
- offset="0"
- id="stop8231" />
- <stop
- style="stop-color:#9da09f;stop-opacity:1;"
- offset="1"
- id="stop8233" />
- </linearGradient>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="38.272727"
- inkscape:cx="11"
- inkscape:cy="11"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata7705">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-843.28571,-701.36218)">
- <g
- id="g8544"
- transform="translate(-0.03819,0)">
- <path
- sodipodi:nodetypes="ssssssssssssssssss"
- inkscape:connector-curvature="0"
- id="rect8508"
- d="m 847.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- style="fill:#dcdcdc;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.69803369;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 857.87034,708.6932 c -1.78875,0 -3.22236,1.30374 -3.22236,2.89165 l 0,1.55466 c 0,1.58791 1.43361,2.89165 3.22236,2.89165 l 2.90712,0 c 1.78875,0 3.22236,-1.30374 3.22236,-2.89165 l 0,-1.55466 c 0,-1.58791 -1.43361,-2.89165 -3.22236,-2.89165 z m 0.51649,1.76812 1.7863,0 c 1.10879,0 1.69598,0.40915 1.69598,1.39344 l 0,0.99498 c 0,0.9843 -0.66558,1.28893 -1.77437,1.28893 l -1.7863,0 c -1.10879,0 -1.59148,-0.34383 -1.59148,-1.32813 l 0,-0.99498 c 0,-0.98429 0.56108,-1.35424 1.66987,-1.35424 z"
- id="path8520"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ssssssssssssssssss" />
- <path
- id="path8522"
- transform="translate(843.28571,701.36218)"
- d="m 9.90625,8.3125 c 0.219379,0.2493818 0.400172,0.5353409 0.53125,0.84375 l 1.21875,0 C 11.78881,8.8397468 11.967186,8.5700989 12.1875,8.3125 l -2.28125,0 z M 6.375,9.09375 C 5.9621997,9.4039663 5.725025,9.7591417 5.71875,10.0625 l -0.03125,1.25 c -0.0151,0.72807 1.26414,2.375 3.53125,2.375 l 3.6875,0 c 2.26711,0 3.46875,-1.61553 3.46875,-2.34375 l 0,-1.28125 c 0,-0.2949291 -0.211045,-0.6348842 -0.59375,-0.9375 l -0.4375,0 c -0.63503,0 -1.1133,0.14044 -1.40625,0.4375 0.224818,0.1572379 0.34375,0.3524935 0.34375,0.53125 l 0,0.75 c 0,0.45142 -0.90722,0.78125 -2.3125,0.78125 l -2.28125,0 C 8.28222,11.625 7.75,11.29515 7.75,10.84375 l 0,-0.6875 c 0,-0.1767274 0.1306645,-0.3924485 0.375,-0.5625 -0.2943153,-0.3314596 -0.7859446,-0.5 -1.4375,-0.5 l -0.3125,0 z"
- style="fill:#f4f4f5;fill-opacity:1;fill-rule:nonzero;stroke:#393a3d;stroke-width:0.60000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- inkscape:connector-curvature="0" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-newline.svg b/extensions/WikiEditor/modules/images/toolbar/insert-newline.svg
deleted file mode 100644
index c7db3a8f..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-newline.svg
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg9896"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="Nowy dokument 48">
- <defs
- id="defs9898">
- <filter
- inkscape:collect="always"
- id="filter10487"
- x="-0.08373546"
- width="1.1674709"
- y="-0.13860559"
- height="1.2772112">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.58113281"
- id="feGaussianBlur10489" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter10491"
- x="-0.13307104"
- width="1.2661421"
- y="-0.085893642"
- height="1.1717873">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.58045312"
- id="feGaussianBlur10493" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.313708"
- inkscape:cx="18.926984"
- inkscape:cy="14.173711"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata9901">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-364,-521.36218)">
- <g
- id="g10495"
- transform="translate(20.359375,-0.98355932)">
- <path
- sodipodi:nodetypes="cccccccccc"
- inkscape:connector-curvature="0"
- id="path9915"
- d="m 353.50893,536.39789 0,5.04465 -7.1875,-7.14286 7.1875,-7.1875 0,4.24107 4.28571,0 0,-6.11607 5.17857,0 0,11.20536 z"
- style="fill:#373736;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path10454"
- d="m 361.96875,525.23718 0,10.21875 -9.46875,-0.0625 0,5.0625 1,1 0,-5.0625 9.46875,0.0625 0,-11.21875 -1,0 z m -8.46875,1.875 -1,1 0,2.25 1,0 0,-3.25 z"
- style="opacity:0.6;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter10491)" />
- <path
- inkscape:connector-curvature="0"
- id="path10425"
- d="m 357.78125,525.23718 0,6.125 -3.28125,0 0,1 4.28125,0 0,-6.125 4.1875,0 0,-1 -5.1875,0 z m -4.28125,1.875 -7.1875,7.1875 1,1 6.1875,-6.1875 0,-2 z"
- style="opacity:0.6;fill:#ffffff;fill-opacity:1;stroke:none;filter:url(#filter10487)" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg b/extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg
deleted file mode 100644
index 35a788d7..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-nowiki.svg
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg3817"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="insert-nowiki.svg">
- <defs
- id="defs3819">
- <linearGradient
- id="linearGradient4373">
- <stop
- style="stop-color:#a1a0a0;stop-opacity:1;"
- offset="0"
- id="stop4375" />
- <stop
- style="stop-color:#616363;stop-opacity:1;"
- offset="1"
- id="stop4377" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4373"
- id="linearGradient4379"
- x1="896.22729"
- y1="642.37769"
- x2="884.73309"
- y2="650.4939"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.97557742,0,0,0.97557742,-0.43357327,15.714485)" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="21.175745"
- inkscape:cx="9.1267246"
- inkscape:cy="15.351238"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata3822">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-771.85712,-704.2193)">
- <text
- xml:space="preserve"
- style="font-size:15.19591999px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:url(#linearGradient4379);fill-opacity:1;stroke:#1d201d;stroke-width:0.48778871;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
- x="861.17706"
- y="650.73999"
- id="text4348"
- sodipodi:linespacing="125%"
- transform="scale(0.90019997,1.1108643)"><tspan
- sodipodi:role="line"
- id="tspan4350"
- x="861.17706"
- y="650.73999"
- style="font-weight:bold;fill:url(#linearGradient4379);fill-opacity:1;stroke:#1d201d;stroke-width:0.48778871;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Serif Bold">W</tspan></text>
- <path
- sodipodi:type="arc"
- style="fill:none;stroke:#c32f2f;stroke-width:2.06862101000000020;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="path3836"
- sodipodi:cx="-14.805048"
- sodipodi:cy="10.604217"
- sodipodi:rx="10.196227"
- sodipodi:ry="10.196227"
- d="m -4.6088209,10.604217 a 10.196227,10.196227 0 1 1 -20.3924541,0 10.196227,10.196227 0 1 1 20.3924541,0 z"
- transform="matrix(0.87014489,0,0,0.87014489,795.88291,706.29079)" />
- <path
- style="fill:none;stroke:#c32f2f;stroke-width:1.80000000000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
- d="M 2.6516504,8.5523442 19.571706,13.981914"
- id="path4346"
- inkscape:connector-curvature="0"
- transform="translate(771.85712,704.2193)" />
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg b/extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg
deleted file mode 100644
index ca036928..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-redirect.svg
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg5908"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="Nowy dokument 19">
- <defs
- id="defs5910">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient6439">
- <stop
- style="stop-color:#e5e7e2;stop-opacity:1;"
- offset="0"
- id="stop6441" />
- <stop
- style="stop-color:#e5e7e2;stop-opacity:0;"
- offset="1"
- id="stop6443" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient6439"
- id="linearGradient6445"
- x1="880.47321"
- y1="718.15826"
- x2="880.47321"
- y2="738.3028"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-46,0)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient6439"
- id="linearGradient6454"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-46,0)"
- x1="880.47321"
- y1="718.15826"
- x2="880.47321"
- y2="738.3028" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="16"
- inkscape:cx="8.8237211"
- inkscape:cy="2.783125"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata5913">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-889,-712.79077)">
- <g
- id="g6449"
- transform="translate(65.25943,0.00449032)">
- <rect
- y="714.24237"
- x="824.81775"
- height="19.087818"
- width="16.141386"
- id="rect5927"
- style="opacity:0.87735847;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#cccdca;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <rect
- y="715.54968"
- x="826.21429"
- height="16.294643"
- width="13.214286"
- id="rect6437"
- style="opacity:0.87735847;fill:url(#linearGradient6454);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- sodipodi:nodetypes="csccccccc"
- inkscape:connector-curvature="0"
- id="path6447"
- d="m 835.61419,718.03653 c 0,0 -2.85604,2.15041 -2.88205,5.68281 -0.0434,5.8954 6.51786,6.38393 6.51786,6.38393 l 0,2.99107 5.51339,-5.51339 -5.55803,-5.55804 0,3.83929 c 0,0 -4.49554,0.91071 -4.71875,-2.39286 -0.1521,-1.68723 -0.19967,-3.02945 1.12758,-5.43281 z"
- style="fill:#127ea5;fill-opacity:1;stroke:#003553;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-reference.svg b/extensions/WikiEditor/modules/images/toolbar/insert-reference.svg
deleted file mode 100644
index c404e860..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-reference.svg
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg7132"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="Nowy dokument 27">
- <defs
- id="defs7134" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="15.839192"
- inkscape:cx="-9.8129606"
- inkscape:cy="7.4207416"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata7137">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-714.71429,-701.36218)">
- <g
- id="g7675"
- transform="translate(26.036511,-0.0978784)">
- <path
- sodipodi:nodetypes="ccscscc"
- inkscape:connector-curvature="0"
- id="path7155"
- d="m 691.68161,706.63153 -1.45209,12.6269 c 0,0 3.54369,-1.49312 6.50286,-0.88388 2.14658,0.44194 3.34613,1.38896 3.34613,1.38896 0,0 2.77792,-2.39911 6.12405,-1.6415 3.34613,0.75762 2.90418,0.69448 2.90418,0.69448 l -1.19955,-12.2481"
- style="fill:#52394e;fill-opacity:1;stroke:#52394e;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- sodipodi:nodetypes="ccsccsc"
- inkscape:connector-curvature="0"
- id="path7151"
- d="m 692.06042,707.26287 -0.82075,10.60661 c 0,0 2.39912,-1.76777 4.9245,-1.19956 2.84205,0.63945 3.47239,1.76776 3.47239,1.76776 l 0,-12.6269 c 0,0 -2.58851,-1.89404 -4.86135,-0.82075 -2.27285,1.07329 -2.71479,2.27284 -2.71479,2.27284 z"
- style="fill:#ffffff;fill-opacity:1;stroke:#b1b2af;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="csccscc"
- inkscape:connector-curvature="0"
- id="path7153"
- d="m 699.63656,706.06332 c 0,0 2.27285,-2.14658 4.98763,-1.13642 2.71479,1.01015 2.65165,2.0203 2.65165,2.0203 l 1.01016,10.79601 c 0,0 -1.95717,-1.26269 -4.29315,-0.69448 -2.33598,0.56821 -3.53553,1.76776 -3.53553,1.76776 z"
- style="fill:#ffffff;fill-opacity:1;stroke:#b1b2af;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="csc"
- inkscape:connector-curvature="0"
- id="path7157"
- d="m 699.8891,706.56839 c 0,0 -0.31573,1.12962 2.28105,5.17626 2.65428,4.13625 2.07524,6.56677 2.07524,6.56677"
- style="fill:none;stroke:#c04848;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-signature.svg b/extensions/WikiEditor/modules/images/toolbar/insert-signature.svg
deleted file mode 100644
index d0fd5d89..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-signature.svg
+++ /dev/null
@@ -1,274 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg6665"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="insert-signature.svg">
- <defs
- id="defs6667">
- <linearGradient
- id="linearGradient3844">
- <stop
- style="stop-color:#ececec;stop-opacity:1;"
- offset="0"
- id="stop3846" />
- <stop
- style="stop-color:#cecece;stop-opacity:1;"
- offset="1"
- id="stop3848" />
- </linearGradient>
- <linearGradient
- id="linearGradient3780">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3782" />
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="1"
- id="stop3784" />
- </linearGradient>
- <linearGradient
- id="linearGradient8680">
- <stop
- style="stop-color:#2e366a;stop-opacity:0.99215686;"
- offset="0"
- id="stop8682" />
- <stop
- id="stop8688"
- offset="0.4154374"
- style="stop-color:#3c91de;stop-opacity:1;" />
- <stop
- style="stop-color:#2e366a;stop-opacity:0.99358976;"
- offset="1"
- id="stop8684" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8662">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop8664" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop8666" />
- </linearGradient>
- <linearGradient
- id="linearGradient8656"
- osb:paint="solid">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop8658" />
- </linearGradient>
- <linearGradient
- id="linearGradient7212">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop7214" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop7216" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8662"
- id="linearGradient8670"
- x1="16.330652"
- y1="8.7101812"
- x2="17.635729"
- y2="1.9547856"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8680"
- id="linearGradient8686"
- x1="12.19534"
- y1="11.109293"
- x2="20.350513"
- y2="12.52982"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8680"
- id="linearGradient8809"
- x1="910.96173"
- y1="694.78741"
- x2="921.80005"
- y2="696.93402"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-26.508294,6.8837482)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3780"
- id="linearGradient3840"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-19.422226,4.7882523)"
- x1="914.08923"
- y1="691.73273"
- x2="914.625"
- y2="689.00946" />
- <mask
- maskUnits="userSpaceOnUse"
- id="mask3836">
- <rect
- style="fill:url(#linearGradient3840);fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="rect3838"
- width="21.294643"
- height="21.741072"
- x="874.80103"
- y="689.3111" />
- </mask>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3844"
- id="radialGradient3850"
- cx="921.40735"
- cy="698.09576"
- fx="921.40735"
- fy="698.09576"
- r="3.38059"
- gradientTransform="matrix(0.37329045,0.12989255,-0.3815617,0.95521397,839.37118,-91.004306)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8680"
- id="linearGradient3859"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-26.508294,6.8837482)"
- x1="910.96173"
- y1="694.78741"
- x2="921.80005"
- y2="696.93402" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3844"
- id="radialGradient3861"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.37329045,0.12989255,-0.3815617,0.95521397,839.37118,-91.004306)"
- cx="921.40735"
- cy="698.09576"
- fx="921.40735"
- fy="698.09576"
- r="3.38059" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3844"
- id="radialGradient3865"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.32194816,0.22927541,-0.63390316,0.81005546,1060.6407,-75.559535)"
- cx="921.40735"
- cy="698.09576"
- fx="921.40735"
- fy="698.09576"
- r="3.38059" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8680"
- id="linearGradient3873"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-26.508294,6.8837482)"
- x1="910.96173"
- y1="694.78741"
- x2="921.80005"
- y2="696.93402" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3844"
- id="radialGradient3875"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.32194816,0.22927541,-0.63390316,0.81005546,1060.6407,-75.559535)"
- cx="921.40735"
- cy="698.09576"
- fx="921.40735"
- fy="698.09576"
- r="3.38059" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="32"
- inkscape:cx="9.8024665"
- inkscape:cy="9.5718478"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1014"
- inkscape:window-x="0"
- inkscape:window-y="27"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata6670">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-900.42859,-684.2193)">
- <path
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path7202"
- d="m 2.7162576,15.606291 c 0.014982,-0.0061 0.030116,-0.01186 0.044947,-0.01833 0.044032,-0.0192 0.097586,-0.04461 0.1391489,-0.06714 0.029295,-0.01588 0.115542,-0.06645 0.08666,-0.04983 -1.0038452,0.57765 -1.2838827,0.741183 -0.8581766,0.492994 0.037046,-0.02158 0.073951,-0.0434 0.111137,-0.06473 0.3901054,-0.223795 0.7795876,-0.448685 1.1707359,-0.670652 0.1635679,-0.09282 0.3365902,-0.170765 0.5032587,-0.257936 0.2575795,-0.140862 0.5187569,-0.275236 0.7722876,-0.423334 -2.1829922,1.306573 -1.0930511,0.627884 -0.8202154,0.470171 0.4751945,-0.274686 0.9514185,-0.555191 1.4317232,-0.823686 0.142362,-0.0764 0.2991256,-0.120806 0.4528415,-0.168535 0.092107,-0.02377 0.1895155,-0.05226 0.2845027,-0.03273 0.1019002,0.05033 0.1453779,0.142963 0.182287,0.24448 0.042624,0.163605 0.049796,0.334568 0.06126,0.502654 0.01013,0.221059 0.018945,0.44211 0.029896,0.663161 0.016456,0.256167 0.00893,0.51265 -0.014887,0.767993 -0.02608,0.262109 -0.085432,0.519124 -0.1458886,0.774983 -0.058063,0.245373 -0.1262914,0.488199 -0.1847641,0.733455 -0.048858,0.231812 -0.099166,0.463109 -0.1648223,0.690807 -0.060983,0.207897 -0.1436609,0.408045 -0.224407,0.60874 -0.076214,0.195637 -0.1765255,0.379946 -0.2875951,0.55762 -0.1229874,0.189026 -0.2690224,0.36206 -0.4187308,0.530284 -0.1080837,0.122432 -0.2253887,0.23643 -0.3582161,0.331605 -0.9365499,0.568706 -0.9088579,0.650165 -1.6646157,0.742537 -0.1617523,0.01598 -0.3238321,0.02852 -0.4862917,0.03398 -0.1146667,-0.0056 -0.2089106,-0.0583 -0.3027264,-0.11981 C 1.9620107,20.999097 1.8715075,20.938702 1.7802895,20.879209 1.6972907,20.817586 1.653071,20.717491 1.6033139,20.62964 1.5322312,20.50861 1.4548867,20.391629 1.3913122,20.26633 c -0.07264,-0.167297 -0.077499,-0.350154 -0.075953,-0.529538 0.00745,-0.273623 0.081469,-0.538238 0.1656536,-0.796711 0.1177555,-0.330292 0.2815884,-0.640339 0.4449819,-0.949575 0.1838689,-0.336162 0.3698925,-0.67143 0.574008,-0.995796 0.1722137,-0.280536 0.3960701,-0.521103 0.6240914,-0.756187 0.2471914,-0.251128 0.5159797,-0.479759 0.7906068,-0.700066 0.313975,-0.239169 0.6487409,-0.449607 0.9828024,-0.659265 0.2562013,-0.152136 0.5076318,-0.311266 0.7522445,-0.481369 0.1960321,-0.137571 0.3878661,-0.280917 0.5829129,-0.419856 0.1499281,-0.112844 0.3077473,-0.213969 0.4533425,-0.332505 0.1496353,-0.126105 0.3009994,-0.250081 0.4379018,-0.390134 0.1195688,-0.131818 0.2271819,-0.274088 0.3189983,-0.426504 0.062814,-0.102531 0.113777,-0.2116 0.1599077,-0.322448 0.063539,-0.144198 0.1109773,-0.294886 0.1634422,-0.443344 0.064032,-0.188872 0.126562,-0.378363 0.1864819,-0.568603 0.069997,-0.218007 0.1527336,-0.431587 0.2355382,-0.644965 0.054774,-0.155522 0.1151256,-0.309556 0.1523278,-0.470447 0.026038,-0.144681 0.049854,-0.290434 0.045029,-0.4377538 C 8.3728056,9.8149502 8.2986317,9.7164754 8.2186271,9.6233765 8.1527242,9.5612044 8.0878966,9.4961292 7.9999384,9.4682539 7.8943613,9.4485021 7.7961169,9.4921617 7.7002258,9.5308343 7.672613,9.5438024 7.6443143,9.5554004 7.6173876,9.5697387 7.5876293,9.5855848 7.501067,9.6379656 7.530365,9.621284 7.854214,9.4368913 8.1754789,9.2479294 8.5010524,9.0665988 c 0.033437,-0.018623 -0.06322,0.04321 -0.093763,0.066276 C 8.3324417,9.1893972 8.3044135,9.2171152 8.2347401,9.279519 8.0586202,9.4483447 7.9233976,9.6519943 7.8010037,9.8614313 7.6446745,10.143055 7.5121438,10.43663 7.4008933,10.738685 7.2913871,11.042517 7.242477,11.362648 7.1966248,11.68095 c -0.046701,0.306129 -0.098682,0.611218 -0.1604766,0.914653 -0.069932,0.311062 -0.1303383,0.624124 -0.2053817,0.934029 -0.053132,0.217313 -0.1256675,0.428574 -0.2144463,0.633693 -0.070224,0.153442 -0.1444406,0.304866 -0.2009688,0.464022 -0.023085,0.08928 -0.044673,0.04986 -0.027236,0.02219 0.00703,-0.01116 0.023065,-0.01327 0.03568,-0.01714 0.055026,-0.01686 0.1124832,-0.02441 0.1687912,-0.03631 0.2495019,-0.05445 0.4969053,-0.117852 0.7472309,-0.168556 0.2078164,-0.04257 0.4206442,-0.04789 0.6319581,-0.05484 0.1112543,0.0017 0.222991,-0.008 0.3342245,-0.0037 0.010785,4.09e-4 0.1315998,0.01128 0.1444173,0.01242 0.085402,0.01413 0.1710335,0.02622 0.2517865,0.05899 0.069322,0.0321 0.035224,0.0175 0.1021532,0.04413 0.096055,0.03846 0.1784192,0.09809 0.2647994,0.153327 0.073649,0.04237 0.1387492,0.09149 0.1985346,0.151826 0.069801,0.07284 0.1257312,0.157748 0.1829061,0.240546 0.075399,0.100562 0.1419414,0.207061 0.2040451,0.316171 0.053096,0.100156 0.083151,0.209652 0.117392,0.317073 0.028897,0.07491 0.054643,0.150188 0.066664,0.229714 0.00421,0.07158 0.015172,0.141967 0.026594,0.212643 0.011359,0.02911 2.46e-4,0.06649 0.011714,0.09523 0.00541,0.01355 0.015129,-0.02494 0.023065,-0.03718 0.011365,-0.01752 0.025663,-0.03295 0.038495,-0.04943 -1.6473699,0.951732 -1.0951999,0.71807 -0.7535789,0.329888 0.1826495,-0.207543 0.3377825,-0.433409 0.4931041,-0.661483 0.3230554,-0.499315 0.6008614,-1.025465 0.8693004,-1.555496 0.221221,-0.454212 0.697738,-1.414258 1.360067,-1.001832 0.09569,0.09864 0.130656,0.235312 0.170828,0.363106 0.05204,0.175681 0.102576,0.351999 0.149221,0.529214 0.04699,0.18583 0.08151,0.37423 0.112944,0.563198 0.02677,0.237133 0.05235,0.47409 0.08814,0.710058 0.03428,0.212668 0.06367,0.426352 0.108012,0.637221 0.04557,0.169703 0.07868,0.34187 0.105252,0.515444 0.02396,0.171647 0.0343,0.344972 0.04747,0.517733 0.01488,0.200315 0.04953,0.398524 0.07848,0.597144 0.03496,0.229975 0.07662,0.458743 0.120696,0.687112 0.03845,0.200967 0.0777,0.401683 0.134613,0.598349 0.0354,0.13636 0.08742,0.26712 0.140805,0.39718 0.03573,0.09033 0.07249,0.179719 0.116236,0.266461 0.03868,0.06517 0.07198,0.136032 0.124362,0.191551 0.03586,0.04701 0.07495,0.09145 0.110956,0.138208 0,0 -1.101429,0.656126 -1.101429,0.656126 l 0,0 c -0.03528,-0.04495 -0.06752,-0.09205 -0.102723,-0.137022 -0.05344,-0.0685 -0.09652,-0.143971 -0.136931,-0.220759 -0.04265,-0.09072 -0.08493,-0.180839 -0.113685,-0.277246 -0.05547,-0.135393 -0.09871,-0.27549 -0.133505,-0.417596 -0.05566,-0.202218 -0.09403,-0.407487 -0.128609,-0.614261 -0.04161,-0.229361 -0.09004,-0.457466 -0.127185,-0.687658 -0.034,-0.200007 -0.06664,-0.400419 -0.09074,-0.601875 -0.01332,-0.169591 -0.02923,-0.339002 -0.04597,-0.508257 -0.02563,-0.172233 -0.05242,-0.344519 -0.09624,-0.513271 -0.04161,-0.214841 -0.06837,-0.432032 -0.102606,-0.64811 -0.03153,-0.234649 -0.06223,-0.469334 -0.09324,-0.704051 -0.03109,-0.185035 -0.07426,-0.367436 -0.112127,-0.551139 -0.04449,-0.173758 -0.09469,-0.346743 -0.151172,-0.516884 -0.02349,-0.06181 -0.04615,-0.124371 -0.07439,-0.184247 -0.0027,-0.0058 -0.02385,-0.05109 -0.03331,-0.05446 -0.0038,-0.0014 -0.0056,0.0059 -0.0083,0.0089 -0.04238,0.431954 -0.01018,0.02835 1.044188,-0.598079 0.01795,-0.01066 -0.03748,0.01977 -0.05228,0.03449 -0.08975,0.08926 -0.153018,0.24089 -0.225393,0.341311 -0.31381,0.519598 -0.596513,1.057134 -0.904591,1.580105 -0.138226,0.221515 -0.277079,0.440545 -0.431606,0.651159 -0.01081,0.01474 -0.15741,0.215292 -0.191992,0.237176 -0.3772715,0.238747 -0.7672827,0.456741 -1.1509238,0.685111 -0.02887,0.0019 -0.058438,0.0124 -0.08661,0.0058 -0.026874,-0.0063 -0.050191,-0.02451 -0.070937,-0.04271 -0.052286,-0.04588 -0.053976,-0.09572 -0.057642,-0.158149 -0.00887,-0.0718 -0.026621,-0.142245 -0.026236,-0.214908 -0.00741,-0.07405 -0.025133,-0.145375 -0.052512,-0.214763 -0.026575,-0.100553 -0.051945,-0.201804 -0.099326,-0.295099 -0.056912,-0.106337 -0.120959,-0.208157 -0.1948934,-0.303682 -0.056727,-0.07473 -0.1133246,-0.150592 -0.1814828,-0.215437 -0.055909,-0.05163 -0.1192899,-0.09211 -0.1821679,-0.134745 -0.077625,-0.05375 -0.1611438,-0.09744 -0.248478,-0.133484 -0.1039986,-0.04318 -0.2122199,-0.06926 -0.325112,-0.0758 -0.1533511,-0.01046 -0.3072442,-0.0072 -0.4608359,-0.0046 -0.2041835,0.0058 -0.4080615,0.02076 -0.6082629,0.06387 -0.2525206,0.05286 -0.5027377,0.115275 -0.7545027,0.171468 -0.057625,0.0097 -0.1476894,0.03013 -0.2085337,0.02141 -0.077663,-0.01112 -0.1597738,-0.07269 -0.1470492,-0.160339 0.00262,-0.01803 0.014679,-0.03336 0.022018,-0.05004 0.033638,-0.06959 0.058539,-0.142074 0.090848,-0.212291 0.040671,-0.08839 0.087761,-0.17386 0.1263158,-0.263273 0.096033,-0.201276 0.1759203,-0.40906 0.2395654,-0.622927 0.090072,-0.307158 0.1542067,-0.620475 0.2222366,-0.933056 0.057106,-0.301042 0.102744,-0.603666 0.1552106,-0.905485 0.048603,-0.326463 0.1004989,-0.655268 0.2058798,-0.968975 C 6.4103983,10.945225 6.5353501,10.649404 6.6797727,10.36247 6.7961866,10.144795 6.9232919,9.9336751 7.0902422,9.75003 7.5351459,9.3040342 8.1056686,8.9955291 8.6884875,8.7620282 c 0.1256889,-0.036068 0.2543632,-0.060833 0.3757558,0.00346 0.090074,0.055422 0.1667795,0.1286976 0.2358293,0.2085297 0.094252,0.116132 0.178679,0.2377166 0.2036035,0.3889655 0.013427,0.1577518 -0.011563,0.3119029 -0.031747,0.4682589 -0.010529,0.057463 -0.016746,0.099176 -0.032934,0.1556224 -0.033401,0.1164624 -0.088218,0.2259294 -0.1246818,0.3413884 -0.08508,0.210344 -0.1722066,0.420098 -0.2404575,0.636732 -0.05771,0.189481 -0.1147613,0.379157 -0.1751629,0.567705 -0.050196,0.148813 -0.1005161,0.297497 -0.1471959,0.447455 -0.053123,0.11273 -0.089635,0.233814 -0.1582751,0.339371 -0.096677,0.159039 -0.2018903,0.312507 -0.3232974,0.454109 -0.1258605,0.151197 -0.275562,0.276538 -0.4247797,0.404024 -0.045588,0.03882 -0.089538,0.07961 -0.1363751,0.11691 -0.1032697,0.08224 -0.2199272,0.145039 -0.323707,0.226493 -0.1983624,0.149887 0.023963,-0.01524 -0.183262,0.129644 -0.1386032,0.0969 -0.2707178,0.203158 -0.4112703,0.2974 -0.2489405,0.177555 -0.5042078,0.345361 -0.7704442,0.496145 -0.3367592,0.206226 -0.6724487,0.415458 -0.991997,0.64776 -0.2723213,0.214778 -0.5364281,0.440516 -0.7857476,0.681775 -0.2271957,0.231058 -0.4562523,0.46292 -0.6347064,0.735237 -0.216352,0.317721 -0.408533,0.650929 -0.5897197,0.989826 -0.1558498,0.301637 -0.3127824,0.603033 -0.4306315,0.922183 -0.084928,0.243041 -0.1568744,0.493451 -0.1660699,0.752465 0.00113,0.158061 0.00729,0.320518 0.065694,0.469435 0.05965,0.123148 0.1362585,0.236855 0.2074265,0.353521 0.046765,0.07192 0.090011,0.149767 0.1629358,0.198684 0.08101,0.06413 0.1666965,0.122086 0.2574145,0.171736 0.088055,0.04281 0.1695465,0.06715 0.2686271,0.05993 0.1515264,-0.0012 0.3032783,-0.0066 0.4535735,-0.02736 0.1103917,-0.01631 0.2201976,-0.03396 0.3278808,-0.06409 0.4145129,-0.115996 1.0197914,-0.60846 -0.8266012,0.516908 0.1478191,-0.07849 0.2650675,-0.184499 0.3818233,-0.303699 0.151761,-0.164142 0.3038857,-0.328394 0.4326506,-0.511896 0.107296,-0.1733 0.2140082,-0.347559 0.2928106,-0.536247 0.080229,-0.199643 0.1698965,-0.395509 0.2334674,-0.601419 0.073219,-0.224178 0.1261847,-0.45457 0.1742457,-0.685327 0.054259,-0.247041 0.1255423,-0.489938 0.1861619,-0.735462 0.060901,-0.251514 0.1218702,-0.503683 0.1555321,-0.760603 0.024278,-0.248577 0.033736,-0.498072 0.014942,-0.747532 -0.012474,-0.218845 -0.024976,-0.437614 -0.035828,-0.656534 -0.013863,-0.15431 -0.027381,-0.310524 -0.064487,-0.461133 -0.019344,-0.04998 -0.042869,-0.128433 -0.1102792,-0.113455 -0.082695,0.01604 -0.1659707,0.02956 -0.2455245,0.05872 -0.1468592,0.04807 -0.2935592,0.09717 -0.4257726,0.179398 -0.1044819,0.05858 -0.061879,0.03454 -0.1701311,0.0959 -0.031925,0.0181 -0.1275071,0.07272 -0.095761,0.05431 0.3172726,-0.183974 0.6350084,-0.367149 0.9523446,-0.551014 0.037701,-0.02184 -0.075626,0.0433 -0.1134385,0.06495 -0.3883499,0.224961 -0.7766997,0.449922 -1.1650496,0.674883 -0.2573702,0.143147 -0.5166836,0.282804 -0.7769328,0.42064 -0.1266246,0.06474 -0.2537499,0.128578 -0.3794392,0.195128 -0.041511,0.02198 -0.1646218,0.09051 -0.1240878,0.06677 0.065161,-0.03815 1.3501761,-0.781852 0.8252087,-0.478022 -0.4634021,0.276695 -0.3115777,0.186742 -1.2613365,0.729481 -0.099927,0.0571 -0.208062,0.102156 -0.3188431,0.132947 0,0 1.0158165,-0.776752 1.0158165,-0.776752 z"
- inkscape:connector-curvature="0"
- transform="translate(900.42859,684.2193)" />
- <g
- id="g3868"
- transform="translate(-0.1875,0.375)">
- <path
- transform="matrix(0.9138951,0.02916988,-0.12956575,1.1023997,194.56326,-104.29886)"
- mask="url(#mask3836)"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0"
- id="path7210"
- d="m 888.30688,690.10346 -2.60119,12.43889 5.91169,1.23434 2.57512,-12.50165"
- style="fill:url(#linearGradient3873);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50066453;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0"
- id="path3842"
- d="m 912.90679,696.01618 0.30405,5.25331 2.08892,0.60935 2.98991,-4.27396"
- style="fill:url(#radialGradient3875);fill-opacity:1;stroke:#000000;stroke-width:0.45993432;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- sodipodi:nodetypes="ccc"
- inkscape:connector-curvature="0"
- id="path3852"
- d="m 913.18227,701.08114 0.31101,3.10057 1.90916,-2.43627"
- style="fill:#313131;fill-opacity:1;stroke:#000000;stroke-width:0.45736727;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-table.svg b/extensions/WikiEditor/modules/images/toolbar/insert-table.svg
deleted file mode 100644
index 3585edfc..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-table.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg4674"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="insert-table.svg">
- <defs
- id="defs4676" />
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.4"
- inkscape:cx="14.917631"
- inkscape:cy="9.7454912"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4679">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-754.71429,-709.93359)">
- <g
- id="g6398">
- <rect
- transform="matrix(0.99817187,0,0,1.0178786,1.3828921,-13.085829)"
- y="712.74176"
- x="756.2171"
- height="15.99255"
- width="19.028265"
- id="rect4693"
- style="fill:#e6e6e6;fill-opacity:1;stroke:#8c8e89;stroke-width:1.00070357;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:1;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;filter:url(#filter6043)" />
- <rect
- y="713.93359"
- x="757.71429"
- height="2"
- width="16"
- id="rect6055"
- style="fill:#a0bdd9;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- y="716.93091"
- x="757.71429"
- height="10.047351"
- width="3"
- id="rect6057"
- style="fill:#cfd0c8;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- y="715.93835"
- x="761.70416"
- height="11.039861"
- width="11.985021"
- id="rect6059"
- style="fill:#f0f2eb;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- id="path6061"
- d="m 761.21785,726.44068 0,-12.01418"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:0.99643618;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- inkscape:connector-curvature="0"
- id="path6061-6"
- d="m 765.9481,726.93359 0,-13.125"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- inkscape:connector-curvature="0"
- id="path6061-65"
- d="m 765.48228,726.43359 0,-12.01418"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- inkscape:connector-curvature="0"
- id="path6061-5"
- d="m 770.34364,726.43359 0,-12.01418"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- inkscape:connector-curvature="0"
- id="path6061-68"
- d="m 773.20619,719.33746 -14.9838,0"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.00806725;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- inkscape:connector-curvature="0"
- id="path6061-68-8"
- d="m 773.21327,716.43359 -14.99898,0"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- inkscape:connector-curvature="0"
- id="path6061-68-84"
- d="m 773.20619,722.40028 -14.9838,0"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.00806725;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- inkscape:connector-curvature="0"
- id="path6061-68-9"
- d="m 773.20619,726.43359 -14.9838,0"
- style="opacity:0.24842769;fill:none;stroke:#000000;stroke-width:1.00806725;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg b/extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg
deleted file mode 100644
index c7c664b5..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/insert-xlink.svg
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg6475"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="insert-xlink.svg">
- <defs
- id="defs6477">
- <linearGradient
- id="linearGradient7004">
- <stop
- style="stop-color:#8ea8c5;stop-opacity:1;"
- offset="0"
- id="stop7006" />
- <stop
- style="stop-color:#365f96;stop-opacity:1;"
- offset="1"
- id="stop7008" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient7004"
- id="linearGradient7010"
- x1="1.9835248"
- y1="1.7316169"
- x2="-3.7763"
- y2="15.516348"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient7004"
- id="linearGradient7130"
- gradientUnits="userSpaceOnUse"
- x1="1.9835248"
- y1="1.7316169"
- x2="-3.7763"
- y2="15.516348" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.2"
- inkscape:cx="14.804469"
- inkscape:cy="22.496339"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata6480">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-364,-521.36218)">
- <g
- id="g7123"
- transform="translate(-37.98214,-0.06250444)">
- <path
- transform="matrix(1.1399776,0,0,1.1399776,413.66918,522.63818)"
- d="m 7.7678573,8.5848217 c 0,4.6229193 -3.7476166,8.3705363 -8.3705359,8.3705363 -4.6229193,0 -8.3705358,-3.747617 -8.3705358,-8.3705363 0,-4.6229193 3.7476165,-8.37053585 8.3705358,-8.37053585 4.6229193,0 8.3705359,3.74761655 8.3705359,8.37053585 z"
- sodipodi:ry="8.3705359"
- sodipodi:rx="8.3705359"
- sodipodi:cy="8.5848217"
- sodipodi:cx="-0.6026786"
- id="path6494"
- style="fill:url(#linearGradient7130);fill-opacity:1;fill-rule:nonzero;stroke:#1d497d;stroke-width:0.80000001;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- sodipodi:type="arc" />
- <path
- inkscape:connector-curvature="0"
- id="path7012"
- d="m 414.36607,528.58539 0.625,1.65179 -0.9375,0.71429 -0.89286,0.80357 0.84822,1.51785 2.00893,0.89286 0.58035,3.125 0.80358,2.00893 1.02678,-0.89286 0.80357,-2.36607 0.0446,-1.38393 0.75893,-1.07143 -1.25,-1.875 -1.25,-1.25 -1.60714,-1.38392 z"
- style="fill:#a2b52f;fill-opacity:1;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- id="path7014"
- d="m 406.86607,533.58539 0.58036,2.8125 0.625,0.80358 0.75893,2.36607 0.80357,0.53571 0.58036,-2.27678 0.89285,-0.89286 0.71429,-0.89286 -1.16072,-1.16071 -0.98214,-1.25 -1.20536,-0.66965 -1.83035,-0.26785 -0.80357,-1.11607 -0.84822,-0.66965 1.875,-0.75893 0.625,-1.02678 0.9375,-0.66964 1.38393,-0.89286 0.58036,-0.98214 -2.09822,-0.40179 -0.84821,-0.80357 -1.16072,1.42857 -1.16071,1.38393 -0.3125,1.69643 -0.53571,1.02678 2.09821,1.78572 z"
- style="fill:#a2b52f;fill-opacity:1;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- id="path7016"
- d="m 410.16964,524.29968 1.20536,1.875 1.20536,-0.9375 1.5625,-0.98214 -0.22322,-0.9375 -2.76785,0.0893 z"
- style="fill:#a2b52f;fill-opacity:1;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- id="path7018"
- d="m 415.125,527.82647 1.42857,-0.40179 -0.0446,-1.78571 1.33929,-0.35715 1.02678,0.35715 0.89286,1.25 1.29464,1.60714 0.75893,1.83036 -0.13393,1.11607 -1.42857,1.02678 -0.98214,-1.47321 -0.89286,-1.83036 -1.33929,-0.75893 z"
- style="fill:#a2b52f;fill-opacity:1;stroke:none" />
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/images/toolbar/magnify-clip.png b/extensions/WikiEditor/modules/images/toolbar/magnify-clip.png
deleted file mode 100644
index 00a9cee1..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/magnify-clip.png
+++ /dev/null
Binary files differ
diff --git a/extensions/WikiEditor/modules/images/toolbar/search-replace.svg b/extensions/WikiEditor/modules/images/toolbar/search-replace.svg
deleted file mode 100644
index 91cb6ace..00000000
--- a/extensions/WikiEditor/modules/images/toolbar/search-replace.svg
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="22"
- height="22"
- id="svg10519"
- version="1.1"
- inkscape:version="0.48.4 r9939"
- sodipodi:docname="search-replace.svg">
- <defs
- id="defs10521">
- <linearGradient
- id="linearGradient11111">
- <stop
- style="stop-color:#e6edf5;stop-opacity:1;"
- offset="0"
- id="stop11113" />
- <stop
- style="stop-color:#7da2cc;stop-opacity:0.58333331;"
- offset="1"
- id="stop11115" />
- </linearGradient>
- <linearGradient
- id="linearGradient11103">
- <stop
- style="stop-color:#b8b8b7;stop-opacity:1;"
- offset="0"
- id="stop11105" />
- <stop
- style="stop-color:#a3a4a3;stop-opacity:1;"
- offset="1"
- id="stop11107" />
- </linearGradient>
- <linearGradient
- id="linearGradient11077">
- <stop
- style="stop-color:#a48757;stop-opacity:1;"
- offset="0"
- id="stop11079" />
- <stop
- style="stop-color:#eeeac6;stop-opacity:1;"
- offset="1"
- id="stop11081" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11077"
- id="linearGradient11095"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(66.373514,4.6113592)"
- x1="819.42767"
- y1="729.21069"
- x2="818.52716"
- y2="728.31018" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11103"
- id="linearGradient11109"
- x1="814.55927"
- y1="726.61975"
- x2="813.53076"
- y2="725.49475"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(55.60781,8.9693543)" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11111"
- id="radialGradient11119"
- cx="6.7155318"
- cy="4.395853"
- fx="6.7155318"
- fy="4.395853"
- r="5.4276505"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11077"
- id="linearGradient11142"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(66.373514,4.6113592)"
- x1="819.42767"
- y1="729.21069"
- x2="818.52716"
- y2="728.31018" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11103"
- id="linearGradient11144"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(55.60781,8.9693543)"
- x1="814.55927"
- y1="726.61975"
- x2="813.53076"
- y2="725.49475" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11111"
- id="radialGradient11146"
- gradientUnits="userSpaceOnUse"
- cx="6.7155318"
- cy="4.395853"
- fx="6.7155318"
- fy="4.395853"
- r="5.4276505" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1"
- inkscape:cx="18.387223"
- inkscape:cy="9.028262"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1041"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata10524">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-823.28571,-718.50507)">
- <g
- id="g11129"
- transform="matrix(0.87945853,0,0,0.87945853,60.516821,83.916706)">
- <rect
- y="725.56744"
- x="869.68085"
- height="17.014757"
- width="14.18633"
- id="rect10538"
- style="fill:#fefefe;fill-opacity:1;fill-rule:nonzero;stroke:#878984;stroke-linejoin:round;stroke-opacity:1" />
- <rect
- y="726.98163"
- x="871.19214"
- height="14.097941"
- width="11.048544"
- id="rect11048"
- style="fill:#eaeaea;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- y="729.05878"
- x="872.24414"
- height="1.1048543"
- width="8.9714174"
- id="rect11050"
- style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="rect11052"
- width="8.9714174"
- height="1.1048543"
- x="872.24414"
- y="731.05878" />
- <rect
- y="735.05878"
- x="872.24414"
- height="1.1048543"
- width="8.9714174"
- id="rect11054"
- style="fill:#c6c6c5;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <g
- id="g11125">
- <path
- style="fill:url(#linearGradient11142);fill-opacity:1;stroke:#804f01;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none"
- d="m 880.00066,736.45436 9.30287,-9.43545 2.45278,2.34229 -9.30287,9.25867 -3.97748,1.67938 z"
- id="path11075"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" />
- <path
- style="fill:#000000;fill-opacity:1;stroke:none"
- d="m 878.68802,738.78561 -1.02751,2.33124 2.37543,-1.0938 z"
- id="path11085"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- </g>
- <g
- id="g11121">
- <path
- style="fill:url(#linearGradient11144);fill-opacity:1;stroke:#878984;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- d="m 870.39783,732.42847 -2.45576,2.45578 0,1.99046 1.62855,0 2.63673,-2.63672"
- id="path11097"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <path
- sodipodi:type="arc"
- style="fill:url(#radialGradient11146);fill-opacity:1;fill-rule:nonzero;stroke:#878984;stroke-opacity:1"
- id="path11101"
- sodipodi:cx="6.9826794"
- sodipodi:cy="5.9796119"
- sodipodi:rx="4.9276505"
- sodipodi:ry="4.9276505"
- d="m 11.91033,5.9796119 c 0,2.7214662 -2.2061844,4.9276501 -4.9276506,4.9276501 -2.7214662,0 -4.9276505,-2.2061839 -4.9276505,-4.9276501 0,-2.7214662 2.2061843,-4.9276505 4.9276505,-4.9276505 2.7214662,0 4.9276506,2.2061843 4.9276506,4.9276505 z"
- transform="matrix(0.92061147,0,0,0.92061147,867.88725,724.95103)" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.css b/extensions/WikiEditor/modules/jquery.wikiEditor.css
deleted file mode 100644
index cabe6a94..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.css
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * CSS for WikiEditor jQuery plugin
- */
-
-.wikiEditor-ui {
- position: relative;
- clear: both;
- width: 100%;
- background-color: #E0EEf7;
-}
-.wikiEditor-ui textarea {
- width: 100%;
- border: 0;
-}
-.wikiEditor-ui textarea:focus {
- outline: none;
-}
-.wikiEditor-ui .wikiEditor-ui-clear {
- clear: both;
-}
-.wikiEditor-ui .wikiEditor-ui-view {
- border: 1px solid silver;
-}
-.wikiEditor-ui .wikiEditor-ui-top {
- position: relative;
- border-bottom: 1px solid silver;
-}
-.wikiEditor-ui .wikiEditor-ui-left {
- float: left;
- width: 100%;
-}
-.wikiEditor-ui .wikiEditor-ui-right {
- float: right;
- background: #F3F3F3;
- overflow: hidden;
-}
-.wikiEditor-wikitext {
- float: left;
- width: 100%;
-}
-.wikiEditor-ui-controls {
- float: left;
- width: 100%;
- background-color: white;
-}
-.wikiEditor-ui-tabs {
- float: left;
- height: 2.5em;
- margin-right: -1px;
- background-color: white;
- border-left: 1px solid silver;
- border-top: 1px solid silver;
-}
-.wikiEditor-ui-buttons {
- float: right;
- height: 2.5em;
- margin-right: -1px;
- background-color: white;
- padding-left: 1em;
- border-top: 1px solid white;
-}
-.wikiEditor-ui-buttons button {
- margin-left: 0.5em;
-}
-.wikiEditor-ui-tabs div {
- float: left;
- height: 2.5em;
- background-color: #f3f3f3;
- border-right: 1px solid silver;
- border-bottom: 1px solid silver;
-}
-.wikiEditor-ui-tabs div.current {
- border-bottom: 1px solid white;
- background-color: white;
-}
-.wikiEditor-ui-tabs div a {
- display: inline-block;
- padding: 0 0.75em;
- line-height: 2.5em;
- color: #0645AD;
-}
-.wikiEditor-ui-tabs div.current a {
- color: #333333;
-}
-.wikiEditor-ui-tabs div.current a:hover {
- text-decoration: none;
-}
-
-.wikiEditor-view-wikitext {
- line-height: 1em;
-}
-.wikiEditor-ui-loading {
- background: #f3f3f3;
- z-index: 10;
- position: absolute;
- top: 0;
- left: 0;
- text-align: center;
- height: 100%;
- width: 100%;
- border: 1px solid silver;
- margin: -1px;
-}
-.wikiEditor-ui-loading span {
- display: block;
- height: 24px;
- width: 24px;
- /* @embed */
- background: url(images/toolbar/loading.gif) 0 0 no-repeat;
- text-indent: -9999px;
- margin: 0 auto;
-}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.css b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.css
deleted file mode 100644
index 1cc9f5a1..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.css
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * CSS for WikiEditor Dialogs
- */
-
-/* Table Dialog */
-#wikieditor-toolbar-table-dialog fieldset {
- width: 218px;
- padding: 0;
- float: left;
-}
-
-#wikieditor-toolbar-table-dialog .wikieditor-toolbar-table-preview-wrapper {
- width: 330px;
- padding: 0;
- float: right;
-}
-
-.wikieditor-toolbar-table-preview-content * {
- cursor: default;
-}
-.wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-wrapper table {
- width: 100% !important;
-}
-.wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-content table td {
- padding: 10px 4px !important;
- height: auto !important;
-}
-.wikiEditor-toolbar-dialog .wikieditor-toolbar-table-preview-content table th {
- padding: 7px 3px !important;
-}
-.wikieditor-toolbar-table-dimension-fields .wikieditor-toolbar-field-wrapper {
- float: left;
- margin-right: 20px;
- vertical-align: bottom;
-}
-
-.wikiEditor-toolbar-dialog .ui-dialog-content {
- padding: 30px 20px 0 !important;
-}
-.wikieditor-toolbar-dialog-wrapper {
- width: 100%;
-}
-/* Insert Link Dialog */
-#wikieditor-toolbar-link-int-target-status {
- float: right;
-}
-#wikieditor-toolbar-link-int-target,
-#wikieditor-toolbar-link-int-text {
- width: 100%;
-}
-#wikieditor-toolbar-tool-link-int-target-label {
- float: left;
- line-height: 1.7em;
-}
-#wikieditor-toolbar-link-int-target-status-exists,
-#wikieditor-toolbar-link-int-target-status-notexists,
-#wikieditor-toolbar-link-int-target-status-invalid,
-#wikieditor-toolbar-link-int-target-status-external,
-#wikieditor-toolbar-link-int-target-status-disambig {
- padding-left: 30px;
- background-position: 0 50%;
- background-repeat: no-repeat;
-}
-#wikieditor-toolbar-link-int-target-status-exists {
- /* @embed */
- background-image: url(images/dialogs/insert-link-exists.png);
- background-position: left;
-}
-#wikieditor-toolbar-link-int-target-status-notexists {
- /* @embed */
- background-image: url(images/dialogs/insert-link-notexists.png);
- background-position: left;
-}
-#wikieditor-toolbar-link-int-target-status-invalid {
- /* @embed */
- background-image: url(images/dialogs/insert-link-invalid.png);
- background-position: left;
-}
-#wikieditor-toolbar-link-int-target-status-external {
- /* @embed */
- background-image: url(images/dialogs/insert-link-external.png);
- background-position: left;
-}
-#wikieditor-toolbar-link-int-target-status-disambig {
- /* @embed */
- background-image: url(images/dialogs/insert-disambiguation.png);
- background-position: left;
-}
-/* File dialog */
-#wikieditor-toolbar-file-target,
-#wikieditor-toolbar-file-caption {
- width: 100%;
-}
-.wikieditor-toolbar-file-options .wikieditor-toolbar-field-wrapper {
- float: left;
- margin: 0 20px 0 0;
-}
-/* Reference Dialog */
-#wikieditor-toolbar-reference-dialog label {
- float: left;
- line-height: 1.7em;
-}
-#wikieditor-toolbar-reference-text {
- width: 100%;
-}
-/* RTL Changes */
-
-body.rtl #wikieditor-toolbar-link-int-target-status-external {
- /* @embed */
- background-image: url(images/dialogs/insert-link-external-rtl.png);
-}
-
-body.rtl .wikiEditor-toolbar-dialog .ui-dialog-buttonpane button {
- float: left;
- margin: 0.5em 0.4em 0.5em 0 !important;
-}
-/* Template Editor Dialogs */
-.wikiEditor-template-dialog-fields label {
- text-transform: capitalize;
- float: left;
- width: 25%;
- line-height: 2.25em;
-}
-.wikiEditor-template-dialog-fields textarea {
- float: right;
- width: 70%;
- line-height: 1.5em;
- height: 1.5em;
-}
-.wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper {
- padding: 0.75em 0.33em;
- border-bottom: 1px dashed silver;
- clear: both;
-}
-.wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper:first-child {
- padding-top: 0;
-}
-.wikiEditor-template-dialog-fields .wikiEditor-template-dialog-field-wrapper:last-child {
- border-bottom: none;
-}
-/* Self Clearing Floats */
-.wikieditor-toolbar-table-dimension-fields:after,
-.wikieditor-toolbar-dialog-wrapper:after {
- visibility: hidden;
- display: block;
- font-size: 0;
- content: " ";
- clear: both;
- height: 0;
-}
-.wikieditor-toolbar-table-dimension-fields,
-.wikieditor-toolbar-dialog-wrapper {
- display: inline-table;
-}
-/* Hides from IE-mac \*/
-* html .wikieditor-toolbar-table-dimension-fields,
-* html .wikieditor-toolbar-dialog-wrapper {
- height: 1%;
-}
-.wikieditor-toolbar-table-dimension-fields,
-.wikieditor-toolbar-dialog-wrapper {
- display: block;
-}
-/* End hide from IE-mac */
-.wikiEditor-toolbar-dialog .ui-dialog-buttonpane {
- border-top: 1px solid #cccccc !important;
-}
-.wikiEditor-toolbar-dialog .ui-dialog-content {
- padding-bottom: 1em !important;
-}
-/* Edit dialog */
-.wikiEditor-dialog-editoptions {
- margin-top: 15px;
-}
-/* Publish dialog */
-.wikiEditor-publish-dialog-copywarn {
- margin-top: 0.5em;
-}
-.wikiEditor-publish-dialog-summary {
- margin-top: 1.5em;
-}
-.wikiEditor-publish-dialog-options {
- margin-top: 1.5em;
-}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js
index 8cd50a06..31b54805 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js
@@ -119,6 +119,8 @@ $.wikiEditor.modules.dialogs.config = {
</fieldset>',
init: function () {
+ var api = new mw.Api();
+
function isExternalLink( s ) {
// The following things are considered to be external links:
// * Starts a URL protocol
@@ -198,7 +200,7 @@ $.wikiEditor.modules.dialogs.config = {
// If the Disambiguator extension is not installed then such a property won't be set.
$( '#wikieditor-toolbar-link-int-target-status' ).data(
'request',
- ( new mw.Api() ).get( {
+ api.get( {
action: 'query',
prop: 'pageprops',
titles: target,
@@ -328,28 +330,23 @@ $.wikiEditor.modules.dialogs.config = {
} );
// Add images to the page existence widget, which will be shown mutually exclusively to communicate if
// the page exists, does not exist or the title is invalid (like if it contains a | character)
- var existsMsg = mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-exists' );
- var notexistsMsg = mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-notexists' );
- var invalidMsg = mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-invalid' );
- var externalMsg = mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-external' );
var loadingMsg = mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-loading' );
- var disambigMsg = mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-disambig' );
$( '#wikieditor-toolbar-link-int-target-status' )
.append( $( '<div>' )
.attr( 'id', 'wikieditor-toolbar-link-int-target-status-exists' )
- .append( existsMsg )
+ .text( mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-exists' ) )
)
.append( $( '<div>' )
.attr( 'id', 'wikieditor-toolbar-link-int-target-status-notexists' )
- .append( notexistsMsg )
+ .text( mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-notexists' ) )
)
.append( $( '<div>' )
.attr( 'id', 'wikieditor-toolbar-link-int-target-status-invalid' )
- .append( invalidMsg )
+ .text( mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-invalid' ) )
)
.append( $( '<div>' )
.attr( 'id', 'wikieditor-toolbar-link-int-target-status-external' )
- .append( externalMsg )
+ .text( mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-external' ) )
)
.append( $( '<div>' )
.attr( 'id', 'wikieditor-toolbar-link-int-target-status-loading' )
@@ -361,7 +358,7 @@ $.wikiEditor.modules.dialogs.config = {
)
.append( $( '<div>' )
.attr( 'id', 'wikieditor-toolbar-link-int-target-status-disambig' )
- .append( disambigMsg )
+ .text( mw.msg( 'wikieditor-toolbar-tool-link-int-target-status-disambig' ) )
)
.data( 'existencecache', {} )
.children().hide();
@@ -403,20 +400,15 @@ $.wikiEditor.modules.dialogs.config = {
return;
}
- var request = $.ajax( {
- url: mw.util.wikiScript( 'api' ),
- data: {
- action: 'opensearch',
- search: title,
- namespace: 0,
- suggest: '',
- format: 'json'
- },
- dataType: 'json',
- success: function ( data ) {
- cache[title] = data[1];
- $( that ).suggestions( 'suggestions', data[1] );
- }
+ var request = api.get( {
+ action: 'opensearch',
+ search: title,
+ namespace: 0,
+ suggest: ''
+ } )
+ .done( function ( data ) {
+ cache[title] = data[1];
+ $( that ).suggestions( 'suggestions', data[1] );
} );
$( this ).data( 'request', request );
},
@@ -474,6 +466,7 @@ $.wikiEditor.modules.dialogs.config = {
else
insertText = '[[' + target + '|' + escapeInternalText( text ) + ']]';
} else {
+ target = $.trim( target );
// Prepend http:// if there is no protocol
if ( !target.match( /^[a-z]+:\/\/./ ) )
target = 'http://' + target;
@@ -602,7 +595,7 @@ $.wikiEditor.modules.dialogs.config = {
$( '#wikieditor-toolbar-link-int-target' ).suggestions();
// don't overwrite user's text
- if ( selection !== '' ){
+ if ( selection !== '' ) {
$( '#wikieditor-toolbar-link-int-text' ).data( 'untouched', false );
}
@@ -813,7 +806,7 @@ $.wikiEditor.modules.dialogs.config = {
if ( fileName !== '' ) {
fileTitle = new mw.Title( fileName );
// Append file namespace prefix to filename if not already contains it
- if ( fileTitle.getNamespaceId() !== 6 ){
+ if ( fileTitle.getNamespaceId() !== 6 ) {
fileTitle = new mw.Title( fileName, 6 );
}
fileName = fileTitle.toText();
@@ -1101,7 +1094,7 @@ $.wikiEditor.modules.dialogs.config = {
'browsers': {
// Left-to-right languages
'ltr': {
- 'msie': false,
+ 'msie': [['>=', 11]], // Known to work on 11.
'firefox': [['>=', 2]],
'opera': false,
'safari': [['>=', 3]],
@@ -1109,7 +1102,7 @@ $.wikiEditor.modules.dialogs.config = {
},
// Right-to-left languages
'rtl': {
- 'msie': false,
+ 'msie': [['>=', 11]], // Works on 11 but dialog positioning is cruddy.
'firefox': [['>=', 2]],
'opera': false,
'safari': [['>=', 3]],
@@ -1128,11 +1121,11 @@ $.wikiEditor.modules.dialogs.config = {
<fieldset>\
<div class="wikieditor-toolbar-field-wrapper">\
<label for="wikieditor-toolbar-replace-search" rel="wikieditor-toolbar-tool-replace-search"></label>\
- <input type="text" id="wikieditor-toolbar-replace-search" style="width: 100%;"/>\
+ <input type="text" id="wikieditor-toolbar-replace-search"/>\
</div>\
<div class="wikieditor-toolbar-field-wrapper">\
<label for="wikieditor-toolbar-replace-replace" rel="wikieditor-toolbar-tool-replace-replace"></label>\
- <input type="text" id="wikieditor-toolbar-replace-replace" style="width: 100%;"/>\
+ <input type="text" id="wikieditor-toolbar-replace-replace"/>\
</div>\
<div class="wikieditor-toolbar-field-wrapper">\
<input type="checkbox" id="wikieditor-toolbar-replace-case"/>\
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.less b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.less
new file mode 100644
index 00000000..72b384d3
--- /dev/null
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.less
@@ -0,0 +1,234 @@
+@import "mediawiki.mixins";
+
+/*
+ * CSS for WikiEditor Dialogs
+ */
+
+/* Replace Dialog */
+#wikieditor-toolbar-replace-search,
+#wikieditor-toolbar-replace-replace {
+ width: 100%;
+}
+
+/* Table Dialog */
+#wikieditor-toolbar-table-dialog {
+ fieldset {
+ width: 218px;
+ padding: 0;
+ float: left;
+ }
+
+ .wikieditor-toolbar-table-preview-wrapper {
+ width: 330px;
+ padding: 0;
+ float: right;
+ }
+}
+
+.wikieditor-toolbar-table-preview-content * {
+ cursor: default;
+}
+
+.wikiEditor-toolbar-dialog {
+ .wikieditor-toolbar-table-preview-wrapper {
+ table {
+ width: 100% !important;
+ }
+ }
+
+ .wikieditor-toolbar-table-preview-content {
+ table {
+ td {
+ padding: 10px 4px !important;
+ height: auto !important;
+ }
+
+ th {
+ padding: 7px 3px !important;
+ }
+ }
+ }
+
+ .ui-dialog-content {
+ padding: 30px 20px 1em !important;
+ }
+
+ .ui-dialog-buttonpane {
+ border-top: 1px solid #cccccc !important;
+ }
+}
+
+.wikieditor-toolbar-table-dimension-fields {
+ .wikieditor-toolbar-field-wrapper {
+ float: left;
+ margin-right: 20px;
+ vertical-align: bottom;
+ }
+}
+
+.wikieditor-toolbar-dialog-wrapper {
+ width: 100%;
+}
+
+/* Insert Link Dialog */
+#wikieditor-toolbar-link-int-target-status {
+ float: right;
+}
+
+#wikieditor-toolbar-link-int-target,
+#wikieditor-toolbar-link-int-text {
+ width: 100%;
+}
+
+#wikieditor-toolbar-tool-link-int-target-label {
+ float: left;
+ line-height: 1.7em;
+}
+
+#wikieditor-toolbar-link-int-target-status-exists,
+#wikieditor-toolbar-link-int-target-status-notexists,
+#wikieditor-toolbar-link-int-target-status-invalid,
+#wikieditor-toolbar-link-int-target-status-external,
+#wikieditor-toolbar-link-int-target-status-disambig {
+ padding-left: 30px;
+ background-position: 0 50%;
+ background-repeat: no-repeat;
+}
+
+#wikieditor-toolbar-link-int-target-status-exists {
+ .background-image('images/dialogs/insert-link-exists.png');
+ background-position: left;
+}
+
+#wikieditor-toolbar-link-int-target-status-notexists {
+ .background-image('images/dialogs/insert-link-notexists.png');
+ background-position: left;
+}
+
+#wikieditor-toolbar-link-int-target-status-invalid {
+ .background-image('images/dialogs/insert-link-invalid.png');
+ background-position: left;
+}
+
+#wikieditor-toolbar-link-int-target-status-external {
+ .background-image('images/dialogs/insert-link-external.png');
+ background-position: left;
+}
+
+#wikieditor-toolbar-link-int-target-status-disambig {
+ .background-image('images/dialogs/insert-disambiguation.png');
+ background-position: left;
+}
+
+/* File dialog */
+#wikieditor-toolbar-file-target,
+#wikieditor-toolbar-file-caption {
+ width: 100%;
+}
+
+.wikieditor-toolbar-file-options {
+ .wikieditor-toolbar-field-wrapper {
+ float: left;
+ margin: 0 20px 0 0;
+ }
+}
+
+/* Reference Dialog */
+#wikieditor-toolbar-reference-dialog {
+ label {
+ float: left;
+ line-height: 1.7em;
+ }
+}
+
+#wikieditor-toolbar-reference-text {
+ width: 100%;
+}
+
+/* RTL Changes */
+
+body.rtl {
+ .wikiEditor-toolbar-dialog {
+ .ui-dialog-buttonpane {
+ button {
+ float: left;
+ margin: 0.5em 0.4em 0.5em 0 !important;
+ }
+ }
+ }
+}
+
+/* Template Editor Dialogs */
+.wikiEditor-template-dialog-fields {
+ label {
+ text-transform: capitalize;
+ float: left;
+ width: 25%;
+ line-height: 2.25em;
+ }
+
+ textarea {
+ float: right;
+ width: 70%;
+ line-height: 1.5em;
+ height: 1.5em;
+ }
+
+ .wikiEditor-template-dialog-field-wrapper {
+ padding: 0.75em 0.33em;
+ border-bottom: 1px dashed silver;
+ clear: both;
+
+ &:first-child {
+ padding-top: 0;
+ }
+
+ &:last-child {
+ border-bottom: none;
+ }
+ }
+}
+
+/* Self Clearing Floats */
+.wikieditor-toolbar-table-dimension-fields:after,
+.wikieditor-toolbar-dialog-wrapper:after {
+ visibility: hidden;
+ display: block;
+ font-size: 0;
+ content: " ";
+ clear: both;
+ height: 0;
+}
+
+/* Hides from IE-mac \*/
+* html {
+ .wikieditor-toolbar-table-dimension-fields,
+ .wikieditor-toolbar-dialog-wrapper {
+ height: 1%;
+ }
+}
+
+.wikieditor-toolbar-table-dimension-fields,
+.wikieditor-toolbar-dialog-wrapper {
+ display: inline-table;
+ display: block;
+}
+
+/* End hide from IE-mac */
+/* Edit dialog */
+.wikiEditor-dialog-editoptions {
+ margin-top: 15px;
+}
+
+/* Publish dialog */
+.wikiEditor-publish-dialog-copywarn {
+ margin-top: 0.5em;
+}
+
+.wikiEditor-publish-dialog-summary {
+ margin-top: 1.5em;
+}
+
+.wikiEditor-publish-dialog-options {
+ margin-top: 1.5em;
+}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.css b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.css
deleted file mode 100644
index b97ce7e3..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.css
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * CSS for WikiEditor Dialogs jQuery plugin
- */
-
-.wikiEditor-toolbar-dialog table {
- margin-top: 0.75em;
-}
-
-.wikiEditor-toolbar-dialog table td {
- padding: 0.5em;
- height: 3em;
- overflow: visible;
-}
-
-/* Put suggestions (default z-index 99) on top of dialogs (z-index 1002) */
-div.suggestions {
- z-index: 1099;
-}
-
-.wikiEditor-toolbar-dialog table td {
- padding: 0 !important;
-}
-
-.wikiEditor-toolbar-dialog .ui-dialog-content fieldset {
- border: none !important;
- margin: 0 !important;
- padding: 0 !important;
-}
-
-.wikiEditor-toolbar-dialog .ui-widget-header {
- border-bottom:1px solid #6bc8f3 !important;
-}
-
-.wikiEditor-toolbar-dialog .ui-dialog-content input[type=text] {
- -moz-box-sizing: border-box;
- -ms-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- -khtml-box-sizing: border-box;
-}
-
-.wikiEditor-toolbar-dialog .ui-dialog-content input[type="radio"],
-.wikiEditor-toolbar-dialog .ui-dialog-content input[type="checkbox"] {
- margin-left: 0;
-}
-
-.wikiEditor-toolbar-dialog .ui-dialog-titlebar-close {
- padding: 0;
-}
-body .wikiEditor-toolbar-dialog .ui-dialog-titlebar-close {
- right: 0.9em;
-}
-
-.wikieditor-toolbar-field-wrapper {
- padding: 0 0 25px 0;
-}
-
-.wikieditor-toolbar-floated-field-wrapper {
- float: left;
- margin-right: 2em;
-}
-
-.wikieditor-toolbar-dialog-hint {
- color: #999999;
-}
-
-.wikiEditor-toolbar-dialog {
- border: none;
-} \ No newline at end of file
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.less b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.less
new file mode 100644
index 00000000..6516d090
--- /dev/null
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.less
@@ -0,0 +1,60 @@
+/**
+ * CSS for WikiEditor Dialogs jQuery plugin
+ */
+
+.wikiEditor-toolbar-dialog {
+ border: none;
+
+ .ui-dialog-content {
+ fieldset {
+ border: none !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ }
+
+ input[type=text] {
+ -moz-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ -khtml-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ input {
+ &[type="radio"],
+ &[type="checkbox"] {
+ margin-left: 0;
+ }
+ }
+ }
+
+ .ui-dialog-titlebar-close {
+ padding: 0;
+ }
+}
+
+/* Put suggestions (default z-index 99) on top of dialogs (z-index 1002) */
+div.suggestions {
+ z-index: 1099;
+}
+
+body {
+ .wikiEditor-toolbar-dialog {
+ .ui-dialog-titlebar-close {
+ right: 0.9em;
+ }
+ }
+}
+
+.wikieditor-toolbar-field-wrapper {
+ padding: 0 0 25px 0;
+}
+
+.wikieditor-toolbar-floated-field-wrapper {
+ float: left;
+ margin-right: 2em;
+}
+
+.wikieditor-toolbar-dialog-hint {
+ color: #999999;
+}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.html b/extensions/WikiEditor/modules/jquery.wikiEditor.html
index 7a890af0..349f0273 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.html
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.html
@@ -6,14 +6,14 @@
<!--[if gte IE 8]>
<style>
/* IE8 ONLY - This is how we are fixing the double-height of BR tags when they are alone in a P tag */
- p > br {
+ p > br {
display: none;
}
- p > br + br {
+ p > br + br {
display: block;
}
</style>
- <![endif]-->
+ <![endif]-->
<style>
body {
margin: 0;
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.js b/extensions/WikiEditor/modules/jquery.wikiEditor.js
index e5d34aa9..7c8e4c35 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.js
@@ -11,6 +11,8 @@
/*jshint onevar:false, boss:true */
( function ( $, mw ) {
+var hasOwn = Object.prototype.hasOwnProperty;
+
/**
* Global static object for wikiEditor that provides generally useful functionality to all modules and contexts.
*/
@@ -80,7 +82,7 @@ $.wikiEditor = {
* Path to images - this is a bit messy, and it would need to change if this code (and images) gets moved into the
* core - or anywhere for that matter...
*/
- imgPath : mw.config.get( 'wgExtensionAssetsPath' ) + '/WikiEditor/modules/images/',
+ imgPath: mw.config.get( 'wgExtensionAssetsPath' ) + '/WikiEditor/modules/images/',
/**
* Checks the current browser against the browsers object to determine if the browser has been black-listed or not.
@@ -123,8 +125,7 @@ $.wikiEditor = {
},
/**
- * Provides a way to extract messages from objects. Wraps the mediaWiki.msg() function, which
- * may eventually become a wrapper for some kind of core MW functionality.
+ * Provides a way to extract messages from objects. Wraps a mediaWiki.message( ... ).plain() call.
*
* @param object Object to extract messages from
* @param property String of name of property which contains the message. This should be the base name of the
@@ -168,7 +169,8 @@ $.wikiEditor = {
*/
autoLang: function ( object, lang ) {
var defaultKey = $( 'body' ).hasClass( 'rtl' ) ? 'default-rtl' : 'default';
- return object[lang || mw.config.get( 'wgUserLanguage' )] || object[defaultKey] || object['default'] || object;
+ lang = lang || mw.config.get( 'wgUserLanguage' );
+ return hasOwn.call( object, lang ) ? object[lang] : ( object[defaultKey] || object['default'] || object );
},
/**
@@ -199,9 +201,9 @@ $.wikiEditor = {
*/
autoIconOrOffset: function ( icon, offset, path, lang ) {
lang = lang || mw.config.get( 'wgUserLanguage' );
- if ( typeof offset === 'object' && lang in offset ) {
+ if ( typeof offset === 'object' && hasOwn.call( offset, lang ) ) {
return offset[lang];
- } else if ( typeof icon === 'object' && lang in icon ) {
+ } else if ( typeof icon === 'object' && hasOwn.call( icon, lang ) ) {
return $.wikiEditor.autoIcon( icon, undefined, lang );
} else {
return $.wikiEditor.autoLang( offset, lang );
@@ -219,6 +221,9 @@ if ( !$.wikiEditor.isSupported() ) {
return $( this );
}
+// Save browser profile for detailed tests.
+var profile = $.client.profile();
+
/* Initialization */
// The wikiEditor context is stored in the element's data, so when this function gets called again we can pick up right
@@ -311,6 +316,11 @@ if ( !context || typeof context === 'undefined' ) {
* Executes core event filters as well as event handlers provided by modules.
*/
trigger: function ( name, event ) {
+ // Workaround for a scrolling bug in IE8 (bug 61908)
+ if ( profile.name === 'msie' && profile.versionNumber === 8 ) {
+ context.$textarea.css( 'width', context.$textarea.parent().width() );
+ }
+
// Event is an optional argument, but from here on out, at least the type field should be dependable
if ( typeof event === 'undefined' ) {
event = { 'type': 'custom' };
@@ -326,7 +336,7 @@ if ( !context || typeof context === 'undefined' ) {
return false;
}
}
- var returnFromModules = null; //they return null by default
+ var returnFromModules = null; // they return null by default
// Pass the event around to all modules activated on this context
for ( var module in context.modules ) {
@@ -337,7 +347,7 @@ if ( !context || typeof context === 'undefined' ) {
) {
var ret = $.wikiEditor.modules[module].evt[name]( context, event );
if ( ret !== null ) {
- //if 1 returns false, the end result is false
+ // if 1 returns false, the end result is false
if ( returnFromModules === null ) {
returnFromModules = ret;
} else {
@@ -416,28 +426,30 @@ if ( !context || typeof context === 'undefined' ) {
},
/**
- * Save scrollTop and cursor position for IE
+ * Save scrollTop and cursor position for old IE (<=10)
+ * Related to old IE 8 issues that are no longer reproducible
*/
saveCursorAndScrollTop: function () {
- if ( $.client.profile().name === 'msie' ) {
- var IHateIE = {
- 'scrollTop' : context.$textarea.scrollTop(),
+ if ( profile.name === 'msie' && document.selection && document.selection.createRange ) {
+ var IHateIE8 = {
+ 'scrollTop': context.$textarea.scrollTop(),
'pos': context.$textarea.textSelection( 'getCaretPosition', { startAndEnd: true } )
};
- context.$textarea.data( 'IHateIE', IHateIE );
+ context.$textarea.data( 'IHateIE8', IHateIE8 );
}
},
/**
- * Restore scrollTo and cursor position for IE
+ * Restore scrollTo and cursor position for IE (<=10)
+ * Related to old IE 8 issues that are no longer reproducible
*/
restoreCursorAndScrollTop: function () {
- if ( $.client.profile().name === 'msie' ) {
- var IHateIE = context.$textarea.data( 'IHateIE' );
- if ( IHateIE ) {
- context.$textarea.scrollTop( IHateIE.scrollTop );
- context.$textarea.textSelection( 'setSelection', { start: IHateIE.pos[0], end: IHateIE.pos[1] } );
- context.$textarea.data( 'IHateIE', null );
+ if ( profile.name === 'msie' && document.selection && document.selection.createRange ) {
+ var IHateIE8 = context.$textarea.data( 'IHateIE' );
+ if ( IHateIE8 ) {
+ context.$textarea.scrollTop( IHateIE8.scrollTop );
+ context.$textarea.textSelection( 'setSelection', { start: IHateIE8.pos[0], end: IHateIE8.pos[1] } );
+ context.$textarea.data( 'IHateIE8', null );
}
}
},
@@ -446,7 +458,7 @@ if ( !context || typeof context === 'undefined' ) {
* Save text selection for old IE (<=10)
*/
saveSelection: function () {
- if ( $.client.profile().name === 'msie' && document.selection && document.selection.createRange ) {
+ if ( profile.name === 'msie' && document.selection && document.selection.createRange ) {
context.$textarea.focus();
context.savedSelection = document.selection.createRange();
}
@@ -456,7 +468,7 @@ if ( !context || typeof context === 'undefined' ) {
* Restore text selection for old IE (<=10)
*/
restoreSelection: function () {
- if ( $.client.profile().name === 'msie' && context.savedSelection !== null ) {
+ if ( profile.name === 'msie' && context.savedSelection !== null ) {
context.$textarea.focus();
context.savedSelection.select();
context.savedSelection = null;
@@ -467,8 +479,9 @@ if ( !context || typeof context === 'undefined' ) {
/**
* Workaround for a scrolling bug in IE8 (bug 61908)
*/
- if ( $.client.profile().name === 'msie' ) {
+ if ( profile.name === 'msie' && profile.versionNumber === 8 ) {
context.$textarea.css( 'height', context.$textarea.height() );
+ context.$textarea.css( 'width', context.$textarea.parent().width() );
}
/**
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.less b/extensions/WikiEditor/modules/jquery.wikiEditor.less
new file mode 100644
index 00000000..18adf867
--- /dev/null
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.less
@@ -0,0 +1,134 @@
+@import "mediawiki.mixins";
+
+/*
+ * CSS for WikiEditor jQuery plugin
+ */
+
+.wikiEditor-ui {
+ position: relative;
+ clear: both;
+ width: 100%;
+ background-color: #E0EEf7;
+
+ textarea {
+ width: 100%;
+ border: 0;
+
+ &:focus {
+ outline: none;
+ }
+ }
+
+ .wikiEditor-ui-clear {
+ clear: both;
+ }
+
+ .wikiEditor-ui-view {
+ border: 1px solid silver;
+ }
+
+ .wikiEditor-ui-top {
+ position: relative;
+ border-bottom: 1px solid silver;
+ }
+
+ .wikiEditor-ui-left {
+ float: left;
+ width: 100%;
+ }
+
+ .wikiEditor-ui-right {
+ float: right;
+ background: #F3F3F3;
+ overflow: hidden;
+ }
+}
+
+.wikiEditor-wikitext {
+ float: left;
+ width: 100%;
+}
+
+.wikiEditor-ui-controls {
+ float: left;
+ width: 100%;
+ background-color: white;
+}
+
+.wikiEditor-ui-tabs {
+ float: left;
+ height: 2.5em;
+ margin-right: -1px;
+ background-color: white;
+ border-left: 1px solid silver;
+ border-top: 1px solid silver;
+
+ div {
+ float: left;
+ height: 2.5em;
+ background-color: #f3f3f3;
+ border-right: 1px solid silver;
+ border-bottom: 1px solid silver;
+
+ a {
+ display: inline-block;
+ padding: 0 0.75em;
+ line-height: 2.5em;
+ color: #0645AD;
+ }
+
+ &.current {
+ border-bottom: 1px solid white;
+ background-color: white;
+
+ a {
+ color: #333333;
+
+ &:hover {
+ text-decoration: none;
+ }
+ }
+ }
+ }
+}
+
+.wikiEditor-ui-buttons {
+ float: right;
+ height: 2.5em;
+ margin-right: -1px;
+ background-color: white;
+ padding-left: 1em;
+ border-top: 1px solid white;
+
+ button {
+ margin-left: 0.5em;
+ }
+}
+
+.wikiEditor-view-wikitext {
+ line-height: 1em;
+}
+
+.wikiEditor-ui-loading {
+ background: #f3f3f3;
+ border: 1px solid silver;
+ left: 0;
+ height: 100%;
+ margin: -1px;
+ position: absolute;
+ text-align: center;
+ top: 0;
+ width: 100%;
+ z-index: 10;
+
+ span {
+ display: block;
+ height: 24px;
+ width: 24px;
+ .background-image('images/toolbar/loading.gif');
+ background-position: 0 0;
+ background-repeat: no-repeat;
+ text-indent: -9999px;
+ margin: 0 auto;
+ }
+}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.css b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.css
deleted file mode 100644
index 6b026a1e..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.css
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * CSS for WikiEditor Preview jQuery plugin
- */
-
-.wikiEditor-preview-loading {
- padding: 1em;
- background-color: white;
-}
-
-.wikiEditor-preview-loading span {
- color: #666666;
-}
-
-.wikiEditor-preview-spinner {
- padding-right: 1em;
-}
-
-.wikiEditor-preview-contents {
- padding: 1em;
- background-color: white;
-}
-
-/* FIXME: This only works for the first wikiEditor on the page! */
-#wikiEditor-0-preview-dialog .wikiEditor-ui-loading {
- overflow: hidden;
- border: none;
-}
-
-.ui-dialog .ui-dialog-buttonpane {
- margin: 0 !important;
-}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js
index f0665220..436b0720 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js
@@ -33,6 +33,8 @@ fn: {
* @param config Configuration object to create module from
*/
create: function ( context ) {
+ var api = new mw.Api();
+
if ( 'initialized' in context.modules.preview ) {
return;
}
@@ -53,18 +55,12 @@ fn: {
}
context.modules.preview.$preview.find( '.wikiEditor-preview-contents' ).empty();
context.modules.preview.$preview.find( '.wikiEditor-preview-loading' ).show();
- $.ajax( {
- url: mw.util.wikiScript( 'api' ),
- type: 'POST',
- dataType: 'json',
- data: {
- format: 'json',
- action: 'parse',
- title: mw.config.get( 'wgPageName' ),
- text: wikitext,
- prop: 'text|modules',
- pst: ''
- }
+ api.post( {
+ action: 'parse',
+ title: mw.config.get( 'wgPageName' ),
+ text: wikitext,
+ prop: 'text|modules',
+ pst: ''
} ).done( function ( data ) {
if ( !data.parse || !data.parse.text || data.parse.text['*'] === undefined ) {
return;
@@ -74,6 +70,7 @@ fn: {
context.modules.preview.$preview.find( '.wikiEditor-preview-loading' ).hide();
context.modules.preview.$preview.find( '.wikiEditor-preview-contents' )
.html( data.parse.text['*'] )
+ .append( '<div class="visualClear"></div>' )
.find( 'a:not([href^=#])' )
.click( false );
@@ -101,21 +98,14 @@ fn: {
context.$changesTab.find( '.wikiEditor-preview-loading' ).show();
// Call the API. First PST the input, then diff it
- $.ajax( {
- url: mw.util.wikiScript( 'api' ),
- type: 'POST',
- dataType: 'json',
- data: {
- format: 'json',
- action: 'parse',
- title: mw.config.get( 'wgPageName' ),
- onlypst: '',
- text: wikitext
- }
+ api.post( {
+ action: 'parse',
+ title: mw.config.get( 'wgPageName' ),
+ onlypst: '',
+ text: wikitext
} ).done( function ( data ) {
try {
var postdata2 = {
- format: 'json',
action: 'query',
indexpageids: '',
prop: 'revisions',
@@ -128,19 +118,17 @@ fn: {
postdata2.rvsection = section;
}
- $.ajax( {
- url: mw.util.wikiScript( 'api' ),
- type: 'POST',
- dataType: 'json',
- data: postdata2
- } ).done( function ( data ) {
+ api.post( postdata2 )
+ .done( function ( data ) {
// Add diff CSS
mw.loader.load( 'mediawiki.action.history.diff' );
try {
var diff = data.query.pages[data.query.pageids[0]]
.revisions[0].diff['*'];
- context.$changesTab.find( 'table.diff tbody' ).html( diff );
+ context.$changesTab.find( 'table.diff tbody' )
+ .html( diff )
+ .append( '<div class="visualClear"></div>' );
context.modules.preview.changesText = wikitext;
} catch ( e ) {
// "data.blah is undefined" error, ignore
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.less b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.less
new file mode 100644
index 00000000..fc8155bc
--- /dev/null
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.less
@@ -0,0 +1,35 @@
+/**
+ * CSS for WikiEditor Preview jQuery plugin
+ */
+
+.wikiEditor-preview-loading {
+ padding: 1em;
+ background-color: white;
+
+ span {
+ color: #666666;
+ }
+}
+
+.wikiEditor-preview-spinner {
+ padding-right: 1em;
+}
+
+.wikiEditor-preview-contents {
+ padding: 1em;
+ background-color: white;
+}
+
+/* FIXME: This only works for the first wikiEditor on the page! */
+#wikiEditor-0-preview-dialog {
+ .wikiEditor-ui-loading {
+ overflow: hidden;
+ border: none;
+ }
+}
+
+.ui-dialog {
+ .ui-dialog-buttonpane {
+ margin: 0 !important;
+ }
+}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.css b/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.css
deleted file mode 100644
index f66773b0..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.css
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * CSS for WikiEditor Preview Dialog jQuery plugin
- */
-
-/* FIXME: This only works for the first wikiEditor on the page! */
-#wikiEditor-0-preview-dialog .wikiEditor-ui-loading {
- background: #f3f3f3;
- z-index: 10;
- position: absolute;
- left: 0;
- text-align: center;
- height: 100%;
- width: 100%;
- overflow: hidden;
- border: none;
-}
-
-/* FIXME: This only works for the first wikiEditor on the page! */
-#wikiEditor-0-preview-dialog .wikiEditor-ui-loading span {
- display: block;
- height: 24px;
- width: 24px;
- /* @embed */
- background: url(images/toolbar/loading.gif) 0 0 no-repeat;
- text-indent: -9999px;
- margin: 50px auto;
-}
-
-.ui-dialog .ui-dialog-buttonpane {
- margin: 0 !important;
-}
-
-.wikiEditor-preview-dialog-contents {
- font-size: 0.9em !important;
-}
-
-.wikiEditor-preview-dialog-contents #firstHeading {
- font-size: 2.1em;
-}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js b/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js
deleted file mode 100644
index 34f38e30..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Publish module for wikiEditor */
-/*jshint onevar:false */
-( function ( $, mw ) { $.wikiEditor.modules.previewDialog = {
-
-/**
- * Compatability map
- */
-'browsers': {
- // Left-to-right languages
- 'ltr': {
- 'msie': [['>=', 7]],
- 'firefox': [['>=', 3]],
- 'opera': [['>=', 9.6]],
- 'safari': [['>=', 4]]
- },
- // Right-to-left languages
- 'rtl': {
- 'msie': [['>=', 8]],
- 'firefox': [['>=', 3]],
- 'opera': [['>=', 9.6]],
- 'safari': [['>=', 4]]
- }
-},
-/**
- * Internally used functions
- */
-fn: {
- /**
- * Creates a publish module within a wikiEditor
- * @param context Context object of editor to create module in
- * @param config Configuration object to create module from
- */
- create: function ( context ) {
- // Build the dialog behind the Publish button
- var dialogID = 'wikiEditor-' + context.instance + '-preview-dialog';
- $.wikiEditor.modules.dialogs.fn.create(
- context,
- {
- preview: {
- id: dialogID,
- titleMsg: 'wikieditor-preview-tab',
- html: '\
- <div class="wikiEditor-ui-loading"><span></span></div>\
- <div class="wikiEditor-preview-dialog-contents"></div>\
- ',
- init: function () {
- },
- dialog: {
- buttons: {
- 'wikieditor-publish-dialog-publish': function () {
- var minorChecked = $( '#wikiEditor-' + context.instance +
- '-dialog-minor' ).is( ':checked' ) ?
- 'checked' : '';
- var watchChecked = $( '#wikiEditor-' + context.instance +
- '-dialog-watch' ).is( ':checked' ) ?
- 'checked' : '';
- $( '#wpMinoredit' ).attr( 'checked', minorChecked );
- $( '#wpWatchthis' ).attr( 'checked', watchChecked );
- $( '#wpSummary' ).val( $( '#wikiEditor-' + context.instance +
- '-dialog-summary' ).val() );
- $( '#editform' ).submit();
- },
- 'wikieditor-publish-dialog-goback': function () {
- $( this ).dialog( 'close' );
- }
- },
- resizable: false,
- height: $( 'body' ).height() - 100,
- width: $( 'body' ).width() - 300,
- position: ['center', 'top'],
- open: function () {
- // Gets the latest copy of the wikitext
- var wikitext = context.fn.getContents();
- var $dialog = $( '#' + dialogID );
- $dialog
- .css( 'position', 'relative' )
- .css( 'height', $( 'body' ).height() - 200 )
- .parent()
- .css( 'top', '25px' );
- // $dialog.dialog( 'option', 'width', $( 'body' ).width() - 300 );
- // Aborts when nothing has changed since the last preview
- if ( context.modules.preview.previewText === wikitext ) {
- return;
- }
-
- $dialog.find( '.wikiEditor-preview-dialog-contents' ).empty();
- $dialog.find( '.wikiEditor-ui-loading' ).show();
- $.post(
- mw.util.wikiScript( 'api' ),
- {
- 'action': 'parse',
- 'title': mw.config.get( 'wgPageName' ),
- 'text': wikitext,
- 'prop': 'text',
- 'pst': '',
- 'format': 'json'
- },
- function ( data ) {
- if (
- typeof data.parse === 'undefined' ||
- typeof data.parse.text === 'undefined' ||
- typeof data.parse.text['*'] === 'undefined'
- ) {
- return;
- }
- context.modules.preview.previewText = wikitext;
- $dialog.find( '.wikiEditor-ui-loading' ).hide();
- $dialog.find( '.wikiEditor-preview-dialog-contents' )
- .html( '<h1 class="firstHeading" id="firstHeading">' +
- mw.config.get( 'wgTitle' ) + '</h1>' +
- data.parse.text['*'] )
- .find( 'a:not([href^=#])' ).click( function () { return false; } );
- },
- 'json'
- );
- }
- },
- resizeme: false
- }
- }
- );
- context.fn.addButton( {
- 'captionMsg': 'wikieditor-preview-tab',
- 'action': function () {
- context.$textarea.wikiEditor( 'openDialog', 'preview' );
- return false;
- }
- } );
- }
-}
-
-}; } )( jQuery, mediaWiki );
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js b/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js
index c7360006..bbd539f4 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js
@@ -72,22 +72,24 @@ fn: {
} );
/* REALLY DIRTY HACK! */
- // Reformat the copyright warning stuff
- var copyWarnHTML = $( '#editpage-copywarn p' ).html();
- // TODO: internationalize by splitting on other characters that end statements
- var copyWarnStatements = copyWarnHTML.split( '. ' );
- var newCopyWarnHTML = '<ul>';
- for ( i = 0; i < copyWarnStatements.length; i++ ) {
- if ( copyWarnStatements[i] !== '' ) {
- var copyWarnStatement = $.trim( copyWarnStatements[i] ).replace( /\.*$/, '' );
- newCopyWarnHTML += '<li>' + copyWarnStatement + '.</li>';
+ // Reformat the copyright warning stuff, if available
+ if ( $( '#editpage-copywarn p' ).length ) {
+ var copyWarnHTML = $( '#editpage-copywarn p' ).html();
+ // TODO: internationalize by splitting on other characters that end statements
+ var copyWarnStatements = copyWarnHTML.split( '. ' );
+ var newCopyWarnHTML = '<ul>';
+ for ( i = 0; i < copyWarnStatements.length; i++ ) {
+ if ( copyWarnStatements[i] !== '' ) {
+ var copyWarnStatement = $.trim( copyWarnStatements[i] ).replace( /\.*$/, '' );
+ newCopyWarnHTML += '<li>' + copyWarnStatement + '.</li>';
+ }
}
+ newCopyWarnHTML += '</ul>';
+ // No list if there's only one element
+ $( this ).find( '.wikiEditor-publish-dialog-copywarn' ).html(
+ copyWarnStatements.length > 1 ? newCopyWarnHTML : copyWarnHTML
+ );
}
- newCopyWarnHTML += '</ul>';
- // No list if there's only one element
- $( this ).find( '.wikiEditor-publish-dialog-copywarn' ).html(
- copyWarnStatements.length > 1 ? newCopyWarnHTML : copyWarnHTML
- );
/* END OF REALLY DIRTY HACK */
if ( $( '#wpMinoredit' ).length === 0 ) {
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js
index 17a219af..41e70be0 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js
@@ -83,6 +83,7 @@ getDefaultConfig: function () {
'it': [2, -790],
'ky': [2, -934],
'nl': [2, -790],
+ 'os': [2, -934],
'pt': [2, -862],
'pt-br': [2, -862],
'pl': [2, -862],
@@ -209,7 +210,7 @@ getDefaultConfig: function () {
'labelMsg': 'wikieditor-toolbar-tool-heading',
'type': 'select',
'list': {
- 'heading-2' : {
+ 'heading-2': {
'labelMsg': 'wikieditor-toolbar-tool-heading-2',
'action': {
'type': 'encapsulate',
@@ -223,7 +224,7 @@ getDefaultConfig: function () {
}
}
},
- 'heading-3' : {
+ 'heading-3': {
'labelMsg': 'wikieditor-toolbar-tool-heading-3',
'action': {
'type': 'encapsulate',
@@ -237,7 +238,7 @@ getDefaultConfig: function () {
}
}
},
- 'heading-4' : {
+ 'heading-4': {
'labelMsg': 'wikieditor-toolbar-tool-heading-4',
'action': {
'type': 'encapsulate',
@@ -251,7 +252,7 @@ getDefaultConfig: function () {
}
}
},
- 'heading-5' : {
+ 'heading-5': {
'labelMsg': 'wikieditor-toolbar-tool-heading-5',
'action': {
'type': 'encapsulate',
@@ -471,786 +472,112 @@ getDefaultConfig: function () {
'deferLoad': true,
'pages': {
'latin': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-latin',
+ 'labelMsg': 'special-characters-group-latin',
'layout': 'characters',
- 'characters': [
- "\u00c1", "\u00e1", "\u00c0", "\u00e0", "\u00c2", "\u00e2", "\u00c4", "\u00e4", "\u00c3",
- "\u00e3", "\u01cd", "\u01ce", "\u0100", "\u0101", "\u0102", "\u0103", "\u0104", "\u0105",
- "\u00c5", "\u00e5", "\u0106", "\u0107", "\u0108", "\u0109", "\u00c7", "\u00e7", "\u010c",
- "\u010d", "\u010a", "\u010b", "\u0110", "\u0111", "\u010e", "\u010f", "\u00c9", "\u00e9",
- "\u00c8", "\u00e8", "\u00ca", "\u00ea", "\u00cb", "\u00eb", "\u011a", "\u011b", "\u0112",
- "\u0113", "\u0114", "\u0115", "\u0116", "\u0117", "\u0118", "\u0119", "\u011c", "\u011d",
- "\u0122", "\u0123", "\u011e", "\u011f", "\u0120", "\u0121", "\u0124", "\u0125", "\u0126",
- "\u0127", "\u00cd", "\u00ed", "\u00cc", "\u00ec", "\u00ce", "\u00ee", "\u00cf", "\u00ef",
- "\u0128", "\u0129", "\u01cf", "\u01d0", "\u012a", "\u012b", "\u012c", "\u012d", "\u0130",
- "\u0131", "\u012e", "\u012f", "\u0134", "\u0135", "\u0136", "\u0137", "\u0139", "\u013a",
- "\u013b", "\u013c", "\u013d", "\u013e", "\u0141", "\u0142", "\u0143", "\u0144", "\u00d1",
- "\u00f1", "\u0145", "\u0146", "\u0147", "\u0148", "\u00d3", "\u00f3", "\u00d2", "\u00f2",
- "\u00d4", "\u00f4", "\u00d6", "\u00f6", "\u00d5", "\u00f5", "\u01d1", "\u01d2", "\u014c",
- "\u014d", "\u014e", "\u014f", "\u01ea", "\u01eb", "\u0150", "\u0151", "\u0154", "\u0155",
- "\u0156", "\u0157", "\u0158", "\u0159", "\u015a", "\u015b", "\u015c", "\u015d", "\u015e",
- "\u015f", "\u0160", "\u0161", "\u0218", "\u0219", "\u021a", "\u021b", "\u0164", "\u0165",
- "\u00da", "\u00fa", "\u00d9", "\u00f9", "\u00db", "\u00fb", "\u00dc", "\u00fc", "\u0168",
- "\u0169", "\u016e", "\u016f", "\u01d3", "\u01d4", "\u016a", "\u016b", "\u01d6", "\u01d8",
- "\u01da", "\u01dc", "\u016c", "\u016d", "\u0172", "\u0173", "\u0170", "\u0171", "\u0174",
- "\u0175", "\u00dd", "\u00fd", "\u0176", "\u0177", "\u0178", "\u00ff", "\u0232", "\u0233",
- "\u0179", "\u017a", "\u017d", "\u017e", "\u017b", "\u017c", "\u00c6", "\u00e6", "\u01e2",
- "\u01e3", "\u00d8", "\u00f8", "\u0152", "\u0153", "\u00df", "\u00D0", "\u00f0", "\u00de",
- "\u00fe", "\u018f", "\u0259"
- ]
+ 'characters': mw.language.specialCharacters.latin
},
'latinextended': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-latinextended',
+ 'labelMsg': 'special-characters-group-latinextended',
'layout': 'characters',
- 'characters': [
- "\u1e00", "\u1e01", "\u1e9a", "\u1ea0", "\u1ea1", "\u1ea2", "\u1ea3", "\u1ea4", "\u1ea5",
- "\u1ea6", "\u1ea7", "\u1ea8", "\u1ea9", "\u1eaa", "\u1eab", "\u1eac", "\u1ead", "\u1eae",
- "\u1eaf", "\u1eb0", "\u1eb1", "\u1eb2", "\u1eb3", "\u1eb4", "\u1eb5", "\u1eb6", "\u1eb7",
- "\u1e02", "\u1e03", "\u1e04", "\u1e05", "\u1e06", "\u1e07", "\u1e08", "\u1e09", "\u1e0a",
- "\u1e0b", "\u1e0c", "\u1e0d", "\u1e0e", "\u1e0f", "\u1e10", "\u1e11", "\u1e12", "\u1e13",
- "\u1e14", "\u1e15", "\u1e16", "\u1e17", "\u1e18", "\u1e19", "\u1e1a", "\u1e1b", "\u1e1c",
- "\u1e1d", "\u1eb8", "\u1eb9", "\u1eba", "\u1ebb", "\u1ebc", "\u1ebd", "\u1ebe", "\u1ebf",
- "\u1ec0", "\u1ec1", "\u1ec2", "\u1ec3", "\u1ec4", "\u1ec5", "\u1ec6", "\u1ec7", "\u1e1e",
- "\u1e1f", "\u1e20", "\u1e21", "\u1e22", "\u1e23", "\u1e24", "\u1e25", "\u1e26", "\u1e27",
- "\u1e28", "\u1e29", "\u1e2a", "\u1e2b", "\u1e96", "\u1e2c", "\u1e2d", "\u1e2e", "\u1e2f",
- "\u1ec8", "\u1ec9", "\u1eca", "\u1ecb", "\u1e30", "\u1e31", "\u1e32", "\u1e33", "\u1e34",
- "\u1e35", "\u1e36", "\u1e37", "\u1e38", "\u1e39", "\u1e3a", "\u1e3b", "\u1e3c", "\u1e3d",
- "\u1efa", "\u1efb", "\u1e3e", "\u1e3f", "\u1e40", "\u1e41", "\u1e42", "\u1e43", "\u1e44",
- "\u1e45", "\u1e46", "\u1e47", "\u1e48", "\u1e49", "\u1e4a", "\u1e4b", "\u1e4c", "\u1e4d",
- "\u1e4e", "\u1e4f", "\u1e50", "\u1e51", "\u1e52", "\u1e53", "\u1ecc", "\u1ecd", "\u1ece",
- "\u1ecf", "\u1ed0", "\u1ed1", "\u1ed2", "\u1ed3", "\u1ed4", "\u1ed5", "\u1ed6", "\u1ed7",
- "\u1ed8", "\u1ed9", "\u1eda", "\u1edb", "\u1edc", "\u1edd", "\u1ede", "\u1edf", "\u1ee0",
- "\u1ee1", "\u1ee2", "\u1ee3", "\u01FE", "\u01FF", "\u01A0", "\u01A1", "\u1e54", "\u1e55",
- "\u1e56", "\u1e57", "\u1e58", "\u1e59", "\u1e5a", "\u1e5b", "\u1e5c", "\u1e5d", "\u1e5e",
- "\u1e5f", "\u1e60", "\u1e61", "\u1e9b", "\u1e62", "\u1e63", "\u1e64", "\u1e65", "\u1e66",
- "\u1e67", "\u1e68", "\u1e69", "\u1e9c", "\u1e9d", "\u1e6a", "\u1e6b", "\u1e6c", "\u1e6d",
- "\u1e6e", "\u1e6f", "\u1e70", "\u1e71", "\u1e97", "\u1e72", "\u1e73", "\u1e74", "\u1e75",
- "\u1e76", "\u1e77", "\u1e78", "\u1e79", "\u1e7a", "\u1e7b", "\u1ee4", "\u1ee5", "\u1ee6",
- "\u1ee7", "\u1ee8", "\u1ee9", "\u1eea", "\u1eeb", "\u1eec", "\u1eed", "\u1eee", "\u1eef",
- "\u1ef0", "\u1ef1", "\u01AF", "\u01B0", "\u01D5", "\u01D7", "\u01D9", "\u01DB", "\u1e7c",
- "\u1e7d", "\u1e7e", "\u1e7f", "\u1efc", "\u1efd", "\u1e80", "\u1e81", "\u1e82", "\u1e83",
- "\u1e84", "\u1e85", "\u1e86", "\u1e87", "\u1e88", "\u1e89", "\u1e98", "\u1e8a", "\u1e8b",
- "\u1e8c", "\u1e8d", "\u1e8e", "\u1e8f", "\u1e99", "\u1ef2", "\u1ef3", "\u1ef4", "\u1ef5",
- "\u1ef6", "\u1ef7", "\u1ef8", "\u1ef9", "\u1efe", "\u1eff", "\u1e90", "\u1e91", "\u1e92",
- "\u1e93", "\u1e94", "\u1e95", "\u01FC", "\u01FD", "\u1e9e", "\u1e9f"
-
- ]
+ 'characters': mw.language.specialCharacters.latinextended
},
'ipa': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-ipa',
+ 'labelMsg': 'special-characters-group-ipa',
'layout': 'characters',
- 'characters': [
- "p", "t\u032a", "t", "\u0288", "c", "k", "q", "\u02a1", "\u0294", "b","d\u032a", "d", "\u0256",
- "\u025f", "\u0261", "\u0262", "\u0253", "\u0257", "\u0284", "\u0260", "\u029b", "t\u0361s",
- "t\u0361\u0283", "t\u0361\u0255", "d\u0361z", "d\u0361\u0292", "d\u0361\u0291", "\u0278", "f",
- "\u03b8", "s", "\u0283", "\u0285", "\u0286", "\u0282", "\u0255", "\u00e7", "\u0267", "x",
- "\u03c7", "\u0127", "\u029c", "h", "\u03b2", "v", "\u028d", "\u00f0", "z", "\u0292", "\u0293",
- "\u0290", "\u0291", "\u029d", "\u0263", "\u0281", "\u0295", "\u0296", "\u02a2", "\u0266",
- "\u026c", "\u026e", "m", "m\u0329", "\u0271", "\u0271\u0329", "\u0271\u030d", "n\u032a",
- "n\u032a\u030d", "n", "n\u0329", "\u0273", "\u0273\u0329", "\u0272", "\u0272\u0329", "\u014b",
- "\u014b\u030d", "\u014b\u0329", "\u0274", "\u0274\u0329", "\u0299", "\u0299\u0329", "r",
- "r\u0329", "\u0280", "\u0280\u0329", "\u027e", "\u027d", "\u027f", "\u027a", "l\u032a",
- "l\u032a\u0329", "l", "l\u0329", "\u026b", "\u026b\u0329", "\u026d", "\u026d\u0329", "\u028e",
- "\u028e\u0329", "\u029f", "\u029f\u0329", "w", "\u0265", "\u028b", "\u0279", "\u027b", "j",
- "\u0270", "\u0298", "\u01c2", "\u01c0", "!", "\u01c1", "\u02b0", "\u02b1", "\u02b7", "\u02b8",
- "\u02b2", "\u02b3", "\u207f", "\u02e1", "\u02b4", "\u02b5", "\u02e2", "\u02e3", "\u02e0",
- "\u02b6", "\u02e4", "\u02c1", "\u02c0", "\u02bc", "i", "i\u032f", "\u0129", "y", "y\u032f",
- "\u1ef9", "\u026a", "\u026a\u032f", "\u026a\u0303", "\u028f", "\u028f\u032f", "\u028f\u0303",
- "\u0268", "\u0268\u032f", "\u0268\u0303", "\u0289", "\u0289\u032f", "\u0289\u0303", "\u026f",
- "\u026f\u032f", "\u026f\u0303", "u", "u\u032f", "\u0169", "\u028a", "\u028a\u032f",
- "\u028a\u0303", "e", "e\u032f", "\u1ebd", "\u00f8", "\u00f8\u032f", "\u00f8\u0303", "\u0258",
- "\u0258\u032f", "\u0258\u0303", "\u0275", "\u0275\u032f", "\u0275\u0303", "\u0264",
- "\u0264\u032f", "\u0264\u0303", "o", "o\u032f", "\u00f5", "\u025b", "\u025b\u032f",
- "\u025b\u0303", "\u0153", "\u0153\u032f", "\u0153\u0303", "\u025c", "\u025c\u032f",
- "\u025c\u0303", "\u0259", "\u0259\u032f", "\u0259\u0303", "\u025e", "\u025e\u032f",
- "\u025e\u0303", "\u028c", "\u028c\u032f", "\u028c\u0303", "\u0254", "\u0254\u032f",
- "\u0254\u0303", "\u00e6", "\u00e6\u032f", "\u00e6\u0303", "\u0276", "\u0276\u032f",
- "\u0276\u0303", "a", "a\u032f", "\u00e3", "\u0250", "\u0250\u032f", "\u0250\u0303", "\u0251",
- "\u0251\u032f", "\u0251\u0303", "\u0252", "\u0252\u032f", "\u0252\u0303", "\u02c8", "\u02cc",
- "\u02d0", "\u02d1", "\u02d8", ".", "\u203f", "|", "\u2016", "\u025A", "\u025D"
- ]
+ 'characters': mw.language.specialCharacters.ipa
},
'symbols': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-symbols',
+ 'labelMsg': 'special-characters-group-symbols',
'layout': 'characters',
- 'characters': [
- "~", "|", "\u00a1", "\u00bf", "\u2020", "\u2021", "\u2194", "\u2191", "\u2193", "\u2022",
- "\u00b6", "#", "\u00bd", "\u2153", "\u2154", "\u00bc", "\u00be", "\u215b", "\u215c", "\u215d",
- "\u215e", "\u221e", "\u2018", "\u2019",
- {
- 'label': "\u201c\u201d",
- 'action': {
- 'type': 'encapsulate', 'options': { 'pre': "\u201c", 'post': "\u201d" }
- }
- },
- {
- 'label': "\u201e\u201c",
- 'action': {
- 'type': 'encapsulate', 'options': { 'pre': "\u201e", 'post': "\u201c" }
- }
- },
- {
- 'label': "\u201e\u201d",
- 'action': {
- 'type': 'encapsulate', 'options': { 'pre': "\u201e", 'post': "\u201d" }
- }
- },
- {
- 'label': "\u00ab\u00bb",
- 'action': {
- 'type': 'encapsulate', 'options': { 'pre': "\u00ab", 'post': "\u00bb" }
- }
- },
- "\u00a4", "\u20b3", "\u0e3f", "\u20b5", "\u00a2", "\u20a1", "\u20a2", "$", "\u20ab", "\u20af",
- "\u20ac", "\u20a0", "\u20a3", "\u0192", "\u20b4", "\u20ad", "\u20a4", "\u2133", "\u20a5",
- "\u20a6", "\u2116", "\u20a7", "\u20b0", "\u00a3", "\u17db", "\u20a8", "\u20aa", "\u09f3",
- "\u20ae", "\u20a9", "\u00a5", "\u2660", "\u2663", "\u2665", "\u2666", "m\u00b2", "m\u00b3",
- {
- 'label': "\u2013",
- 'titleMsg': 'wikieditor-toolbar-characters-endash',
- 'action' : {
- 'type' : 'replace',
- 'options' : {
- 'peri' : "\u2013",
- 'selectPeri': false
- }
- }
- },
- {
- 'label': "\u2014",
- 'titleMsg': 'wikieditor-toolbar-characters-emdash',
- 'action' : {
- 'type' : 'replace',
- 'options' : {
- 'peri' : "\u2014",
- 'selectPeri': false
- }
- }
- },
- "\u2026", "\u2018", "\u2019", "\u201c", "\u201d", "\u00b0", "\u2032",
- "\u2033", "\u2248", "\u2260", "\u2264", "\u2265", "\u00b1",
- {
- 'label': "\u2212",
- 'titleMsg': 'wikieditor-toolbar-characters-minus',
- 'action' : {
- 'type' : 'replace',
- 'options' : {
- 'peri' : "\u2212",
- 'selectPeri': false
- }
- }
- },
- "\u00d7", "\u00f7", "\u2190", "\u2192", "\u00b7", "\u00a7", "\u203D"
- ]
+ 'characters': mw.language.specialCharacters.symbols
},
'greek': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-greek',
+ 'labelMsg': 'special-characters-group-greek',
'layout': 'characters',
'language': 'el',
- 'characters': [
- "\u0391", "\u0386", "\u03b1", "\u03ac", "\u0392", "\u03b2", "\u0393", "\u03b3", "\u0394",
- "\u03b4", "\u0395", "\u0388", "\u03b5", "\u03ad", "\u0396", "\u03b6", "\u0397", "\u0389",
- "\u03b7", "\u03ae", "\u0398", "\u03b8", "\u0399", "\u038a", "\u03b9", "\u03af", "\u039a",
- "\u03ba", "\u039b", "\u03bb", "\u039c", "\u03bc", "\u039d", "\u03bd", "\u039e", "\u03be",
- "\u039f", "\u038c", "\u03bf", "\u03cc", "\u03a0", "\u03c0", "\u03a1", "\u03c1", "\u03a3",
- "\u03c3", "\u03c2", "\u03a4", "\u03c4", "\u03a5", "\u038e", "\u03c5", "\u03cd", "\u03a6",
- "\u03c6", "\u03a7", "\u03c7", "\u03a8", "\u03c8", "\u03a9", "\u038f", "\u03c9", "\u03ce"
- ]
+ 'characters': mw.language.specialCharacters.greek
},
'cyrillic': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-cyrillic',
+ 'labelMsg': 'special-characters-group-cyrillic',
'layout': 'characters',
- 'characters': [
- "\u0410", "\u0430", // A
- "\u04d0", "\u04d1", // A with breve (Chuvash)
- "\u04d2", "\u04d3", // A with diaeresis (Mari, Gargauz, etc.)
- "\u04d8", "\u04d9", // Schwa (Abkhaz, etc)
- "\u04da", "\u04db", // Schwa with diaeresis (Khanty)
- "\u0411", "\u0431", // B
- "\u0412", "\u0432", // V
- "\u0413", "\u0433", // G
- "\u0490", "\u0491", // G with upturn (Ukranian, etc)
- "\u04f6", "\u04f7", // Ge with descender (Abkhaz, etc)
- "\u0403", "\u0453", // G with acute (Macedonian)
- "\u04fa", "\u04fb", // Ge with stroke and hook (Nivkh)
- "\u0492", "\u0493", // G with stroke (Kazakh etc.)
- "\u0494", "\u0495", // G with hook (Sakha etc.)
- "\u0414", "\u0434", // D
- "\u0500", "\u0501", // De (Komi)
- "\u0502", "\u0503", // Dje (Komi)
- "\u0402", "\u0452", // Dj (Serbian, Montenegrin)
- "\u0415", "\u0435", "\u0400", "\u0450", // IE
- "\u0404", "\u0454", // Ukrainian IE
- "\u0401", "\u0451", // IO
- "\u04d6", "\u04d7", // Ye with breve (Chuvash)
- "\u04bc", "\u04bd", // Che (Abkhazian)
- "\u04be", "\u04bf", // Che with descender (Abkhazian)
- "\u0416", "\u0436", // Zh
- "\u0496", "\u0497", // Zhe with descender (Kalmyk, Tatar, etc)
- "\u04c1", "\u04c2", // Zhe with breve (Moldovan, Gagauz)
- "\u04dc", "\u04dd", // Zhe with diaeresis (Udmurt)
- "\u0417", "\u0437", // Z
- "\u0498", "\u0499", // Ze with descender (Bashkir)
- "\u04de", "\u04df", // Ze with diaeresis (Udmurt)
- "\u0510", "\u0511", // Reversed Ze (Enets, Khanty)
- "\u04e0", "\u04e1", // Dze (Abkhazian)
- "\u0405", "\u0455", // Dz (Macedonian, Montenegrin)
- "\u0504", "\u0505", // Zje (Komi)
- "\u0506", "\u0507", // Dzje (Komi)
- "\u0418", "\u0438", // I
- "\u0406", "\u0456", // Dotted I (Ukranian, etc)
- "\u0407", "\u0457", // I with dieresis (Rusyn, Ukranian)
- [ "\u25cc\u04c0", "\u04c0" ], // Palochka. Dotted circle to differentiate from I
- [ "\u25cc\u04cf", "\u04cf" ], // Palochka. Dotted circle to differentiate from I
- "\u0419", "\u0439", // Short I
- "\u04e2", "\u04e3", // I with macron (Tajik)
- "\u040d", "\u045d", // I with grave (Macedonian)
- "\u048a", "\u048b", // Short I with tail (Kildin Sami)
- "\u04e4", "\u04e5", // I with diaeresis (Udmurt)
- "\u0408", "\u0458", // Je (Altai, Azerbaijani, etc)
- "\u041a", "\u043a", // K
- "\u040c", "\u045c", // K with acute (Macedonian)
- "\u049a", "\u049b", // K with descender (Kazakh etc.)
- "\u049c", "\u049d", // Ka with vertical stroke (Azerbaijani)
- "\u049e", "\u049f", // Ka with stroke (Abkhaz)
- "\u04a0", "\u04a1", // Ka (Bashkir)
- "\u04c3", "\u04c4", // Ka with hook (Chukchi, etc)
- "\u051a", "\u051b", // Qa (Kurdish, old Abkhaz)
- "\u041b", "\u043b", // L
- "\u0409", "\u0459", // Lj (Serbian, Macedonian)
- "\u0508", "\u0509", // Lje (Komi)
- "\u0512", "\u0513", // El with hook (Chukchi, Itelmen, Khanty)
- "\u04c5", "\u04c6", // El with tail (Itelmen, Kildin Sami)
- "\u041c", "\u043c", // M
- "\u04cd", "\u04ce", // Em with tail (Kildin Sami)
- "\u041d", "\u043d", // N
- "\u040a", "\u045a", // Nj (Macedonian, Serbian)
- "\u04a2", "\u04a3", // N with descender (Kazakh etc.)
- "\u04a4", "\u04a5", // Ligature En Ghe (Aleut, Altai, etc)
- "\u04c7", "\u04c8", // En with hook (Even, etc)
- "\u050a", "\u050b", // Nje (Komi)
- "\u04c9", "\u04ca", // En with tail (Kilidn Sami)
- "\u041e", "\u043e", // O
- "\u04a8", "\u04a9", // Ha (Abkhazian)
- "\u04e6", "\u04e7", // O with diaeresis (Altay, Komi, etc)
- "\u04e8", "\u04e9", // O with bar (Bashkir, etc)
- "\u04ea", "\u04eb", // Barred O with diaeresis (Even, Khanty)
- "\u041f", "\u043f", // P
- "\u0524", "\u0525", // Pe with descender (Abkhaz)
- "\u04a6", "\u04a7", // Pe with middle hook (Abkhaz)
- "\u0420", "\u0440", // R
- "\u048e", "\u048f", // Er with tick (Kildin Sami)
- "\u0421", "\u0441", // S
- "\u04aa", "\u04ab", // Es with descender (Bashkir, Chuvash)
- "\u0422", "\u0442", // T
- "\u040b", "\u045b", // Tsh (Serbian, Bosnian, etc)
- "\u050c", "\u050d", // Sje (Komi)
- "\u04ac", "\u04ad", // Te with descender (Abkhaz)
- "\u050e", "\u050f", // The (Komi)
- "\u0423", "\u0443", // U
- "\u040e", "\u045e", // Short U (Belarusian, Dungan, etc)
- "\u04ee", "\u04ef", // U with macron (Tajik)
- "\u04f0", "\u04f1", // U with diaeresis (Altai, etc)
- "\u04f2", "\u04f3", // U with double acute (Chuvash)
- "\u04ae", "\u04af", // Straight U Bashkir, Buryat, etc)
- "\u04b0", "\u04b1", // Straight U with stroke (Kazakh)
- "\u0424", "\u0444", // F
- "\u0425", "\u0445", // Kha
- "\u04b2", "\u04b3", // Kha with descender (Abkhaz, etc)
- "\u04fc", "\u04fd", // Ha with hook (Itelmen, Nivkh)
- "\u04fe", "\u04ff", // Ha with stroke (Nivkh)
- "\u04ba", "\u04bb", // Shha (Azerbaijani, etc)
- "\u0426", "\u0446", // Ts
- "\u0427", "\u0447", // Ch
- "\u04b4", "\u04b5", // Ligature Te Tse (Abkhaz)
- "\u04b6", "\u04b7", // Ch with descender (Abkhaz, Tajik)
- "\u04b8", "\u04b9", // Che with vertical stroke (Azeri)
- "\u04cb", "\u04cc", // Che (Khakassian)
- "\u04f4", "\u04f5", // Che with diaeresis (Udmurt)
- "\u040f", "\u045f", // Dzh (Serbian, Macedonian, etc)
- "\u0428", "\u0448", // Sh
- "\u0429", "\u0449", // Sch
- "\u042a", "\u044a", // Hard sign
- "\u042b", "\u044b", // Yeru
- "\u04f8", "\u04f9", // Yeru with diaeresis (mari)
- "\u042c", "\u044c", // Soft sign
- "\u048c", "\u048d", // Semisoft Sign (kildin)
- "\u042d", "\u044d", // E
- "\u04ec", "\u04ed", // E with diaeresis (kildin)
- "\u042e", "\u044e", // Yu
- "\u042f", "\u044f", // Ya
- "\u051c", "\u051d", // We (Kurdish)
- "\u0460", "\u0461", // Omega
- "\u0462", "\u0463", // Yat (old cyrillic)
- "\u0464", "\u0465", // Iotified E (old cyrillic)
- "\u0466", "\u0467", // Little Yus (old cyrillic)
- "\u0468", "\u0469", // Iotified Little Yus (old cyrillic)
- "\u046A", "\u046B", // Big Yus (old cyrillic)
- "\u046C", "\u046D", // Iotified Big Yus (old cyrillic)
- "\u046E", "\u046F", // Ksi (old cyrillic)
- "\u0470", "\u0471", // Psi (old cyrillic)
- "\u0472", "\u0473", // Fita (old cyrillic)
- "\u0474", "\u0475", // Izhitsa (old cyrillic)
- "\u0476", "\u0477", // Izhitsa with double grave accent (old cyrillic)
- "\u0478", "\u0479", // Uk (old cyrillic)
- "\u047A", "\u047B", // Round Omega (old cyrillic)
- "\u047c", "\u047d", // Cyr Omega with Titlo (old cyrillic)
- "\u047e", "\u047f", // Cyr Ot (old cyrillic)
- "\u0480", "\u0481" // Cyr Koppa (old cyrillic)
- ]
+ 'characters': mw.language.specialCharacters.cyrillic
},
// The core 28-letter alphabet, special letters for the Arabic language,
// vowels, punctuation, digits.
// Names of letters are written as in the Unicode charts.
'arabic': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-arabic',
+ 'labelMsg': 'special-characters-group-arabic',
'layout': 'characters',
'language': 'ar',
'direction': 'rtl',
- 'characters': [
- // core alphabet
- "\u0627", "\u0628", "\u062a", "\u062b", "\u062c", "\u062d", "\u062e", "\u062f",
- "\u0630", "\u0631", "\u0632", "\u0633", "\u0634", "\u0635", "\u0636", "\u0637",
- "\u0638", "\u0639", "\u063a", "\u0641", "\u0642", "\u0643", "\u0644", "\u0645",
- "\u0646", "\u0647", "\u0648", "\u064a",
- // special letters for the Arabic language
- "\u0621", // Hamza
- "\u0622", "\u0623", "\u0625", "\u0671", // Alef
- "\u0624", // Waw hamza
- "\u0626", // Yeh hamza
- "\u0649", // Alef maksura
- "\u0629", // Teh marbuta
- // vowels
- "\u064E", "\u064F", "\u0650", "\u064B", "\u064C", "\u064D", "\u0651", "\u0652",
- "\u0670",
- // punctuation
- "\u060c", "\u061b", "\u061f", "\u0640",
- // digits
- "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667",
- "\u0668", "\u0669",
- // other special characters
- "\u066A", "\u066B", "\u066C", "\u066D",
- // ZWNJ and ZWJ
- [ "ZWNJ", "\u200C" ], [ "ZWJ", "\u200D" ]
- ]
+ 'characters': mw.language.specialCharacters.arabic
},
// Characters for languages other than Arabic.
'arabicextended': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-arabicextended',
+ 'labelMsg': 'special-characters-group-arabicextended',
'layout': 'characters',
'language': 'ar',
'direction': 'rtl',
- 'characters': [
- // Alef
- "\u0672", "\u0673", "\u0674", "\u0675", "\u0773", "\u0774",
- // Beh
- "\u066E", "\u067B", "\u067E", "\u0680", "\u0750", "\u0751", "\u0752", "\u0753",
- "\u0754", "\u0755", "\u0756",
- // Teh
- "\u0679", "\u067A", "\u067C", "\u067D", "\u067F",
- // Jeem
- "\u0681", "\u0682", "\u0683", "\u0684", "\u0685", "\u0686", "\u0687", "\u06BF",
- // Hah
- "\u0757", "\u0758", "\u076E", "\u076F", "\u0772", "\u077C",
- // Dal
- "\u0688", "\u0689", "\u068A", "\u068B", "\u068C", "\u068D", "\u068E", "\u068F",
- "\u0690", "\u06EE", "\u0759", "\u075A",
- // Reh
- "\u0691", "\u0692", "\u0693", "\u0694", "\u0695", "\u0696", "\u0697", "\u0698",
- "\u0699", "\u06EF", "\u075B", "\u076B", "\u076C", "\u0771",
- // Seen
- "\u069A", "\u069B", "\u069C", "\u077D",
- // Sheen
- "\u06FA", "\u075C", "\u076D", "\u0770", "\u077E",
- // Sad
- "\u069D", "\u069E",
- // Dad
- "\u06FB",
- // Tah
- "\u069F",
- // Ain
- "\u06A0", "\u075D", "\u075E", "\u075F",
- // Ghain
- "\u06FC",
- // Feh
- "\u06A1", "\u06A2", "\u06A3", "\u06A4", "\u06A5", "\u06A6", "\u0760", "\u0761",
- // Qaf
- "\u066F", "\u06A7", "\u06A8",
- // Kaf
- "\u063B", "\u063C", "\u06A9", "\u06AA", "\u06AB", "\u06AC", "\u06AD", "\u06AE",
- "\u06AF", "\u06B0", "\u06B1", "\u06B2", "\u06B3", "\u06B4", "\u0762", "\u0763",
- "\u0764", "\u077F",
- // Lam
- "\u06B5", "\u06B6", "\u06B7", "\u06B8", "\u076A",
- // Meem
- "\u0765", "\u0766",
- // Noon
- "\u06B9", "\u06BA", "\u06BB", "\u06BC", "\u06BD", "\u0767", "\u0768", "\u0769",
- // Heh
- "\u06BE", "\u06C0", "\u06C1", "\u06C2", "\u06C3", "\u06D5", "\u06FF",
- // Waw
- "\u0676", "\u0677", "\u06C4", "\u06C5", "\u06C6", "\u06C7", "\u06C8", "\u06C9",
- "\u06CA", "\u06CB", "\u06CF", "\u0778", "\u0779",
- // Yeh
- "\u0620", "\u063D", "\u063E", "\u063F", "\u0678", "\u06CC", "\u06CD", "\u06CE",
- "\u06D0", "\u06D1", "\u06D2", "\u06D3", "\u0775", "\u0776", "\u0777", "\u077A",
- "\u077B",
- // diacritics
- "\u0656", "\u0657", "\u0658", "\u0659", "\u065A", "\u065B", "\u065C", "\u065D",
- "\u065E", "\u065F",
- // special punctuation
- "\u06D4", "\u06FD", "\u06FE",
- // special digits
- "\u06F0", "\u06F1", "\u06F2", "\u06F3", "\u06F4", "\u06F5", "\u06F6", "\u06F7",
- "\u06F8", "\u06F9"
- ]
+ 'characters': mw.language.specialCharacters.arabicextended
},
'hebrew': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-hebrew',
+ 'labelMsg': 'special-characters-group-hebrew',
'layout': 'characters',
'direction': 'rtl',
- 'characters': [
- // Letters
- "\u05d0", "\u05d1", "\u05d2", "\u05d3", "\u05d4", "\u05d5", "\u05d6", "\u05d7", "\u05d8",
- "\u05d9", "\u05db", "\u05da", "\u05dc", "\u05de", "\u05dd", "\u05e0", "\u05df", "\u05e1",
- "\u05e2", "\u05e4", "\u05e3", "\u05e6", "\u05e5", "\u05e7", "\u05e8", "\u05e9", "\u05ea",
-
- // Yiddish
- "\u05f0", "\u05f1", "\u05f2",
-
- // Punctuation
- "\u05f3", "\u05f4", "\u05be", "\u2013",
- {
- 'label': "\u201e\u201d",
- 'action': {
- 'type': 'encapsulate', 'options': { 'pre': "\u201e", 'post': "\u201d" }
- }
- },
- {
- 'label': "\u201a\u2019",
- 'action': {
- 'type': 'encapsulate', 'options': { 'pre': "\u201a", 'post': "\u2019" }
- }
- },
-
- // Vowels
- [ "\u25cc\u05b0", "\u05b0" ], [ "\u25cc\u05b1", "\u05b1" ], [ "\u25cc\u05b2", "\u05b2" ],
- [ "\u25cc\u05b3", "\u05b3" ], [ "\u25cc\u05b4", "\u05b4" ], [ "\u25cc\u05b5", "\u05b5" ],
- [ "\u25cc\u05b6", "\u05b6" ], [ "\u25cc\u05b7", "\u05b7" ], [ "\u25cc\u05b8", "\u05b8" ],
- [ "\u25cc\u05b9", "\u05b9" ], [ "\u25cc\u05bb", "\u05bb" ], [ "\u25cc\u05bc", "\u05bc" ],
- [ "\u25cc\u05c1", "\u05c1" ], [ "\u25cc\u05c2", "\u05c2" ], [ "\u25cc\u05c7", "\u05c7" ],
-
- // Cantillation
- [ "\u25cc\u0591", "\u0591" ], [ "\u25cc\u0592", "\u0592" ], [ "\u25cc\u0593", "\u0593" ],
- [ "\u25cc\u0594", "\u0594" ], [ "\u25cc\u0595", "\u0595" ], [ "\u25cc\u0596", "\u0596" ],
- [ "\u25cc\u0597", "\u0597" ], [ "\u25cc\u0598", "\u0598" ], [ "\u25cc\u0599", "\u0599" ],
- [ "\u25cc\u059a", "\u059a" ], [ "\u25cc\u059b", "\u059b" ], [ "\u25cc\u059c", "\u059c" ],
- [ "\u25cc\u059d", "\u059d" ], [ "\u25cc\u059e", "\u059e" ], [ "\u25cc\u059f", "\u059f" ],
- [ "\u25cc\u05a0", "\u05a0" ], [ "\u25cc\u05a1", "\u05a1" ], [ "\u25cc\u05a2", "\u05a2" ],
- [ "\u25cc\u05a3", "\u05a3" ], [ "\u25cc\u05a4", "\u05a4" ], [ "\u25cc\u05a5", "\u05a5" ],
- [ "\u25cc\u05a6", "\u05a6" ], [ "\u25cc\u05a7", "\u05a7" ], [ "\u25cc\u05a8", "\u05a8" ],
- [ "\u25cc\u05a9", "\u05a9" ], [ "\u25cc\u05aa", "\u05aa" ], [ "\u25cc\u05ab", "\u05ab" ],
- [ "\u25cc\u05ac", "\u05ac" ], [ "\u25cc\u05ad", "\u05ad" ], [ "\u25cc\u05ae", "\u05ae" ],
- [ "\u25cc\u05af", "\u05af" ], [ "\u25cc\u05bf", "\u05bf" ], [ "\u25cc\u05c0", "\u05c0" ],
- [ "\u25cc\u05c3", "\u05c3" ]
- ]
+ 'characters': mw.language.specialCharacters.hebrew
},
'bangla': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-bangla',
+ 'labelMsg': 'special-characters-group-bangla',
'language': 'bn',
'layout': 'characters',
- 'characters': [
- "\u0985", "\u0986", "\u0987", "\u0988", "\u0989", "\u098a", "\u098b", "\u098f", "\u0990",
- "\u0993", "\u0994", "\u09be", "\u09bf", "\u09c0", "\u09c1", "\u09c2", "\u09c3", "\u09c7",
- "\u09c8", "\u09cb", "\u09cc", "\u0995", "\u0996", "\u0997", "\u0998", "\u0999", "\u099a",
- "\u099b", "\u099c", "\u099d", "\u099e", "\u099f", "\u09a0", "\u09a1", "\u09a2", "\u09a3",
- "\u09a4", "\u09a5", "\u09a6", "\u09a7", "\u09a8", "\u09aa", "\u09ab", "\u09ac", "\u09ad",
- "\u09ae", "\u09af", "\u09b0", "\u09b2", "\u09b6", "\u09b7", "\u09b8", "\u09b9", "\u09a1\u09bc",
- "\u09a2\u09bc", "\u09af\u09bc", "\u09ce", "\u0982", "\u0983", "\u0981", "\u09cd", "\u09e7",
- "\u09e8", "\u09e9", "\u09ea", "\u09eb", "\u09ec", "\u09ed", "\u09ee", "\u09ef", "\u09e6"
- ]
+ 'characters': mw.language.specialCharacters.bangla
},
'tamil': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-tamil',
+ 'labelMsg': 'special-characters-group-tamil',
'language': 'ta',
'layout': 'characters',
- 'characters': [
- "\u0be6", "\u0be7", "\u0be8", "\u0be9", "\u0bea", "\u0beb", "\u0bec", "\u0bed", "\u0bee",
- "\u0bef", "\u0bf0", "\u0bf1", "\u0bf2", "\u0bf3", "\u0bf4", "\u0bf5", "\u0bf6", "\u0bf7",
- "\u0bf8", "\u0bf9", "\u0bfa", "\u0bd0"
- ]
+ 'characters': mw.language.specialCharacters.tamil
},
'telugu': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-telugu',
+ 'labelMsg': 'special-characters-group-telugu',
'language': 'te',
'layout': 'characters',
- 'characters': [
- "\u0c01", "\u0c02", "\u0c03", "\u0c05", "\u0c06", "\u0c07", "\u0c08", "\u0c09", "\u0c0a",
- "\u0c0b", "\u0c60", "\u0c0c", "\u0c61", "\u0c0e", "\u0c0f", "\u0c10", "\u0c12", "\u0c13",
- "\u0c14", "\u0c15", "\u0c16", "\u0c17", "\u0c18", "\u0c19", "\u0c1a", "\u0c1b", "\u0c1c",
- "\u0c1d", "\u0c1e", "\u0c1f", "\u0c20", "\u0c21", "\u0c22", "\u0c23", "\u0c24", "\u0c25",
- "\u0c26", "\u0c27", "\u0c28", "\u0c2a", "\u0c2b", "\u0c2c", "\u0c2d", "\u0c2e", "\u0c2f",
- "\u0c30", "\u0c31", "\u0c32", "\u0c33", "\u0c35", "\u0c36", "\u0c37", "\u0c38", "\u0c39",
- "\u0c3e", "\u0c3f", "\u0c40", "\u0c41", "\u0c42", "\u0c43", "\u0c44", "\u0c46", "\u0c47",
- "\u0c48", "\u0c4a", "\u0c4b", "\u0c4c", "\u0c4d", "\u0c62", "\u0c63", "\u0c58", "\u0c59",
- "\u0c66", "\u0c67", "\u0c68", "\u0c69", "\u0c6a", "\u0c6b", "\u0c6c", "\u0c6d", "\u0c6e",
- "\u0c6f", "\u0c3d", "\u0c78", "\u0c79", "\u0c7a", "\u0c7b", "\u0c7c", "\u0c7d", "\u0c7e",
- "\u0c7f"
- ]
+ 'characters': mw.language.specialCharacters.telugu
},
'sinhala': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-sinhala',
+ 'labelMsg': 'special-characters-group-sinhala',
'language': 'si',
'layout': 'characters',
- 'characters': [
- "\u0d85", "\u0d86", "\u0d87", "\u0d88", "\u0d89", "\u0d8a", "\u0d8b", "\u0d8c", "\u0d8d",
- "\u0d8e", "\u0d8f", "\u0d90", "\u0d91", "\u0d92", "\u0d93", "\u0d94", "\u0d95", "\u0d96",
- "\u0d9a", "\u0d9b", "\u0d9c", "\u0d9d", "\u0d9e", "\u0d9f", "\u0da0", "\u0da1", "\u0da2",
- "\u0da3", "\u0da4", "\u0da5", "\u0da6", "\u0da7", "\u0da8", "\u0da9", "\u0daa", "\u0dab",
- "\u0dac", "\u0dad", "\u0dae", "\u0daf", "\u0db0", "\u0db1", "\u0db3", "\u0db4", "\u0db5",
- "\u0db6", "\u0db7", "\u0db8", "\u0db9", "\u0dba", "\u0dbb", "\u0dbd", "\u0dc0", "\u0dc1",
- "\u0dc2", "\u0dc3", "\u0dc4", "\u0dc5", "\u0dc6",
- [ "\u25cc\u0dcf", "\u0dcf" ], [ "\u25cc\u0dd0", "\u0dd0" ], [ "\u25cc\u0dd1", "\u0dd1" ],
- [ "\u25cc\u0dd2", "\u0dd2" ], [ "\u25cc\u0dd3", "\u0dd3" ], [ "\u25cc\u0dd4", "\u0dd4" ],
- [ "\u25cc\u0dd6", "\u0dd6" ], [ "\u25cc\u0dd8", "\u0dd8" ], [ "\u25cc\u0df2", "\u0df2" ],
- [ "\u25cc\u0ddf", "\u0ddf" ], [ "\u25cc\u0df3", "\u0df3" ], [ "\u25cc\u0dd9", "\u0dd9" ],
- [ "\u25cc\u0dda", "\u0dda" ], [ "\u25cc\u0ddc", "\u0ddc" ], [ "\u25cc\u0ddd", "\u0ddd" ],
- [ "\u25cc\u0dde", "\u0dde" ], [ "\u25cc\u0dca", "\u0dca" ]
- ]
+ 'characters': mw.language.specialCharacters.sinhala
},
'devanagari': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-devanagari',
+ 'labelMsg': 'special-characters-group-devanagari',
'layout': 'characters',
- 'characters': [
- "\u0900", // DEVANAGARI SIGN INVERTED CANDRABINDU
- "\u0901", // DEVANAGARI SIGN CANDRABINDU
- "\u0902", // DEVANAGARI SIGN ANUSVARA
- "\u0903", // DEVANAGARI SIGN VISARGA
- "\u0904", // DEVANAGARI LETTER SHORT A
- "\u0905", // DEVANAGARI LETTER A
- "\u0906", // DEVANAGARI LETTER AA
- "\u0907", // DEVANAGARI LETTER I
- "\u0908", // DEVANAGARI LETTER II
- "\u0909", // DEVANAGARI LETTER U
- "\u090a", // DEVANAGARI LETTER UU
- "\u090b", // DEVANAGARI LETTER VOCALIC R
- "\u090c", // DEVANAGARI LETTER VOCALIC L
- "\u090d", // DEVANAGARI LETTER CANDRA E
- "\u090e", // DEVANAGARI LETTER SHORT E
- "\u090f", // DEVANAGARI LETTER E
- "\u0910", // DEVANAGARI LETTER AI
- "\u0911", // DEVANAGARI LETTER CANDRA O
- "\u0912", // DEVANAGARI LETTER SHORT O
- "\u0913", // DEVANAGARI LETTER O
- "\u0914", // DEVANAGARI LETTER AU
- "\u0915", // DEVANAGARI LETTER KA
- "\u0916", // DEVANAGARI LETTER KHA
- "\u0917", // DEVANAGARI LETTER GA
- "\u0918", // DEVANAGARI LETTER GHA
- "\u0919", // DEVANAGARI LETTER NGA
- "\u091a", // DEVANAGARI LETTER CA
- "\u091b", // DEVANAGARI LETTER CHA
- "\u091c", // DEVANAGARI LETTER JA
- "\u091d", // DEVANAGARI LETTER JHA
- "\u091e", // DEVANAGARI LETTER NYA
- "\u091f", // DEVANAGARI LETTER TTA
- "\u0920", // DEVANAGARI LETTER TTHA
- "\u0921", // DEVANAGARI LETTER DDA
- "\u0922", // DEVANAGARI LETTER DDHA
- "\u0923", // DEVANAGARI LETTER NNA
- "\u0924", // DEVANAGARI LETTER TA
- "\u0925", // DEVANAGARI LETTER THA
- "\u0926", // DEVANAGARI LETTER DA
- "\u0927", // DEVANAGARI LETTER DHA
- "\u0928", // DEVANAGARI LETTER NA
- "\u0929", // DEVANAGARI LETTER NNNA
- "\u092a", // DEVANAGARI LETTER PA
- "\u092b", // DEVANAGARI LETTER PHA
- "\u092c", // DEVANAGARI LETTER BA
- "\u092d", // DEVANAGARI LETTER BHA
- "\u092e", // DEVANAGARI LETTER MA
- "\u092f", // DEVANAGARI LETTER YA
- "\u0930", // DEVANAGARI LETTER RA
- "\u0931", // DEVANAGARI LETTER RRA
- "\u0932", // DEVANAGARI LETTER LA
- "\u0933", // DEVANAGARI LETTER LLA
- "\u0934", // DEVANAGARI LETTER LLLA
- "\u0935", // DEVANAGARI LETTER VA
- "\u0936", // DEVANAGARI LETTER SHA
- "\u0937", // DEVANAGARI LETTER SSA
- "\u0938", // DEVANAGARI LETTER SA
- "\u0939", // DEVANAGARI LETTER HA
- "\u093a", // DEVANAGARI VOWEL SIGN OE
- "\u093b", // DEVANAGARI VOWEL SIGN OOE
- "\u093c", // DEVANAGARI SIGN NUKTA
- "\u093d", // DEVANAGARI SIGN AVAGRAHA
- "\u093e", // DEVANAGARI VOWEL SIGN AA
- "\u093f", // DEVANAGARI VOWEL SIGN I
- "\u0940", // DEVANAGARI VOWEL SIGN II
- "\u0941", // DEVANAGARI VOWEL SIGN U
- "\u0942", // DEVANAGARI VOWEL SIGN UU
- "\u0943", // DEVANAGARI VOWEL SIGN VOCALIC R
- "\u0944", // DEVANAGARI VOWEL SIGN VOCALIC RR
- "\u0945", // DEVANAGARI VOWEL SIGN CANDRA E
- "\u0946", // DEVANAGARI VOWEL SIGN SHORT E
- "\u0947", // DEVANAGARI VOWEL SIGN E
- "\u0948", // DEVANAGARI VOWEL SIGN AI
- "\u0949", // DEVANAGARI VOWEL SIGN CANDRA O
- "\u094a", // DEVANAGARI VOWEL SIGN SHORT O
- "\u094b", // DEVANAGARI VOWEL SIGN O
- "\u094c", // DEVANAGARI VOWEL SIGN AU
- "\u094d", // DEVANAGARI SIGN VIRAMA
- "\u094e", // DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
- "\u094f", // DEVANAGARI VOWEL SIGN AW
- "\u0950", // DEVANAGARI OM
- "\u0951", // DEVANAGARI STRESS SIGN UDATTA
- "\u0952", // DEVANAGARI STRESS SIGN ANUDATTA
- "\u0953", // DEVANAGARI GRAVE ACCENT
- "\u0954", // DEVANAGARI ACUTE ACCENT
- "\u0955", // DEVANAGARI VOWEL SIGN CANDRA LONG E
- "\u0956", // DEVANAGARI VOWEL SIGN UE
- "\u0957", // DEVANAGARI VOWEL SIGN UUE
- "\u0958", // DEVANAGARI LETTER QA
- "\u0959", // DEVANAGARI LETTER KHHA
- "\u095a", // DEVANAGARI LETTER GHHA
- "\u095b", // DEVANAGARI LETTER ZA
- "\u095c", // DEVANAGARI LETTER DDDHA
- "\u095d", // DEVANAGARI LETTER RHA
- "\u095e", // DEVANAGARI LETTER FA
- "\u095f", // DEVANAGARI LETTER YYA
- "\u0960", // DEVANAGARI LETTER VOCALIC RR
- "\u0961", // DEVANAGARI LETTER VOCALIC LL
- "\u0962", // DEVANAGARI VOWEL SIGN VOCALIC L
- "\u0963", // DEVANAGARI VOWEL SIGN VOCALIC LL
- "\u0964", // DEVANAGARI DANDA
- "\u0965", // DEVANAGARI DOUBLE DANDA
- "\u0966", // DEVANAGARI DIGIT ZERO
- "\u0967", // DEVANAGARI DIGIT ONE
- "\u0968", // DEVANAGARI DIGIT TWO
- "\u0969", // DEVANAGARI DIGIT THREE
- "\u096a", // DEVANAGARI DIGIT FOUR
- "\u096b", // DEVANAGARI DIGIT FIVE
- "\u096c", // DEVANAGARI DIGIT SIX
- "\u096d", // DEVANAGARI DIGIT SEVEN
- "\u096e", // DEVANAGARI DIGIT EIGHT
- "\u096f", // DEVANAGARI DIGIT NINE
- "\u0970", // DEVANAGARI ABBREVIATION SIGN
- "\u0971", // DEVANAGARI SIGN HIGH SPACING DOT
- "\u0972", // DEVANAGARI LETTER CANDRA A
- "\u0973", // DEVANAGARI LETTER OE
- "\u0974", // DEVANAGARI LETTER OOE
- "\u0975", // DEVANAGARI LETTER AW
- "\u0976", // DEVANAGARI LETTER UE
- "\u0977", // DEVANAGARI LETTER UUE
- "\u0979", // DEVANAGARI LETTER ZHA
- "\u097a", // DEVANAGARI LETTER HEAVY YA
- "\u097b", // DEVANAGARI LETTER GGA
- "\u097c", // DEVANAGARI LETTER JJA
- "\u097d", // DEVANAGARI LETTER GLOTTAL STOP
- "\u097e", // DEVANAGARI LETTER DDDA
- "\u097f" // DEVANAGARI LETTER BBA
- ]
+ 'characters': mw.language.specialCharacters.devanagari
},
'gujarati': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-gujarati',
+ 'labelMsg': 'special-characters-group-gujarati',
'language': 'gu',
'layout': 'characters',
- 'characters': [
- "\u0ad0", // Om
- "\u0a81", // Candrabindu
- "\u0a82", // Anusvara
- "\u0a83", // Visarga
- // Vowels
- "\u0a85", "\u0a86", // A
- "\u0a87", "\u0a88", // I
- "\u0a89", "\u0a8a", // U
- "\u0a8f", "\u0a90", // E
- "\u0a93", "\u0a94", // O
- "\u0a85\u0a82", // A with Anusvara
- "\u0a8b", // Vocalic R
- "\u0a8d", "\u0a91", // Candra E and O
- // Special vowels
- "\u0a8c", // Vocalic L
- "\u0ae0", // Vocalic RR
- "\u0ae1", // Vocalic LL
- // Consonants
- "\u0a95", "\u0a96", "\u0a97", "\u0a98", "\u0a99",
- "\u0a9a", "\u0a9b", "\u0a9c", "\u0a9d", "\u0a9e",
- "\u0a9f", "\u0aa0", "\u0aa1", "\u0aa2", "\u0aa3",
- "\u0aa4", "\u0aa5", "\u0aa6", "\u0aa7", "\u0aa8",
- "\u0aaa", "\u0aab", "\u0aac", "\u0aad", "\u0aae",
- "\u0aaf", "\u0ab0", "\u0ab2", "\u0ab3",
- "\u0ab5", "\u0ab6", "\u0ab7", "\u0ab8", "\u0ab9",
- "\u0a95\u0acd\u0ab7", // ksh
- "\u0a9c\u0acd\u0a9e", // jny
- "\u0abd", // Avagraha
- // Vowel signs
- "\u0abe", "\u0abf", "\u0ac0", "\u0ac0", "\u0ac1", "\u0ac2",
- "\u0ac3", "\u0ac4", "\u0ac5", "\u0ac7", "\u0ac8", "\u0ac9", "\u0acb", "\u0acc",
- "\u0ae2", "\u0ae3",
- // Virama
- "\u0acd",
- // Digits
- "\u0ae6", "\u0ae7", "\u0ae8", "\u0ae9", "\u0aea",
- "\u0aeb", "\u0aec", "\u0aed", "\u0aee", "\u0aef",
- // Rupee
- "\u0af1"
- ]
+ 'characters': mw.language.specialCharacters.gujarati
},
'thai': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-thai',
+ 'labelMsg': 'special-characters-group-thai',
'language': 'th',
'layout': 'characters',
- 'characters': [
- "\u0e01", "\u0e02", "\u0e03", "\u0e04", "\u0e05", "\u0e06", "\u0e07", "\u0e08", "\u0e09",
- "\u0e0a", "\u0e0b", "\u0e0c", "\u0e0d", "\u0e0e", "\u0e0f", "\u0e10", "\u0e11", "\u0e12",
- "\u0e13", "\u0e14", "\u0e15", "\u0e16", "\u0e17", "\u0e18", "\u0e19", "\u0e1a", "\u0e1b",
- "\u0e1c", "\u0e1d", "\u0e1e", "\u0e1f", "\u0e20", "\u0e21", "\u0e22", "\u0e23", "\u0e24",
- "\u0e25", "\u0e26", "\u0e27", "\u0e28", "\u0e29", "\u0e2a", "\u0e2b", "\u0e2c", "\u0e2d",
- "\u0e2e", "\u0e30", "\u0e31", "\u0e32", "\u0e45", "\u0e33", "\u0e34", "\u0e35", "\u0e36",
- "\u0e37", "\u0e38", "\u0e39", "\u0e40", "\u0e41", "\u0e42", "\u0e43", "\u0e44", "\u0e47",
- "\u0e48", "\u0e49", "\u0e4a", "\u0e4b", "\u0e4c", "\u0e4d", "\u0e3a", "\u0e4e", "\u0e50",
- "\u0e51", "\u0e52", "\u0e53", "\u0e54", "\u0e55", "\u0e56", "\u0e57", "\u0e58", "\u0e59",
- "\u0e3f", "\u0e46", "\u0e2f", "\u0e5a", "\u0e4f", "\u0e5b"
- ]
+ 'characters': mw.language.specialCharacters.thai
},
'lao': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-lao',
+ 'labelMsg': 'special-characters-group-lao',
'language': 'lo',
'layout': 'characters',
- 'characters': [
- "\u0e81", "\u0e82", "\u0e84", "\u0e87", "\u0e88", "\u0eaa", "\u0e8a", "\u0e8d", "\u0e94",
- "\u0e95", "\u0e96", "\u0e97", "\u0e99", "\u0e9a", "\u0e9b", "\u0e9c", "\u0e9d", "\u0e9e",
- "\u0e9f", "\u0ea1", "\u0ea2", "\u0ea5", "\u0ea7", "\u0eab", "\u0ead", "\u0eae", "\u0ea3",
- "\u0edc", "\u0edd", "\u0ebc", "\u0ebd", "\u0eb0", "\u0eb1", "\u0eb2", "\u0eb3", "\u0eb4",
- "\u0eb5", "\u0eb6", "\u0eb7", "\u0eb8", "\u0eb9", "\u0ebb", "\u0ec0", "\u0ec1", "\u0ec2",
- "\u0ec3", "\u0ec4", "\u0ec8", "\u0ec9", "\u0eca", "\u0ecb", "\u0ecc", "\u0ecd", "\u0ed0",
- "\u0ed1", "\u0ed2", "\u0ed3", "\u0ed4", "\u0ed5", "\u0ed6", "\u0ed7", "\u0ed8", "\u0ed9",
- "\u20ad", "\u0ec6", "\u0eaf"
- ]
+ 'characters': mw.language.specialCharacters.lao
},
'khmer': {
- 'labelMsg': 'wikieditor-toolbar-characters-page-khmer',
+ 'labelMsg': 'special-characters-group-khmer',
'language': 'km',
'layout': 'characters',
- 'characters': [
- "\u1780", "\u1781", "\u1782", "\u1783", "\u1784", "\u1785", "\u1786", "\u1787", "\u1788",
- "\u1789", "\u178a", "\u178b", "\u178c", "\u178d", "\u178e", "\u178f", "\u1790", "\u1791",
- "\u1792", "\u1793", "\u1794", "\u1795", "\u1796", "\u1797", "\u1798", "\u1799", "\u179a",
- "\u179b", "\u179c", "\u179f", "\u17a0", "\u17a1", "\u17a2", "\u17a3", "\u17a4", "\u17a5",
- "\u17a6", "\u17a7", "\u17a8", "\u17a9", "\u17aa", "\u17ab", "\u17ac", "\u17ad", "\u17ae",
- "\u17af", "\u17b0", "\u17b1", "\u17b2", "\u17b3", "\u17d2", "\u17b4", "\u17b5", "\u17b6",
- "\u17b7", "\u17b8", "\u17b9", "\u17ba", "\u17bb", "\u17bc", "\u17bd", "\u17be", "\u17bf",
- "\u17c0", "\u17c1", "\u17c2", "\u17c3", "\u17c4", "\u17c5", "\u17c6", "\u17c7", "\u17c8",
- "\u17c9", "\u17ca", "\u17cb", "\u17cc", "\u17cd", "\u17ce", "\u17cf", "\u17d0", "\u17d1",
- "\u17d3", "\u17dd", "\u17dc", "\u17e0", "\u17e1", "\u17e2", "\u17e3", "\u17e4", "\u17e5",
- "\u17e6", "\u17e7", "\u17e8", "\u17e9", "\u17db", "\u17d4", "\u17d5", "\u17d6", "\u17d7",
- "\u17d8", "\u17d9", "\u17da", "\u17f0", "\u17f1", "\u17f2", "\u17f3", "\u17f4", "\u17f5",
- "\u17f6", "\u17f7", "\u17f8", "\u17f9", "\u19e0", "\u19e1", "\u19e2", "\u19e3", "\u19e4",
- "\u19e5", "\u19e6", "\u19e7", "\u19e8", "\u19e9", "\u19ea", "\u19eb", "\u19ec", "\u19ed",
- "\u19ee", "\u19ef", "\u19f0", "\u19f1", "\u19f2", "\u19f3", "\u19f4", "\u19f5", "\u19f6",
- "\u19f7", "\u19f8", "\u19f9", "\u19fa", "\u19fb", "\u19fc", "\u19fd", "\u19fe", "\u19ff"
- ]
+ 'characters': mw.language.specialCharacters.khmer
}
}
},
@@ -1369,8 +696,21 @@ getDefaultConfig: function () {
'rows': [
{
'description': { 'htmlMsg': 'wikieditor-toolbar-help-content-file-description' },
- 'syntax': { 'htmlMsg': [ 'wikieditor-toolbar-help-content-file-syntax', fileNamespace ] },
- 'result': { 'htmlMsg': [ 'wikieditor-toolbar-help-content-file-result', mw.config.get( 'stylepath' ), mw.config.get( 'wgExtensionAssetsPath' ) ] }
+ 'syntax': { 'htmlMsg': [
+ 'wikieditor-toolbar-help-content-file-syntax',
+ fileNamespace,
+ mw.config.get( 'wgWikiEditorMagicWords' ).img_thumbnail,
+ mw.message( 'wikieditor-toolbar-help-content-file-caption' ).text()
+ ] },
+ 'result': { 'html': '<div class="thumbinner" style="width: 102px;">' +
+ '<a href="#" class="image">' +
+ '<img alt="" src="' + $.wikiEditor.imgPath + 'toolbar/example-image.png" width="100" height="50" class="thumbimage"/>' +
+ '</a>' +
+ '<div class="thumbcaption"><div class="magnify">' +
+ '<a title="' + mw.message( 'thumbnail-more' ).escaped() + '" class="internal" href="#"></a>' +
+ '</div>' + mw.message( 'wikieditor-toolbar-help-content-file-caption' ).escaped() + '</div>' +
+ '</div>'
+ }
}
]
},
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.css b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.css
deleted file mode 100644
index 2dad74ab..00000000
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.css
+++ /dev/null
@@ -1,322 +0,0 @@
-/**
- * CSS for WikiEditor Toolbar jQuery plugin
- */
-
-.wikiEditor-ui-toolbar {
- position: relative;
- display: block;
-}
-
-.wikiEditor-ui-toolbar .empty {
- display: none;
-}
-
-/* Expandable Sections */
-.wikiEditor-ui-toolbar .sections {
- float: left;
- width: 100%;
- clear: both;
- height: 0;
-}
-.wikiEditor-ui-toolbar .sections .section {
- float: left;
- width: 100%;
- border-top: 1px solid #DDDDDD;
- background-color: #E0EEf7;
-}
-
-.wikiEditor-ui-toolbar .sections .section-hidden {
- display: none;
-}
-
-.wikiEditor-ui-toolbar {
- /* @embed */
- background-image: url(images/toolbar/base.png);
- background-position: left top;
- background-repeat: repeat-x;
-}
-/* Gets overridden when the section div is in class loading - see below */
-.wikiEditor-ui-toolbar .sections div .spinner {
- display: none;
-}
-.wikiEditor-ui-toolbar .sections .loading .spinner {
- display: block;
- float: left;
- /* @embed */
- background-image: url(images/toolbar/loading.gif);
- background-position: left center;
- background-repeat: no-repeat;
- padding-left: 32px;
- margin-left: 0.5em;
- height: 32px;
- color: #666666;
-}
-/* Top Level Containers */
-.wikiEditor-ui-toolbar .tabs,
-.wikiEditor-ui-toolbar .section-main {
- position: relative;
- float: left;
- min-height: 26px;
- height: 100%;
-}
-/* Groups */
-.wikiEditor-ui-toolbar .group {
- float: left;
- height: 26px;
- padding-right: 6px;
- border-right: 1px solid #DDDDDD;
- margin: 3px;
-}
-.wikiEditor-ui-toolbar .group-search {
- float: right;
- padding: 0 0 0 6px;
- border-right: none;
- border-left: 1px solid #DDDDDD;
-}
-.wikiEditor-ui-toolbar .group-insert {
- border-right: none;
-}
-/* Sprited Buttons */
-.wikiEditor-toolbar-spritedButton {
- background-image: url('images/toolbar/button-sprite.png');
- /* @embed */
- background-image: -webkit-linear-gradient(transparent, transparent), url('images/toolbar/button-sprite.svg');
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url('images/toolbar/button-sprite.svg');
-
- background-position: 0 0;
- background-repeat: no-repeat;
- display: block;
- float: left;
- height: 22px;
- text-indent: -9999px;
- width: 22px;
- padding: 2px;
- cursor: pointer;
- overflow: hidden;
-}
-/* Tabs */
-.wikiEditor-ui-toolbar .tabs {
- list-style: none;
- margin: 3px;
-}
-.wikiEditor-ui-toolbar .tabs span.tab {
- display: block;
- float: left;
- line-height: 26px;
-}
-.wikiEditor-ui-toolbar .tabs span.tab a,
-.wikiEditor-ui-toolbar .tabs span.tab a:visited {
- display: inline-block;
- float: left;
- padding-left: 18px;
- padding-right: 12px;
- height: 26px;
- cursor: pointer;
- color: #0645ad;
- /* @embed */
- background-image: url(images/toolbar/arrow-ltr.png);
- background-position: left center;
- background-repeat: no-repeat;
-}
-.wikiEditor-ui-toolbar .tabs span.tab a.current,
-.wikiEditor-ui-toolbar .tabs span.tab a.current:visited {
- color: #333333;
- /* @embed */
- background-image: url(images/toolbar/arrow-down.png);
-}
-.wikiEditor-ui-toolbar .tabs span.tab a.current:hover {
- text-decoration: none;
-}
-.wikiEditor-ui-toolbar .tabs span.tab a.loading {
- /* @embed */
- background-image: url(images/toolbar/loading-small.gif);
-}
-/* Toolbar */
-.wikiEditor-ui-toolbar .group .label {
- float: left;
- border: 0;
- height: 22px;
- line-height: 22px;
- margin: 2px;
- margin-left: 5px;
- margin-right: 8px;
- color: #777777;
- cursor: default;
-}
-.wikiEditor-ui-toolbar .group img.tool {
- float: left;
- border: 0;
- height: 22px;
- width: 22px;
- padding: 2px;
- cursor: pointer;
-}
-.wikiEditor-ui-toolbar .group .tool-select {
- float: left;
- margin: 2px;
- height: 22px;
- cursor: pointer;
- border: 1px solid silver;
- padding: 0;
- margin-right: 0;
- cursor: pointer;
- background-color: #ffffff;
-}
-.wikiEditor-ui-toolbar .group .tool-select .label {
- /* @embed */
- background-image: url(images/toolbar/arrow-down.png);
- background-position: center right;
- background-repeat: no-repeat;
- padding: 0;
- margin: 0;
- padding-left: 4px;
- padding-right: 22px;
- margin-right: 4px;
- cursor: pointer;
- text-decoration: none;
- color: #333333;
-}
-.wikiEditor-ui-toolbar .group .tool-select .menu .options {
- position: absolute;
- display: none;
- margin-left: -1px;
- margin-top: 22px;
- border: 1px solid silver;
- background-color: #ffffff;
-}
-.wikiEditor-ui-toolbar .group .tool-select .options .option {
- display: block;
- padding: 0.5em;
- text-decoration: none;
- color: black;
- white-space: nowrap;
-}
-.wikiEditor-ui-toolbar .group .tool-select .options .option:hover {
- background-color: #E0EEf7;
-}
-.wikiEditor-ui-toolbar .group .tool-select .options .option[rel=heading-2] {
- font-size: 150%;
- font-weight: normal;
-}
-.wikiEditor-ui-toolbar .group .tool-select .options .option[rel=heading-3] {
- font-size: 132%;
- font-weight: normal;
-}
-.wikiEditor-ui-toolbar .group .tool-select .options .option[rel=heading-4] {
- font-size: 116%;
- font-weight: normal;
-}
-.wikiEditor-ui-toolbar .group .tool-select .options .option[rel=heading-5] {
- font-size: 100%;
- font-weight: bold;
-}
-/* Booklet */
-.wikiEditor-ui-toolbar .booklet .index {
- float: left;
- width: 20%;
- height: 125px;
- overflow: auto;
-}
-.wikiEditor-ui-toolbar .booklet .index div {
- padding: 4px;
- padding-left: 6px;
- cursor: pointer;
- color: #0645ad;
-}
-.wikiEditor-ui-toolbar .booklet .index .current {
- background-color: #FAFAFA;
- color: #333333;
- cursor: default;
-}
-.wikiEditor-ui-toolbar .booklet .pages {
- float: right;
- width: 80%;
- height: 125px;
- overflow: auto;
- background-color: #FAFAFA;
-}
-/* Help Pages */
-.wikiEditor-ui-toolbar .page-table table {
- padding-left: 5px;
- padding-right: 5px;
- background: none;
-}
-.wikiEditor-ui-toolbar .page-table th {
- color: #999999;
-}
-.wikiEditor-ui-toolbar .page-table td {
- color: black;
- border-top: 1px solid #EEEEEE;
-}
-.wikiEditor-ui-toolbar .page-table th,
-.wikiEditor-ui-toolbar .page-table td {
- text-align: left;
- padding: 5px;
- margin: 0;
-}
-.wikiEditor-ui-toolbar .section-help .page-table .cell {
- vertical-align: top;
-}
-.wikiEditor-ui-toolbar .section-help .page-table td.cell-syntax,
-.wikiEditor-ui-toolbar .section-help .page-table td.syntax {
- font-family: monospace, "Courier New";
-}
-.wikiEditor-ui-toolbar .section-help .page-table td.syntax,
-.wikiEditor-ui-toolbar .section-help .page-table td.cell-syntax,
-.wikiEditor-ui-toolbar .section-help .page-table td.cell-result,
-.wikiEditor-ui-toolbar .section-help .page-table td.result {
- width: 40%;
-}
-.wikiEditor-ui-toolbar .section-help .page-table td.description,
-.wikiEditor-ui-toolbar .section-help .page-table td.description {
- width: 20%;
-}
-/* Characters Pages */
-.wikiEditor-ui-toolbar .page-characters div span {
- border: 1px solid #DDDDDD;
- padding: 5px;
- padding-left: 8px;
- padding-right: 8px;
- margin-left: 5px;
- margin-top: 5px;
- height: 1em;
- float: left;
- display: block;
- color: black;
- text-decoration: none;
- cursor: pointer;
- font-family: monospace, "Courier New";
- font-size: 1.25em;
-}
-.wikiEditor-ui-toolbar .page-characters div[dir=rtl] span {
- /* @noflip */ direction: rtl;
-}
-.wikiEditor-ui-toolbar .page-characters div span:hover {
- background-color: white;
- text-decoration: none;
- border-color: #a8d7f9;
-}
-.ui-widget table td.wikieditor-toolbar-table-preview-wrapper span {
- padding: 4px 6px 0;
- display: block;
-}
-.ui-widget table .wikieditor-toolbar-table-preview-frame {
- width: 340px;
- background: #fff;
- padding: 10px;
- overflow: hidden;
- display: block;
- position: relative;
-}
-.ui-widget table .wikieditor-toolbar-table-preview-content {
- width: 375px;
- display: block;
-}
-.ui-widget table .wikieditor-toolbar-table-preview {
- width: 340px;
-}
-.ui-widget table td.wikieditor-toolbar-table-preview-wrapper {
- background: #e5e5e5;
- padding: 10px;
-}
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js
index 454b42a0..29899a38 100644
--- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js
@@ -7,15 +7,15 @@
/**
* API accessible functions
*/
-api : {
- addToToolbar : function ( context, data ) {
+api: {
+ addToToolbar: function ( context, data ) {
var smooth = true, type, i;
for ( type in data ) {
switch ( type ) {
case 'sections':
- var $sections = context.modules.toolbar.$toolbar.find( 'div.sections' ),
+ var $sections = context.modules.toolbar.$toolbar.find( 'div.sections' ),
$tabs = context.modules.toolbar.$toolbar.find( 'div.tabs' );
for ( var section in data[type] ) {
if ( section === 'main' ) {
@@ -41,7 +41,7 @@ api : {
if ( !( 'section' in data ) ) {
continue;
}
- var $section = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section' );
+ var $section = context.modules.toolbar.$toolbar.find( 'div[rel="' + data.section + '"].section' );
for ( var group in data[type] ) {
// Group
$section.append(
@@ -145,7 +145,7 @@ api : {
}
}
},
- removeFromToolbar : function ( context, data ) {
+ removeFromToolbar: function ( context, data ) {
if ( typeof data.section === 'string' ) {
// Section
var tab = 'div.tabs span[rel="' + data.section + '"].tab';
@@ -158,7 +158,7 @@ api : {
// Save for later checking if empty
group = target;
// Tool
- target = target + ' a[rel="' + data.tool + '"].tool, ' + target + ' img[rel="' + data.tool + '"].tool';
+ target = target + ' [rel="' + data.tool + '"].tool';
}
} else if ( typeof data.page === 'string' ) {
// Booklet page
@@ -217,7 +217,7 @@ fn: {
* @param {Object} context Context object of editor to create module in
* @param {Object} config Configuration object to create module from
*/
- create : function ( context, config ) {
+ create: function ( context, config ) {
if ( '$toolbar' in context.modules.toolbar ) {
return;
}
@@ -234,14 +234,14 @@ fn: {
* @param {Object} action
* @param {Object} source
*/
- doAction : function ( context, action ) {
+ doAction: function ( context, action ) {
switch ( action.type ) {
case 'replace':
case 'encapsulate':
var parts = {
- 'pre' : $.wikiEditor.autoMsg( action.options, 'pre' ),
- 'peri' : $.wikiEditor.autoMsg( action.options, 'peri' ),
- 'post' : $.wikiEditor.autoMsg( action.options, 'post' )
+ 'pre': $.wikiEditor.autoMsg( action.options, 'pre' ),
+ 'peri': $.wikiEditor.autoMsg( action.options, 'peri' ),
+ 'post': $.wikiEditor.autoMsg( action.options, 'post' )
};
var replace = action.type === 'replace';
if ( 'regex' in action.options && 'regexReplace' in action.options ) {
@@ -270,8 +270,8 @@ fn: {
default: break;
}
},
- buildGroup : function ( context, id, group ) {
- var $group = $( '<div>' ).attr( { 'class' : 'group group-' + id, 'rel' : id } );
+ buildGroup: function ( context, id, group ) {
+ var $group = $( '<div>' ).attr( { 'class': 'group group-' + id, 'rel': id } );
var label = $.wikiEditor.autoMsg( group, 'label' );
if ( label ) {
var $label = $( '<span />' )
@@ -296,7 +296,7 @@ fn: {
}
return $group;
},
- buildTool : function ( context, id, tool ) {
+ buildTool: function ( context, id, tool ) {
if ( 'filters' in tool ) {
for ( var i = 0; i < tool.filters.length; i++ ) {
if ( $( tool.filters[i] ).size() === 0 ) {
@@ -316,11 +316,11 @@ fn: {
if ( typeof offsetOrIcon === 'object' ) {
$button = $( '<a>' )
.attr( {
- 'href' : '#',
- 'title' : label,
- 'rel' : id,
- 'role' : 'button',
- 'class' : 'tool tool-button wikiEditor-toolbar-spritedButton'
+ 'href': '#',
+ 'title': label,
+ 'rel': id,
+ 'role': 'button',
+ 'class': 'tool tool-button wikiEditor-toolbar-spritedButton'
} )
.text( label )
.css( 'backgroundPosition', offsetOrIcon[0] + 'px ' + offsetOrIcon[1] + 'px' );
@@ -329,14 +329,14 @@ fn: {
if ( !$button ) {
$button = $( '<img>' )
.attr( {
- 'src' : src,
- 'width' : 22,
- 'height' : 22,
- 'alt' : label,
- 'title' : label,
- 'rel' : id,
- 'role' : 'button',
- 'class' : 'tool tool-button'
+ 'src': src,
+ 'width': 22,
+ 'height': 22,
+ 'alt': label,
+ 'title': label,
+ 'rel': id,
+ 'role': 'button',
+ 'class': 'tool tool-button'
} );
}
if ( 'action' in tool ) {
@@ -360,7 +360,7 @@ fn: {
return $button;
case 'select':
var $select = $( '<div>' )
- .attr( { 'rel' : id, 'class' : 'tool tool-select' } );
+ .attr( { 'rel': id, 'class': 'tool tool-select' } );
var $options = $( '<div>' ).addClass( 'options' );
if ( 'list' in tool ) {
for ( var option in tool.list ) {
@@ -416,7 +416,7 @@ fn: {
return null;
}
},
- buildBookmark : function ( context, id, page ) {
+ buildBookmark: function ( context, id, page ) {
var label = $.wikiEditor.autoMsg( page, 'label' );
return $( '<div>' )
.text( label )
@@ -445,17 +445,17 @@ fn: {
return false;
} );
},
- buildPage : function ( context, id, page ) {
+ buildPage: function ( context, id, page ) {
var html, i;
var $page = $( '<div>' ).attr( {
- 'class' : 'page page-' + id,
- 'rel' : id
+ 'class': 'page page-' + id,
+ 'rel': id
} );
switch ( page.layout ) {
case 'table':
$page.addClass( 'page-table' );
html =
- '<table cellpadding=0 cellspacing=0 ' + 'border=0 width="100%" class="table table-' + id + '">';
+ '<table class="table-' + id + '">';
if ( 'headings' in page ) {
html += $.wikiEditor.modules.toolbar.fn.buildHeading( context, page.headings );
}
@@ -510,14 +510,14 @@ fn: {
}
return $page;
},
- buildHeading : function ( context, headings ) {
+ buildHeading: function ( context, headings ) {
var html = '<tr>';
for ( var i = 0; i< headings.length; i++ ) {
html += '<th>' + $.wikiEditor.autoMsg( headings[i], ['html', 'text'] ) + '</th>';
}
return html + '</tr>';
},
- buildRow : function ( context, row ) {
+ buildRow: function ( context, row ) {
var html = '<tr>';
for ( var cell in row ) {
html += '<td class="cell cell-' + cell + '"><span>' +
@@ -525,14 +525,14 @@ fn: {
}
return html + '</tr>';
},
- buildCharacter : function ( character, actions ) {
+ buildCharacter: function ( character, actions ) {
if ( typeof character === 'string' ) {
character = {
- 'label' : character,
- 'action' : {
- 'type' : 'replace',
- 'options' : {
- 'peri' : character,
+ 'label': character,
+ 'action': {
+ 'type': 'replace',
+ 'options': {
+ 'peri': character,
'selectPeri': false
}
}
@@ -541,11 +541,11 @@ fn: {
// character that gets inserted (e.g. Hebrew vowels)
} else if ( character && 0 in character && 1 in character ) {
character = {
- 'label' : character[0],
- 'action' : {
- 'type' : 'replace',
- 'options' : {
- 'peri' : character[1],
+ 'label': character[0],
+ 'action': {
+ 'type': 'replace',
+ 'options': {
+ 'peri': character[1],
'selectPeri': false
}
}
@@ -567,7 +567,7 @@ fn: {
// bug 31673; also an additional fix for bug 24208...
return '';
},
- buildTab : function ( context, id, section ) {
+ buildTab: function ( context, id, section ) {
var selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' );
// Re-save cookie
if ( selected !== null ) {
@@ -625,8 +625,8 @@ fn: {
if ( show ) {
$section.removeClass( 'section-hidden' )
.attr( 'aria-expanded', 'true' )
- .animate( {opacity: 100.0}, 'fast', 'linear', function () {
- $(this).addClass( 'section-visible' );
+ .animate( { opacity: 100.0 }, 'fast', 'linear', function () {
+ $( this ).addClass( 'section-visible' );
} );
if ( $section.hasClass( 'loading' ) ) {
@@ -661,8 +661,8 @@ fn: {
} );
return $( '<span>' )
.attr( {
- 'class' : 'tab tab-' + id,
- 'rel' : id
+ 'class': 'tab tab-' + id,
+ 'rel': id
} )
.append( $link );
},
@@ -728,7 +728,7 @@ fn: {
break;
}
},
- updateBookletSelection : function ( context, id, $pages, $index ) {
+ updateBookletSelection: function ( context, id, $pages, $index ) {
/*jshint eqnull:true */
var cookie = 'wikiEditor-' + context.instance + '-booklet-' + id + '-page';
var selected = $.cookie( cookie );
@@ -747,7 +747,7 @@ fn: {
$index.children().removeClass( 'current' );
$selectedIndex.addClass( 'current' );
},
- build : function ( context, config ) {
+ build: function ( context, config ) {
var $tabs = $( '<div>' ).addClass( 'tabs' ).appendTo( context.modules.toolbar.$toolbar );
var $sections = $( '<div>' ).addClass( 'sections' ).appendTo( context.modules.toolbar.$toolbar );
context.modules.toolbar.$toolbar.append( $( '<div>' ).css( 'clear', 'both' ) );
@@ -759,17 +759,17 @@ fn: {
);
} else {
sectionQueue.push( {
- '$sections' : $sections,
- 'context' : context,
- 'id' : section,
- 'config' : config[section]
+ '$sections': $sections,
+ 'context': context,
+ 'id': section,
+ 'config': config[section]
} );
$tabs.append( $.wikiEditor.modules.toolbar.fn.buildTab( context, section, config[section] ) );
}
}
$.eachAsync( sectionQueue, {
- 'bulk' : 0,
- 'end' : function () {
+ 'bulk': 0,
+ 'end': function () {
// HACK: Opera doesn't seem to want to redraw after these bits
// are added to the DOM, so we can just FORCE it!
var oldValue = $( 'body' ).css( 'position' );
@@ -778,7 +778,7 @@ fn: {
context.$textarea.trigger( 'wikiEditor-toolbar-doneInitialSections' );
},
- 'loop' : function ( i, s ) {
+ 'loop': function ( i, s ) {
s.$sections.append( $.wikiEditor.modules.toolbar.fn.buildSection( s.context, s.id, s.config ) );
var $section = s.$sections.find( '.section-visible' );
if ( $section.size() ) {
diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.less b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.less
new file mode 100644
index 00000000..cfd316b1
--- /dev/null
+++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.less
@@ -0,0 +1,387 @@
+@import "mediawiki.mixins";
+
+/**
+ * CSS for WikiEditor Toolbar jQuery plugin
+ */
+
+.wikiEditor-ui-toolbar {
+ position: relative;
+ display: block;
+ .background-image('images/toolbar/base.png');
+ background-position: left top;
+ background-repeat: repeat-x;
+
+ .empty {
+ display: none;
+ }
+
+ /* Expandable Sections */
+ .sections {
+ float: left;
+ width: 100%;
+ clear: both;
+ height: 0;
+
+ .section {
+ float: left;
+ width: 100%;
+ border-top: 1px solid #DDDDDD;
+ background-color: #E0EEF7;
+ }
+
+ .section-hidden {
+ display: none;
+ }
+
+ /* Gets overridden when the section div is in class loading - see below */
+ div {
+ .spinner {
+ display: none;
+ }
+ }
+
+ .loading {
+ .spinner {
+ .background-image('images/toolbar/loading.gif');
+ background-position: left center;
+ background-repeat: no-repeat;
+ color: #666666;
+ display: block;
+ float: left;
+ height: 32px;
+ margin-left: 0.5em;
+ padding-left: 32px;
+ }
+ }
+ }
+
+ /* Top Level Containers */
+ /* Tabs */
+ .tabs {
+ float: left;
+ height: 100%;
+ list-style: none;
+ margin: 3px;
+ min-height: 26px;
+ position: relative;
+
+ span.tab {
+ display: block;
+ float: left;
+ line-height: 26px;
+
+ a, a:visited {
+ .background-image('images/toolbar/arrow-ltr.png');
+ background-position: left center;
+ background-repeat: no-repeat;
+ color: #0645ad;
+ cursor: pointer;
+ display: inline-block;
+ float: left;
+ height: 26px;
+ padding-left: 18px;
+ padding-right: 12px;
+ }
+
+ a.current, a.current:visited {
+ .background-image('images/toolbar/arrow-down.png');
+ color: #333333;
+
+ &:hover {
+ text-decoration: none;
+ }
+ }
+
+ a.loading {
+ .background-image('images/toolbar/loading-small.gif');
+ }
+ }
+ }
+
+ /* Top Level Containers */
+ .tabs,
+ .section-main {
+ position: relative;
+ float: left;
+ min-height: 26px;
+ height: 100%;
+ }
+
+ /* Groups */
+ .group {
+ float: left;
+ height: 26px;
+ padding-right: 6px;
+ border-right: 1px solid #DDDDDD;
+ margin: 3px;
+
+ /* Toolbar */
+ .label {
+ float: left;
+ border: 0;
+ height: 22px;
+ line-height: 22px;
+ margin: 2px;
+ margin-left: 5px;
+ margin-right: 8px;
+ color: #777777;
+ cursor: default;
+ }
+
+ img.tool {
+ float: left;
+ border: 0;
+ height: 22px;
+ width: 22px;
+ padding: 2px;
+ cursor: pointer;
+ }
+
+ .tool-select {
+ float: left;
+ margin: 2px;
+ height: 22px;
+ cursor: pointer;
+ border: 1px solid silver;
+ padding: 0;
+ margin-right: 0;
+ background-color: #ffffff;
+
+ .label {
+ .background-image('images/toolbar/arrow-down.png');
+ background-position: center right;
+ background-repeat: no-repeat;
+ padding: 0;
+ margin: 0;
+ padding-left: 4px;
+ padding-right: 22px;
+ margin-right: 4px;
+ cursor: pointer;
+ text-decoration: none;
+ color: #333333;
+ }
+
+ .menu {
+ .options {
+ position: absolute;
+ display: none;
+ margin-left: -1px;
+ margin-top: 22px;
+ border: 1px solid silver;
+ background-color: #ffffff;
+ }
+ }
+
+ .options {
+ .option {
+ display: block;
+ padding: 0.5em;
+ text-decoration: none;
+ color: black;
+ white-space: nowrap;
+
+ &:hover {
+ background-color: #E0EEF7;
+ }
+
+ &[rel=heading-2] {
+ font-size: 150%;
+ font-weight: normal;
+ }
+
+ &[rel=heading-3] {
+ font-size: 132%;
+ font-weight: normal;
+ }
+
+ &[rel=heading-4] {
+ font-size: 116%;
+ font-weight: normal;
+ }
+
+ &[rel=heading-5] {
+ font-size: 100%;
+ font-weight: bold;
+ }
+ }
+ }
+ }
+ }
+
+ .group-search {
+ float: right;
+ padding: 0 0 0 6px;
+ border-right: none;
+ border-left: 1px solid #DDDDDD;
+ }
+
+ .group-insert {
+ border-right: none;
+ }
+
+ /* Booklet */
+ .booklet {
+ .index {
+ float: left;
+ width: 20%;
+ height: 125px;
+ overflow: auto;
+ resize: horizontal;
+
+ div {
+ padding: 4px;
+ padding-left: 6px;
+ cursor: pointer;
+ color: #0645ad;
+ }
+
+ .current {
+ background-color: #FAFAFA;
+ color: #333333;
+ cursor: default;
+ }
+ }
+
+ .pages {
+ background-color: #FAFAFA;
+ height: 125px;
+ overflow: auto;
+ }
+ }
+
+ /* Help Pages */
+ .page-table {
+ padding-left: 5px;
+ padding-right: 5px;
+
+ table {
+ background: none;
+ border-collapse: collapse;
+ width: 100%;
+ }
+
+ th {
+ color: #999999;
+ }
+
+ td {
+ color: black;
+ border-top: 1px solid #EEEEEE;
+ }
+
+ th,
+ td {
+ margin: 0;
+ padding: 5px;
+ text-align: left;
+ }
+ }
+
+ .section-help {
+ .page-table {
+ .cell {
+ vertical-align: top;
+ }
+
+ td.cell-syntax {
+ font-family: monospace, Courier;
+ }
+
+ td.cell-syntax,
+ td.cell-result {
+ width: 40%;
+ }
+
+ td.cell-description {
+ width: 20%;
+ }
+
+ /* T33649 */
+ .table-link {
+ td.cell-syntax {
+ white-space: pre;
+ }
+ }
+ }
+ }
+
+ /* Characters Pages */
+ .page-characters {
+ div {
+ span {
+ border: 1px solid #DDDDDD;
+ padding: 5px;
+ padding-left: 8px;
+ padding-right: 8px;
+ margin-left: 5px;
+ margin-top: 5px;
+ height: 1em;
+ float: left;
+ display: block;
+ color: black;
+ text-decoration: none;
+ cursor: pointer;
+ font-family: monospace, Courier;
+ font-size: 1.25em;
+ line-height: 1;
+
+ &:hover {
+ background-color: white;
+ text-decoration: none;
+ border-color: #a8d7f9;
+ }
+ }
+ }
+
+ div[dir=rtl] span {
+ /* @noflip */
+ direction: rtl;
+ }
+ }
+}
+
+/* Sprited Buttons */
+.wikiEditor-toolbar-spritedButton {
+ .background-image('images/toolbar/button-sprite.png');
+ background-position: 0 0;
+ background-repeat: no-repeat;
+ display: block;
+ float: left;
+ height: 22px;
+ text-indent: -9999px;
+ width: 22px;
+ padding: 2px;
+ cursor: pointer;
+ overflow: hidden;
+}
+
+.ui-widget {
+ table {
+ td.wikieditor-toolbar-table-preview-wrapper {
+ background: #e5e5e5;
+ padding: 10px;
+ span {
+ padding: 4px 6px 0;
+ display: block;
+ }
+ }
+
+ .wikieditor-toolbar-table-preview-frame {
+ width: 340px;
+ background: #fff;
+ padding: 10px;
+ overflow: hidden;
+ display: block;
+ position: relative;
+ }
+
+ .wikieditor-toolbar-table-preview-content {
+ width: 375px;
+ display: block;
+ }
+
+ .wikieditor-toolbar-table-preview {
+ width: 340px;
+ }
+ }
+}
diff --git a/extensions/WikiEditor/tests/qunit/ext.wikiEditor.toolbar.test.js b/extensions/WikiEditor/tests/qunit/ext.wikiEditor.toolbar.test.js
new file mode 100644
index 00000000..674b5e16
--- /dev/null
+++ b/extensions/WikiEditor/tests/qunit/ext.wikiEditor.toolbar.test.js
@@ -0,0 +1,274 @@
+( function ( $ ) {
+ QUnit.module( 'ext.wikiEditor.toolbar', QUnit.newMwEnvironment( {
+ setup: function () {
+ var $fixture = $( '#qunit-fixture' );
+ var $target = $( '<textarea id="wpTextBox1">' );
+ this.$target = $target;
+ $fixture.append( $target );
+ $target.wikiEditor( 'addModule', 'toolbar' );
+ this.$ui = $target.data( 'wikiEditor-context' ).$ui;
+ }
+ } ) );
+
+ QUnit.test( 'Toolbars', 16, function ( assert ) {
+ // Add toolbar section
+ var data = {
+ sections: {
+ emoticons: {
+ type: 'toolbar',
+ label: 'Emoticons'
+ }
+ }
+ };
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section' ).length, 0, 'Before adding toolbar section' );
+ this.$target.wikiEditor( 'addToToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section' ).length, 1, 'After adding toolbar section' );
+
+ // Add toolbar group
+ data = {
+ section: 'emoticons',
+ groups: {
+ faces: {
+ label: 'Faces'
+ }
+ }
+ };
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group' ).length, 0, 'Before adding toolbar group' );
+ this.$target.wikiEditor( 'addToToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group' ).length, 1, 'After adding toolbar group' );
+
+ // Add button tool
+ data = {
+ section: 'emoticons',
+ group: 'faces',
+ tools: {
+ smile: {
+ label: 'Smile!',
+ type: 'button',
+ icon: 'http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Gnome-face-smile.svg/22px-Gnome-face-smile.svg.png',
+ action: {
+ type: 'encapsulate',
+ options: {
+ pre: ':)'
+ }
+ }
+ }
+ }
+ };
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group *[rel="smile"].tool' ).length, 0, 'Before adding button' );
+ this.$target.wikiEditor( 'addToToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group *[rel="smile"].tool' ).length, 1, 'After adding button' );
+
+ // Remove button tool
+ data = {
+ section: 'emoticons',
+ group: 'faces',
+ tool: 'smile'
+ };
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group *[rel="smile"].tool' ).length, 1, 'Before removing button' );
+ this.$target.wikiEditor( 'removeFromToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group *[rel="smile"].tool' ).length, 0, 'After removing button' );
+
+ // Add select tool
+ data = {
+ section: 'emoticons',
+ group: 'faces',
+ tools: {
+ icons: {
+ label: 'Icons',
+ type: 'select',
+ list: {
+ wink : {
+ label: 'Wink',
+ action: {
+ type: 'encapsulate',
+ options: {
+ pre: ';)'
+ }
+ }
+ },
+ frown : {
+ label: 'Frown',
+ action: {
+ type: 'encapsulate',
+ options: {
+ pre: ':('
+ }
+ }
+ },
+ bigSmile : {
+ label: 'Big smile',
+ action: {
+ type: 'encapsulate',
+ options: {
+ pre: ':D'
+ }
+ }
+ }
+ }
+ }
+ }
+ };
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group *[rel="icons"].tool' ).length, 0, 'Before adding select' );
+ this.$target.wikiEditor( 'addToToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group *[rel="icons"].tool' ).length, 1, 'After adding select' );
+
+ // Remove select tool
+ data = {
+ section: 'emoticons',
+ group: 'faces',
+ tool: 'icons'
+ };
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group *[rel="icons"].tool' ).length, 1, 'Before removing select' );
+ this.$target.wikiEditor( 'removeFromToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group *[rel="icons"].tool' ).length, 0, 'After removing select' );
+
+ // Remove toolbar group
+ data = {
+ section: 'emoticons',
+ group: 'faces'
+ };
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group' ).length, 1, 'Before removing toolbar group' );
+ this.$target.wikiEditor( 'removeFromToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section *[rel="faces"].group' ).length, 0, 'After removing toolbar group' );
+
+ // Remove toolbar section
+ data = {
+ section: 'emoticons'
+ };
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section' ).length, 1, 'Before removing toolbar section' );
+ this.$target.wikiEditor( 'removeFromToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="emoticons"].section' ).length, 0, 'After removing toolbar section' );
+ } );
+
+ QUnit.test( 'Booklets', 20, function ( assert ) {
+ // Add booklet section
+ var data = {
+ sections: {
+ info: {
+ type: 'booklet',
+ label: 'Info'
+ }
+ }
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section' ).length, 0, 'Before adding booklet section' );
+ this.$target.wikiEditor( 'addToToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section' ).length, 1, 'After adding booklet section' );
+
+ // Add table page
+ data = {
+ section: 'info',
+ pages: {
+ colors: {
+ layout: 'table',
+ label: 'Colors',
+ headings: [
+ { text: 'Name' },
+ { text: 'Temperature' },
+ { text: 'Swatch' }
+ ]
+ }
+ }
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="colors"].page' ).length, 0, 'Before adding table page' );
+ this.$target.wikiEditor( 'addToToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="colors"].page' ).length, 1, 'After adding table page' );
+
+ // Add table rows
+ data = {
+ section: 'info',
+ page: 'colors',
+ rows: [
+ {
+ name: { text: 'Red' },
+ temp: { text: 'Warm' },
+ swatch: { html: '<div style="width: 10px; height: 10px; background-color: red;">' }
+ },
+ {
+ name: { text: 'Blue' },
+ temp: { text: 'Cold' },
+ swatch: { html: '<div style="width: 10px; height: 10px; background-color: blue;">' }
+ },
+ {
+ name: { text: 'Silver' },
+ temp: { text: 'Neutral' },
+ swatch: { html: '<div style="width: 10px; height: 10px; background-color: silver;">' }
+ }
+ ]
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="colors"].page tr td' ).length, 0, 'Before adding table rows' );
+ this.$target.wikiEditor( 'addToToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="colors"].page tr td' ).length, 9, 'After adding table rows' );
+
+ // Remove table row
+ data = {
+ section: 'info',
+ page: 'colors',
+ row: 0
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="colors"].page tr td' ).length, 9, 'Before removing table row' );
+ this.$target.wikiEditor( 'removeFromToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="colors"].page tr td' ).length, 6, 'After removing table row' );
+
+ // Remove table page
+ data = {
+ section: 'info',
+ page: 'colors'
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="colors"].page' ).length, 1, 'Before removing table page' );
+ this.$target.wikiEditor( 'removeFromToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="colors"].page' ).length, 0, 'After removing table page' );
+
+ // Add character page
+ data = {
+ section: 'info',
+ pages: {
+ emoticons: {
+ layout: 'characters',
+ label: 'Emoticons'
+ }
+ }
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="emoticons"].page' ).length, 0, 'Before adding character page' );
+ this.$target.wikiEditor( 'addToToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="emoticons"].page' ).length, 1, 'After adding character page' );
+
+ // Add characters
+ data = {
+ section: 'info',
+ page: 'emoticons',
+ characters: [ ':)', ':))', ':(', '<3', ';)' ]
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="emoticons"].page *[rel=":))"]' ).length, 0, 'Before adding characters' );
+ this.$target.wikiEditor( 'addToToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="emoticons"].page *[rel=":))"]' ).length, 1, 'After adding characters' );
+
+ // Remove character
+ data = {
+ section: 'info',
+ page: 'emoticons',
+ character: ':))'
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="emoticons"].page *[rel=":))"]' ).length, 1, 'Before removing character' );
+ this.$target.wikiEditor( 'removeFromToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="emoticons"].page *[rel=":))"]' ).length, 0, 'After removing character' );
+
+ // Remove character page
+ data = {
+ section: 'info',
+ page: 'emoticons'
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="emoticons"].page' ).length, 1, 'Before removing character page' );
+ this.$target.wikiEditor( 'removeFromToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section *[rel="emoticons"].page' ).length, 0, 'After removing character page' );
+
+ // Remove booklet section
+ data = {
+ section: 'info'
+ };
+ assert.equal( this.$ui.find( '*[rel="info"].section' ).length, 1, 'Before removing booklet section' );
+ this.$target.wikiEditor( 'removeFromToolbar', data );
+ assert.equal( this.$ui.find( '*[rel="info"].section' ).length, 0, 'After removing booklet section' );
+ } );
+
+}( jQuery ) );
diff --git a/extensions/WikiEditor/tests/selenium/WikiDialogs_Links.php b/extensions/WikiEditor/tests/selenium/WikiDialogs_Links.php
deleted file mode 100644
index 7153f49f..00000000
--- a/extensions/WikiEditor/tests/selenium/WikiDialogs_Links.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-require_once 'WikiDialogs_Links_Setup.php';
-/**
- * Description of WikiNewPageDialogs
- *
- * @author bhagyag, pdhanda
- *
- * This test case is part of the WikiEditorTestSuite.
- * Configuration for these tests are dosumented as part of extensions/WikiEditor/tests/selenium/WikiEditorTestSuite.php
- *
- */
-class WikiDialogs_Links extends WikiDialogs_Links_Setup {
- // Set up the testing environment
- function setup() {
- parent::setUp();
- parent::doCreateInternalTestPageIfMissing();
- }
-
- function tearDown() {
- parent::doLogout();
- parent::tearDown();
- }
-
- // Create a new page temporary
- function createNewPage() {
- parent::doOpenLink();
- parent::login();
- parent::doCreateNewPageTemporary();
- }
-
- // Add a internal link and verify
- function testInternalLink() {
- $this->createNewPage();
- parent::verifyInternalLink();
- }
-
- // Add a internal link with different display text and verify
- function testInternalLinkWithDisplayText() {
- $this->createNewPage();
- parent::verifyInternalLinkWithDisplayText();
- }
-
- // Add a internal link with blank display text and verify
- function testInternalLinkWithBlankDisplayText() {
- $this->createNewPage();
- parent::verifyInternalLinkWithBlankDisplayText();
- }
-
- // Add external link and verify
- function testExternalLink() {
- $this->createNewPage();
- parent::verifyExternalLink();
- }
-
- // Add external link with different display text and verify
- function testExternalLinkWithDisplayText( ) {
- $this->createNewPage();
- parent::verifyExternalLinkWithDisplayText();
- }
-
- // Add external link with Blank display text and verify
- function testExternalLinkWithBlankDisplayText() {
- $this->createNewPage();
- parent::verifyExternalLinkWithBlankDisplayText();
- }
-
-}
diff --git a/extensions/WikiEditor/tests/selenium/WikiDialogs_Links_Setup.php b/extensions/WikiEditor/tests/selenium/WikiDialogs_Links_Setup.php
deleted file mode 100644
index 352ebec0..00000000
--- a/extensions/WikiEditor/tests/selenium/WikiDialogs_Links_Setup.php
+++ /dev/null
@@ -1,295 +0,0 @@
-<?php
-include( "WikiEditorConstants.php" );
-/**
- * This test case will be handling the Wiki Tool bar Dialog functions
- * Date : Apr - 2010
- * @author : BhagyaG - Calcey
- */
-class WikiDialogs_Links_Setup extends SeleniumTestCase {
-
- // Open the page.
- function doOpenLink() {
- $this->open( $this->getUrl() . '/index.php' );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- }
-
- // Expand advance tool bar section if its not
- function doExpandAdvanceSection() {
- if ( !$this->isTextPresent( TEXT_HEADING ) ) {
- $this->click( LINK_ADVANCED );
- }
- }
-
- // Log out from the application
- function doLogout() {
- $this->open( $this->getUrl() . '/index.php' );
- if ( $this->isTextPresent( TEXT_LOGOUT ) ) {
- $this->click( LINK_LOGOUT );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( TEXT_LOGOUT_CONFIRM, $this->getText( LINK_LOGIN ) );
- $this->open( $this->getUrl() . '/index.php' );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- }
- }
-
- // Create a temporary fixture page
- function doCreateInternalTestPageIfMissing() {
- $this->type( INPUT_SEARCH_BOX, WIKI_INTERNAL_LINK );
- $this->click( BUTTON_SEARCH );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->click( LINK_START . WIKI_INTERNAL_LINK );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $location = $this->getLocation() . "\n";
- if ( strpos( $location, '&redlink=1' ) !== false ) {
- $this->type( TEXT_EDITOR, "Test fixture page. No real content here" );
- $this->click( BUTTON_SAVE_WATCH );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertTrue( $this->isTextPresent( WIKI_INTERNAL_LINK ),
- $this->getText( TEXT_PAGE_HEADING ) );
- }
- }
-
- // Create a temporary new page
- function doCreateNewPageTemporary() {
- $this->type( INPUT_SEARCH_BOX, WIKI_TEMP_NEWPAGE );
- $this->click( BUTTON_SEARCH );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->click( LINK_START . WIKI_TEMP_NEWPAGE );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- }
-
- // Add a internal link and verify
- function verifyInternalLink() {
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDLINK );
- $this->waitForPopup( 'addLink', WIKI_TEST_WAIT_TIME );
- $this->type( TEXT_LINKNAME, ( WIKI_INTERNAL_LINK ) );
- $this->assertTrue( $this->isElementPresent( ICON_PAGEEXISTS ), 'Element ' . ICON_PAGEEXISTS . 'Not found' );
- $this->assertEquals( "on", $this->getValue( OPT_INTERNAL ) );
- $this->click( BUTTON_INSERTLINK );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( ( WIKI_INTERNAL_LINK ), $this->getText( LINK_START . WIKI_INTERNAL_LINK ) );
- $this->click( LINK_START . WIKI_INTERNAL_LINK );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertTrue( $this->isTextPresent( WIKI_INTERNAL_LINK ), $this->getText( TEXT_PAGE_HEADING ) );
- }
-
- // Add a internal link with different display text and verify
- function verifyInternalLinkWithDisplayText() {
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDLINK );
- $this->waitForPopup( 'addLink', WIKI_TEST_WAIT_TIME );
- $this->type( TEXT_LINKNAME, WIKI_INTERNAL_LINK );
- $this->type ( TEXT_LINKDISPLAYNAME, WIKI_INTERNAL_LINK . TEXT_LINKDISPLAYNAME_APPENDTEXT );
- $this->assertTrue( $this->isElementPresent( ICON_PAGEEXISTS ) );
- $this->assertEquals( "on", $this->getValue( OPT_INTERNAL ) );
- $this->click( BUTTON_INSERTLINK );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( WIKI_INTERNAL_LINK . TEXT_LINKDISPLAYNAME_APPENDTEXT,
- $this->getText( LINK_START . WIKI_INTERNAL_LINK . TEXT_LINKDISPLAYNAME_APPENDTEXT ) );
- $this->click( LINK_START . WIKI_INTERNAL_LINK . TEXT_LINKDISPLAYNAME_APPENDTEXT );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertTrue( $this->isTextPresent( WIKI_INTERNAL_LINK ), $this->getText( TEXT_PAGE_HEADING ) );
-
- }
-
- // Add a internal link with blank display text and verify
- function verifyInternalLinkWithBlankDisplayText() {
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDLINK );
- $this->waitForPopup( 'addLink', WIKI_TEST_WAIT_TIME );
- $this->type( TEXT_LINKNAME, WIKI_INTERNAL_LINK );
- $this->type( TEXT_LINKDISPLAYNAME, "" );
- $this->assertTrue( $this->isElementPresent( ICON_PAGEEXISTS ) );
- $this->assertEquals( "on", $this->getValue( OPT_INTERNAL ) );
- $this->click( BUTTON_INSERTLINK );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( WIKI_INTERNAL_LINK, $this->getText( LINK_START . WIKI_INTERNAL_LINK ) );
- $this->click( LINK_START . WIKI_INTERNAL_LINK );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( WIKI_INTERNAL_LINK, $this->getText( TEXT_PAGE_HEADING ) );
-
- }
-
- // Add external link and verify
- function verifyExternalLink() {
- $this->type( LINK_PREVIEW, "" );
- $this->click( LINK_ADDLINK );
- $this->type( TEXT_LINKNAME, WIKI_EXTERNAL_LINK );
- $this->assertTrue( $this->isElementPresent( ICON_PAGEEXTERNAL ) );
- $this->assertEquals( "on", $this->getValue( OPT_EXTERNAL ) );
- $this->click( BUTTON_INSERTLINK );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( WIKI_EXTERNAL_LINK, $this->getText( LINK_START . WIKI_EXTERNAL_LINK ) );
-
- $this->click( LINK_START . WIKI_EXTERNAL_LINK );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( WIKI_EXTERNAL_LINK_TITLE, $this->getTitle() );
- }
-
- // Add external link with different display text and verify
- function verifyExternalLinkWithDisplayText() {
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDLINK );
- $this->type( TEXT_LINKNAME, WIKI_EXTERNAL_LINK );
- $this->type( TEXT_LINKDISPLAYNAME, WIKI_EXTERNAL_LINK_TITLE );
- $this->assertTrue( $this->isElementPresent( ICON_PAGEEXTERNAL ) );
- $this->assertEquals( "on", $this->getValue( OPT_EXTERNAL ) );
- $this->click( BUTTON_INSERTLINK );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( WIKI_EXTERNAL_LINK_TITLE, $this->getText( LINK_START . WIKI_EXTERNAL_LINK_TITLE ) );
- $this->click( LINK_START . ( WIKI_EXTERNAL_LINK_TITLE ) );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( WIKI_EXTERNAL_LINK_TITLE , $this->getTitle() );
- }
-
- // Add external link with Blank display text and verify
- function verifyExternalLinkWithBlankDisplayText() {
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDLINK );
- $this->type( TEXT_LINKNAME, WIKI_EXTERNAL_LINK );
- $this->type( TEXT_LINKDISPLAYNAME, "" );
- $this->assertTrue( $this->isElementPresent( ICON_PAGEEXTERNAL ) );
- $this->assertEquals( "on", $this->getValue( OPT_EXTERNAL ) );
- $this->click( BUTTON_INSERTLINK );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( "[1]", $this->getText( LINK_START . "[1]" ) );
- $this->click( LINK_START . "[1]" );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertEquals( WIKI_EXTERNAL_LINK_TITLE, $this->getTitle() );
- }
-
- // Add a table and verify
- function verifyCreateTable() {
- $WIKI_TABLE_ROW = 2;
- $WIKI_TABLE_COL = "5";
- $this->doExpandAdvanceSection();
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDTABLE );
- $this->click( CHK_SORT );
- $this->type( TEXT_ROW, $WIKI_TABLE_ROW );
- $this->type( TEXT_COL, $WIKI_TABLE_COL );
- $this->click( BUTTON_INSERTABLE );
- $this->click( CHK_SORT );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $WIKI_TABLE_ROW = $WIKI_TABLE_ROW + 1;
- $this->assertTrue( $this->isElementPresent( TEXT_TABLEID_OTHER .
- TEXT_VALIDATE_TABLE_PART1 . $WIKI_TABLE_ROW .
- TEXT_VALIDATE_TABLE_PART2 . $WIKI_TABLE_COL .
- TEXT_VALIDATE_TABLE_PART3 ) );
- }
-
- // Add a table and verify only with head row
- function verifyCreateTableWithHeadRow() {
- $WIKI_TABLE_ROW = 3;
- $WIKI_TABLE_COL = "4";
- $this->doExpandAdvanceSection();
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDTABLE );
- $this->click( CHK_BOARDER );
- $this->type( TEXT_ROW, $WIKI_TABLE_ROW );
- $this->type( TEXT_COL, $WIKI_TABLE_COL );
- $this->click( BUTTON_INSERTABLE );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $WIKI_TABLE_ROW = $WIKI_TABLE_ROW + 1;
- $this->assertTrue( $this->isElementPresent( TEXT_TABLEID_OTHER .
- TEXT_VALIDATE_TABLE_PART1 . $WIKI_TABLE_ROW .
- TEXT_VALIDATE_TABLE_PART2 . $WIKI_TABLE_COL .
- TEXT_VALIDATE_TABLE_PART3 ) );
- }
-
- // Add a table and verify only with borders
- function verifyCreateTableWithBorders() {
- $WIKI_TABLE_ROW = "4";
- $WIKI_TABLE_COL = "6";
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDTABLE );
- $this->click( CHK_HEADER );
- $this->type( TEXT_ROW, $WIKI_TABLE_ROW );
- $this->type( TEXT_COL, $WIKI_TABLE_COL );
- $this->click( BUTTON_INSERTABLE );
- $this->click( CHK_HEADER );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertTrue( $this->isElementPresent( TEXT_TABLEID_OTHER .
- TEXT_VALIDATE_TABLE_PART1 . $WIKI_TABLE_ROW .
- TEXT_VALIDATE_TABLE_PART2 . $WIKI_TABLE_COL .
- TEXT_VALIDATE_TABLE_PART3 ) );
- }
-
- // Add a table and verify only with sort row
- function verifyCreateTableWithSortRow() {
- $WIKI_TABLE_ROW = "2";
- $WIKI_TABLE_COL = "5";
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDTABLE );
- $this->click( CHK_HEADER );
- $this->click( CHK_BOARDER );
- $this->click( CHK_SORT );
- $this->type( TEXT_ROW, $WIKI_TABLE_ROW );
- $this->type( TEXT_COL, $WIKI_TABLE_COL );
- $this->click( BUTTON_INSERTABLE );
- $this->click( CHK_HEADER );
- $this->click( CHK_BOARDER );
- $this->click( CHK_SORT );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertTrue( $this->isElementPresent( TEXT_TABLEID_WITHALLFEATURES .
- TEXT_VALIDATE_TABLE_PART1 . $WIKI_TABLE_ROW .
- TEXT_VALIDATE_TABLE_PART2 . $WIKI_TABLE_COL .
- TEXT_VALIDATE_TABLE_PART3 ) );
- }
-
- // Add a table without headers,borders and sort rows
- function verifyCreateTableWithNoSpecialEffects() {
- $WIKI_TABLE_ROW = "6";
- $WIKI_TABLE_COL = "2";
- $this->
- $this->doExpandAdvanceSection();
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDTABLE );
- $this->click( CHK_BOARDER );
- $this->click( CHK_HEADER );
- $this->type( TEXT_ROW, $WIKI_TABLE_ROW );
- $this->type( TEXT_COL, $WIKI_TABLE_COL );
- $this->click( BUTTON_INSERTABLE );
- $this->click( CHK_BOARDER );
- $this->click( CHK_HEADER );
- $this->click( INK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $this->assertTrue( $this->isElementPresent( TEXT_TABLEID_OTHER .
- TEXT_VALIDATE_TABLE_PART1 . $WIKI_TABLE_ROW .
- TEXT_VALIDATE_TABLE_PART2 . $WIKI_TABLE_COL .
- TEXT_VALIDATE_TABLE_PART3 ) );
- }
-
- // Add a table with headers,borders and sort rows
- function verifyCreateTableWithAllSpecialEffects() {
- $WIKI_TABLE_ROW = 6;
- $WIKI_TABLE_COL = "2";
- $this->doExpandAdvanceSection();
- $this->type( TEXT_EDITOR, "" );
- $this->click( LINK_ADDTABLE );
- $this->click( CHK_SORT );
- $this->type( TEXT_ROW, $WIKI_TABLE_ROW );
- $this->type( TEXT_COL, $WIKI_TABLE_COL );
- $this->click( BUTTON_INSERTABLE );
- $this->click( CHK_SORT );
- $this->click( LINK_PREVIEW );
- $this->waitForPageToLoad( WIKI_TEST_WAIT_TIME );
- $WIKI_TABLE_ROW = $WIKI_TABLE_ROW + 1;
- $this->assertTrue( $this->isElementPresent( TEXT_TABLEID_WITHALLFEATURES .
- TEXT_VALIDATE_TABLE_PART1 . $WIKI_TABLE_ROW .
- TEXT_VALIDATE_TABLE_PART2 . $WIKI_TABLE_COL .
- TEXT_VALIDATE_TABLE_PART3 ) );
- }
-
-}
diff --git a/extensions/WikiEditor/tests/selenium/WikiEditorConstants.php b/extensions/WikiEditor/tests/selenium/WikiEditorConstants.php
deleted file mode 100644
index 090f96bf..00000000
--- a/extensions/WikiEditor/tests/selenium/WikiEditorConstants.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-define ( 'WIKI_TEST_WAIT_TIME', "3000" ); // Waiting time
-
-// tool bar, buttons , links
-// commonly using links
-define ( 'LINK_MAIN_PAGE', "link=Main page" );
-define ( 'LINK_RANDOM_PAGE', "link=Random article" );
-define ( 'TEXT_PAGE_HEADING', "firstHeading" );
-define ( 'LINK_START', "link=" );
-define ( 'LINK_EDITPAGE', "//li[@id='ca-edit']/a/span" );
-define ( 'TEXT_EDITOR', "wpTextbox1" );
-define ( 'LINK_PREVIEW', "wpPreview" );
-
-define ( 'WIKI_SEARCH_PAGE', "Hair (musical)" ); // Page name to search
-define ( 'WIKI_TEXT_SEARCH', "TV" ); // Text to search
-define ( 'WIKI_INTERNAL_LINK', "Wikieditor-Fixture-Page" ); // Exisiting page name to add as an internal tag
-define ( 'WIKI_EXTERNAL_LINK', "www.google.com" ); // External web site name
-define ( 'WIKI_EXTERNAL_LINK_TITLE', "Google" ); // Page title of the external web site name
-define ( 'WIKI_CODE_PATH', getcwd() ); // get the current path of the program
-define ( 'WIKI_SCREENSHOTS_PATH', "screenshots" ); // the folder the error screen shots will be saved
-define ( 'WIKI_SCREENSHOTS_TYPE', "png" ); // screen print type
-define ( 'WIKI_TEMP_NEWPAGE', "TestWikiPage" ); // temporary creating new page name
-// for WikiCommonFunction_TC
-
-// for WikiSearch_TC
-define ( 'INPUT_SEARCH_BOX', "searchInput" );
-define ( 'BUTTON_SEARCH', "mw-searchButton" );
-define ( 'TEXT_SEARCH_RESULT_HEADING', " - Search results - Wikipedia, the free encyclopedia" );
-
-// for WikiWatchUnWatch_TC
-define ( 'LINK_WATCH_PAGE', "link=Watch" );
-define ( 'LINK_WATCH_LIST', "link=My watchlist" );
-define ( 'LINK_WATCH_EDIT', "link=View and edit watchlist" );
-define ( 'LINK_UNWATCH', "link=Unwatch" );
-define ( 'BUTTON_WATCH', "wpWatchthis" );
-define ( 'BUTTON_SAVE_WATCH', "wpSave" );
-define ( 'TEXT_WATCH', "Watch" );
-define ( 'TEXT_UNWATCH', "Unwatch" );
-
-// for WikiCommonFunction_TC
-define ( 'TEXT_LOGOUT', "Log out" );
-define ( 'LINK_LOGOUT', "link=Log out" );
-define ( 'LINK_LOGIN', "link=Log in / create account" );
-define ( 'TEXT_LOGOUT_CONFIRM', "Log in / create account" );
-define ( 'INPUT_USER_NAME', "wpName1" );
-define ( 'INPUT_PASSWD', "wpPassword1" );
-define ( 'BUTTON_LOGIN', "wpLoginAttempt" );
-define ( 'TEXT_HEADING', "Heading" );
-define ( 'LINK_ADVANCED', "link=Advanced" );
-
-// for WikiDialogs_TC
-define ( 'LINK_ADDLINK', "//div[@id='wikiEditor-ui-toolbar']/div[1]/div[2]/span[2 ]" );
-define ( 'TEXT_LINKNAME', "wikieditor-toolbar-link-int-target" );
-define ( 'TEXT_LINKDISPLAYNAME', "wikieditor-toolbar-link-int-text" );
-define ( 'TEXT_LINKDISPLAYNAME_APPENDTEXT', " Test" );
-define ( 'ICON_PAGEEXISTS', "wikieditor-toolbar-link-int-target-status-exists" );
-define ( 'ICON_PAGEEXTERNAL', "wikieditor-toolbar-link-int-target-status-external" );
-define ( 'OPT_INTERNAL', "wikieditor-toolbar-link-type-int" );
-define ( 'OPT_EXTERNAL', "wikieditor-toolbar-link-type-ext" );
-define ( 'BUTTON_INSERTLINK', "//div[10]/div[11]/button[1]" );
-define ( 'LINK_ADDTABLE', "//div[@id='wikiEditor-ui-toolbar']/div[3]/div[1]/div[4]/span[2]" );
-define ( 'CHK_HEADER', "wikieditor-toolbar-table-dimensions-header" );
-define ( 'CHK_BOARDER', "wikieditor-toolbar-table-wikitable" );
-define ( 'CHK_SORT', "wikieditor-toolbar-table-sortable" );
-define ( 'TEXT_ROW', "wikieditor-toolbar-table-dimensions-rows" );
-define ( 'TEXT_COL', "wikieditor-toolbar-table-dimensions-columns" );
-define ( 'BUTTON_INSERTABLE', "//div[3]/button[1]" );
-define ( 'TEXT_HEADTABLE_TEXT', "Header text" );
-define ( 'TEXT_TABLEID_WITHALLFEATURES', "//table[@id='sortable_table_id_0']/tbody/" );
-define ( 'TEXT_TABLEID_OTHER', "//div[@id='wikiPreview']/table/tbody/" );
-define ( 'TEXT_VALIDATE_TABLE_PART1', "tr[" );
-define ( 'TEXT_VALIDATE_TABLE_PART2', "]/td[" );
-define ( 'TEXT_VALIDATE_TABLE_PART3', "]" );
-define ( 'LINK_SEARCH', "//div[@id='wikiEditor-ui-toolbar']/div[3]/div[1]/div[5]/span" );
-define ( 'INPUT_SEARCH', "wikieditor-toolbar-replace-search" );
-define ( 'INPUT_REPLACE', "wikieditor-toolbar-replace-replace" );
-define ( 'BUTTON_REPLACEALL', "//button[3]" );
-define ( 'BUTTON_REPLACENEXT', "//button[2]" );
-define ( 'BUTTON_CANCEL', "//button[4]" );
-define ( 'TEXT_PREVIEW_TEXT1', "//div[@id='wikiPreview']/p[1]" );
-define ( 'TEXT_PREVIEW_TEXT2', "//div[@id='wikiPreview']/p[2]" );
-define ( 'TEXT_PREVIEW_TEXT3', "//div[@id='wikiPreview']/p[3]" );
-
-
diff --git a/extensions/WikiEditor/tests/selenium/WikiEditorSeleniumConfig.php b/extensions/WikiEditor/tests/selenium/WikiEditorSeleniumConfig.php
deleted file mode 100644
index 137e67b0..00000000
--- a/extensions/WikiEditor/tests/selenium/WikiEditorSeleniumConfig.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-class WikiEditorSeleniumConfig {
-
- public static function getSettings( &$includeFiles, &$globalConfigs ) {
- $includes = array(
- 'extensions/Vector/Vector.php',
- 'extensions/WikiEditor/WikiEditor.php'
- );
- $configs = array(
- 'wgDefaultSkin' => 'vector',
- 'wgWikiEditorFeatures' => array(
- 'toolbar' => array( 'global' => true, 'user' => true ),
- 'dialogs' => array( 'global' => true, 'user' => true )
- ),
- 'wgVectorFeatures' => array(
- 'editwarning' => array( 'global' => false, 'user' => false )
- )
- );
- $includeFiles = array_merge( $includeFiles, $includes );
- $globalConfigs = array_merge( $globalConfigs, $configs );
- return true;
- }
-}
diff --git a/extensions/WikiEditor/tests/selenium/WikiEditorTestSuite.php b/extensions/WikiEditor/tests/selenium/WikiEditorTestSuite.php
deleted file mode 100644
index 14a8bf20..00000000
--- a/extensions/WikiEditor/tests/selenium/WikiEditorTestSuite.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * To configure MW for these tests
- * 1) If you are running multiple test suites, add the following in LocalSettings.php
- * require_once("extensions/WikiEditor/tests/selenium/WikiEditorSeleniumConfig.php");
- * $wgSeleniumTestConfigs['WikiEditorTestSuite'] = 'WikiEditorSeleniumConfig::getSettings';
- * OR
- * 2) Add the following to your Localsettings.php
- * require_once( "$IP/extensions/Vector/Vector.php" );
- * require_once( "$IP/extensions/WikiEditor/WikiEditor.php" );
- * $wgDefaultSkin = 'vector';
- * $wgVectorFeatures['editwarning'] = array( 'global' => false, 'user' => false );
- * $wgWikiEditorFeatures['toolbar'] = array( 'global' => true, 'user' => true );
- * $wgWikiEditorFeatures['dialogs'] = array( 'global' => true, 'user' => true );
- *
- */
-class WikiEditorTestSuite extends SeleniumTestSuite
-{
- public function setUp() {
- $this->setLoginBeforeTests( false );
- parent::setUp();
- }
- public function addTests() {
- $testFiles = array(
- 'extensions/WikiEditor/tests/selenium/WikiDialogs_Links.php'
- );
- parent::addTestFiles( $testFiles );
- }
-
-
-}
diff --git a/images/.htaccess b/images/.htaccess
index 1cc74f42..8c46bbb4 100644
--- a/images/.htaccess
+++ b/images/.htaccess
@@ -3,4 +3,6 @@
RewriteEngine On
RewriteCond %{QUERY_STRING} \.[^\\/:*?\x22<>|%]+(#|\?|$) [nocase]
RewriteRule . - [forbidden]
+ # Fix for bug T64289
+ Options +FollowSymLinks
</IfModule>
diff --git a/img_auth.php b/img_auth.php
index dcd171f9..f44cac0b 100644
--- a/img_auth.php
+++ b/img_auth.php
@@ -39,7 +39,6 @@
define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
require __DIR__ . '/includes/WebStart.php';
-wfProfileIn( 'img_auth.php' );
# Set action base paths so that WebRequest::getPathInfo()
# recognizes the "X" as the 'title' in ../img_auth.php/X urls.
@@ -47,7 +46,6 @@ $wgArticlePath = false; # Don't let a "/*" article path clober our action path
$wgActionPaths = array( "$wgUploadPath/" );
wfImageAuthMain();
-wfProfileOut( 'img_auth.php' );
wfLogProfilingData();
// Commit and close up!
$factory = wfGetLBFactory();
@@ -203,7 +201,12 @@ function wfForbidden( $msg1, $msg2 ) {
header( 'Cache-Control: no-cache' );
header( 'Content-Type: text/html; charset=utf-8' );
echo <<<ENDS
+<!DOCTYPE html>
<html>
+<head>
+<meta charset="UTF-8" />
+<title>$msgHdr</title>
+</head>
<body>
<h1>$msgHdr</h1>
<p>$detailMsg</p>
diff --git a/img_auth.php5 b/img_auth.php5
index 7aee69ab..456c4f22 100644
--- a/img_auth.php5
+++ b/img_auth.php5
@@ -21,4 +21,6 @@
* @file
*/
+define( 'MW_ENTRY_PHP5', true );
+
require './img_auth.php';
diff --git a/includes/AjaxDispatcher.php b/includes/AjaxDispatcher.php
index 9bc92be9..b14114d7 100644
--- a/includes/AjaxDispatcher.php
+++ b/includes/AjaxDispatcher.php
@@ -56,8 +56,6 @@ class AjaxDispatcher {
* Load up our object with user supplied data
*/
function __construct( Config $config ) {
- wfProfileIn( __METHOD__ );
-
$this->config = $config;
$this->mode = "";
@@ -88,13 +86,11 @@ class AjaxDispatcher {
}
break;
default:
- wfProfileOut( __METHOD__ );
return;
# Or we could throw an exception:
# throw new MWException( __METHOD__ . ' called without any data (mode empty).' );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -110,11 +106,8 @@ class AjaxDispatcher {
return;
}
- wfProfileIn( __METHOD__ );
-
if ( !in_array( $this->func_name, $this->config->get( 'AjaxExportList' ) ) ) {
wfDebug( __METHOD__ . ' Bad Request for unknown function ' . $this->func_name . "\n" );
-
wfHttpError(
400,
'Bad Request',
@@ -127,7 +120,6 @@ class AjaxDispatcher {
'You are not allowed to view pages.' );
} else {
wfDebug( __METHOD__ . ' dispatching ' . $this->func_name . "\n" );
-
try {
$result = call_user_func_array( $this->func_name, $this->args );
@@ -162,6 +154,5 @@ class AjaxDispatcher {
}
}
- wfProfileOut( __METHOD__ );
}
}
diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php
index 6b0daa14..6344c276 100644
--- a/includes/AutoLoader.php
+++ b/includes/AutoLoader.php
@@ -25,1199 +25,7 @@
* Extension classes are specified with $wgAutoloadClasses
* This array is a global instead of a static member of AutoLoader to work around a bug in APC
*/
-global $wgAutoloadLocalClasses;
-
-$wgAutoloadLocalClasses = array(
- # Includes
- 'AjaxDispatcher' => 'includes/AjaxDispatcher.php',
- 'AjaxResponse' => 'includes/AjaxResponse.php',
- 'AtomFeed' => 'includes/Feed.php',
- 'AuthPlugin' => 'includes/AuthPlugin.php',
- 'AuthPluginUser' => 'includes/AuthPlugin.php',
- 'Autopromote' => 'includes/Autopromote.php',
- 'Block' => 'includes/Block.php',
- 'BloomCache' => 'includes/cache/bloom/BloomCache.php',
- 'BloomCacheRedis' => 'includes/cache/bloom/BloomCacheRedis.php',
- 'BloomFilterTitleHasLogs' => 'includes/cache/bloom/BloomFilters.php',
- 'CacheHelper' => 'includes/CacheHelper.php',
- 'Category' => 'includes/Category.php',
- 'CategoryFinder' => 'includes/CategoryFinder.php',
- 'CategoryViewer' => 'includes/CategoryViewer.php',
- 'ChangeTags' => 'includes/ChangeTags.php',
- 'ChannelFeed' => 'includes/Feed.php',
- 'Collation' => 'includes/Collation.php',
- 'CollationCkb' => 'includes/Collation.php',
- 'CollationEt' => 'includes/Collation.php',
- 'ConcatenatedGzipHistoryBlob' => 'includes/HistoryBlob.php',
- 'Cookie' => 'includes/Cookie.php',
- 'CookieJar' => 'includes/Cookie.php',
- 'CurlHttpRequest' => 'includes/HttpFunctions.php',
- 'DeprecatedGlobal' => 'includes/DeprecatedGlobal.php',
- 'DerivativeRequest' => 'includes/WebRequest.php',
- 'DiffHistoryBlob' => 'includes/HistoryBlob.php',
- 'DummyLinker' => 'includes/Linker.php',
- 'Dump7ZipOutput' => 'includes/Export.php',
- 'DumpBZip2Output' => 'includes/Export.php',
- 'DumpFileOutput' => 'includes/Export.php',
- 'DumpFilter' => 'includes/Export.php',
- 'DumpGZipOutput' => 'includes/Export.php',
- 'DumpLatestFilter' => 'includes/Export.php',
- 'DumpMultiWriter' => 'includes/Export.php',
- 'DumpNamespaceFilter' => 'includes/Export.php',
- 'DumpNotalkFilter' => 'includes/Export.php',
- 'DumpOutput' => 'includes/Export.php',
- 'DumpPipeOutput' => 'includes/Export.php',
- 'EditPage' => 'includes/EditPage.php',
- 'EmptyBloomCache' => 'includes/cache/bloom/BloomCache.php',
- 'Fallback' => 'includes/Fallback.php',
- 'FauxRequest' => 'includes/WebRequest.php',
- 'FauxResponse' => 'includes/WebResponse.php',
- 'FeedItem' => 'includes/Feed.php',
- 'FeedUtils' => 'includes/FeedUtils.php',
- 'FileDeleteForm' => 'includes/FileDeleteForm.php',
- 'ForkController' => 'includes/ForkController.php',
- 'FormOptions' => 'includes/FormOptions.php',
- 'GitInfo' => 'includes/GitInfo.php',
- 'HistoryBlob' => 'includes/HistoryBlob.php',
- 'HistoryBlobCurStub' => 'includes/HistoryBlob.php',
- 'HistoryBlobStub' => 'includes/HistoryBlob.php',
- 'Hooks' => 'includes/Hooks.php',
- 'Html' => 'includes/Html.php',
- 'HtmlFormatter' => 'includes/HtmlFormatter.php',
- 'HTMLApiField' => 'includes/htmlform/HTMLApiField.php',
- 'HTMLAutoCompleteSelectField' => 'includes/htmlform/HTMLAutoCompleteSelectField.php',
- 'HTMLButtonField' => 'includes/htmlform/HTMLButtonField.php',
- 'HTMLCheckField' => 'includes/htmlform/HTMLCheckField.php',
- 'HTMLCheckMatrix' => 'includes/htmlform/HTMLCheckMatrix.php',
- 'HTMLFormFieldCloner' => 'includes/htmlform/HTMLFormFieldCloner.php',
- 'HTMLEditTools' => 'includes/htmlform/HTMLEditTools.php',
- 'HTMLFloatField' => 'includes/htmlform/HTMLFloatField.php',
- 'HTMLForm' => 'includes/htmlform/HTMLForm.php',
- 'HTMLFormField' => 'includes/htmlform/HTMLFormField.php',
- 'HTMLFormFieldRequiredOptionsException' =>
- 'includes/htmlform/HTMLFormFieldRequiredOptionsException.php',
- 'HTMLHiddenField' => 'includes/htmlform/HTMLHiddenField.php',
- 'HTMLInfoField' => 'includes/htmlform/HTMLInfoField.php',
- 'HTMLIntField' => 'includes/htmlform/HTMLIntField.php',
- 'HTMLNestedFilterable' => 'includes/htmlform/HTMLNestedFilterable.php',
- 'HTMLMultiSelectField' => 'includes/htmlform/HTMLMultiSelectField.php',
- 'HTMLRadioField' => 'includes/htmlform/HTMLRadioField.php',
- 'HTMLSelectAndOtherField' => 'includes/htmlform/HTMLSelectAndOtherField.php',
- 'HTMLSelectField' => 'includes/htmlform/HTMLSelectField.php',
- 'HTMLSelectLimitField' => 'includes/htmlform/HTMLSelectLimitField.php',
- 'HTMLSelectOrOtherField' => 'includes/htmlform/HTMLSelectOrOtherField.php',
- 'HTMLSubmitField' => 'includes/htmlform/HTMLSubmitField.php',
- 'HTMLTextAreaField' => 'includes/htmlform/HTMLTextAreaField.php',
- 'HTMLTextField' => 'includes/htmlform/HTMLTextField.php',
- 'Http' => 'includes/HttpFunctions.php',
- 'IcuCollation' => 'includes/Collation.php',
- 'IdentityCollation' => 'includes/Collation.php',
- 'ImportStreamSource' => 'includes/Import.php',
- 'ImportStringSource' => 'includes/Import.php',
- 'Interwiki' => 'includes/interwiki/Interwiki.php',
- 'License' => 'includes/Licenses.php',
- 'Licenses' => 'includes/Licenses.php',
- 'Linker' => 'includes/Linker.php',
- 'LinkFilter' => 'includes/LinkFilter.php',
- 'MagicWord' => 'includes/MagicWord.php',
- 'MagicWordArray' => 'includes/MagicWord.php',
- 'MediaWiki' => 'includes/MediaWiki.php',
- 'MediaWikiVersionFetcher' => 'includes/MediaWikiVersionFetcher.php',
- 'Message' => 'includes/Message.php',
- 'MessageBlobStore' => 'includes/MessageBlobStore.php',
- 'MimeMagic' => 'includes/MimeMagic.php',
- 'MovePage' => 'includes/MovePage.php',
- 'MWHookException' => 'includes/Hooks.php',
- 'MWHttpRequest' => 'includes/HttpFunctions.php',
- 'MWNamespace' => 'includes/MWNamespace.php',
- 'OutputPage' => 'includes/OutputPage.php',
- 'PathRouter' => 'includes/PathRouter.php',
- 'PathRouterPatternReplacer' => 'includes/PathRouter.php',
- 'PhpHttpRequest' => 'includes/HttpFunctions.php',
- 'PoolCounter' => 'includes/poolcounter/PoolCounter.php',
- 'PoolCounter_Stub' => 'includes/poolcounter/PoolCounter.php',
- 'PoolCounterRedis' => 'includes/poolcounter/PoolCounterRedis.php',
- 'PoolCounterWork' => 'includes/poolcounter/PoolCounterWork.php',
- 'PoolCounterWorkViaCallback' => 'includes/poolcounter/PoolCounterWorkViaCallback.php',
- 'PoolWorkArticleView' => 'includes/poolcounter/PoolWorkArticleView.php',
- 'Preferences' => 'includes/Preferences.php',
- 'PreferencesForm' => 'includes/Preferences.php',
- 'PrefixSearch' => 'includes/PrefixSearch.php',
- 'ProtectionForm' => 'includes/ProtectionForm.php',
- 'RawMessage' => 'includes/Message.php',
- 'RevisionItem' => 'includes/RevisionList.php',
- 'RevisionItemBase' => 'includes/RevisionList.php',
- 'RevisionListBase' => 'includes/RevisionList.php',
- 'Revision' => 'includes/Revision.php',
- 'RevisionList' => 'includes/RevisionList.php',
- 'RSSFeed' => 'includes/Feed.php',
- 'Sanitizer' => 'includes/Sanitizer.php',
- 'SiteConfiguration' => 'includes/SiteConfiguration.php',
- 'SiteStats' => 'includes/SiteStats.php',
- 'SiteStatsInit' => 'includes/SiteStats.php',
- 'SquidPurgeClient' => 'includes/SquidPurgeClient.php',
- 'SquidPurgeClientPool' => 'includes/SquidPurgeClient.php',
- 'StatCounter' => 'includes/StatCounter.php',
- 'Status' => 'includes/Status.php',
- 'StreamFile' => 'includes/StreamFile.php',
- 'StringPrefixSearch' => 'includes/PrefixSearch.php',
- 'StubObject' => 'includes/StubObject.php',
- 'StubUserLang' => 'includes/StubObject.php',
- 'MWTimestamp' => 'includes/MWTimestamp.php',
- 'TimestampException' => 'includes/TimestampException.php',
- 'Title' => 'includes/Title.php',
- 'TitleArray' => 'includes/TitleArray.php',
- 'TitleArrayFromResult' => 'includes/TitleArrayFromResult.php',
- 'TitlePrefixSearch' => 'includes/PrefixSearch.php',
- 'UploadSourceAdapter' => 'includes/Import.php',
- 'UppercaseCollation' => 'includes/Collation.php',
- 'User' => 'includes/User.php',
- 'UserArray' => 'includes/UserArray.php',
- 'UserArrayFromResult' => 'includes/UserArrayFromResult.php',
- 'UserRightsProxy' => 'includes/UserRightsProxy.php',
- 'WatchedItem' => 'includes/WatchedItem.php',
- 'WebRequest' => 'includes/WebRequest.php',
- 'WebRequestUpload' => 'includes/WebRequest.php',
- 'WebResponse' => 'includes/WebResponse.php',
- 'WikiExporter' => 'includes/Export.php',
- 'WikiImporter' => 'includes/Import.php',
- 'WikiRevision' => 'includes/Import.php',
- 'WikiMap' => 'includes/WikiMap.php',
- 'WikiReference' => 'includes/WikiMap.php',
- 'Xml' => 'includes/Xml.php',
- 'XmlDumpWriter' => 'includes/Export.php',
- 'XmlJsCode' => 'includes/Xml.php',
- 'XmlSelect' => 'includes/Xml.php',
-
- # includes/actions
- 'Action' => 'includes/actions/Action.php',
- 'CachedAction' => 'includes/actions/CachedAction.php',
- 'CreditsAction' => 'includes/actions/CreditsAction.php',
- 'DeleteAction' => 'includes/actions/DeleteAction.php',
- 'EditAction' => 'includes/actions/EditAction.php',
- 'FormlessAction' => 'includes/actions/FormlessAction.php',
- 'FormAction' => 'includes/actions/FormAction.php',
- 'HistoryAction' => 'includes/actions/HistoryAction.php',
- 'HistoryPager' => 'includes/actions/HistoryAction.php',
- 'InfoAction' => 'includes/actions/InfoAction.php',
- 'MarkpatrolledAction' => 'includes/actions/MarkpatrolledAction.php',
- 'ProtectAction' => 'includes/actions/ProtectAction.php',
- 'PurgeAction' => 'includes/actions/PurgeAction.php',
- 'RawAction' => 'includes/actions/RawAction.php',
- 'RenderAction' => 'includes/actions/RenderAction.php',
- 'RevertAction' => 'includes/actions/RevertAction.php',
- 'RevisiondeleteAction' => 'includes/actions/RevisiondeleteAction.php',
- 'RollbackAction' => 'includes/actions/RollbackAction.php',
- 'SubmitAction' => 'includes/actions/SubmitAction.php',
- 'UnprotectAction' => 'includes/actions/UnprotectAction.php',
- 'UnwatchAction' => 'includes/actions/UnwatchAction.php',
- 'ViewAction' => 'includes/actions/ViewAction.php',
- 'WatchAction' => 'includes/actions/WatchAction.php',
-
- # includes/api
- 'ApiBase' => 'includes/api/ApiBase.php',
- 'ApiBlock' => 'includes/api/ApiBlock.php',
- 'ApiClearHasMsg' => 'includes/api/ApiClearHasMsg.php',
- 'ApiComparePages' => 'includes/api/ApiComparePages.php',
- 'ApiCreateAccount' => 'includes/api/ApiCreateAccount.php',
- 'ApiDelete' => 'includes/api/ApiDelete.php',
- 'ApiDisabled' => 'includes/api/ApiDisabled.php',
- 'ApiEditPage' => 'includes/api/ApiEditPage.php',
- 'ApiEmailUser' => 'includes/api/ApiEmailUser.php',
- 'ApiExpandTemplates' => 'includes/api/ApiExpandTemplates.php',
- 'ApiFeedContributions' => 'includes/api/ApiFeedContributions.php',
- 'ApiFeedRecentChanges' => 'includes/api/ApiFeedRecentChanges.php',
- 'ApiFeedWatchlist' => 'includes/api/ApiFeedWatchlist.php',
- 'ApiFileRevert' => 'includes/api/ApiFileRevert.php',
- 'ApiFormatBase' => 'includes/api/ApiFormatBase.php',
- 'ApiFormatDbg' => 'includes/api/ApiFormatDbg.php',
- 'ApiFormatDump' => 'includes/api/ApiFormatDump.php',
- 'ApiFormatFeedWrapper' => 'includes/api/ApiFormatFeedWrapper.php',
- 'ApiFormatJson' => 'includes/api/ApiFormatJson.php',
- 'ApiFormatNone' => 'includes/api/ApiFormatNone.php',
- 'ApiFormatPhp' => 'includes/api/ApiFormatPhp.php',
- 'ApiFormatRaw' => 'includes/api/ApiFormatRaw.php',
- 'ApiFormatTxt' => 'includes/api/ApiFormatTxt.php',
- 'ApiFormatWddx' => 'includes/api/ApiFormatWddx.php',
- 'ApiFormatXml' => 'includes/api/ApiFormatXml.php',
- 'ApiFormatXmlRsd' => 'includes/api/ApiRsd.php',
- 'ApiFormatYaml' => 'includes/api/ApiFormatYaml.php',
- 'ApiHelp' => 'includes/api/ApiHelp.php',
- 'ApiImageRotate' => 'includes/api/ApiImageRotate.php',
- 'ApiImport' => 'includes/api/ApiImport.php',
- 'ApiImportReporter' => 'includes/api/ApiImport.php',
- 'ApiLogin' => 'includes/api/ApiLogin.php',
- 'ApiLogout' => 'includes/api/ApiLogout.php',
- 'ApiMain' => 'includes/api/ApiMain.php',
- 'ApiModuleManager' => 'includes/api/ApiModuleManager.php',
- 'ApiMove' => 'includes/api/ApiMove.php',
- 'ApiOpenSearch' => 'includes/api/ApiOpenSearch.php',
- 'ApiOptions' => 'includes/api/ApiOptions.php',
- 'ApiPageSet' => 'includes/api/ApiPageSet.php',
- 'ApiParamInfo' => 'includes/api/ApiParamInfo.php',
- 'ApiParse' => 'includes/api/ApiParse.php',
- 'ApiPatrol' => 'includes/api/ApiPatrol.php',
- 'ApiProtect' => 'includes/api/ApiProtect.php',
- 'ApiPurge' => 'includes/api/ApiPurge.php',
- 'ApiQuery' => 'includes/api/ApiQuery.php',
- 'ApiQueryAllCategories' => 'includes/api/ApiQueryAllCategories.php',
- 'ApiQueryAllImages' => 'includes/api/ApiQueryAllImages.php',
- 'ApiQueryAllLinks' => 'includes/api/ApiQueryAllLinks.php',
- 'ApiQueryAllMessages' => 'includes/api/ApiQueryAllMessages.php',
- 'ApiQueryAllPages' => 'includes/api/ApiQueryAllPages.php',
- 'ApiQueryAllUsers' => 'includes/api/ApiQueryAllUsers.php',
- 'ApiQueryBacklinks' => 'includes/api/ApiQueryBacklinks.php',
- 'ApiQueryBacklinksprop' => 'includes/api/ApiQueryBacklinksprop.php',
- 'ApiQueryBase' => 'includes/api/ApiQueryBase.php',
- 'ApiQueryBlocks' => 'includes/api/ApiQueryBlocks.php',
- 'ApiQueryCategories' => 'includes/api/ApiQueryCategories.php',
- 'ApiQueryCategoryInfo' => 'includes/api/ApiQueryCategoryInfo.php',
- 'ApiQueryCategoryMembers' => 'includes/api/ApiQueryCategoryMembers.php',
- 'ApiQueryContributions' => 'includes/api/ApiQueryUserContributions.php',
- 'ApiQueryContributors' => 'includes/api/ApiQueryContributors.php',
- 'ApiQueryDeletedrevs' => 'includes/api/ApiQueryDeletedrevs.php',
- 'ApiQueryDisabled' => 'includes/api/ApiQueryDisabled.php',
- 'ApiQueryDuplicateFiles' => 'includes/api/ApiQueryDuplicateFiles.php',
- 'ApiQueryExternalLinks' => 'includes/api/ApiQueryExternalLinks.php',
- 'ApiQueryExtLinksUsage' => 'includes/api/ApiQueryExtLinksUsage.php',
- 'ApiQueryFilearchive' => 'includes/api/ApiQueryFilearchive.php',
- 'ApiQueryGeneratorBase' => 'includes/api/ApiQueryBase.php',
- 'ApiQueryImageInfo' => 'includes/api/ApiQueryImageInfo.php',
- 'ApiQueryImages' => 'includes/api/ApiQueryImages.php',
- 'ApiQueryInfo' => 'includes/api/ApiQueryInfo.php',
- 'ApiQueryIWBacklinks' => 'includes/api/ApiQueryIWBacklinks.php',
- 'ApiQueryIWLinks' => 'includes/api/ApiQueryIWLinks.php',
- 'ApiQueryLangBacklinks' => 'includes/api/ApiQueryLangBacklinks.php',
- 'ApiQueryLangLinks' => 'includes/api/ApiQueryLangLinks.php',
- 'ApiQueryLinks' => 'includes/api/ApiQueryLinks.php',
- 'ApiQueryLogEvents' => 'includes/api/ApiQueryLogEvents.php',
- 'ApiQueryORM' => 'includes/api/ApiQueryORM.php',
- 'ApiQueryPageProps' => 'includes/api/ApiQueryPageProps.php',
- 'ApiQueryPagesWithProp' => 'includes/api/ApiQueryPagesWithProp.php',
- 'ApiQueryPagePropNames' => 'includes/api/ApiQueryPagePropNames.php',
- 'ApiQueryPrefixSearch' => 'includes/api/ApiQueryPrefixSearch.php',
- 'ApiQueryProtectedTitles' => 'includes/api/ApiQueryProtectedTitles.php',
- 'ApiQueryQueryPage' => 'includes/api/ApiQueryQueryPage.php',
- 'ApiQueryRandom' => 'includes/api/ApiQueryRandom.php',
- 'ApiQueryRecentChanges' => 'includes/api/ApiQueryRecentChanges.php',
- 'ApiQueryFileRepoInfo' => 'includes/api/ApiQueryFileRepoInfo.php',
- 'ApiQueryRevisions' => 'includes/api/ApiQueryRevisions.php',
- 'ApiQuerySearch' => 'includes/api/ApiQuerySearch.php',
- 'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php',
- 'ApiQueryStashImageInfo' => 'includes/api/ApiQueryStashImageInfo.php',
- 'ApiQueryTags' => 'includes/api/ApiQueryTags.php',
- 'ApiQueryTokens' => 'includes/api/ApiQueryTokens.php',
- 'ApiQueryUserInfo' => 'includes/api/ApiQueryUserInfo.php',
- 'ApiQueryUsers' => 'includes/api/ApiQueryUsers.php',
- 'ApiQueryWatchlist' => 'includes/api/ApiQueryWatchlist.php',
- 'ApiQueryWatchlistRaw' => 'includes/api/ApiQueryWatchlistRaw.php',
- 'ApiResult' => 'includes/api/ApiResult.php',
- 'ApiRevisionDelete' => 'includes/api/ApiRevisionDelete.php',
- 'ApiRollback' => 'includes/api/ApiRollback.php',
- 'ApiRsd' => 'includes/api/ApiRsd.php',
- 'ApiSetNotificationTimestamp' => 'includes/api/ApiSetNotificationTimestamp.php',
- 'ApiTokens' => 'includes/api/ApiTokens.php',
- 'ApiUnblock' => 'includes/api/ApiUnblock.php',
- 'ApiUndelete' => 'includes/api/ApiUndelete.php',
- 'ApiUpload' => 'includes/api/ApiUpload.php',
- 'ApiUserrights' => 'includes/api/ApiUserrights.php',
- 'ApiWatch' => 'includes/api/ApiWatch.php',
- 'UsageException' => 'includes/api/ApiMain.php',
-
- # includes/cache
- 'BacklinkCache' => 'includes/cache/BacklinkCache.php',
- 'CacheDependency' => 'includes/cache/CacheDependency.php',
- 'CacheHelper' => 'includes/cache/CacheHelper.php',
- 'ConstantDependency' => 'includes/cache/CacheDependency.php',
- 'DependencyWrapper' => 'includes/cache/CacheDependency.php',
- 'FileCacheBase' => 'includes/cache/FileCacheBase.php',
- 'FileDependency' => 'includes/cache/CacheDependency.php',
- 'GenderCache' => 'includes/cache/GenderCache.php',
- 'GlobalDependency' => 'includes/cache/CacheDependency.php',
- 'HTMLFileCache' => 'includes/cache/HTMLFileCache.php',
- 'ICacheHelper' => 'includes/cache/CacheHelper.php',
- 'LCStore' => 'includes/cache/LocalisationCache.php',
- 'LCStoreCDB' => 'includes/cache/LocalisationCache.php',
- 'LCStoreDB' => 'includes/cache/LocalisationCache.php',
- 'LCStoreNull' => 'includes/cache/LocalisationCache.php',
- 'LinkBatch' => 'includes/cache/LinkBatch.php',
- 'LinkCache' => 'includes/cache/LinkCache.php',
- 'LocalisationCache' => 'includes/cache/LocalisationCache.php',
- 'LocalisationCacheBulkLoad' => 'includes/cache/LocalisationCache.php',
- 'MapCacheLRU' => 'includes/cache/MapCacheLRU.php',
- 'MessageCache' => 'includes/cache/MessageCache.php',
- 'ObjectFileCache' => 'includes/cache/ObjectFileCache.php',
- 'ResourceFileCache' => 'includes/cache/ResourceFileCache.php',
- 'UserCache' => 'includes/cache/UserCache.php',
-
- # includes/changes
- 'ChangesFeed' => 'includes/changes/ChangesFeed.php',
- 'ChangesList' => 'includes/changes/ChangesList.php',
- 'EnhancedChangesList' => 'includes/changes/EnhancedChangesList.php',
- 'OldChangesList' => 'includes/changes/OldChangesList.php',
- 'RCCacheEntry' => 'includes/changes/RCCacheEntry.php',
- 'RCCacheEntryFactory' => 'includes/changes/RCCacheEntryFactory.php',
- 'RecentChange' => 'includes/changes/RecentChange.php',
-
- # includes/clientpool
- 'RedisConnectionPool' => 'includes/clientpool/RedisConnectionPool.php',
- 'RedisConnRef' => 'includes/clientpool/RedisConnectionPool.php',
-
- # includes/composer
- 'ComposerPackageModifier' => 'includes/composer/ComposerPackageModifier.php',
- 'ComposerVersionNormalizer' => 'includes/composer/ComposerVersionNormalizer.php',
-
- # includes/config
- 'Config' => 'includes/config/Config.php',
- 'ConfigException' => 'includes/config/ConfigException.php',
- 'ConfigFactory' => 'includes/config/ConfigFactory.php',
- 'GlobalVarConfig' => 'includes/config/GlobalVarConfig.php',
- 'HashConfig' => 'includes/config/HashConfig.php',
- 'MultiConfig' => 'includes/config/MultiConfig.php',
- 'MutableConfig' => 'includes/config/MutableConfig.php',
-
- # includes/content
- 'AbstractContent' => 'includes/content/AbstractContent.php',
- 'CodeContentHandler' => 'includes/content/CodeContentHandler.php',
- 'Content' => 'includes/content/Content.php',
- 'ContentHandler' => 'includes/content/ContentHandler.php',
- 'CssContent' => 'includes/content/CssContent.php',
- 'CssContentHandler' => 'includes/content/CssContentHandler.php',
- 'JavaScriptContent' => 'includes/content/JavaScriptContent.php',
- 'JavaScriptContentHandler' => 'includes/content/JavaScriptContentHandler.php',
- 'JsonContent' => 'includes/content/JsonContent.php',
- 'JsonContentHandler' => 'includes/content/JsonContentHandler.php',
- 'MessageContent' => 'includes/content/MessageContent.php',
- 'MWContentSerializationException' => 'includes/content/ContentHandler.php',
- 'TextContent' => 'includes/content/TextContent.php',
- 'TextContentHandler' => 'includes/content/TextContentHandler.php',
- 'WikitextContent' => 'includes/content/WikitextContent.php',
- 'WikitextContentHandler' => 'includes/content/WikitextContentHandler.php',
-
- # includes/context
- 'ContextSource' => 'includes/context/ContextSource.php',
- 'DerivativeContext' => 'includes/context/DerivativeContext.php',
- 'IContextSource' => 'includes/context/IContextSource.php',
- 'RequestContext' => 'includes/context/RequestContext.php',
-
- # includes/dao
- 'IDBAccessObject' => 'includes/dao/IDBAccessObject.php',
- 'DBAccessBase' => 'includes/dao/DBAccessBase.php',
-
- # includes/db
- 'Blob' => 'includes/db/DatabaseUtility.php',
- 'ChronologyProtector' => 'includes/db/ChronologyProtector.php',
- 'CloneDatabase' => 'includes/db/CloneDatabase.php',
- 'DatabaseBase' => 'includes/db/Database.php',
- 'DatabaseMssql' => 'includes/db/DatabaseMssql.php',
- 'DatabaseMysql' => 'includes/db/DatabaseMysql.php',
- 'DatabaseMysqlBase' => 'includes/db/DatabaseMysqlBase.php',
- 'DatabaseMysqli' => 'includes/db/DatabaseMysqli.php',
- 'DatabaseOracle' => 'includes/db/DatabaseOracle.php',
- 'DatabasePostgres' => 'includes/db/DatabasePostgres.php',
- 'DatabaseSqlite' => 'includes/db/DatabaseSqlite.php',
- 'DatabaseSqliteStandalone' => 'includes/db/DatabaseSqlite.php',
- 'DatabaseType' => 'includes/db/Database.php',
- 'DBAccessError' => 'includes/db/LBFactory.php',
- 'DBConnectionError' => 'includes/db/DatabaseError.php',
- 'DBConnRef' => 'includes/db/LoadBalancer.php',
- 'DBError' => 'includes/db/DatabaseError.php',
- 'DBExpectedError' => 'includes/db/DatabaseError.php',
- 'DBObject' => 'includes/db/DatabaseUtility.php',
- 'IDatabase' => 'includes/db/Database.php',
- 'IORMRow' => 'includes/db/IORMRow.php',
- 'IORMTable' => 'includes/db/IORMTable.php',
- 'DBMasterPos' => 'includes/db/DatabaseUtility.php',
- 'DBQueryError' => 'includes/db/DatabaseError.php',
- 'DBUnexpectedError' => 'includes/db/DatabaseError.php',
- 'FakeResultWrapper' => 'includes/db/DatabaseUtility.php',
- 'Field' => 'includes/db/DatabaseUtility.php',
- 'LBFactory' => 'includes/db/LBFactory.php',
- 'LBFactoryFake' => 'includes/db/LBFactory.php',
- 'LBFactoryMulti' => 'includes/db/LBFactoryMulti.php',
- 'LBFactorySimple' => 'includes/db/LBFactory.php',
- 'LBFactorySingle' => 'includes/db/LBFactorySingle.php',
- 'LikeMatch' => 'includes/db/DatabaseUtility.php',
- 'LoadBalancer' => 'includes/db/LoadBalancer.php',
- 'LoadBalancerSingle' => 'includes/db/LBFactorySingle.php',
- 'LoadMonitor' => 'includes/db/LoadMonitor.php',
- 'LoadMonitorMySQL' => 'includes/db/LoadMonitor.php',
- 'LoadMonitorNull' => 'includes/db/LoadMonitor.php',
- 'MssqlField' => 'includes/db/DatabaseMssql.php',
- 'MssqlBlob' => 'includes/db/DatabaseMssql.php',
- 'MssqlResultWrapper' => 'includes/db/DatabaseMssql.php',
- 'MySQLField' => 'includes/db/DatabaseMysqlBase.php',
- 'MySQLMasterPos' => 'includes/db/DatabaseMysqlBase.php',
- 'ORAField' => 'includes/db/DatabaseOracle.php',
- 'ORAResult' => 'includes/db/DatabaseOracle.php',
- 'ORMIterator' => 'includes/db/ORMIterator.php',
- 'ORMResult' => 'includes/db/ORMResult.php',
- 'ORMRow' => 'includes/db/ORMRow.php',
- 'ORMTable' => 'includes/db/ORMTable.php',
- 'PostgresField' => 'includes/db/DatabasePostgres.php',
- 'PostgresTransactionState' => 'includes/db/DatabasePostgres.php',
- 'ResultWrapper' => 'includes/db/DatabaseUtility.php',
- 'SavepointPostgres' => 'includes/db/DatabasePostgres.php',
- 'SQLiteField' => 'includes/db/DatabaseSqlite.php',
-
- # includes/debug
- 'MWDebug' => 'includes/debug/MWDebug.php',
-
- # includes/deferred
- 'DataUpdate' => 'includes/deferred/DataUpdate.php',
- 'DeferrableUpdate' => 'includes/deferred/DeferredUpdates.php',
- 'DeferredUpdates' => 'includes/deferred/DeferredUpdates.php',
- 'HTMLCacheUpdate' => 'includes/deferred/HTMLCacheUpdate.php',
- 'LinksDeletionUpdate' => 'includes/deferred/LinksUpdate.php',
- 'LinksUpdate' => 'includes/deferred/LinksUpdate.php',
- 'MWCallableUpdate' => 'includes/deferred/CallableUpdate.php',
- 'SearchUpdate' => 'includes/deferred/SearchUpdate.php',
- 'SiteStatsUpdate' => 'includes/deferred/SiteStatsUpdate.php',
- 'SqlDataUpdate' => 'includes/deferred/SqlDataUpdate.php',
- 'SquidUpdate' => 'includes/deferred/SquidUpdate.php',
- 'ViewCountUpdate' => 'includes/deferred/ViewCountUpdate.php',
-
- # includes/diff
- 'DiffEngine' => 'includes/diff/DairikiDiff.php',
- 'DiffOp' => 'includes/diff/DairikiDiff.php',
- 'DiffOpAdd' => 'includes/diff/DairikiDiff.php',
- 'DiffOpChange' => 'includes/diff/DairikiDiff.php',
- 'DiffOpCopy' => 'includes/diff/DairikiDiff.php',
- 'DiffOpDelete' => 'includes/diff/DairikiDiff.php',
- 'HWLDFWordAccumulator' => 'includes/diff/DairikiDiff.php',
- 'ArrayDiffFormatter' => 'includes/diff/ArrayDiffFormatter.php',
- 'Diff' => 'includes/diff/DairikiDiff.php',
- 'DifferenceEngine' => 'includes/diff/DifferenceEngine.php',
- 'DiffFormatter' => 'includes/diff/DiffFormatter.php',
- 'MappedDiff' => 'includes/diff/DairikiDiff.php',
- 'RangeDifference' => 'includes/diff/WikiDiff3.php',
- 'TableDiffFormatter' => 'includes/diff/TableDiffFormatter.php',
- 'UnifiedDiffFormatter' => 'includes/diff/UnifiedDiffFormatter.php',
- 'WikiDiff3' => 'includes/diff/WikiDiff3.php',
- 'WordLevelDiff' => 'includes/diff/DairikiDiff.php',
-
- # includes/exception
- 'UserBlockedError' => 'includes/exception/UserBlockedError.php',
- 'UserNotLoggedIn' => 'includes/exception/UserNotLoggedIn.php',
- 'ThrottledError' => 'includes/exception/ThrottledError.php',
- 'ReadOnlyError' => 'includes/exception/ReadOnlyError.php',
- 'PermissionsError' => 'includes/exception/PermissionsError.php',
- 'MWException' => 'includes/exception/MWException.php',
- 'MWExceptionHandler' => 'includes/exception/MWExceptionHandler.php',
- 'HttpError' => 'includes/exception/HttpError.php',
- 'BadTitleError' => 'includes/exception/BadTitleError.php',
- 'ErrorPageError' => 'includes/exception/ErrorPageError.php',
- 'FatalError' => 'includes/exception/FatalError.php',
-
- # includes/externalstore
- 'ExternalStore' => 'includes/externalstore/ExternalStore.php',
- 'ExternalStoreDB' => 'includes/externalstore/ExternalStoreDB.php',
- 'ExternalStoreHttp' => 'includes/externalstore/ExternalStoreHttp.php',
- 'ExternalStoreMedium' => 'includes/externalstore/ExternalStoreMedium.php',
- 'ExternalStoreMwstore' => 'includes/externalstore/ExternalStoreMwstore.php',
-
- # includes/filebackend
- 'FileBackendGroup' => 'includes/filebackend/FileBackendGroup.php',
- 'FileBackend' => 'includes/filebackend/FileBackend.php',
- 'FileBackendError' => 'includes/filebackend/FileBackend.php',
- 'FileBackendException' => 'includes/filebackend/FileBackend.php',
- 'FileBackendStore' => 'includes/filebackend/FileBackendStore.php',
- 'FileBackendStoreShardListIterator' => 'includes/filebackend/FileBackendStore.php',
- 'FileBackendStoreShardDirIterator' => 'includes/filebackend/FileBackendStore.php',
- 'FileBackendStoreShardFileIterator' => 'includes/filebackend/FileBackendStore.php',
- 'FileBackendMultiWrite' => 'includes/filebackend/FileBackendMultiWrite.php',
- 'FileBackendStoreOpHandle' => 'includes/filebackend/FileBackendStore.php',
- 'FSFile' => 'includes/filebackend/FSFile.php',
- 'FSFileBackend' => 'includes/filebackend/FSFileBackend.php',
- 'FSFileBackendList' => 'includes/filebackend/FSFileBackend.php',
- 'FSFileBackendDirList' => 'includes/filebackend/FSFileBackend.php',
- 'FSFileBackendFileList' => 'includes/filebackend/FSFileBackend.php',
- 'FSFileOpHandle' => 'includes/filebackend/FSFileBackend.php',
- 'MemoryFileBackend' => 'includes/filebackend/MemoryFileBackend.php',
- 'SwiftFileBackend' => 'includes/filebackend/SwiftFileBackend.php',
- 'SwiftFileBackendList' => 'includes/filebackend/SwiftFileBackend.php',
- 'SwiftFileBackendDirList' => 'includes/filebackend/SwiftFileBackend.php',
- 'SwiftFileBackendFileList' => 'includes/filebackend/SwiftFileBackend.php',
- 'SwiftFileOpHandle' => 'includes/filebackend/SwiftFileBackend.php',
- 'TempFSFile' => 'includes/filebackend/TempFSFile.php',
- 'FileJournal' => 'includes/filebackend/filejournal/FileJournal.php',
- 'DBFileJournal' => 'includes/filebackend/filejournal/DBFileJournal.php',
- 'NullFileJournal' => 'includes/filebackend/filejournal/FileJournal.php',
- 'LockManagerGroup' => 'includes/filebackend/lockmanager/LockManagerGroup.php',
- 'LockManager' => 'includes/filebackend/lockmanager/LockManager.php',
- 'ScopedLock' => 'includes/filebackend/lockmanager/ScopedLock.php',
- 'FSLockManager' => 'includes/filebackend/lockmanager/FSLockManager.php',
- 'DBLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
- 'MemcLockManager' => 'includes/filebackend/lockmanager/MemcLockManager.php',
- 'QuorumLockManager' => 'includes/filebackend/lockmanager/QuorumLockManager.php',
- 'MySqlLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
- 'PostgreSqlLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
- 'RedisLockManager' => 'includes/filebackend/lockmanager/RedisLockManager.php',
- 'NullLockManager' => 'includes/filebackend/lockmanager/LockManager.php',
- 'FileOp' => 'includes/filebackend/FileOp.php',
- 'FileOpBatch' => 'includes/filebackend/FileOpBatch.php',
- 'StoreFileOp' => 'includes/filebackend/FileOp.php',
- 'CopyFileOp' => 'includes/filebackend/FileOp.php',
- 'MoveFileOp' => 'includes/filebackend/FileOp.php',
- 'DeleteFileOp' => 'includes/filebackend/FileOp.php',
- 'CreateFileOp' => 'includes/filebackend/FileOp.php',
- 'DescribeFileOp' => 'includes/filebackend/FileOp.php',
- 'NullFileOp' => 'includes/filebackend/FileOp.php',
-
- # includes/filerepo
- 'FileRepo' => 'includes/filerepo/FileRepo.php',
- 'FileRepoStatus' => 'includes/filerepo/FileRepoStatus.php',
- 'ForeignAPIRepo' => 'includes/filerepo/ForeignAPIRepo.php',
- 'ForeignDBRepo' => 'includes/filerepo/ForeignDBRepo.php',
- 'ForeignDBViaLBRepo' => 'includes/filerepo/ForeignDBViaLBRepo.php',
- 'FSRepo' => 'includes/filerepo/FSRepo.php',
- 'LocalRepo' => 'includes/filerepo/LocalRepo.php',
- 'NullRepo' => 'includes/filerepo/NullRepo.php',
- 'RepoGroup' => 'includes/filerepo/RepoGroup.php',
- 'TempFileRepo' => 'includes/filerepo/FileRepo.php',
-
- # includes/filerepo/file
- 'ArchivedFile' => 'includes/filerepo/file/ArchivedFile.php',
- 'File' => 'includes/filerepo/file/File.php',
- 'ForeignAPIFile' => 'includes/filerepo/file/ForeignAPIFile.php',
- 'ForeignDBFile' => 'includes/filerepo/file/ForeignDBFile.php',
- 'LocalFile' => 'includes/filerepo/file/LocalFile.php',
- 'LocalFileDeleteBatch' => 'includes/filerepo/file/LocalFile.php',
- 'LocalFileMoveBatch' => 'includes/filerepo/file/LocalFile.php',
- 'LocalFileRestoreBatch' => 'includes/filerepo/file/LocalFile.php',
- 'OldLocalFile' => 'includes/filerepo/file/OldLocalFile.php',
- 'UnregisteredLocalFile' => 'includes/filerepo/file/UnregisteredLocalFile.php',
-
- # includes/installer
- 'CliInstaller' => 'includes/installer/CliInstaller.php',
- 'DatabaseInstaller' => 'includes/installer/DatabaseInstaller.php',
- 'DatabaseUpdater' => 'includes/installer/DatabaseUpdater.php',
- 'InstallDocFormatter' => 'includes/installer/InstallDocFormatter.php',
- 'Installer' => 'includes/installer/Installer.php',
- 'LocalSettingsGenerator' => 'includes/installer/LocalSettingsGenerator.php',
- 'MssqlInstaller' => 'includes/installer/MssqlInstaller.php',
- 'MssqlUpdater' => 'includes/installer/MssqlUpdater.php',
- 'MysqlInstaller' => 'includes/installer/MysqlInstaller.php',
- 'MysqlUpdater' => 'includes/installer/MysqlUpdater.php',
- 'OracleInstaller' => 'includes/installer/OracleInstaller.php',
- 'OracleUpdater' => 'includes/installer/OracleUpdater.php',
- 'PhpXmlBugTester' => 'includes/installer/PhpBugTests.php',
- 'PostgresInstaller' => 'includes/installer/PostgresInstaller.php',
- 'PostgresUpdater' => 'includes/installer/PostgresUpdater.php',
- 'SqliteInstaller' => 'includes/installer/SqliteInstaller.php',
- 'SqliteUpdater' => 'includes/installer/SqliteUpdater.php',
- 'WebInstaller' => 'includes/installer/WebInstaller.php',
- 'WebInstallerComplete' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerCopying' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerDBConnect' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerDBSettings' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerDocument' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerExistingWiki' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerInstall' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerLanguage' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerName' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerOptions' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerReadme' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerReleaseNotes' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerRestart' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerUpgrade' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerUpgradeDoc' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerWelcome' => 'includes/installer/WebInstallerPage.php',
- 'WebInstallerOutput' => 'includes/installer/WebInstallerOutput.php',
- 'WebInstallerPage' => 'includes/installer/WebInstallerPage.php',
-
- # includes/job
- 'IJobSpecification' => 'includes/jobqueue/JobSpecification.php',
- 'Job' => 'includes/jobqueue/Job.php',
- 'JobQueue' => 'includes/jobqueue/JobQueue.php',
- 'JobQueueAggregator' => 'includes/jobqueue/aggregator/JobQueueAggregator.php',
- 'JobQueueAggregatorMemc' => 'includes/jobqueue/aggregator/JobQueueAggregatorMemc.php',
- 'JobQueueAggregatorRedis' => 'includes/jobqueue/aggregator/JobQueueAggregatorRedis.php',
- 'JobQueueDB' => 'includes/jobqueue/JobQueueDB.php',
- 'JobQueueConnectionError' => 'includes/jobqueue/JobQueue.php',
- 'JobQueueError' => 'includes/jobqueue/JobQueue.php',
- 'JobQueueGroup' => 'includes/jobqueue/JobQueueGroup.php',
- 'JobQueueFederated' => 'includes/jobqueue/JobQueueFederated.php',
- 'JobQueueRedis' => 'includes/jobqueue/JobQueueRedis.php',
- 'JobRunner' => 'includes/jobqueue/JobRunner.php',
- 'JobSpecification' => 'includes/jobqueue/JobSpecification.php',
-
- # includes/jobqueue/jobs
- 'DoubleRedirectJob' => 'includes/jobqueue/jobs/DoubleRedirectJob.php',
- 'DuplicateJob' => 'includes/jobqueue/jobs/DuplicateJob.php',
- 'EmaillingJob' => 'includes/jobqueue/jobs/EmaillingJob.php',
- 'EnotifNotifyJob' => 'includes/jobqueue/jobs/EnotifNotifyJob.php',
- 'HTMLCacheUpdateJob' => 'includes/jobqueue/jobs/HTMLCacheUpdateJob.php',
- 'NullJob' => 'includes/jobqueue/jobs/NullJob.php',
- 'RefreshLinksJob' => 'includes/jobqueue/jobs/RefreshLinksJob.php',
- 'RefreshLinksJob2' => 'includes/jobqueue/jobs/RefreshLinksJob2.php',
- 'UploadFromUrlJob' => 'includes/jobqueue/jobs/UploadFromUrlJob.php',
- 'AssembleUploadChunksJob' => 'includes/jobqueue/jobs/AssembleUploadChunksJob.php',
- 'PublishStashedFileJob' => 'includes/jobqueue/jobs/PublishStashedFileJob.php',
-
- # includes/jobqueue/utils
- 'BacklinkJobUtils' => 'includes/jobqueue/utils/BacklinkJobUtils.php',
-
- # includes/json
- 'FormatJson' => 'includes/json/FormatJson.php',
-
- # includes/libs
- 'CSSJanus' => 'includes/libs/CSSJanus.php',
- 'CSSJanusTokenizer' => 'includes/libs/CSSJanus.php',
- 'CSSMin' => 'includes/libs/CSSMin.php',
- 'GenericArrayObject' => 'includes/libs/GenericArrayObject.php',
- 'HashRing' => 'includes/libs/HashRing.php',
- 'HttpStatus' => 'includes/libs/HttpStatus.php',
- 'IEContentAnalyzer' => 'includes/libs/IEContentAnalyzer.php',
- 'IEUrlExtension' => 'includes/libs/IEUrlExtension.php',
- 'MappedIterator' => 'includes/libs/MappedIterator.php',
- 'IPSet' => 'includes/libs/IPSet.php',
- 'JavaScriptMinifier' => 'includes/libs/JavaScriptMinifier.php',
- 'JSCompilerContext' => 'includes/libs/jsminplus.php',
- 'JSMinPlus' => 'includes/libs/jsminplus.php',
- 'JSNode' => 'includes/libs/jsminplus.php',
- 'JSParser' => 'includes/libs/jsminplus.php',
- 'JSToken' => 'includes/libs/jsminplus.php',
- 'JSTokenizer' => 'includes/libs/jsminplus.php',
- 'MultiHttpClient' => 'includes/libs/MultiHttpClient.php',
- 'MWMessagePack' => 'includes/libs/MWMessagePack.php',
- 'ProcessCacheLRU' => 'includes/libs/ProcessCacheLRU.php',
- 'RunningStat' => 'includes/libs/RunningStat.php',
- 'ScopedCallback' => 'includes/libs/ScopedCallback.php',
- 'ScopedPHPTimeout' => 'includes/libs/ScopedPHPTimeout.php',
- 'SwiftVirtualRESTService' => 'includes/libs/virtualrest/SwiftVirtualRESTService.php',
- 'VirtualRESTService' => 'includes/libs/virtualrest/VirtualRESTService.php',
- 'VirtualRESTServiceClient' => 'includes/libs/virtualrest/VirtualRESTServiceClient.php',
- 'XmlTypeCheck' => 'includes/libs/XmlTypeCheck.php',
-
- # includes/libs/lessphp
- 'lessc' => 'includes/libs/lessc.inc.php',
- 'lessc_parser' => 'includes/libs/lessc.inc.php',
- 'lessc_formatter_classic' => 'includes/libs/lessc.inc.php',
- 'lessc_formatter_compressed' => 'includes/libs/lessc.inc.php',
- 'lessc_formatter_lessjs' => 'includes/libs/lessc.inc.php',
-
- # includes/logging
- 'DatabaseLogEntry' => 'includes/logging/LogEntry.php',
- 'DeleteLogFormatter' => 'includes/logging/DeleteLogFormatter.php',
- 'LegacyLogFormatter' => 'includes/logging/LogFormatter.php',
- 'LogEntry' => 'includes/logging/LogEntry.php',
- 'LogEventsList' => 'includes/logging/LogEventsList.php',
- 'LogEntryBase' => 'includes/logging/LogEntry.php',
- 'LogFormatter' => 'includes/logging/LogFormatter.php',
- 'LogPage' => 'includes/logging/LogPage.php',
- 'LogPager' => 'includes/logging/LogPager.php',
- 'ManualLogEntry' => 'includes/logging/LogEntry.php',
- 'MoveLogFormatter' => 'includes/logging/MoveLogFormatter.php',
- 'NewUsersLogFormatter' => 'includes/logging/NewUsersLogFormatter.php',
- 'PageLangLogFormatter' => 'includes/logging/PageLangLogFormatter.php',
- 'PatrolLog' => 'includes/logging/PatrolLog.php',
- 'PatrolLogFormatter' => 'includes/logging/PatrolLogFormatter.php',
- 'RCDatabaseLogEntry' => 'includes/logging/LogEntry.php',
- 'RightsLogFormatter' => 'includes/logging/RightsLogFormatter.php',
-
- # Image gallery
-
- 'ImageGallery' => 'includes/gallery/TraditionalImageGallery.php',
- 'ImageGalleryBase' => 'includes/gallery/ImageGalleryBase.php',
- 'NolinesImageGallery' => 'includes/gallery/NolinesImageGallery.php',
- 'TraditionalImageGallery' => 'includes/gallery/TraditionalImageGallery.php',
- 'PackedImageGallery' => 'includes/gallery/PackedImageGallery.php',
- 'PackedHoverImageGallery' => 'includes/gallery/PackedOverlayImageGallery.php',
- 'PackedOverlayImageGallery' => 'includes/gallery/PackedOverlayImageGallery.php',
-
- # includes/mail
- 'EmailNotification' => 'includes/mail/EmailNotification.php',
- 'MailAddress' => 'includes/mail/MailAddress.php',
- 'UserMailer' => 'includes/mail/UserMailer.php',
-
- # includes/media
- 'BitmapHandler' => 'includes/media/Bitmap.php',
- 'BitmapHandler_ClientOnly' => 'includes/media/Bitmap_ClientOnly.php',
- 'BitmapMetadataHandler' => 'includes/media/BitmapMetadataHandler.php',
- 'BmpHandler' => 'includes/media/BMP.php',
- 'DjVuHandler' => 'includes/media/DjVu.php',
- 'DjVuImage' => 'includes/media/DjVuImage.php',
- 'Exif' => 'includes/media/Exif.php',
- 'ExifBitmapHandler' => 'includes/media/ExifBitmap.php',
- 'FormatMetadata' => 'includes/media/FormatMetadata.php',
- 'GIFHandler' => 'includes/media/GIF.php',
- 'GIFMetadataExtractor' => 'includes/media/GIFMetadataExtractor.php',
- 'ImageHandler' => 'includes/media/ImageHandler.php',
- 'IPTC' => 'includes/media/IPTC.php',
- 'JpegHandler' => 'includes/media/Jpeg.php',
- 'JpegMetadataExtractor' => 'includes/media/JpegMetadataExtractor.php',
- 'MediaHandler' => 'includes/media/MediaHandler.php',
- 'MediaTransformError' => 'includes/media/MediaTransformOutput.php',
- 'MediaTransformOutput' => 'includes/media/MediaTransformOutput.php',
- 'PNGHandler' => 'includes/media/PNG.php',
- 'PNGMetadataExtractor' => 'includes/media/PNGMetadataExtractor.php',
- 'SvgHandler' => 'includes/media/SVG.php',
- 'SVGMetadataExtractor' => 'includes/media/SVGMetadataExtractor.php',
- 'SVGReader' => 'includes/media/SVGMetadataExtractor.php',
- 'ThumbnailImage' => 'includes/media/MediaTransformOutput.php',
- 'TiffHandler' => 'includes/media/Tiff.php',
- 'TransformationalImageHandler' => 'includes/media/TransformationalImageHandler.php',
- 'TransformParameterError' => 'includes/media/MediaTransformOutput.php',
- 'XCFHandler' => 'includes/media/XCF.php',
- 'XMPInfo' => 'includes/media/XMPInfo.php',
- 'XMPReader' => 'includes/media/XMP.php',
- 'XMPValidate' => 'includes/media/XMPValidate.php',
-
- # includes/normal
- 'UtfNormal' => 'includes/normal/UtfNormal.php',
-
- # includes/objectcache
- 'APCBagOStuff' => 'includes/objectcache/APCBagOStuff.php',
- 'BagOStuff' => 'includes/objectcache/BagOStuff.php',
- 'EmptyBagOStuff' => 'includes/objectcache/EmptyBagOStuff.php',
- 'HashBagOStuff' => 'includes/objectcache/HashBagOStuff.php',
- 'MediaWikiBagOStuff' => 'includes/objectcache/SqlBagOStuff.php',
- 'MemCachedClientforWiki' => 'includes/objectcache/MemcachedClient.php',
- 'MemcachedBagOStuff' => 'includes/objectcache/MemcachedBagOStuff.php',
- 'MemcachedPeclBagOStuff' => 'includes/objectcache/MemcachedPeclBagOStuff.php',
- 'MemcachedPhpBagOStuff' => 'includes/objectcache/MemcachedPhpBagOStuff.php',
- 'MultiWriteBagOStuff' => 'includes/objectcache/MultiWriteBagOStuff.php',
- 'MWMemcached' => 'includes/objectcache/MemcachedClient.php',
- 'ObjectCache' => 'includes/objectcache/ObjectCache.php',
- 'ObjectCacheSessionHandler' => 'includes/objectcache/ObjectCacheSessionHandler.php',
- 'RedisBagOStuff' => 'includes/objectcache/RedisBagOStuff.php',
- 'SqlBagOStuff' => 'includes/objectcache/SqlBagOStuff.php',
- 'WinCacheBagOStuff' => 'includes/objectcache/WinCacheBagOStuff.php',
- 'XCacheBagOStuff' => 'includes/objectcache/XCacheBagOStuff.php',
-
- # includes/page
- 'Article' => 'includes/page/Article.php',
- 'CategoryPage' => 'includes/page/CategoryPage.php',
- 'ImageHistoryList' => 'includes/page/ImagePage.php',
- 'ImageHistoryPseudoPager' => 'includes/page/ImagePage.php',
- 'ImagePage' => 'includes/page/ImagePage.php',
- 'Page' => 'includes/page/WikiPage.php',
- 'WikiCategoryPage' => 'includes/page/WikiCategoryPage.php',
- 'WikiFilePage' => 'includes/page/WikiFilePage.php',
- 'WikiPage' => 'includes/page/WikiPage.php',
-
- # includes/pager
- 'AlphabeticPager' => 'includes/pager/AlphabeticPager.php',
- 'IndexPager' => 'includes/pager/IndexPager.php',
- 'Pager' => 'includes/pager/Pager.php',
- 'ReverseChronologicalPager' => 'includes/pager/ReverseChronologicalPager.php',
- 'TablePager' => 'includes/pager/TablePager.php',
-
- # includes/parser
- 'CacheTime' => 'includes/parser/CacheTime.php',
- 'CoreParserFunctions' => 'includes/parser/CoreParserFunctions.php',
- 'CoreTagHooks' => 'includes/parser/CoreTagHooks.php',
- 'DateFormatter' => 'includes/parser/DateFormatter.php',
- 'LinkHolderArray' => 'includes/parser/LinkHolderArray.php',
- 'MWTidy' => 'includes/parser/MWTidy.php',
- 'MWTidyWrapper' => 'includes/parser/MWTidy.php',
- 'PPCustomFrame_DOM' => 'includes/parser/Preprocessor_DOM.php',
- 'PPCustomFrame_Hash' => 'includes/parser/Preprocessor_Hash.php',
- 'PPDAccum_Hash' => 'includes/parser/Preprocessor_Hash.php',
- 'PPDPart' => 'includes/parser/Preprocessor_DOM.php',
- 'PPDPart_Hash' => 'includes/parser/Preprocessor_Hash.php',
- 'PPDStack' => 'includes/parser/Preprocessor_DOM.php',
- 'PPDStackElement' => 'includes/parser/Preprocessor_DOM.php',
- 'PPDStackElement_Hash' => 'includes/parser/Preprocessor_Hash.php',
- 'PPDStack_Hash' => 'includes/parser/Preprocessor_Hash.php',
- 'PPFrame' => 'includes/parser/Preprocessor.php',
- 'PPFrame_DOM' => 'includes/parser/Preprocessor_DOM.php',
- 'PPFrame_Hash' => 'includes/parser/Preprocessor_Hash.php',
- 'PPNode' => 'includes/parser/Preprocessor.php',
- 'PPNode_DOM' => 'includes/parser/Preprocessor_DOM.php',
- 'PPNode_Hash_Array' => 'includes/parser/Preprocessor_Hash.php',
- 'PPNode_Hash_Attr' => 'includes/parser/Preprocessor_Hash.php',
- 'PPNode_Hash_Text' => 'includes/parser/Preprocessor_Hash.php',
- 'PPNode_Hash_Tree' => 'includes/parser/Preprocessor_Hash.php',
- 'PPTemplateFrame_DOM' => 'includes/parser/Preprocessor_DOM.php',
- 'PPTemplateFrame_Hash' => 'includes/parser/Preprocessor_Hash.php',
- 'Parser' => 'includes/parser/Parser.php',
- 'ParserCache' => 'includes/parser/ParserCache.php',
- 'ParserOptions' => 'includes/parser/ParserOptions.php',
- 'ParserOutput' => 'includes/parser/ParserOutput.php',
- 'ParserDiffTest' => 'includes/parser/ParserDiffTest.php',
- 'Preprocessor' => 'includes/parser/Preprocessor.php',
- 'Preprocessor_DOM' => 'includes/parser/Preprocessor_DOM.php',
- 'Preprocessor_Hash' => 'includes/parser/Preprocessor_Hash.php',
- 'StripState' => 'includes/parser/StripState.php',
-
- # includes/password
- 'BcryptPassword' => 'includes/password/BcryptPassword.php',
- 'InvalidPassword' => 'includes/password/InvalidPassword.php',
- 'LayeredParameterizedPassword' => 'includes/password/LayeredParameterizedPassword.php',
- 'MWSaltedPassword' => 'includes/password/MWSaltedPassword.php',
- 'MWOldPassword' => 'includes/password/MWOldPassword.php',
- 'ParameterizedPassword' => 'includes/password/ParameterizedPassword.php',
- 'Password' => 'includes/password/Password.php',
- 'PasswordError' => 'includes/password/PasswordError.php',
- 'PasswordFactory' => 'includes/password/PasswordFactory.php',
- 'Pbkdf2Password' => 'includes/password/Pbkdf2Password.php',
- 'EncryptedPassword' => 'includes/password/EncryptedPassword.php',
-
- # includes/profiler
- 'Profiler' => 'includes/profiler/Profiler.php',
- 'ProfilerMwprof' => 'includes/profiler/ProfilerMwprof.php',
- 'ProfilerSimpleDB' => 'includes/profiler/ProfilerSimpleDB.php',
- 'ProfilerSimpleText' => 'includes/profiler/ProfilerSimpleText.php',
- 'ProfilerSimpleTrace' => 'includes/profiler/ProfilerSimpleTrace.php',
- 'ProfilerSimpleUDP' => 'includes/profiler/ProfilerSimpleUDP.php',
- 'ProfilerStandard' => 'includes/profiler/ProfilerStandard.php',
- 'ProfilerStub' => 'includes/profiler/ProfilerStub.php',
- 'ProfileSection' => 'includes/profiler/Profiler.php',
- 'TransactionProfiler' => 'includes/profiler/Profiler.php',
-
- # includes/rcfeed
- 'RCFeedEngine' => 'includes/rcfeed/RCFeedEngine.php',
- 'RedisPubSubFeedEngine' => 'includes/rcfeed/RedisPubSubFeedEngine.php',
- 'UDPRCFeedEngine' => 'includes/rcfeed/UDPRCFeedEngine.php',
- 'RCFeedFormatter' => 'includes/rcfeed/RCFeedFormatter.php',
- 'IRCColourfulRCFeedFormatter' => 'includes/rcfeed/IRCColourfulRCFeedFormatter.php',
- 'JSONRCFeedFormatter' => 'includes/rcfeed/JSONRCFeedFormatter.php',
- 'XMLRCFeedFormatter' => 'includes/rcfeed/XMLRCFeedFormatter.php',
- 'MachineReadableRCFeedFormatter' => 'includes/rcfeed/MachineReadableRCFeedFormatter.php',
-
- # includes/resourceloader
- 'DerivativeResourceLoaderContext' =>
- 'includes/resourceloader/DerivativeResourceLoaderContext.php',
- 'ResourceLoader' => 'includes/resourceloader/ResourceLoader.php',
- 'ResourceLoaderContext' => 'includes/resourceloader/ResourceLoaderContext.php',
- 'ResourceLoaderEditToolbarModule' => 'includes/resourceloader/ResourceLoaderEditToolbarModule.php',
- 'ResourceLoaderFileModule' => 'includes/resourceloader/ResourceLoaderFileModule.php',
- 'ResourceLoaderFilePageModule' => 'includes/resourceloader/ResourceLoaderFilePageModule.php',
- 'ResourceLoaderFilePath' => 'includes/resourceloader/ResourceLoaderFilePath.php',
- 'ResourceLoaderModule' => 'includes/resourceloader/ResourceLoaderModule.php',
- 'ResourceLoaderNoscriptModule' => 'includes/resourceloader/ResourceLoaderNoscriptModule.php',
- 'ResourceLoaderSiteModule' => 'includes/resourceloader/ResourceLoaderSiteModule.php',
- 'ResourceLoaderStartUpModule' => 'includes/resourceloader/ResourceLoaderStartUpModule.php',
- 'ResourceLoaderUserCSSPrefsModule' =>
- 'includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php',
- 'ResourceLoaderUserGroupsModule' => 'includes/resourceloader/ResourceLoaderUserGroupsModule.php',
- 'ResourceLoaderUserModule' => 'includes/resourceloader/ResourceLoaderUserModule.php',
- 'ResourceLoaderUserOptionsModule' => 'includes/resourceloader/ResourceLoaderUserOptionsModule.php',
- 'ResourceLoaderUserTokensModule' => 'includes/resourceloader/ResourceLoaderUserTokensModule.php',
- 'ResourceLoaderLanguageDataModule' =>
- 'includes/resourceloader/ResourceLoaderLanguageDataModule.php',
- 'ResourceLoaderLanguageNamesModule' =>
- 'includes/resourceloader/ResourceLoaderLanguageNamesModule.php',
- 'ResourceLoaderWikiModule' => 'includes/resourceloader/ResourceLoaderWikiModule.php',
-
- # includes/revisiondelete
- 'RevDelArchivedFileItem' => 'includes/revisiondelete/RevDelArchivedFileItem.php',
- 'RevDelArchivedFileList' => 'includes/revisiondelete/RevDelArchivedFileList.php',
- 'RevDelArchivedRevisionItem' => 'includes/revisiondelete/RevDelArchivedRevisionItem.php',
- 'RevDelArchiveItem' => 'includes/revisiondelete/RevDelArchiveItem.php',
- 'RevDelArchiveList' => 'includes/revisiondelete/RevDelArchiveList.php',
- 'RevDelFileItem' => 'includes/revisiondelete/RevDelFileItem.php',
- 'RevDelFileList' => 'includes/revisiondelete/RevDelFileList.php',
- 'RevDelItem' => 'includes/revisiondelete/RevDelItem.php',
- 'RevDelList' => 'includes/revisiondelete/RevDelList.php',
- 'RevDelLogItem' => 'includes/revisiondelete/RevDelLogItem.php',
- 'RevDelLogList' => 'includes/revisiondelete/RevDelLogList.php',
- 'RevDelRevisionItem' => 'includes/revisiondelete/RevDelRevisionItem.php',
- 'RevDelRevisionList' => 'includes/revisiondelete/RevDelRevisionList.php',
- 'RevisionDeleter' => 'includes/revisiondelete/RevisionDeleter.php',
- 'RevisionDeleteUser' => 'includes/revisiondelete/RevisionDeleteUser.php',
-
- # includes/search
- 'SearchDatabase' => 'includes/search/SearchDatabase.php',
- 'SearchEngine' => 'includes/search/SearchEngine.php',
- 'SearchEngineDummy' => 'includes/search/SearchEngine.php',
- 'SearchHighlighter' => 'includes/search/SearchHighlighter.php',
- 'SearchMssql' => 'includes/search/SearchMssql.php',
- 'SearchMySQL' => 'includes/search/SearchMySQL.php',
- 'SearchNearMatchResultSet' => 'includes/search/SearchResultSet.php',
- 'SearchOracle' => 'includes/search/SearchOracle.php',
- 'SearchPostgres' => 'includes/search/SearchPostgres.php',
- 'SearchResult' => 'includes/search/SearchResult.php',
- 'SearchResultSet' => 'includes/search/SearchResultSet.php',
- 'SearchSqlite' => 'includes/search/SearchSqlite.php',
- 'SqlSearchResultSet' => 'includes/search/SearchResultSet.php',
-
- # includes/site
- 'MediaWikiSite' => 'includes/site/MediaWikiSite.php',
- 'Site' => 'includes/site/Site.php',
- 'SiteObject' => 'includes/site/Site.php',
- 'SiteArray' => 'includes/site/SiteList.php',
- 'SiteList' => 'includes/site/SiteList.php',
- 'SiteSQLStore' => 'includes/site/SiteSQLStore.php',
- 'Sites' => 'includes/site/SiteSQLStore.php',
- 'SiteStore' => 'includes/site/SiteStore.php',
-
- # includes/skins
- 'BaseTemplate' => 'includes/skins/SkinTemplate.php',
- 'MediaWikiI18N' => 'includes/skins/SkinTemplate.php',
- 'QuickTemplate' => 'includes/skins/SkinTemplate.php',
- 'Skin' => 'includes/skins/Skin.php',
- 'SkinException' => 'includes/skins/SkinException.php',
- 'SkinFactory' => 'includes/skins/SkinFactory.php',
- 'SkinFallback' => 'includes/skins/SkinFallback.php',
- 'SkinFallbackTemplate' => 'includes/skins/SkinFallbackTemplate.php',
- 'SkinTemplate' => 'includes/skins/SkinTemplate.php',
-
- # includes/specialpage
- 'ChangesListSpecialPage' => 'includes/specialpage/ChangesListSpecialPage.php',
- 'FormSpecialPage' => 'includes/specialpage/FormSpecialPage.php',
- 'ImageQueryPage' => 'includes/specialpage/ImageQueryPage.php',
- 'IncludableSpecialPage' => 'includes/specialpage/IncludableSpecialPage.php',
- 'PageQueryPage' => 'includes/specialpage/PageQueryPage.php',
- 'QueryPage' => 'includes/specialpage/QueryPage.php',
- 'RedirectSpecialArticle' => 'includes/specialpage/RedirectSpecialPage.php',
- 'RedirectSpecialPage' => 'includes/specialpage/RedirectSpecialPage.php',
- 'SpecialPage' => 'includes/specialpage/SpecialPage.php',
- 'SpecialPageFactory' => 'includes/specialpage/SpecialPageFactory.php',
- 'SpecialRedirectToSpecial' => 'includes/specialpage/RedirectSpecialPage.php',
- 'UnlistedSpecialPage' => 'includes/specialpage/UnlistedSpecialPage.php',
- 'WantedQueryPage' => 'includes/specialpage/WantedQueryPage.php',
-
- # includes/specials
- 'ActiveUsersPager' => 'includes/specials/SpecialActiveusers.php',
- 'AllMessagesTablePager' => 'includes/specials/SpecialAllMessages.php',
- 'AncientPagesPage' => 'includes/specials/SpecialAncientpages.php',
- 'BlockListPager' => 'includes/specials/SpecialBlockList.php',
- 'BrokenRedirectsPage' => 'includes/specials/SpecialBrokenRedirects.php',
- 'CategoryPager' => 'includes/specials/SpecialCategories.php',
- 'ContribsPager' => 'includes/specials/SpecialContributions.php',
- 'DeadendPagesPage' => 'includes/specials/SpecialDeadendpages.php',
- 'DeletedContribsPager' => 'includes/specials/SpecialDeletedContributions.php',
- 'DeletedContributionsPage' => 'includes/specials/SpecialDeletedContributions.php',
- 'DoubleRedirectsPage' => 'includes/specials/SpecialDoubleRedirects.php',
- 'EditWatchlistCheckboxSeriesField' => 'includes/specials/SpecialEditWatchlist.php',
- 'EditWatchlistNormalHTMLForm' => 'includes/specials/SpecialEditWatchlist.php',
- 'EmailConfirmation' => 'includes/specials/SpecialConfirmemail.php',
- 'EmailInvalidation' => 'includes/specials/SpecialConfirmemail.php',
- 'FewestrevisionsPage' => 'includes/specials/SpecialFewestrevisions.php',
- 'FileDuplicateSearchPage' => 'includes/specials/SpecialFileDuplicateSearch.php',
- 'ImageListPager' => 'includes/specials/SpecialListfiles.php',
- 'ImportReporter' => 'includes/specials/SpecialImport.php',
- 'LinkSearchPage' => 'includes/specials/SpecialLinkSearch.php',
- 'ListredirectsPage' => 'includes/specials/SpecialListredirects.php',
- 'ListDuplicatedFilesPage' => 'includes/specials/SpecialListDuplicatedFiles.php',
- 'LoginForm' => 'includes/specials/SpecialUserlogin.php',
- 'LonelyPagesPage' => 'includes/specials/SpecialLonelypages.php',
- 'LongPagesPage' => 'includes/specials/SpecialLongpages.php',
- 'MediaStatisticsPage' => 'includes/specials/SpecialMediaStatistics.php',
- 'MergeHistoryPager' => 'includes/specials/SpecialMergeHistory.php',
- 'MIMEsearchPage' => 'includes/specials/SpecialMIMEsearch.php',
- 'MostcategoriesPage' => 'includes/specials/SpecialMostcategories.php',
- 'MostimagesPage' => 'includes/specials/SpecialMostimages.php',
- 'MostinterwikisPage' => 'includes/specials/SpecialMostinterwikis.php',
- 'MostlinkedCategoriesPage' => 'includes/specials/SpecialMostlinkedcategories.php',
- 'MostlinkedPage' => 'includes/specials/SpecialMostlinked.php',
- 'MostlinkedTemplatesPage' => 'includes/specials/SpecialMostlinkedtemplates.php',
- 'MostrevisionsPage' => 'includes/specials/SpecialMostrevisions.php',
- 'MovePageForm' => 'includes/specials/SpecialMovepage.php',
- 'NewFilesPager' => 'includes/specials/SpecialNewimages.php',
- 'NewPagesPager' => 'includes/specials/SpecialNewpages.php',
- 'PageArchive' => 'includes/specials/SpecialUndelete.php',
- 'PopularPagesPage' => 'includes/specials/SpecialPopularpages.php',
- 'ProtectedPagesPager' => 'includes/specials/SpecialProtectedpages.php',
- 'ProtectedTitlesPager' => 'includes/specials/SpecialProtectedtitles.php',
- 'RandomPage' => 'includes/specials/SpecialRandompage.php',
- 'ShortPagesPage' => 'includes/specials/SpecialShortpages.php',
- 'SpecialActiveUsers' => 'includes/specials/SpecialActiveusers.php',
- 'SpecialAllMessages' => 'includes/specials/SpecialAllMessages.php',
- 'SpecialAllMyUploads' => 'includes/specials/SpecialMyRedirectPages.php',
- 'SpecialAllPages' => 'includes/specials/SpecialAllPages.php',
- 'SpecialBlankpage' => 'includes/specials/SpecialBlankpage.php',
- 'SpecialBlock' => 'includes/specials/SpecialBlock.php',
- 'SpecialBlockList' => 'includes/specials/SpecialBlockList.php',
- 'SpecialBookSources' => 'includes/specials/SpecialBooksources.php',
- 'SpecialCachedPage' => 'includes/specials/SpecialCachedPage.php',
- 'SpecialCategories' => 'includes/specials/SpecialCategories.php',
- 'SpecialChangeEmail' => 'includes/specials/SpecialChangeEmail.php',
- 'SpecialChangePassword' => 'includes/specials/SpecialChangePassword.php',
- 'SpecialComparePages' => 'includes/specials/SpecialComparePages.php',
- 'SpecialContributions' => 'includes/specials/SpecialContributions.php',
- 'SpecialCreateAccount' => 'includes/specials/SpecialCreateAccount.php',
- 'SpecialDiff' => 'includes/specials/SpecialDiff.php',
- 'SpecialEditWatchlist' => 'includes/specials/SpecialEditWatchlist.php',
- 'SpecialEmailUser' => 'includes/specials/SpecialEmailuser.php',
- 'SpecialExpandTemplates' => 'includes/specials/SpecialExpandTemplates.php',
- 'SpecialExport' => 'includes/specials/SpecialExport.php',
- 'SpecialFilepath' => 'includes/specials/SpecialFilepath.php',
- 'SpecialImport' => 'includes/specials/SpecialImport.php',
- 'SpecialJavaScriptTest' => 'includes/specials/SpecialJavaScriptTest.php',
- 'SpecialListAdmins' => 'includes/specials/SpecialListusers.php',
- 'SpecialListBots' => 'includes/specials/SpecialListusers.php',
- 'SpecialListFiles' => 'includes/specials/SpecialListfiles.php',
- 'SpecialListGroupRights' => 'includes/specials/SpecialListgrouprights.php',
- 'SpecialListUsers' => 'includes/specials/SpecialListusers.php',
- 'SpecialLockdb' => 'includes/specials/SpecialLockdb.php',
- 'SpecialLog' => 'includes/specials/SpecialLog.php',
- 'SpecialMergeHistory' => 'includes/specials/SpecialMergeHistory.php',
- 'SpecialMycontributions' => 'includes/specials/SpecialMyRedirectPages.php',
- 'SpecialMyLanguage' => 'includes/specials/SpecialMyLanguage.php',
- 'SpecialMypage' => 'includes/specials/SpecialMyRedirectPages.php',
- 'SpecialMytalk' => 'includes/specials/SpecialMyRedirectPages.php',
- 'SpecialMyuploads' => 'includes/specials/SpecialMyRedirectPages.php',
- 'SpecialNewFiles' => 'includes/specials/SpecialNewimages.php',
- 'SpecialNewpages' => 'includes/specials/SpecialNewpages.php',
- 'SpecialPageLanguage' => 'includes/specials/SpecialPageLanguage.php',
- 'SpecialPasswordReset' => 'includes/specials/SpecialPasswordReset.php',
- 'SpecialPagesWithProp' => 'includes/specials/SpecialPagesWithProp.php',
- 'SpecialPermanentLink' => 'includes/specials/SpecialPermanentLink.php',
- 'SpecialPreferences' => 'includes/specials/SpecialPreferences.php',
- 'SpecialPrefixindex' => 'includes/specials/SpecialPrefixindex.php',
- 'SpecialProtectedpages' => 'includes/specials/SpecialProtectedpages.php',
- 'SpecialProtectedtitles' => 'includes/specials/SpecialProtectedtitles.php',
- 'SpecialRandomInCategory' => 'includes/specials/SpecialRandomInCategory.php',
- 'SpecialRandomredirect' => 'includes/specials/SpecialRandomredirect.php',
- 'SpecialRecentChanges' => 'includes/specials/SpecialRecentchanges.php',
- 'SpecialRecentChangesLinked' => 'includes/specials/SpecialRecentchangeslinked.php',
- 'SpecialRedirect' => 'includes/specials/SpecialRedirect.php',
- 'SpecialResetTokens' => 'includes/specials/SpecialResetTokens.php',
- 'SpecialRevisionDelete' => 'includes/specials/SpecialRevisiondelete.php',
- 'SpecialRunJobs' => 'includes/specials/SpecialRunJobs.php',
- 'SpecialSearch' => 'includes/specials/SpecialSearch.php',
- 'SpecialSpecialpages' => 'includes/specials/SpecialSpecialpages.php',
- 'SpecialStatistics' => 'includes/specials/SpecialStatistics.php',
- 'SpecialTags' => 'includes/specials/SpecialTags.php',
- 'SpecialTrackingCategories' => 'includes/specials/SpecialTrackingCategories.php',
- 'SpecialUnblock' => 'includes/specials/SpecialUnblock.php',
- 'SpecialUndelete' => 'includes/specials/SpecialUndelete.php',
- 'SpecialUnlockdb' => 'includes/specials/SpecialUnlockdb.php',
- 'SpecialUpload' => 'includes/specials/SpecialUpload.php',
- 'SpecialUploadStash' => 'includes/specials/SpecialUploadStash.php',
- 'SpecialUploadStashTooLargeException' => 'includes/specials/SpecialUploadStash.php',
- 'SpecialUserlogout' => 'includes/specials/SpecialUserlogout.php',
- 'SpecialVersion' => 'includes/specials/SpecialVersion.php',
- 'SpecialWatchlist' => 'includes/specials/SpecialWatchlist.php',
- 'SpecialWhatLinksHere' => 'includes/specials/SpecialWhatlinkshere.php',
- 'UncategorizedCategoriesPage' => 'includes/specials/SpecialUncategorizedcategories.php',
- 'UncategorizedImagesPage' => 'includes/specials/SpecialUncategorizedimages.php',
- 'UncategorizedPagesPage' => 'includes/specials/SpecialUncategorizedpages.php',
- 'UncategorizedTemplatesPage' => 'includes/specials/SpecialUncategorizedtemplates.php',
- 'UnusedCategoriesPage' => 'includes/specials/SpecialUnusedcategories.php',
- 'UnusedimagesPage' => 'includes/specials/SpecialUnusedimages.php',
- 'UnusedtemplatesPage' => 'includes/specials/SpecialUnusedtemplates.php',
- 'UnwatchedpagesPage' => 'includes/specials/SpecialUnwatchedpages.php',
- 'UploadChunkFileException' => 'includes/upload/UploadFromChunks.php',
- 'UploadChunkZeroLengthFileException' => 'includes/upload/UploadFromChunks.php',
- 'UploadChunkVerificationException' => 'includes/upload/UploadFromChunks.php',
- 'UploadForm' => 'includes/specials/SpecialUpload.php',
- 'UploadSourceField' => 'includes/specials/SpecialUpload.php',
- 'UserrightsPage' => 'includes/specials/SpecialUserrights.php',
- 'UsersPager' => 'includes/specials/SpecialListusers.php',
- 'WantedCategoriesPage' => 'includes/specials/SpecialWantedcategories.php',
- 'WantedFilesPage' => 'includes/specials/SpecialWantedfiles.php',
- 'WantedPagesPage' => 'includes/specials/SpecialWantedpages.php',
- 'WantedTemplatesPage' => 'includes/specials/SpecialWantedtemplates.php',
- 'WithoutInterwikiPage' => 'includes/specials/SpecialWithoutinterwiki.php',
-
- # includes/templates
- 'UserloginTemplate' => 'includes/templates/Userlogin.php',
- 'UsercreateTemplate' => 'includes/templates/Usercreate.php',
-
- # includes/title
- 'PageLinkRenderer' => 'includes/title/PageLinkRenderer.php',
- 'TitleFormatter' => 'includes/title/TitleFormatter.php',
- 'TitleParser' => 'includes/title/TitleParser.php',
- 'TitleValue' => 'includes/title/TitleValue.php',
- 'MalformedTitleException' => 'includes/title/MalformedTitleException.php',
- 'MediaWikiPageLinkRenderer' => 'includes/title/MediaWikiPageLinkRenderer.php',
- 'MediaWikiTitleCodec' => 'includes/title/MediaWikiTitleCodec.php',
-
- # includes/upload
- 'UploadBase' => 'includes/upload/UploadBase.php',
- 'UploadFromFile' => 'includes/upload/UploadFromFile.php',
- 'UploadFromChunks' => 'includes/upload/UploadFromChunks.php',
- 'UploadFromStash' => 'includes/upload/UploadFromStash.php',
- 'UploadFromUrl' => 'includes/upload/UploadFromUrl.php',
- 'UploadStash' => 'includes/upload/UploadStash.php',
- 'UploadStashBadPathException' => 'includes/upload/UploadStash.php',
- 'UploadStashException' => 'includes/upload/UploadStash.php',
- 'UploadStashFile' => 'includes/upload/UploadStash.php',
- 'UploadStashFileException' => 'includes/upload/UploadStash.php',
- 'UploadStashFileNotFoundException' => 'includes/upload/UploadStash.php',
- 'UploadStashNotAvailableException' => 'includes/upload/UploadStash.php',
- 'UploadStashZeroLengthFileException' => 'includes/upload/UploadStash.php',
- 'UploadStashNotLoggedInException' => 'includes/upload/UploadStash.php',
- 'UploadStashWrongOwnerException' => 'includes/upload/UploadStash.php',
- 'UploadStashNoSuchKeyException' => 'includes/upload/UploadStash.php',
-
- # includes/utils
- 'ArrayUtils' => 'includes/utils/ArrayUtils.php',
- 'CdbException' => 'includes/utils/Cdb.php',
- 'CdbFunctions' => 'includes/utils/CdbPHP.php',
- 'CdbReader' => 'includes/utils/Cdb.php',
- 'CdbReaderDBA' => 'includes/utils/CdbDBA.php',
- 'CdbReaderPHP' => 'includes/utils/CdbPHP.php',
- 'CdbWriter' => 'includes/utils/Cdb.php',
- 'CdbWriterDBA' => 'includes/utils/CdbDBA.php',
- 'CdbWriterPHP' => 'includes/utils/CdbPHP.php',
- 'DoubleReplacer' => 'includes/utils/StringUtils.php',
- 'ExplodeIterator' => 'includes/utils/StringUtils.php',
- 'HashtableReplacer' => 'includes/utils/StringUtils.php',
- 'IP' => 'includes/utils/IP.php',
- 'MWCryptRand' => 'includes/utils/MWCryptRand.php',
- 'MWCryptHKDF' => 'includes/utils/MWCryptHKDF.php',
- 'MWFunction' => 'includes/utils/MWFunction.php',
- 'RegexlikeReplacer' => 'includes/utils/StringUtils.php',
- 'ReplacementArray' => 'includes/utils/StringUtils.php',
- 'Replacer' => 'includes/utils/StringUtils.php',
- 'StringUtils' => 'includes/utils/StringUtils.php',
- 'UIDGenerator' => 'includes/utils/UIDGenerator.php',
- 'ZipDirectoryReader' => 'includes/utils/ZipDirectoryReader.php',
- 'ZipDirectoryReaderError' => 'includes/utils/ZipDirectoryReader.php',
-
- # languages
- 'ConverterRule' => 'languages/ConverterRule.php',
- 'FakeConverter' => 'languages/FakeConverter.php',
- 'Language' => 'languages/Language.php',
- 'LanguageConverter' => 'languages/LanguageConverter.php',
- 'CLDRPluralRuleConverter' => 'languages/utils/CLDRPluralRuleConverter.php',
- 'CLDRPluralRuleConverterExpression' => 'languages/utils/CLDRPluralRuleConverterExpression.php',
- 'CLDRPluralRuleConverterFragment' => 'languages/utils/CLDRPluralRuleConverterFragment.php',
- 'CLDRPluralRuleConverterOperator' => 'languages/utils/CLDRPluralRuleConverterOperator.php',
- 'CLDRPluralRuleEvaluator' => 'languages/utils/CLDRPluralRuleEvaluator.php',
- 'CLDRPluralRuleEvaluatorRange' => 'languages/utils/CLDRPluralRuleEvaluatorRange.php',
- 'CLDRPluralRuleError' => 'languages/utils/CLDRPluralRuleError.php',
-
- # maintenance
- 'BackupDumper' => 'maintenance/backup.inc',
- 'ConvertLinks' => 'maintenance/convertLinks.php',
- 'DeleteArchivedFilesImplementation' => 'maintenance/deleteArchivedFiles.inc',
- 'DeleteArchivedRevisionsImplementation' => 'maintenance/deleteArchivedRevisions.inc',
- 'DeleteDefaultMessages' => 'maintenance/deleteDefaultMessages.php',
- 'DumpDBZip2Output' => 'maintenance/backup.inc',
- 'ExportProgressFilter' => 'maintenance/backup.inc',
- 'FakeMaintenance' => 'maintenance/Maintenance.php',
- 'FixExtLinksProtocolRelative' => 'maintenance/fixExtLinksProtocolRelative.php',
- 'LoggedUpdateMaintenance' => 'maintenance/Maintenance.php',
- 'Maintenance' => 'maintenance/Maintenance.php',
- 'PopulateBacklinkNamespace' => 'maintenance/populateBacklinkNamespace.php',
- 'PopulateCategory' => 'maintenance/populateCategory.php',
- 'PopulateImageSha1' => 'maintenance/populateImageSha1.php',
- 'PopulateFilearchiveSha1' => 'maintenance/populateFilearchiveSha1.php',
- 'PopulateLogSearch' => 'maintenance/populateLogSearch.php',
- 'PopulateLogUsertext' => 'maintenance/populateLogUsertext.php',
- 'PopulateParentId' => 'maintenance/populateParentId.php',
- 'PopulateRevisionLength' => 'maintenance/populateRevisionLength.php',
- 'PopulateRevisionSha1' => 'maintenance/populateRevisionSha1.php',
- 'RefreshLinks' => 'maintenance/refreshLinks.php',
- 'SevenZipStream' => 'maintenance/7zip.inc',
- 'Sqlite' => 'maintenance/sqlite.inc',
- 'UpdateCollation' => 'maintenance/updateCollation.php',
- 'UpdateRestrictions' => 'maintenance/updateRestrictions.php',
- 'UserDupes' => 'maintenance/userDupes.inc',
-
- # maintenance/language
- 'CsvStatsOutput' => 'maintenance/language/StatOutputs.php',
- 'ExtensionLanguages' => 'maintenance/language/languages.inc',
- 'Languages' => 'maintenance/language/languages.inc',
- 'StatsOutput' => 'maintenance/language/StatOutputs.php',
- 'TextStatsOutput' => 'maintenance/language/StatOutputs.php',
- 'WikiStatsOutput' => 'maintenance/language/StatOutputs.php',
-
- # maintenance/term
- 'AnsiTermColorer' => 'maintenance/term/MWTerm.php',
- 'DummyTermColorer' => 'maintenance/term/MWTerm.php',
-
- # mw-config
- 'InstallerOverrides' => 'mw-config/overrides.php',
- 'MyLocalSettingsGenerator' => 'mw-config/overrides.php',
-);
+require_once __DIR__ . '/../autoload.php';
class AutoLoader {
static protected $autoloadLocalClassesLower = null;
diff --git a/includes/Autopromote.php b/includes/Autopromote.php
index 81f3b7aa..d492d196 100644
--- a/includes/Autopromote.php
+++ b/includes/Autopromote.php
@@ -43,7 +43,7 @@ class Autopromote {
}
}
- wfRunHooks( 'GetAutoPromoteGroups', array( $user, &$promote ) );
+ Hooks::run( 'GetAutoPromoteGroups', array( $user, &$promote ) );
return $promote;
}
@@ -197,7 +197,7 @@ class Autopromote {
return in_array( 'bot', User::getGroupPermissions( $user->getGroups() ) );
default:
$result = null;
- wfRunHooks( 'AutopromoteCondition', array( $cond[0],
+ Hooks::run( 'AutopromoteCondition', array( $cond[0],
array_slice( $cond, 1 ), $user, &$result ) );
if ( $result === null ) {
throw new MWException( "Unrecognized condition {$cond[0]} for autopromotion!" );
diff --git a/includes/Block.php b/includes/Block.php
index 6a29a056..873a26d8 100644
--- a/includes/Block.php
+++ b/includes/Block.php
@@ -113,7 +113,7 @@ class Block {
$this->forcedTargetID = $user; // needed for foreign users
}
if ( $by ) { // local user
- $this->setBlocker( User::newFromID( $by ) );
+ $this->setBlocker( User::newFromId( $by ) );
} else { // foreign user
$this->setBlocker( $byText );
}
@@ -366,7 +366,7 @@ class Block {
protected function initFromRow( $row ) {
$this->setTarget( $row->ipb_address );
if ( $row->ipb_by ) { // local user
- $this->setBlocker( User::newFromID( $row->ipb_by ) );
+ $this->setBlocker( User::newFromId( $row->ipb_by ) );
} else { // foreign user
$this->setBlocker( $row->ipb_by_text );
}
@@ -442,19 +442,33 @@ class Block {
$dbw = wfGetDB( DB_MASTER );
}
- # Don't collide with expired blocks
- Block::purgeExpired();
+ # Periodic purge via commit hooks
+ if ( mt_rand( 0, 9 ) == 0 ) {
+ Block::purgeExpired();
+ }
$row = $this->getDatabaseArray();
$row['ipb_id'] = $dbw->nextSequenceValue( "ipblocks_ipb_id_seq" );
- $dbw->insert(
- 'ipblocks',
- $row,
- __METHOD__,
- array( 'IGNORE' )
- );
+ $dbw->insert( 'ipblocks', $row, __METHOD__, array( 'IGNORE' ) );
$affected = $dbw->affectedRows();
+
+ # Don't collide with expired blocks.
+ # Do this after trying to insert to avoid pointless gap locks.
+ if ( !$affected ) {
+ $dbw->delete( 'ipblocks',
+ array(
+ 'ipb_address' => $row['ipb_address'],
+ 'ipb_user' => $row['ipb_user'],
+ 'ipb_expiry < ' . $dbw->addQuotes( $dbw->timestamp() )
+ ),
+ __METHOD__
+ );
+
+ $dbw->insert( 'ipblocks', $row, __METHOD__, array( 'IGNORE' ) );
+ $affected = $dbw->affectedRows();
+ }
+
$this->mId = $dbw->insertId();
if ( $affected ) {
@@ -580,7 +594,7 @@ class Block {
if ( $this->isAutoblocking() && $this->getType() == self::TYPE_USER ) {
wfDebug( "Doing retroactive autoblocks for " . $this->getTarget() . "\n" );
- $continue = wfRunHooks(
+ $continue = Hooks::run(
'PerformRetroactiveAutoblock', array( $this, &$blockIds ) );
if ( $continue ) {
@@ -693,7 +707,7 @@ class Block {
}
# Allow hooks to cancel the autoblock.
- if ( !wfRunHooks( 'AbortAutoblock', array( $autoblockIP, &$this ) ) ) {
+ if ( !Hooks::run( 'AbortAutoblock', array( $autoblockIP, &$this ) ) ) {
wfDebug( "Autoblock aborted by hook.\n" );
return false;
}
@@ -752,7 +766,6 @@ class Block {
* @return bool
*/
public function deleteIfExpired() {
- wfProfileIn( __METHOD__ );
if ( $this->isExpired() ) {
wfDebug( "Block::deleteIfExpired() -- deleting\n" );
@@ -763,7 +776,6 @@ class Block {
$retVal = false;
}
- wfProfileOut( __METHOD__ );
return $retVal;
}
@@ -885,7 +897,7 @@ class Block {
/**
* Get/set a flag determining whether the master is used for reads
*
- * @param bool $x
+ * @param bool|null $x
* @return bool
*/
public function fromMaster( $x = null ) {
@@ -893,8 +905,8 @@ class Block {
}
/**
- * Get/set whether the Block is a hardblock (affects logged-in users on a given IP/range
- * @param bool $x
+ * Get/set whether the Block is a hardblock (affects logged-in users on a given IP/range)
+ * @param bool|null $x
* @return bool
*/
public function isHardblock( $x = null ) {
@@ -906,6 +918,10 @@ class Block {
: $this->isHardblock;
}
+ /**
+ * @param null|bool $x
+ * @return bool
+ */
public function isAutoblocking( $x = null ) {
wfSetVar( $this->isAutoblocking, $x );
@@ -919,7 +935,7 @@ class Block {
/**
* Get/set whether the Block prevents a given action
* @param string $action
- * @param bool $x
+ * @param bool|null $x
* @return bool
*/
public function prevents( $action, $x = null ) {
@@ -1051,7 +1067,6 @@ class Block {
return array();
}
- wfProfileIn( __METHOD__ );
$conds = array();
foreach ( array_unique( $ipChain ) as $ipaddr ) {
# Discard invalid IP addresses. Since XFF can be spoofed and we do not
@@ -1073,7 +1088,6 @@ class Block {
}
if ( !count( $conds ) ) {
- wfProfileOut( __METHOD__ );
return array();
}
@@ -1104,12 +1118,12 @@ class Block {
}
}
- wfProfileOut( __METHOD__ );
return $blocks;
}
/**
* From a list of multiple blocks, find the most exact and strongest Block.
+ *
* The logic for finding the "best" block is:
* - Blocks that match the block's target IP are preferred over ones in a range
* - Hardblocks are chosen over softblocks that prevent account creation
@@ -1117,12 +1131,15 @@ class Block {
* - Other softblocks are chosen over autoblocks
* - If there are multiple exact or range blocks at the same level, the one chosen
* is random
+ * This should be used when $blocks where retrieved from the user's IP address
+ * and $ipChain is populated from the same IP address information.
*
- * @param array $blocks Array of blocks
+ * @param array $blocks Array of Block objects
* @param array $ipChain List of IPs (strings). This is used to determine how "close"
* a block is to the server, and if a block matches exactly, or is in a range.
* The order is furthest from the server to nearest e.g., (Browser, proxy1, proxy2,
* local-squid, ...)
+ * @throws MWException
* @return Block|null The "best" block from the list
*/
public static function chooseBlock( array $blocks, array $ipChain ) {
@@ -1132,8 +1149,6 @@ class Block {
return $blocks[0];
}
- wfProfileIn( __METHOD__ );
-
// Sort hard blocks before soft ones and secondarily sort blocks
// that disable account creation before those that don't.
usort( $blocks, function ( Block $a, Block $b ) {
@@ -1156,6 +1171,7 @@ class Block {
);
$ipChain = array_reverse( $ipChain );
+ /** @var Block $block */
foreach ( $blocks as $block ) {
// Stop searching if we have already have a "better" block. This
// is why the order of the blocks matters
@@ -1213,11 +1229,9 @@ class Block {
} elseif ( $blocksList['auto'] ) {
$chosenBlock = $blocksList['auto'];
} else {
- wfProfileOut( __METHOD__ );
throw new MWException( "Proxy block found, but couldn't be classified." );
}
- wfProfileOut( __METHOD__ );
return $chosenBlock;
}
diff --git a/includes/Category.php b/includes/Category.php
index 322b0530..3a21e256 100644
--- a/includes/Category.php
+++ b/includes/Category.php
@@ -60,8 +60,6 @@ class Category {
return true;
}
- wfProfileIn( __METHOD__ );
-
$dbr = wfGetDB( DB_SLAVE );
$row = $dbr->selectRow(
'category',
@@ -70,8 +68,6 @@ class Category {
__METHOD__
);
- wfProfileOut( __METHOD__ );
-
if ( !$row ) {
# Okay, there were no contents. Nothing to initialize.
if ( $this->mTitle ) {
@@ -258,7 +254,6 @@ class Category {
* @return TitleArray TitleArray object for category members.
*/
public function getMembers( $limit = false, $offset = '' ) {
- wfProfileIn( __METHOD__ );
$dbr = wfGetDB( DB_SLAVE );
@@ -284,8 +279,6 @@ class Category {
)
);
- wfProfileOut( __METHOD__ );
-
return $result;
}
@@ -318,8 +311,6 @@ class Category {
}
}
- wfProfileIn( __METHOD__ );
-
$dbw = wfGetDB( DB_MASTER );
$dbw->startAtomic( __METHOD__ );
@@ -363,8 +354,6 @@ class Category {
);
$dbw->endAtomic( __METHOD__ );
- wfProfileOut( __METHOD__ );
-
# Now we should update our local counts.
$this->mPages = $result->pages;
$this->mSubcats = $result->subcats;
diff --git a/includes/CategoryFinder.php b/includes/CategoryFinder.php
index cf537e15..33de7404 100644
--- a/includes/CategoryFinder.php
+++ b/includes/CategoryFinder.php
@@ -185,7 +185,6 @@ class CategoryFinder {
* Scans a "parent layer" of the articles/categories in $this->next
*/
private function scanNextLayer() {
- $profiler = new ProfileSection( __METHOD__ );
# Find all parents of the article currently in $this->next
$layer = array();
diff --git a/includes/CategoryViewer.php b/includes/CategoryViewer.php
index 7581ae40..66079c01 100644
--- a/includes/CategoryViewer.php
+++ b/includes/CategoryViewer.php
@@ -89,6 +89,9 @@ class CategoryViewer extends ContextSource {
) {
$this->title = $title;
$this->setContext( $context );
+ $this->getOutput()->addModuleStyles( array(
+ 'mediawiki.action.view.categoryPage.styles'
+ ) );
$this->from = $from;
$this->until = $until;
$this->limit = $context->getConfig()->get( 'CategoryPagingLimit' );
@@ -104,7 +107,6 @@ class CategoryViewer extends ContextSource {
* @return string HTML output
*/
public function getHTML() {
- wfProfileIn( __METHOD__ );
$this->showGallery = $this->getConfig()->get( 'CategoryMagicGallery' )
&& !$this->getOutput()->mNoGallery;
@@ -136,11 +138,10 @@ class CategoryViewer extends ContextSource {
}
$lang = $this->getLanguage();
- $langAttribs = array( 'lang' => $lang->getCode(), 'dir' => $lang->getDir() );
+ $langAttribs = array( 'lang' => $lang->getHtmlCode(), 'dir' => $lang->getDir() );
# put a div around the headings which are in the user language
$r = Html::openElement( 'div', $langAttribs ) . $r . '</div>';
- wfProfileOut( __METHOD__ );
return $r;
}
@@ -154,7 +155,7 @@ class CategoryViewer extends ContextSource {
$mode = $this->getRequest()->getVal( 'gallerymode', null );
try {
$this->gallery = ImageGalleryBase::factory( $mode, $this->getContext() );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// User specified something invalid, fallback to default.
$this->gallery = ImageGalleryBase::factory( false, $this->getContext() );
}
@@ -176,19 +177,30 @@ class CategoryViewer extends ContextSource {
// Subcategory; strip the 'Category' namespace from the link text.
$title = $cat->getTitle();
- $link = Linker::link( $title, htmlspecialchars( $title->getText() ) );
- if ( $title->isRedirect() ) {
- // This didn't used to add redirect-in-category, but might
- // as well be consistent with the rest of the sections
- // on a category page.
- $link = '<span class="redirect-in-category">' . $link . '</span>';
- }
- $this->children[] = $link;
+ $this->children[] = $this->generateLink(
+ 'subcat',
+ $title,
+ $title->isRedirect(),
+ htmlspecialchars( $title->getText() )
+ );
$this->children_start_char[] =
$this->getSubcategorySortChar( $cat->getTitle(), $sortkey );
}
+ function generateLink( $type, Title $title, $isRedirect, $html = null ) {
+ $link = null;
+ Hooks::run( 'CategoryViewer::generateLink', array( $type, $title, $html, &$link ) );
+ if ( $link === null ) {
+ $link = Linker::link( $title, $html );
+ }
+ if ( $isRedirect ) {
+ $link = '<span class="redirect-in-category">' . $link . '</span>';
+ }
+
+ return $link;
+ }
+
/**
* Get the character to be used for sorting subcategories.
* If there's a link from Category:A to Category:B, the sortkey of the resulting
@@ -231,13 +243,7 @@ class CategoryViewer extends ContextSource {
$this->gallery->add( $title );
}
} else {
- $link = Linker::link( $title );
- if ( $isRedirect ) {
- // This seems kind of pointless given 'mw-redirect' class,
- // but keeping for back-compatibility with user css.
- $link = '<span class="redirect-in-category">' . $link . '</span>';
- }
- $this->imgsNoGallery[] = $link;
+ $this->imgsNoGallery[] = $this->generateLink( 'image', $title, $isRedirect );
$this->imgsNoGallery_start_char[] = $wgContLang->convert(
$this->collation->getFirstLetter( $sortkey ) );
@@ -254,13 +260,7 @@ class CategoryViewer extends ContextSource {
function addPage( $title, $sortkey, $pageLength, $isRedirect = false ) {
global $wgContLang;
- $link = Linker::link( $title );
- if ( $isRedirect ) {
- // This seems kind of pointless given 'mw-redirect' class,
- // but keeping for back-compatibility with user css.
- $link = '<span class="redirect-in-category">' . $link . '</span>';
- }
- $this->articles[] = $link;
+ $this->articles[] = $this->generateLink( 'page', $title, $isRedirect );
$this->articles_start_char[] = $wgContLang->convert(
$this->collation->getFirstLetter( $sortkey ) );
@@ -333,6 +333,8 @@ class CategoryViewer extends ContextSource {
)
);
+ Hooks::run( 'CategoryViewer::doCategoryQuery', array( $type, $res ) );
+
$count = 0;
foreach ( $res as $row ) {
$title = Title::newFromRow( $row );
@@ -390,7 +392,7 @@ class CategoryViewer extends ContextSource {
if ( $rescnt > 0 ) {
# Showing subcategories
$r .= "<div id=\"mw-subcategories\">\n";
- $r .= '<h2>' . $this->msg( 'subcategories' )->text() . "</h2>\n";
+ $r .= '<h2>' . $this->msg( 'subcategories' )->parse() . "</h2>\n";
$r .= $countmsg;
$r .= $this->getSectionPagingLinks( 'subcat' );
$r .= $this->formatList( $this->children, $this->children_start_char );
@@ -419,7 +421,7 @@ class CategoryViewer extends ContextSource {
if ( $rescnt > 0 ) {
$r = "<div id=\"mw-pages\">\n";
- $r .= '<h2>' . $this->msg( 'category_header', $ti )->text() . "</h2>\n";
+ $r .= '<h2>' . $this->msg( 'category_header', $ti )->parse() . "</h2>\n";
$r .= $countmsg;
$r .= $this->getSectionPagingLinks( 'page' );
$r .= $this->formatList( $this->articles, $this->articles_start_char );
@@ -515,7 +517,7 @@ class CategoryViewer extends ContextSource {
}
$pageLang = $this->title->getPageLanguage();
- $attribs = array( 'lang' => $pageLang->getCode(), 'dir' => $pageLang->getDir(),
+ $attribs = array( 'lang' => $pageLang->getHtmlCode(), 'dir' => $pageLang->getDir(),
'class' => 'mw-content-' . $pageLang->getDir() );
$list = Html::rawElement( 'div', $attribs, $list );
@@ -529,8 +531,7 @@ class CategoryViewer extends ContextSource {
* TODO: Take the headers into account when creating columns, so they're
* more visually equal.
*
- * More distant TODO: Scrap this and use CSS columns, whenever IE finally
- * supports those.
+ * TODO: shortList and columnList are similar, need merging
*
* @param array $articles
* @param string[] $articles_start_char
@@ -539,50 +540,34 @@ class CategoryViewer extends ContextSource {
*/
static function columnList( $articles, $articles_start_char ) {
$columns = array_combine( $articles, $articles_start_char );
- # Split into three columns
- $columns = array_chunk( $columns, ceil( count( $columns ) / 3 ), true /* preserve keys */ );
- $ret = '<table style="width: 100%;"><tr style="vertical-align: top;">';
- $prevchar = null;
+ $ret = Html::openElement( 'div', array( 'class' => 'mw-category' ) );
- foreach ( $columns as $column ) {
- $ret .= '<td style="width: 33.3%;">';
- $colContents = array();
+ $colContents = array();
- # Kind of like array_flip() here, but we keep duplicates in an
- # array instead of dropping them.
- foreach ( $column as $article => $char ) {
- if ( !isset( $colContents[$char] ) ) {
- $colContents[$char] = array();
- }
- $colContents[$char][] = $article;
+ # Kind of like array_flip() here, but we keep duplicates in an
+ # array instead of dropping them.
+ foreach ( $columns as $article => $char ) {
+ if ( !isset( $colContents[$char] ) ) {
+ $colContents[$char] = array();
}
+ $colContents[$char][] = $article;
+ }
- $first = true;
- foreach ( $colContents as $char => $articles ) {
- # Change space to non-breaking space to keep headers aligned
- $h3char = $char === ' ' ? '&#160;' : htmlspecialchars( $char );
+ foreach ( $colContents as $char => $articles ) {
+ # Change space to non-breaking space to keep headers aligned
+ $h3char = $char === ' ' ? '&#160;' : htmlspecialchars( $char );
- $ret .= '<h3>' . $h3char;
- if ( $first && $char === $prevchar ) {
- # We're continuing a previous chunk at the top of a new
- # column, so add " cont." after the letter.
- $ret .= ' ' . wfMessage( 'listingcontinuesabbrev' )->escaped();
- }
- $ret .= "</h3>\n";
+ $ret .= '<div class="mw-category-group"><h3>' . $h3char;
+ $ret .= "</h3>\n";
- $ret .= '<ul><li>';
- $ret .= implode( "</li>\n<li>", $articles );
- $ret .= '</li></ul>';
-
- $first = false;
- $prevchar = $char;
- }
+ $ret .= '<ul><li>';
+ $ret .= implode( "</li>\n<li>", $articles );
+ $ret .= '</li></ul></div>';
- $ret .= "</td>\n";
}
- $ret .= '</tr></table>';
+ $ret .= Html::closeElement( 'div' );
return $ret;
}
@@ -618,7 +603,7 @@ class CategoryViewer extends ContextSource {
* @return string HTML
*/
private function pagingLinks( $first, $last, $type = '' ) {
- $prevLink = $this->msg( 'prevn' )->numParams( $this->limit )->escaped();
+ $prevLink = $this->msg( 'prev-page' )->text();
if ( $first != '' ) {
$prevQuery = $this->query;
@@ -632,7 +617,7 @@ class CategoryViewer extends ContextSource {
);
}
- $nextLink = $this->msg( 'nextn' )->numParams( $this->limit )->escaped();
+ $nextLink = $this->msg( 'next-page' )->text();
if ( $last != '' ) {
$lastQuery = $this->query;
diff --git a/includes/CdbCompat.php b/includes/CdbCompat.php
new file mode 100644
index 00000000..0074cc96
--- /dev/null
+++ b/includes/CdbCompat.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/***
+ * This file contains a set of backwards-compatability class names
+ * after the cdb functions were moved out into a separate library
+ * and put under a proper namespace
+ *
+ * @since 1.25
+ */
+
+/**
+ * @deprecated since 1.25
+ */
+abstract class CdbReader extends \Cdb\Reader {
+}
+
+/**
+ * @deprecated since 1.25
+ */
+abstract class CdbWriter extends \Cdb\Writer {
+}
+
+/**
+ * @deprecated since 1.25
+ */
+class CdbException extends \Cdb\Exception {
+}
diff --git a/includes/ChangeTags.php b/includes/ChangeTags.php
index 94b7b7a9..09665dfb 100644
--- a/includes/ChangeTags.php
+++ b/includes/ChangeTags.php
@@ -18,10 +18,18 @@
* http://www.gnu.org/copyleft/gpl.html
*
* @file
+ * @ingroup Change tagging
*/
class ChangeTags {
/**
+ * Can't delete tags with more than this many uses. Similar in intent to
+ * the bigdelete user right
+ * @todo Use the job queue for tag deletion to avoid this restriction
+ */
+ const MAX_DELETE_USES = 5000;
+
+ /**
* Creates HTML for the given tags
*
* @param string $tags Comma-separated list of tags
@@ -84,21 +92,50 @@ class ChangeTags {
*
* @throws MWException
* @return bool False if no changes are made, otherwise true
- *
- * @exception MWException When $rc_id, $rev_id and $log_id are all null
*/
public static function addTags( $tags, $rc_id = null, $rev_id = null,
$log_id = null, $params = null
) {
- if ( !is_array( $tags ) ) {
- $tags = array( $tags );
- }
+ $result = self::updateTags( $tags, null, $rc_id, $rev_id, $log_id, $params );
+ return (bool)$result[0];
+ }
+
+ /**
+ * Add and remove tags to/from a change given its rc_id, rev_id and/or log_id,
+ * without verifying that the tags exist or are valid. If a tag is present in
+ * both $tagsToAdd and $tagsToRemove, it will be removed.
+ *
+ * This function should only be used by extensions to manipulate tags they
+ * have registered using the ListDefinedTags hook. When dealing with user
+ * input, call updateTagsWithChecks() instead.
+ *
+ * @param string|array|null $tagsToAdd Tags to add to the change
+ * @param string|array|null $tagsToRemove Tags to remove from the change
+ * @param int|null &$rc_id The rc_id of the change to add the tags to.
+ * Pass a variable whose value is null if the rc_id is not relevant or unknown.
+ * @param int|null &$rev_id The rev_id of the change to add the tags to.
+ * Pass a variable whose value is null if the rev_id is not relevant or unknown.
+ * @param int|null &$log_id The log_id of the change to add the tags to.
+ * Pass a variable whose value is null if the log_id is not relevant or unknown.
+ * @param string $params Params to put in the ct_params field of table
+ * 'change_tag' when adding tags
+ *
+ * @throws MWException When $rc_id, $rev_id and $log_id are all null
+ * @return array Index 0 is an array of tags actually added, index 1 is an
+ * array of tags actually removed, index 2 is an array of tags present on the
+ * revision or log entry before any changes were made
+ *
+ * @since 1.25
+ */
+ public static function updateTags( $tagsToAdd, $tagsToRemove, &$rc_id = null,
+ &$rev_id = null, &$log_id = null, $params = null ) {
- $tags = array_filter( $tags ); // Make sure we're submitting all tags...
+ $tagsToAdd = array_filter( (array)$tagsToAdd ); // Make sure we're submitting all tags...
+ $tagsToRemove = array_filter( (array)$tagsToRemove );
if ( !$rc_id && !$rev_id && !$log_id ) {
throw new MWException( 'At least one of: RCID, revision ID, and log ID MUST be ' .
- 'specified when adding a tag to a change!' );
+ 'specified when adding or removing a tag from a change!' );
}
$dbw = wfGetDB( DB_MASTER );
@@ -137,11 +174,85 @@ class ChangeTags {
);
}
+ // update the tag_summary row
+ $prevTags = array();
+ if ( !self::updateTagSummaryRow( $tagsToAdd, $tagsToRemove, $rc_id, $rev_id,
+ $log_id, $prevTags ) ) {
+
+ // nothing to do
+ return array( array(), array(), $prevTags );
+ }
+
+ // insert a row into change_tag for each new tag
+ if ( count( $tagsToAdd ) ) {
+ $tagsRows = array();
+ foreach ( $tagsToAdd as $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(
+ array(
+ 'ct_tag' => $tag,
+ 'ct_rc_id' => $rc_id,
+ 'ct_log_id' => $log_id,
+ 'ct_rev_id' => $rev_id,
+ 'ct_params' => $params
+ )
+ );
+ }
+
+ $dbw->insert( 'change_tag', $tagsRows, __METHOD__, array( 'IGNORE' ) );
+ }
+
+ // delete from change_tag
+ if ( count( $tagsToRemove ) ) {
+ foreach ( $tagsToRemove as $tag ) {
+ $conds = array_filter(
+ array(
+ 'ct_tag' => $tag,
+ 'ct_rc_id' => $rc_id,
+ 'ct_log_id' => $log_id,
+ 'ct_rev_id' => $rev_id
+ )
+ );
+ $dbw->delete( 'change_tag', $conds, __METHOD__ );
+ }
+ }
+
+ self::purgeTagUsageCache();
+ return array( $tagsToAdd, $tagsToRemove, $prevTags );
+ }
+
+ /**
+ * Adds or removes a given set of tags to/from the relevant row of the
+ * tag_summary table. Modifies the tagsToAdd and tagsToRemove arrays to
+ * reflect the tags that were actually added and/or removed.
+ *
+ * @param array &$tagsToAdd
+ * @param array &$tagsToRemove If a tag is present in both $tagsToAdd and
+ * $tagsToRemove, it will be removed
+ * @param int|null $rc_id Null if not known or not applicable
+ * @param int|null $rev_id Null if not known or not applicable
+ * @param int|null $log_id Null if not known or not applicable
+ * @param array &$prevTags Optionally outputs a list of the tags that were
+ * in the tag_summary row to begin with
+ * @return bool True if any modifications were made, otherwise false
+ * @since 1.25
+ */
+ protected static function updateTagSummaryRow( &$tagsToAdd, &$tagsToRemove,
+ $rc_id, $rev_id, $log_id, &$prevTags = array() ) {
+
+ $dbw = wfGetDB( DB_MASTER );
+
$tsConds = array_filter( array(
'ts_rc_id' => $rc_id,
'ts_rev_id' => $rev_id,
- 'ts_log_id' => $log_id )
- );
+ 'ts_log_id' => $log_id
+ ) );
+
+ // Can't both add and remove a tag at the same time...
+ $tagsToAdd = array_diff( $tagsToAdd, $tagsToRemove );
// Update the summary row.
// $prevTags can be out of date on slaves, especially when addTags is called consecutively,
@@ -149,42 +260,277 @@ class ChangeTags {
$prevTags = $dbw->selectField( 'tag_summary', 'ts_tags', $tsConds, __METHOD__ );
$prevTags = $prevTags ? $prevTags : '';
$prevTags = array_filter( explode( ',', $prevTags ) );
- $newTags = array_unique( array_merge( $prevTags, $tags ) );
+
+ // add tags
+ $tagsToAdd = array_values( array_diff( $tagsToAdd, $prevTags ) );
+ $newTags = array_unique( array_merge( $prevTags, $tagsToAdd ) );
+
+ // remove tags
+ $tagsToRemove = array_values( array_intersect( $tagsToRemove, $newTags ) );
+ $newTags = array_values( array_diff( $newTags, $tagsToRemove ) );
+
sort( $prevTags );
sort( $newTags );
-
if ( $prevTags == $newTags ) {
// No change.
return false;
}
- $dbw->replace(
- 'tag_summary',
- array( 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ),
- array_filter( array_merge( $tsConds, array( 'ts_tags' => implode( ',', $newTags ) ) ) ),
- __METHOD__
- );
-
- // Insert the tags rows.
- $tagsRows = array();
- foreach ( $tags as $tag ) { // Filter so we don't insert NULLs as zero accidentally.
- $tagsRows[] = array_filter(
- array(
- 'ct_tag' => $tag,
- 'ct_rc_id' => $rc_id,
- 'ct_log_id' => $log_id,
- 'ct_rev_id' => $rev_id,
- 'ct_params' => $params
- )
+ if ( !$newTags ) {
+ // no tags left, so delete the row altogether
+ $dbw->delete( 'tag_summary', $tsConds, __METHOD__ );
+ } else {
+ $dbw->replace( 'tag_summary',
+ array( 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ),
+ array_filter( array_merge( $tsConds, array( 'ts_tags' => implode( ',', $newTags ) ) ) ),
+ __METHOD__
);
}
- $dbw->insert( 'change_tag', $tagsRows, __METHOD__, array( 'IGNORE' ) );
-
return true;
}
/**
+ * Helper function to generate a fatal status with a 'not-allowed' type error.
+ *
+ * @param string $msgOne Message key to use in the case of one tag
+ * @param string $msgMulti Message key to use in the case of more than one tag
+ * @param array $tags Restricted tags (passed as $1 into the message, count of
+ * $tags passed as $2)
+ * @return Status
+ * @since 1.25
+ */
+ protected static function restrictedTagError( $msgOne, $msgMulti, $tags ) {
+ $lang = RequestContext::getMain()->getLanguage();
+ $count = count( $tags );
+ return Status::newFatal( ( $count > 1 ) ? $msgMulti : $msgOne,
+ $lang->commaList( $tags ), $count );
+ }
+
+ /**
+ * Is it OK to allow the user to apply all the specified tags at the same time
+ * as they edit/make the change?
+ *
+ * @param array $tags Tags that you are interested in applying
+ * @param User|null $user User whose permission you wish to check, or null if
+ * you don't care (e.g. maintenance scripts)
+ * @return Status
+ * @since 1.25
+ */
+ public static function canAddTagsAccompanyingChange( array $tags,
+ User $user = null ) {
+
+ if ( !is_null( $user ) && !$user->isAllowed( 'applychangetags' ) ) {
+ return Status::newFatal( 'tags-apply-no-permission' );
+ }
+
+ // to be applied, a tag has to be explicitly defined
+ // @todo Allow extensions to define tags that can be applied by users...
+ $allowedTags = self::listExplicitlyDefinedTags();
+ $disallowedTags = array_diff( $tags, $allowedTags );
+ if ( $disallowedTags ) {
+ return self::restrictedTagError( 'tags-apply-not-allowed-one',
+ 'tags-apply-not-allowed-multi', $disallowedTags );
+ }
+
+ return Status::newGood();
+ }
+
+ /**
+ * Adds tags to a given change, checking whether it is allowed first, but
+ * without adding a log entry. Useful for cases where the tag is being added
+ * along with the action that generated the change (e.g. tagging an edit as
+ * it is being made).
+ *
+ * Extensions should not use this function, unless directly handling a user
+ * request to add a particular tag. Normally, extensions should call
+ * ChangeTags::updateTags() instead.
+ *
+ * @param array $tags Tags to apply
+ * @param int|null $rc_id The rc_id of the change to add the tags to
+ * @param int|null $rev_id The rev_id of the change to add the tags to
+ * @param int|null $log_id The log_id of the change to add the tags to
+ * @param string $params Params to put in the ct_params field of table
+ * 'change_tag' when adding tags
+ * @param User $user Who to give credit for the action
+ * @return Status
+ * @since 1.25
+ */
+ public static function addTagsAccompanyingChangeWithChecks( array $tags,
+ $rc_id, $rev_id, $log_id, $params, User $user ) {
+
+ // are we allowed to do this?
+ $result = self::canAddTagsAccompanyingChange( $tags, $user );
+ if ( !$result->isOK() ) {
+ $result->value = null;
+ return $result;
+ }
+
+ // do it!
+ self::addTags( $tagsToAdd, $rc_id, $rev_id, $log_id, $params );
+
+ return Status::newGood( true );
+ }
+
+ /**
+ * Is it OK to allow the user to adds and remove the given tags tags to/from a
+ * change?
+ *
+ * @param array $tagsToAdd Tags that you are interested in adding
+ * @param array $tagsToRemove Tags that you are interested in removing
+ * @param User|null $user User whose permission you wish to check, or null if
+ * you don't care (e.g. maintenance scripts)
+ * @return Status
+ * @since 1.25
+ */
+ public static function canUpdateTags( array $tagsToAdd, array $tagsToRemove,
+ User $user = null ) {
+
+ if ( !is_null( $user ) && !$user->isAllowed( 'changetags' ) ) {
+ return Status::newFatal( 'tags-update-no-permission' );
+ }
+
+ // to be added, a tag has to be explicitly defined
+ // @todo Allow extensions to define tags that can be applied by users...
+ $explicitlyDefinedTags = self::listExplicitlyDefinedTags();
+ $diff = array_diff( $tagsToAdd, $explicitlyDefinedTags );
+ if ( $diff ) {
+ return self::restrictedTagError( 'tags-update-add-not-allowed-one',
+ 'tags-update-add-not-allowed-multi', $diff );
+ }
+
+ // to be removed, a tag has to be either explicitly defined or not defined
+ // at all
+ $definedTags = self::listDefinedTags();
+ $diff = array_diff( $tagsToRemove, $explicitlyDefinedTags );
+ if ( $diff ) {
+ $intersect = array_intersect( $diff, $definedTags );
+ if ( $intersect ) {
+ return self::restrictedTagError( 'tags-update-remove-not-allowed-one',
+ 'tags-update-remove-not-allowed-multi', $intersect );
+ }
+ }
+
+ return Status::newGood();
+ }
+
+ /**
+ * Adds and/or removes tags to/from a given change, checking whether it is
+ * allowed first, and adding a log entry afterwards.
+ *
+ * Includes a call to ChangeTag::canUpdateTags(), so your code doesn't need
+ * to do that. However, it doesn't check whether the *_id parameters are a
+ * valid combination. That is up to you to enforce. See ApiTag::execute() for
+ * an example.
+ *
+ * @param array|null $tagsToAdd If none, pass array() or null
+ * @param array|null $tagsToRemove If none, pass array() or null
+ * @param int|null $rc_id The rc_id of the change to add the tags to
+ * @param int|null $rev_id The rev_id of the change to add the tags to
+ * @param int|null $log_id The log_id of the change to add the tags to
+ * @param string $params Params to put in the ct_params field of table
+ * 'change_tag' when adding tags
+ * @param string $reason Comment for the log
+ * @param User $user Who to give credit for the action
+ * @return Status If successful, the value of this Status object will be an
+ * object (stdClass) with the following fields:
+ * - logId: the ID of the added log entry, or null if no log entry was added
+ * (i.e. no operation was performed)
+ * - addedTags: an array containing the tags that were actually added
+ * - removedTags: an array containing the tags that were actually removed
+ * @since 1.25
+ */
+ public static function updateTagsWithChecks( $tagsToAdd, $tagsToRemove,
+ $rc_id, $rev_id, $log_id, $params, $reason, User $user ) {
+
+ if ( is_null( $tagsToAdd ) ) {
+ $tagsToAdd = array();
+ }
+ if ( is_null( $tagsToRemove ) ) {
+ $tagsToRemove = array();
+ }
+ if ( !$tagsToAdd && !$tagsToRemove ) {
+ // no-op, don't bother
+ return Status::newGood( (object)array(
+ 'logId' => null,
+ 'addedTags' => array(),
+ 'removedTags' => array(),
+ ) );
+ }
+
+ // are we allowed to do this?
+ $result = self::canUpdateTags( $tagsToAdd, $tagsToRemove, $user );
+ if ( !$result->isOK() ) {
+ $result->value = null;
+ return $result;
+ }
+
+ // basic rate limiting
+ if ( $user->pingLimiter( 'changetag' ) ) {
+ return Status::newFatal( 'actionthrottledtext' );
+ }
+
+ // do it!
+ list( $tagsAdded, $tagsRemoved, $initialTags ) = self::updateTags( $tagsToAdd,
+ $tagsToRemove, $rc_id, $rev_id, $log_id, $params );
+ if ( !$tagsAdded && !$tagsRemoved ) {
+ // no-op, don't log it
+ return Status::newGood( (object)array(
+ 'logId' => null,
+ 'addedTags' => array(),
+ 'removedTags' => array(),
+ ) );
+ }
+
+ // log it
+ $logEntry = new ManualLogEntry( 'tag', 'update' );
+ $logEntry->setPerformer( $user );
+ $logEntry->setComment( $reason );
+
+ // find the appropriate target page
+ if ( $rev_id ) {
+ $rev = Revision::newFromId( $rev_id );
+ if ( $rev ) {
+ $title = $rev->getTitle();
+ $logEntry->setTarget( $rev->getTitle() );
+ }
+ } elseif ( $log_id ) {
+ // This function is from revision deletion logic and has nothing to do with
+ // change tags, but it appears to be the only other place in core where we
+ // perform logged actions on log items.
+ $logEntry->setTarget( RevDelLogList::suggestTarget( 0, array( $log_id ) ) );
+ }
+
+ if ( !$logEntry->getTarget() ) {
+ // target is required, so we have to set something
+ $logEntry->setTarget( SpecialPage::getTitleFor( 'Tags' ) );
+ }
+
+ $logParams = array(
+ '4::revid' => $rev_id,
+ '5::logid' => $log_id,
+ '6:list:tagsAdded' => $tagsAdded,
+ '7:number:tagsAddedCount' => count( $tagsAdded ),
+ '8:list:tagsRemoved' => $tagsRemoved,
+ '9:number:tagsRemovedCount' => count( $tagsRemoved ),
+ 'initialTags' => $initialTags,
+ );
+ $logEntry->setParameters( $logParams );
+ $logEntry->setRelations( array( 'Tag' => array_merge( $tagsAdded, $tagsRemoved ) ) );
+
+ $dbw = wfGetDB( DB_MASTER );
+ $logId = $logEntry->insert( $dbw );
+ // Only send this to UDP, not RC, similar to patrol events
+ $logEntry->publish( $logId, 'udp' );
+
+ return Status::newGood( (object)array(
+ 'logId' => $logId,
+ 'addedTags' => $tagsAdded,
+ 'removedTags' => $tagsRemoved,
+ ) );
+ }
+
+ /**
* Applies all tags-related changes to a query.
* Handles selecting tags, and filtering.
* Needs $tables to be set up properly, so we can figure out which join conditions to use.
@@ -265,7 +611,7 @@ class ChangeTags {
'tagfilter',
20,
$selected,
- array( 'class' => 'mw-tagfilter-input', 'id' => 'tagfilter' )
+ array( 'class' => 'mw-tagfilter-input mw-ui-input mw-ui-input-inline', 'id' => 'tagfilter' )
)
);
@@ -290,18 +636,451 @@ class ChangeTags {
}
/**
+ * Defines a tag in the valid_tag table, without checking that the tag name
+ * is valid.
+ * Extensions should NOT use this function; they can use the ListDefinedTags
+ * hook instead.
+ *
+ * @param string $tag Tag to create
+ * @since 1.25
+ */
+ public static function defineTag( $tag ) {
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->replace( 'valid_tag',
+ array( 'vt_tag' ),
+ array( 'vt_tag' => $tag ),
+ __METHOD__ );
+
+ // clear the memcache of defined tags
+ self::purgeTagCacheAll();
+ }
+
+ /**
+ * Removes a tag from the valid_tag table. The tag may remain in use by
+ * extensions, and may still show up as 'defined' if an extension is setting
+ * it from the ListDefinedTags hook.
+ *
+ * @param string $tag Tag to remove
+ * @since 1.25
+ */
+ public static function undefineTag( $tag ) {
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->delete( 'valid_tag', array( 'vt_tag' => $tag ), __METHOD__ );
+
+ // clear the memcache of defined tags
+ self::purgeTagCacheAll();
+ }
+
+ /**
+ * Writes a tag action into the tag management log.
+ *
+ * @param string $action
+ * @param string $tag
+ * @param string $reason
+ * @param User $user Who to attribute the action to
+ * @param int $tagCount For deletion only, how many usages the tag had before
+ * it was deleted.
+ * @since 1.25
+ */
+ protected static function logTagManagementAction( $action, $tag, $reason,
+ User $user, $tagCount = null ) {
+
+ $dbw = wfGetDB( DB_MASTER );
+
+ $logEntry = new ManualLogEntry( 'managetags', $action );
+ $logEntry->setPerformer( $user );
+ // target page is not relevant, but it has to be set, so we just put in
+ // the title of Special:Tags
+ $logEntry->setTarget( Title::newFromText( 'Special:Tags' ) );
+ $logEntry->setComment( $reason );
+
+ $params = array( '4::tag' => $tag );
+ if ( !is_null( $tagCount ) ) {
+ $params['5:number:count'] = $tagCount;
+ }
+ $logEntry->setParameters( $params );
+ $logEntry->setRelations( array( 'Tag' => $tag ) );
+
+ $logId = $logEntry->insert( $dbw );
+ $logEntry->publish( $logId );
+ return $logId;
+ }
+
+ /**
+ * Is it OK to allow the user to activate this tag?
+ *
+ * @param string $tag Tag that you are interested in activating
+ * @param User|null $user User whose permission you wish to check, or null if
+ * you don't care (e.g. maintenance scripts)
+ * @return Status
+ * @since 1.25
+ */
+ public static function canActivateTag( $tag, User $user = null ) {
+ if ( !is_null( $user ) && !$user->isAllowed( 'managechangetags' ) ) {
+ return Status::newFatal( 'tags-manage-no-permission' );
+ }
+
+ // non-existing tags cannot be activated
+ $tagUsage = self::tagUsageStatistics();
+ if ( !isset( $tagUsage[$tag] ) ) {
+ return Status::newFatal( 'tags-activate-not-found', $tag );
+ }
+
+ // defined tags cannot be activated (a defined tag is either extension-
+ // defined, in which case the extension chooses whether or not to active it;
+ // or user-defined, in which case it is considered active)
+ $definedTags = self::listDefinedTags();
+ if ( in_array( $tag, $definedTags ) ) {
+ return Status::newFatal( 'tags-activate-not-allowed', $tag );
+ }
+
+ return Status::newGood();
+ }
+
+ /**
+ * Activates a tag, checking whether it is allowed first, and adding a log
+ * entry afterwards.
+ *
+ * Includes a call to ChangeTag::canActivateTag(), so your code doesn't need
+ * to do that.
+ *
+ * @param string $tag
+ * @param string $reason
+ * @param User $user Who to give credit for the action
+ * @param bool $ignoreWarnings Can be used for API interaction, default false
+ * @return Status If successful, the Status contains the ID of the added log
+ * entry as its value
+ * @since 1.25
+ */
+ public static function activateTagWithChecks( $tag, $reason, User $user,
+ $ignoreWarnings = false ) {
+
+ // are we allowed to do this?
+ $result = self::canActivateTag( $tag, $user );
+ if ( $ignoreWarnings ? !$result->isOK() : !$result->isGood() ) {
+ $result->value = null;
+ return $result;
+ }
+
+ // do it!
+ self::defineTag( $tag );
+
+ // log it
+ $logId = self::logTagManagementAction( 'activate', $tag, $reason, $user );
+ return Status::newGood( $logId );
+ }
+
+ /**
+ * Is it OK to allow the user to deactivate this tag?
+ *
+ * @param string $tag Tag that you are interested in deactivating
+ * @param User|null $user User whose permission you wish to check, or null if
+ * you don't care (e.g. maintenance scripts)
+ * @return Status
+ * @since 1.25
+ */
+ public static function canDeactivateTag( $tag, User $user = null ) {
+ if ( !is_null( $user ) && !$user->isAllowed( 'managechangetags' ) ) {
+ return Status::newFatal( 'tags-manage-no-permission' );
+ }
+
+ // only explicitly-defined tags can be deactivated
+ $explicitlyDefinedTags = self::listExplicitlyDefinedTags();
+ if ( !in_array( $tag, $explicitlyDefinedTags ) ) {
+ return Status::newFatal( 'tags-deactivate-not-allowed', $tag );
+ }
+ return Status::newGood();
+ }
+
+ /**
+ * Deactivates a tag, checking whether it is allowed first, and adding a log
+ * entry afterwards.
+ *
+ * Includes a call to ChangeTag::canDeactivateTag(), so your code doesn't need
+ * to do that.
+ *
+ * @param string $tag
+ * @param string $reason
+ * @param User $user Who to give credit for the action
+ * @param bool $ignoreWarnings Can be used for API interaction, default false
+ * @return Status If successful, the Status contains the ID of the added log
+ * entry as its value
+ * @since 1.25
+ */
+ public static function deactivateTagWithChecks( $tag, $reason, User $user,
+ $ignoreWarnings = false ) {
+
+ // are we allowed to do this?
+ $result = self::canDeactivateTag( $tag, $user );
+ if ( $ignoreWarnings ? !$result->isOK() : !$result->isGood() ) {
+ $result->value = null;
+ return $result;
+ }
+
+ // do it!
+ self::undefineTag( $tag );
+
+ // log it
+ $logId = self::logTagManagementAction( 'deactivate', $tag, $reason, $user );
+ return Status::newGood( $logId );
+ }
+
+ /**
+ * Is it OK to allow the user to create this tag?
+ *
+ * @param string $tag Tag that you are interested in creating
+ * @param User|null $user User whose permission you wish to check, or null if
+ * you don't care (e.g. maintenance scripts)
+ * @return Status
+ * @since 1.25
+ */
+ public static function canCreateTag( $tag, User $user = null ) {
+ if ( !is_null( $user ) && !$user->isAllowed( 'managechangetags' ) ) {
+ return Status::newFatal( 'tags-manage-no-permission' );
+ }
+
+ // no empty tags
+ if ( $tag === '' ) {
+ return Status::newFatal( 'tags-create-no-name' );
+ }
+
+ // tags cannot contain commas (used as a delimiter in tag_summary table) or
+ // slashes (would break tag description messages in MediaWiki namespace)
+ if ( strpos( $tag, ',' ) !== false || strpos( $tag, '/' ) !== false ) {
+ return Status::newFatal( 'tags-create-invalid-chars' );
+ }
+
+ // could the MediaWiki namespace description messages be created?
+ $title = Title::makeTitleSafe( NS_MEDIAWIKI, "Tag-$tag-description" );
+ if ( is_null( $title ) ) {
+ return Status::newFatal( 'tags-create-invalid-title-chars' );
+ }
+
+ // does the tag already exist?
+ $tagUsage = self::tagUsageStatistics();
+ if ( isset( $tagUsage[$tag] ) ) {
+ return Status::newFatal( 'tags-create-already-exists', $tag );
+ }
+
+ // check with hooks
+ $canCreateResult = Status::newGood();
+ Hooks::run( 'ChangeTagCanCreate', array( $tag, $user, &$canCreateResult ) );
+ return $canCreateResult;
+ }
+
+ /**
+ * Creates a tag by adding a row to the `valid_tag` table.
+ *
+ * Includes a call to ChangeTag::canDeleteTag(), so your code doesn't need to
+ * do that.
+ *
+ * @param string $tag
+ * @param string $reason
+ * @param User $user Who to give credit for the action
+ * @param bool $ignoreWarnings Can be used for API interaction, default false
+ * @return Status If successful, the Status contains the ID of the added log
+ * entry as its value
+ * @since 1.25
+ */
+ public static function createTagWithChecks( $tag, $reason, User $user,
+ $ignoreWarnings = false ) {
+
+ // are we allowed to do this?
+ $result = self::canCreateTag( $tag, $user );
+ if ( $ignoreWarnings ? !$result->isOK() : !$result->isGood() ) {
+ $result->value = null;
+ return $result;
+ }
+
+ // do it!
+ self::defineTag( $tag );
+
+ // log it
+ $logId = self::logTagManagementAction( 'create', $tag, $reason, $user );
+ return Status::newGood( $logId );
+ }
+
+ /**
+ * Permanently removes all traces of a tag from the DB. Good for removing
+ * misspelt or temporary tags.
+ *
+ * This function should be directly called by maintenance scripts only, never
+ * by user-facing code. See deleteTagWithChecks() for functionality that can
+ * safely be exposed to users.
+ *
+ * @param string $tag Tag to remove
+ * @return Status The returned status will be good unless a hook changed it
+ * @since 1.25
+ */
+ public static function deleteTagEverywhere( $tag ) {
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->begin( __METHOD__ );
+
+ // delete from valid_tag
+ self::undefineTag( $tag );
+
+ // find out which revisions use this tag, so we can delete from tag_summary
+ $result = $dbw->select( 'change_tag',
+ array( 'ct_rc_id', 'ct_log_id', 'ct_rev_id', 'ct_tag' ),
+ array( 'ct_tag' => $tag ),
+ __METHOD__ );
+ foreach ( $result as $row ) {
+ // remove the tag from the relevant row of tag_summary
+ $tagsToAdd = array();
+ $tagsToRemove = array( $tag );
+ self::updateTagSummaryRow( $tagsToAdd, $tagsToRemove, $row->ct_rc_id,
+ $row->ct_rev_id, $row->ct_log_id );
+ }
+
+ // delete from change_tag
+ $dbw->delete( 'change_tag', array( 'ct_tag' => $tag ), __METHOD__ );
+
+ $dbw->commit( __METHOD__ );
+
+ // give extensions a chance
+ $status = Status::newGood();
+ Hooks::run( 'ChangeTagAfterDelete', array( $tag, &$status ) );
+ // let's not allow error results, as the actual tag deletion succeeded
+ if ( !$status->isOK() ) {
+ wfDebug( 'ChangeTagAfterDelete error condition downgraded to warning' );
+ $status->ok = true;
+ }
+
+ // clear the memcache of defined tags
+ self::purgeTagCacheAll();
+
+ return $status;
+ }
+
+ /**
+ * Is it OK to allow the user to delete this tag?
+ *
+ * @param string $tag Tag that you are interested in deleting
+ * @param User|null $user User whose permission you wish to check, or null if
+ * you don't care (e.g. maintenance scripts)
+ * @return Status
+ * @since 1.25
+ */
+ public static function canDeleteTag( $tag, User $user = null ) {
+ $tagUsage = self::tagUsageStatistics();
+
+ if ( !is_null( $user ) && !$user->isAllowed( 'managechangetags' ) ) {
+ return Status::newFatal( 'tags-manage-no-permission' );
+ }
+
+ if ( !isset( $tagUsage[$tag] ) ) {
+ return Status::newFatal( 'tags-delete-not-found', $tag );
+ }
+
+ if ( $tagUsage[$tag] > self::MAX_DELETE_USES ) {
+ return Status::newFatal( 'tags-delete-too-many-uses', $tag, self::MAX_DELETE_USES );
+ }
+
+ $extensionDefined = self::listExtensionDefinedTags();
+ if ( in_array( $tag, $extensionDefined ) ) {
+ // extension-defined tags can't be deleted unless the extension
+ // specifically allows it
+ $status = Status::newFatal( 'tags-delete-not-allowed' );
+ } else {
+ // user-defined tags are deletable unless otherwise specified
+ $status = Status::newGood();
+ }
+
+ Hooks::run( 'ChangeTagCanDelete', array( $tag, $user, &$status ) );
+ return $status;
+ }
+
+ /**
+ * Deletes a tag, checking whether it is allowed first, and adding a log entry
+ * afterwards.
+ *
+ * Includes a call to ChangeTag::canDeleteTag(), so your code doesn't need to
+ * do that.
+ *
+ * @param string $tag
+ * @param string $reason
+ * @param User $user Who to give credit for the action
+ * @param bool $ignoreWarnings Can be used for API interaction, default false
+ * @return Status If successful, the Status contains the ID of the added log
+ * entry as its value
+ * @since 1.25
+ */
+ public static function deleteTagWithChecks( $tag, $reason, User $user,
+ $ignoreWarnings = false ) {
+
+ // are we allowed to do this?
+ $result = self::canDeleteTag( $tag, $user );
+ if ( $ignoreWarnings ? !$result->isOK() : !$result->isGood() ) {
+ $result->value = null;
+ return $result;
+ }
+
+ // store the tag usage statistics
+ $tagUsage = self::tagUsageStatistics();
+
+ // do it!
+ $deleteResult = self::deleteTagEverywhere( $tag );
+ if ( !$deleteResult->isOK() ) {
+ return $deleteResult;
+ }
+
+ // log it
+ $logId = self::logTagManagementAction( 'delete', $tag, $reason, $user, $tagUsage[$tag] );
+ $deleteResult->value = $logId;
+ return $deleteResult;
+ }
+
+ /**
+ * Lists those tags which extensions report as being "active".
+ *
+ * @return array
+ * @since 1.25
+ */
+ public static function listExtensionActivatedTags() {
+ // Caching...
+ global $wgMemc;
+ $key = wfMemcKey( 'active-tags' );
+ $tags = $wgMemc->get( $key );
+ if ( $tags ) {
+ return $tags;
+ }
+
+ // ask extensions which tags they consider active
+ $extensionActive = array();
+ Hooks::run( 'ChangeTagsListActive', array( &$extensionActive ) );
+
+ // Short-term caching.
+ $wgMemc->set( $key, $extensionActive, 300 );
+ return $extensionActive;
+ }
+
+ /**
* Basically lists defined tags which count even if they aren't applied to anything.
- * Tags on items in table 'change_tag' which are not (or no longer) in table 'valid_tag'
- * are not included.
+ * It returns a union of the results of listExplicitlyDefinedTags() and
+ * listExtensionDefinedTags().
+ *
+ * @return string[] Array of strings: tags
+ */
+ public static function listDefinedTags() {
+ $tags1 = self::listExplicitlyDefinedTags();
+ $tags2 = self::listExtensionDefinedTags();
+ return array_values( array_unique( array_merge( $tags1, $tags2 ) ) );
+ }
+
+ /**
+ * Lists tags explicitly defined in the `valid_tag` table of the database.
+ * Tags in table 'change_tag' which are not in table 'valid_tag' are not
+ * included.
*
* Tries memcached first.
*
* @return string[] Array of strings: tags
+ * @since 1.25
*/
- public static function listDefinedTags() {
+ public static function listExplicitlyDefinedTags() {
// Caching...
global $wgMemc;
- $key = wfMemcKey( 'valid-tags' );
+ $key = wfMemcKey( 'valid-tags-db' );
$tags = $wgMemc->get( $key );
if ( $tags ) {
return $tags;
@@ -316,8 +1095,33 @@ class ChangeTags {
$emptyTags[] = $row->vt_tag;
}
- wfRunHooks( 'ListDefinedTags', array( &$emptyTags ) );
+ $emptyTags = array_filter( array_unique( $emptyTags ) );
+ // Short-term caching.
+ $wgMemc->set( $key, $emptyTags, 300 );
+ return $emptyTags;
+ }
+
+ /**
+ * Lists tags defined by extensions using the ListDefinedTags hook.
+ * Extensions need only define those tags they deem to be in active use.
+ *
+ * Tries memcached first.
+ *
+ * @return string[] Array of strings: tags
+ * @since 1.25
+ */
+ public static function listExtensionDefinedTags() {
+ // Caching...
+ global $wgMemc;
+ $key = wfMemcKey( 'valid-tags-hook' );
+ $tags = $wgMemc->get( $key );
+ if ( $tags ) {
+ return $tags;
+ }
+
+ $emptyTags = array();
+ Hooks::run( 'ListDefinedTags', array( &$emptyTags ) );
$emptyTags = array_filter( array_unique( $emptyTags ) );
// Short-term caching.
@@ -326,12 +1130,45 @@ class ChangeTags {
}
/**
+ * Invalidates the short-term cache of defined tags used by the
+ * list*DefinedTags functions, as well as the tag statistics cache.
+ * @since 1.25
+ */
+ public static function purgeTagCacheAll() {
+ global $wgMemc;
+ $wgMemc->delete( wfMemcKey( 'active-tags' ) );
+ $wgMemc->delete( wfMemcKey( 'valid-tags-db' ) );
+ $wgMemc->delete( wfMemcKey( 'valid-tags-hook' ) );
+ self::purgeTagUsageCache();
+ }
+
+ /**
+ * Invalidates the tag statistics cache only.
+ * @since 1.25
+ */
+ public static function purgeTagUsageCache() {
+ global $wgMemc;
+ $wgMemc->delete( wfMemcKey( 'change-tag-statistics' ) );
+ }
+
+ /**
* Returns a map of any tags used on the wiki to number of edits
* tagged with them, ordered descending by the hitcount.
*
+ * 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() {
+ // Caching...
+ global $wgMemc;
+ $key = wfMemcKey( 'change-tag-statistics' );
+ $stats = $wgMemc->get( $key );
+ if ( $stats ) {
+ return $stats;
+ }
+
$out = array();
$dbr = wfGetDB( DB_SLAVE );
@@ -352,6 +1189,26 @@ class ChangeTags {
}
}
+ // Cache for a very short time
+ $wgMemc->set( $key, $out, 300 );
return $out;
}
+
+ /**
+ * Indicate whether change tag editing UI is relevant
+ *
+ * Returns true if the user has the necessary right and there are any
+ * editable tags defined.
+ *
+ * This intentionally doesn't check "any addable || any deletable", because
+ * it seems like it would be more confusing than useful if the checkboxes
+ * suddenly showed up because some abuse filter stopped defining a tag and
+ * then suddenly disappeared when someone deleted all uses of that tag.
+ *
+ * @param User $user
+ * @return bool
+ */
+ public static function showTagEditingUI( User $user ) {
+ return $user->isAllowed( 'changetags' ) && (bool)self::listExplicitlyDefinedTags();
+ }
}
diff --git a/includes/Collation.php b/includes/Collation.php
index 1c2c2db3..481d8e70 100644
--- a/includes/Collation.php
+++ b/includes/Collation.php
@@ -59,7 +59,7 @@ abstract class Collation {
# Provide a mechanism for extensions to hook in.
$collationObject = null;
- wfRunHooks( 'Collation::factory', array( $collationName, &$collationObject ) );
+ Hooks::run( 'Collation::factory', array( $collationName, &$collationObject ) );
if ( $collationObject instanceof Collation ) {
return $collationObject;
@@ -341,7 +341,7 @@ class IcuCollation extends Collation {
// Check for CJK
$firstChar = mb_substr( $string, 0, 1, 'UTF-8' );
- if ( ord( $firstChar ) > 0x7f && self::isCjk( utf8ToCodepoint( $firstChar ) ) ) {
+ if ( ord( $firstChar ) > 0x7f && self::isCjk( UtfNormal\Utils::utf8ToCodepoint( $firstChar ) ) ) {
return $firstChar;
}
diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php
index aad42aac..010c471c 100644
--- a/includes/DefaultSettings.php
+++ b/includes/DefaultSettings.php
@@ -52,6 +52,8 @@ if ( !defined( 'MEDIAWIKI' ) ) {
die( 1 );
}
+/** @endcond */
+
/**
* wgConf hold the site configuration.
* Not used for much in a default install.
@@ -71,11 +73,9 @@ $wgConfigRegistry = array(
/**
* MediaWiki version number
- * Note that MediaWikiVersionFetcher::fetchVersion() uses a regex to check this.
- * Using single quotes is, therefore, important here.
* @since 1.2
*/
-$wgVersion = '1.24.2';
+$wgVersion = '1.25.1';
/**
* Name of the site. It must be changed in LocalSettings.php
@@ -154,12 +154,15 @@ $wgUsePathInfo = ( strpos( PHP_SAPI, 'cgi' ) === false ) &&
( strpos( PHP_SAPI, 'isapi' ) === false );
/**
- * The extension to append to script names by default. This can either be .php
- * or .php5.
+ * The extension to append to script names by default.
+ *
+ * Some hosting providers used PHP 4 for *.php files, and PHP 5 for *.php5.
+ * This variable was provided to support those providers.
*
- * Some hosting providers use PHP 4 for *.php files, and PHP 5 for *.php5. This
- * variable is provided to support those providers.
* @since 1.11
+ * @deprecated since 1.25; support for '.php5' is being phased out of MediaWiki
+ * proper. Backward-compatibility can be maintained by configuring your web
+ * server to rewrite URLs. See RELEASE-NOTES for details.
*/
$wgScriptExtension = '.php';
@@ -221,11 +224,18 @@ $wgLocalStylePath = false;
$wgExtensionAssetsPath = false;
/**
+ * Filesystem extensions directory.
+ * Defaults to "{$IP}/extensions".
+ * @since 1.25
+ */
+$wgExtensionDirectory = "{$IP}/extensions";
+
+/**
* Filesystem stylesheets directory.
* Defaults to "{$IP}/skins".
* @since 1.3
*/
-$wgStyleDirectory = false;
+$wgStyleDirectory = "{$IP}/skins";
/**
* The URL path for primary article page views. This path should contain $1,
@@ -260,6 +270,23 @@ $wgFileCacheDirectory = false;
$wgLogo = false;
/**
+ * Array with URL paths to HD versions of the wiki logo. The scaled logo size
+ * should be under 135x155 pixels.
+ * Only 1.5x and 2x versions are supported.
+ *
+ * @par Example:
+ * @code
+ * $wgLogoHD = array(
+ * "1.5x" => "path/to/1.5x_version.png",
+ * "2x" => "path/to/2x_version.png"
+ * );
+ * @endcode
+ *
+ * @since 1.25
+ */
+$wgLogoHD = false;
+
+/**
* The URL path of the shortcut icon.
* @since 1.6
*/
@@ -273,6 +300,16 @@ $wgFavicon = '/favicon.ico';
$wgAppleTouchIcon = false;
/**
+ * Value for the referrer policy meta tag.
+ * One of 'never', 'default', 'origin', 'always'. Setting it to false just
+ * prevents the meta tag from being output.
+ * See http://www.w3.org/TR/referrer-policy/ for details.
+ *
+ * @since 1.25
+ */
+$wgReferrerPolicy = false;
+
+/**
* The local filesystem path to a temporary directory. This is not required to
* be web accessible.
*
@@ -943,12 +980,13 @@ $wgExiv2Command = '/usr/bin/exiv2';
* are passed as parameters after $srcPath, $dstPath, $width, $height
*/
$wgSVGConverters = array(
- 'ImageMagick' => '$path/convert -background white -thumbnail $widthx$height\! $input PNG:$output',
+ 'ImageMagick' =>
+ '$path/convert -background "#ffffff00" -thumbnail $widthx$height\! $input PNG:$output',
'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output',
'inkscape' => '$path/inkscape -z -w $width -f $input -e $output',
'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d '
. '$output $input',
- 'rsvg' => '$path/rsvg -w $width -h $height $input $output',
+ 'rsvg' => '$path/rsvg-convert -w $width -h $height -o $output $input',
'imgserv' => '$path/imgserv-wrapper -i svg -o png -w$width $input $output',
'ImagickExt' => array( 'SvgHandler::rasterizeImagickExt' ),
);
@@ -1245,6 +1283,46 @@ $wgThumbnailBuckets = null;
$wgThumbnailMinimumBucketDistance = 50;
/**
+ * When defined, is an array of thumbnail widths to be rendered at upload time. The idea is to
+ * prerender common thumbnail sizes, in order to avoid the necessity to render them on demand, which
+ * has a performance impact for the first client to view a certain size.
+ *
+ * This obviously means that more disk space is needed per upload upfront.
+ *
+ * @since 1.25
+ */
+
+$wgUploadThumbnailRenderMap = array();
+
+/**
+ * The method through which the thumbnails will be prerendered for the entries in
+ * $wgUploadThumbnailRenderMap
+ *
+ * The method can be either "http" or "jobqueue". The former uses an http request to hit the
+ * thumbnail's URL.
+ * This method only works if thumbnails are configured to be rendered by a 404 handler. The latter
+ * option uses the job queue to render the thumbnail.
+ *
+ * @since 1.25
+ */
+$wgUploadThumbnailRenderMethod = 'jobqueue';
+
+/**
+ * When using the "http" wgUploadThumbnailRenderMethod, lets one specify a custom Host HTTP header.
+ *
+ * @since 1.25
+ */
+$wgUploadThumbnailRenderHttpCustomHost = false;
+
+/**
+ * When using the "http" wgUploadThumbnailRenderMethod, lets one specify a custom domain to send the
+ * HTTP request to.
+ *
+ * @since 1.25
+ */
+$wgUploadThumbnailRenderHttpCustomDomain = false;
+
+/**
* Default parameters for the "<gallery>" tag
*/
$wgGalleryOptions = array(
@@ -1272,9 +1350,11 @@ $wgDirectoryMode = 0777;
* Generate and use thumbnails suitable for screens with 1.5 and 2.0 pixel densities.
*
* This means a 320x240 use of an image on the wiki will also generate 480x360 and 640x480
- * thumbnails, output via data-src-1-5 and data-src-2-0. Runtime JavaScript switches the
- * images in after loading the original low-resolution versions depending on the reported
- * window.devicePixelRatio.
+ * thumbnails, output via the srcset attribute.
+ *
+ * On older browsers, a JavaScript polyfill switches the appropriate images in after loading
+ * the original low-resolution versions depending on the reported window.devicePixelRatio.
+ * The polyfill can be found in the jquery.hidpi module.
*/
$wgResponsiveImages = true;
@@ -1345,7 +1425,7 @@ $wgDjvuOutputExtension = 'jpg';
/**
* Site admin email address.
*
- * Defaults to "wikiadmin@{$wgServerName}".
+ * Defaults to "wikiadmin@$wgServerName".
*/
$wgEmergencyContact = false;
@@ -1354,7 +1434,7 @@ $wgEmergencyContact = false;
*
* The address we should use as sender when a user is requesting his password.
*
- * Defaults to "apache@{$wgServerName}".
+ * Defaults to "apache@$wgServerName".
*/
$wgPasswordSender = false;
@@ -1664,6 +1744,9 @@ $wgAllDBsAreLocalhost = false;
* $wgSharedPrefix is the table prefix for the shared database. It defaults to
* $wgDBprefix.
*
+ * $wgSharedSchema is the table schema for the shared database. It defaults to
+ * $wgDBmwschema.
+ *
* @deprecated since 1.21 In new code, use the $wiki parameter to wfGetLB() to
* access remote databases. Using wfGetLB() allows the shared database to
* reside on separate servers to the wiki's own database, with suitable
@@ -1682,6 +1765,12 @@ $wgSharedPrefix = false;
$wgSharedTables = array( 'user', 'user_properties' );
/**
+ * @see $wgSharedDB
+ * @since 1.23
+ */
+$wgSharedSchema = false;
+
+/**
* Database load balancer
* This is a two-dimensional array, an array of server info structures
* Fields are:
@@ -1960,15 +2049,6 @@ $wgAllowSlowParserFunctions = false;
$wgAllowSchemaUpdates = true;
/**
- * Anti-lock flags - bitfield
- * - ALF_NO_LINK_LOCK:
- * Don't use locking reads when updating the link table. This is
- * necessary for wikis with a high edit rate for performance
- * reasons, but may cause link table inconsistency
- */
-$wgAntiLockFlags = 0;
-
-/**
* Maximum article size in kilobytes
*/
$wgMaxArticleSize = 2048;
@@ -2063,43 +2143,21 @@ $wgLanguageConverterCacheType = CACHE_ANYTHING;
*/
$wgObjectCaches = array(
CACHE_NONE => array( 'class' => 'EmptyBagOStuff' ),
- CACHE_DB => array( 'class' => 'SqlBagOStuff', 'table' => 'objectcache' ),
+ CACHE_DB => array( 'class' => 'SqlBagOStuff', 'loggroup' => 'SQLBagOStuff' ),
CACHE_ANYTHING => array( 'factory' => 'ObjectCache::newAnything' ),
CACHE_ACCEL => array( 'factory' => 'ObjectCache::newAccelerator' ),
- CACHE_MEMCACHED => array( 'factory' => 'ObjectCache::newMemcached' ),
+ CACHE_MEMCACHED => array( 'factory' => 'ObjectCache::newMemcached', 'loggroup' => 'memcached' ),
'apc' => array( 'class' => 'APCBagOStuff' ),
'xcache' => array( 'class' => 'XCacheBagOStuff' ),
'wincache' => array( 'class' => 'WinCacheBagOStuff' ),
- 'memcached-php' => array( 'class' => 'MemcachedPhpBagOStuff' ),
- 'memcached-pecl' => array( 'class' => 'MemcachedPeclBagOStuff' ),
+ 'memcached-php' => array( 'class' => 'MemcachedPhpBagOStuff', 'loggroup' => 'memcached' ),
+ 'memcached-pecl' => array( 'class' => 'MemcachedPeclBagOStuff', 'loggroup' => 'memcached' ),
'hash' => array( 'class' => 'HashBagOStuff' ),
);
/**
- * Map of bloom filter store names to configuration arrays.
- *
- * Example:
- * $wgBloomFilterStores['main'] = array(
- * 'cacheId' => 'main-v1',
- * 'class' => 'BloomCacheRedis',
- * 'redisServers' => array( '127.0.0.1:6379' ),
- * 'redisConfig' => array( 'connectTimeout' => 2 )
- * );
- *
- * A primary bloom filter must be created manually.
- * Example in eval.php:
- * <code>
- * BloomCache::get( 'main' )->init( 'shared', 1000000000, .001 );
- * </code>
- * The size should be as large as practical given wiki size and resources.
- *
- * @since 1.24
- */
-$wgBloomFilterStores = array();
-
-/**
* The expiry time for the parser cache, in seconds.
* The default is 86400 (one day).
*/
@@ -2310,6 +2368,23 @@ $wgClockSkewFudge = 5;
*/
$wgInvalidateCacheOnLocalSettingsChange = true;
+/**
+ * When loading extensions through the extension registration system, this
+ * can be used to invalidate the cache. A good idea would be to set this to
+ * one file, you can just `touch` that one to invalidate the cache
+ *
+ * @par Example:
+ * @code
+ * $wgExtensionInfoMtime = filemtime( "$IP/LocalSettings.php" );
+ * @endcode
+ *
+ * If set to false, the mtime for each individual JSON file will be checked,
+ * which can be slow if a large number of extensions are being loaded.
+ *
+ * @var int|bool
+ */
+$wgExtensionInfoMTime = false;
+
/** @} */ # end of cache settings
/************************************************************************//**
@@ -2686,8 +2761,8 @@ $wgBrowserBlackList = array(
$wgLegacySchemaConversion = false;
/**
- * Enable dates like 'May 12' instead of '12 May', this only takes effect if
- * the interface is set to English.
+ * Enable dates like 'May 12' instead of '12 May', if the default date format
+ * is 'dmy or mdy'.
*/
$wgAmericanDates = false;
@@ -3050,6 +3125,7 @@ $wgEditPageFrameOptions = 'DENY';
* - 'DENY': Do not allow framing. This is recommended for most wikis.
* - 'SAMEORIGIN': Allow framing by pages on the same domain.
* - false: Allow all framing.
+ * Note: $wgBreakFrames will override this for human formatted API output.
*/
$wgApiFrameOptions = 'DENY';
@@ -3088,6 +3164,7 @@ $wgExperimentalHtmlIds = false;
* for the icon, the following keys are used:
* - src: An absolute url to the image to use for the icon, this is recommended
* but not required, however some skins will ignore icons without an image
+ * - srcset: optional additional-resolution images; see HTML5 specs
* - url: The url to use in the a element around the text or icon, if not set an a element will
* not be outputted
* - alt: This is the text form of the icon, it will be displayed without an image in
@@ -3104,7 +3181,9 @@ $wgFooterIcons = array(
),
"poweredby" => array(
"mediawiki" => array(
- // src defaults to "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
+ // Defaults to point at
+ // "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
+ // plus srcset for 1.5x, 2x resolution variants.
"src" => null,
"url" => "//www.mediawiki.org/",
"alt" => "Powered by MediaWiki",
@@ -3161,6 +3240,8 @@ $wgEnableCanonicalServerLink = false;
* <cross-domain-policy>. Without this, an attacker can send their own
* cross-domain policy unless it is prevented by the crossdomain.xml file at
* the domain root.
+ *
+ * @since 1.25
*/
$wgMangleFlashPolicy = true;
@@ -3239,8 +3320,8 @@ $wgResourceModules = array();
* ),
* );
* // Note the '+' character:
- * $wgResourceModuleSkinStyles['+foo'] = array(
- * 'bar' => 'skins/Foo/bar.css',
+ * $wgResourceModuleSkinStyles['foo'] = array(
+ * '+bar' => 'skins/Foo/bar.css',
* );
* @endcode
*
@@ -3267,8 +3348,6 @@ $wgResourceModules = array();
*
* As with $wgResourceModules, paths default to being relative to the MediaWiki root.
* You should always provide a localBasePath and remoteBasePath (or remoteExtPath/remoteSkinPath).
- * Either for all skin styles at once (first example below) or for each module separately (second
- * example).
*
* @par Example:
* @code
@@ -3278,19 +3357,6 @@ $wgResourceModules = array();
* 'remoteSkinPath' => 'Foo',
* 'localBasePath' => __DIR__,
* );
- *
- * $wgResourceModuleSkinStyles['foo'] = array(
- * 'bar' => array(
- * 'bar.css',
- * 'remoteSkinPath' => 'Foo',
- * 'localBasePath' => __DIR__,
- * ),
- * 'quux' => array(
- * 'quux.css',
- * 'remoteSkinPath' => 'Foo',
- * 'localBasePath' => __DIR__,
- * ),
- * );
* @endcode
*/
$wgResourceModuleSkinStyles = array();
@@ -3374,15 +3440,6 @@ $wgResourceLoaderMinifierMaxLineLength = 1000;
$wgIncludeLegacyJavaScript = true;
/**
- * Whether to include the jQuery Migrate library, which lets legacy JS that
- * requires jQuery 1.8.x to work and breaks with 1.9.x+.
- *
- * @since 1.24
- * @deprecated since 1.24, to be removed in 1.25
- */
-$wgIncludejQueryMigrate = false;
-
-/**
* Whether to preload the mediawiki.util module as blocking module in the top
* queue.
*
@@ -3480,6 +3537,9 @@ $wgResourceLoaderExperimentalAsyncLoading = false;
*
* Changes to LESS variables do not trigger cache invalidation.
*
+ * If the LESS variables need to be dynamic, you can use the
+ * ResourceLoaderGetLessVars hook (since 1.25).
+ *
* @par Example:
* @code
* $wgResourceLoaderLESSVars = array(
@@ -3715,6 +3775,18 @@ $wgInterwikiFallbackSite = 'wiki';
/** @} */ # end of Interwiki caching settings.
/**
+ * @name SiteStore caching settings.
+ * @{
+ */
+
+/**
+ * Specify the file location for the Sites json cache file.
+ */
+$wgSitesCacheFile = false;
+
+/** @} */ # end of SiteStore caching settings.
+
+/**
* If local interwikis are set up which allow redirects,
* set this regexp to restrict URLs which will be displayed
* as 'redirected from' links.
@@ -3785,19 +3857,12 @@ $wgNamespacesWithSubpages = array(
* A message with the suffix '-desc' should be added as a description message
* to have extra information on Special:TrackingCategories.
*
+ * @deprecated since 1.25 Extensions should now register tracking categories using
+ * the new extension registration system.
+ *
* @since 1.23
*/
-$wgTrackingCategories = array(
- 'index-category',
- 'noindex-category',
- 'expensive-parserfunction-category',
- 'post-expand-template-argument-category',
- 'post-expand-template-inclusion-category',
- 'hidden-category-category',
- 'broken-file-category',
- 'node-count-exceeded-category',
- 'expansion-depth-exceeded-category',
-);
+$wgTrackingCategories = array();
/**
* Array of namespaces which can be deemed to contain valid "content", as far
@@ -3913,7 +3978,7 @@ $wgUrlProtocols = array(
);
/**
- * If true, removes (substitutes) templates in "~~~~" signatures.
+ * If true, removes (by substituting) templates in signatures.
*/
$wgCleanSignatures = true;
@@ -4109,15 +4174,6 @@ $wgTranscludeCacheExpiry = 3600;
$wgArticleCountMethod = 'link';
/**
- * wgHitcounterUpdateFreq sets how often page counters should be updated, higher
- * values are easier on the database. A value of 1 causes the counters to be
- * updated on every hit, any higher value n cause them to update *on average*
- * every n hits. Should be set to either 1 or something largish, eg 1000, for
- * maximum efficiency.
- */
-$wgHitcounterUpdateFreq = 1;
-
-/**
* How many days user must be idle before he is considered inactive. Will affect
* the number shown on Special:Statistics, Special:ActiveUsers, and the
* {{NUMBEROFACTIVEUSERS}} magic word in wikitext.
@@ -4279,7 +4335,7 @@ $wgDefaultUserOptions = array(
'enotifrevealaddr' => 0,
'enotifusertalkpages' => 1,
'enotifwatchlistpages' => 1,
- 'extendwatchlist' => 0,
+ 'extendwatchlist' => 1,
'fancysig' => 0,
'forceeditsummary' => 0,
'gender' => 'unknown',
@@ -4305,7 +4361,7 @@ $wgDefaultUserOptions = array(
'thumbsize' => 5,
'underline' => 2,
'uselivepreview' => 0,
- 'usenewrc' => 0,
+ 'usenewrc' => 1,
'watchcreations' => 1,
'watchdefault' => 1,
'watchdeletion' => 0,
@@ -4517,6 +4573,8 @@ $wgGroupPermissions['user']['reupload-shared'] = true;
$wgGroupPermissions['user']['minoredit'] = true;
$wgGroupPermissions['user']['purge'] = true; // can use ?action=purge without clicking "ok"
$wgGroupPermissions['user']['sendemail'] = true;
+$wgGroupPermissions['user']['applychangetags'] = true;
+$wgGroupPermissions['user']['changetags'] = true;
// Implicit group for accounts that pass $wgAutoConfirmAge
$wgGroupPermissions['autoconfirmed']['autoconfirmed'] = true;
@@ -4577,6 +4635,7 @@ $wgGroupPermissions['sysop']['suppressredirect'] = true;
#$wgGroupPermissions['sysop']['pagelang'] = true;
#$wgGroupPermissions['sysop']['upload_by_url'] = true;
$wgGroupPermissions['sysop']['mergehistory'] = true;
+$wgGroupPermissions['sysop']['managechangetags'] = true;
// Permission to change users' group assignments
$wgGroupPermissions['bureaucrat']['userrights'] = true;
@@ -4793,7 +4852,6 @@ $wgAutopromote = array(
* @endcode
* Where event is either:
* - 'onEdit' (when user edits)
- * - 'onView' (when user views the wiki)
*
* Criteria has the same format as $wgAutopromote
*
@@ -4802,7 +4860,6 @@ $wgAutopromote = array(
*/
$wgAutopromoteOnce = array(
'onEdit' => array(),
- 'onView' => array()
);
/**
@@ -4992,6 +5049,17 @@ $wgRateLimits = array(
'ip' => null,
'subnet' => null,
),
+ 'stashedit' => array( // stashing edits into cache before save
+ 'anon' => null,
+ 'user' => null,
+ 'newbie' => null,
+ 'ip' => null,
+ 'subnet' => null,
+ ),
+ 'changetag' => array( // adding or removing change tags
+ 'user' => null,
+ 'newbie' => null,
+ ),
);
/**
@@ -5209,9 +5277,11 @@ $wgDebugDumpSqlLength = 500;
* Log destinations may be one of the following:
* - false to completely remove from the output, including from $wgDebugLogFile.
* - string values specifying a filename or URI.
- * - associative array mapping 'destination' key to the desired filename or URI.
- * The associative array may also contain a 'sample' key with an integer value,
- * specifying a sampling factor.
+ * - associative array with keys:
+ * - 'destination' desired filename or URI.
+ * - 'sample' an integer value, specifying a sampling factor (optional)
+ * - 'level' A \Psr\Log\LogLevel constant, indicating the minimum level
+ * to log (optional, since 1.25)
*
* @par Example:
* @code
@@ -5220,15 +5290,41 @@ $wgDebugDumpSqlLength = 500;
*
* @par Advanced example:
* @code
- * $wgDebugLogGroups['memcached'] = (
+ * $wgDebugLogGroups['memcached'] = array(
* 'destination' => '/var/log/mediawiki/memcached.log',
* 'sample' => 1000, // log 1 message out of every 1,000.
+ * 'level' => \Psr\Log\LogLevel::WARNING
* );
* @endcode
*/
$wgDebugLogGroups = array();
/**
+ * Default service provider for creating Psr\Log\LoggerInterface instances.
+ *
+ * The value should be an array suitable for use with
+ * ObjectFactory::getObjectFromSpec(). The created object is expected to
+ * implement the MediaWiki\Logger\Spi interface. See ObjectFactory for additional
+ * details.
+ *
+ * Alternately the MediaWiki\Logger\LoggerFactory::registerProvider method can
+ * be called to inject an MediaWiki\Logger\Spi instance into the LoggerFactory
+ * and bypass the use of this configuration variable entirely.
+ *
+ * @par To completely disable logging:
+ * @code
+ * $wgMWLoggerDefaultSpi = array( 'class' => '\\MediaWiki\\Logger\\NullSpi' );
+ * @endcode
+ *
+ * @since 1.25
+ * @var array $wgMWLoggerDefaultSpi
+ * @see MwLogger
+ */
+$wgMWLoggerDefaultSpi = array(
+ 'class' => '\\MediaWiki\\Logger\\LegacySpi',
+);
+
+/**
* Display debug data at the bottom of the main content area.
*
* Useful for developers and technical users trying to working on a closed wiki.
@@ -5308,6 +5404,7 @@ $wgDeprecationReleaseLimit = false;
/**
* Only record profiling info for pages that took longer than this
+ * @deprecated since 1.25: set $wgProfiler['threshold'] instead.
*/
$wgProfileLimit = 0.0;
@@ -5326,8 +5423,10 @@ $wgProfileCallTree = false;
/**
* Should application server host be put into profiling table
+ *
+ * @deprecated set $wgProfiler['perhost'] = true instead
*/
-$wgProfilePerHost = false;
+$wgProfilePerHost = null;
/**
* Host for UDP profiler.
@@ -5335,14 +5434,18 @@ $wgProfilePerHost = false;
* The host should be running a daemon which can be obtained from MediaWiki
* Git at:
* http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
+ *
+ * @deprecated set $wgProfiler['udphost'] instead
*/
-$wgUDPProfilerHost = '127.0.0.1';
+$wgUDPProfilerHost = null;
/**
* Port for UDP profiler.
* @see $wgUDPProfilerHost
+ *
+ * @deprecated set $wgProfiler['udpport'] instead
*/
-$wgUDPProfilerPort = '3811';
+$wgUDPProfilerPort = null;
/**
* Format string for the UDP profiler. The UDP profiler invokes sprintf() with
@@ -5352,13 +5455,10 @@ $wgUDPProfilerPort = '3811';
*
* @see $wgStatsFormatString
* @since 1.22
+ *
+ * @deprecated set $wgProfiler['udpformat'] instead
*/
-$wgUDPProfilerFormatString = "%s - %d %f %f %f %f %s\n";
-
-/**
- * Output debug message on every wfProfileIn/wfProfileOut
- */
-$wgDebugFunctionEntry = false;
+$wgUDPProfilerFormatString = null;
/**
* Destination for wfIncrStats() data...
@@ -5390,12 +5490,6 @@ $wgAggregateStatsID = false;
$wgStatsFormatString = "stats/%s - %s 1 1 1 1 %s\n";
/**
- * Whereas to count the number of time an article is viewed.
- * Does not work if pages are cached (for example with squid).
- */
-$wgDisableCounters = false;
-
-/**
* InfoAction retrieves a list of transclusion links (both to and from).
* This number puts a limit on that query in the case of highly transcluded
* templates.
@@ -5430,25 +5524,6 @@ $wgParserTestFiles = array(
$wgEnableJavaScriptTest = false;
/**
- * Configuration for javascript testing.
- */
-$wgJavaScriptTestConfig = array(
- 'qunit' => array(
- // Page where documentation can be found relevant to the QUnit test suite being ran.
- // Used in the intro paragraph on [[Special:JavaScriptTest/qunit]] for the
- // documentation link in the "javascripttest-qunit-intro" message.
- 'documentation' => '//www.mediawiki.org/wiki/Manual:JavaScript_unit_testing',
- // If you are submitting the QUnit test suite to a TestSwarm instance,
- // point this to the "inject.js" script of that instance. This is was registers
- // the QUnit hooks to extract the test results and push them back up into the
- // TestSwarm database.
- // @example 'http://localhost/testswarm/js/inject.js'
- // @example '//integration.mediawiki.org/testswarm/js/inject.js'
- 'testswarm-injectjs' => false,
- ),
-);
-
-/**
* Overwrite the caching key prefix with custom value.
* @since 1.19
*/
@@ -5494,10 +5569,25 @@ $wgSearchHighlightBoundaries = '[\p{Z}\p{P}\p{C}]';
* PHP wrapper to avoid firing up mediawiki for every keystroke
*
* Placeholders: {searchTerms}
+ *
+ * @deprecated since 1.25 Use $wgOpenSearchTemplates['application/x-suggestions+json'] instead
*/
$wgOpenSearchTemplate = false;
/**
+ * Templates for OpenSearch suggestions, defaults to API action=opensearch
+ *
+ * Sites with heavy load would typically have these point to a custom
+ * PHP wrapper to avoid firing up mediawiki for every keystroke
+ *
+ * Placeholders: {searchTerms}
+ */
+$wgOpenSearchTemplates = array(
+ 'application/x-suggestions+json' => false,
+ 'application/x-suggestions+xml' => false,
+);
+
+/**
* Enable OpenSearch suggestions requested by MediaWiki. Set this to
* false if you've disabled scripts that use api?action=opensearch and
* want reduce load caused by cached scripts still pulling suggestions.
@@ -5512,6 +5602,11 @@ $wgEnableOpenSearchSuggest = true;
$wgOpenSearchDefaultLimit = 10;
/**
+ * Minimum length of extract in <Description>. Actual extracts will last until the end of sentence.
+ */
+$wgOpenSearchDescriptionLength = 100;
+
+/**
* Expiry time for search suggestion responses
*/
$wgSearchSuggestCacheExpiry = 1200;
@@ -5722,9 +5817,9 @@ $wgGitRepositoryViewers = array(
/**
* Recentchanges items are periodically purged; entries older than this many
* seconds will go.
- * Default: 13 weeks = about three months
+ * Default: 90 days = about three months
*/
-$wgRCMaxAge = 13 * 7 * 24 * 3600;
+$wgRCMaxAge = 90 * 24 * 3600;
/**
* Filter $wgRCLinkDays by $wgRCMaxAge to avoid showing links for numbers
@@ -5877,11 +5972,6 @@ $wgAdvertisedFeedTypes = array( 'atom' );
$wgRCShowWatchingUsers = false; # UPO
/**
- * Show watching users in Page views
- */
-$wgPageShowWatchingUsers = false;
-
-/**
* Show the amount of changed characters in recent changes
*/
$wgRCShowChangedSize = true;
@@ -6160,6 +6250,8 @@ $wgExtensionMessagesFiles = array();
* en.json, de.json, etc. Extensions with messages in multiple places may specify an array of
* message directories.
*
+ * Message directories in core should be added to LocalisationCache::getMessagesDirs()
+ *
* @par Simple example:
* @code
* $wgMessagesDirs['Example'] = __DIR__ . '/i18n';
@@ -6175,10 +6267,7 @@ $wgExtensionMessagesFiles = array();
* @endcode
* @since 1.23
*/
-$wgMessagesDirs = array(
- 'core' => "$IP/languages/i18n",
- 'oojs-ui' => "$IP/resources/lib/oojs-ui/i18n",
-);
+$wgMessagesDirs = array();
/**
* Array of files with list(s) of extension entry points to be used in
@@ -6254,7 +6343,7 @@ $wgAutoloadAttemptLowercase = true;
* 'version' => '1.9.0',
* 'url' => 'http://example.org/example-extension/',
* 'descriptionmsg' => 'exampleextension-desc',
- * 'license-name' => 'GPL-2.0',
+ * 'license-name' => 'GPL-2.0+',
* );
* @endcode
*
@@ -6288,7 +6377,7 @@ $wgAutoloadAttemptLowercase = true;
* localizable message (omit in favour of 'descriptionmsg').
*
* - license-name: Short name of the license (used as label for the link), such
- * as "GPL-2.0" or "MIT" (https://spdx.org/licenses/ for a list of identifiers).
+ * as "GPL-2.0+" or "MIT" (https://spdx.org/licenses/ for a list of identifiers).
*/
$wgExtensionCredits = array();
@@ -6340,7 +6429,6 @@ $wgHooks = array();
*/
$wgJobClasses = array(
'refreshLinks' => 'RefreshLinksJob',
- 'refreshLinks2' => 'RefreshLinksJob2', // b/c
'htmlCacheUpdate' => 'HTMLCacheUpdateJob',
'sendMail' => 'EmaillingJob',
'enotifNotify' => 'EnotifNotifyJob',
@@ -6348,6 +6436,10 @@ $wgJobClasses = array(
'uploadFromUrl' => 'UploadFromUrlJob',
'AssembleUploadChunks' => 'AssembleUploadChunksJob',
'PublishStashedFile' => 'PublishStashedFileJob',
+ 'ThumbnailRender' => 'ThumbnailRenderJob',
+ 'recentChangesUpdate' => 'RecentChangesUpdateJob',
+ 'refreshLinksPrioritized' => 'RefreshLinksJob', // for cascading protection
+ 'enqueue' => 'EnqueueJob', // local queue for multi-DC setups
'null' => 'NullJob'
);
@@ -6390,7 +6482,7 @@ $wgJobTypeConf = array(
* These settings should be global to all wikis.
*/
$wgJobQueueAggregator = array(
- 'class' => 'JobQueueAggregatorMemc'
+ 'class' => 'JobQueueAggregatorNull'
);
/**
@@ -6398,8 +6490,7 @@ $wgJobQueueAggregator = array(
* Expensive Querypages are already updated.
*/
$wgSpecialPageCacheUpdates = array(
- 'Statistics' => array( 'SiteStatsUpdate', 'cacheUpdate' ),
- 'Activeusers' => array( 'SpecialActiveUsers', 'cacheUpdate' ),
+ 'Statistics' => array( 'SiteStatsUpdate', 'cacheUpdate' )
);
/**
@@ -6497,6 +6588,8 @@ $wgLogTypes = array(
'patrol',
'merge',
'suppress',
+ 'tag',
+ 'managetags',
);
/**
@@ -6533,7 +6626,8 @@ $wgLogRestrictions = array(
* for the link text.
*/
$wgFilterLogTypes = array(
- 'patrol' => true
+ 'patrol' => true,
+ 'tag' => true,
);
/**
@@ -6589,22 +6683,14 @@ $wgLogHeaders = array(
* Extensions with custom log types may add to this array.
*/
$wgLogActions = array(
- 'block/block' => 'blocklogentry',
- 'block/unblock' => 'unblocklogentry',
- 'block/reblock' => 'reblock-logentry',
'protect/protect' => 'protectedarticle',
'protect/modify' => 'modifiedarticleprotection',
'protect/unprotect' => 'unprotectedarticle',
'protect/move_prot' => 'movedarticleprotection',
- 'import/upload' => 'import-logentry-upload',
- 'import/interwiki' => 'import-logentry-interwiki',
- 'merge/merge' => 'pagemerge-logentry',
- 'suppress/block' => 'blocklogentry',
- 'suppress/reblock' => 'reblock-logentry',
);
/**
- * The same as above, but here values are names of functions,
+ * The same as above, but here values are names of classes,
* not messages.
* @see LogPage::actionText
* @see LogFormatter
@@ -6622,9 +6708,22 @@ $wgLogActionsHandlers = array(
'patrol/patrol' => 'PatrolLogFormatter',
'rights/rights' => 'RightsLogFormatter',
'rights/autopromote' => 'RightsLogFormatter',
- 'upload/upload' => 'LogFormatter',
- 'upload/overwrite' => 'LogFormatter',
- 'upload/revert' => 'LogFormatter',
+ 'upload/upload' => 'UploadLogFormatter',
+ 'upload/overwrite' => 'UploadLogFormatter',
+ 'upload/revert' => 'UploadLogFormatter',
+ 'merge/merge' => 'MergeLogFormatter',
+ 'tag/update' => 'TagLogFormatter',
+ 'managetags/create' => 'LogFormatter',
+ 'managetags/delete' => 'LogFormatter',
+ 'managetags/activate' => 'LogFormatter',
+ 'managetags/deactivate' => 'LogFormatter',
+ 'block/block' => 'BlockLogFormatter',
+ 'block/unblock' => 'BlockLogFormatter',
+ 'block/reblock' => 'BlockLogFormatter',
+ 'suppress/block' => 'BlockLogFormatter',
+ 'suppress/reblock' => 'BlockLogFormatter',
+ 'import/upload' => 'LogFormatter',
+ 'import/interwiki' => 'LogFormatter',
);
/**
@@ -6691,6 +6790,7 @@ $wgActions = array(
'credits' => true,
'delete' => true,
'edit' => true,
+ 'editchangetags' => 'SpecialPageAction',
'history' => true,
'info' => true,
'markpatrolled' => true,
@@ -6699,7 +6799,7 @@ $wgActions = array(
'raw' => true,
'render' => true,
'revert' => true,
- 'revisiondelete' => true,
+ 'revisiondelete' => 'SpecialPageAction',
'rollback' => true,
'submit' => true,
'unprotect' => true,
@@ -6967,6 +7067,12 @@ $wgAjaxUploadDestCheck = true;
$wgAjaxLicensePreview = true;
/**
+ * Have clients send edits to be prepared when filling in edit summaries.
+ * This gives the server a head start on the expensive parsing operation.
+ */
+$wgAjaxEditStash = true;
+
+/**
* Settings for incoming cross-site AJAX requests:
* Newer browsers support cross-site AJAX when the target resource allows requests
* from the origin domain by the Access-Control-Allow-Origin header.
@@ -7084,6 +7190,18 @@ $wgAsyncHTTPTimeout = 25;
$wgHTTPProxy = false;
/**
+ * Local virtual hosts.
+ *
+ * This lists domains that are configured as virtual hosts on the same machine.
+ * If a request is to be made to a domain listed here, or any subdomain thereof,
+ * then no proxy will be used.
+ * Command-line scripts are not affected by this setting and will always use
+ * proxy if it is configured.
+ * @since 1.25
+ */
+$wgLocalVirtualHosts = array();
+
+/**
* Timeout for connections done internally (in seconds)
* Only works for curl
*/
@@ -7286,13 +7404,21 @@ $wgPagePropsHaveSortkey = true;
$wgHttpsPort = 443;
/**
- * Secret and algorithm for hmac-based key derivation function (fast,
+ * Secret for hmac-based key derivation function (fast,
* cryptographically secure random numbers).
* This should be set in LocalSettings.php, otherwise wgSecretKey will
* be used.
+ * See also: $wgHKDFAlgorithm
* @since 1.24
*/
$wgHKDFSecret = false;
+
+/**
+ * Algorithm for hmac-based key derivation function (fast,
+ * cryptographically secure random numbers).
+ * See also: $wgHKDFSecret
+ * @since 1.24
+ */
$wgHKDFAlgorithm = 'sha256';
/**
@@ -7312,6 +7438,34 @@ $wgPageLanguageUseDB = false;
$wgUseLinkNamespaceDBFields = true;
/**
+ * Global configuration variable for Virtual REST Services.
+ * Parameters for different services are to be declared inside
+ * $wgVirtualRestConfig['modules'], which is to be treated as an associative
+ * array. Global parameters will be merged with service-specific ones. The
+ * result will then be passed to VirtualRESTService::__construct() in the
+ * module.
+ *
+ * Example config for Parsoid:
+ *
+ * $wgVirtualRestConfig['modules']['parsoid'] = array(
+ * 'url' => 'http://localhost:8000',
+ * 'prefix' => 'enwiki',
+ * );
+ *
+ * @var array
+ * @since 1.25
+ */
+$wgVirtualRestConfig = array(
+ 'modules' => array(),
+ 'global' => array(
+ # Timeout in seconds
+ 'timeout' => 360,
+ 'forwardCookies' => false,
+ 'HTTPProxy' => null
+ )
+);
+
+/**
* For really cool vim folding this needs to be at the end:
* vim: foldmarker=@{,@} foldmethod=marker
* @}
diff --git a/includes/Defines.php b/includes/Defines.php
index 017e9ea4..c9263da9 100644
--- a/includes/Defines.php
+++ b/includes/Defines.php
@@ -2,10 +2,6 @@
/**
* A few constants that might be needed during LocalSettings.php.
*
- * Note: these constants must all be resolvable at compile time by HipHop,
- * since this file will not be executed during request startup for a compiled
- * 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
@@ -152,12 +148,13 @@ define( 'AV_SCAN_FAILED', false ); #scan failed (scanner not found or error in
/**@{
* Anti-lock flags
- * See DefaultSettings.php for a description
+ * Was used by $wgAntiLockFlags, which was removed with 1.25
+ * Constants kept to not have warnings when used in LocalSettings
*/
define( 'ALF_PRELOAD_LINKS', 1 ); // unused
define( 'ALF_PRELOAD_EXISTENCE', 2 ); // unused
-define( 'ALF_NO_LINK_LOCK', 4 );
-define( 'ALF_NO_BLOCK_LOCK', 8 );
+define( 'ALF_NO_LINK_LOCK', 4 ); // unused
+define( 'ALF_NO_BLOCK_LOCK', 8 ); // unused
/**@}*/
/**@{
@@ -206,15 +203,15 @@ define( 'LIST_OR', 4 );
/**
* Unicode and normalisation related
*/
-require_once __DIR__ . '/normal/UtfNormalDefines.php';
+require_once __DIR__ . '/libs/normal/UtfNormalDefines.php';
/**@{
* Hook support constants
*/
-define( 'MW_SUPPORTS_EDITFILTERMERGED', 1 );
define( 'MW_SUPPORTS_PARSERFIRSTCALLINIT', 1 );
define( 'MW_SUPPORTS_LOCALISATIONCACHE', 1 );
define( 'MW_SUPPORTS_CONTENTHANDLER', 1 );
+define( 'MW_EDITFILTERMERGED_SUPPORTS_API', 1 );
/**@}*/
/** Support for $wgResourceModules */
@@ -223,6 +220,12 @@ define( 'MW_SUPPORTS_RESOURCE_MODULES', 1 );
/**@{
* Allowed values for Parser::$mOutputType
* Parameter to Parser::startExternalParse().
+ * Use of Parser consts is preferred:
+ * - Parser::OT_HTML
+ * - Parser::OT_WIKI
+ * - Parser::OT_PREPROCESS
+ * - Parser::OT_MSG
+ * - Parser::OT_PLAIN
*/
define( 'OT_HTML', 1 );
define( 'OT_WIKI', 2 );
@@ -233,16 +236,14 @@ define( 'OT_PLAIN', 4 );
/**@{
* Flags for Parser::setFunctionHook
+ * Use of Parser consts is preferred:
+ * - Parser::SFH_NO_HASH
+ * - Parser::SFH_OBJECT_ARGS
*/
define( 'SFH_NO_HASH', 1 );
define( 'SFH_OBJECT_ARGS', 2 );
/**@}*/
-/**
- * Flags for Parser::replaceLinkHolders
- */
-define( 'RLH_FOR_UPDATE', 1 );
-
/**@{
* Autopromote conditions (must be here and not in Autopromote.php, so that
* they're loaded for DefaultSettings.php before AutoLoader.php)
diff --git a/includes/EditPage.php b/includes/EditPage.php
index 38c80ba8..8d27eac8 100644
--- a/includes/EditPage.php
+++ b/includes/EditPage.php
@@ -151,6 +151,18 @@ class EditPage {
const AS_NO_CHANGE_CONTENT_MODEL = 235;
/**
+ * Status: user tried to create self-redirect (redirect to the same article) and
+ * wpIgnoreSelfRedirect == false
+ */
+ const AS_SELF_REDIRECT = 236;
+
+ /**
+ * Status: an error relating to change tagging. Look at the message key for
+ * more details
+ */
+ const AS_CHANGE_TAG_ERROR = 237;
+
+ /**
* Status: can't parse content
*/
const AS_PARSE_ERROR = 240;
@@ -256,6 +268,12 @@ class EditPage {
/** @var bool */
protected $allowBlankArticle = false;
+ /** @var bool */
+ protected $selfRedirect = false;
+
+ /** @var bool */
+ protected $allowSelfRedirect = false;
+
/** @var string */
public $autoSumm = '';
@@ -321,6 +339,9 @@ class EditPage {
/** @var int */
public $oldid = 0;
+ /** @var int */
+ public $parentRevId = 0;
+
/** @var string */
public $editintro = '';
@@ -336,6 +357,9 @@ class EditPage {
/** @var null|string */
public $contentFormat = null;
+ /** @var null|array */
+ public $changeTags = null;
+
# Placeholders for text injection by hooks (must be HTML)
# extensions should take care to _append_ to the present value
@@ -362,9 +386,6 @@ class EditPage {
/** @var bool */
protected $edit;
- /** @var bool */
- public $live;
-
/**
* @param Article $article
*/
@@ -448,29 +469,21 @@ class EditPage {
function edit() {
global $wgOut, $wgRequest, $wgUser;
// Allow extensions to modify/prevent this form or submission
- if ( !wfRunHooks( 'AlternateEdit', array( $this ) ) ) {
+ if ( !Hooks::run( 'AlternateEdit', array( $this ) ) ) {
return;
}
- wfProfileIn( __METHOD__ );
wfDebug( __METHOD__ . ": enter\n" );
// If they used redlink=1 and the page exists, redirect to the main article
if ( $wgRequest->getBool( 'redlink' ) && $this->mTitle->exists() ) {
$wgOut->redirect( $this->mTitle->getFullURL() );
- wfProfileOut( __METHOD__ );
return;
}
$this->importFormData( $wgRequest );
$this->firsttime = false;
- if ( $this->live ) {
- $this->livePreview();
- wfProfileOut( __METHOD__ );
- return;
- }
-
if ( wfReadOnly() && $this->save ) {
// Force preview
$this->save = false;
@@ -492,7 +505,7 @@ class EditPage {
}
}
- $permErrors = $this->getEditPermissionErrors();
+ $permErrors = $this->getEditPermissionErrors( $this->save ? 'secure' : 'full' );
if ( $permErrors ) {
wfDebug( __METHOD__ . ": User can't edit\n" );
// Auto-block user's IP if the account was "hard" blocked
@@ -500,12 +513,9 @@ class EditPage {
$this->displayPermissionsError( $permErrors );
- wfProfileOut( __METHOD__ );
return;
}
- wfProfileIn( __METHOD__ . "-business-end" );
-
$this->isConflict = false;
// css / js subpages of user pages get a special treatment
$this->isCssJsSubpage = $this->mTitle->isCssJsSubpage();
@@ -525,9 +535,9 @@ class EditPage {
# in the back door with a hand-edited submission URL.
if ( 'save' == $this->formtype ) {
- if ( !$this->attemptSave() ) {
- wfProfileOut( __METHOD__ . "-business-end" );
- wfProfileOut( __METHOD__ );
+ $resultDetails = null;
+ $status = $this->attemptSave( $resultDetails );
+ if ( !$this->handleStatus( $status, $resultDetails ) ) {
return;
}
}
@@ -537,34 +547,37 @@ class EditPage {
if ( 'initial' == $this->formtype || $this->firsttime ) {
if ( $this->initialiseForm() === false ) {
$this->noSuchSectionPage();
- wfProfileOut( __METHOD__ . "-business-end" );
- wfProfileOut( __METHOD__ );
return;
}
if ( !$this->mTitle->getArticleID() ) {
- wfRunHooks( 'EditFormPreloadText', array( &$this->textbox1, &$this->mTitle ) );
+ Hooks::run( 'EditFormPreloadText', array( &$this->textbox1, &$this->mTitle ) );
} else {
- wfRunHooks( 'EditFormInitialText', array( $this ) );
+ Hooks::run( 'EditFormInitialText', array( $this ) );
}
}
$this->showEditForm();
- wfProfileOut( __METHOD__ . "-business-end" );
- wfProfileOut( __METHOD__ );
}
/**
+ * @param string $rigor Same format as Title::getUserPermissionErrors()
* @return array
*/
- protected function getEditPermissionErrors() {
+ protected function getEditPermissionErrors( $rigor = 'secure' ) {
global $wgUser;
- $permErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $wgUser );
+
+ $permErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $wgUser, $rigor );
# Can this title be created?
if ( !$this->mTitle->exists() ) {
- $permErrors = array_merge( $permErrors,
- wfArrayDiff2( $this->mTitle->getUserPermissionsErrors( 'create', $wgUser ), $permErrors ) );
+ $permErrors = array_merge(
+ $permErrors,
+ wfArrayDiff2(
+ $this->mTitle->getUserPermissionsErrors( 'create', $wgUser, $rigor ),
+ $permErrors
+ )
+ );
}
# Ignore some permissions errors when a user is just previewing/viewing diffs
$remove = array();
@@ -576,6 +589,7 @@ class EditPage {
}
}
$permErrors = wfArrayDiff2( $permErrors, $remove );
+
return $permErrors;
}
@@ -612,7 +626,7 @@ class EditPage {
throw new PermissionsError( $action, $permErrors );
}
- wfRunHooks( 'EditPage::showReadOnlyForm:initial', array( $this, &$wgOut ) );
+ Hooks::run( 'EditPage::showReadOnlyForm:initial', array( $this, &$wgOut ) );
$wgOut->setRobotPolicy( 'noindex,nofollow' );
$wgOut->setPageTitle( wfMessage(
@@ -717,13 +731,10 @@ class EditPage {
function importFormData( &$request ) {
global $wgContLang, $wgUser;
- wfProfileIn( __METHOD__ );
-
# Section edit can come from either the form or a link
$this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
if ( $this->section !== null && $this->section !== '' && !$this->isSectionEditSupported() ) {
- wfProfileOut( __METHOD__ );
throw new ErrorPageError( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' );
}
@@ -738,13 +749,10 @@ class EditPage {
// Skip this if wpTextbox2 has input, it indicates that we came
// from a conflict page with raw page text, not a custom form
// modified by subclasses
- wfProfileIn( get_class( $this ) . "::importContentFormData" );
$textbox1 = $this->importContentFormData( $request );
if ( $textbox1 !== null ) {
$this->textbox1 = $textbox1;
}
-
- wfProfileOut( get_class( $this ) . "::importContentFormData" );
}
# Truncate for whole multibyte characters
@@ -785,7 +793,8 @@ class EditPage {
// TODO: softened the check for cutover. Once we determine
// that it is safe, we should complete the transition by
// removing the "edittime" clause.
- $this->incompleteForm = ( !$request->getVal( 'wpUltimateParam' ) && is_null( $this->edittime ) );
+ $this->incompleteForm = ( !$request->getVal( 'wpUltimateParam' )
+ && is_null( $this->edittime ) );
}
if ( $this->incompleteForm ) {
# If the form is incomplete, force to preview.
@@ -793,8 +802,7 @@ class EditPage {
wfDebug( "POST DATA: " . var_export( $_POST, true ) . "\n" );
$this->preview = true;
} else {
- /* Fallback for live preview */
- $this->preview = $request->getCheck( 'wpPreview' ) || $request->getCheck( 'wpLivePreview' );
+ $this->preview = $request->getCheck( 'wpPreview' );
$this->diff = $request->getCheck( 'wpDiff' );
// Remember whether a save was requested, so we can indicate
@@ -844,6 +852,15 @@ class EditPage {
$this->autoSumm = $request->getText( 'wpAutoSummary' );
$this->allowBlankArticle = $request->getBool( 'wpIgnoreBlankArticle' );
+ $this->allowSelfRedirect = $request->getBool( 'wpIgnoreSelfRedirect' );
+
+ $changeTags = $request->getVal( 'wpChangeTags' );
+ if ( is_null( $changeTags ) || $changeTags === '' ) {
+ $this->changeTags = array();
+ } else {
+ $this->changeTags = array_filter( array_map( 'trim', explode( ',',
+ $changeTags ) ) );
+ }
} else {
# Not a posted form? Start with nothing.
wfDebug( __METHOD__ . ": Not a posted form.\n" );
@@ -880,6 +897,7 @@ class EditPage {
}
$this->oldid = $request->getInt( 'oldid' );
+ $this->parentRevId = $request->getInt( 'parentRevId' );
$this->bot = $request->getBool( 'bot', true );
$this->nosummary = $request->getBool( 'nosummary' );
@@ -905,15 +923,13 @@ class EditPage {
* allowed.
*/
- $this->live = $request->getCheck( 'live' );
$this->editintro = $request->getText( 'editintro',
// Custom edit intro for new sections
$this->section === 'new' ? 'MediaWiki:addsection-editintro' : '' );
// Allow extensions to modify form data
- wfRunHooks( 'EditPage::importFormData', array( $this, $request ) );
+ Hooks::run( 'EditPage::importFormData', array( $this, $request ) );
- wfProfileOut( __METHOD__ );
}
/**
@@ -974,8 +990,6 @@ class EditPage {
protected function getContentObject( $def_content = null ) {
global $wgOut, $wgRequest, $wgUser, $wgContLang;
- wfProfileIn( __METHOD__ );
-
$content = false;
// For message page not locally set, use the i18n message.
@@ -1087,7 +1101,6 @@ class EditPage {
}
}
- wfProfileOut( __METHOD__ );
return $content;
}
@@ -1280,18 +1293,20 @@ class EditPage {
/**
* Attempt submission
+ * @param array $resultDetails See docs for $result in internalAttemptSave
* @throws UserBlockedError|ReadOnlyError|ThrottledError|PermissionsError
- * @return bool False if output is done, true if the rest of the form should be displayed
+ * @return Status The resulting status object.
*/
- public function attemptSave() {
+ public function attemptSave( &$resultDetails = false ) {
global $wgUser;
- $resultDetails = false;
# Allow bots to exempt some edits from bot flagging
$bot = $wgUser->isAllowed( 'bot' ) && $this->bot;
$status = $this->internalAttemptSave( $resultDetails, $bot );
- return $this->handleStatus( $status, $resultDetails );
+ Hooks::run( 'EditPage::attemptSave:after', array( $this, $status, $resultDetails ) );
+
+ return $status;
}
/**
@@ -1329,6 +1344,7 @@ class EditPage {
case self::AS_MAX_ARTICLE_SIZE_EXCEEDED:
case self::AS_END:
case self::AS_BLANK_ARTICLE:
+ case self::AS_SELF_REDIRECT:
return true;
case self::AS_HOOK_ERROR:
@@ -1349,7 +1365,7 @@ class EditPage {
$sectionanchor = $resultDetails['sectionanchor'];
// Give extensions a chance to modify URL query on update
- wfRunHooks(
+ Hooks::run(
'ArticleUpdateBeforeRedirect',
array( $this->mArticle, &$sectionanchor, &$extraQuery )
);
@@ -1415,8 +1431,8 @@ class EditPage {
protected function runPostMergeFilters( Content $content, Status $status, User $user ) {
// Run old style post-section-merge edit filter
if ( !ContentHandler::runLegacyHooks( 'EditFilterMerged',
- array( $this, $content, &$this->hookError, $this->summary ) ) ) {
-
+ array( $this, $content, &$this->hookError, $this->summary ) )
+ ) {
# Error messages etc. could be handled within the hook...
$status->fatal( 'hookaborted' );
$status->value = self::AS_HOOK_ERROR;
@@ -1429,15 +1445,24 @@ class EditPage {
}
// Run new style post-section-merge edit filter
- if ( !wfRunHooks( 'EditFilterMergedContent',
- array( $this->mArticle->getContext(), $content, $status, $this->summary,
- $user, $this->minoredit ) ) ) {
-
+ if ( !Hooks::run( 'EditFilterMergedContent',
+ array( $this->mArticle->getContext(), $content, $status, $this->summary,
+ $user, $this->minoredit ) )
+ ) {
# Error messages etc. could be handled within the hook...
- // XXX: $status->value may already be something informative...
- $this->hookError = $status->getWikiText();
- $status->fatal( 'hookaborted' );
- $status->value = self::AS_HOOK_ERROR;
+ if ( $status->isGood() ) {
+ $status->fatal( 'hookaborted' );
+ // Not setting $this->hookError here is a hack to allow the hook
+ // to cause a return to the edit page without $this->hookError
+ // being set. This is used by ConfirmEdit to display a captcha
+ // without any error message cruft.
+ } else {
+ $this->hookError = $status->getWikiText();
+ }
+ // Use the existing $status->value if the hook set it
+ if ( !$status->value ) {
+ $status->value = self::AS_HOOK_ERROR;
+ }
return false;
} elseif ( !$status->isOK() ) {
# ...or the hook could be expecting us to produce an error
@@ -1510,15 +1535,10 @@ class EditPage {
$status = Status::newGood();
- wfProfileIn( __METHOD__ );
- wfProfileIn( __METHOD__ . '-checks' );
-
- if ( !wfRunHooks( 'EditPage::attemptSave', array( $this ) ) ) {
+ if ( !Hooks::run( 'EditPage::attemptSave', array( $this ) ) ) {
wfDebug( "Hook 'EditPage::attemptSave' aborted article saving\n" );
$status->fatal( 'hookaborted' );
$status->value = self::AS_HOOK_ERROR;
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1535,8 +1555,6 @@ class EditPage {
);
$status->fatal( 'spamprotectionmatch', false );
$status->value = self::AS_SPAM_ERROR;
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1551,8 +1569,6 @@ class EditPage {
$ex->getMessage()
);
$status->value = self::AS_PARSE_ERROR;
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1564,9 +1580,6 @@ class EditPage {
$code = $wgUser->isAnon() ? self::AS_IMAGE_REDIRECT_ANON : self::AS_IMAGE_REDIRECT_LOGGED;
$status->setResult( false, $code );
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
-
return $status;
}
@@ -1595,26 +1608,20 @@ class EditPage {
wfDebugLog( 'SpamRegex', "$ip spam regex hit [[$pdbk]]: \"$match\"" );
$status->fatal( 'spamprotectionmatch', $match );
$status->value = self::AS_SPAM_ERROR;
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
- if ( !wfRunHooks(
+ if ( !Hooks::run(
'EditFilter',
array( $this, $this->textbox1, $this->section, &$this->hookError, $this->summary ) )
) {
# Error messages etc. could be handled within the hook...
$status->fatal( 'hookaborted' );
$status->value = self::AS_HOOK_ERROR;
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
} elseif ( $this->hookError != '' ) {
# ...or the hook could be expecting us to produce an error
$status->fatal( 'hookaborted' );
$status->value = self::AS_HOOK_ERROR_EXPECTED;
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1623,8 +1630,6 @@ class EditPage {
$wgUser->spreadAnyEditBlock();
# Check block state against master, thus 'false'.
$status->setResult( false, self::AS_BLOCKED_PAGE_FOR_USER );
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1633,22 +1638,16 @@ class EditPage {
// Error will be displayed by showEditForm()
$this->tooBig = true;
$status->setResult( false, self::AS_CONTENT_TOO_BIG );
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
if ( !$wgUser->isAllowed( 'edit' ) ) {
if ( $wgUser->isAnon() ) {
$status->setResult( false, self::AS_READ_ONLY_PAGE_ANON );
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
} else {
$status->fatal( 'readonlytext' );
$status->value = self::AS_READ_ONLY_PAGE_LOGGED;
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
}
@@ -1657,23 +1656,26 @@ class EditPage {
&& !$wgUser->isAllowed( 'editcontentmodel' )
) {
$status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL );
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
+ if ( $this->changeTags ) {
+ $changeTagsStatus = ChangeTags::canAddTagsAccompanyingChange(
+ $this->changeTags, $wgUser );
+ if ( !$changeTagsStatus->isOK() ) {
+ $changeTagsStatus->value = self::AS_CHANGE_TAG_ERROR;
+ return $changeTagsStatus;
+ }
+ }
+
if ( wfReadOnly() ) {
$status->fatal( 'readonlytext' );
$status->value = self::AS_READ_ONLY_PAGE;
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
if ( $wgUser->pingLimiter() || $wgUser->pingLimiter( 'linkpurge', 0 ) ) {
$status->fatal( 'actionthrottledtext' );
$status->value = self::AS_RATE_LIMITED;
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1681,13 +1683,9 @@ class EditPage {
# confirmation
if ( $this->wasDeletedSinceLastEdit() && !$this->recreate ) {
$status->setResult( false, self::AS_ARTICLE_WAS_DELETED );
- wfProfileOut( __METHOD__ . '-checks' );
- wfProfileOut( __METHOD__ );
return $status;
}
- wfProfileOut( __METHOD__ . '-checks' );
-
# Load the page data from the master. If anything changes in the meantime,
# we detect it by using page_latest like a token in a 1 try compare-and-swap.
$this->mArticle->loadPageData( 'fromdbmaster' );
@@ -1699,7 +1697,6 @@ class EditPage {
$status->fatal( 'nocreatetext' );
$status->value = self::AS_NO_CREATE_PERMISSION;
wfDebug( __METHOD__ . ": no create permission\n" );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1717,12 +1714,10 @@ class EditPage {
$this->blankArticle = true;
$status->fatal( 'blankarticle' );
$status->setResult( false, self::AS_BLANK_ARTICLE );
- wfProfileOut( __METHOD__ );
return $status;
}
if ( !$this->runPostMergeFilters( $textbox_content, $status, $wgUser ) ) {
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1827,12 +1822,10 @@ class EditPage {
if ( $this->isConflict ) {
$status->setResult( false, self::AS_CONFLICT_DETECTED );
- wfProfileOut( __METHOD__ );
return $status;
}
if ( !$this->runPostMergeFilters( $content, $status, $wgUser ) ) {
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1842,7 +1835,6 @@ class EditPage {
$this->missingSummary = true;
$status->fatal( 'missingsummary' ); // or 'missingcommentheader' if $section == 'new'. Blegh
$status->value = self::AS_SUMMARY_NEEDED;
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1851,7 +1843,6 @@ class EditPage {
$this->missingComment = true;
$status->fatal( 'missingcommenttext' );
$status->value = self::AS_TEXTBOX_EMPTY;
- wfProfileOut( __METHOD__ );
return $status;
}
} elseif ( !$this->allowBlankSummary
@@ -1862,12 +1853,10 @@ class EditPage {
$this->missingSummary = true;
$status->fatal( 'missingsummary' );
$status->value = self::AS_SUMMARY_NEEDED;
- wfProfileOut( __METHOD__ );
return $status;
}
# All's well
- wfProfileIn( __METHOD__ . '-sectionanchor' );
$sectionanchor = '';
if ( $this->section == 'new' ) {
$this->summary = $this->newSectionSummary( $sectionanchor );
@@ -1884,7 +1873,6 @@ class EditPage {
}
}
$result['sectionanchor'] = $sectionanchor;
- wfProfileOut( __METHOD__ . '-sectionanchor' );
// Save errors may fall down to the edit form, but we've now
// merged the section into full text. Clear the section field
@@ -1896,12 +1884,25 @@ class EditPage {
$status->value = self::AS_SUCCESS_UPDATE;
}
+ if ( !$this->allowSelfRedirect
+ && $content->isRedirect()
+ && $content->getRedirectTarget()->equals( $this->getTitle() )
+ ) {
+ // If the page already redirects to itself, don't warn.
+ $currentTarget = $this->getCurrentContent()->getRedirectTarget();
+ if ( !$currentTarget || !$currentTarget->equals( $this->getTitle() ) ) {
+ $this->selfRedirect = true;
+ $status->fatal( 'selfredirect' );
+ $status->value = self::AS_SELF_REDIRECT;
+ return $status;
+ }
+ }
+
// Check for length errors again now that the section is merged in
$this->kblength = (int)( strlen( $this->toEditText( $content ) ) / 1024 );
if ( $this->kblength > $wgMaxArticleSize ) {
$this->tooBig = true;
$status->setResult( false, self::AS_MAX_ARTICLE_SIZE_EXCEEDED );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1931,7 +1932,6 @@ class EditPage {
// Destroys data doEdit() put in $status->value but who cares
$doEditStatus->value = self::AS_END;
}
- wfProfileOut( __METHOD__ );
return $doEditStatus;
}
@@ -1941,8 +1941,18 @@ class EditPage {
$wgUser->pingLimiter( 'linkpurge' );
}
$result['redirect'] = $content->isRedirect();
+
$this->updateWatchlist();
- wfProfileOut( __METHOD__ );
+
+ if ( $this->changeTags && isset( $doEditStatus->value['revision'] ) ) {
+ // If a revision was created, apply any change tags that were requested
+ ChangeTags::addTags(
+ $this->changeTags,
+ isset( $doEditStatus->value['rc'] ) ? $doEditStatus->value['rc']->mAttribs['rc_id'] : null,
+ $doEditStatus->value['revision']->getId()
+ );
+ }
+
return $status;
}
@@ -1979,7 +1989,6 @@ class EditPage {
* @return bool
*/
private function mergeChangesIntoContent( &$editContent ) {
- wfProfileIn( __METHOD__ );
$db = wfGetDB( DB_MASTER );
@@ -1988,7 +1997,6 @@ class EditPage {
$baseContent = $baseRevision ? $baseRevision->getContent() : null;
if ( is_null( $baseContent ) ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -1997,7 +2005,6 @@ class EditPage {
$currentContent = $currentRevision ? $currentRevision->getContent() : null;
if ( is_null( $currentContent ) ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -2007,11 +2014,9 @@ class EditPage {
if ( $result ) {
$editContent = $result;
- wfProfileOut( __METHOD__ );
return true;
}
- wfProfileOut( __METHOD__ );
return false;
}
@@ -2070,19 +2075,31 @@ class EditPage {
}
function setHeaders() {
- global $wgOut, $wgUser;
+ global $wgOut, $wgUser, $wgAjaxEditStash;
$wgOut->addModules( 'mediawiki.action.edit' );
$wgOut->addModuleStyles( 'mediawiki.action.edit.styles' );
- if ( $wgUser->getOption( 'uselivepreview', false ) ) {
+ if ( $wgUser->getOption( 'showtoolbar' ) ) {
+ // The addition of default buttons is handled by getEditToolbar() which
+ // has its own dependency on this module. The call here ensures the module
+ // is loaded in time (it has position "top") for other modules to register
+ // buttons (e.g. extensions, gadgets, user scripts).
+ $wgOut->addModules( 'mediawiki.toolbar' );
+ }
+
+ if ( $wgUser->getOption( 'uselivepreview' ) ) {
$wgOut->addModules( 'mediawiki.action.edit.preview' );
}
- if ( $wgUser->getOption( 'useeditwarning', false ) ) {
+ if ( $wgUser->getOption( 'useeditwarning' ) ) {
$wgOut->addModules( 'mediawiki.action.edit.editWarning' );
}
+ if ( $wgAjaxEditStash ) {
+ $wgOut->addModules( 'mediawiki.action.edit.stash' );
+ }
+
$wgOut->setRobotPolicy( 'noindex,nofollow' );
# Enabled article-related sidebar, toplinks, etc.
@@ -2108,6 +2125,9 @@ class EditPage {
$displayTitle = $contextTitle->getPrefixedText();
}
$wgOut->setPageTitle( wfMessage( $msg, $displayTitle ) );
+ # Transmit the name of the message to JavaScript for live preview
+ # Keep Resources.php/mediawiki.action.edit.preview in sync with the possible keys
+ $wgOut->addJsConfigVars( 'wgEditMessage', $msg );
}
/**
@@ -2124,6 +2144,17 @@ class EditPage {
if ( $namespace == NS_MEDIAWIKI ) {
# Show a warning if editing an interface message
$wgOut->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' );
+ # If this is a default message (but not css or js),
+ # show a hint that it is translatable on translatewiki.net
+ if ( !$this->mTitle->hasContentModel( CONTENT_MODEL_CSS )
+ && !$this->mTitle->hasContentModel( CONTENT_MODEL_JAVASCRIPT )
+ ) {
+ $defaultMessageText = $this->mTitle->getDefaultMessageText();
+ if ( $defaultMessageText !== false ) {
+ $wgOut->wrapWikiMsg( "<div class='mw-translateinterface'>\n$1\n</div>",
+ 'translateinterface' );
+ }
+ }
} elseif ( $namespace == NS_FILE ) {
# Show a hint to shared repo
$file = wfFindFile( $this->mTitle );
@@ -2155,7 +2186,8 @@ class EditPage {
if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
$wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
array( 'userpage-userdoesnotexist', wfEscapeWikiText( $username ) ) );
- } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) { # Show log extract if the user is currently blocked
+ } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) {
+ # Show log extract if the user is currently blocked
LogEventsList::showLogExtract(
$wgOut,
'block',
@@ -2222,7 +2254,10 @@ class EditPage {
if ( $title instanceof Title && $title->exists() && $title->userCan( 'read' ) ) {
global $wgOut;
// Added using template syntax, to take <noinclude>'s into account.
- $wgOut->addWikiTextTitleTidy( '<div class="mw-editintro">{{:' . $title->getFullText() . '}}</div>', $this->mTitle );
+ $wgOut->addWikiTextTitleTidy(
+ '<div class="mw-editintro">{{:' . $title->getFullText() . '}}</div>',
+ $this->mTitle
+ );
return true;
}
}
@@ -2248,11 +2283,7 @@ class EditPage {
* $this->allowNonTextContent is not true.
*/
protected function toEditText( $content ) {
- if ( $content === null || $content === false ) {
- return $content;
- }
-
- if ( is_string( $content ) ) {
+ if ( $content === null || $content === false || is_string( $content ) ) {
return $content;
}
@@ -2300,12 +2331,13 @@ class EditPage {
* Send the edit form and related headers to $wgOut
* @param callable|null $formCallback That takes an OutputPage parameter; will be called
* during form output near the top, for captchas and the like.
+ *
+ * The $formCallback parameter is deprecated since MediaWiki 1.25. Please
+ * use the EditPage::showEditForm:fields hook instead.
*/
function showEditForm( $formCallback = null ) {
global $wgOut, $wgUser;
- wfProfileIn( __METHOD__ );
-
# need to parse the preview early so that we know which templates are used,
# otherwise users with "show preview after edit box" will get a blank list
# we parse this near the beginning so that setHeaders can do the title
@@ -2315,12 +2347,11 @@ class EditPage {
$previewOutput = $this->getPreviewText();
}
- wfRunHooks( 'EditPage::showEditForm:initial', array( &$this, &$wgOut ) );
+ Hooks::run( 'EditPage::showEditForm:initial', array( &$this, &$wgOut ) );
$this->setHeaders();
if ( $this->showHeader() === false ) {
- wfProfileOut( __METHOD__ );
return;
}
@@ -2358,6 +2389,7 @@ class EditPage {
) );
if ( is_callable( $formCallback ) ) {
+ wfWarn( 'The $formCallback parameter to ' . __METHOD__ . 'is deprecated' );
call_user_func_array( $formCallback, array( &$wgOut ) );
}
@@ -2381,7 +2413,7 @@ class EditPage {
. Xml::closeElement( 'div' )
);
- wfRunHooks( 'EditPage::showEditForm:fields', array( &$this, &$wgOut ) );
+ Hooks::run( 'EditPage::showEditForm:fields', array( &$this, &$wgOut ) );
// Put these up at the top to ensure they aren't lost on early form submission
$this->showFormBeforeText();
@@ -2425,6 +2457,10 @@ class EditPage {
$wgOut->addHTML( Html::hidden( 'wpUndidRevision', $this->undidRev ) );
}
+ if ( $this->selfRedirect ) {
+ $wgOut->addHTML( Html::hidden( 'wpIgnoreSelfRedirect', true ) );
+ }
+
if ( $this->hasPresetSummary ) {
// If a summary has been preset using &summary= we don't want to prompt for
// a different summary. Only prompt for a summary if the summary is blanked.
@@ -2436,6 +2472,8 @@ class EditPage {
$wgOut->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) );
$wgOut->addHTML( Html::hidden( 'oldid', $this->oldid ) );
+ $wgOut->addHTML( Html::hidden( 'parentRevId',
+ $this->parentRevId ?: $this->mArticle->getRevIdFetched() ) );
$wgOut->addHTML( Html::hidden( 'format', $this->contentFormat ) );
$wgOut->addHTML( Html::hidden( 'model', $this->contentModel ) );
@@ -2517,7 +2555,6 @@ class EditPage {
$this->displayPreviewArea( $previewOutput, false );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -2548,7 +2585,19 @@ class EditPage {
}
// Add edit notices
- $wgOut->addHTML( implode( "\n", $this->mTitle->getEditNotices( $this->oldid ) ) );
+ $editNotices = $this->mTitle->getEditNotices( $this->oldid );
+ if ( count( $editNotices ) ) {
+ $wgOut->addHTML( implode( "\n", $editNotices ) );
+ } else {
+ $msg = wfMessage( 'editnotice-notext' );
+ if ( !$msg->isDisabled() ) {
+ $wgOut->addHTML(
+ '<div class="mw-editnotice-notext">'
+ . $msg->parseAsBlock()
+ . '</div>'
+ );
+ }
+ }
if ( $this->isConflict ) {
$wgOut->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1\n</div>", 'explainconflict' );
@@ -2587,6 +2636,10 @@ class EditPage {
$wgOut->wrapWikiMsg( "<div id='mw-blankarticle'>\n$1\n</div>", 'blankarticle' );
}
+ if ( $this->selfRedirect ) {
+ $wgOut->wrapWikiMsg( "<div id='mw-selfredirect'>\n$1\n</div>", 'selfredirect' );
+ }
+
if ( $this->hookError !== '' ) {
$wgOut->addWikiText( $this->hookError );
}
@@ -2846,7 +2899,7 @@ class EditPage {
global $wgOut;
$section = htmlspecialchars( $this->section );
$wgOut->addHTML( <<<HTML
-<input type='hidden' value="{$section}" name="wpSection" />
+<input type='hidden' value="{$section}" name="wpSection"/>
<input type='hidden' value="{$this->starttime}" name="wpStarttime" />
<input type='hidden' value="{$this->edittime}" name="wpEdittime" />
<input type='hidden' value="{$this->scrolltop}" name="wpScrolltop" id="wpScrolltop" />
@@ -2964,7 +3017,7 @@ HTML
);
$pageLang = $this->mTitle->getPageLanguage();
- $attribs['lang'] = $pageLang->getCode();
+ $attribs['lang'] = $pageLang->getHtmlCode();
$attribs['dir'] = $pageLang->getDir();
$wgOut->addHTML( Html::textarea( $name, $wikitext, $attribs ) );
@@ -2987,6 +3040,12 @@ HTML
if ( $this->formtype == 'preview' ) {
$this->showPreview( $previewOutput );
+ } else {
+ // Empty content container for LivePreview
+ $pageViewLang = $this->mTitle->getPageViewLanguage();
+ $attribs = array( 'lang' => $pageViewLang->getHtmlCode(), 'dir' => $pageViewLang->getDir(),
+ 'class' => 'mw-content-' . $pageViewLang->getDir() );
+ $wgOut->addHTML( Html::rawElement( 'div', $attribs ) );
}
$wgOut->addHTML( '</div>' );
@@ -3019,7 +3078,7 @@ HTML
}
# This hook seems slightly odd here, but makes things more
# consistent for extensions.
- wfRunHooks( 'OutputPageBeforeHTML', array( &$wgOut, &$text ) );
+ Hooks::run( 'OutputPageBeforeHTML', array( &$wgOut, &$text ) );
$wgOut->addHTML( $text );
if ( $this->mTitle->getNamespace() == NS_CATEGORY ) {
$this->mArticle->closeShowCategory();
@@ -3058,7 +3117,7 @@ HTML
if ( $newContent ) {
ContentHandler::runLegacyHooks( 'EditPageGetDiffText', array( $this, &$newContent ) );
- wfRunHooks( 'EditPageGetDiffContent', array( $this, &$newContent ) );
+ Hooks::run( 'EditPageGetDiffContent', array( $this, &$newContent ) );
$popts = ParserOptions::newFromUserAndLang( $wgUser, $wgContLang );
$newContent = $newContent->preSaveTransform( $this->mTitle, $wgUser, $popts );
@@ -3110,7 +3169,7 @@ HTML
*/
protected function showTosSummary() {
$msg = 'editpage-tos-summary';
- wfRunHooks( 'EditPageTosSummary', array( $this->mTitle, &$msg ) );
+ Hooks::run( 'EditPageTosSummary', array( $this->mTitle, &$msg ) );
if ( !wfMessage( $msg )->isDisabled() ) {
global $wgOut;
$wgOut->addHTML( '<div class="mw-tos-summary">' );
@@ -3154,7 +3213,7 @@ HTML
'[[' . wfMessage( 'copyrightpage' )->inContentLanguage()->text() . ']]' );
}
// Allow for site and per-namespace customization of contribution/copyright notice.
- wfRunHooks( 'EditPageCopyrightWarning', array( $title, &$copywarnMsg ) );
+ Hooks::run( 'EditPageCopyrightWarning', array( $title, &$copywarnMsg ) );
return "<div id=\"editpage-copywarn\">\n" .
call_user_func_array( 'wfMessage', $copywarnMsg )->$format() . "\n</div>";
@@ -3172,8 +3231,6 @@ HTML
return '';
}
- wfProfileIn( __METHOD__ );
-
$limitReport = Html::rawElement( 'div', array( 'class' => 'mw-limitReportExplanation' ),
wfMessage( 'limitreport-title' )->parseAsBlock()
);
@@ -3187,7 +3244,7 @@ HTML
Html::openElement( 'tbody' );
foreach ( $output->getLimitReportData() as $key => $value ) {
- if ( wfRunHooks( 'ParserLimitReportFormat',
+ if ( Hooks::run( 'ParserLimitReportFormat',
array( $key, &$value, &$limitReport, true, true )
) ) {
$keyMsg = wfMessage( $key );
@@ -3208,13 +3265,11 @@ HTML
Html::closeElement( 'table' ) .
Html::closeElement( 'div' );
- wfProfileOut( __METHOD__ );
-
return $limitReport;
}
protected function showStandardInputs( &$tabindex = 2 ) {
- global $wgOut, $wgUseMediaWikiUIEverywhere;
+ global $wgOut;
$wgOut->addHTML( "<div class='editOptions'>\n" );
if ( $this->section != 'new' ) {
@@ -3246,10 +3301,8 @@ HTML
'target' => 'helpwindow',
'href' => $edithelpurl,
);
- if ( $wgUseMediaWikiUIEverywhere ) {
- $attrs['class'] = 'mw-ui-button mw-ui-quiet';
- }
- $edithelp = Html::element( 'a', $attrs, wfMessage( 'edithelp' )->text() ) .
+ $edithelp = Html::linkButton( wfMessage( 'edithelp' )->text(),
+ $attrs, array( 'mw-ui-quiet' ) ) .
wfMessage( 'word-separator' )->escaped() .
wfMessage( 'newwindow' )->parse();
@@ -3257,7 +3310,7 @@ HTML
$wgOut->addHTML( " <span class='editHelp'>{$edithelp}</span>\n" );
$wgOut->addHTML( "</div><!-- editButtons -->\n" );
- wfRunHooks( 'EditPage::showStandardInputs:options', array( $this, $wgOut, &$tabindex ) );
+ Hooks::run( 'EditPage::showStandardInputs:options', array( $this, $wgOut, &$tabindex ) );
$wgOut->addHTML( "</div><!-- editOptions -->\n" );
}
@@ -3269,7 +3322,7 @@ HTML
protected function showConflict() {
global $wgOut;
- if ( wfRunHooks( 'EditPageBeforeConflictDiff', array( &$this, &$wgOut ) ) ) {
+ if ( Hooks::run( 'EditPageBeforeConflictDiff', array( &$this, &$wgOut ) ) ) {
$wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
$content1 = $this->toEditContent( $this->textbox1 );
@@ -3292,20 +3345,16 @@ HTML
* @return string
*/
public function getCancelLink() {
- global $wgUseMediaWikiUIEverywhere;
$cancelParams = array();
if ( !$this->isConflict && $this->oldid > 0 ) {
$cancelParams['oldid'] = $this->oldid;
}
$attrs = array( 'id' => 'mw-editform-cancel' );
- if ( $wgUseMediaWikiUIEverywhere ) {
- $attrs['class'] = 'mw-ui-button mw-ui-quiet';
- }
return Linker::linkKnown(
$this->getContextTitle(),
wfMessage( 'cancel' )->parse(),
- $attrs,
+ Html::buttonAttributes( $attrs, array( 'mw-ui-quiet' ) ),
$cancelParams
);
}
@@ -3401,8 +3450,6 @@ HTML
global $wgOut, $wgUser, $wgRawHtml, $wgLang;
global $wgAllowUserCss, $wgAllowUserJs;
- wfProfileIn( __METHOD__ );
-
if ( $wgRawHtml && !$this->mTokenOk ) {
// Could be an offsite preview attempt. This is very unsafe if
// HTML is enabled, as it could be an attack.
@@ -3414,7 +3461,6 @@ HTML
$parsedNote = $wgOut->parse( "<div class='previewnote'>" .
wfMessage( 'session_fail_preview_html' )->text() . "</div>", true, /* interface */true );
}
- wfProfileOut( __METHOD__ );
return $parsedNote;
}
@@ -3424,11 +3470,10 @@ HTML
$content = $this->toEditContent( $this->textbox1 );
$previewHTML = '';
- if ( !wfRunHooks(
+ if ( !Hooks::run(
'AlternateEditPreview',
array( $this, &$content, &$previewHTML, &$this->mParserOutput ) )
) {
- wfProfileOut( __METHOD__ );
return $previewHTML;
}
@@ -3449,7 +3494,6 @@ HTML
}
$parserOptions = $this->mArticle->makeParserOptions( $this->mArticle->getContext() );
- $parserOptions->setEditSection( false );
$parserOptions->setIsPreview( true );
$parserOptions->setIsSectionPreview( !is_null( $this->section ) && $this->section !== '' );
@@ -3494,20 +3538,26 @@ HTML
$hook_args = array( $this, &$content );
ContentHandler::runLegacyHooks( 'EditPageGetPreviewText', $hook_args );
- wfRunHooks( 'EditPageGetPreviewContent', $hook_args );
+ Hooks::run( 'EditPageGetPreviewContent', $hook_args );
$parserOptions->enableLimitReport();
# For CSS/JS pages, we should have called the ShowRawCssJs hook here.
# But it's now deprecated, so never mind
- $content = $content->preSaveTransform( $this->mTitle, $wgUser, $parserOptions );
- $parserOutput = $content->getParserOutput(
- $this->getArticle()->getTitle(),
- null,
- $parserOptions
+ $pstContent = $content->preSaveTransform( $this->mTitle, $wgUser, $parserOptions );
+ $scopedCallback = $parserOptions->setupFakeRevision(
+ $this->mTitle, $pstContent, $wgUser );
+ $parserOutput = $pstContent->getParserOutput( $this->mTitle, null, $parserOptions );
+
+ # Try to stash the edit for the final submission step
+ # @todo: different date format preferences cause cache misses
+ ApiStashEdit::stashEditFromPreview(
+ $this->getArticle(), $content, $pstContent,
+ $parserOutput, $parserOptions, $parserOptions, wfTimestampNow()
);
+ $parserOutput->setEditSectionTokens( false ); // no section edit links
$previewHTML = $parserOutput->getText();
$this->mParserOutput = $parserOutput;
$wgOut->addParserOutputMetadata( $parserOutput );
@@ -3542,7 +3592,6 @@ HTML
'class' => 'mw-content-' . $pageViewLang->getDir() );
$previewHTML = Html::rawElement( 'div', $attribs, $previewHTML );
- wfProfileOut( __METHOD__ );
return $previewhead . $previewHTML . $this->previewTextAfterContent;
}
@@ -3660,7 +3709,7 @@ HTML
)
);
- $script = 'mw.loader.using("mediawiki.action.edit", function() {';
+ $script = 'mw.loader.using("mediawiki.toolbar", function () {';
foreach ( $toolarray as $tool ) {
if ( !$tool ) {
continue;
@@ -3680,21 +3729,19 @@ HTML
$tool['id'],
);
- $script .= Xml::encodeJsCall( 'mw.toolbar.addButton', $params );
+ $script .= Xml::encodeJsCall(
+ 'mw.toolbar.addButton',
+ $params,
+ ResourceLoader::inDebugMode()
+ );
}
- // This used to be called on DOMReady from mediawiki.action.edit, which
- // ended up causing race conditions with the setup code above.
- $script .= "\n" .
- "// Create button bar\n" .
- "$(function() { mw.toolbar.init(); } );\n";
-
$script .= '});';
$wgOut->addScript( Html::inlineScript( ResourceLoader::makeLoaderConditionalScript( $script ) ) );
$toolbar = '<div id="toolbar"></div>';
- wfRunHooks( 'EditPageBeforeEditToolbar', array( &$toolbar ) );
+ Hooks::run( 'EditPageBeforeEditToolbar', array( &$toolbar ) );
return $toolbar;
}
@@ -3761,7 +3808,7 @@ HTML
$checkboxes['watch'] = $watchThisHtml;
}
}
- wfRunHooks( 'EditPageBeforeEditChecks', array( &$this, &$checkboxes, &$tabindex ) );
+ Hooks::run( 'EditPageBeforeEditChecks', array( &$this, &$checkboxes, &$tabindex ) );
return $checkboxes;
}
@@ -3774,83 +3821,39 @@ HTML
* @return array
*/
public function getEditButtons( &$tabindex ) {
- global $wgUseMediaWikiUIEverywhere;
-
$buttons = array();
$attribs = array(
'id' => 'wpSave',
'name' => 'wpSave',
- 'type' => 'submit',
'tabindex' => ++$tabindex,
- 'value' => wfMessage( 'savearticle' )->text(),
) + Linker::tooltipAndAccesskeyAttribs( 'save' );
- if ( $wgUseMediaWikiUIEverywhere ) {
- $attribs['class'] = 'mw-ui-button mw-ui-constructive';
- }
- $buttons['save'] = Xml::element( 'input', $attribs, '' );
+ $buttons['save'] = Html::submitButton( wfMessage( 'savearticle' )->text(),
+ $attribs, array( 'mw-ui-constructive' ) );
++$tabindex; // use the same for preview and live preview
$attribs = array(
'id' => 'wpPreview',
'name' => 'wpPreview',
- 'type' => 'submit',
'tabindex' => $tabindex,
- 'value' => wfMessage( 'showpreview' )->text(),
) + Linker::tooltipAndAccesskeyAttribs( 'preview' );
- if ( $wgUseMediaWikiUIEverywhere ) {
- $attribs['class'] = 'mw-ui-button mw-ui-progressive';
- }
- $buttons['preview'] = Xml::element( 'input', $attribs, '' );
+ $buttons['preview'] = Html::submitButton( wfMessage( 'showpreview' )->text(),
+ $attribs );
$buttons['live'] = '';
$attribs = array(
'id' => 'wpDiff',
'name' => 'wpDiff',
- 'type' => 'submit',
'tabindex' => ++$tabindex,
- 'value' => wfMessage( 'showdiff' )->text(),
) + Linker::tooltipAndAccesskeyAttribs( 'diff' );
- if ( $wgUseMediaWikiUIEverywhere ) {
- $attribs['class'] = 'mw-ui-button mw-ui-progressive';
- }
- $buttons['diff'] = Xml::element( 'input', $attribs, '' );
+ $buttons['diff'] = Html::submitButton( wfMessage( 'showdiff' )->text(),
+ $attribs );
- wfRunHooks( 'EditPageBeforeEditButtons', array( &$this, &$buttons, &$tabindex ) );
+ Hooks::run( 'EditPageBeforeEditButtons', array( &$this, &$buttons, &$tabindex ) );
return $buttons;
}
/**
- * Output preview text only. This can be sucked into the edit page
- * via JavaScript, and saves the server time rendering the skin as
- * well as theoretically being more robust on the client (doesn't
- * disturb the edit box's undo history, won't eat your text on
- * failure, etc).
- *
- * @todo This doesn't include category or interlanguage links.
- * Would need to enhance it a bit, "<s>maybe wrap them in XML
- * or something...</s>" that might also require more skin
- * initialization, so check whether that's a problem.
- */
- function livePreview() {
- global $wgOut;
- $wgOut->disable();
- header( 'Content-type: text/xml; charset=utf-8' );
- header( 'Cache-control: no-cache' );
-
- $previewText = $this->getPreviewText();
- #$categories = $skin->getCategoryLinks();
-
- $s =
- '<?xml version="1.0" encoding="UTF-8" ?>' . "\n" .
- Xml::tags( 'livepreview', null,
- Xml::element( 'preview', null, $previewText )
- #. Xml::element( 'category', null, $categories )
- );
- echo $s;
- }
-
- /**
* Creates a basic error page which informs the user that
* they have attempted to edit a nonexistent section.
*/
@@ -3860,7 +3863,7 @@ HTML
$wgOut->prepareErrorPage( wfMessage( 'nosuchsectiontitle' ) );
$res = wfMessage( 'nosuchsectiontext', $this->section )->parseAsBlock();
- wfRunHooks( 'EditPageNoSuchSection', array( &$this, &$res ) );
+ Hooks::run( 'EditPageNoSuchSection', array( &$this, &$res ) );
$wgOut->addHTML( $res );
$wgOut->returnToMain( false, $this->mTitle );
@@ -4018,9 +4021,9 @@ HTML
// Do some sanity checks. These aren't needed for reversibility,
// but should help keep the breakage down if the editor
// breaks one of the entities whilst editing.
- if ( ( substr( $invalue, $i, 1 ) == ";" ) and ( strlen( $hexstring ) <= 6 ) ) {
+ if ( ( substr( $invalue, $i, 1 ) == ";" ) && ( strlen( $hexstring ) <= 6 ) ) {
$codepoint = hexdec( $hexstring );
- $result .= codepointToUtf8( $codepoint );
+ $result .= UtfNormal\Utils::codepointToUtf8( $codepoint );
} else {
$result .= "&#x" . $hexstring . substr( $invalue, $i, 1 );
}
diff --git a/includes/Export.php b/includes/Export.php
index 84f5c60c..4600feb5 100644
--- a/includes/Export.php
+++ b/includes/Export.php
@@ -69,7 +69,7 @@ class WikiExporter {
* @return string
*/
public static function schemaVersion() {
- return "0.9";
+ return "0.10";
}
/**
@@ -213,7 +213,6 @@ class WikiExporter {
* @param array $cond
*/
protected function do_list_authors( $cond ) {
- wfProfileIn( __METHOD__ );
$this->author_list = "<contributors>";
// rev_deleted
@@ -239,7 +238,6 @@ class WikiExporter {
"</contributor>";
}
$this->author_list .= "</contributors>";
- wfProfileOut( __METHOD__ );
}
/**
@@ -248,7 +246,6 @@ class WikiExporter {
* @throws Exception
*/
protected function dumpFrom( $cond = '' ) {
- wfProfileIn( __METHOD__ );
# For logging dumps...
if ( $this->history & self::LOGS ) {
$where = array( 'user_id = log_user' );
@@ -304,7 +301,6 @@ class WikiExporter {
}
// Inform caller about problem
- wfProfileOut( __METHOD__ );
throw $e;
}
# For page dumps...
@@ -348,8 +344,7 @@ class WikiExporter {
# Default JOIN, to be overridden...
$join['revision'] = array( 'INNER JOIN', 'page_id=rev_page AND page_latest=rev_id' );
# One, and only one hook should set this, and return false
- if ( wfRunHooks( 'WikiExporter::dumpStableQuery', array( &$tables, &$opts, &$join ) ) ) {
- wfProfileOut( __METHOD__ );
+ if ( Hooks::run( 'WikiExporter::dumpStableQuery', array( &$tables, &$opts, &$join ) ) ) {
throw new MWException( __METHOD__ . " given invalid history dump type." );
}
} elseif ( $this->history & WikiExporter::RANGE ) {
@@ -358,7 +353,6 @@ class WikiExporter {
$opts['ORDER BY'] = array( 'rev_page ASC', 'rev_id ASC' );
} else {
# Unknown history specification parameter?
- wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . " given invalid history dump type." );
}
# Query optimization hacks
@@ -378,7 +372,7 @@ class WikiExporter {
$result = null; // Assuring $result is not undefined, if exception occurs early
try {
- wfRunHooks( 'ModifyExportQuery',
+ Hooks::run( 'ModifyExportQuery',
array( $this->db, &$tables, &$cond, &$opts, &$join ) );
# Do the query!
@@ -417,7 +411,6 @@ class WikiExporter {
throw $e;
}
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -480,16 +473,6 @@ class WikiExporter {
*/
class XmlDumpWriter {
/**
- * Returns the export schema version.
- * @deprecated since 1.20; use WikiExporter::schemaVersion() instead
- * @return string
- */
- function schemaVersion() {
- wfDeprecated( __METHOD__, '1.20' );
- return WikiExporter::schemaVersion();
- }
-
- /**
* Opens the XML output stream's root "<mediawiki>" element.
* This does not include an xml directive, so is safe to include
* as a subelement in a larger XML stream. Namespace and XML Schema
@@ -637,7 +620,7 @@ class XmlDumpWriter {
strval( $row->page_restrictions ) ) . "\n";
}
- wfRunHooks( 'XmlDumpWriterOpenPage', array( $this, &$out, $row, $title ) );
+ Hooks::run( 'XmlDumpWriterOpenPage', array( $this, &$out, $row, $title ) );
return $out;
}
@@ -661,7 +644,6 @@ class XmlDumpWriter {
* @access private
*/
function writeRevision( $row ) {
- wfProfileIn( __METHOD__ );
$out = " <revision>\n";
$out .= " " . Xml::element( 'id', null, strval( $row->rev_id ) ) . "\n";
@@ -703,6 +685,9 @@ class XmlDumpWriter {
$content_format = $content_handler->getDefaultFormat();
}
+ $out .= " " . Xml::element( 'model', null, strval( $content_model ) ) . "\n";
+ $out .= " " . Xml::element( 'format', null, strval( $content_format ) ) . "\n";
+
$text = '';
if ( isset( $row->rev_deleted ) && ( $row->rev_deleted & Revision::DELETED_TEXT ) ) {
$out .= " " . Xml::element( 'text', array( 'deleted' => 'deleted' ) ) . "\n";
@@ -729,14 +714,10 @@ class XmlDumpWriter {
$out .= " <sha1/>\n";
}
- $out .= " " . Xml::element( 'model', null, strval( $content_model ) ) . "\n";
- $out .= " " . Xml::element( 'format', null, strval( $content_format ) ) . "\n";
-
- wfRunHooks( 'XmlDumpWriterWriteRevision', array( &$this, &$out, $row, $text ) );
+ Hooks::run( 'XmlDumpWriterWriteRevision', array( &$this, &$out, $row, $text ) );
$out .= " </revision>\n";
- wfProfileOut( __METHOD__ );
return $out;
}
@@ -749,7 +730,6 @@ class XmlDumpWriter {
* @access private
*/
function writeLogItem( $row ) {
- wfProfileIn( __METHOD__ );
$out = " <logitem>\n";
$out .= " " . Xml::element( 'id', null, strval( $row->log_id ) ) . "\n";
@@ -783,7 +763,6 @@ class XmlDumpWriter {
$out .= " </logitem>\n";
- wfProfileOut( __METHOD__ );
return $out;
}
diff --git a/includes/Feed.php b/includes/Feed.php
index 2fdfa424..600b136d 100644
--- a/includes/Feed.php
+++ b/includes/Feed.php
@@ -92,7 +92,7 @@ class FeedItem {
*/
public function getUniqueId() {
if ( $this->uniqueId ) {
- return $this->xmlEncode( $this->uniqueId );
+ return $this->xmlEncode( wfExpandUrl( $this->uniqueId, PROTO_CURRENT ) );
}
}
@@ -184,7 +184,8 @@ class FeedItem {
}
/**
- * @todo document (needs one-sentence top-level class description).
+ * Class to support the outputting of syndication feeds in Atom and RSS format.
+ *
* @ingroup Feed
*/
abstract class ChannelFeed extends FeedItem {
@@ -338,13 +339,14 @@ class RSSFeed extends ChannelFeed {
*/
class AtomFeed extends ChannelFeed {
/**
- * @todo document
- * @param string|int $ts
+ * Format a date given timestamp.
+ *
+ * @param string|int $timestamp
* @return string
*/
- function formatTime( $ts ) {
+ function formatTime( $timestamp ) {
// need to use RFC 822 time format at least for rss2.0
- return gmdate( 'Y-m-d\TH:i:s', wfTimestamp( TS_UNIX, $ts ) );
+ return gmdate( 'Y-m-d\TH:i:s', wfTimestamp( TS_UNIX, $timestamp ) );
}
/**
diff --git a/includes/FeedUtils.php b/includes/FeedUtils.php
index 6937c32d..a01d6420 100644
--- a/includes/FeedUtils.php
+++ b/includes/FeedUtils.php
@@ -106,7 +106,6 @@ class FeedUtils {
$comment, $actiontext = ''
) {
global $wgFeedDiffCutoff, $wgLang;
- wfProfileIn( __METHOD__ );
// log entries
$completeText = '<p>' . implode( ' ',
@@ -124,12 +123,10 @@ class FeedUtils {
// Can't diff special pages, unreadable pages or pages with no new revision
// to compare against: just return the text.
if ( $title->getNamespace() < 0 || $accErrors || !$newid ) {
- wfProfileOut( __METHOD__ );
return $completeText;
}
if ( $oldid ) {
- wfProfileIn( __METHOD__ . "-dodiff" );
#$diffText = $de->getDiff( wfMessage( 'revisionasof',
# $wgLang->timeanddate( $timestamp ),
@@ -167,10 +164,9 @@ class FeedUtils {
$diffText = "<p>Can't load revision $newid</p>";
} else {
// Diff output fine, clean up any illegal UTF-8
- $diffText = UtfNormal::cleanUp( $diffText );
+ $diffText = UtfNormal\Validator::cleanUp( $diffText );
$diffText = self::applyDiffStyle( $diffText );
}
- wfProfileOut( __METHOD__ . "-dodiff" );
} else {
$rev = Revision::newFromId( $newid );
if ( $wgFeedDiffCutoff <= 0 || is_null( $rev ) ) {
@@ -208,7 +204,6 @@ class FeedUtils {
}
$completeText .= $diffText;
- wfProfileOut( __METHOD__ );
return $completeText;
}
diff --git a/includes/FileDeleteForm.php b/includes/FileDeleteForm.php
index b4e24581..c1d14db0 100644
--- a/includes/FileDeleteForm.php
+++ b/includes/FileDeleteForm.php
@@ -201,7 +201,7 @@ class FileDeleteForm {
$dbw->rollback( __METHOD__ );
}
}
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// Rollback before returning to prevent UI from displaying
// incorrect "View or restore N deleted edits?"
$dbw->rollback( __METHOD__ );
@@ -210,7 +210,7 @@ class FileDeleteForm {
}
if ( $status->isOK() ) {
- wfRunHooks( 'FileDeleteComplete', array( &$file, &$oldimage, &$page, &$user, &$reason ) );
+ Hooks::run( 'FileDeleteComplete', array( &$file, &$oldimage, &$page, &$user, &$reason ) );
}
return $status;
diff --git a/includes/GitInfo.php b/includes/GitInfo.php
index 7052820e..fb298cfe 100644
--- a/includes/GitInfo.php
+++ b/includes/GitInfo.php
@@ -392,7 +392,7 @@ class GitInfo {
if ( self::$viewers === false ) {
self::$viewers = $wgGitRepositoryViewers;
- wfRunHooks( 'GitViewers', array( &self::$viewers ) );
+ Hooks::run( 'GitViewers', array( &self::$viewers ) );
}
return self::$viewers;
diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php
index 27f7cacb..240cb97b 100644
--- a/includes/GlobalFunctions.php
+++ b/includes/GlobalFunctions.php
@@ -24,13 +24,17 @@ if ( !defined( 'MEDIAWIKI' ) ) {
die( "This file is part of MediaWiki, it is not a valid entry point" );
}
+use Liuggio\StatsdClient\StatsdClient;
+use Liuggio\StatsdClient\Sender\SocketSender;
+use MediaWiki\Logger\LoggerFactory;
+
// Hide compatibility functions from Doxygen
/// @cond
/**
* Compatibility functions
*
- * We support PHP 5.3.2 and up.
+ * We support PHP 5.3.3 and up.
* Re-implementations of newer functions or functions in non-standard
* PHP extensions may be included here.
*/
@@ -161,6 +165,72 @@ if ( !function_exists( 'hash_equals' ) ) {
/// @endcond
/**
+ * Load an extension
+ *
+ * This queues an extension to be loaded through
+ * the ExtensionRegistry system.
+ *
+ * @param string $ext Name of the extension to load
+ * @param string|null $path Absolute path of where to find the extension.json file
+ */
+function wfLoadExtension( $ext, $path = null ) {
+ if ( !$path ) {
+ global $wgExtensionDirectory;
+ $path = "$wgExtensionDirectory/$ext/extension.json";
+ }
+ ExtensionRegistry::getInstance()->queue( $path );
+}
+
+/**
+ * Load multiple extensions at once
+ *
+ * Same as wfLoadExtension, but more efficient if you
+ * are loading multiple extensions.
+ *
+ * If you want to specify custom paths, you should interact with
+ * ExtensionRegistry directly.
+ *
+ * @see wfLoadExtension
+ * @param string[] $exts Array of extension names to load
+ */
+function wfLoadExtensions( array $exts ) {
+ global $wgExtensionDirectory;
+ $registry = ExtensionRegistry::getInstance();
+ foreach ( $exts as $ext ) {
+ $registry->queue( "$wgExtensionDirectory/$ext/extension.json" );
+ }
+}
+
+/**
+ * Load a skin
+ *
+ * @see wfLoadExtension
+ * @param string $skin Name of the extension to load
+ * @param string|null $path Absolute path of where to find the skin.json file
+ */
+function wfLoadSkin( $skin, $path = null ) {
+ if ( !$path ) {
+ global $wgStyleDirectory;
+ $path = "$wgStyleDirectory/$skin/skin.json";
+ }
+ ExtensionRegistry::getInstance()->queue( $path );
+}
+
+/**
+ * Load multiple skins at once
+ *
+ * @see wfLoadExtensions
+ * @param string[] $skins Array of extension names to load
+ */
+function wfLoadSkins( array $skins ) {
+ global $wgStyleDirectory;
+ $registry = ExtensionRegistry::getInstance();
+ foreach ( $skins as $skin ) {
+ $registry->queue( "$wgStyleDirectory/$skin/skin.json" );
+ }
+}
+
+/**
* Like array_diff( $a, $b ) except that it works with two-dimensional arrays.
* @param array $a
* @param array $b
@@ -950,44 +1020,40 @@ function wfMatchesDomainList( $url, $domains ) {
* $wgDebugRawPage - if false, 'action=raw' hits will not result in debug output.
* $wgDebugComments - if on, some debug items may appear in comments in the HTML output.
*
+ * @since 1.25 support for additional context data
+ *
* @param string $text
- * @param string|bool $dest Destination of the message:
- * - 'all': both to the log and HTML (debug toolbar or HTML comments)
- * - 'log': only to the log and not in HTML
- * For backward compatibility, it can also take a boolean:
- * - true: same as 'all'
- * - false: same as 'log'
+ * @param string|bool $dest Unused
+ * @param array $context Additional logging context data
*/
-function wfDebug( $text, $dest = 'all' ) {
- global $wgDebugLogFile, $wgDebugRawPage, $wgDebugLogPrefix;
+function wfDebug( $text, $dest = 'all', array $context = array() ) {
+ global $wgDebugRawPage, $wgDebugLogPrefix;
+ global $wgDebugTimestamps, $wgRequestTime;
if ( !$wgDebugRawPage && wfIsDebugRawPage() ) {
return;
}
- // Turn $dest into a string if it's a boolean (for b/c)
- if ( $dest === true ) {
- $dest = 'all';
- } elseif ( $dest === false ) {
- $dest = 'log';
- }
+ $text = trim( $text );
- $timer = wfDebugTimer();
- if ( $timer !== '' ) {
- $text = preg_replace( '/[^\n]/', $timer . '\0', $text, 1 );
+ // Inline logic from deprecated wfDebugTimer()
+ if ( $wgDebugTimestamps ) {
+ $context['seconds_elapsed'] = sprintf(
+ '%6.4f',
+ microtime( true ) - $wgRequestTime
+ );
+ $context['memory_used'] = sprintf(
+ '%5.1fM',
+ ( memory_get_usage( true ) / ( 1024 * 1024 ) )
+ );
}
- if ( $dest === 'all' ) {
- MWDebug::debugMsg( $text );
+ if ( $wgDebugLogPrefix !== '' ) {
+ $context['prefix'] = $wgDebugLogPrefix;
}
- if ( $wgDebugLogFile != '' ) {
- # Strip unprintables; they can switch terminal modes when binary data
- # gets dumped, which is pretty annoying.
- $text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $text );
- $text = $wgDebugLogPrefix . $text;
- wfErrorLog( $text, $wgDebugLogFile );
- }
+ $logger = LoggerFactory::getInstance( 'wfDebug' );
+ $logger->debug( $text, $context );
}
/**
@@ -1016,11 +1082,14 @@ function wfIsDebugRawPage() {
/**
* Get microsecond timestamps for debug logs
*
+ * @deprecated since 1.25
* @return string
*/
function wfDebugTimer() {
global $wgDebugTimestamps, $wgRequestTime;
+ wfDeprecated( __METHOD__, '1.25' );
+
if ( !$wgDebugTimestamps ) {
return '';
}
@@ -1046,30 +1115,34 @@ function wfDebugMem( $exact = false ) {
}
/**
- * Send a line to a supplementary debug log file, if configured, or main debug log if not.
- * To configure a supplementary log file, set $wgDebugLogGroups[$logGroup] to a string
- * filename or an associative array mapping 'destination' to the desired filename. The
- * associative array may also contain a 'sample' key with an integer value, specifying
- * a sampling factor.
+ * Send a line to a supplementary debug log file, if configured, or main debug
+ * log if not.
+ *
+ * To configure a supplementary log file, set $wgDebugLogGroups[$logGroup] to
+ * a string filename or an associative array mapping 'destination' to the
+ * desired filename. The associative array may also contain a 'sample' key
+ * with an integer value, specifying a sampling factor. Sampled log events
+ * will be emitted with a 1 in N random chance.
*
* @since 1.23 support for sampling log messages via $wgDebugLogGroups.
+ * @since 1.25 support for additional context data
+ * @since 1.25 sample behavior dependent on configured $wgMWLoggerDefaultSpi
*
* @param string $logGroup
* @param string $text
* @param string|bool $dest Destination of the message:
* - 'all': both to the log and HTML (debug toolbar or HTML comments)
* - 'log': only to the log and not in HTML
- * - 'private': only to the specifc log if set in $wgDebugLogGroups and
+ * - 'private': only to the specific log if set in $wgDebugLogGroups and
* discarded otherwise
* For backward compatibility, it can also take a boolean:
* - true: same as 'all'
* - false: same as 'private'
+ * @param array $context Additional logging context data
*/
-function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
- global $wgDebugLogGroups;
-
- $text = trim( $text ) . "\n";
-
+function wfDebugLog(
+ $logGroup, $text, $dest = 'all', array $context = array()
+) {
// Turn $dest into a string if it's a boolean (for b/c)
if ( $dest === true ) {
$dest = 'all';
@@ -1077,66 +1150,24 @@ function wfDebugLog( $logGroup, $text, $dest = 'all' ) {
$dest = 'private';
}
- if ( !isset( $wgDebugLogGroups[$logGroup] ) ) {
- if ( $dest !== 'private' ) {
- wfDebug( "[$logGroup] $text", $dest );
- }
- return;
- }
-
- if ( $dest === 'all' ) {
- MWDebug::debugMsg( "[$logGroup] $text" );
- }
-
- $logConfig = $wgDebugLogGroups[$logGroup];
- if ( $logConfig === false ) {
- return;
- }
- if ( is_array( $logConfig ) ) {
- if ( isset( $logConfig['sample'] ) && mt_rand( 1, $logConfig['sample'] ) !== 1 ) {
- return;
- }
- $destination = $logConfig['destination'];
- } else {
- $destination = strval( $logConfig );
- }
+ $text = trim( $text );
- $time = wfTimestamp( TS_DB );
- $wiki = wfWikiID();
- $host = wfHostname();
- wfErrorLog( "$time $host $wiki: $text", $destination );
+ $logger = LoggerFactory::getInstance( $logGroup );
+ $context['private'] = ( $dest === 'private' );
+ $logger->info( $text, $context );
}
/**
* Log for database errors
*
+ * @since 1.25 support for additional context data
+ *
* @param string $text Database error message.
+ * @param array $context Additional logging context data
*/
-function wfLogDBError( $text ) {
- global $wgDBerrorLog, $wgDBerrorLogTZ;
- static $logDBErrorTimeZoneObject = null;
-
- if ( $wgDBerrorLog ) {
- $host = wfHostname();
- $wiki = wfWikiID();
-
- if ( $wgDBerrorLogTZ && !$logDBErrorTimeZoneObject ) {
- $logDBErrorTimeZoneObject = new DateTimeZone( $wgDBerrorLogTZ );
- }
-
- // Workaround for https://bugs.php.net/bug.php?id=52063
- // Can be removed when min PHP > 5.3.2
- if ( $logDBErrorTimeZoneObject === null ) {
- $d = date_create( "now" );
- } else {
- $d = date_create( "now", $logDBErrorTimeZoneObject );
- }
-
- $date = $d->format( 'D M j G:i:s T Y' );
-
- $text = "$date\t$host\t$wiki\t" . trim( $text ) . "\n";
- wfErrorLog( $text, $wgDBerrorLog );
- }
+function wfLogDBError( $text, array $context = array() ) {
+ $logger = LoggerFactory::getInstance( 'wfLogDBError' );
+ $logger->error( trim( $text ), $context );
}
/**
@@ -1188,138 +1219,93 @@ function wfLogWarning( $msg, $callerOffset = 1, $level = E_USER_WARNING ) {
*
* Can also log to TCP or UDP with the syntax udp://host:port/prefix. This will
* send lines to the specified port, prefixed by the specified prefix and a space.
+ * @since 1.25 support for additional context data
*
* @param string $text
* @param string $file Filename
+ * @param array $context Additional logging context data
* @throws MWException
+ * @deprecated since 1.25 Use MediaWiki\Logger\LegacyLogger::emit or UDPTransport
*/
-function wfErrorLog( $text, $file ) {
- if ( substr( $file, 0, 4 ) == 'udp:' ) {
- # Needs the sockets extension
- if ( preg_match( '!^(tcp|udp):(?://)?\[([0-9a-fA-F:]+)\]:(\d+)(?:/(.*))?$!', $file, $m ) ) {
- // IPv6 bracketed host
- $host = $m[2];
- $port = intval( $m[3] );
- $prefix = isset( $m[4] ) ? $m[4] : false;
- $domain = AF_INET6;
- } elseif ( preg_match( '!^(tcp|udp):(?://)?([a-zA-Z0-9.-]+):(\d+)(?:/(.*))?$!', $file, $m ) ) {
- $host = $m[2];
- if ( !IP::isIPv4( $host ) ) {
- $host = gethostbyname( $host );
- }
- $port = intval( $m[3] );
- $prefix = isset( $m[4] ) ? $m[4] : false;
- $domain = AF_INET;
- } else {
- throw new MWException( __METHOD__ . ': Invalid UDP specification' );
- }
-
- // Clean it up for the multiplexer
- if ( strval( $prefix ) !== '' ) {
- $text = preg_replace( '/^/m', $prefix . ' ', $text );
-
- // Limit to 64KB
- if ( strlen( $text ) > 65506 ) {
- $text = substr( $text, 0, 65506 );
- }
-
- if ( substr( $text, -1 ) != "\n" ) {
- $text .= "\n";
- }
- } elseif ( strlen( $text ) > 65507 ) {
- $text = substr( $text, 0, 65507 );
- }
-
- $sock = socket_create( $domain, SOCK_DGRAM, SOL_UDP );
- if ( !$sock ) {
- return;
- }
-
- socket_sendto( $sock, $text, strlen( $text ), 0, $host, $port );
- socket_close( $sock );
- } else {
- wfSuppressWarnings();
- $exists = file_exists( $file );
- $size = $exists ? filesize( $file ) : false;
- if ( !$exists || ( $size !== false && $size + strlen( $text ) < 0x7fffffff ) ) {
- file_put_contents( $file, $text, FILE_APPEND );
- }
- wfRestoreWarnings();
- }
+function wfErrorLog( $text, $file, array $context = array() ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ $logger = LoggerFactory::getInstance( 'wfErrorLog' );
+ $context['destination'] = $file;
+ $logger->info( trim( $text ), $context );
}
/**
* @todo document
*/
function wfLogProfilingData() {
- global $wgRequestTime, $wgDebugLogFile, $wgDebugLogGroups, $wgDebugRawPage;
- global $wgProfileLimit, $wgUser, $wgRequest;
+ global $wgDebugLogGroups, $wgDebugRawPage;
- StatCounter::singleton()->flush();
+ $context = RequestContext::getMain();
+ $request = $context->getRequest();
$profiler = Profiler::instance();
+ $profiler->setContext( $context );
+ $profiler->logData();
- # Profiling must actually be enabled...
- if ( $profiler->isStub() ) {
- return;
+ $config = $context->getConfig();
+ if ( $config->has( 'StatsdServer' ) ) {
+ $statsdServer = explode( ':', $config->get( 'StatsdServer' ) );
+ $statsdHost = $statsdServer[0];
+ $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125;
+ $statsdSender = new SocketSender( $statsdHost, $statsdPort );
+ $statsdClient = new StatsdClient( $statsdSender );
+ $statsdClient->send( $context->getStats()->getBuffer() );
}
- // Get total page request time and only show pages that longer than
- // $wgProfileLimit time (default is 0)
- $elapsed = microtime( true ) - $wgRequestTime;
- if ( $elapsed <= $wgProfileLimit ) {
+ # Profiling must actually be enabled...
+ if ( $profiler instanceof ProfilerStub ) {
return;
}
- $profiler->logData();
-
- // Check whether this should be logged in the debug file.
if ( isset( $wgDebugLogGroups['profileoutput'] )
&& $wgDebugLogGroups['profileoutput'] === false
) {
- // Explicitely disabled
- return;
- }
- if ( !isset( $wgDebugLogGroups['profileoutput'] ) && $wgDebugLogFile == '' ) {
- // Logging not enabled; no point going further
+ // Explicitly disabled
return;
}
if ( !$wgDebugRawPage && wfIsDebugRawPage() ) {
return;
}
- $forward = '';
+ $ctx = array( 'elapsed' => $request->getElapsedTime() );
if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
- $forward = ' forwarded for ' . $_SERVER['HTTP_X_FORWARDED_FOR'];
+ $ctx['forwarded_for'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if ( !empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
- $forward .= ' client IP ' . $_SERVER['HTTP_CLIENT_IP'];
+ $ctx['client_ip'] = $_SERVER['HTTP_CLIENT_IP'];
}
if ( !empty( $_SERVER['HTTP_FROM'] ) ) {
- $forward .= ' from ' . $_SERVER['HTTP_FROM'];
+ $ctx['from'] = $_SERVER['HTTP_FROM'];
}
- if ( $forward ) {
- $forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})";
+ if ( isset( $ctx['forwarded_for'] ) ||
+ isset( $ctx['client_ip'] ) ||
+ isset( $ctx['from'] ) ) {
+ $ctx['proxy'] = $_SERVER['REMOTE_ADDR'];
}
+
// Don't load $wgUser at this late stage just for statistics purposes
- // @todo FIXME: We can detect some anons even if it is not loaded. See User::getId()
- if ( $wgUser->isItemLoaded( 'id' ) && $wgUser->isAnon() ) {
- $forward .= ' anon';
- }
+ // @todo FIXME: We can detect some anons even if it is not loaded.
+ // See User::getId()
+ $user = $context->getUser();
+ $ctx['anon'] = $user->isItemLoaded( 'id' ) && $user->isAnon();
// Command line script uses a FauxRequest object which does not have
// any knowledge about an URL and throw an exception instead.
try {
- $requestUrl = $wgRequest->getRequestURL();
- } catch ( MWException $e ) {
- $requestUrl = 'n/a';
+ $ctx['url'] = urldecode( $request->getRequestURL() );
+ } catch ( Exception $ignored ) {
+ // no-op
}
- $log = sprintf( "%s\t%04.3f\t%s\n",
- gmdate( 'YmdHis' ), $elapsed,
- urldecode( $requestUrl . $forward ) );
+ $ctx['output'] = $profiler->getOutput();
- wfDebugLog( 'profileoutput', $log . $profiler->getOutput() );
+ $log = LoggerFactory::getInstance( 'profileoutput' );
+ $log->info( "Elapsed: {elapsed}; URL: <{url}>\n{output}", $ctx );
}
/**
@@ -1330,7 +1316,8 @@ function wfLogProfilingData() {
* @return void
*/
function wfIncrStats( $key, $count = 1 ) {
- StatCounter::singleton()->incr( $key, $count );
+ $stats = RequestContext::getMain()->getStats();
+ $stats->updateCount( $key, $count );
}
/**
@@ -1573,10 +1560,8 @@ function wfMsgForContentNoTrans( $key ) {
function wfMsgReal( $key, $args, $useDB = true, $forContent = false, $transform = true ) {
wfDeprecated( __METHOD__, '1.21' );
- wfProfileIn( __METHOD__ );
$message = wfMsgGetKey( $key, $useDB, $forContent, $transform );
$message = wfMsgReplaceArgs( $message, $args );
- wfProfileOut( __METHOD__ );
return $message;
}
@@ -1595,7 +1580,7 @@ function wfMsgReal( $key, $args, $useDB = true, $forContent = false, $transform
function wfMsgGetKey( $key, $useDB = true, $langCode = false, $transform = true ) {
wfDeprecated( __METHOD__, '1.21' );
- wfRunHooks( 'NormalizeMessageKey', array( &$key, &$useDB, &$langCode, &$transform ) );
+ Hooks::run( 'NormalizeMessageKey', array( &$key, &$useDB, &$langCode, &$transform ) );
$cache = MessageCache::singleton();
$message = $cache->get( $key, $useDB, $langCode );
@@ -1710,15 +1695,15 @@ function wfMsgExt( $key, $options ) {
array_shift( $args );
array_shift( $args );
$options = (array)$options;
+ $validOptions = array( 'parse', 'parseinline', 'escape', 'escapenoentities', 'replaceafter',
+ 'parsemag', 'content' );
foreach ( $options as $arrayKey => $option ) {
if ( !preg_match( '/^[0-9]+|language$/', $arrayKey ) ) {
- # An unknown index, neither numeric nor "language"
+ // An unknown index, neither numeric nor "language"
wfWarn( "wfMsgExt called with incorrect parameter key $arrayKey", 1, E_USER_WARNING );
- } elseif ( preg_match( '/^[0-9]+$/', $arrayKey ) && !in_array( $option,
- array( 'parse', 'parseinline', 'escape', 'escapenoentities',
- 'replaceafter', 'parsemag', 'content' ) ) ) {
- # A numeric index with unknown value
+ } elseif ( preg_match( '/^[0-9]+$/', $arrayKey ) && !in_array( $option, $validOptions ) ) {
+ // A numeric index with unknown value
wfWarn( "wfMsgExt called with incorrect parameter $option", 1, E_USER_WARNING );
}
}
@@ -1879,52 +1864,37 @@ function wfDebugBacktrace( $limit = 0 ) {
/**
* Get a debug backtrace as a string
*
+ * @param bool|null $raw If true, the return value is plain text. If false, HTML.
+ * Defaults to $wgCommandLineMode if unset.
* @return string
+ * @since 1.25 Supports $raw parameter.
*/
-function wfBacktrace() {
+function wfBacktrace( $raw = null ) {
global $wgCommandLineMode;
- if ( $wgCommandLineMode ) {
- $msg = '';
- } else {
- $msg = "<ul>\n";
+ if ( $raw === null ) {
+ $raw = $wgCommandLineMode;
}
- $backtrace = wfDebugBacktrace();
- foreach ( $backtrace as $call ) {
- if ( isset( $call['file'] ) ) {
- $f = explode( DIRECTORY_SEPARATOR, $call['file'] );
- $file = $f[count( $f ) - 1];
- } else {
- $file = '-';
- }
- if ( isset( $call['line'] ) ) {
- $line = $call['line'];
- } else {
- $line = '-';
- }
- if ( $wgCommandLineMode ) {
- $msg .= "$file line $line calls ";
- } else {
- $msg .= '<li>' . $file . ' line ' . $line . ' calls ';
- }
- if ( !empty( $call['class'] ) ) {
- $msg .= $call['class'] . $call['type'];
- }
- $msg .= $call['function'] . '()';
- if ( $wgCommandLineMode ) {
- $msg .= "\n";
- } else {
- $msg .= "</li>\n";
- }
- }
- if ( $wgCommandLineMode ) {
- $msg .= "\n";
+ if ( $raw ) {
+ $frameFormat = "%s line %s calls %s()\n";
+ $traceFormat = "%s";
} else {
- $msg .= "</ul>\n";
+ $frameFormat = "<li>%s line %s calls %s()</li>\n";
+ $traceFormat = "<ul>\n%s</ul>\n";
}
- return $msg;
+ $frames = array_map( function ( $frame ) use ( $frameFormat ) {
+ $file = !empty( $frame['file'] ) ? basename( $frame['file'] ) : '-';
+ $line = isset( $frame['line'] ) ? $frame['line'] : '-';
+ $call = $frame['function'];
+ if ( !empty( $frame['class'] ) ) {
+ $call = $frame['class'] . $frame['type'] . $call;
+ }
+ return sprintf( $frameFormat, $file, $line, $call );
+ }, wfDebugBacktrace() );
+
+ return sprintf( $traceFormat, implode( '', $frames ) );
}
/**
@@ -2148,10 +2118,12 @@ function wfVarDump( $var ) {
*/
function wfHttpError( $code, $label, $desc ) {
global $wgOut;
- $wgOut->disable();
header( "HTTP/1.0 $code $label" );
header( "Status: $code $label" );
- $wgOut->sendCacheControl();
+ if ( $wgOut ) {
+ $wgOut->disable();
+ $wgOut->sendCacheControl();
+ }
header( 'Content-type: text/html; charset=utf-8' );
print "<!doctype html>" .
@@ -2496,20 +2468,6 @@ function wfIsHHVM() {
}
/**
- * Swap two variables
- *
- * @deprecated since 1.24
- * @param mixed $x
- * @param mixed $y
- */
-function swap( &$x, &$y ) {
- wfDeprecated( __FUNCTION__, '1.24' );
- $z = $x;
- $x = $y;
- $y = $z;
-}
-
-/**
* Tries to get the system directory for temporary files. First
* $wgTmpDirectory is checked, and then the TMPDIR, TMP, and TEMP
* environment variables are then checked in sequence, and if none are
@@ -2659,13 +2617,19 @@ function wfIniGetBool( $setting ) {
* Also fixes the locale problems on Linux in PHP 5.2.6+ (bug backported to
* earlier distro releases of PHP)
*
- * @param string $args,...
+ * @param string ... strings to escape and glue together, or a single array of strings parameter
* @return string
*/
function wfEscapeShellArg( /*...*/ ) {
wfInitShellLocale();
$args = func_get_args();
+ if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+ // If only one argument has been passed, and that argument is an array,
+ // treat it as a list of arguments
+ $args = reset( $args );
+ }
+
$first = true;
$retVal = '';
foreach ( $args as $arg ) {
@@ -2756,6 +2720,8 @@ function wfShellExecDisabled() {
* @param array $options Array of options:
* - duplicateStderr: Set this to true to duplicate stderr to stdout,
* including errors from limit.sh
+ * - profileMethod: By default this function will profile based on the calling
+ * method. Set this to a string for an alternative method to profile from
*
* @return string Collected stdout as a string
*/
@@ -2774,6 +2740,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
}
$includeStderr = isset( $options['duplicateStderr'] ) && $options['duplicateStderr'];
+ $profileMethod = isset( $options['profileMethod'] ) ? $options['profileMethod'] : wfGetCaller();
wfInitShellLocale();
@@ -2795,12 +2762,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
}
}
if ( is_array( $cmd ) ) {
- // Command line may be given as an array, escape each value and glue them together with a space
- $cmdVals = array();
- foreach ( $cmd as $val ) {
- $cmdVals[] = wfEscapeShellArg( $val );
- }
- $cmd = implode( ' ', $cmdVals );
+ $cmd = wfEscapeShellArg( $cmd );
}
$cmd = $envcmd . $cmd;
@@ -2847,6 +2809,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
$desc[3] = array( 'pipe', 'w' );
}
$pipes = null;
+ $scoped = Profiler::instance()->scopedProfileIn( __FUNCTION__ . '-' . $profileMethod );
$proc = proc_open( $cmd, $desc, $pipes );
if ( !$proc ) {
wfDebugLog( 'exec', "proc_open() failed: $cmd" );
@@ -2986,7 +2949,9 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
* function, as all the arguments to wfShellExec can become unwieldy.
*
* @note This also includes errors from limit.sh, e.g. if $wgMaxShellFileSize is exceeded.
- * @param string $cmd Command line, properly escaped for shell.
+ * @param string|string[] $cmd If string, a properly shell-escaped command line,
+ * or an array of unescaped arguments, in which case each value will be escaped
+ * Example: [ 'convert', '-font', 'font name' ] would produce "'convert' '-font' 'font name'"
* @param null|mixed &$retval Optional, will receive the program's exit code.
* (non-zero is usually failure)
* @param array $environ Optional environment variables which should be
@@ -2996,7 +2961,8 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
* @return string Collected stdout and stderr as a string
*/
function wfShellExecWithStderr( $cmd, &$retval = null, $environ = array(), $limits = array() ) {
- return wfShellExec( $cmd, $retval, $environ, $limits, array( 'duplicateStderr' => true ) );
+ return wfShellExec( $cmd, $retval, $environ, $limits,
+ array( 'duplicateStderr' => true, 'profileMethod' => wfGetCaller() ) );
}
/**
@@ -3017,15 +2983,6 @@ function wfInitShellLocale() {
}
/**
- * Alias to wfShellWikiCmd()
- *
- * @see wfShellWikiCmd()
- */
-function wfShellMaintenanceCmd( $script, array $parameters = array(), array $options = array() ) {
- return wfShellWikiCmd( $script, $parameters, $options );
-}
-
-/**
* Generate a shell-escaped command line string to run a MediaWiki cli script.
* Note that $parameters should be a flat array and an option with an argument
* should consist of two consecutive items in the array (do not use "--option value").
@@ -3041,14 +2998,14 @@ function wfShellWikiCmd( $script, array $parameters = array(), array $options =
global $wgPhpCli;
// Give site config file a chance to run the script in a wrapper.
// The caller may likely want to call wfBasename() on $script.
- wfRunHooks( 'wfShellWikiCmd', array( &$script, &$parameters, &$options ) );
+ Hooks::run( 'wfShellWikiCmd', array( &$script, &$parameters, &$options ) );
$cmd = isset( $options['php'] ) ? array( $options['php'] ) : array( $wgPhpCli );
if ( isset( $options['wrapper'] ) ) {
$cmd[] = $options['wrapper'];
}
$cmd[] = $script;
// Escape each parameter for shell
- return implode( " ", array_map( 'wfEscapeShellArg', array_merge( $cmd, $parameters ) ) );
+ return wfEscapeShellArg( array_merge( $cmd, $parameters ) );
}
/**
@@ -3093,10 +3050,8 @@ function wfMerge( $old, $mine, $yours, &$result ) {
fclose( $yourtextFile );
# Check for a conflict
- $cmd = wfEscapeShellArg( $wgDiff3 ) . ' -a --overlap-only ' .
- wfEscapeShellArg( $mytextName ) . ' ' .
- wfEscapeShellArg( $oldtextName ) . ' ' .
- wfEscapeShellArg( $yourtextName );
+ $cmd = wfEscapeShellArg( $wgDiff3, '-a', '--overlap-only', $mytextName,
+ $oldtextName, $yourtextName );
$handle = popen( $cmd, 'r' );
if ( fgets( $handle, 1024 ) ) {
@@ -3107,8 +3062,8 @@ function wfMerge( $old, $mine, $yours, &$result ) {
pclose( $handle );
# Merge differences
- $cmd = wfEscapeShellArg( $wgDiff3 ) . ' -a -e --merge ' .
- wfEscapeShellArg( $mytextName, $oldtextName, $yourtextName );
+ $cmd = wfEscapeShellArg( $wgDiff3, '-a', '-e', '--merge', $mytextName,
+ $oldtextName, $yourtextName );
$handle = popen( $cmd, 'r' );
$result = '';
do {
@@ -3132,7 +3087,9 @@ function wfMerge( $old, $mine, $yours, &$result ) {
/**
* Returns unified plain-text diff of two texts.
- * Useful for machine processing of diffs.
+ * "Useful" for machine processing of diffs.
+ *
+ * @deprecated since 1.25, use DiffEngine/UnifiedDiffFormatter directly
*
* @param string $before The text before the changes.
* @param string $after The text after the changes.
@@ -3172,6 +3129,11 @@ function wfDiff( $before, $after, $params = '-u' ) {
$cmd = "$wgDiff " . $params . ' ' . wfEscapeShellArg( $oldtextName, $newtextName );
$h = popen( $cmd, 'r' );
+ if ( !$h ) {
+ unlink( $oldtextName );
+ unlink( $newtextName );
+ throw new Exception( __METHOD__ . '(): popen() failed' );
+ }
$diff = '';
@@ -3493,7 +3455,7 @@ function wfResetSessionID() {
$_SESSION = $tmp;
}
$newSessionId = session_id();
- wfRunHooks( 'ResetSessionID', array( $oldSessionId, $newSessionId ) );
+ Hooks::run( 'ResetSessionID', array( $oldSessionId, $newSessionId ) );
}
/**
@@ -3628,7 +3590,7 @@ function wfSplitWikiID( $wiki ) {
*
* @return DatabaseBase
*/
-function &wfGetDB( $db, $groups = array(), $wiki = false ) {
+function wfGetDB( $db, $groups = array(), $wiki = false ) {
return wfGetLB( $wiki )->getConnection( $db, $groups, $wiki );
}
@@ -3647,7 +3609,7 @@ function wfGetLB( $wiki = false ) {
*
* @return LBFactory
*/
-function &wfGetLBFactory() {
+function wfGetLBFactory() {
return LBFactory::singleton();
}
@@ -3656,19 +3618,7 @@ function &wfGetLBFactory() {
* Shortcut for RepoGroup::singleton()->findFile()
*
* @param string $title String or Title object
- * @param array $options Associative array of options:
- * time: requested time for an archived image, or false for the
- * current version. An image object will be returned which was
- * created at the specified time.
- *
- * ignoreRedirect: If true, do not follow file redirects
- *
- * private: If true, return restricted (deleted) files if the current
- * user is allowed to view them. Otherwise, such files will not
- * be found.
- *
- * bypassCache: If true, do not use the process-local cache of File objects
- *
+ * @param array $options Associative array of options (see RepoGroup::findFile)
* @return File|bool File, or false if the file does not exist
*/
function wfFindFile( $title, $options = array() ) {
@@ -3763,46 +3713,79 @@ function wfGetNull() {
}
/**
- * Modern version of wfWaitForSlaves(). Instead of looking at replication lag
- * and waiting for it to go down, this waits for the slaves to catch up to the
- * master position. Use this when updating very large numbers of rows, as
- * in maintenance scripts, to avoid causing too much lag. Of course, this is
- * a no-op if there are no slaves.
+ * Waits for the slaves to catch up to the master position
+ *
+ * Use this when updating very large numbers of rows, as in maintenance scripts,
+ * to avoid causing too much lag. Of course, this is a no-op if there are no slaves.
+ *
+ * By default this waits on the main DB cluster of the current wiki.
+ * If $cluster is set to "*" it will wait on all DB clusters, including
+ * external ones. If the lag being waiting on is caused by the code that
+ * does this check, it makes since to use $ifWritesSince, particularly if
+ * cluster is "*", to avoid excess overhead.
+ *
+ * Never call this function after a big DB write that is still in a transaction.
+ * This only makes sense after the possible lag inducing changes were committed.
*
* @param float|null $ifWritesSince Only wait if writes were done since this UNIX timestamp
* @param string|bool $wiki Wiki identifier accepted by wfGetLB
* @param string|bool $cluster Cluster name accepted by LBFactory. Default: false.
+ * @param int|null $timeout Max wait time. Default: 1 day (cli), ~10 seconds (web)
* @return bool Success (able to connect and no timeouts reached)
*/
-function wfWaitForSlaves( $ifWritesSince = false, $wiki = false, $cluster = false ) {
+function wfWaitForSlaves(
+ $ifWritesSince = null, $wiki = false, $cluster = false, $timeout = null
+) {
// B/C: first argument used to be "max seconds of lag"; ignore such values
- $ifWritesSince = ( $ifWritesSince > 1e9 ) ? $ifWritesSince : false;
+ $ifWritesSince = ( $ifWritesSince > 1e9 ) ? $ifWritesSince : null;
- if ( $cluster !== false ) {
- $lb = wfGetLBFactory()->getExternalLB( $cluster );
- } else {
- $lb = wfGetLB( $wiki );
+ if ( $timeout === null ) {
+ $timeout = ( PHP_SAPI === 'cli' ) ? 86400 : 10;
}
- // bug 27975 - Don't try to wait for slaves if there are none
- // Prevents permission error when getting master position
- if ( $lb->getServerCount() > 1 ) {
- if ( $ifWritesSince && !$lb->hasMasterConnection() ) {
- return true; // assume no writes done
- }
- $dbw = $lb->getConnection( DB_MASTER, array(), $wiki );
- if ( $ifWritesSince && $dbw->lastDoneWrites() < $ifWritesSince ) {
- return true; // no writes since the last wait
+ // Figure out which clusters need to be checked
+ $lbs = array();
+ if ( $cluster === '*' ) {
+ wfGetLBFactory()->forEachLB( function ( LoadBalancer $lb ) use ( &$lbs ) {
+ $lbs[] = $lb;
+ } );
+ } elseif ( $cluster !== false ) {
+ $lbs[] = wfGetLBFactory()->getExternalLB( $cluster );
+ } else {
+ $lbs[] = wfGetLB( $wiki );
+ }
+
+ // Get all the master positions of applicable DBs right now.
+ // This can be faster since waiting on one cluster reduces the
+ // time needed to wait on the next clusters.
+ $masterPositions = array_fill( 0, count( $lbs ), false );
+ foreach ( $lbs as $i => $lb ) {
+ // bug 27975 - Don't try to wait for slaves if there are none
+ // Prevents permission error when getting master position
+ if ( $lb->getServerCount() > 1 ) {
+ if ( $ifWritesSince && !$lb->hasMasterConnection() ) {
+ continue; // assume no writes done
+ }
+ // Use the empty string to not trigger selectDB() since the connection
+ // may have been to a server that does not have a DB for the current wiki.
+ $dbw = $lb->getConnection( DB_MASTER, array(), '' );
+ if ( $ifWritesSince && $dbw->lastDoneWrites() < $ifWritesSince ) {
+ continue; // no writes since the last wait
+ }
+ $masterPositions[$i] = $dbw->getMasterPos();
}
- $pos = $dbw->getMasterPos();
- // The DBMS may not support getMasterPos() or the whole
- // load balancer might be fake (e.g. $wgAllDBsAreLocalhost).
- if ( $pos !== false ) {
- return $lb->waitForAll( $pos, PHP_SAPI === 'cli' ? 86400 : null );
+ }
+
+ $ok = true;
+ foreach ( $lbs as $i => $lb ) {
+ if ( $masterPositions[$i] ) {
+ // The DBMS may not support getMasterPos() or the whole
+ // load balancer might be fake (e.g. $wgAllDBsAreLocalhost).
+ $ok = $lb->waitForAll( $masterPositions[$i], $timeout ) && $ok;
}
}
- return true;
+ return $ok;
}
/**
@@ -3935,7 +3918,7 @@ function wfBCP47( $code ) {
/**
* Get a cache object.
*
- * @param int $inputType Cache type, one the the CACHE_* constants.
+ * @param int $inputType Cache type, one of the CACHE_* constants.
* @return BagOStuff
*/
function wfGetCache( $inputType ) {
@@ -3973,16 +3956,6 @@ function wfGetParserCacheStorage() {
}
/**
- * Get the cache object used by the language converter
- *
- * @return BagOStuff
- */
-function wfGetLangConverterCacheStorage() {
- global $wgLanguageConverterCacheType;
- return ObjectCache::getInstance( $wgLanguageConverterCacheType );
-}
-
-/**
* Call hook functions defined in $wgHooks
*
* @param string $event Event name
@@ -3990,6 +3963,7 @@ function wfGetLangConverterCacheStorage() {
* @param string|null $deprecatedVersion Optionally mark hook as deprecated with version number
*
* @return bool True if no handler aborted the hook
+ * @deprecated 1.25 - use Hooks::run
*/
function wfRunHooks( $event, array $args = array(), $deprecatedVersion = null ) {
return Hooks::run( $event, $args, $deprecatedVersion );
@@ -4047,7 +4021,6 @@ function wfUnpack( $format, $data, $length = false ) {
*/
function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
static $badImageCache = null; // based on bad_image_list msg
- wfProfileIn( __METHOD__ );
# Handle redirects
$redirectTitle = RepoGroup::singleton()->checkRedirect( Title::makeTitle( NS_FILE, $name ) );
@@ -4057,8 +4030,7 @@ function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
# Run the extension hook
$bad = false;
- if ( !wfRunHooks( 'BadImage', array( $name, &$bad ) ) ) {
- wfProfileOut( __METHOD__ );
+ if ( !Hooks::run( 'BadImage', array( $name, &$bad ) ) ) {
return $bad;
}
@@ -4108,7 +4080,6 @@ function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
$contextKey = $contextTitle ? $contextTitle->getPrefixedDBkey() : false;
$bad = isset( $badImages[$name] ) && !isset( $badImages[$name][$contextKey] );
- wfProfileOut( __METHOD__ );
return $bad;
}
@@ -4121,11 +4092,23 @@ function wfIsBadImage( $name, $contextTitle = false, $blacklist = null ) {
*/
function wfCanIPUseHTTPS( $ip ) {
$canDo = true;
- wfRunHooks( 'CanIPUseHTTPS', array( $ip, &$canDo ) );
+ Hooks::run( 'CanIPUseHTTPS', array( $ip, &$canDo ) );
return !!$canDo;
}
/**
+ * Determine input string is represents as infinity
+ *
+ * @param string $str The string to determine
+ * @return bool
+ * @since 1.25
+ */
+function wfIsInfinity( $str ) {
+ $infinityValues = array( 'infinite', 'indefinite', 'infinity', 'never' );
+ return in_array( $str, $infinityValues );
+}
+
+/**
* Work out the IP address based on various globals
* For trusted proxies, use the XFF client IP (first of the chain)
*
@@ -4148,6 +4131,7 @@ function wfGetIP() {
* @return bool
*/
function wfIsTrustedProxy( $ip ) {
+ wfDeprecated( __METHOD__, '1.24' );
return IP::isTrustedProxy( $ip );
}
@@ -4160,5 +4144,94 @@ function wfIsTrustedProxy( $ip ) {
* @since 1.23 Supports CIDR ranges in $wgSquidServersNoPurge
*/
function wfIsConfiguredProxy( $ip ) {
+ wfDeprecated( __METHOD__, '1.24' );
return IP::isConfiguredProxy( $ip );
}
+
+/**
+ * Returns true if these thumbnail parameters match one that MediaWiki
+ * requests from file description pages and/or parser output.
+ *
+ * $params is considered non-standard if they involve a non-standard
+ * width or any non-default parameters aside from width and page number.
+ * The number of possible files with standard parameters is far less than
+ * that of all combinations; rate-limiting for them can thus be more generious.
+ *
+ * @param File $file
+ * @param array $params
+ * @return bool
+ * @since 1.24 Moved from thumb.php to GlobalFunctions in 1.25
+ */
+function wfThumbIsStandard( File $file, array $params ) {
+ global $wgThumbLimits, $wgImageLimits, $wgResponsiveImages;
+
+ $multipliers = array( 1 );
+ if ( $wgResponsiveImages ) {
+ // These available sizes are hardcoded currently elsewhere in MediaWiki.
+ // @see Linker::processResponsiveImages
+ $multipliers[] = 1.5;
+ $multipliers[] = 2;
+ }
+
+ $handler = $file->getHandler();
+ if ( !$handler || !isset( $params['width'] ) ) {
+ return false;
+ }
+
+ $basicParams = array();
+ if ( isset( $params['page'] ) ) {
+ $basicParams['page'] = $params['page'];
+ }
+
+ $thumbLimits = array();
+ $imageLimits = array();
+ // Expand limits to account for multipliers
+ foreach ( $multipliers as $multiplier ) {
+ $thumbLimits = array_merge( $thumbLimits, array_map(
+ function ( $width ) use ( $multiplier ) {
+ return round( $width * $multiplier );
+ }, $wgThumbLimits )
+ );
+ $imageLimits = array_merge( $imageLimits, array_map(
+ function ( $pair ) use ( $multiplier ) {
+ return array(
+ round( $pair[0] * $multiplier ),
+ round( $pair[1] * $multiplier ),
+ );
+ }, $wgImageLimits )
+ );
+ }
+
+ // Check if the width matches one of $wgThumbLimits
+ if ( in_array( $params['width'], $thumbLimits ) ) {
+ $normalParams = $basicParams + array( 'width' => $params['width'] );
+ // Append any default values to the map (e.g. "lossy", "lossless", ...)
+ $handler->normaliseParams( $file, $normalParams );
+ } else {
+ // If not, then check if the width matchs one of $wgImageLimits
+ $match = false;
+ foreach ( $imageLimits as $pair ) {
+ $normalParams = $basicParams + array( 'width' => $pair[0], 'height' => $pair[1] );
+ // Decide whether the thumbnail should be scaled on width or height.
+ // Also append any default values to the map (e.g. "lossy", "lossless", ...)
+ $handler->normaliseParams( $file, $normalParams );
+ // Check if this standard thumbnail size maps to the given width
+ if ( $normalParams['width'] == $params['width'] ) {
+ $match = true;
+ break;
+ }
+ }
+ if ( !$match ) {
+ return false; // not standard for description pages
+ }
+ }
+
+ // Check that the given values for non-page, non-width, params are just defaults
+ foreach ( $params as $key => $value ) {
+ if ( !isset( $normalParams[$key] ) || $normalParams[$key] != $value ) {
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/includes/Hooks.php b/includes/Hooks.php
index 29287483..dffc7bcf 100644
--- a/includes/Hooks.php
+++ b/includes/Hooks.php
@@ -127,14 +127,17 @@ class Hooks {
* @param string|null $deprecatedVersion Optionally, mark hook as deprecated with version number
* @return bool True if no handler aborted the hook
*
+ * @throws Exception
+ * @throws FatalError
+ * @throws MWException
* @since 1.22 A hook function is not required to return a value for
* processing to continue. Not returning a value (or explicitly
* returning null) is equivalent to returning true.
- * @throws MWException
- * @throws FatalError
*/
public static function run( $event, array $args = array(), $deprecatedVersion = null ) {
- wfProfileIn( 'hook: ' . $event );
+ $profiler = Profiler::instance();
+ $eventPS = $profiler->scopedProfileIn( 'hook: ' . $event );
+
foreach ( self::getHandlers( $event ) as $hook ) {
// Turn non-array values into an array. (Can't use casting because of objects.)
if ( !is_array( $hook ) ) {
@@ -179,7 +182,7 @@ class Hooks {
// Run autoloader (workaround for call_user_func_array bug)
// and throw error if not callable.
if ( !is_callable( $callback ) ) {
- throw new MWException( 'Invalid callback in hooks for ' . $event . "\n" );
+ throw new MWException( 'Invalid callback ' . $func . ' in hooks for ' . $event . "\n" );
}
/*
@@ -193,8 +196,8 @@ class Hooks {
$badhookmsg = null;
$hook_args = array_merge( $hook, $args );
- // Profile first in case the Profiler causes errors.
- wfProfileIn( $func );
+ // Profile first in case the Profiler causes errors
+ $funcPS = $profiler->scopedProfileIn( $func );
set_error_handler( 'Hooks::hookErrorHandler' );
// mark hook as deprecated, if deprecation version is specified
@@ -210,8 +213,9 @@ class Hooks {
restore_error_handler();
throw $e;
}
+
restore_error_handler();
- wfProfileOut( $func );
+ $profiler->scopedProfileOut( $funcPS );
// Process the return value.
if ( is_string( $retval ) ) {
@@ -224,13 +228,11 @@ class Hooks {
"Hook $func has invalid call signature; " . $badhookmsg
);
} elseif ( $retval === false ) {
- wfProfileOut( 'hook: ' . $event );
// False was returned. Stop processing, but no error.
return false;
}
}
- wfProfileOut( 'hook: ' . $event );
return true;
}
diff --git a/includes/Html.php b/includes/Html.php
index 2e148140..d312e0a6 100644
--- a/includes/Html.php
+++ b/includes/Html.php
@@ -102,6 +102,35 @@ class Html {
);
/**
+ * Modifies a set of attributes meant for button elements
+ * and apply a set of default attributes when $wgUseMediaWikiUIEverywhere enabled.
+ * @param array $attrs
+ * @param string[] $modifiers to add to the button
+ * @see https://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
+ * @return array $attrs A modified attribute array
+ */
+ public static function buttonAttributes( $attrs, $modifiers = array() ) {
+ global $wgUseMediaWikiUIEverywhere;
+ if ( $wgUseMediaWikiUIEverywhere ) {
+ if ( isset( $attrs['class'] ) ) {
+ if ( is_array( $attrs['class'] ) ) {
+ $attrs['class'][] = 'mw-ui-button';
+ $attrs = array_merge( $attrs, $modifiers );
+ // ensure compatibility with Xml
+ $attrs['class'] = implode( ' ', $attrs['class'] );
+ } else {
+ $attrs['class'] .= ' mw-ui-button ' . implode( ' ', $modifiers );
+ }
+ } else {
+ $attrs['class'] = array( 'mw-ui-button' );
+ // ensure compatibility with Xml
+ $attrs['class'] = implode( ' ', array_merge( $attrs['class'], $modifiers ) );
+ }
+ }
+ return $attrs;
+ }
+
+ /**
* Modifies a set of attributes meant for text input elements
* and apply a set of default attributes.
* Removes size attribute when $wgUseMediaWikiUIEverywhere enabled.
@@ -113,28 +142,63 @@ class Html {
if ( !$attrs ) {
$attrs = array();
}
- if ( isset( $attrs['class'] ) ) {
- if ( is_array( $attrs['class'] ) ) {
- $attrs['class'][] = 'mw-ui-input';
+ if ( $wgUseMediaWikiUIEverywhere ) {
+ if ( isset( $attrs['class'] ) ) {
+ if ( is_array( $attrs['class'] ) ) {
+ $attrs['class'][] = 'mw-ui-input';
+ } else {
+ $attrs['class'] .= ' mw-ui-input';
+ }
} else {
- $attrs['class'] .= ' mw-ui-input';
+ $attrs['class'] = 'mw-ui-input';
}
- } else {
- $attrs['class'] = 'mw-ui-input';
- }
- if ( $wgUseMediaWikiUIEverywhere ) {
- // Note that size can effect the desired width rendering of mw-ui-input elements
- // so it is removed. Left intact when mediawiki ui not enabled.
- unset( $attrs['size'] );
}
return $attrs;
}
/**
+ * Returns an HTML link element in a string styled as a button
+ * (when $wgUseMediaWikiUIEverywhere is enabled).
+ *
+ * @param string $contents The raw HTML contents of the element: *not*
+ * escaped!
+ * @param array $attrs Associative array of attributes, e.g., array(
+ * 'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for
+ * further documentation.
+ * @param string[] $modifiers to add to the button
+ * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
+ * @return string Raw HTML
+ */
+ public static function linkButton( $contents, $attrs, $modifiers = array() ) {
+ return self::element( 'a',
+ self::buttonAttributes( $attrs, $modifiers ),
+ $contents
+ );
+ }
+
+ /**
+ * Returns an HTML link element in a string styled as a button
+ * (when $wgUseMediaWikiUIEverywhere is enabled).
+ *
+ * @param string $contents The raw HTML contents of the element: *not*
+ * escaped!
+ * @param array $attrs Associative array of attributes, e.g., array(
+ * 'href' => 'http://www.mediawiki.org/' ). See expandAttributes() for
+ * further documentation.
+ * @param string[] $modifiers to add to the button
+ * @see http://tools.wmflabs.org/styleguide/desktop/index.html for guidance on available modifiers
+ * @return string Raw HTML
+ */
+ public static function submitButton( $contents, $attrs, $modifiers = array() ) {
+ $attrs['type'] = 'submit';
+ $attrs['value'] = $contents;
+ return self::element( 'input', self::buttonAttributes( $attrs, $modifiers ) );
+ }
+
+ /**
* Returns an HTML element in a string. The major advantage here over
* manually typing out the HTML is that it will escape all attribute
- * values. If you're hardcoding all the attributes, or there are none, you
- * should probably just type out the html element yourself.
+ * values.
*
* This is quite similar to Xml::tags(), but it implements some useful
* HTML-specific logic. For instance, there is no $allowShortTag
@@ -193,20 +257,11 @@ class Html {
* @return string
*/
public static function openElement( $element, $attribs = array() ) {
- global $wgWellFormedXml;
$attribs = (array)$attribs;
// This is not required in HTML5, but let's do it anyway, for
// consistency and better compression.
$element = strtolower( $element );
- // In text/html, initial <html> and <head> tags can be omitted under
- // pretty much any sane circumstances, if they have no attributes. See:
- // <http://www.whatwg.org/html/syntax.html#optional-tags>
- if ( !$wgWellFormedXml && !$attribs
- && in_array( $element, array( 'html', 'head' ) ) ) {
- return '';
- }
-
// Remove invalid input types
if ( $element == 'input' ) {
$validTypes = array(
@@ -236,8 +291,7 @@ class Html {
'tel',
'color',
);
- if ( isset( $attribs['type'] )
- && !in_array( $attribs['type'], $validTypes ) ) {
+ if ( isset( $attribs['type'] ) && !in_array( $attribs['type'], $validTypes ) ) {
unset( $attribs['type'] );
}
}
@@ -331,8 +385,9 @@ class Html {
}
// Simple checks using $attribDefaults
- if ( isset( $attribDefaults[$element][$lcattrib] ) &&
- $attribDefaults[$element][$lcattrib] == $value ) {
+ if ( isset( $attribDefaults[$element][$lcattrib] )
+ && $attribDefaults[$element][$lcattrib] == $value
+ ) {
unset( $attribs[$attrib] );
}
@@ -342,8 +397,9 @@ class Html {
}
// More subtle checks
- if ( $element === 'link' && isset( $attribs['type'] )
- && strval( $attribs['type'] ) == 'text/css' ) {
+ if ( $element === 'link'
+ && isset( $attribs['type'] ) && strval( $attribs['type'] ) == 'text/css'
+ ) {
unset( $attribs['type'] );
}
if ( $element === 'input' ) {
@@ -442,8 +498,7 @@ class Html {
// For boolean attributes, support array( 'foo' ) instead of
// requiring array( 'foo' => 'meaningless' ).
- if ( is_int( $key )
- && in_array( strtolower( $value ), self::$boolAttribs ) ) {
+ if ( is_int( $key ) && in_array( strtolower( $value ), self::$boolAttribs ) ) {
$key = $value;
}
@@ -522,14 +577,13 @@ class Html {
// marks omitted, but not all. (Although a literal " is not
// permitted, we don't check for that, since it will be escaped
// anyway.)
- #
+
// See also research done on further characters that need to be
// escaped: http://code.google.com/p/html5lib/issues/detail?id=93
$badChars = "\\x00- '=<>`/\x{00a0}\x{1680}\x{180e}\x{180F}\x{2000}\x{2001}"
. "\x{2002}\x{2003}\x{2004}\x{2005}\x{2006}\x{2007}\x{2008}\x{2009}"
. "\x{200A}\x{2028}\x{2029}\x{202F}\x{205F}\x{3000}";
- if ( $wgWellFormedXml || $value === ''
- || preg_match( "![$badChars]!u", $value ) ) {
+ if ( $wgWellFormedXml || $value === '' || preg_match( "![$badChars]!u", $value ) ) {
$quote = '"';
} else {
$quote = '';
@@ -654,7 +708,7 @@ class Html {
* new HTML5 input types and attributes.
*
* @param string $name Name attribute
- * @param array $value Value attribute
+ * @param string $value Value attribute
* @param string $type Type attribute
* @param array $attribs Associative array of miscellaneous extra
* attributes, passed to Html::element()
@@ -665,7 +719,7 @@ class Html {
$attribs['value'] = $value;
$attribs['name'] = $name;
if ( in_array( $type, array( 'text', 'search', 'email', 'password', 'number' ) ) ) {
- $attribs = Html::getTextInputAttributes( $attribs );
+ $attribs = self::getTextInputAttributes( $attribs );
}
return self::element( 'input', $attribs );
}
@@ -676,7 +730,7 @@ class Html {
* @param string $name Name attribute
* @param bool $checked Whether the checkbox is checked or not
* @param array $attribs Array of additional attributes
- * @return string
+ * @return string Raw HTML
*/
public static function check( $name, $checked = false, array $attribs = array() ) {
if ( isset( $attribs['value'] ) ) {
@@ -699,7 +753,7 @@ class Html {
* @param string $name Name attribute
* @param bool $checked Whether the checkbox is checked or not
* @param array $attribs Array of additional attributes
- * @return string
+ * @return string Raw HTML
*/
public static function radio( $name, $checked = false, array $attribs = array() ) {
if ( isset( $attribs['value'] ) ) {
@@ -722,7 +776,7 @@ class Html {
* @param string $label Contents of the label
* @param string $id ID of the element being labeled
* @param array $attribs Additional attributes
- * @return string
+ * @return string Raw HTML
*/
public static function label( $label, $id, array $attribs = array() ) {
$attribs += array(
@@ -768,7 +822,7 @@ class Html {
} else {
$spacedValue = $value;
}
- return self::element( 'textarea', Html::getTextInputAttributes( $attribs ), $spacedValue );
+ return self::element( 'textarea', self::getTextInputAttributes( $attribs ), $spacedValue );
}
/**
@@ -833,13 +887,13 @@ class Html {
continue;
}
if ( $nsId === NS_MAIN ) {
- // For other namespaces use use the namespace prefix as label, but for
+ // For other namespaces use the namespace prefix as label, but for
// main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)")
$nsName = wfMessage( 'blanknamespace' )->text();
} elseif ( is_int( $nsId ) ) {
$nsName = $wgContLang->convertNamespace( $nsId );
}
- $optionsHtml[] = Html::element(
+ $optionsHtml[] = self::element(
'option', array(
'disabled' => in_array( $nsId, $params['disable'] ),
'value' => $nsId,
@@ -858,7 +912,7 @@ class Html {
$ret = '';
if ( isset( $params['label'] ) ) {
- $ret .= Html::element(
+ $ret .= self::element(
'label', array(
'for' => isset( $selectAttribs['id'] ) ? $selectAttribs['id'] : null,
), $params['label']
@@ -866,11 +920,11 @@ class Html {
}
// Wrap options in a <select>
- $ret .= Html::openElement( 'select', $selectAttribs )
+ $ret .= self::openElement( 'select', $selectAttribs )
. "\n"
. implode( "\n", $optionsHtml )
. "\n"
- . Html::closeElement( 'select' );
+ . self::closeElement( 'select' );
return $ret;
}
@@ -911,7 +965,7 @@ class Html {
$attribs['version'] = $wgHtml5Version;
}
- $html = Html::openElement( 'html', $attribs );
+ $html = self::openElement( 'html', $attribs );
if ( $html ) {
$html .= "\n";
@@ -946,44 +1000,58 @@ class Html {
*
* @return string
*/
- static function infoBox( $text, $icon, $alt, $class = false ) {
- $s = Html::openElement( 'div', array( 'class' => "mw-infobox $class" ) );
+ static function infoBox( $text, $icon, $alt, $class = '' ) {
+ $s = self::openElement( 'div', array( 'class' => "mw-infobox $class" ) );
- $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-left' ) ) .
- Html::element( 'img',
+ $s .= self::openElement( 'div', array( 'class' => 'mw-infobox-left' ) ) .
+ self::element( 'img',
array(
'src' => $icon,
'alt' => $alt,
)
) .
- Html::closeElement( 'div' );
+ self::closeElement( 'div' );
- $s .= Html::openElement( 'div', array( 'class' => 'mw-infobox-right' ) ) .
+ $s .= self::openElement( 'div', array( 'class' => 'mw-infobox-right' ) ) .
$text .
- Html::closeElement( 'div' );
- $s .= Html::element( 'div', array( 'style' => 'clear: left;' ), ' ' );
+ self::closeElement( 'div' );
+ $s .= self::element( 'div', array( 'style' => 'clear: left;' ), ' ' );
- $s .= Html::closeElement( 'div' );
+ $s .= self::closeElement( 'div' );
- $s .= Html::element( 'div', array( 'style' => 'clear: left;' ), ' ' );
+ $s .= self::element( 'div', array( 'style' => 'clear: left;' ), ' ' );
return $s;
}
/**
- * Generate a srcset attribute value from an array mapping pixel densities
- * to URLs. Note that srcset supports width and height values as well, which
- * are not used here.
+ * Generate a srcset attribute value.
+ *
+ * Generates a srcset attribute value from an array mapping pixel densities
+ * to URLs. A trailing 'x' in pixel density values is optional.
+ *
+ * @note srcset width and height values are not supported.
+ *
+ * @see http://www.whatwg.org/html/embedded-content-1.html#attr-img-srcset
+ *
+ * @par Example:
+ * @code
+ * Html::srcSet( array(
+ * '1x' => 'standard.jpeg',
+ * '1.5x' => 'large.jpeg',
+ * '3x' => 'extra-large.jpeg',
+ * ) );
+ * // gives 'standard.jpeg 1x, large.jpeg 1.5x, extra-large.jpeg 2x'
+ * @endcode
*
- * @param array $urls
+ * @param string[] $urls
* @return string
*/
static function srcSet( $urls ) {
$candidates = array();
foreach ( $urls as $density => $url ) {
- // Image candidate syntax per current whatwg live spec, 2012-09-23:
- // http://www.whatwg.org/html/embedded-content-1.html#attr-img-srcset
- $candidates[] = "{$url} {$density}x";
+ // Cast density to float to strip 'x'.
+ $candidates[] = $url . ' ' . (float)$density . 'x';
}
return implode( ", ", $candidates );
}
diff --git a/includes/HtmlFormatter.php b/includes/HtmlFormatter.php
index ccbfba82..b2926d17 100644
--- a/includes/HtmlFormatter.php
+++ b/includes/HtmlFormatter.php
@@ -133,7 +133,6 @@ class HtmlFormatter {
* @return array Array of removed DOMElements
*/
public function filterContent() {
- wfProfileIn( __METHOD__ );
$removals = $this->parseItemsToRemove();
// Bail out early if nothing to do
@@ -143,7 +142,6 @@ class HtmlFormatter {
},
true
) ) {
- wfProfileOut( __METHOD__ );
return array();
}
@@ -178,7 +176,7 @@ class HtmlFormatter {
// CSS Classes
$domElemsToRemove = array();
- $xpath = new DOMXpath( $doc );
+ $xpath = new DOMXPath( $doc );
foreach ( $removals['CLASS'] as $classToRemove ) {
$elements = $xpath->query( '//*[contains(@class, "' . $classToRemove . '")]' );
@@ -202,7 +200,6 @@ class HtmlFormatter {
$removed = array_merge( $removed, $this->removeElements( $elements ) );
}
- wfProfileOut( __METHOD__ );
return $removed;
}
@@ -235,7 +232,6 @@ class HtmlFormatter {
* @return string
*/
private function fixLibXML( $html ) {
- wfProfileIn( __METHOD__ );
static $replacements;
if ( !$replacements ) {
// We don't include rules like '&#34;' => '&amp;quot;' because entities had already been
@@ -249,7 +245,6 @@ class HtmlFormatter {
}
$html = $replacements->replace( $html );
$html = mb_convert_encoding( $html, 'UTF-8', 'HTML-ENTITIES' );
- wfProfileOut( __METHOD__ );
return $html;
}
@@ -264,10 +259,8 @@ class HtmlFormatter {
* @return string Processed HTML
*/
public function getText( $element = null ) {
- wfProfileIn( __METHOD__ );
if ( $this->doc ) {
- wfProfileIn( __METHOD__ . '-dom' );
if ( $element !== null && !( $element instanceof DOMElement ) ) {
$element = $this->doc->getElementById( $element );
}
@@ -283,9 +276,7 @@ class HtmlFormatter {
$body->appendChild( $element );
}
$html = $this->doc->saveHTML();
- wfProfileOut( __METHOD__ . '-dom' );
- wfProfileIn( __METHOD__ . '-fixes' );
$html = $this->fixLibXml( $html );
if ( wfIsWindows() ) {
// Cleanup for CRLF misprocessing of unknown origin on Windows.
@@ -294,7 +285,6 @@ class HtmlFormatter {
// XML code paths if possible and fix there.
$html = str_replace( '&#13;', '', $html );
}
- wfProfileOut( __METHOD__ . '-fixes' );
} else {
$html = $this->html;
}
@@ -302,14 +292,11 @@ class HtmlFormatter {
$html = preg_replace( '/<!--.*?-->|^.*?<body>|<\/body>.*$/s', '', $html );
$html = $this->onHtmlReady( $html );
- wfProfileIn( __METHOD__ . '-flatten' );
if ( $this->elementsToFlatten ) {
$elements = implode( '|', $this->elementsToFlatten );
$html = preg_replace( "#</?($elements)\\b[^>]*>#is", '', $html );
}
- wfProfileOut( __METHOD__ . '-flatten' );
- wfProfileOut( __METHOD__ );
return $html;
}
@@ -322,6 +309,7 @@ class HtmlFormatter {
* @param string $type The type of selector (ID, CLASS, TAG_CLASS, or TAG)
* @param string $rawName The raw name of the selector
* @return bool Whether the selector was successfully recognised
+ * @throws MWException
*/
protected function parseSelector( $selector, &$type, &$rawName ) {
if ( strpos( $selector, '.' ) === 0 ) {
@@ -349,7 +337,6 @@ class HtmlFormatter {
* @return array
*/
protected function parseItemsToRemove() {
- wfProfileIn( __METHOD__ );
$removals = array(
'ID' => array(),
'TAG' => array(),
@@ -371,7 +358,6 @@ class HtmlFormatter {
$removals['TAG'][] = 'video';
}
- wfProfileOut( __METHOD__ );
return $removals;
}
}
diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php
index 83021245..8e05f597 100644
--- a/includes/HttpFunctions.php
+++ b/includes/HttpFunctions.php
@@ -55,11 +55,11 @@ class Http {
* to avoid attacks on intranet services accessible by HTTP.
* - userAgent A user agent, if you want to override the default
* MediaWiki/$wgVersion
+ * @param string $caller The method making this request, for profiling
* @return string|bool (bool)false on failure or a string on success
*/
- public static function request( $method, $url, $options = array() ) {
+ public static function request( $method, $url, $options = array(), $caller = __METHOD__ ) {
wfDebug( "HTTP: $method: $url\n" );
- wfProfileIn( __METHOD__ . "-$method" );
$options['method'] = strtoupper( $method );
@@ -70,29 +70,39 @@ class Http {
$options['connectTimeout'] = 'default';
}
- $req = MWHttpRequest::factory( $url, $options );
+ $req = MWHttpRequest::factory( $url, $options, $caller );
$status = $req->execute();
$content = false;
if ( $status->isOK() ) {
$content = $req->getContent();
}
- wfProfileOut( __METHOD__ . "-$method" );
return $content;
}
/**
* Simple wrapper for Http::request( 'GET' )
* @see Http::request()
+ * @since 1.25 Second parameter $timeout removed. Second parameter
+ * is now $options which can be given a 'timeout'
*
* @param string $url
- * @param string $timeout
* @param array $options
+ * @param string $caller The method making this request, for profiling
* @return string
*/
- public static function get( $url, $timeout = 'default', $options = array() ) {
- $options['timeout'] = $timeout;
- return Http::request( 'GET', $url, $options );
+ public static function get( $url, $options = array(), $caller = __METHOD__ ) {
+ $args = func_get_args();
+ if ( isset( $args[1] ) && ( is_string( $args[1] ) || is_numeric( $args[1] ) ) ) {
+ // Second was used to be the timeout
+ // And third parameter used to be $options
+ wfWarn( "Second parameter should not be a timeout.", 2 );
+ $options = isset( $args[2] ) && is_array( $args[2] ) ?
+ $args[2] : array();
+ $options['timeout'] = $args[1];
+ $caller = __METHOD__;
+ }
+ return Http::request( 'GET', $url, $options, $caller );
}
/**
@@ -101,10 +111,11 @@ class Http {
*
* @param string $url
* @param array $options
+ * @param string $caller The method making this request, for profiling
* @return string
*/
- public static function post( $url, $options = array() ) {
- return Http::request( 'POST', $url, $options );
+ public static function post( $url, $options = array(), $caller = __METHOD__ ) {
+ return Http::request( 'POST', $url, $options, $caller );
}
/**
@@ -114,7 +125,7 @@ class Http {
* @return bool
*/
public static function isLocalURL( $url ) {
- global $wgCommandLineMode, $wgConf;
+ global $wgCommandLineMode, $wgLocalVirtualHosts, $wgConf;
if ( $wgCommandLineMode ) {
return false;
@@ -126,7 +137,7 @@ class Http {
$host = $matches[1];
// Split up dotwise
$domainParts = explode( '.', $host );
- // Check if this domain or any superdomain is listed in $wgConf as a local virtual host
+ // Check if this domain or any superdomain is listed as a local virtual host
$domainParts = array_reverse( $domainParts );
$domain = '';
@@ -139,7 +150,9 @@ class Http {
$domain = $domainPart . '.' . $domain;
}
- if ( $wgConf->isLocalVHost( $domain ) ) {
+ if ( in_array( $domain, $wgLocalVirtualHosts )
+ || $wgConf->isLocalVHost( $domain )
+ ) {
return true;
}
}
@@ -217,10 +230,22 @@ class MWHttpRequest {
public $status;
/**
+ * @var Profiler
+ */
+ protected $profiler;
+
+ /**
+ * @var string
+ */
+ protected $profileName;
+
+ /**
* @param string $url Url to use. If protocol-relative, will be expanded to an http:// URL
* @param array $options (optional) extra params to pass (see Http::request())
+ * @param string $caller The method making this request, for profiling
+ * @param Profiler $profiler An instance of the profiler for profiling, or null
*/
- protected function __construct( $url, $options = array() ) {
+ protected function __construct( $url, $options = array(), $caller = __METHOD__, $profiler = null ) {
global $wgHTTPTimeout, $wgHTTPConnectTimeout;
$this->url = wfExpandUrl( $url, PROTO_HTTP );
@@ -263,6 +288,10 @@ class MWHttpRequest {
if ( $this->noProxy ) {
$this->proxy = ''; // noProxy takes precedence
}
+
+ // Profile based on what's calling us
+ $this->profiler = $profiler;
+ $this->profileName = $caller;
}
/**
@@ -278,11 +307,12 @@ class MWHttpRequest {
* Generate a new request object
* @param string $url Url to use
* @param array $options (optional) extra params to pass (see Http::request())
+ * @param string $caller The method making this request, for profiling
* @throws MWException
* @return CurlHttpRequest|PhpHttpRequest
* @see MWHttpRequest::__construct
*/
- public static function factory( $url, $options = null ) {
+ public static function factory( $url, $options = null, $caller = __METHOD__ ) {
if ( !Http::$httpEngine ) {
Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
} elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
@@ -292,7 +322,7 @@ class MWHttpRequest {
switch ( Http::$httpEngine ) {
case 'curl':
- return new CurlHttpRequest( $url, $options );
+ return new CurlHttpRequest( $url, $options, $caller, Profiler::instance() );
case 'php':
if ( !wfIniGetBool( 'allow_url_fopen' ) ) {
throw new MWException( __METHOD__ . ': allow_url_fopen ' .
@@ -301,7 +331,7 @@ class MWHttpRequest {
'http://php.net/curl.'
);
}
- return new PhpHttpRequest( $url, $options );
+ return new PhpHttpRequest( $url, $options, $caller, Profiler::instance() );
default:
throw new MWException( __METHOD__ . ': The setting of Http::$httpEngine is not valid.' );
}
@@ -434,7 +464,6 @@ class MWHttpRequest {
* @return Status
*/
public function execute() {
- wfProfileIn( __METHOD__ );
$this->content = "";
@@ -452,7 +481,6 @@ class MWHttpRequest {
$this->setUserAgent( Http::userAgent() );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -461,7 +489,6 @@ class MWHttpRequest {
* found in an array in the member variable headerList.
*/
protected function parseHeader() {
- wfProfileIn( __METHOD__ );
$lastname = "";
@@ -480,7 +507,6 @@ class MWHttpRequest {
$this->parseCookies();
- wfProfileOut( __METHOD__ );
}
/**
@@ -614,7 +640,6 @@ class MWHttpRequest {
* Parse the cookies in the response headers and store them in the cookie jar.
*/
protected function parseCookies() {
- wfProfileIn( __METHOD__ );
if ( !$this->cookieJar ) {
$this->cookieJar = new CookieJar;
@@ -627,7 +652,6 @@ class MWHttpRequest {
}
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -715,12 +739,10 @@ class CurlHttpRequest extends MWHttpRequest {
}
public function execute() {
- wfProfileIn( __METHOD__ );
parent::execute();
if ( !$this->status->isOK() ) {
- wfProfileOut( __METHOD__ );
return $this->status;
}
@@ -766,7 +788,6 @@ class CurlHttpRequest extends MWHttpRequest {
$curlHandle = curl_init( $this->url );
if ( !curl_setopt_array( $curlHandle, $this->curlOptions ) ) {
- wfProfileOut( __METHOD__ );
throw new MWException( "Error setting curl options." );
}
@@ -781,6 +802,12 @@ class CurlHttpRequest extends MWHttpRequest {
wfRestoreWarnings();
}
+ if ( $this->profiler ) {
+ $profileSection = $this->profiler->scopedProfileIn(
+ __METHOD__ . '-' . $this->profileName
+ );
+ }
+
$curlRes = curl_exec( $curlHandle );
if ( curl_errno( $curlHandle ) == CURLE_OPERATION_TIMEOUTED ) {
$this->status->fatal( 'http-timed-out', $this->url );
@@ -792,11 +819,13 @@ class CurlHttpRequest extends MWHttpRequest {
curl_close( $curlHandle );
+ if ( $this->profiler ) {
+ $this->profiler->scopedProfileOut( $profileSection );
+ }
+
$this->parseHeader();
$this->setStatus();
- wfProfileOut( __METHOD__ );
-
return $this->status;
}
@@ -832,7 +861,6 @@ class PhpHttpRequest extends MWHttpRequest {
}
public function execute() {
- wfProfileIn( __METHOD__ );
parent::execute();
@@ -903,6 +931,11 @@ class PhpHttpRequest extends MWHttpRequest {
$result = array();
+ if ( $this->profiler ) {
+ $profileSection = $this->profiler->scopedProfileIn(
+ __METHOD__ . '-' . $this->profileName
+ );
+ }
do {
$reqCount++;
wfSuppressWarnings();
@@ -933,18 +966,19 @@ class PhpHttpRequest extends MWHttpRequest {
break;
}
} while ( true );
+ if ( $this->profiler ) {
+ $this->profiler->scopedProfileOut( $profileSection );
+ }
$this->setStatus();
if ( $fh === false ) {
$this->status->fatal( 'http-request-error' );
- wfProfileOut( __METHOD__ );
return $this->status;
}
if ( $result['timed_out'] ) {
$this->status->fatal( 'http-timed-out', $this->url );
- wfProfileOut( __METHOD__ );
return $this->status;
}
@@ -966,8 +1000,6 @@ class PhpHttpRequest extends MWHttpRequest {
}
fclose( $fh );
- wfProfileOut( __METHOD__ );
-
return $this->status;
}
}
diff --git a/includes/Import.php b/includes/Import.php
index 5319076e..d31be43b 100644
--- a/includes/Import.php
+++ b/includes/Import.php
@@ -32,18 +32,31 @@
*/
class WikiImporter {
private $reader = null;
+ private $foreignNamespaces = null;
private $mLogItemCallback, $mUploadCallback, $mRevisionCallback, $mPageCallback;
- private $mSiteInfoCallback, $mTargetNamespace, $mTargetRootPage, $mPageOutCallback;
+ private $mSiteInfoCallback, $mTargetNamespace, $mPageOutCallback;
private $mNoticeCallback, $mDebug;
private $mImportUploads, $mImageBasePath;
private $mNoUpdates = false;
+ /** @var Config */
+ private $config;
+ /** @var ImportTitleFactory */
+ private $importTitleFactory;
+ /** @var array */
+ private $countableCache = array();
/**
* Creates an ImportXMLReader drawing from the source provided
- * @param ImportStreamSource $source
+ * @param ImportSource $source
+ * @param Config $config
*/
- function __construct( ImportStreamSource $source ) {
+ function __construct( ImportSource $source, Config $config = null ) {
$this->reader = new XMLReader();
+ if ( !$config ) {
+ wfDeprecated( __METHOD__ . ' without a Config instance', '1.25' );
+ $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+ }
+ $this->config = $config;
if ( !in_array( 'uploadsource', stream_get_wrappers() ) ) {
stream_wrapper_register( 'uploadsource', 'UploadSourceAdapter' );
@@ -56,10 +69,13 @@ class WikiImporter {
}
// Default callbacks
+ $this->setPageCallback( array( $this, 'beforeImportPage' ) );
$this->setRevisionCallback( array( $this, "importRevision" ) );
$this->setUploadCallback( array( $this, 'importUpload' ) );
$this->setLogItemCallback( array( $this, 'importLogItem' ) );
$this->setPageOutCallback( array( $this, 'finishImportPage' ) );
+
+ $this->importTitleFactory = new NaiveImportTitleFactory();
}
/**
@@ -192,6 +208,15 @@ class WikiImporter {
}
/**
+ * Sets the factory object to use to convert ForeignTitle objects into local
+ * Title objects
+ * @param ImportTitleFactory $factory
+ */
+ public function setImportTitleFactory( $factory ) {
+ $this->importTitleFactory = $factory;
+ }
+
+ /**
* Set a target namespace to override the defaults
* @param null|int $namespace
* @return bool
@@ -200,9 +225,16 @@ class WikiImporter {
if ( is_null( $namespace ) ) {
// Don't override namespaces
$this->mTargetNamespace = null;
- } elseif ( $namespace >= 0 ) {
- // @todo FIXME: Check for validity
- $this->mTargetNamespace = intval( $namespace );
+ $this->setImportTitleFactory( new NaiveImportTitleFactory() );
+ return true;
+ } elseif (
+ $namespace >= 0 &&
+ MWNamespace::exists( intval( $namespace ) )
+ ) {
+ $namespace = intval( $namespace );
+ $this->mTargetNamespace = $namespace;
+ $this->setImportTitleFactory( new NamespaceImportTitleFactory( $namespace ) );
+ return true;
} else {
return false;
}
@@ -217,7 +249,7 @@ class WikiImporter {
$status = Status::newGood();
if ( is_null( $rootpage ) ) {
// No rootpage
- $this->mTargetRootPage = null;
+ $this->setImportTitleFactory( new NaiveImportTitleFactory() );
} elseif ( $rootpage !== '' ) {
$rootpage = rtrim( $rootpage, '/' ); //avoid double slashes
$title = Title::newFromText( $rootpage, !is_null( $this->mTargetNamespace )
@@ -236,9 +268,9 @@ class WikiImporter {
: $wgContLang->getNsText( $title->getNamespace() );
$status->fatal( 'import-rootpage-nosubpage', $displayNSText );
} else {
- // set namespace to 'all', so the namespace check in processTitle() can passed
+ // set namespace to 'all', so the namespace check in processTitle() can pass
$this->setTargetNamespace( null );
- $this->mTargetRootPage = $title->getPrefixedDBkey();
+ $this->setImportTitleFactory( new SubpageImportTitleFactory( $title ) );
}
}
}
@@ -260,6 +292,19 @@ class WikiImporter {
}
/**
+ * Default per-page callback. Sets up some things related to site statistics
+ * @param array $titleAndForeignTitle Two-element array, with Title object at
+ * index 0 and ForeignTitle object at index 1
+ * @return bool
+ */
+ public function beforeImportPage( $titleAndForeignTitle ) {
+ $title = $titleAndForeignTitle[0];
+ $page = WikiPage::factory( $title );
+ $this->countableCache['title_' . $title->getPrefixedText()] = $page->isCountable();
+ return true;
+ }
+
+ /**
* Default per-revision callback, performs the import.
* @param WikiRevision $revision
* @return bool
@@ -312,15 +357,41 @@ class WikiImporter {
/**
* Mostly for hook use
* @param Title $title
- * @param string $origTitle
+ * @param ForeignTitle $foreignTitle
* @param int $revCount
* @param int $sRevCount
* @param array $pageInfo
* @return bool
*/
- public function finishImportPage( $title, $origTitle, $revCount, $sRevCount, $pageInfo ) {
+ public function finishImportPage( $title, $foreignTitle, $revCount,
+ $sRevCount, $pageInfo ) {
+
+ // Update article count statistics (T42009)
+ // The normal counting logic in WikiPage->doEditUpdates() is designed for
+ // one-revision-at-a-time editing, not bulk imports. In this situation it
+ // suffers from issues of slave lag. We let WikiPage handle the total page
+ // and revision count, and we implement our own custom logic for the
+ // article (content page) count.
+ $page = WikiPage::factory( $title );
+ $page->loadPageData( 'fromdbmaster' );
+ $content = $page->getContent();
+ if ( $content === null ) {
+ wfDebug( __METHOD__ . ': Skipping article count adjustment for ' . $title .
+ ' because WikiPage::getContent() returned null' );
+ } else {
+ $editInfo = $page->prepareContentForEdit( $content );
+ $countKey = 'title_' . $title->getPrefixedText();
+ $countable = $page->isCountable( $editInfo );
+ if ( array_key_exists( $countKey, $this->countableCache ) &&
+ $countable != $this->countableCache[ $countKey ] ) {
+ DeferredUpdates::addUpdate( SiteStatsUpdate::factory( array(
+ 'articles' => ( (int)$countable - (int)$this->countableCache[ $countKey ] )
+ ) ) );
+ }
+ }
+
$args = func_get_args();
- return wfRunHooks( 'AfterImportPage', $args );
+ return Hooks::run( 'AfterImportPage', $args );
}
/**
@@ -341,6 +412,20 @@ class WikiImporter {
}
/**
+ * Notify the callback function of site info
+ * @param array $siteInfo
+ * @return bool|mixed
+ */
+ private function siteInfoCallback( $siteInfo ) {
+ if ( isset( $this->mSiteInfoCallback ) ) {
+ return call_user_func_array( $this->mSiteInfoCallback,
+ array( $siteInfo, $this ) );
+ } else {
+ return false;
+ }
+ }
+
+ /**
* Notify the callback function when a new "<page>" is reached.
* @param Title $title
*/
@@ -353,12 +438,13 @@ class WikiImporter {
/**
* Notify the callback function when a "</page>" is closed.
* @param Title $title
- * @param Title $origTitle
+ * @param ForeignTitle $foreignTitle
* @param int $revCount
* @param int $sucCount Number of revisions for which callback returned true
* @param array $pageInfo Associative array of page information
*/
- private function pageOutCallback( $title, $origTitle, $revCount, $sucCount, $pageInfo ) {
+ private function pageOutCallback( $title, $foreignTitle, $revCount,
+ $sucCount, $pageInfo ) {
if ( isset( $this->mPageOutCallback ) ) {
$args = func_get_args();
call_user_func_array( $this->mPageOutCallback, $args );
@@ -396,7 +482,8 @@ class WikiImporter {
/**
* Retrieves the contents of the named attribute of the current element.
* @param string $attr The name of the attribute
- * @return string The value of the attribute or an empty string if it is not set in the current element.
+ * @return string The value of the attribute or an empty string if it is not set in the current
+ * element.
*/
public function nodeAttribute( $attr ) {
return $this->reader->getAttribute( $attr );
@@ -416,11 +503,11 @@ class WikiImporter {
$buffer = "";
while ( $this->reader->read() ) {
switch ( $this->reader->nodeType ) {
- case XmlReader::TEXT:
- case XmlReader::SIGNIFICANT_WHITESPACE:
+ case XMLReader::TEXT:
+ case XMLReader::SIGNIFICANT_WHITESPACE:
$buffer .= $this->reader->value;
break;
- case XmlReader::END_ELEMENT:
+ case XMLReader::END_ELEMENT:
return $buffer;
}
}
@@ -452,51 +539,76 @@ class WikiImporter {
$keepReading = $this->reader->read();
$skip = false;
- while ( $keepReading ) {
- $tag = $this->reader->name;
- $type = $this->reader->nodeType;
-
- if ( !wfRunHooks( 'ImportHandleToplevelXMLTag', array( $this ) ) ) {
- // Do nothing
- } elseif ( $tag == 'mediawiki' && $type == XmlReader::END_ELEMENT ) {
- break;
- } elseif ( $tag == 'siteinfo' ) {
- $this->handleSiteInfo();
- } elseif ( $tag == 'page' ) {
- $this->handlePage();
- } elseif ( $tag == 'logitem' ) {
- $this->handleLogItem();
- } elseif ( $tag != '#text' ) {
- $this->warn( "Unhandled top-level XML tag $tag" );
-
- $skip = true;
- }
+ $rethrow = null;
+ try {
+ while ( $keepReading ) {
+ $tag = $this->reader->name;
+ $type = $this->reader->nodeType;
+
+ if ( !Hooks::run( 'ImportHandleToplevelXMLTag', array( $this ) ) ) {
+ // Do nothing
+ } elseif ( $tag == 'mediawiki' && $type == XMLReader::END_ELEMENT ) {
+ break;
+ } elseif ( $tag == 'siteinfo' ) {
+ $this->handleSiteInfo();
+ } elseif ( $tag == 'page' ) {
+ $this->handlePage();
+ } elseif ( $tag == 'logitem' ) {
+ $this->handleLogItem();
+ } elseif ( $tag != '#text' ) {
+ $this->warn( "Unhandled top-level XML tag $tag" );
+
+ $skip = true;
+ }
- if ( $skip ) {
- $keepReading = $this->reader->next();
- $skip = false;
- $this->debug( "Skip" );
- } else {
- $keepReading = $this->reader->read();
+ if ( $skip ) {
+ $keepReading = $this->reader->next();
+ $skip = false;
+ $this->debug( "Skip" );
+ } else {
+ $keepReading = $this->reader->read();
+ }
}
+ } catch ( Exception $ex ) {
+ $rethrow = $ex;
}
+ // finally
libxml_disable_entity_loader( $oldDisable );
+ $this->reader->close();
+
+ if ( $rethrow ) {
+ throw $rethrow;
+ }
+
return true;
}
- /**
- * @return bool
- * @throws MWException
- */
private function handleSiteInfo() {
- // Site info is useful, but not actually used for dump imports.
- // Includes a quick short-circuit to save performance.
- if ( !$this->mSiteInfoCallback ) {
- $this->reader->next();
- return true;
+ $this->debug( "Enter site info handler." );
+ $siteInfo = array();
+
+ // Fields that can just be stuffed in the siteInfo object
+ $normalFields = array( 'sitename', 'base', 'generator', 'case' );
+
+ while ( $this->reader->read() ) {
+ if ( $this->reader->nodeType == XmlReader::END_ELEMENT &&
+ $this->reader->name == 'siteinfo' ) {
+ break;
+ }
+
+ $tag = $this->reader->name;
+
+ if ( $tag == 'namespace' ) {
+ $this->foreignNamespaces[ $this->nodeAttribute( 'key' ) ] =
+ $this->nodeContents();
+ } elseif ( in_array( $tag, $normalFields ) ) {
+ $siteInfo[$tag] = $this->nodeContents();
+ }
}
- throw new MWException( "SiteInfo tag is not yet handled, do not set mSiteInfoCallback" );
+
+ $siteInfo['_namespaces'] = $this->foreignNamespaces;
+ $this->siteInfoCallback( $siteInfo );
}
private function handleLogItem() {
@@ -508,14 +620,14 @@ class WikiImporter {
'logtitle', 'params' );
while ( $this->reader->read() ) {
- if ( $this->reader->nodeType == XmlReader::END_ELEMENT &&
+ if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
$this->reader->name == 'logitem' ) {
break;
}
$tag = $this->reader->name;
- if ( !wfRunHooks( 'ImportHandleLogItemXMLTag', array(
+ if ( !Hooks::run( 'ImportHandleLogItemXMLTag', array(
$this, $logInfo
) ) ) {
// Do nothing
@@ -536,7 +648,7 @@ class WikiImporter {
* @return bool|mixed
*/
private function processLogItem( $logInfo ) {
- $revision = new WikiRevision;
+ $revision = new WikiRevision( $this->config );
$revision->setID( $logInfo['id'] );
$revision->setType( $logInfo['type'] );
@@ -566,23 +678,25 @@ class WikiImporter {
$pageInfo = array( 'revisionCount' => 0, 'successfulRevisionCount' => 0 );
// Fields that can just be stuffed in the pageInfo object
- $normalFields = array( 'title', 'id', 'redirect', 'restrictions' );
+ $normalFields = array( 'title', 'ns', 'id', 'redirect', 'restrictions' );
$skip = false;
$badTitle = false;
while ( $skip ? $this->reader->next() : $this->reader->read() ) {
- if ( $this->reader->nodeType == XmlReader::END_ELEMENT &&
+ if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
$this->reader->name == 'page' ) {
break;
}
+ $skip = false;
+
$tag = $this->reader->name;
if ( $badTitle ) {
// The title is invalid, bail out of this page
$skip = true;
- } elseif ( !wfRunHooks( 'ImportHandlePageXMLTag', array( $this,
+ } elseif ( !Hooks::run( 'ImportHandlePageXMLTag', array( $this,
&$pageInfo ) ) ) {
// Do nothing
} elseif ( in_array( $tag, $normalFields ) ) {
@@ -597,29 +711,35 @@ class WikiImporter {
$pageInfo[$tag] = $this->nodeAttribute( 'title' );
} else {
$pageInfo[$tag] = $this->nodeContents();
- if ( $tag == 'title' ) {
- $title = $this->processTitle( $pageInfo['title'] );
+ }
+ } elseif ( $tag == 'revision' || $tag == 'upload' ) {
+ if ( !isset( $title ) ) {
+ $title = $this->processTitle( $pageInfo['title'],
+ isset( $pageInfo['ns'] ) ? $pageInfo['ns'] : null );
+
+ if ( !$title ) {
+ $badTitle = true;
+ $skip = true;
+ }
- if ( !$title ) {
- $badTitle = true;
- $skip = true;
- }
+ $this->pageCallback( $title );
+ list( $pageInfo['_title'], $foreignTitle ) = $title;
+ }
- $this->pageCallback( $title );
- list( $pageInfo['_title'], $origTitle ) = $title;
+ if ( $title ) {
+ if ( $tag == 'revision' ) {
+ $this->handleRevision( $pageInfo );
+ } else {
+ $this->handleUpload( $pageInfo );
}
}
- } elseif ( $tag == 'revision' ) {
- $this->handleRevision( $pageInfo );
- } elseif ( $tag == 'upload' ) {
- $this->handleUpload( $pageInfo );
} elseif ( $tag != '#text' ) {
$this->warn( "Unhandled page XML tag $tag" );
$skip = true;
}
}
- $this->pageOutCallback( $pageInfo['_title'], $origTitle,
+ $this->pageOutCallback( $pageInfo['_title'], $foreignTitle,
$pageInfo['revisionCount'],
$pageInfo['successfulRevisionCount'],
$pageInfo );
@@ -637,14 +757,14 @@ class WikiImporter {
$skip = false;
while ( $skip ? $this->reader->next() : $this->reader->read() ) {
- if ( $this->reader->nodeType == XmlReader::END_ELEMENT &&
+ if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
$this->reader->name == 'revision' ) {
break;
}
$tag = $this->reader->name;
- if ( !wfRunHooks( 'ImportHandleRevisionXMLTag', array(
+ if ( !Hooks::run( 'ImportHandleRevisionXMLTag', array(
$this, $pageInfo, $revisionInfo
) ) ) {
// Do nothing
@@ -670,7 +790,7 @@ class WikiImporter {
* @return bool|mixed
*/
private function processRevision( $pageInfo, $revisionInfo ) {
- $revision = new WikiRevision;
+ $revision = new WikiRevision( $this->config );
if ( isset( $revisionInfo['id'] ) ) {
$revision->setID( $revisionInfo['id'] );
@@ -729,14 +849,14 @@ class WikiImporter {
$skip = false;
while ( $skip ? $this->reader->next() : $this->reader->read() ) {
- if ( $this->reader->nodeType == XmlReader::END_ELEMENT &&
+ if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
$this->reader->name == 'upload' ) {
break;
}
$tag = $this->reader->name;
- if ( !wfRunHooks( 'ImportHandleUploadXMLTag', array(
+ if ( !Hooks::run( 'ImportHandleUploadXMLTag', array(
$this, $pageInfo
) ) ) {
// Do nothing
@@ -786,7 +906,7 @@ class WikiImporter {
* @return mixed
*/
private function processUpload( $pageInfo, $uploadInfo ) {
- $revision = new WikiRevision;
+ $revision = new WikiRevision( $this->config );
$text = isset( $uploadInfo['text'] ) ? $uploadInfo['text'] : '';
$revision->setTitle( $pageInfo['_title'] );
@@ -827,7 +947,7 @@ class WikiImporter {
$info = array();
while ( $this->reader->read() ) {
- if ( $this->reader->nodeType == XmlReader::END_ELEMENT &&
+ if ( $this->reader->nodeType == XMLReader::END_ELEMENT &&
$this->reader->name == 'contributor' ) {
break;
}
@@ -844,29 +964,27 @@ class WikiImporter {
/**
* @param string $text
+ * @param string|null $ns
* @return array|bool
*/
- private function processTitle( $text ) {
- global $wgCommandLineMode;
-
- $workTitle = $text;
- $origTitle = Title::newFromText( $workTitle );
-
- if ( !is_null( $this->mTargetNamespace ) && !is_null( $origTitle ) ) {
- # makeTitleSafe, because $origTitle can have a interwiki (different setting of interwiki map)
- # and than dbKey can begin with a lowercase char
- $title = Title::makeTitleSafe( $this->mTargetNamespace,
- $origTitle->getDBkey() );
+ private function processTitle( $text, $ns = null ) {
+ if ( is_null( $this->foreignNamespaces ) ) {
+ $foreignTitleFactory = new NaiveForeignTitleFactory();
} else {
- if ( !is_null( $this->mTargetRootPage ) ) {
- $workTitle = $this->mTargetRootPage . '/' . $workTitle;
- }
- $title = Title::newFromText( $workTitle );
+ $foreignTitleFactory = new NamespaceAwareForeignTitleFactory(
+ $this->foreignNamespaces );
}
+ $foreignTitle = $foreignTitleFactory->createForeignTitle( $text,
+ intval( $ns ) );
+
+ $title = $this->importTitleFactory->createTitleFromForeignTitle(
+ $foreignTitle );
+
+ $commandLineMode = $this->config->get( 'CommandLineMode' );
if ( is_null( $title ) ) {
# Invalid page title? Ignore the page
- $this->notice( 'import-error-invalid', $workTitle );
+ $this->notice( 'import-error-invalid', $foreignTitle->getFullText() );
return false;
} elseif ( $title->isExternal() ) {
$this->notice( 'import-error-interwiki', $title->getPrefixedText() );
@@ -874,17 +992,17 @@ class WikiImporter {
} elseif ( !$title->canExist() ) {
$this->notice( 'import-error-special', $title->getPrefixedText() );
return false;
- } elseif ( !$title->userCan( 'edit' ) && !$wgCommandLineMode ) {
+ } elseif ( !$title->userCan( 'edit' ) && !$commandLineMode ) {
# Do not import if the importing wiki user cannot edit this page
$this->notice( 'import-error-edit', $title->getPrefixedText() );
return false;
- } elseif ( !$title->exists() && !$title->userCan( 'create' ) && !$wgCommandLineMode ) {
+ } elseif ( !$title->exists() && !$title->userCan( 'create' ) && !$commandLineMode ) {
# Do not import if the importing wiki user cannot create this page
$this->notice( 'import-error-create', $title->getPrefixedText() );
return false;
}
- return array( $title, $origTitle );
+ return array( $title, $foreignTitle );
}
}
@@ -903,10 +1021,10 @@ class UploadSourceAdapter {
private $mPosition;
/**
- * @param ImportStreamSource $source
+ * @param ImportSource $source
* @return string
*/
- static function registerSource( ImportStreamSource $source ) {
+ static function registerSource( ImportSource $source ) {
$id = wfRandomString();
self::$sourceRegistrations[$id] = $source;
@@ -1093,6 +1211,13 @@ class WikiRevision {
/** @var bool */
private $mNoUpdates = false;
+ /** @var Config $config */
+ private $config;
+
+ public function __construct( Config $config ) {
+ $this->config = $config;
+ }
+
/**
* @param Title $title
* @throws MWException
@@ -1434,8 +1559,7 @@ class WikiRevision {
}
// avoid memory leak...?
- $linkCache = LinkCache::singleton();
- $linkCache->clear();
+ Title::clearCaches();
$page = WikiPage::factory( $this->title );
$page->loadPageData( 'fromdbmaster' );
@@ -1461,7 +1585,6 @@ class WikiRevision {
$this->title->getPrefixedText() . "]], timestamp " . $this->timestamp . "\n" );
return false;
}
- $oldcountable = $page->isCountable();
}
# @todo FIXME: Use original rev_id optionally (better for backups)
@@ -1484,10 +1607,11 @@ class WikiRevision {
if ( $changed !== false && !$this->mNoUpdates ) {
wfDebug( __METHOD__ . ": running updates\n" );
+ // countable/oldcountable stuff is handled in WikiImporter::finishImportPage
$page->doEditUpdates(
$revision,
$userObj,
- array( 'created' => $created, 'oldcountable' => $oldcountable )
+ array( 'created' => $created, 'oldcountable' => 'no-change' )
);
}
@@ -1550,6 +1674,7 @@ class WikiRevision {
RepoGroup::singleton()->getLocalRepo(), $archiveName );
} else {
$file = wfLocalFile( $this->getTitle() );
+ $file->load( File::READ_LATEST );
wfDebug( __METHOD__ . 'Importing new file as ' . $file->getName() . "\n" );
if ( $file->exists() && $file->getTimestamp() > $this->getTimestamp() ) {
$archiveName = $file->getTimestamp() . '!' . $file->getName();
@@ -1599,7 +1724,7 @@ class WikiRevision {
wfDebug( __METHOD__ . ": Successful\n" );
return true;
} else {
- wfDebug( __METHOD__ . ': failed: ' . $status->getXml() . "\n" );
+ wfDebug( __METHOD__ . ': failed: ' . $status->getHTML() . "\n" );
return false;
}
}
@@ -1608,8 +1733,7 @@ class WikiRevision {
* @return bool|string
*/
function downloadSource() {
- global $wgEnableUploads;
- if ( !$wgEnableUploads ) {
+ if ( !$this->config->get( 'EnableUploads' ) ) {
return false;
}
@@ -1622,7 +1746,7 @@ class WikiRevision {
// @todo FIXME!
$src = $this->getSrc();
- $data = Http::get( $src );
+ $data = Http::get( $src, array(), __METHOD__ );
if ( !$data ) {
wfDebug( "IMPORT: couldn't fetch source $src\n" );
fclose( $f );
@@ -1639,10 +1763,37 @@ class WikiRevision {
}
/**
- * @todo document (e.g. one-sentence class description).
+ * Source interface for XML import.
+ */
+interface ImportSource {
+
+ /**
+ * Indicates whether the end of the input has been reached.
+ * Will return true after a finite number of calls to readChunk.
+ *
+ * @return bool true if there is no more input, false otherwise.
+ */
+ function atEnd();
+
+ /**
+ * Return a chunk of the input, as a (possibly empty) string.
+ * When the end of input is reached, readChunk() returns false.
+ * If atEnd() returns false, readChunk() will return a string.
+ * If atEnd() returns true, readChunk() will return false.
+ *
+ * @return bool|string
+ */
+ function readChunk();
+}
+
+/**
+ * Used for importing XML dumps where the content of the dump is in a string.
+ * This class is ineffecient, and should only be used for small dumps.
+ * For larger dumps, ImportStreamSource should be used instead.
+ *
* @ingroup SpecialPage
*/
-class ImportStringSource {
+class ImportStringSource implements ImportSource {
function __construct( $string ) {
$this->mString = $string;
$this->mRead = false;
@@ -1668,10 +1819,10 @@ class ImportStringSource {
}
/**
- * @todo document (e.g. one-sentence class description).
+ * Imports a XML dump from a file (either from file upload, files on disk, or HTTP)
* @ingroup SpecialPage
*/
-class ImportStreamSource {
+class ImportStreamSource implements ImportSource {
function __construct( $handle ) {
$this->mHandle = $handle;
}
@@ -1752,7 +1903,7 @@ class ImportStreamSource {
# quicker and sorts out user-agent problems which might
# otherwise prevent importing from large sites, such
# as the Wikimedia cluster, etc.
- $data = Http::request( $method, $url, array( 'followRedirects' => true ) );
+ $data = Http::request( $method, $url, array( 'followRedirects' => true ), __METHOD__ );
if ( $data !== false ) {
$file = tmpfile();
fwrite( $file, $data );
diff --git a/includes/LinkFilter.php b/includes/LinkFilter.php
index 340ae8f3..99aaaa09 100644
--- a/includes/LinkFilter.php
+++ b/includes/LinkFilter.php
@@ -92,7 +92,7 @@ class LinkFilter {
* @return array Array to be passed to DatabaseBase::buildLike() or false on error
*/
public static function makeLikeArray( $filterEntry, $protocol = 'http://' ) {
- $db = wfGetDB( DB_MASTER );
+ $db = wfGetDB( DB_SLAVE );
$target = $protocol . $filterEntry;
$bits = wfParseUrl( $target );
diff --git a/includes/Linker.php b/includes/Linker.php
index be850d02..b58dabab 100644
--- a/includes/Linker.php
+++ b/includes/Linker.php
@@ -37,23 +37,10 @@ class Linker {
const TOOL_LINKS_EMAIL = 2;
/**
- * Get the appropriate HTML attributes to add to the "a" element of an
- * external link, as created by [wikisyntax].
- *
- * @param string $class The contents of the class attribute; if an empty
- * string is passed, which is the default value, defaults to 'external'.
- * @return string
- * @deprecated since 1.18 Just pass the external class directly to something
- * using Html::expandAttributes.
- */
- static function getExternalLinkAttributes( $class = 'external' ) {
- wfDeprecated( __METHOD__, '1.18' );
- return self::getLinkAttributesInternal( '', $class );
- }
-
- /**
* Get the appropriate HTML attributes to add to the "a" element of an interwiki link.
*
+ * @deprecated since 1.25
+ *
* @param string $title The title text for the link, URL-encoded (???) but
* not HTML-escaped
* @param string $unused Unused
@@ -64,6 +51,8 @@ class Linker {
static function getInterwikiLinkAttributes( $title, $unused = null, $class = 'external' ) {
global $wgContLang;
+ wfDeprecated( __METHOD__, '1.25' );
+
# @todo FIXME: We have a whole bunch of handling here that doesn't happen in
# getExternalLinkAttributes, why?
$title = urldecode( $title );
@@ -76,6 +65,8 @@ class Linker {
/**
* Get the appropriate HTML attributes to add to the "a" element of an internal link.
*
+ * @deprecated since 1.25
+ *
* @param string $title The title text for the link, URL-encoded (???) but
* not HTML-escaped
* @param string $unused Unused
@@ -83,6 +74,8 @@ class Linker {
* @return string
*/
static function getInternalLinkAttributes( $title, $unused = null, $class = '' ) {
+ wfDeprecated( __METHOD__, '1.25' );
+
$title = urldecode( $title );
$title = str_replace( '_', ' ', $title );
return self::getLinkAttributesInternal( $title, $class );
@@ -92,6 +85,8 @@ class Linker {
* Get the appropriate HTML attributes to add to the "a" element of an internal
* link, given the Title object for the page we want to link to.
*
+ * @deprecated since 1.25
+ *
* @param Title $nt
* @param string $unused Unused
* @param string $class The contents of the class attribute, default none
@@ -100,6 +95,8 @@ class Linker {
* @return string
*/
static function getInternalLinkAttributesObj( $nt, $unused = null, $class = '', $title = false ) {
+ wfDeprecated( __METHOD__, '1.25' );
+
if ( $title === false ) {
$title = $nt->getPrefixedText();
}
@@ -109,12 +106,16 @@ class Linker {
/**
* Common code for getLinkAttributesX functions
*
+ * @deprecated since 1.25
+ *
* @param string $title
* @param string $class
*
* @return string
*/
private static function getLinkAttributesInternal( $title, $class ) {
+ wfDeprecated( __METHOD__, '1.25' );
+
$title = htmlspecialchars( $title );
$class = htmlspecialchars( $class );
$r = '';
@@ -193,10 +194,9 @@ class Linker {
$target, $html = null, $customAttribs = array(), $query = array(), $options = array()
) {
if ( !$target instanceof Title ) {
- wfWarn( __METHOD__ . ': Requires $target to be a Title object.' );
+ wfWarn( __METHOD__ . ': Requires $target to be a Title object.', 2 );
return "<!-- ERROR -->$html";
}
- wfProfileIn( __METHOD__ );
if ( is_string( $query ) ) {
// some functions withing core using this still hand over query strings
@@ -208,9 +208,9 @@ class Linker {
$dummy = new DummyLinker; // dummy linker instance for bc on the hooks
$ret = null;
- if ( !wfRunHooks( 'LinkBegin', array( $dummy, $target, &$html,
- &$customAttribs, &$query, &$options, &$ret ) ) ) {
- wfProfileOut( __METHOD__ );
+ if ( !Hooks::run( 'LinkBegin',
+ array( $dummy, $target, &$html, &$customAttribs, &$query, &$options, &$ret ) )
+ ) {
return $ret;
}
@@ -218,15 +218,13 @@ class Linker {
$target = self::normaliseSpecialPage( $target );
# If we don't know whether the page exists, let's find out.
- wfProfileIn( __METHOD__ . '-checkPageExistence' );
- if ( !in_array( 'known', $options ) and !in_array( 'broken', $options ) ) {
+ if ( !in_array( 'known', $options ) && !in_array( 'broken', $options ) ) {
if ( $target->isKnown() ) {
$options[] = 'known';
} else {
$options[] = 'broken';
}
}
- wfProfileOut( __METHOD__ . '-checkPageExistence' );
$oldquery = array();
if ( in_array( "forcearticlepath", $options ) && $query ) {
@@ -249,11 +247,10 @@ class Linker {
}
$ret = null;
- if ( wfRunHooks( 'LinkEnd', array( $dummy, $target, $options, &$html, &$attribs, &$ret ) ) ) {
+ if ( Hooks::run( 'LinkEnd', array( $dummy, $target, $options, &$html, &$attribs, &$ret ) ) ) {
$ret = Html::rawElement( 'a', $attribs, $html );
}
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -278,7 +275,6 @@ class Linker {
* @return string
*/
private static function linkUrl( $target, $query, $options ) {
- wfProfileIn( __METHOD__ );
# We don't want to include fragments for broken links, because they
# generally make no sense.
if ( in_array( 'broken', $options ) && $target->hasFragment() ) {
@@ -304,7 +300,6 @@ class Linker {
}
$ret = $target->getLinkURL( $query, false, $proto );
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -318,12 +313,10 @@ class Linker {
* @return array
*/
private static function linkAttribs( $target, $attribs, $options ) {
- wfProfileIn( __METHOD__ );
global $wgUser;
$defaults = array();
if ( !in_array( 'noclasses', $options ) ) {
- wfProfileIn( __METHOD__ . '-getClasses' );
# Now build the classes.
$classes = array();
@@ -344,7 +337,6 @@ class Linker {
if ( $classes != array() ) {
$defaults['class'] = implode( ' ', $classes );
}
- wfProfileOut( __METHOD__ . '-getClasses' );
}
# Get a default title attribute.
@@ -364,11 +356,10 @@ class Linker {
foreach ( $merged as $key => $val ) {
# A false value suppresses the attribute, and we don't want the
# href attribute to be overridden.
- if ( $key != 'href' and $val !== false ) {
+ if ( $key != 'href' && $val !== false ) {
$ret[$key] = $val;
}
}
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -409,7 +400,7 @@ class Linker {
*/
public static function makeSelfLinkObj( $nt, $html = '', $query = '', $trail = '', $prefix = '' ) {
$ret = "<strong class=\"selflink\">{$prefix}{$html}</strong>{$trail}";
- if ( !wfRunHooks( 'SelfLinkBegin', array( $nt, &$html, &$trail, &$prefix, &$ret ) ) ) {
+ if ( !Hooks::run( 'SelfLinkBegin', array( $nt, &$html, &$trail, &$prefix, &$ret ) ) ) {
return $ret;
}
@@ -495,7 +486,7 @@ class Linker {
$alt = self::fnamePart( $url );
}
$img = '';
- $success = wfRunHooks( 'LinkerMakeExternalImage', array( &$url, &$alt, &$img ) );
+ $success = Hooks::run( 'LinkerMakeExternalImage', array( &$url, &$alt, &$img ) );
if ( !$success ) {
wfDebug( "Hook LinkerMakeExternalImage changed the output of external image "
. "with url {$url} and alt text {$alt} to {$img}\n", true );
@@ -549,7 +540,7 @@ class Linker {
) {
$res = null;
$dummy = new DummyLinker;
- if ( !wfRunHooks( 'ImageBeforeProduceHTML', array( &$dummy, &$title,
+ if ( !Hooks::run( 'ImageBeforeProduceHTML', array( &$dummy, &$title,
&$file, &$frameParams, &$handlerParams, &$time, &$res ) ) ) {
return $res;
}
@@ -931,7 +922,6 @@ class Linker {
}
global $wgEnableUploads, $wgUploadMissingFileUrl, $wgUploadNavigationUrl;
- wfProfileIn( __METHOD__ );
if ( $label == '' ) {
$label = $title->getPrefixedText();
}
@@ -944,19 +934,16 @@ class Linker {
$redir = RepoGroup::singleton()->getLocalRepo()->checkRedirect( $title );
if ( $redir ) {
- wfProfileOut( __METHOD__ );
return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
}
$href = self::getUploadUrl( $title, $query );
- wfProfileOut( __METHOD__ );
return '<a href="' . htmlspecialchars( $href ) . '" class="new" title="' .
htmlspecialchars( $title->getPrefixedText(), ENT_QUOTES ) . '">' .
$encLabel . '</a>';
}
- wfProfileOut( __METHOD__ );
return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
}
@@ -1029,7 +1016,7 @@ class Linker {
'title' => $alt
);
- if ( !wfRunHooks( 'LinkerMakeMediaLinkFile',
+ if ( !Hooks::run( 'LinkerMakeMediaLinkFile',
array( $title, $file, &$html, &$attribs, &$ret ) ) ) {
wfDebug( "Hook LinkerMakeMediaLinkFile changed the output of link "
. "with url {$url} and text {$html} to {$ret}\n", true );
@@ -1088,7 +1075,7 @@ class Linker {
}
$attribs['rel'] = Parser::getExternalLinkRel( $url, $title );
$link = '';
- $success = wfRunHooks( 'LinkerMakeExternalLink',
+ $success = Hooks::run( 'LinkerMakeExternalLink',
array( &$url, &$text, &$link, &$attribs, $linktype ) );
if ( !$success ) {
wfDebug( "Hook LinkerMakeExternalLink changed the output of link "
@@ -1174,10 +1161,10 @@ class Linker {
$items[] = self::emailLink( $userId, $userText );
}
- wfRunHooks( 'UserToolLinksEdit', array( $userId, $userText, &$items ) );
+ Hooks::run( 'UserToolLinksEdit', array( $userId, $userText, &$items ) );
if ( $items ) {
- return wfMessage( 'word-separator' )->plain()
+ return wfMessage( 'word-separator' )->escaped()
. '<span class="mw-usertoollinks">'
. wfMessage( 'parentheses' )->rawParams( $wgLang->pipeList( $items ) )->escaped()
. '</span>';
@@ -1264,7 +1251,6 @@ class Linker {
$userId = $rev->getUser( Revision::FOR_THIS_USER );
$userText = $rev->getUserText( Revision::FOR_THIS_USER );
$link = self::userLink( $userId, $userText )
- . wfMessage( 'word-separator' )->plain()
. self::userToolLinks( $userId, $userText );
} else {
$link = wfMessage( 'rev-deleted-user' )->escaped();
@@ -1293,7 +1279,6 @@ class Linker {
* @return mixed|string
*/
public static function formatComment( $comment, $title = null, $local = false ) {
- wfProfileIn( __METHOD__ );
# Sanitize text a bit:
$comment = str_replace( "\n", " ", $comment );
@@ -1304,12 +1289,12 @@ class Linker {
$comment = self::formatAutocomments( $comment, $title, $local );
$comment = self::formatLinksInComment( $comment, $title, $local );
- wfProfileOut( __METHOD__ );
return $comment;
}
/**
* Converts autogenerated comments in edit summaries into section links.
+ *
* The pattern for autogen comments is / * foo * /, which makes for
* some nasty regex.
* We look for all comments, match any text before and after the comment,
@@ -1322,16 +1307,30 @@ class Linker {
* @return string Formatted comment
*/
private static function formatAutocomments( $comment, $title = null, $local = false ) {
- return preg_replace_callback(
- '!(.*)/\*\s*(.*?)\s*\*/(.*)!',
- function ( $match ) use ( $title, $local ) {
+ // @todo $append here is something of a hack to preserve the status
+ // quo. Someone who knows more about bidi and such should decide
+ // (1) what sane rendering even *is* for an LTR edit summary on an RTL
+ // wiki, both when autocomments exist and when they don't, and
+ // (2) what markup will make that actually happen.
+ $append = '';
+ $comment = preg_replace_callback(
+ // To detect the presence of content before or after the
+ // auto-comment, we use capturing groups inside optional zero-width
+ // assertions. But older versions of PCRE can't directly make
+ // zero-width assertions optional, so wrap them in a non-capturing
+ // group.
+ '!(?:(?<=(.)))?/\*\s*(.*?)\s*\*/(?:(?=(.)))?!',
+ function ( $match ) use ( $title, $local, &$append ) {
global $wgLang;
- $pre = $match[1];
+ // Ensure all match positions are defined
+ $match += array( '', '', '', '' );
+
+ $pre = $match[1] !== '';
$auto = $match[2];
- $post = $match[3];
+ $post = $match[3] !== '';
$comment = null;
- wfRunHooks( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) );
+ Hooks::run( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) );
if ( $comment === null ) {
$link = '';
if ( $title ) {
@@ -1359,7 +1358,7 @@ class Linker {
}
if ( $pre ) {
# written summary $presep autocomment (summary /* section */)
- $pre .= wfMessage( 'autocomment-prefix' )->inContentLanguage()->escaped();
+ $pre = wfMessage( 'autocomment-prefix' )->inContentLanguage()->escaped();
}
if ( $post ) {
# autocomment $postsep written summary (/* section */ summary)
@@ -1367,12 +1366,14 @@ class Linker {
}
$auto = '<span class="autocomment">' . $auto . '</span>';
$comment = $pre . $link . $wgLang->getDirMark()
- . '<span dir="auto">' . $auto . $post . '</span>';
+ . '<span dir="auto">' . $auto;
+ $append .= '</span>';
}
return $comment;
},
$comment
);
+ return $comment . $append;
}
/**
@@ -1383,9 +1384,13 @@ class Linker {
* @param string $comment Text to format links in
* @param Title|null $title An optional title object used to links to sections
* @param bool $local Whether section links should refer to local page
+ * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap
+ *
* @return string
*/
- public static function formatLinksInComment( $comment, $title = null, $local = false ) {
+ public static function formatLinksInComment(
+ $comment, $title = null, $local = false, $wikiId = null
+ ) {
return preg_replace_callback(
'/
\[\[
@@ -1399,7 +1404,7 @@ class Linker {
\]\]
([^[]*) # 3. link trail (the text up until the next link)
/x',
- function ( $match ) use ( $title, $local ) {
+ function ( $match ) use ( $title, $local, $wikiId ) {
global $wgContLang;
$medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|';
@@ -1455,11 +1460,22 @@ class Linker {
$newTarget = clone ( $title );
$newTarget->setFragment( '#' . $target->getFragment() );
$target = $newTarget;
+
}
- $thelink = Linker::link(
- $target,
- $linkText . $inside
- ) . $trail;
+
+ if ( $wikiId !== null ) {
+ $thelink = Linker::makeExternalLink(
+ WikiMap::getForeignURL( $wikiId, $target->getFullText() ),
+ $linkText . $inside,
+ /* escape = */ false // Already escaped
+ ) . $trail;
+ } else {
+ $thelink = Linker::link(
+ $target,
+ $linkText . $inside
+ ) . $trail;
+ }
+
}
}
if ( $thelink ) {
@@ -1489,11 +1505,13 @@ class Linker {
# Foobar -- normal
# :Foobar -- override special treatment of prefix (images, language links)
# /Foobar -- convert to CurrentPage/Foobar
- # /Foobar/ -- convert to CurrentPage/Foobar, strip the initial / from text
+ # /Foobar/ -- convert to CurrentPage/Foobar, strip the initial and final / from text
# ../ -- convert to CurrentPage, from CurrentPage/CurrentSubPage
- # ../Foobar -- convert to CurrentPage/Foobar, from CurrentPage/CurrentSubPage
+ # ../Foobar -- convert to CurrentPage/Foobar,
+ # (from CurrentPage/CurrentSubPage)
+ # ../Foobar/ -- convert to CurrentPage/Foobar, use 'Foobar' as text
+ # (from CurrentPage/CurrentSubPage)
- wfProfileIn( __METHOD__ );
$ret = $target; # default return value is no change
# Some namespaces don't allow subpages,
@@ -1537,7 +1555,7 @@ class Linker {
$ret = implode( '/', array_slice( $exploded, 0, -$dotdotcount ) );
# / at the end means don't show full path
if ( substr( $nodotdot, -1, 1 ) === '/' ) {
- $nodotdot = substr( $nodotdot, 0, -1 );
+ $nodotdot = rtrim( $nodotdot, '/' );
if ( $text === '' ) {
$text = $nodotdot . $suffix;
}
@@ -1552,7 +1570,6 @@ class Linker {
}
}
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -1589,7 +1606,7 @@ class Linker {
* @return string HTML fragment
*/
public static function revComment( Revision $rev, $local = false, $isPublic = false ) {
- if ( $rev->getRawComment() == "" ) {
+ if ( $rev->getComment( Revision::RAW ) == "" ) {
return "";
}
if ( $rev->isDeleted( Revision::DELETED_COMMENT ) && $isPublic ) {
@@ -1807,7 +1824,7 @@ class Linker {
$inner = self::buildRollbackLink( $rev, $context, $editCount );
if ( !in_array( 'noBrackets', $options ) ) {
- $inner = $context->msg( 'brackets' )->rawParams( $inner )->plain();
+ $inner = $context->msg( 'brackets' )->rawParams( $inner )->escaped();
}
return '<span class="mw-rollback-link">' . $inner . '</span>';
@@ -1854,7 +1871,7 @@ class Linker {
$editCount = 0;
$moreRevs = false;
foreach ( $res as $row ) {
- if ( $rev->getRawUserText() != $row->rev_user_text ) {
+ if ( $rev->getUserText( Revision::RAW ) != $row->rev_user_text ) {
if ( $verify &&
( $row->rev_deleted & Revision::DELETED_TEXT
|| $row->rev_deleted & Revision::DELETED_USER
@@ -1892,7 +1909,7 @@ class Linker {
) {
global $wgShowRollbackEditCount, $wgMiserMode;
- // To config which pages are effected by miser mode
+ // To config which pages are affected by miser mode
$disableRollbackEditCountSpecialPage = array( 'Recentchanges', 'Watchlist' );
if ( $context === null ) {
@@ -1975,7 +1992,6 @@ class Linker {
$section = false, $more = null
) {
global $wgLang;
- wfProfileIn( __METHOD__ );
$outText = '';
if ( count( $templates ) > 0 ) {
@@ -2028,14 +2044,14 @@ class Linker {
if ( $titleObj->quickUserCan( 'edit' ) ) {
$editLink = self::link(
$titleObj,
- wfMessage( 'editlink' )->text(),
+ wfMessage( 'editlink' )->escaped(),
array(),
array( 'action' => 'edit' )
);
} else {
$editLink = self::link(
$titleObj,
- wfMessage( 'viewsourcelink' )->text(),
+ wfMessage( 'viewsourcelink' )->escaped(),
array(),
array( 'action' => 'edit' )
);
@@ -2055,7 +2071,6 @@ class Linker {
$outText .= '</ul>';
}
- wfProfileOut( __METHOD__ );
return $outText;
}
@@ -2067,7 +2082,6 @@ class Linker {
* @return string HTML output
*/
public static function formatHiddenCategories( $hiddencats ) {
- wfProfileIn( __METHOD__ );
$outText = '';
if ( count( $hiddencats ) > 0 ) {
@@ -2084,7 +2098,6 @@ class Linker {
}
$outText .= '</ul>';
}
- wfProfileOut( __METHOD__ );
return $outText;
}
@@ -2113,7 +2126,6 @@ class Linker {
* escape), or false for no title attribute
*/
public static function titleAttrib( $name, $options = null ) {
- wfProfileIn( __METHOD__ );
$message = wfMessage( "tooltip-$name" );
@@ -2142,7 +2154,6 @@ class Linker {
}
}
- wfProfileOut( __METHOD__ );
return $tooltip;
}
@@ -2162,7 +2173,6 @@ class Linker {
if ( isset( self::$accesskeycache[$name] ) ) {
return self::$accesskeycache[$name];
}
- wfProfileIn( __METHOD__ );
$message = wfMessage( "accesskey-$name" );
@@ -2178,7 +2188,6 @@ class Linker {
}
}
- wfProfileOut( __METHOD__ );
self::$accesskeycache[$name] = $accesskey;
return self::$accesskeycache[$name];
}
@@ -2286,7 +2295,6 @@ class Linker {
static function makeLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
wfDeprecated( __METHOD__, '1.21' );
- wfProfileIn( __METHOD__ );
$query = wfCgiToArray( $query );
list( $inside, $trail ) = self::splitTrail( $trail );
if ( $text === '' ) {
@@ -2295,7 +2303,6 @@ class Linker {
$ret = self::link( $nt, "$prefix$text$inside", array(), $query ) . $trail;
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -2320,8 +2327,6 @@ class Linker {
) {
wfDeprecated( __METHOD__, '1.21' );
- wfProfileIn( __METHOD__ );
-
if ( $text == '' ) {
$text = self::linkText( $title );
}
@@ -2335,7 +2340,6 @@ class Linker {
$ret = self::link( $title, "$prefix$text$inside", $attribs, $query,
array( 'known', 'noclasses' ) ) . $trail;
- wfProfileOut( __METHOD__ );
return $ret;
}
diff --git a/includes/MWNamespace.php b/includes/MWNamespace.php
index 392f5582..bd685514 100644
--- a/includes/MWNamespace.php
+++ b/includes/MWNamespace.php
@@ -72,7 +72,7 @@ class MWNamespace {
/**
* @since 1.20
*/
- wfRunHooks( 'NamespaceIsMovable', array( $index, &$result ) );
+ Hooks::run( 'NamespaceIsMovable', array( $index, &$result ) );
return $result;
}
@@ -213,7 +213,7 @@ class MWNamespace {
if ( is_array( $wgExtraNamespaces ) ) {
$namespaces += $wgExtraNamespaces;
}
- wfRunHooks( 'CanonicalNamespaces', array( &$namespaces ) );
+ Hooks::run( 'CanonicalNamespaces', array( &$namespaces ) );
}
return $namespaces;
}
diff --git a/includes/MWTimestamp.php b/includes/MWTimestamp.php
index 26f5e543..ea91470e 100644
--- a/includes/MWTimestamp.php
+++ b/includes/MWTimestamp.php
@@ -182,6 +182,11 @@ class MWTimestamp {
$output .= ' GMT';
}
+ if ( $style == TS_MW && strlen( $output ) !== 14 ) {
+ throw new TimestampException( __METHOD__ . ': The timestamp cannot be represented in ' .
+ 'the specified format' );
+ }
+
return $output;
}
@@ -221,7 +226,7 @@ class MWTimestamp {
$offsetRel = $relativeTo->offsetForUser( $user );
$ts = '';
- if ( wfRunHooks( 'GetHumanTimestamp', array( &$ts, $this, $relativeTo, $user, $lang ) ) ) {
+ if ( Hooks::run( 'GetHumanTimestamp', array( &$ts, $this, $relativeTo, $user, $lang ) ) ) {
$ts = $lang->getHumanTimestamp( $this, $relativeTo, $user );
}
@@ -326,7 +331,7 @@ class MWTimestamp {
$ts = '';
$diff = $this->diff( $relativeTo );
- if ( wfRunHooks(
+ if ( Hooks::run(
'GetRelativeTimestamp',
array( &$ts, &$diff, $this, $relativeTo, $user, $lang )
) ) {
diff --git a/includes/MagicWord.php b/includes/MagicWord.php
index 4d17298b..186821de 100644
--- a/includes/MagicWord.php
+++ b/includes/MagicWord.php
@@ -172,7 +172,6 @@ class MagicWord {
'directionmark',
'contentlanguage',
'numberofadmins',
- 'numberofviews',
'cascadingsources',
);
@@ -215,7 +214,6 @@ class MagicWord {
'localtimestamp' => 3600,
'pagesinnamespace' => 3600,
'numberofadmins' => 3600,
- 'numberofviews' => 3600,
'numberingroup' => 3600,
);
@@ -275,7 +273,7 @@ class MagicWord {
static function getVariableIDs() {
if ( !self::$mVariableIDsInitialised ) {
# Get variable IDs
- wfRunHooks( 'MagicWordwgVariableIDs', array( &self::$mVariableIDs ) );
+ Hooks::run( 'MagicWordwgVariableIDs', array( &self::$mVariableIDs ) );
self::$mVariableIDsInitialised = true;
}
return self::$mVariableIDs;
@@ -310,7 +308,7 @@ class MagicWord {
*/
static function getDoubleUnderscoreArray() {
if ( is_null( self::$mDoubleUnderscoreArray ) ) {
- wfRunHooks( 'GetDoubleUnderscoreIDs', array( &self::$mDoubleUnderscoreIDs ) );
+ Hooks::run( 'GetDoubleUnderscoreIDs', array( &self::$mDoubleUnderscoreIDs ) );
self::$mDoubleUnderscoreArray = new MagicWordArray( self::$mDoubleUnderscoreIDs );
}
return self::$mDoubleUnderscoreArray;
@@ -332,15 +330,12 @@ class MagicWord {
*/
function load( $id ) {
global $wgContLang;
- wfProfileIn( __METHOD__ );
$this->mId = $id;
$wgContLang->getMagic( $this );
if ( !$this->mSynonyms ) {
$this->mSynonyms = array( 'brionmademeputthishere' );
- wfProfileOut( __METHOD__ );
throw new MWException( "Error: invalid magic word '$id'" );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -657,7 +652,7 @@ class MagicWord {
* This method uses the php feature to do several replacements at the same time,
* thereby gaining some efficiency. The result is placed in the out variable
* $result. The return value is true if something was replaced.
- * @todo Should this be static? It doesn't seem to be used at all
+ * @deprecated since 1.25, unused
*
* @param array $magicarr
* @param string $subject
@@ -666,6 +661,7 @@ class MagicWord {
* @return bool
*/
function replaceMultiple( $magicarr, $subject, &$result ) {
+ wfDeprecated( __METHOD__, '1.25' );
$search = array();
$replace = array();
foreach ( $magicarr as $id => $replacement ) {
diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php
index 402494ec..ec2f40f6 100644
--- a/includes/MediaWiki.php
+++ b/includes/MediaWiki.php
@@ -20,10 +20,10 @@
* @file
*/
+use MediaWiki\Logger\LoggerFactory;
+
/**
* The MediaWiki class is the helper class for the index.php entry point.
- *
- * @internal documentation reviewed 15 Mar 2010
*/
class MediaWiki {
/**
@@ -59,7 +59,7 @@ class MediaWiki {
$request = $this->context->getRequest();
$curid = $request->getInt( 'curid' );
$title = $request->getVal( 'title' );
- $action = $request->getVal( 'action', 'view' );
+ $action = $request->getVal( 'action' );
if ( $request->getCheck( 'search' ) ) {
// Compatibility with old search URLs which didn't use Special:Search
@@ -121,7 +121,7 @@ class MediaWiki {
* @return Title
*/
public function getTitle() {
- if ( $this->context->getTitle() === null ) {
+ if ( !$this->context->hasTitle() ) {
$this->context->setTitle( $this->parseTitle() );
}
return $this->context->getTitle();
@@ -157,8 +157,6 @@ class MediaWiki {
private function performRequest() {
global $wgTitle;
- wfProfileIn( __METHOD__ );
-
$request = $this->context->getRequest();
$requestTitle = $title = $this->context->getTitle();
$output = $this->context->getOutput();
@@ -169,14 +167,13 @@ class MediaWiki {
}
$unused = null; // To pass it by reference
- wfRunHooks( 'BeforeInitialize', array( &$title, &$unused, &$output, &$user, $request, $this ) );
+ Hooks::run( 'BeforeInitialize', array( &$title, &$unused, &$output, &$user, $request, $this ) );
// Invalid titles. Bug 21776: The interwikis must redirect even if the page name is empty.
if ( is_null( $title ) || ( $title->getDBkey() == '' && !$title->isExternal() )
|| $title->isSpecial( 'Badtitle' )
) {
$this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) );
- wfProfileOut( __METHOD__ );
throw new BadTitleError();
}
@@ -201,12 +198,9 @@ class MediaWiki {
$this->context->setTitle( $badTitle );
$wgTitle = $badTitle;
- wfProfileOut( __METHOD__ );
throw new PermissionsError( 'read', $permErrors );
}
- $pageView = false; // was an article or special page viewed?
-
// Interwiki redirects
if ( $title->isExternal() ) {
$rdfrom = $request->getVal( 'rdfrom' );
@@ -225,7 +219,6 @@ class MediaWiki {
$output->redirect( $url, 301 );
} else {
$this->context->setTitle( SpecialPage::getTitleFor( 'Badtitle' ) );
- wfProfileOut( __METHOD__ );
throw new BadTitleError();
}
// Redirect loops, no title in URL, $wgUsePathInfo URLs, and URLs with a variant
@@ -233,7 +226,7 @@ class MediaWiki {
&& ( $request->getVal( 'title' ) === null
|| $title->getPrefixedDBkey() != $request->getVal( 'title' ) )
&& !count( $request->getValueNames( array( 'action', 'title' ) ) )
- && wfRunHooks( 'TestCanonicalRedirect', array( $request, $title, $output ) )
+ && Hooks::run( 'TestCanonicalRedirect', array( $request, $title, $output ) )
) {
if ( $title->isSpecialPage() ) {
list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
@@ -270,7 +263,6 @@ class MediaWiki {
}
// Special pages
} elseif ( NS_SPECIAL == $title->getNamespace() ) {
- $pageView = true;
// Actions that need to be made when we have a special pages
SpecialPageFactory::executePath( $title, $this->context );
} else {
@@ -278,23 +270,14 @@ class MediaWiki {
// may be a redirect to another article or URL.
$article = $this->initializeArticle();
if ( is_object( $article ) ) {
- $pageView = true;
$this->performAction( $article, $requestTitle );
} elseif ( is_string( $article ) ) {
$output->redirect( $article );
} else {
- wfProfileOut( __METHOD__ );
throw new MWException( "Shouldn't happen: MediaWiki::initializeArticle()"
. " returned neither an object nor a URL" );
}
}
-
- if ( $pageView ) {
- // Promote user to any groups they meet the criteria for
- $user->addAutopromoteOnceGroups( 'onView' );
- }
-
- wfProfileOut( __METHOD__ );
}
/**
@@ -304,7 +287,6 @@ class MediaWiki {
* @return mixed An Article, or a string to redirect to another URL
*/
private function initializeArticle() {
- wfProfileIn( __METHOD__ );
$title = $this->context->getTitle();
if ( $this->context->canUseWikiPage() ) {
@@ -322,7 +304,6 @@ class MediaWiki {
// NS_MEDIAWIKI has no redirects.
// It is also used for CSS/JS, so performance matters here...
if ( $title->getNamespace() == NS_MEDIAWIKI ) {
- wfProfileOut( __METHOD__ );
return $article;
}
@@ -342,7 +323,7 @@ class MediaWiki {
// Give extensions a change to ignore/handle redirects as needed
$ignoreRedirect = $target = false;
- wfRunHooks( 'InitializeArticleMaybeRedirect',
+ Hooks::run( 'InitializeArticleMaybeRedirect',
array( &$title, &$request, &$ignoreRedirect, &$target, &$article ) );
// Follow redirects only for... redirects.
@@ -353,7 +334,6 @@ class MediaWiki {
if ( is_string( $target ) ) {
if ( !$this->config->get( 'DisableHardRedirects' ) ) {
// we'll need to redirect
- wfProfileOut( __METHOD__ );
return $target;
}
}
@@ -374,7 +354,6 @@ class MediaWiki {
}
}
- wfProfileOut( __METHOD__ );
return $article;
}
@@ -385,17 +364,15 @@ class MediaWiki {
* @param Title $requestTitle The original title, before any redirects were applied
*/
private function performAction( Page $page, Title $requestTitle ) {
- wfProfileIn( __METHOD__ );
$request = $this->context->getRequest();
$output = $this->context->getOutput();
$title = $this->context->getTitle();
$user = $this->context->getUser();
- if ( !wfRunHooks( 'MediaWikiPerformAction',
+ if ( !Hooks::run( 'MediaWikiPerformAction',
array( $output, $page, $title, $user, $request, $this ) )
) {
- wfProfileOut( __METHOD__ );
return;
}
@@ -406,22 +383,24 @@ class MediaWiki {
if ( $action instanceof Action ) {
# Let Squid cache things if we can purge them.
if ( $this->config->get( 'UseSquid' ) &&
- in_array( $request->getFullRequestURL(), $requestTitle->getSquidURLs() )
+ in_array(
+ // Use PROTO_INTERNAL because that's what getSquidURLs() uses
+ wfExpandUrl( $request->getRequestURL(), PROTO_INTERNAL ),
+ $requestTitle->getSquidURLs()
+ )
) {
$output->setSquidMaxage( $this->config->get( 'SquidMaxage' ) );
}
$action->show();
- wfProfileOut( __METHOD__ );
return;
}
- if ( wfRunHooks( 'UnknownAction', array( $request->getVal( 'action', 'view' ), $page ) ) ) {
+ if ( Hooks::run( 'UnknownAction', array( $request->getVal( 'action', 'view' ), $page ) ) ) {
$output->setStatusCode( 404 );
$output->showErrorPage( 'nosuchaction', 'nosuchactiontext' );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -446,7 +425,7 @@ class MediaWiki {
$this->triggerJobs();
$this->restInPeace();
} catch ( Exception $e ) {
- MWExceptionHandler::handle( $e );
+ MWExceptionHandler::handleException( $e );
}
}
@@ -456,7 +435,6 @@ class MediaWiki {
* @return bool
*/
private function checkMaxLag() {
- wfProfileIn( __METHOD__ );
$maxLag = $this->context->getRequest()->getVal( 'maxlag' );
if ( !is_null( $maxLag ) ) {
list( $host, $lag ) = wfGetLB()->getMaxLag();
@@ -472,33 +450,28 @@ class MediaWiki {
echo "Waiting for a database server: $lag seconds lagged\n";
}
- wfProfileOut( __METHOD__ );
-
exit;
}
}
- wfProfileOut( __METHOD__ );
return true;
}
private function main() {
global $wgTitle;
- wfProfileIn( __METHOD__ );
-
$request = $this->context->getRequest();
// Send Ajax requests to the Ajax dispatcher.
- if ( $this->config->get( 'UseAjax' ) && $request->getVal( 'action', 'view' ) == 'ajax' ) {
-
+ if ( $this->config->get( 'UseAjax' ) && $request->getVal( 'action' ) === 'ajax' ) {
// Set a dummy title, because $wgTitle == null might break things
- $title = Title::makeTitle( NS_MAIN, 'AJAX' );
+ $title = Title::makeTitle( NS_SPECIAL, 'Badtitle/performing an AJAX call in '
+ . __METHOD__
+ );
$this->context->setTitle( $title );
$wgTitle = $title;
$dispatcher = new AjaxDispatcher( $this->config );
$dispatcher->performAction( $this->context->getUser() );
- wfProfileOut( __METHOD__ );
return;
}
@@ -508,6 +481,20 @@ class MediaWiki {
$action = $this->getAction();
$wgTitle = $title;
+ $trxProfiler = Profiler::instance()->getTransactionProfiler();
+ $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
+
+ // Aside from rollback, master queries should not happen on GET requests.
+ // Periodic or "in passing" updates on GET should use the job queue.
+ if ( !$request->wasPosted()
+ && in_array( $action, array( 'view', 'edit', 'history' ) )
+ ) {
+ $trxProfiler->setExpectation( 'masterConns', 0, __METHOD__ );
+ $trxProfiler->setExpectation( 'writes', 0, __METHOD__ );
+ } else {
+ $trxProfiler->setExpectation( 'maxAffected', 500, __METHOD__ );
+ }
+
// If the user has forceHTTPS set to true, or if the user
// is in a group requiring HTTPS, or if they have the HTTPS
// preference set, redirect them to HTTPS.
@@ -530,7 +517,7 @@ class MediaWiki {
$redirUrl = preg_replace( '#^http://#', 'https://', $oldUrl );
// ATTENTION: This hook is likely to be removed soon due to overall design of the system.
- if ( wfRunHooks( 'BeforeHttpsRedirect', array( $this->context, &$redirUrl ) ) ) {
+ if ( Hooks::run( 'BeforeHttpsRedirect', array( $this->context, &$redirUrl ) ) ) {
if ( $request->wasPosted() ) {
// This is weird and we'd hope it almost never happens. This
@@ -544,20 +531,18 @@ class MediaWiki {
wfDebugLog( 'RedirectedPosts', "Redirected from HTTP to HTTPS: $oldUrl" );
}
// Setup dummy Title, otherwise OutputPage::redirect will fail
- $title = Title::newFromText( NS_MAIN, 'REDIR' );
+ $title = Title::newFromText( 'REDIR', NS_MAIN );
$this->context->setTitle( $title );
$output = $this->context->getOutput();
// Since we only do this redir to change proto, always send a vary header
$output->addVaryHeader( 'X-Forwarded-Proto' );
$output->redirect( $redirUrl );
$output->output();
- wfProfileOut( __METHOD__ );
return;
}
}
if ( $this->config->get( 'UseFileCache' ) && $title->getNamespace() >= 0 ) {
- wfProfileIn( 'main-try-filecache' );
if ( HTMLFileCache::useFileCache( $this->context ) ) {
// Try low-level file cache hit
$cache = new HTMLFileCache( $title, $action );
@@ -572,12 +557,9 @@ class MediaWiki {
$this->context->getWikiPage()->doViewUpdates( $this->context->getUser() );
// Tell OutputPage that output is taken care of
$this->context->getOutput()->disable();
- wfProfileOut( 'main-try-filecache' );
- wfProfileOut( __METHOD__ );
return;
}
}
- wfProfileOut( 'main-try-filecache' );
}
// Actually do the work of the request and build up any output
@@ -593,13 +575,16 @@ class MediaWiki {
// Output everything!
$this->context->getOutput()->output();
- wfProfileOut( __METHOD__ );
}
/**
* Ends this task peacefully
*/
public function restInPeace() {
+ // Ignore things like master queries/connections on GET requests
+ // as long as they are in deferred updates (which catch errors).
+ Profiler::instance()->getTransactionProfiler()->resetExpectations();
+
// Do any deferred jobs
DeferredUpdates::doUpdates( 'commit' );
@@ -627,8 +612,6 @@ class MediaWiki {
return; // recursion guard
}
- $section = new ProfileSection( __METHOD__ );
-
if ( $jobRunRate < 1 ) {
$max = mt_getrandmax();
if ( mt_rand( 0, $max ) > $max * $jobRunRate ) {
@@ -639,9 +622,11 @@ class MediaWiki {
$n = intval( $jobRunRate );
}
+ $runJobsLogger = LoggerFactory::getInstance( 'runJobs' );
+
if ( !$this->config->get( 'RunJobsAsync' ) ) {
// Fall back to running the job here while the user waits
- $runner = new JobRunner();
+ $runner = new JobRunner( $runJobsLogger );
$runner->run( array( 'maxJobs' => $n ) );
return;
}
@@ -674,29 +659,34 @@ class MediaWiki {
);
wfRestoreWarnings();
if ( !$sock ) {
- wfDebugLog( 'runJobs', "Failed to start cron API (socket error $errno): $errstr\n" );
+ $runJobsLogger->error( "Failed to start cron API (socket error $errno): $errstr" );
// Fall back to running the job here while the user waits
- $runner = new JobRunner();
+ $runner = new JobRunner( $runJobsLogger );
$runner->run( array( 'maxJobs' => $n ) );
return;
}
$url = wfAppendQuery( wfScript( 'index' ), $query );
- $req = "POST $url HTTP/1.1\r\nHost: {$info['host']}\r\nConnection: Close\r\nContent-Length: 0\r\n\r\n";
+ $req = (
+ "POST $url HTTP/1.1\r\n" .
+ "Host: {$info['host']}\r\n" .
+ "Connection: Close\r\n" .
+ "Content-Length: 0\r\n\r\n"
+ );
- wfDebugLog( 'runJobs', "Running $n job(s) via '$url'\n" );
+ $runJobsLogger->info( "Running $n job(s) via '$url'" );
// Send a cron API request to be performed in the background.
// Give up if this takes too long to send (which should be rare).
stream_set_timeout( $sock, 1 );
$bytes = fwrite( $sock, $req );
if ( $bytes !== strlen( $req ) ) {
- wfDebugLog( 'runJobs', "Failed to start cron API (socket write error)\n" );
+ $runJobsLogger->error( "Failed to start cron API (socket write error)" );
} else {
// Do not wait for the response (the script should handle client aborts).
// Make sure that we don't close before that script reaches ignore_user_abort().
$status = fgets( $sock );
if ( !preg_match( '#^HTTP/\d\.\d 202 #', $status ) ) {
- wfDebugLog( 'runJobs', "Failed to start cron API: received '$status'\n" );
+ $runJobsLogger->error( "Failed to start cron API: received '$status'" );
}
}
fclose( $sock );
diff --git a/includes/MediaWikiVersionFetcher.php b/includes/MediaWikiVersionFetcher.php
index 439e53f4..943bc9fc 100644
--- a/includes/MediaWikiVersionFetcher.php
+++ b/includes/MediaWikiVersionFetcher.php
@@ -4,7 +4,6 @@
* Provides access to MediaWiki's version without requiring MediaWiki (or anything else)
* being loaded first.
*
- * @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class MediaWikiVersionFetcher {
@@ -19,7 +18,7 @@ class MediaWikiVersionFetcher {
$defaultSettings = file_get_contents( __DIR__ . '/DefaultSettings.php' );
$matches = array();
- preg_match( "/wgVersion = '([-0-9a-zA-Z\.]+)';/", $defaultSettings, $matches );
+ preg_match( "/wgVersion = '([0-9a-zA-Z\.\-]+)';/", $defaultSettings, $matches );
if ( count( $matches ) !== 2 ) {
throw new RuntimeException( 'Could not extract the MediaWiki version from DefaultSettings.php' );
diff --git a/includes/Message.php b/includes/Message.php
index 4df0d809..134af0ed 100644
--- a/includes/Message.php
+++ b/includes/Message.php
@@ -156,7 +156,7 @@
*
* @since 1.17
*/
-class Message {
+class Message implements MessageSpecifier {
/**
* In which language to get this message. True, which is the default,
@@ -249,7 +249,7 @@ class Message {
$this->key = reset( $this->keysToTry );
$this->parameters = array_values( $params );
- $this->language = $language ? $language : $wgLang;
+ $this->language = $language ?: $wgLang;
}
/**
@@ -276,7 +276,7 @@ class Message {
* Returns the message key.
*
* If a list of multiple possible keys was supplied to the constructor, this method may
- * return any of these keys. After the message ahs been fetched, this method will return
+ * return any of these keys. After the message has been fetched, this method will return
* the key that was actually used to fetch the message.
*
* @since 1.21
@@ -541,6 +541,30 @@ class Message {
}
/**
+ * Add parameters that are plaintext and will be passed through without
+ * the content being evaluated. Plaintext parameters are not valid as
+ * arguments to parser functions. This differs from self::rawParams in
+ * that the Message class handles escaping to match the output format.
+ *
+ * @since 1.25
+ *
+ * @param string|string[] $param,... plaintext parameters, or a single argument that is
+ * an array of plaintext parameters.
+ *
+ * @return Message $this
+ */
+ public function plaintextParams( /*...*/ ) {
+ $params = func_get_args();
+ if ( isset( $params[0] ) && is_array( $params[0] ) ) {
+ $params = $params[0];
+ }
+ foreach ( $params as $param ) {
+ $this->parameters[] = self::plaintextParam( $param );
+ }
+ return $this;
+ }
+
+ /**
* Set the language and the title from a context object
*
* @since 1.19
@@ -674,11 +698,10 @@ class Message {
$string = $this->fetchMessage();
if ( $string === false ) {
- $key = htmlspecialchars( $this->key );
- if ( $this->format === 'plain' ) {
- return '<' . $key . '>';
+ if ( $this->format === 'plain' || $this->format === 'text' ) {
+ return '<' . $this->key . '>';
}
- return '&lt;' . $key . '&gt;';
+ return '&lt;' . htmlspecialchars( $this->key ) . '&gt;';
}
# Replace $* with a list of parameters for &uselang=qqx.
@@ -735,10 +758,10 @@ class Message {
// Doh! Cause a fatal error after all?
}
- if ( $this->format === 'plain' ) {
+ if ( $this->format === 'plain' || $this->format === 'text' ) {
return '<' . $this->key . '>';
}
- return '&lt;' . $this->key . '&gt;';
+ return '&lt;' . htmlspecialchars( $this->key ) . '&gt;';
}
}
@@ -917,6 +940,17 @@ class Message {
}
/**
+ * @since 1.25
+ *
+ * @param string $plaintext
+ *
+ * @return string[] Array with a single "plaintext" key.
+ */
+ public static function plaintextParam( $plaintext ) {
+ return array( 'plaintext' => $plaintext );
+ }
+
+ /**
* Substitutes any parameters into the message text.
*
* @since 1.17
@@ -965,6 +999,8 @@ class Message {
return array( 'before', $this->language->formatSize( $param['size'] ) );
} elseif ( isset( $param['bitrate'] ) ) {
return array( 'before', $this->language->formatBitrate( $param['bitrate'] ) );
+ } elseif ( isset( $param['plaintext'] ) ) {
+ return array( 'after', $this->formatPlaintext( $param['plaintext'] ) );
} else {
$warning = 'Invalid parameter for message "' . $this->getKey() . '": ' .
htmlspecialchars( serialize( $param ) );
@@ -1050,6 +1086,31 @@ class Message {
return $this->message;
}
+ /**
+ * Formats a message parameter wrapped with 'plaintext'. Ensures that
+ * the entire string is displayed unchanged when displayed in the output
+ * format.
+ *
+ * @since 1.25
+ *
+ * @param string $plaintext String to ensure plaintext output of
+ *
+ * @return string Input plaintext encoded for output to $this->format
+ */
+ protected function formatPlaintext( $plaintext ) {
+ switch ( $this->format ) {
+ case 'text':
+ case 'plain':
+ return $plaintext;
+
+ case 'parse':
+ case 'block-parse':
+ case 'escaped':
+ default:
+ return htmlspecialchars( $plaintext, ENT_QUOTES );
+
+ }
+ }
}
/**
diff --git a/includes/MessageBlobStore.php b/includes/MessageBlobStore.php
index e3b4dbe8..011cae66 100644
--- a/includes/MessageBlobStore.php
+++ b/includes/MessageBlobStore.php
@@ -36,15 +36,12 @@ class MessageBlobStore {
* Get the singleton instance
*
* @since 1.24
+ * @deprecated since 1.25
* @return MessageBlobStore
*/
public static function getInstance() {
- static $instance = null;
- if ( $instance === null ) {
- $instance = new self;
- }
-
- return $instance;
+ wfDeprecated( __METHOD__, '1.25' );
+ return new self;
}
/**
@@ -56,9 +53,7 @@ class MessageBlobStore {
* @return array An array mapping module names to message blobs
*/
public function get( ResourceLoader $resourceLoader, $modules, $lang ) {
- wfProfileIn( __METHOD__ );
if ( !count( $modules ) ) {
- wfProfileOut( __METHOD__ );
return array();
}
// Try getting from the DB first
@@ -73,7 +68,6 @@ class MessageBlobStore {
}
}
- wfProfileOut( __METHOD__ );
return $blobs;
}
@@ -130,7 +124,7 @@ class MessageBlobStore {
);
}
}
- } catch ( Exception $e ) {
+ } catch ( DBError $e ) {
wfDebug( __METHOD__ . " failed to update DB: $e\n" );
}
return $blob;
diff --git a/includes/MimeMagic.php b/includes/MimeMagic.php
index bfd60111..ebe98a3c 100644
--- a/includes/MimeMagic.php
+++ b/includes/MimeMagic.php
@@ -200,7 +200,7 @@ class MimeMagic {
global $IP;
# Allow media handling extensions adding MIME-types and MIME-info
- wfRunHooks( 'MimeMagicInit', array( $this ) );
+ Hooks::run( 'MimeMagicInit', array( $this ) );
$types = MM_WELL_KNOWN_MIME_TYPES;
@@ -210,7 +210,7 @@ class MimeMagic {
}
if ( $mimeTypeFile ) {
- if ( is_file( $mimeTypeFile ) and is_readable( $mimeTypeFile ) ) {
+ if ( is_file( $mimeTypeFile ) && is_readable( $mimeTypeFile ) ) {
wfDebug( __METHOD__ . ": loading mime types from $mimeTypeFile\n" );
$types .= "\n";
$types .= file_get_contents( $mimeTypeFile );
@@ -218,7 +218,7 @@ class MimeMagic {
wfDebug( __METHOD__ . ": can't load mime types from $mimeTypeFile\n" );
}
} else {
- wfDebug( __METHOD__ . ": no mime types file defined, using build-ins only.\n" );
+ wfDebug( __METHOD__ . ": no mime types file defined, using built-ins only.\n" );
}
$types .= "\n" . $this->mExtraTypes;
@@ -287,7 +287,7 @@ class MimeMagic {
$info = MM_WELL_KNOWN_MIME_INFO;
if ( $mimeInfoFile ) {
- if ( is_file( $mimeInfoFile ) and is_readable( $mimeInfoFile ) ) {
+ if ( is_file( $mimeInfoFile ) && is_readable( $mimeInfoFile ) ) {
wfDebug( __METHOD__ . ": loading mime info from $mimeInfoFile\n" );
$info .= "\n";
$info .= file_get_contents( $mimeInfoFile );
@@ -295,7 +295,7 @@ class MimeMagic {
wfDebug( __METHOD__ . ": can't load mime info from $mimeInfoFile\n" );
}
} else {
- wfDebug( __METHOD__ . ": no mime info file defined, using build-ins only.\n" );
+ wfDebug( __METHOD__ . ": no mime info file defined, using built-ins only.\n" );
}
$info .= "\n" . $this->mExtraInfo;
@@ -569,7 +569,7 @@ class MimeMagic {
}
# Media handling extensions can improve the MIME detected
- wfRunHooks( 'MimeMagicImproveFromExtension', array( $this, $ext, &$mime ) );
+ Hooks::run( 'MimeMagicImproveFromExtension', array( $this, $ext, &$mime ) );
if ( isset( $this->mMimeTypeAliases[$mime] ) ) {
$mime = $this->mMimeTypeAliases[$mime];
@@ -802,7 +802,7 @@ class MimeMagic {
# people will hopefully nag and submit patches :)
$mime = false;
# Some strings by reference for performance - assuming well-behaved hooks
- wfRunHooks(
+ Hooks::run(
'MimeMagicGuessFromContent',
array( $this, &$head, &$tail, $file, &$mime )
);
diff --git a/includes/MovePage.php b/includes/MovePage.php
index fdece8d5..de7da3f9 100644
--- a/includes/MovePage.php
+++ b/includes/MovePage.php
@@ -42,6 +42,188 @@ class MovePage {
$this->newTitle = $newTitle;
}
+ public function checkPermissions( User $user, $reason ) {
+ $status = new Status();
+
+ $errors = wfMergeErrorArrays(
+ $this->oldTitle->getUserPermissionsErrors( 'move', $user ),
+ $this->oldTitle->getUserPermissionsErrors( 'edit', $user ),
+ $this->newTitle->getUserPermissionsErrors( 'move-target', $user ),
+ $this->newTitle->getUserPermissionsErrors( 'edit', $user )
+ );
+
+ // Convert into a Status object
+ if ( $errors ) {
+ foreach ( $errors as $error ) {
+ call_user_func_array( array( $status, 'fatal' ), $error );
+ }
+ }
+
+ if ( EditPage::matchSummarySpamRegex( $reason ) !== false ) {
+ // This is kind of lame, won't display nice
+ $status->fatal( 'spamprotectiontext' );
+ }
+
+ # The move is allowed only if (1) the target doesn't exist, or
+ # (2) the target is a redirect to the source, and has no history
+ # (so we can undo bad moves right after they're done).
+
+ if ( $this->newTitle->getArticleID() ) { # Target exists; check for validity
+ if ( !$this->isValidMoveTarget() ) {
+ $status->fatal( 'articleexists' );
+ }
+ } else {
+ $tp = $this->newTitle->getTitleProtection();
+ if ( $tp !== false ) {
+ if ( !$user->isAllowed( $tp['permission'] ) ) {
+ $status->fatal( 'cantmove-titleprotected' );
+ }
+ }
+ }
+
+ Hooks::run( 'MovePageCheckPermissions',
+ array( $this->oldTitle, $this->newTitle, $user, $reason, $status )
+ );
+
+ return $status;
+ }
+
+ /**
+ * Does various sanity checks that the move is
+ * valid. Only things based on the two titles
+ * should be checked here.
+ *
+ * @return Status
+ */
+ public function isValidMove() {
+ global $wgContentHandlerUseDB;
+ $status = new Status();
+
+ if ( $this->oldTitle->equals( $this->newTitle ) ) {
+ $status->fatal( 'selfmove' );
+ }
+ if ( !$this->oldTitle->isMovable() ) {
+ $status->fatal( 'immobile-source-namespace', $this->oldTitle->getNsText() );
+ }
+ if ( $this->newTitle->isExternal() ) {
+ $status->fatal( 'immobile-target-namespace-iw' );
+ }
+ if ( !$this->newTitle->isMovable() ) {
+ $status->fatal( 'immobile-target-namespace', $this->newTitle->getNsText() );
+ }
+
+ $oldid = $this->oldTitle->getArticleID();
+
+ if ( strlen( $this->newTitle->getDBkey() ) < 1 ) {
+ $status->fatal( 'articleexists' );
+ }
+ if (
+ ( $this->oldTitle->getDBkey() == '' ) ||
+ ( !$oldid ) ||
+ ( $this->newTitle->getDBkey() == '' )
+ ) {
+ $status->fatal( 'badarticleerror' );
+ }
+
+ // Content model checks
+ if ( !$wgContentHandlerUseDB &&
+ $this->oldTitle->getContentModel() !== $this->newTitle->getContentModel() ) {
+ // can't move a page if that would change the page's content model
+ $status->fatal(
+ 'bad-target-model',
+ ContentHandler::getLocalizedName( $this->oldTitle->getContentModel() ),
+ ContentHandler::getLocalizedName( $this->newTitle->getContentModel() )
+ );
+ }
+
+ // Image-specific checks
+ if ( $this->oldTitle->inNamespace( NS_FILE ) ) {
+ $status->merge( $this->isValidFileMove() );
+ }
+
+ if ( $this->newTitle->inNamespace( NS_FILE ) && !$this->oldTitle->inNamespace( NS_FILE ) ) {
+ $status->fatal( 'nonfile-cannot-move-to-file' );
+ }
+
+ // Hook for extensions to say a title can't be moved for technical reasons
+ Hooks::run( 'MovePageIsValidMove', array( $this->oldTitle, $this->newTitle, $status ) );
+
+ return $status;
+ }
+
+ /**
+ * Sanity checks for when a file is being moved
+ *
+ * @return Status
+ */
+ protected function isValidFileMove() {
+ $status = new Status();
+ $file = wfLocalFile( $this->oldTitle );
+ $file->load( File::READ_LATEST );
+ if ( $file->exists() ) {
+ if ( $this->newTitle->getText() != wfStripIllegalFilenameChars( $this->newTitle->getText() ) ) {
+ $status->fatal( 'imageinvalidfilename' );
+ }
+ if ( !File::checkExtensionCompatibility( $file, $this->newTitle->getDBkey() ) ) {
+ $status->fatal( 'imagetypemismatch' );
+ }
+ }
+
+ if ( !$this->newTitle->inNamespace( NS_FILE ) ) {
+ $status->fatal( 'imagenocrossnamespace' );
+ }
+
+ return $status;
+ }
+
+ /**
+ * Checks if $this can be moved to a given Title
+ * - Selects for update, so don't call it unless you mean business
+ *
+ * @since 1.25
+ * @return bool
+ */
+ protected function isValidMoveTarget() {
+ # Is it an existing file?
+ if ( $this->newTitle->inNamespace( NS_FILE ) ) {
+ $file = wfLocalFile( $this->newTitle );
+ $file->load( File::READ_LATEST );
+ if ( $file->exists() ) {
+ wfDebug( __METHOD__ . ": file exists\n" );
+ return false;
+ }
+ }
+ # Is it a redirect with no history?
+ if ( !$this->newTitle->isSingleRevRedirect() ) {
+ wfDebug( __METHOD__ . ": not a one-rev redirect\n" );
+ return false;
+ }
+ # Get the article text
+ $rev = Revision::newFromTitle( $this->newTitle, false, Revision::READ_LATEST );
+ if ( !is_object( $rev ) ) {
+ return false;
+ }
+ $content = $rev->getContent();
+ # Does the redirect point to the source?
+ # Or is it a broken self-redirect, usually caused by namespace collisions?
+ $redirTitle = $content ? $content->getRedirectTarget() : null;
+
+ if ( $redirTitle ) {
+ if ( $redirTitle->getPrefixedDBkey() !== $this->oldTitle->getPrefixedDBkey() &&
+ $redirTitle->getPrefixedDBkey() !== $this->newTitle->getPrefixedDBkey() ) {
+ wfDebug( __METHOD__ . ": redirect points to other page\n" );
+ return false;
+ } else {
+ return true;
+ }
+ } else {
+ # Fail safe (not a redirect after all. strange.)
+ wfDebug( __METHOD__ . ": failsafe: database says " . $this->newTitle->getPrefixedDBkey() .
+ " is a redirect, but it doesn't contain a valid redirect.\n" );
+ return false;
+ }
+ }
+
/**
* @param User $user
* @param string $reason
@@ -51,11 +233,14 @@ class MovePage {
public function move( User $user, $reason, $createRedirect ) {
global $wgCategoryCollation;
+ Hooks::run( 'TitleMove', array( $this->oldTitle, $this->newTitle, $user ) );
+
// If it is a file, move it first.
// It is done before all other moving stuff is done because it's hard to revert.
$dbw = wfGetDB( DB_MASTER );
if ( $this->oldTitle->getNamespace() == NS_FILE ) {
$file = wfLocalFile( $this->oldTitle );
+ $file->load( File::READ_LATEST );
if ( $file->exists() ) {
$status = $file->move( $this->newTitle );
if ( !$status->isOk() ) {
@@ -188,9 +373,11 @@ class MovePage {
$dbw->commit( __METHOD__ );
- wfRunHooks( 'TitleMoveComplete', array( &$this->oldTitle, &$this->newTitle, &$user, $pageid, $redirid, $reason ) );
+ Hooks::run(
+ 'TitleMoveComplete',
+ array( &$this->oldTitle, &$this->newTitle, &$user, $pageid, $redirid, $reason )
+ );
return Status::newGood();
-
}
/**
@@ -258,6 +445,9 @@ class MovePage {
$dbw = wfGetDB( DB_MASTER );
+ $oldpage = WikiPage::factory( $this->oldTitle );
+ $oldcountable = $oldpage->isCountable();
+
$newpage = WikiPage::factory( $nt );
if ( $moveOverRedirect ) {
@@ -302,10 +492,11 @@ class MovePage {
$newpage->updateRevisionOn( $dbw, $nullRevision );
- wfRunHooks( 'NewRevisionFromEditComplete',
+ Hooks::run( 'NewRevisionFromEditComplete',
array( $newpage, $nullRevision, $nullRevision->getParentId(), $user ) );
- $newpage->doEditUpdates( $nullRevision, $user, array( 'changed' => false ) );
+ $newpage->doEditUpdates( $nullRevision, $user,
+ array( 'changed' => false, 'moved' => true, 'oldcountable' => $oldcountable ) );
if ( !$moveOverRedirect ) {
WikiPage::onArticleCreate( $nt );
@@ -328,7 +519,7 @@ class MovePage {
$redirectRevision->insertOn( $dbw );
$redirectArticle->updateRevisionOn( $dbw, $redirectRevision, 0 );
- wfRunHooks( 'NewRevisionFromEditComplete',
+ Hooks::run( 'NewRevisionFromEditComplete',
array( $redirectArticle, $redirectRevision, false, $user ) );
$redirectArticle->doEditUpdates( $redirectRevision, $user, array( 'created' => true ) );
@@ -339,5 +530,4 @@ class MovePage {
$logid = $logEntry->insert();
$logEntry->publish( $logid );
}
-
-} \ No newline at end of file
+}
diff --git a/includes/NoLocalSettings.php b/includes/NoLocalSettings.php
new file mode 100644
index 00000000..6de9bfcd
--- /dev/null
+++ b/includes/NoLocalSettings.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Display an error page when there is no LocalSettings.php file.
+ *
+ * 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
+ */
+
+# bug 30219 : can not use pathinfo() on URLs since slashes do not match
+$matches = array();
+$ext = 'php';
+$path = '/';
+foreach ( array_filter( explode( '/', $_SERVER['PHP_SELF'] ) ) as $part ) {
+ if ( !preg_match( '/\.(php5?)$/', $part, $matches ) ) {
+ $path .= "$part/";
+ } else {
+ $ext = $matches[1] == 'php5' ? 'php5' : 'php';
+ break;
+ }
+}
+
+# Check to see if the installer is running
+if ( !function_exists( 'session_name' ) ) {
+ $installerStarted = false;
+} else {
+ session_name( 'mw_installer_session' );
+ $oldReporting = error_reporting( E_ALL & ~E_NOTICE );
+ $success = session_start();
+ error_reporting( $oldReporting );
+ $installerStarted = ( $success && isset( $_SESSION['installData'] ) );
+}
+
+$templateParser = new TemplateParser();
+
+# Render error page if no LocalSettings file can be found
+try {
+ echo $templateParser->processTemplate(
+ 'NoLocalSettings',
+ array(
+ 'wgVersion' => ( isset( $wgVersion ) ? $wgVersion : 'VERSION' ),
+ 'path' => $path,
+ 'ext' => $ext,
+ 'localSettingsExists' => file_exists( MW_CONFIG_FILE ),
+ 'installerStarted' => $installerStarted
+ )
+ );
+} catch ( Exception $e ) {
+ echo 'Error: ' . htmlspecialchars( $e->getMessage() );
+}
diff --git a/includes/OutputHandler.php b/includes/OutputHandler.php
index b0bbcddb..c6209eeb 100644
--- a/includes/OutputHandler.php
+++ b/includes/OutputHandler.php
@@ -129,7 +129,8 @@ function wfGzipHandler( $s ) {
$headers = headers_list();
$foundVary = false;
foreach ( $headers as $header ) {
- if ( substr( $header, 0, 5 ) == 'Vary:' ) {
+ $headerName = strtolower( substr( $header, 0, 5 ) );
+ if ( $headerName == 'vary:' ) {
$foundVary = true;
break;
}
diff --git a/includes/OutputPage.php b/includes/OutputPage.php
index 55b1da00..7e671878 100644
--- a/includes/OutputPage.php
+++ b/includes/OutputPage.php
@@ -122,6 +122,9 @@ class OutputPage extends ContextSource {
/** @var array */
protected $mCategories = array();
+ /** @var array */
+ protected $mIndicators = array();
+
/** @var array Array of Interwiki Prefixed (non DB key) Titles (e.g. 'fr:Test page') */
private $mLanguageLinks = array();
@@ -193,12 +196,6 @@ class OutputPage extends ContextSource {
// Parser related.
- /**
- * @var int
- * @todo Unused?
- */
- private $mContainsOldMagic = 0;
-
/** @var int */
protected $mContainsNewMagic = 0;
@@ -244,8 +241,9 @@ class OutputPage extends ContextSource {
protected $mSquidMaxage = 0;
/**
- * @var bool
- * @todo Document
+ * @var bool Controls if anti-clickjacking / frame-breaking headers will
+ * be sent. This should be done for pages where edit actions are possible.
+ * Setters: $this->preventClickjacking() and $this->allowClickjacking().
*/
protected $mPreventClickjacking = true;
@@ -783,7 +781,7 @@ class OutputPage extends ContextSource {
// bug 44570: the core page itself may not change, but resources might
$modifiedTimes['sepoch'] = wfTimestamp( TS_MW, time() - $config->get( 'SquidMaxage' ) );
}
- wfRunHooks( 'OutputPageCheckLastModified', array( &$modifiedTimes ) );
+ Hooks::run( 'OutputPageCheckLastModified', array( &$modifiedTimes ) );
$maxModified = max( $modifiedTimes );
$this->mLastModified = wfTimestamp( TS_RFC2822, $maxModified );
@@ -1030,17 +1028,29 @@ class OutputPage extends ContextSource {
}
/**
- * Add a subtitle containing a backlink to a page
+ * Build message object for a subtitle containing a backlink to a page
*
* @param Title $title Title to link to
* @param array $query Array of additional parameters to include in the link
+ * @return Message
+ * @since 1.25
*/
- public function addBacklinkSubtitle( Title $title, $query = array() ) {
+ public static function buildBacklinkSubtitle( Title $title, $query = array() ) {
if ( $title->isRedirect() ) {
$query['redirect'] = 'no';
}
- $this->addSubtitle( $this->msg( 'backlinksubtitle' )
- ->rawParams( Linker::link( $title, null, array(), $query ) ) );
+ return wfMessage( 'backlinksubtitle' )
+ ->rawParams( Linker::link( $title, null, array(), $query ) );
+ }
+
+ /**
+ * Add a subtitle containing a backlink to a page
+ *
+ * @param Title $title Title to link to
+ * @param array $query Array of additional parameters to include in the link
+ */
+ public function addBacklinkSubtitle( Title $title, $query = array() ) {
+ $this->addSubtitle( self::buildBacklinkSubtitle( $title, $query ) );
}
/**
@@ -1060,7 +1070,7 @@ class OutputPage extends ContextSource {
}
/**
- * Set the page as printable, i.e. it'll be displayed with with all
+ * Set the page as printable, i.e. it'll be displayed with all
* print styles included
*/
public function setPrintable() {
@@ -1310,7 +1320,7 @@ class OutputPage extends ContextSource {
}
# Add the remaining categories to the skin
- if ( wfRunHooks(
+ if ( Hooks::run(
'OutputPageMakeCategoryLinks',
array( &$this, $categories, &$this->mCategoryLinks ) )
) {
@@ -1363,6 +1373,65 @@ class OutputPage extends ContextSource {
}
/**
+ * Add an array of indicators, with their identifiers as array
+ * keys and HTML contents as values.
+ *
+ * In case of duplicate keys, existing values are overwritten.
+ *
+ * @param array $indicators
+ * @since 1.25
+ */
+ public function setIndicators( array $indicators ) {
+ $this->mIndicators = $indicators + $this->mIndicators;
+ // Keep ordered by key
+ ksort( $this->mIndicators );
+ }
+
+ /**
+ * Get the indicators associated with this page.
+ *
+ * The array will be internally ordered by item keys.
+ *
+ * @return array Keys: identifiers, values: HTML contents
+ * @since 1.25
+ */
+ public function getIndicators() {
+ return $this->mIndicators;
+ }
+
+ /**
+ * Adds help link with an icon via page indicators.
+ * Link target can be overridden by a local message containing a wikilink:
+ * the message key is: lowercase action or special page name + '-helppage'.
+ * @param string $to Target MediaWiki.org page title or encoded URL.
+ * @param bool $overrideBaseUrl Whether $url is a full URL, to avoid MW.o.
+ * @since 1.25
+ */
+ public function addHelpLink( $to, $overrideBaseUrl = false ) {
+ $this->addModuleStyles( 'mediawiki.helplink' );
+ $text = $this->msg( 'helppage-top-gethelp' )->escaped();
+
+ if ( $overrideBaseUrl ) {
+ $helpUrl = $to;
+ } else {
+ $toUrlencoded = wfUrlencode( str_replace( ' ', '_', $to ) );
+ $helpUrl = "//www.mediawiki.org/wiki/Special:MyLanguage/$toUrlencoded";
+ }
+
+ $link = Html::rawElement(
+ 'a',
+ array(
+ 'href' => $helpUrl,
+ 'target' => '_blank',
+ 'class' => 'mw-helplink',
+ ),
+ $text
+ );
+
+ $this->setIndicators( array( 'mw-helplink' => $link ) );
+ }
+
+ /**
* Do not allow scripts which can be modified by wiki users to load on this page;
* only allow scripts bundled with, or generated by, the software.
* Site-wide styles are controlled by a config setting, since they can be
@@ -1585,6 +1654,7 @@ class OutputPage extends ContextSource {
* @param string $text
* @param bool $linestart Is this the start of a line?
* @param bool $interface Is this text in the user interface language?
+ * @throws MWException
*/
public function addWikiText( $text, $linestart = true, $interface = true ) {
$title = $this->getTitle(); // Work around E_STRICT
@@ -1642,8 +1712,6 @@ class OutputPage extends ContextSource {
) {
global $wgParser;
- wfProfileIn( __METHOD__ );
-
$popts = $this->parserOptions();
$oldTidy = $popts->setTidy( $tidy );
$popts->setInterfaceMessage( (bool)$interface );
@@ -1657,7 +1725,6 @@ class OutputPage extends ContextSource {
$this->addParserOutput( $parserOutput );
- wfProfileOut( __METHOD__ );
}
/**
@@ -1681,6 +1748,7 @@ class OutputPage extends ContextSource {
public function addParserOutputMetadata( $parserOutput ) {
$this->mLanguageLinks += $parserOutput->getLanguageLinks();
$this->addCategoryLinks( $parserOutput->getCategories() );
+ $this->setIndicators( $parserOutput->getIndicators() );
$this->mNewSectionLink = $parserOutput->getNewSection();
$this->mHideNewSectionLink = $parserOutput->getHideNewSection();
@@ -1723,8 +1791,8 @@ class OutputPage extends ContextSource {
// Link flags are ignored for now, but may in the future be
// used to mark individual language links.
$linkFlags = array();
- wfRunHooks( 'LanguageLinks', array( $this->getTitle(), &$this->mLanguageLinks, &$linkFlags ) );
- wfRunHooks( 'OutputPageParserOutput', array( &$this, $parserOutput ) );
+ Hooks::run( 'LanguageLinks', array( $this->getTitle(), &$this->mLanguageLinks, &$linkFlags ) );
+ Hooks::run( 'OutputPageParserOutput', array( &$this, $parserOutput ) );
}
/**
@@ -1753,7 +1821,7 @@ class OutputPage extends ContextSource {
*/
public function addParserOutputText( $parserOutput ) {
$text = $parserOutput->getText();
- wfRunHooks( 'OutputPageBeforeHTML', array( &$this, &$text ) );
+ Hooks::run( 'OutputPageBeforeHTML', array( &$this, &$text ) );
$this->addHTML( $text );
}
@@ -1878,7 +1946,7 @@ class OutputPage extends ContextSource {
),
$config->get( 'CacheVaryCookies' )
);
- wfRunHooks( 'GetCacheVaryCookies', array( $this, &$cookies ) );
+ Hooks::run( 'GetCacheVaryCookies', array( $this, &$cookies ) );
}
return $cookies;
}
@@ -2125,14 +2193,10 @@ class OutputPage extends ContextSource {
* the object, let's actually output it:
*/
public function output() {
- global $wgLanguageCode;
-
if ( $this->mDoNothing ) {
return;
}
- wfProfileIn( __METHOD__ );
-
$response = $this->getRequest()->response();
$config = $this->getConfig();
@@ -2143,7 +2207,7 @@ class OutputPage extends ContextSource {
$redirect = $this->mRedirect;
$code = $this->mRedirectCode;
- if ( wfRunHooks( "BeforePageRedirect", array( $this, &$redirect, &$code ) ) ) {
+ if ( Hooks::run( "BeforePageRedirect", array( $this, &$redirect, &$code ) ) ) {
if ( $code == '301' || $code == '303' ) {
if ( !$config->get( 'DebugRedirects' ) ) {
$message = HttpStatus::getMessage( $code );
@@ -2167,7 +2231,6 @@ class OutputPage extends ContextSource {
}
}
- wfProfileOut( __METHOD__ );
return;
} elseif ( $this->mStatusCode ) {
$message = HttpStatus::getMessage( $this->mStatusCode );
@@ -2180,7 +2243,7 @@ class OutputPage extends ContextSource {
ob_start();
$response->header( 'Content-type: ' . $config->get( 'MimeType' ) . '; charset=UTF-8' );
- $response->header( 'Content-language: ' . $wgLanguageCode );
+ $response->header( 'Content-language: ' . $config->get( 'LanguageCode' ) );
// Avoid Internet Explorer "compatibility view" in IE 8-10, so that
// jQuery etc. can work correctly.
@@ -2220,21 +2283,18 @@ class OutputPage extends ContextSource {
// Hook that allows last minute changes to the output page, e.g.
// adding of CSS or Javascript by extensions.
- wfRunHooks( 'BeforePageDisplay', array( &$this, &$sk ) );
+ Hooks::run( 'BeforePageDisplay', array( &$this, &$sk ) );
- wfProfileIn( 'Output-skin' );
$sk->outputPage();
- wfProfileOut( 'Output-skin' );
}
// This hook allows last minute changes to final overall output by modifying output buffer
- wfRunHooks( 'AfterFinalPageOutput', array( $this ) );
+ Hooks::run( 'AfterFinalPageOutput', array( $this ) );
$this->sendCacheControl();
ob_end_flush();
- wfProfileOut( __METHOD__ );
}
/**
@@ -2454,90 +2514,32 @@ class OutputPage extends ContextSource {
}
/**
- * Display a page stating that the Wiki is in read-only mode,
- * and optionally show the source of the page that the user
- * was trying to edit. Should only be called (for this
- * purpose) after wfReadOnly() has returned true.
+ * Display a page stating that the Wiki is in read-only mode.
+ * Should only be called after wfReadOnly() has returned true.
*
- * For historical reasons, this function is _also_ used to
- * show the error message when a user tries to edit a page
- * they are not allowed to edit. (Unless it's because they're
- * blocked, then we show blockedPage() instead.) In this
- * case, the second parameter should be set to true and a list
- * of reasons supplied as the third parameter.
+ * Historically, this function was used to show the source of the page that the user
+ * was trying to edit and _also_ permissions error messages. The relevant code was
+ * moved into EditPage in 1.19 (r102024 / d83c2a431c2a) and removed here in 1.25.
*
- * @todo Needs to be split into multiple functions.
- *
- * @param string $source Source code to show (or null).
- * @param bool $protected Is this a permissions error?
- * @param array $reasons List of reasons for this error, as returned by
- * Title::getUserPermissionsErrors().
- * @param string $action Action that was denied or null if unknown
+ * @deprecated since 1.25; throw the exception directly
* @throws ReadOnlyError
*/
- public function readOnlyPage( $source = null, $protected = false,
- array $reasons = array(), $action = null
- ) {
- $this->setRobotPolicy( 'noindex,nofollow' );
- $this->setArticleRelated( false );
-
- // If no reason is given, just supply a default "I can't let you do
- // that, Dave" message. Should only occur if called by legacy code.
- if ( $protected && empty( $reasons ) ) {
- $reasons[] = array( 'badaccess-group0' );
- }
-
- if ( !empty( $reasons ) ) {
- // Permissions error
- if ( $source ) {
- $this->setPageTitle( $this->msg( 'viewsource-title', $this->getTitle()->getPrefixedText() ) );
- $this->addBacklinkSubtitle( $this->getTitle() );
- } else {
- $this->setPageTitle( $this->msg( 'badaccess' ) );
- }
- $this->addWikiText( $this->formatPermissionsErrorMessage( $reasons, $action ) );
- } else {
- // Wiki is read only
- throw new ReadOnlyError;
- }
-
- // Show source, if supplied
- if ( is_string( $source ) ) {
- $this->addWikiMsg( 'viewsourcetext' );
-
- $pageLang = $this->getTitle()->getPageLanguage();
- $params = array(
- 'id' => 'wpTextbox1',
- 'name' => 'wpTextbox1',
- 'cols' => $this->getUser()->getOption( 'cols' ),
- 'rows' => $this->getUser()->getOption( 'rows' ),
- 'readonly' => 'readonly',
- 'lang' => $pageLang->getHtmlCode(),
- 'dir' => $pageLang->getDir(),
- );
- $this->addHTML( Html::element( 'textarea', $params, $source ) );
-
- // Show templates used by this article
- $templates = Linker::formatTemplates( $this->getTitle()->getTemplateLinksFrom() );
- $this->addHTML( "<div class='templatesUsed'>
-$templates
-</div>
-" );
+ public function readOnlyPage() {
+ if ( func_num_args() > 0 ) {
+ throw new MWException( __METHOD__ . ' no longer accepts arguments since 1.25.' );
}
- # If the title doesn't exist, it's fairly pointless to print a return
- # link to it. After all, you just tried editing it and couldn't, so
- # what's there to do there?
- if ( $this->getTitle()->exists() ) {
- $this->returnToMain( null, $this->getTitle() );
- }
+ throw new ReadOnlyError;
}
/**
* Turn off regular page output and return an error response
* for when rate limiting has triggered.
+ *
+ * @deprecated since 1.25; throw the exception directly
*/
public function rateLimited() {
+ wfDeprecated( __METHOD__, '1.25' );
throw new ThrottledError;
}
@@ -2713,7 +2715,7 @@ $templates
// Allow skins and extensions to add body attributes they need
$sk->addToBodyAttributes( $this, $bodyAttrs );
- wfRunHooks( 'OutputPageBodyAttributes', array( $this, $sk, &$bodyAttrs ) );
+ Hooks::run( 'OutputPageBodyAttributes', array( $this, $sk, &$bodyAttrs ) );
$ret .= Html::openElement( 'body', $bodyAttrs ) . "\n";
@@ -2824,7 +2826,6 @@ $templates
);
$context = new ResourceLoaderContext( $resourceLoader, new FauxRequest( $query ) );
-
// Extract modules that know they're empty and see if we have one or more
// raw modules
$isRaw = false;
@@ -2905,11 +2906,11 @@ $templates
);
} else {
$link = Html::linkedScript( $url );
- if ( $context->getOnly() === 'scripts' && !$context->getRaw() && !$isRaw ) {
- // Wrap only=script requests in a conditional as browsers not supported
- // by the startup module would unconditionally execute this module.
- // Otherwise users will get "ReferenceError: mw is undefined" or
- // "jQuery is undefined" from e.g. a "site" module.
+ if ( !$context->getRaw() && !$isRaw ) {
+ // Wrap only=script / only=combined requests in a conditional as
+ // browsers not supported by the startup module would unconditionally
+ // execute this module. Otherwise users will get "ReferenceError: mw is
+ // undefined" or "jQuery is undefined" from e.g. a "site" module.
$link = Html::inlineScript(
ResourceLoader::makeLoaderConditionalScript(
Xml::encodeJsCall( 'document.write', array( $link ) )
@@ -3108,7 +3109,7 @@ $templates
// This also enforces $.isReady to be true at </body> which fixes the
// mw.loader bug in Firefox with using document.write between </body>
// and the DOMContentReady event (bug 47457).
- $html = Html::inlineScript( 'window.jQuery && jQuery.ready();' );
+ $html = Html::inlineScript( 'if(window.jQuery)jQuery.ready();' );
if ( !$this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) {
$html .= $this->getScriptsForBottomQueue( false );
@@ -3223,6 +3224,7 @@ $templates
'wgMonthNames' => $lang->getMonthNamesArray(),
'wgMonthNamesShort' => $lang->getMonthAbbreviationsArray(),
'wgRelevantPageName' => $relevantTitle->getPrefixedDBkey(),
+ 'wgRelevantArticleId' => $relevantTitle->getArticleId(),
);
if ( $user->isLoggedIn() ) {
@@ -3263,7 +3265,7 @@ $templates
// Use the 'ResourceLoaderGetConfigVars' hook if the variable is not
// page-dependant but site-wide (without state).
// Alternatively, you may want to use OutputPage->addJsConfigVars() instead.
- wfRunHooks( 'MakeGlobalVariablesScript', array( &$vars, $this ) );
+ Hooks::run( 'MakeGlobalVariablesScript', array( &$vars, $this ) );
// Merge in variables from addJsConfigVars last
return array_merge( $vars, $this->getJsConfigVars() );
@@ -3313,6 +3315,13 @@ $templates
'content' => "MediaWiki $wgVersion",
) );
+ if ( $config->get( 'ReferrerPolicy' ) !== false ) {
+ $tags['meta-referrer'] = Html::element( 'meta', array(
+ 'name' => 'referrer',
+ 'content' => $config->get( 'ReferrerPolicy' )
+ ) );
+ }
+
$p = "{$this->mIndexPolicy},{$this->mFollowPolicy}";
if ( $p !== 'index,follow' ) {
// http://www.robotstxt.org/wc/meta-user.html
@@ -3615,7 +3624,9 @@ $templates
$moduleStyles[] = 'user.groups';
// Per-user custom styles
- if ( $this->getConfig()->get( 'AllowUserCss' ) && $this->getTitle()->isCssSubpage() && $this->userCanPreview() ) {
+ if ( $this->getConfig()->get( 'AllowUserCss' ) && $this->getTitle()->isCssSubpage()
+ && $this->userCanPreview()
+ ) {
// We're on a preview of a CSS subpage
// Exclude this page from the user module in case it's in there (bug 26283)
$link = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_STYLES, false,
@@ -3813,12 +3824,13 @@ $templates
* This function takes a number of message/argument specifications, wraps them in
* some overall structure, and then parses the result and adds it to the output.
*
- * In the $wrap, $1 is replaced with the first message, $2 with the second, and so
- * on. The subsequent arguments may either be strings, in which case they are the
- * message names, or arrays, in which case the first element is the message name,
- * and subsequent elements are the parameters to that message.
+ * In the $wrap, $1 is replaced with the first message, $2 with the second,
+ * and so on. The subsequent arguments may be either
+ * 1) strings, in which case they are message names, or
+ * 2) arrays, in which case, within each array, the first element is the message
+ * name, and subsequent elements are the parameters to that message.
*
- * Don't use this for messages that are not in users interface language.
+ * Don't use this for messages that are not in the user's interface language.
*
* For example:
*
@@ -3829,7 +3841,7 @@ $templates
* $wgOut->addWikiText( "<div class='error'>\n"
* . wfMessage( 'some-error' )->plain() . "\n</div>" );
*
- * The newline after opening div is needed in some wikitext. See bug 19226.
+ * The newline after the opening div is needed in some wikitext. See bug 19226.
*
* @param string $wrap
*/
@@ -3904,4 +3916,16 @@ $templates
public function sectionEditLinksEnabled() {
return $this->mEnableSectionEditLinks;
}
+
+ /**
+ * Add ResourceLoader module styles for OOUI and set up the PHP implementation of it for use with
+ * MediaWiki and this OutputPage instance.
+ *
+ * @since 1.25
+ */
+ public function enableOOUI() {
+ OOUI\Theme::setSingleton( new OOUI\MediaWikiTheme() );
+ OOUI\Element::setDefaultDir( $this->getLanguage()->getDir() );
+ $this->addModuleStyles( 'oojs-ui.styles' );
+ }
}
diff --git a/includes/PHPVersionCheck.php b/includes/PHPVersionCheck.php
new file mode 100644
index 00000000..eee9aa9c
--- /dev/null
+++ b/includes/PHPVersionCheck.php
@@ -0,0 +1,157 @@
+<?php
+/**
+ * Check PHP Version, as well as for composer dependencies in entry points,
+ * and display something vaguely comprehensible in the event of a totally
+ * unrecoverable error.
+ *
+ * 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
+ */
+
+/**
+ * Check php version and that external dependencies are installed, and
+ * display an informative error if either condition is not satisfied.
+ */
+function wfEntryPointCheck( $entryPoint ) {
+ if ( !function_exists( 'version_compare' )
+ || version_compare( PHP_VERSION, '5.3.3' ) < 0
+ || !file_exists( dirname( __FILE__ ) . '/../vendor/autoload.php' )
+ ) {
+ wfPHPVersionError( $entryPoint );
+ }
+}
+
+/**
+ * Display something vaguely comprehensible in the event of a totally unrecoverable error.
+ * Does not assume access to *anything*; no globals, no autoloader, no database, no localisation.
+ * Safe for PHP4 (and putting this here means that WebStart.php and GlobalSettings.php
+ * no longer need to be).
+ *
+ * Calling this function kills execution immediately.
+ *
+ * @param string $type Which entry point we are protecting. One of:
+ * - index.php
+ * - load.php
+ * - api.php
+ * - mw-config/index.php
+ * - cli
+ *
+ * @note Since we can't rely on anything, the minimum PHP versions and MW current
+ * version are hardcoded here
+ */
+function wfPHPVersionError( $type ) {
+ $mwVersion = '1.25';
+ $minimumVersionPHP = '5.3.3';
+
+ $phpVersion = PHP_VERSION;
+ $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
+ $message = "MediaWiki $mwVersion requires at least "
+ . "PHP version $minimumVersionPHP, you are using PHP $phpVersion. Installing some "
+ . " external dependencies (e.g. via composer) is also required.";
+
+ if ( $type == 'cli' ) {
+ $finalOutput = "Error: You are missing some external dependencies or are using on older PHP version. \n"
+ . "MediaWiki $mwVersion needs PHP $minimumVersionPHP or higher.\n\n"
+ . "Check if you have a newer php executable with a different name, such as php5.\n\n"
+ . "MediaWiki now also has some external dependencies that need to be installed\n"
+ . "via composer or from a separate git repo. Please see\n"
+ . "https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries\n"
+ . "for help on installing the required components.";
+ } elseif ( $type == 'index.php' || $type == 'mw-config/index.php' ) {
+ $pathinfo = pathinfo( $_SERVER['SCRIPT_NAME'] );
+ if ( $type == 'mw-config/index.php' ) {
+ $dirname = dirname( $pathinfo['dirname'] );
+ } else {
+ $dirname = $pathinfo['dirname'];
+ }
+ $encLogo = htmlspecialchars(
+ str_replace( '//', '/', $dirname . '/' ) .
+ 'resources/assets/mediawiki.png'
+ );
+
+ header( "$protocol 500 MediaWiki configuration Error" );
+ header( 'Content-type: text/html; charset=UTF-8' );
+ // Don't cache error pages! They cause no end of trouble...
+ header( 'Cache-control: none' );
+ header( 'Pragma: no-cache' );
+
+ $finalOutput = <<<HTML
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+ <head>
+ <meta charset="UTF-8" />
+ <title>MediaWiki {$mwVersion}</title>
+ <style media='screen'>
+ body {
+ color: #000;
+ background-color: #fff;
+ font-family: sans-serif;
+ padding: 2em;
+ text-align: center;
+ }
+ p, img, h1, h2 {
+ text-align: left;
+ margin: 0.5em 0 1em;
+ }
+ h1 {
+ font-size: 120%;
+ }
+ h2 {
+ font-size: 110%;
+ }
+ </style>
+ </head>
+ <body>
+ <img src="{$encLogo}" alt='The MediaWiki logo' />
+ <h1>MediaWiki {$mwVersion} internal error</h1>
+ <div class='error'>
+ <p>
+ {$message}
+ </p>
+ <h2>Supported PHP versions</h2>
+ <p>
+ Please consider <a href="http://www.php.net/downloads.php">upgrading your copy of PHP</a>.
+ PHP versions less than 5.3.0 are no longer supported by the PHP Group and will not receive
+ security or bugfix updates.
+ </p>
+ <p>
+ If for some reason you are unable to upgrade your PHP version, you will need to
+ <a href="https://www.mediawiki.org/wiki/Download">download</a> an older version
+ of MediaWiki from our website. See our
+ <a href="https://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
+ for details of which versions are compatible with prior versions of PHP.
+ </p>
+ <h2>External dependencies</h2>
+ <p>
+ MediaWiki now also has some external dependencies that need to be installed via
+ composer or from a separate git repo. Please see
+ <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a>
+ for help on installing the required components.
+ </p>
+ </div>
+ </body>
+</html>
+HTML;
+ // Handle everything that's not index.php
+ } else {
+ // So nothing thinks this is JS or CSS
+ $finalOutput = ( $type == 'load.php' ) ? "/* $message */" : $message;
+ header( "$protocol 500 MediaWiki configuration Error" );
+ }
+ echo "$finalOutput\n";
+ die( 1 );
+}
diff --git a/includes/PHPVersionError.php b/includes/PHPVersionError.php
index f481650c..007ea894 100644
--- a/includes/PHPVersionError.php
+++ b/includes/PHPVersionError.php
@@ -1,6 +1,7 @@
<?php
/**
- * Display something vaguely comprehensible in the event of a totally unrecoverable error.
+ * Backwards compatibility. The PHP version error function is now
+ * included in PHPVersionCheck.php.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,110 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
+ * @deprecated 1.25
* @file
*/
-
-/**
- * Display something vaguely comprehensible in the event of a totally unrecoverable error.
- * Does not assume access to *anything*; no globals, no autoloader, no database, no localisation.
- * Safe for PHP4 (and putting this here means that WebStart.php and GlobalSettings.php
- * no longer need to be).
- *
- * Calling this function kills execution immediately.
- *
- * @param string $type Which entry point we are protecting. One of:
- * - index.php
- * - load.php
- * - api.php
- * - mw-config/index.php
- * - cli
- *
- * @note Since we can't rely on anything, the minimum PHP versions and MW current
- * version are hardcoded here
- */
-function wfPHPVersionError( $type ) {
- $mwVersion = '1.24';
- $minimumVersionPHP = '5.3.2';
-
- $phpVersion = PHP_VERSION;
- $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
- $message = "MediaWiki $mwVersion requires at least "
- . "PHP version $minimumVersionPHP, you are using PHP $phpVersion.";
-
- if ( $type == 'cli' ) {
- $finalOutput = "You are using PHP version $phpVersion "
- . "but MediaWiki $mwVersion needs PHP $minimumVersionPHP or higher. ABORTING.\n"
- . "Check if you have a newer php executable with a different name, such as php5.\n";
- } elseif ( $type == 'index.php' || $type == 'mw-config/index.php' ) {
- $pathinfo = pathinfo( $_SERVER['SCRIPT_NAME'] );
- if ( $type == 'mw-config/index.php' ) {
- $dirname = dirname( $pathinfo['dirname'] );
- } else {
- $dirname = $pathinfo['dirname'];
- }
- $encLogo = htmlspecialchars(
- str_replace( '//', '/', $dirname . '/' ) .
- 'resources/assets/mediawiki.png'
- );
-
- header( "$protocol 500 MediaWiki configuration Error" );
- header( 'Content-type: text/html; charset=UTF-8' );
- // Don't cache error pages! They cause no end of trouble...
- header( 'Cache-control: none' );
- header( 'Pragma: no-cache' );
-
- $finalOutput = <<<HTML
-<!DOCTYPE html>
-<html lang="en" dir="ltr">
- <head>
- <meta charset="UTF-8" />
- <title>MediaWiki {$mwVersion}</title>
- <style media='screen'>
- body {
- color: #000;
- background-color: #fff;
- font-family: sans-serif;
- padding: 2em;
- text-align: center;
- }
- p, img, h1 {
- text-align: left;
- margin: 0.5em 0;
- }
- h1 {
- font-size: 120%;
- }
- </style>
- </head>
- <body>
- <img src="{$encLogo}" alt='The MediaWiki logo' />
- <h1>MediaWiki {$mwVersion} internal error</h1>
- <div class='error'>
- <p>
- {$message}
- </p>
- <p>
- Please consider <a href="http://www.php.net/downloads.php">upgrading your copy of PHP</a>.
- PHP versions less than 5.3.0 are no longer supported by the PHP Group and will not receive
- security or bugfix updates.
- </p>
- <p>
- If for some reason you are unable to upgrade your PHP version, you will need to
- <a href="https://www.mediawiki.org/wiki/Download">download</a> an older version
- of MediaWiki from our website. See our
- <a href="https://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
- for details of which versions are compatible with prior versions of PHP.
- </p>
- </div>
- </body>
-</html>
-HTML;
- // Handle everything that's not index.php
- } else {
- // So nothing thinks this is JS or CSS
- $finalOutput = ( $type == 'load.php' ) ? "/* $message */" : $message;
- header( "$protocol 500 MediaWiki configuration Error" );
- }
- echo "$finalOutput\n";
- die( 1 );
-}
+require_once dirname( __FILE__ ) . '/PHPVersionCheck.php';
diff --git a/includes/Preferences.php b/includes/Preferences.php
index 84cf5af0..a5239331 100644
--- a/includes/Preferences.php
+++ b/includes/Preferences.php
@@ -96,7 +96,7 @@ class Preferences {
self::searchPreferences( $user, $context, $defaultPreferences );
self::miscPreferences( $user, $context, $defaultPreferences );
- wfRunHooks( 'GetPreferences', array( $user, &$defaultPreferences ) );
+ Hooks::run( 'GetPreferences', array( $user, &$defaultPreferences ) );
self::loadPreferenceValues( $user, $context, $defaultPreferences );
self::$defaultPreferences = $defaultPreferences;
@@ -130,8 +130,7 @@ class Preferences {
if ( $disable && !in_array( $name, self::$saveBlacklist ) ) {
$info['disabled'] = 'disabled';
}
- $field = HTMLForm::loadInputFromParameters( $name, $info ); // For validation
- $field->mParent = $dummyForm;
+ $field = HTMLForm::loadInputFromParameters( $name, $info, $dummyForm ); // For validation
$defaultOptions = User::getDefaultOptions();
$globalDefault = isset( $defaultOptions[$name] )
? $defaultOptions[$name]
@@ -244,10 +243,9 @@ class Preferences {
'type' => 'info',
'label' => $context->msg( 'prefs-memberingroups' )->numParams(
count( $userGroups ) )->params( $userName )->parse(),
- 'default' => $context->msg( 'prefs-memberingroups-type',
- $lang->commaList( $userGroups ),
- $lang->commaList( $userMembers )
- )->plain(),
+ 'default' => $context->msg( 'prefs-memberingroups-type' )
+ ->rawParams( $lang->commaList( $userGroups ), $lang->commaList( $userMembers ) )
+ ->escaped(),
'raw' => true,
'section' => 'personal/info',
);
@@ -339,11 +337,11 @@ class Preferences {
'type' => 'radio',
'section' => 'personal/i18n',
'options' => array(
- $context->msg( 'parentheses',
- $context->msg( 'gender-unknown' )->text()
- )->text() => 'unknown',
- $context->msg( 'gender-female' )->text() => 'female',
- $context->msg( 'gender-male' )->text() => 'male',
+ $context->msg( 'parentheses' )
+ ->params( $context->msg( 'gender-unknown' )->plain() )
+ ->escaped() => 'unknown',
+ $context->msg( 'gender-female' )->escaped() => 'female',
+ $context->msg( 'gender-male' )->escaped() => 'male',
),
'label-message' => 'yourgender',
'help-message' => 'prefs-help-gender',
@@ -451,8 +449,8 @@ class Preferences {
array( 'returnto' => SpecialPage::getTitleFor( 'Preferences' )->getPrefixedText() ) );
$emailAddress .= $emailAddress == '' ? $link : (
- $context->msg( 'word-separator' )->plain()
- . $context->msg( 'parentheses' )->rawParams( $link )->plain()
+ $context->msg( 'word-separator' )->escaped()
+ . $context->msg( 'parentheses' )->rawParams( $link )->escaped()
);
}
@@ -870,7 +868,7 @@ class Preferences {
'min' => 1,
'max' => ceil( $rcMaxAge / ( 3600 * 24 ) ),
'help' => $context->msg( 'recentchangesdays-max' )->numParams(
- ceil( $rcMaxAge / ( 3600 * 24 ) ) )->text()
+ ceil( $rcMaxAge / ( 3600 * 24 ) ) )->escaped()
);
$defaultPreferences['rclimit'] = array(
'type' => 'int',
@@ -895,6 +893,9 @@ class Preferences {
'section' => 'rc/advancedrc',
'label-message' => 'tog-hidepatrolled',
);
+ }
+
+ if ( $user->useNPPatrol() ) {
$defaultPreferences['newpageshidepatrolled'] = array(
'type' => 'toggle',
'section' => 'rc/advancedrc',
@@ -921,13 +922,37 @@ class Preferences {
$watchlistdaysMax = ceil( $config->get( 'RCMaxAge' ) / ( 3600 * 24 ) );
## Watchlist #####################################
+ if ( $user->isAllowed( 'editmywatchlist' ) ) {
+ $editWatchlistLinks = array();
+ $editWatchlistModes = array(
+ 'edit' => array( 'EditWatchlist', false ),
+ 'raw' => array( 'EditWatchlist', 'raw' ),
+ 'clear' => array( 'EditWatchlist', 'clear' ),
+ );
+ foreach ( $editWatchlistModes as $editWatchlistMode => $mode ) {
+ // Messages: prefs-editwatchlist-edit, prefs-editwatchlist-raw, prefs-editwatchlist-clear
+ $editWatchlistLinks[] = Linker::linkKnown(
+ SpecialPage::getTitleFor( $mode[0], $mode[1] ),
+ $context->msg( "prefs-editwatchlist-{$editWatchlistMode}" )->parse()
+ );
+ }
+
+ $defaultPreferences['editwatchlist'] = array(
+ 'type' => 'info',
+ 'raw' => true,
+ 'default' => $context->getLanguage()->pipeList( $editWatchlistLinks ),
+ 'label-message' => 'prefs-editwatchlist-label',
+ 'section' => 'watchlist/editwatchlist',
+ );
+ }
+
$defaultPreferences['watchlistdays'] = array(
'type' => 'float',
'min' => 0,
'max' => $watchlistdaysMax,
'section' => 'watchlist/displaywatchlist',
'help' => $context->msg( 'prefs-watchlist-days-max' )->numParams(
- $watchlistdaysMax )->text(),
+ $watchlistdaysMax )->escaped(),
'label-message' => 'prefs-watchlist-days',
);
$defaultPreferences['wllimit'] = array(
@@ -969,7 +994,7 @@ class Preferences {
'label-message' => 'tog-watchlisthideliu',
);
- if ( $context->getConfig()->get( 'UseRCPatrol' ) ) {
+ if ( $user->useRCPatrol() ) {
$defaultPreferences['watchlisthidepatrolled'] = array(
'type' => 'toggle',
'section' => 'watchlist/advancedwatchlist',
@@ -1047,7 +1072,7 @@ class Preferences {
$ret = array();
$mptitle = Title::newMainPage();
- $previewtext = $context->msg( 'skin-preview' )->text();
+ $previewtext = $context->msg( 'skin-preview' )->escaped();
# Only show skins that aren't disabled in $wgSkipSkins
$validSkinNames = Skin::getAllowedSkins();
@@ -1072,7 +1097,7 @@ class Preferences {
$linkTools = array();
# Mark the default skin
- if ( $skinkey == $defaultSkin ) {
+ if ( strcasecmp( $skinkey, $defaultSkin ) === 0 ) {
$linkTools[] = $context->msg( 'default' )->escaped();
$foundDefault = true;
}
@@ -1092,10 +1117,9 @@ class Preferences {
$linkTools[] = Linker::link( $jsPage, $context->msg( 'prefs-custom-js' )->escaped() );
}
- $display = $sn . ' ' . $context->msg(
- 'parentheses',
- $context->getLanguage()->pipeList( $linkTools )
- )->text();
+ $display = $sn . ' ' . $context->msg( 'parentheses' )
+ ->rawParams( $context->getLanguage()->pipeList( $linkTools ) )
+ ->escaped();
$ret[$display] = $skinkey;
}
@@ -1433,7 +1457,7 @@ class Preferences {
$user->setOption( $key, $value );
}
- wfRunHooks( 'PreferencesFormPreSave', array( $formData, $form, $user, &$result ) );
+ Hooks::run( 'PreferencesFormPreSave', array( $formData, $form, $user, &$result ) );
$user->saveSettings();
}
@@ -1466,28 +1490,6 @@ class Preferences {
return Status::newGood();
}
-
- /**
- * Try to set a user's email address.
- * This does *not* try to validate the address.
- * Caller is responsible for checking $wgAuth and 'editmyprivateinfo'
- * right.
- *
- * @deprecated since 1.20; use User::setEmailWithConfirmation() instead.
- * @param User $user
- * @param string $newaddr New email address
- * @return array (true on success or Status on failure, info string)
- */
- public static function trySetUserEmail( User $user, $newaddr ) {
- wfDeprecated( __METHOD__, '1.20' );
-
- $result = $user->setEmailWithConfirmation( $newaddr );
- if ( $result->isGood() ) {
- return array( true, $result->value );
- } else {
- return array( $result, 'mailerror' );
- }
- }
}
/** Some tweaks to allow js prefs to work */
@@ -1539,12 +1541,8 @@ class PreferencesForm extends HTMLForm {
* @return string
*/
function getButtons() {
- global $wgUseMediaWikiUIEverywhere;
$attrs = array( 'id' => 'mw-prefs-restoreprefs' );
- if ( $wgUseMediaWikiUIEverywhere ) {
- $attrs['class'] = 'mw-ui-button mw-ui-quiet';
- }
if ( !$this->getModifiedUser()->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) {
return '';
@@ -1556,7 +1554,7 @@ class PreferencesForm extends HTMLForm {
$t = SpecialPage::getTitleFor( 'Preferences', 'reset' );
$html .= "\n" . Linker::link( $t, $this->msg( 'restoreprefs' )->escaped(),
- $attrs );
+ Html::buttonAttributes( $attrs, array( 'mw-ui-quiet' ) ) );
$html = Xml::tags( 'div', array( 'class' => 'mw-prefs-buttons' ), $html );
}
@@ -1601,7 +1599,7 @@ class PreferencesForm extends HTMLForm {
*/
function getLegend( $key ) {
$legend = parent::getLegend( $key );
- wfRunHooks( 'PreferencesGetLegend', array( $this, $key, &$legend ) );
+ Hooks::run( 'PreferencesGetLegend', array( $this, $key, &$legend ) );
return $legend;
}
}
diff --git a/includes/PrefixSearch.php b/includes/PrefixSearch.php
index 718750f5..55a4f49b 100644
--- a/includes/PrefixSearch.php
+++ b/includes/PrefixSearch.php
@@ -34,11 +34,12 @@ abstract class PrefixSearch {
* @param string $search
* @param int $limit
* @param array $namespaces Used if query is not explicitly prefixed
+ * @param int $offset How many results to offset from the beginning
* @return array Array of strings
*/
- public static function titleSearch( $search, $limit, $namespaces = array() ) {
+ public static function titleSearch( $search, $limit, $namespaces = array(), $offset = 0 ) {
$prefixSearch = new StringPrefixSearch;
- return $prefixSearch->search( $search, $limit, $namespaces );
+ return $prefixSearch->search( $search, $limit, $namespaces, $offset );
}
/**
@@ -47,9 +48,10 @@ abstract class PrefixSearch {
* @param string $search
* @param int $limit
* @param array $namespaces Used if query is not explicitly prefixed
+ * @param int $offset How many results to offset from the beginning
* @return array Array of strings or Title objects
*/
- public function search( $search, $limit, $namespaces = array() ) {
+ public function search( $search, $limit, $namespaces = array(), $offset = 0 ) {
$search = trim( $search );
if ( $search == '' ) {
return array(); // Return empty result
@@ -60,11 +62,12 @@ abstract class PrefixSearch {
$title = Title::newFromText( $search );
if ( $title && !$title->isExternal() ) {
$ns = array( $title->getNamespace() );
+ $search = $title->getText();
if ( $ns[0] == NS_MAIN ) {
$ns = $namespaces; // no explicit prefix, use default namespaces
+ Hooks::run( 'PrefixSearchExtractNamespace', array( &$ns, &$search ) );
}
- return $this->searchBackend(
- $ns, $title->getText(), $limit );
+ return $this->searchBackend( $ns, $search, $limit, $offset );
}
// Is this a namespace prefix?
@@ -75,9 +78,11 @@ abstract class PrefixSearch {
{
$namespaces = array( $title->getNamespace() );
$search = '';
+ } else {
+ Hooks::run( 'PrefixSearchExtractNamespace', array( &$namespaces, &$search ) );
}
- return $this->searchBackend( $namespaces, $search, $limit );
+ return $this->searchBackend( $namespaces, $search, $limit, $offset );
}
/**
@@ -85,12 +90,12 @@ abstract class PrefixSearch {
* @param string $search
* @param int $limit
* @param array $namespaces
+ * @param int $offset How many results to offset from the beginning
*
* @return array
*/
- public function searchWithVariants( $search, $limit, array $namespaces ) {
- wfProfileIn( __METHOD__ );
- $searches = $this->search( $search, $limit, $namespaces );
+ public function searchWithVariants( $search, $limit, array $namespaces, $offset = 0 ) {
+ $searches = $this->search( $search, $limit, $namespaces, $offset );
// if the content language has variants, try to retrieve fallback results
$fallbackLimit = $limit - count( $searches );
@@ -110,7 +115,6 @@ abstract class PrefixSearch {
}
}
}
- wfProfileOut( __METHOD__ );
return $searches;
}
@@ -138,22 +142,128 @@ abstract class PrefixSearch {
* @param array $namespaces
* @param string $search
* @param int $limit
+ * @param int $offset How many results to offset from the beginning
* @return array Array of strings
*/
- protected function searchBackend( $namespaces, $search, $limit ) {
+ protected function searchBackend( $namespaces, $search, $limit, $offset ) {
if ( count( $namespaces ) == 1 ) {
$ns = $namespaces[0];
if ( $ns == NS_MEDIA ) {
$namespaces = array( NS_FILE );
} elseif ( $ns == NS_SPECIAL ) {
- return $this->titles( $this->specialSearch( $search, $limit ) );
+ return $this->titles( $this->specialSearch( $search, $limit, $offset ) );
}
}
$srchres = array();
- if ( wfRunHooks( 'PrefixSearchBackend', array( $namespaces, $search, $limit, &$srchres ) ) ) {
- return $this->titles( $this->defaultSearchBackend( $namespaces, $search, $limit ) );
+ if ( Hooks::run(
+ 'PrefixSearchBackend',
+ array( $namespaces, $search, $limit, &$srchres, $offset )
+ ) ) {
+ return $this->titles( $this->defaultSearchBackend( $namespaces, $search, $limit, $offset ) );
}
- return $this->strings( $srchres );
+ return $this->strings( $this->handleResultFromHook( $srchres, $namespaces, $search, $limit ) );
+ }
+
+ /**
+ * Default search backend does proper prefix searching, but custom backends
+ * may sort based on other algorythms that may cause the exact title match
+ * to not be in the results or be lower down the list.
+ * @param array $srchres results from the hook
+ * @return array munged results from the hook
+ */
+ private function handleResultFromHook( $srchres, $namespaces, $search, $limit ) {
+ // Pick namespace (based on PrefixSearch::defaultSearchBackend)
+ $ns = in_array( NS_MAIN, $namespaces ) ? NS_MAIN : $namespaces[0];
+ $t = Title::newFromText( $search, $ns );
+ if ( !$t || !$t->exists() ) {
+ // No exact match so just return the search results
+ return $srchres;
+ }
+ $string = $t->getPrefixedText();
+ $key = array_search( $string, $srchres );
+ if ( $key !== false ) {
+ // Exact match was in the results so just move it to the front
+ return $this->pullFront( $key, $srchres );
+ }
+ // Exact match not in the search results so check for some redirect handling cases
+ if ( $t->isRedirect() ) {
+ $target = $this->getRedirectTarget( $t );
+ $key = array_search( $target, $srchres );
+ if ( $key !== false ) {
+ // Exact match is a redirect to one of the returned matches so pull the
+ // returned match to the front. This might look odd but the alternative
+ // is to put the redirect in front and drop the match. The name of the
+ // found match is often more descriptive/better formed than the name of
+ // the redirect AND by definition they share a prefix. Hopefully this
+ // choice is less confusing and more helpful. But it might not be. But
+ // it is the choice we're going with for now.
+ return $this->pullFront( $key, $srchres );
+ }
+ $redirectTargetsToRedirect = $this->redirectTargetsToRedirect( $srchres );
+ if ( isset( $redirectTargetsToRedirect[$target] ) ) {
+ // The exact match and something in the results list are both redirects
+ // to the same thing! In this case we'll pull the returned match to the
+ // top following the same logic above. Again, it might not be a perfect
+ // choice but it'll do.
+ return $this->pullFront( $redirectTargetsToRedirect[$target], $srchres );
+ }
+ } else {
+ $redirectTargetsToRedirect = $this->redirectTargetsToRedirect( $srchres );
+ if ( isset( $redirectTargetsToRedirect[$string] ) ) {
+ // The exact match is the target of a redirect already in the results list so remove
+ // the redirect from the results list and push the exact match to the front
+ array_splice( $srchres, $redirectTargetsToRedirect[$string], 1 );
+ array_unshift( $srchres, $string );
+ return $srchres;
+ }
+ }
+
+ // Exact match is totally unique from the other results so just add it to the front
+ array_unshift( $srchres, $string );
+ // And roll one off the end if the results are too long
+ if ( count( $srchres ) > $limit ) {
+ array_pop( $srchres );
+ }
+ return $srchres;
+ }
+
+ /**
+ * @param Array(string) $titles as strings
+ * @return Array(string => int) redirect target prefixedText to index of title in titles
+ * that is a redirect to it.
+ */
+ private function redirectTargetsToRedirect( $titles ) {
+ $result = array();
+ foreach ( $titles as $key => $titleText ) {
+ $title = Title::newFromText( $titleText );
+ if ( !$title || !$title->isRedirect() ) {
+ continue;
+ }
+ $target = $this->getRedirectTarget( $title );
+ if ( !$target ) {
+ continue;
+ }
+ $result[$target] = $key;
+ }
+ return $result;
+ }
+
+ /**
+ * @param int $key key to pull to the front
+ * @return array $array with the item at $key pulled to the front
+ */
+ private function pullFront( $key, $array ) {
+ $cut = array_splice( $array, $key, 1 );
+ array_unshift( $array, $cut[0] );
+ return $array;
+ }
+
+ private function getRedirectTarget( $title ) {
+ $page = WikiPage::factory( $title );
+ if ( !$page->exists() ) {
+ return null;
+ }
+ return $page->getRedirectTarget()->getPrefixedText();
}
/**
@@ -161,9 +271,10 @@ abstract class PrefixSearch {
*
* @param string $search Term
* @param int $limit Max number of items to return
+ * @param int $offset Number of items to offset
* @return array
*/
- protected function specialSearch( $search, $limit ) {
+ protected function specialSearch( $search, $limit, $offset ) {
global $wgContLang;
$searchParts = explode( '/', $search, 2 );
@@ -179,7 +290,7 @@ abstract class PrefixSearch {
}
$special = SpecialPageFactory::getPage( $specialTitle->getText() );
if ( $special ) {
- $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit );
+ $subpages = $special->prefixSearchSubpages( $subpageSearch, $limit, $offset );
return array_map( function ( $sub ) use ( $specialTitle ) {
return $specialTitle->getSubpage( $sub );
}, $subpages );
@@ -195,7 +306,7 @@ abstract class PrefixSearch {
// Unlike SpecialPage itself, we want the canonical forms of both
// canonical and alias title forms...
$keys = array();
- foreach ( SpecialPageFactory::getNames() as $page ) {
+ foreach ( SpecialPageFactory::getNames() as $page ) {
$keys[$wgContLang->caseFold( $page )] = $page;
}
@@ -211,12 +322,17 @@ abstract class PrefixSearch {
ksort( $keys );
$srchres = array();
+ $skipped = 0;
foreach ( $keys as $pageKey => $page ) {
if ( $searchKey === '' || strpos( $pageKey, $searchKey ) === 0 ) {
// bug 27671: Don't use SpecialPage::getTitleFor() here because it
// localizes its input leading to searches for e.g. Special:All
// returning Spezial:MediaWiki-Systemnachrichten and returning
// Spezial:Alle_Seiten twice when $wgLanguageCode == 'de'
+ if ( $offset > 0 && $skipped < $offset ) {
+ $skipped++;
+ continue;
+ }
$srchres[] = Title::makeTitleSafe( NS_SPECIAL, $page );
}
@@ -237,9 +353,10 @@ abstract class PrefixSearch {
* @param array $namespaces Namespaces to search in
* @param string $search Term
* @param int $limit Max number of items to return
+ * @param int $offset Number of items to skip
* @return array Array of Title objects
*/
- protected function defaultSearchBackend( $namespaces, $search, $limit ) {
+ protected function defaultSearchBackend( $namespaces, $search, $limit, $offset ) {
$ns = array_shift( $namespaces ); // support only one namespace
if ( in_array( NS_MAIN, $namespaces ) ) {
$ns = NS_MAIN; // if searching on many always default to main
@@ -255,7 +372,11 @@ abstract class PrefixSearch {
'page_title ' . $dbr->buildLike( $prefix, $dbr->anyString() )
),
__METHOD__,
- array( 'LIMIT' => $limit, 'ORDER BY' => 'page_title' )
+ array(
+ 'LIMIT' => $limit,
+ 'ORDER BY' => 'page_title',
+ 'OFFSET' => $offset
+ )
);
$srchres = array();
foreach ( $res as $row ) {
diff --git a/includes/ProtectionForm.php b/includes/ProtectionForm.php
index 7bad8b57..1219da51 100644
--- a/includes/ProtectionForm.php
+++ b/includes/ProtectionForm.php
@@ -156,7 +156,7 @@ class ProtectionForm {
} else {
$value = $this->mExpirySelection[$action];
}
- if ( $value == 'infinite' || $value == 'indefinite' || $value == 'infinity' ) {
+ if ( wfIsInfinity( $value ) ) {
$time = wfGetDB( DB_SLAVE )->getInfinity();
} else {
$unix = strtotime( $value );
@@ -209,11 +209,11 @@ class ProtectionForm {
if ( $this->mTitle->getRestrictionTypes() === array() ) {
// No restriction types available for the current title
// this might happen if an extension alters the available types
- $out->setPageTitle( wfMessage(
+ $out->setPageTitle( $this->mContext->msg(
'protect-norestrictiontypes-title',
$this->mTitle->getPrefixedText()
) );
- $out->addWikiText( wfMessage( 'protect-norestrictiontypes-text' )->text() );
+ $out->addWikiText( $this->mContext->msg( 'protect-norestrictiontypes-text' )->plain() );
// Show the log in case protection was possible once
$this->showLogExtract( $out );
@@ -240,12 +240,12 @@ class ProtectionForm {
# the protection settings at this time
if ( $this->disabled ) {
$out->setPageTitle(
- wfMessage( 'protect-title-notallowed',
+ $this->mContext->msg( 'protect-title-notallowed',
$this->mTitle->getPrefixedText() )
);
$out->addWikiText( $out->formatPermissionsErrorMessage( $this->mPermErrors, 'protect' ) );
} else {
- $out->setPageTitle( wfMessage( 'protect-title', $this->mTitle->getPrefixedText() ) );
+ $out->setPageTitle( $this->mContext->msg( 'protect-title', $this->mTitle->getPrefixedText() ) );
$out->addWikiMsg( 'protect-text',
wfEscapeWikiText( $this->mTitle->getPrefixedText() ) );
}
@@ -279,7 +279,7 @@ class ProtectionForm {
$reasonstr = $this->mReasonSelection;
if ( $reasonstr != 'other' && $this->mReason != '' ) {
// Entry from drop down menu + additional comment
- $reasonstr .= wfMessage( 'colon-separator' )->text() . $this->mReason;
+ $reasonstr .= $this->mContext->msg( 'colon-separator' )->text() . $this->mReason;
} elseif ( $reasonstr == 'other' ) {
$reasonstr = $this->mReason;
}
@@ -321,7 +321,7 @@ class ProtectionForm {
* you can also return an array of message name and its parameters
*/
$errorMsg = '';
- if ( !wfRunHooks( 'ProtectionForm::save', array( $this->mArticle, &$errorMsg, $reasonstr ) ) ) {
+ if ( !Hooks::run( 'ProtectionForm::save', array( $this->mArticle, &$errorMsg, $reasonstr ) ) ) {
if ( $errorMsg == '' ) {
$errorMsg = array( 'hookaborted' );
}
@@ -342,10 +342,11 @@ class ProtectionForm {
* @return string HTML form
*/
function buildForm() {
- $user = $this->mContext->getUser();
- $output = $this->mContext->getOutput();
- $lang = $this->mContext->getLanguage();
- $cascadingRestrictionLevels = $this->mContext->getConfig()->get( 'CascadingRestrictionLevels' );
+ $context = $this->mContext;
+ $user = $context->getUser();
+ $output = $context->getOutput();
+ $lang = $context->getLanguage();
+ $cascadingRestrictionLevels = $context->getConfig()->get( 'CascadingRestrictionLevels' );
$out = '';
if ( !$this->disabled ) {
$output->addModules( 'mediawiki.legacy.protect' );
@@ -356,7 +357,7 @@ class ProtectionForm {
}
$out .= Xml::openElement( 'fieldset' ) .
- Xml::element( 'legend', null, wfMessage( 'protect-legend' )->text() ) .
+ Xml::element( 'legend', null, $context->msg( 'protect-legend' )->text() ) .
Xml::openElement( 'table', array( 'id' => 'mwProtectSet' ) ) .
Xml::openElement( 'tbody' );
@@ -367,7 +368,7 @@ class ProtectionForm {
foreach ( $this->mRestrictions as $action => $selected ) {
// Messages:
// restriction-edit, restriction-move, restriction-create, restriction-upload
- $msg = wfMessage( 'restriction-' . $action );
+ $msg = $context->msg( 'restriction-' . $action );
$out .= "<tr><td>" .
Xml::openElement( 'fieldset' ) .
Xml::element( 'legend', null, $msg->exists() ? $msg->text() : $action ) .
@@ -375,23 +376,23 @@ class ProtectionForm {
"<tr><td>" . $this->buildSelector( $action, $selected ) . "</td></tr><tr><td>";
$mProtectexpiry = Xml::label(
- wfMessage( 'protectexpiry' )->text(),
+ $context->msg( 'protectexpiry' )->text(),
"mwProtectExpirySelection-$action"
);
$mProtectother = Xml::label(
- wfMessage( 'protect-othertime' )->text(),
+ $context->msg( 'protect-othertime' )->text(),
"mwProtect-$action-expires"
);
$expiryFormOptions = '';
if ( $this->mExistingExpiry[$action] ) {
if ( $this->mExistingExpiry[$action] == 'infinity' ) {
- $existingExpiryMessage = wfMessage( 'protect-existing-expiry-infinity' );
+ $existingExpiryMessage = $context->msg( 'protect-existing-expiry-infinity' );
} else {
- $timestamp = $lang->timeanddate( $this->mExistingExpiry[$action], true );
- $d = $lang->date( $this->mExistingExpiry[$action], true );
- $t = $lang->time( $this->mExistingExpiry[$action], true );
- $existingExpiryMessage = wfMessage( 'protect-existing-expiry', $timestamp, $d, $t );
+ $timestamp = $lang->userTimeAndDate( $this->mExistingExpiry[$action], $user );
+ $d = $lang->userDate( $this->mExistingExpiry[$action], $user );
+ $t = $lang->userTime( $this->mExistingExpiry[$action], $user );
+ $existingExpiryMessage = $context->msg( 'protect-existing-expiry', $timestamp, $d, $t );
}
$expiryFormOptions .=
Xml::option(
@@ -402,7 +403,7 @@ class ProtectionForm {
}
$expiryFormOptions .= Xml::option(
- wfMessage( 'protect-othertime-op' )->text(),
+ $context->msg( 'protect-othertime-op' )->text(),
"othertime"
) . "\n";
foreach ( explode( ',', $scExpiryOptions ) as $option ) {
@@ -411,11 +412,9 @@ class ProtectionForm {
} else {
list( $show, $value ) = explode( ":", $option );
}
- $show = htmlspecialchars( $show );
- $value = htmlspecialchars( $value );
$expiryFormOptions .= Xml::option(
$show,
- $value,
+ htmlspecialchars( $value ),
$this->mExpirySelection[$action] === $value
) . "\n";
}
@@ -452,7 +451,7 @@ class ProtectionForm {
"</td></tr>";
}
# Give extensions a chance to add items to the form
- wfRunHooks( 'ProtectionForm::buildForm', array( $this->mArticle, &$out ) );
+ Hooks::run( 'ProtectionForm::buildForm', array( $this->mArticle, &$out ) );
$out .= Xml::closeElement( 'tbody' ) . Xml::closeElement( 'table' );
@@ -464,7 +463,7 @@ class ProtectionForm {
<td></td>
<td class="mw-input">' .
Xml::checkLabel(
- wfMessage( 'protect-cascade' )->text(),
+ $context->msg( 'protect-cascade' )->text(),
'mwProtect-cascade',
'mwProtect-cascade',
$this->mCascade, $this->disabledAttrib
@@ -477,12 +476,12 @@ class ProtectionForm {
# Add manual and custom reason field/selects as well as submit
if ( !$this->disabled ) {
$mProtectreasonother = Xml::label(
- wfMessage( 'protectcomment' )->text(),
+ $context->msg( 'protectcomment' )->text(),
'wpProtectReasonSelection'
);
$mProtectreason = Xml::label(
- wfMessage( 'protect-otherreason' )->text(),
+ $context->msg( 'protect-otherreason' )->text(),
'mwProtect-reason'
);
@@ -521,7 +520,7 @@ class ProtectionForm {
<tr>
<td></td>
<td class='mw-input'>" .
- Xml::checkLabel( wfMessage( 'watchthis' )->text(),
+ Xml::checkLabel( $context->msg( 'watchthis' )->text(),
'mwProtectWatch', 'mwProtectWatch',
$user->isWatched( $this->mTitle ) || $user->getOption( 'watchdefault' ) ) .
"</td>
@@ -532,7 +531,7 @@ class ProtectionForm {
<td></td>
<td class='mw-submit'>" .
Xml::submitButton(
- wfMessage( 'confirm' )->text(),
+ $context->msg( 'confirm' )->text(),
array( 'id' => 'mw-Protect-submit' )
) .
"</td>
@@ -545,7 +544,7 @@ class ProtectionForm {
$title = Title::makeTitle( NS_MEDIAWIKI, 'Protect-dropdown' );
$link = Linker::link(
$title,
- wfMessage( 'protect-edit-reasonlist' )->escaped(),
+ $context->msg( 'protect-edit-reasonlist' )->escaped(),
array(),
array( 'action' => 'edit' )
);
@@ -600,14 +599,14 @@ class ProtectionForm {
*/
private function getOptionLabel( $permission ) {
if ( $permission == '' ) {
- return wfMessage( 'protect-default' )->text();
+ return $this->mContext->msg( 'protect-default' )->text();
} else {
// Messages: protect-level-autoconfirmed, protect-level-sysop
- $msg = wfMessage( "protect-level-{$permission}" );
+ $msg = $this->mContext->msg( "protect-level-{$permission}" );
if ( $msg->exists() ) {
return $msg->text();
}
- return wfMessage( 'protect-fallback', $permission )->text();
+ return $this->mContext->msg( 'protect-fallback', $permission )->text();
}
}
@@ -623,6 +622,6 @@ class ProtectionForm {
$out->addHTML( Xml::element( 'h2', null, $protectLogPage->getName()->text() ) );
LogEventsList::showLogExtract( $out, 'protect', $this->mTitle );
# Let extensions add other relevant log extracts
- wfRunHooks( 'ProtectionForm::showLogExtract', array( $this->mArticle, $out ) );
+ Hooks::run( 'ProtectionForm::showLogExtract', array( $this->mArticle, $out ) );
}
}
diff --git a/includes/Revision.php b/includes/Revision.php
index 28a825d0..3ba6157c 100644
--- a/includes/Revision.php
+++ b/includes/Revision.php
@@ -121,7 +121,7 @@ class Revision implements IDBAccessObject {
if ( $id ) {
// Use the specified ID
$conds['rev_id'] = $id;
- return self::newFromConds( $conds, (int)$flags );
+ return self::newFromConds( $conds, $flags );
} else {
// Use a join to get the latest revision
$conds[] = 'rev_id=page_latest';
@@ -148,11 +148,13 @@ class Revision implements IDBAccessObject {
$conds = array( 'page_id' => $pageId );
if ( $revId ) {
$conds['rev_id'] = $revId;
+ return self::newFromConds( $conds, $flags );
} else {
// Use a join to get the latest revision
$conds[] = 'rev_id = page_latest';
+ $db = wfGetDB( ( $flags & self::READ_LATEST ) ? DB_MASTER : DB_SLAVE );
+ return self::loadFromConds( $db, $conds, $flags );
}
- return self::newFromConds( $conds, (int)$flags );
}
/**
@@ -295,7 +297,10 @@ class Revision implements IDBAccessObject {
}
/**
- * Given a set of conditions, fetch a revision.
+ * Given a set of conditions, fetch a revision
+ *
+ * This method is used then a revision ID is qualified and
+ * will incorporate some basic slave/master fallback logic
*
* @param array $conditions
* @param int $flags (optional)
@@ -303,16 +308,24 @@ class Revision implements IDBAccessObject {
*/
private static function newFromConds( $conditions, $flags = 0 ) {
$db = wfGetDB( ( $flags & self::READ_LATEST ) ? DB_MASTER : DB_SLAVE );
+
$rev = self::loadFromConds( $db, $conditions, $flags );
- if ( $rev === null && wfGetLB()->getServerCount() > 1 ) {
- if ( !( $flags & self::READ_LATEST ) ) {
- $dbw = wfGetDB( DB_MASTER );
- $rev = self::loadFromConds( $dbw, $conditions, $flags );
- }
+ // Make sure new pending/committed revision are visibile later on
+ // within web requests to certain avoid bugs like T93866 and T94407.
+ if ( !$rev
+ && !( $flags & self::READ_LATEST )
+ && wfGetLB()->getServerCount() > 1
+ && wfGetLB()->hasOrMadeRecentMasterChanges()
+ ) {
+ $flags = self::READ_LATEST;
+ $db = wfGetDB( DB_MASTER );
+ $rev = self::loadFromConds( $db, $conditions, $flags );
}
+
if ( $rev ) {
$rev->mQueryFlags = $flags;
}
+
return $rev;
}
@@ -515,7 +528,6 @@ class Revision implements IDBAccessObject {
if ( !$revIds ) {
return $revLens; // empty
}
- wfProfileIn( __METHOD__ );
$res = $db->select( 'revision',
array( 'rev_id', 'rev_len' ),
array( 'rev_id' => $revIds ),
@@ -523,7 +535,6 @@ class Revision implements IDBAccessObject {
foreach ( $res as $row ) {
$revLens[$row->rev_id] = $row->rev_len;
}
- wfProfileOut( __METHOD__ );
return $revLens;
}
@@ -678,13 +689,8 @@ class Revision implements IDBAccessObject {
$this->mCurrent = false;
// If we still have no length, see it we have the text to figure it out
- if ( !$this->mSize ) {
- if ( $this->mContent !== null ) {
- $this->mSize = $this->mContent->getSize();
- } else {
- #NOTE: this should never happen if we have either text or content object!
- $this->mSize = null;
- }
+ if ( !$this->mSize && $this->mContent !== null ) {
+ $this->mSize = $this->mContent->getSize();
}
// Same for sha1
@@ -833,9 +839,11 @@ class Revision implements IDBAccessObject {
* Fetch revision's user id without regard for the current user's permissions
*
* @return string
+ * @deprecated since 1.25, use getUser( Revision::RAW )
*/
public function getRawUser() {
- return $this->mUser;
+ wfDeprecated( __METHOD__, '1.25' );
+ return $this->getUser( self::RAW );
}
/**
@@ -857,7 +865,15 @@ class Revision implements IDBAccessObject {
} elseif ( $audience == self::FOR_THIS_USER && !$this->userCan( self::DELETED_USER, $user ) ) {
return '';
} else {
- return $this->getRawUserText();
+ if ( $this->mUserText === null ) {
+ $this->mUserText = User::whoIs( $this->mUser ); // load on demand
+ if ( $this->mUserText === false ) {
+ # This shouldn't happen, but it can if the wiki was recovered
+ # via importing revs and there is no user table entry yet.
+ $this->mUserText = $this->mOrigUserText;
+ }
+ }
+ return $this->mUserText;
}
}
@@ -865,17 +881,11 @@ class Revision implements IDBAccessObject {
* Fetch revision's username without regard for view restrictions
*
* @return string
+ * @deprecated since 1.25, use getUserText( Revision::RAW )
*/
public function getRawUserText() {
- if ( $this->mUserText === null ) {
- $this->mUserText = User::whoIs( $this->mUser ); // load on demand
- if ( $this->mUserText === false ) {
- # This shouldn't happen, but it can if the wiki was recovered
- # via importing revs and there is no user table entry yet.
- $this->mUserText = $this->mOrigUserText;
- }
- }
- return $this->mUserText;
+ wfDeprecated( __METHOD__, '1.25' );
+ return $this->getUserText( self::RAW );
}
/**
@@ -905,9 +915,11 @@ class Revision implements IDBAccessObject {
* Fetch revision comment without regard for the current user's permissions
*
* @return string
+ * @deprecated since 1.25, use getComment( Revision::RAW )
*/
public function getRawComment() {
- return $this->mComment;
+ wfDeprecated( __METHOD__, '1.25' );
+ return $this->getComment( self::RAW );
}
/**
@@ -943,7 +955,7 @@ class Revision implements IDBAccessObject {
$dbr = wfGetDB( DB_SLAVE );
return RecentChange::newFromConds(
array(
- 'rc_user_text' => $this->getRawUserText(),
+ 'rc_user_text' => $this->getUserText( Revision::RAW ),
'rc_timestamp' => $dbr->timestamp( $this->getTimestamp() ),
'rc_this_oldid' => $this->getId()
),
@@ -1065,8 +1077,6 @@ class Revision implements IDBAccessObject {
$format = $this->getContentFormat();
$this->mContent = $handler->unserializeContent( $this->mText, $format );
- } else {
- $this->mContent = false; // negative caching!
}
}
@@ -1220,7 +1230,6 @@ class Revision implements IDBAccessObject {
* @return string Text the text requested or false on failure
*/
public static function getRevisionText( $row, $prefix = 'old_', $wiki = false ) {
- wfProfileIn( __METHOD__ );
# Get data
$textField = $prefix . 'text';
@@ -1235,7 +1244,6 @@ class Revision implements IDBAccessObject {
if ( isset( $row->$textField ) ) {
$text = $row->$textField;
} else {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -1244,7 +1252,6 @@ class Revision implements IDBAccessObject {
$url = $text;
$parts = explode( '://', $url, 2 );
if ( count( $parts ) == 1 || $parts[1] == '' ) {
- wfProfileOut( __METHOD__ );
return false;
}
$text = ExternalStore::fetchFromURL( $url, array( 'wiki' => $wiki ) );
@@ -1254,7 +1261,6 @@ class Revision implements IDBAccessObject {
if ( $text !== false ) {
$text = self::decompressRevisionText( $text, $flags );
}
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -1338,8 +1344,6 @@ class Revision implements IDBAccessObject {
public function insertOn( $dbw ) {
global $wgDefaultExternalStore, $wgContentHandlerUseDB;
- wfProfileIn( __METHOD__ );
-
$this->checkContentModel();
$data = $this->mText;
@@ -1350,7 +1354,6 @@ class Revision implements IDBAccessObject {
// Store and get the URL
$data = ExternalStore::insertToDefault( $data );
if ( !$data ) {
- wfProfileOut( __METHOD__ );
throw new MWException( "Unable to store text to external storage" );
}
if ( $flags ) {
@@ -1410,7 +1413,6 @@ class Revision implements IDBAccessObject {
$title = $this->getTitle();
if ( $title === null ) {
- wfProfileOut( __METHOD__ );
throw new MWException( "Insufficient information to determine the title of the "
. "revision's page!" );
}
@@ -1426,9 +1428,16 @@ class Revision implements IDBAccessObject {
$this->mId = $rev_id !== null ? $rev_id : $dbw->insertId();
- wfRunHooks( 'RevisionInsertComplete', array( &$this, $data, $flags ) );
+ // Assertion to try to catch T92046
+ if ( (int)$this->mId === 0 ) {
+ throw new UnexpectedValueException(
+ 'After insert, Revision mId is ' . var_export( $this->mId, 1 ) . ': ' .
+ var_export( $row, 1 )
+ );
+ }
+
+ Hooks::run( 'RevisionInsertComplete', array( &$this, $data, $flags ) );
- wfProfileOut( __METHOD__ );
return $this->mId;
}
@@ -1497,17 +1506,15 @@ class Revision implements IDBAccessObject {
* @return string|bool The revision's text, or false on failure
*/
protected function loadText() {
- wfProfileIn( __METHOD__ );
-
// Caching may be beneficial for massive use of external storage
global $wgRevisionCacheExpiry, $wgMemc;
+
$textId = $this->getTextId();
$key = wfMemcKey( 'revisiontext', 'textid', $textId );
if ( $wgRevisionCacheExpiry ) {
$text = $wgMemc->get( $key );
if ( is_string( $text ) ) {
wfDebug( __METHOD__ . ": got id $textId from cache\n" );
- wfProfileOut( __METHOD__ );
return $text;
}
}
@@ -1555,8 +1562,6 @@ class Revision implements IDBAccessObject {
$wgMemc->set( $key, $text, $wgRevisionCacheExpiry );
}
- wfProfileOut( __METHOD__ );
-
return $text;
}
@@ -1576,9 +1581,7 @@ class Revision implements IDBAccessObject {
* @return Revision|null Revision or null on error
*/
public static function newNullRevision( $dbw, $pageId, $summary, $minor, $user = null ) {
- global $wgContentHandlerUseDB;
-
- wfProfileIn( __METHOD__ );
+ global $wgContentHandlerUseDB, $wgContLang;
$fields = array( 'page_latest', 'page_namespace', 'page_title',
'rev_text_id', 'rev_len', 'rev_sha1' );
@@ -1603,6 +1606,9 @@ class Revision implements IDBAccessObject {
$user = $wgUser;
}
+ // Truncate for whole multibyte characters
+ $summary = $wgContLang->truncate( $summary, 255 );
+
$row = array(
'page' => $pageId,
'user_text' => $user->getName(),
@@ -1626,7 +1632,6 @@ class Revision implements IDBAccessObject {
$revision = null;
}
- wfProfileOut( __METHOD__ );
return $revision;
}
@@ -1697,23 +1702,21 @@ class Revision implements IDBAccessObject {
*
* @param Title $title
* @param int $id
- * @return string
+ * @return string|bool False if not found
*/
- static function getTimestampFromId( $title, $id ) {
- $dbr = wfGetDB( DB_SLAVE );
+ static function getTimestampFromId( $title, $id, $flags = 0 ) {
+ $db = ( $flags & self::READ_LATEST )
+ ? wfGetDB( DB_MASTER )
+ : wfGetDB( DB_SLAVE );
// Casting fix for databases that can't take '' for rev_id
if ( $id == '' ) {
$id = 0;
}
$conds = array( 'rev_id' => $id );
$conds['rev_page'] = $title->getArticleID();
- $timestamp = $dbr->selectField( 'revision', 'rev_timestamp', $conds, __METHOD__ );
- if ( $timestamp === false && wfGetLB()->getServerCount() > 1 ) {
- # Not in slave, try master
- $dbw = wfGetDB( DB_MASTER );
- $timestamp = $dbw->selectField( 'revision', 'rev_timestamp', $conds, __METHOD__ );
- }
- return wfTimestamp( TS_MW, $timestamp );
+ $timestamp = $db->selectField( 'revision', 'rev_timestamp', $conds, __METHOD__ );
+
+ return ( $timestamp !== false ) ? wfTimestamp( TS_MW, $timestamp ) : false;
}
/**
diff --git a/includes/RevisionList.php b/includes/RevisionList.php
index d10b5412..6844dadc 100644
--- a/includes/RevisionList.php
+++ b/includes/RevisionList.php
@@ -317,7 +317,7 @@ class RevisionItem extends RevisionItemBase {
}
public function getAuthorNameField() {
- return 'user_name'; // see Revision::selectUserFields()
+ return 'rev_user_text';
}
public function canView() {
@@ -334,15 +334,18 @@ class RevisionItem extends RevisionItemBase {
/**
* Get the HTML link to the revision text.
- * Overridden by RevDelArchiveItem.
+ * @todo Essentially a copy of RevDelRevisionItem::getRevisionLink. That class
+ * should inherit from this one, and implement an appropriate interface instead
+ * of extending RevDelItem
* @return string
*/
protected function getRevisionLink() {
$date = $this->list->getLanguage()->timeanddate( $this->revision->getTimestamp(), true );
+
if ( $this->isDeleted() && !$this->canViewContent() ) {
return $date;
}
- return Linker::link(
+ return Linker::linkKnown(
$this->list->title,
$date,
array(),
@@ -355,30 +358,34 @@ class RevisionItem extends RevisionItemBase {
/**
* Get the HTML link to the diff.
- * Overridden by RevDelArchiveItem
+ * @todo Essentially a copy of RevDelRevisionItem::getDiffLink. That class
+ * should inherit from this one, and implement an appropriate interface instead
+ * of extending RevDelItem
* @return string
*/
protected function getDiffLink() {
if ( $this->isDeleted() && !$this->canViewContent() ) {
return $this->context->msg( 'diff' )->escaped();
} else {
- return Linker::link(
+ return Linker::linkKnown(
$this->list->title,
- $this->context->msg( 'diff' )->escaped(),
+ $this->list->msg( 'diff' )->escaped(),
array(),
array(
'diff' => $this->revision->getId(),
'oldid' => 'prev',
'unhide' => 1
- ),
- array(
- 'known',
- 'noclasses'
)
);
}
}
+ /**
+ * @todo Essentially a copy of RevDelRevisionItem::getHTML. That class
+ * should inherit from this one, and implement an appropriate interface instead
+ * of extending RevDelItem
+ * @return string
+ */
public function getHTML() {
$difflink = $this->context->msg( 'parentheses' )
->rawParams( $this->getDiffLink() )->escaped();
diff --git a/includes/Sanitizer.php b/includes/Sanitizer.php
index bca2f67e..96193a74 100644
--- a/includes/Sanitizer.php
+++ b/includes/Sanitizer.php
@@ -40,6 +40,12 @@ class Sanitizer {
|(&)/x';
/**
+ * Acceptable tag name charset from HTML5 parsing spec
+ * http://www.w3.org/TR/html5/syntax.html#tag-open-state
+ */
+ const ELEMENT_BITS_REGEX = '!^(/?)([A-Za-z][^\t\n\v />\0]*+)([^>]*?)(/?>)([^<]*)$!';
+
+ /**
* Blacklist for evil uris like javascript:
* WARNING: DO NOT use this in any place that actually requires blacklisting
* for security reasons. There are NUMEROUS[1] ways to bypass blacklisting, the
@@ -355,7 +361,6 @@ class Sanitizer {
/**
* Cleans up HTML, removes dangerous tags and attributes, and
* removes HTML comments
- * @private
* @param string $text
* @param callable $processCallback Callback to do any variable or parameter
* replacements in HTML attribute values
@@ -364,7 +369,7 @@ class Sanitizer {
* @param array $removetags For any tags (default or extra) to exclude
* @return string
*/
- static function removeHTMLtags( $text, $processCallback = null,
+ public static function removeHTMLtags( $text, $processCallback = null,
$args = array(), $extratags = array(), $removetags = array()
) {
global $wgUseTidy, $wgAllowMicrodataAttributes, $wgAllowImageTag;
@@ -372,8 +377,6 @@ class Sanitizer {
static $htmlpairsStatic, $htmlsingle, $htmlsingleonly, $htmlnest, $tabletags,
$htmllist, $listtags, $htmlsingleallowed, $htmlelementsStatic, $staticInitialised;
- wfProfileIn( __METHOD__ );
-
// Base our staticInitialised variable off of the global config state so that if the globals
// are changed (like in the screwed up test system) we will re-initialise the settings.
$globalContext = implode( '-', compact( 'wgAllowMicrodataAttributes', 'wgAllowImageTag' ) );
@@ -447,7 +450,7 @@ class Sanitizer {
# $params: String between element name and >
# $brace: Ending '>' or '/>'
# $rest: Everything until the next element of $bits
- if ( preg_match( '!^(/?)([^\\s/>]+)([^>]*?)(/{0,1}>)([^<]*)$!', $x, $regs ) ) {
+ if ( preg_match( self::ELEMENT_BITS_REGEX, $x, $regs ) ) {
list( /* $qbar */, $slash, $t, $params, $brace, $rest ) = $regs;
} else {
$slash = $t = $params = $brace = $rest = null;
@@ -510,15 +513,12 @@ class Sanitizer {
$newparams = '';
} else {
# Keep track for later
- if ( isset( $tabletags[$t] ) &&
- !in_array( 'table', $tagstack ) ) {
+ if ( isset( $tabletags[$t] ) && !in_array( 'table', $tagstack ) ) {
$badtag = true;
- } elseif ( in_array( $t, $tagstack ) &&
- !isset( $htmlnest[$t] ) ) {
+ } elseif ( in_array( $t, $tagstack ) && !isset( $htmlnest[$t] ) ) {
$badtag = true;
# Is it a self closed htmlpair ? (bug 5487)
- } elseif ( $brace == '/>' &&
- isset( $htmlpairs[$t] ) ) {
+ } elseif ( $brace == '/>' && isset( $htmlpairs[$t] ) ) {
$badtag = true;
} elseif ( isset( $htmlsingleonly[$t] ) ) {
# Hack to force empty tag for unclosable elements
@@ -530,8 +530,7 @@ class Sanitizer {
# the tag stack so that we can match end tags
# instead of marking them as bad.
array_push( $tagstack, $t );
- } elseif ( isset( $tabletags[$t] )
- && in_array( $t, $tagstack ) ) {
+ } elseif ( isset( $tabletags[$t] ) && in_array( $t, $tagstack ) ) {
// New table tag but forgot to close the previous one
$text .= "</$t>";
} else {
@@ -574,37 +573,30 @@ class Sanitizer {
} else {
# this might be possible using tidy itself
foreach ( $bits as $x ) {
- preg_match(
- '/^(\\/?)(\\w+)([^>]*?)(\\/{0,1}>)([^<]*)$/',
- $x,
- $regs
- );
-
- wfSuppressWarnings();
- list( /* $qbar */, $slash, $t, $params, $brace, $rest ) = $regs;
- wfRestoreWarnings();
+ if ( preg_match( self::ELEMENT_BITS_REGEX, $x, $regs ) ) {
+ list( /* $qbar */, $slash, $t, $params, $brace, $rest ) = $regs;
- $badtag = false;
- if ( isset( $htmlelements[$t = strtolower( $t )] ) ) {
- if ( is_callable( $processCallback ) ) {
- call_user_func_array( $processCallback, array( &$params, $args ) );
- }
+ $badtag = false;
+ if ( isset( $htmlelements[$t = strtolower( $t )] ) ) {
+ if ( is_callable( $processCallback ) ) {
+ call_user_func_array( $processCallback, array( &$params, $args ) );
+ }
- if ( !Sanitizer::validateTag( $params, $t ) ) {
- $badtag = true;
- }
+ if ( !Sanitizer::validateTag( $params, $t ) ) {
+ $badtag = true;
+ }
- $newparams = Sanitizer::fixTagAttributes( $params, $t );
- if ( !$badtag ) {
- $rest = str_replace( '>', '&gt;', $rest );
- $text .= "<$slash$t$newparams$brace$rest";
- continue;
+ $newparams = Sanitizer::fixTagAttributes( $params, $t );
+ if ( !$badtag ) {
+ $rest = str_replace( '>', '&gt;', $rest );
+ $text .= "<$slash$t$newparams$brace$rest";
+ continue;
+ }
}
}
$text .= '&lt;' . str_replace( '>', '&gt;', $x );
}
}
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -614,12 +606,10 @@ class Sanitizer {
* and followed by a newline (ignoring spaces), trim leading and
* trailing spaces and one of the newlines.
*
- * @private
* @param string $text
* @return string
*/
- static function removeHTMLcomments( $text ) {
- wfProfileIn( __METHOD__ );
+ public static function removeHTMLcomments( $text ) {
while ( ( $start = strpos( $text, '<!--' ) ) !== false ) {
$end = strpos( $text, '-->', $start + 4 );
if ( $end === false ) {
@@ -650,7 +640,6 @@ class Sanitizer {
$text = substr_replace( $text, '', $start, $end - $start );
}
}
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -874,7 +863,7 @@ class Sanitizer {
$value = preg_replace_callback(
'/[!-[]-z]/u', // U+FF01 to U+FF5A, excluding U+FF3C (bug 58088)
function ( $matches ) {
- $cp = utf8ToCodepoint( $matches[0] );
+ $cp = UtfNormal\Utils::utf8ToCodepoint( $matches[0] );
if ( $cp === false ) {
return '';
}
@@ -980,7 +969,7 @@ class Sanitizer {
// Line continuation
return '';
} elseif ( $matches[2] !== '' ) {
- $char = codepointToUtf8( hexdec( $matches[2] ) );
+ $char = UtfNormal\Utils::codepointToUtf8( hexdec( $matches[2] ) );
} elseif ( $matches[3] !== '' ) {
$char = $matches[3];
} else {
@@ -1120,14 +1109,14 @@ class Sanitizer {
$id = preg_replace( '/[ \t\n\r\f_\'"&#%]+/', '_', $id );
$id = trim( $id, '_' );
if ( $id === '' ) {
- # Must have been all whitespace to start with.
+ // Must have been all whitespace to start with.
return '_';
} else {
return $id;
}
}
- # HTML4-style escaping
+ // HTML4-style escaping
static $replace = array(
'%3A' => ':',
'%' => '.'
@@ -1136,8 +1125,7 @@ class Sanitizer {
$id = urlencode( strtr( $id, ' ', '_' ) );
$id = str_replace( array_keys( $replace ), array_values( $replace ), $id );
- if ( !preg_match( '/^[a-zA-Z]/', $id )
- && !in_array( 'noninitial', $options ) ) {
+ if ( !preg_match( '/^[a-zA-Z]/', $id ) && !in_array( 'noninitial', $options ) ) {
// Initial character must be a letter!
$id = "x$id";
}
@@ -1273,24 +1261,6 @@ class Sanitizer {
}
/**
- * Normalize whitespace and character references in an XML source-
- * encoded text for an attribute value.
- *
- * See http://www.w3.org/TR/REC-xml/#AVNormalize for background,
- * but note that we're not returning the value, but are returning
- * XML source fragments that will be slapped into output.
- *
- * @param string $text
- * @return string
- * @todo Remove, unused?
- */
- private static function normalizeAttributeValue( $text ) {
- return str_replace( '"', '&quot;',
- self::normalizeWhitespace(
- Sanitizer::normalizeCharReferences( $text ) ) );
- }
-
- /**
* @param string $text
* @return string
*/
@@ -1368,8 +1338,7 @@ class Sanitizer {
static function normalizeEntity( $name ) {
if ( isset( self::$htmlEntityAliases[$name] ) ) {
return '&' . self::$htmlEntityAliases[$name] . ';';
- } elseif ( in_array( $name,
- array( 'lt', 'gt', 'amp', 'quot' ) ) ) {
+ } elseif ( in_array( $name, array( 'lt', 'gt', 'amp', 'quot' ) ) ) {
return "&$name;";
} elseif ( isset( self::$htmlEntities[$name] ) ) {
return '&#' . self::$htmlEntities[$name] . ';';
@@ -1481,9 +1450,9 @@ class Sanitizer {
*/
static function decodeChar( $codepoint ) {
if ( Sanitizer::validateCodepoint( $codepoint ) ) {
- return codepointToUtf8( $codepoint );
+ return UtfNormal\Utils::codepointToUtf8( $codepoint );
} else {
- return UTF8_REPLACEMENT;
+ return UtfNormal\Constants::UTF8_REPLACEMENT;
}
}
@@ -1500,7 +1469,7 @@ class Sanitizer {
$name = self::$htmlEntityAliases[$name];
}
if ( isset( self::$htmlEntities[$name] ) ) {
- return codepointToUtf8( self::$htmlEntities[$name] );
+ return UtfNormal\Utils::codepointToUtf8( self::$htmlEntities[$name] );
} else {
return "&$name;";
}
@@ -1861,7 +1830,7 @@ class Sanitizer {
*/
public static function validateEmail( $addr ) {
$result = null;
- if ( !wfRunHooks( 'isValidEmailAddr', array( $addr, &$result ) ) ) {
+ if ( !Hooks::run( 'isValidEmailAddr', array( $addr, &$result ) ) ) {
return $result;
}
diff --git a/includes/Setup.php b/includes/Setup.php
index 7a89c7a3..dd8fbf8a 100644
--- a/includes/Setup.php
+++ b/includes/Setup.php
@@ -33,8 +33,10 @@ if ( !defined( 'MEDIAWIKI' ) ) {
}
$fname = 'Setup.php';
-wfProfileIn( $fname );
-wfProfileIn( $fname . '-defaults' );
+$ps_setup = Profiler::instance()->scopedProfileIn( $fname );
+
+// If any extensions are still queued, force load them
+ExtensionRegistry::getInstance()->loadFromQueue();
// Check to see if we are at the file scope
if ( !isset( $wgVersion ) ) {
@@ -43,6 +45,7 @@ if ( !isset( $wgVersion ) ) {
}
// Set various default paths sensibly...
+$ps_default = Profiler::instance()->scopedProfileIn( $fname . '-defaults' );
if ( $wgScript === false ) {
$wgScript = "$wgScriptPath/index$wgScriptExtension";
@@ -71,9 +74,6 @@ if ( $wgStylePath === false ) {
if ( $wgLocalStylePath === false ) {
$wgLocalStylePath = "$wgScriptPath/skins";
}
-if ( $wgStyleDirectory === false ) {
- $wgStyleDirectory = "$IP/skins";
-}
if ( $wgExtensionAssetsPath === false ) {
$wgExtensionAssetsPath = "$wgScriptPath/extensions";
}
@@ -137,6 +137,9 @@ if ( isset( $wgFooterIcons['poweredby'] )
) {
$wgFooterIcons['poweredby']['mediawiki']['src'] =
"$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png";
+ $wgFooterIcons['poweredby']['mediawiki']['srcset'] =
+ "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png 1.5x, " .
+ "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png 2x";
}
/**
@@ -289,8 +292,13 @@ call_user_func( function () use ( $wgValidSkinNames ) {
$factory->register( 'fallback', 'Fallback', function () {
return new SkinFallback;
} );
+ // Register a hidden skin for api output
+ $factory->register( 'apioutput', 'ApiOutput', function () {
+ return new SkinApi;
+ } );
} );
$wgSkipSkins[] = 'fallback';
+$wgSkipSkins[] = 'apioutput';
if ( $wgLocalInterwiki ) {
array_unshift( $wgLocalInterwikis, $wgLocalInterwiki );
@@ -301,6 +309,11 @@ if ( $wgSharedPrefix === false ) {
$wgSharedPrefix = $wgDBprefix;
}
+// Set default shared schema
+if ( $wgSharedSchema === false ) {
+ $wgSharedSchema = $wgDBmwschema;
+}
+
if ( !$wgCookiePrefix ) {
if ( $wgSharedDB && $wgSharedPrefix && in_array( 'user', $wgSharedTables ) ) {
$wgCookiePrefix = $wgSharedDB . '_' . $wgSharedPrefix;
@@ -346,10 +359,15 @@ if ( $wgMetaNamespace === false ) {
$wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
}
-// Default value is either the suhosin limit or -1 for unlimited
+// Default value is 2000 or the suhosin limit if it is between 1 and 2000
if ( $wgResourceLoaderMaxQueryLength === false ) {
- $maxValueLength = ini_get( 'suhosin.get.max_value_length' );
- $wgResourceLoaderMaxQueryLength = $maxValueLength > 0 ? $maxValueLength : -1;
+ $suhosinMaxValueLength = (int) ini_get( 'suhosin.get.max_value_length' );
+ if ( $suhosinMaxValueLength > 0 && $suhosinMaxValueLength < 2000 ) {
+ $wgResourceLoaderMaxQueryLength = $suhosinMaxValueLength;
+ } else {
+ $wgResourceLoaderMaxQueryLength = 2000;
+ }
+ unset($suhosinMaxValueLength);
}
/**
@@ -448,32 +466,28 @@ if ( $wgProfileOnly ) {
$wgDebugLogFile = '';
}
-wfProfileOut( $fname . '-defaults' );
+Profiler::instance()->scopedProfileOut( $ps_default );
// Disable MWDebug for command line mode, this prevents MWDebug from eating up
// all the memory from logging SQL queries on maintenance scripts
global $wgCommandLineMode;
if ( $wgDebugToolbar && !$wgCommandLineMode ) {
- wfProfileIn( $fname . '-debugtoolbar' );
MWDebug::init();
- wfProfileOut( $fname . '-debugtoolbar' );
}
if ( !class_exists( 'AutoLoader' ) ) {
require_once "$IP/includes/AutoLoader.php";
}
-wfProfileIn( $fname . '-exception' );
MWExceptionHandler::installHandler();
-wfProfileOut( $fname . '-exception' );
-wfProfileIn( $fname . '-includes' );
-require_once "$IP/includes/normal/UtfNormalUtil.php";
-require_once "$IP/includes/GlobalFunctions.php";
-require_once "$IP/includes/normal/UtfNormalDefines.php";
-wfProfileOut( $fname . '-includes' );
+require_once "$IP/includes/libs/normal/UtfNormalUtil.php";
-wfProfileIn( $fname . '-defaults2' );
+$ps_default2 = Profiler::instance()->scopedProfileIn( $fname . '-defaults2' );
+
+if ( $wgScriptExtension !== '.php' || defined( 'MW_ENTRY_PHP5' ) ) {
+ wfWarn( 'Script extensions other than ".php" are deprecated.' );
+}
if ( $wgCanonicalServer === false ) {
$wgCanonicalServer = wfExpandUrl( $wgServer, PROTO_HTTP );
@@ -504,16 +518,22 @@ if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
. 'HTTP or HTTPS. Disabling secure login.' );
}
-// Now that GlobalFunctions is loaded, set defaults that depend
-// on it.
+// Now that GlobalFunctions is loaded, set defaults that depend on it.
if ( $wgTmpDirectory === false ) {
- wfProfileIn( $fname . '-tempDir' );
+ $ps_tmpdir = Profiler::instance()->scopedProfileIn( $fname . '-tempDir' );
$wgTmpDirectory = wfTempDir();
- wfProfileOut( $fname . '-tempDir' );
+ Profiler::instance()->scopedProfileOut( $ps_tmpdir );
+}
+
+// We don't use counters anymore. Left here for extensions still
+// expecting this to exist. Should be removed sometime 1.26 or later.
+if ( !isset( $wgDisableCounters ) ) {
+ $wgDisableCounters = true;
}
-wfProfileOut( $fname . '-defaults2' );
-wfProfileIn( $fname . '-misc1' );
+Profiler::instance()->scopedProfileOut( $ps_default2 );
+
+$ps_misc = Profiler::instance()->scopedProfileIn( $fname . '-misc1' );
// Raise the memory limit if it's too low
wfMemoryLimit();
@@ -555,24 +575,23 @@ if ( $wgCommandLineMode ) {
wfDebug( $debug );
}
-wfProfileOut( $fname . '-misc1' );
-wfProfileIn( $fname . '-memcached' );
+Profiler::instance()->scopedProfileOut( $ps_misc );
+$ps_memcached = Profiler::instance()->scopedProfileIn( $fname . '-memcached' );
$wgMemc = wfGetMainCache();
$messageMemc = wfGetMessageCacheStorage();
$parserMemc = wfGetParserCacheStorage();
-$wgLangConvMemc = wfGetLangConverterCacheStorage();
wfDebugLog( 'caches', 'main: ' . get_class( $wgMemc ) .
', message: ' . get_class( $messageMemc ) .
', parser: ' . get_class( $parserMemc ) );
-wfProfileOut( $fname . '-memcached' );
+Profiler::instance()->scopedProfileOut( $ps_memcached );
// Most of the config is out, some might want to run hooks here.
-wfRunHooks( 'SetupAfterCache' );
+Hooks::run( 'SetupAfterCache' );
-wfProfileIn( $fname . '-session' );
+$ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' );
if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
// If session.auto_start is there, we can't touch session name
@@ -585,8 +604,8 @@ if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
}
}
-wfProfileOut( $fname . '-session' );
-wfProfileIn( $fname . '-globals' );
+Profiler::instance()->scopedProfileOut( $ps_session );
+$ps_globals = Profiler::instance()->scopedProfileIn( $fname . '-globals' );
/**
* @var Language $wgContLang
@@ -620,7 +639,7 @@ $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParser
if ( !is_object( $wgAuth ) ) {
$wgAuth = new AuthPlugin;
- wfRunHooks( 'AuthPluginSetup', array( &$wgAuth ) );
+ Hooks::run( 'AuthPluginSetup', array( &$wgAuth ) );
}
/**
@@ -634,8 +653,8 @@ $wgTitle = null;
*/
$wgDeferredUpdateList = array();
-wfProfileOut( $fname . '-globals' );
-wfProfileIn( $fname . '-extensions' );
+Profiler::instance()->scopedProfileOut( $ps_globals );
+$ps_extensions = Profiler::instance()->scopedProfileIn( $fname . '-extensions' );
// Extension setup functions for extensions other than skins
// Entries should be added to this variable during the inclusion
@@ -655,13 +674,14 @@ foreach ( $wgExtensionFunctions as $func ) {
$profName = $fname . '-extensions-' . strval( $func );
}
- wfProfileIn( $profName );
+ $ps_ext_func = Profiler::instance()->scopedProfileIn( $profName );
call_user_func( $func );
- wfProfileOut( $profName );
+ Profiler::instance()->scopedProfileOut( $ps_ext_func );
}
wfDebug( "Fully initialised\n" );
$wgFullyInitialised = true;
-wfProfileOut( $fname . '-extensions' );
-wfProfileOut( $fname );
+Profiler::instance()->scopedProfileOut( $ps_extensions );
+Profiler::instance()->scopedProfileOut( $ps_setup );
+
diff --git a/includes/SiteConfiguration.php b/includes/SiteConfiguration.php
index 8c1f26b8..c3b1a6ac 100644
--- a/includes/SiteConfiguration.php
+++ b/includes/SiteConfiguration.php
@@ -133,6 +133,8 @@ class SiteConfiguration {
/**
* Array of domains that are local and can be handled by the same server
+ *
+ * @deprecated since 1.25; use $wgLocalVirtualHosts instead.
*/
public $localVHosts = array();
@@ -565,6 +567,8 @@ class SiteConfiguration {
/**
* Returns true if the given vhost is handled locally.
+ *
+ * @deprecated since 1.25; check if the host is in $wgLocalVirtualHosts instead.
* @param string $vhost
* @return bool
*/
diff --git a/includes/SiteStats.php b/includes/SiteStats.php
index 3dc17933..15c18f35 100644
--- a/includes/SiteStats.php
+++ b/includes/SiteStats.php
@@ -102,7 +102,6 @@ class SiteStats {
static function doLoad( $db ) {
return $db->selectRow( 'site_stats', array(
'ss_row_id',
- 'ss_total_views',
'ss_total_edits',
'ss_good_articles',
'ss_total_pages',
@@ -113,11 +112,16 @@ class SiteStats {
}
/**
+ * Return the total number of page views. Except we don't track those anymore.
+ * Stop calling this function, it will be removed some time in the future. It's
+ * kept here simply to prevent fatal errors.
+ *
+ * @deprecated since 1.25
* @return int
*/
static function views() {
- self::load();
- return self::$row->ss_total_views;
+ wfDeprecated( __METHOD__, '1.25' );
+ return 0;
}
/**
@@ -217,7 +221,6 @@ class SiteStats {
* @return int
*/
static function pagesInNs( $ns ) {
- wfProfileIn( __METHOD__ );
if ( !isset( self::$pageCount[$ns] ) ) {
$dbr = wfGetDB( DB_SLAVE );
self::$pageCount[$ns] = (int)$dbr->selectField(
@@ -227,7 +230,6 @@ class SiteStats {
__METHOD__
);
}
- wfProfileOut( __METHOD__ );
return self::$pageCount[$ns];
}
@@ -249,7 +251,6 @@ class SiteStats {
}
// Now check for underflow/overflow
foreach ( array(
- 'ss_total_views',
'ss_total_edits',
'ss_good_articles',
'ss_total_pages',
@@ -274,7 +275,7 @@ class SiteStatsInit {
// Various stats
private $mEdits = null, $mArticles = null, $mPages = null;
- private $mUsers = null, $mViews = null, $mFiles = null;
+ private $mUsers = null, $mFiles = null;
/**
* Constructor
@@ -349,15 +350,6 @@ class SiteStatsInit {
}
/**
- * Count views
- * @return int
- */
- public function views() {
- $this->mViews = $this->db->selectField( 'page', 'SUM(page_counter)', '', __METHOD__ );
- return $this->mViews;
- }
-
- /**
* Count total files
* @return int
*/
@@ -374,11 +366,10 @@ class SiteStatsInit {
* - Boolean: whether to use the master DB
* - DatabaseBase: database connection to use
* @param array $options Array of options, may contain the following values
- * - views Boolean: when true, do not update the number of page views (default: true)
* - activeUsers Boolean: whether to update the number of active users (default: false)
*/
public static function doAllAndCommit( $database, array $options = array() ) {
- $options += array( 'update' => false, 'views' => true, 'activeUsers' => false );
+ $options += array( 'update' => false, 'activeUsers' => false );
// Grab the object and count everything
$counter = new SiteStatsInit( $database );
@@ -389,11 +380,6 @@ class SiteStatsInit {
$counter->users();
$counter->files();
- // Only do views if we don't want to not count them
- if ( $options['views'] ) {
- $counter->views();
- }
-
$counter->refresh();
// Count active users if need be
@@ -403,8 +389,7 @@ class SiteStatsInit {
}
/**
- * Refresh site_stats. If you want ss_total_views to be updated, be sure to
- * call views() first.
+ * Refresh site_stats
*/
public function refresh() {
$values = array(
@@ -414,8 +399,6 @@ class SiteStatsInit {
'ss_total_pages' => ( $this->mPages === null ? $this->pages() : $this->mPages ),
'ss_users' => ( $this->mUsers === null ? $this->users() : $this->mUsers ),
'ss_images' => ( $this->mFiles === null ? $this->files() : $this->mFiles ),
- ) + (
- $this->mViews ? array( 'ss_total_views' => $this->mViews ) : array()
);
$dbw = wfGetDB( DB_MASTER );
diff --git a/includes/StatCounter.php b/includes/StatCounter.php
deleted file mode 100644
index 5fc8f2f5..00000000
--- a/includes/StatCounter.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-/**
- * @defgroup StatCounter StatCounter
- *
- * StatCounter is used to increment arbitrary keys for profiling reasons.
- * The key/values are persisted in several possible ways (see $wgStatsMethod).
- */
-
-/**
- * Aggregator for wfIncrStats() that batches updates per request.
- *
- * 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 StatCounter
- * @author Aaron Schulz
- */
-
-/**
- * Aggregator for wfIncrStats() that batches updates per request.
- * This avoids spamming the collector many times for the same key.
- *
- * @ingroup StatCounter
- */
-class StatCounter {
- /** @var array */
- protected $deltas = array(); // (key => count)
-
- /** @var Config */
- protected $config;
-
- protected function __construct( Config $config ) {
- $this->config = $config;
- }
-
- /**
- * @return StatCounter
- */
- public static function singleton() {
- static $instance = null;
- if ( !$instance ) {
- $instance = new self(
- ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
- );
- }
- return $instance;
- }
-
- /**
- * Increment a key by delta $count
- *
- * @param string $key
- * @param int $count
- * @return void
- */
- public function incr( $key, $count = 1 ) {
- $this->deltas[$key] = isset( $this->deltas[$key] ) ? $this->deltas[$key] : 0;
- $this->deltas[$key] += $count;
- if ( PHP_SAPI === 'cli' ) {
- $this->flush();
- }
- }
-
- /**
- * Flush all pending deltas to persistent storage
- *
- * @return void
- */
- public function flush() {
- $statsMethod = $this->config->get( 'StatsMethod' );
- $deltas = array_filter( $this->deltas ); // remove 0 valued entries
- if ( $statsMethod === 'udp' ) {
- $this->sendDeltasUDP( $deltas );
- } elseif ( $statsMethod === 'cache' ) {
- $this->sendDeltasMemc( $deltas );
- } else {
- // disabled
- }
- $this->deltas = array();
- }
-
- /**
- * @param array $deltas
- * @return void
- */
- protected function sendDeltasUDP( array $deltas ) {
- $aggregateStatsID = $this->config->get( 'AggregateStatsID' );
- $id = strlen( $aggregateStatsID ) ? $aggregateStatsID : wfWikiID();
-
- $lines = array();
- foreach ( $deltas as $key => $count ) {
- $lines[] = sprintf( $this->config->get( 'StatsFormatString' ), $id, $count, $key );
- }
-
- if ( count( $lines ) ) {
- static $socket = null;
- if ( !$socket ) {
- $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
- }
- $packet = '';
- $packets = array();
- foreach ( $lines as $line ) {
- if ( ( strlen( $packet ) + strlen( $line ) ) > 1450 ) {
- $packets[] = $packet;
- $packet = '';
- }
- $packet .= $line;
- }
- if ( $packet != '' ) {
- $packets[] = $packet;
- }
- foreach ( $packets as $packet ) {
- wfSuppressWarnings();
- socket_sendto(
- $socket,
- $packet,
- strlen( $packet ),
- 0,
- $this->config->get( 'UDPProfilerHost' ),
- $this->config->get( 'UDPProfilerPort' )
- );
- wfRestoreWarnings();
- }
- }
- }
-
- /**
- * @param array $deltas
- * @return void
- */
- protected function sendDeltasMemc( array $deltas ) {
- global $wgMemc;
-
- foreach ( $deltas as $key => $count ) {
- $ckey = wfMemcKey( 'stats', $key );
- if ( $wgMemc->incr( $ckey, $count ) === null ) {
- $wgMemc->add( $ckey, $count );
- }
- }
- }
-}
diff --git a/includes/Status.php b/includes/Status.php
index 1a72968b..cd10258d 100644
--- a/includes/Status.php
+++ b/includes/Status.php
@@ -38,41 +38,58 @@
* so that a lack of error-handling will be explicit.
*/
class Status {
- /** @var bool */
- public $ok = true;
+ /** @var StatusValue */
+ protected $sv;
/** @var mixed */
public $value;
-
- /** Counters for batch operations */
- /** @var int */
+ /** @var array Map of (key => bool) to indicate success of each part of batch operations */
+ public $success = array();
+ /** @var int Counter for batch operations */
public $successCount = 0;
-
- /** @var int */
+ /** @var int Counter for batch operations */
public $failCount = 0;
- /** Array to indicate which items of the batch operations were successful */
- /** @var array */
- public $success = array();
-
- /** @var array */
- public $errors = array();
-
/** @var callable */
public $cleanCallback = false;
/**
+ * @param StatusValue $sv [optional]
+ */
+ public function __construct( StatusValue $sv = null ) {
+ $this->sv = ( $sv === null ) ? new StatusValue() : $sv;
+ // B/C field aliases
+ $this->value =& $this->sv->value;
+ $this->successCount =& $this->sv->successCount;
+ $this->failCount =& $this->sv->failCount;
+ $this->success =& $this->sv->success;
+ }
+
+ /**
+ * Succinct helper method to wrap a StatusValue
+ *
+ * This is is useful when formatting StatusValue objects:
+ * <code>
+ * $this->getOutput()->addHtml( Status::wrap( $sv )->getHTML() );
+ * </code>
+ *
+ * @param StatusValue|Status $sv
+ * @return Status
+ */
+ public static function wrap( $sv ) {
+ return $sv instanceof Status ? $sv : new self( $sv );
+ }
+
+ /**
* Factory function for fatal errors
*
* @param string|Message $message Message name or object
* @return Status
*/
- static function newFatal( $message /*, parameters...*/ ) {
- $params = func_get_args();
- $result = new self;
- call_user_func_array( array( &$result, 'error' ), $params );
- $result->ok = false;
- return $result;
+ public static function newFatal( $message /*, parameters...*/ ) {
+ return new self( call_user_func_array(
+ array( 'StatusValue', 'newFatal' ), func_get_args()
+ ) );
}
/**
@@ -81,10 +98,11 @@ class Status {
* @param mixed $value
* @return Status
*/
- static function newGood( $value = null ) {
- $result = new self;
- $result->value = $value;
- return $result;
+ public static function newGood( $value = null ) {
+ $sv = new StatusValue();
+ $sv->value = $value;
+
+ return new self( $sv );
}
/**
@@ -94,8 +112,7 @@ class Status {
* @param mixed $value
*/
public function setResult( $ok, $value = null ) {
- $this->ok = $ok;
- $this->value = $value;
+ $this->sv->setResult( $ok, $value );
}
/**
@@ -105,7 +122,7 @@ class Status {
* @return bool
*/
public function isGood() {
- return $this->ok && !$this->errors;
+ return $this->sv->isGood();
}
/**
@@ -114,7 +131,7 @@ class Status {
* @return bool
*/
public function isOK() {
- return $this->ok;
+ return $this->sv->isOK();
}
/**
@@ -123,11 +140,7 @@ class Status {
* @param string|Message $message Message name or object
*/
public function warning( $message /*, parameters... */ ) {
- $params = array_slice( func_get_args(), 1 );
- $this->errors[] = array(
- 'type' => 'warning',
- 'message' => $message,
- 'params' => $params );
+ call_user_func_array( array( $this->sv, 'warning' ), func_get_args() );
}
/**
@@ -137,11 +150,7 @@ class Status {
* @param string|Message $message Message name or object
*/
public function error( $message /*, parameters... */ ) {
- $params = array_slice( func_get_args(), 1 );
- $this->errors[] = array(
- 'type' => 'error',
- 'message' => $message,
- 'params' => $params );
+ call_user_func_array( array( $this->sv, 'error' ), func_get_args() );
}
/**
@@ -151,26 +160,14 @@ class Status {
* @param string|Message $message Message name or object
*/
public function fatal( $message /*, parameters... */ ) {
- $params = array_slice( func_get_args(), 1 );
- $this->errors[] = array(
- 'type' => 'error',
- 'message' => $message,
- 'params' => $params );
- $this->ok = false;
- }
-
- /**
- * Sanitize the callback parameter on wakeup, to avoid arbitrary execution.
- */
- public function __wakeup() {
- $this->cleanCallback = false;
+ call_user_func_array( array( $this->sv, 'fatal' ), func_get_args() );
}
/**
* @param array $params
* @return array
*/
- protected function cleanParams( $params ) {
+ protected function cleanParams( array $params ) {
if ( !$this->cleanCallback ) {
return $params;
}
@@ -184,30 +181,32 @@ class Status {
/**
* Get the error list as a wikitext formatted list
*
- * @param string $shortContext A short enclosing context message name, to
+ * @param string|bool $shortContext A short enclosing context message name, to
* be used when there is a single error
- * @param string $longContext A long enclosing context message name, for a list
+ * @param string|bool $longContext A long enclosing context message name, for a list
* @return string
*/
public function getWikiText( $shortContext = false, $longContext = false ) {
- if ( count( $this->errors ) == 0 ) {
- if ( $this->ok ) {
- $this->fatal( 'internalerror_info',
+ $rawErrors = $this->sv->getErrors();
+ if ( count( $rawErrors ) == 0 ) {
+ if ( $this->sv->isOK() ) {
+ $this->sv->fatal( 'internalerror_info',
__METHOD__ . " called for a good result, this is incorrect\n" );
} else {
- $this->fatal( 'internalerror_info',
+ $this->sv->fatal( 'internalerror_info',
__METHOD__ . ": Invalid result object: no error text but not OK\n" );
}
+ $rawErrors = $this->sv->getErrors(); // just added a fatal
}
- if ( count( $this->errors ) == 1 ) {
- $s = $this->getErrorMessage( $this->errors[0] )->plain();
+ if ( count( $rawErrors ) == 1 ) {
+ $s = $this->getErrorMessage( $rawErrors[0] )->plain();
if ( $shortContext ) {
$s = wfMessage( $shortContext, $s )->plain();
} elseif ( $longContext ) {
$s = wfMessage( $longContext, "* $s\n" )->plain();
}
} else {
- $errors = $this->getErrorMessageArray( $this->errors );
+ $errors = $this->getErrorMessageArray( $rawErrors );
foreach ( $errors as &$error ) {
$error = $error->plain();
}
@@ -232,17 +231,19 @@ class Status {
* @return Message
*/
public function getMessage( $shortContext = false, $longContext = false ) {
- if ( count( $this->errors ) == 0 ) {
- if ( $this->ok ) {
- $this->fatal( 'internalerror_info',
+ $rawErrors = $this->sv->getErrors();
+ if ( count( $rawErrors ) == 0 ) {
+ if ( $this->sv->isOK() ) {
+ $this->sv->fatal( 'internalerror_info',
__METHOD__ . " called for a good result, this is incorrect\n" );
} else {
- $this->fatal( 'internalerror_info',
+ $this->sv->fatal( 'internalerror_info',
__METHOD__ . ": Invalid result object: no error text but not OK\n" );
}
+ $rawErrors = $this->sv->getErrors(); // just added a fatal
}
- if ( count( $this->errors ) == 1 ) {
- $s = $this->getErrorMessage( $this->errors[0] );
+ if ( count( $rawErrors ) == 1 ) {
+ $s = $this->getErrorMessage( $rawErrors[0] );
if ( $shortContext ) {
$s = wfMessage( $shortContext, $s );
} elseif ( $longContext ) {
@@ -251,7 +252,7 @@ class Status {
$s = wfMessage( $longContext, $wrapper );
}
} else {
- $msgs = $this->getErrorMessageArray( $this->errors );
+ $msgs = $this->getErrorMessageArray( $rawErrors );
$msgCount = count( $msgs );
if ( $shortContext ) {
@@ -330,13 +331,7 @@ class Status {
* @param bool $overwriteValue Whether to override the "value" member
*/
public function merge( $other, $overwriteValue = false ) {
- $this->errors = array_merge( $this->errors, $other->errors );
- $this->ok = $this->ok && $other->ok;
- if ( $overwriteValue ) {
- $this->value = $other->value;
- }
- $this->successCount += $other->successCount;
- $this->failCount += $other->failCount;
+ $this->sv->merge( $other->sv, $overwriteValue );
}
/**
@@ -344,9 +339,10 @@ class Status {
*
* @return array A list in which each entry is an array with a message key as its first element.
* The remaining array elements are the message parameters.
+ * @deprecated 1.25
*/
public function getErrorsArray() {
- return $this->getStatusArray( "error" );
+ return $this->getStatusArray( 'error' );
}
/**
@@ -354,21 +350,26 @@ class Status {
*
* @return array A list in which each entry is an array with a message key as its first element.
* The remaining array elements are the message parameters.
+ * @deprecated 1.25
*/
public function getWarningsArray() {
- return $this->getStatusArray( "warning" );
+ return $this->getStatusArray( 'warning' );
}
/**
- * Returns a list of status messages of the given type
+ * Returns a list of status messages of the given type (or all if false)
+ *
+ * @note: this handles RawMessage poorly
+ *
* @param string $type
* @return array
*/
- protected function getStatusArray( $type ) {
+ protected function getStatusArray( $type = false ) {
$result = array();
- foreach ( $this->errors as $error ) {
- if ( $error['type'] === $type ) {
- if ( $error['message'] instanceof Message ) {
+
+ foreach ( $this->sv->getErrors() as $error ) {
+ if ( $type === false || $error['type'] === $type ) {
+ if ( $error['message'] instanceof MessageSpecifier ) {
$result[] = array_merge(
array( $error['message']->getKey() ),
$error['message']->getParams()
@@ -393,13 +394,7 @@ class Status {
* @return array
*/
public function getErrorsByType( $type ) {
- $result = array();
- foreach ( $this->errors as $error ) {
- if ( $error['type'] === $type ) {
- $result[] = $error;
- }
- }
- return $result;
+ return $this->sv->getErrorsByType( $type );
}
/**
@@ -410,19 +405,7 @@ class Status {
* @return bool
*/
public function hasMessage( $message ) {
- if ( $message instanceof Message ) {
- $message = $message->getKey();
- }
- foreach ( $this->errors as $error ) {
- if ( $error['message'] instanceof Message
- && $error['message']->getKey() === $message
- ) {
- return true;
- } elseif ( $error['message'] === $message ) {
- return true;
- }
- }
- return false;
+ return $this->sv->hasMessage( $message );
}
/**
@@ -437,20 +420,67 @@ class Status {
* @return bool Return true if the replacement was done, false otherwise.
*/
public function replaceMessage( $source, $dest ) {
- $replaced = false;
- foreach ( $this->errors as $index => $error ) {
- if ( $error['message'] === $source ) {
- $this->errors[$index]['message'] = $dest;
- $replaced = true;
- }
- }
- return $replaced;
+ return $this->sv->replaceMessage( $source, $dest );
}
/**
* @return mixed
*/
public function getValue() {
- return $this->value;
+ return $this->sv->getValue();
+ }
+
+ /**
+ * Backwards compatibility logic
+ *
+ * @param string $name
+ */
+ function __get( $name ) {
+ if ( $name === 'ok' ) {
+ return $this->sv->isOK();
+ } elseif ( $name === 'errors' ) {
+ return $this->sv->getErrors();
+ }
+ throw new Exception( "Cannot get '$name' property." );
+ }
+
+ /**
+ * Backwards compatibility logic
+ *
+ * @param string $name
+ * @param mixed $value
+ */
+ function __set( $name, $value ) {
+ if ( $name === 'ok' ) {
+ $this->sv->setOK( $value );
+ } elseif ( !property_exists( $this, $name ) ) {
+ // Caller is using undeclared ad-hoc properties
+ $this->$name = $value;
+ } else {
+ throw new Exception( "Cannot set '$name' property." );
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString() {
+ return $this->sv->__toString();
+ }
+
+ /**
+ * Don't save the callback when serializing, because Closures can't be
+ * serialized and we're going to clear it in __wakeup anyway.
+ */
+ function __sleep() {
+ $keys = array_keys( get_object_vars( $this ) );
+ return array_diff( $keys, array( 'cleanCallback' ) );
+ }
+
+ /**
+ * Sanitize the callback parameter on wakeup, to avoid arbitrary execution.
+ */
+ function __wakeup() {
+ $this->cleanCallback = false;
}
}
diff --git a/includes/StreamFile.php b/includes/StreamFile.php
index 25031501..a52b25b0 100644
--- a/includes/StreamFile.php
+++ b/includes/StreamFile.php
@@ -39,10 +39,8 @@ class StreamFile {
* @return bool Success
*/
public static function stream( $fname, $headers = array(), $sendErrors = true ) {
- wfProfileIn( __METHOD__ );
if ( FileBackend::isStoragePath( $fname ) ) { // sanity
- wfProfileOut( __METHOD__ );
throw new MWException( __FUNCTION__ . " given storage path '$fname'." );
}
@@ -54,14 +52,11 @@ class StreamFile {
if ( $res == self::NOT_MODIFIED ) {
$ok = true; // use client cache
} elseif ( $res == self::READY_STREAM ) {
- wfProfileIn( __METHOD__ . '-send' );
$ok = readfile( $fname );
- wfProfileOut( __METHOD__ . '-send' );
} else {
$ok = false; // failed
}
- wfProfileOut( __METHOD__ );
return $ok;
}
diff --git a/includes/StubObject.php b/includes/StubObject.php
index 8878660b..2dfcdc2f 100644
--- a/includes/StubObject.php
+++ b/includes/StubObject.php
@@ -110,7 +110,11 @@ class StubObject {
* @return object
*/
public function _newObject() {
- return MWFunction::newObj( $this->class, $this->params );
+ return ObjectFactory::getObjectFromSpec( array(
+ 'class' => $this->class,
+ 'args' => $this->params,
+ 'closure_expansion' => false,
+ ) );
}
/**
@@ -146,10 +150,8 @@ class StubObject {
if ( get_class( $GLOBALS[$this->global] ) != $this->class ) {
$fname = __METHOD__ . '-' . $this->global;
- wfProfileIn( $fname );
$caller = wfGetCaller( $level );
if ( ++$recursionLevel > 2 ) {
- wfProfileOut( $fname );
throw new MWException( "Unstub loop detected on call of "
. "\${$this->global}->$name from $caller\n" );
}
@@ -157,7 +159,6 @@ class StubObject {
. "\${$this->global}::$name from $caller\n" );
$GLOBALS[$this->global] = $this->_newObject();
--$recursionLevel;
- wfProfileOut( $fname );
return $GLOBALS[$this->global];
}
}
@@ -179,6 +180,24 @@ class StubUserLang extends StubObject {
}
/**
+ * Call Language::findVariantLink after unstubbing $wgLang.
+ *
+ * This method is implemented with a full signature rather than relying on
+ * __call so that the pass-by-reference signature of the proxied method is
+ * honored.
+ *
+ * @param string &$link The name of the link
+ * @param Title &$nt The title object of the link
+ * @param bool $ignoreOtherCond To disable other conditions when
+ * we need to transclude a template or update a category's link
+ */
+ public function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
+ global $wgLang;
+ $this->_unstub( 'findVariantLink', 3 );
+ return $wgLang->findVariantLink( $link, $nt, $ignoreOtherCond );
+ }
+
+ /**
* @return Language
*/
public function _newObject() {
diff --git a/includes/TemplateParser.php b/includes/TemplateParser.php
new file mode 100644
index 00000000..3de70fa2
--- /dev/null
+++ b/includes/TemplateParser.php
@@ -0,0 +1,201 @@
+<?php
+/**
+ * Handles compiling Mustache templates into PHP rendering functions
+ *
+ * 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
+ * @since 1.25
+ */
+class TemplateParser {
+ /**
+ * @var string The path to the Mustache templates
+ */
+ protected $templateDir;
+
+ /**
+ * @var callable[] Array of cached rendering functions
+ */
+ protected $renderers;
+
+ /**
+ * @var bool Always compile template files
+ */
+ protected $forceRecompile = false;
+
+ /**
+ * @param string $templateDir
+ * @param boolean $forceRecompile
+ */
+ public function __construct( $templateDir = null, $forceRecompile = false ) {
+ $this->templateDir = $templateDir ? $templateDir : __DIR__ . '/templates';
+ $this->forceRecompile = $forceRecompile;
+ }
+
+ /**
+ * Constructs the location of the the source Mustache template
+ * @param string $templateName The name of the template
+ * @return string
+ * @throws UnexpectedValueException Disallows upwards directory traversal via $templateName
+ */
+ protected function getTemplateFilename( $templateName ) {
+ // Prevent upwards directory traversal using same methods as Title::secureAndSplit
+ if (
+ strpos( $templateName, '.' ) !== false &&
+ (
+ $templateName === '.' || $templateName === '..' ||
+ strpos( $templateName, './' ) === 0 ||
+ strpos( $templateName, '../' ) === 0 ||
+ strpos( $templateName, '/./' ) !== false ||
+ strpos( $templateName, '/../' ) !== false ||
+ substr( $templateName, -2 ) === '/.' ||
+ substr( $templateName, -3 ) === '/..'
+ )
+ ) {
+ throw new UnexpectedValueException( "Malformed \$templateName: $templateName" );
+ }
+
+ return "{$this->templateDir}/{$templateName}.mustache";
+ }
+
+ /**
+ * Returns a given template function if found, otherwise throws an exception.
+ * @param string $templateName The name of the template (without file suffix)
+ * @return callable
+ * @throws RuntimeException
+ */
+ protected function getTemplate( $templateName ) {
+ // If a renderer has already been defined for this template, reuse it
+ if ( isset( $this->renderers[$templateName] ) && is_callable( $this->renderers[$templateName] ) ) {
+ return $this->renderers[$templateName];
+ }
+
+ $filename = $this->getTemplateFilename( $templateName );
+
+ if ( !file_exists( $filename ) ) {
+ throw new RuntimeException( "Could not locate template: {$filename}" );
+ }
+
+ // Read the template file
+ $fileContents = file_get_contents( $filename );
+
+ // Generate a quick hash for cache invalidation
+ $fastHash = md5( $fileContents );
+
+ // Fetch a secret key for building a keyed hash of the PHP code
+ $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+ $secretKey = $config->get( 'SecretKey' );
+
+ if ( $secretKey ) {
+ // See if the compiled PHP code is stored in cache.
+ // CACHE_ACCEL throws an exception if no suitable object cache is present, so fall
+ // back to CACHE_ANYTHING.
+ $cache = ObjectCache::newAccelerator( array(), CACHE_ANYTHING );
+ $key = wfMemcKey( 'template', $templateName, $fastHash );
+ $code = $this->forceRecompile ? null : $cache->get( $key );
+
+ if ( !$code ) {
+ $code = $this->compileForEval( $fileContents, $filename );
+
+ // Prefix the cached code with a keyed hash (64 hex chars) as an integrity check
+ $cache->set( $key, hash_hmac( 'sha256', $code, $secretKey ) . $code );
+ } else {
+ // Verify the integrity of the cached PHP code
+ $keyedHash = substr( $code, 0, 64 );
+ $code = substr( $code, 64 );
+ if ( $keyedHash !== hash_hmac( 'sha256', $code, $secretKey ) ) {
+ // Generate a notice if integrity check fails
+ trigger_error( "Template failed integrity check: {$filename}" );
+ }
+ }
+ // If there is no secret key available, don't use cache
+ } else {
+ $code = $this->compileForEval( $fileContents, $filename );
+ }
+
+ $renderer = eval( $code );
+ if ( !is_callable( $renderer ) ) {
+ throw new RuntimeException( "Requested template, {$templateName}, is not callable" );
+ }
+ return $this->renderers[$templateName] = $renderer;
+ }
+
+ /**
+ * Wrapper for compile() function that verifies successful compilation and strips
+ * out the '<?php' part so that the code is ready for eval()
+ * @param string $fileContents Mustache code
+ * @param string $filename Name of the template
+ * @return string PHP code (without '<?php')
+ * @throws RuntimeException
+ */
+ protected function compileForEval( $fileContents, $filename ) {
+ // Compile the template into PHP code
+ $code = $this->compile( $fileContents );
+
+ if ( !$code ) {
+ throw new RuntimeException( "Could not compile template: {$filename}" );
+ }
+
+ // Strip the "<?php" added by lightncandy so that it can be eval()ed
+ if ( substr( $code, 0, 5 ) === '<?php' ) {
+ $code = substr( $code, 5 );
+ }
+
+ return $code;
+ }
+
+ /**
+ * Compile the Mustache code into PHP code using LightnCandy
+ * @param string $code Mustache code
+ * @return string PHP code (with '<?php')
+ * @throws RuntimeException
+ */
+ protected function compile( $code ) {
+ if ( !class_exists( 'LightnCandy' ) ) {
+ throw new RuntimeException( 'LightnCandy class not defined' );
+ }
+ return LightnCandy::compile(
+ $code,
+ array(
+ // Do not add more flags here without discussion.
+ // If you do add more flags, be sure to update unit tests as well.
+ 'flags' => LightnCandy::FLAG_ERROR_EXCEPTION
+ )
+ );
+ }
+
+ /**
+ * Returns HTML for a given template by calling the template function with the given args
+ *
+ * @code
+ * echo $templateParser->processTemplate(
+ * 'ExampleTemplate',
+ * array(
+ * 'username' => $user->getName(),
+ * 'message' => 'Hello!'
+ * )
+ * );
+ * @endcode
+ * @param string $templateName The name of the template
+ * @param mixed $args
+ * @param array $scopes
+ * @return string
+ */
+ public function processTemplate( $templateName, $args, array $scopes = array() ) {
+ $template = $this->getTemplate( $templateName );
+ return call_user_func( $template, $args, $scopes );
+ }
+}
diff --git a/includes/Title.php b/includes/Title.php
index 74d78ba5..d8976635 100644
--- a/includes/Title.php
+++ b/includes/Title.php
@@ -29,8 +29,6 @@
* however, it does so inefficiently.
* @note Consider using a TitleValue object instead. TitleValue is more lightweight
* and does not rely on global state or the database.
- *
- * @internal documentation reviewed 15 Mar 2010
*/
class Title {
/** @var MapCacheLRU */
@@ -258,12 +256,14 @@ class Title {
* by a prefix. If you want to force a specific namespace even if
* $text might begin with a namespace prefix, use makeTitle() or
* makeTitleSafe().
- * @throws MWException
+ * @throws InvalidArgumentException
* @return Title|null Title or null on an error.
*/
public static function newFromText( $text, $defaultNamespace = NS_MAIN ) {
if ( is_object( $text ) ) {
- throw new MWException( 'Title::newFromText given an object' );
+ throw new InvalidArgumentException( '$text must be a string.' );
+ } elseif ( !is_string( $text ) ) {
+ wfWarn( __METHOD__ . ': $text must be a string. This will throw an InvalidArgumentException in future.' );
}
$cache = self::getTitleCache();
@@ -503,7 +503,7 @@ class Title {
}
$t = new Title();
- $t->mDbkeyform = Title::makeName( $ns, $title, $fragment, $interwiki );
+ $t->mDbkeyform = Title::makeName( $ns, $title, $fragment, $interwiki, true );
if ( $t->secureAndSplit() ) {
return $t;
} else {
@@ -614,28 +614,13 @@ class Title {
* Note that this doesn't pick up many things that could be wrong with titles, but that
* replacing this regex with something valid will make many titles valid.
*
- * @todo move this into MediaWikiTitleCodec
+ * @deprecated since 1.25, use MediaWikiTitleCodec::getTitleInvalidRegex() instead
*
* @return string Regex string
*/
static function getTitleInvalidRegex() {
- static $rxTc = false;
- if ( !$rxTc ) {
- # Matching titles will be held as illegal.
- $rxTc = '/' .
- # Any character not allowed is forbidden...
- '[^' . self::legalChars() . ']' .
- # URL percent encoding sequences interfere with the ability
- # to round-trip titles -- you can't link to them consistently.
- '|%[0-9A-Fa-f]{2}' .
- # XML/HTML character references produce similar issues.
- '|&[A-Za-z0-9\x80-\xff]+;' .
- '|&#[0-9]+;' .
- '|&#x[0-9A-Fa-f]+;' .
- '/S';
- }
-
- return $rxTc;
+ wfDeprecated( __METHOD__, '1.25' );
+ return MediaWikiTitleCodec::getTitleInvalidRegex();
}
/**
@@ -747,12 +732,20 @@ class Title {
* @param string $title The DB key form the title
* @param string $fragment The link fragment (after the "#")
* @param string $interwiki The interwiki prefix
+ * @param bool $canoncialNamespace If true, use the canonical name for
+ * $ns instead of the localized version.
* @return string The prefixed form of the title
*/
- public static function makeName( $ns, $title, $fragment = '', $interwiki = '' ) {
+ public static function makeName( $ns, $title, $fragment = '', $interwiki = '',
+ $canoncialNamespace = false
+ ) {
global $wgContLang;
- $namespace = $wgContLang->getNsText( $ns );
+ if ( $canoncialNamespace ) {
+ $namespace = MWNamespace::getCanonicalName( $ns );
+ } else {
+ $namespace = $wgContLang->getNsText( $ns );
+ }
$name = $namespace == '' ? $title : "$namespace:$title";
if ( strval( $interwiki ) != '' ) {
$name = "$interwiki:$name";
@@ -795,7 +788,8 @@ class Title {
/**
* Determine whether the object refers to a page within
- * this project.
+ * this project (either this wiki or a wiki with a local
+ * interwiki, see https://www.mediawiki.org/wiki/Manual:Interwiki_table#iw_local )
*
* @return bool True if this is an in-project interwiki link or a wikilink, false otherwise
*/
@@ -948,9 +942,9 @@ class Title {
* @return string Content model id
*/
public function getContentModel( $flags = 0 ) {
- # Calling getArticleID() loads the field from cache as needed
if ( !$this->mContentModel && $this->getArticleID( $flags ) ) {
$linkCache = LinkCache::singleton();
+ $linkCache->addLinkObj( $this ); # in case we already had an article ID
$this->mContentModel = $linkCache->getGoodLinkFieldObj( $this, 'model' );
}
@@ -1035,7 +1029,6 @@ class Title {
* Is this in a namespace that allows actual pages?
*
* @return bool
- * @internal note -- uses hardcoded namespace index instead of constants
*/
public function canExist() {
return $this->mNamespace >= NS_MAIN;
@@ -1171,7 +1164,7 @@ class Title {
}
$result = true;
- wfRunHooks( 'TitleIsMovable', array( $this, &$result ) );
+ Hooks::run( 'TitleIsMovable', array( $this, &$result ) );
return $result;
}
@@ -1241,9 +1234,9 @@ class Title {
# @note This hook is also called in ContentHandler::getDefaultModel.
# It's called here again to make sure hook functions can force this
- # method to return true even outside the mediawiki namespace.
+ # method to return true even outside the MediaWiki namespace.
- wfRunHooks( 'TitleIsCssOrJsPage', array( $this, &$isCssOrJsPage ) );
+ Hooks::run( 'TitleIsCssOrJsPage', array( $this, &$isCssOrJsPage ), '1.25' );
return $isCssOrJsPage;
}
@@ -1327,6 +1320,25 @@ class Title {
}
/**
+ * Get the other title for this page, if this is a subject page
+ * get the talk page, if it is a subject page get the talk page
+ *
+ * @since 1.25
+ * @throws MWException
+ * @return Title
+ */
+ public function getOtherPage() {
+ if ( $this->isSpecialPage() ) {
+ throw new MWException( 'Special pages cannot have other pages' );
+ }
+ if ( $this->isTalkPage() ) {
+ return $this->getSubjectPage();
+ } else {
+ return $this->getTalkPage();
+ }
+ }
+
+ /**
* Get the default namespace index, for when there is no namespace
*
* @return int Default namespace index
@@ -1650,7 +1662,7 @@ class Title {
# Finally, add the fragment.
$url .= $this->getFragmentForURL();
- wfRunHooks( 'GetFullURL', array( &$this, &$url, $query ) );
+ Hooks::run( 'GetFullURL', array( &$this, &$url, $query ) );
return $url;
}
@@ -1696,7 +1708,7 @@ class Title {
$dbkey = wfUrlencode( $this->getPrefixedDBkey() );
if ( $query == '' ) {
$url = str_replace( '$1', $dbkey, $wgArticlePath );
- wfRunHooks( 'GetLocalURL::Article', array( &$this, &$url ) );
+ Hooks::run( 'GetLocalURL::Article', array( &$this, &$url ) );
} else {
global $wgVariantArticlePath, $wgActionPaths, $wgContLang;
$url = false;
@@ -1741,7 +1753,7 @@ class Title {
}
}
- wfRunHooks( 'GetLocalURL::Internal', array( &$this, &$url, $query ) );
+ Hooks::run( 'GetLocalURL::Internal', array( &$this, &$url, $query ) );
// @todo FIXME: This causes breakage in various places when we
// actually expected a local URL and end up with dupe prefixes.
@@ -1749,7 +1761,7 @@ class Title {
$url = $wgServer . $url;
}
}
- wfRunHooks( 'GetLocalURL', array( &$this, &$url, $query ) );
+ Hooks::run( 'GetLocalURL', array( &$this, &$url, $query ) );
return $url;
}
@@ -1770,7 +1782,6 @@ class Title {
* @return string The URL
*/
public function getLinkURL( $query = '', $query2 = false, $proto = PROTO_RELATIVE ) {
- wfProfileIn( __METHOD__ );
if ( $this->isExternal() || $proto !== PROTO_RELATIVE ) {
$ret = $this->getFullURL( $query, $query2, $proto );
} elseif ( $this->getPrefixedText() === '' && $this->hasFragment() ) {
@@ -1778,7 +1789,6 @@ class Title {
} else {
$ret = $this->getLocalURL( $query, $query2 ) . $this->getFragmentForURL();
}
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -1799,7 +1809,7 @@ class Title {
$query = self::fixUrlQueryArgs( $query, $query2 );
$server = $wgInternalServer !== false ? $wgInternalServer : $wgServer;
$url = wfExpandUrl( $server . $this->getLocalURL( $query ), PROTO_HTTP );
- wfRunHooks( 'GetInternalURL', array( &$this, &$url, $query ) );
+ Hooks::run( 'GetInternalURL', array( &$this, &$url, $query ) );
return $url;
}
@@ -1817,7 +1827,7 @@ class Title {
public function getCanonicalURL( $query = '', $query2 = false ) {
$query = self::fixUrlQueryArgs( $query, $query2 );
$url = wfExpandUrl( $this->getLocalURL( $query ) . $this->getFragmentForURL(), PROTO_CANONICAL );
- wfRunHooks( 'GetCanonicalURL', array( &$this, &$url, $query ) );
+ Hooks::run( 'GetCanonicalURL', array( &$this, &$url, $query ) );
return $url;
}
@@ -1878,18 +1888,16 @@ class Title {
* @param string $action Action that permission needs to be checked for
* @param User $user User to check (since 1.19); $wgUser will be used if not
* provided.
- * @param bool $doExpensiveQueries Set this to false to avoid doing
- * unnecessary queries.
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @return bool
*/
- public function userCan( $action, $user = null, $doExpensiveQueries = true ) {
+ public function userCan( $action, $user = null, $rigor = 'secure' ) {
if ( !$user instanceof User ) {
global $wgUser;
$user = $wgUser;
}
- return !count( $this->getUserPermissionsErrorsInternal(
- $action, $user, $doExpensiveQueries, true ) );
+ return !count( $this->getUserPermissionsErrorsInternal( $action, $user, $rigor, true ) );
}
/**
@@ -1899,16 +1907,19 @@ class Title {
*
* @param string $action Action that permission needs to be checked for
* @param User $user User to check
- * @param bool $doExpensiveQueries Set this to false to avoid doing unnecessary
- * queries by skipping checks for cascading protections and user blocks.
+ * @param string $rigor One of (quick,full,secure)
+ * - quick : does cheap permission checks from slaves (usable for GUI creation)
+ * - full : does cheap and expensive checks possibly from a slave
+ * - secure : does cheap and expensive checks, using the master as needed
+ * @param bool $short Set this to true to stop after the first permission error.
* @param array $ignoreErrors Array of Strings Set this to a list of message keys
* whose corresponding errors may be ignored.
* @return array Array of arguments to wfMessage to explain permissions problems.
*/
- public function getUserPermissionsErrors( $action, $user, $doExpensiveQueries = true,
- $ignoreErrors = array()
+ public function getUserPermissionsErrors(
+ $action, $user, $rigor = 'secure', $ignoreErrors = array()
) {
- $errors = $this->getUserPermissionsErrorsInternal( $action, $user, $doExpensiveQueries );
+ $errors = $this->getUserPermissionsErrorsInternal( $action, $user, $rigor );
// Remove the errors being ignored.
foreach ( $errors as $index => $error ) {
@@ -1928,16 +1939,14 @@ class Title {
* @param string $action The action to check
* @param User $user User to check
* @param array $errors List of current errors
- * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @param bool $short Short circuit on first error
*
* @return array List of errors
*/
- private function checkQuickPermissions( $action, $user, $errors,
- $doExpensiveQueries, $short
- ) {
- if ( !wfRunHooks( 'TitleQuickPermissions',
- array( $this, $user, $action, &$errors, $doExpensiveQueries, $short ) )
+ private function checkQuickPermissions( $action, $user, $errors, $rigor, $short ) {
+ if ( !Hooks::run( 'TitleQuickPermissions',
+ array( $this, $user, $action, &$errors, ( $rigor !== 'quick' ), $short ) )
) {
return $errors;
}
@@ -2028,26 +2037,26 @@ class Title {
* @param string $action The action to check
* @param User $user User to check
* @param array $errors List of current errors
- * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @param bool $short Short circuit on first error
*
* @return array List of errors
*/
- private function checkPermissionHooks( $action, $user, $errors, $doExpensiveQueries, $short ) {
+ private function checkPermissionHooks( $action, $user, $errors, $rigor, $short ) {
// Use getUserPermissionsErrors instead
$result = '';
- if ( !wfRunHooks( 'userCan', array( &$this, &$user, $action, &$result ) ) ) {
+ if ( !Hooks::run( 'userCan', array( &$this, &$user, $action, &$result ) ) ) {
return $result ? array() : array( array( 'badaccess-group0' ) );
}
// Check getUserPermissionsErrors hook
- if ( !wfRunHooks( 'getUserPermissionsErrors', array( &$this, &$user, $action, &$result ) ) ) {
+ if ( !Hooks::run( 'getUserPermissionsErrors', array( &$this, &$user, $action, &$result ) ) ) {
$errors = $this->resultToError( $errors, $result );
}
// Check getUserPermissionsErrorsExpensive hook
if (
- $doExpensiveQueries
+ $rigor !== 'quick'
&& !( $short && count( $errors ) > 0 )
- && !wfRunHooks( 'getUserPermissionsErrorsExpensive', array( &$this, &$user, $action, &$result ) )
+ && !Hooks::run( 'getUserPermissionsErrorsExpensive', array( &$this, &$user, $action, &$result ) )
) {
$errors = $this->resultToError( $errors, $result );
}
@@ -2061,14 +2070,12 @@ class Title {
* @param string $action The action to check
* @param User $user User to check
* @param array $errors List of current errors
- * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @param bool $short Short circuit on first error
*
* @return array List of errors
*/
- private function checkSpecialsAndNSPermissions( $action, $user, $errors,
- $doExpensiveQueries, $short
- ) {
+ private function checkSpecialsAndNSPermissions( $action, $user, $errors, $rigor, $short ) {
# Only 'createaccount' can be performed on special pages,
# which don't actually exist in the DB.
if ( NS_SPECIAL == $this->mNamespace && $action !== 'createaccount' ) {
@@ -2092,12 +2099,12 @@ class Title {
* @param string $action The action to check
* @param User $user User to check
* @param array $errors List of current errors
- * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @param bool $short Short circuit on first error
*
* @return array List of errors
*/
- private function checkCSSandJSPermissions( $action, $user, $errors, $doExpensiveQueries, $short ) {
+ private function checkCSSandJSPermissions( $action, $user, $errors, $rigor, $short ) {
# Protect css/js subpages of user pages
# XXX: this might be better using restrictions
# XXX: right 'editusercssjs' is deprecated, for backward compatibility only
@@ -2128,12 +2135,12 @@ class Title {
* @param string $action The action to check
* @param User $user User to check
* @param array $errors List of current errors
- * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @param bool $short Short circuit on first error
*
* @return array List of errors
*/
- private function checkPageRestrictions( $action, $user, $errors, $doExpensiveQueries, $short ) {
+ private function checkPageRestrictions( $action, $user, $errors, $rigor, $short ) {
foreach ( $this->getRestrictions( $action ) as $right ) {
// Backwards compatibility, rewrite sysop -> editprotected
if ( $right == 'sysop' ) {
@@ -2162,15 +2169,13 @@ class Title {
* @param string $action The action to check
* @param User $user User to check
* @param array $errors List of current errors
- * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @param bool $short Short circuit on first error
*
* @return array List of errors
*/
- private function checkCascadingSourcesRestrictions( $action, $user, $errors,
- $doExpensiveQueries, $short
- ) {
- if ( $doExpensiveQueries && !$this->isCssJsSubpage() ) {
+ private function checkCascadingSourcesRestrictions( $action, $user, $errors, $rigor, $short ) {
+ if ( $rigor !== 'quick' && !$this->isCssJsSubpage() ) {
# We /could/ use the protection level on the source page, but it's
# fairly ugly as we have to establish a precedence hierarchy for pages
# included by multiple cascade-protected pages. So just restrict
@@ -2211,39 +2216,29 @@ class Title {
* @param string $action The action to check
* @param User $user User to check
* @param array $errors List of current errors
- * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @param bool $short Short circuit on first error
*
* @return array List of errors
*/
- private function checkActionPermissions( $action, $user, $errors,
- $doExpensiveQueries, $short
- ) {
+ private function checkActionPermissions( $action, $user, $errors, $rigor, $short ) {
global $wgDeleteRevisionsLimit, $wgLang;
if ( $action == 'protect' ) {
- if ( count( $this->getUserPermissionsErrorsInternal( 'edit',
- $user, $doExpensiveQueries, true ) )
- ) {
+ if ( count( $this->getUserPermissionsErrorsInternal( 'edit', $user, $rigor, true ) ) ) {
// If they can't edit, they shouldn't protect.
$errors[] = array( 'protect-cantedit' );
}
} elseif ( $action == 'create' ) {
$title_protection = $this->getTitleProtection();
if ( $title_protection ) {
- if ( $title_protection['pt_create_perm'] == 'sysop' ) {
- $title_protection['pt_create_perm'] = 'editprotected'; // B/C
- }
- if ( $title_protection['pt_create_perm'] == 'autoconfirmed' ) {
- $title_protection['pt_create_perm'] = 'editsemiprotected'; // B/C
- }
- if ( $title_protection['pt_create_perm'] == ''
- || !$user->isAllowed( $title_protection['pt_create_perm'] )
+ if ( $title_protection['permission'] == ''
+ || !$user->isAllowed( $title_protection['permission'] )
) {
$errors[] = array(
'titleprotected',
- User::whoIs( $title_protection['pt_user'] ),
- $title_protection['pt_reason']
+ User::whoIs( $title_protection['user'] ),
+ $title_protection['reason']
);
}
}
@@ -2263,17 +2258,16 @@ class Title {
$errors[] = array( 'immobile-target-page' );
}
} elseif ( $action == 'delete' ) {
- $tempErrors = $this->checkPageRestrictions( 'edit',
- $user, array(), $doExpensiveQueries, true );
+ $tempErrors = $this->checkPageRestrictions( 'edit', $user, array(), $rigor, true );
if ( !$tempErrors ) {
$tempErrors = $this->checkCascadingSourcesRestrictions( 'edit',
- $user, $tempErrors, $doExpensiveQueries, true );
+ $user, $tempErrors, $rigor, true );
}
if ( $tempErrors ) {
// If protection keeps them from editing, they shouldn't be able to delete.
$errors[] = array( 'deleteprotected' );
}
- if ( $doExpensiveQueries && $wgDeleteRevisionsLimit
+ if ( $rigor !== 'quick' && $wgDeleteRevisionsLimit
&& !$this->userCan( 'bigdelete', $user ) && $this->isBigDeletion()
) {
$errors[] = array( 'delete-toobig', $wgLang->formatNum( $wgDeleteRevisionsLimit ) );
@@ -2288,15 +2282,15 @@ class Title {
* @param string $action The action to check
* @param User $user User to check
* @param array $errors List of current errors
- * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @param bool $short Short circuit on first error
*
* @return array List of errors
*/
- private function checkUserBlock( $action, $user, $errors, $doExpensiveQueries, $short ) {
+ private function checkUserBlock( $action, $user, $errors, $rigor, $short ) {
// Account creation blocks handled at userlogin.
// Unblocking handled in SpecialUnblock
- if ( !$doExpensiveQueries || in_array( $action, array( 'createaccount', 'unblock' ) ) ) {
+ if ( $rigor === 'quick' || in_array( $action, array( 'createaccount', 'unblock' ) ) ) {
return $errors;
}
@@ -2306,10 +2300,13 @@ class Title {
$errors[] = array( 'confirmedittext' );
}
- if ( ( $action == 'edit' || $action == 'create' ) && !$user->isBlockedFrom( $this ) ) {
+ $useSlave = ( $rigor !== 'secure' );
+ if ( ( $action == 'edit' || $action == 'create' )
+ && !$user->isBlockedFrom( $this, $useSlave )
+ ) {
// Don't block the user from editing their own talk page unless they've been
// explicitly blocked from that too.
- } elseif ( $user->isBlocked() && $user->mBlock->prevents( $action ) !== false ) {
+ } elseif ( $user->isBlocked() && $user->getBlock()->prevents( $action ) !== false ) {
// @todo FIXME: Pass the relevant context into this function.
$errors[] = $user->getBlock()->getPermissionsError( RequestContext::getMain() );
}
@@ -2323,12 +2320,12 @@ class Title {
* @param string $action The action to check
* @param User $user User to check
* @param array $errors List of current errors
- * @param bool $doExpensiveQueries Whether or not to perform expensive queries
+ * @param string $rigor Same format as Title::getUserPermissionsErrors()
* @param bool $short Short circuit on first error
*
* @return array List of errors
*/
- private function checkReadPermissions( $action, $user, $errors, $doExpensiveQueries, $short ) {
+ private function checkReadPermissions( $action, $user, $errors, $rigor, $short ) {
global $wgWhitelistRead, $wgWhitelistReadRegexp;
$whitelisted = false;
@@ -2386,7 +2383,7 @@ class Title {
if ( !$whitelisted ) {
# If the title is not whitelisted, give extensions a chance to do so...
- wfRunHooks( 'TitleReadWhitelist', array( $this, $user, &$whitelisted ) );
+ Hooks::run( 'TitleReadWhitelist', array( $this, $user, &$whitelisted ) );
if ( !$whitelisted ) {
$errors[] = $this->missingPermissionError( $action, $short );
}
@@ -2431,14 +2428,23 @@ class Title {
*
* @param string $action Action that permission needs to be checked for
* @param User $user User to check
- * @param bool $doExpensiveQueries Set this to false to avoid doing unnecessary queries.
+ * @param string $rigor One of (quick,full,secure)
+ * - quick : does cheap permission checks from slaves (usable for GUI creation)
+ * - full : does cheap and expensive checks possibly from a slave
+ * - secure : does cheap and expensive checks, using the master as needed
* @param bool $short Set this to true to stop after the first permission error.
* @return array Array of arrays of the arguments to wfMessage to explain permissions problems.
*/
- protected function getUserPermissionsErrorsInternal( $action, $user,
- $doExpensiveQueries = true, $short = false
+ protected function getUserPermissionsErrorsInternal(
+ $action, $user, $rigor = 'secure', $short = false
) {
- wfProfileIn( __METHOD__ );
+ if ( $rigor === true ) {
+ $rigor = 'secure'; // b/c
+ } elseif ( $rigor === false ) {
+ $rigor = 'quick'; // b/c
+ } elseif ( !in_array( $rigor, array( 'quick', 'full', 'secure' ) ) ) {
+ throw new Exception( "Invalid rigor parameter '$rigor'." );
+ }
# Read has special handling
if ( $action == 'read' ) {
@@ -2476,10 +2482,9 @@ class Title {
while ( count( $checks ) > 0 &&
!( $short && count( $errors ) > 0 ) ) {
$method = array_shift( $checks );
- $errors = $this->$method( $action, $user, $errors, $doExpensiveQueries, $short );
+ $errors = $this->$method( $action, $user, $errors, $rigor, $short );
}
- wfProfileOut( __METHOD__ );
return $errors;
}
@@ -2520,7 +2525,7 @@ class Title {
$types = array_diff( $types, array( 'upload' ) );
}
- wfRunHooks( 'TitleGetRestrictionTypes', array( $this, &$types ) );
+ Hooks::run( 'TitleGetRestrictionTypes', array( $this, &$types ) );
wfDebug( __METHOD__ . ': applicable restrictions to [[' .
$this->getPrefixedText() . ']] are {' . implode( ',', $types ) . "}\n" );
@@ -2535,7 +2540,7 @@ class Title {
* @return array|bool An associative array representing any existent title
* protection, or false if there's none.
*/
- private function getTitleProtection() {
+ public function getTitleProtection() {
// Can't protect pages in special namespaces
if ( $this->getNamespace() < 0 ) {
return false;
@@ -2550,13 +2555,27 @@ class Title {
$dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select(
'protected_titles',
- array( 'pt_user', 'pt_reason', 'pt_expiry', 'pt_create_perm' ),
+ array(
+ 'user' => 'pt_user',
+ 'reason' => 'pt_reason',
+ 'expiry' => 'pt_expiry',
+ 'permission' => 'pt_create_perm'
+ ),
array( 'pt_namespace' => $this->getNamespace(), 'pt_title' => $this->getDBkey() ),
__METHOD__
);
// fetchRow returns false if there are no rows.
- $this->mTitleProtection = $dbr->fetchRow( $res );
+ $row = $dbr->fetchRow( $res );
+ if ( $row ) {
+ if ( $row['permission'] == 'sysop' ) {
+ $row['permission'] = 'editprotected'; // B/C
+ }
+ if ( $row['permission'] == 'autoconfirmed' ) {
+ $row['permission'] = 'editsemiprotected'; // B/C
+ }
+ }
+ $this->mTitleProtection = $row;
}
return $this->mTitleProtection;
}
@@ -2701,8 +2720,6 @@ class Title {
return array( $this->mHasCascadingRestrictions, $pagerestrictions );
}
- wfProfileIn( __METHOD__ );
-
$dbr = wfGetDB( DB_SLAVE );
if ( $this->getNamespace() == NS_FILE ) {
@@ -2735,7 +2752,6 @@ class Title {
$sources = $getPages ? array() : false;
$now = wfTimestampNow();
- $purgeExpired = false;
foreach ( $res as $row ) {
$expiry = $wgContLang->formatExpiry( $row->pr_expiry, TS_MW );
@@ -2761,14 +2777,8 @@ class Title {
} else {
$sources = true;
}
- } else {
- // Trigger lazy purge of expired restrictions from the db
- $purgeExpired = true;
}
}
- if ( $purgeExpired ) {
- Title::purgeExpiredRestrictions();
- }
if ( $getPages ) {
$this->mCascadeSources = $sources;
@@ -2777,7 +2787,6 @@ class Title {
$this->mHasCascadingRestrictions = $sources;
}
- wfProfileOut( __METHOD__ );
return array( $sources, $pagerestrictions );
}
@@ -2796,8 +2805,10 @@ class Title {
* Accessor/initialisation for mRestrictions
*
* @param string $action Action that permission needs to be checked for
- * @return array Restriction levels needed to take the action. All levels
- * are required.
+ * @return array Restriction levels needed to take the action. All levels are
+ * required. Note that restriction levels are normally user rights, but 'sysop'
+ * and 'autoconfirmed' are also allowed for backwards compatibility. These should
+ * be mapped to 'editprotected' and 'editsemiprotected' respectively.
*/
public function getRestrictions( $action ) {
if ( !$this->mRestrictionsLoaded ) {
@@ -2918,7 +2929,6 @@ class Title {
if ( count( $rows ) ) {
# Current system - load second to make them override.
$now = wfTimestampNow();
- $purgeExpired = false;
# Cycle through all the restrictions.
foreach ( $rows as $row ) {
@@ -2938,15 +2948,8 @@ class Title {
$this->mRestrictions[$row->pr_type] = explode( ',', trim( $row->pr_level ) );
$this->mCascadeRestriction |= $row->pr_cascade;
- } else {
- // Trigger a lazy purge of expired restrictions
- $purgeExpired = true;
}
}
-
- if ( $purgeExpired ) {
- Title::purgeExpiredRestrictions();
- }
}
$this->mRestrictionsLoaded = true;
@@ -2977,14 +2980,13 @@ class Title {
if ( $title_protection ) {
$now = wfTimestampNow();
- $expiry = $wgContLang->formatExpiry( $title_protection['pt_expiry'], TS_MW );
+ $expiry = $wgContLang->formatExpiry( $title_protection['expiry'], TS_MW );
if ( !$expiry || $expiry > $now ) {
// Apply the restrictions
$this->mRestrictionsExpiry['create'] = $expiry;
- $this->mRestrictions['create'] = explode( ',', trim( $title_protection['pt_create_perm'] ) );
+ $this->mRestrictions['create'] = explode( ',', trim( $title_protection['permission'] ) );
} else { // Get rid of the old restrictions
- Title::purgeExpiredRestrictions();
$this->mTitleProtection = false;
}
} else {
@@ -3170,13 +3172,13 @@ class Title {
if ( !is_null( $this->mRedirect ) ) {
return $this->mRedirect;
}
- # Calling getArticleID() loads the field from cache as needed
if ( !$this->getArticleID( $flags ) ) {
$this->mRedirect = false;
return $this->mRedirect;
}
$linkCache = LinkCache::singleton();
+ $linkCache->addLinkObj( $this ); # in case we already had an article ID
$cached = $linkCache->getGoodLinkFieldObj( $this, 'redirect' );
if ( $cached === null ) {
# Trust LinkCache's state over our own
@@ -3205,12 +3207,12 @@ class Title {
if ( $this->mLength != -1 ) {
return $this->mLength;
}
- # Calling getArticleID() loads the field from cache as needed
if ( !$this->getArticleID( $flags ) ) {
$this->mLength = 0;
return $this->mLength;
}
$linkCache = LinkCache::singleton();
+ $linkCache->addLinkObj( $this ); # in case we already had an article ID
$cached = $linkCache->getGoodLinkFieldObj( $this, 'length' );
if ( $cached === null ) {
# Trust LinkCache's state over our own, as for isRedirect()
@@ -3233,13 +3235,12 @@ class Title {
if ( !( $flags & Title::GAID_FOR_UPDATE ) && $this->mLatestID !== false ) {
return intval( $this->mLatestID );
}
- # Calling getArticleID() loads the field from cache as needed
if ( !$this->getArticleID( $flags ) ) {
$this->mLatestID = 0;
return $this->mLatestID;
}
$linkCache = LinkCache::singleton();
- $linkCache->addLinkObj( $this );
+ $linkCache->addLinkObj( $this ); # in case we already had an article ID
$cached = $linkCache->getGoodLinkFieldObj( $this, 'revision' );
if ( $cached === null ) {
# Trust LinkCache's state over our own, as for isRedirect()
@@ -3283,6 +3284,14 @@ class Title {
$this->mIsBigDeletion = null;
}
+ public static function clearCaches() {
+ $linkCache = LinkCache::singleton();
+ $linkCache->clear();
+
+ $titleCache = self::getTitleCache();
+ $titleCache->clear();
+ }
+
/**
* Capitalize a text string for a title if it belongs to a namespace that capitalizes
*
@@ -3559,7 +3568,7 @@ class Title {
$urls[] = $this->getInternalUrl( 'action=raw&ctype=text/css' );
}
- wfRunHooks( 'TitleSquidURLs', array( $this, &$urls ) );
+ Hooks::run( 'TitleSquidURLs', array( $this, &$urls ) );
return $urls;
}
@@ -3578,10 +3587,12 @@ class Title {
/**
* Move this page without authentication
*
+ * @deprecated since 1.25 use MovePage class instead
* @param Title $nt The new page Title
* @return array|bool True on success, getUserPermissionsErrors()-like array on failure
*/
public function moveNoAuth( &$nt ) {
+ wfDeprecated( __METHOD__, '1.25' );
return $this->moveTo( $nt, false );
}
@@ -3589,117 +3600,36 @@ class Title {
* Check whether a given move operation would be valid.
* Returns true if ok, or a getUserPermissionsErrors()-like array otherwise
*
- * @todo move this into MovePage
+ * @deprecated since 1.25, use MovePage's methods instead
* @param Title $nt The new title
- * @param bool $auth Indicates whether $wgUser's permissions
- * should be checked
+ * @param bool $auth Whether to check user permissions (uses $wgUser)
* @param string $reason Is the log summary of the move, used for spam checking
* @return array|bool True on success, getUserPermissionsErrors()-like array on failure
*/
public function isValidMoveOperation( &$nt, $auth = true, $reason = '' ) {
- global $wgUser, $wgContentHandlerUseDB;
+ global $wgUser;
- $errors = array();
- if ( !$nt ) {
+ if ( !( $nt instanceof Title ) ) {
// Normally we'd add this to $errors, but we'll get
// lots of syntax errors if $nt is not an object
return array( array( 'badtitletext' ) );
}
- if ( $this->equals( $nt ) ) {
- $errors[] = array( 'selfmove' );
- }
- if ( !$this->isMovable() ) {
- $errors[] = array( 'immobile-source-namespace', $this->getNsText() );
- }
- if ( $nt->isExternal() ) {
- $errors[] = array( 'immobile-target-namespace-iw' );
- }
- if ( !$nt->isMovable() ) {
- $errors[] = array( 'immobile-target-namespace', $nt->getNsText() );
- }
-
- $oldid = $this->getArticleID();
- $newid = $nt->getArticleID();
-
- if ( strlen( $nt->getDBkey() ) < 1 ) {
- $errors[] = array( 'articleexists' );
- }
- if (
- ( $this->getDBkey() == '' ) ||
- ( !$oldid ) ||
- ( $nt->getDBkey() == '' )
- ) {
- $errors[] = array( 'badarticleerror' );
- }
-
- // Content model checks
- if ( !$wgContentHandlerUseDB &&
- $this->getContentModel() !== $nt->getContentModel() ) {
- // can't move a page if that would change the page's content model
- $errors[] = array(
- 'bad-target-model',
- ContentHandler::getLocalizedName( $this->getContentModel() ),
- ContentHandler::getLocalizedName( $nt->getContentModel() )
- );
- }
-
- // Image-specific checks
- if ( $this->getNamespace() == NS_FILE ) {
- $errors = array_merge( $errors, $this->validateFileMoveOperation( $nt ) );
- }
-
- if ( $nt->getNamespace() == NS_FILE && $this->getNamespace() != NS_FILE ) {
- $errors[] = array( 'nonfile-cannot-move-to-file' );
- }
+ $mp = new MovePage( $this, $nt );
+ $errors = $mp->isValidMove()->getErrorsArray();
if ( $auth ) {
- $errors = wfMergeErrorArrays( $errors,
- $this->getUserPermissionsErrors( 'move', $wgUser ),
- $this->getUserPermissionsErrors( 'edit', $wgUser ),
- $nt->getUserPermissionsErrors( 'move-target', $wgUser ),
- $nt->getUserPermissionsErrors( 'edit', $wgUser ) );
- }
-
- $match = EditPage::matchSummarySpamRegex( $reason );
- if ( $match !== false ) {
- // This is kind of lame, won't display nice
- $errors[] = array( 'spamprotectiontext' );
- }
-
- $err = null;
- if ( !wfRunHooks( 'AbortMove', array( $this, $nt, $wgUser, &$err, $reason ) ) ) {
- $errors[] = array( 'hookaborted', $err );
+ $errors = wfMergeErrorArrays(
+ $errors,
+ $mp->checkPermissions( $wgUser, $reason )->getErrorsArray()
+ );
}
- # The move is allowed only if (1) the target doesn't exist, or
- # (2) the target is a redirect to the source, and has no history
- # (so we can undo bad moves right after they're done).
-
- if ( 0 != $newid ) { # Target exists; check for validity
- if ( !$this->isValidMoveTarget( $nt ) ) {
- $errors[] = array( 'articleexists' );
- }
- } else {
- $tp = $nt->getTitleProtection();
- $right = $tp['pt_create_perm'];
- if ( $right == 'sysop' ) {
- $right = 'editprotected'; // B/C
- }
- if ( $right == 'autoconfirmed' ) {
- $right = 'editsemiprotected'; // B/C
- }
- if ( $tp and !$wgUser->isAllowed( $right ) ) {
- $errors[] = array( 'cantmove-titleprotected' );
- }
- }
- if ( empty( $errors ) ) {
- return true;
- }
- return $errors;
+ return $errors ? : true;
}
/**
* Check if the requested move target is a valid file move target
+ * @todo move this to MovePage
* @param Title $nt Target title
* @return array List of errors
*/
@@ -3708,29 +3638,11 @@ class Title {
$errors = array();
- // wfFindFile( $nt ) / wfLocalFile( $nt ) is not allowed until below
-
- $file = wfLocalFile( $this );
- if ( $file->exists() ) {
- if ( $nt->getText() != wfStripIllegalFilenameChars( $nt->getText() ) ) {
- $errors[] = array( 'imageinvalidfilename' );
- }
- if ( !File::checkExtensionCompatibility( $file, $nt->getDBkey() ) ) {
- $errors[] = array( 'imagetypemismatch' );
- }
- }
-
- if ( $nt->getNamespace() != NS_FILE ) {
- $errors[] = array( 'imagenocrossnamespace' );
- // From here we want to do checks on a file object, so if we can't
- // create one, we must return.
- return $errors;
- }
-
- // wfFindFile( $nt ) / wfLocalFile( $nt ) is allowed below here
-
$destFile = wfLocalFile( $nt );
- if ( !$wgUser->isAllowed( 'reupload-shared' ) && !$destFile->exists() && wfFindFile( $nt ) ) {
+ $destFile->load( File::READ_LATEST );
+ if ( !$wgUser->isAllowed( 'reupload-shared' )
+ && !$destFile->exists() && wfFindFile( $nt )
+ ) {
$errors[] = array( 'file-exists-sharedrepo' );
}
@@ -3740,7 +3652,7 @@ class Title {
/**
* Move a title to a new location
*
- * @todo Deprecate this in favor of MovePage
+ * @deprecated since 1.25, use the MovePage class instead
* @param Title $nt The new title
* @param bool $auth Indicates whether $wgUser's permissions
* should be checked
@@ -3762,8 +3674,6 @@ class Title {
$createRedirect = true;
}
- wfRunHooks( 'TitleMove', array( $this, $nt, $wgUser ) );
-
$mp = new MovePage( $this, $nt );
$status = $mp->move( $wgUser, $reason, $createRedirect );
if ( $status->isOK() ) {
@@ -3899,6 +3809,7 @@ class Title {
* Checks if $this can be moved to a given Title
* - Selects for update, so don't call it unless you mean business
*
+ * @deprecated since 1.25, use MovePage's methods instead
* @param Title $nt The new title to check
* @return bool
*/
@@ -3906,6 +3817,7 @@ class Title {
# Is it an existing file?
if ( $nt->getNamespace() == NS_FILE ) {
$file = wfLocalFile( $nt );
+ $file->load( File::READ_LATEST );
if ( $file->exists() ) {
wfDebug( __METHOD__ . ": file exists\n" );
return false;
@@ -4128,7 +4040,7 @@ class Title {
if ( $this->mIsBigDeletion === null ) {
$dbr = wfGetDB( DB_SLAVE );
- $innerQuery = $dbr->selectSQLText(
+ $revCount = $dbr->selectRowCount(
'revision',
'1',
array( 'rev_page' => $this->getArticleID() ),
@@ -4136,13 +4048,6 @@ class Title {
array( 'LIMIT' => $wgDeleteRevisionsLimit + 1 )
);
- $revCount = $dbr->query(
- 'SELECT COUNT(*) FROM (' . $innerQuery . ') AS innerQuery',
- __METHOD__
- );
- $revCount = $revCount->fetchRow();
- $revCount = $revCount['COUNT(*)'];
-
$this->mIsBigDeletion = $revCount > $wgDeleteRevisionsLimit;
}
@@ -4194,12 +4099,11 @@ class Title {
'rev_timestamp < ' . $dbr->addQuotes( $dbr->timestamp( $new->getTimestamp() ) )
);
if ( $max !== null ) {
- $res = $dbr->select( 'revision', '1',
+ return $dbr->selectRowCount( 'revision', '1',
$conds,
__METHOD__,
array( 'LIMIT' => $max + 1 ) // extra to detect truncation
);
- return $res->numRows();
} else {
return (int)$dbr->selectField( 'revision', 'count(*)', $conds, __METHOD__ );
}
@@ -4250,17 +4154,19 @@ class Title {
}
// No DB query needed if $old and $new are the same or successive revisions:
if ( $old->getId() === $new->getId() ) {
- return ( $old_cmp === '>' && $new_cmp === '<' ) ? array() : array( $old->getRawUserText() );
+ return ( $old_cmp === '>' && $new_cmp === '<' ) ?
+ array() :
+ array( $old->getUserText( Revision::RAW ) );
} elseif ( $old->getId() === $new->getParentId() ) {
if ( $old_cmp === '>=' && $new_cmp === '<=' ) {
- $authors[] = $old->getRawUserText();
- if ( $old->getRawUserText() != $new->getRawUserText() ) {
- $authors[] = $new->getRawUserText();
+ $authors[] = $old->getUserText( Revision::RAW );
+ if ( $old->getUserText( Revision::RAW ) != $new->getUserText( Revision::RAW ) ) {
+ $authors[] = $new->getUserText( Revision::RAW );
}
} elseif ( $old_cmp === '>=' ) {
- $authors[] = $old->getRawUserText();
+ $authors[] = $old->getUserText( Revision::RAW );
} elseif ( $new_cmp === '<=' ) {
- $authors[] = $new->getRawUserText();
+ $authors[] = $new->getUserText( Revision::RAW );
}
return $authors;
}
@@ -4334,7 +4240,7 @@ class Title {
*/
public function exists() {
$exists = $this->getArticleID() != 0;
- wfRunHooks( 'TitleExists', array( $this, &$exists ) );
+ Hooks::run( 'TitleExists', array( $this, &$exists ) );
return $exists;
}
@@ -4367,7 +4273,7 @@ class Title {
* @param Title $title
* @param bool|null $isKnown
*/
- wfRunHooks( 'TitleIsAlwaysKnown', array( $this, &$isKnown ) );
+ Hooks::run( 'TitleIsAlwaysKnown', array( $this, &$isKnown ) );
if ( !is_null( $isKnown ) ) {
return $isKnown;
@@ -4690,7 +4596,7 @@ class Title {
// on the Title object passed in, and should probably
// tell the users to run updateCollations.php --force
// in order to re-sort existing category relations.
- wfRunHooks( 'GetDefaultSortkey', array( $this, &$unprefixed ) );
+ Hooks::run( 'GetDefaultSortkey', array( $this, &$unprefixed ) );
if ( $prefix !== '' ) {
# Separate with a line feed, so the unprefixed part is only used as
# a tiebreaker when two pages have the exact same prefix.
@@ -4712,16 +4618,13 @@ class Title {
*/
public function getPageLanguage() {
global $wgLang, $wgLanguageCode;
- wfProfileIn( __METHOD__ );
if ( $this->isSpecialPage() ) {
// special pages are in the user language
- wfProfileOut( __METHOD__ );
return $wgLang;
}
// Checking if DB language is set
if ( $this->mDbPageLanguage ) {
- wfProfileOut( __METHOD__ );
return wfGetLangObj( $this->mDbPageLanguage );
}
@@ -4739,7 +4642,6 @@ class Title {
$langObj = wfGetLangObj( $this->mPageLanguage[0] );
}
- wfProfileOut( __METHOD__ );
return $langObj;
}
@@ -4786,32 +4688,68 @@ class Title {
public function getEditNotices( $oldid = 0 ) {
$notices = array();
- # Optional notices on a per-namespace and per-page basis
+ // Optional notice for the entire namespace
$editnotice_ns = 'editnotice-' . $this->getNamespace();
- $editnotice_ns_message = wfMessage( $editnotice_ns );
- if ( $editnotice_ns_message->exists() ) {
- $notices[$editnotice_ns] = $editnotice_ns_message->parseAsBlock();
+ $msg = wfMessage( $editnotice_ns );
+ if ( $msg->exists() ) {
+ $html = $msg->parseAsBlock();
+ // Edit notices may have complex logic, but output nothing (T91715)
+ if ( trim( $html ) !== '' ) {
+ $notices[$editnotice_ns] = Html::rawElement(
+ 'div',
+ array( 'class' => array(
+ 'mw-editnotice',
+ 'mw-editnotice-namespace',
+ Sanitizer::escapeClass( "mw-$editnotice_ns" )
+ ) ),
+ $html
+ );
+ }
}
+
if ( MWNamespace::hasSubpages( $this->getNamespace() ) ) {
+ // Optional notice for page itself and any parent page
$parts = explode( '/', $this->getDBkey() );
$editnotice_base = $editnotice_ns;
while ( count( $parts ) > 0 ) {
$editnotice_base .= '-' . array_shift( $parts );
- $editnotice_base_msg = wfMessage( $editnotice_base );
- if ( $editnotice_base_msg->exists() ) {
- $notices[$editnotice_base] = $editnotice_base_msg->parseAsBlock();
+ $msg = wfMessage( $editnotice_base );
+ if ( $msg->exists() ) {
+ $html = $msg->parseAsBlock();
+ if ( trim( $html ) !== '' ) {
+ $notices[$editnotice_base] = Html::rawElement(
+ 'div',
+ array( 'class' => array(
+ 'mw-editnotice',
+ 'mw-editnotice-base',
+ Sanitizer::escapeClass( "mw-$editnotice_base" )
+ ) ),
+ $html
+ );
+ }
}
}
} else {
- # Even if there are no subpages in namespace, we still don't want / in MW ns.
+ // Even if there are no subpages in namespace, we still don't want "/" in MediaWiki message keys
$editnoticeText = $editnotice_ns . '-' . str_replace( '/', '-', $this->getDBkey() );
- $editnoticeMsg = wfMessage( $editnoticeText );
- if ( $editnoticeMsg->exists() ) {
- $notices[$editnoticeText] = $editnoticeMsg->parseAsBlock();
+ $msg = wfMessage( $editnoticeText );
+ if ( $msg->exists() ) {
+ $html = $msg->parseAsBlock();
+ if ( trim( $html ) !== '' ) {
+ $notices[$editnoticeText] = Html::rawElement(
+ 'div',
+ array( 'class' => array(
+ 'mw-editnotice',
+ 'mw-editnotice-page',
+ Sanitizer::escapeClass( "mw-$editnoticeText" )
+ ) ),
+ $html
+ );
+ }
}
}
- wfRunHooks( 'TitleGetEditNotices', array( $this, $oldid, &$notices ) );
+ Hooks::run( 'TitleGetEditNotices', array( $this, $oldid, &$notices ) );
return $notices;
}
}
diff --git a/includes/TitleArray.php b/includes/TitleArray.php
index b67d9f4d..0fb5b1e9 100644
--- a/includes/TitleArray.php
+++ b/includes/TitleArray.php
@@ -37,7 +37,7 @@ abstract class TitleArray implements Iterator {
*/
static function newFromResult( $res ) {
$array = null;
- if ( !wfRunHooks( 'TitleArrayFromResult', array( &$array, $res ) ) ) {
+ if ( !Hooks::run( 'TitleArrayFromResult', array( &$array, $res ) ) ) {
return null;
}
if ( $array === null ) {
diff --git a/includes/User.php b/includes/User.php
index a925a3c4..3cd69fdc 100644
--- a/includes/User.php
+++ b/includes/User.php
@@ -59,6 +59,12 @@ class User implements IDBAccessObject {
const MAX_WATCHED_ITEMS_CACHE = 100;
/**
+ * Exclude user options that are set to their default value.
+ * @since 1.25
+ */
+ const GETOPTIONS_EXCLUDE_DEFAULTS = 1;
+
+ /**
* @var PasswordFactory Lazily loaded factory object for passwords
*/
private static $mPasswordFactory = null;
@@ -96,6 +102,7 @@ class User implements IDBAccessObject {
*/
protected static $mCoreRights = array(
'apihighlimits',
+ 'applychangetags',
'autoconfirmed',
'autopatrol',
'bigdelete',
@@ -103,6 +110,7 @@ class User implements IDBAccessObject {
'blockemail',
'bot',
'browsearchive',
+ 'changetags',
'createaccount',
'createpage',
'createtalk',
@@ -128,6 +136,7 @@ class User implements IDBAccessObject {
'import',
'importupload',
'ipblock-exempt',
+ 'managechangetags',
'markbotedits',
'mergehistory',
'minoredit',
@@ -197,8 +206,10 @@ class User implements IDBAccessObject {
public $mNewpassTime;
public $mEmail;
-
+ /** @var string TS_MW timestamp from the DB */
public $mTouched;
+ /** @var string TS_MW timestamp from cache */
+ protected $mQuickTouched;
protected $mToken;
@@ -288,6 +299,9 @@ class User implements IDBAccessObject {
/** @var array */
private $mWatchedItems = array();
+ /** @var integer User::READ_* constant bitfield used to load data */
+ protected $queryFlagsUsed = self::READ_NORMAL;
+
public static $idCacheByName = array();
/**
@@ -313,104 +327,144 @@ class User implements IDBAccessObject {
/**
* Load the user table data for this object from the source given by mFrom.
+ *
+ * @param integer $flags User::READ_* constant bitfield
*/
- public function load() {
+ public function load( $flags = self::READ_LATEST ) {
if ( $this->mLoadedItems === true ) {
return;
}
- wfProfileIn( __METHOD__ );
// Set it now to avoid infinite recursion in accessors
$this->mLoadedItems = true;
+ $this->queryFlagsUsed = $flags;
switch ( $this->mFrom ) {
case 'defaults':
$this->loadDefaults();
break;
case 'name':
+ // @TODO: this gets the ID from a slave, assuming renames
+ // are rare. This should be controllable and more consistent.
$this->mId = self::idFromName( $this->mName );
if ( !$this->mId ) {
// Nonexistent user placeholder object
$this->loadDefaults( $this->mName );
} else {
- $this->loadFromId();
+ $this->loadFromId( $flags );
}
break;
case 'id':
- $this->loadFromId();
+ $this->loadFromId( $flags );
break;
case 'session':
if ( !$this->loadFromSession() ) {
// Loading from session failed. Load defaults.
$this->loadDefaults();
}
- wfRunHooks( 'UserLoadAfterLoadFromSession', array( $this ) );
+ Hooks::run( 'UserLoadAfterLoadFromSession', array( $this ) );
break;
default:
- wfProfileOut( __METHOD__ );
throw new MWException( "Unrecognised value for User->mFrom: \"{$this->mFrom}\"" );
}
- wfProfileOut( __METHOD__ );
}
/**
* Load user table data, given mId has already been set.
+ * @param integer $flags User::READ_* constant bitfield
* @return bool False if the ID does not exist, true otherwise
*/
- public function loadFromId() {
- global $wgMemc;
+ public function loadFromId( $flags = self::READ_LATEST ) {
if ( $this->mId == 0 ) {
$this->loadDefaults();
return false;
}
// Try cache
- $key = wfMemcKey( 'user', 'id', $this->mId );
- $data = $wgMemc->get( $key );
- if ( !is_array( $data ) || $data['mVersion'] != self::VERSION ) {
- // Object is expired, load from DB
- $data = false;
- }
-
- if ( !$data ) {
+ $cache = $this->loadFromCache();
+ if ( !$cache ) {
wfDebug( "User: cache miss for user {$this->mId}\n" );
// Load from DB
- if ( !$this->loadFromDatabase() ) {
+ if ( !$this->loadFromDatabase( $flags ) ) {
// Can't load from ID, user is anonymous
return false;
}
- $this->saveToCache();
- } else {
- wfDebug( "User: got user {$this->mId} from cache\n" );
- // Restore from cache
- foreach ( self::$mCacheVars as $name ) {
- $this->$name = $data[$name];
+ if ( $flags & self::READ_LATEST ) {
+ // Only save master data back to the cache to keep it consistent.
+ // @TODO: save it anyway and have callers specifiy $flags and have
+ // load() called as needed. That requires updating MANY callers...
+ $this->saveToCache();
}
}
$this->mLoadedItems = true;
+ $this->queryFlagsUsed = $flags;
+
+ return true;
+ }
+
+ /**
+ * Load user data from shared cache, given mId has already been set.
+ *
+ * @return bool false if the ID does not exist or data is invalid, true otherwise
+ * @since 1.25
+ */
+ protected function loadFromCache() {
+ global $wgMemc;
+
+ if ( $this->mId == 0 ) {
+ $this->loadDefaults();
+ return false;
+ }
+
+ $key = wfMemcKey( 'user', 'id', $this->mId );
+ $data = $wgMemc->get( $key );
+ if ( !is_array( $data ) || $data['mVersion'] < self::VERSION ) {
+ // Object is expired
+ return false;
+ }
+
+ wfDebug( "User: got user {$this->mId} from cache\n" );
+
+ // Restore from cache
+ foreach ( self::$mCacheVars as $name ) {
+ $this->$name = $data[$name];
+ }
return true;
}
/**
* Save user data to the shared cache
+ *
+ * This method should not be called outside the User class
*/
public function saveToCache() {
+ global $wgMemc;
+
$this->load();
$this->loadGroups();
$this->loadOptions();
+
if ( $this->isAnon() ) {
// Anonymous users are uncached
return;
}
+
+ // The cache needs good consistency due to its high TTL, so the user
+ // should have been loaded from the master to avoid lag amplification.
+ if ( !( $this->queryFlagsUsed & self::READ_LATEST ) ) {
+ wfWarn( "Cannot cache slave-loaded User object with ID '{$this->mId}'." );
+ return;
+ }
+
$data = array();
foreach ( self::$mCacheVars as $name ) {
$data[$name] = $this->$name;
}
$data['mVersion'] = self::VERSION;
$key = wfMemcKey( 'user', 'id', $this->mId );
- global $wgMemc;
+
$wgMemc->set( $key, $data );
}
@@ -624,10 +678,11 @@ class User implements IDBAccessObject {
global $wgContLang, $wgMaxNameChars;
if ( $name == ''
- || User::isIP( $name )
- || strpos( $name, '/' ) !== false
- || strlen( $name ) > $wgMaxNameChars
- || $name != $wgContLang->ucfirst( $name ) ) {
+ || User::isIP( $name )
+ || strpos( $name, '/' ) !== false
+ || strlen( $name ) > $wgMaxNameChars
+ || $name != $wgContLang->ucfirst( $name )
+ ) {
wfDebugLog( 'username', __METHOD__ .
": '$name' invalid due to empty, IP, slash, length, or lowercase" );
return false;
@@ -684,7 +739,7 @@ class User implements IDBAccessObject {
static $reservedUsernames = false;
if ( !$reservedUsernames ) {
$reservedUsernames = $wgReservedUsernames;
- wfRunHooks( 'UserGetReservedNames', array( &$reservedUsernames ) );
+ Hooks::run( 'UserGetReservedNames', array( &$reservedUsernames ) );
}
// Certain names may be reserved for batch processes.
@@ -801,7 +856,7 @@ class User implements IDBAccessObject {
$result = false; //init $result to false for the internal checks
- if ( !wfRunHooks( 'isValidPassword', array( $password, &$result, $this ) ) ) {
+ if ( !Hooks::run( 'isValidPassword', array( $password, &$result, $this ) ) ) {
$status->error( $result );
return $status;
}
@@ -867,7 +922,7 @@ class User implements IDBAccessObject {
);
}
// Give extensions a chance to force an expiration
- wfRunHooks( 'ResetPasswordExpiration', array( $this, &$newExpire ) );
+ Hooks::run( 'ResetPasswordExpiration', array( $this, &$newExpire ) );
$this->mPasswordExpires = $newExpire;
}
@@ -1007,7 +1062,6 @@ class User implements IDBAccessObject {
* @param string|bool $name
*/
public function loadDefaults( $name = false ) {
- wfProfileIn( __METHOD__ );
$passwordFactory = self::getPasswordFactory();
@@ -1037,9 +1091,7 @@ class User implements IDBAccessObject {
$this->mRegistration = wfTimestamp( TS_MW );
$this->mGroups = array();
- wfRunHooks( 'UserLoadDefaults', array( $this, $name ) );
-
- wfProfileOut( __METHOD__ );
+ Hooks::run( 'UserLoadDefaults', array( $this, $name ) );
}
/**
@@ -1072,11 +1124,12 @@ class User implements IDBAccessObject {
/**
* Load user data from the session or login cookie.
+ *
* @return bool True if the user is logged in, false otherwise.
*/
private function loadFromSession() {
$result = null;
- wfRunHooks( 'UserLoadFromSession', array( $this, &$result ) );
+ Hooks::run( 'UserLoadFromSession', array( $this, &$result ) );
if ( $result !== null ) {
return $result;
}
@@ -1110,6 +1163,7 @@ class User implements IDBAccessObject {
}
$proposedUser = User::newFromId( $sId );
+ $proposedUser->load( self::READ_LATEST );
if ( !$proposedUser->isLoggedIn() ) {
// Not a valid ID
return false;
@@ -1154,10 +1208,10 @@ class User implements IDBAccessObject {
* Load user and user_group data from the database.
* $this->mId must be set, this is how the user is identified.
*
- * @param int $flags Supports User::READ_LOCKING
+ * @param integer $flags User::READ_* constant bitfield
* @return bool True if the user exists, false if the user is anonymous
*/
- public function loadFromDatabase( $flags = 0 ) {
+ public function loadFromDatabase( $flags = self::READ_LATEST ) {
// Paranoia
$this->mId = intval( $this->mId );
@@ -1167,8 +1221,11 @@ class User implements IDBAccessObject {
return false;
}
- $dbr = wfGetDB( DB_MASTER );
- $s = $dbr->selectRow(
+ $db = ( $flags & self::READ_LATEST )
+ ? wfGetDB( DB_MASTER )
+ : wfGetDB( DB_SLAVE );
+
+ $s = $db->selectRow(
'user',
self::selectFields(),
array( 'user_id' => $this->mId ),
@@ -1178,7 +1235,8 @@ class User implements IDBAccessObject {
: array()
);
- wfRunHooks( 'UserLoadFromDatabase', array( $this, &$s ) );
+ $this->queryFlagsUsed = $flags;
+ Hooks::run( 'UserLoadFromDatabase', array( $this, &$s ) );
if ( $s !== false ) {
// Initialise user table data
@@ -1203,7 +1261,7 @@ class User implements IDBAccessObject {
* user_groups Array with groups out of the user_groups table
* user_properties Array with properties out of the user_properties table
*/
- public function loadFromRow( $row, $data = null ) {
+ protected function loadFromRow( $row, $data = null ) {
$all = true;
$passwordFactory = self::getPasswordFactory();
@@ -1232,6 +1290,10 @@ class User implements IDBAccessObject {
$all = false;
}
+ if ( isset( $row->user_id ) && isset( $row->user_name ) ) {
+ self::$idCacheByName[$row->user_name] = $row->user_id;
+ }
+
if ( isset( $row->user_editcount ) ) {
$this->mEditCount = $row->user_editcount;
} else {
@@ -1311,8 +1373,10 @@ class User implements IDBAccessObject {
*/
private function loadGroups() {
if ( is_null( $this->mGroups ) ) {
- $dbr = wfGetDB( DB_MASTER );
- $res = $dbr->select( 'user_groups',
+ $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+ ? wfGetDB( DB_MASTER )
+ : wfGetDB( DB_SLAVE );
+ $res = $db->select( 'user_groups',
array( 'ug_group' ),
array( 'ug_user' => $this->mId ),
__METHOD__ );
@@ -1333,13 +1397,20 @@ class User implements IDBAccessObject {
* @since 1.24
*/
private function loadPasswords() {
- if ( $this->getId() !== 0 && ( $this->mPassword === null || $this->mNewpassword === null ) ) {
- $this->loadFromRow( wfGetDB( DB_MASTER )->selectRow(
- 'user',
- array( 'user_password', 'user_newpassword', 'user_newpass_time', 'user_password_expires' ),
- array( 'user_id' => $this->getId() ),
- __METHOD__
- ) );
+ if ( $this->getId() !== 0 &&
+ ( $this->mPassword === null || $this->mNewpassword === null )
+ ) {
+ $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+ ? wfGetDB( DB_MASTER )
+ : wfGetDB( DB_SLAVE );
+
+ $this->loadFromRow( $db->selectRow(
+ 'user',
+ array( 'user_password', 'user_newpassword',
+ 'user_newpass_time', 'user_password_expires' ),
+ array( 'user_id' => $this->getId() ),
+ __METHOD__
+ ) );
}
}
@@ -1361,7 +1432,7 @@ class User implements IDBAccessObject {
global $wgAutopromoteOnceLogInRC, $wgAuth;
$toPromote = array();
- if ( $this->getId() ) {
+ if ( !wfReadOnly() && $this->getId() ) {
$toPromote = Autopromote::getAutopromoteOnceGroups( $this, $event );
if ( count( $toPromote ) ) {
$oldGroups = $this->getGroups(); // previous groups
@@ -1387,6 +1458,7 @@ class User implements IDBAccessObject {
}
}
}
+
return $toPromote;
}
@@ -1444,7 +1516,7 @@ class User implements IDBAccessObject {
}
$defOpt['skin'] = Skin::normalizeKey( $wgDefaultSkin );
- wfRunHooks( 'UserGetDefaultOptions', array( &$defOpt ) );
+ Hooks::run( 'UserGetDefaultOptions', array( &$defOpt ) );
return $defOpt;
}
@@ -1477,7 +1549,6 @@ class User implements IDBAccessObject {
return;
}
- wfProfileIn( __METHOD__ );
wfDebug( __METHOD__ . ": checking...\n" );
// Initialize data...
@@ -1550,9 +1621,8 @@ class User implements IDBAccessObject {
}
// Extensions
- wfRunHooks( 'GetBlockedStatus', array( &$this ) );
+ Hooks::run( 'GetBlockedStatus', array( &$this ) );
- wfProfileOut( __METHOD__ );
}
/**
@@ -1584,7 +1654,6 @@ class User implements IDBAccessObject {
* @return bool True if blacklisted.
*/
public function inDnsBlacklist( $ip, $bases ) {
- wfProfileIn( __METHOD__ );
$found = false;
// @todo FIXME: IPv6 ??? (http://bugs.php.net/bug.php?id=33170)
@@ -1619,7 +1688,6 @@ class User implements IDBAccessObject {
}
}
- wfProfileOut( __METHOD__ );
return $found;
}
@@ -1636,7 +1704,6 @@ class User implements IDBAccessObject {
if ( !$wgProxyList ) {
return false;
}
- wfProfileIn( __METHOD__ );
if ( !is_array( $wgProxyList ) ) {
// Load from the specified file
@@ -1653,7 +1720,6 @@ class User implements IDBAccessObject {
} else {
$ret = false;
}
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -1690,7 +1756,7 @@ class User implements IDBAccessObject {
public function pingLimiter( $action = 'edit', $incrBy = 1 ) {
// Call the 'PingLimiter' hook
$result = false;
- if ( !wfRunHooks( 'PingLimiter', array( &$this, $action, &$result, $incrBy ) ) ) {
+ if ( !Hooks::run( 'PingLimiter', array( &$this, $action, &$result, $incrBy ) ) ) {
return $result;
}
@@ -1705,8 +1771,6 @@ class User implements IDBAccessObject {
}
global $wgMemc;
- wfProfileIn( __METHOD__ );
- wfProfileIn( __METHOD__ . '-' . $action );
$limits = $wgRateLimits[$action];
$keys = array();
@@ -1748,7 +1812,9 @@ class User implements IDBAccessObject {
// If more than one group applies, use the group with the highest limit
foreach ( $this->getGroups() as $group ) {
if ( isset( $limits[$group] ) ) {
- if ( $userLimit === false || $limits[$group] > $userLimit ) {
+ if ( $userLimit === false
+ || $limits[$group][0] / $limits[$group][1] > $userLimit[0] / $userLimit[1]
+ ) {
$userLimit = $limits[$group];
}
}
@@ -1785,8 +1851,6 @@ class User implements IDBAccessObject {
}
}
- wfProfileOut( __METHOD__ . '-' . $action );
- wfProfileOut( __METHOD__ );
return $triggered;
}
@@ -1821,7 +1885,6 @@ class User implements IDBAccessObject {
*/
public function isBlockedFrom( $title, $bFromSlave = false ) {
global $wgBlockAllowsUTEdit;
- wfProfileIn( __METHOD__ );
$blocked = $this->isBlocked( $bFromSlave );
$allowUsertalk = ( $wgBlockAllowsUTEdit ? $this->mAllowUsertalk : false );
@@ -1832,9 +1895,8 @@ class User implements IDBAccessObject {
wfDebug( __METHOD__ . ": self-talk page, ignoring any blocks\n" );
}
- wfRunHooks( 'UserIsBlockedFrom', array( $this, $title, &$blocked, &$allowUsertalk ) );
+ Hooks::run( 'UserIsBlockedFrom', array( $this, $title, &$blocked, &$allowUsertalk ) );
- wfProfileOut( __METHOD__ );
return $blocked;
}
@@ -1884,7 +1946,7 @@ class User implements IDBAccessObject {
$ip = $this->getRequest()->getIP();
}
$blocked = false;
- wfRunHooks( 'UserIsBlockedGlobally', array( &$this, $ip, &$blocked ) );
+ Hooks::run( 'UserIsBlockedGlobally', array( &$this, $ip, &$blocked ) );
$this->mBlockedGlobally = (bool)$blocked;
return $this->mBlockedGlobally;
}
@@ -2009,17 +2071,7 @@ class User implements IDBAccessObject {
// Anon newtalk disabled by configuration.
$this->mNewtalk = false;
} else {
- global $wgMemc;
- $key = wfMemcKey( 'newtalk', 'ip', $this->getName() );
- $newtalk = $wgMemc->get( $key );
- if ( strval( $newtalk ) !== '' ) {
- $this->mNewtalk = (bool)$newtalk;
- } else {
- // Since we are caching this, make sure it is up to date by getting it
- // from the master
- $this->mNewtalk = $this->checkNewtalk( 'user_ip', $this->getName(), true );
- $wgMemc->set( $key, (int)$this->mNewtalk, 1800 );
- }
+ $this->mNewtalk = $this->checkNewtalk( 'user_ip', $this->getName() );
}
} else {
$this->mNewtalk = $this->checkNewtalk( 'user_id', $this->mId );
@@ -2044,7 +2096,7 @@ class User implements IDBAccessObject {
*/
public function getNewMessageLinks() {
$talks = array();
- if ( !wfRunHooks( 'UserRetrieveNewTalks', array( &$this, &$talks ) ) ) {
+ if ( !Hooks::run( 'UserRetrieveNewTalks', array( &$this, &$talks ) ) ) {
return $talks;
} elseif ( !$this->getNewtalk() ) {
return array();
@@ -2089,17 +2141,13 @@ class User implements IDBAccessObject {
* @see getNewtalk()
* @param string $field 'user_ip' for anonymous users, 'user_id' otherwise
* @param string|int $id User's IP address for anonymous users, User ID otherwise
- * @param bool $fromMaster True to fetch from the master, false for a slave
* @return bool True if the user has new messages
*/
- protected function checkNewtalk( $field, $id, $fromMaster = false ) {
- if ( $fromMaster ) {
- $db = wfGetDB( DB_MASTER );
- } else {
- $db = wfGetDB( DB_SLAVE );
- }
- $ok = $db->selectField( 'user_newtalk', $field,
- array( $field => $id ), __METHOD__ );
+ protected function checkNewtalk( $field, $id ) {
+ $dbr = wfGetDB( DB_SLAVE );
+
+ $ok = $dbr->selectField( 'user_newtalk', $field, array( $field => $id ), __METHOD__ );
+
return $ok !== false;
}
@@ -2194,9 +2242,15 @@ class User implements IDBAccessObject {
* user_touched field when we update things.
* @return string Timestamp in TS_MW format
*/
- private static function newTouchedTimestamp() {
+ private function newTouchedTimestamp() {
global $wgClockSkewFudge;
- return wfTimestamp( TS_MW, time() + $wgClockSkewFudge );
+
+ $time = wfTimestamp( TS_MW, time() + $wgClockSkewFudge );
+ if ( $this->mTouched && $time <= $this->mTouched ) {
+ $time = wfTimestamp( TS_MW, wfTimestamp( TS_UNIX, $this->mTouched ) + 1 );
+ }
+
+ return $time;
}
/**
@@ -2207,9 +2261,10 @@ class User implements IDBAccessObject {
* Called implicitly from invalidateCache() and saveSettings().
*/
public function clearSharedCache() {
+ global $wgMemc;
+
$this->load();
if ( $this->mId ) {
- global $wgMemc;
$wgMemc->delete( wfMemcKey( 'user', 'id', $this->mId ) );
}
}
@@ -2225,7 +2280,7 @@ class User implements IDBAccessObject {
}
$this->load();
if ( $this->mId ) {
- $this->mTouched = self::newTouchedTimestamp();
+ $this->mTouched = $this->newTouchedTimestamp();
$dbw = wfGetDB( DB_MASTER );
$userid = $this->mId;
@@ -2249,21 +2304,63 @@ class User implements IDBAccessObject {
}
/**
+ * Update the "touched" timestamp for the user
+ *
+ * This is useful on various login/logout events when making sure that
+ * a browser or proxy that has multiple tenants does not suffer cache
+ * pollution where the new user sees the old users content. The value
+ * of getTouched() is checked when determining 304 vs 200 responses.
+ * Unlike invalidateCache(), this preserves the User object cache and
+ * avoids database writes.
+ *
+ * @since 1.25
+ */
+ public function touch() {
+ global $wgMemc;
+
+ $this->load();
+
+ if ( $this->mId ) {
+ $key = wfMemcKey( 'user-quicktouched', 'id', $this->mId );
+ $timestamp = $this->newTouchedTimestamp();
+ $wgMemc->set( $key, $timestamp );
+ $this->mQuickTouched = $timestamp;
+ }
+ }
+
+ /**
* Validate the cache for this account.
* @param string $timestamp A timestamp in TS_MW format
* @return bool
*/
public function validateCache( $timestamp ) {
- $this->load();
- return ( $timestamp >= $this->mTouched );
+ return ( $timestamp >= $this->getTouched() );
}
/**
* Get the user touched timestamp
- * @return string Timestamp
+ * @return string TS_MW Timestamp
*/
public function getTouched() {
+ global $wgMemc;
+
$this->load();
+
+ if ( $this->mId ) {
+ if ( $this->mQuickTouched === null ) {
+ $key = wfMemcKey( 'user-quicktouched', 'id', $this->mId );
+ $timestamp = $wgMemc->get( $key );
+ if ( $timestamp ) {
+ $this->mQuickTouched = $timestamp;
+ } else {
+ # Set the timestamp to get HTTP 304 cache hits
+ $this->touch();
+ }
+ }
+
+ return max( $this->mTouched, $this->mQuickTouched );
+ }
+
return $this->mTouched;
}
@@ -2339,11 +2436,7 @@ class User implements IDBAccessObject {
$this->setToken();
$passwordFactory = self::getPasswordFactory();
- if ( $str === null ) {
- $this->mPassword = $passwordFactory->newFromCiphertext( null );
- } else {
- $this->mPassword = $passwordFactory->newFromPlaintext( $str );
- }
+ $this->mPassword = $passwordFactory->newFromPlaintext( $str );
$this->mNewpassword = $passwordFactory->newFromCiphertext( null );
$this->mNewpassTime = null;
@@ -2388,14 +2481,11 @@ class User implements IDBAccessObject {
public function setNewpassword( $str, $throttle = true ) {
$this->loadPasswords();
+ $this->mNewpassword = self::getPasswordFactory()->newFromPlaintext( $str );
if ( $str === null ) {
- $this->mNewpassword = '';
$this->mNewpassTime = null;
- } else {
- $this->mNewpassword = self::getPasswordFactory()->newFromPlaintext( $str );
- if ( $throttle ) {
- $this->mNewpassTime = wfTimestampNow();
- }
+ } elseif ( $throttle ) {
+ $this->mNewpassTime = wfTimestampNow();
}
}
@@ -2420,7 +2510,7 @@ class User implements IDBAccessObject {
*/
public function getEmail() {
$this->load();
- wfRunHooks( 'UserGetEmail', array( $this, &$this->mEmail ) );
+ Hooks::run( 'UserGetEmail', array( $this, &$this->mEmail ) );
return $this->mEmail;
}
@@ -2430,7 +2520,7 @@ class User implements IDBAccessObject {
*/
public function getEmailAuthenticationTimestamp() {
$this->load();
- wfRunHooks( 'UserGetEmailAuthenticationTimestamp', array( $this, &$this->mEmailAuthenticated ) );
+ Hooks::run( 'UserGetEmailAuthenticationTimestamp', array( $this, &$this->mEmailAuthenticated ) );
return $this->mEmailAuthenticated;
}
@@ -2445,7 +2535,7 @@ class User implements IDBAccessObject {
}
$this->invalidateEmail();
$this->mEmail = $str;
- wfRunHooks( 'UserSetEmail', array( $this, &$this->mEmail ) );
+ Hooks::run( 'UserSetEmail', array( $this, &$this->mEmail ) );
}
/**
@@ -2474,7 +2564,7 @@ class User implements IDBAccessObject {
$type = $oldaddr != '' ? 'changed' : 'set';
$result = $this->sendConfirmationMail( $type );
if ( $result->isGood() ) {
- // Say the the caller that a confirmation mail has been sent
+ // Say to the caller that a confirmation mail has been sent
$result->value = 'eauth';
}
} else {
@@ -2538,9 +2628,12 @@ class User implements IDBAccessObject {
/**
* Get all user's options
*
+ * @param int $flags Bitwise combination of:
+ * User::GETOPTIONS_EXCLUDE_DEFAULTS Exclude user options that are set
+ * to the default value. (Since 1.25)
* @return array
*/
- public function getOptions() {
+ public function getOptions( $flags = 0 ) {
global $wgHiddenPrefs;
$this->loadOptions();
$options = $this->mOptions;
@@ -2557,6 +2650,10 @@ class User implements IDBAccessObject {
}
}
+ if ( $flags & self::GETOPTIONS_EXCLUDE_DEFAULTS ) {
+ $options = array_diff_assoc( $options, self::getDefaultOptions() );
+ }
+
return $options;
}
@@ -2624,7 +2721,9 @@ class User implements IDBAccessObject {
$token = $this->getOption( $oname );
if ( !$token ) {
$token = $this->resetTokenFromOption( $oname );
- $this->saveSettings();
+ if ( !wfReadOnly() ) {
+ $this->saveSettings();
+ }
}
return $token;
}
@@ -2814,7 +2913,7 @@ class User implements IDBAccessObject {
}
}
- wfRunHooks( 'UserResetAllOptions', array( $this, &$newOptions, $this->mOptions, $resetKinds ) );
+ Hooks::run( 'UserResetAllOptions', array( $this, &$newOptions, $this->mOptions, $resetKinds ) );
$this->mOptions = $newOptions;
$this->mOptionsLoaded = true;
@@ -2850,7 +2949,7 @@ class User implements IDBAccessObject {
return false;
} else {
$https = $this->getBoolOption( 'prefershttps' );
- wfRunHooks( 'UserRequiresHTTPS', array( $this, &$https ) );
+ Hooks::run( 'UserRequiresHTTPS', array( $this, &$https ) );
if ( $https ) {
$https = wfCanIPUseHTTPS( $this->getRequest()->getIP() );
}
@@ -2881,7 +2980,7 @@ class User implements IDBAccessObject {
public function getRights() {
if ( is_null( $this->mRights ) ) {
$this->mRights = self::getGroupPermissions( $this->getEffectiveGroups() );
- wfRunHooks( 'UserGetRights', array( $this, &$this->mRights ) );
+ Hooks::run( 'UserGetRights', array( $this, &$this->mRights ) );
// Force reindexation of rights when a hook has unset one of them
$this->mRights = array_values( array_unique( $this->mRights ) );
}
@@ -2908,16 +3007,14 @@ class User implements IDBAccessObject {
*/
public function getEffectiveGroups( $recache = false ) {
if ( $recache || is_null( $this->mEffectiveGroups ) ) {
- wfProfileIn( __METHOD__ );
$this->mEffectiveGroups = array_unique( array_merge(
$this->getGroups(), // explicit groups
$this->getAutomaticGroups( $recache ) // implicit groups
) );
// Hook for additional groups
- wfRunHooks( 'UserEffectiveGroups', array( &$this, &$this->mEffectiveGroups ) );
+ Hooks::run( 'UserEffectiveGroups', array( &$this, &$this->mEffectiveGroups ) );
// Force reindexation of groups when a hook has unset one of them
$this->mEffectiveGroups = array_values( array_unique( $this->mEffectiveGroups ) );
- wfProfileOut( __METHOD__ );
}
return $this->mEffectiveGroups;
}
@@ -2931,7 +3028,6 @@ class User implements IDBAccessObject {
*/
public function getAutomaticGroups( $recache = false ) {
if ( $recache || is_null( $this->mImplicitGroups ) ) {
- wfProfileIn( __METHOD__ );
$this->mImplicitGroups = array( '*' );
if ( $this->getId() ) {
$this->mImplicitGroups[] = 'user';
@@ -2946,7 +3042,6 @@ class User implements IDBAccessObject {
// as getEffectiveGroups() depends on this function
$this->mEffectiveGroups = null;
}
- wfProfileOut( __METHOD__ );
}
return $this->mImplicitGroups;
}
@@ -2961,9 +3056,13 @@ class User implements IDBAccessObject {
* @return array Names of the groups the user has belonged to.
*/
public function getFormerGroups() {
+ $this->load();
+
if ( is_null( $this->mFormerGroups ) ) {
- $dbr = wfGetDB( DB_MASTER );
- $res = $dbr->select( 'user_former_groups',
+ $db = ( $this->queryFlagsUsed & self::READ_LATEST )
+ ? wfGetDB( DB_MASTER )
+ : wfGetDB( DB_SLAVE );
+ $res = $db->select( 'user_former_groups',
array( 'ufg_group' ),
array( 'ufg_user' => $this->mId ),
__METHOD__ );
@@ -2972,6 +3071,7 @@ class User implements IDBAccessObject {
$this->mFormerGroups[] = $row->ufg_group;
}
}
+
return $this->mFormerGroups;
}
@@ -2986,7 +3086,6 @@ class User implements IDBAccessObject {
if ( $this->mEditCount === null ) {
/* Populate the count, if it has not been populated yet */
- wfProfileIn( __METHOD__ );
$dbr = wfGetDB( DB_SLAVE );
// check if the user_editcount field has been initialized
$count = $dbr->selectField(
@@ -3000,7 +3099,6 @@ class User implements IDBAccessObject {
$count = $this->initEditCount();
}
$this->mEditCount = $count;
- wfProfileOut( __METHOD__ );
}
return (int)$this->mEditCount;
}
@@ -3009,20 +3107,26 @@ class User implements IDBAccessObject {
* Add the user to the given group.
* This takes immediate effect.
* @param string $group Name of the group to add
+ * @return bool
*/
public function addGroup( $group ) {
- if ( wfRunHooks( 'UserAddGroup', array( $this, &$group ) ) ) {
- $dbw = wfGetDB( DB_MASTER );
- if ( $this->getId() ) {
- $dbw->insert( 'user_groups',
- array(
- 'ug_user' => $this->getID(),
- 'ug_group' => $group,
- ),
- __METHOD__,
- array( 'IGNORE' ) );
- }
+ $this->load();
+
+ if ( !Hooks::run( 'UserAddGroup', array( $this, &$group ) ) ) {
+ return false;
+ }
+
+ $dbw = wfGetDB( DB_MASTER );
+ if ( $this->getId() ) {
+ $dbw->insert( 'user_groups',
+ array(
+ 'ug_user' => $this->getID(),
+ 'ug_group' => $group,
+ ),
+ __METHOD__,
+ array( 'IGNORE' ) );
}
+
$this->loadGroups();
$this->mGroups[] = $group;
// In case loadGroups was not called before, we now have the right twice.
@@ -3035,31 +3139,39 @@ class User implements IDBAccessObject {
$this->mRights = null;
$this->invalidateCache();
+
+ return true;
}
/**
* Remove the user from the given group.
* This takes immediate effect.
* @param string $group Name of the group to remove
+ * @return bool
*/
public function removeGroup( $group ) {
$this->load();
- if ( wfRunHooks( 'UserRemoveGroup', array( $this, &$group ) ) ) {
- $dbw = wfGetDB( DB_MASTER );
- $dbw->delete( 'user_groups',
- array(
- 'ug_user' => $this->getID(),
- 'ug_group' => $group,
- ), __METHOD__ );
- // Remember that the user was in this group
- $dbw->insert( 'user_former_groups',
- array(
- 'ufg_user' => $this->getID(),
- 'ufg_group' => $group,
- ),
- __METHOD__,
- array( 'IGNORE' ) );
+ if ( !Hooks::run( 'UserRemoveGroup', array( $this, &$group ) ) ) {
+ return false;
}
+
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->delete( 'user_groups',
+ array(
+ 'ug_user' => $this->getID(),
+ 'ug_group' => $group,
+ ), __METHOD__
+ );
+ // Remember that the user was in this group
+ $dbw->insert( 'user_former_groups',
+ array(
+ 'ufg_user' => $this->getID(),
+ 'ufg_group' => $group,
+ ),
+ __METHOD__,
+ array( 'IGNORE' )
+ );
+
$this->loadGroups();
$this->mGroups = array_diff( $this->mGroups, array( $group ) );
@@ -3069,6 +3181,8 @@ class User implements IDBAccessObject {
$this->mRights = null;
$this->invalidateCache();
+
+ return true;
}
/**
@@ -3268,7 +3382,7 @@ class User implements IDBAccessObject {
// If we're working on user's talk page, we should update the talk page message indicator
if ( $title->getNamespace() == NS_USER_TALK && $title->getText() == $this->getName() ) {
- if ( !wfRunHooks( 'UserClearNewTalkNotification', array( &$this, $oldid ) ) ) {
+ if ( !Hooks::run( 'UserClearNewTalkNotification', array( &$this, $oldid ) ) ) {
return;
}
@@ -3354,10 +3468,17 @@ class User implements IDBAccessObject {
* false: Force NOT setting the secure attribute when setting the cookie
* null (default): Use the default ($wgCookieSecure) to set the secure attribute
* @param array $params Array of options sent passed to WebResponse::setcookie()
+ * @param WebRequest|null $request WebRequest object to use; $wgRequest will be used if null
+ * is passed.
*/
- protected function setCookie( $name, $value, $exp = 0, $secure = null, $params = array() ) {
+ protected function setCookie(
+ $name, $value, $exp = 0, $secure = null, $params = array(), $request = null
+ ) {
+ if ( $request === null ) {
+ $request = $this->getRequest();
+ }
$params['secure'] = $secure;
- $this->getRequest()->response()->setcookie( $name, $value, $exp, $params );
+ $request->response()->setcookie( $name, $value, $exp, $params );
}
/**
@@ -3396,7 +3517,9 @@ class User implements IDBAccessObject {
// Simply by setting every cell in the user_token column to NULL and letting them be
// regenerated as users log back into the wiki.
$this->setToken();
- $this->saveSettings();
+ if ( !wfReadOnly() ) {
+ $this->saveSettings();
+ }
}
$session = array(
'wsUserID' => $this->mId,
@@ -3413,7 +3536,7 @@ class User implements IDBAccessObject {
$cookies['Token'] = false;
}
- wfRunHooks( 'UserSetCookies', array( $this, &$session, &$cookies ) );
+ Hooks::run( 'UserSetCookies', array( $this, &$session, &$cookies ) );
foreach ( $session as $name => $value ) {
$request->setSessionData( $name, $value );
@@ -3422,7 +3545,7 @@ class User implements IDBAccessObject {
if ( $value === false ) {
$this->clearCookie( $name );
} else {
- $this->setCookie( $name, $value, 0, $secure );
+ $this->setCookie( $name, $value, 0, $secure, array(), $request );
}
}
@@ -3448,7 +3571,7 @@ class User implements IDBAccessObject {
* Log this user out.
*/
public function logout() {
- if ( wfRunHooks( 'UserLogout', array( &$this ) ) ) {
+ if ( Hooks::run( 'UserLogout', array( &$this ) ) ) {
$this->doLogout();
}
}
@@ -3477,16 +3600,34 @@ class User implements IDBAccessObject {
public function saveSettings() {
global $wgAuth;
- $this->load();
- $this->loadPasswords();
if ( wfReadOnly() ) {
+ // @TODO: caller should deal with this instead!
+ // This should really just be an exception.
+ MWExceptionHandler::logException( new DBExpectedError(
+ null,
+ "Could not update user with ID '{$this->mId}'; DB is read-only."
+ ) );
return;
}
+
+ $this->load();
+ $this->loadPasswords();
if ( 0 == $this->mId ) {
- return;
+ return; // anon
}
- $this->mTouched = self::newTouchedTimestamp();
+ // This method is for updating existing users, so the user should
+ // have been loaded from the master to begin with to avoid problems.
+ if ( !( $this->queryFlagsUsed & self::READ_LATEST ) ) {
+ wfWarn( "Attempting to save slave-loaded User object with ID '{$this->mId}'." );
+ }
+
+ // Get a new user_touched that is higher than the old one.
+ // This will be used for a CAS check as a last-resort safety
+ // check against race conditions and slave lag.
+ $oldTouched = $this->mTouched;
+ $this->mTouched = $this->newTouchedTimestamp();
+
if ( !$wgAuth->allowSetLocalPassword() ) {
$this->mPassword = self::getPasswordFactory()->newFromCiphertext( null );
}
@@ -3507,13 +3648,25 @@ class User implements IDBAccessObject {
'user_email_token_expires' => $dbw->timestampOrNull( $this->mEmailTokenExpires ),
'user_password_expires' => $dbw->timestampOrNull( $this->mPasswordExpires ),
), array( /* WHERE */
- 'user_id' => $this->mId
+ 'user_id' => $this->mId,
+ 'user_touched' => $dbw->timestamp( $oldTouched ) // CAS check
), __METHOD__
);
+ if ( !$dbw->affectedRows() ) {
+ // User was changed in the meantime or loaded with stale data
+ MWExceptionHandler::logException( new MWException(
+ "CAS update failed on user_touched for user ID '{$this->mId}'."
+ ) );
+ // Maybe the problem was a missed cache update; clear it to be safe
+ $this->clearSharedCache();
+
+ return;
+ }
+
$this->saveOptions();
- wfRunHooks( 'UserSaveSettings', array( $this ) );
+ Hooks::run( 'UserSaveSettings', array( $this ) );
$this->clearSharedCache();
$this->getUserPage()->invalidateCache();
}
@@ -3579,7 +3732,7 @@ class User implements IDBAccessObject {
'user_token' => strval( $user->mToken ),
'user_registration' => $dbw->timestamp( $user->mRegistration ),
'user_editcount' => 0,
- 'user_touched' => $dbw->timestamp( self::newTouchedTimestamp() ),
+ 'user_touched' => $dbw->timestamp( $user->newTouchedTimestamp() ),
);
foreach ( $params as $name => $value ) {
$fields["user_$name"] = $value;
@@ -3626,7 +3779,7 @@ class User implements IDBAccessObject {
$this->setToken(); // init token
}
- $this->mTouched = self::newTouchedTimestamp();
+ $this->mTouched = $this->newTouchedTimestamp();
$dbw = wfGetDB( DB_MASTER );
$inWrite = $dbw->writesOrCallbacksPending();
@@ -3661,7 +3814,7 @@ class User implements IDBAccessObject {
// using CentralAuth. It's should be OK to commit and break the snapshot.
$dbw->commit( __METHOD__, 'flush' );
$options = array();
- $flags = 0;
+ $flags = self::READ_LATEST;
}
$this->mId = $dbw->selectField( 'user', 'user_id',
array( 'user_name' => $this->mName ), __METHOD__, $options );
@@ -3793,8 +3946,6 @@ class User implements IDBAccessObject {
public function checkPassword( $password ) {
global $wgAuth, $wgLegacyEncoding;
- $section = new ProfileSection( __METHOD__ );
-
$this->loadPasswords();
// Some passwords will give a fatal Status, which means there is
@@ -3817,7 +3968,6 @@ class User implements IDBAccessObject {
return false;
}
- $passwordFactory = self::getPasswordFactory();
if ( !$this->mPassword->equals( $password ) ) {
if ( $wgLegacyEncoding ) {
// Some wikis were converted from ISO 8859-1 to UTF-8, the passwords can't be converted
@@ -3831,7 +3981,8 @@ class User implements IDBAccessObject {
}
}
- if ( $passwordFactory->needsUpdate( $this->mPassword ) ) {
+ $passwordFactory = self::getPasswordFactory();
+ if ( $passwordFactory->needsUpdate( $this->mPassword ) && !wfReadOnly() ) {
$this->mPassword = $passwordFactory->newFromPlaintext( $password );
$this->saveSettings();
}
@@ -3877,22 +4028,15 @@ class User implements IDBAccessObject {
}
/**
- * Initialize (if necessary) and return a session token value
- * which can be used in edit forms to show that the user's
- * login credentials aren't being hijacked with a foreign form
- * submission.
- *
- * @since 1.19
+ * Internal implementation for self::getEditToken() and
+ * self::matchEditToken().
*
- * @param string|array $salt Array of Strings Optional function-specific data for hashing
- * @param WebRequest|null $request WebRequest object to use or null to use $wgRequest
- * @return string The new edit token
+ * @param string|array $salt
+ * @param WebRequest $request
+ * @param string|int $timestamp
+ * @return string
*/
- public function getEditToken( $salt = '', $request = null ) {
- if ( $request == null ) {
- $request = $this->getRequest();
- }
-
+ private function getEditTokenAtTimestamp( $salt, $request, $timestamp ) {
if ( $this->isAnon() ) {
return self::EDIT_TOKEN_SUFFIX;
} else {
@@ -3904,11 +4048,31 @@ class User implements IDBAccessObject {
if ( is_array( $salt ) ) {
$salt = implode( '|', $salt );
}
- return md5( $token . $salt ) . self::EDIT_TOKEN_SUFFIX;
+ return hash_hmac( 'md5', $timestamp . $salt, $token, false ) .
+ dechex( $timestamp ) .
+ self::EDIT_TOKEN_SUFFIX;
}
}
/**
+ * Initialize (if necessary) and return a session token value
+ * which can be used in edit forms to show that the user's
+ * login credentials aren't being hijacked with a foreign form
+ * submission.
+ *
+ * @since 1.19
+ *
+ * @param string|array $salt Array of Strings Optional function-specific data for hashing
+ * @param WebRequest|null $request WebRequest object to use or null to use $wgRequest
+ * @return string The new edit token
+ */
+ public function getEditToken( $salt = '', $request = null ) {
+ return $this->getEditTokenAtTimestamp(
+ $salt, $request ?: $this->getRequest(), wfTimestamp()
+ );
+ }
+
+ /**
* Generate a looking random token for various uses.
*
* @return string The new random token
@@ -3920,6 +4084,20 @@ class User implements IDBAccessObject {
}
/**
+ * Get the embedded timestamp from a token.
+ * @param string $val Input token
+ * @return int|null
+ */
+ public static function getEditTokenTimestamp( $val ) {
+ $suffixLen = strlen( self::EDIT_TOKEN_SUFFIX );
+ if ( strlen( $val ) <= 32 + $suffixLen ) {
+ return null;
+ }
+
+ return hexdec( substr( $val, 32, -$suffixLen ) );
+ }
+
+ /**
* Check given value against the token value stored in the session.
* A match should confirm that the form was submitted from the
* user's own login session, not a form submission from a third-party
@@ -3928,15 +4106,32 @@ class User implements IDBAccessObject {
* @param string $val Input value to compare
* @param string $salt Optional function-specific data for hashing
* @param WebRequest|null $request Object to use or null to use $wgRequest
+ * @param int $maxage Fail tokens older than this, in seconds
* @return bool Whether the token matches
*/
- public function matchEditToken( $val, $salt = '', $request = null ) {
- $sessionToken = $this->getEditToken( $salt, $request );
+ public function matchEditToken( $val, $salt = '', $request = null, $maxage = null ) {
+ if ( $this->isAnon() ) {
+ return $val === self::EDIT_TOKEN_SUFFIX;
+ }
+
+ $timestamp = self::getEditTokenTimestamp( $val );
+ if ( $timestamp === null ) {
+ return false;
+ }
+ if ( $maxage !== null && $timestamp < wfTimestamp() - $maxage ) {
+ // Expired token
+ return false;
+ }
+
+ $sessionToken = $this->getEditTokenAtTimestamp(
+ $salt, $request ?: $this->getRequest(), $timestamp
+ );
+
if ( $val != $sessionToken ) {
wfDebug( "User::matchEditToken: broken session data\n" );
}
- return $val == $sessionToken;
+ return hash_equals( $sessionToken, $val );
}
/**
@@ -3946,11 +4141,12 @@ class User implements IDBAccessObject {
* @param string $val Input value to compare
* @param string $salt Optional function-specific data for hashing
* @param WebRequest|null $request Object to use or null to use $wgRequest
+ * @param int $maxage Fail tokens older than this, in seconds
* @return bool Whether the token matches
*/
- public function matchEditTokenNoSuffix( $val, $salt = '', $request = null ) {
- $sessionToken = $this->getEditToken( $salt, $request );
- return substr( $sessionToken, 0, 32 ) == substr( $val, 0, 32 );
+ public function matchEditTokenNoSuffix( $val, $salt = '', $request = null, $maxage = null ) {
+ $val = substr( $val, 0, strspn( $val, '0123456789abcdef' ) ) . self::EDIT_TOKEN_SUFFIX;
+ return $this->matchEditToken( $val, $salt, $request, $maxage );
}
/**
@@ -4085,7 +4281,7 @@ class User implements IDBAccessObject {
// and fire the ConfirmEmailComplete hook on redundant confirmations.
if ( !$this->isEmailConfirmed() ) {
$this->setEmailAuthenticationTimestamp( wfTimestampNow() );
- wfRunHooks( 'ConfirmEmailComplete', array( $this ) );
+ Hooks::run( 'ConfirmEmailComplete', array( $this ) );
}
return true;
}
@@ -4103,7 +4299,7 @@ class User implements IDBAccessObject {
$this->mEmailTokenExpires = null;
$this->setEmailAuthenticationTimestamp( null );
$this->mEmail = '';
- wfRunHooks( 'InvalidateEmailComplete', array( $this ) );
+ Hooks::run( 'InvalidateEmailComplete', array( $this ) );
return true;
}
@@ -4114,7 +4310,7 @@ class User implements IDBAccessObject {
public function setEmailAuthenticationTimestamp( $timestamp ) {
$this->load();
$this->mEmailAuthenticated = $timestamp;
- wfRunHooks( 'UserSetEmailAuthenticationTimestamp', array( $this, &$this->mEmailAuthenticated ) );
+ Hooks::run( 'UserSetEmailAuthenticationTimestamp', array( $this, &$this->mEmailAuthenticated ) );
}
/**
@@ -4128,7 +4324,7 @@ class User implements IDBAccessObject {
return false;
}
$canSend = $this->isEmailConfirmed();
- wfRunHooks( 'UserCanSendEmail', array( &$this, &$canSend ) );
+ Hooks::run( 'UserCanSendEmail', array( &$this, &$canSend ) );
return $canSend;
}
@@ -4155,7 +4351,7 @@ class User implements IDBAccessObject {
global $wgEmailAuthentication;
$this->load();
$confirmed = true;
- if ( wfRunHooks( 'EmailConfirmed', array( &$this, &$confirmed ) ) ) {
+ if ( Hooks::run( 'EmailConfirmed', array( &$this, &$confirmed ) ) ) {
if ( $this->isAnon() ) {
return false;
}
@@ -4313,7 +4509,7 @@ class User implements IDBAccessObject {
}
// Allow extensions (e.g. OAuth) to say false
- if ( !wfRunHooks( 'UserIsEveryoneAllowed', array( $right ) ) ) {
+ if ( !Hooks::run( 'UserIsEveryoneAllowed', array( $right ) ) ) {
$cache[$right] = false;
return false;
}
@@ -4361,7 +4557,7 @@ class User implements IDBAccessObject {
/**
* Get a list of all available permissions.
- * @return array Array of permission names
+ * @return string[] Array of permission names
*/
public static function getAllRights() {
if ( self::$mAllRights === false ) {
@@ -4371,7 +4567,7 @@ class User implements IDBAccessObject {
} else {
self::$mAllRights = self::$mCoreRights;
}
- wfRunHooks( 'UserGetAllRights', array( &self::$mAllRights ) );
+ Hooks::run( 'UserGetAllRights', array( &self::$mAllRights ) );
}
return self::$mAllRights;
}
@@ -4384,8 +4580,8 @@ class User implements IDBAccessObject {
global $wgImplicitGroups;
$groups = $wgImplicitGroups;
- # Deprecated, use $wgImplictGroups instead
- wfRunHooks( 'UserGetImplicitGroups', array( &$groups ) );
+ # Deprecated, use $wgImplicitGroups instead
+ Hooks::run( 'UserGetImplicitGroups', array( &$groups ), '1.25' );
return $groups;
}
@@ -4423,7 +4619,7 @@ class User implements IDBAccessObject {
if ( $title ) {
return Linker::link( $title, htmlspecialchars( $text ) );
} else {
- return $text;
+ return htmlspecialchars( $text );
}
}
@@ -4441,7 +4637,7 @@ class User implements IDBAccessObject {
}
$title = self::getGroupPage( $group );
if ( $title ) {
- $page = $title->getPrefixedText();
+ $page = $title->getFullText();
return "[[$page|$text]]";
} else {
return $text;
@@ -4478,6 +4674,7 @@ class User implements IDBAccessObject {
// Same thing for remove
if ( empty( $wgRemoveGroups[$group] ) ) {
+ // Do nothing
} elseif ( $wgRemoveGroups[$group] === true ) {
$groups['remove'] = self::getAllGroups();
} elseif ( is_array( $wgRemoveGroups[$group] ) ) {
@@ -4503,6 +4700,7 @@ class User implements IDBAccessObject {
// Now figure out what groups the user can add to him/herself
if ( empty( $wgGroupsAddToSelf[$group] ) ) {
+ // Do nothing
} elseif ( $wgGroupsAddToSelf[$group] === true ) {
// No idea WHY this would be used, but it's there
$groups['add-self'] = User::getAllGroups();
@@ -4511,6 +4709,7 @@ class User implements IDBAccessObject {
}
if ( empty( $wgGroupsRemoveFromSelf[$group] ) ) {
+ // Do nothing
} elseif ( $wgGroupsRemoveFromSelf[$group] === true ) {
$groups['remove-self'] = User::getAllGroups();
} elseif ( is_array( $wgGroupsRemoveFromSelf[$group] ) ) {
@@ -4713,7 +4912,7 @@ class User implements IDBAccessObject {
if ( $action === true ) {
$action = 'byemail';
} elseif ( $action === false ) {
- if ( $this->getName() == $wgUser->getName() ) {
+ if ( $this->equals( $wgUser ) ) {
$action = 'create';
} else {
$action = 'create2';
@@ -4793,7 +4992,9 @@ class User implements IDBAccessObject {
if ( !is_array( $data ) ) {
wfDebug( "User: loading options for user " . $this->getId() . " from database.\n" );
// Load from database
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = ( $this->queryFlagsUsed & self::READ_LATEST )
+ ? wfGetDB( DB_MASTER )
+ : wfGetDB( DB_SLAVE );
$res = $dbr->select(
'user_properties',
@@ -4816,7 +5017,7 @@ class User implements IDBAccessObject {
$this->mOptionsLoaded = true;
- wfRunHooks( 'UserLoadOptions', array( $this, &$this->mOptions ) );
+ Hooks::run( 'UserLoadOptions', array( $this, &$this->mOptions ) );
}
/**
@@ -4832,7 +5033,7 @@ class User implements IDBAccessObject {
// Allow hooks to abort, for instance to save to a global profile.
// Reset options to default state before saving.
- if ( !wfRunHooks( 'UserSaveOptions', array( $this, &$saveOptions ) ) ) {
+ if ( !Hooks::run( 'UserSaveOptions', array( $this, &$saveOptions ) ) ) {
return;
}
@@ -4998,4 +5199,15 @@ class User implements IDBAccessObject {
return Status::newFatal( 'badaccess-group0' );
}
}
+
+ /**
+ * Checks if two user objects point to the same user.
+ *
+ * @since 1.25
+ * @param User $user
+ * @return bool
+ */
+ public function equals( User $user ) {
+ return $this->getName() === $user->getName();
+ }
}
diff --git a/includes/UserArray.php b/includes/UserArray.php
index 7da65827..31bd601c 100644
--- a/includes/UserArray.php
+++ b/includes/UserArray.php
@@ -27,7 +27,7 @@ abstract class UserArray implements Iterator {
*/
static function newFromResult( $res ) {
$userArray = null;
- if ( !wfRunHooks( 'UserArrayFromResult', array( &$userArray, $res ) ) ) {
+ if ( !Hooks::run( 'UserArrayFromResult', array( &$userArray, $res ) ) ) {
return null;
}
if ( $userArray === null ) {
@@ -57,6 +57,27 @@ abstract class UserArray implements Iterator {
}
/**
+ * @since 1.25
+ * @param array $names
+ * @return UserArrayFromResult
+ */
+ static function newFromNames( $names ) {
+ $names = array_map( 'strval', (array)$names ); // paranoia
+ if ( !$names ) {
+ // Database::select() doesn't like empty arrays
+ return new ArrayIterator( array() );
+ }
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select(
+ 'user',
+ User::selectFields(),
+ array( 'user_name' => array_unique( $names ) ),
+ __METHOD__
+ );
+ return self::newFromResult( $res );
+ }
+
+ /**
* @param ResultWrapper $res
* @return UserArrayFromResult
*/
diff --git a/includes/UserRightsProxy.php b/includes/UserRightsProxy.php
index 53c69d81..1b9e4b69 100644
--- a/includes/UserRightsProxy.php
+++ b/includes/UserRightsProxy.php
@@ -114,7 +114,8 @@ class UserRightsProxy {
*/
private static function newFromLookup( $database, $field, $value, $ignoreInvalidDB = false ) {
global $wgSharedDB, $wgSharedTables;
- // If the user table is shared, perform the user query on it, but don't pass it to the UserRightsProxy,
+ // If the user table is shared, perform the user query on it,
+ // but don't pass it to the UserRightsProxy,
// as user rights are normally not shared.
if ( $wgSharedDB && in_array( 'user', $wgSharedTables ) ) {
$userdb = self::getDB( $wgSharedDB, $ignoreInvalidDB );
@@ -211,6 +212,8 @@ class UserRightsProxy {
/**
* Replaces User::addUserGroup()
* @param string $group
+ *
+ * @return bool
*/
function addGroup( $group ) {
$this->db->insert( 'user_groups',
@@ -220,11 +223,15 @@ class UserRightsProxy {
),
__METHOD__,
array( 'IGNORE' ) );
+
+ return true;
}
/**
* Replaces User::removeUserGroup()
* @param string $group
+ *
+ * @return bool
*/
function removeGroup( $group ) {
$this->db->delete( 'user_groups',
@@ -233,6 +240,8 @@ class UserRightsProxy {
'ug_group' => $group,
),
__METHOD__ );
+
+ return true;
}
/**
diff --git a/includes/WatchedItem.php b/includes/WatchedItem.php
index ab136b89..4d226924 100644
--- a/includes/WatchedItem.php
+++ b/includes/WatchedItem.php
@@ -275,7 +275,6 @@ class WatchedItem {
* @return bool
*/
public static function batchAddWatch( array $items ) {
- $section = new ProfileSection( __METHOD__ );
if ( wfReadOnly() ) {
return false;
@@ -331,11 +330,9 @@ class WatchedItem {
* @return bool
*/
public function removeWatch() {
- wfProfileIn( __METHOD__ );
// Only loggedin user can have a watchlist
if ( wfReadOnly() || $this->mUser->isAnon() || !$this->isAllowed( 'editmywatchlist' ) ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -370,7 +367,6 @@ class WatchedItem {
$this->watched = false;
- wfProfileOut( __METHOD__ );
return $success;
}
@@ -401,7 +397,8 @@ class WatchedItem {
$newtitle = $nt->getDBkey();
$dbw = wfGetDB( DB_MASTER );
- $res = $dbw->select( 'watchlist', 'wl_user',
+ $res = $dbw->select( 'watchlist',
+ array( 'wl_user', 'wl_notificationtimestamp' ),
array( 'wl_namespace' => $oldnamespace, 'wl_title' => $oldtitle ),
__METHOD__, 'FOR UPDATE'
);
@@ -411,7 +408,8 @@ class WatchedItem {
$values[] = array(
'wl_user' => $s->wl_user,
'wl_namespace' => $newnamespace,
- 'wl_title' => $newtitle
+ 'wl_title' => $newtitle,
+ 'wl_notificationtimestamp' => $s->wl_notificationtimestamp,
);
}
diff --git a/includes/WebRequest.php b/includes/WebRequest.php
index b187c4ac..054eceb9 100644
--- a/includes/WebRequest.php
+++ b/includes/WebRequest.php
@@ -51,15 +51,20 @@ class WebRequest {
private $ip;
/**
+ * The timestamp of the start of the request, with microsecond precision.
+ * @var float
+ */
+ protected $requestTime;
+
+ /**
* Cached URL protocol
* @var string
*/
protected $protocol;
public function __construct() {
- if ( function_exists( 'get_magic_quotes_gpc' ) && get_magic_quotes_gpc() ) {
- throw new MWException( "MediaWiki does not function when magic quotes are enabled." );
- }
+ $this->requestTime = isset( $_SERVER['REQUEST_TIME_FLOAT'] )
+ ? $_SERVER['REQUEST_TIME_FLOAT'] : microtime( true );
// POST overrides GET data
// We don't use $_REQUEST here to avoid interference from cookies...
@@ -138,7 +143,7 @@ class WebRequest {
);
}
- wfRunHooks( 'WebRequestPathInfoRouter', array( $router ) );
+ Hooks::run( 'WebRequestPathInfoRouter', array( $router ) );
$matches = $router->parse( $path );
}
@@ -207,9 +212,9 @@ class WebRequest {
* @return array
*/
public static function detectProtocol() {
- if ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on' ) ||
+ if ( ( !empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' ) ||
( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) &&
- $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) ) {
+ $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) ) {
return 'https';
} else {
return 'http';
@@ -217,6 +222,17 @@ class WebRequest {
}
/**
+ * Get the number of seconds to have elapsed since request start,
+ * in fractional seconds, with microsecond resolution.
+ *
+ * @return float
+ * @since 1.25
+ */
+ public function getElapsedTime() {
+ return microtime( true ) - $this->requestTime;
+ }
+
+ /**
* Get the current URL protocol (http or https)
* @return string
*/
@@ -289,7 +305,7 @@ class WebRequest {
}
} else {
global $wgContLang;
- $data = isset( $wgContLang ) ? $wgContLang->normalize( $data ) : UtfNormal::cleanUp( $data );
+ $data = isset( $wgContLang ) ? $wgContLang->normalize( $data ) : UtfNormal\Validator::cleanUp( $data );
}
return $data;
}
@@ -705,21 +721,22 @@ class WebRequest {
/**
* Take an arbitrary query and rewrite the present URL to include it
+ * @deprecated Use appendQueryValue/appendQueryArray instead
* @param string $query Query string fragment; do not include initial '?'
- *
* @return string
*/
public function appendQuery( $query ) {
+ wfDeprecated( __METHOD__, '1.25' );
return $this->appendQueryArray( wfCgiToArray( $query ) );
}
/**
* @param string $key
* @param string $value
- * @param bool $onlyquery
+ * @param bool $onlyquery [deprecated]
* @return string
*/
- public function appendQueryValue( $key, $value, $onlyquery = false ) {
+ public function appendQueryValue( $key, $value, $onlyquery = true ) {
return $this->appendQueryArray( array( $key => $value ), $onlyquery );
}
@@ -727,16 +744,21 @@ class WebRequest {
* Appends or replaces value of query variables.
*
* @param array $array Array of values to replace/add to query
- * @param bool $onlyquery Whether to only return the query string and not the complete URL
+ * @param bool $onlyquery Whether to only return the query string and not the complete URL [deprecated]
* @return string
*/
- public function appendQueryArray( $array, $onlyquery = false ) {
+ public function appendQueryArray( $array, $onlyquery = true ) {
global $wgTitle;
$newquery = $this->getQueryValues();
unset( $newquery['title'] );
$newquery = array_merge( $newquery, $array );
$query = wfArrayToCgi( $newquery );
- return $onlyquery ? $query : $wgTitle->getLocalURL( $query );
+ if ( !$onlyquery ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ return $wgTitle->getLocalURL( $query );
+ }
+
+ return $query;
}
/**
@@ -1112,7 +1134,7 @@ HTML;
}
# Allow extensions to improve our guess
- wfRunHooks( 'GetIP', array( &$ip ) );
+ Hooks::run( 'GetIP', array( &$ip ) );
if ( !$ip ) {
throw new MWException( "Unable to determine IP." );
@@ -1255,6 +1277,7 @@ class WebRequestUpload {
class FauxRequest extends WebRequest {
private $wasPosted = false;
private $session = array();
+ private $requestUrl;
/**
* @param array $data Array of *non*-urlencoded key => value pairs, the
@@ -1267,6 +1290,8 @@ class FauxRequest extends WebRequest {
public function __construct( $data = array(), $wasPosted = false,
$session = null, $protocol = 'http'
) {
+ $this->requestTime = microtime( true );
+
if ( is_array( $data ) ) {
$this->data = $data;
} else {
@@ -1334,8 +1359,15 @@ class FauxRequest extends WebRequest {
return false;
}
+ public function setRequestURL( $url ) {
+ $this->requestUrl = $url;
+ }
+
public function getRequestURL() {
- $this->notImplemented( __METHOD__ );
+ if ( $this->requestUrl === null ) {
+ throw new MWException( 'Request URL not set' );
+ }
+ return $this->requestUrl;
}
public function getProtocol() {
@@ -1483,4 +1515,8 @@ class DerivativeRequest extends FauxRequest {
public function getProtocol() {
return $this->base->getProtocol();
}
+
+ public function getElapsedTime() {
+ return $this->base->getElapsedTime();
+ }
}
diff --git a/includes/WebResponse.php b/includes/WebResponse.php
index ad9f4e66..ab34931c 100644
--- a/includes/WebResponse.php
+++ b/includes/WebResponse.php
@@ -38,9 +38,25 @@ class WebResponse {
}
/**
+ * Get a response header
+ * @param string $key The name of the header to get (case insensitive).
+ * @return string|null The header value (if set); null otherwise.
+ * @since 1.25
+ */
+ public function getHeader( $key ) {
+ foreach ( headers_list() as $header ) {
+ list( $name, $val ) = explode( ':', $header, 2 );
+ if ( !strcasecmp( $name, $key ) ) {
+ return trim( $val );
+ }
+ }
+ return null;
+ }
+
+ /**
* Set the browser cookie
- * @param string $name Name of cookie
- * @param string $value Value to give cookie
+ * @param string $name The name of the cookie.
+ * @param string $value The value to be stored in the cookie.
* @param int|null $expire Unix timestamp (in seconds) when the cookie should expire.
* 0 (the default) causes it to expire $wgCookieExpiration seconds from now.
* null causes it to be a session cookie.
@@ -56,7 +72,7 @@ class WebResponse {
* 'prefix', 'domain', and 'secure'
* @since 1.22 Replaced $prefix, $domain, and $forceSecure with $options
*/
- public function setcookie( $name, $value, $expire = 0, $options = null ) {
+ public function setcookie( $name, $value, $expire = 0, $options = array() ) {
global $wgCookiePath, $wgCookiePrefix, $wgCookieDomain;
global $wgCookieSecure, $wgCookieExpiration, $wgCookieHttpOnly;
@@ -89,7 +105,7 @@ class WebResponse {
$func = $options['raw'] ? 'setrawcookie' : 'setcookie';
- if ( wfRunHooks( 'WebResponseSetCookie', array( &$name, &$value, &$expire, $options ) ) ) {
+ if ( Hooks::run( 'WebResponseSetCookie', array( &$name, &$value, &$expire, $options ) ) ) {
wfDebugLog( 'cookie',
$func . ': "' . implode( '", "',
array(
@@ -148,9 +164,9 @@ class FauxResponse extends WebResponse {
/**
* @param string $key The name of the header to get (case insensitive).
- * @return string
+ * @return string|null The header value (if set); null otherwise.
*/
- public function getheader( $key ) {
+ public function getHeader( $key ) {
$key = strtoupper( $key );
if ( isset( $this->headers[$key] ) ) {
@@ -169,20 +185,18 @@ class FauxResponse extends WebResponse {
}
/**
- * @todo document. It just ignore optional parameters.
- *
- * @param string $name Name of cookie
- * @param string $value Value to give cookie
- * @param int $expire Number of seconds til cookie expires (Default: 0)
- * @param array $options Ignored
+ * @param string $name The name of the cookie.
+ * @param string $value The value to be stored in the cookie.
+ * @param int|null $expire Ignored in this faux subclass.
+ * @param array $options Ignored in this faux subclass.
*/
- public function setcookie( $name, $value, $expire = 0, $options = null ) {
+ public function setcookie( $name, $value, $expire = 0, $options = array() ) {
$this->cookies[$name] = $value;
}
/**
* @param string $name
- * @return string
+ * @return string|null
*/
public function getcookie( $name ) {
if ( isset( $this->cookies[$name] ) ) {
diff --git a/includes/WebStart.php b/includes/WebStart.php
index 2ae72dcc..9c71f3e1 100644
--- a/includes/WebStart.php
+++ b/includes/WebStart.php
@@ -6,7 +6,7 @@
* MW_NO_SETUP is defined.
*
* Setup.php (if loaded) then sets up GlobalFunctions, the AutoLoader,
- * and the configuration globals (though not $wgTitle).
+ * and the configuration globals.
*
* 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
@@ -34,12 +34,30 @@ if ( ini_get( 'register_globals' ) ) {
. 'for help on how to disable it.' );
}
+if ( function_exists( 'get_magic_quotes_gpc' ) && get_magic_quotes_gpc() ) {
+ die( 'MediaWiki does not function when magic quotes are enabled. '
+ . 'Please see the <a href="https://php.net/manual/security.magicquotes.disabling.php">PHP Manual</a> '
+ . 'for help on how to disable magic quotes.' );
+}
+
+
# bug 15461: Make IE8 turn off content sniffing. Everybody else should ignore this
# We're adding it here so that it's *always* set, even for alternate entry
# points and when $wgOut gets disabled or overridden.
header( 'X-Content-Type-Options: nosniff' );
-$wgRequestTime = microtime( true );
+# Approximate $_SERVER['REQUEST_TIME_FLOAT'] for PHP<5.4
+if ( !isset( $_SERVER['REQUEST_TIME_FLOAT'] ) ) {
+ $_SERVER['REQUEST_TIME_FLOAT'] = microtime( true );
+}
+
+/**
+ * @var float Request start time as fractional seconds since epoch
+ * @deprecated since 1.25; use $_SERVER['REQUEST_TIME_FLOAT'] or
+ * WebRequest::getElapsedTime() instead.
+ */
+$wgRequestTime = $_SERVER['REQUEST_TIME_FLOAT'];
+
unset( $IP );
# Valid web server entry point, enable includes.
@@ -58,8 +76,8 @@ if ( $IP === false ) {
$IP = realpath( '.' ) ?: dirname( __DIR__ );
}
-# Load the profiler
-require_once "$IP/includes/profiler/Profiler.php";
+# Grab profiling functions
+require_once "$IP/includes/profiler/ProfilerFunctions.php";
$wgRUstart = wfGetRusage() ?: array();
# Start the autoloader, so that extensions can derive classes from core files
@@ -74,11 +92,13 @@ if ( file_exists( "$IP/StartProfiler.php" ) ) {
require "$IP/StartProfiler.php";
}
-wfProfileIn( 'WebStart.php-conf' );
# Load default settings
require_once "$IP/includes/DefaultSettings.php";
+# Load global functions
+require_once "$IP/includes/GlobalFunctions.php";
+
# Load composer's autoloader if present
if ( is_readable( "$IP/vendor/autoload.php" ) ) {
require_once "$IP/vendor/autoload.php";
@@ -96,7 +116,7 @@ if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
# the wiki installer needs to be launched or the generated file uploaded to
# the root wiki directory. Give a hint, if it is not readable by the server.
if ( !is_readable( MW_CONFIG_FILE ) ) {
- require_once "$IP/includes/templates/NoLocalSettings.php";
+ require_once "$IP/includes/NoLocalSettings.php";
die();
}
@@ -104,18 +124,15 @@ if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
require_once MW_CONFIG_FILE;
}
-wfProfileOut( 'WebStart.php-conf' );
-wfProfileIn( 'WebStart.php-ob_start' );
# Initialise output buffering
# Check that there is no previous output or previously set up buffers, because
# that would cause us to potentially mix gzip and non-gzip output, creating a
# big mess.
-if ( !defined( 'MW_NO_OUTPUT_BUFFER' ) && ob_get_level() == 0 ) {
+if ( ob_get_level() == 0 ) {
require_once "$IP/includes/OutputHandler.php";
ob_start( 'wfOutputHandler' );
}
-wfProfileOut( 'WebStart.php-ob_start' );
if ( !defined( 'MW_NO_SETUP' ) ) {
require_once "$IP/includes/Setup.php";
diff --git a/includes/WikiMap.php b/includes/WikiMap.php
index 34cd48da..f16f5aa7 100644
--- a/includes/WikiMap.php
+++ b/includes/WikiMap.php
@@ -161,7 +161,7 @@ class WikiReference {
}
/**
- * Get the the URL in a way to de displayed to the user
+ * Get the URL in a way to be displayed to the user
* More or less Wikimedia specific
*
* @return string
diff --git a/includes/Xml.php b/includes/Xml.php
index c6c02867..f0bd70b2 100644
--- a/includes/Xml.php
+++ b/includes/Xml.php
@@ -94,9 +94,7 @@ class Xml {
$attribs = array_map( array( 'UtfNormal', 'cleanUp' ), $attribs );
}
if ( $contents ) {
- wfProfileIn( __METHOD__ . '-norm' );
$contents = $wgContLang->normalize( $contents );
- wfProfileOut( __METHOD__ . '-norm' );
}
return self::element( $element, $attribs, $contents );
}
@@ -368,12 +366,10 @@ class Xml {
public static function label( $label, $id, $attribs = array() ) {
$a = array( 'for' => $id );
- # FIXME avoid copy pasting below:
- if ( isset( $attribs['class'] ) ) {
- $a['class'] = $attribs['class'];
- }
- if ( isset( $attribs['title'] ) ) {
- $a['title'] = $attribs['title'];
+ foreach ( array( 'class', 'title' ) as $attr ) {
+ if ( isset( $attribs[$attr] ) ) {
+ $a[$attr] = $attribs[$attr];
+ }
}
return self::element( 'label', $a, $label );
diff --git a/includes/ZhConversion.php b/includes/ZhConversion.php
index 651b1140..4be27513 100644
--- a/includes/ZhConversion.php
+++ b/includes/ZhConversion.php
@@ -9,6 +9,8 @@
*/
$zh2Hant = array(
+'㐷' => '傌',
+'㐹' => '㑶',
'㐽' => '偑',
'㑇' => '㑳',
'㑈' => '倲',
@@ -72,10 +74,13 @@ $zh2Hant = array(
'䌼' => '綐',
'䌽' => '綵',
'䌾' => '䋻',
+'䌿' => '䋹',
'䍀' => '繿',
'䍁' => '繸',
-'䑽' => '𦪙',
+'䎬' => '䎱',
+'䏝' => '膞',
'䓕' => '薳',
+'䓖' => '藭',
'䗖' => '螮',
'䘛' => '𧝞',
'䘞' => '𧜗',
@@ -142,6 +147,7 @@ $zh2Hant = array(
'为' => '為',
'丽' => '麗',
'举' => '舉',
+'么' => '麼',
'义' => '義',
'乌' => '烏',
'乐' => '樂',
@@ -185,6 +191,7 @@ $zh2Hant = array(
'伪' => '偽',
'伫' => '佇',
'体' => '體',
+'佣' => '傭',
'佥' => '僉',
'侠' => '俠',
'侣' => '侶',
@@ -235,6 +242,7 @@ $zh2Hant = array(
'况' => '況',
'冻' => '凍',
'净' => '凈',
+'凄' => '淒',
'凉' => '涼',
'减' => '減',
'凑' => '湊',
@@ -290,7 +298,6 @@ $zh2Hant = array(
'卤' => '鹵',
'卫' => '衛',
'却' => '卻',
-'卺' => '巹',
'厂' => '廠',
'厅' => '廳',
'历' => '歷',
@@ -309,6 +316,8 @@ $zh2Hant = array(
'县' => '縣',
'叁' => '叄',
'参' => '參',
+'叆' => '靉',
+'叇' => '靆',
'双' => '雙',
'发' => '發',
'变' => '變',
@@ -341,7 +350,6 @@ $zh2Hant = array(
'咙' => '嚨',
'咛' => '嚀',
'咝' => '噝',
-'咤' => '吒',
'响' => '響',
'哑' => '啞',
'哒' => '噠',
@@ -362,7 +370,7 @@ $zh2Hant = array(
'啧' => '嘖',
'啬' => '嗇',
'啭' => '囀',
-'啮' => '嚙',
+'啮' => '齧',
'啯' => '嘓',
'啰' => '囉',
'啴' => '嘽',
@@ -425,7 +433,6 @@ $zh2Hant = array(
'复' => '復',
'够' => '夠',
'头' => '頭',
-'夸' => '誇',
'夹' => '夾',
'夺' => '奪',
'奁' => '奩',
@@ -503,6 +510,7 @@ $zh2Hant = array(
'岭' => '嶺',
'岽' => '崬',
'岿' => '巋',
+'峃' => '嶨',
'峄' => '嶧',
'峡' => '峽',
'峣' => '嶢',
@@ -533,9 +541,10 @@ $zh2Hant = array(
'帻' => '幘',
'帼' => '幗',
'幂' => '冪',
-'幞' => '襆',
'并' => '並',
+'幺' => '么',
'广' => '廣',
+'庄' => '莊',
'庆' => '慶',
'庐' => '廬',
'庑' => '廡',
@@ -544,6 +553,7 @@ $zh2Hant = array(
'庙' => '廟',
'庞' => '龐',
'废' => '廢',
+'庼' => '廎',
'廪' => '廩',
'开' => '開',
'异' => '異',
@@ -723,7 +733,7 @@ $zh2Hant = array(
'杀' => '殺',
'杂' => '雜',
'权' => '權',
-'杆' => '桿',
+'杠' => '槓',
'条' => '條',
'来' => '來',
'杨' => '楊',
@@ -783,6 +793,7 @@ $zh2Hant = array(
'椤' => '欏',
'椫' => '樿',
'椭' => '橢',
+'椮' => '槮',
'楼' => '樓',
'榄' => '欖',
'榅' => '榲',
@@ -856,6 +867,7 @@ $zh2Hant = array(
'浆' => '漿',
'浇' => '澆',
'浈' => '湞',
+'浉' => '溮',
'浊' => '濁',
'测' => '測',
'浍' => '澮',
@@ -888,6 +900,7 @@ $zh2Hant = array(
'渐' => '漸',
'渑' => '澠',
'渔' => '漁',
+'渖' => '瀋',
'渗' => '滲',
'温' => '溫',
'湾' => '灣',
@@ -899,7 +912,7 @@ $zh2Hant = array(
'滗' => '潷',
'滚' => '滾',
'滞' => '滯',
-'滟' => '灧',
+'滟' => '灩',
'滠' => '灄',
'满' => '滿',
'滢' => '瀅',
@@ -928,6 +941,7 @@ $zh2Hant = array(
'灿' => '燦',
'炀' => '煬',
'炉' => '爐',
+'炖' => '燉',
'炜' => '煒',
'炝' => '熗',
'点' => '點',
@@ -980,6 +994,7 @@ $zh2Hant = array(
'献' => '獻',
'獭' => '獺',
'玑' => '璣',
+'玙' => '璵',
'玚' => '瑒',
'玛' => '瑪',
'玮' => '瑋',
@@ -991,11 +1006,13 @@ $zh2Hant = array(
'珑' => '瓏',
'珰' => '璫',
'珲' => '琿',
+'琎' => '璡',
'琏' => '璉',
'琐' => '瑣',
'琼' => '瓊',
'瑶' => '瑤',
'瑷' => '璦',
+'瑸' => '璸',
'璎' => '瓔',
'瓒' => '瓚',
'瓯' => '甌',
@@ -1013,7 +1030,6 @@ $zh2Hant = array(
'疮' => '瘡',
'疯' => '瘋',
'疱' => '皰',
-'疴' => '痾',
'痈' => '癰',
'痉' => '痙',
'痒' => '癢',
@@ -1021,6 +1037,7 @@ $zh2Hant = array(
'痨' => '癆',
'痪' => '瘓',
'痫' => '癇',
+'痳' => '痲',
'瘅' => '癉',
'瘆' => '瘮',
'瘗' => '瘞',
@@ -1072,10 +1089,11 @@ $zh2Hant = array(
'硚' => '礄',
'确' => '確',
'硵' => '磠',
-'硷' => '礆',
+'硷' => '鹼',
'碍' => '礙',
'碛' => '磧',
'碜' => '磣',
+'碱' => '鹼',
'礼' => '禮',
'祃' => '禡',
'祎' => '禕',
@@ -1221,7 +1239,7 @@ $zh2Hant = array(
'绠' => '綆',
'绡' => '綃',
'绢' => '絹',
-'绣' => '綉',
+'绣' => '繡',
'绤' => '綌',
'绥' => '綏',
'绦' => '絛',
@@ -1235,13 +1253,13 @@ $zh2Hant = array(
'绮' => '綺',
'绯' => '緋',
'绰' => '綽',
-'绱' => '緔',
+'绱' => '鞝',
'绲' => '緄',
'绳' => '繩',
'维' => '維',
'绵' => '綿',
'绶' => '綬',
-'绷' => '綳',
+'绷' => '繃',
'绸' => '綢',
'绹' => '綯',
'绺' => '綹',
@@ -1266,6 +1284,7 @@ $zh2Hant = array(
'缍' => '綞',
'缎' => '緞',
'缏' => '緶',
+'缐' => '線',
'缑' => '緱',
'缒' => '縋',
'缓' => '緩',
@@ -1344,7 +1363,7 @@ $zh2Hant = array(
'胶' => '膠',
'脉' => '脈',
'脍' => '膾',
-'脏' => '臟',
+'脏' => '髒',
'脐' => '臍',
'脑' => '腦',
'脓' => '膿',
@@ -1384,7 +1403,6 @@ $zh2Hant = array(
'苎' => '苧',
'苏' => '蘇',
'苧' => '薴',
-'苹' => '蘋',
'茎' => '莖',
'茏' => '蘢',
'茑' => '蔦',
@@ -1414,7 +1432,7 @@ $zh2Hant = array(
'荬' => '蕒',
'荭' => '葒',
'荮' => '葤',
-'药' => '葯',
+'药' => '藥',
'莅' => '蒞',
'莱' => '萊',
'莲' => '蓮',
@@ -1425,7 +1443,8 @@ $zh2Hant = array(
'莸' => '蕕',
'莹' => '瑩',
'莺' => '鶯',
-'莼' => '蒓',
+'莼' => '蓴',
+'萚' => '蘀',
'萝' => '蘿',
'萤' => '螢',
'营' => '營',
@@ -1667,7 +1686,7 @@ $zh2Hant = array(
'谢' => '謝',
'谣' => '謠',
'谤' => '謗',
-'谥' => '謚',
+'谥' => '諡',
'谦' => '謙',
'谧' => '謐',
'谨' => '謹',
@@ -1890,7 +1909,6 @@ $zh2Hant = array(
'鉴' => '鑒',
'銮' => '鑾',
'錾' => '鏨',
-'鎭' => '鎮',
'钅' => '釒',
'钆' => '釓',
'钇' => '釔',
@@ -1927,7 +1945,7 @@ $zh2Hant = array(
'钦' => '欽',
'钧' => '鈞',
'钨' => '鎢',
-'钩' => '鉤',
+'钩' => '鈎',
'钪' => '鈧',
'钫' => '鈁',
'钬' => '鈥',
@@ -2089,7 +2107,7 @@ $zh2Hant = array(
'镈' => '鎛',
'镉' => '鎘',
'镊' => '鑷',
-'镋' => '鎲',
+'镋' => '钂',
'镌' => '鐫',
'镍' => '鎳',
'镎' => '鎿',
@@ -2144,7 +2162,7 @@ $zh2Hant = array(
'闯' => '闖',
'闰' => '閏',
'闱' => '闈',
-'闲' => '閑',
+'闲' => '閒',
'闳' => '閎',
'间' => '間',
'闵' => '閔',
@@ -2218,7 +2236,6 @@ $zh2Hant = array(
'鞑' => '韃',
'鞒' => '鞽',
'鞯' => '韉',
-'鞲' => '韝',
'韦' => '韋',
'韧' => '韌',
'韨' => '韍',
@@ -2515,6 +2532,7 @@ $zh2Hant = array(
'鳡' => '鱤',
'鳢' => '鱧',
'鳣' => '鱣',
+'鳤' => '䲘',
'鸟' => '鳥',
'鸠' => '鳩',
'鸡' => '雞',
@@ -2604,6 +2622,7 @@ $zh2Hant = array(
'鹾' => '鹺',
'麦' => '麥',
'麸' => '麩',
+'麹' => '麴',
'黄' => '黃',
'黉' => '黌',
'黡' => '黶',
@@ -2614,7 +2633,6 @@ $zh2Hant = array(
'鼍' => '鼉',
'鼗' => '鞀',
'鼹' => '鼴',
-'齄' => '齇',
'齐' => '齊',
'齑' => '齏',
'齿' => '齒',
@@ -2642,7 +2660,6 @@ $zh2Hant = array(
'𠚳' => '𠠎',
'𠛅' => '剾',
'𠛆' => '𠞆',
-'𠮶' => '嗰',
'𠯟' => '哯',
'𠯠' => '噅',
'𠲥' => '𡅏',
@@ -2872,6 +2889,7 @@ $zh2Hant = array(
'𩧿' => '䮠',
'𩨀' => '騔',
'𩨁' => '䮞',
+'𩨂' => '驄',
'𩨃' => '騝',
'𩨄' => '騪',
'𩨅' => '𩤸',
@@ -2897,7 +2915,6 @@ $zh2Hant = array(
'𩽽' => '𩶱',
'𩽾' => '鮟',
'𩽿' => '𩶰',
-'𩾀' => '鮕',
'𩾁' => '鯄',
'𩾂' => '䲖',
'𩾃' => '鮸',
@@ -2926,6 +2943,7 @@ $zh2Hant = array(
'𪉐' => '𪃍',
'𪉑' => '鷔',
'𪉒' => '𪄕',
+'𪉓' => '𪈼',
'𪉔' => '𪄆',
'𪉕' => '𪇳',
'𪎈' => '䴬',
@@ -2951,7 +2969,6 @@ $zh2Hant = array(
'𫌀' => '襀',
'𫌨' => '覼',
'𫍙' => '訑',
-'𫍟' => '詑',
'𫍢' => '譊',
'𫍰' => '諰',
'𫍲' => '謏',
@@ -2985,14 +3002,18 @@ $zh2Hant = array(
'𫛢' => '鸋',
'𫛶' => '鶒',
'𫛸' => '鶗',
+'0出現' => '0出現',
+'0出现' => '0出現',
+'0出線' => '0出線',
+'0出线' => '0出線',
'0只支持' => '0只支持',
'0只支援' => '0只支援',
'0周后' => '0周後',
-'0多只' => '0多隻',
'0天后' => '0天後',
'0年' => '0年',
'0只' => '0隻',
'0余' => '0餘',
+'0出' => '0齣',
'1只支持' => '1只支持',
'1只支援' => '1只支援',
'1周后' => '1周後',
@@ -3057,12 +3078,15 @@ $zh2Hant = array(
'9只' => '9隻',
'9余' => '9餘',
'·范' => '·范',
-'、克制' => '、剋制',
-'。克制' => '。剋制',
+'’s' => '’s',
'〇周后' => '〇周後',
'〇年' => '〇年',
'〇只' => '〇隻',
'〇余' => '〇餘',
+'“' => '「',
+'”' => '」',
+'‘' => '『',
+'’' => '』',
'一干二净' => '一乾二淨',
'一伙人' => '一伙人',
'一伙头' => '一伙頭',
@@ -3070,15 +3094,8 @@ $zh2Hant = array(
'一并' => '一併',
'一个' => '一個',
'一个准' => '一個準',
-'一出刊' => '一出刊',
-'一出口' => '一出口',
-'一出版' => '一出版',
-'一出生' => '一出生',
-'一出祁山' => '一出祁山',
-'一出逃' => '一出逃',
'一划' => '一划',
'一半只' => '一半只',
-'一吊錢' => '一吊錢',
'一吊钱' => '一吊錢',
'一周后' => '一周後',
'一地里' => '一地裡',
@@ -3092,7 +3109,6 @@ $zh2Hant = array(
'一干部下' => '一干部下',
'一年' => '一年',
'一年里' => '一年裡',
-'一吊' => '一弔',
'一别头' => '一彆頭',
'一斗斗' => '一斗斗',
'一树百获' => '一樹百穫',
@@ -3102,23 +3118,23 @@ $zh2Hant = array(
'一目了然' => '一目了然',
'一扎' => '一紮',
'一冲' => '一衝',
+'一厘一毫' => '一釐一毫',
'一锅面' => '一鍋麵',
'一只' => '一隻',
'一面食' => '一面食',
-'一头长发' => '一頭長髮',
'一余' => '一餘',
'一发千钧' => '一髮千鈞',
'一哄而散' => '一鬨而散',
+'一出剧' => '一齣劇',
+'一出喜剧' => '一齣喜劇',
+'一出好戏' => '一齣好戲',
'一出子' => '一齣子',
+'一出悲剧' => '一齣悲劇',
+'一出戏' => '一齣戲',
+'一出电影' => '一齣電影',
'丁丁当当' => '丁丁當當',
'丁丑' => '丁丑',
'七个' => '七個',
-'七出刊' => '七出刊',
-'七出口' => '七出口',
-'七出版' => '七出版',
-'七出生' => '七出生',
-'七出祁山' => '七出祁山',
-'七出逃' => '七出逃',
'七周后' => '七周後',
'七天后' => '七天後',
'七年' => '七年',
@@ -3129,12 +3145,6 @@ $zh2Hant = array(
'万俟' => '万俟',
'万旗' => '万旗',
'三个' => '三個',
-'三出刊' => '三出刊',
-'三出口' => '三出口',
-'三出版' => '三出版',
-'三出生' => '三出生',
-'三出祁山' => '三出祁山',
-'三出逃' => '三出逃',
'三周后' => '三周後',
'三天后' => '三天後',
'三年' => '三年',
@@ -3143,52 +3153,52 @@ $zh2Hant = array(
'三扎' => '三紮',
'三统历' => '三統曆',
'三统历史' => '三統歷史',
-'三复' => '三複',
'三只' => '三隻',
'三余' => '三餘',
+'三出戏' => '三齣戲',
+'上天里' => '上天里',
'上梁山' => '上梁山',
'上梁' => '上樑',
+'上台面' => '上檯面',
'上签名' => '上簽名',
'上签字' => '上簽字',
+'上签定' => '上簽定',
'上签写' => '上簽寫',
'上签收' => '上簽收',
+'上签发' => '上簽發',
+'上签约' => '上簽約',
+'上签署' => '上簽署',
+'上签订' => '上簽訂',
'上签' => '上籤',
-'上药' => '上藥',
+'上系上' => '上繫上',
'上课钟' => '上課鐘',
'上面糊' => '上面糊',
-'下仑路' => '下崙路',
'下于' => '下於',
'下梁' => '下樑',
'下注解' => '下注解',
'下签名' => '下簽名',
'下签字' => '下簽字',
+'下签定' => '下簽定',
'下签写' => '下簽寫',
'下签收' => '下簽收',
+'下签发' => '下簽發',
+'下签约' => '下簽約',
+'下签署' => '下簽署',
+'下签订' => '下簽訂',
'下签' => '下籤',
-'下药' => '下藥',
'下课钟' => '下課鐘',
'不干不净' => '不乾不淨',
-'不占' => '不佔',
'不克自制' => '不克自制',
-'不准他' => '不准他',
-'不准你' => '不准你',
-'不准她' => '不准她',
-'不准它' => '不准它',
-'不准我' => '不准我',
-'不准没' => '不准沒',
-'不准翻印' => '不准翻印',
-'不准许' => '不准許',
-'不准谁' => '不准誰',
-'不克制' => '不剋制',
'不加自制' => '不加自制',
'不占凶吉' => '不占凶吉',
'不占卜' => '不占卜',
'不占吉凶' => '不占吉凶',
'不占算' => '不占算',
'不只' => '不只',
+'不太准' => '不太準',
'不好干涉' => '不好干涉',
-'不好干预' => '不好干預',
'不好干預' => '不好干預',
+'不好干预' => '不好干預',
'不嫌母丑' => '不嫌母醜',
'不寒而栗' => '不寒而慄',
'不干事' => '不干事',
@@ -3203,30 +3213,27 @@ $zh2Hant = array(
'不干涉' => '不干涉',
'不干牠' => '不干牠',
'不干犯' => '不干犯',
-'不干预' => '不干預',
'不干預' => '不干預',
+'不干预' => '不干預',
'不干' => '不幹',
'不吊' => '不弔',
+'不卷' => '不捲',
'不采' => '不採',
'不斗膽' => '不斗膽',
'不斗胆' => '不斗膽',
'不断发' => '不斷發',
'不每只' => '不每只',
-'不准' => '不準',
-'不准确' => '不準確',
'不谷' => '不穀',
-'不药而愈' => '不藥而癒',
'不托' => '不託',
'不负所托' => '不負所托',
'不通吊庆' => '不通弔慶',
'不丑' => '不醜',
-'不采声' => '不采聲',
'不采聲' => '不采聲',
+'不采声' => '不采聲',
'不锈钢' => '不鏽鋼',
'不食干腊' => '不食乾腊',
'不斗' => '不鬥',
'丑三' => '丑三',
-'丑婆子' => '丑婆子',
'丑年' => '丑年',
'丑日' => '丑日',
'丑旦' => '丑旦',
@@ -3237,13 +3244,10 @@ $zh2Hant = array(
'且于' => '且於',
'世田谷' => '世田谷',
'世界杯' => '世界盃',
-'世界里' => '世界裡',
+'世纪里' => '世紀裡',
'世纪钟' => '世紀鐘',
'世纪钟表' => '世紀鐘錶',
'丢丑' => '丟醜',
-'并不准' => '並不准',
-'并不准确' => '並不準確',
-'并存着' => '並存著',
'并曰入淀' => '並曰入澱',
'并发动' => '並發動',
'并发展' => '並發展',
@@ -3256,20 +3260,24 @@ $zh2Hant = array(
'中型钟表面' => '中型鐘表面',
'中型钟表' => '中型鐘錶',
'中型钟面' => '中型鐘面',
-'中仑' => '中崙',
'中岳' => '中嶽',
'中庄子' => '中庄子',
'中文里' => '中文裡',
'中于' => '中於',
+'中签名' => '中簽名',
+'中签字' => '中簽字',
+'中签定' => '中簽定',
+'中签写' => '中簽寫',
+'中签收' => '中簽收',
+'中签发' => '中簽發',
+'中签约' => '中簽約',
+'中签署' => '中簽署',
+'中签订' => '中簽訂',
'中签' => '中籤',
-'中美发表' => '中美發表',
-'中药' => '中藥',
-'中西合并' => '中西合併',
'中风后' => '中風後',
'丰儀' => '丰儀',
'丰仪' => '丰儀',
'丰南' => '丰南',
-'丰台' => '丰台',
'丰姿' => '丰姿',
'丰容' => '丰容',
'丰度' => '丰度',
@@ -3280,14 +3288,20 @@ $zh2Hant = array(
'丰神' => '丰神',
'丰茸' => '丰茸',
'丰采' => '丰采',
-'丰韵' => '丰韻',
'丰韻' => '丰韻',
-'丸药' => '丸藥',
-'丹药' => '丹藥',
+'丰韵' => '丰韻',
'主仆' => '主僕',
'主干' => '主幹',
'主钟差' => '主鐘差',
'主钟曲线' => '主鐘曲線',
+'乃系' => '乃係',
+'么么唱唱' => '么么唱唱',
+'么儿' => '么兒',
+'么喝' => '么喝',
+'么妹' => '么妹',
+'么弟' => '么弟',
+'么爷' => '么爺',
+'么雞' => '么雞',
'么么小丑' => '么麼小丑',
'之一只' => '之一只',
'之二只' => '之二只',
@@ -3295,16 +3309,11 @@ $zh2Hant = array(
'之征' => '之徵',
'之托' => '之託',
'之钟' => '之鐘',
+'之鉴' => '之鑑',
'之余' => '之餘',
'乙丑' => '乙丑',
'九世之仇' => '九世之讎',
'九个' => '九個',
-'九出刊' => '九出刊',
-'九出口' => '九出口',
-'九出版' => '九出版',
-'九出生' => '九出生',
-'九出祁山' => '九出祁山',
-'九出逃' => '九出逃',
'九周后' => '九周後',
'九天后' => '九天後',
'九年' => '九年',
@@ -3312,13 +3321,12 @@ $zh2Hant = array(
'九扎' => '九紮',
'九只' => '九隻',
'九余' => '九餘',
-'九龙表行' => '九龍表行',
-'九龍表行' => '九龍表行',
-'也克制' => '也剋制',
'也斗了胆' => '也斗了膽',
+'干上' => '乾上',
'干干' => '乾乾',
'干干儿的' => '乾乾兒的',
'干干净净' => '乾乾淨淨',
+'干了' => '乾了',
'干井' => '乾井',
'干个够' => '乾個夠',
'干儿' => '乾兒',
@@ -3327,7 +3335,6 @@ $zh2Hant = array(
'干刻版' => '乾刻版',
'干剥剥' => '乾剝剝',
'干卦' => '乾卦',
-'干吊着下巴' => '乾吊著下巴',
'干和' => '乾和',
'干咳' => '乾咳',
'干咽' => '乾咽',
@@ -3357,6 +3364,7 @@ $zh2Hant = array(
'干巴' => '乾巴',
'干式' => '乾式',
'干弟' => '乾弟',
+'干得' => '乾得',
'干急' => '乾急',
'干性' => '乾性',
'干打雷' => '乾打雷',
@@ -3393,13 +3401,13 @@ $zh2Hant = array(
'干湿' => '乾濕',
'干熬' => '乾熬',
'干热' => '乾熱',
-'干熱' => '乾熱',
'干灯盏' => '乾燈盞',
'干燥' => '乾燥',
'干爸' => '乾爸',
'干爹' => '乾爹',
'干爽' => '乾爽',
'干片' => '乾片',
+'干物' => '乾物',
'干生受' => '乾生受',
'干生子' => '乾生子',
'干产' => '乾產',
@@ -3437,7 +3445,6 @@ $zh2Hant = array(
'干草' => '乾草',
'干菜' => '乾菜',
'干落' => '乾落',
-'干着' => '乾著',
'干姜' => '乾薑',
'干薪' => '乾薪',
'干虔' => '乾虔',
@@ -3471,27 +3478,21 @@ $zh2Hant = array(
'干鱼' => '乾魚',
'干鲜' => '乾鮮',
'干面' => '乾麵',
+'乱发生' => '亂發生',
+'乱发脾气' => '亂發脾氣',
'乱发' => '亂髮',
'乱哄' => '亂鬨',
'乱哄不过来' => '亂鬨不過來',
-'了克制' => '了剋制',
'了然后' => '了然後',
'事情干脆' => '事情干脆',
'事有斗巧' => '事有鬥巧',
-'事迹' => '事迹',
+'事里' => '事裡',
'事都干脆' => '事都干脆',
'二不棱登' => '二不稜登',
'二个' => '二個',
-'二出刊' => '二出刊',
-'二出口' => '二出口',
-'二出版' => '二出版',
-'二出生' => '二出生',
-'二出祁山' => '二出祁山',
-'二出逃' => '二出逃',
'二只得' => '二只得',
'二周后' => '二周後',
'二天后' => '二天後',
-'二仑' => '二崙',
'二年' => '二年',
'二缶钟惑' => '二缶鐘惑',
'二老板' => '二老板',
@@ -3506,13 +3507,13 @@ $zh2Hant = array(
'于仲文' => '于仲文',
'于佳卉' => '于佳卉',
'于来山' => '于來山',
-'于伟国' => '于偉國',
'于偉國' => '于偉國',
+'于伟国' => '于偉國',
'于光新' => '于光新',
'于光遠' => '于光遠',
'于光远' => '于光遠',
-'于克-蘭多縣' => '于克-蘭多縣',
'于克-兰多县' => '于克-蘭多縣',
+'于克-蘭多縣' => '于克-蘭多縣',
'于克勒' => '于克勒',
'于再清' => '于再清',
'于冕' => '于冕',
@@ -3523,20 +3524,20 @@ $zh2Hant = array(
'于化虎' => '于化虎',
'于占元' => '于占元',
'于友泽' => '于友澤',
-'于台煙' => '于台煙',
'于台烟' => '于台煙',
+'于台煙' => '于台煙',
'于右任' => '于右任',
'于吉' => '于吉',
'于和伟' => '于和偉',
'于品海' => '于品海',
-'于国桢' => '于國楨',
'于國楨' => '于國楨',
+'于国桢' => '于國楨',
'于国治' => '于國治',
'于國治' => '于國治',
-'于坚' => '于堅',
'于堅' => '于堅',
-'于大寶' => '于大寶',
+'于坚' => '于堅',
'于大宝' => '于大寶',
+'于大寶' => '于大寶',
'于天仁' => '于天仁',
'于天龙' => '于天龍',
'于奇库杜克' => '于奇庫杜克',
@@ -3546,31 +3547,32 @@ $zh2Hant = array(
'于娟' => '于娟',
'于子千' => '于子千',
'于孔兼' => '于孔兼',
-'于學忠' => '于學忠',
'于学忠' => '于學忠',
+'于學忠' => '于學忠',
'于家堡' => '于家堡',
'于寘' => '于寘',
+'于宝轩' => '于寶軒',
'于小伟' => '于小偉',
'于小偉' => '于小偉',
'于小彤' => '于小彤',
'于小惠' => '于小惠',
'于少保' => '于少保',
'于山' => '于山',
-'于山国' => '于山國',
'于山國' => '于山國',
-'于帥' => '于帥',
+'于山国' => '于山國',
'于帅' => '于帥',
+'于帥' => '于帥',
'于幼軍' => '于幼軍',
'于幼军' => '于幼軍',
'于康震' => '于康震',
-'于廣洲' => '于廣洲',
'于广洲' => '于廣洲',
+'于廣洲' => '于廣洲',
'于式枚' => '于式枚',
-'于從濂' => '于從濂',
'于从濂' => '于從濂',
+'于從濂' => '于從濂',
'于德海' => '于德海',
-'于志宁' => '于志寧',
'于志寧' => '于志寧',
+'于志宁' => '于志寧',
'于忠肃集' => '于忠肅集',
'于思' => '于思',
'于慎行' => '于慎行',
@@ -3583,29 +3585,28 @@ $zh2Hant = array(
'于敏中' => '于敏中',
'于斌' => '于斌',
'于斯塔德' => '于斯塔德',
-'于斯纳尔斯贝里' => '于斯納爾斯貝里',
'于斯納爾斯貝里' => '于斯納爾斯貝里',
-'于斯达尔' => '于斯達爾',
+'于斯纳尔斯贝里' => '于斯納爾斯貝里',
'于斯達爾' => '于斯達爾',
-'于明涛' => '于明濤',
+'于斯达尔' => '于斯達爾',
'于明濤' => '于明濤',
+'于明涛' => '于明濤',
'于是之' => '于是之',
'于晨楠' => '于晨楠',
'于晴' => '于晴',
-'于會泳' => '于會泳',
'于会泳' => '于會泳',
-'于根伟' => '于根偉',
+'于會泳' => '于會泳',
'于根偉' => '于根偉',
+'于根伟' => '于根偉',
'于格' => '于格',
-'于楓' => '于楓',
'于枫' => '于楓',
+'于楓' => '于楓',
'于荣光' => '于榮光',
'于樂' => '于樂',
-'于树洁' => '于樹潔',
'于樹潔' => '于樹潔',
+'于树洁' => '于樹潔',
'于欣' => '于欣',
'于欣源' => '于欣源',
-'于正升' => '于正昇',
'于正昇' => '于正昇',
'于正昌' => '于正昌',
'于归' => '于歸',
@@ -3614,25 +3615,25 @@ $zh2Hant = array(
'于江震' => '于江震',
'于波' => '于波',
'于洋' => '于洋',
-'于洪区' => '于洪區',
'于洪區' => '于洪區',
+'于洪区' => '于洪區',
'于浩威' => '于浩威',
'于海' => '于海',
'于海洋' => '于海洋',
-'于湘兰' => '于湘蘭',
'于湘蘭' => '于湘蘭',
+'于湘兰' => '于湘蘭',
'于漢超' => '于漢超',
'于汉超' => '于漢超',
'于澄' => '于澄',
-'于泽尔' => '于澤爾',
'于澤爾' => '于澤爾',
+'于泽尔' => '于澤爾',
'于涛' => '于濤',
'于濤' => '于濤',
'于熙珍' => '于熙珍',
-'于爾岑' => '于爾岑',
'于尔岑' => '于爾岑',
-'于爾根' => '于爾根',
+'于爾岑' => '于爾岑',
'于尔根' => '于爾根',
+'于爾根' => '于爾根',
'于尔里克' => '于爾里克',
'于爾里克' => '于爾里克',
'于特森' => '于特森',
@@ -3645,8 +3646,8 @@ $zh2Hant = array(
'于美人' => '于美人',
'于耘婕' => '于耘婕',
'于若木' => '于若木',
-'于蔭霖' => '于蔭霖',
'于荫霖' => '于蔭霖',
+'于蔭霖' => '于蔭霖',
'于衡' => '于衡',
'于西翰' => '于西翰',
'于謙' => '于謙',
@@ -3662,35 +3663,36 @@ $zh2Hant = array(
'于道泉' => '于道泉',
'于远伟' => '于遠偉',
'于遠偉' => '于遠偉',
-'于都縣' => '于都縣',
'于都县' => '于都縣',
+'于都縣' => '于都縣',
'于里察' => '于里察',
'于阗' => '于闐',
-'于雙戈' => '于雙戈',
'于双戈' => '于雙戈',
+'于雙戈' => '于雙戈',
'于云鹤' => '于雲鶴',
'于震' => '于震',
'于震寰' => '于震寰',
'于震环' => '于震環',
'于震環' => '于震環',
'于靖' => '于靖',
+'于非暗' => '于非闇',
'于非闇' => '于非闇',
'于韋斯屈萊' => '于韋斯屈萊',
'于韦斯屈莱' => '于韋斯屈萊',
'于风政' => '于風政',
'于風政' => '于風政',
'于飞' => '于飛',
-'于飞岛' => '于飛島',
'于飛島' => '于飛島',
+'于飞岛' => '于飛島',
'于余曲折' => '于餘曲折',
'于鬯' => '于鬯',
'于魁智' => '于魁智',
-'于凤桐' => '于鳳桐',
'于鳳桐' => '于鳳桐',
-'于凤至' => '于鳳至',
+'于凤桐' => '于鳳桐',
'于鳳至' => '于鳳至',
-'于默奥' => '于默奧',
+'于凤至' => '于鳳至',
'于默奧' => '于默奧',
+'于默奥' => '于默奧',
'云乎' => '云乎',
'云云' => '云云',
'云何' => '云何',
@@ -3700,24 +3702,19 @@ $zh2Hant = array(
'云尔' => '云爾',
'云:' => '云:',
'五个' => '五個',
-'五出刊' => '五出刊',
-'五出口' => '五出口',
-'五出版' => '五出版',
-'五出生' => '五出生',
-'五出祁山' => '五出祁山',
-'五出逃' => '五出逃',
'五周后' => '五周後',
'五天后' => '五天後',
'五岳' => '五嶽',
'五年' => '五年',
'五谷' => '五穀',
'五扎' => '五紮',
+'五脏' => '五臟',
'五行生克' => '五行生剋',
'五谷王北街' => '五谷王北街',
'五谷王南街' => '五谷王南街',
'五只' => '五隻',
'五余' => '五餘',
-'五出' => '五齣',
+'井干' => '井幹',
'井干摧败' => '井榦摧敗',
'井里' => '井裡',
'亚于' => '亞於',
@@ -3726,53 +3723,31 @@ $zh2Hant = array(
'交游' => '交遊',
'交哄' => '交鬨',
'亦云' => '亦云',
-'亦庄亦谐' => '亦莊亦諧',
'亮丑' => '亮醜',
'亮钟' => '亮鐘',
'人云' => '人云',
-'人参加' => '人參加',
-'人参展' => '人參展',
-'人参战' => '人參戰',
-'人参拜' => '人參拜',
-'人参政' => '人參政',
-'人参照' => '人參照',
-'人参看' => '人參看',
-'人参禅' => '人參禪',
-'人参考' => '人參考',
-'人参与' => '人參與',
-'人参见' => '人參見',
-'人参观' => '人參觀',
-'人参谋' => '人參謀',
-'人参议' => '人參議',
-'人参赞' => '人參贊',
-'人参透' => '人參透',
-'人参选' => '人參選',
-'人参酌' => '人參酌',
-'人参阅' => '人參閱',
'人如风后入江云' => '人如風後入江雲',
'人欲' => '人慾',
+'人数只' => '人數只',
+'人数里' => '人數裡',
'人物志' => '人物誌',
-'人参' => '人蔘',
+'人生天里' => '人生天里',
'什锦面' => '什錦麵',
-'什么' => '什麼',
'仇仇' => '仇讎',
-'今天' => '今天',
-'他克制' => '他剋制',
+'介胄' => '介冑',
'他钟' => '他鐘',
'付托' => '付託',
'仙后' => '仙后',
-'仙药' => '仙藥',
+'仙后座' => '仙后座',
+'代数里' => '代數裡',
+'代理发行' => '代理發行',
'代码表' => '代碼表',
'代表' => '代表',
'令人发指' => '令人髮指',
'以自制' => '以自制',
-'仰药' => '仰藥',
+'仲裁制' => '仲裁制',
'件钟' => '件鐘',
-'任何表演' => '任何表演',
-'任何表示' => '任何表示',
-'任何表達' => '任何表達',
-'任何表达' => '任何表達',
-'任何表' => '任何錶',
+'价川' => '价川',
'任何钟' => '任何鐘',
'任何钟表' => '任何鐘錶',
'任教于' => '任教於',
@@ -3797,270 +3772,19 @@ $zh2Hant = array(
'伴游' => '伴遊',
'似于' => '似於',
'但云' => '但云',
-'布于' => '佈於',
-'布道' => '佈道',
-'布雷、' => '佈雷、',
-'布雷。' => '佈雷。',
-'布雷封锁' => '佈雷封鎖',
-'布雷的' => '佈雷的',
-'布雷艇' => '佈雷艇',
-'布雷舰' => '佈雷艦',
-'布雷速度' => '佈雷速度',
-'布雷,' => '佈雷,',
-'布雷;' => '佈雷;',
'位于' => '位於',
'位准' => '位準',
'低洼' => '低洼',
'住扎' => '住紮',
-'占0' => '佔0',
-'占1' => '佔1',
-'占2' => '佔2',
-'占3' => '佔3',
-'占4' => '佔4',
-'占5' => '佔5',
-'占6' => '佔6',
-'占7' => '佔7',
-'占8' => '佔8',
-'占9' => '佔9',
-'占A' => '佔A',
-'占B' => '佔B',
-'占C' => '佔C',
-'占D' => '佔D',
-'占E' => '佔E',
-'占F' => '佔F',
-'占G' => '佔G',
-'占H' => '佔H',
-'占I' => '佔I',
-'占J' => '佔J',
-'占K' => '佔K',
-'占L' => '佔L',
-'占M' => '佔M',
-'占N' => '佔N',
-'占O' => '佔O',
-'占P' => '佔P',
-'占Q' => '佔Q',
-'占R' => '佔R',
-'占S' => '佔S',
-'占T' => '佔T',
-'占U' => '佔U',
-'占V' => '佔V',
-'占W' => '佔W',
-'占X' => '佔X',
-'占Y' => '佔Y',
-'占Z' => '佔Z',
-'占a' => '佔a',
-'占b' => '佔b',
-'占c' => '佔c',
-'占d' => '佔d',
-'占e' => '佔e',
-'占f' => '佔f',
-'占g' => '佔g',
-'占h' => '佔h',
-'占i' => '佔i',
-'占j' => '佔j',
-'占k' => '佔k',
-'占l' => '佔l',
-'占m' => '佔m',
-'占n' => '佔n',
-'占o' => '佔o',
-'占p' => '佔p',
-'占q' => '佔q',
-'占r' => '佔r',
-'占s' => '佔s',
-'占t' => '佔t',
-'占u' => '佔u',
-'占v' => '佔v',
-'占w' => '佔w',
-'占x' => '佔x',
-'占y' => '佔y',
-'占z' => '佔z',
-'占〇' => '佔〇',
-'占一' => '佔一',
-'占七' => '佔七',
-'占万' => '佔万',
-'占三' => '佔三',
-'占上风' => '佔上風',
-'占下' => '佔下',
-'占下风' => '佔下風',
-'占不占' => '佔不佔',
-'占不足' => '佔不足',
-'占世界' => '佔世界',
-'占中' => '佔中',
-'占主' => '佔主',
-'占九' => '佔九',
-'占了' => '佔了',
-'占二' => '佔二',
-'占五' => '佔五',
-'占人便宜' => '佔人便宜',
-'占位' => '佔位',
-'占住' => '佔住',
-'占占' => '佔佔',
-'占便宜' => '佔便宜',
-'占俄' => '佔俄',
-'占个' => '佔個',
-'占个位' => '佔個位',
-'占停车' => '佔停車',
-'占亿' => '佔億',
-'占优' => '佔優',
-'占先' => '佔先',
-'占光' => '佔光',
-'占全' => '佔全',
-'占两' => '佔兩',
-'占八' => '佔八',
-'占六' => '佔六',
-'占分' => '佔分',
-'占到' => '佔到',
-'占加' => '佔加',
-'占劣' => '佔劣',
-'占北' => '佔北',
-'占十' => '佔十',
-'占千' => '佔千',
-'占半' => '佔半',
-'占南' => '佔南',
-'占印' => '佔印',
-'占去' => '佔去',
-'占取' => '佔取',
-'占台' => '佔台',
-'占哺乳' => '佔哺乳',
-'占嗫' => '佔囁',
-'占四' => '佔四',
-'占国内' => '佔國內',
-'占在' => '佔在',
-'占地' => '佔地',
-'占场' => '佔場',
-'占压' => '佔壓',
-'占多' => '佔多',
-'占大' => '佔大',
-'占好' => '佔好',
-'占小' => '佔小',
-'占少' => '佔少',
-'占局部' => '佔局部',
-'占屋' => '佔屋',
-'占山' => '佔山',
-'占市场' => '佔市場',
-'占平均' => '佔平均',
-'占床' => '佔床',
-'占座' => '佔座',
-'占后' => '佔後',
-'占得' => '佔得',
-'占德' => '佔德',
-'占掉' => '佔掉',
-'占据' => '佔據',
-'占整体' => '佔整體',
-'占新' => '佔新',
-'占有' => '佔有',
-'占有欲' => '佔有慾',
-'占东' => '佔東',
-'占查' => '佔查',
-'占次' => '佔次',
-'占比' => '佔比',
-'占法' => '佔法',
-'占满' => '佔滿',
-'占澳' => '佔澳',
-'占为' => '佔為',
-'占率' => '佔率',
-'占用' => '佔用',
'占毕' => '佔畢',
-'占百' => '佔百',
-'占尽' => '佔盡',
-'占稳' => '佔穩',
-'占网' => '佔網',
-'占线' => '佔線',
-'占总' => '佔總',
-'占缺' => '佔缺',
-'占美' => '佔美',
-'占耕' => '佔耕',
-'占至多' => '佔至多',
-'占至少' => '佔至少',
-'占英' => '佔英',
-'占着' => '佔著',
-'占葡' => '佔葡',
-'占苏' => '佔蘇',
-'占西' => '佔西',
-'占资源' => '佔資源',
-'占起' => '佔起',
-'占超过' => '佔超過',
-'占过' => '佔過',
-'占道' => '佔道',
-'占零' => '佔零',
-'占領' => '佔領',
-'占领' => '佔領',
-'占头' => '佔頭',
'占头筹' => '佔頭籌',
-'占饭' => '佔飯',
-'占香' => '佔香',
-'占马' => '佔馬',
'占高枝儿' => '佔高枝兒',
-'占0' => '佔0',
-'占1' => '佔1',
-'占2' => '佔2',
-'占3' => '佔3',
-'占4' => '佔4',
-'占5' => '佔5',
-'占6' => '佔6',
-'占7' => '佔7',
-'占8' => '佔8',
-'占9' => '佔9',
-'占A' => '佔A',
-'占B' => '佔B',
-'占C' => '佔C',
-'占D' => '佔D',
-'占E' => '佔E',
-'占F' => '佔F',
-'占G' => '佔G',
-'占H' => '佔H',
-'占I' => '佔I',
-'占J' => '佔J',
-'占K' => '佔K',
-'占L' => '佔L',
-'占M' => '佔M',
-'占N' => '佔N',
-'占O' => '佔O',
-'占P' => '佔P',
-'占Q' => '佔Q',
-'占R' => '佔R',
-'占S' => '佔S',
-'占T' => '佔T',
-'占U' => '佔U',
-'占V' => '佔V',
-'占W' => '佔W',
-'占X' => '佔X',
-'占Y' => '佔Y',
-'占Z' => '佔Z',
-'占a' => '佔a',
-'占b' => '佔b',
-'占c' => '佔c',
-'占d' => '佔d',
-'占e' => '佔e',
-'占f' => '佔f',
-'占g' => '佔g',
-'占h' => '佔h',
-'占i' => '佔i',
-'占j' => '佔j',
-'占k' => '佔k',
-'占l' => '佔l',
-'占m' => '佔m',
-'占n' => '佔n',
-'占o' => '佔o',
-'占p' => '佔p',
-'占q' => '佔q',
-'占r' => '佔r',
-'占s' => '佔s',
-'占t' => '佔t',
-'占u' => '佔u',
-'占v' => '佔v',
-'占w' => '佔w',
-'占x' => '佔x',
-'占y' => '佔y',
-'占z' => '佔z',
'何杰' => '何杰',
-'余三胜' => '余三勝',
'余三勝' => '余三勝',
+'余三胜' => '余三勝',
'余光中' => '余光中',
'余光生' => '余光生',
-'余力為' => '余力為',
'余力为' => '余力為',
-'余姓' => '余姓',
'余威德' => '余威德',
'余子明' => '余子明',
'余思敏' => '余思敏',
@@ -4069,12 +3793,13 @@ $zh2Hant = array(
'作品里' => '作品裡',
'作奸犯科' => '作姦犯科',
'作准' => '作準',
-'作庄' => '作莊',
-'你克制' => '你剋制',
'你斗了胆' => '你斗了膽',
-'你才子发昏' => '你纔子發昏',
-'佣金收益' => '佣金收益',
-'佣金费用' => '佣金費用',
+'你夸' => '你誇',
+'佣金' => '佣金',
+'佣鈿' => '佣鈿',
+'佣钿' => '佣鈿',
+'佣钱' => '佣錢',
+'佣錢' => '佣錢',
'佳肴' => '佳肴',
'佳里鎮' => '佳里鎮',
'并一不二' => '併一不二',
@@ -4083,15 +3808,13 @@ $zh2Hant = array(
'并到' => '併到',
'并合' => '併合',
'并名' => '併名',
-'并吞下' => '併吞下',
+'并吞' => '併吞',
'并拢' => '併攏',
'并案' => '併案',
'并流' => '併流',
'并火' => '併火',
'并为一家' => '併為一家',
'并为一体' => '併為一體',
-'并产' => '併產',
-'并当' => '併當',
'并叠' => '併疊',
'并发型模式' => '併發型模式',
'并发模式' => '併發模式',
@@ -4102,76 +3825,56 @@ $zh2Hant = array(
'并线' => '併線',
'并肩子' => '併肩子',
'并购' => '併購',
-'并除' => '併除',
'并骨' => '併骨',
'使其斗' => '使其鬥',
'来于' => '來於',
-'来复' => '來複',
'侍仆' => '侍僕',
'供制' => '供製',
'依依不舍' => '依依不捨',
'依托' => '依託',
-'侵占' => '侵佔',
'侵并' => '侵併',
-'侵占到' => '侵占到',
-'侵占罪' => '侵占罪',
-'便药' => '便藥',
+'局促' => '侷促',
'系数' => '係數',
'系为' => '係為',
-'俄占' => '俄佔',
'保险柜' => '保險柜',
'信托贸易' => '信托貿易',
'信托' => '信託',
'修杰楷' => '修杰楷',
'修杰麟' => '修杰麟',
-'修炼' => '修鍊',
'修胡刀' => '修鬍刀',
'俯冲' => '俯衝',
-'个人' => '個人',
'个里' => '個裡',
'个钟' => '個鐘',
'个钟表' => '個鐘錶',
-'们克制' => '們剋制',
'们斗了胆' => '們斗了膽',
-'倒绷孩儿' => '倒繃孩兒',
'幸免' => '倖免',
'幸存' => '倖存',
'幸幸' => '倖幸',
'候复' => '候覆',
+'倚闲' => '倚閑',
'倛丑' => '倛醜',
'借听于聋' => '借聽於聾',
+'借鉴' => '借鑑',
'倦游' => '倦遊',
-'假药' => '假藥',
+'假里' => '假裡',
'假托' => '假託',
+'假里白' => '假里白',
'假发' => '假髮',
'偎干' => '偎乾',
-'做庄' => '做莊',
'停停当当' => '停停當當',
'停征' => '停徵',
'停制' => '停製',
-'偷鸡不着' => '偷雞不著',
-'伪药' => '偽藥',
'备注' => '備註',
'家伙' => '傢伙',
-'家俱' => '傢俱',
-'家具' => '傢具',
'催并' => '催併',
-'佣中佼佼' => '傭中佼佼',
-'佣人' => '傭人',
'佣仆' => '傭僕',
-'佣兵' => '傭兵',
-'佣工' => '傭工',
-'佣懒' => '傭懶',
-'佣书' => '傭書',
-'佣金' => '傭金',
'傲游' => '傲遊',
'傲霜斗雪' => '傲霜鬥雪',
-'传位于四太子' => '傳位于四太子',
'傳位于四太子' => '傳位于四太子',
+'传位于四太子' => '傳位于四太子',
'传于' => '傳於',
-'伤痕累累' => '傷痕纍纍',
+'债累累' => '債纍纍',
'傻里傻气' => '傻裡傻氣',
-'倾复' => '傾複',
'仆人' => '僕人',
'仆使' => '僕使',
'仆仆' => '僕僕',
@@ -4196,15 +3899,14 @@ $zh2Hant = array(
'雇人' => '僱人',
'雇佣' => '僱傭',
'雇到' => '僱到',
-'雇员' => '僱員',
'雇工' => '僱工',
-'雇用' => '僱用',
+'雇船' => '僱船',
+'雇请' => '僱請',
+'雇车' => '僱車',
'雇农' => '僱農',
'仪范' => '儀範',
-'仪表' => '儀錶',
'亿个' => '億個',
'亿周后' => '億周後',
-'亿多只' => '億多隻',
'亿天后' => '億天後',
'亿年' => '億年',
'亿只' => '億隻',
@@ -4219,13 +3921,14 @@ $zh2Hant = array(
'尽尽' => '儘儘',
'尽先' => '儘先',
'尽其所有' => '儘其所有',
-'尽力' => '儘力',
'尽可能' => '儘可能',
'尽快' => '儘快',
'尽早' => '儘早',
'尽是' => '儘是',
'尽管' => '儘管',
+'尽自' => '儘自',
'尽速' => '儘速',
+'尽量' => '儘量',
'优于' => '優於',
'优游' => '優遊',
'兀术' => '兀朮',
@@ -4243,9 +3946,7 @@ $zh2Hant = array(
'凶案' => '兇案',
'凶枪' => '兇槍',
'凶横' => '兇橫',
-'凶殘' => '兇殘',
'凶残' => '兇殘',
-'凶殺' => '兇殺',
'凶杀' => '兇殺',
'凶犯' => '兇犯',
'凶狠' => '兇狠',
@@ -4253,18 +3954,17 @@ $zh2Hant = array(
'凶疑' => '兇疑',
'凶相' => '兇相',
'凶险' => '兇險',
-'先占' => '先佔',
'先采' => '先採',
'光致致' => '光緻緻',
-'克药' => '克藥',
-'克复' => '克複',
'免征' => '免徵',
-'党参' => '党參',
'党太尉' => '党太尉',
+'党姓' => '党姓',
+'党家' => '党家',
'党怀英' => '党懷英',
'党进' => '党進',
-'党項' => '党項',
'党项' => '党項',
+'党項' => '党項',
+'内脏' => '內臟',
'内制' => '內製',
'内面包' => '內面包',
'内面包的' => '內面包的',
@@ -4276,20 +3976,15 @@ $zh2Hant = array(
'两个' => '兩個',
'两周后' => '兩周後',
'两天后' => '兩天後',
-'两天晒网' => '兩天晒網',
'两年' => '兩年',
+'两杆' => '兩桿',
'两扎' => '兩紮',
'两虎共斗' => '兩虎共鬥',
'两只' => '兩隻',
'两余' => '兩餘',
'两鼠斗穴' => '兩鼠鬥穴',
+'两出' => '兩齣',
'八个' => '八個',
-'八出刊' => '八出刊',
-'八出口' => '八出口',
-'八出版' => '八出版',
-'八出生' => '八出生',
-'八出祁山' => '八出祁山',
-'八出逃' => '八出逃',
'八周后' => '八周後',
'八天后' => '八天後',
'八字胡' => '八字鬍',
@@ -4304,24 +3999,19 @@ $zh2Hant = array(
'公干' => '公幹',
'公历' => '公曆',
'公历史' => '公歷史',
-'公厘' => '公釐',
+'公里海' => '公里海',
'公余' => '公餘',
+'六么' => '六么',
'六个' => '六個',
-'六出刊' => '六出刊',
-'六出口' => '六出口',
-'六出版' => '六出版',
-'六出生' => '六出生',
-'六出祁山' => '六出祁山',
-'六出逃' => '六出逃',
'六周后' => '六周後',
'六天后' => '六天後',
'六年' => '六年',
+'六楼后座' => '六樓后座',
'六谷' => '六穀',
'六扎' => '六紮',
'六冲' => '六衝',
'六只' => '六隻',
'六余' => '六餘',
-'六出' => '六齣',
'共和历' => '共和曆',
'共和历史' => '共和歷史',
'其一只' => '其一只',
@@ -4335,27 +4025,17 @@ $zh2Hant = array(
'冗余' => '冗餘',
'冤仇' => '冤讎',
'冥蒙' => '冥濛',
-'冬天里' => '冬天裡',
'冬山庄' => '冬山庄',
-'冬日里' => '冬日裡',
'冬游' => '冬遊',
-'冰冷' => '冰冷',
+'冰山里' => '冰山裡',
'冶游' => '冶遊',
-'冷庄子' => '冷莊子',
'冷面相' => '冷面相',
'冷面' => '冷麵',
'准三后' => '准三后',
-'准不准他' => '准不准他',
-'准不准你' => '准不准你',
-'准不准她' => '准不准她',
-'准不准它' => '准不准它',
-'准不准我' => '准不准我',
-'准不准许' => '准不准許',
-'准不准谁' => '准不准誰',
'准保護' => '准保護',
'准保护' => '准保護',
-'准保释' => '准保釋',
'准保釋' => '准保釋',
+'准保释' => '准保釋',
'凌蒙初' => '凌濛初',
'凝炼' => '凝鍊',
'几上' => '几上',
@@ -4369,25 +4049,21 @@ $zh2Hant = array(
'几榻' => '几榻',
'几净窗明' => '几淨窗明',
'几筵' => '几筵',
-'几丝' => '几絲',
'几面上' => '几面上',
-'凶杀案' => '凶殺案',
+'凶征' => '凶徵',
'凶相毕露' => '凶相畢露',
-'凹洞里' => '凹洞裡',
'出乖弄丑' => '出乖弄醜',
'出乖露丑' => '出乖露醜',
'出征收' => '出征收',
'出于' => '出於',
'出游' => '出遊',
'出丑' => '出醜',
-'分占' => '分佔',
+'函数里' => '函數裡',
'分别致' => '分别致',
'分半钟' => '分半鐘',
'分多钟' => '分多鐘',
'分子钟' => '分子鐘',
'分子云' => '分子雲',
-'分布圖' => '分布圖',
-'分布图' => '分布圖',
'分布于' => '分布於',
'分散于' => '分散於',
'分钟' => '分鐘',
@@ -4395,56 +4071,49 @@ $zh2Hant = array(
'划一桨' => '划一槳',
'划上' => '划上',
'划下' => '划下',
+'划不來' => '划不來',
'划不来' => '划不來',
-'划了' => '划了',
'划了一会' => '划了一會',
'划来划去' => '划來划去',
+'划來划去' => '划來划去',
'划具' => '划具',
-'划出' => '划出',
-'划到' => '划到',
'划到岸' => '划到岸',
'划到江心' => '划到江心',
'划动' => '划動',
+'划動' => '划動',
'划去' => '划去',
'划子' => '划子',
+'划得來' => '划得來',
'划得来' => '划得來',
'划拳' => '划拳',
-'划桨' => '划槳',
'划槳' => '划槳',
+'划桨' => '划槳',
'划水' => '划水',
'划算' => '划算',
'划船' => '划船',
'划艇' => '划艇',
-'划着' => '划著',
-'划着走' => '划著走',
+'划著' => '划著',
'划行' => '划行',
'划走' => '划走',
'划起' => '划起',
+'划進' => '划進',
'划进' => '划進',
-'划进来' => '划進來',
-'划进去' => '划進去',
'划过' => '划過',
-'划过来' => '划過來',
-'划过去' => '划過去',
+'划過' => '划過',
'划龙舟' => '划龍舟',
+'划龍舟' => '划龍舟',
'判断发' => '判斷發',
-'别日南鸿才北去' => '別日南鴻纔北去',
-'别致' => '別緻',
-'别庄' => '別莊',
-'别着' => '別著',
'别辟' => '別闢',
'利欲' => '利慾',
'利于' => '利於',
-'利欲熏心' => '利欲熏心',
'刮来刮去' => '刮來刮去',
-'刮着' => '刮著',
'刮起来' => '刮起來',
'刮风下雪倒便宜' => '刮風下雪倒便宜',
'刮胡' => '刮鬍',
+'到山里' => '到山裡',
'制冷机' => '制冷機',
'制签' => '制籤',
'制钟' => '制鐘',
-'刺绣' => '刺繡',
'刻半钟' => '刻半鐘',
'刻多钟' => '刻多鐘',
'刻钟' => '刻鐘',
@@ -4453,26 +4122,21 @@ $zh2Hant = array(
'剃须' => '剃鬚',
'削发' => '削髮',
'削面' => '削麵',
-'克制不了' => '剋制不了',
-'克制不住' => '剋制不住',
+'克剥' => '剋剝',
'克扣' => '剋扣',
'克星' => '剋星',
'克期' => '剋期',
'克死' => '剋死',
'克薄' => '剋薄',
-'前天' => '前天',
'前往' => '前往',
-'前言不答后语' => '前言不答後語',
'前面店' => '前面店',
-'剔庄货' => '剔莊貨',
+'剖厘' => '剖釐',
'刚干' => '剛乾',
'刚雇' => '剛僱',
-'刚才一载' => '剛纔一載',
'剥制' => '剝製',
'剩余' => '剩餘',
'剪其发' => '剪其髮',
'剪牡丹喂牛' => '剪牡丹喂牛',
-'剪彩' => '剪綵',
'剪发' => '剪髮',
'割舍' => '割捨',
'创获' => '創穫',
@@ -4484,31 +4148,28 @@ $zh2Hant = array(
'铲头' => '剷頭',
'划入' => '劃入',
'划为' => '劃為',
-'剧药' => '劇藥',
-'刘佳怜' => '劉佳怜',
'劉佳怜' => '劉佳怜',
-'刘克庄' => '劉克莊',
+'刘佳怜' => '劉佳怜',
'刘芸后' => '劉芸后',
-'力克制' => '力剋制',
'力拼' => '力拚',
'力拼众敌' => '力拼眾敵',
-'力求克制' => '力求剋制',
'力争上游' => '力爭上遊',
+'功勋' => '功勳',
'功致' => '功緻',
'加氢精制' => '加氫精制',
-'加药' => '加藥',
'加注' => '加註',
'劣于' => '劣於',
'助于' => '助於',
'劫余' => '劫餘',
'勃郁' => '勃鬱',
-'动荡' => '動蕩',
'胜于' => '勝於',
-'劳力士表' => '勞力士錶',
'勤仆' => '勤僕',
'勤朴' => '勤樸',
+'勋劳' => '勳勞',
+'勋业' => '勳業',
+'勋爵' => '勳爵',
'勋章' => '勳章',
-'勺药' => '勺藥',
+'勋绩' => '勳績',
'勾干' => '勾幹',
'勾心斗角' => '勾心鬥角',
'勾魂荡魄' => '勾魂蕩魄',
@@ -4516,24 +4177,20 @@ $zh2Hant = array(
'包准' => '包準',
'包谷' => '包穀',
'包扎' => '包紮',
-'包庄' => '包莊',
'匏系' => '匏繫',
-'化学家' => '化學家',
+'北山索面' => '北山索麵',
'北岳' => '北嶽',
'北回线' => '北迴線',
'北回铁路' => '北迴鐵路',
-'匡复' => '匡複',
'匪干' => '匪幹',
'匿于' => '匿於',
'十个' => '十個',
-'十出刊' => '十出刊',
-'十出口' => '十出口',
-'十出版' => '十出版',
+'十出家' => '十出家',
+'十出击' => '十出擊',
'十出生' => '十出生',
'十出祁山' => '十出祁山',
-'十出逃' => '十出逃',
+'十出头' => '十出頭',
'十周后' => '十周後',
-'十多只' => '十多隻',
'十天后' => '十天後',
'十年' => '十年',
'十扎' => '十紮',
@@ -4542,34 +4199,31 @@ $zh2Hant = array(
'十出' => '十齣',
'千个' => '千個',
'千只可' => '千只可',
-'千只夠' => '千只夠',
'千只够' => '千只夠',
+'千只夠' => '千只夠',
'千只怕' => '千只怕',
'千只能' => '千只能',
'千只足够' => '千只足夠',
'千只足夠' => '千只足夠',
'千周后' => '千周後',
-'千多只' => '千多隻',
'千天后' => '千天後',
'千年' => '千年',
'千扎' => '千紮',
-'千丝万缕' => '千絲萬縷',
'千回百折' => '千迴百折',
'千回百转' => '千迴百轉',
'千钧一发' => '千鈞一髮',
'千只' => '千隻',
'千余' => '千餘',
-'升官发财' => '升官發財',
'半制品' => '半制品',
'半只可' => '半只可',
'半只够' => '半只夠',
'半于' => '半於',
'半只' => '半隻',
-'协调' => '協調',
'协防' => '協防',
'南京钟' => '南京鐘',
'南京钟表' => '南京鐘錶',
'南宫适' => '南宮适',
+'南宮适' => '南宮适',
'南屏晚钟' => '南屏晚鐘',
'南岳' => '南嶽',
'南筑' => '南筑',
@@ -4578,42 +4232,34 @@ $zh2Hant = array(
'南游' => '南遊',
'博汇' => '博彙',
'博采' => '博採',
+'博尔术' => '博爾朮',
'卜云吉' => '卜云吉',
-'卞庄' => '卞莊',
-'卞庄子' => '卞莊子',
'占了卜' => '占了卜',
'占便宜的是呆' => '占便宜的是獃',
-'占卜' => '占卜',
-'占多数' => '占多數',
-'占有五不验' => '占有五不驗',
-'占有权' => '占有權',
'印累绶若' => '印纍綬若',
'印制' => '印製',
+'印鉴' => '印鑑',
'危于' => '危於',
'卵与石斗' => '卵與石鬥',
+'卷发' => '卷髮',
'卷须' => '卷鬚',
'厂部' => '厂部',
'厝薪于火' => '厝薪於火',
'原子钟' => '原子鐘',
'原钟' => '原鐘',
'历物之意' => '厤物之意',
-'参合' => '參合',
-'参考价值' => '參考價值',
-'参与' => '參與',
-'参与人员' => '參與人員',
-'参与制' => '參與制',
-'参与感' => '參與感',
-'参与者' => '參與者',
-'参观团' => '參觀團',
-'参观团体' => '參觀團體',
-'参阅' => '參閱',
+'去山里' => '去山裡',
+'参数只' => '參數只',
+'参数里' => '參數裡',
'反朴' => '反樸',
'反冲' => '反衝',
'反复制' => '反複製',
-'反复' => '反覆',
'反覆' => '反覆',
+'反复' => '反覆',
'取舍' => '取捨',
+'受雇' => '受僱',
'受托' => '受託',
+'丛林里' => '叢林裡',
'口干' => '口乾',
'口干冒' => '口干冒',
'口干政' => '口干政',
@@ -4623,25 +4269,24 @@ $zh2Hant = array(
'口燥唇干' => '口燥唇乾',
'口腹之欲' => '口腹之慾',
'口里' => '口裡',
-'口试' => '口試',
'口钟' => '口鐘',
-'古书云' => '古書云',
'古書云' => '古書云',
+'古书云' => '古書云',
'古柯咸' => '古柯鹹',
-'古柯碱' => '古柯鹼',
'古朴' => '古樸',
'古语云' => '古語云',
'古語云' => '古語云',
-'古迹' => '古迹',
+'古迹' => '古蹟',
'古钟' => '古鐘',
'古钟表' => '古鐘錶',
'另辟' => '另闢',
'叩钟' => '叩鐘',
-'只占' => '只佔',
'只占卜' => '只占卜',
'只占吉' => '只占吉',
'只占神问卜' => '只占神問卜',
'只占算' => '只占算',
+'只影响' => '只影響',
+'只影響' => '只影響',
'只采' => '只採',
'只冲' => '只衝',
'只要功夫深,铁杵磨成锈花针' => '只要功夫深,鐵杵磨成鏽花針',
@@ -4659,76 +4304,58 @@ $zh2Hant = array(
'只身子' => '只身子',
'只身形' => '只身形',
'只身影' => '只身影',
-'只身后' => '只身後',
'只身後' => '只身後',
+'只身后' => '只身後',
'只身心' => '只身心',
'只身旁' => '只身旁',
'只身材' => '只身材',
'只身段' => '只身段',
'只身为' => '只身為',
'只身為' => '只身為',
-'只身边' => '只身邊',
'只身邊' => '只身邊',
+'只身边' => '只身邊',
'只身首' => '只身首',
-'只身体' => '只身體',
'只身體' => '只身體',
+'只身体' => '只身體',
'只身高' => '只身高',
'只采声' => '只采聲',
'叮叮当当' => '叮叮噹噹',
'叮当' => '叮噹',
-'可以克制' => '可以剋制',
'可紧可松' => '可緊可鬆',
'可自制' => '可自制',
+'可鉴' => '可鑑',
'台子女' => '台子女',
'台子孙' => '台子孫',
'台州' => '台州',
'台布景' => '台布景',
'台历史' => '台歷史',
'台钟' => '台鐘',
-'台面前' => '台面前',
-'叱咤903' => '叱咤903',
-'叱咤MY903' => '叱咤MY903',
-'叱咤My903' => '叱咤My903',
-'叱咤叱叱咤' => '叱咤叱叱咤',
-'叱咤叱咤叱咤咤' => '叱咤叱咤叱咤咤',
-'叱咤咤' => '叱咤咤',
-'叱咤乐坛' => '叱咤樂壇',
-'叱咤樂壇' => '叱咤樂壇',
-'叶 恭弘' => '叶 恭弘',
-'叶 恭弘' => '叶 恭弘',
+'台风奖' => '台風獎',
+'台风稳健' => '台風穩健',
+'史鉴' => '史鑑',
'叶不二子' => '叶不二子',
'叶志穗' => '叶志穗',
'叶恭弘' => '叶恭弘',
'叶音' => '叶音',
'叶韵' => '叶韻',
'吃板刀面' => '吃板刀麵',
-'吃着不尽' => '吃著不盡',
'吃姜' => '吃薑',
-'吃药' => '吃藥',
'吃里扒外' => '吃裡扒外',
'吃里爬外' => '吃裡爬外',
-'吃辣面' => '吃辣麵',
-'吃错药' => '吃錯藥',
'各辟' => '各闢',
'各类钟' => '各類鐘',
'合伙人' => '合伙人',
+'合并' => '合併',
'合伙' => '合夥',
-'合并' => '合并',
'合府上' => '合府上',
'合采' => '合採',
'合历' => '合曆',
'合历史' => '合歷史',
'合准' => '合準',
-'合着' => '合著',
-'合著者' => '合著者',
'吉凶庆吊' => '吉凶慶弔',
-'吊带裤' => '吊帶褲',
-'吊挂着' => '吊掛著',
-'吊杆' => '吊杆',
-'吊着' => '吊著',
-'吊裤' => '吊褲',
-'吊裤带' => '吊褲帶',
+'吉征' => '吉徵',
'吊钟' => '吊鐘',
+'同人志' => '同人誌',
'同伙' => '同夥',
'同于' => '同於',
'同余' => '同餘',
@@ -4739,22 +4366,24 @@ $zh2Hant = array(
'后姓' => '后姓',
'后安路' => '后安路',
'后平路' => '后平路',
+'后庄' => '后庄',
'后座' => '后座',
'后母戊' => '后母戊',
-'后海湾' => '后海灣',
'后海灣' => '后海灣',
+'后海湾' => '后海灣',
'后瑞站' => '后瑞站',
'后稷' => '后稷',
+'后綜' => '后綜',
'后羿' => '后羿',
'后街' => '后街',
'后角' => '后角',
-'后丰' => '后豐',
'后豐' => '后豐',
+'后丰' => '后豐',
'后里' => '后里',
-'后发FK型星' => '后髮FK型星',
'后髮FK型星' => '后髮FK型星',
-'后髮座' => '后髮座',
+'后发FK型星' => '后髮FK型星',
'后发座' => '后髮座',
+'后髮座' => '后髮座',
'后发星系团' => '后髮星系團',
'后髮星系團' => '后髮星系團',
'吐哺捉发' => '吐哺捉髮',
@@ -4763,9 +4392,9 @@ $zh2Hant = array(
'向往常' => '向往常',
'向往日' => '向往日',
'向往时' => '向往時',
-'向着' => '向著',
'吞并' => '吞併',
'吟游' => '吟遊',
+'吧台' => '吧檯',
'含齿戴发' => '含齒戴髮',
'吹干' => '吹乾',
'吹发' => '吹髮',
@@ -4773,42 +4402,31 @@ $zh2Hant = array(
'吾为之范我驰驱' => '吾爲之範我馳驅',
'吕后' => '呂后',
'呂后' => '呂后',
-'呆呆傻傻' => '呆呆傻傻',
-'呆呆挣挣' => '呆呆掙掙',
-'呆呆獸' => '呆呆獸',
'呆呆兽' => '呆呆獸',
-'呆呆笨笨' => '呆呆笨笨',
'呆致致' => '呆緻緻',
'呆里呆气' => '呆裡呆氣',
-'周一' => '周一',
-'周三' => '周三',
-'周二' => '周二',
-'周五' => '周五',
-'周六' => '周六',
+'告札' => '告劄',
'周后' => '周后',
-'周四' => '周四',
'周历' => '周曆',
-'周杰伦' => '周杰倫',
'周杰倫' => '周杰倫',
+'周杰伦' => '周杰倫',
'周历史' => '周歷史',
-'周庄王' => '周莊王',
'周游' => '周遊',
'呼吁' => '呼籲',
'命中注定' => '命中注定',
-'和克制' => '和剋制',
'和奸' => '和姦',
'咎征' => '咎徵',
'咕咕钟' => '咕咕鐘',
+'咪表' => '咪錶',
'咬姜呷醋' => '咬薑呷醋',
'咯当' => '咯噹',
-'咳嗽药' => '咳嗽藥',
'哀吊' => '哀弔',
'哀挽' => '哀輓',
'品汇' => '品彙',
+'品鉴' => '品鑑',
'哄堂大笑' => '哄堂大笑',
-'员山庄' => '員山庄',
+'員山庄' => '員山庄',
'哪里' => '哪裡',
-'哭脏' => '哭髒',
'唁吊' => '唁弔',
'呗赞' => '唄讚',
'唇干' => '唇乾',
@@ -4817,6 +4435,7 @@ $zh2Hant = array(
'唾面自干' => '唾面自乾',
'唾余' => '唾餘',
'商历' => '商曆',
+'商标准许' => '商標准許',
'商历史' => '商歷史',
'启发式' => '啟發式',
'啷当' => '啷噹',
@@ -4827,15 +4446,15 @@ $zh2Hant = array(
'喜欢钟' => '喜歡鐘',
'喜欢钟表' => '喜歡鐘錶',
'喝干' => '喝乾',
+'喧哗' => '喧譁',
'喧哄' => '喧鬨',
'丧钟' => '喪鐘',
'乔岳' => '喬嶽',
+'單于' => '單于',
'单于' => '單于',
'单单于' => '單單於',
'单干' => '單幹',
'单打独斗' => '單打獨鬥',
-'嗑药' => '嗑藥',
-'嘀嗒的表' => '嘀嗒的錶',
'嘉谷' => '嘉穀',
'嘉肴' => '嘉肴',
'嘴里' => '嘴裡',
@@ -4845,25 +4464,21 @@ $zh2Hant = array(
'当啷' => '噹啷',
'当当' => '噹噹',
'噜苏' => '嚕囌',
+'啮合' => '嚙合',
+'啮齿类' => '嚙齒類',
'向导' => '嚮導',
'向往' => '嚮往',
-'向应' => '嚮應',
+'向慕' => '嚮慕',
'向迩' => '嚮邇',
'严云农' => '嚴云農',
'严于' => '嚴於',
-'严丝合缝' => '嚴絲合縫',
'嚼谷' => '嚼穀',
'啰啰苏苏' => '囉囉囌囌',
'啰苏' => '囉囌',
'嘱托' => '囑託',
+'啮虫' => '囓蟲',
'四个' => '四個',
-'四出刊' => '四出刊',
-'四出口' => '四出口',
'四出征收' => '四出徵收',
-'四出版' => '四出版',
-'四出生' => '四出生',
-'四出祁山' => '四出祁山',
-'四出逃' => '四出逃',
'四分历' => '四分曆',
'四分历史' => '四分歷史',
'四周后' => '四周後',
@@ -4871,21 +4486,25 @@ $zh2Hant = array(
'四年' => '四年',
'四舍五入' => '四捨五入',
'四舍六入' => '四捨六入',
+'四杆铁笔' => '四桿鐵筆',
'四扎' => '四紮',
'四只' => '四隻',
'四面包' => '四面包',
'四面钟' => '四面鐘',
'四余' => '四餘',
-'四出' => '四齣',
+'回佣' => '回佣',
'回采' => '回採',
'回旋加速' => '回旋加速',
'回历' => '回曆',
'回历史' => '回歷史',
-'回丝' => '回絲',
-'回着' => '回著',
-'回荡' => '回蕩',
+'回复中' => '回覆中',
+'回复你' => '回覆你',
+'回复帖子' => '回覆帖子',
+'回复意见' => '回覆意見',
+'回复说' => '回覆說',
+'回复邮件' => '回覆郵件',
+'回复:' => '回覆:',
'回游' => '回遊',
-'回阳荡气' => '回陽蕩氣',
'因于' => '因於',
'困倦起来' => '困倦起來',
'困兽之斗' => '困獸之鬥',
@@ -4894,8 +4513,6 @@ $zh2Hant = array(
'固定制' => '固定制',
'固征' => '固徵',
'囿于' => '囿於',
-'圈占' => '圈佔',
-'圈子里' => '圈子裡',
'圈梁' => '圈樑',
'圈里' => '圈裡',
'国之桢干' => '國之楨榦',
@@ -4910,23 +4527,23 @@ $zh2Hant = array(
'国仇' => '國讎',
'园里' => '園裡',
'园游会' => '園遊會',
-'图里' => '圖裡',
+'图里的' => '圖裡的',
+'图里,' => '圖裡,',
'图鉴' => '圖鑑',
+'土索面' => '土索麵',
'土里' => '土裡',
'土制' => '土製',
-'土霉素' => '土霉素',
'在制品' => '在制品',
-'在克制' => '在剋制',
+'在山里' => '在山裡',
'在于' => '在於',
-'地占' => '地佔',
-'地克制' => '地剋制',
+'地图里' => '地圖裡',
'地心历表' => '地心曆表',
'地方志' => '地方志',
'地志' => '地誌',
'地丑德齐' => '地醜德齊',
'坏于' => '坏於',
'坐如钟' => '坐如鐘',
-'坐庄' => '坐莊',
+'坐台' => '坐檯',
'坐钟' => '坐鐘',
'坑里' => '坑裡',
'坤范' => '坤範',
@@ -4941,59 +4558,55 @@ $zh2Hant = array(
'埃及历史' => '埃及歷史',
'埃及艳后' => '埃及豔后',
'埃荣冲' => '埃榮衝',
-'埋头寻表' => '埋頭尋錶',
-'埋头寻钟' => '埋頭尋鐘',
-'埋头寻钟表' => '埋頭尋鐘錶',
'城里' => '城裡',
-'埔裡社撫墾局' => '埔裏社撫墾局',
-'埔裏社撫墾局' => '埔裏社撫墾局',
-'埔里社抚垦局' => '埔裏社撫墾局',
+'埔子里' => '埔子里',
+'埔里社' => '埔裏社',
+'域里' => '域裡',
'基干' => '基幹',
'基于' => '基於',
'基准' => '基準',
'坚致' => '堅緻',
'堙淀' => '堙澱',
-'涂着' => '塗著',
-'涂药' => '塗藥',
+'堡子里' => '堡子里',
+'场里' => '場裡',
'塞耳盗钟' => '塞耳盜鐘',
-'塞药' => '塞藥',
'墓志铭' => '墓志銘',
'墓志' => '墓誌',
'增辟' => '增闢',
+'墨子里' => '墨子里',
'墨沈' => '墨沈',
'墨沈未干' => '墨瀋未乾',
-'堕胎药' => '墮胎藥',
-'垦复' => '墾複',
'垦辟' => '墾闢',
-'垄断价格' => '壟斷價格',
-'垄断资产' => '壟斷資產',
-'垄断集团' => '壟斷集團',
'壮游' => '壯遊',
'壮面' => '壯麵',
'壹郁' => '壹鬱',
'壶里' => '壺裡',
'壸范' => '壼範',
+'壽天里' => '壽天里',
'寿面' => '壽麵',
'夏于乔' => '夏于喬',
'夏于喬' => '夏于喬',
-'夏天里' => '夏天裡',
-'夏日里' => '夏日裡',
'夏历' => '夏曆',
'夏历史' => '夏歷史',
'夏游' => '夏遊',
'外强中干' => '外強中乾',
'外制' => '外製',
-'多占' => '多佔',
'多半只' => '多半只',
+'多只包括' => '多只包括',
'多只可' => '多只可',
+'多只含' => '多只含',
'多只在' => '多只在',
'多只是' => '多只是',
'多只會' => '多只會',
'多只会' => '多只會',
'多只有' => '多只有',
+'多只比' => '多只比',
'多只用' => '多只用',
'多只能' => '多只能',
+'多只限' => '多只限',
'多只需' => '多只需',
+'多只须' => '多只須',
+'多只須' => '多只須',
'多周后' => '多周後',
'多天后' => '多天後',
'多于' => '多於',
@@ -5001,13 +4614,10 @@ $zh2Hant = array(
'多丑' => '多醜',
'多只' => '多隻',
'多余' => '多餘',
-'多么' => '多麼',
-'夜光表' => '夜光錶',
+'多出电影' => '多齣電影',
+'夜晚里' => '夜晚裡',
'夜里' => '夜裡',
'夜游' => '夜遊',
-'够克制' => '夠剋制',
-'夢有五不占' => '夢有五不占',
-'梦有五不占' => '夢有五不占',
'梦里' => '夢裡',
'梦游' => '夢遊',
'伙伴' => '夥伴',
@@ -5015,7 +4625,6 @@ $zh2Hant = array(
'伙同' => '夥同',
'伙众' => '夥眾',
'伙计' => '夥計',
-'大丑' => '大丑',
'大伙儿' => '大伙兒',
'大只可' => '大只可',
'大只在' => '大只在',
@@ -5029,6 +4638,7 @@ $zh2Hant = array(
'大型钟表面' => '大型鐘表面',
'大型钟表' => '大型鐘錶',
'大型钟面' => '大型鐘面',
+'大多只' => '大多只',
'大伙' => '大夥',
'大干' => '大幹',
'大批涌到' => '大批湧到',
@@ -5039,7 +4649,6 @@ $zh2Hant = array(
'大本钟' => '大本鐘',
'大本钟敲' => '大本鐘敲',
'大历史' => '大歷史',
-'大呆' => '大獃',
'大病初愈' => '大病初癒',
'大目干连' => '大目乾連',
'大笨钟' => '大笨鐘',
@@ -5048,14 +4657,15 @@ $zh2Hant = array(
'大衍历' => '大衍曆',
'大衍历史' => '大衍歷史',
'大言非夸' => '大言非夸',
+'大夸' => '大誇',
'大赞' => '大讚',
'大周折' => '大週摺',
+'大丑' => '大醜',
'大金发苔' => '大金髮苔',
'大钟' => '大鐘',
'大只' => '大隻',
'大风后' => '大風後',
-'大曲' => '大麴',
-'天干物燥' => '天乾物燥',
+'大曲酒' => '大麴酒',
'天克地冲' => '天克地衝',
'天后' => '天后',
'天后宫' => '天后宮',
@@ -5065,47 +4675,44 @@ $zh2Hant = array(
'天后来' => '天後來',
'天后半' => '天後半',
'天后天' => '天後天',
-'天文学家' => '天文學家',
'天文学钟' => '天文學鐘',
'天文历表' => '天文曆表',
'天文钟' => '天文鐘',
'天历' => '天曆',
'天历史' => '天歷史',
-'天然碱' => '天然鹼',
-'天翻地覆' => '天翻地覆',
-'天覆地载' => '天覆地載',
+'天神之后' => '天神之后',
+'天里' => '天裡',
+'天里昂' => '天里昂',
+'天里村' => '天里村',
'太仆' => '太僕',
+'太凶' => '太兇',
'太初历' => '太初曆',
'太初历史' => '太初歷史',
'太后' => '太后',
+'太丑' => '太醜',
+'太阁' => '太閤',
'夯干' => '夯幹',
'夸人' => '夸人',
'夸克' => '夸克',
-'夸夸其谈' => '夸夸其談',
'夸姣' => '夸姣',
'夸容' => '夸容',
-'夸毗' => '夸毗',
'夸父' => '夸父',
'夸特' => '夸特',
'夸脱' => '夸脫',
-'夸诞' => '夸誕',
-'夸诞不经' => '夸誕不經',
'夸丽' => '夸麗',
+'奇勋' => '奇勳',
'奇迹' => '奇蹟',
'奇丑' => '奇醜',
'奏折' => '奏摺',
-'奥占' => '奧佔',
'夺斗' => '奪鬥',
'奋斗' => '奮鬥',
'女丑' => '女丑',
-'女佣人' => '女佣人',
-'女佣' => '女傭',
'女仆' => '女僕',
'奴仆' => '奴僕',
'奸淫掳掠' => '奸淫擄掠',
-'她克制' => '她剋制',
'好干' => '好乾',
'好家伙' => '好傢夥',
+'好凶' => '好兇',
'好勇斗狠' => '好勇鬥狠',
'好斗大' => '好斗大',
'好斗室' => '好斗室',
@@ -5115,14 +4722,15 @@ $zh2Hant = array(
'好斗膽' => '好斗膽',
'好斗蓬' => '好斗蓬',
'好于' => '好於',
-'好呆' => '好獃',
'好困' => '好睏',
'好签' => '好籤',
'好丑' => '好醜',
'好斗' => '好鬥',
'如果干' => '如果幹',
+'如饥似渴' => '如饑似渴',
'妖后' => '妖后',
-'妙药' => '妙藥',
+'妖气冲天' => '妖氣衝天',
+'妆台' => '妝檯',
'始于' => '始於',
'委托' => '委託',
'委托书' => '委託書',
@@ -5132,42 +4740,43 @@ $zh2Hant = array(
'奸宄' => '姦宄',
'奸情' => '姦情',
'奸杀' => '姦殺',
-'奸污' => '姦汙',
+'奸污' => '姦污',
'奸淫' => '姦淫',
'奸猾' => '姦猾',
'奸细' => '姦細',
'奸邪' => '姦邪',
'威棱' => '威稜',
'婢仆' => '婢僕',
-'娲杆' => '媧杆',
'嫁祸于' => '嫁禍於',
'嫌凶' => '嫌兇',
'嫌好道丑' => '嫌好道醜',
+'嫩姜' => '嫩薑',
'嬉游' => '嬉遊',
'嬖幸' => '嬖倖',
'嬴余' => '嬴餘',
'子之丰兮' => '子之丰兮',
'子云' => '子云',
-'子晳' => '子晳',
+'子里' => '子裡',
+'子里甲' => '子里甲',
'字汇' => '字彙',
'字码表' => '字碼表',
'字里行间' => '字裡行間',
'存十一于千百' => '存十一於千百',
'存折' => '存摺',
'存于' => '存於',
+'孛里海' => '孛里海',
'孤寡不谷' => '孤寡不穀',
+'学家' => '學家',
'学里' => '學裡',
'宇宙志' => '宇宙誌',
'安于' => '安於',
'安沈铁路' => '安瀋鐵路',
-'安眠药' => '安眠藥',
-'安胎药' => '安胎藥',
+'宋王台' => '宋王臺',
'宗周钟' => '宗周鐘',
'官不怕大只怕管' => '官不怕大只怕管',
'官地为采' => '官地為寀',
'官历' => '官曆',
'官历史' => '官歷史',
-'官庄' => '官莊',
'定于' => '定於',
'定准' => '定準',
'定制' => '定製',
@@ -5178,12 +4787,6 @@ $zh2Hant = array(
'害于' => '害於',
'宴游' => '宴遊',
'家仆' => '家僕',
-'家具备' => '家具備',
-'家具有' => '家具有',
-'家具木工科' => '家具木工科',
-'家具行' => '家具行',
-'家具体' => '家具體',
-'家庄' => '家莊',
'家里' => '家裡',
'家丑' => '家醜',
'容于' => '容於',
@@ -5195,52 +4798,47 @@ $zh2Hant = array(
'寇准' => '寇準',
'寇仇' => '寇讎',
'富余' => '富餘',
-'寒假里' => '寒假裡',
'寒栗' => '寒慄',
'寒于' => '寒於',
'寓于' => '寓於',
-'寡占' => '寡佔',
'寡欲' => '寡慾',
'实干' => '實幹',
+'实累累' => '實纍纍',
'写字台' => '寫字檯',
'宽宽松松' => '寬寬鬆鬆',
'宽于' => '寬於',
'宽余' => '寬餘',
'宽松' => '寬鬆',
'寮采' => '寮寀',
-'宝山庄' => '寶山庄',
-'寶曆' => '寶曆',
+'寶山庄' => '寶山庄',
'宝历' => '寶曆',
+'寶曆' => '寶曆',
'宝历史' => '寶歷史',
-'宝庄' => '寶莊',
'宝里宝气' => '寶裡寶氣',
+'宝鉴' => '寶鑑',
'寸发千金' => '寸髮千金',
'寺钟' => '寺鐘',
'封后' => '封后',
+'封为后' => '封為后',
'封面里' => '封面裡',
'射雕' => '射鵰',
-'将占' => '將佔',
-'将占卜' => '將占卜',
'专向往' => '專向往',
-'专注' => '專註',
'专辑里' => '專輯裡',
'尊后' => '尊后',
+'对不准' => '對不準',
'对折' => '對摺',
'对于' => '對於',
'对准' => '對準',
'对准表' => '對準錶',
'对准钟' => '對準鐘',
'对准钟表' => '對準鐘錶',
-'对华发动' => '對華發動',
+'对华发' => '對華發',
'对表中' => '對表中',
'对表扬' => '對表揚',
'对表明' => '對表明',
-'对表格' => '對表格',
'对表演' => '對表演',
'对表现' => '對表現',
-'对表示' => '對表示',
'对表达' => '對表達',
-'对表' => '對錶',
'导游' => '導遊',
'小丑' => '小丑',
'小价' => '小价',
@@ -5258,12 +4856,9 @@ $zh2Hant = array(
'小型钟表面' => '小型鐘表面',
'小型钟表' => '小型鐘錶',
'小型钟面' => '小型鐘面',
-'小伙子' => '小夥子',
'小米面' => '小米麵',
'小只' => '小隻',
-'少占' => '少佔',
'少采' => '少採',
-'就克制' => '就剋制',
'就范' => '就範',
'就里' => '就裡',
'尸位素餐' => '尸位素餐',
@@ -5278,9 +4873,8 @@ $zh2Hant = array(
'尸谏' => '尸諫',
'尸魂界' => '尸魂界',
'尸鸠' => '尸鳩',
+'局促不安' => '局促不安',
'局里' => '局裡',
-'屁股大吊了心' => '屁股大弔了心',
-'屋子里' => '屋子裡',
'屋梁' => '屋樑',
'屋里' => '屋裡',
'屏风后' => '屏風後',
@@ -5290,30 +4884,35 @@ $zh2Hant = array(
'属托' => '屬託',
'屯扎' => '屯紮',
'屯里' => '屯裡',
+'山仔后' => '山仔后',
'山崩钟应' => '山崩鐘應',
'山岳' => '山嶽',
'山梁' => '山樑',
-'山洞里' => '山洞裡',
'山棱' => '山稜',
'山羊胡' => '山羊鬍',
-'山庄' => '山莊',
-'山药' => '山藥',
-'山里' => '山裡',
+'山里有' => '山裡有',
+'山里的' => '山裡的',
'山谷道' => '山谷道',
'山重水复' => '山重水複',
'岱岳' => '岱嶽',
+'峇里海' => '峇里海',
'峰回' => '峰迴',
'峻岭' => '峻岭',
'昆剧' => '崑劇',
+'崑剧' => '崑劇',
+'崑山' => '崑山',
'昆山' => '崑山',
+'昆冈' => '崑岡',
'昆仑' => '崑崙',
-'昆仑山脉' => '崑崙山脈',
+'崑曲' => '崑曲',
'昆曲' => '崑曲',
'昆腔' => '崑腔',
+'崑腔' => '崑腔',
'昆苏' => '崑蘇',
+'崑苏' => '崑蘇',
'昆调' => '崑調',
+'崑调' => '崑調',
'崖广' => '崖广',
-'仑背' => '崙背',
'嶒棱' => '嶒稜',
'岳岳' => '嶽嶽',
'岳麓' => '嶽麓',
@@ -5321,28 +4920,26 @@ $zh2Hant = array(
'巡回医疗' => '巡回醫療',
'巡回' => '巡迴',
'巡游' => '巡遊',
+'工作台' => '工作檯',
'工致' => '工緻',
'左冲右突' => '左衝右突',
'巧妇做不得无面馎饦' => '巧婦做不得無麵餺飥',
'巧干' => '巧幹',
'巧历' => '巧曆',
'巧历史' => '巧歷史',
+'巨制' => '巨製',
'差之毫厘' => '差之毫厘',
-'差之毫厘,谬以千里' => '差之毫釐,謬以千里',
'差于' => '差於',
'己丑' => '己丑',
-'已占' => '已佔',
'已占卜' => '已占卜',
'已占算' => '已占算',
'巴尔干' => '巴爾幹',
'巷里' => '巷裡',
-'市占' => '市佔',
-'市占率' => '市佔率',
'市里' => '市裡',
'布谷' => '布穀',
+'布谷鸟' => '布穀鳥',
'布谷鸟钟' => '布穀鳥鐘',
-'布庄' => '布莊',
-'布谷鸟' => '布谷鳥',
+'布里海' => '布里海',
'希伯来历' => '希伯來曆',
'希伯来历史' => '希伯來歷史',
'帘子' => '帘子',
@@ -5350,40 +4947,34 @@ $zh2Hant = array(
'帝后台' => '帝后臺',
'师范' => '師範',
'席卷' => '席捲',
-'带团参加' => '帶團參加',
'带征' => '帶徵',
'带发修行' => '帶髮修行',
-'帮佣' => '幫傭',
+'幅图里' => '幅圖裡',
'干系' => '干係',
-'干着急' => '干著急',
'平平当当' => '平平當當',
-'平泉庄' => '平泉莊',
'平准' => '平準',
'年代里' => '年代裡',
'年历' => '年曆',
'年历史' => '年歷史',
'年谷' => '年穀',
'年里' => '年裡',
+'年鉴' => '年鑑',
'并力' => '并力',
-'并吞' => '并吞',
'并州' => '并州',
'并日而食' => '并日而食',
'并迭' => '并迭',
'幸免于难' => '幸免於難',
'幸于' => '幸於',
'幸运胡' => '幸運鬍',
-'干上' => '幹上',
'干下去' => '幹下去',
'干不了' => '幹不了',
'干不成' => '幹不成',
-'干了' => '幹了',
'干事' => '幹事',
'干些' => '幹些',
'干人' => '幹人',
'干什么' => '幹什麼',
'干个' => '幹個',
'干劲' => '幹勁',
-'干劲冲天' => '幹勁沖天',
'干吏' => '幹吏',
'干员' => '幹員',
'干啥' => '幹啥',
@@ -5393,7 +4984,7 @@ $zh2Hant = array(
'干完' => '幹完',
'干家' => '幹家',
'干将' => '幹將',
-'干得' => '幹得',
+'干得了' => '幹得了',
'干性油' => '幹性油',
'干才' => '幹才',
'干掉' => '幹掉',
@@ -5410,7 +5001,6 @@ $zh2Hant = array(
'干当' => '幹當',
'干的停当' => '幹的停當',
'干细胞' => '幹細胞',
-'干細胞' => '幹細胞',
'干线' => '幹線',
'干练' => '幹練',
'干缺' => '幹缺',
@@ -5430,11 +5020,11 @@ $zh2Hant = array(
'几个' => '幾個',
'几周后' => '幾周後',
'几天后' => '幾天後',
+'几进几出' => '幾進幾出',
'几只' => '幾隻',
'几出' => '幾齣',
'广部' => '广部',
-'庄稼人' => '庄稼人',
-'庄稼院' => '庄稼院',
+'床席' => '床蓆',
'店里' => '店裡',
'府干卿' => '府干卿',
'府干擾' => '府干擾',
@@ -5446,55 +5036,46 @@ $zh2Hant = array(
'府干预' => '府干預',
'府干' => '府幹',
'座钟' => '座鐘',
-'康庄大道' => '康庄大道',
-'康庄' => '康莊',
+'廍子里' => '廍子里',
+'廓子里' => '廓子里',
'厨余' => '廚餘',
'厮斗' => '廝鬥',
'庙里' => '廟裡',
-'废后' => '廢后',
'廢后' => '廢后',
+'废后' => '廢后',
'广征' => '廣徵',
'广舍' => '廣捨',
'延历' => '延曆',
'建于' => '建於',
'弄干' => '弄乾',
'弄丑' => '弄醜',
-'弄脏' => '弄髒',
+'弄脏胸' => '弄髒胸',
'弄松' => '弄鬆',
'弄鬼吊猴' => '弄鬼弔猴',
-'吊儿郎当' => '弔兒郎當',
'吊卷' => '弔卷',
'吊取' => '弔取',
'吊古' => '弔古',
-'吊古寻幽' => '弔古尋幽',
'吊唁' => '弔唁',
'吊问' => '弔問',
'吊喉' => '弔喉',
'吊丧' => '弔喪',
-'吊丧问疾' => '弔喪問疾',
'吊喭' => '弔喭',
-'吊场' => '弔場',
'吊奠' => '弔奠',
'吊孝' => '弔孝',
'吊客' => '弔客',
'吊宴' => '弔宴',
'吊带' => '弔帶',
'吊影' => '弔影',
+'吊恤' => '弔恤',
'吊慰' => '弔慰',
'吊扣' => '弔扣',
'吊拷' => '弔拷',
-'吊拷绷扒' => '弔拷繃扒',
'吊挂' => '弔掛',
'吊撒' => '弔撒',
'吊文' => '弔文',
'吊旗' => '弔旗',
-'吊书' => '弔書',
-'吊桥' => '弔橋',
'吊死' => '弔死',
-'吊死问孤' => '弔死問孤',
-'吊死问疾' => '弔死問疾',
'吊民' => '弔民',
-'吊民伐罪' => '弔民伐罪',
'吊祭' => '弔祭',
'吊纸' => '弔紙',
'吊者大悦' => '弔者大悅',
@@ -5503,28 +5084,23 @@ $zh2Hant = array(
'吊膀子' => '弔膀子',
'吊词' => '弔詞',
'吊诡' => '弔詭',
-'吊诡矜奇' => '弔詭矜奇',
'吊谎' => '弔謊',
'吊贺迎送' => '弔賀迎送',
'吊头' => '弔頭',
-'吊颈' => '弔頸',
'吊鹤' => '弔鶴',
'引斗' => '引鬥',
'弘历' => '弘曆',
'弘历史' => '弘歷史',
'弱于' => '弱於',
'弱水三千只取一瓢' => '弱水三千只取一瓢',
-'弱碱' => '弱鹼',
-'张三丰' => '張三丰',
'張三丰' => '張三丰',
+'张三丰' => '張三丰',
'张勋' => '張勳',
'张乐于张徐' => '張樂于張徐',
-'强占' => '強佔',
'强制作用' => '強制作用',
'强奸' => '強姦',
'强干' => '強幹',
'强于' => '強於',
-'强碱' => '強鹼',
'别口气' => '彆口氣',
'别强' => '彆強',
'别扭' => '彆扭',
@@ -5532,7 +5108,6 @@ $zh2Hant = array(
'别气' => '彆氣',
'弹子台' => '彈子檯',
'弹珠台' => '彈珠檯',
-'弹药' => '彈藥',
'汇刊' => '彙刊',
'汇报' => '彙報',
'汇整' => '彙整',
@@ -5542,37 +5117,40 @@ $zh2Hant = array(
'汇辑' => '彙輯',
'汇集' => '彙集',
'形单影只' => '形單影隻',
-'形影相吊' => '形影相弔',
'形于' => '形於',
'彭于晏' => '彭于晏',
'影后' => '影后',
-'仿佛' => '彷彿',
+'影相吊' => '影相弔',
'役于' => '役於',
-'彼此克制' => '彼此剋制',
'往日無仇' => '往日無讎',
'往里' => '往裡',
-'往复' => '往複',
'待复' => '待覆',
'很干' => '很乾',
'很凶' => '很兇',
+'很准' => '很準',
'很丑' => '很醜',
'律历志' => '律曆志',
'后印' => '後印',
'后台老板' => '後台老板',
'后天' => '後天',
-'后庄' => '後庄',
'后面店' => '後面店',
'徐干' => '徐幹',
+'徒杠' => '徒杠',
'徒托空言' => '徒託空言',
-'得克制' => '得剋制',
+'得到回复' => '得到回覆',
+'从仆' => '從僕',
+'从图里' => '從圖裡',
+'从山里' => '從山裡',
'从于' => '從於',
'从里到外' => '從裡到外',
'从里向外' => '從裡向外',
+'御岳山' => '御嶽山',
+'御制' => '御製',
'复始' => '復始',
'复活节历表' => '復活節曆表',
+'复苏' => '復甦',
'征人' => '徵人',
'征令' => '徵令',
-'征占' => '徵佔',
'征信' => '徵信',
'征候' => '徵候',
'征兆' => '徵兆',
@@ -5620,7 +5198,6 @@ $zh2Hant = array(
'征集' => '徵集',
'征风召雨' => '徵風召雨',
'征验' => '徵驗',
-'德占' => '德佔',
'心愿' => '心愿',
'心于' => '心於',
'心理' => '心理',
@@ -5719,7 +5296,6 @@ $zh2Hant = array(
'心系英' => '心繫英',
'心系茶' => '心繫茶',
'心系万' => '心繫萬',
-'心系着' => '心繫著',
'心系兰' => '心繫蘭',
'心系西' => '心繫西',
'心系贫' => '心繫貧',
@@ -5738,26 +5314,24 @@ $zh2Hant = array(
'心系麦' => '心繫麥',
'心系黄' => '心繫黃',
'心脏' => '心臟',
+'心脏痳痹' => '心臟痲痺',
'心荡' => '心蕩',
-'心药' => '心藥',
'心里面' => '心裏面',
'心里' => '心裡',
'心长发短' => '心長髮短',
'心余' => '心餘',
'必须' => '必須',
-'忙并' => '忙併',
'忙里' => '忙裡',
'忙里偷闲' => '忙裡偷閒',
'忠人之托' => '忠人之托',
'忠仆' => '忠僕',
'忠于' => '忠於',
'快干' => '快乾',
-'快克制' => '快剋制',
'快快当当' => '快快當當',
'快冲' => '快衝',
-'怎么' => '怎麼',
-'怎么着' => '怎麼著',
'怒于' => '怒於',
+'怒气冲天' => '怒氣衝天',
+'怒火冲天' => '怒火衝天',
'怒发冲冠' => '怒髮衝冠',
'思如泉涌' => '思如泉湧',
'怠于' => '怠於',
@@ -5765,6 +5339,7 @@ $zh2Hant = array(
'急冲而下' => '急衝而下',
'性征' => '性徵',
'性欲' => '性慾',
+'怨气冲天' => '怨氣衝天',
'怪里怪气' => '怪裡怪氣',
'怫郁' => '怫鬱',
'恂栗' => '恂慄',
@@ -5772,35 +5347,42 @@ $zh2Hant = array(
'恕乏价催' => '恕乏价催',
'息交绝游' => '息交絕遊',
'息谷' => '息穀',
-'恰才' => '恰纔',
-'悍药' => '悍藥',
'悒郁' => '悒鬱',
'悠悠荡荡' => '悠悠蕩蕩',
'悠荡' => '悠蕩',
'悠游' => '悠遊',
-'您克制' => '您剋制',
+'悲凄' => '悲悽',
'悲筑' => '悲筑',
'悲郁' => '悲鬱',
-'闷着头儿干' => '悶著頭兒幹',
'悸栗' => '悸慄',
+'凄厉' => '悽厲',
+'凄怨' => '悽怨',
+'凄惋' => '悽惋',
+'凄惶' => '悽惶',
+'凄恻' => '悽惻',
+'凄怆' => '悽愴',
+'凄惨' => '悽慘',
+'凄戾' => '悽戾',
+'凄然' => '悽然',
+'凄美' => '悽美',
+'凄苦' => '悽苦',
+'凄酸' => '悽酸',
'情欲' => '情慾',
'惇朴' => '惇樸',
+'恶仆' => '惡僕',
'恶直丑正' => '惡直醜正',
'恶斗' => '惡鬥',
-'想克制' => '想剋制',
'惴栗' => '惴慄',
-'意占' => '意佔',
-'意克制' => '意剋制',
'意大利面' => '意大利麵',
-'意面' => '意麵',
'爱困' => '愛睏',
-'感冒药' => '感冒藥',
'感于' => '感於',
'愿朴' => '愿樸',
+'愿樸' => '愿樸',
'愿而恭' => '愿而恭',
'栗冽' => '慄冽',
'栗栗' => '慄慄',
'慌里慌张' => '慌裡慌張',
+'惨淡' => '慘澹',
'庆吊' => '慶弔',
'庆历' => '慶曆',
'庆历史' => '慶歷史',
@@ -5817,10 +5399,10 @@ $zh2Hant = array(
'凭折' => '憑摺',
'凭准' => '憑準',
'凭借' => '憑藉',
-'凭借着' => '憑藉著',
+'凭闲' => '憑閑',
+'宪法里' => '憲法裡',
'恳托' => '懇託',
'懈松' => '懈鬆',
-'应克制' => '應剋制',
'应征' => '應徵',
'应钟' => '應鐘',
'懔栗' => '懍慄',
@@ -5829,7 +5411,6 @@ $zh2Hant = array(
'蒙直' => '懞直',
'惩忿窒欲' => '懲忿窒欲',
'怀里' => '懷裡',
-'怀表' => '懷錶',
'怀钟' => '懷鐘',
'悬挂' => '懸掛',
'悬梁' => '懸樑',
@@ -5839,44 +5420,44 @@ $zh2Hant = array(
'恋恋不舍' => '戀戀不捨',
'成于' => '成於',
'成于思' => '成於思',
-'成药' => '成藥',
-'我克制' => '我剋制',
'戬谷' => '戩穀',
'截发' => '截髮',
'战天斗地' => '戰天鬥地',
'战栗' => '戰慄',
'战斗' => '戰鬥',
-'戏彩娱亲' => '戲綵娛親',
'戏里' => '戲裡',
+'戲院里' => '戲院里',
'戴表元' => '戴表元',
-'戴表' => '戴錶',
'戴发含齿' => '戴髮含齒',
'房里' => '房裡',
'所云' => '所云',
'所云云' => '所云云',
-'所占' => '所佔',
'所占卜' => '所占卜',
'所占星' => '所占星',
'所占算' => '所占算',
'所托' => '所託',
'扁拟谷盗虫' => '扁擬穀盜蟲',
-'手塚治虫' => '手塚治虫',
'手冢治虫' => '手塚治虫',
+'手塚治虫' => '手塚治虫',
'手折' => '手摺',
+'手表態' => '手表態',
'手表态' => '手表態',
'手表明' => '手表明',
+'手表決' => '手表決',
'手表决' => '手表決',
'手表演' => '手表演',
+'手表現' => '手表現',
'手表现' => '手表現',
'手表示' => '手表示',
+'手表達' => '手表達',
'手表达' => '手表達',
'手表露' => '手表露',
'手表面' => '手表面',
'手里剑' => '手裏劍',
'手里' => '手裡',
'手表' => '手錶',
+'手链' => '手鍊',
'手松' => '手鬆',
-'才克制' => '才剋制',
'才干休' => '才干休',
'才干戈' => '才干戈',
'才干扰' => '才干擾',
@@ -5890,25 +5471,24 @@ $zh2Hant = array(
'扑打' => '扑打',
'扑挞' => '扑撻',
'打干哕' => '打乾噦',
-'打并' => '打併',
'打出吊入' => '打出弔入',
'打卡钟' => '打卡鐘',
'打吨' => '打吨',
'打干' => '打幹',
'打拼' => '打拚',
'打断发' => '打斷發',
+'打卤' => '打滷',
'打谷' => '打穀',
-'打着钟' => '打著鐘',
-'打路庄板' => '打路莊板',
'打钟' => '打鐘',
'打风后' => '打風後',
'打斗' => '打鬥',
'托管国' => '托管國',
'扛大梁' => '扛大樑',
-'扞御' => '扞禦',
+'捍御' => '扞禦',
'扯面' => '扯麵',
-'扶余国' => '扶餘國',
+'扶余' => '扶餘',
'批准的' => '批准的',
+'批准确定' => '批准確定',
'批复' => '批覆',
'批注' => '批註',
'批斗' => '批鬥',
@@ -5917,15 +5497,11 @@ $zh2Hant = array(
'抑制剂' => '抑制劑',
'抑郁' => '抑鬱',
'抓奸' => '抓姦',
-'抓药' => '抓藥',
'抓斗' => '抓鬥',
-'投药' => '投藥',
-'抗癌药' => '抗癌藥',
'抗御' => '抗禦',
-'抗药' => '抗藥',
-'抗碱' => '抗鹼',
'折向往' => '折向往',
'折子戏' => '折子戲',
+'折子戲' => '折子戲',
'折戟沈河' => '折戟沈河',
'折冲' => '折衝',
'披榛采兰' => '披榛採蘭',
@@ -5942,7 +5518,6 @@ $zh2Hant = array(
'拆伙' => '拆夥',
'拈须' => '拈鬚',
'拉克施尔德钟' => '拉克施爾德鐘',
-'拉杆' => '拉杆',
'拉纤' => '拉縴',
'拉面上' => '拉面上',
'拉面具' => '拉面具',
@@ -5975,6 +5550,7 @@ $zh2Hant = array(
'括发' => '括髮',
'拭干' => '拭乾',
'拮据' => '拮据',
+'拳局' => '拳跼',
'拼死拼活' => '拼死拼活',
'拾沈' => '拾瀋',
'拿下表' => '拿下錶',
@@ -5987,21 +5563,19 @@ $zh2Hant = array(
'挂念' => '挂念',
'挂号' => '挂號',
'挂车' => '挂車',
-'挂面' => '挂面',
'挌斗' => '挌鬥',
'挑大梁' => '挑大樑',
'挑斗' => '挑鬥',
'振荡' => '振蕩',
-'捆扎' => '捆紮',
'捉奸徒' => '捉奸徒',
'捉奸细' => '捉奸細',
'捉奸贼' => '捉奸賊',
'捉奸党' => '捉奸黨',
'捉奸' => '捉姦',
'捉发' => '捉髮',
-'捍御' => '捍禦',
'捏面人' => '捏麵人',
'舍不得' => '捨不得',
+'舍入' => '捨入',
'舍出' => '捨出',
'舍去' => '捨去',
'舍命' => '捨命',
@@ -6031,39 +5605,44 @@ $zh2Hant = array(
'卷去' => '捲去',
'卷图' => '捲圖',
'卷土重来' => '捲土重來',
+'卷地' => '捲地',
'卷尺' => '捲尺',
+'卷尾猴' => '捲尾猴',
'卷心菜' => '捲心菜',
'卷成' => '捲成',
'卷曲' => '捲曲',
'卷款' => '捲款',
'卷毛' => '捲毛',
-'卷烟' => '捲煙',
+'卷烟盒' => '捲煙盒',
+'卷积云' => '捲積雲',
'卷筒' => '捲筒',
'卷帘' => '捲簾',
'卷纸' => '捲紙',
'卷缩' => '捲縮',
'卷舌' => '捲舌',
-'卷舖盖' => '捲舖蓋',
-'卷菸' => '捲菸',
+'卷铺盖' => '捲舖蓋',
+'卷烟' => '捲菸',
+'卷叶蛾' => '捲葉蛾',
'卷袖' => '捲袖',
'卷走' => '捲走',
'卷起' => '捲起',
'卷轴' => '捲軸',
'卷逃' => '捲逃',
-'卷铺盖' => '捲鋪蓋',
'卷云' => '捲雲',
'卷风' => '捲風',
-'卷发' => '捲髮',
+'卷发器' => '捲髮器',
'捵面' => '捵麵',
'捶炼' => '捶鍊',
'扫荡' => '掃蕩',
+'授勋' => '授勳',
'掌柜' => '掌柜',
'排骨面' => '排骨麵',
'挂名' => '掛名',
'挂帘' => '掛帘',
'挂历' => '掛曆',
-'挂鈎' => '掛鈎',
+'挂钩' => '掛鈎',
'挂钟' => '掛鐘',
+'挂面' => '掛麵',
'采下' => '採下',
'采伐' => '採伐',
'采住' => '採住',
@@ -6101,15 +5680,14 @@ $zh2Hant = array(
'采珠' => '採珠',
'采生折割' => '採生折割',
'采用' => '採用',
-'采的' => '採的',
'采石' => '採石',
'采砂场' => '採砂場',
'采矿' => '採礦',
'采种' => '採種',
'采空区' => '採空區',
'采空采穗' => '採空採穗',
-'采納' => '採納',
'采纳' => '採納',
+'采納' => '採納',
'采给' => '採給',
'采花' => '採花',
'采芹人' => '採芹人',
@@ -6138,7 +5716,6 @@ $zh2Hant = array(
'采食' => '採食',
'采盐' => '採鹽',
'掣签' => '掣籤',
-'接着说' => '接著說',
'控制' => '控制',
'推情准理' => '推情準理',
'推托之词' => '推托之詞',
@@ -6149,7 +5726,6 @@ $zh2Hant = array(
'提摩太后书' => '提摩太後書',
'插于' => '插於',
'换签' => '換籤',
-'换药' => '換藥',
'换只' => '換隻',
'换发' => '換髮',
'握发' => '握髮',
@@ -6158,20 +5734,17 @@ $zh2Hant = array(
'揪发' => '揪髮',
'揪须' => '揪鬚',
'揭丑' => '揭醜',
+'揮手表' => '揮手表',
'挥手表' => '揮手表',
-'挥杆' => '揮杆',
'搋面' => '搋麵',
'损于' => '損於',
'搏斗' => '搏鬥',
-'摇摇荡荡' => '搖搖蕩蕩',
-'摇荡' => '搖蕩',
'捣鬼吊白' => '搗鬼弔白',
-'搤肮拊背' => '搤肮拊背',
+'扼肮' => '搤肮',
+'扼肮拊背' => '搤肮拊背',
'搬斗' => '搬鬥',
'搭干铺' => '搭乾鋪',
'搭伙' => '搭夥',
-'抢占' => '搶佔',
-'搽药' => '搽藥',
'摧坚获丑' => '摧堅獲醜',
'摭采' => '摭採',
'摸棱' => '摸稜',
@@ -6183,6 +5756,7 @@ $zh2Hant = array(
'折扇' => '摺扇',
'折梯' => '摺梯',
'折椅' => '摺椅',
+'折台' => '摺檯',
'折叠' => '摺疊',
'折痕' => '摺痕',
'折篷' => '摺篷',
@@ -6192,7 +5766,6 @@ $zh2Hant = array(
'捞干' => '撈乾',
'捞面' => '撈麵',
'撚须' => '撚鬚',
-'撞球台' => '撞球檯',
'撞钟' => '撞鐘',
'撞阵冲军' => '撞陣衝軍',
'撤并' => '撤併',
@@ -6207,31 +5780,26 @@ $zh2Hant = array(
'操作钟' => '操作鐘',
'担仔面' => '擔仔麵',
'担担面' => '擔擔麵',
-'担着' => '擔著',
-'担负着' => '擔負著',
'据云' => '據云',
'据干而窥井底' => '據榦而窺井底',
'擢发' => '擢髮',
'擦干' => '擦乾',
'擦干净' => '擦乾淨',
-'擦药' => '擦藥',
'拧干' => '擰乾',
'摆钟' => '擺鐘',
'摄制' => '攝製',
'支干' => '支幹',
-'支杆' => '支杆',
+'支配欲' => '支配慾',
'收获' => '收穫',
'改征' => '改徵',
-'攻占' => '攻佔',
+'改采' => '改採',
'放蒙挣' => '放懞掙',
'放荡' => '放蕩',
'放松' => '放鬆',
-'故事里' => '故事裡',
+'政斗' => '政鬥',
'故云' => '故云',
'敏于' => '敏於',
-'救药' => '救藥',
'败于' => '敗於',
-'叙说着' => '敘說著',
'教学钟' => '教學鐘',
'教于' => '教於',
'教范' => '教範',
@@ -6245,37 +5813,52 @@ $zh2Hant = array(
'敬挽' => '敬輓',
'敲扑' => '敲扑',
'敲钟' => '敲鐘',
-'整庄' => '整莊',
'整只' => '整隻',
'整风后' => '整風後',
'整发用品' => '整髮用品',
+'整出剧' => '整齣劇',
+'整出戏' => '整齣戲',
+'整出电影' => '整齣電影',
'敌忾同仇' => '敵愾同讎',
-'敷药' => '敷藥',
+'数只包括' => '數只包括',
+'数只可' => '數只可',
+'数只含' => '數只含',
+'数只在' => '數只在',
+'数只应' => '數只應',
+'数只是' => '數只是',
+'数只会' => '數只會',
+'数只有' => '數只有',
+'数只比' => '數只比',
+'数只能' => '數只能',
+'数只限' => '數只限',
+'数只需' => '數只需',
+'数只须' => '數只須',
'数天后' => '數天後',
'数字钟' => '數字鐘',
'数字钟表' => '數字鐘錶',
-'数学家' => '數學家',
'数罪并罚' => '數罪併罰',
'数与虏确' => '數與虜确',
+'数只' => '數隻',
'文丑' => '文丑',
'文汇报' => '文匯報',
+'文学志' => '文學誌',
'文征明' => '文徵明',
'文思泉涌' => '文思泉湧',
'文采郁郁' => '文采郁郁',
-'斗转参横' => '斗轉參橫',
+'斗牛星' => '斗牛星',
'斫雕为朴' => '斫雕為樸',
'新井里美' => '新井里美',
'新历' => '新曆',
'新历史' => '新歷史',
'新扎' => '新紮',
-'新庄' => '新莊',
-'新庄市' => '新莊市',
'斲雕为朴' => '斲雕為樸',
'断发' => '斷髮',
'断发文身' => '斷髮文身',
'方便面' => '方便麵',
'方几' => '方几',
'方向往' => '方向往',
+'方志恒' => '方志恒',
+'方法里' => '方法裡',
'方志' => '方誌',
'方面' => '方面',
'于0' => '於0',
@@ -6307,7 +5890,6 @@ $zh2Hant = array(
'于你' => '於你',
'于八' => '於八',
'于六' => '於六',
-'于克制' => '於剋制',
'于前' => '於前',
'于劣' => '於劣',
'于勤' => '於勤',
@@ -6383,92 +5965,54 @@ $zh2Hant = array(
'于震中' => '於震中',
'于震前' => '於震前',
'于震后' => '於震后',
-'于0' => '於0',
-'于1' => '於1',
-'于2' => '於2',
-'于3' => '於3',
-'于4' => '於4',
-'于5' => '於5',
-'于6' => '於6',
-'于7' => '於7',
-'于8' => '於8',
-'于9' => '於9',
'施舍' => '施捨',
'施于' => '施於',
'施舍之道' => '施舍之道',
-'施药' => '施藥',
'旁征博引' => '旁徵博引',
'旁注' => '旁註',
'旅游' => '旅遊',
'旋干转坤' => '旋乾轉坤',
-'旋绕着' => '旋繞著',
'旋回' => '旋迴',
'族里' => '族裡',
-'旗杆' => '旗杆',
-'日占' => '日佔',
-'日子里' => '日子裡',
'日心历表' => '日心曆表',
-'日晒' => '日晒',
'日历' => '日曆',
'日历史' => '日歷史',
+'日里' => '日裡',
'日志' => '日誌',
'早于' => '早於',
'旱干' => '旱乾',
-'昆仑山' => '昆崙山',
+'升州' => '昇州',
'升平' => '昇平',
'升阳' => '昇陽',
'昊天不吊' => '昊天不弔',
-'明天' => '明天',
'明征' => '明徵',
'明目张胆' => '明目張胆',
'明窗净几' => '明窗淨几',
'明范' => '明範',
-'明里' => '明裡',
-'易克制' => '易剋制',
+'明鉴' => '明鑑',
'易于' => '易於',
-'星巴克' => '星巴克',
'星历' => '星曆',
'星期后' => '星期後',
'星历史' => '星歷史',
-'星辰表' => '星辰錶',
-'春假里' => '春假裡',
-'春天里' => '春天裡',
-'春日里' => '春日裡',
-'春药' => '春藥',
'春游' => '春遊',
'春香斗学' => '春香鬥學',
-'昨天' => '昨天',
+'是发小' => '是髮小',
'时钟' => '時鐘',
-'时间里' => '時間裡',
+'时间不准' => '時間不準',
'晃荡' => '晃蕩',
-'晋升' => '晉陞',
-'晒干' => '晒乾',
-'晒伤' => '晒傷',
-'晒图' => '晒圖',
-'晒图纸' => '晒圖紙',
-'晒成' => '晒成',
-'晒晒' => '晒晒',
-'晒烟' => '晒煙',
-'晒种' => '晒種',
-'晒衣' => '晒衣',
-'晒黑' => '晒黑',
'晚于' => '晚於',
'晚钟' => '晚鐘',
'晞发' => '晞髮',
'晨钟' => '晨鐘',
'普冬冬' => '普鼕鼕',
-'景致' => '景緻',
'晾干' => '晾乾',
-'晕船药' => '暈船藥',
-'晕车药' => '暈車藥',
-'暑假里' => '暑假裡',
'暗地里' => '暗地裡',
'暗沟里' => '暗溝裡',
'暗里' => '暗裡',
'暗斗' => '暗鬥',
'畅游' => '暢遊',
+'昵称' => '暱稱',
'暴敛横征' => '暴斂橫徵',
-'暴晒' => '暴晒',
'历元' => '曆元',
'历命' => '曆命',
'历始' => '曆始',
@@ -6482,24 +6026,22 @@ $zh2Hant = array(
'历狱' => '曆獄',
'历纪' => '曆紀',
'历象' => '曆象',
-'曝晒' => '曝晒',
+'晒干' => '曬乾',
'晒谷' => '曬穀',
'曰云' => '曰云',
'更仆难数' => '更僕難數',
+'更加注' => '更加注',
'更签' => '更籤',
'更钟' => '更鐘',
-'书呆子' => '書獃子',
'书签' => '書籤',
'书面' => '書面',
+'曹子里' => '曹子里',
'曼谷人' => '曼谷人',
'曾朴' => '曾樸',
'最多' => '最多',
-'会上签署' => '會上簽署',
-'会上签订' => '會上簽訂',
-'会占' => '會佔',
-'会占卜' => '會占卜',
-'会干扰' => '會干擾',
+'最多只' => '最多只',
'會干擾' => '會干擾',
+'会干扰' => '會干擾',
'会干' => '會幹',
'会吊' => '會弔',
'会里' => '會裡',
@@ -6514,10 +6056,11 @@ $zh2Hant = array(
'有只不' => '有只不',
'有只允' => '有只允',
'有只容' => '有只容',
-'有只採' => '有只採',
'有只采' => '有只採',
+'有只採' => '有只採',
'有只是' => '有只是',
'有只用' => '有只用',
+'有回复' => '有回覆',
'有够赞' => '有夠讚',
'有征伐' => '有征伐',
'有征战' => '有征戰',
@@ -6534,45 +6077,44 @@ $zh2Hant = array(
'有余' => '有餘',
'有发头陀寺' => '有髮頭陀寺',
'服于' => '服於',
-'服药' => '服藥',
'望了望' => '望了望',
'望后石' => '望后石',
-'望着表' => '望著錶',
-'望着钟' => '望著鐘',
-'望着钟表' => '望著鐘錶',
'朝乾夕惕' => '朝乾夕惕',
'朝钟' => '朝鐘',
'朦胧' => '朦朧',
'蒙胧' => '朦朧',
'木偶戏扎' => '木偶戲紮',
-'木杆' => '木杆',
'木材干馏' => '木材乾餾',
'木梁' => '木樑',
+'木签' => '木籤',
'木制' => '木製',
'木钟' => '木鐘',
'未干' => '未乾',
'未干涉' => '未干涉',
-'末药' => '末藥',
+'未干預' => '未干預',
+'未干预' => '未干預',
'本征' => '本徵',
+'本出戏' => '本齣戲',
'术赤' => '朮赤',
-'朱仑街' => '朱崙街',
'朱庆余' => '朱慶餘',
'朱理安历' => '朱理安曆',
'朱理安历史' => '朱理安歷史',
-'杆子' => '杆子',
+'朴子里' => '朴子里',
'李志喜' => '李志喜',
-'李連杰' => '李連杰',
'李连杰' => '李連杰',
+'李連杰' => '李連杰',
'材干' => '材幹',
-'村子里' => '村子裡',
-'村庄' => '村莊',
'村落发' => '村落發',
'村里' => '村裡',
-'村里长' => '村里長',
'村里長' => '村里長',
+'村里长' => '村里長',
'杜老志道' => '杜老誌道',
'杞宋无征' => '杞宋無徵',
'束发' => '束髮',
+'杠人' => '杠人',
+'杠梁' => '杠梁',
+'杠轂' => '杠轂',
+'杠毂' => '杠轂',
'杯干' => '杯乾',
'杯面' => '杯麵',
'杰伦' => '杰倫',
@@ -6581,20 +6123,21 @@ $zh2Hant = array(
'杰特' => '杰特',
'东周钟' => '東周鐘',
'东岳' => '東嶽',
+'東湖里' => '東湖里',
'东冲西突' => '東衝西突',
'东游' => '東遊',
'松山庄' => '松山庄',
-'板着脸' => '板著臉',
'板荡' => '板蕩',
'林宏岳' => '林宏嶽',
+'林杰樑' => '林杰樑',
'林郁方' => '林郁方',
'林钟' => '林鐘',
+'林鹅峰' => '林鵞峰',
'果干' => '果乾',
'果子干' => '果子乾',
-'枝不得大于干' => '枝不得大於榦',
+'果累累' => '果纍纍',
'枝干' => '枝幹',
'枯干' => '枯乾',
-'台历' => '枱曆',
'架钟' => '架鐘',
'某只' => '某隻',
'染指于' => '染指於',
@@ -6606,8 +6149,10 @@ $zh2Hant = array(
'柱梁' => '柱樑',
'柳诒征' => '柳詒徵',
'栖栖皇皇' => '栖栖皇皇',
+'栗栖溪' => '栗栖溪',
'校准' => '校準',
-'校仇' => '校讎',
+'校舍' => '校舍',
+'校仇学' => '校讎學',
'核准的' => '核准的',
'格于' => '格於',
'格范' => '格範',
@@ -6615,11 +6160,14 @@ $zh2Hant = array(
'格里高利历' => '格里高利曆',
'格斗' => '格鬥',
'桂圆干' => '桂圓乾',
-'桅杆' => '桅杆',
'桌几' => '桌几',
'桌历' => '桌曆',
'桌历史' => '桌歷史',
+'桌游' => '桌遊',
'桑干' => '桑乾',
+'杆枪' => '桿槍',
+'杆秤' => '桿秤',
+'杆菌' => '桿菌',
'梁上君子' => '梁上君子',
'条干' => '條幹',
'梨干' => '梨乾',
@@ -6627,30 +6175,28 @@ $zh2Hant = array(
'械系' => '械繫',
'械斗' => '械鬥',
'弃舍' => '棄捨',
+'棉里' => '棉裡',
'棉制' => '棉製',
'棒子面' => '棒子麵',
-'枣庄' => '棗莊',
'栋梁' => '棟樑',
'棫朴' => '棫樸',
'森林里' => '森林裡',
'棺材里' => '棺材裡',
'植发' => '植髮',
+'椒面' => '椒麵',
'椰枣干' => '椰棗乾',
'楊雅筑' => '楊雅筑',
'杨雅筑' => '楊雅筑',
-'楚庄问鼎' => '楚莊問鼎',
-'楚庄王' => '楚莊王',
-'楚庄绝缨' => '楚莊絕纓',
'桢干' => '楨幹',
'业余' => '業餘',
'榨干' => '榨乾',
+'枪杆' => '槍桿',
'杠杆' => '槓桿',
'乐器钟' => '樂器鐘',
'樊于期' => '樊於期',
'梁上' => '樑上',
'梁柱' => '樑柱',
'樗里子' => '樗里子',
-'标杆' => '標杆',
'标标致致' => '標標致致',
'标准' => '標準',
'标签' => '標籤',
@@ -6662,8 +6208,8 @@ $zh2Hant = array(
'模范14棒' => '模范14棒',
'模范21棒' => '模范21棒',
'模范七棒' => '模范七棒',
-'模范三军' => '模范三軍',
'模范三軍' => '模范三軍',
+'模范三军' => '模范三軍',
'模范棒棒堂' => '模范棒棒堂',
'模制' => '模製',
'样范' => '樣範',
@@ -6687,39 +6233,32 @@ $zh2Hant = array(
'朴陋' => '樸陋',
'朴马' => '樸馬',
'朴鲁' => '樸魯',
-'树干' => '樹榦',
+'树干' => '樹幹',
+'树林里' => '樹林裡',
'树梁' => '樹樑',
'桥梁' => '橋樑',
-'機械系' => '機械系',
'机械系' => '機械系',
+'機械系' => '機械系',
'机械表' => '機械錶',
'机械钟' => '機械鐘',
'机械钟表' => '機械鐘錶',
-'机绣' => '機繡',
'横征暴敛' => '橫徵暴斂',
-'横杆' => '橫杆',
'横梁' => '橫樑',
'横冲' => '橫衝',
-'台子' => '檯子',
'台布' => '檯布',
+'台历' => '檯曆',
'台灯' => '檯燈',
'台球' => '檯球',
-'台面' => '檯面',
+'台面上' => '檯面上',
'柜台' => '櫃檯',
'栉发工' => '櫛髮工',
-'栏杆' => '欄杆',
'欲海难填' => '欲海難填',
'欺蒙' => '欺矇',
'歌后' => '歌后',
'歌钟' => '歌鐘',
'欧游' => '歐遊',
-'止咳药' => '止咳藥',
'止于' => '止於',
-'止痛药' => '止痛藥',
-'止血药' => '止血藥',
-'正在叱咤' => '正在叱咤',
'正官庄' => '正官庄',
-'正当着' => '正當著',
'武丑' => '武丑',
'武后' => '武后',
'武斗' => '武鬥',
@@ -6737,7 +6276,7 @@ $zh2Hant = array(
'残余' => '殘餘',
'僵尸' => '殭屍',
'殷师牛斗' => '殷師牛鬥',
-'杀虫药' => '殺蟲藥',
+'殷鉴' => '殷鑑',
'壳里' => '殼裡',
'殿钟自鸣' => '殿鐘自鳴',
'毁于' => '毀於',
@@ -6748,7 +6287,6 @@ $zh2Hant = array(
'母丑' => '母醜',
'每每只' => '每每只',
'每只' => '每隻',
-'毒药' => '毒藥',
'毗婆尸佛' => '毗婆尸佛',
'毛坏' => '毛坏',
'毛姜' => '毛薑',
@@ -6762,24 +6300,26 @@ $zh2Hant = array(
'水准' => '水準',
'水无怜奈' => '水無怜奈',
'水里' => '水裡',
+'水里商工' => '水里商工',
'水里溪' => '水里溪',
-'水里浊水溪' => '水里濁水溪',
+'水里濁水溪' => '水里濁水溪',
'水里鄉' => '水里鄉',
-'水里乡' => '水里鄉',
-'水碱' => '水鹼',
+'水里高級商工' => '水里高級商工',
+'水里鳳林' => '水里鳳林',
+'水表' => '水錶',
'永历' => '永曆',
'永历史' => '永歷史',
'永志不忘' => '永誌不忘',
'求知欲' => '求知慾',
'求签' => '求籤',
'求道于盲' => '求道於盲',
-'汗碱' => '汗鹼',
+'污蔑' => '汙衊',
'池里' => '池裡',
-'污蔑' => '污衊',
+'汤卤' => '汤滷',
'汲于' => '汲於',
'决斗' => '決鬥',
+'沈海蓉' => '沈海蓉',
'沈淀' => '沈澱',
-'沈着' => '沈著',
'沈郁' => '沈鬱',
'沉淀' => '沉澱',
'沉郁' => '沉鬱',
@@ -6790,18 +6330,20 @@ $zh2Hant = array(
'没梢干' => '沒梢幹',
'没样范' => '沒樣範',
'没准' => '沒準',
-'没药' => '沒藥',
'冲冠发怒' => '沖冠髮怒',
+'冲天' => '沖天',
+'沙羡' => '沙羡',
'沙里淘金' => '沙裡淘金',
'河岳' => '河嶽',
'河流汇集' => '河流匯集',
'河里' => '河裡',
+'油泼面' => '油潑麵',
'油斗' => '油鬥',
'油面' => '油麵',
'治愈' => '治癒',
'沿溯' => '沿泝',
-'法占' => '法佔',
'法自制' => '法自制',
+'法里,' => '法裡,',
'泛游' => '泛遊',
'泡制' => '泡製',
'泡面' => '泡麵',
@@ -6814,6 +6356,7 @@ $zh2Hant = array(
'泱郁' => '泱鬱',
'泳气钟' => '泳氣鐘',
'洄游' => '洄遊',
+'洋河大曲' => '洋河大麴',
'洒家' => '洒家',
'洒扫' => '洒掃',
'洒水' => '洒水',
@@ -6827,12 +6370,13 @@ $zh2Hant = array(
'洗练' => '洗鍊',
'洗发' => '洗髮',
'洛钟东应' => '洛鐘東應',
+'洞里' => '洞裡',
'泄欲' => '洩慾',
'洪范' => '洪範',
+'洪谷子' => '洪谷子',
'洪适' => '洪适',
'洪钟' => '洪鐘',
'汹涌' => '洶湧',
-'派团参加' => '派團參加',
'流征' => '流徵',
'流于' => '流於',
'流荡' => '流蕩',
@@ -6840,29 +6384,27 @@ $zh2Hant = array(
'流风余韵' => '流風餘韻',
'浩浩荡荡' => '浩浩蕩蕩',
'浩荡' => '浩蕩',
-'浪琴表' => '浪琴錶',
'浪荡' => '浪蕩',
'浪游' => '浪遊',
'浮于' => '浮於',
'浮荡' => '浮蕩',
'浮夸' => '浮誇',
'浮松' => '浮鬆',
-'海上布雷' => '海上佈雷',
'海干' => '海乾',
-'海淀山后' => '海淀山後',
'海淀山後' => '海淀山後',
-'海湾布雷' => '海灣佈雷',
+'海淀山后' => '海淀山後',
+'浸卤' => '浸滷',
'涂善妮' => '涂善妮',
'涂坤' => '涂坤',
-'涂壯勳' => '涂壯勳',
'涂壮勋' => '涂壯勳',
+'涂壯勳' => '涂壯勳',
'涂天相' => '涂天相',
'涂姓' => '涂姓',
'涂序瑄' => '涂序瑄',
-'涂敏恒' => '涂敏恆',
'涂敏恆' => '涂敏恆',
-'涂澤民' => '涂澤民',
+'涂敏恒' => '涂敏恆',
'涂泽民' => '涂澤民',
+'涂澤民' => '涂澤民',
'涂绍煃' => '涂紹煃',
'涂羽卿' => '涂羽卿',
'涂謹申' => '涂謹申',
@@ -6873,11 +6415,9 @@ $zh2Hant = array(
'涂长望' => '涂長望',
'涂鸿钦' => '涂鴻欽',
'涂鴻欽' => '涂鴻欽',
-'消炎药' => '消炎藥',
-'消肿药' => '消腫藥',
-'液晶表' => '液晶錶',
'涳蒙' => '涳濛',
'涸干' => '涸乾',
+'凉席' => '涼蓆',
'凉面' => '涼麵',
'淋余土' => '淋餘土',
'淑范' => '淑範',
@@ -6892,25 +6432,22 @@ $zh2Hant = array(
'淫荡' => '淫蕩',
'淬炼' => '淬鍊',
'深山何处钟' => '深山何處鐘',
-'深渊里' => '深淵裡',
+'深山里' => '深山裡',
'淳于' => '淳于',
'淳朴' => '淳樸',
'渊淳岳峙' => '淵淳嶽峙',
+'渊里' => '淵裡',
'浅淀' => '淺澱',
'清心寡欲' => '清心寡欲',
-'清汤挂面' => '清湯掛麵',
-'减肥药' => '減肥藥',
'渠冲' => '渠衝',
-'测试' => '測試',
+'测不准' => '測不準',
'港制' => '港製',
+'游牧民族' => '游牧民族',
'游离' => '游離',
'浑朴' => '渾樸',
'浑个' => '渾箇',
-'凑合着' => '湊合著',
'湖里' => '湖裡',
-'湘绣' => '湘繡',
'湘累' => '湘纍',
-'湟潦生苹' => '湟潦生苹',
'涌上' => '湧上',
'涌来' => '湧來',
'涌入' => '湧入',
@@ -6923,7 +6460,6 @@ $zh2Hant = array(
'湮郁' => '湮鬱',
'汤下面' => '湯下麵',
'汤团' => '湯糰',
-'汤药' => '湯藥',
'汤面' => '湯麵',
'源于' => '源於',
'准不准' => '準不準',
@@ -6966,16 +6502,37 @@ $zh2Hant = array(
'滃郁' => '滃鬱',
'滑借' => '滑藉',
'汇丰' => '滙豐',
-'滷制' => '滷製',
-'滷面' => '滷麵',
+'卤了' => '滷了',
+'卤五花' => '滷五花',
+'卤味' => '滷味',
+'卤好' => '滷好',
+'卤子' => '滷子',
+'卤料' => '滷料',
+'卤水' => '滷水',
+'卤汁' => '滷汁',
+'卤湖' => '滷湖',
+'卤煮' => '滷煮',
+'卤牛' => '滷牛',
+'卤的' => '滷的',
+'卤肉' => '滷肉',
+'卤菜' => '滷菜',
+'卤蛋' => '滷蛋',
+'卤虾' => '滷蝦',
+'卤制' => '滷製',
+'卤豆' => '滷豆',
+'卤鸡' => '滷雞',
+'卤鸭' => '滷鴨',
+'卤鹅' => '滷鵝',
+'卤面' => '滷麵',
'满拼自尽' => '滿拚自盡',
'满满当当' => '滿滿當當',
'满头洋发' => '滿頭洋髮',
'漂荡' => '漂蕩',
'漕挽' => '漕輓',
'沤郁' => '漚鬱',
+'漠里' => '漠裡',
'汉弥登钟' => '漢彌登鐘',
-'汉弥登钟表公司' => '漢彌登鐘錶公司',
+'漫卷' => '漫捲',
'漫游' => '漫遊',
'潜意识里' => '潛意識裡',
'潜水表' => '潛水錶',
@@ -6998,7 +6555,7 @@ $zh2Hant = array(
'淀谓之滓' => '澱謂之滓',
'澹台' => '澹臺',
'澹荡' => '澹蕩',
-'激荡' => '激蕩',
+'激斗' => '激鬥',
'浓发' => '濃髮',
'蒙汜' => '濛汜',
'蒙蒙细雨' => '濛濛細雨',
@@ -7006,77 +6563,64 @@ $zh2Hant = array(
'蒙松雨' => '濛鬆雨',
'蒙鸿' => '濛鴻',
'滨田里佳子' => '濱田里佳子',
-'泻药' => '瀉藥',
'沈吉线' => '瀋吉線',
'沈山线' => '瀋山線',
'沈州' => '瀋州',
+'沈抚' => '瀋撫',
'沈水' => '瀋水',
'沈河' => '瀋河',
'沈海' => '瀋海',
'沈海铁路' => '瀋海鐵路',
'沈阳' => '瀋陽',
+'泸州大曲' => '瀘州大麯',
'潇洒' => '瀟洒',
'弥山遍野' => '瀰山遍野',
'弥漫' => '瀰漫',
-'弥漫着' => '瀰漫著',
'弥弥' => '瀰瀰',
-'灌药' => '灌藥',
'漓水' => '灕水',
'漓江' => '灕江',
'漓湘' => '灕湘',
'漓然' => '灕然',
'滩涂' => '灘涂',
+'滩席' => '灘蓆',
'火并非' => '火並非',
'火并' => '火併',
+'火山里' => '火山裡',
'火拼' => '火拚',
'火折子' => '火摺子',
-'火箭布雷' => '火箭佈雷',
'火签' => '火籤',
-'火药' => '火藥',
'灰蒙' => '灰濛',
'灰蒙蒙' => '灰濛濛',
'炆面' => '炆麵',
'炒面' => '炒麵',
'炮制' => '炮製',
-'炸药' => '炸藥',
'炸酱面' => '炸醬麵',
'为准' => '為準',
-'为着' => '為著',
+'为鉴' => '為鑑',
+'乌兹冲锋枪' => '烏茲衝鋒槍',
'乌发' => '烏髮',
'乌龙面' => '烏龍麵',
'烘干' => '烘乾',
'烘制' => '烘製',
'烤干' => '烤乾',
-'烤晒' => '烤晒',
+'烤卤' => '烤滷',
'焙干' => '焙乾',
'无征不信' => '無徵不信',
'无业游民' => '無業游民',
'无梁楼盖' => '無樑樓蓋',
-'无法克制' => '無法剋制',
-'无药可救' => '無藥可救',
'無言不仇' => '無言不讎',
'无余' => '無餘',
-'然身死才数月耳' => '然身死纔數月耳',
-'炼药' => '煉藥',
'炼制' => '煉製',
-'煎药' => '煎藥',
'煎面' => '煎麵',
'烟卷' => '煙捲',
-'烟斗丝' => '煙斗絲',
-'烟碱' => '煙鹼',
-'照占' => '照佔',
'照入签' => '照入籤',
-'照准' => '照準',
'照相干片' => '照相乾片',
'煨干' => '煨乾',
'煮面' => '煮麵',
'熊杰' => '熊杰',
'荧郁' => '熒鬱',
-'熬药' => '熬藥',
-'燉药' => '燉藥',
'燎发' => '燎髮',
'烧干' => '燒乾',
-'烧碱' => '燒鹼',
'燕几' => '燕几',
'燕巢于幕' => '燕巢於幕',
'燕燕于飞' => '燕燕于飛',
@@ -7089,6 +6633,7 @@ $zh2Hant = array(
'烫发' => '燙髮',
'烫面' => '燙麵',
'营干' => '營幹',
+'烩面' => '燴麵',
'烬余' => '燼餘',
'爆发指数' => '爆發指數',
'争奇斗妍' => '爭奇鬥妍',
@@ -7100,26 +6645,25 @@ $zh2Hant = array(
'争斗' => '爭鬥',
'爰定祥历' => '爰定祥厤',
'爽荡' => '爽蕩',
-'尔冬升' => '爾冬陞',
+'尔冬陞' => '爾冬陞',
'墙里' => '牆裡',
'片言只语' => '片言隻語',
+'版图里' => '版圖裡',
'牙签' => '牙籤',
-'牛肉面' => '牛肉麵',
'牛只' => '牛隻',
'物欲' => '物慾',
-'物理学家' => '物理學家',
+'抵牾' => '牴牾',
+'抵触' => '牴觸',
'特别致' => '特别致',
'特制住' => '特制住',
'特制定' => '特制定',
'特制止' => '特制止',
'特制订' => '特制訂',
'特征' => '特徵',
-'特效药' => '特效藥',
'特制' => '特製',
'牵一发' => '牽一髮',
'牵系' => '牽繫',
'荦确' => '犖确',
-'狂占' => '狂佔',
'狂并潮' => '狂併潮',
'狃于' => '狃於',
'狄志杰' => '狄志杰',
@@ -7131,43 +6675,25 @@ $zh2Hant = array(
'犹如钟' => '猶如鐘',
'犹如钟表' => '猶如鐘錶',
'呆串了皮' => '獃串了皮',
-'呆事' => '獃事',
-'呆人' => '獃人',
-'呆子' => '獃子',
-'呆性' => '獃性',
-'呆想' => '獃想',
-'呆憨呆' => '獃憨獃',
-'呆根' => '獃根',
-'呆气' => '獃氣',
-'呆滞' => '獃滯',
-'呆呆' => '獃獃',
-'呆痴' => '獃痴',
-'呆磕' => '獃磕',
-'呆等' => '獃等',
-'呆脑' => '獃腦',
-'呆着' => '獃著',
-'呆话' => '獃話',
-'呆头' => '獃頭',
'狱里' => '獄裡',
'奖杯' => '獎盃',
-'独占' => '獨佔',
-'独占鳌头' => '獨佔鰲頭',
+'独裁制' => '獨裁制',
'独辟蹊径' => '獨闢蹊徑',
'获匪其丑' => '獲匪其醜',
'兽欲' => '獸慾',
'献丑' => '獻醜',
-'率团参加' => '率團參加',
'玉历' => '玉曆',
'玉历史' => '玉歷史',
+'玉米面' => '玉米面',
'王侯后' => '王侯后',
'王后' => '王后',
'王田里' => '王田里',
-'王庄' => '王莊',
+'王鉴' => '王鑑',
'王余鱼' => '王餘魚',
'珍肴异馔' => '珍肴異饌',
'班里' => '班裡',
'现于' => '現於',
-'球杆' => '球杆',
+'球台' => '球檯',
'理一个发' => '理一個髮',
'理一次发' => '理一次髮',
'理个发' => '理個髮',
@@ -7175,6 +6701,7 @@ $zh2Hant = array(
'理次发' => '理次髮',
'理发' => '理髮',
'琴钟' => '琴鐘',
+'瑞城里' => '瑞城里',
'瑞征' => '瑞徵',
'瑶签' => '瑤籤',
'环游' => '環遊',
@@ -7182,13 +6709,11 @@ $zh2Hant = array(
'甄后' => '甄后',
'瓮安' => '甕安',
'甚于' => '甚於',
-'甚么' => '甚麼',
'甜水面' => '甜水麵',
'甜面酱' => '甜麵醬',
'生力面' => '生力麵',
'生于' => '生於',
'生殖洄游' => '生殖洄游',
-'生物学家' => '生物學家',
'生物钟' => '生物鐘',
'生发生' => '生發生',
'生华发' => '生華髮',
@@ -7196,29 +6721,29 @@ $zh2Hant = array(
'生锈' => '生鏽',
'生发' => '生髮',
'产卵洄游' => '產卵洄游',
-'用药' => '用藥',
+'苏醒' => '甦醒',
+'用法里' => '用法裡',
'甩发' => '甩髮',
+'田子里' => '田子里',
'田庄英雄' => '田庄英雄',
'田谷' => '田穀',
-'田庄' => '田莊',
'田里' => '田裡',
'由余' => '由余',
'由于' => '由於',
-'由表及里' => '由表及裡',
+'甲胄' => '甲冑',
'甲后路' => '甲后路',
-'男佣人' => '男佣人',
+'电影后' => '电影後',
'男仆' => '男僕',
-'男用表' => '男用錶',
+'界里' => '界裡',
'畏于' => '畏於',
'留发' => '留髮',
'毕于' => '畢於',
'毕业于' => '畢業於',
'毕生发展' => '畢生發展',
-'画着' => '畫著',
-'当家才知柴米价' => '當家纔知柴米價',
'当准' => '當準',
'当当丁丁' => '當當丁丁',
-'当着' => '當著',
+'当当网' => '當當網',
+'叠席' => '疊蓆',
'疏松' => '疏鬆',
'疑系' => '疑係',
'疑凶' => '疑兇',
@@ -7227,29 +6752,25 @@ $zh2Hant = array(
'病征' => '病徵',
'病愈' => '病癒',
'病余' => '病餘',
-'症候群' => '症候群',
'痊愈' => '痊癒',
'痒疹' => '痒疹',
'痒痒' => '痒痒',
-'痕迹' => '痕迹',
+'痳木' => '痳木',
+'痳疹' => '痳疹',
+'痳病' => '痳病',
+'痳痹' => '痳痺',
+'痳疯' => '痳瘋',
'愈合' => '癒合',
-'症候' => '癥候',
-'症状' => '癥狀',
'症结' => '癥結',
'癸丑' => '癸丑',
'发干' => '發乾',
-'发汗药' => '發汗藥',
'发呆' => '發獃',
'发蒙' => '發矇',
'发签' => '發籤',
-'发庄' => '發莊',
-'发着' => '發著',
-'发表' => '發表',
-'發表' => '發表',
'发松' => '發鬆',
'发面' => '發麵',
'白干' => '白乾',
-'白兔𢭏药' => '白兔擣藥',
+'白子里' => '白子里',
'白干儿' => '白干兒',
'白术' => '白朮',
'白朴' => '白樸',
@@ -7258,6 +6779,7 @@ $zh2Hant = array(
'白皮松' => '白皮松',
'白粉面' => '白粉麵',
'白里透红' => '白裡透紅',
+'白面包青天' => '白面包青天',
'白发' => '白髮',
'白胡' => '白鬍',
'白霉' => '白黴',
@@ -7266,10 +6788,9 @@ $zh2Hant = array(
'百只夠' => '百只夠',
'百只够' => '百只夠',
'百只怕' => '百只怕',
-'百只足够' => '百只足夠',
'百只足夠' => '百只足夠',
+'百只足够' => '百只足夠',
'百周后' => '百周後',
-'百多只' => '百多隻',
'百天后' => '百天後',
'百年' => '百年',
'百拙千丑' => '百拙千醜',
@@ -7278,14 +6799,15 @@ $zh2Hant = array(
'百扎' => '百紮',
'百花历' => '百花曆',
'百花历史' => '百花歷史',
-'百药之长' => '百藥之長',
'百炼' => '百鍊',
'百只' => '百隻',
'百余' => '百餘',
-'的克制' => '的剋制',
+'的回复' => '的回覆',
+'的图里' => '的圖裡',
+'的山里' => '的山裡',
'的钟' => '的鐘',
-'的钟表' => '的鐘錶',
'的长发' => '的長髮',
+'的发小' => '的髮小',
'皆可作淀' => '皆可作澱',
'皆准' => '皆準',
'皇后' => '皇后',
@@ -7293,9 +6815,9 @@ $zh2Hant = array(
'皇极历' => '皇極曆',
'皇极历史' => '皇極歷史',
'皇历史' => '皇歷史',
-'皇庄' => '皇莊',
'皓发' => '皓髮',
'皮制服' => '皮制服',
+'皮托管' => '皮托管',
'皮肤' => '皮膚',
'皮里春秋' => '皮裡春秋',
'皮里阳秋' => '皮裡陽秋',
@@ -7310,13 +6832,12 @@ $zh2Hant = array(
'盛赞' => '盛讚',
'盗采' => '盜採',
'盗钟' => '盜鐘',
-'尽量克制' => '盡量剋制',
'监制' => '監製',
'盘里' => '盤裡',
'盘回' => '盤迴',
'卢棱伽' => '盧稜伽',
+'荡气回肠' => '盪氣迴腸',
'盲干' => '盲幹',
-'直接参与' => '直接參与',
'直于' => '直於',
'直冲' => '直衝',
'相并' => '相併',
@@ -7329,10 +6850,8 @@ $zh2Hant = array(
'相斗' => '相鬥',
'看下表' => '看下錶',
'看下钟' => '看下鐘',
+'看法里' => '看法裡',
'看准' => '看準',
-'看着表' => '看著錶',
-'看着钟' => '看著鐘',
-'看着钟表' => '看著鐘錶',
'看表面' => '看表面',
'看表' => '看錶',
'看钟' => '看鐘',
@@ -7342,19 +6861,16 @@ $zh2Hant = array(
'眼帘' => '眼帘',
'眼眶里' => '眼眶裡',
'眼睛里' => '眼睛裡',
-'眼药' => '眼藥',
'眼里' => '眼裡',
'困乏' => '睏乏',
+'困了' => '睏了',
'困倦' => '睏倦',
'困觉' => '睏覺',
-'睡着了' => '睡著了',
'睡游病' => '睡遊病',
'瞄准' => '瞄準',
'瞅下表' => '瞅下錶',
'瞅下钟' => '瞅下鐘',
-'瞧着表' => '瞧著錶',
-'瞧着钟' => '瞧著鐘',
-'瞧着钟表' => '瞧著鐘錶',
+'瞎蒙' => '瞎矇',
'了望' => '瞭望',
'了然' => '瞭然',
'了若指掌' => '瞭若指掌',
@@ -7365,28 +6881,24 @@ $zh2Hant = array(
'蒙瞍' => '矇瞍',
'蒙眬' => '矇矓',
'蒙聩' => '矇聵',
-'蒙着' => '矇著',
-'蒙着锅儿' => '矇著鍋兒',
'蒙头转' => '矇頭轉',
'蒙骗' => '矇騙',
'瞩托' => '矚託',
-'矜庄' => '矜莊',
+'矜夸' => '矜誇',
'短几' => '短几',
'短于' => '短於',
'短发' => '短髮',
'矮几' => '矮几',
'石几' => '石几',
-'石家庄' => '石家莊',
+'石杠' => '石杠',
'石梁' => '石樑',
-'石英表' => '石英錶',
'石英钟' => '石英鐘',
'石英钟表' => '石英鐘錶',
-'石莼' => '石蓴',
-'石钟乳' => '石鐘乳',
-'石碱' => '石鹼',
-'矽谷' => '矽谷',
+'石钟' => '石鐘',
+'石钟山' => '石鐘山',
'研制' => '研製',
'砰当' => '砰噹',
+'破鉴' => '破鑑',
'朱唇皓齿' => '硃唇皓齒',
'朱批' => '硃批',
'朱砂' => '硃砂',
@@ -7394,18 +6906,18 @@ $zh2Hant = array(
'朱红色' => '硃紅色',
'朱色' => '硃色',
'朱谕' => '硃諭',
-'硫化碱' => '硫化鹼',
'硬干' => '硬幹',
'确瘠' => '确瘠',
'碑志' => '碑誌',
'碰钟' => '碰鐘',
+'确系' => '確係',
'码表' => '碼錶',
'磁制' => '磁製',
+'磨蝎' => '磨蝎',
'磨制' => '磨製',
'磨炼' => '磨鍊',
'磬钟' => '磬鐘',
'硗确' => '磽确',
-'碍难照准' => '礙難照准',
'砻谷机' => '礱穀機',
'示范' => '示範',
'社里' => '社裡',
@@ -7415,44 +6927,44 @@ $zh2Hant = array(
'神游' => '神遊',
'神雕像' => '神雕像',
'神雕' => '神鵰',
-'票庄' => '票莊',
'祭吊' => '祭弔',
-'祭吊文' => '祭弔文',
'禁欲' => '禁慾',
'禁欲主义' => '禁欲主義',
-'禁药' => '禁藥',
'祸于' => '禍於',
'御侮' => '禦侮',
'御寇' => '禦寇',
'御寒' => '禦寒',
'御敌' => '禦敵',
'礼赞' => '禮讚',
-'禹余粮' => '禹餘糧',
'禾谷' => '禾穀',
'秃妃之发' => '禿妃之髮',
'秃发' => '禿髮',
+'秀发动' => '秀發動',
+'秀发展' => '秀發展',
+'秀发布' => '秀發布',
+'秀发村' => '秀發村',
+'秀发现' => '秀發現',
+'秀发生' => '秀發生',
+'秀发表' => '秀發表',
+'秀发起' => '秀發起',
'秀发' => '秀髮',
'私下里' => '私下裡',
'私欲' => '私慾',
'私斗' => '私鬥',
-'秋假里' => '秋假裡',
-'秋天里' => '秋天裡',
-'秋日里' => '秋日裡',
-'秋裤' => '秋褲',
'秋游' => '秋遊',
'秋阴入井干' => '秋陰入井幹',
'秋发' => '秋髮',
+'种丹妮' => '种丹妮',
'种师中' => '种師中',
'种师道' => '种師道',
'种放' => '种放',
-'科学家' => '科學家',
+'科尼亚克期' => '科尼亞克期',
'科斗' => '科斗',
'科范' => '科範',
'秒表明' => '秒表明',
'秒表示' => '秒表示',
-'秒表' => '秒錶',
'秒钟' => '秒鐘',
-'秦庄襄王' => '秦莊襄王',
+'秤杆' => '秤桿',
'移祸于' => '移禍於',
'稀松' => '稀鬆',
'棱台' => '稜台',
@@ -7485,6 +6997,7 @@ $zh2Hant = array(
'谷物' => '穀物',
'谷皮' => '穀皮',
'谷神' => '穀神',
+'谷禄' => '穀祿',
'谷谷' => '穀穀',
'谷米' => '穀米',
'谷粒' => '穀粒',
@@ -7499,15 +7012,12 @@ $zh2Hant = array(
'谷食' => '穀食',
'穆罕默德历' => '穆罕默德曆',
'穆罕默德历史' => '穆罕默德歷史',
-'积极参与' => '積极參与',
-'积极参加' => '積极參加',
'积淀' => '積澱',
'积谷' => '積穀',
+'积谷防饥' => '積穀防饑',
'积郁' => '積鬱',
-'稳占' => '穩佔',
+'稳健的台风' => '穩健的台風',
'稳扎' => '穩紮',
-'空中布雷' => '空中佈雷',
-'空投布雷' => '空投佈雷',
'空蒙' => '空濛',
'空荡' => '空蕩',
'空荡荡' => '空蕩蕩',
@@ -7515,39 +7025,52 @@ $zh2Hant = array(
'空钟' => '空鐘',
'空余' => '空餘',
'窒欲' => '窒慾',
-'窗台上' => '窗台上',
-'窗帘' => '窗帘',
'窗明几亮' => '窗明几亮',
'窗明几净' => '窗明几淨',
-'窗台' => '窗檯',
+'窗帘' => '窗簾',
'窝里' => '窩裡',
'穷于' => '窮於',
'穷追不舍' => '窮追不捨',
'穷发' => '窮髮',
'窃钟掩耳' => '竊鐘掩耳',
-'立后综' => '立后綜',
'立于' => '立於',
'立范' => '立範',
'站干岸儿' => '站乾岸兒',
'童仆' => '童僕',
-'端庄' => '端莊',
'竞斗' => '競鬥',
'竹几' => '竹几',
'竹林之游' => '竹林之遊',
'竹签' => '竹籤',
+'竹席' => '竹蓆',
'竹制' => '竹製',
'笑里藏刀' => '笑裡藏刀',
-'笨笨呆呆' => '笨笨呆呆',
+'第一出现' => '第一出現',
+'第一出現' => '第一出現',
+'第一出線' => '第一出線',
+'第一出线' => '第一出線',
+'第一出' => '第一齣',
+'第七出' => '第七齣',
+'第三出局' => '第三出局',
+'第三出' => '第三齣',
+'第九出' => '第九齣',
+'第二出线' => '第二出線',
+'第二出線' => '第二出線',
+'第二出' => '第二齣',
+'第五出局' => '第五出局',
+'第五出' => '第五齣',
+'第八出' => '第八齣',
+'第六出' => '第六齣',
'第四出局' => '第四出局',
+'第四出' => '第四齣',
+'笔杆' => '筆桿',
'笔秃墨干' => '筆禿墨乾',
-'笔试' => '筆試',
'等于' => '等於',
'笋干' => '筍乾',
'筑前' => '筑前',
'筑北' => '筑北',
'筑州' => '筑州',
-'筑後' => '筑後',
'筑后' => '筑後',
+'筑後' => '筑後',
'筑波' => '筑波',
'筑紫' => '筑紫',
'筑肥' => '筑肥',
@@ -7556,7 +7079,6 @@ $zh2Hant = array(
'筑陽' => '筑陽',
'筑阳' => '筑陽',
'答复' => '答覆',
-'答覆' => '答覆',
'筵几' => '筵几',
'个中原因' => '箇中原因',
'个中奥妙' => '箇中奧妙',
@@ -7575,11 +7097,11 @@ $zh2Hant = array(
'算历史' => '算歷史',
'算准' => '算準',
'算发' => '算髮',
-'管人吊脚儿事' => '管人弔腳兒事',
'管制法' => '管制法',
'管干' => '管幹',
'箱里' => '箱裡',
'节欲' => '節慾',
+'节目里' => '節目裡',
'节余' => '節餘',
'范例' => '範例',
'范围' => '範圍',
@@ -7593,10 +7115,9 @@ $zh2Hant = array(
'范金' => '範金',
'简并' => '簡併',
'简朴' => '簡樸',
-'简筑翎' => '簡筑翎',
'簡筑翎' => '簡筑翎',
+'简筑翎' => '簡筑翎',
'簸荡' => '簸蕩',
-'签着' => '簽著',
'签幐' => '籤幐',
'签押' => '籤押',
'签条' => '籤條',
@@ -7604,8 +7125,10 @@ $zh2Hant = array(
'吁天' => '籲天',
'吁求' => '籲求',
'吁请' => '籲請',
+'米沈' => '米瀋',
'米谷' => '米穀',
-'粉拳绣腿' => '粉拳繡腿',
+'米团' => '米糰',
+'米面' => '米麵',
'粉签子' => '粉籤子',
'粗制' => '粗製',
'精制伏' => '精制伏',
@@ -7624,29 +7147,25 @@ $zh2Hant = array(
'粪秽蔑面' => '糞穢衊面',
'团子' => '糰子',
'系列里' => '系列裡',
-'系着' => '系著',
'系里' => '系裡',
'纪历' => '紀曆',
'纪历史' => '紀歷史',
-'约占' => '約佔',
'红后假说' => '紅后假說',
'红绳系足' => '紅繩繫足',
-'红色长发' => '紅色長髮',
'红钟' => '紅鐘',
-'红霉素' => '紅霉素',
'红发' => '紅髮',
'纡回' => '紆迴',
'纡余' => '紆餘',
'纡郁' => '紆鬱',
'纳征' => '納徵',
'纯朴' => '純樸',
-'纯碱' => '純鹼',
'纸扎' => '紙紮',
+'素数里' => '素數裡',
'素朴' => '素樸',
'素发' => '素髮',
'素面' => '素麵',
-'索马里' => '索馬里',
'索馬里' => '索馬里',
+'索马里' => '索馬里',
'索面' => '索麵',
'紫姜' => '紫薑',
'扎上' => '紮上',
@@ -7674,61 +7193,39 @@ $zh2Hant = array(
'结伴同游' => '結伴同遊',
'结伙' => '結夥',
'结扎' => '結紮',
-'结彩' => '結綵',
'结余' => '結餘',
'结发' => '結髮',
-'绝对参照' => '絕對參照',
'绝于' => '絕於',
'绞干' => '絞乾',
'络腮胡' => '絡腮鬍',
'給我干脆' => '給我干脆',
'给我干脆' => '給我干脆',
'给于' => '給於',
-'丝来线去' => '絲來線去',
-'丝布' => '絲布',
'丝恩发怨' => '絲恩髮怨',
-'丝板' => '絲板',
-'丝瓜布' => '絲瓜布',
-'丝绒布' => '絲絨布',
-'丝线' => '絲線',
-'丝织厂' => '絲織廠',
-'丝虫' => '絲蟲',
'丝制' => '絲製',
'丝发' => '絲髮',
'绑扎' => '綁紮',
-'綑扎' => '綑紮',
-'经有云' => '經有云',
+'捆扎' => '綑紮',
'經有云' => '經有云',
+'经有云' => '經有云',
+'综合征' => '綜合徵',
'绿发' => '綠髮',
-'绸缎庄' => '綢緞莊',
'维系' => '維繫',
'绾发' => '綰髮',
+'纲鉴' => '綱鑑',
'网里' => '網裡',
'网志' => '網誌',
'网游' => '網遊',
-'彩带' => '綵帶',
-'彩排' => '綵排',
-'彩楼' => '綵樓',
-'彩牌楼' => '綵牌樓',
-'彩球' => '綵球',
-'彩绸' => '綵綢',
-'彩线' => '綵線',
-'彩船' => '綵船',
-'彩衣' => '綵衣',
'紧致' => '緊緻',
-'紧绷' => '緊繃',
-'紧绷绷' => '緊繃繃',
-'紧绷着' => '緊繃著',
'紧追不舍' => '緊追不捨',
'绪余' => '緒餘',
-'緝凶' => '緝兇',
+'线图里' => '線圖裡',
'缉凶' => '緝兇',
-'编余' => '編余',
'编制法' => '編制法',
'编采' => '編採',
'编码表' => '編碼表',
-'编制' => '編製',
'编钟' => '編鐘',
+'编余' => '編餘',
'编发' => '編髮',
'缓征' => '緩徵',
'缓冲' => '緩衝',
@@ -7743,36 +7240,25 @@ $zh2Hant = array(
'纵欲' => '縱慾',
'纤夫' => '縴夫',
'纤手' => '縴手',
+'纤绳' => '縴繩',
+'总数只' => '總數只',
+'总数里' => '總數裡',
'总裁制' => '總裁制',
'繁复' => '繁複',
'繁钟' => '繁鐘',
-'绷住' => '繃住',
-'绷子' => '繃子',
-'绷带' => '繃帶',
'绷扒吊拷' => '繃扒弔拷',
-'绷紧' => '繃緊',
-'绷脸' => '繃臉',
-'绷着' => '繃著',
-'绷着脸' => '繃著臉',
-'绷着脸儿' => '繃著臉兒',
-'绷开' => '繃開',
'穗帏飘井干' => '繐幃飄井幹',
'绕梁' => '繞樑',
-'绣像' => '繡像',
-'绣口' => '繡口',
-'绣得' => '繡得',
-'绣户' => '繡戶',
-'绣房' => '繡房',
-'绣毯' => '繡毯',
-'绣球' => '繡球',
-'绣的' => '繡的',
-'绣花' => '繡花',
-'绣衣' => '繡衣',
-'绣起' => '繡起',
-'绣阁' => '繡閣',
-'绣鞋' => '繡鞋',
'绘制' => '繪製',
-'系上' => '繫上',
+'系上。' => '繫上。',
+'系上了' => '繫上了',
+'系上安全' => '繫上安全',
+'系上红' => '繫上紅',
+'系上丝' => '繫上絲',
+'系上绳' => '繫上繩',
+'系上头' => '繫上頭',
+'系上黑' => '繫上黑',
+'系上,' => '繫上,',
'系世' => '繫世',
'系到' => '繫到',
'系囚' => '繫囚',
@@ -7782,68 +7268,71 @@ $zh2Hant = array(
'系恋' => '繫戀',
'系于' => '繫於',
'系于一发' => '繫於一髮',
+'系着' => '繫着',
'系结' => '繫結',
'系紧' => '繫緊',
'系绳' => '繫繩',
'系累' => '繫纍',
+'系船' => '繫船',
'系辞' => '繫辭',
+'系鞋带' => '繫鞋帶',
'系风捕影' => '繫風捕影',
+'继承制' => '繼承制',
'累囚' => '纍囚',
'累堆' => '纍堆',
'累瓦结绳' => '纍瓦結繩',
'累绁' => '纍紲',
'累臣' => '纍臣',
'缠斗' => '纏鬥',
-'才则' => '纔則',
-'才可容颜十五余' => '纔可容顏十五餘',
-'才得两年' => '纔得兩年',
-'才此' => '纔此',
'坛子' => '罈子',
'坛坛罐罐' => '罈罈罐罐',
'坛騞' => '罈騞',
'置于' => '置於',
'置言成范' => '置言成範',
-'骂着' => '罵著',
'罢于' => '罷於',
+'罗马历' => '羅馬曆',
+'罗马历代' => '羅馬歷代',
+'罗马历史' => '羅馬歷史',
'羁系' => '羈繫',
-'美占' => '美佔',
-'美仑' => '美崙',
+'美容美发' => '美容美髮',
'美于' => '美於',
'美制' => '美製',
'美丑' => '美醜',
-'美发' => '美髮',
+'美发学' => '美髮學',
+'美发师' => '美髮師',
+'美发店' => '美髮店',
+'美发业' => '美髮業',
+'美发沙龙' => '美髮沙龍',
+'美发馆' => '美髮館',
'群丑' => '群醜',
'羡余' => '羨餘',
-'义占' => '義佔',
'义仆' => '義僕',
-'义庄' => '義莊',
+'義联' => '義联',
+'翁子里' => '翁子里',
'翕辟' => '翕闢',
'翱游' => '翱遊',
'翻涌' => '翻湧',
-'翻云覆雨' => '翻雲覆雨',
'翻松' => '翻鬆',
+'老么' => '老么',
'老干' => '老乾',
'老仆' => '老僕',
'老干部' => '老幹部',
'老蒙' => '老懞',
'老于' => '老於',
'老爷钟' => '老爺鐘',
-'老庄' => '老莊',
'老姜' => '老薑',
'老板' => '老闆',
'老面皮' => '老面皮',
'考征' => '考徵',
-'考试' => '考試',
-'而克制' => '而剋制',
'耍斗' => '耍鬥',
-'耐碱' => '耐鹼',
-'耕佣' => '耕傭',
'耕获' => '耕穫',
'耳余' => '耳餘',
'耿于' => '耿於',
'聊斋志异' => '聊齋志異',
+'圣人历' => '聖人曆',
'圣后' => '聖后',
'聘雇' => '聘僱',
+'聚药雄蕊' => '聚葯雄蕊',
'闻风后' => '聞風後',
'联系' => '聯繫',
'听于' => '聽於',
@@ -7852,6 +7341,7 @@ $zh2Hant = array(
'肉丝面' => '肉絲麵',
'肉羹面' => '肉羹麵',
'肉松' => '肉鬆',
+'肉面' => '肉麵',
'肚里' => '肚裡',
'肝脏' => '肝臟',
'肝郁' => '肝鬱',
@@ -7859,9 +7349,8 @@ $zh2Hant = array(
'肥筑方言' => '肥筑方言',
'肴馔' => '肴饌',
'肺脏' => '肺臟',
-'胃药' => '胃藥',
+'胃脏' => '胃臟',
'胃里' => '胃裡',
-'背向着' => '背向著',
'背地里' => '背地裡',
'胎发' => '胎髮',
'胜肽' => '胜肽',
@@ -7870,7 +7359,7 @@ $zh2Hant = array(
'胡子昂' => '胡子昂',
'胡朴安' => '胡樸安',
'胡里胡涂' => '胡裡胡塗',
-'能克制' => '能剋制',
+'胰脏' => '胰臟',
'能干休' => '能干休',
'能干戈' => '能干戈',
'能干扰' => '能干擾',
@@ -7885,6 +7374,7 @@ $zh2Hant = array(
'脊梁' => '脊樑',
'脱谷机' => '脫穀機',
'脱发' => '脫髮',
+'脺脏' => '脺臟',
'脾脏' => '脾臟',
'腊之以为饵' => '腊之以為餌',
'腊味' => '腊味',
@@ -7893,16 +7383,20 @@ $zh2Hant = array(
'肾脏' => '腎臟',
'腐干' => '腐乾',
'腐余' => '腐餘',
+'腑脏' => '腑臟',
'腕表' => '腕錶',
-'脑子里' => '腦子裡',
'脑干' => '腦幹',
'腰里' => '腰裡',
'脚注' => '腳註',
'脚炼' => '腳鍊',
-'膏药' => '膏藥',
-'肤发' => '膚髮',
+'肠脏' => '腸臟',
'胶卷' => '膠捲',
'膨松' => '膨鬆',
+'膵脏' => '膵臟',
+'臊子面' => '臊子麵',
+'脏器' => '臟器',
+'脏胸' => '臟胸',
+'脏腑' => '臟腑',
'臣仆' => '臣僕',
'卧游' => '臥遊',
'臧谷亡羊' => '臧穀亡羊',
@@ -7924,26 +7418,30 @@ $zh2Hant = array(
'自制的能' => '自制的能',
'自制能力' => '自制能力',
'自于' => '自於',
+'自然数里' => '自然數裡',
'自制' => '自製',
'自觉自愿' => '自覺自愿',
+'自夸' => '自誇',
+'臭气冲天' => '臭氣衝天',
'至多' => '至多',
+'至多只' => '至多只',
'至于' => '至於',
'致于' => '致於',
+'台佟' => '臺佟',
+'台静农' => '臺靜農',
'臻于' => '臻於',
'舂谷' => '舂穀',
-'与克制' => '與剋制',
-'兴致' => '興緻',
+'舉手表' => '舉手表',
'举手表' => '舉手表',
-'举手表决' => '舉手表決',
-'旧庄' => '舊庄',
+'舊庄' => '舊庄',
'旧历' => '舊曆',
'旧历史' => '舊歷史',
-'旧药' => '舊藥',
'旧游' => '舊遊',
'旧表' => '舊錶',
'旧钟' => '舊鐘',
'旧钟表' => '舊鐘錶',
'舌干唇焦' => '舌乾唇焦',
+'舍入口' => '舍入口',
'舒卷' => '舒捲',
'舞后' => '舞后',
'航海历' => '航海曆',
@@ -7954,31 +7452,25 @@ $zh2Hant = array(
'船钟' => '船鐘',
'船只' => '船隻',
'舰只' => '艦隻',
-'良药' => '良藥',
'色欲' => '色慾',
-'艷后' => '艷后',
+'色长发' => '色長髮',
'艳后' => '艷后',
+'艷后' => '艷后',
'艸木丰丰' => '艸木丰丰',
-'芍药' => '芍藥',
'芒果干' => '芒果乾',
-'花拳绣腿' => '花拳繡腿',
'花卷' => '花捲',
'花盆里' => '花盆裡',
-'花庵词选' => '花菴詞選',
-'花药' => '花藥',
+'花菴词选' => '花菴詞選',
+'花药' => '花葯',
'花钟' => '花鐘',
'花马吊嘴' => '花馬弔嘴',
'花哄' => '花鬨',
'苑里' => '苑裡',
-'苛性碱' => '苛性鹼',
'若干' => '若干',
'苦干' => '苦幹',
-'苦药' => '苦藥',
'苦里' => '苦裡',
'苦斗' => '苦鬥',
'苎麻' => '苧麻',
-'英占' => '英佔',
-'苹萦' => '苹縈',
'茂都淀' => '茂都澱',
'范文同' => '范文同',
'范文正公' => '范文正公',
@@ -7990,57 +7482,34 @@ $zh2Hant = array(
'范文藤' => '范文藤',
'范文虎' => '范文虎',
'范登堡' => '范登堡',
-'范贤惠' => '范賢惠',
'范賢惠' => '范賢惠',
+'范贤惠' => '范賢惠',
+'茅于轼' => '茅于軾',
+'茅于軾' => '茅于軾',
'茶几' => '茶几',
-'茶庄' => '茶莊',
'茶余' => '茶餘',
'茶面' => '茶麵',
'草丛里' => '草叢裡',
'草荐' => '草荐',
-'草药' => '草藥',
+'草席' => '草蓆',
'荐居' => '荐居',
'荐臻' => '荐臻',
-'荐饑' => '荐饑',
+'荐饥' => '荐饑',
'荷花淀' => '荷花澱',
-'庄上' => '莊上',
-'庄主' => '莊主',
-'庄周' => '莊周',
-'庄员' => '莊員',
-'庄严' => '莊嚴',
-'庄园' => '莊園',
-'庄士顿道' => '莊士頓道',
-'庄子' => '莊子',
-'庄客' => '莊客',
-'庄家' => '莊家',
-'庄户' => '莊戶',
-'庄房' => '莊房',
-'庄敬' => '莊敬',
-'庄田' => '莊田',
-'庄稼' => '莊稼',
-'庄舄越吟' => '莊舄越吟',
'庄里' => '莊裡',
-'庄语' => '莊語',
-'庄农' => '莊農',
-'庄重' => '莊重',
-'庄院' => '莊院',
-'庄骚' => '莊騷',
'茎干' => '莖幹',
'莜面' => '莜麵',
'莽荡' => '莽蕩',
-'菌丝体' => '菌絲體',
'菜干' => '菜乾',
+'菜坛' => '菜罈',
'菜肴' => '菜肴',
'菠棱菜' => '菠稜菜',
'菠萝干' => '菠蘿乾',
'华严钟' => '華嚴鐘',
-'华发' => '華髮',
-'菸碱' => '菸鹼',
'萬一只' => '萬一只',
'万一只' => '萬一只',
'万个' => '萬個',
'万周后' => '萬周後',
-'万多只' => '萬多隻',
'万天后' => '萬天後',
'万年' => '萬年',
'万年历' => '萬年曆',
@@ -8056,27 +7525,21 @@ $zh2Hant = array(
'落发' => '落髮',
'叶叶琴' => '葉叶琴',
'叶叶琹' => '葉叶琹',
-'着儿' => '著兒',
-'着克制' => '著剋制',
-'着书立说' => '著書立說',
-'着色软体' => '著色軟體',
-'着重指出' => '著重指出',
-'着录' => '著錄',
-'着录规则' => '著錄規則',
-'葡占' => '葡佔',
'葡萄干' => '葡萄乾',
'董氏封发' => '董氏封髮',
'葫芦里卖甚么药' => '葫蘆裡賣甚麼藥',
-'蒙汗药' => '蒙汗藥',
-'蒙庄' => '蒙莊',
'蒙雾露' => '蒙霧露',
'蒜发' => '蒜髮',
+'蒲席' => '蒲蓆',
+'蒸干' => '蒸乾',
+'蒸制' => '蒸製',
'苍术' => '蒼朮',
'苍发' => '蒼髮',
'苍郁' => '蒼鬱',
'蓄发' => '蓄髮',
'蓄胡' => '蓄鬍',
'蓄须' => '蓄鬚',
+'席子' => '蓆子',
'蓊郁' => '蓊鬱',
'蓬蓬松松' => '蓬蓬鬆鬆',
'蓬发' => '蓬髮',
@@ -8084,12 +7547,13 @@ $zh2Hant = array(
'参绥' => '蔘綏',
'葱郁' => '蔥鬱',
'荞麦面' => '蕎麥麵',
+'芸薹' => '蕓薹',
'荡来荡去' => '蕩來蕩去',
'荡女' => '蕩女',
'荡妇' => '蕩婦',
'荡寇' => '蕩寇',
'荡平' => '蕩平',
-'荡气回肠' => '蕩氣迴腸',
+'荡气' => '蕩氣',
'荡涤' => '蕩滌',
'荡漾' => '蕩漾',
'荡然' => '蕩然',
@@ -8100,6 +7564,7 @@ $zh2Hant = array(
'萧参' => '蕭蔘',
'薄幸' => '薄倖',
'薄干' => '薄幹',
+'姜啤' => '薑啤',
'姜是老的辣' => '薑是老的辣',
'姜末' => '薑末',
'姜桂' => '薑桂',
@@ -8115,110 +7580,61 @@ $zh2Hant = array(
'姜饼' => '薑餅',
'姜黄' => '薑黃',
'薙发' => '薙髮',
-'薝蔔' => '薝蔔',
+'薝卜' => '薝蔔',
+'熏心' => '薰心',
+'熏染' => '薰染',
+'熏沐' => '薰沐',
+'熏习' => '薰習',
+'熏陶' => '薰陶',
+'熏风' => '薰風',
+'熏香' => '薰香',
'苧悴' => '薴悴',
'薴烯' => '薴烯',
'苧烯' => '薴烯',
'借以' => '藉以',
'借助' => '藉助',
+'借口' => '藉口',
'借寇兵' => '藉寇兵',
'借手' => '藉手',
+'借故' => '藉故',
'借机' => '藉機',
'借此' => '藉此',
'借由' => '藉由',
'借箸代筹' => '藉箸代籌',
-'借着' => '藉著',
+'借词' => '藉詞',
'借资' => '藉資',
'蓝淀' => '藍澱',
'藏于' => '藏於',
'藏历' => '藏曆',
'藏历史' => '藏歷史',
'藏蒙歌儿' => '藏矇歌兒',
+'藤席' => '藤蓆',
'藤制' => '藤製',
-'药丸' => '藥丸',
-'药典' => '藥典',
-'药到命除' => '藥到命除',
-'药到病除' => '藥到病除',
-'药剂' => '藥劑',
-'药力' => '藥力',
-'药包' => '藥包',
-'药名' => '藥名',
-'药味' => '藥味',
-'药品' => '藥品',
-'药商' => '藥商',
-'药单' => '藥單',
-'药婆' => '藥婆',
-'药学' => '藥學',
-'药害' => '藥害',
-'药专' => '藥專',
-'药局' => '藥局',
-'药师' => '藥師',
-'药店' => '藥店',
-'药厂' => '藥廠',
-'药引' => '藥引',
-'药性' => '藥性',
-'药房' => '藥房',
-'药效' => '藥效',
-'药方' => '藥方',
-'药材' => '藥材',
-'药棉' => '藥棉',
-'药检局' => '藥檢局',
-'药水' => '藥水',
-'药油' => '藥油',
-'药液' => '藥液',
-'药渣' => '藥渣',
-'药片' => '藥片',
-'药物' => '藥物',
-'药王' => '藥王',
-'药理' => '藥理',
-'药瓶' => '藥瓶',
-'药用' => '藥用',
-'药皂' => '藥皂',
-'药盒' => '藥盒',
-'药石' => '藥石',
-'药科' => '藥科',
-'药箱' => '藥箱',
'药签' => '藥籤',
-'药粉' => '藥粉',
-'药糖' => '藥糖',
-'药线' => '藥線',
-'药罐' => '藥罐',
-'药膏' => '藥膏',
-'药舖' => '藥舖',
-'药茶' => '藥茶',
-'药草' => '藥草',
-'药行' => '藥行',
-'药贩' => '藥販',
-'药费' => '藥費',
-'药酒' => '藥酒',
-'药医学系' => '藥醫學系',
-'药量' => '藥量',
-'药针' => '藥針',
-'药铺' => '藥鋪',
-'药头' => '藥頭',
-'药饵' => '藥餌',
'药面儿' => '藥麵兒',
'苏昆' => '蘇崑',
-'蕴含着' => '蘊含著',
-'蕴涵着' => '蘊涵著',
+'苏崑' => '蘇崑',
+'苹果' => '蘋果',
'苹果干' => '蘋果乾',
-'萝蔔干' => '蘿蔔乾',
+'萝卜' => '蘿蔔',
+'萝卜干' => '蘿蔔乾',
'虎须' => '虎鬚',
'虎斗' => '虎鬥',
+'虚夸' => '虛誇',
'号志' => '號誌',
'虫部' => '虫部',
'蚊动牛斗' => '蚊動牛鬥',
'蛇发女妖' => '蛇髮女妖',
-'蛔虫药' => '蛔蟲藥',
'蜂后' => '蜂后',
'蜂涌' => '蜂湧',
'蜂准' => '蜂準',
'蜜里调油' => '蜜裡調油',
'蜡月' => '蜡月',
'蜡祭' => '蜡祭',
+'蝎虎' => '蝎虎',
'蝎蝎螫螫' => '蝎蝎螫螫',
'蝎谮' => '蝎譖',
-'虮蝨相吊' => '蟣蝨相弔',
+'虮虱相吊' => '蟣蝨相弔',
'蛏干' => '蟶乾',
'蚁后' => '蟻后',
'蟻后' => '蟻后',
@@ -8229,8 +7645,6 @@ $zh2Hant = array(
'行事历' => '行事曆',
'行事历史' => '行事歷史',
'行凶' => '行兇',
-'行凶前' => '行兇前',
-'行凶後' => '行兇後',
'行于' => '行於',
'行百里者半于九十' => '行百里者半於九十',
'卫后庄公' => '衛後莊公',
@@ -8253,7 +7667,7 @@ $zh2Hant = array(
'冲堂' => '衝堂',
'冲坚陷阵' => '衝堅陷陣',
'冲压' => '衝壓',
-'冲天' => '衝天',
+'冲天炮' => '衝天炮',
'冲州撞府' => '衝州撞府',
'冲心' => '衝心',
'冲掉' => '衝掉',
@@ -8267,11 +7681,11 @@ $zh2Hant = array(
'冲激' => '衝激',
'冲然' => '衝然',
'冲盹' => '衝盹',
+'冲着' => '衝着',
'冲破' => '衝破',
'冲程' => '衝程',
'冲突' => '衝突',
'冲线' => '衝線',
-'冲着' => '衝著',
'冲要' => '衝要',
'冲起' => '衝起',
'冲车' => '衝車',
@@ -8279,38 +7693,38 @@ $zh2Hant = array(
'冲过' => '衝過',
'冲量' => '衝量',
'冲锋' => '衝鋒',
+'冲锋枪' => '衝鋒鎗',
'冲陷' => '衝陷',
'冲头阵' => '衝頭陣',
'冲风' => '衝風',
-'衣绣昼行' => '衣繡晝行',
-'表征' => '表徵',
-'表里' => '表裡',
-'表面' => '表面',
+'衡鉴' => '衡鑑',
'衷于' => '衷於',
+'袋杆' => '袋桿',
'袋里' => '袋裡',
'袋表' => '袋錶',
'袖里' => '袖裡',
+'被废后' => '被廢後',
+'被系上' => '被繫上',
'被里' => '被裡',
-'被复' => '被複',
-'被覆着' => '被覆著',
+'被夸' => '被誇',
'被发佯狂' => '被髮佯狂',
'被发入山' => '被髮入山',
'被发左衽' => '被髮左衽',
'被发缨冠' => '被髮纓冠',
'被发阳狂' => '被髮陽狂',
+'夹衣' => '袷衣',
+'夹裙' => '袷裙',
'裁并' => '裁併',
'裁制' => '裁製',
'里手' => '裏手',
+'里水镇' => '裏水鎮',
'里海' => '裏海',
'补于' => '補於',
-'补药' => '補藥',
-'补血药' => '補血藥',
'补注' => '補註',
'装折' => '裝摺',
'里勾外连' => '裡勾外連',
'里屋' => '裡屋',
'里层' => '裡層',
-'里布' => '裡布',
'里带' => '裡帶',
'里弦' => '裡弦',
'里应外合' => '裡應外合',
@@ -8337,22 +7751,17 @@ $zh2Hant = array(
'制成' => '製成',
'制法' => '製法',
'制浆' => '製漿',
-'制为' => '製為',
'制片' => '製片',
'制版' => '製版',
'制程' => '製程',
'制糖' => '製糖',
'制纸' => '製紙',
'制药' => '製藥',
-'制表' => '製表',
+'制衣' => '製衣',
'制造' => '製造',
'制革' => '製革',
'制鞋' => '製鞋',
'制盐' => '製鹽',
-'复仞年如' => '複仞年如',
-'复以百万' => '複以百萬',
-'复位' => '複位',
-'复信' => '複信',
'复元音' => '複元音',
'复函数' => '複函數',
'复分数' => '複分數',
@@ -8362,11 +7771,7 @@ $zh2Hant = array(
'复利' => '複利',
'复印' => '複印',
'复句' => '複句',
-'复合' => '複合',
-'复名' => '複名',
-'复员' => '複員',
'复壁' => '複壁',
-'复壮' => '複壯',
'复姓' => '複姓',
'复字键' => '複字鍵',
'复审' => '複審',
@@ -8374,19 +7779,14 @@ $zh2Hant = array(
'复对数' => '複對數',
'复平面' => '複平面',
'复式' => '複式',
-'复复' => '複復',
'复数' => '複數',
'复本' => '複本',
'复查' => '複查',
-'复核' => '複核',
-'复检' => '複檢',
'复次' => '複次',
'复比' => '複比',
'复决' => '複決',
'复流' => '複流',
'复测' => '複測',
-'复亩珍' => '複畝珍',
-'复发' => '複發',
'复目' => '複目',
'复眼' => '複眼',
'复种' => '複種',
@@ -8409,38 +7809,24 @@ $zh2Hant = array(
'复钱' => '複錢',
'复阅' => '複閱',
'复杂' => '複雜',
-'复电' => '複電',
'复音' => '複音',
'复韵' => '複韻',
'褒赞' => '褒讚',
'衬里' => '襯裡',
-'西占' => '西佔',
'西周钟' => '西周鐘',
+'西昆' => '西崑',
'西岳' => '西嶽',
-'西晒' => '西晒',
'西历' => '西曆',
'西历史' => '西歷史',
+'西湖里' => '西湖里',
'西米谷' => '西米谷',
-'西药' => '西藥',
'西西里' => '西西里',
'西谷米' => '西谷米',
'西游' => '西遊',
-'要占' => '要佔',
-'要克制' => '要剋制',
-'要占卜' => '要占卜',
'要自制' => '要自制',
'要冲' => '要衝',
-'要么' => '要麼',
-'覆亡' => '覆亡',
-'覆命' => '覆命',
-'覆巢之下无完卵' => '覆巢之下無完卵',
-'覆水难收' => '覆水難收',
-'覆没' => '覆沒',
-'覆着' => '覆著',
-'覆盖' => '覆蓋',
-'覆盖着' => '覆蓋著',
-'覆辙' => '覆轍',
-'覆雨翻云' => '覆雨翻雲',
+'复信' => '覆信',
+'复核' => '覆核',
'见于' => '見於',
'见棱见角' => '見稜見角',
'见素抱朴' => '見素抱樸',
@@ -8449,12 +7835,11 @@ $zh2Hant = array(
'視如寇仇' => '視如寇讎',
'视于' => '視於',
'观采' => '觀採',
+'角抵' => '角牴',
'角落发' => '角落發',
'角落里' => '角落裡',
'觚棱' => '觚稜',
'解雇' => '解僱',
-'解痛药' => '解痛藥',
-'解药' => '解藥',
'解铃仍须系铃人' => '解鈴仍須繫鈴人',
'解铃还须系铃人' => '解鈴還須繫鈴人',
'解发佯狂' => '解髮佯狂',
@@ -8470,7 +7855,7 @@ $zh2Hant = array(
'托交' => '託交',
'托人' => '託人',
'托付' => '託付',
-'托儿所' => '託兒所',
+'托儿' => '託兒',
'托古讽今' => '託古諷今',
'托名' => '託名',
'托命' => '託命',
@@ -8494,7 +7879,6 @@ $zh2Hant = array(
'托附' => '託附',
'许愿起经' => '許愿起經',
'许虬' => '許虬',
-'诉说着' => '訴說著',
'注上' => '註上',
'注册' => '註冊',
'注失' => '註失',
@@ -8509,17 +7893,18 @@ $zh2Hant = array(
'注译' => '註譯',
'注销' => '註銷',
'注:' => '註:',
+'证谏' => '証諫',
'评断发' => '評斷發',
'评注' => '評註',
+'评鉴' => '評鑑',
'词干' => '詞幹',
'词汇' => '詞彙',
'词余' => '詞餘',
'询于' => '詢於',
'询于刍荛' => '詢於芻蕘',
-'试药' => '試藥',
'试制' => '試製',
-'诗云' => '詩云',
'詩云' => '詩云',
+'诗云' => '詩云',
'诗赞' => '詩讚',
'诗钟' => '詩鐘',
'诗余' => '詩餘',
@@ -8528,9 +7913,44 @@ $zh2Hant = array(
'详征博引' => '詳徵博引',
'详注' => '詳註',
'诔赞' => '誄讚',
+'夸下海口' => '誇下海口',
+'夸了' => '誇了',
+'夸他' => '誇他',
+'夸你' => '誇你',
+'夸来夸去' => '誇來誇去',
+'夸别' => '誇別',
+'夸功' => '誇功',
+'夸胜道强' => '誇勝道強',
+'夸口' => '誇口',
+'夸嘴' => '誇嘴',
'夸多斗靡' => '誇多鬥靡',
+'夸大' => '誇大',
+'夸她' => '誇她',
+'夸官' => '誇官',
+'夸张' => '誇張',
+'夸强说会' => '誇強說會',
+'夸得' => '誇得',
+'夸成' => '誇成',
+'夸我' => '誇我',
+'夸才' => '誇才',
+'夸毗' => '誇毗',
+'夸海口' => '誇海口',
+'夸奖' => '誇獎',
+'夸示' => '誇示',
+'夸称' => '誇稱',
+'夸耀' => '誇耀',
+'夸能' => '誇能',
'夸能斗智' => '誇能鬥智',
+'夸诩' => '誇詡',
+'夸夸' => '誇誇',
+'夸夸其谈' => '誇誇其談',
+'夸诞' => '誇誕',
+'夸说' => '誇說',
'夸赞' => '誇讚',
+'夸起' => '誇起',
+'夸辩' => '誇辯',
+'夸过' => '誇過',
+'夸饰' => '誇飾',
'志哀' => '誌哀',
'志喜' => '誌喜',
'志庆' => '誌慶',
@@ -8539,12 +7959,14 @@ $zh2Hant = array(
'诱奸' => '誘姦',
'语云' => '語云',
'语汇' => '語彙',
-'语有云' => '語有云',
'語有云' => '語有云',
+'语有云' => '語有云',
+'语法里' => '語法裡',
+'语里' => '語裡',
'诚征' => '誠徵',
'诚朴' => '誠樸',
'诬蔑' => '誣衊',
-'说着' => '說著',
+'说不准' => '說不準',
'谁干的' => '誰幹的',
'课征' => '課徵',
'课余' => '課餘',
@@ -8553,19 +7975,25 @@ $zh2Hant = array(
'调表' => '調錶',
'调钟表' => '調鐘錶',
'谈征' => '談徵',
-'请参阅' => '請參閱',
'请君入瓮' => '請君入甕',
-'请求' => '請求',
'请托' => '請託',
'咨询' => '諮詢',
'诸余' => '諸餘',
'谋干' => '謀幹',
-'谢绝参观' => '謝絕參觀',
'谢华后' => '謝華后',
'谬采虚声' => '謬採虛聲',
'谬赞' => '謬讚',
'謷丑' => '謷醜',
+'謹愿' => '謹愿',
+'谨愿' => '謹愿',
'谨于心' => '謹於心',
+'哗噪' => '譁噪',
+'哗嚣' => '譁囂',
+'哗然' => '譁然',
+'哗众' => '譁眾',
+'哗笑' => '譁笑',
+'哗变' => '譁變',
+'噪诈' => '譟詐',
'警世钟' => '警世鐘',
'警报钟' => '警報鐘',
'警示钟' => '警示鐘',
@@ -8574,21 +8002,15 @@ $zh2Hant = array(
'护发' => '護髮',
'变征' => '變徵',
'变丑' => '變醜',
-'变脏' => '變髒',
-'变髒' => '變髒',
-'仇問' => '讎問',
-'仇夷' => '讎夷',
-'仇校' => '讎校',
'仇正' => '讎正',
'仇隙' => '讎隙',
'赞不绝口' => '讚不絕口',
'赞佩' => '讚佩',
'赞呗' => '讚唄',
-'赞叹不已' => '讚嘆不已',
+'赞叹' => '讚嘆',
'赞扬' => '讚揚',
'赞乐' => '讚樂',
'赞歌' => '讚歌',
-'赞叹' => '讚歎',
'赞美' => '讚美',
'赞羡' => '讚羨',
'赞许' => '讚許',
@@ -8597,45 +8019,43 @@ $zh2Hant = array(
'赞赏' => '讚賞',
'赞辞' => '讚辭',
'赞颂' => '讚頌',
+'谷子敬' => '谷子敬',
'豆干' => '豆乾',
'豆腐干' => '豆腐乾',
-'竖着' => '豎著',
'竖起脊梁' => '豎起脊梁',
'丰滨' => '豐濱',
'丰滨乡' => '豐濱鄉',
+'丰台' => '豐臺',
+'豔后' => '豔后',
'象征' => '象徵',
-'象征着' => '象徵著',
-'负债累累' => '負債纍纍',
'贪欲' => '貪慾',
'贵价' => '貴价',
+'貴子里' => '貴子里',
'贵干' => '貴幹',
'贵征' => '貴徵',
-'買凶' => '買兇',
'买凶' => '買兇',
'买断发' => '買斷發',
-'费占' => '費佔',
'贻范' => '貽範',
-'资金占用' => '資金占用',
-'贾后' => '賈后',
'賈后' => '賈后',
+'贾后' => '賈后',
+'赈饥' => '賑饑',
'赏赞' => '賞讚',
-'贤后' => '賢后',
'賢后' => '賢后',
+'贤后' => '賢后',
'卖断发' => '賣斷發',
-'卖呆' => '賣獃',
+'赋范' => '賦范',
+'賦范' => '賦范',
+'质数里' => '質數裡',
'质朴' => '質樸',
'赌后' => '賭后',
'赌台' => '賭檯',
'赌斗' => '賭鬥',
-'賸余' => '賸餘',
'购并' => '購併',
'购买欲' => '購買慾',
'赢余' => '贏餘',
'赤术' => '赤朮',
'赤绳系足' => '赤繩繫足',
-'赤霉素' => '赤霉素',
'走回路' => '走回路',
-'起复' => '起複',
'起哄' => '起鬨',
'超级杯' => '超級盃',
'赶制' => '趕製',
@@ -8643,16 +8063,19 @@ $zh2Hant = array(
'赵威后' => '趙威后',
'赵惠后' => '趙惠后',
'赵治勋' => '趙治勳',
-'赵庄' => '趙莊',
'趱干' => '趲幹',
'足于' => '足於',
'跌扑' => '跌扑',
-'跌荡' => '跌蕩',
+'路图里' => '路圖裡',
'路签' => '路籤',
'路面' => '路面',
'跳梁小丑' => '跳樑小丑',
'跳荡' => '跳蕩',
-'跳表' => '跳錶',
+'局蹐' => '跼蹐',
+'局躅' => '跼躅',
+'踡局' => '踡跼',
+'逾闲' => '踰閑',
+'蹒局' => '蹣跼',
'蹪于' => '蹪於',
'蹭棱子' => '蹭稜子',
'躁郁' => '躁鬱',
@@ -8662,29 +8085,29 @@ $zh2Hant = array(
'车库里' => '車庫裡',
'车站里' => '車站裡',
'车里' => '車裡',
+'车里雅宾斯克' => '車里雅賓斯克',
'轨范' => '軌範',
-'军队克制' => '軍隊剋制',
'轩辟' => '軒闢',
'较于' => '較於',
'挽曲' => '輓曲',
'挽歌' => '輓歌',
-'挽聯' => '輓聯',
'挽联' => '輓聯',
-'挽詞' => '輓詞',
'挽词' => '輓詞',
'挽诗' => '輓詩',
-'挽詩' => '輓詩',
+'挽车' => '輓車',
+'挽输' => '輓輸',
+'挽辞' => '輓辭',
'轻于' => '輕於',
'轻轻松松' => '輕輕鬆鬆',
'轻松' => '輕鬆',
'轮奸' => '輪姦',
'轮回' => '輪迴',
'转向往' => '轉向往',
-'转台' => '轉檯',
'转托' => '轉託',
'转斗千里' => '轉鬥千里',
'辛丑' => '辛丑',
'辟谷' => '辟穀',
+'辣面' => '辣麵',
'办公台' => '辦公檯',
'辞汇' => '辭彙',
'辫发' => '辮髮',
@@ -8693,11 +8116,8 @@ $zh2Hant = array(
'农历史' => '農歷史',
'农民历' => '農民曆',
'农民历史' => '農民歷史',
-'农庄' => '農莊',
-'农药' => '農藥',
'迂回' => '迂迴',
'近日無仇' => '近日無讎',
-'近日里' => '近日裡',
'返朴' => '返樸',
'迥然回异' => '迥然迴異',
'迫于' => '迫於',
@@ -8708,12 +8128,13 @@ $zh2Hant = array(
'回形夹' => '迴形夾',
'回文' => '迴文',
'回旋' => '迴旋',
-'回流' => '迴流',
'回环' => '迴環',
'回纹针' => '迴紋針',
'回绕' => '迴繞',
'回翔' => '迴翔',
'回肠' => '迴腸',
+'回肠荡气' => '迴腸盪氣',
+'回荡' => '迴蕩',
'回诵' => '迴誦',
'回路' => '迴路',
'回转' => '迴轉',
@@ -8723,14 +8144,10 @@ $zh2Hant = array(
'回音' => '迴音',
'回响' => '迴響',
'回风' => '迴風',
-'迷幻药' => '迷幻藥',
'迷于' => '迷於',
'迷蒙' => '迷濛',
-'迷药' => '迷藥',
-'迷魂药' => '迷魂藥',
'追凶' => '追兇',
'退伙' => '退夥',
-'退烧药' => '退燒藥',
'退藏于密' => '退藏於密',
'逆钟' => '逆鐘',
'逆钟向' => '逆鐘向',
@@ -8738,41 +8155,50 @@ $zh2Hant = array(
'逋发' => '逋髮',
'逍遥游' => '逍遙遊',
'透辟' => '透闢',
+'这出世' => '這出世',
+'这出乎' => '這出乎',
+'这出人' => '這出人',
+'这出版' => '這出版',
+'这出现' => '這出現',
+'这出生' => '這出生',
+'这出色' => '這出色',
+'这出身' => '這出身',
+'这出道' => '這出道',
'这只不' => '這只不',
+'这只不过' => '這只不過',
'这只允' => '這只允',
+'这只包括' => '這只包括',
'这只可' => '這只可',
'这只在' => '這只在',
'这只容' => '這只容',
+'这只应' => '這只應',
'这只采' => '這只採',
'这只是' => '這只是',
'这只会' => '這只會',
+'这只比' => '這只比',
'这只用' => '這只用',
'这只能' => '這只能',
+'这只限' => '這只限',
'这只需' => '這只需',
+'这只须' => '這只須',
'这伙人' => '這夥人',
'这里' => '這裡',
'这钟' => '這鐘',
'这只' => '這隻',
-'这么' => '這麼',
-'这么着' => '這麼著',
+'这出' => '這齣',
'通奸' => '通姦',
'通心面' => '通心麵',
'通于' => '通於',
'通历' => '通曆',
'通历史' => '通歷史',
-'通庄' => '通莊',
-'逞凶鬥狠' => '逞兇鬥狠',
+'通鉴' => '通鑑',
'逞凶斗狠' => '逞兇鬥狠',
'造钟' => '造鐘',
-'造钟表' => '造鐘錶',
-'造曲' => '造麯',
'连三并四' => '連三併四',
-'连占' => '連佔',
'连采' => '連採',
'连系' => '連繫',
-'连庄' => '連莊',
'周游世界' => '週遊世界',
-'进占' => '進佔',
+'进两出' => '進兩出',
'進制' => '進制',
'进制' => '進制',
'逼并' => '逼併',
@@ -8783,7 +8209,7 @@ $zh2Hant = array(
'游伴' => '遊伴',
'游侠' => '遊俠',
'游冶' => '遊冶',
-'游刃有余' => '遊刃有餘',
+'游刃' => '遊刃',
'游动' => '遊動',
'游园' => '遊園',
'游子' => '遊子',
@@ -8802,16 +8228,16 @@ $zh2Hant = array(
'游历' => '遊歷',
'游民' => '遊民',
'游河' => '遊河',
+'游牧' => '遊牧',
'游猎' => '遊獵',
'游玩' => '遊玩',
-'游荡' => '遊盪',
'游目骋怀' => '遊目騁懷',
'游程' => '遊程',
'游丝' => '遊絲',
'游兴' => '遊興',
'游船' => '遊船',
'游艇' => '遊艇',
-'游荡不归' => '遊蕩不歸',
+'游荡' => '遊蕩',
'游艺' => '遊藝',
'游行' => '遊行',
'游街' => '遊街',
@@ -8821,24 +8247,20 @@ $zh2Hant = array(
'游资' => '遊資',
'游走' => '遊走',
'游踪' => '遊蹤',
+'游轮' => '遊輪',
'游逛' => '遊逛',
'游错' => '遊錯',
-'游离份子' => '遊離份子',
-'游离票' => '遊離票',
'游骑兵' => '遊騎兵',
'游魂' => '遊魂',
'过于' => '過於',
-'过杆' => '過杆',
'过水面' => '過水麵',
'道范' => '道範',
'逊于' => '遜於',
'递回' => '遞迴',
-'远县才至' => '遠縣纔至',
'远游' => '遠遊',
'遨游' => '遨遊',
'遮丑' => '遮醜',
'迁于' => '遷於',
-'选手' => '選手',
'选手表明' => '選手表明',
'选手表决' => '選手表決',
'选手表现' => '選手表現',
@@ -8846,54 +8268,56 @@ $zh2Hant = array(
'选手表达' => '選手表達',
'遗传钟' => '遺傳鐘',
'遗范' => '遺範',
-'遗迹' => '遺迹',
+'遗迹' => '遺蹟',
'辽沈' => '遼瀋',
-'避孕药' => '避孕藥',
'邀天之幸' => '邀天之倖',
-'还占' => '還佔',
'还采' => '還採',
'还冲' => '還衝',
'邋里邋遢' => '邋裡邋遢',
+'那只不过' => '那只不過',
+'那只包括' => '那只包括',
'那只可' => '那只可',
'那只在' => '那只在',
+'那只怕' => '那只怕',
+'那只应' => '那只應',
'那只是' => '那只是',
'那只会' => '那只會',
'那只有' => '那只有',
+'那只比' => '那只比',
'那只用' => '那只用',
'那只能' => '那只能',
+'那只限' => '那只限',
'那只需' => '那只需',
+'那只须' => '那只須',
'那卷' => '那捲',
'那里' => '那裡',
'那只' => '那隻',
-'那么' => '那麼',
-'那么着' => '那麼著',
'邱于庭' => '邱于庭',
'郁朴' => '郁樸',
'郁郁菲菲' => '郁郁菲菲',
'郁郁青青' => '郁郁青青',
'郊游' => '郊遊',
'郘钟' => '郘鐘',
+'部子里' => '部子里',
'部落发' => '部落發',
'郭后' => '郭后',
'都于' => '都於',
-'鄉愿' => '鄉愿',
'乡愿' => '鄉愿',
-'鄭凱云' => '鄭凱云',
+'鄉愿' => '鄉愿',
'郑凯云' => '鄭凱云',
-'郑庄公' => '鄭莊公',
+'鄭凱云' => '鄭凱云',
'配制饲料' => '配制飼料',
-'配合着' => '配合著',
+'配图里' => '配圖裡',
'配水干管' => '配水幹管',
-'配药' => '配藥',
'配制' => '配製',
'酒帘' => '酒帘',
+'酒气冲天' => '酒氣衝天',
'酒坛' => '酒罈',
'酒肴' => '酒肴',
-'酒药' => '酒藥',
-'酒醴曲蘖' => '酒醴麴櫱',
+'酒麹' => '酒麴',
'酒曲' => '酒麴',
'酥松' => '酥鬆',
-'酸碱' => '酸鹼',
+'酸姜' => '酸薑',
'醇朴' => '醇樸',
'醉于' => '醉於',
'醋坛' => '醋罈',
@@ -8907,12 +8331,13 @@ $zh2Hant = array(
'丑化' => '醜化',
'丑史' => '醜史',
'丑名' => '醜名',
-'丑咤' => '醜吒',
+'丑吒' => '醜吒',
'丑地' => '醜地',
'丑夷' => '醜夷',
'丑女' => '醜女',
'丑女效颦' => '醜女效顰',
'丑奴儿' => '醜奴兒',
+'丑婆子' => '醜婆子',
'丑妇' => '醜婦',
'丑媳' => '醜媳',
'丑媳妇' => '醜媳婦',
@@ -8948,18 +8373,18 @@ $zh2Hant = array(
'丑杂' => '醜雜',
'丑头怪脸' => '醜頭怪臉',
'丑类' => '醜類',
-'酝酿着' => '醞釀著',
-'医药' => '醫藥',
-'医院里' => '醫院裡',
'酿制' => '釀製',
'衅钟' => '釁鐘',
'采石之役' => '采石之役',
'采石之战' => '采石之戰',
'采石之戰' => '采石之戰',
-'采石磯' => '采石磯',
'采石矶' => '采石磯',
-'釉药' => '釉藥',
-'里程表' => '里程錶',
+'采石磯' => '采石磯',
+'里海大学' => '里海大學',
+'里海大學' => '里海大學',
+'里海崖' => '里海崖',
+'里海茨' => '里海茨',
+'里铺' => '里舖',
'重回' => '重回',
'重折' => '重摺',
'重于' => '重於',
@@ -8970,17 +8395,17 @@ $zh2Hant = array(
'重游' => '重遊',
'野姜' => '野薑',
'野游' => '野遊',
-'厘出' => '釐出',
-'厘升' => '釐升',
-'厘定' => '釐定',
+'量不准' => '量不準',
+'厘改' => '釐改',
+'厘整' => '釐整',
'厘正' => '釐正',
+'厘毫' => '釐毫',
'厘清' => '釐清',
'厘订' => '釐訂',
+'厘革' => '釐革',
'金仆姑' => '金僕姑',
-'金仑溪' => '金崙溪',
-'金布道' => '金布道',
+'金城里' => '金城里',
'金范' => '金範',
-'金色长发' => '金色長髮',
'金表情' => '金表情',
'金表态' => '金表態',
'金表扬' => '金表揚',
@@ -8992,12 +8417,10 @@ $zh2Hant = array(
'金表露' => '金表露',
'金表面' => '金表面',
'金装玉里' => '金裝玉裡',
-'金表' => '金錶',
+'金链' => '金鍊',
'金钟' => '金鐘',
-'金鸡纳碱' => '金雞納鹼',
-'金马仑道' => '金馬崙道',
'金发' => '金髮',
-'鈎心斗角' => '鈎心鬥角',
+'钩心斗角' => '鈎心鬥角',
'银朱' => '銀硃',
'银发' => '銀髮',
'铜范' => '銅範',
@@ -9005,37 +8428,27 @@ $zh2Hant = array(
'铜钟' => '銅鐘',
'铯钟' => '銫鐘',
'铝制' => '鋁製',
-'铺锦列绣' => '鋪錦列繡',
'钢之炼金术师' => '鋼之鍊金術師',
'钢梁' => '鋼樑',
'钢制' => '鋼製',
-'录着' => '錄著',
'录制' => '錄製',
'锤炼' => '錘鍊',
'钱谷' => '錢穀',
'钱范' => '錢範',
-'钱庄' => '錢莊',
-'锦綉花园' => '錦綉花園',
-'锦绣' => '錦繡',
+'锦卤' => '錦滷',
+'锦绣花园' => '錦綉花園',
'表停' => '錶停',
'表冠' => '錶冠',
'表带' => '錶帶',
-'表店' => '錶店',
-'表厂' => '錶廠',
'表快' => '錶快',
'表慢' => '錶慢',
'表板' => '錶板',
-'表壳' => '錶殼',
'表王' => '錶王',
-'表的嘀嗒' => '錶的嘀嗒',
-'表的历史' => '錶的歷史',
'表盘' => '錶盤',
'表蒙子' => '錶蒙子',
-'表行' => '錶行',
'表转' => '錶轉',
'表速' => '錶速',
'表针' => '錶針',
-'表链' => '錶鏈',
'炼冶' => '鍊冶',
'炼句' => '鍊句',
'炼字' => '鍊字',
@@ -9045,13 +8458,12 @@ $zh2Hant = array(
'炼气' => '鍊氣',
'炼汞' => '鍊汞',
'炼石' => '鍊石',
+'链表' => '鍊表',
'炼贫' => '鍊貧',
'炼金术' => '鍊金術',
-'炼钢' => '鍊鋼',
-'锅庄' => '鍋莊',
-'锻炼出' => '鍛鍊出',
'锲而不舍' => '鍥而不捨',
'镰仓' => '鎌倉',
+'镜图里' => '鏡圖裡',
'锈病' => '鏽病',
'锈菌' => '鏽菌',
'锈蚀' => '鏽蝕',
@@ -9080,7 +8492,6 @@ $zh2Hant = array(
'钟形虫' => '鐘形蟲',
'钟律' => '鐘律',
'钟快' => '鐘快',
-'钟意' => '鐘意',
'钟慢' => '鐘慢',
'钟摆' => '鐘擺',
'钟敲' => '鐘敲',
@@ -9111,12 +8522,8 @@ $zh2Hant = array(
'钟表停' => '鐘錶停',
'钟表快' => '鐘錶快',
'钟表慢' => '鐘錶慢',
-'钟表历史' => '鐘錶歷史',
'钟表王' => '鐘錶王',
-'钟表的' => '鐘錶的',
-'钟表的历史' => '鐘錶的歷史',
'钟表盘' => '鐘錶盤',
-'钟表行' => '鐘錶行',
'钟表速' => '鐘錶速',
'钟关' => '鐘關',
'钟陈列' => '鐘陳列',
@@ -9129,41 +8536,55 @@ $zh2Hant = array(
'钟点' => '鐘點',
'钟鼎' => '鐘鼎',
'钟鼓' => '鐘鼓',
-'铁杆' => '鐵杆',
-'铁栏杆' => '鐵欄杆',
'铁锈' => '鐵鏽',
'铁钟' => '鐵鐘',
'铸钟' => '鑄鐘',
+'鉴别' => '鑑別',
+'鉴古' => '鑑古',
+'鉴定' => '鑑定',
+'鉴察' => '鑑察',
+'鉴往知来' => '鑑往知來',
+'鉴戒' => '鑑戒',
+'鉴湖' => '鑑湖',
+'鉴藏' => '鑑藏',
+'鉴谅' => '鑑諒',
+'鉴证' => '鑑證',
+'鉴识' => '鑑識',
+'鉴赏' => '鑑賞',
'鉴于' => '鑒於',
'长几' => '長几',
'长于' => '長於',
'长历' => '長曆',
'长历史' => '長歷史',
-'长生药' => '長生藥',
+'长发公主' => '長髮公主',
+'长发妹' => '長髮妹',
+'长发姑娘' => '長髮姑娘',
'长胡' => '長鬍',
'门帘' => '門帘',
'门吊儿' => '門弔兒',
'门里' => '門裡',
'闫怀礼' => '閆懷禮',
+'開山辟谷' => '開山辟谷',
+'开山辟谷' => '開山闢谷',
'开吊' => '開弔',
'开征' => '開徵',
'开采' => '開採',
'开发' => '開發',
-'开药' => '開藥',
'开辟' => '開闢',
'开哄' => '開鬨',
+'闲邪' => '閑邪',
'闲情逸致' => '閒情逸緻',
'闲荡' => '閒蕩',
'闲游' => '閒遊',
'间不容发' => '間不容髮',
+'间里' => '間裡',
'闵采尔' => '閔採爾',
-'合府' => '閤府',
+'阁府' => '閤府',
'闺范' => '閨範',
'阃范' => '閫範',
'闯荡' => '闖蕩',
'闯炼' => '闖鍊',
'关系' => '關係',
-'关系着' => '關係著',
'关弓与我确' => '關弓與我确',
'关于' => '關於',
'辟佛' => '闢佛',
@@ -9179,37 +8600,34 @@ $zh2Hant = array(
'辟谣' => '闢謠',
'辟辟' => '闢辟',
'辟邪以律' => '闢邪以律',
-'防晒' => '防晒',
'防水表' => '防水錶',
'防御' => '防禦',
'防范' => '防範',
'防锈' => '防鏽',
'防台' => '防颱',
'阻于' => '阻於',
-'阿呆瓜' => '阿呆瓜',
-'阿斯图里亚斯' => '阿斯圖里亞斯',
-'阿呆' => '阿獃',
'阿里' => '阿里',
'附于' => '附於',
'附注' => '附註',
-'降压药' => '降壓藥',
'限制' => '限制',
-'升官' => '陞官',
-'除臭药' => '除臭藥',
+'院里' => '院裡',
'陪吊' => '陪弔',
'阴干' => '陰乾',
'阴历' => '陰曆',
'阴历史' => '陰歷史',
'阴沟里翻船' => '陰溝裡翻船',
'阴郁' => '陰鬱',
-'陈冲' => '陳冲',
'陳冲' => '陳冲',
+'陳士杰' => '陳士杰',
+'陈升' => '陳昇',
+'陳有后' => '陳有后',
'陈有后' => '陳有后',
'陈炼' => '陳鍊',
'陆游' => '陸遊',
'阳春面' => '陽春麵',
'阳历' => '陽曆',
'阳历史' => '陽歷史',
+'阳谷' => '陽穀',
'隆准许' => '隆准許',
'隆准' => '隆準',
'随于' => '隨於',
@@ -9224,12 +8642,14 @@ $zh2Hant = array(
'只身' => '隻身',
'雄斗斗' => '雄斗斗',
'雅范' => '雅範',
-'雅致' => '雅緻',
+'集数里' => '集數裡',
'集于' => '集於',
+'集里' => '集裡',
'集游法' => '集遊法',
'雕梁画栋' => '雕樑畫棟',
'双折射' => '雙折射',
'双折' => '雙摺',
+'双沟大曲' => '雙溝大麯',
'双胜类' => '雙胜類',
'双雕' => '雙鵰',
'杂合面儿' => '雜合麵兒',
@@ -9246,46 +8666,37 @@ $zh2Hant = array(
'离于' => '離於',
'难舍' => '難捨',
'难于' => '難於',
+'雨蒙蒙' => '雨濛濛',
'雪窗萤几' => '雪窗螢几',
'雪里' => '雪裡',
'雪里红' => '雪裡紅',
'雪里蕻' => '雪裡蕻',
-'云南白药' => '雲南白藥',
+'云吞面' => '雲吞麵',
'云笈七签' => '雲笈七籤',
'云游' => '雲遊',
'云须' => '雲鬚',
'零个' => '零個',
'零周后' => '零周後',
-'零多只' => '零多隻',
'零天后' => '零天後',
'零年' => '零年',
'零只' => '零隻',
'零余' => '零餘',
'电子表格' => '電子表格',
-'电子表' => '電子錶',
'电子钟' => '電子鐘',
'电子钟表' => '電子鐘錶',
-'电杆' => '電杆',
'电波钟' => '電波鐘',
'电码表' => '電碼表',
-'电线杆' => '電線杆',
'电冲' => '電衝',
'电表' => '電錶',
'电钟' => '電鐘',
'震栗' => '震慄',
-'震荡' => '震蕩',
+'霉气冲天' => '霉氣衝天',
'雾里' => '霧裡',
'露丑' => '露醜',
-'霸占' => '霸佔',
'霁范' => '霽範',
-'灵药' => '靈藥',
'青山一发' => '青山一髮',
-'青苹' => '青苹',
-'青苹果' => '青蘋果',
-'青蝇吊客' => '青蠅弔客',
-'青霉素' => '青霉素',
'青霉' => '青黴',
-'非占不可' => '非佔不可',
+'非常准' => '非常準',
'面包住' => '面包住',
'面包含' => '面包含',
'面包围' => '面包圍',
@@ -9299,64 +8710,68 @@ $zh2Hant = array(
'面包管' => '面包管',
'面包扎' => '面包紮',
'面包罗' => '面包羅',
-'面包着' => '面包著',
'面包藏' => '面包藏',
'面包装' => '面包裝',
'面包裹' => '面包裹',
'面包起' => '面包起',
'面包办' => '面包辦',
-'面店舖' => '面店舖',
-'面朝着' => '面朝著',
-'面条目' => '面條目',
+'面店铺' => '面店鋪',
'面條目' => '面條目',
+'面条目' => '面條目',
'面粉碎' => '面粉碎',
'面粉红' => '面粉紅',
-'面临着' => '面臨著',
'面食饭' => '面食飯',
'面食面' => '面食麵',
'鞋里' => '鞋裡',
'鞣制' => '鞣製',
'秋千' => '鞦韆',
'鞭辟入里' => '鞭辟入裡',
-'韦庄' => '韋莊',
+'韦席' => '韋蓆',
'韩国制' => '韓國製',
'韩制' => '韓製',
+'音不准' => '音不準',
'音准' => '音準',
'音声如钟' => '音聲如鐘',
'韶山冲' => '韶山沖',
'响钟' => '響鐘',
'頁面' => '頁面',
'页面' => '頁面',
-'頂多' => '頂多',
+'顶凶' => '頂兇',
'顶多' => '頂多',
-'项庄' => '項莊',
+'頂多' => '頂多',
+'项链' => '項鍊',
'顺于' => '順於',
'顺钟向' => '順鐘向',
'顺风后' => '順風後',
'须根据' => '須根據',
'颂系' => '頌繫',
'颂赞' => '頌讚',
+'预报不准' => '預報不準',
'预制' => '預製',
-'领域里' => '領域裡',
'领袖欲' => '領袖慾',
-'头巾吊在水里' => '頭巾弔在水裡',
+'头儿干' => '頭兒幹',
'头里' => '頭裡',
+'头长发' => '頭長髮',
'头发' => '頭髮',
'颊须' => '頰鬚',
-'题签' => '題籤',
'额征' => '額徵',
'额我略历' => '額我略曆',
'额我略历史' => '額我略歷史',
'颜范' => '顏範',
'颠干倒坤' => '顛乾倒坤',
-'颠覆' => '顛覆',
-'颠颠仆仆' => '顛顛仆仆',
'顛顛仆仆' => '顛顛仆仆',
+'颠颠仆仆' => '顛顛仆仆',
'颤栗' => '顫慄',
+'显示表明' => '顯示表明',
+'显示表格' => '顯示表格',
+'显示表现' => '顯示表現',
+'显示表示' => '顯示表示',
+'显示表达' => '顯示表達',
+'显示表面' => '顯示表面',
+'显示表头' => '顯示表頭',
'显示表' => '顯示錶',
'显示钟' => '顯示鐘',
'显示钟表' => '顯示鐘錶',
-'显著标志' => '顯著標志',
'风干' => '風乾',
'风后' => '風后',
'风土志' => '風土誌',
@@ -9366,8 +8781,8 @@ $zh2Hant = array(
'风范' => '風範',
'风里' => '風裡',
'风起云涌' => '風起雲湧',
-'风采' => '風采',
'風采' => '風采',
+'风采' => '風采',
'台风' => '颱風',
'台风后' => '颱風後',
'刮了' => '颳了',
@@ -9387,13 +8802,12 @@ $zh2Hant = array(
'飞行钟' => '飛行鐘',
'食欲' => '食慾',
'食欲不振' => '食欲不振',
-'食野之苹' => '食野之苹',
'食面' => '食麵',
'饭后钟' => '飯後鐘',
'饭团' => '飯糰',
-'饭庄' => '飯莊',
-'饲喂' => '飼餵',
'饼干' => '餅乾',
+'养脏' => '養臟',
+'餐台' => '餐檯',
'馂余' => '餕餘',
'余0' => '餘0',
'余1' => '餘1',
@@ -9440,6 +8854,8 @@ $zh2Hant = array(
'余子' => '餘子',
'余存' => '餘存',
'余孽' => '餘孽',
+'余年' => '餘年',
+'余式' => '餘式',
'余弦' => '餘弦',
'余思' => '餘思',
'余悸' => '餘悸',
@@ -9461,7 +8877,6 @@ $zh2Hant = array(
'余毒' => '餘毒',
'余气' => '餘氣',
'余波' => '餘波',
-'余波荡漾' => '餘波盪漾',
'余温' => '餘溫',
'余泽' => '餘澤',
'余沥' => '餘瀝',
@@ -9470,6 +8885,7 @@ $zh2Hant = array(
'余烬' => '餘燼',
'余珍' => '餘珍',
'余生' => '餘生',
+'余留' => '餘留',
'余众' => '餘眾',
'余窍' => '餘竅',
'余粮' => '餘糧',
@@ -9489,6 +8905,7 @@ $zh2Hant = array(
'余貾' => '餘貾',
'余辉' => '餘輝',
'余辜' => '餘辜',
+'余部' => '餘部',
'余酲' => '餘酲',
'余量' => '餘量',
'余闰' => '餘閏',
@@ -9497,82 +8914,48 @@ $zh2Hant = array(
'余震' => '餘震',
'余霞' => '餘霞',
'余音' => '餘音',
-'余音绕梁' => '餘音繞梁',
'余韵' => '餘韻',
'余响' => '餘響',
+'余项' => '餘項',
'余额' => '餘額',
'余风' => '餘風',
'余食' => '餘食',
'余党' => '餘黨',
-'余0' => '餘0',
-'余1' => '餘1',
-'余2' => '餘2',
-'余3' => '餘3',
-'余4' => '餘4',
-'余5' => '餘5',
-'余6' => '餘6',
-'余7' => '餘7',
-'余8' => '餘8',
-'余9' => '餘9',
'馄饨面' => '餛飩麵',
'馆谷' => '館穀',
'馆里' => '館裡',
-'喂乳' => '餵乳',
-'喂了' => '餵了',
-'喂奶' => '餵奶',
-'喂给' => '餵給',
-'喂羊' => '餵羊',
-'喂猪' => '餵豬',
-'喂过' => '餵過',
-'喂鸡' => '餵雞',
-'喂食' => '餵食',
-'喂饱' => '餵飽',
-'喂养' => '餵養',
-'喂驴' => '餵驢',
-'喂鱼' => '餵魚',
-'喂鸭' => '餵鴨',
-'喂鹅' => '餵鵝',
-'饑荒' => '饑荒',
-'饑馑' => '饑饉',
+'餵驴' => '餵驢',
+'饥寒' => '饑寒',
+'饥民' => '饑民',
+'饥渴' => '饑渴',
+'饥溺' => '饑溺',
+'饥荒' => '饑荒',
+'饥饱' => '饑飽',
+'饥馑' => '饑饉',
'首当其冲' => '首當其衝',
'首发' => '首發',
'首只' => '首隻',
+'首出电影' => '首齣電影',
'香干' => '香乾',
'香山庄' => '香山庄',
'马干' => '馬乾',
-'马占山' => '馬占山',
'馬占山' => '馬占山',
-'马杆' => '馬杆',
+'马斯垂克期' => '馬斯垂克期',
'馬格里布' => '馬格里布',
'马格里布' => '馬格里布',
-'马表' => '馬錶',
'驻扎' => '駐紮',
'骀荡' => '駘蕩',
-'腾格里' => '騰格里',
'騰格里' => '騰格里',
+'腾格里' => '騰格里',
+'腾涌' => '騰湧',
'腾冲' => '騰衝',
+'惊栗' => '驚慄',
'惊赞' => '驚讚',
'惊钟' => '驚鐘',
-'骨子里' => '骨子裡',
'骨干' => '骨幹',
'骨灰坛' => '骨灰罈',
'骨坛' => '骨罈',
-'骨头里挣出来的钱才做得肉' => '骨頭裡掙出來的錢纔做得肉',
-'肮肮脏脏' => '骯骯髒髒',
-'肮脏' => '骯髒',
-'脏乱' => '髒亂',
-'脏了' => '髒了',
-'脏兮兮' => '髒兮兮',
-'脏字' => '髒字',
-'脏得' => '髒得',
-'脏心' => '髒心',
-'脏东西' => '髒東西',
-'脏水' => '髒水',
-'脏的' => '髒的',
-'脏词' => '髒詞',
-'脏话' => '髒話',
-'脏钱' => '髒錢',
-'脏发' => '髒髮',
+'体征' => '體徵',
'体范' => '體範',
'体系' => '體系',
'高几' => '高几',
@@ -9620,7 +9003,7 @@ $zh2Hant = array(
'发胶' => '髮膠',
'发菜' => '髮菜',
'发蜡' => '髮蠟',
-'发踊冲冠' => '髮踊沖冠',
+'发踊冲冠' => '髮踴沖冠',
'发辫' => '髮辮',
'发针' => '髮針',
'发钗' => '髮釵',
@@ -9640,6 +9023,7 @@ $zh2Hant = array(
'松元音' => '鬆元音',
'松劲' => '鬆勁',
'松动' => '鬆動',
+'松化' => '鬆化',
'松口' => '鬆口',
'松喉' => '鬆喉',
'松土' => '鬆土',
@@ -9683,12 +9067,12 @@ $zh2Hant = array(
'须鲨' => '鬚鯊',
'须鲸' => '鬚鯨',
'鬓发' => '鬢髮',
-'斗上' => '鬥上',
'斗不过' => '鬥不過',
'斗了' => '鬥了',
'斗来斗去' => '鬥來鬥去',
'斗倒' => '鬥倒',
'斗分子' => '鬥分子',
+'斗剑' => '鬥劍',
'斗力' => '鬥力',
'斗劲' => '鬥勁',
'斗胜' => '鬥勝',
@@ -9739,13 +9123,12 @@ $zh2Hant = array(
'斗草' => '鬥草',
'斗叶儿' => '鬥葉兒',
'斗叶子' => '鬥葉子',
-'斗着' => '鬥著',
'斗蟋蟀' => '鬥蟋蟀',
'斗话' => '鬥話',
'斗艳' => '鬥豔',
'斗起' => '鬥起',
'斗趣' => '鬥趣',
-'斗闲气' => '鬥閑氣',
+'斗闲气' => '鬥閒氣',
'斗鸡' => '鬥雞',
'斗雪红' => '鬥雪紅',
'斗头' => '鬥頭',
@@ -9757,7 +9140,6 @@ $zh2Hant = array(
'斗鸭' => '鬥鴨',
'斗鹌鹑' => '鬥鵪鶉',
'斗丽' => '鬥麗',
-'闹着玩儿' => '鬧著玩兒',
'闹表' => '鬧錶',
'闹钟' => '鬧鐘',
'哄动' => '鬨動',
@@ -9800,8 +9182,10 @@ $zh2Hant = array(
'郁郁不乐' => '鬱鬱不樂',
'郁郁寡欢' => '鬱鬱寡歡',
'郁郁而终' => '鬱鬱而終',
+'郁郁苍苍' => '鬱鬱蒼蒼',
'郁郁葱葱' => '鬱鬱蔥蔥',
'郁黑' => '鬱黑',
+'鬼气冲天' => '鬼氣衝天',
'鬼谷子' => '鬼谷子',
'魂牵梦系' => '魂牽夢繫',
'魏征' => '魏徵',
@@ -9809,15 +9193,13 @@ $zh2Hant = array(
'魔表' => '魔錶',
'鱼干' => '魚乾',
'鱼松' => '魚鬆',
+'鲜于枢' => '鮮于樞',
+'鮮于樞' => '鮮于樞',
'鲸须' => '鯨鬚',
-'鯰鱼' => '鯰魚',
-'鸠占鹊巢' => '鳩佔鵲巢',
-'凤凰于飞' => '鳳凰于飛',
+'鳳凰于飛' => '鳳凰于飛',
'凤梨干' => '鳳梨乾',
'鸣钟' => '鳴鐘',
-'鸿案相庄' => '鴻案相莊',
'鸿范' => '鴻範',
-'鸿篇巨制' => '鴻篇巨製',
'鹅准' => '鵝準',
'鹄发' => '鵠髮',
'雕心雁爪' => '鵰心雁爪',
@@ -9826,6 +9208,7 @@ $zh2Hant = array(
'雕鹗' => '鵰鶚',
'鹤吊' => '鶴弔',
'鹤发' => '鶴髮',
+'鸾鉴' => '鸞鑑',
'鹰雕' => '鹰鵰',
'咸味' => '鹹味',
'咸嘴淡舌' => '鹹嘴淡舌',
@@ -9840,6 +9223,7 @@ $zh2Hant = array(
'咸湖' => '鹹湖',
'咸汤' => '鹹湯',
'咸潟' => '鹹潟',
+'咸湿' => '鹹濕',
'咸的' => '鹹的',
'咸粥' => '鹹粥',
'咸肉' => '鹹肉',
@@ -9853,32 +9237,18 @@ $zh2Hant = array(
'咸鸭蛋' => '鹹鴨蛋',
'咸卤' => '鹹鹵',
'咸咸' => '鹹鹹',
-'碱化' => '鹼化',
-'碱土金属' => '鹼土金屬',
-'碱地' => '鹼地',
-'碱度' => '鹼度',
-'碱性' => '鹼性',
-'碱水' => '鹼水',
-'碱液' => '鹼液',
-'碱熔' => '鹼熔',
-'碱石灰' => '鹼石灰',
-'碱纤维素' => '鹼纖維素',
-'碱金属' => '鹼金屬',
-'碱类' => '鹼類',
'盐打怎么咸' => '鹽打怎麼鹹',
+'盐卤' => '鹽滷',
'盐余' => '鹽餘',
-'盐碱土' => '鹽鹼土',
-'盐碱滩' => '鹽鹼灘',
+'鹿場里' => '鹿場里',
'丽于' => '麗於',
'曲尘' => '麴塵',
-'曲蘖' => '麴櫱',
-'曲生' => '麴生',
+'曲櫱' => '麴櫱',
'曲秀才' => '麴秀才',
-'曲菌' => '麴菌',
'曲车' => '麴車',
'曲道士' => '麴道士',
'曲钱' => '麴錢',
-'曲院' => '麴院',
+'麹霉' => '麴黴',
'曲霉' => '麴黴',
'面人儿' => '麵人兒',
'面价' => '麵價',
@@ -9901,19 +9271,16 @@ $zh2Hant = array(
'面粉' => '麵粉',
'面糊' => '麵糊',
'面团' => '麵糰',
-'面线' => '麵線',
'面缸' => '麵缸',
'面茶' => '麵茶',
'面食' => '麵食',
'面饺' => '麵餃',
'面饼' => '麵餅',
'面馆' => '麵館',
-'麻药' => '麻藥',
-'麻醉药' => '麻醉藥',
+'麻将席' => '麻將蓆',
'麻酱面' => '麻醬麵',
'黄干黑瘦' => '黃乾黑瘦',
'黄历' => '黃曆',
-'黄曲霉' => '黃曲霉',
'黄历史' => '黃歷史',
'黃詩杰' => '黃詩杰',
'黄诗杰' => '黃詩杰',
@@ -9923,14 +9290,16 @@ $zh2Hant = array(
'黄钟' => '黃鐘',
'黄发' => '黃髮',
'黄曲毒素' => '黃麴毒素',
-'黎吉云' => '黎吉雲',
+'黎克特制' => '黎克特制',
'黎吉雲' => '黎吉雲',
+'黎吉云' => '黎吉雲',
'黑奴吁天录' => '黑奴籲天錄',
-'黑色长发' => '黑色長髮',
'黑发' => '黑髮',
+'点札' => '點劄',
'点半钟' => '點半鐘',
'点多钟' => '點多鐘',
'点里' => '點裡',
+'点里程' => '點里程',
'点钟' => '點鐘',
'霉毒' => '黴毒',
'霉素' => '黴素',
@@ -9938,119 +9307,96 @@ $zh2Hant = array(
'霉黑' => '黴黑',
'霉黧' => '黴黧',
'鼓里' => '鼓裡',
+'鼓噪' => '鼓譟',
'冬冬鼓' => '鼕鼕鼓',
-'鼠药' => '鼠藥',
'鼠曲草' => '鼠麴草',
'鼻梁儿' => '鼻梁兒',
'鼻梁' => '鼻樑',
'鼻准' => '鼻準',
'齐王舍牛' => '齊王捨牛',
-'齐庄' => '齊莊',
'齿危发秀' => '齒危髮秀',
'齿落发白' => '齒落髮白',
'齿发' => '齒髮',
'出儿' => '齣兒',
-'出剧' => '齣劇',
-'出动画' => '齣動畫',
-'出卡通' => '齣卡通',
-'出戏' => '齣戲',
-'出节目' => '齣節目',
-'出电影' => '齣電影',
-'出电视' => '齣電視',
'龙卷' => '龍捲',
'龙眼干' => '龍眼乾',
'龙须' => '龍鬚',
+'龙须面' => '龍鬚麵',
'龙斗虎伤' => '龍鬥虎傷',
-'龟山庄' => '龜山庄',
-'!克制' => '!剋制',
-',克制' => ',剋制',
-'0周后' => '0周後',
-'0多只' => '0多隻',
-'0天后' => '0天後',
-'0年' => '0年',
-'0只' => '0隻',
-'0余' => '0餘',
-'1周后' => '1周後',
-'1天后' => '1天後',
-'1年' => '1年',
-'1只' => '1隻',
-'1余' => '1餘',
-'2周后' => '2周後',
-'2天后' => '2天後',
-'2年' => '2年',
-'2只' => '2隻',
-'2余' => '2餘',
-'3周后' => '3周後',
-'3天后' => '3天後',
-'3年' => '3年',
-'3只' => '3隻',
-'3余' => '3餘',
-'4周后' => '4周後',
-'4天后' => '4天後',
-'4年' => '4年',
-'4只' => '4隻',
-'4余' => '4餘',
-'5周后' => '5周後',
-'5天后' => '5天後',
-'5年' => '5年',
-'5只' => '5隻',
-'5余' => '5餘',
-'6周后' => '6周後',
-'6天后' => '6天後',
-'6年' => '6年',
-'6只' => '6隻',
-'6余' => '6餘',
-'7周后' => '7周後',
-'7天后' => '7天後',
-'7年' => '7年',
-'7只' => '7隻',
-'7余' => '7餘',
-'8周后' => '8周後',
-'8天后' => '8天後',
-'8年' => '8年',
-'8只' => '8隻',
-'8余' => '8餘',
-'9周后' => '9周後',
-'9天后' => '9天後',
-'9年' => '9年',
-'9只' => '9隻',
-'9余' => '9餘',
-':克制' => ':剋制',
-';克制' => ';剋制',
-'?克制' => '?剋制',
+'龜山庄' => '龜山庄',
+'龟鉴' => '龜鑑',
);
$zh2Hans = array(
'㑯' => '㑔',
'㑳' => '㑇',
+'㑶' => '㐹',
+'㑺' => '俊',
'㒓' => '𠉂',
+'㒺' => '罔',
+'㓂' => '寇',
'㓨' => '刾',
+'㕁' => '却',
+'㕑' => '厨',
+'㕘' => '参',
+'㕥' => '以',
'㗲' => '𠵾',
'㘚' => '㘎',
+'㘭' => '坳',
'㜄' => '㚯',
'㜏' => '㛣',
'㜢' => '𡞱',
'㜷' => '𡝠',
+'㝛' => '宿',
+'㝠' => '冥',
'㞞' => '𪨊',
+'㠀' => '岛',
'㠏' => '㟆',
+'㠯' => '以',
+'㠶' => '帆',
+'㡌' => '帽',
+'㢘' => '廉',
'㢝' => '𢋈',
+'㤙' => '恩',
+'㥦' => '惬',
+'㥫' => '惇',
'㥮' => '㤘',
'㦎' => '𢛯',
+'㧱' => '拿',
+'㨗' => '捷',
+'㨪' => '晃',
+'㨿' => '据',
+'㩗' => '携',
'㩜' => '㨫',
+'㩦' => '携',
'㩳' => '㧐',
+'㪚' => '散',
+'㪟' => '敦',
+'㬉' => '暖',
+'㬪' => '叠',
+'㯭' => '橹',
+'㱃' => '饮',
+'㳒' => '法',
+'㴱' => '深',
'㷿' => '𤈷',
'㺏' => '𤠋',
+'㼝' => '碗',
+'㽞' => '留',
+'㿜' => '瘪',
'㿧' => '𤽯',
'䀹' => '𥅴',
'䁪' => '𥇢',
'䁻' => '䀥',
+'䈰' => '筲',
'䉙' => '𥬀',
'䉬' => '𫂈',
'䉲' => '𥮜',
+'䊀' => '糊',
'䊭' => '𥺅',
'䊷' => '䌶',
'䋙' => '䌺',
'䋚' => '䌻',
+'䋹' => '䌿',
'䋻' => '䌾',
'䋿' => '𦈓',
'䌈' => '𦈖',
@@ -10060,15 +9406,26 @@ $zh2Hans = array(
'䌟' => '𦈞',
'䌥' => '𦈠',
'䌰' => '𦈙',
+'䎱' => '䎬',
'䕳' => '𦰴',
+'䗬' => '蜂',
'䗿' => '𧉞',
+'䘏' => '恤',
+'䘑' => '脉',
+'䘚' => '卒',
'䙡' => '䙌',
+'䛐' => '词',
+'䛡' => '话',
'䜀' => '䜧',
+'䝔' => '獾',
'䝻' => '𧹕',
'䝼' => '䞍',
'䞈' => '𧹑',
+'䠀' => '蹚',
+'䠶' => '射',
'䢨' => '𨑹',
'䥇' => '䦂',
+'䥥' => '镰',
'䥩' => '𨱖',
'䥱' => '䥾',
'䦘' => '𨸄',
@@ -10080,11 +9437,13 @@ $zh2Hans = array(
'䪗' => '𩐀',
'䪘' => '𩏿',
'䫴' => '𩖗',
+'䬃' => '飒',
'䬘' => '𩙮',
'䬝' => '𩙯',
'䬞' => '𩙧',
'䭀' => '𩠇',
'䭃' => '𩠈',
+'䭾' => '驮',
'䭿' => '𩧭',
'䮝' => '𩧰',
'䮞' => '𩨁',
@@ -10093,6 +9452,7 @@ $zh2Hans = array(
'䮳' => '𩨏',
'䮾' => '𩧪',
'䯀' => '䯅',
+'䰟' => '魂',
'䰾' => '鲃',
'䱙' => '𩾈',
'䱬' => '𩾊',
@@ -10101,16 +9461,27 @@ $zh2Hans = array(
'䱽' => '䲝',
'䲁' => '鳚',
'䲖' => '𩾂',
+'䲘' => '鳤',
'䲰' => '𪉂',
+'䳘' => '鹅',
'䴉' => '鹮',
'䴬' => '𪎈',
'䴴' => '𪎋',
+'䶊' => '衄',
'丟' => '丢',
+'丣' => '卯',
'並' => '并',
+'乗' => '乘',
+'乹' => '干',
'乾' => '干',
+'亁' => '干',
'亂' => '乱',
'亙' => '亘',
+'亝' => '斋',
'亞' => '亚',
+'亱' => '夜',
+'亷' => '廉',
+'亾' => '亡',
'佇' => '伫',
'佈' => '布',
'佔' => '占',
@@ -10118,29 +9489,36 @@ $zh2Hans = array(
'來' => '来',
'侖' => '仑',
'侶' => '侣',
+'侷' => '局',
'俁' => '俣',
'係' => '系',
'俔' => '伣',
'俠' => '侠',
'俥' => '伡',
+'俻' => '备',
'倀' => '伥',
'倆' => '俩',
'倈' => '俫',
'倉' => '仓',
'個' => '个',
+'倐' => '倏',
'們' => '们',
'倖' => '幸',
+'倣' => '仿',
'倫' => '伦',
'倲' => '㑈',
+'倸' => '睬',
'偉' => '伟',
'偑' => '㐽',
'側' => '侧',
'偵' => '侦',
'偽' => '伪',
+'傌' => '㐷',
'傑' => '杰',
'傖' => '伧',
'傘' => '伞',
'備' => '备',
+'傚' => '效',
'傢' => '家',
'傭' => '佣',
'傯' => '偬',
@@ -10152,6 +9530,8 @@ $zh2Hans = array(
'僂' => '偻',
'僅' => '仅',
'僉' => '佥',
+'僊' => '仙',
+'働' => '动',
'僑' => '侨',
'僕' => '仆',
'僞' => '伪',
@@ -10164,6 +9544,7 @@ $zh2Hans = array(
'億' => '亿',
'儈' => '侩',
'儉' => '俭',
+'儌' => '侥',
'儐' => '傧',
'儔' => '俦',
'儕' => '侪',
@@ -10179,32 +9560,49 @@ $zh2Hans = array(
'儼' => '俨',
'兇' => '凶',
'兌' => '兑',
+'兎' => '兔',
'兒' => '儿',
'兗' => '兖',
+'兠' => '兜',
'內' => '内',
'兩' => '两',
+'冄' => '冉',
'冊' => '册',
+'冐' => '冒',
+'冑' => '胄',
'冪' => '幂',
+'冺' => '泯',
'凈' => '净',
'凍' => '冻',
'凙' => '𪞝',
'凜' => '凛',
+'凢' => '凡',
'凱' => '凯',
+'凴' => '凭',
'別' => '别',
+'刦' => '劫',
+'刧' => '劫',
'刪' => '删',
+'刼' => '劫',
'剄' => '刭',
'則' => '则',
+'剉' => '锉',
'剋' => '克',
'剎' => '刹',
+'剏' => '创',
'剗' => '刬',
+'剙' => '创',
'剛' => '刚',
'剝' => '剥',
'剮' => '剐',
+'剳' => '札',
'剴' => '剀',
'創' => '创',
'剷' => '铲',
+'剹' => '戮',
'剾' => '𠛅',
'劃' => '划',
+'劄' => '札',
'劇' => '剧',
'劉' => '刘',
'劊' => '刽',
@@ -10212,48 +9610,73 @@ $zh2Hans = array(
'劍' => '剑',
'劏' => '㓥',
'劑' => '剂',
+'劒' => '剑',
'劚' => '㔉',
+'効' => '效',
'勁' => '劲',
+'勅' => '敕',
+'勌' => '倦',
+'勑' => '敕',
'動' => '动',
'務' => '务',
'勛' => '勋',
'勝' => '胜',
'勞' => '劳',
'勢' => '势',
+'勦' => '剿',
'勩' => '勚',
'勱' => '劢',
'勳' => '勋',
'勵' => '励',
'勸' => '劝',
'勻' => '匀',
+'匟' => '炕',
'匭' => '匦',
'匯' => '汇',
'匱' => '匮',
+'匲' => '奁',
+'匳' => '奁',
'區' => '区',
'協' => '协',
+'卹' => '恤',
'卻' => '却',
'卽' => '即',
+'厀' => '膝',
'厙' => '厍',
+'厠' => '厕',
'厤' => '历',
'厭' => '厌',
+'厰' => '厂',
'厲' => '厉',
'厴' => '厣',
'參' => '参',
'叄' => '叁',
'叢' => '丛',
-'吒' => '咤',
+'吚' => '咿',
'吳' => '吴',
'吶' => '呐',
'呂' => '吕',
+'呌' => '叫',
+'呪' => '咒',
+'咊' => '和',
'咼' => '呙',
'員' => '员',
'哯' => '𠯟',
+'哶' => '咩',
'唄' => '呗',
+'唕' => '唣',
+'唘' => '启',
'唚' => '吣',
+'唸' => '念',
+'啎' => '忤',
'問' => '问',
+'啑' => '喋',
+'啓' => '启',
+'啗' => '啖',
'啞' => '哑',
'啟' => '启',
'啢' => '唡',
+'啣' => '衔',
'喎' => '㖞',
'喚' => '唤',
'喪' => '丧',
@@ -10261,6 +9684,7 @@ $zh2Hans = array(
'喬' => '乔',
'單' => '单',
'喲' => '哟',
+'嗁' => '啼',
'嗆' => '呛',
'嗇' => '啬',
'嗊' => '唝',
@@ -10269,22 +9693,26 @@ $zh2Hans = array(
'嗩' => '唢',
'嗶' => '哔',
'嗹' => '𪡏',
+'嘅' => '慨',
'嘆' => '叹',
'嘍' => '喽',
+'嘑' => '呼',
'嘓' => '啯',
'嘔' => '呕',
'嘖' => '啧',
'嘗' => '尝',
'嘜' => '唛',
+'嘠' => '嘎',
'嘩' => '哗',
'嘮' => '唠',
'嘯' => '啸',
'嘰' => '叽',
'嘵' => '哓',
+'嘷' => '嗥',
'嘸' => '呒',
'嘽' => '啴',
-'噁' => '恶',
'噅' => '𠯠',
+'噉' => '啖',
'噓' => '嘘',
'噚' => '㖊',
'噝' => '咝',
@@ -10318,7 +9746,10 @@ $zh2Hans = array(
'囉' => '啰',
'囌' => '苏',
'囑' => '嘱',
+'囓' => '啮',
+'囙' => '因',
'囪' => '囱',
+'圅' => '函',
'圇' => '囵',
'國' => '国',
'圍' => '围',
@@ -10327,6 +9758,8 @@ $zh2Hans = array(
'圖' => '图',
'團' => '团',
'圞' => '𪢮',
+'坿' => '附',
+'垜' => '垛',
'垵' => '埯',
'埡' => '垭',
'埰' => '采',
@@ -10344,19 +9777,24 @@ $zh2Hans = array(
'塒' => '埘',
'塗' => '涂',
'塚' => '冢',
+'塟' => '葬',
'塢' => '坞',
'塤' => '埙',
+'塲' => '场',
'塵' => '尘',
'塹' => '堑',
'墊' => '垫',
+'墖' => '塔',
'墜' => '坠',
'墮' => '堕',
'墰' => '坛',
'墳' => '坟',
+'墻' => '墙',
'墾' => '垦',
'壇' => '坛',
'壈' => '𡒄',
'壋' => '垱',
+'壎' => '埙',
'壓' => '压',
'壘' => '垒',
'壙' => '圹',
@@ -10369,8 +9807,10 @@ $zh2Hans = array(
'壩' => '坝',
'壯' => '壮',
'壺' => '壶',
+'壻' => '婿',
'壼' => '壸',
'壽' => '寿',
+'夘' => '卯',
'夠' => '够',
'夢' => '梦',
'夥' => '伙',
@@ -10379,78 +9819,111 @@ $zh2Hans = array(
'奧' => '奥',
'奩' => '奁',
'奪' => '夺',
+'奬' => '奖',
'奮' => '奋',
'奼' => '姹',
'妝' => '妆',
+'妬' => '妒',
+'妳' => '你',
+'妷' => '侄',
+'姉' => '姊',
'姍' => '姗',
+'姙' => '妊',
'姦' => '奸',
+'姪' => '侄',
+'姸' => '妍',
'娛' => '娱',
'婁' => '娄',
+'婣' => '姻',
'婦' => '妇',
+'婬' => '淫',
'婭' => '娅',
+'媍' => '妇',
'媧' => '娲',
'媯' => '妫',
'媰' => '㛀',
'媼' => '媪',
'媽' => '妈',
+'媿' => '愧',
+'嫋' => '袅',
'嫗' => '妪',
+'嫰' => '嫩',
'嫵' => '妩',
+'嫺' => '娴',
'嫻' => '娴',
'嫿' => '婳',
+'嬀' => '妫',
'嬃' => '媭',
'嬈' => '娆',
'嬋' => '婵',
'嬌' => '娇',
'嬙' => '嫱',
+'嬝' => '袅',
'嬡' => '嫒',
'嬤' => '嬷',
'嬪' => '嫔',
+'嬭' => '奶',
'嬰' => '婴',
'嬸' => '婶',
+'嬾' => '懒',
+'孃' => '娘',
'孋' => '㛤',
'孌' => '娈',
'孫' => '孙',
'學' => '学',
+'孼' => '孽',
'孿' => '孪',
+'宂' => '冗',
'宮' => '宫',
'寀' => '采',
+'寃' => '冤',
+'寑' => '寝',
'寢' => '寝',
'實' => '实',
'寧' => '宁',
'審' => '审',
'寫' => '写',
'寬' => '宽',
+'寳' => '宝',
'寵' => '宠',
'寶' => '宝',
+'尅' => '克',
'將' => '将',
'專' => '专',
'尋' => '寻',
'對' => '对',
'導' => '导',
+'尒' => '尔',
+'尙' => '尚',
+'尟' => '鲜',
+'尠' => '鲜',
'尷' => '尴',
'屆' => '届',
'屍' => '尸',
'屓' => '屃',
+'屛' => '屏',
'屜' => '屉',
'屢' => '屡',
'層' => '层',
'屨' => '屦',
'屩' => '𪨗',
'屬' => '属',
+'屭' => '屃',
+'岅' => '坂',
'岡' => '冈',
+'峝' => '峒',
'峴' => '岘',
'島' => '岛',
'峽' => '峡',
'崍' => '崃',
-'崑' => '昆',
'崗' => '岗',
-'崙' => '仑',
'崢' => '峥',
'崬' => '岽',
'嵐' => '岚',
'嵗' => '岁',
'嵼' => '𡶴',
'嶁' => '嵝',
+'嶃' => '崭',
'嶄' => '崭',
'嶇' => '岖',
'嶔' => '嵚',
@@ -10458,6 +9931,7 @@ $zh2Hans = array(
'嶠' => '峤',
'嶢' => '峣',
'嶧' => '峄',
+'嶨' => '峃',
'嶮' => '崄',
'嶴' => '岙',
'嶸' => '嵘',
@@ -10468,28 +9942,40 @@ $zh2Hans = array(
'巒' => '峦',
'巔' => '巅',
'巖' => '岩',
+'巗' => '岩',
'巰' => '巯',
-'巹' => '卺',
+'巵' => '卮',
+'帀' => '匝',
+'帋' => '纸',
'帥' => '帅',
'師' => '师',
+'帬' => '裙',
'帳' => '帐',
'帶' => '带',
'幀' => '帧',
'幃' => '帏',
+'幇' => '帮',
+'幑' => '徽',
'幗' => '帼',
'幘' => '帻',
+'幙' => '幕',
+'幚' => '帮',
'幟' => '帜',
'幣' => '币',
'幫' => '帮',
'幬' => '帱',
'幹' => '干',
-'幺' => '么',
'幾' => '几',
'庫' => '库',
+'庻' => '庶',
+'庽' => '寓',
'廁' => '厕',
'廂' => '厢',
'廄' => '厩',
'廈' => '厦',
+'廎' => '庼',
+'廐' => '厩',
+'廕' => '荫',
'廚' => '厨',
'廝' => '厮',
'廟' => '庙',
@@ -10500,6 +9986,10 @@ $zh2Hans = array(
'廩' => '廪',
'廬' => '庐',
'廳' => '厅',
+'廵' => '巡',
+'廹' => '迫',
+'廻' => '回',
+'廼' => '乃',
'弒' => '弑',
'弔' => '吊',
'弳' => '弪',
@@ -10513,45 +10003,63 @@ $zh2Hans = array(
'彞' => '彝',
'彠' => '彟',
'彥' => '彦',
+'彫' => '雕',
'彲' => '彨',
+'徃' => '往',
'後' => '后',
'徑' => '径',
'從' => '从',
'徠' => '徕',
+'徧' => '遍',
'復' => '复',
'徵' => '征',
'徹' => '彻',
+'怱' => '匆',
+'怳' => '恍',
'恆' => '恒',
+'恠' => '怪',
+'恡' => '吝',
'恥' => '耻',
'悅' => '悦',
'悞' => '悮',
+'悤' => '匆',
'悵' => '怅',
'悶' => '闷',
+'悽' => '凄',
+'惏' => '婪',
'惡' => '恶',
+'惥' => '恿',
'惱' => '恼',
'惲' => '恽',
+'惷' => '蠢',
'惻' => '恻',
'愛' => '爱',
'愜' => '惬',
'愨' => '悫',
'愴' => '怆',
'愷' => '恺',
+'愽' => '博',
'愾' => '忾',
'慄' => '栗',
'態' => '态',
'慍' => '愠',
'慘' => '惨',
+'慙' => '惭',
'慚' => '惭',
'慟' => '恸',
'慣' => '惯',
+'慤' => '悫',
'慪' => '怄',
'慫' => '怂',
'慮' => '虑',
'慳' => '悭',
+'慴' => '慑',
'慶' => '庆',
'慼' => '戚',
+'慽' => '戚',
'慾' => '欲',
'憂' => '忧',
+'憇' => '憩',
'憊' => '惫',
'憐' => '怜',
'憑' => '凭',
@@ -10581,20 +10089,26 @@ $zh2Hans = array(
'戀' => '恋',
'戇' => '戆',
'戔' => '戋',
+'戞' => '戛',
'戧' => '戗',
'戩' => '戬',
+'戯' => '戏',
'戰' => '战',
'戱' => '戯',
'戲' => '戏',
'戶' => '户',
+'戹' => '厄',
+'扞' => '捍',
+'抝' => '拗',
'拋' => '抛',
'拚' => '拼',
'挩' => '捝',
'挱' => '挲',
+'挵' => '弄',
'挾' => '挟',
+'捄' => '救',
'捨' => '舍',
'捫' => '扪',
-'捱' => '挨',
'捲' => '卷',
'掃' => '扫',
'掄' => '抡',
@@ -10603,15 +10117,29 @@ $zh2Hans = array(
'掙' => '挣',
'掛' => '挂',
'採' => '采',
+'掽' => '碰',
'揀' => '拣',
+'揑' => '捏',
'揚' => '扬',
'換' => '换',
+'揫' => '揪',
'揮' => '挥',
+'揷' => '插',
+'揹' => '背',
+'搆' => '构',
+'搇' => '揿',
+'搉' => '榷',
'損' => '损',
'搖' => '摇',
'搗' => '捣',
+'搤' => '扼',
+'搥' => '捶',
+'搨' => '拓',
+'搯' => '掏',
'搵' => '揾',
'搶' => '抢',
+'搾' => '榨',
+'摃' => '扛',
'摋' => '𢫬',
'摑' => '掴',
'摜' => '掼',
@@ -10627,8 +10155,10 @@ $zh2Hans = array(
'撓' => '挠',
'撝' => '㧑',
'撟' => '挢',
+'撡' => '操',
'撣' => '掸',
'撥' => '拨',
+'撦' => '扯',
'撫' => '抚',
'撲' => '扑',
'撳' => '揿',
@@ -10642,9 +10172,11 @@ $zh2Hans = array(
'擋' => '挡',
'擓' => '㧟',
'擔' => '担',
+'擕' => '携',
'據' => '据',
'擠' => '挤',
'擣' => '𢭏',
+'擧' => '举',
'擬' => '拟',
'擯' => '摈',
'擰' => '拧',
@@ -10669,12 +10201,17 @@ $zh2Hans = array(
'攢' => '攒',
'攣' => '挛',
'攤' => '摊',
+'攩' => '挡',
'攪' => '搅',
'攬' => '揽',
+'攷' => '考',
+'敂' => '叩',
+'敍' => '叙',
'敗' => '败',
'敘' => '叙',
'敵' => '敌',
'數' => '数',
+'敺' => '驱',
'斂' => '敛',
'斃' => '毙',
'斅' => '𢽾',
@@ -10685,7 +10222,10 @@ $zh2Hans = array(
'於' => '于',
'旂' => '旗',
'旣' => '既',
-'昇' => '升',
+'旤' => '祸',
+'旹' => '时',
+'旾' => '春',
+'昬' => '昏',
'時' => '时',
'晉' => '晋',
'晝' => '昼',
@@ -10694,24 +10234,38 @@ $zh2Hans = array(
'暘' => '旸',
'暢' => '畅',
'暫' => '暂',
+'暱' => '昵',
'曄' => '晔',
'曆' => '历',
'曇' => '昙',
'曉' => '晓',
-'曏' => '向',
'曖' => '暧',
'曠' => '旷',
+'曡' => '叠',
'曥' => '𣆐',
'曨' => '昽',
'曬' => '晒',
'書' => '书',
'會' => '会',
+'朞' => '期',
+'朢' => '望',
'朥' => '𦛨',
'朧' => '胧',
'朮' => '术',
+'朶' => '朵',
'東' => '东',
'杴' => '锨',
+'枱' => '台',
'柵' => '栅',
+'柺' => '拐',
+'査' => '查',
+'栁' => '柳',
+'栞' => '刊',
+'栢' => '柏',
+'栰' => '筏',
+'桒' => '桑',
+'桮' => '杯',
+'桺' => '柳',
'桿' => '杆',
'梔' => '栀',
'梘' => '枧',
@@ -10727,10 +10281,17 @@ $zh2Hans = array(
'棧' => '栈',
'棲' => '栖',
'棶' => '梾',
+'椀' => '碗',
+'椉' => '乘',
'椏' => '桠',
+'椗' => '碇',
'椲' => '㭏',
+'椶' => '棕',
+'椷' => '缄',
+'椾' => '笺',
'楊' => '杨',
'楓' => '枫',
+'楥' => '楦',
'楨' => '桢',
'業' => '业',
'極' => '极',
@@ -10742,9 +10303,11 @@ $zh2Hans = array(
'構' => '构',
'槍' => '枪',
'槓' => '杠',
+'槕' => '桌',
'槤' => '梿',
'槧' => '椠',
'槨' => '椁',
+'槮' => '椮',
'槳' => '桨',
'槶' => '椢',
'槼' => '椝',
@@ -10765,6 +10328,7 @@ $zh2Hans = array(
'樿' => '椫',
'橈' => '桡',
'橋' => '桥',
+'橜' => '橛',
'機' => '机',
'橢' => '椭',
'橫' => '横',
@@ -10782,6 +10346,7 @@ $zh2Hans = array(
'檸' => '柠',
'檻' => '槛',
'櫃' => '柜',
+'櫈' => '凳',
'櫓' => '橹',
'櫚' => '榈',
'櫛' => '栉',
@@ -10806,16 +10371,21 @@ $zh2Hans = array(
'欒' => '栾',
'欓' => '𣗋',
'欖' => '榄',
+'欝' => '郁',
'欞' => '棂',
+'欵' => '款',
'欽' => '钦',
'歎' => '叹',
'歐' => '欧',
+'歛' => '敛',
'歟' => '欤',
'歡' => '欢',
'歲' => '岁',
+'歴' => '历',
'歷' => '历',
'歸' => '归',
'歿' => '殁',
+'殀' => '夭',
'殘' => '残',
'殞' => '殒',
'殤' => '殇',
@@ -10827,18 +10397,24 @@ $zh2Hans = array(
'殰' => '㱩',
'殲' => '歼',
'殺' => '杀',
+'殻' => '壳',
'殼' => '壳',
'毀' => '毁',
'毆' => '殴',
+'毧' => '绒',
+'毬' => '球',
'毿' => '毵',
'氂' => '牦',
'氈' => '毡',
+'氊' => '毡',
'氌' => '氇',
'氣' => '气',
'氫' => '氢',
'氬' => '氩',
'氳' => '氲',
+'氷' => '冰',
'汙' => '污',
+'汚' => '污',
'決' => '决',
'沒' => '没',
'沖' => '冲',
@@ -10848,9 +10424,11 @@ $zh2Hans = array(
'洶' => '汹',
'浹' => '浃',
'涇' => '泾',
+'涖' => '莅',
'涼' => '凉',
'淒' => '凄',
'淚' => '泪',
+'淛' => '浙',
'淥' => '渌',
'淨' => '净',
'淩' => '凌',
@@ -10868,19 +10446,25 @@ $zh2Hans = array(
'湞' => '浈',
'湧' => '涌',
'湯' => '汤',
+'湻' => '淳',
+'湼' => '涅',
'溈' => '沩',
'準' => '准',
'溝' => '沟',
'溫' => '温',
+'溮' => '浉',
'溳' => '涢',
+'溼' => '湿',
'滄' => '沧',
'滅' => '灭',
'滌' => '涤',
'滎' => '荥',
'滙' => '汇',
+'滛' => '淫',
'滬' => '沪',
'滯' => '滞',
'滲' => '渗',
+'滷' => '卤',
'滸' => '浒',
'滻' => '浐',
'滾' => '滚',
@@ -10896,8 +10480,10 @@ $zh2Hans = array(
'漸' => '渐',
'漿' => '浆',
'潁' => '颍',
+'潄' => '漱',
'潑' => '泼',
'潔' => '洁',
+'潙' => '沩',
'潛' => '潜',
'潤' => '润',
'潯' => '浔',
@@ -10905,6 +10491,7 @@ $zh2Hans = array(
'潷' => '滗',
'潿' => '涠',
'澀' => '涩',
+'澁' => '涩',
'澅' => '𣶩',
'澆' => '浇',
'澇' => '涝',
@@ -10921,6 +10508,7 @@ $zh2Hans = array(
'濃' => '浓',
'濄' => '㳡',
'濆' => '𣸣',
+'濇' => '涩',
'濕' => '湿',
'濘' => '泞',
'濜' => '浕',
@@ -10930,6 +10518,7 @@ $zh2Hans = array(
'濫' => '滥',
'濰' => '潍',
'濱' => '滨',
+'濶' => '阔',
'濺' => '溅',
'濼' => '泺',
'濾' => '滤',
@@ -10954,6 +10543,7 @@ $zh2Hans = array(
'瀾' => '澜',
'灃' => '沣',
'灄' => '滠',
+'灋' => '法',
'灑' => '洒',
'灕' => '漓',
'灘' => '滩',
@@ -10964,13 +10554,17 @@ $zh2Hans = array(
'灣' => '湾',
'灤' => '滦',
'灧' => '滟',
+'灩' => '滟',
'災' => '灾',
'為' => '为',
'烏' => '乌',
+'烖' => '灾',
'烴' => '烃',
'無' => '无',
'煉' => '炼',
+'煑' => '煮',
'煒' => '炜',
+'煗' => '暖',
'煙' => '烟',
'煢' => '茕',
'煥' => '焕',
@@ -10978,6 +10572,7 @@ $zh2Hans = array(
'煬' => '炀',
'煱' => '㶽',
'熅' => '煴',
+'熈' => '熙',
'熉' => '𤈶',
'熌' => '𤇄',
'熒' => '荧',
@@ -10988,7 +10583,9 @@ $zh2Hans = array(
'熲' => '颎',
'熾' => '炽',
'燁' => '烨',
+'燄' => '焰',
'燈' => '灯',
+'燉' => '炖',
'燒' => '烧',
'燙' => '烫',
'燜' => '焖',
@@ -10998,26 +10595,39 @@ $zh2Hans = array(
'燭' => '烛',
'燴' => '烩',
'燶' => '㶶',
+'燻' => '熏',
'燼' => '烬',
'燾' => '焘',
'爄' => '𤇃',
'爍' => '烁',
'爐' => '炉',
+'爗' => '烨',
'爛' => '烂',
'爭' => '争',
'爲' => '为',
'爺' => '爷',
'爾' => '尔',
+'牀' => '床',
'牆' => '墙',
+'牋' => '笺',
+'牎' => '窗',
+'牐' => '闸',
+'牓' => '榜',
+'牕' => '窗',
'牘' => '牍',
+'牠' => '它',
+'牴' => '抵',
'牽' => '牵',
'犖' => '荦',
'犢' => '犊',
'犧' => '牺',
'狀' => '状',
+'狥' => '徇',
'狹' => '狭',
'狽' => '狈',
+'猂' => '悍',
'猙' => '狰',
+'猨' => '猿',
'猶' => '犹',
'猻' => '狲',
'獁' => '犸',
@@ -11025,6 +10635,8 @@ $zh2Hans = array(
'獄' => '狱',
'獅' => '狮',
'獎' => '奖',
+'獘' => '毙',
+'獧' => '狷',
'獨' => '独',
'獪' => '狯',
'獫' => '猃',
@@ -11040,23 +10652,32 @@ $zh2Hans = array(
'獼' => '猕',
'玀' => '猡',
'玁' => '𤞤',
+'玅' => '妙',
'現' => '现',
+'琖' => '盏',
+'琱' => '雕',
'琺' => '珐',
'琿' => '珲',
+'瑇' => '玳',
'瑋' => '玮',
'瑒' => '玚',
'瑣' => '琐',
'瑤' => '瑶',
'瑩' => '莹',
'瑪' => '玛',
+'瑯' => '琅',
'瑲' => '玱',
'瑽' => '𪻐',
'璉' => '琏',
+'璡' => '琎',
+'璢' => '瑠',
'璣' => '玑',
'璦' => '瑷',
'璫' => '珰',
'璯' => '㻅',
'環' => '环',
+'璵' => '玙',
+'璸' => '瑸',
'璽' => '玺',
'瓊' => '琼',
'瓏' => '珑',
@@ -11064,34 +10685,52 @@ $zh2Hans = array(
'瓕' => '𤦀',
'瓚' => '瓒',
'甌' => '瓯',
+'甎' => '砖',
'甕' => '瓮',
+'甖' => '罂',
+'甞' => '尝',
'產' => '产',
-'甦' => '苏',
-'甯' => '宁',
+'産' => '产',
+'畂' => '亩',
+'畆' => '亩',
'畝' => '亩',
'畢' => '毕',
+'畧' => '略',
'畫' => '画',
+'畮' => '亩',
'異' => '异',
+'畱' => '留',
'畵' => '画',
'當' => '当',
'疇' => '畴',
'疊' => '叠',
+'疎' => '疏',
+'疘' => '肛',
+'疿' => '痱',
+'痐' => '蛔',
'痙' => '痉',
'痠' => '酸',
-'痾' => '疴',
+'痲' => '痳',
+'痺' => '痹',
'瘂' => '痖',
+'瘉' => '愈',
'瘋' => '疯',
'瘍' => '疡',
'瘓' => '痪',
+'瘖' => '喑',
'瘞' => '瘗',
'瘡' => '疮',
'瘧' => '疟',
'瘮' => '瘆',
'瘲' => '疭',
'瘺' => '瘘',
+'瘻' => '瘘',
'療' => '疗',
+'癄' => '憔',
+'癅' => '瘤',
'癆' => '痨',
'癇' => '痫',
+'癈' => '废',
'癉' => '瘅',
'癒' => '愈',
'癘' => '疠',
@@ -11109,12 +10748,18 @@ $zh2Hans = array(
'癱' => '瘫',
'癲' => '癫',
'發' => '发',
+'皁' => '皂',
+'皐' => '皋',
'皚' => '皑',
+'皜' => '皓',
'皟' => '𤾀',
'皰' => '疱',
+'皷' => '鼓',
'皸' => '皲',
'皺' => '皱',
'盃' => '杯',
+'盇' => '盍',
+'盌' => '碗',
'盜' => '盗',
'盞' => '盏',
'盡' => '尽',
@@ -11122,13 +10767,19 @@ $zh2Hans = array(
'盤' => '盘',
'盧' => '卢',
'盪' => '荡',
+'眎' => '视',
'眞' => '真',
+'眡' => '视',
'眥' => '眦',
'眾' => '众',
'睍' => '𪾢',
'睏' => '困',
'睜' => '睁',
'睞' => '睐',
+'睠' => '眷',
+'睪' => '睾',
+'瞇' => '眯',
+'瞖' => '翳',
'瞘' => '眍',
'瞜' => '䁖',
'瞞' => '瞒',
@@ -11136,18 +10787,21 @@ $zh2Hans = array(
'瞭' => '了',
'瞶' => '瞆',
'瞼' => '睑',
+'矁' => '瞅',
'矇' => '蒙',
'矓' => '眬',
+'矙' => '瞰',
'矚' => '瞩',
'矯' => '矫',
+'砲' => '炮',
'硃' => '朱',
'硜' => '硁',
'硤' => '硖',
'硨' => '砗',
'硯' => '砚',
-'碕' => '埼',
'碙' => '𥐻',
'碩' => '硕',
+'碪' => '砧',
'碭' => '砀',
'碸' => '砜',
'確' => '确',
@@ -11155,13 +10809,14 @@ $zh2Hans = array(
'碽' => '䂵',
'磑' => '硙',
'磚' => '砖',
+'磟' => '碌',
'磠' => '硵',
'磣' => '碜',
'磧' => '碛',
'磯' => '矶',
'磽' => '硗',
'礄' => '硚',
-'礆' => '硷',
+'礆' => '碱',
'礎' => '础',
'礒' => '𥐟',
'礙' => '碍',
@@ -11169,7 +10824,9 @@ $zh2Hans = array(
'礪' => '砺',
'礫' => '砾',
'礬' => '矾',
+'礮' => '炮',
'礱' => '砻',
+'祕' => '秘',
'祘' => '算',
'祿' => '禄',
'禍' => '祸',
@@ -11183,13 +10840,20 @@ $zh2Hans = array(
'禱' => '祷',
'禿' => '秃',
'秈' => '籼',
+'秊' => '年',
+'秌' => '秋',
+'秖' => '只',
'稅' => '税',
'稈' => '秆',
+'稉' => '粳',
'稏' => '䅉',
'稜' => '棱',
'稟' => '禀',
+'稬' => '糯',
+'稭' => '秸',
'種' => '种',
'稱' => '称',
+'稾' => '稿',
'穀' => '谷',
'穌' => '稣',
'積' => '积',
@@ -11197,50 +10861,71 @@ $zh2Hans = array(
'穠' => '秾',
'穡' => '穑',
'穢' => '秽',
+'穤' => '糯',
+'穨' => '颓',
'穩' => '稳',
'穫' => '获',
'穭' => '稆',
+'穽' => '阱',
+'窓' => '窗',
'窩' => '窝',
'窪' => '洼',
'窮' => '穷',
'窯' => '窑',
+'窰' => '窑',
'窵' => '窎',
'窶' => '窭',
'窺' => '窥',
+'窻' => '窗',
'竄' => '窜',
'竅' => '窍',
'竇' => '窦',
+'竈' => '灶',
'竊' => '窃',
+'竚' => '伫',
+'竝' => '并',
+'竢' => '俟',
+'竪' => '竖',
'競' => '竞',
'筆' => '笔',
'筍' => '笋',
+'筞' => '策',
'筧' => '笕',
+'筩' => '筒',
+'筯' => '箸',
'筴' => '䇲',
'箇' => '个',
'箋' => '笺',
'箏' => '筝',
+'箒' => '帚',
+'箠' => '棰',
'節' => '节',
'範' => '范',
'築' => '筑',
'篋' => '箧',
'篔' => '筼',
'篘' => '𥬠',
+'篛' => '箬',
'篤' => '笃',
'篩' => '筛',
'篳' => '筚',
'簀' => '箦',
'簍' => '篓',
'簑' => '蓑',
+'簒' => '篡',
'簞' => '箪',
'簡' => '简',
'簣' => '篑',
'簫' => '箫',
+'簮' => '簪',
+'簷' => '檐',
'簹' => '筜',
'簽' => '签',
'簾' => '帘',
'籃' => '篮',
'籋' => '𥬞',
'籌' => '筹',
+'籐' => '藤',
'籔' => '䉤',
'籙' => '箓',
'籛' => '篯',
@@ -11253,7 +10938,10 @@ $zh2Hans = array(
'籬' => '篱',
'籮' => '箩',
'籲' => '吁',
+'粃' => '秕',
+'粧' => '妆',
'粵' => '粤',
+'糉' => '粽',
'糝' => '糁',
'糞' => '粪',
'糧' => '粮',
@@ -11286,6 +10974,7 @@ $zh2Hans = array(
'紜' => '纭',
'紝' => '纴',
'紡' => '纺',
+'紥' => '扎',
'紬' => '䌷',
'紮' => '扎',
'細' => '细',
@@ -11299,10 +10988,12 @@ $zh2Hans = array(
'紿' => '绐',
'絀' => '绌',
'終' => '终',
+'絃' => '弦',
'組' => '组',
'絅' => '䌹',
'絆' => '绊',
'絎' => '绗',
+'絏' => '绁',
'結' => '结',
'絕' => '绝',
'絛' => '绦',
@@ -11324,9 +11015,11 @@ $zh2Hans = array(
'綆' => '绠',
'綇' => '𦈋',
'綈' => '绨',
+'綉' => '绣',
'綌' => '绤',
'綏' => '绥',
'綐' => '䌼',
+'綑' => '捆',
'經' => '经',
'綜' => '综',
'綞' => '缍',
@@ -11354,17 +11047,22 @@ $zh2Hans = array(
'緊' => '紧',
'緋' => '绯',
'緍' => '𦈏',
+'緐' => '繁',
+'緑' => '绿',
'緒' => '绪',
'緓' => '绬',
+'緔' => '绱',
'緗' => '缃',
'緘' => '缄',
'緙' => '缂',
'線' => '线',
+'緜' => '绵',
'緝' => '缉',
'緞' => '缎',
'締' => '缔',
'緡' => '缗',
'緣' => '缘',
+'緥' => '褓',
'緦' => '缌',
'編' => '编',
'緩' => '缓',
@@ -11379,6 +11077,7 @@ $zh2Hans = array(
'緸' => '𦈑',
'緹' => '缇',
'緻' => '致',
+'緼' => '缊',
'縈' => '萦',
'縉' => '缙',
'縊' => '缢',
@@ -11393,6 +11092,7 @@ $zh2Hans = array(
'縞' => '缟',
'縟' => '缛',
'縣' => '县',
+'縧' => '绦',
'縫' => '缝',
'縬' => '𦈚',
'縭' => '缡',
@@ -11417,15 +11117,19 @@ $zh2Hans = array(
'繓' => '𦈛',
'織' => '织',
'繕' => '缮',
+'繖' => '伞',
+'繙' => '翻',
'繚' => '缭',
'繞' => '绕',
'繟' => '𦈎',
'繡' => '绣',
'繢' => '缋',
+'繦' => '襁',
'繩' => '绳',
'繪' => '绘',
'繫' => '系',
'繭' => '茧',
+'繮' => '缰',
'繯' => '缳',
'繰' => '缲',
'繳' => '缴',
@@ -11449,23 +11153,34 @@ $zh2Hans = array(
'纘' => '缵',
'纜' => '缆',
'缽' => '钵',
+'罇' => '樽',
'罈' => '坛',
+'罋' => '瓮',
'罌' => '罂',
'罎' => '坛',
'罰' => '罚',
'罵' => '骂',
'罷' => '罢',
+'罸' => '罚',
'羅' => '罗',
'羆' => '罴',
'羈' => '羁',
'羋' => '芈',
+'羗' => '羌',
+'羢' => '绒',
+'羣' => '群',
'羥' => '羟',
'羨' => '羡',
'義' => '义',
+'羶' => '膻',
+'翄' => '翅',
'習' => '习',
+'翫' => '玩',
'翬' => '翚',
+'翶' => '翱',
'翹' => '翘',
'翽' => '翙',
+'耡' => '锄',
'耬' => '耧',
'耮' => '耢',
'聖' => '圣',
@@ -11481,13 +11196,21 @@ $zh2Hans = array(
'聽' => '听',
'聾' => '聋',
'肅' => '肃',
+'肎' => '肯',
+'肐' => '胳',
+'肧' => '胚',
+'胷' => '胸',
+'脃' => '脆',
'脅' => '胁',
+'脇' => '胁',
'脈' => '脉',
+'脗' => '吻',
'脛' => '胫',
'脣' => '唇',
'脥' => '𣍰',
'脫' => '脱',
'脹' => '胀',
+'腁' => '胼',
'腎' => '肾',
'腖' => '胨',
'腡' => '脶',
@@ -11497,66 +11220,90 @@ $zh2Hans = array(
'腳' => '脚',
'腸' => '肠',
'膃' => '腽',
+'膓' => '肠',
'膕' => '腘',
'膚' => '肤',
+'膞' => '䏝',
'膠' => '胶',
'膢' => '𦝼',
'膩' => '腻',
'膽' => '胆',
'膾' => '脍',
'膿' => '脓',
+'臈' => '腊',
'臉' => '脸',
+'臋' => '臀',
'臍' => '脐',
'臏' => '膑',
+'臕' => '膘',
'臗' => '𣎑',
'臘' => '腊',
+'臙' => '胭',
'臚' => '胪',
+'臝' => '裸',
'臟' => '脏',
'臠' => '脔',
'臢' => '臜',
'臥' => '卧',
'臨' => '临',
+'臯' => '皋',
'臺' => '台',
'與' => '与',
'興' => '兴',
'舉' => '举',
'舊' => '旧',
+'舖' => '铺',
'舘' => '馆',
+'舩' => '船',
'艙' => '舱',
+'艢' => '樯',
+'艣' => '橹',
'艤' => '舣',
'艦' => '舰',
+'艪' => '橹',
'艫' => '舻',
'艱' => '艰',
'艷' => '艳',
+'芲' => '花',
'芻' => '刍',
'苧' => '苎',
+'茘' => '荔',
'茲' => '兹',
'荊' => '荆',
+'荳' => '豆',
'莊' => '庄',
'莖' => '茎',
'莢' => '荚',
'莧' => '苋',
'華' => '华',
-'菴' => '庵',
+'菸' => '烟',
'萇' => '苌',
'萊' => '莱',
'萬' => '万',
+'萲' => '萱',
'萴' => '荝',
'萵' => '莴',
'葉' => '叶',
'葒' => '荭',
+'葠' => '参',
'葤' => '荮',
'葦' => '苇',
+'葯' => '药',
'葷' => '荤',
+'蒓' => '莼',
'蒔' => '莳',
'蒞' => '莅',
'蒼' => '苍',
'蓀' => '荪',
+'蓆' => '席',
'蓋' => '盖',
+'蓡' => '参',
'蓮' => '莲',
'蓯' => '苁',
'蓴' => '莼',
'蓽' => '荜',
+'蔔' => '卜',
+'蔕' => '蒂',
'蔘' => '参',
'蔞' => '蒌',
'蔣' => '蒋',
@@ -11570,11 +11317,13 @@ $zh2Hans = array(
'蕓' => '芸',
'蕕' => '莸',
'蕘' => '荛',
+'蕚' => '萼',
'蕢' => '蒉',
'蕩' => '荡',
'蕪' => '芜',
'蕭' => '萧',
'蕷' => '蓣',
+'蕿' => '萱',
'薀' => '蕰',
'薈' => '荟',
'薊' => '蓟',
@@ -11593,17 +11342,24 @@ $zh2Hans = array(
'藝' => '艺',
'藥' => '药',
'藪' => '薮',
+'藭' => '䓖',
+'藴' => '蕴',
'藶' => '苈',
+'藷' => '薯',
'藹' => '蔼',
'藺' => '蔺',
+'藼' => '萱',
+'蘀' => '萚',
'蘄' => '蕲',
'蘆' => '芦',
'蘇' => '苏',
'蘊' => '蕴',
-'蘋' => '苹',
+'蘐' => '萱',
+'蘓' => '苏',
'蘚' => '藓',
'蘞' => '蔹',
'蘢' => '茏',
+'蘤' => '花',
'蘭' => '兰',
'蘺' => '蓠',
'蘿' => '萝',
@@ -11614,20 +11370,32 @@ $zh2Hans = array(
'號' => '号',
'虧' => '亏',
'虯' => '虬',
+'蚘' => '蛔',
+'蛕' => '蛔',
'蛺' => '蛱',
'蛻' => '蜕',
'蜆' => '蚬',
+'蜋' => '螂',
+'蜖' => '蛔',
+'蜨' => '蝶',
'蝕' => '蚀',
'蝟' => '猬',
'蝦' => '虾',
+'蝨' => '虱',
+'蝯' => '猿',
+'蝱' => '虻',
'蝸' => '蜗',
'螄' => '蛳',
+'螎' => '融',
'螞' => '蚂',
+'螡' => '蚊',
'螢' => '萤',
'螮' => '䗖',
'螻' => '蝼',
'螿' => '螀',
+'蟁' => '蚊',
'蟄' => '蛰',
+'蟇' => '蟆',
'蟈' => '蝈',
'蟎' => '螨',
'蟣' => '虮',
@@ -11640,37 +11408,53 @@ $zh2Hans = array(
'蠅' => '蝇',
'蠆' => '虿',
'蠍' => '蝎',
+'蠏' => '蟹',
'蠐' => '蛴',
'蠑' => '蝾',
+'蠒' => '茧',
+'蠔' => '蚝',
'蠟' => '蜡',
'蠣' => '蛎',
'蠨' => '蟏',
+'蠭' => '蜂',
'蠱' => '蛊',
'蠶' => '蚕',
'蠻' => '蛮',
+'衂' => '衄',
+'衆' => '众',
+'衇' => '脉',
'衊' => '蔑',
'術' => '术',
'衕' => '同',
+'衖' => '弄',
'衚' => '胡',
'衛' => '卫',
'衝' => '冲',
+'衞' => '卫',
+'衺' => '邪',
'袞' => '衮',
+'袟' => '帙',
+'袵' => '衽',
'裊' => '袅',
+'裌' => '袷',
'裏' => '里',
'補' => '补',
'裝' => '装',
+'裠' => '裙',
'裡' => '里',
'製' => '制',
'複' => '复',
'褌' => '裈',
'褘' => '袆',
+'褭' => '袅',
'褲' => '裤',
'褳' => '裢',
'褸' => '褛',
'褻' => '亵',
'襀' => '𫌀',
-'襆' => '幞',
+'襃' => '褒',
'襉' => '裥',
+'襍' => '杂',
'襏' => '袯',
'襖' => '袄',
'襝' => '裣',
@@ -11681,15 +11465,20 @@ $zh2Hans = array(
'襯' => '衬',
'襲' => '袭',
'襴' => '襕',
+'覇' => '霸',
+'覈' => '核',
+'覊' => '羁',
'見' => '见',
'覎' => '觃',
'規' => '规',
'覓' => '觅',
+'覔' => '觅',
'視' => '视',
'覘' => '觇',
'覡' => '觋',
'覥' => '觍',
'覦' => '觎',
+'覩' => '睹',
'親' => '亲',
'覬' => '觊',
'覯' => '觏',
@@ -11700,6 +11489,8 @@ $zh2Hans = array(
'覽' => '览',
'覿' => '觌',
'觀' => '观',
+'觔' => '斤',
+'觝' => '抵',
'觴' => '觞',
'觶' => '觯',
'觸' => '触',
@@ -11732,12 +11523,12 @@ $zh2Hans = array(
'訶' => '诃',
'診' => '诊',
'註' => '注',
+'証' => '证',
'詀' => '𧮪',
'詁' => '诂',
'詆' => '诋',
'詎' => '讵',
'詐' => '诈',
-'詑' => '𫍟',
'詒' => '诒',
'詔' => '诏',
'評' => '评',
@@ -11761,6 +11552,7 @@ $zh2Hans = array(
'該' => '该',
'詳' => '详',
'詵' => '诜',
+'詶' => '酬',
'詼' => '诙',
'詿' => '诖',
'誄' => '诔',
@@ -11772,6 +11564,7 @@ $zh2Hans = array(
'誑' => '诳',
'誒' => '诶',
'誕' => '诞',
+'誖' => '悖',
'誘' => '诱',
'誚' => '诮',
'語' => '语',
@@ -11783,6 +11576,7 @@ $zh2Hans = array(
'誦' => '诵',
'誨' => '诲',
'說' => '说',
+'説' => '说',
'誰' => '谁',
'課' => '课',
'誶' => '谇',
@@ -11805,13 +11599,14 @@ $zh2Hans = array(
'諜' => '谍',
'諝' => '谞',
'諞' => '谝',
+'諡' => '谥',
'諢' => '诨',
'諤' => '谔',
'諦' => '谛',
'諧' => '谐',
'諫' => '谏',
'諭' => '谕',
-'諮' => '咨',
+'諮' => '谘',
'諰' => '𫍰',
'諱' => '讳',
'諳' => '谙',
@@ -11827,6 +11622,7 @@ $zh2Hans = array(
'謄' => '誊',
'謅' => '诌',
'謊' => '谎',
+'謌' => '歌',
'謎' => '谜',
'謏' => '𫍲',
'謐' => '谧',
@@ -11838,21 +11634,28 @@ $zh2Hans = array(
'講' => '讲',
'謝' => '谢',
'謠' => '谣',
+'謡' => '谣',
'謨' => '谟',
'謫' => '谪',
'謬' => '谬',
+'謭' => '谫',
'謳' => '讴',
'謹' => '谨',
'謾' => '谩',
+'譁' => '哗',
+'譆' => '嘻',
'證' => '证',
'譊' => '𫍢',
+'譌' => '讹',
'譎' => '谲',
'譏' => '讥',
+'譔' => '撰',
'譖' => '谮',
'識' => '识',
'譙' => '谯',
'譚' => '谭',
'譜' => '谱',
+'譟' => '噪',
'譫' => '谵',
'譭' => '毁',
'譯' => '译',
@@ -11863,10 +11666,12 @@ $zh2Hans = array(
'譽' => '誉',
'譾' => '谫',
'讀' => '读',
+'讁' => '谪',
'變' => '变',
'讋' => '詟',
'讌' => '䜩',
'讎' => '仇',
+'讐' => '雠',
'讒' => '谗',
'讓' => '让',
'讕' => '谰',
@@ -11877,11 +11682,14 @@ $zh2Hans = array(
'豈' => '岂',
'豎' => '竖',
'豐' => '丰',
+'豓' => '艳',
'豔' => '艳',
'豬' => '猪',
'豶' => '豮',
+'貍' => '狸',
'貓' => '猫',
'貙' => '䝙',
+'貛' => '獾',
'貝' => '贝',
'貞' => '贞',
'貟' => '贠',
@@ -11915,6 +11723,7 @@ $zh2Hans = array(
'賅' => '赅',
'資' => '资',
'賈' => '贾',
+'賉' => '恤',
'賊' => '贼',
'賑' => '赈',
'賒' => '赊',
@@ -11922,6 +11731,7 @@ $zh2Hans = array(
'賕' => '赇',
'賙' => '赒',
'賚' => '赉',
+'賛' => '赞',
'賜' => '赐',
'賞' => '赏',
'賟' => '𧹖',
@@ -11933,11 +11743,13 @@ $zh2Hans = array(
'賦' => '赋',
'賧' => '赕',
'質' => '质',
+'賫' => '赍',
'賬' => '账',
'賭' => '赌',
'賰' => '䞐',
'賴' => '赖',
'賵' => '赗',
+'賷' => '赍',
'賺' => '赚',
'賻' => '赙',
'購' => '购',
@@ -11949,26 +11761,41 @@ $zh2Hans = array(
'贇' => '赟',
'贈' => '赠',
'贊' => '赞',
+'贋' => '赝',
'贍' => '赡',
'贏' => '赢',
'贐' => '赆',
+'贑' => '赣',
'贓' => '赃',
'贔' => '赑',
'贖' => '赎',
'贗' => '赝',
'贛' => '赣',
+'贜' => '赃',
'赬' => '赪',
+'趂' => '趁',
'趕' => '赶',
'趙' => '赵',
'趨' => '趋',
'趲' => '趱',
'跡' => '迹',
+'跥' => '跺',
+'跴' => '踩',
+'踁' => '胫',
'踐' => '践',
+'踫' => '碰',
+'踰' => '逾',
'踴' => '踊',
'蹌' => '跄',
+'蹏' => '蹄',
+'蹔' => '暂',
'蹕' => '跸',
+'蹟' => '迹',
+'蹠' => '跖',
'蹣' => '蹒',
'蹤' => '踪',
+'蹧' => '糟',
+'蹵' => '蹴',
'蹺' => '跷',
'蹻' => '𫏋',
'躂' => '跶',
@@ -11987,6 +11814,9 @@ $zh2Hans = array(
'躥' => '蹿',
'躦' => '躜',
'躪' => '躏',
+'躭' => '耽',
+'躳' => '躬',
+'躶' => '裸',
'軀' => '躯',
'軉' => '𨉗',
'車' => '车',
@@ -12022,6 +11852,7 @@ $zh2Hans = array(
'輔' => '辅',
'輕' => '轻',
'輗' => '𫐐',
+'輙' => '辄',
'輛' => '辆',
'輜' => '辎',
'輝' => '辉',
@@ -12032,11 +11863,13 @@ $zh2Hans = array(
'輩' => '辈',
'輪' => '轮',
'輬' => '辌',
+'輭' => '软',
'輮' => '𫐓',
'輯' => '辑',
'輳' => '辏',
'輸' => '输',
'輻' => '辐',
+'輼' => '辒',
'輾' => '辗',
'輿' => '舆',
'轀' => '辒',
@@ -12053,17 +11886,27 @@ $zh2Hans = array(
'轢' => '轹',
'轣' => '𫐆',
'轤' => '轳',
+'辠' => '罪',
+'辢' => '辣',
+'辤' => '辞',
'辦' => '办',
'辭' => '辞',
'辮' => '辫',
'辯' => '辩',
'農' => '农',
+'辳' => '农',
'迴' => '回',
+'迻' => '移',
+'逈' => '迥',
'逕' => '迳',
'這' => '这',
'連' => '连',
+'逥' => '回',
+'逩' => '奔',
+'逬' => '迸',
'週' => '周',
'進' => '进',
+'遉' => '侦',
'遊' => '游',
'運' => '运',
'過' => '过',
@@ -12075,7 +11918,9 @@ $zh2Hans = array(
'遠' => '远',
'遡' => '溯',
'適' => '适',
+'遯' => '遁',
'遲' => '迟',
+'遶' => '绕',
'遷' => '迁',
'選' => '选',
'遺' => '遗',
@@ -12102,6 +11947,11 @@ $zh2Hans = array(
'鄺' => '邝',
'酇' => '酂',
'酈' => '郦',
+'酖' => '鸩',
+'酧' => '酬',
+'醃' => '腌',
+'醆' => '盏',
+'醕' => '醇',
'醜' => '丑',
'醞' => '酝',
'醣' => '糖',
@@ -12109,12 +11959,13 @@ $zh2Hans = array(
'醬' => '酱',
'醯' => '酰',
'醱' => '酦',
+'醻' => '酬',
+'醼' => '宴',
'釀' => '酿',
'釁' => '衅',
'釃' => '酾',
'釅' => '酽',
'釋' => '释',
-'釐' => '厘',
'釒' => '钅',
'釓' => '钆',
'釔' => '钇',
@@ -12125,8 +11976,10 @@ $zh2Hans = array(
'針' => '针',
'釣' => '钓',
'釤' => '钐',
+'釦' => '扣',
'釧' => '钏',
'釩' => '钒',
+'釬' => '焊',
'釳' => '𨰿',
'釵' => '钗',
'釷' => '钍',
@@ -12137,11 +11990,13 @@ $zh2Hans = array(
'鈁' => '钫',
'鈃' => '钘',
'鈄' => '钭',
+'鈅' => '钥',
'鈇' => '𫓧',
'鈈' => '钚',
'鈉' => '钠',
'鈋' => '𨱂',
'鈍' => '钝',
+'鈎' => '钩',
'鈐' => '钤',
'鈑' => '钣',
'鈒' => '钑',
@@ -12169,6 +12024,7 @@ $zh2Hans = array(
'鉀' => '钾',
'鉁' => '𨱅',
'鉅' => '钜',
+'鉆' => '钻',
'鉈' => '铊',
'鉉' => '铉',
'鉋' => '铇',
@@ -12179,6 +12035,7 @@ $zh2Hans = array(
'鉚' => '铆',
'鉛' => '铅',
'鉞' => '钺',
+'鉢' => '钵',
'鉤' => '钩',
'鉦' => '钲',
'鉬' => '钼',
@@ -12209,6 +12066,7 @@ $zh2Hans = array(
'銫' => '铯',
'銬' => '铐',
'銱' => '铞',
+'銲' => '焊',
'銳' => '锐',
'銶' => '𨱇',
'銷' => '销',
@@ -12232,6 +12090,7 @@ $zh2Hans = array(
'鋨' => '锇',
'鋩' => '铓',
'鋪' => '铺',
+'鋭' => '锐',
'鋮' => '铖',
'鋯' => '锆',
'鋰' => '锂',
@@ -12263,10 +12122,12 @@ $zh2Hans = array(
'錫' => '锡',
'錮' => '锢',
'錯' => '错',
+'録' => '录',
'錳' => '锰',
'錶' => '表',
'錸' => '铼',
'鍀' => '锝',
+'鍁' => '锨',
'鍃' => '锪',
'鍄' => '𨱉',
'鍆' => '钔',
@@ -12283,13 +12144,15 @@ $zh2Hans = array(
'鍤' => '锸',
'鍥' => '锲',
'鍩' => '锘',
+'鍫' => '锹',
'鍬' => '锹',
'鍮' => '𨱎',
'鍰' => '锾',
+'鍳' => '鉴',
'鍵' => '键',
'鍶' => '锶',
'鍺' => '锗',
-'鍾' => '钟',
+'鍾' => '锺',
'鎂' => '镁',
'鎄' => '锿',
'鎇' => '镅',
@@ -12297,7 +12160,9 @@ $zh2Hans = array(
'鎌' => '镰',
'鎔' => '镕',
'鎖' => '锁',
+'鎗' => '枪',
'鎘' => '镉',
+'鎚' => '锤',
'鎛' => '镈',
'鎝' => '𨱏',
'鎡' => '镃',
@@ -12308,7 +12173,7 @@ $zh2Hans = array(
'鎩' => '铩',
'鎪' => '锼',
'鎬' => '镐',
-'鎭' => '鎮',
+'鎭' => '镇',
'鎮' => '镇',
'鎯' => '𨱍',
'鎰' => '镒',
@@ -12316,6 +12181,8 @@ $zh2Hans = array(
'鎳' => '镍',
'鎵' => '镓',
'鎷' => '𨰾',
+'鎸' => '镌',
+'鎻' => '锁',
'鎿' => '镎',
'鏃' => '镞',
'鏆' => '𨱌',
@@ -12356,6 +12223,7 @@ $zh2Hans = array(
'鐔' => '镡',
'鐘' => '钟',
'鐙' => '镫',
+'鐝' => '镢',
'鐠' => '镨',
'鐥' => '䦅',
'鐦' => '锎',
@@ -12378,14 +12246,18 @@ $zh2Hans = array(
'鑒' => '鉴',
'鑔' => '镲',
'鑕' => '锧',
+'鑚' => '钻',
+'鑛' => '矿',
'鑞' => '镴',
'鑠' => '铄',
'鑣' => '镳',
+'鑤' => '刨',
'鑥' => '镥',
'鑭' => '镧',
'鑰' => '钥',
'鑱' => '镵',
'鑲' => '镶',
+'鑵' => '罐',
'鑷' => '镊',
'鑹' => '镩',
'鑼' => '锣',
@@ -12393,7 +12265,7 @@ $zh2Hans = array(
'鑾' => '銮',
'鑿' => '凿',
'钁' => '镢',
-'镟' => '旋',
+'钂' => '镋',
'長' => '长',
'門' => '门',
'閂' => '闩',
@@ -12412,16 +12284,19 @@ $zh2Hans = array(
'間' => '间',
'閔' => '闵',
'閘' => '闸',
+'閙' => '闹',
'閡' => '阂',
'閣' => '阁',
-'閤' => '合',
+'閤' => '阁',
'閥' => '阀',
+'閧' => '哄',
'閨' => '闺',
'閩' => '闽',
'閫' => '阃',
'閬' => '阆',
'閭' => '闾',
'閱' => '阅',
+'閲' => '阅',
'閶' => '阊',
'閹' => '阉',
'閻' => '阎',
@@ -12431,6 +12306,7 @@ $zh2Hans = array(
'閿' => '阌',
'闃' => '阒',
'闆' => '板',
+'闇' => '暗',
'闈' => '闱',
'闊' => '阔',
'闋' => '阕',
@@ -12442,6 +12318,7 @@ $zh2Hans = array(
'闔' => '阖',
'闕' => '阙',
'闖' => '闯',
+'闚' => '窥',
'關' => '关',
'闞' => '阚',
'闠' => '阓',
@@ -12449,23 +12326,33 @@ $zh2Hans = array(
'闢' => '辟',
'闤' => '阛',
'闥' => '闼',
+'阨' => '厄',
+'阬' => '坑',
+'陗' => '峭',
'陘' => '陉',
+'陜' => '陕',
'陝' => '陕',
-'陞' => '升',
'陣' => '阵',
'陰' => '阴',
'陳' => '陈',
'陸' => '陆',
+'陻' => '堙',
'陽' => '阳',
+'陿' => '狭',
+'隂' => '阴',
+'隄' => '堤',
'隉' => '陧',
'隊' => '队',
'階' => '阶',
'隕' => '陨',
+'隖' => '坞',
'際' => '际',
+'隣' => '邻',
'隨' => '随',
'險' => '险',
'隱' => '隐',
'隴' => '陇',
+'隷' => '隶',
'隸' => '隶',
'隻' => '只',
'雋' => '隽',
@@ -12483,19 +12370,27 @@ $zh2Hans = array(
'霽' => '霁',
'靂' => '雳',
'靄' => '霭',
+'靆' => '叇',
'靈' => '灵',
+'靉' => '叆',
'靚' => '靓',
'靜' => '静',
'靦' => '腼',
'靨' => '靥',
+'靭' => '韧',
+'靱' => '韧',
'鞀' => '鼗',
+'鞌' => '鞍',
'鞏' => '巩',
'鞝' => '绱',
'鞦' => '秋',
+'鞵' => '鞋',
'鞽' => '鞒',
+'鞾' => '靴',
'韁' => '缰',
'韃' => '鞑',
'韆' => '千',
+'韈' => '袜',
'韉' => '鞯',
'韋' => '韦',
'韌' => '韧',
@@ -12503,8 +12398,9 @@ $zh2Hans = array(
'韓' => '韩',
'韙' => '韪',
'韜' => '韬',
-'韝' => '鞲',
'韞' => '韫',
+'韤' => '袜',
+'韮' => '韭',
'韻' => '韵',
'響' => '响',
'頁' => '页',
@@ -12525,6 +12421,7 @@ $zh2Hans = array(
'頗' => '颇',
'領' => '领',
'頜' => '颌',
+'頟' => '额',
'頡' => '颉',
'頤' => '颐',
'頦' => '颏',
@@ -12537,20 +12434,26 @@ $zh2Hans = array(
'頸' => '颈',
'頹' => '颓',
'頻' => '频',
+'頼' => '赖',
+'頽' => '颓',
'顃' => '𩖖',
'顆' => '颗',
+'顇' => '悴',
+'顋' => '腮',
'題' => '题',
'額' => '额',
'顎' => '颚',
'顏' => '颜',
'顒' => '颙',
'顓' => '颛',
+'顔' => '颜',
'願' => '愿',
'顙' => '颡',
'顛' => '颠',
'類' => '类',
'顢' => '颟',
'顥' => '颢',
+'顦' => '憔',
'顧' => '顾',
'顫' => '颤',
'顬' => '颥',
@@ -12574,13 +12477,16 @@ $zh2Hans = array(
'颼' => '飕',
'颾' => '𩙫',
'飀' => '飗',
+'飃' => '飘',
'飄' => '飘',
'飆' => '飙',
'飈' => '飚',
'飛' => '飞',
+'飜' => '翻',
'飠' => '饣',
'飢' => '饥',
'飣' => '饤',
+'飤' => '饲',
'飥' => '饦',
'飩' => '饨',
'飪' => '饪',
@@ -12594,9 +12500,11 @@ $zh2Hans = array(
'飽' => '饱',
'飾' => '饰',
'飿' => '饳',
+'餁' => '饪',
'餃' => '饺',
'餄' => '饸',
'餅' => '饼',
+'餈' => '糍',
'餉' => '饷',
'養' => '养',
'餌' => '饵',
@@ -12609,7 +12517,7 @@ $zh2Hans = array(
'餕' => '馂',
'餖' => '饾',
'餗' => '𫗧',
-'餘' => '余',
+'餘' => '馀',
'餚' => '肴',
'餛' => '馄',
'餜' => '馃',
@@ -12620,12 +12528,14 @@ $zh2Hans = array(
'餭' => '𫗮',
'餱' => '糇',
'餳' => '饧',
-'餵' => '喂',
'餶' => '馉',
'餷' => '馇',
'餸' => '𩠌',
+'餹' => '糖',
'餺' => '馎',
+'餻' => '糕',
'餼' => '饩',
+'餽' => '馈',
'餾' => '馏',
'餿' => '馊',
'饁' => '馌',
@@ -12636,10 +12546,13 @@ $zh2Hans = array(
'饊' => '馓',
'饋' => '馈',
'饌' => '馔',
+'饍' => '膳',
+'饑' => '饥',
'饒' => '饶',
'饗' => '飨',
'饘' => '𫗴',
'饜' => '餍',
+'饝' => '馍',
'饞' => '馋',
'饢' => '馕',
'馬' => '马',
@@ -12651,6 +12564,7 @@ $zh2Hans = array(
'馹' => '驲',
'駁' => '驳',
'駃' => '𫘝',
+'駈' => '驱',
'駎' => '𩧨',
'駐' => '驻',
'駑' => '驽',
@@ -12663,10 +12577,12 @@ $zh2Hans = array(
'駛' => '驶',
'駝' => '驼',
'駟' => '驷',
+'駡' => '骂',
'駢' => '骈',
'駧' => '𩧲',
'駩' => '𩧴',
'駭' => '骇',
+'駮' => '驳',
'駰' => '骃',
'駱' => '骆',
'駶' => '𩧺',
@@ -12681,6 +12597,7 @@ $zh2Hans = array(
'騍' => '骒',
'騎' => '骑',
'騏' => '骐',
+'騐' => '验',
'騔' => '𩨀',
'騖' => '骛',
'騙' => '骗',
@@ -12688,6 +12605,7 @@ $zh2Hans = array(
'騝' => '𩨃',
'騟' => '𩨈',
'騠' => '𫘨',
+'騣' => '鬃',
'騤' => '骙',
'騧' => '䯄',
'騪' => '𩨄',
@@ -12703,7 +12621,7 @@ $zh2Hans = array(
'驁' => '骜',
'驂' => '骖',
'驃' => '骠',
-'驄' => '骢',
+'驄' => '𩨂',
'驅' => '驱',
'驊' => '骅',
'驋' => '𩧯',
@@ -12712,6 +12630,7 @@ $zh2Hans = array(
'驏' => '骣',
'驕' => '骄',
'驗' => '验',
+'驘' => '骡',
'驚' => '惊',
'驛' => '驿',
'驟' => '骤',
@@ -12722,21 +12641,33 @@ $zh2Hans = array(
'驪' => '骊',
'驫' => '骉',
'骯' => '肮',
+'骽' => '腿',
+'骾' => '鲠',
+'髈' => '膀',
'髏' => '髅',
'髒' => '脏',
'體' => '体',
'髕' => '髌',
'髖' => '髋',
+'髣' => '仿',
+'髥' => '髯',
'髮' => '发',
+'髴' => '佛',
+'鬀' => '剃',
'鬆' => '松',
+'鬉' => '鬃',
'鬍' => '胡',
'鬚' => '须',
'鬢' => '鬓',
'鬥' => '斗',
+'鬦' => '斗',
'鬧' => '闹',
'鬨' => '哄',
'鬩' => '阋',
+'鬪' => '斗',
+'鬭' => '斗',
'鬮' => '阄',
+'鬰' => '郁',
'鬱' => '郁',
'鬹' => '鬶',
'魎' => '魉',
@@ -12757,12 +12688,14 @@ $zh2Hans = array(
'鮊' => '鲌',
'鮋' => '鲉',
'鮍' => '鲏',
+'鮎' => '鲇',
'鮐' => '鲐',
'鮑' => '鲍',
'鮒' => '鲋',
'鮓' => '鲊',
'鮚' => '鲒',
'鮜' => '鲘',
+'鮝' => '鲞',
'鮞' => '鲕',
'鮟' => '𩽾',
'鮣' => '䲟',
@@ -12797,6 +12730,7 @@ $zh2Hans = array(
'鯨' => '鲸',
'鯪' => '鲮',
'鯫' => '鲰',
+'鯰' => '鲶',
'鯱' => '𩾇',
'鯴' => '鲺',
'鯶' => '𩽼',
@@ -12812,8 +12746,10 @@ $zh2Hans = array(
'鰌' => '䲡',
'鰍' => '鳅',
'鰏' => '鲾',
+'鰐' => '鳄',
'鰒' => '鳆',
'鰓' => '鳃',
+'鰛' => '鳁',
'鰜' => '鳒',
'鰟' => '鳑',
'鰠' => '鳋',
@@ -12861,6 +12797,7 @@ $zh2Hans = array(
'鳥' => '鸟',
'鳧' => '凫',
'鳩' => '鸠',
+'鳬' => '凫',
'鳲' => '鸤',
'鳳' => '凤',
'鳴' => '鸣',
@@ -12871,6 +12808,7 @@ $zh2Hans = array(
'鴃' => '𫛞',
'鴆' => '鸩',
'鴇' => '鸨',
+'鴈' => '雁',
'鴉' => '鸦',
'鴒' => '鸰',
'鴕' => '鸵',
@@ -12900,6 +12838,7 @@ $zh2Hans = array(
'鵚' => '𪉍',
'鵜' => '鹈',
'鵝' => '鹅',
+'鵞' => '鹅',
'鵠' => '鹄',
'鵡' => '鹉',
'鵪' => '鹌',
@@ -12908,6 +12847,7 @@ $zh2Hans = array(
'鵯' => '鹎',
'鵰' => '雕',
'鵲' => '鹊',
+'鵶' => '鸦',
'鵷' => '鹓',
'鵾' => '鹍',
'鶄' => '䴖',
@@ -12933,8 +12873,10 @@ $zh2Hans = array(
'鶻' => '鹘',
'鶼' => '鹣',
'鶿' => '鹚',
+'鷀' => '鹚',
'鷁' => '鹢',
'鷂' => '鹞',
+'鷄' => '鸡',
'鷈' => '䴘',
'鷊' => '鹝',
'鷓' => '鹧',
@@ -12948,8 +12890,10 @@ $zh2Hans = array(
'鷨' => '𪉊',
'鷫' => '鹔',
'鷯' => '鹩',
+'鷰' => '燕',
'鷲' => '鹫',
'鷳' => '鹇',
+'鷴' => '鹇',
'鷸' => '鹬',
'鷹' => '鹰',
'鷺' => '鹭',
@@ -12959,6 +12903,7 @@ $zh2Hans = array(
'鸇' => '鹯',
'鸋' => '𫛢',
'鸌' => '鹱',
+'鸎' => '莺',
'鸏' => '鹲',
'鸕' => '鸬',
'鸘' => '鹴',
@@ -12969,6 +12914,7 @@ $zh2Hans = array(
'鹵' => '卤',
'鹹' => '咸',
'鹺' => '鹾',
+'鹻' => '碱',
'鹼' => '碱',
'鹽' => '盐',
'麗' => '丽',
@@ -12979,7 +12925,8 @@ $zh2Hans = array(
'麫' => '面',
'麯' => '曲',
'麲' => '𪎉',
-'麴' => '曲',
+'麳' => '𪎌',
+'麴' => '麹',
'麵' => '面',
'麼' => '么',
'麽' => '么',
@@ -12993,10 +12940,12 @@ $zh2Hans = array(
'黷' => '黩',
'黽' => '黾',
'黿' => '鼋',
+'鼃' => '蛙',
+'鼇' => '鳌',
+'鼈' => '鳖',
'鼉' => '鼍',
'鼕' => '冬',
'鼴' => '鼹',
-'齇' => '齄',
'齊' => '齐',
'齋' => '斋',
'齎' => '赍',
@@ -13012,6 +12961,8 @@ $zh2Hans = array(
'齡' => '龄',
'齣' => '出',
'齦' => '龈',
+'齧' => '啮',
+'齩' => '咬',
'齪' => '龊',
'齬' => '龉',
'齲' => '龋',
@@ -13026,28 +12977,47 @@ $zh2Hans = array(
'龜' => '龟',
'龭' => '𩨎',
'龯' => '𨱆',
+'𠇮' => '命',
+'𠌂' => '伞',
'𠌥' => '𠆿',
'𠏢' => '𠉗',
+'𠕂' => '再',
+'𠕅' => '再',
+'𠖇' => '冥',
'𠞆' => '𠛆',
+'𠞰' => '剿',
'𠠎' => '𠚳',
+'𠪾' => '历',
+'𠴟' => '咩',
+'𠻳' => '嗽',
'𡄔' => '𠴢',
'𡄣' => '𠵸',
'𡅏' => '𠲥',
+'𡐨' => '野',
'𡑭' => '𡋗',
'𡓾' => '𡋀',
+'𡚁' => '弊',
'𡞵' => '㛟',
'𡠹' => '㛿',
'𡢃' => '㛠',
+'𡨘' => '冤',
+'𡨥' => '寇',
+'𡬶' => '寻',
'𡮉' => '𡭜',
'𡮣' => '𡭬',
'𡻕' => '岁',
'𡾱' => '㟜',
'𢣚' => '𢘝',
'𢣭' => '𢘞',
+'𢬸' => '括',
+'𢭏' => '捣',
+'𢮥' => '操',
'𢶫' => '𢫞',
+'𢷬' => '捣',
'𢷮' => '𢫊',
'𢹿' => '𢬦',
'𣙎' => '㭣',
+'𣙜' => '榷',
'𣝕' => '𣘷',
'𣞻' => '𣘓',
'𣠲' => '𣑶',
@@ -13055,16 +13025,25 @@ $zh2Hans = array(
'𣾷' => '㳢',
'𣿉' => '𣶫',
'𤁣' => '𣺽',
+'𤋮' => '熙',
'𤒎' => '𤊀',
+'𤨏' => '琐',
'𤪺' => '㻘',
'𤫩' => '㻏',
+'𤰜' => '亩',
+'𤱈' => '亩',
+'𤱊' => '留',
'𤳸' => '𤳄',
'𤸫' => '𤶧',
+'𤺥' => '瘩',
+'𥄨' => '瞅',
'𥌃' => '𥅘',
'𥕥' => '𥐰',
'𥖅' => '𥐯',
'𥢢' => '䅪',
+'𥦗' => '窗',
'𥨐' => '𥧂',
+'𥲻' => '纂',
'𥵃' => '𥱔',
'𥵊' => '𥭉',
'𥸠' => '𥮋',
@@ -13072,10 +13051,18 @@ $zh2Hans = array(
'𥽖' => '𥺇',
'𥿊' => '𦈈',
'𦂅' => '𦈒',
+'𦂳' => '紧',
+'𦃂' => '紧',
'𦃄' => '𦈗',
+'𦉆' => '碴',
+'𦊱' => '挂',
+'𦍑' => '羌',
+'𦕈' => '眇',
'𦢈' => '𣍨',
'𦣎' => '𦟗',
+'𦪙' => '䑽',
'𦪽' => '𦨩',
+'𦵏' => '葬',
'𧔥' => '𧒭',
'𧜗' => '䘞',
'𧜵' => '䙊',
@@ -13117,10 +13104,14 @@ $zh2Hans = array(
'𨶲' => '𨸋',
'𨷲' => '𨸎',
'𨽏' => '𨸘',
+'𨽻' => '隶',
'𩎢' => '𩏾',
'𩏪' => '𩏽',
+'𩓐' => '脖',
'𩓣' => '𩖕',
'𩗀' => '𩙦',
+'𩗗' => '飓',
+'𩗡' => '𩙧',
'𩘀' => '𩙩',
'𩘝' => '𩙭',
'𩘹' => '𩙨',
@@ -13170,6 +13161,7 @@ $zh2Hans = array(
'𩷰' => '𩾄',
'𩸃' => '𩾅',
'𩸦' => '𩾆',
+'𩽇' => '𩾎',
'𩿪' => '𪉄',
'𪀦' => '𪉅',
'𪀾' => '𪉋',
@@ -13181,68 +13173,26 @@ $zh2Hans = array(
'𪄆' => '𪉔',
'𪄕' => '𪉒',
'𪇳' => '𪉕',
+'𪈼' => '𪉓',
'𪋿' => '𪎍',
'𪔵' => '𪔭',
'𪘀' => '𪚏',
'𪘯' => '𪚐',
+'『' => '‘',
+'』' => '’',
+'「' => '“',
+'「' => '“',
+'」' => '”',
+'」' => '”',
+'。陞' => '。升',
'《易乾' => '《易乾',
-'不著痕跡' => '不着痕迹',
-'不著邊際' => '不着边际',
-'與著' => '与着',
-'與著書' => '与著书',
-'與著作' => '与著作',
-'與著名' => '与著名',
-'與著錄' => '与著录',
-'與著稱' => '与著称',
-'與著者' => '与著者',
-'與著述' => '与著述',
-'丑著' => '丑着',
-'丑著书' => '丑著书',
-'丑著書' => '丑著书',
-'丑著作' => '丑著作',
-'丑著名' => '丑著名',
-'丑著录' => '丑著录',
-'丑著錄' => '丑著录',
-'丑著稱' => '丑著称',
-'丑著称' => '丑著称',
-'丑著者' => '丑著者',
-'丑著述' => '丑著述',
+'一釐' => '一厘',
+'一口鍾' => '一口钟',
+'一鍾' => '一钟',
+'上昇' => '上升',
'專著' => '专著',
-'臨著' => '临着',
-'臨著書' => '临著书',
-'臨著作' => '临著作',
-'臨著名' => '临著名',
-'臨著錄' => '临著录',
-'臨著稱' => '临著称',
-'臨著者' => '临著者',
-'臨著述' => '临著述',
-'麗著' => '丽着',
-'麗著書' => '丽著书',
-'麗著作' => '丽著作',
-'麗著名' => '丽著名',
-'麗著錄' => '丽著录',
-'麗著稱' => '丽著称',
-'麗著者' => '丽著者',
-'麗著述' => '丽著述',
-'樂著' => '乐着',
-'樂著書' => '乐著书',
-'樂著作' => '乐著作',
-'樂著名' => '乐著名',
-'樂著錄' => '乐著录',
-'樂著稱' => '乐著称',
-'樂著者' => '乐著者',
-'樂著述' => '乐著述',
-'乘著' => '乘着',
-'乘著书' => '乘著书',
-'乘著書' => '乘著书',
-'乘著作' => '乘著作',
-'乘著名' => '乘著名',
-'乘著录' => '乘著录',
-'乘著錄' => '乘著录',
-'乘著稱' => '乘著称',
-'乘著称' => '乘著称',
-'乘著者' => '乘著者',
-'乘著述' => '乘著述',
+'世界鍾' => '世界钟',
+'喪鍾' => '丧钟',
'乾一坛' => '乾一坛',
'乾一壇' => '乾一坛',
'乾一组' => '乾一组',
@@ -13253,8 +13203,8 @@ $zh2Hans = array(
'乾九' => '乾九',
'乾乾' => '乾乾',
'乾亨' => '乾亨',
-'乾儀' => '乾仪',
'乾仪' => '乾仪',
+'乾儀' => '乾仪',
'乾位' => '乾位',
'乾健' => '乾健',
'乾健也' => '乾健也',
@@ -13262,12 +13212,12 @@ $zh2Hans = array(
'乾光' => '乾光',
'乾兴' => '乾兴',
'乾興' => '乾兴',
-'乾冈' => '乾冈',
'乾岡' => '乾冈',
-'乾劉' => '乾刘',
+'乾冈' => '乾冈',
'乾刘' => '乾刘',
-'乾剛' => '乾刚',
+'乾劉' => '乾刘',
'乾刚' => '乾刚',
+'乾剛' => '乾刚',
'乾務' => '乾务',
'乾务' => '乾务',
'乾化' => '乾化',
@@ -13289,16 +13239,16 @@ $zh2Hans = array(
'乾天也' => '乾天也',
'乾始' => '乾始',
'乾姓' => '乾姓',
-'乾寧' => '乾宁',
'乾宁' => '乾宁',
+'乾寧' => '乾宁',
'乾宅' => '乾宅',
'乾宇' => '乾宇',
'乾安' => '乾安',
'乾定' => '乾定',
'乾封' => '乾封',
'乾居' => '乾居',
-'乾崗' => '乾岗',
'乾岗' => '乾岗',
+'乾崗' => '乾岗',
'乾巛' => '乾巛',
'乾州' => '乾州',
'乾式' => '乾式',
@@ -13309,46 +13259,47 @@ $zh2Hans = array(
'乾心' => '乾心',
'乾忠' => '乾忠',
'乾文' => '乾文',
-'乾斷' => '乾断',
'乾断' => '乾断',
+'乾斷' => '乾断',
'乾方' => '乾方',
'乾施' => '乾施',
'乾旦' => '乾旦',
'乾明' => '乾明',
'乾昧' => '乾昧',
-'乾晖' => '乾晖',
'乾暉' => '乾晖',
+'乾晖' => '乾晖',
'乾景' => '乾景',
'乾晷' => '乾晷',
'乾曜' => '乾曜',
-'乾构' => '乾构',
'乾構' => '乾构',
-'乾樞' => '乾枢',
+'乾构' => '乾构',
'乾枢' => '乾枢',
-'乾栋' => '乾栋',
+'乾樞' => '乾枢',
'乾棟' => '乾栋',
+'乾栋' => '乾栋',
'乾步' => '乾步',
'乾氏' => '乾氏',
'乾沓和' => '乾沓和',
'乾沓婆' => '乾沓婆',
'乾泉' => '乾泉',
'乾淳' => '乾淳',
-'乾清宮' => '乾清宫',
-'乾清宫' => '乾清宫',
+'乾清' => '乾清',
'乾渥' => '乾渥',
-'乾靈' => '乾灵',
+'乾潭' => '乾潭',
'乾灵' => '乾灵',
+'乾靈' => '乾灵',
'乾男' => '乾男',
'乾皋' => '乾皋',
'乾盛世' => '乾盛世',
'乾矢' => '乾矢',
'乾祐' => '乾祐',
+'乾神' => '乾神',
'乾穹' => '乾穹',
'乾竇' => '乾窦',
'乾窦' => '乾窦',
'乾竺' => '乾竺',
-'乾篤' => '乾笃',
'乾笃' => '乾笃',
+'乾篤' => '乾笃',
'乾符' => '乾符',
'乾策' => '乾策',
'乾精' => '乾精',
@@ -13358,192 +13309,72 @@ $zh2Hans = array(
'乾纲' => '乾纲',
'乾纽' => '乾纽',
'乾紐' => '乾纽',
-'乾絡' => '乾络',
'乾络' => '乾络',
+'乾絡' => '乾络',
'乾統' => '乾统',
'乾统' => '乾统',
-'乾維' => '乾维',
'乾维' => '乾维',
-'乾羅' => '乾罗',
+'乾維' => '乾维',
'乾罗' => '乾罗',
+'乾羅' => '乾罗',
'乾花' => '乾花',
-'乾蔭' => '乾荫',
'乾荫' => '乾荫',
+'乾蔭' => '乾荫',
'乾行' => '乾行',
'乾衡' => '乾衡',
+'乾西' => '乾西',
'乾覆' => '乾覆',
'乾象' => '乾象',
'乾象歷' => '乾象历',
'乾象历' => '乾象历',
-'乾贞' => '乾贞',
'乾貞' => '乾贞',
+'乾贞' => '乾贞',
+'乾贵士' => '乾贵士',
+'乾貴士' => '乾贵士',
'乾貺' => '乾贶',
'乾贶' => '乾贶',
-'乾车' => '乾车',
'乾車' => '乾车',
-'乾軸' => '乾轴',
+'乾车' => '乾车',
'乾轴' => '乾轴',
+'乾軸' => '乾轴',
'乾通' => '乾通',
'乾造' => '乾造',
'乾道' => '乾道',
-'乾鑒' => '乾鉴',
'乾鉴' => '乾鉴',
-'乾钧' => '乾钧',
+'乾鑒' => '乾鉴',
'乾鈞' => '乾钧',
-'乾闼' => '乾闼',
+'乾钧' => '乾钧',
'乾闥' => '乾闼',
+'乾闼' => '乾闼',
'乾陀' => '乾陀',
'乾陵' => '乾陵',
'乾隆' => '乾隆',
'乾音' => '乾音',
-'乾顾' => '乾顾',
'乾顧' => '乾顾',
-'乾风' => '乾风',
+'乾顾' => '乾顾',
'乾風' => '乾风',
+'乾风' => '乾风',
'乾首' => '乾首',
-'乾馬' => '乾马',
'乾马' => '乾马',
+'乾馬' => '乾马',
'乾鵠' => '乾鹄',
'乾鹄' => '乾鹄',
'乾鵲' => '乾鹊',
'乾鹊' => '乾鹊',
-'乾龍' => '乾龙',
'乾龙' => '乾龙',
+'乾龍' => '乾龙',
'乾,健也' => '乾,健也',
'乾,天也' => '乾,天也',
-'爭著' => '争着',
-'爭著書' => '争著书',
-'爭著作' => '争著作',
-'爭著名' => '争著名',
-'爭著錄' => '争著录',
-'爭著稱' => '争著称',
-'爭著者' => '争著者',
-'爭著述' => '争著述',
'五箇山' => '五箇山',
-'亮著' => '亮着',
-'亮著书' => '亮著书',
-'亮著書' => '亮著书',
-'亮著作' => '亮著作',
-'亮著名' => '亮著名',
-'亮著錄' => '亮著录',
-'亮著录' => '亮著录',
-'亮著称' => '亮著称',
-'亮著稱' => '亮著称',
-'亮著者' => '亮著者',
-'亮著述' => '亮著述',
-'仗著' => '仗着',
-'仗著书' => '仗著书',
-'仗著書' => '仗著书',
-'仗著作' => '仗著作',
-'仗著名' => '仗著名',
-'仗著录' => '仗著录',
-'仗著錄' => '仗著录',
-'仗著稱' => '仗著称',
-'仗著称' => '仗著称',
-'仗著者' => '仗著者',
-'仗著述' => '仗著述',
-'代表著' => '代表着',
-'代表著書' => '代表著书',
-'代表著书' => '代表著书',
-'代表著作' => '代表著作',
-'代表著名' => '代表著名',
-'代表著錄' => '代表著录',
-'代表著录' => '代表著录',
-'代表著称' => '代表著称',
-'代表著稱' => '代表著称',
-'代表著者' => '代表著者',
-'代表著述' => '代表著述',
+'仇讎' => '仇雠',
'以微知著' => '以微知著',
+'以莛叩鍾' => '以莛叩钟',
'仰屋著書' => '仰屋著书',
'彷彿' => '仿佛',
'夥計' => '伙计',
-'傳著' => '传着',
-'傳著書' => '传著书',
-'傳著作' => '传著作',
-'傳著名' => '传著名',
-'傳著錄' => '传著录',
-'傳著稱' => '传著称',
-'傳著者' => '传著者',
-'傳著述' => '传著述',
-'伴著' => '伴着',
-'伴著书' => '伴著书',
-'伴著書' => '伴著书',
-'伴著作' => '伴著作',
-'伴著名' => '伴著名',
-'伴著录' => '伴著录',
-'伴著錄' => '伴著录',
-'伴著稱' => '伴著称',
-'伴著称' => '伴著称',
-'伴著者' => '伴著者',
-'伴著述' => '伴著述',
-'低著' => '低着',
-'低著書' => '低著书',
-'低著书' => '低著书',
-'低著作' => '低著作',
-'低著名' => '低著名',
-'低著录' => '低著录',
-'低著錄' => '低著录',
-'低著稱' => '低著称',
-'低著称' => '低著称',
-'低著者' => '低著者',
-'低著述' => '低著述',
-'住著' => '住着',
-'住著書' => '住著书',
-'住著书' => '住著书',
-'住著作' => '住著作',
-'住著名' => '住著名',
-'住著錄' => '住著录',
-'住著录' => '住著录',
-'住著称' => '住著称',
-'住著稱' => '住著称',
-'住著者' => '住著者',
-'住著述' => '住著述',
'佛頭著糞' => '佛头著粪',
-'侏儸紀' => '侏罗纪',
-'側著' => '侧着',
-'側著書' => '侧著书',
-'側著作' => '侧著作',
-'側著名' => '侧著名',
-'側著錄' => '侧著录',
-'側著稱' => '侧著称',
-'側著者' => '侧著者',
-'側著述' => '侧著述',
-'保護著' => '保护着',
-'保障著' => '保障着',
-'保障著书' => '保障著书',
-'保障著書' => '保障著书',
-'保障著作' => '保障著作',
-'保障著名' => '保障著名',
-'保障著錄' => '保障著录',
-'保障著录' => '保障著录',
-'保障著稱' => '保障著称',
-'保障著称' => '保障著称',
-'保障著者' => '保障著者',
-'保障著述' => '保障著述',
-'信著' => '信着',
-'信著书' => '信著书',
-'信著書' => '信著书',
-'信著作' => '信著作',
-'信著名' => '信著名',
-'信著录' => '信著录',
-'信著錄' => '信著录',
-'信著称' => '信著称',
-'信著稱' => '信著称',
-'信著者' => '信著者',
-'信著述' => '信著述',
-'修鍊' => '修炼',
+'偵蒐' => '侦搜',
'候覆' => '候复',
-'候著' => '候着',
-'候著書' => '候著书',
-'候著书' => '候著书',
-'候著作' => '候著作',
-'候著名' => '候著名',
-'候著录' => '候著录',
-'候著錄' => '候著录',
-'候著稱' => '候著称',
-'候著称' => '候著称',
-'候著者' => '候著者',
-'候著述' => '候著述',
'藉助' => '借助',
'藉口' => '借口',
'藉手' => '借手',
@@ -13551,1082 +13382,183 @@ $zh2Hans = array(
'藉機' => '借机',
'藉此' => '借此',
'藉由' => '借由',
-'借著' => '借着',
-'藉着' => '借着',
-'藉著' => '借着',
'藉端' => '借端',
-'借著書' => '借著书',
-'借著书' => '借著书',
-'借著作' => '借著作',
-'借著名' => '借著名',
-'借著录' => '借著录',
-'借著錄' => '借著录',
-'借著称' => '借著称',
-'借著稱' => '借著称',
-'借著者' => '借著者',
-'借著述' => '借著述',
'藉詞' => '借词',
-'做著' => '做着',
-'做著書' => '做著书',
-'做著书' => '做著书',
-'做著作' => '做著作',
-'做著名' => '做著名',
-'做著錄' => '做著录',
-'做著录' => '做著录',
-'做著稱' => '做著称',
-'做著称' => '做著称',
-'做著者' => '做著者',
-'做著述' => '做著述',
-'偷著' => '偷着',
-'偷著書' => '偷著书',
-'偷著书' => '偷著书',
-'偷著作' => '偷著作',
-'偷著名' => '偷著名',
-'偷著錄' => '偷著录',
-'偷著录' => '偷著录',
-'偷著稱' => '偷著称',
-'偷著称' => '偷著称',
-'偷著者' => '偷著者',
-'偷著述' => '偷著述',
-'傢俬' => '傢俬',
-'僧伽吒' => '僧伽吒',
-'光著' => '光着',
-'光著書' => '光著书',
-'光著书' => '光著书',
-'光著作' => '光著作',
-'光著名' => '光著名',
-'光著錄' => '光著录',
-'光著录' => '光著录',
-'光著稱' => '光著称',
-'光著称' => '光著称',
-'光著者' => '光著者',
-'光著述' => '光著述',
-'關著' => '关着',
-'關著書' => '关著书',
-'關著作' => '关著作',
-'關著名' => '关著名',
-'關著錄' => '关著录',
-'關著稱' => '关著称',
-'關著者' => '关著者',
-'關著述' => '关著述',
-'冀著' => '冀着',
-'冀著書' => '冀著书',
-'冀著书' => '冀著书',
-'冀著作' => '冀著作',
-'冀著名' => '冀著名',
-'冀著錄' => '冀著录',
-'冀著录' => '冀著录',
-'冀著稱' => '冀著称',
-'冀著称' => '冀著称',
-'冀著者' => '冀著者',
-'冀著述' => '冀著述',
-'冒著' => '冒着',
-'冒著书' => '冒著书',
-'冒著書' => '冒著书',
-'冒著作' => '冒著作',
-'冒著名' => '冒著名',
-'冒著录' => '冒著录',
-'冒著錄' => '冒著录',
-'冒著稱' => '冒著称',
-'冒著称' => '冒著称',
-'冒著者' => '冒著者',
-'冒著述' => '冒著述',
-'寫著' => '写着',
-'寫著書' => '写著书',
-'寫著作' => '写著作',
-'寫著名' => '写著名',
-'寫著錄' => '写著录',
-'寫著稱' => '写著称',
-'寫著者' => '写著者',
-'寫著述' => '写著述',
-'涼著' => '凉着',
-'涼著書' => '凉著书',
-'涼著作' => '凉著作',
-'涼著名' => '凉著名',
-'涼著錄' => '凉著录',
-'涼著稱' => '凉著称',
-'涼著者' => '凉著者',
-'涼著述' => '凉著述',
+'先名後姓' => '先名后姓',
+'六么' => '六幺',
+'蘭質薰心' => '兰质薰心',
+'內聯陞' => '内联升',
'憑藉' => '凭借',
-'制著' => '制着',
-'制著书' => '制著书',
-'制著書' => '制著书',
-'制著作' => '制著作',
-'制著名' => '制著名',
-'制著錄' => '制著录',
-'制著录' => '制著录',
-'制著称' => '制著称',
-'制著稱' => '制著称',
-'制著者' => '制著者',
-'制著述' => '制著述',
-'刻著' => '刻着',
-'刻著書' => '刻著书',
-'刻著书' => '刻著书',
-'刻著作' => '刻著作',
-'刻著名' => '刻著名',
-'刻著录' => '刻著录',
-'刻著錄' => '刻著录',
-'刻著稱' => '刻著称',
-'刻著称' => '刻著称',
-'刻著者' => '刻著者',
-'刻著述' => '刻著述',
-'辦著' => '办着',
-'辦著書' => '办著书',
-'辦著作' => '办著作',
-'辦著名' => '办著名',
-'辦著錄' => '办著录',
-'辦著稱' => '办著称',
-'辦著者' => '办著者',
-'辦著述' => '办著述',
-'動著' => '动着',
-'動著書' => '动著书',
-'動著作' => '动著作',
-'動著名' => '动著名',
-'動著錄' => '动著录',
-'動著稱' => '动著称',
-'動著者' => '动著者',
-'動著述' => '动著述',
-'努力著' => '努力着',
-'努力著書' => '努力著书',
-'努力著书' => '努力著书',
-'努力著作' => '努力著作',
-'努力著名' => '努力著名',
-'努力著錄' => '努力著录',
-'努力著录' => '努力著录',
-'努力著称' => '努力著称',
-'努力著稱' => '努力著称',
-'努力著者' => '努力著者',
-'努力著述' => '努力著述',
-'努著' => '努着',
-'努著書' => '努著书',
-'努著书' => '努著书',
-'努著作' => '努著作',
-'努著名' => '努著名',
-'努著錄' => '努著录',
-'努著录' => '努著录',
-'努著称' => '努著称',
-'努著稱' => '努著称',
-'努著者' => '努著者',
-'努著述' => '努著述',
+'分鍾' => '分钟',
+'初昇' => '初升',
+'利欲薰心' => '利欲薰心',
+'刻鍾' => '刻钟',
+'剋了' => '剋了',
+'剋架' => '剋架',
+'剖釐' => '剖厘',
+'千鍾' => '千钟',
+'陞為' => '升为',
+'陞了' => '升了',
+'昇仙' => '升仙',
+'陞任' => '升任',
+'昇華' => '升华',
+'昇天' => '升天',
+'陞官' => '升官',
+'昇平' => '升平',
+'昇汞' => '升汞',
+'陞用' => '升用',
+'陞補' => '升补',
+'陞遷' => '升迁',
+'昇降' => '升降',
'卓著' => '卓著',
-'印著' => '印着',
-'印著书' => '印著书',
-'印著書' => '印著书',
-'印著作' => '印著作',
-'印著名' => '印著名',
-'印著录' => '印著录',
-'印著錄' => '印著录',
-'印著称' => '印著称',
-'印著稱' => '印著称',
-'印著者' => '印著者',
-'印著述' => '印著述',
+'博和託' => '博和讬',
'卷舌' => '卷舌',
-'壓著' => '压着',
-'壓著書' => '压著书',
-'壓著作' => '压著作',
-'壓著名' => '压著名',
-'壓著錄' => '压著录',
-'壓著稱' => '压著称',
-'壓著者' => '压著者',
-'壓著述' => '压著述',
+'歷陞' => '历升',
+'釐改' => '厘改',
+'釐整' => '厘整',
+'釐正' => '厘正',
+'釐毫' => '厘毫',
+'釐清' => '厘清',
+'釐訂' => '厘订',
+'釐革' => '厘革',
+'原子鍾' => '原子钟',
'原著' => '原著',
-'去著' => '去着',
-'去著书' => '去著书',
-'去著書' => '去著书',
-'去著作' => '去著作',
-'去著名' => '去著名',
-'去著录' => '去著录',
-'去著錄' => '去著录',
-'去著稱' => '去著称',
-'去著称' => '去著称',
-'去著者' => '去著者',
-'去著述' => '去著述',
+'又陞' => '又升',
'反反覆覆' => '反反复复',
'反覆' => '反复',
-'受著' => '受着',
-'受著書' => '受著书',
-'受著书' => '受著书',
-'受著作' => '受著作',
-'受著名' => '受著名',
-'受著錄' => '受著录',
-'受著录' => '受著录',
-'受著稱' => '受著称',
-'受著称' => '受著称',
-'受著者' => '受著者',
-'受著述' => '受著述',
-'變著' => '变着',
-'變著書' => '变著书',
-'變著作' => '变著作',
-'變著名' => '变著名',
-'變著錄' => '变著录',
-'變著稱' => '变著称',
-'變著者' => '变著者',
-'變著述' => '变著述',
-'叫著' => '叫着',
-'叫著书' => '叫著书',
-'叫著書' => '叫著书',
-'叫著作' => '叫著作',
-'叫著名' => '叫著名',
-'叫著录' => '叫著录',
-'叫著錄' => '叫著录',
-'叫著称' => '叫著称',
-'叫著稱' => '叫著称',
-'叫著者' => '叫著者',
-'叫著述' => '叫著述',
+'古鍾' => '古钟',
'可穿著' => '可穿著',
-'叱吒' => '叱吒',
-'吃不著' => '吃不着',
-'吃得著' => '吃得着',
-'吃著' => '吃着',
+'台鍾' => '台钟',
'吃衣著飯' => '吃衣著饭',
'合著' => '合著',
+'同陞和' => '同升和',
'名著' => '名著',
-'向著' => '向着',
-'向著書' => '向著书',
-'向著书' => '向著书',
-'向著作' => '向著作',
-'向著名' => '向著名',
-'向著錄' => '向著录',
-'向著录' => '向著录',
-'向著称' => '向著称',
-'向著稱' => '向著称',
-'向著者' => '向著者',
-'向著述' => '向著述',
-'含著' => '含着',
-'含著書' => '含著书',
-'含著书' => '含著书',
-'含著作' => '含著作',
-'含著名' => '含著名',
-'含著錄' => '含著录',
-'含著录' => '含著录',
-'含著称' => '含著称',
-'含著稱' => '含著称',
-'含著者' => '含著者',
-'含著述' => '含著述',
-'聽不著' => '听不着',
-'聽得著' => '听得着',
-'聽著' => '听着',
-'聽著書' => '听著书',
-'聽著作' => '听著作',
-'聽著名' => '听著名',
-'聽著錄' => '听著录',
-'聽著稱' => '听著称',
-'聽著者' => '听著者',
-'聽著述' => '听著述',
-'吴其濬' => '吴其濬',
-'吳其濬' => '吴其濬',
-'吹著' => '吹着',
-'吹著書' => '吹著书',
-'吹著书' => '吹著书',
-'吹著作' => '吹著作',
-'吹著名' => '吹著名',
-'吹著录' => '吹著录',
-'吹著錄' => '吹著录',
-'吹著稱' => '吹著称',
-'吹著称' => '吹著称',
-'吹著者' => '吹著者',
-'吹著述' => '吹著述',
+'吳克羣' => '吴克羣',
'周易乾' => '周易乾',
-'味著' => '味着',
-'味著书' => '味著书',
-'味著書' => '味著书',
-'味著作' => '味著作',
-'味著名' => '味著名',
-'味著录' => '味著录',
-'味著錄' => '味著录',
-'味著称' => '味著称',
-'味著稱' => '味著称',
-'味著者' => '味著者',
-'味著述' => '味著述',
-'呼幺喝六' => '呼幺喝六',
-'響著' => '响着',
-'響著書' => '响著书',
-'響著作' => '响著作',
-'響著名' => '响著名',
-'響著錄' => '响著录',
-'響著稱' => '响著称',
-'響著者' => '响著者',
-'響著述' => '响著述',
-'哪吒' => '哪吒',
-'哭著' => '哭着',
-'哭著書' => '哭著书',
-'哭著书' => '哭著书',
-'哭著作' => '哭著作',
-'哭著名' => '哭著名',
-'哭著錄' => '哭著录',
-'哭著录' => '哭著录',
-'哭著稱' => '哭著称',
-'哭著称' => '哭著称',
-'哭著者' => '哭著者',
-'哭著述' => '哭著述',
-'唱著' => '唱着',
-'唱著书' => '唱著书',
-'唱著書' => '唱著书',
-'唱著作' => '唱著作',
-'唱著名' => '唱著名',
-'唱著录' => '唱著录',
-'唱著錄' => '唱著录',
-'唱著称' => '唱著称',
-'唱著稱' => '唱著称',
-'唱著者' => '唱著者',
-'唱著述' => '唱著述',
-'喝著' => '喝着',
-'喝著书' => '喝著书',
-'喝著書' => '喝著书',
-'喝著作' => '喝著作',
-'喝著名' => '喝著名',
-'喝著录' => '喝著录',
-'喝著錄' => '喝著录',
-'喝著稱' => '喝著称',
-'喝著称' => '喝著称',
-'喝著者' => '喝著者',
-'喝著述' => '喝著述',
-'嗅不著' => '嗅不着',
-'嗅得著' => '嗅得着',
-'嗅著' => '嗅着',
-'嚷著' => '嚷着',
-'嚷著書' => '嚷著书',
-'嚷著书' => '嚷著书',
-'嚷著作' => '嚷著作',
-'嚷著名' => '嚷著名',
-'嚷著錄' => '嚷著录',
-'嚷著录' => '嚷著录',
-'嚷著称' => '嚷著称',
-'嚷著稱' => '嚷著称',
-'嚷著者' => '嚷著者',
-'嚷著述' => '嚷著述',
+'諠譁' => '喧哗',
'回覆' => '回复',
-'因著' => '因着',
-'因著〈' => '因著〈',
-'因著《' => '因著《',
-'因著書' => '因著书',
-'因著书' => '因著书',
-'因著作' => '因著作',
-'因著名' => '因著名',
-'因著錄' => '因著录',
-'因著录' => '因著录',
-'因著稱' => '因著称',
-'因著称' => '因著称',
-'因著者' => '因著者',
-'因著述' => '因著述',
-'困著' => '困着',
-'困著書' => '困著书',
-'困著书' => '困著书',
-'困著作' => '困著作',
-'困著名' => '困著名',
-'困著錄' => '困著录',
-'困著录' => '困著录',
-'困著称' => '困著称',
-'困著稱' => '困著称',
-'困著者' => '困著者',
-'困著述' => '困著述',
-'圍著' => '围着',
-'圍著書' => '围著书',
-'圍著作' => '围著作',
-'圍著名' => '围著名',
-'圍著錄' => '围著录',
-'圍著稱' => '围著称',
-'圍著者' => '围著者',
-'圍著述' => '围著述',
'土著' => '土著',
-'在著' => '在着',
-'在著書' => '在著书',
-'在著书' => '在著书',
-'在著作' => '在著作',
-'在著名' => '在著名',
-'在著錄' => '在著录',
-'在著录' => '在著录',
-'在著稱' => '在著称',
-'在著称' => '在著称',
-'在著者' => '在著者',
-'在著述' => '在著述',
-'坐著' => '坐着',
-'坐著书' => '坐著书',
-'坐著書' => '坐著书',
-'坐著作' => '坐著作',
-'坐著名' => '坐著名',
-'坐著录' => '坐著录',
-'坐著錄' => '坐著录',
-'坐著称' => '坐著称',
-'坐著稱' => '坐著称',
-'坐著者' => '坐著者',
-'坐著述' => '坐著述',
'坤乾' => '坤乾',
-'備著' => '备着',
-'備著書' => '备著书',
-'備著作' => '备著作',
-'備著名' => '备著名',
-'備著錄' => '备著录',
-'備著稱' => '备著称',
-'備著者' => '备著者',
-'備著述' => '备著述',
+'塔鍾' => '塔钟',
+'墨瀋' => '墨渖',
+'壁鍾' => '壁钟',
'覆查' => '复查',
'覆核' => '复核',
-'天道为乾' => '天道为乾',
+'覆检' => '复检',
+'復甦' => '复苏',
+'多鍾' => '多钟',
+'大麴' => '大曲',
+'大鍾' => '大钟',
'天道為乾' => '天道为乾',
-'太閤' => '太阁',
-'夾著' => '夹着',
-'夾著書' => '夹著书',
-'夾著作' => '夹著作',
-'夾著名' => '夹著名',
-'夾著錄' => '夹著录',
-'夾著稱' => '夹著称',
-'夾著者' => '夹著者',
-'夾著述' => '夹著述',
+'天道为乾' => '天道为乾',
'奧區' => '奧区',
-'姓幺' => '姓幺',
+'如瀋' => '如渖',
+'姓么' => '姓幺',
+'子餘' => '子馀',
'字乾生' => '字乾生',
-'存摺' => '存摺',
-'孤著' => '孤着',
-'孤著书' => '孤著书',
-'孤著書' => '孤著书',
-'孤著作' => '孤著作',
-'孤著名' => '孤著名',
-'孤著錄' => '孤著录',
-'孤著录' => '孤著录',
-'孤著称' => '孤著称',
-'孤著稱' => '孤著称',
-'孤著者' => '孤著者',
-'孤著述' => '孤著述',
-'學著' => '学着',
-'學著書' => '学著书',
-'學著作' => '学著作',
-'學著名' => '学著名',
-'學著錄' => '学著录',
-'學著稱' => '学著称',
-'學著者' => '学著者',
-'學著述' => '学著述',
-'守著' => '守着',
-'守著書' => '守著书',
-'守著书' => '守著书',
-'守著作' => '守著作',
-'守著名' => '守著名',
-'守著录' => '守著录',
-'守著錄' => '守著录',
-'守著称' => '守著称',
-'守著稱' => '守著称',
-'守著者' => '守著者',
-'守著述' => '守著述',
-'定著' => '定着',
-'定著書' => '定著书',
-'定著书' => '定著书',
-'定著作' => '定著作',
-'定著名' => '定著名',
-'定著錄' => '定著录',
-'定著录' => '定著录',
-'定著称' => '定著称',
-'定著稱' => '定著称',
-'定著者' => '定著者',
-'定著述' => '定著述',
-'對著' => '对着',
-'對著書' => '对著书',
-'對著作' => '对著作',
-'對著名' => '对著名',
-'對著錄' => '对著录',
-'對著稱' => '对著称',
-'對著者' => '对著者',
-'對著述' => '对著述',
-'尋著' => '寻着',
-'尋著書' => '寻著书',
-'尋著作' => '寻著作',
-'尋著名' => '寻著名',
-'尋著錄' => '寻著录',
-'尋著稱' => '寻著称',
-'尋著者' => '寻著者',
-'尋著述' => '寻著述',
+'孫乾' => '孙乾',
+'孙乾' => '孙乾',
+'宋鍾國' => '宋钟国',
+'宏碁' => '宏碁',
+'官陞' => '官升',
'將軍抽俥' => '将军抽俥',
'將軍抽車' => '将军抽車',
+'爾冬陞' => '尔冬升',
'尼乾陀' => '尼乾陀',
-'展著' => '展着',
-'展著書' => '展著书',
-'展著书' => '展著书',
-'展著作' => '展著作',
-'展著名' => '展著名',
-'展著錄' => '展著录',
-'展著录' => '展著录',
-'展著稱' => '展著称',
-'展著称' => '展著称',
-'展著者' => '展著者',
-'展著述' => '展著述',
-'峯岸南' => '峯岸南',
+'跼促' => '局促',
+'跼限' => '局限',
+'山崩鍾應' => '山崩钟应',
+'崔秀鍾' => '崔秀钟',
'巨著' => '巨著',
-'帶著' => '带着',
-'帶著書' => '带著书',
-'帶著作' => '带著作',
-'帶著名' => '带著名',
-'帶著錄' => '带著录',
-'帶著稱' => '带著称',
-'帶著者' => '带著者',
-'帶著述' => '带著述',
-'幫著' => '帮着',
-'幫著書' => '帮著书',
-'幫著作' => '帮著作',
-'幫著名' => '帮著名',
-'幫著錄' => '帮著录',
-'幫著稱' => '帮著称',
-'幫著者' => '帮著者',
-'幫著述' => '帮著述',
'乾乾淨淨' => '干干净净',
'乾乾脆脆' => '干干脆脆',
'乾泉水' => '干泉水',
-'幹著' => '干着',
+'年陞' => '年升',
'么二三' => '幺二三',
-'幺二三' => '幺二三',
'么元' => '幺元',
-'幺元' => '幺元',
-'幺鳳' => '幺凤',
'么鳳' => '幺凤',
+'么半' => '幺半',
'么半群' => '幺半群',
-'幺半群' => '幺半群',
-'幺廝' => '幺厮',
+'么廝' => '幺厮',
'幺厮' => '幺厮',
-'幺叔' => '幺叔',
'么叔' => '幺叔',
'么媽' => '幺妈',
-'幺媽' => '幺妈',
'么妹' => '幺妹',
-'幺妹' => '幺妹',
'么姓' => '幺姓',
-'幺姓' => '幺姓',
'么姨' => '幺姨',
-'幺姨' => '幺姨',
'么娘' => '幺娘',
-'么孃' => '幺娘',
-'幺娘' => '幺娘',
'幺孃' => '幺娘',
-'幺小' => '幺小',
+'么孃' => '幺娘',
'么小' => '幺小',
-'幺氏' => '幺氏',
+'么弟' => '幺弟',
'么氏' => '幺氏',
'么爸' => '幺爸',
-'幺爸' => '幺爸',
-'幺爹' => '幺爹',
'么爹' => '幺爹',
'么篇' => '幺篇',
-'幺篇' => '幺篇',
'么舅' => '幺舅',
-'幺舅' => '幺舅',
'么蛾子' => '幺蛾子',
-'幺蛾子' => '幺蛾子',
'么謙' => '幺谦',
-'幺謙' => '幺谦',
-'幺麽' => '幺麽',
+'么麽' => '幺麽',
'么麼' => '幺麽',
-'幺麽小丑' => '幺麽小丑',
-'么麼小丑' => '幺麽小丑',
-'庇護著' => '庇护着',
-'應著' => '应着',
-'應著書' => '应著书',
-'應著作' => '应著作',
-'應著名' => '应著名',
-'應著錄' => '应著录',
-'應著稱' => '应著称',
-'應著者' => '应著者',
-'應著述' => '应著述',
+'么麽小丑' => '幺麽小丑',
+'慶餘' => '庆馀',
+'座鍾' => '座钟',
'康乾' => '康乾',
-'康著' => '康着',
-'康著书' => '康著书',
-'康著書' => '康著书',
-'康著作' => '康著作',
-'康著名' => '康著名',
-'康著录' => '康著录',
-'康著錄' => '康著录',
-'康著称' => '康著称',
-'康著稱' => '康著称',
-'康著者' => '康著者',
-'康著述' => '康著述',
-'開著' => '开着',
-'開著書' => '开著书',
-'開著作' => '开著作',
-'開著名' => '开著名',
-'開著錄' => '开著录',
-'開著稱' => '开著称',
-'開著者' => '开著者',
-'開著述' => '开著述',
'張法乾' => '张法乾',
'张法乾' => '张法乾',
-'當著' => '当着',
-'當著書' => '当著书',
-'當著作' => '当著作',
-'當著名' => '当著名',
-'當著錄' => '当著录',
-'當著稱' => '当著称',
-'當著者' => '当著者',
-'當著述' => '当著述',
+'張鍾英' => '张钟英',
'彰明較著' => '彰明较著',
'待覆' => '待复',
-'待著' => '待着',
-'待著书' => '待著书',
-'待著書' => '待著书',
-'待著作' => '待著作',
-'待著名' => '待著名',
-'待著录' => '待著录',
-'待著錄' => '待著录',
-'待著稱' => '待著称',
-'待著称' => '待著称',
-'待著者' => '待著者',
-'待著述' => '待著述',
'後姓' => '後姓',
-'得著' => '得着',
-'得著書' => '得著书',
-'得著书' => '得著书',
-'得著作' => '得著作',
-'得著名' => '得著名',
-'得著錄' => '得著录',
-'得著录' => '得著录',
-'得著稱' => '得著称',
-'得著称' => '得著称',
-'得著者' => '得著者',
-'得著述' => '得著述',
-'循著' => '循着',
-'循著书' => '循著书',
-'循著書' => '循著书',
-'循著作' => '循著作',
-'循著名' => '循著名',
-'循著录' => '循著录',
-'循著錄' => '循著录',
-'循著称' => '循著称',
-'循著稱' => '循著称',
-'循著者' => '循著者',
-'循著述' => '循著述',
-'心著' => '心着',
-'心著书' => '心著书',
-'心著書' => '心著书',
-'心著作' => '心著作',
-'心著名' => '心著名',
-'心著录' => '心著录',
-'心著錄' => '心著录',
-'心著稱' => '心著称',
-'心著称' => '心著称',
-'心著者' => '心著者',
-'心著述' => '心著述',
-'忍著' => '忍着',
-'忍著书' => '忍著书',
-'忍著書' => '忍著书',
-'忍著作' => '忍著作',
-'忍著名' => '忍著名',
-'忍著录' => '忍著录',
-'忍著錄' => '忍著录',
-'忍著稱' => '忍著称',
-'忍著称' => '忍著称',
-'忍著者' => '忍著者',
-'忍著述' => '忍著述',
-'志著' => '志着',
-'志著書' => '志著书',
-'志著书' => '志著书',
-'志著作' => '志著作',
-'志著名' => '志著名',
-'志著錄' => '志著录',
-'志著录' => '志著录',
-'志著称' => '志著称',
-'志著稱' => '志著称',
-'志著者' => '志著者',
-'志著述' => '志著述',
-'忙著' => '忙着',
-'忙著书' => '忙著书',
-'忙著書' => '忙著书',
-'忙著作' => '忙著作',
-'忙著名' => '忙著名',
-'忙著录' => '忙著录',
-'忙著錄' => '忙著录',
-'忙著称' => '忙著称',
-'忙著稱' => '忙著称',
-'忙著者' => '忙著者',
-'忙著述' => '忙著述',
-'懷著' => '怀着',
-'懷著書' => '怀著书',
-'懷著作' => '怀著作',
-'懷著名' => '怀著名',
-'懷著錄' => '怀著录',
-'懷著稱' => '怀著称',
-'懷著者' => '怀著者',
-'懷著述' => '怀著述',
-'急著' => '急着',
-'急著书' => '急著书',
-'急著書' => '急著书',
-'急著作' => '急著作',
-'急著名' => '急著名',
-'急著录' => '急著录',
-'急著錄' => '急著录',
-'急著称' => '急著称',
-'急著稱' => '急著称',
-'急著者' => '急著者',
-'急著述' => '急著述',
-'性著' => '性着',
-'性著书' => '性著书',
-'性著書' => '性著书',
-'性著作' => '性著作',
-'性著名' => '性著名',
-'性著录' => '性著录',
-'性著錄' => '性著录',
-'性著称' => '性著称',
-'性著稱' => '性著称',
-'性著者' => '性著者',
-'性著述' => '性著述',
-'戀著' => '恋着',
-'戀著書' => '恋著书',
-'戀著作' => '恋著作',
-'戀著名' => '恋著名',
-'戀著錄' => '恋著录',
-'戀著稱' => '恋著称',
-'戀著者' => '恋著者',
-'戀著述' => '恋著述',
+'慫慂' => '怂恿',
'恩威並著' => '恩威并著',
-'悠著' => '悠着',
-'悠著書' => '悠著书',
-'悠著书' => '悠著书',
-'悠著作' => '悠著作',
-'悠著名' => '悠著名',
-'悠著錄' => '悠著录',
-'悠著录' => '悠著录',
-'悠著称' => '悠著称',
-'悠著稱' => '悠著称',
-'悠著者' => '悠著者',
-'悠著述' => '悠著述',
-'慣著' => '惯着',
-'慣著書' => '惯著书',
-'慣著作' => '惯著作',
-'慣著名' => '惯著名',
-'慣著錄' => '惯著录',
-'慣著稱' => '惯著称',
-'慣著者' => '惯著者',
-'慣著述' => '惯著述',
-'想著' => '想着',
-'想著書' => '想著书',
-'想著书' => '想著书',
-'想著作' => '想著作',
-'想著名' => '想著名',
-'想著錄' => '想著录',
-'想著录' => '想著录',
-'想著称' => '想著称',
-'想著稱' => '想著称',
-'想著者' => '想著者',
-'想著述' => '想著述',
-'戰著' => '战着',
-'戰著書' => '战著书',
-'戰著作' => '战著作',
-'戰著名' => '战著名',
-'戰著錄' => '战著录',
-'戰著稱' => '战著称',
-'戰著者' => '战著者',
-'戰著述' => '战著述',
-'戴著' => '戴着',
-'戴著書' => '戴著书',
-'戴著书' => '戴著书',
-'戴著作' => '戴著作',
-'戴著名' => '戴著名',
-'戴著錄' => '戴著录',
-'戴著录' => '戴著录',
-'戴著稱' => '戴著称',
-'戴著称' => '戴著称',
-'戴著者' => '戴著者',
-'戴著述' => '戴著述',
-'扎著' => '扎着',
-'扎著書' => '扎著书',
-'扎著书' => '扎著书',
-'扎著作' => '扎著作',
-'扎著名' => '扎著名',
-'扎著錄' => '扎著录',
-'扎著录' => '扎著录',
-'扎著称' => '扎著称',
-'扎著稱' => '扎著称',
-'扎著者' => '扎著者',
-'扎著述' => '扎著述',
-'打著' => '打着',
-'打著書' => '打著书',
-'打著书' => '打著书',
-'打著作' => '打著作',
-'打著名' => '打著名',
-'打著錄' => '打著录',
-'打著录' => '打著录',
-'打著称' => '打著称',
-'打著稱' => '打著称',
-'打著者' => '打著者',
-'打著述' => '打著述',
-'扛著' => '扛着',
-'扛著书' => '扛著书',
-'扛著書' => '扛著书',
-'扛著作' => '扛著作',
-'扛著名' => '扛著名',
-'扛著录' => '扛著录',
-'扛著錄' => '扛著录',
-'扛著称' => '扛著称',
-'扛著稱' => '扛著称',
-'扛著者' => '扛著者',
-'扛著述' => '扛著述',
+'噁心' => '恶心',
+'懸鍾' => '悬钟',
+'情蒐' => '情搜',
+'情鍾' => '情钟',
+'惏悷' => '惏悷',
+'惏慄' => '惏慄',
+'慘澹' => '惨淡',
+'成效顯著' => '成效显著',
+'成績顯著' => '成绩显著',
+'所鍾' => '所钟',
+'手鍊' => '手链',
+'扞格' => '扞格',
'執著' => '执著',
'批覆' => '批复',
-'找不著' => '找不着',
-'找得著' => '找得着',
-'抓著' => '抓着',
-'抓著作' => '抓著作',
-'抓著名' => '抓著名',
-'抓著录' => '抓著录',
-'抓著錄' => '抓著录',
-'抓著称' => '抓著称',
-'抓著稱' => '抓著称',
-'抓著者' => '抓著者',
-'抓著述' => '抓著述',
-'護著' => '护着',
-'護著書' => '护著书',
-'護著作' => '护著作',
-'護著名' => '护著名',
-'護著錄' => '护著录',
-'護著稱' => '护著称',
-'護著者' => '护著者',
-'護著述' => '护著述',
-'披著' => '披着',
-'披著书' => '披著书',
-'披著書' => '披著书',
-'披著作' => '披著作',
-'披著名' => '披著名',
-'披著录' => '披著录',
-'披著錄' => '披著录',
-'披著稱' => '披著称',
-'披著称' => '披著称',
-'披著者' => '披著者',
-'披著述' => '披著述',
-'抬著' => '抬着',
-'抬著作' => '抬著作',
-'抬著名' => '抬著名',
-'抬著录' => '抬著录',
-'抬著錄' => '抬著录',
-'抬著稱' => '抬著称',
-'抬著称' => '抬著称',
-'抬著者' => '抬著者',
-'抬著述' => '抬著述',
-'抱著' => '抱着',
-'抱著作' => '抱著作',
-'抱著名' => '抱著名',
-'抱著录' => '抱著录',
-'抱著錄' => '抱著录',
-'抱著稱' => '抱著称',
-'抱著称' => '抱著称',
-'抱著者' => '抱著者',
-'抱著述' => '抱著述',
-'拉著' => '拉着',
-'拉著书' => '拉著书',
-'拉著書' => '拉著书',
-'拉著作' => '拉著作',
-'拉著名' => '拉著名',
-'拉著录' => '拉著录',
-'拉著錄' => '拉著录',
-'拉著称' => '拉著称',
-'拉著稱' => '拉著称',
-'拉著者' => '拉著者',
-'拉著述' => '拉著述',
'拉鍊' => '拉链',
-'拎著' => '拎着',
-'拎著作' => '拎著作',
-'拎著名' => '拎著名',
-'拎著錄' => '拎著录',
-'拎著录' => '拎著录',
-'拎著称' => '拎著称',
-'拎著稱' => '拎著称',
-'拎著者' => '拎著者',
-'拎著述' => '拎著述',
-'拖著' => '拖着',
-'拖著作' => '拖著作',
-'拖著名' => '拖著名',
-'拖著錄' => '拖著录',
-'拖著录' => '拖著录',
-'拖著稱' => '拖著称',
-'拖著称' => '拖著称',
-'拖著者' => '拖著者',
-'拖著述' => '拖著述',
'拙著' => '拙著',
'拚命' => '拚命',
'拚搏' => '拚搏',
'拚死' => '拚死',
-'拼著' => '拼着',
-'拼著作' => '拼著作',
-'拼著名' => '拼著名',
-'拼著录' => '拼著录',
-'拼著錄' => '拼著录',
-'拼著稱' => '拼著称',
-'拼著称' => '拼著称',
-'拼著者' => '拼著者',
-'拼著述' => '拼著述',
-'拿著' => '拿着',
-'拿著作' => '拿著作',
-'拿著名' => '拿著名',
-'拿著录' => '拿著录',
-'拿著錄' => '拿著录',
-'拿著称' => '拿著称',
-'拿著稱' => '拿著称',
-'拿著者' => '拿著者',
-'拿著述' => '拿著述',
-'持著' => '持着',
-'持著作' => '持著作',
-'持著名' => '持著名',
-'持著錄' => '持著录',
-'持著录' => '持著录',
-'持著称' => '持著称',
-'持著稱' => '持著称',
-'持著者' => '持著者',
-'持著述' => '持著述',
-'挑著' => '挑着',
-'挑著作' => '挑著作',
-'挑著名' => '挑著名',
-'挑著錄' => '挑著录',
-'挑著录' => '挑著录',
-'挑著称' => '挑著称',
-'挑著稱' => '挑著称',
-'挑著者' => '挑著者',
-'挑著述' => '挑著述',
-'擋著' => '挡着',
-'擋著作' => '挡著作',
-'擋著名' => '挡著名',
-'擋著錄' => '挡著录',
-'擋著稱' => '挡著称',
-'擋著者' => '挡著者',
-'擋著述' => '挡著述',
-'掙著' => '挣着',
-'掙著書' => '挣著书',
-'掙著作' => '挣著作',
-'掙著名' => '挣著名',
-'掙著錄' => '挣著录',
-'掙著稱' => '挣著称',
-'掙著者' => '挣著者',
-'掙著述' => '挣著述',
-'揮著' => '挥着',
-'揮著作' => '挥著作',
-'揮著名' => '挥著名',
-'揮著錄' => '挥著录',
-'揮著稱' => '挥著称',
-'揮著者' => '挥著者',
-'揮著述' => '挥著述',
-'挨著' => '挨着',
-'挨著作' => '挨著作',
-'挨著名' => '挨著名',
-'挨著錄' => '挨著录',
-'挨著录' => '挨著录',
-'挨著稱' => '挨著称',
-'挨著称' => '挨著称',
-'挨著者' => '挨著者',
-'挨著述' => '挨著述',
-'捆著' => '捆着',
-'捆著作' => '捆著作',
-'捆著名' => '捆著名',
-'捆著錄' => '捆著录',
-'捆著录' => '捆著录',
-'捆著称' => '捆著称',
-'捆著稱' => '捆著称',
-'捆著者' => '捆著者',
-'捆著述' => '捆著述',
-'據著' => '据着',
-'據著書' => '据著书',
-'據著作' => '据著作',
-'據著名' => '据著名',
-'據著錄' => '据著录',
-'據著稱' => '据著称',
-'據著者' => '据著者',
-'據著述' => '据著述',
-'掖著' => '掖着',
-'掖著作' => '掖著作',
-'掖著名' => '掖著名',
-'掖著錄' => '掖著录',
-'掖著录' => '掖著录',
-'掖著稱' => '掖著称',
-'掖著称' => '掖著称',
-'掖著者' => '掖著者',
-'掖著述' => '掖著述',
-'接著' => '接着',
-'接著作' => '接著作',
-'接著名' => '接著名',
-'接著錄' => '接著录',
-'接著录' => '接著录',
-'接著稱' => '接著称',
-'接著称' => '接著称',
-'接著者' => '接著者',
-'接著述' => '接著述',
-'揉著' => '揉着',
-'揉著书' => '揉著书',
-'揉著書' => '揉著书',
-'揉著作' => '揉著作',
-'揉著名' => '揉著名',
-'揉著录' => '揉著录',
-'揉著錄' => '揉著录',
-'揉著称' => '揉著称',
-'揉著稱' => '揉著称',
-'揉著者' => '揉著者',
-'揉著述' => '揉著述',
-'提著' => '提着',
-'提著作' => '提著作',
-'提著名' => '提著名',
-'提著錄' => '提著录',
-'提著录' => '提著录',
-'提著稱' => '提著称',
-'提著称' => '提著称',
-'提著者' => '提著者',
-'提著述' => '提著述',
-'摟著' => '搂着',
-'摟著作' => '搂著作',
-'摟著名' => '搂著名',
-'摟著錄' => '搂著录',
-'摟著稱' => '搂著称',
-'摟著者' => '搂著者',
-'摟著述' => '搂著述',
-'擺著' => '摆着',
-'擺著作' => '摆著作',
-'擺著名' => '摆著名',
-'擺著錄' => '摆著录',
-'擺著稱' => '摆著称',
-'擺著者' => '摆著者',
-'擺著述' => '摆著述',
+'拾瀋' => '拾渖',
+'拿破崙' => '拿破仑',
+'掛鍾' => '挂钟',
+'挨剋' => '挨剋',
+'掩耳盜鍾' => '掩耳盗钟',
+'提昇' => '提升',
+'蒐錄' => '搜录',
+'蒐索' => '搜索',
+'蒐羅' => '搜罗',
+'蒐藏' => '搜藏',
+'蒐證' => '搜证',
+'蒐購' => '搜购',
+'蒐輯' => '搜辑',
+'蒐采' => '搜采',
+'蒐採' => '搜采',
+'蒐集' => '搜集',
+'搥打' => '搥打',
+'搥胸頓足' => '搥胸顿足',
+'擺鍾' => '摆钟',
+'撞鍾' => '撞钟',
'撰著' => '撰著',
-'撼著' => '撼着',
-'撼著書' => '撼著书',
-'撼著书' => '撼著书',
-'撼著作' => '撼著作',
-'撼著名' => '撼著名',
-'撼著錄' => '撼著录',
-'撼著录' => '撼著录',
-'撼著称' => '撼著称',
-'撼著稱' => '撼著称',
-'撼著者' => '撼著者',
-'撼著述' => '撼著述',
-'敞著' => '敞着',
-'敞著作' => '敞著作',
-'敞著名' => '敞著名',
-'敞著錄' => '敞著录',
-'敞著录' => '敞著录',
-'敞著稱' => '敞著称',
-'敞著称' => '敞著称',
-'敞著者' => '敞著者',
-'敞著述' => '敞著述',
-'數著' => '数着',
-'數著作' => '数著作',
-'數著名' => '数著名',
-'數著錄' => '数著录',
-'數著稱' => '数著称',
-'數著者' => '数著者',
-'數著述' => '数著述',
-'斗著' => '斗着',
-'斗著書' => '斗著书',
-'斗著书' => '斗著书',
-'斗著作' => '斗著作',
-'斗著名' => '斗著名',
-'斗著錄' => '斗著录',
-'斗著录' => '斗著录',
-'斗著称' => '斗著称',
-'斗著稱' => '斗著称',
-'斗著者' => '斗著者',
-'斗著述' => '斗著述',
-'斥著' => '斥着',
-'斥著書' => '斥著书',
-'斥著书' => '斥著书',
-'斥著作' => '斥著作',
-'斥著名' => '斥著名',
-'斥著錄' => '斥著录',
-'斥著录' => '斥著录',
-'斥著稱' => '斥著称',
-'斥著称' => '斥著称',
-'斥著者' => '斥著者',
-'斥著述' => '斥著述',
+'效果顯著' => '效果显著',
+'敲鍾' => '敲钟',
+'文徵明' => '文徵明',
'新著' => '新著',
-'新著龍虎門' => '新著龙虎门',
'於世成' => '於世成',
+'於之瑩' => '於之莹',
+'於之莹' => '於之莹',
'於乎' => '於乎',
'於乙于同' => '於乙于同',
'於乙宇同' => '於乙宇同',
@@ -14643,838 +13575,147 @@ $zh2Hans = array(
'於梨華' => '於梨华',
'於梨华' => '於梨华',
'於氏' => '於氏',
-'於潛縣' => '於潜县',
'於潜县' => '於潜县',
+'於潛縣' => '於潜县',
'於祥玉' => '於祥玉',
'於菟' => '於菟',
'於賢德' => '於贤德',
'於除鞬' => '於除鞬',
-'旋乾转坤' => '旋乾转坤',
'旋乾轉坤' => '旋乾转坤',
+'旋乾转坤' => '旋乾转坤',
+'時鍾' => '时钟',
'曠若發矇' => '旷若发矇',
-'昂著' => '昂着',
-'昂著书' => '昂著书',
-'昂著書' => '昂著书',
-'昂著作' => '昂著作',
-'昂著名' => '昂著名',
-'昂著錄' => '昂著录',
-'昂著录' => '昂著录',
-'昂著稱' => '昂著称',
-'昂著称' => '昂著称',
-'昂著者' => '昂著者',
-'昂著述' => '昂著述',
+'崑崙' => '昆仑',
+'崑劇' => '昆剧',
+'崑山' => '昆山',
+'崑曲' => '昆曲',
+'崑腔' => '昆腔',
+'崑蘇' => '昆苏',
+'崑調' => '昆调',
'易·乾' => '易·乾',
-'易經·乾' => '易经·乾',
'易经·乾' => '易经·乾',
-'易經乾' => '易经乾',
+'易經·乾' => '易经·乾',
'易经乾' => '易经乾',
-'映著' => '映着',
-'映著書' => '映著书',
-'映著书' => '映著书',
-'映著作' => '映著作',
-'映著名' => '映著名',
-'映著錄' => '映著录',
-'映著录' => '映著录',
-'映著稱' => '映著称',
-'映著称' => '映著称',
-'映著者' => '映著者',
-'映著述' => '映著述',
+'易經乾' => '易经乾',
'昭著' => '昭著',
'顯著' => '显著',
-'显著' => '显著',
-'晃著' => '晃着',
-'晃著作' => '晃著作',
-'晃著名' => '晃著名',
-'晃著錄' => '晃著录',
-'晃著录' => '晃著录',
-'晃著称' => '晃著称',
-'晃著稱' => '晃著称',
-'晃著者' => '晃著者',
-'晃著述' => '晃著述',
-'暗著' => '暗着',
-'暗著书' => '暗著书',
-'暗著書' => '暗著书',
-'暗著作' => '暗著作',
-'暗著名' => '暗著名',
-'暗著錄' => '暗著录',
-'暗著录' => '暗著录',
-'暗著称' => '暗著称',
-'暗著稱' => '暗著称',
-'暗著者' => '暗著者',
-'暗著述' => '暗著述',
-'有著' => '有着',
-'有著書' => '有著书',
-'有著书' => '有著书',
-'有著作' => '有著作',
-'有著名' => '有著名',
-'有著錄' => '有著录',
-'有著录' => '有著录',
-'有著称' => '有著称',
-'有著稱' => '有著称',
-'有著者' => '有著者',
-'有著述' => '有著述',
-'望著' => '望着',
-'望著作' => '望著作',
-'望著名' => '望著名',
-'望著录' => '望著录',
-'望著錄' => '望著录',
-'望著稱' => '望著称',
-'望著称' => '望著称',
-'望著者' => '望著者',
-'望著述' => '望著述',
+'顯著地' => '显著地',
+'顯著地位' => '显著地位',
+'顯著性' => '显著性',
+'顯著成績' => '显著成绩',
+'顯著效果' => '显著效果',
+'顯著特點' => '显著特点',
+'晉陞' => '晋升',
+'晚鍾' => '晚钟',
+'晨鍾' => '晨钟',
+'暗闇' => '暗闇',
+'麴黴' => '曲霉',
+'曾運乾' => '曾运乾',
+'曾运乾' => '曾运乾',
+'月陞' => '月升',
'朝乾夕惕' => '朝乾夕惕',
-'朝著' => '朝着',
-'朝著作' => '朝著作',
-'朝著名' => '朝著名',
-'朝著录' => '朝著录',
-'朝著錄' => '朝著录',
-'朝著稱' => '朝著称',
-'朝著称' => '朝著称',
-'朝著者' => '朝著者',
-'朝著述' => '朝著述',
-'本著' => '本着',
-'本著书' => '本著书',
-'本著書' => '本著书',
-'本著作' => '本著作',
-'本著名' => '本著名',
-'本著录' => '本著录',
-'本著錄' => '本著录',
-'本著稱' => '本著称',
-'本著称' => '本著称',
-'本著者' => '本著者',
-'本著述' => '本著述',
+'朝鍾暮鼓' => '朝钟暮鼓',
+'朱有燉' => '朱有燉',
+'朱淛' => '朱淛',
'朴於宇同' => '朴於宇同',
-'殺著' => '杀着',
-'殺著書' => '杀著书',
-'殺著作' => '杀著作',
-'殺著名' => '杀著名',
-'殺著錄' => '杀著录',
-'殺著稱' => '杀著称',
-'殺著者' => '杀著者',
-'殺著述' => '杀著述',
-'雜著' => '杂着',
-'雜著書' => '杂著书',
-'雜著作' => '杂著作',
-'雜著名' => '杂著名',
-'雜著錄' => '杂著录',
-'雜著稱' => '杂著称',
-'雜著者' => '杂著者',
-'雜著述' => '杂著述',
'李乾德' => '李乾德',
'李乾順' => '李乾顺',
'李乾顺' => '李乾顺',
'李澤鉅' => '李泽钜',
-'來著' => '来着',
-'來著書' => '来著书',
-'來著作' => '来著作',
-'來著名' => '来著名',
-'來著錄' => '来著录',
-'來著稱' => '来著称',
-'來著者' => '来著者',
-'來著述' => '来著述',
-'楊幺' => '杨幺',
-'枕著' => '枕着',
-'枕著作' => '枕著作',
-'枕著名' => '枕著名',
-'枕著錄' => '枕著录',
-'枕著录' => '枕著录',
-'枕著稱' => '枕著称',
-'枕著称' => '枕著称',
-'枕著者' => '枕著者',
-'枕著述' => '枕著述',
-'柳詒徵' => '柳诒徵',
+'李祕' => '李祕',
+'李譔' => '李譔',
+'李鍾原' => '李钟原',
+'林鍾' => '林钟',
'柳诒徵' => '柳诒徵',
-'標志著' => '标志着',
-'標誌著' => '标志着',
-'夢著' => '梦着',
-'夢著書' => '梦著书',
-'夢著作' => '梦著作',
-'夢著名' => '梦著名',
-'夢著錄' => '梦著录',
-'夢著稱' => '梦著称',
-'夢著者' => '梦著者',
-'夢著述' => '梦著述',
-'梳著' => '梳着',
-'梳著作' => '梳著作',
-'梳著名' => '梳著名',
-'梳著錄' => '梳著录',
-'梳著录' => '梳著录',
-'梳著稱' => '梳著称',
-'梳著称' => '梳著称',
-'梳著者' => '梳著者',
-'梳著述' => '梳著述',
+'柳詒徵' => '柳诒徵',
+'校讎' => '校雠',
+'楈枒' => '楈枒',
'樊於期' => '樊於期',
+'橡椀' => '橡椀',
+'此鍾' => '此钟',
+'殘瀋' => '残渖',
+'慇懃' => '殷勤',
+'慇勤' => '殷勤',
+'比較顯著' => '比较显著',
+'毫釐' => '毫厘',
'氆氌' => '氆氌',
-'求著' => '求着',
-'求著书' => '求著书',
-'求著書' => '求著书',
-'求著作' => '求著作',
-'求著名' => '求著名',
-'求著录' => '求著录',
-'求著錄' => '求著录',
-'求著称' => '求著称',
-'求著稱' => '求著称',
-'求著者' => '求著者',
-'求著述' => '求著述',
'沈沒' => '沉没',
-'沉著' => '沉着',
+'沈澱' => '沉淀',
'沈積' => '沉积',
'沈船' => '沉船',
-'沉著書' => '沉著书',
-'沉著书' => '沉著书',
-'沉著作' => '沉著作',
-'沉著名' => '沉著名',
-'沉著錄' => '沉著录',
-'沉著录' => '沉著录',
-'沉著称' => '沉著称',
-'沉著稱' => '沉著称',
-'沉著者' => '沉著者',
-'沉著述' => '沉著述',
+'沈重' => '沉重',
'沈默' => '沉默',
-'沿著' => '沿着',
-'沿著书' => '沿著书',
-'沿著書' => '沿著书',
-'沿著作' => '沿著作',
-'沿著名' => '沿著名',
-'沿著录' => '沿著录',
-'沿著錄' => '沿著录',
-'沿著稱' => '沿著称',
-'沿著称' => '沿著称',
-'沿著者' => '沿著者',
-'沿著述' => '沿著述',
'氾濫' => '泛滥',
'洗鍊' => '洗练',
-'活著' => '活着',
-'活著书' => '活著书',
-'活著書' => '活著书',
-'活著作' => '活著作',
-'活著名' => '活著名',
-'活著录' => '活著录',
-'活著錄' => '活著录',
-'活著稱' => '活著称',
-'活著称' => '活著称',
-'活著者' => '活著者',
-'活著述' => '活著述',
-'流著' => '流着',
-'流著书' => '流著书',
-'流著書' => '流著书',
-'流著作' => '流著作',
-'流著名' => '流著名',
-'流著录' => '流著录',
-'流著錄' => '流著录',
-'流著稱' => '流著称',
-'流著称' => '流著称',
-'流著者' => '流著者',
-'流著述' => '流著述',
-'流露著' => '流露着',
-'浮著' => '浮着',
-'浮著书' => '浮著书',
-'浮著書' => '浮著书',
-'浮著作' => '浮著作',
-'浮著名' => '浮著名',
-'浮著录' => '浮著录',
-'浮著錄' => '浮著录',
-'浮著稱' => '浮著称',
-'浮著称' => '浮著称',
-'浮著者' => '浮著者',
-'浮著述' => '浮著述',
-'潤著' => '润着',
-'潤著書' => '润著书',
-'潤著作' => '润著作',
-'潤著名' => '润著名',
-'潤著錄' => '润著录',
-'潤著稱' => '润著称',
-'潤著者' => '润著者',
-'潤著述' => '润著述',
-'涵著' => '涵着',
-'涵著书' => '涵著书',
-'涵著書' => '涵著书',
-'涵著作' => '涵著作',
-'涵著名' => '涵著名',
-'涵著录' => '涵著录',
-'涵著錄' => '涵著录',
-'涵著稱' => '涵著称',
-'涵著称' => '涵著称',
-'涵著者' => '涵著者',
-'涵著述' => '涵著述',
-'渴著' => '渴着',
-'渴著书' => '渴著书',
-'渴著書' => '渴著书',
-'渴著作' => '渴著作',
-'渴著名' => '渴著名',
-'渴著录' => '渴著录',
-'渴著錄' => '渴著录',
-'渴著称' => '渴著称',
-'渴著稱' => '渴著称',
-'渴著者' => '渴著者',
-'渴著述' => '渴著述',
-'溢著' => '溢着',
-'溢著書' => '溢著书',
-'溢著书' => '溢著书',
-'溢著作' => '溢著作',
-'溢著名' => '溢著名',
-'溢著錄' => '溢著录',
-'溢著录' => '溢著录',
-'溢著称' => '溢著称',
-'溢著稱' => '溢著称',
-'溢著者' => '溢著者',
-'溢著述' => '溢著述',
-'演著' => '演着',
-'演著书' => '演著书',
-'演著書' => '演著书',
-'演著作' => '演著作',
-'演著名' => '演著名',
-'演著录' => '演著录',
-'演著錄' => '演著录',
-'演著稱' => '演著称',
-'演著称' => '演著称',
-'演著者' => '演著者',
-'演著述' => '演著述',
-'漫著' => '漫着',
-'漫著書' => '漫著书',
-'漫著书' => '漫著书',
-'漫著作' => '漫著作',
-'漫著名' => '漫著名',
-'漫著录' => '漫著录',
-'漫著錄' => '漫著录',
-'漫著称' => '漫著称',
-'漫著稱' => '漫著称',
-'漫著者' => '漫著者',
-'漫著述' => '漫著述',
-'點著' => '点着',
-'點著作' => '点著作',
-'點著名' => '点著名',
-'點著錄' => '点著录',
-'點著稱' => '点著称',
-'點著者' => '点著者',
-'點著述' => '点著述',
-'燒著' => '烧着',
-'燒著作' => '烧著作',
-'燒著名' => '烧著名',
-'燒著錄' => '烧著录',
-'燒著稱' => '烧著称',
-'燒著者' => '烧著者',
-'燒著述' => '烧著述',
-'照著' => '照着',
-'照著书' => '照著书',
-'照著書' => '照著书',
-'照著作' => '照著作',
-'照著名' => '照著名',
-'照著录' => '照著录',
-'照著錄' => '照著录',
-'照著称' => '照著称',
-'照著稱' => '照著称',
-'照著者' => '照著者',
-'照著述' => '照著述',
-'愛護著' => '爱护着',
-'愛著' => '爱着',
-'愛著書' => '爱著书',
-'愛著作' => '爱著作',
-'愛著名' => '爱著名',
-'愛著錄' => '爱著录',
-'愛著稱' => '爱著称',
-'愛著者' => '爱著者',
-'愛著述' => '爱著述',
-'牽著' => '牵着',
-'牽著書' => '牵著书',
-'牽著作' => '牵著作',
-'牽著名' => '牵著名',
-'牽著錄' => '牵著录',
-'牽著稱' => '牵著称',
-'牽著者' => '牵著者',
-'牽著述' => '牵著述',
-'犯不著' => '犯不着',
-'犯得著' => '犯得着',
-'獨著' => '独着',
-'獨著書' => '独著书',
-'獨著作' => '独著作',
-'獨著名' => '独著名',
-'獨著錄' => '独著录',
-'獨著稱' => '独著称',
-'獨著者' => '独著者',
-'獨著述' => '独著述',
-'猜著' => '猜着',
-'猜著書' => '猜着书',
-'猜著作' => '猜著作',
-'猜著名' => '猜著名',
-'猜著錄' => '猜著录',
-'猜著录' => '猜著录',
-'猜著称' => '猜著称',
-'猜著稱' => '猜著称',
-'猜著者' => '猜著者',
-'猜著述' => '猜著述',
+'洪鍾' => '洪钟',
+'瀋液' => '渖液',
+'點鍾' => '点钟',
+'薰習' => '熏习',
+'薰心' => '熏心',
+'薰沐' => '熏沐',
+'薰陶' => '熏陶',
+'薰香' => '熏香',
+'爨翫' => '爨翫',
+'獨鍾' => '独钟',
'王道乾' => '王道乾',
-'玩著' => '玩着',
-'甜著' => '甜着',
-'甜著書' => '甜著书',
-'甜著书' => '甜著书',
-'甜著作' => '甜著作',
-'甜著名' => '甜著名',
-'甜著录' => '甜著录',
-'甜著錄' => '甜著录',
-'甜著稱' => '甜著称',
-'甜著称' => '甜著称',
-'甜著者' => '甜著者',
-'甜著述' => '甜著述',
-'用不著' => '用不着',
-'用得著' => '用得着',
-'用著' => '用着',
-'用著书' => '用著书',
-'用著書' => '用著书',
-'用著作' => '用著作',
-'用著名' => '用著名',
-'用著录' => '用著录',
-'用著錄' => '用著录',
-'用著称' => '用著称',
-'用著稱' => '用著称',
-'用著者' => '用著者',
-'用著述' => '用著述',
+'王餘魚' => '王馀鱼',
+'甚夥' => '甚夥',
+'生物鍾' => '生物钟',
+'電鍾' => '电钟',
+'男為乾' => '男为乾',
'男为乾' => '男为乾',
'男爲乾' => '男为乾',
-'男為乾' => '男为乾',
-'男性為乾' => '男性为乾',
'男性爲乾' => '男性为乾',
+'男性為乾' => '男性为乾',
'男性为乾' => '男性为乾',
-'留著' => '留着',
-'留著書' => '留着书',
-'留著作' => '留著作',
-'留著名' => '留著名',
-'留著錄' => '留著录',
-'留著录' => '留著录',
-'留著稱' => '留著称',
-'留著称' => '留著称',
-'留著者' => '留著者',
-'留著述' => '留著述',
-'疑著' => '疑着',
-'疑著书' => '疑著书',
-'疑著書' => '疑著书',
-'疑著作' => '疑著作',
-'疑著名' => '疑著名',
-'疑著录' => '疑著录',
-'疑著錄' => '疑著录',
-'疑著称' => '疑著称',
-'疑著稱' => '疑著称',
-'疑著者' => '疑著者',
-'疑著述' => '疑著述',
-'癥瘕' => '癥瘕',
-'皺著' => '皱着',
-'皺著書' => '皱著书',
-'皺著作' => '皱著作',
-'皺著名' => '皱著名',
-'皺著錄' => '皱著录',
-'皺著稱' => '皱著称',
-'皺著者' => '皱著者',
-'皺著述' => '皱著述',
-'盛著' => '盛着',
-'盛著书' => '盛著书',
-'盛著書' => '盛著书',
-'盛著作' => '盛著作',
-'盛著名' => '盛著名',
-'盛著錄' => '盛著录',
-'盛著录' => '盛著录',
-'盛著稱' => '盛著称',
-'盛著称' => '盛著称',
-'盛著者' => '盛著者',
-'盛著述' => '盛著述',
-'盯著' => '盯着',
-'盯著書' => '盯着书',
-'盯著作' => '盯著作',
-'盯著名' => '盯著名',
-'盯著錄' => '盯著录',
-'盯著录' => '盯著录',
-'盯著稱' => '盯著称',
-'盯著称' => '盯著称',
-'盯著者' => '盯著者',
-'盯著述' => '盯著述',
-'盾著' => '盾着',
-'盾著書' => '盾著书',
-'盾著书' => '盾著书',
-'盾著作' => '盾著作',
-'盾著名' => '盾著名',
-'盾著錄' => '盾著录',
-'盾著录' => '盾著录',
-'盾著稱' => '盾著称',
-'盾著称' => '盾著称',
-'盾著者' => '盾著者',
-'盾著述' => '盾著述',
-'看不著' => '看不着',
-'看得著' => '看得着',
-'看著' => '看着',
-'看著書' => '看着书',
-'看著作' => '看著作',
-'看著名' => '看著名',
-'看著录' => '看著录',
-'看著錄' => '看著录',
-'看著稱' => '看著称',
-'看著称' => '看著称',
-'看著者' => '看著者',
-'看著述' => '看著述',
-'著業' => '着业',
-'著絲' => '着丝',
-'著么' => '着么',
-'著人' => '着人',
-'著什么急' => '着什么急',
-'著他' => '着他',
-'著令' => '着令',
-'著位' => '着位',
-'著體' => '着体',
-'著你' => '着你',
-'著便' => '着便',
-'著涼' => '着凉',
-'著力' => '着力',
-'著勁' => '着劲',
-'著號' => '着号',
-'著呢' => '着呢',
-'著哩' => '着哩',
-'著地' => '着地',
-'著墨' => '着墨',
-'著聲' => '着声',
-'著處' => '着处',
-'著她' => '着她',
-'著妳' => '着妳',
-'著姓' => '着姓',
-'著它' => '着它',
-'著定' => '着定',
-'著實' => '着实',
-'著己' => '着己',
-'著帳' => '着帐',
-'著床' => '着床',
-'著庸' => '着庸',
-'著式' => '着式',
-'著錄' => '着录',
-'著心' => '着心',
-'著志' => '着志',
-'著忙' => '着忙',
-'著急' => '着急',
-'著惱' => '着恼',
-'著驚' => '着惊',
-'著想' => '着想',
-'著意' => '着意',
-'著慌' => '着慌',
-'著我' => '着我',
-'著手' => '着手',
-'著抹' => '着抹',
-'著摸' => '着摸',
-'著撰' => '着撰',
-'著數' => '着数',
-'著明' => '着明',
-'著末' => '着末',
-'著極' => '着极',
-'著格' => '着格',
-'著棋' => '着棋',
-'著槁' => '着槁',
-'著氣' => '着气',
-'著法' => '着法',
-'著淺' => '着浅',
-'著火' => '着火',
-'著然' => '着然',
-'著甚' => '着甚',
-'著生' => '着生',
-'著疑' => '着疑',
-'著白' => '着白',
-'著相' => '着相',
-'著眼' => '着眼',
-'著著' => '着着',
-'著祂' => '着祂',
-'著積' => '着积',
-'著稿' => '着稿',
-'著筆' => '着笔',
-'著籍' => '着籍',
-'著緊' => '着紧',
-'著緑' => '着緑',
-'著絆' => '着绊',
-'著績' => '着绩',
-'著緋' => '着绯',
-'著綠' => '着绿',
-'著肉' => '着肉',
-'著腳' => '着脚',
-'著艦' => '着舰',
-'著色' => '着色',
-'著節' => '着节',
-'著花' => '着花',
-'著莫' => '着莫',
-'著落' => '着落',
-'著藁' => '着藁',
-'著衣' => '着衣',
-'著裝' => '着装',
-'著要' => '着要',
-'著警' => '着警',
-'著趣' => '着趣',
-'著邊' => '着边',
-'著迷' => '着迷',
-'著跡' => '着迹',
-'著重' => '着重',
-'著録' => '着録',
-'著聞' => '着闻',
-'著陸' => '着陆',
-'著雝' => '着雝',
-'著鞭' => '着鞭',
-'著題' => '着题',
-'著魔' => '着魔',
-'睡不著' => '睡不着',
-'睡得著' => '睡得着',
-'睡著' => '睡着',
-'睡著書' => '睡著书',
-'睡著书' => '睡著书',
-'睡著作' => '睡著作',
-'睡著名' => '睡著名',
-'睡著錄' => '睡著录',
-'睡著录' => '睡著录',
-'睡著称' => '睡著称',
-'睡著稱' => '睡著称',
-'睡著者' => '睡著者',
-'睡著述' => '睡著述',
+'療效顯著' => '疗效显著',
+'白瀋' => '白渖',
+'皁保' => '皁保',
+'目劄' => '目劄',
+'直昇' => '直升',
'睹微知著' => '睹微知著',
-'睪丸' => '睾丸',
-'瞞著' => '瞒着',
-'瞞著書' => '瞒著书',
-'瞞著作' => '瞒著作',
-'瞞著名' => '瞒著名',
-'瞞著錄' => '瞒著录',
-'瞞著稱' => '瞒著称',
-'瞞著者' => '瞒著者',
-'瞞著述' => '瞒著述',
-'瞧著' => '瞧着',
-'瞧著書' => '瞧着书',
-'瞧著作' => '瞧著作',
-'瞧著名' => '瞧著名',
-'瞧著录' => '瞧著录',
-'瞧著錄' => '瞧著录',
-'瞧著称' => '瞧著称',
-'瞧著稱' => '瞧著称',
-'瞧著者' => '瞧著者',
-'瞧著述' => '瞧著述',
-'瞪著' => '瞪着',
-'瞪著書' => '瞪著书',
-'瞪著书' => '瞪著书',
-'瞪著作' => '瞪著作',
-'瞪著名' => '瞪著名',
-'瞪著錄' => '瞪著录',
-'瞪著录' => '瞪著录',
-'瞪著称' => '瞪著称',
-'瞪著稱' => '瞪著称',
-'瞪著者' => '瞪著者',
-'瞪著述' => '瞪著述',
+'瞭臺' => '瞭台',
+'瞭台' => '瞭台',
'瞭望' => '瞭望',
-'石碁镇' => '石碁镇',
+'矇眬' => '矇眬',
+'矇矓' => '矇眬',
+'石碁' => '石碁',
'石碁鎮' => '石碁镇',
-'福著' => '福着',
-'福著书' => '福著书',
-'福著書' => '福著书',
-'福著作' => '福著作',
-'福著名' => '福著名',
-'福著錄' => '福著录',
-'福著录' => '福著录',
-'福著稱' => '福著称',
-'福著称' => '福著称',
-'福著者' => '福著者',
-'福著述' => '福著述',
+'石英鍾' => '石英钟',
+'石鍾乳' => '石钟乳',
+'鹼菜' => '硷菜',
+'碁聖' => '碁圣',
+'碁圣' => '碁圣',
+'碁所' => '碁所',
+'祕宜' => '祕宜',
+'秒鍾' => '秒钟',
'穀梁' => '穀梁',
-'空著' => '空着',
-'空著书' => '空著书',
-'空著書' => '空著书',
-'空著作' => '空著作',
-'空著名' => '空著名',
-'空著录' => '空著录',
-'空著錄' => '空著录',
-'空著称' => '空著称',
-'空著稱' => '空著称',
-'空著者' => '空著者',
-'空著述' => '空著述',
-'穿著' => '穿着',
-'穿著书' => '穿著书',
-'穿著書' => '穿著书',
-'穿著作' => '穿著作',
-'穿著名' => '穿著名',
-'穿著录' => '穿著录',
-'穿著錄' => '穿著录',
-'穿著称' => '穿著称',
-'穿著稱' => '穿著称',
-'穿著者' => '穿著者',
-'穿著述' => '穿著述',
-'豎著' => '竖着',
-'豎著書' => '竖著书',
-'豎著作' => '竖著作',
-'豎著名' => '竖著名',
-'豎著錄' => '竖著录',
-'豎著稱' => '竖著称',
-'豎著者' => '竖著者',
-'豎著述' => '竖著述',
-'站著' => '站着',
-'站著书' => '站著书',
-'站著書' => '站著书',
-'站著作' => '站著作',
-'站著名' => '站著名',
-'站著錄' => '站著录',
-'站著录' => '站著录',
-'站著称' => '站著称',
-'站著稱' => '站著称',
-'站著者' => '站著者',
-'站著述' => '站著述',
-'笑著' => '笑着',
-'笑著书' => '笑著书',
-'笑著書' => '笑著书',
-'笑著作' => '笑著作',
-'笑著名' => '笑著名',
-'笑著录' => '笑著录',
-'笑著錄' => '笑著录',
-'笑著称' => '笑著称',
-'笑著稱' => '笑著称',
-'笑著者' => '笑著者',
-'笑著述' => '笑著述',
+'穿著者' => '穿着者',
+'竹昇' => '竹升',
'答覆' => '答复',
-'管著' => '管着',
-'管著书' => '管著书',
-'管著書' => '管著书',
-'管著作' => '管著作',
-'管著名' => '管著名',
-'管著录' => '管著录',
-'管著錄' => '管著录',
-'管著稱' => '管著称',
-'管著称' => '管著称',
-'管著者' => '管著者',
-'管著述' => '管著述',
-'米澤瑠美' => '米泽瑠美',
'米泽瑠美' => '米泽瑠美',
-'綁著' => '绑着',
-'綁著書' => '绑著书',
-'綁著作' => '绑著作',
-'綁著名' => '绑著名',
-'綁著錄' => '绑著录',
-'綁著稱' => '绑著称',
-'綁著者' => '绑著者',
-'綁著述' => '绑著述',
-'繞著' => '绕着',
-'繞著書' => '绕著书',
-'繞著作' => '绕著作',
-'繞著名' => '绕著名',
-'繞著錄' => '绕著录',
-'繞著稱' => '绕著称',
-'繞著者' => '绕著者',
-'繞著述' => '绕著述',
-'綳著勁' => '绷着劲',
-'綳著臉' => '绷着脸',
+'米瀋' => '米渖',
+'餬口' => '糊口',
+'繙㠾' => '繙㠾',
+'線國安' => '缐国安',
+'線姓' => '缐姓',
'編著' => '编著',
-'纏著' => '缠着',
-'纏著書' => '缠著书',
-'纏著作' => '缠著作',
-'纏著名' => '缠著名',
-'纏著錄' => '缠著录',
-'纏著稱' => '缠著称',
-'纏著者' => '缠著者',
-'纏著述' => '缠著述',
-'罩著' => '罩着',
-'罩著书' => '罩著书',
-'罩著書' => '罩著书',
-'罩著作' => '罩著作',
-'罩著名' => '罩著名',
-'罩著錄' => '罩著录',
-'罩著录' => '罩著录',
-'罩著称' => '罩著称',
-'罩著稱' => '罩著称',
-'罩著者' => '罩著者',
-'罩著述' => '罩著述',
-'美著' => '美着',
-'美著书' => '美著书',
-'美著書' => '美著书',
-'美著作' => '美著作',
-'美著名' => '美著名',
-'美著录' => '美著录',
-'美著錄' => '美著录',
-'美著稱' => '美著称',
-'美著称' => '美著称',
-'美著者' => '美著者',
-'美著述' => '美著述',
-'耀著' => '耀着',
-'耀著書' => '耀著书',
-'耀著书' => '耀著书',
-'耀著作' => '耀著作',
-'耀著名' => '耀著名',
-'耀著錄' => '耀著录',
-'耀著录' => '耀著录',
-'耀著称' => '耀著称',
-'耀著稱' => '耀著称',
-'耀著者' => '耀著者',
-'耀著述' => '耀著述',
-'老幺' => '老幺',
-'考著' => '考着',
-'考著書' => '考著书',
-'考著书' => '考著书',
-'考著作' => '考著作',
-'考著名' => '考著名',
-'考著錄' => '考著录',
-'考著录' => '考著录',
-'考著稱' => '考著称',
-'考著称' => '考著称',
-'考著者' => '考著者',
-'考著述' => '考著述',
+'編鍾' => '编钟',
'肉乾乾' => '肉干干',
'肘手鍊足' => '肘手链足',
-'背著' => '背着',
-'背著书' => '背著书',
-'背著書' => '背著书',
-'背著作' => '背著作',
-'背著名' => '背著名',
-'背著录' => '背著录',
-'背著錄' => '背著录',
-'背著称' => '背著称',
-'背著稱' => '背著称',
-'背著者' => '背著者',
-'背著述' => '背著述',
-'膠著' => '胶着',
-'膠著書' => '胶著书',
-'膠著作' => '胶著作',
-'膠著名' => '胶著名',
-'膠著錄' => '胶著录',
-'膠著稱' => '胶著称',
-'膠著者' => '胶著者',
-'膠著述' => '胶著述',
-'藝著' => '艺着',
-'藝著書' => '艺著书',
-'藝著作' => '艺著作',
-'藝著名' => '艺著名',
-'藝著錄' => '艺著录',
-'藝著稱' => '艺著称',
-'藝著者' => '艺著者',
-'藝著述' => '艺著述',
-'苦著' => '苦着',
-'苦著书' => '苦著书',
-'苦著書' => '苦著书',
-'苦著作' => '苦著作',
-'苦著名' => '苦著名',
-'苦著录' => '苦著录',
-'苦著錄' => '苦著录',
-'苦著稱' => '苦著称',
-'苦著称' => '苦著称',
-'苦著者' => '苦著者',
-'苦著述' => '苦著述',
+'甦醒' => '苏醒',
'苧烯' => '苧烯',
'薴烯' => '苧烯',
-'獲著' => '获着',
-'獲著書' => '获著书',
-'獲著作' => '获著作',
-'獲著名' => '获著名',
-'獲著錄' => '获著录',
-'獲著稱' => '获著称',
-'獲著者' => '获著者',
-'獲著述' => '获著述',
-'蕭乾' => '萧乾',
+'蘋果' => '苹果',
+'荠苧' => '荠苧',
+'榮陞' => '荣升',
'萧乾' => '萧乾',
-'落著' => '落着',
-'落著书' => '落著书',
-'落著書' => '落著书',
-'落著作' => '落著作',
-'落著名' => '落著名',
-'落著录' => '落著录',
-'落著錄' => '落著录',
-'落著稱' => '落著称',
-'落著称' => '落著称',
-'落著者' => '落著者',
-'落著述' => '落著述',
+'蕭乾' => '萧乾',
'著書' => '著书',
'著書立說' => '著书立说',
'著作' => '著作',
'著名' => '著名',
+'著錄' => '著录',
'著錄規則' => '著录规则',
'著文' => '著文',
'著有' => '著有',
@@ -15482,1067 +13723,869 @@ $zh2Hans = array(
'著者' => '著者',
'著身' => '著身',
'著述' => '著述',
-'蒙汗葯' => '蒙汗药',
-'蒙著' => '蒙着',
-'蒙葯' => '蒙药',
-'蒙著書' => '蒙著书',
-'蒙著书' => '蒙著书',
-'蒙著作' => '蒙著作',
-'蒙著名' => '蒙著名',
-'蒙著录' => '蒙著录',
-'蒙著錄' => '蒙著录',
-'蒙著稱' => '蒙著称',
-'蒙著称' => '蒙著称',
-'蒙著者' => '蒙著者',
-'蒙著述' => '蒙著述',
-'藏著' => '藏着',
-'藏著書' => '藏著书',
-'藏著书' => '藏著书',
-'藏著作' => '藏著作',
-'藏著名' => '藏著名',
-'藏著錄' => '藏著录',
-'藏著录' => '藏著录',
-'藏著称' => '藏著称',
-'藏著稱' => '藏著称',
-'藏著者' => '藏著者',
-'藏著述' => '藏著述',
-'蘸著' => '蘸着',
-'蘸著書' => '蘸著书',
-'蘸著书' => '蘸著书',
-'蘸著作' => '蘸著作',
-'蘸著名' => '蘸著名',
-'蘸著录' => '蘸著录',
-'蘸著錄' => '蘸著录',
-'蘸著稱' => '蘸著称',
-'蘸著称' => '蘸著称',
-'蘸著者' => '蘸著者',
-'蘸著述' => '蘸著述',
-'行著' => '行着',
-'行著书' => '行著书',
-'行著書' => '行著书',
-'行著作' => '行著作',
-'行著名' => '行著名',
-'行著录' => '行著录',
-'行著錄' => '行著录',
-'行著稱' => '行著称',
-'行著称' => '行著称',
-'行著者' => '行著者',
-'行著述' => '行著述',
-'衣著' => '衣着',
-'衣著书' => '衣著书',
-'衣著書' => '衣著书',
-'衣著作' => '衣著作',
-'衣著名' => '衣著名',
-'衣著录' => '衣著录',
-'衣著錄' => '衣著录',
-'衣著稱' => '衣著称',
-'衣著称' => '衣著称',
-'衣著者' => '衣著者',
-'衣著述' => '衣著述',
-'裝著' => '装着',
-'裝著書' => '装著书',
-'裝著作' => '装著作',
-'裝著名' => '装著名',
-'裝著錄' => '装著录',
-'裝著稱' => '装著称',
-'裝著者' => '装著者',
-'裝著述' => '装著述',
-'裹著' => '裹着',
-'裹著書' => '裹著书',
-'裹著书' => '裹著书',
-'裹著作' => '裹著作',
-'裹著名' => '裹著名',
-'裹著录' => '裹著录',
-'裹著錄' => '裹著录',
-'裹著称' => '裹著称',
-'裹著稱' => '裹著称',
-'裹著者' => '裹著者',
-'裹著述' => '裹著述',
'覆蓋' => '覆蓋',
'見微知著' => '见微知著',
-'見著' => '见着',
-'見著書' => '见著书',
-'見著作' => '见著作',
-'見著名' => '见著名',
-'見著錄' => '见著录',
-'見著稱' => '见著称',
-'見著者' => '见著者',
-'見著述' => '见著述',
+'見著' => '见著',
'視微知著' => '视微知著',
'言幾析理' => '言幾析理',
-'警戒著' => '警戒着',
-'記著' => '记着',
-'記著書' => '记著书',
-'記著作' => '记著作',
-'記著名' => '记著名',
-'記著錄' => '记著录',
-'記著稱' => '记著称',
-'記著者' => '记著者',
-'記著述' => '记著述',
+'諲譔' => '諲譔',
+'警鍾' => '警钟',
+'譩譆' => '譩譆',
'論著' => '论著',
'譯著' => '译著',
-'試著' => '试着',
-'試著書' => '试著书',
-'試著作' => '试著作',
-'試著名' => '试著名',
-'試著錄' => '试著录',
-'試著稱' => '试著称',
-'試著者' => '试著者',
-'試著述' => '试著述',
-'語著' => '语着',
-'語著書' => '语著书',
-'語著作' => '语著作',
-'語著名' => '语著名',
-'語著錄' => '语著录',
-'語著稱' => '语著称',
-'語著者' => '语著者',
-'語著述' => '语著述',
-'豫著' => '豫着',
-'豫著书' => '豫著书',
-'豫著書' => '豫著书',
-'豫著作' => '豫著作',
-'豫著名' => '豫著名',
-'豫著录' => '豫著录',
-'豫著錄' => '豫著录',
-'豫著称' => '豫著称',
-'豫著稱' => '豫著称',
-'豫著者' => '豫著者',
-'豫著述' => '豫著述',
-'貞著' => '贞着',
-'貞著書' => '贞著书',
-'貞著作' => '贞著作',
-'貞著名' => '贞著名',
-'貞著錄' => '贞著录',
-'貞著稱' => '贞著称',
-'貞著者' => '贞著者',
-'貞著述' => '贞著述',
-'走著' => '走着',
-'走著書' => '走著书',
-'走著书' => '走著书',
-'走著作' => '走著作',
-'走著名' => '走著名',
-'走著錄' => '走著录',
-'走著录' => '走著录',
-'走著稱' => '走著称',
-'走著称' => '走著称',
-'走著者' => '走著者',
-'走著述' => '走著述',
-'趕著' => '赶着',
-'趕著書' => '赶著书',
-'趕著作' => '赶著作',
-'趕著名' => '赶著名',
-'趕著錄' => '赶著录',
-'趕著稱' => '赶著称',
-'趕著者' => '赶著者',
-'趕著述' => '赶著述',
-'趴著' => '趴着',
-'趴著書' => '趴著书',
-'趴著书' => '趴著书',
-'趴著作' => '趴著作',
-'趴著名' => '趴著名',
-'趴著录' => '趴著录',
-'趴著錄' => '趴著录',
-'趴著称' => '趴著称',
-'趴著稱' => '趴著称',
-'趴著者' => '趴著者',
-'趴著述' => '趴著述',
-'躍著' => '跃着',
-'躍著書' => '跃著书',
-'躍著作' => '跃著作',
-'躍著名' => '跃著名',
-'躍著錄' => '跃著录',
-'躍著稱' => '跃著称',
-'躍著者' => '跃著者',
-'躍著述' => '跃著述',
-'跑著' => '跑着',
-'跑著書' => '跑著书',
-'跑著书' => '跑著书',
-'跑著作' => '跑著作',
-'跑著名' => '跑著名',
-'跑著录' => '跑著录',
-'跑著錄' => '跑著录',
-'跑著稱' => '跑著称',
-'跑著称' => '跑著称',
-'跑著者' => '跑著者',
-'跑著述' => '跑著述',
-'跟著' => '跟着',
-'跟著书' => '跟著书',
-'跟著書' => '跟著书',
-'跟著作' => '跟著作',
-'跟著名' => '跟著名',
-'跟著录' => '跟著录',
-'跟著錄' => '跟著录',
-'跟著称' => '跟著称',
-'跟著稱' => '跟著称',
-'跟著者' => '跟著者',
-'跟著述' => '跟著述',
-'跪著' => '跪着',
-'跪著書' => '跪著书',
-'跪著书' => '跪著书',
-'跪著作' => '跪著作',
-'跪著名' => '跪著名',
-'跪著錄' => '跪著录',
-'跪著录' => '跪著录',
-'跪著稱' => '跪著称',
-'跪著称' => '跪著称',
-'跪著者' => '跪著者',
-'跪著述' => '跪著述',
-'跳著' => '跳着',
-'跳著书' => '跳著书',
-'跳著書' => '跳著书',
-'跳著作' => '跳著作',
-'跳著名' => '跳著名',
-'跳著录' => '跳著录',
-'跳著錄' => '跳著录',
-'跳著称' => '跳著称',
-'跳著稱' => '跳著称',
-'跳著者' => '跳著者',
-'跳著述' => '跳著述',
+'謝肇淛' => '谢肇淛',
+'象乾' => '象乾',
'躊躇滿志' => '踌躇滿志',
-'踏著' => '踏着',
-'踏著書' => '踏著书',
-'踏著书' => '踏著书',
-'踏著作' => '踏著作',
-'踏著名' => '踏著名',
-'踏著錄' => '踏著录',
-'踏著录' => '踏著录',
-'踏著称' => '踏著称',
-'踏著稱' => '踏著称',
-'踏著者' => '踏著者',
-'踏著述' => '踏著述',
-'踩著' => '踩着',
-'踩著书' => '踩著书',
-'踩著書' => '踩著书',
-'踩著作' => '踩著作',
-'踩著名' => '踩著名',
-'踩著录' => '踩著录',
-'踩著錄' => '踩著录',
-'踩著稱' => '踩著称',
-'踩著称' => '踩著称',
-'踩著者' => '踩著者',
-'踩著述' => '踩著述',
-'身著' => '身着',
-'身著书' => '身著书',
-'身著書' => '身著书',
-'身著作' => '身著作',
-'身著名' => '身著名',
-'身著录' => '身著录',
-'身著錄' => '身著录',
-'身著稱' => '身著称',
-'身著称' => '身著称',
-'身著者' => '身著者',
-'身著述' => '身著述',
-'躺著' => '躺着',
-'躺著書' => '躺著书',
-'躺著书' => '躺著书',
-'躺著作' => '躺著作',
-'躺著名' => '躺著名',
-'躺著錄' => '躺著录',
-'躺著录' => '躺著录',
-'躺著称' => '躺著称',
-'躺著稱' => '躺著称',
-'躺著者' => '躺著者',
-'躺著述' => '躺著述',
-'轉著' => '转着',
-'轉著書' => '转著书',
-'轉著作' => '转著作',
-'轉著名' => '转著名',
-'轉著錄' => '转著录',
-'轉著稱' => '转著称',
-'轉著者' => '转著者',
-'轉著述' => '转著述',
-'載著' => '载着',
-'載著書' => '载著书',
-'載著作' => '载著作',
-'載著名' => '载著名',
-'載著錄' => '载著录',
-'載著稱' => '载著称',
-'載著者' => '载著者',
-'載著述' => '载著述',
'較著' => '较著',
-'達著' => '达着',
-'達著書' => '达著书',
-'達著作' => '达著作',
-'達著名' => '达著名',
-'達著錄' => '达著录',
-'達著稱' => '达著称',
-'達著者' => '达著者',
-'達著述' => '达著述',
'近角聪信' => '近角聪信',
-'近角聰信' => '近角聪信',
'这么' => '这么',
-'遠著' => '远着',
-'遠著書' => '远著书',
-'遠著作' => '远著作',
-'遠著名' => '远著名',
-'遠著錄' => '远著录',
-'遠著稱' => '远著称',
-'遠著者' => '远著者',
-'遠著述' => '远著述',
-'連著' => '连着',
-'連著書' => '连著书',
-'連著作' => '连著作',
-'連著名' => '连著名',
-'連著錄' => '连著录',
-'連著稱' => '连著称',
-'連著者' => '连著者',
-'連著述' => '连著述',
-'迫著' => '迫着',
-'追著' => '追着',
-'追著書' => '追著书',
-'追著书' => '追著书',
-'追著作' => '追著作',
-'追著名' => '追著名',
-'追著錄' => '追著录',
-'追著录' => '追著录',
-'追著称' => '追著称',
-'追著稱' => '追著称',
-'追著者' => '追著者',
-'追著述' => '追著述',
-'逆著' => '逆着',
-'逆著書' => '逆著书',
-'逆著书' => '逆著书',
-'逆著作' => '逆著作',
-'逆著名' => '逆著名',
-'逆著錄' => '逆著录',
-'逆著录' => '逆著录',
-'逆著称' => '逆著称',
-'逆著稱' => '逆著称',
-'逆著者' => '逆著者',
-'逆著述' => '逆著述',
-'逼著' => '逼着',
-'逼著書' => '逼著书',
-'逼著书' => '逼著书',
-'逼著作' => '逼著作',
-'逼著名' => '逼著名',
-'逼著錄' => '逼著录',
-'逼著录' => '逼著录',
-'逼著称' => '逼著称',
-'逼著稱' => '逼著称',
-'逼著者' => '逼著者',
-'逼著述' => '逼著述',
-'遇著' => '遇着',
-'遇著書' => '遇著书',
-'遇著书' => '遇著书',
-'遇著作' => '遇著作',
-'遇著名' => '遇著名',
-'遇著錄' => '遇著录',
-'遇著录' => '遇著录',
-'遇著稱' => '遇著称',
-'遇著称' => '遇著称',
-'遇著者' => '遇著者',
-'遇著述' => '遇著述',
+'進化鍾' => '进化钟',
+'造麴' => '造曲',
'遺著' => '遗著',
'那麽' => '那麽',
'郭子乾' => '郭子乾',
-'配著' => '配着',
-'配著書' => '配著书',
-'配著书' => '配著书',
-'配著作' => '配著作',
-'配著名' => '配著名',
-'配著錄' => '配著录',
-'配著录' => '配著录',
-'配著稱' => '配著称',
-'配著称' => '配著称',
-'配著者' => '配著者',
-'配著述' => '配著述',
-'釀著' => '酿着',
-'釀著書' => '酿著书',
-'釀著作' => '酿著作',
-'釀著名' => '酿著名',
-'釀著錄' => '酿著录',
-'釀著稱' => '酿著称',
-'釀著者' => '酿著者',
-'釀著述' => '酿著述',
-'醯壺' => '醯壶',
+'郭行餘' => '郭行馀',
+'酒麴' => '酒曲',
+'醉瀋' => '醉渖',
'醯壶' => '醯壶',
-'醯醬' => '醯酱',
+'醯壺' => '醯壶',
'醯酱' => '醯酱',
+'醯醬' => '醯酱',
'醯醋' => '醯醋',
'醯醢' => '醯醢',
'醯鸡' => '醯鸡',
'醯雞' => '醯鸡',
'重覆' => '重复',
+'金尚鍾' => '金尚钟',
+'金民鍾' => '金民钟',
+'金鍾' => '金钟',
'金鍊' => '金链',
+'鍾麗緹' => '钟丽缇',
+'鍾乳石' => '钟乳石',
+'鍾儀奏楚' => '钟仪奏楚',
+'鍾關' => '钟关',
+'鍾聲' => '钟声',
+'鍾頭' => '钟头',
+'鍾山' => '钟山',
+'鍾差' => '钟差',
+'鍾座' => '钟座',
+'鍾情' => '钟情',
+'鍾意' => '钟意',
+'鍾慧冰' => '钟慧冰',
+'鍾擺' => '钟摆',
+'鍾架' => '钟架',
+'鍾楚紅' => '钟楚红',
+'鍾樓' => '钟楼',
+'鍾漢良' => '钟汉良',
+'鍾汶' => '钟汶',
+'鍾淑慧' => '钟淑慧',
+'鍾靈' => '钟灵',
+'鍾點' => '钟点',
+'鍾愛' => '钟爱',
+'鍾琴' => '钟琴',
+'鍾相' => '钟相',
+'鍾祥' => '钟祥',
+'鍾離' => '钟离',
+'鍾表' => '钟表',
+'鍾鎮濤' => '钟镇涛',
+'鍾面' => '钟面',
+'鍾馗' => '钟馗',
+'鍾鳴漏盡' => '钟鸣漏尽',
+'鍾鳴鼎食' => '钟鸣鼎食',
+'鍾鼓' => '钟鼓',
'鐵鍊' => '铁链',
'鉸鍊' => '铰链',
'銀鍊' => '银链',
-'鋪著' => '铺着',
-'鋪著書' => '铺著书',
-'鋪著作' => '铺著作',
-'鋪著名' => '铺著名',
-'鋪著錄' => '铺著录',
-'鋪著稱' => '铺著称',
-'鋪著者' => '铺著者',
-'鋪著述' => '铺著述',
'鍊子' => '链子',
'鍊條' => '链条',
+'鍊表' => '链表',
'鍊鎖' => '链锁',
'鍊錘' => '链锤',
'鎖鍊' => '锁链',
-'鍾鍛' => '锺锻',
-'鍛鍾' => '锻锺',
'閻懷禮' => '闫怀礼',
-'閉著' => '闭着',
-'閉著書' => '闭著书',
-'閉著作' => '闭著作',
-'閉著名' => '闭著名',
-'閉著錄' => '闭著录',
-'閉著稱' => '闭著称',
-'閉著者' => '闭著者',
-'閉著述' => '闭著述',
-'閑著' => '闲着',
-'閑著書' => '闲著书',
-'閑著作' => '闲著作',
-'閑著名' => '闲著名',
-'閑著錄' => '闲著录',
-'閑著稱' => '闲著称',
-'閑著者' => '闲著者',
-'閑著述' => '闲著述',
-'聞不著' => '闻不着',
-'聞得著' => '闻得着',
-'聞著' => '闻着',
+'鬧鍾' => '闹钟',
+'陽為乾' => '阳为乾',
'阳为乾' => '阳为乾',
'陽爲乾' => '阳为乾',
-'陽為乾' => '阳为乾',
'阿部正瞭' => '阿部正瞭',
-'附著' => '附着',
-'附睪' => '附睾',
-'附著书' => '附著书',
-'附著書' => '附著书',
-'附著作' => '附著作',
-'附著名' => '附著名',
-'附著錄' => '附著录',
-'附著录' => '附著录',
-'附著称' => '附著称',
-'附著稱' => '附著称',
-'附著者' => '附著者',
-'附著述' => '附著述',
+'陆徵祥' => '陆徵祥',
+'陸徵祥' => '陆徵祥',
'陈乾生' => '陈乾生',
'陳乾生' => '陈乾生',
+'陈元扞' => '陈元扞',
+'陳元扞' => '陈元扞',
'陈公乾生' => '陈公乾生',
'陳公乾生' => '陈公乾生',
-'陋著' => '陋着',
-'陋著書' => '陋著书',
-'陋著书' => '陋著书',
-'陋著作' => '陋著作',
-'陋著名' => '陋著名',
-'陋著錄' => '陋著录',
-'陋著录' => '陋著录',
-'陋著称' => '陋著称',
-'陋著稱' => '陋著称',
-'陋著者' => '陋著者',
-'陋著述' => '陋著述',
-'陪著' => '陪着',
-'陪著书' => '陪著书',
-'陪著書' => '陪著书',
-'陪著作' => '陪著作',
-'陪著名' => '陪著名',
-'陪著录' => '陪著录',
-'陪著錄' => '陪著录',
-'陪著称' => '陪著称',
-'陪著稱' => '陪著称',
-'陪著者' => '陪著者',
-'陪著述' => '陪著述',
+'陳遇乾' => '陈遇乾',
+'陈遇乾' => '陈遇乾',
'陳堵' => '陳堵',
'陳禕' => '陳禕',
-'隨著' => '随着',
-'隨著書' => '随著书',
-'隨著作' => '随著作',
-'隨著名' => '随著名',
-'隨著錄' => '随著录',
-'隨著稱' => '随著称',
-'隨著者' => '随著者',
-'隨著述' => '随著述',
-'隔著' => '隔着',
-'隔著书' => '隔著书',
-'隔著書' => '隔著书',
-'隔著作' => '隔著作',
-'隔著名' => '隔著名',
-'隔著录' => '隔著录',
-'隔著錄' => '隔著录',
-'隔著称' => '隔著称',
-'隔著稱' => '隔著称',
-'隔著者' => '隔著者',
-'隔著述' => '隔著述',
-'隱睪' => '隱睾',
-'雅著' => '雅着',
-'雅著书' => '雅著书',
-'雅著書' => '雅著书',
-'雅著作' => '雅著作',
-'雅著名' => '雅著名',
-'雅著录' => '雅著录',
-'雅著錄' => '雅著录',
-'雅著称' => '雅著称',
-'雅著稱' => '雅著称',
-'雅著者' => '雅著者',
-'雅著述' => '雅著述',
'雍乾' => '雍乾',
-'靠著' => '靠着',
-'靠著作' => '靠著作',
-'靠著名' => '靠著名',
-'靠著錄' => '靠著录',
-'靠著录' => '靠著录',
-'靠著稱' => '靠著称',
-'靠著称' => '靠著称',
-'靠著者' => '靠著者',
-'靠著述' => '靠著述',
-'頂著' => '顶着',
-'頂著書' => '顶著书',
-'頂著作' => '顶著作',
-'頂著名' => '顶著名',
-'頂著錄' => '顶著录',
-'頂著稱' => '顶著称',
-'頂著者' => '顶著者',
-'頂著述' => '顶著述',
+'讎夷' => '雠夷',
+'讎定' => '雠定',
+'讎校' => '雠校',
+'讎問' => '雠问',
+'音聲如鍾' => '音声如钟',
'項鍊' => '项链',
-'順著' => '顺着',
-'順著書' => '顺著书',
-'順著作' => '顺著作',
-'順著名' => '顺著名',
-'順著錄' => '顺著录',
-'順著稱' => '顺著称',
-'順著者' => '顺著者',
-'順著述' => '顺著述',
-'領著' => '领着',
-'領著書' => '领著书',
-'領著作' => '领著作',
-'領著名' => '领著名',
-'領著錄' => '领著录',
-'領著稱' => '领著称',
-'領著者' => '领著者',
-'領著述' => '领著述',
-'飄著' => '飘着',
-'飄著書' => '飘著书',
-'飄著作' => '飘著作',
-'飄著名' => '飘著名',
-'飄著錄' => '飘著录',
-'飄著稱' => '飘著称',
-'飄著者' => '飘著者',
-'飄著述' => '飘著述',
+'飛昇' => '飞升',
'飭令' => '飭令',
-'駕著' => '驾着',
-'駕著書' => '驾著书',
-'駕著作' => '驾著作',
-'駕著名' => '驾著名',
-'駕著錄' => '驾著录',
-'駕著稱' => '驾著称',
-'駕著者' => '驾著者',
-'駕著述' => '驾著述',
-'罵著' => '骂着',
-'罵著書' => '骂著书',
-'罵著作' => '骂著作',
-'罵著名' => '骂著名',
-'罵著錄' => '骂著录',
-'罵著稱' => '骂著称',
-'罵著者' => '骂著者',
-'罵著述' => '骂著述',
-'騎著' => '骑着',
-'騎著書' => '骑著书',
-'騎著作' => '骑著作',
-'騎著名' => '骑著名',
-'騎著錄' => '骑著录',
-'騎著稱' => '骑著称',
-'騎著者' => '骑著者',
-'騎著述' => '骑著述',
-'騙著' => '骗着',
-'騙著書' => '骗著书',
-'騙著作' => '骗著作',
-'騙著名' => '骗著名',
-'騙著錄' => '骗著录',
-'騙著稱' => '骗著称',
-'騙著者' => '骗著者',
-'騙著述' => '骗著述',
-'高著' => '高着',
-'高著书' => '高著书',
-'高著書' => '高著书',
-'高著作' => '高著作',
-'高著名' => '高著名',
-'高著录' => '高著录',
-'高著錄' => '高著录',
-'高著稱' => '高著称',
-'高著称' => '高著称',
-'高著者' => '高著者',
-'高著述' => '高著述',
-'髭著' => '髭着',
-'髭著书' => '髭著书',
-'髭著書' => '髭著书',
-'髭著作' => '髭著作',
-'髭著名' => '髭著名',
-'髭著錄' => '髭著录',
-'髭著录' => '髭著录',
-'髭著称' => '髭著称',
-'髭著稱' => '髭著称',
-'髭著者' => '髭著者',
-'髭著述' => '髭著述',
+'餘年無多' => '馀年无多',
+'餘慶' => '馀庆',
+'餘瀋' => '馀渖',
+'馬德鍾' => '马德钟',
+'高昇' => '高升',
+'高陞' => '高升',
'鬱姓' => '鬱姓',
'鬱氏' => '鬱氏',
'魏徵' => '魏徵',
'魚乾乾' => '鱼干干',
-'麯崇裕' => '麯崇裕',
-'麴義' => '麴义',
-'麴义' => '麴义',
-'麴英' => '麴英',
+'鳴鍾' => '鸣钟',
'麽氏' => '麽氏',
'麽麽' => '麽麽',
'麼麼' => '麽麽',
+'黃麴毒素' => '黄曲毒素',
'黄润乾' => '黄润乾',
'黃潤乾' => '黄润乾',
-'黏著' => '黏着',
-'黏著书' => '黏著书',
-'黏著書' => '黏著书',
-'黏著作' => '黏著作',
-'黏著名' => '黏著名',
-'黏著录' => '黏著录',
-'黏著錄' => '黏著录',
-'黏著称' => '黏著称',
-'黏著稱' => '黏著称',
-'黏著者' => '黏著者',
-'黏著述' => '黏著述',
+'黃鍾' => '黄钟',
+'龍鍾' => '龙钟',
+',陞' => ',升',
);
$zh2TW = array(
-'“' => '「',
-'”' => '」',
-'‘' => '『',
-'’' => '』',
-'三極管' => '三極體',
+'0杆' => '0桿',
+'1杆' => '1桿',
+'2杆' => '2桿',
+'3杆' => '3桿',
+'4杆' => '4桿',
+'5杆' => '5桿',
+'6杆' => '6桿',
+'7杆' => '7桿',
+'8杆' => '8桿',
+'9杆' => '9桿',
+'甲型肝炎' => 'A型肝炎',
+'甲肝' => 'A肝',
+'乙型肝炎' => 'B型肝炎',
+'乙肝' => 'B肝',
+'丙型肝炎' => 'C型肝炎',
+'丙肝' => 'C肝',
+'IP地址' => 'IP位址',
+'乔戈里峰' => 'K2',
+'·威爾士' => '·威爾士',
+'·威尔士' => '·威爾士',
+'一杆' => '一桿',
+'七杆' => '七桿',
+'三杆' => '三桿',
'三极管' => '三極體',
-'世界裏' => '世界裡',
-'中文裏' => '中文裡',
-'串行' => '串列',
-'串列加速器' => '串列加速器',
+'三極管' => '三極體',
+'达累斯萨拉姆' => '三蘭港',
+'上落客' => '上下客',
+'落車' => '下車',
+'不來梅' => '不萊梅',
+'不来梅' => '不萊梅',
'以太网' => '乙太網',
-'奶酪' => '乳酪',
-'二極管' => '二極體',
+'九杆' => '九桿',
+'了結他' => '了結他',
+'二手煙' => '二手菸',
+'二杆' => '二桿',
'二极管' => '二極體',
-'交互式' => '互動式',
+'二極管' => '二極體',
+'交互设计' => '互動設計',
+'五杆' => '五桿',
'阿塞拜疆' => '亞塞拜然',
+'阿斯旺' => '亞斯文',
'人工智能' => '人工智慧',
-'接口' => '介面',
+'人机交互' => '人機互動',
+'石勒蘇益格' => '什勒斯維希',
+'石勒苏益格' => '什勒斯維希',
+'界面' => '介面',
+'伊利诺伊州' => '伊利諾州',
+'伊斯坦布爾' => '伊斯坦堡',
+'伊斯坦布尔' => '伊斯坦堡',
+'伊斯兰堡' => '伊斯蘭瑪巴德',
+'伊斯蘭堡' => '伊斯蘭瑪巴德',
+'埃博拉' => '伊波拉',
+'伊丽莎白' => '伊莉莎白',
+'掌上壓' => '伏地挺身',
+'俯卧撑' => '伏地挺身',
+'伯明翰' => '伯明罕',
'服务器' => '伺服器',
-'字節' => '位元組',
'字节' => '位元組',
-'作品裏' => '作品裡',
-'信道' => '信道',
-'优先级' => '優先順序',
-'元兇' => '元凶',
-'元凶' => '元凶',
+'字節' => '位元組',
+'佛罗伦萨' => '佛羅倫斯',
+'操作系统' => '作業系統',
+'系数' => '係數',
+'避孕套' => '保險套',
+'傅里叶' => '傅立葉',
'光盘' => '光碟',
'光驱' => '光碟機',
'克羅地亞' => '克羅埃西亞',
'克罗地亚' => '克羅埃西亞',
-'全角' => '全形',
-'冬天裏' => '冬天裡',
-'冬日裏' => '冬日裡',
-'凉菜' => '冷盤',
-'冷菜' => '冷盤',
-'凶器' => '凶器',
-'兇器' => '凶器',
-'凶徒' => '凶徒',
-'兇徒' => '凶徒',
-'兇手' => '凶手',
-'凶手' => '凶手',
-'兇案' => '凶案',
-'凶案' => '凶案',
-'凶殘' => '凶殘',
-'兇殘' => '凶殘',
-'凶残' => '凶殘',
-'兇殺' => '凶殺',
-'凶杀' => '凶殺',
-'凶殺' => '凶殺',
+'克里斯托弗' => '克里斯多福',
+'万维网' => '全球資訊網',
+'八杆' => '八桿',
+'公共交通' => '公共運輸',
+'六杆' => '六桿',
+'凯瑟琳' => '凱薩琳',
+'嘉芙蓮' => '凱薩琳',
'打印' => '列印',
'列支敦士登' => '列支敦斯登',
-'剪彩' => '剪綵',
+'前波美拉尼亚' => '前波莫瑞',
+'前波美拉尼亞' => '前波莫瑞',
'加蓬' => '加彭',
-'总线' => '匯流排',
+'加沙地带' => '加薩走廊',
+'加沙地帶' => '加薩走廊',
+'包豪斯' => '包浩斯',
+'北朝鲜' => '北韓',
'局域网' => '區域網',
+'十杆' => '十桿',
'特立尼達和多巴哥' => '千里達托貝哥',
'特立尼达和托巴哥' => '千里達托貝哥',
-'半角' => '半形',
-'卡塔爾' => '卡達',
+'南朝鲜' => '南韓',
+'卡斯特罗' => '卡斯楚',
'卡塔尔' => '卡達',
-'打印機' => '印表機',
+'卡塔爾' => '卡達',
'打印机' => '印表機',
-'厄立特里亚' => '厄利垂亞',
+'打印機' => '印表機',
'厄立特里亞' => '厄利垂亞',
-'厄瓜多尔' => '厄瓜多',
+'厄立特里亚' => '厄利垂亞',
+'厄利垂亚' => '厄利垂亞',
'厄瓜多爾' => '厄瓜多',
+'厄瓜多' => '厄瓜多',
+'厄瓜多尔' => '厄瓜多',
+'源代码' => '原始碼',
+'圆珠笔' => '原子筆',
+'反煙' => '反菸',
+'可卡因' => '古柯鹼',
+'便携式' => '可攜式',
+'叱咤' => '叱吒',
+'叱咤9' => '叱咤9',
+'叱咤M' => '叱咤M',
+'叱咤叱' => '叱咤叱',
+'叱咤咤' => '叱咤咤',
+'叱咤樂壇' => '叱咤樂壇',
+'斯坦福' => '史丹福',
+'斯皮尔伯格' => '史匹柏',
+'斯特劳斯' => '史特勞斯',
'斯威士兰' => '史瓦濟蘭',
'斯威士蘭' => '史瓦濟蘭',
-'吉布提' => '吉布地',
+'斯蒂芬' => '史蒂芬',
+'斯大林' => '史達林',
+'結他' => '吉他',
+'乞力馬札羅' => '吉力馬札羅',
+'乞力马扎罗' => '吉力馬札羅',
'吉布堤' => '吉布地',
+'吉布提' => '吉布地',
+'吉尔吉斯斯坦' => '吉爾吉斯',
'基里巴斯' => '吉里巴斯',
'圖瓦盧' => '吐瓦魯',
'图瓦卢' => '吐瓦魯',
+'吸煙' => '吸菸',
+'呂宋煙' => '呂宋菸',
'哈萨克斯坦' => '哈薩克',
+'格丁根' => '哥廷根',
+'哥特式' => '哥德式',
'哥斯達黎加' => '哥斯大黎加',
'哥斯达黎加' => '哥斯大黎加',
-'格魯吉亞' => '喬治亞',
-'格鲁吉亚' => '喬治亞',
+'卡拉奇' => '喀拉蚩',
+'乔治·奥威尔' => '喬治·歐威爾',
'佐治亚' => '喬治亞',
'佐治亞' => '喬治亞',
-'嘴裏' => '嘴裡',
+'格魯吉亞' => '喬治亞',
+'格鲁吉亚' => '喬治亞',
+'单反相机' => '單眼相機',
+'單鏡反光機' => '單眼相機',
+'嘯咤' => '嘯吒',
+'四杆' => '四桿',
'土库曼斯坦' => '土庫曼',
-'薯仔' => '土豆',
-'土豆網' => '土豆網',
-'土豆网' => '土豆網',
-'坦桑尼亚' => '坦尚尼亞',
+'圖盧茲' => '土魯斯',
+'图卢兹' => '土魯斯',
+'IP' => '地址',
+'戛纳' => '坎城',
+'堪培拉' => '坎培拉',
'坦桑尼亞' => '坦尚尼亞',
+'坦桑尼亚' => '坦尚尼亞',
'端口' => '埠',
+'首席执行官' => '執行長',
'塔吉克斯坦' => '塔吉克',
-'塞舌尔' => '塞席爾',
'塞舌爾' => '塞席爾',
-'塞浦路斯' => '塞普勒斯',
-'夏天裏' => '夏天裡',
-'夏日裏' => '夏日裡',
-'多明尼加共和國' => '多明尼加',
-'多米尼加共和国' => '多明尼加',
-'多米尼加共和國' => '多明尼加',
-'多米尼加国' => '多米尼克',
-'多明尼加國' => '多米尼克',
-'穿梭機' => '太空梭',
+'塞舌尔' => '塞席爾',
+'萨拉热窝' => '塞拉耶佛',
+'薩拉熱窩' => '塞拉耶佛',
+'塞爾維亞和黑山' => '塞爾維亞與蒙特內哥羅',
+'塞爾維亞與蒙特內哥羅' => '塞爾維亞與蒙特內哥羅',
+'塞尔维亚和黑山' => '塞爾維亞與蒙特內哥羅',
+'塞维利亚' => '塞維亞',
+'西維爾' => '塞維亞',
+'塞黑' => '塞蒙',
+'英联邦' => '大英國協',
+'共和联邦' => '大英國協',
+'英聯邦' => '大英國協',
+'宇航员' => '太空人',
+'太空飛行員' => '太空人',
'航天飞机' => '太空梭',
-'尼日利亚' => '奈及利亞',
+'穿梭機' => '太空梭',
+'宇航服' => '太空衣',
+'航天器' => '太空飛行器',
'尼日利亞' => '奈及利亞',
-'字符' => '字元',
-'字号' => '字型大小',
+'尼日利亚' => '奈及利亞',
+'忌廉' => '奶油',
+'荷里活' => '好萊塢',
+'威廉姆斯' => '威廉士',
+'威斯特法倫' => '威斯伐倫',
+'威斯特法伦' => '威斯伐倫',
+'威士顿康星' => '威斯康辛',
+'威爾士' => '威爾斯',
+'威尔士' => '威爾斯',
'字库' => '字型檔',
-'字符集' => '字符集',
'存盘' => '存檔',
-'學裏' => '學裡',
+'门德尔松' => '孟德爾頌',
+'孟德爾遜' => '孟德爾頌',
+'安哈爾特' => '安哈特',
+'安哈尔特' => '安哈特',
'安提瓜和巴布達' => '安地卡及巴布達',
'安提瓜和巴布达' => '安地卡及巴布達',
-'宋元' => '宋元',
'洪都拉斯' => '宏都拉斯',
-'寻址' => '定址',
-'寒假裏' => '寒假裡',
+'密歇根' => '密西根',
'宽带' => '寬頻',
-'老撾' => '寮國',
+'老撾人民民主共和國' => '寮人民民主共和國',
+'老挝人民民主共和国' => '寮人民民主共和國',
'老挝' => '寮國',
-'打门' => '射門',
-'專輯裏' => '專輯裡',
+'老撾' => '寮國',
+'老挝语' => '寮語',
+'老撾語' => '寮語',
+'高峰时段' => '尖峰時段',
+'高峰时间' => '尖峰時間',
'贊比亞' => '尚比亞',
'赞比亚' => '尚比亞',
-'尼日爾' => '尼日',
+'尼克松' => '尼克森',
'尼日尔' => '尼日',
-'山洞裏' => '山洞裡',
-'巴布亞新畿內亞' => '巴布亞紐幾內亞',
+'尼日爾' => '尼日',
+'雅马哈' => '山葉',
+'机床' => '工具機',
+'機床' => '工具機',
+'珍寶客機' => '巨無霸客機',
+'发达国家' => '已開發國家',
+'巴塞隆拿' => '巴塞隆納',
+'巴塞罗那' => '巴塞隆納',
'巴布亚新几内亚' => '巴布亞紐幾內亞',
+'巴布亞新畿內亞' => '巴布亞紐幾內亞',
+'巴士拉' => '巴斯拉',
'巴巴多斯' => '巴貝多',
-'布基纳法索' => '布吉納法索',
+'佈' => '布',
'布基納法索' => '布吉納法索',
-'布什' => '布希',
+'布基纳法索' => '布吉納法索',
'布殊' => '布希',
+'布什' => '布希',
+'勃兰登堡' => '布蘭登堡',
+'勃蘭登堡' => '布蘭登堡',
+'布里斯托尔' => '布里斯托',
+'布隆方丹' => '布隆泉',
+'希拉里' => '希拉蕊',
+'希特拉' => '希特勒',
+'巴尔米拉环礁' => '帕邁拉環礁',
'帕劳' => '帛琉',
-'例程' => '常式',
-'平治之乱' => '平治之亂',
-'平治之亂' => '平治之亂',
-'年代裏' => '年代裡',
+'希拉克' => '席哈克',
+'账' => '帳',
+'干着急' => '干著急',
+'干着' => '幹著',
+'畿內亞' => '幾內亞',
'几内亚比绍' => '幾內亞比索',
'幾內亞比紹' => '幾內亞比索',
-'彩带' => '彩帶',
-'彩排' => '彩排',
-'彩楼' => '彩樓',
-'彩牌楼' => '彩牌樓',
-'復蘇' => '復甦',
-'复苏' => '復甦',
-'心裏' => '心裡',
+'比利牛斯' => '庇里牛斯',
+'康涅狄格' => '康乃狄克',
+'约翰斯顿岛' => '強斯頓環礁',
+'形而上学' => '形上學',
+'形而上學' => '形上學',
+'得克薩斯' => '德克薩斯',
+'得克萨斯' => '德克薩斯',
+'德累斯頓' => '德勒斯登',
+'德累斯顿' => '德勒斯登',
+'德里达' => '德希達',
+'特拉华' => '德拉瓦',
+'特拉華' => '德拉瓦',
'快闪存储器' => '快閃記憶體',
'闪存' => '快閃記憶體',
'想象' => '想像',
-'传感' => '感測',
-'习用' => '慣用',
-'戏彩娱亲' => '戲綵娛親',
-'戲裏' => '戲裡',
-'手电筒' => '手電筒',
-'手电' => '手電筒',
-'括号' => '括弧',
-'拿破侖' => '拿破崙',
-'拿破仑' => '拿破崙',
+'愛德文' => '愛德溫',
+'艾滋' => '愛滋',
+'艾奧瓦' => '愛荷華',
+'爱德华州' => '愛達荷州',
+'应用程序' => '應用程式',
+'戈爾巴喬夫' => '戈巴契夫',
+'戈尔巴乔夫' => '戈巴契夫',
+'戒煙' => '戒菸',
+'戴克里先' => '戴克里先',
+'抽煙' => '抽菸',
+'拉普兰' => '拉布蘭',
+'拒煙' => '拒菸',
+'捲煙' => '捲菸',
'積架' => '捷豹',
-'扫瞄仪' => '掃瞄器',
-'挂钩' => '掛鉤',
-'掛鈎' => '掛鉤',
'控件' => '控制項',
+'推杆' => '推桿',
+'第比利斯' => '提比里西',
+'揮杆' => '揮桿',
+'挥杆' => '揮桿',
+'搜索引擎' => '搜尋引擎',
+'摩根士丹利' => '摩根史坦利',
'台球' => '撞球',
-'桌球' => '撞球',
-'便携式' => '攜帶型',
-'故事裏' => '故事裡',
+'攻打印' => '攻打印',
+'数字技术' => '數位技術',
+'數碼技術' => '數位技術',
+'數碼相機' => '數位相機',
+'数码相机' => '數位相機',
+'数字信号' => '數位訊號',
+'數碼訊號' => '數位訊號',
+'数字电视' => '數位電視',
+'數碼電視' => '數位電視',
'调制解调器' => '數據機',
'調制解調器' => '數據機',
-'斯洛文尼亞' => '斯洛維尼亞',
'斯洛文尼亚' => '斯洛維尼亞',
-'新纪元' => '新紀元',
-'新紀元' => '新紀元',
-'日子裏' => '日子裡',
-'春假裏' => '春假裡',
-'春天裏' => '春天裡',
-'春日裏' => '春日裡',
-'時間裏' => '時間裡',
-'芯片' => '晶元',
-'暑假裏' => '暑假裡',
-'村子裏' => '村子裡',
+'斯洛文尼亞' => '斯洛維尼亞',
+'新罕布什尔' => '新罕布夏',
+'施罗德' => '施洛德',
+'旱煙' => '旱菸',
+'普利策' => '普利茲',
+'芯片' => '晶片',
+'智能卡' => '智慧卡',
+'智能手機' => '智慧型手機',
+'智能手机' => '智慧型手機',
+'智能电话' => '智慧型電話',
+'智能電話' => '智慧型電話',
+'知识产权' => '智慧財產權',
+'知識產權' => '智慧財產權',
+'萌島' => '曼島',
+'马恩岛' => '曼島',
+'木杆' => '木桿',
+'列奥纳多' => '李奧納多',
+'杜塞爾多夫' => '杜塞道夫',
+'杜塞尔多夫' => '杜塞道夫',
+'迪拜' => '杜拜',
+'亚细安' => '東協',
+'东盟' => '東協',
+'东南亚国家联盟' => '東南亞國協',
+'柏林墙' => '柏林圍牆',
+'柏林牆' => '柏林圍牆',
'乍得' => '查德',
-'克林頓' => '柯林頓',
+'查韦斯' => '查維茲',
'克林顿' => '柯林頓',
-'格林納達' => '格瑞那達',
+'克林頓' => '柯林頓',
+'撒切尔' => '柴契爾',
+'戴卓爾' => '柴契爾',
'格林纳达' => '格瑞那達',
-'凡高' => '梵谷',
-'森林裏' => '森林裡',
-'棺材裏' => '棺材裡',
-'榴蓮' => '榴槤',
+'格林納達' => '格瑞那達',
+'乒乓球' => '桌球',
+'乒乓' => '桌球',
+'杆弟' => '桿弟',
+'杆身' => '桿身',
+'杆頭' => '桿頭',
+'杆头' => '桿頭',
+'梅尔·吉布森' => '梅爾·吉勃遜',
+'梵高' => '梵谷',
+'桑巴舞' => '森巴舞',
'榴莲' => '榴槤',
-'仿真' => '模擬',
-'毛里裘斯' => '模里西斯',
+'榴蓮' => '榴槤',
+'枪支' => '槍枝',
+'标准杆' => '標準桿',
+'標準杆' => '標準桿',
'毛里求斯' => '模里西斯',
+'毛里裘斯' => '模里西斯',
'機械人' => '機器人',
'机器人' => '機器人',
+'概率' => '機率',
+'電單車' => '機車',
+'枱' => '檯',
'字段' => '欄位',
-'歷史裏' => '歷史裡',
-'元音' => '母音',
-'永历' => '永曆',
+'奧巴馬' => '歐巴馬',
+'奥巴马' => '歐巴馬',
+'正在叱咤' => '正在叱咤',
'文莱' => '汶萊',
+'沙律' => '沙拉',
'沙特阿拉伯' => '沙烏地阿拉伯',
'沙地阿拉伯' => '沙烏地阿拉伯',
+'法属圭亚那' => '法屬蓋亞那',
+'波斯尼亚' => '波士尼亞',
+'波斯尼亞' => '波士尼亞',
'波斯尼亞黑塞哥維那' => '波士尼亞赫塞哥維納',
'波斯尼亚和黑塞哥维那' => '波士尼亞赫塞哥維納',
'博茨瓦纳' => '波札那',
'博茨瓦納' => '波札那',
-'流程控制' => '流程控制',
+'波黑' => '波赫',
+'洋煙' => '洋菸',
+'帕特里克' => '派屈克',
+'海洛英' => '海洛因',
'侯赛因' => '海珊',
'侯賽因' => '海珊',
-'深淵裏' => '深淵裡',
-'光标' => '游標',
'鼠标' => '滑鼠',
-'算法' => '演算法',
+'漢诺威' => '漢諾瓦',
+'汉诺威' => '漢諾瓦',
'乌兹别克斯坦' => '烏茲別克',
-'词组' => '片語',
-'獄裏' => '獄裡',
+'烤煙' => '烤菸',
+'無煙日' => '無菸日',
+'無煙環境' => '無菸環境',
+'烟熏' => '煙燻',
+'首席运营官' => '營運長',
+'熏烤' => '燻烤',
+'熏肉' => '燻肉',
+'熏黑' => '燻黑',
+'版权信息' => '版權資訊',
+'疯牛症' => '狂牛症',
+'鐵托' => '狄托',
+'铁托' => '狄托',
'塞拉利昂' => '獅子山',
-'危地马拉' => '瓜地馬拉',
+'独联体' => '獨立國協',
+'独立国家联合体' => '獨立國家國協',
+'波利尼西亚' => '玻里尼西亞',
+'波利尼西亞' => '玻里尼西亞',
+'本杰明' => '班傑明',
+'本傑明' => '班傑明',
+'球杆' => '球桿',
+'理查德' => '理察',
+'卢塞恩' => '琉森',
'危地馬拉' => '瓜地馬拉',
+'危地马拉' => '瓜地馬拉',
+'巴伦西亚' => '瓦倫西亞',
+'華倫西亞' => '瓦倫西亞',
'冈比亚' => '甘比亞',
'岡比亞' => '甘比亞',
-'疑兇' => '疑凶',
-'疑凶' => '疑凶',
-'百科裏' => '百科裡',
-'皮裏陽秋' => '皮裡陽秋',
+'肯尼迪' => '甘迺迪',
+'留尼汪' => '留尼旺',
+'毕加索' => '畢卡索',
+'迭代' => '疊代',
+'徵狀' => '症狀',
+'勃朗宁' => '白朗寧',
+'百慕大' => '百慕達',
'盧旺達' => '盧安達',
'卢旺达' => '盧安達',
-'真凶' => '真凶',
-'真兇' => '真凶',
-'眼睛裏' => '眼睛裡',
-'硅片' => '矽片',
-'硅谷' => '矽谷',
+'睾' => '睪',
+'知识产权局' => '知識產權局',
+'知識產權署' => '知識產權署',
+'知識產權局' => '知識產權署',
+'知识产权署' => '知識產權署',
+'硅' => '矽',
+'硅藻' => '硅藻',
'硬盘' => '硬碟',
'硬件' => '硬體',
'盘片' => '碟片',
'磁盘' => '磁碟',
'磁道' => '磁軌',
-'秋假裏' => '秋假裡',
-'秋天裏' => '秋天裡',
-'秋日裏' => '秋日裡',
-'程控' => '程式控制',
+'禁煙' => '禁菸',
+'福尔马林' => '福馬林',
+'福爾馬林' => '福馬林',
+'私煙' => '私菸',
+'程序员' => '程式設計師',
+'编程语言' => '程式語言',
+'空氣質素' => '空氣品質',
+'空气质量' => '空氣品質',
'突尼斯' => '突尼西亞',
-'尾注' => '章節附註',
'蹦极跳' => '笨豬跳',
'绑紧跳' => '笨豬跳',
-'等于' => '等於',
-'短訊' => '簡訊',
'短信' => '簡訊',
-'系列裏' => '系列裡',
-'新西蘭' => '紐西蘭',
+'纽黑文' => '紐哈芬',
+'新奥尔良' => '紐奧良',
+'新奧爾良' => '紐奧良',
+'新几内亚' => '紐幾內亞',
'新西兰' => '紐西蘭',
-'所罗门群岛' => '索羅門群島',
+'新西蘭' => '紐西蘭',
+'紙煙' => '紙菸',
+'索贊尼辛' => '索忍尼辛',
+'索尔仁尼琴' => '索忍尼辛',
'所羅門群島' => '索羅門群島',
-'索馬里' => '索馬利亞',
+'所罗门群岛' => '索羅門群島',
'索马里' => '索馬利亞',
-'结彩' => '結綵',
+'索馬里' => '索馬利亞',
+'索马里兰' => '索馬利蘭',
+'索馬里蘭' => '索馬利蘭',
+'維爾京群島' => '維京群島',
+'维尔京群岛' => '維京群島',
+'弗吉尼亚' => '維吉尼亞',
'佛得角' => '維德角',
-'網絡' => '網路',
-'网络' => '網路',
-'互聯網' => '網際網路',
+'维特根斯坦' => '維根斯坦',
+'互联网络' => '網際網路',
'因特网' => '網際網路',
-'彩球' => '綵球',
-'彩绸' => '綵綢',
-'彩线' => '綵線',
-'彩船' => '綵船',
-'彩衣' => '綵衣',
-'綫' => '線',
-'缉凶' => '緝凶',
-'緝兇' => '緝凶',
-'緝凶' => '緝凶',
+'互聯網' => '網際網路',
+'互联网' => '網際網路',
+'系着' => '繫著',
+'卢瓦尔' => '羅亞爾',
+'盧瓦爾' => '羅亞爾',
+'卢浮宫' => '羅浮宮',
+'樂行童軍' => '羅浮童軍',
'意大利' => '義大利',
-'老字号' => '老字號',
+'昂山素姬' => '翁山蘇姬',
+'昂山素季' => '翁山蘇姬',
'圣基茨和尼维斯' => '聖克里斯多福及尼維斯',
'聖吉斯納域斯' => '聖克里斯多福及尼維斯',
'聖文森特和格林納丁斯' => '聖文森及格瑞那丁',
'圣文森特和格林纳丁斯' => '聖文森及格瑞那丁',
-'圣卢西亚' => '聖露西亞',
+'圣赫勒拿' => '聖赫倫那',
'聖盧西亞' => '聖露西亞',
+'圣卢西亚' => '聖露西亞',
'圣马力诺' => '聖馬利諾',
'聖馬力諾' => '聖馬利諾',
-'肚裏' => '肚裡',
'肯尼亚' => '肯亞',
-'肯雅' => '肯亞',
-'航天大学' => '航天大學',
-'苦裏' => '苦裡',
-'毛里塔尼亚' => '茅利塔尼亞',
+'氨基酸' => '胺基酸',
+'卧' => '臥',
+'自由泳' => '自由式',
+'三藩市' => '舊金山',
+'艾森豪威尔' => '艾森豪',
+'埃菲尔' => '艾菲爾',
+'阿里埃勒·沙龙' => '艾里爾·夏隆',
+'阿里埃勒·沙龍' => '艾里爾·夏隆',
+'帕塔亚' => '芭達亞',
+'黎克特制' => '芮氏',
+'里氏0' => '芮氏0',
+'里氏1' => '芮氏1',
+'里氏2' => '芮氏2',
+'里氏3' => '芮氏3',
+'里氏4' => '芮氏4',
+'里氏5' => '芮氏5',
+'里氏6' => '芮氏6',
+'里氏7' => '芮氏7',
+'里氏8' => '芮氏8',
+'里氏9' => '芮氏9',
+'里氏地震规模' => '芮氏地震規模',
+'里氏规模' => '芮氏規模',
+'里氏震级' => '芮氏規模',
+'当且仅当' => '若且唯若',
+'味美思' => '苦艾酒',
'毛里塔尼亞' => '茅利塔尼亞',
+'毛里塔尼亚' => '茅利塔尼亞',
+'霍尔木兹' => '荷姆茲',
+'霍爾木茲' => '荷姆茲',
+'荷李活道' => '荷李活道',
'莫桑比克' => '莫三比克',
-'万历' => '萬曆',
-'瓦努阿图' => '萬那杜',
+'瓦文萨' => '華勒沙',
+'華里沙' => '華勒沙',
+'瓦格纳' => '華格納',
+'煙具' => '菸具',
+'煙品' => '菸品',
+'煙嘴' => '菸嘴',
+'煙捲' => '菸捲',
+'煙斗' => '菸斗',
+'煙民' => '菸民',
+'煙灰' => '菸灰',
+'煙癮' => '菸癮',
+'煙絲' => '菸絲',
+'煙草' => '菸草',
+'煙葉' => '菸葉',
+'煙蒂' => '菸蒂',
+'煙袋' => '菸袋',
+'煙農' => '菸農',
+'煙酒' => '菸酒',
+'煙頭' => '菸頭',
+'煙鬼' => '菸鬼',
+'煙鹼' => '菸鹼',
+'万历朝鲜战争' => '萬曆朝鮮戰爭',
'瓦努阿圖' => '萬那杜',
-'也门' => '葉門',
+'瓦努阿图' => '萬那杜',
+'叶利钦' => '葉爾欽',
+'葉利欽' => '葉爾欽',
+'埃里温' => '葉里溫',
+'埃里溫' => '葉里溫',
'也門' => '葉門',
+'也门' => '葉門',
'着' => '著',
-'科摩羅' => '葛摩',
'科摩罗' => '葛摩',
+'科摩羅' => '葛摩',
+'黑山共和國' => '蒙特內哥羅共和國',
+'黑山共和国' => '蒙特內哥羅共和國',
+'蒙特利爾' => '蒙特婁',
+'滿地可' => '蒙特婁',
+'蒙特利尔' => '蒙特婁',
+'普密蓬' => '蒲美蓬',
'布隆迪' => '蒲隆地',
-'圭亞那' => '蓋亞那',
'圭亚那' => '蓋亞那',
-'火锅盖帽' => '蓋火鍋',
+'开曼群岛' => '蓋曼群島',
+'開曼群島' => '蓋曼群島',
+'蕭士達高維契' => '蕭士塔高維奇',
+'肖斯塔科维奇' => '蕭士塔高維奇',
+'肖邦' => '蕭邦',
+'薛定谔' => '薛丁格',
+'扎伊爾' => '薩伊',
+'扎伊尔' => '薩伊',
+'素檀' => '蘇丹',
'苏里南' => '蘇利南',
-'行凶' => '行凶',
-'行兇' => '行凶',
-'行凶后' => '行凶後',
-'行兇後' => '行凶後',
-'行凶後' => '行凶後',
-'流動電話' => '行動電話',
+'浮罗交怡' => '蘭卡威',
+'浮羅交怡' => '蘭卡威',
+'劳拉' => '蘿拉',
+'荧光' => '螢光',
+'荧屏' => '螢屏',
+'屏幕' => '螢幕',
+'流動網絡' => '行動網路',
+'移动网络' => '行動網路',
'移动电话' => '行動電話',
-'行程控制' => '行程控制',
-'衞' => '衛',
-'卫生' => '衛生',
-'衞生' => '衛生',
-'埃塞俄比亚' => '衣索比亞',
+'流動電話' => '行動電話',
+'冲着' => '衝著',
'埃塞俄比亞' => '衣索比亞',
-'裏勾外連' => '裡勾外連',
-'裏面' => '裡面',
+'埃塞俄比亚' => '衣索比亞',
+'克隆人' => '複製人',
+'國際象棋' => '西洋棋',
+'囯际象棋' => '西洋棋',
+'国际象棋' => '西洋棋',
+'赫梯' => '西臺',
+'解像度' => '解析度',
'分辨率' => '解析度',
'译码' => '解碼',
'出租车' => '計程車',
-'权限' => '許可權',
+'约翰逊' => '詹森',
+'诺曼底' => '諾曼第',
'瑙鲁' => '諾魯',
'瑙魯' => '諾魯',
-'变量' => '變數',
'科特迪瓦' => '象牙海岸',
-'貝寧' => '貝南',
-'贝宁' => '貝南',
-'伯利茲' => '貝里斯',
+'贝尔格莱德' => '貝爾格勒',
+'貝爾格萊德' => '貝爾格勒',
'伯利兹' => '貝里斯',
-'買兇' => '買凶',
-'买凶' => '買凶',
-'買凶' => '買凶',
+'伯利茲' => '貝里斯',
+'首席财务官' => '財務長',
+'集装箱' => '貨櫃',
+'數據庫' => '資料庫',
'数据库' => '資料庫',
'信息论' => '資訊理論',
-'奔驰' => '賓士',
-'平治' => '賓士',
-'利比里亚' => '賴比瑞亞',
+'宾西法尼亚' => '賓夕法尼亞',
'利比里亞' => '賴比瑞亞',
-'萊索托' => '賴索托',
+'利比里亚' => '賴比瑞亞',
'莱索托' => '賴索托',
+'萊索托' => '賴索托',
+'塞浦路斯' => '賽普勒斯',
+'碧咸' => '贝克漢',
+'赫丘勒·波洛' => '赫丘勒·白羅',
+'赫鲁晓夫' => '赫魯雪夫',
+'切尔诺贝利' => '車諾比',
'软驱' => '軟碟機',
'軟件' => '軟體',
'软件' => '軟體',
-'加载' => '載入',
'津巴布韦' => '辛巴威',
'津巴布韋' => '辛巴威',
-'词汇' => '辭彙',
-'加纳' => '迦納',
-'加納' => '迦納',
-'追凶' => '追凶',
-'追兇' => '追凶',
-'這裏' => '這裡',
-'逞凶鬥狠' => '逞凶鬥狠',
-'逞兇鬥狠' => '逞凶鬥狠',
-'逞凶斗狠' => '逞凶鬥狠',
-'即食麵' => '速食麵',
-'方便面' => '速食麵',
-'快速面' => '速食麵',
-'连字号' => '連字號',
+'径入' => '逕入',
+'径到' => '逕到',
+'径取' => '逕取',
+'径启' => '逕啟',
+'径寄' => '逕寄',
+'径庭' => '逕庭',
+'径往' => '逕往',
+'径自' => '逕自',
+'径行' => '逕行',
+'径迎' => '逕迎',
+'链接' => '連結',
+'連結他' => '連結他',
'进制' => '進位',
-'入球' => '進球',
'算子' => '運算元',
-'遠程控制' => '遠程控制',
-'远程控制' => '遠程控制',
+'达·芬奇' => '達·文西',
+'达芬奇' => '達文西',
'溫納圖萬' => '那杜',
-'醫院裏' => '醫院裡',
+'丘吉尔' => '邱吉爾',
+'多普勒' => '都卜勒',
+'奥斯曼' => '鄂圖曼',
'酰' => '醯',
+'里士满' => '里奇蒙',
+'金沙薩' => '金夏沙',
+'金沙萨' => '金夏沙',
+'健力士世界纪录' => '金氏世界紀錄',
+'健力士世界紀錄' => '金氏世界紀錄',
+'吉尼斯世界纪录' => '金氏世界紀錄',
+'钚' => '鈽',
'钩' => '鉤',
'鈎' => '鉤',
-'钩心斗角' => '鉤心鬥角',
-'鈎心鬥角' => '鉤心鬥角',
'锎' => '鉲',
+'锫' => '鉳',
+'镅' => '鋂',
+'镎' => '錼',
+'钫' => '鍅',
+'炼金' => '鍊金',
+'锻炼' => '鍛鍊',
+'锝' => '鎝',
+'鐵杆' => '鐵桿',
+'铁杆' => '鐵桿',
+'泰坦尼克号' => '鐵達尼號',
+'锿' => '鑀',
+'关系着' => '關係著',
'写保护' => '防寫',
+'阿布扎比' => '阿布達比',
'阿拉伯联合酋长国' => '阿拉伯聯合大公國',
'阿拉伯聯合酋長國' => '阿拉伯聯合大公國',
-'噪声' => '雜訊',
-'脱机' => '離線',
-'雪裏紅' => '雪裡紅',
-'雪裏蕻' => '雪裡蕻',
-'雪铁龙' => '雪鐵龍',
-'青霉素' => '青黴素',
-'异步' => '非同步',
+'亚拉巴马' => '阿拉巴馬',
+'阿联酋' => '阿聯',
+'阿聯酋' => '阿聯',
+'罗纳德·里根' => '隆納·雷根',
+'私隱' => '隱私',
+'耶加達' => '雅加達',
+'雅尔塔' => '雅爾達',
+'雅爾塔' => '雅爾達',
+'雅穆苏克雷' => '雅穆索戈',
+'雅穆蘇克雷' => '雅穆索戈',
+'悉尼' => '雪梨',
+'雪茄煙' => '雪茄菸',
+'莱特湾' => '雷伊泰灣',
+'萊特灣' => '雷伊泰灣',
+'激光' => '雷射',
+'雷诺阿' => '雷諾瓦',
+'電子煙' => '電子菸',
+'晶體管' => '電晶體',
+'晶体管' => '電晶體',
+'电杆' => '電桿',
+'电线杆' => '電線桿',
+'计算机程序' => '電腦程式',
+'电脑程序' => '電腦程式',
+'荷尔斯泰因' => '霍爾斯坦',
+'荷爾斯泰因' => '霍爾斯坦',
+'朝鲜战争' => '韓戰',
'声卡' => '音效卡',
'缺省' => '預設',
-'颁布' => '頒布',
-'頒佈' => '頒布',
-'領域裏' => '領域裡',
-'头球' => '頭槌',
-'粒入球' => '顆進球',
-'館裏' => '館裡',
+'导弹' => '飛彈',
+'糊口' => '餬口',
+'香煙' => '香菸',
'马里共和国' => '馬利共和國',
'馬里共和國' => '馬利共和國',
+'马拉维' => '馬拉威',
+'馬斯特里赫特' => '馬斯垂克',
+'马斯特里赫特' => '馬斯垂克',
'马耳他' => '馬爾他',
-'马尔代夫' => '馬爾地夫',
'馬爾代夫' => '馬爾地夫',
-'萬事得' => '馬自達',
-'狄安娜' => '黛安娜',
+'马尔代夫' => '馬爾地夫',
+'馬利蘭' => '馬里蘭',
+'高清电视' => '高畫質電視',
+'斗着' => '鬥著',
+'魯賓斯·巴里切羅' => '魯本·巴瑞切羅',
+'咪高峰' => '麥克風',
+'迈克尔' => '麥可',
+'麦克尔' => '麥可',
+'邁凱輪' => '麥拿輪',
+'迈凯轮' => '麥拿輪',
+'马萨诸塞' => '麻薩諸塞',
'戴安娜' => '黛安娜',
-'點裏' => '點裡',
-'位图' => '點陣圖',
+'狄安娜' => '黛安娜',
+'點煙' => '點菸',
+'霉素' => '黴素',
);
$zh2HK = array(
-'505線' => '505綫',
-'505线' => '505綫',
-'507線' => '507綫',
-'507线' => '507綫',
-'610線' => '610綫',
-'610线' => '610綫',
-'614P線' => '614P綫',
-'614P线' => '614P綫',
-'614线' => '614綫',
-'614線' => '614綫',
-'615P線' => '615P綫',
-'615P线' => '615P綫',
-'615线' => '615綫',
-'615線' => '615綫',
-'705线' => '705綫',
-'705線' => '705綫',
-'706线' => '706綫',
-'706線' => '706綫',
-'751P線' => '751P綫',
-'751P线' => '751P綫',
-'751線' => '751綫',
-'751线' => '751綫',
-'761P线' => '761P綫',
-'761P線' => '761P綫',
-'“' => '「',
-'”' => '」',
-'‘' => '『',
-'’' => '』',
+'IP地址' => 'IP位址',
+'·威爾士' => '·威爾士',
+'·威尔士' => '·威爾士',
+'一地里' => '一地裏',
+'一年里' => '一年裏',
+'三十六著' => '三十六着',
'三極體' => '三極管',
+'旧金山' => '三藩市',
+'舊金山' => '三藩市',
+'下著' => '下着',
+'下著作' => '下著作',
+'下著名' => '下著名',
+'下著有' => '下著有',
+'下著称' => '下著稱',
+'下著稱' => '下著稱',
+'下著者' => '下著者',
+'下著述' => '下著述',
+'下著录' => '下著錄',
+'下著錄' => '下著錄',
+'不占' => '不佔',
+'不萊梅' => '不來梅',
'不著痕跡' => '不着痕跡',
'不著邊際' => '不着邊際',
-'世界裡' => '世界裏',
-'世界里' => '世界裏',
+'世纪里' => '世紀裏',
+'C型肝炎' => '丙型肝炎',
+'C肝' => '丙肝',
+'并发布' => '並發佈',
'中文里' => '中文裏',
-'中文裡' => '中文裏',
-'民乐' => '中樂',
-'华乐' => '中樂',
-'查德' => '乍得',
'乘著' => '乘着',
'乘著作' => '乘著作',
'乘著名' => '乘著名',
@@ -16551,10 +14594,15 @@ $zh2HK = array(
'乘著者' => '乘著者',
'乘著述' => '乘著述',
'乘著錄' => '乘著錄',
+'B型肝炎' => '乙型肝炎',
+'B肝' => '乙肝',
+'吉力馬札羅' => '乞力馬札羅',
'葉門' => '也門',
+'事里' => '事裏',
'二極體' => '二極管',
-'網際網路' => '互聯網',
'因特网' => '互聯網',
+'網際網路' => '互聯網',
+'井里' => '井裏',
'亮著' => '亮着',
'亮著作' => '亮著作',
'亮著名' => '亮著名',
@@ -16564,6 +14612,7 @@ $zh2HK = array(
'亮著述' => '亮著述',
'亮著錄' => '亮著錄',
'人工智慧' => '人工智能',
+'人数里' => '人數裏',
'仗著' => '仗着',
'仗著作' => '仗著作',
'仗著名' => '仗著名',
@@ -16580,7 +14629,11 @@ $zh2HK = array(
'代表著者' => '代表著者',
'代表著述' => '代表著述',
'代表著錄' => '代表著錄',
+'伊斯坦堡' => '伊斯坦布爾',
+'伊斯蘭瑪巴德' => '伊斯蘭堡',
+'埃博拉' => '伊波拉',
'貝里斯' => '伯利茲',
+'伯明罕' => '伯明翰',
'伴著' => '伴着',
'伴著作' => '伴著作',
'伴著名' => '伴著名',
@@ -16589,6 +14642,40 @@ $zh2HK = array(
'伴著者' => '伴著者',
'伴著述' => '伴著述',
'伴著錄' => '伴著錄',
+'布下了' => '佈下了',
+'布下的' => '佈下的',
+'布光' => '佈光',
+'布告' => '佈告',
+'布局' => '佈局',
+'布展' => '佈展',
+'布控' => '佈控',
+'布于' => '佈於',
+'布於' => '佈於',
+'布施' => '佈施',
+'布景' => '佈景',
+'布满' => '佈滿',
+'布滿' => '佈滿',
+'布置' => '佈置',
+'布设' => '佈設',
+'布設' => '佈設',
+'布警' => '佈警',
+'布道' => '佈道',
+'布防' => '佈防',
+'布阵' => '佈陣',
+'布陣' => '佈陣',
+'布雷、' => '佈雷、',
+'布雷。' => '佈雷。',
+'布雷封锁' => '佈雷封鎖',
+'布雷封鎖' => '佈雷封鎖',
+'布雷的' => '佈雷的',
+'布雷艇' => '佈雷艇',
+'布雷艦' => '佈雷艦',
+'布雷舰' => '佈雷艦',
+'布雷速度' => '佈雷速度',
+'布雷,' => '佈雷,',
+'布雷;' => '佈雷;',
+'布点' => '佈點',
+'布點' => '佈點',
'字節' => '位元組',
'字节' => '位元組',
'低著' => '低着',
@@ -16607,8 +14694,189 @@ $zh2HK = array(
'住著者' => '住著者',
'住著述' => '住著述',
'住著錄' => '住著錄',
+'占0' => '佔0',
+'占1' => '佔1',
+'占2' => '佔2',
+'占3' => '佔3',
+'占4' => '佔4',
+'占5' => '佔5',
+'占6' => '佔6',
+'占7' => '佔7',
+'占8' => '佔8',
+'占9' => '佔9',
+'占A' => '佔A',
+'占B' => '佔B',
+'占C' => '佔C',
+'占D' => '佔D',
+'占E' => '佔E',
+'占F' => '佔F',
+'占G' => '佔G',
+'占H' => '佔H',
+'占I' => '佔I',
+'占J' => '佔J',
+'占K' => '佔K',
+'占L' => '佔L',
+'占M' => '佔M',
+'占N' => '佔N',
+'占O' => '佔O',
+'占P' => '佔P',
+'占Q' => '佔Q',
+'占R' => '佔R',
+'占S' => '佔S',
+'占T' => '佔T',
+'占U' => '佔U',
+'占V' => '佔V',
+'占W' => '佔W',
+'占X' => '佔X',
+'占Y' => '佔Y',
+'占Z' => '佔Z',
+'占〇' => '佔〇',
+'占一' => '佔一',
+'占七' => '佔七',
+'占三' => '佔三',
+'占上風' => '佔上風',
+'占上风' => '佔上風',
+'占下' => '佔下',
+'占下风' => '佔下風',
+'占下風' => '佔下風',
+'占不占' => '佔不佔',
+'占不足' => '佔不足',
+'占世界' => '佔世界',
+'占中' => '佔中',
+'占主' => '佔主',
+'占主要' => '佔主要',
+'占九' => '佔九',
+'占了' => '佔了',
+'占二' => '佔二',
+'占五' => '佔五',
+'占人便宜' => '佔人便宜',
+'占位' => '佔位',
+'占住' => '佔住',
+'占占' => '佔佔',
+'占便宜' => '佔便宜',
+'占俄' => '佔俄',
+'占个' => '佔個',
+'占個' => '佔個',
+'占个位' => '佔個位',
+'占個位' => '佔個位',
+'占億' => '佔億',
+'占亿' => '佔億',
+'占優' => '佔優',
+'占优' => '佔優',
+'占先' => '佔先',
+'占光' => '佔光',
+'占全' => '佔全',
+'占两' => '佔兩',
+'占兩' => '佔兩',
+'占八' => '佔八',
+'占六' => '佔六',
+'占分' => '佔分',
+'占到' => '佔到',
+'占加' => '佔加',
+'占劣' => '佔劣',
+'占北' => '佔北',
+'占十' => '佔十',
+'占千' => '佔千',
+'占半' => '佔半',
+'占南' => '佔南',
+'占印' => '佔印',
+'占去' => '佔去',
+'占取' => '佔取',
+'占台' => '佔台',
+'占囁' => '佔囁',
+'占四' => '佔四',
+'占国' => '佔國',
+'占國' => '佔國',
+'占在' => '佔在',
+'占地' => '佔地',
+'占場' => '佔場',
+'占场' => '佔場',
+'占压' => '佔壓',
+'占壓' => '佔壓',
+'占多' => '佔多',
+'占大' => '佔大',
+'占好' => '佔好',
+'占小' => '佔小',
+'占少' => '佔少',
+'占局部' => '佔局部',
+'占屋' => '佔屋',
+'占山为' => '佔山為',
+'占山為' => '佔山為',
+'占市' => '佔市',
+'占平均' => '佔平均',
+'占床' => '佔床',
+'占座' => '佔座',
+'占後' => '佔後',
+'占得' => '佔得',
+'占德' => '佔德',
+'占所有' => '佔所有',
+'占掉' => '佔掉',
+'占據' => '佔據',
+'占据' => '佔據',
+'占整' => '佔整',
+'占新' => '佔新',
+'占有' => '佔有',
+'占东' => '佔東',
+'占東' => '佔東',
+'占查' => '佔查',
+'占次' => '佔次',
+'占比' => '佔比',
+'占法' => '佔法',
+'占满' => '佔滿',
+'占滿' => '佔滿',
+'占澳' => '佔澳',
+'占為' => '佔為',
+'占为' => '佔為',
+'占率' => '佔率',
+'占用' => '佔用',
+'占畢' => '佔畢',
+'占毕' => '佔畢',
+'占百' => '佔百',
+'占盡' => '佔盡',
+'占尽' => '佔盡',
+'占着' => '佔着',
+'占著' => '佔着',
+'占网' => '佔網',
+'占網' => '佔網',
+'占線' => '佔線',
+'占线' => '佔線',
+'占總' => '佔總',
+'占总' => '佔總',
+'占缺' => '佔缺',
+'占美' => '佔美',
+'占耕' => '佔耕',
+'占至多' => '佔至多',
+'占至少' => '佔至少',
+'占臺' => '佔臺',
+'占英' => '佔英',
+'占萬' => '佔萬',
+'占万' => '佔萬',
+'占著名' => '佔著名',
+'占著者' => '佔著者',
+'占葡' => '佔葡',
+'占蘇' => '佔蘇',
+'占苏' => '佔蘇',
+'占西' => '佔西',
+'占資' => '佔資',
+'占资' => '佔資',
+'占起' => '佔起',
+'占超过' => '佔超過',
+'占超過' => '佔超過',
+'占過' => '佔過',
+'占过' => '佔過',
+'占道' => '佔道',
+'占零' => '佔零',
+'占領' => '佔領',
+'占领' => '佔領',
+'占头' => '佔頭',
+'占頭' => '佔頭',
+'占头筹' => '佔頭籌',
+'占頭籌' => '佔頭籌',
+'占香' => '佔香',
+'占馬' => '佔馬',
+'占马' => '佔馬',
+'占高枝' => '佔高枝',
'維德角' => '佛得角',
-'作品裡' => '作品裏',
'作品里' => '作品裏',
'來著' => '來着',
'來著作' => '來著作',
@@ -16618,7 +14886,8 @@ $zh2HK = array(
'來著者' => '來著者',
'來著述' => '來著述',
'來著錄' => '來著錄',
-'海珊' => '侯賽因',
+'侵占' => '侵佔',
+'俄占' => '俄佔',
'保障著' => '保障着',
'保障著作' => '保障著作',
'保障著名' => '保障著名',
@@ -16635,6 +14904,8 @@ $zh2HK = array(
'信著者' => '信著者',
'信著述' => '信著述',
'信著錄' => '信著錄',
+'个里' => '個裏',
+'倒楣' => '倒霉',
'候著' => '候着',
'候著作' => '候著作',
'候著名' => '候著名',
@@ -16651,6 +14922,7 @@ $zh2HK = array(
'借著者' => '借著者',
'借著述' => '借著述',
'借著錄' => '借著錄',
+'假里' => '假裏',
'做著' => '做着',
'做著作' => '做著作',
'做著名' => '做著名',
@@ -16659,6 +14931,8 @@ $zh2HK = array(
'做著者' => '做著者',
'做著述' => '做著述',
'做著錄' => '做著錄',
+'金氏世界紀錄' => '健力士世界紀錄',
+'吉尼斯世界纪录' => '健力士世界紀錄',
'側著' => '側着',
'側著作' => '側著作',
'側著名' => '側著名',
@@ -16683,10 +14957,15 @@ $zh2HK = array(
'備著者' => '備著者',
'備著述' => '備著述',
'備著錄' => '備著錄',
+'傻里傻气' => '傻裏傻氣',
+'雇员' => '僱員',
+'雇用' => '僱用',
+'凶惡' => '兇惡',
'凶殘' => '兇殘',
'凶殺' => '兇殺',
-'雪铁龙' => '先進',
+'先占' => '先佔',
'雪鐵龍' => '先進',
+'雪铁龙' => '先進',
'光著' => '光着',
'光著作' => '光著作',
'光著名' => '光著名',
@@ -16697,7 +14976,7 @@ $zh2HK = array(
'光著錄' => '光著錄',
'柯林頓' => '克林頓',
'克羅埃西亞' => '克羅地亞',
-'公車上書' => '公車上書',
+'公布' => '公佈',
'冀著' => '冀着',
'冀著作' => '冀著作',
'冀著名' => '冀著名',
@@ -16714,15 +14993,18 @@ $zh2HK = array(
'冒著者' => '冒著者',
'冒著述' => '冒著述',
'冒著錄' => '冒著錄',
-'冬天里' => '冬天裏',
-'冬天裡' => '冬天裏',
-'冬日裡' => '冬日裏',
-'冬日里' => '冬日裏',
+'冰山里' => '冰山裏',
+'恺撒' => '凱撒',
+'函数里' => '函數裏',
'分布' => '分佈',
-'分布於' => '分佈於',
-'分布于' => '分佈於',
+'分占' => '分佔',
+'錢尼' => '切尼',
+'切尔诺贝利' => '切爾諾貝爾',
'列支敦斯登' => '列支敦士登',
+'別著' => '別着',
'賴比瑞亞' => '利比里亞',
+'刮著' => '刮着',
+'到山里' => '到山裏',
'制著' => '制着',
'制著作' => '制著作',
'制著名' => '制著名',
@@ -16739,6 +15021,13 @@ $zh2HK = array(
'刻著者' => '刻著者',
'刻著述' => '刻著述',
'刻著錄' => '刻著錄',
+'前波莫瑞' => '前波美拉尼亞',
+'剪彩' => '剪綵',
+'割占' => '割佔',
+'劃著' => '劃着',
+'擊劍' => '劍擊',
+'击剑' => '劍擊',
+'加薩走廊' => '加沙地帶',
'迦納' => '加納',
'加彭' => '加蓬',
'努力著' => '努力着',
@@ -16757,6 +15046,7 @@ $zh2HK = array(
'努著者' => '努著者',
'努著述' => '努著述',
'努著錄' => '努著錄',
+'布蘭登堡' => '勃蘭登堡',
'動著' => '動着',
'動著作' => '動著作',
'動著名' => '動著名',
@@ -16765,11 +15055,22 @@ $zh2HK = array(
'動著者' => '動著者',
'動著述' => '動著述',
'動著錄' => '動著錄',
-'北环线' => '北環綫',
-'北環線' => '北環綫',
-'医院里' => '医院裏',
+'包著' => '包着',
+'北朝鲜' => '北韓',
+'南朝鲜' => '南韓',
'波札那' => '博茨瓦納',
-'珍妮弗·卡普里亚蒂' => '卡佩雅蒂',
+'占卜' => '占卜',
+'占國橋' => '占國橋',
+'占国桥' => '占國橋',
+'占有五不' => '占有五不',
+'占著作' => '占著作',
+'占著稱' => '占著稱',
+'占著述' => '占著述',
+'占著錄' => '占著錄',
+'卡普里亚蒂' => '卡佩雅蒂',
+'喀拉蚩' => '卡拉奇',
+'卡斯楚' => '卡斯特羅',
+'臥' => '卧',
'印著' => '印着',
'印著作' => '印著作',
'印著名' => '印著名',
@@ -16779,14 +15080,13 @@ $zh2HK = array(
'印著述' => '印著述',
'印著錄' => '印著錄',
'瓜地馬拉' => '危地馬拉',
-'泡麵' => '即食麵',
-'方便面' => '即食麵',
-'快速面' => '即食麵',
-'速食麵' => '即食麵',
'厄瓜多' => '厄瓜多爾',
'厄瓜多爾' => '厄瓜多爾',
'厄瓜多尔' => '厄瓜多爾',
+'厄利垂亚' => '厄立特里亞',
'厄利垂亞' => '厄立特里亞',
+'源代码' => '原始碼',
+'去山里' => '去山裏',
'去著' => '去着',
'去著作' => '去著作',
'去著名' => '去著名',
@@ -16795,6 +15095,7 @@ $zh2HK = array(
'去著者' => '去著者',
'去著述' => '去著述',
'去著錄' => '去著錄',
+'参数里' => '參數裏',
'受著' => '受着',
'受著作' => '受著作',
'受著名' => '受著名',
@@ -16803,6 +15104,9 @@ $zh2HK = array(
'受著者' => '受著者',
'受著述' => '受著述',
'受著錄' => '受著錄',
+'丛林里' => '叢林裏',
+'口里' => '口裏',
+'只占' => '只佔',
'叫著' => '叫着',
'叫著作' => '叫著作',
'叫著名' => '叫著名',
@@ -16811,12 +15115,20 @@ $zh2HK = array(
'叫著者' => '叫著者',
'叫著述' => '叫著述',
'叫著錄' => '叫著錄',
+'古柯鹼' => '可卡因',
'叱吒' => '叱咤',
-'叱咤' => '叱咤',
+'斯皮尔伯格' => '史匹堡',
+'史匹柏' => '史匹堡',
+'史蒂芬·史匹柏' => '史提芬·史匹堡',
+'斯蒂芬·斯皮尔伯格' => '史提芬·史匹堡',
'吃不著' => '吃不着',
'吃得著' => '吃得着',
'吃著' => '吃着',
+'吃里扒外' => '吃裏扒外',
+'吃里爬外' => '吃裏爬外',
'吉布地' => '吉布堤',
+'吉尔吉斯斯坦' => '吉爾吉斯',
+'吊著' => '吊着',
'向著' => '向着',
'向著作' => '向著作',
'向著名' => '向著名',
@@ -16825,6 +15137,8 @@ $zh2HK = array(
'向著者' => '向著者',
'向著述' => '向著述',
'向著錄' => '向著錄',
+'吞占' => '吞佔',
+'吧台' => '吧枱',
'含著' => '含着',
'含著作' => '含著作',
'含著名' => '含著名',
@@ -16841,6 +15155,8 @@ $zh2HK = array(
'吹著者' => '吹著者',
'吹著述' => '吹著述',
'吹著錄' => '吹著錄',
+'呆著' => '呆着',
+'呆里呆气' => '呆裏呆氣',
'味著' => '味着',
'味著作' => '味著作',
'味著名' => '味著名',
@@ -16849,8 +15165,12 @@ $zh2HK = array(
'味著者' => '味著者',
'味著述' => '味著述',
'味著錄' => '味著錄',
-'咤' => '咤',
+'咖哩' => '咖喱',
+'麦克风' => '咪高峰',
+'麥克風' => '咪高峰',
+'哥特式' => '哥德式',
'哥斯大黎加' => '哥斯達黎加',
+'哪里' => '哪裏',
'哭著' => '哭着',
'哭著作' => '哭著作',
'哭著名' => '哭著名',
@@ -16875,12 +15195,16 @@ $zh2HK = array(
'喝著者' => '喝著者',
'喝著述' => '喝著述',
'喝著錄' => '喝著錄',
-'自行车' => '單車',
+'乔治·奥威尔' => '喬治·歐威爾',
+'單眼相機' => '單鏡反光機',
+'单反相机' => '單鏡反光機',
'嗅不著' => '嗅不着',
'嗅得著' => '嗅得着',
'嗅著' => '嗅着',
+'凱薩琳' => '嘉芙蓮',
+'凯瑟琳' => '嘉芙蓮',
+'嘯吒' => '嘯咤',
'嘴里' => '嘴裏',
-'嘴裡' => '嘴裏',
'嚷著' => '嚷着',
'嚷著作' => '嚷著作',
'嚷著名' => '嚷著名',
@@ -16889,7 +15213,11 @@ $zh2HK = array(
'嚷著者' => '嚷著者',
'嚷著述' => '嚷著述',
'嚷著錄' => '嚷著錄',
+'回著' => '回着',
+'回著名' => '回著名',
'因著' => '因着',
+'因著〈' => '因著〈',
+'因著《' => '因著《',
'因著作' => '因著作',
'因著名' => '因著名',
'因著書' => '因著書',
@@ -16905,6 +15233,9 @@ $zh2HK = array(
'困著者' => '困著者',
'困著述' => '困著述',
'困著錄' => '困著錄',
+'圈占' => '圈佔',
+'圈里' => '圈裏',
+'西洋棋' => '國際象棋',
'圍著' => '圍着',
'圍著作' => '圍著作',
'圍著名' => '圍著名',
@@ -16913,9 +15244,13 @@ $zh2HK = array(
'圍著者' => '圍著者',
'圍著述' => '圍著述',
'圍著錄' => '圍著錄',
+'园里' => '園裏',
'吐瓦魯' => '圖瓦盧',
-'土豆網' => '土豆網',
-'土豆网' => '土豆網',
+'土魯斯' => '圖盧茲',
+'图里的' => '圖裏的',
+'图里,' => '圖裏,',
+'土里' => '土裏',
+'在山里' => '在山裏',
'在著' => '在着',
'在著作' => '在著作',
'在著名' => '在著名',
@@ -16925,6 +15260,11 @@ $zh2HK = array(
'在著述' => '在著述',
'在著錄' => '在著錄',
'蓋亞那' => '圭亞那',
+'地占' => '地佔',
+'地图里' => '地圖裏',
+'IP' => '地址',
+'堪培拉' => '坎培拉',
+'坐台' => '坐枱',
'坐著' => '坐着',
'坐著作' => '坐著作',
'坐著名' => '坐著名',
@@ -16933,11 +15273,19 @@ $zh2HK = array(
'坐著者' => '坐著者',
'坐著述' => '坐著述',
'坐著錄' => '坐著錄',
+'坑里' => '坑裏',
'坦尚尼亞' => '坦桑尼亞',
-'衣索匹亞' => '埃塞俄比亞',
+'衣索匹亞' => '埃塞俄比亚',
'衣索比亞' => '埃塞俄比亞',
+'葉里溫' => '埃里溫',
+'城里' => '城裏',
+'域里' => '域裏',
'吉里巴斯' => '基里巴斯',
+'场里' => '場裏',
+'塗著' => '塗着',
'塞普勒斯' => '塞浦路斯',
+'賽普勒斯' => '塞浦路斯',
+'塞爾維亞與蒙特內哥羅' => '塞爾維亞和黑山',
'塞席爾' => '塞舌爾',
'壓著' => '壓着',
'壓著作' => '壓著作',
@@ -16947,10 +15295,12 @@ $zh2HK = array(
'壓著者' => '壓著者',
'壓著述' => '壓著述',
'壓著錄' => '壓著錄',
-'夏天里' => '夏天裏',
-'夏天裡' => '夏天裏',
-'夏日里' => '夏日裏',
-'夏日裡' => '夏日裏',
+'壶里' => '壺裏',
+'多占' => '多佔',
+'夜晚里' => '夜晚裏',
+'夜里' => '夜裏',
+'夢有五不占' => '夢有五不占',
+'梦有五不占' => '夢有五不占',
'夢著' => '夢着',
'夢著作' => '夢著作',
'夢著名' => '夢著名',
@@ -16959,7 +15309,9 @@ $zh2HK = array(
'夢著者' => '夢著者',
'夢著述' => '夢著述',
'夢著錄' => '夢著錄',
-'大卫·贝克汉姆' => '大衛碧咸',
+'梦里' => '夢裏',
+'天里' => '天裏',
+'宇航员' => '太空人',
'夾著' => '夾着',
'夾著作' => '夾著作',
'夾著名' => '夾著名',
@@ -16968,6 +15320,19 @@ $zh2HK = array(
'夾著者' => '夾著者',
'夾著述' => '夾著述',
'夾著錄' => '夾著錄',
+'奧占' => '奧佔',
+'奥占' => '奧佔',
+'歐巴馬' => '奧巴馬',
+'妆台' => '妝枱',
+'威斯伐倫' => '威斯特法倫',
+'威爾士' => '威爾斯',
+'威尔士' => '威爾斯',
+'子里' => '子裏',
+'字里行间' => '字裏行間',
+'存著' => '存着',
+'存著名' => '存著名',
+'孟德爾頌' => '孟德爾遜',
+'门德尔松' => '孟德爾遜',
'孤著' => '孤着',
'孤著作' => '孤著作',
'孤著名' => '孤著名',
@@ -16984,7 +15349,6 @@ $zh2HK = array(
'學著者' => '學著者',
'學著述' => '學著述',
'學著錄' => '學著錄',
-'學裡' => '學裏',
'学里' => '學裏',
'守著' => '守着',
'守著作' => '守著作',
@@ -16994,6 +15358,7 @@ $zh2HK = array(
'守著者' => '守著者',
'守著述' => '守著述',
'守著錄' => '守著錄',
+'安哈特' => '安哈爾特',
'安地卡及巴布達' => '安提瓜和巴布達',
'定著' => '定着',
'定著作' => '定著作',
@@ -17003,9 +15368,14 @@ $zh2HK = array(
'定著者' => '定著者',
'定著述' => '定著述',
'定著錄' => '定著錄',
+'宣布' => '宣佈',
+'宫里' => '宮裏',
+'家里' => '家裏',
+'密布' => '密佈',
+'密西根' => '密歇根',
'沃尓沃' => '富豪',
-'寒假裡' => '寒假裏',
-'寒假里' => '寒假裏',
+'寡占' => '寡佔',
+'写字台' => '寫字枱',
'寫著' => '寫着',
'寫著作' => '寫著作',
'寫著名' => '寫著名',
@@ -17014,10 +15384,13 @@ $zh2HK = array(
'寫著者' => '寫著者',
'寫著述' => '寫著述',
'寫著錄' => '寫著錄',
-'将军澳线' => '將軍澳綫',
-'將軍澳線' => '將軍澳綫',
+'宝里宝气' => '寶裏寶氣',
+'封面里' => '封面裏',
+'將占' => '將佔',
+'将占' => '將佔',
+'將占卜' => '將占卜',
+'将占卜' => '將占卜',
'专辑里' => '專輯裏',
-'專輯裡' => '專輯裏',
'尋著' => '尋着',
'尋著作' => '尋著作',
'尋著名' => '尋著名',
@@ -17034,12 +15407,12 @@ $zh2HK = array(
'對著者' => '對著者',
'對著述' => '對著述',
'對著錄' => '對著錄',
+'少占' => '少佔',
+'就里' => '就裏',
+'尼克松' => '尼克遜',
'奈及利亞' => '尼日利亞',
-'尼日利亚' => '尼日利亞',
-'尼日利亞' => '尼日利亞',
-'尼日尔' => '尼日爾',
-'尼日爾' => '尼日爾',
-'尼日' => '尼日爾',
+'局里' => '局裏',
+'屋里' => '屋裏',
'展著' => '展着',
'展著作' => '展著作',
'展著名' => '展著名',
@@ -17048,19 +15421,30 @@ $zh2HK = array(
'展著者' => '展著者',
'展著述' => '展著述',
'展著錄' => '展著錄',
-'山洞裡' => '山洞裏',
-'山洞里' => '山洞裏',
+'屯里' => '屯裏',
+'山里有' => '山裏有',
+'山里的' => '山裏的',
'甘比亞' => '岡比亞',
-'公車' => '巴士',
+'岸裡' => '岸裡',
+'工作台' => '工作枱',
+'已占' => '已佔',
+'巴塞罗那' => '巴塞隆拿',
+'巴塞隆納' => '巴塞隆拿',
'巴貝多' => '巴巴多斯',
'巴布亞紐幾內亞' => '巴布亞新畿內亞',
+'巴士拉' => '巴斯拉',
+'巷里' => '巷裏',
+'市占' => '市佔',
+'市里' => '市裏',
'布吉納法索' => '布基納法索',
-'布希亞' => '布希亞',
-'布希亚' => '布希亞',
-'布希' => '布殊',
'布什' => '布殊',
+'布里斯托尔' => '布里斯托',
'蒲隆地' => '布隆迪',
+'席哈克' => '希拉克',
+'希拉蕊' => '希拉里',
'希特勒' => '希特拉',
+'帛琉' => '帕勞',
+'巴尔米拉环礁' => '帕邁拉環礁',
'帕劳' => '帛琉',
'帶著' => '帶着',
'帶著作' => '帶著作',
@@ -17070,6 +15454,7 @@ $zh2HK = array(
'帶著者' => '帶著者',
'帶著述' => '帶著述',
'帶著錄' => '帶著錄',
+'幅图里' => '幅圖裏',
'幫著' => '幫着',
'幫著作' => '幫著作',
'幫著名' => '幫著名',
@@ -17081,10 +15466,15 @@ $zh2HK = array(
'干着急' => '干着急',
'賓士' => '平治',
'年代里' => '年代裏',
-'年代裡' => '年代裏',
-'幹著' => '幹着',
+'年里' => '年裏',
'干着' => '幹着',
+'幹著' => '幹着',
+'幹著名' => '幹著名',
+'幹著稱' => '幹著稱',
'幾內亞比索' => '幾內亞比紹',
+'店里' => '店裏',
+'坎城' => '康城',
+'戛纳' => '康城',
'康著' => '康着',
'康著作' => '康著作',
'康著名' => '康著名',
@@ -17093,6 +15483,16 @@ $zh2HK = array(
'康著者' => '康著者',
'康著述' => '康著述',
'康著錄' => '康著錄',
+'庙里' => '廟裏',
+'强占' => '強佔',
+'強占' => '強佔',
+'约翰斯顿岛' => '強斯頓環礁',
+'弹子台' => '彈子枱',
+'蹦床' => '彈床',
+'弹珠台' => '彈珠枱',
+'形上學' => '形而上學',
+'谢丽·布莱尔' => '彭雪玲',
+'往里' => '往裏',
'待著' => '待着',
'待著作' => '待著作',
'待著名' => '待著名',
@@ -17109,6 +15509,10 @@ $zh2HK = array(
'得著者' => '得著者',
'得著述' => '得著述',
'得著錄' => '得著錄',
+'从图里' => '從圖裏',
+'从山里' => '從山裏',
+'从里到外' => '從裏到外',
+'从里向外' => '從裏向外',
'循著' => '循着',
'循著作' => '循著作',
'循著名' => '循著名',
@@ -17117,8 +15521,13 @@ $zh2HK = array(
'循著者' => '循著者',
'循著述' => '循著述',
'循著錄' => '循著錄',
+'徵占' => '徵佔',
+'征占' => '徵佔',
+'德占' => '德佔',
+'得克萨斯' => '德克薩斯',
+'德勒斯登' => '德累斯頓',
+'澈底' => '徹底',
'心著' => '心着',
-'心繫著' => '心繫着',
'心著作' => '心著作',
'心著名' => '心著名',
'心著書' => '心著書',
@@ -17126,8 +15535,8 @@ $zh2HK = array(
'心著者' => '心著者',
'心著述' => '心著述',
'心著錄' => '心著錄',
-'心裡' => '心裏',
'心里' => '心裏',
+'心里面' => '心裏面',
'忍著' => '忍着',
'忍著作' => '忍著作',
'忍著名' => '忍著名',
@@ -17136,7 +15545,6 @@ $zh2HK = array(
'忍著者' => '忍著者',
'忍著述' => '忍著述',
'忍著錄' => '忍著錄',
-'志著' => '志着',
'志著作' => '志著作',
'志著名' => '志著名',
'志著書' => '志著書',
@@ -17152,6 +15560,7 @@ $zh2HK = array(
'忙著者' => '忙著者',
'忙著述' => '忙著述',
'忙著錄' => '忙著錄',
+'忙里' => '忙裏',
'急著' => '急着',
'急著作' => '急著作',
'急著名' => '急著名',
@@ -17168,6 +15577,7 @@ $zh2HK = array(
'性著者' => '性著者',
'性著述' => '性著述',
'性著錄' => '性著錄',
+'怪里怪气' => '怪裏怪氣',
'悠著' => '悠着',
'悠著作' => '悠著作',
'悠著名' => '悠著名',
@@ -17176,6 +15586,7 @@ $zh2HK = array(
'悠著者' => '悠著者',
'悠著述' => '悠著述',
'悠著錄' => '悠著錄',
+'悶著' => '悶着',
'想象' => '想像',
'想著' => '想着',
'想著作' => '想著作',
@@ -17185,7 +15596,10 @@ $zh2HK = array(
'想著者' => '想著者',
'想著述' => '想著述',
'想著錄' => '想著錄',
+'義占' => '意佔',
+'意占' => '意佔',
'義大利' => '意大利',
+'艾滋' => '愛滋',
'愛著' => '愛着',
'愛著作' => '愛著作',
'愛著名' => '愛著名',
@@ -17194,6 +15608,7 @@ $zh2HK = array(
'愛著者' => '愛著者',
'愛著述' => '愛著述',
'愛著錄' => '愛著錄',
+'慌里慌张' => '慌裏慌張',
'慣著' => '慣着',
'慣著作' => '慣著作',
'慣著名' => '慣著名',
@@ -17202,6 +15617,8 @@ $zh2HK = array(
'慣著者' => '慣著者',
'慣著述' => '慣著述',
'慣著錄' => '慣著錄',
+'宪法里' => '憲法裏',
+'应用程序' => '應用程式',
'應著' => '應着',
'應著作' => '應著作',
'應著名' => '應著名',
@@ -17218,6 +15635,7 @@ $zh2HK = array(
'懷著者' => '懷著者',
'懷著述' => '懷著述',
'懷著錄' => '懷著錄',
+'怀里' => '懷裏',
'戀著' => '戀着',
'戀著作' => '戀著作',
'戀著名' => '戀著名',
@@ -17226,6 +15644,7 @@ $zh2HK = array(
'戀著者' => '戀著者',
'戀著述' => '戀著述',
'戀著錄' => '戀著錄',
+'戈巴契夫' => '戈爾巴喬夫',
'戰著' => '戰着',
'戰著作' => '戰著作',
'戰著名' => '戰著名',
@@ -17234,10 +15653,13 @@ $zh2HK = array(
'戰著者' => '戰著者',
'戰著述' => '戰著述',
'戰著錄' => '戰著錄',
-'戲裡' => '戲裏',
+'戏彩娱亲' => '戲綵娛親',
+'戲彩娛親' => '戲綵娛親',
'戏里' => '戲裏',
-'黛安娜' => '戴安娜',
+'撒切尔' => '戴卓爾',
+'柴契爾' => '戴卓爾',
'狄安娜' => '戴安娜',
+'黛安娜' => '戴安娜',
'戴著' => '戴着',
'戴著作' => '戴著作',
'戴著名' => '戴著名',
@@ -17246,7 +15668,11 @@ $zh2HK = array(
'戴著者' => '戴著者',
'戴著述' => '戴著述',
'戴著錄' => '戴著錄',
+'房里' => '房裏',
+'所占' => '所佔',
'索羅門群島' => '所羅門群島',
+'手里' => '手裏',
+'手里剑' => '手裏劍',
'列印' => '打印',
'印表機' => '打印機',
'打著' => '打着',
@@ -17360,6 +15786,8 @@ $zh2HK = array(
'捆著者' => '捆著者',
'捆著述' => '捆著述',
'捆著錄' => '捆著錄',
+'俯卧撑' => '掌上壓',
+'伏地挺身' => '掌上壓',
'掖著' => '掖着',
'掖著作' => '掖著作',
'掖著名' => '掖著名',
@@ -17375,7 +15803,7 @@ $zh2HK = array(
'掙著者' => '掙著者',
'掙著述' => '掙著述',
'掙著錄' => '掙著錄',
-'掛鉤' => '掛鈎',
+'掛著' => '掛着',
'接著' => '接着',
'接著作' => '接著作',
'接著名' => '接著名',
@@ -17405,6 +15833,9 @@ $zh2HK = array(
'揮著者' => '揮著者',
'揮著述' => '揮著述',
'揮著錄' => '揮著錄',
+'搜索引擎' => '搜尋引擎',
+'抢占' => '搶佔',
+'搶占' => '搶佔',
'摟著' => '摟着',
'摟著作' => '摟著作',
'摟著名' => '摟著名',
@@ -17412,6 +15843,8 @@ $zh2HK = array(
'摟著者' => '摟著者',
'摟著述' => '摟著述',
'摟著錄' => '摟著錄',
+'折台' => '摺枱',
+'撒马尔罕' => '撒馬爾罕',
'撼著' => '撼着',
'撼著作' => '撼著作',
'撼著名' => '撼著名',
@@ -17427,6 +15860,7 @@ $zh2HK = array(
'擋著者' => '擋著者',
'擋著述' => '擋著述',
'擋著錄' => '擋著錄',
+'擔著' => '擔着',
'據著' => '據着',
'據著作' => '據著作',
'據著名' => '據著名',
@@ -17435,6 +15869,9 @@ $zh2HK = array(
'據著者' => '據著者',
'據著述' => '據著述',
'據著錄' => '據著錄',
+'擡著' => '擡着',
+'摆布' => '擺佈',
+'擺布' => '擺佈',
'擺著' => '擺着',
'擺著作' => '擺著作',
'擺著名' => '擺著名',
@@ -17442,8 +15879,12 @@ $zh2HK = array(
'擺著者' => '擺著者',
'擺著述' => '擺著述',
'擺著錄' => '擺著錄',
-'故事里' => '故事裏',
-'故事裡' => '故事裏',
+'攻占' => '攻佔',
+'放著' => '放着',
+'放著作' => '放著作',
+'放著名' => '放著名',
+'放著称' => '放著稱',
+'放著稱' => '放著稱',
'敞著' => '敞着',
'敞著作' => '敞著作',
'敞著名' => '敞著名',
@@ -17451,7 +15892,15 @@ $zh2HK = array(
'敞著者' => '敞著者',
'敞著述' => '敞著述',
'敞著錄' => '敞著錄',
+'散布' => '散佈',
'數著' => '數着',
+'数字技术' => '數碼技術',
+'數位技術' => '數碼技術',
+'數位相機' => '數碼相機',
+'數碼訊號' => '數碼訊號',
+'数字信号' => '數碼訊號',
+'數位電視' => '數碼電視',
+'数字电视' => '數碼電視',
'數著作' => '數著作',
'數著名' => '數著名',
'數著稱' => '數著稱',
@@ -17468,10 +15917,14 @@ $zh2HK = array(
'斥著錄' => '斥著錄',
'史瓦濟蘭' => '斯威士蘭',
'斯洛維尼亞' => '斯洛文尼亞',
-'新著龍虎門' => '新著龍虎門',
+'紐澳良' => '新奧爾良',
'紐西蘭' => '新西蘭',
-'日子里' => '日子裏',
-'日子裡' => '日子裏',
+'方法里' => '方法裏',
+'族里' => '族裏',
+'日占' => '日佔',
+'日里' => '日裏',
+'昂山素季' => '昂山素姬',
+'翁山蘇姬' => '昂山素姬',
'昂著' => '昂着',
'昂著作' => '昂著作',
'昂著名' => '昂著名',
@@ -17480,6 +15933,8 @@ $zh2HK = array(
'昂著者' => '昂著者',
'昂著述' => '昂著述',
'昂著錄' => '昂著錄',
+'星羅棋布' => '星羅棋佈',
+'星罗棋布' => '星羅棋佈',
'映著' => '映着',
'映著作' => '映著作',
'映著名' => '映著名',
@@ -17488,14 +15943,6 @@ $zh2HK = array(
'映著者' => '映著者',
'映著述' => '映著述',
'映著錄' => '映著錄',
-'春假里' => '春假裏',
-'春假裡' => '春假裏',
-'春天裡' => '春天裏',
-'春天里' => '春天裏',
-'春日裡' => '春日裏',
-'春日里' => '春日裏',
-'时间里' => '時間裏',
-'時間裡' => '時間裏',
'晃著' => '晃着',
'晃著作' => '晃著作',
'晃著名' => '晃著名',
@@ -17503,8 +15950,13 @@ $zh2HK = array(
'晃著者' => '晃著者',
'晃著述' => '晃著述',
'晃著錄' => '晃著錄',
-'暑假里' => '暑假裏',
-'暑假裡' => '暑假裏',
+'芯片' => '晶片',
+'晶元' => '晶片',
+'智慧型' => '智能',
+'智慧卡' => '智能卡',
+'智慧手機' => '智能手機',
+'暗地里' => '暗地裏',
+'暗沟里' => '暗溝裏',
'暗著' => '暗着',
'暗著作' => '暗著作',
'暗著名' => '暗著名',
@@ -17513,6 +15965,12 @@ $zh2HK = array(
'暗著者' => '暗著者',
'暗著述' => '暗著述',
'暗著錄' => '暗著錄',
+'暗里' => '暗裏',
+'會占' => '會佔',
+'会占' => '會佔',
+'會占卜' => '會占卜',
+'会占卜' => '會占卜',
+'会里' => '會裏',
'有著' => '有着',
'有著作' => '有著作',
'有著名' => '有著名',
@@ -17521,6 +15979,9 @@ $zh2HK = array(
'有著者' => '有著者',
'有著述' => '有著述',
'有著錄' => '有著錄',
+'罗纳德·里根' => '朗奴·列根',
+'罗纳尔多' => '朗拿度',
+'罗纳尔迪尼奥' => '朗拿甸奴',
'望著' => '望着',
'望著作' => '望著作',
'望著名' => '望著名',
@@ -17536,6 +15997,8 @@ $zh2HK = array(
'朝著者' => '朝著者',
'朝著述' => '朝著述',
'朝著錄' => '朝著錄',
+'板球' => '木球',
+'班傑明' => '本傑明',
'本著' => '本着',
'本著作' => '本著作',
'本著名' => '本著名',
@@ -17544,12 +16007,13 @@ $zh2HK = array(
'本著者' => '本著者',
'本著述' => '本著述',
'本著錄' => '本著錄',
-'村子里' => '村子裏',
-'村子裡' => '村子裏',
-'东涌线' => '東涌綫',
-'東涌線' => '東涌綫',
-'東鐵線' => '東鐵綫',
-'东铁线' => '東鐵綫',
+'里瓦尔多' => '李華度',
+'村里' => '村裏',
+'杜塞道夫' => '杜塞爾多夫',
+'迪拜' => '杜拜',
+'亚细安' => '東盟',
+'東協' => '東盟',
+'板著臉' => '板着臉',
'枕著' => '枕着',
'枕著作' => '枕著作',
'枕著名' => '枕著名',
@@ -17557,9 +16021,22 @@ $zh2HK = array(
'枕著者' => '枕著者',
'枕著述' => '枕著述',
'枕著錄' => '枕著錄',
+'檯' => '枱',
+'台布' => '枱布',
+'台历' => '枱曆',
+'台灯' => '枱燈',
+'台面上' => '枱面上',
+'柏林墙' => '柏林圍牆',
+'奧黛莉·朵杜' => '柯德莉·塔圖',
+'奥黛丽·赫本' => '柯德莉·夏萍',
+'奧黛麗·赫本' => '柯德莉·夏萍',
+'哥廷根' => '格丁根',
'格瑞那達' => '格林納達',
+'格鲁吉亚' => '格魯吉亞',
'撞球' => '桌球',
'台球' => '桌球',
+'梅鐸' => '梅鐸',
+'默多克' => '梅鐸',
'梳著' => '梳着',
'梳著作' => '梳著作',
'梳著名' => '梳著名',
@@ -17567,12 +16044,12 @@ $zh2HK = array(
'梳著者' => '梳著者',
'梳著述' => '梳著述',
'梳著錄' => '梳著錄',
-'森林裡' => '森林裏',
+'棉里' => '棉裏',
+'桑巴舞' => '森巴舞',
'森林里' => '森林裏',
-'棺材裡' => '棺材裏',
'棺材里' => '棺材裏',
-'榴蓮' => '榴槤',
'榴莲' => '榴槤',
+'榴蓮' => '榴槤',
'樂著' => '樂着',
'樂著作' => '樂著作',
'樂著名' => '樂著名',
@@ -17581,14 +16058,17 @@ $zh2HK = array(
'樂著者' => '樂著者',
'樂著述' => '樂著述',
'樂著錄' => '樂著錄',
+'標志著' => '標志着',
'寶獅' => '標致',
'標誌著' => '標誌着',
-'機場快線' => '機場快綫',
-'机场快线' => '機場快綫',
+'树林里' => '樹林裏',
+'工具機' => '機床',
'機器人' => '機械人',
'机器人' => '機械人',
+'柜台' => '櫃枱',
'历史里' => '歷史裏',
-'歷史裡' => '歷史裏',
+'死里求生' => '死裏求生',
+'死里逃生' => '死裏逃生',
'殺著' => '殺着',
'殺著作' => '殺著作',
'殺著名' => '殺著名',
@@ -17597,9 +16077,14 @@ $zh2HK = array(
'殺著者' => '殺著者',
'殺著述' => '殺著述',
'殺著錄' => '殺著錄',
+'壳里' => '殼裏',
'茅利塔尼亞' => '毛里塔尼亞',
-'毛里求斯' => '毛里裘斯',
'模里西斯' => '毛里裘斯',
+'毛里求斯' => '毛里裘斯',
+'公厘' => '毫米',
+'公釐' => '毫米',
+'水来汤里去' => '水來湯裏去',
+'水里' => '水裏',
'求著' => '求着',
'求著作' => '求著作',
'求著名' => '求著名',
@@ -17608,7 +16093,10 @@ $zh2HK = array(
'求著者' => '求著者',
'求著述' => '求著述',
'求著錄' => '求著錄',
+'池里' => '池裏',
+'汙' => '污',
'文莱' => '汶萊',
+'沈著' => '沈着',
'沉著' => '沉着',
'沉著作' => '沉著作',
'沉著名' => '沉著名',
@@ -17617,13 +16105,14 @@ $zh2HK = array(
'沉著者' => '沉著者',
'沉著述' => '沉著述',
'沉著錄' => '沉著錄',
-'沙中线' => '沙中綫',
-'沙中線' => '沙中綫',
-'沙地阿拉伯' => '沙特阿拉伯',
+'沖著' => '沖着',
+'沖著。' => '沖著。',
+'沖著《' => '沖著《',
+'沖著,' => '沖著,',
'沙烏地阿拉伯' => '沙特阿拉伯',
-'沙田至中環線' => '沙田至中環綫',
-'沙田至中环线' => '沙田至中環綫',
-'马拉特·萨芬' => '沙芬',
+'沙地阿拉伯' => '沙特阿拉伯',
+'沙里淘金' => '沙裏淘金',
+'河里' => '河裏',
'沿著' => '沿着',
'沿著作' => '沿著作',
'沿著名' => '沿著名',
@@ -17632,7 +16121,13 @@ $zh2HK = array(
'沿著者' => '沿著者',
'沿著述' => '沿著述',
'沿著錄' => '沿著錄',
+'法占' => '法佔',
+'法里,' => '法裏,',
+'玻里尼西亞' => '波利尼西亞',
+'波士尼亞' => '波斯尼亞',
'波士尼亞赫塞哥維納' => '波斯尼亞黑塞哥維那',
+'幫浦' => '泵',
+'洞里' => '洞裏',
'辛巴威' => '津巴布韋',
'宏都拉斯' => '洪都拉斯',
'活著' => '活着',
@@ -17643,6 +16138,8 @@ $zh2HK = array(
'活著者' => '活著者',
'活著述' => '活著述',
'活著錄' => '活著錄',
+'移动网络' => '流動網絡',
+'行動網路' => '流動網絡',
'行動電話' => '流動電話',
'移动电话' => '流動電話',
'流著' => '流着',
@@ -17655,6 +16152,7 @@ $zh2HK = array(
'流著錄' => '流著錄',
'流露著' => '流露着',
'浮著' => '浮着',
+'蘭卡威' => '浮羅交怡',
'浮著作' => '浮著作',
'浮著名' => '浮著名',
'浮著書' => '浮著書',
@@ -17662,6 +16160,10 @@ $zh2HK = array(
'浮著者' => '浮著者',
'浮著述' => '浮著述',
'浮著錄' => '浮著錄',
+'海上布雷' => '海上佈雷',
+'海洛因' => '海洛英',
+'海灣布雷' => '海灣佈雷',
+'海湾布雷' => '海灣佈雷',
'涵著' => '涵着',
'涵著作' => '涵著作',
'涵著名' => '涵著名',
@@ -17678,10 +16180,8 @@ $zh2HK = array(
'涼著者' => '涼著者',
'涼著述' => '涼著述',
'涼著錄' => '涼著錄',
-'深淵裡' => '深淵裏',
-'深渊里' => '深渊裏',
-'港岛线' => '港島綫',
-'港島線' => '港島綫',
+'深山里' => '深山裏',
+'渊里' => '淵裏',
'渴著' => '渴着',
'渴著作' => '渴著作',
'渴著名' => '渴著名',
@@ -17690,6 +16190,11 @@ $zh2HK = array(
'渴著者' => '渴著者',
'渴著述' => '渴著述',
'渴著錄' => '渴著錄',
+'湊合著' => '湊合着',
+'湖里' => '湖裏',
+'准将' => '準將',
+'准將' => '準將',
+'准尉' => '準尉',
'溢著' => '溢着',
'溢著作' => '溢著作',
'溢著名' => '溢著名',
@@ -17706,6 +16211,8 @@ $zh2HK = array(
'演著者' => '演著者',
'演著述' => '演著述',
'演著錄' => '演著錄',
+'漠里' => '漠裏',
+'漢諾瓦' => '漢諾威',
'漫著' => '漫着',
'漫著作' => '漫著作',
'漫著名' => '漫著名',
@@ -17714,6 +16221,7 @@ $zh2HK = array(
'漫著者' => '漫著者',
'漫著述' => '漫著述',
'漫著錄' => '漫著錄',
+'潜意识里' => '潛意識裏',
'潤著' => '潤着',
'潤著作' => '潤著作',
'潤著名' => '潤著名',
@@ -17722,15 +16230,20 @@ $zh2HK = array(
'潤著者' => '潤著者',
'潤著述' => '潤著述',
'潤著錄' => '潤著錄',
-'無線劇集' => '無綫劇集',
-'无线剧集' => '無綫劇集',
-'無線收費' => '無綫收費',
-'无线收费' => '無綫收費',
-'无线节目' => '無綫節目',
-'無線節目' => '無綫節目',
-'无线电视' => '無綫電視',
-'無線電視' => '無綫電視',
+'潭里' => '潭裏',
+'溼' => '濕',
+'火山里' => '火山裏',
+'火箭布雷' => '火箭佈雷',
+'為著' => '為着',
+'為著《' => '為著《',
+'為著作' => '為著作',
+'為著名' => '為著名',
+'為著稱' => '為著稱',
+'為著者' => '為著者',
+'為著述' => '為著述',
+'為著錄' => '為著錄',
'菸' => '煙',
+'照占' => '照佔',
'照著' => '照着',
'照著作' => '照著作',
'照著名' => '照著名',
@@ -17755,6 +16268,9 @@ $zh2HK = array(
'爭著者' => '爭著者',
'爭著述' => '爭著述',
'爭著錄' => '爭著錄',
+'墙里' => '牆裏',
+'版图里' => '版圖裏',
+'版权信息' => '版權資訊',
'千里達托貝哥' => '特立尼達和多巴哥',
'牽著' => '牽着',
'牽著作' => '牽著作',
@@ -17773,7 +16289,7 @@ $zh2HK = array(
'犯不著述' => '犯不著述',
'犯不著錄' => '犯不著錄',
'犯得著' => '犯得着',
-'犬只' => '狗隻',
+'狂占' => '狂佔',
'猜著' => '猜着',
'猜著作' => '猜著作',
'猜著名' => '猜著名',
@@ -17783,7 +16299,8 @@ $zh2HK = array(
'猜著述' => '猜著述',
'猜著錄' => '猜著錄',
'狱里' => '獄裏',
-'獄裡' => '獄裏',
+'獨占' => '獨佔',
+'独占' => '獨佔',
'獨著' => '獨着',
'獨著作' => '獨著作',
'獨著名' => '獨著名',
@@ -17800,8 +16317,12 @@ $zh2HK = array(
'獲著者' => '獲著者',
'獲著述' => '獲著述',
'獲著錄' => '獲著錄',
-'諾魯' => '瑙魯',
+'班里' => '班裏',
+'球台' => '球枱',
+'卢塞恩' => '琉森',
+'諾鲁' => '瑙魯',
'萬那杜' => '瓦努阿圖',
+'肯尼迪' => '甘迺迪',
'甜著' => '甜着',
'甜著作' => '甜著作',
'甜著名' => '甜著名',
@@ -17812,6 +16333,7 @@ $zh2HK = array(
'甜著錄' => '甜著錄',
'用不著' => '用不着',
'用得著' => '用得着',
+'用法里' => '用法裏',
'用著' => '用着',
'用著作' => '用著作',
'用著名' => '用著名',
@@ -17820,6 +16342,11 @@ $zh2HK = array(
'用著者' => '用著者',
'用著述' => '用著述',
'用著錄' => '用著錄',
+'田里' => '田裏',
+'由表及里' => '由表及裏',
+'A型肝炎' => '甲型肝炎',
+'A肝' => '甲肝',
+'界里' => '界裏',
'留著' => '留着',
'留著作' => '留著作',
'留著名' => '留著名',
@@ -17828,14 +16355,29 @@ $zh2HK = array(
'留著者' => '留著者',
'留著述' => '留著述',
'留著錄' => '留著錄',
+'畫著' => '畫着',
+'畫著作' => '畫著作',
+'畫著名' => '畫著名',
+'畫著稱' => '畫著稱',
+'畫著者' => '畫著者',
'當著' => '當着',
'當著作' => '當著作',
+'過著作' => '當著作',
'當著名' => '當著名',
+'過著名' => '當著名',
+'過著書' => '當著書',
'當著書' => '當著書',
'當著稱' => '當著稱',
+'過著稱' => '當著稱',
'當著者' => '當著者',
+'過著者' => '當著者',
+'過著述' => '當著述',
'當著述' => '當著述',
+'過著錄' => '當著錄',
'當著錄' => '當著錄',
+'几内亚' => '畿內亞',
+'幾內亞' => '畿內亞',
+'迭代' => '疊代',
'疑著' => '疑着',
'疑著作' => '疑著作',
'疑著名' => '疑著名',
@@ -17844,14 +16386,22 @@ $zh2HK = array(
'疑著者' => '疑著者',
'疑著述' => '疑著述',
'疑著錄' => '疑著錄',
-'发布' => '發佈',
+'狂牛症' => '瘋牛症',
'發布' => '發佈',
-'百科裡' => '百科裏',
+'发布' => '發佈',
+'發著' => '發着',
+'發著《' => '發著《',
+'發著作' => '發著作',
+'發著名' => '發著名',
+'發著稱' => '發著稱',
+'發著者' => '發著者',
+'白里透红' => '白裏透紅',
+'戈登·布朗' => '白高敦',
'百科里' => '百科裏',
-'計程車' => '的士',
-'出租车' => '的士',
+'的图里' => '的圖裏',
+'的山里' => '的山裏',
+'皮里春秋' => '皮裏春秋',
'皮里阳秋' => '皮裏陽秋',
-'皮裡陽秋' => '皮裏陽秋',
'皺著' => '皺着',
'皺著作' => '皺著作',
'皺著名' => '皺著名',
@@ -17860,6 +16410,7 @@ $zh2HK = array(
'皺著者' => '皺著者',
'皺著述' => '皺著述',
'皺著錄' => '皺著錄',
+'盒里' => '盒裏',
'盛著' => '盛着',
'盛著作' => '盛著作',
'盛著名' => '盛著名',
@@ -17868,7 +16419,9 @@ $zh2HK = array(
'盛著者' => '盛著者',
'盛著述' => '盛著述',
'盛著錄' => '盛著錄',
+'盘里' => '盤裏',
'盧安達' => '盧旺達',
+'羅亞爾' => '盧瓦爾',
'盯著' => '盯着',
'盯著作' => '盯著作',
'盯著名' => '盯著名',
@@ -17887,6 +16440,7 @@ $zh2HK = array(
'盾著錄' => '盾著錄',
'看不著' => '看不着',
'看得著' => '看得着',
+'看法里' => '看法裏',
'看著' => '看着',
'看著作' => '看著作',
'看著名' => '看著名',
@@ -17895,9 +16449,10 @@ $zh2HK = array(
'看著者' => '看著者',
'看著述' => '看著述',
'看著錄' => '看著錄',
-'眼睛裡' => '眼睛裏',
+'眼眶里' => '眼眶裏',
'眼睛里' => '眼睛裏',
-'著什麼急' => '着什麼急',
+'眼里' => '眼裏',
+'著什' => '着什',
'著他' => '着他',
'著你' => '着你',
'著力' => '着力',
@@ -17917,6 +16472,7 @@ $zh2HK = array(
'著法' => '着法',
'著涼' => '着涼',
'著火' => '着火',
+'著甚麽' => '着甚麽',
'著眼' => '着眼',
'著祂' => '着祂',
'著筆' => '着筆',
@@ -17959,11 +16515,19 @@ $zh2HK = array(
'瞪著者' => '瞪著者',
'瞪著述' => '瞪著述',
'瞪著錄' => '瞪著錄',
-'簡訊' => '短訊',
+'智慧財產權' => '知識產權',
+'智財權' => '知識產權',
'短信' => '短訊',
-'硬件' => '硬件',
+'簡訊' => '短訊',
+'什勒斯維希' => '石勒蘇益格',
+'硅' => '矽',
+'硅藻' => '硅藻',
'硬體' => '硬件',
-'福斯' => '福士',
+'硬件' => '硬件',
+'贝克汉姆' => '碧咸',
+'贝克漢' => '碧咸',
+'社里' => '社裏',
+'福馬林' => '福爾馬林',
'福著' => '福着',
'福著作' => '福著作',
'福著名' => '福著名',
@@ -17972,14 +16536,20 @@ $zh2HK = array(
'福著者' => '福著者',
'福著述' => '福著述',
'福著錄' => '福著錄',
-'秋假裡' => '秋假裏',
-'秋假里' => '秋假裏',
-'秋天裡' => '秋天裏',
-'秋天里' => '秋天裏',
-'秋日里' => '秋日裏',
-'秋日裡' => '秋日裏',
+'秀发布' => '秀發佈',
+'私下里' => '私下裏',
+'隱私' => '私隱',
+'隐私' => '私隱',
'葛摩' => '科摩羅',
+'程序员' => '程式設計師',
'捷豹' => '積架',
+'穩占' => '穩佔',
+'稳占' => '穩佔',
+'穫著' => '穫着',
+'空中布雷' => '空中佈雷',
+'空投布雷' => '空投佈雷',
+'空氣品質' => '空氣質素',
+'空气质量' => '空氣質素',
'空著' => '空着',
'空著作' => '空著作',
'空著名' => '空著名',
@@ -17988,8 +16558,8 @@ $zh2HK = array(
'空著者' => '空著者',
'空著述' => '空著述',
'空著錄' => '空著錄',
-'太空梭' => '穿梭機',
'航天飞机' => '穿梭機',
+'太空梭' => '穿梭機',
'穿著' => '穿着',
'穿著作' => '穿著作',
'穿著名' => '穿著名',
@@ -17998,6 +16568,7 @@ $zh2HK = array(
'穿著者' => '穿著者',
'穿著述' => '穿著述',
'穿著錄' => '穿著錄',
+'窝里' => '窩裏',
'站著' => '站着',
'站著作' => '站著作',
'站著名' => '站著名',
@@ -18006,6 +16577,7 @@ $zh2HK = array(
'站著者' => '站著者',
'站著述' => '站著述',
'站著錄' => '站著錄',
+'竪著' => '竪着',
'笑著' => '笑着',
'笑著作' => '笑著作',
'笑著名' => '笑著名',
@@ -18014,6 +16586,8 @@ $zh2HK = array(
'笑著者' => '笑著者',
'笑著述' => '笑著述',
'笑著錄' => '笑著錄',
+'笑里藏刀' => '笑裏藏刀',
+'提比里西' => '第比利斯',
'管著' => '管着',
'管著作' => '管著作',
'管著名' => '管著名',
@@ -18022,10 +16596,24 @@ $zh2HK = array(
'管著者' => '管著者',
'管著述' => '管著述',
'管著錄' => '管著錄',
-'迈克尔·欧文' => '米高奧雲',
-'系列裡' => '系列裏',
+'箱里' => '箱裏',
+'节目里' => '節目裏',
+'簽著' => '簽着',
+'籃板球' => '籃板球',
+'麦克尔' => '米高',
+'迈克尔' => '米高',
+'迈克尔·欧文' => '米高·奧雲',
+'糊里糊涂' => '糊裏糊塗',
'系列里' => '系列裏',
+'係數' => '系數',
+'系里' => '系裏',
+'約占' => '約佔',
+'约占' => '約佔',
+'紐賓士域' => '紐賓士域',
+'索忍尼辛' => '索贊尼辛',
+'索尔仁尼琴' => '索贊尼辛',
'索馬利亞' => '索馬里',
+'索馬利里' => '索馬里',
'紮著' => '紮着',
'紮著作' => '紮著作',
'紮著名' => '紮著名',
@@ -18034,6 +16622,10 @@ $zh2HK = array(
'紮著者' => '紮著者',
'紮著述' => '紮著述',
'紮著錄' => '紮著錄',
+'组里' => '組裏',
+'吉他' => '結他',
+'结彩' => '結綵',
+'結彩' => '結綵',
'綁著' => '綁着',
'綁著作' => '綁著作',
'綁著名' => '綁著名',
@@ -18043,7 +16635,30 @@ $zh2HK = array(
'綁著述' => '綁著述',
'綁著錄' => '綁著錄',
'網路' => '網絡',
+'网里' => '網裏',
+'彩带' => '綵帶',
+'彩帶' => '綵帶',
+'彩排' => '綵排',
+'彩楼' => '綵樓',
+'彩樓' => '綵樓',
+'彩牌楼' => '綵牌樓',
+'彩牌樓' => '綵牌樓',
+'彩球' => '綵球',
+'彩綢' => '綵綢',
+'彩绸' => '綵綢',
+'彩线' => '綵綫',
+'彩線' => '綵線',
+'彩船' => '綵船',
+'彩衣' => '綵衣',
+'线图里' => '線圖裏',
'緝凶' => '緝兇',
+'县里' => '縣裏',
+'缝里' => '縫裏',
+'总数里' => '總數裏',
+'尖峰時段' => '繁忙時段',
+'尖峰時間' => '繁忙時間',
+'正體中文' => '繁體中文',
+'繃著' => '繃着',
'繞著' => '繞着',
'繞著作' => '繞著作',
'繞著名' => '繞著名',
@@ -18052,6 +16667,8 @@ $zh2HK = array(
'繞著者' => '繞著者',
'繞著述' => '繞著述',
'繞著錄' => '繞著錄',
+'繫著' => '繫着',
+'系着' => '繫着',
'纏著' => '纏着',
'纏著作' => '纏著作',
'纏著名' => '纏著名',
@@ -18076,6 +16693,8 @@ $zh2HK = array(
'罵著者' => '罵著者',
'罵著述' => '罵著述',
'罵著錄' => '罵著錄',
+'卢浮宫' => '羅浮宮',
+'美占' => '美佔',
'美著' => '美着',
'美著作' => '美著作',
'美著名' => '美著名',
@@ -18093,6 +16712,8 @@ $zh2HK = array(
'耀著述' => '耀著述',
'耀著錄' => '耀著錄',
'寮國' => '老撾',
+'寮人民民主共和國' => '老撾人民民主共和國',
+'寮語' => '老撾語',
'考著' => '考着',
'考著作' => '考著作',
'考著名' => '考著名',
@@ -18117,9 +16738,9 @@ $zh2HK = array(
'聽著述' => '聽著述',
'聽著錄' => '聽著錄',
'肚里' => '肚裏',
-'肚裡' => '肚裏',
'肯尼亚' => '肯雅',
-'肯亞' => '肯雅',
+'胃里' => '胃裏',
+'背地里' => '背地裏',
'背著' => '背着',
'背著作' => '背著作',
'背著名' => '背著名',
@@ -18128,6 +16749,8 @@ $zh2HK = array(
'背著者' => '背著者',
'背著述' => '背著述',
'背著錄' => '背著錄',
+'胡里胡涂' => '胡裏胡塗',
+'腰里' => '腰裏',
'膠著' => '膠着',
'膠著作' => '膠著作',
'膠著名' => '膠著名',
@@ -18144,6 +16767,7 @@ $zh2HK = array(
'臨著者' => '臨著者',
'臨著述' => '臨著述',
'臨著錄' => '臨著錄',
+'自行火炮' => '自走炮',
'與著' => '與着',
'與著作' => '與著作',
'與著名' => '與著名',
@@ -18152,7 +16776,14 @@ $zh2HK = array(
'與著者' => '與著者',
'與著述' => '與著述',
'與著錄' => '與著錄',
-'迈克尔·舒马赫' => '舒麥加',
+'舒马赫' => '舒麥加',
+'爱荷华' => '艾奧瓦',
+'愛荷華' => '艾奧瓦',
+'埃菲尔' => '艾菲爾',
+'帕塔亚' => '芭達亞',
+'花盆里' => '花盆裏',
+'苑里' => '苑裏',
+'苑裡' => '苑裡',
'苦著' => '苦着',
'苦著作' => '苦著作',
'苦著名' => '苦著名',
@@ -18162,13 +16793,27 @@ $zh2HK = array(
'苦著述' => '苦著述',
'苦著錄' => '苦著錄',
'苦里' => '苦裏',
-'苦裡' => '苦裏',
-'荃湾线' => '荃灣綫',
-'荃灣線' => '荃灣綫',
+'英占' => '英佔',
+'大英國協' => '英聯邦',
+'共和联邦' => '英聯邦',
+'草丛里' => '草叢裏',
+'霍爾斯坦' => '荷爾斯泰因',
+'好萊塢' => '荷里活',
+'好莱坞' => '荷里活',
+'庄里' => '莊裏',
'莫三比克' => '莫桑比克',
+'瓦倫西亞' => '華倫西亞',
+'巴伦西亚' => '華倫西亞',
+'巴倫西亞' => '華倫西亞',
+'瓦文萨' => '華里沙',
+'華勒沙' => '華里沙',
+'菲利普亲王' => '菲臘親王',
+'菲利普親王' => '菲臘親王',
'賴索托' => '萊索托',
-'馬自達' => '萬事得',
+'马恩岛' => '萌島',
'马自达' => '萬事得',
+'馬自達' => '萬事得',
+'万历朝鲜战争' => '萬曆朝鮮戰爭',
'落著' => '落着',
'落著作' => '落著作',
'落著名' => '落著名',
@@ -18177,6 +16822,11 @@ $zh2HK = array(
'落著者' => '落著者',
'落著述' => '落著述',
'落著錄' => '落著錄',
+'葉爾欽' => '葉利欽',
+'葡占' => '葡佔',
+'葫芦里卖甚么药' => '葫蘆裏賣甚麼藥',
+'蒙特婁' => '蒙特利爾',
+'滿地可' => '蒙特利爾',
'蒙著' => '蒙着',
'蒙著作' => '蒙著作',
'蒙著名' => '蒙著名',
@@ -18185,6 +16835,12 @@ $zh2HK = array(
'蒙著者' => '蒙著者',
'蒙著述' => '蒙著述',
'蒙著錄' => '蒙著錄',
+'蓋著' => '蓋着',
+'肖斯塔科维奇' => '蕭士達高維契',
+'蕭士塔高維奇' => '蕭士達高維契',
+'肖邦' => '蕭邦',
+'薛丁格' => '薛定諤',
+'塞拉耶佛' => '薩拉熱窩',
'萨达姆' => '薩達姆',
'藉著' => '藉着',
'藏著' => '藏着',
@@ -18211,6 +16867,10 @@ $zh2HK = array(
'蘸著者' => '蘸著者',
'蘸著述' => '蘸著述',
'蘸著錄' => '蘸著錄',
+'蜜里调油' => '蜜裏調油',
+'荧屏' => '螢屏',
+'屏幕' => '螢幕',
+'首席执行官' => '行政總裁',
'行著' => '行着',
'行著作' => '行著作',
'行著名' => '行著名',
@@ -18219,7 +16879,7 @@ $zh2HK = array(
'行著者' => '行著者',
'行著述' => '行著述',
'行著錄' => '行著錄',
-'衛' => '衞',
+'衝著' => '衝着',
'衣著' => '衣着',
'衣著作' => '衣著作',
'衣著名' => '衣著名',
@@ -18228,10 +16888,32 @@ $zh2HK = array(
'衣著者' => '衣著者',
'衣著述' => '衣著述',
'衣著錄' => '衣著錄',
-'裡勾外連' => '裏勾外連',
+'表里' => '表裏',
+'表里一致' => '表裏一致',
+'表里不一' => '表裏不一',
+'表里如一' => '表裏如一',
+'表里山河' => '表裏山河',
+'袋里' => '袋裏',
+'袖里' => '袖裏',
+'被里' => '被裏',
+'裡' => '裏',
'里勾外连' => '裏勾外連',
+'里屋' => '裏屋',
+'里层' => '裏層',
+'里带' => '裏帶',
+'里弦' => '裏弦',
+'里应外合' => '裏應外合',
+'里手' => '裏手',
+'里海' => '裏海',
+'里脊' => '裏脊',
+'里衣' => '裏衣',
+'里通外国' => '裏通外國',
+'里通外敌' => '裏通外敵',
+'里边' => '裏邊',
+'里间' => '裏間',
'里面' => '裏面',
-'裡面' => '裏面',
+'里面包' => '裏面包',
+'里头' => '裏頭',
'裝著' => '裝着',
'裝著作' => '裝著作',
'裝著名' => '裝著名',
@@ -18240,6 +16922,7 @@ $zh2HK = array(
'裝著者' => '裝著者',
'裝著述' => '裝著述',
'裝著錄' => '裝著錄',
+'裡冷' => '裡冷',
'裹著' => '裹着',
'裹著作' => '裹著作',
'裹著名' => '裹著名',
@@ -18248,8 +16931,13 @@ $zh2HK = array(
'裹著者' => '裹著者',
'裹著述' => '裹著述',
'裹著錄' => '裹著錄',
-'西铁线' => '西鐵綫',
-'西鐵線' => '西鐵綫',
+'衬里' => '襯裏',
+'西占' => '西佔',
+'塞维利亚' => '西維爾',
+'塞維亞' => '西維爾',
+'要占' => '要佔',
+'要占卜' => '要占卜',
+'覆著' => '覆着',
'見著' => '見着',
'見著作' => '見著作',
'見著名' => '見著名',
@@ -18258,8 +16946,10 @@ $zh2HK = array(
'見著者' => '見著者',
'見著述' => '見著述',
'見著錄' => '見著錄',
-'觀塘線' => '觀塘綫',
-'观塘线' => '觀塘綫',
+'角落里' => '角落裏',
+'分辨率' => '解像度',
+'解析度' => '解像度',
+'計畫' => '計劃',
'記著' => '記着',
'記著作' => '記著作',
'記著名' => '記著名',
@@ -18276,6 +16966,8 @@ $zh2HK = array(
'試著者' => '試著者',
'試著述' => '試著述',
'試著錄' => '試著錄',
+'话里有话' => '話裏有話',
+'语法里' => '語法裏',
'語著' => '語着',
'語著作' => '語著作',
'語著名' => '語著名',
@@ -18284,7 +16976,14 @@ $zh2HK = array(
'語著者' => '語著者',
'語著述' => '語著述',
'語著錄' => '語著錄',
+'语里' => '語裏',
+'說著' => '說着',
+'說著作' => '說著作',
+'說著稱' => '說著稱',
+'說著者' => '說著者',
+'說著述' => '說著述',
'數據機' => '調制解調器',
+'诺曼底' => '諾曼第',
'警戒著' => '警戒着',
'變著' => '變着',
'變著作' => '變著作',
@@ -18302,6 +17001,8 @@ $zh2HK = array(
'豎著者' => '豎著者',
'豎著述' => '豎著述',
'豎著錄' => '豎著錄',
+'象徵著名' => '象徵著名',
+'象徵著' => '象著着',
'豫著' => '豫着',
'豫著作' => '豫著作',
'豫著名' => '豫著名',
@@ -18310,7 +17011,8 @@ $zh2HK = array(
'豫著者' => '豫著者',
'豫著述' => '豫著述',
'豫著錄' => '豫著錄',
-'貝南' => '貝寧',
+'貝爾格勒' => '貝爾格萊德',
+'布莱尔' => '貝理雅',
'貞著' => '貞着',
'貞著作' => '貞著作',
'貞著名' => '貞著名',
@@ -18319,8 +17021,21 @@ $zh2HK = array(
'貞著者' => '貞著者',
'貞著述' => '貞著述',
'貞著錄' => '貞著錄',
+'負著' => '負着',
'買凶' => '買兇',
+'費占' => '費佔',
+'费占' => '費佔',
+'赌台' => '賭枱',
'尚比亞' => '贊比亞',
+'西臺人' => '赫梯人',
+'西臺國' => '赫梯國',
+'西臺帝' => '赫梯帝',
+'西臺文' => '赫梯文',
+'西臺族' => '赫梯族',
+'西臺王' => '赫梯王',
+'西臺語' => '赫梯語',
+'赫魯雪夫' => '赫魯曉夫',
+'走為上著' => '走為上着',
'走著' => '走着',
'走著作' => '走著作',
'走著名' => '走著名',
@@ -18369,6 +17084,7 @@ $zh2HK = array(
'跪著者' => '跪著者',
'跪著述' => '跪著述',
'跪著錄' => '跪著錄',
+'路图里' => '路圖裏',
'跳著' => '跳着',
'跳著作' => '跳著作',
'跳著名' => '跳著名',
@@ -18416,7 +17132,13 @@ $zh2HK = array(
'躺著者' => '躺著者',
'躺著述' => '躺著述',
'躺著錄' => '躺著錄',
+'车库里' => '車庫裏',
+'车站里' => '車站裏',
+'车里' => '車裏',
+'车里雅宾斯克' => '車里雅賓斯克',
'軟體' => '軟件',
+'軟體動物' => '軟體動物',
+'軟體家具' => '軟體家具',
'載著' => '載着',
'載著作' => '載著作',
'載著名' => '載著名',
@@ -18433,6 +17155,7 @@ $zh2HK = array(
'轉著者' => '轉著者',
'轉著述' => '轉著述',
'轉著錄' => '轉著錄',
+'办公台' => '辦公枱',
'辦著' => '辦着',
'辦著作' => '辦著作',
'辦著名' => '辦著名',
@@ -18441,10 +17164,6 @@ $zh2HK = array(
'辦著者' => '辦著者',
'辦著述' => '辦著述',
'辦著錄' => '辦著錄',
-'近角聪信' => '近角聰信',
-'近角聰信' => '近角聰信',
-'迪士尼线' => '迪士尼綫',
-'迪士尼線' => '迪士尼綫',
'迫著' => '迫着',
'追著' => '追着',
'追著作' => '追著作',
@@ -18462,9 +17181,21 @@ $zh2HK = array(
'逆著者' => '逆著者',
'逆著述' => '逆著述',
'逆著錄' => '逆著錄',
-'這里' => '這裏',
-'這裡' => '這裏',
+'径入' => '逕入',
+'径到' => '逕到',
+'径取' => '逕取',
+'径启' => '逕啟',
+'径寄' => '逕寄',
+'径庭' => '逕庭',
+'径往' => '逕往',
+'径自' => '逕自',
+'径行' => '逕行',
+'径迎' => '逕迎',
+'这里' => '這裏',
+'连占' => '連佔',
+'連占' => '連佔',
'連著' => '連着',
+'链接' => '連結',
'連著作' => '連著作',
'連著名' => '連著名',
'連著書' => '連著書',
@@ -18472,6 +17203,9 @@ $zh2HK = array(
'連著者' => '連著者',
'連著述' => '連著述',
'連著錄' => '連著錄',
+'进占' => '進佔',
+'進占' => '進佔',
+'演化論' => '進化論',
'逼著' => '逼着',
'逼著作' => '逼著作',
'逼著名' => '逼著名',
@@ -18488,6 +17222,10 @@ $zh2HK = array(
'遇著者' => '遇著者',
'遇著述' => '遇著述',
'遇著錄' => '遇著錄',
+'遍布' => '遍佈',
+'過著' => '過着',
+'达·芬奇' => '達·文西',
+'达芬奇' => '達文西',
'達著' => '達着',
'達著作' => '達著作',
'達著名' => '達著名',
@@ -18504,6 +17242,14 @@ $zh2HK = array(
'遠著者' => '遠著者',
'遠著述' => '遠著述',
'遠著錄' => '遠著錄',
+'還占' => '還佔',
+'还占' => '還佔',
+'邋里邋遢' => '邋裏邋遢',
+'那里' => '那裏',
+'奥斯曼' => '鄂圖曼',
+'配合著' => '配合着',
+'配合著名' => '配合著名',
+'配图里' => '配圖裏',
'配著' => '配着',
'配著作' => '配著作',
'配著名' => '配著名',
@@ -18521,13 +17267,12 @@ $zh2HK = array(
'醜著者' => '醜著者',
'醜著述' => '醜著述',
'醜著錄' => '醜著錄',
-'醫院裡' => '醫院裏',
'醯壺' => '醯壺',
'醯壶' => '醯壺',
'醯醋' => '醯醋',
'醯醢' => '醯醢',
-'醯醬' => '醯醬',
'醯酱' => '醯醬',
+'醯醬' => '醯醬',
'醯鸡' => '醯雞',
'醯雞' => '醯雞',
'釀著' => '釀着',
@@ -18538,8 +17283,8 @@ $zh2HK = array(
'釀著者' => '釀著者',
'釀著述' => '釀著述',
'釀著錄' => '釀著錄',
+'金装玉里' => '金裝玉裏',
'鉤' => '鈎',
-'鉤心鬥角' => '鈎心鬥角',
'鋪著' => '鋪着',
'鋪著作' => '鋪著作',
'鋪著名' => '鋪著名',
@@ -18548,6 +17293,11 @@ $zh2HK = array(
'鋪著者' => '鋪著者',
'鋪著述' => '鋪著述',
'鋪著錄' => '鋪著錄',
+'镜图里' => '鏡圖裏',
+'钟在寺里' => '鐘在寺裏',
+'狄托' => '鐵托',
+'泰坦尼克号' => '鐵達尼號',
+'门里' => '門裏',
'閉著' => '閉着',
'閉著作' => '閉著作',
'閉著名' => '閉著名',
@@ -18556,6 +17306,7 @@ $zh2HK = array(
'閉著者' => '閉著者',
'閉著述' => '閉著述',
'閉著錄' => '閉著錄',
+'蓋曼群島' => '開曼群島',
'開著' => '開着',
'開著作' => '開著作',
'開著名' => '開著名',
@@ -18564,6 +17315,8 @@ $zh2HK = array(
'開著者' => '開著者',
'開著述' => '開著述',
'開著錄' => '開著錄',
+'开诚布公' => '開誠佈公',
+'開誠布公' => '開誠佈公',
'閑著' => '閑着',
'閑著作' => '閑著作',
'閑著名' => '閑著名',
@@ -18572,6 +17325,9 @@ $zh2HK = array(
'閑著者' => '閑著者',
'閑著述' => '閑著述',
'閑著錄' => '閑著錄',
+'閒著' => '閒着',
+'间里' => '間裏',
+'關係著' => '關係着',
'關著' => '關着',
'關著作' => '關著作',
'關著名' => '關著名',
@@ -18584,7 +17340,11 @@ $zh2HK = array(
'聞得著' => '闻得着',
'聞著' => '闻着',
'亞塞拜然' => '阿塞拜疆',
+'阿布達比' => '阿布扎比',
'阿拉伯聯合大公國' => '阿拉伯聯合酋長國',
+'亞斯文' => '阿斯旺',
+'阿联酋' => '阿聯酋',
+'艾里爾·夏隆' => '阿里埃勒·沙龍',
'附著' => '附着',
'附著作' => '附著作',
'附著名' => '附著名',
@@ -18601,6 +17361,7 @@ $zh2HK = array(
'陋著者' => '陋著者',
'陋著述' => '陋著述',
'陋著錄' => '陋著錄',
+'院里' => '院裏',
'陪著' => '陪着',
'陪著作' => '陪著作',
'陪著名' => '陪著名',
@@ -18609,6 +17370,7 @@ $zh2HK = array(
'陪著者' => '陪著者',
'陪著述' => '陪著述',
'陪著錄' => '陪著錄',
+'阴沟里翻船' => '陰溝裏翻船',
'隔著' => '隔着',
'隔著作' => '隔著作',
'隔著名' => '隔著名',
@@ -18625,7 +17387,11 @@ $zh2HK = array(
'隨著者' => '隨著者',
'隨著述' => '隨著述',
'隨著錄' => '隨著錄',
+'隱占' => '隱佔',
+'隐占' => '隱佔',
+'雅爾達' => '雅爾塔',
'雅著' => '雅着',
+'雅穆索戈' => '雅穆蘇克雷',
'雅著作' => '雅著作',
'雅著名' => '雅著名',
'雅著書' => '雅著書',
@@ -18633,6 +17399,8 @@ $zh2HK = array(
'雅著者' => '雅著者',
'雅著述' => '雅著述',
'雅著錄' => '雅著錄',
+'集数里' => '集數裏',
+'集里' => '集裏',
'雜著' => '雜着',
'雜著作' => '雜著作',
'雜著名' => '雜著名',
@@ -18641,11 +17409,21 @@ $zh2HK = array(
'雜著者' => '雜著者',
'雜著述' => '雜著述',
'雜著錄' => '雜著錄',
+'鸡蛋里挑骨头' => '雞蛋裏挑骨頭',
'冰淇淋' => '雪糕',
-'雪里红' => '雪裏紅',
-'雪裡紅' => '雪裏紅',
-'雪裡蕻' => '雪裏蕻',
-'雪里蕻' => '雪裏蕻',
+'冰激凌' => '雪糕',
+'雪里' => '雪裏',
+'萊特灣' => '雷伊泰灣',
+'莱特湾' => '雷伊泰灣',
+'晶體管' => '電晶體',
+'晶体管' => '電晶體',
+'电脑程序' => '電腦程式',
+'计算机程序' => '電腦程式',
+'霄裡' => '霄裡',
+'荷姆茲' => '霍爾木茲',
+'雾里' => '霧裏',
+'霸占' => '霸佔',
+'非占不可' => '非佔不可',
'靠著' => '靠着',
'靠著作' => '靠著作',
'靠著名' => '靠著名',
@@ -18655,6 +17433,9 @@ $zh2HK = array(
'靠著述' => '靠著述',
'靠著錄' => '靠著錄',
'靠著录' => '靠著錄',
+'鞋里' => '鞋裏',
+'鞭辟入里' => '鞭辟入裏',
+'朝鲜战争' => '韓戰',
'響著' => '響着',
'響著作' => '響著作',
'響著名' => '響著名',
@@ -18679,10 +17460,8 @@ $zh2HK = array(
'順著者' => '順著者',
'順著述' => '順著述',
'順著錄' => '順著錄',
-'頒布' => '頒佈',
'颁布' => '頒佈',
-'領域裡' => '領域裏',
-'领域里' => '領域裏',
+'頒布' => '頒佈',
'領著' => '領着',
'領著作' => '領著作',
'領著名' => '領著名',
@@ -18691,6 +17470,10 @@ $zh2HK = array(
'領著者' => '領著者',
'領著述' => '領著述',
'領著錄' => '領著錄',
+'头里' => '頭裏',
+'风里' => '風裏',
+'颳著' => '颳着',
+'飃著' => '飃着',
'飄著' => '飄着',
'飄著作' => '飄著作',
'飄著名' => '飄著名',
@@ -18699,13 +17482,15 @@ $zh2HK = array(
'飄著者' => '飄著者',
'飄著述' => '飄著述',
'飄著錄' => '飄著錄',
-'館裡' => '館裏',
+'餐台' => '餐枱',
'馆里' => '館裏',
+'糊口' => '餬口',
+'马里兰' => '馬利蘭',
+'馬里蘭' => '馬利蘭',
+'马拉特·萨芬' => '馬拉特·沙芬',
+'馬斯垂克' => '馬斯特里赫特',
'馬爾地夫' => '馬爾代夫',
'馬利共和國' => '馬里共和國',
-'土豆' => '馬鈴薯',
-'馬鞍山線' => '馬鞍山綫',
-'马鞍山线' => '馬鞍山綫',
'駕著' => '駕着',
'駕著作' => '駕著作',
'駕著名' => '駕著名',
@@ -18730,6 +17515,8 @@ $zh2HK = array(
'騙著者' => '騙著者',
'騙著述' => '騙著述',
'騙著錄' => '騙著錄',
+'驶著' => '驶着',
+'高畫質' => '高清',
'高著' => '高着',
'高著作' => '高著作',
'高著名' => '高著名',
@@ -18746,6 +17533,7 @@ $zh2HK = array(
'髭著者' => '髭著者',
'髭著述' => '髭著述',
'髭著錄' => '髭著錄',
+'斗着' => '鬥着',
'鬥著' => '鬥着',
'鬥著作' => '鬥著作',
'鬥著名' => '鬥著名',
@@ -18754,6 +17542,11 @@ $zh2HK = array(
'鬥著者' => '鬥著者',
'鬥著述' => '鬥著述',
'鬥著錄' => '鬥著錄',
+'鬧著' => '鬧着',
+'牛軋' => '鳥結',
+'牛轧' => '鳥結',
+'鸠占' => '鳩佔',
+'鳩占' => '鳩佔',
'麗著' => '麗着',
'麗著作' => '麗著作',
'麗著名' => '麗著名',
@@ -18762,6 +17555,32 @@ $zh2HK = array(
'麗著者' => '麗著者',
'麗著述' => '麗著述',
'麗著錄' => '麗著錄',
+'麼著' => '麼着',
+'芮氏0' => '黎克特制0',
+'里氏0' => '黎克特制0',
+'芮氏1' => '黎克特制1',
+'里氏1' => '黎克特制1',
+'芮氏2' => '黎克特制2',
+'里氏2' => '黎克特制2',
+'芮氏3' => '黎克特制3',
+'里氏3' => '黎克特制3',
+'芮氏4' => '黎克特制4',
+'里氏4' => '黎克特制4',
+'里氏5' => '黎克特制5',
+'芮氏5' => '黎克特制5',
+'里氏6' => '黎克特制6',
+'芮氏6' => '黎克特制6',
+'里氏7' => '黎克特制7',
+'芮氏7' => '黎克特制7',
+'里氏8' => '黎克特制8',
+'芮氏8' => '黎克特制8',
+'芮氏9' => '黎克特制9',
+'里氏9' => '黎克特制9',
+'芮氏地震規模' => '黎克特制地震震級',
+'里氏地震规模' => '黎克特制地震震級',
+'里氏震级' => '黎克特制震級',
+'芮氏規模' => '黎克特制震級',
+'里氏规模' => '黎克特制震級',
'黏著' => '黏着',
'黏著作' => '黏著作',
'黏著名' => '黏著名',
@@ -18770,6 +17589,7 @@ $zh2HK = array(
'黏著者' => '黏著者',
'黏著述' => '黏著述',
'黏著錄' => '黏著錄',
+'蒙特內哥羅' => '黑山',
'點著' => '點着',
'點著作' => '點著作',
'點著名' => '點著名',
@@ -18778,204 +17598,1547 @@ $zh2HK = array(
'點著者' => '點著者',
'點著述' => '點著述',
'點著錄' => '點著錄',
-'點裡' => '點裏',
'点里' => '點裏',
+'点里程' => '點里程',
+'鼓里' => '鼓裏',
);
$zh2CN = array(
-'16進位' => '16进位',
'16進位制' => '16进位制',
-'『' => '‘',
-'』' => '’',
-'「' => '“',
-'」' => '”',
-'萬曆' => '万历',
+'16進位' => '16进制',
+'IP位址' => 'IP地址',
+'一份子' => '一分子',
+'全球資訊網' => '万维网',
+'三十六著' => '三十六着',
'三極體' => '三极管',
-'三極管' => '三极管',
-'串列加速器' => '串列加速器',
-'串列' => '串行',
+'下著' => '下着',
+'下著作' => '下著作',
+'下著名' => '下著名',
+'下著錄' => '下著录',
+'下著录' => '下著录',
+'下著有' => '下著有',
+'下著稱' => '下著称',
+'下著称' => '下著称',
+'下著者' => '下著者',
+'下著述' => '下著述',
+'不著' => '不着',
+'不著書' => '不著书',
+'不著名' => '不著名',
+'不著錄' => '不著录',
+'不著稱' => '不著称',
+'不著述' => '不著述',
+'與著' => '与着',
+'與著書' => '与著书',
+'與著作' => '与著作',
+'與著名' => '与著名',
+'與著錄' => '与著录',
+'與著稱' => '与著称',
+'與著者' => '与著者',
+'與著述' => '与著述',
+'醜著' => '丑着',
+'醜著書' => '丑著书',
+'醜著作' => '丑著作',
+'醜著名' => '丑著名',
+'醜著錄' => '丑著录',
+'醜著稱' => '丑著称',
+'醜著者' => '丑著者',
+'醜著述' => '丑著述',
+'邱吉爾' => '丘吉尔',
+'C型肝炎' => '丙型肝炎',
+'C肝' => '丙肝',
+'東協' => '东盟',
+'亚细安' => '东盟',
+'臨著' => '临着',
+'臨著書' => '临著书',
+'臨著作' => '临著作',
+'臨著名' => '临著名',
+'臨著錄' => '临著录',
+'臨著稱' => '临著称',
+'臨著者' => '临著者',
+'臨著述' => '临著述',
+'為著' => '为着',
+'為著《' => '为著《',
+'為著作' => '为著作',
+'為著名' => '为著名',
+'為著錄' => '为著录',
+'為著稱' => '为著称',
+'為著者' => '为著者',
+'為著述' => '为著述',
+'主機板' => '主板',
+'麗著' => '丽着',
+'麗著書' => '丽著书',
+'麗著作' => '丽著作',
+'麗著名' => '丽著名',
+'麗著錄' => '丽著录',
+'麗著稱' => '丽著称',
+'麗著者' => '丽著者',
+'麗著述' => '丽著述',
+'麼著' => '么着',
'烏茲別克' => '乌兹别克斯坦',
+'樂著' => '乐着',
+'樂著書' => '乐著书',
+'樂著作' => '乐著作',
+'樂著名' => '乐著名',
+'樂著錄' => '乐著录',
+'樂著稱' => '乐著称',
+'樂著者' => '乐著者',
+'樂著述' => '乐著述',
+'喬治·歐威爾' => '乔治·奥威尔',
+'乘著' => '乘着',
+'乘著書' => '乘著书',
+'乘著作' => '乘著作',
+'乘著名' => '乘著名',
+'乘著錄' => '乘著录',
+'乘著稱' => '乘著称',
+'乘著者' => '乘著者',
+'乘著述' => '乘著述',
+'B型肝炎' => '乙型肝炎',
+'B肝' => '乙肝',
+'吉力馬札羅' => '乞力马扎罗',
'葉門' => '也门',
-'芝士' => '乾酪',
-'二極管' => '二极管',
+'買帳' => '买账',
+'了結他' => '了结他',
+'爭著' => '争着',
+'爭著書' => '争著书',
+'爭著作' => '争著作',
+'爭著名' => '争著名',
+'爭著錄' => '争著录',
+'爭著稱' => '争著称',
+'爭著者' => '争著者',
+'爭著述' => '争著述',
'二極體' => '二极管',
'二進位制' => '二进位制',
'二進位' => '二进制',
'網際網路' => '互联网',
-'互聯網' => '互联网',
+'網際網絡' => '互联网',
+'亞歷山卓' => '亚历山大',
+'雅穆索戈' => '亚穆苏克罗',
'互動式' => '交互式',
+'交帳' => '交账',
+'亮著' => '亮着',
+'亮著書' => '亮著书',
+'亮著作' => '亮著作',
+'亮著名' => '亮著名',
+'亮著錄' => '亮著录',
+'亮著稱' => '亮著称',
+'亮著者' => '亮著者',
+'亮著述' => '亮著述',
'人工智慧' => '人工智能',
-'甚麽' => '什么',
'甚麼' => '什么',
+'甚麽' => '什么',
+'仗著' => '仗着',
+'仗著書' => '仗著书',
+'仗著作' => '仗著作',
+'仗著名' => '仗著名',
+'仗著錄' => '仗著录',
+'仗著稱' => '仗著称',
+'仗著者' => '仗著者',
+'仗著述' => '仗著述',
+'付帳' => '付账',
+'代表著' => '代表着',
+'代表著書' => '代表著书',
+'代表著作' => '代表著作',
+'代表著名' => '代表著名',
+'代表著錄' => '代表著录',
+'代表著稱' => '代表著称',
+'代表著者' => '代表著者',
+'代表著述' => '代表著述',
'乙太網' => '以太网',
+'伊莉莎白' => '伊丽莎白',
+'伊利諾' => '伊利诺伊',
+'伊利諾伊' => '伊利诺伊',
+'伊斯蘭瑪巴德' => '伊斯兰堡',
+'伊斯坦堡' => '伊斯坦布尔',
'優先順序' => '优先级',
-'感測' => '传感',
-'伯利茲' => '伯利兹',
+'傳著' => '传着',
+'傳著書' => '传著书',
+'傳著作' => '传著作',
+'傳著名' => '传著名',
+'傳著錄' => '传著录',
+'傳著稱' => '传著称',
+'傳著者' => '传著者',
+'傳著述' => '传著述',
'貝里斯' => '伯利兹',
+'伯明罕' => '伯明翰',
+'伴著' => '伴着',
+'伴著書' => '伴著书',
+'伴著作' => '伴著作',
+'伴著名' => '伴著名',
+'伴著錄' => '伴著录',
+'伴著稱' => '伴著称',
+'伴著者' => '伴著者',
+'伴著述' => '伴著述',
'點陣圖' => '位图',
+'IP' => '位址',
+'低著' => '低着',
+'低著書' => '低著书',
+'低著作' => '低著作',
+'低著名' => '低著名',
+'低著錄' => '低著录',
+'低著稱' => '低著称',
+'低著者' => '低著者',
+'低著述' => '低著述',
+'住著' => '住着',
+'住著書' => '住著书',
+'住著作' => '住著作',
+'住著名' => '住著名',
+'住著錄' => '住著录',
+'住著稱' => '住著称',
+'住著者' => '住著者',
+'住著述' => '住著述',
+'餘' => '余',
'維德角' => '佛得角',
-'常式' => '例程',
'侏儸紀' => '侏罗纪',
-'海珊' => '侯赛因',
+'側著' => '侧着',
+'側著書' => '侧著书',
+'側著作' => '侧著作',
+'側著名' => '侧著名',
+'側著錄' => '侧著录',
+'側著稱' => '侧著称',
+'側著者' => '侧著者',
+'側著述' => '侧著述',
+'可攜式' => '便携式',
'攜帶型' => '便携式',
+'保護著' => '保护着',
+'保障著' => '保障着',
+'保障著書' => '保障著书',
+'保障著作' => '保障著作',
+'保障著名' => '保障著名',
+'保障著錄' => '保障著录',
+'保障著稱' => '保障著称',
+'保障著者' => '保障著者',
+'保障著述' => '保障著述',
'資訊理論' => '信息论',
+'信著' => '信着',
+'信著書' => '信著书',
+'信著作' => '信著作',
+'信著名' => '信著名',
+'信著錄' => '信著录',
+'信著稱' => '信著称',
+'信著者' => '信著者',
+'信著述' => '信著述',
+'掌上壓' => '俯卧撑',
+'伏地挺身' => '俯卧撑',
+'倒帳' => '倒账',
+'候著' => '候着',
+'候著書' => '候著书',
+'候著作' => '候著作',
+'候著名' => '候著名',
+'候著錄' => '候著录',
+'候著稱' => '候著称',
+'候著者' => '候著者',
+'候著述' => '候著述',
+'藉著' => '借着',
+'借著' => '借着',
+'借著書' => '借著书',
+'借著作' => '借著作',
+'借著名' => '借著名',
+'借著錄' => '借著录',
+'借著稱' => '借著称',
+'借著者' => '借著者',
+'借著述' => '借著述',
+'假帳' => '假账',
+'做著' => '做着',
+'做著書' => '做著书',
+'做著作' => '做著作',
+'做著名' => '做著名',
+'做著錄' => '做著录',
+'做著稱' => '做著称',
+'做著者' => '做著者',
+'做著述' => '做著述',
+'偷著' => '偷着',
+'偷著書' => '偷著书',
+'偷著作' => '偷著作',
+'偷著名' => '偷著名',
+'偷著錄' => '偷著录',
+'偷著稱' => '偷著称',
+'偷著者' => '偷著者',
+'偷著述' => '偷著述',
+'傅利葉' => '傅里叶',
'母音' => '元音',
-'光碟' => '光盘',
+'光著' => '光着',
+'光著書' => '光著书',
+'光著作' => '光著作',
+'光著名' => '光著名',
+'光著錄' => '光著录',
+'光著稱' => '光著称',
+'光著者' => '光著者',
+'光著述' => '光著述',
'光碟機' => '光驱',
'柯林頓' => '克林顿',
'克羅埃西亞' => '克罗地亚',
-'進球' => '入球',
-'全形' => '全角',
+'轉殖' => '克隆',
+'複製人' => '克隆人',
+'入帳' => '入账',
'八進位制' => '八进位制',
'八進位' => '八进制',
+'西元1' => '公元1',
+'西元2' => '公元2',
+'西元3' => '公元3',
+'西元4' => '公元4',
+'西元5' => '公元5',
+'西元6' => '公元6',
+'西元7' => '公元7',
+'西元8' => '公元8',
+'西元9' => '公元9',
+'西元前' => '公元前',
+'公帳' => '公账',
'六進位制' => '六进位制',
'六進位' => '六进制',
+'關著' => '关着',
+'關係著' => '关系着',
+'關著書' => '关著书',
+'關著作' => '关著作',
+'關著名' => '关著名',
+'關著錄' => '关著录',
+'關著稱' => '关著称',
+'關著者' => '关著者',
+'關著述' => '关著述',
+'關帳' => '关账',
+'氧份' => '养分',
+'冀著' => '冀着',
+'冀著書' => '冀著书',
+'冀著作' => '冀著作',
+'冀著名' => '冀著名',
+'冀著錄' => '冀著录',
+'冀著稱' => '冀著称',
+'冀著者' => '冀著者',
+'冀著述' => '冀著述',
'記憶體' => '内存',
'甘比亞' => '冈比亚',
-'防寫' => '写保护',
-'軍中樂園' => '军中乐园',
-'冷菜' => '凉菜',
-'冷盤' => '凉菜',
+'冒著' => '冒着',
+'冒著書' => '冒著书',
+'冒著作' => '冒著作',
+'冒著名' => '冒著名',
+'冒著錄' => '冒著录',
+'冒著稱' => '冒著称',
+'冒著者' => '冒著者',
+'冒著述' => '冒著述',
+'寫著' => '写着',
+'寫著書' => '写著书',
+'寫著作' => '写著作',
+'寫著名' => '写著名',
+'寫著錄' => '写著录',
+'寫著稱' => '写著称',
+'寫著者' => '写著者',
+'寫著述' => '写著述',
+'沖著' => '冲着',
+'衝著' => '冲着',
+'沖著。' => '冲著。',
+'沖著《' => '冲著《',
+'沖著,' => '冲著,',
+'沖帳' => '冲账',
+'涼著' => '凉着',
+'涼著書' => '凉著书',
+'涼著作' => '凉著作',
+'涼著名' => '凉著名',
+'涼著錄' => '凉著录',
+'涼著稱' => '凉著称',
+'涼著者' => '凉著者',
+'涼著述' => '凉著述',
+'湊合著' => '凑合着',
+'畿內亞' => '几内亚',
'幾內亞比索' => '几内亚比绍',
-'梵谷' => '凡高',
-'計程車' => '出租车',
+'凱薩琳' => '凯瑟琳',
+'嘉芙蓮' => '凯瑟琳',
+'份內' => '分内',
+'份外' => '分外',
'解析度' => '分辨率',
+'解像度' => '分辨率',
+'份量' => '分量',
+'車諾比' => '切尔诺贝利',
+'劃著' => '划着',
+'李奧納多' => '列奥那多',
'列支敦斯登' => '列支敦士登',
'賴比瑞亞' => '利比里亚',
+'別著' => '别着',
+'刮著' => '刮着',
+'颳著' => '刮着',
+'到帳' => '到账',
+'制著' => '制着',
+'制著書' => '制著书',
+'制著作' => '制著作',
+'制著名' => '制著名',
+'制著錄' => '制著录',
+'制著稱' => '制著称',
+'制著者' => '制著者',
+'制著述' => '制著述',
+'煞車' => '刹车',
+'刻著' => '刻着',
+'刻著書' => '刻著书',
+'刻著作' => '刻著作',
+'刻著名' => '刻著名',
+'刻著錄' => '刻著录',
+'刻著稱' => '刻著称',
+'刻著者' => '刻著者',
+'刻著述' => '刻著述',
+'前波莫瑞' => '前波美拉尼亚',
+'辦著' => '办着',
+'辦著書' => '办著书',
+'辦著作' => '办著作',
+'辦著名' => '办著名',
+'辦著錄' => '办著录',
+'辦著稱' => '办著称',
+'辦著者' => '办著者',
+'辦著述' => '办著述',
+'加薩走廊' => '加沙地带',
'迦納' => '加纳',
'加彭' => '加蓬',
-'載入' => '加载',
+'動著' => '动着',
+'動著書' => '动著书',
+'動著作' => '动著作',
+'動著名' => '动著名',
+'動著錄' => '动著录',
+'動著稱' => '动著称',
+'動著者' => '动著者',
+'動著述' => '动著述',
+'努力著' => '努力着',
+'努力著書' => '努力著书',
+'努力著作' => '努力著作',
+'努力著名' => '努力著名',
+'努力著錄' => '努力著录',
+'努力著稱' => '努力著称',
+'努力著者' => '努力著者',
+'努力著述' => '努力著述',
+'努著' => '努着',
+'努著書' => '努著书',
+'努著作' => '努著作',
+'努著名' => '努著名',
+'努著錄' => '努著录',
+'努著稱' => '努著称',
+'努著者' => '努著者',
+'努著述' => '努著述',
+'蘿拉' => '劳拉',
+'布蘭登堡' => '勃兰登堡',
+'白朗寧' => '勃朗宁',
+'包著' => '包着',
+'北韓' => '北朝鲜',
'十進位制' => '十进位制',
'十進位' => '十进制',
-'半形' => '半角',
-'华乐街' => '华乐街',
+'公升' => '升',
+'單鏡反光機' => '单反相机',
+'單眼相機' => '单反相机',
'波札那' => '博茨瓦纳',
+'占著' => '占着',
+'占著作' => '占著作',
+'占著名' => '占著名',
+'占著者' => '占著者',
+'喀拉蚩' => '卡拉奇',
+'卡斯楚' => '卡斯特罗',
+'卡佩雅蒂' => '卡普里亚蒂',
'盧安達' => '卢旺达',
-'衞生' => '卫生',
-'衛生' => '卫生',
+'羅浮宮' => '卢浮宫',
+'羅亞爾' => '卢瓦尔',
+'印著' => '印着',
+'印著書' => '印著书',
+'印著作' => '印著作',
+'印著名' => '印著名',
+'印著錄' => '印著录',
+'印著稱' => '印著称',
+'印著者' => '印著者',
+'印著述' => '印著述',
'瓜地馬拉' => '危地马拉',
-'厄瓜多' => '厄瓜多尔',
-'厄瓜多爾' => '厄瓜多尔',
'厄瓜多尔' => '厄瓜多尔',
+'厄瓜多爾' => '厄瓜多尔',
+'厄瓜多' => '厄瓜多尔',
+'厄立特里亞' => '厄立特里亚',
+'厄利垂亚' => '厄立特里亚',
'厄利垂亞' => '厄立特里亚',
-'變數' => '变量',
+'壓著' => '压着',
+'壓著書' => '压著书',
+'壓著作' => '压著作',
+'壓著名' => '压著名',
+'壓著錄' => '压著录',
+'壓著稱' => '压著称',
+'壓著者' => '压著者',
+'壓著述' => '压著述',
+'去著' => '去着',
+'去著書' => '去著书',
+'去著作' => '去著作',
+'去著名' => '去著名',
+'去著錄' => '去著录',
+'去著稱' => '去著称',
+'去著者' => '去著者',
+'去著述' => '去著述',
+'發著' => '发着',
+'發著《' => '发著《',
+'發著作' => '发著作',
+'發著名' => '发著名',
+'發著稱' => '发著称',
+'發著者' => '发著者',
+'已開發國家' => '发达国家',
+'受著' => '受着',
+'受著書' => '受著书',
+'受著作' => '受著作',
+'受著名' => '受著名',
+'受著錄' => '受著录',
+'受著稱' => '受著称',
+'受著者' => '受著者',
+'受著述' => '受著述',
+'變著' => '变着',
+'變著書' => '变著书',
+'變著作' => '变著作',
+'變著名' => '变著名',
+'變著錄' => '变著录',
+'變著稱' => '变著称',
+'變著者' => '变著者',
+'變著述' => '变著述',
+'唯讀' => '只读',
+'叫著' => '叫着',
+'叫著書' => '叫著书',
+'叫著作' => '叫著作',
+'叫著名' => '叫著名',
+'叫著錄' => '叫著录',
+'叫著稱' => '叫著称',
+'叫著者' => '叫著者',
+'叫著述' => '叫著述',
'撞球' => '台球',
-'桌球' => '台球',
+'台帳' => '台账',
+'叱吒' => '叱咤',
+'吃著' => '吃着',
+'結他' => '吉他',
+'健力士世界紀錄' => '吉尼斯世界纪录',
+'金氏世界紀錄' => '吉尼斯世界纪录',
'吉布地' => '吉布提',
+'吊著' => '吊着',
+'名份' => '名分',
+'向著' => '向着',
+'向著書' => '向著书',
+'向著作' => '向著作',
+'向著名' => '向著名',
+'向著錄' => '向著录',
+'向著稱' => '向著称',
+'向著者' => '向著者',
+'向著述' => '向著述',
+'含著' => '含着',
+'含著書' => '含著书',
+'含著作' => '含著作',
+'含著名' => '含著名',
+'含著錄' => '含著录',
+'含著稱' => '含著称',
+'含著者' => '含著者',
+'含著述' => '含著述',
+'聽著' => '听着',
+'聽著書' => '听著书',
+'聽著作' => '听著作',
+'聽著名' => '听著名',
+'聽著錄' => '听著录',
+'聽著稱' => '听著称',
+'聽著者' => '听著者',
+'聽著述' => '听著述',
+'吹著' => '吹着',
+'吹著書' => '吹著书',
+'吹著作' => '吹著作',
+'吹著名' => '吹著名',
+'吹著錄' => '吹著录',
+'吹著稱' => '吹著称',
+'吹著者' => '吹著者',
+'吹著述' => '吹著述',
+'呆著' => '呆着',
+'呆帳' => '呆账',
+'味著' => '味着',
+'味著書' => '味著书',
+'味著作' => '味著作',
+'味著名' => '味著名',
+'味著錄' => '味著录',
+'味著稱' => '味著称',
+'味著者' => '味著者',
+'味著述' => '味著述',
+'咖哩' => '咖喱',
+'諮' => '咨',
'哈薩克' => '哈萨克斯坦',
+'響著' => '响着',
+'響著書' => '响著书',
+'響著作' => '响著作',
+'響著名' => '响著名',
+'響著錄' => '响著录',
+'響著稱' => '响著称',
+'響著者' => '响著者',
+'響著述' => '响著述',
'哥斯大黎加' => '哥斯达黎加',
+'哥德式' => '哥特式',
+'哭著' => '哭着',
+'哭著書' => '哭著书',
+'哭著作' => '哭著作',
+'哭著名' => '哭著名',
+'哭著錄' => '哭著录',
+'哭著稱' => '哭著称',
+'哭著者' => '哭著者',
+'哭著述' => '哭著述',
+'唱著' => '唱着',
+'唱著書' => '唱著书',
+'唱著作' => '唱著作',
+'唱著名' => '唱著名',
+'唱著錄' => '唱著录',
+'唱著稱' => '唱著称',
+'唱著者' => '唱著者',
+'唱著述' => '唱著述',
+'啸吒' => '啸咤',
+'喝著' => '喝着',
+'喝著書' => '喝著书',
+'喝著作' => '喝著作',
+'喝著名' => '喝著名',
+'喝著錄' => '喝著录',
+'喝著稱' => '喝著称',
+'喝著者' => '喝著者',
+'喝著述' => '喝著述',
+'嗅著' => '嗅着',
'雜訊' => '噪声',
-'因數' => '因子',
+'嚷著' => '嚷着',
+'嚷著書' => '嚷著书',
+'嚷著作' => '嚷著作',
+'嚷著名' => '嚷著名',
+'嚷著錄' => '嚷著录',
+'嚷著稱' => '嚷著称',
+'嚷著者' => '嚷著者',
+'嚷著述' => '嚷著述',
+'回著' => '回着',
+'回著名' => '回著名',
+'因著' => '因着',
+'因著〈' => '因著〈',
+'因著《' => '因著《',
+'因著書' => '因著书',
+'因著作' => '因著作',
+'因著名' => '因著名',
+'因著录' => '因著录',
+'因著錄' => '因著录',
+'因著稱' => '因著称',
+'因著者' => '因著者',
+'因著述' => '因著述',
+'西洋棋' => '囯际象棋',
+'困著' => '困着',
+'困著書' => '困著书',
+'困著作' => '困著作',
+'困著名' => '困著名',
+'困著錄' => '困著录',
+'困著稱' => '困著称',
+'困著者' => '困著者',
+'困著述' => '困著述',
+'圍著' => '围着',
+'圍著書' => '围著书',
+'圍著作' => '围著作',
+'圍著名' => '围著名',
+'圍著錄' => '围著录',
+'圍著稱' => '围著称',
+'圍著者' => '围著者',
+'圍著述' => '围著述',
+'韌體' => '固件',
+'土魯斯' => '图卢兹',
'吐瓦魯' => '图瓦卢',
+'原子筆' => '圆珠笔',
'土庫曼' => '土库曼斯坦',
'聖露西亞' => '圣卢西亚',
'聖吉斯納域斯' => '圣基茨和尼维斯',
'聖克里斯多福及尼維斯' => '圣基茨和尼维斯',
'聖文森及格瑞那丁' => '圣文森特和格林纳丁斯',
'聖馬利諾' => '圣马力诺',
+'在著' => '在着',
+'在著書' => '在著书',
+'在著作' => '在著作',
+'在著名' => '在著名',
+'在著錄' => '在著录',
+'在著稱' => '在著称',
+'在著者' => '在著者',
+'在著述' => '在著述',
'蓋亞那' => '圭亚那',
+'坐著' => '坐着',
+'坐著書' => '坐著书',
+'坐著作' => '坐著作',
+'坐著名' => '坐著名',
+'坐著錄' => '坐著录',
+'坐著稱' => '坐著称',
+'坐著者' => '坐著者',
+'坐著述' => '坐著述',
'坦尚尼亞' => '坦桑尼亚',
-'衣索比亞' => '埃塞俄比亚',
+'伊波拉' => '埃博拉',
'衣索匹亞' => '埃塞俄比亚',
+'衣索比亞' => '埃塞俄比亚',
+'艾菲爾' => '埃菲尔',
+'葉里溫' => '埃里温',
'功能變數名稱' => '域名',
'吉里巴斯' => '基里巴斯',
+'堂姊' => '堂姐',
+'坎培拉' => '堪培拉',
'塔吉克' => '塔吉克斯坦',
+'塔吉克斯坦' => '塔吉克斯坦',
+'塞爾維亞與蒙特內哥羅' => '塞尔维亚和黑山',
'塞拉利昂' => '塞拉利昂',
'塞普勒斯' => '塞浦路斯',
+'賽普勒斯' => '塞浦路斯',
+'西維爾' => '塞维利亚',
+'塞維亞' => '塞维利亚',
'塞席爾' => '塞舌尔',
'音效卡' => '声卡',
-'多米尼克' => '多米尼加国',
-'夜学' => '夜校',
-'福士' => '大众',
-'福斯' => '大众',
-'大衛碧咸' => '大卫·贝克汉姆',
-'頭槌' => '头球',
+'備著' => '备着',
+'備著書' => '备著书',
+'備著作' => '备著作',
+'備著名' => '备著名',
+'備著錄' => '备著录',
+'備著稱' => '备著称',
+'備著者' => '备著者',
+'備著述' => '备著述',
+'外部連結' => '外部链接',
+'托巴哥' => '多巴哥',
+'都卜勒' => '多普勒',
+'多明尼加' => '多米尼加',
+'大姊' => '大姐',
+'天份' => '天分',
+'夾著' => '夹着',
+'夾著書' => '夹著书',
+'夾著作' => '夹著作',
+'夾著名' => '夹著名',
+'夾著錄' => '夹著录',
+'夾著稱' => '夹著称',
+'夾著者' => '夹著者',
+'夾著述' => '夹著述',
'賓士' => '奔驰',
-'平治' => '奔驰',
+'歐巴馬' => '奥巴马',
+'柯德莉·夏萍' => '奥黛丽·赫本',
'忌廉' => '奶油',
-'字元会' => '字元会',
-'字元會' => '字元会',
-'字元濟' => '字元济',
-'字元济' => '字元济',
+'荷里活' => '好莱坞',
+'姊夫' => '姐夫',
+'姊姊' => '姐姐',
+'姊弟' => '姐弟',
+'威爾斯' => '威尔士',
+'威斯伐倫' => '威斯特法伦',
'字型大小' => '字号',
'字型檔' => '字库',
'欄位' => '字段',
-'字母' => '字母',
-'字元' => '字符',
-'字節' => '字节',
'位元組' => '字节',
-'存檔' => '存盘',
+'存著' => '存着',
+'存著名' => '存著名',
+'孤著' => '孤着',
+'孤著書' => '孤著书',
+'孤著作' => '孤著作',
+'孤著名' => '孤著名',
+'孤著錄' => '孤著录',
+'孤著稱' => '孤著称',
+'孤著者' => '孤著者',
+'孤著述' => '孤著述',
+'學姊' => '学姐',
+'學著' => '学着',
+'學著書' => '学著书',
+'學著作' => '学著作',
+'學著名' => '学著名',
+'學著錄' => '学著录',
+'學著稱' => '学著称',
+'學著者' => '学著者',
+'學著述' => '学著述',
+'太空飛行員' => '宇航员',
+'太空衣' => '宇航服',
+'守著' => '守着',
+'守著書' => '守著书',
+'守著作' => '守著作',
+'守著名' => '守著名',
+'守著錄' => '守著录',
+'守著稱' => '守著称',
+'守著者' => '守著者',
+'守著述' => '守著述',
+'安哈特' => '安哈尔特',
'安地卡及巴布達' => '安提瓜和巴布达',
'巨集' => '宏',
+'定著' => '定着',
+'定著書' => '定著书',
+'定著作' => '定著作',
+'定著名' => '定著名',
+'定著錄' => '定著录',
+'定著稱' => '定著称',
+'定著者' => '定著者',
+'定著述' => '定著述',
'寬頻' => '宽带',
-'定址' => '寻址',
+'密西根' => '密歇根',
+'密执安' => '密歇根',
+'對著' => '对着',
+'對著書' => '对著书',
+'對著作' => '对著作',
+'對著名' => '对著名',
+'對著錄' => '对著录',
+'對著稱' => '对著称',
+'對著者' => '对著者',
+'對著述' => '对著述',
+'對帳' => '对账',
+'尋著' => '寻着',
+'尋著書' => '寻著书',
+'尋著作' => '寻著作',
+'尋著名' => '寻著名',
+'尋著錄' => '寻著录',
+'尋著稱' => '寻著称',
+'尋著者' => '寻著者',
+'尋著述' => '寻著述',
+'飛彈' => '导弹',
+'祖雲達斯' => '尤文图斯',
'奈及利亞' => '尼日利亚',
-'尼日利亞' => '尼日利亚',
-'尼日利亚' => '尼日利亚',
'尼日爾' => '尼日尔',
-'尼日尔' => '尼日尔',
-'章節附註' => '尾注',
'區域網' => '局域网',
+'螢幕' => '屏幕',
+'展著' => '展着',
+'展著書' => '展著书',
+'展著作' => '展著作',
+'展著名' => '展著名',
+'展著錄' => '展著录',
+'展著稱' => '展著称',
+'展著者' => '展著者',
+'展著述' => '展著述',
+'華倫西亞' => '巴伦西亚',
+'瓦倫西亞' => '巴伦西亚',
+'巴塞隆納' => '巴塞罗那',
+'巴塞隆拿' => '巴塞罗那',
+'巴斯拉' => '巴士拉',
+'帕邁拉環礁' => '巴尔米拉环礁',
'巴貝多' => '巴巴多斯',
'巴布亞紐幾內亞' => '巴布亚新几内亚',
-'布希' => '布什',
'布殊' => '布什',
-'布基納法索' => '布基纳法索',
'布吉納法索' => '布基纳法索',
-'布希亞' => '布希亚',
-'布希亚' => '布希亚',
+'布隆泉' => '布隆方丹',
'蒲隆地' => '布隆迪',
+'席哈克' => '希拉克',
'希特拉' => '希特勒',
'帛琉' => '帕劳',
-'平治之乱' => '平治之乱',
-'平治之亂' => '平治之乱',
+'派屈克' => '帕特里克',
+'頻寬' => '带宽',
+'帶著' => '带着',
+'帶著書' => '带著书',
+'帶著作' => '带著作',
+'帶著名' => '带著名',
+'帶著錄' => '带著录',
+'帶著稱' => '带著称',
+'帶著者' => '带著者',
+'帶著述' => '带著述',
+'幫著' => '帮着',
+'幫著書' => '帮著书',
+'幫著作' => '帮著作',
+'幫著名' => '帮著名',
+'幫著錄' => '帮著录',
+'幫著稱' => '帮著称',
+'幫著者' => '帮著者',
+'幫著述' => '帮著述',
+'乾姊' => '干姐',
+'幹著' => '干着',
+'幹著名' => '幹著名',
+'幹著稱' => '幹著称',
+'庇護著' => '庇护着',
+'應用程式' => '应用程序',
+'應著' => '应着',
+'應著書' => '应著书',
+'應著作' => '应著作',
+'應著名' => '应著名',
+'應著錄' => '应著录',
+'應著稱' => '应著称',
+'應著者' => '应著者',
+'應著述' => '应著述',
+'康著' => '康着',
+'康著書' => '康著书',
+'康著作' => '康著作',
+'康著名' => '康著名',
+'康著錄' => '康著录',
+'康著稱' => '康著称',
+'康著者' => '康著者',
+'康著述' => '康著述',
+'建帳' => '建账',
+'克卜勒' => '开普勒',
+'蓋曼群島' => '开曼群岛',
+'開著' => '开着',
+'開著書' => '开著书',
+'開著作' => '开著作',
+'開著名' => '开著名',
+'開著錄' => '开著录',
+'開著稱' => '开著称',
+'開著者' => '开著者',
+'開著述' => '开著述',
+'開帳' => '开账',
'非同步' => '异步',
+'若且唯若' => '当且仅当',
+'當著' => '当着',
+'當著書' => '当著书',
+'當著作' => '当著作',
+'當著名' => '当著名',
+'當著錄' => '当著录',
+'當著稱' => '当著称',
+'當著者' => '当著者',
+'當著述' => '当著述',
+'錄影帶' => '录像带',
+'形上學' => '形而上学',
+'澈底' => '彻底',
+'逕入' => '径入',
+'逕到' => '径到',
+'逕取' => '径取',
+'逕啟' => '径启',
+'逕寄' => '径寄',
+'逕庭' => '径庭',
+'逕往' => '径往',
+'逕自' => '径自',
+'逕行' => '径行',
+'逕迎' => '径迎',
+'待著' => '待着',
+'待著書' => '待著书',
+'待著作' => '待著作',
+'待著名' => '待著名',
+'待著錄' => '待著录',
+'待著稱' => '待著称',
+'待著者' => '待著者',
+'待著述' => '待著述',
+'得著' => '得着',
+'得著書' => '得著书',
+'得著作' => '得著作',
+'得著名' => '得著名',
+'得著錄' => '得著录',
+'得著稱' => '得著称',
+'得著者' => '得著者',
+'得著述' => '得著述',
+'御姊' => '御姐',
'迴圈' => '循环',
-'快閃記憶體' => '快闪存储器',
+'循著' => '循着',
+'循著書' => '循著书',
+'循著作' => '循著作',
+'循著名' => '循著名',
+'循著錄' => '循著录',
+'循著稱' => '循著称',
+'循著者' => '循著者',
+'循著述' => '循著述',
+'德勒斯登' => '德累斯顿',
+'德希達' => '德里达',
+'心著' => '心着',
+'心著書' => '心著书',
+'心著作' => '心著作',
+'心著名' => '心著名',
+'心著錄' => '心著录',
+'心著稱' => '心著称',
+'心著者' => '心著者',
+'心著述' => '心著述',
+'忍著' => '忍着',
+'忍著書' => '忍著书',
+'忍著作' => '忍著作',
+'忍著名' => '忍著名',
+'忍著錄' => '忍著录',
+'忍著稱' => '忍著称',
+'忍著者' => '忍著者',
+'忍著述' => '忍著述',
+'志著' => '志着',
+'志著書' => '志著书',
+'志著作' => '志著作',
+'志著名' => '志著名',
+'志著錄' => '志著录',
+'志著稱' => '志著称',
+'志著者' => '志著者',
+'志著述' => '志著述',
+'忙著' => '忙着',
+'忙著書' => '忙著书',
+'忙著作' => '忙著作',
+'忙著名' => '忙著名',
+'忙著錄' => '忙著录',
+'忙著稱' => '忙著称',
+'忙著者' => '忙著者',
+'忙著述' => '忙著述',
+'懷著' => '怀着',
+'懷著書' => '怀著书',
+'懷著作' => '怀著作',
+'懷著名' => '怀著名',
+'懷著錄' => '怀著录',
+'懷著稱' => '怀著称',
+'懷著者' => '怀著者',
+'懷著述' => '怀著述',
+'急著' => '急着',
+'急著書' => '急著书',
+'急著作' => '急著作',
+'急著名' => '急著名',
+'急著錄' => '急著录',
+'急著稱' => '急著称',
+'急著者' => '急著者',
+'急著述' => '急著述',
+'性著' => '性着',
+'性著書' => '性著书',
+'性著作' => '性著作',
+'性著名' => '性著名',
+'性著錄' => '性著录',
+'性著稱' => '性著称',
+'性著者' => '性著者',
+'性著述' => '性著述',
'匯流排' => '总线',
+'總帳' => '总账',
+'戀著' => '恋着',
+'戀著書' => '恋著书',
+'戀著作' => '恋著作',
+'戀著名' => '恋著名',
+'戀著錄' => '恋著录',
+'戀著稱' => '恋著称',
+'戀著者' => '恋著者',
+'戀著述' => '恋著述',
+'恰如其份' => '恰如其分',
+'悠著' => '悠着',
+'悠著書' => '悠著书',
+'悠著作' => '悠著作',
+'悠著名' => '悠著名',
+'悠著錄' => '悠著录',
+'悠著稱' => '悠著称',
+'悠著者' => '悠著者',
+'悠著述' => '悠著述',
+'慣著' => '惯着',
+'慣著書' => '惯著书',
+'慣著作' => '惯著作',
+'慣著名' => '惯著名',
+'慣著錄' => '惯著录',
+'慣著稱' => '惯著称',
+'慣著者' => '惯著者',
+'慣著述' => '惯著述',
+'想著' => '想着',
+'想著書' => '想著书',
+'想著作' => '想著作',
+'想著名' => '想著名',
+'想著錄' => '想著录',
+'想著稱' => '想著称',
+'想著者' => '想著者',
+'想著述' => '想著述',
'義大利' => '意大利',
+'戈巴契夫' => '戈尔巴乔夫',
+'成份' => '成分',
+'戰著' => '战着',
+'戰著書' => '战著书',
+'戰著作' => '战著作',
+'戰著名' => '战著名',
+'戰著錄' => '战著录',
+'戰著稱' => '战著称',
+'戰著者' => '战著者',
+'戰著述' => '战著述',
+'坎城' => '戛纳',
'黛安娜' => '戴安娜',
-'屋价' => '房价',
+'戴著' => '戴着',
+'戴著書' => '戴著书',
+'戴著作' => '戴著作',
+'戴著名' => '戴著名',
+'戴著錄' => '戴著录',
+'戴著稱' => '戴著称',
+'戴著者' => '戴著者',
+'戴著述' => '戴著述',
'索羅門群島' => '所罗门群岛',
-'打印' => '打印',
+'紮著' => '扎着',
+'紮著書' => '扎著书',
+'紮著作' => '扎著作',
+'紮著名' => '扎著名',
+'紮著錄' => '扎著录',
+'紮著稱' => '扎著称',
+'紮著者' => '扎著者',
+'紮著述' => '扎著述',
'列印' => '打印',
'印表機' => '打印机',
-'打印機' => '打印机',
-'射門' => '打门',
-'掃瞄器' => '扫瞄仪',
-'括弧' => '括号',
-'拿破崙' => '拿破仑',
+'打著' => '打着',
+'打著書' => '打著书',
+'打著作' => '打著作',
+'打著名' => '打著名',
+'打著錄' => '打著录',
+'打著稱' => '打著称',
+'打著者' => '打著者',
+'打著述' => '打著述',
+'扛著' => '扛着',
+'扛著書' => '扛著书',
+'扛著作' => '扛著作',
+'扛著名' => '扛著名',
+'扛著錄' => '扛著录',
+'扛著稱' => '扛著称',
+'扛著者' => '扛著者',
+'扛著述' => '扛著述',
+'掃瞄' => '扫描',
+'掃瞄器' => '扫描仪',
+'抓著' => '抓着',
+'抓著作' => '抓著作',
+'抓著名' => '抓著名',
+'抓著錄' => '抓著录',
+'抓著稱' => '抓著称',
+'抓著者' => '抓著者',
+'抓著述' => '抓著述',
+'投機份子' => '投机分子',
+'護著' => '护着',
+'護著書' => '护著书',
+'護著作' => '护著作',
+'護著名' => '护著名',
+'護著錄' => '护著录',
+'護著稱' => '护著称',
+'護著者' => '护著者',
+'護著述' => '护著述',
+'報帳' => '报账',
+'披著' => '披着',
+'披著書' => '披著书',
+'披著作' => '披著作',
+'披著名' => '披著名',
+'披著錄' => '披著录',
+'披著稱' => '披著称',
+'披著者' => '披著者',
+'披著述' => '披著述',
+'擡著' => '抬着',
+'抬著' => '抬着',
+'抬著作' => '抬著作',
+'抬著名' => '抬著名',
+'抬著錄' => '抬著录',
+'抬著稱' => '抬著称',
+'抬著者' => '抬著者',
+'抬著述' => '抬著述',
+'抱著' => '抱着',
+'抱著作' => '抱著作',
+'抱著名' => '抱著名',
+'抱著錄' => '抱著录',
+'抱著稱' => '抱著称',
+'抱著者' => '抱著者',
+'抱著述' => '抱著述',
+'擔著' => '担着',
+'拉著' => '拉着',
+'拉著書' => '拉著书',
+'拉著作' => '拉著作',
+'拉著名' => '拉著名',
+'拉著錄' => '拉著录',
+'拉著稱' => '拉著称',
+'拉著者' => '拉著者',
+'拉著述' => '拉著述',
+'拎著' => '拎着',
+'拎著作' => '拎著作',
+'拎著名' => '拎著名',
+'拎著錄' => '拎著录',
+'拎著稱' => '拎著称',
+'拎著者' => '拎著者',
+'拎著述' => '拎著述',
+'拖著' => '拖着',
+'拖著作' => '拖著作',
+'拖著名' => '拖著名',
+'拖著錄' => '拖著录',
+'拖著稱' => '拖著称',
+'拖著者' => '拖著者',
+'拖著述' => '拖著述',
+'拼著' => '拼着',
+'拼著作' => '拼著作',
+'拼著名' => '拼著名',
+'拼著錄' => '拼著录',
+'拼著稱' => '拼著称',
+'拼著者' => '拼著者',
+'拼著述' => '拼著述',
+'拿著' => '拿着',
+'拿著作' => '拿著作',
+'拿著名' => '拿著名',
+'拿著錄' => '拿著录',
+'拿著稱' => '拿著称',
+'拿著者' => '拿著者',
+'拿著述' => '拿著述',
+'持著' => '持着',
+'持著作' => '持著作',
+'持著名' => '持著名',
+'持著錄' => '持著录',
+'持著稱' => '持著称',
+'持著者' => '持著者',
+'持著述' => '持著述',
+'掛著' => '挂着',
+'挑著' => '挑着',
+'挑著作' => '挑著作',
+'挑著名' => '挑著名',
+'挑著錄' => '挑著录',
+'挑著稱' => '挑著称',
+'挑著者' => '挑著者',
+'挑著述' => '挑著述',
+'擋著' => '挡着',
+'擋著作' => '挡著作',
+'擋著名' => '挡著名',
+'擋著錄' => '挡著录',
+'擋著稱' => '挡著称',
+'擋著者' => '挡著者',
+'擋著述' => '挡著述',
+'掙著' => '挣着',
+'掙著書' => '挣著书',
+'掙著作' => '挣著作',
+'掙著名' => '挣著名',
+'掙著錄' => '挣著录',
+'掙著稱' => '挣著称',
+'掙著者' => '挣著者',
+'掙著述' => '挣著述',
+'揮著' => '挥着',
+'揮著作' => '挥著作',
+'揮著名' => '挥著名',
+'揮著錄' => '挥著录',
+'揮著稱' => '挥著称',
+'揮著者' => '挥著者',
+'揮著述' => '挥著述',
+'挨著' => '挨着',
+'挨著作' => '挨著作',
+'挨著名' => '挨著名',
+'挨著錄' => '挨著录',
+'挨著稱' => '挨著称',
+'挨著者' => '挨著者',
+'挨著述' => '挨著述',
+'捆著' => '捆着',
+'捆著作' => '捆著作',
+'捆著名' => '捆著名',
+'捆著錄' => '捆著录',
+'捆著稱' => '捆著称',
+'捆著者' => '捆著者',
+'捆著述' => '捆著述',
+'據著' => '据着',
+'據著書' => '据著书',
+'據著作' => '据著作',
+'據著名' => '据著名',
+'據著錄' => '据著录',
+'據著稱' => '据著称',
+'據著者' => '据著者',
+'據著述' => '据著述',
'積架' => '捷豹',
-'介面' => '接口',
+'掖著' => '掖着',
+'掖著作' => '掖著作',
+'掖著名' => '掖著名',
+'掖著錄' => '掖著录',
+'掖著稱' => '掖著称',
+'掖著者' => '掖著者',
+'掖著述' => '掖著述',
+'接著' => '接着',
+'接著作' => '接著作',
+'接著名' => '接著名',
+'接著錄' => '接著录',
+'接著稱' => '接著称',
+'接著者' => '接著者',
+'接著述' => '接著述',
'控制項' => '控件',
+'揉著' => '揉着',
+'揉著書' => '揉著书',
+'揉著作' => '揉著作',
+'揉著名' => '揉著名',
+'揉著錄' => '揉著录',
+'揉著稱' => '揉著称',
+'揉著者' => '揉著者',
+'揉著述' => '揉著述',
+'提著' => '提着',
+'提著作' => '提著作',
+'提著名' => '提著名',
+'提著錄' => '提著录',
+'提著稱' => '提著称',
+'提著者' => '提著者',
+'提著述' => '提著述',
+'外掛程式' => '插件',
+'摟著' => '搂着',
+'摟著作' => '搂著作',
+'摟著名' => '搂著名',
+'摟著錄' => '搂著录',
+'摟著稱' => '搂著称',
+'摟著者' => '搂著者',
+'摟著述' => '搂著述',
+'搜尋引擎' => '搜索引擎',
+'擺著' => '摆着',
+'擺著作' => '摆著作',
+'擺著名' => '摆著名',
+'擺著錄' => '摆著录',
+'擺著稱' => '摆著称',
+'擺著者' => '摆著者',
+'擺著述' => '摆著述',
+'電單車' => '摩托车',
+'戴卓爾' => '撒切尔',
+'柴契爾' => '撒切尔',
+'撼著' => '撼着',
+'撼著書' => '撼著书',
+'撼著作' => '撼著作',
+'撼著名' => '撼著名',
+'撼著錄' => '撼著录',
+'撼著稱' => '撼著称',
+'撼著者' => '撼著者',
+'撼著述' => '撼著述',
+'作業系統' => '操作系统',
+'收帳' => '收账',
+'放著' => '放着',
+'放著作' => '放著作',
+'放著名' => '放著名',
+'放著称' => '放著称',
+'放著稱' => '放著称',
+'放帳' => '放账',
+'敞著' => '敞着',
+'敞著作' => '敞著作',
+'敞著名' => '敞著名',
+'敞著錄' => '敞著录',
+'敞著稱' => '敞著称',
+'敞著者' => '敞著者',
+'敞著述' => '敞著述',
+'數碼訊號' => '数字信号',
+'數位訊號' => '数字信号',
+'數位技術' => '数字技术',
+'數碼技術' => '数字技术',
+'數位電視' => '数字电视',
+'數碼電視' => '数字电视',
'資料庫' => '数据库',
+'數著' => '数着',
+'數位相機' => '数码相机',
+'數著作' => '数著作',
+'數著名' => '数著名',
+'數著錄' => '数著录',
+'數著稱' => '数著称',
+'數著者' => '数著者',
+'數著述' => '数著述',
'汶萊' => '文莱',
+'鬥著' => '斗着',
+'鬥著書' => '斗著书',
+'鬥著作' => '斗著作',
+'鬥著名' => '斗著名',
+'鬥著錄' => '斗著录',
+'鬥著稱' => '斗著称',
+'鬥著者' => '斗著者',
+'鬥著述' => '斗著述',
+'斥著' => '斥着',
+'斥著書' => '斥著书',
+'斥著作' => '斥著作',
+'斥著名' => '斥著名',
+'斥著錄' => '斥著录',
+'斥著稱' => '斥著称',
+'斥著者' => '斥著者',
+'斥著述' => '斥著述',
+'史達林' => '斯大林',
'史瓦濟蘭' => '斯威士兰',
'斯洛維尼亞' => '斯洛文尼亚',
+'史特勞斯' => '斯特劳斯',
+'紐幾內亞' => '新几内亚',
+'紐澤西' => '新泽西',
'紐西蘭' => '新西兰',
-'即食麵' => '方便面',
-'快速面' => '方便面',
-'泡麵' => '方便面',
-'速食麵' => '方便面',
+'舊帳' => '旧账',
+'三藩市' => '旧金山',
+'昂山素姬' => '昂山素季',
+'翁山蘇姬' => '昂山素季',
+'昂著' => '昂着',
+'昂著書' => '昂著书',
+'昂著作' => '昂著作',
+'昂著名' => '昂著名',
+'昂著錄' => '昂著录',
+'昂著稱' => '昂著称',
+'昂著者' => '昂著者',
+'昂著述' => '昂著述',
+'明白帳' => '明白账',
+'映著' => '映着',
+'映著書' => '映著书',
+'映著作' => '映著作',
+'映著名' => '映著名',
+'映著錄' => '映著录',
+'映著稱' => '映著称',
+'映著者' => '映著者',
+'映著述' => '映著述',
+'顯示卡' => '显卡',
+'显著' => '显著',
+'顯著' => '显著',
+'晃著' => '晃着',
+'晃著作' => '晃著作',
+'晃著名' => '晃著名',
+'晃著錄' => '晃著录',
+'晃著稱' => '晃著称',
+'晃著者' => '晃著者',
+'晃著述' => '晃著述',
+'普利茲' => '普利策',
+'蒲美蓬' => '普密蓬',
+'蒲朗克' => '普朗克',
+'電晶體' => '晶体管',
+'智慧型' => '智能',
+'智慧卡' => '智能卡',
+'智慧手機' => '智能手机',
+'暗著' => '暗着',
+'暗著書' => '暗著书',
+'暗著作' => '暗著作',
+'暗著名' => '暗著名',
+'暗著錄' => '暗著录',
+'暗著稱' => '暗著称',
+'暗著者' => '暗著者',
+'暗著述' => '暗著述',
+'有著' => '有着',
+'有著書' => '有著书',
+'有著作' => '有著作',
+'有著名' => '有著名',
+'有著錄' => '有著录',
+'有著稱' => '有著称',
+'有著者' => '有著者',
+'有著述' => '有著述',
'伺服器' => '服务器',
+'望著' => '望着',
+'望著作' => '望著作',
+'望著名' => '望著名',
+'望著錄' => '望著录',
+'望著稱' => '望著称',
+'望著者' => '望著者',
+'望著述' => '望著述',
+'朝著' => '朝着',
+'朝著作' => '朝著作',
+'朝著名' => '朝著名',
+'朝著錄' => '朝著录',
+'朝著稱' => '朝著称',
+'朝著者' => '朝著者',
+'朝著述' => '朝著述',
+'本份' => '本分',
+'本本份份' => '本本分分',
+'班傑明' => '本杰明',
+'本著' => '本着',
+'本著書' => '本著书',
+'本著作' => '本著作',
+'本著名' => '本著名',
+'本著錄' => '本著录',
+'本著稱' => '本著称',
+'本著者' => '本著者',
+'本著述' => '本著述',
+'本帳' => '本账',
'機械人' => '机器人',
-'機器人' => '机器人',
-'許可權' => '权限',
-'寶獅' => '标志',
+'工具機' => '机床',
+'殺著' => '杀着',
+'殺著書' => '杀著书',
+'殺著作' => '杀著作',
+'殺著名' => '杀著名',
+'殺著錄' => '杀著录',
+'殺著稱' => '杀著称',
+'殺著者' => '杀著者',
+'殺著述' => '杀著述',
+'雜著' => '杂着',
+'雜著書' => '杂著书',
+'雜著作' => '杂著作',
+'雜著名' => '杂著名',
+'雜著錄' => '杂著录',
+'雜著稱' => '杂著称',
+'雜著者' => '杂著者',
+'雜著述' => '杂著述',
+'杜塞道夫' => '杜塞尔多夫',
+'來著' => '来着',
+'來著書' => '来著书',
+'來著作' => '来著作',
+'來著名' => '来著名',
+'來著錄' => '来著录',
+'來著稱' => '来著称',
+'來著者' => '来著者',
+'來著述' => '来著述',
+'板著臉' => '板着脸',
+'枕著' => '枕着',
+'枕著作' => '枕著作',
+'枕著名' => '枕著名',
+'枕著錄' => '枕著录',
+'枕著稱' => '枕著称',
+'枕著者' => '枕著者',
+'枕著述' => '枕著述',
+'槍枝' => '枪支',
+'柏林圍牆' => '柏林墙',
+'查帳' => '查账',
+'查維茲' => '查韦斯',
+'標誌著' => '标志着',
'格瑞那達' => '格林纳达',
-'榴槤' => '榴莲',
-'榴梿' => '榴莲',
+'森巴舞' => '桑巴舞',
+'梅赫西迪' => '梅赛德斯',
+'夢著' => '梦着',
+'夢著書' => '梦著书',
+'夢著作' => '梦著作',
+'夢著名' => '梦著名',
+'夢著錄' => '梦著录',
+'夢著稱' => '梦著称',
+'夢著者' => '梦著者',
+'夢著述' => '梦著述',
+'梳著' => '梳着',
+'梳著作' => '梳著作',
+'梳著名' => '梳著名',
+'梳著錄' => '梳著录',
+'梳著稱' => '梳著称',
+'梳著者' => '梳著者',
+'梳著述' => '梳著述',
+'梵谷' => '梵高',
+'機率' => '概率',
+'欠帳' => '欠账',
+'死帳' => '死账',
+'庇里牛斯' => '比利牛斯',
+'畢卡索' => '毕加索',
'茅利塔尼亞' => '毛里塔尼亚',
'毛里裘斯' => '毛里求斯',
'模里西斯' => '毛里求斯',
-'华乐' => '民乐',
-'中樂' => '民乐',
-'永曆' => '永历',
-'沙地阿拉伯' => '沙特阿拉伯',
+'公厘' => '毫米',
+'公釐' => '毫米',
+'胺基酸' => '氨基酸',
+'水份' => '水分',
+'水氣' => '水汽',
+'求著' => '求着',
+'求著書' => '求著书',
+'求著作' => '求著作',
+'求著名' => '求著名',
+'求著錄' => '求著录',
+'求著稱' => '求著称',
+'求著者' => '求著者',
+'求著述' => '求著述',
+'漢諾瓦' => '汉诺威',
+'沈著' => '沉着',
+'沉著' => '沉着',
+'沉著書' => '沉著书',
+'沉著作' => '沉著作',
+'沉著名' => '沉著名',
+'沉著錄' => '沉著录',
+'沉著稱' => '沉著称',
+'沉著者' => '沉著者',
+'沉著述' => '沉著述',
'沙烏地阿拉伯' => '沙特阿拉伯',
+'沙地阿拉伯' => '沙特阿拉伯',
+'沿著' => '沿着',
+'沿著書' => '沿著书',
+'沿著作' => '沿著作',
+'沿著名' => '沿著名',
+'沿著錄' => '沿著录',
+'沿著稱' => '沿著称',
+'沿著者' => '沿著者',
+'沿著述' => '沿著述',
+'玻里尼西亞' => '波利尼西亚',
+'波士尼亞' => '波斯尼亚',
'波士尼亞赫塞哥維納' => '波斯尼亚和黑塞哥维那',
+'鐵達尼號' => '泰坦尼克号',
+'幫浦' => '泵',
'辛巴威' => '津巴布韦',
'宏都拉斯' => '洪都拉斯',
+'活著' => '活着',
+'活著書' => '活著书',
+'活著作' => '活著作',
+'活著名' => '活著名',
+'活著錄' => '活著录',
+'活著稱' => '活著称',
+'活著者' => '活著者',
+'活著述' => '活著述',
+'流水帳' => '流水账',
+'流著' => '流着',
+'流著書' => '流著书',
+'流著作' => '流著作',
+'流著名' => '流著名',
+'流著錄' => '流著录',
+'流著稱' => '流著称',
+'流著者' => '流著者',
+'流著述' => '流著述',
+'流露著' => '流露着',
+'浮著' => '浮着',
+'蘭卡威' => '浮罗交怡',
+'浮著書' => '浮著书',
+'浮著作' => '浮著作',
+'浮著名' => '浮著名',
+'浮著錄' => '浮著录',
+'浮著稱' => '浮著称',
+'浮著者' => '浮著者',
+'浮著述' => '浮著述',
+'海洛英' => '海洛因',
+'海浬' => '海里',
+'塗著' => '涂着',
+'潤著' => '润着',
+'潤著書' => '润著书',
+'潤著作' => '润著作',
+'潤著名' => '润著名',
+'潤著錄' => '润著录',
+'潤著稱' => '润著称',
+'潤著者' => '润著者',
+'潤著述' => '润著述',
+'涵著' => '涵着',
+'涵著書' => '涵著书',
+'涵著作' => '涵著作',
+'涵著名' => '涵著名',
+'涵著錄' => '涵著录',
+'涵著稱' => '涵著称',
+'涵著者' => '涵著者',
+'涵著述' => '涵著述',
+'混帳' => '混账',
+'清帳' => '清账',
+'渴著' => '渴着',
+'渴著書' => '渴著书',
+'渴著作' => '渴著作',
+'渴著名' => '渴著名',
+'渴著錄' => '渴著录',
+'渴著稱' => '渴著称',
+'渴著者' => '渴著者',
+'渴著述' => '渴著述',
+'原始碼' => '源代码',
+'溢著' => '溢着',
+'溢著書' => '溢著书',
+'溢著作' => '溢著作',
+'溢著名' => '溢著名',
+'溢著錄' => '溢著录',
+'溢著稱' => '溢著称',
+'溢著者' => '溢著者',
+'溢著述' => '溢著述',
'滑鼠蛇' => '滑鼠蛇',
'滿16進位' => '满16进位',
'滿二進位' => '满二进位',
@@ -18983,21 +19146,322 @@ $zh2CN = array(
'滿六進位' => '满六进位',
'滿十六進位' => '满十六进位',
'滿十進位' => '满十进位',
-'蓋火鍋' => '火锅盖帽',
+'滿著' => '满着',
+'滿著作' => '满著作',
+'滿著名' => '满著名',
+'滿著者' => '满著者',
+'演著' => '演着',
+'演著書' => '演著书',
+'演著作' => '演著作',
+'演著名' => '演著名',
+'演著錄' => '演著录',
+'演著稱' => '演著称',
+'演著者' => '演著者',
+'演著述' => '演著述',
+'漫著' => '漫着',
+'漫著書' => '漫著书',
+'漫著作' => '漫著作',
+'漫著名' => '漫著名',
+'漫著錄' => '漫著录',
+'漫著稱' => '漫著称',
+'漫著者' => '漫著者',
+'漫著述' => '漫著述',
+'雷射' => '激光',
+'點著' => '点着',
+'點著作' => '点著作',
+'點著名' => '点著名',
+'點著錄' => '点著录',
+'點著稱' => '点著称',
+'點著者' => '点著者',
+'點著述' => '点著述',
+'爛帳' => '烂账',
+'燒著' => '烧着',
+'燒著作' => '烧著作',
+'燒著名' => '烧著名',
+'燒著錄' => '烧著录',
+'燒著稱' => '烧著称',
+'燒著者' => '烧著者',
+'燒著述' => '烧著述',
+'照著' => '照着',
+'照著書' => '照著书',
+'照著作' => '照著作',
+'照著名' => '照著名',
+'照著錄' => '照著录',
+'照著稱' => '照著称',
+'照著者' => '照著者',
+'照著述' => '照著述',
+'愛護著' => '爱护着',
+'愛著' => '爱着',
+'愛著書' => '爱著书',
+'愛著作' => '爱著作',
+'愛著名' => '爱著名',
+'愛著錄' => '爱著录',
+'愛著稱' => '爱著称',
+'愛著者' => '爱著者',
+'愛著述' => '爱著述',
+'牽著' => '牵着',
+'牽著書' => '牵著书',
+'牽著作' => '牵著作',
+'牽著名' => '牵著名',
+'牽著錄' => '牵著录',
+'牽著稱' => '牵著称',
+'牽著者' => '牵著者',
+'牽著述' => '牵著述',
+'千里達' => '特立尼达',
+'千里達及托巴哥' => '特立尼达和多巴哥',
'千里達托貝哥' => '特立尼达和托巴哥',
'狗隻' => '犬只',
-'卡佩雅蒂' => '珍妮弗·卡普里亚蒂',
-'諾魯' => '瑙鲁',
+'獨著' => '独着',
+'獨著書' => '独著书',
+'獨著作' => '独著作',
+'獨著名' => '独著名',
+'獨著錄' => '独著录',
+'獨著稱' => '独著称',
+'獨著者' => '独著者',
+'獨著述' => '独著述',
+'猜著' => '猜着',
+'猜著書' => '猜着书',
+'猜著作' => '猜著作',
+'猜著名' => '猜著名',
+'猜著錄' => '猜著录',
+'猜著稱' => '猜著称',
+'猜著者' => '猜著者',
+'猜著述' => '猜著述',
+'玩著' => '玩着',
'萬那杜' => '瓦努阿图',
'溫納圖' => '瓦努阿图',
-'碟片' => '盘片',
-'短訊' => '短信',
-'簡訊' => '短信',
-'矽尘' => '矽尘',
+'華勒沙' => '瓦文萨',
+'華里沙' => '瓦文萨',
+'甜著' => '甜着',
+'甜著書' => '甜著书',
+'甜著作' => '甜著作',
+'甜著名' => '甜著名',
+'甜著錄' => '甜著录',
+'甜著稱' => '甜著称',
+'甜著者' => '甜著者',
+'甜著述' => '甜著述',
+'用著' => '用着',
+'用著書' => '用著书',
+'用著作' => '用著作',
+'用著名' => '用著名',
+'用著錄' => '用著录',
+'用著稱' => '用著称',
+'用著者' => '用著者',
+'用著述' => '用著述',
+'A型肝炎' => '甲型肝炎',
+'A肝' => '甲肝',
+'電視劇集' => '电视剧',
+'電視影集' => '电视系列剧',
+'畫著' => '画着',
+'畫著作' => '画著作',
+'畫著名' => '画著名',
+'畫著稱' => '画著称',
+'畫著者' => '画著者',
+'介面' => '界面',
+'留著' => '留着',
+'留著書' => '留着书',
+'留著作' => '留著作',
+'留著名' => '留著名',
+'留著錄' => '留著录',
+'留著稱' => '留著称',
+'留著者' => '留著者',
+'留著述' => '留著述',
+'疑著' => '疑着',
+'疑著書' => '疑著书',
+'疑著作' => '疑著作',
+'疑著名' => '疑著名',
+'疑著錄' => '疑著录',
+'疑著稱' => '疑著称',
+'疑著者' => '疑著者',
+'疑著述' => '疑著述',
+'狂牛症' => '疯牛病',
+'徵狀' => '症状',
+'百慕達' => '百慕大',
+'皮雅斯·布士南' => '皮尔斯·布鲁斯南',
+'皺著' => '皱着',
+'皺著書' => '皱著书',
+'皺著作' => '皱著作',
+'皺著名' => '皱著名',
+'皺著錄' => '皱著录',
+'皺著稱' => '皱著称',
+'皺著者' => '皱著者',
+'皺著述' => '皱著述',
+'鹽份' => '盐分',
+'盛著' => '盛着',
+'盛著書' => '盛著书',
+'盛著作' => '盛著作',
+'盛著名' => '盛著名',
+'盛著錄' => '盛著录',
+'盛著稱' => '盛著称',
+'盛著者' => '盛著者',
+'盛著述' => '盛著述',
+'盯著' => '盯着',
+'盯著書' => '盯着书',
+'盯著作' => '盯著作',
+'盯著名' => '盯著名',
+'盯著錄' => '盯著录',
+'盯著稱' => '盯著称',
+'盯著者' => '盯著者',
+'盯著述' => '盯著述',
+'盾著' => '盾着',
+'盾著書' => '盾著书',
+'盾著作' => '盾著作',
+'盾著名' => '盾著名',
+'盾著錄' => '盾著录',
+'盾著稱' => '盾著称',
+'盾著者' => '盾著者',
+'盾著述' => '盾著述',
+'看著' => '看着',
+'看著書' => '看着书',
+'看著作' => '看著作',
+'看著名' => '看著名',
+'看著錄' => '看著录',
+'看著稱' => '看著称',
+'看著者' => '看著者',
+'看著述' => '看著述',
+'著業' => '着业',
+'著絲' => '着丝',
+'著麼' => '着么',
+'著人' => '着人',
+'著甚麽' => '着什么',
+'著什麼' => '着什么',
+'著他' => '着他',
+'著令' => '着令',
+'著位' => '着位',
+'著體' => '着体',
+'著你' => '着你',
+'著便' => '着便',
+'著涼' => '着凉',
+'著力' => '着力',
+'著勁' => '着劲',
+'著號' => '着号',
+'著呢' => '着呢',
+'著哩' => '着哩',
+'著地' => '着地',
+'著墨' => '着墨',
+'著聲' => '着声',
+'著處' => '着处',
+'著她' => '着她',
+'著妳' => '着妳',
+'著姓' => '着姓',
+'著它' => '着它',
+'著定' => '着定',
+'著實' => '着实',
+'著己' => '着己',
+'著帳' => '着帐',
+'著床' => '着床',
+'著庸' => '着庸',
+'著式' => '着式',
+'著錄' => '着录',
+'著心' => '着心',
+'著志' => '着志',
+'著忙' => '着忙',
+'著急' => '着急',
+'著惱' => '着恼',
+'著驚' => '着惊',
+'著想' => '着想',
+'著意' => '着意',
+'著慌' => '着慌',
+'著我' => '着我',
+'著手' => '着手',
+'著抹' => '着抹',
+'著摸' => '着摸',
+'著撰' => '着撰',
+'著數' => '着数',
+'著明' => '着明',
+'著末' => '着末',
+'著極' => '着极',
+'著格' => '着格',
+'著棋' => '着棋',
+'著氣' => '着气',
+'著法' => '着法',
+'著淺' => '着浅',
+'著火' => '着火',
+'著然' => '着然',
+'著甚' => '着甚',
+'著生' => '着生',
+'著疑' => '着疑',
+'著白' => '着白',
+'著相' => '着相',
+'著眼' => '着眼',
+'著著' => '着着',
+'著祂' => '着祂',
+'著積' => '着积',
+'著稿' => '着稿',
+'著筆' => '着笔',
+'著籍' => '着籍',
+'著緊' => '着紧',
+'著緑' => '着緑',
+'著絆' => '着绊',
+'著績' => '着绩',
+'著緋' => '着绯',
+'著綠' => '着绿',
+'著肉' => '着肉',
+'著腳' => '着脚',
+'著艦' => '着舰',
+'著色' => '着色',
+'著節' => '着节',
+'著花' => '着花',
+'著莫' => '着莫',
+'著落' => '着落',
+'著槁' => '着藁',
+'著衣' => '着衣',
+'著裝' => '着装',
+'著要' => '着要',
+'著警' => '着警',
+'著趣' => '着趣',
+'著邊' => '着边',
+'著迷' => '着迷',
+'著跡' => '着迹',
+'著重' => '着重',
+'著録' => '着録',
+'著聞' => '着闻',
+'著陸' => '着陆',
+'著雝' => '着雝',
+'著鞭' => '着鞭',
+'著題' => '着题',
+'著魔' => '着魔',
+'睡著' => '睡着',
+'睡著書' => '睡著书',
+'睡著作' => '睡著作',
+'睡著名' => '睡著名',
+'睡著錄' => '睡著录',
+'睡著稱' => '睡著称',
+'睡著者' => '睡著者',
+'睡著述' => '睡著述',
+'瞞著' => '瞒着',
+'瞞著書' => '瞒著书',
+'瞞著作' => '瞒著作',
+'瞞著名' => '瞒著名',
+'瞞著錄' => '瞒著录',
+'瞞著稱' => '瞒著称',
+'瞞著者' => '瞒著者',
+'瞞著述' => '瞒著述',
+'瞧著' => '瞧着',
+'瞧著書' => '瞧着书',
+'瞧著作' => '瞧著作',
+'瞧著名' => '瞧著名',
+'瞧著錄' => '瞧著录',
+'瞧著稱' => '瞧著称',
+'瞧著者' => '瞧著者',
+'瞧著述' => '瞧著述',
+'瞪著' => '瞪着',
+'瞪著書' => '瞪著书',
+'瞪著作' => '瞪著作',
+'瞪著名' => '瞪著名',
+'瞪著錄' => '瞪著录',
+'瞪著稱' => '瞪著称',
+'瞪著者' => '瞪著者',
+'瞪著述' => '瞪著述',
+'智財權' => '知识产权',
+'智慧財產權' => '知识产权',
+'知識份子' => '知识分子',
+'什勒斯維希' => '石勒苏益格',
'矽塵' => '矽尘',
+'矽尘' => '矽尘',
'矽肺' => '矽肺',
-'矽钢' => '矽钢',
'矽鋼' => '矽钢',
+'矽钢' => '矽钢',
'矽' => '硅',
'矽片' => '硅片',
'矽谷' => '硅谷',
@@ -19005,81 +19469,845 @@ $zh2CN = array(
'硬碟' => '硬盘',
'磁碟' => '磁盘',
'磁軌' => '磁道',
+'福馬林' => '福尔马林',
+'福著' => '福着',
+'福著書' => '福著书',
+'福著作' => '福著作',
+'福著名' => '福著名',
+'福著錄' => '福著录',
+'福著稱' => '福著称',
+'福著者' => '福著者',
+'福著述' => '福著述',
+'私帳' => '私账',
'葛摩' => '科摩罗',
'象牙海岸' => '科特迪瓦',
+'積極份子' => '积极分子',
'行動電話' => '移动电话',
'流動電話' => '移动电话',
+'行動網路' => '移动网络',
+'流動網絡' => '移动网络',
+'程式設計師' => '程序员',
'程式控制' => '程控',
+'空中巴士' => '空中客车',
+'空氣質素' => '空气质量',
+'空氣品質' => '空气质量',
+'空著' => '空着',
+'空著書' => '空著书',
+'空著作' => '空著作',
+'空著名' => '空著名',
+'空著錄' => '空著录',
+'空著稱' => '空著称',
+'空著者' => '空著者',
+'空著述' => '空著述',
+'穿著' => '穿着',
+'穿著書' => '穿著书',
+'穿著作' => '穿著作',
+'穿著名' => '穿著名',
+'穿著錄' => '穿著录',
+'穿著稱' => '穿著称',
+'穿著者' => '穿著者',
+'穿著述' => '穿著述',
'突尼西亞' => '突尼斯',
-'谐星' => '笑星',
-'等於' => '等于',
+'豎著' => '竖着',
+'豎著書' => '竖著书',
+'豎著作' => '竖著作',
+'豎著名' => '竖著名',
+'豎著錄' => '竖著录',
+'豎著稱' => '竖著称',
+'豎著者' => '竖著者',
+'豎著述' => '竖著述',
+'站著' => '站着',
+'站著書' => '站著书',
+'站著作' => '站著作',
+'站著名' => '站著名',
+'站著錄' => '站著录',
+'站著稱' => '站著称',
+'站著者' => '站著者',
+'站著述' => '站著述',
+'笑著' => '笑着',
+'笑著書' => '笑著书',
+'笑著作' => '笑著作',
+'笑著名' => '笑著名',
+'笑著錄' => '笑著录',
+'笑著稱' => '笑著称',
+'笑著者' => '笑著者',
+'笑著述' => '笑著述',
+'筆帳' => '笔账',
+'提比里西' => '第比利斯',
+'簽著' => '签着',
+'簽帳' => '签账',
'運算元' => '算子',
'演算法' => '算法',
-'顆進球' => '粒入球',
+'算帳' => '算账',
+'管著' => '管着',
+'管著書' => '管著书',
+'管著作' => '管著作',
+'管著名' => '管著名',
+'管著錄' => '管著录',
+'管著稱' => '管著称',
+'管著者' => '管著者',
+'管著述' => '管著述',
+'管帳' => '管账',
+'公尺' => '米',
+'糊塗帳' => '糊涂账',
+'糖份' => '糖分',
+'動畫影集' => '系列动画片',
+'繫著' => '系着',
+'索贊尼辛' => '索尔仁尼琴',
+'索忍尼辛' => '索尔仁尼琴',
+'蘇辛尼津' => '索尔仁尼琴',
'索馬利亞' => '索马里',
+'索馬利蘭' => '索马里兰',
+'正體中文' => '繁体中文',
+'強斯頓環礁' => '约翰斯顿岛',
+'組份' => '组分',
+'經常帳' => '经常账',
+'經濟帳' => '经济账',
+'綁著' => '绑着',
+'綁著書' => '绑著书',
+'綁著作' => '绑著作',
+'綁著名' => '绑著名',
+'綁著錄' => '绑著录',
+'綁著稱' => '绑著称',
+'綁著者' => '绑著者',
+'綁著述' => '绑著述',
+'結帳' => '结账',
+'繞著' => '绕着',
+'繞著書' => '绕著书',
+'繞著作' => '绕著作',
+'繞著名' => '绕著名',
+'繞著錄' => '绕著录',
+'繞著稱' => '绕著称',
+'繞著者' => '绕著者',
+'繞著述' => '绕著述',
+'維根斯坦' => '维特根斯坦',
+'繃著' => '绷着',
+'緣份' => '缘分',
+'纏著' => '缠着',
+'纏著書' => '缠著书',
+'纏著作' => '缠著作',
+'纏著名' => '缠著名',
+'纏著錄' => '缠著录',
+'纏著稱' => '缠著称',
+'纏著者' => '缠著者',
+'纏著述' => '缠著述',
+'網站連結' => '网站链接',
'網路' => '网络',
-'網絡' => '网络',
+'網頁連結' => '网页链接',
+'罩著' => '罩着',
+'罩著書' => '罩著书',
+'罩著作' => '罩著作',
+'罩著名' => '罩著名',
+'罩著錄' => '罩著录',
+'罩著稱' => '罩著称',
+'罩著者' => '罩著者',
+'罩著述' => '罩著述',
+'美著' => '美着',
+'美著書' => '美著书',
+'美著作' => '美著作',
+'美著名' => '美著名',
+'美著錄' => '美著录',
+'美著稱' => '美著称',
+'美著者' => '美著者',
+'美著述' => '美著述',
+'耀著' => '耀着',
+'耀著書' => '耀著书',
+'耀著作' => '耀著作',
+'耀著名' => '耀著名',
+'耀著錄' => '耀著录',
+'耀著稱' => '耀著称',
+'耀著者' => '耀著者',
+'耀著述' => '耀著述',
'寮國' => '老挝',
-'肯雅' => '肯尼亚',
-'肯亞' => '肯尼亚',
-'單車' => '自行车',
+'寮人民民主共和國' => '老挝人民民主共和国',
+'寮語' => '老挝语',
+'考著' => '考着',
+'考著書' => '考著书',
+'考著作' => '考著作',
+'考著名' => '考著名',
+'考著錄' => '考著录',
+'考著稱' => '考著称',
+'考著者' => '考著者',
+'考著述' => '考著述',
+'職份' => '职分',
+'辛康納利' => '肖恩·康纳利',
+'蕭士塔高維奇' => '肖斯塔科维奇',
+'蕭士達高維契' => '肖斯塔科维奇',
+'甘迺迪' => '肯尼迪',
+'背著' => '背着',
+'背著書' => '背著书',
+'背著作' => '背著作',
+'背著名' => '背著名',
+'背著錄' => '背著录',
+'背著稱' => '背著称',
+'背著者' => '背著者',
+'背著述' => '背著述',
+'膠著' => '胶着',
+'膠著書' => '胶著书',
+'膠著作' => '胶著作',
+'膠著名' => '胶著名',
+'膠著錄' => '胶著录',
+'膠著稱' => '胶著称',
+'膠著者' => '胶著者',
+'膠著述' => '胶著述',
+'舒麥加' => '舒马赫',
'太空梭' => '航天飞机',
'穿梭機' => '航天飞机',
-'節慶' => '节日',
-'晶元' => '芯片',
+'藝著' => '艺着',
+'藝著書' => '艺著书',
+'藝著作' => '艺著作',
+'藝著名' => '艺著名',
+'藝著錄' => '艺著录',
+'藝著稱' => '艺著称',
+'藝著者' => '艺著者',
+'藝著述' => '艺著述',
+'愛滋' => '艾滋',
'晶片' => '芯片',
+'晶元' => '芯片',
'蘇利南' => '苏里南',
+'苦著' => '苦着',
+'苦著書' => '苦著书',
+'苦著作' => '苦著作',
+'苦著名' => '苦著名',
+'苦著錄' => '苦著录',
+'苦著稱' => '苦著称',
+'苦著者' => '苦著者',
+'苦著述' => '苦著述',
+'英吋' => '英寸',
+'英呎' => '英尺',
+'大英國協' => '英联邦',
+'共和联邦' => '英联邦',
'士多啤梨' => '草莓',
+'螢光棒' => '荧光棒',
+'螢屏' => '荧屏',
+'霍爾斯坦' => '荷尔斯泰因',
'莫三比克' => '莫桑比克',
+'雷伊泰灣' => '莱特湾',
'賴索托' => '莱索托',
+'穫著' => '获着',
+'獲著' => '获着',
+'獲著書' => '获著书',
+'獲著作' => '获著作',
+'獲著名' => '获著名',
+'獲著錄' => '获著录',
+'獲著稱' => '获著称',
+'獲著者' => '获著者',
+'獲著述' => '获著述',
+'塞拉耶佛' => '萨拉热窝',
+'落著' => '落着',
+'落著書' => '落著书',
+'落著作' => '落著作',
+'落著名' => '落著名',
+'落著錄' => '落著录',
+'落著稱' => '落著称',
+'落著者' => '落著者',
+'落著述' => '落著述',
+'滿地可' => '蒙特利尔',
+'蒙特婁' => '蒙特利尔',
+'蒙著' => '蒙着',
+'蒙著書' => '蒙著书',
+'蒙著作' => '蒙著作',
+'蒙著名' => '蒙著名',
+'蒙著錄' => '蒙著录',
+'蒙著稱' => '蒙著称',
+'蒙著者' => '蒙著者',
+'蒙著述' => '蒙著述',
+'蓋著' => '蓋着',
+'藍芽' => '蓝牙',
+'薛丁格' => '薛定谔',
+'藏著' => '藏着',
+'藏著書' => '藏著书',
+'藏著作' => '藏著作',
+'藏著名' => '藏著名',
+'藏著錄' => '藏著录',
+'藏著稱' => '藏著称',
+'藏著者' => '藏著者',
+'藏著述' => '藏著述',
+'蘸著' => '蘸着',
+'蘸著書' => '蘸著书',
+'蘸著作' => '蘸著作',
+'蘸著名' => '蘸著名',
+'蘸著錄' => '蘸著录',
+'蘸著稱' => '蘸著称',
+'蘸著者' => '蘸著者',
+'蘸著述' => '蘸著述',
+'行著' => '行着',
+'行著書' => '行著书',
+'行著作' => '行著作',
+'行著名' => '行著名',
+'行著錄' => '行著录',
+'行著稱' => '行著称',
+'行著者' => '行著者',
+'行著述' => '行著述',
+'衣著' => '衣着',
+'衣著書' => '衣著书',
+'衣著作' => '衣著作',
+'衣著名' => '衣著名',
+'衣著錄' => '衣著录',
+'衣著稱' => '衣著称',
+'衣著者' => '衣著者',
+'衣著述' => '衣著述',
+'表姊' => '表姐',
+'裝著' => '装着',
+'裝著書' => '装著书',
+'裝著作' => '装著作',
+'裝著名' => '装著名',
+'裝著錄' => '装著录',
+'裝著稱' => '装著称',
+'裝著者' => '装著者',
+'裝著述' => '装著述',
+'裹著' => '裹着',
+'裹著書' => '裹著书',
+'裹著作' => '裹著作',
+'裹著名' => '裹著名',
+'裹著錄' => '裹著录',
+'裹著稱' => '裹著称',
+'裹著者' => '裹著者',
+'裹著述' => '裹著述',
+'要帳' => '要账',
+'覆著' => '覆着',
+'見著' => '见着',
+'見著書' => '见著书',
+'見著作' => '见著作',
+'見著名' => '见著名',
+'見著錄' => '见著录',
+'見著稱' => '见著称',
+'見著者' => '见著者',
+'見著述' => '见著述',
+'占士邦' => '詹姆斯·邦德',
+'警戒著' => '警戒着',
+'計畫' => '计划',
+'電腦程式' => '计算机程序',
+'認帳' => '认账',
+'記著' => '记着',
+'記著書' => '记著书',
+'記著作' => '记著作',
+'記著名' => '记著名',
+'記著錄' => '记著录',
+'記著稱' => '记著称',
+'記著者' => '记著者',
+'記著述' => '记著述',
+'記帳' => '记账',
'辭彙' => '词汇',
'片語' => '词组',
-'調制解調器' => '调制解调器',
+'試著' => '试着',
+'試著書' => '试著书',
+'試著作' => '试著作',
+'試著名' => '试著名',
+'試著錄' => '试著录',
+'試著稱' => '试著称',
+'試著者' => '试著者',
+'試著述' => '试著述',
+'語著' => '语着',
+'語著書' => '语著书',
+'語著作' => '语著作',
+'語著名' => '语著名',
+'語著錄' => '语著录',
+'語著稱' => '语著称',
+'語著者' => '语著者',
+'語著述' => '语著述',
+'說著' => '说着',
+'說著作' => '说著作',
+'說著稱' => '说著称',
+'說著者' => '说著者',
+'說著述' => '说著述',
+'諾曼第' => '诺曼底',
'數據機' => '调制解调器',
-'貝南' => '贝宁',
+'象徵著' => '象征着',
+'象徵著名' => '象征著名',
+'豫著' => '豫着',
+'豫著書' => '豫著书',
+'豫著作' => '豫著作',
+'豫著名' => '豫著名',
+'豫著錄' => '豫著录',
+'豫著稱' => '豫著称',
+'豫著者' => '豫著者',
+'豫著述' => '豫著述',
+'碧咸' => '贝克汉姆',
+'貝爾格勒' => '贝尔格莱德',
+'貞著' => '贞着',
+'貞著書' => '贞著书',
+'貞著作' => '贞著作',
+'貞著名' => '贞著名',
+'貞著錄' => '贞著录',
+'貞著稱' => '贞著称',
+'貞著者' => '贞著者',
+'貞著述' => '贞著述',
+'負著' => '负着',
+'帳上' => '账上',
+'帳冊' => '账册',
+'帳務' => '账务',
+'帳單' => '账单',
+'帳號' => '账号',
+'帳外' => '账外',
+'帳戶' => '账户',
+'帳房' => '账房',
+'帳本' => '账本',
+'帳款' => '账款',
+'帳目' => '账目',
+'帳簿' => '账簿',
+'帳面' => '账面',
+'賒帳' => '赊账',
+'賴帳' => '赖账',
'尚比亞' => '赞比亚',
-'绑紧跳' => '蹦极跳',
+'西臺人' => '赫梯人',
+'西臺國' => '赫梯国',
+'西臺帝' => '赫梯帝',
+'西臺文' => '赫梯文',
+'西臺族' => '赫梯族',
+'西臺王' => '赫梯王',
+'西臺語' => '赫梯语',
+'赫魯雪夫' => '赫鲁晓夫',
+'走為上著' => '走为上着',
+'走著' => '走着',
+'走著書' => '走著书',
+'走著作' => '走著作',
+'走著名' => '走著名',
+'走著錄' => '走著录',
+'走著稱' => '走著称',
+'走著者' => '走著者',
+'走著述' => '走著述',
+'趕著' => '赶着',
+'趕著書' => '赶著书',
+'趕著作' => '赶著作',
+'趕著名' => '赶著名',
+'趕著錄' => '赶著录',
+'趕著稱' => '赶著称',
+'趕著者' => '赶著者',
+'趕著述' => '赶著述',
+'超連結' => '超链接',
+'趴著' => '趴着',
+'趴著書' => '趴著书',
+'趴著作' => '趴著作',
+'趴著名' => '趴著名',
+'趴著錄' => '趴著录',
+'趴著稱' => '趴著称',
+'趴著者' => '趴著者',
+'趴著述' => '趴著述',
+'躍著' => '跃着',
+'躍著書' => '跃著书',
+'躍著作' => '跃著作',
+'躍著名' => '跃著名',
+'躍著錄' => '跃著录',
+'躍著稱' => '跃著称',
+'躍著者' => '跃著者',
+'躍著述' => '跃著述',
+'跑著' => '跑着',
+'跑著書' => '跑著书',
+'跑著作' => '跑著作',
+'跑著名' => '跑著名',
+'跑著錄' => '跑著录',
+'跑著稱' => '跑著称',
+'跑著者' => '跑著者',
+'跑著述' => '跑著述',
+'跟著' => '跟着',
+'跟著書' => '跟著书',
+'跟著作' => '跟著作',
+'跟著名' => '跟著名',
+'跟著錄' => '跟著录',
+'跟著稱' => '跟著称',
+'跟著者' => '跟著者',
+'跟著述' => '跟著述',
+'跪著' => '跪着',
+'跪著書' => '跪著书',
+'跪著作' => '跪著作',
+'跪著名' => '跪著名',
+'跪著錄' => '跪著录',
+'跪著稱' => '跪著称',
+'跪著者' => '跪著者',
+'跪著述' => '跪著述',
+'跳著' => '跳着',
+'跳著書' => '跳著书',
+'跳著作' => '跳著作',
+'跳著名' => '跳著名',
+'跳著錄' => '跳著录',
+'跳著稱' => '跳著称',
+'跳著者' => '跳著者',
+'跳著述' => '跳著述',
+'踏著' => '踏着',
+'踏著書' => '踏著书',
+'踏著作' => '踏著作',
+'踏著名' => '踏著名',
+'踏著錄' => '踏著录',
+'踏著稱' => '踏著称',
+'踏著者' => '踏著者',
+'踏著述' => '踏著述',
+'踩著' => '踩着',
+'踩著書' => '踩著书',
+'踩著作' => '踩著作',
+'踩著名' => '踩著名',
+'踩著錄' => '踩著录',
+'踩著稱' => '踩著称',
+'踩著者' => '踩著者',
+'踩著述' => '踩著述',
'笨豬跳' => '蹦极跳',
+'绑紧跳' => '蹦极跳',
+'身分' => '身份',
+'身著' => '身着',
+'身著書' => '身著书',
+'身著作' => '身著作',
+'身著名' => '身著名',
+'身著錄' => '身著录',
+'身著稱' => '身著称',
+'身著者' => '身著者',
+'身著述' => '身著述',
+'躺著' => '躺着',
+'躺著書' => '躺著书',
+'躺著作' => '躺著作',
+'躺著名' => '躺著名',
+'躺著錄' => '躺著录',
+'躺著稱' => '躺著称',
+'躺著者' => '躺著者',
+'躺著述' => '躺著述',
+'轉著' => '转着',
+'轉著書' => '转著书',
+'轉著作' => '转著作',
+'轉著名' => '转著名',
+'轉著錄' => '转著录',
+'轉著稱' => '转著称',
+'轉著者' => '转著者',
+'轉著述' => '转著述',
+'轉帳' => '转账',
'軟體' => '软件',
-'軟件' => '软件',
+'軟體動物' => '软体动物',
+'軟體家具' => '软体家具',
'軟碟機' => '软驱',
-'米高奧雲' => '迈克尔·欧文',
-'舒麥加' => '迈克尔·舒马赫',
-'遠程控制' => '远程控制',
-'远程控制' => '远程控制',
+'載著' => '载着',
+'載著書' => '载著书',
+'載著作' => '载著作',
+'載著名' => '载著名',
+'載著錄' => '载著录',
+'載著稱' => '载著称',
+'載著者' => '载著者',
+'載著述' => '载著述',
+'達·文西' => '达·芬奇',
+'達著' => '达着',
+'三蘭港' => '达累斯萨拉姆',
+'達文西' => '达芬奇',
+'達著書' => '达著书',
+'達著作' => '达著作',
+'達著名' => '达著名',
+'達著錄' => '达著录',
+'達著稱' => '达著称',
+'達著者' => '达著者',
+'達著述' => '达著述',
+'過份' => '过分',
+'過著' => '过着',
+'過著作' => '过著作',
+'過著名' => '过著名',
+'過著錄' => '过著录',
+'過著稱' => '过著称',
+'過著者' => '过著者',
+'過著述' => '过著述',
+'米高·奧雲' => '迈克尔·欧文',
+'還帳' => '还账',
+'演化論' => '进化论',
+'進帳' => '进账',
+'遠著' => '远着',
+'遠著書' => '远著书',
+'遠著作' => '远著作',
+'遠著名' => '远著名',
+'遠著錄' => '远著录',
+'遠著稱' => '远著称',
+'遠著者' => '远著者',
+'遠著述' => '远著述',
+'連著' => '连着',
+'連結他' => '连结他',
+'連著書' => '连著书',
+'連著作' => '连著作',
+'連著名' => '连著名',
+'連著錄' => '连著录',
+'連著稱' => '连著称',
+'連著者' => '连著者',
+'連著述' => '连著述',
+'杜拜' => '迪拜',
+'迫著' => '迫着',
+'疊代' => '迭代',
+'追著' => '追着',
+'追著書' => '追著书',
+'追著作' => '追著作',
+'追著名' => '追著名',
+'追著錄' => '追著录',
+'追著稱' => '追著称',
+'追著者' => '追著者',
+'追著述' => '追著述',
+'逆著' => '逆着',
+'逆著書' => '逆著书',
+'逆著作' => '逆著作',
+'逆著名' => '逆著名',
+'逆著錄' => '逆著录',
+'逆著稱' => '逆著称',
+'逆著者' => '逆著者',
+'逆著述' => '逆著述',
+'逼著' => '逼着',
+'逼著書' => '逼著书',
+'逼著作' => '逼著作',
+'逼著名' => '逼著名',
+'逼著錄' => '逼著录',
+'逼著稱' => '逼著称',
+'逼著者' => '逼著者',
+'逼著述' => '逼著述',
+'遇著' => '遇着',
+'遇著書' => '遇著书',
+'遇著作' => '遇著作',
+'遇著名' => '遇著名',
+'遇著錄' => '遇著录',
+'遇著稱' => '遇著称',
+'遇著者' => '遇著者',
+'遇著述' => '遇著述',
+'部份' => '部分',
+'配合著' => '配合着',
+'配合著名' => '配合著名',
+'配著' => '配着',
+'配著書' => '配著书',
+'配著作' => '配著作',
+'配著名' => '配著名',
+'配著錄' => '配著录',
+'配著稱' => '配著称',
+'配著者' => '配著者',
+'配著述' => '配著述',
+'釀著' => '酿着',
+'釀著書' => '酿著书',
+'釀著作' => '酿著作',
+'釀著名' => '酿著名',
+'釀著錄' => '酿著录',
+'釀著稱' => '酿著称',
+'釀著者' => '酿著者',
+'釀著述' => '酿著述',
+'黎克特制' => '里氏',
+'芮氏0' => '里氏0',
+'芮氏1' => '里氏1',
+'芮氏2' => '里氏2',
+'芮氏3' => '里氏3',
+'芮氏4' => '里氏4',
+'芮氏5' => '里氏5',
+'芮氏6' => '里氏6',
+'芮氏7' => '里氏7',
+'芮氏8' => '里氏8',
+'芮氏9' => '里氏9',
+'芮氏地震規模' => '里氏地震规模',
+'芮氏規模' => '里氏震级',
+'金夏沙' => '金沙萨',
+'鈽' => '钚',
+'鍅' => '钫',
+'狄托' => '铁托',
+'鋪著' => '铺着',
+'鋪著書' => '铺著书',
+'鋪著作' => '铺著作',
+'鋪著名' => '铺著名',
+'鋪著錄' => '铺著录',
+'鋪著稱' => '铺著称',
+'鋪著者' => '铺著者',
+'鋪著述' => '铺著述',
+'銷帳' => '销账',
+'鉲' => '锎',
+'鎝' => '锝',
+'鉳' => '锫',
+'鑀' => '锿',
+'鋂' => '镅',
+'錼' => '镎',
+'孟德爾頌' => '门德尔松',
+'孟德爾遜' => '门德尔松',
+'快閃記憶體' => '闪存',
+'閉著' => '闭着',
+'閉著書' => '闭著书',
+'閉著作' => '闭著作',
+'閉著名' => '闭著名',
+'閉著錄' => '闭著录',
+'閉著稱' => '闭著称',
+'閉著者' => '闭著者',
+'閉著述' => '闭著述',
+'閒著' => '闲着',
+'閑著' => '闲着',
+'閑著書' => '闲著书',
+'閑著作' => '闲著作',
+'閑著名' => '闲著名',
+'閑著錄' => '闲著录',
+'閑著稱' => '闲著称',
+'閑著者' => '闲著者',
+'閑著述' => '闲著述',
+'悶著' => '闷着',
+'鬧著' => '闹着',
+'聞著' => '闻着',
'亞塞拜然' => '阿塞拜疆',
+'阿布達比' => '阿布扎比',
'阿拉伯聯合大公國' => '阿拉伯联合酋长国',
-'散钱' => '零钱',
+'亞斯文' => '阿斯旺',
+'附著' => '附着',
+'附著書' => '附著书',
+'附著作' => '附著作',
+'附著名' => '附著名',
+'附著錄' => '附著录',
+'附著稱' => '附著称',
+'附著者' => '附著者',
+'附著述' => '附著述',
+'陋著' => '陋着',
+'陋著書' => '陋著书',
+'陋著作' => '陋著作',
+'陋著名' => '陋著名',
+'陋著錄' => '陋著录',
+'陋著稱' => '陋著称',
+'陋著者' => '陋著者',
+'陋著述' => '陋著述',
+'陪著' => '陪着',
+'陪著書' => '陪著书',
+'陪著作' => '陪著作',
+'陪著名' => '陪著名',
+'陪著錄' => '陪著录',
+'陪著稱' => '陪著称',
+'陪著者' => '陪著者',
+'陪著述' => '陪著述',
+'隨著' => '随着',
+'隨著書' => '随著书',
+'隨著作' => '随著作',
+'隨著名' => '随著名',
+'隨著錄' => '随著录',
+'隨著稱' => '随著称',
+'隨著者' => '随著者',
+'隨著述' => '随著述',
+'私隱' => '隐私',
+'隔著' => '隔着',
+'隔著書' => '隔著书',
+'隔著作' => '隔著作',
+'隔著名' => '隔著名',
+'隔著錄' => '隔著录',
+'隔著稱' => '隔著称',
+'隔著者' => '隔著者',
+'隔著述' => '隔著述',
+'耶加達' => '雅加达',
+'雅爾達' => '雅尔塔',
+'雅著' => '雅着',
+'雅著書' => '雅著书',
+'雅著作' => '雅著作',
+'雅著名' => '雅著名',
+'雅著錄' => '雅著录',
+'雅著稱' => '雅著称',
+'雅著者' => '雅著者',
+'雅著述' => '雅著述',
+'山葉' => '雅马哈',
+'雷諾瓦' => '雷诺阿',
+'荷姆茲' => '霍尔木兹',
+'非份' => '非分',
+'靠著' => '靠着',
+'靠著作' => '靠著作',
+'靠著名' => '靠著名',
+'靠著錄' => '靠著录',
+'靠著稱' => '靠著称',
+'靠著者' => '靠著者',
+'靠著述' => '靠著述',
'南韓' => '韩国',
+'音樂錄影帶' => '音乐录影带',
+'頂著' => '顶着',
+'頂著書' => '顶著书',
+'頂著作' => '顶著作',
+'頂著名' => '顶著名',
+'頂著錄' => '顶著录',
+'頂著稱' => '顶著称',
+'頂著者' => '顶著者',
+'頂著述' => '顶著述',
+'順著' => '顺着',
+'順著書' => '顺著书',
+'順著作' => '顺著作',
+'順著名' => '顺著名',
+'順著錄' => '顺著录',
+'順著稱' => '顺著称',
+'順著者' => '顺著者',
+'順著述' => '顺著述',
+'領著' => '领着',
+'領著書' => '领著书',
+'領著作' => '领著作',
+'領著名' => '领著名',
+'領著錄' => '领著录',
+'領著稱' => '领著称',
+'領著者' => '领著者',
+'領著述' => '领著述',
+'飄著' => '飘着',
+'飃著' => '飘着',
+'飄著書' => '飘著书',
+'飄著作' => '飘著作',
+'飄著名' => '飘著名',
+'飄著錄' => '飘著录',
+'飄著稱' => '飘著称',
+'飄著者' => '飘著者',
+'飄著述' => '飘著述',
+'行政總裁' => '首席执行官',
+'執行長、' => '首席执行官、',
+'執行長。' => '首席执行官。',
+'執行長,' => '首席执行官,',
+'財務長、' => '首席财务官、',
+'財務長。' => '首席财务官。',
+'財務長,' => '首席财务官,',
+'營運長、' => '首席运营官、',
+'營運長。' => '首席运营官。',
+'營運長,' => '首席运营官,',
'馬爾地夫' => '马尔代夫',
-'沙芬' => '马拉特·萨芬',
+'萌島' => '马恩岛',
+'馬拉威' => '马拉维',
+'馬斯垂克' => '马斯特里赫特',
'馬爾他' => '马耳他',
-'萬事得' => '马自达',
+'麻薩諸塞' => '马萨诸塞',
'馬利共和國' => '马里共和国',
-'預設' => '默认',
+'駛著' => '驶着',
+'駕著' => '驾着',
+'駕著書' => '驾著书',
+'駕著作' => '驾著作',
+'駕著名' => '驾著名',
+'駕著錄' => '驾著录',
+'駕著稱' => '驾著称',
+'駕著者' => '驾著者',
+'駕著述' => '驾著述',
+'罵著' => '骂着',
+'罵著書' => '骂著书',
+'罵著作' => '骂著作',
+'罵著名' => '骂著名',
+'罵著錄' => '骂著录',
+'罵著稱' => '骂著称',
+'罵著者' => '骂著者',
+'罵著述' => '骂著述',
+'騎著' => '骑着',
+'騎著書' => '骑著书',
+'騎著作' => '骑著作',
+'騎著名' => '骑著名',
+'騎著錄' => '骑著录',
+'騎著稱' => '骑著称',
+'騎著者' => '骑著者',
+'騎著述' => '骑著述',
+'騙著' => '骗着',
+'騙著書' => '骗著书',
+'騙著作' => '骗著作',
+'騙著名' => '骗著名',
+'騙著錄' => '骗著录',
+'騙著稱' => '骗著称',
+'騙著者' => '骗著者',
+'騙著述' => '骗著述',
+'尖峰時段' => '高峰时段',
+'尖峰時間' => '高峰时间',
+'高畫質' => '高清',
+'高著' => '高着',
+'高著書' => '高著书',
+'高著作' => '高著作',
+'高著名' => '高著名',
+'高著錄' => '高著录',
+'高著稱' => '高著称',
+'高著者' => '高著者',
+'高著述' => '高著述',
+'髭著' => '髭着',
+'髭著書' => '髭著书',
+'髭著作' => '髭著作',
+'髭著名' => '髭著名',
+'髭著錄' => '髭著录',
+'髭著稱' => '髭著称',
+'髭著者' => '髭著者',
+'髭著述' => '髭著述',
+'咪高峰' => '麦克风',
+'黏著' => '黏着',
+'黏著書' => '黏著书',
+'黏著作' => '黏著作',
+'黏著名' => '黏著名',
+'黏著錄' => '黏著录',
+'黏著稱' => '黏著称',
+'黏著者' => '黏著者',
+'黏著述' => '黏著述',
+'蒙特內哥羅' => '黑山',
'滑鼠' => '鼠标',
);
-
-$zh2SG = array(
-'『' => '‘',
-'』' => '’',
-'「' => '“',
-'」' => '”',
-'住房' => '住屋',
-'凉菜' => '冷菜',
-'冷盤' => '冷菜',
-'民乐' => '华乐',
-'夜校' => '夜学',
-'房价' => '屋价',
-'即食麵' => '快速面',
-'速食麵' => '快速面',
-'泡麵' => '快速面',
-'方便面' => '快速面',
-'零钱' => '散钱',
-'散紙' => '散钱',
-'榴莲' => '榴梿',
-'榴蓮' => '榴梿',
-'笨豬跳' => '绑紧跳',
-'蹦极跳' => '绑紧跳',
-'笑星' => '谐星',
-);
diff --git a/includes/actions/Action.php b/includes/actions/Action.php
index 8d11d901..bb6a4d5d 100644
--- a/includes/actions/Action.php
+++ b/includes/actions/Action.php
@@ -132,6 +132,8 @@ abstract class Action {
if ( $actionName === 'historysubmit' ) {
if ( $request->getBool( 'revisiondelete' ) ) {
$actionName = 'revisiondelete';
+ } elseif ( $request->getBool( 'editchangetags' ) ) {
+ $actionName = 'editchangetags';
} else {
$actionName = 'view';
}
@@ -375,6 +377,28 @@ abstract class Action {
}
/**
+ * Adds help link with an icon via page indicators.
+ * Link target can be overridden by a local message containing a wikilink:
+ * the message key is: lowercase action name + '-helppage'.
+ * @param string $to Target MediaWiki.org page title or encoded URL.
+ * @param bool $overrideBaseUrl Whether $url is a full URL, to avoid MW.o.
+ * @since 1.25
+ */
+ public function addHelpLink( $to, $overrideBaseUrl = false ) {
+ global $wgContLang;
+ $msg = wfMessage( $wgContLang->lc(
+ Action::getActionName( $this->getContext() )
+ ) . '-helppage' );
+
+ if ( !$msg->isDisabled() ) {
+ $helpUrl = Skin::makeUrl( $msg->plain() );
+ $this->getOutput()->addHelpLink( $helpUrl, true );
+ } else {
+ $this->getOutput()->addHelpLink( $to, $overrideBaseUrl );
+ }
+ }
+
+ /**
* The main action entry point. Do all output for display and send it to the context
* output. Do not use globals $wgOut, $wgRequest, etc, in implementations; use
* $this->getOutput(), etc.
diff --git a/includes/actions/CreditsAction.php b/includes/actions/CreditsAction.php
index e064aab4..c19e8fa3 100644
--- a/includes/actions/CreditsAction.php
+++ b/includes/actions/CreditsAction.php
@@ -42,7 +42,6 @@ class CreditsAction extends FormlessAction {
* @return string HTML
*/
public function onView() {
- wfProfileIn( __METHOD__ );
if ( $this->page->getID() == 0 ) {
$s = $this->msg( 'nocredits' )->parse();
@@ -50,8 +49,6 @@ class CreditsAction extends FormlessAction {
$s = $this->getCredits( -1 );
}
- wfProfileOut( __METHOD__ );
-
return Html::rawElement( 'div', array( 'id' => 'mw-credits' ), $s );
}
@@ -63,7 +60,6 @@ class CreditsAction extends FormlessAction {
* @return string Html
*/
public function getCredits( $cnt, $showIfMax = true ) {
- wfProfileIn( __METHOD__ );
$s = '';
if ( $cnt != 0 ) {
@@ -73,8 +69,6 @@ class CreditsAction extends FormlessAction {
}
}
- wfProfileOut( __METHOD__ );
-
return $s;
}
diff --git a/includes/actions/DeleteAction.php b/includes/actions/DeleteAction.php
index 12f0dff0..be21a6f1 100644
--- a/includes/actions/DeleteAction.php
+++ b/includes/actions/DeleteAction.php
@@ -41,13 +41,14 @@ class DeleteAction extends FormlessAction {
}
public function show() {
+ $out = $this->getOutput();
if ( $this->getContext()->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
- $out = $this->getOutput();
$out->addModuleStyles( array(
'mediawiki.ui.input',
'mediawiki.ui.checkbox',
) );
}
+ $this->addHelpLink( 'Help:Sysop deleting and undeleting' );
$this->page->delete();
}
}
diff --git a/includes/actions/EditAction.php b/includes/actions/EditAction.php
index 88767244..6c8440ac 100644
--- a/includes/actions/EditAction.php
+++ b/includes/actions/EditAction.php
@@ -51,7 +51,7 @@ class EditAction extends FormlessAction {
$page = $this->page;
$user = $this->getUser();
- if ( wfRunHooks( 'CustomEditor', array( $page, $user ) ) ) {
+ if ( Hooks::run( 'CustomEditor', array( $page, $user ) ) ) {
$editor = new EditPage( $page );
$editor->edit();
}
diff --git a/includes/actions/FormAction.php b/includes/actions/FormAction.php
index 4c9e85dd..26f43cb0 100644
--- a/includes/actions/FormAction.php
+++ b/includes/actions/FormAction.php
@@ -63,7 +63,7 @@ abstract class FormAction extends Action {
$this->fields = $this->getFormFields();
// Give hooks a chance to alter the form, adding extra fields or text etc
- wfRunHooks( 'ActionModifyFormFields', array( $this->getName(), &$this->fields, $this->page ) );
+ Hooks::run( 'ActionModifyFormFields', array( $this->getName(), &$this->fields, $this->page ) );
$form = new HTMLForm( $this->fields, $this->getContext(), $this->getName() );
$form->setSubmitCallback( array( $this, 'onSubmit' ) );
@@ -81,7 +81,7 @@ abstract class FormAction extends Action {
$this->alterForm( $form );
// Give hooks a chance to alter the form, adding extra fields or text etc
- wfRunHooks( 'ActionBeforeFormDisplay', array( $this->getName(), &$form, $this->page ) );
+ Hooks::run( 'ActionBeforeFormDisplay', array( $this->getName(), &$form, $this->page ) );
return $form;
}
diff --git a/includes/actions/HistoryAction.php b/includes/actions/HistoryAction.php
index 8522e560..dcd77415 100644
--- a/includes/actions/HistoryAction.php
+++ b/includes/actions/HistoryAction.php
@@ -67,8 +67,7 @@ class HistoryAction extends FormlessAction {
}
/**
- * Get the Article object we are working on.
- * @return Page
+ * @return WikiPage|Article|ImagePage|CategoryPage|Page The Article object we are working on.
*/
public function getArticle() {
return $this->page;
@@ -102,8 +101,6 @@ class HistoryAction extends FormlessAction {
return; // Client cache fresh and headers sent, nothing more to do.
}
- wfProfileIn( __METHOD__ );
-
$this->preCacheMessages();
$config = $this->context->getConfig();
@@ -131,7 +128,6 @@ class HistoryAction extends FormlessAction {
$feedType = $request->getVal( 'feed' );
if ( $feedType ) {
$this->feed( $feedType );
- wfProfileOut( __METHOD__ );
return;
}
@@ -151,7 +147,6 @@ class HistoryAction extends FormlessAction {
'msgKey' => array( 'moveddeleted-notice' )
)
);
- wfProfileOut( __METHOD__ );
return;
}
@@ -196,11 +191,15 @@ class HistoryAction extends FormlessAction {
) . '&#160;' .
( $tagSelector ? ( implode( '&#160;', $tagSelector ) . '&#160;' ) : '' ) .
$checkDeleted .
- Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) . "\n" .
+ Html::submitButton(
+ $this->msg( 'allpagessubmit' )->text(),
+ array(),
+ array( 'mw-ui-progressive' )
+ ) . "\n" .
'</fieldset></form>'
);
- wfRunHooks( 'PageHistoryBeforeList', array( &$this->page, $this->getContext() ) );
+ Hooks::run( 'PageHistoryBeforeList', array( &$this->page, $this->getContext() ) );
// Create and output the list.
$pager = new HistoryPager( $this, $year, $month, $tagFilter, $conds );
@@ -211,7 +210,6 @@ class HistoryAction extends FormlessAction {
);
$out->preventClickjacking( $pager->getPreventClickjacking() );
- wfProfileOut( __METHOD__ );
}
/**
@@ -416,7 +414,7 @@ class HistoryPager extends ReverseChronologicalPager {
$queryInfo['options'],
$this->tagFilter
);
- wfRunHooks( 'PageHistoryPager::getQueryInfo', array( &$this, &$queryInfo ) );
+ Hooks::run( 'PageHistoryPager::getQueryInfo', array( &$this, &$queryInfo ) );
return $queryInfo;
}
@@ -481,20 +479,28 @@ class HistoryPager extends ReverseChronologicalPager {
'id' => 'mw-history-compare' ) ) . "\n";
$s .= Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n";
$s .= Html::hidden( 'action', 'historysubmit' ) . "\n";
+ $s .= Html::hidden( 'type', 'revision' ) . "\n";
// Button container stored in $this->buttons for re-use in getEndBody()
$this->buttons = '<div>';
$className = 'historysubmit mw-history-compareselectedversions-button';
- if ( $this->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
- $className .= ' mw-ui-button mw-ui-constructive';
- }
+ $attrs = array( 'class' => $className )
+ + Linker::tooltipAndAccesskeyAttribs( 'compareselectedversions' );
$this->buttons .= $this->submitButton( $this->msg( 'compareselectedversions' )->text(),
- array( 'class' => $className )
- + Linker::tooltipAndAccesskeyAttribs( 'compareselectedversions' )
+ $attrs
) . "\n";
- if ( $this->getUser()->isAllowed( 'deleterevision' ) ) {
- $this->buttons .= $this->getRevisionButton( 'revisiondelete', 'showhideselectedversions' );
+ $user = $this->getUser();
+ $actionButtons = '';
+ if ( $user->isAllowed( 'deleterevision' ) ) {
+ $actionButtons .= $this->getRevisionButton( 'revisiondelete', 'showhideselectedversions' );
+ }
+ if ( ChangeTags::showTagEditingUI( $user ) ) {
+ $actionButtons .= $this->getRevisionButton( 'editchangetags', 'history-edit-tags' );
+ }
+ if ( $actionButtons ) {
+ $this->buttons .= Xml::tags( 'div', array( 'class' =>
+ 'mw-history-revisionactions' ), $actionButtons );
}
$this->buttons .= '</div>';
@@ -561,7 +567,7 @@ class HistoryPager extends ReverseChronologicalPager {
function submitButton( $message, $attributes = array() ) {
# Disable submit button if history has 1 revision only
if ( $this->getNumRows() > 1 ) {
- return Xml::submitButton( $message, $attributes );
+ return Html::submitButton( $message, $attributes );
} else {
return '';
}
@@ -610,11 +616,15 @@ class HistoryPager extends ReverseChronologicalPager {
$del = '';
$user = $this->getUser();
- // Show checkboxes for each revision
- if ( $user->isAllowed( 'deleterevision' ) ) {
+ $canRevDelete = $user->isAllowed( 'deleterevision' );
+ $showTagEditUI = ChangeTags::showTagEditingUI( $user );
+ // Show checkboxes for each revision, to allow for revision deletion and
+ // change tags
+ if ( $canRevDelete || $showTagEditUI ) {
$this->preventClickjacking();
- // If revision was hidden from sysops, disable the checkbox
- if ( !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
+ // If revision was hidden from sysops and we don't need the checkbox
+ // for anything else, disable it
+ if ( !$showTagEditUI && !$rev->userCan( Revision::DELETED_RESTRICTED, $user ) ) {
$del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
// Otherwise, enable the checkbox...
} else {
@@ -708,7 +718,7 @@ class HistoryPager extends ReverseChronologicalPager {
}
}
// Allow extension to add their own links here
- wfRunHooks( 'HistoryRevisionTools', array( $rev, &$tools ) );
+ Hooks::run( 'HistoryRevisionTools', array( $rev, &$tools ) );
if ( $tools ) {
$s2 .= ' ' . $this->msg( 'parentheses' )->rawParams( $lang->pipeList( $tools ) )->escaped();
@@ -726,7 +736,7 @@ class HistoryPager extends ReverseChronologicalPager {
$s .= ' <span class="mw-changeslist-separator">. .</span> ' . $s2;
}
- wfRunHooks( 'PageHistoryLineEnding', array( $this, &$row, &$s, &$classes ) );
+ Hooks::run( 'PageHistoryLineEnding', array( $this, &$row, &$s, &$classes ) );
$attribs = array();
if ( $classes ) {
@@ -899,4 +909,5 @@ class HistoryPager extends ReverseChronologicalPager {
function getPreventClickjacking() {
return $this->preventClickjacking;
}
+
}
diff --git a/includes/actions/InfoAction.php b/includes/actions/InfoAction.php
index f932a405..b5a73910 100644
--- a/includes/actions/InfoAction.php
+++ b/includes/actions/InfoAction.php
@@ -65,8 +65,8 @@ class InfoAction extends FormlessAction {
*/
public static function invalidateCache( Title $title ) {
global $wgMemc;
- // Clear page info.
- $revision = WikiPage::factory( $title )->getRevision();
+
+ $revision = Revision::newFromTitle( $title, 0, Revision::READ_LATEST );
if ( $revision !== null ) {
$key = wfMemcKey( 'infoaction', sha1( $title->getPrefixedText() ), $revision->getId() );
$wgMemc->delete( $key );
@@ -114,7 +114,7 @@ class InfoAction extends FormlessAction {
$pageInfo = $this->pageInfo();
// Allow extensions to add additional information
- wfRunHooks( 'InfoAction', array( $this->getContext(), &$pageInfo ) );
+ Hooks::run( 'InfoAction', array( $this->getContext(), &$pageInfo ) );
// Render page information
foreach ( $pageInfo as $header => $infoTable ) {
@@ -246,13 +246,13 @@ class InfoAction extends FormlessAction {
$pageInfo['header-basic'][] = array(
$this->msg( 'pageinfo-redirectsto' ),
Linker::link( $this->page->getRedirectTarget() ) .
- $this->msg( 'word-separator' )->text() .
- $this->msg( 'parentheses', Linker::link(
+ $this->msg( 'word-separator' )->escaped() .
+ $this->msg( 'parentheses' )->rawParams( Linker::link(
$this->page->getRedirectTarget(),
$this->msg( 'pageinfo-redirectsto-info' )->escaped(),
array(),
array( 'action' => 'info' )
- ) )->text()
+ ) )->escaped()
);
}
@@ -276,7 +276,9 @@ class InfoAction extends FormlessAction {
// Language in which the page content is (supposed to be) written
$pageLang = $title->getPageLanguage()->getCode();
- if ( $config->get( 'PageLanguageUseDB' ) && $this->getTitle()->userCan( 'pagelang' ) ) {
+ if ( $config->get( 'PageLanguageUseDB' )
+ && $this->getTitle()->userCan( 'pagelang', $this->getUser() )
+ ) {
// Link to Special:PageLanguage with pre-filled page title if user has permissions
$titleObj = SpecialPage::getTitleFor( 'PageLanguage', $title->getPrefixedText() );
$langDisp = Linker::link(
@@ -290,12 +292,12 @@ class InfoAction extends FormlessAction {
$pageInfo['header-basic'][] = array( $langDisp,
Language::fetchLanguageName( $pageLang, $lang->getCode() )
- . ' ' . $this->msg( 'parentheses', $pageLang ) );
+ . ' ' . $this->msg( 'parentheses', $pageLang )->escaped() );
// Content model of the page
$pageInfo['header-basic'][] = array(
$this->msg( 'pageinfo-content-model' ),
- ContentHandler::getLocalizedName( $title->getContentModel() )
+ htmlspecialchars( ContentHandler::getLocalizedName( $title->getContentModel() ) )
);
// Search engine status
@@ -314,13 +316,6 @@ class InfoAction extends FormlessAction {
$this->msg( 'pageinfo-robot-policy' ), $this->msg( "pageinfo-robot-${policy['index']}" )
);
- if ( isset( $pageCounts['views'] ) ) {
- // Number of views
- $pageInfo['header-basic'][] = array(
- $this->msg( 'pageinfo-views' ), $lang->formatNum( $pageCounts['views'] )
- );
- }
-
$unwatchedPageThreshold = $config->get( 'UnwatchedPageThreshold' );
if (
$user->isAllowed( 'unwatchedpages' ) ||
@@ -345,7 +340,11 @@ class InfoAction extends FormlessAction {
$whatLinksHere,
$this->msg( 'pageinfo-redirects-name' )->escaped(),
array(),
- array( 'hidelinks' => 1, 'hidetrans' => 1 )
+ array(
+ 'hidelinks' => 1,
+ 'hidetrans' => 1,
+ 'hideimages' => $title->getNamespace() == NS_FILE
+ )
),
$this->msg( 'pageinfo-redirects-value' )
->numParams( count( $title->getRedirectsHere() ) )
@@ -393,7 +392,7 @@ class InfoAction extends FormlessAction {
// Page protection
$pageInfo['header-restrictions'] = array();
- // Is this page effected by the cascading protection of something which includes it?
+ // Is this page affected by the cascading protection of something which includes it?
if ( $title->isCascadeProtected() ) {
$cascadingFrom = '';
$sources = $title->getCascadeProtectionSources(); // Array deferencing is in PHP 5.4 :(
@@ -484,7 +483,7 @@ class InfoAction extends FormlessAction {
$this->msg( 'pageinfo-firsttime' ),
Linker::linkKnown(
$title,
- $lang->userTimeAndDate( $firstRev->getTimestamp(), $user ),
+ htmlspecialchars( $lang->userTimeAndDate( $firstRev->getTimestamp(), $user ) ),
array(),
array( 'oldid' => $firstRev->getId() )
)
@@ -503,7 +502,7 @@ class InfoAction extends FormlessAction {
$this->msg( 'pageinfo-lasttime' ),
Linker::linkKnown(
$title,
- $lang->userTimeAndDate( $this->page->getTimestamp(), $user ),
+ htmlspecialchars( $lang->userTimeAndDate( $this->page->getTimestamp(), $user ) ),
array(),
array( 'oldid' => $this->page->getLatest() )
)
@@ -637,24 +636,12 @@ class InfoAction extends FormlessAction {
* @return array
*/
protected function pageCounts( Title $title ) {
- wfProfileIn( __METHOD__ );
$id = $title->getArticleID();
$config = $this->context->getConfig();
$dbr = wfGetDB( DB_SLAVE );
$result = array();
- if ( !$config->get( 'DisableCounters' ) ) {
- // Number of views
- $views = (int)$dbr->selectField(
- 'page',
- 'page_counter',
- array( 'page_id' => $id ),
- __METHOD__
- );
- $result['views'] = $views;
- }
-
// Number of page watchers
$watchers = (int)$dbr->selectField(
'watchlist',
@@ -761,8 +748,6 @@ class InfoAction extends FormlessAction {
__METHOD__
);
- wfProfileOut( __METHOD__ );
-
return $result;
}
diff --git a/includes/actions/RawAction.php b/includes/actions/RawAction.php
index d0d956ec..727bed20 100644
--- a/includes/actions/RawAction.php
+++ b/includes/actions/RawAction.php
@@ -117,7 +117,7 @@ class RawAction extends FormlessAction {
$response->header( 'HTTP/1.x 404 Not Found' );
}
- if ( !wfRunHooks( 'RawPageViewBeforeOutput', array( &$this, &$text ) ) ) {
+ if ( !Hooks::run( 'RawPageViewBeforeOutput', array( &$this, &$text ) ) ) {
wfDebug( __METHOD__ . ": RawPageViewBeforeOutput hook broke raw page output.\n" );
}
diff --git a/includes/actions/RevertAction.php b/includes/actions/RevertAction.php
index 6481630e..d0258784 100644
--- a/includes/actions/RevertAction.php
+++ b/includes/actions/RevertAction.php
@@ -144,8 +144,6 @@ class RevertAction extends FormAction {
}
protected function getDescription() {
- $this->getOutput()->addBacklinkSubtitle( $this->getTitle() );
-
- return '';
+ return OutputPage::buildBacklinkSubtitle( $this->getTitle() );
}
}
diff --git a/includes/actions/RevisiondeleteAction.php b/includes/actions/RevisiondeleteAction.php
index b6eeb7b4..dbcb8485 100644
--- a/includes/actions/RevisiondeleteAction.php
+++ b/includes/actions/RevisiondeleteAction.php
@@ -27,8 +27,14 @@
* An action that just pass the request to Special:RevisionDelete
*
* @ingroup Actions
+ * @deprecated since 1.25 This class has been replaced by SpecialPageAction, but
+ * you really shouldn't have been using it outside core in the first place
*/
class RevisiondeleteAction extends FormlessAction {
+ public function __construct( Page $page, IContextSource $context = null ) {
+ wfDeprecated( 'RevisiondeleteAction class', '1.25' );
+ parent::__construct( $page, $context );
+ }
public function getName() {
return 'revisiondelete';
diff --git a/includes/actions/SpecialPageAction.php b/includes/actions/SpecialPageAction.php
new file mode 100644
index 00000000..9b721634
--- /dev/null
+++ b/includes/actions/SpecialPageAction.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ * @file
+ * @ingroup Actions
+ */
+
+/**
+ * An action that just passes the request to the relevant special page
+ *
+ * @ingroup Actions
+ * @since 1.25
+ */
+class SpecialPageAction extends FormlessAction {
+
+ /**
+ * @var array A mapping of action names to special page names.
+ */
+ public static $actionToSpecialPageMapping = array(
+ 'revisiondelete' => 'Revisiondelete',
+ 'editchangetags' => 'EditTags',
+ );
+
+ public function getName() {
+ $request = $this->getRequest();
+ $actionName = $request->getVal( 'action', 'view' );
+ // TODO: Shouldn't need to copy-paste this code from Action::getActionName!
+ if ( $actionName === 'historysubmit' ) {
+ if ( $request->getBool( 'revisiondelete' ) ) {
+ $actionName = 'revisiondelete';
+ } elseif ( $request->getBool( 'editchangetags' ) ) {
+ $actionName = 'editchangetags';
+ }
+ }
+
+ if ( isset( self::$actionToSpecialPageMapping[$actionName] ) ) {
+ return $actionName;
+ }
+ return 'nosuchaction';
+ }
+
+ public function requiresUnblock() {
+ return false;
+ }
+
+ public function getDescription() {
+ return '';
+ }
+
+ public function onView() {
+ return '';
+ }
+
+ public function show() {
+ $action = self::getName();
+ if ( $action === 'nosuchaction' ) {
+ throw new ErrorPageError( $this->msg( 'nosuchaction' ), $this->msg( 'nosuchactiontext' ) );
+ }
+
+ // map actions to (whitelisted) special pages
+ $special = SpecialPageFactory::getPage( self::$actionToSpecialPageMapping[$action] );
+ $special->setContext( $this->getContext() );
+ $special->getContext()->setTitle( $special->getPageTitle() );
+ $special->run( '' );
+ }
+}
diff --git a/includes/actions/UnwatchAction.php b/includes/actions/UnwatchAction.php
index e2e5a1d8..0a8628dd 100644
--- a/includes/actions/UnwatchAction.php
+++ b/includes/actions/UnwatchAction.php
@@ -36,9 +36,7 @@ class UnwatchAction extends WatchAction {
}
public function onSubmit( $data ) {
- wfProfileIn( __METHOD__ );
self::doUnwatch( $this->getTitle(), $this->getUser() );
- wfProfileOut( __METHOD__ );
return true;
}
diff --git a/includes/actions/WatchAction.php b/includes/actions/WatchAction.php
index 8c9a46a5..96473409 100644
--- a/includes/actions/WatchAction.php
+++ b/includes/actions/WatchAction.php
@@ -48,9 +48,7 @@ class WatchAction extends FormAction {
}
public function onSubmit( $data ) {
- wfProfileIn( __METHOD__ );
self::doWatch( $this->getTitle(), $this->getUser() );
- wfProfileOut( __METHOD__ );
return true;
}
@@ -132,10 +130,10 @@ class WatchAction extends FormAction {
$page = WikiPage::factory( $title );
$status = Status::newFatal( 'hookaborted' );
- if ( wfRunHooks( 'WatchArticle', array( &$user, &$page, &$status ) ) ) {
+ if ( Hooks::run( 'WatchArticle', array( &$user, &$page, &$status ) ) ) {
$status = Status::newGood();
$user->addWatch( $title, $checkRights );
- wfRunHooks( 'WatchArticleComplete', array( &$user, &$page ) );
+ Hooks::run( 'WatchArticleComplete', array( &$user, &$page ) );
}
return $status;
@@ -156,10 +154,10 @@ class WatchAction extends FormAction {
$page = WikiPage::factory( $title );
$status = Status::newFatal( 'hookaborted' );
- if ( wfRunHooks( 'UnwatchArticle', array( &$user, &$page, &$status ) ) ) {
+ if ( Hooks::run( 'UnwatchArticle', array( &$user, &$page, &$status ) ) ) {
$status = Status::newGood();
$user->removeWatch( $title );
- wfRunHooks( 'UnwatchArticleComplete', array( &$user, &$page ) );
+ Hooks::run( 'UnwatchArticleComplete', array( &$user, &$page ) );
}
return $status;
diff --git a/includes/api/ApiBase.php b/includes/api/ApiBase.php
index 944e4895..5a1eb995 100644
--- a/includes/api/ApiBase.php
+++ b/includes/api/ApiBase.php
@@ -32,9 +32,6 @@
* Module parameters: Derived classes can define getAllowedParams() to specify
* which parameters to expect, how to parse and validate them.
*
- * Profiling: various methods to allow keeping tabs on various tasks and their
- * time costs
- *
* Self-documentation: code to allow the API to document its own state
*
* @ingroup API
@@ -64,6 +61,30 @@ abstract class ApiBase extends ContextSource {
// Boolean, if MIN/MAX are set, enforce (die) these?
// Only applies if TYPE='integer' Use with extreme caution
const PARAM_RANGE_ENFORCE = 9;
+ /// @since 1.25
+ // Specify an alternative i18n message for this help parameter.
+ // Value is $msg for ApiBase::makeMessage()
+ const PARAM_HELP_MSG = 10;
+ /// @since 1.25
+ // Specify additional i18n messages to append to the normal message. Value
+ // is an array of $msg for ApiBase::makeMessage()
+ const PARAM_HELP_MSG_APPEND = 11;
+ /// @since 1.25
+ // Specify additional information tags for the parameter. Value is an array
+ // of arrays, with the first member being the 'tag' for the info and the
+ // remaining members being the values. In the help, this is formatted using
+ // apihelp-{$path}-paraminfo-{$tag}, which is passed $1 = count, $2 =
+ // comma-joined list of values, $3 = module prefix.
+ const PARAM_HELP_MSG_INFO = 12;
+ /// @since 1.25
+ // When PARAM_TYPE is an array, this may be an array mapping those values
+ // to page titles which will be linked in the help.
+ const PARAM_VALUE_LINKS = 13;
+ /// @since 1.25
+ // When PARAM_TYPE is an array, this is an array mapping those values to
+ // $msg for ApiBase::makeMessage(). Any value not having a mapping will use
+ // apihelp-{$path}-paramvalue-{$param}-{$value} is used.
+ const PARAM_HELP_MSG_PER_VALUE = 14;
const LIMIT_BIG1 = 500; // Fast query, std user limit
const LIMIT_BIG2 = 5000; // Fast query, bot/sysop limit
@@ -136,6 +157,9 @@ abstract class ApiBase extends ContextSource {
* If the module may only be used with a certain format module,
* it should override this method to return an instance of that formatter.
* A value of null means the default format will be used.
+ * @note Do not use this just because you don't want to support non-json
+ * formats. This should be used only when there is a fundamental
+ * requirement for a specific format.
* @return mixed Instance of a derived class of ApiFormatBase, or null
*/
public function getCustomPrinter() {
@@ -143,27 +167,64 @@ abstract class ApiBase extends ContextSource {
}
/**
- * Returns the description string for this module
- * @return string|array
+ * Returns usage examples for this module.
+ *
+ * Return value has query strings as keys, with values being either strings
+ * (message key), arrays (message key + parameter), or Message objects.
+ *
+ * Do not call this base class implementation when overriding this method.
+ *
+ * @since 1.25
+ * @return array
*/
- protected function getDescription() {
- return false;
- }
+ protected function getExamplesMessages() {
+ // Fall back to old non-localised method
+ $ret = array();
+
+ $examples = $this->getExamples();
+ if ( $examples ) {
+ if ( !is_array( $examples ) ) {
+ $examples = array( $examples );
+ } elseif ( $examples && ( count( $examples ) & 1 ) == 0 &&
+ array_keys( $examples ) === range( 0, count( $examples ) - 1 ) &&
+ !preg_match( '/^\s*api\.php\?/', $examples[0] )
+ ) {
+ // Fix up the ugly "even numbered elements are description, odd
+ // numbered elemts are the link" format (see doc for self::getExamples)
+ $tmp = array();
+ for ( $i = 0; $i < count( $examples ); $i += 2 ) {
+ $tmp[$examples[$i + 1]] = $examples[$i];
+ }
+ $examples = $tmp;
+ }
- /**
- * Returns usage examples for this module. Return false if no examples are available.
- * @return bool|string|array
- */
- protected function getExamples() {
- return false;
+ foreach ( $examples as $k => $v ) {
+ if ( is_numeric( $k ) ) {
+ $qs = $v;
+ $msg = '';
+ } else {
+ $qs = $k;
+ $msg = self::escapeWikiText( $v );
+ if ( is_array( $msg ) ) {
+ $msg = join( " ", $msg );
+ }
+ }
+
+ $qs = preg_replace( '/^\s*api\.php\?/', '', $qs );
+ $ret[$qs] = $this->msg( 'api-help-fallback-example', array( $msg ) );
+ }
+ }
+
+ return $ret;
}
/**
- * @return bool|string|array Returns a false if the module has no help URL,
- * else returns a (array of) string
+ * Return links to more detailed help pages about the module.
+ * @since 1.25, returning boolean false is deprecated
+ * @return string|array
*/
public function getHelpUrls() {
- return false;
+ return array();
}
/**
@@ -176,22 +237,12 @@ abstract class ApiBase extends ContextSource {
* in the overriding methods. Callers of this method can pass zero or
* more OR-ed flags like GET_VALUES_FOR_HELP.
*
- * @return array|bool
+ * @return array
*/
protected function getAllowedParams( /* $flags = 0 */ ) {
// int $flags is not declared because it causes "Strict standards"
// warning. Most derived classes do not implement it.
- return false;
- }
-
- /**
- * Returns an array of parameter descriptions.
- * Don't call this function directly: use getFinalParamDescription() to
- * allow hooks to modify descriptions as needed.
- * @return array|bool False on no parameter descriptions
- */
- protected function getParamDescription() {
- return false;
+ return array();
}
/**
@@ -227,6 +278,25 @@ abstract class ApiBase extends ContextSource {
}
/**
+ * Indicates whether this module is deprecated
+ * @since 1.25
+ * @return bool
+ */
+ public function isDeprecated() {
+ return false;
+ }
+
+ /**
+ * Indicates whether this module is "internal"
+ * Internal API modules are not (yet) intended for 3rd party use and may be unstable.
+ * @since 1.25
+ * @return bool
+ */
+ public function isInternal() {
+ return false;
+ }
+
+ /**
* Returns the token type this module requires in order to execute.
*
* Modules are strongly encouraged to use the core 'csrf' type unless they
@@ -234,11 +304,9 @@ abstract class ApiBase extends ContextSource {
* core types, you must use the ApiQueryTokensRegisterTypes hook to
* register it.
*
- * Returning a non-falsey value here will cause self::getFinalParams() to
- * return a required string 'token' parameter and
- * self::getFinalParamDescription() to ensure there is standardized
- * documentation for it. Also, self::mustBePosted() must return true when
- * tokens are used.
+ * Returning a non-falsey value here will force the addition of an
+ * appropriate 'token' parameter in self::getFinalParams(). Also,
+ * self::mustBePosted() must return true when tokens are used.
*
* In previous versions of MediaWiki, true was a valid return value.
* Returning true will generate errors indicating that the API module needs
@@ -304,6 +372,87 @@ abstract class ApiBase extends ContextSource {
}
/**
+ * Get the parent of this module
+ * @since 1.25
+ * @return ApiBase|null
+ */
+ public function getParent() {
+ return $this->isMain() ? null : $this->getMain();
+ }
+
+ /**
+ * Returns true if the current request breaks the same-origin policy.
+ *
+ * For example, json with callbacks.
+ *
+ * https://en.wikipedia.org/wiki/Same-origin_policy
+ *
+ * @since 1.25
+ * @return bool
+ */
+ public function lacksSameOriginSecurity() {
+ return $this->getMain()->getRequest()->getVal( 'callback' ) !== null;
+ }
+
+ /**
+ * Get the path to this module
+ *
+ * @since 1.25
+ * @return string
+ */
+ public function getModulePath() {
+ if ( $this->isMain() ) {
+ return 'main';
+ } elseif ( $this->getParent()->isMain() ) {
+ return $this->getModuleName();
+ } else {
+ return $this->getParent()->getModulePath() . '+' . $this->getModuleName();
+ }
+ }
+
+ /**
+ * Get a module from its module path
+ *
+ * @since 1.25
+ * @param string $path
+ * @return ApiBase|null
+ * @throws UsageException
+ */
+ public function getModuleFromPath( $path ) {
+ $module = $this->getMain();
+ if ( $path === 'main' ) {
+ return $module;
+ }
+
+ $parts = explode( '+', $path );
+ if ( count( $parts ) === 1 ) {
+ // In case the '+' was typed into URL, it resolves as a space
+ $parts = explode( ' ', $path );
+ }
+
+ $count = count( $parts );
+ for ( $i = 0; $i < $count; $i++ ) {
+ $parent = $module;
+ $manager = $parent->getModuleManager();
+ if ( $manager === null ) {
+ $errorPath = join( '+', array_slice( $parts, 0, $i ) );
+ $this->dieUsage( "The module \"$errorPath\" has no submodules", 'badmodule' );
+ }
+ $module = $manager->getModule( $parts[$i] );
+
+ if ( $module === null ) {
+ $errorPath = $i ? join( '+', array_slice( $parts, 0, $i ) ) : $parent->getModuleName();
+ $this->dieUsage(
+ "The module \"$errorPath\" does not have a submodule \"{$parts[$i]}\"",
+ 'badmodule'
+ );
+ }
+ }
+
+ return $module;
+ }
+
+ /**
* Get the result object
* @return ApiResult
*/
@@ -318,11 +467,17 @@ abstract class ApiBase extends ContextSource {
}
/**
- * Get the result data array (read-only)
- * @return array
+ * Get the error formatter
+ * @return ApiErrorFormatter
*/
- public function getResultData() {
- return $this->getResult()->getData();
+ public function getErrorFormatter() {
+ // Main module has getErrorFormatter() method overridden
+ // Safety - avoid infinite loop:
+ if ( $this->isMain() ) {
+ ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' );
+ }
+
+ return $this->getMain()->getErrorFormatter();
}
/**
@@ -331,76 +486,38 @@ abstract class ApiBase extends ContextSource {
*/
protected function getDB() {
if ( !isset( $this->mSlaveDB ) ) {
- $this->profileDBIn();
$this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' );
- $this->profileDBOut();
}
return $this->mSlaveDB;
}
/**
- * Get final module description, after hooks have had a chance to tweak it as
- * needed.
- *
- * @return array|bool False on no parameters
- */
- public function getFinalDescription() {
- $desc = $this->getDescription();
- wfRunHooks( 'APIGetDescription', array( &$this, &$desc ) );
-
- return $desc;
- }
-
- /**
- * Get final list of parameters, after hooks have had a chance to
- * tweak it as needed.
- *
- * @param int $flags Zero or more flags like GET_VALUES_FOR_HELP
- * @return array|bool False on no parameters
- * @since 1.21 $flags param added
+ * Get the continuation manager
+ * @return ApiContinuationManager|null
*/
- public function getFinalParams( $flags = 0 ) {
- $params = $this->getAllowedParams( $flags );
-
- if ( $this->needsToken() ) {
- $params['token'] = array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true,
- );
+ public function getContinuationManager() {
+ // Main module has getContinuationManager() method overridden
+ // Safety - avoid infinite loop:
+ if ( $this->isMain() ) {
+ ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' );
}
- wfRunHooks( 'APIGetAllowedParams', array( &$this, &$params, $flags ) );
-
- return $params;
+ return $this->getMain()->getContinuationManager();
}
/**
- * Get final parameter descriptions, after hooks have had a chance to tweak it as
- * needed.
- *
- * @return array|bool False on no parameter descriptions
+ * Set the continuation manager
+ * @param ApiContinuationManager|null
*/
- public function getFinalParamDescription() {
- $desc = $this->getParamDescription();
-
- $tokenType = $this->needsToken();
- if ( $tokenType ) {
- if ( !isset( $desc['token'] ) ) {
- $desc['token'] = array();
- } elseif ( !is_array( $desc['token'] ) ) {
- // We ignore a plain-string token, because it's probably an
- // extension that is supplying the string for BC.
- $desc['token'] = array();
- }
- array_unshift( $desc['token'],
- "A '$tokenType' token retrieved from action=query&meta=tokens"
- );
+ public function setContinuationManager( $manager ) {
+ // Main module has setContinuationManager() method overridden
+ // Safety - avoid infinite loop:
+ if ( $this->isMain() ) {
+ ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' );
}
- wfRunHooks( 'APIGetParamDescription', array( &$this, &$desc ) );
-
- return $desc;
+ $this->getMain()->setContinuationManager( $manager );
}
/**@}*/
@@ -782,7 +899,7 @@ abstract class ApiBase extends ContextSource {
$value = $this->getMain()->canApiHighLimits()
? $paramSettings[self::PARAM_MAX2]
: $paramSettings[self::PARAM_MAX];
- $this->getResult()->setParsedLimit( $this->getModuleName(), $value );
+ $this->getResult()->addParsedLimit( $this->getModuleName(), $value );
} else {
$value = intval( $value );
$this->validateLimit(
@@ -974,8 +1091,9 @@ abstract class ApiBase extends ContextSource {
* @param string $token Supplied token
* @param array $params All supplied parameters for the module
* @return bool
+ * @throws MWException
*/
- public final function validateToken( $token, array $params ) {
+ final public function validateToken( $token, array $params ) {
$tokenType = $this->needsToken();
$salts = ApiQueryTokens::getTokenTypeSalts();
if ( !isset( $salts[$tokenType] ) ) {
@@ -1093,6 +1211,55 @@ abstract class ApiBase extends ContextSource {
return $user;
}
+ /**
+ * A subset of wfEscapeWikiText for BC texts
+ *
+ * @since 1.25
+ * @param string|array $v
+ * @return string|array
+ */
+ private static function escapeWikiText( $v ) {
+ if ( is_array( $v ) ) {
+ return array_map( 'self::escapeWikiText', $v );
+ } else {
+ return strtr( $v, array(
+ '__' => '_&#95;', '{' => '&#123;', '}' => '&#125;',
+ '[[Category:' => '[[:Category:',
+ '[[File:' => '[[:File:', '[[Image:' => '[[:Image:',
+ ) );
+ }
+ }
+
+ /**
+ * Create a Message from a string or array
+ *
+ * A string is used as a message key. An array has the message key as the
+ * first value and message parameters as subsequent values.
+ *
+ * @since 1.25
+ * @param string|array|Message $msg
+ * @param IContextSource $context
+ * @param array $params
+ * @return Message|null
+ */
+ public static function makeMessage( $msg, IContextSource $context, array $params = null ) {
+ if ( is_string( $msg ) ) {
+ $msg = wfMessage( $msg );
+ } elseif ( is_array( $msg ) ) {
+ $msg = call_user_func_array( 'wfMessage', $msg );
+ }
+ if ( !$msg instanceof Message ) {
+ return null;
+ }
+
+ $msg->setContext( $context );
+ if ( $params ) {
+ $msg->params( $params );
+ }
+
+ return $msg;
+ }
+
/**@}*/
/************************************************************************//**
@@ -1108,28 +1275,8 @@ abstract class ApiBase extends ContextSource {
* @param string $warning Warning message
*/
public function setWarning( $warning ) {
- $result = $this->getResult();
- $data = $result->getData();
- $moduleName = $this->getModuleName();
- if ( isset( $data['warnings'][$moduleName] ) ) {
- // Don't add duplicate warnings
- $oldWarning = $data['warnings'][$moduleName]['*'];
- $warnPos = strpos( $oldWarning, $warning );
- // If $warning was found in $oldWarning, check if it starts at 0 or after "\n"
- if ( $warnPos !== false && ( $warnPos === 0 || $oldWarning[$warnPos - 1] === "\n" ) ) {
- // Check if $warning is followed by "\n" or the end of the $oldWarning
- $warnPos += strlen( $warning );
- if ( strlen( $oldWarning ) <= $warnPos || $oldWarning[$warnPos] === "\n" ) {
- return;
- }
- }
- // If there is a warning already, append it to the existing one
- $warning = "$oldWarning\n$warning";
- }
- $msg = array();
- ApiResult::setContent( $msg, $warning );
- $result->addValue( 'warnings', $moduleName,
- $msg, ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ $msg = new ApiRawMessage( $warning, 'warning' );
+ $this->getErrorFormatter()->addWarning( $this->getModuleName(), $msg );
}
/**
@@ -1159,7 +1306,6 @@ abstract class ApiBase extends ContextSource {
* @throws UsageException
*/
public function dieUsage( $description, $errorCode, $httpRespCode = 0, $extradata = null ) {
- Profiler::instance()->close();
throw new UsageException(
$description,
$this->encodeParamName( $errorCode ),
@@ -1174,6 +1320,7 @@ abstract class ApiBase extends ContextSource {
* @since 1.23
* @param Status $status
* @return array Array of code and error string
+ * @throws MWException
*/
public function getErrorFromStatus( $status ) {
if ( $status->isGood() ) {
@@ -1530,6 +1677,10 @@ abstract class ApiBase extends ContextSource {
'code' => 'nosuchrcid',
'info' => "There is no change with rcid \"\$1\""
),
+ 'nosuchlogid' => array(
+ 'code' => 'nosuchlogid',
+ 'info' => "There is no log entry with ID \"\$1\""
+ ),
'protect-invalidaction' => array(
'code' => 'protect-invalidaction',
'info' => "Invalid protection type \"\$1\""
@@ -1815,6 +1966,21 @@ abstract class ApiBase extends ContextSource {
throw new MWException( "Internal error in $method: $message" );
}
+ /**
+ * Write logging information for API features to a debug log, for usage
+ * analysis.
+ * @param string $feature Feature being used.
+ */
+ protected function logFeatureUsage( $feature ) {
+ $request = $this->getRequest();
+ $s = '"' . addslashes( $feature ) . '"' .
+ ' "' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) . '"' .
+ ' "' . $request->getIP() . '"' .
+ ' "' . addslashes( $request->getHeader( 'Referer' ) ) . '"' .
+ ' "' . addslashes( $this->getMain()->getUserAgent() ) . '"';
+ wfDebugLog( 'api-feature-usage', $s, 'private' );
+ }
+
/**@}*/
/************************************************************************//**
@@ -1823,10 +1989,424 @@ abstract class ApiBase extends ContextSource {
*/
/**
+ * Return the description message.
+ *
+ * @return string|array|Message
+ */
+ protected function getDescriptionMessage() {
+ return "apihelp-{$this->getModulePath()}-description";
+ }
+
+ /**
+ * Get final module description, after hooks have had a chance to tweak it as
+ * needed.
+ *
+ * @since 1.25, returns Message[] rather than string[]
+ * @return Message[]
+ */
+ public function getFinalDescription() {
+ $desc = $this->getDescription();
+ Hooks::run( 'APIGetDescription', array( &$this, &$desc ) );
+ $desc = self::escapeWikiText( $desc );
+ if ( is_array( $desc ) ) {
+ $desc = join( "\n", $desc );
+ } else {
+ $desc = (string)$desc;
+ }
+
+ $msg = ApiBase::makeMessage( $this->getDescriptionMessage(), $this->getContext(), array(
+ $this->getModulePrefix(),
+ $this->getModuleName(),
+ $this->getModulePath(),
+ ) );
+ if ( !$msg->exists() ) {
+ $msg = $this->msg( 'api-help-fallback-description', $desc );
+ }
+ $msgs = array( $msg );
+
+ Hooks::run( 'APIGetDescriptionMessages', array( $this, &$msgs ) );
+
+ return $msgs;
+ }
+
+ /**
+ * Get final list of parameters, after hooks have had a chance to
+ * tweak it as needed.
+ *
+ * @param int $flags Zero or more flags like GET_VALUES_FOR_HELP
+ * @return array|bool False on no parameters
+ * @since 1.21 $flags param added
+ */
+ public function getFinalParams( $flags = 0 ) {
+ $params = $this->getAllowedParams( $flags );
+ if ( !$params ) {
+ $params = array();
+ }
+
+ if ( $this->needsToken() ) {
+ $params['token'] = array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ApiBase::PARAM_HELP_MSG => array(
+ 'api-help-param-token',
+ $this->needsToken(),
+ ),
+ ) + ( isset( $params['token'] ) ? $params['token'] : array() );
+ }
+
+ Hooks::run( 'APIGetAllowedParams', array( &$this, &$params, $flags ) );
+
+ return $params;
+ }
+
+ /**
+ * Get final parameter descriptions, after hooks have had a chance to tweak it as
+ * needed.
+ *
+ * @since 1.25, returns array of Message[] rather than array of string[]
+ * @return array Keys are parameter names, values are arrays of Message objects
+ */
+ public function getFinalParamDescription() {
+ $prefix = $this->getModulePrefix();
+ $name = $this->getModuleName();
+ $path = $this->getModulePath();
+
+ $desc = $this->getParamDescription();
+ Hooks::run( 'APIGetParamDescription', array( &$this, &$desc ) );
+
+ if ( !$desc ) {
+ $desc = array();
+ }
+ $desc = self::escapeWikiText( $desc );
+
+ $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+ $msgs = array();
+ foreach ( $params as $param => $settings ) {
+ if ( !is_array( $settings ) ) {
+ $settings = array();
+ }
+
+ $d = isset( $desc[$param] ) ? $desc[$param] : '';
+ if ( is_array( $d ) ) {
+ // Special handling for prop parameters
+ $d = array_map( function ( $line ) {
+ if ( preg_match( '/^\s+(\S+)\s+-\s+(.+)$/', $line, $m ) ) {
+ $line = "\n;{$m[1]}:{$m[2]}";
+ }
+ return $line;
+ }, $d );
+ $d = join( ' ', $d );
+ }
+
+ if ( isset( $settings[ApiBase::PARAM_HELP_MSG] ) ) {
+ $msg = $settings[ApiBase::PARAM_HELP_MSG];
+ } else {
+ $msg = $this->msg( "apihelp-{$path}-param-{$param}" );
+ if ( !$msg->exists() ) {
+ $msg = $this->msg( 'api-help-fallback-parameter', $d );
+ }
+ }
+ $msg = ApiBase::makeMessage( $msg, $this->getContext(),
+ array( $prefix, $param, $name, $path ) );
+ if ( !$msg ) {
+ $this->dieDebug( __METHOD__,
+ 'Value in ApiBase::PARAM_HELP_MSG is not valid' );
+ }
+ $msgs[$param] = array( $msg );
+
+ if ( isset( $settings[ApiBase::PARAM_HELP_MSG_PER_VALUE] ) ) {
+ if ( !is_array( $settings[ApiBase::PARAM_HELP_MSG_PER_VALUE] ) ) {
+ $this->dieDebug( __METHOD__,
+ 'ApiBase::PARAM_HELP_MSG_PER_VALUE is not valid' );
+ }
+ if ( !is_array( $settings[ApiBase::PARAM_TYPE] ) ) {
+ $this->dieDebug( __METHOD__,
+ 'ApiBase::PARAM_HELP_MSG_PER_VALUE may only be used when ' .
+ 'ApiBase::PARAM_TYPE is an array' );
+ }
+
+ $valueMsgs = $settings[ApiBase::PARAM_HELP_MSG_PER_VALUE];
+ foreach ( $settings[ApiBase::PARAM_TYPE] as $value ) {
+ if ( isset( $valueMsgs[$value] ) ) {
+ $msg = $valueMsgs[$value];
+ } else {
+ $msg = "apihelp-{$path}-paramvalue-{$param}-{$value}";
+ }
+ $m = ApiBase::makeMessage( $msg, $this->getContext(),
+ array( $prefix, $param, $name, $path, $value ) );
+ if ( $m ) {
+ $m = new ApiHelpParamValueMessage(
+ $value,
+ array( $m->getKey(), 'api-help-param-no-description' ),
+ $m->getParams()
+ );
+ $msgs[$param][] = $m->setContext( $this->getContext() );
+ } else {
+ $this->dieDebug( __METHOD__,
+ "Value in ApiBase::PARAM_HELP_MSG_PER_VALUE for $value is not valid" );
+ }
+ }
+ }
+
+ if ( isset( $settings[ApiBase::PARAM_HELP_MSG_APPEND] ) ) {
+ if ( !is_array( $settings[ApiBase::PARAM_HELP_MSG_APPEND] ) ) {
+ $this->dieDebug( __METHOD__,
+ 'Value for ApiBase::PARAM_HELP_MSG_APPEND is not an array' );
+ }
+ foreach ( $settings[ApiBase::PARAM_HELP_MSG_APPEND] as $m ) {
+ $m = ApiBase::makeMessage( $m, $this->getContext(),
+ array( $prefix, $param, $name, $path ) );
+ if ( $m ) {
+ $msgs[$param][] = $m;
+ } else {
+ $this->dieDebug( __METHOD__,
+ 'Value in ApiBase::PARAM_HELP_MSG_APPEND is not valid' );
+ }
+ }
+ }
+ }
+
+ Hooks::run( 'APIGetParamDescriptionMessages', array( $this, &$msgs ) );
+
+ return $msgs;
+ }
+
+ /**
+ * Generates the list of flags for the help screen and for action=paraminfo
+ *
+ * Corresponding messages: api-help-flag-deprecated,
+ * api-help-flag-internal, api-help-flag-readrights,
+ * api-help-flag-writerights, api-help-flag-mustbeposted
+ *
+ * @return string[]
+ */
+ protected function getHelpFlags() {
+ $flags = array();
+
+ if ( $this->isDeprecated() ) {
+ $flags[] = 'deprecated';
+ }
+ if ( $this->isInternal() ) {
+ $flags[] = 'internal';
+ }
+ if ( $this->isReadMode() ) {
+ $flags[] = 'readrights';
+ }
+ if ( $this->isWriteMode() ) {
+ $flags[] = 'writerights';
+ }
+ if ( $this->mustBePosted() ) {
+ $flags[] = 'mustbeposted';
+ }
+
+ return $flags;
+ }
+
+ /**
+ * Called from ApiHelp before the pieces are joined together and returned.
+ *
+ * This exists mainly for ApiMain to add the Permissions and Credits
+ * sections. Other modules probably don't need it.
+ *
+ * @param string[] &$help Array of help data
+ * @param array $options Options passed to ApiHelp::getHelp
+ */
+ public function modifyHelp( array &$help, array $options ) {
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Deprecated
+ * @{
+ */
+
+ /// @deprecated since 1.24
+ const PROP_ROOT = 'ROOT';
+ /// @deprecated since 1.24
+ const PROP_LIST = 'LIST';
+ /// @deprecated since 1.24
+ const PROP_TYPE = 0;
+ /// @deprecated since 1.24
+ const PROP_NULLABLE = 1;
+
+ /**
+ * Formerly returned a string that identifies the version of the extending
+ * class. Typically included the class name, the svn revision, timestamp,
+ * and last author. Usually done with SVN's Id keyword
+ *
+ * @deprecated since 1.21, version string is no longer supported
+ * @return string
+ */
+ public function getVersion() {
+ wfDeprecated( __METHOD__, '1.21' );
+ return '';
+ }
+
+ /**
+ * Formerly used to fetch a list of possible properites in the result,
+ * somehow organized with respect to the prop parameter that causes them to
+ * be returned. The specific semantics of the return value was never
+ * specified. Since this was never possible to be accurately updated, it
+ * has been removed.
+ *
+ * @deprecated since 1.24
+ * @return array|bool
+ */
+ protected function getResultProperties() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return false;
+ }
+
+ /**
+ * @see self::getResultProperties()
+ * @deprecated since 1.24
+ * @return array|bool
+ */
+ public function getFinalResultProperties() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getResultProperties()
+ * @deprecated since 1.24
+ */
+ protected static function addTokenProperties( &$props, $tokenFunctions ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getRequireOnlyOneParameterErrorMessages( $params ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getRequireMaxOneParameterErrorMessages( $params ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getRequireAtLeastOneParameterErrorMessages( $params ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getTitleOrPageIdErrorMessage() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * This formerly attempted to return a list of all possible errors returned
+ * by the module. However, this was impossible to maintain in many cases
+ * since errors could come from other areas of MediaWiki and in some cases
+ * from arbitrary extension hooks. Since a partial list claiming to be
+ * comprehensive is unlikely to be useful, it was removed.
+ *
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getPossibleErrors() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getFinalPossibleErrors() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function parseErrors( $errors ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * Returns the description string for this module
+ *
+ * Ignored if an i18n message exists for
+ * "apihelp-{$this->getModulePathString()}-description".
+ *
+ * @deprecated since 1.25
+ * @return Message|string|array
+ */
+ protected function getDescription() {
+ return false;
+ }
+
+ /**
+ * Returns an array of parameter descriptions.
+ *
+ * For each parameter, ignored if an i18n message exists for the parameter.
+ * By default that message is
+ * "apihelp-{$this->getModulePathString()}-param-{$param}", but it may be
+ * overridden using ApiBase::PARAM_HELP_MSG in the data returned by
+ * self::getFinalParams().
+ *
+ * @deprecated since 1.25
+ * @return array|bool False on no parameter descriptions
+ */
+ protected function getParamDescription() {
+ return array();
+ }
+
+ /**
+ * Returns usage examples for this module.
+ *
+ * Return value as an array is either:
+ * - numeric keys with partial URLs ("api.php?" plus a query string) as
+ * values
+ * - sequential numeric keys with even-numbered keys being display-text
+ * and odd-numbered keys being partial urls
+ * - partial URLs as keys with display-text (string or array-to-be-joined)
+ * as values
+ * Return value as a string is the same as an array with a numeric key and
+ * that value, and boolean false means "no examples".
+ *
+ * @deprecated since 1.25, use getExamplesMessages() instead
+ * @return bool|string|array
+ */
+ protected function getExamples() {
+ return false;
+ }
+
+ /**
* Generates help message for this module, or false if there is no description
+ * @deprecated since 1.25
* @return string|bool
*/
public function makeHelpMsg() {
+ wfDeprecated( __METHOD__, '1.25' );
static $lnPrfx = "\n ";
$msg = $this->getFinalDescription();
@@ -1891,6 +2471,7 @@ abstract class ApiBase extends ContextSource {
}
/**
+ * @deprecated since 1.25
* @param string $item
* @return string
*/
@@ -1899,12 +2480,14 @@ abstract class ApiBase extends ContextSource {
}
/**
+ * @deprecated since 1.25
* @param string $prefix Text to split output items
* @param string $title What is being output
* @param string|array $input
* @return string
*/
protected function makeHelpArrayToString( $prefix, $title, $input ) {
+ wfDeprecated( __METHOD__, '1.25' );
if ( $input === false ) {
return '';
}
@@ -1929,9 +2512,11 @@ abstract class ApiBase extends ContextSource {
/**
* Generates the parameter descriptions for this module, to be displayed in the
* module's help.
+ * @deprecated since 1.25
* @return string|bool
*/
public function makeHelpMsgParameters() {
+ wfDeprecated( __METHOD__, '1.25' );
$params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
if ( $params ) {
@@ -2081,292 +2666,79 @@ abstract class ApiBase extends ContextSource {
return false;
}
- /**@}*/
-
- /************************************************************************//**
- * @name Profiling
- * @{
- */
-
/**
- * Profiling: total module execution time
- */
- private $mTimeIn = 0, $mModuleTime = 0;
-
- /**
- * Get the name of the module as shown in the profiler log
- *
+ * @deprecated since 1.25, always returns empty string
* @param DatabaseBase|bool $db
- *
* @return string
*/
public function getModuleProfileName( $db = false ) {
- if ( $db ) {
- return 'API:' . $this->mModuleName . '-DB';
- }
-
- return 'API:' . $this->mModuleName;
+ wfDeprecated( __METHOD__, '1.25' );
+ return '';
}
/**
- * Start module profiling
+ * @deprecated since 1.25
*/
public function profileIn() {
- if ( $this->mTimeIn !== 0 ) {
- ApiBase::dieDebug( __METHOD__, 'Called twice without calling profileOut()' );
- }
- $this->mTimeIn = microtime( true );
- wfProfileIn( $this->getModuleProfileName() );
+ // No wfDeprecated() yet because extensions call this and might need to
+ // keep doing so for BC.
}
/**
- * End module profiling
+ * @deprecated since 1.25
*/
public function profileOut() {
- if ( $this->mTimeIn === 0 ) {
- ApiBase::dieDebug( __METHOD__, 'Called without calling profileIn() first' );
- }
- if ( $this->mDBTimeIn !== 0 ) {
- ApiBase::dieDebug(
- __METHOD__,
- 'Must be called after database profiling is done with profileDBOut()'
- );
- }
-
- $this->mModuleTime += microtime( true ) - $this->mTimeIn;
- $this->mTimeIn = 0;
- wfProfileOut( $this->getModuleProfileName() );
+ // No wfDeprecated() yet because extensions call this and might need to
+ // keep doing so for BC.
}
/**
- * When modules crash, sometimes it is needed to do a profileOut() regardless
- * of the profiling state the module was in. This method does such cleanup.
+ * @deprecated since 1.25
*/
public function safeProfileOut() {
- if ( $this->mTimeIn !== 0 ) {
- if ( $this->mDBTimeIn !== 0 ) {
- $this->profileDBOut();
- }
- $this->profileOut();
- }
+ wfDeprecated( __METHOD__, '1.25' );
}
/**
- * Total time the module was executed
+ * @deprecated since 1.25, always returns 0
* @return float
*/
public function getProfileTime() {
- if ( $this->mTimeIn !== 0 ) {
- ApiBase::dieDebug( __METHOD__, 'Called without calling profileOut() first' );
- }
-
- return $this->mModuleTime;
+ wfDeprecated( __METHOD__, '1.25' );
+ return 0;
}
/**
- * Profiling: database execution time
- */
- private $mDBTimeIn = 0, $mDBTime = 0;
-
- /**
- * Start module profiling
+ * @deprecated since 1.25
*/
public function profileDBIn() {
- if ( $this->mTimeIn === 0 ) {
- ApiBase::dieDebug(
- __METHOD__,
- 'Must be called while profiling the entire module with profileIn()'
- );
- }
- if ( $this->mDBTimeIn !== 0 ) {
- ApiBase::dieDebug( __METHOD__, 'Called twice without calling profileDBOut()' );
- }
- $this->mDBTimeIn = microtime( true );
- wfProfileIn( $this->getModuleProfileName( true ) );
+ wfDeprecated( __METHOD__, '1.25' );
}
/**
- * End database profiling
+ * @deprecated since 1.25
*/
public function profileDBOut() {
- if ( $this->mTimeIn === 0 ) {
- ApiBase::dieDebug( __METHOD__, 'Must be called while profiling ' .
- 'the entire module with profileIn()' );
- }
- if ( $this->mDBTimeIn === 0 ) {
- ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBIn() first' );
- }
-
- $time = microtime( true ) - $this->mDBTimeIn;
- $this->mDBTimeIn = 0;
-
- $this->mDBTime += $time;
- $this->getMain()->mDBTime += $time;
- wfProfileOut( $this->getModuleProfileName( true ) );
+ wfDeprecated( __METHOD__, '1.25' );
}
/**
- * Total time the module used the database
+ * @deprecated since 1.25, always returns 0
* @return float
*/
public function getProfileDBTime() {
- if ( $this->mDBTimeIn !== 0 ) {
- ApiBase::dieDebug( __METHOD__, 'Called without calling profileDBOut() first' );
- }
-
- return $this->mDBTime;
- }
-
- /**
- * Write logging information for API features to a debug log, for usage
- * analysis.
- * @param string $feature Feature being used.
- */
- protected function logFeatureUsage( $feature ) {
- $request = $this->getRequest();
- $s = '"' . addslashes( $feature ) . '"' .
- ' "' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) . '"' .
- ' "' . $request->getIP() . '"' .
- ' "' . addslashes( $request->getHeader( 'Referer' ) ) . '"' .
- ' "' . addslashes( $request->getHeader( 'User-agent' ) ) . '"';
- wfDebugLog( 'api-feature-usage', $s, 'private' );
- }
-
- /**@}*/
-
- /************************************************************************//**
- * @name Deprecated
- * @{
- */
-
- /// @deprecated since 1.24
- const PROP_ROOT = 'ROOT';
- /// @deprecated since 1.24
- const PROP_LIST = 'LIST';
- /// @deprecated since 1.24
- const PROP_TYPE = 0;
- /// @deprecated since 1.24
- const PROP_NULLABLE = 1;
-
- /**
- * Formerly returned a string that identifies the version of the extending
- * class. Typically included the class name, the svn revision, timestamp,
- * and last author. Usually done with SVN's Id keyword
- *
- * @deprecated since 1.21, version string is no longer supported
- * @return string
- */
- public function getVersion() {
- wfDeprecated( __METHOD__, '1.21' );
- return '';
- }
-
- /**
- * Formerly used to fetch a list of possible properites in the result,
- * somehow organized with respect to the prop parameter that causes them to
- * be returned. The specific semantics of the return value was never
- * specified. Since this was never possible to be accurately updated, it
- * has been removed.
- *
- * @deprecated since 1.24
- * @return array|bool
- */
- protected function getResultProperties() {
- wfDeprecated( __METHOD__, '1.24' );
- return false;
- }
-
- /**
- * @see self::getResultProperties()
- * @deprecated since 1.24
- * @return array|bool
- */
- public function getFinalResultProperties() {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
+ wfDeprecated( __METHOD__, '1.25' );
+ return 0;
}
/**
- * @see self::getResultProperties()
- * @deprecated since 1.24
- */
- protected static function addTokenProperties( &$props, $tokenFunctions ) {
- wfDeprecated( __METHOD__, '1.24' );
- }
-
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
- */
- public function getRequireOnlyOneParameterErrorMessages( $params ) {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
-
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
- */
- public function getRequireMaxOneParameterErrorMessages( $params ) {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
-
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
- */
- public function getRequireAtLeastOneParameterErrorMessages( $params ) {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
-
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
- */
- public function getTitleOrPageIdErrorMessage() {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
-
- /**
- * This formerly attempted to return a list of all possible errors returned
- * by the module. However, this was impossible to maintain in many cases
- * since errors could come from other areas of MediaWiki and in some cases
- * from arbitrary extension hooks. Since a partial list claiming to be
- * comprehensive is unlikely to be useful, it was removed.
- *
- * @deprecated since 1.24
- * @return array
- */
- public function getPossibleErrors() {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
-
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
- */
- public function getFinalPossibleErrors() {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
-
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
+ * Get the result data array (read-only)
+ * @deprecated since 1.25, use $this->getResult() methods instead
* @return array
*/
- public function parseErrors( $errors ) {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
+ public function getResultData() {
+ wfDeprecated( __METHOD__, '1.25' );
+ return $this->getResult()->getData();
}
/**@}*/
diff --git a/includes/api/ApiBlock.php b/includes/api/ApiBlock.php
index 07f62c66..4d39ce1b 100644
--- a/includes/api/ApiBlock.php
+++ b/includes/api/ApiBlock.php
@@ -78,7 +78,7 @@ class ApiBlock extends ApiBase {
'other',
$params['reason']
),
- 'Expiry' => $params['expiry'] == 'never' ? 'infinite' : $params['expiry'],
+ 'Expiry' => $params['expiry'],
'HardBlock' => !$params['anononly'],
'CreateAccount' => $params['nocreate'],
'AutoBlock' => $params['autoblock'],
@@ -113,27 +113,13 @@ class ApiBlock extends ApiBase {
}
$res['reason'] = $params['reason'];
- if ( $params['anononly'] ) {
- $res['anononly'] = '';
- }
- if ( $params['nocreate'] ) {
- $res['nocreate'] = '';
- }
- if ( $params['autoblock'] ) {
- $res['autoblock'] = '';
- }
- if ( $params['noemail'] ) {
- $res['noemail'] = '';
- }
- if ( $params['hidename'] ) {
- $res['hidename'] = '';
- }
- if ( $params['allowusertalk'] ) {
- $res['allowusertalk'] = '';
- }
- if ( $params['watchuser'] ) {
- $res['watchuser'] = '';
- }
+ $res['anononly'] = $params['anononly'];
+ $res['nocreate'] = $params['nocreate'];
+ $res['autoblock'] = $params['autoblock'];
+ $res['noemail'] = $params['noemail'];
+ $res['hidename'] = $params['hidename'];
+ $res['allowusertalk'] = $params['allowusertalk'];
+ $res['watchuser'] = $params['watchuser'];
$this->getResult()->addValue( null, $this->getModuleName(), $res );
}
@@ -165,38 +151,16 @@ class ApiBlock extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'user' => 'Username, IP address or IP range you want to block',
- 'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. ' .
- 'If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.',
- 'reason' => 'Reason for block',
- 'anononly' => 'Block anonymous users only (i.e. disable anonymous edits for this IP)',
- 'nocreate' => 'Prevent account creation',
- 'autoblock' => 'Automatically block the last used IP address, and ' .
- 'any subsequent IP addresses they try to login from',
- 'noemail'
- => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)',
- 'hidename' => 'Hide the username from the block log. (Requires the "hideuser" right.)',
- 'allowusertalk'
- => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)',
- 'reblock' => 'If the user is already blocked, overwrite the existing block',
- 'watchuser' => 'Watch the user/IP\'s user and talk pages',
- );
- }
-
- public function getDescription() {
- return 'Block a user.';
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=block&user=123.5.5.12&expiry=3%20days&reason=First%20strike&token=123ABC',
- 'api.php?action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
+ 'action=block&user=192.0.2.5&expiry=3%20days&reason=First%20strike&token=123ABC'
+ => 'apihelp-block-example-ip-simple',
+ 'action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
+ => 'apihelp-block-example-user-complex',
);
}
diff --git a/includes/api/ApiCheckToken.php b/includes/api/ApiCheckToken.php
new file mode 100644
index 00000000..28c6ece7
--- /dev/null
+++ b/includes/api/ApiCheckToken.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Created on Jan 29, 2015
+ *
+ * Copyright © 2015 Brad Jorsch bjorsch@wikimedia.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @since 1.25
+ * @ingroup API
+ */
+class ApiCheckToken extends ApiBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $token = $params['token'];
+ $maxage = $params['maxtokenage'];
+ $request = $this->getRequest();
+ $salts = ApiQueryTokens::getTokenTypeSalts();
+ $salt = $salts[$params['type']];
+
+ $res = array();
+
+ if ( $this->getUser()->matchEditToken( $token, $salt, $request, $maxage ) ) {
+ $res['result'] = 'valid';
+ } elseif ( $maxage !== null && $this->getUser()->matchEditToken( $token, $salt, $request ) ) {
+ $res['result'] = 'expired';
+ } else {
+ $res['result'] = 'invalid';
+ }
+
+ $ts = User::getEditTokenTimestamp( $token );
+ if ( $ts !== null ) {
+ $mwts = new MWTimestamp();
+ $mwts->timestamp->setTimestamp( $ts );
+ $res['generated'] = $mwts->getTimestamp( TS_ISO_8601 );
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $res );
+ }
+
+ public function getAllowedParams() {
+ return array(
+ 'type' => array(
+ ApiBase::PARAM_TYPE => array_keys( ApiQueryTokens::getTokenTypeSalts() ),
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'token' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'maxtokenage' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ),
+ );
+ }
+
+ protected function getExamplesMessages() {
+ return array(
+ 'action=checktoken&type=csrf&token=123ABC'
+ => 'apihelp-checktoken-example-simple',
+ );
+ }
+}
diff --git a/includes/api/ApiClearHasMsg.php b/includes/api/ApiClearHasMsg.php
index 32e20e80..eb471ae6 100644
--- a/includes/api/ApiClearHasMsg.php
+++ b/includes/api/ApiClearHasMsg.php
@@ -42,13 +42,10 @@ class ApiClearHasMsg extends ApiBase {
return false;
}
- public function getDescription() {
- return array( 'Clears the hasmsg flag for current user.' );
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=clearhasmsg' => 'Clears the hasmsg flag for current user',
+ 'action=clearhasmsg'
+ => 'apihelp-clearhasmsg-example-1',
);
}
diff --git a/includes/api/ApiComparePages.php b/includes/api/ApiComparePages.php
index 48559268..23009123 100644
--- a/includes/api/ApiComparePages.php
+++ b/includes/api/ApiComparePages.php
@@ -72,7 +72,7 @@ class ApiComparePages extends ApiBase {
);
}
- ApiResult::setContent( $vals, $difftext );
+ ApiResult::setContentValue( $vals, 'body', $difftext );
$this->getResult()->addValue( null, $this->getModuleName(), $vals );
}
@@ -126,27 +126,10 @@ class ApiComparePages extends ApiBase {
);
}
- public function getParamDescription() {
+ protected function getExamplesMessages() {
return array(
- 'fromtitle' => 'First title to compare',
- 'fromid' => 'First page ID to compare',
- 'fromrev' => 'First revision to compare',
- 'totitle' => 'Second title to compare',
- 'toid' => 'Second page ID to compare',
- 'torev' => 'Second revision to compare',
- );
- }
-
- public function getDescription() {
- return array(
- 'Get the difference between 2 pages.',
- 'You must pass a revision number or a page title or a page ID id for each part (1 and 2).'
- );
- }
-
- public function getExamples() {
- return array(
- 'api.php?action=compare&fromrev=1&torev=2' => 'Create a diff between revision 1 and 2',
+ 'action=compare&fromrev=1&torev=2'
+ => 'apihelp-compare-example-1',
);
}
}
diff --git a/includes/api/ApiContinuationManager.php b/includes/api/ApiContinuationManager.php
new file mode 100644
index 00000000..354f4e7d
--- /dev/null
+++ b/includes/api/ApiContinuationManager.php
@@ -0,0 +1,238 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This manages continuation state.
+ * @since 1.25 this is no longer a subclass of ApiBase
+ * @ingroup API
+ */
+class ApiContinuationManager {
+ private $source;
+
+ private $allModules = array();
+ private $generatedModules = array();
+
+ private $continuationData = array();
+ private $generatorContinuationData = array();
+
+ private $generatorParams = array();
+ private $generatorDone = false;
+
+ /**
+ * @param ApiBase $module Module starting the continuation
+ * @param ApiBase[] $allModules Contains ApiBase instances that will be executed
+ * @param array $generatedModules Names of modules that depend on the generator
+ */
+ public function __construct(
+ ApiBase $module, array $allModules = array(), array $generatedModules = array()
+ ) {
+ $this->source = get_class( $module );
+ $request = $module->getRequest();
+
+ $this->generatedModules = $generatedModules
+ ? array_combine( $generatedModules, $generatedModules )
+ : array();
+
+ $skip = array();
+ $continue = $request->getVal( 'continue', '' );
+ if ( $continue !== '' ) {
+ $continue = explode( '||', $continue );
+ if ( count( $continue ) !== 2 ) {
+ throw new UsageException(
+ 'Invalid continue param. You should pass the original value returned by the previous query',
+ 'badcontinue'
+ );
+ }
+ $this->generatorDone = ( $continue[0] === '-' );
+ $skip = explode( '|', $continue[1] );
+ if ( !$this->generatorDone ) {
+ $params = explode( '|', $continue[0] );
+ if ( $params ) {
+ $this->generatorParams = array_intersect_key(
+ $request->getValues(),
+ array_flip( $params )
+ );
+ }
+ } else {
+ // When the generator is complete, don't run any modules that
+ // depend on it.
+ $skip += $this->generatedModules;
+ }
+ }
+
+ foreach ( $allModules as $module ) {
+ $name = $module->getModuleName();
+ if ( in_array( $name, $skip, true ) ) {
+ $this->allModules[$name] = false;
+ // Prevent spurious "unused parameter" warnings
+ $module->extractRequestParams();
+ } else {
+ $this->allModules[$name] = $module;
+ }
+ }
+ }
+
+ /**
+ * Get the class that created this manager
+ * @return string
+ */
+ public function getSource() {
+ return $this->source;
+ }
+
+ /**
+ * Is the generator done?
+ * @return bool
+ */
+ public function isGeneratorDone() {
+ return $this->generatorDone;
+ }
+
+ /**
+ * Get the list of modules that should actually be run
+ * @return ApiBase[]
+ */
+ public function getRunModules() {
+ return array_values( array_filter( $this->allModules ) );
+ }
+
+ /**
+ * Set the continuation parameter for a module
+ * @param ApiBase $module
+ * @param string $paramName
+ * @param string|array $paramValue
+ * @throws UnexpectedValueException
+ */
+ public function addContinueParam( ApiBase $module, $paramName, $paramValue ) {
+ $name = $module->getModuleName();
+ if ( !isset( $this->allModules[$name] ) ) {
+ throw new UnexpectedValueException(
+ "Module '$name' called " . __METHOD__ .
+ ' but was not passed to ' . __CLASS__ . '::__construct'
+ );
+ }
+ if ( !$this->allModules[$name] ) {
+ throw new UnexpectedValueException(
+ "Module '$name' was not supposed to have been executed, but " .
+ 'it was executed anyway'
+ );
+ }
+ $paramName = $module->encodeParamName( $paramName );
+ if ( is_array( $paramValue ) ) {
+ $paramValue = join( '|', $paramValue );
+ }
+ $this->continuationData[$name][$paramName] = $paramValue;
+ }
+
+ /**
+ * Set the continuation parameter for the generator module
+ * @param ApiBase $module
+ * @param string $paramName
+ * @param string|array $paramValue
+ */
+ public function addGeneratorContinueParam( ApiBase $module, $paramName, $paramValue ) {
+ $name = $module->getModuleName();
+ $paramName = $module->encodeParamName( $paramName );
+ if ( is_array( $paramValue ) ) {
+ $paramValue = join( '|', $paramValue );
+ }
+ $this->generatorContinuationData[$name][$paramName] = $paramValue;
+ }
+
+ /**
+ * Fetch raw continuation data
+ * @return array
+ */
+ public function getRawContinuation() {
+ return array_merge_recursive( $this->continuationData, $this->generatorContinuationData );
+ }
+
+ /**
+ * Fetch continuation result data
+ * @return array Array( (array)$data, (bool)$batchcomplete )
+ */
+ public function getContinuation() {
+ $data = array();
+ $batchcomplete = false;
+
+ $finishedModules = array_diff(
+ array_keys( $this->allModules ),
+ array_keys( $this->continuationData )
+ );
+
+ // First, grab the non-generator-using continuation data
+ $continuationData = array_diff_key( $this->continuationData, $this->generatedModules );
+ foreach ( $continuationData as $module => $kvp ) {
+ $data += $kvp;
+ }
+
+ // Next, handle the generator-using continuation data
+ $continuationData = array_intersect_key( $this->continuationData, $this->generatedModules );
+ if ( $continuationData ) {
+ // Some modules are unfinished: include those params, and copy
+ // the generator params.
+ foreach ( $continuationData as $module => $kvp ) {
+ $data += $kvp;
+ }
+ $data += $this->generatorParams;
+ $generatorKeys = join( '|', array_keys( $this->generatorParams ) );
+ } elseif ( $this->generatorContinuationData ) {
+ // All the generator-using modules are complete, but the
+ // generator isn't. Continue the generator and restart the
+ // generator-using modules
+ $generatorParams = array();
+ foreach ( $this->generatorContinuationData as $kvp ) {
+ $generatorParams += $kvp;
+ }
+ $data += $generatorParams;
+ $finishedModules = array_diff( $finishedModules, $this->generatedModules );
+ $generatorKeys = join( '|', array_keys( $generatorParams ) );
+ $batchcomplete = true;
+ } else {
+ // Generator and prop modules are all done. Mark it so.
+ $generatorKeys = '-';
+ $batchcomplete = true;
+ }
+
+ // Set 'continue' if any continuation data is set or if the generator
+ // still needs to run
+ if ( $data || $generatorKeys !== '-' ) {
+ $data['continue'] = $generatorKeys . '||' . join( '|', $finishedModules );
+ }
+
+ return array( $data, $batchcomplete );
+ }
+
+ /**
+ * Store the continuation data into the result
+ * @param ApiResult $result
+ */
+ public function setContinuationIntoResult( ApiResult $result ) {
+ list( $data, $batchcomplete ) = $this->getContinuation();
+ if ( $data ) {
+ $result->addValue( null, 'continue', $data,
+ ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ if ( $batchcomplete ) {
+ $result->addValue( null, 'batchcomplete', true,
+ ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ }
+}
diff --git a/includes/api/ApiCreateAccount.php b/includes/api/ApiCreateAccount.php
index 2ce532b9..455540b4 100644
--- a/includes/api/ApiCreateAccount.php
+++ b/includes/api/ApiCreateAccount.php
@@ -29,9 +29,12 @@
*/
class ApiCreateAccount extends ApiBase {
public function execute() {
- // If we're in JSON callback mode, no tokens can be obtained
- if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
- $this->dieUsage( 'Cannot create account when using a callback', 'aborted' );
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
+ $this->dieUsage(
+ 'Cannot create account when the same-origin policy is not applied', 'aborted'
+ );
}
// $loginForm->addNewaccountInternal will throw exceptions
@@ -83,7 +86,7 @@ class ApiCreateAccount extends ApiBase {
$loginForm = new LoginForm();
$loginForm->setContext( $context );
- wfRunHooks( 'AddNewAccountApiForm', array( $this, $loginForm ) );
+ Hooks::run( 'AddNewAccountApiForm', array( $this, $loginForm ) );
$loginForm->load();
$status = $loginForm->addNewaccountInternal();
@@ -113,7 +116,7 @@ class ApiCreateAccount extends ApiBase {
// Save settings (including confirmation token)
$user->saveSettings();
- wfRunHooks( 'AddNewAccount', array( $user, $params['mailpassword'] ) );
+ Hooks::run( 'AddNewAccount', array( $user, $params['mailpassword'] ) );
if ( $params['mailpassword'] ) {
$logAction = 'byemail';
@@ -149,9 +152,9 @@ class ApiCreateAccount extends ApiBase {
$warnings = $status->getErrorsByType( 'warning' );
if ( $warnings ) {
foreach ( $warnings as &$warning ) {
- $apiResult->setIndexedTagName( $warning['params'], 'param' );
+ ApiResult::setIndexedTagName( $warning['params'], 'param' );
}
- $apiResult->setIndexedTagName( $warnings, 'warning' );
+ ApiResult::setIndexedTagName( $warnings, 'warning' );
$result['warnings'] = $warnings;
}
} else {
@@ -160,15 +163,11 @@ class ApiCreateAccount extends ApiBase {
}
// Give extensions a chance to modify the API result data
- wfRunHooks( 'AddNewAccountApiResult', array( $this, $loginForm, &$result ) );
+ Hooks::run( 'AddNewAccountApiResult', array( $this, $loginForm, &$result ) );
$apiResult->addValue( null, 'createaccount', $result );
}
- public function getDescription() {
- return 'Create a new user account.';
- }
-
public function mustBePosted() {
return true;
}
@@ -204,27 +203,12 @@ class ApiCreateAccount extends ApiBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'name' => 'Username',
- 'password' => "Password (ignored if {$p}mailpassword is set)",
- 'domain' => 'Domain for external authentication (optional)',
- 'token' => 'Account creation token obtained in first request',
- 'email' => 'Email address of user (optional)',
- 'realname' => 'Real name of user (optional)',
- 'mailpassword' => 'If set to any value, a random password will be emailed to the user',
- 'reason' => 'Optional reason for creating the account to be put in the logs',
- 'language'
- => 'Language code to set as default for the user (optional, defaults to content language)'
- );
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=createaccount&name=testuser&password=test123',
- 'api.php?action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason',
+ 'action=createaccount&name=testuser&password=test123'
+ => 'apihelp-createaccount-example-pass',
+ 'action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason'
+ => 'apihelp-createaccount-example-mail',
);
}
diff --git a/includes/api/ApiDelete.php b/includes/api/ApiDelete.php
index abca8245..d8b57182 100644
--- a/includes/api/ApiDelete.php
+++ b/includes/api/ApiDelete.php
@@ -210,35 +210,16 @@ class ApiDelete extends ApiBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'title' => "Title of the page you want to delete. Cannot be used together with {$p}pageid",
- 'pageid' => "Page ID of the page you want to delete. Cannot be used together with {$p}title",
- 'reason'
- => 'Reason for the deletion. If not set, an automatically generated reason will be used',
- 'watch' => 'Add the page to your watchlist',
- 'watchlist' => 'Unconditionally add or remove the page from your ' .
- 'watchlist, use preferences or do not change watch',
- 'unwatch' => 'Remove the page from your watchlist',
- 'oldimage' => 'The name of the old image to delete as provided by iiprop=archivename'
- );
- }
-
- public function getDescription() {
- return 'Delete a page.';
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=delete&title=Main%20Page&token=123ABC' => 'Delete the Main Page',
- 'api.php?action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
- => 'Delete the Main Page with the reason "Preparing for move"',
+ 'action=delete&title=Main%20Page&token=123ABC'
+ => 'apihelp-delete-example-simple',
+ 'action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
+ => 'apihelp-delete-example-reason',
);
}
diff --git a/includes/api/ApiDisabled.php b/includes/api/ApiDisabled.php
index 6ea5d202..fc975220 100644
--- a/includes/api/ApiDisabled.php
+++ b/includes/api/ApiDisabled.php
@@ -44,19 +44,7 @@ class ApiDisabled extends ApiBase {
return false;
}
- public function getAllowedParams() {
- return array();
- }
-
- public function getParamDescription() {
- return array();
- }
-
- public function getDescription() {
- return 'This module has been disabled.';
- }
-
- public function getExamples() {
- return array();
+ protected function getDescriptionMessage() {
+ return 'apihelp-disabled-description';
}
}
diff --git a/includes/api/ApiEditPage.php b/includes/api/ApiEditPage.php
index a423b560..54a83915 100644
--- a/includes/api/ApiEditPage.php
+++ b/includes/api/ApiEditPage.php
@@ -28,7 +28,9 @@
* A module that allows for editing and creating pages.
*
* Currently, this wraps around the EditPage class in an ugly way,
- * EditPage.php should be rewritten to provide a cleaner interface
+ * EditPage.php should be rewritten to provide a cleaner interface,
+ * see T20654 if you're inspired to fix this.
+ *
* @ingroup API
*/
class ApiEditPage extends ApiBase {
@@ -48,8 +50,12 @@ class ApiEditPage extends ApiBase {
$apiResult = $this->getResult();
if ( $params['redirect'] ) {
- if ( $params['prependtext'] === null && $params['appendtext'] === null && $params['section'] !== 'new' ) {
- $this->dieUsage( 'You have attempted to edit using the "redirect"-following mode, which must be used in conjuction with section=new, prependtext, or appendtext.', 'redirect-appendonly' );
+ if ( $params['prependtext'] === null && $params['appendtext'] === null
+ && $params['section'] !== 'new'
+ ) {
+ $this->dieUsage( 'You have attempted to edit using the "redirect"-following'
+ . ' mode, which must be used in conjuction with section=new, prependtext'
+ . ', or appendtext.', 'redirect-appendonly' );
}
if ( $titleObj->isRedirect() ) {
$oldTitle = $titleObj;
@@ -76,7 +82,7 @@ class ApiEditPage extends ApiBase {
$titleObj = $newTitle;
}
- $apiResult->setIndexedTagName( $redirValues, 'r' );
+ ApiResult::setIndexedTagName( $redirValues, 'r' );
$apiResult->addValue( null, 'redirects', $redirValues );
// Since the page changed, update $pageObj
@@ -195,9 +201,9 @@ class ApiEditPage extends ApiBase {
list( $params['undo'], $params['undoafter'] ) =
array( $params['undoafter'], $params['undo'] );
}
- $undoafterRev = Revision::newFromID( $params['undoafter'] );
+ $undoafterRev = Revision::newFromId( $params['undoafter'] );
}
- $undoRev = Revision::newFromID( $params['undo'] );
+ $undoRev = Revision::newFromId( $params['undo'] );
if ( is_null( $undoRev ) || $undoRev->isDeleted( Revision::DELETED_TEXT ) ) {
$this->dieUsageMsg( array( 'nosuchrevid', $params['undo'] ) );
}
@@ -252,8 +258,10 @@ class ApiEditPage extends ApiBase {
'format' => $contentFormat,
'model' => $contentHandler->getModelID(),
'wpEditToken' => $params['token'],
- 'wpIgnoreBlankSummary' => '',
- 'wpIgnoreBlankArticle' => true
+ 'wpIgnoreBlankSummary' => true,
+ 'wpIgnoreBlankArticle' => true,
+ 'wpIgnoreSelfRedirect' => true,
+ 'bot' => $params['bot'],
);
if ( !is_null( $params['summary'] ) ) {
@@ -294,10 +302,13 @@ class ApiEditPage extends ApiBase {
if ( !is_null( $params['section'] ) ) {
$section = $params['section'];
if ( !preg_match( '/^((T-)?\d+|new)$/', $section ) ) {
- $this->dieUsage( "The section parameter must be a valid section id or 'new'", "invalidsection" );
+ $this->dieUsage( "The section parameter must be a valid section id or 'new'",
+ "invalidsection" );
}
$content = $pageObj->getContent();
- if ( $section !== '0' && $section != 'new' && ( !$content || !$content->getSection( $section ) ) ) {
+ if ( $section !== '0' && $section != 'new'
+ && ( !$content || !$content->getSection( $section ) )
+ ) {
$this->dieUsage( "There is no section {$section}.", 'nosuchsection' );
}
$requestArray['wpSection'] = $params['section'];
@@ -320,6 +331,15 @@ class ApiEditPage extends ApiBase {
$requestArray['wpWatchthis'] = '';
}
+ // Apply change tags
+ if ( count( $params['tags'] ) ) {
+ if ( $user->isAllowed( 'applychangetags' ) ) {
+ $requestArray['wpChangeTags'] = implode( ',', $params['tags'] );
+ } else {
+ $this->dieUsage( 'You don\'t have permission to set change tags.', 'taggingnotallowed' );
+ }
+ }
+
// Pass through anything else we might have been given, to support extensions
// This is kind of a hack but it's the best we can do to make extensions work
$requestArray += $this->getRequest()->getValues();
@@ -381,7 +401,7 @@ class ApiEditPage extends ApiBase {
// Run hooks
// Handle APIEditBeforeSave parameters
$r = array();
- if ( !wfRunHooks( 'APIEditBeforeSave', array( $ep, $content, &$r ) ) ) {
+ if ( !Hooks::run( 'APIEditBeforeSave', array( $ep, $content, &$r ) ) ) {
if ( count( $r ) ) {
$r['result'] = 'Failure';
$apiResult->addValue( null, $this->getModuleName(), $r );
@@ -400,13 +420,20 @@ class ApiEditPage extends ApiBase {
$oldRequest = $wgRequest;
$wgRequest = $req;
- $status = $ep->internalAttemptSave( $result, $user->isAllowed( 'bot' ) && $params['bot'] );
+ $status = $ep->attemptSave( $result );
$wgRequest = $oldRequest;
switch ( $status->value ) {
case EditPage::AS_HOOK_ERROR:
case EditPage::AS_HOOK_ERROR_EXPECTED:
- $this->dieUsageMsg( 'hookaborted' );
+ if ( isset( $status->apiHookResult ) ) {
+ $r = $status->apiHookResult;
+ $r['result'] = 'Failure';
+ $apiResult->addValue( null, $this->getModuleName(), $r );
+ return;
+ } else {
+ $this->dieUsageMsg( 'hookaborted' );
+ }
case EditPage::AS_PARSE_ERROR:
$this->dieUsage( $status->getMessage(), 'parseerror' );
@@ -454,12 +481,14 @@ class ApiEditPage extends ApiBase {
case EditPage::AS_CONFLICT_DETECTED:
$this->dieUsageMsg( 'editconflict' );
- // case EditPage::AS_SUMMARY_NEEDED: Can't happen since we set wpIgnoreBlankSummary
case EditPage::AS_TEXTBOX_EMPTY:
$this->dieUsageMsg( 'emptynewsection' );
+ case EditPage::AS_CHANGE_TAG_ERROR:
+ $this->dieStatus( $status );
+
case EditPage::AS_SUCCESS_NEW_ARTICLE:
- $r['new'] = '';
+ $r['new'] = true;
// fall-through
case EditPage::AS_SUCCESS_UPDATE:
@@ -469,7 +498,7 @@ class ApiEditPage extends ApiBase {
$r['contentmodel'] = $titleObj->getContentModel();
$newRevId = $articleObject->getLatest();
if ( $newRevId == $oldRevId ) {
- $r['nochange'] = '';
+ $r['nochange'] = true;
} else {
$r['oldrevid'] = intval( $oldRevId );
$r['newrevid'] = intval( $newRevId );
@@ -479,6 +508,7 @@ class ApiEditPage extends ApiBase {
break;
case EditPage::AS_SUMMARY_NEEDED:
+ // Shouldn't happen since we set wpIgnoreBlankSummary, but just in case
$this->dieUsageMsg( 'summaryrequired' );
case EditPage::AS_END:
@@ -499,10 +529,6 @@ class ApiEditPage extends ApiBase {
return true;
}
- public function getDescription() {
- return 'Create and edit pages.';
- }
-
public function getAllowedParams() {
return array(
'title' => array(
@@ -517,6 +543,10 @@ class ApiEditPage extends ApiBase {
),
'text' => null,
'summary' => null,
+ 'tags' => array(
+ ApiBase::PARAM_TYPE => ChangeTags::listExplicitlyDefinedTags(),
+ ApiBase::PARAM_ISMULTI => true,
+ ),
'minor' => false,
'notminor' => false,
'bot' => false,
@@ -560,58 +590,11 @@ class ApiEditPage extends ApiBase {
),
'contentmodel' => array(
ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
- )
- );
- }
-
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'title' => "Title of the page you want to edit. Cannot be used together with {$p}pageid",
- 'pageid' => "Page ID of the page you want to edit. Cannot be used together with {$p}title",
- 'section' => 'Section number. 0 for the top section, \'new\' for a new section',
- 'sectiontitle' => 'The title for a new section',
- 'text' => 'Page content',
- 'token' => array(
- /* Standard description is automatically prepended */
- 'The token should always be sent as the last parameter, or at ' .
- "least, after the {$p}text parameter"
- ),
- 'summary'
- => "Edit summary. Also section title when {$p}section=new and {$p}sectiontitle is not set",
- 'minor' => 'Minor edit',
- 'notminor' => 'Non-minor edit',
- 'bot' => 'Mark this edit as bot',
- 'basetimestamp' => array(
- 'Timestamp of the base revision (obtained through prop=revisions&rvprop=timestamp).',
- 'Used to detect edit conflicts; leave unset to ignore conflicts'
),
- 'starttimestamp' => array(
- 'Timestamp when you began the editing process, e.g. when the current page content ' .
- 'was loaded for editing.',
- 'Used to detect edit conflicts; leave unset to ignore conflicts'
- ),
- 'recreate' => 'Override any errors about the article having been deleted in the meantime',
- 'createonly' => 'Don\'t edit the page if it exists already',
- 'nocreate' => 'Throw an error if the page doesn\'t exist',
- 'watch' => 'Add the page to your watchlist',
- 'unwatch' => 'Remove the page from your watchlist',
- 'watchlist' => 'Unconditionally add or remove the page from your ' .
- 'watchlist, use preferences or do not change watch',
- 'md5' => array(
- "The MD5 hash of the {$p}text parameter, or the {$p}prependtext " .
- "and {$p}appendtext parameters concatenated.",
- 'If set, the edit won\'t be done unless the hash is correct'
+ 'token' => array(
+ // Standard definition automatically inserted
+ ApiBase::PARAM_HELP_MSG_APPEND => array( 'apihelp-edit-param-token' ),
),
- 'prependtext' => "Add this text to the beginning of the page. Overrides {$p}text",
- 'appendtext' => array( "Add this text to the end of the page. Overrides {$p}text.",
- "Use {$p}section=new to append a new section" ),
- 'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
- 'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
- 'redirect' => 'Automatically resolve redirects',
- 'contentformat' => 'Content serialization format used for the input text',
- 'contentmodel' => 'Content model of the new content',
);
}
@@ -619,17 +602,17 @@ class ApiEditPage extends ApiBase {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=edit&title=Test&summary=test%20summary&' .
- 'text=article%20content&basetimestamp=20070824123454&token=%2B\\'
- => 'Edit a page (anonymous user)',
- 'api.php?action=edit&title=Test&summary=NOTOC&minor=&' .
- 'prependtext=__NOTOC__%0A&basetimestamp=20070824123454&token=%2B\\'
- => 'Prepend __NOTOC__ to a page (anonymous user)',
- 'api.php?action=edit&title=Test&undo=13585&undoafter=13579&' .
- 'basetimestamp=20070824123454&token=%2B\\'
- => 'Undo r13579 through r13585 with autosummary (anonymous user)',
+ 'action=edit&title=Test&summary=test%20summary&' .
+ 'text=article%20content&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+ => 'apihelp-edit-example-edit',
+ 'action=edit&title=Test&summary=NOTOC&minor=&' .
+ 'prependtext=__NOTOC__%0A&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+ => 'apihelp-edit-example-prepend',
+ 'action=edit&title=Test&undo=13585&undoafter=13579&' .
+ 'basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+ => 'apihelp-edit-example-undo',
);
}
diff --git a/includes/api/ApiEmailUser.php b/includes/api/ApiEmailUser.php
index 9870b2de..15eb475e 100644
--- a/includes/api/ApiEmailUser.php
+++ b/includes/api/ApiEmailUser.php
@@ -102,27 +102,14 @@ class ApiEmailUser extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'target' => 'User to send email to',
- 'subject' => 'Subject header',
- 'text' => 'Mail body',
- 'ccme' => 'Send a copy of this mail to me',
- );
- }
-
- public function getDescription() {
- return 'Email a user.';
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=emailuser&target=WikiSysop&text=Content&token=123ABC'
- => 'Send an email to the User "WikiSysop" with the text "Content"',
+ 'action=emailuser&target=WikiSysop&text=Content&token=123ABC'
+ => 'apihelp-emailuser-example-email',
);
}
diff --git a/includes/api/ApiErrorFormatter.php b/includes/api/ApiErrorFormatter.php
new file mode 100644
index 00000000..94143291
--- /dev/null
+++ b/includes/api/ApiErrorFormatter.php
@@ -0,0 +1,303 @@
+<?php
+/**
+ * This file contains the ApiErrorFormatter definition, plus implementations of
+ * specific formatters.
+ *
+ * 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
+ */
+
+/**
+ * Formats errors and warnings for the API, and add them to the associated
+ * ApiResult.
+ * @since 1.25
+ * @ingroup API
+ */
+class ApiErrorFormatter {
+ /** @var Title Dummy title to silence warnings from MessageCache::parse() */
+ private static $dummyTitle = null;
+
+ /** @var ApiResult */
+ protected $result;
+
+ /** @var Language */
+ protected $lang;
+ protected $useDB = false;
+ protected $format = 'none';
+
+ /**
+ * @param ApiResult $result Into which data will be added
+ * @param Language $lang Used for i18n
+ * @param string $format
+ * - text: Error message as wikitext
+ * - html: Error message as HTML
+ * - raw: Raw message key and parameters, no human-readable text
+ * - none: Code and data only, no human-readable text
+ * @param bool $useDB Whether to use local translations for errors and warnings.
+ */
+ public function __construct( ApiResult $result, Language $lang, $format, $useDB = false ) {
+ $this->result = $result;
+ $this->lang = $lang;
+ $this->useDB = $useDB;
+ $this->format = $format;
+ }
+
+ /**
+ * Fetch a dummy title to set on Messages
+ * @return Title
+ */
+ protected function getDummyTitle() {
+ if ( self::$dummyTitle === null ) {
+ self::$dummyTitle = Title::makeTitle( NS_SPECIAL, 'Badtitle/' . __METHOD__ );
+ }
+ return self::$dummyTitle;
+ }
+
+ /**
+ * Add a warning to the result
+ * @param string $moduleName
+ * @param MessageSpecifier|array|string $msg i18n message for the warning
+ * @param string $code Machine-readable code for the warning. Defaults as
+ * for IApiMessage::getApiCode().
+ * @param array $data Machine-readable data for the warning, if any.
+ * Uses IApiMessage::getApiData() if $msg implements that interface.
+ */
+ public function addWarning( $moduleName, $msg, $code = null, $data = null ) {
+ $msg = ApiMessage::create( $msg, $code, $data )
+ ->inLanguage( $this->lang )
+ ->title( $this->getDummyTitle() )
+ ->useDatabase( $this->useDB );
+ $this->addWarningOrError( 'warning', $moduleName, $msg );
+ }
+
+ /**
+ * Add an error to the result
+ * @param string $moduleName
+ * @param MessageSpecifier|array|string $msg i18n message for the error
+ * @param string $code Machine-readable code for the warning. Defaults as
+ * for IApiMessage::getApiCode().
+ * @param array $data Machine-readable data for the warning, if any.
+ * Uses IApiMessage::getApiData() if $msg implements that interface.
+ */
+ public function addError( $moduleName, $msg, $code = null, $data = null ) {
+ $msg = ApiMessage::create( $msg, $code, $data )
+ ->inLanguage( $this->lang )
+ ->title( $this->getDummyTitle() )
+ ->useDatabase( $this->useDB );
+ $this->addWarningOrError( 'error', $moduleName, $msg );
+ }
+
+ /**
+ * Add warnings and errors from a Status object to the result
+ * @param string $moduleName
+ * @param Status $status
+ * @param string[] $types 'warning' and/or 'error'
+ */
+ public function addMessagesFromStatus(
+ $moduleName, Status $status, $types = array( 'warning', 'error' )
+ ) {
+ if ( $status->isGood() || !$status->errors ) {
+ return;
+ }
+
+ $types = (array)$types;
+ foreach ( $status->errors as $error ) {
+ if ( !in_array( $error['type'], $types, true ) ) {
+ continue;
+ }
+
+ if ( $error['type'] === 'error' ) {
+ $tag = 'error';
+ } else {
+ // Assume any unknown type is a warning
+ $tag = 'warning';
+ }
+
+ if ( is_array( $error ) && isset( $error['message'] ) ) {
+ // Normal case
+ if ( $error['message'] instanceof Message ) {
+ $msg = ApiMessage::create( $error['message'], null, array() );
+ } else {
+ $args = isset( $error['params'] ) ? $error['params'] : array();
+ array_unshift( $args, $error['message'] );
+ $error += array( 'params' => array() );
+ $msg = ApiMessage::create( $args, null, array() );
+ }
+ } elseif ( is_array( $error ) ) {
+ // Weird case handled by Message::getErrorMessage
+ $msg = ApiMessage::create( $error, null, array() );
+ } else {
+ // Another weird case handled by Message::getErrorMessage
+ $msg = ApiMessage::create( $error, null, array() );
+ }
+
+ $msg->inLanguage( $this->lang )
+ ->title( $this->getDummyTitle() )
+ ->useDatabase( $this->useDB );
+ $this->addWarningOrError( $tag, $moduleName, $msg );
+ }
+ }
+
+ /**
+ * Format messages from a Status as an array
+ * @param Status $status
+ * @param string $type 'warning' or 'error'
+ * @param string|null $format
+ * @return array
+ */
+ public function arrayFromStatus( Status $status, $type = 'error', $format = null ) {
+ if ( $status->isGood() || !$status->errors ) {
+ return array();
+ }
+
+ $result = new ApiResult( 1e6 );
+ $formatter = new ApiErrorFormatter(
+ $result, $this->lang, $format ?: $this->format, $this->useDB
+ );
+ $formatter->addMessagesFromStatus( 'dummy', $status, array( $type ) );
+ switch ( $type ) {
+ case 'error':
+ return (array)$result->getResultData( array( 'errors', 'dummy' ) );
+ case 'warning':
+ return (array)$result->getResultData( array( 'warnings', 'dummy' ) );
+ }
+ }
+
+ /**
+ * Actually add the warning or error to the result
+ * @param string $tag 'warning' or 'error'
+ * @param string $moduleName
+ * @param ApiMessage|ApiRawMessage $msg
+ */
+ protected function addWarningOrError( $tag, $moduleName, $msg ) {
+ $value = array( 'code' => $msg->getApiCode() );
+ switch ( $this->format ) {
+ case 'wikitext':
+ $value += array(
+ 'text' => $msg->text(),
+ ApiResult::META_CONTENT => 'text',
+ );
+ break;
+
+ case 'html':
+ $value += array(
+ 'html' => $msg->parse(),
+ ApiResult::META_CONTENT => 'html',
+ );
+ break;
+
+ case 'raw':
+ $value += array(
+ 'message' => $msg->getKey(),
+ 'params' => $msg->getParams(),
+ );
+ ApiResult::setIndexedTagName( $value['params'], 'param' );
+ break;
+
+ case 'none':
+ break;
+ }
+ $value += $msg->getApiData();
+
+ $path = array( $tag . 's', $moduleName );
+ $existing = $this->result->getResultData( $path );
+ if ( $existing === null || !in_array( $value, $existing ) ) {
+ $flags = ApiResult::NO_SIZE_CHECK;
+ if ( $existing === null ) {
+ $flags |= ApiResult::ADD_ON_TOP;
+ }
+ $this->result->addValue( $path, null, $value, $flags );
+ $this->result->addIndexedTagName( $path, $tag );
+ }
+ }
+}
+
+/**
+ * Format errors and warnings in the old style, for backwards compatibility.
+ * @since 1.25
+ * @deprecated Only for backwards compatibility, do not use
+ * @ingroup API
+ */
+class ApiErrorFormatter_BackCompat extends ApiErrorFormatter {
+ /**
+ * @param ApiResult $result Into which data will be added
+ */
+ public function __construct( ApiResult $result ) {
+ parent::__construct( $result, Language::factory( 'en' ), 'none', false );
+ }
+
+ public function arrayFromStatus( Status $status, $type = 'error', $format = null ) {
+ if ( $status->isGood() || !$status->errors ) {
+ return array();
+ }
+
+ $result = array();
+ foreach ( $status->getErrorsByType( $type ) as $error ) {
+ if ( $error['message'] instanceof Message ) {
+ $error = array(
+ 'message' => $error['message']->getKey(),
+ 'params' => $error['message']->getParams(),
+ ) + $error;
+ }
+ ApiResult::setIndexedTagName( $error['params'], 'param' );
+ $result[] = $error;
+ }
+ ApiResult::setIndexedTagName( $result, $type );
+
+ return $result;
+ }
+
+ protected function addWarningOrError( $tag, $moduleName, $msg ) {
+ $value = $msg->plain();
+
+ if ( $tag === 'error' ) {
+ // In BC mode, only one error
+ $code = $msg->getApiCode();
+ if ( isset( ApiBase::$messageMap[$code] ) ) {
+ // Backwards compatibility
+ $code = ApiBase::$messageMap[$code]['code'];
+ }
+
+ $value = array(
+ 'code' => $code,
+ 'info' => $value,
+ ) + $msg->getApiData();
+ $this->result->addValue( null, 'error', $value,
+ ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ } else {
+ // Don't add duplicate warnings
+ $tag .= 's';
+ $path = array( $tag, $moduleName );
+ $oldWarning = $this->result->getResultData( array( $tag, $moduleName, $tag ) );
+ if ( $oldWarning !== null ) {
+ $warnPos = strpos( $oldWarning, $value );
+ // If $value was found in $oldWarning, check if it starts at 0 or after "\n"
+ if ( $warnPos !== false && ( $warnPos === 0 || $oldWarning[$warnPos - 1] === "\n" ) ) {
+ // Check if $value is followed by "\n" or the end of the $oldWarning
+ $warnPos += strlen( $value );
+ if ( strlen( $oldWarning ) <= $warnPos || $oldWarning[$warnPos] === "\n" ) {
+ return;
+ }
+ }
+ // If there is a warning already, append it to the existing one
+ $value = "$oldWarning\n$value";
+ }
+ $this->result->addContentValue( $path, $tag, $value,
+ ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ }
+}
diff --git a/includes/api/ApiExpandTemplates.php b/includes/api/ApiExpandTemplates.php
index 8a3b534d..6d064eb2 100644
--- a/includes/api/ApiExpandTemplates.php
+++ b/includes/api/ApiExpandTemplates.php
@@ -52,10 +52,19 @@ class ApiExpandTemplates extends ApiBase {
$prop = array_flip( $params['prop'] );
}
- // Create title for parser
- $title_obj = Title::newFromText( $params['title'] );
- if ( !$title_obj || $title_obj->isExternal() ) {
- $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+ // Get title and revision ID for parser
+ $revid = $params['revid'];
+ if ( $revid !== null ) {
+ $rev = Revision::newFromId( $revid );
+ if ( !$rev ) {
+ $this->dieUsage( "There is no revision ID $revid", 'missingrev' );
+ }
+ $title_obj = $rev->getTitle();
+ } else {
+ $title_obj = Title::newFromText( $params['title'] );
+ if ( !$title_obj || $title_obj->isExternal() ) {
+ $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+ }
}
$result = $this->getResult();
@@ -75,7 +84,7 @@ class ApiExpandTemplates extends ApiBase {
$this->logFeatureUsage( 'action=expandtemplates&generatexml' );
}
- $wgParser->startExternalParse( $title_obj, $options, OT_PREPROCESS );
+ $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
$dom = $wgParser->preprocessToDom( $params['text'] );
if ( is_callable( array( $dom, 'saveXML' ) ) ) {
$xml = $dom->saveXML();
@@ -87,38 +96,45 @@ class ApiExpandTemplates extends ApiBase {
$retval['parsetree'] = $xml;
} else {
// the old way
- $xml_result = array();
- ApiResult::setContent( $xml_result, $xml );
- $result->addValue( null, 'parsetree', $xml_result );
+ $result->addValue( null, 'parsetree', $xml );
+ $result->addValue( null, ApiResult::META_BC_SUBELEMENTS, array( 'parsetree' ) );
}
}
// if they didn't want any output except (probably) the parse tree,
// then don't bother actually fully expanding it
if ( $prop || $params['prop'] === null ) {
- $wgParser->startExternalParse( $title_obj, $options, OT_PREPROCESS );
+ $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
$frame = $wgParser->getPreprocessor()->newFrame();
- $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, null, $frame );
+ $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, $revid, $frame );
if ( $params['prop'] === null ) {
// the old way
- ApiResult::setContent( $retval, $wikitext );
+ ApiResult::setContentValue( $retval, 'wikitext', $wikitext );
} else {
if ( isset( $prop['categories'] ) ) {
$categories = $wgParser->getOutput()->getCategories();
- if ( !empty( $categories ) ) {
+ if ( $categories ) {
$categories_result = array();
foreach ( $categories as $category => $sortkey ) {
$entry = array();
$entry['sortkey'] = $sortkey;
- ApiResult::setContent( $entry, $category );
+ ApiResult::setContentValue( $entry, 'category', $category );
$categories_result[] = $entry;
}
- $result->setIndexedTagName( $categories_result, 'category' );
+ ApiResult::setIndexedTagName( $categories_result, 'category' );
$retval['categories'] = $categories_result;
}
}
- if ( isset( $prop['volatile'] ) && $frame->isVolatile() ) {
- $retval['volatile'] = '';
+ if ( isset( $prop['properties'] ) ) {
+ $properties = $wgParser->getOutput()->getProperties();
+ if ( $properties ) {
+ ApiResult::setArrayType( $properties, 'BCkvp', 'name' );
+ ApiResult::setIndexedTagName( $properties, 'property' );
+ $retval['properties'] = $properties;
+ }
+ }
+ if ( isset( $prop['volatile'] ) ) {
+ $retval['volatile'] = $frame->isVolatile();
}
if ( isset( $prop['ttl'] ) && $frame->getTTL() !== null ) {
$retval['ttl'] = $frame->getTTL();
@@ -128,7 +144,7 @@ class ApiExpandTemplates extends ApiBase {
}
}
}
- $result->setSubelements( $retval, array( 'wikitext', 'parsetree' ) );
+ ApiResult::setSubelementsList( $retval, array( 'wikitext', 'parsetree' ) );
$result->addValue( null, $this->getModuleName(), $retval );
}
@@ -141,10 +157,14 @@ class ApiExpandTemplates extends ApiBase {
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
),
+ 'revid' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ),
'prop' => array(
ApiBase::PARAM_TYPE => array(
'wikitext',
'categories',
+ 'properties',
'volatile',
'ttl',
'parsetree',
@@ -159,35 +179,10 @@ class ApiExpandTemplates extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'text' => 'Wikitext to convert',
- 'title' => 'Title of page',
- 'prop' => array(
- 'Which pieces of information to get',
- ' wikitext - The expanded wikitext',
- ' categories - Any categories present in the input that are not represented in ' .
- 'the wikitext output',
- ' volatile - Whether the output is volatile and should not be reused ' .
- 'elsewhere within the page',
- ' ttl - The maximum time after which caches of the result should be ' .
- 'invalidated',
- ' parsetree - The XML parse tree of the input',
- 'Note that if no values are selected, the result will contain the wikitext,',
- 'but the output will be in a deprecated format.',
- ),
- 'includecomments' => 'Whether to include HTML comments in the output',
- 'generatexml' => 'Generate XML parse tree (replaced by prop=parsetree)',
- );
- }
-
- public function getDescription() {
- return 'Expands all templates in wikitext.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=expandtemplates&text={{Project:Sandbox}}'
+ 'action=expandtemplates&text={{Project:Sandbox}}'
+ => 'apihelp-expandtemplates-example-simple',
);
}
diff --git a/includes/api/ApiFeedContributions.php b/includes/api/ApiFeedContributions.php
index 374203eb..edda6723 100644
--- a/includes/api/ApiFeedContributions.php
+++ b/includes/api/ApiFeedContributions.php
@@ -95,7 +95,10 @@ class ApiFeedContributions extends ApiBase {
if ( ++$count > $limit ) {
break;
}
- $feedItems[] = $this->feedItem( $row );
+ $item = $this->feedItem( $row );
+ if ( $item !== null ) {
+ $feedItems[] = $item;
+ }
}
}
@@ -103,6 +106,23 @@ class ApiFeedContributions extends ApiBase {
}
protected function feedItem( $row ) {
+ // This hook is the api contributions equivalent to the
+ // ContributionsLineEnding hook. Hook implementers may cancel
+ // the hook to signal the user is not allowed to read this item.
+ $feedItem = null;
+ $hookResult = Hooks::run(
+ 'ApiFeedContributions::feedItem',
+ array( $row, $this->getContext(), &$feedItem )
+ );
+ // Hook returned a valid feed item
+ if ( $feedItem instanceof FeedItem ) {
+ return $feedItem;
+ // Hook was canceled and did not return a valid feed item
+ } elseif ( !$hookResult ) {
+ return null;
+ }
+
+ // Hook completed and did not return a valid feed item
$title = Title::makeTitle( intval( $row->page_namespace ), $row->page_title );
if ( $title && $title->userCan( 'read', $this->getUser() ) ) {
$date = $row->rev_timestamp;
@@ -161,7 +181,7 @@ class ApiFeedContributions extends ApiBase {
public function getAllowedParams() {
$feedFormatNames = array_keys( $this->getConfig()->get( 'FeedClasses' ) );
- return array(
+ $ret = array(
'feedformat' => array(
ApiBase::PARAM_DFLT => 'rss',
ApiBase::PARAM_TYPE => $feedFormatNames
@@ -187,32 +207,22 @@ class ApiFeedContributions extends ApiBase {
'deletedonly' => false,
'toponly' => false,
'newonly' => false,
- 'showsizediff' => false,
+ 'showsizediff' => array(
+ ApiBase::PARAM_DFLT => false,
+ ),
);
- }
- public function getParamDescription() {
- return array(
- 'feedformat' => 'The format of the feed',
- 'user' => 'What users to get the contributions for',
- 'namespace' => 'What namespace to filter the contributions by',
- 'year' => 'From year (and earlier)',
- 'month' => 'From month (and earlier)',
- 'tagfilter' => 'Filter contributions that have these tags',
- 'deletedonly' => 'Show only deleted contributions',
- 'toponly' => 'Only show edits that are latest revisions',
- 'newonly' => 'Only show edits that are page creations',
- 'showsizediff' => 'Show the size difference between revisions. Disabled in Miser Mode',
- );
- }
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['showsizediff'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+ }
- public function getDescription() {
- return 'Returns a user contributions feed.';
+ return $ret;
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=feedcontributions&user=Reedy',
+ 'action=feedcontributions&user=Example'
+ => 'apihelp-feedcontributions-example-simple',
);
}
}
diff --git a/includes/api/ApiFeedRecentChanges.php b/includes/api/ApiFeedRecentChanges.php
index 7239a296..d452bbd6 100644
--- a/includes/api/ApiFeedRecentChanges.php
+++ b/includes/api/ApiFeedRecentChanges.php
@@ -171,37 +171,12 @@ class ApiFeedRecentChanges extends ApiBase {
return $ret;
}
- public function getParamDescription() {
+ protected function getExamplesMessages() {
return array(
- 'feedformat' => 'The format of the feed',
- 'namespace' => 'Namespace to limit the results to',
- 'invert' => 'All namespaces but the selected one',
- 'associated' => 'Include associated (talk or main) namespace',
- 'days' => 'Days to limit the results to',
- 'limit' => 'Maximum number of results to return',
- 'from' => 'Show changes since then',
- 'hideminor' => 'Hide minor changes',
- 'hidebots' => 'Hide changes made by bots',
- 'hideanons' => 'Hide changes made by anonymous users',
- 'hideliu' => 'Hide changes made by registered users',
- 'hidepatrolled' => 'Hide patrolled changes',
- 'hidemyself' => 'Hide changes made by yourself',
- 'tagfilter' => 'Filter by tag',
- 'target' => 'Show only changes on pages linked from this page',
- 'showlinkedto' => 'Show changes on pages linked to the selected page instead',
- 'categories' => 'Show only changes on pages in all of these categories',
- 'categories_any' => 'Show only changes on pages in any of the categories instead',
- );
- }
-
- public function getDescription() {
- return 'Returns a recent changes feed';
- }
-
- public function getExamples() {
- return array(
- 'api.php?action=feedrecentchanges',
- 'api.php?action=feedrecentchanges&days=30'
+ 'action=feedrecentchanges'
+ => 'apihelp-feedrecentchanges-example-simple',
+ 'action=feedrecentchanges&days=30'
+ => 'apihelp-feedrecentchanges-example-30days',
);
}
}
diff --git a/includes/api/ApiFeedWatchlist.php b/includes/api/ApiFeedWatchlist.php
index 6aef8fc2..d1beef8a 100644
--- a/includes/api/ApiFeedWatchlist.php
+++ b/includes/api/ApiFeedWatchlist.php
@@ -112,12 +112,16 @@ class ApiFeedWatchlist extends ApiBase {
$module = new ApiMain( $fauxReq );
$module->execute();
- // Get data array
- $data = $module->getResultData();
-
+ $data = $module->getResult()->getResultData( array( 'query', 'watchlist' ) );
$feedItems = array();
- foreach ( (array)$data['query']['watchlist'] as $info ) {
- $feedItems[] = $this->createFeedItem( $info );
+ foreach ( (array)$data as $key => $info ) {
+ if ( ApiResult::isMetadataKey( $key ) ) {
+ continue;
+ }
+ $feedItem = $this->createFeedItem( $info );
+ if ( $feedItem ) {
+ $feedItems[] = $feedItem;
+ }
}
$msg = wfMessage( 'watchlist' )->inContentLanguage()->text();
@@ -166,10 +170,22 @@ class ApiFeedWatchlist extends ApiBase {
private function createFeedItem( $info ) {
$titleStr = $info['title'];
$title = Title::newFromText( $titleStr );
+ $curidParam = array();
+ if ( !$title || $title->isExternal() ) {
+ // Probably a formerly-valid title that's now conflicting with an
+ // interwiki prefix or the like.
+ if ( isset( $info['pageid'] ) ) {
+ $title = Title::newFromId( $info['pageid'] );
+ $curidParam = array( 'curid' => $info['pageid'] );
+ }
+ if ( !$title || $title->isExternal() ) {
+ return null;
+ }
+ }
if ( isset( $info['revid'] ) ) {
$titleUrl = $title->getFullURL( array( 'diff' => $info['revid'] ) );
} else {
- $titleUrl = $title->getFullURL();
+ $titleUrl = $title->getFullURL( $curidParam );
}
$comment = isset( $info['comment'] ) ? $info['comment'] : null;
@@ -219,50 +235,42 @@ class ApiFeedWatchlist extends ApiBase {
),
'linktosections' => false,
);
+
+ $copyParams = array(
+ 'allrev' => 'allrev',
+ 'owner' => 'wlowner',
+ 'token' => 'wltoken',
+ 'show' => 'wlshow',
+ 'type' => 'wltype',
+ 'excludeuser' => 'wlexcludeuser',
+ );
if ( $flags ) {
$wlparams = $this->getWatchlistModule()->getAllowedParams( $flags );
- $ret['allrev'] = $wlparams['allrev'];
- $ret['wlowner'] = $wlparams['owner'];
- $ret['wltoken'] = $wlparams['token'];
- $ret['wlshow'] = $wlparams['show'];
- $ret['wltype'] = $wlparams['type'];
- $ret['wlexcludeuser'] = $wlparams['excludeuser'];
+ foreach ( $copyParams as $from => $to ) {
+ $p = $wlparams[$from];
+ if ( !is_array( $p ) ) {
+ $p = array( ApiBase::PARAM_DFLT => $p );
+ }
+ if ( !isset( $p[ApiBase::PARAM_HELP_MSG] ) ) {
+ $p[ApiBase::PARAM_HELP_MSG] = "apihelp-query+watchlist-param-$from";
+ }
+ $ret[$to] = $p;
+ }
} else {
- $ret['allrev'] = null;
- $ret['wlowner'] = null;
- $ret['wltoken'] = null;
- $ret['wlshow'] = null;
- $ret['wltype'] = null;
- $ret['wlexcludeuser'] = null;
+ foreach ( $copyParams as $from => $to ) {
+ $ret[$to] = null;
+ }
}
return $ret;
}
- public function getParamDescription() {
- $wldescr = $this->getWatchlistModule()->getParamDescription();
-
- return array(
- 'feedformat' => 'The format of the feed',
- 'hours' => 'List pages modified within this many hours from now',
- 'linktosections' => 'Link directly to changed sections if possible',
- 'allrev' => $wldescr['allrev'],
- 'wlowner' => $wldescr['owner'],
- 'wltoken' => $wldescr['token'],
- 'wlshow' => $wldescr['show'],
- 'wltype' => $wldescr['type'],
- 'wlexcludeuser' => $wldescr['excludeuser'],
- );
- }
-
- public function getDescription() {
- return 'Returns a watchlist feed.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=feedwatchlist',
- 'api.php?action=feedwatchlist&allrev=&hours=6'
+ 'action=feedwatchlist'
+ => 'apihelp-feedwatchlist-example-default',
+ 'action=feedwatchlist&allrev=&hours=6'
+ => 'apihelp-feedwatchlist-example-all6hrs',
);
}
diff --git a/includes/api/ApiFileRevert.php b/includes/api/ApiFileRevert.php
index f518e172..5517ee08 100644
--- a/includes/api/ApiFileRevert.php
+++ b/includes/api/ApiFileRevert.php
@@ -61,7 +61,7 @@ class ApiFileRevert extends ApiBase {
} else {
$result = array(
'result' => 'Failure',
- 'errors' => $this->getResult()->convertStatusToArray( $status ),
+ 'errors' => $this->getErrorFormatter()->arrayFromStatus( $status ),
);
}
@@ -135,29 +135,15 @@ class ApiFileRevert extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'filename' => 'Target filename without the File: prefix',
- 'comment' => 'Upload comment',
- 'archivename' => 'Archive name of the revision to revert to',
- );
- }
-
- public function getDescription() {
- return array(
- 'Revert a file to an old version.'
- );
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=filerevert&filename=Wiki.png&comment=Revert&' .
+ 'action=filerevert&filename=Wiki.png&comment=Revert&' .
'archivename=20110305152740!Wiki.png&token=123ABC'
- => 'Revert Wiki.png to the version of 20110305152740',
+ => 'apihelp-filerevert-example-revert',
);
}
}
diff --git a/includes/api/ApiFormatBase.php b/includes/api/ApiFormatBase.php
index 9165ce88..d078dc45 100644
--- a/includes/api/ApiFormatBase.php
+++ b/includes/api/ApiFormatBase.php
@@ -30,8 +30,9 @@
* @ingroup API
*/
abstract class ApiFormatBase extends ApiBase {
- private $mIsHtml, $mFormat, $mUnescapeAmps, $mHelp, $mCleared;
- private $mBufferResult = false, $mBuffer, $mDisabled = false;
+ private $mIsHtml, $mFormat, $mUnescapeAmps, $mHelp;
+ private $mBuffer, $mDisabled = false;
+ protected $mForceDefaultParams = false;
/**
* If $format ends with 'fm', pretty-print the output in HTML.
@@ -48,25 +49,19 @@ abstract class ApiFormatBase extends ApiBase {
$this->mFormat = $format;
}
$this->mFormat = strtoupper( $this->mFormat );
- $this->mCleared = false;
}
/**
* Overriding class returns the MIME type that should be sent to the client.
- * This method is not called if getIsHtml() returns true.
+ *
+ * When getIsHtml() returns true, the return value here is used for syntax
+ * highlighting but the client sees text/html.
+ *
* @return string
*/
abstract public function getMimeType();
/**
- * Whether this formatter needs raw data such as _element tags
- * @return bool
- */
- public function getNeedsRawData() {
- return false;
- }
-
- /**
* Get the internal format name
* @return string
*/
@@ -75,19 +70,6 @@ abstract class ApiFormatBase extends ApiBase {
}
/**
- * Specify whether or not sequences like &amp;quot; should be unescaped
- * to &quot; . This should only be set to true for the help message
- * when rendered in the default (xmlfm) format. This is a temporary
- * special-case fix that should be removed once the help has been
- * reworked to use a fully HTML interface.
- *
- * @param bool $b Whether or not ampersands should be escaped.
- */
- public function setUnescapeAmps( $b ) {
- $this->mUnescapeAmps = $b;
- }
-
- /**
* Returns true when the HTML pretty-printer should be used.
* The default implementation assumes that formats ending with 'fm'
* should be formatted in HTML.
@@ -98,30 +80,27 @@ abstract class ApiFormatBase extends ApiBase {
}
/**
- * Whether this formatter can format the help message in a nice way.
- * By default, this returns the same as getIsHtml().
- * When action=help is set explicitly, the help will always be shown
- * @return bool
- */
- public function getWantsHelp() {
- return $this->getIsHtml();
- }
-
- /**
- * Disable the formatter completely. This causes calls to initPrinter(),
- * printText() and closePrinter() to be ignored.
+ * Disable the formatter.
+ *
+ * This causes calls to initPrinter() and closePrinter() to be ignored.
*/
public function disable() {
$this->mDisabled = true;
}
+ /**
+ * Whether the printer is disabled
+ * @return bool
+ */
public function isDisabled() {
return $this->mDisabled;
}
/**
- * Whether this formatter can handle printing API errors. If this returns
- * false, then on API errors the default printer will be instantiated.
+ * Whether this formatter can handle printing API errors.
+ *
+ * If this returns false, then on API errors the default printer will be
+ * instantiated.
* @since 1.23
* @return bool
*/
@@ -130,24 +109,47 @@ abstract class ApiFormatBase extends ApiBase {
}
/**
- * Initialize the printer function and prepare the output headers, etc.
- * This method must be the first outputting method during execution.
- * A human-targeted notice about available formats is printed for the HTML-based output,
- * except for help screens (caused by either an error in the API parameters,
- * the calling of action=help, or requesting the root script api.php).
- * @param bool $isHelpScreen Whether a help screen is going to be shown
+ * Ignore request parameters, force a default.
+ *
+ * Used as a fallback if errors are being thrown.
+ * @since 1.26
*/
- function initPrinter( $isHelpScreen ) {
+ public function forceDefaultParams() {
+ $this->mForceDefaultParams = true;
+ }
+
+ /**
+ * Overridden to honor $this->forceDefaultParams(), if applicable
+ * @since 1.26
+ */
+ protected function getParameterFromSettings( $paramName, $paramSettings, $parseLimit ) {
+ if ( !$this->mForceDefaultParams ) {
+ return parent::getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
+ }
+
+ if ( !is_array( $paramSettings ) ) {
+ return $paramSettings;
+ } elseif ( isset( $paramSettings[self::PARAM_DFLT] ) ) {
+ return $paramSettings[self::PARAM_DFLT];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Initialize the printer function and prepare the output headers.
+ * @param bool $unused Always false since 1.25
+ */
+ function initPrinter( $unused = false ) {
if ( $this->mDisabled ) {
return;
}
- $isHtml = $this->getIsHtml();
- $mime = $isHtml ? 'text/html' : $this->getMimeType();
- $script = wfScript( 'api' );
+
+ $mime = $this->getIsHtml() ? 'text/html' : $this->getMimeType();
// Some printers (ex. Feed) do their own header settings,
// in which case $mime will be set to null
- if ( is_null( $mime ) ) {
+ if ( $mime === null ) {
return; // skip any initialization
}
@@ -158,91 +160,64 @@ abstract class ApiFormatBase extends ApiBase {
if ( $apiFrameOptions ) {
$this->getMain()->getRequest()->response()->header( "X-Frame-Options: $apiFrameOptions" );
}
-
- if ( $isHtml ) {
-?>
-<!DOCTYPE HTML>
-<html>
-<head>
-<?php
- if ( $this->mUnescapeAmps ) {
-?> <title>MediaWiki API</title>
-<?php
- } else {
-?> <title>MediaWiki API Result</title>
-<?php
- }
-?>
-</head>
-<body>
-<?php
- if ( !$isHelpScreen ) {
-// @codingStandardsIgnoreStart Exclude long line from CodeSniffer checks
-?>
-<br />
-<small>
-You are looking at the HTML representation of the <?php echo $this->mFormat; ?> format.<br />
-HTML is good for debugging, but is unsuitable for application use.<br />
-Specify the format parameter to change the output format.<br />
-To see the non HTML representation of the <?php echo $this->mFormat; ?> format, set format=<?php echo strtolower( $this->mFormat ); ?>.<br />
-See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>, or
-<a href='<?php echo $script; ?>'>API help</a> for more information.
-</small>
-<pre style='white-space: pre-wrap;'>
-<?php
-// @codingStandardsIgnoreEnd
- // don't wrap the contents of the <pre> for help screens
- // because these are actually formatted to rely on
- // the monospaced font for layout purposes
- } else {
-?>
-<pre>
-<?php
- }
- }
}
/**
- * Finish printing. Closes HTML tags.
+ * Finish printing and output buffered data.
*/
public function closePrinter() {
if ( $this->mDisabled ) {
return;
}
- if ( $this->getIsHtml() ) {
-?>
-</pre>
-</body>
-</html>
-<?php
+ $mime = $this->getMimeType();
+ if ( $this->getIsHtml() && $mime !== null ) {
+ $format = $this->getFormat();
+ $result = $this->getBuffer();
+
+ $context = new DerivativeContext( $this->getMain() );
+ $context->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'apioutput' ) );
+ $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
+ $out = new OutputPage( $context );
+ $context->setOutput( $out );
+
+ $out->addModules( 'mediawiki.apipretty' );
+ $out->setPageTitle( $context->msg( 'api-format-title' ) );
+
+ $header = $context->msg( 'api-format-prettyprint-header' )
+ ->params( $format, strtolower( $format ) )
+ ->parseAsBlock();
+ $out->addHTML(
+ Html::rawElement( 'div', array( 'class' => 'api-pretty-header' ),
+ ApiHelp::fixHelpLinks( $header )
+ )
+ );
+
+ if ( Hooks::run( 'ApiFormatHighlight', array( $context, $result, $mime, $format ) ) ) {
+ $out->addHTML(
+ Html::element( 'pre', array( 'class' => 'api-pretty-content' ), $result )
+ );
+ }
+
+ // API handles its own clickjacking protection.
+ // Note, that $wgBreakFrames will still override $wgApiFrameOptions for format mode.
+ $out->allowClickJacking();
+ $out->output();
+ } else {
+ // For non-HTML output, clear all errors that might have been
+ // displayed if display_errors=On
+ ob_clean();
+
+ echo $this->getBuffer();
}
}
/**
- * The main format printing function. Call it to output the result
- * string to the user. This function will automatically output HTML
- * when format name ends in 'fm'.
+ * Append text to the output buffer.
* @param string $text
*/
public function printText( $text ) {
- if ( $this->mDisabled ) {
- return;
- }
- if ( $this->mBufferResult ) {
- $this->mBuffer = $text;
- } elseif ( $this->getIsHtml() ) {
- echo $this->formatHTML( $text );
- } else {
- // For non-HTML output, clear all errors that might have been
- // displayed if display_errors=On
- // Do this only once, of course
- if ( !$this->mCleared ) {
- ob_clean();
- $this->mCleared = true;
- }
- echo $text;
- }
+ $this->mBuffer .= $text;
}
/**
@@ -253,34 +228,89 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
return $this->mBuffer;
}
+ protected function getExamplesMessages() {
+ return array(
+ 'action=query&meta=siteinfo&siprop=namespaces&format=' . $this->getModuleName()
+ => array( 'apihelp-format-example-generic', $this->getFormat() )
+ );
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/API:Data_formats';
+ }
+
/**
- * Set the flag to buffer the result instead of printing it.
- * @param bool $value
+ * To avoid code duplication with the deprecation of dbg, dump, txt, wddx,
+ * and yaml, this method is added to do the necessary work. It should be
+ * removed when those deprecated formats are removed.
*/
- public function setBufferResult( $value ) {
- $this->mBufferResult = $value;
+ protected function markDeprecated() {
+ $fm = $this->getIsHtml() ? 'fm' : '';
+ $name = $this->getModuleName();
+ $this->logFeatureUsage( "format=$name" );
+ $this->setWarning( "format=$name has been deprecated. Please use format=json$fm instead." );
+ }
+
+ /************************************************************************//**
+ * @name Deprecated
+ * @{
+ */
+
+ /**
+ * Specify whether or not sequences like &amp;quot; should be unescaped
+ * to &quot; . This should only be set to true for the help message
+ * when rendered in the default (xmlfm) format. This is a temporary
+ * special-case fix that should be removed once the help has been
+ * reworked to use a fully HTML interface.
+ *
+ * @deprecated since 1.25
+ * @param bool $b Whether or not ampersands should be escaped.
+ */
+ public function setUnescapeAmps( $b ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ $this->mUnescapeAmps = $b;
+ }
+
+ /**
+ * Whether this formatter can format the help message in a nice way.
+ * By default, this returns the same as getIsHtml().
+ * When action=help is set explicitly, the help will always be shown
+ * @deprecated since 1.25
+ * @return bool
+ */
+ public function getWantsHelp() {
+ wfDeprecated( __METHOD__, '1.25' );
+ return $this->getIsHtml();
}
/**
* Sets whether the pretty-printer should format *bold*
+ * @deprecated since 1.25
* @param bool $help
*/
public function setHelp( $help = true ) {
+ wfDeprecated( __METHOD__, '1.25' );
$this->mHelp = $help;
}
/**
* Pretty-print various elements in HTML format, such as xml tags and
* URLs. This method also escapes characters like <
+ * @deprecated since 1.25
* @param string $text
* @return string
*/
protected function formatHTML( $text ) {
+ wfDeprecated( __METHOD__, '1.25' );
+
// Escape everything first for full coverage
$text = htmlspecialchars( $text );
- // encode all comments or tags as safe blue strings
- $text = str_replace( '&lt;', '<span style="color:blue;">&lt;', $text );
- $text = str_replace( '&gt;', '&gt;</span>', $text );
+
+ if ( $this->mFormat === 'XML' || $this->mFormat === 'WDDX' ) {
+ // encode all comments or tags as safe blue strings
+ $text = str_replace( '&lt;', '<span style="color:blue;">&lt;', $text );
+ $text = str_replace( '&gt;', '&gt;</span>', $text );
+ }
// identify requests to api.php
$text = preg_replace( '#^(\s*)(api\.php\?[^ <\n\t]+)$#m', '\1<a href="\2">\2</a>', $text );
@@ -325,30 +355,42 @@ See the <a href='https://www.mediawiki.org/wiki/API'>complete documentation</a>,
return $text;
}
- public function getExamples() {
- return array(
- 'api.php?action=query&meta=siteinfo&siprop=namespaces&format=' . $this->getModuleName()
- => "Format the query result in the {$this->getModuleName()} format",
- );
- }
-
- public function getHelpUrls() {
- return 'https://www.mediawiki.org/wiki/API:Data_formats';
- }
-
+ /**
+ * @see ApiBase::getDescription
+ * @deprecated since 1.25
+ */
public function getDescription() {
return $this->getIsHtml() ? ' (pretty-print in HTML)' : '';
}
/**
- * To avoid code duplication with the deprecation of dbg, dump, txt, wddx,
- * and yaml, this method is added to do the necessary work. It should be
- * removed when those deprecated formats are removed.
+ * Set the flag to buffer the result instead of printing it.
+ * @deprecated since 1.25, output is always buffered
+ * @param bool $value
*/
- protected function markDeprecated() {
- $fm = $this->getIsHtml() ? 'fm' : '';
- $name = $this->getModuleName();
- $this->logFeatureUsage( "format=$name" );
- $this->setWarning( "format=$name has been deprecated. Please use format=json$fm instead." );
+ public function setBufferResult( $value ) {
}
+
+ /**
+ * Formerly indicated whether the formatter needed metadata from ApiResult.
+ *
+ * ApiResult previously (indirectly) used this to decide whether to add
+ * metadata or to ignore calls to metadata-setting methods, which
+ * unfortunately made several methods that should have been static have to
+ * be dynamic instead. Now ApiResult always stores metadata and formatters
+ * are required to ignore it or filter it out.
+ *
+ * @deprecated since 1.25
+ * @return bool
+ */
+ public function getNeedsRawData() {
+ return false;
+ }
+
+ /**@}*/
}
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
diff --git a/includes/api/ApiFormatDbg.php b/includes/api/ApiFormatDbg.php
index 5ec518b3..7d359ad4 100644
--- a/includes/api/ApiFormatDbg.php
+++ b/includes/api/ApiFormatDbg.php
@@ -40,10 +40,15 @@ class ApiFormatDbg extends ApiFormatBase {
public function execute() {
$this->markDeprecated();
- $this->printText( var_export( $this->getResultData(), true ) );
+ $data = $this->getResult()->getResultData( null, array(
+ 'BC' => array(),
+ 'Types' => array(),
+ 'Strip' => 'all',
+ ) );
+ $this->printText( var_export( $data, true ) );
}
- public function getDescription() {
- return 'DEPRECATED! Output data in PHP\'s var_export() format' . parent::getDescription();
+ public function isDeprecated() {
+ return true;
}
}
diff --git a/includes/api/ApiFormatDump.php b/includes/api/ApiFormatDump.php
index d4c7cab4..f34e1ae4 100644
--- a/includes/api/ApiFormatDump.php
+++ b/includes/api/ApiFormatDump.php
@@ -40,14 +40,19 @@ class ApiFormatDump extends ApiFormatBase {
public function execute() {
$this->markDeprecated();
+ $data = $this->getResult()->getResultData( null, array(
+ 'BC' => array(),
+ 'Types' => array(),
+ 'Strip' => 'all',
+ ) );
ob_start();
- var_dump( $this->getResultData() );
+ var_dump( $data );
$result = ob_get_contents();
ob_end_clean();
$this->printText( $result );
}
- public function getDescription() {
- return 'DEPRECATED! Output data in PHP\'s var_dump() format' . parent::getDescription();
+ public function isDeprecated() {
+ return true;
}
}
diff --git a/includes/api/ApiFormatFeedWrapper.php b/includes/api/ApiFormatFeedWrapper.php
index 92600067..00747eef 100644
--- a/includes/api/ApiFormatFeedWrapper.php
+++ b/includes/api/ApiFormatFeedWrapper.php
@@ -46,8 +46,8 @@ class ApiFormatFeedWrapper extends ApiFormatBase {
// Disable size checking for this because we can't continue
// cleanly; size checking would cause more problems than it'd
// solve
- $result->addValue( null, '_feed', $feed, ApiResult::NO_SIZE_CHECK );
- $result->addValue( null, '_feeditems', $feedItems, ApiResult::NO_SIZE_CHECK );
+ $result->addValue( null, '_feed', $feed, ApiResult::NO_VALIDATE );
+ $result->addValue( null, '_feeditems', $feedItems, ApiResult::NO_VALIDATE );
}
/**
@@ -82,17 +82,41 @@ class ApiFormatFeedWrapper extends ApiFormatBase {
* $result['_feed'] - an instance of one of the $wgFeedClasses classes
* $result['_feeditems'] - an array of FeedItem instances
*/
+ public function initPrinter( $unused = false ) {
+ parent::initPrinter( $unused );
+
+ if ( $this->isDisabled() ) {
+ return;
+ }
+
+ $data = $this->getResult()->getResultData();
+ if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
+ $data['_feed']->httpHeaders();
+ } else {
+ // Error has occurred, print something useful
+ ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
+ }
+ }
+
+ /**
+ * This class expects the result data to be in a custom format set by self::setResult()
+ * $result['_feed'] - an instance of one of the $wgFeedClasses classes
+ * $result['_feeditems'] - an array of FeedItem instances
+ */
public function execute() {
- $data = $this->getResultData();
+ $data = $this->getResult()->getResultData();
if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
$feed = $data['_feed'];
$items = $data['_feeditems'];
+ // execute() needs to pass strings to $this->printText, not produce output itself.
+ ob_start();
$feed->outHeader();
foreach ( $items as & $item ) {
$feed->outItem( $item );
}
$feed->outFooter();
+ $this->printText( ob_get_clean() );
} else {
// Error has occurred, print something useful
ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
diff --git a/includes/api/ApiFormatJson.php b/includes/api/ApiFormatJson.php
index d9f9d46a..43877b78 100644
--- a/includes/api/ApiFormatJson.php
+++ b/includes/api/ApiFormatJson.php
@@ -30,39 +30,72 @@
*/
class ApiFormatJson extends ApiFormatBase {
- private $mIsRaw;
+ private $isRaw;
public function __construct( ApiMain $main, $format ) {
parent::__construct( $main, $format );
- $this->mIsRaw = ( $format === 'rawfm' );
+ $this->isRaw = ( $format === 'rawfm' );
}
public function getMimeType() {
$params = $this->extractRequestParams();
// callback:
- if ( $params['callback'] ) {
+ if ( isset( $params['callback'] ) ) {
return 'text/javascript';
}
return 'application/json';
}
+ /**
+ * @deprecated since 1.25
+ */
public function getNeedsRawData() {
- return $this->mIsRaw;
+ return $this->isRaw;
}
+ /**
+ * @deprecated since 1.25
+ */
public function getWantsHelp() {
+ wfDeprecated( __METHOD__, '1.25' );
// Help is always ugly in JSON
return false;
}
public function execute() {
$params = $this->extractRequestParams();
- $json = FormatJson::encode(
- $this->getResultData(),
- $this->getIsHtml(),
- $params['utf8'] ? FormatJson::ALL_OK : FormatJson::XMLMETA_OK
- );
+
+ $opt = 0;
+ if ( $this->isRaw ) {
+ $opt |= FormatJson::ALL_OK;
+ $transform = array();
+ } else {
+ switch ( $params['formatversion'] ) {
+ case 1:
+ $opt |= $params['utf8'] ? FormatJson::ALL_OK : FormatJson::XMLMETA_OK;
+ $transform = array(
+ 'BC' => array(),
+ 'Types' => array( 'AssocAsObject' => true ),
+ 'Strip' => 'all',
+ );
+ break;
+
+ case 2:
+ case 'latest':
+ $opt |= $params['ascii'] ? FormatJson::XMLMETA_OK : FormatJson::ALL_OK;
+ $transform = array(
+ 'Types' => array( 'AssocAsObject' => true ),
+ 'Strip' => 'all',
+ );
+ break;
+
+ default:
+ $this->dieUsage( __METHOD__ . ': Unknown value for \'formatversion\'', 'unknownformatversion' );
+ }
+ }
+ $data = $this->getResult()->getResultData( null, $transform );
+ $json = FormatJson::encode( $data, $this->getIsHtml(), $opt );
// Bug 66776: wfMangleFlashPolicy() is needed to avoid a nasty bug in
// Flash, but what it does isn't friendly for the API, so we need to
@@ -73,9 +106,8 @@ class ApiFormatJson extends ApiFormatBase {
);
}
- $callback = $params['callback'];
- if ( $callback !== null ) {
- $callback = preg_replace( "/[^][.\\'\\\"_A-Za-z0-9]/", '', $callback );
+ if ( isset( $params['callback'] ) ) {
+ $callback = preg_replace( "/[^][.\\'\\\"_A-Za-z0-9]/", '', $params['callback'] );
# Prepend a comment to try to avoid attacks against content
# sniffers, such as bug 68187.
$this->printText( "/**/$callback($json)" );
@@ -85,26 +117,28 @@ class ApiFormatJson extends ApiFormatBase {
}
public function getAllowedParams() {
- return array(
- 'callback' => null,
- 'utf8' => false,
- );
- }
-
- public function getParamDescription() {
- return array(
- 'callback' => 'If specified, wraps the output into a given function ' .
- 'call. For safety, all user-specific data will be restricted.',
- 'utf8' => 'If specified, encodes most (but not all) non-ASCII ' .
- 'characters as UTF-8 instead of replacing them with hexadecimal escape sequences.',
- );
- }
-
- public function getDescription() {
- if ( $this->mIsRaw ) {
- return 'Output data with the debugging elements in JSON format' . parent::getDescription();
+ if ( $this->isRaw ) {
+ return array();
}
- return 'Output data in JSON format' . parent::getDescription();
+ $ret = array(
+ 'callback' => array(
+ ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-callback',
+ ),
+ 'utf8' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-utf8',
+ ),
+ 'ascii' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-ascii',
+ ),
+ 'formatversion' => array(
+ ApiBase::PARAM_TYPE => array( 1, 2, 'latest' ),
+ ApiBase::PARAM_DFLT => 1,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-formatversion',
+ ),
+ );
+ return $ret;
}
}
diff --git a/includes/api/ApiFormatNone.php b/includes/api/ApiFormatNone.php
index 78023af3..dc623ac1 100644
--- a/includes/api/ApiFormatNone.php
+++ b/includes/api/ApiFormatNone.php
@@ -36,8 +36,4 @@ class ApiFormatNone extends ApiFormatBase {
public function execute() {
}
-
- public function getDescription() {
- return 'Output nothing' . parent::getDescription();
- }
}
diff --git a/includes/api/ApiFormatPhp.php b/includes/api/ApiFormatPhp.php
index 73ce80ef..d88dd40b 100644
--- a/includes/api/ApiFormatPhp.php
+++ b/includes/api/ApiFormatPhp.php
@@ -35,7 +35,29 @@ class ApiFormatPhp extends ApiFormatBase {
}
public function execute() {
- $text = serialize( $this->getResultData() );
+ $params = $this->extractRequestParams();
+
+ switch ( $params['formatversion'] ) {
+ case 1:
+ $transforms = array(
+ 'BC' => array(),
+ 'Types' => array(),
+ 'Strip' => 'all',
+ );
+ break;
+
+ case 2:
+ case 'latest':
+ $transforms = array(
+ 'Types' => array(),
+ 'Strip' => 'all',
+ );
+ break;
+
+ default:
+ $this->dieUsage( __METHOD__ . ': Unknown value for \'formatversion\'', 'unknownformatversion' );
+ }
+ $text = serialize( $this->getResult()->getResultData( null, $transforms ) );
// Bug 66776: wfMangleFlashPolicy() is needed to avoid a nasty bug in
// Flash, but what it does isn't friendly for the API. There's nothing
@@ -54,7 +76,14 @@ class ApiFormatPhp extends ApiFormatBase {
$this->printText( $text );
}
- public function getDescription() {
- return 'Output data in serialized PHP format' . parent::getDescription();
+ public function getAllowedParams() {
+ $ret = array(
+ 'formatversion' => array(
+ ApiBase::PARAM_TYPE => array( 1, 2, 'latest' ),
+ ApiBase::PARAM_DFLT => 1,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-php-param-formatversion',
+ ),
+ );
+ return $ret;
}
}
diff --git a/includes/api/ApiFormatRaw.php b/includes/api/ApiFormatRaw.php
index 3f5c8b73..7bb2453d 100644
--- a/includes/api/ApiFormatRaw.php
+++ b/includes/api/ApiFormatRaw.php
@@ -30,20 +30,22 @@
*/
class ApiFormatRaw extends ApiFormatBase {
+ private $errorFallback;
+
/**
* @param ApiMain $main
* @param ApiFormatBase $errorFallback Object to fall back on for errors
*/
public function __construct( ApiMain $main, ApiFormatBase $errorFallback ) {
parent::__construct( $main, 'raw' );
- $this->mErrorFallback = $errorFallback;
+ $this->errorFallback = $errorFallback;
}
public function getMimeType() {
- $data = $this->getResultData();
+ $data = $this->getResult()->getResultData();
if ( isset( $data['error'] ) ) {
- return $this->mErrorFallback->getMimeType();
+ return $this->errorFallback->getMimeType();
}
if ( !isset( $data['mime'] ) ) {
@@ -53,11 +55,28 @@ class ApiFormatRaw extends ApiFormatBase {
return $data['mime'];
}
- public function execute() {
- $data = $this->getResultData();
+ public function initPrinter( $unused = false ) {
+ $data = $this->getResult()->getResultData();
+ if ( isset( $data['error'] ) ) {
+ $this->errorFallback->initPrinter( $unused );
+ } else {
+ parent::initPrinter( $unused );
+ }
+ }
+
+ public function closePrinter() {
+ $data = $this->getResult()->getResultData();
if ( isset( $data['error'] ) ) {
- $this->mErrorFallback->execute();
+ $this->errorFallback->closePrinter();
+ } else {
+ parent::closePrinter();
+ }
+ }
+ public function execute() {
+ $data = $this->getResult()->getResultData();
+ if ( isset( $data['error'] ) ) {
+ $this->errorFallback->execute();
return;
}
diff --git a/includes/api/ApiFormatTxt.php b/includes/api/ApiFormatTxt.php
index c451ed77..e739d5a4 100644
--- a/includes/api/ApiFormatTxt.php
+++ b/includes/api/ApiFormatTxt.php
@@ -40,10 +40,15 @@ class ApiFormatTxt extends ApiFormatBase {
public function execute() {
$this->markDeprecated();
- $this->printText( print_r( $this->getResultData(), true ) );
+ $data = $this->getResult()->getResultData( null, array(
+ 'BC' => array(),
+ 'Types' => array(),
+ 'Strip' => 'all',
+ ) );
+ $this->printText( print_r( $data, true ) );
}
- public function getDescription() {
- return 'DEPRECATED! Output data in PHP\'s print_r() format' . parent::getDescription();
+ public function isDeprecated() {
+ return true;
}
}
diff --git a/includes/api/ApiFormatWddx.php b/includes/api/ApiFormatWddx.php
index ec3dc2d9..c18353fe 100644
--- a/includes/api/ApiFormatWddx.php
+++ b/includes/api/ApiFormatWddx.php
@@ -38,18 +38,30 @@ class ApiFormatWddx extends ApiFormatBase {
public function execute() {
$this->markDeprecated();
+ $data = $this->getResult()->getResultData( null, array(
+ 'BC' => array(),
+ 'Types' => array( 'AssocAsObject' => true ),
+ 'Strip' => 'all',
+ ) );
+
if ( !$this->getIsHtml() && !static::useSlowPrinter() ) {
- $this->printText( wddx_serialize_value( $this->getResultData() ) );
+ $txt = wddx_serialize_value( $data );
+ $txt = str_replace(
+ '<struct><var name=\'php_class_name\'><string>stdClass</string></var>',
+ '<struct>',
+ $txt
+ );
+ $this->printText( $txt );
} else {
// Don't do newlines and indentation if we weren't asked
// for pretty output
$nl = ( $this->getIsHtml() ? "\n" : '' );
- $indstr = ' ';
+ $indstr = ( $this->getIsHtml() ? ' ' : '' );
$this->printText( "<?xml version=\"1.0\"?>$nl" );
$this->printText( "<wddxPacket version=\"1.0\">$nl" );
- $this->printText( "$indstr<header/>$nl" );
+ $this->printText( "$indstr<header />$nl" );
$this->printText( "$indstr<data>$nl" );
- $this->slowWddxPrinter( $this->getResultData(), 4 );
+ $this->slowWddxPrinter( $data, 4 );
$this->printText( "$indstr</data>$nl" );
$this->printText( "</wddxPacket>$nl" );
}
@@ -102,44 +114,49 @@ class ApiFormatWddx extends ApiFormatBase {
$indstr = ( $this->getIsHtml() ? str_repeat( ' ', $indent ) : '' );
$indstr2 = ( $this->getIsHtml() ? str_repeat( ' ', $indent + 2 ) : '' );
$nl = ( $this->getIsHtml() ? "\n" : '' );
+
if ( is_array( $elemValue ) ) {
- // Check whether we've got an associative array (<struct>)
- // or a regular array (<array>)
$cnt = count( $elemValue );
- if ( $cnt == 0 || array_keys( $elemValue ) === range( 0, $cnt - 1 ) ) {
- // Regular array
- $this->printText( $indstr . Xml::element( 'array', array(
- 'length' => $cnt ), null ) . $nl );
- foreach ( $elemValue as $subElemValue ) {
- $this->slowWddxPrinter( $subElemValue, $indent + 2 );
- }
- $this->printText( "$indstr</array>$nl" );
- } else {
- // Associative array (<struct>)
- $this->printText( "$indstr<struct>$nl" );
- foreach ( $elemValue as $subElemName => $subElemValue ) {
- $this->printText( $indstr2 . Xml::element( 'var', array(
- 'name' => $subElemName
- ), null ) . $nl );
- $this->slowWddxPrinter( $subElemValue, $indent + 4 );
- $this->printText( "$indstr2</var>$nl" );
- }
- $this->printText( "$indstr</struct>$nl" );
+ if ( $cnt != 0 && array_keys( $elemValue ) !== range( 0, $cnt - 1 ) ) {
+ $elemValue = (object)$elemValue;
+ }
+ }
+
+ if ( is_array( $elemValue ) ) {
+ // Regular array
+ $this->printText( $indstr . Xml::element( 'array', array(
+ 'length' => count( $elemValue ) ), null ) . $nl );
+ foreach ( $elemValue as $subElemValue ) {
+ $this->slowWddxPrinter( $subElemValue, $indent + 2 );
+ }
+ $this->printText( "$indstr</array>$nl" );
+ } elseif ( is_object( $elemValue ) ) {
+ // Associative array (<struct>)
+ $this->printText( "$indstr<struct>$nl" );
+ foreach ( $elemValue as $subElemName => $subElemValue ) {
+ $this->printText( $indstr2 . Xml::element( 'var', array(
+ 'name' => $subElemName
+ ), null ) . $nl );
+ $this->slowWddxPrinter( $subElemValue, $indent + 4 );
+ $this->printText( "$indstr2</var>$nl" );
}
+ $this->printText( "$indstr</struct>$nl" );
} elseif ( is_int( $elemValue ) || is_float( $elemValue ) ) {
$this->printText( $indstr . Xml::element( 'number', null, $elemValue ) . $nl );
} elseif ( is_string( $elemValue ) ) {
- $this->printText( $indstr . Xml::element( 'string', null, $elemValue ) . $nl );
+ $this->printText( $indstr . Xml::element( 'string', null, $elemValue, false ) . $nl );
} elseif ( is_bool( $elemValue ) ) {
$this->printText( $indstr . Xml::element( 'boolean',
array( 'value' => $elemValue ? 'true' : 'false' ) ) . $nl
);
+ } elseif ( $elemValue === null ) {
+ $this->printText( $indstr . Xml::element( 'null', array() ) . $nl );
} else {
ApiBase::dieDebug( __METHOD__, 'Unknown type ' . gettype( $elemValue ) );
}
}
- public function getDescription() {
- return 'DEPRECATED! Output data in WDDX format' . parent::getDescription();
+ public function isDeprecated() {
+ return true;
}
}
diff --git a/includes/api/ApiFormatXml.php b/includes/api/ApiFormatXml.php
index b3d59379..fa0bac34 100644
--- a/includes/api/ApiFormatXml.php
+++ b/includes/api/ApiFormatXml.php
@@ -39,6 +39,9 @@ class ApiFormatXml extends ApiFormatBase {
return 'text/xml';
}
+ /**
+ * @deprecated since 1.25
+ */
public function getNeedsRawData() {
return true;
}
@@ -56,18 +59,32 @@ class ApiFormatXml extends ApiFormatBase {
if ( !is_null( $this->mXslt ) ) {
$this->addXslt();
}
- if ( $this->mIncludeNamespace ) {
+
+ $result = $this->getResult();
+ if ( $this->mIncludeNamespace && $result->getResultData( 'xmlns' ) === null ) {
// If the result data already contains an 'xmlns' namespace added
// for custom XML output types, it will override the one for the
// generic API results.
// This allows API output of other XML types like Atom, RSS, RSD.
- $data = $this->getResultData() + array( 'xmlns' => self::$namespace );
- } else {
- $data = $this->getResultData();
+ $result->addValue( null, 'xmlns', self::$namespace, ApiResult::NO_SIZE_CHECK );
}
+ $data = $result->getResultData( null, array(
+ 'Custom' => function ( &$data, &$metadata ) {
+ if ( isset( $metadata[ApiResult::META_TYPE] ) ) {
+ // We want to use non-BC for BCassoc to force outputting of _idx.
+ switch( $metadata[ApiResult::META_TYPE] ) {
+ case 'BCassoc':
+ $metadata[ApiResult::META_TYPE] = 'assoc';
+ break;
+ }
+ }
+ },
+ 'BC' => array( 'nobool', 'no*', 'nosub' ),
+ 'Types' => array( 'ArmorKVP' => '_name' ),
+ ) );
$this->printText(
- self::recXmlPrint( $this->mRootElemName,
+ static::recXmlPrint( $this->mRootElemName,
$data,
$this->getIsHtml() ? -2 : null
)
@@ -77,143 +94,185 @@ class ApiFormatXml extends ApiFormatBase {
/**
* This method takes an array and converts it to XML.
*
- * There are several noteworthy cases:
- *
- * If array contains a key '_element', then the code assumes that ALL
- * other keys are not important and replaces them with the
- * value['_element'].
- *
- * @par Example:
- * @verbatim
- * name='root', value = array( '_element'=>'page', 'x', 'y', 'z')
- * @endverbatim
- * creates:
- * @verbatim
- * <root> <page>x</page> <page>y</page> <page>z</page> </root>
- * @endverbatim
- *
- * If any of the array's element key is '*', then the code treats all
- * other key->value pairs as attributes, and the value['*'] as the
- * element's content.
- *
- * @par Example:
- * @verbatim
- * name='root', value = array( '*'=>'text', 'lang'=>'en', 'id'=>10)
- * @endverbatim
- * creates:
- * @verbatim
- * <root lang='en' id='10'>text</root>
- * @endverbatim
- *
- * Finally neither key is found, all keys become element names, and values
- * become element content.
- *
- * @note The method is recursive, so the same rules apply to any
- * sub-arrays.
- *
- * @param string $elemName
- * @param mixed $elemValue
- * @param int $indent
- *
+ * @param string|null $name Tag name
+ * @param mixed $value Tag value (attributes/content/subelements)
+ * @param int|null $indent Indentation
+ * @param array $attributes Additional attributes
* @return string
*/
- public static function recXmlPrint( $elemName, $elemValue, $indent ) {
+ public static function recXmlPrint( $name, $value, $indent, $attributes = array() ) {
$retval = '';
- if ( !is_null( $indent ) ) {
- $indent += 2;
+ if ( $indent !== null ) {
+ if ( $name !== null ) {
+ $indent += 2;
+ }
$indstr = "\n" . str_repeat( ' ', $indent );
} else {
$indstr = '';
}
- $elemName = str_replace( ' ', '_', $elemName );
-
- if ( is_array( $elemValue ) ) {
- if ( isset( $elemValue['*'] ) ) {
- $subElemContent = $elemValue['*'];
- unset( $elemValue['*'] );
- // Add xml:space="preserve" to the
- // element so XML parsers will leave
- // whitespace in the content alone
- $elemValue['xml:space'] = 'preserve';
- } else {
- $subElemContent = null;
+ if ( is_object( $value ) ) {
+ $value = (array)$value;
+ }
+ if ( is_array( $value ) ) {
+ $contentKey = isset( $value[ApiResult::META_CONTENT] )
+ ? $value[ApiResult::META_CONTENT]
+ : '*';
+ $subelementKeys = isset( $value[ApiResult::META_SUBELEMENTS] )
+ ? $value[ApiResult::META_SUBELEMENTS]
+ : array();
+ if ( isset( $value[ApiResult::META_BC_SUBELEMENTS] ) ) {
+ $subelementKeys = array_merge(
+ $subelementKeys, $value[ApiResult::META_BC_SUBELEMENTS]
+ );
}
+ $preserveKeys = isset( $value[ApiResult::META_PRESERVE_KEYS] )
+ ? $value[ApiResult::META_PRESERVE_KEYS]
+ : array();
+ $indexedTagName = isset( $value[ApiResult::META_INDEXED_TAG_NAME] )
+ ? self::mangleName( $value[ApiResult::META_INDEXED_TAG_NAME], $preserveKeys )
+ : '_v';
+ $bcBools = isset( $value[ApiResult::META_BC_BOOLS] )
+ ? $value[ApiResult::META_BC_BOOLS]
+ : array();
+ $indexSubelements = isset( $value[ApiResult::META_TYPE] )
+ ? $value[ApiResult::META_TYPE] !== 'array'
+ : false;
- if ( isset( $elemValue['_element'] ) ) {
- $subElemIndName = $elemValue['_element'];
- unset( $elemValue['_element'] );
- } else {
- $subElemIndName = null;
- }
+ $content = null;
+ $subelements = array();
+ $indexedSubelements = array();
+ foreach ( $value as $k => $v ) {
+ if ( ApiResult::isMetadataKey( $k ) && !in_array( $k, $preserveKeys, true ) ) {
+ continue;
+ }
- if ( isset( $elemValue['_subelements'] ) ) {
- foreach ( $elemValue['_subelements'] as $subElemId ) {
- if ( isset( $elemValue[$subElemId] ) && !is_array( $elemValue[$subElemId] ) ) {
- $elemValue[$subElemId] = array( '*' => $elemValue[$subElemId] );
- }
+ $oldv = $v;
+ if ( is_bool( $v ) && !in_array( $k, $bcBools, true ) ) {
+ $v = $v ? 'true' : 'false';
}
- unset( $elemValue['_subelements'] );
- }
- $indElements = array();
- $subElements = array();
- foreach ( $elemValue as $subElemId => & $subElemValue ) {
- if ( is_int( $subElemId ) ) {
- $indElements[] = $subElemValue;
- unset( $elemValue[$subElemId] );
- } elseif ( is_array( $subElemValue ) ) {
- $subElements[$subElemId] = $subElemValue;
- unset( $elemValue[$subElemId] );
- } elseif ( is_bool( $subElemValue ) ) {
- // treat true as empty string, skip false in xml format
- if ( $subElemValue === true ) {
- $subElemValue = '';
- } else {
- unset( $elemValue[$subElemId] );
+ if ( $name !== null && $k === $contentKey ) {
+ $content = $v;
+ } elseif ( is_int( $k ) ) {
+ $indexedSubelements[$k] = $v;
+ } elseif ( is_array( $v ) || is_object( $v ) ) {
+ $subelements[self::mangleName( $k, $preserveKeys )] = $v;
+ } elseif ( in_array( $k, $subelementKeys, true ) || $name === null ) {
+ $subelements[self::mangleName( $k, $preserveKeys )] = array(
+ 'content' => $v,
+ ApiResult::META_CONTENT => 'content',
+ ApiResult::META_TYPE => 'assoc',
+ );
+ } elseif ( is_bool( $oldv ) ) {
+ if ( $oldv ) {
+ $attributes[self::mangleName( $k, $preserveKeys )] = '';
}
+ } elseif ( $v !== null ) {
+ $attributes[self::mangleName( $k, $preserveKeys )] = $v;
}
}
- if ( is_null( $subElemIndName ) && count( $indElements ) ) {
- ApiBase::dieDebug( __METHOD__, "($elemName, ...) has integer keys " .
- "without _element value. Use ApiResult::setIndexedTagName()." );
- }
-
- if ( count( $subElements ) && count( $indElements ) && !is_null( $subElemContent ) ) {
- ApiBase::dieDebug( __METHOD__, "($elemName, ...) has content and subelements" );
+ if ( $content !== null ) {
+ if ( $subelements || $indexedSubelements ) {
+ $subelements[self::mangleName( $contentKey, $preserveKeys )] = array(
+ 'content' => $content,
+ ApiResult::META_CONTENT => 'content',
+ ApiResult::META_TYPE => 'assoc',
+ );
+ $content = null;
+ } elseif ( is_scalar( $content ) ) {
+ // Add xml:space="preserve" to the element so XML parsers
+ // will leave whitespace in the content alone
+ $attributes += array( 'xml:space' => 'preserve' );
+ }
}
- if ( !is_null( $subElemContent ) ) {
- $retval .= $indstr . Xml::element( $elemName, $elemValue, $subElemContent );
- } elseif ( !count( $indElements ) && !count( $subElements ) ) {
- $retval .= $indstr . Xml::element( $elemName, $elemValue );
+ if ( $content !== null ) {
+ if ( is_scalar( $content ) ) {
+ $retval .= $indstr . Xml::element( $name, $attributes, $content );
+ } else {
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::element( $name, $attributes, null );
+ }
+ $retval .= static::recXmlPrint( null, $content, $indent );
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::closeElement( $name );
+ }
+ }
+ } elseif ( !$indexedSubelements && !$subelements ) {
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::element( $name, $attributes );
+ }
} else {
- $retval .= $indstr . Xml::element( $elemName, $elemValue, null );
-
- foreach ( $subElements as $subElemId => & $subElemValue ) {
- $retval .= self::recXmlPrint( $subElemId, $subElemValue, $indent );
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::element( $name, $attributes, null );
}
-
- foreach ( $indElements as &$subElemValue ) {
- $retval .= self::recXmlPrint( $subElemIndName, $subElemValue, $indent );
+ foreach ( $subelements as $k => $v ) {
+ $retval .= static::recXmlPrint( $k, $v, $indent );
+ }
+ foreach ( $indexedSubelements as $k => $v ) {
+ $retval .= static::recXmlPrint( $indexedTagName, $v, $indent,
+ $indexSubelements ? array( '_idx' => $k ) : array()
+ );
+ }
+ if ( $name !== null ) {
+ $retval .= $indstr . Xml::closeElement( $name );
}
-
- $retval .= $indstr . Xml::closeElement( $elemName );
}
- } elseif ( !is_object( $elemValue ) ) {
+ } else {
// to make sure null value doesn't produce unclosed element,
- // which is what Xml::element( $elemName, null, null ) returns
- if ( $elemValue === null ) {
- $retval .= $indstr . Xml::element( $elemName );
+ // which is what Xml::element( $name, null, null ) returns
+ if ( $value === null ) {
+ $retval .= $indstr . Xml::element( $name, $attributes );
} else {
- $retval .= $indstr . Xml::element( $elemName, null, $elemValue );
+ $retval .= $indstr . Xml::element( $name, $attributes, $value );
}
}
return $retval;
}
+ /**
+ * Mangle XML-invalid names to be valid in XML
+ * @param string $name
+ * @param array $preserveKeys Names to not mangle
+ * @return string Mangled name
+ */
+ private static function mangleName( $name, $preserveKeys = array() ) {
+ static $nsc = null, $nc = null;
+
+ if ( in_array( $name, $preserveKeys, true ) ) {
+ return $name;
+ }
+
+ if ( $name === '' ) {
+ return '_';
+ }
+
+ if ( $nsc === null ) {
+ // Note we omit ':' from $nsc and $nc because it's reserved for XML
+ // namespacing, and we omit '_' from $nsc (but not $nc) because we
+ // reserve it.
+ $nsc = 'A-Za-z\x{C0}-\x{D6}\x{D8}-\x{F6}\x{F8}-\x{2FF}\x{370}-\x{37D}\x{37F}-\x{1FFF}' .
+ '\x{200C}-\x{200D}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}' .
+ '\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}';
+ $nc = $nsc . '_\-.0-9\x{B7}\x{300}-\x{36F}\x{203F}-\x{2040}';
+ }
+
+ if ( preg_match( "/^[$nsc][$nc]*$/uS", $name ) ) {
+ return $name;
+ }
+
+ return '_' . preg_replace_callback(
+ "/[^$nc]/uS",
+ function ( $m ) {
+ return sprintf( '.%X.', utf8ToCodepoint( $m[0] ) );
+ },
+ str_replace( '.', '.2E.', $name )
+ );
+ }
+
function addXslt() {
$nt = Title::newFromText( $this->mXslt );
if ( is_null( $nt ) || !$nt->exists() ) {
@@ -237,20 +296,13 @@ class ApiFormatXml extends ApiFormatBase {
public function getAllowedParams() {
return array(
- 'xslt' => null,
- 'includexmlnamespace' => false,
+ 'xslt' => array(
+ ApiBase::PARAM_HELP_MSG => 'apihelp-xml-param-xslt',
+ ),
+ 'includexmlnamespace' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-xml-param-includexmlnamespace',
+ ),
);
}
-
- public function getParamDescription() {
- return array(
- 'xslt' => 'If specified, adds <xslt> as stylesheet. This should be a wiki page '
- . 'in the MediaWiki namespace whose page name ends with ".xsl"',
- 'includexmlnamespace' => 'If specified, adds an XML namespace'
- );
- }
-
- public function getDescription() {
- return 'Output data in XML format' . parent::getDescription();
- }
}
diff --git a/includes/api/ApiFormatYaml.php b/includes/api/ApiFormatYaml.php
index 3798f894..c9089a7d 100644
--- a/includes/api/ApiFormatYaml.php
+++ b/includes/api/ApiFormatYaml.php
@@ -40,7 +40,7 @@ class ApiFormatYaml extends ApiFormatJson {
parent::execute();
}
- public function getDescription() {
- return 'DEPRECATED! Output data in YAML format' . ApiFormatBase::getDescription();
+ public function isDeprecated() {
+ return true;
}
}
diff --git a/includes/api/ApiHelp.php b/includes/api/ApiHelp.php
index bcd6c12e..53e8c343 100644
--- a/includes/api/ApiHelp.php
+++ b/includes/api/ApiHelp.php
@@ -2,9 +2,9 @@
/**
*
*
- * Created on Sep 6, 2006
+ * Created on Aug 29, 2014
*
- * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ * Copyright © 2014 Brad Jorsch <bjorsch@wikimedia.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,102 +25,596 @@
*/
/**
- * This is a simple class to handle action=help
+ * Class to output help for an API module
*
+ * @since 1.25 completely rewritten
* @ingroup API
*/
class ApiHelp extends ApiBase {
- /**
- * Module for displaying help
- */
public function execute() {
- // Get parameters
$params = $this->extractRequestParams();
+ $modules = array();
- if ( !isset( $params['modules'] ) && !isset( $params['querymodules'] ) ) {
- $this->dieUsage( '', 'help' );
+ foreach ( $params['modules'] as $path ) {
+ $modules[] = $this->getModuleFromPath( $path );
}
- $this->getMain()->setHelp();
- $result = $this->getResult();
+ // Get the help
+ $context = new DerivativeContext( $this->getMain()->getContext() );
+ $context->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'apioutput' ) );
+ $context->setLanguage( $this->getMain()->getLanguage() );
+ $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
+ $out = new OutputPage( $context );
+ $context->setOutput( $out );
+
+ self::getHelp( $context, $modules, $params );
- if ( is_array( $params['modules'] ) ) {
- $modules = $params['modules'];
+ // Grab the output from the skin
+ ob_start();
+ $context->getOutput()->output();
+ $html = ob_get_clean();
+
+ $result = $this->getResult();
+ if ( $params['wrap'] ) {
+ $data = array(
+ 'mime' => 'text/html',
+ 'help' => $html,
+ );
+ ApiResult::setSubelementsList( $data, 'help' );
+ $result->addValue( null, $this->getModuleName(), $data );
} else {
- $modules = array();
+ $result->reset();
+ $result->addValue( null, 'text', $html, ApiResult::NO_SIZE_CHECK );
+ $result->addValue( null, 'mime', 'text/html', ApiResult::NO_SIZE_CHECK );
+ }
+ }
+
+ /**
+ * Generate help for the specified modules
+ *
+ * Help is placed into the OutputPage object returned by
+ * $context->getOutput().
+ *
+ * Recognized options include:
+ * - headerlevel: (int) Header tag level
+ * - nolead: (bool) Skip the inclusion of api-help-lead
+ * - noheader: (bool) Skip the inclusion of the top-level section headers
+ * - submodules: (bool) Include help for submodules of the current module
+ * - recursivesubmodules: (bool) Include help for submodules recursively
+ * - helptitle: (string) Title to link for additional modules' help. Should contain $1.
+ *
+ * @param IContextSource $context
+ * @param ApiBase[]|ApiBase $modules
+ * @param array $options Formatting options (described above)
+ * @return string
+ */
+ public static function getHelp( IContextSource $context, $modules, array $options ) {
+ global $wgMemc, $wgContLang;
+
+ if ( !is_array( $modules ) ) {
+ $modules = array( $modules );
}
- if ( is_array( $params['querymodules'] ) ) {
- $this->logFeatureUsage( 'action=help&querymodules' );
- $queryModules = $params['querymodules'];
- foreach ( $queryModules as $m ) {
- $modules[] = 'query+' . $m;
+ $out = $context->getOutput();
+ $out->addModules( 'mediawiki.apihelp' );
+ $out->setPageTitle( $context->msg( 'api-help-title' ) );
+
+ $cacheKey = null;
+ if ( count( $modules ) == 1 && $modules[0] instanceof ApiMain &&
+ $options['recursivesubmodules'] && $context->getLanguage() === $wgContLang
+ ) {
+ $cacheHelpTimeout = $context->getConfig()->get( 'APICacheHelpTimeout' );
+ if ( $cacheHelpTimeout > 0 ) {
+ // Get help text from cache if present
+ $cacheKey = wfMemcKey( 'apihelp', $modules[0]->getModulePath(),
+ str_replace( ' ', '_', SpecialVersion::getVersion( 'nodb' ) ) );
+ $cached = $wgMemc->get( $cacheKey );
+ if ( $cached ) {
+ $out->addHTML( $cached );
+ return;
+ }
}
- } else {
- $queryModules = array();
}
+ if ( $out->getHTML() !== '' ) {
+ // Don't save to cache, there's someone else's content in the page
+ // already
+ $cacheKey = null;
+ }
+
+ $options['recursivesubmodules'] = !empty( $options['recursivesubmodules'] );
+ $options['submodules'] = $options['recursivesubmodules'] || !empty( $options['submodules'] );
- $r = array();
- foreach ( $modules as $m ) {
- // sub-modules could be given in the form of "name[+name[+name...]]"
- $subNames = explode( '+', $m );
- if ( count( $subNames ) === 1 ) {
- // In case the '+' was typed into URL, it resolves as a space
- $subNames = explode( ' ', $m );
+ // Prepend lead
+ if ( empty( $options['nolead'] ) ) {
+ $msg = $context->msg( 'api-help-lead' );
+ if ( !$msg->isDisabled() ) {
+ $out->addHTML( $msg->parseAsBlock() );
}
+ }
- $module = $this->getMain();
- $subNamesCount = count( $subNames );
- for ( $i = 0; $i < $subNamesCount; $i++ ) {
- $subs = $module->getModuleManager();
- if ( $subs === null ) {
- $module = null;
- } else {
- $module = $subs->getModule( $subNames[$i] );
- }
+ $haveModules = array();
+ $out->addHTML( self::getHelpInternal( $context, $modules, $options, $haveModules ) );
- if ( $module === null ) {
- if ( count( $subNames ) === 2
- && $i === 1
- && $subNames[0] === 'query'
- && in_array( $subNames[1], $queryModules )
- ) {
- // Legacy: This is one of the renamed 'querymodule=...' parameters,
- // do not use '+' notation in the output, use submodule's name instead.
- $name = $subNames[1];
- } else {
- $name = implode( '+', array_slice( $subNames, 0, $i + 1 ) );
- }
- $r[] = array( 'name' => $name, 'missing' => '' );
- break;
+ $helptitle = isset( $options['helptitle'] ) ? $options['helptitle'] : null;
+ $html = self::fixHelpLinks( $out->getHTML(), $helptitle, $haveModules );
+ $out->clearHTML();
+ $out->addHTML( $html );
+
+ if ( $cacheKey !== null ) {
+ $wgMemc->set( $cacheKey, $out->getHTML(), $cacheHelpTimeout );
+ }
+ }
+
+ /**
+ * Replace Special:ApiHelp links with links to api.php
+ *
+ * @param string $html
+ * @param string|null $helptitle Title to link to rather than api.php, must contain '$1'
+ * @param array $localModules Modules to link within the current page
+ * @return string
+ */
+ public static function fixHelpLinks( $html, $helptitle = null, $localModules = array() ) {
+ $formatter = new HtmlFormatter( $html );
+ $doc = $formatter->getDoc();
+ $xpath = new DOMXPath( $doc );
+ $nodes = $xpath->query( '//a[@href][not(contains(@class,\'apihelp-linktrail\'))]' );
+ foreach ( $nodes as $node ) {
+ $href = $node->getAttribute( 'href' );
+ do {
+ $old = $href;
+ $href = rawurldecode( $href );
+ } while ( $old !== $href );
+ if ( preg_match( '!Special:ApiHelp/([^&/|]+)!', $href, $m ) ) {
+ if ( isset( $localModules[$m[1]] ) ) {
+ $href = '#' . $m[1];
+ } elseif ( $helptitle !== null ) {
+ $href = Title::newFromText( str_replace( '$1', $m[1], $helptitle ) )
+ ->getFullUrl();
} else {
- $type = $subs->getModuleGroup( $subNames[$i] );
+ $href = wfAppendQuery( wfScript( 'api' ), array(
+ 'action' => 'help',
+ 'modules' => $m[1],
+ ) );
}
- }
-
- if ( $module !== null ) {
- $r[] = $this->buildModuleHelp( $module, $type );
+ $node->setAttribute( 'href', $href );
+ $node->removeAttribute( 'title' );
}
}
- $result->setIndexedTagName( $r, 'module' );
- $result->addValue( null, $this->getModuleName(), $r );
+ return $formatter->getText();
}
/**
- * @param ApiBase $module
- * @param string $type What type of request is this? e.g. action, query, list, prop, meta, format
+ * Wrap a message in HTML with a class.
+ *
+ * @param Message $msg
+ * @param string $class
+ * @param string $tag
* @return string
*/
- private function buildModuleHelp( $module, $type ) {
- $msg = ApiMain::makeHelpMsgHeader( $module, $type );
+ private static function wrap( Message $msg, $class, $tag = 'span' ) {
+ return Html::rawElement( $tag, array( 'class' => $class ),
+ $msg->parse()
+ );
+ }
+
+ /**
+ * Recursively-called function to actually construct the help
+ *
+ * @param IContextSource $context
+ * @param ApiBase[] $modules
+ * @param array $options
+ * @param array &$haveModules
+ * @return string
+ */
+ private static function getHelpInternal( IContextSource $context, array $modules,
+ array $options, &$haveModules
+ ) {
+ $out = '';
+
+ $level = min( 6, empty( $options['headerlevel'] ) ? 2 : $options['headerlevel'] );
+ $options['headerlevel'] = $level;
+
+ foreach ( $modules as $module ) {
+ $haveModules[$module->getModulePath()] = true;
+ $module->setContext( $context );
+ $help = array(
+ 'header' => '',
+ 'flags' => '',
+ 'description' => '',
+ 'help-urls' => '',
+ 'parameters' => '',
+ 'examples' => '',
+ 'submodules' => '',
+ );
+
+ if ( empty( $options['noheader'] ) ) {
+ $path = $module->getModulePath();
+ if ( $module->isMain() ) {
+ $header = $context->msg( 'api-help-main-header' )->parse();
+ } else {
+ $name = $module->getModuleName();
+ $header = $module->getParent()->getModuleManager()->getModuleGroup( $name ) .
+ "=$name";
+ if ( $module->getModulePrefix() !== '' ) {
+ $header .= ' ' .
+ $context->msg( 'parentheses', $module->getModulePrefix() )->parse();
+ }
+ }
+ $help['header'] .= Html::element( "h$level",
+ array( 'id' => $path, 'class' => 'apihelp-header' ),
+ $header
+ );
+ }
+
+ $links = array();
+ $any = false;
+ for ( $m = $module; $m !== null; $m = $m->getParent() ) {
+ $name = $m->getModuleName();
+ if ( $name === 'main_int' ) {
+ $name = 'main';
+ }
- $msg2 = $module->makeHelpMsg();
- if ( $msg2 !== false ) {
- $msg .= $msg2;
+ if ( count( $modules ) === 1 && $m === $modules[0] &&
+ !( !empty( $options['submodules'] ) && $m->getModuleManager() )
+ ) {
+ $link = Html::element( 'b', null, $name );
+ } else {
+ $link = SpecialPage::getTitleFor( 'ApiHelp', $m->getModulePath() )->getLocalURL();
+ $link = Html::element( 'a',
+ array( 'href' => $link, 'class' => 'apihelp-linktrail' ),
+ $name
+ );
+ $any = true;
+ }
+ array_unshift( $links, $link );
+ }
+ if ( $any ) {
+ $help['header'] .= self::wrap(
+ $context->msg( 'parentheses' )
+ ->rawParams( $context->getLanguage()->pipeList( $links ) ),
+ 'apihelp-linktrail', 'div'
+ );
+ }
+
+ $flags = $module->getHelpFlags();
+ if ( $flags ) {
+ $help['flags'] .= Html::openElement( 'div',
+ array( 'class' => 'apihelp-block apihelp-flags' ) );
+ $msg = $context->msg( 'api-help-flags' );
+ if ( !$msg->isDisabled() ) {
+ $help['flags'] .= self::wrap(
+ $msg->numParams( count( $flags ) ), 'apihelp-block-head', 'div'
+ );
+ }
+ $help['flags'] .= Html::openElement( 'ul' );
+ foreach ( $flags as $flag ) {
+ $help['flags'] .= Html::rawElement( 'li', null,
+ self::wrap( $context->msg( "api-help-flag-$flag" ), "apihelp-flag-$flag" )
+ );
+ }
+ $help['flags'] .= Html::closeElement( 'ul' );
+ $help['flags'] .= Html::closeElement( 'div' );
+ }
+
+ foreach ( $module->getFinalDescription() as $msg ) {
+ $msg->setContext( $context );
+ $help['description'] .= $msg->parseAsBlock();
+ }
+
+ $urls = $module->getHelpUrls();
+ if ( $urls ) {
+ $help['help-urls'] .= Html::openElement( 'div',
+ array( 'class' => 'apihelp-block apihelp-help-urls' )
+ );
+ $msg = $context->msg( 'api-help-help-urls' );
+ if ( !$msg->isDisabled() ) {
+ $help['help-urls'] .= self::wrap(
+ $msg->numParams( count( $urls ) ), 'apihelp-block-head', 'div'
+ );
+ }
+ if ( !is_array( $urls ) ) {
+ $urls = array( $urls );
+ }
+ $help['help-urls'] .= Html::openElement( 'ul' );
+ foreach ( $urls as $url ) {
+ $help['help-urls'] .= Html::rawElement( 'li', null,
+ Html::element( 'a', array( 'href' => $url ), $url )
+ );
+ }
+ $help['help-urls'] .= Html::closeElement( 'ul' );
+ $help['help-urls'] .= Html::closeElement( 'div' );
+ }
+
+ $params = $module->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+ $groups = array();
+ if ( $params ) {
+ $help['parameters'] .= Html::openElement( 'div',
+ array( 'class' => 'apihelp-block apihelp-parameters' )
+ );
+ $msg = $context->msg( 'api-help-parameters' );
+ if ( !$msg->isDisabled() ) {
+ $help['parameters'] .= self::wrap(
+ $msg->numParams( count( $params ) ), 'apihelp-block-head', 'div'
+ );
+ }
+ $help['parameters'] .= Html::openElement( 'dl' );
+
+ $descriptions = $module->getFinalParamDescription();
+
+ foreach ( $params as $name => $settings ) {
+ if ( !is_array( $settings ) ) {
+ $settings = array( ApiBase::PARAM_DFLT => $settings );
+ }
+
+ $help['parameters'] .= Html::element( 'dt', null,
+ $module->encodeParamName( $name ) );
+
+ // Add description
+ $description = array();
+ if ( isset( $descriptions[$name] ) ) {
+ foreach ( $descriptions[$name] as $msg ) {
+ $msg->setContext( $context );
+ $description[] = $msg->parseAsBlock();
+ }
+ }
+
+ // Add usage info
+ $info = array();
+
+ // Required?
+ if ( !empty( $settings[ApiBase::PARAM_REQUIRED] ) ) {
+ $info[] = $context->msg( 'api-help-param-required' )->parse();
+ }
+
+ // Custom info?
+ if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+ foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+ $tag = array_shift( $i );
+ $info[] = $context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+ ->numParams( count( $i ) )
+ ->params( $context->getLanguage()->commaList( $i ) )
+ ->params( $module->getModulePrefix() )
+ ->parse();
+ }
+ }
+
+ // Type documentation
+ if ( !isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+ $dflt = isset( $settings[ApiBase::PARAM_DFLT] )
+ ? $settings[ApiBase::PARAM_DFLT]
+ : null;
+ if ( is_bool( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'boolean';
+ } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'string';
+ } elseif ( is_int( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'integer';
+ }
+ }
+ if ( isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+ $type = $settings[ApiBase::PARAM_TYPE];
+ $multi = !empty( $settings[ApiBase::PARAM_ISMULTI] );
+ $hintPipeSeparated = true;
+ $count = ApiBase::LIMIT_SML2 + 1;
+
+ if ( is_array( $type ) ) {
+ $count = count( $type );
+ $links = isset( $settings[ApiBase::PARAM_VALUE_LINKS] )
+ ? $settings[ApiBase::PARAM_VALUE_LINKS]
+ : array();
+ $type = array_map( function ( $v ) use ( $links ) {
+ $ret = wfEscapeWikiText( $v );
+ if ( isset( $links[$v] ) ) {
+ $ret = "[[{$links[$v]}|$ret]]";
+ }
+ return $ret;
+ }, $type );
+ $i = array_search( '', $type, true );
+ if ( $i === false ) {
+ $type = $context->getLanguage()->commaList( $type );
+ } else {
+ unset( $type[$i] );
+ $type = $context->msg( 'api-help-param-list-can-be-empty' )
+ ->numParams( count( $type ) )
+ ->params( $context->getLanguage()->commaList( $type ) )
+ ->parse();
+ }
+ $info[] = $context->msg( 'api-help-param-list' )
+ ->params( $multi ? 2 : 1 )
+ ->params( $type )
+ ->parse();
+ $hintPipeSeparated = false;
+ } else {
+ switch ( $type ) {
+ case 'submodule':
+ $groups[] = $name;
+ $submodules = $module->getModuleManager()->getNames( $name );
+ $count = count( $submodules );
+ sort( $submodules );
+ $prefix = $module->isMain()
+ ? '' : ( $module->getModulePath() . '+' );
+ $submodules = array_map( function ( $name ) use ( $prefix ) {
+ return "[[Special:ApiHelp/{$prefix}{$name}|{$name}]]";
+ }, $submodules );
+ $info[] = $context->msg( 'api-help-param-list' )
+ ->params( $multi ? 2 : 1 )
+ ->params( $context->getLanguage()->commaList( $submodules ) )
+ ->parse();
+ $hintPipeSeparated = false;
+ break;
+
+ case 'namespace':
+ $namespaces = MWNamespace::getValidNamespaces();
+ $count = count( $namespaces );
+ $info[] = $context->msg( 'api-help-param-list' )
+ ->params( $multi ? 2 : 1 )
+ ->params( $context->getLanguage()->commaList( $namespaces ) )
+ ->parse();
+ $hintPipeSeparated = false;
+ break;
+
+ case 'limit':
+ if ( isset( $settings[ApiBase::PARAM_MAX2] ) ) {
+ $info[] = $context->msg( 'api-help-param-limit2' )
+ ->numParams( $settings[ApiBase::PARAM_MAX] )
+ ->numParams( $settings[ApiBase::PARAM_MAX2] )
+ ->parse();
+ } else {
+ $info[] = $context->msg( 'api-help-param-limit' )
+ ->numParams( $settings[ApiBase::PARAM_MAX] )
+ ->parse();
+ }
+ break;
+
+ case 'integer':
+ // Possible messages:
+ // api-help-param-integer-min,
+ // api-help-param-integer-max,
+ // api-help-param-integer-minmax
+ $suffix = '';
+ $min = $max = 0;
+ if ( isset( $settings[ApiBase::PARAM_MIN] ) ) {
+ $suffix .= 'min';
+ $min = $settings[ApiBase::PARAM_MIN];
+ }
+ if ( isset( $settings[ApiBase::PARAM_MAX] ) ) {
+ $suffix .= 'max';
+ $max = $settings[ApiBase::PARAM_MAX];
+ }
+ if ( $suffix !== '' ) {
+ $info[] =
+ $context->msg( "api-help-param-integer-$suffix" )
+ ->params( $multi ? 2 : 1 )
+ ->numParams( $min, $max )
+ ->parse();
+ }
+ break;
+
+ case 'upload':
+ $info[] = $context->msg( 'api-help-param-upload' )
+ ->parse();
+ break;
+ }
+ }
+
+ if ( $multi ) {
+ $extra = array();
+ if ( $hintPipeSeparated ) {
+ $extra[] = $context->msg( 'api-help-param-multi-separate' )->parse();
+ }
+ if ( $count > ApiBase::LIMIT_SML1 ) {
+ $extra[] = $context->msg( 'api-help-param-multi-max' )
+ ->numParams( ApiBase::LIMIT_SML1, ApiBase::LIMIT_SML2 )
+ ->parse();
+ }
+ if ( $extra ) {
+ $info[] = join( ' ', $extra );
+ }
+ }
+ }
+
+ // Add default
+ $default = isset( $settings[ApiBase::PARAM_DFLT] )
+ ? $settings[ApiBase::PARAM_DFLT]
+ : null;
+ if ( $default === '' ) {
+ $info[] = $context->msg( 'api-help-param-default-empty' )
+ ->parse();
+ } elseif ( $default !== null && $default !== false ) {
+ $info[] = $context->msg( 'api-help-param-default' )
+ ->params( wfEscapeWikiText( $default ) )
+ ->parse();
+ }
+
+ if ( !array_filter( $description ) ) {
+ $description = array( self::wrap(
+ $context->msg( 'api-help-param-no-description' ),
+ 'apihelp-empty'
+ ) );
+ }
+
+ // Add "deprecated" flag
+ if ( !empty( $settings[ApiBase::PARAM_DEPRECATED] ) ) {
+ $help['parameters'] .= Html::openElement( 'dd',
+ array( 'class' => 'info' ) );
+ $help['parameters'] .= self::wrap(
+ $context->msg( 'api-help-param-deprecated' ),
+ 'apihelp-deprecated', 'strong'
+ );
+ $help['parameters'] .= Html::closeElement( 'dd' );
+ }
+
+ if ( $description ) {
+ $description = join( '', $description );
+ $description = preg_replace( '!\s*</([oud]l)>\s*<\1>\s*!', "\n", $description );
+ $help['parameters'] .= Html::rawElement( 'dd',
+ array( 'class' => 'description' ), $description );
+ }
+
+ foreach ( $info as $i ) {
+ $help['parameters'] .= Html::rawElement( 'dd', array( 'class' => 'info' ), $i );
+ }
+ }
+
+ $help['parameters'] .= Html::closeElement( 'dl' );
+ $help['parameters'] .= Html::closeElement( 'div' );
+ }
+
+ $examples = $module->getExamplesMessages();
+ if ( $examples ) {
+ $help['examples'] .= Html::openElement( 'div',
+ array( 'class' => 'apihelp-block apihelp-examples' ) );
+ $msg = $context->msg( 'api-help-examples' );
+ if ( !$msg->isDisabled() ) {
+ $help['examples'] .= self::wrap(
+ $msg->numParams( count( $examples ) ), 'apihelp-block-head', 'div'
+ );
+ }
+
+ $help['examples'] .= Html::openElement( 'dl' );
+ foreach ( $examples as $qs => $msg ) {
+ $msg = ApiBase::makeMessage( $msg, $context, array(
+ $module->getModulePrefix(),
+ $module->getModuleName(),
+ $module->getModulePath()
+ ) );
+
+ $link = wfAppendQuery( wfScript( 'api' ), $qs );
+ $help['examples'] .= Html::rawElement( 'dt', null, $msg->parse() );
+ $help['examples'] .= Html::rawElement( 'dd', null,
+ Html::element( 'a', array( 'href' => $link ), "api.php?$qs" )
+ );
+ }
+ $help['examples'] .= Html::closeElement( 'dl' );
+ $help['examples'] .= Html::closeElement( 'div' );
+ }
+
+ if ( $options['submodules'] && $module->getModuleManager() ) {
+ $manager = $module->getModuleManager();
+ $submodules = array();
+ foreach ( $groups as $group ) {
+ $names = $manager->getNames( $group );
+ sort( $names );
+ foreach ( $names as $name ) {
+ $submodules[] = $manager->getModule( $name );
+ }
+ }
+ $help['submodules'] .= self::getHelpInternal( $context, $submodules, array(
+ 'submodules' => $options['recursivesubmodules'],
+ 'headerlevel' => $level + 1,
+ 'noheader' => false,
+ ) + $options, $haveModules );
+ }
+
+ $module->modifyHelp( $help, $options );
+
+ Hooks::run( 'APIHelpModifyOutput', array( $module, &$help, $options ) );
+
+ $out .= join( "\n", $help );
}
- return $msg;
+ return $out;
}
public function shouldCheckMaxlag() {
@@ -131,39 +625,40 @@ class ApiHelp extends ApiBase {
return false;
}
+ public function getCustomPrinter() {
+ $params = $this->extractRequestParams();
+ if ( $params['wrap'] ) {
+ return null;
+ }
+
+ $main = $this->getMain();
+ $errorPrinter = $main->createPrinterByName( $main->getParameter( 'format' ) );
+ return new ApiFormatRaw( $main, $errorPrinter );
+ }
+
public function getAllowedParams() {
return array(
'modules' => array(
- ApiBase::PARAM_ISMULTI => true
- ),
- 'querymodules' => array(
+ ApiBase::PARAM_DFLT => 'main',
ApiBase::PARAM_ISMULTI => true,
- ApiBase::PARAM_DEPRECATED => true
),
+ 'submodules' => false,
+ 'recursivesubmodules' => false,
+ 'wrap' => false,
+ 'toc' => false,
);
}
- public function getParamDescription() {
- return array(
- 'modules' => 'List of module names (value of the action= parameter). ' .
- 'Can specify submodules with a \'+\'',
- 'querymodules' => 'Use modules=query+value instead. List of query ' .
- 'module names (value of prop=, meta= or list= parameter)',
- );
- }
-
- public function getDescription() {
- return 'Display this help screen. Or the help screen for the specified module.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=help' => 'Whole help page',
- 'api.php?action=help&modules=protect' => 'Module (action) help page',
- 'api.php?action=help&modules=query+categorymembers'
- => 'Help for the query/categorymembers module',
- 'api.php?action=help&modules=login|query+info'
- => 'Help for the login and query/info modules',
+ 'action=help'
+ => 'apihelp-help-example-main',
+ 'action=help&recursivesubmodules=1'
+ => 'apihelp-help-example-recursive',
+ 'action=help&modules=help'
+ => 'apihelp-help-example-help',
+ 'action=help&modules=query+info|query+categorymembers'
+ => 'apihelp-help-example-query',
);
}
diff --git a/includes/api/ApiHelpParamValueMessage.php b/includes/api/ApiHelpParamValueMessage.php
new file mode 100644
index 00000000..7cf3d6ed
--- /dev/null
+++ b/includes/api/ApiHelpParamValueMessage.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ *
+ *
+ * Created on Dec 22, 2014
+ *
+ * Copyright © 2014 Brad Jorsch <bjorsch@wikimedia.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Message subclass that prepends wikitext for API help.
+ *
+ * This exists so the apihelp-*-paramvalue-*-* messages don't all have to
+ * include markup wikitext while still keeping the
+ * 'APIGetParamDescriptionMessages' hook simple.
+ *
+ * @since 1.25
+ */
+class ApiHelpParamValueMessage extends Message {
+
+ protected $paramValue;
+
+ /**
+ * @see Message::__construct
+ *
+ * @param string $paramValue Parameter value being documented
+ * @param string $text Message to use.
+ * @param array $params Parameters for the message.
+ * @throws InvalidArgumentException
+ */
+ public function __construct( $paramValue, $text, $params = array() ) {
+ parent::__construct( $text, $params );
+ $this->paramValue = $paramValue;
+ }
+
+ /**
+ * Fetch the parameter value
+ * @return string
+ */
+ public function getParamValue() {
+ return $this->paramValue;
+ }
+
+ /**
+ * Fetch the message.
+ * @return string
+ */
+ public function fetchMessage() {
+ if ( $this->message === null ) {
+ $this->message = ";{$this->paramValue}:" . parent::fetchMessage();
+ }
+ return $this->message;
+ }
+
+}
diff --git a/includes/api/ApiImageRotate.php b/includes/api/ApiImageRotate.php
index 20396dd7..865d39fa 100644
--- a/includes/api/ApiImageRotate.php
+++ b/includes/api/ApiImageRotate.php
@@ -42,7 +42,7 @@ class ApiImageRotate extends ApiBase {
$v = $val;
}
if ( $flag !== null ) {
- $v[$flag] = '';
+ $v[$flag] = true;
}
$result[] = $v;
}
@@ -52,7 +52,8 @@ class ApiImageRotate extends ApiBase {
$params = $this->extractRequestParams();
$rotation = $params['rotation'];
- $this->getResult()->beginContinuation( $params['continue'], array(), array() );
+ $continuationManager = new ApiContinuationManager( $this, array(), array() );
+ $this->setContinuationManager( $continuationManager );
$pageSet = $this->getPageSet();
$pageSet->execute();
@@ -70,10 +71,10 @@ class ApiImageRotate extends ApiBase {
$r['id'] = $title->getArticleID();
ApiQueryBase::addTitleInfo( $r, $title );
if ( !$title->exists() ) {
- $r['missing'] = '';
+ $r['missing'] = true;
}
- $file = wfFindFile( $title );
+ $file = wfFindFile( $title, array( 'latest' => true ) );
if ( !$file ) {
$r['result'] = 'Failure';
$r['errormessage'] = 'File does not exist';
@@ -122,7 +123,7 @@ class ApiImageRotate extends ApiBase {
$r['result'] = 'Success';
} else {
$r['result'] = 'Failure';
- $r['errormessage'] = $this->getResult()->convertStatusToArray( $status );
+ $r['errormessage'] = $this->getErrorFormatter()->arrayFromStatus( $status );
}
} else {
$r['result'] = 'Failure';
@@ -131,9 +132,11 @@ class ApiImageRotate extends ApiBase {
$result[] = $r;
}
$apiResult = $this->getResult();
- $apiResult->setIndexedTagName( $result, 'page' );
+ ApiResult::setIndexedTagName( $result, 'page' );
$apiResult->addValue( null, $this->getModuleName(), $result );
- $apiResult->endContinuation();
+
+ $this->setContinuationManager( null );
+ $continuationManager->setContinuationIntoResult( $apiResult );
}
/**
@@ -184,7 +187,9 @@ class ApiImageRotate extends ApiBase {
ApiBase::PARAM_TYPE => array( '90', '180', '270' ),
ApiBase::PARAM_REQUIRED => true
),
- 'continue' => '',
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
);
if ( $flags ) {
$result += $this->getPageSet()->getFinalParams( $flags );
@@ -193,26 +198,17 @@ class ApiImageRotate extends ApiBase {
return $result;
}
- public function getParamDescription() {
- $pageSet = $this->getPageSet();
-
- return $pageSet->getFinalParamDescription() + array(
- 'rotation' => 'Degrees to rotate image clockwise',
- 'continue' => 'When more results are available, use this to continue',
- );
- }
-
- public function getDescription() {
- return 'Rotate one or more images.';
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=imagerotate&titles=Example.jpg&rotation=90&token=123ABC',
+ 'action=imagerotate&titles=File:Example.jpg&rotation=90&token=123ABC'
+ => 'apihelp-imagerotate-example-simple',
+ 'action=imagerotate&generator=categorymembers&gcmtitle=Category:Flip&gcmtype=file&' .
+ 'rotation=180&token=123ABC'
+ => 'apihelp-imagerotate-example-generator',
);
}
}
diff --git a/includes/api/ApiImport.php b/includes/api/ApiImport.php
index b11348e5..2e87d22d 100644
--- a/includes/api/ApiImport.php
+++ b/includes/api/ApiImport.php
@@ -60,7 +60,7 @@ class ApiImport extends ApiBase {
$this->dieStatus( $source );
}
- $importer = new WikiImporter( $source->value );
+ $importer = new WikiImporter( $source->value, $this->getConfig() );
if ( isset( $params['namespace'] ) ) {
$importer->setTargetNamespace( $params['namespace'] );
}
@@ -79,13 +79,13 @@ class ApiImport extends ApiBase {
try {
$importer->doImport();
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$this->dieUsageMsg( array( 'import-unknownerror', $e->getMessage() ) );
}
$resultData = $reporter->getData();
$result = $this->getResult();
- $result->setIndexedTagName( $resultData, 'page' );
+ ApiResult::setIndexedTagName( $resultData, 'page' );
$result->addValue( null, $this->getModuleName(), $resultData );
}
@@ -116,36 +116,15 @@ class ApiImport extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'summary' => 'Import summary',
- 'xml' => 'Uploaded XML file',
- 'interwikisource' => 'For interwiki imports: wiki to import from',
- 'interwikipage' => 'For interwiki imports: page to import',
- 'fullhistory' => 'For interwiki imports: import the full history, not just the current version',
- 'templates' => 'For interwiki imports: import all included templates as well',
- 'namespace' => 'For interwiki imports: import to this namespace',
- 'rootpage' => 'Import as subpage of this page',
- );
- }
-
- public function getDescription() {
- return array(
- 'Import a page from another wiki, or an XML file.',
- 'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
- 'sending a file for the "xml" parameter.'
- );
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
+ 'action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
'namespace=100&fullhistory=&token=123ABC'
- => 'Import [[meta:Help:Parserfunctions]] to namespace 100 with full history',
+ => 'apihelp-import-example-import',
);
}
@@ -176,7 +155,7 @@ class ApiImportReporter extends ImportReporter {
if ( $title === null ) {
# Invalid or non-importable title
$r['title'] = $pageInfo['title'];
- $r['invalid'] = '';
+ $r['invalid'] = true;
} else {
ApiQueryBase::addTitleInfo( $r, $title );
$r['revisions'] = intval( $successCount );
diff --git a/includes/api/ApiLogin.php b/includes/api/ApiLogin.php
index 976f4c12..5480d940 100644
--- a/includes/api/ApiLogin.php
+++ b/includes/api/ApiLogin.php
@@ -46,11 +46,12 @@ class ApiLogin extends ApiBase {
* is reached. The expiry is $this->mLoginThrottle.
*/
public function execute() {
- // If we're in JSON callback mode, no tokens can be obtained
- if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
$this->getResult()->addValue( null, 'login', array(
'result' => 'Aborted',
- 'reason' => 'Cannot log in when using a callback',
+ 'reason' => 'Cannot log in when the same-origin policy is not applied',
) );
return;
@@ -92,7 +93,7 @@ class ApiLogin extends ApiBase {
// @todo FIXME: Split back and frontend from this hook.
// @todo FIXME: This hook should be placed in the backend
$injected_html = '';
- wfRunHooks( 'UserLoginComplete', array( &$user, &$injected_html ) );
+ Hooks::run( 'UserLoginComplete', array( &$user, &$injected_html ) );
$result['result'] = 'Success';
$result['lguserid'] = intval( $user->getId() );
@@ -184,28 +185,12 @@ class ApiLogin extends ApiBase {
);
}
- public function getParamDescription() {
+ protected function getExamplesMessages() {
return array(
- 'name' => 'User Name',
- 'password' => 'Password',
- 'domain' => 'Domain (optional)',
- 'token' => 'Login token obtained in first request',
- );
- }
-
- public function getDescription() {
- return array(
- 'Log in and get the authentication tokens.',
- 'In the event of a successful log-in, a cookie will be attached to your session.',
- 'In the event of a failed log-in, you will not be able to attempt another log-in',
- 'through this method for 5 seconds. This is to prevent password guessing by',
- 'automated password crackers.'
- );
- }
-
- public function getExamples() {
- return array(
- 'api.php?action=login&lgname=user&lgpassword=password'
+ 'action=login&lgname=user&lgpassword=password'
+ => 'apihelp-login-example-gettoken',
+ 'action=login&lgname=user&lgpassword=password&lgtoken=123ABC'
+ => 'apihelp-login-example-login',
);
}
diff --git a/includes/api/ApiLogout.php b/includes/api/ApiLogout.php
index 324f4b2f..bf0ca9c6 100644
--- a/includes/api/ApiLogout.php
+++ b/includes/api/ApiLogout.php
@@ -39,28 +39,17 @@ class ApiLogout extends ApiBase {
// Give extensions to do something after user logout
$injected_html = '';
- wfRunHooks( 'UserLogoutComplete', array( &$user, &$injected_html, $oldName ) );
+ Hooks::run( 'UserLogoutComplete', array( &$user, &$injected_html, $oldName ) );
}
public function isReadMode() {
return false;
}
- public function getAllowedParams() {
- return array();
- }
-
- public function getParamDescription() {
- return array();
- }
-
- public function getDescription() {
- return 'Log out and clear session data.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=logout' => 'Log the current user out',
+ 'action=logout'
+ => 'apihelp-logout-example-logout',
);
}
diff --git a/includes/api/ApiMain.php b/includes/api/ApiMain.php
index 119d7b48..3bf066cf 100644
--- a/includes/api/ApiMain.php
+++ b/includes/api/ApiMain.php
@@ -42,7 +42,7 @@ class ApiMain extends ApiBase {
/**
* When no format parameter is given, this format will be used
*/
- const API_DEFAULT_FORMAT = 'xmlfm';
+ const API_DEFAULT_FORMAT = 'jsonfm';
/**
* List of available modules: action name => module class
@@ -54,6 +54,7 @@ class ApiMain extends ApiBase {
'query' => 'ApiQuery',
'expandtemplates' => 'ApiExpandTemplates',
'parse' => 'ApiParse',
+ 'stashedit' => 'ApiStashEdit',
'opensearch' => 'ApiOpenSearch',
'feedcontributions' => 'ApiFeedContributions',
'feedrecentchanges' => 'ApiFeedRecentChanges',
@@ -63,6 +64,7 @@ class ApiMain extends ApiBase {
'rsd' => 'ApiRsd',
'compare' => 'ApiComparePages',
'tokens' => 'ApiTokens',
+ 'checktoken' => 'ApiCheckToken',
// Write modules
'purge' => 'ApiPurge',
@@ -86,6 +88,8 @@ class ApiMain extends ApiBase {
'options' => 'ApiOptions',
'imagerotate' => 'ApiImageRotate',
'revisiondelete' => 'ApiRevisionDelete',
+ 'managetags' => 'ApiManageTags',
+ 'tag' => 'ApiTag',
);
/**
@@ -121,11 +125,11 @@ class ApiMain extends ApiBase {
*/
private static $mRights = array(
'writeapi' => array(
- 'msg' => 'Use of the write API',
+ 'msg' => 'right-writeapi',
'params' => array()
),
'apihighlimits' => array(
- 'msg' => 'Use higher limits in API queries (Slow queries: $1 results; Fast queries: $2 results). The limits for slow queries also apply to multivalue parameters.',
+ 'msg' => 'api-help-right-apihighlimits',
'params' => array( ApiBase::LIMIT_SML2, ApiBase::LIMIT_BIG2 )
)
);
@@ -136,7 +140,7 @@ class ApiMain extends ApiBase {
*/
private $mPrinter;
- private $mModuleMgr, $mResult;
+ private $mModuleMgr, $mResult, $mErrorFormatter, $mContinuationManager;
private $mAction;
private $mEnableWrite;
private $mInternalMode, $mSquidMaxage, $mModule;
@@ -178,15 +182,33 @@ class ApiMain extends ApiBase {
// Remove all modules other than login
global $wgUser;
- if ( $this->getVal( 'callback' ) !== null ) {
- // JSON callback allows cross-site reads.
- // For safety, strip user credentials.
- wfDebug( "API: stripping user credentials for JSON callback\n" );
+ if ( $this->lacksSameOriginSecurity() ) {
+ // If we're in a mode that breaks the same-origin policy, strip
+ // user credentials for security.
+ wfDebug( "API: stripping user credentials when the same-origin policy is not applied\n" );
$wgUser = new User();
$this->getContext()->setUser( $wgUser );
}
}
+ $uselang = $this->getParameter( 'uselang' );
+ if ( $uselang === 'user' ) {
+ // Assume the parent context is going to return the user language
+ // for uselang=user (see T85635).
+ } else {
+ if ( $uselang === 'content' ) {
+ global $wgContLang;
+ $uselang = $wgContLang->getCode();
+ }
+ $code = RequestContext::sanitizeLangCode( $uselang );
+ $this->getContext()->setLanguage( $code );
+ if ( !$this->mInternalMode ) {
+ global $wgLang;
+ $wgLang = $this->getContext()->getLanguage();
+ RequestContext::getMain()->setLanguage( $wgLang );
+ }
+ }
+
$config = $this->getConfig();
$this->mModuleMgr = new ApiModuleManager( $this );
$this->mModuleMgr->addModules( self::$Modules, 'action' );
@@ -194,7 +216,13 @@ class ApiMain extends ApiBase {
$this->mModuleMgr->addModules( self::$Formats, 'format' );
$this->mModuleMgr->addModules( $config->get( 'APIFormatModules' ), 'format' );
- $this->mResult = new ApiResult( $this );
+ Hooks::run( 'ApiMain::moduleManager', array( $this->mModuleMgr ) );
+
+ $this->mResult = new ApiResult( $this->getConfig()->get( 'APIMaxResultSize' ) );
+ $this->mErrorFormatter = new ApiErrorFormatter_BackCompat( $this->mResult );
+ $this->mResult->setErrorFormatter( $this->mErrorFormatter );
+ $this->mResult->setMainForContinuation( $this );
+ $this->mContinuationManager = null;
$this->mEnableWrite = $enableWrite;
$this->mSquidMaxage = -1; // flag for executeActionWithErrorHandling()
@@ -219,6 +247,43 @@ class ApiMain extends ApiBase {
}
/**
+ * Get the ApiErrorFormatter object associated with current request
+ * @return ApiErrorFormatter
+ */
+ public function getErrorFormatter() {
+ return $this->mErrorFormatter;
+ }
+
+ /**
+ * Get the continuation manager
+ * @return ApiContinuationManager|null
+ */
+ public function getContinuationManager() {
+ return $this->mContinuationManager;
+ }
+
+ /**
+ * Set the continuation manager
+ * @param ApiContinuationManager|null
+ */
+ public function setContinuationManager( $manager ) {
+ if ( $manager !== null ) {
+ if ( !$manager instanceof ApiContinuationManager ) {
+ throw new InvalidArgumentException( __METHOD__ . ': Was passed ' .
+ is_object( $manager ) ? get_class( $manager ) : gettype( $manager )
+ );
+ }
+ if ( $this->mContinuationManager !== null ) {
+ throw new UnexpectedValueException(
+ __METHOD__ . ': tried to set manager from ' . $manager->getSource() .
+ ' when a manager is already set from ' . $this->mContinuationManager->getSource()
+ );
+ }
+ }
+ $this->mContinuationManager = $manager;
+ }
+
+ /**
* Get the API module object. Only works after executeAction()
*
* @return ApiBase
@@ -290,6 +355,16 @@ class ApiMain extends ApiBase {
}
}
+ if ( $mode === 'public' && $this->getParameter( 'uselang' ) === 'user' ) {
+ // User language is used for i18n, so we don't want to publicly
+ // cache. Anons are ok, because if they have non-default language
+ // then there's an appropriate Vary header set by whatever set
+ // their non-default language.
+ wfDebug( __METHOD__ . ": downgrading cache mode 'public' to " .
+ "'anon-public-user-private' due to uselang=user\n" );
+ $mode = 'anon-public-user-private';
+ }
+
wfDebug( __METHOD__ . ": setting cache mode $mode\n" );
$this->mCacheMode = $mode;
}
@@ -328,14 +403,11 @@ class ApiMain extends ApiBase {
* Execute api request. Any errors will be handled if the API was called by the remote client.
*/
public function execute() {
- $this->profileIn();
if ( $this->mInternalMode ) {
$this->executeAction();
} else {
$this->executeActionWithErrorHandling();
}
-
- $this->profileOut();
}
/**
@@ -373,10 +445,6 @@ class ApiMain extends ApiBase {
// avoid sending public cache headers for errors.
$this->sendCacheHeaders();
- if ( $this->mPrinter->getIsHtml() && !$this->mPrinter->isDisabled() ) {
- echo wfReportTime();
- }
-
ob_end_flush();
}
@@ -390,11 +458,17 @@ class ApiMain extends ApiBase {
// Bug 63145: Rollback any open database transactions
if ( !( $e instanceof UsageException ) ) {
// UsageExceptions are intentional, so don't rollback if that's the case
- MWExceptionHandler::rollbackMasterChangesAndLog( $e );
+ try {
+ MWExceptionHandler::rollbackMasterChangesAndLog( $e );
+ } catch ( DBError $e2 ) {
+ // Rollback threw an exception too. Log it, but don't interrupt
+ // our regularly scheduled exception handling.
+ MWExceptionHandler::logException( $e2 );
+ }
}
// Allow extra cleanup and logging
- wfRunHooks( 'ApiMain::onException', array( $this, $e ) );
+ Hooks::run( 'ApiMain::onException', array( $this, $e ) );
// Log it
if ( !( $e instanceof UsageException ) ) {
@@ -421,9 +495,22 @@ class ApiMain extends ApiBase {
// Reset and print just the error message
ob_clean();
- // If the error occurred during printing, do a printer->profileOut()
- $this->mPrinter->safeProfileOut();
- $this->printResult( true );
+ // Printer may not be initialized if the extractRequestParams() fails for the main module
+ $this->createErrorPrinter();
+
+ try {
+ $this->printResult( true );
+ } catch ( UsageException $ex ) {
+ // The error printer itself is failing. Try suppressing its request
+ // parameters and redo.
+ $this->setWarning(
+ 'Error printer failed (will retry without params): ' . $ex->getMessage()
+ );
+ $this->mPrinter = null;
+ $this->createErrorPrinter();
+ $this->mPrinter->forceDefaultParams();
+ $this->printResult( true );
+ }
}
/**
@@ -434,6 +521,7 @@ class ApiMain extends ApiBase {
*
* @since 1.23
* @param Exception $e
+ * @throws Exception
*/
public static function handleApiBeforeMainException( Exception $e ) {
ob_start();
@@ -462,6 +550,8 @@ class ApiMain extends ApiBase {
* If the parameter and the header do match, the header is checked against $wgCrossSiteAJAXdomains
* and $wgCrossSiteAJAXdomainExceptions, and if the origin qualifies, the appropriate CORS
* headers are set.
+ * http://www.w3.org/TR/cors/#resource-requests
+ * http://www.w3.org/TR/cors/#resource-preflight-requests
*
* @return bool False if the caller should abort (403 case), true otherwise (all other cases)
*/
@@ -474,12 +564,14 @@ class ApiMain extends ApiBase {
$request = $this->getRequest();
$response = $request->response();
+
// Origin: header is a space-separated list of origins, check all of them
$originHeader = $request->getHeader( 'Origin' );
if ( $originHeader === false ) {
$origins = array();
} else {
- $origins = explode( ' ', $originHeader );
+ $originHeader = trim( $originHeader );
+ $origins = preg_split( '/\s+/', $originHeader );
}
if ( !in_array( $originParam, $origins ) ) {
@@ -494,18 +586,44 @@ class ApiMain extends ApiBase {
}
$config = $this->getConfig();
- $matchOrigin = self::matchOrigin(
+ $matchOrigin = count( $origins ) === 1 && self::matchOrigin(
$originParam,
$config->get( 'CrossSiteAJAXdomains' ),
$config->get( 'CrossSiteAJAXdomainExceptions' )
);
if ( $matchOrigin ) {
- $response->header( "Access-Control-Allow-Origin: $originParam" );
+ $requestedMethod = $request->getHeader( 'Access-Control-Request-Method' );
+ $preflight = $request->getMethod() === 'OPTIONS' && $requestedMethod !== false;
+ if ( $preflight ) {
+ // This is a CORS preflight request
+ if ( $requestedMethod !== 'POST' && $requestedMethod !== 'GET' ) {
+ // If method is not a case-sensitive match, do not set any additional headers and terminate.
+ return true;
+ }
+ // We allow the actual request to send the following headers
+ $requestedHeaders = $request->getHeader( 'Access-Control-Request-Headers' );
+ if ( $requestedHeaders !== false ) {
+ if ( !self::matchRequestedHeaders( $requestedHeaders ) ) {
+ return true;
+ }
+ $response->header( 'Access-Control-Allow-Headers: ' . $requestedHeaders );
+ }
+
+ // We only allow the actual request to be GET or POST
+ $response->header( 'Access-Control-Allow-Methods: POST, GET' );
+ }
+
+ $response->header( "Access-Control-Allow-Origin: $originHeader" );
$response->header( 'Access-Control-Allow-Credentials: true' );
- $this->getOutput()->addVaryHeader( 'Origin' );
+ $response->header( "Timing-Allow-Origin: $originHeader" ); # http://www.w3.org/TR/resource-timing/#timing-allow-origin
+
+ if ( !$preflight ) {
+ $response->header( 'Access-Control-Expose-Headers: MediaWiki-API-Error, Retry-After, X-Database-Lag' );
+ }
}
+ $this->getOutput()->addVaryHeader( 'Origin' );
return true;
}
@@ -535,6 +653,41 @@ class ApiMain extends ApiBase {
}
/**
+ * Attempt to validate the value of Access-Control-Request-Headers against a list
+ * of headers that we allow the follow up request to send.
+ *
+ * @param string $requestedHeaders Comma seperated list of HTTP headers
+ * @return bool True if all requested headers are in the list of allowed headers
+ */
+ protected static function matchRequestedHeaders( $requestedHeaders ) {
+ if ( trim( $requestedHeaders ) === '' ) {
+ return true;
+ }
+ $requestedHeaders = explode( ',', $requestedHeaders );
+ $allowedAuthorHeaders = array_flip( array(
+ /* simple headers (see spec) */
+ 'accept',
+ 'accept-language',
+ 'content-language',
+ 'content-type',
+ /* non-authorable headers in XHR, which are however requested by some UAs */
+ 'accept-encoding',
+ 'dnt',
+ 'origin',
+ /* MediaWiki whitelist */
+ 'api-user-agent',
+ ) );
+ foreach ( $requestedHeaders as $rHeader ) {
+ $rHeader = strtolower( trim( $rHeader ) );
+ if ( !isset( $allowedAuthorHeaders[$rHeader] ) ) {
+ wfDebugLog( 'api', 'CORS preflight failed on requested header: ' . $rHeader );
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
* Helper function to convert wildcard string into a regex
* '*' => '.*?'
* '?' => '.'
@@ -563,8 +716,24 @@ class ApiMain extends ApiBase {
$out->addVaryHeader( 'X-Forwarded-Proto' );
}
+ // The logic should be:
+ // $this->mCacheControl['max-age'] is set?
+ // Use it, the module knows better than our guess.
+ // !$this->mModule || $this->mModule->isWriteMode(), and mCacheMode is private?
+ // Use 0 because we can guess caching is probably the wrong thing to do.
+ // Use $this->getParameter( 'maxage' ), which already defaults to 0.
+ $maxage = 0;
+ if ( isset( $this->mCacheControl['max-age'] ) ) {
+ $maxage = $this->mCacheControl['max-age'];
+ } elseif ( ( $this->mModule && !$this->mModule->isWriteMode() ) ||
+ $this->mCacheMode !== 'private'
+ ) {
+ $maxage = $this->getParameter( 'maxage' );
+ }
+ $privateCache = 'private, must-revalidate, max-age=' . $maxage;
+
if ( $this->mCacheMode == 'private' ) {
- $response->header( 'Cache-Control: private' );
+ $response->header( "Cache-Control: $privateCache" );
return;
}
@@ -576,14 +745,14 @@ class ApiMain extends ApiBase {
$response->header( $out->getXVO() );
if ( $out->haveCacheVaryCookies() ) {
// Logged in, mark this request private
- $response->header( 'Cache-Control: private' );
+ $response->header( "Cache-Control: $privateCache" );
return;
}
// Logged out, send normal public headers below
} elseif ( session_id() != '' ) {
// Logged in or otherwise has session (e.g. anonymous users who have edited)
// Mark request private
- $response->header( 'Cache-Control: private' );
+ $response->header( "Cache-Control: $privateCache" );
return;
} // else no XVO and anonymous, send public headers below
@@ -607,7 +776,7 @@ class ApiMain extends ApiBase {
// Public cache not requested
// Sending a Vary header in this case is harmless, and protects us
// against conditional calls of setCacheMaxAge().
- $response->header( 'Cache-Control: private' );
+ $response->header( "Cache-Control: $privateCache" );
return;
}
@@ -638,45 +807,39 @@ class ApiMain extends ApiBase {
}
/**
- * Replace the result data with the information about an exception.
- * Returns the error code
- * @param Exception $e
- * @return string
+ * Create the printer for error output
*/
- protected function substituteResultWithError( $e ) {
- $result = $this->getResult();
-
- // Printer may not be initialized if the extractRequestParams() fails for the main module
+ private function createErrorPrinter() {
if ( !isset( $this->mPrinter ) ) {
- // The printer has not been created yet. Try to manually get formatter value.
$value = $this->getRequest()->getVal( 'format', self::API_DEFAULT_FORMAT );
if ( !$this->mModuleMgr->isDefined( $value, 'format' ) ) {
$value = self::API_DEFAULT_FORMAT;
}
-
$this->mPrinter = $this->createPrinterByName( $value );
}
// Printer may not be able to handle errors. This is particularly
// likely if the module returns something for getCustomPrinter().
if ( !$this->mPrinter->canPrintErrors() ) {
- $this->mPrinter->safeProfileOut();
$this->mPrinter = $this->createPrinterByName( self::API_DEFAULT_FORMAT );
}
+ }
- // Update raw mode flag for the selected printer.
- $result->setRawMode( $this->mPrinter->getNeedsRawData() );
-
+ /**
+ * Replace the result data with the information about an exception.
+ * Returns the error code
+ * @param Exception $e
+ * @return string
+ */
+ protected function substituteResultWithError( $e ) {
+ $result = $this->getResult();
$config = $this->getConfig();
if ( $e instanceof UsageException ) {
- // User entered incorrect parameters - print usage screen
+ // User entered incorrect parameters - generate error response
$errMessage = $e->getMessageArray();
-
- // Only print the help message when this is for the developer, not runtime
- if ( $this->mPrinter->getWantsHelp() || $this->mAction == 'help' ) {
- ApiResult::setContent( $errMessage, $this->makeHelpMsg() );
- }
+ $link = wfExpandUrl( wfScript( 'api' ) );
+ ApiResult::setContentValue( $errMessage, 'docref', "See $link for API usage" );
} else {
// Something is seriously wrong
if ( ( $e instanceof DBQueryError ) && !$config->get( 'ShowSQLErrors' ) ) {
@@ -687,17 +850,19 @@ class ApiMain extends ApiBase {
$errMessage = array(
'code' => 'internal_api_error_' . get_class( $e ),
- 'info' => $info,
- );
- ApiResult::setContent(
- $errMessage,
- $config->get( 'ShowExceptionDetails' ) ? "\n\n{$e->getTraceAsString()}\n\n" : ''
+ 'info' => '[' . MWExceptionHandler::getLogId( $e ) . '] ' . $info,
);
+ if ( $config->get( 'ShowExceptionDetails' ) ) {
+ ApiResult::setContentValue(
+ $errMessage,
+ 'trace',
+ MWExceptionHandler::getRedactedTraceAsString( $e )
+ );
+ }
}
// Remember all the warnings to re-add them later
- $oldResult = $result->getData();
- $warnings = isset( $oldResult['warnings'] ) ? $oldResult['warnings'] : null;
+ $warnings = $result->getResultData( array( 'warnings' ) );
$result->reset();
// Re-add the id
@@ -756,6 +921,8 @@ class ApiMain extends ApiBase {
/**
* Set up the module for response
* @return ApiBase The module that will handle this action
+ * @throws MWException
+ * @throws UsageException
*/
protected function setupModule() {
// Instantiate the module requested by the user
@@ -856,7 +1023,7 @@ class ApiMain extends ApiBase {
// Allow extensions to stop execution for arbitrary reasons.
$message = false;
- if ( !wfRunHooks( 'ApiCheckCanExecute', array( $module, $user, &$message ) ) ) {
+ if ( !Hooks::run( 'ApiCheckCanExecute', array( $module, $user, &$message ) ) ) {
$this->dieUsageMsg( $message );
}
}
@@ -928,10 +1095,8 @@ class ApiMain extends ApiBase {
$this->checkAsserts( $params );
// Execute
- $module->profileIn();
$module->execute();
- wfRunHooks( 'APIAfterExecute', array( &$module ) );
- $module->profileOut();
+ Hooks::run( 'APIAfterExecute', array( &$module ) );
$this->reportUnusedParams();
@@ -1080,23 +1245,10 @@ class ApiMain extends ApiBase {
$this->setWarning( 'SECURITY WARNING: $wgDebugAPI is enabled' );
}
- $this->getResult()->cleanUpUTF8();
$printer = $this->mPrinter;
- $printer->profileIn();
-
- /**
- * If the help message is requested in the default (xmlfm) format,
- * tell the printer not to escape ampersands so that our links do
- * not break.
- */
- $isHelp = $isError || $this->mAction == 'help';
- $printer->setUnescapeAmps( $isHelp && $printer->getFormat() == 'XML' && $printer->getIsHtml() );
-
- $printer->initPrinter( $isHelp );
-
+ $printer->initPrinter( false );
$printer->execute();
$printer->closePrinter();
- $printer->profileOut();
}
/**
@@ -1113,14 +1265,14 @@ class ApiMain extends ApiBase {
*/
public function getAllowedParams() {
return array(
- 'format' => array(
- ApiBase::PARAM_DFLT => ApiMain::API_DEFAULT_FORMAT,
- ApiBase::PARAM_TYPE => 'submodule',
- ),
'action' => array(
ApiBase::PARAM_DFLT => 'help',
ApiBase::PARAM_TYPE => 'submodule',
),
+ 'format' => array(
+ ApiBase::PARAM_DFLT => ApiMain::API_DEFAULT_FORMAT,
+ ApiBase::PARAM_TYPE => 'submodule',
+ ),
'maxlag' => array(
ApiBase::PARAM_TYPE => 'integer'
),
@@ -1139,126 +1291,136 @@ class ApiMain extends ApiBase {
'servedby' => false,
'curtimestamp' => false,
'origin' => null,
+ 'uselang' => array(
+ ApiBase::PARAM_DFLT => 'user',
+ ),
);
}
- /**
- * See ApiBase for description.
- *
- * @return array
- */
- public function getParamDescription() {
+ /** @see ApiBase::getExamplesMessages() */
+ protected function getExamplesMessages() {
return array(
- 'format' => 'The format of the output',
- 'action' => 'What action you would like to perform. See below for module help',
- 'maxlag' => array(
- 'Maximum lag can be used when MediaWiki is installed on a database replicated cluster.',
- 'To save actions causing any more site replication lag, this parameter can make the client',
- 'wait until the replication lag is less than the specified value.',
- 'In case of a replag error, error code "maxlag" is returned, with the message like',
- '"Waiting for $host: $lag seconds lagged\n".',
- 'See https://www.mediawiki.org/wiki/Manual:Maxlag_parameter for more information',
- ),
- 'smaxage' => 'Set the s-maxage header to this many seconds. Errors are never cached',
- 'maxage' => 'Set the max-age header to this many seconds. Errors are never cached',
- 'assert' => 'Verify the user is logged in if set to "user", or has the bot userright if "bot"',
- 'requestid' => 'Request ID to distinguish requests. This will just be output back to you',
- 'servedby' => 'Include the hostname that served the request in the ' .
- 'results. Unconditionally shown on error',
- 'curtimestamp' => 'Include the current timestamp in the result.',
- 'origin' => array(
- 'When accessing the API using a cross-domain AJAX request (CORS), set this to the',
- 'originating domain. This must be included in any pre-flight request, and',
- 'therefore must be part of the request URI (not the POST body). This must match',
- 'one of the origins in the Origin: header exactly, so it has to be set to ',
- 'something like http://en.wikipedia.org or https://meta.wikimedia.org . If this',
- 'parameter does not match the Origin: header, a 403 response will be returned. If',
- 'this parameter matches the Origin: header and the origin is whitelisted, an',
- 'Access-Control-Allow-Origin header will be set.',
- ),
+ 'action=help'
+ => 'apihelp-help-example-main',
+ 'action=help&recursivesubmodules=1'
+ => 'apihelp-help-example-recursive',
);
}
+ public function modifyHelp( array &$help, array $options ) {
+ // Wish PHP had an "array_insert_before". Instead, we have to manually
+ // reindex the array to get 'permissions' in the right place.
+ $oldHelp = $help;
+ $help = array();
+ foreach ( $oldHelp as $k => $v ) {
+ if ( $k === 'submodules' ) {
+ $help['permissions'] = '';
+ }
+ $help[$k] = $v;
+ }
+ $help['credits'] = '';
+
+ // Fill 'permissions'
+ $help['permissions'] .= Html::openElement( 'div',
+ array( 'class' => 'apihelp-block apihelp-permissions' ) );
+ $m = $this->msg( 'api-help-permissions' );
+ if ( !$m->isDisabled() ) {
+ $help['permissions'] .= Html::rawElement( 'div', array( 'class' => 'apihelp-block-head' ),
+ $m->numParams( count( self::$mRights ) )->parse()
+ );
+ }
+ $help['permissions'] .= Html::openElement( 'dl' );
+ foreach ( self::$mRights as $right => $rightMsg ) {
+ $help['permissions'] .= Html::element( 'dt', null, $right );
+
+ $rightMsg = $this->msg( $rightMsg['msg'], $rightMsg['params'] )->parse();
+ $help['permissions'] .= Html::rawElement( 'dd', null, $rightMsg );
+
+ $groups = array_map( function ( $group ) {
+ return $group == '*' ? 'all' : $group;
+ }, User::getGroupsWithPermission( $right ) );
+
+ $help['permissions'] .= Html::rawElement( 'dd', null,
+ $this->msg( 'api-help-permissions-granted-to' )
+ ->numParams( count( $groups ) )
+ ->params( $this->getLanguage()->commaList( $groups ) )
+ ->parse()
+ );
+ }
+ $help['permissions'] .= Html::closeElement( 'dl' );
+ $help['permissions'] .= Html::closeElement( 'div' );
+
+ // Fill 'credits', if applicable
+ if ( empty( $options['nolead'] ) ) {
+ $help['credits'] .= Html::element( 'h' . min( 6, $options['headerlevel'] + 1 ),
+ array( 'id' => '+credits', 'class' => 'apihelp-header' ),
+ $this->msg( 'api-credits-header' )->parse()
+ );
+ $help['credits'] .= $this->msg( 'api-credits' )->useDatabase( false )->parseAsBlock();
+ }
+ }
+
+ private $mCanApiHighLimits = null;
+
/**
- * See ApiBase for description.
- *
- * @return array
+ * Check whether the current user is allowed to use high limits
+ * @return bool
*/
- public function getDescription() {
- return array(
- '',
- '',
- '**********************************************************************************************',
- '** **',
- '** This is an auto-generated MediaWiki API documentation page **',
- '** **',
- '** Documentation and Examples: **',
- '** https://www.mediawiki.org/wiki/API **',
- '** **',
- '**********************************************************************************************',
- '',
- 'Status: All features shown on this page should be working, but the API',
- ' is still in active development, and may change at any time.',
- ' Make sure to monitor our mailing list for any updates.',
- '',
- 'Erroneous requests: When erroneous requests are sent to the API, a HTTP header will be sent',
- ' with the key "MediaWiki-API-Error" and then both the value of the',
- ' header and the error code sent back will be set to the same value.',
- '',
- ' In the case of an invalid action being passed, these will have a value',
- ' of "unknown_action".',
- '',
- ' For more information see https://www.mediawiki.org' .
- '/wiki/API:Errors_and_warnings',
- '',
- 'Documentation: https://www.mediawiki.org/wiki/API:Main_page',
- 'FAQ https://www.mediawiki.org/wiki/API:FAQ',
- 'Mailing list: https://lists.wikimedia.org/mailman/listinfo/mediawiki-api',
- 'Api Announcements: https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce',
- 'Bugs & Requests: https://bugzilla.wikimedia.org/buglist.cgi?component=API&' .
- 'bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts',
- '',
- '',
- '',
- '',
- '',
- );
+ public function canApiHighLimits() {
+ if ( !isset( $this->mCanApiHighLimits ) ) {
+ $this->mCanApiHighLimits = $this->getUser()->isAllowed( 'apihighlimits' );
+ }
+
+ return $this->mCanApiHighLimits;
}
/**
- * Returns an array of strings with credits for the API
- * @return array
+ * Overrides to return this instance's module manager.
+ * @return ApiModuleManager
*/
- protected function getCredits() {
- return array(
- 'API developers:',
- ' Roan Kattouw (lead developer Sep 2007-2009)',
- ' Victor Vasiliev',
- ' Bryan Tong Minh',
- ' Sam Reed',
- ' Yuri Astrakhan (creator, lead developer Sep 2006-Sep 2007, 2012-2013)',
- ' Brad Jorsch (lead developer 2013-now)',
- '',
- 'Please send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org',
- 'or file a bug report at https://bugzilla.wikimedia.org/'
+ public function getModuleManager() {
+ return $this->mModuleMgr;
+ }
+
+ /**
+ * Fetches the user agent used for this request
+ *
+ * The value will be the combination of the 'Api-User-Agent' header (if
+ * any) and the standard User-Agent header (if any).
+ *
+ * @return string
+ */
+ public function getUserAgent() {
+ return trim(
+ $this->getRequest()->getHeader( 'Api-user-agent' ) . ' ' .
+ $this->getRequest()->getHeader( 'User-agent' )
);
}
+ /************************************************************************//**
+ * @name Deprecated
+ * @{
+ */
+
/**
* Sets whether the pretty-printer should format *bold* and $italics$
*
+ * @deprecated since 1.25
* @param bool $help
*/
public function setHelp( $help = true ) {
+ wfDeprecated( __METHOD__, '1.25' );
$this->mPrinter->setHelp( $help );
}
/**
* Override the parent to generate help messages for all available modules.
*
+ * @deprecated since 1.25
* @return string
*/
public function makeHelpMsg() {
+ wfDeprecated( __METHOD__, '1.25' );
global $wgMemc;
$this->setHelp();
// Get help text from cache if present
@@ -1281,9 +1443,11 @@ class ApiMain extends ApiBase {
}
/**
+ * @deprecated since 1.25
* @return mixed|string
*/
public function reallyMakeHelpMsg() {
+ wfDeprecated( __METHOD__, '1.25' );
$this->setHelp();
// Use parent to make default message for the main module
@@ -1305,8 +1469,12 @@ class ApiMain extends ApiBase {
$msg .= "\n$astriks Permissions $astriks\n\n";
foreach ( self::$mRights as $right => $rightMsg ) {
+ $rightsMsg = $this->msg( $rightMsg['msg'], $rightMsg['params'] )
+ ->useDatabase( false )
+ ->inLanguage( 'en' )
+ ->text();
$groups = User::getGroupsWithPermission( $right );
- $msg .= "* " . $right . " *\n " . wfMsgReplaceArgs( $rightMsg['msg'], $rightMsg['params'] ) .
+ $msg .= "* " . $right . " *\n $rightsMsg" .
"\nGranted to:\n " . str_replace( '*', 'all', implode( ', ', $groups ) ) . "\n\n";
}
@@ -1321,18 +1489,22 @@ class ApiMain extends ApiBase {
$msg .= "\n";
}
- $msg .= "\n*** Credits: ***\n " . implode( "\n ", $this->getCredits() ) . "\n";
+ $credits = $this->msg( 'api-credits' )->useDatabase( 'false' )->inLanguage( 'en' )->text();
+ $credits = str_replace( "\n", "\n ", $credits );
+ $msg .= "\n*** Credits: ***\n $credits\n";
return $msg;
}
/**
+ * @deprecated since 1.25
* @param ApiBase $module
* @param string $paramName What type of request is this? e.g. action,
* query, list, prop, meta, format
* @return string
*/
public static function makeHelpMsgHeader( $module, $paramName ) {
+ wfDeprecated( __METHOD__, '1.25' );
$modulePrefix = $module->getModulePrefix();
if ( strval( $modulePrefix ) !== '' ) {
$modulePrefix = "($modulePrefix) ";
@@ -1341,20 +1513,6 @@ class ApiMain extends ApiBase {
return "* $paramName={$module->getModuleName()} $modulePrefix*";
}
- private $mCanApiHighLimits = null;
-
- /**
- * Check whether the current user is allowed to use high limits
- * @return bool
- */
- public function canApiHighLimits() {
- if ( !isset( $this->mCanApiHighLimits ) ) {
- $this->mCanApiHighLimits = $this->getUser()->isAllowed( 'apihighlimits' );
- }
-
- return $this->mCanApiHighLimits;
- }
-
/**
* Check whether the user wants us to show version information in the API help
* @return bool
@@ -1367,14 +1525,6 @@ class ApiMain extends ApiBase {
}
/**
- * Overrides to return this instance's module manager.
- * @return ApiModuleManager
- */
- public function getModuleManager() {
- return $this->mModuleMgr;
- }
-
- /**
* Add or overwrite a module in this ApiMain instance. Intended for use by extending
* classes who wish to add their own modules to their lexicon or override the
* behavior of inherent ones.
@@ -1418,11 +1568,13 @@ class ApiMain extends ApiBase {
public function getFormats() {
return $this->getModuleManager()->getNamesWithClasses( 'format' );
}
+
+ /**@}*/
+
}
/**
* This exception will be thrown when dieUsage is called to stop module execution.
- * The exception handling code will print a help screen explaining how this API may be used.
*
* @ingroup API
*/
@@ -1476,3 +1628,8 @@ class UsageException extends MWException {
return "{$this->getCodeString()}: {$this->getMessage()}";
}
}
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
diff --git a/includes/api/ApiManageTags.php b/includes/api/ApiManageTags.php
new file mode 100644
index 00000000..240d3506
--- /dev/null
+++ b/includes/api/ApiManageTags.php
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ * @since 1.25
+ */
+class ApiManageTags extends ApiBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ // make sure the user is allowed
+ if ( !$this->getUser()->isAllowed( 'managechangetags' ) ) {
+ $this->dieUsage( "You don't have permission to manage change tags", 'permissiondenied' );
+ }
+
+ $result = $this->getResult();
+ $funcName = "{$params['operation']}TagWithChecks";
+ $status = ChangeTags::$funcName( $params['tag'], $params['reason'],
+ $this->getUser(), $params['ignorewarnings'] );
+
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
+ }
+
+ $ret = array(
+ 'operation' => $params['operation'],
+ 'tag' => $params['tag'],
+ );
+ if ( !$status->isGood() ) {
+ $ret['warnings'] = $this->getErrorFormatter()->arrayFromStatus( $status, 'warning' );
+ }
+ $ret['success'] = $status->value !== null;
+ if ( $ret['success'] ) {
+ $ret['logid'] = $status->value;
+ }
+ $result->addValue( null, $this->getModuleName(), $ret );
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return array(
+ 'operation' => array(
+ ApiBase::PARAM_TYPE => array( 'create', 'delete', 'activate', 'deactivate' ),
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'tag' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'reason' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ),
+ 'ignorewarnings' => array(
+ ApiBase::PARAM_TYPE => 'boolean',
+ ApiBase::PARAM_DFLT => false,
+ ),
+ );
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return array(
+ 'action=managetags&operation=create&tag=spam&reason=For+use+in+edit+patrolling&token=123ABC'
+ => 'apihelp-managetags-example-create',
+ 'action=managetags&operation=delete&tag=vandlaism&reason=Misspelt&token=123ABC'
+ => 'apihelp-managetags-example-delete',
+ 'action=managetags&operation=activate&tag=spam&reason=For+use+in+edit+patrolling&token=123ABC'
+ => 'apihelp-managetags-example-activate',
+ 'action=managetags&operation=deactivate&tag=spam&reason=No+longer+required&token=123ABC'
+ => 'apihelp-managetags-example-deactivate',
+ );
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/API:Tag_management';
+ }
+}
diff --git a/includes/api/ApiMessage.php b/includes/api/ApiMessage.php
new file mode 100644
index 00000000..6717c390
--- /dev/null
+++ b/includes/api/ApiMessage.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Defines an interface for messages with additional machine-readable data for
+ * use by the API, and provides concrete implementations of that interface.
+ *
+ * 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
+ */
+
+/**
+ * Interface for messages with machine-readable data for use by the API
+ * @since 1.25
+ * @ingroup API
+ */
+interface IApiMessage extends MessageSpecifier {
+ /**
+ * Returns a machine-readable code for use by the API
+ *
+ * The message key is often sufficient, but sometimes there are multiple
+ * messages used for what is really the same underlying condition (e.g.
+ * badaccess-groups and badaccess-group0)
+ * @return string
+ */
+ public function getApiCode();
+
+ /**
+ * Returns additional machine-readable data about the error condition
+ * @return array
+ */
+ public function getApiData();
+
+ /**
+ * Sets the machine-readable code for use by the API
+ * @param string|null $code If null, the message key should be returned by self::getApiCode()
+ * @param array|null $data If non-null, passed to self::setApiData()
+ */
+ public function setApiCode( $code, array $data = null );
+
+ /**
+ * Sets additional machine-readable data about the error condition
+ * @param array $data
+ */
+ public function setApiData( array $data );
+}
+
+/**
+ * Extension of Message implementing IApiMessage
+ * @since 1.25
+ * @ingroup API
+ * @todo: Would be nice to use a Trait here to avoid code duplication
+ */
+class ApiMessage extends Message implements IApiMessage {
+ protected $apiCode = null;
+ protected $apiData = array();
+
+ /**
+ * Create an IApiMessage for the message
+ *
+ * This returns $msg if it's an IApiMessage, calls 'new ApiRawMessage' if
+ * $msg is a RawMessage, or calls 'new ApiMessage' in all other cases.
+ *
+ * @param Message|RawMessage|array|string $msg
+ * @param string|null $code
+ * @param array|null $data
+ * @return ApiMessage
+ */
+ public static function create( $msg, $code = null, array $data = null ) {
+ if ( $msg instanceof IApiMessage ) {
+ return $msg;
+ } elseif ( $msg instanceof RawMessage ) {
+ return new ApiRawMessage( $msg, $code, $data );
+ } else {
+ return new ApiMessage( $msg, $code, $data );
+ }
+ }
+
+ /**
+ * @param Message|string|array $msg
+ * - Message: is cloned
+ * - array: first element is $key, rest are $params to Message::__construct
+ * - string: passed to Message::__construct
+ * @param string|null $code
+ * @param array|null $data
+ * @return ApiMessage
+ */
+ public function __construct( $msg, $code = null, array $data = null ) {
+ if ( $msg instanceof Message ) {
+ foreach ( get_class_vars( get_class( $this ) ) as $key => $value ) {
+ if ( isset( $msg->$key ) ) {
+ $this->$key = $msg->$key;
+ }
+ }
+ } elseif ( is_array( $msg ) ) {
+ $key = array_shift( $msg );
+ parent::__construct( $key, $msg );
+ } else {
+ parent::__construct( $msg );
+ }
+ $this->apiCode = $code;
+ $this->apiData = (array)$data;
+ }
+
+ public function getApiCode() {
+ return $this->apiCode === null ? $this->getKey() : $this->apiCode;
+ }
+
+ public function setApiCode( $code, array $data = null ) {
+ $this->apiCode = $code;
+ if ( $data !== null ) {
+ $this->setApiData( $data );
+ }
+ }
+
+ public function getApiData() {
+ return $this->apiData;
+ }
+
+ public function setApiData( array $data ) {
+ $this->apiData = $data;
+ }
+}
+
+/**
+ * Extension of RawMessage implementing IApiMessage
+ * @since 1.25
+ * @ingroup API
+ * @todo: Would be nice to use a Trait here to avoid code duplication
+ */
+class ApiRawMessage extends RawMessage implements IApiMessage {
+ protected $apiCode = null;
+ protected $apiData = array();
+
+ /**
+ * @param RawMessage|string|array $msg
+ * - RawMessage: is cloned
+ * - array: first element is $key, rest are $params to RawMessage::__construct
+ * - string: passed to RawMessage::__construct
+ * @param string|null $code
+ * @param array|null $data
+ * @return ApiMessage
+ */
+ public function __construct( $msg, $code = null, array $data = null ) {
+ if ( $msg instanceof RawMessage ) {
+ foreach ( get_class_vars( get_class( $this ) ) as $key => $value ) {
+ if ( isset( $msg->$key ) ) {
+ $this->$key = $msg->$key;
+ }
+ }
+ } elseif ( is_array( $msg ) ) {
+ $key = array_shift( $msg );
+ parent::__construct( $key, $msg );
+ } else {
+ parent::__construct( $msg );
+ }
+ $this->apiCode = $code;
+ $this->apiData = (array)$data;
+ }
+
+ public function getApiCode() {
+ return $this->apiCode === null ? $this->getKey() : $this->apiCode;
+ }
+
+ public function setApiCode( $code, array $data = null ) {
+ $this->apiCode = $code;
+ if ( $data !== null ) {
+ $this->setApiData( $data );
+ }
+ }
+
+ public function getApiData() {
+ return $this->apiData;
+ }
+
+ public function setApiData( array $data ) {
+ $this->apiData = $data;
+ }
+}
diff --git a/includes/api/ApiMove.php b/includes/api/ApiMove.php
index 04e931d2..e42958bf 100644
--- a/includes/api/ApiMove.php
+++ b/includes/api/ApiMove.php
@@ -72,9 +72,9 @@ class ApiMove extends ApiBase {
// Move the page
$toTitleExists = $toTitle->exists();
- $retval = $fromTitle->moveTo( $toTitle, true, $params['reason'], !$params['noredirect'] );
- if ( $retval !== true ) {
- $this->dieUsageMsg( reset( $retval ) );
+ $status = $this->movePage( $fromTitle, $toTitle, $params['reason'], !$params['noredirect'] );
+ if ( !$status->isOK() ) {
+ $this->dieStatus( $status );
}
$r = array(
@@ -83,34 +83,28 @@ class ApiMove extends ApiBase {
'reason' => $params['reason']
);
- if ( $fromTitle->exists() ) {
- //NOTE: we assume that if the old title exists, it's because it was re-created as
- // a redirect to the new title. This is not safe, but what we did before was
- // even worse: we just determined whether a redirect should have been created,
- // and reported that it was created if it should have, without any checks.
- // Also note that isRedirect() is unreliable because of bug 37209.
- $r['redirectcreated'] = '';
- }
+ //NOTE: we assume that if the old title exists, it's because it was re-created as
+ // a redirect to the new title. This is not safe, but what we did before was
+ // even worse: we just determined whether a redirect should have been created,
+ // and reported that it was created if it should have, without any checks.
+ // Also note that isRedirect() is unreliable because of bug 37209.
+ $r['redirectcreated'] = $fromTitle->exists();
- if ( $toTitleExists ) {
- $r['moveoverredirect'] = '';
- }
+ $r['moveoverredirect'] = $toTitleExists;
// Move the talk page
if ( $params['movetalk'] && $fromTalk->exists() && !$fromTitle->isTalkPage() ) {
$toTalkExists = $toTalk->exists();
- $retval = $fromTalk->moveTo( $toTalk, true, $params['reason'], !$params['noredirect'] );
- if ( $retval === true ) {
+ $status = $this->movePage( $fromTalk, $toTalk, $params['reason'], !$params['noredirect'] );
+ if ( $status->isOK() ) {
$r['talkfrom'] = $fromTalk->getPrefixedText();
$r['talkto'] = $toTalk->getPrefixedText();
- if ( $toTalkExists ) {
- $r['talkmoveoverredirect'] = '';
- }
+ $r['talkmoveoverredirect'] = $toTalkExists;
} else {
// We're not gonna dieUsage() on failure, since we already changed something
- $parsed = $this->parseMsg( reset( $retval ) );
- $r['talkmove-error-code'] = $parsed['code'];
- $r['talkmove-error-info'] = $parsed['info'];
+ $error = $this->getErrorFromStatus( $status );
+ $r['talkmove-error-code'] = $error[0];
+ $r['talkmove-error-info'] = $error[1];
}
}
@@ -120,12 +114,12 @@ class ApiMove extends ApiBase {
if ( $params['movesubpages'] ) {
$r['subpages'] = $this->moveSubpages( $fromTitle, $toTitle,
$params['reason'], $params['noredirect'] );
- $result->setIndexedTagName( $r['subpages'], 'subpage' );
+ ApiResult::setIndexedTagName( $r['subpages'], 'subpage' );
if ( $params['movetalk'] ) {
$r['subpages-talk'] = $this->moveSubpages( $fromTalk, $toTalk,
$params['reason'], $params['noredirect'] );
- $result->setIndexedTagName( $r['subpages-talk'], 'subpage' );
+ ApiResult::setIndexedTagName( $r['subpages-talk'], 'subpage' );
}
}
@@ -148,6 +142,33 @@ class ApiMove extends ApiBase {
}
/**
+ * @param Title $from
+ * @param Title $to
+ * @param string $reason
+ * @param bool $createRedirect
+ * @return Status
+ */
+ protected function movePage( Title $from, Title $to, $reason, $createRedirect ) {
+ $mp = new MovePage( $from, $to );
+ $valid = $mp->isValidMove();
+ if ( !$valid->isOK() ) {
+ return $valid;
+ }
+
+ $permStatus = $mp->checkPermissions( $this->getUser(), $reason );
+ if ( !$permStatus->isOK() ) {
+ return $permStatus;
+ }
+
+ // Check suppressredirect permission
+ if ( !$this->getUser()->isAllowed( 'suppressredirect' ) ) {
+ $createRedirect = true;
+ }
+
+ return $mp->move( $this->getUser(), $reason, $createRedirect );
+ }
+
+ /**
* @param Title $fromTitle
* @param Title $toTitle
* @param string $reason
@@ -220,37 +241,15 @@ class ApiMove extends ApiBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'from' => "Title of the page you want to move. Cannot be used together with {$p}fromid",
- 'fromid' => "Page ID of the page you want to move. Cannot be used together with {$p}from",
- 'to' => 'Title you want to rename the page to',
- 'reason' => 'Reason for the move',
- 'movetalk' => 'Move the talk page, if it exists',
- 'movesubpages' => 'Move subpages, if applicable',
- 'noredirect' => 'Don\'t create a redirect',
- 'watch' => 'Add the page and the redirect to your watchlist',
- 'unwatch' => 'Remove the page and the redirect from your watchlist',
- 'watchlist' => 'Unconditionally add or remove the page from your ' .
- 'watchlist, use preferences or do not change watch',
- 'ignorewarnings' => 'Ignore any warnings'
- );
- }
-
- public function getDescription() {
- return 'Move a page.';
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
+ 'action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
'reason=Misspelled%20title&movetalk=&noredirect='
+ => 'apihelp-move-example-move',
);
}
diff --git a/includes/api/ApiOpenSearch.php b/includes/api/ApiOpenSearch.php
index 7fb045e3..a93b7cc6 100644
--- a/includes/api/ApiOpenSearch.php
+++ b/includes/api/ApiOpenSearch.php
@@ -3,6 +3,8 @@
* Created on Oct 13, 2006
*
* Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ * Copyright © 2008 Brion Vibber <brion@wikimedia.org>
+ * Copyright © 2014 Brad Jorsch <bjorsch@wikimedia.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -27,21 +29,50 @@
*/
class ApiOpenSearch extends ApiBase {
+ private $format = null;
+ private $fm = null;
+
/**
- * Override built-in handling of format parameter.
- * Only JSON is supported.
+ * Get the output format
*
- * @return ApiFormatBase
+ * @return string
*/
- public function getCustomPrinter() {
- $params = $this->extractRequestParams();
- $format = $params['format'];
- $allowed = array( 'json', 'jsonfm' );
- if ( in_array( $format, $allowed ) ) {
- return $this->getMain()->createPrinterByName( $format );
+ protected function getFormat() {
+ if ( $this->format === null ) {
+ $params = $this->extractRequestParams();
+ $format = $params['format'];
+
+ $allowedParams = $this->getAllowedParams();
+ if ( !in_array( $format, $allowedParams['format'][ApiBase::PARAM_TYPE] ) ) {
+ $format = $allowedParams['format'][ApiBase::PARAM_DFLT];
+ }
+
+ if ( substr( $format, -2 ) === 'fm' ) {
+ $this->format = substr( $format, 0, -2 );
+ $this->fm = 'fm';
+ } else {
+ $this->format = $format;
+ $this->fm = '';
+ }
}
+ return $this->format;
+ }
+
+ public function getCustomPrinter() {
+ switch ( $this->getFormat() ) {
+ case 'json':
+ return new ApiOpenSearchFormatJson(
+ $this->getMain(), $this->fm, $this->getParameter( 'warningsaserror' )
+ );
+
+ case 'xml':
+ $printer = $this->getMain()->createPrinterByName( 'xml' . $this->fm );
+ $printer->setRootElement( 'SearchSuggestion' );
+ return $printer;
- return $this->getMain()->createPrinterByName( $allowed[0] );
+ default:
+ ApiBase::dieDebug( __METHOD__, "Unsupported format '{$this->getFormat()}'" );
+ }
}
public function execute() {
@@ -51,21 +82,188 @@ class ApiOpenSearch extends ApiBase {
$namespaces = $params['namespace'];
$suggest = $params['suggest'];
- // Some script that was loaded regardless of wgEnableOpenSearchSuggest, likely cached.
- if ( $suggest && !$this->getConfig()->get( 'EnableOpenSearchSuggest' ) ) {
- $searches = array();
+ if ( $params['redirects'] === null ) {
+ // Backwards compatibility, don't resolve for JSON.
+ $resolveRedir = $this->getFormat() !== 'json';
} else {
+ $resolveRedir = $params['redirects'] === 'resolve';
+ }
+
+ $results = array();
+
+ if ( !$suggest || $this->getConfig()->get( 'EnableOpenSearchSuggest' ) ) {
// Open search results may be stored for a very long time
$this->getMain()->setCacheMaxAge( $this->getConfig()->get( 'SearchSuggestCacheExpiry' ) );
$this->getMain()->setCacheMode( 'public' );
+ $this->search( $search, $limit, $namespaces, $resolveRedir, $results );
+
+ // Allow hooks to populate extracts and images
+ Hooks::run( 'ApiOpenSearchSuggest', array( &$results ) );
+
+ // Trim extracts, if necessary
+ $length = $this->getConfig()->get( 'OpenSearchDescriptionLength' );
+ foreach ( $results as &$r ) {
+ if ( is_string( $r['extract'] ) && !$r['extract trimmed'] ) {
+ $r['extract'] = self::trimExtract( $r['extract'], $length );
+ }
+ }
+ }
+
+ // Populate result object
+ $this->populateResult( $search, $results );
+ }
- $searcher = new StringPrefixSearch;
- $searches = $searcher->searchWithVariants( $search, $limit, $namespaces );
+ /**
+ * Perform the search
+ *
+ * @param string $search Text to search
+ * @param int $limit Maximum items to return
+ * @param array $namespaces Namespaces to search
+ * @param bool $resolveRedir Whether to resolve redirects
+ * @param array &$results Put results here. Keys have to be integers.
+ */
+ protected function search( $search, $limit, $namespaces, $resolveRedir, &$results ) {
+ // Find matching titles as Title objects
+ $searcher = new TitlePrefixSearch;
+ $titles = $searcher->searchWithVariants( $search, $limit, $namespaces );
+ if ( !$titles ) {
+ return;
}
- // Set top level elements
+
+ // Special pages need unique integer ids in the return list, so we just
+ // assign them negative numbers because those won't clash with the
+ // always positive articleIds that non-special pages get.
+ $nextSpecialPageId = -1;
+
+ if ( $resolveRedir ) {
+ // Query for redirects
+ $redirects = array();
+ $lb = new LinkBatch( $titles );
+ if ( !$lb->isEmpty() ) {
+ $db = $this->getDb();
+ $res = $db->select(
+ array( 'page', 'redirect' ),
+ array( 'page_namespace', 'page_title', 'rd_namespace', 'rd_title' ),
+ array(
+ 'rd_from = page_id',
+ 'rd_interwiki IS NULL OR rd_interwiki = ' . $db->addQuotes( '' ),
+ $lb->constructSet( 'page', $db ),
+ ),
+ __METHOD__
+ );
+ foreach ( $res as $row ) {
+ $redirects[$row->page_namespace][$row->page_title] =
+ array( $row->rd_namespace, $row->rd_title );
+ }
+ }
+
+ // Bypass any redirects
+ $seen = array();
+ foreach ( $titles as $title ) {
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+ $from = null;
+ if ( isset( $redirects[$ns][$dbkey] ) ) {
+ list( $ns, $dbkey ) = $redirects[$ns][$dbkey];
+ $from = $title;
+ $title = Title::makeTitle( $ns, $dbkey );
+ }
+ if ( !isset( $seen[$ns][$dbkey] ) ) {
+ $seen[$ns][$dbkey] = true;
+ $resultId = $title->getArticleId();
+ if ( $resultId === 0 ) {
+ $resultId = $nextSpecialPageId;
+ $nextSpecialPageId -= 1;
+ }
+ $results[$resultId] = array(
+ 'title' => $title,
+ 'redirect from' => $from,
+ 'extract' => false,
+ 'extract trimmed' => false,
+ 'image' => false,
+ 'url' => wfExpandUrl( $title->getFullUrl(), PROTO_CURRENT ),
+ );
+ }
+ }
+ } else {
+ foreach ( $titles as $title ) {
+ $resultId = $title->getArticleId();
+ if ( $resultId === 0 ) {
+ $resultId = $nextSpecialPageId;
+ $nextSpecialPageId -= 1;
+ }
+ $results[$resultId] = array(
+ 'title' => $title,
+ 'redirect from' => null,
+ 'extract' => false,
+ 'extract trimmed' => false,
+ 'image' => false,
+ 'url' => wfExpandUrl( $title->getFullUrl(), PROTO_CURRENT ),
+ );
+ }
+ }
+ }
+
+ /**
+ * @param string $search
+ * @param array &$results
+ */
+ protected function populateResult( $search, &$results ) {
$result = $this->getResult();
- $result->addValue( null, 0, $search );
- $result->addValue( null, 1, $searches );
+
+ switch ( $this->getFormat() ) {
+ case 'json':
+ // http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.1
+ $result->addArrayType( null, 'array' );
+ $result->addValue( null, 0, strval( $search ) );
+ $terms = array();
+ $descriptions = array();
+ $urls = array();
+ foreach ( $results as $r ) {
+ $terms[] = $r['title']->getPrefixedText();
+ $descriptions[] = strval( $r['extract'] );
+ $urls[] = $r['url'];
+ }
+ $result->addValue( null, 1, $terms );
+ $result->addValue( null, 2, $descriptions );
+ $result->addValue( null, 3, $urls );
+ break;
+
+ case 'xml':
+ // http://msdn.microsoft.com/en-us/library/cc891508%28v=vs.85%29.aspx
+ $imageKeys = array(
+ 'source' => true,
+ 'alt' => true,
+ 'width' => true,
+ 'height' => true,
+ 'align' => true,
+ );
+ $items = array();
+ foreach ( $results as $r ) {
+ $item = array(
+ 'Text' => $r['title']->getPrefixedText(),
+ 'Url' => $r['url'],
+ );
+ if ( is_string( $r['extract'] ) && $r['extract'] !== '' ) {
+ $item['Description'] = $r['extract'];
+ }
+ if ( is_array( $r['image'] ) && isset( $r['image']['source'] ) ) {
+ $item['Image'] = array_intersect_key( $r['image'], $imageKeys );
+ }
+ ApiResult::setSubelementsList( $item, array_keys( $item ) );
+ $items[] = $item;
+ }
+ ApiResult::setIndexedTagName( $items, 'Item' );
+ $result->addValue( null, 'version', '2.0' );
+ $result->addValue( null, 'xmlns', 'http://opensearch.org/searchsuggest2' );
+ $result->addValue( null, 'Query', strval( $search ) );
+ $result->addSubelementsList( null, 'Query' );
+ $result->addValue( null, 'Section', $items );
+ break;
+
+ default:
+ ApiBase::dieDebug( __METHOD__, "Unsupported format '{$this->getFormat()}'" );
+ }
}
public function getAllowedParams() {
@@ -84,34 +282,117 @@ class ApiOpenSearch extends ApiBase {
ApiBase::PARAM_ISMULTI => true
),
'suggest' => false,
+ 'redirects' => array(
+ ApiBase::PARAM_TYPE => array( 'return', 'resolve' ),
+ ),
'format' => array(
ApiBase::PARAM_DFLT => 'json',
- ApiBase::PARAM_TYPE => array( 'json', 'jsonfm' ),
- )
+ ApiBase::PARAM_TYPE => array( 'json', 'jsonfm', 'xml', 'xmlfm' ),
+ ),
+ 'warningsaserror' => false,
);
}
- public function getParamDescription() {
+ protected function getExamplesMessages() {
return array(
- 'search' => 'Search string',
- 'limit' => 'Maximum amount of results to return',
- 'namespace' => 'Namespaces to search',
- 'suggest' => 'Do nothing if $wgEnableOpenSearchSuggest is false',
- 'format' => 'The format of the output',
+ 'action=opensearch&search=Te'
+ => 'apihelp-opensearch-example-te',
);
}
- public function getDescription() {
- return 'Search the wiki using the OpenSearch protocol.';
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/API:Opensearch';
}
- public function getExamples() {
- return array(
- 'api.php?action=opensearch&search=Te'
- );
+ /**
+ * Trim an extract to a sensible length.
+ *
+ * Adapted from Extension:OpenSearchXml, which adapted it from
+ * Extension:ActiveAbstract.
+ *
+ * @param string $text
+ * @param int $len Target length; actual result will continue to the end of a sentence.
+ * @return string
+ */
+ public static function trimExtract( $text, $length ) {
+ static $regex = null;
+
+ if ( $regex === null ) {
+ $endchars = array(
+ '([^\d])\.\s', '\!\s', '\?\s', // regular ASCII
+ '。', // full-width ideographic full-stop
+ '.', '!', '?', // double-width roman forms
+ '。', // half-width ideographic full stop
+ );
+ $endgroup = implode( '|', $endchars );
+ $end = "(?:$endgroup)";
+ $sentence = ".{{$length},}?$end+";
+ $regex = "/^($sentence)/u";
+ }
+
+ $matches = array();
+ if ( preg_match( $regex, $text, $matches ) ) {
+ return trim( $matches[1] );
+ } else {
+ // Just return the first line
+ $lines = explode( "\n", $text );
+ return trim( $lines[0] );
+ }
}
- public function getHelpUrls() {
- return 'https://www.mediawiki.org/wiki/API:Opensearch';
+ /**
+ * Fetch the template for a type.
+ *
+ * @param string $type MIME type
+ * @return string
+ * @throws MWException
+ */
+ public static function getOpenSearchTemplate( $type ) {
+ global $wgOpenSearchTemplate, $wgCanonicalServer;
+
+ if ( $wgOpenSearchTemplate && $type === 'application/x-suggestions+json' ) {
+ return $wgOpenSearchTemplate;
+ }
+
+ $ns = implode( '|', SearchEngine::defaultNamespaces() );
+ if ( !$ns ) {
+ $ns = "0";
+ }
+
+ switch ( $type ) {
+ case 'application/x-suggestions+json':
+ return $wgCanonicalServer . wfScript( 'api' )
+ . '?action=opensearch&search={searchTerms}&namespace=' . $ns;
+
+ case 'application/x-suggestions+xml':
+ return $wgCanonicalServer . wfScript( 'api' )
+ . '?action=opensearch&format=xml&search={searchTerms}&namespace=' . $ns;
+
+ default:
+ throw new MWException( __METHOD__ . ": Unknown type '$type'" );
+ }
+ }
+}
+
+class ApiOpenSearchFormatJson extends ApiFormatJson {
+ private $warningsAsError = false;
+
+ public function __construct( ApiMain $main, $fm, $warningsAsError ) {
+ parent::__construct( $main, "json$fm" );
+ $this->warningsAsError = $warningsAsError;
+ }
+
+ public function execute() {
+ if ( !$this->getResult()->getResultData( 'error' ) ) {
+ $warnings = $this->getResult()->removeValue( 'warnings', null );
+ if ( $this->warningsAsError && $warnings ) {
+ $this->dieUsage(
+ 'Warnings cannot be represented in OpenSearch JSON format', 'warnings', 0,
+ array( 'warnings' => $warnings )
+ );
+ }
+ }
+
+ parent::execute();
}
}
diff --git a/includes/api/ApiOptions.php b/includes/api/ApiOptions.php
index b01dc3e2..8ef06299 100644
--- a/includes/api/ApiOptions.php
+++ b/includes/api/ApiOptions.php
@@ -153,30 +153,6 @@ class ApiOptions extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'reset' => 'Resets preferences to the site defaults',
- 'resetkinds' => 'List of types of options to reset when the "reset" option is set',
- 'change' => array( 'List of changes, formatted name=value (e.g. skin=vector), ' .
- 'value cannot contain pipe characters. If no value is given (not ',
- 'even an equals sign), e.g., optionname|otheroption|..., the ' .
- 'option will be reset to its default value'
- ),
- 'optionname' => 'A name of a option which should have an optionvalue set',
- 'optionvalue' => 'A value of the option specified by the optionname, ' .
- 'can contain pipe characters',
- );
- }
-
- public function getDescription() {
- return array(
- 'Change preferences of the current user.',
- 'Only options which are registered in core or in one of installed extensions,',
- 'or as options with keys prefixed with \'userjs-\' (intended to be used by user',
- 'scripts), can be set.'
- );
- }
-
public function needsToken() {
return 'csrf';
}
@@ -185,12 +161,15 @@ class ApiOptions extends ApiBase {
return 'https://www.mediawiki.org/wiki/API:Options';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=options&reset=&token=123ABC',
- 'api.php?action=options&change=skin=vector|hideminor=1&token=123ABC',
- 'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&' .
- 'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
+ 'action=options&reset=&token=123ABC'
+ => 'apihelp-options-example-reset',
+ 'action=options&change=skin=vector|hideminor=1&token=123ABC'
+ => 'apihelp-options-example-change',
+ 'action=options&reset=&change=skin=monobook&optionname=nickname&' .
+ 'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC'
+ => 'apihelp-options-example-complex',
);
}
}
diff --git a/includes/api/ApiPageSet.php b/includes/api/ApiPageSet.php
index 0f264675..e6f218d6 100644
--- a/includes/api/ApiPageSet.php
+++ b/includes/api/ApiPageSet.php
@@ -53,7 +53,10 @@ class ApiPageSet extends ApiBase {
private $mAllPages = array(); // [ns][dbkey] => page_id or negative when missing
private $mTitles = array();
+ private $mGoodAndMissingPages = array(); // [ns][dbkey] => page_id or negative when missing
+ private $mGoodPages = array(); // [ns][dbkey] => page_id
private $mGoodTitles = array();
+ private $mMissingPages = array(); // [ns][dbkey] => fake page_id
private $mMissingTitles = array();
private $mInvalidTitles = array();
private $mMissingPageIDs = array();
@@ -65,7 +68,10 @@ class ApiPageSet extends ApiBase {
private $mPendingRedirectIDs = array();
private $mConvertedTitles = array();
private $mGoodRevIDs = array();
+ private $mLiveRevIDs = array();
+ private $mDeletedRevIDs = array();
private $mMissingRevIDs = array();
+ private $mGeneratorData = array(); // [ns][dbkey] => data array
private $mFakePageId = -1;
private $mCacheMode = 'public';
private $mRequestedPageFields = array();
@@ -90,7 +96,7 @@ class ApiPageSet extends ApiBase {
$v = $val;
}
if ( $flag !== null ) {
- $v[$flag] = '';
+ $v[$flag] = true;
}
$result[] = $v;
}
@@ -109,11 +115,9 @@ class ApiPageSet extends ApiBase {
$this->mAllowGenerator = ( $flags & ApiPageSet::DISABLE_GENERATORS ) == 0;
$this->mDefaultNamespace = $defaultNamespace;
- $this->profileIn();
$this->mParams = $this->extractRequestParams();
$this->mResolveRedirects = $this->mParams['redirects'];
$this->mConvertTitles = $this->mParams['converttitles'];
- $this->profileOut();
}
/**
@@ -137,17 +141,12 @@ class ApiPageSet extends ApiBase {
* relevant parameters as used
*/
private function executeInternal( $isDryRun ) {
- $this->profileIn();
-
$generatorName = $this->mAllowGenerator ? $this->mParams['generator'] : null;
if ( isset( $generatorName ) ) {
$dbSource = $this->mDbSource;
- $isQuery = $dbSource instanceof ApiQuery;
- if ( !$isQuery ) {
+ if ( !$dbSource instanceof ApiQuery ) {
// If the parent container of this pageset is not ApiQuery, we must create it to run generator
$dbSource = $this->getMain()->getModuleManager()->getModule( 'query' );
- // Enable profiling for query module because it will be used for db sql profiling
- $dbSource->profileIn();
}
$generator = $dbSource->getModuleManager()->getModule( $generatorName, null, true );
if ( $generator === null ) {
@@ -168,12 +167,9 @@ class ApiPageSet extends ApiBase {
$tmpPageSet->executeInternal( $isDryRun );
// populate this pageset with the generator output
- $this->profileOut();
- $generator->profileIn();
-
if ( !$isDryRun ) {
$generator->executeGenerator( $this );
- wfRunHooks( 'APIQueryGeneratorAfterExecute', array( &$generator, &$this ) );
+ Hooks::run( 'APIQueryGeneratorAfterExecute', array( &$generator, &$this ) );
} else {
// Prevent warnings from being reported on these parameters
$main = $this->getMain();
@@ -181,17 +177,10 @@ class ApiPageSet extends ApiBase {
$main->getVal( $generator->encodeParamName( $paramName ) );
}
}
- $generator->profileOut();
- $this->profileIn();
if ( !$isDryRun ) {
$this->resolvePendingRedirects();
}
-
- if ( !$isQuery ) {
- // If this pageset is not part of the query, we called profileIn() above
- $dbSource->profileOut();
- }
} else {
// Only one of the titles/pageids/revids is allowed at the same time
$dataSource = null;
@@ -235,7 +224,6 @@ class ApiPageSet extends ApiBase {
}
}
}
- $this->profileOut();
}
/**
@@ -309,6 +297,10 @@ class ApiPageSet extends ApiBase {
$pageFlds['page_is_redirect'] = null;
}
+ if ( $this->getConfig()->get( 'ContentHandlerUseDB' ) ) {
+ $pageFlds['page_content_model'] = null;
+ }
+
// only store non-default fields
$this->mRequestedPageFields = array_diff_key( $this->mRequestedPageFields, $pageFlds );
@@ -344,6 +336,14 @@ class ApiPageSet extends ApiBase {
}
/**
+ * Returns an array [ns][dbkey] => page_id for all good titles.
+ * @return array
+ */
+ public function getGoodTitlesByNamespace() {
+ return $this->mGoodPages;
+ }
+
+ /**
* Title objects that were found in the database.
* @return Title[] Array page_id (int) => Title (obj)
*/
@@ -360,6 +360,15 @@ class ApiPageSet extends ApiBase {
}
/**
+ * Returns an array [ns][dbkey] => fake_page_id for all missing titles.
+ * fake_page_id is a unique negative number.
+ * @return array
+ */
+ public function getMissingTitlesByNamespace() {
+ return $this->mMissingPages;
+ }
+
+ /**
* Title objects that were NOT found in the database.
* The array's index will be negative for each item
* @return Title[]
@@ -369,6 +378,22 @@ class ApiPageSet extends ApiBase {
}
/**
+ * Returns an array [ns][dbkey] => page_id for all good and missing titles.
+ * @return array
+ */
+ public function getGoodAndMissingTitlesByNamespace() {
+ return $this->mGoodAndMissingPages;
+ }
+
+ /**
+ * Title objects for good and missing titles.
+ * @return array
+ */
+ public function getGoodAndMissingTitles() {
+ return $this->mGoodTitles + $this->mMissingTitles;
+ }
+
+ /**
* Titles that were deemed invalid by Title::newFromText()
* The array's index will be unique and negative for each item
* @return string[] Array of strings (not Title objects)
@@ -411,10 +436,13 @@ class ApiPageSet extends ApiBase {
if ( $titleTo->hasFragment() ) {
$r['tofragment'] = $titleTo->getFragment();
}
+ if ( $titleTo->isExternal() ) {
+ $r['tointerwiki'] = $titleTo->getInterwiki();
+ }
$values[] = $r;
}
if ( !empty( $values ) && $result ) {
- $result->setIndexedTagName( $values, 'r' );
+ ApiResult::setIndexedTagName( $values, 'r' );
}
return $values;
@@ -445,7 +473,7 @@ class ApiPageSet extends ApiBase {
);
}
if ( !empty( $values ) && $result ) {
- $result->setIndexedTagName( $values, 'n' );
+ ApiResult::setIndexedTagName( $values, 'n' );
}
return $values;
@@ -476,7 +504,7 @@ class ApiPageSet extends ApiBase {
);
}
if ( !empty( $values ) && $result ) {
- $result->setIndexedTagName( $values, 'c' );
+ ApiResult::setIndexedTagName( $values, 'c' );
}
return $values;
@@ -513,7 +541,7 @@ class ApiPageSet extends ApiBase {
$values[] = $item;
}
if ( !empty( $values ) && $result ) {
- $result->setIndexedTagName( $values, 'i' );
+ ApiResult::setIndexedTagName( $values, 'i' );
}
return $values;
@@ -560,7 +588,7 @@ class ApiPageSet extends ApiBase {
}
/**
- * Get the list of revision IDs (requested with the revids= parameter)
+ * Get the list of valid revision IDs (requested with the revids= parameter)
* @return array Array of revID (int) => pageID (int)
*/
public function getRevisionIDs() {
@@ -568,6 +596,22 @@ class ApiPageSet extends ApiBase {
}
/**
+ * Get the list of non-deleted revision IDs (requested with the revids= parameter)
+ * @return array Array of revID (int) => pageID (int)
+ */
+ public function getLiveRevisionIDs() {
+ return $this->mLiveRevIDs;
+ }
+
+ /**
+ * Get the list of revision IDs that were associated with deleted titles.
+ * @return array Array of revID (int) => pageID (int)
+ */
+ public function getDeletedRevisionIDs() {
+ return $this->mDeletedRevIDs;
+ }
+
+ /**
* Revision IDs that were not found in the database
* @return array Array of revision IDs
*/
@@ -589,7 +633,7 @@ class ApiPageSet extends ApiBase {
);
}
if ( !empty( $values ) && $result ) {
- $result->setIndexedTagName( $values, 'rev' );
+ ApiResult::setIndexedTagName( $values, 'rev' );
}
return $values;
@@ -616,9 +660,7 @@ class ApiPageSet extends ApiBase {
* @param array $titles Array of Title objects
*/
public function populateFromTitles( $titles ) {
- $this->profileIn();
$this->initFromTitles( $titles );
- $this->profileOut();
}
/**
@@ -626,20 +668,20 @@ class ApiPageSet extends ApiBase {
* @param array $pageIDs Array of page IDs
*/
public function populateFromPageIDs( $pageIDs ) {
- $this->profileIn();
$this->initFromPageIds( $pageIDs );
- $this->profileOut();
}
/**
* Populate this PageSet from a rowset returned from the database
+ *
+ * Note that the query result must include the columns returned by
+ * $this->getPageTableFields().
+ *
* @param DatabaseBase $db
* @param ResultWrapper $queryResult Query result object
*/
public function populateFromQueryResult( $db, $queryResult ) {
- $this->profileIn();
$this->initFromQueryResult( $queryResult );
- $this->profileOut();
}
/**
@@ -647,9 +689,7 @@ class ApiPageSet extends ApiBase {
* @param array $revIDs Array of revision IDs
*/
public function populateFromRevisionIDs( $revIDs ) {
- $this->profileIn();
$this->initFromRevIDs( $revIDs );
- $this->profileOut();
}
/**
@@ -667,6 +707,8 @@ class ApiPageSet extends ApiBase {
if ( $this->mResolveRedirects && $row->page_is_redirect == '1' ) {
$this->mPendingRedirectIDs[$pageId] = $title;
} else {
+ $this->mGoodPages[$row->page_namespace][$row->page_title] = $pageId;
+ $this->mGoodAndMissingPages[$row->page_namespace][$row->page_title] = $pageId;
$this->mGoodTitles[$pageId] = $title;
}
@@ -710,10 +752,8 @@ class ApiPageSet extends ApiBase {
$set = $linkBatch->constructSet( 'page', $db );
// Get pageIDs data from the `page` table
- $this->profileDBIn();
$res = $db->select( 'page', $this->getPageTableFields(), $set,
__METHOD__ );
- $this->profileDBOut();
// Hack: get the ns:titles stored in array(ns => array(titles)) format
$this->initFromQueryResult( $res, $linkBatch->data, true ); // process Titles
@@ -744,10 +784,8 @@ class ApiPageSet extends ApiBase {
$db = $this->getDB();
// Get pageIDs data from the `page` table
- $this->profileDBIn();
$res = $db->select( 'page', $this->getPageTableFields(), $set,
__METHOD__ );
- $this->profileDBOut();
}
$this->initFromQueryResult( $res, $remaining, false ); // process PageIDs
@@ -803,6 +841,8 @@ class ApiPageSet extends ApiBase {
foreach ( array_keys( $dbkeys ) as $dbkey ) {
$title = Title::makeTitle( $ns, $dbkey );
$this->mAllPages[$ns][$dbkey] = $this->mFakePageId;
+ $this->mMissingPages[$ns][$dbkey] = $this->mFakePageId;
+ $this->mGoodAndMissingPages[$ns][$dbkey] = $this->mFakePageId;
$this->mMissingTitles[$this->mFakePageId] = $title;
$this->mFakePageId--;
$this->mTitles[] = $title;
@@ -851,22 +891,64 @@ class ApiPageSet extends ApiBase {
$where = array( 'rev_id' => $revids, 'rev_page = page_id' );
// Get pageIDs data from the `page` table
- $this->profileDBIn();
$res = $db->select( $tables, $fields, $where, __METHOD__ );
foreach ( $res as $row ) {
$revid = intval( $row->rev_id );
$pageid = intval( $row->rev_page );
$this->mGoodRevIDs[$revid] = $pageid;
+ $this->mLiveRevIDs[$revid] = $pageid;
$pageids[$pageid] = '';
unset( $remaining[$revid] );
}
- $this->profileDBOut();
}
$this->mMissingRevIDs = array_keys( $remaining );
// Populate all the page information
$this->initFromPageIds( array_keys( $pageids ) );
+
+ // If the user can see deleted revisions, pull out the corresponding
+ // titles from the archive table and include them too. We ignore
+ // ar_page_id because deleted revisions are tied by title, not page_id.
+ if ( !empty( $this->mMissingRevIDs ) && $this->getUser()->isAllowed( 'deletedhistory' ) ) {
+ $remaining = array_flip( $this->mMissingRevIDs );
+ $tables = array( 'archive' );
+ $fields = array( 'ar_rev_id', 'ar_namespace', 'ar_title' );
+ $where = array( 'ar_rev_id' => $this->mMissingRevIDs );
+
+ $res = $db->select( $tables, $fields, $where, __METHOD__ );
+ $titles = array();
+ foreach ( $res as $row ) {
+ $revid = intval( $row->ar_rev_id );
+ $titles[$revid] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+ unset( $remaining[$revid] );
+ }
+
+ $this->initFromTitles( $titles );
+
+ foreach ( $titles as $revid => $title ) {
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+
+ // Handle converted titles
+ if ( !isset( $this->mAllPages[$ns][$dbkey] ) &&
+ isset( $this->mConvertedTitles[$title->getPrefixedText()] )
+ ) {
+ $title = Title::newFromText( $this->mConvertedTitles[$title->getPrefixedText()] );
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+ }
+
+ if ( isset( $this->mAllPages[$ns][$dbkey] ) ) {
+ $this->mGoodRevIDs[$revid] = $this->mAllPages[$ns][$dbkey];
+ $this->mDeletedRevIDs[$revid] = $this->mAllPages[$ns][$dbkey];
+ } else {
+ $remaining[$revid] = true;
+ }
+ }
+
+ $this->mMissingRevIDs = array_keys( $remaining );
+ }
}
/**
@@ -896,9 +978,7 @@ class ApiPageSet extends ApiBase {
}
// Get pageIDs data from the `page` table
- $this->profileDBIn();
$res = $db->select( 'page', $pageFlds, $set, __METHOD__ );
- $this->profileDBOut();
// Hack: get the ns:titles stored in array(ns => array(titles)) format
$this->initFromQueryResult( $res, $linkBatch->data, true );
@@ -917,7 +997,6 @@ class ApiPageSet extends ApiBase {
$lb = new LinkBatch();
$db = $this->getDB();
- $this->profileDBIn();
$res = $db->select(
'redirect',
array(
@@ -929,7 +1008,6 @@ class ApiPageSet extends ApiBase {
), array( 'rd_from' => array_keys( $this->mPendingRedirectIDs ) ),
__METHOD__
);
- $this->profileDBOut();
foreach ( $res as $row ) {
$rdfrom = intval( $row->rd_from );
$from = $this->mPendingRedirectIDs[$rdfrom]->getPrefixedText();
@@ -940,7 +1018,9 @@ class ApiPageSet extends ApiBase {
$row->rd_interwiki
);
unset( $this->mPendingRedirectIDs[$rdfrom] );
- if ( !$to->isExternal() && !isset( $this->mAllPages[$row->rd_namespace][$row->rd_title] ) ) {
+ if ( $to->isExternal() ) {
+ $this->mInterwikiTitles[$to->getPrefixedText()] = $to->getInterwiki();
+ } elseif ( !isset( $this->mAllPages[$row->rd_namespace][$row->rd_title] ) ) {
$lb->add( $row->rd_namespace, $row->rd_title );
}
$this->mRedirectTitles[$from] = $to;
@@ -1066,6 +1146,103 @@ class ApiPageSet extends ApiBase {
}
/**
+ * Set data for a title.
+ *
+ * This data may be extracted into an ApiResult using
+ * self::populateGeneratorData. This should generally be limited to
+ * data that is likely to be particularly useful to end users rather than
+ * just being a dump of everything returned in non-generator mode.
+ *
+ * Redirects here will *not* be followed, even if 'redirects' was
+ * specified, since in the case of multiple redirects we can't know which
+ * source's data to use on the target.
+ *
+ * @param Title $title
+ * @param array $data
+ */
+ public function setGeneratorData( Title $title, array $data ) {
+ $ns = $title->getNamespace();
+ $dbkey = $title->getDBkey();
+ $this->mGeneratorData[$ns][$dbkey] = $data;
+ }
+
+ /**
+ * Populate the generator data for all titles in the result
+ *
+ * The page data may be inserted into an ApiResult object or into an
+ * associative array. The $path parameter specifies the path within the
+ * ApiResult or array to find the "pages" node.
+ *
+ * The "pages" node itself must be an associative array mapping the page ID
+ * or fake page ID values returned by this pageset (see
+ * self::getAllTitlesByNamespace() and self::getSpecialTitles()) to
+ * associative arrays of page data. Each of those subarrays will have the
+ * data from self::setGeneratorData() merged in.
+ *
+ * Data that was set by self::setGeneratorData() for pages not in the
+ * "pages" node will be ignored.
+ *
+ * @param ApiResult|array &$result
+ * @param array $path
+ * @return bool Whether the data fit
+ */
+ public function populateGeneratorData( &$result, array $path = array() ) {
+ if ( $result instanceof ApiResult ) {
+ $data = $result->getResultData( $path );
+ if ( $data === null ) {
+ return true;
+ }
+ } else {
+ $data = &$result;
+ foreach ( $path as $key ) {
+ if ( !isset( $data[$key] ) ) {
+ // Path isn't in $result, so nothing to add, so everything
+ // "fits"
+ return true;
+ }
+ $data = &$data[$key];
+ }
+ }
+ foreach ( $this->mGeneratorData as $ns => $dbkeys ) {
+ if ( $ns === -1 ) {
+ $pages = array();
+ foreach ( $this->mSpecialTitles as $id => $title ) {
+ $pages[$title->getDBkey()] = $id;
+ }
+ } else {
+ if ( !isset( $this->mAllPages[$ns] ) ) {
+ // No known titles in the whole namespace. Skip it.
+ continue;
+ }
+ $pages = $this->mAllPages[$ns];
+ }
+ foreach ( $dbkeys as $dbkey => $genData ) {
+ if ( !isset( $pages[$dbkey] ) ) {
+ // Unknown title. Forget it.
+ continue;
+ }
+ $pageId = $pages[$dbkey];
+ if ( !isset( $data[$pageId] ) ) {
+ // $pageId didn't make it into the result. Ignore it.
+ continue;
+ }
+
+ if ( $result instanceof ApiResult ) {
+ $path2 = array_merge( $path, array( $pageId ) );
+ foreach ( $genData as $key => $value ) {
+ if ( !$result->addValue( $path2, $key, $value ) ) {
+ return false;
+ }
+ }
+ } else {
+ $data[$pageId] = array_merge( $data[$pageId], $genData );
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
* Get the database connection (read-only)
* @return DatabaseBase
*/
@@ -1095,26 +1272,51 @@ class ApiPageSet extends ApiBase {
public function getAllowedParams( $flags = 0 ) {
$result = array(
'titles' => array(
- ApiBase::PARAM_ISMULTI => true
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG => 'api-pageset-param-titles',
),
'pageids' => array(
ApiBase::PARAM_TYPE => 'integer',
- ApiBase::PARAM_ISMULTI => true
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG => 'api-pageset-param-pageids',
),
'revids' => array(
ApiBase::PARAM_TYPE => 'integer',
- ApiBase::PARAM_ISMULTI => true
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG => 'api-pageset-param-revids',
+ ),
+ 'generator' => array(
+ ApiBase::PARAM_TYPE => null,
+ ApiBase::PARAM_VALUE_LINKS => array(),
+ ApiBase::PARAM_HELP_MSG => 'api-pageset-param-generator',
+ ),
+ 'redirects' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => $this->mAllowGenerator
+ ? 'api-pageset-param-redirects-generator'
+ : 'api-pageset-param-redirects-nogenerator',
+ ),
+ 'converttitles' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => array(
+ 'api-pageset-param-converttitles',
+ new DeferredStringifier(
+ function ( IContextSource $context ) {
+ return $context->getLanguage()
+ ->commaList( LanguageConverter::$languagesWithVariants );
+ },
+ $this
+ )
+ ),
),
- 'redirects' => false,
- 'converttitles' => false,
);
- if ( $this->mAllowGenerator ) {
- if ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
- $result['generator'] = array(
- ApiBase::PARAM_TYPE => $this->getGenerators()
- );
- } else {
- $result['generator'] = null;
+
+ if ( !$this->mAllowGenerator ) {
+ unset( $result['generator'] );
+ } elseif ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
+ foreach ( $this->getGenerators() as $g ) {
+ $result['generator'][ApiBase::PARAM_TYPE][] = $g;
+ $result['generator'][ApiBase::PARAM_VALUE_LINKS][$g] = "Special:ApiHelp/query+$g";
}
}
@@ -1148,23 +1350,4 @@ class ApiPageSet extends ApiBase {
return self::$generators;
}
-
- public function getParamDescription() {
- return array(
- 'titles' => 'A list of titles to work on',
- 'pageids' => 'A list of page IDs to work on',
- 'revids' => 'A list of revision IDs to work on',
- 'generator' => array(
- 'Get the list of pages to work on by executing the specified query module.',
- 'NOTE: generator parameter names must be prefixed with a \'g\', see examples'
- ),
- 'redirects' => 'Automatically resolve redirects',
- 'converttitles' => array(
- 'Convert titles to other variants if necessary. Only works if ' .
- 'the wiki\'s content language supports variant conversion.',
- 'Languages that support variant conversion include ' .
- implode( ', ', LanguageConverter::$languagesWithVariants )
- ),
- );
- }
}
diff --git a/includes/api/ApiParamInfo.php b/includes/api/ApiParamInfo.php
index 067b2f59..4dcaf78e 100644
--- a/includes/api/ApiParamInfo.php
+++ b/includes/api/ApiParamInfo.php
@@ -29,232 +29,329 @@
*/
class ApiParamInfo extends ApiBase {
- /**
- * @var ApiQuery
- */
- protected $queryObj;
+ private $helpFormat;
+ private $context;
public function __construct( ApiMain $main, $action ) {
parent::__construct( $main, $action );
- $this->queryObj = new ApiQuery( $this->getMain(), 'query' );
}
public function execute() {
// Get parameters
$params = $this->extractRequestParams();
- $resultObj = $this->getResult();
+
+ $this->helpFormat = $params['helpformat'];
+ $this->context = new RequestContext;
+ $this->context->setUser( new User ); // anon to avoid caching issues
+ $this->context->setLanguage( $this->getMain()->getLanguage() );
+
+ if ( is_array( $params['modules'] ) ) {
+ $modules = $params['modules'];
+ } else {
+ $modules = array();
+ }
+
+ if ( is_array( $params['querymodules'] ) ) {
+ $this->logFeatureUsage( 'action=paraminfo&querymodules' );
+ $queryModules = $params['querymodules'];
+ foreach ( $queryModules as $m ) {
+ $modules[] = 'query+' . $m;
+ }
+ } else {
+ $queryModules = array();
+ }
+
+ if ( is_array( $params['formatmodules'] ) ) {
+ $this->logFeatureUsage( 'action=paraminfo&formatmodules' );
+ $formatModules = $params['formatmodules'];
+ foreach ( $formatModules as $m ) {
+ $modules[] = $m;
+ }
+ } else {
+ $formatModules = array();
+ }
$res = array();
- $this->addModulesInfo( $params, 'modules', $res, $resultObj );
+ foreach ( $modules as $m ) {
+ try {
+ $module = $this->getModuleFromPath( $m );
+ } catch ( UsageException $ex ) {
+ $this->setWarning( $ex->getMessage() );
+ continue;
+ }
+ $key = 'modules';
+
+ // Back compat
+ $isBCQuery = false;
+ if ( $module->getParent() && $module->getParent()->getModuleName() == 'query' &&
+ in_array( $module->getModuleName(), $queryModules )
+ ) {
+ $isBCQuery = true;
+ $key = 'querymodules';
+ }
+ if ( in_array( $module->getModuleName(), $formatModules ) ) {
+ $key = 'formatmodules';
+ }
- $this->addModulesInfo( $params, 'querymodules', $res, $resultObj );
+ $item = $this->getModuleInfo( $module );
+ if ( $isBCQuery ) {
+ $item['querytype'] = $item['group'];
+ }
+ $res[$key][] = $item;
+ }
+
+ $result = $this->getResult();
+ $result->addValue( array( $this->getModuleName() ), 'helpformat', $this->helpFormat );
+
+ foreach ( $res as $key => $stuff ) {
+ ApiResult::setIndexedTagName( $res[$key], 'module' );
+ }
if ( $params['mainmodule'] ) {
- $res['mainmodule'] = $this->getClassInfo( $this->getMain() );
+ $this->logFeatureUsage( 'action=paraminfo&mainmodule' );
+ $res['mainmodule'] = $this->getModuleInfo( $this->getMain() );
}
if ( $params['pagesetmodule'] ) {
- $pageSet = new ApiPageSet( $this->queryObj );
- $res['pagesetmodule'] = $this->getClassInfo( $pageSet );
+ $this->logFeatureUsage( 'action=paraminfo&pagesetmodule' );
+ $pageSet = new ApiPageSet( $this->getMain()->getModuleManager()->getModule( 'query' ) );
+ $res['pagesetmodule'] = $this->getModuleInfo( $pageSet );
+ unset( $res['pagesetmodule']['name'] );
+ unset( $res['pagesetmodule']['path'] );
+ unset( $res['pagesetmodule']['group'] );
}
- $this->addModulesInfo( $params, 'formatmodules', $res, $resultObj );
-
- $resultObj->addValue( null, $this->getModuleName(), $res );
+ $result->addValue( null, $this->getModuleName(), $res );
}
/**
- * If the type is requested in parameters, adds a section to res with module info.
- * @param array $params User parameters array
- * @param string $type Parameter name
- * @param array $res Store results in this array
- * @param ApiResult $resultObj Results object to set indexed tag.
+ * @param array $res Result array
+ * @param string $key Result key
+ * @param Message[] $msgs
+ * @param bool $joinLists
*/
- private function addModulesInfo( $params, $type, &$res, $resultObj ) {
- if ( !is_array( $params[$type] ) ) {
- return;
- }
- $isQuery = ( $type === 'querymodules' );
- if ( $isQuery ) {
- $mgr = $this->queryObj->getModuleManager();
- } else {
- $mgr = $this->getMain()->getModuleManager();
- }
- $res[$type] = array();
- foreach ( $params[$type] as $mod ) {
- if ( !$mgr->isDefined( $mod ) ) {
- $res[$type][] = array( 'name' => $mod, 'missing' => '' );
- continue;
- }
- $obj = $mgr->getModule( $mod );
- $item = $this->getClassInfo( $obj );
- $item['name'] = $mod;
- if ( $isQuery ) {
- $item['querytype'] = $mgr->getModuleGroup( $mod );
- }
- $res[$type][] = $item;
+ protected function formatHelpMessages( array &$res, $key, array $msgs, $joinLists = false ) {
+ switch ( $this->helpFormat ) {
+ case 'none':
+ break;
+
+ case 'wikitext':
+ $ret = array();
+ foreach ( $msgs as $m ) {
+ $ret[] = $m->setContext( $this->context )->text();
+ }
+ $res[$key] = join( "\n\n", $ret );
+ if ( $joinLists ) {
+ $res[$key] = preg_replace( '!^(([*#:;])[^\n]*)\n\n(?=\2)!m', "$1\n", $res[$key] );
+ }
+ break;
+
+ case 'html':
+ $ret = array();
+ foreach ( $msgs as $m ) {
+ $ret[] = $m->setContext( $this->context )->parseAsBlock();
+ }
+ $ret = join( "\n", $ret );
+ if ( $joinLists ) {
+ $ret = preg_replace( '!\s*</([oud]l)>\s*<\1>\s*!', "\n", $ret );
+ }
+ $res[$key] = Parser::stripOuterParagraph( $ret );
+ break;
+
+ case 'raw':
+ $res[$key] = array();
+ foreach ( $msgs as $m ) {
+ $a = array(
+ 'key' => $m->getKey(),
+ 'params' => $m->getParams(),
+ );
+ if ( $m instanceof ApiHelpParamValueMessage ) {
+ $a['forvalue'] = $m->getParamValue();
+ }
+ $res[$key][] = $a;
+ }
+ ApiResult::setIndexedTagName( $res[$key], 'msg' );
+ break;
}
- $resultObj->setIndexedTagName( $res[$type], 'module' );
}
/**
- * @param ApiBase $obj
+ * @param ApiBase $module
* @return ApiResult
*/
- private function getClassInfo( $obj ) {
+ private function getModuleInfo( $module ) {
$result = $this->getResult();
- $retval['classname'] = get_class( $obj );
- $retval['description'] = implode( "\n", (array)$obj->getFinalDescription() );
- $retval['examples'] = '';
-
- // version is deprecated since 1.21, but needs to be returned for v1
- $retval['version'] = '';
- $retval['prefix'] = $obj->getModulePrefix();
-
- if ( $obj->isReadMode() ) {
- $retval['readrights'] = '';
- }
- if ( $obj->isWriteMode() ) {
- $retval['writerights'] = '';
- }
- if ( $obj->mustBePosted() ) {
- $retval['mustbeposted'] = '';
- }
- if ( $obj instanceof ApiQueryGeneratorBase ) {
- $retval['generator'] = '';
+ $ret = array();
+ $path = $module->getModulePath();
+
+ $ret['name'] = $module->getModuleName();
+ $ret['classname'] = get_class( $module );
+ $ret['path'] = $path;
+ if ( !$module->isMain() ) {
+ $ret['group'] = $module->getParent()->getModuleManager()->getModuleGroup(
+ $module->getModuleName()
+ );
}
+ $ret['prefix'] = $module->getModulePrefix();
- $allowedParams = $obj->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
- if ( !is_array( $allowedParams ) ) {
- return $retval;
- }
+ $this->formatHelpMessages( $ret, 'description', $module->getFinalDescription() );
- $retval['helpurls'] = (array)$obj->getHelpUrls();
- if ( isset( $retval['helpurls'][0] ) && $retval['helpurls'][0] === false ) {
- $retval['helpurls'] = array();
+ foreach ( $module->getHelpFlags() as $flag ) {
+ $ret[$flag] = true;
}
- $result->setIndexedTagName( $retval['helpurls'], 'helpurl' );
- $examples = $obj->getExamples();
- $retval['allexamples'] = array();
- if ( $examples !== false ) {
- if ( is_string( $examples ) ) {
- $examples = array( $examples );
- }
- foreach ( $examples as $k => $v ) {
- if ( strlen( $retval['examples'] ) ) {
- $retval['examples'] .= ' ';
- }
- $item = array();
- if ( is_numeric( $k ) ) {
- $retval['examples'] .= $v;
- ApiResult::setContent( $item, $v );
- } else {
- if ( !is_array( $v ) ) {
- $item['description'] = $v;
+ $ret['helpurls'] = (array)$module->getHelpUrls();
+ if ( isset( $ret['helpurls'][0] ) && $ret['helpurls'][0] === false ) {
+ $ret['helpurls'] = array();
+ }
+ ApiResult::setIndexedTagName( $ret['helpurls'], 'helpurl' );
+
+ if ( $this->helpFormat !== 'none' ) {
+ $ret['examples'] = array();
+ $examples = $module->getExamplesMessages();
+ foreach ( $examples as $qs => $msg ) {
+ $item = array(
+ 'query' => $qs
+ );
+ $msg = ApiBase::makeMessage( $msg, $this->context, array(
+ $module->getModulePrefix(),
+ $module->getModuleName(),
+ $module->getModulePath()
+ ) );
+ $this->formatHelpMessages( $item, 'description', array( $msg ) );
+ if ( isset( $item['description'] ) ) {
+ if ( is_array( $item['description'] ) ) {
+ $item['description'] = $item['description'][0];
} else {
- $item['description'] = implode( $v, "\n" );
+ ApiResult::setSubelementsList( $item, 'description' );
}
- $retval['examples'] .= $item['description'] . ' ' . $k;
- ApiResult::setContent( $item, $k );
}
- $retval['allexamples'][] = $item;
+ $ret['examples'][] = $item;
}
+ ApiResult::setIndexedTagName( $ret['examples'], 'example' );
}
- $result->setIndexedTagName( $retval['allexamples'], 'example' );
-
- $retval['parameters'] = array();
- $paramDesc = $obj->getFinalParamDescription();
- foreach ( $allowedParams as $n => $p ) {
- $a = array( 'name' => $n );
- if ( isset( $paramDesc[$n] ) ) {
- $a['description'] = implode( "\n", (array)$paramDesc[$n] );
- }
- //handle shorthand
- if ( !is_array( $p ) ) {
- $p = array(
- ApiBase::PARAM_DFLT => $p,
- );
+ $ret['parameters'] = array();
+ $params = $module->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+ $paramDesc = $module->getFinalParamDescription();
+ foreach ( $params as $name => $settings ) {
+ if ( !is_array( $settings ) ) {
+ $settings = array( ApiBase::PARAM_DFLT => $settings );
}
- //handle missing type
- if ( !isset( $p[ApiBase::PARAM_TYPE] ) ) {
- $dflt = isset( $p[ApiBase::PARAM_DFLT] ) ? $p[ApiBase::PARAM_DFLT] : null;
- if ( is_bool( $dflt ) ) {
- $p[ApiBase::PARAM_TYPE] = 'boolean';
- } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
- $p[ApiBase::PARAM_TYPE] = 'string';
- } elseif ( is_int( $dflt ) ) {
- $p[ApiBase::PARAM_TYPE] = 'integer';
- }
+ $item = array(
+ 'name' => $name
+ );
+ if ( isset( $paramDesc[$name] ) ) {
+ $this->formatHelpMessages( $item, 'description', $paramDesc[$name], true );
}
- if ( isset( $p[ApiBase::PARAM_DEPRECATED] ) && $p[ApiBase::PARAM_DEPRECATED] ) {
- $a['deprecated'] = '';
+ $item['required'] = !empty( $settings[ApiBase::PARAM_REQUIRED] );
+
+ if ( !empty( $settings[ApiBase::PARAM_DEPRECATED] ) ) {
+ $item['deprecated'] = true;
}
- if ( isset( $p[ApiBase::PARAM_REQUIRED] ) && $p[ApiBase::PARAM_REQUIRED] ) {
- $a['required'] = '';
+
+ if ( $name === 'token' && $module->needsToken() ) {
+ $item['tokentype'] = $module->needsToken();
}
- if ( $n === 'token' && $obj->needsToken() ) {
- $a['tokentype'] = $obj->needsToken();
+ if ( !isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+ $dflt = isset( $settings[ApiBase::PARAM_DFLT] )
+ ? $settings[ApiBase::PARAM_DFLT]
+ : null;
+ if ( is_bool( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'boolean';
+ } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'string';
+ } elseif ( is_int( $dflt ) ) {
+ $settings[ApiBase::PARAM_TYPE] = 'integer';
+ }
}
- if ( isset( $p[ApiBase::PARAM_DFLT] ) ) {
- $type = $p[ApiBase::PARAM_TYPE];
- if ( $type === 'boolean' ) {
- $a['default'] = ( $p[ApiBase::PARAM_DFLT] ? 'true' : 'false' );
- } elseif ( $type === 'string' ) {
- $a['default'] = strval( $p[ApiBase::PARAM_DFLT] );
- } elseif ( $type === 'integer' ) {
- $a['default'] = intval( $p[ApiBase::PARAM_DFLT] );
- } else {
- $a['default'] = $p[ApiBase::PARAM_DFLT];
+ if ( isset( $settings[ApiBase::PARAM_DFLT] ) ) {
+ switch ( $settings[ApiBase::PARAM_TYPE] ) {
+ case 'boolean':
+ $item['default'] = ( $settings[ApiBase::PARAM_DFLT] ? 'true' : 'false' );
+ break;
+ case 'string':
+ $item['default'] = strval( $settings[ApiBase::PARAM_DFLT] );
+ break;
+ case 'integer':
+ $item['default'] = intval( $settings[ApiBase::PARAM_DFLT] );
+ break;
+ default:
+ $item['default'] = $settings[ApiBase::PARAM_DFLT];
+ break;
}
}
- if ( isset( $p[ApiBase::PARAM_ISMULTI] ) && $p[ApiBase::PARAM_ISMULTI] ) {
- $a['multi'] = '';
- $a['limit'] = $this->getMain()->canApiHighLimits() ?
+
+ $item['multi'] = !empty( $settings[ApiBase::PARAM_ISMULTI] );
+ if ( $item['multi'] ) {
+ $item['limit'] = $this->getMain()->canApiHighLimits() ?
ApiBase::LIMIT_SML2 :
ApiBase::LIMIT_SML1;
- $a['lowlimit'] = ApiBase::LIMIT_SML1;
- $a['highlimit'] = ApiBase::LIMIT_SML2;
+ $item['lowlimit'] = ApiBase::LIMIT_SML1;
+ $item['highlimit'] = ApiBase::LIMIT_SML2;
}
- if ( isset( $p[ApiBase::PARAM_ALLOW_DUPLICATES] ) && $p[ApiBase::PARAM_ALLOW_DUPLICATES] ) {
- $a['allowsduplicates'] = '';
+ if ( !empty( $settings[ApiBase::PARAM_ALLOW_DUPLICATES] ) ) {
+ $item['allowsduplicates'] = true;
}
- if ( isset( $p[ApiBase::PARAM_TYPE] ) ) {
- if ( $p[ApiBase::PARAM_TYPE] === 'submodule' ) {
- $a['type'] = $obj->getModuleManager()->getNames( $n );
- sort( $a['type'] );
- $a['submodules'] = '';
+ if ( isset( $settings[ApiBase::PARAM_TYPE] ) ) {
+ if ( $settings[ApiBase::PARAM_TYPE] === 'submodule' ) {
+ $item['type'] = $module->getModuleManager()->getNames( $name );
+ sort( $item['type'] );
+ $item['submodules'] = true;
} else {
- $a['type'] = $p[ApiBase::PARAM_TYPE];
+ $item['type'] = $settings[ApiBase::PARAM_TYPE];
}
- if ( is_array( $a['type'] ) ) {
+ if ( is_array( $item['type'] ) ) {
// To prevent sparse arrays from being serialized to JSON as objects
- $a['type'] = array_values( $a['type'] );
- $result->setIndexedTagName( $a['type'], 't' );
+ $item['type'] = array_values( $item['type'] );
+ ApiResult::setIndexedTagName( $item['type'], 't' );
}
}
- if ( isset( $p[ApiBase::PARAM_MAX] ) ) {
- $a['max'] = $p[ApiBase::PARAM_MAX];
+ if ( isset( $settings[ApiBase::PARAM_MAX] ) ) {
+ $item['max'] = $settings[ApiBase::PARAM_MAX];
+ }
+ if ( isset( $settings[ApiBase::PARAM_MAX2] ) ) {
+ $item['highmax'] = $settings[ApiBase::PARAM_MAX2];
}
- if ( isset( $p[ApiBase::PARAM_MAX2] ) ) {
- $a['highmax'] = $p[ApiBase::PARAM_MAX2];
+ if ( isset( $settings[ApiBase::PARAM_MIN] ) ) {
+ $item['min'] = $settings[ApiBase::PARAM_MIN];
}
- if ( isset( $p[ApiBase::PARAM_MIN] ) ) {
- $a['min'] = $p[ApiBase::PARAM_MIN];
+
+ if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+ $item['info'] = array();
+ foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+ $tag = array_shift( $i );
+ $info = array(
+ 'name' => $tag,
+ );
+ if ( count( $i ) ) {
+ $info['values'] = $i;
+ ApiResult::setIndexedTagName( $info['values'], 'v' );
+ }
+ $this->formatHelpMessages( $info, 'text', array(
+ $this->context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+ ->numParams( count( $i ) )
+ ->params( $this->context->getLanguage()->commaList( $i ) )
+ ->params( $module->getModulePrefix() )
+ ) );
+ ApiResult::setSubelementsList( $info, 'text' );
+ $item['info'][] = $info;
+ }
+ ApiResult::setIndexedTagName( $item['info'], 'i' );
}
- $retval['parameters'][] = $a;
+
+ $ret['parameters'][] = $item;
}
- $result->setIndexedTagName( $retval['parameters'], 'param' );
+ ApiResult::setIndexedTagName( $ret['parameters'], 'param' );
- return $retval;
+ return $ret;
}
public function isReadMode() {
@@ -262,9 +359,9 @@ class ApiParamInfo extends ApiBase {
}
public function getAllowedParams() {
- $modules = $this->getMain()->getModuleManager()->getNames( 'action' );
- sort( $modules );
- $querymodules = $this->queryObj->getModuleManager()->getNames();
+ // back compat
+ $querymodules = $this->getMain()->getModuleManager()
+ ->getModule( 'query' )->getModuleManager()->getNames();
sort( $querymodules );
$formatmodules = $this->getMain()->getModuleManager()->getNames( 'format' );
sort( $formatmodules );
@@ -272,39 +369,35 @@ class ApiParamInfo extends ApiBase {
return array(
'modules' => array(
ApiBase::PARAM_ISMULTI => true,
- ApiBase::PARAM_TYPE => $modules,
),
+ 'helpformat' => array(
+ ApiBase::PARAM_DFLT => 'none',
+ ApiBase::PARAM_TYPE => array( 'html', 'wikitext', 'raw', 'none' ),
+ ),
+
'querymodules' => array(
+ ApiBase::PARAM_DEPRECATED => true,
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => $querymodules,
),
- 'mainmodule' => false,
- 'pagesetmodule' => false,
+ 'mainmodule' => array(
+ ApiBase::PARAM_DEPRECATED => true,
+ ),
+ 'pagesetmodule' => array(
+ ApiBase::PARAM_DEPRECATED => true,
+ ),
'formatmodules' => array(
+ ApiBase::PARAM_DEPRECATED => true,
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => $formatmodules,
)
);
}
- public function getParamDescription() {
- return array(
- 'modules' => 'List of module names (value of the action= parameter)',
- 'querymodules' => 'List of query module names (value of prop=, meta= or list= parameter)',
- 'mainmodule' => 'Get information about the main (top-level) module as well',
- 'pagesetmodule' => 'Get information about the pageset module ' .
- '(providing titles= and friends) as well',
- 'formatmodules' => 'List of format module names (value of format= parameter)',
- );
- }
-
- public function getDescription() {
- return 'Obtain information about certain API parameters and errors.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=paraminfo&modules=parse&querymodules=allpages|siteinfo'
+ 'action=paraminfo&modules=parse|phpfm|query+allpages|query+siteinfo'
+ => 'apihelp-paraminfo-example-1',
);
}
diff --git a/includes/api/ApiParse.php b/includes/api/ApiParse.php
index 06fdf85b..1b5e2658 100644
--- a/includes/api/ApiParse.php
+++ b/includes/api/ApiParse.php
@@ -70,6 +70,9 @@ class ApiParse extends ApiBase {
if ( isset( $params['section'] ) ) {
$this->section = $params['section'];
+ if ( !preg_match( '/^((T-)?\d+|new)$/', $this->section ) ) {
+ $this->dieUsage( "The section parameter must be a valid section id or 'new'", "invalidsection" );
+ }
} else {
$this->section = false;
}
@@ -79,25 +82,18 @@ class ApiParse extends ApiBase {
// TODO: Does this still need $wgTitle?
global $wgParser, $wgTitle;
- // Currently unnecessary, code to act as a safeguard against any change
- // in current behavior of uselang
- $oldLang = null;
- if ( isset( $params['uselang'] )
- && $params['uselang'] != $this->getContext()->getLanguage()->getCode()
- ) {
- $oldLang = $this->getContext()->getLanguage(); // Backup language
- $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
- }
-
$redirValues = null;
// Return result
$result = $this->getResult();
if ( !is_null( $oldid ) || !is_null( $pageid ) || !is_null( $page ) ) {
+ if ( $this->section === 'new' ) {
+ $this->dieUsage( 'section=new cannot be combined with oldid, pageid or page parameters. Please use text', 'params' );
+ }
if ( !is_null( $oldid ) ) {
// Don't use the parser cache
- $rev = Revision::newFromID( $oldid );
+ $rev = Revision::newFromId( $oldid );
if ( !$rev ) {
$this->dieUsage( "There is no revision ID $oldid", 'missingrev' );
}
@@ -128,7 +124,6 @@ class ApiParse extends ApiBase {
} else { // Not $oldid, but $pageid or $page
if ( $params['redirects'] ) {
$reqParams = array(
- 'action' => 'query',
'redirects' => '',
);
if ( !is_null( $pageid ) ) {
@@ -138,14 +133,13 @@ class ApiParse extends ApiBase {
}
$req = new FauxRequest( $reqParams );
$main = new ApiMain( $req );
- $main->execute();
- $data = $main->getResultData();
- $redirValues = isset( $data['query']['redirects'] )
- ? $data['query']['redirects']
- : array();
+ $pageSet = new ApiPageSet( $main );
+ $pageSet->execute();
+ $redirValues = $pageSet->getRedirectTitlesAsResult( $this->getResult() );
+
$to = $page;
- foreach ( (array)$redirValues as $r ) {
- $to = $r['to'];
+ foreach ( $pageSet->getRedirectTitles() as $title ) {
+ $to = $title->getFullText();
}
$pageParams = array( 'title' => $to );
} elseif ( !is_null( $pageid ) ) {
@@ -213,7 +207,14 @@ class ApiParse extends ApiBase {
}
if ( $this->section !== false ) {
- $this->content = $this->getSectionContent( $this->content, $titleObj->getPrefixedText() );
+ if ( $this->section === 'new' ) {
+ // Insert the section title above the content.
+ if ( !is_null( $params['sectiontitle'] ) && $params['sectiontitle'] !== '' ) {
+ $this->content = $this->content->addSectionHeader( $params['sectiontitle'] );
+ }
+ } else {
+ $this->content = $this->getSectionContent( $this->content, $titleObj->getPrefixedText() );
+ }
}
if ( $params['pst'] || $params['onlypst'] ) {
@@ -222,12 +223,19 @@ class ApiParse extends ApiBase {
if ( $params['onlypst'] ) {
// Build a result and bail out
$result_array = array();
- $result_array['text'] = array();
- ApiResult::setContent( $result_array['text'], $this->pstContent->serialize( $format ) );
+ $result_array['text'] = $this->pstContent->serialize( $format );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'text';
if ( isset( $prop['wikitext'] ) ) {
- $result_array['wikitext'] = array();
- ApiResult::setContent( $result_array['wikitext'], $this->content->serialize( $format ) );
+ $result_array['wikitext'] = $this->content->serialize( $format );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'wikitext';
}
+ if ( !is_null( $params['summary'] ) ||
+ ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
+ ) {
+ $result_array['parsedsummary'] = $this->formatSummary( $titleObj, $params );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'parsedsummary';
+ }
+
$result->addValue( null, $this->getModuleName(), $result_array );
return;
@@ -258,16 +266,15 @@ class ApiParse extends ApiBase {
}
if ( isset( $prop['text'] ) ) {
- $result_array['text'] = array();
- ApiResult::setContent( $result_array['text'], $p_result->getText() );
+ $result_array['text'] = $p_result->getText();
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'text';
}
- if ( !is_null( $params['summary'] ) ) {
- $result_array['parsedsummary'] = array();
- ApiResult::setContent(
- $result_array['parsedsummary'],
- Linker::formatComment( $params['summary'], $titleObj )
- );
+ if ( !is_null( $params['summary'] ) ||
+ ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
+ ) {
+ $result_array['parsedsummary'] = $this->formatSummary( $titleObj, $params );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'parsedsummary';
}
if ( isset( $prop['langlinks'] ) ) {
@@ -277,7 +284,7 @@ class ApiParse extends ApiBase {
// Link flags are ignored for now, but may in the future be
// included in the result.
$linkFlags = array();
- wfRunHooks( 'LanguageLinks', array( $titleObj, &$langlinks, &$linkFlags ) );
+ Hooks::run( 'LanguageLinks', array( $titleObj, &$langlinks, &$linkFlags ) );
}
} else {
$langlinks = false;
@@ -290,9 +297,8 @@ class ApiParse extends ApiBase {
$result_array['categories'] = $this->formatCategoryLinks( $p_result->getCategories() );
}
if ( isset( $prop['categorieshtml'] ) ) {
- $categoriesHtml = $this->categoriesHtml( $p_result->getCategories() );
- $result_array['categorieshtml'] = array();
- ApiResult::setContent( $result_array['categorieshtml'], $categoriesHtml );
+ $result_array['categorieshtml'] = $this->categoriesHtml( $p_result->getCategories() );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'categorieshtml';
}
if ( isset( $prop['links'] ) ) {
$result_array['links'] = $this->formatLinks( $p_result->getLinks() );
@@ -332,11 +338,8 @@ class ApiParse extends ApiBase {
}
if ( isset( $prop['headhtml'] ) ) {
- $result_array['headhtml'] = array();
- ApiResult::setContent(
- $result_array['headhtml'],
- $context->getOutput()->headElement( $context->getSkin() )
- );
+ $result_array['headhtml'] = $context->getOutput()->headElement( $context->getSkin() );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'headhtml';
}
}
@@ -347,20 +350,26 @@ class ApiParse extends ApiBase {
$result_array['modulemessages'] = array_values( array_unique( $p_result->getModuleMessages() ) );
}
+ if ( isset( $prop['indicators'] ) ) {
+ $result_array['indicators'] = (array)$p_result->getIndicators();
+ ApiResult::setArrayType( $result_array['indicators'], 'BCkvp', 'name' );
+ }
+
if ( isset( $prop['iwlinks'] ) ) {
$result_array['iwlinks'] = $this->formatIWLinks( $p_result->getInterwikiLinks() );
}
if ( isset( $prop['wikitext'] ) ) {
- $result_array['wikitext'] = array();
- ApiResult::setContent( $result_array['wikitext'], $this->content->serialize( $format ) );
+ $result_array['wikitext'] = $this->content->serialize( $format );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'wikitext';
if ( !is_null( $this->pstContent ) ) {
- $result_array['psttext'] = array();
- ApiResult::setContent( $result_array['psttext'], $this->pstContent->serialize( $format ) );
+ $result_array['psttext'] = $this->pstContent->serialize( $format );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'psttext';
}
}
if ( isset( $prop['properties'] ) ) {
- $result_array['properties'] = $this->formatProperties( $p_result->getProperties() );
+ $result_array['properties'] = (array)$p_result->getProperties();
+ ApiResult::setArrayType( $result_array['properties'], 'BCkvp', 'name' );
}
if ( isset( $prop['limitreportdata'] ) ) {
@@ -368,9 +377,8 @@ class ApiParse extends ApiBase {
$this->formatLimitReportData( $p_result->getLimitReportData() );
}
if ( isset( $prop['limitreporthtml'] ) ) {
- $limitreportHtml = EditPage::getPreviewLimitReport( $p_result );
- $result_array['limitreporthtml'] = array();
- ApiResult::setContent( $result_array['limitreporthtml'], $limitreportHtml );
+ $result_array['limitreporthtml'] = EditPage::getPreviewLimitReport( $p_result );
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'limitreporthtml';
}
if ( $params['generatexml'] ) {
@@ -378,15 +386,15 @@ class ApiParse extends ApiBase {
$this->dieUsage( "generatexml is only supported for wikitext content", "notwikitext" );
}
- $wgParser->startExternalParse( $titleObj, $popts, OT_PREPROCESS );
+ $wgParser->startExternalParse( $titleObj, $popts, Parser::OT_PREPROCESS );
$dom = $wgParser->preprocessToDom( $this->content->getNativeData() );
if ( is_callable( array( $dom, 'saveXML' ) ) ) {
$xml = $dom->saveXML();
} else {
$xml = $dom->__toString();
}
- $result_array['parsetree'] = array();
- ApiResult::setContent( $result_array['parsetree'], $xml );
+ $result_array['parsetree'] = $xml;
+ $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'parsetree';
}
$result_mapping = array(
@@ -401,6 +409,7 @@ class ApiParse extends ApiBase {
'sections' => 's',
'headitems' => 'hi',
'modules' => 'm',
+ 'indicators' => 'ind',
'modulescripts' => 'm',
'modulestyles' => 'm',
'modulemessages' => 'm',
@@ -409,10 +418,6 @@ class ApiParse extends ApiBase {
);
$this->setIndexedTagNames( $result_array, $result_mapping );
$result->addValue( null, $this->getModuleName(), $result_array );
-
- if ( !is_null( $oldLang ) ) {
- $this->getContext()->setLanguage( $oldLang ); // Reset language to $oldLang
- }
}
/**
@@ -424,7 +429,6 @@ class ApiParse extends ApiBase {
* @return ParserOptions
*/
protected function makeParserOptions( WikiPage $pageObj, array $params ) {
- wfProfileIn( __METHOD__ );
$popts = $pageObj->makeParserOptions( $this->getContext() );
$popts->enableLimitReport( !$params['disablepp'] );
@@ -432,8 +436,6 @@ class ApiParse extends ApiBase {
$popts->setIsSectionPreview( $params['sectionpreview'] );
$popts->setEditSection( !$params['disableeditsection'] );
- wfProfileOut( __METHOD__ );
-
return $popts;
}
@@ -489,6 +491,30 @@ class ApiParse extends ApiBase {
return $section;
}
+ /**
+ * This mimicks the behavior of EditPage in formatting a summary
+ *
+ * @param Title $title of the page being parsed
+ * @param Array $params the API parameters of the request
+ * @return Content|bool
+ */
+ private function formatSummary( $title, $params ) {
+ global $wgParser;
+ $summary = !is_null( $params['summary'] ) ? $params['summary'] : '';
+ $sectionTitle = !is_null( $params['sectiontitle'] ) ? $params['sectiontitle'] : '';
+
+ if ( $this->section === 'new' && ( $sectionTitle === '' || $summary === '' ) ) {
+ if( $sectionTitle !== '' ) {
+ $summary = $params['sectiontitle'];
+ }
+ if ( $summary !== '' ) {
+ $summary = wfMessage( 'newsectionsummary' )->rawParams( $wgParser->stripSectionName( $summary ) )
+ ->inContentLanguage()->text();
+ }
+ }
+ return Linker::formatComment( $summary, $title, $this->section === 'new' );
+ }
+
private function formatLangLinks( $links ) {
$result = array();
foreach ( $links as $link ) {
@@ -499,7 +525,7 @@ class ApiParse extends ApiBase {
$entry['lang'] = $bits[0];
if ( $title ) {
$entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
- // localised language name in user language (maybe set by uselang=)
+ // localised language name in 'uselang' language
$entry['langname'] = Language::fetchLanguageName(
$title->getInterwiki(),
$this->getLanguage()->getCode()
@@ -508,7 +534,7 @@ class ApiParse extends ApiBase {
// native language name
$entry['autonym'] = Language::fetchLanguageName( $title->getInterwiki() );
}
- ApiResult::setContent( $entry, $bits[1] );
+ ApiResult::setContentValue( $entry, 'title', $bits[1] );
$result[] = $entry;
}
@@ -543,11 +569,11 @@ class ApiParse extends ApiBase {
foreach ( $links as $link => $sortkey ) {
$entry = array();
$entry['sortkey'] = $sortkey;
- ApiResult::setContent( $entry, $link );
+ ApiResult::setContentValue( $entry, 'category', $link );
if ( !isset( $hiddencats[$link] ) ) {
- $entry['missing'] = '';
+ $entry['missing'] = true;
} elseif ( $hiddencats[$link] ) {
- $entry['hidden'] = '';
+ $entry['hidden'] = true;
}
$result[] = $entry;
}
@@ -568,10 +594,8 @@ class ApiParse extends ApiBase {
foreach ( $nslinks as $title => $id ) {
$entry = array();
$entry['ns'] = $ns;
- ApiResult::setContent( $entry, Title::makeTitle( $ns, $title )->getFullText() );
- if ( $id != 0 ) {
- $entry['exists'] = '';
- }
+ ApiResult::setContentValue( $entry, 'title', Title::makeTitle( $ns, $title )->getFullText() );
+ $entry['exists'] = $id != 0;
$result[] = $entry;
}
}
@@ -591,7 +615,7 @@ class ApiParse extends ApiBase {
$entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
}
- ApiResult::setContent( $entry, $title->getFullText() );
+ ApiResult::setContentValue( $entry, 'title', $title->getFullText() );
$result[] = $entry;
}
}
@@ -604,19 +628,7 @@ class ApiParse extends ApiBase {
foreach ( $headItems as $tag => $content ) {
$entry = array();
$entry['tag'] = $tag;
- ApiResult::setContent( $entry, $content );
- $result[] = $entry;
- }
-
- return $result;
- }
-
- private function formatProperties( $properties ) {
- $result = array();
- foreach ( $properties as $name => $value ) {
- $entry = array();
- $entry['name'] = $name;
- ApiResult::setContent( $entry, $value );
+ ApiResult::setContentValue( $entry, 'content', $content );
$result[] = $entry;
}
@@ -628,7 +640,7 @@ class ApiParse extends ApiBase {
foreach ( $css as $file => $link ) {
$entry = array();
$entry['file'] = $file;
- ApiResult::setContent( $entry, $link );
+ ApiResult::setContentValue( $entry, 'link', $link );
$result[] = $entry;
}
@@ -645,8 +657,7 @@ class ApiParse extends ApiBase {
if ( !is_array( $value ) ) {
$value = array( $value );
}
- $apiResult->setIndexedTagName( $value, 'param' );
- $apiResult->setIndexedTagName_recursive( $value, 'param' );
+ ApiResult::setIndexedTagNameRecursive( $value, 'param' );
$entry = array_merge( $entry, $value );
$result[] = $entry;
}
@@ -657,7 +668,7 @@ class ApiParse extends ApiBase {
private function setIndexedTagNames( &$array, $mapping ) {
foreach ( $mapping as $key => $name ) {
if ( isset( $array[$key] ) ) {
- $this->getResult()->setIndexedTagName( $array[$key], $name );
+ ApiResult::setIndexedTagName( $array[$key], $name );
}
}
}
@@ -694,6 +705,7 @@ class ApiParse extends ApiBase {
'headitems',
'headhtml',
'modules',
+ 'indicators',
'iwlinks',
'wikitext',
'properties',
@@ -704,11 +716,18 @@ class ApiParse extends ApiBase {
'pst' => false,
'onlypst' => false,
'effectivelanglinks' => false,
- 'uselang' => null,
'section' => null,
+ 'sectiontitle' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ),
'disablepp' => false,
'disableeditsection' => false,
- 'generatexml' => false,
+ 'generatexml' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => array(
+ 'apihelp-parse-param-generatexml', CONTENT_MODEL_WIKITEXT
+ ),
+ ),
'preview' => false,
'sectionpreview' => false,
'disabletoc' => false,
@@ -721,97 +740,16 @@ class ApiParse extends ApiBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
- $wikitext = CONTENT_MODEL_WIKITEXT;
-
- return array(
- 'text' => "Text to parse. Use {$p}title or {$p}contentmodel to control the content model",
- 'summary' => 'Summary to parse',
- 'redirects' => "If the {$p}page or the {$p}pageid parameter is set to a redirect, resolve it",
- 'title' => "Title of page the text belongs to. " .
- "If omitted, {$p}contentmodel must be specified, and \"API\" will be used as the title",
- 'page' => "Parse the content of this page. Cannot be used together with {$p}text and {$p}title",
- 'pageid' => "Parse the content of this page. Overrides {$p}page",
- 'oldid' => "Parse the content of this revision. Overrides {$p}page and {$p}pageid",
- 'prop' => array(
- 'Which pieces of information to get',
- ' text - Gives the parsed text of the wikitext',
- ' langlinks - Gives the language links in the parsed wikitext',
- ' categories - Gives the categories in the parsed wikitext',
- ' categorieshtml - Gives the HTML version of the categories',
- ' links - Gives the internal links in the parsed wikitext',
- ' templates - Gives the templates in the parsed wikitext',
- ' images - Gives the images in the parsed wikitext',
- ' externallinks - Gives the external links in the parsed wikitext',
- ' sections - Gives the sections in the parsed wikitext',
- ' revid - Adds the revision ID of the parsed page',
- ' displaytitle - Adds the title of the parsed wikitext',
- ' headitems - Gives items to put in the <head> of the page',
- ' headhtml - Gives parsed <head> of the page',
- ' modules - Gives the ResourceLoader modules used on the page',
- ' iwlinks - Gives interwiki links in the parsed wikitext',
- ' wikitext - Gives the original wikitext that was parsed',
- ' properties - Gives various properties defined in the parsed wikitext',
- ' limitreportdata - Gives the limit report in a structured way.',
- " Gives no data, when {$p}disablepp is set.",
- ' limitreporthtml - Gives the HTML version of the limit report.',
- " Gives no data, when {$p}disablepp is set.",
- ),
- 'effectivelanglinks' => array(
- 'Includes language links supplied by extensions',
- '(for use with prop=langlinks)',
- ),
- 'pst' => array(
- 'Do a pre-save transform on the input before parsing it',
- "Only valid when used with {$p}text",
- ),
- 'onlypst' => array(
- 'Do a pre-save transform (PST) on the input, but don\'t parse it',
- 'Returns the same wikitext, after a PST has been applied.',
- "Only valid when used with {$p}text",
- ),
- 'uselang' => 'Which language to parse the request in',
- 'section' => 'Only retrieve the content of this section number',
- 'disablepp' => 'Disable the PP Report from the parser output',
- 'disableeditsection' => 'Disable edit section links from the parser output',
- 'generatexml' => "Generate XML parse tree (requires contentmodel=$wikitext)",
- 'preview' => 'Parse in preview mode',
- 'sectionpreview' => 'Parse in section preview mode (enables preview mode too)',
- 'disabletoc' => 'Disable table of contents in output',
- 'contentformat' => array(
- 'Content serialization format used for the input text',
- "Only valid when used with {$p}text",
- ),
- 'contentmodel' => array(
- "Content model of the input text. If omitted, ${p}title must be specified, " .
- "and default will be the model of the specified ${p}title",
- "Only valid when used with {$p}text",
- ),
- );
- }
-
- public function getDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'Parses content and returns parser output.',
- 'See the various prop-Modules of action=query to get information from the current' .
- 'version of a page.',
- 'There are several ways to specify the text to parse:',
- "1) Specify a page or revision, using {$p}page, {$p}pageid, or {$p}oldid.",
- "2) Specify content explicitly, using {$p}text, {$p}title, and {$p}contentmodel.",
- "3) Specify only a summary to parse. {$p}prop should be given an empty value.",
- );
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=parse&page=Project:Sandbox' => 'Parse a page',
- 'api.php?action=parse&text={{Project:Sandbox}}&contentmodel=wikitext' => 'Parse wikitext',
- 'api.php?action=parse&text={{PAGENAME}}&title=Test'
- => 'Parse wikitext, specifying the page title',
- 'api.php?action=parse&summary=Some+[[link]]&prop=' => 'Parse a summary',
+ 'action=parse&page=Project:Sandbox'
+ => 'apihelp-parse-example-page',
+ 'action=parse&text={{Project:Sandbox}}&contentmodel=wikitext'
+ => 'apihelp-parse-example-text',
+ 'action=parse&text={{PAGENAME}}&title=Test'
+ => 'apihelp-parse-example-texttitle',
+ 'action=parse&summary=Some+[[link]]&prop='
+ => 'apihelp-parse-example-summary',
);
}
diff --git a/includes/api/ApiPatrol.php b/includes/api/ApiPatrol.php
index 8b66781a..779c4188 100644
--- a/includes/api/ApiPatrol.php
+++ b/includes/api/ApiPatrol.php
@@ -38,7 +38,7 @@ class ApiPatrol extends ApiBase {
$this->requireOnlyOneParameter( $params, 'rcid', 'revid' );
if ( isset( $params['rcid'] ) ) {
- $rc = RecentChange::newFromID( $params['rcid'] );
+ $rc = RecentChange::newFromId( $params['rcid'] );
if ( !$rc ) {
$this->dieUsageMsg( array( 'nosuchrcid', $params['rcid'] ) );
}
@@ -86,25 +86,16 @@ class ApiPatrol extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'rcid' => 'Recentchanges ID to patrol',
- 'revid' => 'Revision ID to patrol',
- );
- }
-
- public function getDescription() {
- return 'Patrol a page or revision.';
- }
-
public function needsToken() {
return 'patrol';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=patrol&token=123ABC&rcid=230672766',
- 'api.php?action=patrol&token=123ABC&revid=230672766'
+ 'action=patrol&token=123ABC&rcid=230672766'
+ => 'apihelp-patrol-example-rcid',
+ 'action=patrol&token=123ABC&revid=230672766'
+ => 'apihelp-patrol-example-revid',
);
}
diff --git a/includes/api/ApiProtect.php b/includes/api/ApiProtect.php
index a3d12b7f..ad028375 100644
--- a/includes/api/ApiProtect.php
+++ b/includes/api/ApiProtect.php
@@ -77,7 +77,7 @@ class ApiProtect extends ApiBase {
$this->dieUsageMsg( array( 'protect-invalidlevel', $p[1] ) );
}
- if ( in_array( $expiry[$i], array( 'infinite', 'indefinite', 'infinity', 'never' ) ) ) {
+ if ( wfIsInfinity( $expiry[$i] ) ) {
$expiryarray[$p[0]] = $db->getInfinity();
} else {
$exp = strtotime( $expiry[$i] );
@@ -124,11 +124,11 @@ class ApiProtect extends ApiBase {
'reason' => $params['reason']
);
if ( $cascade ) {
- $res['cascade'] = '';
+ $res['cascade'] = true;
}
$res['protections'] = $resultProtections;
$result = $this->getResult();
- $result->setIndexedTagName( $res['protections'], 'protection' );
+ ApiResult::setIndexedTagName( $res['protections'], 'protection' );
$result->addValue( null, $this->getModuleName(), $res );
}
@@ -175,43 +175,21 @@ class ApiProtect extends ApiBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'title' => "Title of the page you want to (un)protect. Cannot be used together with {$p}pageid",
- 'pageid' => "ID of the page you want to (un)protect. Cannot be used together with {$p}title",
- 'protections' => 'List of protection levels, formatted action=group (e.g. edit=sysop)',
- 'expiry' => array(
- 'Expiry timestamps. If only one timestamp is ' .
- 'set, it\'ll be used for all protections.',
- 'Use \'infinite\', \'indefinite\', \'infinity\' or \'never\', for a never-expiring protection.'
- ),
- 'reason' => 'Reason for (un)protecting',
- 'cascade' => array(
- 'Enable cascading protection (i.e. protect pages included in this page)',
- 'Ignored if not all protection levels are \'sysop\' or \'protect\''
- ),
- 'watch' => 'If set, add the page being (un)protected to your watchlist',
- 'watchlist' => 'Unconditionally add or remove the page from your ' .
- 'watchlist, use preferences or do not change watch',
- );
- }
-
- public function getDescription() {
- return 'Change the protection level of a page.';
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=protect&title=Main%20Page&token=123ABC&' .
- 'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never',
- 'api.php?action=protect&title=Main%20Page&token=123ABC&' .
+ 'action=protect&title=Main%20Page&token=123ABC&' .
+ 'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never'
+ => 'apihelp-protect-example-protect',
+ 'action=protect&title=Main%20Page&token=123ABC&' .
'protections=edit=all|move=all&reason=Lifting%20restrictions'
+ => 'apihelp-protect-example-unprotect',
+ 'action=protect&title=Main%20Page&token=123ABC&' .
+ 'protections=&reason=Lifting%20restrictions'
+ => 'apihelp-protect-example-unprotect2',
);
}
diff --git a/includes/api/ApiPurge.php b/includes/api/ApiPurge.php
index 7667b235..a22be498 100644
--- a/includes/api/ApiPurge.php
+++ b/includes/api/ApiPurge.php
@@ -38,7 +38,8 @@ class ApiPurge extends ApiBase {
public function execute() {
$params = $this->extractRequestParams();
- $this->getResult()->beginContinuation( $params['continue'], array(), array() );
+ $continuationManager = new ApiContinuationManager( $this, array(), array() );
+ $this->setContinuationManager( $continuationManager );
$forceLinkUpdate = $params['forcelinkupdate'];
$forceRecursiveLinkUpdate = $params['forcerecursivelinkupdate'];
@@ -52,7 +53,7 @@ class ApiPurge extends ApiBase {
ApiQueryBase::addTitleInfo( $r, $title );
$page = WikiPage::factory( $title );
$page->doPurge(); // Directly purge and skip the UI part of purge().
- $r['purged'] = '';
+ $r['purged'] = true;
if ( $forceLinkUpdate || $forceRecursiveLinkUpdate ) {
if ( !$this->getUser()->pingLimiter( 'linkpurge' ) ) {
@@ -73,7 +74,7 @@ class ApiPurge extends ApiBase {
$title, null, $forceRecursiveLinkUpdate, $p_result );
DataUpdate::runUpdates( $updates );
- $r['linkupdate'] = '';
+ $r['linkupdate'] = true;
if ( $enableParserCache ) {
$pcache = ParserCache::singleton();
@@ -89,7 +90,7 @@ class ApiPurge extends ApiBase {
$result[] = $r;
}
$apiResult = $this->getResult();
- $apiResult->setIndexedTagName( $result, 'page' );
+ ApiResult::setIndexedTagName( $result, 'page' );
$apiResult->addValue( null, $this->getModuleName(), $result );
$values = $pageSet->getNormalizedTitlesAsResult( $apiResult );
@@ -105,7 +106,8 @@ class ApiPurge extends ApiBase {
$apiResult->addValue( null, 'redirects', $values );
}
- $apiResult->endContinuation();
+ $this->setContinuationManager( null );
+ $continuationManager->setContinuationIntoResult( $apiResult );
}
/**
@@ -133,7 +135,9 @@ class ApiPurge extends ApiBase {
$result = array(
'forcelinkupdate' => false,
'forcerecursivelinkupdate' => false,
- 'continue' => '',
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
);
if ( $flags ) {
$result += $this->getPageSet()->getFinalParams( $flags );
@@ -142,25 +146,12 @@ class ApiPurge extends ApiBase {
return $result;
}
- public function getParamDescription() {
- return $this->getPageSet()->getFinalParamDescription()
- + array(
- 'forcelinkupdate' => 'Update the links tables',
- 'forcerecursivelinkupdate' => 'Update the links table, and update ' .
- 'the links tables for any page that uses this page as a template',
- 'continue' => 'When more results are available, use this to continue',
- );
- }
-
- public function getDescription() {
- return array( 'Purge the cache for the given titles.',
- 'Requires a POST request if the user is not logged in.'
- );
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=purge&titles=Main_Page|API' => 'Purge the "Main Page" and the "API" page',
+ 'action=purge&titles=Main_Page|API'
+ => 'apihelp-purge-example-simple',
+ 'action=purge&generator=allpages&gapnamespace=0&gaplimit=10'
+ => 'apihelp-purge-example-generator',
);
}
diff --git a/includes/api/ApiQuery.php b/includes/api/ApiQuery.php
index 7c750e41..bfe32052 100644
--- a/includes/api/ApiQuery.php
+++ b/includes/api/ApiQuery.php
@@ -45,6 +45,7 @@ class ApiQuery extends ApiBase {
'categories' => 'ApiQueryCategories',
'categoryinfo' => 'ApiQueryCategoryInfo',
'contributors' => 'ApiQueryContributors',
+ 'deletedrevisions' => 'ApiQueryDeletedRevisions',
'duplicatefiles' => 'ApiQueryDuplicateFiles',
'extlinks' => 'ApiQueryExternalLinks',
'fileusage' => 'ApiQueryBacklinksprop',
@@ -69,6 +70,7 @@ class ApiQuery extends ApiBase {
*/
private static $QueryListModules = array(
'allcategories' => 'ApiQueryAllCategories',
+ 'alldeletedrevisions' => 'ApiQueryAllDeletedRevisions',
'allfileusages' => 'ApiQueryAllLinks',
'allimages' => 'ApiQueryAllImages',
'alllinks' => 'ApiQueryAllLinks',
@@ -141,6 +143,8 @@ class ApiQuery extends ApiBase {
$this->mModuleMgr->addModules( self::$QueryMetaModules, 'meta' );
$this->mModuleMgr->addModules( $config->get( 'APIMetaModules' ), 'meta' );
+ Hooks::run( 'ApiQuery::moduleManager', array( $this->mModuleMgr ) );
+
// Create PageSet that will process titles/pageids/revids/generator
$this->mPageSet = new ApiPageSet( $this );
}
@@ -165,9 +169,7 @@ class ApiQuery extends ApiBase {
*/
public function getNamedDB( $name, $db, $groups ) {
if ( !array_key_exists( $name, $this->mNamedDB ) ) {
- $this->profileDBIn();
$this->mNamedDB[$name] = wfGetDB( $db, $groups );
- $this->profileDBOut();
}
return $this->mNamedDB[$name];
@@ -255,11 +257,11 @@ class ApiQuery extends ApiBase {
$this->instantiateModules( $allModules, 'meta' );
// Filter modules based on continue parameter
- list( $generatorDone, $modules ) = $this->getResult()->beginContinuation(
- $this->mParams['continue'], $allModules, $propModules
- );
+ $continuationManager = new ApiContinuationManager( $this, $allModules, $propModules );
+ $this->setContinuationManager( $continuationManager );
+ $modules = $continuationManager->getRunModules();
- if ( !$generatorDone ) {
+ if ( !$continuationManager->isGeneratorDone() ) {
// Query modules may optimize data requests through the $this->getPageSet()
// object by adding extra fields from the page table.
foreach ( $modules as $module ) {
@@ -281,19 +283,36 @@ class ApiQuery extends ApiBase {
$params = $module->extractRequestParams();
$cacheMode = $this->mergeCacheMode(
$cacheMode, $module->getCacheMode( $params ) );
- $module->profileIn();
$module->execute();
- wfRunHooks( 'APIQueryAfterExecute', array( &$module ) );
- $module->profileOut();
+ Hooks::run( 'APIQueryAfterExecute', array( &$module ) );
}
// Set the cache mode
$this->getMain()->setCacheMode( $cacheMode );
// Write the continuation data into the result
- $this->getResult()->endContinuation(
- $this->mParams['continue'] === null ? 'raw' : 'standard'
- );
+ $this->setContinuationManager( null );
+ if ( $this->mParams['continue'] === null ) {
+ $data = $continuationManager->getRawContinuation();
+ if ( $data ) {
+ $this->getResult()->addValue( null, 'query-continue', $data,
+ ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ }
+ } else {
+ $continuationManager->setContinuationIntoResult( $this->getResult() );
+ }
+
+ if ( $this->mParams['continue'] === null && !$this->mParams['rawcontinue'] &&
+ $this->getResult()->getResultData( 'query-continue' ) !== null
+ ) {
+ $this->logFeatureUsage( 'action=query&!rawcontinue&!continue' );
+ $this->setWarning(
+ 'Formatting of continuation data will be changing soon. ' .
+ 'To continue using the current formatting, use the \'rawcontinue\' parameter. ' .
+ 'To begin using the new format, pass an empty string for \'continue\' ' .
+ 'in the initial query.'
+ );
+ }
}
/**
@@ -384,18 +403,18 @@ class ApiQuery extends ApiBase {
foreach ( $pageSet->getMissingTitles() as $fakeId => $title ) {
$vals = array();
ApiQueryBase::addTitleInfo( $vals, $title );
- $vals['missing'] = '';
+ $vals['missing'] = true;
$pages[$fakeId] = $vals;
}
// Report any invalid titles
foreach ( $pageSet->getInvalidTitles() as $fakeId => $title ) {
- $pages[$fakeId] = array( 'title' => $title, 'invalid' => '' );
+ $pages[$fakeId] = array( 'title' => $title, 'invalid' => true );
}
// Report any missing page ids
foreach ( $pageSet->getMissingPageIDs() as $pageid ) {
$pages[$pageid] = array(
'pageid' => $pageid,
- 'missing' => ''
+ 'missing' => true
);
}
// Report special pages
@@ -403,15 +422,15 @@ class ApiQuery extends ApiBase {
foreach ( $pageSet->getSpecialTitles() as $fakeId => $title ) {
$vals = array();
ApiQueryBase::addTitleInfo( $vals, $title );
- $vals['special'] = '';
+ $vals['special'] = true;
if ( $title->isSpecialPage() &&
!SpecialPageFactory::exists( $title->getDBkey() )
) {
- $vals['missing'] = '';
+ $vals['missing'] = true;
} elseif ( $title->getNamespace() == NS_MEDIA &&
!wfFindFile( $title )
) {
- $vals['missing'] = '';
+ $vals['missing'] = true;
}
$pages[$fakeId] = $vals;
}
@@ -425,15 +444,18 @@ class ApiQuery extends ApiBase {
}
if ( count( $pages ) ) {
+ $pageSet->populateGeneratorData( $pages );
+ ApiResult::setArrayType( $pages, 'BCarray' );
+
if ( $this->mParams['indexpageids'] ) {
- $pageIDs = array_keys( $pages );
+ $pageIDs = array_keys( ApiResult::stripMetadataNonRecursive( $pages ) );
// json treats all map keys as strings - converting to match
$pageIDs = array_map( 'strval', $pageIDs );
- $result->setIndexedTagName( $pageIDs, 'id' );
+ ApiResult::setIndexedTagName( $pageIDs, 'id' );
$fit = $fit && $result->addValue( 'query', 'pageids', $pageIDs );
}
- $result->setIndexedTagName( $pages, 'page' );
+ ApiResult::setIndexedTagName( $pages, 'page' );
$fit = $fit && $result->addValue( 'query', 'pages', $pages );
}
@@ -462,7 +484,7 @@ class ApiQuery extends ApiBase {
*/
public function setGeneratorContinue( $module, $paramName, $paramValue ) {
wfDeprecated( __METHOD__, '1.24' );
- $this->getResult()->setGeneratorContinueParam( $module, $paramName, $paramValue );
+ $this->getContinuationManager()->addGeneratorContinueParam( $module, $paramName, $paramValue );
return $this->getParameter( 'continue' ) !== null;
}
@@ -504,9 +526,8 @@ class ApiQuery extends ApiBase {
$result->addValue( null, 'text', $exportxml, ApiResult::NO_SIZE_CHECK );
$result->addValue( null, 'mime', 'text/xml', ApiResult::NO_SIZE_CHECK );
} else {
- $r = array();
- ApiResult::setContent( $r, $exportxml );
- $result->addValue( 'query', 'export', $r, ApiResult::NO_SIZE_CHECK );
+ $result->addValue( 'query', 'export', $exportxml, ApiResult::NO_SIZE_CHECK );
+ $result->addValue( 'query', ApiResult::META_BC_SUBELEMENTS, array( 'export' ) );
}
}
@@ -540,9 +561,11 @@ class ApiQuery extends ApiBase {
/**
* Override the parent to generate help messages for all available query modules.
+ * @deprecated since 1.25
* @return string
*/
public function makeHelpMsg() {
+ wfDeprecated( __METHOD__, '1.25' );
// Use parent to make default message for the query module
$msg = parent::makeHelpMsg();
@@ -562,6 +585,7 @@ class ApiQuery extends ApiBase {
/**
* For all modules of a given group, generate help messages and join them together
+ * @deprecated since 1.25
* @param string $group Module group
* @return string
*/
@@ -594,44 +618,13 @@ class ApiQuery extends ApiBase {
return true;
}
- public function getParamDescription() {
- return $this->getPageSet()->getFinalParamDescription() + array(
- 'prop' => 'Which properties to get for the titles/revisions/pageids. ' .
- 'Module help is available below',
- 'list' => 'Which lists to get. Module help is available below',
- 'meta' => 'Which metadata to get about the site. Module help is available below',
- 'indexpageids' => 'Include an additional pageids section listing all returned page IDs',
- 'export' => 'Export the current revisions of all given or generated pages',
- 'exportnowrap' => 'Return the export XML without wrapping it in an ' .
- 'XML result (same format as Special:Export). Can only be used with export',
- 'iwurl' => 'Whether to get the full URL if the title is an interwiki link',
- 'continue' => array(
- 'When present, formats query-continue as key-value pairs that ' .
- 'should simply be merged into the original request.',
- 'This parameter must be set to an empty string in the initial query.',
- 'This parameter is recommended for all new development, and ' .
- 'will be made default in the next API version.'
- ),
- 'rawcontinue' => 'Currently ignored. In the future, \'continue=\' will become the ' .
- 'default and this will be needed to receive the raw query-continue data.',
- );
- }
-
- public function getDescription() {
- return array(
- 'Query API module allows applications to get needed pieces of data ' .
- 'from the MediaWiki databases,',
- 'and is loosely based on the old query.php interface.',
- 'All data modifications will first have to use query to acquire a ' .
- 'token to prevent abuse from malicious sites.'
- );
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=revisions&meta=siteinfo&' .
- 'titles=Main%20Page&rvprop=user|comment&continue=',
- 'api.php?action=query&generator=allpages&gapprefix=API/&prop=revisions&continue=',
+ 'action=query&prop=revisions&meta=siteinfo&' .
+ 'titles=Main%20Page&rvprop=user|comment&continue='
+ => 'apihelp-query-example-revisions',
+ 'action=query&generator=allpages&gapprefix=API/&prop=revisions&continue='
+ => 'apihelp-query-example-allpages',
);
}
diff --git a/includes/api/ApiQueryAllCategories.php b/includes/api/ApiQueryAllCategories.php
index 79fab727..cc0b71af 100644
--- a/includes/api/ApiQueryAllCategories.php
+++ b/includes/api/ApiQueryAllCategories.php
@@ -128,15 +128,15 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
$pages[] = $titleObj;
} else {
$item = array();
- ApiResult::setContent( $item, $titleObj->getText() );
+ ApiResult::setContentValue( $item, 'category', $titleObj->getText() );
if ( isset( $prop['size'] ) ) {
$item['size'] = intval( $row->cat_pages );
$item['pages'] = $row->cat_pages - $row->cat_subcats - $row->cat_files;
$item['files'] = intval( $row->cat_files );
$item['subcats'] = intval( $row->cat_subcats );
}
- if ( isset( $prop['hidden'] ) && $row->cat_hidden ) {
- $item['hidden'] = '';
+ if ( isset( $prop['hidden'] ) ) {
+ $item['hidden'] = (bool)$row->cat_hidden;
}
$fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $item );
if ( !$fit ) {
@@ -147,7 +147,7 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'c' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'c' );
} else {
$resultPageSet->populateFromTitles( $pages );
}
@@ -156,7 +156,9 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
public function getAllowedParams() {
return array(
'from' => null,
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'to' => null,
'prefix' => null,
'dir' => array(
@@ -189,32 +191,12 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- return array(
- 'from' => 'The category to start enumerating from',
- 'continue' => 'When more results are available, use this to continue',
- 'to' => 'The category to stop enumerating at',
- 'prefix' => 'Search for all category titles that begin with this value',
- 'dir' => 'Direction to sort in',
- 'min' => 'Minimum number of category members',
- 'max' => 'Maximum number of category members',
- 'limit' => 'How many categories to return',
- 'prop' => array(
- 'Which properties to get',
- ' size - Adds number of pages in the category',
- ' hidden - Tags categories that are hidden with __HIDDENCAT__',
- ),
- );
- }
-
- public function getDescription() {
- return 'Enumerate all categories.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=allcategories&acprop=size',
- 'api.php?action=query&generator=allcategories&gacprefix=List&prop=info',
+ 'action=query&list=allcategories&acprop=size'
+ => 'apihelp-query+allcategories-example-size',
+ 'action=query&generator=allcategories&gacprefix=List&prop=info'
+ => 'apihelp-query+allcategories-example-generator',
);
}
diff --git a/includes/api/ApiQueryAllDeletedRevisions.php b/includes/api/ApiQueryAllDeletedRevisions.php
new file mode 100644
index 00000000..4e4d2af7
--- /dev/null
+++ b/includes/api/ApiQueryAllDeletedRevisions.php
@@ -0,0 +1,427 @@
+<?php
+/**
+ * Created on Oct 3, 2014
+ *
+ * Copyright © 2014 Brad Jorsch "bjorsch@wikimedia.org"
+ *
+ * Heavily based on ApiQueryDeletedrevs,
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * 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
+ */
+
+/**
+ * Query module to enumerate all deleted revisions.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'adr' );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ protected function run( ApiPageSet $resultPageSet = null ) {
+ $user = $this->getUser();
+ // Before doing anything at all, let's check permissions
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $this->dieUsage(
+ 'You don\'t have permission to view deleted revision information',
+ 'permissiondenied'
+ );
+ }
+
+ $db = $this->getDB();
+ $params = $this->extractRequestParams( false );
+
+ $result = $this->getResult();
+ $pageSet = $this->getPageSet();
+ $titles = $pageSet->getTitles();
+
+ // This module operates in two modes:
+ // 'user': List deleted revs by a certain user
+ // 'all': List all deleted revs in NS
+ $mode = 'all';
+ if ( !is_null( $params['user'] ) ) {
+ $mode = 'user';
+ }
+
+ if ( $mode == 'user' ) {
+ foreach ( array( 'from', 'to', 'prefix', 'excludeuser' ) as $param ) {
+ if ( !is_null( $params[$param] ) ) {
+ $p = $this->getModulePrefix();
+ $this->dieUsage( "The '{$p}{$param}' parameter cannot be used with '{$p}user'",
+ 'badparams' );
+ }
+ }
+ } else {
+ foreach ( array( 'start', 'end' ) as $param ) {
+ if ( !is_null( $params[$param] ) ) {
+ $p = $this->getModulePrefix();
+ $this->dieUsage( "The '{$p}{$param}' parameter may only be used with '{$p}user'",
+ 'badparams' );
+ }
+ }
+ }
+
+ $this->addTables( 'archive' );
+ if ( $resultPageSet === null ) {
+ $this->parseParameters( $params );
+ $this->addFields( Revision::selectArchiveFields() );
+ $this->addFields( array( 'ar_title', 'ar_namespace' ) );
+ } else {
+ $this->limit = $this->getParameter( 'limit' ) ?: 10;
+ $this->addFields( array( 'ar_title', 'ar_namespace', 'ar_timestamp', 'ar_rev_id', 'ar_id' ) );
+ }
+
+ if ( $this->fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds(
+ array( 'tag_summary' => array( 'LEFT JOIN', array( 'ar_rev_id=ts_rev_id' ) ) )
+ );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( !is_null( $params['tag'] ) ) {
+ $this->addTables( 'change_tag' );
+ $this->addJoinConds(
+ array( 'change_tag' => array( 'INNER JOIN', array( 'ar_rev_id=ct_rev_id' ) ) )
+ );
+ $this->addWhereFld( 'ct_tag', $params['tag'] );
+ }
+
+ if ( $this->fetchContent ) {
+ // Modern MediaWiki has the content for deleted revs in the 'text'
+ // table using fields old_text and old_flags. But revisions deleted
+ // pre-1.5 store the content in the 'archive' table directly using
+ // fields ar_text and ar_flags, and no corresponding 'text' row. So
+ // we have to LEFT JOIN and fetch all four fields.
+ $this->addTables( 'text' );
+ $this->addJoinConds(
+ array( 'text' => array( 'LEFT JOIN', array( 'ar_text_id=old_id' ) ) )
+ );
+ $this->addFields( array( 'ar_text', 'ar_flags', 'old_text', 'old_flags' ) );
+
+ // This also means stricter restrictions
+ if ( !$user->isAllowedAny( 'undelete', 'deletedtext' ) ) {
+ $this->dieUsage(
+ 'You don\'t have permission to view deleted revision content',
+ 'permissiondenied'
+ );
+ }
+ }
+
+ $dir = $params['dir'];
+ $miser_ns = null;
+
+ if ( $mode == 'all' ) {
+ if ( $params['namespace'] !== null ) {
+ $namespaces = $params['namespace'];
+ $this->addWhereFld( 'ar_namespace', $namespaces );
+ } else {
+ $namespaces = MWNamespace::getValidNamespaces();
+ }
+
+ // For from/to/prefix, we have to consider the potential
+ // transformations of the title in all specified namespaces.
+ // Generally there will be only one transformation, but wikis with
+ // some namespaces case-sensitive could have two.
+ if ( $params['from'] !== null || $params['to'] !== null ) {
+ $isDirNewer = ( $dir === 'newer' );
+ $after = ( $isDirNewer ? '>=' : '<=' );
+ $before = ( $isDirNewer ? '<=' : '>=' );
+ $where = array();
+ foreach ( $namespaces as $ns ) {
+ $w = array();
+ if ( $params['from'] !== null ) {
+ $w[] = 'ar_title' . $after .
+ $db->addQuotes( $this->titlePartToKey( $params['from'], $ns ) );
+ }
+ if ( $params['to'] !== null ) {
+ $w[] = 'ar_title' . $before .
+ $db->addQuotes( $this->titlePartToKey( $params['to'], $ns ) );
+ }
+ $w = $db->makeList( $w, LIST_AND );
+ $where[$w][] = $ns;
+ }
+ if ( count( $where ) == 1 ) {
+ $where = key( $where );
+ $this->addWhere( $where );
+ } else {
+ $where2 = array();
+ foreach ( $where as $w => $ns ) {
+ $where2[] = $db->makeList( array( $w, 'ar_namespace' => $ns ), LIST_AND );
+ }
+ $this->addWhere( $db->makeList( $where2, LIST_OR ) );
+ }
+ }
+
+ if ( isset( $params['prefix'] ) ) {
+ $where = array();
+ foreach ( $namespaces as $ns ) {
+ $w = 'ar_title' . $db->buildLike(
+ $this->titlePartToKey( $params['prefix'], $ns ),
+ $db->anyString() );
+ $where[$w][] = $ns;
+ }
+ if ( count( $where ) == 1 ) {
+ $where = key( $where );
+ $this->addWhere( $where );
+ } else {
+ $where2 = array();
+ foreach ( $where as $w => $ns ) {
+ $where2[] = $db->makeList( array( $w, 'ar_namespace' => $ns ), LIST_AND );
+ }
+ $this->addWhere( $db->makeList( $where2, LIST_OR ) );
+ }
+ }
+ } else {
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $miser_ns = $params['namespace'];
+ } else {
+ $this->addWhereFld( 'ar_namespace', $params['namespace'] );
+ }
+ $this->addTimestampWhereRange( 'ar_timestamp', $dir, $params['start'], $params['end'] );
+ }
+
+ if ( !is_null( $params['user'] ) ) {
+ $this->addWhereFld( 'ar_user_text', $params['user'] );
+ } elseif ( !is_null( $params['excludeuser'] ) ) {
+ $this->addWhere( 'ar_user_text != ' .
+ $db->addQuotes( $params['excludeuser'] ) );
+ }
+
+ if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
+ // Paranoia: avoid brute force searches (bug 17342)
+ // (shouldn't be able to get here without 'deletedhistory', but
+ // check it again just in case)
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = Revision::DELETED_USER;
+ } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $db->bitAnd( 'ar_deleted', $bitmask ) . " != $bitmask" );
+ }
+ }
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $op = ( $dir == 'newer' ? '>' : '<' );
+ if ( $mode == 'all' ) {
+ $this->dieContinueUsageIf( count( $cont ) != 4 );
+ $ns = intval( $cont[0] );
+ $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+ $title = $db->addQuotes( $cont[1] );
+ $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
+ $ar_id = (int)$cont[3];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[3] );
+ $this->addWhere( "ar_namespace $op $ns OR " .
+ "(ar_namespace = $ns AND " .
+ "(ar_title $op $title OR " .
+ "(ar_title = $title AND " .
+ "(ar_timestamp $op $ts OR " .
+ "(ar_timestamp = $ts AND " .
+ "ar_id $op= $ar_id)))))" );
+ } else {
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $ts = $db->addQuotes( $db->timestamp( $cont[0] ) );
+ $ar_id = (int)$cont[1];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[1] );
+ $this->addWhere( "ar_timestamp $op $ts OR " .
+ "(ar_timestamp = $ts AND " .
+ "ar_id $op= $ar_id)" );
+ }
+ }
+
+ $this->addOption( 'LIMIT', $this->limit + 1 );
+
+ $sort = ( $dir == 'newer' ? '' : ' DESC' );
+ $orderby = array();
+ if ( $mode == 'all' ) {
+ // Targeting index name_title_timestamp
+ if ( $params['namespace'] === null || count( array_unique( $params['namespace'] ) ) > 1 ) {
+ $orderby[] = "ar_namespace $sort";
+ }
+ $orderby[] = "ar_title $sort";
+ $orderby[] = "ar_timestamp $sort";
+ $orderby[] = "ar_id $sort";
+ } else {
+ // Targeting index usertext_timestamp
+ // 'user' is always constant.
+ $orderby[] = "ar_timestamp $sort";
+ $orderby[] = "ar_id $sort";
+ }
+ $this->addOption( 'ORDER BY', $orderby );
+
+ $res = $this->select( __METHOD__ );
+ $pageMap = array(); // Maps ns&title to array index
+ $count = 0;
+ $nextIndex = 0;
+ $generated = array();
+ foreach ( $res as $row ) {
+ if ( ++$count > $this->limit ) {
+ // We've had enough
+ if ( $mode == 'all' ) {
+ $this->setContinueEnumParameter( 'continue',
+ "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ } else {
+ $this->setContinueEnumParameter( 'continue', "$row->ar_timestamp|$row->ar_id" );
+ }
+ break;
+ }
+
+ // Miser mode namespace check
+ if ( $miser_ns !== null && !in_array( $row->ar_namespace, $miser_ns ) ) {
+ continue;
+ }
+
+ if ( $resultPageSet !== null ) {
+ if ( $params['generatetitles'] ) {
+ $key = "{$row->ar_namespace}:{$row->ar_title}";
+ if ( !isset( $generated[$key] ) ) {
+ $generated[$key] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+ }
+ } else {
+ $generated[] = $row->ar_rev_id;
+ }
+ } else {
+ $revision = Revision::newFromArchiveRow( $row );
+ $rev = $this->extractRevisionInfo( $revision, $row );
+
+ if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+ $index = $nextIndex++;
+ $pageMap[$row->ar_namespace][$row->ar_title] = $index;
+ $title = $revision->getTitle();
+ $a = array(
+ 'pageid' => $title->getArticleID(),
+ 'revisions' => array( $rev ),
+ );
+ ApiResult::setIndexedTagName( $a['revisions'], 'rev' );
+ ApiQueryBase::addTitleInfo( $a, $title );
+ $fit = $result->addValue( array( 'query', $this->getModuleName() ), $index, $a );
+ } else {
+ $index = $pageMap[$row->ar_namespace][$row->ar_title];
+ $fit = $result->addValue(
+ array( 'query', $this->getModuleName(), $index, 'revisions' ),
+ null, $rev );
+ }
+ if ( !$fit ) {
+ if ( $mode == 'all' ) {
+ $this->setContinueEnumParameter( 'continue',
+ "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ } else {
+ $this->setContinueEnumParameter( 'continue', "$row->ar_timestamp|$row->ar_id" );
+ }
+ break;
+ }
+ }
+ }
+
+ if ( $resultPageSet !== null ) {
+ if ( $params['generatetitles'] ) {
+ $resultPageSet->populateFromTitles( $generated );
+ } else {
+ $resultPageSet->populateFromRevisionIDs( $generated );
+ }
+ } else {
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'page' );
+ }
+ }
+
+ public function getAllowedParams() {
+ $ret = parent::getAllowedParams() + array(
+ 'user' => array(
+ ApiBase::PARAM_TYPE => 'user'
+ ),
+ 'namespace' => array(
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ApiBase::PARAM_DFLT => null,
+ ),
+ 'start' => array(
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'useronly' ) ),
+ ),
+ 'end' => array(
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'useronly' ) ),
+ ),
+ 'dir' => array(
+ ApiBase::PARAM_TYPE => array(
+ 'newer',
+ 'older'
+ ),
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ),
+ 'from' => array(
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'nonuseronly' ) ),
+ ),
+ 'to' => array(
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'nonuseronly' ) ),
+ ),
+ 'prefix' => array(
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'nonuseronly' ) ),
+ ),
+ 'excludeuser' => array(
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'nonuseronly' ) ),
+ ),
+ 'tag' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
+ 'generatetitles' => array(
+ ApiBase::PARAM_DFLT => false
+ ),
+ );
+
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['user'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+ 'apihelp-query+alldeletedrevisions-param-miser-user-namespace',
+ );
+ $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+ 'apihelp-query+alldeletedrevisions-param-miser-user-namespace',
+ );
+ }
+
+ return $ret;
+ }
+
+ protected function getExamplesMessages() {
+ return array(
+ 'action=query&list=alldeletedrevisions&adruser=Example&adrlimit=50'
+ => 'apihelp-query+alldeletedrevisions-example-user',
+ 'action=query&list=alldeletedrevisions&adrdir=newer&adrlimit=50'
+ => 'apihelp-query+alldeletedrevisions-example-ns-main',
+ );
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/API:Alldeletedrevisions';
+ }
+}
diff --git a/includes/api/ApiQueryAllImages.php b/includes/api/ApiQueryAllImages.php
index 9dc5f69a..381938bd 100644
--- a/includes/api/ApiQueryAllImages.php
+++ b/includes/api/ApiQueryAllImages.php
@@ -232,10 +232,25 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
$this->dieUsage( 'MIME search disabled in Miser Mode', 'mimesearchdisabled' );
}
- list( $major, $minor ) = File::splitMime( $params['mime'] );
-
- $this->addWhereFld( 'img_major_mime', $major );
- $this->addWhereFld( 'img_minor_mime', $minor );
+ $mimeConds = array();
+ foreach ( $params['mime'] as $mime ) {
+ list( $major, $minor ) = File::splitMime( $mime );
+ $mimeConds[] = $db->makeList(
+ array(
+ 'img_major_mime' => $major,
+ 'img_minor_mime' => $minor,
+ ),
+ LIST_AND
+ );
+ }
+ // safeguard against internal_api_error_DBQueryError
+ if ( count( $mimeConds ) > 0 ) {
+ $this->addWhere( $db->makeList( $mimeConds, LIST_OR ) );
+ } else {
+ // no MIME types, no files
+ $this->getResult()->addValue( 'query', $this->getModuleName(), array() );
+ return;
+ }
}
$limit = $params['limit'];
@@ -293,14 +308,14 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'img' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'img' );
} else {
$resultPageSet->populateFromTitles( $titles );
}
}
public function getAllowedParams() {
- return array(
+ $ret = array(
'sort' => array(
ApiBase::PARAM_DFLT => 'name',
ApiBase::PARAM_TYPE => array(
@@ -321,7 +336,9 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
),
'from' => null,
'to' => null,
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'start' => array(
ApiBase::PARAM_TYPE => 'timestamp'
),
@@ -331,7 +348,9 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
'prop' => array(
ApiBase::PARAM_TYPE => ApiQueryImageInfo::getPropertyNames( $this->propertyFilter ),
ApiBase::PARAM_DFLT => 'timestamp|url',
- ApiBase::PARAM_ISMULTI => true
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-prop',
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => ApiQueryImageInfo::getPropertyMessages( $this->propertyFilter ),
),
'prefix' => null,
'minsize' => array(
@@ -353,7 +372,10 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
'nobots'
)
),
- 'mime' => null,
+ 'mime' => array(
+ ApiBase::PARAM_DFLT => null,
+ ApiBase::PARAM_ISMULTI => true,
+ ),
'limit' => array(
ApiBase::PARAM_DFLT => 10,
ApiBase::PARAM_TYPE => 'limit',
@@ -362,57 +384,28 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
);
- }
- public function getParamDescription() {
- $p = $this->getModulePrefix();
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['mime'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+ }
- return array(
- 'sort' => 'Property to sort by',
- 'dir' => 'The direction in which to list',
- 'from' => "The image title to start enumerating from. Can only be used with {$p}sort=name",
- 'to' => "The image title to stop enumerating at. Can only be used with {$p}sort=name",
- 'continue' => 'When more results are available, use this to continue',
- 'start' => "The timestamp to start enumerating from. Can only be used with {$p}sort=timestamp",
- 'end' => "The timestamp to end enumerating. Can only be used with {$p}sort=timestamp",
- 'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
- 'prefix' => "Search for all image titles that begin with this " .
- "value. Can only be used with {$p}sort=name",
- 'minsize' => 'Limit to images with at least this many bytes',
- 'maxsize' => 'Limit to images with at most this many bytes',
- 'sha1' => "SHA1 hash of image. Overrides {$p}sha1base36",
- 'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
- 'user' => "Only return files uploaded by this user. Can only be used " .
- "with {$p}sort=timestamp. Cannot be used together with {$p}filterbots",
- 'filterbots' => "How to filter files uploaded by bots. Can only be " .
- "used with {$p}sort=timestamp. Cannot be used together with {$p}user",
- 'mime' => 'What MIME type to search for. e.g. image/jpeg. Disabled in Miser Mode',
- 'limit' => 'How many images in total to return',
- );
+ return $ret;
}
private $propertyFilter = array( 'archivename', 'thumbmime', 'uploadwarning' );
- public function getDescription() {
- return 'Enumerate all images sequentially.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=allimages&aifrom=B' => array(
- 'Simple Use',
- 'Show a list of files starting at the letter "B"',
- ),
- 'api.php?action=query&list=allimages&aiprop=user|timestamp|url&' .
- 'aisort=timestamp&aidir=older' => array(
- 'Simple Use',
- 'Show a list of recently uploaded files similar to Special:NewFiles',
- ),
- 'api.php?action=query&generator=allimages&gailimit=4&' .
- 'gaifrom=T&prop=imageinfo' => array(
- 'Using as Generator',
- 'Show info about 4 files starting at the letter "T"',
- ),
+ 'action=query&list=allimages&aifrom=B'
+ => 'apihelp-query+allimages-example-B',
+ 'action=query&list=allimages&aiprop=user|timestamp|url&' .
+ 'aisort=timestamp&aidir=older'
+ => 'apihelp-query+allimages-example-recent',
+ 'action=query&list=allimages&aimime=image/png|image/gif'
+ => 'apihelp-query+allimages-example-mimetypes',
+ 'action=query&generator=allimages&gailimit=4&' .
+ 'gaifrom=T&prop=imageinfo'
+ => 'apihelp-query+allimages-example-generator',
);
}
diff --git a/includes/api/ApiQueryAllLinks.php b/includes/api/ApiQueryAllLinks.php
index 903dee42..fadecfb4 100644
--- a/includes/api/ApiQueryAllLinks.php
+++ b/includes/api/ApiQueryAllLinks.php
@@ -31,13 +31,12 @@
*/
class ApiQueryAllLinks extends ApiQueryGeneratorBase {
- private $table, $tablePrefix, $indexTag,
- $description, $descriptionWhat, $descriptionTargets, $descriptionLinking;
+ private $table, $tablePrefix, $indexTag;
private $fieldTitle = 'title';
private $dfltNamespace = NS_MAIN;
private $hasNamespace = true;
private $useIndex = null;
- private $props = array(), $propHelp = array();
+ private $props = array();
public function __construct( ApiQuery $query, $moduleName ) {
switch ( $moduleName ) {
@@ -47,10 +46,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
$this->tablePrefix = 'pl_';
$this->useIndex = 'pl_namespace';
$this->indexTag = 'l';
- $this->description = 'Enumerate all links that point to a given namespace';
- $this->descriptionWhat = 'link';
- $this->descriptionTargets = 'linked titles';
- $this->descriptionLinking = 'linking';
break;
case 'alltransclusions':
$prefix = 'at';
@@ -59,11 +54,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
$this->dfltNamespace = NS_TEMPLATE;
$this->useIndex = 'tl_namespace';
$this->indexTag = 't';
- $this->description =
- 'List all transclusions (pages embedded using {{x}}), including non-existing';
- $this->descriptionWhat = 'transclusion';
- $this->descriptionTargets = 'transcluded titles';
- $this->descriptionLinking = 'transcluding';
break;
case 'allfileusages':
$prefix = 'af';
@@ -73,28 +63,16 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
$this->dfltNamespace = NS_FILE;
$this->hasNamespace = false;
$this->indexTag = 'f';
- $this->description = 'List all file usages, including non-existing';
- $this->descriptionWhat = 'file';
- $this->descriptionTargets = 'file titles';
- $this->descriptionLinking = 'using';
break;
case 'allredirects':
$prefix = 'ar';
$this->table = 'redirect';
$this->tablePrefix = 'rd_';
$this->indexTag = 'r';
- $this->description = 'List all redirects to a namespace';
- $this->descriptionWhat = 'redirect';
- $this->descriptionTargets = 'target pages';
- $this->descriptionLinking = 'redirecting';
$this->props = array(
'fragment' => 'rd_fragment',
'interwiki' => 'rd_interwiki',
);
- $this->propHelp = array(
- ' fragment - Adds the fragment from the redirect, if any',
- ' interwiki - Adds the interwiki prefix from the redirect, if any',
- );
break;
default:
ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
@@ -222,7 +200,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $vals = array();
+ $vals = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
if ( $fld_ids ) {
$vals['fromid'] = intval( $row->pl_from );
}
@@ -252,7 +232,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), $this->indexTag );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), $this->indexTag );
} elseif ( $params['unique'] ) {
$resultPageSet->populateFromTitles( $titles );
} else {
@@ -262,7 +242,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
public function getAllowedParams() {
$allowedParams = array(
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'from' => null,
'to' => null,
'prefix' => null,
@@ -300,59 +282,20 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
return $allowedParams;
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
- $what = $this->descriptionWhat;
- $targets = $this->descriptionTargets;
- $linking = $this->descriptionLinking;
- $paramDescription = array(
- 'from' => "The title of the $what to start enumerating from",
- 'to' => "The title of the $what to stop enumerating at",
- 'prefix' => "Search for all $targets that begin with this value",
- 'unique' => array(
- "Only show distinct $targets. Cannot be used with {$p}prop=" .
- join( '|', array_keys( array( 'ids' => 1 ) + $this->props ) ) . '.',
- 'When used as a generator, yields target pages instead of source pages.',
- ),
- 'prop' => array(
- 'What pieces of information to include',
- " ids - Adds the pageid of the $linking page (Cannot be used with {$p}unique)",
- " title - Adds the title of the $what",
- ),
- 'namespace' => 'The namespace to enumerate',
- 'limit' => 'How many total items to return',
- 'continue' => 'When more results are available, use this to continue',
- 'dir' => 'The direction in which to list',
- );
- foreach ( $this->propHelp as $help ) {
- $paramDescription['prop'][] = "$help (Cannot be used with {$p}unique)";
- }
- if ( !$this->hasNamespace ) {
- unset( $paramDescription['namespace'] );
- }
-
- return $paramDescription;
- }
-
- public function getDescription() {
- return $this->description;
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
$p = $this->getModulePrefix();
$name = $this->getModuleName();
- $what = $this->descriptionWhat;
- $targets = $this->descriptionTargets;
+ $path = $this->getModulePath();
return array(
- "api.php?action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
- => "List $targets with page ids they are from, including missing ones. Start at B",
- "api.php?action=query&list={$name}&{$p}unique=&{$p}from=B"
- => "List unique $targets",
- "api.php?action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
- => "Gets all $targets, marking the missing ones",
- "api.php?action=query&generator={$name}&g{$p}from=B"
- => "Gets pages containing the {$what}s",
+ "action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
+ => "apihelp-$path-example-B",
+ "action=query&list={$name}&{$p}unique=&{$p}from=B"
+ => "apihelp-$path-example-unique",
+ "action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
+ => "apihelp-$path-example-unique-generator",
+ "action=query&generator={$name}&g{$p}from=B"
+ => "apihelp-$path-example-generator",
);
}
diff --git a/includes/api/ApiQueryAllMessages.php b/includes/api/ApiQueryAllMessages.php
index a75a16fc..44af83d0 100644
--- a/includes/api/ApiQueryAllMessages.php
+++ b/includes/api/ApiQueryAllMessages.php
@@ -146,7 +146,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
$messageIsCustomised = isset( $customisedMessages['pages'][$langObj->ucfirst( $message )] );
if ( $customised === $messageIsCustomised ) {
if ( $customised ) {
- $a['customised'] = '';
+ $a['customised'] = true;
}
} else {
continue;
@@ -156,7 +156,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
$msg = wfMessage( $message, $args )->inLanguage( $langObj );
if ( !$msg->exists() ) {
- $a['missing'] = '';
+ $a['missing'] = true;
} else {
// Check if the parser is enabled:
if ( $params['enableparser'] ) {
@@ -165,12 +165,12 @@ class ApiQueryAllMessages extends ApiQueryBase {
$msgString = $msg->plain();
}
if ( !$params['nocontent'] ) {
- ApiResult::setContent( $a, $msgString );
+ ApiResult::setContentValue( $a, 'content', $msgString );
}
if ( isset( $prop['default'] ) ) {
$default = wfMessage( $message )->inLanguage( $langObj )->useDatabase( false );
if ( !$default->exists() ) {
- $a['defaultmissing'] = '';
+ $a['defaultmissing'] = true;
} elseif ( $default->plain() != $msgString ) {
$a['default'] = $default->plain();
}
@@ -183,7 +183,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
}
}
}
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'message' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'message' );
}
public function getCacheMode( $params ) {
@@ -235,35 +235,12 @@ class ApiQueryAllMessages extends ApiQueryBase {
);
}
- public function getParamDescription() {
+ protected function getExamplesMessages() {
return array(
- 'messages' => 'Which messages to output. "*" (default) means all messages',
- 'prop' => 'Which properties to get',
- 'enableparser' => array( 'Set to enable parser, will preprocess the wikitext of message',
- 'Will substitute magic words, handle templates etc.' ),
- 'nocontent' => 'If set, do not include the content of the messages in the output.',
- 'includelocal' => array( "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.",
- "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
- ),
- 'title' => 'Page name to use as context when parsing message (for enableparser option)',
- 'args' => 'Arguments to be substituted into message',
- 'prefix' => 'Return messages with this prefix',
- 'filter' => 'Return only messages with names that contain this string',
- 'customised' => 'Return only messages in this customisation state',
- 'lang' => 'Return messages in this language',
- 'from' => 'Return messages starting at this message',
- 'to' => 'Return messages ending at this message',
- );
- }
-
- public function getDescription() {
- return 'Return messages from this site.';
- }
-
- public function getExamples() {
- return array(
- 'api.php?action=query&meta=allmessages&amprefix=ipb-',
- 'api.php?action=query&meta=allmessages&ammessages=august|mainpage&amlang=de',
+ 'action=query&meta=allmessages&amprefix=ipb-'
+ => 'apihelp-query+allmessages-example-ipb',
+ 'action=query&meta=allmessages&ammessages=august|mainpage&amlang=de'
+ => 'apihelp-query+allmessages-example-de',
);
}
diff --git a/includes/api/ApiQueryAllPages.php b/includes/api/ApiQueryAllPages.php
index b7bd65a5..0149ad2f 100644
--- a/includes/api/ApiQueryAllPages.php
+++ b/includes/api/ApiQueryAllPages.php
@@ -168,9 +168,23 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
$this->addTables( 'langlinks' );
$this->addWhere( 'page_id=ll_from' );
$this->addOption( 'STRAIGHT_JOIN' );
- // We have to GROUP BY all selected fields to stop
- // PostgreSQL from whining
- $this->addOption( 'GROUP BY', $selectFields );
+
+ // MySQL filesorts if we use a GROUP BY that works with the rules
+ // in the 1992 SQL standard (it doesn't like having the
+ // constant-in-WHERE page_namespace column in there). Using the
+ // 1999 rules works fine, but that breaks other DBs. Sigh.
+ /// @todo Once we drop support for 1992-rule DBs, we can simplify this.
+ $dbType = $db->getType();
+ if ( $dbType === 'mysql' || $dbType === 'sqlite' ||
+ $dbType === 'postgres' && $db->getServerVersion() >= 9.1
+ ) {
+ // 1999 rules, or screw-the-rules
+ $this->addOption( 'GROUP BY', array( 'page_title', 'page_id' ) );
+ } else {
+ // 1992 rules
+ $this->addOption( 'GROUP BY', $selectFields );
+ }
+
$forceNameTitleIndex = false;
}
@@ -220,14 +234,16 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'p' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'p' );
}
}
public function getAllowedParams() {
return array(
'from' => null,
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'to' => null,
'prefix' => null,
'namespace' => array(
@@ -297,54 +313,15 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'from' => 'The page title to start enumerating from',
- 'continue' => 'When more results are available, use this to continue',
- 'to' => 'The page title to stop enumerating at',
- 'prefix' => 'Search for all page titles that begin with this value',
- 'namespace' => 'The namespace to enumerate',
- 'filterredir' => 'Which pages to list',
- 'dir' => 'The direction in which to list',
- 'minsize' => 'Limit to pages with at least this many bytes',
- 'maxsize' => 'Limit to pages with at most this many bytes',
- 'prtype' => 'Limit to protected pages only',
- 'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
- 'prfiltercascade'
- => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
- 'filterlanglinks' => array(
- 'Filter based on whether a page has langlinks',
- 'Note that this may not consider langlinks added by extensions.',
- ),
- 'limit' => 'How many total pages to return.',
- 'prexpiry' => array(
- 'Which protection expiry to filter the page on',
- ' indefinite - Get only pages with indefinite protection expiry',
- ' definite - Get only pages with a definite (specific) protection expiry',
- ' all - Get pages with any protections expiry'
- ),
- );
- }
-
- public function getDescription() {
- return 'Enumerate all pages sequentially in a given namespace.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=allpages&apfrom=B' => array(
- 'Simple Use',
- 'Show a list of pages starting at the letter "B"',
- ),
- 'api.php?action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info' => array(
- 'Using as Generator',
- 'Show info about 4 pages starting at the letter "T"',
- ),
- 'api.php?action=query&generator=allpages&gaplimit=2&' .
+ 'action=query&list=allpages&apfrom=B'
+ => 'apihelp-query+allpages-example-B',
+ 'action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info'
+ => 'apihelp-query+allpages-example-generator',
+ 'action=query&generator=allpages&gaplimit=2&' .
'gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content'
- => array( 'Show content of first 2 non-redirect pages beginning at "Re"' )
+ => 'apihelp-query+allpages-example-generator-revisions',
);
}
diff --git a/includes/api/ApiQueryAllUsers.php b/includes/api/ApiQueryAllUsers.php
index affddda7..0cea84f8 100644
--- a/includes/api/ApiQueryAllUsers.php
+++ b/includes/api/ApiQueryAllUsers.php
@@ -48,11 +48,6 @@ class ApiQueryAllUsers extends ApiQueryBase {
$params = $this->extractRequestParams();
$activeUserDays = $this->getConfig()->get( 'ActiveUserDays' );
- if ( $params['activeusers'] ) {
- // Update active user cache
- SpecialActiveUsers::mergeActiveUsers( 600, $activeUserDays );
- }
-
$db = $this->getDB();
$prop = $params['prop'];
@@ -72,7 +67,6 @@ class ApiQueryAllUsers extends ApiQueryBase {
$limit = $params['limit'];
$this->addTables( 'user' );
- $useIndex = true;
$dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
$from = is_null( $params['from'] ) ? null : $this->getCanonicalUserName( $params['from'] );
@@ -82,6 +76,10 @@ class ApiQueryAllUsers extends ApiQueryBase {
# despite the JOIN condition, so manually sort on the correct one.
$userFieldToSort = $params['activeusers'] ? 'qcc_title' : 'user_name';
+ # Some of these subtable joins are going to give us duplicate rows, so
+ # calculate the maximum number of duplicates we might see.
+ $maxDuplicateRows = 1;
+
$this->addWhereRange( $userFieldToSort, $dir, $from, $to );
if ( !is_null( $params['prefix'] ) ) {
@@ -97,7 +95,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
// no group with the given right(s) exists, no need for a query
if ( !count( $groups ) ) {
- $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), '' );
+ $this->getResult()->addIndexedTagName( array( 'query', $this->getModuleName() ), '' );
return;
}
@@ -116,16 +114,17 @@ class ApiQueryAllUsers extends ApiQueryBase {
}
if ( !is_null( $params['group'] ) && count( $params['group'] ) ) {
- $useIndex = false;
- // Filter only users that belong to a given group
+ // Filter only users that belong to a given group. This might
+ // produce as many rows-per-user as there are groups being checked.
$this->addTables( 'user_groups', 'ug1' );
$this->addJoinConds( array( 'ug1' => array( 'INNER JOIN', array( 'ug1.ug_user=user_id',
'ug1.ug_group' => $params['group'] ) ) ) );
+ $maxDuplicateRows *= count( $params['group'] );
}
if ( !is_null( $params['excludegroup'] ) && count( $params['excludegroup'] ) ) {
- $useIndex = false;
- // Filter only users don't belong to a given group
+ // Filter only users don't belong to a given group. This can only
+ // produce one row-per-user, because we only keep on "no match".
$this->addTables( 'user_groups', 'ug1' );
if ( count( $params['excludegroup'] ) == 1 ) {
@@ -149,22 +148,16 @@ class ApiQueryAllUsers extends ApiQueryBase {
$this->showHiddenUsersAddBlockInfo( $fld_blockinfo );
if ( $fld_groups || $fld_rights ) {
- // Show the groups the given users belong to
- // request more than needed to avoid not getting all rows that belong to one user
- $groupCount = count( User::getAllGroups() );
- $sqlLimit = $limit + $groupCount + 1;
-
- $this->addTables( 'user_groups', 'ug2' );
- $this->addJoinConds( array( 'ug2' => array( 'LEFT JOIN', 'ug2.ug_user=user_id' ) ) );
- $this->addFields( array( 'ug_group2' => 'ug2.ug_group' ) );
- } else {
- $sqlLimit = $limit + 1;
+ $this->addFields( array( 'groups' =>
+ $db->buildGroupConcatField( '|', 'user_groups', 'ug_group', 'ug_user=user_id' )
+ ) );
}
if ( $params['activeusers'] ) {
$activeUserSeconds = $activeUserDays * 86400;
- // Filter query to only include users in the active users cache
+ // Filter query to only include users in the active users cache.
+ // There shouldn't be any duplicate rows in querycachetwo here.
$this->addTables( 'querycachetwo' );
$this->addJoinConds( array( 'querycachetwo' => array(
'INNER JOIN', array(
@@ -190,6 +183,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
) );
}
+ $sqlLimit = $limit + $maxDuplicateRows;
$this->addOption( 'LIMIT', $sqlLimit );
$this->addFields( array(
@@ -199,148 +193,112 @@ class ApiQueryAllUsers extends ApiQueryBase {
$this->addFieldsIf( 'user_editcount', $fld_editcount );
$this->addFieldsIf( 'user_registration', $fld_registration );
- if ( $useIndex ) {
- $this->addOption( 'USE INDEX', array( 'user' => 'user_name' ) );
- }
-
$res = $this->select( __METHOD__ );
-
$count = 0;
- $lastUserData = false;
+ $countDuplicates = 0;
$lastUser = false;
$result = $this->getResult();
-
- // This loop keeps track of the last entry. For each new row, if the
- // new row is for different user then the last, the last entry is added
- // to results. Otherwise, the group of the new row is appended to the
- // last entry. The setContinue... is more complex because of this, and
- // takes into account the higher sql limit to make sure all rows that
- // belong to the same user are received.
-
foreach ( $res as $row ) {
$count++;
- if ( $lastUser !== $row->user_name ) {
- // Save the last pass's user data
- if ( is_array( $lastUserData ) ) {
- if ( $params['activeusers'] && $lastUserData['recentactions'] === 0 ) {
- // activeusers cache was out of date
- $fit = true;
- } else {
- $fit = $result->addValue( array( 'query', $this->getModuleName() ),
- null, $lastUserData );
- }
-
- $lastUserData = null;
-
- if ( !$fit ) {
- $this->setContinueEnumParameter( 'from', $lastUserData['name'] );
- break;
- }
+ if ( $lastUser === $row->user_name ) {
+ // Duplicate row due to one of the needed subtable joins.
+ // Ignore it, but count the number of them to sanely handle
+ // miscalculation of $maxDuplicateRows.
+ $countDuplicates++;
+ if ( $countDuplicates == $maxDuplicateRows ) {
+ ApiBase::dieDebug( __METHOD__, 'Saw more duplicate rows than expected' );
}
+ continue;
+ }
- if ( $count > $limit ) {
- // We've reached the one extra which shows that there are
- // additional pages to be had. Stop here...
- $this->setContinueEnumParameter( 'from', $row->user_name );
- break;
- }
+ $countDuplicates = 0;
+ $lastUser = $row->user_name;
- // Record new user's data
- $lastUser = $row->user_name;
- $lastUserData = array(
- 'userid' => $row->user_id,
- 'name' => $lastUser,
- );
- if ( $fld_blockinfo && !is_null( $row->ipb_by_text ) ) {
- $lastUserData['blockid'] = $row->ipb_id;
- $lastUserData['blockedby'] = $row->ipb_by_text;
- $lastUserData['blockedbyid'] = $row->ipb_by;
- $lastUserData['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
- $lastUserData['blockreason'] = $row->ipb_reason;
- $lastUserData['blockexpiry'] = $row->ipb_expiry;
- }
- if ( $row->ipb_deleted ) {
- $lastUserData['hidden'] = '';
- }
- if ( $fld_editcount ) {
- $lastUserData['editcount'] = intval( $row->user_editcount );
- }
- if ( $params['activeusers'] ) {
- $lastUserData['recentactions'] = intval( $row->recentactions );
- // @todo 'recenteditcount' is set for BC, remove in 1.25
- $lastUserData['recenteditcount'] = $lastUserData['recentactions'];
- }
- if ( $fld_registration ) {
- $lastUserData['registration'] = $row->user_registration ?
- wfTimestamp( TS_ISO_8601, $row->user_registration ) : '';
- }
+ if ( $count > $limit ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'from', $row->user_name );
+ break;
}
- if ( $sqlLimit == $count ) {
- // @todo BUG! database contains group name that User::getAllGroups() does not return
- // Should handle this more gracefully
- ApiBase::dieDebug(
- __METHOD__,
- 'MediaWiki configuration error: The database contains more ' .
- 'user groups than known to User::getAllGroups() function'
- );
+ if ( $count == $sqlLimit ) {
+ // Should never hit this (either the $countDuplicates check or
+ // the $count > $limit check should hit first), but check it
+ // anyway just in case.
+ ApiBase::dieDebug( __METHOD__, 'Saw more duplicate rows than expected' );
}
- $lastUserObj = User::newFromId( $row->user_id );
-
- // Add user's group info
- if ( $fld_groups ) {
- if ( !isset( $lastUserData['groups'] ) ) {
- if ( $lastUserObj ) {
- $lastUserData['groups'] = $lastUserObj->getAutomaticGroups();
- } else {
- // This should not normally happen
- $lastUserData['groups'] = array();
- }
- }
-
- if ( !is_null( $row->ug_group2 ) ) {
- $lastUserData['groups'][] = $row->ug_group2;
- }
-
- $result->setIndexedTagName( $lastUserData['groups'], 'g' );
+ if ( $params['activeusers'] && $row->recentactions === 0 ) {
+ // activeusers cache was out of date
+ continue;
}
- if ( $fld_implicitgroups && !isset( $lastUserData['implicitgroups'] ) && $lastUserObj ) {
- $lastUserData['implicitgroups'] = $lastUserObj->getAutomaticGroups();
- $result->setIndexedTagName( $lastUserData['implicitgroups'], 'g' );
+ $data = array(
+ 'userid' => $row->user_id,
+ 'name' => $row->user_name,
+ );
+
+ if ( $fld_blockinfo && !is_null( $row->ipb_by_text ) ) {
+ $data['blockid'] = $row->ipb_id;
+ $data['blockedby'] = $row->ipb_by_text;
+ $data['blockedbyid'] = $row->ipb_by;
+ $data['blockedtimestamp'] = wfTimestamp( TS_ISO_8601, $row->ipb_timestamp );
+ $data['blockreason'] = $row->ipb_reason;
+ $data['blockexpiry'] = $row->ipb_expiry;
+ }
+ if ( $row->ipb_deleted ) {
+ $data['hidden'] = true;
+ }
+ if ( $fld_editcount ) {
+ $data['editcount'] = intval( $row->user_editcount );
+ }
+ if ( $params['activeusers'] ) {
+ $data['recentactions'] = intval( $row->recentactions );
+ // @todo 'recenteditcount' is set for BC, remove in 1.25
+ $data['recenteditcount'] = $data['recentactions'];
}
- if ( $fld_rights ) {
- if ( !isset( $lastUserData['rights'] ) ) {
- if ( $lastUserObj ) {
- $lastUserData['rights'] = User::getGroupPermissions( $lastUserObj->getAutomaticGroups() );
- } else {
- // This should not normally happen
- $lastUserData['rights'] = array();
- }
+ if ( $fld_registration ) {
+ $data['registration'] = $row->user_registration ?
+ wfTimestamp( TS_ISO_8601, $row->user_registration ) : '';
+ }
+
+ if ( $fld_implicitgroups || $fld_groups || $fld_rights ) {
+ $user = User::newFromId( $row->user_id );
+ $implicitGroups = User::newFromId( $row->user_id )->getAutomaticGroups();
+ if ( isset( $row->groups ) && $row->groups !== '' ) {
+ $groups = array_merge( $implicitGroups, explode( '|', $row->groups ) );
+ } else {
+ $groups = $implicitGroups;
}
- if ( !is_null( $row->ug_group2 ) ) {
- $lastUserData['rights'] = array_unique( array_merge( $lastUserData['rights'],
- User::getGroupPermissions( array( $row->ug_group2 ) ) ) );
+ if ( $fld_groups ) {
+ $data['groups'] = $groups;
+ ApiResult::setIndexedTagName( $data['groups'], 'g' );
+ ApiResult::setArrayType( $data['groups'], 'array' );
}
- $result->setIndexedTagName( $lastUserData['rights'], 'r' );
+ if ( $fld_implicitgroups ) {
+ $data['implicitgroups'] = $implicitGroups;
+ ApiResult::setIndexedTagName( $data['implicitgroups'], 'g' );
+ ApiResult::setArrayType( $data['implicitgroups'], 'array' );
+ }
+
+ if ( $fld_rights ) {
+ $data['rights'] = User::getGroupPermissions( $groups );
+ ApiResult::setIndexedTagName( $data['rights'], 'r' );
+ ApiResult::setArrayType( $data['rights'], 'array' );
+ }
}
- }
- if ( is_array( $lastUserData ) &&
- !( $params['activeusers'] && $lastUserData['recentactions'] === 0 )
- ) {
- $fit = $result->addValue( array( 'query', $this->getModuleName() ),
- null, $lastUserData );
+ $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $data );
if ( !$fit ) {
- $this->setContinueEnumParameter( 'from', $lastUserData['name'] );
+ $this->setContinueEnumParameter( 'from', $data['name'] );
+ break;
}
}
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'u' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'u' );
}
public function getCacheMode( $params ) {
@@ -392,43 +350,20 @@ class ApiQueryAllUsers extends ApiQueryBase {
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
'witheditsonly' => false,
- 'activeusers' => false,
- );
- }
-
- public function getParamDescription() {
- return array(
- 'from' => 'The user name to start enumerating from',
- 'to' => 'The user name to stop enumerating at',
- 'prefix' => 'Search for all users that begin with this value',
- 'dir' => 'Direction to sort in',
- 'group' => 'Limit users to given group name(s)',
- 'excludegroup' => 'Exclude users in given group name(s)',
- 'rights' => 'Limit users to given right(s) (does not include rights ' .
- 'granted by implicit or auto-promoted groups like *, user, or autoconfirmed)',
- 'prop' => array(
- 'What pieces of information to include.',
- ' blockinfo - Adds the information about a current block on the user',
- ' groups - Lists groups that the user is in. This uses ' .
- 'more server resources and may return fewer results than the limit',
- ' implicitgroups - Lists all the groups the user is automatically in',
- ' rights - Lists rights that the user has',
- ' editcount - Adds the edit count of the user',
- ' registration - Adds the timestamp of when the user registered if available (may be blank)',
+ 'activeusers' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => array(
+ 'apihelp-query+allusers-param-activeusers',
+ $this->getConfig()->get( 'ActiveUserDays' )
+ ),
),
- 'limit' => 'How many total user names to return',
- 'witheditsonly' => 'Only list users who have made edits',
- 'activeusers' => "Only list users active in the last {$this->getConfig()->get( 'ActiveUserDays' )} days(s)"
);
}
- public function getDescription() {
- return 'Enumerate all registered users.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=allusers&aufrom=Y',
+ 'action=query&list=allusers&aufrom=Y'
+ => 'apihelp-query+allusers-example-Y',
);
}
diff --git a/includes/api/ApiQueryBacklinks.php b/includes/api/ApiQueryBacklinks.php
index c141246d..1df14e0b 100644
--- a/includes/api/ApiQueryBacklinks.php
+++ b/includes/api/ApiQueryBacklinks.php
@@ -39,8 +39,8 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
*/
private $rootTitle;
- private $params, $contID, $redirID, $redirect;
- private $bl_ns, $bl_from, $bl_table, $bl_code, $bl_title, $bl_fields, $hasNS;
+ private $params, $cont, $redirect;
+ private $bl_ns, $bl_from, $bl_from_ns, $bl_table, $bl_code, $bl_title, $bl_fields, $hasNS;
/**
* Maps ns and title to pageid
@@ -84,6 +84,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
parent::__construct( $query, $moduleName, $code );
$this->bl_ns = $prefix . '_namespace';
$this->bl_from = $prefix . '_from';
+ $this->bl_from_ns = $prefix . '_from_namespace';
$this->bl_table = $settings['linktbl'];
$this->bl_code = $code;
$this->helpUrl = $settings['helpurl'];
@@ -119,12 +120,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
* @param ApiPageSet $resultPageSet
* @return void
*/
- private function prepareFirstQuery( $resultPageSet = null ) {
- /* SELECT page_id, page_title, page_namespace, page_is_redirect
- * FROM pagelinks, page WHERE pl_from=page_id
- * AND pl_title='Foo' AND pl_namespace=0
- * LIMIT 11 ORDER BY pl_from
- */
+ private function runFirstQuery( $resultPageSet = null ) {
$this->addTables( array( $this->bl_table, 'page' ) );
$this->addWhere( "{$this->bl_from}=page_id" );
if ( is_null( $resultPageSet ) ) {
@@ -132,18 +128,25 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
} else {
$this->addFields( $resultPageSet->getPageTableFields() );
}
+ $this->addFields( array( 'page_is_redirect', 'from_ns' => 'page_namespace' ) );
- $this->addFields( 'page_is_redirect' );
$this->addWhereFld( $this->bl_title, $this->rootTitle->getDBkey() );
-
if ( $this->hasNS ) {
$this->addWhereFld( $this->bl_ns, $this->rootTitle->getNamespace() );
}
- $this->addWhereFld( 'page_namespace', $this->params['namespace'] );
+ $this->addWhereFld( $this->bl_from_ns, $this->params['namespace'] );
- if ( !is_null( $this->contID ) ) {
+ if ( count( $this->cont ) >= 2 ) {
$op = $this->params['dir'] == 'descending' ? '<' : '>';
- $this->addWhere( "{$this->bl_from}$op={$this->contID}" );
+ if ( count( $this->params['namespace'] ) > 1 ) {
+ $this->addWhere(
+ "{$this->bl_from_ns} $op {$this->cont[0]} OR " .
+ "({$this->bl_from_ns} = {$this->cont[0]} AND " .
+ "{$this->bl_from} $op= {$this->cont[1]})"
+ );
+ } else {
+ $this->addWhere( "{$this->bl_from} $op= {$this->cont[1]}" );
+ }
}
if ( $this->params['filterredir'] == 'redirects' ) {
@@ -156,20 +159,56 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
$this->addOption( 'LIMIT', $this->params['limit'] + 1 );
$sort = ( $this->params['dir'] == 'descending' ? ' DESC' : '' );
- $this->addOption( 'ORDER BY', $this->bl_from . $sort );
+ $orderBy = array();
+ if ( count( $this->params['namespace'] ) > 1 ) {
+ $orderBy[] = $this->bl_from_ns . $sort;
+ }
+ $orderBy[] = $this->bl_from . $sort;
+ $this->addOption( 'ORDER BY', $orderBy );
$this->addOption( 'STRAIGHT_JOIN' );
+
+ $res = $this->select( __METHOD__ );
+ $count = 0;
+ foreach ( $res as $row ) {
+ if ( ++$count > $this->params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ // Continue string may be overridden at a later step
+ $this->continueStr = "{$row->from_ns}|{$row->page_id}";
+ break;
+ }
+
+ // Fill in continuation fields for later steps
+ if ( count( $this->cont ) < 2 ) {
+ $this->cont[] = $row->from_ns;
+ $this->cont[] = $row->page_id;
+ }
+
+ $this->pageMap[$row->page_namespace][$row->page_title] = $row->page_id;
+ $t = Title::makeTitle( $row->page_namespace, $row->page_title );
+ if ( $row->page_is_redirect ) {
+ $this->redirTitles[] = $t;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $a = array( 'pageid' => intval( $row->page_id ) );
+ ApiQueryBase::addTitleInfo( $a, $t );
+ if ( $row->page_is_redirect ) {
+ $a['redirect'] = true;
+ }
+ // Put all the results in an array first
+ $this->resultArr[$a['pageid']] = $a;
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
}
/**
* @param ApiPageSet $resultPageSet
* @return void
*/
- private function prepareSecondQuery( $resultPageSet = null ) {
- /* SELECT page_id, page_title, page_namespace, page_is_redirect, pl_title, pl_namespace
- FROM pagelinks, page WHERE pl_from=page_id
- AND (pl_title='Foo' AND pl_namespace=0) OR (pl_title='Bar' AND pl_namespace=1)
- ORDER BY pl_namespace, pl_title, pl_from LIMIT 11
- */
+ private function runSecondQuery( $resultPageSet = null ) {
$db = $this->getDB();
$this->addTables( array( 'page', $this->bl_table ) );
$this->addWhere( "{$this->bl_from}=page_id" );
@@ -180,7 +219,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
$this->addFields( $resultPageSet->getPageTableFields() );
}
- $this->addFields( $this->bl_title );
+ $this->addFields( array( $this->bl_title, 'from_ns' => 'page_namespace' ) );
if ( $this->hasNS ) {
$this->addFields( $this->bl_ns );
}
@@ -195,30 +234,33 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
$redirDBkey = $t->getDBkey();
$titleWhere[] = "{$this->bl_title} = " . $db->addQuotes( $redirDBkey ) .
( $this->hasNS ? " AND {$this->bl_ns} = {$redirNs}" : '' );
- $allRedirNs[] = $redirNs;
- $allRedirDBkey[] = $redirDBkey;
+ $allRedirNs[$redirNs] = true;
+ $allRedirDBkey[$redirDBkey] = true;
}
$this->addWhere( $db->makeList( $titleWhere, LIST_OR ) );
$this->addWhereFld( 'page_namespace', $this->params['namespace'] );
- if ( !is_null( $this->redirID ) ) {
+ if ( count( $this->cont ) >= 6 ) {
$op = $this->params['dir'] == 'descending' ? '<' : '>';
- /** @var $first Title */
- $first = $this->redirTitles[0];
- $title = $db->addQuotes( $first->getDBkey() );
- $ns = $first->getNamespace();
- $from = $this->redirID;
- if ( $this->hasNS ) {
- $this->addWhere( "{$this->bl_ns} $op $ns OR " .
- "({$this->bl_ns} = $ns AND " .
- "({$this->bl_title} $op $title OR " .
- "({$this->bl_title} = $title AND " .
- "{$this->bl_from} $op= $from)))" );
- } else {
- $this->addWhere( "{$this->bl_title} $op $title OR " .
- "({$this->bl_title} = $title AND " .
- "{$this->bl_from} $op= $from)" );
+
+ $where = "{$this->bl_from} $op= {$this->cont[5]}";
+ // Don't bother with namespace, title, or from_namespace if it's
+ // otherwise constant in the where clause.
+ if ( count( $this->params['namespace'] ) > 1 ) {
+ $where = "{$this->bl_from_ns} $op {$this->cont[4]} OR " .
+ "({$this->bl_from_ns} = {$this->cont[4]} AND ($where))";
+ }
+ if ( count( $allRedirDBkey ) > 1 ) {
+ $title = $db->addQuotes( $this->cont[3] );
+ $where = "{$this->bl_title} $op $title OR " .
+ "({$this->bl_title} = $title AND ($where))";
+ }
+ if ( $this->hasNS && count( $allRedirNs ) > 1 ) {
+ $where = "{$this->bl_ns} $op {$this->cont[2]} OR " .
+ "({$this->bl_ns} = {$this->cont[2]} AND ($where))";
}
+
+ $this->addWhere( $where );
}
if ( $this->params['filterredir'] == 'redirects' ) {
$this->addWhereFld( 'page_is_redirect', 1 );
@@ -229,16 +271,57 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
$this->addOption( 'LIMIT', $this->params['limit'] + 1 );
$orderBy = array();
$sort = ( $this->params['dir'] == 'descending' ? ' DESC' : '' );
- // Don't order by namespace/title if it's constant in the WHERE clause
- if ( $this->hasNS && count( array_unique( $allRedirNs ) ) != 1 ) {
+ // Don't order by namespace/title/from_namespace if it's constant in the WHERE clause
+ if ( $this->hasNS && count( $allRedirNs ) > 1 ) {
$orderBy[] = $this->bl_ns . $sort;
}
- if ( count( array_unique( $allRedirDBkey ) ) != 1 ) {
+ if ( count( $allRedirDBkey ) > 1 ) {
$orderBy[] = $this->bl_title . $sort;
}
+ if ( count( $this->params['namespace'] ) > 1 ) {
+ $orderBy[] = $this->bl_from_ns . $sort;
+ }
$orderBy[] = $this->bl_from . $sort;
$this->addOption( 'ORDER BY', $orderBy );
$this->addOption( 'USE INDEX', array( 'page' => 'PRIMARY' ) );
+
+ $res = $this->select( __METHOD__ );
+ $count = 0;
+ foreach ( $res as $row ) {
+ $ns = $this->hasNS ? $row->{$this->bl_ns} : NS_FILE;
+
+ if ( ++$count > $this->params['limit'] ) {
+ // We've reached the one extra which shows that there are
+ // additional pages to be had. Stop here...
+ // Note we must keep the parameters for the first query constant
+ // This may be overridden at a later step
+ $title = $row->{$this->bl_title};
+ $this->continueStr = join( '|', array_slice( $this->cont, 0, 2 ) ) .
+ "|$ns|$title|{$row->from_ns}|{$row->page_id}";
+ break;
+ }
+
+ // Fill in continuation fields for later steps
+ if ( count( $this->cont ) < 6 ) {
+ $this->cont[] = $ns;
+ $this->cont[] = $row->{$this->bl_title};
+ $this->cont[] = $row->from_ns;
+ $this->cont[] = $row->page_id;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $a['pageid'] = intval( $row->page_id );
+ ApiQueryBase::addTitleInfo( $a, Title::makeTitle( $row->page_namespace, $row->page_title ) );
+ if ( $row->page_is_redirect ) {
+ $a['redirect'] = true;
+ }
+ $parentID = $this->pageMap[$ns][$row->{$this->bl_title}];
+ // Put all the results in an array first
+ $this->resultArr[$parentID]['redirlinks'][$row->page_id] = $a;
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
}
/**
@@ -255,106 +338,163 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
if ( $this->params['limit'] == 'max' ) {
$this->params['limit'] = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
- $result->setParsedLimit( $this->getModuleName(), $this->params['limit'] );
+ $result->addParsedLimit( $this->getModuleName(), $this->params['limit'] );
} else {
$this->params['limit'] = intval( $this->params['limit'] );
$this->validateLimit( 'limit', $this->params['limit'], 1, $userMax, $botMax );
}
- $this->processContinue();
- $this->prepareFirstQuery( $resultPageSet );
+ $this->rootTitle = $this->getTitleOrPageId( $this->params )->getTitle();
+
+ // only image titles are allowed for the root in imageinfo mode
+ if ( !$this->hasNS && $this->rootTitle->getNamespace() !== NS_FILE ) {
+ $this->dieUsage(
+ "The title for {$this->getModuleName()} query must be a file",
+ 'bad_image_title'
+ );
+ }
- $res = $this->select( __METHOD__ . '::firstQuery' );
+ // Parse and validate continuation parameter
+ $this->cont = array();
+ if ( $this->params['continue'] !== null ) {
+ $db = $this->getDB();
+ $cont = explode( '|', $this->params['continue'] );
- $count = 0;
+ switch ( count( $cont ) ) {
+ case 8:
+ // redirect page ID for result adding
+ $this->cont[7] = (int)$cont[7];
+ $this->dieContinueUsageIf( $cont[7] !== (string)$this->cont[7] );
- foreach ( $res as $row ) {
- if ( ++$count > $this->params['limit'] ) {
- // We've reached the one extra which shows that there are
- // additional pages to be had. Stop here...
- // Continue string preserved in case the redirect query doesn't pass the limit
- $this->continueStr = $this->getContinueStr( $row->page_id );
- break;
- }
+ /* Fall through */
- if ( is_null( $resultPageSet ) ) {
- $this->extractRowInfo( $row );
- } else {
- $this->pageMap[$row->page_namespace][$row->page_title] = $row->page_id;
- if ( $row->page_is_redirect ) {
- $this->redirTitles[] = Title::makeTitle( $row->page_namespace, $row->page_title );
- }
+ case 7:
+ // top-level page ID for result adding
+ $this->cont[6] = (int)$cont[6];
+ $this->dieContinueUsageIf( $cont[6] !== (string)$this->cont[6] );
- $resultPageSet->processDbRow( $row );
+ /* Fall through */
+
+ case 6:
+ // ns for 2nd query (even for imageusage)
+ $this->cont[2] = (int)$cont[2];
+ $this->dieContinueUsageIf( $cont[2] !== (string)$this->cont[2] );
+
+ // title for 2nd query
+ $this->cont[3] = $cont[3];
+
+ // from_ns for 2nd query
+ $this->cont[4] = (int)$cont[4];
+ $this->dieContinueUsageIf( $cont[4] !== (string)$this->cont[4] );
+
+ // from_id for 1st query
+ $this->cont[5] = (int)$cont[5];
+ $this->dieContinueUsageIf( $cont[5] !== (string)$this->cont[5] );
+
+ /* Fall through */
+
+ case 2:
+ // from_ns for 1st query
+ $this->cont[0] = (int)$cont[0];
+ $this->dieContinueUsageIf( $cont[0] !== (string)$this->cont[0] );
+
+ // from_id for 1st query
+ $this->cont[1] = (int)$cont[1];
+ $this->dieContinueUsageIf( $cont[1] !== (string)$this->cont[1] );
+
+ break;
+
+ default:
+ $this->dieContinueUsageIf( true );
}
+
+ ksort( $this->cont );
}
+ $this->runFirstQuery( $resultPageSet );
if ( $this->redirect && count( $this->redirTitles ) ) {
$this->resetQueryParams();
- $this->prepareSecondQuery( $resultPageSet );
- $res = $this->select( __METHOD__ . '::secondQuery' );
- $count = 0;
- foreach ( $res as $row ) {
- if ( ++$count > $this->params['limit'] ) {
- // We've reached the one extra which shows that there are
- // additional pages to be had. Stop here...
- // We need to keep the parent page of this redir in
- if ( $this->hasNS ) {
- $parentID = $this->pageMap[$row->{$this->bl_ns}][$row->{$this->bl_title}];
- } else {
- $parentID = $this->pageMap[NS_FILE][$row->{$this->bl_title}];
- }
- $this->continueStr = $this->getContinueRedirStr( $parentID, $row->page_id );
- break;
- }
-
- if ( is_null( $resultPageSet ) ) {
- $this->extractRedirRowInfo( $row );
- } else {
- $resultPageSet->processDbRow( $row );
- }
- }
+ $this->runSecondQuery( $resultPageSet );
}
+
+ // Fill in any missing fields in case it's needed below
+ $this->cont += array( 0, 0, 0, '', 0, 0, 0 );
+
if ( is_null( $resultPageSet ) ) {
// Try to add the result data in one go and pray that it fits
- $fit = $result->addValue( 'query', $this->getModuleName(), array_values( $this->resultArr ) );
+ $code = $this->bl_code;
+ $data = array_map( function ( $arr ) use ( $result, $code ) {
+ if ( isset( $arr['redirlinks'] ) ) {
+ $arr['redirlinks'] = array_values( $arr['redirlinks'] );
+ ApiResult::setIndexedTagName( $arr['redirlinks'], $code );
+ }
+ return $arr;
+ }, array_values( $this->resultArr ) );
+ $fit = $result->addValue( 'query', $this->getModuleName(), $data );
if ( !$fit ) {
// It didn't fit. Add elements one by one until the
// result is full.
+ ksort( $this->resultArr );
+ if ( count( $this->cont ) >= 7 ) {
+ $startAt = $this->cont[6];
+ } else {
+ reset( $this->resultArr );
+ $startAt = key( $this->resultArr );
+ }
+ $idx = 0;
foreach ( $this->resultArr as $pageID => $arr ) {
+ if ( $pageID < $startAt ) {
+ continue;
+ }
+
// Add the basic entry without redirlinks first
$fit = $result->addValue(
array( 'query', $this->getModuleName() ),
- null, array_diff_key( $arr, array( 'redirlinks' => '' ) ) );
+ $idx, array_diff_key( $arr, array( 'redirlinks' => '' ) ) );
if ( !$fit ) {
- $this->continueStr = $this->getContinueStr( $pageID );
+ $this->continueStr = join( '|', array_slice( $this->cont, 0, 6 ) ) .
+ "|$pageID";
break;
}
$hasRedirs = false;
- $redirLinks = isset( $arr['redirlinks'] ) ? $arr['redirlinks'] : array();
- foreach ( (array)$redirLinks as $key => $redir ) {
+ $redirLinks = isset( $arr['redirlinks'] ) ? (array)$arr['redirlinks'] : array();
+ ksort( $redirLinks );
+ if ( count( $this->cont ) >= 8 && $pageID == $startAt ) {
+ $redirStartAt = $this->cont[7];
+ } else {
+ reset( $redirLinks );
+ $redirStartAt = key( $redirLinks );
+ }
+ foreach ( $redirLinks as $key => $redir ) {
+ if ( $key < $redirStartAt ) {
+ continue;
+ }
+
$fit = $result->addValue(
- array( 'query', $this->getModuleName(), $pageID, 'redirlinks' ),
- $key, $redir );
+ array( 'query', $this->getModuleName(), $idx, 'redirlinks' ),
+ null, $redir );
if ( !$fit ) {
- $this->continueStr = $this->getContinueRedirStr( $pageID, $redir['pageid'] );
+ $this->continueStr = join( '|', array_slice( $this->cont, 0, 6 ) ) .
+ "|$pageID|$key";
break;
}
$hasRedirs = true;
}
if ( $hasRedirs ) {
- $result->setIndexedTagName_internal(
- array( 'query', $this->getModuleName(), $pageID, 'redirlinks' ),
+ $result->addIndexedTagName(
+ array( 'query', $this->getModuleName(), $idx, 'redirlinks' ),
$this->bl_code );
}
if ( !$fit ) {
break;
}
+
+ $idx++;
}
}
- $result->setIndexedTagName_internal(
+ $result->addIndexedTagName(
array( 'query', $this->getModuleName() ),
$this->bl_code
);
@@ -364,91 +504,6 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
}
}
- private function extractRowInfo( $row ) {
- $this->pageMap[$row->page_namespace][$row->page_title] = $row->page_id;
- $t = Title::makeTitle( $row->page_namespace, $row->page_title );
- $a = array( 'pageid' => intval( $row->page_id ) );
- ApiQueryBase::addTitleInfo( $a, $t );
- if ( $row->page_is_redirect ) {
- $a['redirect'] = '';
- $this->redirTitles[] = $t;
- }
- // Put all the results in an array first
- $this->resultArr[$a['pageid']] = $a;
- }
-
- private function extractRedirRowInfo( $row ) {
- $a['pageid'] = intval( $row->page_id );
- ApiQueryBase::addTitleInfo( $a, Title::makeTitle( $row->page_namespace, $row->page_title ) );
- if ( $row->page_is_redirect ) {
- $a['redirect'] = '';
- }
- $ns = $this->hasNS ? $row->{$this->bl_ns} : NS_FILE;
- $parentID = $this->pageMap[$ns][$row->{$this->bl_title}];
- // Put all the results in an array first
- $this->resultArr[$parentID]['redirlinks'][] = $a;
- $this->getResult()->setIndexedTagName(
- $this->resultArr[$parentID]['redirlinks'],
- $this->bl_code
- );
- }
-
- protected function processContinue() {
- if ( !is_null( $this->params['continue'] ) ) {
- $this->parseContinueParam();
- } else {
- $this->rootTitle = $this->getTitleOrPageId( $this->params )->getTitle();
- }
-
- // only image titles are allowed for the root in imageinfo mode
- if ( !$this->hasNS && $this->rootTitle->getNamespace() !== NS_FILE ) {
- $this->dieUsage(
- "The title for {$this->getModuleName()} query must be an image",
- 'bad_image_title'
- );
- }
- }
-
- protected function parseContinueParam() {
- $continueList = explode( '|', $this->params['continue'] );
- // expected format:
- // ns | key | id1 [| id2]
- // ns+key: root title
- // id1: first-level page ID to continue from
- // id2: second-level page ID to continue from
-
- // null stuff out now so we know what's set and what isn't
- $this->rootTitle = $this->contID = $this->redirID = null;
- $rootNs = intval( $continueList[0] );
- $this->dieContinueUsageIf( $rootNs === 0 && $continueList[0] !== '0' );
-
- $this->rootTitle = Title::makeTitleSafe( $rootNs, $continueList[1] );
- $this->dieContinueUsageIf( !$this->rootTitle );
-
- $contID = intval( $continueList[2] );
- $this->dieContinueUsageIf( $contID === 0 && $continueList[2] !== '0' );
-
- $this->contID = $contID;
- $id2 = isset( $continueList[3] ) ? $continueList[3] : null;
- $redirID = intval( $id2 );
-
- if ( $redirID === 0 && $id2 !== '0' ) {
- // This one isn't required
- return;
- }
- $this->redirID = $redirID;
- }
-
- protected function getContinueStr( $lastPageID ) {
- return $this->rootTitle->getNamespace() .
- '|' . $this->rootTitle->getDBkey() .
- '|' . $lastPageID;
- }
-
- protected function getContinueRedirStr( $lastPageID, $lastRedirID ) {
- return $this->getContinueStr( $lastPageID ) . '|' . $lastRedirID;
- }
-
public function getAllowedParams() {
$retval = array(
'title' => array(
@@ -457,7 +512,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
'pageid' => array(
ApiBase::PARAM_TYPE => 'integer',
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'namespace' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => 'namespace'
@@ -493,59 +550,25 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
return $retval;
}
- public function getParamDescription() {
- $retval = array(
- 'title' => "Title to search. Cannot be used together with {$this->bl_code}pageid",
- 'pageid' => "Pageid to search. Cannot be used together with {$this->bl_code}title",
- 'continue' => 'When more results are available, use this to continue',
- 'namespace' => 'The namespace to enumerate',
- 'dir' => 'The direction in which to list',
- );
- if ( $this->getModuleName() != 'embeddedin' ) {
- return array_merge( $retval, array(
- 'redirect' => 'If linking page is a redirect, find all pages ' .
- 'that link to that redirect as well. Maximum limit is halved.',
- 'filterredir' => 'How to filter for redirects. If set to ' .
- "nonredirects when {$this->bl_code}redirect is enabled, " .
- 'this is only applied to the second level',
- 'limit' => 'How many total pages to return. If ' .
- "{$this->bl_code}redirect is enabled, limit applies to each " .
- 'level separately (which means you may get up to 2 * limit results).'
- ) );
- }
-
- return array_merge( $retval, array(
- 'filterredir' => 'How to filter for redirects',
- 'limit' => 'How many total pages to return'
- ) );
- }
-
- public function getDescription() {
- switch ( $this->getModuleName() ) {
- case 'backlinks':
- return 'Find all pages that link to the given page.';
- case 'embeddedin':
- return 'Find all pages that embed (transclude) the given title.';
- case 'imageusage':
- return 'Find all pages that use the given image title.';
- default:
- ApiBase::dieDebug( __METHOD__, 'Unknown module name.' );
- }
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
static $examples = array(
'backlinks' => array(
- 'api.php?action=query&list=backlinks&bltitle=Main%20Page',
- 'api.php?action=query&generator=backlinks&gbltitle=Main%20Page&prop=info'
+ 'action=query&list=backlinks&bltitle=Main%20Page'
+ => 'apihelp-query+backlinks-example-simple',
+ 'action=query&generator=backlinks&gbltitle=Main%20Page&prop=info'
+ => 'apihelp-query+backlinks-example-generator',
),
'embeddedin' => array(
- 'api.php?action=query&list=embeddedin&eititle=Template:Stub',
- 'api.php?action=query&generator=embeddedin&geititle=Template:Stub&prop=info'
+ 'action=query&list=embeddedin&eititle=Template:Stub'
+ => 'apihelp-query+embeddedin-example-simple',
+ 'action=query&generator=embeddedin&geititle=Template:Stub&prop=info'
+ => 'apihelp-query+embeddedin-example-generator',
),
'imageusage' => array(
- 'api.php?action=query&list=imageusage&iutitle=File:Albert%20Einstein%20Head.jpg',
- 'api.php?action=query&generator=imageusage&giutitle=File:Albert%20Einstein%20Head.jpg&prop=info'
+ 'action=query&list=imageusage&iutitle=File:Albert%20Einstein%20Head.jpg'
+ => 'apihelp-query+imageusage-example-simple',
+ 'action=query&generator=imageusage&giutitle=File:Albert%20Einstein%20Head.jpg&prop=info'
+ => 'apihelp-query+imageusage-example-generator',
)
);
diff --git a/includes/api/ApiQueryBacklinksprop.php b/includes/api/ApiQueryBacklinksprop.php
index cd682612..8e271e7b 100644
--- a/includes/api/ApiQueryBacklinksprop.php
+++ b/includes/api/ApiQueryBacklinksprop.php
@@ -40,15 +40,13 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
'code' => 'rd',
'prefix' => 'rd',
'linktable' => 'redirect',
- 'what' => 'redirects to',
- 'description' => 'Returns all redirects to the given pages.',
'props' => array(
- 'fragment' => 'Fragment of each redirect, if any',
+ 'fragment',
),
'showredirects' => false,
'show' => array(
- 'fragment' => 'Only show redirects with a fragment',
- '!fragment' => 'Only show redirects without a fragment',
+ 'fragment',
+ '!fragment',
),
),
'linkshere' => array(
@@ -56,8 +54,6 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
'prefix' => 'pl',
'linktable' => 'pagelinks',
'from_namespace' => true,
- 'what' => 'pages linking to',
- 'description' => 'Find all pages that link to the given pages.',
'showredirects' => true,
),
'transcludedin' => array(
@@ -65,8 +61,6 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
'prefix' => 'tl',
'linktable' => 'templatelinks',
'from_namespace' => true,
- 'what' => 'pages transcluding',
- 'description' => 'Find all pages that transclude the given pages.',
'showredirects' => true,
),
'fileusage' => array(
@@ -75,9 +69,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
'linktable' => 'imagelinks',
'from_namespace' => true,
'to_namespace' => NS_FILE,
- 'what' => 'pages using',
'exampletitle' => 'File:Example.jpg',
- 'description' => 'Find all pages that use the given files.',
'showredirects' => true,
),
);
@@ -106,8 +98,8 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
$emptyString = $db->addQuotes( '' );
$pageSet = $this->getPageSet();
- $titles = $pageSet->getGoodTitles() + $pageSet->getMissingTitles();
- $map = $pageSet->getAllTitlesByNamespace();
+ $titles = $pageSet->getGoodAndMissingTitles();
+ $map = $pageSet->getGoodAndMissingTitlesByNamespace();
// Determine our fields to query on
$p = $settings['prefix'];
@@ -295,8 +287,8 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
if ( $fld_fragment && $row->rd_fragment !== null && $row->rd_fragment !== '' ) {
$vals['fragment'] = $row->rd_fragment;
}
- if ( $fld_redirect && $row->page_is_redirect ) {
- $vals['redirect'] = '';
+ if ( $fld_redirect ) {
+ $vals['redirect'] = (bool)$row->page_is_redirect;
}
$fit = $this->addPageSubItem( $id, $vals );
if ( !$fit ) {
@@ -348,6 +340,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => 'namespace',
),
+ 'show' => null, // Will be filled/removed below
'limit' => array(
ApiBase::PARAM_DFLT => 10,
ApiBase::PARAM_TYPE => 'limit',
@@ -355,16 +348,24 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
);
+ if ( empty( $settings['from_namespace'] ) && $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+ 'api-help-param-limited-in-miser-mode',
+ );
+ }
+
if ( !empty( $settings['showredirects'] ) ) {
$ret['prop'][ApiBase::PARAM_TYPE][] = 'redirect';
$ret['prop'][ApiBase::PARAM_DFLT] .= '|redirect';
}
if ( isset( $settings['props'] ) ) {
$ret['prop'][ApiBase::PARAM_TYPE] = array_merge(
- $ret['prop'][ApiBase::PARAM_TYPE], array_keys( $settings['props'] )
+ $ret['prop'][ApiBase::PARAM_TYPE], $settings['props']
);
}
@@ -374,93 +375,32 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
$show[] = '!redirect';
}
if ( isset( $settings['show'] ) ) {
- $show = array_merge( $show, array_keys( $settings['show'] ) );
+ $show = array_merge( $show, $settings['show'] );
}
if ( $show ) {
$ret['show'] = array(
ApiBase::PARAM_TYPE => $show,
ApiBase::PARAM_ISMULTI => true,
);
+ } else {
+ unset( $ret['show'] );
}
return $ret;
}
- public function getParamDescription() {
- $settings = self::$settings[$this->getModuleName()];
- $p = $this->getModulePrefix();
-
- $ret = array(
- 'prop' => array(
- 'Which properties to get:',
- ),
- 'show' => array(
- 'Show only items that meet this criteria.',
- ),
- 'namespace' => 'Only include pages in these namespaces',
- 'limit' => 'How many to return',
- 'continue' => 'When more results are available, use this to continue',
- );
-
- if ( empty( $settings['from_namespace'] ) && $this->getConfig()->get( 'MiserMode' ) ) {
- $ret['namespace'] = array(
- $ret['namespace'],
- "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
- 'returned before continuing; in extreme cases, zero results may be returned.',
- );
- if ( isset( $ret['type'] ) ) {
- $ret['namespace'][] = "Note that you can use {$p}type=subcat or {$p}type=file " .
- "instead of {$p}namespace=14 or 6.";
- }
- }
-
- $props = array(
- 'pageid' => 'Adds the ID of page',
- 'title' => 'Adds the title and namespace ID of the page',
- );
- if ( !empty( $settings['showredirects'] ) ) {
- $props['redirect'] = 'Indicate if the page is a redirect';
- }
- if ( isset( $settings['props'] ) ) {
- $props += $settings['props'];
- }
- foreach ( $props as $k => $v ) {
- $ret['props'][] = sprintf( "%-9s - %s", $k, $v );
- }
-
- $show = array();
- if ( !empty( $settings['showredirects'] ) ) {
- $show += array(
- 'redirect' => 'Only show redirects',
- '!redirect' => 'Only show non-redirects',
- );
- }
- if ( isset( $settings['show'] ) ) {
- $show += $settings['show'];
- }
- foreach ( $show as $k => $v ) {
- $ret['show'][] = sprintf( "%-9s - %s", $k, $v );
- }
-
- return $ret;
- }
-
- public function getDescription() {
- return self::$settings[$this->getModuleName()]['description'];
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
$settings = self::$settings[$this->getModuleName()];
$name = $this->getModuleName();
- $what = $settings['what'];
+ $path = $this->getModulePath();
$title = isset( $settings['exampletitle'] ) ? $settings['exampletitle'] : 'Main Page';
$etitle = rawurlencode( $title );
return array(
- "api.php?action=query&prop={$name}&titles={$etitle}"
- => "Get a list of $what [[$title]]",
- "api.php?action=query&generator={$name}&titles={$etitle}&prop=info"
- => "Get information about $what [[$title]]",
+ "action=query&prop={$name}&titles={$etitle}"
+ => "apihelp-$path-example-simple",
+ "action=query&generator={$name}&titles={$etitle}&prop=info"
+ => "apihelp-$path-example-generator",
);
}
diff --git a/includes/api/ApiQueryBase.php b/includes/api/ApiQueryBase.php
index 65e10ab7..a15754ce 100644
--- a/includes/api/ApiQueryBase.php
+++ b/includes/api/ApiQueryBase.php
@@ -70,6 +70,10 @@ abstract class ApiQueryBase extends ApiBase {
/**
* Override this method to request extra fields from the pageSet
* using $pageSet->requestField('fieldName')
+ *
+ * Note this only makes sense for 'prop' modules, as 'list' and 'meta'
+ * modules should not be using the pageset.
+ *
* @param ApiPageSet $pageSet
*/
public function requestExtraData( $pageSet ) {
@@ -91,6 +95,13 @@ abstract class ApiQueryBase extends ApiBase {
}
/**
+ * @see ApiBase::getParent()
+ */
+ public function getParent() {
+ return $this->getQuery();
+ }
+
+ /**
* Get the Query database connection (read-only)
* @return DatabaseBase
*/
@@ -361,12 +372,7 @@ abstract class ApiQueryBase extends ApiBase {
isset( $extraQuery['join_conds'] ) ? (array)$extraQuery['join_conds'] : array()
);
- // getDB has its own profileDBIn/Out calls
- $db = $this->getDB();
-
- $this->profileDBIn();
- $res = $db->select( $tables, $fields, $where, $method, $options, $join_conds );
- $this->profileDBOut();
+ $res = $this->getDB()->select( $tables, $fields, $where, $method, $options, $join_conds );
return $res;
}
@@ -450,7 +456,7 @@ abstract class ApiQueryBase extends ApiBase {
*/
protected function addPageSubItems( $pageId, $data ) {
$result = $this->getResult();
- $result->setIndexedTagName( $data, $this->getModulePrefix() );
+ ApiResult::setIndexedTagName( $data, $this->getModulePrefix() );
return $result->addValue( array( 'query', 'pages', intval( $pageId ) ),
$this->getModuleName(),
@@ -475,7 +481,7 @@ abstract class ApiQueryBase extends ApiBase {
if ( !$fit ) {
return false;
}
- $result->setIndexedTagName_internal( array( 'query', 'pages', $pageId,
+ $result->addIndexedTagName( array( 'query', 'pages', $pageId,
$this->getModuleName() ), $elemname );
return true;
@@ -487,7 +493,7 @@ abstract class ApiQueryBase extends ApiBase {
* @param string|array $paramValue Parameter value
*/
protected function setContinueEnumParameter( $paramName, $paramValue ) {
- $this->getResult()->setContinueParam( $this, $paramName, $paramValue );
+ $this->getContinuationManager()->addContinueParam( $this, $paramName, $paramValue );
}
/**
@@ -502,7 +508,8 @@ abstract class ApiQueryBase extends ApiBase {
*/
public function titlePartToKey( $titlePart, $namespace = NS_MAIN ) {
$t = Title::makeTitleSafe( $namespace, $titlePart . 'x' );
- if ( !$t ) {
+ if ( !$t || $t->hasFragment() ) {
+ // Invalid title (e.g. bad chars) or contained a '#'.
$this->dieUsageMsg( array( 'invalidtitle', $titlePart ) );
}
if ( $namespace != $t->getNamespace() || $t->isExternal() ) {
@@ -578,7 +585,6 @@ abstract class ApiQueryBase extends ApiBase {
protected function checkRowCount() {
wfDeprecated( __METHOD__, '1.24' );
$db = $this->getDB();
- $this->profileDBIn();
$rowcount = $db->estimateRowCount(
$this->tables,
$this->fields,
@@ -586,7 +592,6 @@ abstract class ApiQueryBase extends ApiBase {
__METHOD__,
$this->options
);
- $this->profileDBOut();
if ( $rowcount > $this->getConfig()->get( 'APIMaxDBRows' ) ) {
return false;
@@ -705,13 +710,24 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase {
*/
protected function setContinueEnumParameter( $paramName, $paramValue ) {
if ( $this->mGeneratorPageSet !== null ) {
- $this->getResult()->setGeneratorContinueParam( $this, $paramName, $paramValue );
+ $this->getContinuationManager()->addGeneratorContinueParam( $this, $paramName, $paramValue );
} else {
parent::setContinueEnumParameter( $paramName, $paramValue );
}
}
/**
+ * @see ApiBase::getHelpFlags()
+ *
+ * Corresponding messages: api-help-flag-generator
+ */
+ protected function getHelpFlags() {
+ $flags = parent::getHelpFlags();
+ $flags[] = 'generator';
+ return $flags;
+ }
+
+ /**
* Execute this module as a generator
* @param ApiPageSet $resultPageSet All output should be appended to this object
*/
diff --git a/includes/api/ApiQueryBlocks.php b/includes/api/ApiQueryBlocks.php
index 33b25fd9..4a7023b7 100644
--- a/includes/api/ApiQueryBlocks.php
+++ b/includes/api/ApiQueryBlocks.php
@@ -31,11 +31,6 @@
*/
class ApiQueryBlocks extends ApiQueryBase {
- /**
- * @var array
- */
- protected $usernames;
-
public function __construct( ApiQuery $query, $moduleName ) {
parent::__construct( $query, $moduleName, 'bk' );
}
@@ -62,12 +57,11 @@ class ApiQueryBlocks extends ApiQueryBase {
$result = $this->getResult();
$this->addTables( 'ipblocks' );
- $this->addFields( array( 'ipb_auto', 'ipb_id' ) );
+ $this->addFields( array( 'ipb_auto', 'ipb_id', 'ipb_timestamp' ) );
$this->addFieldsIf( array( 'ipb_address', 'ipb_user' ), $fld_user || $fld_userid );
$this->addFieldsIf( 'ipb_by_text', $fld_by );
$this->addFieldsIf( 'ipb_by', $fld_byid );
- $this->addFieldsIf( 'ipb_timestamp', $fld_timestamp );
$this->addFieldsIf( 'ipb_expiry', $fld_expiry );
$this->addFieldsIf( 'ipb_reason', $fld_reason );
$this->addFieldsIf( array( 'ipb_range_start', 'ipb_range_end' ), $fld_range );
@@ -102,10 +96,11 @@ class ApiQueryBlocks extends ApiQueryBase {
$this->addWhereFld( 'ipb_id', $params['ids'] );
}
if ( isset( $params['users'] ) ) {
+ $usernames = array();
foreach ( (array)$params['users'] as $u ) {
- $this->prepareUsername( $u );
+ $usernames[] = $this->prepareUsername( $u );
}
- $this->addWhereFld( 'ipb_address', $this->usernames );
+ $this->addWhereFld( 'ipb_address', $usernames );
$this->addWhereFld( 'ipb_auto', 0 );
}
if ( isset( $params['ip'] ) ) {
@@ -192,7 +187,9 @@ class ApiQueryBlocks extends ApiQueryBase {
$this->setContinueEnumParameter( 'continue', "$row->ipb_timestamp|$row->ipb_id" );
break;
}
- $block = array();
+ $block = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
if ( $fld_id ) {
$block['id'] = $row->ipb_id;
}
@@ -223,27 +220,13 @@ class ApiQueryBlocks extends ApiQueryBase {
}
if ( $fld_flags ) {
// For clarity, these flags use the same names as their action=block counterparts
- if ( $row->ipb_auto ) {
- $block['automatic'] = '';
- }
- if ( $row->ipb_anon_only ) {
- $block['anononly'] = '';
- }
- if ( $row->ipb_create_account ) {
- $block['nocreate'] = '';
- }
- if ( $row->ipb_enable_autoblock ) {
- $block['autoblock'] = '';
- }
- if ( $row->ipb_block_email ) {
- $block['noemail'] = '';
- }
- if ( $row->ipb_deleted ) {
- $block['hidden'] = '';
- }
- if ( $row->ipb_allow_usertalk ) {
- $block['allowusertalk'] = '';
- }
+ $block['automatic'] = (bool)$row->ipb_auto;
+ $block['anononly'] = (bool)$row->ipb_anon_only;
+ $block['nocreate'] = (bool)$row->ipb_create_account;
+ $block['autoblock'] = (bool)$row->ipb_enable_autoblock;
+ $block['noemail'] = (bool)$row->ipb_block_email;
+ $block['hidden'] = (bool)$row->ipb_deleted;
+ $block['allowusertalk'] = (bool)$row->ipb_allow_usertalk;
}
$fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $block );
if ( !$fit ) {
@@ -251,7 +234,7 @@ class ApiQueryBlocks extends ApiQueryBase {
break;
}
}
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'block' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'block' );
}
protected function prepareUsername( $user ) {
@@ -264,10 +247,12 @@ class ApiQueryBlocks extends ApiQueryBase {
if ( $name === false ) {
$this->dieUsage( "User name {$user} is not valid", 'param_user' );
}
- $this->usernames[] = $name;
+ return $name;
}
public function getAllowedParams() {
+ $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
+
return array(
'start' => array(
ApiBase::PARAM_TYPE => 'timestamp'
@@ -280,7 +265,8 @@ class ApiQueryBlocks extends ApiQueryBase {
'newer',
'older'
),
- ApiBase::PARAM_DFLT => 'older'
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
),
'ids' => array(
ApiBase::PARAM_TYPE => 'integer',
@@ -289,7 +275,13 @@ class ApiQueryBlocks extends ApiQueryBase {
'users' => array(
ApiBase::PARAM_ISMULTI => true
),
- 'ip' => null,
+ 'ip' => array(
+ ApiBase::PARAM_HELP_MSG => array(
+ 'apihelp-query+blocks-param-ip',
+ $blockCIDRLimit['IPv4'],
+ $blockCIDRLimit['IPv6'],
+ ),
+ ),
'limit' => array(
ApiBase::PARAM_DFLT => 10,
ApiBase::PARAM_TYPE => 'limit',
@@ -326,56 +318,18 @@ class ApiQueryBlocks extends ApiQueryBase {
),
ApiBase::PARAM_ISMULTI => true
),
- 'continue' => null,
- );
- }
-
- public function getParamDescription() {
- $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
- $p = $this->getModulePrefix();
-
- return array(
- 'start' => 'The timestamp to start enumerating from',
- 'end' => 'The timestamp to stop enumerating at',
- 'dir' => $this->getDirectionDescription( $p ),
- 'ids' => 'List of block IDs to list (optional)',
- 'users' => 'List of users to search for (optional)',
- 'ip' => array(
- 'Get all blocks applying to this IP or CIDR range, including range blocks.',
- "Cannot be used together with bkusers. CIDR ranges broader than " .
- "IPv4/{$blockCIDRLimit['IPv4']} or IPv6/{$blockCIDRLimit['IPv6']} " .
- "are not accepted"
- ),
- 'limit' => 'The maximum amount of blocks to list',
- 'prop' => array(
- 'Which properties to get',
- ' id - Adds the ID of the block',
- ' user - Adds the username of the blocked user',
- ' userid - Adds the user ID of the blocked user',
- ' by - Adds the username of the blocking user',
- ' byid - Adds the user ID of the blocking user',
- ' timestamp - Adds the timestamp of when the block was given',
- ' expiry - Adds the timestamp of when the block expires',
- ' reason - Adds the reason given for the block',
- ' range - Adds the range of IPs affected by the block',
- ' flags - Tags the ban with (autoblock, anononly, etc)',
- ),
- 'show' => array(
- 'Show only items that meet this criteria.',
- "For example, to see only indefinite blocks on IPs, set {$p}show=ip|!temp"
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
- 'continue' => 'When more results are available, use this to continue',
);
}
- public function getDescription() {
- return 'List all blocked users and IP addresses.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=blocks',
- 'api.php?action=query&list=blocks&bkusers=Alice|Bob'
+ 'action=query&list=blocks'
+ => 'apihelp-query+blocks-example-simple',
+ 'action=query&list=blocks&bkusers=Alice|Bob'
+ => 'apihelp-query+blocks-example-users',
);
}
diff --git a/includes/api/ApiQueryCategories.php b/includes/api/ApiQueryCategories.php
index 1926dd09..35fa56ef 100644
--- a/includes/api/ApiQueryCategories.php
+++ b/includes/api/ApiQueryCategories.php
@@ -117,8 +117,6 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
}
}
- $this->addOption( 'USE INDEX', array( 'categorylinks' => 'cl_from' ) );
-
$sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
// Don't order by cl_from if it's constant in the WHERE clause
if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
@@ -152,8 +150,8 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
if ( isset( $prop['timestamp'] ) ) {
$vals['timestamp'] = wfTimestamp( TS_ISO_8601, $row->cl_timestamp );
}
- if ( isset( $prop['hidden'] ) && !is_null( $row->pp_propname ) ) {
- $vals['hidden'] = '';
+ if ( isset( $prop['hidden'] ) ) {
+ $vals['hidden'] = !is_null( $row->pp_propname );
}
$fit = $this->addPageSubItem( $row->cl_from, $vals );
@@ -202,7 +200,9 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'categories' => array(
ApiBase::PARAM_ISMULTI => true,
),
@@ -216,34 +216,12 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- return array(
- 'prop' => array(
- 'Which additional properties to get for each category',
- ' sortkey - Adds the sortkey (hexadecimal string) and sortkey prefix',
- ' (human-readable part) for the category',
- ' timestamp - Adds timestamp of when the category was added',
- ' hidden - Tags categories that are hidden with __HIDDENCAT__',
- ),
- 'limit' => 'How many categories to return',
- 'show' => 'Which kind of categories to show',
- 'continue' => 'When more results are available, use this to continue',
- 'categories' => 'Only list these categories. Useful for checking ' .
- 'whether a certain page is in a certain category',
- 'dir' => 'The direction in which to list',
- );
- }
-
- public function getDescription() {
- return 'List all categories the page(s) belong to.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=categories&titles=Albert%20Einstein'
- => 'Get a list of categories [[Albert Einstein]] belongs to',
- 'api.php?action=query&generator=categories&titles=Albert%20Einstein&prop=info'
- => 'Get information about all categories used in the [[Albert Einstein]]',
+ 'action=query&prop=categories&titles=Albert%20Einstein'
+ => 'apihelp-query+categories-example-simple',
+ 'action=query&generator=categories&titles=Albert%20Einstein&prop=info'
+ => 'apihelp-query+categories-example-generator',
);
}
diff --git a/includes/api/ApiQueryCategoryInfo.php b/includes/api/ApiQueryCategoryInfo.php
index 6e9f33c1..9f6c6044 100644
--- a/includes/api/ApiQueryCategoryInfo.php
+++ b/includes/api/ApiQueryCategoryInfo.php
@@ -38,14 +38,13 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
public function execute() {
$params = $this->extractRequestParams();
- $alltitles = $this->getPageSet()->getAllTitlesByNamespace();
+ $alltitles = $this->getPageSet()->getGoodAndMissingTitlesByNamespace();
if ( empty( $alltitles[NS_CATEGORY] ) ) {
return;
}
$categories = $alltitles[NS_CATEGORY];
- $titles = $this->getPageSet()->getGoodTitles() +
- $this->getPageSet()->getMissingTitles();
+ $titles = $this->getPageSet()->getGoodAndMissingTitles();
$cattitles = array();
foreach ( $categories as $c ) {
/** @var $t Title */
@@ -87,9 +86,7 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
$vals['pages'] = $row->cat_pages - $row->cat_subcats - $row->cat_files;
$vals['files'] = intval( $row->cat_files );
$vals['subcats'] = intval( $row->cat_subcats );
- if ( $row->cat_hidden ) {
- $vals['hidden'] = '';
- }
+ $vals['hidden'] = (bool)$row->cat_hidden;
$fit = $this->addPageSubItems( $catids[$row->cat_title], $vals );
if ( !$fit ) {
$this->setContinueEnumParameter( 'continue', $row->cat_title );
@@ -104,24 +101,19 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
public function getAllowedParams() {
return array(
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
);
}
- public function getParamDescription() {
+ protected function getExamplesMessages() {
return array(
- 'continue' => 'When more results are available, use this to continue',
+ 'action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar'
+ => 'apihelp-query+categoryinfo-example-simple',
);
}
- public function getDescription() {
- return 'Returns information about the given categories.';
- }
-
- public function getExamples() {
- return 'api.php?action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar';
- }
-
public function getHelpUrls() {
return 'https://www.mediawiki.org/wiki/API:Properties#categoryinfo_.2F_ci';
}
diff --git a/includes/api/ApiQueryCategoryMembers.php b/includes/api/ApiQueryCategoryMembers.php
index a88a9cb1..ec0c1d14 100644
--- a/includes/api/ApiQueryCategoryMembers.php
+++ b/includes/api/ApiQueryCategoryMembers.php
@@ -48,6 +48,15 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
}
/**
+ * @param string $hexSortkey
+ * @return bool
+ */
+ private function validateHexSortkey( $hexSortkey ) {
+ // A hex sortkey has an unbound number of 2 letter pairs
+ return preg_match( '/^(?:[a-fA-F0-9]{2})*$/', $hexSortkey );
+ }
+
+ /**
* @param ApiPageSet $resultPageSet
* @return void
*/
@@ -128,6 +137,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
$queryTypes = array_slice( $queryTypes, $contTypeIndex );
// Add a WHERE clause for sortkey and from
+ $this->dieContinueUsageIf( !$this->validateHexSortkey( $cont[1] ) );
// pack( "H*", $foo ) is used to convert hex back to binary
$escSortkey = $this->getDB()->addQuotes( pack( 'H*', $cont[1] ) );
$from = intval( $cont[2] );
@@ -143,6 +153,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
if ( $params['startsortkeyprefix'] !== null ) {
$startsortkey = Collation::singleton()->getSortkey( $params['startsortkeyprefix'] );
} elseif ( $params['starthexsortkey'] !== null ) {
+ if ( !$this->validateHexSortkey( $params['starthexsortkey'] ) ) {
+ $this->dieUsage( 'The starthexsortkey provided is not valid', 'bad_starthexsortkey' );
+ }
$startsortkey = pack( 'H*', $params['starthexsortkey'] );
} else {
$this->logFeatureUsage( 'list=categorymembers&cmstartsortkey' );
@@ -151,6 +164,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
if ( $params['endsortkeyprefix'] !== null ) {
$endsortkey = Collation::singleton()->getSortkey( $params['endsortkeyprefix'] );
} elseif ( $params['endhexsortkey'] !== null ) {
+ if ( !$this->validateHexSortkey( $params['endhexsortkey'] ) ) {
+ $this->dieUsage( 'The endhexsortkey provided is not valid', 'bad_endhexsortkey' );
+ }
$endsortkey = pack( 'H*', $params['endhexsortkey'] );
} else {
$this->logFeatureUsage( 'list=categorymembers&cmendsortkey' );
@@ -230,7 +246,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $vals = array();
+ $vals = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
if ( $fld_ids ) {
$vals['pageid'] = intval( $row->page_id );
}
@@ -269,13 +287,13 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal(
+ $result->addIndexedTagName(
array( 'query', $this->getModuleName() ), 'cm' );
}
}
public function getAllowedParams() {
- return array(
+ $ret = array(
'title' => array(
ApiBase::PARAM_TYPE => 'string',
),
@@ -307,7 +325,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
'file'
)
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'limit' => array(
ApiBase::PARAM_TYPE => 'limit',
ApiBase::PARAM_DFLT => 10,
@@ -351,67 +371,22 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
ApiBase::PARAM_DEPRECATED => true,
),
);
- }
-
- public function getParamDescription() {
- $p = $this->getModulePrefix();
- $desc = array(
- 'title' => "Which category to enumerate (required). Must include " .
- "'Category:' prefix. Cannot be used together with {$p}pageid",
- 'pageid' => "Page ID of the category to enumerate. Cannot be used together with {$p}title",
- 'prop' => array(
- 'What pieces of information to include',
- ' ids - Adds the page ID',
- ' title - Adds the title and namespace ID of the page',
- ' sortkey - Adds the sortkey used for sorting in the category (hexadecimal string)',
- ' sortkeyprefix - Adds the sortkey prefix used for sorting in the ' .
- 'category (human-readable part of the sortkey)',
- ' type - Adds the type that the page has been categorised as (page, subcat or file)',
- ' timestamp - Adds the timestamp of when the page was included',
- ),
- 'namespace' => 'Only include pages in these namespaces',
- 'type' => "What type of category members to include. Ignored when {$p}sort=timestamp is set",
- 'sort' => 'Property to sort by',
- 'dir' => 'In which direction to sort',
- 'start' => "Timestamp to start listing from. Can only be used with {$p}sort=timestamp",
- 'end' => "Timestamp to end listing at. Can only be used with {$p}sort=timestamp",
- 'starthexsortkey' => "Sortkey to start listing from, as returned by prop=sortkey. " .
- "Can only be used with {$p}sort=sortkey",
- 'endhexsortkey' => "Sortkey to end listing from, as returned by prop=sortkey. " .
- "Can only be used with {$p}sort=sortkey",
- 'startsortkeyprefix' => "Sortkey prefix to start listing from. Can " .
- "only be used with {$p}sort=sortkey. Overrides {$p}starthexsortkey",
- 'endsortkeyprefix' => "Sortkey prefix to end listing BEFORE (not at, " .
- "if this value occurs it will not be included!). Can only be used with " .
- "{$p}sort=sortkey. Overrides {$p}endhexsortkey",
- 'startsortkey' => "Use starthexsortkey instead",
- 'endsortkey' => "Use endhexsortkey instead",
- 'continue' => 'For large categories, give the value returned from previous query',
- 'limit' => 'The maximum number of pages to return.',
- );
if ( $this->getConfig()->get( 'MiserMode' ) ) {
- $desc['namespace'] = array(
- $desc['namespace'],
- "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
- 'returned before continuing; in extreme cases, zero results may be returned.',
- "Note that you can use {$p}type=subcat or {$p}type=file instead of {$p}namespace=14 or 6.",
+ $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+ 'api-help-param-limited-in-miser-mode',
);
}
- return $desc;
- }
-
- public function getDescription() {
- return 'List all pages in a given category.';
+ return $ret;
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=categorymembers&cmtitle=Category:Physics'
- => 'Get first 10 pages in [[Category:Physics]]',
- 'api.php?action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
- => 'Get page info about first 10 pages in [[Category:Physics]]',
+ 'action=query&list=categorymembers&cmtitle=Category:Physics'
+ => 'apihelp-query+categorymembers-example-simple',
+ 'action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
+ => 'apihelp-query+categorymembers-example-generator',
);
}
diff --git a/includes/api/ApiQueryContributors.php b/includes/api/ApiQueryContributors.php
index 55ea4702..7e76db25 100644
--- a/includes/api/ApiQueryContributors.php
+++ b/includes/api/ApiQueryContributors.php
@@ -236,43 +236,16 @@ class ApiQueryContributors extends ApiQueryBase {
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
- 'continue' => null,
- );
- }
-
- public function getParamDescription() {
- return array(
- 'group' => array(
- 'Limit users to given group name(s)',
- 'Does not include implicit or auto-promoted groups like *, user, or autoconfirmed'
- ),
- 'excludegroup' => array(
- 'Exclude users in given group name(s)',
- 'Does not include implicit or auto-promoted groups like *, user, or autoconfirmed'
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
- 'rights' => array(
- 'Limit users to those having given right(s)',
- 'Does not include rights granted by implicit or auto-promoted groups ' .
- 'like *, user, or autoconfirmed'
- ),
- 'excluderights' => array(
- 'Limit users to those not having given right(s)',
- 'Does not include rights granted by implicit or auto-promoted groups ' .
- 'like *, user, or autoconfirmed'
- ),
- 'limit' => 'How many contributors to return',
- 'continue' => 'When more results are available, use this to continue',
);
}
- public function getDescription() {
- return 'Get the list of logged-in contributors and ' .
- 'the count of anonymous contributors to a page.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=contributors&titles=Main_Page',
+ 'action=query&prop=contributors&titles=Main_Page'
+ => 'apihelp-query+contributors-example-simple',
);
}
diff --git a/includes/api/ApiQueryDeletedRevisions.php b/includes/api/ApiQueryDeletedRevisions.php
new file mode 100644
index 00000000..26ae2668
--- /dev/null
+++ b/includes/api/ApiQueryDeletedRevisions.php
@@ -0,0 +1,304 @@
+<?php
+/**
+ * Created on Oct 3, 2014
+ *
+ * Copyright © 2014 Brad Jorsch "bjorsch@wikimedia.org"
+ *
+ * Heavily based on ApiQueryDeletedrevs,
+ * Copyright © 2007 Roan Kattouw "<Firstname>.<Lastname>@gmail.com"
+ *
+ * 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
+ */
+
+/**
+ * Query module to enumerate deleted revisions for pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
+
+ public function __construct( ApiQuery $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'drv' );
+ }
+
+ protected function run( ApiPageSet $resultPageSet = null ) {
+ $user = $this->getUser();
+ // Before doing anything at all, let's check permissions
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $this->dieUsage(
+ 'You don\'t have permission to view deleted revision information',
+ 'permissiondenied'
+ );
+ }
+
+ $result = $this->getResult();
+ $pageSet = $this->getPageSet();
+ $pageMap = $pageSet->getGoodAndMissingTitlesByNamespace();
+ $pageCount = count( $pageSet->getGoodAndMissingTitles() );
+ $revCount = $pageSet->getRevisionCount();
+ if ( $revCount === 0 && $pageCount === 0 ) {
+ // Nothing to do
+ return;
+ }
+ if ( $revCount !== 0 && count( $pageSet->getDeletedRevisionIDs() ) === 0 ) {
+ // Nothing to do, revisions were supplied but none are deleted
+ return;
+ }
+
+ $params = $this->extractRequestParams( false );
+
+ $db = $this->getDB();
+
+ if ( !is_null( $params['user'] ) && !is_null( $params['excludeuser'] ) ) {
+ $this->dieUsage( 'user and excludeuser cannot be used together', 'badparams' );
+ }
+
+ $this->addTables( 'archive' );
+ if ( $resultPageSet === null ) {
+ $this->parseParameters( $params );
+ $this->addFields( Revision::selectArchiveFields() );
+ $this->addFields( array( 'ar_title', 'ar_namespace' ) );
+ } else {
+ $this->limit = $this->getParameter( 'limit' ) ?: 10;
+ $this->addFields( array( 'ar_title', 'ar_namespace', 'ar_timestamp', 'ar_rev_id', 'ar_id' ) );
+ }
+
+ if ( $this->fld_tags ) {
+ $this->addTables( 'tag_summary' );
+ $this->addJoinConds(
+ array( 'tag_summary' => array( 'LEFT JOIN', array( 'ar_rev_id=ts_rev_id' ) ) )
+ );
+ $this->addFields( 'ts_tags' );
+ }
+
+ if ( !is_null( $params['tag'] ) ) {
+ $this->addTables( 'change_tag' );
+ $this->addJoinConds(
+ array( 'change_tag' => array( 'INNER JOIN', array( 'ar_rev_id=ct_rev_id' ) ) )
+ );
+ $this->addWhereFld( 'ct_tag', $params['tag'] );
+ }
+
+ if ( $this->fetchContent ) {
+ // Modern MediaWiki has the content for deleted revs in the 'text'
+ // table using fields old_text and old_flags. But revisions deleted
+ // pre-1.5 store the content in the 'archive' table directly using
+ // fields ar_text and ar_flags, and no corresponding 'text' row. So
+ // we have to LEFT JOIN and fetch all four fields.
+ $this->addTables( 'text' );
+ $this->addJoinConds(
+ array( 'text' => array( 'LEFT JOIN', array( 'ar_text_id=old_id' ) ) )
+ );
+ $this->addFields( array( 'ar_text', 'ar_flags', 'old_text', 'old_flags' ) );
+
+ // This also means stricter restrictions
+ if ( !$user->isAllowedAny( 'undelete', 'deletedtext' ) ) {
+ $this->dieUsage(
+ 'You don\'t have permission to view deleted revision content',
+ 'permissiondenied'
+ );
+ }
+ }
+
+ $dir = $params['dir'];
+
+ if ( $revCount !== 0 ) {
+ $this->addWhere( array(
+ 'ar_rev_id' => array_keys( $pageSet->getDeletedRevisionIDs() )
+ ) );
+ } else {
+ // We need a custom WHERE clause that matches all titles.
+ $lb = new LinkBatch( $pageSet->getGoodAndMissingTitles() );
+ $where = $lb->constructSet( 'ar', $db );
+ $this->addWhere( $where );
+ }
+
+ if ( !is_null( $params['user'] ) ) {
+ $this->addWhereFld( 'ar_user_text', $params['user'] );
+ } elseif ( !is_null( $params['excludeuser'] ) ) {
+ $this->addWhere( 'ar_user_text != ' .
+ $db->addQuotes( $params['excludeuser'] ) );
+ }
+
+ if ( !is_null( $params['user'] ) || !is_null( $params['excludeuser'] ) ) {
+ // Paranoia: avoid brute force searches (bug 17342)
+ // (shouldn't be able to get here without 'deletedhistory', but
+ // check it again just in case)
+ if ( !$user->isAllowed( 'deletedhistory' ) ) {
+ $bitmask = Revision::DELETED_USER;
+ } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+ $bitmask = Revision::DELETED_USER | Revision::DELETED_RESTRICTED;
+ } else {
+ $bitmask = 0;
+ }
+ if ( $bitmask ) {
+ $this->addWhere( $db->bitAnd( 'ar_deleted', $bitmask ) . " != $bitmask" );
+ }
+ }
+
+ if ( !is_null( $params['continue'] ) ) {
+ $cont = explode( '|', $params['continue'] );
+ $op = ( $dir == 'newer' ? '>' : '<' );
+ if ( $revCount !== 0 ) {
+ $this->dieContinueUsageIf( count( $cont ) != 2 );
+ $rev = intval( $cont[0] );
+ $this->dieContinueUsageIf( strval( $rev ) !== $cont[0] );
+ $ar_id = (int)$cont[1];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[1] );
+ $this->addWhere( "ar_rev_id $op $rev OR " .
+ "(ar_rev_id = $rev AND " .
+ "ar_id $op= $ar_id)" );
+ } else {
+ $this->dieContinueUsageIf( count( $cont ) != 4 );
+ $ns = intval( $cont[0] );
+ $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+ $title = $db->addQuotes( $cont[1] );
+ $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
+ $ar_id = (int)$cont[3];
+ $this->dieContinueUsageIf( strval( $ar_id ) !== $cont[3] );
+ $this->addWhere( "ar_namespace $op $ns OR " .
+ "(ar_namespace = $ns AND " .
+ "(ar_title $op $title OR " .
+ "(ar_title = $title AND " .
+ "(ar_timestamp $op $ts OR " .
+ "(ar_timestamp = $ts AND " .
+ "ar_id $op= $ar_id)))))" );
+ }
+ }
+
+ $this->addOption( 'LIMIT', $this->limit + 1 );
+
+ if ( $revCount !== 0 ) {
+ // Sort by ar_rev_id when querying by ar_rev_id
+ $this->addWhereRange( 'ar_rev_id', $dir, null, null );
+ } else {
+ // Sort by ns and title in the same order as timestamp for efficiency
+ // But only when not already unique in the query
+ if ( count( $pageMap ) > 1 ) {
+ $this->addWhereRange( 'ar_namespace', $dir, null, null );
+ }
+ $oneTitle = key( reset( $pageMap ) );
+ foreach ( $pageMap as $pages ) {
+ if ( count( $pages ) > 1 || key( $pages ) !== $oneTitle ) {
+ $this->addWhereRange( 'ar_title', $dir, null, null );
+ break;
+ }
+ }
+ $this->addTimestampWhereRange( 'ar_timestamp', $dir, $params['start'], $params['end'] );
+ }
+ // Include in ORDER BY for uniqueness
+ $this->addWhereRange( 'ar_id', $dir, null, null );
+
+ $res = $this->select( __METHOD__ );
+ $count = 0;
+ $generated = array();
+ foreach ( $res as $row ) {
+ if ( ++$count > $this->limit ) {
+ // We've had enough
+ $this->setContinueEnumParameter( 'continue',
+ $revCount
+ ? "$row->ar_rev_id|$row->ar_id"
+ : "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ break;
+ }
+
+ if ( $resultPageSet !== null ) {
+ $generated[] = $row->ar_rev_id;
+ } else {
+ if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+ // Was it converted?
+ $title = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+ $converted = $pageSet->getConvertedTitles();
+ if ( $title && isset( $converted[$title->getPrefixedText()] ) ) {
+ $title = Title::newFromText( $converted[$title->getPrefixedText()] );
+ if ( $title && isset( $pageMap[$title->getNamespace()][$title->getDBkey()] ) ) {
+ $pageMap[$row->ar_namespace][$row->ar_title] =
+ $pageMap[$title->getNamespace()][$title->getDBkey()];
+ }
+ }
+ }
+ if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
+ ApiBase::dieDebug( "Found row in archive (ar_id={$row->ar_id}) that didn't " .
+ "get processed by ApiPageSet" );
+ }
+
+ $fit = $this->addPageSubItem(
+ $pageMap[$row->ar_namespace][$row->ar_title],
+ $this->extractRevisionInfo( Revision::newFromArchiveRow( $row ), $row ),
+ 'rev'
+ );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue',
+ $revCount
+ ? "$row->ar_rev_id|$row->ar_id"
+ : "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
+ );
+ break;
+ }
+ }
+ }
+
+ if ( $resultPageSet !== null ) {
+ $resultPageSet->populateFromRevisionIDs( $generated );
+ }
+ }
+
+ public function getAllowedParams() {
+ return parent::getAllowedParams() + array(
+ 'start' => array(
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ),
+ 'end' => array(
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ),
+ 'dir' => array(
+ ApiBase::PARAM_TYPE => array(
+ 'newer',
+ 'older'
+ ),
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ),
+ 'tag' => null,
+ 'user' => array(
+ ApiBase::PARAM_TYPE => 'user'
+ ),
+ 'excludeuser' => array(
+ ApiBase::PARAM_TYPE => 'user'
+ ),
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
+ );
+ }
+
+ protected function getExamplesMessages() {
+ return array(
+ 'action=query&prop=deletedrevisions&titles=Main%20Page|Talk:Main%20Page&' .
+ 'drvprop=user|comment|content'
+ => 'apihelp-query+deletedrevisions-example-titles',
+ 'action=query&prop=deletedrevisions&revids=123456'
+ => 'apihelp-query+deletedrevisions-example-revids',
+ );
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/API:Properties#deletedrevisions_.2F_drv';
+ }
+}
diff --git a/includes/api/ApiQueryDeletedrevs.php b/includes/api/ApiQueryDeletedrevs.php
index 9042696b..72a331f1 100644
--- a/includes/api/ApiQueryDeletedrevs.php
+++ b/includes/api/ApiQueryDeletedrevs.php
@@ -28,6 +28,7 @@
* Query module to enumerate all deleted revisions.
*
* @ingroup API
+ * @deprecated since 1.25
*/
class ApiQueryDeletedrevs extends ApiQueryBase {
@@ -45,6 +46,12 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
);
}
+ $this->setWarning(
+ 'list=deletedrevs has been deprecated. Please use prop=deletedrevisions or ' .
+ 'list=alldeletedrevisions instead.'
+ );
+ $this->logFeatureUsage( 'action=query&list=deletedrevs' );
+
$db = $this->getDB();
$params = $this->extractRequestParams( false );
$prop = array_flip( $params['prop'] );
@@ -68,8 +75,9 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
);
}
- // If we're in JSON callback mode, no tokens can be obtained
- if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
$fld_token = false;
}
@@ -169,7 +177,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
if ( $limit == 'max' ) {
$limit = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
- $this->getResult()->setParsedLimit( $this->getModuleName(), $limit );
+ $this->getResult()->addParsedLimit( $this->getModuleName(), $limit );
}
$this->validateLimit( 'limit', $limit, 1, $userMax, $botMax );
@@ -312,7 +320,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
}
if ( $fld_user || $fld_userid ) {
if ( $row->ar_deleted & Revision::DELETED_USER ) {
- $rev['userhidden'] = '';
+ $rev['userhidden'] = true;
$anyHidden = true;
}
if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_USER, $user ) ) {
@@ -327,7 +335,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
if ( $fld_comment || $fld_parsedcomment ) {
if ( $row->ar_deleted & Revision::DELETED_COMMENT ) {
- $rev['commenthidden'] = '';
+ $rev['commenthidden'] = true;
$anyHidden = true;
}
if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_COMMENT, $user ) ) {
@@ -341,15 +349,15 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
}
}
- if ( $fld_minor && $row->ar_minor_edit == 1 ) {
- $rev['minor'] = '';
+ if ( $fld_minor ) {
+ $rev['minor'] = $row->ar_minor_edit == 1;
}
if ( $fld_len ) {
$rev['len'] = $row->ar_len;
}
if ( $fld_sha1 ) {
if ( $row->ar_deleted & Revision::DELETED_TEXT ) {
- $rev['sha1hidden'] = '';
+ $rev['sha1hidden'] = true;
$anyHidden = true;
}
if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_TEXT, $user ) ) {
@@ -362,15 +370,15 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
}
if ( $fld_content ) {
if ( $row->ar_deleted & Revision::DELETED_TEXT ) {
- $rev['texthidden'] = '';
+ $rev['texthidden'] = true;
$anyHidden = true;
}
if ( Revision::userCanBitfield( $row->ar_deleted, Revision::DELETED_TEXT, $user ) ) {
if ( isset( $row->ar_text ) && !$row->ar_text_id ) {
// Pre-1.5 ar_text row (if condition from Revision::newFromArchiveRow)
- ApiResult::setContent( $rev, Revision::getRevisionText( $row, 'ar_' ) );
+ ApiResult::setContentValue( $rev, 'text', Revision::getRevisionText( $row, 'ar_' ) );
} else {
- ApiResult::setContent( $rev, Revision::getRevisionText( $row ) );
+ ApiResult::setContentValue( $rev, 'text', Revision::getRevisionText( $row ) );
}
}
}
@@ -378,7 +386,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
if ( $fld_tags ) {
if ( $row->ts_tags ) {
$tags = explode( ',', $row->ts_tags );
- $this->getResult()->setIndexedTagName( $tags, 'tag' );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
$rev['tags'] = $tags;
} else {
$rev['tags'] = array();
@@ -386,14 +394,14 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
}
if ( $anyHidden && ( $row->ar_deleted & Revision::DELETED_RESTRICTED ) ) {
- $rev['suppressed'] = '';
+ $rev['suppressed'] = true;
}
if ( !isset( $pageMap[$row->ar_namespace][$row->ar_title] ) ) {
$pageID = $newPageID++;
$pageMap[$row->ar_namespace][$row->ar_title] = $pageID;
$a['revisions'] = array( $rev );
- $result->setIndexedTagName( $a['revisions'], 'rev' );
+ ApiResult::setIndexedTagName( $a['revisions'], 'rev' );
$title = Title::makeTitle( $row->ar_namespace, $row->ar_title );
ApiQueryBase::addTitleInfo( $a, $title );
if ( $fld_token ) {
@@ -417,46 +425,56 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
break;
}
}
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'page' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'page' );
+ }
+
+ public function isDeprecated() {
+ return true;
}
public function getAllowedParams() {
return array(
'start' => array(
- ApiBase::PARAM_TYPE => 'timestamp'
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 2 ) ),
),
'end' => array(
ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 2 ) ),
),
'dir' => array(
ApiBase::PARAM_TYPE => array(
'newer',
'older'
),
- ApiBase::PARAM_DFLT => 'older'
+ ApiBase::PARAM_DFLT => 'older',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 3 ) ),
),
- 'from' => null,
- 'to' => null,
- 'prefix' => null,
- 'continue' => null,
- 'unique' => false,
- 'tag' => null,
- 'user' => array(
- ApiBase::PARAM_TYPE => 'user'
+ 'from' => array(
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
),
- 'excludeuser' => array(
- ApiBase::PARAM_TYPE => 'user'
+ 'to' => array(
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
+ ),
+ 'prefix' => array(
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
+ ),
+ 'unique' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
),
'namespace' => array(
ApiBase::PARAM_TYPE => 'namespace',
ApiBase::PARAM_DFLT => NS_MAIN,
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
),
- 'limit' => array(
- ApiBase::PARAM_DFLT => 10,
- ApiBase::PARAM_TYPE => 'limit',
- ApiBase::PARAM_MIN => 1,
- ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
- ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ 'tag' => null,
+ 'user' => array(
+ ApiBase::PARAM_TYPE => 'user'
+ ),
+ 'excludeuser' => array(
+ ApiBase::PARAM_TYPE => 'user'
),
'prop' => array(
ApiBase::PARAM_DFLT => 'user|comment',
@@ -476,68 +494,30 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
),
ApiBase::PARAM_ISMULTI => true
),
- );
- }
-
- public function getParamDescription() {
- return array(
- 'start' => 'The timestamp to start enumerating from (1, 2)',
- 'end' => 'The timestamp to stop enumerating at (1, 2)',
- 'dir' => $this->getDirectionDescription( $this->getModulePrefix(), ' (1, 3)' ),
- 'from' => 'Start listing at this title (3)',
- 'to' => 'Stop listing at this title (3)',
- 'prefix' => 'Search for all page titles that begin with this value (3)',
- 'limit' => 'The maximum amount of revisions to list',
- 'prop' => array(
- 'Which properties to get',
- ' revid - Adds the revision ID of the deleted revision',
- ' parentid - Adds the revision ID of the previous revision to the page',
- ' user - Adds the user who made the revision',
- ' userid - Adds the user ID whom made the revision',
- ' comment - Adds the comment of the revision',
- ' parsedcomment - Adds the parsed comment of the revision',
- ' minor - Tags if the revision is minor',
- ' len - Adds the length (bytes) of the revision',
- ' sha1 - Adds the SHA-1 (base 16) of the revision',
- ' content - Adds the content of the revision',
- ' token - DEPRECATED! Gives the edit token',
- ' tags - Tags for the revision',
+ 'limit' => array(
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ),
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
- 'namespace' => 'Only list pages in this namespace (3)',
- 'user' => 'Only list revisions by this user',
- 'excludeuser' => 'Don\'t list revisions by this user',
- 'continue' => 'When more results are available, use this to continue',
- 'unique' => 'List only one revision for each page (3)',
- 'tag' => 'Only list revisions tagged with this tag',
- );
- }
-
- public function getDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'List deleted revisions.',
- 'Operates in three modes:',
- ' 1) List deleted revisions for the given title(s), sorted by timestamp.',
- ' 2) List deleted contributions for the given user, sorted by timestamp (no titles specified).',
- ' 3) List all deleted revisions in the given namespace, sorted by title and timestamp',
- " (no titles specified, {$p}user not set).",
- 'Certain parameters only apply to some modes and are ignored in others.',
- 'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3.',
);
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
+ 'action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
'drprop=user|comment|content'
- => 'List the last deleted revisions of Main Page and Talk:Main Page, with content (mode 1)',
- 'api.php?action=query&list=deletedrevs&druser=Bob&drlimit=50'
- => 'List the last 50 deleted contributions by Bob (mode 2)',
- 'api.php?action=query&list=deletedrevs&drdir=newer&drlimit=50'
- => 'List the first 50 deleted revisions in the main namespace (mode 3)',
- 'api.php?action=query&list=deletedrevs&drdir=newer&drlimit=50&drnamespace=1&drunique='
- => 'List the first 50 deleted pages in the Talk namespace (mode 3):',
+ => 'apihelp-query+deletedrevs-example-mode1',
+ 'action=query&list=deletedrevs&druser=Bob&drlimit=50'
+ => 'apihelp-query+deletedrevs-example-mode2',
+ 'action=query&list=deletedrevs&drdir=newer&drlimit=50'
+ => 'apihelp-query+deletedrevs-example-mode3-main',
+ 'action=query&list=deletedrevs&drdir=newer&drlimit=50&drnamespace=1&drunique='
+ => 'apihelp-query+deletedrevs-example-mode3-talk',
);
}
diff --git a/includes/api/ApiQueryDisabled.php b/includes/api/ApiQueryDisabled.php
index cf0d841e..a6509d41 100644
--- a/includes/api/ApiQueryDisabled.php
+++ b/includes/api/ApiQueryDisabled.php
@@ -44,17 +44,7 @@ class ApiQueryDisabled extends ApiQueryBase {
return array();
}
- public function getParamDescription() {
- return array();
- }
-
- public function getDescription() {
- return array(
- 'This module has been disabled.'
- );
- }
-
- public function getExamples() {
- return array();
+ public function getDescriptionMessage() {
+ return 'apihelp-query+disabled-description';
}
}
diff --git a/includes/api/ApiQueryDuplicateFiles.php b/includes/api/ApiQueryDuplicateFiles.php
index 6d836cd5..4d0bcfed 100644
--- a/includes/api/ApiQueryDuplicateFiles.php
+++ b/includes/api/ApiQueryDuplicateFiles.php
@@ -52,7 +52,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
*/
private function run( $resultPageSet = null ) {
$params = $this->extractRequestParams();
- $namespaces = $this->getPageSet()->getAllTitlesByNamespace();
+ $namespaces = $this->getPageSet()->getGoodAndMissingTitlesByNamespace();
if ( empty( $namespaces[NS_FILE] ) ) {
return;
}
@@ -137,11 +137,9 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
$r = array(
'name' => $dupName,
'user' => $dupFile->getUser( 'text' ),
- 'timestamp' => wfTimestamp( TS_ISO_8601, $dupFile->getTimestamp() )
+ 'timestamp' => wfTimestamp( TS_ISO_8601, $dupFile->getTimestamp() ),
+ 'shared' => !$dupFile->isLocal(),
);
- if ( !$dupFile->isLocal() ) {
- $r['shared'] = '';
- }
$fit = $this->addPageSubItem( $pageId, $r );
if ( !$fit ) {
$this->setContinueEnumParameter( 'continue', $image . '|' . $dupName );
@@ -167,7 +165,9 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'dir' => array(
ApiBase::PARAM_DFLT => 'ascending',
ApiBase::PARAM_TYPE => array(
@@ -179,23 +179,12 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- return array(
- 'limit' => 'How many duplicate files to return',
- 'continue' => 'When more results are available, use this to continue',
- 'dir' => 'The direction in which to list',
- 'localonly' => 'Look only for files in the local repository',
- );
- }
-
- public function getDescription() {
- return 'List all files that are duplicates of the given file(s) based on hash values.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles',
- 'api.php?action=query&generator=allimages&prop=duplicatefiles',
+ 'action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles'
+ => 'apihelp-query+duplicatefiles-example-simple',
+ 'action=query&generator=allimages&prop=duplicatefiles'
+ => 'apihelp-query+duplicatefiles-example-generated',
);
}
diff --git a/includes/api/ApiQueryExtLinksUsage.php b/includes/api/ApiQueryExtLinksUsage.php
index faabb920..3f65a19e 100644
--- a/includes/api/ApiQueryExtLinksUsage.php
+++ b/includes/api/ApiQueryExtLinksUsage.php
@@ -112,7 +112,9 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $vals = array();
+ $vals = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
if ( $fld_ids ) {
$vals['pageid'] = intval( $row->page_id );
}
@@ -139,13 +141,13 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ),
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ),
$this->getModulePrefix() );
}
}
public function getAllowedParams() {
- return array(
+ $ret = array(
'prop' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_DFLT => 'ids|title|url',
@@ -156,7 +158,8 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
)
),
'offset' => array(
- ApiBase::PARAM_TYPE => 'integer'
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
'protocol' => array(
ApiBase::PARAM_TYPE => self::prepareProtocols(),
@@ -176,6 +179,14 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
),
'expandurl' => false,
);
+
+ if ( $this->getConfig()->get( 'MiserMode' ) ) {
+ $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+ 'api-help-param-limited-in-miser-mode',
+ );
+ }
+
+ return $ret;
}
public static function prepareProtocols() {
@@ -207,45 +218,10 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
}
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
- $desc = array(
- 'prop' => array(
- 'What pieces of information to include',
- ' ids - Adds the ID of page',
- ' title - Adds the title and namespace ID of the page',
- ' url - Adds the URL used in the page',
- ),
- 'offset' => 'Used for paging. Use the value returned for "continue"',
- 'protocol' => array(
- "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
- "Leave both this and {$p}query empty to list all external links"
- ),
- 'query' => 'Search string without protocol. See [[Special:LinkSearch]]. ' .
- 'Leave empty to list all external links',
- 'namespace' => 'The page namespace(s) to enumerate.',
- 'limit' => 'How many pages to return.',
- 'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
- );
-
- if ( $this->getConfig()->get( 'MiserMode' ) ) {
- $desc['namespace'] = array(
- $desc['namespace'],
- "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
- 'returned before continuing; in extreme cases, zero results may be returned',
- );
- }
-
- return $desc;
- }
-
- public function getDescription() {
- return 'Enumerate pages that contain a given URL.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=exturlusage&euquery=www.mediawiki.org'
+ 'action=query&list=exturlusage&euquery=www.mediawiki.org'
+ => 'apihelp-query+exturlusage-example-simple',
);
}
diff --git a/includes/api/ApiQueryExternalLinks.php b/includes/api/ApiQueryExternalLinks.php
index 95666354..ec3d9d27 100644
--- a/includes/api/ApiQueryExternalLinks.php
+++ b/includes/api/ApiQueryExternalLinks.php
@@ -91,7 +91,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
if ( $params['expandurl'] ) {
$to = wfExpandUrl( $to, PROTO_CANONICAL );
}
- ApiResult::setContent( $entry, $to );
+ ApiResult::setContentValue( $entry, 'url', $to );
$fit = $this->addPageSubItem( $row->el_from, $entry );
if ( !$fit ) {
$this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
@@ -114,7 +114,8 @@ class ApiQueryExternalLinks extends ApiQueryBase {
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
'offset' => array(
- ApiBase::PARAM_TYPE => 'integer'
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
'protocol' => array(
ApiBase::PARAM_TYPE => ApiQueryExtLinksUsage::prepareProtocols(),
@@ -125,30 +126,10 @@ class ApiQueryExternalLinks extends ApiQueryBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'limit' => 'How many links to return',
- 'offset' => 'When more results are available, use this to continue',
- 'protocol' => array(
- "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
- "Leave both this and {$p}query empty to list all external links"
- ),
- 'query' => 'Search string without protocol. Useful for checking ' .
- 'whether a certain page contains a certain external url',
- 'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
- );
- }
-
- public function getDescription() {
- return 'Returns all external URLs (not interwikis) from the given page(s).';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=extlinks&titles=Main%20Page'
- => 'Get a list of external links on the [[Main Page]]',
+ 'action=query&prop=extlinks&titles=Main%20Page'
+ => 'apihelp-query+extlinks-example-simple',
);
}
diff --git a/includes/api/ApiQueryFileRepoInfo.php b/includes/api/ApiQueryFileRepoInfo.php
index d1600efe..9ad7e27e 100644
--- a/includes/api/ApiQueryFileRepoInfo.php
+++ b/includes/api/ApiQueryFileRepoInfo.php
@@ -55,7 +55,9 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
$repos[] = array_intersect_key( $repoGroup->getLocalRepo()->getInfo(), $props );
$result = $this->getResult();
- $result->setIndexedTagName( $repos, 'repo' );
+ ApiResult::setIndexedTagName( $repos, 'repo' );
+ ApiResult::setArrayTypeRecursive( $repos, 'assoc' );
+ ApiResult::setArrayType( $repos, 'array' );
$result->addValue( array( 'query' ), 'repos', $repos );
}
@@ -89,27 +91,10 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
) ) );
}
- public function getParamDescription() {
+ protected function getExamplesMessages() {
return array(
- 'prop' => array(
- 'Which repository properties to get (there may be more available on some wikis):',
- ' apiurl - URL to the repository API - helpful for getting image info from the host.',
- ' name - The key of the repository - used in e.g. ' .
- '$wgForeignFileRepos and imageinfo return values.',
- ' displayname - The human-readable name of the repository wiki.',
- ' rooturl - Root URL for image paths.',
- ' local - Whether that repository is the local one or not.',
- ),
- );
- }
-
- public function getDescription() {
- return 'Return meta information about image repositories configured on the wiki.';
- }
-
- public function getExamples() {
- return array(
- 'api.php?action=query&meta=filerepoinfo&friprop=apiurl|name|displayname',
+ 'action=query&meta=filerepoinfo&friprop=apiurl|name|displayname'
+ => 'apihelp-query+filerepoinfo-example-simple',
);
}
}
diff --git a/includes/api/ApiQueryFilearchive.php b/includes/api/ApiQueryFilearchive.php
index f047d8d4..4d357a7f 100644
--- a/includes/api/ApiQueryFilearchive.php
+++ b/includes/api/ApiQueryFilearchive.php
@@ -193,7 +193,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
$pageCount = ArchivedFile::newFromRow( $row )->pageCount();
if ( $pageCount !== false ) {
- $vals['pagecount'] = $pageCount;
+ $file['pagecount'] = $pageCount;
}
$file['height'] = $row->fa_height;
@@ -218,17 +218,17 @@ class ApiQueryFilearchive extends ApiQueryBase {
}
if ( $row->fa_deleted & File::DELETED_FILE ) {
- $file['filehidden'] = '';
+ $file['filehidden'] = true;
}
if ( $row->fa_deleted & File::DELETED_COMMENT ) {
- $file['commenthidden'] = '';
+ $file['commenthidden'] = true;
}
if ( $row->fa_deleted & File::DELETED_USER ) {
- $file['userhidden'] = '';
+ $file['userhidden'] = true;
}
if ( $row->fa_deleted & File::DELETED_RESTRICTED ) {
// This file is deleted for normal admins
- $file['suppressed'] = '';
+ $file['suppressed'] = true;
}
$fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $file );
@@ -240,22 +240,14 @@ class ApiQueryFilearchive extends ApiQueryBase {
}
}
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'fa' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'fa' );
}
public function getAllowedParams() {
return array(
'from' => null,
- 'continue' => null,
'to' => null,
'prefix' => null,
- 'limit' => array(
- ApiBase::PARAM_DFLT => 10,
- ApiBase::PARAM_TYPE => 'limit',
- ApiBase::PARAM_MIN => 1,
- ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
- ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
- ),
'dir' => array(
ApiBase::PARAM_DFLT => 'ascending',
ApiBase::PARAM_TYPE => array(
@@ -283,48 +275,23 @@ class ApiQueryFilearchive extends ApiQueryBase {
'archivename',
),
),
- );
- }
-
- public function getParamDescription() {
- return array(
- 'from' => 'The image title to start enumerating from',
- 'continue' => 'When more results are available, use this to continue',
- 'to' => 'The image title to stop enumerating at',
- 'prefix' => 'Search for all image titles that begin with this value',
- 'dir' => 'The direction in which to list',
- 'limit' => 'How many images to return in total',
- 'sha1' => "SHA1 hash of image. Overrides {$this->getModulePrefix()}sha1base36",
- 'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
- 'prop' => array(
- 'What image information to get:',
- ' sha1 - Adds SHA-1 hash for the image',
- ' timestamp - Adds timestamp for the uploaded version',
- ' user - Adds user who uploaded the image version',
- ' size - Adds the size of the image in bytes and the height, ' .
- 'width and page count (if applicable)',
- ' dimensions - Alias for size',
- ' description - Adds description the image version',
- ' parseddescription - Parse the description on the version',
- ' mime - Adds MIME of the image',
- ' mediatype - Adds the media type of the image',
- ' metadata - Lists Exif metadata for the version of the image',
- ' bitdepth - Adds the bit depth of the version',
- ' archivename - Adds the file name of the archive version for non-latest versions'
+ 'limit' => array(
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ),
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
);
}
- public function getDescription() {
- return 'Enumerate all deleted files sequentially.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=filearchive' => array(
- 'Simple Use',
- 'Show a list of all deleted files',
- ),
+ 'action=query&list=filearchive'
+ => 'apihelp-query+filearchive-example-simple',
);
}
diff --git a/includes/api/ApiQueryIWBacklinks.php b/includes/api/ApiQueryIWBacklinks.php
index b5aa45bf..618387d2 100644
--- a/includes/api/ApiQueryIWBacklinks.php
+++ b/includes/api/ApiQueryIWBacklinks.php
@@ -132,7 +132,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
ApiQueryBase::addTitleInfo( $entry, $title );
if ( $row->page_is_redirect ) {
- $entry['redirect'] = '';
+ $entry['redirect'] = true;
}
if ( $iwprefix ) {
@@ -155,7 +155,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'iw' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'iw' );
} else {
$resultPageSet->populateFromTitles( $pages );
}
@@ -169,7 +169,9 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
return array(
'prefix' => null,
'title' => null,
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'limit' => array(
ApiBase::PARAM_DFLT => 10,
ApiBase::PARAM_TYPE => 'limit',
@@ -195,33 +197,12 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- return array(
- 'prefix' => 'Prefix for the interwiki',
- 'title' => "Interwiki link to search for. Must be used with {$this->getModulePrefix()}prefix",
- 'continue' => 'When more results are available, use this to continue',
- 'prop' => array(
- 'Which properties to get',
- ' iwprefix - Adds the prefix of the interwiki',
- ' iwtitle - Adds the title of the interwiki',
- ),
- 'limit' => 'How many total pages to return',
- 'dir' => 'The direction in which to list',
- );
- }
-
- public function getDescription() {
- return array( 'Find all pages that link to the given interwiki link.',
- 'Can be used to find all links with a prefix, or',
- 'all links to a title (with a given prefix).',
- 'Using neither parameter is effectively "All IW Links".',
- );
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks',
- 'api.php?action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
+ 'action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks'
+ => 'apihelp-query+iwbacklinks-example-simple',
+ 'action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
+ => 'apihelp-query+iwbacklinks-example-generator',
);
}
diff --git a/includes/api/ApiQueryIWLinks.php b/includes/api/ApiQueryIWLinks.php
index a185ee24..aca3f700 100644
--- a/includes/api/ApiQueryIWLinks.php
+++ b/includes/api/ApiQueryIWLinks.php
@@ -129,7 +129,7 @@ class ApiQueryIWLinks extends ApiQueryBase {
}
}
- ApiResult::setContent( $entry, $row->iwl_title );
+ ApiResult::setContentValue( $entry, 'title', $row->iwl_title );
$fit = $this->addPageSubItem( $row->iwl_from, $entry );
if ( !$fit ) {
$this->setContinueEnumParameter(
@@ -147,24 +147,12 @@ class ApiQueryIWLinks extends ApiQueryBase {
public function getAllowedParams() {
return array(
- 'url' => array(
- ApiBase::PARAM_DFLT => false,
- ApiBase::PARAM_DEPRECATED => true,
- ),
'prop' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => array(
'url',
)
),
- 'limit' => array(
- ApiBase::PARAM_DFLT => 10,
- ApiBase::PARAM_TYPE => 'limit',
- ApiBase::PARAM_MIN => 1,
- ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
- ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
- ),
- 'continue' => null,
'prefix' => null,
'title' => null,
'dir' => array(
@@ -174,32 +162,27 @@ class ApiQueryIWLinks extends ApiQueryBase {
'descending'
)
),
- );
- }
-
- public function getParamDescription() {
- return array(
- 'prop' => array(
- 'Which additional properties to get for each interlanguage link',
- ' url - Adds the full URL',
+ 'limit' => array(
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ),
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
+ 'url' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
),
- 'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
- 'limit' => 'How many interwiki links to return',
- 'continue' => 'When more results are available, use this to continue',
- 'prefix' => 'Prefix for the interwiki',
- 'title' => "Interwiki link to search for. Must be used with {$this->getModulePrefix()}prefix",
- 'dir' => 'The direction in which to list',
);
}
- public function getDescription() {
- return 'Returns all interwiki links from the given page(s).';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=iwlinks&titles=Main%20Page'
- => 'Get interwiki links from the [[Main Page]]',
+ 'action=query&prop=iwlinks&titles=Main%20Page'
+ => 'apihelp-query+iwlinks-example-simple',
);
}
diff --git a/includes/api/ApiQueryImageInfo.php b/includes/api/ApiQueryImageInfo.php
index 945374b1..94b4bbdb 100644
--- a/includes/api/ApiQueryImageInfo.php
+++ b/includes/api/ApiQueryImageInfo.php
@@ -58,7 +58,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
'revdelUser' => $this->getUser(),
);
- $pageIds = $this->getPageSet()->getAllTitlesByNamespace();
+ $pageIds = $this->getPageSet()->getGoodAndMissingTitlesByNamespace();
if ( !empty( $pageIds[NS_FILE] ) ) {
$titles = array_keys( $pageIds[NS_FILE] );
asort( $titles ); // Ensure the order is always the same
@@ -373,7 +373,9 @@ class ApiQueryImageInfo extends ApiQueryBase {
);
}
$version = $opts['version'];
- $vals = array();
+ $vals = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
// Timestamp is shown even if the file is revdelete'd in interface
// so do same here.
if ( isset( $prop['timestamp'] ) ) {
@@ -397,7 +399,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
if ( $user || $userid ) {
if ( $file->isDeleted( File::DELETED_USER ) ) {
- $vals['userhidden'] = '';
+ $vals['userhidden'] = true;
$anyHidden = true;
}
if ( $canShowField( File::DELETED_USER ) ) {
@@ -408,7 +410,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
$vals['userid'] = $file->getUser( 'id' );
}
if ( !$file->getUser( 'id' ) ) {
- $vals['anon'] = '';
+ $vals['anon'] = true;
}
}
}
@@ -438,7 +440,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
if ( $pcomment || $comment ) {
if ( $file->isDeleted( File::DELETED_COMMENT ) ) {
- $vals['commenthidden'] = '';
+ $vals['commenthidden'] = true;
$anyHidden = true;
}
if ( $canShowField( File::DELETED_COMMENT ) ) {
@@ -469,7 +471,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
}
if ( $file->isDeleted( File::DELETED_FILE ) ) {
- $vals['filehidden'] = '';
+ $vals['filehidden'] = true;
$anyHidden = true;
}
@@ -599,7 +601,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
$retval[] = $r;
}
}
- $result->setIndexedTagName( $retval, 'metadata' );
+ ApiResult::setIndexedTagName( $retval, 'metadata' );
return $retval;
}
@@ -632,7 +634,8 @@ class ApiQueryImageInfo extends ApiQueryBase {
'prop' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_DFLT => 'timestamp|user',
- ApiBase::PARAM_TYPE => self::getPropertyNames()
+ ApiBase::PARAM_TYPE => self::getPropertyNames(),
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => self::getPropertyMessages(),
),
'limit' => array(
ApiBase::PARAM_TYPE => 'limit',
@@ -649,7 +652,11 @@ class ApiQueryImageInfo extends ApiQueryBase {
),
'urlwidth' => array(
ApiBase::PARAM_TYPE => 'integer',
- ApiBase::PARAM_DFLT => -1
+ ApiBase::PARAM_DFLT => -1,
+ ApiBase::PARAM_HELP_MSG => array(
+ 'apihelp-query+imageinfo-param-urlwidth',
+ ApiQueryImageInfo::TRANSFORM_LIMIT,
+ ),
),
'urlheight' => array(
ApiBase::PARAM_TYPE => 'integer',
@@ -675,7 +682,9 @@ class ApiQueryImageInfo extends ApiQueryBase {
ApiBase::PARAM_DFLT => '',
ApiBase::PARAM_TYPE => 'string',
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'localonly' => false,
);
}
@@ -684,16 +693,49 @@ class ApiQueryImageInfo extends ApiQueryBase {
* Returns all possible parameters to iiprop
*
* @param array $filter List of properties to filter out
- *
* @return array
*/
public static function getPropertyNames( $filter = array() ) {
- return array_diff( array_keys( self::getProperties() ), $filter );
+ return array_keys( self::getPropertyMessages( $filter ) );
+ }
+
+ /**
+ * Returns messages for all possible parameters to iiprop
+ *
+ * @param array $filter List of properties to filter out
+ * @return array
+ */
+ public static function getPropertyMessages( $filter = array() ) {
+ return array_diff_key(
+ array(
+ 'timestamp' => 'apihelp-query+imageinfo-paramvalue-prop-timestamp',
+ 'user' => 'apihelp-query+imageinfo-paramvalue-prop-user',
+ 'userid' => 'apihelp-query+imageinfo-paramvalue-prop-userid',
+ 'comment' => 'apihelp-query+imageinfo-paramvalue-prop-comment',
+ 'parsedcomment' => 'apihelp-query+imageinfo-paramvalue-prop-parsedcomment',
+ 'canonicaltitle' => 'apihelp-query+imageinfo-paramvalue-prop-canonicaltitle',
+ 'url' => 'apihelp-query+imageinfo-paramvalue-prop-url',
+ 'size' => 'apihelp-query+imageinfo-paramvalue-prop-size',
+ 'dimensions' => 'apihelp-query+imageinfo-paramvalue-prop-dimensions',
+ 'sha1' => 'apihelp-query+imageinfo-paramvalue-prop-sha1',
+ 'mime' => 'apihelp-query+imageinfo-paramvalue-prop-mime',
+ 'thumbmime' => 'apihelp-query+imageinfo-paramvalue-prop-thumbmime',
+ 'mediatype' => 'apihelp-query+imageinfo-paramvalue-prop-mediatype',
+ 'metadata' => 'apihelp-query+imageinfo-paramvalue-prop-metadata',
+ 'commonmetadata' => 'apihelp-query+imageinfo-paramvalue-prop-commonmetadata',
+ 'extmetadata' => 'apihelp-query+imageinfo-paramvalue-prop-extmetadata',
+ 'archivename' => 'apihelp-query+imageinfo-paramvalue-prop-archivename',
+ 'bitdepth' => 'apihelp-query+imageinfo-paramvalue-prop-bitdepth',
+ 'uploadwarning' => 'apihelp-query+imageinfo-paramvalue-prop-uploadwarning',
+ ),
+ array_flip( $filter )
+ );
}
/**
* Returns array key value pairs of properties and their descriptions
*
+ * @deprecated since 1.25
* @param string $modulePrefix
* @return array
*/
@@ -730,6 +772,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
/**
* Returns the descriptions for the properties provided by getPropertyNames()
*
+ * @deprecated since 1.25
* @param array $filter List of properties to filter out
* @param string $modulePrefix
* @return array
@@ -741,55 +784,13 @@ class ApiQueryImageInfo extends ApiQueryBase {
);
}
- /**
- * Return the API documentation for the parameters.
- * @return array Parameter documentation.
- */
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'prop' => self::getPropertyDescriptions( array(), $p ),
- 'urlwidth' => array(
- "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
- 'For performance reasons if this option is used, ' .
- 'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.'
- ),
- 'urlheight' => "Similar to {$p}urlwidth.",
- 'urlparam' => array(
- "A handler specific parameter string. For example, pdf's ",
- "might use 'page15-100px'."
- ),
- 'limit' => 'How many image revisions to return per image',
- 'start' => 'Timestamp to start listing from',
- 'end' => 'Timestamp to stop listing at',
- 'metadataversion'
- => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
- "Defaults to '1' for backwards compatibility" ),
- 'extmetadatalanguage' => array(
- 'What language to fetch extmetadata in. This affects both which',
- 'translation to fetch, if multiple are available, as well as how things',
- 'like numbers and various values are formatted.'
- ),
- 'extmetadatamultilang'
- =>'If translations for extmetadata property are available, fetch all of them.',
- 'extmetadatafilter'
- => "If specified and non-empty, only these keys will be returned for {$p}prop=extmetadata",
- 'continue' => 'If the query response includes a continue value, ' .
- 'use it here to get another page of results',
- 'localonly' => 'Look only for files in the local repository',
- );
- }
-
- public function getDescription() {
- return 'Returns image information and upload history.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo',
- 'api.php?action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
- 'iiend=20071231235959&iiprop=timestamp|user|url',
+ 'action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo'
+ => 'apihelp-query+imageinfo-example-simple',
+ 'action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
+ 'iiend=2007-12-31T23:59:59Z&iiprop=timestamp|user|url'
+ => 'apihelp-query+imageinfo-example-dated',
);
}
diff --git a/includes/api/ApiQueryImages.php b/includes/api/ApiQueryImages.php
index 9bc3abed..029d945d 100644
--- a/includes/api/ApiQueryImages.php
+++ b/includes/api/ApiQueryImages.php
@@ -146,7 +146,9 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'images' => array(
ApiBase::PARAM_ISMULTI => true,
),
@@ -160,26 +162,12 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- return array(
- 'limit' => 'How many images to return',
- 'continue' => 'When more results are available, use this to continue',
- 'images' => 'Only list these images. Useful for checking whether a ' .
- 'certain page has a certain Image.',
- 'dir' => 'The direction in which to list',
- );
- }
-
- public function getDescription() {
- return 'Returns all images contained on the given page(s).';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=images&titles=Main%20Page'
- => 'Get a list of images used in the [[Main Page]]',
- 'api.php?action=query&generator=images&titles=Main%20Page&prop=info'
- => 'Get information about all images used in the [[Main Page]]',
+ 'action=query&prop=images&titles=Main%20Page'
+ => 'apihelp-query+images-example-simple',
+ 'action=query&generator=images&titles=Main%20Page&prop=info'
+ => 'apihelp-query+images-example-generator',
);
}
diff --git a/includes/api/ApiQueryInfo.php b/includes/api/ApiQueryInfo.php
index d7037e3a..66178d4f 100644
--- a/includes/api/ApiQueryInfo.php
+++ b/includes/api/ApiQueryInfo.php
@@ -42,12 +42,14 @@ class ApiQueryInfo extends ApiQueryBase {
private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched,
$pageLatest, $pageLength;
- private $protections, $watched, $watchers, $notificationtimestamps,
+ private $protections, $restrictionTypes, $watched, $watchers, $notificationtimestamps,
$talkids, $subjectids, $displaytitles;
private $showZeroWatchers = false;
private $tokenFunctions;
+ private $countTestedActions = 0;
+
public function __construct( ApiQuery $query, $moduleName ) {
parent::__construct( $query, $moduleName, 'in' );
}
@@ -58,21 +60,21 @@ class ApiQueryInfo extends ApiQueryBase {
*/
public function requestExtraData( $pageSet ) {
$pageSet->requestField( 'page_restrictions' );
- // when resolving redirects, no page will have this field
- if ( !$pageSet->isResolvingRedirects() ) {
- $pageSet->requestField( 'page_is_redirect' );
- }
+ // If the pageset is resolving redirects we won't get page_is_redirect.
+ // But we can't know for sure until the pageset is executed (revids may
+ // turn it off), so request it unconditionally.
+ $pageSet->requestField( 'page_is_redirect' );
$pageSet->requestField( 'page_is_new' );
$config = $this->getConfig();
- if ( !$config->get( 'DisableCounters' ) ) {
- $pageSet->requestField( 'page_counter' );
- }
$pageSet->requestField( 'page_touched' );
$pageSet->requestField( 'page_latest' );
$pageSet->requestField( 'page_len' );
if ( $config->get( 'ContentHandlerUseDB' ) ) {
$pageSet->requestField( 'page_content_model' );
}
+ if ( $config->get( 'PageLanguageUseDB' ) ) {
+ $pageSet->requestField( 'page_lang' );
+ }
}
/**
@@ -88,8 +90,9 @@ class ApiQueryInfo extends ApiQueryBase {
return $this->tokenFunctions;
}
- // If we're in JSON callback mode, no tokens can be obtained
- if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
return array();
}
@@ -104,7 +107,7 @@ class ApiQueryInfo extends ApiQueryBase {
'import' => array( 'ApiQueryInfo', 'getImportToken' ),
'watch' => array( 'ApiQueryInfo', 'getWatchToken' ),
);
- wfRunHooks( 'APIQueryInfoTokens', array( &$this->tokenFunctions ) );
+ Hooks::run( 'APIQueryInfoTokens', array( &$this->tokenFunctions ) );
return $this->tokenFunctions;
}
@@ -328,9 +331,6 @@ class ApiQueryInfo extends ApiQueryBase {
: array();
$this->pageIsNew = $pageSet->getCustomField( 'page_is_new' );
- if ( !$this->getConfig()->get( 'DisableCounters' ) ) {
- $this->pageCounter = $pageSet->getCustomField( 'page_counter' );
- }
$this->pageTouched = $pageSet->getCustomField( 'page_touched' );
$this->pageLatest = $pageSet->getCustomField( 'page_latest' );
$this->pageLength = $pageSet->getCustomField( 'page_len' );
@@ -360,7 +360,7 @@ class ApiQueryInfo extends ApiQueryBase {
/** @var $title Title */
foreach ( $this->everything as $pageid => $title ) {
$pageInfo = $this->extractPageInfo( $pageid, $title );
- $fit = $result->addValue( array(
+ $fit = $pageInfo !== null && $result->addValue( array(
'query',
'pages'
), $pageid, $pageInfo );
@@ -377,7 +377,7 @@ class ApiQueryInfo extends ApiQueryBase {
* Get a result array with information about a title
* @param int $pageid Page ID (negative for missing titles)
* @param Title $title
- * @return array
+ * @return array|null
*/
private function extractPageInfo( $pageid, $title ) {
$pageInfo = array();
@@ -392,16 +392,13 @@ class ApiQueryInfo extends ApiQueryBase {
if ( $titleExists ) {
$pageInfo['touched'] = wfTimestamp( TS_ISO_8601, $this->pageTouched[$pageid] );
$pageInfo['lastrevid'] = intval( $this->pageLatest[$pageid] );
- $pageInfo['counter'] = $this->getConfig()->get( 'DisableCounters' )
- ? ''
- : intval( $this->pageCounter[$pageid] );
$pageInfo['length'] = intval( $this->pageLength[$pageid] );
if ( isset( $this->pageIsRedir[$pageid] ) && $this->pageIsRedir[$pageid] ) {
- $pageInfo['redirect'] = '';
+ $pageInfo['redirect'] = true;
}
if ( $this->pageIsNew[$pageid] ) {
- $pageInfo['new'] = '';
+ $pageInfo['new'] = true;
}
}
@@ -424,11 +421,18 @@ class ApiQueryInfo extends ApiQueryBase {
$pageInfo['protection'] =
$this->protections[$ns][$dbkey];
}
- $this->getResult()->setIndexedTagName( $pageInfo['protection'], 'pr' );
+ ApiResult::setIndexedTagName( $pageInfo['protection'], 'pr' );
+
+ $pageInfo['restrictiontypes'] = array();
+ if ( isset( $this->restrictionTypes[$ns][$dbkey] ) ) {
+ $pageInfo['restrictiontypes'] =
+ $this->restrictionTypes[$ns][$dbkey];
+ }
+ ApiResult::setIndexedTagName( $pageInfo['restrictiontypes'], 'rt' );
}
- if ( $this->fld_watched && isset( $this->watched[$ns][$dbkey] ) ) {
- $pageInfo['watched'] = '';
+ if ( $this->fld_watched ) {
+ $pageInfo['watched'] = isset( $this->watched[$ns][$dbkey] );
}
if ( $this->fld_watchers ) {
@@ -460,8 +464,8 @@ class ApiQueryInfo extends ApiQueryBase {
$pageInfo['editurl'] = wfExpandUrl( $title->getFullURL( 'action=edit' ), PROTO_CURRENT );
$pageInfo['canonicalurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CANONICAL );
}
- if ( $this->fld_readable && $title->userCan( 'read', $this->getUser() ) ) {
- $pageInfo['readable'] = '';
+ if ( $this->fld_readable ) {
+ $pageInfo['readable'] = $title->userCan( 'read', $this->getUser() );
}
if ( $this->fld_preload ) {
@@ -469,7 +473,7 @@ class ApiQueryInfo extends ApiQueryBase {
$pageInfo['preload'] = '';
} else {
$text = null;
- wfRunHooks( 'EditFormPreloadText', array( &$text, &$title ) );
+ Hooks::run( 'EditFormPreloadText', array( &$text, &$title ) );
$pageInfo['preload'] = $text;
}
@@ -483,6 +487,20 @@ class ApiQueryInfo extends ApiQueryBase {
}
}
+ if ( $this->params['testactions'] ) {
+ $limit = $this->getMain()->canApiHighLimits() ? self::LIMIT_SML1 : self::LIMIT_SML2;
+ if ( $this->countTestedActions >= $limit ) {
+ return null; // force a continuation
+ }
+
+ $user = $this->getUser();
+ $pageInfo['actions'] = array();
+ foreach ( $this->params['testactions'] as $action ) {
+ $this->countTestedActions++;
+ $pageInfo['actions'][$action] = $title->userCan( $action, $user );
+ }
+ }
+
return $pageInfo;
}
@@ -512,7 +530,7 @@ class ApiQueryInfo extends ApiQueryBase {
'expiry' => $wgContLang->formatExpiry( $row->pr_expiry, TS_ISO_8601 )
);
if ( $row->pr_cascade ) {
- $a['cascade'] = '';
+ $a['cascade'] = true;
}
$this->protections[$title->getNamespace()][$title->getDBkey()][] = $a;
}
@@ -574,7 +592,8 @@ class ApiQueryInfo extends ApiQueryBase {
}
}
- // Cascading protections
+ // Separate good and missing titles into files and other pages
+ // and populate $this->restrictionTypes
$images = $others = array();
foreach ( $this->everything as $title ) {
if ( $title->getNamespace() == NS_FILE ) {
@@ -582,6 +601,9 @@ class ApiQueryInfo extends ApiQueryBase {
} else {
$others[] = $title;
}
+ // Applicable protection types
+ $this->restrictionTypes[$title->getNamespace()][$title->getDBkey()] =
+ array_values( $title->getRestrictionTypes() );
}
if ( count( $others ) ) {
@@ -817,45 +839,31 @@ class ApiQueryInfo extends ApiQueryBase {
'displaytitle',
// If you add more properties here, please consider whether they
// need to be added to getCacheMode()
- ) ),
+ ),
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
+ ),
+ 'testactions' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_ISMULTI => true,
+ ),
'token' => array(
ApiBase::PARAM_DEPRECATED => true,
ApiBase::PARAM_DFLT => null,
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() )
),
- 'continue' => null,
- );
- }
-
- public function getParamDescription() {
- return array(
- 'prop' => array(
- 'Which additional properties to get:',
- ' protection - List the protection level of each page',
- ' talkid - The page ID of the talk page for each non-talk page',
- ' watched - List the watched status of each page',
- ' watchers - The number of watchers, if allowed',
- ' notificationtimestamp - The watchlist notification timestamp of each page',
- ' subjectid - The page ID of the parent page for each talk page',
- ' url - Gives a full URL, an edit URL, and the canonical URL for each page',
- ' readable - Whether the user can read this page',
- ' preload - Gives the text returned by EditFormPreloadText',
- ' displaytitle - Gives the way the page title is actually displayed',
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
- 'token' => 'Request a token to perform a data-modifying action on a page',
- 'continue' => 'When more results are available, use this to continue',
);
}
- public function getDescription() {
- return 'Get basic page information such as namespace, title, last touched date, ...';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=info&titles=Main%20Page',
- 'api.php?action=query&prop=info&inprop=protection&titles=Main%20Page'
+ 'action=query&prop=info&titles=Main%20Page'
+ => 'apihelp-query+info-example-simple',
+ 'action=query&prop=info&inprop=protection&titles=Main%20Page'
+ => 'apihelp-query+info-example-protection',
);
}
diff --git a/includes/api/ApiQueryLangBacklinks.php b/includes/api/ApiQueryLangBacklinks.php
index 34842c63..7be18b2f 100644
--- a/includes/api/ApiQueryLangBacklinks.php
+++ b/includes/api/ApiQueryLangBacklinks.php
@@ -131,7 +131,7 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
ApiQueryBase::addTitleInfo( $entry, $title );
if ( $row->page_is_redirect ) {
- $entry['redirect'] = '';
+ $entry['redirect'] = true;
}
if ( $lllang ) {
@@ -154,7 +154,7 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'll' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'll' );
} else {
$resultPageSet->populateFromTitles( $pages );
}
@@ -168,7 +168,9 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
return array(
'lang' => null,
'title' => null,
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'limit' => array(
ApiBase::PARAM_DFLT => 10,
ApiBase::PARAM_TYPE => 'limit',
@@ -194,34 +196,12 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- return array(
- 'lang' => 'Language for the language link',
- 'title' => "Language link to search for. Must be used with {$this->getModulePrefix()}lang",
- 'continue' => 'When more results are available, use this to continue',
- 'prop' => array(
- 'Which properties to get',
- ' lllang - Adds the language code of the language link',
- ' lltitle - Adds the title of the language link',
- ),
- 'limit' => 'How many total pages to return',
- 'dir' => 'The direction in which to list',
- );
- }
-
- public function getDescription() {
- return array( 'Find all pages that link to the given language link.',
- 'Can be used to find all links with a language code, or',
- 'all links to a title (with a given language).',
- 'Using neither parameter is effectively "All Language Links".',
- 'Note that this may not consider language links added by extensions.',
- );
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=langbacklinks&lbltitle=Test&lbllang=fr',
- 'api.php?action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
+ 'action=query&list=langbacklinks&lbltitle=Test&lbllang=fr'
+ => 'apihelp-query+langbacklinks-example-simple',
+ 'action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
+ => 'apihelp-query+langbacklinks-example-generator',
);
}
diff --git a/includes/api/ApiQueryLangLinks.php b/includes/api/ApiQueryLangLinks.php
index da05f273..5919ee97 100644
--- a/includes/api/ApiQueryLangLinks.php
+++ b/includes/api/ApiQueryLangLinks.php
@@ -124,7 +124,7 @@ class ApiQueryLangLinks extends ApiQueryBase {
if ( isset( $prop['autonym'] ) ) {
$entry['autonym'] = Language::fetchLanguageName( $row->ll_lang );
}
- ApiResult::setContent( $entry, $row->ll_title );
+ ApiResult::setContentValue( $entry, 'title', $row->ll_title );
$fit = $this->addPageSubItem( $row->ll_from, $entry );
if ( !$fit ) {
$this->setContinueEnumParameter( 'continue', "{$row->ll_from}|{$row->ll_lang}" );
@@ -140,18 +140,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
public function getAllowedParams() {
global $wgContLang;
return array(
- 'limit' => array(
- ApiBase::PARAM_DFLT => 10,
- ApiBase::PARAM_TYPE => 'limit',
- ApiBase::PARAM_MIN => 1,
- ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
- ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
- ),
- 'continue' => null,
- 'url' => array(
- ApiBase::PARAM_DFLT => false,
- ApiBase::PARAM_DEPRECATED => true,
- ),
'prop' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => array(
@@ -170,36 +158,27 @@ class ApiQueryLangLinks extends ApiQueryBase {
)
),
'inlanguagecode' => $wgContLang->getCode(),
- );
- }
-
- public function getParamDescription() {
- return array(
- 'limit' => 'How many langlinks to return',
- 'continue' => 'When more results are available, use this to continue',
- 'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
- 'prop' => array(
- 'Which additional properties to get for each interlanguage link',
- ' url - Adds the full URL',
- ' langname - Adds the localised language name (best effort, use CLDR extension)',
- " Use {$this->getModulePrefix()}inlanguagecode to control the language",
- ' autonym - Adds the native language name',
+ 'limit' => array(
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ),
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
+ 'url' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_DEPRECATED => true,
),
- 'lang' => 'Language code',
- 'title' => "Link to search for. Must be used with {$this->getModulePrefix()}lang",
- 'dir' => 'The direction in which to list',
- 'inlanguagecode' => 'Language code for localised language names',
);
}
- public function getDescription() {
- return 'Returns all interlanguage links from the given page(s).';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=langlinks&titles=Main%20Page&redirects='
- => 'Get interlanguage links from the [[Main Page]]',
+ 'action=query&prop=langlinks&titles=Main%20Page&redirects='
+ => 'apihelp-query+langlinks-example-simple',
);
}
diff --git a/includes/api/ApiQueryLinks.php b/includes/api/ApiQueryLinks.php
index 71329c4d..3bd37144 100644
--- a/includes/api/ApiQueryLinks.php
+++ b/includes/api/ApiQueryLinks.php
@@ -34,26 +34,20 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
const LINKS = 'links';
const TEMPLATES = 'templates';
- private $table, $prefix, $description, $helpUrl;
+ private $table, $prefix, $helpUrl;
public function __construct( ApiQuery $query, $moduleName ) {
switch ( $moduleName ) {
case self::LINKS:
$this->table = 'pagelinks';
$this->prefix = 'pl';
- $this->description = 'link';
$this->titlesParam = 'titles';
- $this->titlesParamDescription = 'Only list links to these titles. Useful ' .
- 'for checking whether a certain page links to a certain title.';
$this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#links_.2F_pl';
break;
case self::TEMPLATES:
$this->table = 'templatelinks';
$this->prefix = 'tl';
- $this->description = 'template';
$this->titlesParam = 'templates';
- $this->titlesParamDescription = 'Only list these templates. Useful ' .
- 'for checking whether a certain page uses a certain template.';
$this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#templates_.2F_tl';
break;
default:
@@ -197,7 +191,9 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
$this->titlesParam => array(
ApiBase::PARAM_ISMULTI => true,
),
@@ -211,32 +207,17 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- $desc = $this->description;
-
- return array(
- 'namespace' => "Show {$desc}s in this namespace(s) only",
- 'limit' => "How many {$desc}s to return",
- 'continue' => 'When more results are available, use this to continue',
- $this->titlesParam => $this->titlesParamDescription,
- 'dir' => 'The direction in which to list',
- );
- }
-
- public function getDescription() {
- return "Returns all {$this->description}s from the given page(s).";
- }
-
- public function getExamples() {
- $desc = $this->description;
+ protected function getExamplesMessages() {
$name = $this->getModuleName();
+ $path = $this->getModulePath();
return array(
- "api.php?action=query&prop={$name}&titles=Main%20Page" => "Get {$desc}s from the [[Main Page]]",
- "api.php?action=query&generator={$name}&titles=Main%20Page&prop=info"
- => "Get information about the {$desc} pages in the [[Main Page]]",
- "api.php?action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
- => "Get {$desc}s from the Main Page in the User and Template namespaces",
+ "action=query&prop={$name}&titles=Main%20Page"
+ => "apihelp-{$path}-example-simple",
+ "action=query&generator={$name}&titles=Main%20Page&prop=info"
+ => "apihelp-{$path}-example-generator",
+ "action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
+ => "apihelp-{$path}-example-namespaces",
);
}
diff --git a/includes/api/ApiQueryLogEvents.php b/includes/api/ApiQueryLogEvents.php
index d9dbb5e6..7b2381f4 100644
--- a/includes/api/ApiQueryLogEvents.php
+++ b/includes/api/ApiQueryLogEvents.php
@@ -230,19 +230,17 @@ class ApiQueryLogEvents extends ApiQueryBase {
}
$vals = $this->extractRowInfo( $row );
- if ( !$vals ) {
- continue;
- }
$fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
if ( !$fit ) {
$this->setContinueEnumParameter( 'continue', "$row->log_timestamp|$row->log_id" );
break;
}
}
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'item' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'item' );
}
/**
+ * @deprecated since 1.25 Use LogFormatter::formatParametersForApi instead
* @param ApiResult $result
* @param array $vals
* @param string $params
@@ -255,100 +253,23 @@ class ApiQueryLogEvents extends ApiQueryBase {
public static function addLogParams( $result, &$vals, $params, $type,
$action, $ts, $legacy = false
) {
- switch ( $type ) {
- case 'move':
- if ( $legacy ) {
- $targetKey = 0;
- $noredirKey = 1;
- } else {
- $targetKey = '4::target';
- $noredirKey = '5::noredir';
- }
+ wfDeprecated( __METHOD__, '1.25' );
- if ( isset( $params[$targetKey] ) ) {
- $title = Title::newFromText( $params[$targetKey] );
- if ( $title ) {
- $vals2 = array();
- ApiQueryBase::addTitleInfo( $vals2, $title, 'new_' );
- $vals[$type] = $vals2;
- }
- }
- if ( isset( $params[$noredirKey] ) && $params[$noredirKey] ) {
- $vals[$type]['suppressedredirect'] = '';
- }
- $params = null;
- break;
- case 'patrol':
- if ( $legacy ) {
- $cur = 0;
- $prev = 1;
- $auto = 2;
- } else {
- $cur = '4::curid';
- $prev = '5::previd';
- $auto = '6::auto';
- }
- $vals2 = array();
- $vals2['cur'] = $params[$cur];
- $vals2['prev'] = $params[$prev];
- $vals2['auto'] = $params[$auto];
- $vals[$type] = $vals2;
- $params = null;
- break;
- case 'rights':
- $vals2 = array();
- if ( $legacy ) {
- list( $vals2['old'], $vals2['new'] ) = $params;
- } else {
- $vals2['new'] = implode( ', ', $params['5::newgroups'] );
- $vals2['old'] = implode( ', ', $params['4::oldgroups'] );
- }
- $vals[$type] = $vals2;
- $params = null;
- break;
- case 'block':
- if ( $action == 'unblock' ) {
- break;
- }
- $vals2 = array();
- list( $vals2['duration'], $vals2['flags'] ) = $params;
-
- // Indefinite blocks have no expiry time
- if ( SpecialBlock::parseExpiryInput( $params[0] ) !== wfGetDB( DB_SLAVE )->getInfinity() ) {
- $vals2['expiry'] = wfTimestamp( TS_ISO_8601,
- strtotime( $params[0], wfTimestamp( TS_UNIX, $ts ) ) );
- }
- $vals[$type] = $vals2;
- $params = null;
- break;
- case 'upload':
- if ( isset( $params['img_timestamp'] ) ) {
- $params['img_timestamp'] = wfTimestamp( TS_ISO_8601, $params['img_timestamp'] );
- }
- break;
- }
- if ( !is_null( $params ) ) {
- $logParams = array();
- // Keys like "4::paramname" can't be used for output so we change them to "paramname"
- foreach ( $params as $key => $value ) {
- if ( strpos( $key, ':' ) === false ) {
- $logParams[$key] = $value;
- continue;
- }
- $logParam = explode( ':', $key, 3 );
- $logParams[$logParam[2]] = $value;
- }
- $result->setIndexedTagName( $logParams, 'param' );
- $result->setIndexedTagName_recursive( $logParams, 'param' );
- $vals = array_merge( $vals, $logParams );
- }
+ $entry = new ManualLogEntry( $type, $action );
+ $entry->setParameters( $params );
+ $entry->setTimestamp( $ts );
+ $entry->setLegacy( $legacy );
+ $formatter = LogFormatter::newFromEntry( $entry );
+ $vals['params'] = $formatter->formatParametersForApi();
return $vals;
}
private function extractRowInfo( $row ) {
$logEntry = DatabaseLogEntry::newFromRow( $row );
- $vals = array();
+ $vals = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
$anyHidden = false;
$user = $this->getUser();
@@ -362,7 +283,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
if ( $this->fld_title || $this->fld_ids || $this->fld_details && $row->log_params !== '' ) {
if ( LogEventsList::isDeleted( $row, LogPage::DELETED_ACTION ) ) {
- $vals['actionhidden'] = '';
+ $vals['actionhidden'] = true;
$anyHidden = true;
}
if ( LogEventsList::userCan( $row, LogPage::DELETED_ACTION, $user ) ) {
@@ -373,16 +294,8 @@ class ApiQueryLogEvents extends ApiQueryBase {
$vals['pageid'] = intval( $row->page_id );
$vals['logpage'] = intval( $row->log_page );
}
- if ( $this->fld_details && $row->log_params !== '' ) {
- self::addLogParams(
- $this->getResult(),
- $vals,
- $logEntry->getParameters(),
- $logEntry->getType(),
- $logEntry->getSubtype(),
- $logEntry->getTimestamp(),
- $logEntry->isLegacy()
- );
+ if ( $this->fld_details ) {
+ $vals['params'] = LogFormatter::newFromEntry( $logEntry )->formatParametersForApi();
}
}
}
@@ -394,7 +307,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
if ( $this->fld_user || $this->fld_userid ) {
if ( LogEventsList::isDeleted( $row, LogPage::DELETED_USER ) ) {
- $vals['userhidden'] = '';
+ $vals['userhidden'] = true;
$anyHidden = true;
}
if ( LogEventsList::userCan( $row, LogPage::DELETED_USER, $user ) ) {
@@ -406,7 +319,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
}
if ( !$row->log_user ) {
- $vals['anon'] = '';
+ $vals['anon'] = true;
}
}
}
@@ -416,7 +329,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
if ( ( $this->fld_comment || $this->fld_parsedcomment ) && isset( $row->log_comment ) ) {
if ( LogEventsList::isDeleted( $row, LogPage::DELETED_COMMENT ) ) {
- $vals['commenthidden'] = '';
+ $vals['commenthidden'] = true;
$anyHidden = true;
}
if ( LogEventsList::userCan( $row, LogPage::DELETED_COMMENT, $user ) ) {
@@ -433,7 +346,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
if ( $this->fld_tags ) {
if ( $row->ts_tags ) {
$tags = explode( ',', $row->ts_tags );
- $this->getResult()->setIndexedTagName( $tags, 'tag' );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
$vals['tags'] = $tags;
} else {
$vals['tags'] = array();
@@ -441,7 +354,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
}
if ( $anyHidden && LogEventsList::isDeleted( $row, LogPage::DELETED_RESTRICTED ) ) {
- $vals['suppressed'] = '';
+ $vals['suppressed'] = true;
}
return $vals;
@@ -473,7 +386,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
public function getAllowedParams( $flags = 0 ) {
$config = $this->getConfig();
- return array(
+ $ret = array(
'prop' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_DFLT => 'ids|title|type|user|timestamp|comment|details',
@@ -510,14 +423,15 @@ class ApiQueryLogEvents extends ApiQueryBase {
ApiBase::PARAM_TYPE => array(
'newer',
'older'
- )
+ ),
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
),
'user' => null,
'title' => null,
'namespace' => array(
ApiBase::PARAM_TYPE => 'namespace'
),
- 'prefix' => null,
+ 'prefix' => array(),
'tag' => null,
'limit' => array(
ApiBase::PARAM_DFLT => 10,
@@ -526,52 +440,22 @@ class ApiQueryLogEvents extends ApiQueryBase {
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
- 'continue' => null,
- );
- }
-
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'prop' => array(
- 'Which properties to get',
- ' ids - Adds the ID of the log event',
- ' title - Adds the title of the page for the log event',
- ' type - Adds the type of log event',
- ' user - Adds the user responsible for the log event',
- ' userid - Adds the user ID who was responsible for the log event',
- ' timestamp - Adds the timestamp for the event',
- ' comment - Adds the comment of the event',
- ' parsedcomment - Adds the parsed comment of the event',
- ' details - Lists additional details about the event',
- ' tags - Lists tags for the event',
- ),
- 'type' => 'Filter log entries to only this type',
- 'action' => array(
- "Filter log actions to only this action. Overrides {$p}type",
- "Wildcard actions like 'action/*' allows to specify any string for the asterisk"
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
- 'start' => 'The timestamp to start enumerating from',
- 'end' => 'The timestamp to end enumerating',
- 'dir' => $this->getDirectionDescription( $p ),
- 'user' => 'Filter entries to those made by the given user',
- 'title' => 'Filter entries to those related to a page',
- 'namespace' => 'Filter entries to those in the given namespace',
- 'prefix' => 'Filter entries that start with this prefix. Disabled in Miser Mode',
- 'limit' => 'How many total event entries to return',
- 'tag' => 'Only list event entries tagged with this tag',
- 'continue' => 'When more results are available, use this to continue',
);
- }
- public function getDescription() {
- return 'Get events from logs.';
+ if ( $config->get( 'MiserMode' ) ) {
+ $ret['prefix'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+ }
+
+ return $ret;
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=logevents'
+ 'action=query&list=logevents'
+ => 'apihelp-query+logevents-example-simple',
);
}
diff --git a/includes/api/ApiQueryORM.php b/includes/api/ApiQueryORM.php
index 469b2972..dc10c91c 100644
--- a/includes/api/ApiQueryORM.php
+++ b/includes/api/ApiQueryORM.php
@@ -205,7 +205,7 @@ abstract class ApiQueryORM extends ApiQueryBase {
* @param array $serializedResults
*/
protected function setIndexedTagNames( array &$serializedResults ) {
- $this->getResult()->setIndexedTagName( $serializedResults, $this->getRowName() );
+ ApiResult::setIndexedTagName( $serializedResults, $this->getRowName() );
}
/**
@@ -233,15 +233,19 @@ abstract class ApiQueryORM extends ApiQueryBase {
ApiBase::PARAM_TYPE => $this->getTable()->getFieldNames(),
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_REQUIRED => true,
+ ApiBase::PARAM_HELP_MSG => 'api-orm-param-props',
),
'limit' => array(
ApiBase::PARAM_DFLT => 20,
ApiBase::PARAM_TYPE => 'limit',
ApiBase::PARAM_MIN => 1,
ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
- ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+ ApiBase::PARAM_HELP_MSG => 'api-orm-param-limit',
+ ),
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
- 'continue' => null,
);
return array_merge( $this->getTable()->getAPIParams(), $params );
@@ -249,6 +253,7 @@ abstract class ApiQueryORM extends ApiQueryBase {
/**
* @see ApiBase::getParamDescription()
+ * @deprecated since 1.25
* @return array
*/
public function getParamDescription() {
diff --git a/includes/api/ApiQueryPagePropNames.php b/includes/api/ApiQueryPagePropNames.php
index 8cd9c6cf..11a29ff9 100644
--- a/includes/api/ApiQueryPagePropNames.php
+++ b/includes/api/ApiQueryPagePropNames.php
@@ -78,12 +78,14 @@ class ApiQueryPagePropNames extends ApiQueryBase {
}
}
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'p' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'p' );
}
public function getAllowedParams() {
return array(
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'limit' => array(
ApiBase::PARAM_TYPE => 'limit',
ApiBase::PARAM_DFLT => 10,
@@ -94,20 +96,10 @@ class ApiQueryPagePropNames extends ApiQueryBase {
);
}
- public function getParamDescription() {
- return array(
- 'continue' => 'When more results are available, use this to continue',
- 'limit' => 'The maximum number of pages to return',
- );
- }
-
- public function getDescription() {
- return 'List all page prop names in use on the wiki.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=pagepropnames' => 'Get first 10 prop names',
+ 'action=query&list=pagepropnames'
+ => 'apihelp-query+pagepropnames-example-simple',
);
}
diff --git a/includes/api/ApiQueryPageProps.php b/includes/api/ApiQueryPageProps.php
index e370c39f..dd19bf23 100644
--- a/includes/api/ApiQueryPageProps.php
+++ b/includes/api/ApiQueryPageProps.php
@@ -110,6 +110,7 @@ class ApiQueryPageProps extends ApiQueryBase {
* @return bool True if it fits in the result
*/
private function addPageProps( $result, $page, $props ) {
+ ApiResult::setArrayType( $props, 'assoc' );
$fit = $result->addValue( array( 'query', 'pages', $page ), 'pageprops', $props );
if ( !$fit ) {
@@ -125,28 +126,19 @@ class ApiQueryPageProps extends ApiQueryBase {
public function getAllowedParams() {
return array(
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'prop' => array(
ApiBase::PARAM_ISMULTI => true,
),
);
}
- public function getParamDescription() {
- return array(
- 'continue' => 'When more results are available, use this to continue',
- 'prop' => 'Only list these props. Useful for checking whether a ' .
- 'certain page uses a certain page prop',
- );
- }
-
- public function getDescription() {
- return 'Get various properties defined in the page content.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=pageprops&titles=Category:Foo',
+ 'action=query&prop=pageprops&titles=Category:Foo'
+ => 'apihelp-query+pageprops-example-simple',
);
}
diff --git a/includes/api/ApiQueryPagesWithProp.php b/includes/api/ApiQueryPagesWithProp.php
index b6c85253..7bcaf247 100644
--- a/includes/api/ApiQueryPagesWithProp.php
+++ b/includes/api/ApiQueryPagesWithProp.php
@@ -99,7 +99,9 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
}
if ( $resultPageSet === null ) {
- $vals = array();
+ $vals = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
if ( $fld_ids ) {
$vals['pageid'] = (int)$row->page_id;
}
@@ -121,7 +123,7 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
}
if ( $resultPageSet === null ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'page' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'page' );
}
}
@@ -140,7 +142,9 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
'value',
)
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'limit' => array(
ApiBase::PARAM_TYPE => 'limit',
ApiBase::PARAM_DFLT => 10,
@@ -158,31 +162,12 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- return array(
- 'propname' => 'Page prop for which to enumerate pages',
- 'prop' => array(
- 'What pieces of information to include',
- ' ids - Adds the page ID',
- ' title - Adds the title and namespace ID of the page',
- ' value - Adds the value of the page prop',
- ),
- 'dir' => 'In which direction to sort',
- 'continue' => 'When more results are available, use this to continue',
- 'limit' => 'The maximum number of pages to return',
- );
- }
-
- public function getDescription() {
- return 'List all pages using a given page prop.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
- => 'Get first 10 pages using {{DISPLAYTITLE:}}',
- 'api.php?action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
- => 'Get page info about first 10 pages using __NOTOC__',
+ 'action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
+ => 'apihelp-query+pageswithprop-example-simple',
+ 'action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
+ => 'apihelp-query+pageswithprop-example-generator',
);
}
diff --git a/includes/api/ApiQueryPrefixSearch.php b/includes/api/ApiQueryPrefixSearch.php
index 4abd7f0e..8eb644fc 100644
--- a/includes/api/ApiQueryPrefixSearch.php
+++ b/includes/api/ApiQueryPrefixSearch.php
@@ -43,15 +43,25 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
$search = $params['search'];
$limit = $params['limit'];
$namespaces = $params['namespace'];
+ $offset = $params['offset'];
$searcher = new TitlePrefixSearch;
- $titles = $searcher->searchWithVariants( $search, $limit, $namespaces );
+ $titles = $searcher->searchWithVariants( $search, $limit + 1, $namespaces, $offset );
if ( $resultPageSet ) {
+ if ( count( $titles ) > $limit ) {
+ $this->setContinueEnumParameter( 'offset', $offset + $params['limit'] );
+ array_pop( $titles );
+ }
$resultPageSet->populateFromTitles( $titles );
+ foreach ( $titles as $index => $title ) {
+ $resultPageSet->setGeneratorData( $title, array( 'index' => $index + $offset + 1 ) );
+ }
} else {
$result = $this->getResult();
+ $count = 0;
foreach ( $titles as $title ) {
- if ( !$limit-- ) {
+ if ( ++$count > $limit ) {
+ $this->setContinueEnumParameter( 'offset', $offset + $params['limit'] );
break;
}
$vals = array(
@@ -59,16 +69,17 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
'title' => $title->getPrefixedText(),
);
if ( $title->isSpecialPage() ) {
- $vals['special'] = '';
+ $vals['special'] = true;
} else {
$vals['pageid'] = intval( $title->getArticleId() );
}
$fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
if ( !$fit ) {
+ $this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
break;
}
}
- $result->setIndexedTagName_internal(
+ $result->addIndexedTagName(
array( 'query', $this->getModuleName() ), $this->getModulePrefix()
);
}
@@ -97,24 +108,17 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
ApiBase::PARAM_MAX => 100,
ApiBase::PARAM_MAX2 => 200,
),
+ 'offset' => array(
+ ApiBase::PARAM_DFLT => 0,
+ ApiBase::PARAM_TYPE => 'integer',
+ ),
);
}
- public function getParamDescription() {
- return array(
- 'search' => 'Search string',
- 'limit' => 'Maximum amount of results to return',
- 'namespace' => 'Namespaces to search',
- );
- }
-
- public function getDescription() {
- return 'Perform a prefix search for page titles';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=prefixsearch&pssearch=meaning',
+ 'action=query&list=prefixsearch&pssearch=meaning'
+ => 'apihelp-query+prefixsearch-example-simple',
);
}
diff --git a/includes/api/ApiQueryProtectedTitles.php b/includes/api/ApiQueryProtectedTitles.php
index 4c88be7a..fb65e5e2 100644
--- a/includes/api/ApiQueryProtectedTitles.php
+++ b/includes/api/ApiQueryProtectedTitles.php
@@ -156,7 +156,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal(
+ $result->addIndexedTagName(
array( 'query', $this->getModuleName() ),
$this->getModulePrefix()
);
@@ -196,7 +196,8 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
ApiBase::PARAM_TYPE => array(
'newer',
'older'
- )
+ ),
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
),
'start' => array(
ApiBase::PARAM_TYPE => 'timestamp'
@@ -217,39 +218,18 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
'level'
)
),
- 'continue' => null,
- );
- }
-
- public function getParamDescription() {
- return array(
- 'namespace' => 'Only list titles in these namespaces',
- 'start' => 'Start listing at this protection timestamp',
- 'end' => 'Stop listing at this protection timestamp',
- 'dir' => $this->getDirectionDescription( $this->getModulePrefix() ),
- 'limit' => 'How many total pages to return',
- 'prop' => array(
- 'Which properties to get',
- ' timestamp - Adds the timestamp of when protection was added',
- ' user - Adds the user that added the protection',
- ' userid - Adds the user id that added the protection',
- ' comment - Adds the comment for the protection',
- ' parsedcomment - Adds the parsed comment for the protection',
- ' expiry - Adds the timestamp of when the protection will be lifted',
- ' level - Adds the protection level',
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
- 'level' => 'Only list titles with these protection levels',
- 'continue' => 'When more results are available, use this to continue',
);
}
- public function getDescription() {
- return 'List all titles protected from creation.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=protectedtitles',
+ 'action=query&list=protectedtitles'
+ => 'apihelp-query+protectedtitles-example-simple',
+ 'action=query&generator=protectedtitles&gptnamespace=0&prop=linkshere'
+ => 'apihelp-query+protectedtitles-example-generator',
);
}
diff --git a/includes/api/ApiQueryQueryPage.php b/includes/api/ApiQueryQueryPage.php
index 5ddd9450..650ac8fe 100644
--- a/includes/api/ApiQueryQueryPage.php
+++ b/includes/api/ApiQueryQueryPage.php
@@ -68,9 +68,9 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
$r = array( 'name' => $params['page'] );
if ( $qp->isCached() ) {
if ( !$qp->isCacheable() ) {
- $r['disabled'] = '';
+ $r['disabled'] = true;
} else {
- $r['cached'] = '';
+ $r['cached'] = true;
$ts = $qp->getCachedTimestamp();
if ( $ts ) {
$r['cachedtimestamp'] = wfTimestamp( TS_ISO_8601, $ts );
@@ -119,7 +119,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
}
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal(
+ $result->addIndexedTagName(
array( 'query', $this->getModuleName(), 'results' ),
'page'
);
@@ -144,7 +144,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
ApiBase::PARAM_TYPE => array_keys( $this->qpMap ),
ApiBase::PARAM_REQUIRED => true
),
- 'offset' => 0,
+ 'offset' => array(
+ ApiBase::PARAM_DFLT => 0,
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'limit' => array(
ApiBase::PARAM_DFLT => 10,
ApiBase::PARAM_TYPE => 'limit',
@@ -155,21 +158,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
- return array(
- 'page' => 'The name of the special page. Note, this is case sensitive',
- 'offset' => 'When more results are available, use this to continue',
- 'limit' => 'Number of results to return',
- );
- }
-
- public function getDescription() {
- return 'Get a list provided by a QueryPage-based special page.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=querypage&qppage=Ancientpages'
+ 'action=query&list=querypage&qppage=Ancientpages'
+ => 'apihelp-query+querypage-example-ancientpages',
);
}
diff --git a/includes/api/ApiQueryRandom.php b/includes/api/ApiQueryRandom.php
index 530557e6..a2c28443 100644
--- a/includes/api/ApiQueryRandom.php
+++ b/includes/api/ApiQueryRandom.php
@@ -131,7 +131,7 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'page' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'page' );
}
}
@@ -165,30 +165,15 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
);
}
- public function getParamDescription() {
+ protected function getExamplesMessages() {
return array(
- 'namespace' => 'Return pages in these namespaces only',
- 'limit' => 'Limit how many random pages will be returned',
- 'redirect' => 'Load a random redirect instead of a random page'
+ 'action=query&list=random&rnnamespace=0&rnlimit=2'
+ => 'apihelp-query+random-example-simple',
+ 'action=query&generator=random&grnnamespace=0&grnlimit=2&prop=info'
+ => 'apihelp-query+random-example-generator',
);
}
- public function getDescription() {
- return array(
- 'Get a set of random pages.',
- 'NOTE: Pages are listed in a fixed sequence, only the starting point is random.',
- ' This means that if, for example, "Main Page" is the first random page on',
- ' your list, "List of fictional monkeys" will *always* be second, "List of',
- ' people on stamps of Vanuatu" third, etc.',
- 'NOTE: If the number of pages in the namespace is lower than rnlimit, you will',
- ' get fewer pages. You will not get the same page twice.'
- );
- }
-
- public function getExamples() {
- return 'api.php?action=query&list=random&rnnamespace=0&rnlimit=2';
- }
-
public function getHelpUrls() {
return 'https://www.mediawiki.org/wiki/API:Random';
}
diff --git a/includes/api/ApiQueryRecentChanges.php b/includes/api/ApiQueryRecentChanges.php
index 6f0c5d34..f6a64785 100644
--- a/includes/api/ApiQueryRecentChanges.php
+++ b/includes/api/ApiQueryRecentChanges.php
@@ -56,15 +56,16 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
return $this->tokenFunctions;
}
- // If we're in JSON callback mode, no tokens can be obtained
- if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
return array();
}
$this->tokenFunctions = array(
'patrol' => array( 'ApiQueryRecentChanges', 'getPatrolToken' )
);
- wfRunHooks( 'APIQueryRecentChangesTokens', array( &$this->tokenFunctions ) );
+ Hooks::run( 'APIQueryRecentChangesTokens', array( &$this->tokenFunctions ) );
return $this->tokenFunctions;
}
@@ -178,7 +179,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
if ( !is_null( $params['type'] ) ) {
try {
$this->addWhereFld( 'rc_type', RecentChange::parseToRCType( $params['type'] ) );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
ApiBase::dieDebug( __METHOD__, $e->getMessage() );
}
}
@@ -383,9 +384,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
$vals = $this->extractRowInfo( $row );
/* Add that row's data to our final output. */
- if ( !$vals ) {
- continue;
- }
$fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
if ( !$fit ) {
$this->setContinueEnumParameter( 'continue', "$row->rc_timestamp|$row->rc_id" );
@@ -398,7 +396,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
if ( is_null( $resultPageSet ) ) {
/* Format the result */
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'rc' );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'rc' );
} else {
$resultPageSet->populateFromTitles( $titles );
}
@@ -427,7 +425,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
/* Create a new entry in the result for the title. */
if ( $this->fld_title || $this->fld_ids ) {
if ( $type === RC_LOG && ( $row->rc_deleted & LogPage::DELETED_ACTION ) ) {
- $vals['actionhidden'] = '';
+ $vals['actionhidden'] = true;
$anyHidden = true;
}
if ( $type !== RC_LOG ||
@@ -451,7 +449,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
/* Add user data and 'anon' flag, if user is anonymous. */
if ( $this->fld_user || $this->fld_userid ) {
if ( $row->rc_deleted & Revision::DELETED_USER ) {
- $vals['userhidden'] = '';
+ $vals['userhidden'] = true;
$anyHidden = true;
}
if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_USER, $user ) ) {
@@ -464,22 +462,16 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
}
if ( !$row->rc_user ) {
- $vals['anon'] = '';
+ $vals['anon'] = true;
}
}
}
/* Add flags, such as new, minor, bot. */
if ( $this->fld_flags ) {
- if ( $row->rc_bot ) {
- $vals['bot'] = '';
- }
- if ( $row->rc_type == RC_NEW ) {
- $vals['new'] = '';
- }
- if ( $row->rc_minor ) {
- $vals['minor'] = '';
- }
+ $vals['bot'] = (bool)$row->rc_bot;
+ $vals['new'] = $row->rc_type == RC_NEW;
+ $vals['minor'] = (bool)$row->rc_minor;
}
/* Add sizes of each revision. (Only available on 1.10+) */
@@ -496,7 +488,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
/* Add edit summary / log summary. */
if ( $this->fld_comment || $this->fld_parsedcomment ) {
if ( $row->rc_deleted & Revision::DELETED_COMMENT ) {
- $vals['commenthidden'] = '';
+ $vals['commenthidden'] = true;
$anyHidden = true;
}
if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_COMMENT, $user ) ) {
@@ -511,45 +503,32 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
}
if ( $this->fld_redirect ) {
- if ( $row->page_is_redirect ) {
- $vals['redirect'] = '';
- }
+ $vals['redirect'] = (bool)$row->page_is_redirect;
}
/* Add the patrolled flag */
- if ( $this->fld_patrolled && $row->rc_patrolled == 1 ) {
- $vals['patrolled'] = '';
- }
-
- if ( $this->fld_patrolled && ChangesList::isUnpatrolled( $row, $user ) ) {
- $vals['unpatrolled'] = '';
+ if ( $this->fld_patrolled ) {
+ $vals['patrolled'] = $row->rc_patrolled == 1;
+ $vals['unpatrolled'] = ChangesList::isUnpatrolled( $row, $user );
}
if ( $this->fld_loginfo && $row->rc_type == RC_LOG ) {
if ( $row->rc_deleted & LogPage::DELETED_ACTION ) {
- $vals['actionhidden'] = '';
+ $vals['actionhidden'] = true;
$anyHidden = true;
}
if ( LogEventsList::userCanBitfield( $row->rc_deleted, LogPage::DELETED_ACTION, $user ) ) {
$vals['logid'] = intval( $row->rc_logid );
$vals['logtype'] = $row->rc_log_type;
$vals['logaction'] = $row->rc_log_action;
- $logEntry = DatabaseLogEntry::newFromRow( (array)$row );
- ApiQueryLogEvents::addLogParams(
- $this->getResult(),
- $vals,
- $logEntry->getParameters(),
- $logEntry->getType(),
- $logEntry->getSubtype(),
- $logEntry->getTimestamp()
- );
+ $vals['logparams'] = LogFormatter::newFromRow( $row )->formatParametersForApi();
}
}
if ( $this->fld_tags ) {
if ( $row->ts_tags ) {
$tags = explode( ',', $row->ts_tags );
- $this->getResult()->setIndexedTagName( $tags, 'tag' );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
$vals['tags'] = $tags;
} else {
$vals['tags'] = array();
@@ -558,7 +537,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
if ( $this->fld_sha1 && $row->rev_sha1 !== null ) {
if ( $row->rev_deleted & Revision::DELETED_TEXT ) {
- $vals['sha1hidden'] = '';
+ $vals['sha1hidden'] = true;
$anyHidden = true;
}
if ( Revision::userCanBitfield( $row->rev_deleted, Revision::DELETED_TEXT, $user ) ) {
@@ -584,7 +563,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
}
if ( $anyHidden && ( $row->rc_deleted & Revision::DELETED_RESTRICTED ) ) {
- $vals['suppressed'] = '';
+ $vals['suppressed'] = true;
}
return $vals;
@@ -625,7 +604,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
ApiBase::PARAM_TYPE => array(
'newer',
'older'
- )
+ ),
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
),
'namespace' => array(
ApiBase::PARAM_ISMULTI => true,
@@ -687,6 +667,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
),
'type' => array(
+ ApiBase::PARAM_DFLT => 'edit|new|log',
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => array(
'edit',
@@ -696,57 +677,18 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
)
),
'toponly' => false,
- 'continue' => null,
- );
- }
-
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'start' => 'The timestamp to start enumerating from',
- 'end' => 'The timestamp to end enumerating',
- 'dir' => $this->getDirectionDescription( $p ),
- 'namespace' => 'Filter log entries to only this namespace(s)',
- 'user' => 'Only list changes by this user',
- 'excludeuser' => 'Don\'t list changes by this user',
- 'prop' => array(
- 'Include additional pieces of information',
- ' user - Adds the user responsible for the edit and tags if they are an IP',
- ' userid - Adds the user id responsible for the edit',
- ' comment - Adds the comment for the edit',
- ' parsedcomment - Adds the parsed comment for the edit',
- ' flags - Adds flags for the edit',
- ' timestamp - Adds timestamp of the edit',
- ' title - Adds the page title of the edit',
- ' ids - Adds the page ID, recent changes ID and the new and old revision ID',
- ' sizes - Adds the new and old page length in bytes',
- ' redirect - Tags edit if page is a redirect',
- ' patrolled - Tags patrollable edits as being patrolled or unpatrolled',
- ' loginfo - Adds log information (logid, logtype, etc) to log entries',
- ' tags - Lists tags for the entry',
- ' sha1 - Adds the content checksum for entries associated with a revision',
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
- 'token' => 'Which tokens to obtain for each change',
- 'show' => array(
- 'Show only items that meet this criteria.',
- "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon"
- ),
- 'type' => 'Which types of changes to show',
- 'limit' => 'How many total changes to return',
- 'tag' => 'Only list changes tagged with this tag',
- 'toponly' => 'Only list changes which are the latest revision',
- 'continue' => 'When more results are available, use this to continue',
);
}
- public function getDescription() {
- return 'Enumerate recent changes.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=recentchanges'
+ 'action=query&list=recentchanges'
+ => 'apihelp-query+recentchanges-example-simple',
+ 'action=query&generator=recentchanges&grcshow=!patrolled&prop=info'
+ => 'apihelp-query+recentchanges-example-generator',
);
}
diff --git a/includes/api/ApiQueryRevisions.php b/includes/api/ApiQueryRevisions.php
index da4ec195..552ca3b4 100644
--- a/includes/api/ApiQueryRevisions.php
+++ b/includes/api/ApiQueryRevisions.php
@@ -32,20 +32,14 @@
*
* @ingroup API
*/
-class ApiQueryRevisions extends ApiQueryBase {
+class ApiQueryRevisions extends ApiQueryRevisionsBase {
- private $diffto, $difftotext, $expandTemplates, $generateXML, $section,
- $token, $parseContent, $contentFormat;
+ private $token = null;
public function __construct( ApiQuery $query, $moduleName ) {
parent::__construct( $query, $moduleName, 'rv' );
}
- private $fld_ids = false, $fld_flags = false, $fld_timestamp = false,
- $fld_size = false, $fld_sha1 = false, $fld_comment = false,
- $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
- $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
-
private $tokenFunctions;
/** @deprecated since 1.24 */
@@ -59,15 +53,16 @@ class ApiQueryRevisions extends ApiQueryBase {
return $this->tokenFunctions;
}
- // If we're in JSON callback mode, no tokens can be obtained
- if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
return array();
}
$this->tokenFunctions = array(
'rollback' => array( 'ApiQueryRevisions', 'getRollbackToken' )
);
- wfRunHooks( 'APIQueryRevisionsTokens', array( &$this->tokenFunctions ) );
+ Hooks::run( 'APIQueryRevisionsTokens', array( &$this->tokenFunctions ) );
return $this->tokenFunctions;
}
@@ -89,7 +84,7 @@ class ApiQueryRevisions extends ApiQueryBase {
array( $title->getPrefixedText(), $rev->getUserText() ) );
}
- public function execute() {
+ protected function run( ApiPageSet $resultPageSet = null ) {
$params = $this->extractRequestParams( false );
// If any of those parameters are used, work in 'enumeration' mode.
@@ -107,6 +102,11 @@ class ApiQueryRevisions extends ApiQueryBase {
// Optimization -- nothing to do
if ( $revCount === 0 && $pageCount === 0 ) {
+ // Nothing to do
+ return;
+ }
+ if ( $revCount > 0 && count( $pageSet->getLiveRevisionIDs() ) === 0 ) {
+ // We're in revisions mode but all given revisions are deleted
return;
}
@@ -127,75 +127,32 @@ class ApiQueryRevisions extends ApiQueryBase {
);
}
- if ( !is_null( $params['difftotext'] ) ) {
- $this->difftotext = $params['difftotext'];
- } elseif ( !is_null( $params['diffto'] ) ) {
- if ( $params['diffto'] == 'cur' ) {
- $params['diffto'] = 0;
- }
- if ( ( !ctype_digit( $params['diffto'] ) || $params['diffto'] < 0 )
- && $params['diffto'] != 'prev' && $params['diffto'] != 'next'
- ) {
- $this->dieUsage(
- 'rvdiffto must be set to a non-negative number, "prev", "next" or "cur"',
- 'diffto'
- );
- }
- // Check whether the revision exists and is readable,
- // DifferenceEngine returns a rather ambiguous empty
- // string if that's not the case
- if ( $params['diffto'] != 0 ) {
- $difftoRev = Revision::newFromID( $params['diffto'] );
- if ( !$difftoRev ) {
- $this->dieUsageMsg( array( 'nosuchrevid', $params['diffto'] ) );
- }
- if ( !$difftoRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) {
- $this->setWarning( "Couldn't diff to r{$difftoRev->getID()}: content is hidden" );
- $params['diffto'] = null;
- }
- }
- $this->diffto = $params['diffto'];
+ // In non-enum mode, rvlimit can't be directly used. Use the maximum
+ // allowed value.
+ if ( !$enumRevMode ) {
+ $this->setParsedLimit = false;
+ $params['limit'] = 'max';
}
$db = $this->getDB();
- $this->addTables( 'page' );
- $this->addFields( Revision::selectFields() );
- $this->addWhere( 'page_id = rev_page' );
-
- $prop = array_flip( $params['prop'] );
-
- // Optional fields
- $this->fld_ids = isset( $prop['ids'] );
- // $this->addFieldsIf('rev_text_id', $this->fld_ids); // should this be exposed?
- $this->fld_flags = isset( $prop['flags'] );
- $this->fld_timestamp = isset( $prop['timestamp'] );
- $this->fld_comment = isset( $prop['comment'] );
- $this->fld_parsedcomment = isset( $prop['parsedcomment'] );
- $this->fld_size = isset( $prop['size'] );
- $this->fld_sha1 = isset( $prop['sha1'] );
- $this->fld_contentmodel = isset( $prop['contentmodel'] );
- $this->fld_userid = isset( $prop['userid'] );
- $this->fld_user = isset( $prop['user'] );
- $this->token = $params['token'];
-
- if ( !empty( $params['contentformat'] ) ) {
- $this->contentFormat = $params['contentformat'];
- }
-
- $userMax = ( $this->fld_content ? ApiBase::LIMIT_SML1 : ApiBase::LIMIT_BIG1 );
- $botMax = ( $this->fld_content ? ApiBase::LIMIT_SML2 : ApiBase::LIMIT_BIG2 );
- $limit = $params['limit'];
- if ( $limit == 'max' ) {
- $limit = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
- $this->getResult()->setParsedLimit( $this->getModuleName(), $limit );
- }
+ $this->addTables( array( 'revision', 'page' ) );
+ $this->addJoinConds(
+ array( 'page' => array( 'INNER JOIN', array( 'page_id = rev_page' ) ) )
+ );
- if ( !is_null( $this->token ) || $pageCount > 0 ) {
- $this->addFields( Revision::selectPageFields() );
+ if ( $resultPageSet === null ) {
+ $this->parseParameters( $params );
+ $this->token = $params['token'];
+ $this->addFields( Revision::selectFields() );
+ if ( $this->token !== null || $pageCount > 0 ) {
+ $this->addFields( Revision::selectPageFields() );
+ }
+ } else {
+ $this->limit = $this->getParameter( 'limit' ) ?: 10;
+ $this->addFields( array( 'rev_id', 'rev_page' ) );
}
- if ( isset( $prop['tags'] ) ) {
- $this->fld_tags = true;
+ if ( $this->fld_tags ) {
$this->addTables( 'tag_summary' );
$this->addJoinConds(
array( 'tag_summary' => array( 'LEFT JOIN', array( 'rev_id=ts_rev_id' ) ) )
@@ -211,7 +168,7 @@ class ApiQueryRevisions extends ApiQueryBase {
$this->addWhereFld( 'ct_tag', $params['tag'] );
}
- if ( isset( $prop['content'] ) || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
+ if ( $this->fetchContent ) {
// For each page we will request, the user must have read rights for that page
$user = $this->getUser();
/** @var $title Title */
@@ -224,28 +181,11 @@ class ApiQueryRevisions extends ApiQueryBase {
}
$this->addTables( 'text' );
- $this->addWhere( 'rev_text_id=old_id' );
+ $this->addJoinConds(
+ array( 'text' => array( 'INNER JOIN', array( 'rev_text_id=old_id' ) ) )
+ );
$this->addFields( 'old_id' );
$this->addFields( Revision::selectTextFields() );
-
- $this->fld_content = isset( $prop['content'] );
-
- $this->expandTemplates = $params['expandtemplates'];
- $this->generateXML = $params['generatexml'];
- $this->parseContent = $params['parse'];
- if ( $this->parseContent ) {
- // Must manually initialize unset limit
- if ( is_null( $limit ) ) {
- $limit = 1;
- }
- // We are only going to parse 1 revision per request
- $this->validateLimit( 'limit', $limit, 1, 1, 1 );
- }
- if ( isset( $params['section'] ) ) {
- $this->section = $params['section'];
- } else {
- $this->section = false;
- }
}
// add user name, if needed
@@ -255,9 +195,6 @@ class ApiQueryRevisions extends ApiQueryBase {
$this->addFields( Revision::selectUserFields() );
}
- // Bug 24166 - API error when using rvprop=tags
- $this->addTables( 'revision' );
-
if ( $enumRevMode ) {
// This is mostly to prevent parameter errors (and optimize SQL?)
if ( !is_null( $params['startid'] ) && !is_null( $params['start'] ) ) {
@@ -300,12 +237,6 @@ class ApiQueryRevisions extends ApiQueryBase {
$params['start'], $params['end'], false );
}
- // must manually initialize unset limit
- if ( is_null( $limit ) ) {
- $limit = 10;
- }
- $this->validateLimit( 'limit', $limit, 1, $userMax, $botMax );
-
// There is only one ID, use it
$ids = array_keys( $pageSet->getGoodTitles() );
$this->addWhereFld( 'rev_page', reset( $ids ) );
@@ -330,11 +261,7 @@ class ApiQueryRevisions extends ApiQueryBase {
}
}
} elseif ( $revCount > 0 ) {
- $max = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
- $revs = $pageSet->getRevisionIDs();
- if ( self::truncateArray( $revs, $max ) ) {
- $this->setWarning( "Too many values supplied for parameter 'revids': the limit is $max" );
- }
+ $revs = $pageSet->getLiveRevisionIDs();
// Get all revision IDs
$this->addWhereFld( 'rev_id', array_keys( $revs ) );
@@ -343,19 +270,11 @@ class ApiQueryRevisions extends ApiQueryBase {
$this->addWhere( 'rev_id >= ' . intval( $params['continue'] ) );
}
$this->addOption( 'ORDER BY', 'rev_id' );
-
- // assumption testing -- we should never get more then $revCount rows.
- $limit = $revCount;
} elseif ( $pageCount > 0 ) {
- $max = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
$titles = $pageSet->getGoodTitles();
- if ( self::truncateArray( $titles, $max ) ) {
- $this->setWarning( "Too many values supplied for parameter 'titles': the limit is $max" );
- }
// When working in multi-page non-enumeration mode,
// limit to the latest revision only
- $this->addWhere( 'page_id=rev_page' );
$this->addWhere( 'page_latest=rev_id' );
// Get all page IDs
@@ -378,31 +297,20 @@ class ApiQueryRevisions extends ApiQueryBase {
'rev_page',
'rev_id'
) );
-
- // assumption testing -- we should never get more then $pageCount rows.
- $limit = $pageCount;
} else {
ApiBase::dieDebug( __METHOD__, 'param validation?' );
}
- $this->addOption( 'LIMIT', $limit + 1 );
+ $this->addOption( 'LIMIT', $this->limit + 1 );
$count = 0;
+ $generated = array();
$res = $this->select( __METHOD__ );
foreach ( $res as $row ) {
- if ( ++$count > $limit ) {
+ if ( ++$count > $this->limit ) {
// We've reached the one extra which shows that there are
// additional pages to be had. Stop here...
- if ( !$enumRevMode ) {
- ApiBase::dieDebug( __METHOD__, 'Got more rows then expected' ); // bug report
- }
- $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
- break;
- }
-
- $fit = $this->addPageSubItem( $row->rev_page, $this->extractRowInfo( $row ), 'rev' );
- if ( !$fit ) {
if ( $enumRevMode ) {
$this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
} elseif ( $revCount > 0 ) {
@@ -413,434 +321,124 @@ class ApiQueryRevisions extends ApiQueryBase {
}
break;
}
- }
- }
-
- private function extractRowInfo( $row ) {
- $revision = new Revision( $row );
- $title = $revision->getTitle();
- $user = $this->getUser();
- $vals = array();
- $anyHidden = false;
-
- if ( $this->fld_ids ) {
- $vals['revid'] = intval( $revision->getId() );
- // $vals['oldid'] = intval( $row->rev_text_id ); // todo: should this be exposed?
- if ( !is_null( $revision->getParentId() ) ) {
- $vals['parentid'] = intval( $revision->getParentId() );
- }
- }
-
- if ( $this->fld_flags && $revision->isMinor() ) {
- $vals['minor'] = '';
- }
-
- if ( $this->fld_user || $this->fld_userid ) {
- if ( $revision->isDeleted( Revision::DELETED_USER ) ) {
- $vals['userhidden'] = '';
- $anyHidden = true;
- }
- if ( $revision->userCan( Revision::DELETED_USER, $user ) ) {
- if ( $this->fld_user ) {
- $vals['user'] = $revision->getRawUserText();
- }
- $userid = $revision->getRawUser();
- if ( !$userid ) {
- $vals['anon'] = '';
- }
-
- if ( $this->fld_userid ) {
- $vals['userid'] = $userid;
- }
- }
- }
-
- if ( $this->fld_timestamp ) {
- $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $revision->getTimestamp() );
- }
-
- if ( $this->fld_size ) {
- if ( !is_null( $revision->getSize() ) ) {
- $vals['size'] = intval( $revision->getSize() );
- } else {
- $vals['size'] = 0;
- }
- }
-
- if ( $this->fld_sha1 ) {
- if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
- $vals['sha1hidden'] = '';
- $anyHidden = true;
- }
- if ( $revision->userCan( Revision::DELETED_TEXT, $user ) ) {
- if ( $revision->getSha1() != '' ) {
- $vals['sha1'] = wfBaseConvert( $revision->getSha1(), 36, 16, 40 );
- } else {
- $vals['sha1'] = '';
- }
- }
- }
-
- if ( $this->fld_contentmodel ) {
- $vals['contentmodel'] = $revision->getContentModel();
- }
-
- if ( $this->fld_comment || $this->fld_parsedcomment ) {
- if ( $revision->isDeleted( Revision::DELETED_COMMENT ) ) {
- $vals['commenthidden'] = '';
- $anyHidden = true;
- }
- if ( $revision->userCan( Revision::DELETED_COMMENT, $user ) ) {
- $comment = $revision->getRawComment();
-
- if ( $this->fld_comment ) {
- $vals['comment'] = $comment;
- }
-
- if ( $this->fld_parsedcomment ) {
- $vals['parsedcomment'] = Linker::formatComment( $comment, $title );
- }
- }
- }
- if ( $this->fld_tags ) {
- if ( $row->ts_tags ) {
- $tags = explode( ',', $row->ts_tags );
- $this->getResult()->setIndexedTagName( $tags, 'tag' );
- $vals['tags'] = $tags;
+ if ( $resultPageSet !== null ) {
+ $generated[] = $row->rev_id;
} else {
- $vals['tags'] = array();
- }
- }
-
- if ( !is_null( $this->token ) ) {
- $tokenFunctions = $this->getTokenFunctions();
- foreach ( $this->token as $t ) {
- $val = call_user_func( $tokenFunctions[$t], $title->getArticleID(), $title, $revision );
- if ( $val === false ) {
- $this->setWarning( "Action '$t' is not allowed for the current user" );
- } else {
- $vals[$t . 'token'] = $val;
- }
- }
- }
-
- $content = null;
- global $wgParser;
- if ( $this->fld_content || !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) {
- $content = $revision->getContent( Revision::FOR_THIS_USER, $this->getUser() );
- // Expand templates after getting section content because
- // template-added sections don't count and Parser::preprocess()
- // will have less input
- if ( $content && $this->section !== false ) {
- $content = $content->getSection( $this->section, false );
- if ( !$content ) {
- $this->dieUsage(
- "There is no section {$this->section} in r" . $revision->getId(),
- 'nosuchsection'
- );
- }
- }
- if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
- $vals['texthidden'] = '';
- $anyHidden = true;
- } elseif ( !$content ) {
- $vals['textmissing'] = '';
- }
- }
- if ( $this->fld_content && $content ) {
- $text = null;
-
- if ( $this->generateXML ) {
- if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
- $t = $content->getNativeData(); # note: don't set $text
-
- $wgParser->startExternalParse(
- $title,
- ParserOptions::newFromContext( $this->getContext() ),
- OT_PREPROCESS
- );
- $dom = $wgParser->preprocessToDom( $t );
- if ( is_callable( array( $dom, 'saveXML' ) ) ) {
- $xml = $dom->saveXML();
- } else {
- $xml = $dom->__toString();
+ $revision = new Revision( $row );
+ $rev = $this->extractRevisionInfo( $revision, $row );
+
+ if ( $this->token !== null ) {
+ $title = $revision->getTitle();
+ $tokenFunctions = $this->getTokenFunctions();
+ foreach ( $this->token as $t ) {
+ $val = call_user_func( $tokenFunctions[$t], $title->getArticleID(), $title, $revision );
+ if ( $val === false ) {
+ $this->setWarning( "Action '$t' is not allowed for the current user" );
+ } else {
+ $rev[$t . 'token'] = $val;
+ }
}
- $vals['parsetree'] = $xml;
- } else {
- $this->setWarning( "Conversion to XML is supported for wikitext only, " .
- $title->getPrefixedDBkey() .
- " uses content model " . $content->getModel() );
- }
- }
-
- if ( $this->expandTemplates && !$this->parseContent ) {
- #XXX: implement template expansion for all content types in ContentHandler?
- if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
- $text = $content->getNativeData();
-
- $text = $wgParser->preprocess(
- $text,
- $title,
- ParserOptions::newFromContext( $this->getContext() )
- );
- } else {
- $this->setWarning( "Template expansion is supported for wikitext only, " .
- $title->getPrefixedDBkey() .
- " uses content model " . $content->getModel() );
-
- $text = false;
}
- }
- if ( $this->parseContent ) {
- $po = $content->getParserOutput(
- $title,
- $revision->getId(),
- ParserOptions::newFromContext( $this->getContext() )
- );
- $text = $po->getText();
- }
-
- if ( $text === null ) {
- $format = $this->contentFormat ? $this->contentFormat : $content->getDefaultFormat();
- $model = $content->getModel();
-
- if ( !$content->isSupportedFormat( $format ) ) {
- $name = $title->getPrefixedDBkey();
-
- $this->dieUsage( "The requested format {$this->contentFormat} is not supported " .
- "for content model $model used by $name", 'badformat' );
- }
-
- $text = $content->serialize( $format );
- // always include format and model.
- // Format is needed to deserialize, model is needed to interpret.
- $vals['contentformat'] = $format;
- $vals['contentmodel'] = $model;
- }
-
- if ( $text !== false ) {
- ApiResult::setContent( $vals, $text );
- }
- }
-
- if ( $content && ( !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) ) {
- static $n = 0; // Number of uncached diffs we've had
-
- if ( $n < $this->getConfig()->get( 'APIMaxUncachedDiffs' ) ) {
- $vals['diff'] = array();
- $context = new DerivativeContext( $this->getContext() );
- $context->setTitle( $title );
- $handler = $revision->getContentHandler();
-
- if ( !is_null( $this->difftotext ) ) {
- $model = $title->getContentModel();
-
- if ( $this->contentFormat
- && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat )
- ) {
-
- $name = $title->getPrefixedDBkey();
-
- $this->dieUsage( "The requested format {$this->contentFormat} is not supported for " .
- "content model $model used by $name", 'badformat' );
+ $fit = $this->addPageSubItem( $row->rev_page, $rev, 'rev' );
+ if ( !$fit ) {
+ if ( $enumRevMode ) {
+ $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
+ } elseif ( $revCount > 0 ) {
+ $this->setContinueEnumParameter( 'continue', intval( $row->rev_id ) );
+ } else {
+ $this->setContinueEnumParameter( 'continue', intval( $row->rev_page ) .
+ '|' . intval( $row->rev_id ) );
}
-
- $difftocontent = ContentHandler::makeContent(
- $this->difftotext,
- $title,
- $model,
- $this->contentFormat
- );
-
- $engine = $handler->createDifferenceEngine( $context );
- $engine->setContent( $content, $difftocontent );
- } else {
- $engine = $handler->createDifferenceEngine( $context, $revision->getID(), $this->diffto );
- $vals['diff']['from'] = $engine->getOldid();
- $vals['diff']['to'] = $engine->getNewid();
- }
- $difftext = $engine->getDiffBody();
- ApiResult::setContent( $vals['diff'], $difftext );
- if ( !$engine->wasCacheHit() ) {
- $n++;
+ break;
}
- } else {
- $vals['diff']['notcached'] = '';
}
}
- if ( $anyHidden && $revision->isDeleted( Revision::DELETED_RESTRICTED ) ) {
- $vals['suppressed'] = '';
+ if ( $resultPageSet !== null ) {
+ $resultPageSet->populateFromRevisionIDs( $generated );
}
-
- return $vals;
}
public function getCacheMode( $params ) {
if ( isset( $params['token'] ) ) {
return 'private';
}
- if ( $this->userCanSeeRevDel() ) {
- return 'private';
- }
- if ( !is_null( $params['prop'] ) && in_array( 'parsedcomment', $params['prop'] ) ) {
- // formatComment() calls wfMessage() among other things
- return 'anon-public-user-private';
- }
-
- return 'public';
+ return parent::getCacheMode( $params );
}
public function getAllowedParams() {
- return array(
- 'prop' => array(
- ApiBase::PARAM_ISMULTI => true,
- ApiBase::PARAM_DFLT => 'ids|timestamp|flags|comment|user',
- ApiBase::PARAM_TYPE => array(
- 'ids',
- 'flags',
- 'timestamp',
- 'user',
- 'userid',
- 'size',
- 'sha1',
- 'contentmodel',
- 'comment',
- 'parsedcomment',
- 'content',
- 'tags'
- )
- ),
- 'limit' => array(
- ApiBase::PARAM_TYPE => 'limit',
- ApiBase::PARAM_MIN => 1,
- ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
- ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
- ),
+ $ret = parent::getAllowedParams() + array(
'startid' => array(
- ApiBase::PARAM_TYPE => 'integer'
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
),
'endid' => array(
- ApiBase::PARAM_TYPE => 'integer'
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
),
'start' => array(
- ApiBase::PARAM_TYPE => 'timestamp'
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
),
'end' => array(
- ApiBase::PARAM_TYPE => 'timestamp'
+ ApiBase::PARAM_TYPE => 'timestamp',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
),
'dir' => array(
ApiBase::PARAM_DFLT => 'older',
ApiBase::PARAM_TYPE => array(
'newer',
'older'
- )
+ ),
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
),
'user' => array(
- ApiBase::PARAM_TYPE => 'user'
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
),
'excludeuser' => array(
- ApiBase::PARAM_TYPE => 'user'
+ ApiBase::PARAM_TYPE => 'user',
+ ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
),
'tag' => null,
- 'expandtemplates' => false,
- 'generatexml' => false,
- 'parse' => false,
- 'section' => null,
'token' => array(
ApiBase::PARAM_DEPRECATED => true,
ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
ApiBase::PARAM_ISMULTI => true
),
- 'continue' => null,
- 'diffto' => null,
- 'difftotext' => null,
- 'contentformat' => array(
- ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
- ApiBase::PARAM_DFLT => null
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
);
- }
- public function getParamDescription() {
- $p = $this->getModulePrefix();
+ $ret['limit'][ApiBase::PARAM_HELP_MSG_INFO] = array( array( 'singlepageonly' ) );
- return array(
- 'prop' => array(
- 'Which properties to get for each revision:',
- ' ids - The ID of the revision',
- ' flags - Revision flags (minor)',
- ' timestamp - The timestamp of the revision',
- ' user - User that made the revision',
- ' userid - User id of revision creator',
- ' size - Length (bytes) of the revision',
- ' sha1 - SHA-1 (base 16) of the revision',
- ' contentmodel - Content model id',
- ' comment - Comment by the user for revision',
- ' parsedcomment - Parsed comment by the user for the revision',
- ' content - Text of the revision',
- ' tags - Tags for the revision',
- ),
- 'limit' => 'Limit how many revisions will be returned (enum)',
- 'startid' => 'From which revision id to start enumeration (enum)',
- 'endid' => 'Stop revision enumeration on this revid (enum)',
- 'start' => 'From which revision timestamp to start enumeration (enum)',
- 'end' => 'Enumerate up to this timestamp (enum)',
- 'dir' => $this->getDirectionDescription( $p, ' (enum)' ),
- 'user' => 'Only include revisions made by user (enum)',
- 'excludeuser' => 'Exclude revisions made by user (enum)',
- 'expandtemplates' => "Expand templates in revision content (requires {$p}prop=content)",
- 'generatexml' => "Generate XML parse tree for revision content (requires {$p}prop=content)",
- 'parse' => array( "Parse revision content (requires {$p}prop=content).",
- 'For performance reasons if this option is used, rvlimit is enforced to 1.' ),
- 'section' => 'Only retrieve the content of this section number',
- 'token' => 'Which tokens to obtain for each revision',
- 'continue' => 'When more results are available, use this to continue',
- 'diffto' => array( 'Revision ID to diff each revision to.',
- 'Use "prev", "next" and "cur" for the previous, next and current revision respectively' ),
- 'difftotext' => array(
- 'Text to diff each revision to. Only diffs a limited number of revisions.',
- "Overrides {$p}diffto. If {$p}section is set, only that section will be",
- 'diffed against this text',
- ),
- 'tag' => 'Only list revisions tagged with this tag',
- 'contentformat' => 'Serialization format used for difftotext and expected for output of content',
- );
- }
-
- public function getDescription() {
- return array(
- 'Get revision information.',
- 'May be used in several ways:',
- ' 1) Get data about a set of pages (last revision), by setting titles or pageids parameter.',
- ' 2) Get revisions for one given page, by using titles/pageids with start/end/limit params.',
- ' 3) Get data about a set of revisions by setting their IDs with revids parameter.',
- 'All parameters marked as (enum) may only be used with a single page (#2).'
- );
+ return $ret;
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'Get data with content for the last revision of titles "API" and "Main Page"',
- ' api.php?action=query&prop=revisions&titles=API|Main%20Page&' .
- 'rvprop=timestamp|user|comment|content',
- 'Get last 5 revisions of the "Main Page"',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
- 'rvprop=timestamp|user|comment',
- 'Get first 5 revisions of the "Main Page"',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
- 'rvprop=timestamp|user|comment&rvdir=newer',
- 'Get first 5 revisions of the "Main Page" made after 2006-05-01',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
- 'rvprop=timestamp|user|comment&rvdir=newer&rvstart=20060501000000',
- 'Get first 5 revisions of the "Main Page" that were not made made by anonymous user "127.0.0.1"',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
- 'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1',
- 'Get first 5 revisions of the "Main Page" that were made by the user "MediaWiki default"',
- ' api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
- 'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default',
+ 'action=query&prop=revisions&titles=API|Main%20Page&' .
+ 'rvprop=timestamp|user|comment|content'
+ => 'apihelp-query+revisions-example-content',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment'
+ => 'apihelp-query+revisions-example-last5',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvdir=newer'
+ => 'apihelp-query+revisions-example-first5',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvdir=newer&rvstart=2006-05-01T00:00:00Z'
+ => 'apihelp-query+revisions-example-first5-after',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1'
+ => 'apihelp-query+revisions-example-first5-not-localhost',
+ 'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+ 'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default'
+ => 'apihelp-query+revisions-example-first5-user',
);
}
diff --git a/includes/api/ApiQueryRevisionsBase.php b/includes/api/ApiQueryRevisionsBase.php
new file mode 100644
index 00000000..64f6120a
--- /dev/null
+++ b/includes/api/ApiQueryRevisionsBase.php
@@ -0,0 +1,477 @@
+<?php
+/**
+ *
+ *
+ * Created on Oct 3, 2014 as a split from ApiQueryRevisions
+ *
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * 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
+ */
+
+/**
+ * A base class for functions common to producing a list of revisions.
+ *
+ * @ingroup API
+ */
+abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
+
+ protected $limit, $diffto, $difftotext, $expandTemplates, $generateXML, $section,
+ $parseContent, $fetchContent, $contentFormat, $setParsedLimit = true;
+
+ protected $fld_ids = false, $fld_flags = false, $fld_timestamp = false,
+ $fld_size = false, $fld_sha1 = false, $fld_comment = false,
+ $fld_parsedcomment = false, $fld_user = false, $fld_userid = false,
+ $fld_content = false, $fld_tags = false, $fld_contentmodel = false;
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function executeGenerator( $resultPageSet ) {
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param ApiPageSet $resultPageSet
+ * @return void
+ */
+ abstract protected function run( ApiPageSet $resultPageSet = null );
+
+ /**
+ * Parse the parameters into the various instance fields.
+ *
+ * @param array $params
+ */
+ protected function parseParameters( $params ) {
+ if ( !is_null( $params['difftotext'] ) ) {
+ $this->difftotext = $params['difftotext'];
+ } elseif ( !is_null( $params['diffto'] ) ) {
+ if ( $params['diffto'] == 'cur' ) {
+ $params['diffto'] = 0;
+ }
+ if ( ( !ctype_digit( $params['diffto'] ) || $params['diffto'] < 0 )
+ && $params['diffto'] != 'prev' && $params['diffto'] != 'next'
+ ) {
+ $p = $this->getModulePrefix();
+ $this->dieUsage(
+ "{$p}diffto must be set to a non-negative number, \"prev\", \"next\" or \"cur\"",
+ 'diffto'
+ );
+ }
+ // Check whether the revision exists and is readable,
+ // DifferenceEngine returns a rather ambiguous empty
+ // string if that's not the case
+ if ( $params['diffto'] != 0 ) {
+ $difftoRev = Revision::newFromId( $params['diffto'] );
+ if ( !$difftoRev ) {
+ $this->dieUsageMsg( array( 'nosuchrevid', $params['diffto'] ) );
+ }
+ if ( !$difftoRev->userCan( Revision::DELETED_TEXT, $this->getUser() ) ) {
+ $this->setWarning( "Couldn't diff to r{$difftoRev->getID()}: content is hidden" );
+ $params['diffto'] = null;
+ }
+ }
+ $this->diffto = $params['diffto'];
+ }
+
+ $prop = array_flip( $params['prop'] );
+
+ $this->fld_ids = isset( $prop['ids'] );
+ $this->fld_flags = isset( $prop['flags'] );
+ $this->fld_timestamp = isset( $prop['timestamp'] );
+ $this->fld_comment = isset( $prop['comment'] );
+ $this->fld_parsedcomment = isset( $prop['parsedcomment'] );
+ $this->fld_size = isset( $prop['size'] );
+ $this->fld_sha1 = isset( $prop['sha1'] );
+ $this->fld_content = isset( $prop['content'] );
+ $this->fld_contentmodel = isset( $prop['contentmodel'] );
+ $this->fld_userid = isset( $prop['userid'] );
+ $this->fld_user = isset( $prop['user'] );
+ $this->fld_tags = isset( $prop['tags'] );
+
+ if ( !empty( $params['contentformat'] ) ) {
+ $this->contentFormat = $params['contentformat'];
+ }
+
+ $this->limit = $params['limit'];
+
+ $this->fetchContent = $this->fld_content || !is_null( $this->diffto )
+ || !is_null( $this->difftotext );
+
+ $smallLimit = false;
+ if ( $this->fetchContent ) {
+ $smallLimit = true;
+ $this->expandTemplates = $params['expandtemplates'];
+ $this->generateXML = $params['generatexml'];
+ $this->parseContent = $params['parse'];
+ if ( $this->parseContent ) {
+ // Must manually initialize unset limit
+ if ( is_null( $this->limit ) ) {
+ $this->limit = 1;
+ }
+ }
+ if ( isset( $params['section'] ) ) {
+ $this->section = $params['section'];
+ } else {
+ $this->section = false;
+ }
+ }
+
+ $userMax = $this->parseContent ? 1 : ( $smallLimit ? ApiBase::LIMIT_SML1 : ApiBase::LIMIT_BIG1 );
+ $botMax = $this->parseContent ? 1 : ( $smallLimit ? ApiBase::LIMIT_SML2 : ApiBase::LIMIT_BIG2 );
+ if ( $this->limit == 'max' ) {
+ $this->limit = $this->getMain()->canApiHighLimits() ? $botMax : $userMax;
+ if ( $this->setParsedLimit ) {
+ $this->getResult()->addParsedLimit( $this->getModuleName(), $this->limit );
+ }
+ }
+
+ if ( is_null( $this->limit ) ) {
+ $this->limit = 10;
+ }
+ $this->validateLimit( 'limit', $this->limit, 1, $userMax, $botMax );
+ }
+
+ /**
+ * Extract information from the Revision
+ *
+ * @param Revision $revision
+ * @param object $row Should have a field 'ts_tags' if $this->fld_tags is set
+ * @return array
+ */
+ protected function extractRevisionInfo( Revision $revision, $row ) {
+ $title = $revision->getTitle();
+ $user = $this->getUser();
+ $vals = array();
+ $anyHidden = false;
+
+ if ( $this->fld_ids ) {
+ $vals['revid'] = intval( $revision->getId() );
+ if ( !is_null( $revision->getParentId() ) ) {
+ $vals['parentid'] = intval( $revision->getParentId() );
+ }
+ }
+
+ if ( $this->fld_flags ) {
+ $vals['minor'] = $revision->isMinor();
+ }
+
+ if ( $this->fld_user || $this->fld_userid ) {
+ if ( $revision->isDeleted( Revision::DELETED_USER ) ) {
+ $vals['userhidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $revision->userCan( Revision::DELETED_USER, $user ) ) {
+ if ( $this->fld_user ) {
+ $vals['user'] = $revision->getUserText( Revision::RAW );
+ }
+ $userid = $revision->getUser( Revision::RAW );
+ if ( !$userid ) {
+ $vals['anon'] = true;
+ }
+
+ if ( $this->fld_userid ) {
+ $vals['userid'] = $userid;
+ }
+ }
+ }
+
+ if ( $this->fld_timestamp ) {
+ $vals['timestamp'] = wfTimestamp( TS_ISO_8601, $revision->getTimestamp() );
+ }
+
+ if ( $this->fld_size ) {
+ if ( !is_null( $revision->getSize() ) ) {
+ $vals['size'] = intval( $revision->getSize() );
+ } else {
+ $vals['size'] = 0;
+ }
+ }
+
+ if ( $this->fld_sha1 ) {
+ if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
+ $vals['sha1hidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $revision->userCan( Revision::DELETED_TEXT, $user ) ) {
+ if ( $revision->getSha1() != '' ) {
+ $vals['sha1'] = wfBaseConvert( $revision->getSha1(), 36, 16, 40 );
+ } else {
+ $vals['sha1'] = '';
+ }
+ }
+ }
+
+ if ( $this->fld_contentmodel ) {
+ $vals['contentmodel'] = $revision->getContentModel();
+ }
+
+ if ( $this->fld_comment || $this->fld_parsedcomment ) {
+ if ( $revision->isDeleted( Revision::DELETED_COMMENT ) ) {
+ $vals['commenthidden'] = true;
+ $anyHidden = true;
+ }
+ if ( $revision->userCan( Revision::DELETED_COMMENT, $user ) ) {
+ $comment = $revision->getComment( Revision::RAW );
+
+ if ( $this->fld_comment ) {
+ $vals['comment'] = $comment;
+ }
+
+ if ( $this->fld_parsedcomment ) {
+ $vals['parsedcomment'] = Linker::formatComment( $comment, $title );
+ }
+ }
+ }
+
+ if ( $this->fld_tags ) {
+ if ( $row->ts_tags ) {
+ $tags = explode( ',', $row->ts_tags );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
+ $vals['tags'] = $tags;
+ } else {
+ $vals['tags'] = array();
+ }
+ }
+
+ $content = null;
+ global $wgParser;
+ if ( $this->fetchContent ) {
+ $content = $revision->getContent( Revision::FOR_THIS_USER, $this->getUser() );
+ // Expand templates after getting section content because
+ // template-added sections don't count and Parser::preprocess()
+ // will have less input
+ if ( $content && $this->section !== false ) {
+ $content = $content->getSection( $this->section, false );
+ if ( !$content ) {
+ $this->dieUsage(
+ "There is no section {$this->section} in r" . $revision->getId(),
+ 'nosuchsection'
+ );
+ }
+ }
+ if ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
+ $vals['texthidden'] = true;
+ $anyHidden = true;
+ } elseif ( !$content ) {
+ $vals['textmissing'] = true;
+ }
+ }
+ if ( $this->fld_content && $content ) {
+ $text = null;
+
+ if ( $this->generateXML ) {
+ if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
+ $t = $content->getNativeData(); # note: don't set $text
+
+ $wgParser->startExternalParse(
+ $title,
+ ParserOptions::newFromContext( $this->getContext() ),
+ Parser::OT_PREPROCESS
+ );
+ $dom = $wgParser->preprocessToDom( $t );
+ if ( is_callable( array( $dom, 'saveXML' ) ) ) {
+ $xml = $dom->saveXML();
+ } else {
+ $xml = $dom->__toString();
+ }
+ $vals['parsetree'] = $xml;
+ } else {
+ $vals['badcontentformatforparsetree'] = true;
+ $this->setWarning( "Conversion to XML is supported for wikitext only, " .
+ $title->getPrefixedDBkey() .
+ " uses content model " . $content->getModel() );
+ }
+ }
+
+ if ( $this->expandTemplates && !$this->parseContent ) {
+ #XXX: implement template expansion for all content types in ContentHandler?
+ if ( $content->getModel() === CONTENT_MODEL_WIKITEXT ) {
+ $text = $content->getNativeData();
+
+ $text = $wgParser->preprocess(
+ $text,
+ $title,
+ ParserOptions::newFromContext( $this->getContext() )
+ );
+ } else {
+ $this->setWarning( "Template expansion is supported for wikitext only, " .
+ $title->getPrefixedDBkey() .
+ " uses content model " . $content->getModel() );
+ $vals['badcontentformat'] = true;
+ $text = false;
+ }
+ }
+ if ( $this->parseContent ) {
+ $po = $content->getParserOutput(
+ $title,
+ $revision->getId(),
+ ParserOptions::newFromContext( $this->getContext() )
+ );
+ $text = $po->getText();
+ }
+
+ if ( $text === null ) {
+ $format = $this->contentFormat ? $this->contentFormat : $content->getDefaultFormat();
+ $model = $content->getModel();
+
+ if ( !$content->isSupportedFormat( $format ) ) {
+ $name = $title->getPrefixedDBkey();
+ $this->setWarning( "The requested format {$this->contentFormat} is not " .
+ "supported for content model $model used by $name" );
+ $vals['badcontentformat'] = true;
+ $text = false;
+ } else {
+ $text = $content->serialize( $format );
+ // always include format and model.
+ // Format is needed to deserialize, model is needed to interpret.
+ $vals['contentformat'] = $format;
+ $vals['contentmodel'] = $model;
+ }
+ }
+
+ if ( $text !== false ) {
+ ApiResult::setContentValue( $vals, 'content', $text );
+ }
+ }
+
+ if ( $content && ( !is_null( $this->diffto ) || !is_null( $this->difftotext ) ) ) {
+ static $n = 0; // Number of uncached diffs we've had
+
+ if ( $n < $this->getConfig()->get( 'APIMaxUncachedDiffs' ) ) {
+ $vals['diff'] = array();
+ $context = new DerivativeContext( $this->getContext() );
+ $context->setTitle( $title );
+ $handler = $revision->getContentHandler();
+
+ if ( !is_null( $this->difftotext ) ) {
+ $model = $title->getContentModel();
+
+ if ( $this->contentFormat
+ && !ContentHandler::getForModelID( $model )->isSupportedFormat( $this->contentFormat )
+ ) {
+ $name = $title->getPrefixedDBkey();
+ $this->setWarning( "The requested format {$this->contentFormat} is not " .
+ "supported for content model $model used by $name" );
+ $vals['diff']['badcontentformat'] = true;
+ $engine = null;
+ } else {
+ $difftocontent = ContentHandler::makeContent(
+ $this->difftotext,
+ $title,
+ $model,
+ $this->contentFormat
+ );
+
+ $engine = $handler->createDifferenceEngine( $context );
+ $engine->setContent( $content, $difftocontent );
+ }
+ } else {
+ $engine = $handler->createDifferenceEngine( $context, $revision->getID(), $this->diffto );
+ $vals['diff']['from'] = $engine->getOldid();
+ $vals['diff']['to'] = $engine->getNewid();
+ }
+ if ( $engine ) {
+ $difftext = $engine->getDiffBody();
+ ApiResult::setContentValue( $vals['diff'], 'body', $difftext );
+ if ( !$engine->wasCacheHit() ) {
+ $n++;
+ }
+ }
+ } else {
+ $vals['diff']['notcached'] = true;
+ }
+ }
+
+ if ( $anyHidden && $revision->isDeleted( Revision::DELETED_RESTRICTED ) ) {
+ $vals['suppressed'] = true;
+ }
+
+ return $vals;
+ }
+
+ public function getCacheMode( $params ) {
+ if ( $this->userCanSeeRevDel() ) {
+ return 'private';
+ }
+
+ return 'public';
+ }
+
+ public function getAllowedParams() {
+ return array(
+ 'prop' => array(
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_DFLT => 'ids|timestamp|flags|comment|user',
+ ApiBase::PARAM_TYPE => array(
+ 'ids',
+ 'flags',
+ 'timestamp',
+ 'user',
+ 'userid',
+ 'size',
+ 'sha1',
+ 'contentmodel',
+ 'comment',
+ 'parsedcomment',
+ 'content',
+ 'tags'
+ ),
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-prop',
+ ),
+ 'limit' => array(
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-limit',
+ ),
+ 'expandtemplates' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-expandtemplates',
+ ),
+ 'generatexml' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-generatexml',
+ ),
+ 'parse' => array(
+ ApiBase::PARAM_DFLT => false,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-parse',
+ ),
+ 'section' => array(
+ ApiBase::PARAM_DFLT => null,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-section',
+ ),
+ 'diffto' => array(
+ ApiBase::PARAM_DFLT => null,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-diffto',
+ ),
+ 'difftotext' => array(
+ ApiBase::PARAM_DFLT => null,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-difftotext',
+ ),
+ 'contentformat' => array(
+ ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+ ApiBase::PARAM_DFLT => null,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+revisions+base-param-contentformat',
+ ),
+ );
+ }
+
+}
diff --git a/includes/api/ApiQuerySearch.php b/includes/api/ApiQuerySearch.php
index b7dcd0ed..e29ef8d2 100644
--- a/includes/api/ApiQuerySearch.php
+++ b/includes/api/ApiQuerySearch.php
@@ -116,19 +116,21 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
$this->dieUsage( $matches->getWikiText(), 'search-error' );
}
- $apiResult = $this->getResult();
- // Add search meta data to result
- if ( isset( $searchInfo['totalhits'] ) ) {
- $totalhits = $matches->getTotalHits();
- if ( $totalhits !== null ) {
+ if ( $resultPageSet === null ) {
+ $apiResult = $this->getResult();
+ // Add search meta data to result
+ if ( isset( $searchInfo['totalhits'] ) ) {
+ $totalhits = $matches->getTotalHits();
+ if ( $totalhits !== null ) {
+ $apiResult->addValue( array( 'query', 'searchinfo' ),
+ 'totalhits', $totalhits );
+ }
+ }
+ if ( isset( $searchInfo['suggestion'] ) && $matches->hasSuggestion() ) {
$apiResult->addValue( array( 'query', 'searchinfo' ),
- 'totalhits', $totalhits );
+ 'suggestion', $matches->getSuggestionQuery() );
}
}
- if ( isset( $searchInfo['suggestion'] ) && $matches->hasSuggestion() ) {
- $apiResult->addValue( array( 'query', 'searchinfo' ),
- 'suggestion', $matches->getSuggestionQuery() );
- }
// Add the search results to the result
$terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
@@ -151,7 +153,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
}
$title = $result->getTitle();
- if ( is_null( $resultPageSet ) ) {
+ if ( $resultPageSet === null ) {
$vals = array();
ApiQueryBase::addTitleInfo( $vals, $title );
@@ -168,14 +170,14 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
$vals['timestamp'] = wfTimestamp( TS_ISO_8601, $result->getTimestamp() );
}
if ( isset( $prop['titlesnippet'] ) ) {
- $vals['titlesnippet'] = $result->getTitleSnippet( $terms );
+ $vals['titlesnippet'] = $result->getTitleSnippet();
}
if ( !is_null( $result->getRedirectTitle() ) ) {
if ( isset( $prop['redirecttitle'] ) ) {
- $vals['redirecttitle'] = $result->getRedirectTitle();
+ $vals['redirecttitle'] = $result->getRedirectTitle()->getPrefixedText();
}
if ( isset( $prop['redirectsnippet'] ) ) {
- $vals['redirectsnippet'] = $result->getRedirectSnippet( $terms );
+ $vals['redirectsnippet'] = $result->getRedirectSnippet();
}
}
if ( !is_null( $result->getSectionTitle() ) ) {
@@ -202,56 +204,68 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
}
$hasInterwikiResults = false;
+ $totalhits = null;
if ( $interwiki && $resultPageSet === null && $matches->hasInterwikiResults() ) {
- $matches = $matches->getInterwikiResults();
- $hasInterwikiResults = true;
+ foreach ( $matches->getInterwikiResults() as $matches ) {
+ $matches = $matches->getInterwikiResults();
+ $hasInterwikiResults = true;
- // Include number of results if requested
- if ( isset( $searchInfo['totalhits'] ) ) {
- $totalhits = $matches->getTotalHits();
- if ( $totalhits !== null ) {
- $apiResult->addValue( array( 'query', 'interwikisearchinfo' ),
- 'totalhits', $totalhits );
+ // Include number of results if requested
+ if ( $resultPageSet === null && isset( $searchInfo['totalhits'] ) ) {
+ $totalhits += $matches->getTotalHits();
}
- }
- $result = $matches->next();
- while ( $result ) {
- $title = $result->getTitle();
- $vals = array(
- 'namespace' => $result->getInterwikiNamespaceText(),
- 'title' => $title->getText(),
- 'url' => $title->getFullUrl(),
- );
-
- // Add item to results and see whether it fits
- $fit = $apiResult->addValue(
- array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix() ),
- null,
- $vals
- );
+ $result = $matches->next();
+ while ( $result ) {
+ $title = $result->getTitle();
+
+ if ( $resultPageSet === null ) {
+ $vals = array(
+ 'namespace' => $result->getInterwikiNamespaceText(),
+ 'title' => $title->getText(),
+ 'url' => $title->getFullUrl(),
+ );
+
+ // Add item to results and see whether it fits
+ $fit = $apiResult->addValue(
+ array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix() ),
+ null,
+ $vals
+ );
+
+ if ( !$fit ) {
+ // We hit the limit. We can't really provide any meaningful
+ // pagination info so just bail out
+ break;
+ }
+ } else {
+ $titles[] = $title;
+ }
- if ( !$fit ) {
- // We hit the limit. We can't really provide any meaningful
- // pagination info so just bail out
- break;
+ $result = $matches->next();
}
-
- $result = $matches->next();
+ }
+ if ( $totalhits !== null ) {
+ $apiResult->addValue( array( 'query', 'interwikisearchinfo' ),
+ 'totalhits', $totalhits );
}
}
- if ( is_null( $resultPageSet ) ) {
- $apiResult->setIndexedTagName_internal( array(
+ if ( $resultPageSet === null ) {
+ $apiResult->addIndexedTagName( array(
'query', $this->getModuleName()
), 'p' );
if ( $hasInterwikiResults ) {
- $apiResult->setIndexedTagName_internal( array(
+ $apiResult->addIndexedTagName( array(
'query', 'interwiki' . $this->getModuleName()
), 'p' );
}
} else {
$resultPageSet->populateFromTitles( $titles );
+ $offset = $params['offset'] + 1;
+ foreach ( $titles as $index => $title ) {
+ $resultPageSet->setGeneratorData( $title, array( 'index' => $index + $offset ) );
+ }
}
}
@@ -303,7 +317,10 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
),
ApiBase::PARAM_ISMULTI => true,
),
- 'offset' => 0,
+ 'offset' => array(
+ ApiBase::PARAM_DFLT => 0,
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'limit' => array(
ApiBase::PARAM_DFLT => 10,
ApiBase::PARAM_TYPE => 'limit',
@@ -328,47 +345,14 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
return $params;
}
- public function getParamDescription() {
- $descriptions = array(
- 'search' => 'Search for all page titles (or content) that has this value',
- 'namespace' => 'The namespace(s) to enumerate',
- 'what' => 'Search inside the text or titles',
- 'info' => 'What metadata to return',
- 'prop' => array(
- 'What properties to return',
- ' size - Adds the size of the page in bytes',
- ' wordcount - Adds the word count of the page',
- ' timestamp - Adds the timestamp of when the page was last edited',
- ' score - DEPRECATED and IGNORED',
- ' snippet - Adds a parsed snippet of the page',
- ' titlesnippet - Adds a parsed snippet of the page title',
- ' redirectsnippet - Adds a parsed snippet of the redirect title',
- ' redirecttitle - Adds the title of the matching redirect',
- ' sectionsnippet - Adds a parsed snippet of the matching section title',
- ' sectiontitle - Adds the title of the matching section',
- ' hasrelated - DEPRECATED and IGNORED',
- ),
- 'offset' => 'Use this value to continue paging (return by query)',
- 'limit' => 'How many total pages to return',
- 'interwiki' => 'Include interwiki results in the search, if available'
- );
-
- if ( count( SearchEngine::getSearchTypes() ) > 1 ) {
- $descriptions['backend'] = 'Which search backend to use, if not the default';
- }
-
- return $descriptions;
- }
-
- public function getDescription() {
- return 'Perform a full text search.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=search&srsearch=meaning',
- 'api.php?action=query&list=search&srwhat=text&srsearch=meaning',
- 'api.php?action=query&generator=search&gsrsearch=meaning&prop=info',
+ 'action=query&list=search&srsearch=meaning'
+ => 'apihelp-query+search-example-simple',
+ 'action=query&list=search&srwhat=text&srsearch=meaning'
+ => 'apihelp-query+search-example-text',
+ 'action=query&generator=search&gsrsearch=meaning&prop=info'
+ => 'apihelp-query+search-example-generator',
);
}
diff --git a/includes/api/ApiQuerySiteinfo.php b/includes/api/ApiQuerySiteinfo.php
index 311438fd..b81e993b 100644
--- a/includes/api/ApiQuerySiteinfo.php
+++ b/includes/api/ApiQuerySiteinfo.php
@@ -69,6 +69,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
case 'usergroups':
$fit = $this->appendUserGroups( $p, $params['numberingroup'] );
break;
+ case 'libraries':
+ $fit = $this->appendInstalledLibraries( $p );
+ break;
case 'extensions':
$fit = $this->appendExtensions( $p );
break;
@@ -147,24 +150,17 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$allowFrom = array( '' );
$allowException = true;
if ( !$config->get( 'AllowExternalImages' ) ) {
- if ( $config->get( 'EnableImageWhitelist' ) ) {
- $data['imagewhitelistenabled'] = '';
- }
+ $data['imagewhitelistenabled'] = (bool)$config->get( 'EnableImageWhitelist' );
$allowFrom = $config->get( 'AllowExternalImagesFrom' );
$allowException = !empty( $allowFrom );
}
if ( $allowException ) {
$data['externalimages'] = (array)$allowFrom;
- $this->getResult()->setIndexedTagName( $data['externalimages'], 'prefix' );
- }
-
- if ( !$config->get( 'DisableLangConversion' ) ) {
- $data['langconversion'] = '';
+ ApiResult::setIndexedTagName( $data['externalimages'], 'prefix' );
}
- if ( !$config->get( 'DisableTitleConversion' ) ) {
- $data['titleconversion'] = '';
- }
+ $data['langconversion'] = !$config->get( 'DisableLangConversion' );
+ $data['titleconversion'] = !$config->get( 'DisableTitleConversion' );
if ( $wgContLang->linkPrefixExtension() ) {
$linkPrefixCharset = $wgContLang->linkPrefixCharset();
@@ -177,11 +173,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
}
$linktrail = $wgContLang->linkTrail();
- if ( $linktrail ) {
- $data['linktrail'] = $linktrail;
- } else {
- $data['linktrail'] = '';
- }
+ $data['linktrail'] = $linktrail ?: '';
+
+ $data['legaltitlechars'] = Title::legalChars();
global $IP;
$git = SpecialVersion::getGitHeadSha1( $IP );
@@ -205,7 +199,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$fallbacks[] = array( 'code' => $code );
}
$data['fallback'] = $fallbacks;
- $this->getResult()->setIndexedTagName( $data['fallback'], 'lang' );
+ ApiResult::setIndexedTagName( $data['fallback'], 'lang' );
if ( $wgContLang->hasVariants() ) {
$variants = array();
@@ -216,21 +210,17 @@ class ApiQuerySiteinfo extends ApiQueryBase {
);
}
$data['variants'] = $variants;
- $this->getResult()->setIndexedTagName( $data['variants'], 'lang' );
+ ApiResult::setIndexedTagName( $data['variants'], 'lang' );
}
- if ( $wgContLang->isRTL() ) {
- $data['rtl'] = '';
- }
+ $data['rtl'] = $wgContLang->isRTL();
$data['fallback8bitEncoding'] = $wgContLang->fallback8bitEncoding();
- if ( wfReadOnly() ) {
- $data['readonly'] = '';
+ $data['readonly'] = wfReadOnly();
+ if ( $data['readonly'] ) {
$data['readonlyreason'] = wfReadOnlyReason();
}
- if ( $config->get( 'EnableWriteAPI' ) ) {
- $data['writeapi'] = '';
- }
+ $data['writeapi'] = (bool)$config->get( 'EnableWriteAPI' );
$tz = $config->get( 'Localtimezone' );
$offset = $config->get( 'LocalTZoffset' );
@@ -246,21 +236,22 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$data['scriptpath'] = $config->get( 'ScriptPath' );
$data['script'] = $config->get( 'Script' );
$data['variantarticlepath'] = $config->get( 'VariantArticlePath' );
+ $data[ApiResult::META_BC_BOOLS][] = 'variantarticlepath';
$data['server'] = $config->get( 'Server' );
$data['servername'] = $config->get( 'ServerName' );
$data['wikiid'] = wfWikiID();
$data['time'] = wfTimestamp( TS_ISO_8601, time() );
- if ( $config->get( 'MiserMode' ) ) {
- $data['misermode'] = '';
- }
+ $data['misermode'] = (bool)$config->get( 'MiserMode' );
$data['maxuploadsize'] = UploadBase::getMaxUploadSize();
$data['thumblimits'] = $config->get( 'ThumbLimits' );
- $this->getResult()->setIndexedTagName( $data['thumblimits'], 'limit' );
+ ApiResult::setArrayType( $data['thumblimits'], 'BCassoc' );
+ ApiResult::setIndexedTagName( $data['thumblimits'], 'limit' );
$data['imagelimits'] = array();
- $this->getResult()->setIndexedTagName( $data['imagelimits'], 'limit' );
+ ApiResult::setArrayType( $data['imagelimits'], 'BCassoc' );
+ ApiResult::setIndexedTagName( $data['imagelimits'], 'limit' );
foreach ( $config->get( 'ImageLimits' ) as $k => $limit ) {
$data['imagelimits'][$k] = array( 'width' => $limit[0], 'height' => $limit[1] );
}
@@ -272,37 +263,32 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$data['favicon'] = wfExpandUrl( $favicon, PROTO_RELATIVE );
}
- wfRunHooks( 'APIQuerySiteInfoGeneralInfo', array( $this, &$data ) );
+ Hooks::run( 'APIQuerySiteInfoGeneralInfo', array( $this, &$data ) );
return $this->getResult()->addValue( 'query', $property, $data );
}
protected function appendNamespaces( $property ) {
global $wgContLang;
- $data = array();
+ $data = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
foreach ( $wgContLang->getFormattedNamespaces() as $ns => $title ) {
$data[$ns] = array(
'id' => intval( $ns ),
'case' => MWNamespace::isCapitalized( $ns ) ? 'first-letter' : 'case-sensitive',
);
- ApiResult::setContent( $data[$ns], $title );
+ ApiResult::setContentValue( $data[$ns], 'name', $title );
$canonical = MWNamespace::getCanonicalName( $ns );
- if ( MWNamespace::hasSubpages( $ns ) ) {
- $data[$ns]['subpages'] = '';
- }
+ $data[$ns]['subpages'] = MWNamespace::hasSubpages( $ns );
if ( $canonical ) {
$data[$ns]['canonical'] = strtr( $canonical, '_', ' ' );
}
- if ( MWNamespace::isContent( $ns ) ) {
- $data[$ns]['content'] = '';
- }
-
- if ( MWNamespace::isNonincludable( $ns ) ) {
- $data[$ns]['nonincludable'] = '';
- }
+ $data[$ns]['content'] = MWNamespace::isContent( $ns );
+ $data[$ns]['nonincludable'] = MWNamespace::isNonincludable( $ns );
$contentmodel = MWNamespace::getNamespaceContentModel( $ns );
if ( $contentmodel ) {
@@ -310,7 +296,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
}
}
- $this->getResult()->setIndexedTagName( $data, 'ns' );
+ ApiResult::setIndexedTagName( $data, 'ns' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -329,13 +315,13 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$item = array(
'id' => intval( $ns )
);
- ApiResult::setContent( $item, strtr( $title, '_', ' ' ) );
+ ApiResult::setContentValue( $item, 'alias', strtr( $title, '_', ' ' ) );
$data[] = $item;
}
sort( $data );
- $this->getResult()->setIndexedTagName( $data, 'ns' );
+ ApiResult::setIndexedTagName( $data, 'ns' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -347,11 +333,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
foreach ( SpecialPageFactory::getNames() as $specialpage ) {
if ( isset( $aliases[$specialpage] ) ) {
$arr = array( 'realname' => $specialpage, 'aliases' => $aliases[$specialpage] );
- $this->getResult()->setIndexedTagName( $arr['aliases'], 'alias' );
+ ApiResult::setIndexedTagName( $arr['aliases'], 'alias' );
$data[] = $arr;
}
}
- $this->getResult()->setIndexedTagName( $data, 'specialpage' );
+ ApiResult::setIndexedTagName( $data, 'specialpage' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -362,13 +348,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
foreach ( $wgContLang->getMagicWords() as $magicword => $aliases ) {
$caseSensitive = array_shift( $aliases );
$arr = array( 'name' => $magicword, 'aliases' => $aliases );
- if ( $caseSensitive ) {
- $arr['case-sensitive'] = '';
- }
- $this->getResult()->setIndexedTagName( $arr['aliases'], 'alias' );
+ $arr['case-sensitive'] = (bool)$caseSensitive;
+ ApiResult::setIndexedTagName( $arr['aliases'], 'alias' );
$data[] = $arr;
}
- $this->getResult()->setIndexedTagName( $data, 'magicword' );
+ ApiResult::setIndexedTagName( $data, 'magicword' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -397,20 +381,20 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$val = array();
$val['prefix'] = $prefix;
if ( isset( $row['iw_local'] ) && $row['iw_local'] == '1' ) {
- $val['local'] = '';
+ $val['local'] = true;
}
if ( isset( $row['iw_trans'] ) && $row['iw_trans'] == '1' ) {
- $val['trans'] = '';
+ $val['trans'] = true;
}
if ( isset( $langNames[$prefix] ) ) {
$val['language'] = $langNames[$prefix];
}
if ( in_array( $prefix, $localInterwikis ) ) {
- $val['localinterwiki'] = '';
+ $val['localinterwiki'] = true;
}
if ( in_array( $prefix, $extraLangPrefixes ) ) {
- $val['extralanglink'] = '';
+ $val['extralanglink'] = true;
$linktext = wfMessage( "interlanguage-link-$prefix" );
if ( !$linktext->isDisabled() ) {
@@ -424,20 +408,18 @@ class ApiQuerySiteinfo extends ApiQueryBase {
}
$val['url'] = wfExpandUrl( $row['iw_url'], PROTO_CURRENT );
- if ( substr( $row['iw_url'], 0, 2 ) == '//' ) {
- $val['protorel'] = '';
- }
- if ( isset( $row['iw_wikiid'] ) ) {
+ $val['protorel'] = substr( $row['iw_url'], 0, 2 ) == '//';
+ if ( isset( $row['iw_wikiid'] ) && $row['iw_wikiid'] !== '' ) {
$val['wikiid'] = $row['iw_wikiid'];
}
- if ( isset( $row['iw_api'] ) ) {
+ if ( isset( $row['iw_api'] ) && $row['iw_api'] !== '' ) {
$val['api'] = $row['iw_api'];
}
$data[] = $val;
}
- $this->getResult()->setIndexedTagName( $data, 'iw' );
+ ApiResult::setIndexedTagName( $data, 'iw' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -472,7 +454,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
}
$result = $this->getResult();
- $result->setIndexedTagName( $data, 'db' );
+ ApiResult::setIndexedTagName( $data, 'db' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -481,9 +463,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$data = array();
$data['pages'] = intval( SiteStats::pages() );
$data['articles'] = intval( SiteStats::articles() );
- if ( !$this->getConfig()->get( 'DisableCounters' ) ) {
- $data['views'] = intval( SiteStats::views() );
- }
$data['edits'] = intval( SiteStats::edits() );
$data['images'] = intval( SiteStats::images() );
$data['users'] = intval( SiteStats::users() );
@@ -491,7 +470,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$data['admins'] = intval( SiteStats::numberingroup( 'sysop' ) );
$data['jobs'] = intval( SiteStats::jobs() );
- wfRunHooks( 'APIQuerySiteInfoStatisticsInfo', array( &$data ) );
+ Hooks::run( 'APIQuerySiteInfoStatisticsInfo', array( &$data ) );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -531,16 +510,16 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$groups = array_intersect( $rights[$group], $allGroups );
if ( $groups ) {
$arr[$type] = $groups;
- $result->setIndexedTagName( $arr[$type], 'group' );
+ ApiResult::setIndexedTagName( $arr[$type], 'group' );
}
}
}
- $result->setIndexedTagName( $arr['rights'], 'permission' );
+ ApiResult::setIndexedTagName( $arr['rights'], 'permission' );
$data[] = $arr;
}
- $result->setIndexedTagName( $data, 'group' );
+ ApiResult::setIndexedTagName( $data, 'group' );
return $result->addValue( 'query', $property, $data );
}
@@ -550,9 +529,39 @@ class ApiQuerySiteinfo extends ApiQueryBase {
foreach ( array_unique( $this->getConfig()->get( 'FileExtensions' ) ) as $ext ) {
$data[] = array( 'ext' => $ext );
}
- $this->getResult()->setIndexedTagName( $data, 'fe' );
+ ApiResult::setIndexedTagName( $data, 'fe' );
+
+ return $this->getResult()->addValue( 'query', $property, $data );
+ }
+
+ protected function appendInstalledLibraries( $property ) {
+ global $IP;
+ $path = "$IP/composer.lock";
+ if ( !file_exists( $path ) ) {
+ // Maybe they're using mediawiki/vendor?
+ $path = "$IP/vendor/composer.lock";
+ if ( !file_exists( $path ) ) {
+ return true;
+ }
+ }
+
+ $data = array();
+ $lock = new ComposerLock( $path );
+ foreach ( $lock->getInstalledDependencies() as $name => $info ) {
+ if ( strpos( $info['type'], 'mediawiki-' ) === 0 ) {
+ // Skip any extensions or skins since they'll be listed
+ // in their proper section
+ continue;
+ }
+ $data[] = array(
+ 'name' => $name,
+ 'version' => $info['version'],
+ );
+ }
+ ApiResult::setIndexedTagName( $data, 'library' );
return $this->getResult()->addValue( 'query', $property, $data );
+
}
protected function appendExtensions( $property ) {
@@ -575,7 +584,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
if ( is_array( $ext['descriptionmsg'] ) ) {
$ret['descriptionmsg'] = $ext['descriptionmsg'][0];
$ret['descriptionmsgparams'] = array_slice( $ext['descriptionmsg'], 1 );
- $this->getResult()->setIndexedTagName( $ret['descriptionmsgparams'], 'param' );
+ ApiResult::setIndexedTagName( $ret['descriptionmsgparams'], 'param' );
} else {
$ret['descriptionmsg'] = $ext['descriptionmsg'];
}
@@ -635,15 +644,21 @@ class ApiQuerySiteinfo extends ApiQueryBase {
}
}
- $this->getResult()->setIndexedTagName( $data, 'ext' );
+ ApiResult::setIndexedTagName( $data, 'ext' );
return $this->getResult()->addValue( 'query', $property, $data );
}
protected function appendRightsInfo( $property ) {
$config = $this->getConfig();
- $title = Title::newFromText( $config->get( 'RightsPage' ) );
- $url = $title ? wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ) : $config->get( 'RightsUrl' );
+ $rightsPage = $config->get( 'RightsPage' );
+ if ( is_string( $rightsPage ) ) {
+ $title = Title::newFromText( $rightsPage );
+ $url = wfExpandUrl( $title, PROTO_CURRENT );
+ } else {
+ $title = false;
+ $url = $config->get( 'RightsUrl' );
+ }
$text = $config->get( 'RightsText' );
if ( !$text && $title ) {
$text = $title->getPrefixedText();
@@ -666,10 +681,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
'semiprotectedlevels' => $config->get( 'SemiprotectedRestrictionLevels' ),
);
- $this->getResult()->setIndexedTagName( $data['types'], 'type' );
- $this->getResult()->setIndexedTagName( $data['levels'], 'level' );
- $this->getResult()->setIndexedTagName( $data['cascadinglevels'], 'level' );
- $this->getResult()->setIndexedTagName( $data['semiprotectedlevels'], 'level' );
+ ApiResult::setIndexedTagName( $data['types'], 'type' );
+ ApiResult::setIndexedTagName( $data['levels'], 'level' );
+ ApiResult::setIndexedTagName( $data['cascadinglevels'], 'level' );
+ ApiResult::setIndexedTagName( $data['semiprotectedlevels'], 'level' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -683,10 +698,10 @@ class ApiQuerySiteinfo extends ApiQueryBase {
foreach ( $langNames as $code => $name ) {
$lang = array( 'code' => $code );
- ApiResult::setContent( $lang, $name );
+ ApiResult::setContentValue( $lang, 'name', $name );
$data[] = $lang;
}
- $this->getResult()->setIndexedTagName( $data, 'lang' );
+ ApiResult::setIndexedTagName( $data, 'lang' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -707,16 +722,16 @@ class ApiQuerySiteinfo extends ApiQueryBase {
$displayName = $msg->text();
}
$skin = array( 'code' => $name );
- ApiResult::setContent( $skin, $displayName );
+ ApiResult::setContentValue( $skin, 'name', $displayName );
if ( !isset( $allowed[$name] ) ) {
- $skin['unusable'] = '';
+ $skin['unusable'] = true;
}
if ( $name === $default ) {
- $skin['default'] = '';
+ $skin['default'] = true;
}
$data[] = $skin;
}
- $this->getResult()->setIndexedTagName( $data, 'skin' );
+ ApiResult::setIndexedTagName( $data, 'skin' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -725,7 +740,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
global $wgParser;
$wgParser->firstCallInit();
$tags = array_map( array( $this, 'formatParserTags' ), $wgParser->getTags() );
- $this->getResult()->setIndexedTagName( $tags, 't' );
+ ApiResult::setIndexedTagName( $tags, 't' );
return $this->getResult()->addValue( 'query', $property, $tags );
}
@@ -734,14 +749,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
global $wgParser;
$wgParser->firstCallInit();
$hooks = $wgParser->getFunctionHooks();
- $this->getResult()->setIndexedTagName( $hooks, 'h' );
+ ApiResult::setIndexedTagName( $hooks, 'h' );
return $this->getResult()->addValue( 'query', $property, $hooks );
}
public function appendVariables( $property ) {
$variables = MagicWord::getVariableIDs();
- $this->getResult()->setIndexedTagName( $variables, 'v' );
+ ApiResult::setIndexedTagName( $variables, 'v' );
return $this->getResult()->addValue( 'query', $property, $variables );
}
@@ -749,13 +764,15 @@ class ApiQuerySiteinfo extends ApiQueryBase {
public function appendProtocols( $property ) {
// Make a copy of the global so we don't try to set the _element key of it - bug 45130
$protocols = array_values( $this->getConfig()->get( 'UrlProtocols' ) );
- $this->getResult()->setIndexedTagName( $protocols, 'p' );
+ ApiResult::setIndexedTagName( $protocols, 'p' );
return $this->getResult()->addValue( 'query', $property, $protocols );
}
public function appendDefaultOptions( $property ) {
- return $this->getResult()->addValue( 'query', $property, User::getDefaultOptions() );
+ $options = User::getDefaultOptions();
+ $options[ApiResult::META_BC_BOOLS] = array_keys( $options );
+ return $this->getResult()->addValue( 'query', $property, $options );
}
private function formatParserTags( $item ) {
@@ -774,11 +791,11 @@ class ApiQuerySiteinfo extends ApiQueryBase {
'subscribers' => array_map( array( 'SpecialVersion', 'arrayToString' ), $subscribers ),
);
- $this->getResult()->setIndexedTagName( $arr['subscribers'], 's' );
+ ApiResult::setIndexedTagName( $arr['subscribers'], 's' );
$data[] = $arr;
}
- $this->getResult()->setIndexedTagName( $data, 'hook' );
+ ApiResult::setIndexedTagName( $data, 'hook' );
return $this->getResult()->addValue( 'query', $property, $data );
}
@@ -811,6 +828,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
'dbrepllag',
'statistics',
'usergroups',
+ 'libraries',
'extensions',
'fileextensions',
'rightsinfo',
@@ -837,54 +855,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'prop' => array(
- 'Which sysinfo properties to get:',
- ' general - Overall system information',
- ' namespaces - List of registered namespaces and their canonical names',
- ' namespacealiases - List of registered namespace aliases',
- ' specialpagealiases - List of special page aliases',
- ' magicwords - List of magic words and their aliases',
- ' statistics - Returns site statistics',
- ' interwikimap - Returns interwiki map ' .
- "(optionally filtered, (optionally localised by using {$p}inlanguagecode))",
- ' dbrepllag - Returns database server with the highest replication lag',
- ' usergroups - Returns user groups and the associated permissions',
- ' extensions - Returns extensions installed on the wiki',
- ' fileextensions - Returns list of file extensions allowed to be uploaded',
- ' rightsinfo - Returns wiki rights (license) information if available',
- ' restrictions - Returns information on available restriction (protection) types',
- ' languages - Returns a list of languages MediaWiki supports ' .
- "(optionally localised by using {$p}inlanguagecode)",
- ' skins - Returns a list of all enabled skins ' .
- "(optionally localised by using {$p}inlanguagecode, otherwise in content language)",
- ' extensiontags - Returns a list of parser extension tags',
- ' functionhooks - Returns a list of parser function hooks',
- ' showhooks - Returns a list of all subscribed hooks (contents of $wgHooks)',
- ' variables - Returns a list of variable IDs',
- ' protocols - Returns a list of protocols that are allowed in external links.',
- ' defaultoptions - Returns the default values for user preferences.',
- ),
- 'filteriw' => 'Return only local or only nonlocal entries of the interwiki map',
- 'showalldb' => 'List all database servers, not just the one lagging the most',
- 'numberingroup' => 'Lists the number of users in user groups',
- 'inlanguagecode' => 'Language code for localised language names ' .
- '(best effort, use CLDR extension) and skin names',
- );
- }
-
- public function getDescription() {
- return 'Return general information about the site.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics',
- 'api.php?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local',
- 'api.php?action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb=',
+ 'action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics'
+ => 'apihelp-query+siteinfo-example-simple',
+ 'action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local'
+ => 'apihelp-query+siteinfo-example-interwiki',
+ 'action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb='
+ => 'apihelp-query+siteinfo-example-replag',
);
}
diff --git a/includes/api/ApiQueryStashImageInfo.php b/includes/api/ApiQueryStashImageInfo.php
index db928560..11268426 100644
--- a/includes/api/ApiQueryStashImageInfo.php
+++ b/includes/api/ApiQueryStashImageInfo.php
@@ -52,18 +52,16 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
}
try {
- $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash();
+ $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
foreach ( $params['filekey'] as $filekey ) {
$file = $stash->getFile( $filekey );
$finalThumbParam = $this->mergeThumbParams( $file, $scale, $params['urlparam'] );
$imageInfo = ApiQueryImageInfo::getInfo( $file, $prop, $result, $finalThumbParam );
$result->addValue( array( 'query', $this->getModuleName() ), null, $imageInfo );
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), $modulePrefix );
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), $modulePrefix );
}
// @todo Update exception handling here to understand current getFile exceptions
- } catch ( UploadStashNotAvailableException $e ) {
- $this->dieUsage( "Session not available: " . $e->getMessage(), "nosession" );
} catch ( UploadStashFileNotFoundException $e ) {
$this->dieUsage( "File not found: " . $e->getMessage(), "invalidsessiondata" );
} catch ( UploadStashBadPathException $e ) {
@@ -90,50 +88,38 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
'prop' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_DFLT => 'timestamp|url',
- ApiBase::PARAM_TYPE => self::getPropertyNames( $this->propertyFilter )
+ ApiBase::PARAM_TYPE => self::getPropertyNames( $this->propertyFilter ),
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-prop',
+ ApiBase::PARAM_HELP_MSG_PER_VALUE => self::getPropertyMessages( $this->propertyFilter )
),
'urlwidth' => array(
ApiBase::PARAM_TYPE => 'integer',
- ApiBase::PARAM_DFLT => -1
+ ApiBase::PARAM_DFLT => -1,
+ ApiBase::PARAM_HELP_MSG => array(
+ 'apihelp-query+imageinfo-param-urlwidth',
+ ApiQueryImageInfo::TRANSFORM_LIMIT,
+ ),
),
'urlheight' => array(
ApiBase::PARAM_TYPE => 'integer',
- ApiBase::PARAM_DFLT => -1
+ ApiBase::PARAM_DFLT => -1,
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlheight',
),
'urlparam' => array(
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_DFLT => '',
+ ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlparam',
),
);
}
- /**
- * Return the API documentation for the parameters.
- * @return array Parameter documentation.
- */
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'prop' => self::getPropertyDescriptions( $this->propertyFilter, $p ),
- 'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
- 'sessionkey' => 'Alias for filekey, for backward compatibility.',
- 'urlwidth' => "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
- 'urlheight' => "Similar to {$p}urlwidth. Cannot be used without {$p}urlwidth",
- 'urlparam' => array( "A handler specific parameter string. For example, pdf's ",
- "might use 'page15-100px'. {$p}urlwidth must be used and be consistent with {$p}urlparam" ),
- );
- }
-
- public function getDescription() {
- return 'Returns image information for stashed images.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567',
- 'api.php?action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
- 'siiurlwidth=120&siiprop=url',
+ 'action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567'
+ => 'apihelp-query+stashimageinfo-example-simple',
+ 'action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
+ 'siiurlwidth=120&siiprop=url'
+ => 'apihelp-query+stashimageinfo-example-params',
);
}
}
diff --git a/includes/api/ApiQueryTags.php b/includes/api/ApiQueryTags.php
index 31845648..45f73b20 100644
--- a/includes/api/ApiQueryTags.php
+++ b/includes/api/ApiQueryTags.php
@@ -31,15 +31,6 @@
*/
class ApiQueryTags extends ApiQueryBase {
- /**
- * @var ApiResult
- */
- private $result;
-
- private $limit;
- private $fld_displayname = false, $fld_description = false,
- $fld_hitcount = false;
-
public function __construct( ApiQuery $query, $moduleName ) {
parent::__construct( $query, $moduleName, 'tg' );
}
@@ -49,84 +40,100 @@ class ApiQueryTags extends ApiQueryBase {
$prop = array_flip( $params['prop'] );
- $this->fld_displayname = isset( $prop['displayname'] );
- $this->fld_description = isset( $prop['description'] );
- $this->fld_hitcount = isset( $prop['hitcount'] );
-
- $this->limit = $params['limit'];
- $this->result = $this->getResult();
+ $fld_displayname = isset( $prop['displayname'] );
+ $fld_description = isset( $prop['description'] );
+ $fld_hitcount = isset( $prop['hitcount'] );
+ $fld_defined = isset( $prop['defined'] );
+ $fld_source = isset( $prop['source'] );
+ $fld_active = isset( $prop['active'] );
+
+ $limit = $params['limit'];
+ $result = $this->getResult();
+
+ $extensionDefinedTags = array_fill_keys( ChangeTags::listExtensionDefinedTags(), 0 );
+ $explicitlyDefinedTags = array_fill_keys( ChangeTags::listExplicitlyDefinedTags(), 0 );
+ $extensionActivatedTags = array_fill_keys( ChangeTags::listExtensionActivatedTags(), 0 );
+
+ $definedTags = array_merge( $extensionDefinedTags, $explicitlyDefinedTags );
+
+ # Fetch defined tags that aren't past the continuation
+ if ( $params['continue'] !== null ) {
+ $cont = $params['continue'];
+ $tags = array_filter( array_keys( $definedTags ), function ( $v ) use ( $cont ) {
+ return $v >= $cont;
+ } );
+ $tags = array_fill_keys( $tags, 0 );
+ } else {
+ $tags = $definedTags;
+ }
+ # Merge in all used tags
$this->addTables( 'change_tag' );
$this->addFields( 'ct_tag' );
-
- $this->addFieldsIf( array( 'hitcount' => 'COUNT(*)' ), $this->fld_hitcount );
-
- $this->addOption( 'LIMIT', $this->limit + 1 );
+ $this->addFields( array( 'hitcount' => $fld_hitcount ? 'COUNT(*)' : '0' ) );
+ $this->addOption( 'LIMIT', $limit + 1 );
$this->addOption( 'GROUP BY', 'ct_tag' );
$this->addWhereRange( 'ct_tag', 'newer', $params['continue'], null );
-
$res = $this->select( __METHOD__ );
-
- $ok = true;
-
foreach ( $res as $row ) {
- if ( !$ok ) {
- break;
- }
- $ok = $this->doTag( $row->ct_tag, $this->fld_hitcount ? $row->hitcount : 0 );
+ $tags[$row->ct_tag] = (int)$row->hitcount;
}
- // include tags with no hits yet
- foreach ( ChangeTags::listDefinedTags() as $tag ) {
- if ( !$ok ) {
+ # Now make sure the array is sorted for proper continuation
+ ksort( $tags );
+
+ $count = 0;
+ foreach ( $tags as $tagName => $hitcount ) {
+ if ( ++$count > $limit ) {
+ $this->setContinueEnumParameter( 'continue', $tagName );
break;
}
- $ok = $this->doTag( $tag, 0 );
- }
-
- $this->result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'tag' );
- }
- private function doTag( $tagName, $hitcount ) {
- static $count = 0;
- static $doneTags = array();
+ $tag = array();
+ $tag['name'] = $tagName;
- if ( in_array( $tagName, $doneTags ) ) {
- return true;
- }
-
- if ( ++$count > $this->limit ) {
- $this->setContinueEnumParameter( 'continue', $tagName );
-
- return false;
- }
+ if ( $fld_displayname ) {
+ $tag['displayname'] = ChangeTags::tagDescription( $tagName );
+ }
- $tag = array();
- $tag['name'] = $tagName;
+ if ( $fld_description ) {
+ $msg = $this->msg( "tag-$tagName-description" );
+ $tag['description'] = $msg->exists() ? $msg->text() : '';
+ }
- if ( $this->fld_displayname ) {
- $tag['displayname'] = ChangeTags::tagDescription( $tagName );
- }
+ if ( $fld_hitcount ) {
+ $tag['hitcount'] = $hitcount;
+ }
- if ( $this->fld_description ) {
- $msg = wfMessage( "tag-$tagName-description" );
- $tag['description'] = $msg->exists() ? $msg->text() : '';
- }
+ $isExtension = isset( $extensionDefinedTags[$tagName] );
+ $isExplicit = isset( $explicitlyDefinedTags[$tagName] );
- if ( $this->fld_hitcount ) {
- $tag['hitcount'] = $hitcount;
- }
+ if ( $fld_defined ) {
+ $tag['defined'] = $isExtension || $isExplicit;
+ }
- $doneTags[] = $tagName;
+ if ( $fld_source ) {
+ $tag['source'] = array();
+ if ( $isExtension ) {
+ $tag['source'][] = 'extension';
+ }
+ if ( $isExplicit ) {
+ $tag['source'][] = 'manual';
+ }
+ }
- $fit = $this->result->addValue( array( 'query', $this->getModuleName() ), null, $tag );
- if ( !$fit ) {
- $this->setContinueEnumParameter( 'continue', $tagName );
+ if ( $fld_active ) {
+ $tag['active'] = $isExplicit || isset( $extensionActivatedTags[$tagName] );
+ }
- return false;
+ $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $tag );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'continue', $tagName );
+ break;
+ }
}
- return true;
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'tag' );
}
public function getCacheMode( $params ) {
@@ -135,7 +142,9 @@ class ApiQueryTags extends ApiQueryBase {
public function getAllowedParams() {
return array(
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'limit' => array(
ApiBase::PARAM_DFLT => 10,
ApiBase::PARAM_TYPE => 'limit',
@@ -149,34 +158,20 @@ class ApiQueryTags extends ApiQueryBase {
'name',
'displayname',
'description',
- 'hitcount'
+ 'hitcount',
+ 'defined',
+ 'source',
+ 'active',
),
ApiBase::PARAM_ISMULTI => true
)
);
}
- public function getParamDescription() {
- return array(
- 'continue' => 'When more results are available, use this to continue',
- 'limit' => 'The maximum number of tags to list',
- 'prop' => array(
- 'Which properties to get',
- ' name - Adds name of tag',
- ' displayname - Adds system message for the tag',
- ' description - Adds description of the tag',
- ' hitcount - Adds the amount of revisions that have this tag',
- ),
- );
- }
-
- public function getDescription() {
- return 'List change tags.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=tags&tgprop=displayname|description|hitcount'
+ 'action=query&list=tags&tgprop=displayname|description|hitcount|defined'
+ => 'apihelp-query+tags-example-simple',
);
}
diff --git a/includes/api/ApiQueryTokens.php b/includes/api/ApiQueryTokens.php
index ba9c9377..65a08a3b 100644
--- a/includes/api/ApiQueryTokens.php
+++ b/includes/api/ApiQueryTokens.php
@@ -35,10 +35,12 @@ class ApiQueryTokens extends ApiQueryBase {
public function execute() {
$params = $this->extractRequestParams();
- $res = array();
+ $res = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
- if ( $this->getMain()->getRequest()->getVal( 'callback' ) !== null ) {
- $this->setWarning( 'Tokens may not be obtained when using a callback' );
+ if ( $this->lacksSameOriginSecurity() ) {
+ $this->setWarning( 'Tokens may not be obtained when the same-origin policy is not applied' );
return;
}
@@ -55,7 +57,6 @@ class ApiQueryTokens extends ApiQueryBase {
public static function getTokenTypeSalts() {
static $salts = null;
if ( !$salts ) {
- wfProfileIn( __METHOD__ );
$salts = array(
'csrf' => '',
'watch' => 'watch',
@@ -63,9 +64,8 @@ class ApiQueryTokens extends ApiQueryBase {
'rollback' => 'rollback',
'userrights' => 'userrights',
);
- wfRunHooks( 'ApiQueryTokensRegisterTypes', array( &$salts ) );
+ Hooks::run( 'ApiQueryTokensRegisterTypes', array( &$salts ) );
ksort( $salts );
- wfProfileOut( __METHOD__ );
}
return $salts;
@@ -81,20 +81,12 @@ class ApiQueryTokens extends ApiQueryBase {
);
}
- public function getParamDescription() {
- return array(
- 'type' => 'Type of token(s) to request'
- );
- }
-
- public function getDescription() {
- return 'Gets tokens for data-modifying actions.';
- }
-
- protected function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&meta=tokens' => 'Retrieve a csrf token (the default)',
- 'api.php?action=query&meta=tokens&type=watch|patrol' => 'Retrieve a watch token and a patrol token'
+ 'action=query&meta=tokens'
+ => 'apihelp-query+tokens-example-simple',
+ 'action=query&meta=tokens&type=watch|patrol'
+ => 'apihelp-query+tokens-example-types',
);
}
diff --git a/includes/api/ApiQueryUserContributions.php b/includes/api/ApiQueryUserContributions.php
index 4b167b8b..e5ec67d0 100644
--- a/includes/api/ApiQueryUserContributions.php
+++ b/includes/api/ApiQueryUserContributions.php
@@ -120,7 +120,7 @@ class ApiQueryContributions extends ApiQueryBase {
}
}
- $this->getResult()->setIndexedTagName_internal(
+ $this->getResult()->addIndexedTagName(
array( 'query', $this->getModuleName() ),
'item'
);
@@ -335,7 +335,7 @@ class ApiQueryContributions extends ApiQueryBase {
$anyHidden = false;
if ( $row->rev_deleted & Revision::DELETED_TEXT ) {
- $vals['texthidden'] = '';
+ $vals['texthidden'] = true;
$anyHidden = true;
}
@@ -343,7 +343,7 @@ class ApiQueryContributions extends ApiQueryBase {
$vals['userid'] = $row->rev_user;
$vals['user'] = $row->rev_user_text;
if ( $row->rev_deleted & Revision::DELETED_USER ) {
- $vals['userhidden'] = '';
+ $vals['userhidden'] = true;
$anyHidden = true;
}
if ( $this->fld_ids ) {
@@ -367,20 +367,14 @@ class ApiQueryContributions extends ApiQueryBase {
}
if ( $this->fld_flags ) {
- if ( $row->rev_parent_id == 0 && !is_null( $row->rev_parent_id ) ) {
- $vals['new'] = '';
- }
- if ( $row->rev_minor_edit ) {
- $vals['minor'] = '';
- }
- if ( $row->page_latest == $row->rev_id ) {
- $vals['top'] = '';
- }
+ $vals['new'] = $row->rev_parent_id == 0 && !is_null( $row->rev_parent_id );
+ $vals['minor'] = (bool)$row->rev_minor_edit;
+ $vals['top'] = $row->page_latest == $row->rev_id;
}
if ( ( $this->fld_comment || $this->fld_parsedcomment ) && isset( $row->rev_comment ) ) {
if ( $row->rev_deleted & Revision::DELETED_COMMENT ) {
- $vals['commenthidden'] = '';
+ $vals['commenthidden'] = true;
$anyHidden = true;
}
@@ -400,8 +394,8 @@ class ApiQueryContributions extends ApiQueryBase {
}
}
- if ( $this->fld_patrolled && $row->rc_patrolled ) {
- $vals['patrolled'] = '';
+ if ( $this->fld_patrolled ) {
+ $vals['patrolled'] = (bool)$row->rc_patrolled;
}
if ( $this->fld_size && !is_null( $row->rev_len ) ) {
@@ -421,7 +415,7 @@ class ApiQueryContributions extends ApiQueryBase {
if ( $this->fld_tags ) {
if ( $row->ts_tags ) {
$tags = explode( ',', $row->ts_tags );
- $this->getResult()->setIndexedTagName( $tags, 'tag' );
+ ApiResult::setIndexedTagName( $tags, 'tag' );
$vals['tags'] = $tags;
} else {
$vals['tags'] = array();
@@ -429,7 +423,7 @@ class ApiQueryContributions extends ApiQueryBase {
}
if ( $anyHidden && $row->rev_deleted & Revision::DELETED_RESTRICTED ) {
- $vals['suppressed'] = '';
+ $vals['suppressed'] = true;
}
return $vals;
@@ -464,7 +458,9 @@ class ApiQueryContributions extends ApiQueryBase {
'end' => array(
ApiBase::PARAM_TYPE => 'timestamp'
),
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'user' => array(
ApiBase::PARAM_ISMULTI => true
),
@@ -474,7 +470,8 @@ class ApiQueryContributions extends ApiQueryBase {
ApiBase::PARAM_TYPE => array(
'newer',
'older'
- )
+ ),
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
),
'namespace' => array(
ApiBase::PARAM_ISMULTI => true,
@@ -507,7 +504,11 @@ class ApiQueryContributions extends ApiQueryBase {
'!top',
'new',
'!new',
- )
+ ),
+ ApiBase::PARAM_HELP_MSG => array(
+ 'apihelp-query+usercontribs-param-show',
+ $this->getConfig()->get( 'RCMaxAge' )
+ ),
),
'tag' => null,
'toponly' => array(
@@ -517,53 +518,12 @@ class ApiQueryContributions extends ApiQueryBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
- $RCMaxAge = $this->getConfig()->get( 'RCMaxAge' );
-
- return array(
- 'limit' => 'The maximum number of contributions to return',
- 'start' => 'The start timestamp to return from',
- 'end' => 'The end timestamp to return to',
- 'continue' => 'When more results are available, use this to continue',
- 'user' => 'The users to retrieve contributions for',
- 'userprefix' => array(
- "Retrieve contributions for all users whose names begin with this value.",
- "Overrides {$p}user",
- ),
- 'dir' => $this->getDirectionDescription( $p ),
- 'namespace' => 'Only list contributions in these namespaces',
- 'prop' => array(
- 'Include additional pieces of information',
- ' ids - Adds the page ID and revision ID',
- ' title - Adds the title and namespace ID of the page',
- ' timestamp - Adds the timestamp of the edit',
- ' comment - Adds the comment of the edit',
- ' parsedcomment - Adds the parsed comment of the edit',
- ' size - Adds the new size of the edit',
- ' sizediff - Adds the size delta of the edit against its parent',
- ' flags - Adds flags of the edit',
- ' patrolled - Tags patrolled edits',
- ' tags - Lists tags for the edit',
- ),
- 'show' => array(
- "Show only items that meet thse criteria, e.g. non minor edits only: {$p}show=!minor",
- "NOTE: If {$p}show=patrolled or {$p}show=!patrolled is set, revisions older than",
- "\$wgRCMaxAge ($RCMaxAge) won't be shown",
- ),
- 'tag' => 'Only list revisions tagged with this tag',
- 'toponly' => 'Only list changes which are the latest revision',
- );
- }
-
- public function getDescription() {
- return 'Get all edits by a user.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=usercontribs&ucuser=YurikBot',
- 'api.php?action=query&list=usercontribs&ucuserprefix=217.121.114.',
+ 'action=query&list=usercontribs&ucuser=Example'
+ => 'apihelp-query+usercontribs-example-user',
+ 'action=query&list=usercontribs&ucuserprefix=192.0.2.'
+ => 'apihelp-query+usercontribs-example-ipprefix',
);
}
diff --git a/includes/api/ApiQueryUserInfo.php b/includes/api/ApiQueryUserInfo.php
index fd5f47b4..4a7d1e0f 100644
--- a/includes/api/ApiQueryUserInfo.php
+++ b/includes/api/ApiQueryUserInfo.php
@@ -59,7 +59,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
$vals['name'] = $user->getName();
if ( $user->isAnon() ) {
- $vals['anon'] = '';
+ $vals['anon'] = true;
}
if ( isset( $this->prop['blockinfo'] ) ) {
@@ -76,36 +76,40 @@ class ApiQueryUserInfo extends ApiQueryBase {
}
}
- if ( isset( $this->prop['hasmsg'] ) && $user->getNewtalk() ) {
- $vals['messages'] = '';
+ if ( isset( $this->prop['hasmsg'] ) ) {
+ $vals['messages'] = $user->getNewtalk();
}
if ( isset( $this->prop['groups'] ) ) {
$vals['groups'] = $user->getEffectiveGroups();
- $result->setIndexedTagName( $vals['groups'], 'g' ); // even if empty
+ ApiResult::setArrayType( $vals['groups'], 'array' ); // even if empty
+ ApiResult::setIndexedTagName( $vals['groups'], 'g' ); // even if empty
}
if ( isset( $this->prop['implicitgroups'] ) ) {
$vals['implicitgroups'] = $user->getAutomaticGroups();
- $result->setIndexedTagName( $vals['implicitgroups'], 'g' ); // even if empty
+ ApiResult::setArrayType( $vals['implicitgroups'], 'array' ); // even if empty
+ ApiResult::setIndexedTagName( $vals['implicitgroups'], 'g' ); // even if empty
}
if ( isset( $this->prop['rights'] ) ) {
// User::getRights() may return duplicate values, strip them
$vals['rights'] = array_values( array_unique( $user->getRights() ) );
- $result->setIndexedTagName( $vals['rights'], 'r' ); // even if empty
+ ApiResult::setArrayType( $vals['rights'], 'array' ); // even if empty
+ ApiResult::setIndexedTagName( $vals['rights'], 'r' ); // even if empty
}
if ( isset( $this->prop['changeablegroups'] ) ) {
$vals['changeablegroups'] = $user->changeableGroups();
- $result->setIndexedTagName( $vals['changeablegroups']['add'], 'g' );
- $result->setIndexedTagName( $vals['changeablegroups']['remove'], 'g' );
- $result->setIndexedTagName( $vals['changeablegroups']['add-self'], 'g' );
- $result->setIndexedTagName( $vals['changeablegroups']['remove-self'], 'g' );
+ ApiResult::setIndexedTagName( $vals['changeablegroups']['add'], 'g' );
+ ApiResult::setIndexedTagName( $vals['changeablegroups']['remove'], 'g' );
+ ApiResult::setIndexedTagName( $vals['changeablegroups']['add-self'], 'g' );
+ ApiResult::setIndexedTagName( $vals['changeablegroups']['remove-self'], 'g' );
}
if ( isset( $this->prop['options'] ) ) {
$vals['options'] = $user->getOptions();
+ $vals['options'][ApiResult::META_BC_BOOLS] = array_keys( $vals['options'] );
}
if ( isset( $this->prop['preferencestoken'] ) ) {
@@ -115,7 +119,7 @@ class ApiQueryUserInfo extends ApiQueryBase {
);
}
if ( isset( $this->prop['preferencestoken'] ) &&
- is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) &&
+ !$this->lacksSameOriginSecurity() &&
$user->isAllowed( 'editmyoptions' )
) {
$vals['preferencestoken'] = $user->getEditToken( '', $this->getMain()->getRequest() );
@@ -157,19 +161,19 @@ class ApiQueryUserInfo extends ApiQueryBase {
$acceptLang = array();
foreach ( $langs as $lang => $val ) {
$r = array( 'q' => $val );
- ApiResult::setContent( $r, $lang );
+ ApiResult::setContentValue( $r, 'code', $lang );
$acceptLang[] = $r;
}
- $result->setIndexedTagName( $acceptLang, 'lang' );
+ ApiResult::setIndexedTagName( $acceptLang, 'lang' );
$vals['acceptlang'] = $acceptLang;
}
if ( isset( $this->prop['unreadcount'] ) ) {
$dbr = $this->getQuery()->getNamedDB( 'watchlist', DB_SLAVE, 'watchlist' );
- $sql = $dbr->selectSQLText(
+ $count = $dbr->selectRowCount(
'watchlist',
- array( 'dummy' => 1 ),
+ '1',
array(
'wl_user' => $user->getId(),
'wl_notificationtimestamp IS NOT NULL',
@@ -177,12 +181,11 @@ class ApiQueryUserInfo extends ApiQueryBase {
__METHOD__,
array( 'LIMIT' => self::WL_UNREAD_LIMIT )
);
- $count = $dbr->selectField( array( 'c' => "($sql)" ), 'COUNT(*)' );
if ( $count >= self::WL_UNREAD_LIMIT ) {
$vals['unreadcount'] = self::WL_UNREAD_LIMIT . '+';
} else {
- $vals['unreadcount'] = (int)$count;
+ $vals['unreadcount'] = $count;
}
}
@@ -190,9 +193,13 @@ class ApiQueryUserInfo extends ApiQueryBase {
}
protected function getRateLimits() {
+ $retval = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
+
$user = $this->getUser();
if ( !$user->isPingLimitable() ) {
- return array(); // No limits
+ return $retval; // No limits
}
// Find out which categories we belong to
@@ -212,7 +219,6 @@ class ApiQueryUserInfo extends ApiQueryBase {
$categories = array_merge( $categories, $user->getGroups() );
// Now get the actual limits
- $retval = array();
foreach ( $this->getConfig()->get( 'RateLimits' ) as $action => $limits ) {
foreach ( $categories as $cat ) {
if ( isset( $limits[$cat] ) && !is_null( $limits[$cat] ) ) {
@@ -246,45 +252,22 @@ class ApiQueryUserInfo extends ApiQueryBase {
'acceptlang',
'registrationdate',
'unreadcount',
- )
- )
- );
- }
-
- public function getParamDescription() {
- return array(
- 'prop' => array(
- 'What pieces of information to include',
- ' blockinfo - Tags if the current user is blocked, by whom, and for what reason',
- ' hasmsg - Adds a tag "message" if the current user has pending messages',
- ' groups - Lists all the groups the current user belongs to',
- ' implicitgroups - Lists all the groups the current user is automatically a member of',
- ' rights - Lists all the rights the current user has',
- ' changeablegroups - Lists the groups the current user can add to and remove from',
- ' options - Lists all preferences the current user has set',
- ' preferencestoken - DEPRECATED! Get a token to change current user\'s preferences',
- ' editcount - Adds the current user\'s edit count',
- ' ratelimits - Lists all rate limits applying to the current user',
- ' realname - Adds the user\'s real name',
- ' email - Adds the user\'s email address and email authentication date',
- ' acceptlang - Echoes the Accept-Language header sent by ' .
- 'the client in a structured format',
- ' registrationdate - Adds the user\'s registration date',
- ' unreadcount - Adds the count of unread pages on the user\'s watchlist ' .
- '(maximum ' . ( self::WL_UNREAD_LIMIT - 1 ) . '; returns "' .
- self::WL_UNREAD_LIMIT . '+" if more)',
+ ),
+ ApiBase::PARAM_HELP_MSG => array(
+ 'apihelp-query+userinfo-param-prop',
+ self::WL_UNREAD_LIMIT - 1,
+ self::WL_UNREAD_LIMIT . '+',
+ ),
)
);
}
- public function getDescription() {
- return 'Get information about the current user.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&meta=userinfo',
- 'api.php?action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg',
+ 'action=query&meta=userinfo'
+ => 'apihelp-query+userinfo-example-simple',
+ 'action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg'
+ => 'apihelp-query+userinfo-example-data',
);
}
diff --git a/includes/api/ApiQueryUsers.php b/includes/api/ApiQueryUsers.php
index 2f5e4b4b..f22c2134 100644
--- a/includes/api/ApiQueryUsers.php
+++ b/includes/api/ApiQueryUsers.php
@@ -67,15 +67,16 @@ class ApiQueryUsers extends ApiQueryBase {
return $this->tokenFunctions;
}
- // If we're in JSON callback mode, no tokens can be obtained
- if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
return array();
}
$this->tokenFunctions = array(
'userrights' => array( 'ApiQueryUsers', 'getUserrightsToken' ),
);
- wfRunHooks( 'APIQueryUsersTokens', array( &$this->tokenFunctions ) );
+ Hooks::run( 'APIQueryUsersTokens', array( &$this->tokenFunctions ) );
return $this->tokenFunctions;
}
@@ -109,7 +110,7 @@ class ApiQueryUsers extends ApiQueryBase {
foreach ( $users as $u ) {
$n = User::getCanonicalName( $u );
if ( $n === false || $n === '' ) {
- $vals = array( 'name' => $u, 'invalid' => '' );
+ $vals = array( 'name' => $u, 'invalid' => true );
$fit = $result->addValue( array( 'query', $this->getModuleName() ),
null, $vals );
if ( !$fit ) {
@@ -189,7 +190,7 @@ class ApiQueryUsers extends ApiQueryBase {
$data[$name]['rights'] = $user->getRights();
}
if ( $row->ipb_deleted ) {
- $data[$name]['hidden'] = '';
+ $data[$name]['hidden'] = true;
}
if ( isset( $this->prop['blockinfo'] ) && !is_null( $row->ipb_by_text ) ) {
$data[$name]['blockid'] = $row->ipb_id;
@@ -200,8 +201,8 @@ class ApiQueryUsers extends ApiQueryBase {
$data[$name]['blockexpiry'] = $row->ipb_expiry;
}
- if ( isset( $this->prop['emailable'] ) && $user->canReceiveEmail() ) {
- $data[$name]['emailable'] = '';
+ if ( isset( $this->prop['emailable'] ) ) {
+ $data[$name]['emailable'] = $user->canReceiveEmail();
}
if ( isset( $this->prop['gender'] ) ) {
@@ -236,7 +237,7 @@ class ApiQueryUsers extends ApiQueryBase {
$iwUser = $urPage->fetchUser( $u );
if ( $iwUser instanceof UserRightsProxy ) {
- $data[$u]['interwiki'] = '';
+ $data[$u]['interwiki'] = true;
if ( !is_null( $params['token'] ) ) {
$tokenFunctions = $this->getTokenFunctions();
@@ -251,17 +252,20 @@ class ApiQueryUsers extends ApiQueryBase {
}
}
} else {
- $data[$u]['missing'] = '';
+ $data[$u]['missing'] = true;
}
} else {
if ( isset( $this->prop['groups'] ) && isset( $data[$u]['groups'] ) ) {
- $result->setIndexedTagName( $data[$u]['groups'], 'g' );
+ ApiResult::setArrayType( $data[$u]['groups'], 'array' );
+ ApiResult::setIndexedTagName( $data[$u]['groups'], 'g' );
}
if ( isset( $this->prop['implicitgroups'] ) && isset( $data[$u]['implicitgroups'] ) ) {
- $result->setIndexedTagName( $data[$u]['implicitgroups'], 'g' );
+ ApiResult::setArrayType( $data[$u]['implicitgroups'], 'array' );
+ ApiResult::setIndexedTagName( $data[$u]['implicitgroups'], 'g' );
}
if ( isset( $this->prop['rights'] ) && isset( $data[$u]['rights'] ) ) {
- $result->setIndexedTagName( $data[$u]['rights'], 'r' );
+ ApiResult::setArrayType( $data[$u]['rights'], 'array' );
+ ApiResult::setIndexedTagName( $data[$u]['rights'], 'r' );
}
}
@@ -274,20 +278,7 @@ class ApiQueryUsers extends ApiQueryBase {
}
$done[] = $u;
}
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'user' );
- }
-
- /**
- * Gets all the groups that a user is automatically a member of (implicit groups)
- *
- * @deprecated since 1.20; call User::getAutomaticGroups() directly.
- * @param User $user
- * @return array
- */
- public static function getAutoGroups( $user ) {
- wfDeprecated( __METHOD__, '1.20' );
-
- return $user->getAutomaticGroups();
+ $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'user' );
}
public function getCacheMode( $params ) {
@@ -327,33 +318,13 @@ class ApiQueryUsers extends ApiQueryBase {
);
}
- public function getParamDescription() {
+ protected function getExamplesMessages() {
return array(
- 'prop' => array(
- 'What pieces of information to include',
- ' blockinfo - Tags if the user is blocked, by whom, and for what reason',
- ' groups - Lists all the groups the user(s) belongs to',
- ' implicitgroups - Lists all the groups a user is automatically a member of',
- ' rights - Lists all the rights the user(s) has',
- ' editcount - Adds the user\'s edit count',
- ' registration - Adds the user\'s registration timestamp',
- ' emailable - Tags if the user can and wants to receive ' .
- 'email through [[Special:Emailuser]]',
- ' gender - Tags the gender of the user. Returns "male", "female", or "unknown"',
- ),
- 'users' => 'A list of users to obtain the same information for',
- 'token' => 'Which tokens to obtain for each user',
+ 'action=query&list=users&ususers=Example&usprop=groups|editcount|gender'
+ => 'apihelp-query+users-example-simple',
);
}
- public function getDescription() {
- return 'Get information about a list of users.';
- }
-
- public function getExamples() {
- return 'api.php?action=query&list=users&ususers=brion|TimStarling&usprop=groups|editcount|gender';
- }
-
public function getHelpUrls() {
return 'https://www.mediawiki.org/wiki/API:Users';
}
diff --git a/includes/api/ApiQueryWatchlist.php b/includes/api/ApiQueryWatchlist.php
index efbe05ee..9f7387c7 100644
--- a/includes/api/ApiQueryWatchlist.php
+++ b/includes/api/ApiQueryWatchlist.php
@@ -199,7 +199,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
if ( !is_null( $params['type'] ) ) {
try {
$this->addWhereFld( 'rc_type', RecentChange::parseToRCType( $params['type'] ) );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
ApiBase::dieDebug( __METHOD__, $e->getMessage() );
}
}
@@ -281,7 +281,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
}
if ( is_null( $resultPageSet ) ) {
- $this->getResult()->setIndexedTagName_internal(
+ $this->getResult()->addIndexedTagName(
array( 'query', $this->getModuleName() ),
'item'
);
@@ -307,7 +307,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
if ( $this->fld_title || $this->fld_ids ) {
// These should already have been filtered out of the query, but just in case.
if ( $type === RC_LOG && ( $row->rc_deleted & LogPage::DELETED_ACTION ) ) {
- $vals['actionhidden'] = '';
+ $vals['actionhidden'] = true;
$anyHidden = true;
}
if ( $type !== RC_LOG ||
@@ -327,7 +327,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
/* Add user data and 'anon' flag, if user is anonymous. */
if ( $this->fld_user || $this->fld_userid ) {
if ( $row->rc_deleted & Revision::DELETED_USER ) {
- $vals['userhidden'] = '';
+ $vals['userhidden'] = true;
$anyHidden = true;
}
if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_USER, $user ) ) {
@@ -342,22 +342,16 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
}
if ( !$row->rc_user ) {
- $vals['anon'] = '';
+ $vals['anon'] = true;
}
}
}
/* Add flags, such as new, minor, bot. */
if ( $this->fld_flags ) {
- if ( $row->rc_bot ) {
- $vals['bot'] = '';
- }
- if ( $row->rc_type == RC_NEW ) {
- $vals['new'] = '';
- }
- if ( $row->rc_minor ) {
- $vals['minor'] = '';
- }
+ $vals['bot'] = (bool)$row->rc_bot;
+ $vals['new'] = $row->rc_type == RC_NEW;
+ $vals['minor'] = (bool)$row->rc_minor;
}
/* Add sizes of each revision. (Only available on 1.10+) */
@@ -380,7 +374,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
/* Add edit summary / log summary. */
if ( $this->fld_comment || $this->fld_parsedcomment ) {
if ( $row->rc_deleted & Revision::DELETED_COMMENT ) {
- $vals['commenthidden'] = '';
+ $vals['commenthidden'] = true;
$anyHidden = true;
}
if ( Revision::userCanBitfield( $row->rc_deleted, Revision::DELETED_COMMENT, $user ) ) {
@@ -395,37 +389,26 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
}
/* Add the patrolled flag */
- if ( $this->fld_patrol && $row->rc_patrolled == 1 ) {
- $vals['patrolled'] = '';
- }
-
- if ( $this->fld_patrol && ChangesList::isUnpatrolled( $row, $user ) ) {
- $vals['unpatrolled'] = '';
+ if ( $this->fld_patrol ) {
+ $vals['patrolled'] = $row->rc_patrolled == 1;
+ $vals['unpatrolled'] = ChangesList::isUnpatrolled( $row, $user );
}
if ( $this->fld_loginfo && $row->rc_type == RC_LOG ) {
if ( $row->rc_deleted & LogPage::DELETED_ACTION ) {
- $vals['actionhidden'] = '';
+ $vals['actionhidden'] = true;
$anyHidden = true;
}
if ( LogEventsList::userCanBitfield( $row->rc_deleted, LogPage::DELETED_ACTION, $user ) ) {
$vals['logid'] = intval( $row->rc_logid );
$vals['logtype'] = $row->rc_log_type;
$vals['logaction'] = $row->rc_log_action;
- $logEntry = DatabaseLogEntry::newFromRow( (array)$row );
- ApiQueryLogEvents::addLogParams(
- $this->getResult(),
- $vals,
- $logEntry->getParameters(),
- $logEntry->getType(),
- $logEntry->getSubtype(),
- $logEntry->getTimestamp()
- );
+ $vals['logparams'] = LogFormatter::newFromRow( $row )->formatParametersForApi();
}
}
if ( $anyHidden && ( $row->rc_deleted & Revision::DELETED_RESTRICTED ) ) {
- $vals['suppressed'] = '';
+ $vals['suppressed'] = true;
}
return $vals;
@@ -455,7 +438,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
ApiBase::PARAM_TYPE => array(
'newer',
'older'
- )
+ ),
+ ApiHelp::PARAM_HELP_MSG => 'api-help-param-direction',
),
'limit' => array(
ApiBase::PARAM_DFLT => 10,
@@ -498,6 +482,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
)
),
'type' => array(
+ ApiBase::PARAM_DFLT => 'edit|new|log',
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => array(
'edit',
@@ -512,67 +497,26 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
'token' => array(
ApiBase::PARAM_TYPE => 'string'
),
- 'continue' => null,
- );
- }
-
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'allrev' => 'Include multiple revisions of the same page within given timeframe',
- 'start' => 'The timestamp to start enumerating from',
- 'end' => 'The timestamp to end enumerating',
- 'namespace' => 'Filter changes to only the given namespace(s)',
- 'user' => 'Only list changes by this user',
- 'excludeuser' => 'Don\'t list changes by this user',
- 'dir' => $this->getDirectionDescription( $p ),
- 'limit' => 'How many total results to return per request',
- 'prop' => array(
- 'Which additional items to get (non-generator mode only).',
- ' ids - Adds revision ids and page ids',
- ' title - Adds title of the page',
- ' flags - Adds flags for the edit',
- ' user - Adds the user who made the edit',
- ' userid - Adds user id of whom made the edit',
- ' comment - Adds comment of the edit',
- ' parsedcomment - Adds parsed comment of the edit',
- ' timestamp - Adds timestamp of the edit',
- ' patrol - Tags edits that are patrolled',
- ' sizes - Adds the old and new lengths of the page',
- ' notificationtimestamp - Adds timestamp of when the user was last notified about the edit',
- ' loginfo - Adds log information where appropriate',
- ),
- 'show' => array(
- 'Show only items that meet this criteria.',
- "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon"
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
),
- 'type' => array(
- 'Which types of changes to show',
- ' edit - Regular page edits',
- ' external - External changes',
- ' new - Page creations',
- ' log - Log entries',
- ),
- 'owner' => 'The name of the user whose watchlist you\'d like to access',
- 'token' => 'Give a security token (settable in preferences) to ' .
- 'allow access to another user\'s watchlist',
- 'continue' => 'When more results are available, use this to continue',
);
}
- public function getDescription() {
- return "Get all recent changes to pages in the logged in user's watchlist.";
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=watchlist',
- 'api.php?action=query&list=watchlist&wlprop=ids|title|timestamp|user|comment',
- 'api.php?action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment',
- 'api.php?action=query&generator=watchlist&prop=info',
- 'api.php?action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user',
- 'api.php?action=query&list=watchlist&wlowner=Bob_Smith&wltoken=123ABC'
+ 'action=query&list=watchlist'
+ => 'apihelp-query+watchlist-example-simple',
+ 'action=query&list=watchlist&wlprop=ids|title|timestamp|user|comment'
+ => 'apihelp-query+watchlist-example-props',
+ 'action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment'
+ => 'apihelp-query+watchlist-example-allrev',
+ 'action=query&generator=watchlist&prop=info'
+ => 'apihelp-query+watchlist-example-generator',
+ 'action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user'
+ => 'apihelp-query+watchlist-example-generator-rev',
+ 'action=query&list=watchlist&wlowner=Example&wltoken=123ABC'
+ => 'apihelp-query+watchlist-example-wlowner',
);
}
diff --git a/includes/api/ApiQueryWatchlistRaw.php b/includes/api/ApiQueryWatchlistRaw.php
index 6b2223ac..493c192a 100644
--- a/includes/api/ApiQueryWatchlistRaw.php
+++ b/includes/api/ApiQueryWatchlistRaw.php
@@ -123,7 +123,7 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
}
}
if ( is_null( $resultPageSet ) ) {
- $this->getResult()->setIndexedTagName_internal( $this->getModuleName(), 'wr' );
+ $this->getResult()->addIndexedTagName( $this->getModuleName(), 'wr' );
} else {
$resultPageSet->populateFromTitles( $titles );
}
@@ -131,7 +131,9 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
public function getAllowedParams() {
return array(
- 'continue' => null,
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
'namespace' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => 'namespace'
@@ -168,35 +170,17 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
'ascending',
'descending'
),
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
),
);
}
- public function getParamDescription() {
- return array(
- 'continue' => 'When more results are available, use this to continue',
- 'namespace' => 'Only list pages in the given namespace(s)',
- 'limit' => 'How many total results to return per request',
- 'prop' => array(
- 'Which additional properties to get (non-generator mode only)',
- ' changed - Adds timestamp of when the user was last notified about the edit',
- ),
- 'show' => 'Only list items that meet these criteria',
- 'owner' => 'The name of the user whose watchlist you\'d like to access',
- 'token' => 'Give a security token (settable in preferences) to allow ' .
- 'access to another user\'s watchlist',
- 'dir' => 'Direction to sort the titles and namespaces in',
- );
- }
-
- public function getDescription() {
- return "Get all pages on the logged in user's watchlist.";
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=query&list=watchlistraw',
- 'api.php?action=query&generator=watchlistraw&gwrshow=changed&prop=revisions',
+ 'action=query&list=watchlistraw'
+ => 'apihelp-query+watchlistraw-example-simple',
+ 'action=query&generator=watchlistraw&gwrshow=changed&prop=info'
+ => 'apihelp-query+watchlistraw-example-generator',
);
}
diff --git a/includes/api/ApiResult.php b/includes/api/ApiResult.php
index 2e80447e..7c573a8f 100644
--- a/includes/api/ApiResult.php
+++ b/includes/api/ApiResult.php
@@ -1,11 +1,5 @@
<?php
/**
- *
- *
- * Created on Sep 4, 2006
- *
- * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
- *
* 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
@@ -33,156 +27,266 @@
* Each subarray may either be a dictionary - key-value pairs with unique keys,
* or lists, where the items are added using $data[] = $value notation.
*
- * There are three special key values that change how XML output is generated:
- * '_element' This key sets the tag name for the rest of the elements in the current array.
- * It is only inserted if the formatter returned true for getNeedsRawData()
- * '_subelements' This key causes the specified elements to be returned as subelements rather than attributes.
- * It is only inserted if the formatter returned true for getNeedsRawData()
- * '*' This key has special meaning only to the XML formatter, and is outputted as is
- * for all others. In XML it becomes the content of the current element.
- *
+ * @since 1.25 this is no longer a subclass of ApiBase
* @ingroup API
*/
-class ApiResult extends ApiBase {
+class ApiResult implements ApiSerializable {
/**
- * override existing value in addValue() and setElement()
+ * Override existing value in addValue(), setValue(), and similar functions
* @since 1.21
*/
const OVERRIDE = 1;
/**
- * For addValue() and setElement(), if the value does not exist, add it as the first element.
- * In case the new value has no name (numerical index), all indexes will be renumbered.
+ * For addValue(), setValue() and similar functions, if the value does not
+ * exist, add it as the first element. In case the new value has no name
+ * (numerical index), all indexes will be renumbered.
* @since 1.21
*/
const ADD_ON_TOP = 2;
/**
- * For addValue() and setElement(), do not check size while adding a value
+ * For addValue() and similar functions, do not check size while adding a value
* Don't use this unless you REALLY know what you're doing.
- * Values added while the size checking was disabled will never be counted
+ * Values added while the size checking was disabled will never be counted.
+ * Ignored for setValue() and similar functions.
* @since 1.24
*/
const NO_SIZE_CHECK = 4;
- private $mData, $mIsRawMode, $mSize, $mCheckingSize;
+ /**
+ * For addValue(), setValue() and similar functions, do not validate data.
+ * Also disables size checking. If you think you need to use this, you're
+ * probably wrong.
+ * @since 1.25
+ */
+ const NO_VALIDATE = 12;
- private $continueAllModules = array();
- private $continueGeneratedModules = array();
- private $continuationData = array();
- private $generatorContinuationData = array();
- private $generatorParams = array();
- private $generatorDone = false;
+ /**
+ * Key for the 'indexed tag name' metadata item. Value is string.
+ * @since 1.25
+ */
+ const META_INDEXED_TAG_NAME = '_element';
/**
- * @param ApiMain $main
+ * Key for the 'subelements' metadata item. Value is string[].
+ * @since 1.25
*/
- public function __construct( ApiMain $main ) {
- parent::__construct( $main, 'result' );
- $this->mIsRawMode = false;
- $this->mCheckingSize = true;
- $this->reset();
- }
+ const META_SUBELEMENTS = '_subelements';
/**
- * Clear the current result data.
+ * Key for the 'preserve keys' metadata item. Value is string[].
+ * @since 1.25
*/
- public function reset() {
- $this->mData = array();
- $this->mSize = 0;
- }
+ const META_PRESERVE_KEYS = '_preservekeys';
/**
- * Call this function when special elements such as '_element'
- * are needed by the formatter, for example in XML printing.
- * @since 1.23 $flag parameter added
- * @param bool $flag Set the raw mode flag to this state
+ * Key for the 'content' metadata item. Value is string.
+ * @since 1.25
*/
- public function setRawMode( $flag = true ) {
- $this->mIsRawMode = $flag;
- }
+ const META_CONTENT = '_content';
/**
- * Returns true whether the formatter requested raw data.
- * @return bool
+ * Key for the 'type' metadata item. Value is one of the following strings:
+ * - default: Like 'array' if all (non-metadata) keys are numeric with no
+ * gaps, otherwise like 'assoc'.
+ * - array: Keys are used for ordering, but are not output. In a format
+ * like JSON, outputs as [].
+ * - assoc: In a format like JSON, outputs as {}.
+ * - kvp: For a format like XML where object keys have a restricted
+ * character set, use an alternative output format. For example,
+ * <container><item name="key">value</item></container> rather than
+ * <container key="value" />
+ * - BCarray: Like 'array' normally, 'default' in backwards-compatibility mode.
+ * - BCassoc: Like 'assoc' normally, 'default' in backwards-compatibility mode.
+ * - BCkvp: Like 'kvp' normally. In backwards-compatibility mode, forces
+ * the alternative output format for all formats, for example
+ * [{"name":key,"*":value}] in JSON. META_KVP_KEY_NAME must also be set.
+ * @since 1.25
*/
- public function getIsRawMode() {
- return $this->mIsRawMode;
- }
+ const META_TYPE = '_type';
/**
- * Get the result's internal data array (read-only)
- * @return array
+ * Key (rather than "name" or other default) for when META_TYPE is 'kvp' or
+ * 'BCkvp'. Value is string.
+ * @since 1.25
*/
- public function getData() {
- return $this->mData;
- }
+ const META_KVP_KEY_NAME = '_kvpkeyname';
/**
- * Get the 'real' size of a result item. This means the strlen() of the item,
- * or the sum of the strlen()s of the elements if the item is an array.
- * @param mixed $value
- * @return int
+ * Key for the 'BC bools' metadata item. Value is string[].
+ * Note no setter is provided.
+ * @since 1.25
*/
- public static function size( $value ) {
- $s = 0;
- if ( is_array( $value ) ) {
- foreach ( $value as $v ) {
- $s += self::size( $v );
- }
- } elseif ( !is_object( $value ) ) {
- // Objects can't always be cast to string
- $s = strlen( $value );
+ const META_BC_BOOLS = '_BC_bools';
+
+ /**
+ * Key for the 'BC subelements' metadata item. Value is string[].
+ * Note no setter is provided.
+ * @since 1.25
+ */
+ const META_BC_SUBELEMENTS = '_BC_subelements';
+
+ private $data, $size, $maxSize;
+ private $errorFormatter;
+
+ // Deprecated fields
+ private $isRawMode, $checkingSize, $mainForContinuation;
+
+ /**
+ * @param int|bool $maxSize Maximum result "size", or false for no limit
+ * @since 1.25 Takes an integer|bool rather than an ApiMain
+ */
+ public function __construct( $maxSize ) {
+ if ( $maxSize instanceof ApiMain ) {
+ wfDeprecated( 'ApiMain to ' . __METHOD__, '1.25' );
+ $this->errorFormatter = $maxSize->getErrorFormatter();
+ $this->mainForContinuation = $maxSize;
+ $maxSize = $maxSize->getConfig()->get( 'APIMaxResultSize' );
}
- return $s;
+ $this->maxSize = $maxSize;
+ $this->isRawMode = false;
+ $this->checkingSize = true;
+ $this->reset();
}
/**
- * Get the size of the result, i.e. the amount of bytes in it
- * @return int
+ * Set the error formatter
+ * @since 1.25
+ * @param ApiErrorFormatter $formatter
*/
- public function getSize() {
- return $this->mSize;
+ public function setErrorFormatter( ApiErrorFormatter $formatter ) {
+ $this->errorFormatter = $formatter;
}
/**
- * Disable size checking in addValue(). Don't use this unless you
- * REALLY know what you're doing. Values added while size checking
- * was disabled will not be counted (ever)
- * @deprecated since 1.24, use ApiResult::NO_SIZE_CHECK
+ * Allow for adding one ApiResult into another
+ * @since 1.25
+ * @return mixed
*/
- public function disableSizeCheck() {
- $this->mCheckingSize = false;
+ public function serializeForApiResult() {
+ return $this->data;
}
+ /************************************************************************//**
+ * @name Content
+ * @{
+ */
+
/**
- * Re-enable size checking in addValue()
- * @deprecated since 1.24, use ApiResult::NO_SIZE_CHECK
+ * Clear the current result data.
*/
- public function enableSizeCheck() {
- $this->mCheckingSize = true;
+ public function reset() {
+ $this->data = array(
+ self::META_TYPE => 'assoc', // Usually what's desired
+ );
+ $this->size = 0;
+ }
+
+ /**
+ * Get the result data array
+ *
+ * The returned value should be considered read-only.
+ *
+ * Transformations include:
+ *
+ * Custom: (callable) Applied before other transformations. Signature is
+ * function ( &$data, &$metadata ), return value is ignored. Called for
+ * each nested array.
+ *
+ * BC: (array) This transformation does various adjustments to bring the
+ * output in line with the pre-1.25 result format. The value array is a
+ * list of flags: 'nobool', 'no*', 'nosub'.
+ * - Boolean-valued items are changed to '' if true or removed if false,
+ * unless listed in META_BC_BOOLS. This may be skipped by including
+ * 'nobool' in the value array.
+ * - The tag named by META_CONTENT is renamed to '*', and META_CONTENT is
+ * set to '*'. This may be skipped by including 'no*' in the value
+ * array.
+ * - Tags listed in META_BC_SUBELEMENTS will have their values changed to
+ * array( '*' => $value ). This may be skipped by including 'nosub' in
+ * the value array.
+ * - If META_TYPE is 'BCarray', set it to 'default'
+ * - If META_TYPE is 'BCassoc', set it to 'default'
+ * - If META_TYPE is 'BCkvp', perform the transformation (even if
+ * the Types transformation is not being applied).
+ *
+ * Types: (assoc) Apply transformations based on META_TYPE. The values
+ * array is an associative array with the following possible keys:
+ * - AssocAsObject: (bool) If true, return arrays with META_TYPE 'assoc'
+ * as objects.
+ * - ArmorKVP: (string) If provided, transform arrays with META_TYPE 'kvp'
+ * and 'BCkvp' into arrays of two-element arrays, something like this:
+ * $output = array();
+ * foreach ( $input as $key => $value ) {
+ * $pair = array();
+ * $pair[$META_KVP_KEY_NAME ?: $ArmorKVP_value] = $key;
+ * ApiResult::setContentValue( $pair, 'value', $value );
+ * $output[] = $pair;
+ * }
+ *
+ * Strip: (string) Strips metadata keys from the result.
+ * - 'all': Strip all metadata, recursively
+ * - 'base': Strip metadata at the top-level only.
+ * - 'none': Do not strip metadata.
+ * - 'bc': Like 'all', but leave certain pre-1.25 keys.
+ *
+ * @since 1.25
+ * @param array|string|null $path Path to fetch, see ApiResult::addValue
+ * @param array $transforms See above
+ * @return mixed Result data, or null if not found
+ */
+ public function getResultData( $path = array(), $transforms = array() ) {
+ $path = (array)$path;
+ if ( !$path ) {
+ return self::applyTransformations( $this->data, $transforms );
+ }
+
+ $last = array_pop( $path );
+ $ret = &$this->path( $path, 'dummy' );
+ if ( !isset( $ret[$last] ) ) {
+ return null;
+ } elseif ( is_array( $ret[$last] ) ) {
+ return self::applyTransformations( $ret[$last], $transforms );
+ } else {
+ return $ret[$last];
+ }
+ }
+
+ /**
+ * Get the size of the result, i.e. the amount of bytes in it
+ * @return int
+ */
+ public function getSize() {
+ return $this->size;
}
/**
* Add an output value to the array by name.
+ *
* Verifies that value with the same name has not been added before.
- * @param array $arr To add $value to
- * @param string $name Index of $arr to add $value at
+ *
+ * @since 1.25
+ * @param array &$arr To add $value to
+ * @param string|int|null $name Index of $arr to add $value at,
+ * or null to use the next numeric index.
* @param mixed $value
* @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
- * This parameter used to be boolean, and the value of OVERRIDE=1 was
- * specifically chosen so that it would be backwards compatible with the
- * new method signature.
- *
- * @since 1.21 int $flags replaced boolean $override
*/
- public static function setElement( &$arr, $name, $value, $flags = 0 ) {
- if ( $arr === null || $name === null || $value === null
- || !is_array( $arr ) || is_array( $name )
- ) {
- ApiBase::dieDebug( __METHOD__, 'Bad parameter' );
+ public static function setValue( array &$arr, $name, $value, $flags = 0 ) {
+ if ( !( $flags & ApiResult::NO_VALIDATE ) ) {
+ $value = self::validateValue( $value );
+ }
+
+ if ( $name === null ) {
+ if ( $flags & ApiResult::ADD_ON_TOP ) {
+ array_unshift( $arr, $value );
+ } else {
+ array_push( $arr, $value );
+ }
+ return;
}
$exists = isset( $arr[$name] );
@@ -193,265 +297,968 @@ class ApiResult extends ApiBase {
$arr[$name] = $value;
}
} elseif ( is_array( $arr[$name] ) && is_array( $value ) ) {
- $merged = array_intersect_key( $arr[$name], $value );
- if ( !count( $merged ) ) {
+ $conflicts = array_intersect_key( $arr[$name], $value );
+ if ( !$conflicts ) {
$arr[$name] += $value;
} else {
- ApiBase::dieDebug( __METHOD__, "Attempting to merge element $name" );
+ $keys = join( ', ', array_keys( $conflicts ) );
+ throw new RuntimeException( "Conflicting keys ($keys) when attempting to merge element $name" );
}
} else {
- ApiBase::dieDebug(
- __METHOD__,
- "Attempting to add element $name=$value, existing value is {$arr[$name]}"
- );
+ throw new RuntimeException( "Attempting to add element $name=$value, existing value is {$arr[$name]}" );
}
}
/**
- * Adds a content element to an array.
- * Use this function instead of hardcoding the '*' element.
- * @param array $arr To add the content element to
+ * Validate a value for addition to the result
* @param mixed $value
- * @param string $subElemName When present, content element is created
- * as a sub item of $arr. Use this parameter to create elements in
- * format "<elem>text</elem>" without attributes.
*/
- public static function setContent( &$arr, $value, $subElemName = null ) {
+ private static function validateValue( $value ) {
+ global $wgContLang;
+
+ if ( is_object( $value ) ) {
+ // Note we use is_callable() here instead of instanceof because
+ // ApiSerializable is an informal protocol (see docs there for details).
+ if ( is_callable( array( $value, 'serializeForApiResult' ) ) ) {
+ $oldValue = $value;
+ $value = $value->serializeForApiResult();
+ if ( is_object( $value ) ) {
+ throw new UnexpectedValueException(
+ get_class( $oldValue ) . "::serializeForApiResult() returned an object of class " .
+ get_class( $value )
+ );
+ }
+
+ // Recursive call instead of fall-through so we can throw a
+ // better exception message.
+ try {
+ return self::validateValue( $value );
+ } catch ( Exception $ex ) {
+ throw new UnexpectedValueException(
+ get_class( $oldValue ) . "::serializeForApiResult() returned an invalid value: " .
+ $ex->getMessage(),
+ 0,
+ $ex
+ );
+ }
+ } elseif ( is_callable( array( $value, '__toString' ) ) ) {
+ $value = (string)$value;
+ } else {
+ $value = (array)$value + array( self::META_TYPE => 'assoc' );
+ }
+ }
if ( is_array( $value ) ) {
- ApiBase::dieDebug( __METHOD__, 'Bad parameter' );
+ foreach ( $value as $k => $v ) {
+ $value[$k] = self::validateValue( $v );
+ }
+ } elseif ( is_float( $value ) && !is_finite( $value ) ) {
+ throw new InvalidArgumentException( "Cannot add non-finite floats to ApiResult" );
+ } elseif ( is_string( $value ) ) {
+ $value = $wgContLang->normalize( $value );
+ } elseif ( $value !== null && !is_scalar( $value ) ) {
+ $type = gettype( $value );
+ if ( is_resource( $value ) ) {
+ $type .= '(' . get_resource_type( $value ) . ')';
+ }
+ throw new InvalidArgumentException( "Cannot add $type to ApiResult" );
}
- if ( is_null( $subElemName ) ) {
- ApiResult::setElement( $arr, '*', $value );
- } else {
- if ( !isset( $arr[$subElemName] ) ) {
- $arr[$subElemName] = array();
+
+ return $value;
+ }
+
+ /**
+ * Add value to the output data at the given path.
+ *
+ * Path can be an indexed array, each element specifying the branch at which to add the new
+ * value. Setting $path to array('a','b','c') is equivalent to data['a']['b']['c'] = $value.
+ * If $path is null, the value will be inserted at the data root.
+ *
+ * @param array|string|int|null $path
+ * @param string|int|null $name See ApiResult::setValue()
+ * @param mixed $value
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ * This parameter used to be boolean, and the value of OVERRIDE=1 was specifically
+ * chosen so that it would be backwards compatible with the new method signature.
+ * @return bool True if $value fits in the result, false if not
+ * @since 1.21 int $flags replaced boolean $override
+ */
+ public function addValue( $path, $name, $value, $flags = 0 ) {
+ $arr = &$this->path( $path, ( $flags & ApiResult::ADD_ON_TOP ) ? 'prepend' : 'append' );
+
+ if ( $this->checkingSize && !( $flags & ApiResult::NO_SIZE_CHECK ) ) {
+ $newsize = $this->size + self::valueSize( $value );
+ if ( $this->maxSize !== false && $newsize > $this->maxSize ) {
+ /// @todo Add i18n message when replacing calls to ->setWarning()
+ $msg = new ApiRawMessage( 'This result was truncated because it would otherwise ' .
+ ' be larger than the limit of $1 bytes', 'truncatedresult' );
+ $msg->numParams( $this->maxSize );
+ $this->errorFormatter->addWarning( 'result', $msg );
+ return false;
}
- ApiResult::setElement( $arr[$subElemName], '*', $value );
+ $this->size = $newsize;
}
+
+ self::setValue( $arr, $name, $value, $flags );
+ return true;
}
/**
- * Causes the elements with the specified names to be output as
- * subelements rather than attributes.
- * @param array $arr
- * @param array|string $names The element name(s) to be output as subelements
+ * Remove an output value to the array by name.
+ * @param array &$arr To remove $value from
+ * @param string|int $name Index of $arr to remove
+ * @return mixed Old value, or null
*/
- public function setSubelements( &$arr, $names ) {
- // In raw mode, add the '_subelements', otherwise just ignore
- if ( !$this->getIsRawMode() ) {
- return;
+ public static function unsetValue( array &$arr, $name ) {
+ $ret = null;
+ if ( isset( $arr[$name] ) ) {
+ $ret = $arr[$name];
+ unset( $arr[$name] );
}
- if ( $arr === null || $names === null || !is_array( $arr ) ) {
- ApiBase::dieDebug( __METHOD__, 'Bad parameter' );
+ return $ret;
+ }
+
+ /**
+ * Remove value from the output data at the given path.
+ *
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string|int|null $name Index to remove at $path.
+ * If null, $path itself is removed.
+ * @param int $flags Flags used when adding the value
+ * @return mixed Old value, or null
+ */
+ public function removeValue( $path, $name, $flags = 0 ) {
+ $path = (array)$path;
+ if ( $name === null ) {
+ if ( !$path ) {
+ throw new InvalidArgumentException( 'Cannot remove the data root' );
+ }
+ $name = array_pop( $path );
}
- if ( !is_array( $names ) ) {
- $names = array( $names );
+ $ret = self::unsetValue( $this->path( $path, 'dummy' ), $name );
+ if ( $this->checkingSize && !( $flags & ApiResult::NO_SIZE_CHECK ) ) {
+ $newsize = $this->size - self::valueSize( $ret );
+ $this->size = max( $newsize, 0 );
}
- if ( !isset( $arr['_subelements'] ) ) {
- $arr['_subelements'] = $names;
+ return $ret;
+ }
+
+ /**
+ * Add an output value to the array by name and mark as META_CONTENT.
+ *
+ * @since 1.25
+ * @param array &$arr To add $value to
+ * @param string|int $name Index of $arr to add $value at.
+ * @param mixed $value
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ */
+ public static function setContentValue( array &$arr, $name, $value, $flags = 0 ) {
+ if ( $name === null ) {
+ throw new InvalidArgumentException( 'Content value must be named' );
+ }
+ self::setContentField( $arr, $name, $flags );
+ self::setValue( $arr, $name, $value, $flags );
+ }
+
+ /**
+ * Add value to the output data at the given path and mark as META_CONTENT
+ *
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string|int $name See ApiResult::setValue()
+ * @param mixed $value
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ * @return bool True if $value fits in the result, false if not
+ */
+ public function addContentValue( $path, $name, $value, $flags = 0 ) {
+ if ( $name === null ) {
+ throw new InvalidArgumentException( 'Content value must be named' );
+ }
+ $this->addContentField( $path, $name, $flags );
+ $this->addValue( $path, $name, $value, $flags );
+ }
+
+ /**
+ * Add the numeric limit for a limit=max to the result.
+ *
+ * @since 1.25
+ * @param string $moduleName
+ * @param int $limit
+ */
+ public function addParsedLimit( $moduleName, $limit ) {
+ // Add value, allowing overwriting
+ $this->addValue( 'limits', $moduleName, $limit,
+ ApiResult::OVERRIDE | ApiResult::NO_SIZE_CHECK );
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Metadata
+ * @{
+ */
+
+ /**
+ * Set the name of the content field name (META_CONTENT)
+ *
+ * @since 1.25
+ * @param array &$arr
+ * @param string|int $name Name of the field
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ */
+ public static function setContentField( array &$arr, $name, $flags = 0 ) {
+ if ( isset( $arr[self::META_CONTENT] ) &&
+ isset( $arr[$arr[self::META_CONTENT]] ) &&
+ !( $flags & self::OVERRIDE )
+ ) {
+ throw new RuntimeException(
+ "Attempting to set content element as $name when " . $arr[self::META_CONTENT] .
+ " is already set as the content element"
+ );
+ }
+ $arr[self::META_CONTENT] = $name;
+ }
+
+ /**
+ * Set the name of the content field name (META_CONTENT)
+ *
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string|int $name Name of the field
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ */
+ public function addContentField( $path, $name, $flags = 0 ) {
+ $arr = &$this->path( $path, ( $flags & ApiResult::ADD_ON_TOP ) ? 'prepend' : 'append' );
+ self::setContentField( $arr, $name, $flags );
+ }
+
+ /**
+ * Causes the elements with the specified names to be output as
+ * subelements rather than attributes.
+ * @since 1.25 is static
+ * @param array &$arr
+ * @param array|string|int $names The element name(s) to be output as subelements
+ */
+ public static function setSubelementsList( array &$arr, $names ) {
+ if ( !isset( $arr[self::META_SUBELEMENTS] ) ) {
+ $arr[self::META_SUBELEMENTS] = (array)$names;
} else {
- $arr['_subelements'] = array_merge( $arr['_subelements'], $names );
+ $arr[self::META_SUBELEMENTS] = array_merge( $arr[self::META_SUBELEMENTS], (array)$names );
}
}
/**
- * In case the array contains indexed values (in addition to named),
- * give all indexed values the given tag name. This function MUST be
- * called on every array that has numerical indexes.
- * @param array $arr
- * @param string $tag Tag name
+ * Causes the elements with the specified names to be output as
+ * subelements rather than attributes.
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param array|string|int $names The element name(s) to be output as subelements
*/
- public function setIndexedTagName( &$arr, $tag ) {
- // In raw mode, add the '_element', otherwise just ignore
- if ( !$this->getIsRawMode() ) {
- return;
+ public function addSubelementsList( $path, $names ) {
+ $arr = &$this->path( $path );
+ self::setSubelementsList( $arr, $names );
+ }
+
+ /**
+ * Causes the elements with the specified names to be output as
+ * attributes (when possible) rather than as subelements.
+ * @since 1.25
+ * @param array &$arr
+ * @param array|string|int $names The element name(s) to not be output as subelements
+ */
+ public static function unsetSubelementsList( array &$arr, $names ) {
+ if ( isset( $arr[self::META_SUBELEMENTS] ) ) {
+ $arr[self::META_SUBELEMENTS] = array_diff( $arr[self::META_SUBELEMENTS], (array)$names );
}
- if ( $arr === null || $tag === null || !is_array( $arr ) || is_array( $tag ) ) {
- ApiBase::dieDebug( __METHOD__, 'Bad parameter' );
+ }
+
+ /**
+ * Causes the elements with the specified names to be output as
+ * attributes (when possible) rather than as subelements.
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param array|string|int $names The element name(s) to not be output as subelements
+ */
+ public function removeSubelementsList( $path, $names ) {
+ $arr = &$this->path( $path );
+ self::unsetSubelementsList( $arr, $names );
+ }
+
+ /**
+ * Set the tag name for numeric-keyed values in XML format
+ * @since 1.25 is static
+ * @param array &$arr
+ * @param string $tag Tag name
+ */
+ public static function setIndexedTagName( array &$arr, $tag ) {
+ if ( !is_string( $tag ) ) {
+ throw new InvalidArgumentException( 'Bad tag name' );
}
- // Do not use setElement() as it is ok to call this more than once
- $arr['_element'] = $tag;
+ $arr[self::META_INDEXED_TAG_NAME] = $tag;
}
/**
- * Calls setIndexedTagName() on each sub-array of $arr
- * @param array $arr
+ * Set the tag name for numeric-keyed values in XML format
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
* @param string $tag Tag name
*/
- public function setIndexedTagName_recursive( &$arr, $tag ) {
- if ( !is_array( $arr ) ) {
- return;
+ public function addIndexedTagName( $path, $tag ) {
+ $arr = &$this->path( $path );
+ self::setIndexedTagName( $arr, $tag );
+ }
+
+ /**
+ * Set indexed tag name on $arr and all subarrays
+ *
+ * @since 1.25
+ * @param array &$arr
+ * @param string $tag Tag name
+ */
+ public static function setIndexedTagNameRecursive( array &$arr, $tag ) {
+ if ( !is_string( $tag ) ) {
+ throw new InvalidArgumentException( 'Bad tag name' );
}
- foreach ( $arr as &$a ) {
- if ( !is_array( $a ) ) {
- continue;
+ $arr[self::META_INDEXED_TAG_NAME] = $tag;
+ foreach ( $arr as $k => &$v ) {
+ if ( !self::isMetadataKey( $k ) && is_array( $v ) ) {
+ self::setIndexedTagNameRecursive( $v, $tag );
}
- $this->setIndexedTagName( $a, $tag );
- $this->setIndexedTagName_recursive( $a, $tag );
}
}
/**
- * Calls setIndexedTagName() on an array already in the result.
- * Don't specify a path to a value that's not in the result, or
- * you'll get nasty errors.
- * @param array $path Path to the array, like addValue()'s $path
- * @param string $tag
+ * Set indexed tag name on $path and all subarrays
+ *
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string $tag Tag name
*/
- public function setIndexedTagName_internal( $path, $tag ) {
- $data = &$this->mData;
- foreach ( (array)$path as $p ) {
- if ( !isset( $data[$p] ) ) {
- $data[$p] = array();
- }
- $data = &$data[$p];
+ public function addIndexedTagNameRecursive( $path, $tag ) {
+ $arr = &$this->path( $path );
+ self::setIndexedTagNameRecursive( $arr, $tag );
+ }
+
+ /**
+ * Preserve specified keys.
+ *
+ * This prevents XML name mangling and preventing keys from being removed
+ * by self::stripMetadata().
+ *
+ * @since 1.25
+ * @param array &$arr
+ * @param array|string $names The element name(s) to preserve
+ */
+ public static function setPreserveKeysList( array &$arr, $names ) {
+ if ( !isset( $arr[self::META_PRESERVE_KEYS] ) ) {
+ $arr[self::META_PRESERVE_KEYS] = (array)$names;
+ } else {
+ $arr[self::META_PRESERVE_KEYS] = array_merge( $arr[self::META_PRESERVE_KEYS], (array)$names );
}
- if ( is_null( $data ) ) {
- return;
+ }
+
+ /**
+ * Preserve specified keys.
+ * @since 1.25
+ * @see self::setPreserveKeysList()
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param array|string $names The element name(s) to preserve
+ */
+ public function addPreserveKeysList( $path, $names ) {
+ $arr = &$this->path( $path );
+ self::setPreserveKeysList( $arr, $names );
+ }
+
+ /**
+ * Don't preserve specified keys.
+ * @since 1.25
+ * @see self::setPreserveKeysList()
+ * @param array &$arr
+ * @param array|string $names The element name(s) to not preserve
+ */
+ public static function unsetPreserveKeysList( array &$arr, $names ) {
+ if ( isset( $arr[self::META_PRESERVE_KEYS] ) ) {
+ $arr[self::META_PRESERVE_KEYS] = array_diff( $arr[self::META_PRESERVE_KEYS], (array)$names );
}
- $this->setIndexedTagName( $data, $tag );
}
/**
- * Add value to the output data at the given path.
- * Path can be an indexed array, each element specifying the branch at which to add the new
- * value. Setting $path to array('a','b','c') is equivalent to data['a']['b']['c'] = $value.
- * If $path is null, the value will be inserted at the data root.
- * If $name is empty, the $value is added as a next list element data[] = $value.
+ * Don't preserve specified keys.
+ * @since 1.25
+ * @see self::setPreserveKeysList()
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param array|string $names The element name(s) to not preserve
+ */
+ public function removePreserveKeysList( $path, $names ) {
+ $arr = &$this->path( $path );
+ self::unsetPreserveKeysList( $arr, $names );
+ }
+
+ /**
+ * Set the array data type
*
- * @param array|string|null $path
- * @param string $name
- * @param mixed $value
- * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
- * This parameter used to be boolean, and the value of OVERRIDE=1 was specifically
- * chosen so that it would be backwards compatible with the new method signature.
- * @return bool True if $value fits in the result, false if not
+ * @since 1.25
+ * @param array &$arr
+ * @param string $type See ApiResult::META_TYPE
+ * @param string $kvpKeyName See ApiResult::META_KVP_KEY_NAME
+ */
+ public static function setArrayType( array &$arr, $type, $kvpKeyName = null ) {
+ if ( !in_array( $type, array( 'default', 'array', 'assoc', 'kvp', 'BCarray', 'BCassoc', 'BCkvp' ), true ) ) {
+ throw new InvalidArgumentException( 'Bad type' );
+ }
+ $arr[self::META_TYPE] = $type;
+ if ( is_string( $kvpKeyName ) ) {
+ $arr[self::META_KVP_KEY_NAME] = $kvpKeyName;
+ }
+ }
+
+ /**
+ * Set the array data type for a path
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string $type See ApiResult::META_TYPE
+ * @param string $kvpKeyName See ApiResult::META_KVP_KEY_NAME
+ */
+ public function addArrayType( $path, $tag, $kvpKeyName = null ) {
+ $arr = &$this->path( $path );
+ self::setArrayType( $arr, $tag, $kvpKeyName );
+ }
+
+ /**
+ * Set the array data type recursively
+ * @since 1.25
+ * @param array &$arr
+ * @param string $type See ApiResult::META_TYPE
+ * @param string $kvpKeyName See ApiResult::META_KVP_KEY_NAME
+ */
+ public static function setArrayTypeRecursive( array &$arr, $type, $kvpKeyName = null ) {
+ self::setArrayType( $arr, $type, $kvpKeyName );
+ foreach ( $arr as $k => &$v ) {
+ if ( !self::isMetadataKey( $k ) && is_array( $v ) ) {
+ self::setArrayTypeRecursive( $v, $type, $kvpKeyName );
+ }
+ }
+ }
+
+ /**
+ * Set the array data type for a path recursively
+ * @since 1.25
+ * @param array|string|null $path See ApiResult::addValue()
+ * @param string $type See ApiResult::META_TYPE
+ * @param string $kvpKeyName See ApiResult::META_KVP_KEY_NAME
+ */
+ public function addArrayTypeRecursive( $path, $tag, $kvpKeyName = null ) {
+ $arr = &$this->path( $path );
+ self::setArrayTypeRecursive( $arr, $tag, $kvpKeyName );
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Utility
+ * @{
+ */
+
+ /**
+ * Test whether a key should be considered metadata
*
- * @since 1.21 int $flags replaced boolean $override
+ * @param string $key
+ * @return bool
*/
- public function addValue( $path, $name, $value, $flags = 0 ) {
- $data = &$this->mData;
- if ( $this->mCheckingSize && !( $flags & ApiResult::NO_SIZE_CHECK ) ) {
- $newsize = $this->mSize + self::size( $value );
- $maxResultSize = $this->getConfig()->get( 'APIMaxResultSize' );
- if ( $newsize > $maxResultSize ) {
- $this->setWarning(
- "This result was truncated because it would otherwise be larger than the " .
- "limit of {$maxResultSize} bytes" );
+ public static function isMetadataKey( $key ) {
+ return substr( $key, 0, 1 ) === '_';
+ }
- return false;
+ /**
+ * Apply transformations to an array, returning the transformed array.
+ *
+ * @see ApiResult::getResultData()
+ * @since 1.25
+ * @param array $data
+ * @param array $transforms
+ * @return array|object
+ */
+ protected static function applyTransformations( array $dataIn, array $transforms ) {
+ $strip = isset( $transforms['Strip'] ) ? $transforms['Strip'] : 'none';
+ if ( $strip === 'base' ) {
+ $transforms['Strip'] = 'none';
+ }
+ $transformTypes = isset( $transforms['Types'] ) ? $transforms['Types'] : null;
+ if ( $transformTypes !== null && !is_array( $transformTypes ) ) {
+ throw new InvalidArgumentException( __METHOD__ . ':Value for "Types" must be an array' );
+ }
+
+ $metadata = array();
+ $data = self::stripMetadataNonRecursive( $dataIn, $metadata );
+
+ if ( isset( $transforms['Custom'] ) ) {
+ if ( !is_callable( $transforms['Custom'] ) ) {
+ throw new InvalidArgumentException( __METHOD__ . ': Value for "Custom" must be callable' );
}
- $this->mSize = $newsize;
+ call_user_func_array( $transforms['Custom'], array( &$data, &$metadata ) );
}
- $addOnTop = $flags & ApiResult::ADD_ON_TOP;
- if ( $path !== null ) {
- foreach ( (array)$path as $p ) {
- if ( !isset( $data[$p] ) ) {
- if ( $addOnTop ) {
- $data = array( $p => array() ) + $data;
- $addOnTop = false;
- } else {
- $data[$p] = array();
+ if ( ( isset( $transforms['BC'] ) || $transformTypes !== null ) &&
+ isset( $metadata[self::META_TYPE] ) && $metadata[self::META_TYPE] === 'BCkvp' &&
+ !isset( $metadata[self::META_KVP_KEY_NAME] )
+ ) {
+ throw new UnexpectedValueException( 'Type "BCkvp" used without setting ' .
+ 'ApiResult::META_KVP_KEY_NAME metadata item' );
+ }
+
+ // BC transformations
+ $boolKeys = null;
+ $forceKVP = false;
+ if ( isset( $transforms['BC'] ) ) {
+ if ( !is_array( $transforms['BC'] ) ) {
+ throw new InvalidArgumentException( __METHOD__ . ':Value for "BC" must be an array' );
+ }
+ if ( !in_array( 'nobool', $transforms['BC'], true ) ) {
+ $boolKeys = isset( $metadata[self::META_BC_BOOLS] )
+ ? array_flip( $metadata[self::META_BC_BOOLS] )
+ : array();
+ }
+
+ if ( !in_array( 'no*', $transforms['BC'], true ) &&
+ isset( $metadata[self::META_CONTENT] ) && $metadata[self::META_CONTENT] !== '*'
+ ) {
+ $k = $metadata[self::META_CONTENT];
+ $data['*'] = $data[$k];
+ unset( $data[$k] );
+ $metadata[self::META_CONTENT] = '*';
+ }
+
+ if ( !in_array( 'nosub', $transforms['BC'], true ) &&
+ isset( $metadata[self::META_BC_SUBELEMENTS] )
+ ) {
+ foreach ( $metadata[self::META_BC_SUBELEMENTS] as $k ) {
+ if ( isset( $data[$k] ) ) {
+ $data[$k] = array(
+ '*' => $data[$k],
+ self::META_CONTENT => '*',
+ self::META_TYPE => 'assoc',
+ );
}
}
- $data = &$data[$p];
+ }
+
+ if ( isset( $metadata[self::META_TYPE] ) ) {
+ switch ( $metadata[self::META_TYPE] ) {
+ case 'BCarray':
+ case 'BCassoc':
+ $metadata[self::META_TYPE] = 'default';
+ break;
+ case 'BCkvp':
+ $transformTypes['ArmorKVP'] = $metadata[self::META_KVP_KEY_NAME];
+ break;
+ }
}
}
- if ( !$name ) {
- // Add list element
- if ( $addOnTop ) {
- // This element needs to be inserted in the beginning
- // Numerical indexes will be renumbered
- array_unshift( $data, $value );
- } else {
- // Add new value at the end
- $data[] = $value;
+ // Figure out type, do recursive calls, and do boolean transform if necessary
+ $defaultType = 'array';
+ $maxKey = -1;
+ foreach ( $data as $k => &$v ) {
+ $v = is_array( $v ) ? self::applyTransformations( $v, $transforms ) : $v;
+ if ( $boolKeys !== null && is_bool( $v ) && !isset( $boolKeys[$k] ) ) {
+ if ( !$v ) {
+ unset( $data[$k] );
+ continue;
+ }
+ $v = '';
+ }
+ if ( is_string( $k ) ) {
+ $defaultType = 'assoc';
+ } elseif ( $k > $maxKey ) {
+ $maxKey = $k;
}
- } else {
- // Add named element
- self::setElement( $data, $name, $value, $flags );
}
+ unset( $v );
- return true;
+ // Determine which metadata to keep
+ switch ( $strip ) {
+ case 'all':
+ case 'base':
+ $keepMetadata = array();
+ break;
+ case 'none':
+ $keepMetadata = &$metadata;
+ break;
+ case 'bc':
+ $keepMetadata = array_intersect_key( $metadata, array(
+ self::META_INDEXED_TAG_NAME => 1,
+ self::META_SUBELEMENTS => 1,
+ ) );
+ break;
+ default:
+ throw new InvalidArgumentException( __METHOD__ . ': Unknown value for "Strip"' );
+ }
+
+ // Type transformation
+ if ( $transformTypes !== null ) {
+ if ( $defaultType === 'array' && $maxKey !== count( $data ) - 1 ) {
+ $defaultType = 'assoc';
+ }
+
+ // Override type, if provided
+ $type = $defaultType;
+ if ( isset( $metadata[self::META_TYPE] ) && $metadata[self::META_TYPE] !== 'default' ) {
+ $type = $metadata[self::META_TYPE];
+ }
+ if ( ( $type === 'kvp' || $type === 'BCkvp' ) &&
+ empty( $transformTypes['ArmorKVP'] )
+ ) {
+ $type = 'assoc';
+ } elseif ( $type === 'BCarray' ) {
+ $type = 'array';
+ } elseif ( $type === 'BCassoc' ) {
+ $type = 'assoc';
+ }
+
+ // Apply transformation
+ switch ( $type ) {
+ case 'assoc':
+ $metadata[self::META_TYPE] = 'assoc';
+ $data += $keepMetadata;
+ return empty( $transformTypes['AssocAsObject'] ) ? $data : (object)$data;
+
+ case 'array':
+ ksort( $data );
+ $data = array_values( $data );
+ $metadata[self::META_TYPE] = 'array';
+ return $data + $keepMetadata;
+
+ case 'kvp':
+ case 'BCkvp':
+ $key = isset( $metadata[self::META_KVP_KEY_NAME] )
+ ? $metadata[self::META_KVP_KEY_NAME]
+ : $transformTypes['ArmorKVP'];
+ $valKey = isset( $transforms['BC'] ) ? '*' : 'value';
+ $assocAsObject = !empty( $transformTypes['AssocAsObject'] );
+
+ $ret = array();
+ foreach ( $data as $k => $v ) {
+ $item = array(
+ $key => $k,
+ $valKey => $v,
+ );
+ if ( $strip === 'none' ) {
+ $item += array(
+ self::META_PRESERVE_KEYS => array( $key ),
+ self::META_CONTENT => $valKey,
+ self::META_TYPE => 'assoc',
+ );
+ }
+ $ret[] = $assocAsObject ? (object)$item : $item;
+ }
+ $metadata[self::META_TYPE] = 'array';
+
+ return $ret + $keepMetadata;
+
+ default:
+ throw new UnexpectedValueException( "Unknown type '$type'" );
+ }
+ } else {
+ return $data + $keepMetadata;
+ }
}
/**
- * Add a parsed limit=max to the result.
+ * Recursively remove metadata keys from a data array or object
*
- * @param string $moduleName
- * @param int $limit
+ * Note this removes all potential metadata keys, not just the defined
+ * ones.
+ *
+ * @since 1.25
+ * @param array|object $data
+ * @return array|object
*/
- public function setParsedLimit( $moduleName, $limit ) {
- // Add value, allowing overwriting
- $this->addValue( 'limits', $moduleName, $limit, ApiResult::OVERRIDE );
+ public static function stripMetadata( $data ) {
+ if ( is_array( $data ) || is_object( $data ) ) {
+ $isObj = is_object( $data );
+ if ( $isObj ) {
+ $data = (array)$data;
+ }
+ $preserveKeys = isset( $data[self::META_PRESERVE_KEYS] )
+ ? (array)$data[self::META_PRESERVE_KEYS]
+ : array();
+ foreach ( $data as $k => $v ) {
+ if ( self::isMetadataKey( $k ) && !in_array( $k, $preserveKeys, true ) ) {
+ unset( $data[$k] );
+ } elseif ( is_array( $v ) || is_object( $v ) ) {
+ $data[$k] = self::stripMetadata( $v );
+ }
+ }
+ if ( $isObj ) {
+ $data = (object)$data;
+ }
+ }
+ return $data;
}
/**
- * Unset a value previously added to the result set.
- * Fails silently if the value isn't found.
- * For parameters, see addValue()
- * @param array|null $path
- * @param string $name
+ * Remove metadata keys from a data array or object, non-recursive
+ *
+ * Note this removes all potential metadata keys, not just the defined
+ * ones.
+ *
+ * @since 1.25
+ * @param array|object $data
+ * @param array &$metadata Store metadata here, if provided
+ * @return array|object
*/
- public function unsetValue( $path, $name ) {
- $data = &$this->mData;
- if ( $path !== null ) {
- foreach ( (array)$path as $p ) {
- if ( !isset( $data[$p] ) ) {
- return;
+ public static function stripMetadataNonRecursive( $data, &$metadata = null ) {
+ if ( !is_array( $metadata ) ) {
+ $metadata = array();
+ }
+ if ( is_array( $data ) || is_object( $data ) ) {
+ $isObj = is_object( $data );
+ if ( $isObj ) {
+ $data = (array)$data;
+ }
+ $preserveKeys = isset( $data[self::META_PRESERVE_KEYS] )
+ ? (array)$data[self::META_PRESERVE_KEYS]
+ : array();
+ foreach ( $data as $k => $v ) {
+ if ( self::isMetadataKey( $k ) && !in_array( $k, $preserveKeys, true ) ) {
+ $metadata[$k] = $v;
+ unset( $data[$k] );
}
- $data = &$data[$p];
+ }
+ if ( $isObj ) {
+ $data = (object)$data;
}
}
- $this->mSize -= self::size( $data[$name] );
- unset( $data[$name] );
+ return $data;
}
/**
- * Ensure all values in this result are valid UTF-8.
+ * Get the 'real' size of a result item. This means the strlen() of the item,
+ * or the sum of the strlen()s of the elements if the item is an array.
+ * @note Once the deprecated public self::size is removed, we can rename this back to a less awkward name.
+ * @param mixed $value
+ * @return int
*/
- public function cleanUpUTF8() {
- array_walk_recursive( $this->mData, array( 'ApiResult', 'cleanUp_helper' ) );
+ private static function valueSize( $value ) {
+ $s = 0;
+ if ( is_array( $value ) ||
+ is_object( $value ) && !is_callable( array( $value, '__toString' ) )
+ ) {
+ foreach ( $value as $k => $v ) {
+ if ( !self::isMetadataKey( $s ) ) {
+ $s += self::valueSize( $v );
+ }
+ }
+ } elseif ( is_scalar( $value ) ) {
+ $s = strlen( $value );
+ }
+
+ return $s;
}
/**
- * Callback function for cleanUpUTF8()
+ * Return a reference to the internal data at $path
*
- * @param string $s
+ * @param array|string|null $path
+ * @param string $create
+ * If 'append', append empty arrays.
+ * If 'prepend', prepend empty arrays.
+ * If 'dummy', return a dummy array.
+ * Else, raise an error.
+ * @return array
*/
- private static function cleanUp_helper( &$s ) {
- if ( !is_string( $s ) ) {
- return;
+ private function &path( $path, $create = 'append' ) {
+ $path = (array)$path;
+ $ret = &$this->data;
+ foreach ( $path as $i => $k ) {
+ if ( !isset( $ret[$k] ) ) {
+ switch ( $create ) {
+ case 'append':
+ $ret[$k] = array();
+ break;
+ case 'prepend':
+ $ret = array( $k => array() ) + $ret;
+ break;
+ case 'dummy':
+ $tmp = array();
+ return $tmp;
+ default:
+ $fail = join( '.', array_slice( $path, 0, $i + 1 ) );
+ throw new InvalidArgumentException( "Path $fail does not exist" );
+ }
+ }
+ if ( !is_array( $ret[$k] ) ) {
+ $fail = join( '.', array_slice( $path, 0, $i + 1 ) );
+ throw new InvalidArgumentException( "Path $fail is not an array" );
+ }
+ $ret = &$ret[$k];
}
- global $wgContLang;
- $s = $wgContLang->normalize( $s );
+ return $ret;
}
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Deprecated
+ * @{
+ */
+
/**
- * Converts a Status object to an array suitable for addValue
- * @param Status $status
- * @param string $errorType
+ * Call this function when special elements such as '_element'
+ * are needed by the formatter, for example in XML printing.
+ * @deprecated since 1.25, you shouldn't have been using it in the first place
+ * @since 1.23 $flag parameter added
+ * @param bool $flag Set the raw mode flag to this state
+ */
+ public function setRawMode( $flag = true ) {
+ // Can't wfDeprecated() here, since we need to set this flag from
+ // ApiMain for BC with stuff using self::getIsRawMode as
+ // "self::getIsXMLMode".
+ $this->isRawMode = $flag;
+ }
+
+ /**
+ * Returns true whether the formatter requested raw data.
+ * @deprecated since 1.25, you shouldn't have been using it in the first place
+ * @return bool
+ */
+ public function getIsRawMode() {
+ /// @todo: After Wikibase stops calling this, warn
+ return $this->isRawMode;
+ }
+
+ /**
+ * Get the result's internal data array (read-only)
+ * @deprecated since 1.25, use $this->getResultData() instead
* @return array
*/
- public function convertStatusToArray( $status, $errorType = 'error' ) {
- if ( $status->isGood() ) {
- return array();
+ public function getData() {
+ wfDeprecated( __METHOD__, '1.25' );
+ return $this->getResultData( null, array(
+ 'BC' => array(),
+ 'Types' => array(),
+ 'Strip' => $this->isRawMode ? 'bc' : 'all',
+ ) );
+ }
+
+ /**
+ * Disable size checking in addValue(). Don't use this unless you
+ * REALLY know what you're doing. Values added while size checking
+ * was disabled will not be counted (ever)
+ * @deprecated since 1.24, use ApiResult::NO_SIZE_CHECK
+ */
+ public function disableSizeCheck() {
+ wfDeprecated( __METHOD__, '1.24' );
+ $this->checkingSize = false;
+ }
+
+ /**
+ * Re-enable size checking in addValue()
+ * @deprecated since 1.24, use ApiResult::NO_SIZE_CHECK
+ */
+ public function enableSizeCheck() {
+ wfDeprecated( __METHOD__, '1.24' );
+ $this->checkingSize = true;
+ }
+
+ /**
+ * Alias for self::setValue()
+ *
+ * @since 1.21 int $flags replaced boolean $override
+ * @deprecated since 1.25, use self::setValue() instead
+ * @param array $arr To add $value to
+ * @param string $name Index of $arr to add $value at
+ * @param mixed $value
+ * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
+ * This parameter used to be boolean, and the value of OVERRIDE=1 was
+ * specifically chosen so that it would be backwards compatible with the
+ * new method signature.
+ */
+ public static function setElement( &$arr, $name, $value, $flags = 0 ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ return self::setValue( $arr, $name, $value, $flags );
+ }
+
+ /**
+ * Adds a content element to an array.
+ * Use this function instead of hardcoding the '*' element.
+ * @deprecated since 1.25, use self::setContentValue() instead
+ * @param array $arr To add the content element to
+ * @param mixed $value
+ * @param string $subElemName When present, content element is created
+ * as a sub item of $arr. Use this parameter to create elements in
+ * format "<elem>text</elem>" without attributes.
+ */
+ public static function setContent( &$arr, $value, $subElemName = null ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ if ( is_array( $value ) ) {
+ throw new InvalidArgumentException( __METHOD__ . ': Bad parameter' );
}
+ if ( is_null( $subElemName ) ) {
+ self::setContentValue( $arr, 'content', $value );
+ } else {
+ if ( !isset( $arr[$subElemName] ) ) {
+ $arr[$subElemName] = array();
+ }
+ self::setContentValue( $arr[$subElemName], 'content', $value );
+ }
+ }
- $result = array();
- foreach ( $status->getErrorsByType( $errorType ) as $error ) {
- $this->setIndexedTagName( $error['params'], 'param' );
- $result[] = $error;
+ /**
+ * Set indexed tag name on all subarrays of $arr
+ *
+ * Does not set the tag name for $arr itself.
+ *
+ * @deprecated since 1.25, use self::setIndexedTagNameRecursive() instead
+ * @param array $arr
+ * @param string $tag Tag name
+ */
+ public function setIndexedTagName_recursive( &$arr, $tag ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ if ( !is_array( $arr ) ) {
+ return;
}
- $this->setIndexedTagName( $result, $errorType );
+ if ( !is_string( $tag ) ) {
+ throw new InvalidArgumentException( 'Bad tag name' );
+ }
+ foreach ( $arr as $k => &$v ) {
+ if ( !self::isMetadataKey( $k ) && is_array( $v ) ) {
+ $v[self::META_INDEXED_TAG_NAME] = $tag;
+ $this->setIndexedTagName_recursive( $v, $tag );
+ }
+ }
+ }
- return $result;
+ /**
+ * Alias for self::addIndexedTagName()
+ * @deprecated since 1.25, use $this->addIndexedTagName() instead
+ * @param array $path Path to the array, like addValue()'s $path
+ * @param string $tag
+ */
+ public function setIndexedTagName_internal( $path, $tag ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ $this->addIndexedTagName( $path, $tag );
+ }
+
+ /**
+ * Alias for self::addParsedLimit()
+ * @deprecated since 1.25, use $this->addParsedLimit() instead
+ * @param string $moduleName
+ * @param int $limit
+ */
+ public function setParsedLimit( $moduleName, $limit ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ $this->addParsedLimit( $moduleName, $limit );
}
- public function execute() {
- ApiBase::dieDebug( __METHOD__, 'execute() is not supported on Result object' );
+ /**
+ * Set the ApiMain for use by $this->beginContinuation()
+ * @since 1.25
+ * @deprecated for backwards compatibility only, do not use
+ * @param ApiMain $main
+ */
+ public function setMainForContinuation( ApiMain $main ) {
+ $this->mainForContinuation = $main;
}
/**
@@ -460,172 +1267,148 @@ class ApiResult extends ApiBase {
* This must be balanced by a call to endContinuation().
*
* @since 1.24
- * @param string|null $continue The "continue" parameter, if any
- * @param ApiBase[] $allModules Contains ApiBase instances that will be executed
- * @param array $generatedModules Names of modules that depend on the generator
- * @return array Two elements: a boolean indicating if the generator is done,
- * and an array of modules to actually execute.
+ * @deprecated since 1.25, use ApiContinuationManager instead
+ * @param string|null $continue
+ * @param ApiBase[] $allModules
+ * @param array $generatedModules
+ * @return array
*/
public function beginContinuation(
$continue, array $allModules = array(), array $generatedModules = array()
) {
- $this->continueGeneratedModules = $generatedModules
- ? array_combine( $generatedModules, $generatedModules )
- : array();
- $this->continuationData = array();
- $this->generatorContinuationData = array();
- $this->generatorParams = array();
-
- $skip = array();
- if ( is_string( $continue ) && $continue !== '' ) {
- $continue = explode( '||', $continue );
- $this->dieContinueUsageIf( count( $continue ) !== 2 );
- $this->generatorDone = ( $continue[0] === '-' );
- if ( !$this->generatorDone ) {
- $this->generatorParams = explode( '|', $continue[0] );
- }
- $skip = explode( '|', $continue[1] );
- }
-
- $this->continueAllModules = array();
- $runModules = array();
- foreach ( $allModules as $module ) {
- $name = $module->getModuleName();
- if ( in_array( $name, $skip ) ) {
- $this->continueAllModules[$name] = false;
- // Prevent spurious "unused parameter" warnings
- $module->extractRequestParams();
- } else {
- $this->continueAllModules[$name] = true;
- $runModules[] = $module;
- }
+ wfDeprecated( __METHOD__, '1.25' );
+ if ( $this->mainForContinuation->getContinuationManager() ) {
+ throw new UnexpectedValueException(
+ __METHOD__ . ': Continuation already in progress from ' .
+ $this->mainForContinuation->getContinuationManager()->getSource()
+ );
+ }
+
+ // Ugh. If $continue doesn't match that in the request, temporarily
+ // replace the request when creating the ApiContinuationManager.
+ if ( $continue === null ) {
+ $continue = '';
}
+ if ( $this->mainForContinuation->getVal( 'continue', '' ) !== $continue ) {
+ $oldCtx = $this->mainForContinuation->getContext();
+ $newCtx = new DerivativeContext( $oldCtx );
+ $newCtx->setRequest( new DerivativeRequest(
+ $oldCtx->getRequest(),
+ array( 'continue' => $continue ) + $oldCtx->getRequest()->getValues(),
+ $oldCtx->getRequest()->wasPosted()
+ ) );
+ $this->mainForContinuation->setContext( $newCtx );
+ $reset = new ScopedCallback(
+ array( $this->mainForContinuation, 'setContext' ),
+ array( $oldCtx )
+ );
+ }
+ $manager = new ApiContinuationManager(
+ $this->mainForContinuation, $allModules, $generatedModules
+ );
+ $reset = null;
+
+ $this->mainForContinuation->setContinuationManager( $manager );
return array(
- $this->generatorDone,
- $runModules,
+ $manager->isGeneratorDone(),
+ $manager->getRunModules(),
);
}
/**
- * Set the continuation parameter for a module
- *
* @since 1.24
+ * @deprecated since 1.25, use ApiContinuationManager instead
* @param ApiBase $module
* @param string $paramName
* @param string|array $paramValue
*/
public function setContinueParam( ApiBase $module, $paramName, $paramValue ) {
- $name = $module->getModuleName();
- if ( !isset( $this->continueAllModules[$name] ) ) {
- throw new MWException(
- "Module '$name' called ApiResult::setContinueParam but was not " .
- 'passed to ApiResult::beginContinuation'
- );
- }
- if ( !$this->continueAllModules[$name] ) {
- throw new MWException(
- "Module '$name' was not supposed to have been executed, but " .
- 'it was executed anyway'
+ wfDeprecated( __METHOD__, '1.25' );
+ if ( $this->mainForContinuation->getContinuationManager() ) {
+ $this->mainForContinuation->getContinuationManager()->addContinueParam(
+ $module, $paramName, $paramValue
);
}
- $paramName = $module->encodeParamName( $paramName );
- if ( is_array( $paramValue ) ) {
- $paramValue = join( '|', $paramValue );
- }
- $this->continuationData[$name][$paramName] = $paramValue;
}
/**
- * Set the continuation parameter for the generator module
- *
* @since 1.24
+ * @deprecated since 1.25, use ApiContinuationManager instead
* @param ApiBase $module
* @param string $paramName
* @param string|array $paramValue
*/
public function setGeneratorContinueParam( ApiBase $module, $paramName, $paramValue ) {
- $name = $module->getModuleName();
- $paramName = $module->encodeParamName( $paramName );
- if ( is_array( $paramValue ) ) {
- $paramValue = join( '|', $paramValue );
+ wfDeprecated( __METHOD__, '1.25' );
+ if ( $this->mainForContinuation->getContinuationManager() ) {
+ $this->mainForContinuation->getContinuationManager()->addGeneratorContinueParam(
+ $module, $paramName, $paramValue
+ );
}
- $this->generatorContinuationData[$name][$paramName] = $paramValue;
}
/**
* Close continuation, writing the data into the result
- *
* @since 1.24
+ * @deprecated since 1.25, use ApiContinuationManager instead
* @param string $style 'standard' for the new style since 1.21, 'raw' for
* the style used in 1.20 and earlier.
*/
public function endContinuation( $style = 'standard' ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ if ( !$this->mainForContinuation->getContinuationManager() ) {
+ return;
+ }
+
if ( $style === 'raw' ) {
- $key = 'query-continue';
- $data = array_merge_recursive(
- $this->continuationData, $this->generatorContinuationData
- );
+ $data = $this->mainForContinuation->getContinuationManager()->getRawContinuation();
+ if ( $data ) {
+ $this->addValue( null, 'query-continue', $data, self::ADD_ON_TOP | self::NO_SIZE_CHECK );
+ }
} else {
- $key = 'continue';
- $data = array();
-
- $finishedModules = array_diff(
- array_keys( $this->continueAllModules ),
- array_keys( $this->continuationData )
- );
+ $this->mainForContinuation->getContinuationManager()->setContinuationIntoResult( $this );
+ }
+ }
- // First, grab the non-generator-using continuation data
- $continuationData = array_diff_key(
- $this->continuationData, $this->continueGeneratedModules
- );
- foreach ( $continuationData as $module => $kvp ) {
- $data += $kvp;
- }
+ /**
+ * No-op, this is now checked on insert.
+ * @deprecated since 1.25
+ */
+ public function cleanUpUTF8() {
+ wfDeprecated( __METHOD__, '1.25' );
+ }
- // Next, handle the generator-using continuation data
- $continuationData = array_intersect_key(
- $this->continuationData, $this->continueGeneratedModules
- );
- if ( $continuationData ) {
- // Some modules are unfinished: include those params, and copy
- // the generator params.
- foreach ( $continuationData as $module => $kvp ) {
- $data += $kvp;
- }
- $data += array_intersect_key(
- $this->getMain()->getRequest()->getValues(),
- array_flip( $this->generatorParams )
- );
- } elseif ( $this->generatorContinuationData ) {
- // All the generator-using modules are complete, but the
- // generator isn't. Continue the generator and restart the
- // generator-using modules
- $this->generatorParams = array();
- foreach ( $this->generatorContinuationData as $kvp ) {
- $this->generatorParams = array_merge(
- $this->generatorParams, array_keys( $kvp )
- );
- $data += $kvp;
- }
- $finishedModules = array_diff(
- $finishedModules, $this->continueGeneratedModules
- );
- } else {
- // Generator and prop modules are all done. Mark it so.
- $this->generatorDone = true;
- }
+ /**
+ * Get the 'real' size of a result item. This means the strlen() of the item,
+ * or the sum of the strlen()s of the elements if the item is an array.
+ * @deprecated since 1.25, no external users known and there doesn't seem
+ * to be any case for such use over just checking the return value from the
+ * add/set methods.
+ * @param mixed $value
+ * @return int
+ */
+ public static function size( $value ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ return self::valueSize( $value );
+ }
- // Set 'continue' if any continuation data is set or if the generator
- // still needs to run
- if ( $data || !$this->generatorDone ) {
- $data['continue'] =
- ( $this->generatorDone ? '-' : join( '|', $this->generatorParams ) ) .
- '||' . join( '|', $finishedModules );
- }
- }
- if ( $data ) {
- $this->addValue( null, $key, $data, ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
- }
+ /**
+ * Converts a Status object to an array suitable for addValue
+ * @deprecated since 1.25, use ApiErrorFormatter::arrayFromStatus()
+ * @param Status $status
+ * @param string $errorType
+ * @return array
+ */
+ public function convertStatusToArray( $status, $errorType = 'error' ) {
+ wfDeprecated( __METHOD__, '1.25' );
+ return $this->errorFormatter->arrayFromStatus( $status, $errorType );
}
+
+ /**@}*/
}
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
diff --git a/includes/api/ApiRevisionDelete.php b/includes/api/ApiRevisionDelete.php
index cbc30704..28962316 100644
--- a/includes/api/ApiRevisionDelete.php
+++ b/includes/api/ApiRevisionDelete.php
@@ -111,7 +111,7 @@ class ApiRevisionDelete extends ApiBase {
// @codingStandardsIgnoreEnd
$data['items'] = array_values( $data['items'] );
- $result->setIndexedTagName( $data['items'], 'i' );
+ ApiResult::setIndexedTagName( $data['items'], 'i' );
$result->addValue( null, $this->getModuleName(), $data );
}
@@ -121,12 +121,12 @@ class ApiRevisionDelete extends ApiBase {
);
$errors = $this->formatStatusMessages( $status->getErrorsByType( 'error' ) );
if ( $errors ) {
- $this->getResult()->setIndexedTagName( $errors, 'e' );
+ ApiResult::setIndexedTagName( $errors, 'e' );
$ret['errors'] = $errors;
}
$warnings = $this->formatStatusMessages( $status->getErrorsByType( 'warning' ) );
if ( $warnings ) {
- $this->getResult()->setIndexedTagName( $warnings, 'w' );
+ ApiResult::setIndexedTagName( $warnings, 'w' );
$ret['warnings'] = $warnings;
}
@@ -146,14 +146,14 @@ class ApiRevisionDelete extends ApiBase {
$message = array( 'message' => $msg->getKey() );
if ( $msg->getParams() ) {
$message['params'] = $msg->getParams();
- $result->setIndexedTagName( $message['params'], 'p' );
+ ApiResult::setIndexedTagName( $message['params'], 'p' );
}
} else {
$message = array( 'message' => $m['message'] );
$msg = wfMessage( $m['message'] );
if ( isset( $m['params'] ) ) {
$message['params'] = $m['params'];
- $result->setIndexedTagName( $message['params'], 'p' );
+ ApiResult::setIndexedTagName( $message['params'], 'p' );
$msg->params( $m['params'] );
}
}
@@ -199,34 +199,18 @@ class ApiRevisionDelete extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'type' => 'Type of revision deletion being performed',
- 'target' => 'Page title for the revision deletion, if required for the type',
- 'ids' => 'Identifiers for the revisions to be deleted',
- 'hide' => 'What to hide for each revision',
- 'show' => 'What to unhide for each revision',
- 'suppress' => 'Whether to suppress data from administrators as well as others',
- 'reason' => 'Reason for the deletion/undeletion',
- );
- }
-
- public function getDescription() {
- return 'Delete/undelete revisions.';
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
+ 'action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
'hide=content&token=123ABC'
- => 'Hide content for revision 12345 on the Main Page',
- 'api.php?action=revisiondelete&type=logging&ids=67890&hide=content|comment|user&' .
+ => 'apihelp-revisiondelete-example-revision',
+ 'action=revisiondelete&type=logging&ids=67890&hide=content|comment|user&' .
'reason=BLP%20violation&token=123ABC'
- => 'Hide all data on log entry 67890 with the reason "BLP violation"',
+ => 'apihelp-revisiondelete-example-log',
);
}
diff --git a/includes/api/ApiRollback.php b/includes/api/ApiRollback.php
index f4d3c541..02e62a03 100644
--- a/includes/api/ApiRollback.php
+++ b/includes/api/ApiRollback.php
@@ -120,31 +120,10 @@ class ApiRollback extends ApiBase {
'nochange'
),
),
- );
- }
-
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'title' => "Title of the page you want to roll back. Cannot be used together with {$p}pageid",
- 'pageid' => "Page ID of the page you want to roll back. Cannot be used together with {$p}title",
- 'user' => 'Name of the user whose edits are to be rolled back.',
'token' => array(
- /* Standard description automatically prepended */
- 'For compatibility, the token used in the web UI is also accepted.'
+ // Standard definition automatically inserted
+ ApiBase::PARAM_HELP_MSG_APPEND => array( 'api-help-param-token-webui' ),
),
- 'summary' => 'Custom edit summary. If empty, default summary will be used',
- 'markbot' => 'Mark the reverted edits and the revert as bot edits',
- 'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
- 'use preferences or do not change watch',
- );
- }
-
- public function getDescription() {
- return array(
- 'Undo the last edit to the page. If the last user who edited the page made',
- 'multiple edits in a row, they will all be rolled back.'
);
}
@@ -211,12 +190,13 @@ class ApiRollback extends ApiBase {
return $this->mTitleObj;
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=rollback&title=Main%20Page&user=Catrope&token=123ABC',
- 'api.php?action=rollback&pageid=122&user=Catrope&token=123ABC',
- 'api.php?action=rollback&title=Main%20Page&user=217.121.114.116&' .
- 'token=123ABC&summary=Reverting%20vandalism&markbot=1'
+ 'action=rollback&title=Main%20Page&user=Example&token=123ABC' =>
+ 'apihelp-rollback-example-simple',
+ 'action=rollback&title=Main%20Page&user=192.0.2.5&' .
+ 'token=123ABC&summary=Reverting%20vandalism&markbot=1' =>
+ 'apihelp-rollback-example-summary',
);
}
diff --git a/includes/api/ApiRsd.php b/includes/api/ApiRsd.php
index a2771a0c..d4661125 100644
--- a/includes/api/ApiRsd.php
+++ b/includes/api/ApiRsd.php
@@ -37,12 +37,15 @@ class ApiRsd extends ApiBase {
$result->addValue( null, 'version', '1.0' );
$result->addValue( null, 'xmlns', 'http://archipelago.phrasewise.com/rsd' );
- $service = array( 'apis' => $this->formatRsdApiList() );
- ApiResult::setContent( $service, 'MediaWiki', 'engineName' );
- ApiResult::setContent( $service, 'https://www.mediawiki.org/', 'engineLink' );
- ApiResult::setContent( $service, Title::newMainPage()->getCanonicalURL(), 'homePageLink' );
+ $service = array(
+ 'apis' => $this->formatRsdApiList(),
+ 'engineName' => 'MediaWiki',
+ 'engineLink' => 'https://www.mediawiki.org/',
+ 'homePageLink' => Title::newMainPage()->getCanonicalURL(),
+ );
- $result->setIndexedTagName( $service['apis'], 'api' );
+ ApiResult::setSubelementsList( $service, array( 'engineName', 'engineLink', 'homePageLink' ) );
+ ApiResult::setIndexedTagName( $service['apis'], 'api' );
$result->addValue( null, 'service', $service );
}
@@ -51,21 +54,10 @@ class ApiRsd extends ApiBase {
return new ApiFormatXmlRsd( $this->getMain(), 'xml' );
}
- public function getAllowedParams() {
- return array();
- }
-
- public function getParamDescription() {
- return array();
- }
-
- public function getDescription() {
- return 'Export an RSD (Really Simple Discovery) schema.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=rsd'
+ 'action=rsd'
+ => 'apihelp-rsd-example-simple',
);
}
@@ -110,7 +102,7 @@ class ApiRsd extends ApiBase {
)
),
);
- wfRunHooks( 'ApiRsdServiceApis', array( &$apis ) );
+ Hooks::run( 'ApiRsdServiceApis', array( &$apis ) );
return $apis;
}
@@ -134,7 +126,8 @@ class ApiRsd extends ApiBase {
);
$settings = array();
if ( isset( $info['docs'] ) ) {
- ApiResult::setContent( $settings, $info['docs'], 'docs' );
+ $settings['docs'] = $info['docs'];
+ ApiResult::setSubelementsList( $settings, 'docs' );
}
if ( isset( $info['settings'] ) ) {
foreach ( $info['settings'] as $setting => $val ) {
@@ -144,12 +137,12 @@ class ApiRsd extends ApiBase {
$xmlVal = $val;
}
$setting = array( 'name' => $setting );
- ApiResult::setContent( $setting, $xmlVal );
+ ApiResult::setContentValue( $setting, 'value', $xmlVal );
$settings[] = $setting;
}
}
if ( count( $settings ) ) {
- $this->getResult()->setIndexedTagName( $settings, 'setting' );
+ ApiResult::setIndexedTagName( $settings, 'setting' );
$data['settings'] = $settings;
}
$outputData[] = $data;
@@ -168,4 +161,9 @@ class ApiFormatXmlRsd extends ApiFormatXml {
public function getMimeType() {
return 'application/rsd+xml';
}
+
+ public static function recXmlPrint( $name, $value, $indent, $attributes = array() ) {
+ unset( $attributes['_idx'] );
+ return parent::recXmlPrint( $name, $value, $indent, $attributes );
+ }
}
diff --git a/includes/api/ApiSerializable.php b/includes/api/ApiSerializable.php
new file mode 100644
index 00000000..70e93a6c
--- /dev/null
+++ b/includes/api/ApiSerializable.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Created on Feb 25, 2015
+ *
+ * Copyright © 2015 Brad Jorsch "bjorsch@wikimedia.org"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This interface allows for overriding the default conversion applied by
+ * ApiResult::validateValue().
+ *
+ * @note This is currently an informal interface; it need not be explicitly
+ * implemented, as long as the method is provided. This allows for extension
+ * code to maintain compatibility with older MediaWiki while still taking
+ * advantage of this where it exists.
+ *
+ * @ingroup API
+ * @since 1.25
+ */
+interface ApiSerializable {
+ /**
+ * Return the value to be added to ApiResult in place of this object.
+ *
+ * The returned value must not be an object, and must pass
+ * all checks done by ApiResult::validateValue().
+ *
+ * @return mixed
+ */
+ public function serializeForApiResult();
+}
diff --git a/includes/api/ApiSetNotificationTimestamp.php b/includes/api/ApiSetNotificationTimestamp.php
index 5d527fc7..86a3f6aa 100644
--- a/includes/api/ApiSetNotificationTimestamp.php
+++ b/includes/api/ApiSetNotificationTimestamp.php
@@ -46,7 +46,8 @@ class ApiSetNotificationTimestamp extends ApiBase {
$params = $this->extractRequestParams();
$this->requireMaxOneParameter( $params, 'timestamp', 'torevid', 'newerthanrevid' );
- $this->getResult()->beginContinuation( $params['continue'], array(), array() );
+ $continuationManager = new ApiContinuationManager( $this, array(), array() );
+ $this->setContinuationManager( $continuationManager );
$pageSet = $this->getPageSet();
if ( $params['entirewatchlist'] && $pageSet->getDataSource() !== null ) {
@@ -73,7 +74,8 @@ class ApiSetNotificationTimestamp extends ApiBase {
}
$title = reset( $pageSet->getGoodTitles() );
if ( $title ) {
- $timestamp = Revision::getTimestampFromId( $title, $params['torevid'] );
+ $timestamp = Revision::getTimestampFromId(
+ $title, $params['torevid'], Revision::READ_LATEST );
if ( $timestamp ) {
$timestamp = $dbw->timestamp( $timestamp );
} else {
@@ -86,7 +88,8 @@ class ApiSetNotificationTimestamp extends ApiBase {
}
$title = reset( $pageSet->getGoodTitles() );
if ( $title ) {
- $revid = $title->getNextRevisionID( $params['newerthanrevid'] );
+ $revid = $title->getNextRevisionID(
+ $params['newerthanrevid'], Title::GAID_FOR_UPDATE );
if ( $revid ) {
$timestamp = $dbw->timestamp( Revision::getTimestampFromId( $title, $revid ) );
} else {
@@ -112,21 +115,21 @@ class ApiSetNotificationTimestamp extends ApiBase {
foreach ( $pageSet->getInvalidTitles() as $title ) {
$r = array();
$r['title'] = $title;
- $r['invalid'] = '';
+ $r['invalid'] = true;
$result[] = $r;
}
foreach ( $pageSet->getMissingPageIDs() as $p ) {
$page = array();
$page['pageid'] = $p;
- $page['missing'] = '';
- $page['notwatched'] = '';
+ $page['missing'] = true;
+ $page['notwatched'] = true;
$result[] = $page;
}
foreach ( $pageSet->getMissingRevisionIDs() as $r ) {
$rev = array();
$rev['revid'] = $r;
- $rev['missing'] = '';
- $rev['notwatched'] = '';
+ $rev['missing'] = true;
+ $rev['notwatched'] = true;
$result[] = $rev;
}
@@ -160,7 +163,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
'title' => $title->getPrefixedText(),
);
if ( !$title->exists() ) {
- $r['missing'] = '';
+ $r['missing'] = true;
}
if ( isset( $timestamps[$ns] ) && array_key_exists( $dbkey, $timestamps[$ns] ) ) {
$r['notificationtimestamp'] = '';
@@ -168,17 +171,18 @@ class ApiSetNotificationTimestamp extends ApiBase {
$r['notificationtimestamp'] = wfTimestamp( TS_ISO_8601, $timestamps[$ns][$dbkey] );
}
} else {
- $r['notwatched'] = '';
+ $r['notwatched'] = true;
}
$result[] = $r;
}
}
- $apiResult->setIndexedTagName( $result, 'page' );
+ ApiResult::setIndexedTagName( $result, 'page' );
}
$apiResult->addValue( null, $this->getModuleName(), $result );
- $apiResult->endContinuation();
+ $this->setContinuationManager( null );
+ $continuationManager->setContinuationIntoResult( $apiResult );
}
/**
@@ -219,7 +223,9 @@ class ApiSetNotificationTimestamp extends ApiBase {
'newerthanrevid' => array(
ApiBase::PARAM_TYPE => 'integer'
),
- 'continue' => '',
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
);
if ( $flags ) {
$result += $this->getPageSet()->getFinalParams( $flags );
@@ -228,34 +234,17 @@ class ApiSetNotificationTimestamp extends ApiBase {
return $result;
}
- public function getParamDescription() {
- return $this->getPageSet()->getFinalParamDescription() + array(
- 'entirewatchlist' => 'Work on all watched pages',
- 'timestamp' => 'Timestamp to which to set the notification timestamp',
- 'torevid' => 'Revision to set the notification timestamp to (one page only)',
- 'newerthanrevid' => 'Revision to set the notification timestamp newer than (one page only)',
- 'continue' => 'When more results are available, use this to continue',
- );
- }
-
- public function getDescription() {
- return array( 'Update the notification timestamp for watched pages.',
- 'This affects the highlighting of changed pages in the watchlist and history,',
- 'and the sending of email when the "Email me when a page on my watchlist is',
- 'changed" preference is enabled.'
- );
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
- => 'Reset the notification status for the entire watchlist',
- 'api.php?action=setnotificationtimestamp&titles=Main_page&token=123ABC'
- => 'Reset the notification status for "Main page"',
- 'api.php?action=setnotificationtimestamp&titles=Main_page&' .
+ 'action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
+ => 'apihelp-setnotificationtimestamp-example-all',
+ 'action=setnotificationtimestamp&titles=Main_page&token=123ABC'
+ => 'apihelp-setnotificationtimestamp-example-page',
+ 'action=setnotificationtimestamp&titles=Main_page&' .
'timestamp=2012-01-01T00:00:00Z&token=123ABC'
- => 'Set the notification timestamp for "Main page" so all edits ' .
- 'since 1 January 2012 are unviewed',
+ => 'apihelp-setnotificationtimestamp-example-pagetimestamp',
+ 'action=setnotificationtimestamp&generator=allpages&gapnamespace=2&token=123ABC'
+ => 'apihelp-setnotificationtimestamp-example-allpages',
);
}
diff --git a/includes/api/ApiStashEdit.php b/includes/api/ApiStashEdit.php
new file mode 100644
index 00000000..c4b717c7
--- /dev/null
+++ b/includes/api/ApiStashEdit.php
@@ -0,0 +1,412 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+/**
+ * Prepare and edit in shared cache so that it can be reused on edit
+ *
+ * This endpoint can be called via AJAX as the user focuses on the edit
+ * summary box. By the time of submission, the parse may have already
+ * finished, and can be immediately used on page save. Certain parser
+ * functions like {{REVISIONID}} or {{CURRENTTIME}} may cause the cache
+ * to not be used on edit. Template and files used are check for changes
+ * since the output was generated. The cache TTL is also kept low for sanity.
+ *
+ * @ingroup API
+ * @since 1.25
+ */
+class ApiStashEdit extends ApiBase {
+ const ERROR_NONE = 'stashed';
+ const ERROR_PARSE = 'error_parse';
+ const ERROR_CACHE = 'error_cache';
+ const ERROR_UNCACHEABLE = 'uncacheable';
+
+ public function execute() {
+ global $wgMemc;
+
+ $user = $this->getUser();
+ $params = $this->extractRequestParams();
+
+ $page = $this->getTitleOrPageId( $params );
+ $title = $page->getTitle();
+
+ if ( !ContentHandler::getForModelID( $params['contentmodel'] )
+ ->isSupportedFormat( $params['contentformat'] )
+ ) {
+ $this->dieUsage( "Unsupported content model/format", 'badmodelformat' );
+ }
+
+ // Trim and fix newlines so the key SHA1's match (see RequestContext::getText())
+ $text = rtrim( str_replace( "\r\n", "\n", $params['text'] ) );
+ $textContent = ContentHandler::makeContent(
+ $text, $title, $params['contentmodel'], $params['contentformat'] );
+
+ $page = WikiPage::factory( $title );
+ if ( $page->exists() ) {
+ // Page exists: get the merged content with the proposed change
+ $baseRev = Revision::newFromPageId( $page->getId(), $params['baserevid'] );
+ if ( !$baseRev ) {
+ $this->dieUsage( "No revision ID {$params['baserevid']}", 'missingrev' );
+ }
+ $currentRev = $page->getRevision();
+ if ( !$currentRev ) {
+ $this->dieUsage( "No current revision of page ID {$page->getId()}", 'missingrev' );
+ }
+ // Merge in the new version of the section to get the proposed version
+ $editContent = $page->replaceSectionAtRev(
+ $params['section'],
+ $textContent,
+ $params['sectiontitle'],
+ $baseRev->getId()
+ );
+ if ( !$editContent ) {
+ $this->dieUsage( "Could not merge updated section.", 'replacefailed' );
+ }
+ if ( $currentRev->getId() == $baseRev->getId() ) {
+ // Base revision was still the latest; nothing to merge
+ $content = $editContent;
+ } else {
+ // Merge the edit into the current version
+ $baseContent = $baseRev->getContent();
+ $currentContent = $currentRev->getContent();
+ if ( !$baseContent || !$currentContent ) {
+ $this->dieUsage( "Missing content for page ID {$page->getId()}", 'missingrev' );
+ }
+ $handler = ContentHandler::getForModelID( $baseContent->getModel() );
+ $content = $handler->merge3( $baseContent, $editContent, $currentContent );
+ }
+ } else {
+ // New pages: use the user-provided content model
+ $content = $textContent;
+ }
+
+ if ( !$content ) { // merge3() failed
+ $this->getResult()->addValue( null,
+ $this->getModuleName(), array( 'status' => 'editconflict' ) );
+ return;
+ }
+
+ // The user will abort the AJAX request by pressing "save", so ignore that
+ ignore_user_abort( true );
+
+ // Get a key based on the source text, format, and user preferences
+ $key = self::getStashKey( $title, $content, $user );
+ // De-duplicate requests on the same key
+ if ( $user->pingLimiter( 'stashedit' ) ) {
+ $status = 'ratelimited';
+ } elseif ( $wgMemc->lock( $key, 0, 30 ) ) {
+ $unlocker = new ScopedCallback( function() use ( $key ) {
+ global $wgMemc;
+ $wgMemc->unlock( $key );
+ } );
+ $status = self::parseAndStash( $page, $content, $user );
+ } else {
+ $status = 'busy';
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), array( 'status' => $status ) );
+ }
+
+ /**
+ * @param WikiPage $page
+ * @param Content $content
+ * @param User $user
+ * @return integer ApiStashEdit::ERROR_* constant
+ * @since 1.25
+ */
+ public static function parseAndStash( WikiPage $page, Content $content, User $user ) {
+ global $wgMemc;
+
+ $format = $content->getDefaultFormat();
+ $editInfo = $page->prepareContentForEdit( $content, null, $user, $format, false );
+
+ if ( $editInfo && $editInfo->output ) {
+ $key = self::getStashKey( $page->getTitle(), $content, $user );
+
+ list( $stashInfo, $ttl ) = self::buildStashValue(
+ $editInfo->pstContent, $editInfo->output, $editInfo->timestamp
+ );
+
+ if ( $stashInfo ) {
+ $ok = $wgMemc->set( $key, $stashInfo, $ttl );
+ if ( $ok ) {
+ wfDebugLog( 'StashEdit', "Cached parser output for key '$key'." );
+ return self::ERROR_NONE;
+ } else {
+ wfDebugLog( 'StashEdit', "Failed to cache parser output for key '$key'." );
+ return self::ERROR_CACHE;
+ }
+ } else {
+ wfDebugLog( 'StashEdit', "Uncacheable parser output for key '$key'." );
+ return self::ERROR_UNCACHEABLE;
+ }
+ }
+
+ return self::ERROR_PARSE;
+ }
+
+ /**
+ * Attempt to cache PST content and corresponding parser output in passing
+ *
+ * This method can be called when the output was already generated for other
+ * reasons. Parsing should not be done just to call this method, however.
+ * $pstOpts must be that of the user doing the edit preview. If $pOpts does
+ * not match the options of WikiPage::makeParserOptions( 'canonical' ), this
+ * will do nothing. Provided the values are cacheable, they will be stored
+ * in memcached so that final edit submission might make use of them.
+ *
+ * @param Article|WikiPage $page Page title
+ * @param Content $content Proposed page content
+ * @param Content $pstContent The result of preSaveTransform() on $content
+ * @param ParserOutput $pOut The result of getParserOutput() on $pstContent
+ * @param ParserOptions $pstOpts Options for $pstContent (MUST be for prospective author)
+ * @param ParserOptions $pOpts Options for $pOut
+ * @param string $timestamp TS_MW timestamp of parser output generation
+ * @return bool Success
+ */
+ public static function stashEditFromPreview(
+ Page $page, Content $content, Content $pstContent, ParserOutput $pOut,
+ ParserOptions $pstOpts, ParserOptions $pOpts, $timestamp
+ ) {
+ global $wgMemc;
+
+ // getIsPreview() controls parser function behavior that references things
+ // like user/revision that don't exists yet. The user/text should already
+ // be set correctly by callers, just double check the preview flag.
+ if ( !$pOpts->getIsPreview() ) {
+ return false; // sanity
+ } elseif ( $pOpts->getIsSectionPreview() ) {
+ return false; // short-circuit (need the full content)
+ }
+
+ // PST parser options are for the user (handles signatures, etc...)
+ $user = $pstOpts->getUser();
+ // Get a key based on the source text, format, and user preferences
+ $key = self::getStashKey( $page->getTitle(), $content, $user );
+
+ // Parser output options must match cannonical options.
+ // Treat some options as matching that are different but don't matter.
+ $canonicalPOpts = $page->makeParserOptions( 'canonical' );
+ $canonicalPOpts->setIsPreview( true ); // force match
+ $canonicalPOpts->setTimestamp( $pOpts->getTimestamp() ); // force match
+ if ( !$pOpts->matches( $canonicalPOpts ) ) {
+ wfDebugLog( 'StashEdit', "Uncacheable preview output for key '$key' (options)." );
+ return false;
+ }
+
+ // Build a value to cache with a proper TTL
+ list( $stashInfo, $ttl ) = self::buildStashValue( $pstContent, $pOut, $timestamp );
+ if ( !$stashInfo ) {
+ wfDebugLog( 'StashEdit', "Uncacheable parser output for key '$key' (rev/TTL)." );
+ return false;
+ }
+
+ $ok = $wgMemc->set( $key, $stashInfo, $ttl );
+ if ( !$ok ) {
+ wfDebugLog( 'StashEdit', "Failed to cache preview parser output for key '$key'." );
+ } else {
+ wfDebugLog( 'StashEdit', "Cached preview output for key '$key'." );
+ }
+
+ return $ok;
+ }
+
+ /**
+ * Check that a prepared edit is in cache and still up-to-date
+ *
+ * This method blocks if the prepared edit is already being rendered,
+ * waiting until rendering finishes before doing final validity checks.
+ *
+ * The cache is rejected if template or file changes are detected.
+ * Note that foreign template or file transclusions are not checked.
+ *
+ * The result is a map (pstContent,output,timestamp) with fields
+ * extracted directly from WikiPage::prepareContentForEdit().
+ *
+ * @param Title $title
+ * @param Content $content
+ * @param User $user User to get parser options from
+ * @return stdClass|bool Returns false on cache miss
+ */
+ public static function checkCache( Title $title, Content $content, User $user ) {
+ global $wgMemc;
+
+ $key = self::getStashKey( $title, $content, $user );
+ $editInfo = $wgMemc->get( $key );
+ if ( !is_object( $editInfo ) ) {
+ $start = microtime( true );
+ // We ignore user aborts and keep parsing. Block on any prior parsing
+ // so as to use it's results and make use of the time spent parsing.
+ if ( $wgMemc->lock( $key, 30, 30 ) ) {
+ $editInfo = $wgMemc->get( $key );
+ $wgMemc->unlock( $key );
+ }
+ $sec = microtime( true ) - $start;
+ if ( $sec > .01 ) {
+ wfDebugLog( 'StashEdit', "Waited $sec seconds on '$key'." );
+ }
+ }
+
+ if ( !is_object( $editInfo ) || !$editInfo->output ) {
+ wfDebugLog( 'StashEdit', "No cache value for key '$key'." );
+ return false;
+ }
+
+ $time = wfTimestamp( TS_UNIX, $editInfo->output->getTimestamp() );
+ if ( ( time() - $time ) <= 3 ) {
+ wfDebugLog( 'StashEdit', "Timestamp-based cache hit for key '$key'." );
+ return $editInfo; // assume nothing changed
+ }
+
+ $dbr = wfGetDB( DB_SLAVE );
+ // Check that no templates used in the output changed...
+ $cWhr = array(); // conditions to find changes/creations
+ $dWhr = array(); // conditions to find deletions
+ foreach ( $editInfo->output->getTemplateIds() as $ns => $stuff ) {
+ foreach ( $stuff as $dbkey => $revId ) {
+ $cWhr[] = array( 'page_namespace' => $ns, 'page_title' => $dbkey,
+ 'page_latest != ' . intval( $revId ) );
+ $dWhr[] = array( 'page_namespace' => $ns, 'page_title' => $dbkey );
+ }
+ }
+ $change = $dbr->selectField( 'page', '1', $dbr->makeList( $cWhr, LIST_OR ), __METHOD__ );
+ $n = $dbr->selectField( 'page', 'COUNT(*)', $dbr->makeList( $dWhr, LIST_OR ), __METHOD__ );
+ if ( $change || $n != count( $dWhr ) ) {
+ wfDebugLog( 'StashEdit', "Stale cache for key '$key'; template changed." );
+ return false;
+ }
+
+ // Check that no files used in the output changed...
+ $cWhr = array(); // conditions to find changes/creations
+ $dWhr = array(); // conditions to find deletions
+ foreach ( $editInfo->output->getFileSearchOptions() as $name => $options ) {
+ $cWhr[] = array( 'img_name' => $dbkey,
+ 'img_sha1 != ' . $dbr->addQuotes( strval( $options['sha1'] ) ) );
+ $dWhr[] = array( 'img_name' => $dbkey );
+ }
+ $change = $dbr->selectField( 'image', '1', $dbr->makeList( $cWhr, LIST_OR ), __METHOD__ );
+ $n = $dbr->selectField( 'image', 'COUNT(*)', $dbr->makeList( $dWhr, LIST_OR ), __METHOD__ );
+ if ( $change || $n != count( $dWhr ) ) {
+ wfDebugLog( 'StashEdit', "Stale cache for key '$key'; file changed." );
+ return false;
+ }
+
+ wfDebugLog( 'StashEdit', "Cache hit for key '$key'." );
+
+ return $editInfo;
+ }
+
+ /**
+ * Get the temporary prepared edit stash key for a user
+ *
+ * This key can be used for caching prepared edits provided:
+ * - a) The $user was used for PST options
+ * - b) The parser output was made from the PST using cannonical matching options
+ *
+ * @param Title $title
+ * @param Content $content
+ * @param User $user User to get parser options from
+ * @return string
+ */
+ protected static function getStashKey( Title $title, Content $content, User $user ) {
+ $hash = sha1( implode( ':', array(
+ $content->getModel(),
+ $content->getDefaultFormat(),
+ sha1( $content->serialize( $content->getDefaultFormat() ) ),
+ $user->getId() ?: md5( $user->getName() ), // account for user parser options
+ $user->getId() ? $user->getTouched() : '-' // handle preference change races
+ ) ) );
+
+ return wfMemcKey( 'prepared-edit', md5( $title->getPrefixedDBkey() ), $hash );
+ }
+
+ /**
+ * Build a value to store in memcached based on the PST content and parser output
+ *
+ * This makes a simple version of WikiPage::prepareContentForEdit() as stash info
+ *
+ * @param Content $pstContent
+ * @param ParserOutput $parserOutput
+ * @param string $timestamp TS_MW
+ * @return array (stash info array, TTL in seconds) or (null, 0)
+ */
+ protected static function buildStashValue(
+ Content $pstContent, ParserOutput $parserOutput, $timestamp
+ ) {
+ // If an item is renewed, mind the cache TTL determined by config and parser functions
+ $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getTimestamp() );
+ $ttl = min( $parserOutput->getCacheExpiry() - $since, 5 * 60 );
+
+ if ( $ttl > 0 && !$parserOutput->getFlag( 'vary-revision' ) ) {
+ // Only store what is actually needed
+ $stashInfo = (object)array(
+ 'pstContent' => $pstContent,
+ 'output' => $parserOutput,
+ 'timestamp' => $timestamp
+ );
+ return array( $stashInfo, $ttl );
+ }
+
+ return array( null, 0 );
+ }
+
+ public function getAllowedParams() {
+ return array(
+ 'title' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true
+ ),
+ 'section' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ),
+ 'sectiontitle' => array(
+ ApiBase::PARAM_TYPE => 'string'
+ ),
+ 'text' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true
+ ),
+ 'contentmodel' => array(
+ ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
+ ApiBase::PARAM_REQUIRED => true
+ ),
+ 'contentformat' => array(
+ ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
+ ApiBase::PARAM_REQUIRED => true
+ ),
+ 'baserevid' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_REQUIRED => true
+ )
+ );
+ }
+
+ function needsToken() {
+ return 'csrf';
+ }
+
+ function mustBePosted() {
+ return true;
+ }
+
+ function isInternal() {
+ return true;
+ }
+}
diff --git a/includes/api/ApiTag.php b/includes/api/ApiTag.php
new file mode 100644
index 00000000..527c6cb1
--- /dev/null
+++ b/includes/api/ApiTag.php
@@ -0,0 +1,177 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @ingroup API
+ * @since 1.25
+ */
+class ApiTag extends ApiBase {
+
+ protected function getAvailableTags() {
+ return ChangeTags::listExplicitlyDefinedTags();
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ // make sure the user is allowed
+ if ( !$this->getUser()->isAllowed( 'changetags' ) ) {
+ $this->dieUsage( "You don't have permission to add or remove change tags from individual edits",
+ 'permissiondenied' );
+ }
+
+ // validate and process each revid, rcid and logid
+ $this->requireAtLeastOneParameter( $params, 'revid', 'rcid', 'logid' );
+ $ret = array();
+ if ( $params['revid'] ) {
+ foreach ( $params['revid'] as $id ) {
+ $ret[] = $this->processIndividual( 'revid', $params, $id );
+ }
+ }
+ if ( $params['rcid'] ) {
+ foreach ( $params['rcid'] as $id ) {
+ $ret[] = $this->processIndividual( 'rcid', $params, $id );
+ }
+ }
+ if ( $params['logid'] ) {
+ foreach ( $params['logid'] as $id ) {
+ $ret[] = $this->processIndividual( 'logid', $params, $id );
+ }
+ }
+
+ ApiResult::setIndexedTagName( $ret, 'result' );
+ $this->getResult()->addValue( null, $this->getModuleName(), $ret );
+ }
+
+ protected static function validateLogId( $logid ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $result = $dbr->selectField( 'logging', 'log_id', array( 'log_id' => $logid ),
+ __METHOD__ );
+ return (bool)$result;
+ }
+
+ protected function processIndividual( $type, $params, $id ) {
+ $idResult = array( $type => $id );
+
+ // validate the ID
+ $valid = false;
+ switch ( $type ) {
+ case 'rcid':
+ $valid = RecentChange::newFromId( $id );
+ break;
+ case 'revid':
+ $valid = Revision::newFromId( $id );
+ break;
+ case 'logid':
+ $valid = self::validateLogId( $id );
+ break;
+ }
+
+ if ( !$valid ) {
+ $idResult['status'] = 'error';
+ $idResult += $this->parseMsg( array( "nosuch$type", $id ) );
+ return $idResult;
+ }
+
+ $status = ChangeTags::updateTagsWithChecks( $params['add'],
+ $params['remove'],
+ ( $type === 'rcid' ? $id : null ),
+ ( $type === 'revid' ? $id : null ),
+ ( $type === 'logid' ? $id : null ),
+ null,
+ $params['reason'],
+ $this->getUser() );
+
+ if ( !$status->isOK() ) {
+ if ( $status->hasMessage( 'actionthrottledtext' ) ) {
+ $idResult['status'] = 'skipped';
+ } else {
+ $idResult['status'] = 'failure';
+ $idResult['errors'] = $this->getErrorFormatter()->arrayFromStatus( $status, 'error' );
+ }
+ } else {
+ $idResult['status'] = 'success';
+ if ( is_null( $status->value->logId ) ) {
+ $idResult['noop'] = '';
+ } else {
+ $idResult['actionlogid'] = $status->value->logId;
+ $idResult['added'] = $status->value->addedTags;
+ ApiResult::setIndexedTagName( $idResult['added'], 't' );
+ $idResult['removed'] = $status->value->removedTags;
+ ApiResult::setIndexedTagName( $idResult['removed'], 't' );
+ }
+ }
+ return $idResult;
+ }
+
+ public function mustBePosted() {
+ return true;
+ }
+
+ public function isWriteMode() {
+ return true;
+ }
+
+ public function getAllowedParams() {
+ return array(
+ 'rcid' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true,
+ ),
+ 'revid' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true,
+ ),
+ 'logid' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_ISMULTI => true,
+ ),
+ 'add' => array(
+ ApiBase::PARAM_TYPE => $this->getAvailableTags(),
+ ApiBase::PARAM_ISMULTI => true,
+ ),
+ 'remove' => array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_ISMULTI => true,
+ ),
+ 'reason' => array(
+ ApiBase::PARAM_DFLT => '',
+ ),
+ );
+ }
+
+ public function needsToken() {
+ return 'csrf';
+ }
+
+ protected function getExamplesMessages() {
+ return array(
+ 'action=tag&revid=123&add=vandalism&token=123ABC'
+ => 'apihelp-tag-example-rev',
+ 'action=tag&logid=123&remove=spam&reason=Wrongly+applied&token=123ABC'
+ => 'apihelp-tag-example-log',
+ );
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/API:Tag';
+ }
+}
diff --git a/includes/api/ApiTokens.php b/includes/api/ApiTokens.php
index 9287fe6e..4d7fc5a0 100644
--- a/includes/api/ApiTokens.php
+++ b/includes/api/ApiTokens.php
@@ -34,9 +34,12 @@ class ApiTokens extends ApiBase {
$this->setWarning(
"action=tokens has been deprecated. Please use action=query&meta=tokens instead."
);
+ $this->logFeatureUsage( "action=tokens" );
$params = $this->extractRequestParams();
- $res = array();
+ $res = array(
+ ApiResult::META_TYPE => 'assoc',
+ );
$types = $this->getTokenTypes();
foreach ( $params['type'] as $type ) {
@@ -53,8 +56,9 @@ class ApiTokens extends ApiBase {
}
private function getTokenTypes() {
- // If we're in JSON callback mode, no tokens can be obtained
- if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
+ // If we're in a mode that breaks the same-origin policy, no tokens can
+ // be obtained
+ if ( $this->lacksSameOriginSecurity() ) {
return array();
}
@@ -62,20 +66,22 @@ class ApiTokens extends ApiBase {
if ( $types ) {
return $types;
}
- wfProfileIn( __METHOD__ );
$types = array( 'patrol' => array( 'ApiQueryRecentChanges', 'getPatrolToken' ) );
$names = array( 'edit', 'delete', 'protect', 'move', 'block', 'unblock',
'email', 'import', 'watch', 'options' );
foreach ( $names as $name ) {
$types[$name] = array( 'ApiQueryInfo', 'get' . ucfirst( $name ) . 'Token' );
}
- wfRunHooks( 'ApiTokensGetTokenTypes', array( &$types ) );
+ Hooks::run( 'ApiTokensGetTokenTypes', array( &$types ) );
ksort( $types );
- wfProfileOut( __METHOD__ );
return $types;
}
+ public function isDeprecated() {
+ return true;
+ }
+
public function getAllowedParams() {
return array(
'type' => array(
@@ -86,23 +92,12 @@ class ApiTokens extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'type' => 'Type of token(s) to request'
- );
- }
-
- public function getDescription() {
- return array(
- 'This module is deprecated in favor of action=query&meta=tokens.',
- 'Gets tokens for data-modifying actions.'
- );
- }
-
- protected function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=tokens' => 'Retrieve an edit token (the default)',
- 'api.php?action=tokens&type=email|move' => 'Retrieve an email token and a move token'
+ 'action=tokens'
+ => 'apihelp-tokens-example-edit',
+ 'action=tokens&type=email|move'
+ => 'apihelp-tokens-example-emailmove',
);
}
}
diff --git a/includes/api/ApiUnblock.php b/includes/api/ApiUnblock.php
index 2854a825..1af83ba3 100644
--- a/includes/api/ApiUnblock.php
+++ b/includes/api/ApiUnblock.php
@@ -93,30 +93,16 @@ class ApiUnblock extends ApiBase {
);
}
- public function getParamDescription() {
- $p = $this->getModulePrefix();
-
- return array(
- 'id' => "ID of the block you want to unblock (obtained through list=blocks). " .
- "Cannot be used together with {$p}user",
- 'user' => "Username, IP address or IP range you want to unblock. " .
- "Cannot be used together with {$p}id",
- 'reason' => 'Reason for unblock',
- );
- }
-
- public function getDescription() {
- return 'Unblock a user.';
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=unblock&id=105',
- 'api.php?action=unblock&user=Bob&reason=Sorry%20Bob'
+ 'action=unblock&id=105'
+ => 'apihelp-unblock-example-id',
+ 'action=unblock&user=Bob&reason=Sorry%20Bob'
+ => 'apihelp-unblock-example-user',
);
}
diff --git a/includes/api/ApiUndelete.php b/includes/api/ApiUndelete.php
index 07aad9f5..c23e9ff6 100644
--- a/includes/api/ApiUndelete.php
+++ b/includes/api/ApiUndelete.php
@@ -69,7 +69,7 @@ class ApiUndelete extends ApiBase {
}
if ( $retval[1] ) {
- wfRunHooks( 'FileUndeleteComplete',
+ Hooks::run( 'FileUndeleteComplete',
array( $titleObj, $params['fileids'], $this->getUser(), $params['reason'] ) );
}
@@ -117,39 +117,17 @@ class ApiUndelete extends ApiBase {
);
}
- public function getParamDescription() {
- return array(
- 'title' => 'Title of the page you want to restore',
- 'reason' => 'Reason for restoring',
- 'timestamps' => array(
- 'Timestamps of the revisions to restore.',
- 'If both timestamps and fileids are empty, all will be restored.',
- ),
- 'fileids' => array(
- 'IDs of the file revisions to restore.',
- 'If both timestamps and fileids are empty, all will be restored.',
- ),
- 'watchlist' => 'Unconditionally add or remove the page from your ' .
- 'watchlist, use preferences or do not change watch',
- );
- }
-
- public function getDescription() {
- return array(
- 'Restore certain revisions of a deleted page. A list of deleted revisions ',
- '(including timestamps) can be retrieved through list=deletedrevs, and a list',
- 'of deleted file ids can be retrieved through list=filearchive.'
- );
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page',
- 'api.php?action=undelete&title=Main%20Page&token=123ABC&timestamps=20070703220045|20070702194856'
+ 'action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page'
+ => 'apihelp-undelete-example-page',
+ 'action=undelete&title=Main%20Page&token=123ABC' .
+ '&timestamps=2007-07-03T22:00:45Z|2007-07-02T19:48:56Z'
+ => 'apihelp-undelete-example-revisions',
);
}
diff --git a/includes/api/ApiUpload.php b/includes/api/ApiUpload.php
index 657181b7..74ae05a8 100644
--- a/includes/api/ApiUpload.php
+++ b/includes/api/ApiUpload.php
@@ -64,7 +64,7 @@ class ApiUpload extends ApiBase {
$this->dieUsage( 'No upload module set', 'nomodule' );
}
} catch ( UploadStashException $e ) { // XXX: don't spam exception log
- $this->dieUsage( get_class( $e ) . ": " . $e->getMessage(), 'stasherror' );
+ $this->handleStashException( $e );
}
// First check permission to upload
@@ -112,7 +112,7 @@ class ApiUpload extends ApiBase {
$result['imageinfo'] = $this->mUpload->getImageInfo( $this->getResult() );
}
} catch ( UploadStashException $e ) { // XXX: don't spam exception log
- $this->dieUsage( get_class( $e ) . ": " . $e->getMessage(), 'stasherror' );
+ $this->handleStashException( $e );
}
$this->getResult()->addValue( null, $this->getModuleName(), $result );
@@ -159,7 +159,9 @@ class ApiUpload extends ApiBase {
if ( $warnings && count( $warnings ) > 0 ) {
$result['warnings'] = $warnings;
}
- } catch ( MWException $e ) {
+ } catch ( UploadStashException $e ) {
+ $this->handleStashException( $e );
+ } catch ( Exception $e ) {
$this->dieUsage( $e->getMessage(), 'stashfailed' );
}
@@ -180,7 +182,7 @@ class ApiUpload extends ApiBase {
try {
$result['filekey'] = $this->performStash();
$result['sessionkey'] = $result['filekey']; // backwards compatibility
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$result['warnings']['stashfailed'] = $e->getMessage();
}
@@ -205,7 +207,9 @@ class ApiUpload extends ApiBase {
if ( $this->mParams['offset'] == 0 ) {
try {
$filekey = $this->performStash();
- } catch ( MWException $e ) {
+ } catch ( UploadStashException $e ) {
+ $this->handleStashException( $e );
+ } catch ( Exception $e ) {
// FIXME: Error handling here is wrong/different from rest of this
$this->dieUsage( $e->getMessage(), 'stashfailed' );
}
@@ -214,7 +218,11 @@ class ApiUpload extends ApiBase {
$status = $this->mUpload->addChunk(
$chunkPath, $chunkSize, $this->mParams['offset'] );
if ( !$status->isGood() ) {
- $this->dieUsage( $status->getWikiText(), 'stashfailed' );
+ $extradata = array(
+ 'offset' => $this->mUpload->getOffset(),
+ );
+
+ $this->dieUsage( $status->getWikiText(), 'stashfailed', 0, $extradata );
return array();
}
@@ -223,11 +231,12 @@ class ApiUpload extends ApiBase {
// Check we added the last chunk:
if ( $this->mParams['offset'] + $chunkSize == $this->mParams['filesize'] ) {
if ( $this->mParams['async'] ) {
- $progress = UploadBase::getSessionStatus( $filekey );
+ $progress = UploadBase::getSessionStatus( $this->getUser(), $filekey );
if ( $progress && $progress['result'] === 'Poll' ) {
$this->dieUsage( "Chunk assembly already in progress.", 'stashfailed' );
}
UploadBase::setSessionStatus(
+ $this->getUser(),
$filekey,
array( 'result' => 'Poll',
'stage' => 'queued', 'status' => Status::newGood() )
@@ -272,16 +281,17 @@ class ApiUpload extends ApiBase {
*/
private function performStash() {
try {
- $stashFile = $this->mUpload->stashFile();
+ $stashFile = $this->mUpload->stashFile( $this->getUser() );
if ( !$stashFile ) {
throw new MWException( 'Invalid stashed file' );
}
$fileKey = $stashFile->getFileKey();
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$message = 'Stashing temporary file failed: ' . get_class( $e ) . ' ' . $e->getMessage();
wfDebug( __METHOD__ . ' ' . $message . "\n" );
- throw new MWException( $message );
+ $className = get_class( $e );
+ throw new $className( $message );
}
return $fileKey;
@@ -300,7 +310,7 @@ class ApiUpload extends ApiBase {
try {
$data['filekey'] = $this->performStash();
$data['sessionkey'] = $data['filekey'];
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$data['stashfailed'] = $e->getMessage();
}
$data['invalidparameter'] = $parameter;
@@ -327,7 +337,7 @@ class ApiUpload extends ApiBase {
// Status report for "upload to stash"/"upload from stash"
if ( $this->mParams['filekey'] && $this->mParams['checkstatus'] ) {
- $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
+ $progress = UploadBase::getSessionStatus( $this->getUser(), $this->mParams['filekey'] );
if ( !$progress ) {
$this->dieUsage( 'No result in status data', 'missingresult' );
} elseif ( !$progress['status']->isGood() ) {
@@ -504,20 +514,20 @@ class ApiUpload extends ApiBase {
'filetype' => $verification['finalExt'],
'allowed' => array_values( array_unique( $this->getConfig()->get( 'FileExtensions' ) ) )
);
- $this->getResult()->setIndexedTagName( $extradata['allowed'], 'ext' );
+ ApiResult::setIndexedTagName( $extradata['allowed'], 'ext' );
$msg = "Filetype not permitted: ";
if ( isset( $verification['blacklistedExt'] ) ) {
$msg .= join( ', ', $verification['blacklistedExt'] );
$extradata['blacklisted'] = array_values( $verification['blacklistedExt'] );
- $this->getResult()->setIndexedTagName( $extradata['blacklisted'], 'ext' );
+ ApiResult::setIndexedTagName( $extradata['blacklisted'], 'ext' );
} else {
$msg .= $verification['finalExt'];
}
$this->dieUsage( $msg, 'filetype-banned', 0, $extradata );
break;
case UploadBase::VERIFICATION_ERROR:
- $this->getResult()->setIndexedTagName( $verification['details'], 'detail' );
+ ApiResult::setIndexedTagName( $verification['details'], 'detail' );
$this->dieUsage( 'This file did not pass file verification', 'verification-error',
0, array( 'details' => $verification['details'] ) );
break;
@@ -549,7 +559,7 @@ class ApiUpload extends ApiBase {
if ( $warnings ) {
// Add indices
$result = $this->getResult();
- $result->setIndexedTagName( $warnings, 'warning' );
+ ApiResult::setIndexedTagName( $warnings, 'warning' );
if ( isset( $warnings['duplicate'] ) ) {
$dupes = array();
@@ -557,7 +567,7 @@ class ApiUpload extends ApiBase {
foreach ( $warnings['duplicate'] as $dupe ) {
$dupes[] = $dupe->getName();
}
- $result->setIndexedTagName( $dupes, 'duplicate' );
+ ApiResult::setIndexedTagName( $dupes, 'duplicate' );
$warnings['duplicate'] = $dupes;
}
@@ -576,6 +586,41 @@ class ApiUpload extends ApiBase {
}
/**
+ * Handles a stash exception, giving a useful error to the user.
+ * @param Exception $e The exception we encountered.
+ */
+ protected function handleStashException( $e ) {
+ $exceptionType = get_class( $e );
+
+ switch ( $exceptionType ) {
+ case 'UploadStashFileNotFoundException':
+ $this->dieUsage( 'Could not find the file in the stash: ' . $e->getMessage(), 'stashedfilenotfound' );
+ break;
+ case 'UploadStashBadPathException':
+ $this->dieUsage( 'File key of improper format or otherwise invalid: ' . $e->getMessage(), 'stashpathinvalid' );
+ break;
+ case 'UploadStashFileException':
+ $this->dieUsage( 'Could not store upload in the stash: ' . $e->getMessage(), 'stashfilestorage' );
+ break;
+ case 'UploadStashZeroLengthFileException':
+ $this->dieUsage( 'File is of zero length, and could not be stored in the stash: ' . $e->getMessage(), 'stashzerolength' );
+ break;
+ case 'UploadStashNotLoggedInException':
+ $this->dieUsage( 'Not logged in: ' . $e->getMessage(), 'stashnotloggedin' );
+ break;
+ case 'UploadStashWrongOwnerException':
+ $this->dieUsage( 'Wrong owner: ' . $e->getMessage(), 'stashwrongowner' );
+ break;
+ case 'UploadStashNoSuchKeyException':
+ $this->dieUsage( 'No such filekey: ' . $e->getMessage(), 'stashnosuchfilekey' );
+ break;
+ default:
+ $this->dieUsage( $exceptionType . ": " . $e->getMessage(), 'stasherror' );
+ break;
+ }
+ }
+
+ /**
* Perform the actual upload. Returns a suitable result array on success;
* dies on failure.
*
@@ -612,11 +657,12 @@ class ApiUpload extends ApiBase {
// No errors, no warnings: do the upload
if ( $this->mParams['async'] ) {
- $progress = UploadBase::getSessionStatus( $this->mParams['filekey'] );
+ $progress = UploadBase::getSessionStatus( $this->getUser(), $this->mParams['filekey'] );
if ( $progress && $progress['result'] === 'Poll' ) {
$this->dieUsage( "Upload from stash already in progress.", 'publishfailed' );
}
UploadBase::setSessionStatus(
+ $this->getUser(),
$this->mParams['filekey'],
array( 'result' => 'Poll', 'stage' => 'queued', 'status' => Status::newGood() )
);
@@ -650,7 +696,7 @@ class ApiUpload extends ApiBase {
);
}
- $this->getResult()->setIndexedTagName( $error, 'error' );
+ ApiResult::setIndexedTagName( $error, 'error' );
$this->dieUsage( 'An internal error occurred', 'internal-error', 0, $error );
}
$result['result'] = 'Success';
@@ -730,59 +776,17 @@ class ApiUpload extends ApiBase {
return $params;
}
- public function getParamDescription() {
- $params = array(
- 'filename' => 'Target filename',
- 'comment' => 'Upload comment. Also used as the initial page text for new ' .
- 'files if "text" is not specified',
- 'text' => 'Initial page text for new files',
- 'watch' => 'Watch the page',
- 'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
- 'use preferences or do not change watch',
- 'ignorewarnings' => 'Ignore any warnings',
- 'file' => 'File contents',
- 'url' => 'URL to fetch the file from',
- 'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
- 'sessionkey' => 'Same as filekey, maintained for backward compatibility.',
- 'stash' => 'If set, the server will not add the file to the repository ' .
- 'and stash it temporarily.',
-
- 'chunk' => 'Chunk contents',
- 'offset' => 'Offset of chunk in bytes',
- 'filesize' => 'Filesize of entire upload',
-
- 'async' => 'Make potentially large file operations asynchronous when possible',
- 'asyncdownload' => 'Make fetching a URL asynchronous',
- 'leavemessage' => 'If asyncdownload is used, leave a message on the user talk page if finished',
- 'statuskey' => 'Fetch the upload status for this file key (upload by URL)',
- 'checkstatus' => 'Only fetch the upload status for the given file key',
- );
-
- return $params;
- }
-
- public function getDescription() {
- return array(
- 'Upload a file, or get the status of pending uploads. Several methods are available:',
- ' * Upload file contents directly, using the "file" parameter',
- ' * Have the MediaWiki server fetch a file from a URL, using the "url" parameter',
- ' * Complete an earlier upload that failed due to warnings, using the "filekey" parameter',
- 'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
- 'sending the "file".',
- );
- }
-
public function needsToken() {
return 'csrf';
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=upload&filename=Wiki.png' .
- '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC'
- => 'Upload from a URL',
- 'api.php?action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1&token=123ABC'
- => 'Complete an upload that failed due to warnings',
+ 'action=upload&filename=Wiki.png' .
+ '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC'
+ => 'apihelp-upload-example-url',
+ 'action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1&token=123ABC'
+ => 'apihelp-upload-example-filekey',
);
}
diff --git a/includes/api/ApiUserrights.php b/includes/api/ApiUserrights.php
index c3ceb345..3ccdde25 100644
--- a/includes/api/ApiUserrights.php
+++ b/includes/api/ApiUserrights.php
@@ -32,12 +32,28 @@ class ApiUserrights extends ApiBase {
private $mUser = null;
+ /**
+ * Get a UserrightsPage object, or subclass.
+ * @return UserrightsPage
+ */
+ protected function getUserRightsPage() {
+ return new UserrightsPage;
+ }
+
+ /**
+ * Get all available groups.
+ * @return array
+ */
+ protected function getAllGroups() {
+ return User::getAllGroups();
+ }
+
public function execute() {
$params = $this->extractRequestParams();
$user = $this->getUrUser( $params );
- $form = new UserrightsPage;
+ $form = $this->getUserRightsPage();
$form->setContext( $this->getContext() );
$r['user'] = $user->getName();
$r['userid'] = $user->getId();
@@ -47,8 +63,8 @@ class ApiUserrights extends ApiBase {
);
$result = $this->getResult();
- $result->setIndexedTagName( $r['added'], 'group' );
- $result->setIndexedTagName( $r['removed'], 'group' );
+ ApiResult::setIndexedTagName( $r['added'], 'group' );
+ ApiResult::setIndexedTagName( $r['removed'], 'group' );
$result->addValue( null, $this->getModuleName(), $r );
}
@@ -65,7 +81,7 @@ class ApiUserrights extends ApiBase {
$user = isset( $params['user'] ) ? $params['user'] : '#' . $params['userid'];
- $form = new UserrightsPage;
+ $form = $this->getUserRightsPage();
$form->setContext( $this->getContext() );
$status = $form->fetchUser( $user );
if ( !$status->isOK() ) {
@@ -94,37 +110,23 @@ class ApiUserrights extends ApiBase {
ApiBase::PARAM_TYPE => 'integer',
),
'add' => array(
- ApiBase::PARAM_TYPE => User::getAllGroups(),
+ ApiBase::PARAM_TYPE => $this->getAllGroups(),
ApiBase::PARAM_ISMULTI => true
),
'remove' => array(
- ApiBase::PARAM_TYPE => User::getAllGroups(),
+ ApiBase::PARAM_TYPE => $this->getAllGroups(),
ApiBase::PARAM_ISMULTI => true
),
'reason' => array(
ApiBase::PARAM_DFLT => ''
- )
- );
- }
-
- public function getParamDescription() {
- return array(
- 'user' => 'User name',
- 'userid' => 'User id',
- 'add' => 'Add the user to these groups',
- 'remove' => 'Remove the user from these groups',
+ ),
'token' => array(
- /* Standard description automatically prepended */
- 'For compatibility, the token used in the web UI is also accepted.'
+ // Standard definition automatically inserted
+ ApiBase::PARAM_HELP_MSG_APPEND => array( 'api-help-param-token-webui' ),
),
- 'reason' => 'Reason for the change',
);
}
- public function getDescription() {
- return 'Add/remove a user to/from groups.';
- }
-
public function needsToken() {
return 'userrights';
}
@@ -133,10 +135,12 @@ class ApiUserrights extends ApiBase {
return $this->getUrUser( $params )->getName();
}
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC',
- 'api.php?action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC'
+ 'action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC'
+ => 'apihelp-userrights-example-user',
+ 'action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC'
+ => 'apihelp-userrights-example-userid',
);
}
diff --git a/includes/api/ApiWatch.php b/includes/api/ApiWatch.php
index e6a660b3..85d051de 100644
--- a/includes/api/ApiWatch.php
+++ b/includes/api/ApiWatch.php
@@ -44,7 +44,8 @@ class ApiWatch extends ApiBase {
$params = $this->extractRequestParams();
- $this->getResult()->beginContinuation( $params['continue'], array(), array() );
+ $continuationManager = new ApiContinuationManager( $this, array(), array() );
+ $this->setContinuationManager( $continuationManager );
$pageSet = $this->getPageSet();
// by default we use pageset to extract the page to work on.
@@ -69,7 +70,7 @@ class ApiWatch extends ApiBase {
$r = $this->watchTitle( $title, $user, $params );
$res[] = $r;
}
- $this->getResult()->setIndexedTagName( $res, 'w' );
+ ApiResult::setIndexedTagName( $res, 'w' );
} else {
// dont allow use of old title parameter with new pageset parameters.
$extraParams = array_keys( array_filter( $pageSet->extractRequestParams(), function ( $x ) {
@@ -92,7 +93,9 @@ class ApiWatch extends ApiBase {
$res = $this->watchTitle( $title, $user, $params, true );
}
$this->getResult()->addValue( null, $this->getModuleName(), $res );
- $this->getResult()->endContinuation();
+
+ $this->setContinuationManager( null );
+ $continuationManager->setContinuationIntoResult( $this->getResult() );
}
private function watchTitle( Title $title, User $user, array $params,
@@ -104,37 +107,22 @@ class ApiWatch extends ApiBase {
$res = array( 'title' => $title->getPrefixedText() );
- // Currently unnecessary, code to act as a safeguard against any change
- // in current behavior of uselang.
- // Copy from ApiParse
- $oldLang = null;
- if ( isset( $params['uselang'] ) &&
- $params['uselang'] != $this->getContext()->getLanguage()->getCode()
- ) {
- $oldLang = $this->getContext()->getLanguage(); // Backup language
- $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
- }
-
if ( $params['unwatch'] ) {
$status = UnwatchAction::doUnwatch( $title, $user );
+ $res['unwatched'] = $status->isOK();
if ( $status->isOK() ) {
- $res['unwatched'] = '';
$res['message'] = $this->msg( 'removedwatchtext', $title->getPrefixedText() )
->title( $title )->parseAsBlock();
}
} else {
$status = WatchAction::doWatch( $title, $user );
+ $res['watched'] = $status->isOK();
if ( $status->isOK() ) {
- $res['watched'] = '';
$res['message'] = $this->msg( 'addedwatchtext', $title->getPrefixedText() )
->title( $title )->parseAsBlock();
}
}
- if ( !is_null( $oldLang ) ) {
- $this->getContext()->setLanguage( $oldLang ); // Reset language to $oldLang
- }
-
if ( !$status->isOK() ) {
if ( $compatibilityMode ) {
$this->dieStatus( $status );
@@ -176,8 +164,9 @@ class ApiWatch extends ApiBase {
ApiBase::PARAM_DEPRECATED => true
),
'unwatch' => false,
- 'uselang' => null,
- 'continue' => '',
+ 'continue' => array(
+ ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+ ),
);
if ( $flags ) {
$result += $this->getPageSet()->getFinalParams( $flags );
@@ -186,25 +175,14 @@ class ApiWatch extends ApiBase {
return $result;
}
- public function getParamDescription() {
- $psModule = $this->getPageSet();
-
- return $psModule->getParamDescription() + array(
- 'title' => 'The page to (un)watch. use titles instead',
- 'unwatch' => 'If set the page will be unwatched rather than watched',
- 'uselang' => 'Language to show the message in',
- 'continue' => 'When more results are available, use this to continue',
- );
- }
-
- public function getDescription() {
- return 'Add or remove pages from/to the current user\'s watchlist.';
- }
-
- public function getExamples() {
+ protected function getExamplesMessages() {
return array(
- 'api.php?action=watch&titles=Main_Page' => 'Watch the page "Main Page"',
- 'api.php?action=watch&titles=Main_Page&unwatch=' => 'Unwatch the page "Main Page"',
+ 'action=watch&titles=Main_Page&token=123ABC'
+ => 'apihelp-watch-example-watch',
+ 'action=watch&titles=Main_Page&unwatch=&token=123ABC'
+ => 'apihelp-watch-example-unwatch',
+ 'action=watch&generator=allpages&gapnamespace=0&token=123ABC'
+ => 'apihelp-watch-example-generator',
);
}
diff --git a/includes/api/i18n/ar.json b/includes/api/i18n/ar.json
new file mode 100644
index 00000000..aa456f00
--- /dev/null
+++ b/includes/api/i18n/ar.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Meno25",
+ "أحمد المحمودي",
+ "Khaled",
+ "Fatz"
+ ]
+ },
+ "apihelp-main-param-format": "صيغة الخرج.",
+ "apihelp-block-description": "منع مستخدم.",
+ "apihelp-block-param-reason": "السبب للمنع.",
+ "apihelp-block-param-nocreate": "امنع إنشاء الحسابات.",
+ "apihelp-compare-param-fromtitle": "العنوان الأول للمقارنة.",
+ "apihelp-compare-param-fromid": "رقم الصفحة الأول للمقارنة.",
+ "apihelp-compare-param-fromrev": "أول مراجعة للمقارنة.",
+ "apihelp-compare-param-totitle": "العنوان الثاني للمقارنة.",
+ "apihelp-compare-param-toid": "رقم الصفحة الثاني للمقارنة.",
+ "apihelp-compare-param-torev": "المراجعة الثانية للمقارنة.",
+ "apihelp-createaccount-param-name": "اسم المستخدم.",
+ "apihelp-delete-description": "حذف صفحة.",
+ "apihelp-delete-param-unwatch": "أزل الصفحة من قائمة مراقبتك.",
+ "apihelp-edit-description": "إنشاء وتعديل الصفحات.",
+ "apihelp-edit-param-watch": "أضف الصفحة إلى لائحة مراقبة المستعمل الحالي",
+ "apihelp-emailuser-description": "مراسلة المستخدم",
+ "apihelp-patrol-example-rcid": "ابحث عن تغيير جديد",
+ "apihelp-query+prefixsearch-param-offset": "عدد النتائج المراد تخطيها."
+}
diff --git a/includes/api/i18n/av.json b/includes/api/i18n/av.json
new file mode 100644
index 00000000..df85c0b6
--- /dev/null
+++ b/includes/api/i18n/av.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Аль-Гимравий"
+ ]
+ },
+ "apihelp-block-param-user": "Нужее блокалда лъезе бокьун вугев гІахьалчиясул цІар, IP-адрес яги IP-адресазул диапазон"
+}
diff --git a/includes/api/i18n/awa.json b/includes/api/i18n/awa.json
new file mode 100644
index 00000000..d0945921
--- /dev/null
+++ b/includes/api/i18n/awa.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "apihelp-block-description": "सदस्य कय अवरोधित करा जाय।",
+ "apihelp-block-param-reason": "ब्लाक करेकै कारण",
+ "apihelp-block-param-nocreate": "खाते बनावेकै रोका जाय",
+ "apihelp-edit-param-minor": "छोट संपादन"
+}
diff --git a/includes/api/i18n/be-tarask.json b/includes/api/i18n/be-tarask.json
new file mode 100644
index 00000000..a09cb5ab
--- /dev/null
+++ b/includes/api/i18n/be-tarask.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "Red Winged Duck"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Дакумэнтацыя]]\n* [[mw:API:FAQ|Частыя пытаньні]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Сьпіс рассылкі]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-аб’явы]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Памылкі і запыты]\n</div>\n<strong>Статус:</strong> усе магчымасьці на гэтай старонцы павінны працаваць, але API знаходзіцца ў актыўнай распрацоўцы і можа зьмяняцца ў любы момант. Падпісвайцеся на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ рассылку mediawiki-api-announce] дзеля паведамленьняў пра абнаўленьні.\n\n<strong>Памылковыя запыты:</strong> калі да API дасылаюцца памылковыя запыты, HTTP-загаловак будзе дасланы з ключом «MediaWiki-API-Error», а потым значэньне загалоўку і код памылкі будуць выстаўленыя на аднолькавае значэньне. Дзеля дадатковай інфармацыі глядзіце [[mw:API:Errors_and_warnings|API: Памылкі і папярэджаньні]].",
+ "apihelp-main-param-action": "Дзеяньне для выкананьня.",
+ "apihelp-main-param-format": "Фармат вываду.",
+ "apihelp-main-param-maxlag": "Максымальная затрымка можа ўжывацца, калі MediaWiki ўсталяваная ў клястэр з рэплікаванай базай зьвестак. Дзеля захаваньня дзеяньняў, якія выклікаюць затрымку рэплікацыі, гэты парамэтар можа прымусіць кліента чакаць, пакуль затрымка рэплікацыі меншая за яго значэньне. У выпадку доўгай затрымкі, вяртаецца код памылкі <samp>maxlag</samp> з паведамленьнем кшталту <samp>Чаканьне $host: $lag сэкундаў затрымкі</samp>.<br />Глядзіце [[mw:Manual:Maxlag_parameter|Інструкцыя:Парамэтар maxlag]] дзеля дадатковай інфармацыі.",
+ "apihelp-main-param-smaxage": "Выстаўце загаловак <code>s-maxage</code> на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца.",
+ "apihelp-main-param-maxage": "Выстаўляе загаловак <code>max-age</code> на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца.",
+ "apihelp-main-param-assert": "Упэўніцеся, што ўдзельнік увайшоў у сыстэму, калі зададзена <kbd>user</kbd>, або мае правы робата, калі зададзена <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Любое значэньне, пададзенае тут, будзе ўключанае ў адказ. Можа быць выкарыстанае для адрозьненьня запытаў.",
+ "apihelp-main-param-servedby": "Уключае ў вынік назву сэрвэра, які апрацаваў запыт.",
+ "apihelp-main-param-curtimestamp": "Уключае ў вынік пазнаку актуальнага часу.",
+ "apihelp-main-param-origin": "Пры звароце да API з дапамогай міждамэннага AJAX-запыту (CORS), выстаўце парамэтру значэньне зыходнага дамэну. Ён мусіць быць уключаны ў кожны папярэдні запыт і такім чынам мусіць быць часткай URI-запыту (ня цела POST). Ён мусіць супадаць з адной з крыніц у загалоўку <code>Origin</code>, павінна быць зададзена нешта кшталту <kbd>https://en.wikipedia.org</kbd> або <kbd>https://meta.wikimedia.org</kbd>. Калі парамэтар не супадае з загалоўкам <code>Origin</code>, будзе вернуты адказ з кодам памылкі 403. Калі парамэтар супадае з загалоўкам <code>Origin</code> і крыніца знаходзіцца ў белым сьпісе, будзе выстаўлены загаловак <code>Access-Control-Allow-Origin</code>.",
+ "apihelp-main-param-uselang": "Мова для выкарыстаньня ў перакладах паведамленьняў. Сьпіс кодаў можа быць атрыманы з <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> з <kbd>siprop=languages</kbd>, або трэба вызначыць <kbd>user</kbd>, каб ужываць наладкі мовы цяперашняга карыстальніка, або вызначыць <kbd>content</kbd>, каб ужываць мову зьместу гэтай вікі.",
+ "apihelp-block-description": "Блякаваньне ўдзельніка.",
+ "apihelp-block-param-user": "Імя ўдзельніка, IP-адрас або IP-дыяпазон, якія вы хочаце заблякаваць.",
+ "apihelp-block-param-expiry": "Час заканчэньня. Можа быць адносным (напрыклад, <kbd>5 months</kbd> або <kbd>2 weeks</kbd>) ці абсалютным (напрыклад, <kbd>2014-09-18T12:34:56Z</kbd>). Калі выстаўлены на <kbd>infinite</kbd>, <kbd>indefinite</kbd> ці <kbd>never</kbd>, блякаваньне будзе бестэрміновым.",
+ "apihelp-block-param-reason": "Прычына блякаваньня.",
+ "apihelp-block-param-anononly": "Заблякаваць толькі ананімных удзельнікаў (напрыклад, забараніць ананімныя праўкі з гэтага IP-адрасу).",
+ "apihelp-block-param-nocreate": "Забарона стварэньня рахункаў.",
+ "apihelp-block-param-autoblock": "Аўтаматычна блякаваць апошні ўжыты IP-адрас, а таксама ўсе наступныя IP-адрасы, зь якіх будуць спробы ўваходу.",
+ "apihelp-block-param-noemail": "Забараняе ўдзельніку дасылаць лісты электроннай пошты празь вікі (трэба мець права <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Схаваць імя ўдзельніка з журналу блякаваньняў (патрабуе права <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Дазволіць удзельніку рэдагаваць уласную старонку гутарак (залежыць ад <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Калі ўдзельнік ужо заблякаваны, перапісаць дзейнае блякаваньне.",
+ "apihelp-block-param-watchuser": "Назіраць за старонкай удзельніка або старонкай IP-адрасу, а таксама старонкай гутарак.",
+ "apihelp-block-example-ip-simple": "Заблякаваць IP-адрас <kbd>192.0.2.5</kbd> на тры дні з прычынай <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Заблякаваць удзельніка <kbd>Vandal</kbd> назаўсёды з прычынай <kbd>Vandalism</kbd>, а таксама забараніць стварэньне новых рахункаў і адсылку лістоў электроннай поштай.",
+ "apihelp-clearhasmsg-description": "Ачышчае сьцяг <code>hasmsg</code> для актуальнага карыстальніка.",
+ "apihelp-clearhasmsg-example-1": "Ачыстка сьцягу <code>hasmsg</code> для актуальнага карыстальніка",
+ "apihelp-compare-description": "Атрымаць розьніцу паміж 2 старонкамі.\n\nВы мусіце перадаць нумар вэрсіі, назву або ID старонкі для абодвух «from» і «to».",
+ "apihelp-compare-param-fromtitle": "Першая назва для параўнаньня.",
+ "apihelp-compare-param-fromid": "ID першай старонкі для параўнаньня.",
+ "apihelp-compare-param-fromrev": "Першая вэрсія для параўнаньня.",
+ "apihelp-compare-param-totitle": "Другая назва для параўнаньня.",
+ "apihelp-compare-param-toid": "ID другой старонкі для параўнаньня.",
+ "apihelp-compare-param-torev": "Другая вэрсія для параўнаньня.",
+ "apihelp-compare-example-1": "Паказвае розьніцу паміж вэрсіямі 1 і 2",
+ "apihelp-createaccount-description": "Стварэньне новага рахунку ўдзельніка.",
+ "apihelp-createaccount-param-name": "Імя ўдзельніка.",
+ "apihelp-createaccount-param-password": "Пароль (ігнаруецца, калі выстаўлена <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Дамэн для вонкавай аўтэнтыфікацыі (неабавязкова).",
+ "apihelp-createaccount-param-token": "Маркер стварэньня рахунку, атрыманы пры першым запыце.",
+ "apihelp-createaccount-param-email": "Адрас электроннай пошты ўдзельніка (неабавязкова).",
+ "apihelp-createaccount-param-realname": "Сапраўднае імя ўдзельніка (неабавязкова).",
+ "apihelp-createaccount-param-mailpassword": "Калі ўсталяванае любое значэньне, выпадковы пароль будзе дасланы карыстальніку на электронную пошту.",
+ "apihelp-createaccount-param-reason": "Неабавязковая прычына стварэньня рахунку, якая будзе запісаная ў журнал.",
+ "apihelp-createaccount-param-language": "Моўны код, які будзе выстаўлены ўдзельніку па змоўчаньні (неабавязкова, па змоўчаньні мова зьместу).",
+ "apihelp-createaccount-example-pass": "Стварэньне ўдзельніка <kbd>testuser</kbd> з паролем <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Стварэньне ўдзельніка <kbd>testmailuser</kbd> і адпраўка выпадковага паролю электроннай поштай."
+}
diff --git a/includes/api/i18n/bn.json b/includes/api/i18n/bn.json
new file mode 100644
index 00000000..05407ff5
--- /dev/null
+++ b/includes/api/i18n/bn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftabuzzaman"
+ ]
+ },
+ "apihelp-login-example-login": "প্রবেশ"
+}
diff --git a/includes/api/i18n/bs.json b/includes/api/i18n/bs.json
new file mode 100644
index 00000000..420e6ac0
--- /dev/null
+++ b/includes/api/i18n/bs.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Palapa"
+ ]
+ },
+ "apihelp-main-param-action": "Koju akciju izvesti.",
+ "apihelp-main-param-format": "Format izlaza.",
+ "apihelp-block-description": "Blokiraj korisnika",
+ "apihelp-block-param-reason": "Razlog za blokadu",
+ "apihelp-block-example-ip-simple": "Blokiraj IP 192.0.2.5 na tri dana sa razlogom \"Prvi napad\"",
+ "apihelp-compare-param-fromtitle": "Prvi naslov za poređenje.",
+ "apihelp-delete-description": "Obriši stranicu.",
+ "apihelp-edit-param-text": "Sadržaj stranice.",
+ "apihelp-edit-param-minor": "Mala izmjena."
+}
diff --git a/includes/api/i18n/ca.json b/includes/api/i18n/ca.json
new file mode 100644
index 00000000..7aa17307
--- /dev/null
+++ b/includes/api/i18n/ca.json
@@ -0,0 +1,43 @@
+{
+ "@metadata": {
+ "authors": [
+ "Toniher",
+ "Macofe",
+ "Xavier Dengra"
+ ]
+ },
+ "apihelp-main-param-format": "El format de la sortida.",
+ "apihelp-block-description": "Bloca un usuari.",
+ "apihelp-block-param-reason": "Raó del blocatge.",
+ "apihelp-block-param-nocreate": "Evita la creació de comptes.",
+ "apihelp-createaccount-description": "Creeu un nou compte d'usuari.",
+ "apihelp-createaccount-param-name": "Nom d'usuari.",
+ "apihelp-createaccount-param-password": "Contrasenya (ignorada si es defineix <var>$1mailpassword</var>)",
+ "apihelp-createaccount-param-email": "Adreça electrònica de l'usuari (opcional).",
+ "apihelp-createaccount-param-realname": "Nom real de l'usuari (opcional).",
+ "apihelp-delete-description": "Suprimeix una pàgina.",
+ "apihelp-disabled-description": "Aquest mòdul ha estat desactivat.",
+ "apihelp-edit-description": "Crea i edita pàgines.",
+ "apihelp-edit-param-text": "Contingut de la pàgina.",
+ "apihelp-edit-param-minor": "Edició menor.",
+ "apihelp-edit-param-createonly": "No editeu aquesta pàgina si ja existeix.",
+ "apihelp-edit-example-edit": "Editeu una pàgina.",
+ "apihelp-emailuser-description": "Envieu un correu electrònic a un usuari.",
+ "apihelp-emailuser-param-target": "Usuari a qui enviar el correu.",
+ "apihelp-emailuser-param-text": "Cos del correu.",
+ "apihelp-emailuser-param-ccme": "Envia'm una còpia d'aquest correu electrònic.",
+ "apihelp-expandtemplates-param-title": "Títol de la pàgina.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostra només les contribucions esborrades.",
+ "apihelp-feedrecentchanges-param-hideminor": "Amaga les edicions menors.",
+ "apihelp-feedrecentchanges-param-hidebots": "Amaga les edicions de bots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Amaga les edicions anònimes.",
+ "apihelp-feedrecentchanges-param-hideliu": "Amaga les edicions d'usuaris registrats.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Amaga les edicions patrullades.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Amaga les meves edicions.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtra segons etiqueta.",
+ "apihelp-feedrecentchanges-param-target": "Mostra només els canvis de les pàgines enllaçades a aquesta pàgina.",
+ "apihelp-feedrecentchanges-example-simple": "Mostra els canvis recents.",
+ "apihelp-help-example-recursive": "Tota l'ajuda en una sola pàgina.",
+ "apihelp-import-param-rootpage": "Importa com a subpàgina d'aquesta pàgina.",
+ "apihelp-login-example-login": "Inicia sessió."
+}
diff --git a/includes/api/i18n/ce.json b/includes/api/i18n/ce.json
new file mode 100644
index 00000000..1d866ba6
--- /dev/null
+++ b/includes/api/i18n/ce.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "apihelp-main-param-action": "Кхочушдан дезарг.",
+ "apihelp-main-param-format": "Гойту формат.",
+ "apihelp-main-param-curtimestamp": "Хилламийн юкъатоха ханна йолу билгало",
+ "apihelp-createaccount-param-name": "Декъашхочун цӀе.",
+ "apihelp-userrights-param-userid": "Декъашхочун ID."
+}
diff --git a/includes/api/i18n/cs.json b/includes/api/i18n/cs.json
new file mode 100644
index 00000000..059eb82e
--- /dev/null
+++ b/includes/api/i18n/cs.json
@@ -0,0 +1,223 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mormegil",
+ "YjM",
+ "Juandev",
+ "Aktron",
+ "Cvanca"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentace]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:API:Errors_and_warnings|v dokumentaci]].",
+ "apihelp-main-param-action": "Jaká akce se má provést.",
+ "apihelp-main-param-format": "Formát výstupu.",
+ "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „<samp>maxlag</samp>“ s hlášením typu „<samp>Waiting for $host: $lag seconds lagged</samp>“.<br />Více informací najdete v [[mw:Manual:Maxlag_parameter|příručce]].",
+ "apihelp-main-param-smaxage": "Nastaví hlavičku <code>s-maxage</code> na uvedený počet sekund. Chyby se nekešují nikdy.",
+ "apihelp-main-param-maxage": "Nastaví hlavičku <code>max-age</code> na uvedený počet sekund. Chyby se nekešují nikdy.",
+ "apihelp-main-param-assert": "Pokud je nastaveno na „<kbd>user</kbd>“, ověří, že je uživatel přihlášen, pokud je nastaveno na „<kbd>bot</kbd>“, ověří, že má oprávnění „bot“.",
+ "apihelp-main-param-requestid": "Libovolná zde uvedená hodnota bude zahrnuta v odpovědi. Lze použít pro rozlišení požadavků.",
+ "apihelp-main-param-servedby": "Zahrnout do odpovědi název hostitele, který požadavek obsloužil.",
+ "apihelp-main-param-curtimestamp": "Zahrnout do odpovědi aktuální časové razítko.",
+ "apihelp-main-param-origin": "Pokud k API přistupujete pomocí mezidoménového AJAXového požadavku (CORS), nastavte tento parametr na doménu původu. Musí být součástí všech předběžných požadavků, takže musí být součástí URI požadavku (nikoli těla POSTu). Hodnota musí přesně odpovídat jednomu z původů v hlavičce Origin:, takže musí být nastavena na něco jako http://en.wikipedia.org nebo https://meta.wikimedia.org. Pokud parametr neodpovídá hlavičce Origin:, bude vrácena odpověď 403. Pokud parametr odpovídá hlavičce Origin: a tento původ je na bílé listině, bude nastavena hlavička Access-Control-Allow-Origin.",
+ "apihelp-main-param-uselang": "Jazyk, který se má použít pro překlad hlášení. Seznam kódů lze načíst z <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> se <kbd>siprop=languages</kbd>, nebo zadejte „<kbd>user</kbd>“ pro použití předvoleného jazyka aktuálního uživatele či „<kbd>content</kbd>“ pro použití jazyka obsahu této wiki.",
+ "apihelp-block-description": "Zablokovat uživatele.",
+ "apihelp-block-param-user": "Uživatelské jméno, IP adresa nebo rozsah IP adres, které chcete zablokovat.",
+ "apihelp-block-param-reason": "Důvod bloku.",
+ "apihelp-block-param-anononly": "Zablokovat pouze anonymní uživatele (tj. zakázat editovat anonymně z této IP).",
+ "apihelp-block-param-nocreate": "Nedovolit registraci nových uživatelů.",
+ "apihelp-block-param-noemail": "Zakázat uživateli posílat e-maily prostřednictvím wiki. (Vyžaduje oprávnění „<code>blockemail</code>“.)",
+ "apihelp-block-param-hidename": "Skrýt uživatelské jméno v knize zablokování. (Vyžaduje oprávnění <code>hideuser</code>.)",
+ "apihelp-block-param-allowusertalk": "Povolit uživateli editovat svou vlastní diskusní stránku (závisí na <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Pokud již uživatel blokován je, přepsat současný blok.",
+ "apihelp-block-param-watchuser": "Sledovat stránku uživatele nebo IP adresy a jejich diskuzní stránky.",
+ "apihelp-block-example-ip-simple": "Na tři dny zablokovat IP adresu <kbd>192.0.2.5</kbd> s odůvodněním <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Trvale zablokovat uživatele <kbd>Vandal</kbd> s odůvodněním <kbd>Vandalism</kbd> a zabránit vytváření nových účtů a odesílání e-mailů.",
+ "apihelp-compare-description": "Vrátí rozdíl dvou stránek.\n\nVe „from“ a „to“ musíte zadat číslo revize, název stránky nebo ID stránky.",
+ "apihelp-compare-param-fromtitle": "Název první stránky k porovnání.",
+ "apihelp-compare-param-fromid": "ID první stránky k porovnání.",
+ "apihelp-compare-param-fromrev": "Číslo revize první stránky k porovnání.",
+ "apihelp-compare-param-totitle": "Název druhé stránky k porovnání.",
+ "apihelp-compare-param-toid": "ID druhé stránky k porovnání.",
+ "apihelp-compare-param-torev": "Číslo revize druhé stránky k porovnání.",
+ "apihelp-compare-example-1": "Porovnat revize 1 a 2.",
+ "apihelp-createaccount-description": "Vytvořit nový uživatelský účet.",
+ "apihelp-createaccount-param-name": "Uživatelské jméno.",
+ "apihelp-createaccount-param-password": "Heslo (ignorováno, pokud je nastaveno <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Doména pro externí ověření (volitelné).",
+ "apihelp-createaccount-param-email": "E-mailová adresa uživatele (nepovinné).",
+ "apihelp-createaccount-param-realname": "Skutečné jméno uživatele (nepovinné).",
+ "apihelp-createaccount-param-mailpassword": "Pokud je nastaveno na libovolnou hodnotu, zašle se náhodně vygenerované heslo na e-mail uživatele.",
+ "apihelp-createaccount-param-reason": "Případný důvod pro vytvoření účtu, který se zaznamená do logu.",
+ "apihelp-createaccount-param-language": "Kód jazyka, který se má uživateli nastavit jako výchozí (volitelné, výchozí je jazyk obsahu).",
+ "apihelp-createaccount-example-pass": "Vytvořit uživatele <kbd>testuser</kbd> s heslem <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Vytvořit uživatele <kbd>testmailuser</kbd> a zaslat mu e-mail s náhodně vygenerovaným heslem.",
+ "apihelp-delete-description": "Smazat stránku.",
+ "apihelp-delete-param-title": "Název stránky, která se má smazat. Není možné použít společně s <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID stránky, která se má smazat. Není možné použít společně s <var>$1title</var>.",
+ "apihelp-delete-param-watch": "Přidat stránku na seznam sledovaných.",
+ "apihelp-delete-example-simple": "Smazat stránku <kbd>Main Page</kbd>.",
+ "apihelp-disabled-description": "Tento modul byl deaktivován.",
+ "apihelp-edit-description": "Vytvářet a upravovat stránky.",
+ "apihelp-edit-param-sectiontitle": "Název nové sekce.",
+ "apihelp-edit-param-text": "Obsah stránky.",
+ "apihelp-edit-param-minor": "Malá editace.",
+ "apihelp-edit-param-notminor": "Nemalá editace.",
+ "apihelp-edit-param-bot": "Označit tuto editaci jako editaci bota.",
+ "apihelp-edit-param-createonly": "Needitovat stránku, pokud již existuje.",
+ "apihelp-edit-param-nocreate": "Pokud stránka neexistuje, vrátit chybu.",
+ "apihelp-edit-param-watch": "Přidat stránku na seznam sledovaných.",
+ "apihelp-edit-param-unwatch": "Odstranit stránku ze seznamu sledovaných.",
+ "apihelp-edit-param-watchlist": "Bezpodmíněnečně přidat nebo odstranit stránku ze sledovaných stránek aktuálního uživatele, použít nastavení nebo neměnit sledování.",
+ "apihelp-edit-param-redirect": "Automaticky opravit přesměrování.",
+ "apihelp-edit-example-edit": "Upravit stránku.",
+ "apihelp-emailuser-description": "Poslat uživateli e-mail.",
+ "apihelp-emailuser-param-text": "Tělo zprávy.",
+ "apihelp-emailuser-param-ccme": "Odeslat mi kopii této zprávy.",
+ "apihelp-expandtemplates-param-text": "Wikitext k převedení.",
+ "apihelp-feedcontributions-description": "Vrátí kanál příspěvků uživatele.",
+ "apihelp-feedcontributions-param-feedformat": "Formát kanálu.",
+ "apihelp-feedcontributions-param-year": "Od roku (a dříve).",
+ "apihelp-feedcontributions-param-month": "Od měsíce (a dříve)",
+ "apihelp-feedcontributions-param-deletedonly": "Zobrazit pouze smazané příspěvky.",
+ "apihelp-feedrecentchanges-param-namespace": "Jmenný prostor, na který mají být výsledky omezeny.",
+ "apihelp-feedrecentchanges-param-from": "Zobrazit změny od",
+ "apihelp-feedrecentchanges-param-hideminor": "Skrýt drobné změny.",
+ "apihelp-feedrecentchanges-param-hidebots": "Skrýt úpravy provedené roboty.",
+ "apihelp-feedrecentchanges-param-hideanons": "Skrýt změny provedené anonymními uživateli.",
+ "apihelp-feedrecentchanges-param-hideliu": "Skrýt změny provedené registrovanými uživateli.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Skrýt prověřené změny.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Skrýt změny aktuálního uživatele.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrovat podle značek.",
+ "apihelp-feedrecentchanges-param-target": "Zobrazit jen změny na stránkách odkazovaných z této stránky.",
+ "apihelp-feedrecentchanges-example-simple": "Zobrazit poslední změny.",
+ "apihelp-feedrecentchanges-example-30days": "Zobrazit poslední změny za 30 dní.",
+ "apihelp-filerevert-description": "Revertovat soubor na starší verzi.",
+ "apihelp-filerevert-param-filename": "Cílový název souboru, bez prefixu Soubor:",
+ "apihelp-filerevert-param-comment": "Vložit komentář.",
+ "apihelp-help-description": "Zobrazuje nápovědu k uvedeným modulům.",
+ "apihelp-help-param-modules": "Moduly, pro které se má zobrazit nápověda (hodnoty parametrů action= a format= nebo „main“). Submoduly lze zadávat pomocí „+“.",
+ "apihelp-help-param-submodules": "Zahrnout nápovědu pro podmoduly uvedeného modulu.",
+ "apihelp-help-param-recursivesubmodules": "Zahrnout nápovědu pro podmoduly rekurzivně.",
+ "apihelp-help-param-helpformat": "Formát výstupu nápovědy.",
+ "apihelp-help-param-wrap": "Obalit výstup do standardní struktury API odpovědi.",
+ "apihelp-help-param-toc": "Zahrnout v HTML výstupu tabulku obsahu.",
+ "apihelp-help-example-main": "Nápověda k hlavnímu modulu",
+ "apihelp-help-example-recursive": "Veškerá nápověda na jedné stránce",
+ "apihelp-help-example-help": "Nápověda k samotnému modulu nápovědy",
+ "apihelp-help-example-query": "Nápověda pro dva podmoduly query",
+ "apihelp-imagerotate-description": "Otočit jeden nebo více obrázků.",
+ "apihelp-import-param-summary": "Import shrnutí.",
+ "apihelp-import-param-xml": "Nahraný XML soubor.",
+ "apihelp-import-param-rootpage": "Importovat jako podstránku k této stránce.",
+ "apihelp-login-param-name": "Uživatelské jméno.",
+ "apihelp-login-param-password": "Heslo.",
+ "apihelp-login-param-domain": "Doména (volitelná)",
+ "apihelp-login-example-login": "Přihlášení",
+ "apihelp-logout-example-logout": "Odhlášení aktuálního uživatele.",
+ "apihelp-move-description": "Přesunout stránku.",
+ "apihelp-move-param-reason": "Důvod k přejmenování.",
+ "apihelp-move-param-movetalk": "Přejmenovat diskuzní stránku, pokud existuje.",
+ "apihelp-move-param-movesubpages": "Přejmenovat možné podstránky",
+ "apihelp-move-param-noredirect": "Nevytvářet přesměrování.",
+ "apihelp-move-param-watch": "Přidat stránku a přesměrování do sledovaných stránek aktuálního uživatele.",
+ "apihelp-move-param-unwatch": "Odstranit stránku a přesměrování ze sledovaných stránek současného uživatele.",
+ "apihelp-move-param-ignorewarnings": "Ignorovat všechna varování.",
+ "apihelp-opensearch-param-search": "Hledaný řetězec.",
+ "apihelp-opensearch-param-limit": "Maximální počet vrácených výsledků",
+ "apihelp-opensearch-param-namespace": "Jmenné prostory pro vyhledávání.",
+ "apihelp-opensearch-param-format": "Formát výstupu.",
+ "apihelp-opensearch-example-te": "Najít stránky začínající na „<kbd>Te</kbd>“.",
+ "apihelp-options-example-reset": "Vrátit všechna nastavení.",
+ "apihelp-parse-example-page": "Parsovat stránku.",
+ "apihelp-parse-example-text": "Parsovat wikitext.",
+ "apihelp-patrol-example-revid": "Prověřit revizi.",
+ "apihelp-protect-description": "Změnit úroveň zamčení stránky.",
+ "apihelp-protect-param-reason": "Důvod pro odemčení.",
+ "apihelp-protect-example-protect": "Zamknout stránku.",
+ "apihelp-query+alldeletedrevisions-description": "Seznam všech smazaných revizí od konkrétního uživatele nebo v konkrétním jmenném prostoru.",
+ "apihelp-query+alldeletedrevisions-example-user": "Seznam posledních 50 smazaných editací uživatele <kbd>Příklad<kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Seznam prvních 50 smazaných revizí v hlavním jmenném prostoru.",
+ "apihelp-query+allfileusages-description": "Zobrazit seznam všech použití souboru, včetně neexistujících.",
+ "apihelp-query+allfileusages-example-unique": "Zobrazit seznam unikátních názvů souborů.",
+ "apihelp-query+alllinks-example-generator": "Získat stránky obsahující odkazy.",
+ "apihelp-query+allpages-param-filterredir": "Které stránky uvést na seznam.",
+ "apihelp-query+allpages-param-minsize": "Omezit na stránky s určitým počtem bajtů.",
+ "apihelp-query+allpages-param-prtype": "Omezit jen na zamčené stránky.",
+ "apihelp-query+allpages-example-B": "Zobrazit seznam stránek začínajících na písmeno <kbd>B</kbd>.",
+ "apihelp-query+allredirects-description": "Seznam všech přesměrování pro jmenný prostor.",
+ "apihelp-query+allredirects-example-unique": "Seznam unikátních cílových stránek.",
+ "apihelp-query+allredirects-example-generator": "Získat stránky obsahující přesměrování.",
+ "apihelp-query+alltransclusions-example-unique": "Seznam unikátně vložených titulů.",
+ "apihelp-query+backlinks-example-simple": "Zobrazit odkazy na <kbd>Hlavní stránka</kbd>",
+ "apihelp-query+categorymembers-description": "Seznam všech stránek v dané kategorii.",
+ "apihelp-query+deletedrevisions-param-limit": "Maximální počet revizí pro zobrazení v seznamu.",
+ "apihelp-query+embeddedin-example-simple": "Zobrazit stránky, které obahují <kbd>Template:Stub</kbd>.",
+ "apihelp-query+filearchive-example-simple": "Zobrazit seznam všech smazaných souborů.",
+ "apihelp-query+filerepoinfo-example-simple": "Získat informace o souborových repozitářích.",
+ "apihelp-query+linkshere-example-generator": "Získat informace o stránkách, které odkazují na [[Hlavní Stránka|Hlavní stránku]].",
+ "apihelp-query+recentchanges-example-simple": "Seznam posledních změn.",
+ "apihelp-query+tags-example-simple": "Získat seznam dostupných tagů.",
+ "apihelp-query+usercontribs-example-user": "Zobrazit příspěvky uživatele <kbd>Příklad</kbd>",
+ "apihelp-query+watchlistraw-description": "Získat všechny stránky, které jsou aktuálním uživatelem sledovány.",
+ "apihelp-query+watchlistraw-example-simple": "Seznam sledovaných stránek uživatele.",
+ "apihelp-unblock-param-user": "Uživatel, IP adresa nebo záběr IP adres k odblokování. Nelze použít dohromady s <var>$1id</var>.",
+ "apihelp-watch-example-watch": "Sledovat stránku <kbd>Hlavní stránka</kbd>.",
+ "apihelp-watch-example-generator": "Zobrazit prvních několik stránek z hlavního jmenného prostoru.",
+ "apihelp-format-example-generic": "Výsledek dotazu vypsat ve formátu $1.",
+ "apihelp-dbg-description": "Vypisuje data ve formátu funkce var_export() z PHP.",
+ "apihelp-dbgfm-description": "Vypisuje data ve formátu funkce var_export() z PHP (v čitelné HTML podobě).",
+ "apihelp-dump-description": "Vypisuje data ve formátu funkce var_dump() z PHP.",
+ "apihelp-dumpfm-description": "Vypisuje data ve formátu funkce var_dump() z PHP (v čitelné HTML podobě).",
+ "apihelp-json-description": "Vypisuje data ve formátu JSON.",
+ "apihelp-json-param-callback": "Pokud je uvedeno, obalí výstup do zadaného volání funkce. Z bezpečnostních důvodů budou omezena všechna data specifická pro uživatele.",
+ "apihelp-json-param-utf8": "Pokud je uvedeno, bude většina ne-ASCII znaků (ale ne všechny) kódována v UTF-8 místo nahrazení hexadecimálními escape sekvencemi.",
+ "apihelp-jsonfm-description": "Vypisuje data ve formátu JSON (v čitelné HTML podobě).",
+ "apihelp-none-description": "Nevypisuje nic.",
+ "apihelp-php-description": "Vypisuje data v serializačním formátu PHP.",
+ "apihelp-phpfm-description": "Vypisuje data v serializačním formátu PHP (v čitelné HTML podobě).",
+ "apihelp-rawfm-description": "Vypisuje data s ladicími prvky ve formátu JSON (v čitelné HTML podobě).",
+ "apihelp-txt-description": "Vypisuje data ve formátu funkce print_r() z PHP.",
+ "apihelp-txtfm-description": "Vypisuje data ve formátu funkce print_r() z PHP (v čitelné HTML podobě).",
+ "apihelp-wddx-description": "Vypisuje data ve formátu WDDX.",
+ "apihelp-wddxfm-description": "Vypisuje data ve formátu WDDX (v čitelné HTML podobě).",
+ "apihelp-xml-description": "Vypisuje data ve formátu XML.",
+ "apihelp-xml-param-xslt": "Pokud je uvedeno, přidá stylopis &lt;xslt&gt;. Měla by jím být wikistránka v jmenném prostoru MediaWiki, jejíž název končí na „.xsl“.",
+ "apihelp-xml-param-includexmlnamespace": "Pokud je uvedeno, přidá jmenný prostor XML.",
+ "apihelp-xmlfm-description": "Vypisuje data ve formátu XML (v čitelné HTML podobě).",
+ "apihelp-yaml-description": "Vypisuje data ve formátu YAML.",
+ "apihelp-yamlfm-description": "Vypisuje data ve formátu YAML (v čitelné HTML podobě).",
+ "api-format-title": "Odpověď z MediaWiki API",
+ "api-format-prettyprint-header": "Díváte se na HTML reprezentaci formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr format. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte format=$2.\n\nVíce informací najdete v [https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page úplné dokumentaci] nebo [[Special:ApiHelp/main|nápovědě k API]].",
+ "api-help-title": "Nápověda k MediaWiki API",
+ "api-help-lead": "Toto je automaticky generovaná dokumentační stránka k MediaWiki API.\n\nDokumentace a příklady: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Hlavní modul",
+ "api-help-flag-deprecated": "Tento modul je zastaralý.",
+ "api-help-flag-internal": "<strong>Tento modul je interní nebo nestabilní.</strong> Jeho funkčnost se může bez předchozího upozornění změnit.",
+ "api-help-flag-readrights": "Tento modul vyžaduje oprávnění ke čtení.",
+ "api-help-flag-writerights": "Tento modul vyžaduje oprávnění k zápisu.",
+ "api-help-flag-mustbeposted": "Tento modul přijímá pouze požadavky POST.",
+ "api-help-flag-generator": "Tento modul lze využívat jako generátor.",
+ "api-help-parameters": "{{PLURAL:$1|Parametr|Parametry}}:",
+ "api-help-param-deprecated": "Zastaralý.",
+ "api-help-param-required": "Tento parametr je povinný.",
+ "api-help-param-list": "{{PLURAL:$1|1=Jedna hodnota|2=Hodnoty (oddělené „{{!}}“)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Musí být prázdné|Může být prázdné nebo $2}}",
+ "api-help-param-limit": "Není dovoleno více než $1.",
+ "api-help-param-limit2": "Není dovoleno více než $1 ($2 pro boty).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Hodnota nesmí|2=Hodnoty nesmějí}} být nižší než $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Hodnota nesmí|2=Hodnoty nesmějí}} být vyšší než $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Hodnota|2=Hodnoty}} musí ležet mezi $2 a $3.",
+ "api-help-param-upload": "Musí se odeslat POST požadavkem jako načítaný soubor pomocí multipart/form-data.",
+ "api-help-param-multi-separate": "Hodnoty oddělujte pomocí „|“.",
+ "api-help-param-multi-max": "Maximální počet hodnot je {{PLURAL:$1|$1}} (pro boty {{PLURAL:$2|$2}}).",
+ "api-help-param-default": "Implicitní hodnota: $1",
+ "api-help-param-default-empty": "Implicitní hodnota: <span class=\"apihelp-empty\">(prázdné)</span>",
+ "api-help-param-token": "Token typu „$1“ získaný pomocí [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez popisu)</span>",
+ "api-help-examples": "{{PLURAL:$1|Příklad|Příklady}}:",
+ "api-help-permissions": "{{PLURAL:$1|Oprávnění}}:",
+ "api-help-permissions-granted-to": "Uděleno {{PLURAL:$1|skupině|skupinám}}: $2",
+ "api-help-right-apihighlimits": "Používání vyšších limitů v API dotazech (pomalé dotazy: $1, rychlé dotazy: $2). Limity pro pomalé dotazy se vztahují i na vícehodnotové parametry.",
+ "api-credits-header": "Zásluhy",
+ "api-credits": "Vývojáři API:\n* Roan Kattouw (hlavní vývojář září 2007–2009)\n* Viktor Vasiljev\n* Bryan Tong Minh\n* Sam Reed\n* Jurij Astrachan (tvůrce, hlavní vývojář září 2006–září 2007)\n* Brad Jorsch (hlavní vývojář od 2013)\n\nSvé komentáře, návrhy či dotazy posílejte na mediawiki-api@lists.wikimedia.org\nnebo založte chybové hlášení na https://phabricator.wikimedia.org/."
+}
diff --git a/includes/api/i18n/cv.json b/includes/api/i18n/cv.json
new file mode 100644
index 00000000..88f222f8
--- /dev/null
+++ b/includes/api/i18n/cv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chuvash2014"
+ ]
+ },
+ "apihelp-login-example-login": "Кĕр"
+}
diff --git a/includes/api/i18n/de.json b/includes/api/i18n/de.json
new file mode 100644
index 00000000..96172040
--- /dev/null
+++ b/includes/api/i18n/de.json
@@ -0,0 +1,433 @@
+{
+ "@metadata": {
+ "authors": [
+ "Florian",
+ "Kghbln",
+ "Metalhead64",
+ "Inkowik",
+ "Umherirrender",
+ "Giftpflanze",
+ "Macofe",
+ "Se4598",
+ "Purodha"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokumentation]]\n* [[mw:API:FAQ/de|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:API:Errors_and_warnings|API: Fehler und Warnungen]].",
+ "apihelp-main-param-action": "Auszuführende Aktion.",
+ "apihelp-main-param-format": "Format der Ausgabe.",
+ "apihelp-main-param-maxlag": "maxlag kann verwendet werden, wenn MediaWiki auf einem datenbankreplizierten Cluster installiert ist. Um weitere Replikationsrückstände zu verhindern, lässt dieser Parameter den Client warten, bis der Replikationsrückstand kleiner als der angegebene Wert (in Sekunden) ist. Bei einem größerem Rückstand wird der Fehlercode <samp>maxlag</samp> zurückgegeben mit einer Nachricht wie <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Siehe [[mw:Manual:Maxlag_parameter|Handbuch: Maxlag parameter]] für weitere Informationen.",
+ "apihelp-main-param-smaxage": "Den <code>s-maxage</code>-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
+ "apihelp-main-param-maxage": "Den <code>max-age</code>-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
+ "apihelp-main-param-assert": "Sicherstellen, dass der Benutzer eingeloggt ist, wenn auf <kbd>user</kbd> gesetzt, oder Bot ist, wenn auf <kbd>bot</kbd> gesetzt.",
+ "apihelp-main-param-requestid": "Der angegebene Wert wird mit in die Antwort aufgenommen und kann zur Unterscheidung von Anfragen verwendet werden.",
+ "apihelp-main-param-servedby": "Namen des bearbeitenden Hosts mit zurückgeben.",
+ "apihelp-main-param-curtimestamp": "Aktuellen Zeitstempel mit zurückgeben.",
+ "apihelp-main-param-origin": "Beim Zugriff auf die API mittels Cross-Domain-AJAX-Anfrage (CORS) ist dieser Parameter auf die veranlassende Domain zu setzen. Er muss in jedem Pre-Flight-Request angegeben werden und deshalb ein Teil der Anfrage-URI sein (nicht des POST-Bodys). Er muss genau einer der Angaben im <code>Origin</code>-Header entsprechen, d.&nbsp;h. er muss auf etwas wie <kbd>https://de.wikipedia.org</kbd> oder <kbd>https://meta.wikimedia.org</kbd> gesetzt werden. Falls dieser Parameter nicht mit dem <code>Origin</code>-Header übereinstimmt, wird eine 403-Antwort zurückgegeben. Falls dieser Parameter dem <code>Origin</code>-Header entspricht und die Domain auf der Whitelist ist, wird ein <code>Access-Control-Allow-Origin</code>-Header gesetzt.",
+ "apihelp-main-param-uselang": "Zu verwendende Sprache für Nachrichtenübersetzungen. Eine Liste der Codes kann von <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> mit <kbd>siprop=languages</kbd> abgerufen werden. Gib <kbd>user</kbd> zum Verwenden der aktuellen Benutzerspracheinstellung oder <kbd>content</kbd> an, um die Inhaltssprache des Wikis zu verwenden.",
+ "apihelp-block-description": "Einen Benutzer sperren.",
+ "apihelp-block-param-user": "Benutzername, IP-Adresse oder IP-Bereich, der gesperrt werden soll.",
+ "apihelp-block-param-expiry": "Sperrdauer. Kann relativ (z.&nbsp;B. <kbd>5 months</kbd> oder <kbd>2 weeks</kbd>) oder absolut (z.&nbsp;B. <kbd>2014-09-18T12:34:56Z</kbd>) sein. Wenn auf <kbd>infinite</kbd>, <kbd>indefinite</kbd> oder <kbd>never</kbd> gesetzt, ist die Sperre unbegrenzt.",
+ "apihelp-block-param-reason": "Sperrbegründung.",
+ "apihelp-block-param-anononly": "Nur anonyme Benutzer sperren (z.&nbsp;B. anonyme Bearbeitungen für diese IP deaktivieren).",
+ "apihelp-block-param-nocreate": "Benutzerkontenerstellung verhindern.",
+ "apihelp-block-param-autoblock": "Die zuletzt verwendete IP-Adresse automatisch sperren und alle darauffolgenden IP-Adressen, die versuchen sich anzumelden.",
+ "apihelp-block-param-noemail": "Benutzer davon abhalten, E-Mails auf dem Wiki zu versenden (erfordert das <code>blockemail</code>-Recht).",
+ "apihelp-block-param-hidename": "Den Benutzernamen im Sperr-Logbuch verstecken (erfordert das <code>hideuser</code>-Recht).",
+ "apihelp-block-param-allowusertalk": "Dem Benutzer erlauben, seine eigene Diskussionsseite zu bearbeiten (abhängig von <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Falls der Benutzer bereits gesperrt ist, die vorhandene Sperre überschreiben.",
+ "apihelp-block-param-watchuser": "Benutzer- und Diskussionsseiten des Benutzers oder der IP-Adresse beobachten.",
+ "apihelp-block-example-ip-simple": "IP <kbd>192.0.2.5</kbd> für drei Tage mit der Begründung „First strike“ (erste Verwarnung) sperren",
+ "apihelp-block-example-user-complex": "Benutzer <kbd>Vandal</kbd> unbeschränkt sperren mit der Begründung „Vandalism“ (Vandalismus), Erstellung neuer Benutzerkonten sowie Versand von E-Mails verhindern.",
+ "apihelp-checktoken-description": "Überprüft die Gültigkeit eines über <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> erhaltenen Tokens.",
+ "apihelp-checktoken-param-type": "Typ des Tokens, das getestet werden soll.",
+ "apihelp-checktoken-param-token": "Token, das getestet werden soll.",
+ "apihelp-checktoken-param-maxtokenage": "Maximal erlaubtes Alter des Tokens in Sekunden.",
+ "apihelp-checktoken-example-simple": "Überprüft die Gültigkeit des <kbd>csrf</kbd>-Tokens.",
+ "apihelp-clearhasmsg-description": "Löschen des <code>hasmsg</code>-Flags („hat Nachrichten“-Flag) für den aktuellen Benutzer.",
+ "apihelp-clearhasmsg-example-1": "<code>hasmsg</code>-Flags für den aktuellen Benutzer löschen",
+ "apihelp-compare-description": "Abrufen des Unterschieds zwischen zwei Seiten.\n\nDu musst eine Versionsnummer, einen Seitentitel oder eine Seitennummer für „from“ als auch „to“ angeben.",
+ "apihelp-compare-param-fromtitle": "Erster zu vergleichender Titel.",
+ "apihelp-compare-param-fromid": "Erste zu vergleichende Seitennummer.",
+ "apihelp-compare-param-fromrev": "Erste zu vergleichende Version.",
+ "apihelp-compare-param-totitle": "Zweiter zu vergleichender Titel.",
+ "apihelp-compare-param-toid": "Zweite zu vergleichende Seitennummer.",
+ "apihelp-compare-param-torev": "Zweite zu vergleichende Version.",
+ "apihelp-compare-example-1": "Unterschied zwischen Version 1 und 2 abrufen",
+ "apihelp-createaccount-description": "Erstellen eines neuen Benutzerkontos.",
+ "apihelp-createaccount-param-name": "Benutzername.",
+ "apihelp-createaccount-param-password": "Passwort (wird ignoriert, wenn <var>$1mailpassword</var> angegeben ist).",
+ "apihelp-createaccount-param-domain": "Domain für die externe Authentifizierung (optional).",
+ "apihelp-createaccount-param-token": "Der in der ersten Anfrage erhaltene Benutzerkontenerstellungs-Token.",
+ "apihelp-createaccount-param-email": "E-Mail-Adresse des Benutzers (optional).",
+ "apihelp-createaccount-param-realname": "Realname des Benutzers (optional).",
+ "apihelp-createaccount-param-mailpassword": "Wenn ein Wert angegeben wird, wird ein zufälliges Passwort per E-Mail an den Benutzer versandt.",
+ "apihelp-createaccount-param-reason": "Optionale Begründung für die Benutzerkontenerstellung, die in den Logbüchern vermerkt wird.",
+ "apihelp-createaccount-param-language": "Festzulegender standardmäßiger Sprachcode für den Benutzer (optional, Standard ist Inhaltssprache).",
+ "apihelp-createaccount-example-pass": "Benutzer <kbd>testuser</kbd> mit dem Passwort <kbd>test123</kbd> erstellen.",
+ "apihelp-createaccount-example-mail": "Benutzer <kbd>testmailuser</kbd> erstellen und zufällig generiertes Passwort per E-Mail verschicken.",
+ "apihelp-delete-description": "Löschen einer Seite.",
+ "apihelp-delete-param-title": "Titel der Seite, die gelöscht werden soll. Kann nicht zusammen mit <var>$1pageid</var> verwendet werden.",
+ "apihelp-delete-param-pageid": "Seitennummer der Seite, die gelöscht werden soll. Kann nicht zusammen mit <var>$1title</var> verwendet werden.",
+ "apihelp-delete-param-reason": "Löschbegründung. Falls nicht festgelegt, wird eine automatisch generierte Begründung verwendet.",
+ "apihelp-delete-param-watch": "Seite auf die Beobachtungsliste des aktuellen Benutzers setzen.",
+ "apihelp-delete-param-watchlist": "Seite zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, die Standardeinstellungen verwenden oder die Beobachtung nicht ändern.",
+ "apihelp-delete-param-unwatch": "Seite von der Beobachtungsliste entfernen.",
+ "apihelp-delete-param-oldimage": "Name des alten zu löschenden Bildes, wie von [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] angegeben.",
+ "apihelp-delete-example-simple": "<kbd>Hauptseite</kbd> löschen.",
+ "apihelp-delete-example-reason": "<kbd>Hauptseite</kbd> löschen mit der Begründung <kbd>Vorbereitung für Verschiebung</kbd>.",
+ "apihelp-disabled-description": "Dieses Modul wurde deaktiviert.",
+ "apihelp-edit-description": "Erstellen und Bearbeiten von Seiten.",
+ "apihelp-edit-param-title": "Titel der Seite, die bearbeitet werden soll. Kann nicht zusammen mit <var>$1pageid</var> verwendet werden.",
+ "apihelp-edit-param-pageid": "Seitennummer der Seite, die bearbeitet werden soll. Kann nicht zusammen mit <var>$1title</var> verwendet werden.",
+ "apihelp-edit-param-section": "Abschnittsnummer. <kbd>0</kbd> für die Einleitung, <kbd>new</kbd> für einen neuen Abschnitt.",
+ "apihelp-edit-param-sectiontitle": "Die Überschrift für einen neuen Abschnitt.",
+ "apihelp-edit-param-text": "Seiteninhalt.",
+ "apihelp-edit-param-summary": "Bearbeitungszusammenfassung. Auch Abschnittsüberschrift, wenn $1section=new und $1sectiontitle nicht festgelegt ist.",
+ "apihelp-edit-param-minor": "Kleine Bearbeitung.",
+ "apihelp-edit-param-notminor": "Nicht-kleine Bearbeitung.",
+ "apihelp-edit-param-bot": "Diese Bearbeitung als Bot-Bearbeitung markieren.",
+ "apihelp-edit-param-basetimestamp": "Zeitstempel der Basisversion, wird verwendet zum Aufspüren von Bearbeitungskonflikten. Kann abgerufen werden durch [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Zeitstempel, an dem der Bearbeitungsprozess begonnen wurde. Er wird zum Aufspüren von Bearbeitungskonflikten verwendet. Ein geeigneter Wert kann mithilfe von <var>[[Special:ApiHelp/main|curtimestamp]]</var> beim Beginn des Bearbeitungsprozesses (z.&nbsp;B. beim Laden des Seiteninhalts zum Bearbeiten) abgerufen werden.",
+ "apihelp-edit-param-recreate": "Keinen Fehler zurückgeben, wenn die Seite in der Zwischenzeit gelöscht wurde.",
+ "apihelp-edit-param-createonly": "Seite nicht bearbeiten, falls sie bereits vorhanden ist.",
+ "apihelp-edit-param-nocreate": "Einen Fehler zurückgeben, falls die Seite nicht vorhanden ist.",
+ "apihelp-edit-param-watch": "Seite der Beobachtungsliste hinzufügen.",
+ "apihelp-edit-param-unwatch": "Seite von der Beobachtungsliste entfernen.",
+ "apihelp-edit-param-watchlist": "Die Seite zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, die Standardeinstellungen verwenden oder die Beobachtung nicht ändern.",
+ "apihelp-edit-param-md5": "Der MD5-Hash des Parameters $1text oder der aneinandergehängten Parameter $1prependtext und $1appendtext. Wenn angegeben, wird die Bearbeitung nicht ausgeführt, wenn der Hash nicht korrekt ist.",
+ "apihelp-edit-param-prependtext": "Diesen Text an den Anfang der Seite setzen. Überschreibt $1text.",
+ "apihelp-edit-param-appendtext": "Diesen Text an das Ende der Seite hinzufügen. Überschreibt $1text.\n\nVerwende statt dieses Parameters $1section=new zum Anhängen eines neuen Abschnitts.",
+ "apihelp-edit-param-undo": "Diese Version rückgängig machen. Überschreibt $1text, $1prependtext und $1appendtext.",
+ "apihelp-edit-param-undoafter": "Alle Versionen von $1undo bis zu dieser rückgängig machen. Falls nicht angegeben, nur eine Version rückgängig machen.",
+ "apihelp-edit-param-redirect": "Weiterleitungen automatisch auflösen.",
+ "apihelp-edit-param-contentformat": "Für den Eingabetext verwendetes Inhaltsserialisierungsformat.",
+ "apihelp-edit-param-contentmodel": "Inhaltsmodell des neuen Inhalts.",
+ "apihelp-edit-param-token": "Der Token sollte immer als letzter Parameter gesendet werden, zumindest aber nach dem $1text-Parameter.",
+ "apihelp-edit-example-edit": "Eine Seite bearbeiten",
+ "apihelp-edit-example-prepend": "<kbd>_&#95;NOTOC_&#95;</kbd> bei einer Seite voranstellen",
+ "apihelp-edit-example-undo": "Versionen 13579 bis 13585 mit automatischer Zusammenfassung rückgängig machen",
+ "apihelp-emailuser-description": "E-Mail an einen Benutzer senden.",
+ "apihelp-emailuser-param-target": "Benutzer, an den die E-Mail gesendet werden soll.",
+ "apihelp-emailuser-param-subject": "Betreffzeile.",
+ "apihelp-emailuser-param-text": "E-Mail-Inhalt.",
+ "apihelp-emailuser-param-ccme": "Eine Kopie dieser E-Mail an mich senden.",
+ "apihelp-emailuser-example-email": "Eine E-Mail an den Benutzer <kbd>WikiSysop</kbd> mit dem Text <kbd>Inhalt</kbd> senden.",
+ "apihelp-expandtemplates-description": "Alle Vorlagen im Wikitext expandieren.",
+ "apihelp-expandtemplates-param-title": "Titel der Seite.",
+ "apihelp-expandtemplates-param-text": "Zu konvertierender Wikitext.",
+ "apihelp-expandtemplates-param-revid": "Versionsnummer, die für die Anzeige von <nowiki>{{REVISIONID}}</nowiki> und ähnlichen Variablen verwendet wird.",
+ "apihelp-expandtemplates-param-includecomments": "Ob HTML-Kommentare in der Ausgabe eingeschlossen werden sollen.",
+ "apihelp-expandtemplates-param-generatexml": "XML-Parserbaum erzeugen (ersetzt durch $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Den Wikitext <kbd><nowiki>{{Project:Spielwiese}}</nowiki></kbd> expandieren.",
+ "apihelp-feedcontributions-description": "Gibt einen Benutzerbeiträge-Feed zurück.",
+ "apihelp-feedcontributions-param-feedformat": "Das Format des Feeds.",
+ "apihelp-feedcontributions-param-user": "Von welchen Benutzern die Beiträge abgerufen werden sollen.",
+ "apihelp-feedcontributions-param-namespace": "Auf welchen Namensraum die Beiträge begrenzt werden sollen.",
+ "apihelp-feedcontributions-param-year": "Von Jahr (und früher).",
+ "apihelp-feedcontributions-param-month": "Von Monat (und früher).",
+ "apihelp-feedcontributions-param-tagfilter": "Beiträge filtern, die diese Markierungen haben.",
+ "apihelp-feedcontributions-param-deletedonly": "Nur gelöschte Beiträge anzeigen.",
+ "apihelp-feedcontributions-param-toponly": "Nur aktuelle Versionen anzeigen.",
+ "apihelp-feedcontributions-param-newonly": "Nur Seitenerstellungen anzeigen.",
+ "apihelp-feedcontributions-param-showsizediff": "Zeigt den Größenunterschied zwischen Versionen an.",
+ "apihelp-feedcontributions-example-simple": "Beiträge für die Benutzer <kbd>Beispiel<kbd> zurückgeben",
+ "apihelp-feedrecentchanges-description": "Gibt einen Letzte-Änderungen-Feed zurück.",
+ "apihelp-feedrecentchanges-param-feedformat": "Das Format des Feeds.",
+ "apihelp-feedrecentchanges-param-namespace": "Namensraum, auf den die Ergebnisse beschränkt werden sollen.",
+ "apihelp-feedrecentchanges-param-invert": "Alle Namensräume außer dem ausgewählten.",
+ "apihelp-feedrecentchanges-param-associated": "Verbundenen Namensraum (Diskussions oder Hauptnamensraum) mit einschließen.",
+ "apihelp-feedrecentchanges-param-days": "Tage, auf die die Ergebnisse beschränkt werden sollen.",
+ "apihelp-feedrecentchanges-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
+ "apihelp-feedrecentchanges-param-from": "Änderungen seit jetzt anzeigen.",
+ "apihelp-feedrecentchanges-param-hideminor": "Kleine Änderungen ausblenden.",
+ "apihelp-feedrecentchanges-param-hidebots": "Änderungen von Bots ausblenden.",
+ "apihelp-feedrecentchanges-param-hideanons": "Änderungen von anonymen Benutzern ausblenden.",
+ "apihelp-feedrecentchanges-param-hideliu": "Änderungen von registrierten Benutzern ausblenden.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Kontrollierte Änderungen ausblenden.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Änderungen des aktuellen Benutzers ausblenden.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Nach Markierung filtern.",
+ "apihelp-feedrecentchanges-param-target": "Nur Änderungen an Seiten anzeigen, die von dieser Seite verlinkt sind.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Zeige Änderungen an Seiten die von der ausgewählten Seite verlinkt sind.",
+ "apihelp-feedrecentchanges-example-simple": "Letzte Änderungen anzeigen",
+ "apihelp-feedrecentchanges-example-30days": "Letzte Änderungen für 30 Tage anzeigen",
+ "apihelp-feedwatchlist-description": "Gibt einen Beobachtungslisten-Feed zurück.",
+ "apihelp-feedwatchlist-param-feedformat": "Das Format des Feeds.",
+ "apihelp-feedwatchlist-param-hours": "Seiten auflisten, die innerhalb dieser Anzahl Stunden ab jetzt geändert wurden.",
+ "apihelp-feedwatchlist-param-linktosections": "Verlinke direkt zum veränderten Abschnitt, wenn möglich.",
+ "apihelp-feedwatchlist-example-default": "Den Beobachtungslisten-Feed anzeigen",
+ "apihelp-feedwatchlist-example-all6hrs": "Zeige alle Änderungen an beobachteten Seiten der letzten 6 Stunden.",
+ "apihelp-filerevert-description": "Eine Datei auf eine alte Version zurücksetzen.",
+ "apihelp-filerevert-param-filename": "Ziel-Datei, ohne das Datei:-Präfix.",
+ "apihelp-filerevert-param-comment": "Hochladekommentar.",
+ "apihelp-filerevert-param-archivename": "Archivname der Version, auf die die Datei zurückgesetzt werden soll.",
+ "apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd> auf die Version vom <kbd>2011-03-05T15:27:40Z</kbd> zurücksetzen",
+ "apihelp-help-description": "Hilfe für die angegebenen Module anzeigen.",
+ "apihelp-help-param-modules": "Module, zu denen eine Hilfe angezeigt werden soll (Werte der Parameter <var>action</var> und <var>format</var> oder <kbd>main</kbd>). Kann Submodule mit einem <kbd>+</kbd> angeben.",
+ "apihelp-help-param-submodules": "Hilfe für Submodule des benannten Moduls einschließen.",
+ "apihelp-help-param-recursivesubmodules": "Hilfe für Submodule rekursiv einschließen.",
+ "apihelp-help-param-helpformat": "Format der Hilfe-Ausgabe.",
+ "apihelp-help-param-wrap": "Die Ausgabe in eine Standard-API-Antwort-Struktur einschließen.",
+ "apihelp-help-param-toc": "Ein Inhaltsverzeichnis in der HTML-Ausgabe einschließen.",
+ "apihelp-help-example-main": "Hilfe für das Hauptmodul",
+ "apihelp-help-example-recursive": "Alle Hilfen in einer Seite",
+ "apihelp-help-example-help": "Hilfe für das Hilfemodul selbst",
+ "apihelp-help-example-query": "Hilfe für zwei Abfrage-Submodule",
+ "apihelp-imagerotate-description": "Ein oder mehrere Bilder drehen.",
+ "apihelp-imagerotate-param-rotation": "Anzahl der Grad, um die das Bild im Uhrzeigersinn gedreht werden soll.",
+ "apihelp-imagerotate-example-simple": "<kbd>Datei:Beispiel.png</kbd> um <kbd>90</kbd> Grad drehen.",
+ "apihelp-imagerotate-example-generator": "Alle Bilder in der <kbd>Kategorie:Flip</kbd> um <kbd>180</kbd> Grad drehen.",
+ "apihelp-import-description": "Importiert eine Seite von einem anderen Wiki oder einer XML-Datei.\n\nBitte beachte, dass der HTTP-POST-Vorgang als Dateiupload ausgeführt werden muss (z.B. durch multipart/form-data), um eine Datei über den <var>xml</var>-Parameter zu senden.",
+ "apihelp-import-param-summary": "Import-Zusammenfassung.",
+ "apihelp-import-param-xml": "Hochgeladene XML-Datei.",
+ "apihelp-import-param-interwikisource": "Für Interwiki-Importe: Wiki, von dem importiert werden soll.",
+ "apihelp-import-param-interwikipage": "Für Interwiki-Importe: zu importierende Seite.",
+ "apihelp-import-param-fullhistory": "Für Interwiki-Importe: importiere die komplette Versionsgeschichte, nicht nur die aktuelle Version.",
+ "apihelp-import-param-templates": "Für Interwiki-Importe: importiere auch alle eingebundenen Vorlagen.",
+ "apihelp-import-param-namespace": "Für Interwiki-Importe: importiere in diesen Namensraum.",
+ "apihelp-import-param-rootpage": "Als Unterseite dieser Seite importieren.",
+ "apihelp-import-example-import": "Importiere [[meta:Help:Parserfunctions]] mit der kompletten Versionsgeschichte in den Namensraum 100.",
+ "apihelp-login-description": "Anmelden und Authentifizierungs-Cookies beziehen.\n\nFalls das Anmelden erfolgreich war, werden die benötigten Cookies im Header der HTTP-Antwort des Servers übermittelt. Bei fehlgeschlagenen Anmeldeversuchen können weitere Versuche gedrosselt werden, um automatische Passwortermittlungsattacken zu verhinden.",
+ "apihelp-login-param-name": "Benutzername.",
+ "apihelp-login-param-password": "Passwort.",
+ "apihelp-login-param-domain": "Domain (optional).",
+ "apihelp-login-param-token": "Anmeldetoken, den du in der ersten Anfrage erhalten hast.",
+ "apihelp-login-example-gettoken": "Ruft einen Anmelde-Token ab",
+ "apihelp-login-example-login": "Anmelden",
+ "apihelp-logout-description": "Abmelden und alle Sitzungsdaten löschen.",
+ "apihelp-logout-example-logout": "Meldet den aktuellen Benutzer ab",
+ "apihelp-managetags-description": "Ermöglicht Verwaltungsaufgaben zu Änderungsmarkierungen.",
+ "apihelp-managetags-param-reason": "optionale Begründung für das Erstellen, Löschen, Aktivieren oder Deaktivieren der Markierung.",
+ "apihelp-managetags-param-ignorewarnings": "Warnungen während des Vorgangs ignorieren.",
+ "apihelp-managetags-example-create": "Erstellt eine Markierung namens <kbd>spam</kbd> mit der Begründung <kbd>For use in edit patrolling</kbd> (für die Eingangskontrolle).",
+ "apihelp-managetags-example-delete": "Löscht die <kbd>vandlaism</kbd>-Markierung mit der Begründung <kbd>Misspelt</kbd>.",
+ "apihelp-managetags-example-activate": "Aktiviert eine Markierung namens <kbd>spam</kbd> mit der Begründung <kbd>For use in edit patrolling</kbd> (für die Eingangskontrolle).",
+ "apihelp-managetags-example-deactivate": "Deaktiviert eine Markierung namens <kbd>spam</kbd> mit der Begründung <kbd>No longer required</kbd> (nicht mehr benötigt).",
+ "apihelp-move-description": "Eine Seite verschieben.",
+ "apihelp-move-param-from": "Titel der zu verschiebenden Seite. Kann nicht zusammen mit <var>$1fromid</var> verwendet werden.",
+ "apihelp-move-param-fromid": "Seitenkennung der zu verschiebenden Seite. Kann nicht zusammen mit <var>$1from</var> verwendet werden.",
+ "apihelp-move-param-to": "Titel, zu dem die Seite umbenannt werden soll.",
+ "apihelp-move-param-reason": "Grund für die Umbenennung.",
+ "apihelp-move-param-movetalk": "Verschiebt die Diskussionsseite, falls vorhanden.",
+ "apihelp-move-param-movesubpages": "Unterseiten verschieben, falls möglich.",
+ "apihelp-move-param-noredirect": "Keine Weiterleitung erstellen.",
+ "apihelp-move-param-watch": "Die Seite und die entstandene Weiterleitung zur Beobachtungsliste hinzufügen.",
+ "apihelp-move-param-unwatch": "Die Seite und die entstandene Weiterleitung von der Beobachtungsliste entfernen.",
+ "apihelp-move-param-watchlist": "Die Seite in jedem Fall zur Beobachtungsliste hinzufügen oder davon entfernen, die Voreinstellungen dafür nutzen oder den Beobachtungsstatus nicht ändern.",
+ "apihelp-move-param-ignorewarnings": "Alle Warnungen ignorieren.",
+ "apihelp-move-example-move": "<kbd>Schlechter Titel</kbd> nach <kbd>Guter Titel</kbd> verschieben, ohne eine Weiterleitung zu erstellen.",
+ "apihelp-opensearch-description": "Das Wiki mithilfe des OpenSearch-Protokolls durchsuchen.",
+ "apihelp-opensearch-param-search": "Such-Zeichenfolge.",
+ "apihelp-opensearch-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
+ "apihelp-opensearch-param-namespace": "Zu durchsuchende Namensräume.",
+ "apihelp-opensearch-param-suggest": "Nichts unternehmen, falls <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> falsch ist.",
+ "apihelp-opensearch-param-format": "Das Format der Ausgabe.",
+ "apihelp-opensearch-example-te": "Seiten finden, die mit <kbd>Te</kbd> beginnen.",
+ "apihelp-options-param-reset": "Setzt die Einstellungen auf Websitestandards zurück.",
+ "apihelp-options-example-reset": "Alle Einstellungen zurücksetzen",
+ "apihelp-options-example-change": "Ändert die Einstellungen <kbd>skin</kbd> und <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Setzt alle Einstellungen zurück, dann <kbd>skin</kbd> und <kbd>nickname</kbd> festlegen.",
+ "apihelp-paraminfo-description": "Ruft Informationen über API-Module ab.",
+ "apihelp-paraminfo-param-helpformat": "Format der Hilfe-Zeichenfolgen.",
+ "apihelp-parse-param-summary": "Zu parsende Zusammenfassung.",
+ "apihelp-parse-param-section": "Gibt nur den Inhalt dieses Abschnittes zurück oder erstellt einen neuen Abschnitt, wenn <kbd>new</kbd> angegeben wird.\n\n<kbd>new</kbd> wird nur ausgewertet, wenn auch <var>text</var> angegeben wurde.",
+ "apihelp-parse-param-sectiontitle": "Überschrift des neuen Abschnittes, wenn <var>section</var> = <kbd>new</kbd> ist.\n\nAnders als beim Bearbeiten der Seite wird der Parameter nicht durch die <var>summary</var> ersetzt, wenn er weggelassen oder leer ist.",
+ "apihelp-parse-param-disableeditsection": "Deaktiviert Abschnittsbearbeitungslinks in der Parserausgabe.",
+ "apihelp-parse-param-preview": "Im Vorschaumodus parsen.",
+ "apihelp-parse-param-disabletoc": "Inhaltsverzeichnis in der Ausgabe deaktivieren.",
+ "apihelp-parse-example-page": "Eine Seite parsen.",
+ "apihelp-parse-example-text": "Wikitext parsen.",
+ "apihelp-parse-example-texttitle": "Parst den Wikitext über die Eingabe des Seitentitels.",
+ "apihelp-parse-example-summary": "Parst eine Zusammenfassung.",
+ "apihelp-patrol-description": "Kontrolliert eine Seite oder Version.",
+ "apihelp-patrol-param-rcid": "Letzte-Änderungen-Kennung, die kontrolliert werden soll.",
+ "apihelp-patrol-param-revid": "Versionskennung, die kontrolliert werden soll.",
+ "apihelp-patrol-example-rcid": "Kontrolliert eine kürzlich getätigte Änderung.",
+ "apihelp-patrol-example-revid": "Kontrolliert eine Version",
+ "apihelp-protect-description": "Ändert den Schutzstatus einer Seite.",
+ "apihelp-protect-param-title": "Titel der Seite, die du (ent-)sperren möchtest. Kann nicht zusammen mit $1pageid verwendet werden.",
+ "apihelp-protect-param-pageid": "Seitenkennung der Seite, die du (ent-)sperren möchtest. Kann nicht zusammen mit $1title verwendet werden.",
+ "apihelp-protect-param-protections": "Liste der Schutzebenen nach dem Format <kbd>Aktion=Ebene</kbd> (z.B. <kbd>edit=sysop</kbd>).\n\n<strong>HINWEIS:</strong> Wenn eine Aktion nicht angegeben wird, wird deren Schutz entfernt.",
+ "apihelp-protect-param-expiry": "Zeitstempel des Schutzablaufs. Wenn nur ein Zeitstempel übergeben wird, ist dieser für alle Seitenschutze gültig. Um eine unendliche Schutzdauer festzulegen, kannst du die Werte <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> oder <kbd>never</kbd> übergeben.",
+ "apihelp-protect-param-reason": "Grund für den Seitenschutz oder dessen Aufhebung.",
+ "apihelp-protect-param-cascade": "Aktiviert den Kaskadenschutz (alle eingebundenen Seiten werden ebenfalls geschützt). Wenn die übergebenen Schutzebenen keinen Kaskadenschutz unterstützen, wird dieser Parameter ignoriert.",
+ "apihelp-protect-param-watch": "Wenn vorhanden, fügt dieser Parameter die zu (ent-)sperrende Seite der Beobachtungsliste des aktuellen Benutzers hinzu.",
+ "apihelp-protect-param-watchlist": "Die Seite bedingungslos zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
+ "apihelp-protect-example-protect": "Schützt eine Seite",
+ "apihelp-protect-example-unprotect": "Eine Seite entsperren, indem die Einschränkungen durch den Schutz auf <kbd>all</kbd> gestellt werden.",
+ "apihelp-protect-example-unprotect2": "Eine Seite entsperren, indem keine Einschränkungen übergeben werden",
+ "apihelp-purge-description": "Setzt den Cache der angegebenen Seiten zurück.\n\nFalls kein Benutzer angemeldet ist, müssen POST-Anfragen genutzt werden.",
+ "apihelp-purge-param-forcelinkupdate": "Aktualisiert die Linktabellen.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Aktualisiert die Linktabelle der Seite und alle Linktabellen der Seiten, die sie als Vorlage einbinden.",
+ "apihelp-purge-example-simple": "Purgt die <kbd>Main Page</kbd> und die <kbd>API</kbd>-Seite.",
+ "apihelp-purge-example-generator": "Purgt die ersten 10 Seiten des Hauptnamensraums.",
+ "apihelp-query-description": "Bezieht Daten von und über MediaWiki.\n\nAlle Änderungsvorgänge müssen unter Angabe eines Tokens ablaufen, um Missbrauch durch böswillige Anwendungen vorzubeugen.",
+ "apihelp-query-param-prop": "Zurückzuliefernde Eigenschaften der abgefragten Seiten.",
+ "apihelp-query-param-list": "Welche Listen abgerufen werden sollen.",
+ "apihelp-query-param-meta": "Zurückzugebende Metadaten.",
+ "apihelp-query-param-indexpageids": "Schließt einen zusätzlichen pageids-Abschnitt mit allen zurückgegebenen Seitenkennungen ein.",
+ "apihelp-query-param-export": "Exportiert die aktuellen Versionen der angegebenen oder generierten Seiten.",
+ "apihelp-query-param-exportnowrap": "Gibt den XML-Export zurück, ohne ihn in ein XML-Ergebnis einzuschließen (gleiches Format wie durch [[Special:Export]]). Kann nur zusammen mit $1export genutzt werden.",
+ "apihelp-query-param-iwurl": "Gibt an, ob die komplette URL zurückgegeben werden soll, wenn der Titel ein Interwikilink ist.",
+ "apihelp-query-param-continue": "Falls angegeben, wird query-continue als Schlüssel-Wert-Paar zurückgegeben, das anschließend an die Folgeabfrage gehängt werden kann. Dieser Parameter muss in der ersten Abfrage auf leer gesetzt werden.\n\nDieser Parameter ist für alle Neuentwicklungen empfohlen und wird in der nächsten API-Version Standard.",
+ "apihelp-query-param-rawcontinue": "Momentan unbeachtet. In Zukunft wird <var>$1continue</var> Standard, dieser Parameter wird dann benötigt, um die rohen <samp>query-continue</samp>-Daten zu erhalten.",
+ "apihelp-query-example-revisions": "Bezieht [[Special:ApiHelp/query+siteinfo|Seiteninformationen]] und [[Special:ApiHelp/query+revisions|Versionen]] der <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Bezieht Versionen von Seiten, die mit <kbd>API/</kbd> beginnen.",
+ "apihelp-query+allcategories-description": "Alle Kategorien aufzählen.",
+ "apihelp-query+allcategories-param-from": "Kategorie, bei der die Auflistung beginnen soll.",
+ "apihelp-query+allcategories-param-to": "Kategorie, bei der die Auflistung enden soll.",
+ "apihelp-query+allcategories-param-prefix": "Listet alle Kategorien auf, die mit dem angegebenen Wert beginnen.",
+ "apihelp-query+allcategories-param-dir": "Sortierrichtung.",
+ "apihelp-query+allcategories-param-min": "Gibt nur Kategorien zurück, die mindestens die angegebene Anzahl an Einträgen haben.",
+ "apihelp-query+allcategories-param-max": "Gibt nur Kategorien zurück, die höchstens die angegebene Anzahl an Einträgen haben.",
+ "apihelp-query+allcategories-param-limit": "Wie viele Kategorien zurückgegeben werden sollen.",
+ "apihelp-query+allcategories-param-prop": "Zurückzugebende Eigenschaften:\n;size: Ergänzt die Anzahl der Einträge in der Antwort.\n;hidden: Markiert über _&#95;HIDDENCAT_&#95; versteckte Kategorien.",
+ "apihelp-query+allcategories-example-size": "Listet Kategorien mit der Anzahl ihrer Einträge auf.",
+ "apihelp-query+allcategories-example-generator": "Bezieht Informationen über die Kategorieseite selbst für Kategorien, die mit <kbd>List</kbd> beginnen.",
+ "apihelp-query+alldeletedrevisions-description": "Bezieht alle gelöschten Versionen eines Benutzers oder eines Namensraumes.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Darf nur mit <var>$3user</var> verwendet werden.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kann nicht zusammen mit <var>$3user</var> benutzt werden.",
+ "apihelp-query+alldeletedrevisions-param-start": "Der Zeitstempel, bei dem die Auflistung beginnen soll.",
+ "apihelp-query+alldeletedrevisions-param-end": "Der Zeitstempel, bei dem die Auflistung enden soll.",
+ "apihelp-query+alldeletedrevisions-param-from": "Seitentitel, bei dem die Auflistung beginnen soll.",
+ "apihelp-query+alldeletedrevisions-param-to": "Seitentitel, bei dem die Auflistung enden soll.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Listet alle Seitentitel auf, die mit dem angegebenen Wert beginnen.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Listet nur Versionen auf, die die angegebene Markierung haben.",
+ "apihelp-query+alldeletedrevisions-param-user": "Nur Versionen von diesem Benutzer auflisten.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Schließt Bearbeitungen des angegebenen Benutzers aus.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Nur Seiten in diesem Namensraum auflisten.",
+ "apihelp-query+allfileusages-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
+ "apihelp-query+allfileusages-example-unique": "Einheitliche Dateititel auflisten",
+ "apihelp-query+allfileusages-example-generator": "Seiten abrufen, die die Dateien enthalten",
+ "apihelp-query+allimages-description": "Alle Bilder nacheinander auflisten.",
+ "apihelp-query+allimages-param-sha1": "SHA1-Hash des Bildes. Überschreibt $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1-Hash des Bildes (Basis 36; verwendet in MediaWiki).",
+ "apihelp-query+allimages-param-limit": "Wie viele Gesamtbilder zurückgegeben werden sollen.",
+ "apihelp-query+allimages-example-recent": "Zeigt eine Liste von kürzlich hochgeladenen Dateien ähnlich zu [[Special:NewFiles]].",
+ "apihelp-query+alllinks-example-unique": "Einheitlich verlinkte Titel auflisten",
+ "apihelp-query+allpages-param-filterredir": "Welche Seiten aufgelistet werden sollen.",
+ "apihelp-query+allredirects-example-unique": "Einzigartige Zielseiten auflisten.",
+ "apihelp-query+allredirects-example-generator": "Seiten abrufen, die die Weiterleitungen enthalten",
+ "apihelp-query+alltransclusions-param-namespace": "Der aufzulistende Namensraum.",
+ "apihelp-query+alltransclusions-example-unique": "Einzigartige eingebundene Titel auflisten.",
+ "apihelp-query+allusers-param-limit": "Wie viele Benutzernamen insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+allusers-example-Y": "Benutzer ab <kbd>Y</kbd> auflisten.",
+ "apihelp-query+backlinks-description": "Alle Seiten finden, die auf die angegebene Seite verlinken.",
+ "apihelp-query+backlinks-example-simple": "Links auf <kbd>Hauptseite</kbd> anzeigen.",
+ "apihelp-query+blocks-example-simple": "Sperren auflisten",
+ "apihelp-query+categorymembers-param-startsortkey": "Stattdessen $1starthexsortkey verwenden.",
+ "apihelp-query+categorymembers-param-endsortkey": "Stattdessen $1endhexsortkey verwenden.",
+ "apihelp-query+contributors-param-limit": "Wie viele Spender zurückgegeben werden sollen.",
+ "apihelp-query+deletedrevisions-param-user": "Nur Versionen von diesem Benutzer auflisten.",
+ "apihelp-query+deletedrevisions-param-limit": "Die Maximalmenge der aufzulistenden Versionen.",
+ "apihelp-query+deletedrevs-param-from": "Auflistung bei diesem Titel beginnen.",
+ "apihelp-query+deletedrevs-param-to": "Auflistung bei diesem Titel beenden.",
+ "apihelp-query+duplicatefiles-param-localonly": "Sucht nur nach Dateien im lokalen Repositorium.",
+ "apihelp-query+duplicatefiles-example-simple": "Sucht nach Duplikaten von [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Sucht nach Duplikaten aller Dateien.",
+ "apihelp-query+embeddedin-param-namespace": "Der aufzulistende Namensraum.",
+ "apihelp-query+embeddedin-param-filterredir": "Wie Weiterleitungen behandelt werden sollen.",
+ "apihelp-query+embeddedin-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+extlinks-param-limit": "Wie viele Links zurückgegeben werden sollen.",
+ "apihelp-query+exturlusage-param-limit": "Wie viele Seiten zurückgegeben werden sollen.",
+ "apihelp-query+filearchive-param-from": "Der Bildertitel, bei dem die Auflistung beginnen soll.",
+ "apihelp-query+filearchive-param-to": "Der Bildertitel, bei dem die Auflistung enden soll.",
+ "apihelp-query+filearchive-param-limit": "Wie viele Bilder insgesamt zurückgegeben werden sollen.",
+ "apihelp-query+filearchive-example-simple": "Eine Liste aller gelöschten Dateien auflisten",
+ "apihelp-query+imageinfo-param-limit": "Wie viele Dateiversionen pro Datei zurückgegeben werden sollen.",
+ "apihelp-query+imageinfo-param-start": "Zeitstempel, von dem die Liste beginnen soll.",
+ "apihelp-query+imageinfo-param-end": "Zeitstempel, an dem die Liste enden soll.",
+ "apihelp-query+imageinfo-param-urlheight": "Ähnlich wie $1urlwidth.",
+ "apihelp-query+info-description": "Ruft Basisinformationen über die Seite ab.",
+ "apihelp-query+info-param-testactions": "Überprüft, ob der aktuelle Benutzer gewisse Aktionen auf der Seite ausführen kann.",
+ "apihelp-query+iwbacklinks-param-prefix": "Präfix für das Interwiki.",
+ "apihelp-query+langbacklinks-param-limit": "Wie viele Gesamtseiten zurückgegeben werden sollen.",
+ "apihelp-query+links-example-simple": "Links von der <kbd>Hauptseite</kbd> abrufen",
+ "apihelp-query+linkshere-description": "Alle Seiten finden, die auf die angegebenen Seiten verlinken.",
+ "apihelp-query+logevents-description": "Ereignisse von den Logbüchern abrufen.",
+ "apihelp-query+prefixsearch-param-search": "Such-Zeichenfolge.",
+ "apihelp-query+search-example-simple": "Nach <kbd>meaning</kbd> suchen.",
+ "apihelp-query+search-example-text": "Texte nach <kbd>meaning</kbd> durchsuchen.",
+ "apihelp-query+siteinfo-example-simple": "Websiteinformationen abrufen",
+ "apihelp-query+tags-description": "Änderungs-Tags auflisten.",
+ "apihelp-query+tags-example-simple": "Verfügbare Tags auflisten",
+ "apihelp-query+usercontribs-description": "Alle Bearbeitungen von einem Benutzer abrufen.",
+ "apihelp-query+userinfo-example-simple": "Informationen über den aktuellen Benutzer abrufen",
+ "apihelp-query+users-description": "Informationen über eine Liste von Benutzern abrufen.",
+ "apihelp-rsd-description": "Ein RSD-Schema (Really Simple Discovery) exportieren.",
+ "apihelp-rsd-example-simple": "Das RSD-Schema exportieren",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "An allen beobachteten Seiten arbeiten.",
+ "apihelp-unblock-description": "Einen Benutzer freigeben.",
+ "apihelp-unblock-param-reason": "Grund für die Freigabe.",
+ "apihelp-unblock-example-id": "Sperrkennung #<kbd>105</kbd> freigeben.",
+ "apihelp-undelete-param-reason": "Grund für die Wiederherstellung.",
+ "apihelp-upload-param-filename": "Ziel-Dateiname.",
+ "apihelp-upload-param-watch": "Die Seite beobachten.",
+ "apihelp-upload-param-file": "Dateiinhalte.",
+ "apihelp-upload-param-url": "URL, von der die Datei abgerufen werden soll.",
+ "apihelp-upload-example-url": "Von einer URL hochladen",
+ "apihelp-userrights-param-user": "Benutzername.",
+ "apihelp-userrights-param-userid": "Benutzerkennung.",
+ "apihelp-watch-example-watch": "Die Seite <kbd>Hauptseite</kbd> beobachten.",
+ "apihelp-format-example-generic": "Das Abfrageergebnis im $1-Format formatieren",
+ "apihelp-dbg-description": "Daten im PHP-<code>var_export()</code>-Format ausgeben.",
+ "apihelp-dbgfm-description": "Daten im PHP-<code>var_export()</code>-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-dump-description": "Daten im PHP-<code>var_dump()</code>-Format ausgeben.",
+ "apihelp-dumpfm-description": "Daten im PHP-<code>var_dump()</code>-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-json-description": "Daten im JSON-Format ausgeben.",
+ "apihelp-json-param-callback": "Falls angegeben, wird die Ausgabe in einen angegebenen Funktionsaufruf eingeschlossen. Aus Sicherheitsgründen sind benutzerspezifische Daten beschränkt.",
+ "apihelp-json-param-utf8": "Falls angegeben, kodiert die meisten (aber nicht alle) Nicht-ASCII-Zeichen als UTF-8 anstatt sie mit hexadezimalen Escape-Sequenzen zu ersetzen.",
+ "apihelp-jsonfm-description": "Daten im JSON-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-none-description": "Nichts ausgeben.",
+ "apihelp-php-description": "Daten im serialisierten PHP-Format ausgeben.",
+ "apihelp-phpfm-description": "Daten im serialisierten PHP-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-rawfm-description": "Daten mit den Fehlerbehebungselementen im JSON-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-txt-description": "Daten im PHP-<code>print_r()</code>-Format ausgeben.",
+ "apihelp-txtfm-description": "Daten im PHP-<code>print_r()</code>-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-wddx-description": "Daten im WDDX-Format ausgeben.",
+ "apihelp-wddxfm-description": "Daten im WDDX-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-xml-description": "Daten im XML-Format ausgeben.",
+ "apihelp-xml-param-xslt": "Falls angegeben, fügt die benannte Seite als XSL-Stylesheet hinzu. Der Wert muss ein Titel im Namensraum „{{ns:mediawiki}}“ sein und mit <code>.xsl</code> enden.",
+ "apihelp-xml-param-includexmlnamespace": "Falls angegeben, ergänzt einen XML-Namensraum.",
+ "apihelp-xmlfm-description": "Daten im XML-Format ausgeben (schöngedruckt in HTML).",
+ "apihelp-yaml-description": "Daten im YAML-Format ausgeben.",
+ "apihelp-yamlfm-description": "Daten im YAML-Format ausgeben (schöngedruckt in HTML).",
+ "api-format-title": "MediaWiki-API-Ergebnis",
+ "api-format-prettyprint-header": "Dies ist die HTML-Repräsentation des $1-Formats. HTML ist zur Fehlerbehebung gut, aber unpassend für den Anwendungsgebrauch.\n\nGib den Parameter <var>Format</var> an, um das Ausgabeformat zu ändern. Um die Nicht-HTML-Repräsentation des $1-Formats anzusehen, lege <kbd>format=$2</kbd> fest.\n\nSiehe die [[mw:API|vollständige Dokumentation]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
+ "api-orm-param-props": "Felder an die Anfrage.",
+ "api-orm-param-limit": "Maximale Anzahl zurückgegebender Zeilen.",
+ "api-pageset-param-titles": "Eine Liste der Titel, an denen gearbeitet werden soll.",
+ "api-pageset-param-pageids": "Eine Liste der Seitenkennungen, an denen gearbeitet werden soll.",
+ "api-pageset-param-revids": "Eine Liste der Versionskennungen, an denen gearbeitet werden soll.",
+ "api-help-title": "MediaWiki-API-Hilfe",
+ "api-help-lead": "Dies ist eine automatisch generierte MediaWiki-API-Dokumentationsseite.\n\nDokumentation und Beispiele: https://www.mediawiki.org/wiki/API/de",
+ "api-help-main-header": "Hauptmodul",
+ "api-help-flag-deprecated": "Dieses Modul ist veraltet.",
+ "api-help-flag-internal": "<strong>Dieses Modul ist intern oder instabil.</strong> Seine Operationen werden ohne Kenntnisnahme geändert.",
+ "api-help-flag-readrights": "Dieses Modul erfordert Leserechte.",
+ "api-help-flag-writerights": "Dieses Modul erfordert Schreibrechte.",
+ "api-help-flag-mustbeposted": "Dieses Modul akzeptiert nur POST-Anfragen.",
+ "api-help-flag-generator": "Dieses Modul kann als Generator verwendet werden.",
+ "api-help-parameters": "{{PLURAL:$1|Parameter}}:",
+ "api-help-param-deprecated": "Veraltet.",
+ "api-help-param-required": "Dieser Parameter ist erforderlich.",
+ "api-help-param-list": "{{PLURAL:$1|1=Ein Wert|2=Werte (mit <kbd>{{!}}</kbd> trennen)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Muss leer sein|Kann leer sein oder $2}}",
+ "api-help-param-limit": "Nicht mehr als $1 erlaubt.",
+ "api-help-param-limit2": "Nicht mehr als $1 ($2 für Bots) erlaubt.",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Der Wert darf|2=Die Werte dürfen}} nicht kleiner sein als $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Der Wert darf|2=Die Werte dürfen}} nicht größer sein als $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Der Wert muss|2=Die Werte müssen}} zwischen $2 und $3 sein.",
+ "api-help-param-upload": "Muss als Dateiupload mithilfe eines multipart/form-data-Formular bereitgestellt werden.",
+ "api-help-param-multi-separate": "Werte mit <kbd>|</kbd> trennen.",
+ "api-help-param-multi-max": "Maximale Anzahl der Werte ist {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} für Bots).",
+ "api-help-param-default": "Standard: $1",
+ "api-help-param-default-empty": "Standard: <span class=\"apihelp-empty\">(leer)</span>",
+ "api-help-param-token": "Ein „$1“-Token abgerufen von [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(keine Beschreibung)</span>",
+ "api-help-examples": "{{PLURAL:$1|Beispiel|Beispiele}}:",
+ "api-help-permissions": "{{PLURAL:$1|Berechtigung|Berechtigungen}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Gewährt an}}: $2",
+ "api-help-right-apihighlimits": "Höhere Beschränkungen in API-Anfragen verwenden (langsame Anfragen: $1; schnelle Anfragen: $2). Die Beschränkungen für langsame Anfragen werden auch auf Mehrwertparameter angewandt.",
+ "api-credits-header": "Danksagungen",
+ "api-credits": "API-Entwickler:\n* Roan Kattouw (Hauptentwickler von September 2007 bis 2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (Autor, Hauptentwickler von September 2006 bis September 2007)\n* Brad Jorsch (Hauptentwickler seit 2013)\n\nBitte sende deine Kommentare, Vorschläge und Fragen an mediawiki-api@lists.wikimedia.org\noder reiche einen Fehlerbericht auf https://phabricator.wikimedia.org/ ein."
+}
diff --git a/includes/api/i18n/el.json b/includes/api/i18n/el.json
new file mode 100644
index 00000000..d4d239f4
--- /dev/null
+++ b/includes/api/i18n/el.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Glavkos"
+ ]
+ },
+ "apihelp-block-description": "Φραγή χρήστη",
+ "apihelp-block-param-user": "Όνομα χρήστη, διεύθυνση IP ή εύρος διευθύνσεων IP που θέλετε να επιβάλετε φραγή.",
+ "apihelp-block-param-reason": "Λόγος φραγής.",
+ "apihelp-createaccount-param-name": "Όνομα χρήστη.",
+ "apihelp-delete-description": "Διαγραφή σελίδας."
+}
diff --git a/includes/api/i18n/en-gb.json b/includes/api/i18n/en-gb.json
new file mode 100644
index 00000000..929ec7e0
--- /dev/null
+++ b/includes/api/i18n/en-gb.json
@@ -0,0 +1,156 @@
+{
+ "@metadata": {
+ "authors": [
+ "Reedy",
+ "Chase me ladies, I'm the Cavalry"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> All features shown on this page should be working, but the API is still in active development, and may change at any time. Subscribe to [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] for notice of updates.\n\n<strong>Erroneous requests:</strong> When erroneous requests are sent to the API, an HTTP header will be sent with the key \"MediaWiki-API-Error\" and then both the value of the header and the error code sent back will be set to the same value. For more information see [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
+ "apihelp-main-param-maxage": "Set the <code>max-age</code> header to this many seconds. Errors are never cached.",
+ "apihelp-main-param-assert": "Verify the user is logged in if set to <kbd>user</kbd>, or has the bot userright if <kbd>bot</kbd>.",
+ "apihelp-block-param-user": "Username, IP address, or IP range to block.",
+ "apihelp-block-param-allowusertalk": "Allow the user to edit their own talk page (depends on <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-watchuser": "Watch the user and talk pages of the user or IP address.",
+ "apihelp-block-example-ip-simple": "Block IP address <kbd>192.0.2.5</kbd> for three days with reason <kbd>First strike</kbd>.",
+ "apihelp-clearhasmsg-description": "Clears the <code>hasmsg</code> flag for the current user.",
+ "apihelp-compare-description": "Get the difference between 2 pages.\n\nA revision number, a page title, or a page ID for both \"from\" and \"to\" must be passed.",
+ "apihelp-createaccount-param-password": "Password (ignored if <var>$1mailpassword</var> is set).",
+ "apihelp-delete-param-title": "Title of the page to delete. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-delete-param-watch": "Add the page to the current user's watchlist.",
+ "apihelp-delete-example-simple": "Delete <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Delete <kbd>Main Page</kbd> with the reason <kbd>Preparing for move</kbd>.",
+ "apihelp-edit-param-title": "Title of the page to edit. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-edit-param-watch": "Add the page to the current user's watchlist.",
+ "apihelp-edit-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-edit-param-contentformat": "Content serialisation format used for the input text.",
+ "apihelp-edit-example-prepend": "Prepend <kbd>_&#95;NOTOC_&#95;</kbd> to a page.",
+ "apihelp-expandtemplates-example-simple": "Expand the wikitext <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Hide changes made by the current user.",
+ "apihelp-filerevert-example-revert": "Revert <kbd>Wiki.png</kbd> to the version of <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-example-main": "Help for the main module.",
+ "apihelp-help-example-query": "Help for two query submodules.",
+ "apihelp-import-description": "Import a page from another wiki, or an XML file.\n\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the <var>xml</var> parameter.",
+ "apihelp-login-example-gettoken": "Retrieve a login token.",
+ "apihelp-logout-example-logout": "Log the current user out.",
+ "apihelp-move-param-to": "Title to rename the page to.",
+ "apihelp-move-param-reason": "Reason for the rename.",
+ "apihelp-move-example-move": "Move <kbd>Badtitle</kbd> to <kbd>Goodtitle</kbd> without leaving a redirect.",
+ "apihelp-opensearch-example-te": "Find pages beginning with <kbd>Te</kbd>.",
+ "apihelp-options-param-resetkinds": "List of types of options to reset when the <var>$1reset</var> option is set.",
+ "apihelp-options-param-optionvalue": "A value of the option specified by <var>$1optionname</var>, can contain pipe characters.",
+ "apihelp-options-example-change": "Change <kbd>skin</kbd> and <kbd>hideminor</kbd> preferences.",
+ "apihelp-options-example-complex": "Reset all preferences, then set <kbd>skin</kbd> and <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-param-querymodules": "List of query module names (value of <var>prop</var>, <var>meta</var> or <var>list</var> parameter). Use <kbd>$1modules=query+foo</kbd> instead of <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-parse-param-pageid": "Parse the content of this page. Overrides <var>$1page</var>.",
+ "apihelp-parse-param-contentformat": "Content serialisation format used for the input text. Only valid when used with $1text.",
+ "apihelp-patrol-example-rcid": "Patrol a recent change.",
+ "apihelp-patrol-example-revid": "Patrol a revision.",
+ "apihelp-protect-param-protections": "List of protection levels, formatted <kbd>action=level</kbd> (e.g. <kbd>edit=sysop</kbd>).\n\n<strong>Note:</strong> Any actions not listed will have restrictions removed.",
+ "apihelp-protect-param-expiry": "Expiry timestamps. If only one timestamp is set, it will be used for all protections. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, or <kbd>never</kbd>, for a never-expiring protection.",
+ "apihelp-protect-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-protect-example-unprotect2": "Unprotect a page by setting no restrictions.",
+ "apihelp-purge-example-simple": "Purge the <kbd>Main Page</kbd> and the <kbd>API</kbd> page.",
+ "apihelp-query-example-allpages": "Fetch revisions of pages beginning with <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-example-generator": "Retrieve information about the category page for categories beginning <kbd>List</kbd>.",
+ "apihelp-query+allfileusages-example-unique-generator": "Gets all file titles, marking the missing ones.",
+ "apihelp-query+alllinks-param-unique": "Only show distinct linked titles. Cannot be used with <kbd>$1prop=ids</kbd>.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+alllinks-example-B": "List linked titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "List unique linked titles.",
+ "apihelp-query+allmessages-example-ipb": "Show messages starting with <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Show messages <kbd>august</kbd> and <kbd>mainpage</kbd> in German.",
+ "apihelp-query+allpages-example-B": "Show a list of pages starting at the letter <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-B": "List target pages, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-generator": "Gets pages containing the redirects.",
+ "apihelp-query+alltransclusions-example-unique": "List unique transcluded titles.",
+ "apihelp-query+alltransclusions-example-generator": "Gets pages containing the transclusions.",
+ "apihelp-query+backlinks-param-pageid": "Page ID to search. Cannot be used together with <var>$1title</var>.",
+ "apihelp-query+backlinks-param-limit": "How many total pages to return. If <var>$1redirect</var> is enabled, limit applies to each level separately (which means up to 2 * <var>$1limit</var> results may be returned).",
+ "apihelp-query+backlinks-example-generator": "Get information about pages linking to <kbd>Main page<kbd>.",
+ "apihelp-query+blocks-param-ip": "Get all blocks applying to this IP or CIDR range, including range blocks.\nThis cannot be used together with <var>$3users</var>. CIDR ranges broader than IPv4/$1 or IPv6/$2 will not be not accepted.",
+ "apihelp-query+blocks-example-simple": "List blocks.",
+ "apihelp-query+blocks-example-users": "List blocks of users <kbd>Alice</kbd> and <kbd>Bob</kbd>.",
+ "apihelp-query+categoryinfo-example-simple": "Get information about <kbd>Category:Foo</kbd> and <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-param-pageid": "Page ID of the category to enumerate. Cannot be used together with <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey to end listing from, as returned by <kbd>$1prop=sortkey</kbd>. Can only be used with <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+deletedrevs-example-mode2": "List the last 50 deleted contributions by <kbd>Bob</kbd> (mode 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "List the first 50 deleted revisions in the main namespace (mode 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "List the first 50 deleted pages in the {{ns:talk}} namespace (mode 3).",
+ "apihelp-query+duplicatefiles-example-simple": "Look for duplicates of [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Look for duplicates of all files.",
+ "apihelp-query+extlinks-example-simple": "Get a list of external links on <kbd>Main Page<kbd>.",
+ "apihelp-query+exturlusage-param-protocol": "Protocol of the URL. If empty and <var>$1query</var> set, the protocol is <kbd>http</kbd>. Leave both this and <var>$1query</var> empty to list all external links.",
+ "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories.",
+ "apihelp-query+imageinfo-param-metadataversion": "Version of metadata to use. If <kbd>latest</kbd> is specified, use latest version. Defaults to <kbd>1</kbd> for backwards compatibility.",
+ "apihelp-query+imageinfo-example-simple": "Fetch information about the current version of [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+images-example-simple": "Get a list of files used in the [[Main Page]].",
+ "apihelp-query+imageusage-example-simple": "Show pages using [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Get information about pages using [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-example-protection": "Get general and protection information about the page <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-example-simple": "Get pages linking to [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-param-title": "Interwiki link to search for. Must be used with <var>$1prefix</var>.",
+ "apihelp-query+langbacklinks-example-simple": "Get pages linking to [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Get information about pages linking to [[:fr:Test]].",
+ "apihelp-query+langlinks-param-title": "Link to search for. Must be used with <var>$1lang</var>.",
+ "apihelp-query+links-example-simple": "Get links from the page <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-namespaces": "Get links from the page <kbd>Main Page</kbd> in the {{ns:user}} and {{ns:template}} namespaces.",
+ "apihelp-query+linkshere-example-simple": "Get a list of pages linking to the [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Get information about pages linking to the [[Main Page]].",
+ "apihelp-query+logevents-example-simple": "List recent log events.",
+ "apihelp-query+pagepropnames-description": "List all page property names in use on the wiki.",
+ "apihelp-query+pageswithprop-description": "List all pages using a given page property.",
+ "apihelp-query+pageswithprop-example-generator": "Get page information about the first 10 pages using <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+protectedtitles-example-generator": "Find links to protected titles in the main namespace.",
+ "apihelp-query+random-example-simple": "Return two random pages from the main namespace.",
+ "apihelp-query+random-example-generator": "Return page info about two random pages from the main namespace.",
+ "apihelp-query+recentchanges-example-simple": "List recent changes.",
+ "apihelp-query+redirects-example-generator": "Get information about all redirects to the [[Main Page]].",
+ "apihelp-query+revisions-example-first5-not-localhost": "Get first 5 revisions of the <kbd>Main Page</kbd> that were not made by anonymous user <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions+base-param-difftotext": "Text to diff each revision to. Only diffs a limited number of revisions. Overrides <var>$1diffto</var>. If <var>$1section</var> is set, only that section will be diffed against this text",
+ "apihelp-query+revisions+base-param-contentformat": "Serialisation format used for <var>$1difftotext</var> and expected for output of content.",
+ "apihelp-query+search-example-text": "Search texts for <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "Get page information about the pages returned for a search for <kbd>meaning</kbd>.",
+ "apihelp-query+siteinfo-example-simple": "Fetch site information.",
+ "apihelp-query+siteinfo-example-replag": "Check the current replication lag.",
+ "apihelp-query+stashimageinfo-example-simple": "Returns information for a stashed file.",
+ "apihelp-query+tags-example-simple": "List available tags.",
+ "apihelp-query+templates-example-simple": "Get the templates used on the page <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "Get information about the template pages used on <kbd>Main Page</kbd>.",
+ "apihelp-query+tokens-example-simple": "Retrieve a csrf token (the default).",
+ "apihelp-query+tokens-example-types": "Retrieve a watch token and a patrol token.",
+ "apihelp-query+transcludedin-example-simple": "Get a list of pages transcluding <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Get information about pages transcluding <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-example-user": "Show contributions of user <kbd>Example</kbd>.",
+ "apihelp-query+userinfo-example-simple": "Get information about the current user.",
+ "apihelp-query+watchlist-example-simple": "List the top revision for recently changed pages on the watchlist of the current user.",
+ "apihelp-query+watchlist-example-generator": "Fetch page info for recently changed pages on the current user's watchlist.",
+ "apihelp-query+watchlistraw-description": "Get all pages on the current user's watchlist.",
+ "apihelp-query+watchlistraw-example-simple": "List pages on the watchlist of the current user.",
+ "apihelp-query+watchlistraw-example-generator": "Fetch page info for pages on the current user's watchlist.",
+ "apihelp-revisiondelete-example-revision": "Hide content for revision <kbd>12345</kbd> on the page <kbd>Main Page</kbd>.",
+ "apihelp-rollback-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-rollback-example-simple": "Roll back the last edits to page <kbd>Main Page</kbd> by user <kbd>Example</kbd>.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the <kbd>{{ns:user}}</kbd> namespace.",
+ "apihelp-unblock-param-id": "ID of the block to unblock (obtained through <kbd>list=blocks</kbd>). Cannot be used together with <var>$1user</var>.",
+ "apihelp-undelete-param-timestamps": "Timestamps of the revisions to restore. If both <var>$1timestamps</var> and <var>$1fileids</var> are empty, all will be restored.",
+ "apihelp-undelete-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-undelete-example-page": "Undelete page <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Undelete two revisions of page <kbd>Main Page</kbd>.",
+ "apihelp-upload-param-comment": "Upload comment. Also used as the initial page text for new files if <var>$1text</var> is not specified.",
+ "apihelp-upload-example-url": "Upload from a URL.",
+ "apihelp-upload-example-filekey": "Complete an upload that failed due to warnings.",
+ "apihelp-userrights-example-userid": "Add the user with ID <kbd>123</kbd> to group <kbd>bot</kbd>, and remove from groups <kbd>sysop</kbd> and <kbd>bureaucrat</kbd>.",
+ "apihelp-watch-param-title": "The page to (un)watch. Use <var>$1titles</var> instead.",
+ "apihelp-watch-example-unwatch": "Unwatch the page <kbd>Main Page</kbd>.",
+ "apihelp-dbg-description": "Output data in PHP's <code>var_export()</code> format.",
+ "apihelp-dbgfm-description": "Output data in PHP's <code>var_export()</code> format (pretty-print in HTML).",
+ "apihelp-dump-description": "Output data in PHP's <code>var_dump()</code> format.",
+ "apihelp-php-description": "Output data in serialised PHP format.",
+ "apihelp-phpfm-description": "Output data in serialised PHP format (pretty-print in HTML).",
+ "apihelp-txt-description": "Output data in PHP's <code>print_r()</code> format.",
+ "apihelp-txtfm-description": "Output data in PHP's <code>print_r()</code> format (pretty-print in HTML).",
+ "api-pageset-param-redirects-generator": "Automatically resolve redirects in <var>$1titles</var>, <var>$1pageids</var>, and <var>$1revids</var>, and in pages returned by <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Automatically resolve redirects in <var>$1titles</var>, <var>$1pageids</var>, and <var>$1revids</var>.",
+ "api-help-param-multi-separate": "Separate values with <kbd>|</kbd>.",
+ "api-help-param-disabled-in-miser-mode": "Disabled due to [[mw:Manual:$wgMiserMode|miser mode]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Note:</strong> Due to [[mw:Manual:$wgMiserMode|miser mode]], using this may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned."
+}
diff --git a/includes/api/i18n/en.json b/includes/api/i18n/en.json
new file mode 100644
index 00000000..36a4d812
--- /dev/null
+++ b/includes/api/i18n/en.json
@@ -0,0 +1,1169 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anomie",
+ "Siebrand"
+ ]
+ },
+
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> All features shown on this page should be working, but the API is still in active development, and may change at any time. Subscribe to [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] for notice of updates.\n\n<strong>Erroneous requests:</strong> When erroneous requests are sent to the API, an HTTP header will be sent with the key \"MediaWiki-API-Error\" and then both the value of the header and the error code sent back will be set to the same value. For more information see [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
+ "apihelp-main-param-action": "Which action to perform.",
+ "apihelp-main-param-format": "The format of the output.",
+ "apihelp-main-param-maxlag": "Maximum lag can be used when MediaWiki is installed on a database replicated cluster. To save actions causing any more site replication lag, this parameter can make the client wait until the replication lag is less than the specified value. In case of excessive lag, error code <samp>maxlag</samp> is returned with a message like <samp>Waiting for $host: $lag seconds lagged</samp>.<br />See [[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]] for more information.",
+ "apihelp-main-param-smaxage": "Set the <code>s-maxage</code> header to this many seconds. Errors are never cached.",
+ "apihelp-main-param-maxage": "Set the <code>max-age</code> header to this many seconds. Errors are never cached.",
+ "apihelp-main-param-assert": "Verify the user is logged in if set to <kbd>user</kbd>, or has the bot userright if <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Any value given here will be included in the response. May be used to distinguish requests.",
+ "apihelp-main-param-servedby": "Include the hostname that served the request in the results.",
+ "apihelp-main-param-curtimestamp": "Include the current timestamp in the result.",
+ "apihelp-main-param-origin": "When accessing the API using a cross-domain AJAX request (CORS), set this to the originating domain. This must be included in any pre-flight request, and therefore must be part of the request URI (not the POST body). This must match one of the origins in the <code>Origin</code> header exactly, so it has to be set to something like <kbd>https://en.wikipedia.org</kbd> or <kbd>https://meta.wikimedia.org</kbd>. If this parameter does not match the <code>Origin</code> header, a 403 response will be returned. If this parameter matches the <code>Origin</code> header and the origin is whitelisted, an <code>Access-Control-Allow-Origin</code> header will be set.",
+ "apihelp-main-param-uselang": "Language to use for message translations. A list of codes may be fetched from <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> with <kbd>siprop=languages</kbd>, or specify <kbd>user</kbd> to use the current user's language preference, or specify <kbd>content</kbd> to use this wiki's content language.",
+
+ "apihelp-block-description": "Block a user.",
+ "apihelp-block-param-user": "Username, IP address, or IP range to block.",
+ "apihelp-block-param-expiry": "Expiry time. May be relative (e.g. <kbd>5 months</kbd> or <kbd>2 weeks</kbd>) or absolute (e.g. <kbd>2014-09-18T12:34:56Z</kbd>). If set to <kbd>infinite</kbd>, <kbd>indefinite</kbd>, or <kbd>never</kbd>, the block will never expire.",
+ "apihelp-block-param-reason": "Reason for block.",
+ "apihelp-block-param-anononly": "Block anonymous users only (i.e. disable anonymous edits for this IP address).",
+ "apihelp-block-param-nocreate": "Prevent account creation.",
+ "apihelp-block-param-autoblock": "Automatically block the last used IP address, and any subsequent IP addresses they try to login from.",
+ "apihelp-block-param-noemail": "Prevent user from sending email through the wiki. (Requires the <code>blockemail</code> right).",
+ "apihelp-block-param-hidename": "Hide the username from the block log. (Requires the <code>hideuser</code> right).",
+ "apihelp-block-param-allowusertalk": "Allow the user to edit their own talk page (depends on <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "If the user is already blocked, overwrite the existing block.",
+ "apihelp-block-param-watchuser": "Watch the user's or IP address's user and talk pages.",
+ "apihelp-block-example-ip-simple": "Block IP address <kbd>192.0.2.5</kbd> for three days with reason <kbd>First strike</kbd>.",
+ "apihelp-block-example-user-complex": "Block user <kbd>Vandal</kbd> indefinitely with reason <kbd>Vandalism</kbd>, and prevent new account creation and email sending.",
+
+ "apihelp-checktoken-description": "Check the validity of a token from <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Type of token being tested.",
+ "apihelp-checktoken-param-token": "Token to test.",
+ "apihelp-checktoken-param-maxtokenage": "Maximum allowed age of the token, in seconds.",
+ "apihelp-checktoken-example-simple": "Test the validity of a <kbd>csrf</kbd> token.",
+
+ "apihelp-clearhasmsg-description": "Clears the <code>hasmsg</code> flag for the current user.",
+ "apihelp-clearhasmsg-example-1": "Clear the <code>hasmsg</code> flag for the current user.",
+
+ "apihelp-compare-description": "Get the difference between 2 pages.\n\nA revision number, a page title, or a page ID for both \"from\" and \"to\" must be passed.",
+ "apihelp-compare-param-fromtitle": "First title to compare.",
+ "apihelp-compare-param-fromid": "First page ID to compare.",
+ "apihelp-compare-param-fromrev": "First revision to compare.",
+ "apihelp-compare-param-totitle": "Second title to compare.",
+ "apihelp-compare-param-toid": "Second page ID to compare.",
+ "apihelp-compare-param-torev": "Second revision to compare.",
+ "apihelp-compare-example-1": "Create a diff between revision 1 and 2.",
+
+ "apihelp-createaccount-description": "Create a new user account.",
+ "apihelp-createaccount-param-name": "Username.",
+ "apihelp-createaccount-param-password": "Password (ignored if <var>$1mailpassword</var> is set).",
+ "apihelp-createaccount-param-domain": "Domain for external authentication (optional).",
+ "apihelp-createaccount-param-token": "Account creation token obtained in first request.",
+ "apihelp-createaccount-param-email": "Email address of user (optional).",
+ "apihelp-createaccount-param-realname": "Real name of user (optional).",
+ "apihelp-createaccount-param-mailpassword": "If set to any value, a random password will be emailed to the user.",
+ "apihelp-createaccount-param-reason": "Optional reason for creating the account to be put in the logs.",
+ "apihelp-createaccount-param-language": "Language code to set as default for the user (optional, defaults to content language).",
+ "apihelp-createaccount-example-pass": "Create user <kbd>testuser</kbd> with password <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Create user <kbd>testmailuser</kbd> and email a randomly-generated password.",
+
+ "apihelp-delete-description": "Delete a page.",
+ "apihelp-delete-param-title": "Title of the page to delete. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Page ID of the page to delete. Cannot be used together with <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Reason for the deletion. If not set, an automatically generated reason will be used.",
+ "apihelp-delete-param-watch": "Add the page to the current user's watchlist.",
+ "apihelp-delete-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-delete-param-unwatch": "Remove the page from the current user's watchlist.",
+ "apihelp-delete-param-oldimage": "The name of the old image to delete as provided by [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Delete <kbd>Main Page</kbd>.",
+ "apihelp-delete-example-reason": "Delete <kbd>Main Page</kbd> with the reason <kbd>Preparing for move</kbd>.",
+
+ "apihelp-disabled-description": "This module has been disabled.",
+
+ "apihelp-edit-description": "Create and edit pages.",
+ "apihelp-edit-param-title": "Title of the page to edit. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Page ID of the page to edit. Cannot be used together with <var>$1title</var>.",
+ "apihelp-edit-param-section": "Section number. <kbd>0</kbd> for the top section, <kbd>new</kbd> for a new section.",
+ "apihelp-edit-param-sectiontitle": "The title for a new section.",
+ "apihelp-edit-param-text": "Page content.",
+ "apihelp-edit-param-summary": "Edit summary. Also section title when $1section=new and $1sectiontitle is not set.",
+ "apihelp-edit-param-tags": "Change tags to apply to the revision.",
+ "apihelp-edit-param-minor": "Minor edit.",
+ "apihelp-edit-param-notminor": "Non-minor edit.",
+ "apihelp-edit-param-bot": "Mark this edit as bot.",
+ "apihelp-edit-param-basetimestamp": "Timestamp of the base revision, used to detect edit conflicts. May be obtained through [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Timestamp when the editing process began, used to detect edit conflicts. An appropriate value may be obtained using <var>[[Special:ApiHelp/main|curtimestamp]]</var> when beginning the edit process (e.g. when loading the page content to edit).",
+ "apihelp-edit-param-recreate": "Override any errors about the page having been deleted in the meantime.",
+ "apihelp-edit-param-createonly": "Don't edit the page if it exists already.",
+ "apihelp-edit-param-nocreate": "Throw an error if the page doesn't exist.",
+ "apihelp-edit-param-watch": "Add the page to the current user's watchlist.",
+ "apihelp-edit-param-unwatch": "Remove the page from the current user's watchlist.",
+ "apihelp-edit-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-edit-param-md5": "The MD5 hash of the $1text parameter, or the $1prependtext and $1appendtext parameters concatenated. If set, the edit won't be done unless the hash is correct.",
+ "apihelp-edit-param-prependtext": "Add this text to the beginning of the page. Overrides $1text.",
+ "apihelp-edit-param-appendtext": "Add this text to the end of the page. Overrides $1text.\n\nUse $1section=new to append a new section, rather than this parameter.",
+ "apihelp-edit-param-undo": "Undo this revision. Overrides $1text, $1prependtext and $1appendtext.",
+ "apihelp-edit-param-undoafter": "Undo all revisions from $1undo to this one. If not set, just undo one revision.",
+ "apihelp-edit-param-redirect": "Automatically resolve redirects.",
+ "apihelp-edit-param-contentformat": "Content serialization format used for the input text.",
+ "apihelp-edit-param-contentmodel": "Content model of the new content.",
+ "apihelp-edit-param-token": "The token should always be sent as the last parameter, or at least after the $1text parameter.",
+ "apihelp-edit-example-edit": "Edit a page.",
+ "apihelp-edit-example-prepend": "Prepend <kbd>_&#95;NOTOC_&#95;</kbd> to a page.",
+ "apihelp-edit-example-undo": "Undo revisions 13579 through 13585 with autosummary.",
+
+ "apihelp-emailuser-description": "Email a user.",
+ "apihelp-emailuser-param-target": "User to send email to.",
+ "apihelp-emailuser-param-subject": "Subject header.",
+ "apihelp-emailuser-param-text": "Mail body.",
+ "apihelp-emailuser-param-ccme": "Send a copy of this mail to me.",
+ "apihelp-emailuser-example-email": "Send an email to the User <kbd>WikiSysop</kbd> with the text <kbd>Content</kbd>.",
+
+ "apihelp-expandtemplates-description": "Expands all templates in wikitext.",
+ "apihelp-expandtemplates-param-title": "Title of page.",
+ "apihelp-expandtemplates-param-text": "Wikitext to convert.",
+ "apihelp-expandtemplates-param-revid": "Revision ID, for <nowiki>{{REVISIONID}}</nowiki> and similar variables.",
+ "apihelp-expandtemplates-param-prop": "Which pieces of information to get:\n;wikitext:The expanded wikitext.\n;categories:Any categories present in the input that are not represented in the wikitext output.\n;properties:Page properties defined by expanded magic words in the wikitext.\n;volatile:Whether the output is volatile and should not be reused elsewhere within the page.\n;ttl:The maximum time after which caches of the result should be invalidated.\n;parsetree:The XML parse tree of the input.\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
+ "apihelp-expandtemplates-param-includecomments": "Whether to include HTML comments in the output.",
+ "apihelp-expandtemplates-param-generatexml": "Generate XML parse tree (replaced by $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Expand the wikitext <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+
+ "apihelp-feedcontributions-description": "Returns a user contributions feed.",
+ "apihelp-feedcontributions-param-feedformat": "The format of the feed.",
+ "apihelp-feedcontributions-param-user": "What users to get the contributions for.",
+ "apihelp-feedcontributions-param-namespace": "Which namespace to filter the contributions by.",
+ "apihelp-feedcontributions-param-year": "From year (and earlier).",
+ "apihelp-feedcontributions-param-month": "From month (and earlier).",
+ "apihelp-feedcontributions-param-tagfilter": "Filter contributions that have these tags.",
+ "apihelp-feedcontributions-param-deletedonly": "Show only deleted contributions.",
+ "apihelp-feedcontributions-param-toponly": "Only show edits that are latest revisions.",
+ "apihelp-feedcontributions-param-newonly": "Only show edits that are page creations.",
+ "apihelp-feedcontributions-param-showsizediff": "Show the size difference between revisions.",
+ "apihelp-feedcontributions-example-simple": "Return contributions for user <kbd>Example</kbd>.",
+
+ "apihelp-feedrecentchanges-description": "Returns a recent changes feed.",
+ "apihelp-feedrecentchanges-param-feedformat": "The format of the feed.",
+ "apihelp-feedrecentchanges-param-namespace": "Namespace to limit the results to.",
+ "apihelp-feedrecentchanges-param-invert": "All namespaces but the selected one.",
+ "apihelp-feedrecentchanges-param-associated": "Include associated (talk or main) namespace.",
+ "apihelp-feedrecentchanges-param-days": "Days to limit the results to.",
+ "apihelp-feedrecentchanges-param-limit": "Maximum number of results to return.",
+ "apihelp-feedrecentchanges-param-from": "Show changes since then.",
+ "apihelp-feedrecentchanges-param-hideminor": "Hide minor changes.",
+ "apihelp-feedrecentchanges-param-hidebots": "Hide changes made by bots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Hide changes made by anonymous users.",
+ "apihelp-feedrecentchanges-param-hideliu": "Hide changes made by registered users.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Hide patrolled changes.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Hide changes made by the current user.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filter by tag.",
+ "apihelp-feedrecentchanges-param-target": "Show only changes on pages linked from this page.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Show changes on pages linked to the selected page instead.",
+ "apihelp-feedrecentchanges-example-simple": "Show recent changes.",
+ "apihelp-feedrecentchanges-example-30days": "Show recent changes for 30 days.",
+
+ "apihelp-feedwatchlist-description": "Returns a watchlist feed.",
+ "apihelp-feedwatchlist-param-feedformat": "The format of the feed.",
+ "apihelp-feedwatchlist-param-hours": "List pages modified within this many hours from now.",
+ "apihelp-feedwatchlist-param-linktosections": "Link directly to changed sections if possible.",
+ "apihelp-feedwatchlist-example-default": "Show the watchlist feed.",
+ "apihelp-feedwatchlist-example-all6hrs": "Show all changes to watched pages in the past 6 hours.",
+
+ "apihelp-filerevert-description": "Revert a file to an old version.",
+ "apihelp-filerevert-param-filename": "Target filename, without the File: prefix.",
+ "apihelp-filerevert-param-comment": "Upload comment.",
+ "apihelp-filerevert-param-archivename": "Archive name of the revision to revert to.",
+ "apihelp-filerevert-example-revert": "Revert <kbd>Wiki.png</kbd> to the version of <kbd>2011-03-05T15:27:40Z</kbd>.",
+
+ "apihelp-help-description": "Display help for the specified modules.",
+ "apihelp-help-param-modules": "Modules to display help for (values of the <var>action</var> and <var>format</var> parameters, or <kbd>main</kbd>). Can specify submodules with a <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Include help for submodules of the named module.",
+ "apihelp-help-param-recursivesubmodules": "Include help for submodules recursively.",
+ "apihelp-help-param-helpformat": "Format of the help output.",
+ "apihelp-help-param-wrap": "Wrap the output in a standard API response structure.",
+ "apihelp-help-param-toc": "Include a table of contents in the HTML output.",
+ "apihelp-help-example-main": "Help for the main module.",
+ "apihelp-help-example-recursive": "All help in one page.",
+ "apihelp-help-example-help": "Help for the help module itself.",
+ "apihelp-help-example-query": "Help for two query submodules.",
+
+ "apihelp-imagerotate-description": "Rotate one or more images.",
+ "apihelp-imagerotate-param-rotation": "Degrees to rotate image clockwise.",
+ "apihelp-imagerotate-example-simple": "Rotate <kbd>File:Example.png</kbd> by <kbd>90</kbd> degrees.",
+ "apihelp-imagerotate-example-generator": "Rotate all images in <kbd>Category:Flip</kbd> by <kbd>180</kbd> degrees.",
+
+ "apihelp-import-description": "Import a page from another wiki, or an XML file.\n\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the <var>xml</var> parameter.",
+ "apihelp-import-param-summary": "Import summary.",
+ "apihelp-import-param-xml": "Uploaded XML file.",
+ "apihelp-import-param-interwikisource": "For interwiki imports: wiki to import from.",
+ "apihelp-import-param-interwikipage": "For interwiki imports: page to import.",
+ "apihelp-import-param-fullhistory": "For interwiki imports: import the full history, not just the current version.",
+ "apihelp-import-param-templates": "For interwiki imports: import all included templates as well.",
+ "apihelp-import-param-namespace": "For interwiki imports: import to this namespace.",
+ "apihelp-import-param-rootpage": "Import as subpage of this page.",
+ "apihelp-import-example-import": "Import [[meta:Help:Parserfunctions]] to namespace 100 with full history.",
+
+ "apihelp-login-description": "Log in and get authentication cookies.\n\nIn the event of a successful log-in, the needed cookies will be included in the HTTP response headers. In the event of a failed log-in, further attempts may be throttled to limit automated password guessing attacks.",
+ "apihelp-login-param-name": "User name.",
+ "apihelp-login-param-password": "Password.",
+ "apihelp-login-param-domain": "Domain (optional).",
+ "apihelp-login-param-token": "Login token obtained in first request.",
+ "apihelp-login-example-gettoken": "Retrieve a login token.",
+ "apihelp-login-example-login": "Log in.",
+
+ "apihelp-logout-description": "Log out and clear session data.",
+ "apihelp-logout-example-logout": "Log the current user out.",
+
+ "apihelp-managetags-description": "Perform management tasks relating to change tags.",
+ "apihelp-managetags-param-operation": "Which operation to perform:\n;create:Create a new change tag for manual use.\n;delete:Remove a change tag from the database, including removing the tag from all revisions, recent change entries and log entries on which it is used.\n;activate:Activate a change tag, allowing users to apply it manually.\n;deactivate:Deactivate a change tag, preventing users from applying it manually.",
+ "apihelp-managetags-param-tag": "Tag to create, delete, activate or deactivate. For tag creation, the tag must not exist. For tag deletion, the tag must exist. For tag activation, the tag must exist and not be in use by an extension. For tag deactivation, the tag must be currently active and manually defined.",
+ "apihelp-managetags-param-reason": "An optional reason for creating, deleting, activating or deactivating the tag.",
+ "apihelp-managetags-param-ignorewarnings": "Whether to ignore any warnings that are issued during the operation.",
+ "apihelp-managetags-example-create": "Create a tag named <kbd>spam</kbd> with the reason <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "Delete the <kbd>vandlaism</kbd> tag with the reason <kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "Activate a tag named <kbd>spam</kbd> with the reason <kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "Deactivate a tag named <kbd>spam</kbd> with the reason <kbd>No longer required</kbd>",
+
+ "apihelp-move-description": "Move a page.",
+ "apihelp-move-param-from": "Title of the page to rename. Cannot be used together with <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Page ID of the page to rename. Cannot be used together with <var>$1from</var>.",
+ "apihelp-move-param-to": "Title to rename the page to.",
+ "apihelp-move-param-reason": "Reason for the rename.",
+ "apihelp-move-param-movetalk": "Rename the talk page, if it exists.",
+ "apihelp-move-param-movesubpages": "Rename subpages, if applicable.",
+ "apihelp-move-param-noredirect": "Don't create a redirect.",
+ "apihelp-move-param-watch": "Add the page and the redirect to the current user's watchlist.",
+ "apihelp-move-param-unwatch": "Remove the page and the redirect from the current user's watchlist.",
+ "apihelp-move-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-move-param-ignorewarnings": "Ignore any warnings.",
+ "apihelp-move-example-move": "Move <kbd>Badtitle</kbd> to <kbd>Goodtitle</kbd> without leaving a redirect.",
+
+ "apihelp-opensearch-description": "Search the wiki using the OpenSearch protocol.",
+ "apihelp-opensearch-param-search": "Search string.",
+ "apihelp-opensearch-param-limit": "Maximum number of results to return.",
+ "apihelp-opensearch-param-namespace": "Namespaces to search.",
+ "apihelp-opensearch-param-suggest": "Do nothing if <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> is false.",
+ "apihelp-opensearch-param-redirects": "How to handle redirects:\n;return:Return the redirect itself.\n;resolve:Return the target page. May return fewer than $1limit results.\nFor historical reasons, the default is \"return\" for $1format=json and \"resolve\" for other formats.",
+ "apihelp-opensearch-param-format": "The format of the output.",
+ "apihelp-opensearch-param-warningsaserror": "If warnings are raised with <kbd>format=json</kbd>, return an API error instead of ignoring them.",
+ "apihelp-opensearch-example-te": "Find pages beginning with <kbd>Te</kbd>.",
+
+ "apihelp-options-description": "Change preferences of the current user.\n\nOnly options which are registered in core or in one of installed extensions, or options with keys prefixed with \"userjs-\" (intended to be used by user scripts), can be set.",
+ "apihelp-options-param-reset": "Resets preferences to the site defaults.",
+ "apihelp-options-param-resetkinds": "List of types of options to reset when the <var>$1reset</var> option is set.",
+ "apihelp-options-param-change": "List of changes, formatted name=value (e.g. skin=vector). Value cannot contain pipe characters. If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value.",
+ "apihelp-options-param-optionname": "A name of a option which should be set to the value given by <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "A value of the option specified by <var>$1optionname</var>, can contain pipe characters.",
+ "apihelp-options-example-reset": "Reset all preferences.",
+ "apihelp-options-example-change": "Change <kbd>skin</kbd> and <kbd>hideminor</kbd> preferences.",
+ "apihelp-options-example-complex": "Reset all preferences, then set <kbd>skin</kbd> and <kbd>nickname</kbd>.",
+
+ "apihelp-paraminfo-description": "Obtain information about API modules.",
+ "apihelp-paraminfo-param-modules": "List of module names (values of the <var>action</var> and <var>format</var> parameters, or <kbd>main</kbd>). Can specify submodules with a <kbd>+</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Format of help strings.",
+ "apihelp-paraminfo-param-querymodules": "List of query module names (value of <var>prop</var>, <var>meta</var> or <var>list</var> parameter). Use <kbd>$1modules=query+foo</kbd> instead of <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Get information about the main (top-level) module as well. Use <kbd>$1modules=main</kbd> instead.",
+ "apihelp-paraminfo-param-pagesetmodule": "Get information about the pageset module (providing titles= and friends) as well.",
+ "apihelp-paraminfo-param-formatmodules": "List of format module names (value of <var>format</var> parameter). Use <var>$1modules</var> instead.",
+ "apihelp-paraminfo-example-1": "Show info for <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, and <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+
+ "apihelp-parse-description": "Parses content and returns parser output.\n\nSee the various prop-modules of <kbd>[[Special:ApiHelp/query|action=query]]</kbd> to get information from the current version of a page.\n\nThere are several ways to specify the text to parse:\n# Specify a page or revision, using <var>$1page</var>, <var>$1pageid</var>, or <var>$1oldid</var>.\n# Specify content explicitly, using <var>$1text</var>, <var>$1title</var>, and <var>$1contentmodel</var>.\n# Specify only a summary to parse. <var>$1prop</var> should be given an empty value.",
+ "apihelp-parse-param-title": "Title of page the text belongs to. If omitted, <var>$1contentmodel</var> must be specified, and [[API]] will be used as the title.",
+ "apihelp-parse-param-text": "Text to parse. Use <var>$1title</var> or <var>$1contentmodel</var> to control the content model.",
+ "apihelp-parse-param-summary": "Summary to parse.",
+ "apihelp-parse-param-page": "Parse the content of this page. Cannot be used together with <var>$1text</var> and <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Parse the content of this page. Overrides <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "If <var>$1page</var> or <var>$1pageid</var> is set to a redirect, resolve it.",
+ "apihelp-parse-param-oldid": "Parse the content of this revision. Overrides <var>$1page</var> and <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Which pieces of information to get:\n;text:Gives the parsed text of the wikitext.\n;langlinks:Gives the language links in the parsed wikitext.\n;categories:Gives the categories in the parsed wikitext.\n;categorieshtml:Gives the HTML version of the categories.\n;links:Gives the internal links in the parsed wikitext.\n;templates:Gives the templates in the parsed wikitext.\n;images:Gives the images in the parsed wikitext.\n;externallinks:Gives the external links in the parsed wikitext.\n;sections:Gives the sections in the parsed wikitext.\n;revid:Adds the revision ID of the parsed page.\n;displaytitle:Adds the title of the parsed wikitext.\n;headitems:Gives items to put in the &lt;head&gt; of the page.\n;headhtml:Gives parsed &lt;head&gt; of the page.\n;modules:Gives the ResourceLoader modules used on the page.\n;indicators:Gives the HTML of page status indicators used on the page.\n;iwlinks:Gives interwiki links in the parsed wikitext.\n;wikitext:Gives the original wikitext that was parsed.\n;properties:Gives various properties defined in the parsed wikitext.\n;limitreportdata:Gives the limit report in a structured way. Gives no data, when $1disablepp is set.\n;limitreporthtml:Gives the HTML version of the limit report. Gives no data, when $1disablepp is set.",
+ "apihelp-parse-param-pst": "Do a pre-save transform on the input before parsing it. Only valid when used with text.",
+ "apihelp-parse-param-onlypst": "Do a pre-save transform (PST) on the input, but don't parse it. Returns the same wikitext, after a PST has been applied. Only valid when used with <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Only retrieve the content of this section number or when <kbd>new</kbd> generate a new section.\n\n<kbd>new</kbd> section is only honored when specifying <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "New section title when <var>section</var> is <kbd>new</kbd>.\n\nUnlike page editing, this does not fall back to <var>summary</var> when omitted or empty.",
+ "apihelp-parse-param-disablepp": "Disable the PP Report from the parser output.",
+ "apihelp-parse-param-disableeditsection": "Disable edit section links from the parser output.",
+ "apihelp-parse-param-generatexml": "Generate XML parse tree (requires content model <code>$1</code>).",
+ "apihelp-parse-param-preview": "Parse in preview mode.",
+ "apihelp-parse-param-sectionpreview": "Parse in section preview mode (enables preview mode too).",
+ "apihelp-parse-param-disabletoc": "Disable table of contents in output.",
+ "apihelp-parse-param-contentformat": "Content serialization format used for the input text. Only valid when used with $1text.",
+ "apihelp-parse-param-contentmodel": "Content model of the input text. If omitted, $1title must be specified, and default will be the model of the specified title. Only valid when used with $1text.",
+ "apihelp-parse-example-page": "Parse a page.",
+ "apihelp-parse-example-text": "Parse wikitext.",
+ "apihelp-parse-example-texttitle": "Parse wikitext, specifying the page title.",
+ "apihelp-parse-example-summary": "Parse a summary.",
+
+ "apihelp-patrol-description": "Patrol a page or revision.",
+ "apihelp-patrol-param-rcid": "Recentchanges ID to patrol.",
+ "apihelp-patrol-param-revid": "Revision ID to patrol.",
+ "apihelp-patrol-example-rcid": "Patrol a recent change.",
+ "apihelp-patrol-example-revid": "Patrol a revision.",
+
+ "apihelp-protect-description": "Change the protection level of a page.",
+ "apihelp-protect-param-title": "Title of the page to (un)protect. Cannot be used together with $1pageid.",
+ "apihelp-protect-param-pageid": "ID of the page to (un)protect. Cannot be used together with $1title.",
+ "apihelp-protect-param-protections": "List of protection levels, formatted <kbd>action=level</kbd> (e.g. <kbd>edit=sysop</kbd>).\n\n<strong>Note:</strong> Any actions not listed will have restrictions removed.",
+ "apihelp-protect-param-expiry": "Expiry timestamps. If only one timestamp is set, it'll be used for all protections. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, or <kbd>never</kbd>, for a never-expiring protection.",
+ "apihelp-protect-param-reason": "Reason for (un)protecting.",
+ "apihelp-protect-param-cascade": "Enable cascading protection (i.e. protect pages included in this page). Ignored if all protection levels given do not support cascading.",
+ "apihelp-protect-param-watch": "If set, add the page being (un)protected to the current user's watchlist.",
+ "apihelp-protect-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-protect-example-protect": "Protect a page.",
+ "apihelp-protect-example-unprotect": "Unprotect a page by setting restrictions to <kbd>all</kbd>.",
+ "apihelp-protect-example-unprotect2": "Unprotect a page by setting no restrictions.",
+
+ "apihelp-purge-description": "Purge the cache for the given titles.\n\nRequires a POST request if the user is not logged in.",
+ "apihelp-purge-param-forcelinkupdate": "Update the links tables.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Update the links table, and update the links tables for any page that uses this page as a template.",
+ "apihelp-purge-example-simple": "Purge the <kbd>Main Page</kbd> and the <kbd>API</kbd> page.",
+ "apihelp-purge-example-generator": "Purge the first 10 pages in the main namespace.",
+
+ "apihelp-query-description": "Fetch data from and about MediaWiki.\n\nAll data modifications will first have to use query to acquire a token to prevent abuse from malicious sites.",
+ "apihelp-query-param-prop": "Which properties to get for the queried pages.",
+ "apihelp-query-param-list": "Which lists to get.",
+ "apihelp-query-param-meta": "Which metadata to get.",
+ "apihelp-query-param-indexpageids": "Include an additional pageids section listing all returned page IDs.",
+ "apihelp-query-param-export": "Export the current revisions of all given or generated pages.",
+ "apihelp-query-param-exportnowrap": "Return the export XML without wrapping it in an XML result (same format as [[Special:Export]]). Can only be used with $1export.",
+ "apihelp-query-param-iwurl": "Whether to get the full URL if the title is an interwiki link.",
+ "apihelp-query-param-continue": "When present, formats query-continue as key-value pairs that should simply be merged into the original request. This parameter must be set to an empty string in the initial query.\n\nThis parameter is recommended for all new development, and will be made default in the next API version.",
+ "apihelp-query-param-rawcontinue": "Currently ignored. In the future, <var>$1continue</var> will become the default and this will be needed to receive the raw <samp>query-continue</samp> data.",
+ "apihelp-query-example-revisions": "Fetch [[Special:ApiHelp/query+siteinfo|site info]] and [[Special:ApiHelp/query+revisions|revisions]] of <kbd>Main Page</kbd>.",
+ "apihelp-query-example-allpages": "Fetch revisions of pages beginning with <kbd>API/</kbd>.",
+
+ "apihelp-query+allcategories-description": "Enumerate all categories.",
+ "apihelp-query+allcategories-param-from": "The category to start enumerating from.",
+ "apihelp-query+allcategories-param-to": "The category to stop enumerating at.",
+ "apihelp-query+allcategories-param-prefix": "Search for all category titles that begin with this value.",
+ "apihelp-query+allcategories-param-dir": "Direction to sort in.",
+ "apihelp-query+allcategories-param-min": "Only return categories with at least this many members.",
+ "apihelp-query+allcategories-param-max": "Only return categories with at most this many members.",
+ "apihelp-query+allcategories-param-limit": "How many categories to return.",
+ "apihelp-query+allcategories-param-prop": "Which properties to get:\n;size:Adds number of pages in the category.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+ "apihelp-query+allcategories-example-size": "List categories with information on the number of pages in each.",
+ "apihelp-query+allcategories-example-generator": "Retrieve info about the category page itself for categories beginning <kbd>List</kbd>.",
+
+ "apihelp-query+alldeletedrevisions-description": "List all deleted revisions by a user or in a namespace.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "May only be used with <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Cannot be used with <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+alldeletedrevisions-param-end": "The timestamp to stop enumerating at.",
+ "apihelp-query+alldeletedrevisions-param-from": "Start listing at this title.",
+ "apihelp-query+alldeletedrevisions-param-to": "Stop listing at this title.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Search for all page titles that begin with this value.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+alldeletedrevisions-param-user": "Only list revisions by this user.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Don't list revisions by this user.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Only list pages in this namespace.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Note:</strong> Due to [[mw:Manual:$wgMiserMode|miser mode]], using <var>$1user</var> and <var>$1namespace</var> together may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "When being used as a generator, generate titles rather than revision IDs.",
+ "apihelp-query+alldeletedrevisions-example-user": "List the last 50 deleted contributions by user <kbd>Example<kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "List the first 50 deleted revisions in the main namespace.",
+
+ "apihelp-query+allfileusages-description": "List all file usages, including non-existing.",
+ "apihelp-query+allfileusages-param-from": "The title of the file to start enumerating from.",
+ "apihelp-query+allfileusages-param-to": "The title of the file to stop enumerating at.",
+ "apihelp-query+allfileusages-param-prefix": "Search for all file titles that begin with this value.",
+ "apihelp-query+allfileusages-param-unique": "Only show distinct file titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.",
+ "apihelp-query+allfileusages-param-limit": "How many total items to return.",
+ "apihelp-query+allfileusages-param-dir": "The direction in which to list.",
+ "apihelp-query+allfileusages-example-B": "List file titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "List unique file titles.",
+ "apihelp-query+allfileusages-example-unique-generator": "Gets all file titles, marking the missing ones.",
+ "apihelp-query+allfileusages-example-generator": "Gets pages containing the files.",
+
+ "apihelp-query+allimages-description": "Enumerate all images sequentially.",
+ "apihelp-query+allimages-param-sort": "Property to sort by.",
+ "apihelp-query+allimages-param-dir": "The direction in which to list.",
+ "apihelp-query+allimages-param-from": "The image title to start enumerating from. Can only be used with $1sort=name.",
+ "apihelp-query+allimages-param-to": "The image title to stop enumerating at. Can only be used with $1sort=name.",
+ "apihelp-query+allimages-param-start": "The timestamp to start enumerating from. Can only be used with $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "The timestamp to end enumerating. Can only be used with $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Search for all image titles that begin with this value. Can only be used with $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Limit to images with at least this many bytes.",
+ "apihelp-query+allimages-param-maxsize": "Limit to images with at most this many bytes.",
+ "apihelp-query+allimages-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+ "apihelp-query+allimages-param-user": "Only return files uploaded by this user. Can only be used with $1sort=timestamp. Cannot be used together with $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "How to filter files uploaded by bots. Can only be used with $1sort=timestamp. Cannot be used together with $1user.",
+ "apihelp-query+allimages-param-mime": "What MIME types to search for, e.g. <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "How many images in total to return.",
+ "apihelp-query+allimages-example-B": "Show a list of files starting at the letter <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Show a list of recently uploaded files, similar to [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Show a list of files with MIME type <kbd>image/png</kbd> or <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Show info about 4 files starting at the letter <kbd>T</kbd>.",
+
+ "apihelp-query+alllinks-description": "Enumerate all links that point to a given namespace.",
+ "apihelp-query+alllinks-param-from": "The title of the link to start enumerating from.",
+ "apihelp-query+alllinks-param-to": "The title of the link to stop enumerating at.",
+ "apihelp-query+alllinks-param-prefix": "Search for all linked titles that begin with this value.",
+ "apihelp-query+alllinks-param-unique": "Only show distinct linked titles. Cannot be used with <kbd>$1prop=ids</kbd>.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+alllinks-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the linking page (cannot be used with <var>$1unique</var>).\n;title:Adds the title of the link.",
+ "apihelp-query+alllinks-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+alllinks-param-limit": "How many total items to return.",
+ "apihelp-query+alllinks-param-dir": "The direction in which to list.",
+ "apihelp-query+alllinks-example-B": "List linked titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "List unique linked titles.",
+ "apihelp-query+alllinks-example-unique-generator": "Gets all linked titles, marking the missing ones.",
+ "apihelp-query+alllinks-example-generator": "Gets pages containing the links.",
+
+ "apihelp-query+allmessages-description": "Return messages from this site.",
+ "apihelp-query+allmessages-param-messages": "Which messages to output. <kbd>*</kbd> (default) means all messages.",
+ "apihelp-query+allmessages-param-prop": "Which properties to get.",
+ "apihelp-query+allmessages-param-enableparser": "Set to enable parser, will preprocess the wikitext of message (substitute magic words, handle templates, etc.).",
+ "apihelp-query+allmessages-param-nocontent": "If set, do not include the content of the messages in the output.",
+ "apihelp-query+allmessages-param-includelocal": "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.\nThis lists all MediaWiki: pages, so it will also list those that aren't really messages such as [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Arguments to be substituted into message.",
+ "apihelp-query+allmessages-param-filter": "Return only messages with names that contain this string.",
+ "apihelp-query+allmessages-param-customised": "Return only messages in this customisation state.",
+ "apihelp-query+allmessages-param-lang": "Return messages in this language.",
+ "apihelp-query+allmessages-param-from": "Return messages starting at this message.",
+ "apihelp-query+allmessages-param-to": "Return messages ending at this message.",
+ "apihelp-query+allmessages-param-title": "Page name to use as context when parsing message (for $1enableparser option).",
+ "apihelp-query+allmessages-param-prefix": "Return messages with this prefix.",
+ "apihelp-query+allmessages-example-ipb": "Show messages starting with <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Show messages <kbd>august</kbd> and <kbd>mainpage</kbd> in German.",
+
+ "apihelp-query+allpages-description": "Enumerate all pages sequentially in a given namespace.",
+ "apihelp-query+allpages-param-from": "The page title to start enumerating from.",
+ "apihelp-query+allpages-param-to": "The page title to stop enumerating at.",
+ "apihelp-query+allpages-param-prefix": "Search for all page titles that begin with this value.",
+ "apihelp-query+allpages-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+allpages-param-filterredir": "Which pages to list.",
+ "apihelp-query+allpages-param-minsize": "Limit to pages with at least this many bytes.",
+ "apihelp-query+allpages-param-maxsize": "Limit to pages with at most this many bytes.",
+ "apihelp-query+allpages-param-prtype": "Limit to protected pages only.",
+ "apihelp-query+allpages-param-prlevel": "Filter protections based on protection level (must be used with $1prtype= parameter).",
+ "apihelp-query+allpages-param-prfiltercascade": "Filter protections based on cascadingness (ignored when $1prtype isn't set).",
+ "apihelp-query+allpages-param-limit": "How many total pages to return.",
+ "apihelp-query+allpages-param-dir": "The direction in which to list.",
+ "apihelp-query+allpages-param-filterlanglinks": "Filter based on whether a page has langlinks. Note that this may not consider langlinks added by extensions.",
+ "apihelp-query+allpages-param-prexpiry": "Which protection expiry to filter the page on:\n;indefinite:Get only pages with indefinite protection expiry.\n;definite:Get only pages with a definite (specific) protection expiry.\n;all:Get pages with any protections expiry.",
+ "apihelp-query+allpages-example-B": "Show a list of pages starting at the letter <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Show info about 4 pages starting at the letter <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Show content of first 2 non-redirect pages beginning at <kbd>Re</kbd>.",
+
+ "apihelp-query+allredirects-description": "List all redirects to a namespace.",
+ "apihelp-query+allredirects-param-from": "The title of the redirect to start enumerating from.",
+ "apihelp-query+allredirects-param-to": "The title of the redirect to stop enumerating at.",
+ "apihelp-query+allredirects-param-prefix": "Search for all target pages that begin with this value.",
+ "apihelp-query+allredirects-param-unique": "Only show distinct target pages. Cannot be used with $1prop=ids|fragment|interwiki.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+allredirects-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the redirecting page (cannot be used with <var>$1unique</var>).\n;title:Adds the title of the redirect.\n;fragment:Adds the fragment from the redirect, if any (cannot be used with <var>$1unique</var>).\n;interwiki:Adds the interwiki prefix from the redirect, if any (cannot be used with <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+allredirects-param-limit": "How many total items to return.",
+ "apihelp-query+allredirects-param-dir": "The direction in which to list.",
+ "apihelp-query+allredirects-example-B": "List target pages, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "List unique target pages.",
+ "apihelp-query+allredirects-example-unique-generator": "Gets all target pages, marking the missing ones.",
+ "apihelp-query+allredirects-example-generator": "Gets pages containing the redirects.",
+
+ "apihelp-query+alltransclusions-description": "List all transclusions (pages embedded using &#123;&#123;x&#125;&#125;), including non-existing.",
+ "apihelp-query+alltransclusions-param-from": "The title of the transclusion to start enumerating from.",
+ "apihelp-query+alltransclusions-param-to": "The title of the transclusion to stop enumerating at.",
+ "apihelp-query+alltransclusions-param-prefix": "Search for all transcluded titles that begin with this value.",
+ "apihelp-query+alltransclusions-param-unique": "Only show distinct transcluded titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+ "apihelp-query+alltransclusions-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the transcluding page (cannot be used with $1unique).\n;title:Adds the title of the transclusion.",
+ "apihelp-query+alltransclusions-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+alltransclusions-param-limit": "How many total items to return.",
+ "apihelp-query+alltransclusions-param-dir": "The direction in which to list.",
+ "apihelp-query+alltransclusions-example-B": "List transcluded titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "List unique transcluded titles.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Gets all transcluded titles, marking the missing ones.",
+ "apihelp-query+alltransclusions-example-generator": "Gets pages containing the transclusions.",
+
+ "apihelp-query+allusers-description": "Enumerate all registered users.",
+ "apihelp-query+allusers-param-from": "The user name to start enumerating from.",
+ "apihelp-query+allusers-param-to": "The user name to stop enumerating at.",
+ "apihelp-query+allusers-param-prefix": "Search for all users that begin with this value.",
+ "apihelp-query+allusers-param-dir": "Direction to sort in.",
+ "apihelp-query+allusers-param-group": "Only include users in the given groups.",
+ "apihelp-query+allusers-param-excludegroup": "Exclude users in the given groups.",
+ "apihelp-query+allusers-param-rights": "Only include users with the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+allusers-param-prop": "Which pieces of information to include:\n;blockinfo:Adds the information about a current block on the user.\n;groups:Lists groups that the user is in. This uses more server resources and may return fewer results than the limit.\n;implicitgroups:Lists all the groups the user is automatically in.\n;rights:Lists rights that the user has.\n;editcount:Adds the edit count of the user.\n;registration:Adds the timestamp of when the user registered if available (may be blank).",
+ "apihelp-query+allusers-param-limit": "How many total user names to return.",
+ "apihelp-query+allusers-param-witheditsonly": "Only list users who have made edits.",
+ "apihelp-query+allusers-param-activeusers": "Only list users active in the last $1 {{PLURAL:$1|day|days}}.",
+ "apihelp-query+allusers-example-Y": "List users starting at <kbd>Y</kbd>.",
+
+ "apihelp-query+backlinks-description": "Find all pages that link to the given page.",
+ "apihelp-query+backlinks-param-title": "Title to search. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "Page ID to search. Cannot be used together with <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+backlinks-param-dir": "The direction in which to list.",
+ "apihelp-query+backlinks-param-filterredir": "How to filter for redirects. If set to <kbd>nonredirects</kbd> when <var>$1redirect</var> is enabled, this is only applied to the second level.",
+ "apihelp-query+backlinks-param-limit": "How many total pages to return. If <var>$1redirect</var> is enabled, limit applies to each level separately (which means up to 2 * <var>$1limit</var> results may be returned).",
+ "apihelp-query+backlinks-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+ "apihelp-query+backlinks-example-simple": "Show links to <kbd>Main page<kbd>.",
+ "apihelp-query+backlinks-example-generator": "Get information about pages linking to <kbd>Main page<kbd>.",
+
+ "apihelp-query+blocks-description": "List all blocked users and IP addresses.",
+ "apihelp-query+blocks-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+blocks-param-end": "The timestamp to stop enumerating at.",
+ "apihelp-query+blocks-param-ids": "List of block IDs to list (optional).",
+ "apihelp-query+blocks-param-users": "List of users to search for (optional).",
+ "apihelp-query+blocks-param-ip": "Get all blocks applying to this IP or CIDR range, including range blocks.\nCannot be used together with <var>$3users</var>. CIDR ranges broader than IPv4/$1 or IPv6/$2 are not accepted.",
+ "apihelp-query+blocks-param-limit": "The maximum number of blocks to list.",
+ "apihelp-query+blocks-param-prop": "Which properties to get:\n;id:Adds the ID of the block.\n;user:Adds the username of the blocked user.\n;userid:Adds the user ID of the blocked user.\n;by:Adds the username of the blocking user.\n;byid:Adds the user ID of the blocking user.\n;timestamp:Adds the timestamp of when the block was given.\n;expiry:Adds the timestamp of when the block expires.\n;reason:Adds the reason given for the block.\n;range:Adds the range of IP addresses affected by the block.\n;flags:Tags the ban with (autoblock, anononly, etc.).",
+ "apihelp-query+blocks-param-show": "Show only items that meet these criteria.\nFor example, to see only indefinite blocks on IP addresses, set <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "List blocks.",
+ "apihelp-query+blocks-example-users": "List blocks of users <kbd>Alice</kbd> and <kbd>Bob</kbd>.",
+
+ "apihelp-query+categories-description": "List all categories the pages belong to.",
+ "apihelp-query+categories-param-prop": "Which additional properties to get for each category:\n;sortkey:Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.\n;timestamp:Adds timestamp of when the category was added.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+ "apihelp-query+categories-param-show": "Which kind of categories to show.",
+ "apihelp-query+categories-param-limit": "How many categories to return.",
+ "apihelp-query+categories-param-categories": "Only list these categories. Useful for checking whether a certain page is in a certain category.",
+ "apihelp-query+categories-param-dir": "The direction in which to list.",
+ "apihelp-query+categories-example-simple": "Get a list of categories the page <kbd>Albert Einstein</kbd> belongs to.",
+ "apihelp-query+categories-example-generator": "Get information about all categories used in the page <kbd>Albert Einstein</kbd>.",
+
+ "apihelp-query+categoryinfo-description": "Returns information about the given categories.",
+ "apihelp-query+categoryinfo-example-simple": "Get information about <kbd>Category:Foo</kbd> and <kbd>Category:Bar</kbd>.",
+
+ "apihelp-query+categorymembers-description": "List all pages in a given category.",
+ "apihelp-query+categorymembers-param-title": "Which category to enumerate (required). Must include the <kbd>{{ns:category}}:</kbd> prefix. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "Page ID of the category to enumerate. Cannot be used together with <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;sortkey:Adds the sortkey used for sorting in the category (hexadecimal string).\n;sortkeyprefix:Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey).\n;type:Adds the type that the page has been categorised as (page, subcat or file).\n;timestamp:Adds the timestamp of when the page was included.",
+ "apihelp-query+categorymembers-param-namespace": "Only include pages in these namespaces. Note that <kbd>$1type=subcat</kbd> or <kbd>$1type=file</kbd> may be used instead of <kbd>$1namespace=14</kbd> or <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Which type of category members to include. Ignored when <kbd>$1sort=timestamp</kbd> is set.",
+ "apihelp-query+categorymembers-param-limit": "The maximum number of pages to return.",
+ "apihelp-query+categorymembers-param-sort": "Property to sort by.",
+ "apihelp-query+categorymembers-param-dir": "In which direction to sort.",
+ "apihelp-query+categorymembers-param-start": "Timestamp to start listing from. Can only be used with <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Timestamp to end listing at. Can only be used with <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Sortkey to start listing from, as returned by <kbd>$1prop=sortkey</kbd>. Can only be used with <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey to end listing from, as returned by <kbd>$1prop=sortkey</kbd>. Can only be used with <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Sortkey prefix to start listing from. Can only be used with <kbd>$1sort=sortkey</kbd>. Overrides <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Sortkey prefix to end listing BEFORE (not at, if this value occurs it will not be included!). Can only be used with $1sort=sortkey. Overrides $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "Use $1starthexsortkey instead.",
+ "apihelp-query+categorymembers-param-endsortkey": "Use $1endhexsortkey instead.",
+ "apihelp-query+categorymembers-example-simple": "Get first 10 pages in <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Get page info about first 10 pages in <kbd>Category:Physics</kbd>.",
+
+ "apihelp-query+contributors-description": "Get the list of logged-in contributors and the count of anonymous contributors to a page.",
+ "apihelp-query+contributors-param-group": "Only include users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+contributors-param-excludegroup": "Exclude users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+contributors-param-rights": "Only include users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+contributors-param-excluderights": "Exclude users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+ "apihelp-query+contributors-param-limit": "How many contributors to return.",
+ "apihelp-query+contributors-example-simple": "Show contributors to the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+deletedrevisions-description": "Get deleted revision information.\n\nMay be used in several ways:\n# Get deleted revisions for a set of pages, by setting titles or pageids. Ordered by title and timestamp.\n# Get data about a set of deleted revisions by setting their IDs with revids. Ordered by revision ID.",
+ "apihelp-query+deletedrevisions-param-start": "The timestamp to start enumerating from. Ignored when processing a list of revision IDs.",
+ "apihelp-query+deletedrevisions-param-end": "The timestamp to stop enumerating at. Ignored when processing a list of revision IDs.",
+ "apihelp-query+deletedrevisions-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+deletedrevisions-param-user": "Only list revisions by this user.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Don't list revisions by this user.",
+ "apihelp-query+deletedrevisions-param-limit": "The maximum amount of revisions to list.",
+ "apihelp-query+deletedrevisions-param-prop": "Which properties to get:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the user ID who made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;tags:Tags for the revision.",
+ "apihelp-query+deletedrevisions-example-titles": "List the deleted revisions of the pages <kbd>Main Page</kbd> and <kbd>Talk:Main Page</kbd>, with content.",
+ "apihelp-query+deletedrevisions-example-revids": "List the information for deleted revision <kbd>123456</kbd>.",
+
+ "apihelp-query+deletedrevs-description": "List deleted revisions.\n\nOperates in three modes:\n# List deleted revisions for the given titles, sorted by timestamp.\n# List deleted contributions for the given user, sorted by timestamp (no titles specified).\n# List all deleted revisions in the given namespace, sorted by title and timestamp (no titles specified, $1user not set).\n\nCertain parameters only apply to some modes and are ignored in others.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mode|Modes}}: $2",
+ "apihelp-query+deletedrevs-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+deletedrevs-param-end": "The timestamp to stop enumerating at.",
+ "apihelp-query+deletedrevs-param-from": "Start listing at this title.",
+ "apihelp-query+deletedrevs-param-to": "Stop listing at this title.",
+ "apihelp-query+deletedrevs-param-prefix": "Search for all page titles that begin with this value.",
+ "apihelp-query+deletedrevs-param-unique": "List only one revision for each page.",
+ "apihelp-query+deletedrevs-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+deletedrevs-param-user": "Only list revisions by this user.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Don't list revisions by this user.",
+ "apihelp-query+deletedrevs-param-namespace": "Only list pages in this namespace.",
+ "apihelp-query+deletedrevs-param-limit": "The maximum amount of revisions to list.",
+ "apihelp-query+deletedrevs-param-prop": "Which properties to get:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the user ID whom made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;token:<span class=\"apihelp-deprecated\">Deprecated.</span> Gives the edit token.\n;tags:Tags for the revision.",
+ "apihelp-query+deletedrevs-example-mode1": "List the last deleted revisions of the pages <kbd>Main Page</kbd> and <kbd>Talk:Main Page</kbd>, with content (mode 1).",
+ "apihelp-query+deletedrevs-example-mode2": "List the last 50 deleted contributions by <kbd>Bob</kbd> (mode 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "List the first 50 deleted revisions in the main namespace (mode 3).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "List the first 50 deleted pages in the {{ns:talk}} namespace (mode 3).",
+
+ "apihelp-query+disabled-description": "This query module has been disabled.",
+
+ "apihelp-query+duplicatefiles-description": "List all files that are duplicates of the given files based on hash values.",
+ "apihelp-query+duplicatefiles-param-limit": "How many duplicate files to return.",
+ "apihelp-query+duplicatefiles-param-dir": "The direction in which to list.",
+ "apihelp-query+duplicatefiles-param-localonly": "Look only for files in the local repository.",
+ "apihelp-query+duplicatefiles-example-simple": "Look for duplicates of [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Look for duplicates of all files.",
+
+ "apihelp-query+embeddedin-description": "Find all pages that embed (transclude) the given title.",
+ "apihelp-query+embeddedin-param-title": "Title to search. Cannot be used together with $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "Page ID to search. Cannot be used together with $1title.",
+ "apihelp-query+embeddedin-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+embeddedin-param-dir": "The direction in which to list.",
+ "apihelp-query+embeddedin-param-filterredir": "How to filter for redirects.",
+ "apihelp-query+embeddedin-param-limit": "How many total pages to return.",
+ "apihelp-query+embeddedin-example-simple": "Show pages transcluding <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Get information about pages transcluding <kbd>Template:Stub</kbd>.",
+
+ "apihelp-query+extlinks-description": "Returns all external URLs (not interwikis) from the given pages.",
+ "apihelp-query+extlinks-param-limit": "How many links to return.",
+ "apihelp-query+extlinks-param-protocol": "Protocol of the URL. If empty and <var>$1query</var> is set, the protocol is <kbd>http</kbd>. Leave both this and <var>$1query</var> empty to list all external links.",
+ "apihelp-query+extlinks-param-query": "Search string without protocol. Useful for checking whether a certain page contains a certain external url.",
+ "apihelp-query+extlinks-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+ "apihelp-query+extlinks-example-simple": "Get a list of external links on <kbd>Main Page<kbd>.",
+
+ "apihelp-query+exturlusage-description": "Enumerate pages that contain a given URL.",
+ "apihelp-query+exturlusage-param-prop": "Which pieces of information to include:\n;ids:Adds the ID of page.\n;title:Adds the title and namespace ID of the page.\n;url:Adds the URL used in the page.",
+ "apihelp-query+exturlusage-param-protocol": "Protocol of the URL. If empty and <var>$1query</var> set, the protocol is <kbd>http</kbd>. Leave both this and <var>$1query</var> empty to list all external links.",
+ "apihelp-query+exturlusage-param-query": "Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links.",
+ "apihelp-query+exturlusage-param-namespace": "The page namespaces to enumerate.",
+ "apihelp-query+exturlusage-param-limit": "How many pages to return.",
+ "apihelp-query+exturlusage-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+ "apihelp-query+exturlusage-example-simple": "Show pages linking to <kbd>http://www.mediawiki.org</kbd>.",
+
+ "apihelp-query+filearchive-description": "Enumerate all deleted files sequentially.",
+ "apihelp-query+filearchive-param-from": "The image title to start enumerating from.",
+ "apihelp-query+filearchive-param-to": "The image title to stop enumerating at.",
+ "apihelp-query+filearchive-param-prefix": "Search for all image titles that begin with this value.",
+ "apihelp-query+filearchive-param-limit": "How many images to return in total.",
+ "apihelp-query+filearchive-param-dir": "The direction in which to list.",
+ "apihelp-query+filearchive-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+ "apihelp-query+filearchive-param-prop": "Which image information to get:\n;sha1:Adds SHA-1 hash for the image.\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds user who uploaded the image version.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;description:Adds description the image version.\n;parseddescription:Parse the description on the version.\n;mime:Adds MIME of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;bitdepth:Adds the bit depth of the version.\n;archivename:Adds the filename of the archive version for non-latest versions.",
+ "apihelp-query+filearchive-example-simple": "Show a list of all deleted files.",
+
+ "apihelp-query+filerepoinfo-description": "Return meta information about image repositories configured on the wiki.",
+ "apihelp-query+filerepoinfo-param-prop": "Which repository properties to get (there may be more available on some wikis):\n;apiurl:URL to the repository API - helpful for getting image info from the host.\n;name:The key of the repository - used in e.g. <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> and [[Special:ApiHelp/query+imageinfo|imageinfo]] return values.\n;displayname:The human-readable name of the repository wiki.\n;rooturl:Root URL for image paths.\n;local:Whether that repository is the local one or not.",
+ "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories.",
+
+ "apihelp-query+fileusage-description": "Find all pages that use the given files.",
+ "apihelp-query+fileusage-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+ "apihelp-query+fileusage-param-namespace": "Only include pages in these namespaces.",
+ "apihelp-query+fileusage-param-limit": "How many to return.",
+ "apihelp-query+fileusage-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirect:Only show non-redirects.",
+ "apihelp-query+fileusage-example-simple": "Get a list of pages using [[:File:Example.jpg]].",
+ "apihelp-query+fileusage-example-generator": "Get information about pages using [[:File:Example.jpg]].",
+
+ "apihelp-query+imageinfo-description": "Returns file information and upload history.",
+ "apihelp-query+imageinfo-param-prop": "Which file information to get:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Adds timestamp for the uploaded version.",
+ "apihelp-query+imageinfo-paramvalue-prop-user":"Adds the user who uploaded each file version.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid":"Add the user ID that uploaded each file version.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment":"Comment on the version.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment":"Parse the comment on the version.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle":"Adds the canonical title of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-url":"Gives URL to the file and the description page.",
+ "apihelp-query+imageinfo-paramvalue-prop-size":"Adds the size of the file in bytes and the height, width and page count (if applicable).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions":"Alias for size.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1":"Adds SHA-1 hash for the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime":"Adds MIME type of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime":"Adds MIME type of the image thumbnail (requires url and param $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype":"Adds the media type of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata":"Lists Exif metadata for the version of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata":"Lists file format generic metadata for the version of the file.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata":"Lists formatted metadata combined from multiple sources. Results are HTML formatted.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename":"Adds the filename of the archive version for non-latest versions.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth":"Adds the bit depth of the version.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning":"Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core.",
+ "apihelp-query+imageinfo-param-limit": "How many file revisions to return per file.",
+ "apihelp-query+imageinfo-param-start": "Timestamp to start listing from.",
+ "apihelp-query+imageinfo-param-end": "Timestamp to stop listing at.",
+ "apihelp-query+imageinfo-param-urlwidth": "If $2prop=url is set, a URL to an image scaled to this width will be returned.\nFor performance reasons if this option is used, no more than $1 scaled images will be returned.",
+ "apihelp-query+imageinfo-param-urlheight": "Similar to $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Version of metadata to use. If <kbd>latest</kbd> is specified, use latest version. Defaults to <kbd>1</kbd> for backwards compatibility.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "What language to fetch extmetadata in. This affects both which translation to fetch, if multiple are available, as well as how things like numbers and various values are formatted.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "If translations for extmetadata property are available, fetch all of them.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "If specified and non-empty, only these keys will be returned for $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "A handler specific parameter string. For example, PDFs might use <kbd>page15-100px</kbd>. <var>$1urlwidth</var> must be used and be consistent with <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-localonly": "Look only for files in the local repository.",
+ "apihelp-query+imageinfo-example-simple": "Fetch information about the current version of [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Fetch information about versions of [[:File:Test.jpg]] from 2008 and later.",
+
+ "apihelp-query+images-description": "Returns all files contained on the given pages.",
+ "apihelp-query+images-param-limit": "How many files to return.",
+ "apihelp-query+images-param-images": "Only list these files. Useful for checking whether a certain page has a certain file.",
+ "apihelp-query+images-param-dir": "The direction in which to list.",
+ "apihelp-query+images-example-simple": "Get a list of files used in the [[Main Page]].",
+ "apihelp-query+images-example-generator": "Get information about all files used in the [[Main Page]].",
+
+ "apihelp-query+imageusage-description": "Find all pages that use the given image title.",
+ "apihelp-query+imageusage-param-title": "Title to search. Cannot be used together with $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "Page ID to search. Cannot be used together with $1title.",
+ "apihelp-query+imageusage-param-namespace": "The namespace to enumerate.",
+ "apihelp-query+imageusage-param-dir": "The direction in which to list.",
+ "apihelp-query+imageusage-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
+ "apihelp-query+imageusage-param-limit": "How many total pages to return. If <var>$1redirect</var> is enabled, the limit applies to each level separately (which means up to 2 * <var>$1limit</var> results may be returned).",
+ "apihelp-query+imageusage-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+ "apihelp-query+imageusage-example-simple": "Show pages using [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Get information about pages using [[:File:Albert Einstein Head.jpg]].",
+
+ "apihelp-query+info-description": "Get basic page information.",
+ "apihelp-query+info-param-prop": "Which additional properties to get:",
+ "apihelp-query+info-paramvalue-prop-protection": "List the protection level of each page.",
+ "apihelp-query+info-paramvalue-prop-talkid": "The page ID of the talk page for each non-talk page.",
+ "apihelp-query+info-paramvalue-prop-watched": "List the watched status of each page.",
+ "apihelp-query+info-paramvalue-prop-watchers": "The number of watchers, if allowed.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "The watchlist notification timestamp of each page.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "The page ID of the parent page for each talk page.",
+ "apihelp-query+info-paramvalue-prop-url": "Gives a full URL, an edit URL, and the canonical URL for each page.",
+ "apihelp-query+info-paramvalue-prop-readable": "Whether the user can read this page.",
+ "apihelp-query+info-paramvalue-prop-preload": "Gives the text returned by EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Gives the way the page title is actually displayed.",
+ "apihelp-query+info-param-testactions": "Test whether the current user can perform certain actions on the page.",
+ "apihelp-query+info-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+ "apihelp-query+info-example-simple": "Get information about the page <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Get general and protection information about the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+iwbacklinks-description": "Find all pages that link to the given interwiki link.\n\nCan be used to find all links with a prefix, or all links to a title (with a given prefix). Using neither parameter is effectively \"all interwiki links\".",
+ "apihelp-query+iwbacklinks-param-prefix": "Prefix for the interwiki.",
+ "apihelp-query+iwbacklinks-param-title": "Interwiki link to search for. Must be used with <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "How many total pages to return.",
+ "apihelp-query+iwbacklinks-param-prop": "Which properties to get:\n;iwprefix:Adds the prefix of the interwiki.\n;iwtitle:Adds the title of the interwiki.",
+ "apihelp-query+iwbacklinks-param-dir": "The direction in which to list.",
+ "apihelp-query+iwbacklinks-example-simple": "Get pages linking to [[wikibooks:Test]].",
+ "apihelp-query+iwbacklinks-example-generator": "Get information about pages linking to [[wikibooks:Test]].",
+
+ "apihelp-query+iwlinks-description": "Returns all interwiki links from the given pages.",
+ "apihelp-query+iwlinks-param-url": "Whether to get the full URL (cannot be used with $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.",
+ "apihelp-query+iwlinks-param-limit": "How many interwiki links to return.",
+ "apihelp-query+iwlinks-param-prefix": "Only return interwiki links with this prefix.",
+ "apihelp-query+iwlinks-param-title": "Interwiki link to search for. Must be used with <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "The direction in which to list.",
+ "apihelp-query+iwlinks-example-simple": "Get interwiki links from the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+langbacklinks-description": "Find all pages that link to the given language link.\n\nCan be used to find all links with a language code, or all links to a title (with a given language). Using neither parameter is effectively \"all language links\".\n\nNote that this may not consider language links added by extensions.",
+ "apihelp-query+langbacklinks-param-lang": "Language for the language link.",
+ "apihelp-query+langbacklinks-param-title": "Language link to search for. Must be used with $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "How many total pages to return.",
+ "apihelp-query+langbacklinks-param-prop": "Which properties to get:\n;lllang:Adds the language code of the language link.\n;lltitle:Adds the title of the language link.",
+ "apihelp-query+langbacklinks-param-dir": "The direction in which to list.",
+ "apihelp-query+langbacklinks-example-simple": "Get pages linking to [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Get information about pages linking to [[:fr:Test]].",
+
+ "apihelp-query+langlinks-description": "Returns all interlanguage links from the given pages.",
+ "apihelp-query+langlinks-param-limit": "How many langlinks to return.",
+ "apihelp-query+langlinks-param-url": "Whether to get the full URL (cannot be used with <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.\n;langname:Adds the localised language name (best effort). Use <var>$1inlanguagecode</var> to control the language.\n;autonym:Adds the native language name.",
+ "apihelp-query+langlinks-param-lang": "Only return language links with this language code.",
+ "apihelp-query+langlinks-param-title": "Link to search for. Must be used with <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "The direction in which to list.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Language code for localised language names.",
+ "apihelp-query+langlinks-example-simple": "Get interlanguage links from the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+links-description": "Returns all links from the given pages.",
+ "apihelp-query+links-param-namespace": "Show links in these namespaces only.",
+ "apihelp-query+links-param-limit": "How many links to return.",
+ "apihelp-query+links-param-titles": "Only list links to these titles. Useful for checking whether a certain page links to a certain title.",
+ "apihelp-query+links-param-dir": "The direction in which to list.",
+ "apihelp-query+links-example-simple": "Get links from the page <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-generator": "Get information about the link pages in the page <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Get links from the page <kbd>Main Page</kbd> in the {{ns:user}} and {{ns:template}} namespaces.",
+
+ "apihelp-query+linkshere-description": "Find all pages that link to the given pages.",
+ "apihelp-query+linkshere-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+ "apihelp-query+linkshere-param-namespace": "Only include pages in these namespaces.",
+ "apihelp-query+linkshere-param-limit": "How many to return.",
+ "apihelp-query+linkshere-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirect:Only show non-redirects.",
+ "apihelp-query+linkshere-example-simple": "Get a list of pages linking to the [[Main Page]].",
+ "apihelp-query+linkshere-example-generator": "Get information about pages linking to the [[Main Page]].",
+
+ "apihelp-query+logevents-description": "Get events from logs.",
+ "apihelp-query+logevents-param-prop": "Which properties to get:\n;ids:Adds the ID of the log event.\n;title:Adds the title of the page for the log event.\n;type:Adds the type of log event.\n;user:Adds the user responsible for the log event.\n;userid:Adds the user ID who was responsible for the log event.\n;timestamp:Adds the timestamp for the event.\n;comment:Adds the comment of the event.\n;parsedcomment:Adds the parsed comment of the event.\n;details:Lists additional details about the event.\n;tags:Lists tags for the event.",
+ "apihelp-query+logevents-param-type": "Filter log entries to only this type.",
+ "apihelp-query+logevents-param-action": "Filter log actions to only this action. Overrides <var>$1type</var>. Wildcard actions like <kbd>action/*</kbd> allows to specify any string for the asterisk.",
+ "apihelp-query+logevents-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+logevents-param-end": "The timestamp to end enumerating.",
+ "apihelp-query+logevents-param-user": "Filter entries to those made by the given user.",
+ "apihelp-query+logevents-param-title": "Filter entries to those related to a page.",
+ "apihelp-query+logevents-param-namespace": "Filter entries to those in the given namespace.",
+ "apihelp-query+logevents-param-prefix": "Filter entries that start with this prefix.",
+ "apihelp-query+logevents-param-tag": "Only list event entries tagged with this tag.",
+ "apihelp-query+logevents-param-limit": "How many total event entries to return.",
+ "apihelp-query+logevents-example-simple": "List recent log events.",
+
+ "apihelp-query+pagepropnames-description": "List all page property names in use on the wiki.",
+ "apihelp-query+pagepropnames-param-limit": "The maximum number of names to return.",
+ "apihelp-query+pagepropnames-example-simple": "Get first 10 property names.",
+
+ "apihelp-query+pageprops-description": "Get various properties defined in the page content.",
+ "apihelp-query+pageprops-param-prop": "Only list these props. Useful for checking whether a certain page uses a certain page prop.",
+ "apihelp-query+pageprops-example-simple": "Get properties for <kbd>Category:Foo</kbd>.",
+
+ "apihelp-query+pageswithprop-description": "List all pages using a given page property.",
+ "apihelp-query+pageswithprop-param-propname": "Page prop for which to enumerate pages.",
+ "apihelp-query+pageswithprop-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;value:Adds the value of the page prop.",
+ "apihelp-query+pageswithprop-param-limit": "The maximum number of pages to return.",
+ "apihelp-query+pageswithprop-param-dir": "In which direction to sort.",
+ "apihelp-query+pageswithprop-example-simple": "List the first 10 pages using <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Get page info about first 10 pages using <code>_&#95;NOTOC_&#95;</code>.",
+
+ "apihelp-query+prefixsearch-description": "Perform a prefix search for page titles.",
+ "apihelp-query+prefixsearch-param-search": "Search string.",
+ "apihelp-query+prefixsearch-param-namespace": "Namespaces to search.",
+ "apihelp-query+prefixsearch-param-limit": "Maximum number of results to return.",
+ "apihelp-query+prefixsearch-param-offset": "Number of results to skip.",
+ "apihelp-query+prefixsearch-example-simple": "Search for page titles beginning with <kbd>meaning</kbd>.",
+ "apihelp-query+protectedtitles-description": "List all titles protected from creation.",
+ "apihelp-query+protectedtitles-param-namespace": "Only list titles in these namespaces.",
+ "apihelp-query+protectedtitles-param-level": "Only list titles with these protection levels.",
+ "apihelp-query+protectedtitles-param-limit": "How many total pages to return.",
+ "apihelp-query+protectedtitles-param-start": "Start listing at this protection timestamp.",
+ "apihelp-query+protectedtitles-param-end": "Stop listing at this protection timestamp.",
+ "apihelp-query+protectedtitles-param-prop": "Which properties to get:\n;timestamp:Adds the timestamp of when protection was added.\n;user:Adds the user that added the protection.\n;userid:Adds the user ID that added the protection.\n;comment:Adds the comment for the protection.\n;parsedcomment:Adds the parsed comment for the protection.\n;expiry:Adds the timestamp of when the protection will be lifted.\n;level:Adds the protection level.",
+ "apihelp-query+protectedtitles-example-simple": "List protected titles.",
+ "apihelp-query+protectedtitles-example-generator": "Find links to protected titles in the main namespace.",
+
+ "apihelp-query+querypage-description": "Get a list provided by a QueryPage-based special page.",
+ "apihelp-query+querypage-param-page": "The name of the special page. Note, this is case sensitive.",
+ "apihelp-query+querypage-param-limit": "Number of results to return.",
+ "apihelp-query+querypage-example-ancientpages": "Return results from [[Special:Ancientpages]].",
+
+ "apihelp-query+random-description": "Get a set of random pages.\n\nPages are listed in a fixed sequence, only the starting point is random. This means that if, for example, <samp>Main Page</samp> is the first random page in the list, <samp>List of fictional monkeys</samp> will <em>always</em> be second, <samp>List of people on stamps of Vanuatu</samp> third, etc.\n\nIf the number of pages in the namespace is lower than <var>$1limit</var>, fewer pages will be returned. The same page will not be returned twice.",
+ "apihelp-query+random-param-namespace": "Return pages in these namespaces only.",
+ "apihelp-query+random-param-limit": "Limit how many random pages will be returned.",
+ "apihelp-query+random-param-redirect": "Load a random redirect instead of a random page.",
+ "apihelp-query+random-example-simple": "Return two random pages from the main namespace.",
+ "apihelp-query+random-example-generator": "Return page info about two random pages from the main namespace.",
+
+ "apihelp-query+recentchanges-description": "Enumerate recent changes.",
+ "apihelp-query+recentchanges-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+recentchanges-param-end": "The timestamp to end enumerating.",
+ "apihelp-query+recentchanges-param-namespace": "Filter changes to only these namespaces.",
+ "apihelp-query+recentchanges-param-user": "Only list changes by this user.",
+ "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user.",
+ "apihelp-query+recentchanges-param-tag": "Only list changes tagged with this tag.",
+ "apihelp-query+recentchanges-param-prop": "Include additional pieces of information:\n;user:Adds the user responsible for the edit and tags if they are an IP.\n;userid:Adds the user ID responsible for the edit.\n;comment:Adds the comment for the edit.\n;parsedcomment:Adds the parsed comment for the edit.\n;flags:Adds flags for the edit.\n;timestamp:Adds timestamp of the edit.\n;title:Adds the page title of the edit.\n;ids:Adds the page ID, recent changes ID and the new and old revision ID.\n;sizes:Adds the new and old page length in bytes.\n;redirect:Tags edit if page is a redirect.\n;patrolled:Tags patrollable edits as being patrolled or unpatrolled.\n;loginfo:Adds log information (log ID, log type, etc) to log entries.\n;tags:Lists tags for the entry.\n;sha1:Adds the content checksum for entries associated with a revision.",
+ "apihelp-query+recentchanges-param-token": "Use <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> instead.",
+ "apihelp-query+recentchanges-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "How many total changes to return.",
+ "apihelp-query+recentchanges-param-type": "Which types of changes to show.",
+ "apihelp-query+recentchanges-param-toponly": "Only list changes which are the latest revision.",
+ "apihelp-query+recentchanges-example-simple": "List recent changes.",
+ "apihelp-query+recentchanges-example-generator": "Get page info about recent unpatrolled changes.",
+
+ "apihelp-query+redirects-description": "Returns all redirects to the given pages.",
+ "apihelp-query+redirects-param-prop": "Which properties to get:\n;pageid:Page ID of each redirect.\n;title:Title of each redirect.\n;fragment:Fragment of each redirect, if any.",
+ "apihelp-query+redirects-param-namespace": "Only include pages in these namespaces.",
+ "apihelp-query+redirects-param-limit": "How many redirects to return.",
+ "apihelp-query+redirects-param-show": "Show only items that meet these criteria:\n;fragment:Only show redirects with a fragment.\n;!fragment:Only show redirects without a fragment.",
+ "apihelp-query+redirects-example-simple": "Get a list of redirects to the [[Main Page]].",
+ "apihelp-query+redirects-example-generator": "Get information about all redirects to the [[Main Page]].",
+
+ "apihelp-query+revisions-description": "Get revision information.\n\nMay be used in several ways:\n# Get data about a set of pages (last revision), by setting titles or pageids.\n# Get revisions for one given page, by using titles or pageids with start, end, or limit.\n# Get data about a set of revisions by setting their IDs with revids.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "May only be used with a single page (mode #2).",
+ "apihelp-query+revisions-param-startid": "From which revision ID to start enumeration.",
+ "apihelp-query+revisions-param-endid": "Stop revision enumeration on this revision ID.",
+ "apihelp-query+revisions-param-start": "From which revision timestamp to start enumeration.",
+ "apihelp-query+revisions-param-end": "Enumerate up to this timestamp.",
+ "apihelp-query+revisions-param-user": "Only include revisions made by user.",
+ "apihelp-query+revisions-param-excludeuser": "Exclude revisions made by user.",
+ "apihelp-query+revisions-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+revisions-param-token": "Which tokens to obtain for each revision.",
+ "apihelp-query+revisions-example-content": "Get data with content for the last revision of titles <kbd>API</kbd> and <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Get last 5 revisions of the <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "Get first 5 revisions of the <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Get first 5 revisions of the <kbd>Main Page</kbd> made after 2006-05-01.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Get first 5 revisions of the <kbd>Main Page</kbd> that were not made by anonymous user <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Get first 5 revisions of the <kbd>Main Page</kbd> that were made by the user <kbd>MediaWiki default</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "Which properties to get for each revision:\n;ids:The ID of the revision.\n;flags:Revision flags (minor).\n;timestamp:The timestamp of the revision.\n;user:User that made the revision.\n;userid:User ID of the revision creator.\n;size:Length (bytes) of the revision.\n;sha1:SHA-1 (base 16) of the revision.\n;contentmodel:Content model ID of the revision.\n;comment:Comment by the user for the revision.\n;parsedcomment:Parsed comment by the user for the revision.\n;content:Text of the revision.\n;tags:Tags for the revision.",
+ "apihelp-query+revisions+base-param-limit": "Limit how many revisions will be returned.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Expand templates in revision content (requires $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Generate XML parse tree for revision content (requires $1prop=content).",
+ "apihelp-query+revisions+base-param-parse": "Parse revision content (requires $1prop=content). For performance reasons, if this option is used, $1limit is enforced to 1.",
+ "apihelp-query+revisions+base-param-section": "Only retrieve the content of this section number.",
+ "apihelp-query+revisions+base-param-diffto": "Revision ID to diff each revision to. Use <kbd>prev</kbd>, <kbd>next</kbd> and <kbd>cur</kbd> for the previous, next and current revision respectively.",
+ "apihelp-query+revisions+base-param-difftotext": "Text to diff each revision to. Only diffs a limited number of revisions. Overrides <var>$1diffto</var>. If <var>$1section</var> is set, only that section will be diffed against this text",
+ "apihelp-query+revisions+base-param-contentformat": "Serialization format used for <var>$1difftotext</var> and expected for output of content.",
+
+ "apihelp-query+search-description": "Perform a full text search.",
+ "apihelp-query+search-param-search": "Search for all page titles (or content) that have this value.",
+ "apihelp-query+search-param-namespace": "Search only within these namespaces.",
+ "apihelp-query+search-param-what": "Which type of search to perform.",
+ "apihelp-query+search-param-info": "Which metadata to return.",
+ "apihelp-query+search-param-prop": "Which properties to return:\n;size:Adds the size of the page in bytes.\n;wordcount:Adds the word count of the page.\n;timestamp:Adds the timestamp of when the page was last edited.\n;snippet:Adds a parsed snippet of the page.\n;titlesnippet:Adds a parsed snippet of the page title.\n;redirectsnippet:Adds a parsed snippet of the redirect title.\n;redirecttitle:Adds the title of the matching redirect.\n;sectionsnippet:Adds a parsed snippet of the matching section title.\n;sectiontitle:Adds the title of the matching section.\n;score:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
+ "apihelp-query+search-param-limit": "How many total pages to return.",
+ "apihelp-query+search-param-interwiki": "Include interwiki results in the search, if available.",
+ "apihelp-query+search-param-backend": "Which search backend to use, if not the default.",
+ "apihelp-query+search-example-simple": "Search for <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-text": "Search texts for <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "Ger page info about the pages returned for a search for <kbd>meaning</kbd>.",
+
+ "apihelp-query+siteinfo-description": "Return general information about the site.",
+ "apihelp-query+siteinfo-param-prop": "Which information to get:\n;general:Overall system information.\n;namespaces:List of registered namespaces and their canonical names.\n;namespacealiases:List of registered namespace aliases.\n;specialpagealiases:List of special page aliases.\n;magicwords:List of magic words and their aliases.\n;statistics:Returns site statistics.\n;interwikimap:Returns interwiki map (optionally filtered, optionally localised by using <var>$1inlanguagecode</var>).\n;dbrepllag:Returns database server with the highest replication lag.\n;usergroups:Returns user groups and the associated permissions.\n;libraries:Returns libraries installed on the wiki.\n;extensions:Returns extensions installed on the wiki.\n;fileextensions:Returns list of file extensions allowed to be uploaded.\n;rightsinfo:Returns wiki rights (license) information if available.\n;restrictions:Returns information on available restriction (protection) types.\n;languages:Returns a list of languages MediaWiki supports (optionally localised by using <var>$1inlanguagecode</var>).\n;skins:Returns a list of all enabled skins (optionally localised by using <var>$1inlanguagecode</var>, otherwise in the content language).\n;extensiontags:Returns a list of parser extension tags.\n;functionhooks:Returns a list of parser function hooks.\n;showhooks:Returns a list of all subscribed hooks (contents of <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).\n;variables:Returns a list of variable IDs.\n;protocols:Returns a list of protocols that are allowed in external links.\n;defaultoptions:Returns the default values for user preferences.",
+ "apihelp-query+siteinfo-param-filteriw": "Return only local or only nonlocal entries of the interwiki map.",
+ "apihelp-query+siteinfo-param-showalldb": "List all database servers, not just the one lagging the most.",
+ "apihelp-query+siteinfo-param-numberingroup": "Lists the number of users in user groups.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Language code for localised language names (best effort) and skin names.",
+ "apihelp-query+siteinfo-example-simple": "Fetch site information.",
+ "apihelp-query+siteinfo-example-interwiki": "Fetch a list of local interwiki prefixes.",
+ "apihelp-query+siteinfo-example-replag": "Check the current replication lag.",
+
+ "apihelp-query+stashimageinfo-description": "Returns file information for stashed files.",
+ "apihelp-query+stashimageinfo-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias for $1filekey, for backward compatibility.",
+ "apihelp-query+stashimageinfo-example-simple": "Returns information for a stashed file.",
+ "apihelp-query+stashimageinfo-example-params": "Returns thumbnails for two stashed files.",
+
+ "apihelp-query+tags-description": "List change tags.",
+ "apihelp-query+tags-param-limit": "The maximum number of tags to list.",
+ "apihelp-query+tags-param-prop": "Which properties to get:\n;name:Adds name of tag.\n;displayname:Adds system message for the tag.\n;description:Adds description of the tag.\n;hitcount:Adds the number of revisions and log entries that have this tag.\n;defined:Indicate whether the tag is defined.\n;source:Gets the sources of the tag, which may include <samp>extension</samp> for extension-defined tags and <samp>manual</samp> for tags that may be applied manually by users.\n;active:Whether the tag is still being applied.",
+ "apihelp-query+tags-example-simple": "List available tags.",
+
+ "apihelp-query+templates-description": "Returns all pages transcluded on the given pages.",
+ "apihelp-query+templates-param-namespace": "Show templates in this namespaces only.",
+ "apihelp-query+templates-param-limit": "How many templates to return.",
+ "apihelp-query+templates-param-templates": "Only list these templates. Useful for checking whether a certain page uses a certain template.",
+ "apihelp-query+templates-param-dir": "The direction in which to list.",
+ "apihelp-query+templates-example-simple": "Get the templates used on the page <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-generator": "Get information about the template pages used on <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Get pages in the {{ns:user}} and {{ns:template}} namespaces that are transcluded on the page <kbd>Main Page</kbd>.",
+
+ "apihelp-query+tokens-description": "Gets tokens for data-modifying actions.",
+ "apihelp-query+tokens-param-type": "Types of token to request.",
+ "apihelp-query+tokens-example-simple": "Retrieve a csrf token (the default).",
+ "apihelp-query+tokens-example-types": "Retrieve a watch token and a patrol token.",
+
+ "apihelp-query+transcludedin-description": "Find all pages that transclude the given pages.",
+ "apihelp-query+transcludedin-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+ "apihelp-query+transcludedin-param-namespace": "Only include pages in these namespaces.",
+ "apihelp-query+transcludedin-param-limit": "How many to return.",
+ "apihelp-query+transcludedin-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirect:Only show non-redirects.",
+ "apihelp-query+transcludedin-example-simple": "Get a list of pages transcluding <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Get information about pages transcluding <kbd>Main Page</kbd>.",
+
+ "apihelp-query+usercontribs-description": "Get all edits by a user.",
+ "apihelp-query+usercontribs-param-limit": "The maximum number of contributions to return.",
+ "apihelp-query+usercontribs-param-start": "The start timestamp to return from.",
+ "apihelp-query+usercontribs-param-end": "The end timestamp to return to.",
+ "apihelp-query+usercontribs-param-user": "The users to retrieve contributions for.",
+ "apihelp-query+usercontribs-param-userprefix": "Retrieve contributions for all users whose names begin with this value. Overrides $1user.",
+ "apihelp-query+usercontribs-param-namespace": "Only list contributions in these namespaces.",
+ "apihelp-query+usercontribs-param-prop": "Include additional pieces of information:\n;ids:Adds the page ID and revision ID.\n;title:Adds the title and namespace ID of the page.\n;timestamp:Adds the timestamp of the edit.\n;comment:Adds the comment of the edit.\n;parsedcomment:Adds the parsed comment of the edit.\n;size:Adds the new size of the edit.\n;sizediff:Adds the size delta of the edit against its parent.\n;flags:Adds flags of the edit.\n;patrolled:Tags patrolled edits.\n;tags:Lists tags for the edit.",
+ "apihelp-query+usercontribs-param-show": "Show only items that meet these criteria, e.g. non minor edits only: <kbd>$2show=!minor</kbd>.\n\nIf <kbd>$2show=patrolled</kbd> or <kbd>$2show=!patrolled</kbd> is set, revisions older than <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|second|seconds}}) won't be shown.",
+ "apihelp-query+usercontribs-param-tag": "Only list revisions tagged with this tag.",
+ "apihelp-query+usercontribs-param-toponly": "Only list changes which are the latest revision.",
+ "apihelp-query+usercontribs-example-user": "Show contributions of user <kbd>Example</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Show contributions from all IP addresses with prefix <kbd>192.0.2.</kbd>.",
+
+ "apihelp-query+userinfo-description": "Get information about the current user.",
+ "apihelp-query+userinfo-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the current user is blocked, by whom, and for what reason.\n;hasmsg:Adds a tag <samp>message</samp> if the current user has pending messages.\n;groups:Lists all the groups the current user belongs to.\n;implicitgroups:Lists all the groups the current user is automatically a member of.\n;rights:Lists all the rights the current user has.\n;changeablegroups:Lists the groups the current user can add to and remove from.\n;options:Lists all preferences the current user has set.\n;preferencestoken:<span class=\"apihelp-deprecated\">Deprecated.</span> Get a token to change current user's preferences.\n;editcount:Adds the current user's edit count.\n;ratelimits:Lists all rate limits applying to the current user.\n;realname:Adds the user's real name.\n;email:Adds the user's email address and email authentication date.\n;acceptlang:Echoes the <code>Accept-Language</code> header sent by the client in a structured format.\n;registrationdate:Adds the user's registration date.\n;unreadcount:Adds the count of unread pages on the user's watchlist (maximum $1; returns <samp>$2</samp> if more).",
+ "apihelp-query+userinfo-example-simple": "Get information about the current user.",
+ "apihelp-query+userinfo-example-data": "Get additional information about the current user.",
+
+ "apihelp-query+users-description": "Get information about a list of users.",
+ "apihelp-query+users-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the user is blocked, by whom, and for what reason.\n;groups:Lists all the groups each user belongs to.\n;implicitgroups:Lists all the groups a user is automatically a member of.\n;rights:Lists all the rights each user has.\n;editcount:Adds the user's edit count.\n;registration:Adds the user's registration timestamp.\n;emailable:Tags if the user can and wants to receive email through [[Special:Emailuser]].\n;gender:Tags the gender of the user. Returns \"male\", \"female\", or \"unknown\".",
+ "apihelp-query+users-param-users": "A list of users to obtain information for.",
+ "apihelp-query+users-param-token": "Use <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> instead.",
+ "apihelp-query+users-example-simple": "Return information for user <kbd>Example</kbd>.",
+
+ "apihelp-query+watchlist-description": "Get recent changes to pages in the current user's watchlist.",
+ "apihelp-query+watchlist-param-allrev": "Include multiple revisions of the same page within given timeframe.",
+ "apihelp-query+watchlist-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+watchlist-param-end": "The timestamp to end enumerating.",
+ "apihelp-query+watchlist-param-namespace": "Filter changes to only the given namespaces.",
+ "apihelp-query+watchlist-param-user": "Only list changes by this user.",
+ "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user.",
+ "apihelp-query+watchlist-param-limit": "How many total results to return per request.",
+ "apihelp-query+watchlist-param-prop": "Which additional items to get:\n;ids:Adds revision IDs and page IDs.\n;title:Adds title of the page.\n;flags:Adds flags for the edit.\n;user:Adds the user who made the edit.\n;userid:Adds user ID of whom made the edit.\n;comment:Adds comment of the edit.\n;parsedcomment:Adds parsed comment of the edit.\n;timestamp:Adds timestamp of the edit.\n;patrol:Tags edits that are patrolled.\n;sizes:Adds the old and new lengths of the page.\n;notificationtimestamp:Adds timestamp of when the user was last notified about the edit.\n;loginfo:Adds log information where appropriate.",
+ "apihelp-query+watchlist-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Which types of changes to show:\n;edit:Regular page edits.\n;external:External changes.\n;new:Page creations.\n;log:Log entries.",
+ "apihelp-query+watchlist-param-owner": "Used along with $1token to access a different user's watchlist.",
+ "apihelp-query+watchlist-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+ "apihelp-query+watchlist-example-simple": "List the top revision for recently changed pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-props": "Fetch additional information about the top revision for recently changed pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-allrev": "Fetch information about all recent changes to pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-generator": "Fetch page info for recently changed pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-generator-rev": "Fetch revision info for recent changes to pages on the current user's watchlist.",
+ "apihelp-query+watchlist-example-wlowner": "List the top revision for recently changed pages on the watchlist of user <kbd>Example</kbd>.",
+
+ "apihelp-query+watchlistraw-description": "Get all pages on the current user's watchlist.",
+ "apihelp-query+watchlistraw-param-namespace": "Only list pages in the given namespaces.",
+ "apihelp-query+watchlistraw-param-limit": "How many total results to return per request.",
+ "apihelp-query+watchlistraw-param-prop": "Which additional properties to get:\n;changed:Adds timestamp of when the user was last notified about the edit.",
+ "apihelp-query+watchlistraw-param-show": "Only list items that meet these criteria.",
+ "apihelp-query+watchlistraw-param-owner": "Used along with $1token to access a different user's watchlist.",
+ "apihelp-query+watchlistraw-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+ "apihelp-query+watchlistraw-example-simple": "List pages on the current user's watchlist.",
+ "apihelp-query+watchlistraw-example-generator": "Fetch page info for pages on the current user's watchlist.",
+
+ "apihelp-revisiondelete-description": "Delete and undelete revisions.",
+ "apihelp-revisiondelete-param-type": "Type of revision deletion being performed.",
+ "apihelp-revisiondelete-param-target": "Page title for the revision deletion, if required for the type.",
+ "apihelp-revisiondelete-param-ids": "Identifiers for the revisions to be deleted.",
+ "apihelp-revisiondelete-param-hide": "What to hide for each revision.",
+ "apihelp-revisiondelete-param-show": "What to unhide for each revision.",
+ "apihelp-revisiondelete-param-suppress": "Whether to suppress data from administrators as well as others.",
+ "apihelp-revisiondelete-param-reason": "Reason for the deletion or undeletion.",
+ "apihelp-revisiondelete-example-revision": "Hide content for revision <kbd>12345</kbd> on the page <kbd>Main Page</kbd>.",
+ "apihelp-revisiondelete-example-log": "Hide all data on log entry <kbd>67890</kbd> with the reason <kbd>BLP violation</kbd>.",
+
+ "apihelp-rollback-description": "Undo the last edit to the page.\n\nIf the last user who edited the page made multiple edits in a row, they will all be rolled back.",
+ "apihelp-rollback-param-title": "Title of the page to roll back. Cannot be used together with <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "Page ID of the page to roll back. Cannot be used together with <var>$1title</var>.",
+ "apihelp-rollback-param-user": "Name of the user whose edits are to be rolled back.",
+ "apihelp-rollback-param-summary": "Custom edit summary. If empty, default summary will be used.",
+ "apihelp-rollback-param-markbot": "Mark the reverted edits and the revert as bot edits.",
+ "apihelp-rollback-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-rollback-example-simple": "Roll back the last edits to page <kbd>Main Page</kbd> by user <kbd>Example</kbd>.",
+ "apihelp-rollback-example-summary": "Roll back the last edits to page <kbd>Main Page</kbd> by IP user <kbd>192.0.2.5</kbd> with summary <kbd>Reverting vandalism</kbd>, and mark those edits and the revert as bot edits.",
+
+ "apihelp-rsd-description": "Export an RSD (Really Simple Discovery) schema.",
+ "apihelp-rsd-example-simple": "Export the RSD schema.",
+
+ "apihelp-setnotificationtimestamp-description": "Update the notification timestamp for watched pages.\n\nThis affects the highlighting of changed pages in the watchlist and history, and the sending of email when the \"Email me when a page on my watchlist is changed\" preference is enabled.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Work on all watched pages.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Timestamp to which to set the notification timestamp.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Revision to set the notification timestamp to (one page only).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Revision to set the notification timestamp newer than (one page only).",
+ "apihelp-setnotificationtimestamp-example-all": "Reset the notification status for the entire watchlist.",
+ "apihelp-setnotificationtimestamp-example-page": "Reset the notification status for <kbd>Main page</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Set the notification timestamp for <kbd>Main page</kbd> so all edits since 1 January 2012 are unviewed.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the <kbd>{{ns:user}}</kbd> namespace.",
+
+ "apihelp-tag-description": "Add or remove change tags from individual revisions or log entries.",
+ "apihelp-tag-param-rcid": "One or more recent changes IDs from which to add or remove the tag.",
+ "apihelp-tag-param-revid": "One or more revision IDs from which to add or remove the tag.",
+ "apihelp-tag-param-logid": "One or more log entry IDs from which to add or remove the tag.",
+ "apihelp-tag-param-add": "Tags to add. Only manually defined tags can be added.",
+ "apihelp-tag-param-remove": "Tags to remove. Only tags that are either manually defined or completely undefined can be removed.",
+ "apihelp-tag-param-reason": "Reason for the change.",
+ "apihelp-tag-example-rev": "Add the <kbd>vandalism</kbd> tag from revision ID 123 without specifying a reason",
+ "apihelp-tag-example-log": "Remove the <kbd>spam</kbd> tag from log entry ID 123 with the reason <kbd>Wrongly applied</kbd>",
+
+ "apihelp-tokens-description": "Get tokens for data-modifying actions.\n\nThis module is deprecated in favor of [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Types of token to request.",
+ "apihelp-tokens-example-edit": "Retrieve an edit token (the default).",
+ "apihelp-tokens-example-emailmove": "Retrieve an email token and a move token.",
+
+ "apihelp-unblock-description": "Unblock a user.",
+ "apihelp-unblock-param-id": "ID of the block to unblock (obtained through <kbd>list=blocks</kbd>). Cannot be used together with <var>$1user</var>.",
+ "apihelp-unblock-param-user": "Username, IP address or IP range to unblock. Cannot be used together with <var>$1id</var>.",
+ "apihelp-unblock-param-reason": "Reason for unblock.",
+ "apihelp-unblock-example-id": "Unblock block ID #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Unblock user <kbd>Bob</kbd> with reason <kbd>Sorry Bob</kbd>.",
+
+ "apihelp-undelete-description": "Restore revisions of a deleted page.\n\nA list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], and a list of deleted file IDs can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Title of the page to restore.",
+ "apihelp-undelete-param-reason": "Reason for restoring.",
+ "apihelp-undelete-param-timestamps": "Timestamps of the revisions to restore. If both <var>$1timestamps</var> and <var>$1fileids</var> are empty, all will be restored.",
+ "apihelp-undelete-param-fileids": "IDs of the file revisions to restore. If both <var>$1timestamps</var> and <var>$1fileids</var> are empty, all will be restored.",
+ "apihelp-undelete-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-undelete-example-page": "Undelete page <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Undelete two revisions of page <kbd>Main Page</kbd>.",
+
+ "apihelp-upload-description": "Upload a file, or get the status of pending uploads.\n\nSeveral methods are available:\n* Upload file contents directly, using the <var>$1file</var> parameter.\n* Upload the file in pieces, using the <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var> parameters.* Have the MediaWiki server fetch a file from a URL, using the <var>$1url</var> parameter.\n* Complete an earlier upload that failed due to warnings, using the <var>$1filekey</var> parameter.\nNote that the HTTP POST must be done as a file upload (i.e. using <code>multipart/form-data</code>) when sending the <var>$1file</var>.",
+ "apihelp-upload-param-filename": "Target filename.",
+ "apihelp-upload-param-comment": "Upload comment. Also used as the initial page text for new files if <var>$1text</var> is not specified.",
+ "apihelp-upload-param-text": "Initial page text for new files.",
+ "apihelp-upload-param-watch": "Watch the page.",
+ "apihelp-upload-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
+ "apihelp-upload-param-ignorewarnings": "Ignore any warnings.",
+ "apihelp-upload-param-file": "File contents.",
+ "apihelp-upload-param-url": "URL to fetch the file from.",
+ "apihelp-upload-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+ "apihelp-upload-param-sessionkey": "Same as $1filekey, maintained for backward compatibility.",
+ "apihelp-upload-param-stash": "If set, the server will stash the file temporarily instead of adding it to the repository.",
+ "apihelp-upload-param-filesize": "Filesize of entire upload.",
+ "apihelp-upload-param-offset": "Offset of chunk in bytes.",
+ "apihelp-upload-param-chunk": "Chunk contents.",
+ "apihelp-upload-param-async": "Make potentially large file operations asynchronous when possible.",
+ "apihelp-upload-param-asyncdownload": "Make fetching a URL asynchronous.",
+ "apihelp-upload-param-leavemessage": "If asyncdownload is used, leave a message on the user talk page if finished.",
+ "apihelp-upload-param-statuskey": "Fetch the upload status for this file key (upload by URL).",
+ "apihelp-upload-param-checkstatus": "Only fetch the upload status for the given file key.",
+ "apihelp-upload-example-url": "Upload from a URL.",
+ "apihelp-upload-example-filekey": "Complete an upload that failed due to warnings.",
+
+ "apihelp-userrights-description": "Change a user's group membership.",
+ "apihelp-userrights-param-user": "User name.",
+ "apihelp-userrights-param-userid": "User ID.",
+ "apihelp-userrights-param-add": "Add the user to these groups.",
+ "apihelp-userrights-param-remove": "Remove the user from these groups.",
+ "apihelp-userrights-param-reason": "Reason for the change.",
+ "apihelp-userrights-example-user": "Add user <kbd>FooBot</kbd> to group <kbd>bot</kbd>, and remove from groups <kbd>sysop</kbd> and <kbd>bureaucrat</kbd>.",
+ "apihelp-userrights-example-userid": "Add the user with ID <kbd>123</kbd> to group <kbd>bot</kbd>, and remove from groups <kbd>sysop</kbd> and <kbd>bureaucrat</kbd>.",
+
+ "apihelp-watch-description": "Add or remove pages from the current user's watchlist.",
+ "apihelp-watch-param-title": "The page to (un)watch. Use <var>$1titles</var> instead.",
+ "apihelp-watch-param-unwatch": "If set the page will be unwatched rather than watched.",
+ "apihelp-watch-example-watch": "Watch the page <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-unwatch": "Unwatch the page <kbd>Main Page</kbd>.",
+ "apihelp-watch-example-generator": "Watch the first few pages in the main namespace.",
+
+ "apihelp-format-example-generic": "Format the query result in the $1 format.",
+ "apihelp-dbg-description": "Output data in PHP's <code>var_export()</code> format.",
+ "apihelp-dbgfm-description": "Output data in PHP's <code>var_export()</code> format (pretty-print in HTML).",
+ "apihelp-dump-description": "Output data in PHP's <code>var_dump()</code> format.",
+ "apihelp-dumpfm-description": "Output data in PHP's <code>var_dump()</code> format (pretty-print in HTML).",
+ "apihelp-json-description": "Output data in JSON format.",
+ "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-jsonfm-description": "Output data in JSON format (pretty-print in HTML).",
+ "apihelp-none-description": "Output nothing.",
+ "apihelp-php-description": "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-phpfm-description": "Output data in serialized PHP format (pretty-print in HTML).",
+ "apihelp-rawfm-description": "Output data with the debugging elements in JSON format (pretty-print in HTML).",
+ "apihelp-txt-description": "Output data in PHP's <code>print_r()</code> format.",
+ "apihelp-txtfm-description": "Output data in PHP's <code>print_r()</code> format (pretty-print in HTML).",
+ "apihelp-wddx-description": "Output data in WDDX format.",
+ "apihelp-wddxfm-description": "Output data in WDDX format (pretty-print in HTML).",
+ "apihelp-xml-description": "Output data in XML format.",
+ "apihelp-xml-param-xslt": "If specified, adds the named page as an XSL stylesheet. The value must be a title in the {{ns:mediawiki}} namespace ending in <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "If specified, adds an XML namespace.",
+ "apihelp-xmlfm-description": "Output data in XML format (pretty-print in HTML).",
+ "apihelp-yaml-description": "Output data in YAML format.",
+ "apihelp-yamlfm-description": "Output data in YAML format (pretty-print in HTML).",
+
+ "api-format-title": "MediaWiki API result",
+ "api-format-prettyprint-header": "This is the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the <var>format</var> parameter to change the output format. To see the non-HTML representation of the $1 format, set <kbd>format=$2</kbd>.\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
+
+ "api-orm-param-props": "Fields to query.",
+ "api-orm-param-limit": "Max amount of rows to return.",
+
+ "api-pageset-param-titles": "A list of titles to work on.",
+ "api-pageset-param-pageids": "A list of page IDs to work on.",
+ "api-pageset-param-revids": "A list of revision IDs to work on.",
+ "api-pageset-param-generator": "Get the list of pages to work on by executing the specified query module.\n\n<strong>Note:</strong> Generator parameter names must be prefixed with a \"g\", see examples.",
+ "api-pageset-param-redirects-generator": "Automatically resolve redirects in <var>$1titles</var>, <var>$1pageids</var>, and <var>$1revids</var>, and in pages returned by <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Automatically resolve redirects in <var>$1titles</var>, <var>$1pageids</var>, and <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Convert titles to other variants if necessary. Only works if the wiki's content language supports variant conversion. Languages that support variant conversion include $1.",
+
+ "api-help-title": "MediaWiki API help",
+ "api-help-lead": "This is an auto-generated MediaWiki API documentation page.\n\nDocumentation and examples: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Main module",
+ "api-help-fallback-description": "$1",
+ "api-help-fallback-parameter": "$1",
+ "api-help-fallback-example": "$1",
+ "api-help-flags": "",
+ "api-help-flag-deprecated": "This module is deprecated.",
+ "api-help-flag-internal": "<strong>This module is internal or unstable.</strong> Its operation may change without notice.",
+ "api-help-flag-readrights": "This module requires read rights.",
+ "api-help-flag-writerights": "This module requires write rights.",
+ "api-help-flag-mustbeposted": "This module only accepts POST requests.",
+ "api-help-flag-generator": "This module can be used as a generator.",
+ "api-help-help-urls": "",
+ "api-help-parameters": "{{PLURAL:$1|Parameter|Parameters}}:",
+ "api-help-param-deprecated": "Deprecated.",
+ "api-help-param-required": "This parameter is required.",
+ "api-help-param-list": "{{PLURAL:$1|1=One value|2=Values (separate with <kbd>{{!}}</kbd>)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Must be empty|Can be empty, or $2}}",
+ "api-help-param-limit": "No more than $1 allowed.",
+ "api-help-param-limit2": "No more than $1 ($2 for bots) allowed.",
+ "api-help-param-integer-min": "The {{PLURAL:$1|1=value|2=values}} must be no less than $2.",
+ "api-help-param-integer-max": "The {{PLURAL:$1|1=value|2=values}} must be no greater than $3.",
+ "api-help-param-integer-minmax": "The {{PLURAL:$1|1=value|2=values}} must be between $2 and $3.",
+ "api-help-param-upload": "Must be posted as a file upload using multipart/form-data.",
+ "api-help-param-multi-separate": "Separate values with <kbd>|</kbd>.",
+ "api-help-param-multi-max": "Maximum number of values is {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} for bots).",
+ "api-help-param-default": "Default: $1",
+ "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(empty)</span>",
+ "api-help-param-token": "A \"$1\" token retrieved from [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "For compatibility, the token used in the web UI is also accepted.",
+ "api-help-param-disabled-in-miser-mode": "Disabled due to [[mw:Manual:$wgMiserMode|miser mode]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Note:</strong> Due to [[mw:Manual:$wgMiserMode|miser mode]], using this may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned.",
+ "api-help-param-direction": "In which direction to enumerate:\n;newer:List oldest first. Note: $1start has to be before $1end.\n;older:List newest first (default). Note: $1start has to be later than $1end.",
+ "api-help-param-continue": "When more results are available, use this to continue.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(no description)</span>",
+ "api-help-examples": "{{PLURAL:$1|Example|Examples}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permission|Permissions}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Granted to}}: $2",
+ "api-help-right-apihighlimits": "Use higher limits in API queries (slow queries: $1; fast queries: $2). The limits for slow queries also apply to multivalue parameters.",
+
+ "api-credits-header": "Credits",
+ "api-credits": "API developers:\n* Roan Kattouw (lead developer Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creator, lead developer Sep 2006–Sep 2007)\n* Brad Jorsch (lead developer 2013–present)\n\nPlease send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org\nor file a bug report at https://phabricator.wikimedia.org/."
+}
diff --git a/includes/api/i18n/es.json b/includes/api/i18n/es.json
new file mode 100644
index 00000000..d0974772
--- /dev/null
+++ b/includes/api/i18n/es.json
@@ -0,0 +1,206 @@
+{
+ "@metadata": {
+ "authors": [
+ "Macofe",
+ "Effy",
+ "Alan",
+ "Fitoschido",
+ "JasterTDC",
+ "Edslov"
+ ]
+ },
+ "apihelp-main-param-action": "Qué acción se realizará.",
+ "apihelp-main-param-format": "El formato de la salida.",
+ "apihelp-main-param-curtimestamp": "Incluir la marca de tiempo actual en el resultado.",
+ "apihelp-block-description": "Bloquear usuario",
+ "apihelp-block-param-user": "El nombre de usuario, dirección IP o intervalo de IP que quieres bloquear.",
+ "apihelp-block-param-reason": "Razón para el bloqueo.",
+ "apihelp-block-param-anononly": "Bloquear solo usuarios anónimos (es decir, desactivar ediciones anónimas de esta dirección IP).",
+ "apihelp-block-param-nocreate": "Prevenir la creación de cuentas.",
+ "apihelp-block-param-reblock": "Si la cuenta ya está bloqueada, sobrescribir el bloqueo existente.",
+ "apihelp-block-param-watchuser": "Vigilar las páginas de usuario y de discusión del usuario o de la dirección IP.",
+ "apihelp-compare-param-fromtitle": "Primer título para comparar",
+ "apihelp-createaccount-description": "Crear una nueva cuenta de usuario.",
+ "apihelp-createaccount-param-name": "Nombre de usuario.",
+ "apihelp-createaccount-param-email": "Dirección de correo electrónico del usuario (opcional).",
+ "apihelp-createaccount-param-realname": "Nombre verdadero del usuario (opcional).",
+ "apihelp-createaccount-example-pass": "Crear usuario <kbd>testuser</kbd> con la contraseña <kbd>test123</kbd>.",
+ "apihelp-delete-description": "Borrar una página.",
+ "apihelp-delete-param-watch": "Añadir esta página a la lista de seguimiento del usuario actual.",
+ "apihelp-delete-param-unwatch": "Quitar la página de la lista de seguimiento del usuario actual.",
+ "apihelp-delete-example-simple": "Borrar la <kbd>Página principal</kbd>",
+ "apihelp-disabled-description": "Se desactivó este módulo.",
+ "apihelp-edit-description": "Crear y editar páginas.",
+ "apihelp-edit-param-sectiontitle": "El título de una sección nueva.",
+ "apihelp-edit-param-text": "Contenido de la página.",
+ "apihelp-edit-param-minor": "Edición menor.",
+ "apihelp-edit-param-notminor": "Edición no menor.",
+ "apihelp-edit-param-bot": "Marcar esta edición como de bot.",
+ "apihelp-edit-param-createonly": "No editar la página si ya existe.",
+ "apihelp-edit-param-nocreate": "Producir un error si la página no existe.",
+ "apihelp-edit-param-watch": "Añadir la página a la lista de seguimiento del usuario actual.",
+ "apihelp-edit-param-unwatch": "Quitar la página de la lista de seguimiento del usuario actual.",
+ "apihelp-edit-example-edit": "Editar una página",
+ "apihelp-edit-example-prepend": "Anteponer <kbd>_&#95;NOTOC_&#95;</kbd> a una página.",
+ "apihelp-edit-example-undo": "Deshacer intervalo de revisiones 13579-13585 con resumen automático",
+ "apihelp-emailuser-description": "Enviar un mensaje de correo electrónico a un usuario.",
+ "apihelp-emailuser-param-target": "Cuenta de usuario destinatario.",
+ "apihelp-emailuser-param-subject": "Encabezamiento de asunto.",
+ "apihelp-emailuser-param-text": "Cuerpo del mensaje.",
+ "apihelp-emailuser-param-ccme": "Enviarme una copia de este mensaje.",
+ "apihelp-expandtemplates-param-title": "Título de la página.",
+ "apihelp-expandtemplates-param-text": "Sintaxis wiki que se convertirá.",
+ "apihelp-feedcontributions-description": "Devuelve el canal de contribuciones de un usuario.",
+ "apihelp-feedcontributions-param-feedformat": "El formato del canal.",
+ "apihelp-feedcontributions-param-year": "A partir del año (y anteriores).",
+ "apihelp-feedcontributions-param-month": "A partir del mes (y anteriores).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrar las contribuciones que tienen estas etiquetas.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostrar solo las contribuciones borradas.",
+ "apihelp-feedcontributions-param-toponly": "Mostrar solo ediciones que son últimas revisiones.",
+ "apihelp-feedcontributions-param-newonly": "Mostrar solo ediciones que son creaciones de páginas.",
+ "apihelp-feedcontributions-param-showsizediff": "Mostrar la diferencia de tamaño entre revisiones.",
+ "apihelp-feedcontributions-example-simple": "Devolver las contribuciones del usuario <kbd>Ejemplo</kbd>.",
+ "apihelp-feedrecentchanges-description": "Devuelve un canal de cambios recientes.",
+ "apihelp-feedrecentchanges-param-feedformat": "El formato del canal.",
+ "apihelp-feedrecentchanges-param-invert": "Todos los espacios de nombres menos el que está seleccionado.",
+ "apihelp-feedrecentchanges-param-associated": "Incluir el espacio de nombres asociado (discusión o principal).",
+ "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados que devolver.",
+ "apihelp-feedrecentchanges-param-from": "Mostrar los cambios realizados a partir de entonces.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ocultar cambios menores.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ocultar los cambios realizados por bots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ocultar los cambios realizados por usuarios anónimos.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ocultar los cambios realizados por usuarios registrados.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar los cambios patrullados.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ocultar los cambios realizados por el usuario actual.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por etiquetas.",
+ "apihelp-feedrecentchanges-param-target": "Mostrar solo los cambios en las páginas enlazadas en esta.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Mostrar los cambios en páginas enlazadas con la página seleccionada.",
+ "apihelp-feedrecentchanges-example-simple": "Mostrar los cambios recientes",
+ "apihelp-feedrecentchanges-example-30days": "Mostrar los cambios recientes limitados a 30 días",
+ "apihelp-feedwatchlist-description": "Devuelve el canal de una lista de seguimiento.",
+ "apihelp-feedwatchlist-param-feedformat": "El formato del canal.",
+ "apihelp-feedwatchlist-param-linktosections": "Enlazar directamente a las secciones cambiadas de ser posible.",
+ "apihelp-feedwatchlist-example-default": "Mostrar el canal de la lista de seguimiento.",
+ "apihelp-feedwatchlist-example-all6hrs": "Mostrar todos los cambios en páginas vigiladas en las últimas 6 horas.",
+ "apihelp-filerevert-description": "Revertir el archivo a una versión anterior.",
+ "apihelp-filerevert-param-filename": "Nombre de archivo final, sin el prefijo Archivo:",
+ "apihelp-filerevert-param-comment": "Comentario de carga.",
+ "apihelp-help-description": "Mostrar la ayuda para los módulos especificados.",
+ "apihelp-help-example-main": "Ayuda del módulo principal",
+ "apihelp-help-example-recursive": "Toda la ayuda en una página",
+ "apihelp-help-example-help": "Ayuda del módulo de ayuda en sí",
+ "apihelp-imagerotate-description": "Girar una o más imágenes.",
+ "apihelp-imagerotate-param-rotation": "Grados que rotar una imagen en sentido horario.",
+ "apihelp-imagerotate-example-simple": "Rotar <kbd>File:Ejemplo.png</kbd> <kbd>90</kbd> grados.",
+ "apihelp-imagerotate-example-generator": "Rotar todas las imágenes en la <kbd>Categoría:Girar</kbd> <kbd>180</kbd> grados.",
+ "apihelp-import-param-summary": "Resumen de importación.",
+ "apihelp-import-param-xml": "Se cargó el archivo XML.",
+ "apihelp-import-param-rootpage": "Importar como subpágina de esta página.",
+ "apihelp-login-param-name": "Nombre de usuario.",
+ "apihelp-login-param-password": "Contraseña.",
+ "apihelp-login-param-domain": "Dominio (opcional).",
+ "apihelp-login-example-login": "Acceder",
+ "apihelp-logout-description": "Salir y vaciar los datos de la sesión.",
+ "apihelp-logout-example-logout": "Cerrar la sesión del usuario actual",
+ "apihelp-managetags-param-reason": "Un motivo opcional para crear, eliminar, activar o desactivar la etiqueta.",
+ "apihelp-managetags-example-delete": "Eliminar la etiqueta <kbd>vandlaismo</kbd> con el motivo <kbd>mal deletreado</kbd>",
+ "apihelp-move-description": "Mover una página.",
+ "apihelp-move-param-reason": "Motivo del cambio de nombre.",
+ "apihelp-move-param-movetalk": "Renombrar la página de discusión si existe.",
+ "apihelp-move-param-movesubpages": "Renombrar las subpáginas si procede.",
+ "apihelp-move-param-noredirect": "No crear una redirección.",
+ "apihelp-move-param-watch": "Añadir la página y su redirección a la lista de seguimiento del usuario actual.",
+ "apihelp-move-param-unwatch": "Eliminar la página y la redirección de la lista de seguimiento del usuario.",
+ "apihelp-move-param-ignorewarnings": "Ignorar cualquier aviso.",
+ "apihelp-opensearch-description": "Buscar en el wiki mediante el protocolo OpenSearch.",
+ "apihelp-opensearch-param-search": "Buscar cadena.",
+ "apihelp-options-example-reset": "Restablecer todas las preferencias",
+ "apihelp-paraminfo-description": "Obtener información acerca de los módulos de la API.",
+ "apihelp-paraminfo-param-helpformat": "Formato de las cadenas de ayuda.",
+ "apihelp-patrol-example-rcid": "Patrullar un cambio reciente",
+ "apihelp-patrol-example-revid": "Patrullar una revisión",
+ "apihelp-protect-param-reason": "Motivo de la (des)protección.",
+ "apihelp-protect-example-protect": "Proteger una página",
+ "apihelp-query+allcategories-description": "Enumerar todas las categorías.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Solo puede usarse con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "No puede ser utilizado con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-from": "Empezar a listar en este título.",
+ "apihelp-query+alldeletedrevisions-param-to": "Terminar de listar en este título.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Buscar todos los títulos de las páginas que comiencen con este valor.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Listar solo las revisiones con esta etiqueta.",
+ "apihelp-query+alldeletedrevisions-param-user": "Listar solo las revisiones de este usuario.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "No listar las revisiones de este usuario.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Listar solo las páginas en este espacio de nombres.",
+ "apihelp-query+alldeletedrevisions-example-user": "Listar las últimas 50 contribuciones borradas del usuario <kbd>Ejemplo<kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Listar las primeras 50 revisiones borradas en el espacio de nombres principal.",
+ "apihelp-query+allfileusages-description": "Listar todos los usos del archivo, incluyendo los que no existen.",
+ "apihelp-query+allimages-param-sha1": "Suma SHA1 de la imagen. Invalida $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "Suma SHA1 de la imagen en base 36 (usada en MediaWiki).",
+ "apihelp-query+alllinks-example-unique-generator": "Obtiene todos los títulos enlazados, marcando los que falten.",
+ "apihelp-query+allpages-example-B": "Mostrar una lista de páginas que empiecen con la letra <kbd>B</kbd>.",
+ "apihelp-query+allusers-param-activeusers": "Solo listar usuarios activos en {{PLURAL:$1|el último día|los $1 últimos días}}.",
+ "apihelp-query+backlinks-param-pageid": "Identificador de página que buscar. No puede usarse junto con <var>$1title</var>",
+ "apihelp-query+backlinks-example-simple": "Mostrar enlaces a la <kbd>Portada<kbd>.",
+ "apihelp-query+blocks-example-simple": "Listar bloques.",
+ "apihelp-query+categoryinfo-example-simple": "Obtener información acerca de <kbd>Category:Foo</kbd> y <kbd>Category:Bar</kbd>",
+ "apihelp-query+categorymembers-example-generator": "Obtener información sobre las primeras 10 páginas de la <kbd>Categoría:Física</kbd>",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Listar las primeras 50 páginas en el espacio de nombres {{ns:talk}} (modo 3).",
+ "apihelp-query+duplicatefiles-example-simple": "Buscar duplicados de [[:File:Alber Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Buscar duplicados en todos los ficheros.",
+ "apihelp-query+exturlusage-example-simple": "Mostrar páginas que enlacen con <kbd>http://www.mediawiki.org</kbd>.",
+ "apihelp-query+filerepoinfo-example-simple": "Obtener información acerca de los repositorios de archivos.",
+ "apihelp-query+images-description": "Devuelve todos los archivos contenidos en las páginas dadas.",
+ "apihelp-query+images-example-simple": "Obtener una lista de los archivos usados en la [[Main Page|Portada]].",
+ "apihelp-query+imageusage-example-simple": "Mostrar las páginas que usan [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Obtener información sobre las páginas que empleen [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-example-protection": "Obtén información general y protección acerca de la página <kb>Página principal</kbd>.",
+ "apihelp-query+iwbacklinks-example-simple": "Obtener las páginas enlazadas a [[wikibooks:Test]]",
+ "apihelp-query+langbacklinks-example-simple": "Obtener las páginas enlazadas a [[:fr:Test]]",
+ "apihelp-query+linkshere-example-generator": "Obtener información acerca de las páginas enlazadas a la [[Main Page|Portada]].",
+ "apihelp-query+protectedtitles-example-generator": "Encuentra enlaces a títulos protegidos en el espacio de nombres principal.",
+ "apihelp-query+recentchanges-example-simple": "Lista de cambios recientes.",
+ "apihelp-query+redirects-example-simple": "Mostrar una lista de las redirecciones a la [[Main Page|Portada]]",
+ "apihelp-query+revisions-example-last5": "Mostrar las últimas 5 revisiones de la <kbd>Portada</kbd>.",
+ "apihelp-query+search-param-info": "Qué metadatos devolver.",
+ "apihelp-query+search-example-text": "Buscar <kbd>meaning</kbd> en los textos.",
+ "apihelp-query+siteinfo-example-simple": "Obtener información del sitio.",
+ "apihelp-query+usercontribs-example-user": "Mostrar contribuciones del usuario <kbd>Ejemplo</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Mostrar las contribuciones de todas las direcciones IP con el prefijo <kbd>192.0.2.</kbd>.",
+ "apihelp-query+userinfo-description": "Obtener información sobre el usuario actual.",
+ "apihelp-query+watchlist-param-excludeuser": "No listar cambios de este usuario.",
+ "apihelp-query+watchlistraw-param-show": "Sólo listar los elementos que cumplen estos criterios.",
+ "apihelp-query+watchlistraw-example-simple": "Listar las páginas de la lista de seguimiento del usuario actual.",
+ "apihelp-unblock-example-user": "Desbloquear al usuario <kbd>Bob</kbd> con el motivo <kbd>Lo siento, Bob</kbd>",
+ "apihelp-undelete-example-revisions": "Restaurar dos revisiones de la página <kbd>Portada</kbd>.",
+ "apihelp-upload-param-watch": "Vigilar la página.",
+ "apihelp-upload-param-ignorewarnings": "Ignorar las advertencias.",
+ "apihelp-upload-example-url": "Subir desde una URL.",
+ "apihelp-userrights-param-user": "Nombre de usuario.",
+ "apihelp-userrights-param-add": "Agregar el usuario a estos grupos.",
+ "apihelp-userrights-param-remove": "Eliminar el usuario de estos grupos.",
+ "apihelp-userrights-param-reason": "Motivo del cambio.",
+ "apihelp-userrights-example-user": "Agregar al usuario <kbd>FooBot</kbd> al grupo <kbd>bot</kbd> y eliminarlo de los grupos <kbd>sysop</kbd> y <kbd>burócrata</kbd>.",
+ "apihelp-watch-example-watch": "Vigilar la página <kbd>Portada</kbd>.",
+ "apihelp-watch-example-unwatch": "Dejar de vigilar la <kbd>Portada</kbd>.",
+ "api-help-main-header": "Módulo principal",
+ "api-help-flag-deprecated": "Este módulo está en desuso.",
+ "api-help-flag-readrights": "Este módulo requiere permisos de lectura.",
+ "api-help-flag-writerights": "Este módulo requiere permisos de escritura.",
+ "api-help-flag-mustbeposted": "Este módulo solo acepta solicitudes POST.",
+ "api-help-flag-generator": "Este módulo puede utilizarse como un generador.",
+ "api-help-parameters": "{{PLURAL:$1|Parámetro|Parámetros}}:",
+ "api-help-param-deprecated": "En desuso.",
+ "api-help-param-required": "Este parámetro es obligatorio.",
+ "api-help-param-list": "{{PLURAL:$1|1=Un valor|2=Valores (separados por <kbd>{{!}}</kbd>)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe estar vacío|Puede estar vacío, o $2}}",
+ "api-help-param-multi-separate": "Separar los valores con <kbd>|</kbd>.",
+ "api-help-param-default": "Predeterminado: $1",
+ "api-help-param-default-empty": "Predeterminado: <span class=\"apihelp-empty\">(vacío)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(sin descripción)</span>",
+ "api-help-examples": "{{PLURAL:$1|Ejemplo|Ejemplos}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Concedido a|Concedidos a}}: $2",
+ "api-credits-header": "Créditos",
+ "api-credits": "Desarrolladores de la API:\n* Roan Kattouw (desarrollador principal sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creador, desarrollador principal sep 2006–sep 2007)\n* Brad Jorsch (desarrollador principal 2013–actualidad)\n\nEnvía comentarios, sugerencias y preguntas a mediawiki-api@lists.wikimedia.org\no reporta un error en https://phabricator.wikimedia.org/."
+}
diff --git a/includes/api/i18n/eu.json b/includes/api/i18n/eu.json
new file mode 100644
index 00000000..574bd2fe
--- /dev/null
+++ b/includes/api/i18n/eu.json
@@ -0,0 +1,57 @@
+{
+ "@metadata": {
+ "authors": [
+ "Subi"
+ ]
+ },
+ "apihelp-block-description": "Blokeatu erabiltzaile bat.",
+ "apihelp-createaccount-description": "Erabiltzaile kontu berria sortu.",
+ "apihelp-createaccount-param-email": "Erabiltzailearen helbide elektronikoa (aukerakoa).",
+ "apihelp-createaccount-param-realname": "Erabiltzailearen benetako izena (aukerakoa).",
+ "apihelp-delete-description": "Orrialde bat ezabatu.",
+ "apihelp-edit-description": "Orrialdeak sortu eta aldatu.",
+ "apihelp-edit-param-minor": "Aldaketa txikia.",
+ "apihelp-edit-example-edit": "Orrialde bat aldatu",
+ "apihelp-expandtemplates-param-title": "Orrialdearen izenburua.",
+ "apihelp-feedcontributions-param-year": "Urtetik aurrera (eta lehenagotik)",
+ "apihelp-feedcontributions-param-month": "Hilabetetik aurrera (eta lehenagotik)",
+ "apihelp-feedrecentchanges-param-hideminor": "Ezkutatu aldaketa txikiak.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ezkutatu botek egindako aldaketak.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ezkutatu erabiltzaile anonimoek egindako aldaketak.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ezkutatu izena emandako erabiltzaileek egindako aldaketak.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ezkutatu zainpeko aldaketak.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ezkutatu zuk egindako aldaketak.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Iragazi etiketen arabera.",
+ "apihelp-feedrecentchanges-example-simple": "Erakutsi aldaketa berriak",
+ "apihelp-feedrecentchanges-example-30days": "Erakutsi aldaketa berriak 30 egunez",
+ "apihelp-imagerotate-description": "Irudi bat edo gehiago biratu.",
+ "apihelp-login-param-password": "Pasahitza.",
+ "apihelp-login-param-domain": "Domeinua (hautazkoa).",
+ "apihelp-login-example-login": "Saioa hasi",
+ "apihelp-move-description": "Orrialde bat mugitu",
+ "apihelp-protect-example-protect": "Orrialde bat babestu",
+ "apihelp-query+allusers-param-witheditsonly": "Bakarrik zerrendatu aldaketak egin dituzten erabiltzaileak.",
+ "apihelp-query+allusers-param-activeusers": "Bakarrik zerrendatu azken {{PLURAL:$1|eguneko|$1 egunetako}} erabiltzaile aktiboak.",
+ "apihelp-query+imageinfo-param-urlheight": "$1urlwidth-en antzekoa.",
+ "apihelp-query+imageusage-example-simple": "Erakutsi [[:File:Albert Einstein Head.jpg]] darabilten orriak",
+ "apihelp-query+prefixsearch-param-search": "Bilatu katea.",
+ "apihelp-query+protectedtitles-example-simple": "Zerrendatu babestutako izenburuak",
+ "apihelp-query+recentchanges-example-simple": "Zerrendatu aldaketa berriak.",
+ "apihelp-upload-example-url": "Igo URL batetik.",
+ "apihelp-userrights-param-reason": "Aldaketarako arrazoia.",
+ "api-help-main-header": "Modulu nagusia",
+ "api-help-flag-deprecated": "Modulu hau zaharkitua dago.",
+ "api-help-parameters": "{{PLURAL:$1|Parametroa|Parametroak}}:",
+ "api-help-param-deprecated": "Zaharkitua.",
+ "api-help-param-required": "Parametro hau beharrezkoa da.",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Hutsik egon behar du|Hutsik egon daiteke edo $2}}",
+ "api-help-param-limit": "Ez dira $1 baino gehiago onartzen.",
+ "api-help-param-limit2": "Ez dira $1 ($2 botentzat) baino gehiago onartzen.",
+ "api-help-param-default": "Lehenetsia: $1",
+ "api-help-param-default-empty": "Lehenetsia: <span class=\"apihelp-empty\">(hutsik)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(deskribapenik gabe)</span>",
+ "api-help-examples": "{{PLURAL:$1|Adibidea|Adibideak}}:",
+ "api-help-permissions": "{{PLURAL:$1|Baimena|Baimenak}}:",
+ "api-credits-header": "Kredituak",
+ "api-credits": "API garatzaileak:\n* Roan Kattouw (garatzaile nagusia, 2007ko ira.–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (sortzailea, garatzaile nagusia, 2006ko ira.–2007ko ira.)\n* Brad Jorsch (garatzaile nagusia 2013–gaur egun)\n\nMesedez, bidal iezazkiguzu zure iruzkinak, iradokizunak eta galderak mediawiki-api@lists.wikimedia.org helbidera edo bete ezazu errore-txostena https://phabricator.wikimedia.org/ helbidean."
+}
diff --git a/includes/api/i18n/fa.json b/includes/api/i18n/fa.json
new file mode 100644
index 00000000..d792fd6e
--- /dev/null
+++ b/includes/api/i18n/fa.json
@@ -0,0 +1,240 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alirezaaa",
+ "Arash.pt",
+ "Fatemi127",
+ "Reza1615",
+ "KhabarNegar",
+ "Sahehco",
+ "Signal89",
+ "Mjbmr"
+ ]
+ },
+ "apihelp-main-param-action": "کدام عملیات را انجام دهد.",
+ "apihelp-main-param-format": "فرمت خروجی.",
+ "apihelp-main-param-curtimestamp": "برچسب زمان کنونی را در نتیجه قرار دهید.",
+ "apihelp-block-description": "بستن کاربر",
+ "apihelp-block-param-user": "نام کاربری، آدرس آی پی یا محدوده آی پی موردنظر شما برای بستن.",
+ "apihelp-block-param-reason": "دلیل بسته‌شدن",
+ "apihelp-block-param-anononly": "فقط بستن کاربران ناشناس (مانند غیرفعال‌کردن ویرایش‌های ناشناس این آی‌پی).",
+ "apihelp-block-param-nocreate": "جلوگیری از ایجاد حساب.",
+ "apihelp-block-param-autoblock": "به طور خودکار آخرین نشانی آی‌پی استفاده‌شده، و هر نشانی پس از آن که سعی می‌کند از آن داخل شود را ببند.",
+ "apihelp-block-param-noemail": "از کاربر در برابر ارسال ایمیل از طریق ویکی جلوگیری شود. (نیازمند دسترسی <code>blockemail</code> است).",
+ "apihelp-block-param-hidename": "نام کاربری را از سیاههٔ بستن پنهان کن. (نیازمند دسترسی <code>hideuser</code> است).",
+ "apihelp-block-param-allowusertalk": "به کاربر برای ویرایش صفحه بحث‌شان اجازه دهید (بسته به <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "اگر کاربر پیش از این مسدود شده‌است، مسدود موجود را بازنویسی کن.",
+ "apihelp-block-param-watchuser": "صفحه‌های کاربر و بحث کاربر نشانی آی‌پی یا کاربر را پی‌گیری کنید.",
+ "apihelp-block-example-ip-simple": "آی‌پی <kbd>۱۹۲٫۰٫۲٫۵</kbd> را برای سه روز همراه دلیل <kbd>برخورد اول</kbd> ببندید",
+ "apihelp-clearhasmsg-description": "پرچم <code>hasmsg</code> را برای کاربر جاری پاک کن.",
+ "apihelp-clearhasmsg-example-1": "پاک‌کردن پرچم <code>hasmsg</code> برای کاربر جاری",
+ "apihelp-compare-description": "تفاوت بین ۲ صفحه را بیابید.\n\nشما باید یک شماره بازبینی، یک عنوان صفحه، یا یک شناسه صفحه برای هر دو «از» و «به» مشخص کنید.",
+ "apihelp-compare-param-fromtitle": "عنوان اول برای مقایسه.",
+ "apihelp-compare-param-fromid": "شناسه صفحه اول برای مقایسه.",
+ "apihelp-compare-param-fromrev": "نسخه اول برای مقایسه.",
+ "apihelp-compare-param-totitle": "عنوان دوم برای مقایسه.",
+ "apihelp-compare-param-toid": "شناسه صفحه دوم برای مقایسه.",
+ "apihelp-compare-param-torev": "نسخه دوم برای مقایسه.",
+ "apihelp-compare-example-1": "ایجاد تفاوت بین نسخه 1 و 2",
+ "apihelp-createaccount-description": "ایجاد حساب کاربری",
+ "apihelp-createaccount-param-name": "نام کاربری.",
+ "apihelp-createaccount-param-password": "رمز عبور (نادیده گرفته می‌شود اگر <var>$1mailpassword</var> تنظیم شده‌باشد).",
+ "apihelp-createaccount-param-domain": "دامنه برای احراز هویت خارجی (اختیاری).",
+ "apihelp-createaccount-param-email": "آدرس ایمیل کاربر (اختیاری)",
+ "apihelp-createaccount-param-realname": "نام واقعی کاربر (اختیاری).",
+ "apihelp-createaccount-param-mailpassword": "اگر به هر مقداری تنظیم شود، یک رمز عبور تصادفی به کاربر ایمیل خواهد شد.",
+ "apihelp-createaccount-param-reason": "دلیل اختیاری برای ایجاد حساب کاربری جهت قرارگرفتن در سیاهه‌ها.",
+ "apihelp-createaccount-example-pass": "ایجاد کاربر <kbd>testuser</kbd> همراه رمز عبور <kbd>test123</kbd>",
+ "apihelp-createaccount-example-mail": "ایجاد کاربر <kbd>testmailuser</kbd> و ارسال یک رمز عبور تصادفی به ای‌میل.",
+ "apihelp-delete-description": "حذف صفحه",
+ "apihelp-delete-param-title": "عنوان صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار <var>$1pageid</var> استفاده شود.",
+ "apihelp-delete-param-pageid": "شناسه صفحه‌ای که قصد حذفش را دارید. نمی‌تواند در کنار <var>$1title</var> استفاده شود.",
+ "apihelp-delete-param-reason": "دلیل برای حذف. اگر تنظیم نشود، یک دلیل خودکار ساخته‌شده استفاده می‌شود.",
+ "apihelp-delete-param-watch": "افزودن صفحه به فهرست پی‌گیری کاربر فعلی",
+ "apihelp-delete-param-unwatch": "صفحه را از پی‌گیری‌تان حذف کنید.",
+ "apihelp-delete-example-simple": "حذف <kbd>صفحهٔ اصلی</kbd>",
+ "apihelp-delete-example-reason": "حذف <kbd>صفحهٔ اصلی</kbd> همراه دلیل <kbd>آماده‌سازی برای انتقال</kbd>",
+ "apihelp-disabled-description": "این پودمان غیرفعال شده است.",
+ "apihelp-edit-description": "ایجاد و ویرایش صفحه",
+ "apihelp-edit-param-title": "عنوان صفحه‌ای که قصد ویرایشش را دارید. نمی‌تواند در کنار <var>$1pageid</var> استفاده شود.",
+ "apihelp-edit-param-pageid": "شناسه صفحهٔ صفحه‌ای که می‌خواهید ویرایشش کنید. نمی‌تواند در کنار <var>$1title</var> استفاده شود.",
+ "apihelp-edit-param-section": "شماره بخش. <kbd>۰</kbd> برای بخش بالا، «<kbd>تازه</kbd>» برای یک بخش تازه.",
+ "apihelp-edit-param-sectiontitle": "عنوان برای بخش جدید.",
+ "apihelp-edit-param-text": "محتوای صفحه.",
+ "apihelp-edit-param-summary": "خلاصه را ویرایش کنید. همچنین عنوان بخش را زمانی که $1section=تازه و $1sectiontitle تنظیم نشده‌است.",
+ "apihelp-edit-param-minor": "ویرایش جزئی.",
+ "apihelp-edit-param-notminor": "ویرایش غیر جزئی.",
+ "apihelp-edit-param-bot": "علامت زدن این ویرایش به عنوان ویرایش ربات.",
+ "apihelp-edit-param-createonly": "اگر صفحه موجود بود، ویرایش نکن.",
+ "apihelp-edit-param-nocreate": "رها کردن خطا در صورتی که صفحه وجود ندارد.",
+ "apihelp-edit-param-watch": "افزودن صفحه به فهرست پی‌گیری شما",
+ "apihelp-edit-param-unwatch": "حذف صفحه از فهرست پی‌گیری شما",
+ "apihelp-edit-param-prependtext": "این متن را به ابتدای صفحه اضافه کنید. $1text را لغو می‌کند.",
+ "apihelp-edit-param-undo": "این بازبینی را برگردانید. $1text، $1prependtext و $1appendtext را باطل می‌کند.",
+ "apihelp-edit-param-undoafter": "همه بازبینی‌ها را از $1undo تا این یکی برگردانید. اگر تنظیم نشد، فقط یک بازبینی را برگردانید.",
+ "apihelp-edit-param-redirect": "اصلاح خودکار تغییرمسیرها.",
+ "apihelp-edit-example-edit": "ویرایش صفحه",
+ "apihelp-emailuser-description": "ایمیل به کاربر",
+ "apihelp-emailuser-param-target": "کاربر برای ارسال ایمیل به وی.",
+ "apihelp-emailuser-param-subject": "موضوع هدر.",
+ "apihelp-emailuser-param-text": "متن رایانه.",
+ "apihelp-emailuser-param-ccme": "ارسال یک نسخه از رایانه به شما.",
+ "apihelp-expandtemplates-description": "گسترش همه الگوها در ویکی نبشته",
+ "apihelp-expandtemplates-param-title": "عنوان صفحه",
+ "apihelp-expandtemplates-param-text": "تبدیل برای ویکی‌متن.",
+ "apihelp-feedcontributions-description": "خوراک مشارکت‌های یک کاربر را برمی‌گرداند.",
+ "apihelp-feedcontributions-param-feedformat": "فرمت خوراک.",
+ "apihelp-feedcontributions-param-namespace": "فیلتر شدن مشارکتها براساس فضای نام.",
+ "apihelp-feedcontributions-param-year": "از سال (و پیش از آن).",
+ "apihelp-feedcontributions-param-month": "از ماه (و پیش از آن).",
+ "apihelp-feedcontributions-param-tagfilter": "فیلتر کردن مشارکتها براساس این برچسب‌ها.",
+ "apihelp-feedcontributions-param-deletedonly": "فقط مشارکت‌های حذف شده نمایش داده شود.",
+ "apihelp-feedcontributions-param-toponly": "فقط ویرایش‌هایی که آخرین نسخه‌اند نمایش داده شود.",
+ "apihelp-feedcontributions-param-newonly": "فقط نمایش ویرایش‌هایی که تولید‌های صفحه هستند.",
+ "apihelp-feedcontributions-param-showsizediff": "نمایش تفاوت حجم تغییرات بین نسخه‌ها.",
+ "apihelp-feedcontributions-example-simple": "مشارکت‌های [[کاربر:نمونه]] را برگردان",
+ "apihelp-feedrecentchanges-description": "خوراک تغییرات اخیر را برمی‌گرداند.",
+ "apihelp-feedrecentchanges-param-feedformat": "فرمت خوراک.",
+ "apihelp-feedrecentchanges-param-namespace": "فضای نام برای محدودکردن نتایج به.",
+ "apihelp-feedrecentchanges-param-invert": "همهٔ فضاهای نام به جز انتخاب‌شده‌ها.",
+ "apihelp-feedrecentchanges-param-associated": "فضای نام مرتبط (بحث یا اصلی) را شامل می‌شود.",
+ "apihelp-feedrecentchanges-param-days": "روز برای محدود کردن نتایج.",
+ "apihelp-feedrecentchanges-param-limit": "حداکثر تعداد نتایج خروجی.",
+ "apihelp-feedrecentchanges-param-from": "نمایش تغییرات پس از آن.",
+ "apihelp-feedrecentchanges-param-hideminor": "پنهان کردن تغییرات جزئی.",
+ "apihelp-feedrecentchanges-param-hidebots": "پنهان کردن تغییرات انجام شده توسط ربات‌ها.",
+ "apihelp-feedrecentchanges-param-hideanons": "پنهان کردن ویرایش‌های کاربران ناشناس.",
+ "apihelp-feedrecentchanges-param-hideliu": "پنهان کردن ویرایش‌های کاربران ثبت‌نام کرده.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "پنهان کردن ویرایش گشت‌زن‌ها.",
+ "apihelp-feedrecentchanges-param-hidemyself": "پنهان کردن ویرایش‌های کاربر فعلی.",
+ "apihelp-feedrecentchanges-param-tagfilter": "فیلتر کردن براساس برچسب",
+ "apihelp-feedrecentchanges-param-target": "فقط نمایش ویرایش‌هایی که پیوند دارند به این صفحه.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "نمایش ویرایش‌ها بر روی صفحات پیوند داده شده به صفحات انتخاب شده.",
+ "apihelp-feedrecentchanges-example-simple": "نمایش تغییرات اخیر",
+ "apihelp-feedrecentchanges-example-30days": "نمایش تغییرات اخیر در 30 روز اخیر",
+ "apihelp-feedwatchlist-description": "برگرداندن فهرست پیگیری‌های خوراک.",
+ "apihelp-feedwatchlist-param-feedformat": "فرمت خوراک.",
+ "apihelp-feedwatchlist-param-linktosections": "اگر ممکن است به طور مستقیم به بخش‌های تغییریافته پیوند دهید.",
+ "apihelp-feedwatchlist-example-default": "نمایش خوراک فهرست پی‌گیری",
+ "apihelp-feedwatchlist-example-all6hrs": "همهٔ تغییرات ۶ ساعت گذشته در صفحه‌های پی‌گیری را نمایش دهید",
+ "apihelp-filerevert-description": "واگردانی فایل به یک نسخه قدیمی",
+ "apihelp-filerevert-param-filename": "نام پروندهٔ مقصد، بدون پیشوند پرونده:.",
+ "apihelp-filerevert-param-comment": "ارسال دیدگاه.",
+ "apihelp-filerevert-param-archivename": "نام بایگانی بازبینی برای برگرداندن.",
+ "apihelp-filerevert-example-revert": "برگرداندن <kbd>Wiki.png</kbd> به نسخهٔ <kbd>2011-03-05T15:27:40Z</kbd>",
+ "apihelp-help-description": "راهنما برای پودمان‌های مشخص‌شده را نمایش دهید.",
+ "apihelp-help-param-helpformat": "قالب‌بندی خروجی راهنما.",
+ "apihelp-help-example-main": "راهنما برای پودمان اصلی",
+ "apihelp-help-example-recursive": "همهٔ راهنما در یک صفحه",
+ "apihelp-help-example-help": "راهنما برای خود ماژول راهنما",
+ "apihelp-help-example-query": "راهنما برای دو زیر پودمان کوئری",
+ "apihelp-imagerotate-description": "چرخاندن یک یا چند تصویر",
+ "apihelp-imagerotate-param-rotation": "درجه برای چرخاندن تصویر در جهت ساعت‌گرد.",
+ "apihelp-imagerotate-example-simple": "چرخاندن <kbd>۹۰</kbd> درجه برای <kbd>File:Example.png</kbd>",
+ "apihelp-imagerotate-example-generator": "چرخاندن <kbd>۱۸۰</kbd> درجه برای همهٔ تصاویر موجود در <kbd>Category:Flip</kbd>",
+ "apihelp-import-param-summary": "خلاصه درون‌ریزی.",
+ "apihelp-import-param-xml": "پرونده XML بارگذاری شد.",
+ "apihelp-import-param-interwikisource": "برای درون‌ریز میان‌ویکی: ویکی برای درون‌ریزی از.",
+ "apihelp-import-param-interwikipage": "برای درون‌ریز میان‌ویکی: صفحه برای درون‌ریزی.",
+ "apihelp-import-param-fullhistory": "برای درون‌ریزی میان‌ویکی: درون‌ریزی تاریخچهٔ کامل، نه فقط نسخهٔ موجود.",
+ "apihelp-import-param-templates": "برای درون ریزی میان‌ویکی: همچنین درون‌ریزی الگوهای مورد استفاده.",
+ "apihelp-import-param-namespace": "برای درون‌ریزی میان‌ویکی: درون‌ریزی به این فضای نام.",
+ "apihelp-import-param-rootpage": "درون‌ریزی به عنوان زیر صفحهٔ این صفحه.",
+ "apihelp-login-param-name": "نام کاربری.",
+ "apihelp-login-param-password": "گذرواژه.",
+ "apihelp-login-param-domain": "دامنه (اختیاری)",
+ "apihelp-login-example-gettoken": "دریافت توکن ورود",
+ "apihelp-login-example-login": "ورود",
+ "apihelp-logout-description": "خروج به همراه پاک نمودن اطلاعات این نشست",
+ "apihelp-logout-example-logout": "خروج کاربر فعلی",
+ "apihelp-move-description": "انتقال صفحه",
+ "apihelp-move-param-to": "عنوانی که قصد دارید صفحه را به آن نام تغییر دهید.",
+ "apihelp-move-param-reason": "دلیل انتقال",
+ "apihelp-move-param-movetalk": "صفحهٔ بحث را تغییرنام دهید، اگر وجوددارد.",
+ "apihelp-move-param-movesubpages": "زیرصفحه را تغییرنام دهید، اگر شدنی است.",
+ "apihelp-move-param-noredirect": "عدم ساخت تغییرمسیر.",
+ "apihelp-move-param-watch": "صفحه و تغییرمسیر را به پی‌گیری کاربر کنونی بیافزایید.",
+ "apihelp-move-param-unwatch": "صفحه و تغییرمسیر را از پی‌گیری کاربر کنونی حذف کنید.",
+ "apihelp-move-param-ignorewarnings": "چشم‌پوشی از همهٔ هشدارها.",
+ "apihelp-opensearch-description": "جستجو در ویکی بااستفاده از پروتکل اوپن‌سرچ.",
+ "apihelp-opensearch-param-search": "جستجوی رشته.",
+ "apihelp-opensearch-param-limit": "حداکثر تعداد نتایج برای بازگرداندن.",
+ "apihelp-opensearch-param-namespace": "فضاهای نامی برای جستجو",
+ "apihelp-opensearch-param-suggest": "کاری نکنید اگر <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> false است.",
+ "apihelp-opensearch-param-format": "فرمت خروجی.",
+ "apihelp-opensearch-example-te": "یافتن صفحه‌هایی که با <kbd>ته</kbd> آغاز می‌شوند",
+ "apihelp-options-example-reset": "بازنشانی همه تنظیمات.",
+ "apihelp-paraminfo-param-helpformat": "ساختار راهنمای رشته‌ها",
+ "apihelp-parse-example-page": "تجزیه یک صفحه.",
+ "apihelp-parse-example-text": "تجزیه متن ویکی.",
+ "apihelp-parse-example-summary": "تجزیه خلاصه.",
+ "apihelp-patrol-description": "گشت‌زنی یک صفحه یا نسخهٔ ویرایشی.",
+ "apihelp-patrol-example-rcid": "گشت‌زنی یک تغییر اخیر",
+ "apihelp-patrol-example-revid": "گشت‌زدن یک نسخه",
+ "apihelp-protect-description": "تغییر سطح محافظت صفحه",
+ "apihelp-protect-param-reason": "دلیل برای (عدم) حفاظت.",
+ "apihelp-protect-example-protect": "محافظت از صفحه",
+ "apihelp-protect-example-unprotect": "خارج ساختن صفحه از حفاظت با تغییر سطح حفاظتی به <kbd>همگان</kbd>.",
+ "apihelp-protect-example-unprotect2": "خارج ساختن صفحه از حفاظت با قراردادن هیچ‌گونه محدودیت‌حفاظتی",
+ "apihelp-purge-param-forcelinkupdate": "به‌روزرسانی جداول پیوندها.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "جدول پیوندها را به‌روز رسانی کنید، و جدول‌های پیوندهای هر صفحه‌ای را که از این صفحه به عنوان الگو استفاده می‌کند به‌روز رسانی کنید.",
+ "apihelp-query-param-list": "کدام فهرست‌ها دریافت شود.",
+ "apihelp-query-param-meta": "کدام فراداده‌ها دریافت شود.",
+ "apihelp-query+allcategories-param-prefix": "عنوان همهٔ رده‌ها را که با این مقدار آغاز می‌شود جستجو کنید.",
+ "apihelp-query+allcategories-param-limit": "میزان رده‌ها برای بازگرداندن.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "نمی‌تواند همراه <var>$3user</var> به کار رود.",
+ "apihelp-query+allfileusages-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+ "apihelp-query+allfileusages-param-dir": "جهتی که باید فهرست شود.",
+ "apihelp-query+allfileusages-example-unique": "فهرست پرونده‌های با عنوان یکتا",
+ "apihelp-query+allfileusages-example-unique-generator": "گرفتن عنوان همهٔ پرونده‌ها، برچسب زدن موارد گم شده",
+ "apihelp-query+allfileusages-example-generator": "گرفتن صفحاتی که دارای پرونده هستند",
+ "apihelp-query+allimages-description": "متوالی شمردن همهٔ تصاویر.",
+ "apihelp-query+allimages-param-sort": "خصوصیت برای مرتب‌سازی بر پایه آن",
+ "apihelp-query+allimages-param-dir": "جهتی که باید فهرست شود.",
+ "apihelp-query+allimages-param-minsize": "محدودکردن به صفحه‌هایی که دست کم این تعداد بایت دارند.",
+ "apihelp-query+allimages-param-maxsize": "محدودکردن به صفحه‌هایی که حداکثر این تعداد بایت دارند.",
+ "apihelp-query+alllinks-param-namespace": "فضای نامی که باید شمرده شود.",
+ "apihelp-query+alllinks-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+ "apihelp-query+alllinks-param-dir": "جهتی که باید فهرست شود.",
+ "apihelp-query+allpages-param-filterredir": "صفحه‌هایی که باید فهرست شوند.",
+ "apihelp-query+allpages-param-minsize": "محدودکردن به صفحه‌هایی که همراه دست کم این تعداد بایت است.",
+ "apihelp-query+allpages-param-limit": "میزان کل صفحه‌ها برای بازگرداندن.",
+ "apihelp-query+allredirects-param-limit": "تعداد آیتم‌ها برای بازگرداندن.",
+ "apihelp-query+backlinks-example-simple": "نمایش پیوندها به <kbd>صفحهٔ اصلی<kbd>",
+ "apihelp-query+blocks-example-simple": "فهرست بسته‌شده‌ها",
+ "apihelp-query+categories-param-show": "کدام نوع رده‌ها نمایش داده‌شود.",
+ "apihelp-query+categories-param-limit": "چه میزان رده بازگردانده شود.",
+ "apihelp-query+categories-param-categories": "فقط این رده‌ها فهرست شود. کاربردی برای بررسی وجود یک صفحهٔ مشخص در یک ردهٔ مشخص.",
+ "apihelp-query+categorymembers-description": "فهرست‌کردن همهٔ صفحه‌ها در یک ردهٔ مشخص‌شده.",
+ "apihelp-query+categorymembers-param-sort": "خصوصیت برای مرتب‌سازی",
+ "apihelp-query+categorymembers-param-dir": "جهت مرتب شدن",
+ "apihelp-query+categorymembers-param-startsortkey": "جایش از $1starthexsortkey استفاده کنید.",
+ "apihelp-query+imageinfo-param-urlheight": "مشابه $1urlwidth.",
+ "apihelp-query+info-description": "دریافت اطلاعات سادهٔ صفحه.",
+ "apihelp-query+iwbacklinks-param-prefix": "پیشوند میان‌ویکی.",
+ "apihelp-query+iwbacklinks-param-title": "پیوند میان‌ویکی برای جستجو. باید همراه <var>$1blprefix</var> استفاده شود.",
+ "apihelp-query+iwbacklinks-param-limit": "تعداد صفحه‌ها برای بازگرداندن.",
+ "apihelp-query+linkshere-param-limit": "تعداد برای بازگرداندن.",
+ "apihelp-query+logevents-description": "دریافت رویدادها از سیاهه‌ها.",
+ "apihelp-query+prefixsearch-param-search": "جستجوی رشته",
+ "apihelp-query+prefixsearch-param-namespace": "فضاهای نامی برای جستجو",
+ "apihelp-query+prefixsearch-param-limit": "حداکثر تعداد نتایج برای بازگرداندن.",
+ "apihelp-query+prefixsearch-param-offset": "تعداد نتایج برای رها کردن.",
+ "apihelp-query+protectedtitles-param-namespace": "فقط عنوان‌ها در این فضاهای نام را فهرست کنید.",
+ "apihelp-query+protectedtitles-param-level": "فقط عنوان‌ها در این سطح‌های حفاظت را فهرست کنید.",
+ "apihelp-query+protectedtitles-param-limit": "تعداد صفحه‌ها برای بازگرداندن.",
+ "apihelp-query+protectedtitles-param-start": "آغاز فهرست‌کردن از این برچسب زمانی حفاظت.",
+ "apihelp-query+protectedtitles-param-end": "متوقف‌کردن فهرست‌کردن در این برچسب زمانی حفاظت.",
+ "apihelp-query+random-param-namespace": "بازگرداندن صفحه‌های فقط در این فضاهای نام.",
+ "apihelp-query+random-param-limit": "محدود کنید چه تعداد صفحه بازگردانده خواهد شد.",
+ "apihelp-query+random-param-redirect": "یک تغییرمسیر تصادفی جای یک صفحه تصادفی بارگیری کنید.",
+ "apihelp-query+random-example-simple": "بازگرداندن تو صفحهٔ تصادفی از فضای نام اصلی",
+ "apihelp-query+random-example-generator": "بازگرداندن اطلاعات صفحه دربارهٔ دو صفحهٔ تصادفی از فضای نام اصلی",
+ "apihelp-query+recentchanges-param-start": "برچسب زمانی برای آغاز شمارش از.",
+ "apihelp-query+recentchanges-param-end": "برچسب زمانی برای پایان شمارش.",
+ "apihelp-query+redirects-param-limit": "تعداد تغییرمسیرها برای بازگرداندن.",
+ "apihelp-upload-param-ignorewarnings": "چشم‌پوشی از همهٔ هشدارها.",
+ "apihelp-userrights-param-user": "نام کاربری.",
+ "api-help-param-deprecated": "توصیه.",
+ "api-credits-header": "اعتبار"
+}
diff --git a/includes/api/i18n/fi.json b/includes/api/i18n/fi.json
new file mode 100644
index 00000000..b1a7e8c4
--- /dev/null
+++ b/includes/api/i18n/fi.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Nike",
+ "MrTapsa"
+ ]
+ },
+ "apihelp-query+linkshere-param-show": "Näytä vain kohteet, jotka täyttävät nämä kriteerit:\n;redirect:Näytä vain uudelleenohjaukset.\n;!redirect:Näytä vain ei-uudelleenohjaukset",
+ "apihelp-upload-param-stash": "Mikäli valittu, palvelin säilöö tiedoston väliaikaisesti tallentamisen sijaan."
+}
diff --git a/includes/api/i18n/fr.json b/includes/api/i18n/fr.json
new file mode 100644
index 00000000..114e36c2
--- /dev/null
+++ b/includes/api/i18n/fr.json
@@ -0,0 +1,1054 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gomoko",
+ "Windes",
+ "Orlodrim",
+ "McDutchie",
+ "Element303",
+ "Macofe",
+ "Linedwell",
+ "Nicolapps",
+ "Raulel",
+ "Arkanosis",
+ "Ltrlg"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un en-tête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet en-tête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
+ "apihelp-main-param-action": "Quelle action effectuer.",
+ "apihelp-main-param-format": "Le format de sortie.",
+ "apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MédiaWiki est installé sur un cluster de base de données répliqué. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur <samp>maxlag</samp> est renvoyé avec un message tel que <samp>Attente de $host : $lag secondes de délai</samp>.<br />Voyez [[mw:Manual:Maxlag_parameter|Manuel: Maxlag parameter]] pour plus d’information.",
+ "apihelp-main-param-smaxage": "Fixer l’entête <code>s-maxage</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+ "apihelp-main-param-maxage": "Fixer l’entête <code>max-age</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
+ "apihelp-main-param-assert": "Vérifier si l’utilisateur est connecté si positionné à <kbd>user</kbd>, ou a le droit utilisateur robot si positionné à <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Toute valeur fournie ici sera incluse dans la réponse. Peut être utilisé pour distinguer des demandes.",
+ "apihelp-main-param-servedby": "Inclure le nom d’hôte qui a renvoyé la requête dans les résultats.",
+ "apihelp-main-param-curtimestamp": "Inclure l’horodatage actuel dans le résultat.",
+ "apihelp-main-param-origin": "En accédant à l’API en utilisant une requête AJAX inter-domaines (CORS), mettre le domaine d’origine dans ce paramètre. Il doit être inclus dans toute requête de pre-flight, et doit donc faire partie de l’URI de la requête (pas du corps du POST). Il doit correspondre exactement à une des origines dans l’entête <code>Origin</code> header, donc il doit être fixé avec quelque chose comme <kbd>https://en.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Si ce paramètre ne correspond pas à l’entête <code>Origin</code>, une réponse 403 sera renvoyée. Si ce paramètre correspond à l’entête <code>Origin</code> et que l’origine est en liste blanche, un entête <code>Access-Control-Allow-Origin</code> sera positionné.",
+ "apihelp-main-param-uselang": "Langue à utiliser pour les traductions de message. Une liste de codes peut être analysée depuis <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> avec <kbd>siprop=languages</kbd>, ou en spécifiant <kbd>user</kbd> pour utiliser la préférence de langue de l’utilisateur actuel, ou en spécifiant <kbd>content</kbd> pour utiliser le langage du contenu de ce wiki.",
+ "apihelp-block-description": "Bloquer un utilisateur.",
+ "apihelp-block-param-user": "Nom d’utilisateur, adresse IP ou plage d’adresses IP que vous voulez bloquer.",
+ "apihelp-block-param-expiry": "Durée d’expiration. Peut être relative (par ex. <kbd>5 months</kbd> ou <kbd>2 weeks</kbd>) ou absolue (par ex. <kbd>2014-09-18T12:34:56Z</kbd>). Si elle est mise à <kbd>infinite</kbd>, <kbd>indefinite</kbd> ou <kbd>never</kbd>, le blocage n’expirera jamais.",
+ "apihelp-block-param-reason": "Motif du blocage.",
+ "apihelp-block-param-anononly": "Bloquer uniquement les utilisateurs anonymes (c’est-à-dire désactiver les modifications anonymes pour cette adresse IP).",
+ "apihelp-block-param-nocreate": "Empêcher la création de compte.",
+ "apihelp-block-param-autoblock": "Bloquer automatiquement la dernière adresse IP utilisée, et toute les adresses IP subséquentes depuis lesquelles ils ont essayé de se connecter.",
+ "apihelp-block-param-noemail": "Empêcher l’utilisateur d’envoyer des courriels via le wiki (nécessite le doit <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Masque le nom de l’utilisateur dans le journal des blocages (nécessite le droit <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Autoriser les utilisateurs à modifier leur propre page de discussion (dépend de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Si l’utilisateur est déjà bloqué, écraser le blocage existant.",
+ "apihelp-block-param-watchuser": "Surveiller les pages utilisateur et de discussion de l’utilisateur ou de l’adresse IP.",
+ "apihelp-block-example-ip-simple": "Bloquer l’adresse IP <kbd>192.0.2.5</kbd> pour trois jours avec le motif <kbd>Premier avertissement</kbd>.",
+ "apihelp-block-example-user-complex": "Bloquer indéfiniment l’utilisateur <kbd>Vandale</kbd> avec le motif <kbd>Vandalisme</kbd>, et empêcher la création de nouveau compte et l'envoi de courriel.",
+ "apihelp-checktoken-description": "Vérifier la validité d'un jeton de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Type de jeton testé",
+ "apihelp-checktoken-param-token": "Jeton à tester.",
+ "apihelp-checktoken-param-maxtokenage": "Temps maximum autorisé pour le jeton, en secondes",
+ "apihelp-checktoken-example-simple": "Tester la validité d'un jeton de <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-description": "Efface le drapeau <code>hasmsg</code> pour l’utilisateur courant.",
+ "apihelp-clearhasmsg-example-1": "Effacer le drapeau <code>hasmsg</code> pour l’utilisateur courant",
+ "apihelp-compare-description": "Obtenir la différence entre 2 pages.\n\nVous devez passer un numéro de révision, un titre de page, ou un ID de page, à la fois pour « from » et « to ».",
+ "apihelp-compare-param-fromtitle": "Premier titre à comparer.",
+ "apihelp-compare-param-fromid": "ID de la première page à comparer.",
+ "apihelp-compare-param-fromrev": "Première révision à comparer.",
+ "apihelp-compare-param-totitle": "Second titre à comparer.",
+ "apihelp-compare-param-toid": "ID de la seconde page à comparer.",
+ "apihelp-compare-param-torev": "Seconde révision à comparer.",
+ "apihelp-compare-example-1": "Créer une différence entre les révisions 1 et 2",
+ "apihelp-createaccount-description": "Créer un nouveau compte utilisateur.",
+ "apihelp-createaccount-param-name": "Nom d’utilisateur.",
+ "apihelp-createaccount-param-password": "Mot de passe (ignoré si <var>$1mailpassword</var> est défini).",
+ "apihelp-createaccount-param-domain": "Domaine pour l’authentification externe (facultatif).",
+ "apihelp-createaccount-param-token": "Jeton de création de compte obtenu à la première requête.",
+ "apihelp-createaccount-param-email": "Adresse de courriel de l’utilisateur (facultatif).",
+ "apihelp-createaccount-param-realname": "Vrai nom de l’utilisateur (facultatif).",
+ "apihelp-createaccount-param-mailpassword": "S’il est fixé à une valeur quelconque, un mot de passe aléatoire sera envoyé par courriel à l’utilisateur.",
+ "apihelp-createaccount-param-reason": "Motif facultatif de création du compte à mettre dans les journaux.",
+ "apihelp-createaccount-param-language": "Code de langue à mettre par défaut pour l’utilisateur (facultatif, par défaut langue du contenu).",
+ "apihelp-createaccount-example-pass": "Créer l’utilisateur <kbd>testuser</kbd> avec le mot de passe <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Créer l’utilisateur <kbd>testmailuser</kbd> et envoyer par courriel un mot de passe généré aléatoirement.",
+ "apihelp-delete-description": "Supprimer une page.",
+ "apihelp-delete-param-title": "Titre de la page que vous voulez supprimer. Impossible de l’utiliser avec <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "ID de la page que vous voulez supprimer. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Motif de suppression. Si non défini, un motif généré automatiquement sera utilisé.",
+ "apihelp-delete-param-watch": "Ajouter la page à la liste de suivi de l’utilisateur actuel.",
+ "apihelp-delete-param-watchlist": "Ajouter ou supprimer sans distinction la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne rien changer au suivi.",
+ "apihelp-delete-param-unwatch": "Supprimer la page de la liste de suivi de l'utilisateur actuel.",
+ "apihelp-delete-param-oldimage": "Le nom de l’ancienne image à supprimer tel que fourni par [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Supprimer <kbd>Page principale</kbd>.",
+ "apihelp-delete-example-reason": "Supprimer <kbd>Page principale</kbd> avec le motif <kbd>Préparation au déplacement</kbd>",
+ "apihelp-disabled-description": "Ce module a été désactivé.",
+ "apihelp-edit-description": "Créer et modifier les pages.",
+ "apihelp-edit-param-title": "Titre de la page que vous voulez modifier. Impossible de l’utiliser avec <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "ID de la page que vous voulez modifier. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-edit-param-section": "Numéro de section. <kbd>0</kbd> pour la section de tête, <kbd>new</kbd> pour une nouvelle section.",
+ "apihelp-edit-param-sectiontitle": "Le titre pour une nouvelle section.",
+ "apihelp-edit-param-text": "Contenu de la page.",
+ "apihelp-edit-param-summary": "Modifier le résumé. Également le titre de la section quand $1section=new et $1sectiontitle n’est pas défini.",
+ "apihelp-edit-param-minor": "Modification mineure.",
+ "apihelp-edit-param-notminor": "Modification non mineure.",
+ "apihelp-edit-param-bot": "Marquer cette modification comme robot.",
+ "apihelp-edit-param-basetimestamp": "Horodatage de la révision de base, utilisé pour détecter les conflits de modification. Peut être obtenu via [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "L'horodatage, lorsque le processus d'édition est démarré, est utilisé pour détecter les conflits de modification. Une valeur appropriée peut être obtenue en utilisant <var>[[Special:ApiHelp/main|curtimestamp]]</var> lors du démarrage du processus d'édition (par ex. en chargeant le contenu de la page à modifier).",
+ "apihelp-edit-param-recreate": "Ignorer toutes les erreurs concernant la page \nqui a été supprimée entre-temps.",
+ "apihelp-edit-param-createonly": "Ne pas modifier la page si elle existe déjà.",
+ "apihelp-edit-param-nocreate": "Lever une erreur si la page n’existe pas.",
+ "apihelp-edit-param-watch": "Ajouter la page à la liste de suivi de l'utilisateur actuel.",
+ "apihelp-edit-param-unwatch": "Supprimer la page de la liste de suivi de l'utilisateur actuel.",
+ "apihelp-edit-param-watchlist": "Ajouter ou supprimer sans condition la page de votre liste de suivi, utiliser les préférences ou ne pas changer le suivi.",
+ "apihelp-edit-param-md5": "Le hachage MD5 du paramètre $1text, ou les paramètres $1prependtext et $1appendtext concaténés. Si défini, la modification ne sera pas effectuée à moins que le hachage ne soit correct.",
+ "apihelp-edit-param-prependtext": "Ajouter ce texte au début de la page. Écrase $1text.",
+ "apihelp-edit-param-appendtext": "Ajouter ce texte à la fin de la page. Écrase $1text.\n\nUtiliser $1section=new pour ajouter une nouvelle section, plutôt que ce paramètre.",
+ "apihelp-edit-param-undo": "Annuler cette révision. Écrase $1text, $1prependtext et $1appendtext.",
+ "apihelp-edit-param-undoafter": "Annuler toutes les révisions depuis $1undo jusqu’à celle-ci. Si non défini, annuler uniquement une révision.",
+ "apihelp-edit-param-redirect": "Résoudre automatiquement les redirections.",
+ "apihelp-edit-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée.",
+ "apihelp-edit-param-contentmodel": "Modèle de contenu du nouveau contenu.",
+ "apihelp-edit-param-token": "Le jeton doit toujours être envoyé en tant que dernier paramètre, ou au moins après le paramètre $1text.",
+ "apihelp-edit-example-edit": "Modifier une page",
+ "apihelp-edit-example-prepend": "Préfixer une page par <kbd>_&#95;NOTOC_&#95;</kbd>",
+ "apihelp-edit-example-undo": "Annuler les révisions 13579 à 13585 avec résumé automatique",
+ "apihelp-emailuser-description": "Envoyer un courriel à un utilisateur.",
+ "apihelp-emailuser-param-target": "Utilisateur à qui envoyer le courriel.",
+ "apihelp-emailuser-param-subject": "Entête du sujet.",
+ "apihelp-emailuser-param-text": "Corps du courriel.",
+ "apihelp-emailuser-param-ccme": "M’envoyer une copie de ce courriel.",
+ "apihelp-emailuser-example-email": "Envoyer un courriel à l’utilisateur <kbd>WikiSysop</kbd> avec le texte <kbd>Contenu</kbd>.",
+ "apihelp-expandtemplates-description": "Développe tous les modèles en wikitexte.",
+ "apihelp-expandtemplates-param-title": "Titre de la page.",
+ "apihelp-expandtemplates-param-text": "Wikitexte à convertir.",
+ "apihelp-expandtemplates-param-revid": "ID de révision, pour <nowiki>{{REVISIONID}}</nowiki> et les variables semblables.",
+ "apihelp-expandtemplates-param-prop": "Quelles informations récupérer :\n;wikitext:Le wikitexte développé.\n;categories:Toutes les catégories présentes dans l’entrée qui ne sont pas représentées dans le wikitexte de sortie.\n;properties:Propriétés de page définies en développant les mots magiques dans le wikitexte.\n;volatile:Si la sortie est volatile et ne devrait pas être réutilisée ailleurs dans la page.\n;ttl:Le délai maximal après lequel les caches du résultat devraient être invalidés.\n;parsetree:L’arbre d’analyse XML de l’entrée.\nNoter que si aucune valeur n’est sélectionnée, le résultat contiendra le wikitexte, mais la sortie sera dans un format obsolète.",
+ "apihelp-expandtemplates-param-includecomments": "S’il faut inclure les commentaires HTML dans la sortie.",
+ "apihelp-expandtemplates-param-generatexml": "Générer l’arbre d’analyse XML (remplacé par $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Développe le wikitexte <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-description": "Renvoie le fil des contributions d’un utilisateur.",
+ "apihelp-feedcontributions-param-feedformat": "Le format du flux.",
+ "apihelp-feedcontributions-param-user": "Pour quels utilisateurs récupérer les contributions.",
+ "apihelp-feedcontributions-param-namespace": "Par quels espaces de nom filtrer les contributions.",
+ "apihelp-feedcontributions-param-year": "Depuis l’année (et plus récent).",
+ "apihelp-feedcontributions-param-month": "Depuis le mois (et plus récent).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrer les contributions qui ont ces balises.",
+ "apihelp-feedcontributions-param-deletedonly": "Afficher uniquement les contributions supprimées.",
+ "apihelp-feedcontributions-param-toponly": "Afficher uniquement les modifications qui sont les dernières révisions.",
+ "apihelp-feedcontributions-param-newonly": "Afficher uniquement les modifications qui sont des créations de page.",
+ "apihelp-feedcontributions-param-showsizediff": "Afficher la différence de taille entre les révisions.",
+ "apihelp-feedcontributions-example-simple": "Renvoyer les contributions de l'utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-feedrecentchanges-description": "Renvoie un fil de modifications récentes.",
+ "apihelp-feedrecentchanges-param-feedformat": "Le format du flux.",
+ "apihelp-feedrecentchanges-param-namespace": "Espace de noms auquel limiter les résultats.",
+ "apihelp-feedrecentchanges-param-invert": "Tous les espaces de nom sauf le sélectionné.",
+ "apihelp-feedrecentchanges-param-associated": "Inclure l’espace de noms associé (discussion ou principal).",
+ "apihelp-feedrecentchanges-param-days": "Jours auxquels limiter le résultat.",
+ "apihelp-feedrecentchanges-param-limit": "Nombre maximal de résultats à renvoyer.",
+ "apihelp-feedrecentchanges-param-from": "Afficher les modifications depuis lors.",
+ "apihelp-feedrecentchanges-param-hideminor": "Masquer les modifications mineures.",
+ "apihelp-feedrecentchanges-param-hidebots": "Masquer les modifications faites par des robots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Masquer les modifications faites par des utilisateurs anonymes.",
+ "apihelp-feedrecentchanges-param-hideliu": "Masquer les modifications faites par des utilisateurs enregistrés.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Masquer les modifications contrôlées.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Masquer les modifications faites par l'utilisateur actuel.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrer par balise.",
+ "apihelp-feedrecentchanges-param-target": "Afficher uniquement les modifications sur les pages liées depuis cette page.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Afficher les modifications plutôt sur les pages liées vers la page sélectionnée.",
+ "apihelp-feedrecentchanges-example-simple": "Afficher les modifications récentes",
+ "apihelp-feedrecentchanges-example-30days": "Afficher les modifications récentes sur 30 jours",
+ "apihelp-feedwatchlist-description": "Renvoie un flux de liste de suivi.",
+ "apihelp-feedwatchlist-param-feedformat": "Le format du flux.",
+ "apihelp-feedwatchlist-param-hours": "Lister les pages modifiées lors de ce nombre d’heures depuis maintenant.",
+ "apihelp-feedwatchlist-param-linktosections": "Lier directement pour modifier les sections si possible.",
+ "apihelp-feedwatchlist-example-default": "Afficher le flux de la liste de suivi",
+ "apihelp-feedwatchlist-example-all6hrs": "Afficher toutes les modifications sur les pages suivies dans les dernières 6 heures",
+ "apihelp-filerevert-description": "Rétablir un fichier dans une ancienne version.",
+ "apihelp-filerevert-param-filename": "Nom de fichier cible, sans le préfixe File:.",
+ "apihelp-filerevert-param-comment": "Télécharger le commentaire.",
+ "apihelp-filerevert-param-archivename": "Nom d’archive de la révision à rétablir.",
+ "apihelp-filerevert-example-revert": "Rétablir <kbd>Wiki.png</kbd> dans la version du <kbd>2011-03-05T15:27:40Z</kbd>",
+ "apihelp-help-description": "Afficher l’aide pour les modules spécifiés.",
+ "apihelp-help-param-modules": "Modules pour lesquels afficher l’aide (valeurs des paramètres <var>action</var> et <var>format</var>, ou <kbd>main</kbd>). Les sous-modules peuvent être spécifiés avec un <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Inclure l’aide pour les sous-modules du module nommé.",
+ "apihelp-help-param-recursivesubmodules": "Inclure l’aide pour les sous-modules de façon récursive.",
+ "apihelp-help-param-helpformat": "Format de sortie de l’aide.",
+ "apihelp-help-param-wrap": "Inclut la sortie dans une structure de réponse API standard.",
+ "apihelp-help-param-toc": "Inclure une table des matières dans la sortir HTML.",
+ "apihelp-help-example-main": "Aide pour le module principal",
+ "apihelp-help-example-recursive": "Toute l’aide sur une page",
+ "apihelp-help-example-help": "Aide pour le module d’aide lui-même",
+ "apihelp-help-example-query": "Aide pour deux sous-modules de recherche",
+ "apihelp-imagerotate-description": "Faire pivoter une ou plusieurs images.",
+ "apihelp-imagerotate-param-rotation": "Degrés de rotation de l’image dans le sens des aiguilles d’une montre.",
+ "apihelp-imagerotate-example-simple": "Faire pivoter <kbd>File:Example.png</kbd> de <kbd>90</kbd> degrés.",
+ "apihelp-imagerotate-example-generator": "Faire pivoter toutes les images de <kbd>Category:Flip</kbd> de <kbd>180</kbd> degrés.",
+ "apihelp-import-description": "Importer une page depuis un autre wiki, ou un fichier XML.\n\nNoter que le POST HTTP doit être effectué comme un import de fichier (c’est-à-dire en utilisant multipart/form-data) lors de l’envoi d’un fichier pour le paramètre <var>xml</var>.",
+ "apihelp-import-param-summary": "Importer le résumé.",
+ "apihelp-import-param-xml": "Fichier XML téléchargé.",
+ "apihelp-import-param-interwikisource": "Pour les importations interwiki : wiki depuis lequel importer.",
+ "apihelp-import-param-interwikipage": "Pour les importations interwiki : page à importer.",
+ "apihelp-import-param-fullhistory": "Pour les importations interwiki : importer tout l’historique, et pas seulement la version courante.",
+ "apihelp-import-param-templates": "Pour les importations interwiki : importer aussi tous les modèles inclus.",
+ "apihelp-import-param-namespace": "Pour les importations interwiki : importer vers cet espace de noms.",
+ "apihelp-import-param-rootpage": "Importer comme une sous-page de cette page.",
+ "apihelp-import-example-import": "Importer [[meta:Help:Parserfunctions]] vers l’espace de noms 100 avec tout l’historique.",
+ "apihelp-login-description": "Se connecter et obtenir les cookies d’authentification.\n\nDans le cas d’une connexion réussie, les cookies nécessaires seront inclus dans les entêtes de la réponse HTTP. Dans le cas d’une connexion en échec, les essais ultérieurs pourront être réduits afin de limiter les attaques automatisées de découverte du mot de passe.",
+ "apihelp-login-param-name": "Nom d’utilisateur.",
+ "apihelp-login-param-password": "Mot de passe.",
+ "apihelp-login-param-domain": "Domaine (facultatif).",
+ "apihelp-login-param-token": "Jeton de connexion obtenu à la première requête.",
+ "apihelp-login-example-gettoken": "Récupérer un jeton de connexion",
+ "apihelp-login-example-login": "Se connecter",
+ "apihelp-logout-description": "Se déconnecter et effacer les données de session.",
+ "apihelp-logout-example-logout": "Déconnecter l’utilisateur actuel.",
+ "apihelp-managetags-description": "Effectuer des tâches de gestion relatives à la modification des balises.",
+ "apihelp-managetags-param-operation": "Quelle opération effectuer :\n;create:Créer une nouvelle balise de modification pour un usage manuel.\n;delete:Supprimer une balise de modification de la base de données, y compris la suppression de la marque de toutes les révisions, entrées de modification récente et entrées de journal dans lesquelles elle serait utilisée.\n;activate:Activer une balise de modification, permettant aux utilisateurs de l’appliquer manuellement.\n;deactivate:Désactiver une balise de modification, empêchant les utilisateurs de l’appliquer manuellement.",
+ "apihelp-managetags-param-tag": "Balise à créer, supprimer, activer ou désactiver. Pour la création de balise, elle ne doit pas exister. Pour la suppression de balise, elle doit exister. Pour l’activation de balise, elle doit exister et ne pas être utilisée par une extension. Pour la désactivation de balise, elle doit être actuellement active et définie manuellement.",
+ "apihelp-managetags-param-reason": "Un motif facultatif pour créer, supprimer, activer ou désactiver la balise.",
+ "apihelp-managetags-param-ignorewarnings": "S’il faut ignorer tout avertissement qui se produirait au cours de l’opération.",
+ "apihelp-managetags-example-create": "Créer une balise nommée <kbd>pourriel</kbd> avec le motif <kbd>À utiliser lors de la revue des modifications</kbd>",
+ "apihelp-managetags-example-delete": "Supprimer la balise <kbd>vandlaisme</kbd> avec le motif <kbd>Mal épelé</kbd>",
+ "apihelp-managetags-example-activate": "Activer une balise nommée <kbd>pourriel</kbd> avec le motif <kbd>À utiliser dans la revue des modifications</kbd>",
+ "apihelp-managetags-example-deactivate": "Désactiver une balise nommée <kbd>pourriel</kbd> avec le motif <kbd>Plus nécessaire</kbd>",
+ "apihelp-move-description": "Déplacer une page.",
+ "apihelp-move-param-from": "Titre de la page à renommer. Impossible de l’utiliser avec <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "ID de la page à renommer. Impossible à utiliser avec <var>$1from</var>.",
+ "apihelp-move-param-to": "Titre de la page renommée.",
+ "apihelp-move-param-reason": "Motif du renommage.",
+ "apihelp-move-param-movetalk": "Renommer la page de discussion, si elle existe.",
+ "apihelp-move-param-movesubpages": "Renommer les sous-pages, le cas échéant.",
+ "apihelp-move-param-noredirect": "Ne pas créer une redirection.",
+ "apihelp-move-param-watch": "Ajouter une page et la redirection à liste de suivi de l'utilisateur actuel.",
+ "apihelp-move-param-unwatch": "Supprimer la page et la redirection de la liste de suivi de l'utilisateur actuel.",
+ "apihelp-move-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas changer le suivi.",
+ "apihelp-move-param-ignorewarnings": "Ignorer tous les avertissements.",
+ "apihelp-move-example-move": "Déplacer <kbd>Mauvais titre</kbd> en <kbd>Bon titre</kbd> sans garder de redirection.",
+ "apihelp-opensearch-description": "Rechercher dans le wiki en utilisant le protocole OpenSearch.",
+ "apihelp-opensearch-param-search": "Chaîne de recherche.",
+ "apihelp-opensearch-param-limit": "Nombre maximal de résultats à renvoyer.",
+ "apihelp-opensearch-param-namespace": "Espaces de nom à rechercher.",
+ "apihelp-opensearch-param-suggest": "Ne rien faire si <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> vaut faux.",
+ "apihelp-opensearch-param-redirects": "Comment gérer les redirections :\n;return:Renvoie la redirection elle-même.\n;resolve:Renvoie la page cible. Peut renvoyer moins de $1limit résultats.\nPour des raisons historiques, la valeur par défaut est « return » pour $1format=json et « resolve » pour les autres formats.",
+ "apihelp-opensearch-param-format": "Le format de sortie.",
+ "apihelp-opensearch-example-te": "Trouver les pages commençant par <kbd>Te</kbd>.",
+ "apihelp-options-description": "Modifier les préférences de l’utilisateur courant.\n\nSeules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec une clé préfixée par « userjs- » (devant être utilisées dans les scripts utilisateur), peuvent être définies.",
+ "apihelp-options-param-reset": "Réinitialise les préférences aux valeurs par défaut du site.",
+ "apihelp-options-param-resetkinds": "Liste des types d’option à réinitialiser quand l’option <var>$1reset</var> est définie.",
+ "apihelp-options-param-change": "Liste des modifications, au format nom=valeur (par ex. skin=vector). La valeur ne peut pas contenir de caractère barre verticale. Si aucune valeur n’est fournie (pas même un signe égal), par ex., nomoption|autreoption|…, l’option sera réinitialisée à sa valeur par défaut.",
+ "apihelp-options-param-optionname": "Un nom d’option qui doit être fixé à la valeur fournie par <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "La valeur d’une option spécifiée par <var>$1optionname</var> peut contenir des caractères barre verticale.",
+ "apihelp-options-example-reset": "Réinitialiser toutes les préférences",
+ "apihelp-options-example-change": "Modifier les préférences <kbd>skin</kbd> et <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Réinitialiser toutes les préférences, puis définir <kbd>skin</kbd> et <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-description": "Obtenir des informations sur les modules de l’API.",
+ "apihelp-paraminfo-param-modules": "Liste des noms de module (valeurs des paramètres <var>action</var> et <var>format</var>, ou <kbd>main</kbd>). Peut spécifier des sous-modules avec un <kbd>+</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Format des chaînes d’aide.",
+ "apihelp-paraminfo-param-querymodules": "Liste des noms de module de requêtage (valeur des paramètres <var>prop</var>, <var>meta</var> ou <var>list</var>=). Utiliser <kbd>$1modules=query+foo</kbd> au lieu de <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Obtenir aussi des informations sur le module principal (niveau supérieur). Utiliser plutôt <kbd>$1modules=main</kbd>.",
+ "apihelp-paraminfo-param-pagesetmodule": "Obtenir aussi des informations sur le module pageset (en fournissant titles= et ses amis).",
+ "apihelp-paraminfo-param-formatmodules": "Liste des noms de module de mise en forme (valeur du paramètre <var>format</var>). Utiliser plutôt <var>$1modules</var>.",
+ "apihelp-paraminfo-example-1": "Afficher les informations pour <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> et <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-parse-description": "Analyse le contenu et renvoie le résultat de l’analyseur.\n\nVoyez les différents modules prop de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> pour avoir de l’information sur la version actuelle d’une page.\n\nIl y a plusieurs moyens de spécifier le texte à analyser :\n# Spécifier une page ou une révision, en utilisant <var>$1page</var>, <var>$1pageid</var> ou <var>$1oldid</var>.\n# Spécifier explicitement un contenu, en utilisant <var>$1text</var>, <var>$1title</var> et <var>$1contentmodel</var>\n# Spécifier uniquement un résumé à analyser. <var>$1prop</var> doit recevoir une valeur vide.",
+ "apihelp-parse-param-title": "Titre de la page à laquelle appartient le texte. Si omis, <var>$1contentmodel</var> doit être spécifié, et [[API]] sera utilisé comme titre.",
+ "apihelp-parse-param-text": "Texte à analyser. utiliser <var>$1title</var> ou <var>$1contentmodel</var> pour contrôler le modèle de contenu.",
+ "apihelp-parse-param-summary": "Résumé à analyser.",
+ "apihelp-parse-param-page": "Analyser le contenu de cette page. Impossible à utiliser avec <var>$1text</var> et <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Analyser le contenu de cette page. Écrase <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Si le paramètre <var>$1page</var> ou <var>$1pageid</var> est positionné sur une redirection, la résoudre.",
+ "apihelp-parse-param-oldid": "Analyser le contenu de cette révision. Écrase <var>$1page</var> et <var>$1pageid</var>.",
+ "apihelp-parse-param-prop": "Quelles informations obtenir :\n;text:Fournit le texte analysé du wikitexte.\n;langlinks:Fournit les liens de langue dans le wikitexte analysé.\n;categories:Fournit les catégories dans le wikitexte analysé.\n;categorieshtml:Fournit la version HTML des catégories.\n;links:Fournit les liens internes dans le wikitexte analysé.\n;templates:Fournit les modèles dans le wikitexte analysé.\n;images:Fournit les images dans le wikitexte analysé.\n;externallinks:Fournit les liens externes dans le wikitexte analysé.\n;sections:Fournit les sections dans le wikitexte analysé.\n;revid:Ajoute l’ID de révision de la page analysée.\n;displaytitle:Ajoute le titre du wikitexte analysé.\n;headitems:Fournit les éléments à mettre dans le &lt;head&gt; de la page.\n;headhtml:Fournit le &lt;head&gt; analysé de la page.\n;modules:Fournit les modules ResourceLoader utilisés sur la page.\n;indicators:Fournit le HTML des indicateurs d’état de la page utilisés dans la page.\n;iwlinks:Fournit les liens interwiki dans le wikitexte analysé.\n;wikitext:Fournit le wikitexte d’origine qui a été analysé.\n;properties:Fournit différentes propriétés définies dans le wikitexte analysé.\n;limitreportdata:Fournit le rapport de limite de façon structurée. Ne fournit aucune donnée, quand $1disablepp est activé.\n;limitreporthtml:Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, quand $1disablepp est activé.",
+ "apihelp-parse-param-pst": "Faire une transformation avant enregistrement de l’entrée avant de l’analyser. Valide uniquement quand utilisé avec du texte.",
+ "apihelp-parse-param-onlypst": "Faire une transformation avant enregistrement (PST) de l’entrée, mais ne pas l’analyser. Renvoie le même wikitexte, après que la PST a été appliquée. Valide uniquement quand utilisé avec <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Inclut les liens de langue fournis par les extensions (à utiliser avec <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Récupérer uniquement le contenu de ce numéro de section ou quand <kbd>nouveau</kbd> génère une nouvelle section.\n\nLa <kbd>nouvelle</kbd> section est mise à l’honneur uniquement quand <var>text</var> est spécifié.",
+ "apihelp-parse-param-sectiontitle": "Nouveau titre de section quand <var>section</var> vaut <kbd>nouveau</kbd>.\n\nÀ la différence de la modification de page, cela ne revient pas à <var>summary</var> quand il est omis ou vide.",
+ "apihelp-parse-param-disablepp": "Désactiver le rapport PP de la sortie de l’analyseur.",
+ "apihelp-parse-param-disableeditsection": "Désactiver les liens de modification de section de la sortie de l’analyseur.",
+ "apihelp-parse-param-generatexml": "Générer un arbre d’analyse XML (nécessite le modèle de contenu <code>$1</code>).",
+ "apihelp-parse-param-preview": "Analyser en mode aperçu.",
+ "apihelp-parse-param-sectionpreview": "Analyser en mode aperçu de section (active aussi le mode aperçu).",
+ "apihelp-parse-param-disabletoc": "Désactiver la table des matières dans la sortie.",
+ "apihelp-parse-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée. Valide uniquement si utilisé avec $1text.",
+ "apihelp-parse-param-contentmodel": "Modèle de contenu du texte d’entrée. Si omis, $1title doit être spécifié, et la valeur par défaut sera le modèle du titre spécifié. Valide uniquement quand utilisé avec $1text.",
+ "apihelp-parse-example-page": "Analyser une page.",
+ "apihelp-parse-example-text": "Analyser le wikitexte.",
+ "apihelp-parse-example-texttitle": "Analyser du wikitexte, en spécifiant le titre de la page.",
+ "apihelp-parse-example-summary": "Analyser un résumé.",
+ "apihelp-patrol-description": "Patrouiller une page ou une révision.",
+ "apihelp-patrol-param-rcid": "ID de modification récente à patrouiller.",
+ "apihelp-patrol-param-revid": "ID de révision à patrouiller.",
+ "apihelp-patrol-example-rcid": "Patrouiller une modification récente",
+ "apihelp-patrol-example-revid": "Patrouiller une révision",
+ "apihelp-protect-description": "Modifier le niveau de protection d’une page.",
+ "apihelp-protect-param-title": "Titre de la page à (dé)protéger. Impossible à utiliser avec $1pageid.",
+ "apihelp-protect-param-pageid": "ID de la page à (dé)protéger. Impossible à utiliser avec $1title.",
+ "apihelp-protect-param-protections": "Liste des niveaux de protection, au format <kbd>action=niveau</kbd> (par ex. <kbd>edit=sysop</kbd>).\n\n<strong>NOTE :<strong> Toutes les actions non listées auront leur restrictions supprimées.",
+ "apihelp-protect-param-expiry": "Horodatages d’expiration. Si un seul horodatage est fourni, il sera utilisé pour toutes les protections. Utiliser <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd> pour une protection sans expiration.",
+ "apihelp-protect-param-reason": "Motif de (dé)protection.",
+ "apihelp-protect-param-cascade": "Activer la protection en cascade (c’est-à-dire protéger les pages incluses dans cette page). Ignoré si tous les niveaux de protection fournis ne supportent pas la mise en cascade.",
+ "apihelp-protect-param-watch": "Si activé, ajouter la page (dé)protégée à la liste de suivi de l'utilisateur actuel.",
+ "apihelp-protect-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas modifier le suivi.",
+ "apihelp-protect-example-protect": "Protéger une page",
+ "apihelp-protect-example-unprotect": "Enlever la protection d’une page en mettant les restrictions à <kbd>all</kbd>.",
+ "apihelp-protect-example-unprotect2": "Enlever la protection de la page en ne mettant aucune restriction",
+ "apihelp-purge-description": "Vider le cache des titres fournis.\n\nNécessite une requête POST si l’utilisateur n’est pas connecté.",
+ "apihelp-purge-param-forcelinkupdate": "Mettre à jour les tables de liens.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Mettre à jour la table des liens, et mettre à jour les tables de liens pour toute page qui utilise cette page comme modèle",
+ "apihelp-purge-example-simple": "Purger les pages <kbd>Page principale</kbd> et <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Purger les 10 premières pages de l’espace de noms principal",
+ "apihelp-query-description": "Extraire des données de et sur MédiaWiki.\n\nToutes les modifications de données devront d’abord utiliser une requête pour obtenir un jeton, afin d’éviter les abus de la part de sites malveillants.",
+ "apihelp-query-param-prop": "Quelles propriétés obtenir des pages demandées.",
+ "apihelp-query-param-list": "Quelles listes obtenir.",
+ "apihelp-query-param-meta": "Quelles métadonnées obtenir.",
+ "apihelp-query-param-indexpageids": "Inclure une section pageids supplémentaire listant tous les IDs de page renvoyés.",
+ "apihelp-query-param-export": "Exporter les révisions actuelles de toutes les pages fournies ou générées.",
+ "apihelp-query-param-exportnowrap": "Renvoyer le XML exporté sans l’inclure dans un résultat XML (même format que [[Special:Export]]). Utilisable uniquement avec $1export.",
+ "apihelp-query-param-iwurl": "S’il faut obtenir l’URL complète si le titre est un lien interwiki.",
+ "apihelp-query-param-continue": "Quand il est présent, met en forme query-continue sous forme de paires clé-valeur qui devrait simplement être fusionné dans la requête d’origine. Ce paramètre doit être fixé à une chaîne vide dans la requête initiale.\n\nCe paramètre est recommandé pour tout nouveau développement, et sera mis par défaut dans la prochaine version de l’API.",
+ "apihelp-query-param-rawcontinue": "Actuellement ignoré. Plus tard, <var>$1continue</var> deviendra la valeur par défaut et sera nécessaire pour recevoir les données brutes de <samp>query-continue</samp>.",
+ "apihelp-query-example-revisions": "Récupérer [[Special:ApiHelp/query+siteinfo|l’info du site]] et [[Special:ApiHelp/query+revisions|les révisions]] de <kbd>Page principale</kbd>.",
+ "apihelp-query-example-allpages": "Récupérer les révisions des pages commençant par <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-description": "Énumérer toutes les catégories.",
+ "apihelp-query+allcategories-param-from": "La catégorie depuis laquelle démarrer l’énumération.",
+ "apihelp-query+allcategories-param-to": "La catégorie à laquelle terminer l’énumération.",
+ "apihelp-query+allcategories-param-prefix": "Rechercher tous les titres de catégorie qui commencent avec cette valeur.",
+ "apihelp-query+allcategories-param-dir": "Direction dans laquelle trier.",
+ "apihelp-query+allcategories-param-min": "Renvoyer uniquement les catégories avec au moins ce nombre de membres.",
+ "apihelp-query+allcategories-param-max": "Renvoyer uniquement les catégories avec au plus ce nombre de membres.",
+ "apihelp-query+allcategories-param-limit": "Combien de catégories renvoyer.",
+ "apihelp-query+allcategories-param-prop": "Quelles propriétés récupérer :\n;size:Ajoute le nombre de pages dans la catégorie.\n;hidden:Marque les catégories qui sont cachées avec _&#95;HIDDENCAT_&#95;.",
+ "apihelp-query+allcategories-example-size": "Lister les catégories avec l’information sur le nombre de pages dans chacune",
+ "apihelp-query+allcategories-example-generator": "Récupérer l’information sur la page de catégorie elle-même pour les catégories commençant par <kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-description": "Lister toutes les révisions supprimées par un utilisateur ou dans un espace de noms.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Utilisable uniquement avec <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Impossible à utiliser avec <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+alldeletedrevisions-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+alldeletedrevisions-param-from": "Démarrer la liste à ce titre.",
+ "apihelp-query+alldeletedrevisions-param-to": "Arrêter la liste à ce titre.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Rechercher tous les titres de page commençant par cette valeur.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
+ "apihelp-query+alldeletedrevisions-param-user": "Lister uniquement les révisions par cet utilisateur.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Ne pas lister les révisions par cet utilisateur.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Lister uniquement les pages dans cet espace de noms.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>REMARQUE :</strong> Du fait du [[mw:Manual:$wgMiserMode|mode minimal]], utiliser <var>$1user</var> et <var>$1namespace</var> ensemble peut aboutir à moins de résultats renvoyés que <var>$1limit</var> avant de continuer ; dans les cas extrêmes, zéro résultats peuvent être renvoyés.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Utilisé comme générateur, générer des titres plutôt que des IDs de révision.",
+ "apihelp-query+alldeletedrevisions-example-user": "Lister les 50 dernières contributions supprimées par l'utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal.",
+ "apihelp-query+allfileusages-description": "Lister toutes les utilisations de fichier, y compris ceux n’existant pas.",
+ "apihelp-query+allfileusages-param-from": "Le titre du fichier depuis lequel commencer l’énumération.",
+ "apihelp-query+allfileusages-param-to": "Le titre du fichier auquel arrêter l’énumération.",
+ "apihelp-query+allfileusages-param-prefix": "Rechercher tous les fichiers dont le titre commence par cette valeur.",
+ "apihelp-query+allfileusages-param-unique": "Afficher uniquement les titres de fichier distincts. Impossible à utiliser avec $1prop=ids.\nQuand utilisé comme générateur, produit les pages cibles au lieu des sources.",
+ "apihelp-query+allfileusages-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page utilisatrice (impossible à utiliser avec $1unique).\n;title:Ajoute le titre du fichier.",
+ "apihelp-query+allfileusages-param-limit": "Combien d’éléments renvoyer au total.",
+ "apihelp-query+allfileusages-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+allfileusages-example-B": "Lister les titres de fichier, y compris les manquants, avec les IDs de page d’où ils proviennent, en commençant à <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Lister les titres de fichier uniques",
+ "apihelp-query+allfileusages-example-unique-generator": "Obtient tous les titres de fichier, en marquant les manquants",
+ "apihelp-query+allfileusages-example-generator": "Obtient les pages contenant les fichiers",
+ "apihelp-query+allimages-description": "Énumérer toutes les images séquentiellement.",
+ "apihelp-query+allimages-param-sort": "Propriété par laquelle trier.",
+ "apihelp-query+allimages-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+allimages-param-from": "Le titre de l’image depuis laquelle démarrer l’énumération. Ne peut être utilisé qu’avec $1sort=name.",
+ "apihelp-query+allimages-param-to": "Le titre de l’image auquel arrêter l’énumération. Ne peut être utilisé qu’avec $1sort=name.",
+ "apihelp-query+allimages-param-start": "L’horodatage depuis lequel énumérer. Ne peut être utilisé qu’avec $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "L’horodatage de fin de l’énumération. Ne peut être utilisé qu’avec $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Rechercher toutes les images dont le titre commence par cette valeur. Utilisable uniquement avec $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Restreindre aux images avec au moins ce nombre d’octets.",
+ "apihelp-query+allimages-param-maxsize": "Restreindre aux images avec au plus ce nombre d’octets.",
+ "apihelp-query+allimages-param-sha1": "Hachage SHA1 de l’image. Écrase $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "Hachage SHA1 de l’image en base 36 (utilisé dans MédiaWiki).",
+ "apihelp-query+allimages-param-user": "Renvoyer seulement les fichiers téléchargés par cet utilisateur. Utilisable uniquement avec $1sort=timestamp. Impossible à utiliser avec $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Comment filtrer les fichiers téléchargés par des robots. Peut être utilisé uniquement avec $1sort=timestamp. Impossible à utiliser avec $1user.",
+ "apihelp-query+allimages-param-mime": "Quels types MIME rechercher, par ex. <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Combien d’images renvoyer au total.",
+ "apihelp-query+allimages-example-B": "Afficher une liste des fichiers commençant par la lettre <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Afficher une liste des fichiers récemment téléchargés semblable à [[Special:NewFiles]]",
+ "apihelp-query+allimages-example-mimetypes": "Afficher une liste de fichiers avec le type MIME <kbd>image/png</kbd> ou <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Afficher l’information sur 4 fichiers commençant par la lettre <kbd>T</kbd>.",
+ "apihelp-query+alllinks-description": "Énumérer tous les liens pointant vers un espace de noms donné.",
+ "apihelp-query+alllinks-param-from": "Le titre du lien auquel démarrer l’énumération.",
+ "apihelp-query+alllinks-param-to": "Le titre du lien auquel arrêter l’énumération.",
+ "apihelp-query+alllinks-param-prefix": "Rechercher tous les titres liés commençant par cette valeur.",
+ "apihelp-query+alllinks-param-unique": "Afficher uniquement les titres liés distincts. Impossible à utiliser avec <kbd>$1prop=ids</kbd>.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
+ "apihelp-query+alllinks-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page de liaison (impossible à utiliser avec <var>$1unique</var>).\n;title:Ajoute le titre du lien.",
+ "apihelp-query+alllinks-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+alllinks-param-limit": "Combien d’éléments renvoyer au total.",
+ "apihelp-query+alllinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+alllinks-example-B": "Lister les titres liés, y compris les manquants, avec les IDs des pages d’où ils proviennent, en démarrant à <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Lister les titres liés uniques",
+ "apihelp-query+alllinks-example-unique-generator": "Obtient tous les titres liés, en marquant les manquants",
+ "apihelp-query+alllinks-example-generator": "Obtient les pages contenant les liens",
+ "apihelp-query+allmessages-description": "Renvoyer les messages depuis ce site.",
+ "apihelp-query+allmessages-param-messages": "Quels messages sortir. <kbd>*</kbd> (par défaut) signifie tous les messages.",
+ "apihelp-query+allmessages-param-prop": "Quelles propriétés obtenir.",
+ "apihelp-query+allmessages-param-enableparser": "Si positionné pour activer l’analyseur, traitera en avance le wikitexte du message (substitution des mots magiques, gestion des modèles, etc.).",
+ "apihelp-query+allmessages-param-nocontent": "Si positionné, ne pas inclure le contenu des messages dans la sortie.",
+ "apihelp-query+allmessages-param-includelocal": "Inclure aussi les messages locaux, c’est-à-dire les messages qui n’existent pas dans le logiciel mais sous forme d’une page MediaWiki:.\nCela liste toutes les pages MediaWiki:, donc aussi celles qui ne sont pas vraiment des messages, telles que [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Arguments à substituer dans le message.",
+ "apihelp-query+allmessages-param-filter": "Renvoyer uniquement les messages avec des noms contenant cette chaîne.",
+ "apihelp-query+allmessages-param-customised": "Renvoyer uniquement les messages dans cet état de personnalisation.",
+ "apihelp-query+allmessages-param-lang": "Renvoyer les messages dans cette langue.",
+ "apihelp-query+allmessages-param-from": "Renvoyer les messages commençant à ce message.",
+ "apihelp-query+allmessages-param-to": "Renvoyer les messages en terminant à ce message.",
+ "apihelp-query+allmessages-param-title": "Nom de page à utiliser comme contexte en analysant le message (pour l’option $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Renvoyer les messages avec ce préfixe.",
+ "apihelp-query+allmessages-example-ipb": "Afficher les messages commençant par <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Afficher les messages <kbd>august</kbd> et <kbd>mainpage</kbd> en allemand.",
+ "apihelp-query+allpages-description": "Énumérer toutes les pages séquentiellement dans un espace de noms donné.",
+ "apihelp-query+allpages-param-from": "Le titre de la page depuis lequel commencer l’énumération.",
+ "apihelp-query+allpages-param-to": "Le titre de la page auquel stopper l’énumération.",
+ "apihelp-query+allpages-param-prefix": "Rechercher tous les titres de page qui commencent par cette valeur.",
+ "apihelp-query+allpages-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+allpages-param-filterredir": "Quelles pages lister.",
+ "apihelp-query+allpages-param-minsize": "Limiter aux pages avec au moins ce nombre d’octets.",
+ "apihelp-query+allpages-param-maxsize": "Limiter aux pages avec au plus ce nombre d’octets.",
+ "apihelp-query+allpages-param-prtype": "Limiter aux pages protégées uniquement.",
+ "apihelp-query+allpages-param-prlevel": "Filtrer les protections basées sur le niveau de protection (doit être utilisé avec le paramètre $1prtype=).",
+ "apihelp-query+allpages-param-prfiltercascade": "Filtrer les protections d’après leur cascade (ignoré si $1prtype n’est pas positionné).",
+ "apihelp-query+allpages-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+allpages-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+allpages-param-filterlanglinks": "Filtrer si une page a des liens de langue. Noter que cela ne prend pas en compte les liens de langue ajoutés par des extensions.",
+ "apihelp-query+allpages-param-prexpiry": "Quelle expiration de protection sur laquelle filtrer la page :\n;indefinite:N’obtenir que les pages avec une expiration de protection infinie.\n;definite:N’obtenir que les pages avec une expiration de protection définie (spécifique).\n;all:Obtenir toutes les pages avec une expiration de protection.",
+ "apihelp-query+allpages-example-B": "Afficher une liste des pages commençant par la lettre <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Afficher l’information sur 4 pages commençant par la lettre <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Afficher le contenu des 2 premières pages hors redirections commençant par <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-description": "Lister toutes les redirections vers un espace de noms.",
+ "apihelp-query+allredirects-param-from": "Le titre de la redirection auquel démarrer l’énumération.",
+ "apihelp-query+allredirects-param-to": "Le titre de la redirection auquel arrêter l’énumération.",
+ "apihelp-query+allredirects-param-prefix": "Rechercher toutes les pages cible commençant par cette valeur.",
+ "apihelp-query+allredirects-param-unique": "Afficher uniquement les pages cibles distinctes. Impossible à utiliser avec $1prop=ids|fragment|interwiki.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
+ "apihelp-query+allredirects-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page de redirection (impossible à utiliser avec <var>$1unique</var>).\n;title:Ajoute le titre de la redirection.\n;fragment:Ajoute le fragment de la redirection, s’il y en a un (impossible à utiliser avec <var>$1unique</var>).\n;interwiki:Ajoute le préfixe interwiki de la redirection, s’il y en a un (impossible à utiliser avec <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+allredirects-param-limit": "Combien d’éléments renvoyer au total.",
+ "apihelp-query+allredirects-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+allredirects-example-B": "Lister les pages cible, y compris les manquantes, avec les IDs de page d’où ils proviennent, en commençant à <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Lister les pages cible unique",
+ "apihelp-query+allredirects-example-unique-generator": "Obtient toutes les pages cible, en marquant les manquantes",
+ "apihelp-query+allredirects-example-generator": "Obtient les pages contenant les redirections",
+ "apihelp-query+alltransclusions-description": "Lister toutes les transclusions (pages intégrées en utilisant &#123;&#123;x&#125;&#125;), y compris les inexistantes.",
+ "apihelp-query+alltransclusions-param-from": "Le titre de la transclusion depuis lequel commencer l’énumération.",
+ "apihelp-query+alltransclusions-param-to": "Le titre de la transclusion auquel arrêter l’énumération.",
+ "apihelp-query+alltransclusions-param-prefix": "Rechercher tous les titres inclus qui commencent par cette valeur.",
+ "apihelp-query+alltransclusions-param-unique": "Afficher uniquement les titres inclus. Impossible à utiliser avec $1prop=ids.\nUtilisé avec un générateur, produit les pages cible plutôt que les pages source.",
+ "apihelp-query+alltransclusions-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page incluse (impossible à utiliser avec $1unique).\n;title:Ajoute le titre de la transclusion.",
+ "apihelp-query+alltransclusions-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+alltransclusions-param-limit": "Combien d’éléments renvoyer au total.",
+ "apihelp-query+alltransclusions-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+alltransclusions-example-B": "Lister les titres inclus, y compris les manquants, avec les IDs des pages d’où ils viennent, en commençant à <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Lister les titres inclus uniques",
+ "apihelp-query+alltransclusions-example-unique-generator": "Obtient tous les titres inclus, en marquant les manquants",
+ "apihelp-query+alltransclusions-example-generator": "Obtient les pages contenant des transclusions",
+ "apihelp-query+allusers-description": "Énumérer tous les utilisateurs enregistrés.",
+ "apihelp-query+allusers-param-from": "Le nom d’utilisateur auquel démarrer l’énumération.",
+ "apihelp-query+allusers-param-to": "Le nom d’utilisateur auquel stopper l’énumération.",
+ "apihelp-query+allusers-param-prefix": "Rechercher tous les utilisateurs commençant par cette valeur.",
+ "apihelp-query+allusers-param-dir": "Direction du tri.",
+ "apihelp-query+allusers-param-group": "Inclure uniquement les utilisateurs dans les groupes donnés.",
+ "apihelp-query+allusers-param-excludegroup": "Exclure les utilisateurs dans les groupes donnés.",
+ "apihelp-query+allusers-param-rights": "Inclure uniquement les utilisateurs avec les droits indiqués. Ne comprend pas les droits accordés par des groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+allusers-param-prop": "Quelles informations inclure :\n;blockinfo:Ajoute l’information sur le bloc actuel d’un utilisateur.\n;groups:Liste des groupes auxquels appartient l’utilisateur. Cela utilise beaucoup de ressources du serveur et peut renvoyer moins de résultats que la limite.\n;implicitgroups:Liste tous les groupes auxquels l’utilisateur est affecté automatiquement.\n;rights:Liste les droits qu’à l’utilisateur.\n;editcount:Ajoute le compteur de modifications de l’utilisateur.\n;registration:Ajoute l’horodatage de l’inscription de l’utilisateur, s’il est disponible (peut être vide).",
+ "apihelp-query+allusers-param-limit": "Combien de noms d’utilisateur renvoyer au total.",
+ "apihelp-query+allusers-param-witheditsonly": "Ne lister que les utilisateurs qui ont fait des modifications.",
+ "apihelp-query+allusers-param-activeusers": "Lister uniquement les utilisateurs actifs durant {{PLURAL:$1|le dernier jour|les $1 derniers jours}}.",
+ "apihelp-query+allusers-example-Y": "Lister les utilisateurs en commençant à <kbd>Y</kbd>.",
+ "apihelp-query+backlinks-description": "Trouver toutes les pages qui ont un lien vers la page donnée.",
+ "apihelp-query+backlinks-param-title": "Titre à rechercher. Impossible à utiliser avec <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "ID de la page à chercher. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+backlinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+backlinks-param-filterredir": "Comment filtrer les redirections. Si positionné à <kbd>nonredirects</kbd> quand <var>$1redirect</var> est activé, cela ne s’applique qu’au second niveau.",
+ "apihelp-query+backlinks-param-limit": "Combien de pages renvoyer au total. Si $1redirect est activé, la limite s’applique à chaque niveau séparément (ce qui signifie jusqu’à 2 * limite résultats peut être retourné).",
+ "apihelp-query+backlinks-param-redirect": "Si le lien vers une page est une redirection, trouver toutes les pages qui ont un lien vers cette redirection aussi. La limite maximale est divisée par deux.",
+ "apihelp-query+backlinks-example-simple": "Afficher les liens vers <kbd>Main page<kbd>.",
+ "apihelp-query+backlinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers <kbd>Main page<kbd>.",
+ "apihelp-query+blocks-description": "Lister tous les utilisateurs et les adresses IP bloqués.",
+ "apihelp-query+blocks-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+blocks-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+blocks-param-ids": "Liste des IDs de bloc à lister (facultatif).",
+ "apihelp-query+blocks-param-users": "Liste des utilisateurs à rechercher (facultatif).",
+ "apihelp-query+blocks-param-ip": "Obtenir tous les blocs s’appliquant à cette adresse IP ou à cette plage CIDR, y compris les blocs de plage.\nImpossible à utiliser avec <var>$3users</var>. Les plages CIDR plus larges que IPv4/$1 ou IPv6/$2 ne sont pas acceptées.",
+ "apihelp-query+blocks-param-limit": "Le nombre maximal de blocs à lister.",
+ "apihelp-query+blocks-param-prop": "Quelles propriétés obtenir :\n;id:Ajoute l’ID du blocage.\n;user:Ajoute le nom de l’utilisateur bloqué.\n;userid:Ajoute l’ID de l’utilisateur bloqué.\n;by:Ajoute le nom de l’utilisateur ayant bloqué.\n;byid:Ajoute l’ID de l’utilisateur ayant bloqué.\n;timestamp:Ajoute l’horodatage du blocage.\n;expiry:Ajoute l’horodatage d’expiration du blocage.\n;reason:Ajoute le motif du blocage.\n;range:Ajoute la plage d’adresses IP affectée par le blocage.\n;flags:Marque le bannissement avec (autoblock, anononly, etc.).",
+ "apihelp-query+blocks-param-show": "Afficher uniquement les éléments correspondant à ces critères.\nPar exemple, pour voir uniquement les blocages infinis sur les adresses IP, mettre <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Lister les blocages",
+ "apihelp-query+blocks-example-users": "Lister les blocages des utilisateurs <kbd>Alice</kbd> et <kbd>Bob</kbd>.",
+ "apihelp-query+categories-description": "Lister toutes les catégories auxquelles les pages appartiennent.",
+ "apihelp-query+categories-param-prop": "Quelles propriétés supplémentaires obtenir de chaque catégorie :\n;sortkey:Ajoute la clé de tri (chaîne hexadécimale) et son préfixe (partie lisible) de la catégorie.\n;timestamp:Ajoute l’horodatage de l’ajout de la catégorie.\n;hidden:Marque les catégories cachées avec _&#95;HIDDENCAT_&#95;.",
+ "apihelp-query+categories-param-show": "Quelle sorte de catégories afficher.",
+ "apihelp-query+categories-param-limit": "Combien de catégories renvoyer.",
+ "apihelp-query+categories-param-categories": "Lister uniquement ces catégories. Utile pour vérifier si une certaine page est dans une certaine catégorie.",
+ "apihelp-query+categories-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+categories-example-simple": "Obtenir une liste des catégories auxquelles appartient la page <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categories-example-generator": "Obtenir des informations sur toutes les catégories utilisées dans la page <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-description": "Renvoie les informations sur les catégories données.",
+ "apihelp-query+categoryinfo-example-simple": "Obtenir des informations sur <kbd>Category:Foo</kbd> et <kbd>Category:Bar</kbd>.",
+ "apihelp-query+categorymembers-description": "Lister toutes les pages d’une catégorie donnée.",
+ "apihelp-query+categorymembers-param-title": "Quelle catégorie énumérer (obligatoire). Doit comprendre le préfixe <kbd>{{ns:category}}:</kbd>. Impossible à utiliser avec <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "ID de la page de la catégorie à énumérer. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;sortkey:Ajoute la clé de tri utilisée pour trier dans la catégorie (chaîne hexadécimale).\n;sortkeyprefix:Ajoute le préfixe de la clé de tri utilisé pour trier dans la catégorie (partie lisible de la clé de tri).\n;type:Ajoute le type dans lequel a été catégorisée la page (page, sous-catégorie ou fichier).\n;timestamp:Ajoute l’horodatage de l’inclusion de la page.",
+ "apihelp-query+categorymembers-param-namespace": "Inclure uniquement les pages dans ces espaces de nom. Remarquez que <kbd>$1type=subcat</kbd> ou <kbd>$1type=file</kbd> peuvent être utilisés à la place de <kbd>$1namespace=14</kbd> ou <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Quel type de membres de la catégorie inclure. Ignoré quand <kbd>$1sort=timestamp</kbd> est positionné.",
+ "apihelp-query+categorymembers-param-limit": "Le nombre maximal de pages à renvoyer.",
+ "apihelp-query+categorymembers-param-sort": "Propriété par laquelle trier.",
+ "apihelp-query+categorymembers-param-dir": "Dans quelle direction trier.",
+ "apihelp-query+categorymembers-param-start": "Horodatage auquel démarrer la liste. Peut être utilisé uniquement avec <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Horodatage auquel terminer la liste. Peut être utilisé uniquement avec <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Clé de tri à laquelle démarrer le listage, telle que renvoyée par <kbd>$1prop=sortkey</kbd>. Utilisable uniquement avec <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Clé de tri à laquelle arrêter le listage, telle que renvoyée par <kbd>$1prop=sortkey</kbd>. Utilisable uniquement avec <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Préfixe de la clé de tri à laquelle démarrer le listage. Utilisable uniquement avec <kbd>$1sort=sortkey</kbd>. Écrase <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Préfixe de la clé de tri AVANT laquelle se termine le listage (et non pas à, si cette valeur existe elle ne sera pas incluse !). Utilisable uniquement avec $1sort=sortkey. Écrase $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "Utiliser plutôt $1starthexsortkey.",
+ "apihelp-query+categorymembers-param-endsortkey": "Utiliser plutôt $1endhexsortkey.",
+ "apihelp-query+categorymembers-example-simple": "Obtenir les 10 premières pages de <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Obtenir l’information sur les 10 premières pages de <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-description": "Obtenir la liste des contributeurs connectés et le nombre de contributeurs anonymes d’une page.",
+ "apihelp-query+contributors-param-group": "Inclure uniquement les utilisateurs dans les groupes donnés. Ne pas inclure les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+contributors-param-excludegroup": "Exclure les utilisateurs des groupes donnés. Ne pas inclure les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+contributors-param-rights": "Inclure uniquement les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+contributors-param-excluderights": "Exclure les utilisateurs ayant les droits donnés. Ne pas inclure les droits accordés par les groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
+ "apihelp-query+contributors-param-limit": "Combien de contributeurs renvoyer.",
+ "apihelp-query+contributors-example-simple": "Afficher les contributeurs dans la <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-description": "Obtenir des informations sur la révision supprimée.\n\nPeut être utilisé de différentes manières :\n# Obtenir les révisions supprimées pour un ensemble de pages, en donnant les titres ou les ids de page. Ordonné par titre et horodatage.\n# Obtenir des données sur un ensemble de révisions supprimées en donnant leurs IDs et leurs ids de révision. Ordonné par ID de révision.",
+ "apihelp-query+deletedrevisions-param-start": "L’horodatage auquel démarrer l’énumération. Ignoré lors du traitement d’une liste d’IDs de révisions.",
+ "apihelp-query+deletedrevisions-param-end": "L’horodatage auquel arrêter l’énumération. Ignoré lors du traitement d’une liste d’IDs de révisions.",
+ "apihelp-query+deletedrevisions-param-tag": "Lister uniquement les révisions marquées par cette balise.",
+ "apihelp-query+deletedrevisions-param-user": "Lister uniquement les révisions faites par cet utilisateur.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Ne pas lister les révisions faites par cet utilisateur.",
+ "apihelp-query+deletedrevisions-param-limit": "Le nombre maximal de révisions à lister.",
+ "apihelp-query+deletedrevisions-param-prop": "Quelles propriétés obtenir :\n;revid:Ajoute l’ID de la révision supprimée.\n;parentid:Ajoute l’ID de la révision précédente de la page.\n;user:Ajoute l’utilisateur ayant fait la révision.\n;userid:Ajoute l’ID de l’utilisateur ayant fait la révision.\n;comment:Ajoute le commentaire de la révision.\n;parsedcomment:Ajoute le commentaire analysé de la révision.\n;minor:Marque si une révision est mineure.\n;len:Ajoute la taille (en octets) de la révision.\n;sha1:Ajoute le SHA-1 (base 16) de la révision.\n;content:Ajoute le contenu de la révision.\n;tags:Balises pour la révision.",
+ "apihelp-query+deletedrevisions-example-titles": "Lister les révisions supprimées des pages <kbd>Main Page</kbd> et <kbd>Talk:Main Page</kbd>, avec leur contenu.",
+ "apihelp-query+deletedrevisions-example-revids": "Lister les informations pour la révision supprimée <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-description": "Lister les révisions supprimées.\n\nOpère selon trois modes :\n# Lister les révisions supprimées pour les titres donnés, triées par horodatage.\n# Lister les contributions supprimées pour l’utilisateur donné, triées par horodatage (pas de titres spécifiés).\n# Lister toutes les révisions supprimées dans l’espace de noms donné, triées par titre et horodatage (aucun titre spécifié, $1user non positionné).\n\nCertains paramètres ne s’appliquent qu’à certains modes et sont ignorés dans les autres.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mode|Modes}} : $2",
+ "apihelp-query+deletedrevs-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+deletedrevs-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+deletedrevs-param-from": "Démarrer la liste à ce titre.",
+ "apihelp-query+deletedrevs-param-to": "Arrêter la liste à ce titre.",
+ "apihelp-query+deletedrevs-param-prefix": "Rechercher tous les titres de page commençant par cette valeur.",
+ "apihelp-query+deletedrevs-param-unique": "Lister uniquement une révision pour chaque page.",
+ "apihelp-query+deletedrevs-param-tag": "Lister uniquement les révisions marquées par cette balise.",
+ "apihelp-query+deletedrevs-param-user": "Lister uniquement les révisions par cet utilisateur.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Ne pas lister les révisions par cet utilisateur.",
+ "apihelp-query+deletedrevs-param-namespace": "Lister uniquement les pages dans cet espace de noms.",
+ "apihelp-query+deletedrevs-param-limit": "Le nombre maximal de révisions à lister.",
+ "apihelp-query+deletedrevs-param-prop": "Quelles propriétés obtenir :\n;revid:Ajoute l’ID de la révision supprimée.\n;parentid:Ajoute l’ID de la révision précédente de la page.\n;user:Ajoute l’utilisateur ayant fait la révision.\n;userid:Ajoute l’ID de l’utilisateur qui a fait la révision.\n;comment:Ajoute le commentaire de la révision.\n;parsedcomment:Ajoute le commentaire analysé de la révision.\n;minor:Marque si la révision est mineure.\n;len:Ajoute la longueur (en octets) de la révision.\n;sha1:Ajoute le SHA-1 (base 16) de la révision.\n;content:Ajoute le contenu de la révision.\n;token:<span class=\"apihelp-deprecated\">Obsolète.</span> Fournit le jeton de modification.\n;tags:Balises pour la révision.",
+ "apihelp-query+deletedrevs-example-mode1": "Lister les dernières révisions supprimées de des pages <kbd>Main Page</kbd> et <kbd>Talk:Main Page</kbd>, avec le contenu (mode 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Lister les 50 dernières contributions de <kbd>Bob</kbd> supprimées (mode 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal (mode 3)",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Lister les 50 premières pages supprimées dans l’espace de noms {{ns:talk}} (mode 3).",
+ "apihelp-query+disabled-description": "Ce module de requête a été désactivé.",
+ "apihelp-query+duplicatefiles-description": "Lister tous les fichiers qui sont des doublons des fichiers donnés d’après leurs valeurs de hachage.",
+ "apihelp-query+duplicatefiles-param-limit": "Combien de fichiers dupliqués à renvoyer.",
+ "apihelp-query+duplicatefiles-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+duplicatefiles-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.",
+ "apihelp-query+duplicatefiles-example-simple": "Rechercher les doublons de [[:File:Albert Einstein Head.jpg]]",
+ "apihelp-query+duplicatefiles-example-generated": "Rechercher les doublons de tous les fichiers",
+ "apihelp-query+embeddedin-description": "Trouver toutes les pages qui incluent (par transclusion) le titre donné.",
+ "apihelp-query+embeddedin-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "ID de la page à rechercher. Impossible à utiliser avec $1title.",
+ "apihelp-query+embeddedin-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+embeddedin-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+embeddedin-param-filterredir": "Comment filtrer les redirections.",
+ "apihelp-query+embeddedin-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+embeddedin-example-simple": "Afficher les pages incluant <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Obteir des informations sur les pages incluant <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-description": "Renvoyer toutes les URLs externes (non interwikis) des pages données.",
+ "apihelp-query+extlinks-param-limit": "Combien de liens renvoyer.",
+ "apihelp-query+extlinks-param-protocol": "Protocole de l’URL. Si vide et <var>$1query</var> est positionné, le protocole est <kbd>http</kbd>. Laisser à la fois ceci et <var>$1query</var> vide pour lister tous les liens externes.",
+ "apihelp-query+extlinks-param-query": "Rechercher une chaîne sans protocole. Utile pour vérifier si une certaine page contient une certaine URL externe.",
+ "apihelp-query+extlinks-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.",
+ "apihelp-query+extlinks-example-simple": "Obtenir une liste des liens externes de <kbd>Main Page<kbd>.",
+ "apihelp-query+exturlusage-description": "Énumérer les pages contenant une URL donnée.",
+ "apihelp-query+exturlusage-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;url:Ajoute l’URL utilisée dans la page.",
+ "apihelp-query+exturlusage-param-protocol": "Protocole de l’URL. Si vide et que <var>$1query</var> est rempli, le protocole est <kbd>http</kbd>. Le laisser avec <var>$1query</var> vide pour lister tous les liens externes.",
+ "apihelp-query+exturlusage-param-query": "Rechercher une chaîne sans protocole. Voyez [[Special:LinkSearch]]. Le laisser vide liste tous les liens externes.",
+ "apihelp-query+exturlusage-param-namespace": "Les espaces de nom à énumérer.",
+ "apihelp-query+exturlusage-param-limit": "Combien de pages renvoyer.",
+ "apihelp-query+exturlusage-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.",
+ "apihelp-query+exturlusage-example-simple": "Afficher les pages avec un lien vers <kbd>http://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-description": "Énumérer séquentiellement tous les fichiers supprimés.",
+ "apihelp-query+filearchive-param-from": "Le titre de l’image auquel démarrer l’énumération.",
+ "apihelp-query+filearchive-param-to": "Le titre de l’image auquel arrêter l’énumération.",
+ "apihelp-query+filearchive-param-prefix": "Rechercher tous les titres d’image qui commencent par cette valeur.",
+ "apihelp-query+filearchive-param-limit": "Combien d’images renvoyer au total.",
+ "apihelp-query+filearchive-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+filearchive-param-sha1": "Hachage SHA1 de l’image. Écrase $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "Hachage SHA1 de l’image en base 36 (utilisé dans MédiaWiki).",
+ "apihelp-query+filearchive-param-prop": "Quelle information obtenir sur l’image :\n;sha1:Ajoute le hachage SHA-1 pour l’image.\n;timestamp:Ajoute l÷’horodatage pour la version téléchargée.\n;user:Ajoute l’utilisateur qui a téléchargé la version de l’image.\n;size:Ajoute la taille de l’image en octets et la hauteur, la largeur et le nombre de page (si c’est applicable).\n;dimensions:Alias pour la taille.\n;description:Ajoute la description de la version de l’image.\n;parseddescription:Analyser la description de la version.\n;mime:Ajoute le MIME de l’image.\n;mediatype:Ajoute le type de média de l’image.\n;metadata:Liste les métadonnées Exif pour la version de l’image.\n;bitdepth:Ajoute la profondeur de bit de la version.\n;archivename:Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
+ "apihelp-query+filearchive-example-simple": "Afficher une liste de tous les fichiers supprimés",
+ "apihelp-query+filerepoinfo-description": "Renvoyer les méta-informations sur les référentiels d’image configurés dans le wiki.",
+ "apihelp-query+filerepoinfo-param-prop": "Quelles propriétés du référentiel récupérer (il peut y en avoir plus de disponibles sur certains wikis) :\n;apiurl:URL de l’API du référentiel - utile pour obtenir les infos de l’image depuis l’hôte.\n;name:La clé du référentiel - utilisé par ex. dans les valeurs de retour de <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> et [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Le nom lisible du wiki référentiel.\n;rooturl:URL racine des chemins d’image.\n;local:Si ce référentiel est le référentiel local ou non.",
+ "apihelp-query+filerepoinfo-example-simple": "Obtenir l’information sur les référentiels de fichier",
+ "apihelp-query+fileusage-description": "Trouver toutes les pages qui utilisent les fichiers donnés.",
+ "apihelp-query+fileusage-param-prop": "Quelles propriétés obtenir :\n;pageid:ID de chaque page.\n;title:Titre de chaque page.\n;redirect:Marque si la page est une redirection.",
+ "apihelp-query+fileusage-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
+ "apihelp-query+fileusage-param-limit": "Combien renvoyer.",
+ "apihelp-query+fileusage-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.",
+ "apihelp-query+fileusage-example-simple": "Obtenir une liste des pages utilisant [[:File:Example.jpg]]",
+ "apihelp-query+fileusage-example-generator": "Obtenir l’information sur les pages utilisant [[:File:Example.jpg]]",
+ "apihelp-query+imageinfo-description": "Renvoyer l’information de fichier et l’historique de téléchargement.",
+ "apihelp-query+imageinfo-param-prop": "Quelles informations obtenir du fichier :\n;timestamp:Ajoute l’horodatage de la version téléchargée.\n;user:Ajoute l’utilisateur qui a téléchargé chaque version du fichier.\n;userid:Ajoute l’ID de l’utilisateur qui a téléchargé chaque version du fichier.\n;comment:Commentaire sur la version.\n;parsedcomment:Analyser le commentaire sur cette version.\n;canonicaltitle:Ajoute le titre canonique du fichier.\n;url:Fournit l’URL du fichier et la page de description.\n;size:Ajoute la taille du fichier en octets et la hauteur, la largeur et le nombre de pages (si applicable).\n;dimensions:Alias pour la taille.\n;sha1:Ajoute le hachage SHA-1 pour le fichier.\n;mime:Ajoute le type MIME du fichier.\n;thumbmime:Ajoute le type MIME de la vignette de l’image (nécessite l’URL et le paramètre $1urlwidth).\n;mediatype:Ajoute le type de média du fichier.\n;metadata:Liste les métadonnées Exif de la version du fichier.\n;commonmetadata:Liste les métadonnées génériques du format du fichier pour la version du fichier.\n;extmetadata:Liste les métadonnées mises en forme combinées depuis différentes sources. Les résultats sont au format HTML.\n;archivename:Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.\n;bitdepth:Ajoute la profondeur de bit de la version.\n;uploadwarning:Utilisé par la page Special:Upload pour obtenir de l’information sur un fichier existant. Non prévu pour être utilisé en dehors du cœur de MédiaWiki.",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Ajoute l’horodatage à la version téléchargée.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Ajoute l’utilisateur qui a téléchargé chaque version du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Ajouter l’ID de l’utilisateur qui a téléchargé chaque version du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Commentaire sur la version.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analyser le commentaire de la version.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Ajoute le titre canonique du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Fournit l’URL du fichier et de la page de description.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Ajoute la taille du fichier en octets et sa hauteur, largeur et compteur de page (le cas échéant).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias pour la taille.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Ajoute le hachage SH1-1 du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Ajoute le type MIME du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Ajoute le type MIME de la vignette de l’image (nécessite l’URL et le paramètre $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Ajoute le type de média du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Liste les métadonnées Exif de la version du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Liste les métadonnées génériques du format du fichier pour la version du fichier.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Liste les métadonnées mises en forme combinées depuis diverses sources. Les résultats sont au format HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Ajoute la profondeur de bits de la version.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Utilisé par la page Special:Upload pour obtenir de l’information sur un fichier existant. Non prévu pour être utilisé en dehors du cœur de MédiaWiki.",
+ "apihelp-query+imageinfo-param-limit": "Combien de révision de fichier renvoyer par fichier.",
+ "apihelp-query+imageinfo-param-start": "Horodatage auquel démarrer la liste.",
+ "apihelp-query+imageinfo-param-end": "Horodatage auquel arrêter la liste.",
+ "apihelp-query+imageinfo-param-urlwidth": "Si $2prop=url est défini, une URL vers une image à l’échelle de cette largeur sera renvoyée.\nPour des raisons de performance si cette option est utilisée, pas plus de $1 images mises à l’échelle seront renvoyées.",
+ "apihelp-query+imageinfo-param-urlheight": "Similaire à $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Version de métadonnées à utiliser. Si <kbd>latest</kbd> est spécifié, utiliser la dernière version. Par défaut à <kbd>1</kbd> pour la compatibilité ascendante.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "Quelle langue pour analyser extmetadata. Cela affecte à la fois quelle traduction analyser, s’il y en a plusieurs, et comment les choses comme les nombres et d’autres valeurs sont mises en forme.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Si des traductions pour la propriété extmetadata sont disponibles, les analyser toutes.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Si spécifié et non vide, seules ces clés seront renvoyées pour $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-urlparam": "Une chaîne de paramètre spécifique à l’analyseur. Par exemple, les PDFs peuvent utiliser <kbd>page15-100px</kbd>. <var>$1urlwidth</var> doit être utilisé et être cohérent avec <var>$1urlparam</var>.",
+ "apihelp-query+imageinfo-param-localonly": "Rechercher les fichiers uniquement dans le référentiel local.",
+ "apihelp-query+imageinfo-example-simple": "Analyser les informations sur la version actuelle de [[:File:Albert Einstein Head.jpg]]",
+ "apihelp-query+imageinfo-example-dated": "Analyser les informations sur les versions de [[:File:Test.jpg]] depuis 2008",
+ "apihelp-query+images-description": "Renvoie tous les fichiers contenus dans les pages fournies.",
+ "apihelp-query+images-param-limit": "Combien de fichiers renvoyer.",
+ "apihelp-query+images-param-images": "Lister uniquement ces fichiers. Utile pour vérifier si une page donnée contient un fichier donné.",
+ "apihelp-query+images-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+images-example-simple": "Obtenir une liste des fichiers utilisés dans [[Main Page]]",
+ "apihelp-query+images-example-generator": "Obtenir des informations sur tous les fichiers utilisés dans [[Main Page]]",
+ "apihelp-query+imageusage-description": "Trouver toutes les pages qui utilisent le titre de l’image donné.",
+ "apihelp-query+imageusage-param-title": "Titre à rechercher. Impossible à utiliser avec $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "ID de la page à rechercher. Impossible à utiliser avec $1title.",
+ "apihelp-query+imageusage-param-namespace": "L’espace de noms à énumérer.",
+ "apihelp-query+imageusage-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+imageusage-param-filterredir": "Comment filtrer les redirections. Si mis à nonredirects quand $1redirect est activé, cela ne s’appliquera qu’au second niveau.",
+ "apihelp-query+imageusage-param-limit": "Combien de pages renvoyer au total. Si <var>$1redirect</var> est activé, la limite s’applique à chaque niveau séparément (ce qui veut dire que jusqu’à 2 * <var>$1limit</var> résultats peuvent être renvoyés).",
+ "apihelp-query+imageusage-param-redirect": "Si le lien vers une page est une redirection, trouver toutes les pages qui ont aussi un lien vers cette redirection. La limite maximale est divisée par deux.",
+ "apihelp-query+imageusage-example-simple": "Afficher les pages utilisant [[:File:Albert Einstein Head.jpg]]",
+ "apihelp-query+imageusage-example-generator": "Obtenir des informations sur les pages utilisant [[:File:Albert Einstein Head.jpg]]",
+ "apihelp-query+info-description": "Obtenir les informations de base sur la page.",
+ "apihelp-query+info-param-prop": "Quelles propriétés supplémentaires récupérer :\n;protection:Liste de niveau de protection de chaque page.\n;talkid:L’ID de la page de discussion pour chaque page qui n’est pas une page de discussion.\n;watched:Liste de l’état de suivi de chaque page.\n;watchers:Le nombre d’observateurs, si c&est autorisé.\n;notificationtimestamp:L’horodatage de notification de la liste de suivi de chaque page.\n;subjectid:L’ID de la page parente de chaque page de discussion.\n;url:Fournit une URL complète, une URL de modification, et l’URL canonique pour chaque page.\n;readable:Si l’utilisateur peut lire cette page.\n;preload:Fournit le texte renvoyé par EditFormPreloadText.\n;displaytitle:Fournit la manière dont le titre de la page est vraiment affiché.",
+ "apihelp-query+info-paramvalue-prop-protection": "Lister le niveau de protection de chaque page.",
+ "apihelp-query+info-paramvalue-prop-talkid": "L’ID de la page de discussion de chaque page qui n’est pas de discussion.",
+ "apihelp-query+info-paramvalue-prop-watched": "Lister l’état de suivi de chaque page.",
+ "apihelp-query+info-paramvalue-prop-watchers": "Le nombre d’observateurs, si c’est autorisé.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "L’horodatage de notification de la liste de suivi de chaque page.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "L’ID de page de la page parent de chaque page de discussion.",
+ "apihelp-query+info-paramvalue-prop-url": "Fournit une URL complète, une URL de modification, et l’URL canonique de chaque page.",
+ "apihelp-query+info-paramvalue-prop-readable": "Si l’utilisateur peut lire cette page.",
+ "apihelp-query+info-paramvalue-prop-preload": "Fournit le texte renvoyé par EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Fournit la manière dont le titre de la page est réellement affiché.",
+ "apihelp-query+info-param-testactions": "Tester si l’utilisateur actuel peut effectuer certaines actions sur la page.",
+ "apihelp-query+info-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-query+info-example-simple": "Obtenir des informations sur la page <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Obtenir des informations générale et de protection sur la page <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-description": "Trouver toutes les pages qui ont un lien vers le lien interwiki indiqué.\n\nPeut être utilisé pour trouver tous les liens avec un préfixe, ou tous les liens vers un titre (avec un préfixe donné). N’utiliser aucun paramètre revient en pratique à « tous les liens interwiki ».",
+ "apihelp-query+iwbacklinks-param-prefix": "Préfixe pour l’interwiki.",
+ "apihelp-query+iwbacklinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "Combien de pages renvoyer.",
+ "apihelp-query+iwbacklinks-param-prop": "Quelles propriétés obtenir :\n;iwprefix:Ajoute le préfixe de l’interwiki.\n;iwtitle:Ajoute le titre de l’interwiki.",
+ "apihelp-query+iwbacklinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+iwbacklinks-example-simple": "Obtenir les pages ayant un lien vers [[wikibooks:Test]]",
+ "apihelp-query+iwbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[wikibooks:Test]]",
+ "apihelp-query+iwlinks-description": "Renvoie tous les liens interwiki des pages indiquées.",
+ "apihelp-query+iwlinks-param-url": "S&il faut obtenir l’URL complète (impossible à utiliser avec $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :\n;url:Ajoute l’URL complète.",
+ "apihelp-query+iwlinks-param-limit": "Combien de liens interwiki renvoyer.",
+ "apihelp-query+iwlinks-param-prefix": "Renvoyer uniquement les liens interwiki avec ce préfixe.",
+ "apihelp-query+iwlinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+iwlinks-example-simple": "Obtenir les liens interwiki de la page <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-description": "Trouver toutes les pages qui ont un lien vers le lien de langue indiqué.\n\nPeut être utilisé pour trouver tous les liens avec un code de langue, ou tous les liens vers un titre (avec une langue donnée). N’utiliser aucun paramètre revient à « tous les liens de langue ».\n\nNotez que cela peut ne pas prendre en compte les liens de langue ajoutés par les extensions.",
+ "apihelp-query+langbacklinks-param-lang": "Langue pour le lien de langue.",
+ "apihelp-query+langbacklinks-param-title": "Lien interlangue à rechercher. Doit être utilisé avec $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+langbacklinks-param-prop": "Quelles propriétés obtenir :\n;lllang:Ajoute le code de langue du lien de langue.\n;lltitle:Ajoute le titre du lien de langue.",
+ "apihelp-query+langbacklinks-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+langbacklinks-example-simple": "Obtenir les pages avec un lien avec [[:fr:Test]]",
+ "apihelp-query+langbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[:fr:Test]]",
+ "apihelp-query+langlinks-description": "Renvoie tous les liens interlangue des pages fournies.",
+ "apihelp-query+langlinks-param-limit": "Combien de liens interlangue renvoyer.",
+ "apihelp-query+langlinks-param-url": "S’il faut récupérer l’URL complète (impossible à utiliser avec <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :\n;url:Ajoute l’URL complète.\n;langname:Ajoute le nom localisé de la langue (au mieux). Utiliser <var>$1inlanguagecode</var> pour contrôler la langue.\n;autonym:Ajoute le nom natif de la langue.",
+ "apihelp-query+langlinks-param-lang": "Renvoyer uniquement les liens interlangue avec ce code de langue.",
+ "apihelp-query+langlinks-param-title": "Lien à rechercher. Doit être utilisé avec <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "La direction dans laquelle énumérer.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Code de langue pour les noms de langue localisés.",
+ "apihelp-query+langlinks-example-simple": "Obtenir les liens interlangue de la page <kbd>Main Page</kbd>.",
+ "apihelp-query+links-description": "Renvoie tous les liens des pages fournies.",
+ "apihelp-query+links-param-namespace": "Afficher les liens uniquement dans ces espaces de nom.",
+ "apihelp-query+links-param-limit": "Combien de liens renvoyer.",
+ "apihelp-query+links-param-titles": "Lister uniquement les liens vers ces titres. Utile pour vérifier si une certaine page a un lien vers un titre donné.",
+ "apihelp-query+links-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+links-example-simple": "Obtenir les liens de la page <kbd>Main Page</kbd>",
+ "apihelp-query+links-example-generator": "Obtenir des informations sur tous les liens de page dans <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Obtenir les liens de la page <kbd>Accueil</kbd> dans les espaces de nom {{ns:user}} et {{ns:template}}.",
+ "apihelp-query+linkshere-description": "Trouver toutes les pages ayant un lien vers les pages données.",
+ "apihelp-query+linkshere-param-prop": "Quelles propriétés obtenir :\n;pageid:ID de chaque page.\n;title:Titre de chaque page.\n;redirect:Indique si la page est une redirection.",
+ "apihelp-query+linkshere-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
+ "apihelp-query+linkshere-param-limit": "Combien de résultats renvoyer.",
+ "apihelp-query+linkshere-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.",
+ "apihelp-query+linkshere-example-simple": "Obtenir une liste des pages liées à [[Main Page]]",
+ "apihelp-query+linkshere-example-generator": "Obtenir des informations sur les pages liées à [[Main Page]]",
+ "apihelp-query+logevents-description": "Obtenir des événements des journaux.",
+ "apihelp-query+logevents-param-prop": "Quelles propriétés obtenir :\n;ids:Ajoute l’ID de l’événement.\n;title:Ajoute le titre de la page pour l’événement.\n;type:Ajoute le type de l’événement.\n;user:Ajoute l’utilisateur responsable de l’événement.\n;userid:Ajoute l’ID de l’utilisateur responsable de l’événement.\n;timestamp:Ajoute l’horodatage de l’événement.\n;comment:Ajoute le commentaire de l’événement.\n;parsedcomment:Ajoute le commentaire analysé de l’événement.\n;details:Liste les détails supplémentaires sur l’événement.\n;tags:Liste les balises de l’événement.",
+ "apihelp-query+logevents-param-type": "Filtrer les entrées du journal à ce seul type.",
+ "apihelp-query+logevents-param-action": "Filtrer les actions du journal à cette seule action. Écrase <var>$1type</var>. Des actions avec une astérisque de la forme <var>$1type</var> sont autorisées pour spécifier n’importe quelle chaîne à la place de l’astérisque.",
+ "apihelp-query+logevents-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+logevents-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+logevents-param-user": "Restreindre aux entrées générées par l’utilisateur spécifié.",
+ "apihelp-query+logevents-param-title": "Restreindre aux entrées associées à une page donnée.",
+ "apihelp-query+logevents-param-namespace": "Restreindre aux entrées dans l’espace de nom spécifié.",
+ "apihelp-query+logevents-param-prefix": "Restreindre aux entrées commençant par ce préfixe.",
+ "apihelp-query+logevents-param-tag": "Lister seulement les entrées ayant cette balise.",
+ "apihelp-query+logevents-param-limit": "Combien d'entrées renvoyer au total.",
+ "apihelp-query+logevents-example-simple": "Liste les entrées de journal récentes.",
+ "apihelp-query+pagepropnames-description": "Lister les noms de toutes les propriétés de page utilisées sur le wiki.",
+ "apihelp-query+pagepropnames-param-limit": "Le nombre maximal de noms à renvoyer.",
+ "apihelp-query+pagepropnames-example-simple": "Obtenir les 10 premiers noms de propriété.",
+ "apihelp-query+pageprops-description": "Obtenir diverses propriétés définies dans le contenu de la page.",
+ "apihelp-query+pageprops-param-prop": "Lister uniquement ces propriétés. Utile pour vérifier si une certaine page utilise une certaine propriété de page.",
+ "apihelp-query+pageprops-example-simple": "Obtenir les propriétés de <kbd>Category:Foo</kbd>.",
+ "apihelp-query+pageswithprop-description": "Lister toutes les pages utilisant une propriété de page donnée.",
+ "apihelp-query+pageswithprop-param-propname": "Propriété de page pour laquelle énumérer les pages.",
+ "apihelp-query+pageswithprop-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;value:Ajoute la valeur de la propriété de page.",
+ "apihelp-query+pageswithprop-param-limit": "Le nombre maximal de pages à renvoyer.",
+ "apihelp-query+pageswithprop-param-dir": "Dans quelle direction trier.",
+ "apihelp-query+pageswithprop-example-simple": "Lister les 10 premières pages en utilisant <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Obtenir des informations sur les 10 premières pages utilisant <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-description": "Effectuer une recherche de préfixe sur les titres de page.",
+ "apihelp-query+prefixsearch-param-search": "Chaîne de recherche.",
+ "apihelp-query+prefixsearch-param-namespace": "Espaces de nom à rechercher.",
+ "apihelp-query+prefixsearch-param-limit": "Nombre maximal de résultats à renvoyer.",
+ "apihelp-query+prefixsearch-param-offset": "Nombre de résultats à sauter.",
+ "apihelp-query+prefixsearch-example-simple": "Rechercher les titres de page commençant par <kbd>meaning</kbd>.",
+ "apihelp-query+protectedtitles-description": "Lister tous les titres protégés en création.",
+ "apihelp-query+protectedtitles-param-namespace": "Lister uniquement les titres dans ces espaces de nom.",
+ "apihelp-query+protectedtitles-param-level": "Lister uniquement les titres avec ces niveaux de protection.",
+ "apihelp-query+protectedtitles-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+protectedtitles-param-start": "Démarrer la liste à cet horodatage de protection.",
+ "apihelp-query+protectedtitles-param-end": "Arrêter la liste à cet horodatage de protection.",
+ "apihelp-query+protectedtitles-param-prop": "Quelles propriétés obtenir :\n;timestamp:Ajoute l’horodatage de l’ajout de la protection.\n;user:Ajoute l’utilisateur ayant ajouté la protection.\n;userid:Ajoute l’ID de l’utilisateur ayant ajouté la protection.\n;comment:Ajoute le commentaire de la protection.\n;parsedcomment:Ajoute le commentaire analysé de la protection.\n;expiry:Ajoute l’horodatage de levée de la protection.\n;level:Ajoute le niveau de protection.",
+ "apihelp-query+protectedtitles-example-simple": "Lister les titres protégés",
+ "apihelp-query+protectedtitles-example-generator": "Trouver les liens vers les titres protégés dans l’espace de noms principal",
+ "apihelp-query+querypage-description": "Obtenir une liste fournie par une page spéciale basée sur QueryPage",
+ "apihelp-query+querypage-param-page": "Le nom de la page spéciale. Remarque, ce nom est sensible à la casse.",
+ "apihelp-query+querypage-param-limit": "Nombre de résultats à renvoyer.",
+ "apihelp-query+querypage-example-ancientpages": "Renvoyer les résultats de [[Special:Ancientpages]].",
+ "apihelp-query+random-description": "Obtenir un ensemble de pages au hasard.\n\nLes pages sont listées dans un ordre prédéterminé, seul le point de départ est aléatoire. Par exemple, cela signifie que si la première page dans la liste est <samp>Accueil</samp>, la seconde sera <em>toujours</em> <samp>Liste des singes de fiction</samp>, la troisième <samp>Liste de personnes figurant sur les timbres de Vanuatu</samp>, etc.\n\nSi le nombre de page dans l’espace de nom est inférieur à <var>$1limit</var>, moins de pages seront renvoyées. La même page ne sera jamais renvoyée deux fois.",
+ "apihelp-query+random-param-namespace": "Renvoyer seulement des pages de ces espaces de noms.",
+ "apihelp-query+random-param-limit": "Limite sur le nombre de pages aléatoires renvoyées.",
+ "apihelp-query+random-param-redirect": "Charger une redirection aléatoire plutôt qu’une page aléatoire.",
+ "apihelp-query+random-example-simple": "Obtenir deux pages aléatoires de l’espace principal",
+ "apihelp-query+random-example-generator": "Renvoyer les informations de la page sur deux pages au hasard de l’espace de noms principal",
+ "apihelp-query+recentchanges-description": "Énumérer les modifications récentes.",
+ "apihelp-query+recentchanges-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+recentchanges-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+recentchanges-param-namespace": "Filtrer les modifications uniquement sur ces espaces de nom.",
+ "apihelp-query+recentchanges-param-user": "Lister uniquement les modifications par cet utilisateur.",
+ "apihelp-query+recentchanges-param-excludeuser": "Ne pas lister les modifications par cet utilisateur.",
+ "apihelp-query+recentchanges-param-tag": "Lister uniquement les modifications marquées avec cette balise.",
+ "apihelp-query+recentchanges-param-prop": "Inclure des informations supplémentaires :\n;user:Ajoute l’utilisateur responsable de la modification et marque si c’est une adresse IP.\n;userid:Ajoute l’ID de l’utilisateur responsable de la modification.\n;comment:Ajoute le commentaire de la modification.\n;parsedcomment:Ajoute le commentaire analysé pour la modification.\n;flags:Ajoute les balises de la modification.\n;timestamp:Ajoute l’horodatage de la modification.\n;title:Ajoute le titre de la page modifiée.\n;ids:Ajoute l’ID de la page, l’ID des modifications récentes et l’ID de l’ancienne et la nouvelle révisions.\n;sizes:Ajoute l’ancienne et la nouvelle tailles de la page en octets.\n;redirect:Marque la modification si la page est une redirection.\n;patrolled:Marque les modifications patrouillables comme patrouillées ou non.\n;loginfo:Ajoute les informations du journal (Id du journal, type de trace, etc.) aux entrées du journal.\n;tags:Liste les balises de l’entrée.\n;sha1:Ajoute la somme de contrôle du contenu pour les entrées associées à une révision.",
+ "apihelp-query+recentchanges-param-token": "Utiliser plutôt <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+recentchanges-param-show": "Afficher uniquement les éléments correspondant à ces critères. Par exemple, pour voir uniquement les modifications mineures par des utilisateurs connectés, mettre $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "Combien de modifications renvoyer au total.",
+ "apihelp-query+recentchanges-param-type": "Quels types de modification afficher.",
+ "apihelp-query+recentchanges-param-toponly": "Lister uniquement les modifications qui sont de la dernière révision.",
+ "apihelp-query+recentchanges-example-simple": "Lister les modifications récentes",
+ "apihelp-query+recentchanges-example-generator": "Obtenir l’information de page sur les modifications récentes non patrouillées",
+ "apihelp-query+redirects-description": "Renvoie toutes les redirections vers les pages données.",
+ "apihelp-query+redirects-param-prop": "Quelles propriétés récupérer :\n;pageid:ID de page de chaque redirection.\n;title:Titre de chaque redirection.\n;fragment:Fragment de chaque redirection, s’il y en a un.",
+ "apihelp-query+redirects-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
+ "apihelp-query+redirects-param-limit": "Combien de redirections renvoyer.",
+ "apihelp-query+redirects-param-show": "Afficher uniquement les éléments correspondant à ces critères :\n;fragment:Afficher uniquement les redirections avec un fragment.\n;!fragment:Afficher uniquement les redirections sans fragment.",
+ "apihelp-query+redirects-example-simple": "Obtenir une liste des redirections vers [[Main Page]]",
+ "apihelp-query+redirects-example-generator": "Obtenir des informations sur toutes les redirections vers [[Main Page]]",
+ "apihelp-query+revisions-description": "Obtenir des informations sur la révision.\n\nPeut être utilisé de différentes manières :\n# Obtenir des données sur un ensemble de pages (dernière révision), en mettant les titres ou les ids de page.\n# Obtenir les révisions d’une page donnée, en utilisant les titres ou les ids de page avec début, fin ou limite.\n# Obtenir des données sur un ensemble de révisions en donnant leurs IDs et leurs ids de révision.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Utilisable uniquement avec une seule page (mode #2).",
+ "apihelp-query+revisions-param-startid": "À quel ID de révision démarrer l’énumération.",
+ "apihelp-query+revisions-param-endid": "Arrêter l’énumération des révisions à cet ID.",
+ "apihelp-query+revisions-param-start": "À quel horodatage de révision démarrer l’énumération.",
+ "apihelp-query+revisions-param-end": "Énumérer jusqu’à cet horodatage.",
+ "apihelp-query+revisions-param-user": "Inclure uniquement les révisions faites par l’utilisateur.",
+ "apihelp-query+revisions-param-excludeuser": "Exclure les révisions faites par l’utilisateur.",
+ "apihelp-query+revisions-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
+ "apihelp-query+revisions-param-token": "Quels jetons obtenir pour chaque révision.",
+ "apihelp-query+revisions-example-content": "Obtenir des données avec le contenu pour la dernière révision des titres <kbd>API</kbd> et <kbd>Page principale</kbd>.",
+ "apihelp-query+revisions-example-last5": "Obtenir les 5 dernières révisions de la <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-first5": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> faites après le 01/05/2006.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> qui n’ont pas été faites par l’utilisateur anonyme <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> qui ont été faites par l’utilisateur <kbd>MédiaWiki par défaut</kbd>.",
+ "apihelp-query+revisions+base-param-prop": "Quelles propriétés obtenir pour chaque révision :\n;ids:L’ID de la révision.\n;flags:Marques de la révision (mineure).\n;timestamp:L’horodatage de la révision.\n;user:Utilisateur ayant fait la révision.\n;userid:ID de l’utilisateur ayant créé la révision.\n;size:Taille (en octets) de la révision.\n;sha1:SHA-1 (base 16) de la révision.\n;contentmodel:ID du modèle de contenu de la révision.\n;comment:Commentaire par l’utilisateur de la révision.\n;parsedcomment:Commentaire analysé par l’utilisateur de la révision.\n;content:Texte de la révision.\n;tags:Balises de la révision.",
+ "apihelp-query+revisions+base-param-limit": "Limiter le nombre de révisions retournées.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Développer les modèles dans le contenu de la révision (nécessite $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Générer l’arbre d’analyse XML pour le contenu de la révision (nécessite $1prop=content).",
+ "apihelp-query+revisions+base-param-parse": "Analyser le contenu de la révision (nécessite $1prop=content). Pour des raisons de performance, si cette option est utilisée, $1limit est forcé à 1.",
+ "apihelp-query+revisions+base-param-section": "Récupérer uniquement le contenu de ce numéro de section.",
+ "apihelp-query+revisions+base-param-diffto": "ID de révision à comparer à chaque révision. Utiliser <kbd>prev</kbd>, <kbd>next</kbd> et <kbd>cur</kbd> pour la version précédente, suivante et actuelle respectivement.",
+ "apihelp-query+revisions+base-param-difftotext": "Texte auquel comparer chaque révision. Compare uniquement un nombre limité de révisions. Écrase <var>$1diffto</var>. Si <var>$1section</var> est positionné, seule cette section sera comparée avec ce texte",
+ "apihelp-query+revisions+base-param-contentformat": "Format de sérialisation utilisé pour <var>$1difftotext</var> et attendu pour la sortie du contenu.",
+ "apihelp-query+search-description": "Effectuer une recherche en texte intégral.",
+ "apihelp-query+search-param-search": "Rechercher les titres (ou le contenu) de toutes les pages ayant cette valeur.",
+ "apihelp-query+search-param-namespace": "Rechercher uniquement dans ces espaces de nom.",
+ "apihelp-query+search-param-what": "Quel type de recherche effectuer.",
+ "apihelp-query+search-param-info": "Quelles métadonnées renvoyer.",
+ "apihelp-query+search-param-prop": "Quelles propriétés renvoyer :\n;size:Ajoute la taille de la page en octets.\n;wordcount:Ajoute le nombre de mots de la page.\n;timestamp:Ajoute l’horodatage de la dernière modification de la page.\n;snippet:Ajoute un extrait analysé de la page.\n;titlesnippet:Ajoute un extrait analysé du titre de la page.\n;redirectsnippet:Ajoute un extrait analysé du titre de la redirection.\n;redirecttitle:Ajoute le titre de la redirection correspondante.\n;sectionsnippet:Ajoute un extrait analysé du titre de la section correspondante.\n;sectiontitle:Ajoute le titre de la section correspondante.\n;score:<span class=\"apihelp-deprecated\">Obsolète et ignoré.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Obsolète et ignoré.</span>",
+ "apihelp-query+search-param-limit": "Combien de pages renvoyer au total.",
+ "apihelp-query+search-param-interwiki": "Inclure les résultats interwiki dans la recherche, s’ils sont disponibles.",
+ "apihelp-query+search-param-backend": "Quel serveur de recherche utiliser, si ce n’est pas celui par défaut.",
+ "apihelp-query+search-example-simple": "Rechercher <kbd>signification </kbd>.",
+ "apihelp-query+search-example-text": "Rechercher des textes pour <kbd>signification</kbd>.",
+ "apihelp-query+search-example-generator": "Obtenir les informations sur les pages renvoyées par une recherche de <kbd>signification</kbd>.",
+ "apihelp-query+siteinfo-description": "Renvoyer les informations générales sur le site.",
+ "apihelp-query+siteinfo-param-prop": "Quelles informations obtenir :\n;general:Information globale du système.\n;namespaces:Liste des espaces de nom déclarés et leur nom canonique.\n;namespacealiases:Liste des alias des espaces de nom déclarés.\n;specialpagealiases:Liste des alias des pages spéciales.\n;magicwords:Liste des mots magiques et leurs alias.\n;statistics:Renvoie les statistiques du site.\n;interwikimap:Renvoie la correspondance interwiki (éventuellement filtrée, éventuellement localisée en utilisant <var>$1inlanguagecode</var>).\n;dbrepllag:Renvoie le serveur de base de donnée avec la plus grande latence de réplication.\n;usergroups:Renvoie les groupes utilisateur et les droits associés.\n;libraries:Renvoie les bibliothèques installées sur le wiki.\n;extensions:Renvoie les extensions installées sur le wiki.\n;fileextensions:Renvoie la liste des extensions de fichier autorisées au téléchargement.\n;rightsinfo:Renvoie l’information sur les droits du wiki (sa licence), si elle est disponible.\n;restrictions:Renvoie l’information sur les types de restriction disponibles (protection).\n;languages:Renvoie une liste des langues que supporte MédiaWiki (éventuellement localisé en utilisant <var>$1inlanguagecode</var>).\n;skins:Renvoie une liste de tous les habillages activés (éventuellement localisé en utilisant <var>$1inlanguagecode</var>, sinon dans la langue du contenu).\n;extensiontags:Renvoie une liste des balises d’extension de l’analyseur.\n;functionhooks:Renvoie une liste des accroches de fonction de l’analyseur.\n;showhooks:Renvoie une liste de toutes les accroches souscrites (contenu de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).\n;variables:Renvoie une liste des IDs de variable.\n;protocols:Renvoie une liste des protocoles qui sont autorisés dans les liens externes.\n;defaultoptions:Renvoie les valeurs par défaut pour les préférences utilisateur.",
+ "apihelp-query+siteinfo-param-filteriw": "Renvoyer uniquement les entrées locales ou uniquement les non locales de la correspondance interwiki.",
+ "apihelp-query+siteinfo-param-showalldb": "Lister tous les serveurs de base de données, pas seulement celui avec la plus grande latence.",
+ "apihelp-query+siteinfo-param-numberingroup": "Liste le nombre d’utilisateurs dans les groupes.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Code de langue pour les noms de langue localisés (du mieux possible) et les noms d’habillage.",
+ "apihelp-query+siteinfo-example-simple": "Extraire les informations du site",
+ "apihelp-query+siteinfo-example-interwiki": "Extraire une liste des préfixes interwiki locaux",
+ "apihelp-query+siteinfo-example-replag": "Vérifier la latence de réplication actuelle",
+ "apihelp-query+stashimageinfo-description": "Renvoie les informations de fichier des fichiers mis en réserve.",
+ "apihelp-query+stashimageinfo-param-filekey": "Clé qui identifie un téléchargement précédent qui a été temporairement mis en réserve.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias pour $1filekey, pour la compatibilité descendante.",
+ "apihelp-query+stashimageinfo-example-simple": "Renvoie les informations sur un fichier mis en réserve.",
+ "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis en réserve",
+ "apihelp-query+tags-description": "Lister les balises de modification.",
+ "apihelp-query+tags-param-limit": "Le nombre maximal de balises à lister.",
+ "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :\n;name:Ajoute le nom de la balise.\n;displayname:Ajoute le message système pour la balise.\n;description:Ajoute la description de la balise.\n;hitcount:Ajoute le nombre de révisions et d’entrées du journal qui ont cette balise.\n;defined:Indique si la balise est définie.\n;source:Obtient les sources de la balise, ce qui comprend <samp>extension</samp> pour les balises définies par une extension et <samp>manual</samp> pour les balises pouvant être appliquées manuellement par les utilisateurs.\n;active:Si la balise est encore appliquée.",
+ "apihelp-query+tags-example-simple": "Lister les balises disponibles",
+ "apihelp-query+templates-description": "Renvoie toutes les pages incluses dans les pages fournies.",
+ "apihelp-query+templates-param-namespace": "Afficher les modèles uniquement dans ces espaces de nom.",
+ "apihelp-query+templates-param-limit": "Combien de modèles renvoyer.",
+ "apihelp-query+templates-param-templates": "Lister uniquement ces modèles. Utile pour vérifier si une certaine page utilise un modèle donné.",
+ "apihelp-query+templates-param-dir": "La direction dans laquelle lister.",
+ "apihelp-query+templates-example-simple": "Obtenir les modèles utilisés sur la page <kbd>Accueil</kbd>.",
+ "apihelp-query+templates-example-generator": "Obtenir des informations sur les pages modèle utilisé sur <kbd>Main Page</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Obtenir les pages des espaces de nom {{ns:user}} et {{ns:template}} qui sont inclues dans la page <kdb>Main Page<kdb>.",
+ "apihelp-query+tokens-description": "Récupère les jetons pour les actions de modification de données.",
+ "apihelp-query+tokens-param-type": "Types de jeton à demander.",
+ "apihelp-query+tokens-example-simple": "Récupérer un jeton csrf (par défaut)",
+ "apihelp-query+tokens-example-types": "Récupérer un jeton de suivi et un de patrouille",
+ "apihelp-query+transcludedin-description": "Trouver toutes les pages qui incluent les pages données.",
+ "apihelp-query+transcludedin-param-prop": "Quelles propriétés obtenir :\n;pageid:ID de page de chaque page.\n;title:Titre de chaque page.\n;redirect:Marque si cette page est une redirection.",
+ "apihelp-query+transcludedin-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
+ "apihelp-query+transcludedin-param-limit": "Combien en renvoyer.",
+ "apihelp-query+transcludedin-param-show": "Afficher uniquement les éléments qui correspondent à ces critères:\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.",
+ "apihelp-query+transcludedin-example-simple": "Obtenir une liste des pages incluant <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Obtenir des informations sur les pages incluant <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-description": "Obtenir toutes les modifications par un utilisateur.",
+ "apihelp-query+usercontribs-param-limit": "Le nombre maximal de contributions à renvoyer.",
+ "apihelp-query+usercontribs-param-start": "L’horodatage auquel démarrer le retour.",
+ "apihelp-query+usercontribs-param-end": "L’horodatage auquel arrêter le retour.",
+ "apihelp-query+usercontribs-param-user": "Les utilisateurs pour lesquels récupérer les contributions.",
+ "apihelp-query+usercontribs-param-userprefix": "Récupérer les contributions pour tous les utilisateurs dont les noms commencent par cette valeur. Écrase $1user.",
+ "apihelp-query+usercontribs-param-namespace": "Lister uniquement les contributions dans ces espaces de nom.",
+ "apihelp-query+usercontribs-param-prop": "Inclure des informations supplémentaires:\n;ids:Ajoute l’ID de page et l’ID de révision.\n;title:Ajoute le titre et l’ID d’espace de noms de la page.\n;timestamp:Ajoute l’horodatage de la modification.\n;comment:Ajoute le commentaire de la modification.\n;parsedcomment:Ajoute le commentaire analysé de la modification.\n;size:Ajoute la nouvelle taille de la modification.\n;sizediff:Ajoute le delta de taille de la modification par rapport à son parent.\n;flags:Ajoute les marques de la modification.\n;patrolled:Marque les modifications patrouillées.\n;tags:Liste les balises de la modification.",
+ "apihelp-query+usercontribs-param-show": "Afficher uniquement les éléments correspondant à ces critères, par ex. les modifications non mineures uniquement : <kbd>$2show=!minor</kbd>.\n\nSi <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd> est positionné, les révisions plus anciennes que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|seconde|secondes}}) ne seront pas affichées.",
+ "apihelp-query+usercontribs-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
+ "apihelp-query+usercontribs-param-toponly": "Lister uniquement les modifications qui sont la dernière révision.",
+ "apihelp-query+usercontribs-example-user": "Afficher les contributions de l'utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Afficher les contributions de toutes les adresses IP avec le préfixe <kbd>192.0.2.</kbd>.",
+ "apihelp-query+userinfo-description": "Obtenir de l’information sur l’utilisateur courant.",
+ "apihelp-query+userinfo-param-prop": "Quelles informations inclure :\n;blockinfo:Marque si l’utilisateur actuel est bloqué, par qui, et pour quelle raison.\n;hasmsg:Ajoute une balise <samp>message</samp> si l’utilisateur actuel a des messages en cours.\n;groups:Liste tous les groupes auxquels appartient l’utilisateur actuel.\n;implicitgroups:Liste tous les groupes dont l’utilisateur actuel est automatiquement membre.\n;rights:Liste tous les droits qu’a l’utilisateur actuel.\n;changeablegroups:Liste les groupes pour lesquels l’utilisateur actuel peut ajouter ou supprimer.\n;options:Liste toutes les préférences qu’a défini l’utilisateur actuel.\n;preferencestoken:<span class=\"apihelp-deprecated\">Obsolete.</span> Obtient un jeton pour modifier les préférences de l’utilisateur actuel.\n;editcount:Ajoute le compteur de modifications de l’utilisateur actuel.\n;ratelimits:Liste toutes les limites de débit s’appliquant à l’utilisateur actuel.\n;realname:Ajoute le vrai nom de l’utilisateur actuel.\n;email:Ajoute l’adresse de courriel de l’utilisateur et sa date d’authentification.\n;acceptlang:Renvoie en écho l’entête <code>Accept-Language</code> envoyé par le client dans un format structuré.\n;registrationdate:Ajoute la date d’inscription de l’utilisateur.\n;unreadcount:Ajoute le compteur de pages non lues de la liste de suivi de l’utilisateur (au maximum $1 ; renvoie <samp>$2</samp> s’il y en a plus).",
+ "apihelp-query+userinfo-example-simple": "Obtenir de l’information sur l’utilisateur actuel",
+ "apihelp-query+userinfo-example-data": "Obtenir des informations supplémentaires sur l’utilisateur actuel",
+ "apihelp-query+users-description": "Obtenir des information sur une liste d’utilisateurs",
+ "apihelp-query+users-param-prop": "Quelles informations inclure :\n;blockinfo:Marque si l’utilisateur est bloqué, par qui, et pour quelle raison.\n;groups:Liste tous les groupes auquel appartient chaque utilisateur.\n;implicitgroups:Liste tous les groupes dont un utilisateur est automatiquement membre.\n;rights:Liste tous les droits qu’a un utilisateur.\n;editcount:Ajoute le compteur de modifications de l’utilisateur.\n;registration:Ajoute l’horodatage d’inscription de l’utilisateur.\n;emailable:Marque si l’utilisateur peut et veut recevoir des courriels via [[Special:Emailuser]].\n;gender:Marque le sexe de l’utilisateur. Renvoie « male », « female », ou « unknown ».",
+ "apihelp-query+users-param-users": "Une liste des utilisateurs sur lesquels obtenir de l’information.",
+ "apihelp-query+users-param-token": "Utiliser plutôt <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-query+users-example-simple": "Renvoyer des informations pour l'utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-query+watchlist-description": "Obtenir les modifications récentes des pages dans la liste de suivi de l’utilisateur actuel.",
+ "apihelp-query+watchlist-param-allrev": "Inclure les multiples révisions de la même page dans l’intervalle de temps fourni.",
+ "apihelp-query+watchlist-param-start": "L’horodatage auquel démarrer l’énumération.",
+ "apihelp-query+watchlist-param-end": "L’horodatage auquel arrêter l’énumération.",
+ "apihelp-query+watchlist-param-namespace": "Filtrer les modifications aux seuls espaces de nom fournis.",
+ "apihelp-query+watchlist-param-user": "Lister uniquement les modifications par cet utilisateur.",
+ "apihelp-query+watchlist-param-excludeuser": "Ne pas lister les modifications faites par cet utilisateur.",
+ "apihelp-query+watchlist-param-limit": "Combien de résultats au total renvoyer par demande.",
+ "apihelp-query+watchlist-param-prop": "Quels éléments supplémentaires obtenir :\n;ids:Ajoute les IDs de révision et de page.\n;title:Ajoute le titre de la page.\n;flags:Ajoute les marques de la modification.\n;user:Ajoute l’utilisateur ayant fait la modification.\n;userid:Ajoute l’ID de l’utilisateur ayant fait la modification.\n;comment:Ajoute le commentaire de la modification.\n;parsedcomment:Ajoute le commentaire analysé de la modification.\n;timestamp:Ajoute l’horodatage de la modification.\n;patrol:Marque les modifications patrouillées.\n;sizes:Ajoute les ancienne et nouvelle tailles de la page.\n;notificationtimestamp:Ajoute l’horodatage de quand l’utilisateur a été notifié de la modification la dernière fois.\n;loginfo:Ajoute l’information du journal quand c’est approprié.",
+ "apihelp-query+watchlist-param-show": "Afficher uniquement les éléments qui correspondent à ces critères. Par exemple, pour voir uniquement les modifications mineures faites par des utilisateurs connectés, mettre $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Quels types de modification afficher :\n;edit:Modifications de page normale.\n;external:Modifications externes.\n;new:Créations de page.\n;log:Entrées du journal.",
+ "apihelp-query+watchlist-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
+ "apihelp-query+watchlist-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilsiateur) pour autoriser l’accès à la liste de suivi d&un autre utilisateur.",
+ "apihelp-query+watchlist-example-simple": "Lister la révision de tête des pages récemment modifiées dans la liste de suivi de l’utilisateur actuel",
+ "apihelp-query+watchlist-example-props": "Chercher des informations supplémentaires sur la révision de tête des pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
+ "apihelp-query+watchlist-example-allrev": "Chercher les informations sur toutes les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
+ "apihelp-query+watchlist-example-generator": "Chercher l’information de la page sur les pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
+ "apihelp-query+watchlist-example-generator-rev": "Chercher l’information de la révision pour les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
+ "apihelp-query+watchlist-example-wlowner": "Lister la révision de tête des pages récemment modifiées de la liste de suivi de l'utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-query+watchlistraw-description": "Obtenir toutes les pages de la liste de suivi de l’utilisateur actuel.",
+ "apihelp-query+watchlistraw-param-namespace": "Lister uniquement les pages dans les espaces de nom fournis.",
+ "apihelp-query+watchlistraw-param-limit": "Combien de résultats renvoyer au total par requête.",
+ "apihelp-query+watchlistraw-param-prop": "Quelles propriétés supplémentaires obtenir :\n;changed:Ajoute l’horodatage de la dernière notification de l’utilisateur à propos de la modification.",
+ "apihelp-query+watchlistraw-param-show": "Lister uniquement les éléments correspondant à ces critères.",
+ "apihelp-query+watchlistraw-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
+ "apihelp-query+watchlistraw-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilisateur) pour permettre l’accès à la liste de suivi d’un autre utilisateur.",
+ "apihelp-query+watchlistraw-example-simple": "Lister les pages dans la liste de suivi de l’utilisateur actuel",
+ "apihelp-query+watchlistraw-example-generator": "Chercher l’information sur les pages de la liste de suivi de l’utilisateur actuel",
+ "apihelp-revisiondelete-description": "Supprimer et annuler la suppression des révisions.",
+ "apihelp-revisiondelete-param-type": "Type de suppression de révision en cours de traitement.",
+ "apihelp-revisiondelete-param-target": "Titre de page pour la suppression de révision, s’il est nécessaire pour le type.",
+ "apihelp-revisiondelete-param-ids": "Identifiants pour les révisions à supprimer.",
+ "apihelp-revisiondelete-param-hide": "Quoi masquer pour chaque révision.",
+ "apihelp-revisiondelete-param-show": "Quoi démasquer pour chaque révision",
+ "apihelp-revisiondelete-param-suppress": "S’il faut supprimer les données aux administrateurs comme aux autres.",
+ "apihelp-revisiondelete-param-reason": "Motif de suppression ou d’annulation de suppression.",
+ "apihelp-revisiondelete-example-revision": "Masquer le contenu de la révision <kbd>12345</kbd> de la page <kbd>Main Page</kbd>",
+ "apihelp-revisiondelete-example-log": "Masquer toutes les données de l’entrée de journal <kbd>67890</kbd> avec le motif <kbd>Violation de Biographie de Personne Vivante</kbd>.",
+ "apihelp-rollback-description": "Annuler la dernière modification de la page.\n\nSi le dernier utilisateur à avoir modifié la page a fait plusieurs modifications sur une ligne, elles seront toutes annulées.",
+ "apihelp-rollback-param-title": "Titre de la page à restaurer. Impossible à utiliser avec <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "ID de la page à restaurer. Impossible à utiliser avec <var>$1title</var>.",
+ "apihelp-rollback-param-user": "Nom de l’utilisateur dont les modifications doivent être annulées.",
+ "apihelp-rollback-param-summary": "Personnaliser le résumé de la modification. S’il est vide, le résumé par défaut sera utilisé.",
+ "apihelp-rollback-param-markbot": "Marquer les modifications annulées et les modifications annulées comme robot.",
+ "apihelp-rollback-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.",
+ "apihelp-rollback-example-simple": "Annuler les dernières modifications à [<kbd>Main Page</kbd> par l’utilisateur <kbd>Exemple</kbd>.",
+ "apihelp-rollback-example-summary": "Annuler les dernières modifications de la page <kbd>Main Page</kbd> par l’utilisateur à l’adresse IP <kbd>192.0.2.5</kbd> avec le résumé <kbd>Annulation de vandalisme<kbd>, et marquer ces modifications et l’annulation comme modifications de robots.",
+ "apihelp-rsd-description": "Exporter un schéma RSD (Découverte Très Simple).",
+ "apihelp-rsd-example-simple": "Exporter le schéma RSD",
+ "apihelp-setnotificationtimestamp-description": "Mettre à jour l’horodatage de notification pour les pages suivies.\n\nCela affecte la mise en évidence des pages modifiées dans la liste de suivi et l’historique, et l’envoi de courriel quand la préférence « M’envoyer un courriel quand une page de ma liste de suivi est modifiée » est activée.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Travailler sur toutes les pages suivies.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Horodatage auquel dater la notification.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Révision pour laquelle fixer l’horodatage de notification (une page uniquement).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Révision pour fixer l’horodatage de notification plus récent (une page uniquement).",
+ "apihelp-setnotificationtimestamp-example-all": "Réinitialiser l’état de notification pour toute la liste de suivi",
+ "apihelp-setnotificationtimestamp-example-page": "Réinitialiser l’état de notification pour la <kbd>Page principale<kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fixer l’horodatage de notification pour <kbd>Page principale</kbd> afin que toutes les modifications depuis le 1 janvier 2012 soient non vues",
+ "apihelp-setnotificationtimestamp-example-allpages": "Réinitialiser l’état de notification sur les pages dans l’espace de noms <kbd>{{ns:user}}</kbd>.",
+ "apihelp-tokens-description": "Obtenir les jetons pour les actions modifiant les données.\n\nCe module est obsolète, remplacé par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Types de jeton à demander.",
+ "apihelp-tokens-example-edit": "Récupérer un jeton de modification (par défaut).",
+ "apihelp-tokens-example-emailmove": "Récupérer un jeton de courriel et un jeton de déplacement.",
+ "apihelp-unblock-description": "Débloquer un utilisateur.",
+ "apihelp-unblock-param-id": "ID du blocage à lever (obtenu via <kbd>list=blocks</kbd>). Impossible à utiliser avec <var>$1user</var>.",
+ "apihelp-unblock-param-user": "Nom d’utilisateur, adresse IP ou plage d’adresse IP à débloquer. Impossible à utiliser avec <var>$1id</var>.",
+ "apihelp-unblock-param-reason": "Motif de déblocage.",
+ "apihelp-unblock-example-id": "Lever le blocage d’ID #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Débloquer l’utilisateur <kbd>Bob</kbd> avec le motif <kbd>Désolé Bob</kbd>.",
+ "apihelp-undelete-description": "Restaurer les révisions d’une page supprimée.\n\nUne liste des révisions supprimées (avec les horodatages) peut être récupérée via [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], et une liste d’IDs de fichier supprimé peut être récupérée via [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Titre de la page à restaurer.",
+ "apihelp-undelete-param-reason": "Motif de restauration.",
+ "apihelp-undelete-param-timestamps": "Horodatages des révisions à restaurer. Si <var>$1timestamps</var> et <var>$1fileids</var> sont vides, toutes seront restaurées.",
+ "apihelp-undelete-param-fileids": "IDs des révisions de fichier à restaurer. Si <var>$1timestamps</var> et <var>$1fileids</var> sont vides, toutes seront restaurées.",
+ "apihelp-undelete-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.",
+ "apihelp-undelete-example-page": "Annuler la suppression de la page <kbd>Main Page</kbd>.",
+ "apihelp-undelete-example-revisions": "Annuler la suppression de deux révisions de la page <kbd>Main Page</kbd>.",
+ "apihelp-upload-description": "Télécharger un fichier, ou obtenir l’état des téléchargements en cours.\n\nPlusieurs méthodes sont disponibles :\n* Télécharger directement le contenu du fichier, en utilisant le paramètre <var>$1file</var>.\n* Télécharger le fichier par morceaux, en utilsiant les paramètres <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var>.* Pour que le serveur MédiaWiki cherche un fichier depuis une URL, utiliser le paramètre <var>$1url</var>.\n* Terminer un téléchargement précédent qui a échoué à cause d’avertissements, en utilisant le paramètre <var>$1filekey</var>.\nNoter que le POST HTTP doit être fait comme un téléchargement de fichier (par ex. en utilisant <code>multipart/form-data</code>) en envoyant le <code>multipart/form-data</code>.",
+ "apihelp-upload-param-filename": "Nom de fichier cible.",
+ "apihelp-upload-param-comment": "Télécharger le commentaire. Utilisé aussi comme texte de la page initiale pour les nouveaux fichiers si <var>$1text</var> n’est pas spécifié.",
+ "apihelp-upload-param-text": "Texte de page initiale pour les nouveaux fichiers.",
+ "apihelp-upload-param-watch": "Suivre la page.",
+ "apihelp-upload-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l’utilisateur actuel, utiliser les préférences ou ne pas changer le suivi.",
+ "apihelp-upload-param-ignorewarnings": "Ignorer tous les avertissements.",
+ "apihelp-upload-param-file": "Contenu du fichier.",
+ "apihelp-upload-param-url": "URL où chercher le fichier.",
+ "apihelp-upload-param-filekey": "Clé identifiant un téléchargement précédent temporairement mis en attente.",
+ "apihelp-upload-param-sessionkey": "Comme $1filekey, conservé pour des raisons de compatibilité descendante.",
+ "apihelp-upload-param-stash": "Si positionné, le serveur conservera temporairement le fichier au lieu de l’ajouter au dépôt.",
+ "apihelp-upload-param-filesize": "Taille du fichier de tout le téléchargement.",
+ "apihelp-upload-param-offset": "Décalage du bloc en octets.",
+ "apihelp-upload-param-chunk": "Partie du contenu.",
+ "apihelp-upload-param-async": "Faire de façon asynchrone les grosses opérations sur les fichiers quand c’est possible.",
+ "apihelp-upload-param-asyncdownload": "Faire de façon asynchrone la recherche d’une URL.",
+ "apihelp-upload-param-leavemessage": "Si asyncdownload est utilisé, laisser un message sur la page de discussion de l’utilisateur quand c’est terminé.",
+ "apihelp-upload-param-statuskey": "Récupérer l’état de téléchargement pour cette clé de fichier (téléchargé par URL).",
+ "apihelp-upload-param-checkstatus": "Récupérer uniquement l’état de téléchargement pour la clé de fichier donnée.",
+ "apihelp-upload-example-url": "Télécharger depuis une URL",
+ "apihelp-upload-example-filekey": "Terminer un téléchargement qui a échoué à cause d’avertissements",
+ "apihelp-userrights-description": "Modifier l’appartenance d’un utilisateur à un groupe.",
+ "apihelp-userrights-param-user": "Nom d’utilisateur.",
+ "apihelp-userrights-param-userid": "ID de l’utilisateur.",
+ "apihelp-userrights-param-add": "Ajouter l’utilisateur à ces groupes.",
+ "apihelp-userrights-param-remove": "Supprimer l’utilisateur de ces groupes.",
+ "apihelp-userrights-param-reason": "Motif pour la modification.",
+ "apihelp-userrights-example-user": "Ajouter l’utilisateur <kbd>FooBot</kbd> au groupe <kbd>robot</kbd>, et le supprimer des groupes <kbd>sysop</kbd> et <kbd>bureaucrate</kbd>.",
+ "apihelp-userrights-example-userid": "Ajouter l’utilisateur d’ID <kbd>123</kbd> au groupe <kbd>robot</kbd>, et le supprimer des groupes <kbd>sysop</kbd> et <kbd>bureaucrate</kbd>.",
+ "apihelp-watch-description": "Ajouter ou supprimer des pages de la liste de suivi de l’utilisateur actuel.",
+ "apihelp-watch-param-title": "La page à (ne plus) suivre. Utiliser plutôt <var>$1titles</var>.",
+ "apihelp-watch-param-unwatch": "Si défini, la page ne sera plus suivie plutôt que suivie.",
+ "apihelp-watch-example-watch": "Suivre la page <kbd>Page principale</kbd>.",
+ "apihelp-watch-example-unwatch": "Ne plus suivre la page <kbd>Page principale</kbd>.",
+ "apihelp-watch-example-generator": "Suivre les quelques premières pages de l’espace de nom principal",
+ "apihelp-format-example-generic": "Mettre en forme le résultat de la requête dans le format $1",
+ "apihelp-dbg-description": "Extraire les données au format de <code>var_export()</code> de PHP.",
+ "apihelp-dbgfm-description": "Extraire les données au format de <code>var_export()</code> de PHP (affiché proprement en HTML).",
+ "apihelp-dump-description": "Extraire les données au format de <code>var_dump()</code> de PHP.",
+ "apihelp-dumpfm-description": "Extraire les données au format de <code>var_dump()</code> de PHP (affiché proprement en HTML).",
+ "apihelp-json-description": "Extraire les données au format JSON.",
+ "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.",
+ "apihelp-jsonfm-description": "Extraire les données au format JSON (affiché proprement en HTML).",
+ "apihelp-none-description": "Ne rien extraire.",
+ "apihelp-php-description": "Extraire les données au format sérialisé de PHP.",
+ "apihelp-phpfm-description": "Extraire les données au format sérialisé de PHP (affiché proprement en HTML).",
+ "apihelp-rawfm-description": "Extraire les données avec les éléments de débogage au format JSON (affiché proprement en HTML).",
+ "apihelp-txt-description": "Extraire les données au format de <code>print_r()</code> de PHP.",
+ "apihelp-txtfm-description": "Extraire les données au format de <code>print_r()</code> de PHP (affiché proprement en HTML).",
+ "apihelp-wddx-description": "Extraire les données au format WDDX.",
+ "apihelp-wddxfm-description": "Extraire les données au format WDDX (affiché proprement en HTML).",
+ "apihelp-xml-description": "Extraire les données au format XML.",
+ "apihelp-xml-param-xslt": "Si spécifié, ajoute la page nommée comme une feuille de style XSL. La valeur doit être un titre dans l’espace de noms {{ns:mediawiki}} se terminant par <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Si spécifié, ajoute un espace de noms XML.",
+ "apihelp-xmlfm-description": "Extraire les données au format XML (affiché proprement en HTML).",
+ "apihelp-yaml-description": "Extraire les données au format YAML.",
+ "apihelp-yamlfm-description": "Extraire les données YAML (affiché proprement en HTML).",
+ "api-format-title": "Résultat de l’API de MédiaWiki",
+ "api-format-prettyprint-header": "Voici la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre <var>format</var> pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez <kbd>format=$2</kbd>.\n\nVoyez la [[mw:API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
+ "api-orm-param-props": "Champs à rechercher.",
+ "api-orm-param-limit": "Nombre maximal de lignes à renvoyer.",
+ "api-pageset-param-titles": "Une liste des titres sur lesquels travailler.",
+ "api-pageset-param-pageids": "Une liste des IDs de page sur lesquelles travailler.",
+ "api-pageset-param-revids": "Une liste des IDs de révision sur lesquelles travailler.",
+ "api-pageset-param-generator": "Obtenir la liste des pages sur lesquelles travailler en exécutant le module de recherche spécifié.\n\n<strong>NOTE :<strong> les noms de paramètre du générateur doivent être préfixés avec un « g », voir les exemples.",
+ "api-pageset-param-redirects-generator": "Résoudre automatiquement les redirections dans <var>$1titles</var>, <var>$1pageids</var> et <var>$1revids</var>, et dans les pages renvoyées par <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Résoudre automatiquement les redirections dans <var>$1titles</var>, <var>$1pageids</var> et <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Convertir les titres dans d’autres variantes si nécessaire. Fonctionne uniquement si la langue de contenu du wiki supporte la conversion en variantes. Les langues qui supportent la conversion en variante incluent $1.",
+ "api-help-title": "Aide de l’API de MediaWiki",
+ "api-help-lead": "Ceci est une page d’aide de l’API de MédiaWiki générée automatiquement.\n\nDocumentation et exemples : https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Module principal",
+ "api-help-flag-deprecated": "Ce module est obsolète.",
+ "api-help-flag-internal": "<strong>Ce module est interne ou instable.</strong> Son fonctionnement peut être modifié sans préavis.",
+ "api-help-flag-readrights": "Ce module nécessite des droits de lecture.",
+ "api-help-flag-writerights": "Ce module nécessite des droits d’écriture.",
+ "api-help-flag-mustbeposted": "Ce module n’accepte que les requêtes POST.",
+ "api-help-flag-generator": "Ce module peut être utilisé comme générateur.",
+ "api-help-parameters": "{{PLURAL:$1|Paramètre|Paramètres}} :",
+ "api-help-param-deprecated": "Obsolète.",
+ "api-help-param-required": "Ce paramètre est obligatoire.",
+ "api-help-param-list": "{{PLURAL:$1|1=Une valeur|2=Valeurs (séparées par <kbd>{{!}}</kbd>)}} : $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Doit être vide|Peut être vide, ou $2}}",
+ "api-help-param-limit": "Pas plus de $1 autorisé.",
+ "api-help-param-limit2": "Pas plus de $1 autorisé ($2 pour les robots).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=La valeur doit être inférieure|2=Les valeurs doivent être inférieures}} à $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=La valeur ne doit pas être supérieure|2=Les valeurs ne doivent pas être supérieures}} à $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=La valeur doit|2=Les valeurs doivent}} être entre $2 et $3.",
+ "api-help-param-upload": "Doit être envoyé comme un fichier importé utilisant multipart/form-data.",
+ "api-help-param-multi-separate": "Valeurs séparées par <kbd>|</kbd>.",
+ "api-help-param-multi-max": "Le nombre maximal de valeurs est {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} pour les robots).",
+ "api-help-param-default": "Par défaut : $1",
+ "api-help-param-default-empty": "Par défaut : <span class=\"apihelp-empty\">(vide)</span>",
+ "api-help-param-token": "Un jeton « $1 » récupéré par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "Pour rester compatible, le jeton utilisé dans l’IHM web est aussi accepté.",
+ "api-help-param-disabled-in-miser-mode": "Désactivé à cause du [[mw:Manual:$wgMiserMode|mode minimal]].",
+ "api-help-param-limited-in-miser-mode": "<strong>NOTE :</strong> Du fait du [[mw:Manual:$wgMiserMode|mode minimal]], utiliser cela peut aboutir à moins de résultats que <var>$1limit</var> renvoyés avant de continuer ; dans les cas extrêmes, zéro résultats peuvent être renvoyés.",
+ "api-help-param-direction": "Dans quelle direction énumérer :\n;newer:Lister les plus anciens en premier. Note : $1start doit être avant $1end.\n;older:Lister les nouveaux en premier (par défaut). Note : $1start doit être postérieur à $1end.",
+ "api-help-param-continue": "Quand plus de résultats sont disponibles, utiliser cela pour continuer.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(aucune description)</span>",
+ "api-help-examples": "{{PLURAL:$1|Exemple|Exemples}} :",
+ "api-help-permissions": "{{PLURAL:$1|Droit|Droits}} :",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Accordé à}} : $2",
+ "api-help-right-apihighlimits": "Utiliser des valeurs plus hautes dans les requêtes de l’API (requêtes lentes : $1 ; requêtes rapides : $2). Les limites pour les requêtes lentes s’appliquent aussi aux paramètres multivalués.",
+ "api-credits-header": "Remerciements",
+ "api-credits": "Développeurs de l’API :\n* Roan Kattouw (développeur en chef Sept. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (créateur, développeur en chef Sept. 2006–Sept. 2007)\n* Brad Jorsch (développeur en chef depuis 2013)\n\nVeuillez envoyer vos commentaires, suggestions et questions à mediawiki-api@lists.wikimedia.org\nou remplir un rapport de bogue sur https://phabricator.wikimedia.org/."
+}
diff --git a/includes/api/i18n/frc.json b/includes/api/i18n/frc.json
new file mode 100644
index 00000000..05d5db2d
--- /dev/null
+++ b/includes/api/i18n/frc.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hangmanwa7id"
+ ]
+ },
+ "apihelp-block-description": "Bloquer un useur.",
+ "apihelp-createaccount-param-name": "Nom d'useur.",
+ "apihelp-createaccount-param-password": "Mot de passe (ignoré si <var>$1mailpassword</var> est défini).",
+ "apihelp-createaccount-param-domain": "Domaine pour l’authentification externe (optional).",
+ "apihelp-delete-description": "Effacer une page.",
+ "apihelp-delete-param-title": "Titre de la page que tu veux effacer. Impossible de l’user avec $1pageid.",
+ "apihelp-delete-example-simple": "Effacer la Page principale",
+ "apihelp-emailuser-description": "Emailer un useur.",
+ "apihelp-expandtemplates-param-title": "Titre de la page.",
+ "apihelp-login-param-name": "Nom d’useur.",
+ "apihelp-login-param-password": "Mot de passe.",
+ "apihelp-login-param-domain": "Domaine (optional)."
+}
diff --git a/includes/api/i18n/fy.json b/includes/api/i18n/fy.json
new file mode 100644
index 00000000..05482cfe
--- /dev/null
+++ b/includes/api/i18n/fy.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin0van0der0vliet"
+ ]
+ },
+ "apihelp-createaccount-param-name": "Brûkersnamme.",
+ "apihelp-login-param-name": "Brûkersnamme.",
+ "apihelp-login-param-password": "Wachtwurd.",
+ "apihelp-userrights-param-user": "Brûkersnamme.",
+ "api-help-param-default": "Standert: $1",
+ "api-help-param-default-empty": "Standert: <span class=\"apihelp-empty\">(leech)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(gjin beskriuwing)</span>",
+ "api-help-examples": "{{PLURAL:$1|Foarbyld|Foarbylden}}:"
+}
diff --git a/includes/api/i18n/gl.json b/includes/api/i18n/gl.json
new file mode 100644
index 00000000..065ced32
--- /dev/null
+++ b/includes/api/i18n/gl.json
@@ -0,0 +1,1030 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elisardojm",
+ "Agremon",
+ "Chairego apc",
+ "VaiPolaSombra",
+ "Banjo",
+ "Fisterraeomar"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discusión]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitudes]\n</div>\n<strong>Estado:</strong> Tódalas funcionalidades mostradas nesta páxina deberían estar funcionanado, pero a API aínda está desenrolo, e pode ser modificada en calquera momento. Apúntese na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discusión mediawiki-api-announce] para estar informado acerca das actualizacións.\n\n<strong>Solicitudes incorrectas:</strong> Cando se envían solicitudes incorrectas á API, envíase unha cabeceira HTTP coa chave \"MediaWiki-API-Error\" e, a seguir, tanto o valor da cabeceira como o código de erro retornado serán definidos co mesmo valor. Para máis información, consulte [[mw:API:Errors_and_warnings|API: Erros e avisos]].",
+ "apihelp-main-param-action": "Que acción se realizará.",
+ "apihelp-main-param-format": "O formato de saída.",
+ "apihelp-main-param-maxlag": "O retardo máximo pode usarse cando MediaWiki está instalada nun cluster de base de datos replicadas. Para gardar accións que causen calquera retardo máis de replicación do sitio, este parámetro pode facer que o cliente espere ata que o retardo de replicación sexa menor que o valor especificado. No caso de retardo excesivo, é devolto o código de erro <samp>maxlag</samp> cunha mensaxe como <samp>esperando por $host: $lag segundos de retardo</samp>.<br />Para máis información, ver [[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]].",
+ "apihelp-main-param-smaxage": "Fixar a cabeceira <code>s-maxage</code> a esos segundos. Os erros nunca se gardan na caché.",
+ "apihelp-main-param-maxage": "Fixar a cabeceira <code>max-age</code> a esos segundos. Os erros nunca se gardan na caché.",
+ "apihelp-main-param-assert": "Verificar se o usuario está conectado como <kbd>usuario</kbd> ou ten a marca de <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Calquera valor dado aquí será incluído na resposta. Pode usarse para distingir peticións.",
+ "apihelp-main-param-servedby": "Inclúa o nome do servidor que servía a solicitude nos resultados.",
+ "apihelp-main-param-curtimestamp": "Incluir a marca de tempo actual no resultado.",
+ "apihelp-main-param-origin": "Cando se accede á API usando unha petición AJAX entre-dominios (CORS), inicializar o parámetro co dominio orixe. Isto debe incluírse en calquera petición pre-flight, e polo tanto debe ser parte da petición URI (non do corpo POST). Debe coincidir exactamente cunha das orixes na cabeceira <code>Origin</code>, polo que ten que ser fixado a algo como <kbd>https://en.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Se este parámetro non coincide coa cabeceira <code>Origin</code>, devolverase unha resposta 403. Se este parámetro coincide coa cabeceira <code>Origin</code> e a orixe está na lista branca, porase unha cabeceira <code>Access-Control-Allow-Origin</code>.",
+ "apihelp-main-param-uselang": "Linga a usar para a tradución de mensaxes. Pode consultarse unha lista de códigos en <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> con <kbd>siprop=languages</kbd>, ou especificando <kbd>user</kbd> coa preferencia de lingua do usuario actual, ou especificando <kbd>content</kbd> para usar a lingua do contido desta wiki.",
+ "apihelp-block-description": "Bloquear un usuario.",
+ "apihelp-block-param-user": "Nome de usuario, dirección ou rango de IPs que quere bloquear.",
+ "apihelp-block-param-expiry": "Tempo de caducidade. Pode ser relativo (p. ex.<kbd>5 meses</kbd> ou <kbd>2 semanas</kbd>) ou absoluto (p. ex. 2014-09-18T12:34:56Z</kbd>). Se se pon kbd>infinite</kbd>, <kbd>indefinite</kbd>, ou <kbd>never</kbd>, o bloqueo nunca caducará.",
+ "apihelp-block-param-reason": "Motivo para o bloqueo.",
+ "apihelp-block-param-anononly": "Bloquear só usuarios anónimos (é dicir, desactivar edicións anónimas desta dirección IP).",
+ "apihelp-block-param-nocreate": "Previr a creación de contas.",
+ "apihelp-block-param-autoblock": "Bloquear automaticamente o último enderezo IP utilizado, e calquera outro enderezo desde o que intente conectarse.",
+ "apihelp-block-param-noemail": "Impide que o usuario envíe correos electrónicos a través da wiki. (Require o permiso <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Ocultar o nome de usuario do rexistro de bloqueos. (Precisa do permiso <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Permitir que o usuario edite a súa propia páxina de conversa (depende de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Se o usuario xa está bloqueado, sobreescribir o bloqueo existente.",
+ "apihelp-block-param-watchuser": "Vixiar a páxina de usuario ou direccións IP e a de conversa deste usuario",
+ "apihelp-block-example-ip-simple": "Bloquear dirección IP <kbd>192.0.2.5</kbd> durante tres días coa razón <kbd>Primeiro aviso</kbd>.",
+ "apihelp-block-example-user-complex": "Bloquear indefinidamente ó usuario <kbd>Vándalo</kbd> coa razón <kbd>Vandalismo</kbd>, e impedir a creación de novas contas e envío de correos electrónicos.",
+ "apihelp-checktoken-description": "Verificar a validez dun identificador de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+ "apihelp-checktoken-param-type": "Tipo de identificador a probar.",
+ "apihelp-checktoken-param-token": "Símbolo a testar",
+ "apihelp-checktoken-param-maxtokenage": "Tempo máximo autorizado para o identificador, en segundos.",
+ "apihelp-checktoken-example-simple": "Verificar a validez de un identificador <kbd>csrf</kbd>.",
+ "apihelp-clearhasmsg-description": "Limpar a bandeira <code>hasmsg</code> para o usuario actual",
+ "apihelp-clearhasmsg-example-1": "Limpar a bandeira <code>hasmsg</code> para o usuario actual",
+ "apihelp-compare-description": "Obter as diferencias entre dúas páxinas.\n\nDebe indicar un número de revisión, un título de páxina, ou un ID de páxina tanto para \"from\" como para \"to\".",
+ "apihelp-compare-param-fromtitle": "Primeiro título para comparar.",
+ "apihelp-compare-param-fromid": "Identificador da primeira páxina a comparar.",
+ "apihelp-compare-param-fromrev": "Primeira revisión a comparar.",
+ "apihelp-compare-param-totitle": "Segundo título para comparar.",
+ "apihelp-compare-param-toid": "Identificador da segunda páxina a comparar.",
+ "apihelp-compare-param-torev": "Segunda revisión a comparar.",
+ "apihelp-compare-example-1": "Mostrar diferencias entre a revisión 1 e a 2",
+ "apihelp-createaccount-description": "Crear unha nova conta de usuario.",
+ "apihelp-createaccount-param-name": "Nome de usuario.",
+ "apihelp-createaccount-param-password": "Contrasinal (ignorado se <var>$1mailpassword</var> está activo)",
+ "apihelp-createaccount-param-domain": "Dominio para autenticación externa (opcional)",
+ "apihelp-createaccount-param-token": "Símbolo de creación de conta obtido á primeira.",
+ "apihelp-createaccount-param-email": "Enderezo de correo eletrónico do usuario (opcional).",
+ "apihelp-createaccount-param-realname": "Nome real do usuario (opcional).",
+ "apihelp-createaccount-param-mailpassword": "Se se establece calquera valor, enviarase un contrasinal aleatorio ao usuario.",
+ "apihelp-createaccount-param-reason": "Razón opcional de creación da conta para gardar nos rexistros.",
+ "apihelp-createaccount-param-language": "Código de lingua para usar como defecto polo usuario (de xeito opcional, usarase a lingua por defecto)",
+ "apihelp-createaccount-example-pass": "Crear usuario <kbd>testuser</kbd> con contrasinal <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Crear usuario <kbd>testmailuser</kbd>\"testmailuser\" e enviar por correo electrónico un contrasinal xenerado de forma aleatoria.",
+ "apihelp-delete-description": "Borrar a páxina.",
+ "apihelp-delete-param-title": "Título da páxina a eliminar. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Identificador da páxina a eliminar. Non pode usarse xunto con <var>$1title</var>.",
+ "apihelp-delete-param-reason": "Razón para o borrado. Se non se indica, usarase unha razón xenerada automaticamente.",
+ "apihelp-delete-param-watch": "Engadir esta páxina á lista de vixilancia do usuario actual.",
+ "apihelp-delete-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-delete-param-unwatch": "Eliminar esta páxina da lista de vixilancia do usuario actual.",
+ "apihelp-delete-param-oldimage": "Nome da imaxe antiga a borrar como se proporciona en [[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> coa razón <kbd>Preparing for move</kbd>.",
+ "apihelp-disabled-description": "Este módulo foi desactivado.",
+ "apihelp-edit-description": "Crear e editar páxinas.",
+ "apihelp-edit-param-title": "Título da páxina que quere editar. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Identificador da páxina que quere editar. Non pode usarse xunto con <var>$1title</var>.",
+ "apihelp-edit-param-section": "Número de selección. O <kbd>0</kbd> é para a sección superior, <kbd>new</kbd> para unha sección nova.",
+ "apihelp-edit-param-sectiontitle": "Título para unha nova sección.",
+ "apihelp-edit-param-text": "Contido da páxina.",
+ "apihelp-edit-param-summary": "Resumo de edición. Tamén título de sección cando $1section=new e $1sectiontitle non está definido.",
+ "apihelp-edit-param-minor": "Edición pequena.",
+ "apihelp-edit-param-notminor": "Edición non pequena.",
+ "apihelp-edit-param-bot": "Marcar esta edición como de bot.",
+ "apihelp-edit-param-basetimestamp": "Selo de tempo da revisión de base, usado para detectar conflitos de edición. Pode obterse con [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Selo de tempo do comezo do proceso de edición, usado para detectar conflitos de edición. Pode obterse un valor axeitado usando <var>[[Special:ApiHelp/main|curtimestamp]]</var> cando se comeza o proceso de edición (p.ex. cando se carga o contido da páxina a editar).",
+ "apihelp-edit-param-recreate": "Ignorar todos os erros da páxina mentres está a ser borrada.",
+ "apihelp-edit-param-createonly": "Non editar a páxina se xa existe.",
+ "apihelp-edit-param-nocreate": "Amosar un mensaxe de erro se a páxina non existe",
+ "apihelp-edit-param-watch": "Engadir esta páxina á lista de vixilancia do usuario actual.",
+ "apihelp-edit-param-unwatch": "Eliminar esta páxina da lista de vixilancia do usuario actual.",
+ "apihelp-edit-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-edit-param-md5": "A función hash MD5 do parámetro $1text, ou dos parámetros $1prependtext e $1appendtext concatenados. Se está definida, non se fará a edición ata que a función hash sexa correcta.",
+ "apihelp-edit-param-prependtext": "Engadir este texto ao comezo da páxina. Sobreescribirase $1text.",
+ "apihelp-edit-param-appendtext": "Engadir este texto no final da páxina. Ignorar $1text.\n\nUse $1section=new para engadir unha nova sección, máis que este parámetro.",
+ "apihelp-edit-param-undo": "Desfacer esta revisión. Ignorar $1text, $1prependtext e $1appendtext.",
+ "apihelp-edit-param-undoafter": "Desfacer tódalas revisións dende $1undo ata esta. Se non está definido, só desfacer unha revisión.",
+ "apihelp-edit-param-redirect": "Resolver redireccións automáticamente",
+ "apihelp-edit-param-contentformat": "Formato de serialización de contido utilizado para o texto de entrada.",
+ "apihelp-edit-param-contentmodel": "Modelo de contido para o novo contido.",
+ "apihelp-edit-param-token": "O identificador debería enviarse empre como o último parámetro, ou polo menos despois do parámetro $1text.",
+ "apihelp-edit-example-edit": "Editar a páxina",
+ "apihelp-edit-example-prepend": "Antepor <kbd>_&#95;NOTOC_&#95;</kbd> a unha páxina.",
+ "apihelp-edit-example-undo": "Desfacer revisións 13579 a 13585 con resumo automático.",
+ "apihelp-emailuser-description": "Enviar un correo electrónico a un usuario.",
+ "apihelp-emailuser-param-target": "Usuario ó que lle mandar correo electrónico.",
+ "apihelp-emailuser-param-subject": "Asunto.",
+ "apihelp-emailuser-param-text": "Corpo do correo.",
+ "apihelp-emailuser-param-ccme": "Enviarme unha copia deste correo.",
+ "apihelp-emailuser-example-email": "Enviar un correo electrónico ó usuario <kbd>Administrador da wiki</kbd> co texto <kbd>Contido</kbd>.",
+ "apihelp-expandtemplates-description": "Expandir tódolos modelos en wikitexto.",
+ "apihelp-expandtemplates-param-title": "Título da páxina.",
+ "apihelp-expandtemplates-param-text": "Sintaxis wiki a converter.",
+ "apihelp-expandtemplates-param-revid": "ID de revisión, para <nowiki>{{REVISIONID}}</nowiki> e variables similares.",
+ "apihelp-expandtemplates-param-prop": "Pezas de información a retornar:\n;wikitext:O texto wiki expandido.\n;categories:Calquer categoría presente na entrada que non estea representada na saída do texto wiki\n;properties:Propiedades da páxina definidas por palabras máxicas expandidas no texto wiki\n;volatile:Definir se a saída é volátil e se non debe usarse noutra parte da páxina.\n;ttl:Tempo máximo a partir do cal os cachés do resultado deben invalidarse.\n;parsetree:O análise sintáctico en árbore do XML de entrada.\nTeña en conta que se non se selecciona ningún valor o resultado conterá o texto wiki, pero a saída estará nun formato desprezado.",
+ "apihelp-expandtemplates-param-includecomments": "Cando queria incluír comentarios HTML na saída.",
+ "apihelp-expandtemplates-param-generatexml": "Xenerar árbore de análise XML (reemprazado por $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Expandir o wikitexto <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-description": "Devolve a lista de contribucións dun usuario.",
+ "apihelp-feedcontributions-param-feedformat": "O formato de alimentación.",
+ "apihelp-feedcontributions-param-user": "Para que usuarios recuperar as contribucións.",
+ "apihelp-feedcontributions-param-namespace": "Que espazo de nomes filtrar polas contribucións.",
+ "apihelp-feedcontributions-param-year": "Desde o ano (e anteriores).",
+ "apihelp-feedcontributions-param-month": "Desde o mes de (e anteriores).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrar as contribucións que teñan estas etiquetas.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostrar só as contribuciones eliminadas.",
+ "apihelp-feedcontributions-param-toponly": "Mostrar só as edicións que que son as ultimas revisións.",
+ "apihelp-feedcontributions-param-newonly": "Mostrar só as edicións que crearon páxinas.",
+ "apihelp-feedcontributions-param-showsizediff": "Mostrar diferenza de tamaño entre edicións.",
+ "apihelp-feedcontributions-example-simple": "Mostrar as contribucións do usuario <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-description": "Devolve un ficheiro de cambios recentes.",
+ "apihelp-feedrecentchanges-param-feedformat": "O formato da saída.",
+ "apihelp-feedrecentchanges-param-namespace": "Espazo de nomes ó que limitar os resultados.",
+ "apihelp-feedrecentchanges-param-invert": "Tódolos nomes de espazos agás o seleccionado",
+ "apihelp-feedrecentchanges-param-associated": "Incluir o espazo de nomes asociado (conversa ou principal).",
+ "apihelp-feedrecentchanges-param-days": "Días a limitar os resultados",
+ "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados a visualizar.",
+ "apihelp-feedrecentchanges-param-from": "Mostrar modificacións desde entón.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ocultar cambios menores.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ocultar cambios feitos por bots.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ocultar os cambios realizados por usuarios anónimos.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ocultar os cambios realizados por usuarios rexistrados.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar os cambios patrullados.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ocultar os cambios realizados polo usuario actual.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por etiqueta.",
+ "apihelp-feedrecentchanges-param-target": "Mostrar só os cambios nas páxinas ligadas a esta.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Mostrar os cambios nas páxinas ligadas coa páxina seleccionada.",
+ "apihelp-feedrecentchanges-example-simple": "Mostrar os cambios recentes",
+ "apihelp-feedrecentchanges-example-30days": "Mostrar os cambios recentes limitados a 30 días",
+ "apihelp-feedwatchlist-description": "Devolve o fluxo dunha lista de vixiancia.",
+ "apihelp-feedwatchlist-param-feedformat": "O formato da saída.",
+ "apihelp-feedwatchlist-param-hours": "Lista as páxinas modificadas desde estas horas ata agora.",
+ "apihelp-feedwatchlist-param-linktosections": "Ligar directamente ás seccións modificadas se é posible.",
+ "apihelp-feedwatchlist-example-default": "Mostar o fluxo da lista de vixiancia.",
+ "apihelp-feedwatchlist-example-all6hrs": "Amosar tódolos cambios feitos ás páxinas vixiadas nas últimas 6 horas.",
+ "apihelp-filerevert-description": "Revertir o ficheiro a unha versión anterior.",
+ "apihelp-filerevert-param-filename": "Nome de ficheiro final, sen o prefixo Ficheiro:",
+ "apihelp-filerevert-param-comment": "Comentario de carga.",
+ "apihelp-filerevert-param-archivename": "Nome de ficheiro da revisión á que reverter.",
+ "apihelp-filerevert-example-revert": "Reverter <kbd>Wiki.png</kbd> á versión do <kbd>2011-03-05T15:27:40Z</kbd>.",
+ "apihelp-help-description": "Mostrar axuda para os módulos indicados.",
+ "apihelp-help-param-modules": "Módulos para mostar axuda (valores dos parámetros <var>acción</var> e <var>formato</var>, ou <kbd>principal</kbd>). Pode especificar submódulos con un <kbd>+</kbd>.",
+ "apihelp-help-param-submodules": "Incluír axuda para os submódulos do módulo nomeado.",
+ "apihelp-help-param-recursivesubmodules": "Incluír axuda para os submódulos de forma recursiva.",
+ "apihelp-help-param-helpformat": "Formato de saída da axuda.",
+ "apihelp-help-param-wrap": "Incluír a saída nunha estrutura de resposta API estándar.",
+ "apihelp-help-param-toc": "Incluír unha táboa de contidos na saída por HTML",
+ "apihelp-help-example-main": "Axuda para o módulo principal",
+ "apihelp-help-example-recursive": "Toda a axuda nunha páxina",
+ "apihelp-help-example-help": "Axuda do módulo de axuda en si",
+ "apihelp-help-example-query": "Axuda para dous submódulos de consulta.",
+ "apihelp-imagerotate-description": "Xirar unha ou máis imaxes.",
+ "apihelp-imagerotate-param-rotation": "Graos a rotar a imaxe no sentido do reloxio.",
+ "apihelp-imagerotate-example-simple": "Rotar <kbd>File:Example.png</kbd> <kbd>90</kbd> graos.",
+ "apihelp-imagerotate-example-generator": "Rotar tódalas imaxes en <kbd>Category:Flip</kbd> <kbd>180</kbd> graos",
+ "apihelp-import-description": "Importar unha páxina doutra wiki, ou nun ficheiro XML.\n\nDecátese de que o POST HTTP debe facerse como unha carga de ficheiro (p. ex. usando multipart/form-data) cando se envíe un ficheiro para o parámetro <var>xml</var>.",
+ "apihelp-import-param-summary": "Resume de importación.",
+ "apihelp-import-param-xml": "Subido ficheiro XML.",
+ "apihelp-import-param-interwikisource": "Para importacións interwiki: wiki da que importar.",
+ "apihelp-import-param-interwikipage": "Para importacións interwiki: páxina a importar.",
+ "apihelp-import-param-fullhistory": "Para importacións interwiki: importar o historial completo, non só a versión actual.",
+ "apihelp-import-param-templates": "Para importacións interwiki: importar tódolos modelos incluídos.",
+ "apihelp-import-param-namespace": "Para importacións interwiki: importar a este espazo de nomes.",
+ "apihelp-import-param-rootpage": "Importar como subpáxina desta páxina.",
+ "apihelp-import-example-import": "Importar [[meta:Help:Parserfunctions]] ó espazo de nomes 100 con todo o historial.",
+ "apihelp-login-description": "No caso dunha conexión correcta, as cookies necesarias incluiranse nas cabeceiras HTTP de resposta. No caso dunha conexión fallida, os intentos posteriores poden ser reducidos para limitar ataques automaticos de roubo de contrasinais.",
+ "apihelp-login-param-name": "Nome de usuario.",
+ "apihelp-login-param-password": "Contrasinal",
+ "apihelp-login-param-domain": "Dominio (opcional).",
+ "apihelp-login-param-token": "Identificador de conexión obtido na primeira petición.",
+ "apihelp-login-example-gettoken": "Recuperar un identificador de conexión.",
+ "apihelp-login-example-login": "Identificarse",
+ "apihelp-logout-description": "Terminar e limpar datos de sesión.",
+ "apihelp-logout-example-logout": "Cerrar a sesión do usuario actual",
+ "apihelp-managetags-description": "Realizar tarefas de xestión relacionadas coa modificación de etiquetas.",
+ "apihelp-managetags-param-operation": "Que operación realizar:\n;create:Crear unha nova etiqueta de modificación para uso manual.\n;delete:Borar unha etiqueta de modificación da base de datos, incluíndo o borrado da etiqueta de todas as revisións, entradas de cambios recentes e entradas de rexistro onde estea a usarse.\n;activate:Activar unha etiqueta de modificación, permitindo que os usuarios a usen manualmente.\n;deactivate:Desactivar unha etiqueta de modificación, impedindo que os usuarios a usen manualmente.",
+ "apihelp-managetags-param-tag": "Etiqueta para crear, borrar, activar ou desactivar. Para a creación da etiqueta, a etiqueta non pode existir previamente. Para o borrado da etiqueta, a etiqueta debe existir. Para a activación da etiqueta, a etiqueta debe existir e non pode ser usada por unha extensión. Para desactivar unha etiqueta, a etiqueta debe estar activa e definida manualmente.",
+ "apihelp-managetags-param-reason": "Un motivo opcional para crear, borrar, activar ou desactivar a etiqueta.",
+ "apihelp-managetags-param-ignorewarnings": "Ignorar calquera aviso que apareza durante a operación.",
+ "apihelp-managetags-example-create": "Crear unha etiqueta chamada <kbd>publicidade</kbd> coa razón <kbd>Para usar en vixiancia de edicións</kbd>",
+ "apihelp-managetags-example-delete": "Borrar a etiqueta <kbd>vandalismo</kbd> coa razón <kbd>Erros ortográficos</kbd>",
+ "apihelp-managetags-example-activate": "Activar a etiqueta chamada <kbd>publicidade</kbd> coa razón <kbd>Para usar en vixiancia de edicións</kbd>",
+ "apihelp-managetags-example-deactivate": "Desactivar a etiqueta chamada <kbd>publicidade</kbd> coa razón <kbd>Xa non é necesaria</kbd>",
+ "apihelp-move-description": "Mover unha páxina.",
+ "apihelp-move-param-from": "Título da páxina que quere renomear. Non pode usarse xunto con <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Identificador da páxina que quere renomear. Non pode usarse xunto con <var>$1from</var>.",
+ "apihelp-move-param-to": "Título ó que renomear a páxina.",
+ "apihelp-move-param-reason": "Motivo para o renomeamento.",
+ "apihelp-move-param-movetalk": "Renomear a páxina de conversa, se existe.",
+ "apihelp-move-param-movesubpages": "Renomear as subpáxinas, se é aplicable.",
+ "apihelp-move-param-noredirect": "Non crear unha redirección.",
+ "apihelp-move-param-watch": "Engadir a páxina e a redirección á páxina de vixiancia do usuario actual.",
+ "apihelp-move-param-unwatch": "Eliminar a páxina e a redirección da páxina de vixiancia do usuario actual.",
+ "apihelp-move-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-move-param-ignorewarnings": "Ignorar as advertencias.",
+ "apihelp-move-example-move": "Mover <kbd>Títulomalo</kbd> a <kbd>Títulobo</kbd> sen deixar unha redirección.",
+ "apihelp-opensearch-description": "Buscar no wiki mediante o protocolo OpenSearch.",
+ "apihelp-opensearch-param-search": "Buscar texto.",
+ "apihelp-opensearch-param-limit": "Número máximo de resultados a visualizar.",
+ "apihelp-opensearch-param-namespace": "Espazo de nomes no que buscar.",
+ "apihelp-opensearch-param-suggest": "Non facer nada se <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> é falso.",
+ "apihelp-opensearch-param-redirects": "Como xestionar as redireccións:\n;return:Devolve a mesma redirección.\n;resolve:Devolve a páxina á que apunta. Pode devolver menos de $1limit resultados.\nPor razóns históricas, o valor por defecto para $1format=json é \"return\" e \"resolve\" para outros formatos.",
+ "apihelp-opensearch-param-format": "O formato de saída.",
+ "apihelp-opensearch-example-te": "Atopar páxinas que comezan por <kbd>Te</kbd>.",
+ "apihelp-options-description": "Cambiar as preferencias do usuario actual.\n\nSó se poden cambiar opcións que estean rexistradas no núcleo ou nunha das extensións instaladas, ou opcións con claves prefixadas con \"userjs-\" (previstas para ser usadas por scripts de usuario).",
+ "apihelp-options-param-reset": "Reiniciar preferencias ás iniciais do sitio.",
+ "apihelp-options-param-resetkinds": "Lista de tipos de opcións a reinicializar cando a opción <var>$1reset</var> está definida.",
+ "apihelp-options-param-change": "Lista de cambios, con formato nome=valor (p. ex. skin=vector). O valor non pode ter caracteres de barra vertical. Se non se indica un valor (sen u signo igual), p. ex. nomeopcion|outraopcion|..., a opción será gardada co seu valor por defecto.",
+ "apihelp-options-param-optionname": "Nome dunha opción que debe ser fixado ó valor dado por <var>$1optionvalue</var>.",
+ "apihelp-options-param-optionvalue": "Valor da opción especificada por <var>$1optionname</var>, pode conter o caracter da barra vertical.",
+ "apihelp-options-example-reset": "Restablecer tódaalas preferencias",
+ "apihelp-options-example-change": "Cambiar as preferencias <kbd>skin</kbd> and <kbd>hideminor</kbd>.",
+ "apihelp-options-example-complex": "Restaurar todas as preferencias, logo fixar <kbd>skin</kbd> e <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-description": "Obter información sobre módulos API.",
+ "apihelp-paraminfo-param-modules": "Lista de nomes de módulos (valores dos parámetros <var>acción</var e <var>formato</var>, ou <kbd>principal</kbd>). Pode especificar submódulos con <kbd>+</kbd>.",
+ "apihelp-paraminfo-param-helpformat": "Formato das cadeas de axuda.",
+ "apihelp-paraminfo-param-querymodules": "Lista dos nomes de módulos de consulta (valores dos parámetros <var>prop</var>, <var>meta</var> ou <var>list</var>). Use <kbd>$1modules=query+foo</kbd> no canto de <kbd>$1querymodules=foo</kbd>.",
+ "apihelp-paraminfo-param-mainmodule": "Obter información sobre o módulo principal (nivel superior). No canto use <kbd>$1modules=main</kbd>.",
+ "apihelp-paraminfo-param-pagesetmodule": "Obter información sobre o módulo pageset (proporcionando títulos= e amigos).",
+ "apihelp-paraminfo-param-formatmodules": "Lista dos nomes de módulo de formato (valores do parámetro <var>formato</var>). No canto use <var>$1modules</var>.",
+ "apihelp-paraminfo-example-1": "Amosar información para <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, e <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-parse-param-title": "Título da páxina á que pertence o texto. Se non se indica, debe especificarse <var>$1contentmodel</var>, e [[API]] usarase como o título.",
+ "apihelp-parse-param-text": "Texto a analizar. Use <var>$1title</var> ou <var>$1contentmodel</var> para controlar o modelo de contido.",
+ "apihelp-parse-param-summary": "Resumo a analizar.",
+ "apihelp-parse-param-page": "Analizar o contido desta páxina. Non pode usarse de forma conxunta con <var>$1text</var> e <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Analizar o contido desta páxina. Ignora <var>$1page</var>.",
+ "apihelp-parse-param-redirects": "Se <var>$1page</var> ou <var>$1pageid</var> apuntar a unha redirección, resólvea.",
+ "apihelp-parse-param-oldid": "Analizar o contido desta revisión. Ignora <var>$1page</var> e <var>$1pageid</var>.",
+ "apihelp-parse-param-pst": "Fai unha transformación antes de gardar a entrada antes de analizala. Válida unicamente para usar con texto.",
+ "apihelp-parse-param-onlypst": "Facer unha transformación antes de gardar (PST) a entrada, pero sen analizala. Devolve o mesmo wikitexto, despois de que a PST foi aplicada. Só válida cando se usa con <var>$1text</var>.",
+ "apihelp-parse-param-effectivelanglinks": "Inclúe ligazóns de idioma proporcionadas polas extensións (para usar con <kbd>$1prop=langlinks</kbd>).",
+ "apihelp-parse-param-section": "Recuperar unicamente o contido deste número de sección ou cando <kbd>new</kbd> xera unha nova sección.\n\nA sección <kbd>new</kbd> só é atendida cando se especifica <var>text</var>.",
+ "apihelp-parse-param-sectiontitle": "Novo título de sección cando <var>section</var> é <kbd>new</kbd>.\n\nA diferenza da edición de páxinas, non se oculta no <var>summary</var> cando se omite ou está baleiro.",
+ "apihelp-parse-param-disablepp": "Desactivar o informe PP da saída do analizador.",
+ "apihelp-parse-param-disableeditsection": "Desactivar as ligazóns de edición de sección da saída do analizador.",
+ "apihelp-parse-param-generatexml": "Xenerar unha árbore de análise XML (necesita o modelo de contido <code>$1</code>).",
+ "apihelp-parse-param-preview": "Analizar en modo vista previa.",
+ "apihelp-parse-param-sectionpreview": "Analizar en modo vista previa de sección (activa tamén o modo de vista previa).",
+ "apihelp-parse-param-disabletoc": "Desactiva o índice na saída.",
+ "apihelp-parse-param-contentformat": "Formato de serialización do contido usado para o texto de entrada. Só válido cando se usa con $1text.",
+ "apihelp-parse-param-contentmodel": "Modelo de contido do texto de entrada. Se se omite, debe especificarse $1title, e o valor por defecto será o modelo do título especificado. Só válido cando se usa con $1text.",
+ "apihelp-parse-example-page": "Analizar unha páxina.",
+ "apihelp-parse-example-text": "Analizar un wikitexto.",
+ "apihelp-parse-example-texttitle": "Analizar wikitexto, especificando o título da páxina.",
+ "apihelp-parse-example-summary": "Analizar un resumo.",
+ "apihelp-patrol-description": "Patrullar unha páxina ou edición.",
+ "apihelp-patrol-param-rcid": "ID de modificación recente a vixiar.",
+ "apihelp-patrol-param-revid": "ID de revisión a vixiar.",
+ "apihelp-patrol-example-rcid": "Patrullar un cambio recente",
+ "apihelp-patrol-example-revid": "Patrullar unha revisión",
+ "apihelp-protect-description": "Cambiar o nivel de protección dunha páxina.",
+ "apihelp-protect-param-title": "Título da páxina que quere (des)protexer. Non pode usarse xunto con $1pageid.",
+ "apihelp-protect-param-pageid": "Identificador da páxina que quere (des)protexer. Non pode usarse xunto con $1title.",
+ "apihelp-protect-param-protections": "Lista dos niveis de protección, con formato <kbd>action=level</kbd> (p.ex. <kbd>edit=sysop</kbd>).\n\n<strong>Nota:</strong> Todas as accións que non estean listadas terán restriccións para ser eliminadas.",
+ "apihelp-protect-param-expiry": "Selos de tempo de caducidade. Se só se indica un selo de tempo, usarase para todas as proteccións. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, ou <kbd>never</kbd>, para unha protección sen caducidade.",
+ "apihelp-protect-param-reason": "Razón para (des)protexer.",
+ "apihelp-protect-param-cascade": "Activar protección en cascada (p. ex. protexer páxinas incluídas nesta páxina). Ignorado se todos os niveis de protección proporcionados non permiten o uso en cascada.",
+ "apihelp-protect-param-watch": "Se se define este parámetro, engadir a páxina que se (des)protexe á lista de vixilancia do usuario actual.",
+ "apihelp-protect-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-protect-example-protect": "Protexer unha páxina",
+ "apihelp-protect-example-unprotect": "Desprotexer unha páxina poñendo as restricións a <kbd>all</kbd>.",
+ "apihelp-protect-example-unprotect2": "Desprotexer unha páxina quitando as restricións.",
+ "apihelp-purge-description": "Borrar a caché para os títulos indicados.\n\nPrecisa dunha petición POST se o usuario non está conectado.",
+ "apihelp-purge-param-forcelinkupdate": "Actualizar as táboas de ligazóns.",
+ "apihelp-purge-param-forcerecursivelinkupdate": "Actualizar a táboa de ligazóns, e actualizar as táboas de ligazóns para calquera páxina que use esta páxina como modelo.",
+ "apihelp-purge-example-simple": "Purgar a <kbd>Páxina Principal</kbd> e páxina da <kbd>API</kbd>.",
+ "apihelp-purge-example-generator": "Purgar as primeiras 10 páxinas no espazo de nomes principal.",
+ "apihelp-query-description": "Consultar datos de e sobre MediaWiki.\n\nTodas as modificacións de datos primeiro teñen que facer unha busca para obter un identificador para evitar abusos de sitios maliciosos.",
+ "apihelp-query-param-prop": "Que propiedades obter para as páxinas buscadas.",
+ "apihelp-query-param-list": "Que lista obter.",
+ "apihelp-query-param-meta": "Que metadatos obter.",
+ "apihelp-query-param-indexpageids": "Incluir una sección adicional de identificadores de páxina listando todos os IDs das páxinas devoltas.",
+ "apihelp-query-param-export": "Exportar as revisións actuais de todas as páxinas dadas ou xeneradas.",
+ "apihelp-query-param-exportnowrap": "Devolver o XML exportado sen incluílo nun resultado XML (mesmo formato que [[Special:Export]]). Só pode usarse con $1export.",
+ "apihelp-query-param-iwurl": "Se fai falta obter a URL completa se o título é unha ligazón interwiki.",
+ "apihelp-query-param-continue": "Cando está presente, formatea query-continue como pares clave-valor que simplemente serán mesturados na consulta orixinal. Este parámetro debe fixarse a unha cadea baleira na consulta inicial.\n\nEste parámetro está recomendado para todos os novos desenvolvementos, e será o usado por defecto na seguinte versión da API.",
+ "apihelp-query-param-rawcontinue": "Actualmente ignorado. No futuro, <var>$1continue</var> virá por defecto e será necesario para recibir os datos en bruto de <samp>query-continue</samp>.",
+ "apihelp-query-example-revisions": "Consultar [[Special:ApiHelp/query+siteinfo|información do sitio]] e [[Special:ApiHelp/query+revisions|as revisións]] da <kbd>Páxina Principal</kbd>.",
+ "apihelp-query-example-allpages": "Buscar revisións de páxinas que comecen por <kbd>API/</kbd>.",
+ "apihelp-query+allcategories-description": "Numerar tódalas categorías",
+ "apihelp-query+allcategories-param-from": "Categoría pola que comezar a enumeración.",
+ "apihelp-query+allcategories-param-to": "Categoría pola que rematar a enumeración.",
+ "apihelp-query+allcategories-param-prefix": "Buscar todos os títulos de categoría que comezan con este valor.",
+ "apihelp-query+allcategories-param-dir": "Dirección na que ordenar.",
+ "apihelp-query+allcategories-param-min": "Devolver só categorías con polo menos este número de membros.",
+ "apihelp-query+allcategories-param-max": "Devolver só categorías con como moito este número de membros.",
+ "apihelp-query+allcategories-param-limit": "Cantas categorías devolver.",
+ "apihelp-query+allcategories-param-prop": "Que propiedades recuperar:\n;size: Engade o número de páxinas na categoría.\n;hidden: Marca as categorías que están ocultas con _&#95;HIDDENCAT_&#95;.",
+ "apihelp-query+allcategories-example-size": "Listar categorías con información do número de páxinas en cada unha.",
+ "apihelp-query+allcategories-example-generator": "Obter información sobre a páxina de categoría para categorías que comezan por <kbd>List</kbd>.",
+ "apihelp-query+alldeletedrevisions-description": "Listar todas as revisións borradas por un usuario ou nun espazo de nomes.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Só pode usarse con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Non pode usarse con <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-start": "Selo de tempo para comezar a enumeración.",
+ "apihelp-query+alldeletedrevisions-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+alldeletedrevisions-param-from": "Comezar listado neste título.",
+ "apihelp-query+alldeletedrevisions-param-to": "Parar listado neste título.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Buscar tódolos títulos de páxinas que comezan con este valor.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+alldeletedrevisions-param-user": "Só listar revisións deste usuario.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Non listar revisións deste usuario.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Só listar páxinas neste espazo de nomes.",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> Debido ó [[mw:Manual:$wgMiserMode|modo minimal]], ó usar á vez <var>$1user</var> e <var>$1namespace</var> pode devolver menos resultados de <var>$1limit</var> antes de continuar, en casos extremos, pode que non devolva resultados.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Usado como xenerador, xenera títulos no canto de IDs de revisión.",
+ "apihelp-query+alldeletedrevisions-example-user": "Listar as últimas 50 contribucións borradas do usuario <kbd>Exemplo<kbd>.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Listar as 50 primeiras revisións borradas no espazo de nomes principal.",
+ "apihelp-query+allfileusages-description": "Lista todos os usos de ficheiro, incluído os que non existen.",
+ "apihelp-query+allfileusages-param-from": "Título do ficheiro no que comezar a enumerar.",
+ "apihelp-query+allfileusages-param-to": "Título do ficheiro no que rematar de enumerar.",
+ "apihelp-query+allfileusages-param-prefix": "Buscar tódolos títulos de ficheiro que comezan con este valor.",
+ "apihelp-query+allfileusages-param-unique": "Mostrar só nomes de ficheiro distintos. Non pode usarse con $1prop=ids.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+ "apihelp-query+allfileusages-param-prop": "Que partes de información incluír:\n;ids:Engade o ID de páxina usada (non pode usarse con $1unique).\n;title:Engade o nome do ficheiro.",
+ "apihelp-query+allfileusages-param-limit": "Número total de obxectos a devolver.",
+ "apihelp-query+allfileusages-param-dir": "Dirección na cal listar.",
+ "apihelp-query+allfileusages-example-B": "Lista títulos de ficheiro, incluíndo os eliminados, cos IDs de páxina dos que proveñen, comezando en <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Listar títulos únicos de ficheiros.",
+ "apihelp-query+allfileusages-example-unique-generator": "Obter todos os títulos de ficheiro, marcando os eliminados.",
+ "apihelp-query+allfileusages-example-generator": "Obtén as páxinas que conteñen os ficheiros.",
+ "apihelp-query+allimages-description": "Enumerar tódalas imaxes secuencialmente.",
+ "apihelp-query+allimages-param-sort": "Propiedade pola que ordenar.",
+ "apihelp-query+allimages-param-dir": "Dirección na cal listar.",
+ "apihelp-query+allimages-param-from": "Título da imaxe no que comezar a enumerar. Só pode usarse con $1sort=name.",
+ "apihelp-query+allimages-param-to": "Título da imaxe no que rematar a enumerar. Só pode usarse con $1sort=name.",
+ "apihelp-query+allimages-param-start": "Título do selo de tempo no que comezar a enumerar. Só pode usarse con $1sort=timestamp.",
+ "apihelp-query+allimages-param-end": "Título do selo de tempo no que rematar a enumerar. Só pode usarse con $1sort=timestamp.",
+ "apihelp-query+allimages-param-prefix": "Buscar todas as imaxes cuxo título comeza por este valor. Só pode usarse con $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Limitar a imaxes con polo menos este número de bytes.",
+ "apihelp-query+allimages-param-maxsize": "Limitar a imaxes con como máximo este número de bytes.",
+ "apihelp-query+allimages-param-sha1": "Función hash SHA1 da imaxe. Invalida $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "Función hash SHA1 da imaxe en base 36 (usada en MediaWiki).",
+ "apihelp-query+allimages-param-user": "Mostrar só ficheiros subidos por este usuario. Só pode usarse con $1sort=timestamp. Non se pode usar xunto a $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Como filtrar ficheiros subidos por bots. Só pode usarse con $1sort=timestamp. Non pode usarse xunto con $1user.",
+ "apihelp-query+allimages-param-mime": "Que tipos MIME buscar, por exemplo <kbd>imaxe/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Cantas imaxes mostar en total.",
+ "apihelp-query+allimages-example-B": "Mostrar unha lista de ficheiros que comezan por <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Mostrar unha lista de ficheiros subidos recentemente, similares a [[Special:NewFiles]].",
+ "apihelp-query+allimages-example-mimetypes": "Mostrar unha lista de ficheiros con tipo MIME <kbd>image/png</kbd> ou <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Mostar información sobre catro ficheiros que comecen pola letra <kbd>T</kbd>.",
+ "apihelp-query+alllinks-description": "Numerar tódalas ligazóns que apuntan a un nome de espazos determinado.",
+ "apihelp-query+alllinks-param-from": "Título da ligazón na que comezar a enumerar.",
+ "apihelp-query+alllinks-param-to": "Título da ligazón na que rematar de enumerar.",
+ "apihelp-query+alllinks-param-prefix": "Buscar tódolos títulos ligados que comezan con este valor.",
+ "apihelp-query+alllinks-param-unique": "Mostrar só títulos ligados distintos. Non pode usarse con <kbd>$1prop=ids</kbd>.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+ "apihelp-query+alllinks-param-prop": "Que partes de información incluír:\n;ids: Engade o ID da páxina da ligazón (non pode usarse con <var>$1unique</var>).\n;título: Engade o título da ligazón.",
+ "apihelp-query+alllinks-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+alllinks-param-limit": "Número total de obxectos a devolver.",
+ "apihelp-query+alllinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+alllinks-example-B": "Lista os títulos ligados, incluíndo os eliminados, cos ID das páxinas das que proveñen, comezando en <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Listar títulos ligados únicos",
+ "apihelp-query+alllinks-example-unique-generator": "Obtén tódolos títulos ligados, marcando os eliminados.",
+ "apihelp-query+alllinks-example-generator": "Obtén as páxinas que conteñen as ligazóns.",
+ "apihelp-query+allmessages-description": "Devolver mensaxes deste sitio.",
+ "apihelp-query+allmessages-param-messages": "Que mensaxes devolver. <kbd>*</kbd> (por defecto) significa todas as mensaxes",
+ "apihelp-query+allmessages-param-prop": "Que propiedades obter.",
+ "apihelp-query+allmessages-param-enableparser": "Marcar para activar o analizador, isto preprocesará o texto wiki da mensaxe (substituir palabras máxicas, xestionar modelo, etc.)",
+ "apihelp-query+allmessages-param-nocontent": "Se se marca, non inclúe o contido das mensaxes na saída.",
+ "apihelp-query+allmessages-param-includelocal": "Tamén inclúe mensaxes locais, p.ex. mensaxes que non existen no software pero existen como unha páxina MediaWiki:. \nIsto lista todas as páxinas MediaWiki:, polo que tamén listará as que non son realmente mensaxes como [[MediaWiki:Common.js|Common.js]].",
+ "apihelp-query+allmessages-param-args": "Argumentos a substituír na mensaxe.",
+ "apihelp-query+allmessages-param-filter": "Retornar só mensaxes con nomes que conteñan esta cadea.",
+ "apihelp-query+allmessages-param-customised": "Devolver só mensaxes neste estado de personalización.",
+ "apihelp-query+allmessages-param-lang": "Retornar mensaxes nesta lingua.",
+ "apihelp-query+allmessages-param-from": "Retornar mensaxes que comezan nesta mensaxe.",
+ "apihelp-query+allmessages-param-to": "Retornar mensaxes que rematan nesta mensaxe.",
+ "apihelp-query+allmessages-param-title": "Nome de páxina a usar como contexto cando se analice a mensaxe (para a opción $1enableparser)",
+ "apihelp-query+allmessages-param-prefix": "Devolver mensaxes con este prefixo.",
+ "apihelp-query+allmessages-example-ipb": "Mostar mensaxes que comecen por <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Mostrar mensaxes <kbd>august</kbd> e <kbd>mainpage</kbd> en Alemán.",
+ "apihelp-query+allpages-description": "Numerar tódalas páxinas secuencialmente nun espazo de nomes determinado.",
+ "apihelp-query+allpages-param-from": "Título da páxina na que comezar a enumerar.",
+ "apihelp-query+allpages-param-to": "Título da páxina na que rematar de enumerar.",
+ "apihelp-query+allpages-param-prefix": "Buscar tódolos títulos de páxinas que comezan con este valor.",
+ "apihelp-query+allpages-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+allpages-param-filterredir": "Que páxinas listar.",
+ "apihelp-query+allpages-param-minsize": "Limitar a páxinas con polo menos este número de bytes.",
+ "apihelp-query+allpages-param-maxsize": "Limitar a páxinas con como máximo este número de bytes.",
+ "apihelp-query+allpages-param-prtype": "Limitar a só protección de páxinas.",
+ "apihelp-query+allpages-param-prlevel": "Filtrar proteccións baseándose no nivel de protección (debe empregarse có parámetro $1prtype= ).",
+ "apihelp-query+allpages-param-prfiltercascade": "Filtrar proteccións baseadas en cascada (ignoradas se $1prtype non ten valor).",
+ "apihelp-query+allpages-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+allpages-param-dir": "Dirección na cal listar.",
+ "apihelp-query+allpages-param-filterlanglinks": "Filtro baseado en si unha páxina ten ligazóns de lingua. Decátese de que esto pode non considerar as ligazóns de lingua engadidas polas extensións.",
+ "apihelp-query+allpages-param-prexpiry": "Que finalización de protección pola que filtrar a páxina:\n;indefinida: Só obter páxinas coa finalización de protección indefinida.\n;definite: Só obter páxinas cunha finalización de protección definida.\n;all: Obter páxinas con calquera finalización de protección.",
+ "apihelp-query+allpages-example-B": "Mostrar unha lista de páxinas que comezan pola letra <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Mostrar inforfmación sobre 4 páxinas que comecen pola letra <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Motrar o contido das dúas primeiras páxinas que non sexan redirección que comecen por <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-description": "Lista tódalas redireccións a un espazo de nomes.",
+ "apihelp-query+allredirects-param-from": "Título da redirección na que comezar a enumerar.",
+ "apihelp-query+allredirects-param-to": "Título da redirección na que rematar de enumerar.",
+ "apihelp-query+allredirects-param-prefix": "Buscar todas as páxinas que comecen con este valor.",
+ "apihelp-query+allredirects-param-unique": "Só mostrar páxinas obxectivo distintas. Non pode usarse con $1prop=ids|fragment|interwiki.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+ "apihelp-query+allredirects-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina da redirección (non pode usarse con <var>$1unique</var>).\n;title:Engade o título da redirección.\n;fragment:Engade o fragmento da redirección, se o hai (non pode usarse con <var>$1unique</var>).\n;interwiki:Engade o prefixo interwiki da redirección, se o hai (non pode usarse con <var>$1unique</var>).",
+ "apihelp-query+allredirects-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+allredirects-param-limit": "Número total de obxectos a devolver.",
+ "apihelp-query+allredirects-param-dir": "Dirección na cal listar.",
+ "apihelp-query+allredirects-example-B": "Lista as páxinas obxectivo, incluíndo as eliminadas, cos ID das páxinas das que proveñen, comezando en <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Lista páxinas obxectivo únicas.",
+ "apihelp-query+allredirects-example-unique-generator": "Obtén tódalas páxinas obxectivo, marcando as eliminadas.",
+ "apihelp-query+allredirects-example-generator": "Obtén as páxinas que conteñen as redireccións.",
+ "apihelp-query+alltransclusions-description": "Listar todas as transclusións (páxinas integradas usando &#123;&#123;x&#125;&#125;), incluíndo as eliminadas.",
+ "apihelp-query+alltransclusions-param-from": "Título da transclusión na que comezar a enumerar.",
+ "apihelp-query+alltransclusions-param-to": "Título da transclusión na que rematar de enumerar.",
+ "apihelp-query+alltransclusions-param-prefix": "Buscar todos os títulos transcluídos que comezan con este valor.",
+ "apihelp-query+alltransclusions-param-unique": "Mostrar só títulos transcluídos distintos. Non pode usarse con <kbd>$1prop=ids</kbd>.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
+ "apihelp-query+alltransclusions-param-prop": "Que partes de información incluír:\n;ids: Engade o ID da páxina da páxina transcluída (non pode usarse con $1unique).\n;title: Engade o título da transclusión.",
+ "apihelp-query+alltransclusions-param-namespace": "Nome de espazos a numerar.",
+ "apihelp-query+alltransclusions-param-limit": "Número total de obxectos a devolver.",
+ "apihelp-query+alltransclusions-param-dir": "Dirección na cal listar.",
+ "apihelp-query+alltransclusions-example-B": "Lista os títulos transcluídos, incluíndo os eliminados, cos ID das páxinas das que proveñen, comezando en <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-unique": "Lista os títulos transcluídos únicos.",
+ "apihelp-query+alltransclusions-example-unique-generator": "Obtén tódolos títulos transcluídos, marcando os eliminados.",
+ "apihelp-query+alltransclusions-example-generator": "Obtén as páxinas que conteñen as transclusións.",
+ "apihelp-query+allusers-description": "Enumerar tódolos usuarios rexistrados.",
+ "apihelp-query+allusers-param-from": "Nome de usuario para comezar a enumeración",
+ "apihelp-query+allusers-param-to": "Nome de usuario para rematar a enumeración.",
+ "apihelp-query+allusers-param-prefix": "Buscar tódolos nomes de usuario que comezan con este valor.",
+ "apihelp-query+allusers-param-dir": "Dirección na que ordenar.",
+ "apihelp-query+allusers-param-group": "Só incluír os usuarios nos grupos dados.",
+ "apihelp-query+allusers-param-excludegroup": "Excluír usuarios nos grupos dados.",
+ "apihelp-query+allusers-param-rights": "Incluír só ós usuarios cos dereitos dados. Non se inclúen grupo implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+allusers-param-prop": "Que información incluír:\n;blockinfo:Engade información sobre o bloque actual do usuario.\n;groups:Lista de grupos nos que está o usuario. Isto usa máis recursos no servidor e pode devolver menos resultados que o límite.\n;implicitgroups:Lista todos os grupos ós que usuario pertence de forma automática.\n;rights:Lista os dereitos que ten o usuario.\n;editcount:Engade o número de edicións do usuario.\n;registration:Engade o selo de tempo do momento no que se rexistrou o usuario, se está dispoñible (pode ser branco).",
+ "apihelp-query+allusers-param-limit": "Número total de nomes de usuario a devolver.",
+ "apihelp-query+allusers-param-witheditsonly": "Só listar usuarios que teñan feito edicións.",
+ "apihelp-query+allusers-param-activeusers": "Só listar usuarios activos {{PLURAL:$1|no último día|nos $1 últimos días}}.",
+ "apihelp-query+allusers-example-Y": "Listar usuarios que comecen por <kbd>Y</kbd>.",
+ "apihelp-query+backlinks-description": "Atopar todas as páxinas que ligan coa páxina dada.",
+ "apihelp-query+backlinks-param-title": "Título a buscar. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-query+backlinks-param-pageid": "Identificador de páxina a buscar. Non pode usarse xunto con <var>$1title</var>.",
+ "apihelp-query+backlinks-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+backlinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+backlinks-param-filterredir": "Como filtrar as redireccións. Se o valor é <kbd>nonredirects</kbd> cando <var>$1redirect</var> está activa, só se aplica ó segundo nivel.",
+ "apihelp-query+backlinks-param-limit": "Cantas páxinas devolver. Se <var>$1redirect</var> está activa, aplícase o límite a cada nivel de forma separada (isto significa que poden devolverse ata 2 * <var>$1limit</var> resultados).",
+ "apihelp-query+backlinks-param-redirect": "Se a ligazón sobre unha páxina é unha redirección, atopa tamén todas as páxinas que ligan con esa redirección. O límite máximo divídese á metade.",
+ "apihelp-query+backlinks-example-simple": "Mostrar ligazóns á <kbd>Páxina principal<kbd>.",
+ "apihelp-query+backlinks-example-generator": "Obter a información das páxinas que ligan á <kbd>Páxina principal<kbd>.",
+ "apihelp-query+blocks-description": "Listar todos os usuarios e direccións IP bloqueados.",
+ "apihelp-query+blocks-param-start": "Selo de tempo para comezar a enumeración.",
+ "apihelp-query+blocks-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+blocks-param-ids": "Lista de IDs de bloque a listar (opcional).",
+ "apihelp-query+blocks-param-users": "Lista de usuarios a buscar (opcional).",
+ "apihelp-query+blocks-param-ip": "Obter todos os bloques aplicables a esta IPs ou a este rango CIDR, incluíndo bloques de rangos.\nNon pode usarse xunto con <var>$3users</var>. Os rangos CIDR maiores que IPv4/$1 ou IPv6/$2 non se aceptan.",
+ "apihelp-query+blocks-param-limit": "Número máximo de bloques a listar.",
+ "apihelp-query+blocks-param-show": "Só mostrar elementos correspondentes a eses criterios.\nPor exemplo, para ver só bloques indefinidos en direccións IP, ponga <kbd>$1show=ip|!temp</kbd>.",
+ "apihelp-query+blocks-example-simple": "Listar bloques.",
+ "apihelp-query+blocks-example-users": "Lista de bloques de usuarios <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
+ "apihelp-query+categories-description": "Listar todas as categorías ás que pertencen as páxinas.",
+ "apihelp-query+categories-param-prop": "Que propiedades adicionais obter para cada categoría:\n;sortkey:Engade a clave de ordenación (cadea hexadecimal) e o prefixo da clave de ordenación (parte lexible) da categoría.\n;timestamp:Engade o selo de tempo de cando se engadíu a categoría.\n;hidden:Pon unha marca nas categorías que están ocultas con _&#95;HIDDENCAT_&#95;.",
+ "apihelp-query+categories-param-show": "Tipo de categorías a amosar.",
+ "apihelp-query+categories-param-limit": "Cantas categorías devolver.",
+ "apihelp-query+categories-param-categories": "Listar só esas categorías. Útil para verificar se unha páxina concreta está nunha categoría determinada.",
+ "apihelp-query+categories-param-dir": "Dirección na cal listar.",
+ "apihelp-query+categories-example-simple": "Obter a lista de categorías ás que pertence a páxina <kbd>Albert Einstein</kbd>",
+ "apihelp-query+categories-example-generator": "Obter a información de todas as categorías usadas na páxina <kbd>Albert Einstein</kbd>.",
+ "apihelp-query+categoryinfo-description": "Devolver información sobre as categorías dadas.",
+ "apihelp-query+categoryinfo-example-simple": "Obter información sobre <kbd>Category:Foo</kbd> e <kbd>Category:Bar</kbd>",
+ "apihelp-query+categorymembers-description": "Listar tódalas páxinas nunha categoría determinada.",
+ "apihelp-query+categorymembers-param-title": "Que categoría enumerar (obrigatorio). Debe incluír o prefixo <kbd>{{ns:category}}:</kbd>. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-query+categorymembers-param-pageid": "ID de páxina da categoría a enumerar. Non se pode usar xunto con <var>$1title</var>.",
+ "apihelp-query+categorymembers-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;sortkey:Engade a clave de ordenación usada para ordenala na categoría (cadea hexadecimal).\n;sortkeyprefix:Engade o prefixo da clave de ordenación usado para ordenala na categoría (parte lexible da clave de ordenación).\n;type:Engade o tipo no que foi categorizado a páxina (páxina, subcategoría ou ficheiro)\n;timestamp:Engade o selo de tempo no que foi incluída a páxina.",
+ "apihelp-query+categorymembers-param-namespace": "Só incluír páxinas nestes espazos de nomes. Decátese de que poden usarse <kbd>$1type=subcat</kbd> ou <kbd>$1type=file</kbd> no canto de <kbd>$1namespace=14</kbd> ou <kbd>6</kbd>.",
+ "apihelp-query+categorymembers-param-type": "Que tipo de membros da categoría incluír. Ignorado cando está activo <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-limit": "Máximo número de páxinas a retornar.",
+ "apihelp-query+categorymembers-param-sort": "Propiedade pola que ordenar.",
+ "apihelp-query+categorymembers-param-dir": "En que dirección ordenar.",
+ "apihelp-query+categorymembers-param-start": "Selo de tempo para comezar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-end": "Selo de tempo co que rematar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
+ "apihelp-query+categorymembers-param-starthexsortkey": "Chave de ordenación coa que comezar o listado, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-endhexsortkey": "Chave de ordenación coa que rematar o listado, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "Prefixo da chave de ordenación coa que comezar o listado. Pode usarse só con <kbd>$1sort=sortkey</kbd>. Ignórase <var>$1starthexsortkey</var>.",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "Prefixo da chave de ordenación ANTES de rematar o listado (e non a, se existe este valor entón non será incluído!). Pode usarse só con <kbd>$1sort=sortkey</kbd>. Ignórase $1endhexsortkey.",
+ "apihelp-query+categorymembers-param-startsortkey": "Usar $1starthexsortkey no canto.",
+ "apihelp-query+categorymembers-param-endsortkey": "Usar $1endhexsortkey no canto.",
+ "apihelp-query+categorymembers-example-simple": "Obter as dez primeiras páxinas de <kbd>Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Obter a información das primeiras dez páxinas de <kbd>Category:Physics</kbd>.",
+ "apihelp-query+contributors-description": "Obter a lista de contribuidores conectados e o número de contribuidores anónimos dunha páxina.",
+ "apihelp-query+contributors-param-group": "Incluír só ós usuarios dos grupos dados. Non se inclúen grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+contributors-param-excludegroup": "Excluír usuarios nos grupos dados. Non se inclúen grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+contributors-param-rights": "Incluír só ós usuarios cos dereitos dados. Non se inclúen os dereitos dados a grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+contributors-param-excluderights": "Excluír usuarios cos dereitos dados. Non se inclúen os dereitos dados a grupos implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
+ "apihelp-query+contributors-param-limit": "Número total de contribuidores a devolver.",
+ "apihelp-query+contributors-example-simple": "Mostrar os contribuidores á páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+deletedrevisions-description": "Obter a información da revisión eliminada.\n\nPode usarse de varias formas:\n#Obter as revisións borradas dun conxunto de páxinas, indicando os títulos ou os IDs das páxinas. Ordenado por título e selo de tempo.\n#Obter datos sobre un conxunto de revisións borradas, indicando os seus IDs e os seus IDs de revisión. Ordenado por ID de revisión.",
+ "apihelp-query+deletedrevisions-param-start": "Selo de tempo no que comezar a enumeración. Ignorado cando se está procesando unha lista de IDs de revisións.",
+ "apihelp-query+deletedrevisions-param-end": "Selo de tempo no que rematar a enumeración. Ignorado cando se está procesando unha lista de IDs de revisións.",
+ "apihelp-query+deletedrevisions-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+deletedrevisions-param-user": "Só listar revisións deste usuario.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Non listar revisións deste usuario.",
+ "apihelp-query+deletedrevisions-param-limit": "Máximo número de revisións a listar.",
+ "apihelp-query+deletedrevisions-param-prop": "Que propiedades obter:\n;revid:Engade o ID da modificación borrada.\n;parentid:Engade o ID da modificación da modificación anterior da páxina.\n;user:Engade o usuario que fixo a modificación.\n;userid:Engade o ID do usuario que fixo a modificación.\n;comment:Engade o comentario da modificación.\n;parsedcomment:Engade o comentario analizado da modificación.\n;minor:Engade unha marca se a modificación é menor.\n;len:Engade a lonxitude (bytes) da modificación.\n;sha1:Engade a función SHA-1 (base 16) da modificación.\n;content:Engade o contido da modificación.\n;tags:Marcas da modificación.",
+ "apihelp-query+deletedrevisions-example-titles": "Listar as revisións borradas das páxinas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, con contido.",
+ "apihelp-query+deletedrevisions-example-revids": "Listar a información para a revisión borrada <kbd>123456</kbd>.",
+ "apihelp-query+deletedrevs-description": "Lista as modificación borradas.\n\nOpera según tres modos:\n#Lista as modificacións borradas dos títulos indicados, ordenados por selo de tempo.\n#Lista as contribucións borradas do usuario indicado, ordenadas por selo de tempo (sen indicar títulos).\n#Lista todas as modificacións borradas no espazo de nomes indicado, ordenadas por título e selo de tempo (sen indicar títulos, sen fixar $1user).\n\nCertos parámetros só se aplican a algúns modos e son ignorados noutros.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+ "apihelp-query+deletedrevs-param-start": "Selo de tempo no que comezar a enumeración.",
+ "apihelp-query+deletedrevs-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+deletedrevs-param-from": "Comezar listado neste título.",
+ "apihelp-query+deletedrevs-param-to": "Rematar listado neste título.",
+ "apihelp-query+deletedrevs-param-prefix": "Buscar tódolos títulos de páxina que comezan con este valor.",
+ "apihelp-query+deletedrevs-param-unique": "Só listar unha revisión por cada páxina.",
+ "apihelp-query+deletedrevs-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+deletedrevs-param-user": "Só listar revisións deste usuario.",
+ "apihelp-query+deletedrevs-param-excludeuser": "Non listar revisións deste usuario.",
+ "apihelp-query+deletedrevs-param-namespace": "Só listar páxinas neste espazo de nomes.",
+ "apihelp-query+deletedrevs-param-limit": "Máximo número de revisións a listar.",
+ "apihelp-query+deletedrevs-example-mode1": "Listar as últimas revisións borradas das páxinas <kbd>Main Page</kbd> e <kbd>Talk:Main Page</kbd>, con contido (modo 1).",
+ "apihelp-query+deletedrevs-example-mode2": "Listar as últimas 50 contribucións borradas de <kbd>Bob</kbd> (modo 2).",
+ "apihelp-query+deletedrevs-example-mode3-main": "Listar as primeiras 50 revisións borradas no espazo de nomes principal (modo 3)",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Listar as primeiras 50 páxinas no espazo de nomes {{ns:talk}} (modo 3).",
+ "apihelp-query+disabled-description": "Este módulo de consulta foi desactivado.",
+ "apihelp-query+duplicatefiles-description": "Listar todos os ficheiros que son duplicados dos fichieros dados baseado nos valores da función hash.",
+ "apihelp-query+duplicatefiles-param-limit": "Cantos ficheiros duplicados devolver.",
+ "apihelp-query+duplicatefiles-param-dir": "Dirección na cal listar.",
+ "apihelp-query+duplicatefiles-param-localonly": "Só buscar por ficheiros no repositorio local.",
+ "apihelp-query+duplicatefiles-example-simple": "Buscar duplicados de [[:File:Albert Einstein Head.jpg]]",
+ "apihelp-query+duplicatefiles-example-generated": "Buscar duplicados de tódolos ficheiros",
+ "apihelp-query+embeddedin-description": "Atopar todas as páxinas que inclúen (por transclusión) o título dado.",
+ "apihelp-query+embeddedin-param-title": "Título a buscar. Non pode usarse xunto con $1pageid.",
+ "apihelp-query+embeddedin-param-pageid": "Identificador de páxina a buscar. Non pode usarse xunto con $1title.",
+ "apihelp-query+embeddedin-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+embeddedin-param-dir": "Dirección na cal listar.",
+ "apihelp-query+embeddedin-param-filterredir": "Como filtrar para redireccións.",
+ "apihelp-query+embeddedin-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+embeddedin-example-simple": "Mostrar as páxinas que inclúan <kbd>Template:Stub</kbd>.",
+ "apihelp-query+embeddedin-example-generator": "Obter información sobre as páxinas que inclúen <kbd>Template:Stub</kbd>.",
+ "apihelp-query+extlinks-description": "Devolve todas as URLs externas (sen ser interwikis) das páxinas dadas.",
+ "apihelp-query+extlinks-param-limit": "Cantas ligazóns devolver.",
+ "apihelp-query+extlinks-param-protocol": "Protocolo da URL. Se está baleiro e está activo <var>$1query</var>, o protocolo é <kbd>http</kbd>. Deixar esa variable e a <var>$1query</var> baleiras para listar todas as ligazóns externas.",
+ "apihelp-query+extlinks-param-query": "Buscar cadea sen protocolo. Útil para verificar se unha páxina determinada contén unha URL externa determinada.",
+ "apihelp-query+extlinks-param-expandurl": "Expandir as URLs relativas a un protocolo co protocolo canónico.",
+ "apihelp-query+extlinks-example-simple": "Obter unha de ligazóns externas á <kbd>Páxina Principal<kbd>.",
+ "apihelp-query+exturlusage-description": "Enumerar páxinas que conteñen unha dirección URL dada.",
+ "apihelp-query+exturlusage-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;url:Engade a URL usada na páxina.",
+ "apihelp-query+exturlusage-param-protocol": "Protocolo da URL. Se está baleiro e está activo <var>$1query</var>, o protocolo é <kbd>http</kbd>. Deixar esa variable e a <var>$1query</var> baleiras para listar todas as ligazóns externas.",
+ "apihelp-query+exturlusage-param-query": "Buscar unha cadea sen protocolo. Ver [[Special:LinkSearch]]. Deixar baleira para listar todas as ligazóns externas.",
+ "apihelp-query+exturlusage-param-namespace": "Espazo de nomes a enumerar.",
+ "apihelp-query+exturlusage-param-limit": "Cantas páxinas devolver.",
+ "apihelp-query+exturlusage-param-expandurl": "Expandir as URLs relativas a un protocolo co protocolo canónico.",
+ "apihelp-query+exturlusage-example-simple": "Mostrar páxinas ligando a <kbd>http://www.mediawiki.org</kbd>.",
+ "apihelp-query+filearchive-description": "Enumerar secuencialmente todos os ficheiros borrados.",
+ "apihelp-query+filearchive-param-from": "Título da imaxe coa que comezar a enumeración.",
+ "apihelp-query+filearchive-param-to": "Título da imaxe coa que rematar a enumeración.",
+ "apihelp-query+filearchive-param-prefix": "Buscar tódolos títulos de imaxes que comezan con este valor.",
+ "apihelp-query+filearchive-param-limit": "Cantas imaxes devolver en total.",
+ "apihelp-query+filearchive-param-dir": "Dirección na cal listar.",
+ "apihelp-query+filearchive-param-sha1": "Función hash SHA1 da imaxe. Invalida $1sha1base36.",
+ "apihelp-query+filearchive-param-sha1base36": "Función hash SHA1 da imaxe en base 36 (usado en MediaWiki).",
+ "apihelp-query+filearchive-example-simple": "Mostrar unha lista de tódolos fichieiros eliminados.",
+ "apihelp-query+filerepoinfo-description": "Devolver a meta información sobre os repositorios de imaxes configurados na wiki.",
+ "apihelp-query+filerepoinfo-param-prop": "Que propiedades do repositorio mostrar (pode haber máis dispoñible nalgunhas wikis):\n;apiurl:URL ó API do repositorio - útil para obter información das imaxes no host.\n;name:A clave do repositorio - usada p. ex. nas variables de retorno de <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]]\n;displayname:O nome lexible do wiki repositorio.\n;rooturl:URL raíz dos camiños de imaxe.\n;local:Se o repositorio é o repositorio local ou non.",
+ "apihelp-query+filerepoinfo-example-simple": "Obter infomación sobre os repositorios de ficheiros",
+ "apihelp-query+fileusage-description": "Atopar tódalas páxinas que usan os ficheiros dados.",
+ "apihelp-query+fileusage-param-prop": "Que propiedades obter:\n;pageid:ID de cada páxina.\n;título:Título de cada páxina.\n;redirect:Marca de se a páxina é unha redirección.",
+ "apihelp-query+fileusage-param-namespace": "Só incluír páxinas nestes espazos de nomes.",
+ "apihelp-query+fileusage-param-limit": "Cantos mostrar.",
+ "apihelp-query+fileusage-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
+ "apihelp-query+fileusage-example-simple": "Obter unha lista de páxinas usando [[:File:Example.jpg]]",
+ "apihelp-query+fileusage-example-generator": "Obter infomación sobre páxinas que usan [[:File:Example.jpg]]",
+ "apihelp-query+imageinfo-description": "Devolve información de ficheiros e historial de subidas.",
+ "apihelp-query+imageinfo-param-prop": "Que información do ficheiro obter:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Engade selo de tempo á versión subida.",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Engade o usuario que subiu cada versión do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "Engade o ID de usuario que subiu cada versión do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Comentario da versión.",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Analizar o comentario da versión.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Engade o título canónico do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "Devolve a URL ó ficheiro e á páxina de descrición.",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "Engade o tamaño do ficheiro en bytes e a altura, a anchura e o contador de páxina (se é aplicable).",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias para o tamaño.",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "Engade a función hash SHA-1 do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Engade o tipo MIME do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Engade o tipo MIME da miniatura da imaxe (precisa a url e o parámetro $1urlwidth).",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Engade o tipo do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "Lista os metadatos Exif da versión do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Lista os metadatos xenéricos do formato do ficheiro para a versión do ficheiro.",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Lista os metadatos combinados formateados de múltiples fontes. Os resultados están en formato HTML.",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "Engade o nome de ficheiro da versión do ficheiro para versións anteriores ás últimas.",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Engade a profundidade de bits da versión.",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Usado pola páxina Special:Upload para obter información sobre un ficheiro existente. Non previsto para usar fóra do núcleo MediaWiki.",
+ "apihelp-query+imageinfo-param-limit": "Cantas revisións de ficheiro a devolver por ficheiro.",
+ "apihelp-query+imageinfo-param-start": "Selo de tempo dende o que comezar a lista.",
+ "apihelp-query+imageinfo-param-end": "Selo de tempo no que rematar a lista.",
+ "apihelp-query+imageinfo-param-urlwidth": "Se $2prop=url está definido, será devolta unha URL a unha imaxe escalada a este ancho.\nPor razóns de rendimento se se usa esta opción, non se devolverán máis de $1 imaxes.",
+ "apihelp-query+imageinfo-param-urlheight": "Similar a $1urlwidth.",
+ "apihelp-query+imageinfo-param-metadataversion": "Versión de metadata a usar. Se <kbd>latest</kbd> está especificado, usa a última versión. Por defecto <kbd>1</kbd> para compatibilidade con versións anteriores.",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "Que lingua buscar en extmetadata. Isto afecta tanto á tradución a buscar, se hai varias dispoñibles, como a como se formatean cousas como os números e outros valores.",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "Se as traducións para a propiedade extmetadata están dispoñibles, búscaas todas.",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "Se está especificado e non baleiro, só se devolverán esas claves para $1prop=extmetadata.",
+ "apihelp-query+imageinfo-param-localonly": "Só buscar ficheiros no repositorio local.",
+ "apihelp-query+imageinfo-example-simple": "Busca a información sobre a versión actual de [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageinfo-example-dated": "Busca información sobre as versións de [[:File:Test.jpg]] posteriores a 2008.",
+ "apihelp-query+images-description": "Devolve todos os ficheiros contidos nas páxinas dadas.",
+ "apihelp-query+images-param-limit": "Cantos ficheiros devolver.",
+ "apihelp-query+images-param-images": "Listar só eses ficheiros. Útil para verificar se unha páxina concreta ten un ficheiro determinado.",
+ "apihelp-query+images-param-dir": "Dirección na cal listar.",
+ "apihelp-query+images-example-simple": "Obter unha lista de arquivos empregados na [[Main Page]].",
+ "apihelp-query+images-example-generator": "Obter información sobre todos os ficheiros usados na [[Main Page]].",
+ "apihelp-query+imageusage-description": "Atopar tódalas páxinas que usan o título da imaxe dada.",
+ "apihelp-query+imageusage-param-title": "Título a buscar. Non pode usarse xunto con $1pageid.",
+ "apihelp-query+imageusage-param-pageid": "ID de páxina a buscar. Non pode usarse xunto con $1title.",
+ "apihelp-query+imageusage-param-namespace": "Nome de espazos a numerar.",
+ "apihelp-query+imageusage-param-dir": "Dirección na cal listar.",
+ "apihelp-query+imageusage-param-filterredir": "Como filtrar redireccións. Se se fixa a non redirección cando está activo $1redirect, isto só se aplica ó segundo nivel.",
+ "apihelp-query+imageusage-param-limit": "Cantas páxinas devolver. Se <var>$1redirect</var> está activa, aplícase o límite a cada nivel de forma separada (isto significa que poden devolverse ata 2 * <var>$1limit</var> resultados).",
+ "apihelp-query+imageusage-param-redirect": "Se a ligazón sobre unha páxina é unha redirección, atopa tamén todas as páxinas que ligan con esa redirección. O límite máximo divídese á metade.",
+ "apihelp-query+imageusage-example-simple": "Mostrar as páxinas que usan [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Obter información sobre as páxinas que usan [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+info-description": "Obter información básica da páxina.",
+ "apihelp-query+info-param-prop": "Que propiedades adicionais obter:",
+ "apihelp-query+info-paramvalue-prop-protection": "Listar o nivel de protección de cada páxina.",
+ "apihelp-query+info-paramvalue-prop-talkid": "O ID de páxina da páxina de conversa para cada páxina que non é páxina de conversa.",
+ "apihelp-query+info-paramvalue-prop-watched": "Listar o estado de vixiancia de cada páxina.",
+ "apihelp-query+info-paramvalue-prop-watchers": "O número de vixiantes, se está permitido.",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "O selo de tempo de notificación da lista de vixiancia de cada páxina.",
+ "apihelp-query+info-paramvalue-prop-subjectid": "O ID de páxina da páxina pai para cada páxina de conversa.",
+ "apihelp-query+info-paramvalue-prop-url": "Devolve unha URL completa, unha URL de modificación, e a URL canónica de cada páxina.",
+ "apihelp-query+info-paramvalue-prop-readable": "Se o usuario pode ler esta páxina.",
+ "apihelp-query+info-paramvalue-prop-preload": "Devolve o texto devolto por EditFormPreloadText.",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "Devolve a forma na que se visualiza actualmente o título da páxina.",
+ "apihelp-query+info-param-testactions": "Proba se o usuario actual pode realizar certas accións na páxina.",
+ "apihelp-query+info-param-token": "Usar [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] no canto diso.",
+ "apihelp-query+info-example-simple": "Obter información sobre a páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+info-example-protection": "Obter información xeral e de protección sobre a páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+iwbacklinks-description": "Atopar todas as páxina que ligan á ligazón interwiki indicada.\n\nPode usarse para atopar todas as ligazóns cun prefixo, ou todas as ligazóns a un título (co prefixo indicado). Se non se usa ningún parámetro funciona como \"todas as ligazóns interwiki\".",
+ "apihelp-query+iwbacklinks-param-prefix": "Prefixo para a interwiki.",
+ "apihelp-query+iwbacklinks-param-title": "Ligazón interwiki a buscar. Debe usarse con <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+iwbacklinks-param-prop": "Que propiedades obter:\n;iwprefix:Engade o prefixo da interwiki.\n;iwtitle:Engade o título da interwiki.",
+ "apihelp-query+iwbacklinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+iwbacklinks-example-simple": "Obter as páxinas ligadas a [[wikibooks:Test]]",
+ "apihelp-query+iwbacklinks-example-generator": "Obter información sobre as páxinas que ligan a [[wikibooks:Test]].",
+ "apihelp-query+iwlinks-description": "Devolve todas as ligazóns interwiki ás páxinas indicadas.",
+ "apihelp-query+iwlinks-param-url": "Se obter a URL completa (non pode usarse con $1prop).",
+ "apihelp-query+iwlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interwiki:\n;url:Engade a URL completa.",
+ "apihelp-query+iwlinks-param-limit": "Cantas ligazóns interwiki devolver.",
+ "apihelp-query+iwlinks-param-prefix": "Só devolver ligazóns interwiki con este prefixo.",
+ "apihelp-query+iwlinks-param-title": "Ligazón interwiki a buscar. Debe usarse con <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+iwlinks-example-simple": "Obter as ligazóns interwiki da páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+langbacklinks-description": "Atopar todas as páxinas que ligan coa ligazón de lingua dada. \n\nPode usarse para atopar todas as ligazóns cun código de lingua, ou todas as ligazón a un título (cunha lingua dada). Non usar cun parámetro que sexa \"todas as ligazóns de lingua\".\n\nDecátese que isto pode non considerar as ligazóns de idioma engadidas polas extensións.",
+ "apihelp-query+langbacklinks-param-lang": "Lingua para a ligazón de lingua.",
+ "apihelp-query+langbacklinks-param-title": "Ligazón de lingua a buscar. Debe usarse con $1lang.",
+ "apihelp-query+langbacklinks-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+langbacklinks-param-prop": "Que propiedades obter:\n;lllang:Engade o código de lingua á ligazón de páxina.\n;lltitle:Engade o título da ligazón de lingua.",
+ "apihelp-query+langbacklinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+langbacklinks-example-simple": "Obter as páxinas ligadas a [[:fr:Test]].",
+ "apihelp-query+langbacklinks-example-generator": "Obter información sobre as páxinas que ligan a [[:fr:Test]].",
+ "apihelp-query+langlinks-description": "Devolve todas as ligazóns interwiki ás páxinas indicadas.",
+ "apihelp-query+langlinks-param-limit": "Cantas ligazóns de lingua devolver.",
+ "apihelp-query+langlinks-param-url": "Se obter a URL completa (non pode usarse con <var>$1prop</var>).",
+ "apihelp-query+langlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interlingüística:\n;url:Engade a URL completa.\n;langname:Engade o nome localizado da lingua (o mellor intento). Use <var>$1inlanguagecode</var> para controlar a lingua.\n;autonym:Engade o nome nativo da lingua.",
+ "apihelp-query+langlinks-param-lang": "Devolver só ligazóns de lingua con este código de lingua.",
+ "apihelp-query+langlinks-param-title": "Ligazón a buscar. Debe usarse con <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-dir": "Dirección na cal listar.",
+ "apihelp-query+langlinks-param-inlanguagecode": "Código de lingua para nomes de lingua localizados.",
+ "apihelp-query+langlinks-example-simple": "Obter ligazóns interlingua da páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+links-description": "Devolve todas as ligazóns das páxinas indicadas.",
+ "apihelp-query+links-param-namespace": "Mostra ligazóns só neste espazo de nomes.",
+ "apihelp-query+links-param-limit": "Cantas ligazóns devolver.",
+ "apihelp-query+links-param-titles": "Listar só as ligazóns a eses títulos. Útil para verificar se unha páxina concreta liga a un título determinado.",
+ "apihelp-query+links-param-dir": "Dirección na cal listar.",
+ "apihelp-query+links-example-simple": "Obter as ligazóns da páxina <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-generator": "Obter información sobre as ligazóns de páxina da <kbd>Main Page</kbd>.",
+ "apihelp-query+links-example-namespaces": "Obter as ligazóns á páxina <kbd>Main Page</kbd> nos espazos de nome {{ns:user}} e {{ns:template}}.",
+ "apihelp-query+linkshere-description": "Atopar todas as páxinas que ligan coas páxinas dadas.",
+ "apihelp-query+linkshere-param-prop": "Que propiedades obter:\n;pageid:ID de cada páxina.\n;título:Título de cada páxina.\n;redirect:Marca de se a páxina é unha redirección.",
+ "apihelp-query+linkshere-param-namespace": "Só incluír páxinas nestes espazos de nomes.",
+ "apihelp-query+linkshere-param-limit": "Cantos mostrar.",
+ "apihelp-query+linkshere-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
+ "apihelp-query+linkshere-example-simple": "Obter unha lista que ligan á [[Main Page]]",
+ "apihelp-query+linkshere-example-generator": "Obter a información das páxinas que ligan á [[Main Page]].",
+ "apihelp-query+logevents-description": "Obter os eventos dos rexistros.",
+ "apihelp-query+logevents-param-type": "Filtrar as entradas do rexistro para mostrar só as deste tipo.",
+ "apihelp-query+logevents-param-action": "Filtrar accións no rexistro para mostrar só esta acción. Ignora <var>$1type</var>. Accións comodín como <kbd>action/*</kbd> permiten especificar calquera cadea para o asterisco.",
+ "apihelp-query+logevents-param-start": "Selo de tempo no que comezar a enumeración.",
+ "apihelp-query+logevents-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+logevents-param-user": "Filtrar entradas ás feitas polo usuario indicado.",
+ "apihelp-query+logevents-param-title": "Filtrar entradas ás asociadas á páxina indicada.",
+ "apihelp-query+logevents-param-namespace": "Filtrar entradas ás do espazo de nomes indicado.",
+ "apihelp-query+logevents-param-prefix": "Filtrar entradas ás que comezan por este prefixo.",
+ "apihelp-query+logevents-param-tag": "Só listar entradas de evento marcadas con esta etiqueta.",
+ "apihelp-query+logevents-param-limit": "Número total de entradas de evento a devolver.",
+ "apihelp-query+logevents-example-simple": "Lista de eventos recentes do rexistro.",
+ "apihelp-query+pagepropnames-description": "Listar os nomes de todas as propiedades de páxina usados na wiki.",
+ "apihelp-query+pagepropnames-param-limit": "Máximo número de nomes a retornar.",
+ "apihelp-query+pagepropnames-example-simple": "Obter os dez primeiros nomes de propiedade.",
+ "apihelp-query+pageprops-description": "Obter varias propiedades definidas no contido da páxina.",
+ "apihelp-query+pageprops-param-prop": "Listar só esas propiedades. Útil para verificar se unha páxina concreta usa unha propiedade de páxina determinada.",
+ "apihelp-query+pageprops-example-simple": "Obter as propiedades para <kbd>Category:Foo</kbd>.",
+ "apihelp-query+pageswithprop-description": "Mostrar a lista de páxinas que empregan unha propiedade determinada.",
+ "apihelp-query+pageswithprop-param-propname": "Propiedade de páxina pola que enumerar as páxinas.",
+ "apihelp-query+pageswithprop-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;value:Engade o valor da propiedade da páxina.",
+ "apihelp-query+pageswithprop-param-limit": "Máximo número de páxinas a retornar.",
+ "apihelp-query+pageswithprop-param-dir": "En que dirección ordenar.",
+ "apihelp-query+pageswithprop-example-simple": "Lista as dez primeiras páxinas que usan <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "Obter a infomación de páxina das dez primeiras páxinas que usan <code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-description": "Facer unha busca de prefixo nos títulos das páxinas.",
+ "apihelp-query+prefixsearch-param-search": "Buscar texto.",
+ "apihelp-query+prefixsearch-param-namespace": "Espazo de nomes no que buscar.",
+ "apihelp-query+prefixsearch-param-limit": "Número máximo de resultados a visualizar.",
+ "apihelp-query+prefixsearch-param-offset": "Número de resultados a saltar.",
+ "apihelp-query+prefixsearch-example-simple": "Buscar títulos de páxina que comecen con <kbd>meaning</kbd>.",
+ "apihelp-query+protectedtitles-description": "Listar todos os títulos protexidos en creación.",
+ "apihelp-query+protectedtitles-param-namespace": "Só listar títulos nestes espazos de nomes.",
+ "apihelp-query+protectedtitles-param-level": "Só listar títulos con estos niveis de protección.",
+ "apihelp-query+protectedtitles-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+protectedtitles-param-start": "Comezar a listar neste selo de tempo de protección.",
+ "apihelp-query+protectedtitles-param-end": "Rematar de listar neste selo de tempo de protección.",
+ "apihelp-query+protectedtitles-param-prop": "Que propiedades obter:\n;timestamp:Engade o selo de tempo de cando se fixo a protección.\n;user:Engade o usuario que fixo a protección.\n;userid:Engade o ID do usuario que fixo a protección.\n;comment:Engade o comentario da protección.\n;parsedcomment:Engade o comentario analizado da protección.\n;expiry:Engade o selo de tempo no que rematará a protección\n;level:Engade o nivel de protección.",
+ "apihelp-query+protectedtitles-example-simple": "Listar títulos protexidos",
+ "apihelp-query+protectedtitles-example-generator": "Atopar ligazóns ós títulos protexidos no espazo de nomes principal",
+ "apihelp-query+querypage-description": "Obtén unha lista proporcionada por unha páxina especial basada en QueryPage.",
+ "apihelp-query+querypage-param-page": "Nome da páxina especial. Teña en conta que diferencia entre maiúsculas e minúsculas.",
+ "apihelp-query+querypage-param-limit": "Número de resultados a visualizar.",
+ "apihelp-query+querypage-example-ancientpages": "Resultados devoltos de [[Special:Ancientpages]].",
+ "apihelp-query+random-param-namespace": "Devolver páxinas só neste espazo de nomes.",
+ "apihelp-query+random-param-limit": "Limitar cantas páxinas aleatorias se van devolver.",
+ "apihelp-query+random-param-redirect": "Cargar unha redirección aleatoria no canto dunha páxina aleatoria.",
+ "apihelp-query+random-example-simple": "Obter dúas páxinas aleatorias do espazo de nomes principal.",
+ "apihelp-query+random-example-generator": "Obter a información da páxina de dúas páxinas aleatorias do espazo de nomes principal.",
+ "apihelp-query+recentchanges-description": "Enumerar cambios recentes.",
+ "apihelp-query+recentchanges-param-start": "Selo de tempo para comezar a enumeración.",
+ "apihelp-query+recentchanges-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+recentchanges-param-namespace": "Filtrar os cambios a só eses espazos de nomes.",
+ "apihelp-query+recentchanges-param-user": "Só listar cambios deste usuario.",
+ "apihelp-query+recentchanges-param-excludeuser": "Non listar cambios deste usuario.",
+ "apihelp-query+recentchanges-param-tag": "Só listar cambios marcados con esta etiqueta.",
+ "apihelp-query+recentchanges-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
+ "apihelp-query+recentchanges-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
+ "apihelp-query+recentchanges-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+recentchanges-param-type": "Que tipos de cambios mostrar.",
+ "apihelp-query+recentchanges-param-toponly": "Listar só cambios que son a última revisión.",
+ "apihelp-query+recentchanges-example-simple": "Listar cambios recentes.",
+ "apihelp-query+recentchanges-example-generator": "Obter a información de páxina sobre cambios recentes sen vixiancia.",
+ "apihelp-query+redirects-description": "Devolve todas as redireccións das páxinas indicadas.",
+ "apihelp-query+redirects-param-prop": "Que propiedades recuperar:\n;pageid:ID de páxina de cada redirección.\n;title:Título de cada redirección.\n;fragment:Fragmento de cada redirección, se hai algún.",
+ "apihelp-query+redirects-param-namespace": "Só incluir páxinas nestes espacios de nomes.",
+ "apihelp-query+redirects-param-limit": "Cantos redireccións devolver.",
+ "apihelp-query+redirects-param-show": "Só mostrar elementos que cumpran estos criterios:\n;fragment:Só mostrar redireccións que teñan un fragmento.\n;!fragment:Só mostrar redireccións que non teñan un fragmento.",
+ "apihelp-query+redirects-example-simple": "Obter unha lista de redireccións á [[Main Page]]",
+ "apihelp-query+redirects-example-generator": "Obter información sobre tódalas redireccións á [[Main Page]]",
+ "apihelp-query+revisions-description": "Obter información da modificación.\n\nPode usarse de varias formas:\n#Obter datos sobre un conxunto de páxinas (última modificación), fixando os títulos ou os IDs das páxinas.\n#Obter as modificacións da páxina indicada, usando os títulos ou os IDs de páxinas con comezar, rematar ou límite.\n#Obter os datos sobre un conxunto de modificacións fixando os seus IDs cos seus IDs de modificación.",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "Só pode usarse cunha única páxina (mode #2).",
+ "apihelp-query+revisions-param-startid": "Desde que ID de revisión comezar a enumeración.",
+ "apihelp-query+revisions-param-endid": "Rematar a enumeración de revisión neste ID de revisión.",
+ "apihelp-query+revisions-param-start": "Desde que selo de tempo comezar a enumeración.",
+ "apihelp-query+revisions-param-end": "Enumerar desde este selo de tempo.",
+ "apihelp-query+revisions-param-user": "Só incluir revisión feitas polo usuario.",
+ "apihelp-query+revisions-param-excludeuser": "Excluír revisións feitas polo usuario.",
+ "apihelp-query+revisions-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+revisions-param-token": "Que identificadores obter para cada revisión.",
+ "apihelp-query+revisions-example-content": "Obter datos con contido da última revisión dos títulos <kbd>API</kbd> e <kbd>Main Page</kbd>.",
+ "apihelp-query+revisions-example-last5": "Mostrar as cinco últimas revisión da <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+revisions-example-first5": "Mostar as cinco primeiras revisións da <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+revisions-example-first5-after": "Mostrar as cinco primeiras revisións da <kbd>Páxina Principal</kbd> feitas despois de 2006-05-01.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Mostrar as cinco primeiras revisións da <kbd>Páxina Principal</kbd> que non foron feitas polo usuario anónimo <kbd>127.0.0.1</kbd>.",
+ "apihelp-query+revisions-example-first5-user": "Mostrar as cinco primeiras revisión da <kbd>Páxina Principal</kbd> feitas polo usuario <kbd>MediaWiki default</kbd>.",
+ "apihelp-query+revisions+base-param-limit": "Limitar cantas revisións se van devolver.",
+ "apihelp-query+revisions+base-param-expandtemplates": "Expandir os modelos no contido da revisión (require $1prop=content).",
+ "apihelp-query+revisions+base-param-generatexml": "Xenerar a árbore de análise XML para o contido da revisión (require $1prop=content).",
+ "apihelp-query+revisions+base-param-parse": "Analizar o contido da revisión (require $1prop=content). Por razóns de rendemento, se se usa esta opción, $1limit cámbiase a 1.",
+ "apihelp-query+revisions+base-param-section": "Recuperar unicamente o contido deste número de sección.",
+ "apihelp-query+revisions+base-param-diffto": "ID de revisión a comparar con cada revisión. Use <kbd>prev</kbd>, <kbd>next</kbd> e <kbd>cur</kbd> para a versión precedente, seguinte e actual respectivamente.",
+ "apihelp-query+revisions+base-param-difftotext": "Texto co que comparar cada revisión. Só compara un número limitado de revisións. Ignora <var>$1diffto</var>. Se <var>$1section</var> ten valor, só se comparará co texto esa sección.",
+ "apihelp-query+revisions+base-param-contentformat": "Formato de serialización usado por <var>$1difftotext</var> e esperado para a saída do contido.",
+ "apihelp-query+search-description": "Facer unha busca por texto completo.",
+ "apihelp-query+search-param-search": "Buscar tódolos títulos de páxina (ou contido) que teñan este valor.",
+ "apihelp-query+search-param-namespace": "Buscar só nestes espazos de nomes.",
+ "apihelp-query+search-param-what": "Que tipo de busca lanzar.",
+ "apihelp-query+search-param-info": "Que metadatos devolver.",
+ "apihelp-query+search-param-limit": "Número total de páxinas a devolver.",
+ "apihelp-query+search-param-interwiki": "Incluir na busca resultados de interwikis, se é posible.",
+ "apihelp-query+search-param-backend": "Que servidor de busca usar, se non se indica usa o que hai por defecto.",
+ "apihelp-query+search-example-simple": "Buscar por <kbd>significado</kbd>.",
+ "apihelp-query+search-example-text": "Buscar texto por <kbd>significado</kbd>.",
+ "apihelp-query+search-example-generator": "Obter información da páxina sobre as páxinas devoltas por unha busca por <kbd>significado</kbd>.",
+ "apihelp-query+siteinfo-description": "Devolver información xeral sobre o sitio.",
+ "apihelp-query+siteinfo-param-filteriw": "Só devolver entradas locais ou só non locais da correspondencia interwiki.",
+ "apihelp-query+siteinfo-param-showalldb": "Listar todos os servidores de base de datos, non só o que teña máis retardo.",
+ "apihelp-query+siteinfo-param-numberingroup": "Listar o número de usuarios nos grupos de usuarios.",
+ "apihelp-query+siteinfo-param-inlanguagecode": "Código de lingua para os nomes de lingua localizados (a mellor forma posible) e nomes de presentación.",
+ "apihelp-query+siteinfo-example-simple": "Obter información do sitio.",
+ "apihelp-query+siteinfo-example-interwiki": "Obter unha lista de prefixos interwiki locais.",
+ "apihelp-query+siteinfo-example-replag": "Revisar o retardo de replicación actual.",
+ "apihelp-query+stashimageinfo-description": "Devolve a información dos ficheiros almacenados.",
+ "apihelp-query+stashimageinfo-param-filekey": "Clave que identifica unha subida precedente e que foi almacenada temporalmente.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias para $1filekey, para compatibilidade con versións antigas.",
+ "apihelp-query+stashimageinfo-example-simple": "Devolve a información dun ficheiro almacenado.",
+ "apihelp-query+stashimageinfo-example-params": "Devolve as miniaturas de dous ficheiros almacenados.",
+ "apihelp-query+tags-description": "Lista de marcas de cambios.",
+ "apihelp-query+tags-param-limit": "Máximo número de etiquetas a listar.",
+ "apihelp-query+tags-example-simple": "Listar as marcas dispoñibles",
+ "apihelp-query+templates-description": "Devolve todas as páxinas incluídas na páxina indicada.",
+ "apihelp-query+templates-param-namespace": "Mostrar modelos só neste espazo de nomes.",
+ "apihelp-query+templates-param-limit": "Número de modelos a devolver.",
+ "apihelp-query+templates-param-templates": "Listar só eses modelos. Útil para verificar se unha páxina concreta ten un modelo determinado.",
+ "apihelp-query+templates-param-dir": "Dirección na cal listar.",
+ "apihelp-query+templates-example-simple": "Coller os modelos usado na <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+templates-example-generator": "Obter información sobre os modelos usados na <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+templates-example-namespaces": "Obter páxinas nos espazos de nomes {{ns:user}} e {{ns:template}} que se transclúen na <kbd>Páxina Principal</kbd>.",
+ "apihelp-query+tokens-description": "Recupera os identificadores das accións de modificación de datos.",
+ "apihelp-query+tokens-param-type": "Tipos de identificadores a consultar.",
+ "apihelp-query+tokens-example-simple": "Recuperar un identificador csrf (por defecto).",
+ "apihelp-query+tokens-example-types": "Recuperar un identificador vixiancia e un de patrulla.",
+ "apihelp-query+transcludedin-description": "Atopar todas as páxinas que inclúen ás páxinas indicadas.",
+ "apihelp-query+transcludedin-param-prop": "Que propiedades obter:\n;pageid:ID de páxina de cada páxina.\n;title:Título de cada páxina.\n;redirect:Marca si a páxina é unha redirección.",
+ "apihelp-query+transcludedin-param-namespace": "Só incluir páxinas nestes espacios de nomes.",
+ "apihelp-query+transcludedin-param-limit": "Cantos mostrar.",
+ "apihelp-query+transcludedin-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
+ "apihelp-query+transcludedin-example-simple": "Obter unha lista de páxinas que inclúen a <kbd>Main Page</kbd>.",
+ "apihelp-query+transcludedin-example-generator": "Obter información sobre as páxinas que inclúen <kbd>Main Page</kbd>.",
+ "apihelp-query+usercontribs-description": "Mostrar tódalas edicións dun usuario.",
+ "apihelp-query+usercontribs-param-limit": "Máximo número de contribucións a mostar.",
+ "apihelp-query+usercontribs-param-start": "Selo de tempo de comezo ó que volver.",
+ "apihelp-query+usercontribs-param-end": "Selo de tempo de fin ó que volver.",
+ "apihelp-query+usercontribs-param-user": "Usuarios para os que recuperar as contribucións.",
+ "apihelp-query+usercontribs-param-userprefix": "Recuperar as contribucións de todos os usuarios cuxo nome comece por este valor. Ignora $1user.",
+ "apihelp-query+usercontribs-param-namespace": "Só listar contribucións nestes espazos de nomes.",
+ "apihelp-query+usercontribs-param-show": "Só mostrar elementos que cumpran estos criterios, p.ex. só edicións menores: <kbd>$2show=!minor</kbd>.\n\nSe está fixado <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd>, as modificacións máis antigas que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) non se mostrarán.",
+ "apihelp-query+usercontribs-param-tag": "Só listar revisións marcadas con esta etiqueta.",
+ "apihelp-query+usercontribs-param-toponly": "Listar só cambios que son a última revisión.",
+ "apihelp-query+usercontribs-example-user": "Mostrar as contribucións do usuario <kbd>Exemplo</kbd>.",
+ "apihelp-query+usercontribs-example-ipprefix": "Mostrar contribucións de tódalas direccións IP que comezan por <kbd>192.0.2.</kbd>.",
+ "apihelp-query+userinfo-description": "Obter información sobre o usuario actual.",
+ "apihelp-query+userinfo-example-simple": "Obter información sobre o usuario actual.",
+ "apihelp-query+userinfo-example-data": "Obter información adicional sobre o usuario actual.",
+ "apihelp-query+users-description": "Obter información sobre unha lista de usuarios.",
+ "apihelp-query+users-param-prop": "Que información incluír:\n;blockinfo:Etiquetas se o usuario está bloqueado, por quen, e por que razón.\n;groups:Lista todos os grupos ós que pertence cada usuario.\n;implicitgroups:Lista os grupos dos que un usuario é membro de forma automatica.\n;rights:Lista todos os dereitos que ten cada usuario.\n;editcount:Engade o contador de edicións do usuario.\n;registration:Engade o selo de tempo do rexistro do usuario.\n;emailable:Marca se o usuario pode e quere recibir correos usando [[Special:Emailuser]].\n;gender:Marca o xénero do usuario. Devolve \"home\", \"muller\" ou \"descoñecido\".",
+ "apihelp-query+users-param-users": "Lista de usuarios para os que obter información.",
+ "apihelp-query+users-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
+ "apihelp-query+users-example-simple": "Mostar información para o usuario <kbd>Exemplo</kbd>.",
+ "apihelp-query+watchlist-description": "Ver os cambios recentes das páxinas na lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-param-allrev": "Incluír múltiples revisións da mesma páxina dentro do intervalo de tempo indicado.",
+ "apihelp-query+watchlist-param-start": "Selo de tempo para comezar a enumeración",
+ "apihelp-query+watchlist-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+watchlist-param-namespace": "Filtrar os cambios a só os espazos de nomes indicados.",
+ "apihelp-query+watchlist-param-user": "Só listar cambios deste usuario.",
+ "apihelp-query+watchlist-param-excludeuser": "Non listar cambios deste usuario.",
+ "apihelp-query+watchlist-param-limit": "Cantos resultados totais mostrar por petición.",
+ "apihelp-query+watchlist-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
+ "apihelp-query+watchlist-param-type": "Que tipos de cambios mostrar:\n;edit:Modificacións normais de páxina.\n;external:Modificacións externas.\n;new:Creación de páxinas.\n;log:Entradas no rexistro.",
+ "apihelp-query+watchlist-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
+ "apihelp-query+watchlist-param-token": "Identificador de seguridade (dispoñible nas [[Special:Preferences#mw-prefsection-watchlist|preferencias]] de usuario) para permitir o acceso a outros á súa páxina de vixiancia.",
+ "apihelp-query+watchlist-example-simple": "Listar a última revisión das páxinas recentemente modificadas da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-props": "Buscar información adicional sobre a última revisión das páxinas modificadas recentemente da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-allrev": "Buscar a información sobre todos os cambios recentes das páxinas da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-generator": "Buscar a información de páxina das páxinas cambiadas recentemente da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-generator-rev": "Buscar a información da revisión dos cambios recentes de páxinas na lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlist-example-wlowner": "Listar a última revisión das páxinas cambiadas recentemente da lista de vixiancia do usuario <kbd>Example</kbd>.",
+ "apihelp-query+watchlistraw-description": "Obter todas as páxinas da lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlistraw-param-namespace": "Só listar páxinas nestes espazos de nomes.",
+ "apihelp-query+watchlistraw-param-limit": "Cantos resultados totais mostrar por petición.",
+ "apihelp-query+watchlistraw-param-prop": "Que propiedades adicionais obter:\n;changed:Engade o selo de tempo da última notificación ó usuario dunha modificación.",
+ "apihelp-query+watchlistraw-param-show": "Só listar os elementos que cumplen estos criterios.",
+ "apihelp-query+watchlistraw-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
+ "apihelp-query+watchlistraw-param-token": "Identificador de seguridade (dispoñible nas [[Special:Preferences#mw-prefsection-watchlist|preferencias]] de usuario) para permitir o acceso a outros á súa páxina de vixiancia.",
+ "apihelp-query+watchlistraw-example-simple": "Listar páxinas na lista de vixiancia do usuario actual.",
+ "apihelp-query+watchlistraw-example-generator": "Buscar a información de páxina das páxinas da lista de vixiancia do usuario actual.",
+ "apihelp-revisiondelete-description": "Borrar e restaurar revisións.",
+ "apihelp-revisiondelete-param-type": "Tipo de borrado de revisión a ser tratada.",
+ "apihelp-revisiondelete-param-target": "Título de páxina para o borrado da revisión, se requerido para o tipo.",
+ "apihelp-revisiondelete-param-ids": "Identificadores para as revisións a ser borradas.",
+ "apihelp-revisiondelete-param-hide": "Que ocultar para cada revisión.",
+ "apihelp-revisiondelete-param-show": "Que mostrar para cada revisión.",
+ "apihelp-revisiondelete-param-suppress": "Eliminar os datos dos administradores así coma dos doutros.",
+ "apihelp-revisiondelete-param-reason": "Razón para o borrado ou restaurado.",
+ "apihelp-revisiondelete-example-revision": "Ocultar contido para revisión <kbd>12345</kbd> na <kbd>Páxina Principal</kbd>.",
+ "apihelp-revisiondelete-example-log": "Ocultar todos os datos da entrada de rexistro <kbd>67890</kbd> coa razón <kbd>BLP violation</kbd>.",
+ "apihelp-rollback-description": "Desfacer a última modificación da páxina.\n\nSe o último usuario que modificou a páxina fixo varias modificacións nunha fila, desfaranse todas.",
+ "apihelp-rollback-param-title": "Título da páxina a desfacer. Non pode usarse xunto con <var>$1pageid</var>.",
+ "apihelp-rollback-param-pageid": "ID da páxina a desfacer. Non pode usarse xunto con <var>$1title</var>.",
+ "apihelp-rollback-param-user": "Nome do usuario cuxas modificacións van a desfacerse.",
+ "apihelp-rollback-param-summary": "Personalizar o resumo de edición. Se está baleiro, usarase o resumo por defecto.",
+ "apihelp-rollback-param-markbot": "Marcar as edicións revertidas e a reversión como edicións de bot.",
+ "apihelp-rollback-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-rollback-example-simple": "Desfacer as últimas edicións á <kbd>Páxina Principal</kbd> do usuario <kbd>Exemplo</kbd>.",
+ "apihelp-rollback-example-summary": "Desfacer as últimas edicións á páxina <kbd>Main Page</kbd> polo usuario da dirección IP <kbd>192.0.2.5</kbd> co resumo de edición <kbd>Revertindo vandalismo</kbd>, marcar esas edicións e a reversión como edicións de bot.",
+ "apihelp-rsd-description": "Exportar un esquema RSD (Really Simple Discovery, Descubrimento Moi Simple).",
+ "apihelp-rsd-example-simple": "Exportar o esquema RSD.",
+ "apihelp-setnotificationtimestamp-description": "Actualiza o selo de tempo de notificación das páxinas vixiadas.\n\nIsto afecta ó resalte das páxinas modificadas na lista de vixiancia e historial, e o envío de correo cando a preferencia \"Mandarme un correo cando cambie unha páxina da miña lista de vixiancia\" está activa.",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "Traballar en tódalas páxinas vixiadas.",
+ "apihelp-setnotificationtimestamp-param-timestamp": "Selo de tempo ó que fixar a notificación.",
+ "apihelp-setnotificationtimestamp-param-torevid": "Modificación á que fixar o selo de tempo de modificación (só unha páxina).",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "Modificación na que fixar o selo de tempo de modificación máis recente (só unha páxina).",
+ "apihelp-setnotificationtimestamp-example-all": "Restaurar o estado de notificación para toda a páxina de vixiancia",
+ "apihelp-setnotificationtimestamp-example-page": "Restaurar o estado de notificación para a <kbd>Páxina Principal</kbd>.",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fixar o selo de tempo de notificación para a <kbd>Main page</kbd> de forma que todas as edicións dende o 1 se xaneiro de 2012 queden sen revisar.",
+ "apihelp-setnotificationtimestamp-example-allpages": "Restaurar o estado de notificación para as páxinas no espazo de nomes de <kbd>{{ns:user}}</kbd>.",
+ "apihelp-tokens-description": "Obter os identificadores para accións de modificación de datos.\n\nEste módulo está obsoleto e foi reemprazado por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+ "apihelp-tokens-param-type": "Tipos de identificadores a consultar.",
+ "apihelp-tokens-example-edit": "Recuperar un identificador de modificación (por defecto).",
+ "apihelp-tokens-example-emailmove": "Recuperar un identificador de correo e un identificador de movemento.",
+ "apihelp-unblock-description": "Desbloquear un usuario.",
+ "apihelp-unblock-param-id": "ID do bloque a desbloquear (obtido de <kbd>list=blocks</kbd>). Non pode usarse xunto con <var>$1user</var>.",
+ "apihelp-unblock-param-user": "Nome de usuario, dirección IP ou rango de direccións IP a desbloquear. Non pode usarse xunto con <var>$1id</var>.",
+ "apihelp-unblock-param-reason": "Razón para desbloquear.",
+ "apihelp-unblock-example-id": "Desbloquear bloqueo ID #<kbd>105</kbd>.",
+ "apihelp-unblock-example-user": "Desbloquear usuario <kbd>Bob</kbd> con razón <kbd>Síntoo Bob</kbd>.",
+ "apihelp-undelete-description": "Restaurar modificacións dunha páxina borrada.\n\nUnha lista de modificacións borradas (incluíndo os seus selos de tempo) pode consultarse a través de [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], e unha lista de IDs de ficheiros borrados pode consultarse a través de [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+ "apihelp-undelete-param-title": "Título da páxina a restaurar.",
+ "apihelp-undelete-param-reason": "Razón para restaurar.",
+ "apihelp-undelete-param-timestamps": "Selos de tempo das modificacións a restaurar. Se <var>$1timestamps</var> e <var>$1fileids</var> están baleiras, restaurarase todo.",
+ "apihelp-undelete-param-fileids": "IDs das modificacións de ficheiro a restaurar. Se <var>$1timestamps</var> e <var>$1fileids</var> están baleiras, serán restauradas todas.",
+ "apihelp-undelete-param-watchlist": "Engadir ou eliminar a páxina da lista de vixiancia do usuario actual sen condicións, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-undelete-example-page": "Restaurar a <kbd>Páxina Principal</kbd>.",
+ "apihelp-undelete-example-revisions": "Restaurar dúas revisións de <kbd>[[Main Page]]</kbd>.",
+ "apihelp-upload-param-filename": "Nome de ficheiro obxectivo.",
+ "apihelp-upload-param-comment": "Subir comentario. Tamén usado como texto da páxina inicial para ficheiros novos se non se especifica <var>$1text</var>.",
+ "apihelp-upload-param-text": "Texto da páxina inicial para novos ficheiros.",
+ "apihelp-upload-param-watch": "Vixiar a páxina.",
+ "apihelp-upload-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
+ "apihelp-upload-param-ignorewarnings": "Ignorar as advertencias.",
+ "apihelp-upload-param-file": "Contido do ficheiro.",
+ "apihelp-upload-param-url": "URL onde buscar o ficheiro.",
+ "apihelp-upload-param-filekey": "Clave que identifica unha subida precedente e que foi almacenada temporalmente.",
+ "apihelp-upload-param-sessionkey": "Igual a $1filekey, mantido por razóns de compatibilidade con procesos antigos.",
+ "apihelp-upload-param-stash": "Se está indicado, o servidor almacenará o ficheiro temporalmente no canto de engadilo ó repositorio.",
+ "apihelp-upload-param-filesize": "Tamaño de ficheiro completo da carga.",
+ "apihelp-upload-param-offset": "Desaxuste do bloque en bytes.",
+ "apihelp-upload-param-chunk": "Contido do bloque.",
+ "apihelp-upload-param-async": "Facer de forma asíncrona as operacións de ficheiro potencialmente grandes cando sexa posible.",
+ "apihelp-upload-param-asyncdownload": "Facer de forma asíncrona a busca dunha URL.",
+ "apihelp-upload-param-leavemessage": "Se se usa asyncdownload, deixar unha mensaxe na páxina de conversa do usuario cando se remate.",
+ "apihelp-upload-param-statuskey": "Buscar o estado da subida para esta clave de ficheiro (subida por URL).",
+ "apihelp-upload-param-checkstatus": "Só buscar o estado da subida da clave de ficheiro indicada.",
+ "apihelp-upload-example-url": "Carga dunha URL",
+ "apihelp-upload-example-filekey": "Completar carga que fallou debido a avisos",
+ "apihelp-userrights-description": "Cambiar a pertencia dun usuario a un grupo.",
+ "apihelp-userrights-param-user": "Nome de usuario.",
+ "apihelp-userrights-param-userid": "ID de usuario.",
+ "apihelp-userrights-param-add": "Engadir o usuario a estes grupos.",
+ "apihelp-userrights-param-remove": "Eliminar o usuario destes grupos.",
+ "apihelp-userrights-param-reason": "Motivo para o cambio.",
+ "apihelp-userrights-example-user": "Engadir o usuario <kbd>FooBot</kbd> ó grupo <kbd>bot</kbd>, e eliminar dos grupos <kbd>sysop</kbd> e <kbd>burócrata</kbd>.",
+ "apihelp-userrights-example-userid": "Engadir ó usuario con ID <kbd>123</kbd> ó grupo <kbd>bot</kbd>, e borralo dos grupos <kbd>sysop</kbd> e <kbd>burócrata</kbd>.",
+ "apihelp-watch-description": "Engadir ou borrar páxinas da lista de vixiancia do usuario actual.",
+ "apihelp-watch-param-title": "Páxina a vixiar/deixar de vixiar. Usar no canto <var>$1titles</var>.",
+ "apihelp-watch-param-unwatch": "Se está definido, a páxina deixará de estar vixiada en vez de vixiada.",
+ "apihelp-watch-example-watch": "Vixiar a páxina <kbd>Páxina Principal</kbd>.",
+ "apihelp-watch-example-unwatch": "Deixar de vixiar a páxina <kbd>Páxina Principal</kbd>.",
+ "apihelp-watch-example-generator": "Vixiar as primeiras páxinas no espazo de nomes principal",
+ "apihelp-format-example-generic": "Formatar o resultado da consulta no formato $1.",
+ "apihelp-dbg-description": "Datos de saída en formato <code>var_export()</code> de PHP.",
+ "apihelp-dbgfm-description": "Datos de saída en formato <code>var_export()</code> de PHP(impresión en HTML).",
+ "apihelp-dump-description": "Datos de saída en formato PHP <code>var_dump()</code>.",
+ "apihelp-dumpfm-description": "Datos de saída en formato <code>var_dump()</code> de PHP(impresión en HTML).",
+ "apihelp-json-description": "Datos de saída en formato JSON.",
+ "apihelp-json-param-callback": "Se está especificado, inclúe a saída na chamada da función indicada. Para maior seguridade, todos os datos específicos do usuario serán restrinxidos.",
+ "apihelp-json-param-utf8": "Se está especificado, codifica a maioría (pero non todos) dos caracteres ASCII como UTF-8 no canto de reemprazalos con secuencias de escape hexadecimais.",
+ "apihelp-jsonfm-description": "Datos de saída en formato JSON(impresión en HTML).",
+ "apihelp-none-description": "Ningunha saída.",
+ "apihelp-php-description": "Datos de saída en formato serializado de PHP.",
+ "apihelp-phpfm-description": "Datos de saída en formato serializado de PHP(impresión en HTML).",
+ "apihelp-rawfm-description": "Datos de saída cos elementos de depuración en formato JSON(impresión en HTML).",
+ "apihelp-txt-description": "Datos de saída en formato PHP <code>print_r()</code>.",
+ "apihelp-txtfm-description": "Datos de saída en formato <code>print_r()</code> de PHP(impresión en HTML).",
+ "apihelp-wddx-description": "Datos de saída en formato WDDX.",
+ "apihelp-wddxfm-description": "Datos de saída en formato WDDX(impresión en HTML).",
+ "apihelp-xml-description": "Datos de saída en formato XML.",
+ "apihelp-xml-param-xslt": "Se está indicado, engade o nome da páxina como unha folla de estilo XSL. O valor debe ser un título no espazo de nomes {{ns:mediawiki}} rematando con <code>.xsl</code>.",
+ "apihelp-xml-param-includexmlnamespace": "Se está indicado, engade un espazo de nomes XML.",
+ "apihelp-xmlfm-description": "Datos de saída en formato XML(impresión en HTML).",
+ "apihelp-yaml-description": "Datos de saída en formato YAML.",
+ "apihelp-yamlfm-description": "Datos de saída en formato YAML(impresión en HTML).",
+ "api-format-title": "Resultado de API de MediaWiki",
+ "api-orm-param-props": "Campos a consultar.",
+ "api-orm-param-limit": "Número máximo de filas a mostrar.",
+ "api-pageset-param-titles": "Lista de títulos nos que traballar.",
+ "api-pageset-param-pageids": "Lista de identificadores de páxina nos que traballar.",
+ "api-pageset-param-revids": "Unha lista de IDs de modificacións sobre as que traballar.",
+ "api-pageset-param-generator": "Obter a lista de páxinas sobre as que traballar executando o módulo de consulta especificado.\n\n<strong>Nota:</strong>Os nomes de parámetro do xerador deben comezar cunha \"g\", vexa os exemplos.",
+ "api-pageset-param-redirects-generator": "Resolver automaticamente as redireccións en <var>$1titles</var>, <var>$1pageids</var>, e <var>$1revids</var>, e nas páxinas devoltas por <var>$1generator</var>.",
+ "api-pageset-param-redirects-nogenerator": "Resolver automaticamente as redireccións en <var>$1titles</var>, <var>$1pageids</var>, e <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Converter títulos a outras variantes se é preciso. Só funciona se a lingua de contido da wiki soporta a conversión en variantes. As linguas que soportan conversión en variante inclúen $1.",
+ "api-help-title": "Axuda da API de MediaWiki",
+ "api-help-lead": "Esta é unha páxina de documentación da API de MediaWiki xerada automaticamente.\n\nDocumentación e exemplos:\nhttps://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Módulo principal",
+ "api-help-flag-deprecated": "Este módulo está obsoleto.",
+ "api-help-flag-internal": "<strong>Este módulo é interno ou inestable. </strong> O seu funcionamento pode cambiar sen aviso previo.",
+ "api-help-flag-readrights": "Este módulo precisa permisos de lectura.",
+ "api-help-flag-writerights": "Este módulo precisa permisos de escritura.",
+ "api-help-flag-mustbeposted": "Este módulo só acepta peticións POST.",
+ "api-help-flag-generator": "Este módulo pode usarse como xenerador.",
+ "api-help-parameters": "{{PLURAL:$1|Parámetro|Parámetros}}:",
+ "api-help-param-deprecated": "Obsoleto.",
+ "api-help-param-required": "Este parámetro é obrigatorio.",
+ "api-help-param-list": "{{PLURAL:$1|1=Un valor|2=Valores (separados con <kbd>{{!}}</kbd>)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe ser baleiro|Pode ser baleiro, ou $2}}",
+ "api-help-param-limit": "Non se permiten máis de $1.",
+ "api-help-param-limit2": "Non se permiten máis de $1 ($2 para bots).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=O valor debe ser maior |2=Os valores deben ser maiores}} que $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=O valor debe ser menor |2=Os valores deben ser menores}} que $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=O valor debe estar entre $2 e $3 |2=Os valores deben estar entre $2 e $3}}.",
+ "api-help-param-upload": "Debe ser enviado como un ficheiro importado usando multipart/form-data.",
+ "api-help-param-multi-separate": "Separe os valores con <kbd>|</kbd>.",
+ "api-help-param-multi-max": "O número máximo de valores é {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} para os bots).",
+ "api-help-param-default": "Por defecto: $1",
+ "api-help-param-default-empty": "Por defecto: <span class=\"apihelp-empty\">(baleiro)</span>",
+ "api-help-param-token": "Un identificador \"$1\" recuperado por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "Por compatibilidade, o identificador usado na web UI tamén é aceptado.",
+ "api-help-param-disabled-in-miser-mode": "Desactivado debido ó [[mw:Manual:$wgMiserMode|modo minimal]].",
+ "api-help-param-limited-in-miser-mode": "<strong>Nota:</strong> Debido ó [[mw:Manual:$wgMiserMode|modo minimal]], usar isto pode devolver menos de <var>$1limit</var> resultados antes de seguir, en casos extremos, pode que non se devolvan resultados.",
+ "api-help-param-direction": "En que dirección enumerar:\n;newer:Lista os máis antigos primeiro. Nota: $1start ten que estar antes que $1end.\n;older:Lista os máis novos primeiro (por defecto). Nota: $1start ten que estar despois que $1end.",
+ "api-help-param-continue": "Cando estean dispoñibles máis resultados, use isto para continuar.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(sen descrición)</span>",
+ "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
+ "api-help-right-apihighlimits": "Usar os valores superiores das consultas da API (consultas lentas: $1; consultas rápidas: $2). Os límites para as consultas lentas tamén se aplican ós parámetros multivaluados.",
+ "api-credits-header": "Créditos"
+}
diff --git a/includes/api/i18n/he.json b/includes/api/i18n/he.json
new file mode 100644
index 00000000..fcc7f7bd
--- /dev/null
+++ b/includes/api/i18n/he.json
@@ -0,0 +1,180 @@
+{
+ "@metadata": {
+ "authors": [
+ "Guycn2",
+ "Amire80",
+ "Inkbug",
+ "Danny-w",
+ "YaronSh",
+ "ערן"
+ ]
+ },
+ "apihelp-main-param-action": "איזו פעולה לבצע.",
+ "apihelp-main-param-format": "התבנית של הפלט.",
+ "apihelp-main-param-curtimestamp": "הכללת חותמת הזמן הנוכחית בתוצאה.",
+ "apihelp-block-description": "חסימת משתמש.",
+ "apihelp-block-param-user": "שם משתמש, כתובת IP, או טווח IP שהנך רוצה לחסום.",
+ "apihelp-block-param-reason": "סיבה לחסימה.",
+ "apihelp-compare-param-fromtitle": "כותרת ראשונה להשוואה.",
+ "apihelp-compare-param-fromid": "מס׳ זיהוי של העמוד הראשון להשוואה.",
+ "apihelp-compare-param-fromrev": "גרסה ראשונה להשוואה.",
+ "apihelp-compare-param-totitle": "כותרת שנייה להשוואה.",
+ "apihelp-compare-param-toid": "מס׳ מזהה של העמוד השני להשוואה.",
+ "apihelp-compare-param-torev": "גרסה שנייה להשוואה.",
+ "apihelp-compare-example-1": "יצירת תיעוד שינוי בין גרסה 1 ל־2.",
+ "apihelp-createaccount-description": "יצירת חשבון משתמש חדש.",
+ "apihelp-createaccount-param-name": "שם משתמש.",
+ "apihelp-createaccount-param-password": "ססמה (לא ישפיע אם הוגדר <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "שם מתחם לאימות חיצוני (רשות).",
+ "apihelp-createaccount-param-token": "אסימון יצירת חשבון הושג בבקשה הראשונה.",
+ "apihelp-createaccount-param-email": "כתובת הדוא״ל של המשתמש (רשות).",
+ "apihelp-createaccount-param-realname": "השם האמתי של המשתמש (רשות).",
+ "apihelp-createaccount-param-mailpassword": "אם הוגדר ערך כלשהו, תישלח ססמה אקראית אל המשתמש.",
+ "apihelp-createaccount-param-reason": "הסיבה כרשות ליצירת החשבון כפי שתופיע ברישומים.",
+ "apihelp-createaccount-param-language": "קוד השפה שיוגדר כבררת המחדל למשתמש (רשות, בררת המחדל היא שפת התוכן).",
+ "apihelp-createaccount-example-pass": "יצירת המשתמש <kbd>testuser</kbd> עם הססמה <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "יצירת המשתמש <kbd>testmailuser</kbd> ושליחת ססמה שיוצרה אקראית בדוא״ל.",
+ "apihelp-delete-description": "מחיקת דף.",
+ "apihelp-delete-param-title": "כותרת העמוד למחיקה. לא ניתן להשתמש בשילוב עם <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "מס׳ הזיהוי של העמוד למחיקה. לא ניתן להשתמש בשילוב עם <var>$1title</var>.",
+ "apihelp-delete-param-reason": "סיבת המחיקה. אם לא הוגדרה, תתווסף סיבה שנוצרה אוטומטית.",
+ "apihelp-delete-param-watch": "הוספת העמוד לרשימת המעקב של המשתמש הנוכחי.",
+ "apihelp-delete-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
+ "apihelp-delete-example-simple": "מחיקת הדף הראשי",
+ "apihelp-edit-param-text": "תוכן הדף.",
+ "apihelp-edit-param-minor": "עריכה משנית.",
+ "apihelp-edit-example-edit": "עריכת דף",
+ "apihelp-emailuser-description": "שליחת דוא\"ל למשתמש.",
+ "apihelp-expandtemplates-param-title": "כותרת הדף.",
+ "apihelp-feedcontributions-param-year": "החל משנה (ולפני כן).",
+ "apihelp-feedcontributions-param-month": "החל מחודש (ולפני כן).",
+ "apihelp-feedcontributions-param-tagfilter": "סינון תרומות בעלות התגיות הבאות.",
+ "apihelp-feedcontributions-param-deletedonly": "הצגת תרומות שנמחקו בלבד.",
+ "apihelp-feedcontributions-param-toponly": "הצגת עריכות שהן הגרסה העדכנית ביותר בלבד.",
+ "apihelp-feedcontributions-example-simple": "החזרת תרומות עבור המשתמש <kbd>Example</kbd>.",
+ "apihelp-feedrecentchanges-param-hideminor": "הסתרת שינוים משניים.",
+ "apihelp-feedrecentchanges-param-hidebots": "הסתרת שינויים שנעשו על ידי בוטים.",
+ "apihelp-feedrecentchanges-param-hideanons": "הסתרת שינויים שנעשו על ידי אנונימים.",
+ "apihelp-feedrecentchanges-param-hideliu": "הסתרת שינויים שנעשו על ידי משתמשים רשומים.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "הסתרת שינויים שנבדקו.",
+ "apihelp-feedrecentchanges-param-hidemyself": "הסתרת שינוים שנעשו על ידי המשתמש הנוכחי.",
+ "apihelp-feedrecentchanges-param-tagfilter": "סינון לפי תגית.",
+ "apihelp-feedrecentchanges-param-target": "הצגת שינויים שנעשו בדפים המקושרים לדף זה בלבד.",
+ "apihelp-feedrecentchanges-example-simple": "הצגת שינויים אחרונים.",
+ "apihelp-feedrecentchanges-example-30days": "הצגת שינויים אחרונים עבור 30 ימים.",
+ "apihelp-help-description": "הצגת עזרה עבור היחידות שצוינו.",
+ "apihelp-help-param-helpformat": "תסדיר פלט העזרה.",
+ "apihelp-help-param-toc": "לכלול תוכן עניינים בפלט HTML.",
+ "apihelp-import-param-xml": "קובץ XML שהועלה.",
+ "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-description": "יציאה וניקוי של נתוני הפעילות.",
+ "apihelp-logout-example-logout": "הוצאת המשתמש הנוכחי.",
+ "apihelp-managetags-description": "ביצוע פעולות ניהוליות הקשורות בשינוי תגיות.",
+ "apihelp-move-description": "העברת עמוד.",
+ "apihelp-opensearch-param-search": "מחרוזת לחיפוש.",
+ "apihelp-opensearch-param-namespace": "שמות מתחם לחיפוש.",
+ "apihelp-opensearch-param-format": "תסדיר הפלט.",
+ "apihelp-protect-example-protect": "הגנה על דף.",
+ "apihelp-query-param-list": "אילו רשימות לקבל.",
+ "apihelp-query+allcategories-description": "מניין של כל הקטגוריות.",
+ "apihelp-query+allcategories-param-from": "הקטגוריה ממנה להתחיל למנות.",
+ "apihelp-query+allimages-param-sha1": "גיבוב SHA1 של תמונה. דריסת $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "גיבוב SHA1 של התמונה בבסיס 36 (הבסיס בו נעשה שימוש במדיה־ויקי).",
+ "apihelp-query+allimages-param-limit": "כמה תמונות להחזיר בסך הכול.",
+ "apihelp-query+allimages-example-B": "הצגת רשימה של קבצים שמתחילים באות <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-generator": "הצגת מידע על 4 קבצים המתחילים באות <kbd>T</kbd>.",
+ "apihelp-query+allmessages-param-prop": "אלו מאפיינים לקבל.",
+ "apihelp-query+allpages-param-limit": "כמה דפים להחזיר בסך הכול.",
+ "apihelp-query+allredirects-param-limit": "כמה פריטים להחזיר בסך הכול.",
+ "apihelp-query+categories-param-limit": "כמה קטגוריות להחזיר.",
+ "apihelp-query+categorymembers-param-startsortkey": "כדאי להשתמש ב־$1starthexsortkey במקום.",
+ "apihelp-query+categorymembers-param-endsortkey": "כדאי להשתמש ב־$1endhexsortkey במקום.",
+ "apihelp-query+categorymembers-example-simple": "קבלת עשרת העמודים הראשונים שתחת <kbd>קטגוריה:פיזיקה</kbd>.",
+ "apihelp-query+contributors-param-limit": "כמה תורמים להחזיר.",
+ "apihelp-query+contributors-example-simple": "הצגת תורמים לדף <kbd>עמוד ראשי</kbd>.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|מצב|מצבים}}: $2",
+ "apihelp-query+duplicatefiles-param-limit": "כמה קבצים כפולים להחזיר.",
+ "apihelp-query+duplicatefiles-param-localonly": "חיפוש אחר קבצים במאגר המקומי בלבד.",
+ "apihelp-query+duplicatefiles-example-simple": "חיפוש אחר כפילויות של [[:קובץ:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "חיפוש אחר כפילויות בין כל הקבצים.",
+ "apihelp-query+extlinks-param-limit": "כמה קישורים להחזיר.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "תגובה על הגרסה.",
+ "apihelp-query+imageinfo-param-localonly": "חיפוש אחר קבצים במאגר המקומי בלבד.",
+ "apihelp-query+imageinfo-example-simple": "קבלת פרטים על הגרסה הנוכחית של [[:קובץ:Albert Einstein Head.jpg]].",
+ "apihelp-query+images-param-limit": "כמה קבצים להחזיר.",
+ "apihelp-query+info-paramvalue-prop-watchers": "מספר העוקבים, אם קיבלת הרשאה.",
+ "apihelp-query+info-paramvalue-prop-readable": "האם המשתמש יכול להציג דף זה.",
+ "apihelp-query+langlinks-param-title": "קישור לחיפוש. חובה להשתמש עם <var>$1lang</var>.",
+ "apihelp-query+links-description": "החזרת כל הקישורים מהדפים שצוינו.",
+ "apihelp-query+linkshere-param-limit": "כמה להחזיר.",
+ "apihelp-query+linkshere-param-show": "הצגת פריטים שתואמים את הדרישות הללו בלבד:\n;redirect:הצגת הפניות בלבד.\n;!redirect:הצגת קישורים שאינם הפניות בלבד.",
+ "apihelp-query+logevents-description": "קבלת אירועים מהרישומים.",
+ "apihelp-query+pageswithprop-param-dir": "באיזה כיוון לסדר.",
+ "apihelp-query+pageswithprop-example-simple": "הצגת עשרת הדפים הראשונים שעושים שימוש ב־<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+ "apihelp-query+pageswithprop-example-generator": "קבלת פרטיהם של עשרת הדפים הראשונים המשתמשים ב־<code>_&#95;NOTOC_&#95;</code>.",
+ "apihelp-query+prefixsearch-param-search": "מחרוזת לחיפוש.",
+ "apihelp-query+prefixsearch-param-limit": "מספר התוצאות המרבי להחזרה.",
+ "apihelp-query+prefixsearch-param-offset": "מספר תוצאות לדילוג.",
+ "apihelp-query+querypage-param-limit": "מספר תוצאות להחזרה.",
+ "apihelp-query+recentchanges-description": "מניית השינויים האחרונים.",
+ "apihelp-query+recentchanges-param-limit": "כמה שינויים להחזיר בסך הכול.",
+ "apihelp-query+recentchanges-param-type": "אילו סוגים של שינויים להציג.",
+ "apihelp-query+recentchanges-example-simple": "הצגת השינויים האחרונים.",
+ "apihelp-query+redirects-param-limit": "כמה הפניות להחזיר.",
+ "apihelp-query+revisions+base-param-limit": "הגבלת מספר הגרסאות שיוחזרו.",
+ "apihelp-query+tokens-example-types": "אחזור אסימון של רשימת המעקב ואסימון של ניטור",
+ "apihelp-xml-param-xslt": "אם צוין, יש להוסיף את שם הדף כגיליון עיצוב XSL. על הערך להיות כותרת ב {{ns:mediawiki}} במרחב שם המשתמש, המסתיים ב- <code>.xsl</code>.",
+ "api-format-title": "תוצאה של API של מדיה־ויקי",
+ "api-format-prettyprint-header": "זהו ייצוג ב־HTML של תסדיר $1. תסדיר HTML טוב לתיקון שגיאות, אבל אינו מתאים ליישומים.\n\nיש לציין את הפרמטר format כדי לשנות את תסדיר הפלט. כדי לראות ייצוג של תסדיר $1 לא ב־HTML יש לרשום format=$2.\n\nר' את [https://www.mediawiki.org/wiki/API התיעוד המלא], או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
+ "api-orm-param-props": "באילו שדות לעשות שאילתה.",
+ "api-orm-param-limit": "מספר מרבי של שורות להחזיר.",
+ "api-pageset-param-titles": "רשימת כותרות.",
+ "api-pageset-param-pageids": "רשימת מזהי דף לעובד עליהם.",
+ "api-pageset-param-revids": "רשימת מזהי גרסה לעבוד עליהם.",
+ "api-pageset-param-generator": "קבלת רשימת דפים לעבוד עליהם על־ידי הרצת יחידת שאילתה שצוינה.\n\n'''לתשומת לבך:''' לשמות בפרמטר generator צריכה להיות התחילית \"g\", ר' דוגמאות.",
+ "api-pageset-param-redirects-generator": "פתרון אוטומטי של הפניות ב־$1titles, ב־$1pageids, וב־$1revids, ודפים שמחזיר $1generator.",
+ "api-pageset-param-redirects-nogenerator": "פתרון אוטומטי של הפניות ב־$1titles, ב־$1pageids וב־$1revids.",
+ "api-pageset-param-converttitles": "המרת כותרות לסוגי כתב אחרים אם זה נחוץ. זה עובד רק אם שפת הכותרת של הוויקי תומכת בהמרת סוגי כתב. השפות שתמכות בהמרת סוגי כתב הן $1.",
+ "api-help-title": "עזרה של MediaWiki API",
+ "api-help-lead": "זהו דף תיעוד של API שנוצר באופן אוטומטי.\n\nתיעוד ודוגמאות: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "יחידה ראשית",
+ "api-help-flag-deprecated": "יחידה זו אינה מומלצת לשימוש.",
+ "api-help-flag-internal": "<strong>יחידה זו היא פנימית או לא יציבה.</strong>\nהפעולה שלה עשויה להשתנות ללא הודעה מוקדמת.",
+ "api-help-flag-readrights": "יחידה זו דורשת הרשאות קריאה.",
+ "api-help-flag-writerights": "יחידה זו דורשת הרשאות כתיבה.",
+ "api-help-flag-mustbeposted": "יחידה זו מקבלת רק בקשות POST.",
+ "api-help-flag-generator": "היחידה הזאת יכולה להיות מחולל.",
+ "api-help-parameters": "{{PLURAL:$1|פרמטר|פרמטרים}}:",
+ "api-help-param-deprecated": "מיושן.",
+ "api-help-param-required": "פרמטר זה נדרש.",
+ "api-help-param-list": "{{PLURAL:$1|1=ערך אחד|2=ערכים (מופרדים באמצעות \"{{!}}\")}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=חייב להיות ריק|יכול להיות ריק או $2}}",
+ "api-help-param-limit": "מספר הפרמטרים לא יכול להיות גדול מ־$1.",
+ "api-help-param-limit2": "המספר המרבי המותר הוא $1 (עבור בוטים – $2).",
+ "api-help-param-integer-min": "ה{{PLURAL:$1|1=ערך|2=ערכים}} לא יכולים להיות קטנים מ־$2.",
+ "api-help-param-integer-max": "ה{{PLURAL:$1|1=ערך לא יכול להיות גדול|2=ערכים לא יכולים להיות גדולים}} מ־$3.",
+ "api-help-param-integer-minmax": "ה{{PLURAL:$1|1=ערך חייב|2=ערכים חייבים}} להיות בין $2 ל־$3.",
+ "api-help-param-upload": "חייב להישלח (posted) בתור העלאת קובץ באמצעות multipart/form-data.",
+ "api-help-param-multi-separate": "הפרדה בין ערכים נעשית באמצעות <kbd>|</kbd>",
+ "api-help-param-multi-max": "מספר הערכים המרבי הוא {{PLURAL:$1|$1}} (עבור בוטים – {{PLURAL:$2|$2}}).",
+ "api-help-param-default": "ברירת מחדל: $1",
+ "api-help-param-default-empty": "ברירת מחדל: <span class=\"apihelp-empty\">(ריק)</span>",
+ "api-help-param-token": "אסימון \"$1\" אוחזר מ־[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "לשם תאימות, גם האסימון שמשמש בממשק דפדפן מתקבל.",
+ "api-help-param-disabled-in-miser-mode": "כבוי בשל [https://www.mediawiki.org/wiki/Manual:$wgMiserMode מצב חיסכון].",
+ "api-help-param-limited-in-miser-mode": "'''לתשומת לבך:''' בשל [https://www.mediawiki.org/wiki/Manual:$wgMiserMode מצב חיסכון], שימוש בזה יכול להוביל לפחות מ־\"$1limit\" תוצאות לפני המשך; במצבים קיצוניים ייתכן שיחזרו אפס תוצאות.",
+ "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-credits-header": "קרדיטים",
+ "api-credits": "מפתחי ה־API:\n* רואן קטאו (מפתח מוביל 2007–2009)\n* ויקטור וסילייב\n* בריאן טונג מין\n* סאם ריד\n* יורי אסטרחן (יוצר, מפתח מוביל מספטמבר 2006 עד ספטמבר 2007)\n* בראד יורש (מפתח מוביל מאז 2013)\n\nאנא שלחו הערות, הצעות ושאלות לכתובת mediawiki-api@lists.wikimedia.org או כתבו דיווח באג באתר https://bugzilla.wikimedia.org."
+}
diff --git a/includes/api/i18n/hsb.json b/includes/api/i18n/hsb.json
new file mode 100644
index 00000000..b25ae9b2
--- /dev/null
+++ b/includes/api/i18n/hsb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "J budissin"
+ ]
+ },
+ "apihelp-main-param-format": "Wudawanski format"
+}
diff --git a/includes/api/i18n/hu.json b/includes/api/i18n/hu.json
new file mode 100644
index 00000000..516d8c77
--- /dev/null
+++ b/includes/api/i18n/hu.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Csega",
+ "Dorgan"
+ ]
+ },
+ "apihelp-block-description": "Szerkesztő blokkolása",
+ "apihelp-block-param-reason": "Blokkolás oka.",
+ "apihelp-block-param-nocreate": "Új regisztráció megakadályozása",
+ "apihelp-createaccount-param-name": "Felhasználónév.",
+ "apihelp-delete-description": "Lap törlése.",
+ "apihelp-delete-example-simple": "Kezdőlap törlése.",
+ "apihelp-edit-example-edit": "Lap szerkesztése",
+ "apihelp-expandtemplates-param-title": "Lap címe.",
+ "apihelp-userrights-param-userid": "Felhasználói azonosító."
+}
diff --git a/includes/api/i18n/ia.json b/includes/api/i18n/ia.json
new file mode 100644
index 00000000..de9d65fe
--- /dev/null
+++ b/includes/api/i18n/ia.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "apihelp-main-param-action": "Qual action exequer.",
+ "apihelp-main-param-format": "Le formato del resultato.",
+ "apihelp-main-param-maxlag": "Le latentia maximal pote esser usate quando MediaWiki es installate in un cluster de base de datos replicate. Pro evitar actiones que causa additional latentia de replication de sito, iste parametro pote facer le cliente attender usque le latentia de replication es minus que le valor specificate. In caso de latentia excessive, le codice de error \"maxlag\" es retornate con un message como \"Attende $host: $lag secundas de latentia\".<br />Vide https://www.mediawiki.org/wiki/Manual:Maxlag_parameter pro plus information.",
+ "apihelp-main-param-smaxage": "Fixar le capite <code>s-maxage</code> a iste numero de secundas. Errores nunquam es mittite in cache.",
+ "apihelp-main-param-maxage": "Fixar le capite <code>max-age</code> a iste numero de secundas. Errores nunquam es mittite in cache.",
+ "apihelp-main-param-assert": "Verificar si le usator ha aperite session si mittite a \"user\", o si ha le derecto de usator robot si \"bot\".",
+ "apihelp-main-param-requestid": "Omne valor fornite hic essera includite in le responsa. Pote esser usate pro distinguer requestas.",
+ "apihelp-main-param-servedby": "Includer in le resultato le nomine del host que ha servite le requesta.",
+ "apihelp-main-param-curtimestamp": "Includer le data e hora actual in le resultato.",
+ "apihelp-main-param-origin": "Quando acceder al API usante un requesta AJAX inter-dominios (CORS), mitte isto al dominio de origine. Isto debe esser includite in omne requesta pre-flight, e dunque debe facer parte del URI del requesta (e non del corpore POST). Isto debe corresponder exactemente a un del origines in le capite Origin:, dunque illo debe esser mittite a qualcusa como http://ia.wikipedia.org o https://meta.wikimedia.org. Si iste parametro non corresponde al capite Origin:, un responsa 403 essera retornate. Si iste parametro corresponde al capite Origin: e le origine es in le lista blanc, un capite Access-Control-Allow-Origin essera inserite.",
+ "apihelp-main-param-uselang": "Lingua a usar pro traductiones de messages. Un lista de codices pote esser obtenite ab [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] con siprop=languages, o specifica \"user\" pro usar le preferentia de lingua del usator actual, o specifica \"content\" pro usar le lingua de contento de iste wiki.",
+ "apihelp-block-description": "Blocar un usator.",
+ "apihelp-block-param-user": "Nomine de usator, adresse IP o intervallo IP que tu vole blocar.",
+ "apihelp-block-param-expiry": "Tempore de expiration. Pote esser relative (p.ex. \"5 months\" o \"2 weeks\") o absolute (p.ex. \"2014-09-18T12:34:56Z\"). Si es mittite a \"infinite\", \"indefinite\" o \"never\", le blocada nunquam expirara.",
+ "apihelp-block-param-reason": "Motivo del blocada.",
+ "apihelp-block-param-anononly": "Blocar solmente usatores anonyme (i.e. disactivar modificationes anonyme pro iste adresse IP).",
+ "apihelp-block-param-nocreate": "Impedir le creation de contos.",
+ "apihelp-block-param-autoblock": "Blocar automaticamente le adresse IP usate le plus recentemente, e omne IPs successive desde le quales ille/-a tenta facer modificationes.",
+ "apihelp-block-param-noemail": "Impedir que le usator invia e-mail per le wiki. (Require le derecto \"blockemail\").",
+ "apihelp-query+revisions-example-first5-not-localhost": "Obtener le prime 5 versiones del \"Pagina principal\" que non ha essite facite per le usator anonyme \"127.0.0.1\"",
+ "api-credits": "Programmatores del API:\n* Roan Kattouw (programmator dirigente Sept. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creator, programmator dirigente Sept. 2006–Sept. 2007)\n* Brad Jorsch (programmator dirigente 2013–presente)\n\nInvia tu commentos, suggestiones e questiones a mediawiki-api@lists.wikimedia.org\no insere un reportage de bug a https://phabricator.wikimedia.org/."
+}
diff --git a/includes/api/i18n/it.json b/includes/api/i18n/it.json
new file mode 100644
index 00000000..68f4e40a
--- /dev/null
+++ b/includes/api/i18n/it.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "Nivit",
+ "Toadino2"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentazione (in inglese)]]\n* [[mw:API:FAQ|FAQ (in inglese)]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> Tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma l'API è ancora in fase d'attivo sviluppo, e potrebbe cambiare in qualsiasi momenento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite all'API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e sia al valore dell'intestazione sia al codice d'errore verrà impostato lo stesso valore. Per maggiori informazioni leggi [[mw:API:Errors_and_warnings|API:Errori ed avvertimenti (in inglese)]].",
+ "apihelp-main-param-action": "Azione da compiere.",
+ "apihelp-main-param-format": "Formato dell'output.",
+ "apihelp-main-param-assert": "Verifica che l'utente sia loggato se si è impostato <kbd>utente</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Tutti i valori forniti saranno implementati nella risposta. Potrebbero venir utilizzati per distinguere le richieste.",
+ "apihelp-block-description": "Blocca un utente.",
+ "apihelp-block-param-reason": "Motivo del blocco.",
+ "apihelp-emailuser-description": "Manda un'e-mail ad un utente.",
+ "apihelp-emailuser-param-ccme": "Mandami una copia di questa mail.",
+ "apihelp-expandtemplates-description": "Espandi tutti i template nel wikitesto.",
+ "apihelp-expandtemplates-param-title": "Titolo della pagina.",
+ "apihelp-expandtemplates-param-text": "Wikitesto da convertire.",
+ "apihelp-query+recentchanges-example-simple": "Elenco modifiche recenti.",
+ "apihelp-upload-example-url": "Carica da un URL.",
+ "api-help-parameters": "{{PLURAL:$1|Parametro|Parametri}}:",
+ "api-help-param-deprecated": "Deprecato.",
+ "api-help-param-required": "Questo parametro è obbligatorio.",
+ "api-help-param-default": "Predefinito: $1",
+ "api-help-param-default-empty": "Predefinito: <span class=\"apihelp-empty\">(vuoto)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(nessuna descrizione)</span>",
+ "api-help-examples": "{{PLURAL:$1|Esempio|Esempi}}:",
+ "api-credits-header": "Crediti"
+}
diff --git a/includes/api/i18n/ja.json b/includes/api/i18n/ja.json
new file mode 100644
index 00000000..3940469a
--- /dev/null
+++ b/includes/api/i18n/ja.json
@@ -0,0 +1,213 @@
+{
+ "@metadata": {
+ "authors": [
+ "Shirayuki",
+ "2nd-player",
+ "Los688",
+ "Whym",
+ "Mfuji"
+ ]
+ },
+ "apihelp-main-param-action": "実行する操作です。",
+ "apihelp-main-param-format": "出力する形式です。",
+ "apihelp-main-param-smaxage": "<code>s-maxage</code> ヘッダーにこの秒数を設定します。エラーがキャッシュされることはありません。",
+ "apihelp-main-param-maxage": "<code>max-age</code> ヘッダーにこの秒数を設定します。エラーがキャッシュされることはありません。",
+ "apihelp-main-param-assert": "<kbd>user</kbd> を設定した場合は利用者がログイン済みかどうかを、<kbd>bot</kbd> を指定した場合はボット権限があるかどうかを、それぞれ検証します。",
+ "apihelp-main-param-requestid": "任意の値を指定でき、その値が結果に含められます。リクエストを識別するために使用できます。",
+ "apihelp-main-param-servedby": "リクエストを処理したホスト名を結果に含めます。",
+ "apihelp-main-param-curtimestamp": "現在のタイムスタンプを結果に含めます。",
+ "apihelp-main-param-uselang": "メッセージの翻訳に使用する言語です。コードの一覧は <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> に <kbd>siprop=languages</kbd> を付けることで取得できます。<kbd>user</kbd> を指定することで現在の利用者の個人設定の言語を、<kbd>content</kbd> を指定することでこのウィキの本文の言語を使用することもできます。",
+ "apihelp-block-description": "利用者をブロックします。",
+ "apihelp-block-param-user": "ブロックする利用者名、IPアドレスまたはIPレンジ。",
+ "apihelp-block-param-reason": "ブロックの理由。",
+ "apihelp-block-param-anononly": "匿名利用者のみブロックします(つまり、このIPアドレスからの匿名での編集を不可能にします)。",
+ "apihelp-block-param-nocreate": "アカウントの作成を禁止します。",
+ "apihelp-block-param-autoblock": "その利用者が最後に使用したIPアドレスと、ブロック後に編集を試みた際のIPアドレスを自動的にブロックします。",
+ "apihelp-block-param-noemail": "Wikiを通して電子メールを送信することを禁止します。(<code>blockemail</code> 権限が必要です)",
+ "apihelp-block-param-hidename": "ブロック記録から利用者名を秘匿します。(<code>hideuser</code> 権限が必要です)",
+ "apihelp-block-param-reblock": "その利用者がすでにブロックされている場合、ブロックを上書きします。",
+ "apihelp-block-param-watchuser": "その利用者またはIPアドレスの利用者ページとトークページをウォッチします。",
+ "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-checktoken-param-type": "調べるトークンの種類。",
+ "apihelp-checktoken-param-token": "調べるトークン。",
+ "apihelp-checktoken-example-simple": "<kbd>csrf</kbd> トークンの妥当性を調べる。",
+ "apihelp-compare-example-1": "版1と2の差分を生成する。",
+ "apihelp-createaccount-description": "新しい利用者アカウントを作成します。",
+ "apihelp-createaccount-param-name": "利用者名。",
+ "apihelp-createaccount-param-password": "パスワード (<var>$1mailpassword</var> が設定されると無視されます)。",
+ "apihelp-createaccount-param-token": "最初のリクエストで得られたアカウント作成用トークンです。",
+ "apihelp-createaccount-param-email": "利用者の電子メールアドレス (任意)。",
+ "apihelp-createaccount-param-realname": "利用者の本名 (省略可能)。",
+ "apihelp-createaccount-param-mailpassword": "設定されると (その値を問わず)、ランダムなパスワードがその利用者に電子メールで送られます。",
+ "apihelp-createaccount-param-reason": "ログに記録されるアカウント作成の理由 (任意)。",
+ "apihelp-createaccount-example-pass": "利用者 <kbd>testuser</kbd> をパスワード <kbd>test123</kbd> として作成する。",
+ "apihelp-createaccount-example-mail": "利用者 <kbd>testuser</kbd>を作成し、ランダムに生成されたパスワードをメールで送る",
+ "apihelp-delete-description": "ページを削除します。",
+ "apihelp-delete-param-title": "削除するページ名です。<var>$1pageid</var> とは同時に使用できません。",
+ "apihelp-delete-param-pageid": "削除するページIDです。<var>$1title</var> とは同時に使用できません。",
+ "apihelp-delete-param-reason": "削除の理由です。入力しない場合、自動的に生成された理由が使用されます。",
+ "apihelp-delete-param-watch": "そのページを現在の利用者のウォッチリストに追加します。",
+ "apihelp-delete-param-unwatch": "そのページを現在の利用者のウォッチリストから除去します。",
+ "apihelp-delete-example-simple": "<kbd>Main Page</kbd> を削除する",
+ "apihelp-delete-example-reason": "<kbd>Preparing for move</kbd> という理由で <kbd>Main Page</kbd> を削除する",
+ "apihelp-disabled-description": "このモジュールは無効化されています。",
+ "apihelp-edit-description": "ページを作成、編集します。",
+ "apihelp-edit-param-title": "編集するページ名です。<var>$1pageid</var> とは同時に使用できません。",
+ "apihelp-edit-param-pageid": "編集するページIDです。<var>$1title</var> とは同時に使用できません。",
+ "apihelp-edit-param-section": "節番号です。先頭の節の場合は <kbd>0</kbd>、新しい節の場合は <kbd>new</kbd>を指定します。",
+ "apihelp-edit-param-sectiontitle": "新しい節の名前です。",
+ "apihelp-edit-param-text": "ページの本文。",
+ "apihelp-edit-param-minor": "細部の編集",
+ "apihelp-edit-param-createonly": "すでにそのページが存在する場合は編集を行いません。",
+ "apihelp-edit-param-nocreate": "そのページが存在しない場合にエラーを返します。",
+ "apihelp-edit-param-watch": "そのページを現在の利用者のウォッチリストに追加します。",
+ "apihelp-edit-param-unwatch": "そのページを現在の利用者のウォッチリストから除去します。",
+ "apihelp-edit-param-token": "このトークンは常に最後のパラメーターとして、または少なくとも $1text パラメーターより後に送信されるべきです。",
+ "apihelp-edit-example-edit": "ページを編集",
+ "apihelp-emailuser-description": "利用者に電子メールを送信します。",
+ "apihelp-emailuser-param-target": "送信先の利用者名。",
+ "apihelp-emailuser-param-text": "電子メールの本文。",
+ "apihelp-emailuser-param-ccme": "電子メールの複製を自分にも送信します。",
+ "apihelp-emailuser-example-email": "利用者 <kbd>WikiSysop</kbd> に <kbd>Content</kbd> という本文の電子メールを送信。",
+ "apihelp-expandtemplates-description": "ウィキテキストに含まれるすべてのテンプレートを展開します。",
+ "apihelp-expandtemplates-param-title": "ページの名前です。",
+ "apihelp-expandtemplates-param-text": "変換するウィキテキストです。",
+ "apihelp-expandtemplates-example-simple": "ウィキテキスト <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd> を展開する。",
+ "apihelp-feedcontributions-param-deletedonly": "削除された投稿記録のみ表示します。",
+ "apihelp-feedcontributions-param-toponly": "最新版の編集のみ表示します。",
+ "apihelp-feedcontributions-param-newonly": "ページ作成を伴う編集のみを表示します。",
+ "apihelp-feedcontributions-example-simple": "利用者 <kbd>Example</kbd> の投稿記録を取得する。",
+ "apihelp-feedrecentchanges-param-limit": "返す結果の最大数。",
+ "apihelp-feedrecentchanges-param-hideminor": "細部の変更を隠す。",
+ "apihelp-feedrecentchanges-param-hidebots": "ボットによる変更を隠す。",
+ "apihelp-feedrecentchanges-param-hideanons": "未登録利用者による変更を隠す。",
+ "apihelp-feedrecentchanges-param-hideliu": "登録利用者による変更を隠す。",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "巡回済みの変更を隠す。",
+ "apihelp-feedrecentchanges-example-simple": "最近の更新を表示する。",
+ "apihelp-feedrecentchanges-example-30days": "最近30日間の変更を表示する。",
+ "apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd> を <kbd>2011-03-05T15:27:40Z</kbd> の版に差し戻す。",
+ "apihelp-help-description": "指定したモジュールのヘルプを表示します。",
+ "apihelp-help-param-modules": "ヘルプを表示するモジュールです (<var>action</var> パラメーターおよび <var>format</var> パラメーターの値、または <kbd>main</kbd>)。<kbd>+</kbd> を使用して下位モジュールを指定できます。",
+ "apihelp-help-param-submodules": "指定したモジュールの下位モジュールのヘルプを含めます。",
+ "apihelp-help-param-recursivesubmodules": "下位モジュールのヘルプを再帰的に含めます。",
+ "apihelp-help-param-helpformat": "ヘルプの出力形式です。",
+ "apihelp-help-param-toc": "HTML 出力に目次を含めます。",
+ "apihelp-help-example-main": "メイン モジュールのヘルプ",
+ "apihelp-help-example-recursive": "すべてのヘルプを1つのページに",
+ "apihelp-help-example-help": "ヘルプ モジュール自身のヘルプ",
+ "apihelp-help-example-query": "2つの下位モジュールのヘルプ",
+ "apihelp-imagerotate-example-simple": "<kbd>File:Example.png</kbd> を <kbd>90</kbd> 度回転させる。",
+ "apihelp-imagerotate-example-generator": "<kbd>Category:Flip</kbd> 内のすべての画像を <kbd>180</kbd> 度回転させる。",
+ "apihelp-import-param-xml": "XMLファイルをアップロード",
+ "apihelp-import-param-rootpage": "このページの下位ページとしてインポートする。",
+ "apihelp-import-example-import": "[[meta:Help:Parserfunctions]] をすべての履歴とともに名前空間100 にインポートする。",
+ "apihelp-login-param-name": "利用者名。",
+ "apihelp-login-param-password": "パスワード。",
+ "apihelp-login-param-token": "最初のリクエストで取得したログイントークンです。",
+ "apihelp-login-example-gettoken": "ログイントークンを取得する。",
+ "apihelp-login-example-login": "ログイン",
+ "apihelp-logout-description": "ログアウトしてセッションデータを消去します。",
+ "apihelp-logout-example-logout": "現在の利用者をログアウトする。",
+ "apihelp-move-description": "ページを移動します。",
+ "apihelp-move-param-from": "移動するページのページ名です。<var>$1fromid</var> とは同時に使用できません。",
+ "apihelp-move-param-fromid": "移動するページのページIDです。<var>$1from</var> とは同時に使用できません。",
+ "apihelp-move-param-to": "移動後のページ名。",
+ "apihelp-move-param-reason": "名称変更の理由。",
+ "apihelp-move-param-movetalk": "存在する場合、トークページも名前を変更します。",
+ "apihelp-move-param-movesubpages": "可能であれば、下位ページも名前を変更します。",
+ "apihelp-move-param-noredirect": "転送ページを作成しません。",
+ "apihelp-move-param-watch": "そのページと転送ページを現在の利用者のウォッチリストに追加します。",
+ "apihelp-move-param-unwatch": "そのページと転送ページを現在の利用者のウォッチリストから除去します。",
+ "apihelp-move-param-ignorewarnings": "あらゆる警告を無視",
+ "apihelp-move-example-move": "<kbd>Badtitle</kbd> を <kbd>Goodtitle</kbd> に転送ページを残さず移動",
+ "apihelp-opensearch-param-search": "検索文字列。",
+ "apihelp-opensearch-param-limit": "返す結果の最大数。",
+ "apihelp-opensearch-param-namespace": "検索する名前空間。",
+ "apihelp-opensearch-param-suggest": "<var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> が false の場合、何もしません。",
+ "apihelp-paraminfo-description": "API モジュールに関する情報を取得します。",
+ "apihelp-patrol-description": "ページまたは版を巡回済みにします。",
+ "apihelp-patrol-param-revid": "巡回済みにする版ID。",
+ "apihelp-patrol-example-rcid": "最近の更新を巡回",
+ "apihelp-protect-description": "ページの保護レベルを変更します。",
+ "apihelp-protect-param-title": "保護(解除)するページ名です。$1pageid とは同時に指定できません。",
+ "apihelp-protect-param-pageid": "保護(解除)するページIDです。$1title とは同時に指定できません。",
+ "apihelp-protect-param-expiry": "有効期限です。タイムスタンプがひとつだけ指定された場合は、それがすべての保護に適用されます。無期限の保護を行う場合は<kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, または <kbd>never</kbd> を指定します。",
+ "apihelp-protect-param-reason": "保護(解除)の理由。",
+ "apihelp-protect-param-watch": "指定されると、保護(解除)するページが現在の利用者のウォッチリストに追加されます。",
+ "apihelp-protect-example-protect": "ページを保護する。",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "<var>$3user</var> と同時に指定できません。",
+ "apihelp-query+alldeletedrevisions-param-user": "この利用者による版のみを一覧表示する。",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
+ "apihelp-query+alldeletedrevisions-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "標準名前空間にある削除された最初の50版を一覧表示する。",
+ "apihelp-query+categorymembers-example-simple": "<kbd>Category:Physics</kbd> に含まれる最初の10ページを取得する。",
+ "apihelp-query+categorymembers-example-generator": "<kbd>Category:Physics</kbd> に含まれる最初の10ページのページ情報を取得する。",
+ "apihelp-query+contributors-example-simple": "<kbd>Main Page</kbd> への投稿者を表示する。",
+ "apihelp-query+deletedrevisions-param-user": "この利用者による版のみを一覧表示。",
+ "apihelp-query+deletedrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
+ "apihelp-query+deletedrevisions-param-limit": "一覧表示する版の最大数。",
+ "apihelp-query+deletedrevisions-example-titles": "ページ <kbd>Main Page</kbd> および <kbd>Talk:Main Page</kbd> の削除された版とその内容を一覧表示する。",
+ "apihelp-query+deletedrevisions-example-revids": "削除された版 <kbd>123456</kbd> に関する情報を一覧表示する。",
+ "apihelp-query+info-description": "ページの基本的な情報を取得します。",
+ "apihelp-query+info-paramvalue-prop-protection": "それぞれのページの保護レベルを一覧表示する。",
+ "apihelp-query+info-example-simple": "<kbd>Main Page</kbd> に関する情報を取得する。",
+ "apihelp-query+iwbacklinks-example-simple": "[[wikibooks:Test]] へリンクしているページを取得する。",
+ "apihelp-query+iwbacklinks-example-generator": "[[wikibooks:Test]] へリンクしているページの情報を取得する。",
+ "apihelp-query+langbacklinks-example-simple": "[[:fr:Test]] へリンクしているページを取得する。",
+ "apihelp-query+langbacklinks-example-generator": "[[:fr:Test]] へリンクしているページの情報を取得する。",
+ "apihelp-format-example-generic": "クエリの結果を $1 形式に整形します",
+ "apihelp-dbg-description": "データを PHP の <code>var_export()</code> 形式で出力します。",
+ "apihelp-dbgfm-description": "データを PHP の <code>var_export()</code> 形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-dump-description": "データを PHP の <code>var_dump()</code> 形式で出力します。",
+ "apihelp-dumpfm-description": "データを PHP の <code>var_dump()</code> 形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-json-description": "データを JSON 形式で出力します。",
+ "apihelp-json-param-callback": "指定すると、指定した関数呼び出しで出力をラップします。安全のため、利用者固有のデータはすべて制限されます。",
+ "apihelp-json-param-utf8": "指定すると、大部分の非 ASCII 文字 (すべてではありません) を、16 進のエスケープ シーケンスに置換する代わりに UTF-8 として符号化します。",
+ "apihelp-jsonfm-description": "データを JSON 形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-none-description": "何も出力しません。",
+ "apihelp-php-description": "データを PHP のシリアル化した形式で出力します。",
+ "apihelp-phpfm-description": "データを PHP のシリアル化した形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-rawfm-description": "データをデバッグ要素付きで JSON 形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-txt-description": "データを PHP の <code>print_r()</code> 形式で出力します。",
+ "apihelp-txtfm-description": "データを PHP の <code>print_r()</code> 形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-wddx-description": "データを WDDX 形式で出力します。",
+ "apihelp-wddxfm-description": "データを WDDX 形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-xml-description": "データを XML 形式で出力します。",
+ "apihelp-xml-param-xslt": "指定すると、スタイルシートとして &lt;xslt&gt; を追加します。MediaWiki 名前空間の、ページ名の末尾が \".xsl\" のウィキページに対して使用すべきです。",
+ "apihelp-xml-param-includexmlnamespace": "指定すると、XML 名前空間を追加します。",
+ "apihelp-xmlfm-description": "データを XML 形式 (HTML に埋め込んだ形式) で出力します。",
+ "apihelp-yaml-description": "データを YAML 形式で出力します。",
+ "apihelp-yamlfm-description": "データを YAML 形式 (HTML に埋め込んだ形式) で出力します。",
+ "api-format-title": "MediaWiki API の結果",
+ "api-format-prettyprint-header": "このページは $1 形式を HTML で表現したものです。HTML はデバッグに役立ちますが、アプリケーションでの使用には適していません。\n\n<var>format</var> パラメーターを指定すると出力形式を変更できます 。$1 形式の非 HTML 版を閲覧するには、format=$2 を設定してください。\n\n詳細情報については [[mw:API|完全な説明文書]]または [[Special:ApiHelp/main|API のヘルプ]]を参照してください。",
+ "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-deprecated": "このモジュールは廃止予定です。",
+ "api-help-flag-internal": "<strong>このモジュールは内部的または不安定です。</strong>動作が予告なく変更される場合があります。",
+ "api-help-flag-readrights": "このモジュールは読み取りの権限を必要とします。",
+ "api-help-flag-writerights": "このモジュールは書き込みの権限を必要とします。",
+ "api-help-flag-mustbeposted": "このモジュールは POST リクエストのみを受け付けます。",
+ "api-help-flag-generator": "このモジュールはジェネレーターとして使用できます。",
+ "api-help-parameters": "{{PLURAL:$1|パラメーター}}:",
+ "api-help-param-deprecated": "廃止予定です。",
+ "api-help-param-required": "このパラメーターは必須です。",
+ "api-help-param-list": "{{PLURAL:$1|1=値 (いずれか1つ)|2=値 (<kbd>{{!}}</kbd>で区切る)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=空欄にしてください|空欄にするか、または $2}}",
+ "api-help-param-integer-min": "{{PLURAL:$1|値}}は $2 以上にしてください。",
+ "api-help-param-integer-max": "{{PLURAL:$1|値}}は $3 以下にしてください。",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|値}}は $2 以上 $3 以下にしてください。",
+ "api-help-param-upload": "multipart/form-data 形式でファイルをアップロードしてください。",
+ "api-help-param-multi-separate": "複数の値は <kbd>|</kbd> で区切ってください。",
+ "api-help-param-multi-max": "値の最大値は {{PLURAL:$1|$1}} (ボットの場合は {{PLURAL:$2|$2}}) です。",
+ "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-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-credits-header": "クレジット",
+ "api-credits": "API の開発者:\n* Roan Kattouw (2007年9月-2009年の主任開発者)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (作成者、2006年9月-2007年9月の主任開発者)\n* Brad Jorsch (2013年-現在の主任開発者)\n\nコメント、提案、質問は mediawiki-api@lists.wikimedia.org にお送りください。\nバグはこちらへご報告ください: https://phabricator.wikimedia.org/"
+}
diff --git a/includes/api/i18n/jam.json b/includes/api/i18n/jam.json
new file mode 100644
index 00000000..3c44fd2a
--- /dev/null
+++ b/includes/api/i18n/jam.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chabi1"
+ ]
+ },
+ "api-help-main-header": "Mien madyuul"
+}
diff --git a/includes/api/i18n/ko.json b/includes/api/i18n/ko.json
new file mode 100644
index 00000000..540f64c8
--- /dev/null
+++ b/includes/api/i18n/ko.json
@@ -0,0 +1,36 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kwj2772",
+ "Twotwo2019",
+ "아라"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page 설명문서]\n* [https://www.mediawiki.org/wiki/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 공지 사항] * [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청] </div>\n<strong>상태:</strong> 이 페이지에 표시된 모든 기능은 정상 작동할 것이지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 바뀔 수 있습니다. 업데이트 정보를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 https://www.mediawiki.org/wiki/API:Errors_and_warnings 를 참고하십시오.",
+ "apihelp-main-param-action": "수행할 동작",
+ "apihelp-main-param-format": "출력값의 형식.",
+ "apihelp-block-description": "사용자를 차단합니다.",
+ "apihelp-block-param-user": "차단하고자 하는 계정 이름, IP 주소 또는 대역",
+ "apihelp-block-param-expiry": "기한. 상대값(예시: \"5 months\" 또는 \"2 weeks\") 또는 절대값(예시: \"2014-09-18T12:34:56Z\")이 될 수 있습니다. \"infinite\", \"indefinite\" 또는 \"never\"로 설정하면 무기한으로 설정됩니다.",
+ "apihelp-block-param-reason": "차단 이유.",
+ "apihelp-block-param-anononly": "익명 사용자만 차단합니다. (즉, 이 IP의 익명 편집을 막음)",
+ "apihelp-block-param-nocreate": "계정 생성을 막습니다.",
+ "apihelp-block-param-autoblock": "최근 사용한 IP 주소나 로그인을 시도한 이후에 사용한 모든 IP 주소를 자동으로 차단합니다.",
+ "apihelp-block-param-noemail": "위키를 통해 이메일을 보내지 못하도록 막습니다. (<code>blockemail</code> 권한 필요)",
+ "apihelp-block-param-hidename": "차단 기록에서 사용자 이름을 숨깁니다. (<code>hideuser</code> 권한 필요)",
+ "apihelp-block-param-allowusertalk": "자신의 토론 문서를 편집할 수 있도록 허용합니다. (<var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> 값에 따라 다름)",
+ "apihelp-block-param-reblock": "사용자가 이미 차단된 경우, 기존 차단 설정을 바꿉니다.",
+ "apihelp-block-param-watchuser": "해당 사용자 또는 IP 주소의 사용자 문서 및 토론 문서를 주시합니다.",
+ "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-delete-example-simple": "<kbd>Main Page</kbd>를 삭제합니다.",
+ "apihelp-edit-description": "문서를 만들고 편집합니다.",
+ "apihelp-edit-param-sectiontitle": "새 문단을 위한 제목.",
+ "apihelp-edit-param-text": "문서 내용.",
+ "apihelp-edit-param-summary": "편집 요약. 또한 $1section=new 및 $1sectiontitle이 설정되어 있지 않을 때 문단 제목.",
+ "apihelp-edit-param-minor": "사소한 편집.",
+ "apihelp-edit-param-notminor": "사소하지 않은 편집.",
+ "apihelp-edit-param-bot": "이 편집을 봇으로 표시.",
+ "api-help-param-list": "{{PLURAL:$1|1=하나의 값|2=값 (\"{{!}}\"로 구분)}}: $2",
+ "api-help-param-default": "기본값: $1"
+}
diff --git a/includes/api/i18n/ksh.json b/includes/api/i18n/ksh.json
new file mode 100644
index 00000000..cdcca375
--- /dev/null
+++ b/includes/api/i18n/ksh.json
@@ -0,0 +1,311 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokemäntazjohn]]\n* [[mw:API:FAQ/de|Öff jefrohch]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mäileng_Leß]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Aanköndejonge zom <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Jemäldte Fähler un Wönsch]\n</div>\n<strong>Status:</strong> Alle op heh dä Sigg aanjzeischte Ußwahle sullte donn, ävver et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> wee jrahd noch äntwekeld un et kann sesch alle Nahslangs jädd ändere. Holl Der de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ Mäileng_Leß med Aanköndejonge], öm automattesch övver Neujeschkeite enfommehrt ze wähde.\n\n<strong>Kapodde Aanfrohe:</strong> Wam_mer kapodde Aanfroheaan et API <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> schek, kritt mer ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i>-Kopp ußjejovve met däm Täx „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki-API-Error</code>“ dren, dä mer als ene Schlößel bedraachte kann. Mih dohzoh fengk met op dä Sigg [[mw:API:Errors_and_warnings|<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>: Fähler un Warnonge]].",
+ "apihelp-main-param-action": "Wat för en Aufjahb.",
+ "apihelp-main-param-format": "Et Fommaht för ußzejävve.",
+ "apihelp-main-param-smaxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">s-maxage</code> em Kobb obb esu vill Sekonde. Fähler wähde nit faßjehallde.",
+ "apihelp-main-param-maxage": "Säz <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">max-age</code> em Kobb obb esu vill Sekonde. Fähler wähde nit faßjehallde.",
+ "apihelp-main-param-assert": "Ställ sescher, dat dä Metmaacher enjelogg es (doh för jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</kbd> en), udder ene Bot es (doh för jiff <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">bot</kbd> en).",
+ "apihelp-main-param-requestid": "Jehde Aanjahb vun heh weed widder med ußjejovve. Esuh kam_mer einzel Affrohre ussenein hallde.",
+ "apihelp-main-param-servedby": "Donn däm ẞööver, dä et jedonn hät, singe Nahme med ußjävve.",
+ "apihelp-main-param-curtimestamp": "Donn de aktoälle Zigg un et Dattum med ußjävve.",
+ "apihelp-block-description": "Ene Metmaacher schpärre.",
+ "apihelp-block-param-user": "Däm Nahme vun däm Metmaacher, de <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß udder dä Berätt, dä De Schpärre wells.",
+ "apihelp-block-param-reason": "Der Schpärrjrond.",
+ "apihelp-block-param-anononly": "Bloß de nahmelohse Metmaaacher spärre, alsu donn et nahmelohse Beärbeide vun dä <i lang=\"en\" xml:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß uß verhendere.",
+ "apihelp-block-param-nocreate": "Et Neu-Aanmelde verbeede",
+ "apihelp-block-param-autoblock": "Dun automattesch de läzde <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß schpärre, di dä Metmaacher jehatt hät, un och all di <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräße, vun wo dä versöhk, jet ze ändere.",
+ "apihelp-block-param-reblock": "Wann dä Metmaacher als jeschpächd es, donn dat övverschrihve.",
+ "apihelp-block-param-watchuser": "Donn de Metmaachersigg un de Klaafsigg dohzoh op mig Oppaßleß säze.",
+ "apihelp-block-example-ip-simple": "Donn de <i lang=\"en\" xmL:lang=\"en\" title=\"Internet Protocol\">IP</i>-Addräß <kbd>192.0.2.5</kbd> för drei ääsch schpärre mem Jrond: <kbd>Eestschlaach</kbd>.",
+ "apihelp-compare-description": "Donn de Ongerscheide zwesche zwai Sigge beschtemme.\n\nDo moß derför jeweils en Väsjohn, en Övverschreff för di Sigg, odder ener Sigg iehr Kännong aanjävve, för de beide Sigge.",
+ "apihelp-compare-param-fromtitle": "Der Tettel vun dä eezte Sigg zom verjlihsche.",
+ "apihelp-compare-param-fromid": "De Kännong vun dä eezte Sigg zom verjlihsche.",
+ "apihelp-compare-param-fromrev": "De Väsjohn vun dä zwaite Sigg zom verjlihsche.",
+ "apihelp-compare-param-totitle": "Der Tettel vun dä zwaite Sigg zom verjlihsche.",
+ "apihelp-compare-param-toid": "De Kännong vun dä zwaite Sigg zom verjlihsche.",
+ "apihelp-compare-param-torev": "De Väsjohn vun dä zwaite Sigg zom verjlihsche.",
+ "apihelp-compare-example-1": "Fengk de Ongerscheide zwesche dä Väsjohne 1 un 2",
+ "apihelp-createaccount-description": "Ene neue Zohjang för ene Metmaacher aanlähje.",
+ "apihelp-createaccount-param-name": "Der Nahme för dä Metmaacher.",
+ "apihelp-createaccount-param-password": "Et Paßwoot (Weed ävver it jebruc un övverjange, wann <code lang=\"en\" xml:lang=\"en\"><var>$1mailpassword</var></code> jesaz es)",
+ "apihelp-createaccount-param-email": "Däm Metmaacher sing Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i>, kann och fott bliive.",
+ "apihelp-createaccount-param-realname": "Dämm Medmaacher singe reschtejje Nahme - kann fott blihve.",
+ "apihelp-createaccount-param-mailpassword": "Wann heh jädd aanjejovve es, kritt dä Metmaacher e zohfällesch ußjesöhk neu Paßwood aan sing Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i> jescheck.",
+ "apihelp-createaccount-param-reason": "Ene Jrond för dä Zojang aanzelähje, dä en de Logböhscher kütt.",
+ "apihelp-createaccount-param-language": "Dat Schprohcheköözel, wadd als der Schtandatt för dä Metmaacher jesaz wähde sull. Kann läddesch blihve, dann es et di Schprohch vum Wikki.",
+ "apihelp-createaccount-example-pass": "Lääsch dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">testuser</kbd> aan, mem Paßwood <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Lääsch dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">testmailuser</kbd> aan med emem zohfällesch ußjewörfelte Paßwoot un schegg_em dat övver de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i>.",
+ "apihelp-delete-description": "Schmieß en Sigg fott.",
+ "apihelp-delete-param-watch": "Donn di Sigg en däm aktoälle Metmaacher sing Oppaßleß opnämme.",
+ "apihelp-delete-param-unwatch": "Schmihß di Sigg us däm aktoälle Metmaacher singe Oppaßless erus.",
+ "apihelp-delete-example-simple": "Schmiiß de <kbd>Houpsigg</kbd> fott",
+ "apihelp-delete-example-reason": "Schmiiß de <kbd>Houpsigg</kbd> fott mem Jrond: <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Preparing for move</kbd>.",
+ "apihelp-disabled-description": "Dat Moduhl wohd affjeschalldt.",
+ "apihelp-edit-description": "Sigge aanlähje un verändere.",
+ "apihelp-edit-param-sectiontitle": "De Övverschreff för ene neue Affschnett.",
+ "apihelp-edit-param-text": "Dä Sigg ehre Ennhalld.",
+ "apihelp-edit-param-minor": "En klein Änderong.",
+ "apihelp-edit-param-notminor": "Kein klein Änderong.",
+ "apihelp-edit-param-bot": "Makeer heh di Änderog als vun enem Bot jemaat.",
+ "apihelp-edit-param-createonly": "Donn di Sigg nit ändere, wann se ald doh es.",
+ "apihelp-edit-param-nocreate": "Mäld ene Fähler, wann di Sigg nit doh es.",
+ "apihelp-edit-param-watch": "Donn di Sigg op dem aktälle Metmaacher sing Oppaßleß.",
+ "apihelp-edit-param-unwatch": "schmiiß di Sigg uß heh däm Metmaacher singe oppaßleß.",
+ "apihelp-edit-param-redirect": "Verfollsch de Ömleidonge automattesch.",
+ "apihelp-edit-param-contentmodel": "Et Enhalltsmodäll för dä neue Ennhalld.",
+ "apihelp-edit-example-edit": "Veränder en Sigg.",
+ "apihelp-edit-example-prepend": "Donn <kbd>_&#95;NOTOC_&#95;</kbd> för en Sigg säze.",
+ "apihelp-emailuser-description": "Donn en <i lang=\"en\" xml:lang=\"en\">e-mail</i> aan dä Metmaacher schecke.",
+ "apihelp-emailuser-param-target": "D ä Metmaacher, dä di <i lang=\"en\" xml:lang=\"en\">e-mail</i> krijje sull.",
+ "apihelp-emailuser-param-subject": "Koppeih mem Beträff.",
+ "apihelp-emailuser-param-text": "Dä Täx en dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">e-mail</i>.",
+ "apihelp-emailuser-param-ccme": "scheck mer en Koppih vun heh dä <i lang=\"en\" xml:lang=\"en\">e-mail</i>.",
+ "apihelp-emailuser-example-email": "Donn en <i lang=\"en\" xml:lang=\"en\">e-mail</i> aan dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\">WikiSysop</kbd> schecke mem Täx <kbd>Dä Enhalld</kbd> dren.",
+ "apihelp-expandtemplates-description": "Deiht alle Schablohne en Wikkitäx ömsäze.",
+ "apihelp-expandtemplates-param-title": "De Övverschreff vun dä Sigg.",
+ "apihelp-expandtemplates-param-text": "Dä Wikitäx zom ömwandelle.",
+ "apihelp-expandtemplates-param-includecomments": "Ov Aanmärkonge em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>-Fommaht med ußjejovve wähde sulle.",
+ "apihelp-feedcontributions-param-feedformat": "Däm Kannahl sing Fommaht.",
+ "apihelp-feedcontributions-param-year": "Vum johr un fröhjer.",
+ "apihelp-feedcontributions-param-month": "Vun däm Mohnd un derför",
+ "apihelp-feedcontributions-param-deletedonly": "zeijsch blohß de fottjeschmeße Beijdrähsch.",
+ "apihelp-feedcontributions-param-toponly": "Zeich blohß de Änderonge, di och de neußte sin.",
+ "apihelp-feedcontributions-param-newonly": "Zeich blohß de Änderonge, woh Sigge neu aanjelaat woode sin.",
+ "apihelp-feedcontributions-param-showsizediff": "Zeijsch de Ongerscheijd en de Jrühße zwesche de Väsjohne.",
+ "apihelp-feedcontributions-example-simple": "Zeijsch de Änderonge vum Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>.",
+ "apihelp-feedrecentchanges-param-feedformat": "Däm Kannahl sing Fommaht.",
+ "apihelp-feedrecentchanges-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
+ "apihelp-feedrecentchanges-param-from": "Zeijsch de Änderonge zigg dämm.",
+ "apihelp-feedrecentchanges-param-hideminor": "De kein Minni_Änderonge verschteijsche.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Nohjelohrte Änderonge övverjonn.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Änderonge vun heh dämm Metmaacher övverjonn.",
+ "apihelp-feedwatchlist-param-feedformat": "Däm Kannahl sing Fommaht.",
+ "apihelp-filerevert-param-filename": "De Zih_Dattei, der ohne „{{ne:file}}“ derför.",
+ "apihelp-filerevert-param-comment": "Aanmärkong huh lahde.",
+ "apihelp-help-description": "zeisch Hölp för de aanjejovve Moduhle.",
+ "apihelp-help-example-recursive": "Alle Hölp en eine Sigg.",
+ "apihelp-help-example-help": "Alle Hölp övver de Hölp säälver.",
+ "apihelp-imagerotate-description": "Ein udder mieh Bellder driehje.",
+ "apihelp-imagerotate-param-rotation": "Öm wi vill Jrahd sulle de Bellder noh de Uhr drieh wääde?",
+ "apihelp-imagerotate-example-simple": "Drieh de <kbd>Dattei:Beijschpell.png</kbd> öm <kbd>90</kbd> Jrahd.",
+ "apihelp-imagerotate-example-generator": "Drieh alle Bellder en dä <kbd>Saachjropp:Ömdriehje</kbd> öm <kbd>180</kbd> Jrahd.",
+ "apihelp-import-param-xml": "Donn en Dattei em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Fommaht huhjahde.",
+ "apihelp-import-param-rootpage": "Als Ongersiff vun heh dä Sigg empottehre-",
+ "apihelp-login-param-name": "Metmaacher_Nahme.",
+ "apihelp-login-param-password": "Paßwoot.",
+ "apihelp-login-param-domain": "De Domaijn (kann fott bliehve)",
+ "apihelp-login-example-login": "Enlogge.",
+ "apihelp-logout-example-logout": "Donn dä aktoälle Metmaacher ußlogge.",
+ "apihelp-move-description": "Donn en Sigg ömbenänne",
+ "apihelp-move-param-to": "De neue Övverschreff för di Sigg drop ömzebenänne.",
+ "apihelp-move-param-reason": "Der jrond för di Sigg ömzebenänne.",
+ "apihelp-move-param-movetalk": "Donn de Klaafsigg ömbenänne, wann et se jitt.",
+ "apihelp-move-param-movesubpages": "Donn de Ongersigge ömbenänne, wann müjjelesch.",
+ "apihelp-move-param-noredirect": "Donn kein Ömleidong aanlähje.",
+ "apihelp-move-param-watch": "Donn de Sigg un de Ömleijdong op dem aktoälle Metmaacher sing Oppaßleß.",
+ "apihelp-move-param-unwatch": "Donn de Sigg un de Ömleijdong uß dem aktoälle Metmaacher sing Oppaßleß eruß nämme.",
+ "apihelp-move-param-watchlist": "Donn di Sigg en dem aktoälle Metmaacher sing Oppaßleß udder nemm se eruß, donn de Enschtällonge nämme udder donn de Oppaßleß nid ändere.",
+ "apihelp-move-param-ignorewarnings": "Donn alle Warnonge övverjonn",
+ "apihelp-move-example-move": "Donn <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Schlääschte Övverschreff</kbd> nach <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Johde Övverschreff</kbd> önmännde, der ohne en Ömleijdong aanzelähje.",
+ "apihelp-opensearch-description": "Em Wikki söhke mem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„Offe Söhke“\">OpenSearch</i>",
+ "apihelp-opensearch-param-search": "Noh wat söhke?",
+ "apihelp-opensearch-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
+ "apihelp-opensearch-param-namespace": "En wällschem Appachtemang söhke.",
+ "apihelp-opensearch-param-redirects": "How to handle redirects:\n;return:Return the redirect itself.\n;resolve:Return the target page. May return fewer than $1limit results.\nFor historical reasons, the default is \"return\" for $1format=json and \"resolve\" for other formats.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-opensearch-param-redirects/en\n-->",
+ "apihelp-opensearch-param-format": "Et Fommaht zom Ußjävve.",
+ "apihelp-opensearch-example-te": "Fengk Sigge, di met <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Te</kbd> aanfange.",
+ "apihelp-options-param-reset": "Säz de Enschtällonge op dem Wikki singe Standatt.",
+ "apihelp-options-example-reset": "Alle enschtälloonge retuur schtälle.",
+ "apihelp-paraminfo-description": "Holl Aanjahbe övver dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ier Moduhle.",
+ "apihelp-paraminfo-param-helpformat": "Et Fommaht vun de Täxe för Hölp.",
+ "apihelp-paraminfo-param-formatmodules": "Leß met de Nahme vun de Moduhle zom Fommatehre (Wäät vum „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">format</var>“-Parramehter). Nemm schtatt dämm „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1modules</kbd>“.",
+ "apihelp-paraminfo-example-1": "Zisch Aanjahbe övver <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, un <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+ "apihelp-parse-param-summary": "De Zersammefaßong för ze pahse.",
+ "apihelp-parse-param-section": "Holl blohß dann der Ennhalld vun däm Affschnett met dä Nommer, udder wann „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd>“ enjejovve es, maach ene neu Affschnett derbei.",
+ "apihelp-parse-param-sectiontitle": "De Övverschreff för dä neuje Afschnet, wann <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">section</var> = <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd> es.\n\nAnders wi beim Beärbeide vun dä Sigg weed dä Parramehter nit dorsch de <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">summary</var> ußjetuusch, wann hä fottjelohße udder läddesch es.",
+ "apihelp-parse-example-page": "Donn en Sigg pahse.",
+ "apihelp-parse-example-text": "Donn Wikkitäx pahse.",
+ "apihelp-parse-example-texttitle": "Donn Wikkitäx pahse, un jiff derför en Övverschreff för en Sigg aan.",
+ "apihelp-parse-example-summary": "Donn Zersammefaßong pahse.",
+ "apihelp-patrol-description": "Donn en Sigg udder Väsjohn nohkike.",
+ "apihelp-patrol-param-rcid": "De Kännong in de läzde Änderonge zum Nohkike.",
+ "apihelp-patrol-param-revid": "De Kännong vun dä Väsjohn zum Nohkike.",
+ "apihelp-patrol-example-rcid": "Donn en läzde Änderonge nohkike.",
+ "apihelp-patrol-example-revid": "Donn en Väsjohn nohkike.",
+ "apihelp-protect-description": "Änder der Siggeschoz för en Sigg.",
+ "apihelp-protect-param-title": "De Övverschreff vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
+ "apihelp-protect-param-pageid": "De Kännong vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
+ "apihelp-protect-param-reason": "Der Jrond för et Schöze udder Freijävve.",
+ "apihelp-protect-example-protect": "Donn en Sigg schöze.",
+ "apihelp-query-param-list": "Wat för en Leßte holle.",
+ "apihelp-query-param-meta": "Wat för en Matta_Dahte ze holle.",
+ "apihelp-query+allcategories-description": "Alle Saachjroppe opzälle.",
+ "apihelp-query+allcategories-param-from": "De Saachjropp, vun woh aan opzälle.",
+ "apihelp-query+allcategories-param-to": "De Saachjropp, bes woh hen opzälle.",
+ "apihelp-query+allcategories-param-dir": "De Reijefollsch zum Zotehre.",
+ "apihelp-query+allcategories-param-limit": "Wi vell Saachjroppe ußjävve?",
+ "apihelp-query+allcategories-param-prop": "Which properties to get:\n;size:Adds number of pages in the category.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Ballcategories-param-prop/ksh\n-->",
+ "apihelp-query+alldeletedrevisions-description": "Donn alle fottjeschmeße Väsjohne vun enem Metmaacher udder en enem Appachemang opleßte.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kam_mer blohß met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kam_mer nit met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
+ "apihelp-query+alldeletedrevisions-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+alldeletedrevisions-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+ "apihelp-query+alldeletedrevisions-param-from": "Bejenn de Leß bei heh dä Överschreff.",
+ "apihelp-query+alldeletedrevisions-param-to": "Hühr de Leß bei heh dä Överschreff oop.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Söhk noh Sigge, woh de Övverschrevv esu aanfängk.",
+ "apihelp-query+alldeletedrevisions-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Donn blohß Siegg en heh däm Appachtemang opleßte.",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "Wann als ene Jenerahtor enjesaz, bräng Övverschreffte un kein Kännonge vu Väsjohne.",
+ "apihelp-query+alldeletedrevisions-example-user": "Donn de läzde fuffzisch fottjeschmeße Beijdrähsch vim Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example<kbd>“ opleste.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Donn de läzde fuffzisch fottjeschmeße Väsjohne em Houp-Appachemang opleste.",
+ "apihelp-query+allfileusages-description": "Donn alle Dattei_Oprohfe opleste, och vun Datteije, di (noch) nit doh sin.",
+ "apihelp-query+allfileusages-param-from": "De Övverschreff vun dä Dattei, woh de Leß medd aanfange sull.",
+ "apihelp-query+allfileusages-param-to": "De Övverschreff vun dä Dattei, woh de Leß medd ophühre sull.",
+ "apihelp-query+allfileusages-param-prefix": "Söhk noh alle Övverschreffte, di met heh däm Täx aanfange.",
+ "apihelp-query+allfileusages-param-unique": "Donn blohß ongerscheidlijje Övverschreffte vun Datteije aanzeije. Kammer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids<code>“ bruche.\nWann als ene Jenerahtor enjesaz, bräng Zihlsigge un kein Kwällsigge.",
+ "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Ballfileusages-param-prop/ksh\n-->",
+ "apihelp-query+allfileusages-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
+ "apihelp-query+allfileusages-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+allfileusages-example-B": "Donn Övverschreffte vun Datteije aanzeije, och vun Datteije, di (noch) nit doh sin, zesame met dä Kännonge vun dä Sigge, woh se vun sin, aanjevange vun <kbd>B</kbd>.",
+ "apihelp-query+allfileusages-example-unique": "Donn ongerscheidlejje Övverschreffte vun Datteije opleßte.",
+ "apihelp-query+allfileusages-example-generator": "Holl Sigge, woh Datteieje dren vorkumme.",
+ "apihelp-query+allimages-description": "Donn alle Bellder der Reih noh opzälle.",
+ "apihelp-query+allimages-param-sort": "De Eijeschavv öm dernoh ze zottehre.",
+ "apihelp-query+allimages-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+allimages-param-limit": "Wi vell Bellder ennsjesamp ußjävve.",
+ "apihelp-query+allimages-example-generator": "Zeisch Aanjahbe övver veer Bellder un bejenn mem Bohchschtabe <kbd>T</kbd>.",
+ "apihelp-query+alllinks-description": "Donn alle Lengk opzälle, di en e beschtemmpt Appachtemang jonn.",
+ "apihelp-query+alllinks-param-from": "De Övverschreff vun däm Lengk, woh de Leß medd aanfange sull.",
+ "apihelp-query+alllinks-param-to": "De Övverschreff vun dä Dattei, woh et Zälle ophühre sull.",
+ "apihelp-query+alllinks-param-prefix": "Söhk noh alle verlengk Övverschreffte, di met heh däm Täx aanfange.",
+ "apihelp-query+alllinks-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+alllinks-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
+ "apihelp-query+alllinks-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+alllinks-example-unique": "Leß ongerscheidlejje verlengk Övverschreffte.",
+ "apihelp-query+alllinks-example-generator": "Holl Sigge, di di Lengks änthallde.",
+ "apihelp-query+allmessages-description": "Donn em Wikki sing Täxte un Nohreescht ußjävve.",
+ "apihelp-query+allmessages-param-prop": "Wat för en Eijeschaffte holle.",
+ "apihelp-query+allmessages-param-args": "De Parramehtere för en dä Täx udder en di Nohreesch enzeföhje.",
+ "apihelp-query+allmessages-param-filter": "Jiv blohß de Täxte un Nohreesche uß, woh heh dat Täxschtöck dren änthallde es.",
+ "apihelp-query+allmessages-param-customised": "Jiv bloß de Täxte un Nohreesche en heh däm Zohschtand uß.",
+ "apihelp-query+allmessages-param-lang": "Jiv de Täxte un Nohreesche en heh dä Schprohch uß.",
+ "apihelp-query+allmessages-param-from": "Jiv de Täxte un Nohreesche vun heh aan uß.",
+ "apihelp-query+allmessages-param-to": "Jiv de Täxte un Nohreesche bes heh uß.",
+ "apihelp-query+allmessages-param-prefix": "Jiv de Täxte un Nohreesche met heh däm Aanfang uß.",
+ "apihelp-query+allmessages-example-ipb": "Zeijsch Täxde udder Nohreeschte di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">ipb</kbd>“ aanfange.",
+ "apihelp-query+allmessages-example-de": "Zeijsch de Täxde udder Nohreeschte „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">august</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">mainpage</kbd>“ en Deutsch aan.",
+ "apihelp-query+allpages-description": "Donn alle Sigge der Reih noh en enem jejovve Appachtemang aan.",
+ "apihelp-query+allpages-param-from": "De Övverschreff vun dä Sigg, woh de Leß medd aanfange sull.",
+ "apihelp-query+allpages-param-to": "De Kännong vun dä Sigg, bes woh hen opzälle.",
+ "apihelp-query+allpages-param-prefix": "Söhk noh alle Övverschreffte vun Sigge, di met heh dämm Wäät bejenne.",
+ "apihelp-query+allpages-param-namespace": "De Saachjropp zom opzälle.",
+ "apihelp-query+allpages-param-filterredir": "Wat för en Sigg zem opleßte.",
+ "apihelp-query+allpages-param-minsize": "Bejränz op Sigge met winneschßdens esu vill Bytes dren.",
+ "apihelp-query+allpages-param-maxsize": "Bejränz op Sigge met hüüschßdens esu vill Bytes dren.",
+ "apihelp-query+allpages-param-prtype": "Bejränz op jeschöz Sigge.",
+ "apihelp-query+allpages-param-limit": "Wi vill Sigge zen aanzeije?",
+ "apihelp-query+allpages-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+allpages-example-B": "Zeisch en Leß met Sigge un bejenn mem Bohchschtabe <kbd>B</kbd>.",
+ "apihelp-query+allpages-example-generator": "Zeisch Aanjahbe övver veer Bellder un bejenn mem Bohchschtabe <kbd>T</kbd>.",
+ "apihelp-query+allpages-example-generator-revisions": "Zeisch der Enhalld vu de eetsde zwai Sigg un bejenn bei <kbd>Re</kbd>.",
+ "apihelp-query+allredirects-description": "Alle Ömleidonge op e beschtemmp Appachtemang opleßte.",
+ "apihelp-query+allredirects-param-from": "De Övverschreff vun dä Ömleidong, woh de Leß medd ophühre sull.",
+ "apihelp-query+allredirects-param-to": "De Övverschreff vun dä Sigg, woh et Zälle ophühre sull.",
+ "apihelp-query+allredirects-param-prefix": "Söhk not sigge, die esu aanfange.",
+ "apihelp-query+allredirects-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+allredirects-param-limit": "Wi vill sulle överhoup aanjezeisch wääde?",
+ "apihelp-query+allredirects-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+allredirects-example-B": "Zeisch Zihlsigge, och di et (noch) nit jitt, met dä Kännonge, wo se her sin, un bejenn mem Bohchschtabe <kbd>B</kbd>.",
+ "apihelp-query+allredirects-example-unique": "Ongerscheidlijje Sigge opleste.",
+ "apihelp-query+allredirects-example-generator": "Holl de Sigge met de Ömleidonge.",
+ "apihelp-query+alltransclusions-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+alltransclusions-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
+ "apihelp-query+alltransclusions-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+allusers-description": "Donn alle aanjemälldte Metmaacher opzälle.",
+ "apihelp-query+allusers-param-from": "Dä Metmaacher_Nahme vun woh aan opzälle.",
+ "apihelp-query+allusers-param-to": "Dä Metmaacher_Nahme bes woh hen opzälle.",
+ "apihelp-query+allusers-param-prefix": "Söhk noh alle Metmaacher_Nahme, di mit heh däm Wäät bejenne.",
+ "apihelp-query+allusers-param-dir": "De Reijefollsch zum Zotehre.",
+ "apihelp-query+allusers-param-group": "Donn blohß Metmaacher uß dä aanjejovve Jroppe enschlehße.",
+ "apihelp-query+allusers-param-excludegroup": "Donn keine Metmaacher uß dä aanjejovve Jroppe enschlehße.",
+ "apihelp-query+allusers-param-limit": "Wi vill Nahme Metmaacher sulle mer krijje?",
+ "apihelp-query+allusers-param-witheditsonly": "Blohß Metmahcher, di och ens jät verändert han.",
+ "apihelp-query+allusers-param-activeusers": "Donn blohß Metmaacher opleßte, di {{PLURAL:$1|der läzde Daach|en de läzde $1 Dääsch|keine läzde Daach}} aktihf wohre.",
+ "apihelp-query+allusers-example-Y": "Monn metmaacher opleßte, woh de Nahme vun met <kbd>Y</kbd> aanfange.",
+ "apihelp-query+backlinks-description": "Fengk alle Sigge, di op de aanjejovve Sigg lengke.",
+ "apihelp-query+backlinks-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+backlinks-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+backlinks-example-simple": "Zeijsch Lengks op de Sigg <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main page<kbd>.",
+ "apihelp-query+blocks-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+blocks-param-end": "Et Dattom un de Zigg bes woh hen opjezallt wähde sull.",
+ "apihelp-query+blocks-param-limit": "De hühßde Aanzahl Spärre zom opleste.",
+ "apihelp-query+blocks-param-prop": "Which properties to get:\n;id:Adds the ID of the block.\n;user:Adds the username of the blocked user.\n;userid:Adds the user ID of the blocked user.\n;by:Adds the username of the blocking user.\n;byid:Adds the user ID of the blocking user.\n;timestamp:Adds the timestamp of when the block was given.\n;expiry:Adds the timestamp of when the block expires.\n;reason:Adds the reason given for the block.\n;range:Adds the range of IP addresses affected by the block.\n;flags:Tags the ban with (autoblock, anononly, etc.).\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bblocks-param-prop/ksh\n-->",
+ "apihelp-query+blocks-example-simple": "Schpärre opleßte.",
+ "apihelp-query+blocks-example-users": "Donn de Schpärre vun dä Metmaacher <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Alice</kbd> un <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Bob</kbd> opleßte.",
+ "apihelp-query+categories-description": "Donn alle Saachjroppe epleßte, woh di Sigge dren sin.",
+ "apihelp-query+categories-param-prop": "Which additional properties to get for each category:\n;sortkey:Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.\n;timestamp:Adds timestamp of when the category was added.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bcategories-param-prop/ksh\n-->",
+ "apihelp-query+categories-param-show": "Wat för en Zoot Saachjroppe zeije.",
+ "apihelp-query+categories-param-limit": "Wi vell Saachjroppe ußjävve?",
+ "apihelp-query+categories-param-dir": "En wälsche Reijefollsch?",
+ "apihelp-query+categories-example-simple": "Holl en Leß med alle Saachjroppe, woh di Sigg <kbd>Albert Einstein</kbd> dren es.",
+ "apihelp-query+categories-example-generator": "Holl Aanjahbe övver alle Saachjroppe, di en dä Sigg <kbd>Albert Einstein</kbd> jebruch wähde.",
+ "apihelp-query+categoryinfo-description": "Holl Aanjahbe övver de aanjejovve Saachjroppe.",
+ "apihelp-query+categorymembers-description": "Donn alle Sigge en ener aanjejove saachjrobb opleste.",
+ "apihelp-query+categorymembers-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
+ "apihelp-query+categorymembers-param-sort": "De Eijeschavv öm dernoh ze zottehre.",
+ "apihelp-query+categorymembers-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+categorymembers-param-startsortkey": "Söhk „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1starthexsortkey</code>“ schtatt dämm.",
+ "apihelp-query+categorymembers-param-endsortkey": "Söhk „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1endhexsortkey </code>“ schtatt dämm.",
+ "apihelp-query+categorymembers-example-simple": "Holl de eezde zehn Sigge de dä <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Category:Physics</kbd>.",
+ "apihelp-query+categorymembers-example-generator": "Holl anjahbe övver de eezde zehn Sigge de dä <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Category:Physics</kbd>.",
+ "apihelp-query+deletedrevisions-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
+ "apihelp-query+deletedrevisions-param-limit": "De hühßde Aanzahl Väsjohne för opzeleßte.",
+ "apihelp-query+deletedrevisions-param-prop": "Wat för en Eijeschaffte holle:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the user ID who made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;tags:Tags for the revision.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Bdeletedrevisions-param-prop/en\n-->",
+ "apihelp-query+deletedrevisions-example-revids": "Donn de Aanjahbe för de fottjeschmeße Väsjohn <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">123456</kbd> holle.",
+ "apihelp-query+duplicatefiles-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+embeddedin-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+filearchive-param-dir": "En wälsche Reijefollsch opleßte.",
+ "apihelp-query+images-param-dir": "En wälsche Reijefollsch opleßte.",
+ "apihelp-query+imageusage-param-namespace": "Dat Appachtemang zom opzälle.",
+ "apihelp-query+imageusage-param-dir": "En wälsche Reijefollsch opleßte.",
+ "apihelp-query+info-paramvalue-prop-watchers": "De Aanzahl Oppaßer, wann zohjelohße.",
+ "apihelp-query+iwbacklinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+iwlinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+langbacklinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+langlinks-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+links-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+pagepropnames-param-limit": "De jrüüßte Zahl Nahme för ußzejävve.",
+ "apihelp-query+pagepropnames-example-simple": "Holl de eezde zehn Nahme vun Eijeschaffte.",
+ "apihelp-query+pageswithprop-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
+ "apihelp-query+pageswithprop-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+prefixsearch-param-namespace": "En wällschem Appachtemang söhke.",
+ "apihelp-query+prefixsearch-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
+ "apihelp-query+querypage-param-limit": "De Aanzahl vun Äjeebnesse för zeröck ze jävve",
+ "apihelp-query+random-param-limit": "Wi vill zohfälleje Sigge sulle ußjejovve wähde?",
+ "apihelp-query+revisions+base-param-limit": "Wi vill Väsjohne sulle ußjejovve wähde?",
+ "apihelp-query+siteinfo-param-numberingroup": "Donn de Aanzahl Metmaacher en de Jroppe vun Metmaacher opleßte.",
+ "apihelp-query+tags-param-limit": "De hühßde Aanzahl !!FUZY tags zom opleste.",
+ "apihelp-query+tags-param-prop": "Wat för en Eijschaffte holle:\n;name:Adds name of tag.\n;displayname:Adds system message for the tag.\n;description:Adds description of the tag.\n;hitcount:Adds the number of revisions and log entries that have this tag.\n;defined:Indicate whether the tag is defined.\n;source:Gets the sources of the tag, which may include <samp>extension</samp> for extension-defined tags and <samp>manual</samp> for tags that may be applied manually by users.\n;active:Whether the tag is still being applied.\n<!-- https://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-query%2Btags-param-prop/ksh\n -->",
+ "apihelp-query+templates-param-limit": "Wi vill Schablohne sulle ußjejovve wähde?",
+ "apihelp-query+templates-param-dir": "En wälsche Reihjefollsch opleßte.",
+ "apihelp-query+usercontribs-param-limit": "De hühßte Aanzahl vun Meddeilonge för zeröck ze jävve",
+ "api-help-param-default": "Schtandatt: $1",
+ "api-help-param-default-empty": "Schtandatt: <span class=\"apihelp-empty\">(läddesch)</span>",
+ "api-help-param-limited-in-miser-mode": "<strong>opjepaß:</strong> Weil der [[mw:Manual:$wgMiserMode|miser mode]] enjeschalld es, künne heh winnijer wi <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</var> Äjehpneße ußjejejovve wähde, vör em Wigger_Mache. En Jränzfäll künne et Noll sin.",
+ "api-help-param-direction": "En wälsche Reihjefollsch opleßte:\n;newer:List oldest first. Note: $1start has to be before $1end.\n;older:List newest first (default). Note: $1start has to be later than $1end.\n<!-- \nhttps://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Api-help-param-direction/ksh\n-->",
+ "api-help-param-continue": "Wann mih ze holle es, nemm dat för wigger ze maache.",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(nix drövver bikannt)</span>",
+ "api-help-examples": "{{PLURAL:$1|Beijschpell|Beijschpelle|Beijschpell}}:",
+ "api-help-permissions": "{{PLURAL:$1|Rääsch|Rääschde|Rääsch}}:",
+ "api-help-permissions-granted-to": "Jejovve aan: $2{{PLURAL:$1|}}",
+ "api-help-right-apihighlimits": "Donn de Beschängkonge vun Opdrähscht aan de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> kleiner maache (langsamme Opdrähscht: $1; flöcke Opdrähscht: $2). De Beschränkonge för lahme Opdrähscht jällde och för Parramehtere met vill Wähte.",
+ "api-credits-header": "Aanäkännong för Beijdrähsch",
+ "api-credits": "Dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ier Äntweklere:\n* Roan Kattouw (Aanföhrer zigg em Säptämber 2007 bes 2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (Bejenner un Aanföhrer vum Säptämber 2006 bes Säptämber 2007)\n* Brad Jorsch (Aanföhrer vun 2013 bes hük)\n\nDoht Ühr Aanmärkonge, Vörschlähsch un Frohre aan de Meijlengleß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">mediawiki-api@lists.wikimedia.org</code> scheke, Ühr Vörschlähsch un Fählermälldong doht op <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">https://phabricator.wikimedia.org/</code> ennjävve."
+}
diff --git a/includes/api/i18n/ku-latn.json b/includes/api/i18n/ku-latn.json
new file mode 100644
index 00000000..a40e4c11
--- /dev/null
+++ b/includes/api/i18n/ku-latn.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "George Animal"
+ ]
+ },
+ "apihelp-delete-description": "Rûpelekê jê bibe.",
+ "apihelp-expandtemplates-param-title": "Sernavê rûpelê."
+}
diff --git a/includes/api/i18n/lb.json b/includes/api/i18n/lb.json
new file mode 100644
index 00000000..ac2a1d34
--- /dev/null
+++ b/includes/api/i18n/lb.json
@@ -0,0 +1,94 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby"
+ ]
+ },
+ "apihelp-block-description": "E Benotzer spären.",
+ "apihelp-block-param-user": "Benotzernumm, IP-Adress oder IP-Beräich deen Dir späre wëllt.",
+ "apihelp-block-param-reason": "Grond fir ze spären.",
+ "apihelp-block-param-anononly": "Nëmmen anonym Benotzer spären (z. Bsp. anonym Ännerunge vun dëser IP-Adress ausschalten)",
+ "apihelp-block-param-nocreate": "Opmaache vun engem Benotzerkont verhënneren.",
+ "apihelp-block-param-reblock": "Wann de Benotzer scho gespaart ass, déi aktuell Spär iwwerschreiwen.",
+ "apihelp-block-param-watchuser": "Dem Benotzer oder der IP-Adress hier Benotzer- an Diskussiouns-Säiten iwwerwaachen.",
+ "apihelp-compare-param-fromtitle": "Éischten Titel fir ze vergläichen.",
+ "apihelp-createaccount-description": "En neie Benotzerkont uleeën.",
+ "apihelp-createaccount-param-name": "Benotzernumm.",
+ "apihelp-createaccount-param-email": "E-Mail-Adress vum Benotzer (fakultativ).",
+ "apihelp-createaccount-param-realname": "Richtegen Numm vum Benotzer (fakultativ).",
+ "apihelp-delete-description": "Eng Säit läschen.",
+ "apihelp-delete-param-watch": "D'Säit op dem aktuelle Benotzer seng Iwwerwaachungslëscht dobäisetzen.",
+ "apihelp-delete-example-simple": "D'<kbd>Haaptsäit</kbd> läschen.",
+ "apihelp-disabled-description": "Dëse Modul gouf ausgeschalt.",
+ "apihelp-edit-param-sectiontitle": "Den Titel fir en neien Abschnitt.",
+ "apihelp-edit-param-minor": "Kleng Ännerung.",
+ "apihelp-edit-param-bot": "Dës Ännerung als Bot-Ännerung markéieren.",
+ "apihelp-edit-param-watch": "D'Säit op dem aktuelle Benotzer seng Iwwerwaachungslëscht dobäisetzen.",
+ "apihelp-edit-example-edit": "Eng Säit änneren",
+ "apihelp-expandtemplates-param-title": "Titel vun der Säit.",
+ "apihelp-feedrecentchanges-param-hideminor": "Kleng Ännerunge verstoppen.",
+ "apihelp-feedrecentchanges-param-hideanons": "Ännerunge vun anonyme Benotzer verstoppen.",
+ "apihelp-feedrecentchanges-param-hideliu": "Ännerunge vu registréierte Benotzer verstoppen.",
+ "apihelp-feedrecentchanges-example-simple": "Rezent Ännerunge weisen",
+ "apihelp-help-example-main": "Hëllef fir den Haaptmodul.",
+ "apihelp-help-example-recursive": "All Hëllef op enger Säit",
+ "apihelp-imagerotate-description": "Eent oder méi Biller dréinen.",
+ "apihelp-imagerotate-example-generator": "All Biller an der <kbd>Category:Flip]]<kbd> ëm <kbd>180<kbd> Grad dréinen.",
+ "apihelp-import-param-summary": "Resumé importéieren.",
+ "apihelp-login-param-name": "Benotzernumm.",
+ "apihelp-login-param-password": "Passwuert.",
+ "apihelp-login-example-login": "Aloggen.",
+ "apihelp-move-description": "Eng Säit réckelen.",
+ "apihelp-move-param-ignorewarnings": "All Warnungen ignoréieren.",
+ "apihelp-options-example-reset": "All Astellungen zrécksetzen",
+ "apihelp-patrol-example-rcid": "Eng rezent Ännerung nokucken.",
+ "apihelp-patrol-example-revid": "Eng Versioun nokucken.",
+ "apihelp-protect-example-protect": "Eng Säit spären",
+ "apihelp-query+allcategories-description": "All Kategorien opzielen.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kann nëmme mam <var>$3user</var> benotzt ginn.",
+ "apihelp-query+alldeletedrevisions-param-user": "Nëmme Versioune vun dësem Benotzer opzielen.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
+ "apihelp-query+allusers-description": "All registréiert Benotzer opzielen.",
+ "apihelp-query+allusers-param-activeusers": "Nëmme Benotzer opzielen déi an de leschten $1 {{PLURAL:$1|Dag|Deeg}} aktiv waren.",
+ "apihelp-query+blocks-description": "Lëscht vun de gespaarte Benotzer an IP-Adressen.",
+ "apihelp-query+blocks-example-simple": "Lëscht vun de Spären",
+ "apihelp-query+categories-description": "All Kategorien opzielen zu deenen dës Säit gehéiert.",
+ "apihelp-query+categorymembers-description": "All Säiten aus enger bestëmmter Kategorie opzielen.",
+ "apihelp-query+categorymembers-example-simple": "Déi éischt 10 Säiten aus der <kbd>Category:Physics</kbd> kréien.",
+ "apihelp-query+deletedrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
+ "apihelp-query+deletedrevs-param-unique": "Nëmmen eng Versioun fir all Säit weisen.",
+ "apihelp-query+filearchive-example-simple": "Eng Lëscht vun alle geläschte Fichiere weisen",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "Setzt fir all Versioun vum Fichier de Benotzer dobäi deen en eropgelueden huet.",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "Bemierkung iwwert d'Versioun.",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias fir Gréisst.",
+ "apihelp-query+imageinfo-param-urlheight": "Ähnlech wéi $1urlwidth.",
+ "apihelp-query+images-example-simple": "Eng Lëscht vun de Fichiere kréien déi op der [[Main Page|Haaptsäit]] benotzt ginn",
+ "apihelp-query+imageusage-example-simple": "Säite weisen déi [[:File:Albert Einstein Head.jpg]] benotzen",
+ "apihelp-query+info-paramvalue-prop-readable": "Ob de Benotzer dës Säit liese kann.",
+ "apihelp-query+langlinks-param-lang": "Nëmme Sproochlinke mat dësem Sproochcode zréckginn.",
+ "apihelp-query+protectedtitles-param-namespace": "Nëmmen Titelen aus dësen Nummraim opzielen.",
+ "apihelp-query+recentchanges-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+ "apihelp-query+recentchanges-example-simple": "Rezent Ännerunge weisen",
+ "apihelp-query+revisions-example-last5": "Déi lescht 5 Versioune vun der <kbd>Haaptsäit</kbd> kréien.",
+ "apihelp-query+usercontribs-description": "All Ännerunge vun engem Benotzer kréien.",
+ "apihelp-query+watchlist-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+ "apihelp-query+watchlist-param-excludeuser": "Ännerunge vun dësem Benotzer net opzielen.",
+ "apihelp-query+watchlistraw-param-show": "Nëmmen Elementer opzielen déi dëse Critèren entspriechen.",
+ "apihelp-query+watchlistraw-example-simple": "Säite vum aktuelle Benotzer senger Iwwerwaachungslëscht opzielen",
+ "apihelp-revisiondelete-description": "Versioune läschen a restauréieren.",
+ "apihelp-revisiondelete-param-reason": "Grond fir ze Läschen oder ze Restauréieren.",
+ "apihelp-rsd-example-simple": "Den RSD-Schema exportéieren",
+ "apihelp-unblock-description": "D'Spär vun engem Benotzer ophiewen.",
+ "apihelp-unblock-param-reason": "Grond fir d'Spär opzehiewen",
+ "apihelp-undelete-param-reason": "Grond fir ze restauréieren.",
+ "apihelp-undelete-example-page": "<kbd>Main Page</kbd> restauréieren.",
+ "apihelp-upload-param-watch": "D'Säit iwwerwaachen.",
+ "apihelp-upload-example-url": "Vun enger URL eroplueden.",
+ "apihelp-userrights-param-user": "Benotzernumm.",
+ "apihelp-userrights-param-userid": "Benotzer Id.",
+ "apihelp-userrights-param-reason": "Grond fir d'Ännerung.",
+ "apihelp-watch-example-watch": "D'Säit <kbd>Haaptsäit</kbd> iwwerwaachen.",
+ "api-help-param-deprecated": "Vereelst.",
+ "api-help-param-required": "Dëse Parameter ass obligatoresch.",
+ "api-help-examples": "{{PLURAL:$1|Beispill|Beispiler}}:"
+}
diff --git a/includes/api/i18n/ln.json b/includes/api/i18n/ln.json
new file mode 100644
index 00000000..cd117465
--- /dev/null
+++ b/includes/api/i18n/ln.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Moyogo"
+ ]
+ },
+ "apihelp-edit-example-edit": "Kobɔngisa lokásá lɔ̌kɔ́."
+}
diff --git a/includes/api/i18n/lv.json b/includes/api/i18n/lv.json
new file mode 100644
index 00000000..b24e5f63
--- /dev/null
+++ b/includes/api/i18n/lv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Papuass"
+ ]
+ },
+ "apihelp-userrights-param-userid": "Lietotāja ID:"
+}
diff --git a/includes/api/i18n/lzh.json b/includes/api/i18n/lzh.json
new file mode 100644
index 00000000..970bea94
--- /dev/null
+++ b/includes/api/i18n/lzh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "RalfX"
+ ]
+ },
+ "apihelp-feedcontributions-param-toponly": "僅示至新審之纂"
+}
diff --git a/includes/api/i18n/mg.json b/includes/api/i18n/mg.json
new file mode 100644
index 00000000..8e2a8b56
--- /dev/null
+++ b/includes/api/i18n/mg.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jagwar"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Torohevitra be kokoa]\n* [https://www.mediawiki.org/wiki/API:FAQ Fanontaniana miverina matetika]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lisitry ny mailaka manaraka]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Filazana API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Baogy & hataka]\n</div>\n<strong>Status:</strong> \nTokony mandeha avokoa ny fitaovana aseho eto amin'ity pehy ity, na dia izany aza mbola am-panamboarana ny API ary mety hiova na oviana na oviana. Araho amin'ny alalan'ny fisoratana ny mailakao ao amin'ny [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce lisitra fampielezana] ny fiovana.\n\n<strong>Hataka diso:</strong> \nRehefa alefa ao amin'i API ny hata, ho alefa miaraka amin'ny lakile \"MediaWiki-API-Error\" ny header HTTP ary samy homen-tsanda mitovy ny header ary ny kaodin-kadisoana. Ho an'ny torohay fanampiny dia jereo https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+ "apihelp-main-param-action": "Inona ny zavatra ho atao.",
+ "apihelp-main-param-format": "Format mivoaka",
+ "apihelp-createaccount-param-name": "Anaram-pikambana."
+}
diff --git a/includes/api/i18n/mk.json b/includes/api/i18n/mk.json
new file mode 100644
index 00000000..1efb45f3
--- /dev/null
+++ b/includes/api/i18n/mk.json
@@ -0,0 +1,398 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page Документација]\n* [https://www.mediawiki.org/wiki/API:FAQ ЧПП]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Поштенски список]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Соопштенија за Извршникот]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Грешки и барања]\n</div>\n<strong>Статус:</strong> Сите ставки на страницава би требало да работат, но Извршникот сепак е во активна разработка, што значи дека може да се смени во секое време. Објавите за измени можете да ги дознавате ако се пријавите на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ поштенскиот список „the mediawiki-api-announce“].\n\n<strong>Погрешни барања:</strong> Кога Извршникот ќе добие погрешни барања, ќе се испрати HTTP-заглавие со клучот „MediaWiki-API-Error“ и потоа на вредностите на заглавието и шифрата на грешката што ќе се појават ќе им биде зададена истата вредност. ПОвеќе информации ќе најдете на https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+ "apihelp-main-param-action": "Кое дејство да се изврши.",
+ "apihelp-main-param-format": "Формат на изводот.",
+ "apihelp-main-param-maxlag": "Максималниот заостаток може да се користи кога МедијаВики е воспоставен на грозд умножен од базата. За да спречите дополнителни заостатоци од дејства, овој параметар му наложува на клиентот да почека додека заостатокот не се намали под укажаната вредност. Во случај на преголем заостаток, системт ја дава грешката со код „maxlag“ со порака од обликот „Го чекам $host: има заостаток од $lag секунди“.<br />Погл. https://www.mediawiki.org/wiki/Manual:Maxlag_parameter за повеќе информации.",
+ "apihelp-main-param-smaxage": "Задајте му олку секунди на заглавитето <code>s-maxage</code>. Грешките никогаш не се чуваат во меѓускладот.",
+ "apihelp-main-param-maxage": "Задајте му олку секунди на заглавитето <code>max-age</code>. Грешките никогаш не се чуваат во меѓускладот.",
+ "apihelp-main-param-assert": "Провери дали корисникот е најавен ако е зададено „user“ или дали го има корисничкото право на бот, ако е зададено „bot“.",
+ "apihelp-main-param-requestid": "Тука внесената вредност ќе биде вклучена во извештајот. Може да се користи за разликување на барањата.",
+ "apihelp-main-param-servedby": "Вклучи го домаќинското име што го услужило барањето во резултатите.",
+ "apihelp-main-param-curtimestamp": "Бклучи тековно време и време и датум во резултатот.",
+ "apihelp-main-param-origin": "Кога му пристапувате на Пирлогот користејќи повеќедоменско AJAX-барање (CORS), задајте му го на ова изворниот домен. Ова мора да се вклучи во секое подготвително барање и затоа мора да биде дел од URI на барањето (не главната содржина во POST). Ова мора точно да се совпаѓа со еден од изворниците на заглавието Origin:, така што мора да е зададен на нешто како http://en.wikipedia.org or https://meta.wikimedia.org. Ако овој параметар не се совпаѓа со заглавието Origin:, ќе се појави одговор 403. Ако се совпаѓа, а изворникот е на бел список (на допуштени), тогаш ќе се зададе ззаглавието Контрола на пристап-Изворник.",
+ "apihelp-main-param-uselang": "Јазик за преведување на пораките. Список на јазични кодови ќе најдете на [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]] со siprop=languages или укажете „user“ за да го користите тековно зададениот јазик корисникот, или пак укажете „content“ за да го користите јазикот на содржината на ова вики.",
+ "apihelp-block-description": "Блокирај корисник.",
+ "apihelp-block-param-user": "Корисничко име, IP-адреса или IP-опсег ако сакате да блокирате.",
+ "apihelp-block-param-expiry": "Време на истек. Може да биде релативно (на пр. „5 месеци“ или „2 недели“) или пак апсолутно (на пр. „2014-09-18T12:34:56Z“). Ако го зададете „бесконечно“, „неодредено“ или „никогаш“, блокот ќе трае засекогаш.",
+ "apihelp-block-param-reason": "Причина за блокирање.",
+ "apihelp-block-param-anononly": "Блокирај само анонимни корисници (т.е. оневозможи анонимно уредување од оваа IP-адреса).",
+ "apihelp-block-param-nocreate": "Оневозможи создавање кориснички сметки.",
+ "apihelp-block-param-autoblock": "Автоматски блокирај ја последно употребената IP-адреса и сите понатамошни IP-адреси од кои лицето ќе се обиде да се најави.",
+ "apihelp-block-param-noemail": "Оневозможи му на корисникот да испаќа е-пошта преку викито. (Го бара правото „блокирање е-пошта“).",
+ "apihelp-block-param-hidename": "Скриј го корисничкото име од дневникот на блокирања. (Го бара правото „скривање корисник“)",
+ "apihelp-block-param-allowusertalk": "Овозможи му на корисникот да си ја уредува сопствената страница за разговор (зависи од <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Ако корисникот е веќе блокиран, наметни врз постоечкиот блок.",
+ "apihelp-block-param-watchuser": "Набљудувај ја корисничката страница и страницата за разговор на овој корисник или IP-адреса",
+ "apihelp-block-example-ip-simple": "Блокирај ја IP-адресата 192.0.2.5 три дена со причината „Прва опомена“",
+ "apihelp-block-example-user-complex": "Блокирај го корисникот Вандал (Vandal) бесконечно со причината „Вандализам“ и оневозможи создавање на нови сметки и праќање е-пошта",
+ "apihelp-clearhasmsg-description": "Ја отстранува ознаката „<code>hasmsg</code>“ од тековниот корисник.",
+ "apihelp-clearhasmsg-example-1": "Отстрани ја ознаката „<code>hasmsg</code>“ од тековниот корисник",
+ "apihelp-compare-description": "Добивање на разлика помеѓу две страници.\n\nМора да се добие број на преработката, наслов на странивата или пак нејзина назнака. Важи и за „од“ и за „на“.",
+ "apihelp-compare-param-fromtitle": "Прв наслов за споредба.",
+ "apihelp-compare-param-fromid": "Прва назнака на страница за споредба.",
+ "apihelp-compare-param-fromrev": "Прва преработка за споредба.",
+ "apihelp-compare-param-totitle": "Втор наслов за споредба.",
+ "apihelp-compare-param-toid": "Втора назнака на страница за споредба.",
+ "apihelp-compare-param-torev": "Бтора преработка за споредба.",
+ "apihelp-compare-example-1": "Дај разлика помеѓу преработките 1 и 2",
+ "apihelp-createaccount-description": "Создај нова корисничка сметка.",
+ "apihelp-createaccount-param-name": "Корисничко име.",
+ "apihelp-createaccount-param-password": "Лозинка (се занемарува ако е зададено <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Домен за надворешна заверка (незадолжително).",
+ "apihelp-createaccount-param-token": "Шифра за создавање сметка добиена во првото барање.",
+ "apihelp-createaccount-param-email": "Е-пошта на корисникот (незадолжително).",
+ "apihelp-createaccount-param-realname": "Вистинско име на корисникот (незадолжително).",
+ "apihelp-createaccount-param-mailpassword": "Ако му се зададе било каква вредност, тогаш на корисникот ќе му биде испратена случајна лозинка.",
+ "apihelp-createaccount-param-reason": "Незадолжителна прочина за создавање на сметката која ќе стои во дневниците.",
+ "apihelp-createaccount-param-language": "Јазичен код кој ќе биде стандарден за корисникот (незадолжително, по основно: јазикот на самото вики).",
+ "apihelp-createaccount-example-pass": "Создај го корисникот „testuser“ со лозинката „test123“",
+ "apihelp-createaccount-example-mail": "Создај го корисникот „testmailuser“ и испрати случајно-создадена лозинка по е-пошта",
+ "apihelp-delete-description": "Избриши страница.",
+ "apihelp-delete-param-title": "Наслов на страницата што сакате да ја избришете. Не може да се користи заедно со $1pageid.",
+ "apihelp-delete-param-pageid": "Назнака на страницата што сакате да ја избришете. Не може да се користи заедно со $1title.",
+ "apihelp-delete-param-reason": "Причина за бришење. Ако не се зададе, ќе се наведе автоматска причина.",
+ "apihelp-delete-param-watch": "Додај ја страницата во набљудуваните.",
+ "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": "Избриши ја Главната страница",
+ "apihelp-delete-example-reason": "Избриши ја Главната страница со причината „Подготовка за преместување“",
+ "apihelp-disabled-description": "Модулот е деактивиран.",
+ "apihelp-edit-description": "Создај или уреди страници.",
+ "apihelp-edit-param-title": "Наслов на страницата што сакате да ја уредите. Не може да се користи заедно со $1pageid.",
+ "apihelp-edit-param-pageid": "Назнака на страницата што сакате да ја уредите. Не може да се користи заедно со $1title.",
+ "apihelp-edit-param-section": "Број на поднасловот. 0 за првиот, „new“ за нов.",
+ "apihelp-edit-param-sectiontitle": "Назив на новиот поднаслов",
+ "apihelp-edit-param-text": "Содржина на страницата.",
+ "apihelp-edit-param-summary": "Опис на уредувањето. Ова е и назив на поднасловот кога не се зададени $1section=new и $1sectiontitle.",
+ "apihelp-edit-param-minor": "Ситно уредување.",
+ "apihelp-edit-param-notminor": "Неситно уредување.",
+ "apihelp-edit-param-bot": "Означи го уредувањево како ботско.",
+ "apihelp-edit-param-basetimestamp": "Датум и време на преработката на базата, кои се користат за утврдување на спротиставености во уредувањето. Може да се добие преку [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Датум и време кога сте го почнале уредувањето, кои се користат за утврдување на спротиставености во уредувањата. Соодветната вредност се добива користејќи [[Special:ApiHelp/main|curtimestamp]] кога ќе почнете со уредување (на пр. кога ќе се вчита содржината што ќе ја уредувате).",
+ "apihelp-edit-param-recreate": "Занемари ги грешките што се појавуваат во врска со статијата што е избришана во меѓувреме.",
+ "apihelp-edit-param-createonly": "Не ја уредувај страницата ако веќе постои.",
+ "apihelp-edit-param-nocreate": "Дај грешка ако страницата не постои.",
+ "apihelp-edit-param-watch": "Додај ја страницата во набљудуваните.",
+ "apihelp-edit-param-unwatch": "Отстрани ја страницата од набљудуваните.",
+ "apihelp-edit-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+ "apihelp-edit-param-md5": "MD5-тарабата на параметарот $1text, или параметрите $1prependtext и $1appendtext поврзани. Ако е зададено, уредувањето нема да се изврши без тарабата да биде исправна.",
+ "apihelp-edit-param-prependtext": "Ставете го текстов на почетокот од страницата. Го заменува $1text.",
+ "apihelp-edit-param-appendtext": "Ставете го текстов на крајот од страницата. Го заменува $1text.\n\nКористете $1section=new наместо овој параметар за да приложите кон новиот поднаслов.",
+ "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-emailuser-description": "Испрати е-пошта на корисник.",
+ "apihelp-emailuser-param-target": "На кој корисник да му се испрати е-поштата.",
+ "apihelp-emailuser-param-subject": "Наслов.",
+ "apihelp-emailuser-param-text": "Содржина.",
+ "apihelp-emailuser-param-ccme": "Прати ми примерок и мене.",
+ "apihelp-emailuser-example-email": "Испрати е-пошта на корисникот „WikiSysop“ со текстот „Содржина“",
+ "apihelp-expandtemplates-description": "Ги проширува сите шаблони во викитекст.",
+ "apihelp-expandtemplates-param-title": "Наслов на страница.",
+ "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
+ "apihelp-expandtemplates-param-revid": "Назнака на преработката, за <nowiki>{{REVISIONID}}</nowiki> и слични променливи.",
+ "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n;wikitext:The expanded wikitext.\n;categories: Категориите присутно во вносот кои не се претставени во викитекстуалниот извод.\n;volatile: Дали изводот е месно врзан и не треба да се преупотребува на други места во страницата.\n;ttl: Максималното време по кое треба да се поништи меѓускладираниот резултат.\n;parsetree: XML-дрвото на расчленување за изводот.\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
+ "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
+ "apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Прошири го викитекстот „<nowiki>{{Project:Sandbox}}</nowiki>“",
+ "apihelp-feedcontributions-description": "Дава канал со придонеси на корисник.",
+ "apihelp-feedcontributions-param-feedformat": "Формат на каналот.",
+ "apihelp-feedcontributions-param-user": "За кои корисници да се прикажуваат придонесите.",
+ "apihelp-feedcontributions-param-namespace": "По кој именски простор да се филтрираат придонесите:",
+ "apihelp-feedcontributions-param-year": "Од година (и порано):",
+ "apihelp-feedcontributions-param-month": "Од месец (и порано):",
+ "apihelp-feedcontributions-param-tagfilter": "Филтрирај придонеси што имаат ознаки.",
+ "apihelp-feedcontributions-param-deletedonly": "Прикажувај само избришани придонеси.",
+ "apihelp-feedcontributions-param-toponly": "Прикажувај само последни преработки.",
+ "apihelp-feedcontributions-param-newonly": "Прикажувај само новосоздадени страници",
+ "apihelp-feedcontributions-param-showsizediff": "Покажувај ја големинската разлика меѓу преработките.",
+ "apihelp-feedcontributions-example-simple": "Покажувај придонеси на [[Корисник:Пример]]",
+ "apihelp-feedrecentchanges-description": "Дава канал со скорешни промени.",
+ "apihelp-feedrecentchanges-param-feedformat": "Форматот на каналот.",
+ "apihelp-feedrecentchanges-param-namespace": "На кој именски простор да се ограничат резултатите.",
+ "apihelp-feedrecentchanges-param-invert": "Сите именски простори освен избраниот.",
+ "apihelp-feedrecentchanges-param-associated": "Вклучи придружни именски простори (разговор или главен).",
+ "apihelp-feedrecentchanges-param-days": "На кои денови да се ограничат резултатите.",
+ "apihelp-feedrecentchanges-param-limit": "Максималниот број на резултати за прикажување.",
+ "apihelp-feedrecentchanges-param-from": "Прикажи ги промените оттогаш.",
+ "apihelp-feedrecentchanges-param-hideminor": "Скриј ги ситните промени.",
+ "apihelp-feedrecentchanges-param-hidebots": "Скриј ги промените напарвени од ботови.",
+ "apihelp-feedrecentchanges-param-hideanons": "Скриј ги промените направени од анонимни корисници.",
+ "apihelp-feedrecentchanges-param-hideliu": "Скриј ги промените направени од регистрирани корисници.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Скриј ги испатролираните промени.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Скриј ги моите промени.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Филтрирање по ознака.",
+ "apihelp-feedrecentchanges-param-target": "Прикажи само промени на страници што водат од оваа.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Наместо тоа, прикажи ги промените на страниците поврзани со избраната страница.",
+ "apihelp-feedrecentchanges-example-simple": "Прикажи скорешни промени",
+ "apihelp-feedrecentchanges-example-30days": "Прикажувај скорешни промени 30 дена",
+ "apihelp-feedwatchlist-description": "Дава канал од набљудуваните.",
+ "apihelp-feedwatchlist-param-feedformat": "Форматот на каналот.",
+ "apihelp-feedwatchlist-param-hours": "Испиши страници изменети во рок од олку часови отсега.",
+ "apihelp-feedwatchlist-param-linktosections": "Давај ме право на изменетите делови, ако е можно.",
+ "apihelp-feedwatchlist-example-default": "Прикажи го каналот од набљудуваните.",
+ "apihelp-feedwatchlist-example-all6hrs": "Прикажи ги сите промени во набљудуваните во последните 6 часа",
+ "apihelp-filerevert-description": "Врати податотека на претходна верзија.",
+ "apihelp-filerevert-param-filename": "Име на целната податотека, без претставката „Податотека:“.",
+ "apihelp-filerevert-param-comment": "Коментар за подигањето.",
+ "apihelp-filerevert-param-archivename": "Архивски назив на преработката што ја повраќате.",
+ "apihelp-filerevert-example-revert": "Врати ја <kbd>Wiki.png</kbd> на верзијата од <kbd>2011-03-05T15:27:40Z</kbd>",
+ "apihelp-help-description": "Прикажувај помош за укажаните модули.",
+ "apihelp-help-param-modules": "Модули за приказ на помош за (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+ "apihelp-help-param-submodules": "Прикажувај и помош за подмодули на именуваниот модул.",
+ "apihelp-help-param-recursivesubmodules": "Прикажувај и помош за подмодули рекурзивно.",
+ "apihelp-help-param-helpformat": "Формат на изводот на помошта.",
+ "apihelp-help-param-wrap": "Обвиткај го изводот како станрадна одѕивна структура од прилотот.",
+ "apihelp-help-param-toc": "Вклучи табела со содржина во HTML-изводот.",
+ "apihelp-help-example-main": "Помош за главниот модул",
+ "apihelp-help-example-recursive": "Сета помош на една страница",
+ "apihelp-help-example-help": "Помош за самиот помошен модул",
+ "apihelp-help-example-query": "Помош за два подмодула за барања",
+ "apihelp-imagerotate-description": "Сврти една или повеќе слики.",
+ "apihelp-imagerotate-param-rotation": "За колку степени да се сврти надесно.",
+ "apihelp-imagerotate-example-simple": "Сврти ја [[:Податотека:Пример.png]] за 90 степени",
+ "apihelp-imagerotate-example-generator": "Сврти ги сите слики во [[:Категорија:Некоја]] за 180 степени",
+ "apihelp-import-description": "Увези страница од друго вики или XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот „xml“.",
+ "apihelp-import-param-summary": "Увези опис.",
+ "apihelp-import-param-xml": "Подигната XML-податотека.",
+ "apihelp-import-param-interwikisource": "За меѓујазични увози: од кое вики да се увезе.",
+ "apihelp-import-param-interwikipage": "За меѓујазични увози: страница за увоз.",
+ "apihelp-import-param-fullhistory": "За меѓујазични увози:: увези ја целата историја, а не само тековната верзија.",
+ "apihelp-import-param-templates": "За меѓујазични увози: увези ги и сите вклучени шаблони.",
+ "apihelp-import-param-namespace": "За меѓујазични увози: увези во овој именски простор.",
+ "apihelp-import-param-rootpage": "Увези како потстраница на страницава.",
+ "apihelp-import-example-import": "Увези [[meta:Help:Parserfunctions]] во именскиот простор 100 со целата историја.",
+ "apihelp-login-description": "Најавете се и добијте колачиња за заверка.\n\nВо случај кога ќе се најавите успешно, потребните колачиња ќе се придодадат кон заглавијата на HTTP-одѕивот. Во случај да не успеете да се најавите, понатамошните обиди може да се ограничат за да се ограничат нападите со автоматизирано погодување на лозинката.",
+ "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-description": "Одјави се и исчисти ги податоците на седницата.",
+ "apihelp-logout-example-logout": "Одјави го тековниот корисник",
+ "apihelp-move-description": "Премести страница.",
+ "apihelp-move-param-from": "Наслов на страницата што сакате да ја преместите. Не може да се користи заедно со $1fromid.",
+ "apihelp-move-param-fromid": "Назнака на страницата што сакате да ја преместите. Не може да се користи заедно со $1from.",
+ "apihelp-move-param-to": "Како сакате да гласи новиот наслов на страницата.",
+ "apihelp-move-param-reason": "Причина за преместувањето.",
+ "apihelp-move-param-movetalk": "Премести ја и страницата за разговор, ако ја има.",
+ "apihelp-move-param-movesubpages": "Премести потстраници, ако има",
+ "apihelp-move-param-noredirect": "Не прави пренасочување.",
+ "apihelp-move-param-watch": "Додај ги страницата и пренасочувањето во набљудуваните.",
+ "apihelp-move-param-unwatch": "Отстрани ги страницата и пренасочувањето од набљудуваните.",
+ "apihelp-move-param-watchlist": "Безусловно додај или отстрани ја страницата од набљудуваните, користете ги нагодувањата или не ги менувајте набљудуваните.",
+ "apihelp-move-param-ignorewarnings": "Занемари предупредувања.",
+ "apihelp-move-example-move": "Премести го „Лош наслов“ на „Добар наслов“, неоставајќи пренасочување",
+ "apihelp-opensearch-description": "Пребарување на викито со протоколот OpenSearch.",
+ "apihelp-opensearch-param-search": "Низа за пребарување.",
+ "apihelp-opensearch-param-limit": "Максималниот број на резултати за прикажување.",
+ "apihelp-opensearch-param-namespace": "Именски простори за пребарување.",
+ "apihelp-opensearch-param-suggest": "Не прави ништо ако [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] е неточно.",
+ "apihelp-opensearch-param-redirects": "Како да се работи со пренасочувања:\n;return: Дај го самото пренасочување.\n;resolve: Дај ја целната страница. Може да даде помалку од $1limit резултати.\nОд историски причини, по основно е „return“ за $1format=json и „resolve“ за други формати.",
+ "apihelp-opensearch-param-format": "Формат на изводот.",
+ "apihelp-opensearch-example-te": "Најди страници што почнуваат со „Те“",
+ "apihelp-options-description": "Смени ги нагодувањата на тековниот корисник.\n\nМожат да се зададат само можностите заведени во јадрото или во едно од воспоставените додатоци, или пак можности со клуч кој ја има претставката „userjs-“ (предвиден за употреба од кориснички скрипти).",
+ "apihelp-options-param-reset": "Ги враќа поставките по основно.",
+ "apihelp-options-param-resetkinds": "Писок на типови можности за повраток кога е зададена можноста „$1reset“.",
+ "apihelp-options-param-change": "Список на промени во форматот name=value (на пр. skin=vector). Вредностите не треба да содржат исправени црти. Ако не зададете вредност (дури ни знак за равенство), на пр., можност|другаможност|..., ќе биде зададена вредноста на можноста по основно.",
+ "apihelp-options-param-optionname": "Назив на можноста што треба да ѝ се зададе на вредноста дадена од „$1optionvalue“.",
+ "apihelp-options-param-optionvalue": "Вредноста на можноста укажана од „$1optionnam“. Може да содржи исправени црти.",
+ "apihelp-options-example-reset": "Врати ги сите поставки по основно",
+ "apihelp-options-example-change": "Смени ги поставките „skinЗ“ и „hideminor“",
+ "apihelp-options-example-complex": "Врати ги сите нагодувања по основно, а потоа задај ги „skin“ и „nickname“",
+ "apihelp-paraminfo-description": "Набави информации за извршнички (API) модули.",
+ "apihelp-paraminfo-param-modules": "Список на називи на модули (вредности на параметрите action= и format=, или пак „main“). Може да се укажат подмодули со „+“.",
+ "apihelp-paraminfo-param-helpformat": "Формат на помошните низи.",
+ "apihelp-paraminfo-param-querymodules": "Список на називи на модули за барања (вредност на параметарот prop=, meta= или list=). Користете го „$1modules=query+foo“ наместо „$1querymodules=foo“.",
+ "apihelp-paraminfo-param-mainmodule": "Добави информации и за главниот (врховен) модул. Користете го „$1modules=main“ наместо тоа.",
+ "apihelp-paraminfo-param-pagesetmodule": "Дај ги сите информации и за модулот на збирот страници (укажувајќи titles= и сродни).",
+ "apihelp-paraminfo-param-formatmodules": "Список на називи на форматни модули (вредностза параметарот format=). Наместо тоа, користете го „$1modules“.",
+ "apihelp-parse-param-summary": "Опис за расчленување.",
+ "apihelp-parse-param-preview": "Расчлени во прегледен режим.",
+ "apihelp-parse-param-sectionpreview": "Расчлени во прегледен режим на поднасловот (го овозможува и прегледниот режим).",
+ "apihelp-parse-param-disabletoc": "Изземи го преглед на содржината во изводеот.",
+ "apihelp-parse-param-contentformat": "Формат на серијализацијата на содржината во вносниот текст. Важи само кога се користи со $1text.",
+ "apihelp-parse-example-page": "Расчлени страница.",
+ "apihelp-parse-example-text": "Расчлени викитекст.",
+ "apihelp-parse-example-texttitle": "Расчлени страница, укажувајќи го насловот на страницата.",
+ "apihelp-parse-example-summary": "Расчлени опис.",
+ "apihelp-patrol-description": "Испатролирај страница или ревизија.",
+ "apihelp-patrol-param-rcid": "Назнака на спорешните промени за патролирање.",
+ "apihelp-patrol-param-revid": "Назнака на преработката за патролирање.",
+ "apihelp-patrol-example-rcid": "Испатролирај скорешна промена",
+ "apihelp-patrol-example-revid": "Патролирај праработка",
+ "apihelp-protect-description": "Смени го степенот на заштита на страница.",
+ "apihelp-protect-param-title": "Наслов на страница што се (од)заштитува. Не може да се користи заедно со $1pageid.",
+ "apihelp-protect-param-pageid": "Назнака на страница што се (од)заштитува. Не може да се користи заедно со $1title.",
+ "apihelp-protect-param-reason": "Причиина за (од)заштитување",
+ "apihelp-protect-example-protect": "Заштити страница",
+ "apihelp-purge-param-forcelinkupdate": "Поднови ги табелите со врски.",
+ "apihelp-purge-example-simple": "Превчитај ги „Главна страница“ и „Извршник“",
+ "apihelp-query-param-list": "Кои списоци да се набават.",
+ "apihelp-query-param-meta": "Кои метаподатоци да се набават.",
+ "apihelp-query+allcategories-description": "Наброј ги сите категории.",
+ "apihelp-query+allcategories-param-from": "Од која категорија да почне набројувањето.",
+ "apihelp-query+allcategories-param-to": "На која категорија да запре набројувањето.",
+ "apihelp-query+allcategories-param-dir": "Насока на подредувањето.",
+ "apihelp-query+alldeletedrevisions-param-from": "Почни го исписот од овој наслов.",
+ "apihelp-query+alldeletedrevisions-param-to": "Запри го исписот на овој наслов.",
+ "apihelp-query+alldeletedrevisions-example-user": "Список на последните 50 избришани придонеси на Корисник:Пример",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Список на последните 50 избришани преработки во главниот именски простор",
+ "apihelp-query+allimages-example-B": "Прикажи список на податотеки што почнуваат со буквата „Б“",
+ "apihelp-query+allimages-example-recent": "Прикажи список на неодамна подигнати податотеки сличен на [[Special:NewFiles]]",
+ "apihelp-query+allimages-example-generator": "Прикажи информации за околу 4 податотеки што почнуваат со буквата „Т“",
+ "apihelp-query+alllinks-description": "Наброј ги сите врски што водат кон даден именски простор.",
+ "apihelp-query+alllinks-param-from": "Наслов на врската од која ќе почне набројувањето.",
+ "apihelp-query+alllinks-param-to": "Наслов на врската на која ќе запре набројувањето.",
+ "apihelp-query+alllinks-param-prefix": "Пребарај ги сите сврзани наслови што почнуваат со оваа вредност.",
+ "apihelp-query+alllinks-param-unique": "Прикажувај само различни поврзани наслови. Не може да се користи со $1prop=ids.\nКога се користи како создавач, дава целни страници наместо изворни.",
+ "apihelp-query+alllinks-param-namespace": "Именскиот простор што се набројува.",
+ "apihelp-query+alllinks-param-limit": "Колку вкупно ставки да се дадат.",
+ "apihelp-query+alllinks-param-dir": "Насока на исписот.",
+ "apihelp-query+alllinks-example-B": "Списока на наслови со врски, вклучувајќи ги отсутните, со назнаки на нивните страници, почнувајќи од Б",
+ "apihelp-query+alllinks-example-unique": "Испиши единствени наслови со врски",
+ "apihelp-query+alllinks-example-unique-generator": "Ги дава сите наслови со врски, означувајќи ги отсутните",
+ "apihelp-query+alllinks-example-generator": "Дава страници што ги содржат врските",
+ "apihelp-query+allmessages-description": "Дава пораки од ова мрежно место.",
+ "apihelp-query+allmessages-param-prop": "Кои својства да се дадат.",
+ "apihelp-query+allmessages-param-filter": "Дај само пораки со називи што ја содржат оваа низа.",
+ "apihelp-query+allmessages-param-customised": "Дај само пораки во оваа состојба на прилагоденост.",
+ "apihelp-query+allmessages-param-lang": "Дај само пораки на овој јазик.",
+ "apihelp-query+allmessages-param-from": "Дај ги пораките што почнуваат од оваа порака.",
+ "apihelp-query+allmessages-param-to": "Дај пораки што завршуваат со оваа порака.",
+ "apihelp-query+allmessages-param-title": "Назив на страницата што ќе се користи во контекст кога се расчленува порака (за можноста $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Дај пораки со оваа претставка.",
+ "apihelp-query+allmessages-example-ipb": "Прикажи ги пораките што започнуваат со „ipb-“",
+ "apihelp-query+allmessages-example-de": "Прикажи ги пораките „август“ и „главна страница“ на германски",
+ "apihelp-query+allpages-description": "Наброј ги сите страници последователно во даден именски простор.",
+ "apihelp-query+allpages-param-from": "Наслов на страницата од која ќе почне набројувањето.",
+ "apihelp-query+allpages-param-to": "Наслов на страницата на која ќе запре набројувањето.",
+ "apihelp-query+allpages-param-prefix": "Пребарај ги сите наслови на страници што почнуваат со оваа вредност.",
+ "apihelp-query+allpages-param-namespace": "Именскиот простор што се набројува.",
+ "apihelp-query+allpages-param-filterredir": "Кои страници да се испишат.",
+ "apihelp-query+allpages-param-minsize": "Ограничи на страници со барем олку бајти.",
+ "apihelp-query+allpages-param-maxsize": "Ограничи на страници со највеќе олку бајти.",
+ "apihelp-query+allpages-param-prtype": "Ограничи на само заштитени страници.",
+ "apihelp-query+backlinks-example-simple": "Прикажи врски до [[Главна страница|Главната страница]]",
+ "apihelp-query+backlinks-example-generator": "Дава информации за страниците што водат до [[Главна страница|Главната страница]]",
+ "apihelp-query+blocks-description": "Список на сите блокирани корисници и IP-адреси",
+ "apihelp-query+blocks-param-start": "Од кој датум и време да почне набројувањето.",
+ "apihelp-query+blocks-param-end": "На кој датум и време да запре набројувањето.",
+ "apihelp-query+blocks-param-ids": "Список на назнаки на блоковите за испис (незадолжително)",
+ "apihelp-query+blocks-param-users": "Список на корисници што ќе се пребаруваат (незадолжително)",
+ "apihelp-query+imageinfo-param-urlheight": "Слично на $1urlwidth.",
+ "apihelp-query+revisions-example-last5": "Дај ги последните 5 преработки на „Главна страница“",
+ "apihelp-query+revisions-example-first5": "Дај ги првите 5 преработки на „Главна страница“",
+ "apihelp-query+revisions-example-first5-after": "Дај ги првите 5 преработки на „Главна страница“ направени по 2006-05-01 (1 мај 2006 г.)",
+ "apihelp-query+revisions-example-first5-not-localhost": "Дај ги првите 5 преработки на „Главна страница“ кои не се направени од анонимниот корисник „127.0.0.1“",
+ "apihelp-query+revisions-example-first5-user": "Дај ги првите 5 преработки на „Главна страница“ кои се направени од корисникот „зададен од МедијаВики“ (MediaWiki default)",
+ "apihelp-query+search-example-simple": "Побарај „meaning“",
+ "apihelp-query+search-example-text": "Побарај го „meaning“ по текстовите",
+ "apihelp-query+search-example-generator": "Дај информации за страниците што излегуваат во резултатите од пребарувањето на „meaning“",
+ "apihelp-query+siteinfo-description": "Дај општи информации за мрежното место.",
+ "apihelp-upload-param-filename": "Целно име на податотеката.",
+ "apihelp-upload-param-comment": "Коментар при подигање. Се користи и како првичен текст на страницата за нови податотеки ако не е укажано „$1text“.",
+ "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-filekey": "Клуч на претходното подигање кое е привремено складирано.",
+ "apihelp-upload-param-sessionkey": "Исто што и $1filekey. Се одржува за назадна складност.",
+ "apihelp-upload-param-stash": "Ако е зададено, опслужувачот ќе ја стави податотеката на привремено чување наместо да го додаде во складиштето.",
+ "apihelp-upload-param-filesize": "Големина на целото подигање.",
+ "apihelp-upload-param-offset": "Зафатнина на делот во бајти.",
+ "apihelp-upload-param-chunk": "Содржина на делот.",
+ "apihelp-upload-param-async": "Направи ги работите со потенцијално големи податотеки неусогласени, кога е можно.",
+ "apihelp-upload-param-asyncdownload": "Направи го добивањето на URL-адреса неусогласено.",
+ "apihelp-upload-param-leavemessage": "Ако се користи неусогласено преземање, остави порака на страницата за разговор на корисникот ако е готово.",
+ "apihelp-upload-param-statuskey": "Дај ја состојбата на подигнатост за овој податотечен клуч (подигање по URL-адреса).",
+ "apihelp-upload-param-checkstatus": "Дај ја состојбата на подигнатост само за дадениот податотечен клуч.",
+ "apihelp-upload-example-url": "Подигни од URL-адреса",
+ "apihelp-userrights-param-userid": "Корисничка назнака.",
+ "apihelp-userrights-param-add": "Стави го корисникот во следниве групи.",
+ "apihelp-userrights-param-remove": "Отстрани го корисникот од следниве групи.",
+ "apihelp-userrights-param-reason": "Причина за промената.",
+ "apihelp-watch-example-watch": "Набљудувај ја страницата „Главна страница“",
+ "apihelp-watch-example-unwatch": "Отстрани ја страницата „Главна страница“ од набљудуваните",
+ "apihelp-watch-example-generator": "Набљудувај ги првите неколку страници во главниот именски простор",
+ "apihelp-format-example-generic": "Форматирај го резултатот од барањето во $1-формат",
+ "apihelp-dbg-description": "Давај го изводот во PHP-форматот var_export().",
+ "apihelp-dbgfm-description": "Давај го изводот во PHP-форматот var_export() (подобрен испис во HTML).",
+ "apihelp-dump-description": "Давај го изводот во PHP-форматот var_dump().",
+ "apihelp-dumpfm-description": "Давај го изводот во PHP-форматот var_dump() (подобрен испис во HTML).",
+ "apihelp-json-description": "Давај го изводот во JSON-формат.",
+ "apihelp-json-param-callback": "Ако е укажано, го обвива изводот во даден повик на функција. За безбедност, ќе се ограничат сите податоци што се однесуваат на корисниците.",
+ "apihelp-json-param-utf8": "Ако е укажано, ја ги шифрира највеќето (но не сите) не-ASCII знаци како UTF-8 наместо да ги заменува со хексадецимални изводни низи.",
+ "apihelp-jsonfm-description": "Давај го изводот во JSON-формат (подобрен испис во HTML).",
+ "apihelp-none-description": "Де давај извод.",
+ "apihelp-php-description": "Давај го изводот во серијализиран PHP-формат.",
+ "apihelp-phpfm-description": "Давај го изводот во серијализиран PHP-формат (подобрен испис во HTML).",
+ "apihelp-rawfm-description": "Давај го изводот со елементи за отстранување грешки во JSON-формат (подобрен испис во HTML).",
+ "apihelp-txt-description": "Давај го изводот во PHP-форматот print_r().",
+ "apihelp-txtfm-description": "Давај го изводот во PHP-форматот print_r() (подобрен испис во HTML).",
+ "apihelp-wddx-description": "Давај го изводот во WDDX-формат.",
+ "apihelp-wddxfm-description": "Давај го изводот во WDDX-формат (подобрен испис во HTML).",
+ "apihelp-xml-description": "Давај го изводот во XML-формат.",
+ "apihelp-xml-param-xslt": "Ако е укажано, додава &lt;xslt&gt; како стилска страница. Ова треба да е викистраница во именскиот простор МедијаВики (MediaWiki) чиј наслов завршува со „.xsl“.",
+ "apihelp-xml-param-includexmlnamespace": "Ако е укажано, додава именски простор XML.",
+ "apihelp-xmlfm-description": "Давај го изводот во XML-формат (подобрен испис во HTML).",
+ "apihelp-yaml-description": "Давај го изводот во YAML-формат.",
+ "apihelp-yamlfm-description": "Давај го изводот во YAML-формат (подобрен испис во HTML).",
+ "api-format-title": "Резултат од Извршникот на МедијаВики",
+ "api-format-prettyprint-header": "Ја гледате HTML-претставата на форматот $1. HTML е добар за отстранување на грешки, но не е погоден за употреба во извршник.\n\nУкажете го параметарот за формат за да го смените изводниот формат. За да ги видите претставите на форматот $1 вон HTML, задајте format=$2.\n\nПовеќе информации ќе најдете на [https://www.mediawiki.org/wiki/API целосната документација], или пак [[Special:ApiHelp/main|помош со извршникот]].",
+ "api-orm-param-props": "Полиња за пребарување.",
+ "api-orm-param-limit": "Макс. број на редови во изводот.",
+ "api-pageset-param-titles": "Список на наслови на кои ќе се работи",
+ "api-pageset-param-pageids": "Список на назнаки за страници на кои ќе се работи",
+ "api-pageset-param-revids": "Список на назнаки на преработки на кои ќе се работи",
+ "api-pageset-param-generator": "Дај го списокот на страници на кои ќе се работи исполнувајќи го укажаниот модул за барање.\n\n'''НАПОМЕНА:''' називите на создавачките параметри мора да ја имаат претставката „g“. Погледајте ги примерите.",
+ "api-help-title": "Помош со Извршникот на МедијаВики",
+ "api-help-lead": "Ова е самосоздадена документациска страница за извршникот на МедијаВики.\n\nДокументација и примери: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Главен модул",
+ "api-help-flag-deprecated": "Овој модул е застарен.",
+ "api-help-flag-internal": "<strong>Овој модул е внатрешен или нестабилен.</strong> Работењето може да му се промени без предупредување.",
+ "api-help-flag-readrights": "За овој модул се потребни права на читање.",
+ "api-help-flag-writerights": "За овој модул се потребни права на пишување.",
+ "api-help-flag-mustbeposted": "Овој модул прифаќа само POST-барања.",
+ "api-help-flag-generator": "Овој модул може да се користи како создавач.",
+ "api-help-parameters": "{{PLURAL:$1|Параметар|Параметри}}:",
+ "api-help-param-deprecated": "Застарен.",
+ "api-help-param-required": "Овој параметар е задолжителен.",
+ "api-help-param-list": "{{PLURAL:$1|1=Една вредност|2=Вредности (одделени со „{{!}}“)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Мора да биде празно|Може да биде празно или $2}}",
+ "api-help-param-limit": "Не се допушта повеќе од $1.",
+ "api-help-param-limit2": "Не се допушта повеќе од $1 ($2 за ботови).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Вредноста не може да изнесува|2=Вредностите не може да изнесуваат}} помалку од $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Вредноста не може да изнесува|2=Вредностите е може да изнесуваат}} повеќе од $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Вредноста мора да изнесува|2=Вредностите мораат да изнесуваат}} помеѓу $2 и $3.",
+ "api-help-param-upload": "Мора да биде објавено како податотечно подигање користејќи податоци кои се повеќеделни или од образец.",
+ "api-help-param-multi-separate": "Одделувајте ги вредностите со „|“.",
+ "api-help-param-multi-max": "Максималниот број на вредности изнесува {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} за ботови).",
+ "api-help-param-default": "По основно: $1",
+ "api-help-param-default-empty": "По основно: <span class=\"apihelp-empty\">(празно)</span>",
+ "api-help-param-token": "Шифра „$1“ добиена од [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+ "api-help-param-token-webui": "За складност, се прифаќа и шифрата што се користи за обичниот кориснички посредник.",
+ "api-help-param-disabled-in-miser-mode": "Исклучено поради [https://www.mediawiki.org/wiki/Manual:$wgMiserMode скржавиот режим].",
+ "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": "Уоптреба на повисоки ограничувања за приложни барања (бавни барања: $1; брзи барања: $2). Ограничувањата за бавни барања важат и за повеќевредносни параметри.",
+ "api-credits-header": "Признанија",
+ "api-credits": "Разработувачи на Извршникот:\n* Роан Катау (главен резработувач од септември 2007 до 2009 г.)\n* Виктор Василев\n* Брајан Тонг Мињ\n* Сем Рид\n* Јуриј Астрахан (создавач, главен разработувач од септември 2006 до септември 2007 г.)\n* Brad Jorsch (главен разработувач од 2013 г. до денес)\n\nВашите коментари, предлози и прашања испраќајте ги на mediawiki-api@lists.wikimedia.org\nа грешките пријавувајте ги на https://phabricator.wikimedia.org/."
+}
diff --git a/includes/api/i18n/ms.json b/includes/api/i18n/ms.json
new file mode 100644
index 00000000..041cf2c0
--- /dev/null
+++ b/includes/api/i18n/ms.json
@@ -0,0 +1,61 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia"
+ ]
+ },
+ "apihelp-main-param-action": "Tindakan mana untuk dilakukan.",
+ "apihelp-main-param-format": "Format output.",
+ "apihelp-main-param-uselang": "Bahasa yang hendak digunakan untuk penterjemahan mesej. Senarai kod boleh diperoleh dari [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]], ataupun menyatakan \"user\" untuk menggunakan bahasa kegemaran pengguna semasa.",
+ "apihelp-expandtemplates-example-simple": "Perluaskan \"<nowiki>{{Project:Sandbox}}</nowiki>\" wikiteks",
+ "apihelp-help-param-helpformat": "Format output bantuan.",
+ "apihelp-help-example-main": "Bantuan untuk modul utama",
+ "apihelp-help-example-recursive": "Segala bantuan dalam satu halaman",
+ "apihelp-help-example-help": "Bantuan untuk modul bantuan",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Menambahkan jenis MIME thumbnail imej (memerlukan url dan param $1urlwidth).",
+ "apihelp-query+prefixsearch-param-offset": "Bilangan hasil untuk dilangkau.",
+ "apihelp-query+usercontribs-param-show": "Hanya paparkan item-item yang mematuhi kriteria ini, cth. suntingan selain yang kecil sahaja: $2show=!minor.\n\nJika ditetapkannya $2show=patrolled atau $2show=!patrolled, maka semakan-semakan yang lebih lama daripada [https://www.mediawiki.org/wiki/Manual:$wgRCMaxAge $wgRCMaxAge] ($1 saat) tidak akan dipaparkan.",
+ "apihelp-userrights-param-userid": "ID pengguna.",
+ "apihelp-dbgfm-description": "Data output dalam format var_export() PHP (''pretty-print'' dalam HTML).",
+ "apihelp-dump-description": "Output data dalam format var_dump() PHP.",
+ "apihelp-dumpfm-description": "Data output dalam format var_dump() PHP (''pretty-print'' dalam HTML).",
+ "apihelp-json-description": "Data output dalam format JSON.",
+ "apihelp-json-param-utf8": "Jika dinyatakan, mengekodkan kenanyakan (tetapi bukan semua) aksara bukan ASCII sebagai UTF-8 daripada menggantikannya dengan jujukan lepasan perenambelasan.",
+ "apihelp-jsonfm-description": "Output data dalam format JSON (''pretty-print'' dalam HTML).",
+ "apihelp-php-description": "Data output dalam format PHP bersiri.",
+ "apihelp-txt-description": "Data output dalam format print_r() PHP.",
+ "apihelp-txtfm-description": "Data output dalam format print_r() PHP (''pretty-print'' dalam HTML).",
+ "apihelp-wddx-description": "Data output dalam format WDDX.",
+ "apihelp-wddxfm-description": "Output data dalam format WDDX (''pretty-print'' dalam HTML).",
+ "apihelp-xml-description": "Data output dalam format XML.",
+ "apihelp-xmlfm-description": "Data output dalam format XML (''pretty-print'' dalam HTML).",
+ "apihelp-yaml-description": "Data output dalam format YAML.",
+ "apihelp-yamlfm-description": "Output data dalam format YAML (''pretty-print'' dalam HTML).",
+ "api-format-title": "Hasil API MediaWiki",
+ "api-format-prettyprint-header": "Anda sedang menyaksikan representasi format $1 dalam bentuk HTML. HTML bagus untuk menyah pepijat, tetapi tidak sesuai untuk kegunaan aplikasi.\n\nNyatakan parameter format untuk mengubah format outputnya. Untuk melihat representasi format $1 yang bukan HTML, tetapkan format=$2.\n\nSila rujuk [https://www.mediawiki.org/wiki/API dokumentasi lengkapnya] ataupun [[Special:ApiHelp/main|bantuan API]] untuk keterangan lanjut.",
+ "api-help-title": "Bantuan API MediaWiki",
+ "api-help-lead": "Ini merupakan laman dokumentasi MediaWiki API yang dihasilkan secara automatik.\n\nDokumentasi dan contoh-contoh: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Modul utama",
+ "api-help-flag-deprecated": "Modul ini sudah lapuk.",
+ "api-help-flag-internal": "<strong>Modul ini dalaman atau tidak stabil.</strong> Operasinya boleh berubah tanpa amaran.",
+ "api-help-flag-readrights": "Modul ini memerlukan hak membaca.",
+ "api-help-flag-writerights": "Modul ini memerlukan hak menulis.",
+ "api-help-flag-mustbeposted": "Modul ini menerima permohonan POST sahaja.",
+ "api-help-flag-generator": "Modul ini boleh digunakan sebagai penjana.",
+ "api-help-parameters": "{{PLURAL:$1|Parameter}}:",
+ "api-help-param-deprecated": "Lapuk.",
+ "api-help-param-required": "Parameter ini diwajibkan.",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Mestilah kosong|Bolehlah kosong atau $2}}",
+ "api-help-param-limit2": "Dibenarkannya tidak lebih daripada $1 ($2 untuk bot).",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Nilainya|2=Nilai-nilainya}} mesti tidak melebihi $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Nilainya|2=Nilai-nilainya}} mestilah antara $2 hingga $3.",
+ "api-help-param-multi-separate": "Asingkan nilai-nilai dengan \"|\".",
+ "api-help-param-multi-max": "Bilangan nilai maksimum adalah {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} untuk bot).",
+ "api-help-param-default": "Asal: $1",
+ "api-help-param-default-empty": "Asal: <span class=\"apihelp-empty\">(kosong)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(tiada keterangan)</span>",
+ "api-help-examples": "{{PLURAL:$1|Contoh|Contoh-contoh}}:",
+ "api-help-permissions": "{{PLURAL:$1|Keizinan}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Diberikan kepada}}: $2",
+ "api-credits-header": "Kredit"
+}
diff --git a/includes/api/i18n/nap.json b/includes/api/i18n/nap.json
new file mode 100644
index 00000000..a285b04a
--- /dev/null
+++ b/includes/api/i18n/nap.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chelin"
+ ]
+ },
+ "apihelp-block-description": "Blocca n'utente.",
+ "apihelp-createaccount-param-name": "Nomme utente.",
+ "apihelp-delete-description": "Scancella 'na paggena."
+}
diff --git a/includes/api/i18n/nb.json b/includes/api/i18n/nb.json
new file mode 100644
index 00000000..6dcba40a
--- /dev/null
+++ b/includes/api/i18n/nb.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jeblad"
+ ]
+ },
+ "apihelp-main-param-action": "Hvilken handling skal utføres",
+ "apihelp-main-param-format": "Resultatets format.",
+ "apihelp-main-param-servedby": "Inkluder navnet på tjeneren som utførte forespørselen i resultatene.",
+ "apihelp-main-param-curtimestamp": "Inkluder det nåværende tidsmerket i resultatet.",
+ "apihelp-dbg-description": "Resultatdata i PHP's var_export() format.",
+ "apihelp-dbgfm-description": "Resultatdata i PHP's var_export() format (pen utskrift i HTML).",
+ "apihelp-dump-description": "Resultatdata i PHP's var_export() format.",
+ "apihelp-dumpfm-description": "Resultatdata i PHP's var_export() format (pen utskrift i HTML).",
+ "apihelp-json-description": "Resultatdata i JSON-format.",
+ "apihelp-none-description": "Ingen resultat.",
+ "api-help-flag-readrights": "Denne modulen krever lesetilgang.",
+ "api-help-flag-writerights": "Denne modulen krever skrivetilgang.",
+ "api-help-flag-mustbeposted": "Denne modulen aksepterer bare POST forespørsler.",
+ "api-help-flag-generator": "Denne modulen kan brukes som en generator.",
+ "api-help-parameters": "{{PLURAL:$1|Parameter|Parametre}}:",
+ "api-help-param-deprecated": "Utgått.",
+ "api-help-param-required": "Denne parameteren er påkrevd."
+}
diff --git a/includes/api/i18n/nds.json b/includes/api/i18n/nds.json
new file mode 100644
index 00000000..3f7cb12e
--- /dev/null
+++ b/includes/api/i18n/nds.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Servien"
+ ]
+ },
+ "apihelp-login-param-password": "Passwoort."
+}
diff --git a/includes/api/i18n/nl.json b/includes/api/i18n/nl.json
new file mode 100644
index 00000000..72816b99
--- /dev/null
+++ b/includes/api/i18n/nl.json
@@ -0,0 +1,61 @@
+{
+ "@metadata": {
+ "authors": [
+ "Siebrand",
+ "Sjoerddebruin",
+ "Robin0van0der0vliet",
+ "Mar(c)",
+ "Valhallasw",
+ "Sikjes",
+ "Macofe",
+ "SPQRobin"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentatie]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-maillijst]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aankondigingen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & verzoeken]\n</div>\n<strong>Status:</strong> Alle functies die op deze pagina worden weergegeven horen te werken. Aan de API wordt actief gewerkt, en deze kan gewijzigd worden. Abonneer u op de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over aanpassingen.\n\n<strong>Foutieve verzoeken:</strong> als de API foutieve verzoeken ontvangt, wordt er geantwoord met een HTTP-header met de sleutel \"MediaWiki-API-Error\" en daarna worden de waarde van de header en de foutcode op dezelfde waarde ingesteld. Zie [[mw:API:Errors_and_warnings|API: Errors and warnings]] voor meer informatie.",
+ "apihelp-main-param-action": "Welke handeling uit te voeren.",
+ "apihelp-main-param-format": "De opmaak van de uitvoer.",
+ "apihelp-main-param-maxlag": "De maximale vertraging kan gebruikt worden als MediaWiki is geïnstalleerd op een databasecluster die gebruik maakt van replicatie. Om te voorkomen dat handelingen nog meer databasereplicatievertraging veroorzaken, kan deze parameter er voor zorgen dat de client wacht totdat de replicatievertraging lager is dan de aangegeven waarde. In het geval van buitensporige vertraging, wordt de foutcode <samp>maxlag</samp> teruggegeven met een bericht als <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Zie [[mw:Manual:Maxlag_parameter|Handboek: Maxlag parameter]] voor mee informatie.",
+ "apihelp-main-param-smaxage": "Stelt de header \"<code>s-maxage</code>\" in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+ "apihelp-main-param-maxage": "Stelt de header \"<code>max-age</code>\" in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
+ "apihelp-main-param-assert": "Controleer of de gebruiker is aangemeld als <kbd>user</kbd> is meegegeven, en of de gebruiker het robotgebruikersrecht heeft als <kbd>bot</kbd> is meegegeven.",
+ "apihelp-main-param-requestid": "Elke waarde die hier gegeven wordt, wordt aan het antwoord toegevoegd. Dit kan gebruikt worden om verzoeken te onderscheiden.",
+ "apihelp-main-param-servedby": "Voeg de hostnaam van de server die de aanvraag heeft afgehandeld toe aan het antwoord.",
+ "apihelp-main-param-curtimestamp": "Huidige tijd aan het antwoord toevoegen.",
+ "apihelp-block-description": "Gebruiker blokkeren.",
+ "apihelp-block-param-reason": "Reden voor blokkade.",
+ "apihelp-block-param-autoblock": "Blokkeer automatisch het laatst gebruikte IP-adres en ieder volgend IP-adres van waaruit ze proberen in te loggen.",
+ "apihelp-block-param-reblock": "De huidige blokkade aanpassen als de gebruiker al geblokkeerd is.",
+ "apihelp-createaccount-param-name": "Gebruikersnaam.",
+ "apihelp-delete-description": "Verwijder een pagina.",
+ "apihelp-delete-example-simple": "Verwijder <kbd>Hoofdpagina</kbd>.",
+ "apihelp-delete-example-reason": "Verwijder <kbd>Hoofdpagina</kbd> met als reden <kbd>Voorbereiding voor verplaatsing</kbd>.",
+ "apihelp-disabled-description": "Deze module is uitgeschakeld.",
+ "apihelp-edit-param-minor": "Kleine bewerking.",
+ "apihelp-edit-param-notminor": "Geen kleine bewerking.",
+ "apihelp-edit-param-bot": "Markeer deze bewerking als bot.",
+ "apihelp-edit-param-createonly": "Bewerk de pagina niet als die al bestaat.",
+ "apihelp-edit-param-nocreate": "Geef een foutmelding als de pagina niet bestaat.",
+ "apihelp-edit-param-watch": "Voeg de pagina toe aan je volglijst.",
+ "apihelp-edit-param-unwatch": "Verwijder de pagina van je volglijst.",
+ "apihelp-edit-example-edit": "Pagina bewerken",
+ "apihelp-emailuser-description": "Gebruiker e-mailen.",
+ "apihelp-emailuser-param-target": "Gebruiker naar wie de e-mail moet worden gestuurd.",
+ "apihelp-emailuser-param-subject": "Onderwerpkoptekst.",
+ "apihelp-emailuser-param-text": "E-mailtekst.",
+ "apihelp-emailuser-param-ccme": "Stuur mij een kopie van deze e-mail.",
+ "apihelp-expandtemplates-param-title": "Paginanaam.",
+ "apihelp-feedcontributions-param-year": "Van jaar (en eerder).",
+ "apihelp-feedcontributions-param-month": "Van maand (en eerder).",
+ "apihelp-login-param-name": "Gebruikersnaam.",
+ "apihelp-login-param-password": "Wachtwoord.",
+ "apihelp-login-param-domain": "Domein (optioneel).",
+ "apihelp-login-example-login": "Aanmelden",
+ "apihelp-move-description": "Pagina hernoemen.",
+ "api-help-flag-readrights": "Voor deze module zijn leesrechten nodig.",
+ "api-help-flag-writerights": "Voor deze module zijn schrijfrechten nodig.",
+ "api-help-parameters": "{{PLURAL:$1|Parameter|Parameters}}:",
+ "api-help-param-deprecated": "Verouderd.",
+ "api-help-param-default": "Standaard: $1",
+ "api-credits-header": "Vermeldingen",
+ "api-credits": "API-ontwikkelaars:\n* Roan Kattouw (hoofdontwikkelaar september 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (oorspronkelijke ontwikkelaar, hoofdontwikkelaar september 2006 – september 2007)\n* Brad Jorsch (hoofdontwikkelaar 2013 – heden)\n\nStuur uw opmerkingen, suggesties en vragen naar mediawiki-api@lists.wikimedia.org\nof maak een melding aan op https://phabricator.wikimedia.org/."
+}
diff --git a/includes/api/i18n/oc.json b/includes/api/i18n/oc.json
new file mode 100644
index 00000000..dc12b663
--- /dev/null
+++ b/includes/api/i18n/oc.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "apihelp-main-param-action": "Quina accion cal efectuar.",
+ "apihelp-main-param-format": "Lo format de sortida.",
+ "apihelp-block-description": "Blocar un utilizaire.",
+ "apihelp-block-param-reason": "Motiu del blocatge.",
+ "apihelp-block-param-nocreate": "Empachar la creacion de compte.",
+ "apihelp-checktoken-param-token": "Geton de testar.",
+ "apihelp-createaccount-param-name": "Nom d'utilizaire.",
+ "apihelp-delete-example-simple": "Suprimir la <kbd>Pagina principala</kbd>.",
+ "apihelp-edit-param-text": "Contengut de la pagina.",
+ "apihelp-edit-param-minor": "Modificacion menora."
+}
diff --git a/includes/api/i18n/pa.json b/includes/api/i18n/pa.json
new file mode 100644
index 00000000..96c86941
--- /dev/null
+++ b/includes/api/i18n/pa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Babanwalia"
+ ]
+ },
+ "apihelp-help-example-recursive": "ਇੱਕੋ ਸਫ਼ੇ 'ਤੇ ਸਾਰੀ ਮਦਦ"
+}
diff --git a/includes/api/i18n/pam.json b/includes/api/i18n/pam.json
new file mode 100644
index 00000000..c82d88fc
--- /dev/null
+++ b/includes/api/i18n/pam.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Leeheonjin"
+ ]
+ },
+ "apihelp-delete-example-simple": "Buran ya ing <kbd>Pun Bulung</kbd>.",
+ "apihelp-edit-example-edit": "Alilan ya ing bulung.",
+ "apihelp-feedrecentchanges-example-simple": "Pakit deng bayung mengayalili.",
+ "apihelp-help-example-main": "Saup para king pun modyul.",
+ "apihelp-help-example-recursive": "Deng eganaganang saup king metung a bulung.",
+ "apihelp-login-example-login": "Magpatala (login)",
+ "apihelp-patrol-example-rcid": "Magbante king bayung mengayalili.",
+ "apihelp-patrol-example-revid": "Banten ing meyalili.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "E malyaring gamitan a yating <var>$3user</var>.",
+ "apihelp-query+allpages-example-B": "Ipakit ing talaan da reng bulung a mangumpisa king titik <kbd>B</kbd>.",
+ "apihelp-query+categoryinfo-example-simple": "Kumuwa ning impormasyun tungkul king <kbd>Kategorya:Foo</kbd> at <kbd>Kategorya:Bar</kbd>.",
+ "apihelp-query+deletedrevs-example-mode2": "Ilista la reng 50 binurang kontribusyun nang <kbd>Bob</kbd> (mode 2).",
+ "apihelp-query+deletedrevs-example-mode3-talk": "Ilista mu la reng minunang 50 meburang bulung king {{ns:talk}} lagyu-espasyu (mode 3)",
+ "apihelp-query+duplicatefiles-example-generated": "Mayintun para kareng duplika da reng egana-ganang simpan (file).",
+ "apihelp-query+extlinks-example-simple": "Kumuwa ning lista da reng suglung paluwal king <kbd>Pun Bulung</kbd>.",
+ "apihelp-query+exturlusage-example-simple": "Pakit la reng bulung a makasuglung king <kbd>http://www.mediawiki.org</kbd>.",
+ "apihelp-query+imageusage-example-simple": "Ipakit la reng bulung a gagamit ning [[:Simpan:Albert Einstein Head.jpg]].",
+ "apihelp-query+langbacklinks-example-simple": "Kunan deng bulung a maka-suglung king [[:fr:Test]].",
+ "apihelp-query+protectedtitles-example-generator": "Pantunan deng suglung king maka-protektang titulu king pun lagyu-espasyu.",
+ "apihelp-query+recentchanges-example-simple": "Talaan da reng bayung mengayalili.",
+ "apihelp-query+search-example-text": "Pantunan mo la reng tekstu para king <kbd>kabaldugan</kbd>",
+ "apihelp-query+siteinfo-example-simple": "Kung ing impormasyun ning sityu.",
+ "apihelp-upload-example-url": "Maglulan (upload) ibat king URL.",
+ "apihelp-watch-example-unwatch": "E banten ing bulung <kbd>Pun Bulung</kbd>"
+}
diff --git a/includes/api/i18n/pl.json b/includes/api/i18n/pl.json
new file mode 100644
index 00000000..1a5c8975
--- /dev/null
+++ b/includes/api/i18n/pl.json
@@ -0,0 +1,117 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrumps",
+ "Py64",
+ "Pan Cube",
+ "Alan ffm",
+ "Devwebtel",
+ "Macofe",
+ "Pio387",
+ "Peter Bowman",
+ "Darellur"
+ ]
+ },
+ "apihelp-main-param-action": "Wybierz akcję do wykonania.",
+ "apihelp-main-param-format": "Format danych wyjściowych.",
+ "apihelp-main-param-maxlag": "Maksymalne opóźnienie mogą być używane kiedy MediaWiki jest zainstalowana w klastrze zreplikowanej bazy danych. By zapisać działania powodujące większe opóźnienie replikacji, ten parametr może wymusić czekanie u klienta, dopóki opóźnienie replikacji jest mniejsze niż określona wartość. W przypadku nadmiernego opóźnienia, kod błędu <samp>maxlag</samp> jest zwracany z wiadomością jak <samp>Oczekiwanie na $host: $lag sekund opóźnienia</samp>.<br />Zobacz [[mw:Manual:Maxlag_parameter|Podręcznik:Parametr Maxlag]] by uzyskać więcej informacji.",
+ "apihelp-main-param-assert": "Sprawdź, czy użytkownik jest zalogowany jeżeli jest ustawiony na <kbd>użytkownik</kbd>, lub ma prawa bota jeśli <kbd>bot</kbd>.",
+ "apihelp-block-description": "Zablokuj użytkownika.",
+ "apihelp-block-param-user": "Nazwa użytkownika, adres IP lub zakres adresów IP, które chcesz zablokować.",
+ "apihelp-block-param-reason": "Powód blokady.",
+ "apihelp-block-param-nocreate": "Zapobiegnij utworzeniu konta.",
+ "apihelp-block-param-watchuser": "Obserwuj stronę użytkownika i jego IP oraz jego stronę dyskusji.",
+ "apihelp-block-example-ip-simple": "Zablokuj IP <kbd>192.0.2.5</kbd> na 3 dni za <kbd>Pierwszy atak</kbd>.",
+ "apihelp-createaccount-param-name": "Nazwa użytkownika",
+ "apihelp-delete-description": "Usuń stronę.",
+ "apihelp-delete-param-watch": "Dodaj stronę do twojej listy obserwowanych.",
+ "apihelp-delete-param-unwatch": "Usuń stronę z twojej listy obserwowanych.",
+ "apihelp-delete-example-simple": "Usuń stronę główną",
+ "apihelp-disabled-description": "Ten moduł został wyłączony.",
+ "apihelp-edit-description": "Utwórz i edytuj strony.;",
+ "apihelp-edit-param-text": "Zawartość strony.",
+ "apihelp-edit-param-minor": "Drobna zmiana.",
+ "apihelp-edit-param-notminor": "Nie drobna zmiana.",
+ "apihelp-edit-param-bot": "Oznacz tę edycję jako edycję bota.",
+ "apihelp-edit-param-watch": "Dodaj stronę do aktualnej listy obserwacji użytkownika.",
+ "apihelp-edit-param-unwatch": "Usuń stronę z aktualnej listy obserwacji użytkownika.",
+ "apihelp-edit-example-edit": "Edytuj stronę",
+ "apihelp-emailuser-description": "Wyślij e‐mail do użytkownika.",
+ "apihelp-feedrecentchanges-example-simple": "Pokaż ostatnie zmiany.",
+ "apihelp-help-description": "Wyświetl pomoc dla określonych modułów.",
+ "apihelp-help-param-modules": "Moduły do wyświetlenia pomocy dla (wartości <var>action</var> i <var>format</var> parametry, lub <kbd>main</kbd>). Może określić podmoduły z <kbd>+</kbd>.",
+ "apihelp-help-param-recursivesubmodules": "Zawiera pomoc dla podmodułów rekursywnie.",
+ "apihelp-help-example-main": "Pomoc dla modułu głównego",
+ "apihelp-help-example-recursive": "Cała pomoc na jednej stronie.",
+ "apihelp-help-example-help": "Pomoc dla modułu pomocy",
+ "apihelp-login-param-name": "Nazwa użytkownika.",
+ "apihelp-login-param-password": "Hasło.",
+ "apihelp-login-example-login": "Zaloguj się",
+ "apihelp-managetags-param-ignorewarnings": "Czy zignorować ostrzeżenia, które pojawiają się w trakcie operacji.",
+ "apihelp-move-description": "Przenieś stronę.",
+ "apihelp-move-param-reason": "Powód zmiany nazwy.",
+ "apihelp-move-param-ignorewarnings": "Ignoruj wszystkie ostrzeżenia.",
+ "apihelp-protect-example-protect": "Zabezpiecz stronę",
+ "apihelp-query+allpages-example-B": "Pokaż listę stron rozpoczynających się na literę <kbd>B</kbd>.",
+ "apihelp-query+filearchive-example-simple": "Pokaż listę wszystkich usuniętych plików.",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Dodaje kanoniczny tytuł pliku.",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias rozmiaru.",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "Dodaje typ MIME pliku.",
+ "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+prefixsearch-param-offset": "Liczba wyników do pominięcia.",
+ "apihelp-query+recentchanges-example-simple": "Lista ostatnich zmian.",
+ "apihelp-query+search-description": "Wykonaj wyszukiwanie pełnotekstowe.",
+ "apihelp-query+watchlist-param-excludeuser": "Nie wyświetlaj zmian wykonanych przez tego użytkownika.",
+ "apihelp-unblock-param-reason": "Powód odblokowania.",
+ "apihelp-undelete-param-reason": "Powód przywracania.",
+ "apihelp-upload-param-filename": "Nazwa pliku docelowego.",
+ "apihelp-userrights-param-user": "Nazwa użytkownika.",
+ "apihelp-userrights-param-reason": "Powód zmiany.",
+ "apihelp-dbg-description": "Dane wyjściowe w formacie <code>var_export()</code> (funkcji PHP).",
+ "apihelp-dbgfm-description": "Dane wyjściowe w formacie <code>var_export()</code> (funkcji PHP) (prawidłowo wyświetlane w HTML).",
+ "apihelp-dump-description": "Dane wyjściowe w formacie <code>var_dump()</code> (funkcji PHP).",
+ "apihelp-dumpfm-description": "Dane wyjściowe w formacie <code>var_dump()</code> (funkcji PHP) (prawidłowo wyświetlane w HTML).",
+ "apihelp-json-description": "Dane wyjściowe w formacie JSON.",
+ "apihelp-jsonfm-description": "Dane wyjściowe w formacie JSON (prawidłowo wyświetlane w HTML).",
+ "apihelp-php-description": "Dane wyjściowe w serializowany formacie PHP.",
+ "apihelp-phpfm-description": "Dane wyjściowe w serializowanym formacie PHP (prawidłowo wyświetlane w HTML).",
+ "apihelp-txt-description": "Dane wyjściowe w formacie <code>print_r()</code> (funkcji PHP).",
+ "apihelp-txtfm-description": "Dane wyjściowe w formacie <code>print_r()</code> (funkcji PHP) (prawidłowo wyświetlane w HTML).",
+ "apihelp-wddx-description": "Dane wyjściowe w formacie WDDX.",
+ "apihelp-wddxfm-description": "Dane wyjściowe w formacie WDDX (prawidłowo wyświetlane w HTML).",
+ "apihelp-xml-description": "Dane wyjściowe w formacie XML.",
+ "apihelp-xml-param-xslt": "Jeśli określony, dodaje &lt;xslt&gt; jako arkusz styli. Powinna to być strona wiki w przestrzeni nazw MediaWiki, której nazwy stron kończą się na \".xsl\".",
+ "apihelp-xmlfm-description": "Dane wyjściowe w formacie XML (prawidłowo wyświetlane w HTML).",
+ "apihelp-yaml-description": "Dane wyjściowe w formacie YAML.",
+ "apihelp-yamlfm-description": "Dane wyjściowe w formacie YAML (prawidłowo wyświetlane w HTML).",
+ "api-format-title": "Wynik MediaWiki API",
+ "api-help-title": "Pomoc MediaWiki API",
+ "api-help-lead": "To jest automatycznie wygenerowana strona dokumentacji MediaWiki API.\nDokumentacja i przykłady: https://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "Moduł główny",
+ "api-help-flag-deprecated": "Ten moduł jest przestarzały.",
+ "api-help-flag-internal": "<strong>Ten moduł jest wewnętrzny lub niestabilny.</strong> Jego działanie może się zmienić bez uprzedzenia.",
+ "api-help-flag-readrights": "Ten moduł wymaga praw odczytu.",
+ "api-help-flag-writerights": "Ten moduł wymaga praw zapisu.",
+ "api-help-flag-mustbeposted": "Ten moduł akceptuje tylko żądania POST.",
+ "api-help-flag-generator": "Ten moduł może być użyty jako generator.",
+ "api-help-parameters": "{{PLURAL:$1|Parametr|Parametry}}:",
+ "api-help-param-deprecated": "Przestarzałe.",
+ "api-help-param-required": "Ten parametr jest wymagany.",
+ "api-help-param-list": "{{PLURAL:$1|1=Jedna wartość|2=Wartości (oddziel za pomocą <kbd>{{!}}</kbd>)}}: $2",
+ "api-help-param-limit": "Nie więcej niż $1 dozwolone.",
+ "api-help-param-limit2": "Nie więcej niż $1 ($2 dla botów) dozwolone.",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=Wartość|2=Wartości}} musza być mniejsze niż $2.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być nie większa niż $3.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być pomiędzy $2 a $3.",
+ "api-help-param-multi-separate": "Oddziel wartości za pomocą <kbd>|</kbd>.",
+ "api-help-param-multi-max": "Maksymalna ilość wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
+ "api-help-param-default": "Domyślnie: $1",
+ "api-help-param-default-empty": "Domyślnie: <span class=\"apihelp-empty\">(puste)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez opisu)</span>",
+ "api-help-examples": "{{PLURAL:$1|Przykład|Przykłady}}:",
+ "api-help-permissions": "{{PLURAL:$2|Uprawnienie|Uprawnienia}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Przydzielone dla}}: $2",
+ "api-credits-header": "Twórcy",
+ "api-credits": "Deweloperzy API:\n* Roan Kattouw (główny programista wrzesień 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (twórca, główny programista wrzesień 2006–wrzesień 2007)\n* Brad Jorsch (główny programista 2013–obecnie)\n\nProsimy wysyłać komentarze, sugestie i pytania do mediawiki-api@lists.wikimedia.org\nlub zgłoś błąd na https://phabricator.wikimedia.org/."
+}
diff --git a/includes/api/i18n/ps.json b/includes/api/i18n/ps.json
new file mode 100644
index 00000000..b9399024
--- /dev/null
+++ b/includes/api/i18n/ps.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "apihelp-block-description": "په يو کارن بنديز لگول.",
+ "apihelp-block-param-user": "کارن-نوم، IP پته، يا IP سيمې باندې بنديز لگول.",
+ "apihelp-block-param-reason": "د بنديز سبب.",
+ "apihelp-createaccount-param-name": "کارن-نوم.",
+ "apihelp-delete-description": "يو مخ ړنگول.",
+ "apihelp-edit-param-text": "مخ مېنځپانگه.",
+ "apihelp-edit-example-edit": "يو مخ سمول.",
+ "apihelp-emailuser-description": "کارن ته برېښليک لېږل.",
+ "apihelp-expandtemplates-param-title": "د مخ سرليک.",
+ "apihelp-login-param-name": "کارن نوم.",
+ "apihelp-login-param-password": "پټنوم.",
+ "apihelp-login-param-domain": "شپول (اختياري).",
+ "apihelp-login-example-login": "ننوتل.",
+ "apihelp-move-description": "يو مخ لېږدول.",
+ "apihelp-query+search-example-simple": "د <kbd>مانا</kbd> پلټل.",
+ "apihelp-query+search-example-text": "د <kbd>مانا</kbd> لپاره متنونه پلټل.",
+ "apihelp-userrights-param-user": "کارن نوم.",
+ "apihelp-userrights-param-userid": "کارن پېژند.",
+ "api-help-param-default": "تلواليز: $1",
+ "api-help-param-default-empty": "تلواليز: <span class=\"apihelp-empty\">(تش)</span>",
+ "api-help-examples": "{{PLURAL:$1|بېلگه|بېلگې}}:",
+ "api-help-permissions": "{{PLURAL:$1|پرېښه|پرېښې}}:"
+}
diff --git a/includes/api/i18n/pt-br.json b/includes/api/i18n/pt-br.json
new file mode 100644
index 00000000..5af806d0
--- /dev/null
+++ b/includes/api/i18n/pt-br.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fasouzafreitas"
+ ]
+ },
+ "apihelp-main-param-requestid": "Qualquer valor dado aqui será incluído na resposta. Pode ser usado para distinguir requisições.",
+ "apihelp-block-description": "Bloquear um usuário",
+ "apihelp-block-param-user": "Nome de usuário, endereço IP ou faixa de IP para bloquear.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas pelo usuário atual.",
+ "apihelp-feedrecentchanges-example-30days": "Mostrar as alterações recentes por 30 dias.",
+ "apihelp-move-param-movetalk": "Renomear a página de discussão, se existir.",
+ "apihelp-options-example-reset": "Resetar todas as preferências"
+}
diff --git a/includes/api/i18n/pt.json b/includes/api/i18n/pt.json
new file mode 100644
index 00000000..72044db9
--- /dev/null
+++ b/includes/api/i18n/pt.json
@@ -0,0 +1,104 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vitorvicentevalente",
+ "Fúlvio",
+ "Macofe"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentação]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discussão]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitações]\n</div>\n<strong>Estado:</strong> Todas as funcionalidades mostradas nesta página deveriam estar a funcionar, mas a API ainda está em activo desenvolvimento, e pode ser alterada a qualquer momento. Inscreva-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para ser informado acerca das actualizações.\n\n<strong>Solicitações erradas:</strong> Quando solicitações erradas são enviadas à API, um cabeçalho em HTTP será enviado com a chave \"MediaWiki-API-Error\" e, em seguida, tanto o valor do cabeçalho quanto o código de erro retornado serão definidos com o mesmo valor. Para mais informação, consulte [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
+ "apihelp-main-param-action": "Qual acção a executar.",
+ "apihelp-main-param-format": "O formato de saída.",
+ "apihelp-block-description": "Bloquear um utilizador.",
+ "apihelp-block-param-user": "Nome de utilizador(a), endereço ou gama de IP que pretende bloquear.",
+ "apihelp-block-param-reason": "Motivo do bloqueio.",
+ "apihelp-block-param-nocreate": "Impedir criação de contas.",
+ "apihelp-createaccount-description": "Criar uma nova conta.",
+ "apihelp-createaccount-param-name": "Nome de utilizador(a).",
+ "apihelp-createaccount-param-email": "Endereço de correio eletrónico do utilizador (opcional).",
+ "apihelp-createaccount-param-realname": "Nome verdadeiro do utilizador (opcional).",
+ "apihelp-delete-description": "Eliminar uma página.",
+ "apihelp-delete-param-watch": "Adicionar esta página à lista de vigiadas.",
+ "apihelp-delete-param-unwatch": "Remover esta página da lista de vigiadas.",
+ "apihelp-delete-example-simple": "Eliminar <kbd>Página Principal</kbd>.",
+ "apihelp-disabled-description": "O módulo foi desativado.",
+ "apihelp-edit-description": "Criar e editar páginas.",
+ "apihelp-edit-param-sectiontitle": "Título para uma nova seção.",
+ "apihelp-edit-param-text": "Conteúdo da página.",
+ "apihelp-edit-param-minor": "Edição menor.",
+ "apihelp-edit-param-bot": "Marcar esta edição como robô.",
+ "apihelp-edit-example-edit": "Editar uma página",
+ "apihelp-emailuser-description": "Enviar correio eletrónico a utilizador.",
+ "apihelp-emailuser-param-subject": "Assunto.",
+ "apihelp-emailuser-param-text": "Texto.",
+ "apihelp-expandtemplates-param-title": "Título da página.",
+ "apihelp-feedcontributions-param-feedformat": "O formato do feed.",
+ "apihelp-feedcontributions-param-deletedonly": "Mostrar apenas contribuições eliminadas.",
+ "apihelp-feedcontributions-param-showsizediff": "Mostrar diferença de tamanho entre edições.",
+ "apihelp-feedrecentchanges-param-feedformat": "O formato do feed.",
+ "apihelp-feedrecentchanges-param-limit": "Número máximo de resultados a apresentar.",
+ "apihelp-feedrecentchanges-param-from": "Mostrar alterações desde então.",
+ "apihelp-feedrecentchanges-param-hideminor": "Ocultar edições menores.",
+ "apihelp-feedrecentchanges-param-hidebots": "Ocultar alterações feitas por robôs.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar alterações patrulhadas.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas por mim.",
+ "apihelp-feedrecentchanges-param-target": "Mostrar apenas mudanças em páginas afluentes a esta.",
+ "apihelp-feedrecentchanges-example-simple": "Mostrar mudanças recentes",
+ "apihelp-help-example-main": "Ajuda para o módulo principal",
+ "apihelp-help-example-recursive": "Toda a ajuda numa página",
+ "apihelp-login-param-name": "Nome de utilizador(a).",
+ "apihelp-login-param-password": "Palavra-passe.",
+ "apihelp-login-param-domain": "Domínio (opcional).",
+ "apihelp-login-example-login": "Entrar",
+ "apihelp-logout-description": "Terminar e limpar dados de sessão.",
+ "apihelp-managetags-description": "Executar tarefas de gestão relacionadas com alteração de etiquetas.",
+ "apihelp-managetags-param-reason": "Um motivo, opcional, para a criação, eliminação, ativação ou desativação da etiqueta.",
+ "apihelp-move-description": "Mover uma página.",
+ "apihelp-move-param-noredirect": "Não criar um redirecionamento.",
+ "apihelp-move-param-ignorewarnings": "Ignorar quaisquer avisos.",
+ "apihelp-opensearch-param-limit": "Número máximo de resultados a apresentar.",
+ "apihelp-options-param-reset": "Reiniciar preferências para os padrões do sítio.",
+ "apihelp-options-example-reset": "Reiniciar todas as preferências",
+ "apihelp-patrol-description": "Patrulhar uma página ou edição.",
+ "apihelp-patrol-example-rcid": "Patrulhar uma mudança recente",
+ "apihelp-patrol-example-revid": "Patrulhar uma edição",
+ "apihelp-protect-example-protect": "Proteger uma página",
+ "apihelp-query+allcategories-description": "Enumerar todas as categorias.",
+ "apihelp-query+allpages-param-prefix": "Pesquisa para todos os títulos de páginas que comecem com este valor.",
+ "apihelp-query+allpages-example-generator": "Mostrar informação sobre 4 páginas que comecem com a letra <kbd>T</kbd>.",
+ "apihelp-query+allusers-example-Y": "Lista de utilizadores que comecem com <kbd>Y</kbd>.",
+ "apihelp-query+blocks-param-limit": "O número máximo de bloqueios a listar.",
+ "apihelp-query+categorymembers-description": "Lista de todas as páginas numa categoria fornecida.",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
+ "apihelp-query+deletedrevs-param-excludeuser": "Não listar edições deste utilizador.",
+ "apihelp-query+deletedrevs-param-namespace": "Listar apenas as páginas neste domínio.",
+ "apihelp-query+filearchive-example-simple": "Mostrar lista de todos os ficheiros eliminados",
+ "apihelp-query+info-description": "Obter informação básica da página.",
+ "apihelp-query+recentchanges-example-simple": "Lista de mudanças recentes",
+ "apihelp-unblock-description": "Desbloquear um utilizador.",
+ "apihelp-unblock-param-reason": "Motivo para o desbloqueio.",
+ "apihelp-undelete-param-title": "Título da página a restaurar.",
+ "apihelp-upload-param-watch": "Vigiar página.",
+ "apihelp-upload-param-ignorewarnings": "Ignorar todos os avisos.",
+ "apihelp-userrights-param-user": "Nome de utilizador(a).",
+ "apihelp-userrights-param-userid": "ID de utilizador.",
+ "apihelp-userrights-param-add": "Adicionar o utilizador a estes grupos.",
+ "apihelp-userrights-param-remove": "Remover este utilizador destes grupos.",
+ "apihelp-watch-example-unwatch": "Deixar de vigiar a página <kbd>Página Principal</kbd>.",
+ "apihelp-json-description": "Dados de saída em formato JSON.",
+ "api-help-title": "Ajuda API da MediaWiki",
+ "api-help-main-header": "Módulo principal",
+ "api-help-flag-deprecated": "Este módulo está obsoleto.",
+ "api-help-parameters": "{{PLURAL:$1|Parâmetro|Parâmetros}}:",
+ "api-help-param-deprecated": "Obsoleto.",
+ "api-help-param-required": "Este parâmetro é obrigatório.",
+ "api-help-param-multi-separate": "Separe os valores com <kbd>|</kbd>.",
+ "api-help-param-default": "Padrão: $1",
+ "api-help-param-default-empty": "Padrão: <span class=\"apihelp-empty\">(vazio)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(sem descrição)</span>",
+ "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
+ "api-help-permissions": "{{PLURAL:$1|Permissão|Permissiões}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
+ "api-credits-header": "Créditos",
+ "api-credits": "Programadores API:\n* Roan Kattouw (programador principal Set 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (criador, programador-líder Set 2006–Set 2007)\n* Brad Jorsch (programador-líder 2013–presente)\n\nPor favor, envie os seus comentários, sugestões e perguntas para mediawiki-api@lists.wikimedia.org ou reporte um erro técnico em https://phabricator.wikimedia.org/."
+}
diff --git a/includes/api/i18n/qqq.json b/includes/api/i18n/qqq.json
new file mode 100644
index 00000000..9bf98247
--- /dev/null
+++ b/includes/api/i18n/qqq.json
@@ -0,0 +1,1069 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226",
+ "Robby",
+ "Shirayuki",
+ "Umherirrender",
+ "McDutchie",
+ "Raymond",
+ "Anomie"
+ ]
+ },
+ "apihelp-main-description": "{{doc-apihelp-description|main}}",
+ "apihelp-main-param-action": "{{doc-apihelp-param|main|action}}",
+ "apihelp-main-param-format": "{{doc-apihelp-param|main|format}}",
+ "apihelp-main-param-maxlag": "{{doc-apihelp-param|main|maxlag}}\n\n\"$host\" and \"$lag\" are not variables and appear as is.",
+ "apihelp-main-param-smaxage": "{{doc-apihelp-param|main|smaxage}}",
+ "apihelp-main-param-maxage": "{{doc-apihelp-param|main|maxage}}",
+ "apihelp-main-param-assert": "{{doc-apihelp-param|main|assert}}",
+ "apihelp-main-param-requestid": "{{doc-apihelp-param|main|requestid}}",
+ "apihelp-main-param-servedby": "{{doc-apihelp-param|main|servedby}}",
+ "apihelp-main-param-curtimestamp": "{{doc-apihelp-param|main|curtimestamp}}",
+ "apihelp-main-param-origin": "{{doc-apihelp-param|main|origin}}",
+ "apihelp-main-param-uselang": "{{doc-apihelp-param|main|uselang}}",
+ "apihelp-block-description": "{{doc-apihelp-description|block}}",
+ "apihelp-block-param-user": "{{doc-apihelp-param|block|user}}",
+ "apihelp-block-param-expiry": "{{doc-apihelp-param|block|expiry}}\n{{doc-important|Do not translate \"5 months\", \"2 weeks\", \"infinite\", \"indefinite\" or \"never\"!}}",
+ "apihelp-block-param-reason": "{{doc-apihelp-param|block|reason}}",
+ "apihelp-block-param-anononly": "{{doc-apihelp-param|block|anononly}}\n* See also {{msg-mw|ipb-hardblock}}",
+ "apihelp-block-param-nocreate": "{{doc-apihelp-param|block|nocreate}}\n* See also {{msg-mw|ipbcreateaccount}}",
+ "apihelp-block-param-autoblock": "{{doc-singularthey}}\n{{doc-apihelp-param|block|autoblock}}\n* See also {{msg-mw|ipbenableautoblock}}",
+ "apihelp-block-param-noemail": "{{doc-apihelp-param|block|noemail}}\n* See also {{msg-mw|ipbemailban}}",
+ "apihelp-block-param-hidename": "{{doc-apihelp-param|block|hidename}}",
+ "apihelp-block-param-allowusertalk": "{{doc-apihelp-param|block|allowusertalk}}\n* See also {{msg-mw|ipb-disableusertalk}}",
+ "apihelp-block-param-reblock": "{{doc-apihelp-param|block|reblock}}",
+ "apihelp-block-param-watchuser": "{{doc-apihelp-param|block|watchuser}}",
+ "apihelp-block-example-ip-simple": "{{doc-apihelp-example|block}}",
+ "apihelp-block-example-user-complex": "{{doc-apihelp-example|block}}",
+ "apihelp-checktoken-description": "{{doc-apihelp-description|checktoken}}",
+ "apihelp-checktoken-param-type": "{{doc-apihelp-param|checktoken|type}}",
+ "apihelp-checktoken-param-token": "{{doc-apihelp-param|checktoken|token}}",
+ "apihelp-checktoken-param-maxtokenage": "{{doc-apihelp-param|checktoken|maxtokenage}}",
+ "apihelp-checktoken-example-simple": "{{doc-apihelp-example|checktoken}}",
+ "apihelp-clearhasmsg-description": "{{doc-apihelp-description|clearhasmsg}}",
+ "apihelp-clearhasmsg-example-1": "{{doc-apihelp-example|clearhasmsg}}",
+ "apihelp-compare-description": "{{doc-apihelp-description|compare}}",
+ "apihelp-compare-param-fromtitle": "{{doc-apihelp-param|compare|fromtitle}}",
+ "apihelp-compare-param-fromid": "{{doc-apihelp-param|compare|fromid}}",
+ "apihelp-compare-param-fromrev": "{{doc-apihelp-param|compare|fromrev}}",
+ "apihelp-compare-param-totitle": "{{doc-apihelp-param|compare|totitle}}",
+ "apihelp-compare-param-toid": "{{doc-apihelp-param|compare|toid}}",
+ "apihelp-compare-param-torev": "{{doc-apihelp-param|compare|torev}}",
+ "apihelp-compare-example-1": "{{doc-apihelp-example|compare}}",
+ "apihelp-createaccount-description": "{{doc-apihelp-description|createaccount}}",
+ "apihelp-createaccount-param-name": "{{doc-apihelp-param|createaccount|name}}",
+ "apihelp-createaccount-param-password": "{{doc-apihelp-param|createaccount|password}}",
+ "apihelp-createaccount-param-domain": "{{doc-apihelp-param|createaccount|domain}}",
+ "apihelp-createaccount-param-token": "{{doc-apihelp-param|createaccount|token}}",
+ "apihelp-createaccount-param-email": "{{doc-apihelp-param|createaccount|email}}",
+ "apihelp-createaccount-param-realname": "{{doc-apihelp-param|createaccount|realname}}",
+ "apihelp-createaccount-param-mailpassword": "{{doc-apihelp-param|createaccount|mailpassword}}",
+ "apihelp-createaccount-param-reason": "{{doc-apihelp-param|createaccount|reason}}",
+ "apihelp-createaccount-param-language": "{{doc-apihelp-param|createaccount|language}}",
+ "apihelp-createaccount-example-pass": "{{doc-apihelp-example|createaccount}}",
+ "apihelp-createaccount-example-mail": "{{doc-apihelp-example|createaccount}}",
+ "apihelp-delete-description": "{{doc-apihelp-description|delete}}",
+ "apihelp-delete-param-title": "{{doc-apihelp-param|delete|title}}",
+ "apihelp-delete-param-pageid": "{{doc-apihelp-param|delete|pageid}}",
+ "apihelp-delete-param-reason": "{{doc-apihelp-param|delete|reason}}",
+ "apihelp-delete-param-watch": "{{doc-apihelp-param|delete|watch}}",
+ "apihelp-delete-param-watchlist": "{{doc-apihelp-param|delete|watchlist}}",
+ "apihelp-delete-param-unwatch": "{{doc-apihelp-param|delete|unwatch}}",
+ "apihelp-delete-param-oldimage": "{{doc-apihelp-param|delete|oldimage}}",
+ "apihelp-delete-example-simple": "{{doc-apihelp-example|delete}}",
+ "apihelp-delete-example-reason": "{{doc-apihelp-example|delete}}",
+ "apihelp-disabled-description": "{{doc-apihelp-description|disabled}}",
+ "apihelp-edit-description": "{{doc-apihelp-description|edit}}",
+ "apihelp-edit-param-title": "{{doc-apihelp-param|edit|title}}",
+ "apihelp-edit-param-pageid": "{{doc-apihelp-param|edit|pageid}}",
+ "apihelp-edit-param-section": "{{doc-apihelp-param|edit|section}}",
+ "apihelp-edit-param-sectiontitle": "{{doc-apihelp-param|edit|sectiontitle}}",
+ "apihelp-edit-param-text": "{{doc-apihelp-param|edit|text}}",
+ "apihelp-edit-param-summary": "{{doc-apihelp-param|edit|summary}}",
+ "apihelp-edit-param-tags": "{{doc-apihelp-param|edit|tags}}",
+ "apihelp-edit-param-minor": "{{doc-apihelp-param|edit|minor}}\n{{Identical|Minor edit}}",
+ "apihelp-edit-param-notminor": "{{doc-apihelp-param|edit|notminor}}",
+ "apihelp-edit-param-bot": "{{doc-apihelp-param|edit|bot}}",
+ "apihelp-edit-param-basetimestamp": "{{doc-apihelp-param|edit|basetimestamp}}",
+ "apihelp-edit-param-starttimestamp": "{{doc-apihelp-param|edit|starttimestamp}}",
+ "apihelp-edit-param-recreate": "{{doc-apihelp-param|edit|recreate}}",
+ "apihelp-edit-param-createonly": "{{doc-apihelp-param|edit|createonly}}",
+ "apihelp-edit-param-nocreate": "{{doc-apihelp-param|edit|nocreate}}",
+ "apihelp-edit-param-watch": "{{doc-apihelp-param|edit|watch}}",
+ "apihelp-edit-param-unwatch": "{{doc-apihelp-param|edit|unwatch}}",
+ "apihelp-edit-param-watchlist": "{{doc-apihelp-param|edit|watchlist}}",
+ "apihelp-edit-param-md5": "{{doc-apihelp-param|edit|md5}}",
+ "apihelp-edit-param-prependtext": "{{doc-apihelp-param|edit|prependtext}}",
+ "apihelp-edit-param-appendtext": "{{doc-apihelp-param|edit|appendtext}}",
+ "apihelp-edit-param-undo": "{{doc-apihelp-param|edit|undo}}",
+ "apihelp-edit-param-undoafter": "{{doc-apihelp-param|edit|undoafter}}",
+ "apihelp-edit-param-redirect": "{{doc-apihelp-param|edit|redirect}}",
+ "apihelp-edit-param-contentformat": "{{doc-apihelp-param|edit|contentformat}}",
+ "apihelp-edit-param-contentmodel": "{{doc-apihelp-param|edit|contentmodel}}",
+ "apihelp-edit-param-token": "{{doc-apihelp-param|edit|token}}",
+ "apihelp-edit-example-edit": "{{doc-apihelp-example|edit}}",
+ "apihelp-edit-example-prepend": "{{doc-apihelp-example|edit}}",
+ "apihelp-edit-example-undo": "{{doc-apihelp-example|edit}}",
+ "apihelp-emailuser-description": "{{doc-apihelp-description|emailuser}}",
+ "apihelp-emailuser-param-target": "{{doc-apihelp-param|emailuser|target}}",
+ "apihelp-emailuser-param-subject": "{{doc-apihelp-param|emailuser|subject}}",
+ "apihelp-emailuser-param-text": "{{doc-apihelp-param|emailuser|text}}",
+ "apihelp-emailuser-param-ccme": "{{doc-apihelp-param|emailuser|ccme}}",
+ "apihelp-emailuser-example-email": "{{doc-apihelp-example|emailuser}}",
+ "apihelp-expandtemplates-description": "{{doc-apihelp-description|expandtemplates}}",
+ "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
+ "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
+ "apihelp-expandtemplates-param-revid": "{{doc-apihelp-param|expandtemplates|revid}}\n{{doc-important|Do not translate <code><<nowiki />nowiki>{{<nowiki />REVISIONID}}<<nowiki />/nowiki></code>}}",
+ "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop}}",
+ "apihelp-expandtemplates-param-includecomments": "{{doc-apihelp-param|expandtemplates|includecomments}}",
+ "apihelp-expandtemplates-param-generatexml": "{{doc-apihelp-param|expandtemplates|generatexml}}",
+ "apihelp-expandtemplates-example-simple": "{{doc-apihelp-example|expandtemplates}}",
+ "apihelp-feedcontributions-description": "{{doc-apihelp-description|feedcontributions}}",
+ "apihelp-feedcontributions-param-feedformat": "{{doc-apihelp-param|feedcontributions|feedformat}}",
+ "apihelp-feedcontributions-param-user": "{{doc-apihelp-param|feedcontributions|user}}",
+ "apihelp-feedcontributions-param-namespace": "{{doc-apihelp-param|feedcontributions|namespace}}",
+ "apihelp-feedcontributions-param-year": "{{doc-apihelp-param|feedcontributions|year}}",
+ "apihelp-feedcontributions-param-month": "{{doc-apihelp-param|feedcontributions|month}}",
+ "apihelp-feedcontributions-param-tagfilter": "{{doc-apihelp-param|feedcontributions|tagfilter}}",
+ "apihelp-feedcontributions-param-deletedonly": "{{doc-apihelp-param|feedcontributions|deletedonly}}",
+ "apihelp-feedcontributions-param-toponly": "{{doc-apihelp-param|feedcontributions|toponly}}",
+ "apihelp-feedcontributions-param-newonly": "{{doc-apihelp-param|feedcontributions|newonly}}",
+ "apihelp-feedcontributions-param-showsizediff": "{{doc-apihelp-param|feedcontributions|showsizediff}}",
+ "apihelp-feedcontributions-example-simple": "{{doc-apihelp-example|feedcontributions}}",
+ "apihelp-feedrecentchanges-description": "{{doc-apihelp-description|feedrecentchanges}}",
+ "apihelp-feedrecentchanges-param-feedformat": "{{doc-apihelp-param|feedrecentchanges|feedformat}}",
+ "apihelp-feedrecentchanges-param-namespace": "{{doc-apihelp-param|feedrecentchanges|namespace}}",
+ "apihelp-feedrecentchanges-param-invert": "{{doc-apihelp-param|feedrecentchanges|invert}}",
+ "apihelp-feedrecentchanges-param-associated": "{{doc-apihelp-param|feedrecentchanges|associated}}",
+ "apihelp-feedrecentchanges-param-days": "{{doc-apihelp-param|feedrecentchanges|days}}",
+ "apihelp-feedrecentchanges-param-limit": "{{doc-apihelp-param|feedrecentchanges|limit}}",
+ "apihelp-feedrecentchanges-param-from": "{{doc-apihelp-param|feedrecentchanges|from}}",
+ "apihelp-feedrecentchanges-param-hideminor": "{{doc-apihelp-param|feedrecentchanges|hideminor}}",
+ "apihelp-feedrecentchanges-param-hidebots": "{{doc-apihelp-param|feedrecentchanges|hidebots}}",
+ "apihelp-feedrecentchanges-param-hideanons": "{{doc-apihelp-param|feedrecentchanges|hideanons}}",
+ "apihelp-feedrecentchanges-param-hideliu": "{{doc-apihelp-param|feedrecentchanges|hideliu}}",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "{{doc-apihelp-param|feedrecentchanges|hidepatrolled}}",
+ "apihelp-feedrecentchanges-param-hidemyself": "{{doc-apihelp-param|feedrecentchanges|hidemyself}}",
+ "apihelp-feedrecentchanges-param-tagfilter": "{{doc-apihelp-param|feedrecentchanges|tagfilter}}",
+ "apihelp-feedrecentchanges-param-target": "{{doc-apihelp-param|feedrecentchanges|target}}",
+ "apihelp-feedrecentchanges-param-showlinkedto": "{{doc-apihelp-param|feedrecentchanges|showlinkedto}}",
+ "apihelp-feedrecentchanges-example-simple": "{{doc-apihelp-example|feedrecentchanges}}",
+ "apihelp-feedrecentchanges-example-30days": "{{doc-apihelp-example|feedrecentchanges}}",
+ "apihelp-feedwatchlist-description": "{{doc-apihelp-description|feedwatchlist}}",
+ "apihelp-feedwatchlist-param-feedformat": "{{doc-apihelp-param|feedwatchlist|feedformat}}",
+ "apihelp-feedwatchlist-param-hours": "{{doc-apihelp-param|feedwatchlist|hours}}",
+ "apihelp-feedwatchlist-param-linktosections": "{{doc-apihelp-param|feedwatchlist|linktosections}}",
+ "apihelp-feedwatchlist-example-default": "{{doc-apihelp-example|feedwatchlist}}",
+ "apihelp-feedwatchlist-example-all6hrs": "{{doc-apihelp-example|feedwatchlist}}",
+ "apihelp-filerevert-description": "{{doc-apihelp-description|filerevert}}",
+ "apihelp-filerevert-param-filename": "{{doc-apihelp-param|filerevert|filename}}",
+ "apihelp-filerevert-param-comment": "{{doc-apihelp-param|filerevert|comment}}",
+ "apihelp-filerevert-param-archivename": "{{doc-apihelp-param|filerevert|archivename}}",
+ "apihelp-filerevert-example-revert": "{{doc-apihelp-example|filerevert}}",
+ "apihelp-help-description": "{{doc-apihelp-description|help}}",
+ "apihelp-help-param-modules": "{{doc-apihelp-param|help|modules}}",
+ "apihelp-help-param-submodules": "{{doc-apihelp-param|help|submodules}}",
+ "apihelp-help-param-recursivesubmodules": "{{doc-apihelp-param|help|recursivesubmodules}}",
+ "apihelp-help-param-helpformat": "{{doc-apihelp-param|help|helpformat}}",
+ "apihelp-help-param-wrap": "{{doc-apihelp-param|help|wrap}}",
+ "apihelp-help-param-toc": "{{doc-apihelp-param|help|toc}}",
+ "apihelp-help-example-main": "{{doc-apihelp-example|help}}",
+ "apihelp-help-example-recursive": "{{doc-apihelp-example|help}}",
+ "apihelp-help-example-help": "{{doc-apihelp-example|help}}",
+ "apihelp-help-example-query": "{{doc-apihelp-example|help}}",
+ "apihelp-imagerotate-description": "{{doc-apihelp-description|imagerotate}}",
+ "apihelp-imagerotate-param-rotation": "{{doc-apihelp-param|imagerotate|rotation}}",
+ "apihelp-imagerotate-example-simple": "{{doc-apihelp-example|imagerotate}}",
+ "apihelp-imagerotate-example-generator": "{{doc-apihelp-example|imagerotate}}",
+ "apihelp-import-description": "{{doc-apihelp-description|import}}",
+ "apihelp-import-param-summary": "{{doc-apihelp-param|import|summary}}",
+ "apihelp-import-param-xml": "{{doc-apihelp-param|import|xml}}",
+ "apihelp-import-param-interwikisource": "{{doc-apihelp-param|import|interwikisource}}",
+ "apihelp-import-param-interwikipage": "{{doc-apihelp-param|import|interwikipage}}",
+ "apihelp-import-param-fullhistory": "{{doc-apihelp-param|import|fullhistory}}",
+ "apihelp-import-param-templates": "{{doc-apihelp-param|import|templates}}",
+ "apihelp-import-param-namespace": "{{doc-apihelp-param|import|namespace}}",
+ "apihelp-import-param-rootpage": "{{doc-apihelp-param|import|rootpage}}",
+ "apihelp-import-example-import": "{{doc-apihelp-example|import}}",
+ "apihelp-login-description": "{{doc-apihelp-description|login}}",
+ "apihelp-login-param-name": "{{doc-apihelp-param|login|name}}\n{{Identical|Username}}",
+ "apihelp-login-param-password": "{{doc-apihelp-param|login|password}}\n{{Identical|Password}}",
+ "apihelp-login-param-domain": "{{doc-apihelp-param|login|domain}}",
+ "apihelp-login-param-token": "{{doc-apihelp-param|login|token}}",
+ "apihelp-login-example-gettoken": "{{doc-apihelp-example|login}}",
+ "apihelp-login-example-login": "{{doc-apihelp-example|login}}",
+ "apihelp-logout-description": "{{doc-apihelp-description|logout}}",
+ "apihelp-logout-example-logout": "{{doc-apihelp-example|logout}}",
+ "apihelp-managetags-description": "{{doc-apihelp-description|managetags}}",
+ "apihelp-managetags-param-operation": "{{doc-apihelp-param|managetags|operation}}",
+ "apihelp-managetags-param-tag": "{{doc-apihelp-param|managetags|tag}}",
+ "apihelp-managetags-param-reason": "{{doc-apihelp-param|managetags|reason}}",
+ "apihelp-managetags-param-ignorewarnings": "{{doc-apihelp-param|managetags|ignorewarnings}}",
+ "apihelp-managetags-example-create": "{{doc-apihelp-example|managetags}}",
+ "apihelp-managetags-example-delete": "{{doc-apihelp-example|managetags|info={{doc-important|The text \"vandlaism\" in this message is intentionally misspelled; the example being documented by this message is the deletion of a misspelled tag.}}}}",
+ "apihelp-managetags-example-activate": "{{doc-apihelp-example|managetags}}",
+ "apihelp-managetags-example-deactivate": "{{doc-apihelp-example|managetags}}",
+ "apihelp-move-description": "{{doc-apihelp-description|move}}",
+ "apihelp-move-param-from": "{{doc-apihelp-param|move|from}}",
+ "apihelp-move-param-fromid": "{{doc-apihelp-param|move|fromid}}",
+ "apihelp-move-param-to": "{{doc-apihelp-param|move|to}}",
+ "apihelp-move-param-reason": "{{doc-apihelp-param|move|reason}}",
+ "apihelp-move-param-movetalk": "{{doc-apihelp-param|move|movetalk}}",
+ "apihelp-move-param-movesubpages": "{{doc-apihelp-param|move|movesubpages}}",
+ "apihelp-move-param-noredirect": "{{doc-apihelp-param|move|noredirect}}",
+ "apihelp-move-param-watch": "{{doc-apihelp-param|move|watch}}",
+ "apihelp-move-param-unwatch": "{{doc-apihelp-param|move|unwatch}}",
+ "apihelp-move-param-watchlist": "{{doc-apihelp-param|move|watchlist}}",
+ "apihelp-move-param-ignorewarnings": "{{doc-apihelp-param|move|ignorewarnings}}",
+ "apihelp-move-example-move": "{{doc-apihelp-example|move}}",
+ "apihelp-opensearch-description": "{{doc-apihelp-description|opensearch}}",
+ "apihelp-opensearch-param-search": "{{doc-apihelp-param|opensearch|search}}",
+ "apihelp-opensearch-param-limit": "{{doc-apihelp-param|opensearch|limit}}",
+ "apihelp-opensearch-param-namespace": "{{doc-apihelp-param|opensearch|namespace}}",
+ "apihelp-opensearch-param-suggest": "{{doc-apihelp-param|opensearch|suggest}}",
+ "apihelp-opensearch-param-redirects": "{{doc-apihelp-param|opensearch|redirects}}",
+ "apihelp-opensearch-param-format": "{{doc-apihelp-param|opensearch|format}}",
+ "apihelp-opensearch-param-warningsaserror": "{{doc-apihelp-param|opensearch|warningsaserror}}",
+ "apihelp-opensearch-example-te": "{{doc-apihelp-example|opensearch}}",
+ "apihelp-options-description": "{{doc-apihelp-description|options}}",
+ "apihelp-options-param-reset": "{{doc-apihelp-param|options|reset}}",
+ "apihelp-options-param-resetkinds": "{{doc-apihelp-param|options|resetkinds}}",
+ "apihelp-options-param-change": "{{doc-apihelp-param|options|change}}",
+ "apihelp-options-param-optionname": "{{doc-apihelp-param|options|optionname}}",
+ "apihelp-options-param-optionvalue": "{{doc-apihelp-param|options|optionvalue}}",
+ "apihelp-options-example-reset": "{{doc-apihelp-example|options}}",
+ "apihelp-options-example-change": "{{doc-apihelp-example|options}}",
+ "apihelp-options-example-complex": "{{doc-apihelp-example|options}}",
+ "apihelp-paraminfo-description": "{{doc-apihelp-description|paraminfo}}",
+ "apihelp-paraminfo-param-modules": "{{doc-apihelp-param|paraminfo|modules}}",
+ "apihelp-paraminfo-param-helpformat": "{{doc-apihelp-param|paraminfo|helpformat}}",
+ "apihelp-paraminfo-param-querymodules": "{{doc-apihelp-param|paraminfo|querymodules}}",
+ "apihelp-paraminfo-param-mainmodule": "{{doc-apihelp-param|paraminfo|mainmodule}}",
+ "apihelp-paraminfo-param-pagesetmodule": "{{doc-apihelp-param|paraminfo|pagesetmodule}}",
+ "apihelp-paraminfo-param-formatmodules": "{{doc-apihelp-param|paraminfo|formatmodules}}",
+ "apihelp-paraminfo-example-1": "{{doc-apihelp-example|paraminfo}}",
+ "apihelp-parse-description": "{{doc-apihelp-description|parse}}",
+ "apihelp-parse-param-title": "{{doc-apihelp-param|parse|title}}",
+ "apihelp-parse-param-text": "{{doc-apihelp-param|parse|text}}",
+ "apihelp-parse-param-summary": "{{doc-apihelp-param|parse|summary}}",
+ "apihelp-parse-param-page": "{{doc-apihelp-param|parse|page}}",
+ "apihelp-parse-param-pageid": "{{doc-apihelp-param|parse|pageid}}",
+ "apihelp-parse-param-redirects": "{{doc-apihelp-param|parse|redirects}}",
+ "apihelp-parse-param-oldid": "{{doc-apihelp-param|parse|oldid}}",
+ "apihelp-parse-param-prop": "{{doc-apihelp-param|parse|prop}}",
+ "apihelp-parse-param-pst": "{{doc-apihelp-param|parse|pst}}",
+ "apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
+ "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
+ "apihelp-parse-param-section": "{{doc-apihelp-param|parse|section}}",
+ "apihelp-parse-param-sectiontitle": "{{doc-apihelp-param|parse|sectiontitle}}",
+ "apihelp-parse-param-disablepp": "{{doc-apihelp-param|parse|disablepp}}",
+ "apihelp-parse-param-disableeditsection": "{{doc-apihelp-param|parse|disableeditsection}}",
+ "apihelp-parse-param-generatexml": "{{doc-apihelp-param|parse|generatexml|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
+ "apihelp-parse-param-preview": "{{doc-apihelp-param|parse|preview}}",
+ "apihelp-parse-param-sectionpreview": "{{doc-apihelp-param|parse|sectionpreview}}",
+ "apihelp-parse-param-disabletoc": "{{doc-apihelp-param|parse|disabletoc}}",
+ "apihelp-parse-param-contentformat": "{{doc-apihelp-param|parse|contentformat}}",
+ "apihelp-parse-param-contentmodel": "{{doc-apihelp-param|parse|contentmodel}}",
+ "apihelp-parse-example-page": "{{doc-apihelp-example|parse}}",
+ "apihelp-parse-example-text": "{{doc-apihelp-example|parse}}",
+ "apihelp-parse-example-texttitle": "{{doc-apihelp-example|parse}}",
+ "apihelp-parse-example-summary": "{{doc-apihelp-example|parse}}",
+ "apihelp-patrol-description": "{{doc-apihelp-description|patrol}}",
+ "apihelp-patrol-param-rcid": "{{doc-apihelp-param|patrol|rcid}}",
+ "apihelp-patrol-param-revid": "{{doc-apihelp-param|patrol|revid}}",
+ "apihelp-patrol-example-rcid": "{{doc-apihelp-example|patrol}}",
+ "apihelp-patrol-example-revid": "{{doc-apihelp-example|patrol}}",
+ "apihelp-protect-description": "{{doc-apihelp-description|protect}}",
+ "apihelp-protect-param-title": "{{doc-apihelp-param|protect|title}}",
+ "apihelp-protect-param-pageid": "{{doc-apihelp-param|protect|pageid}}",
+ "apihelp-protect-param-protections": "{{doc-apihelp-param|protect|protections}}",
+ "apihelp-protect-param-expiry": "{{doc-apihelp-param|protect|expiry}}",
+ "apihelp-protect-param-reason": "{{doc-apihelp-param|protect|reason}}",
+ "apihelp-protect-param-cascade": "{{doc-apihelp-param|protect|cascade}}",
+ "apihelp-protect-param-watch": "{{doc-apihelp-param|protect|watch}}",
+ "apihelp-protect-param-watchlist": "{{doc-apihelp-param|protect|watchlist}}",
+ "apihelp-protect-example-protect": "{{doc-apihelp-example|protect}}",
+ "apihelp-protect-example-unprotect": "{{doc-apihelp-example|protect}}",
+ "apihelp-protect-example-unprotect2": "{{doc-apihelp-example|protect}}",
+ "apihelp-purge-description": "{{doc-apihelp-description|purge}}",
+ "apihelp-purge-param-forcelinkupdate": "{{doc-apihelp-param|purge|forcelinkupdate}}",
+ "apihelp-purge-param-forcerecursivelinkupdate": "{{doc-apihelp-param|purge|forcerecursivelinkupdate}}",
+ "apihelp-purge-example-simple": "{{doc-apihelp-example|purge}}",
+ "apihelp-purge-example-generator": "{{doc-apihelp-example|purge}}",
+ "apihelp-query-description": "{{doc-apihelp-description|query}}",
+ "apihelp-query-param-prop": "{{doc-apihelp-param|query|prop}}",
+ "apihelp-query-param-list": "{{doc-apihelp-param|query|list}}",
+ "apihelp-query-param-meta": "{{doc-apihelp-param|query|meta}}",
+ "apihelp-query-param-indexpageids": "{{doc-apihelp-param|query|indexpageids}}",
+ "apihelp-query-param-export": "{{doc-apihelp-param|query|export}}",
+ "apihelp-query-param-exportnowrap": "{{doc-apihelp-param|query|exportnowrap}}",
+ "apihelp-query-param-iwurl": "{{doc-apihelp-param|query|iwurl}}",
+ "apihelp-query-param-continue": "{{doc-apihelp-param|query|continue}}",
+ "apihelp-query-param-rawcontinue": "{{doc-apihelp-param|query|rawcontinue}}",
+ "apihelp-query-example-revisions": "{{doc-apihelp-example|query}}",
+ "apihelp-query-example-allpages": "{{doc-apihelp-example|query}}",
+ "apihelp-query+allcategories-description": "{{doc-apihelp-description|query+allcategories}}",
+ "apihelp-query+allcategories-param-from": "{{doc-apihelp-param|query+allcategories|from}}",
+ "apihelp-query+allcategories-param-to": "{{doc-apihelp-param|query+allcategories|to}}",
+ "apihelp-query+allcategories-param-prefix": "{{doc-apihelp-param|query+allcategories|prefix}}",
+ "apihelp-query+allcategories-param-dir": "{{doc-apihelp-param|query+allcategories|dir}}",
+ "apihelp-query+allcategories-param-min": "{{doc-apihelp-param|query+allcategories|min}}",
+ "apihelp-query+allcategories-param-max": "{{doc-apihelp-param|query+allcategories|max}}",
+ "apihelp-query+allcategories-param-limit": "{{doc-apihelp-param|query+allcategories|limit}}",
+ "apihelp-query+allcategories-param-prop": "{{doc-apihelp-param|query+allcategories|prop}}",
+ "apihelp-query+allcategories-example-size": "{{doc-apihelp-example|query+allcategories}}",
+ "apihelp-query+allcategories-example-generator": "{{doc-apihelp-example|query+allcategories}}",
+ "apihelp-query+alldeletedrevisions-description": "{{doc-apihelp-description|query+alldeletedrevisions}}",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "{{doc-apihelp-paraminfo|query+alldeletedrevisions|useronly}}",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "{{doc-apihelp-paraminfo|query+alldeletedrevisions|nonuseronly}}",
+ "apihelp-query+alldeletedrevisions-param-start": "{{doc-apihelp-param|query+alldeletedrevisions|start}}",
+ "apihelp-query+alldeletedrevisions-param-end": "{{doc-apihelp-param|query+alldeletedrevisions|end}}",
+ "apihelp-query+alldeletedrevisions-param-from": "{{doc-apihelp-param|query+alldeletedrevisions|from}}",
+ "apihelp-query+alldeletedrevisions-param-to": "{{doc-apihelp-param|query+alldeletedrevisions|to}}",
+ "apihelp-query+alldeletedrevisions-param-prefix": "{{doc-apihelp-param|query+alldeletedrevisions|prefix}}",
+ "apihelp-query+alldeletedrevisions-param-tag": "{{doc-apihelp-param|query+alldeletedrevisions|tag}}",
+ "apihelp-query+alldeletedrevisions-param-user": "{{doc-apihelp-param|query+alldeletedrevisions|user}}",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "{{doc-apihelp-param|query+alldeletedrevisions|excludeuser}}",
+ "apihelp-query+alldeletedrevisions-param-namespace": "{{doc-apihelp-param|query+alldeletedrevisions|namespace}}",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "{{doc-apihelp-param|query+alldeletedrevisions|miser-user-namespace}}",
+ "apihelp-query+alldeletedrevisions-param-generatetitles": "{{doc-apihelp-param|query+alldeletedrevisions|generatetitles}}",
+ "apihelp-query+alldeletedrevisions-example-user": "{{doc-apihelp-example|query+alldeletedrevisions}}",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "{{doc-apihelp-example|query+alldeletedrevisions}}",
+ "apihelp-query+allfileusages-description": "{{doc-apihelp-description|query+allfileusages}}",
+ "apihelp-query+allfileusages-param-from": "{{doc-apihelp-param|query+allfileusages|from}}",
+ "apihelp-query+allfileusages-param-to": "{{doc-apihelp-param|query+allfileusages|to}}",
+ "apihelp-query+allfileusages-param-prefix": "{{doc-apihelp-param|query+allfileusages|prefix}}",
+ "apihelp-query+allfileusages-param-unique": "{{doc-apihelp-param|query+allfileusages|unique}}",
+ "apihelp-query+allfileusages-param-prop": "{{doc-apihelp-param|query+allfileusages|prop}}",
+ "apihelp-query+allfileusages-param-limit": "{{doc-apihelp-param|query+allfileusages|limit}}",
+ "apihelp-query+allfileusages-param-dir": "{{doc-apihelp-param|query+allfileusages|dir}}",
+ "apihelp-query+allfileusages-example-B": "{{doc-apihelp-example|query+allfileusages}}",
+ "apihelp-query+allfileusages-example-unique": "{{doc-apihelp-example|query+allfileusages}}",
+ "apihelp-query+allfileusages-example-unique-generator": "{{doc-apihelp-example|query+allfileusages}}",
+ "apihelp-query+allfileusages-example-generator": "{{doc-apihelp-example|query+allfileusages}}",
+ "apihelp-query+allimages-description": "{{doc-apihelp-description|query+allimages}}",
+ "apihelp-query+allimages-param-sort": "{{doc-apihelp-param|query+allimages|sort}}",
+ "apihelp-query+allimages-param-dir": "{{doc-apihelp-param|query+allimages|dir}}",
+ "apihelp-query+allimages-param-from": "{{doc-apihelp-param|query+allimages|from}}",
+ "apihelp-query+allimages-param-to": "{{doc-apihelp-param|query+allimages|to}}",
+ "apihelp-query+allimages-param-start": "{{doc-apihelp-param|query+allimages|start}}",
+ "apihelp-query+allimages-param-end": "{{doc-apihelp-param|query+allimages|end}}",
+ "apihelp-query+allimages-param-prefix": "{{doc-apihelp-param|query+allimages|prefix}}",
+ "apihelp-query+allimages-param-minsize": "{{doc-apihelp-param|query+allimages|minsize}}",
+ "apihelp-query+allimages-param-maxsize": "{{doc-apihelp-param|query+allimages|maxsize}}",
+ "apihelp-query+allimages-param-sha1": "{{doc-apihelp-param|query+allimages|sha1}}",
+ "apihelp-query+allimages-param-sha1base36": "{{doc-apihelp-param|query+allimages|sha1base36}}",
+ "apihelp-query+allimages-param-user": "{{doc-apihelp-param|query+allimages|user}}",
+ "apihelp-query+allimages-param-filterbots": "{{doc-apihelp-param|query+allimages|filterbots}}",
+ "apihelp-query+allimages-param-mime": "{{doc-apihelp-param|query+allimages|mime}}",
+ "apihelp-query+allimages-param-limit": "{{doc-apihelp-param|query+allimages|limit}}",
+ "apihelp-query+allimages-example-B": "{{doc-apihelp-example|query+allimages}}",
+ "apihelp-query+allimages-example-recent": "{{doc-apihelp-example|query+allimages}}",
+ "apihelp-query+allimages-example-mimetypes": "{{doc-apihelp-example|query+allimages}}",
+ "apihelp-query+allimages-example-generator": "{{doc-apihelp-example|query+allimages}}",
+ "apihelp-query+alllinks-description": "{{doc-apihelp-description|query+alllinks}}",
+ "apihelp-query+alllinks-param-from": "{{doc-apihelp-param|query+alllinks|from}}",
+ "apihelp-query+alllinks-param-to": "{{doc-apihelp-param|query+alllinks|to}}",
+ "apihelp-query+alllinks-param-prefix": "{{doc-apihelp-param|query+alllinks|prefix}}",
+ "apihelp-query+alllinks-param-unique": "{{doc-apihelp-param|query+alllinks|unique}}",
+ "apihelp-query+alllinks-param-prop": "{{doc-apihelp-param|query+alllinks|prop}}",
+ "apihelp-query+alllinks-param-namespace": "{{doc-apihelp-param|query+alllinks|namespace}}",
+ "apihelp-query+alllinks-param-limit": "{{doc-apihelp-param|query+alllinks|limit}}",
+ "apihelp-query+alllinks-param-dir": "{{doc-apihelp-param|query+alllinks|dir}}",
+ "apihelp-query+alllinks-example-B": "{{doc-apihelp-example|query+alllinks}}",
+ "apihelp-query+alllinks-example-unique": "{{doc-apihelp-example|query+alllinks}}",
+ "apihelp-query+alllinks-example-unique-generator": "{{doc-apihelp-example|query+alllinks}}",
+ "apihelp-query+alllinks-example-generator": "{{doc-apihelp-example|query+alllinks}}",
+ "apihelp-query+allmessages-description": "{{doc-apihelp-description|query+allmessages}}",
+ "apihelp-query+allmessages-param-messages": "{{doc-apihelp-param|query+allmessages|messages}}",
+ "apihelp-query+allmessages-param-prop": "{{doc-apihelp-param|query+allmessages|prop}}",
+ "apihelp-query+allmessages-param-enableparser": "{{doc-apihelp-param|query+allmessages|enableparser}}",
+ "apihelp-query+allmessages-param-nocontent": "{{doc-apihelp-param|query+allmessages|nocontent}}",
+ "apihelp-query+allmessages-param-includelocal": "{{doc-apihelp-param|query+allmessages|includelocal}}",
+ "apihelp-query+allmessages-param-args": "{{doc-apihelp-param|query+allmessages|args}}",
+ "apihelp-query+allmessages-param-filter": "{{doc-apihelp-param|query+allmessages|filter}}",
+ "apihelp-query+allmessages-param-customised": "{{doc-apihelp-param|query+allmessages|customised}}",
+ "apihelp-query+allmessages-param-lang": "{{doc-apihelp-param|query+allmessages|lang}}",
+ "apihelp-query+allmessages-param-from": "{{doc-apihelp-param|query+allmessages|from}}",
+ "apihelp-query+allmessages-param-to": "{{doc-apihelp-param|query+allmessages|to}}",
+ "apihelp-query+allmessages-param-title": "{{doc-apihelp-param|query+allmessages|title}}",
+ "apihelp-query+allmessages-param-prefix": "{{doc-apihelp-param|query+allmessages|prefix}}",
+ "apihelp-query+allmessages-example-ipb": "{{doc-apihelp-example|query+allmessages}}",
+ "apihelp-query+allmessages-example-de": "{{doc-apihelp-example|query+allmessages}}",
+ "apihelp-query+allpages-description": "{{doc-apihelp-description|query+allpages}}",
+ "apihelp-query+allpages-param-from": "{{doc-apihelp-param|query+allpages|from}}",
+ "apihelp-query+allpages-param-to": "{{doc-apihelp-param|query+allpages|to}}",
+ "apihelp-query+allpages-param-prefix": "{{doc-apihelp-param|query+allpages|prefix}}",
+ "apihelp-query+allpages-param-namespace": "{{doc-apihelp-param|query+allpages|namespace}}",
+ "apihelp-query+allpages-param-filterredir": "{{doc-apihelp-param|query+allpages|filterredir}}",
+ "apihelp-query+allpages-param-minsize": "{{doc-apihelp-param|query+allpages|minsize}}",
+ "apihelp-query+allpages-param-maxsize": "{{doc-apihelp-param|query+allpages|maxsize}}",
+ "apihelp-query+allpages-param-prtype": "{{doc-apihelp-param|query+allpages|prtype}}",
+ "apihelp-query+allpages-param-prlevel": "{{doc-apihelp-param|query+allpages|prlevel}}",
+ "apihelp-query+allpages-param-prfiltercascade": "{{doc-apihelp-param|query+allpages|prfiltercascade}}",
+ "apihelp-query+allpages-param-limit": "{{doc-apihelp-param|query+allpages|limit}}",
+ "apihelp-query+allpages-param-dir": "{{doc-apihelp-param|query+allpages|dir}}",
+ "apihelp-query+allpages-param-filterlanglinks": "{{doc-apihelp-param|query+allpages|filterlanglinks}}",
+ "apihelp-query+allpages-param-prexpiry": "{{doc-apihelp-param|query+allpages|prexpiry}}",
+ "apihelp-query+allpages-example-B": "{{doc-apihelp-example|query+allpages}}",
+ "apihelp-query+allpages-example-generator": "{{doc-apihelp-example|query+allpages}}",
+ "apihelp-query+allpages-example-generator-revisions": "{{doc-apihelp-example|query+allpages}}",
+ "apihelp-query+allredirects-description": "{{doc-apihelp-description|query+allredirects}}",
+ "apihelp-query+allredirects-param-from": "{{doc-apihelp-param|query+allredirects|from}}",
+ "apihelp-query+allredirects-param-to": "{{doc-apihelp-param|query+allredirects|to}}",
+ "apihelp-query+allredirects-param-prefix": "{{doc-apihelp-param|query+allredirects|prefix}}",
+ "apihelp-query+allredirects-param-unique": "{{doc-apihelp-param|query+allredirects|unique}}",
+ "apihelp-query+allredirects-param-prop": "{{doc-apihelp-param|query+allredirects|prop}}",
+ "apihelp-query+allredirects-param-namespace": "{{doc-apihelp-param|query+allredirects|namespace}}",
+ "apihelp-query+allredirects-param-limit": "{{doc-apihelp-param|query+allredirects|limit}}",
+ "apihelp-query+allredirects-param-dir": "{{doc-apihelp-param|query+allredirects|dir}}",
+ "apihelp-query+allredirects-example-B": "{{doc-apihelp-example|query+allredirects}}",
+ "apihelp-query+allredirects-example-unique": "{{doc-apihelp-example|query+allredirects}}",
+ "apihelp-query+allredirects-example-unique-generator": "{{doc-apihelp-example|query+allredirects}}",
+ "apihelp-query+allredirects-example-generator": "{{doc-apihelp-example|query+allredirects}}",
+ "apihelp-query+alltransclusions-description": "{{doc-apihelp-description|query+alltransclusions}}",
+ "apihelp-query+alltransclusions-param-from": "{{doc-apihelp-param|query+alltransclusions|from}}",
+ "apihelp-query+alltransclusions-param-to": "{{doc-apihelp-param|query+alltransclusions|to}}",
+ "apihelp-query+alltransclusions-param-prefix": "{{doc-apihelp-param|query+alltransclusions|prefix}}",
+ "apihelp-query+alltransclusions-param-unique": "{{doc-apihelp-param|query+alltransclusions|unique}}",
+ "apihelp-query+alltransclusions-param-prop": "{{doc-apihelp-param|query+alltransclusions|prop}}",
+ "apihelp-query+alltransclusions-param-namespace": "{{doc-apihelp-param|query+alltransclusions|namespace}}",
+ "apihelp-query+alltransclusions-param-limit": "{{doc-apihelp-param|query+alltransclusions|limit}}",
+ "apihelp-query+alltransclusions-param-dir": "{{doc-apihelp-param|query+alltransclusions|dir}}",
+ "apihelp-query+alltransclusions-example-B": "{{doc-apihelp-example|query+alltransclusions}}",
+ "apihelp-query+alltransclusions-example-unique": "{{doc-apihelp-example|query+alltransclusions}}",
+ "apihelp-query+alltransclusions-example-unique-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+ "apihelp-query+alltransclusions-example-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+ "apihelp-query+allusers-description": "{{doc-apihelp-description|query+allusers}}",
+ "apihelp-query+allusers-param-from": "{{doc-apihelp-param|query+allusers|from}}",
+ "apihelp-query+allusers-param-to": "{{doc-apihelp-param|query+allusers|to}}",
+ "apihelp-query+allusers-param-prefix": "{{doc-apihelp-param|query+allusers|prefix}}",
+ "apihelp-query+allusers-param-dir": "{{doc-apihelp-param|query+allusers|dir}}",
+ "apihelp-query+allusers-param-group": "{{doc-apihelp-param|query+allusers|group}}",
+ "apihelp-query+allusers-param-excludegroup": "{{doc-apihelp-param|query+allusers|excludegroup}}",
+ "apihelp-query+allusers-param-rights": "{{doc-apihelp-param|query+allusers|rights}}",
+ "apihelp-query+allusers-param-prop": "{{doc-apihelp-param|query+allusers|prop}}",
+ "apihelp-query+allusers-param-limit": "{{doc-apihelp-param|query+allusers|limit}}",
+ "apihelp-query+allusers-param-witheditsonly": "{{doc-apihelp-param|query+allusers|witheditsonly}}",
+ "apihelp-query+allusers-param-activeusers": "{{doc-apihelp-param|query+allusers|activeusers|params=* $1 - Value of [[mw:Manual:$wgActiveUserDays]]|paramstart=2}}",
+ "apihelp-query+allusers-example-Y": "{{doc-apihelp-example|query+allusers}}",
+ "apihelp-query+backlinks-description": "{{doc-apihelp-description|query+backlinks}}",
+ "apihelp-query+backlinks-param-title": "{{doc-apihelp-param|query+backlinks|title}}",
+ "apihelp-query+backlinks-param-pageid": "{{doc-apihelp-param|query+backlinks|pageid}}",
+ "apihelp-query+backlinks-param-namespace": "{{doc-apihelp-param|query+backlinks|namespace}}",
+ "apihelp-query+backlinks-param-dir": "{{doc-apihelp-param|query+backlinks|dir}}",
+ "apihelp-query+backlinks-param-filterredir": "{{doc-apihelp-param|query+backlinks|filterredir}}",
+ "apihelp-query+backlinks-param-limit": "{{doc-apihelp-param|query+backlinks|limit}}",
+ "apihelp-query+backlinks-param-redirect": "{{doc-apihelp-param|query+backlinks|redirect}}",
+ "apihelp-query+backlinks-example-simple": "{{doc-apihelp-example|query+backlinks}}",
+ "apihelp-query+backlinks-example-generator": "{{doc-apihelp-example|query+backlinks}}",
+ "apihelp-query+blocks-description": "{{doc-apihelp-description|query+blocks}}",
+ "apihelp-query+blocks-param-start": "{{doc-apihelp-param|query+blocks|start}}",
+ "apihelp-query+blocks-param-end": "{{doc-apihelp-param|query+blocks|end}}",
+ "apihelp-query+blocks-param-ids": "{{doc-apihelp-param|query+blocks|ids}}",
+ "apihelp-query+blocks-param-users": "{{doc-apihelp-param|query+blocks|users}}",
+ "apihelp-query+blocks-param-ip": "{{doc-apihelp-param|query+blocks|ip|params=* $1 - Minimum CIDR prefix for IPv4\n* $2 - Minimum CIDR prefix for IPv6|paramstart=3}}",
+ "apihelp-query+blocks-param-limit": "{{doc-apihelp-param|query+blocks|limit}}",
+ "apihelp-query+blocks-param-prop": "{{doc-apihelp-param|query+blocks|prop}}",
+ "apihelp-query+blocks-param-show": "{{doc-apihelp-param|query+blocks|show}}",
+ "apihelp-query+blocks-example-simple": "{{doc-apihelp-example|query+blocks}}",
+ "apihelp-query+blocks-example-users": "{{doc-apihelp-example|query+blocks}}",
+ "apihelp-query+categories-description": "{{doc-apihelp-description|query+categories}}",
+ "apihelp-query+categories-param-prop": "{{doc-apihelp-param|query+categories|prop}}",
+ "apihelp-query+categories-param-show": "{{doc-apihelp-param|query+categories|show}}",
+ "apihelp-query+categories-param-limit": "{{doc-apihelp-param|query+categories|limit}}",
+ "apihelp-query+categories-param-categories": "{{doc-apihelp-param|query+categories|categories}}",
+ "apihelp-query+categories-param-dir": "{{doc-apihelp-param|query+categories|dir}}",
+ "apihelp-query+categories-example-simple": "{{doc-apihelp-example|query+categories}}",
+ "apihelp-query+categories-example-generator": "{{doc-apihelp-example|query+categories}}",
+ "apihelp-query+categoryinfo-description": "{{doc-apihelp-description|query+categoryinfo}}",
+ "apihelp-query+categoryinfo-example-simple": "{{doc-apihelp-example|query+categoryinfo}}",
+ "apihelp-query+categorymembers-description": "{{doc-apihelp-description|query+categorymembers}}",
+ "apihelp-query+categorymembers-param-title": "{{doc-apihelp-param|query+categorymembers|title}}",
+ "apihelp-query+categorymembers-param-pageid": "{{doc-apihelp-param|query+categorymembers|pageid}}",
+ "apihelp-query+categorymembers-param-prop": "{{doc-apihelp-param|query+categorymembers|prop}}",
+ "apihelp-query+categorymembers-param-namespace": "{{doc-apihelp-param|query+categorymembers|namespace}}",
+ "apihelp-query+categorymembers-param-type": "{{doc-apihelp-param|query+categorymembers|type}}",
+ "apihelp-query+categorymembers-param-limit": "{{doc-apihelp-param|query+categorymembers|limit}}",
+ "apihelp-query+categorymembers-param-sort": "{{doc-apihelp-param|query+categorymembers|sort}}",
+ "apihelp-query+categorymembers-param-dir": "{{doc-apihelp-param|query+categorymembers|dir}}",
+ "apihelp-query+categorymembers-param-start": "{{doc-apihelp-param|query+categorymembers|start}}",
+ "apihelp-query+categorymembers-param-end": "{{doc-apihelp-param|query+categorymembers|end}}",
+ "apihelp-query+categorymembers-param-starthexsortkey": "{{doc-apihelp-param|query+categorymembers|starthexsortkey}}",
+ "apihelp-query+categorymembers-param-endhexsortkey": "{{doc-apihelp-param|query+categorymembers|endhexsortkey}}",
+ "apihelp-query+categorymembers-param-startsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|startsortkeyprefix}}",
+ "apihelp-query+categorymembers-param-endsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|endsortkeyprefix}}",
+ "apihelp-query+categorymembers-param-startsortkey": "{{doc-apihelp-param|query+categorymembers|startsortkey}}",
+ "apihelp-query+categorymembers-param-endsortkey": "{{doc-apihelp-param|query+categorymembers|endsortkey}}",
+ "apihelp-query+categorymembers-example-simple": "{{doc-apihelp-example|query+categorymembers}}",
+ "apihelp-query+categorymembers-example-generator": "{{doc-apihelp-example|query+categorymembers}}",
+ "apihelp-query+contributors-description": "{{doc-apihelp-description|query+contributors}}",
+ "apihelp-query+contributors-param-group": "{{doc-apihelp-param|query+contributors|group}}",
+ "apihelp-query+contributors-param-excludegroup": "{{doc-apihelp-param|query+contributors|excludegroup}}",
+ "apihelp-query+contributors-param-rights": "{{doc-apihelp-param|query+contributors|rights}}",
+ "apihelp-query+contributors-param-excluderights": "{{doc-apihelp-param|query+contributors|excluderights}}",
+ "apihelp-query+contributors-param-limit": "{{doc-apihelp-param|query+contributors|limit}}",
+ "apihelp-query+contributors-example-simple": "{{doc-apihelp-example|query+contributors}}",
+ "apihelp-query+deletedrevisions-description": "{{doc-apihelp-description|query+deletedrevisions}}",
+ "apihelp-query+deletedrevisions-param-start": "{{doc-apihelp-param|query+deletedrevisions|start}}",
+ "apihelp-query+deletedrevisions-param-end": "{{doc-apihelp-param|query+deletedrevisions|end}}",
+ "apihelp-query+deletedrevisions-param-tag": "{{doc-apihelp-param|query+deletedrevisions|tag}}",
+ "apihelp-query+deletedrevisions-param-user": "{{doc-apihelp-param|query+deletedrevisions|user}}",
+ "apihelp-query+deletedrevisions-param-excludeuser": "{{doc-apihelp-param|query+deletedrevisions|excludeuser}}",
+ "apihelp-query+deletedrevisions-param-limit": "{{doc-apihelp-param|query+deletedrevisions|limit}}",
+ "apihelp-query+deletedrevisions-param-prop": "{{doc-apihelp-param|query+deletedrevisions|prop}}",
+ "apihelp-query+deletedrevisions-example-titles": "{{doc-apihelp-example|query+deletedrevisions}}",
+ "apihelp-query+deletedrevisions-example-revids": "{{doc-apihelp-example|query+deletedrevisions}}",
+ "apihelp-query+deletedrevs-description": "{{doc-apihelp-description|query+deletedrevs}}",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{doc-apihelp-paraminfo|query+deletedrevs|modes}}\n{{Identical|Mode}}",
+ "apihelp-query+deletedrevs-param-start": "{{doc-apihelp-param|query+deletedrevs|start}}",
+ "apihelp-query+deletedrevs-param-end": "{{doc-apihelp-param|query+deletedrevs|end}}",
+ "apihelp-query+deletedrevs-param-from": "{{doc-apihelp-param|query+deletedrevs|from}}",
+ "apihelp-query+deletedrevs-param-to": "{{doc-apihelp-param|query+deletedrevs|to}}",
+ "apihelp-query+deletedrevs-param-prefix": "{{doc-apihelp-param|query+deletedrevs|prefix}}",
+ "apihelp-query+deletedrevs-param-unique": "{{doc-apihelp-param|query+deletedrevs|unique}}",
+ "apihelp-query+deletedrevs-param-tag": "{{doc-apihelp-param|query+deletedrevs|tag}}",
+ "apihelp-query+deletedrevs-param-user": "{{doc-apihelp-param|query+deletedrevs|user}}",
+ "apihelp-query+deletedrevs-param-excludeuser": "{{doc-apihelp-param|query+deletedrevs|excludeuser}}",
+ "apihelp-query+deletedrevs-param-namespace": "{{doc-apihelp-param|query+deletedrevs|namespace}}",
+ "apihelp-query+deletedrevs-param-limit": "{{doc-apihelp-param|query+deletedrevs|limit}}",
+ "apihelp-query+deletedrevs-param-prop": "{{doc-apihelp-param|query+deletedrevs|prop}}",
+ "apihelp-query+deletedrevs-example-mode1": "{{doc-apihelp-example|query+deletedrevs}}",
+ "apihelp-query+deletedrevs-example-mode2": "{{doc-apihelp-example|query+deletedrevs}}",
+ "apihelp-query+deletedrevs-example-mode3-main": "{{doc-apihelp-example|query+deletedrevs}}",
+ "apihelp-query+deletedrevs-example-mode3-talk": "{{doc-apihelp-example|query+deletedrevs}}",
+ "apihelp-query+disabled-description": "{{doc-apihelp-description|query+disabled}}",
+ "apihelp-query+duplicatefiles-description": "{{doc-apihelp-description|query+duplicatefiles}}",
+ "apihelp-query+duplicatefiles-param-limit": "{{doc-apihelp-param|query+duplicatefiles|limit}}",
+ "apihelp-query+duplicatefiles-param-dir": "{{doc-apihelp-param|query+duplicatefiles|dir}}",
+ "apihelp-query+duplicatefiles-param-localonly": "{{doc-apihelp-param|query+duplicatefiles|localonly}}",
+ "apihelp-query+duplicatefiles-example-simple": "{{doc-apihelp-example|query+duplicatefiles}}",
+ "apihelp-query+duplicatefiles-example-generated": "{{doc-apihelp-example|query+duplicatefiles}}",
+ "apihelp-query+embeddedin-description": "{{doc-apihelp-description|query+embeddedin}}",
+ "apihelp-query+embeddedin-param-title": "{{doc-apihelp-param|query+embeddedin|title}}",
+ "apihelp-query+embeddedin-param-pageid": "{{doc-apihelp-param|query+embeddedin|pageid}}",
+ "apihelp-query+embeddedin-param-namespace": "{{doc-apihelp-param|query+embeddedin|namespace}}",
+ "apihelp-query+embeddedin-param-dir": "{{doc-apihelp-param|query+embeddedin|dir}}",
+ "apihelp-query+embeddedin-param-filterredir": "{{doc-apihelp-param|query+embeddedin|filterredir}}",
+ "apihelp-query+embeddedin-param-limit": "{{doc-apihelp-param|query+embeddedin|limit}}",
+ "apihelp-query+embeddedin-example-simple": "{{doc-apihelp-example|query+embeddedin}}",
+ "apihelp-query+embeddedin-example-generator": "{{doc-apihelp-example|query+embeddedin}}",
+ "apihelp-query+extlinks-description": "{{doc-apihelp-description|query+extlinks}}",
+ "apihelp-query+extlinks-param-limit": "{{doc-apihelp-param|query+extlinks|limit}}",
+ "apihelp-query+extlinks-param-protocol": "{{doc-apihelp-param|query+extlinks|protocol}}",
+ "apihelp-query+extlinks-param-query": "{{doc-apihelp-param|query+extlinks|query}}",
+ "apihelp-query+extlinks-param-expandurl": "{{doc-apihelp-param|query+extlinks|expandurl}}",
+ "apihelp-query+extlinks-example-simple": "{{doc-apihelp-example|query+extlinks}}",
+ "apihelp-query+exturlusage-description": "{{doc-apihelp-description|query+exturlusage}}",
+ "apihelp-query+exturlusage-param-prop": "{{doc-apihelp-param|query+exturlusage|prop}}",
+ "apihelp-query+exturlusage-param-protocol": "{{doc-apihelp-param|query+exturlusage|protocol}}",
+ "apihelp-query+exturlusage-param-query": "{{doc-apihelp-param|query+exturlusage|query}}",
+ "apihelp-query+exturlusage-param-namespace": "{{doc-apihelp-param|query+exturlusage|namespace}}",
+ "apihelp-query+exturlusage-param-limit": "{{doc-apihelp-param|query+exturlusage|limit}}",
+ "apihelp-query+exturlusage-param-expandurl": "{{doc-apihelp-param|query+exturlusage|expandurl}}",
+ "apihelp-query+exturlusage-example-simple": "{{doc-apihelp-example|query+exturlusage}}",
+ "apihelp-query+filearchive-description": "{{doc-apihelp-description|query+filearchive}}",
+ "apihelp-query+filearchive-param-from": "{{doc-apihelp-param|query+filearchive|from}}",
+ "apihelp-query+filearchive-param-to": "{{doc-apihelp-param|query+filearchive|to}}",
+ "apihelp-query+filearchive-param-prefix": "{{doc-apihelp-param|query+filearchive|prefix}}",
+ "apihelp-query+filearchive-param-limit": "{{doc-apihelp-param|query+filearchive|limit}}",
+ "apihelp-query+filearchive-param-dir": "{{doc-apihelp-param|query+filearchive|dir}}",
+ "apihelp-query+filearchive-param-sha1": "{{doc-apihelp-param|query+filearchive|sha1}}",
+ "apihelp-query+filearchive-param-sha1base36": "{{doc-apihelp-param|query+filearchive|sha1base36}}",
+ "apihelp-query+filearchive-param-prop": "{{doc-apihelp-param|query+filearchive|prop}}",
+ "apihelp-query+filearchive-example-simple": "{{doc-apihelp-example|query+filearchive}}",
+ "apihelp-query+filerepoinfo-description": "{{doc-apihelp-description|query+filerepoinfo}}",
+ "apihelp-query+filerepoinfo-param-prop": "{{doc-apihelp-param|query+filerepoinfo|prop}}",
+ "apihelp-query+filerepoinfo-example-simple": "{{doc-apihelp-example|query+filerepoinfo}}",
+ "apihelp-query+fileusage-description": "{{doc-apihelp-description|query+fileusage}}",
+ "apihelp-query+fileusage-param-prop": "{{doc-apihelp-param|query+fileusage|prop}}",
+ "apihelp-query+fileusage-param-namespace": "{{doc-apihelp-param|query+fileusage|namespace}}",
+ "apihelp-query+fileusage-param-limit": "{{doc-apihelp-param|query+fileusage|limit}}",
+ "apihelp-query+fileusage-param-show": "{{doc-apihelp-param|query+fileusage|show}}",
+ "apihelp-query+fileusage-example-simple": "{{doc-apihelp-example|query+fileusage}}",
+ "apihelp-query+fileusage-example-generator": "{{doc-apihelp-example|query+fileusage}}",
+ "apihelp-query+imageinfo-description": "{{doc-apihelp-description|query+imageinfo}}",
+ "apihelp-query+imageinfo-param-prop": "{{doc-apihelp-param|query+imageinfo|prop|paramvalues=1}}",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+imageinfo|prop|timestamp}}",
+ "apihelp-query+imageinfo-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+imageinfo|prop|user}}",
+ "apihelp-query+imageinfo-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+imageinfo|prop|userid}}",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+imageinfo|prop|comment}}",
+ "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+imageinfo|prop|parsedcomment}}",
+ "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "{{doc-apihelp-paramvalue|query+imageinfo|prop|canonicaltitle}}",
+ "apihelp-query+imageinfo-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+imageinfo|prop|url}}",
+ "apihelp-query+imageinfo-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+imageinfo|prop|size}}",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "{{doc-apihelp-paramvalue|query+imageinfo|prop|dimensions}}",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "{{doc-apihelp-paramvalue|query+imageinfo|prop|sha1}}",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "{{doc-apihelp-paramvalue|query+imageinfo|prop|mime}}",
+ "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "{{doc-apihelp-paramvalue|query+imageinfo|prop|thumbmime}}",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "{{doc-apihelp-paramvalue|query+imageinfo|prop|mediatype}}",
+ "apihelp-query+imageinfo-paramvalue-prop-metadata": "{{doc-apihelp-paramvalue|query+imageinfo|prop|metadata}}",
+ "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "{{doc-apihelp-paramvalue|query+imageinfo|prop|commonmetadata}}",
+ "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "{{doc-apihelp-paramvalue|query+imageinfo|prop|extmetadata}}",
+ "apihelp-query+imageinfo-paramvalue-prop-archivename": "{{doc-apihelp-paramvalue|query+imageinfo|prop|archivename}}",
+ "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "{{doc-apihelp-paramvalue|query+imageinfo|prop|bitdepth}}",
+ "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "{{doc-apihelp-paramvalue|query+imageinfo|prop|uploadwarning}}",
+ "apihelp-query+imageinfo-param-limit": "{{doc-apihelp-param|query+imageinfo|limit}}",
+ "apihelp-query+imageinfo-param-start": "{{doc-apihelp-param|query+imageinfo|start}}",
+ "apihelp-query+imageinfo-param-end": "{{doc-apihelp-param|query+imageinfo|end}}",
+ "apihelp-query+imageinfo-param-urlwidth": "{{doc-apihelp-param|query+imageinfo|urlwidth|params=* $1 - Maximum number of thumbnails per query|paramstart=2}}",
+ "apihelp-query+imageinfo-param-urlheight": "{{doc-apihelp-param|query+imageinfo|urlheight}}",
+ "apihelp-query+imageinfo-param-metadataversion": "{{doc-apihelp-param|query+imageinfo|metadataversion}}",
+ "apihelp-query+imageinfo-param-extmetadatalanguage": "{{doc-apihelp-param|query+imageinfo|extmetadatalanguage}}",
+ "apihelp-query+imageinfo-param-extmetadatamultilang": "{{doc-apihelp-param|query+imageinfo|extmetadatamultilang}}",
+ "apihelp-query+imageinfo-param-extmetadatafilter": "{{doc-apihelp-param|query+imageinfo|extmetadatafilter}}",
+ "apihelp-query+imageinfo-param-urlparam": "{{doc-apihelp-param|query+imageinfo|urlparam}}",
+ "apihelp-query+imageinfo-param-localonly": "{{doc-apihelp-param|query+imageinfo|localonly}}",
+ "apihelp-query+imageinfo-example-simple": "{{doc-apihelp-example|query+imageinfo}}",
+ "apihelp-query+imageinfo-example-dated": "{{doc-apihelp-example|query+imageinfo}}",
+ "apihelp-query+images-description": "{{doc-apihelp-description|query+images}}",
+ "apihelp-query+images-param-limit": "{{doc-apihelp-param|query+images|limit}}",
+ "apihelp-query+images-param-images": "{{doc-apihelp-param|query+images|images}}",
+ "apihelp-query+images-param-dir": "{{doc-apihelp-param|query+images|dir}}",
+ "apihelp-query+images-example-simple": "{{doc-apihelp-example|query+images}}",
+ "apihelp-query+images-example-generator": "{{doc-apihelp-example|query+images}}",
+ "apihelp-query+imageusage-description": "{{doc-apihelp-description|query+imageusage}}",
+ "apihelp-query+imageusage-param-title": "{{doc-apihelp-param|query+imageusage|title}}",
+ "apihelp-query+imageusage-param-pageid": "{{doc-apihelp-param|query+imageusage|pageid}}",
+ "apihelp-query+imageusage-param-namespace": "{{doc-apihelp-param|query+imageusage|namespace}}",
+ "apihelp-query+imageusage-param-dir": "{{doc-apihelp-param|query+imageusage|dir}}",
+ "apihelp-query+imageusage-param-filterredir": "{{doc-apihelp-param|query+imageusage|filterredir}}",
+ "apihelp-query+imageusage-param-limit": "{{doc-apihelp-param|query+imageusage|limit}}",
+ "apihelp-query+imageusage-param-redirect": "{{doc-apihelp-param|query+imageusage|redirect}}",
+ "apihelp-query+imageusage-example-simple": "{{doc-apihelp-example|query+imageusage}}",
+ "apihelp-query+imageusage-example-generator": "{{doc-apihelp-example|query+imageusage}}",
+ "apihelp-query+info-description": "{{doc-apihelp-description|query+info}}",
+ "apihelp-query+info-param-prop": "{{doc-apihelp-param|query+info|prop|paramvalues=1}}",
+ "apihelp-query+info-paramvalue-prop-protection": "{{doc-apihelp-paramvalue|query+info|prop|protection}}",
+ "apihelp-query+info-paramvalue-prop-talkid": "{{doc-apihelp-paramvalue|query+info|prop|talkid}}",
+ "apihelp-query+info-paramvalue-prop-watched": "{{doc-apihelp-paramvalue|query+info|prop|watched}}",
+ "apihelp-query+info-paramvalue-prop-watchers": "{{doc-apihelp-paramvalue|query+info|prop|watchers}}",
+ "apihelp-query+info-paramvalue-prop-notificationtimestamp": "{{doc-apihelp-paramvalue|query+info|prop|notificationtimestamp}}",
+ "apihelp-query+info-paramvalue-prop-subjectid": "{{doc-apihelp-paramvalue|query+info|prop|subjectid}}",
+ "apihelp-query+info-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+info|prop|url}}",
+ "apihelp-query+info-paramvalue-prop-readable": "{{doc-apihelp-paramvalue|query+info|prop|readable}}",
+ "apihelp-query+info-paramvalue-prop-preload": "{{doc-apihelp-paramvalue|query+info|prop|preload}}",
+ "apihelp-query+info-paramvalue-prop-displaytitle": "{{doc-apihelp-paramvalue|query+info|prop|displaytitle}}",
+ "apihelp-query+info-param-testactions": "{{doc-apihelp-param|query+info|testactions}}",
+ "apihelp-query+info-param-token": "{{doc-apihelp-param|query+info|token}}",
+ "apihelp-query+info-example-simple": "{{doc-apihelp-example|query+info}}",
+ "apihelp-query+info-example-protection": "{{doc-apihelp-example|query+info}}",
+ "apihelp-query+iwbacklinks-description": "{{doc-apihelp-description|query+iwbacklinks}}",
+ "apihelp-query+iwbacklinks-param-prefix": "{{doc-apihelp-param|query+iwbacklinks|prefix}}",
+ "apihelp-query+iwbacklinks-param-title": "{{doc-apihelp-param|query+iwbacklinks|title}}",
+ "apihelp-query+iwbacklinks-param-limit": "{{doc-apihelp-param|query+iwbacklinks|limit}}",
+ "apihelp-query+iwbacklinks-param-prop": "{{doc-apihelp-param|query+iwbacklinks|prop}}",
+ "apihelp-query+iwbacklinks-param-dir": "{{doc-apihelp-param|query+iwbacklinks|dir}}",
+ "apihelp-query+iwbacklinks-example-simple": "{{doc-apihelp-example|query+iwbacklinks}}",
+ "apihelp-query+iwbacklinks-example-generator": "{{doc-apihelp-example|query+iwbacklinks}}",
+ "apihelp-query+iwlinks-description": "{{doc-apihelp-description|query+iwlinks}}",
+ "apihelp-query+iwlinks-param-url": "{{doc-apihelp-param|query+iwlinks|url}}",
+ "apihelp-query+iwlinks-param-prop": "{{doc-apihelp-param|query+iwlinks|prop}}",
+ "apihelp-query+iwlinks-param-limit": "{{doc-apihelp-param|query+iwlinks|limit}}",
+ "apihelp-query+iwlinks-param-prefix": "{{doc-apihelp-param|query+iwlinks|prefix}}",
+ "apihelp-query+iwlinks-param-title": "{{doc-apihelp-param|query+iwlinks|title}}",
+ "apihelp-query+iwlinks-param-dir": "{{doc-apihelp-param|query+iwlinks|dir}}",
+ "apihelp-query+iwlinks-example-simple": "{{doc-apihelp-example|query+iwlinks}}",
+ "apihelp-query+langbacklinks-description": "{{doc-apihelp-description|query+langbacklinks}}",
+ "apihelp-query+langbacklinks-param-lang": "{{doc-apihelp-param|query+langbacklinks|lang}}",
+ "apihelp-query+langbacklinks-param-title": "{{doc-apihelp-param|query+langbacklinks|title}}",
+ "apihelp-query+langbacklinks-param-limit": "{{doc-apihelp-param|query+langbacklinks|limit}}",
+ "apihelp-query+langbacklinks-param-prop": "{{doc-apihelp-param|query+langbacklinks|prop}}",
+ "apihelp-query+langbacklinks-param-dir": "{{doc-apihelp-param|query+langbacklinks|dir}}",
+ "apihelp-query+langbacklinks-example-simple": "{{doc-apihelp-example|query+langbacklinks}}",
+ "apihelp-query+langbacklinks-example-generator": "{{doc-apihelp-example|query+langbacklinks}}",
+ "apihelp-query+langlinks-description": "{{doc-apihelp-description|query+langlinks}}",
+ "apihelp-query+langlinks-param-limit": "{{doc-apihelp-param|query+langlinks|limit}}",
+ "apihelp-query+langlinks-param-url": "{{doc-apihelp-param|query+langlinks|url}}",
+ "apihelp-query+langlinks-param-prop": "{{doc-apihelp-param|query+langlinks|prop}}",
+ "apihelp-query+langlinks-param-lang": "{{doc-apihelp-param|query+langlinks|lang}}",
+ "apihelp-query+langlinks-param-title": "{{doc-apihelp-param|query+langlinks|title}}",
+ "apihelp-query+langlinks-param-dir": "{{doc-apihelp-param|query+langlinks|dir}}",
+ "apihelp-query+langlinks-param-inlanguagecode": "{{doc-apihelp-param|query+langlinks|inlanguagecode}}",
+ "apihelp-query+langlinks-example-simple": "{{doc-apihelp-example|query+langlinks}}",
+ "apihelp-query+links-description": "{{doc-apihelp-description|query+links}}",
+ "apihelp-query+links-param-namespace": "{{doc-apihelp-param|query+links|namespace}}",
+ "apihelp-query+links-param-limit": "{{doc-apihelp-param|query+links|limit}}",
+ "apihelp-query+links-param-titles": "{{doc-apihelp-param|query+links|titles}}",
+ "apihelp-query+links-param-dir": "{{doc-apihelp-param|query+links|dir}}",
+ "apihelp-query+links-example-simple": "{{doc-apihelp-example|query+links}}",
+ "apihelp-query+links-example-generator": "{{doc-apihelp-example|query+links}}",
+ "apihelp-query+links-example-namespaces": "{{doc-apihelp-example|query+links}}",
+ "apihelp-query+linkshere-description": "{{doc-apihelp-description|query+linkshere}}",
+ "apihelp-query+linkshere-param-prop": "{{doc-apihelp-param|query+linkshere|prop}}",
+ "apihelp-query+linkshere-param-namespace": "{{doc-apihelp-param|query+linkshere|namespace}}",
+ "apihelp-query+linkshere-param-limit": "{{doc-apihelp-param|query+linkshere|limit}}",
+ "apihelp-query+linkshere-param-show": "{{doc-apihelp-param|query+linkshere|show}}",
+ "apihelp-query+linkshere-example-simple": "{{doc-apihelp-example|query+linkshere}}",
+ "apihelp-query+linkshere-example-generator": "{{doc-apihelp-example|query+linkshere}}",
+ "apihelp-query+logevents-description": "{{doc-apihelp-description|query+logevents}}",
+ "apihelp-query+logevents-param-prop": "{{doc-apihelp-param|query+logevents|prop}}",
+ "apihelp-query+logevents-param-type": "{{doc-apihelp-param|query+logevents|type}}",
+ "apihelp-query+logevents-param-action": "{{doc-apihelp-param|query+logevents|action}}",
+ "apihelp-query+logevents-param-start": "{{doc-apihelp-param|query+logevents|start}}",
+ "apihelp-query+logevents-param-end": "{{doc-apihelp-param|query+logevents|end}}",
+ "apihelp-query+logevents-param-user": "{{doc-apihelp-param|query+logevents|user}}",
+ "apihelp-query+logevents-param-title": "{{doc-apihelp-param|query+logevents|title}}",
+ "apihelp-query+logevents-param-namespace": "{{doc-apihelp-param|query+logevents|namespace}}",
+ "apihelp-query+logevents-param-prefix": "{{doc-apihelp-param|query+logevents|prefix}}",
+ "apihelp-query+logevents-param-tag": "{{doc-apihelp-param|query+logevents|tag}}",
+ "apihelp-query+logevents-param-limit": "{{doc-apihelp-param|query+logevents|limit}}",
+ "apihelp-query+logevents-example-simple": "{{doc-apihelp-example|query+logevents}}",
+ "apihelp-query+pagepropnames-description": "{{doc-apihelp-description|query+pagepropnames}}",
+ "apihelp-query+pagepropnames-param-limit": "{{doc-apihelp-param|query+pagepropnames|limit}}",
+ "apihelp-query+pagepropnames-example-simple": "{{doc-apihelp-example|query+pagepropnames}}",
+ "apihelp-query+pageprops-description": "{{doc-apihelp-description|query+pageprops}}",
+ "apihelp-query+pageprops-param-prop": "{{doc-apihelp-param|query+pageprops|prop}}",
+ "apihelp-query+pageprops-example-simple": "{{doc-apihelp-example|query+pageprops}}",
+ "apihelp-query+pageswithprop-description": "{{doc-apihelp-description|query+pageswithprop}}",
+ "apihelp-query+pageswithprop-param-propname": "{{doc-apihelp-param|query+pageswithprop|propname}}",
+ "apihelp-query+pageswithprop-param-prop": "{{doc-apihelp-param|query+pageswithprop|prop}}",
+ "apihelp-query+pageswithprop-param-limit": "{{doc-apihelp-param|query+pageswithprop|limit}}",
+ "apihelp-query+pageswithprop-param-dir": "{{doc-apihelp-param|query+pageswithprop|dir}}",
+ "apihelp-query+pageswithprop-example-simple": "{{doc-apihelp-example|query+pageswithprop}}",
+ "apihelp-query+pageswithprop-example-generator": "{{doc-apihelp-example|query+pageswithprop}}",
+ "apihelp-query+prefixsearch-description": "{{doc-apihelp-description|query+prefixsearch}}",
+ "apihelp-query+prefixsearch-param-search": "{{doc-apihelp-param|query+prefixsearch|search}}",
+ "apihelp-query+prefixsearch-param-namespace": "{{doc-apihelp-param|query+prefixsearch|namespace}}",
+ "apihelp-query+prefixsearch-param-limit": "{{doc-apihelp-param|query+prefixsearch|limit}}",
+ "apihelp-query+prefixsearch-param-offset": "{{doc-apihelp-param|query+prefixsearch|offset}}",
+ "apihelp-query+prefixsearch-example-simple": "{{doc-apihelp-example|query+prefixsearch}}",
+ "apihelp-query+protectedtitles-description": "{{doc-apihelp-description|query+protectedtitles}}",
+ "apihelp-query+protectedtitles-param-namespace": "{{doc-apihelp-param|query+protectedtitles|namespace}}",
+ "apihelp-query+protectedtitles-param-level": "{{doc-apihelp-param|query+protectedtitles|level}}",
+ "apihelp-query+protectedtitles-param-limit": "{{doc-apihelp-param|query+protectedtitles|limit}}",
+ "apihelp-query+protectedtitles-param-start": "{{doc-apihelp-param|query+protectedtitles|start}}",
+ "apihelp-query+protectedtitles-param-end": "{{doc-apihelp-param|query+protectedtitles|end}}",
+ "apihelp-query+protectedtitles-param-prop": "{{doc-apihelp-param|query+protectedtitles|prop}}",
+ "apihelp-query+protectedtitles-example-simple": "{{doc-apihelp-example|query+protectedtitles}}",
+ "apihelp-query+protectedtitles-example-generator": "{{doc-apihelp-example|query+protectedtitles}}",
+ "apihelp-query+querypage-description": "{{doc-apihelp-description|query+querypage}}",
+ "apihelp-query+querypage-param-page": "{{doc-apihelp-param|query+querypage|page}}",
+ "apihelp-query+querypage-param-limit": "{{doc-apihelp-param|query+querypage|limit}}",
+ "apihelp-query+querypage-example-ancientpages": "{{doc-apihelp-example|query+querypage}}",
+ "apihelp-query+random-description": "{{doc-apihelp-description|query+random}}",
+ "apihelp-query+random-param-namespace": "{{doc-apihelp-param|query+random|namespace}}",
+ "apihelp-query+random-param-limit": "{{doc-apihelp-param|query+random|limit}}",
+ "apihelp-query+random-param-redirect": "{{doc-apihelp-param|query+random|redirect}}",
+ "apihelp-query+random-example-simple": "{{doc-apihelp-example|query+random}}",
+ "apihelp-query+random-example-generator": "{{doc-apihelp-example|query+random}}",
+ "apihelp-query+recentchanges-description": "{{doc-apihelp-description|query+recentchanges}}",
+ "apihelp-query+recentchanges-param-start": "{{doc-apihelp-param|query+recentchanges|start}}",
+ "apihelp-query+recentchanges-param-end": "{{doc-apihelp-param|query+recentchanges|end}}",
+ "apihelp-query+recentchanges-param-namespace": "{{doc-apihelp-param|query+recentchanges|namespace}}",
+ "apihelp-query+recentchanges-param-user": "{{doc-apihelp-param|query+recentchanges|user}}",
+ "apihelp-query+recentchanges-param-excludeuser": "{{doc-apihelp-param|query+recentchanges|excludeuser}}",
+ "apihelp-query+recentchanges-param-tag": "{{doc-apihelp-param|query+recentchanges|tag}}",
+ "apihelp-query+recentchanges-param-prop": "{{doc-apihelp-param|query+recentchanges|prop}}",
+ "apihelp-query+recentchanges-param-token": "{{doc-apihelp-param|query+recentchanges|token}}",
+ "apihelp-query+recentchanges-param-show": "{{doc-apihelp-param|query+recentchanges|show}}",
+ "apihelp-query+recentchanges-param-limit": "{{doc-apihelp-param|query+recentchanges|limit}}",
+ "apihelp-query+recentchanges-param-type": "{{doc-apihelp-param|query+recentchanges|type}}",
+ "apihelp-query+recentchanges-param-toponly": "{{doc-apihelp-param|query+recentchanges|toponly}}",
+ "apihelp-query+recentchanges-example-simple": "{{doc-apihelp-example|query+recentchanges}}",
+ "apihelp-query+recentchanges-example-generator": "{{doc-apihelp-example|query+recentchanges}}",
+ "apihelp-query+redirects-description": "{{doc-apihelp-description|query+redirects}}",
+ "apihelp-query+redirects-param-prop": "{{doc-apihelp-param|query+redirects|prop}}",
+ "apihelp-query+redirects-param-namespace": "{{doc-apihelp-param|query+redirects|namespace}}",
+ "apihelp-query+redirects-param-limit": "{{doc-apihelp-param|query+redirects|limit}}",
+ "apihelp-query+redirects-param-show": "{{doc-apihelp-param|query+redirects|show}}",
+ "apihelp-query+redirects-example-simple": "{{doc-apihelp-example|query+redirects}}",
+ "apihelp-query+redirects-example-generator": "{{doc-apihelp-example|query+redirects}}",
+ "apihelp-query+revisions-description": "{{doc-apihelp-description|query+revisions}}",
+ "apihelp-query+revisions-paraminfo-singlepageonly": "{{doc-apihelp-paraminfo|query+revisions|singlepageonly}}",
+ "apihelp-query+revisions-param-startid": "{{doc-apihelp-param|query+revisions|startid}}",
+ "apihelp-query+revisions-param-endid": "{{doc-apihelp-param|query+revisions|endid}}",
+ "apihelp-query+revisions-param-start": "{{doc-apihelp-param|query+revisions|start}}",
+ "apihelp-query+revisions-param-end": "{{doc-apihelp-param|query+revisions|end}}",
+ "apihelp-query+revisions-param-user": "{{doc-apihelp-param|query+revisions|user}}",
+ "apihelp-query+revisions-param-excludeuser": "{{doc-apihelp-param|query+revisions|excludeuser}}",
+ "apihelp-query+revisions-param-tag": "{{doc-apihelp-param|query+revisions|tag}}",
+ "apihelp-query+revisions-param-token": "{{doc-apihelp-param|query+revisions|token}}",
+ "apihelp-query+revisions-example-content": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-last5": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-first5": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-first5-after": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-first5-not-localhost": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions-example-first5-user": "{{doc-apihelp-example|query+revisions}}",
+ "apihelp-query+revisions+base-param-prop": "{{doc-apihelp-param|query+revisions+base|prop|description=the \"prop\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-limit": "{{doc-apihelp-param|query+revisions+base|limit|description=the \"limit\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-expandtemplates": "{{doc-apihelp-param|query+revisions+base|expandtemplates|description=the \"expandtemplates\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-generatexml": "{{doc-apihelp-param|query+revisions+base|generatexml|description=the \"generatexml\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-parse": "{{doc-apihelp-param|query+revisions+base|parse|description=the \"parse\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-section": "{{doc-apihelp-param|query+revisions+base|section|description=the \"section\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-diffto": "{{doc-apihelp-param|query+revisions+base|diffto|description=the \"diffto\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-difftotext": "{{doc-apihelp-param|query+revisions+base|difftotext|description=the \"difftotext\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+revisions+base-param-contentformat": "{{doc-apihelp-param|query+revisions+base|contentformat|description=the \"contentformat\" parameter to revision querying modules|noseealso=1}}",
+ "apihelp-query+search-description": "{{doc-apihelp-description|query+search}}",
+ "apihelp-query+search-param-search": "{{doc-apihelp-param|query+search|search}}",
+ "apihelp-query+search-param-namespace": "{{doc-apihelp-param|query+search|namespace}}",
+ "apihelp-query+search-param-what": "{{doc-apihelp-param|query+search|what}}",
+ "apihelp-query+search-param-info": "{{doc-apihelp-param|query+search|info}}",
+ "apihelp-query+search-param-prop": "{{doc-apihelp-param|query+search|prop}}",
+ "apihelp-query+search-param-limit": "{{doc-apihelp-param|query+search|limit}}",
+ "apihelp-query+search-param-interwiki": "{{doc-apihelp-param|query+search|interwiki}}",
+ "apihelp-query+search-param-backend": "{{doc-apihelp-param|query+search|backend}}",
+ "apihelp-query+search-example-simple": "{{doc-apihelp-example|query+search}}",
+ "apihelp-query+search-example-text": "{{doc-apihelp-example|query+search}}",
+ "apihelp-query+search-example-generator": "{{doc-apihelp-example|query+search}}",
+ "apihelp-query+siteinfo-description": "{{doc-apihelp-description|query+siteinfo}}",
+ "apihelp-query+siteinfo-param-prop": "{{doc-apihelp-param|query+siteinfo|prop}}",
+ "apihelp-query+siteinfo-param-filteriw": "{{doc-apihelp-param|query+siteinfo|filteriw}}",
+ "apihelp-query+siteinfo-param-showalldb": "{{doc-apihelp-param|query+siteinfo|showalldb}}",
+ "apihelp-query+siteinfo-param-numberingroup": "{{doc-apihelp-param|query+siteinfo|numberingroup}}",
+ "apihelp-query+siteinfo-param-inlanguagecode": "{{doc-apihelp-param|query+siteinfo|inlanguagecode}}",
+ "apihelp-query+siteinfo-example-simple": "{{doc-apihelp-example|query+siteinfo}}",
+ "apihelp-query+siteinfo-example-interwiki": "{{doc-apihelp-example|query+siteinfo}}",
+ "apihelp-query+siteinfo-example-replag": "{{doc-apihelp-example|query+siteinfo}}",
+ "apihelp-query+stashimageinfo-description": "{{doc-apihelp-description|query+stashimageinfo}}",
+ "apihelp-query+stashimageinfo-param-filekey": "{{doc-apihelp-param|query+stashimageinfo|filekey}}",
+ "apihelp-query+stashimageinfo-param-sessionkey": "{{doc-apihelp-param|query+stashimageinfo|sessionkey}}",
+ "apihelp-query+stashimageinfo-example-simple": "{{doc-apihelp-example|query+stashimageinfo}}",
+ "apihelp-query+stashimageinfo-example-params": "{{doc-apihelp-example|query+stashimageinfo}}",
+ "apihelp-query+tags-description": "{{doc-apihelp-description|query+tags}}",
+ "apihelp-query+tags-param-limit": "{{doc-apihelp-param|query+tags|limit}}",
+ "apihelp-query+tags-param-prop": "{{doc-apihelp-param|query+tags|prop}}",
+ "apihelp-query+tags-example-simple": "{{doc-apihelp-example|query+tags}}",
+ "apihelp-query+templates-description": "{{doc-apihelp-description|query+templates}}",
+ "apihelp-query+templates-param-namespace": "{{doc-apihelp-param|query+templates|namespace}}",
+ "apihelp-query+templates-param-limit": "{{doc-apihelp-param|query+templates|limit}}",
+ "apihelp-query+templates-param-templates": "{{doc-apihelp-param|query+templates|templates}}",
+ "apihelp-query+templates-param-dir": "{{doc-apihelp-param|query+templates|dir}}",
+ "apihelp-query+templates-example-simple": "{{doc-apihelp-example|query+templates}}",
+ "apihelp-query+templates-example-generator": "{{doc-apihelp-example|query+templates}}",
+ "apihelp-query+templates-example-namespaces": "{{doc-apihelp-example|query+templates}}",
+ "apihelp-query+tokens-description": "{{doc-apihelp-description|query+tokens}}",
+ "apihelp-query+tokens-param-type": "{{doc-apihelp-param|query+tokens|type}}",
+ "apihelp-query+tokens-example-simple": "{{doc-apihelp-example|query+tokens}}",
+ "apihelp-query+tokens-example-types": "{{doc-apihelp-example|query+tokens}}",
+ "apihelp-query+transcludedin-description": "{{doc-apihelp-description|query+transcludedin}}",
+ "apihelp-query+transcludedin-param-prop": "{{doc-apihelp-param|query+transcludedin|prop}}",
+ "apihelp-query+transcludedin-param-namespace": "{{doc-apihelp-param|query+transcludedin|namespace}}",
+ "apihelp-query+transcludedin-param-limit": "{{doc-apihelp-param|query+transcludedin|limit}}",
+ "apihelp-query+transcludedin-param-show": "{{doc-apihelp-param|query+transcludedin|show}}",
+ "apihelp-query+transcludedin-example-simple": "{{doc-apihelp-example|query+transcludedin}}",
+ "apihelp-query+transcludedin-example-generator": "{{doc-apihelp-example|query+transcludedin}}",
+ "apihelp-query+usercontribs-description": "{{doc-apihelp-description|query+usercontribs}}",
+ "apihelp-query+usercontribs-param-limit": "{{doc-apihelp-param|query+usercontribs|limit}}",
+ "apihelp-query+usercontribs-param-start": "{{doc-apihelp-param|query+usercontribs|start}}",
+ "apihelp-query+usercontribs-param-end": "{{doc-apihelp-param|query+usercontribs|end}}",
+ "apihelp-query+usercontribs-param-user": "{{doc-apihelp-param|query+usercontribs|user}}",
+ "apihelp-query+usercontribs-param-userprefix": "{{doc-apihelp-param|query+usercontribs|userprefix}}",
+ "apihelp-query+usercontribs-param-namespace": "{{doc-apihelp-param|query+usercontribs|namespace}}",
+ "apihelp-query+usercontribs-param-prop": "{{doc-apihelp-param|query+usercontribs|prop}}",
+ "apihelp-query+usercontribs-param-show": "{{doc-apihelp-param|query+usercontribs|show|params=* $1 - Value of [[mw:Manual:$RCMaxAge|$RCMaxAge]]|paramstart=2}}",
+ "apihelp-query+usercontribs-param-tag": "{{doc-apihelp-param|query+usercontribs|tag}}",
+ "apihelp-query+usercontribs-param-toponly": "{{doc-apihelp-param|query+usercontribs|toponly}}",
+ "apihelp-query+usercontribs-example-user": "{{doc-apihelp-example|query+usercontribs}}",
+ "apihelp-query+usercontribs-example-ipprefix": "{{doc-apihelp-example|query+usercontribs}}",
+ "apihelp-query+userinfo-description": "{{doc-apihelp-description|query+userinfo}}",
+ "apihelp-query+userinfo-param-prop": "{{doc-apihelp-param|query+userinfo|prop|params=* $1 - Maximum value for the \"unreadcount\" property.\n$2 - Return value when there are more unread pages.|paramstart=3}}",
+ "apihelp-query+userinfo-example-simple": "{{doc-apihelp-example|query+userinfo}}",
+ "apihelp-query+userinfo-example-data": "{{doc-apihelp-example|query+userinfo}}",
+ "apihelp-query+users-description": "{{doc-apihelp-description|query+users}}",
+ "apihelp-query+users-param-prop": "{{doc-apihelp-param|query+users|prop}}",
+ "apihelp-query+users-param-users": "{{doc-apihelp-param|query+users|users}}",
+ "apihelp-query+users-param-token": "{{doc-apihelp-param|query+users|token}}",
+ "apihelp-query+users-example-simple": "{{doc-apihelp-example|query+users}}",
+ "apihelp-query+watchlist-description": "{{doc-apihelp-description|query+watchlist}}",
+ "apihelp-query+watchlist-param-allrev": "{{doc-apihelp-param|query+watchlist|allrev}}",
+ "apihelp-query+watchlist-param-start": "{{doc-apihelp-param|query+watchlist|start}}",
+ "apihelp-query+watchlist-param-end": "{{doc-apihelp-param|query+watchlist|end}}",
+ "apihelp-query+watchlist-param-namespace": "{{doc-apihelp-param|query+watchlist|namespace}}",
+ "apihelp-query+watchlist-param-user": "{{doc-apihelp-param|query+watchlist|user}}",
+ "apihelp-query+watchlist-param-excludeuser": "{{doc-apihelp-param|query+watchlist|excludeuser}}",
+ "apihelp-query+watchlist-param-limit": "{{doc-apihelp-param|query+watchlist|limit}}",
+ "apihelp-query+watchlist-param-prop": "{{doc-apihelp-param|query+watchlist|prop}}",
+ "apihelp-query+watchlist-param-show": "{{doc-apihelp-param|query+watchlist|show}}",
+ "apihelp-query+watchlist-param-type": "{{doc-apihelp-param|query+watchlist|type}}",
+ "apihelp-query+watchlist-param-owner": "{{doc-apihelp-param|query+watchlist|owner}}",
+ "apihelp-query+watchlist-param-token": "{{doc-apihelp-param|query+watchlist|token}}",
+ "apihelp-query+watchlist-example-simple": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-props": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-allrev": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-generator": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-generator-rev": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlist-example-wlowner": "{{doc-apihelp-example|query+watchlist}}",
+ "apihelp-query+watchlistraw-description": "{{doc-apihelp-description|query+watchlistraw}}",
+ "apihelp-query+watchlistraw-param-namespace": "{{doc-apihelp-param|query+watchlistraw|namespace}}",
+ "apihelp-query+watchlistraw-param-limit": "{{doc-apihelp-param|query+watchlistraw|limit}}",
+ "apihelp-query+watchlistraw-param-prop": "{{doc-apihelp-param|query+watchlistraw|prop}}",
+ "apihelp-query+watchlistraw-param-show": "{{doc-apihelp-param|query+watchlistraw|show}}",
+ "apihelp-query+watchlistraw-param-owner": "{{doc-apihelp-param|query+watchlistraw|owner}}",
+ "apihelp-query+watchlistraw-param-token": "{{doc-apihelp-param|query+watchlistraw|token}}",
+ "apihelp-query+watchlistraw-example-simple": "{{doc-apihelp-example|query+watchlistraw}}",
+ "apihelp-query+watchlistraw-example-generator": "{{doc-apihelp-example|query+watchlistraw}}",
+ "apihelp-revisiondelete-description": "{{doc-apihelp-description|revisiondelete}}",
+ "apihelp-revisiondelete-param-type": "{{doc-apihelp-param|revisiondelete|type}}",
+ "apihelp-revisiondelete-param-target": "{{doc-apihelp-param|revisiondelete|target}}",
+ "apihelp-revisiondelete-param-ids": "{{doc-apihelp-param|revisiondelete|ids}}",
+ "apihelp-revisiondelete-param-hide": "{{doc-apihelp-param|revisiondelete|hide}}",
+ "apihelp-revisiondelete-param-show": "{{doc-apihelp-param|revisiondelete|show}}",
+ "apihelp-revisiondelete-param-suppress": "{{doc-apihelp-param|revisiondelete|suppress}}",
+ "apihelp-revisiondelete-param-reason": "{{doc-apihelp-param|revisiondelete|reason}}",
+ "apihelp-revisiondelete-example-revision": "{{doc-apihelp-example|revisiondelete}}",
+ "apihelp-revisiondelete-example-log": "{{doc-apihelp-example|revisiondelete}}",
+ "apihelp-rollback-description": "{{doc-apihelp-description|rollback}}",
+ "apihelp-rollback-param-title": "{{doc-apihelp-param|rollback|title}}",
+ "apihelp-rollback-param-pageid": "{{doc-apihelp-param|rollback|pageid}}",
+ "apihelp-rollback-param-user": "{{doc-apihelp-param|rollback|user}}",
+ "apihelp-rollback-param-summary": "{{doc-apihelp-param|rollback|summary}}",
+ "apihelp-rollback-param-markbot": "{{doc-apihelp-param|rollback|markbot}}",
+ "apihelp-rollback-param-watchlist": "{{doc-apihelp-param|rollback|watchlist}}",
+ "apihelp-rollback-example-simple": "{{doc-apihelp-example|rollback}}",
+ "apihelp-rollback-example-summary": "{{doc-apihelp-example|rollback}}",
+ "apihelp-rsd-description": "{{doc-apihelp-description|rsd}}",
+ "apihelp-rsd-example-simple": "{{doc-apihelp-example|rsd}}",
+ "apihelp-setnotificationtimestamp-description": "{{doc-apihelp-description|setnotificationtimestamp}}",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "{{doc-apihelp-param|setnotificationtimestamp|entirewatchlist}}",
+ "apihelp-setnotificationtimestamp-param-timestamp": "{{doc-apihelp-param|setnotificationtimestamp|timestamp}}",
+ "apihelp-setnotificationtimestamp-param-torevid": "{{doc-apihelp-param|setnotificationtimestamp|torevid}}",
+ "apihelp-setnotificationtimestamp-param-newerthanrevid": "{{doc-apihelp-param|setnotificationtimestamp|newerthanrevid}}",
+ "apihelp-setnotificationtimestamp-example-all": "{{doc-apihelp-example|setnotificationtimestamp}}",
+ "apihelp-setnotificationtimestamp-example-page": "{{doc-apihelp-example|setnotificationtimestamp}}",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "{{doc-apihelp-example|setnotificationtimestamp}}",
+ "apihelp-setnotificationtimestamp-example-allpages": "{{doc-apihelp-example|setnotificationtimestamp}}",
+ "apihelp-tag-description": "{{doc-apihelp-description|tag}}",
+ "apihelp-tag-param-rcid": "{{doc-apihelp-param|tag|rcid}}",
+ "apihelp-tag-param-revid": "{{doc-apihelp-param|tag|revid}}",
+ "apihelp-tag-param-logid": "{{doc-apihelp-param|tag|logid}}",
+ "apihelp-tag-param-add": "{{doc-apihelp-param|tag|add}}",
+ "apihelp-tag-param-remove": "{{doc-apihelp-param|tag|remove}}",
+ "apihelp-tag-param-reason": "{{doc-apihelp-param|tag|reason}}",
+ "apihelp-tag-example-rev": "{{doc-apihelp-example|tag}}",
+ "apihelp-tag-example-log": "{{doc-apihelp-example|tag}}",
+ "apihelp-tokens-description": "{{doc-apihelp-description|tokens}}",
+ "apihelp-tokens-param-type": "{{doc-apihelp-param|tokens|type}}",
+ "apihelp-tokens-example-edit": "{{doc-apihelp-example|tokens}}",
+ "apihelp-tokens-example-emailmove": "{{doc-apihelp-example|tokens}}",
+ "apihelp-unblock-description": "{{doc-apihelp-description|unblock}}",
+ "apihelp-unblock-param-id": "{{doc-apihelp-param|unblock|id}}",
+ "apihelp-unblock-param-user": "{{doc-apihelp-param|unblock|user}}",
+ "apihelp-unblock-param-reason": "{{doc-apihelp-param|unblock|reason}}",
+ "apihelp-unblock-example-id": "{{doc-apihelp-example|unblock}}",
+ "apihelp-unblock-example-user": "{{doc-apihelp-example|unblock}}",
+ "apihelp-undelete-description": "{{doc-apihelp-description|undelete}}",
+ "apihelp-undelete-param-title": "{{doc-apihelp-param|undelete|title}}",
+ "apihelp-undelete-param-reason": "{{doc-apihelp-param|undelete|reason}}",
+ "apihelp-undelete-param-timestamps": "{{doc-apihelp-param|undelete|timestamps}}",
+ "apihelp-undelete-param-fileids": "{{doc-apihelp-param|undelete|fileids}}",
+ "apihelp-undelete-param-watchlist": "{{doc-apihelp-param|undelete|watchlist}}",
+ "apihelp-undelete-example-page": "{{doc-apihelp-example|undelete}}",
+ "apihelp-undelete-example-revisions": "{{doc-apihelp-example|undelete}}",
+ "apihelp-upload-description": "{{doc-apihelp-description|upload}}",
+ "apihelp-upload-param-filename": "{{doc-apihelp-param|upload|filename}}",
+ "apihelp-upload-param-comment": "{{doc-apihelp-param|upload|comment}}",
+ "apihelp-upload-param-text": "{{doc-apihelp-param|upload|text}}",
+ "apihelp-upload-param-watch": "{{doc-apihelp-param|upload|watch}}",
+ "apihelp-upload-param-watchlist": "{{doc-apihelp-param|upload|watchlist}}",
+ "apihelp-upload-param-ignorewarnings": "{{doc-apihelp-param|upload|ignorewarnings}}",
+ "apihelp-upload-param-file": "{{doc-apihelp-param|upload|file}}",
+ "apihelp-upload-param-url": "{{doc-apihelp-param|upload|url}}",
+ "apihelp-upload-param-filekey": "{{doc-apihelp-param|upload|filekey}}",
+ "apihelp-upload-param-sessionkey": "{{doc-apihelp-param|upload|sessionkey}}",
+ "apihelp-upload-param-stash": "{{doc-apihelp-param|upload|stash}}",
+ "apihelp-upload-param-filesize": "{{doc-apihelp-param|upload|filesize}}",
+ "apihelp-upload-param-offset": "{{doc-apihelp-param|upload|offset}}",
+ "apihelp-upload-param-chunk": "{{doc-apihelp-param|upload|chunk}}",
+ "apihelp-upload-param-async": "{{doc-apihelp-param|upload|async}}",
+ "apihelp-upload-param-asyncdownload": "{{doc-apihelp-param|upload|asyncdownload}}",
+ "apihelp-upload-param-leavemessage": "{{doc-apihelp-param|upload|leavemessage}}",
+ "apihelp-upload-param-statuskey": "{{doc-apihelp-param|upload|statuskey}}",
+ "apihelp-upload-param-checkstatus": "{{doc-apihelp-param|upload|checkstatus}}",
+ "apihelp-upload-example-url": "{{doc-apihelp-example|upload}}",
+ "apihelp-upload-example-filekey": "{{doc-apihelp-example|upload}}",
+ "apihelp-userrights-description": "{{doc-apihelp-description|userrights}}",
+ "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}\n{{Identical|Username}}",
+ "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}\n{{Identical|User ID}}",
+ "apihelp-userrights-param-add": "{{doc-apihelp-param|userrights|add}}",
+ "apihelp-userrights-param-remove": "{{doc-apihelp-param|userrights|remove}}",
+ "apihelp-userrights-param-reason": "{{doc-apihelp-param|userrights|reason}}",
+ "apihelp-userrights-example-user": "{{doc-apihelp-example|userrights}}",
+ "apihelp-userrights-example-userid": "{{doc-apihelp-example|userrights}}",
+ "apihelp-watch-description": "{{doc-apihelp-description|watch}}",
+ "apihelp-watch-param-title": "{{doc-apihelp-param|watch|title}}",
+ "apihelp-watch-param-unwatch": "{{doc-apihelp-param|watch|unwatch}}",
+ "apihelp-watch-example-watch": "{{doc-apihelp-example|watch}}",
+ "apihelp-watch-example-unwatch": "{{doc-apihelp-example|watch}}",
+ "apihelp-watch-example-generator": "{{doc-apihelp-example|watch}}",
+ "apihelp-format-example-generic": "{{doc-apihelp-example|format|params=* $1 - Format name|paramstart=2|noseealso=1}}",
+ "apihelp-dbg-description": "{{doc-apihelp-description|dbg|seealso=* {{msg-mw|apihelp-dbgfm-description}}}}",
+ "apihelp-dbgfm-description": "{{doc-apihelp-description|dbgfm|seealso=* {{msg-mw|apihelp-dbg-description}}}}",
+ "apihelp-dump-description": "{{doc-apihelp-description|dump|seealso=* {{msg-mw|apihelp-dumpfm-description}}}}",
+ "apihelp-dumpfm-description": "{{doc-apihelp-description|dumpfm|seealso=* {{msg-mw|apihelp-dump-description}}}}",
+ "apihelp-json-description": "{{doc-apihelp-description|json|seealso=* {{msg-mw|apihelp-jsonfm-description}}}}",
+ "apihelp-json-param-callback": "{{doc-apihelp-param|json|callback}}",
+ "apihelp-json-param-utf8": "{{doc-apihelp-param|json|utf8}}",
+ "apihelp-json-param-ascii": "{{doc-apihelp-param|json|ascii}}",
+ "apihelp-json-param-formatversion": "{{doc-apihelp-param|json|formatversion}}",
+ "apihelp-jsonfm-description": "{{doc-apihelp-description|jsonfm|seealso=* {{msg-mw|apihelp-json-description}}}}",
+ "apihelp-none-description": "{{doc-apihelp-description|none}}",
+ "apihelp-php-description": "{{doc-apihelp-description|php|seealso=* {{msg-mw|apihelp-phpfm-description}}}}",
+ "apihelp-php-param-formatversion": "{{doc-apihelp-param|json|formatversion}}",
+ "apihelp-phpfm-description": "{{doc-apihelp-description|phpfm|seealso=* {{msg-mw|apihelp-php-description}}}}",
+ "apihelp-rawfm-description": "{{doc-apihelp-description|rawfm|seealso=* {{msg-mw|apihelp-raw-description}}}}",
+ "apihelp-txt-description": "{{doc-apihelp-description|txt|seealso=* {{msg-mw|apihelp-txtfm-description}}}}",
+ "apihelp-txtfm-description": "{{doc-apihelp-description|txtfm|seealso=* {{msg-mw|apihelp-txt-description}}}}",
+ "apihelp-wddx-description": "{{doc-apihelp-description|wddx|seealso=* {{msg-mw|apihelp-wddxfm-description}}}}",
+ "apihelp-wddxfm-description": "{{doc-apihelp-description|wddxfm|seealso=* {{msg-mw|apihelp-wddx-description}}}}",
+ "apihelp-xml-description": "{{doc-apihelp-description|xml|seealso=* {{msg-mw|apihelp-xmlfm-description}}}}",
+ "apihelp-xml-param-xslt": "{{doc-apihelp-param|xml|xslt}}",
+ "apihelp-xml-param-includexmlnamespace": "{{doc-apihelp-param|xml|includexmlnamespace}}",
+ "apihelp-xmlfm-description": "{{doc-apihelp-description|xmlfm|seealso=* {{msg-mw|apihelp-xml-description}}}}",
+ "apihelp-yaml-description": "{{doc-apihelp-description|yaml|seealso=* {{msg-mw|apihelp-yamlfm-description}}}}",
+ "apihelp-yamlfm-description": "{{doc-apihelp-description|yamlfm|seealso=* {{msg-mw|apihelp-yaml-description}}}}",
+ "api-format-title": "{{technical}}\nPage title when API output is pretty-printed in HTML.",
+ "api-format-prettyprint-header": "{{technical}} Displayed as a header when API output is pretty-printed in HTML.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name",
+ "api-orm-param-props": "{{doc-apihelp-param|orm|props|description=the \"props\" parameter in subclasses of ApiQueryORM}}",
+ "api-orm-param-limit": "{{doc-apihelp-param|orm|limit|description=the \"limit\" parameter in subclasses of ApiQueryORM}}",
+ "api-pageset-param-titles": "{{doc-apihelp-param|pageset|titles|description=the \"titles\" parameter in pageset-using modules}}",
+ "api-pageset-param-pageids": "{{doc-apihelp-param|pageset|pageids|description=the \"pageids\" parameter in pageset-using modules}}",
+ "api-pageset-param-revids": "{{doc-apihelp-param|pageset|revids|description=the \"revids\" parameter in pageset-using modules}}",
+ "api-pageset-param-generator": "{{doc-apihelp-param|pageset|generator|description=the \"generator\" parameter in pageset-using modules}}",
+ "api-pageset-param-redirects-generator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is also available}}",
+ "api-pageset-param-redirects-nogenerator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is not available}}",
+ "api-pageset-param-converttitles": "{{doc-apihelp-param|pageset|converttitles|description=the \"converttitles\" parameter in pageset-using modules|params=* $1 - List of languages with variants|paramstart=2}}",
+ "api-help-title": "Page title for the auto-generated help output",
+ "api-help-lead": "Text displayed at the top of the API help page",
+ "api-help-main-header": "Text for the header of the main module",
+ "api-help-fallback-description": "{{notranslate}}",
+ "api-help-fallback-parameter": "{{notranslate}}",
+ "api-help-fallback-example": "{{notranslate}}",
+ "api-help-flags": "{{optional}} Label for the API help flags box\n\nParameters:\n* $1 - Number of flags to be displayed",
+ "api-help-flag-deprecated": "Flag displayed for an API module that is deprecated",
+ "api-help-flag-internal": "Flag displayed for an API module that is considered internal or unstable",
+ "api-help-flag-readrights": "Flag displayed for an API module that requires read rights",
+ "api-help-flag-writerights": "Flag displayed for an API module that requires write rights",
+ "api-help-flag-mustbeposted": "Flag displayed for an API module that only accepts POST requests",
+ "api-help-flag-generator": "Flag displayed for an API module that can be used as a generator",
+ "api-help-help-urls": "{{optional}} Label for the API help urls section\n\nParameters:\n* $1 - Number of urls to be displayed",
+ "api-help-parameters": "Label for the API help parameters section\n\nParameters:\n* $1 - Number of parameters to be displayed\n{{Identical|Parameter}}",
+ "api-help-param-deprecated": "Displayed in the API help for any deprecated parameter\n{{Identical|Deprecated}}",
+ "api-help-param-required": "Displayed in the API help for any required parameter",
+ "api-help-param-list": "Used to display the possible values for a parameter taking a list of values\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Comma-separated list of values, possibly formatted using {{msg-mw|api-help-param-list-can-be-empty}}\n{{Identical|Value}}",
+ "api-help-param-list-can-be-empty": "Used to indicate that one of the possible values in the list is the empty string.\n\nParameters:\n* $1 - Number of items in the rest of the list; may be 0\n* $2 - Remainder of the list as a comma-separated string",
+ "api-help-param-limit": "Used to display the maximum value of a limit parameter\n\nParameters:\n* $1 - Maximum value",
+ "api-help-param-limit2": "Used to display the maximum values of a limit parameter\n\nParameters:\n* $1 - Maximum value without the apihighlimits right\n* $2 - Maximum value with the apihighlimits right",
+ "api-help-param-integer-min": "Used to display an integer parameter with a minimum but no maximum value\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Minimum value\n* $3 - unused\n\nSee also:\n* {{msg-mw|api-help-param-integer-max}}\n* {{msg-mw|api-help-param-integer-minmax}}",
+ "api-help-param-integer-max": "Used to display an integer parameter with a maximum but no minimum value.\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - (Unused)\n* $3 - Maximum value\nSee also:\n* {{msg-mw|Api-help-param-integer-min}}\n* {{msg-mw|Api-help-param-integer-minmax}}",
+ "api-help-param-integer-minmax": "Used to display an integer parameter with a maximum and minimum values\n\nParameters:\n* $1 - 1 if the parameter takes one value, 2 if the parameter takes any number of values\n* $2 - Minimum value\n* $3 - Maximum value\n\nSee also:\n* {{msg-mw|api-help-param-integer-min}}\n* {{msg-mw|api-help-param-integer-max}}",
+ "api-help-param-upload": "{{technical}} Used to indicate that an 'upload'-type parameter must be posted as a file upload using multipart/form-data",
+ "api-help-param-multi-separate": "Used to indicate how to separate multiple values. Not used with {{msg-mw|api-help-param-list}}.",
+ "api-help-param-multi-max": "Used to indicate the maximum number of values accepted for a multi-valued parameter.\n\nParameters:\n* $1 - Maximum value without the apihighlimits right\n* $2 - Maximum value with the apihighlimits right",
+ "api-help-param-default": "Used to display the default value for an API parameter\n\nParameters:\n* $1 - Default value\n\nSee also:\n* {{msg-mw|api-help-param-default-empty}}\n{{Identical|Default}}",
+ "api-help-param-default-empty": "Used to display the default value for an API parameter when that default is an empty value\n\nSee also:\n* {{msg-mw|api-help-param-default}}",
+ "api-help-param-token": "{{doc-apihelp-param|description=any 'token' parameter|paramstart=2|params=\n* $1 - Token type|noseealso=1}}",
+ "api-help-param-token-webui": "{{doc-apihelp-param|description=additional text for any \"token\" parameter, explaining that web UI tokens are also accepted|noseealso=1}}",
+ "api-help-param-disabled-in-miser-mode": "{{doc-apihelp-param|description=any parameter that is disabled when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+ "api-help-param-limited-in-miser-mode": "{{doc-apihelp-param|description=additional text for any parameter that may cause the module to return few results when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+ "api-help-param-direction": "{{doc-apihelp-param|description=any standard \"dir\" parameter|noseealso=1}}",
+ "api-help-param-continue": "{{doc-apihelp-param|description=any standard \"continue\" parameter, or other parameter with the same semantics|noseealso=1}}",
+ "api-help-param-no-description": "Displayed on API parameters that lack any description",
+ "api-help-examples": "Label for the API help examples section\n\nParameters:\n* $1 - Number of examples to be displayed\n{{Identical|Example}}",
+ "api-help-permissions": "Label for the \"permissions\" section in the main module's help output.\n\nParameters:\n* $1 - Number of permissions displayed\n{{Identical|Permission}}",
+ "api-help-permissions-granted-to": "Used to introduce the list of groups each permission is assigned to.\n\nParameters:\n* $1 - Number of groups\n* $2 - List of group names, comma-separated",
+ "api-help-right-apihighlimits": "{{technical}}{{doc-right|apihighlimits|prefix=api-help}}\nThis message is used instead of {{msg-mw|right-apihighlimits}} in the API help to display the actual limits.\n\nParameters:\n* $1 - Limit for slow queries\n* $2 - Limit for fast queries",
+ "api-credits-header": "Header for the API credits section in the API help output\n{{Identical|Credit}}",
+ "api-credits": "API credits text, displayed in the API help output"
+}
diff --git a/includes/api/i18n/roa-tara.json b/includes/api/i18n/roa-tara.json
new file mode 100644
index 00000000..07064122
--- /dev/null
+++ b/includes/api/i18n/roa-tara.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "apihelp-block-param-reason": "Mutive pu blocche.",
+ "apihelp-createaccount-param-name": "Nome de l'utende.",
+ "apihelp-edit-param-text": "Vôsce.",
+ "apihelp-edit-example-edit": "Cange 'na pàgene"
+}
diff --git a/includes/api/i18n/ru.json b/includes/api/i18n/ru.json
new file mode 100644
index 00000000..e533d799
--- /dev/null
+++ b/includes/api/i18n/ru.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mahairod",
+ "Okras",
+ "Eakarpov",
+ "Kaganer"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки, и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом \"MediaWiki-API-Error\", после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].",
+ "apihelp-main-param-action": "Действие, которое следует выполнить.",
+ "apihelp-main-param-format": "Формат вывода.",
+ "apihelp-main-param-smaxage": "Устанавливает заголовок <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
+ "apihelp-main-param-maxage": "Устанавливает заголовок <code>max-age</code> в заданное число секунд. Ошибки никогда не кэшируются.",
+ "apihelp-main-param-assert": "Удостовериться, что пользователь авторизован, если задано <kbd>user</kbd>, или что имеет права бота, если задано <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Любое заданное здесь значение будет включено в ответ. Может быть использовано для различения запросов.",
+ "apihelp-main-param-servedby": "Включить в результаты имя хоста, обработавшего запрос.",
+ "apihelp-main-param-curtimestamp": "Включить в результаты временную метку.",
+ "apihelp-main-param-origin": "При обращении к API, используя кросс-доменный AJAX-запрос (CORS), задайте параметру значение исходного домена. Он должен быть включён в любой предварительный запрос и таким образом должен быть частью URI-запроса (не тела POST). Он должен точно соответствовать одному из источников в заголовке <code>Origin<code>, так что он должен быть задан наподобие <kbd>https://ru.wikipedia.org</kbd> или <kbd>https://meta.wikimedia.org</kbd>. Если параметр не соответствует заголовку <code>Origin<code>, будет возвращён ответ с кодом ошибки 403. Если параметр соответствует заголовку <code>Origin</code>, и источник находится в белом списке, будет установлен заголовок <code>Access-Control-Allow-Origin</code>.",
+ "apihelp-block-description": "Блокировка участника.",
+ "apihelp-block-param-user": "Имя участника, IP-адрес или диапазон IP-адресов, которые вы хотите заблокировать.",
+ "apihelp-block-param-reason": "Причина блокировки.",
+ "apihelp-block-param-nocreate": "Запретить создание учётных записей.",
+ "apihelp-createaccount-param-name": "Имя участника.",
+ "apihelp-delete-description": "Удалить страницу.",
+ "apihelp-delete-param-watch": "Добавить страницу к текущему списку наблюдения пользователя.",
+ "apihelp-disabled-description": "Этот модуль был отключен.",
+ "apihelp-edit-param-sectiontitle": "Заголовок для нового раздела.",
+ "apihelp-edit-param-text": "Содержание страницы.",
+ "apihelp-edit-param-minor": "Незначительное изменение (малая правка).",
+ "apihelp-edit-param-notminor": "Значительное изменение (обычная, не «малая», правка).",
+ "apihelp-edit-param-bot": "Пометить правку как сделанную ботом.",
+ "apihelp-edit-param-watch": "Добавить страницу к текущему списку наблюдения пользователя.",
+ "apihelp-edit-example-edit": "Редактировать страницу",
+ "apihelp-expandtemplates-param-title": "Заголовок страницы.",
+ "apihelp-import-param-xml": "Загруженный XML-файл.",
+ "apihelp-login-param-name": "Имя участника.",
+ "apihelp-login-param-password": "Пароль.",
+ "apihelp-login-param-domain": "Домен (необязательно).",
+ "apihelp-login-example-login": "Войти",
+ "apihelp-logout-description": "Выйти и очистить данные сессии.",
+ "apihelp-query+alllinks-example-unique-generator": "Получить все названия-ссылки, выделяя пропущенные.",
+ "apihelp-query+duplicatefiles-example-generated": "Поиск дубликатов всех файлов.",
+ "apihelp-query+recentchanges-example-simple": "Список последних изменений.",
+ "apihelp-upload-example-url": "Загрузить через URL",
+ "api-help-main-header": "Главный модуль",
+ "api-help-parameters": "Параметр{{PLURAL:$1||ы}}:",
+ "api-help-param-deprecated": "Устаревший.",
+ "api-help-param-required": "Этот параметр является обязательным.",
+ "api-help-param-default": "По умолчанию: $1",
+ "api-help-param-default-empty": "По умолчанию: <span class=\"apihelp-empty\">(пусто)</span>",
+ "api-help-param-no-description": "<span class=\"apihelp-empty\">(описание отсутствует)</span>",
+ "api-help-examples": "Пример{{PLURAL:$1||ы}}:",
+ "api-credits-header": "Создатели"
+}
diff --git a/includes/api/i18n/si.json b/includes/api/i18n/si.json
new file mode 100644
index 00000000..a075a49f
--- /dev/null
+++ b/includes/api/i18n/si.json
@@ -0,0 +1,70 @@
+{
+ "@metadata": {
+ "authors": [
+ "Susith Chandira Gts"
+ ]
+ },
+ "apihelp-main-param-action": "ඉටු කිරීමට ඇත්තේ කුමන ක්‍රියාවද.",
+ "apihelp-main-param-format": "ප්‍රතිදානයේ ආකෘතිය.",
+ "apihelp-main-param-requestid": "මෙහි ඇති සියලුම වටිනාකම් ප්‍රතිචාරයන්හි අන්තර්ගතකොට ඇත. ඇතැම් විට පැහැදිලිව වටහාගත් ඉල්ලීම් සදහා භාවිතා වේ.",
+ "apihelp-main-param-servedby": "ප්‍රතිපලයන්හි ඉල්ලීම් ඉටුකළ ධාරකනාමය ඇතුලත් කරන්න.",
+ "apihelp-main-param-curtimestamp": "ප්‍රථිපලයන්හි කාල මුද්‍රාව ඇතුලත් කරන්න.",
+ "apihelp-help-description": "නිරූපිත ඒකක සදහා උදවු පෙන්වන්න.",
+ "apihelp-help-param-submodules": "නම් කරන ලද ඒකකයේ, අනුඒකක සදහා උදවු ඇතුලත් කරන්න.",
+ "apihelp-help-param-helpformat": "උදවු ප්‍රතිදානයේ ආකෘතිය.",
+ "apihelp-help-param-wrap": "ප්‍රතිදානය නියමිත API අනුකූලතා ආකෘතියකට හරවන්න.",
+ "apihelp-help-param-toc": "HTML ප්‍රතිදනයන්ගේ පටුනේ ලැයිස්තුවක් ඇතුලත් කරන්න.",
+ "apihelp-help-example-main": "ප්‍රධාන ඒකකය සදහා උදවු කරන්න",
+ "apihelp-help-example-recursive": "සියලුම උදවු එක පිටුවක් තුල",
+ "apihelp-help-example-query": "සැකසහිත අනුඒකක සදහා උදවු කරන්න",
+ "apihelp-format-example-generic": "$1 ආකෘතියේ ඇති සැක සහිත ප්‍රථිපල පරිවර්තනය කරන්න",
+ "apihelp-dbg-description": "ප්‍රතිදාන දත්ත PHP හි var_export() ආකෘතියෙන් පවතී.",
+ "apihelp-dbgfm-description": "ප්‍රතිදාන දත්ත PHP හි var_export() ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "apihelp-dump-description": "ප්‍රතිදාන දත්ත PHP හි var_dump() ආකෘතියෙන් පවතී.",
+ "apihelp-dumpfm-description": "ප්‍රතිදාන දත්ත PHP හි var_dump() ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "apihelp-json-description": "ප්‍රතිදාන දත්ත JSON ආකෘතියෙන් පවතී.",
+ "apihelp-jsonfm-description": "ප්‍රතිදාන දත්ත JSON ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "apihelp-none-description": "ප්‍රතිදානයේ කිසිවක් නොමැත.",
+ "apihelp-php-description": "ප්‍රතිදාන දත්ත serialized PHP ආකෘතියෙන් පවතී.",
+ "apihelp-phpfm-description": "ප්‍රතිදාන දත්ත serialized PHP ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "apihelp-txt-description": "ප්‍රතිදාන දත්ත PHP හි print_r() ආකෘතියෙන් පවතී.",
+ "apihelp-txtfm-description": "ප්‍රතිදාන දත්ත PHP හි print_r() ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "apihelp-wddx-description": "ප්‍රතිදාන දත්ත WDDX ආකෘතියෙන් පවතී",
+ "apihelp-wddxfm-description": "ප්‍රතිදාන දත්ත WDDX ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "apihelp-xml-description": "ප්‍රතිදාන දත්ත XML ආකෘතියෙන් පවතී.",
+ "apihelp-xml-param-includexmlnamespace": "නිරූපණය කළා නම්, XML නාමාවකාශයක් එකතු කරන්න.",
+ "apihelp-xmlfm-description": "ප්‍රතිදාන දත්ත XML ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "apihelp-yaml-description": "ප්‍රතිදාන දත්ත YAML ආකෘතියෙන් පවතී.",
+ "apihelp-yamlfm-description": "ප්‍රතිදාන දත්ත YAML ආකෘතියෙන් පවතී (හොදම පිටපත HTML භාෂාවෙනි).",
+ "api-format-title": "මාධ්‍යවිකි API ප්‍රථිපල",
+ "api-help-title": "මාධ්‍යවිකි API උදවු",
+ "api-help-lead": "මෙය ස්වයං-ජනිත මාධ්‍යවිකි API \tප්‍රලේඛන පිටුවකි.\n\nප්‍රලේඛනය සහ උදාහරණ:\nhttps://www.mediawiki.org/wiki/API",
+ "api-help-main-header": "ප්‍රධාන ආකෘතිය",
+ "api-help-flag-deprecated": "මෙම ආකෘතිය විරුද්ධත්වය ප්‍රකාශ කරන ලදී.",
+ "api-help-flag-internal": "<strong>මෙම ඒකකය අභ්‍යන්තර හෝ අස්ථායි.\n</strong> එහි ක්‍රියාකාරිත්වය දැනුම් දීමකින් තොරව වෙනස් වියහැක.",
+ "api-help-flag-readrights": "මෙම ඒකකය සදහා හිමිකම් කියවීම අවශ්‍ය වේ.",
+ "api-help-flag-writerights": "මෙම ඒකකය සදහා හිමිකම් ලිවීම අවශ්‍ය වේ.",
+ "api-help-flag-mustbeposted": "මෙම ඒකකය POST ඉල්ලීම් පමණක් බාරගනී.",
+ "api-help-flag-generator": "මෙම ආකෘතිය \tඋත්පාදකයක් ලෙස භාවිතා කල හැක.",
+ "api-help-parameters": "{{PLURAL:$1|පරාමිතිය|පරාමිතීන්}}:",
+ "api-help-param-deprecated": "විරුද්ධත්වය ප්‍රකාශ කර ඇත.",
+ "api-help-param-required": "මෙම පරාමිතිය අවශ්‍යයි.",
+ "api-help-param-list": "{{PLURAL:$1|1=එක් වටිනාකමක්|2=වටිනාකම් (\"{{!}}\" සමග වෙන් කරන්න)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=හිස් කල යුතුයි|හිස් කල හැකියි, හෝ $2}}",
+ "api-help-param-limit": "$1 ට වඩා අනුමත නොකරයි.",
+ "api-help-param-limit2": "$1 කට වැඩ අනුමත කරන්නේ නැත ($2 බොට්ස් සදහාය).",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=අගය|2=අගයන්}} $2 ට වඩා අඩු නොවිය යුතුය.",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=වටිනාකම|2=වටිනාකම්}} $3 ට ව වැඩි නොවිය යුතුය.",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=අගය|2=අගයන්}} $2 සහ $3 අතර පැවතිය යුතුය.",
+ "api-help-param-multi-separate": "වටිනාකම් \"|\" සමග වෙන් කරන්න.",
+ "api-help-param-multi-max": "අංක සදහා උපරිම වටිනාකම {{PLURAL:$1|$1}}\n({{PLURAL:$2|$2}} බොට්ස් සදහා)",
+ "api-help-param-default": "Default: $1",
+ "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(හිස්)</span>",
+ "api-help-param-token": "[[Special:ApiHelp/query+tokens|action=query&meta=tokens]] මගින් \"$1\" \tසංඥාව සොයාගන්නා ලදී",
+ "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|\tප්‍රදානලාභියාට}}: $2",
+ "api-credits-header": "ස්තුතිය",
+ "api-credits": "API වැඩිදියුණු කරන්නන්:\n* Roan Kattouw (ප්‍රධානියා 2007 සැප්. –2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (නිර්මාපකයා, ප්‍රධානියා 2006 සැප්. – 2007 සැප්.)\n* Brad Jorsch (ප්‍රධානියා 2013–මේ දක්වා)\n\nඔබගේ අදහස්, යෝජනා හා ගැටළු mediawiki-api@lists.wikimedia.org වෙත යොමු කරන්න, පින්තූර හෝ ගොනු හරහා ගැටළු ඉදිරිපත් කිරීමට https://phabricator.wikimedia.org/ වෙත පිවිසෙන්න."
+}
diff --git a/includes/api/i18n/sr-ec.json b/includes/api/i18n/sr-ec.json
new file mode 100644
index 00000000..db801b8c
--- /dev/null
+++ b/includes/api/i18n/sr-ec.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01",
+ "Aktron"
+ ]
+ },
+ "apihelp-block-description": "Блокирај корисника.",
+ "apihelp-block-param-reason": "Разлог за блокирање.",
+ "apihelp-createaccount-param-name": "Корисничко име.",
+ "apihelp-delete-description": "Обриши страницу.",
+ "apihelp-edit-param-text": "Страница са садржајем.",
+ "apihelp-edit-param-minor": "Мања измена.",
+ "apihelp-edit-example-edit": "Уређивање странице.",
+ "apihelp-emailuser-description": "Слање е-поруке кориснику",
+ "apihelp-emailuser-param-target": "Корисник је послао е-поруку.",
+ "apihelp-feedcontributions-param-year": "Од године (и раније).",
+ "apihelp-filerevert-description": "Вратити датотеку у ранију верзију.",
+ "apihelp-help-example-recursive": "Сва помоћ у једној страници.",
+ "apihelp-login-param-name": "Корисничко име.",
+ "apihelp-login-param-password": "Лозинка.",
+ "apihelp-login-example-login": "Пријавa.",
+ "apihelp-move-description": "Премештање странице."
+}
diff --git a/includes/api/i18n/sr-el.json b/includes/api/i18n/sr-el.json
new file mode 100644
index 00000000..55611f08
--- /dev/null
+++ b/includes/api/i18n/sr-el.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01"
+ ]
+ },
+ "apihelp-block-description": "Blokiraj korisnika.",
+ "apihelp-block-param-reason": "Razlog za blokiranje.",
+ "apihelp-delete-description": "Obriši stranicu.",
+ "apihelp-edit-param-minor": "Manja izmena."
+}
diff --git a/includes/api/i18n/sv.json b/includes/api/i18n/sv.json
new file mode 100644
index 00000000..aa88484f
--- /dev/null
+++ b/includes/api/i18n/sv.json
@@ -0,0 +1,372 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jopparn",
+ "Lokal Profil",
+ "WikiPhoenix",
+ "Victorsa",
+ "Albinomamba",
+ "Peki01",
+ "Stens51",
+ "Boom",
+ "Jenniesarina",
+ "Marfuas",
+ "VickyC"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-postlista]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aviseringar]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R|Buggar & förslag]\n</div>\n<strong>Status:</strong> Alla funktioner som visas på denna sida borde fungera. API:et är dock fortfarande under aktiv utveckling och kan ändras när som helst. Prenumerera på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/mediawiki-api-announce e-postlistan] för att få aviseringar om uppdateringar.\n\n<strong>Felaktiga förfrågningar:</strong> När felaktiga förfrågningar skickas till API:et skickas en HTTP-header med nyckeln \"MediaWiki-API-Error\" och sedan sätts både värdet på headern och den felkoden som returneras till samma värde. För mer information läs [[mw:API:Errors_and_warnings|API: Fel och varningar]].",
+ "apihelp-main-param-action": "Vilken åtgärd som ska utföras.",
+ "apihelp-main-param-format": "Formatet för utdata.",
+ "apihelp-main-param-smaxage": "Ange headervärdet <code>s-maxage</code> till så här många sekunder. Fel cachelagras aldrig.",
+ "apihelp-main-param-maxage": "Ange headervärdet <code>max-age</code> till så här många sekunder. Fel cachelagras aldrig.",
+ "apihelp-main-param-assert": "Bekräftar att användaren är inloggad om satt till <kbd>user</kbd>, eller har bot-användarrättigheter om satt till <kbd>bot</kbd>.",
+ "apihelp-main-param-requestid": "Alla värde som anges här kommer att inkluderas i svaret. Kan användas för att särskilja förfrågningar.",
+ "apihelp-main-param-servedby": "Inkludera det värdnamn som besvarade förfrågan i resultatet.",
+ "apihelp-main-param-curtimestamp": "Inkludera den aktuella tidsstämpeln i resultatet.",
+ "apihelp-main-param-origin": "När API:et används genom en cross-domain AJAX-begäran (CORS), ange detta till den ursprungliga domänen. Detta måste inkluderas i alla pre-flight-begäran, och mpste därför vara en del av den begärda URI:n (inte i POST-datat). Detta måste överensstämma med en av källorna i headern <code>Origin</code> exakt, så den måste sättas till något i stil med <kbd>http://en.wikipedia.org</kbd> eller <kbd>https://meta.wikimedia.org</kbd>. Om denna parameter inte överensstämmer med headern <code>Origin</code>, returneras ett 403-svar. Om denna parameter överensstämmer med headern <code>Origin</code> och källan är vitlistad, sätts en <code>Access-Control-Allow-Origin</code>-header.",
+ "apihelp-main-param-uselang": "Språk som ska användas för meddelandeöversättningar. En lista med koder kan hämtas från <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> med <kbd>siprop=languages</kbd>, eller ange <kbd>user</kbd> för att använda den aktuella användarens språkpreferenser, eller ange <kbd>content</kbd> för att använda innehållsspråket.",
+ "apihelp-block-description": "Blockera en användare.",
+ "apihelp-block-param-user": "Användare, IP-adress eller IP-intervall du vill blockera.",
+ "apihelp-block-param-expiry": "Förfallotid. Kan vara Kan vara relativt (t.ex. <kbd>5 months</kbd> eller <kbd>2 weeks</kbd>) eller absolut (t.ex. <kbd>2014-09-18T12:34:56Z</kbd>). Om satt till <kbd>infinite</kbd>, <kbd>indefinite</kbd> eller <kbd>never</kbd>, kommer blockeringen aldrig att löpa ut.",
+ "apihelp-block-param-reason": "Orsak till blockering.",
+ "apihelp-block-param-anononly": "Blockera endast anonyma användare (t.ex. inaktivera anonyma redigeringar för denna IP-adress).",
+ "apihelp-block-param-nocreate": "Förhindra registrering av användarkonton.",
+ "apihelp-block-param-autoblock": "Blockera automatiskt den senast använda IP-adressen, och alla efterföljande IP-adresser de försöker logga in från.",
+ "apihelp-block-param-noemail": "Hindra användaren från att skicka e-post via wikin. (Kräver rättigheten <code>blockemail</code>).",
+ "apihelp-block-param-hidename": "Döljer användarnamnet från blockeringsloggen. (Kräver rättigheten <code>hideuser</code>).",
+ "apihelp-block-param-allowusertalk": "Låt användaren redigera sin egen diskussionssida (beror på <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+ "apihelp-block-param-reblock": "Skriv över befintlig blockering om användaren redan är blockerad.",
+ "apihelp-block-param-watchuser": "Bevaka användarens eller IP-adressens användarsida och diskussionssida",
+ "apihelp-block-example-ip-simple": "Blockera IP-adressen <kbd>192.0.2.5</kbd> i tre dagar med motivationen <kbd>First strike</kbd>",
+ "apihelp-block-example-user-complex": "Blockera användare <kbd>Vandal</kbd> på obegränsad tid med motivationen <kbd>Vandalism</kbd>, och förhindra kontoskapande och e-post.",
+ "apihelp-clearhasmsg-description": "Rensa <code>hasmsg</code>-flaggan för den aktuella användaren.",
+ "apihelp-clearhasmsg-example-1": "Rensa <code>hasmsg</code>-flaggan för den aktuella användaren",
+ "apihelp-compare-description": "Hämta skillnaden mellan två sidor.\n\nEtt versionsnummer, en sidtitel, eller ett sid-Id för både \"from\" och \"to\" måste skickas.",
+ "apihelp-compare-param-fromtitle": "Första titeln att jämföra.",
+ "apihelp-compare-param-fromid": "Första sid-ID att jämföra.",
+ "apihelp-compare-param-fromrev": "Första version att jämföra.",
+ "apihelp-compare-param-totitle": "Andra titeln att jämföra.",
+ "apihelp-compare-param-toid": "Andra sid-ID att jämföra.",
+ "apihelp-compare-param-torev": "Andra version att jämföra.",
+ "apihelp-compare-example-1": "Skapa en diff mellan version 1 och 2",
+ "apihelp-createaccount-description": "Skapa ett nytt användarkonto.",
+ "apihelp-createaccount-param-name": "Användarnamn.",
+ "apihelp-createaccount-param-password": "Lösenord (ignoreras om <var>$1mailpassword</var> angetts).",
+ "apihelp-createaccount-param-domain": "Domän för extern autentisering (frivillig).",
+ "apihelp-createaccount-param-token": "Nyckel för kontoskapande erhölls i första begäran.",
+ "apihelp-createaccount-param-email": "Användarens e-postadress (valfritt).",
+ "apihelp-createaccount-param-realname": "Användarens riktiga namn (valfritt).",
+ "apihelp-createaccount-param-mailpassword": "Om satt till ett värde, skickas ett slumpmässigt lösenord till användaren via e-post.",
+ "apihelp-createaccount-param-reason": "Valfri anledning för att skapa kontot för att läggas till i loggarna.",
+ "apihelp-createaccount-param-language": "Språkkod att använda som standard för användaren (valfri, standardvärdet är innehållsspråket).",
+ "apihelp-createaccount-example-pass": "Skapa användaren <kbd>testuser</kbd> med lösenordet <kbd>test123</kbd>",
+ "apihelp-createaccount-example-mail": "Skapa användaren <kbd>testmailuser</kbd> och skicka ett slumpgenererat lösenord via e-post",
+ "apihelp-delete-description": "Radera en sida.",
+ "apihelp-delete-param-title": "Titel på sidan du vill radera. Kan inte användas tillsammans med <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Sid-ID för sidan att radera. Kan inte användas tillsammans med <var>$1titel</var>.",
+ "apihelp-delete-param-reason": "Orsak till radering. Om orsak inte ges kommer en orsak att automatiskt genereras och användas.",
+ "apihelp-delete-param-watch": "Lägg till sidan i aktuell användares bevakningslista.",
+ "apihelp-delete-param-watchlist": "Lägg till eller ta bort sidan ovillkorligen från den aktuella användarens bevakningslista, använd inställningar eller ändra inte bevakning.",
+ "apihelp-delete-param-unwatch": "Ta bort sidan från aktuell användares bevakningslista.",
+ "apihelp-delete-param-oldimage": "Namnet på den gamla bilden att radera som tillhandahålls av [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+ "apihelp-delete-example-simple": "Radera <kbd>huvudsidan</kbd>.",
+ "apihelp-delete-example-reason": "Raderar <kbd>huvudsidan</kbd> med orsaken <kbd>Förbereder flyttning</kbd>.",
+ "apihelp-disabled-description": "Denna modul har inaktiverats.",
+ "apihelp-edit-description": "Skapa och redigera sidor.",
+ "apihelp-edit-param-title": "Titel på sidan du vill redigera. Kan inte användas tillsammans med <var>$1pageid</var>.",
+ "apihelp-edit-param-pageid": "Sid-ID för sidan du vill redigera. Kan inte användas tillsammans med <var>$1titel</var>.",
+ "apihelp-edit-param-section": "Avsnittsnummer. <kbd>0</kbd> för det översta avsnittet, <kbd>new</kbd> för ett nytt avsnitt.",
+ "apihelp-edit-param-sectiontitle": "Rubriken för ett nytt avsnitt.",
+ "apihelp-edit-param-text": "Sidans innehåll.",
+ "apihelp-edit-param-summary": "Redigeringssammanfattning. Även avsnittets rubrik när $1section=new och $1sectiontitle inte anges.",
+ "apihelp-edit-param-minor": "Mindre redigering.",
+ "apihelp-edit-param-notminor": "Icke-mindre redigering.",
+ "apihelp-edit-param-bot": "Markera denna redigering som robotredigering.",
+ "apihelp-edit-param-basetimestamp": "Tidsstämpel för grundversionen, används för att upptäcka redigeringskonflikter. Kan erhållas genom [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+ "apihelp-edit-param-starttimestamp": "Tidsstämpel för när redigeringsprocessen började, används för att upptäcka redigeringskonflikter. Ett lämpligt värde kan erhållas via <var>[[Special:ApiHelp/main|curtimestamp]]</var> när redigeringsprocessen startas (t.ex. när sidans innehåll laddas för redigering).",
+ "apihelp-edit-param-recreate": "Ignorera felmeddelande om sidan har blivit raderad under tiden.",
+ "apihelp-edit-param-createonly": "Redigera inte sidan om den redan finns.",
+ "apihelp-edit-param-nocreate": "Kasta ett fel om sidan inte finns.",
+ "apihelp-edit-param-watch": "Lägg till sidan i den aktuella användarens bevakningslista.",
+ "apihelp-edit-param-unwatch": "Ta bort sidan från aktuell användares bevakningslista.",
+ "apihelp-edit-param-watchlist": "Lägg till eller ta bort sidan ovillkorligen från den aktuella användarens bevakningslista, använd inställningar eller ändra inte bevakning.",
+ "apihelp-edit-param-md5": "MD5-hash för $1text-parametern, eller $1prependtext- och $1appendtext-parametrarna sammanfogade.",
+ "apihelp-edit-param-prependtext": "Lägg till denna text i början på sidan. Ersätter $1text.",
+ "apihelp-edit-param-appendtext": "Lägg till denna text i slutet på sidan. Ersätter $1text.\n\nAnvänd $1section=new för att lägga till en ny sektion, hellre än denna parameter.",
+ "apihelp-edit-param-redirect": "Åtgärda automatiskt omdirigeringar.",
+ "apihelp-edit-param-contentformat": "Det serialiseringsformat som används för indatatexten.",
+ "apihelp-edit-param-contentmodel": "Det nya innehållets innehållsmodell.",
+ "apihelp-edit-param-token": "Token ska alltid skickas som sista parameter, eller åtminstone efter $1text-parametern",
+ "apihelp-edit-example-edit": "Redigera en sida",
+ "apihelp-emailuser-description": "Skicka e-post till en användare.",
+ "apihelp-emailuser-param-target": "Användare att skicka e-post till.",
+ "apihelp-emailuser-param-subject": "Ämnesrubrik.",
+ "apihelp-emailuser-param-text": "E-postmeddelandets innehåll.",
+ "apihelp-emailuser-param-ccme": "Skicka en kopia av detta e-postmeddelande till mig.",
+ "apihelp-emailuser-example-email": "Skicka ett e-postmeddelande till användaren <kbd>WikiSysop</kbd> med texten <kbd>Content</kbd>.",
+ "apihelp-expandtemplates-description": "Expanderar alla mallar i wikitext.",
+ "apihelp-expandtemplates-param-title": "Sidans rubrik.",
+ "apihelp-expandtemplates-param-text": "Wikitext att konvertera.",
+ "apihelp-expandtemplates-param-revid": "Revision ID, för <nowiki>{{REVISIONID}}</nowiki> och liknande variabler.",
+ "apihelp-expandtemplates-param-includecomments": "Om HTML-kommentarer skall inkluderas i utdata.",
+ "apihelp-expandtemplates-param-generatexml": "Generera ett XML tolknings träd (ersatt av $1prop=parsetree).",
+ "apihelp-expandtemplates-example-simple": "Expandera wikitexten <kbd><nowiki>{{Projekt:Sandbox}}</nowiki></kbd>.",
+ "apihelp-feedcontributions-description": "Returnerar en användares bidragsflöde.",
+ "apihelp-feedcontributions-param-feedformat": "Flödets format.",
+ "apihelp-feedcontributions-param-user": "De användare vars bidrag ska hämtas.",
+ "apihelp-feedcontributions-param-namespace": "Vilken namnrymd att filtrera bidrag med.",
+ "apihelp-feedcontributions-param-year": "Från år (och tidigare).",
+ "apihelp-feedcontributions-param-month": "Från månad (och tidigare).",
+ "apihelp-feedcontributions-param-tagfilter": "Filtrera bidrag som har dessa taggar.",
+ "apihelp-feedcontributions-param-deletedonly": "Visa bara borttagna bidrag.",
+ "apihelp-feedcontributions-param-toponly": "Visa endast ändringar som är senaste revideringen.",
+ "apihelp-feedcontributions-param-newonly": "Visa endast redigeringar där sidor skapas.",
+ "apihelp-feedcontributions-param-showsizediff": "Visa skillnaden i storlek mellan revisioner.",
+ "apihelp-feedcontributions-example-simple": "Returnera bidrag för <kbd>Exempel</kbd>",
+ "apihelp-feedrecentchanges-description": "Returnerar ett flöde med senaste ändringar.",
+ "apihelp-feedrecentchanges-param-feedformat": "Flödets format.",
+ "apihelp-feedrecentchanges-param-namespace": "Namnrymder att begränsa resultaten till.",
+ "apihelp-feedrecentchanges-param-invert": "Alla namnrymder utom den valda.",
+ "apihelp-feedrecentchanges-param-days": "Dagar att begränsa resultaten till.",
+ "apihelp-feedrecentchanges-param-limit": "Maximalt antal resultat att returnera.",
+ "apihelp-feedrecentchanges-param-from": "Visa förändringar sedan dess.",
+ "apihelp-feedrecentchanges-param-hideminor": "Dölj mindre ändringar.",
+ "apihelp-feedrecentchanges-param-hidebots": "Dölj robotändringar.",
+ "apihelp-feedrecentchanges-param-hideanons": "Dölj ändringar av oinloggade användare.",
+ "apihelp-feedrecentchanges-param-hideliu": "Dölj ändringar av inloggade användare.",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "Dölj patrullerade ändringar.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Dölj ändringar av aktuell användare.",
+ "apihelp-feedrecentchanges-param-tagfilter": "Filtrera efter tagg.",
+ "apihelp-feedrecentchanges-param-target": "Visa endast ändringarna av sidor som den här sidan länkar till.",
+ "apihelp-feedrecentchanges-param-showlinkedto": "Visa ändringarna på sidor som är länkade till den valda sidan i stället.",
+ "apihelp-feedrecentchanges-example-simple": "Visa senaste ändringar",
+ "apihelp-feedrecentchanges-example-30days": "Visa senaste ändringar för 30 dygn",
+ "apihelp-feedwatchlist-description": "Returnerar ett flöde från bevakningslistan.",
+ "apihelp-feedwatchlist-param-feedformat": "Flödets format.",
+ "apihelp-feedwatchlist-param-hours": "Lista sidor ändrade inom så här många timmar från nu.",
+ "apihelp-feedwatchlist-param-linktosections": "Länka direkt till ändrade avsnitt om möjligt.",
+ "apihelp-feedwatchlist-example-default": "Visa flödet från bevakningslistan.",
+ "apihelp-feedwatchlist-example-all6hrs": "Visa alla ändringar på besökta sidor under de senaste sex timmarna.",
+ "apihelp-filerevert-description": "Återställ en fil till en äldre version.",
+ "apihelp-filerevert-param-filename": "Målfilens namn, utan prefixet Fil:.",
+ "apihelp-filerevert-param-comment": "Ladda upp kommentar.",
+ "apihelp-filerevert-param-archivename": "Arkiv-namn för revisionen att gå tillbaka till.",
+ "apihelp-filerevert-example-revert": "Återställ <kbd>Wiki.png</kbd> till versionen från <kbd>2011-03-05T15:27:40Z</kbd>",
+ "apihelp-help-description": "Visa hjälp för de angivna modulerna.",
+ "apihelp-help-param-modules": "Vilka moduler som hjälpen ska visas för (värdena på parametrarna <var>action</var> och <var>format</var>, eller <kbd>main</kbd>). Undermoduler kan anges med ett plustecken (<kbd>+</kbd>).",
+ "apihelp-help-param-submodules": "Inkludera hjälp för undermoduler av den namngivna modulen.",
+ "apihelp-help-param-recursivesubmodules": "Inkludera hjälp för undermoduler rekursivt.",
+ "apihelp-help-param-helpformat": "Formatet för hjälp-utdata.",
+ "apihelp-help-param-wrap": "Omge utdatan i en standard API respons struktur.",
+ "apihelp-help-param-toc": "Inkludera en innehållsförteckning i HTML-utdata.",
+ "apihelp-help-example-main": "Hjälp för huvudmodul",
+ "apihelp-help-example-recursive": "All hjälp på en sida",
+ "apihelp-help-example-help": "Hjälp för själva hjälpmodulen",
+ "apihelp-imagerotate-description": "Rotera en eller flera bilder.",
+ "apihelp-imagerotate-param-rotation": "Grader att rotera bild medurs.",
+ "apihelp-imagerotate-example-simple": "Rotera <kbd>File:Example.png</kbd> med <kbd>90</kbd> grader",
+ "apihelp-imagerotate-example-generator": "Rotera alla bilder i <kbd>Category:Flip</kbd> med <kbd>180</kbd> grader.",
+ "apihelp-import-description": "Importera en sida från en annan wiki, eller en XML fil. \n\nNotera att HTTP POST måste bli gjord som en fil uppladdning (d.v.s med multipart/form-data) när man skickar en fil för <var>xml</var> parametern.",
+ "apihelp-import-param-summary": "Importera sammanfattning.",
+ "apihelp-import-param-xml": "Uppladdad XML-fil.",
+ "apihelp-import-param-interwikisource": "För interwiki-importer: wiki som du vill importera från.",
+ "apihelp-import-param-interwikipage": "För interwiki-importer: sidan som du vill importera.",
+ "apihelp-import-param-fullhistory": "För interwiki-importer: importera hela historiken, inte bara den aktuella versionen.",
+ "apihelp-import-param-templates": "För interwiki-importer: importera även alla mallar som ingår.",
+ "apihelp-import-param-namespace": "För interwiki-importer: importera till denna namnrymd.",
+ "apihelp-import-param-rootpage": "Importera som undersida till denna sida.",
+ "apihelp-import-example-import": "Importera [[meta:Help:Parserfunktioner]] till namnrymd 100 med full historik.",
+ "apihelp-login-description": "Logga in och hämta autentiserings-cookies.\n\nOm inloggningen lyckas, finns de cookies som krävs med i HTTP-svarshuvuden. Om inloggningen misslyckas kan ytterligare försök per tidsenhet begränsas, som ett sätt att försöka minska risken för automatiserade lösenordsgissningar.",
+ "apihelp-login-param-name": "Användarnamn.",
+ "apihelp-login-param-password": "Lösenord.",
+ "apihelp-login-param-domain": "Domän (valfritt).",
+ "apihelp-login-param-token": "Login nyckel erhållen i första begäran.",
+ "apihelp-login-example-gettoken": "Hämta en login nyckel.",
+ "apihelp-login-example-login": "Logga in",
+ "apihelp-logout-description": "Logga ut och rensa sessionsdata.",
+ "apihelp-logout-example-logout": "Logga ut den aktuella användaren",
+ "apihelp-managetags-description": "Utför hanterings uppgifter relaterade till förändrings taggar.",
+ "apihelp-managetags-param-tag": "Tagg för att skapa, radera, aktivera eller inaktivera. Vid skapande av tagg kan taggen inte existera. Vid raderande av tagg måste taggen existera. För aktiverande av tagg måste taggen existera och inte användas i ett tillägg. För inaktivering av tagg måste taggen användas just nu och vara manuellt definierad.",
+ "apihelp-managetags-param-reason": "En icke-obligatorisk orsak för att skapa, radera, aktivera, eller inaktivera taggen.",
+ "apihelp-managetags-param-ignorewarnings": "Om du vill ignorera varningar som utfärdas under operationen.",
+ "apihelp-managetags-example-create": "Skapa en tagg vid namn <kbd>spam</kbd> med anledningen: <kbd>För användning i redigerings patrullering</kbd>",
+ "apihelp-managetags-example-delete": "Radera <kbd>vandalims</kbd> taggen med andledningen: <kbd>Felstavat</kbd>",
+ "apihelp-managetags-example-activate": "Aktivera en tagg med namn <kbd>spam</kbd> med anledningen: <kbd>För användning i redigerings patrullering</kbd>",
+ "apihelp-managetags-example-deactivate": "Inaktivera en tagg vid namn <kbd>spam</kbd> med anledningen: <kbd>Inte längre behövd</kbd>",
+ "apihelp-move-description": "Flytta en sida.",
+ "apihelp-move-param-from": "Titeln på sidan du vill flytta. Kan inte användas tillsammans med <var>$1fromid</var>.",
+ "apihelp-move-param-fromid": "Sid-ID för sidan att byta namn. Kan inte användas tillsammans med <var>$1from</var>.",
+ "apihelp-move-param-to": "Titel att byta namn på sidan till.",
+ "apihelp-move-param-reason": "Orsak till namnbytet.",
+ "apihelp-move-param-movetalk": "Byt namn på diskussionssidan, om den finns.",
+ "apihelp-move-param-movesubpages": "Byt namn på undersidor, om tillämpligt.",
+ "apihelp-move-param-noredirect": "Skapa inte en omdirigering.",
+ "apihelp-move-param-watch": "Lägg till sidan och omdirigeringen till den aktuella användarens bevakningslista.",
+ "apihelp-move-param-unwatch": "Ta bort sidan och omdirigeringen från den aktuella användarens bevakningslista.",
+ "apihelp-move-param-watchlist": "Lägg till eller ta bort sidan ovillkorligen från den aktuella användarens bevakningslista, använd inställningar eller ändra inte bevakning.",
+ "apihelp-move-param-ignorewarnings": "Ignorera alla varningar.",
+ "apihelp-move-example-move": "Flytta <kbd>Felaktig titel</kbd> till <kbd>Korrekt titel</kbd> utan att lämna en omdirigering.",
+ "apihelp-opensearch-description": "Sök wikin med protokollet OpenSearch.",
+ "apihelp-opensearch-param-search": "Söksträng.",
+ "apihelp-opensearch-param-limit": "Maximalt antal resultat att returnera.",
+ "apihelp-opensearch-param-namespace": "Namnrymder att genomsöka.",
+ "apihelp-opensearch-param-suggest": "Gör ingenting om <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> är falskt.",
+ "apihelp-opensearch-param-format": "Formatet för utdata.",
+ "apihelp-opensearch-example-te": "Hitta sidor som börjar med <kbd>Te</kbd>.",
+ "apihelp-options-param-reset": "Återställer inställningarna till sidans standardvärden.",
+ "apihelp-options-example-reset": "Återställ alla inställningar",
+ "apihelp-options-example-complex": "Återställ alla inställningar, ställ sedan in <kbd>skin</kbd> och <kbd>nickname</kbd>.",
+ "apihelp-paraminfo-description": "Få information om API moduler.",
+ "apihelp-paraminfo-param-helpformat": "Format för hjälpsträngar.",
+ "apihelp-paraminfo-param-mainmodule": "Få information om huvud-modulen (top-level) också. Använd <kbd>$1modules=main</kbd> istället.",
+ "apihelp-parse-param-summary": "Sammanfattning att tolka.",
+ "apihelp-parse-param-page": "Tolka innehållet av denna sida. Kan inte användas tillsammans med <var>$1text</var> och <var>$1title</var>.",
+ "apihelp-parse-param-pageid": "Tolka innehållet på denna sida. Åsidosätter <var>$1sidan</var>.",
+ "apihelp-parse-param-preview": "Tolka i preview-läget.",
+ "apihelp-parse-example-page": "Tolka en sida.",
+ "apihelp-parse-example-text": "Tolka wikitext.",
+ "apihelp-parse-example-texttitle": "Tolka wikitext, specificera sid-titeln.",
+ "apihelp-parse-example-summary": "Tolka en sammanfattning.",
+ "apihelp-patrol-description": "Patrullera en sida eller en version.",
+ "apihelp-patrol-param-revid": "Versions ID att patrullera.",
+ "apihelp-patrol-example-rcid": "Patrullera en nykommen ändring.",
+ "apihelp-patrol-example-revid": "Patrullera en sidversion",
+ "apihelp-protect-description": "Ändra skyddsnivån för en sida.",
+ "apihelp-protect-example-protect": "Skydda en sida",
+ "apihelp-query-param-list": "Vilka listor att hämta.",
+ "apihelp-query-param-meta": "Vilka metadata att hämta.",
+ "apihelp-query+allcategories-param-dir": "Riktning att sortera mot.",
+ "apihelp-query+allcategories-param-min": "Returnera endast kategorier med minst så här många medlemmar.",
+ "apihelp-query+allcategories-param-max": "Returnera endast kategorier med som mest så här många medlemmar.",
+ "apihelp-query+allcategories-param-limit": "Hur många kategorier att returnera.",
+ "apihelp-query+alldeletedrevisions-description": "Lista alla raderade revisioner av en användare or inom en namnrymd.",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kan endast användas med <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kan inte användas med <var>$3user</var>.",
+ "apihelp-query+alldeletedrevisions-param-from": "Börja lista vid denna titel.",
+ "apihelp-query+alldeletedrevisions-param-to": "Sluta lista vid denna titel.",
+ "apihelp-query+alldeletedrevisions-param-prefix": "Sök alla sid-titlar som börjar med detta värde.",
+ "apihelp-query+alldeletedrevisions-param-tag": "Lista bara revideringar taggade med denna tagg.",
+ "apihelp-query+alldeletedrevisions-param-user": "Lista bara revideringar av denna användaren.",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "Lista inte revideringar av denna användaren.",
+ "apihelp-query+alldeletedrevisions-param-namespace": "Lista bara sidor i denna namnrymd.",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "Lista dem första 50 revideringarna i huvud-namnrymden",
+ "apihelp-query+allfileusages-description": "Lista all fil användningsområden, inklusive icke-existerande.",
+ "apihelp-query+allfileusages-param-prefix": "Sök för all fil-titlar som börjar med detta värde.",
+ "apihelp-query+allfileusages-param-limit": "Hur många saker att returnera totalt.",
+ "apihelp-query+allfileusages-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+allfileusages-example-unique": "Lista unika filtitlar",
+ "apihelp-query+allfileusages-example-unique-generator": "Hämtar alla fil titlar, markerar dem saknade.",
+ "apihelp-query+allfileusages-example-generator": "Hämtar sidor som innehåller filerna.",
+ "apihelp-query+allimages-param-sort": "Egenskap att sortera efter.",
+ "apihelp-query+allimages-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+allimages-param-prefix": "Sök för alla bild titlar som börjar med detta värde. Kan endast användas med $1sort=name.",
+ "apihelp-query+allimages-param-minsize": "Begränsning på bilder med åtminstone så här många bytes.",
+ "apihelp-query+allimages-param-maxsize": "Begränsning på bilder med som mest så här många bytes.",
+ "apihelp-query+allimages-param-sha1": "SHA1 hash av bild. Åsidosätter $1sha1base36.",
+ "apihelp-query+allimages-param-sha1base36": "SHA1 hash av bild i bas 36 (används i MediaWiki).",
+ "apihelp-query+allimages-param-user": "Returnera enbart filer uppladdade av denna användare. Kan enbart användas med $1sort=timestamp. Kan inte användas tillsammans med $1filterbots.",
+ "apihelp-query+allimages-param-filterbots": "Hur man filtrerar filer uppladdade av bots. Kan enbart användas med $1sort=timestamp. Kan inte användas tillsammans med $1user.",
+ "apihelp-query+allimages-param-mime": "Vilka MIME-typer du vill söka efter, t.ex. <kbd>image/jpeg</kbd>.",
+ "apihelp-query+allimages-param-limit": "Hur många bilder att returnera totalt.",
+ "apihelp-query+allimages-example-B": "Visa en lista över filer som börjar på bokstaven <kbd>B</kbd>.",
+ "apihelp-query+allimages-example-recent": "Visa en lista över nyligen överförda filer, ungefär som [[Special:Nya_filer]].",
+ "apihelp-query+allimages-example-mimetypes": "Visa en lista över filer med MIME-typen <kbd>image/png</kbd> eller <kbd>image/gif</kbd>",
+ "apihelp-query+allimages-example-generator": "Visa info om 4 filer som börjar med bokstaven <kbd>T</kbd>.",
+ "apihelp-query+alllinks-param-prefix": "Sök alla länkade titlar som börjar med detta värde.",
+ "apihelp-query+alllinks-param-limit": "Hur många saker att returnera totalt.",
+ "apihelp-query+alllinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+alllinks-example-B": "Lista länkade titlar, inkluderade saknade, med dem sid-IDs dem är från, med början vid <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-unique": "Lista unika länkade titlar.",
+ "apihelp-query+alllinks-example-unique-generator": "Hämtar alla länkade titlar, markera de saknade.",
+ "apihelp-query+alllinks-example-generator": "Hämtar sidor som innehåller länkarna.",
+ "apihelp-query+allmessages-description": "Returnera meddelande från denna sida.",
+ "apihelp-query+allmessages-param-messages": "Vilka meddelande att ge som utdata. <kbd>*</kbd> (standard) betyder alla meddelande .",
+ "apihelp-query+allmessages-param-prop": "Vilka egenskaper att hämta.",
+ "apihelp-query+allmessages-param-args": "Argument som ska substitueras i meddelandet.",
+ "apihelp-query+allmessages-param-filter": "Returnera enbart meddelande med namn som innehåller denna sträng.",
+ "apihelp-query+allmessages-param-customised": "Returnera endast meddelanden i detta anpassningstillstånd.",
+ "apihelp-query+allmessages-param-lang": "Returnera meddelanden på detta språk.",
+ "apihelp-query+allmessages-param-from": "Returnera meddelanden med början på detta meddelande.",
+ "apihelp-query+allmessages-param-to": "Returnera meddelanden fram till och med detta meddelande.",
+ "apihelp-query+allmessages-param-title": "Sidnamn som ska användas som kontext vid parsning av meddelande (för alternativet $1enableparser).",
+ "apihelp-query+allmessages-param-prefix": "Returnera meddelanden med detta prefix.",
+ "apihelp-query+allmessages-example-ipb": "Visa meddelanden som börjar med <kbd>ipb-</kbd>.",
+ "apihelp-query+allmessages-example-de": "Visa meddelanden <kbd>august</kbd> och <kbd>mainpage</kbd> på tyska.",
+ "apihelp-query+allpages-param-prefix": "Sök efter alla sidtitlar som börjar med detta värde.",
+ "apihelp-query+allpages-param-filterredir": "Vilka sidor att lista.",
+ "apihelp-query+allpages-param-minsize": "Begränsa till sidor med detta antal byte eller fler.",
+ "apihelp-query+allpages-param-maxsize": "Begränsa till sidor med högst så här många byte.",
+ "apihelp-query+allpages-param-prtype": "Begränsa till endast skyddade sidor.",
+ "apihelp-query+allpages-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+allpages-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+allpages-example-B": "Visa en lista över sidor som börjar på bokstaven <kbd>B</kbd>.",
+ "apihelp-query+allredirects-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+allredirects-example-unique-generator": "Hämtar alla målsidor, markerar de som saknas.",
+ "apihelp-query+alltransclusions-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+allusers-param-prefix": "Sök för alla användare som börjar med detta värde.",
+ "apihelp-query+allusers-param-dir": "Riktning att sortera i.",
+ "apihelp-query+allusers-param-group": "Inkludera bara användare i de givna grupperna.",
+ "apihelp-query+allusers-param-excludegroup": "Exkludera användare i de givna grupperna.",
+ "apihelp-query+allusers-param-rights": "Inkludera bara användare med de givna rättigheterna. Inkluderar inte rättigheter givna med implicita eller automatiskt promotade grupper som *, användare, eller auto-konfirmerad.",
+ "apihelp-query+allusers-param-limit": "Hur många användarnamn att returnera totalt.",
+ "apihelp-query+allusers-param-witheditsonly": "Lista bara användare som har gjort redigeringar.",
+ "apihelp-query+allusers-param-activeusers": "Lista bara användare aktiva i dem sista $1{{PLURAL:$1|dagen|dagarna}}.",
+ "apihelp-query+allusers-example-Y": "Lista användare som börjar på <kbd>Y</kbd>.",
+ "apihelp-query+backlinks-description": "Hitta alla sidor som länkar till den givna sidan.",
+ "apihelp-query+backlinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+categories-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+duplicatefiles-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+duplicatefiles-example-generated": "Leta efter kopior av alla filer.",
+ "apihelp-query+embeddedin-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+embeddedin-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+filearchive-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+filearchive-example-simple": "Visa en lista över alla borttagna filer.",
+ "apihelp-query+images-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+imageusage-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+imageusage-example-simple": "Visa sidor med hjälp av [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+imageusage-example-generator": "Hämta information om sidor med hjälp av [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+iwbacklinks-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+iwbacklinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+iwlinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+langbacklinks-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+langbacklinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+langbacklinks-example-simple": "Hämta sidor som länkar till [[:fr:Test]].",
+ "apihelp-query+langlinks-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+links-param-dir": "Riktningen att lista mot.",
+ "apihelp-query+protectedtitles-param-limit": "Hur många sidor att returnera totalt.",
+ "apihelp-query+protectedtitles-example-simple": "Lista skyddade titlar.",
+ "apihelp-query+recentchanges-example-simple": "Lista de senaste ändringarna.",
+ "apihelp-query+revisions-example-first5-not-localhost": "Hämta första 5 revideringarna av \"huvudsidan\" och som inte gjorts av anonym användare \"127.0.0.1\"",
+ "apihelp-query+siteinfo-example-simple": "Hämta information om webbplatsen.",
+ "apihelp-query+stashimageinfo-description": "Returnerar filinformation för temporära filer.",
+ "apihelp-query+stashimageinfo-param-filekey": "Nyckel som identifierar en tidigare uppladdning som lagrats temporärt.",
+ "apihelp-query+stashimageinfo-example-simple": "Returnerar information för en temporär fil",
+ "apihelp-query+tags-example-simple": "Lista tillgängliga taggar.",
+ "apihelp-query+userinfo-example-simple": "Få information om den aktuella användaren.",
+ "apihelp-query+userinfo-example-data": "Få ytterligare information om den aktuella användaren.",
+ "apihelp-query+watchlist-description": "Hämta de senaste ändringarna på sidor i den nuvarande användarens bevakningslista.",
+ "apihelp-query+watchlist-example-allrev": "Hämta information om de senaste ändringarna på sidor på den aktuella användarens bevakningslista.",
+ "apihelp-query+watchlist-example-generator": "Hämta sidinformation för nyligen uppdaterade sidor på nuvarande användares bevakningslista.",
+ "apihelp-query+watchlist-example-generator-rev": "Hämta ändringsinformation för nyligen uppdaterade sidor på nuvarande användares bevakningslista.",
+ "apihelp-query+watchlistraw-description": "Hämta alla sidor på den aktuella användarens bevakningslista.",
+ "apihelp-query+watchlistraw-example-simple": "Lista sidor på den aktuella användarens bevakningslista.",
+ "apihelp-setnotificationtimestamp-example-all": "Återställ meddelandestatus för hela bevakningslistan.",
+ "apihelp-upload-param-filekey": "Nyckel som identifierar en tidigare uppladdning som lagrats temporärt.",
+ "apihelp-upload-param-stash": "Om angiven, kommer servern att temporärt lagra filen istället för att lägga till den i centralförvaret.",
+ "apihelp-upload-example-url": "Ladda upp från URL.",
+ "apihelp-upload-example-filekey": "Slutför en uppladdning som misslyckades på grund av varningar.",
+ "api-help-main-header": "Huvudmodul",
+ "api-help-flag-deprecated": "Denna modul är föråldrad.",
+ "api-help-flag-internal": "<strong>Denna modul är intern eller instabil.</strong> Dess funktion kan ändras utan föregående meddelande.",
+ "api-help-flag-readrights": "Denna modul kräver läsrättigheter.",
+ "api-help-flag-writerights": "Denna modul kräver skrivrättigheter.",
+ "api-help-flag-mustbeposted": "Denna modul accepterar endast POST-begäranden.",
+ "api-help-flag-generator": "Denna modul kan användas som en generator.",
+ "api-help-parameters": "{{PLURAL:$1|Parameter|Parametrar}}:",
+ "api-help-param-deprecated": "Föråldrad.",
+ "api-help-param-required": "Denna parameter är obligatorisk.",
+ "api-help-param-list": "{{PLURAL:$1|1=ett värde|2=värden (separade med \"{{!}}\")}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Måste vara tom|Kan vara tom, eller $2}}",
+ "api-help-param-limit": "Inte mer än $1 tillåts.",
+ "api-help-param-limit2": "Inte mer än $1 ($2 för robotar) tillåts."
+}
diff --git a/includes/api/i18n/te.json b/includes/api/i18n/te.json
new file mode 100644
index 00000000..8678f2a2
--- /dev/null
+++ b/includes/api/i18n/te.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Veeven"
+ ]
+ },
+ "apihelp-feedrecentchanges-example-simple": "ఇటీవలి మార్పులను చూడండి"
+}
diff --git a/includes/api/i18n/tl.json b/includes/api/i18n/tl.json
new file mode 100644
index 00000000..ddf52d40
--- /dev/null
+++ b/includes/api/i18n/tl.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Leeheonjin"
+ ]
+ },
+ "apihelp-feedrecentchanges-example-simple": "Ipakit ang mga kamakailangang pagbabago.",
+ "apihelp-feedrecentchanges-example-30days": "Ipakita ang mga huling pagbabago sa loob para sa 30 araw.",
+ "apihelp-help-example-main": "Tulong para sa pangunahing modulo.",
+ "apihelp-help-example-recursive": "Lahat ng tulong sa iisang pahina.",
+ "apihelp-login-example-login": "Lumagda (Mag-log in).",
+ "apihelp-move-example-move": "I-urong ang <kbd>Badtitle</kbd> sa <kbd>Goodtitle</kbd> nang hindi nag-iiwan ng redirekta.",
+ "apihelp-options-example-reset": "Ibalik sa dati ang lahat ng mga kanaisan.",
+ "apihelp-patrol-example-rcid": "Bantayan ang kasalukuyang pagbabago.",
+ "apihelp-query+allimages-example-B": "Ipakita ang talaan ng mga talakasang nagsisimula sa titik <kbd>B</kbd>.",
+ "apihelp-query+alllinks-example-generator": "Kinukuha ang mga pahinang naglalaman ng mga kawing.",
+ "apihelp-query+allpages-example-B": "Ipakita ang talaan ng mga pahinang nagsisimula sa titik <kbd>B</kbd>.",
+ "apihelp-query+alltransclusions-example-generator": "Kinukuha ang mga pahinang naglalaman ng mga transklusyon.",
+ "apihelp-query+backlinks-example-simple": "Ipakita ang mga kawing sa <kbd>Unang pahina<kbd>.",
+ "apihelp-query+categoryinfo-example-simple": "Kumuha ng impormasyon tungkol sa <kbd>Kategorya:Foo</kbd> at <kbd>Kategorya:Bar</kbd>.",
+ "apihelp-query+duplicatefiles-example-simple": "Maghanap para sa mga duplika ng [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+duplicatefiles-example-generated": "Hanapin ang mga duplika ng lahat ng talakasan.",
+ "apihelp-query+images-example-simple": "Kumuha ng talaan ng mga talakasang ginagamit sa [[Unang Pahina]].",
+ "apihelp-query+imageusage-example-simple": "Ipakita ang mga pahina gamit ang [[:File:Albert Einstein Head.jpg]].",
+ "apihelp-query+iwbacklinks-example-simple": "Kumuha ng mga pahinang nakarugtong sa [[wikibooks:Test]].",
+ "apihelp-query+linkshere-example-generator": "Kumuha ng kabatiran tungkol sa mga pahina na kumakawing sa [[Unang Pahina]].",
+ "apihelp-query+recentchanges-example-simple": "Talaan ng mga kamakailang pagbabago.",
+ "apihelp-query+search-example-text": "Hanapin ang mga teksto para sa <kbd>kahulugan</kbd>.",
+ "apihelp-query+siteinfo-example-simple": "Kunin ang impormasyon ng sityo.",
+ "apihelp-query+templates-example-simple": "Kumuha ng mga suleras o padron na ginamit sa pahinang <kbd>Unang Pahina</kbd>.",
+ "apihelp-query+watchlist-example-simple": "Itala ang mga punong pagbabago ng mga kasalukuyang binagong pahina sa kasalukuyang listahan ng binabantayan ng tagagamit.",
+ "apihelp-revisiondelete-example-revision": "Itago ang nilalaman para sa pagbabago ng <kbd>12345</kbd> sa pahinang <kbd>Unang Pahina</kbd>.",
+ "apihelp-upload-example-url": "Mag-karga mula sa URL.",
+ "apihelp-watch-example-watch": "Bantayan ang pahinang <kbd>Unang Pahina</kbd>."
+}
diff --git a/includes/api/i18n/tr.json b/includes/api/i18n/tr.json
new file mode 100644
index 00000000..3a9ff258
--- /dev/null
+++ b/includes/api/i18n/tr.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sayginer"
+ ]
+ },
+ "apihelp-edit-param-text": "Sayfa içeriği.",
+ "apihelp-edit-param-minor": "Küçük değişiklik.",
+ "apihelp-edit-param-nocreate": "Sayfa mevcut değilse hata oluştur.",
+ "apihelp-edit-param-watch": "Sayfayı izleme listenize ekleyin.",
+ "apihelp-edit-param-unwatch": "Sayfayı izleme listenizden çıkarın.",
+ "apihelp-edit-param-redirect": "Yönlendirmeleri otomatik olarak çöz.",
+ "apihelp-emailuser-description": "Bir kullanıcıya e-posta gönder.",
+ "apihelp-emailuser-param-target": "E-posta gönderilecek kullanıcı.",
+ "apihelp-emailuser-param-subject": "Konu başlığı.",
+ "apihelp-emailuser-param-text": "E-posta metni.",
+ "apihelp-emailuser-param-ccme": "Bu e-postanın bir kopyasını bana gönder.",
+ "apihelp-feedcontributions-param-toponly": "Yalnızca son revizyon olan değişiklikleri göster.",
+ "apihelp-feedcontributions-param-newonly": "Yalnızca yeni sayfa oluşturan değişiklikleri göster.",
+ "apihelp-feedcontributions-param-showsizediff": "Sürümler arasındaki boyut farkını göster.",
+ "apihelp-feedrecentchanges-param-limit": "Verilecek azami sonuç sayısı.",
+ "apihelp-feedrecentchanges-param-hideminor": "Küçük değişiklikleri gizle.",
+ "apihelp-feedrecentchanges-param-hidebots": "Bot değişikliklerini gizle.",
+ "apihelp-feedrecentchanges-param-hideanons": "Anonim kullanıcı değişikliklerini gizle.",
+ "apihelp-feedrecentchanges-param-hideliu": "Kayıtlı kullanıcı değişikliklerini gizle.",
+ "apihelp-feedrecentchanges-param-hidemyself": "Kendi değişikliklerini gizle.",
+ "apihelp-feedrecentchanges-example-simple": "Son değişiklikleri göster",
+ "apihelp-feedrecentchanges-example-30days": "Son 30 gündeki değişiklikleri göster",
+ "apihelp-filerevert-description": "Bir dosyayı eski bir sürümüne geri döndür.",
+ "apihelp-move-description": "Bir sayfayı taşı.",
+ "apihelp-move-param-from": "Taşımak istediğiniz sayfanın başlığı. $1fromid ile birlikte kullanılamaz.",
+ "apihelp-move-param-noredirect": "Yönlendirme oluşturmayın.",
+ "apihelp-opensearch-param-limit": "Verilecek azami sonuç sayısı.",
+ "apihelp-options-example-reset": "Tüm tercihleri sıfırla",
+ "api-help-title": "MediaWiki API yardımı",
+ "api-help-parameters": "{{PLURAL:$1|Parametre|Parametre}}:",
+ "api-help-param-limit": "$1 taneden fazla olamaz.",
+ "api-help-param-limit2": "$1 taneden fazla (botlar için $2) olamaz.",
+ "api-help-param-default": "Varsayılan: $1"
+}
diff --git a/includes/api/i18n/uk.json b/includes/api/i18n/uk.json
new file mode 100644
index 00000000..13ce4907
--- /dev/null
+++ b/includes/api/i18n/uk.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ата",
+ "A1"
+ ]
+ },
+ "apihelp-main-param-action": "Яку дію виконати.",
+ "apihelp-main-param-format": "Формат виводу.",
+ "apihelp-block-description": "Заблокувати користувача.",
+ "apihelp-block-param-user": "Ім'я користувача, IP-адреса або діапазон IP-адрес для блокування.",
+ "apihelp-block-param-reason": "Причина блокування.",
+ "apihelp-block-param-nocreate": "Заборонити створення облікових записів.",
+ "apihelp-createaccount-param-name": "Ім'я користувача.",
+ "apihelp-createaccount-param-password": "Пароль (ігнорується, якщо встановлено <var>$1mailpassword</var>).",
+ "apihelp-createaccount-param-domain": "Домен для зовнішньої аутентифікації (опціонально).",
+ "apihelp-edit-example-edit": "Редагувати сторінку",
+ "apihelp-edit-example-prepend": "Додати зміст на початок сторінки",
+ "apihelp-edit-example-undo": "Скасувати версії з 13579 по 13585 з автоматичним описом змін",
+ "apihelp-emailuser-description": "Надіслати електронного листа користувачеві",
+ "apihelp-emailuser-param-target": "Користувач, якому відправляється електронний лист.",
+ "apihelp-emailuser-param-subject": "Заголовок теми.",
+ "apihelp-emailuser-param-text": "Тіло листа.",
+ "apihelp-emailuser-param-ccme": "Надіслати копію цього повідомлення мені.",
+ "apihelp-emailuser-example-email": "Відправити листа користувачу \"WikiSysop\" з текстом \"Вміст\"",
+ "apihelp-expandtemplates-description": "Розгортає усі шаблони у вікітекст.",
+ "apihelp-expandtemplates-param-title": "Заголовок сторінки.",
+ "apihelp-expandtemplates-param-text": "Вікітекст для перетворення.",
+ "apihelp-move-param-ignorewarnings": "Ігнорувати всі попередження"
+}
diff --git a/includes/api/i18n/vi.json b/includes/api/i18n/vi.json
new file mode 100644
index 00000000..a027d9d8
--- /dev/null
+++ b/includes/api/i18n/vi.json
@@ -0,0 +1,156 @@
+{
+ "@metadata": {
+ "authors": [
+ "Minh Nguyen",
+ "Max20091",
+ "Dinhxuanduyet"
+ ]
+ },
+ "apihelp-main-param-action": "Tác vụ để thực hiện.",
+ "apihelp-main-param-format": "Định dạng của dữ liệu được cho ra.",
+ "apihelp-block-description": "Cấm người dùng.",
+ "apihelp-block-param-user": "Tên truy nhập, địa chỉ IP hoặc dãi IP mà bạn muốn chặn.",
+ "apihelp-block-param-reason": "Lý do cấm.",
+ "apihelp-block-param-nocreate": "Cấm tạo tài khoản.",
+ "apihelp-clearhasmsg-description": "Xóa cờ <code>hasmsg</code> cho người dùng hiện tại.",
+ "apihelp-clearhasmsg-example-1": "Xóa cờ <code>hasmsg</code> cho người dùng hiện tại",
+ "apihelp-compare-param-fromtitle": "So sánh tiêu đề đầu tiên.",
+ "apihelp-compare-param-fromid": "So sánh ID trang đầu tiên.",
+ "apihelp-compare-param-fromrev": "So sánh sửa đổi đầu tiên.",
+ "apihelp-compare-param-totitle": "So sánh tiêu đề thứ hai.",
+ "apihelp-compare-param-toid": "So sánh ID tran thứ hai.",
+ "apihelp-compare-param-torev": "So sánh sửa đổi thứ hai.",
+ "apihelp-compare-example-1": "Tạo một so sánh giữa phiên bản 1 và 2.",
+ "apihelp-createaccount-description": "Mở tài khoản mới.",
+ "apihelp-createaccount-param-name": "Tên người dùng.",
+ "apihelp-createaccount-param-password": "Mật khẩu (được bỏ qua nếu <var>$1mailpassword</var> được đặt).",
+ "apihelp-createaccount-param-domain": "Tên miền để xác thực bên ngoài (tùy chọn).",
+ "apihelp-createaccount-param-token": "Dấu hiệu mở tài khoản được lấy trong yêu cầu đầu tiên.",
+ "apihelp-createaccount-param-email": "Địa chỉ thư điện tử của thành viên (tùy chọn).",
+ "apihelp-createaccount-param-realname": "Tên thật của thành viên (tùy chọn).",
+ "apihelp-createaccount-param-mailpassword": "Nếu đặt bất kỳ giá trị nào, một mật khẩu ngẫu nhiên sẽ được email lại cho người dùng.",
+ "apihelp-createaccount-param-reason": "Lý do tùy chọn cho việc tạo tài khoản để đăng nhập.",
+ "apihelp-createaccount-param-language": "Mã ngôn ngữ để thiết lập mặc định cho người dùng (tùy chọn, mặc định là ngôn ngữ nội dung).",
+ "apihelp-createaccount-example-pass": "Tạo người dùng <kbd>người kiểm tra</kbd> với mật khẩu <kbd>test123</kbd>.",
+ "apihelp-createaccount-example-mail": "Tạo người dùng <kbd>người dùng kiểm tra email> và email một mật khẩu được tạo ra ngẫu nhiên.",
+ "apihelp-delete-description": "Xóa trang.",
+ "apihelp-delete-param-title": "Xóa tiêu đề của trang. Không thể sử dụng cùng với <var>$1pageid</var>.",
+ "apihelp-delete-param-pageid": "Xóa ID của trang. Không thể sử dụng cùng với <var>$1title</var>.",
+ "apihelp-delete-param-watch": "Thêm trang vào danh sách theo dõi của bạn.",
+ "apihelp-delete-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của bạn.",
+ "apihelp-delete-example-simple": "Xóa Trang Chính",
+ "apihelp-delete-example-reason": "Xóa Trang Chính với lý do “Chuẩn bị di chuyển”",
+ "apihelp-disabled-description": "Mô đun này đã bị vô hiệu hóa.",
+ "apihelp-edit-description": "Tạo và sửa trang.",
+ "apihelp-edit-param-section": "Số phần trang. 0 là phần đầu; “new” là phần mới.",
+ "apihelp-edit-param-sectiontitle": "Tên của phần mới.",
+ "apihelp-edit-param-text": "Nội dung trang.",
+ "apihelp-edit-param-summary": "Tóm lược sửa đổi. Cũng là tên phần khi $1section=new và $1sectiontitle không được đặt.",
+ "apihelp-edit-param-minor": "Sửa đổi nhỏ.",
+ "apihelp-edit-param-notminor": "Sửa đổi không nhỏ.",
+ "apihelp-edit-param-bot": "Đánh dấu sửa đổi này là do bot thực hiện.",
+ "apihelp-edit-param-createonly": "Không sửa đổi trang nếu nó đã tồn tại.",
+ "apihelp-edit-param-nocreate": "Gây lỗi nếu trang không tồn tại.",
+ "apihelp-edit-param-watch": "Thêm trang vào danh sách theo dõi của bạn.",
+ "apihelp-edit-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của bạn.",
+ "apihelp-edit-param-undo": "Hoàn tác sửa đổi này. Ghi đè $1text, $1prependtext và $ 1appendtext.",
+ "apihelp-edit-param-undoafter": "Hoàn tác tất cả các sửa đổi từ $1undo cho tới sửa đổi này. Nếu không được thiết lập, chỉ cần lùi lại một sửa đổi.",
+ "apihelp-edit-example-edit": "Sửa đổi trang",
+ "apihelp-edit-example-prepend": "Đưa <kbd>_&#95;NOTOC_&#95;</kbd> vào đầu trang",
+ "apihelp-edit-example-undo": "Lùi sửa các thay đổi 13579–13585 và tự động tóm lược",
+ "apihelp-emailuser-description": "Gửi thư cho người dùng.",
+ "apihelp-emailuser-param-target": "Người dùng để gửi thư điện tử cho.",
+ "apihelp-emailuser-param-subject": "Tiêu đề bức thư.",
+ "apihelp-emailuser-param-text": "Nội dung bức thư.",
+ "apihelp-emailuser-param-ccme": "Gửi bản sao của thư này cho tôi.",
+ "apihelp-emailuser-example-email": "Gửi thư điện tử cho thành viên “BQVWiki” với văn bản “Nội dung”",
+ "apihelp-expandtemplates-description": "Bung tất cả bản mẫu trong văn bản wiki.",
+ "apihelp-expandtemplates-param-title": "Tên trang.",
+ "apihelp-expandtemplates-param-text": "Văn bản wiki để bung.",
+ "apihelp-filerevert-param-comment": "Tải lên bình luận.",
+ "apihelp-filerevert-param-archivename": "Tên lưu trữ của bản sửa đổi để trở lại .",
+ "apihelp-filerevert-example-revert": "Hoàn nguyên <kbd>Wiki.png</kbd> veef phiên bản 2011-03-05T15 : 27:40Z",
+ "apihelp-help-description": "Hiển thị trợ giúp cho các mô-đun xác định.",
+ "apihelp-help-param-helpformat": "Định dạng của văn bản trợ giúp được cho ra.",
+ "apihelp-help-example-recursive": "Tất cả trợ giúp trong một trang",
+ "apihelp-help-example-help": "Trợ giúp cho chính bản thân module trợ giúp",
+ "apihelp-help-example-query": "Trợ giúp cho hai module con truy vấn",
+ "apihelp-imagerotate-description": "Xoay một hoặc nhiều hình ảnh.",
+ "apihelp-imagerotate-param-rotation": "Độ xoay hình ảnh theo chiều kim đồng hồ.",
+ "apihelp-imagerotate-example-simple": "Xoay [[:Tập tin:Ví dụ.jpg]] 90 độ",
+ "apihelp-imagerotate-example-generator": "Xoay tất cả các hình ảnh trong [[:Thể loại:Búng]] 180 độ",
+ "apihelp-login-param-name": "Tên người dùng.",
+ "apihelp-login-param-password": "Mật khẩu.",
+ "apihelp-login-param-domain": "Tên miền (tùy chọn).",
+ "apihelp-login-param-token": "Dấu hiệu đăng nhập được lấy trong yêu cầu đầu tiên.",
+ "apihelp-login-example-gettoken": "Lấy dấu hiệu đăng nhập",
+ "apihelp-login-example-login": "Đăng nhập",
+ "apihelp-logout-example-logout": "Đăng xuất người dùng hiện tại",
+ "apihelp-move-description": "Di chuyển trang.",
+ "apihelp-move-param-reason": "Lý do di chuyển.",
+ "apihelp-move-param-noredirect": "Không tạo trang đổi hướng.",
+ "apihelp-move-param-ignorewarnings": "Bỏ qua tất cả các cảnh báo.",
+ "apihelp-opensearch-description": "Tìm kiếm trong wiki qua giao thức OpenSearch.",
+ "apihelp-opensearch-param-search": "Chuỗi tìm kiếm.",
+ "apihelp-opensearch-param-limit": "Đa số kết quả để cho ra.",
+ "apihelp-opensearch-param-namespace": "Không gian tên để tìm kiếm.",
+ "apihelp-opensearch-param-format": "Định dạng kết quả được cho ra.",
+ "apihelp-opensearch-example-te": "Tìm trang bắt đầu với “Te”",
+ "apihelp-options-example-reset": "Mặc định lại các tùy chọn",
+ "apihelp-paraminfo-param-helpformat": "Định dạng chuỗi trợ giúp.",
+ "apihelp-parse-param-summary": "Lời tóm lược để phân tích.",
+ "apihelp-parse-param-section": "Chỉ truy xuất nội dung của số bộ phận này.",
+ "apihelp-parse-param-disablepp": "Vô hiệu hóa phân tích cú pháp đầu ra của Báo cáo PP .",
+ "apihelp-parse-example-page": "Phân tích trang.",
+ "apihelp-parse-example-text": "Phân tích văn bản wiki.",
+ "apihelp-parse-example-texttitle": "Phân tích văn bản wiki theo tên trang.",
+ "apihelp-parse-example-summary": "Phân tích lời tóm lược.",
+ "apihelp-protect-example-protect": "Khóa trang.",
+ "apihelp-protect-example-unprotect": "Mở khóa trang bằng cách đặt hạn chế thành “all”",
+ "apihelp-protect-example-unprotect2": "Mở khóa trang bằng cách không đặt hạn chế nào",
+ "apihelp-purge-param-forcelinkupdate": "Cập nhật các bảng liên kết.",
+ "apihelp-purge-example-generator": "Làm mới 10 trang đầu tiên trong không gian tên chính",
+ "apihelp-query-param-prop": "Các thuộc tính để lấy khi truy vấn các trang.",
+ "apihelp-query-param-list": "Các danh sách để lấy.",
+ "apihelp-query-param-meta": "Siêu dữ liệu để lấy.",
+ "apihelp-query+allcategories-param-dir": "Hướng xếp loại.",
+ "apihelp-rollback-description": "Hoàn tác chỉnh sửa cuối cùng của trang này.\n\nNếu người dùng cuối cùng đã cỉnh sửa trang này nhiều lần, tất cả chúng sẽ được hoàn tác lại như ban đầu.",
+ "apihelp-format-example-generic": "Định dạng kết quả truy vấn dưới dạng $1",
+ "apihelp-dbg-description": "Cho ra dữ liệu dưới dạng var_export() của PHP.",
+ "apihelp-dbgfm-description": "Cho ra dữ liệu dưới dạng var_export() của PHP (định dạng bằng HTML).",
+ "apihelp-dump-description": "Cho ra dữ liệu dưới dạng var_dump() của PHP.",
+ "apihelp-dumpfm-description": "Cho ra dữ liệu dưới dạng var_dump() của PHP (định dạng bằng HTML).",
+ "apihelp-json-description": "Cho ra dữ liệu dưới dạng JSON.",
+ "apihelp-jsonfm-description": "Cho ra dữ liệu dưới dạng JSON (định dạng bằng HTML).",
+ "apihelp-none-description": "Không cho ra gì.",
+ "apihelp-rawfm-description": "Cho ra dữ liệu với các phần tử gỡ lỗi dưới dạng JSON (định dạng bằng HTML).",
+ "apihelp-txt-description": "Cho ra dữ liệu dưới dạng print_r() của PHP.",
+ "apihelp-txtfm-description": "Cho ra dữ liệu dưới dạng print_r() của PHP (định dạng bằng HTML).",
+ "apihelp-wddx-description": "Cho ra dữ liệu dưới dạng WDDX.",
+ "apihelp-wddxfm-description": "Cho ra dữ liệu dưới dạng WDDX (định dạng bằng HTML).",
+ "apihelp-xml-description": "Cho ra dữ liệu dưới dạng XML.",
+ "apihelp-xmlfm-description": "Cho ra dữ liệu dưới dạng XML (định dạng bằng HTML).",
+ "apihelp-yaml-description": "Cho ra dữ liệu dưới dạng YAML.",
+ "apihelp-yamlfm-description": "Cho ra dữ liệu dưới dạng YAML (định dạng bằng HTML).",
+ "api-format-title": "Kết quả API MediaWiki",
+ "api-help-title": "Trợ giúp về API MediaWiki",
+ "api-help-main-header": "Mô đun chính",
+ "api-help-flag-deprecated": "Mô đun này đã bị phản đối.",
+ "api-help-flag-readrights": "Mô đun này cần quyền đọc.",
+ "api-help-flag-writerights": "Mô đun này cần quyền ghi.",
+ "api-help-flag-mustbeposted": "Mô đun này chỉ có nhận các yêu cầu POST.",
+ "api-help-parameters": "{{PLURAL:$1|Tham số|Các tham số}}:",
+ "api-help-param-deprecated": "Bị phản đối.",
+ "api-help-param-required": "Tham số này là bắt buộc.",
+ "api-help-param-list": "{{PLURAL:$1|1=Một giá trị|2=Các giá trị (phân tách bằng “{{!}}”)}}: $2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Cần phải để trống|Cần phải để trống hoặc là $2}}",
+ "api-help-param-limit": "Không cho phép hơn $1.",
+ "api-help-param-limit2": "Không cho phép hơn $1 ($2 đối với các bot).",
+ "api-help-param-multi-separate": "Phân tách các giá trị bằng “|”.",
+ "api-help-param-default": "Mặc định: $1",
+ "api-help-param-default-empty": "Mặc định: <span class=\"apihelp-empty\">(trống)</span>",
+ "api-help-examples": "{{PLURAL:$1|Ví dụ|Các ví dụ}}:",
+ "api-help-permissions": "{{PLURAL:$1|Quyền hạn|Các quyền hạn}}:",
+ "api-help-permissions-granted-to": "{{PLURAL:$1}}Cấp cho: $2",
+ "api-credits-header": "Ghi công"
+}
diff --git a/includes/api/i18n/zh-hans.json b/includes/api/i18n/zh-hans.json
new file mode 100644
index 00000000..722803bf
--- /dev/null
+++ b/includes/api/i18n/zh-hans.json
@@ -0,0 +1,782 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gaoxuewei",
+ "Linforest",
+ "Liuxinyu970226",
+ "Papapasan",
+ "LNDDYL",
+ "Shizhao",
+ "Yfdyh000",
+ "JuneAugsut",
+ "EagerLin",
+ "Simon xianyu",
+ "Kuailong"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|文档]]\n* [[mw:API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong>本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong>当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:API:Errors_and_warnings|API: 错误与警告]]。",
+ "apihelp-main-param-action": "要执行的操作。",
+ "apihelp-main-param-format": "输出的格式。",
+ "apihelp-main-param-maxlag": "最大延迟可被用于MediaWiki安装于数据库复制集中。要保存导致更多网站复制延迟的操作,此参数可使客户端等待直到复制延迟少于指定值时。万一发生过多延迟,错误代码<samp>maxlag</samp>会返回消息,例如<samp>等待$host中:延迟$lag秒</samp>。<br />参见[[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]]以获取更多信息。",
+ "apihelp-main-param-smaxage": "设置<code>s-maxage</code>页顶至这些秒。错误不会缓存。",
+ "apihelp-main-param-maxage": "设置<code>max-age</code>页顶至这些秒。错误不会缓存。",
+ "apihelp-main-param-assert": "如果设置为<kbd>user</kbd>就验证用户是否登录,或如果设置为<kbd>bot</kbd>就验证是否有机器人用户权限。",
+ "apihelp-main-param-requestid": "任何在此提供的值将包含在响应中。可能可以用以区别请求。",
+ "apihelp-main-param-servedby": "包含保存结果请求的主机名。",
+ "apihelp-main-param-curtimestamp": "在结果中包括当前时间戳。",
+ "apihelp-main-param-origin": "当通过跨域名AJAX请求(CORS)访问API时,设置此作为起始域名。这必须包括在任何pre-flight请求中,并因此必须是请求的URI的一部分(而不是POST正文)。这必须匹配<code>Origin</code>中的一个起点:从头到底,因此它已经设置为像<kbd>https://zh.wikipedia.org</kbd>或<kbd>https://meta.wikimedia.org</kbd>的东西。如果此参数不匹配<code>Origin</code>页顶,就返回403错误响应。如果此参数匹配<code>Origin</code>页顶并且起点被白名单,将设置一个<code>Access-Control-Allow-Origin</code>开头。",
+ "apihelp-main-param-uselang": "用于消息翻译的语言。代码列表可从<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>通过<kbd>siprop=languages</kbd>获取,或指定<kbd>user</kbd>以使用当前用户的语言设置,或指定<kbd>content</kbd>以使用此wiki的内容语言。",
+ "apihelp-block-description": "封禁一位用户。",
+ "apihelp-block-param-user": "您要封禁的用户、IP地址或IP地址段。",
+ "apihelp-block-param-expiry": "到期时间。可以是相对时间(例如<kbd>5 months</kbd>或<kbd>2 weeks</kbd>)或绝对时间(例如<kbd>2014-09-18T12:34:56Z</kbd>)。如果设置为<kbd>infinite</kbd>、<kbd>indefinite</kbd>或<kbd>never</kbd>,封禁将无限期。",
+ "apihelp-block-param-reason": "封禁的原因",
+ "apihelp-block-param-anononly": "只封禁匿名用户(也就是说禁止此 IP 地址的匿名编辑)。",
+ "apihelp-block-param-nocreate": "防止创建帐户。",
+ "apihelp-block-param-autoblock": "自动封禁最近使用的IP地址,以及以后他们尝试登陆使用的IP地址。",
+ "apihelp-block-param-noemail": "阻止用户通过wiki发送电子邮件。(需要<code>blockemail</code>权限)。",
+ "apihelp-block-param-hidename": "从封禁日志中隐藏用户名。(需要<code>hideuser</code>权限)。",
+ "apihelp-block-param-allowusertalk": "允许用户编辑自己的讨论页(取决于<var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>)。",
+ "apihelp-block-param-reblock": "如果该用户已被封禁,则覆盖已有的封禁。",
+ "apihelp-block-param-watchuser": "监视用户或该 IP 的用户页和讨论页。",
+ "apihelp-block-example-ip-simple": "封禁IP地址<kbd>192.0.2.5</kbd>三天,原因<kbd>First strike</kbd>。",
+ "apihelp-block-example-user-complex": "无限期封禁用户<kbd>Vandal</kbd>,原因<kbd>Vandalism</kbd>,并阻止新账户创建和电子邮件发送。",
+ "apihelp-checktoken-description": "从<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-clearhasmsg-description": "清除当前用户的<code>hasmsg</code>标记。",
+ "apihelp-clearhasmsg-example-1": "清除当前用户的<code>hasmsg</code>标记。",
+ "apihelp-compare-description": "获得2个页面之间的差别。\n\n用于“from”和“to”的修订版本号、页面标题或页面 ID 必须获得通过。",
+ "apihelp-compare-param-fromtitle": "要比较的第一个标题。",
+ "apihelp-compare-param-fromid": "要比较的第一个页面 ID。",
+ "apihelp-compare-param-fromrev": "要比较的第一个修订版本。",
+ "apihelp-compare-param-totitle": "要比较的第二个标题。",
+ "apihelp-compare-param-toid": "要比较的第二个页面 ID。",
+ "apihelp-compare-param-torev": "要比较的第二个修订版本。",
+ "apihelp-compare-example-1": "在版本1和2中创建差异",
+ "apihelp-createaccount-description": "创建一个新用户账户。",
+ "apihelp-createaccount-param-name": "用户名",
+ "apihelp-createaccount-param-password": "密码(如果设置<var>$1mailpassword</var>则忽略)。",
+ "apihelp-createaccount-param-domain": "外部身份验证域 (可选)。",
+ "apihelp-createaccount-param-token": "在第一个请求中获得的帐户创建标记。",
+ "apihelp-createaccount-param-email": "用户的电子邮件地址(可选)。",
+ "apihelp-createaccount-param-realname": "用户的真实姓名(可选)。",
+ "apihelp-createaccount-param-mailpassword": "如果设置为任何值,将向用户发送一个随机密码。",
+ "apihelp-createaccount-param-reason": "将要放在日志中的,关于创建帐户的可选原因。",
+ "apihelp-createaccount-param-language": "要为用户设置为默认值的语言代码(可选,默认为内容语言)。",
+ "apihelp-createaccount-example-pass": "创建用户<kbd>testuser</kbd>和密码<kbd>test123</kbd>。",
+ "apihelp-createaccount-example-mail": "创建用户<kbd>testmailuser</kbd>并电邮发送一个随机生成的密码。",
+ "apihelp-delete-description": "删除一个页面。",
+ "apihelp-delete-param-title": "你所希望删除的页面的标题。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-delete-param-pageid": "要删除的页面的页面 ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-delete-param-reason": "删除原因。如果未设置,将使用一个自动生成的原因。",
+ "apihelp-delete-param-watch": "将该页面加入当前用户的监视列表。",
+ "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-delete-example-reason": "删除<kbd>Main Page</kbd>,原因<kbd>Preparing for move</kbd>。",
+ "apihelp-disabled-description": "此模块已禁用。",
+ "apihelp-edit-description": "创建和编辑页面。",
+ "apihelp-edit-param-title": "您希望编辑的页面标题。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-edit-param-pageid": "要编辑的页面的页面 ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-edit-param-section": "段落数。<kbd>0</kbd>用于首段,<kbd>new</kbd>用于新的段落。",
+ "apihelp-edit-param-sectiontitle": "新小节的标题。",
+ "apihelp-edit-param-text": "页面内容。",
+ "apihelp-edit-param-summary": "编辑摘要。当$1section=new且未设置$1sectiontitle时,还包括小节标题。",
+ "apihelp-edit-param-minor": "小编辑。",
+ "apihelp-edit-param-notminor": "不是小编辑。",
+ "apihelp-edit-param-bot": "标记此编辑为机器人编辑。",
+ "apihelp-edit-param-basetimestamp": "基础修订的时间戳,用于检测编辑冲突。也许可以通过[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]得到。",
+ "apihelp-edit-param-starttimestamp": "编辑过程开始的时间戳,用于检测编辑冲突。当开始编辑过程时(例如当加载要编辑的页面时)使用<var>[[Special:ApiHelp/main|curtimestamp]]</var>可能取得一个适当的值。",
+ "apihelp-edit-param-recreate": "覆盖有关该页面在此期间已被删除的任何错误。",
+ "apihelp-edit-param-createonly": "不要编辑页面,如果已经存在。",
+ "apihelp-edit-param-nocreate": "如果该页面不存在,则抛出一个错误。",
+ "apihelp-edit-param-watch": "将页面加入当前用户的监视列表。",
+ "apihelp-edit-param-unwatch": "将页面从当前用户的监视列表中移除。",
+ "apihelp-edit-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-edit-param-md5": "$1text参数或$1prependtext和$1appendtext级联参数的MD5哈希值。如果设置,除非哈希值正确否则编辑无法完成。",
+ "apihelp-edit-param-prependtext": "将该文本添加到该页面的开始。覆盖$1text。",
+ "apihelp-edit-param-appendtext": "将该文本添加到该页面的结尾。覆盖$1text。\n\n采用$1section=new来添加一个新的章节,而不是这个参数。",
+ "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": "通过13585撤销修订版本13579并自动填写编辑摘要",
+ "apihelp-emailuser-description": "电子邮件联系一位用户。",
+ "apihelp-emailuser-param-target": "电子邮件的目标用户。",
+ "apihelp-emailuser-param-subject": "主题页眉。",
+ "apihelp-emailuser-param-text": "邮件正文。",
+ "apihelp-emailuser-param-ccme": "给我发送一份该邮件的副本。",
+ "apihelp-emailuser-example-email": "向用户<kbd>WikiSysop</kbd>发送邮件,带文字<kbd>Content</kbd>。",
+ "apihelp-expandtemplates-description": "展开维基文本中的所有模板。",
+ "apihelp-expandtemplates-param-title": "页面标题。",
+ "apihelp-expandtemplates-param-text": "要转换的wiki文本。",
+ "apihelp-expandtemplates-param-revid": "修订版本ID,用于<nowiki>{{REVISIONID}}</nowiki>和类似变体。",
+ "apihelp-expandtemplates-param-prop": "要获取的那条信息:\n;wikitext:展开的wiki文本。\n;categories:任何在不代表wiki文本输出的输入框出现的分类。\n;properties:由wiki文本中扩充的魔术字定义的页面属性。\n;volatile:输出是否不稳定,并且不应在任何页面中再度使用。\n;ttl:结果的哪个缓存后等待最长时间应无效化。\n;parsetree:输入的XML解析树。\n注意如果没有选定值,结果将包含wiki文本,但将以弃用的格式显示。",
+ "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-description": "返回用户贡献纲要。",
+ "apihelp-feedcontributions-param-feedformat": "纲要的格式。",
+ "apihelp-feedcontributions-param-user": "获取哪些用户的贡献。",
+ "apihelp-feedcontributions-param-namespace": "过滤哪些命名空间的贡献。",
+ "apihelp-feedcontributions-param-year": "起始年份(及更早)。",
+ "apihelp-feedcontributions-param-month": "起始月份(及更早)。",
+ "apihelp-feedcontributions-param-tagfilter": "过滤有这些标签的贡献者。",
+ "apihelp-feedcontributions-param-deletedonly": "仅显示已删除的贡献。",
+ "apihelp-feedcontributions-param-toponly": "仅仅显示那些作为最新修订的编辑。",
+ "apihelp-feedcontributions-param-newonly": "仅仅显示那些作为页面创建的编辑。",
+ "apihelp-feedcontributions-param-showsizediff": "显示修订版本之间的大小差别。",
+ "apihelp-feedcontributions-example-simple": "返回用户<kbd>Example</kbd>的贡献。",
+ "apihelp-feedrecentchanges-description": "返回最新变更纲要。",
+ "apihelp-feedrecentchanges-param-feedformat": "纲要的格式。",
+ "apihelp-feedrecentchanges-param-namespace": "用于限制结果的命名空间。",
+ "apihelp-feedrecentchanges-param-invert": "除所选定者外的所有命名空间。",
+ "apihelp-feedrecentchanges-param-associated": "包括相关的命名空间(讨论页或主要)。",
+ "apihelp-feedrecentchanges-param-days": "用于限制结果的天数。",
+ "apihelp-feedrecentchanges-param-limit": "所要返回结果的最大数目。",
+ "apihelp-feedrecentchanges-param-from": "显示自那时以来的更改。",
+ "apihelp-feedrecentchanges-param-hideminor": "隐藏小更改。",
+ "apihelp-feedrecentchanges-param-hidebots": "隐藏机器人所做的更改。",
+ "apihelp-feedrecentchanges-param-hideanons": "隐藏匿名用户做出的更改。",
+ "apihelp-feedrecentchanges-param-hideliu": "隐藏注册用户做出的更改。",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "隐藏已巡查更改。",
+ "apihelp-feedrecentchanges-param-hidemyself": "隐藏当前用户做出的更改。",
+ "apihelp-feedrecentchanges-param-tagfilter": "按标签过滤。",
+ "apihelp-feedrecentchanges-param-target": "仅仅显示从该页面链出的那些页面的变更。",
+ "apihelp-feedrecentchanges-param-showlinkedto": "仅仅显示链入到该页面的那些页面的变更。",
+ "apihelp-feedrecentchanges-example-simple": "显示最近更改",
+ "apihelp-feedrecentchanges-example-30days": "显示最近30天的更改",
+ "apihelp-feedwatchlist-description": "返回监视列表纲要。",
+ "apihelp-feedwatchlist-param-feedformat": "纲要的格式。",
+ "apihelp-feedwatchlist-param-hours": "列出从现在起数小时内修改的页面。",
+ "apihelp-feedwatchlist-param-linktosections": "如果可能的话,直接链接到已变更的小节。",
+ "apihelp-feedwatchlist-example-default": "显示监视列表订阅",
+ "apihelp-feedwatchlist-example-all6hrs": "显示过去6小时内受监视页面的所有更改。",
+ "apihelp-filerevert-description": "回退一个文件至某一旧版本。",
+ "apihelp-filerevert-param-filename": "目标文件名,不包含前缀“File:”。",
+ "apihelp-filerevert-param-comment": "上传评论。",
+ "apihelp-filerevert-param-archivename": "恢复到修订版存档名称。",
+ "apihelp-filerevert-example-revert": "回退<kbd>Wiki.png</kbd>至<kbd>2011-03-05T15:27:40Z</kbd>的版本。",
+ "apihelp-help-description": "显示指定模块的帮助。",
+ "apihelp-help-param-modules": "用于显示帮助的模块(<var>action</var>和<var>format</var>参数值,或<kbd>main</kbd>)。可通过<kbd>+</kbd>指定子模块。",
+ "apihelp-help-param-submodules": "包括给定名称模块的子模块的帮助。",
+ "apihelp-help-param-recursivesubmodules": "包括递归子模块的帮助。",
+ "apihelp-help-param-helpformat": "帮助的输出格式。",
+ "apihelp-help-param-wrap": "在一个标准API响应结构中包裹输出。",
+ "apihelp-help-param-toc": "在HTML输出中包括目录。",
+ "apihelp-help-example-main": "主模块帮助",
+ "apihelp-help-example-recursive": "一个页面中的所有帮助",
+ "apihelp-help-example-help": "帮助模块本身的帮助",
+ "apihelp-help-example-query": "两个查询子模块的帮助",
+ "apihelp-imagerotate-description": "旋转一幅或多幅图像。",
+ "apihelp-imagerotate-param-rotation": "顺时针旋转图像的度数。",
+ "apihelp-imagerotate-example-simple": "<kbd>90</kbd>度旋转<kbd>File:Example.png</kbd>。",
+ "apihelp-imagerotate-example-generator": "将<kbd>Category:Flip</kbd>之中的所有图像旋转<kbd>180</kbd>度。",
+ "apihelp-import-description": "从另一个wiki导入一个页面,或一个XML文件。\n\n注意当发送一个用于<var>xml</var>参数的文件时,HTTP POST必须作为一次文件上传完成(也就是使用multipart/form-data)。",
+ "apihelp-import-param-summary": "导入摘要。",
+ "apihelp-import-param-xml": "上传的XML文件。",
+ "apihelp-import-param-interwikisource": "用于跨wiki导入:导入的来源wiki。",
+ "apihelp-import-param-interwikipage": "用于跨wiki导入:导入的页面。",
+ "apihelp-import-param-fullhistory": "用于跨wiki导入:完整导入历史,而不只是最新版本。",
+ "apihelp-import-param-templates": "用于跨wiki导入:连带导入所有包含的模板。",
+ "apihelp-import-param-namespace": "用于跨wiki导入:导入到此名字空间。",
+ "apihelp-import-param-rootpage": "导入作为此页面的子页面。",
+ "apihelp-import-example-import": "将页面[[meta:Help:Parserfunctions]]连带完整历史导入至100名字空间。",
+ "apihelp-login-description": "登录并获得身份验证Cookie。\n\n在成功登录的情况下,所需的Cookie将包含在HTTP响应头中。在登录失败的情况下,进一步的尝试可能会被自动密码猜解攻击的限制所遏制。",
+ "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-description": "退出并清除会话数据。",
+ "apihelp-logout-example-logout": "退出当前用户",
+ "apihelp-managetags-description": "执行有关更改标签的管理任务。",
+ "apihelp-managetags-param-operation": "要执行哪个操作:\n;create:创建一个新的更改标签供手动使用。\n;delete:从数据库中移除一个更改标签,包括移除已使用在所有修订版本、最近更改记录和日志记录上的该标签。\n;activate:激活一个更改标签,允许用户手动应用它。\n;deactivate:停用一个更改标签,阻止用户手动应用它。",
+ "apihelp-managetags-param-tag": "要创建、删除、激活或取消激活的标签。要创建标签,标签必须不存在。要删除标签,标签必须存在。要激活标签,标签必须存在,且不被任何扩展使用。要取消激活标签,标签必须当前处于激活状态,且被手动定义。",
+ "apihelp-managetags-param-reason": "一个创建、删除、激活或停用标签时的原因,可选。",
+ "apihelp-managetags-param-ignorewarnings": "是否忽略操作期间发生的任何警告。",
+ "apihelp-managetags-example-create": "创建一个名为<kbd>spam</kbd>的标签,原因<kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-delete": "删除<kbd>vandlaism</kbd>标签,原因<kbd>Misspelt</kbd>",
+ "apihelp-managetags-example-activate": "激活一个名为<kbd>spam</kbd>的标签,原因<kbd>For use in edit patrolling</kbd>",
+ "apihelp-managetags-example-deactivate": "停用一个名为<kbd>spam</kbd>的标签,原因<kbd>No longer required</kbd>",
+ "apihelp-move-description": "移动一个页面。",
+ "apihelp-move-param-from": "要重命名的页面标题。不能与<var>$1fromid</var>一起使用。",
+ "apihelp-move-param-fromid": "您希望移动的页面ID。不能与<var>$1from</var>一起使用。",
+ "apihelp-move-param-to": "页面重命名的目标标题。",
+ "apihelp-move-param-reason": "重命名的原因。",
+ "apihelp-move-param-movetalk": "重命名讨论页,如果存在。",
+ "apihelp-move-param-movesubpages": "重命名子页面,如果可以。",
+ "apihelp-move-param-noredirect": "不要创建重定向。",
+ "apihelp-move-param-watch": "将页面和重定向加入至当前用户的监视列表中。",
+ "apihelp-move-param-unwatch": "从当前用户的监视列表中移除页面及重定向。",
+ "apihelp-move-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-move-param-ignorewarnings": "忽略任何警告。",
+ "apihelp-move-example-move": "移动<kbd>坏标题</kbd>到<kbd>好标题</kbd>并且不留下重定向。",
+ "apihelp-opensearch-description": "使用OpenSearch协议搜索本wiki。",
+ "apihelp-opensearch-param-search": "搜索字符串。",
+ "apihelp-opensearch-param-limit": "要返回的结果最大数。",
+ "apihelp-opensearch-param-namespace": "搜索的名字空间。",
+ "apihelp-opensearch-param-suggest": "如果<var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>设置为false则不做任何事情。",
+ "apihelp-opensearch-param-redirects": "如何处理重定向:\n;return:返回重定向本身。\n;resolve:返回目标页面。可能返回少于$1limit个结果。\n由于历史原因,$1format=json默认为\"return\",其他格式默认为\"resolve\"。",
+ "apihelp-opensearch-param-format": "输出格式。",
+ "apihelp-opensearch-example-te": "查找以<kbd>Te</kbd>开头的页面。",
+ "apihelp-options-description": "更改当前用户的偏好设置。\n\n只有注册在核心或者已安装扩展中的选项,或者具有\"userjs-\"键值前缀(旨在被用户脚本使用)的选项可被设置。",
+ "apihelp-options-param-reset": "重置偏好设置到网站默认设置。",
+ "apihelp-options-param-resetkinds": "当<var>$1reset</var>选项被设置时,要重置的选项类型列表。",
+ "apihelp-options-param-change": "更改列表,以name=value格式化(例如skin=vector)。值不能包含管道字符。如果没提供值(甚至没有等号),例如optionname|otheroption|...,选项将重置为默认值。",
+ "apihelp-options-param-optionname": "应设置为由<var>$1optionvalue</var>提供值的选项名称。",
+ "apihelp-options-param-optionvalue": "使用<var>$1选项名</var>指定的选项值中,可以包含管道字符",
+ "apihelp-options-example-reset": "重置所有用户设置",
+ "apihelp-options-example-change": "更改<kbd>skin</kbd>和<kbd>hideminor</kbd>设置。",
+ "apihelp-options-example-complex": "重置所有设置,然后设置<kbd>皮肤</kbd>和<kbd>昵称</kbd>。",
+ "apihelp-paraminfo-description": "获取关于 API 模块的信息。",
+ "apihelp-paraminfo-param-modules": "模块名称(<var>action</var>和<var>format</var>参数值,或<kbd>main</kbd>)的列表。可通过<kbd>+</kbd>指定子模块。",
+ "apihelp-paraminfo-param-helpformat": "帮助字符串的格式。",
+ "apihelp-paraminfo-param-querymodules": "查询模块名称(<var>prop</var>、<var>meta</var>或<var>list</var>参数值)的列表。使用<kbd>$1modules=query+foo</kbd>而不是<kbd>$1querymodules=foo</kbd>。",
+ "apihelp-paraminfo-param-mainmodule": "获得有关主要(最高级)模块的信息。也可使用<kbd>$1modules=main</kbd>。",
+ "apihelp-paraminfo-param-pagesetmodule": "获得有关页面设置模块(提供titles=和朋友)的信息。",
+ "apihelp-paraminfo-param-formatmodules": "格式模块名称(<var>format</var>参数的值)的列表。也可使用<var>$1modules</var>。",
+ "apihelp-paraminfo-example-1": "显示<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>、<kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>、<kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>和<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>的信息。",
+ "apihelp-parse-description": "解析内容并返回解析器输出。\n\n参见<kbd>[[Special:ApiHelp/query|action=query]]</kbd>的各种prop-module以从页面的当前版本获得信息。\n\n这里有几种方法可以指定解析的文本:\n# 指定一个页面或修订,使用<var>$1page</var>、<var>$1pageid</var>或<var>$1oldid</var>。\n# 明确指定内容,使用<var>$1text</var>、<var>$1title</var>和<var>$1contentmodel</var>。\n# 只指定一段摘要解析。<var>$1prop</var>应提供一个空值。",
+ "apihelp-parse-param-title": "文本属于的页面标题。如果省略,<var>$1contentmodel</var>就必须被指定,且[[API]]将作为标题使用。",
+ "apihelp-parse-param-text": "要解析的文本。使用<var>$1title</var>或<var>$1contentmodel</var>以控制内容模型。",
+ "apihelp-parse-param-summary": "所要解析的摘要。",
+ "apihelp-parse-param-page": "解析此页的内容。不能与<var>$1text</var>和<var>$1title</var>一起使用。",
+ "apihelp-parse-param-pageid": "解析此页的内容。覆盖<var>$1page</var>。",
+ "apihelp-parse-param-redirects": "如果<var>$1page</var>或<var>$1pageid</var>被设置为一个重定向,则解析它。",
+ "apihelp-parse-param-oldid": "解析该修订版本的内容。覆盖<var>$1page</var>和<var>$1pageid</var>。",
+ "apihelp-parse-param-pst": "在解析输入前,对输入做一次保存前变换处理。仅当使用文本时有效。",
+ "apihelp-parse-param-effectivelanglinks": "包含由扩展提供的语言链接(用于与<kbd>$1prop=langlinks</kbd>一起使用)。",
+ "apihelp-parse-param-section": "只检索此段数的内容,或只当<kbd>new</kbd>生成新的段落时检索。\n\n<kbd>new</kbd>段落只当指定<var>text</var>时受尊重。",
+ "apihelp-parse-param-sectiontitle": "当<var>section</var>为<kbd>new</kbd>时新段落标题。\n\n不像页面编辑,当省略或为空时将不会备选为<var>summary</var>。",
+ "apihelp-parse-param-disablepp": "从解析器输出中禁用PP报告。",
+ "apihelp-parse-param-disableeditsection": "从解析器输出中禁用编辑段落链接。",
+ "apihelp-parse-param-generatexml": "生成XML解析树(需要内容模型<code>$1</code>)。",
+ "apihelp-parse-param-preview": "在预览模式下解析。",
+ "apihelp-parse-param-sectionpreview": "在小节预览模式下解析 (同时要启用预览模式)。",
+ "apihelp-parse-param-disabletoc": "在输出中禁用目录。",
+ "apihelp-parse-example-page": "解析一个页面。",
+ "apihelp-parse-example-text": "解析wiki文本。",
+ "apihelp-parse-example-texttitle": "解析维基文本,指定页面标题。",
+ "apihelp-parse-example-summary": "解析一个摘要。",
+ "apihelp-patrol-description": "巡查页面或修订版本。",
+ "apihelp-patrol-param-rcid": "所要巡查的最近变更 ID。",
+ "apihelp-patrol-param-revid": "要巡查的修订版本ID。",
+ "apihelp-patrol-example-rcid": "巡查一次最近更改",
+ "apihelp-patrol-example-revid": "巡查一次修订",
+ "apihelp-protect-description": "更改页面的保护等级。",
+ "apihelp-protect-param-title": "要(解除)保护的页面标题。不能与$1pageid一起使用。",
+ "apihelp-protect-param-pageid": "要(解除)保护的页面ID。不能与$1title一起使用。",
+ "apihelp-protect-param-protections": "保护等级列表,格式:<kbd>action=level</kbd>(例如<kbd>edit=sysop</kbd>)。\n\n<strong>注意:</strong>未列出的操作将移除限制。",
+ "apihelp-protect-param-expiry": "到期时间戳。如果只有一个时间戳被设置,它将被用于所有保护。使用<kbd>infinite</kbd>、<kbd>indefinite</kbd>、<kbd>infinity</kbd>或<kbd>never</kbd>用于永不过期的保护。",
+ "apihelp-protect-param-reason": "(解除)保护的原因。",
+ "apihelp-protect-param-cascade": "启用级联保护(也就是保护包含于此页面的页面)。如果所有提供的保护等级不支持级联,就将其忽略。",
+ "apihelp-protect-param-watch": "如果设置,就加入已开始(解除)保护的页面至当前用户的监视列表。",
+ "apihelp-protect-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-protect-example-protect": "保护一个页面",
+ "apihelp-protect-example-unprotect": "通过设置限制为<kbd>all</kbd>解除保护一个页面。",
+ "apihelp-protect-example-unprotect2": "通过设置没有限制解除保护一个页面",
+ "apihelp-purge-description": "为指定标题刷新缓存。\n\n如果用户尚未登录的话,就需要POST请求。",
+ "apihelp-purge-param-forcelinkupdate": "更新链接表。",
+ "apihelp-purge-param-forcerecursivelinkupdate": "更新链接表中,并更新任何使用此页作为模板的页面的链接表。",
+ "apihelp-purge-example-simple": "刷新<kbd>Main Page</kbd>和<kbd>API</kbd>页面。",
+ "apihelp-purge-example-generator": "刷新主名字空间的前10个页面",
+ "apihelp-query-description": "获取来自和有关MediaWiki的数据。\n\n所有数据修改将首先要使用查询以获得令牌以阻止来自恶意网站的滥用破坏。",
+ "apihelp-query-param-prop": "要为已查询页面获取的属性。",
+ "apihelp-query-param-list": "要获取的列表。",
+ "apihelp-query-param-meta": "要获取的元数据。",
+ "apihelp-query-param-rawcontinue": "目前被忽略。将来<var>$1continue</var>将成为默认,且这里将需要得到原始的<samp>query-continue</samp>数据。",
+ "apihelp-query-example-revisions": "获取<kbd>Main Page</kbd>的[[Special:ApiHelp/query+siteinfo|网站信息]]和[[Special:ApiHelp/query+revisions|修订版本]]。",
+ "apihelp-query-example-allpages": "获取以<kbd>API/</kbd>开头的页面的修订版本",
+ "apihelp-query+allcategories-description": "枚举所有类别。",
+ "apihelp-query+allcategories-param-from": "要作为枚举起始点的类别。",
+ "apihelp-query+allcategories-param-to": "要作为枚举终止点的类别。",
+ "apihelp-query+allcategories-param-prefix": "搜索此值开头的所有分类标题。",
+ "apihelp-query+allcategories-param-dir": "排序方向。",
+ "apihelp-query+allcategories-param-min": "只返回至少带这么多成员的分类。",
+ "apihelp-query+allcategories-param-max": "只返回最多带这么多成员的分类。",
+ "apihelp-query+allcategories-param-limit": "要返回多少个类别。",
+ "apihelp-query+allcategories-param-prop": "要获取的属性:\n;size:在分类中添加页面数。\n;hidden:标记由_&#95;HIDDENCAT_&#95;隐藏的分类。",
+ "apihelp-query+allcategories-example-size": "列出分类及其含有多少页面的信息。",
+ "apihelp-query+alldeletedrevisions-paraminfo-useronly": "只可以与<var>$3user</var>一起使用。",
+ "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "不能与<var>$3user</var>一起使用。",
+ "apihelp-query+alldeletedrevisions-param-start": "枚举的起始时间戳。",
+ "apihelp-query+alldeletedrevisions-param-end": "枚举的结束时间戳。",
+ "apihelp-query+alldeletedrevisions-param-from": "从此标题开始列出。",
+ "apihelp-query+alldeletedrevisions-param-to": "列出至此标题为止。",
+ "apihelp-query+alldeletedrevisions-param-tag": "只列出被此标签标记的修订。",
+ "apihelp-query+alldeletedrevisions-param-user": "只列出此用户做出的修订。",
+ "apihelp-query+alldeletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
+ "apihelp-query+alldeletedrevisions-param-namespace": "只列出此名字空间的页面。",
+ "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>注意:</strong>由于[[mw:Manual:$wgMiserMode|miser模式]],同时使用<var>$1user</var>和<var>$1namespace</var>将导致继续前返回少于<var>$1limit</var>个结果,在极端条件下可能不返回任何结果。",
+ "apihelp-query+alldeletedrevisions-example-user": "列出由<kbd>Example<kbd>作出的最近50次已删除贡献。",
+ "apihelp-query+alldeletedrevisions-example-ns-main": "列出前50次已删除的主名字空间修订。",
+ "apihelp-query+allfileusages-description": "列出所有文件用途,包括不存在的。",
+ "apihelp-query+allfileusages-param-from": "文件的标题开始枚举于.",
+ "apihelp-query+allfileusages-param-prefix": "搜索此值开头的所有文件标题。",
+ "apihelp-query+allfileusages-param-prop": "要包含的信息束:\n;ids:添加使用中的页面的页面ID(不能与$1unique一起使用)。\n;title:添加文件的标题。",
+ "apihelp-query+allfileusages-param-limit": "要返回的总计项目。",
+ "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
+ "apihelp-query+allfileusages-example-unique": "列出唯一性的文件标题",
+ "apihelp-query+allfileusages-example-unique-generator": "获取所有文件标题,并标记出缺失者",
+ "apihelp-query+allfileusages-example-generator": "获取包含这些文件的页面",
+ "apihelp-query+allimages-description": "按顺序枚举所有图像。",
+ "apihelp-query+allimages-param-sort": "要作为排序方式的属性。",
+ "apihelp-query+allimages-param-dir": "罗列所采用的方向。",
+ "apihelp-query+allimages-param-minsize": "限于至少这么多字节的图像。",
+ "apihelp-query+allimages-param-maxsize": "限于顶多这么多字节的图像。",
+ "apihelp-query+allimages-param-sha1": "图像的 SHA1 哈希。覆盖$1sha1base36。",
+ "apihelp-query+allimages-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
+ "apihelp-query+allimages-param-mime": "要搜索的MIME类型,例如<kbd>image/jpeg</kbd>。",
+ "apihelp-query+allimages-param-limit": "共计要返回多少图像。",
+ "apihelp-query+allimages-example-B": "显示以字母<kbd>B</kbd>开始的文件列表。",
+ "apihelp-query+allimages-example-recent": "显示一个最近上传文件的列表,类似[[Special:NewFiles]]。",
+ "apihelp-query+allimages-example-mimetypes": "显示带MIME类型<kbd>image/png</kbd>或<kbd>image/gif</kbd>的文件列表",
+ "apihelp-query+allimages-example-generator": "显示有关4个以<kbd>T</kbd>开头的文件的信息。",
+ "apihelp-query+alllinks-param-namespace": "要列举的名字空间。",
+ "apihelp-query+alllinks-param-limit": "总共要返回多少个项目。",
+ "apihelp-query+alllinks-param-dir": "列出方向。",
+ "apihelp-query+alllinks-example-unique": "列出唯一的链接标题",
+ "apihelp-query+alllinks-example-unique-generator": "获得所有已链接的标题,标记缺少的。",
+ "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面",
+ "apihelp-query+allmessages-description": "返回来自该网站的消息。",
+ "apihelp-query+allmessages-param-messages": "要输出的消息。<kbd>*</kbd>(默认)表示所有消息。",
+ "apihelp-query+allmessages-param-prop": "要获取的属性。",
+ "apihelp-query+allmessages-param-customised": "只返回在此定制情形下的消息。",
+ "apihelp-query+allmessages-param-lang": "返回这种语言的信息。",
+ "apihelp-query+allmessages-param-from": "从此消息开始返回消息。",
+ "apihelp-query+allmessages-param-to": "返回消息至此消息为止。",
+ "apihelp-query+allmessages-param-prefix": "返回带有该前缀的消息。",
+ "apihelp-query+allmessages-example-ipb": "显示以<kbd>ipb-</kbd>开始的消息。",
+ "apihelp-query+allmessages-example-de": "显示德语版的<kbd>august</kbd>和<kbd>mainpage</kbd>消息。",
+ "apihelp-query+allpages-param-namespace": "要列举的名字空间。",
+ "apihelp-query+allpages-param-filterredir": "要列出哪些页面。",
+ "apihelp-query+allpages-param-minsize": "限于至少这么多字节的页面。",
+ "apihelp-query+allpages-param-maxsize": "限于至多这么多字节的页面。",
+ "apihelp-query+allpages-param-prtype": "仅限于受保护页面。",
+ "apihelp-query+allpages-param-limit": "返回的总计页面数。",
+ "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+allredirects-description": "列出至一个名字空间的重定向。",
+ "apihelp-query+allredirects-param-namespace": "要列举的名字空间。",
+ "apihelp-query+allredirects-param-limit": "返回的总计项目数。",
+ "apihelp-query+allredirects-param-dir": "罗列所采用的方向。",
+ "apihelp-query+allredirects-example-unique": "列出孤立目标页面",
+ "apihelp-query+allredirects-example-unique-generator": "获得所有目标页面,标记丢失的",
+ "apihelp-query+allredirects-example-generator": "获得包含重定向的页面",
+ "apihelp-query+alltransclusions-description": "列出所有嵌入页面(使用&#123;&#123;x&#125;&#125;嵌入的页面),包括不存在的。",
+ "apihelp-query+alltransclusions-param-namespace": "要列举的名字空间。",
+ "apihelp-query+alltransclusions-param-limit": "要返回的总计项目。",
+ "apihelp-query+alltransclusions-param-dir": "罗列所采用的方向。",
+ "apihelp-query+alltransclusions-example-unique": "列出孤立嵌入标题",
+ "apihelp-query+alltransclusions-example-generator": "获得包含嵌入内容的页面。",
+ "apihelp-query+allusers-description": "列举所有注册用户。",
+ "apihelp-query+allusers-param-from": "枚举的起始用户名。",
+ "apihelp-query+allusers-param-to": "枚举的结束用户名。",
+ "apihelp-query+allusers-param-prefix": "搜索以此值开始的所有用户。",
+ "apihelp-query+allusers-param-dir": "排序方向。",
+ "apihelp-query+allusers-param-group": "只包含指定组中的用户。",
+ "apihelp-query+allusers-param-excludegroup": "排除指定组中的用户。",
+ "apihelp-query+allusers-param-rights": "仅列出有所选权限的用户。不包括隐性的或自动加入的用户组别(如*、用户或自动确认用户)所授予的权限。",
+ "apihelp-query+allusers-param-limit": "返回的总计用户数。",
+ "apihelp-query+allusers-param-witheditsonly": "只列出有编辑的用户。",
+ "apihelp-query+allusers-param-activeusers": "只列出最近$1天内活跃的用户。",
+ "apihelp-query+allusers-example-Y": "列出以<kbd>Y</kbd>开头的用户。",
+ "apihelp-query+backlinks-description": "查找所有链接至指定页面的页面。",
+ "apihelp-query+backlinks-param-title": "要搜索的标题。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-query+backlinks-param-pageid": "要搜索的页面ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-query+backlinks-param-namespace": "要列举的名字空间。",
+ "apihelp-query+backlinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+backlinks-param-limit": "返回总计页面数。如果<var>$1redirect</var>被启用,则限定分别适用于每一等级(这意味着将返回多达2 * <var>$1limit</var>个结果)。",
+ "apihelp-query+backlinks-example-simple": "显示至<kbd>Main page<kbd>的链接。",
+ "apihelp-query+backlinks-example-generator": "获得关于链接至<kbd>Main page<kbd>的页面的信息。",
+ "apihelp-query+blocks-description": "列出所有被封禁的用户和IP地址。",
+ "apihelp-query+blocks-param-ids": "要列出的封禁ID列表(可选)。",
+ "apihelp-query+blocks-param-users": "要搜索的用户列表(可选)。",
+ "apihelp-query+blocks-param-prop": "要获取的属性:\n;id:添加封禁ID。\n;user:添加被封禁用户的用户名。\n;userid:添加被封禁用户的用户ID。\n;by:添加执行封禁的用户的用户名。\n;byid:添加执行封禁的用户的用户ID。\n;timestamp:添加封禁生效时的时间戳。\n;expiry:添加封禁截止时的时间戳。\n;reason:添加封禁原因。\n;range:添加受封禁影响的IP地址段。\n;flags:标记编辑禁止(自动封禁、仅限匿名用户等)。",
+ "apihelp-query+blocks-example-simple": "封禁列表",
+ "apihelp-query+blocks-example-users": "列出用户<kbd>Alice</kbd>和<kbd>Bob</kbd>的封禁。",
+ "apihelp-query+categories-description": "页面属于的所有分类列表。",
+ "apihelp-query+categories-param-prop": "要为每个分类获取的额外属性:\n;sortkey:为每个分类添加关键词(十六进制字符串)和关键词前缀(人类可读部分)。\n;timestamp:添加分类添加时的时间戳。\n;hidden:标记由_&#95;HIDDENCAT_&#95;隐藏的分类。",
+ "apihelp-query+categories-param-show": "显示何种分类。",
+ "apihelp-query+categories-param-limit": "返回多少分类。",
+ "apihelp-query+categories-param-dir": "罗列所采用的方向。",
+ "apihelp-query+categories-example-simple": "获取属于<kbd>Albert Einstein</kbd>的分类列表。",
+ "apihelp-query+categories-example-generator": "获得有关用于<kbd>Albert Einstein</kbd>的分类的信息。",
+ "apihelp-query+categoryinfo-description": "返回有关给定分类的信息。",
+ "apihelp-query+categoryinfo-example-simple": "获取有关<kbd>Category:Foo</kbd>和<kbd>Category:Bar</kbd>的信息。",
+ "apihelp-query+categorymembers-description": "在指定的分类中列出所有页面。",
+ "apihelp-query+categorymembers-param-title": "要列举的分类(必需)。必须包括<kbd>{{ns:category}}:</kbd>前缀。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-query+categorymembers-param-pageid": "要枚举的分类的页面 ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-query+categorymembers-param-namespace": "仅包含这些名字空间的页面。注意<kbd>$1type=subcat</kbd>或<kbd>$1type=file</kbd>可能被使用,而不是<kbd>$1namespace=14</kbd>或<kbd>6</kbd>。",
+ "apihelp-query+categorymembers-param-type": "包含的分类成员类型。当<kbd>$1sort=timestamp</kbd>被设置时会忽略。",
+ "apihelp-query+categorymembers-param-limit": "返回页面的最大数量。",
+ "apihelp-query+categorymembers-param-sort": "要作为排序方式的属性。",
+ "apihelp-query+categorymembers-param-dir": "排序的方向。",
+ "apihelp-query+categorymembers-param-start": "开始列举的时间戳。只能与<kbd>$1sort=timestamp</kbd>一起使用。",
+ "apihelp-query+categorymembers-param-end": "列举的结尾时间戳。只能与<kbd>$1sort=timestamp</kbd>一起使用。",
+ "apihelp-query+categorymembers-param-starthexsortkey": "开始列举的关键词,由<kbd>$1prop=sortkey</kbd>返回。不能与<kbd>$1sort=sortkey</kbd>一起使用。",
+ "apihelp-query+categorymembers-param-endhexsortkey": "结束列举的关键词,由<kbd>$1prop=sortkey</kbd>返回。不能与<kbd>$1sort=sortkey</kbd>一起使用。",
+ "apihelp-query+categorymembers-param-startsortkey": "请改用$1starthexsortkey。",
+ "apihelp-query+categorymembers-param-endsortkey": "请改用$1endhexsortkey。",
+ "apihelp-query+categorymembers-example-simple": "获得<kbd>Category:Physics</kbd>中的前10个页面。",
+ "apihelp-query+categorymembers-example-generator": "获得有关<kbd>Category:Physics</kbd>中的前10个页面的页面信息。",
+ "apihelp-query+contributors-description": "获取对一个页面的登录贡献者列表和匿名贡献数。",
+ "apihelp-query+contributors-param-limit": "返回的贡献数。",
+ "apihelp-query+contributors-example-simple": "显示<kbd>Main Page</kbd>的贡献。",
+ "apihelp-query+deletedrevisions-description": "获得删除修订版本信息。\n\n可在很多途径中使用:\n# 获得一组页面的已删除修订,通过设置标题或页面ID。以标题和时间戳排序。\n# 通过设置它们的ID与修订ID获得关于一组已删除修订。以修订ID排序。",
+ "apihelp-query+deletedrevisions-param-tag": "只列出被此标签标记的修订。",
+ "apihelp-query+deletedrevisions-param-user": "只列出此用户做出的修订。",
+ "apihelp-query+deletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
+ "apihelp-query+deletedrevisions-param-limit": "要列出的修订的最高数额。",
+ "apihelp-query+deletedrevisions-param-prop": "要获取的属性:\n;revid:添加已删除修订的修订ID。\n;parentid:添加上一修订的修订ID至页面中。\n;user:添加做出修订的用户。\n;userid:添加做出修订的用户ID。\n;comment:添加修订的摘要。\n;parsedcomment:添加修订的解析摘要。\n;minor:如果修订为小修订则予以标记。\n;len:添加修订的长度(字节)。\n;sha1:添加修订的SHA-1(base 16)。\n;content:添加修订内容。\n;tags:用于修订的标签。",
+ "apihelp-query+deletedrevisions-example-titles": "列出页面<kbd>Main Page</kbd>和<kbd>Talk:Main Page</kbd>的已删除修订,包含内容。",
+ "apihelp-query+deletedrevisions-example-revids": "列出已删除修订<kbd>123456</kbd>的信息。",
+ "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|模式}}:$2",
+ "apihelp-query+deletedrevs-param-from": "从此标题开始列出。",
+ "apihelp-query+deletedrevs-param-to": "列出至此标题为止。",
+ "apihelp-query+deletedrevs-param-user": "只列出此用户做出的修订。",
+ "apihelp-query+deletedrevs-param-excludeuser": "不要列出此用户做出的修订。",
+ "apihelp-query+deletedrevs-param-namespace": "只列出此名字空间的页面。",
+ "apihelp-query+deletedrevs-example-mode1": "列出最近已删除的对页面<kbd>Main Page</kbd>和<kbd>Talk:Main Page</kbd>的贡献,带内容(模式1)。",
+ "apihelp-query+deletedrevs-example-mode2": "列出由<kbd>Bob</kbd>作出的最近50次已删除贡献(模式2)。",
+ "apihelp-query+deletedrevs-example-mode3-main": "列出前50次主名字空间已删除贡献(模式3)",
+ "apihelp-query+deletedrevs-example-mode3-talk": "列出前50次{{ns:talk}}名字空间已删除页面(模式3):",
+ "apihelp-query+disabled-description": "此查询模块已被禁用。",
+ "apihelp-query+duplicatefiles-param-limit": "返回多少重复文件。",
+ "apihelp-query+duplicatefiles-param-dir": "罗列所采用的方向。",
+ "apihelp-query+duplicatefiles-param-localonly": "只看本地存储库的文件。",
+ "apihelp-query+duplicatefiles-example-simple": "查找与[[:File:Albert Einstein Head.jpg]]重复的文件",
+ "apihelp-query+duplicatefiles-example-generated": "查找所有文件的重复文件",
+ "apihelp-query+embeddedin-param-title": "要搜索的标题。不能与$1pageid一起使用。",
+ "apihelp-query+embeddedin-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
+ "apihelp-query+embeddedin-param-namespace": "列举的名字空间。",
+ "apihelp-query+embeddedin-param-dir": "罗列所采用的方向。",
+ "apihelp-query+embeddedin-param-filterredir": "如何过滤重定向。",
+ "apihelp-query+embeddedin-param-limit": "返回的总计页面数。",
+ "apihelp-query+embeddedin-example-simple": "显示嵌入<kbd>Template:Stub</kbd>的页面。",
+ "apihelp-query+embeddedin-example-generator": "获得有关显示嵌入<kbd>Template:Stub</kbd>的页面的信息。",
+ "apihelp-query+extlinks-param-limit": "返回多少链接。",
+ "apihelp-query+extlinks-example-simple": "获取<kbd>首页</kbd>的外部链接列表。",
+ "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+exturlusage-example-simple": "显示链接至<kbd>http://www.mediawiki.org</kbd>的页面。",
+ "apihelp-query+filearchive-param-from": "枚举的起始图片标题。",
+ "apihelp-query+filearchive-param-to": "枚举的结束图片标题。",
+ "apihelp-query+filearchive-param-prefix": "搜索所有以此值开头的图像标题。",
+ "apihelp-query+filearchive-param-limit": "返回图像的总数。",
+ "apihelp-query+filearchive-param-dir": "罗列所采用的方向。",
+ "apihelp-query+filearchive-param-sha1": "图片的SHA1哈希值。覆盖$1sha1base36。",
+ "apihelp-query+filearchive-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
+ "apihelp-query+filearchive-example-simple": "显示已删除文件列表",
+ "apihelp-query+filerepoinfo-example-simple": "获得有关文件存储库的信息。",
+ "apihelp-query+fileusage-param-prop": "要获取的属性:\n;pageid:每个页面的页面ID。\n;title:每个页面的标题。\n;redirect:标记作为重定向的页面。",
+ "apihelp-query+fileusage-param-namespace": "只包括这些名字空间的页面。",
+ "apihelp-query+fileusage-param-limit": "返回多少。",
+ "apihelp-query+fileusage-example-simple": "获取使用[[:File:Example.jpg]]的页面列表",
+ "apihelp-query+fileusage-example-generator": "获取有关使用[[:File:Example.jpg]]的页面的信息",
+ "apihelp-query+imageinfo-description": "返回文件信息和上传历史。",
+ "apihelp-query+imageinfo-param-prop": "要获取的文件信息:",
+ "apihelp-query+imageinfo-paramvalue-prop-timestamp": "添加时间戳至上传的版本。",
+ "apihelp-query+imageinfo-paramvalue-prop-comment": "此版本的摘要。",
+ "apihelp-query+imageinfo-paramvalue-prop-dimensions": "大小别名。",
+ "apihelp-query+imageinfo-paramvalue-prop-sha1": "为文件加入SHA-1哈希值。",
+ "apihelp-query+imageinfo-paramvalue-prop-mime": "添加文件的MIME类型。",
+ "apihelp-query+imageinfo-paramvalue-prop-mediatype": "添加文件媒体类型。",
+ "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-localonly": "只看本地存储库的文件。",
+ "apihelp-query+imageinfo-example-simple": "获取有关[[:File:Albert Einstein Head.jpg]]的当前版本的信息",
+ "apihelp-query+imageinfo-example-dated": "获取有关[[:File:Albert Einstein Head.jpg]]自2008年以来版本的信息",
+ "apihelp-query+images-param-limit": "返回多少文件。",
+ "apihelp-query+images-param-dir": "罗列所采用的方向。",
+ "apihelp-query+images-example-simple": "获取[[首页]]使用的文件列表",
+ "apihelp-query+images-example-generator": "获取有关[[首页]]使用的文件的信息",
+ "apihelp-query+imageusage-description": "查找所有使用指定图片标题的页面。",
+ "apihelp-query+imageusage-param-title": "要搜索的标题。不能与$1pageid一起使用。",
+ "apihelp-query+imageusage-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
+ "apihelp-query+imageusage-param-namespace": "要列举的名字空间。",
+ "apihelp-query+imageusage-param-dir": "罗列所采用的方向。",
+ "apihelp-query+imageusage-example-simple": "显示使用[[:File:Albert Einstein Head.jpg]]的页面",
+ "apihelp-query+imageusage-example-generator": "获取有关使用[[:File:Albert Einstein Head.jpg]]的页面的信息",
+ "apihelp-query+info-description": "获取基本页面信息。",
+ "apihelp-query+info-param-prop": "要获取的额外属性:",
+ "apihelp-query+info-paramvalue-prop-protection": "列出每个页面的保护等级。",
+ "apihelp-query+info-paramvalue-prop-watched": "列出每个页面的被监视状态。",
+ "apihelp-query+info-paramvalue-prop-watchers": "监视人员数,如果允许。",
+ "apihelp-query+info-paramvalue-prop-readable": "用户是否可以阅读此页面。",
+ "apihelp-query+info-param-testactions": "测试当前用户是否可以在页面上执行某种操作。",
+ "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
+ "apihelp-query+info-example-simple": "获得有关页面<kbd>Main Page</kbd>的信息。",
+ "apihelp-query+info-example-protection": "获取<kbd>首页</kbd>相关的常规和保护信息。",
+ "apihelp-query+iwbacklinks-param-prefix": "跨维基前缀。",
+ "apihelp-query+iwbacklinks-param-title": "要搜索的跨wiki链接。必须与<var>$1blprefix</var>一起使用。",
+ "apihelp-query+iwbacklinks-param-limit": "返回的总计页面数。",
+ "apihelp-query+iwbacklinks-param-prop": "要获取的属性:\n;iwprefix:加入跨wiki前缀。\n;iwtitle:加入跨wiki标题。",
+ "apihelp-query+iwbacklinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+iwbacklinks-example-simple": "获得链接至[[wikibooks:Test]]的页面。",
+ "apihelp-query+iwbacklinks-example-generator": "获得有关链接至[[wikibooks:Test]]的页面的信息。",
+ "apihelp-query+iwlinks-description": "从指定页面返回所有跨wiki链接。",
+ "apihelp-query+iwlinks-param-url": "是否获取完整URL(不能与$1prop一起使用)。",
+ "apihelp-query+iwlinks-param-limit": "返回多少跨wiki链接。",
+ "apihelp-query+iwlinks-param-prefix": "只返回此前缀的跨wiki链接。",
+ "apihelp-query+iwlinks-param-title": "用于搜索的跨wiki链接。必须与<var>$1prefix</var>一起使用。",
+ "apihelp-query+iwlinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+iwlinks-example-simple": "从页面<kbd>Main Page</kbd>获得跨wiki链接。",
+ "apihelp-query+langbacklinks-param-lang": "用于语言链接的语言。",
+ "apihelp-query+langbacklinks-param-title": "要搜索的语言链接。必须与$1lang一起使用。",
+ "apihelp-query+langbacklinks-param-limit": "返回的总计页面数。",
+ "apihelp-query+langbacklinks-param-prop": "要获得的属性:\n;lllang:添加语言链接的语言代码。\n;lltitle:添加语言链接的标题。",
+ "apihelp-query+langbacklinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+langbacklinks-example-simple": "获取链接至[[:fr:Test]]的页面",
+ "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息",
+ "apihelp-query+langlinks-description": "从指定页面返回所有跨语言链接。",
+ "apihelp-query+langlinks-param-limit": "返回多少语言链接。",
+ "apihelp-query+langlinks-param-url": "是否获取完整URL(不能与<var>$1prop</var>一起使用)。",
+ "apihelp-query+langlinks-param-lang": "只返回带此语言代码的语言链接。",
+ "apihelp-query+langlinks-param-title": "要搜索的链接。必须与<var>$1lang</var>一起使用。",
+ "apihelp-query+langlinks-param-dir": "罗列所采用的方向。",
+ "apihelp-query+langlinks-param-inlanguagecode": "本地化语言名称的语言代码。",
+ "apihelp-query+langlinks-example-simple": "从页面<kbd>Main Page</kbd>获得跨语言链接。",
+ "apihelp-query+links-description": "从指定页面返回所有链接。",
+ "apihelp-query+links-param-namespace": "只显示这些名字空间的链接。",
+ "apihelp-query+links-param-limit": "返回多少链接。",
+ "apihelp-query+links-param-dir": "罗列所采用的方向。",
+ "apihelp-query+links-example-simple": "从页面<kbd>Main Page</kbd>获得链接",
+ "apihelp-query+links-example-generator": "获得有关在页面<kbd>Main Page</kbd>中连接的页面的信息。",
+ "apihelp-query+links-example-namespaces": "获得在{{ns:user}}和{{ns:template}}名字空间中来自页面<kbd>Main Page</kbd>的链接。",
+ "apihelp-query+linkshere-description": "查找所有链接至指定页面的页面。",
+ "apihelp-query+linkshere-param-prop": "要获得的属性:\n;pageid:每个页面的页面ID。\n;title:每个页面的标题。\n;redirect:如果页面是一个重定向就标记。",
+ "apihelp-query+linkshere-param-namespace": "只包括这些名字空间的页面。",
+ "apihelp-query+linkshere-param-limit": "返回多少。",
+ "apihelp-query+linkshere-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
+ "apihelp-query+linkshere-example-simple": "获取链接至[[首页]]的页面列表",
+ "apihelp-query+linkshere-example-generator": "获取有关链接至[[首页]]的页面的信息",
+ "apihelp-query+logevents-description": "从日志获取事件。",
+ "apihelp-query+logevents-param-start": "枚举的起始时间戳。",
+ "apihelp-query+logevents-param-end": "枚举的结束时间戳。",
+ "apihelp-query+logevents-example-simple": "列出最近日志活动",
+ "apihelp-query+pagepropnames-description": "列出wiki中所有使用中的页面属性名称。",
+ "apihelp-query+pagepropnames-param-limit": "返回名称的最大数量。",
+ "apihelp-query+pagepropnames-example-simple": "获取前10个属性名称。",
+ "apihelp-query+pageprops-example-simple": "获得用于<kbd>Category:Foo</kbd>的属性。",
+ "apihelp-query+pageswithprop-description": "列出所有使用指定页面属性的页面。",
+ "apihelp-query+pageswithprop-param-limit": "返回页面的最大数量。",
+ "apihelp-query+pageswithprop-param-dir": "排序的方向。",
+ "apihelp-query+pageswithprop-example-simple": "列出前10个使用<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>的页面。",
+ "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用<code>_&#95;NOTOC_&#95;</code>的页面的信息。",
+ "apihelp-query+prefixsearch-param-search": "搜索字符串。",
+ "apihelp-query+prefixsearch-param-namespace": "搜索的名字空间。",
+ "apihelp-query+prefixsearch-param-limit": "要返回的结果最大数。",
+ "apihelp-query+prefixsearch-param-offset": "跳过的结果数。",
+ "apihelp-query+prefixsearch-example-simple": "搜索以<kbd>meaning</kbd>开头的页面标题。",
+ "apihelp-query+protectedtitles-param-namespace": "只列出这些名字空间的标题。",
+ "apihelp-query+protectedtitles-param-limit": "返回的总计页面数。",
+ "apihelp-query+protectedtitles-example-simple": "受保护标题列表",
+ "apihelp-query+protectedtitles-example-generator": "找到主命名空间中已保护的标题的链接。",
+ "apihelp-query+querypage-param-limit": "返回的结果数。",
+ "apihelp-query+querypage-example-ancientpages": "返回[[Special:Ancientpages]]的结果。",
+ "apihelp-query+random-param-namespace": "只返回这些名字空间的页面。",
+ "apihelp-query+random-param-limit": "限制返回多少随机页面。",
+ "apihelp-query+random-param-redirect": "加载一个随机重定向而不是一个随机页面。",
+ "apihelp-query+random-example-simple": "从主名字空间返回两个随机页面。",
+ "apihelp-query+recentchanges-description": "枚举最近更改。",
+ "apihelp-query+recentchanges-param-start": "枚举的起始时间戳。",
+ "apihelp-query+recentchanges-param-end": "枚举的结束时间戳。",
+ "apihelp-query+recentchanges-param-user": "只列出此用户的更改。",
+ "apihelp-query+recentchanges-param-excludeuser": "不要列出此用户的更改。",
+ "apihelp-query+recentchanges-param-tag": "只列出带此标签的更改。",
+ "apihelp-query+recentchanges-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
+ "apihelp-query+recentchanges-param-limit": "返回总计更新数。",
+ "apihelp-query+recentchanges-param-type": "显示的更改类型。",
+ "apihelp-query+recentchanges-example-simple": "最近更改列表",
+ "apihelp-query+redirects-description": "返回至指定页面的所有重定向。",
+ "apihelp-query+redirects-param-namespace": "只包含这些名字空间的页面。",
+ "apihelp-query+redirects-param-limit": "返回多少重定向。",
+ "apihelp-query+redirects-example-simple": "获取至[[Project:首页]]的重定向列表",
+ "apihelp-query+redirects-example-generator": "获取所有重定向至[[首页]]的信息",
+ "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+revisions-example-first5-after": "获得<kbd>Main Page</kbd>于2006年05月01日之后做出的前5次修订版本。",
+ "apihelp-query+revisions-example-first5-not-localhost": "获取<kbd>Main Page</kbd>的前5次不是由匿名用户<kbd>127.0.0.1</kbd>做出的修订。",
+ "apihelp-query+revisions-example-first5-user": "获取<kbd>Main Page</kbd>的前5次由用户<kbd>MediaWiki default</kbd>做出的修订。",
+ "apihelp-query+revisions+base-param-limit": "限制返回多少修订。",
+ "apihelp-query+search-param-search": "搜索所有拥有此值的页面标题(或内容)。",
+ "apihelp-query+search-param-namespace": "只在这些名字空间搜索。",
+ "apihelp-query+search-param-info": "要返回的元数据。",
+ "apihelp-query+search-param-limit": "返回的总计页面数。",
+ "apihelp-query+search-param-interwiki": "搜索结果中包含跨wiki结果,如果可用。",
+ "apihelp-query+search-example-simple": "搜索<kbd>meaning</kbd>。",
+ "apihelp-query+search-example-text": "搜索文本<kbd>meaning</kbd>。",
+ "apihelp-query+search-example-generator": "获得有关搜索<kbd>meaning</kbd>返回页面的页面信息。",
+ "apihelp-query+siteinfo-param-numberingroup": "列出用户组中的用户数。",
+ "apihelp-query+siteinfo-example-simple": "获取网站信息",
+ "apihelp-query+siteinfo-example-interwiki": "获取本地跨wiki前缀列表",
+ "apihelp-query+siteinfo-example-replag": "检查当前的响应延迟。",
+ "apihelp-query+stashimageinfo-example-simple": "返回藏匿文件的信息。",
+ "apihelp-query+tags-description": "列出更改标签。",
+ "apihelp-query+tags-param-limit": "列出标签的最大数量。",
+ "apihelp-query+tags-param-prop": "要获取哪个属性:\n;name:添加标签名称。\n;displayname:为标签添加系统消息。\n;description:为标签添加描述。\n;hitcount:已添加此标签的修订版本与日志数量。\n;defined:标识标签是否已定义。\n;source:获得标签来源,它可能包括用于扩展定义的标签的<samp>extension</samp>,以及用于可被用户手动应用的标签的<samp>manual</samp>。\n;active:标签是否仍可被应用。",
+ "apihelp-query+tags-example-simple": "可用标签列表",
+ "apihelp-query+templates-param-namespace": "只显示此名字空间的模板。",
+ "apihelp-query+templates-param-limit": "返回多少模板。",
+ "apihelp-query+templates-param-templates": "只列出这些模板。对于检查某一页面使用某一模板很有用。",
+ "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+templates-example-namespaces": "获得在{{ns:user}}和{{ns:template}}名字空间中,嵌入在<kbd>Main Page</kbd>页面的页面。",
+ "apihelp-query+tokens-param-type": "要请求的令牌类型。",
+ "apihelp-query+transcludedin-param-namespace": "至包含这些名字空间的页面。",
+ "apihelp-query+transcludedin-param-limit": "返回多少。",
+ "apihelp-query+transcludedin-example-simple": "获得嵌入<kbd>Main Page</kbd>的页面列表。",
+ "apihelp-query+transcludedin-example-generator": "获得有关嵌入<kbd>Main Page</kbd>的页面的信息。",
+ "apihelp-query+usercontribs-description": "获取一位用户的所有编辑。",
+ "apihelp-query+usercontribs-param-limit": "返回贡献的最大数量。",
+ "apihelp-query+usercontribs-param-start": "返回的起始时间戳。",
+ "apihelp-query+usercontribs-param-end": "返回的最终时间戳。",
+ "apihelp-query+usercontribs-param-namespace": "只列出这些名字空间的贡献。",
+ "apihelp-query+usercontribs-example-user": "显示用户<kbd>Example</kbd>的贡献。",
+ "apihelp-query+usercontribs-example-ipprefix": "显示来自<kbd>192.0.2.</kbd>前缀所有 IP 地址的贡献。",
+ "apihelp-query+userinfo-description": "获取有关当前用户的信息。",
+ "apihelp-query+userinfo-example-simple": "获取有关当前用户的信息",
+ "apihelp-query+userinfo-example-data": "获取有关当前用户的额外信息",
+ "apihelp-query+users-description": "获取有关列出用户的信息。",
+ "apihelp-query+users-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
+ "apihelp-query+users-example-simple": "返回用户<kbd>Example</kbd>的信息。",
+ "apihelp-query+watchlist-param-start": "枚举的起始时间戳。",
+ "apihelp-query+watchlist-param-end": "枚举的结束时间戳。",
+ "apihelp-query+watchlist-param-user": "只列出此用户的更改。",
+ "apihelp-query+watchlist-param-excludeuser": "不要列出此用户的更改。",
+ "apihelp-query+watchlist-param-limit": "根据结果返回的结果总数。",
+ "apihelp-query+watchlist-param-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
+ "apihelp-query+watchlist-example-generator": "在当前用户的监视列表中检索用于最近更改页面的页面信息。",
+ "apihelp-query+watchlistraw-description": "获得当前用户的监视列表上的所有页面。",
+ "apihelp-query+watchlistraw-param-namespace": "只列出指定名字空间的页面。",
+ "apihelp-query+watchlistraw-param-limit": "根据结果返回的结果总数。",
+ "apihelp-query+watchlistraw-param-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
+ "apihelp-query+watchlistraw-example-simple": "列出当前用户的监视列表中的页面。",
+ "apihelp-revisiondelete-description": "删除和恢复修订版本。",
+ "apihelp-revisiondelete-param-hide": "每次修订要隐藏的东西。",
+ "apihelp-revisiondelete-param-show": "每次修订要恢复显示的东西。",
+ "apihelp-revisiondelete-param-reason": "删除或恢复的原因。",
+ "apihelp-revisiondelete-example-revision": "隐藏<kbd>首页</kbd>的修订版本<kbd>12345</kbd>的内容。",
+ "apihelp-rollback-param-title": "要回退的页面标题。不能与<var>$1pageid</var>一起使用。",
+ "apihelp-rollback-param-pageid": "要回退的页面的页面 ID。不能与<var>$1title</var>一起使用。",
+ "apihelp-rollback-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-rollback-example-simple": "回退由用户<kbd>Example</kbd>对<kbd>Main Page</kbd>做出的最近编辑。",
+ "apihelp-rollback-example-summary": "回退由IP用户<kbd>192.0.2.5</kbd>对页面<kbd>Main Page</kbd>做出的最近编辑,带编辑摘要<kbd>Reverting vandalism</kbd>,并将这些编辑和回退标记为机器人编辑。",
+ "apihelp-rsd-description": "导出一个RSD(Really Simple Discovery)架构",
+ "apihelp-rsd-example-simple": "导出RSD架构",
+ "apihelp-setnotificationtimestamp-param-entirewatchlist": "工作于所有已监视页面。",
+ "apihelp-setnotificationtimestamp-example-all": "重置整个监视列表的通知状态。",
+ "apihelp-setnotificationtimestamp-example-pagetimestamp": "设置<kbd>Main page</kbd>的通知时间戳,这样所有从2012年1月1日起的编辑都会是未复核的。",
+ "apihelp-setnotificationtimestamp-example-allpages": "重置在<kbd>{{ns:user}}</kbd>名字空间中的页面的通知状态。",
+ "apihelp-tokens-param-type": "要请求的令牌类型。",
+ "apihelp-unblock-description": "解封一位用户。",
+ "apihelp-unblock-param-id": "解封时需要的封禁ID(通过<kbd>list=blocks</kbd>获得)。不能与<var>$1user</var>一起使用。",
+ "apihelp-unblock-param-user": "要解封的用户名、IP地址或IP段。不能与<var>$1id</var>一起使用。",
+ "apihelp-unblock-param-reason": "解封的原因。",
+ "apihelp-unblock-example-id": "解封封禁ID #<kbd>105</kbd>。",
+ "apihelp-unblock-example-user": "解封用户<kbd>Bob</kbd>,原因<kbd>Sorry Bob</kbd>。",
+ "apihelp-undelete-param-title": "要恢复的页面标题。",
+ "apihelp-undelete-param-reason": "恢复的原因。",
+ "apihelp-undelete-param-fileids": "要恢复的文件修订ID。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
+ "apihelp-undelete-example-page": "恢复页面<kbd>Main Page</kbd>。",
+ "apihelp-undelete-example-revisions": "恢复<kbd>首页</kbd>的两个修订。",
+ "apihelp-upload-param-filename": "目标文件名。",
+ "apihelp-upload-param-comment": "上传注释。如果没有指定<var>$1text</var>,那么它也被用于新文件的初始页面文本。",
+ "apihelp-upload-param-watch": "监视页面。",
+ "apihelp-upload-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
+ "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
+ "apihelp-upload-param-file": "文件内容。",
+ "apihelp-upload-param-stash": "如果设置,服务器将临时藏匿文件而不是加入存储库。",
+ "apihelp-upload-param-offset": "块的偏移量(字节)。",
+ "apihelp-upload-param-chunk": "大块内容。",
+ "apihelp-upload-example-url": "从URL上传",
+ "apihelp-upload-example-filekey": "完成一次由于警告而失败的上传。",
+ "apihelp-userrights-description": "更改一位用户的组成员。",
+ "apihelp-userrights-param-user": "用户名。",
+ "apihelp-userrights-param-userid": "用户ID。",
+ "apihelp-userrights-param-add": "将用户加入至这些组中。",
+ "apihelp-userrights-param-remove": "将用户从这些组中移除。",
+ "apihelp-userrights-param-reason": "更改原因。",
+ "apihelp-userrights-example-user": "将用户<kbd>FooBot</kbd>添加至<kbd>bot</kbd>用户组,并从<kbd>sysop</kbd>和<kbd>bureaucrat</kbd>组移除。",
+ "apihelp-userrights-example-userid": "将ID为<kbd>123</kbd>的用户加入至<kbd>机器人</kbd>组,并将其从<kbd>管理员</kbd>和<kbd>行政员</kbd>组移除。",
+ "apihelp-watch-param-title": "要(取消)监视的页面。也可使用<var>$1titles</var>。",
+ "apihelp-watch-example-watch": "监视页面<kbd>Main Page</kbd>。",
+ "apihelp-watch-example-unwatch": "取消监视页面<kbd>首页</kbd>。",
+ "apihelp-format-example-generic": "格式化查询结果为$1格式。",
+ "apihelp-dbg-description": "输出数据为PHP的<code>var_export()</code>格式。",
+ "apihelp-dbgfm-description": "输出数据为PHP的<code>var_export()</code>格式(HTML优质打印效果)。",
+ "apihelp-dump-description": "输出数据为PHP的<code>var_dump()</code>格式。",
+ "apihelp-dumpfm-description": "输出数据为PHP的<code>var_dump()</code>格式(HTML优质打印效果)。",
+ "apihelp-json-description": "输出数据为JSON格式。",
+ "apihelp-jsonfm-description": "输出数据为JSON格式(HTML优质打印效果)。",
+ "apihelp-none-description": "不输出任何东西。",
+ "apihelp-php-description": "输出数据为序列化PHP格式。",
+ "apihelp-phpfm-description": "输出数据为序列化PHP格式(HTML优质打印效果)。",
+ "apihelp-rawfm-description": "输出数据为JSON格式,带调试元素(HTML优质打印效果)。",
+ "apihelp-txt-description": "输出数据为PHP的<code>print_r()</code>格式。",
+ "apihelp-txtfm-description": "输出数据为PHP的<code>print_r()</code>格式(HTML优质打印效果)。",
+ "apihelp-wddx-description": "输出数据为WDDX格式。",
+ "apihelp-wddxfm-description": "输出数据为WDDX格式(HTML优质打印效果)。",
+ "apihelp-xml-description": "输出数据为XML格式。",
+ "apihelp-xml-param-xslt": "如果指定,加入已命名的页面作为一个XSL样式表。值必须是在{{ns:mediawiki}}名字空间以<code>.xsl</code>为结尾的标题。",
+ "apihelp-xmlfm-description": "输出数据为XML格式(HTML优质打印效果)。",
+ "apihelp-yaml-description": "输出数据为YAML格式。",
+ "apihelp-yamlfm-description": "输出数据为YAML格式(HTML优质打印效果)。",
+ "api-format-title": "MediaWiki API 结果",
+ "api-format-prettyprint-header": "这是$1格式的HTML表示。HTML对调试很有用,但不适合应用程序使用。\n\n指定<var>format</var>参数以更改输出格式。要查看$1格式的非HTML表示,设置<kbd>format=$2</kbd>。\n\n参见[[mw:API|完整文档]],或[[Special:ApiHelp/main|API 帮助]]以获取更多信息。",
+ "api-orm-param-props": "要查询的字段。",
+ "api-orm-param-limit": "返回的总行数。",
+ "api-pageset-param-generator": "通过执行指定查询模块获得页面列表以工作。\n\n<strong>注意:</strong>发生器参数名称必须以“g”开头,参见例子。",
+ "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:Main_page/zh",
+ "api-help-main-header": "主模块",
+ "api-help-flag-deprecated": "此模块已弃用。",
+ "api-help-flag-internal": "<strong>此模块是内部或不稳定的。</strong>它的操作可以更改而不另行通知。",
+ "api-help-flag-readrights": "此模块需要读取权限。",
+ "api-help-flag-writerights": "此模块需要写入权限。",
+ "api-help-flag-mustbeposted": "此模块只允许POST请求。",
+ "api-help-flag-generator": "此模块可作为发生器使用。",
+ "api-help-parameters": "{{PLURAL:$1|参数}}:",
+ "api-help-param-deprecated": "不推荐使用。",
+ "api-help-param-required": "这个参数是必须的。",
+ "api-help-param-list": "{{PLURAL:$1|1=一个值|2=值(以<kbd>{{!}}</kbd>分隔)}}:$2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=必须为空|可以为空,或$2}}",
+ "api-help-param-limit": "不允许超过$1。",
+ "api-help-param-limit2": "不允许超过$1个(对于机器人则是$2个)。",
+ "api-help-param-integer-min": "{{PLURAL:$1|值}}必须不少于$2。",
+ "api-help-param-integer-max": "{{PLURAL:$1|值}}必须不大于$3。",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|值}}必须介于$2和$3之间。",
+ "api-help-param-multi-separate": "通过“<kbd>|</kbd>”隔开各值。",
+ "api-help-param-multi-max": "值的最高数字是{{PLURAL:$1|$1}}(对于机器人则是{{PLURAL:$2|$2}})。",
+ "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-disabled-in-miser-mode": "由于[[mw:Manual:$wgMiserMode|miser模式]]而禁用。",
+ "api-help-param-limited-in-miser-mode": "<strong>注意:</strong>由于[[mw:Manual:$wgMiserMode|miser模式]],使用这个可能导致继续前返回少于<var>$1limit</var>个结果;极端情况下可能不会返回任何结果。",
+ "api-help-param-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-credits-header": "制作人员",
+ "api-credits": "API 开发人员:\n* Roan Kattouw(2007年9月~2009年的开发组领导)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan(创建者,2006年9月~2007年9月的开发组领导)\n* Brad Jorsch(2013年至今的开发组领导)\n\n请将您的评论、建议和问题发送至mediawiki-api@lists.wikimedia.org,或提交错误请求在https://phabricator.wikimedia.org/。"
+}
diff --git a/includes/api/i18n/zh-hant.json b/includes/api/i18n/zh-hant.json
new file mode 100644
index 00000000..dc3cc2d8
--- /dev/null
+++ b/includes/api/i18n/zh-hant.json
@@ -0,0 +1,244 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cwlin0416",
+ "Liuxinyu970226",
+ "LNDDYL",
+ "EagerLin"
+ ]
+ },
+ "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|文件]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 郵件清單]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug與請求]\n</div>\n<strong>狀態資訊:</strong>本頁所展示的所有功能都應正常工作,但是 API 仍在開發當中,將會隨時變化。請訂閱[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 郵件清單]以便得到更新通知。\n\n<strong>錯誤請求:</strong>當 API 收到錯誤請求時, HTTP header 將會返回一個包含「MediaWiki-API-Error」的值,隨後 header 的值與錯誤碼將會送回並設定為相同的值。詳細資訊請參閱[[mw:API:Errors_and_warnings|API: 錯誤與警告]]。",
+ "apihelp-main-param-action": "要執行的動作。",
+ "apihelp-main-param-format": "輸出的格式。",
+ "apihelp-block-description": "封鎖使用者。",
+ "apihelp-block-param-user": "您要封鎖的使用者名稱、IP 位址或 IP 範圍。",
+ "apihelp-block-param-reason": "封鎖原因。",
+ "apihelp-block-param-anononly": "僅封鎖匿名使用者 (禁止這個 IP 位址的匿名使用者編輯)。",
+ "apihelp-block-param-nocreate": "禁止建立帳號。",
+ "apihelp-block-param-autoblock": "自動封鎖最後使用的 IP 位址,以及在這之後嘗試登入的 IP 位址。",
+ "apihelp-block-param-noemail": "禁止使用者透過 Wiki 寄送電子郵件。 (需要 <code>blockemail</code> 權限)。",
+ "apihelp-block-param-hidename": "隱藏封鎖日誌的使用者名稱。 (需要 <code>hideuser</code> 權限)。",
+ "apihelp-block-param-allowusertalk": "允許使用者編輯自己的對話頁面 (依據 <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> 的設定)。",
+ "apihelp-block-param-reblock": "若使用者已被封鎖,覆寫既有的封鎖設定值。",
+ "apihelp-block-param-watchuser": "監視使用者或 IP 位址的使用者頁面與對話頁面。",
+ "apihelp-block-example-ip-simple": "封鎖 IP 位址 <kbd>192.0.2.5</kbd> 三天,原因為 <kbd>First strike</kbd>。",
+ "apihelp-block-example-user-complex": "永久封鎖 IP 位址 <kbd>Vandal</kbd>,原因為 <kbd>First strike</kbd>。",
+ "apihelp-checktoken-description": "檢查來自 <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-clearhasmsg-description": "清除目前使用者的 <code>hasmsg</code> 標記。",
+ "apihelp-clearhasmsg-example-1": "清除目前使用者的 <code>hasmsg</code> 標記。",
+ "apihelp-compare-description": "比較 2 個頁面間的差異。\n\n\"from\" 以及 \"to\" 的修訂編號,頁面標題或頁面 ID 為必填。",
+ "apihelp-compare-param-fromtitle": "要比對的第一個標題。",
+ "apihelp-compare-param-fromid": "要比對的第一個頁面 ID。",
+ "apihelp-compare-param-fromrev": "要比對的第一個修訂。",
+ "apihelp-compare-param-totitle": "要比對的第二個標題。",
+ "apihelp-compare-param-toid": "要比對的第二個頁面 ID。",
+ "apihelp-compare-param-torev": "要比對的第二個修訂。",
+ "apihelp-compare-example-1": "建立修訂 1 與 1 的差異檔",
+ "apihelp-createaccount-description": "建立新使用者帳號。",
+ "apihelp-createaccount-param-name": "使用者名稱。",
+ "apihelp-createaccount-param-password": "密碼 (若有設定 <var>$1mailpassword</var> 則可略過)。",
+ "apihelp-createaccount-param-domain": "外部認証使用的網域 (選填)。",
+ "apihelp-createaccount-param-token": "已取得帳號建立密鑰於第一次請求。",
+ "apihelp-createaccount-param-email": "使用者的電子郵件地址 (選填) 。",
+ "apihelp-createaccount-param-realname": "使用者的真實姓名 (選填)。",
+ "apihelp-createaccount-param-mailpassword": "若設為其他值,將會以電子郵件寄送隨機密碼給使用者。",
+ "apihelp-createaccount-param-reason": "建立帳號時選填的原因,會被記錄到日誌當中。",
+ "apihelp-createaccount-param-language": "要設定的使用者預設語言代碼 (選填,預設依據內容語言)。",
+ "apihelp-createaccount-example-pass": "建立使用者 <kbd>testuser</kbd> 使用密碼 <kbd>test123</kbd>",
+ "apihelp-createaccount-example-mail": "建立使用者 <kbd>testmailuser</kbd> 並且電子郵件通知隨機產生的密碼。",
+ "apihelp-delete-description": "刪除頁面。",
+ "apihelp-delete-param-title": "您欲刪除的頁面標題。 無法與 <var>$1pageid</var> 同時使用。",
+ "apihelp-delete-param-pageid": "您欲刪除頁面的頁面 ID。 無法與 <var>$1title</var> 同時使用。",
+ "apihelp-delete-param-reason": "刪除的原因。 若未設定,將會使用自動產生的原因。",
+ "apihelp-delete-param-watch": "加入目前頁面至您的監視清單。",
+ "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-delete-example-reason": "刪除 <kbd>Main Page</kbd> 原因為 <kbd>Preparing for move</kbd>。",
+ "apihelp-disabled-description": "已停用此模組。",
+ "apihelp-edit-description": "建立與編輯頁面。",
+ "apihelp-edit-param-title": "您欲編輯的頁面標題。 無法與 <var>$1pageid</var> 同時使用。",
+ "apihelp-edit-param-pageid": "您欲編輯頁面的頁面 ID。 無法與 <var>$1title</var> 同時使用。",
+ "apihelp-edit-param-section": "章節編號。 <kbd>0</kbd> 代表最上層章節,<kbd>new</kbd> 代表新章節。",
+ "apihelp-edit-param-sectiontitle": "新章節的標題。",
+ "apihelp-edit-param-text": "頁面內容。",
+ "apihelp-edit-param-summary": "編輯摘要。 當未設定 $1section=new 與 $1sectiontitle 時也會當做章節標題。",
+ "apihelp-edit-param-minor": "小編輯。",
+ "apihelp-edit-param-notminor": "非小編輯。",
+ "apihelp-edit-param-bot": "標記此編輯為機器人編輯。",
+ "apihelp-edit-param-basetimestamp": "基於修訂的時間戳記,用來檢測編輯衝突。也许可以取得[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]認可。",
+ "apihelp-edit-param-createonly": "若頁面已存在,則不編輯頁面。",
+ "apihelp-edit-param-nocreate": "若頁面不存在,則產生錯誤。",
+ "apihelp-edit-param-watch": "加入目前頁面至您的監視清單。",
+ "apihelp-edit-param-unwatch": "從您的監視清單中移除目前頁面。",
+ "apihelp-edit-example-edit": "編輯頁面",
+ "apihelp-emailuser-description": "寄送電子郵件給使用者。",
+ "apihelp-emailuser-param-target": "電子郵件的收件使用者。",
+ "apihelp-emailuser-param-subject": "郵件主旨。",
+ "apihelp-emailuser-param-text": "郵件內容。",
+ "apihelp-emailuser-param-ccme": "寄送一份此郵件的複本給我。",
+ "apihelp-emailuser-example-email": "寄送電子郵件給使用者 <kbd>WikiSysop</kbd> 使用內容 <kbd>Content</kbd>",
+ "apihelp-expandtemplates-description": "展開所有於 wikitext 中模板。",
+ "apihelp-expandtemplates-param-title": "頁面標題。",
+ "apihelp-expandtemplates-param-text": "要轉換的 Wikitext。",
+ "apihelp-feedcontributions-param-showsizediff": "顯示修訂版本之間的差異大小。",
+ "apihelp-feedcontributions-example-simple": "返回使用者<kbd>Example</kbd>的貢獻。",
+ "apihelp-feedrecentchanges-description": "返回近期邊更摘要。",
+ "apihelp-feedrecentchanges-param-feedformat": "摘要格式。",
+ "apihelp-feedrecentchanges-param-namespace": "用於限制結果的命名空間。",
+ "apihelp-feedrecentchanges-param-invert": "除所選定者外的所有命名空間。",
+ "apihelp-feedrecentchanges-param-limit": "回傳的結果數量上限。",
+ "apihelp-feedrecentchanges-param-hideminor": "隱藏小編輯。",
+ "apihelp-feedrecentchanges-param-hidebots": "隱藏由機器人做的變更。",
+ "apihelp-feedrecentchanges-param-hideanons": "隱藏匿名使用者做的變更。",
+ "apihelp-feedrecentchanges-param-hideliu": "隱藏已註冊使用者做的變更。",
+ "apihelp-feedrecentchanges-param-hidepatrolled": "隱藏已巡查的變更。",
+ "apihelp-feedrecentchanges-example-simple": "顯示近期變動",
+ "apihelp-feedrecentchanges-example-30days": "顯示近期30天內的變動",
+ "apihelp-feedwatchlist-description": "返回監視清單 feed。",
+ "apihelp-feedwatchlist-param-feedformat": "Feed 的格式。",
+ "apihelp-filerevert-param-comment": "上載意見。",
+ "apihelp-help-example-main": "主模組使用說明",
+ "apihelp-help-example-recursive": "一個頁面中的所有說明。",
+ "apihelp-help-example-help": "說明模組自身的說明。",
+ "apihelp-imagerotate-description": "旋轉一張或多張圖片。",
+ "apihelp-import-param-summary": "匯入摘要。",
+ "apihelp-import-param-xml": "上載的 XML 檔。",
+ "apihelp-import-param-interwikisource": "用於跨 wiki 匯入:匯入的來源 wiki。",
+ "apihelp-import-param-interwikipage": "用於跨 wiki 匯入:匯入的頁面。",
+ "apihelp-import-param-fullhistory": "用於跨 wiki 匯入:完整匯入歷史,而不只是最新版本。",
+ "apihelp-import-param-templates": "用於跨 wiki 匯入:匯入一切包含的模板。",
+ "apihelp-import-param-namespace": "用於跨 wiki 匯入:匯入至此命名空間。",
+ "apihelp-import-param-rootpage": "匯入作為此頁面的子頁面。",
+ "apihelp-login-param-name": "使用者名稱。",
+ "apihelp-login-param-password": "密碼。",
+ "apihelp-login-param-domain": "網域名稱(可選)。",
+ "apihelp-login-example-login": "登入",
+ "apihelp-logout-description": "登出並清除 session 資料。",
+ "apihelp-logout-example-logout": "登出當前使用者",
+ "apihelp-move-description": "移動頁面。",
+ "apihelp-move-param-from": "重新命名本頁面的標題。不能與 <var>$1fromid</var> 一起出現。",
+ "apihelp-move-param-fromid": "重新命名本頁面的 ID 。不能與 <var>$1fromid</var> 一起出現。",
+ "apihelp-move-param-to": "將本頁面的標題重新命名為",
+ "apihelp-move-param-reason": "重新命名的原因。",
+ "apihelp-move-param-movesubpages": "如果適用,則重新命名子頁面。",
+ "apihelp-move-param-noredirect": "不要建立重新導向。",
+ "apihelp-move-param-ignorewarnings": "忽略所有警告。",
+ "apihelp-opensearch-description": "使用 OpenSearch 協定搜尋本 wiki。",
+ "apihelp-opensearch-param-search": "搜尋字串。",
+ "apihelp-opensearch-param-limit": "回傳的結果數量上限。",
+ "apihelp-opensearch-param-namespace": "搜尋的命名空間。",
+ "apihelp-opensearch-param-format": "輸出的格式。",
+ "apihelp-options-example-reset": "重設所有偏好設定",
+ "apihelp-query+allcategories-param-limit": "要回傳的分類數量。",
+ "apihelp-query+allfileusages-param-limit": "要回傳的項目總數。",
+ "apihelp-query+allimages-param-limit": "要回傳的圖片總數。",
+ "apihelp-query+alllinks-param-limit": "要回傳的項目總數。",
+ "apihelp-query+allpages-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+allredirects-param-limit": "要回傳的項目總數。",
+ "apihelp-query+alltransclusions-param-limit": "要回傳的項目總數。",
+ "apihelp-query+categories-param-limit": "要回傳的分類數量。",
+ "apihelp-query+categorymembers-param-limit": "回傳的頁面數量上限。",
+ "apihelp-query+contributors-param-limit": "要回傳的貢獻人員數量。",
+ "apihelp-query+duplicatefiles-param-limit": "要回傳的重複檔案數量。",
+ "apihelp-query+embeddedin-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+extlinks-param-limit": "要回傳的連結數量。",
+ "apihelp-query+exturlusage-param-limit": "要回傳的頁面數量。",
+ "apihelp-query+filearchive-param-limit": "要回傳的圖片總數。",
+ "apihelp-query+fileusage-param-limit": "要回傳的數量。",
+ "apihelp-query+imageinfo-param-limit": "每個檔案要回傳的檔案修訂數量。",
+ "apihelp-query+images-param-limit": "要回傳的檔案數量。",
+ "apihelp-query+iwlinks-param-limit": "要回傳的跨 Wiki 連結數量。",
+ "apihelp-query+langbacklinks-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+langlinks-param-limit": "要回傳的 langlinks 數量。",
+ "apihelp-query+links-param-limit": "要回傳的連結數量。",
+ "apihelp-query+linkshere-param-limit": "要回傳的數量。",
+ "apihelp-query+logevents-param-limit": "要回傳的事件項目總數。",
+ "apihelp-query+pagepropnames-param-limit": "回傳的名稱數量上限。",
+ "apihelp-query+pageswithprop-param-limit": "回傳的頁面數量上限。",
+ "apihelp-query+prefixsearch-param-limit": "回傳的結果數量上限。",
+ "apihelp-query+protectedtitles-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+querypage-param-limit": "回傳的結果數量。",
+ "apihelp-query+recentchanges-description": "列舉出近期變動。",
+ "apihelp-query+recentchanges-param-limit": "要回傳變更總數。",
+ "apihelp-query+recentchanges-example-simple": "近期變動清單",
+ "apihelp-query+redirects-param-limit": "要回傳的重新導向數量。",
+ "apihelp-query+search-param-limit": "要回傳的頁面總數。",
+ "apihelp-query+templates-param-limit": "要回傳的樣板數量。",
+ "apihelp-query+tokens-param-type": "要請求的密鑰類型。",
+ "apihelp-query+tokens-example-simple": "接收 csrf 密鑰 (預設)。",
+ "apihelp-query+tokens-example-types": "接收監視密鑰以及巡邏密鑰。",
+ "apihelp-query+transcludedin-param-limit": "回傳的數量。",
+ "apihelp-query+usercontribs-param-limit": "回傳的貢獻數量上限。",
+ "apihelp-query+watchlist-param-limit": "每個請求要回傳的結果總數。",
+ "apihelp-query+watchlistraw-param-limit": "每個請求要回傳的結果總數。",
+ "apihelp-tokens-description": "取得資料修改動作的密鑰。\n\n此模組已因支援 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] 而停用。",
+ "apihelp-unblock-param-reason": "解除封鎖的原因。",
+ "apihelp-unblock-example-id": "解除封銷 ID #<kbd>105</kbd>。",
+ "apihelp-undelete-param-reason": "還原的原因。",
+ "apihelp-userrights-description": "更改一位使用者的群組成員。",
+ "apihelp-userrights-param-user": "使用者名稱。",
+ "apihelp-userrights-param-userid": "使用者 ID。",
+ "apihelp-userrights-param-add": "加入使用者至這些群組。",
+ "apihelp-userrights-param-remove": "從這些群組移除使用者。",
+ "apihelp-userrights-param-reason": "變更的原因。",
+ "apihelp-format-example-generic": "格式化查詢結果為 $1 格式",
+ "apihelp-dbg-description": "使用 PHP 的 <code>var_export()</code> 格式輸出資料。",
+ "apihelp-dbgfm-description": "使用 PHP 的 <code>var_export()</code> 格式輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-dump-description": "使用 PHP 的 <code>var_dump()</code> 格式輸出資料。",
+ "apihelp-dumpfm-description": "使用 PHP 的 <code>var_dump()</code> 格式輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-json-description": "使用 JSON 格式輸出資料。",
+ "apihelp-jsonfm-description": "使用 JSON 格式輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-none-description": "不輸出。",
+ "apihelp-php-description": "使用序列化 PHP 格式輸出資料。",
+ "apihelp-phpfm-description": "使用序列化 PHP 格式輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-rawfm-description": "使用 JSON 格式的除錯元素輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-txt-description": "使用 PHP 的 <code>print_r()</code> 格式輸出資料。",
+ "apihelp-txtfm-description": "使用 PHP 的 <code>print_r()</code> 格式輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-wddx-description": "使用 WDDX 格式輸出資料。",
+ "apihelp-wddxfm-description": "使用 WDDX 格式輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-xml-description": "使用 XML 格式輸出資料。",
+ "apihelp-xmlfm-description": "使用 XML 格式輸出資料 (使用 HTML 格式顯示)。",
+ "apihelp-yaml-description": "使用 YAML 格式輸出資料。",
+ "apihelp-yamlfm-description": "使用 YAML 格式輸出資料 (使用 HTML 格式顯示)。",
+ "api-format-title": "MediaWiki API 結果",
+ "api-orm-param-props": "要查詢的欄位。",
+ "api-orm-param-limit": "回傳的列數上限。",
+ "api-pageset-param-titles": "要使用的標題清單。",
+ "api-pageset-param-pageids": "要使用的頁面 ID 清單。",
+ "api-pageset-param-revids": "要使用的修訂 ID 清單。",
+ "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-deprecated": "此模組已停用。",
+ "api-help-flag-readrights": "此模組需要讀取權限。",
+ "api-help-flag-writerights": "此模組需要寫入權限。",
+ "api-help-flag-mustbeposted": "此模組僅接受 POST 請求。",
+ "api-help-parameters": "{{PLURAL:$1|參數}}:",
+ "api-help-param-deprecated": "已停用。",
+ "api-help-param-required": "此參數為必填。",
+ "api-help-param-list": "{{PLURAL:$1|1=單值|2=多值 (以 <kbd>{{!}}</kbd> 分隔)}}:$2",
+ "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=必須空白|可以空白,或 $2}}",
+ "api-help-param-limit": "不允許超過 $1。",
+ "api-help-param-limit2": "不允許超過 $1 (機器人為 $2)。",
+ "api-help-param-integer-min": "{{PLURAL:$1|1=數值|2=數值}}不可小於 $2。",
+ "api-help-param-integer-max": "{{PLURAL:$1|1=數值|2=數值}}不可大於 $3。",
+ "api-help-param-integer-minmax": "{{PLURAL:$1|1=數值|2=數值}}必須在 $2 與 $3 之間。",
+ "api-help-param-upload": "必須使用 multipart/form-data 以檔案上傳的方式傳送。",
+ "api-help-param-multi-separate": "使用 <kbd>|</kbd> 分隔數值。",
+ "api-help-param-multi-max": "上限值為 {{PLURAL:$1|$1}} (機器人為 {{PLURAL:$2|$2}})。",
+ "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-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-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/。"
+}
diff --git a/includes/cache/BacklinkCache.php b/includes/cache/BacklinkCache.php
index ed62bba0..10b4fb00 100644
--- a/includes/cache/BacklinkCache.php
+++ b/includes/cache/BacklinkCache.php
@@ -38,8 +38,6 @@
* of memory.
*
* Introduced by r47317
- *
- * @internal documentation reviewed on 18 Mar 2011 by hashar
*/
class BacklinkCache {
/** @var ProcessCacheLRU */
@@ -176,7 +174,6 @@ class BacklinkCache {
* @return ResultWrapper
*/
protected function queryLinks( $table, $startId, $endId, $max, $select = 'all' ) {
- wfProfileIn( __METHOD__ );
$fromField = $this->getPrefix( $table ) . '_from';
@@ -231,8 +228,6 @@ class BacklinkCache {
}
}
- wfProfileOut( __METHOD__ );
-
return $res;
}
@@ -255,7 +250,7 @@ class BacklinkCache {
return $prefixes[$table];
} else {
$prefix = null;
- wfRunHooks( 'BacklinkCacheGetPrefix', array( $table, &$prefix ) );
+ Hooks::run( 'BacklinkCacheGetPrefix', array( $table, &$prefix ) );
if ( $prefix ) {
return $prefix;
} else {
@@ -303,7 +298,7 @@ class BacklinkCache {
break;
default:
$conds = null;
- wfRunHooks( 'BacklinkCacheGetConditions', array( $table, $this->title, &$conds ) );
+ Hooks::run( 'BacklinkCacheGetConditions', array( $table, $this->title, &$conds ) );
if ( !$conds ) {
throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
}
@@ -490,4 +485,55 @@ class BacklinkCache {
return array( 'numRows' => $numRows, 'batches' => $batches );
}
+
+ /**
+ * Get a Title iterator for cascade-protected template/file use backlinks
+ *
+ * @return TitleArray
+ * @since 1.25
+ */
+ public function getCascadeProtectedLinks() {
+ $dbr = $this->getDB();
+
+ // @todo: use UNION without breaking tests that use temp tables
+ $resSets = array();
+ $resSets[] = $dbr->select(
+ array( 'templatelinks', 'page_restrictions', 'page' ),
+ array( 'page_namespace', 'page_title', 'page_id' ),
+ array(
+ 'tl_namespace' => $this->title->getNamespace(),
+ 'tl_title' => $this->title->getDBkey(),
+ 'tl_from = pr_page',
+ 'pr_cascade' => 1,
+ 'page_id = tl_from'
+ ),
+ __METHOD__,
+ array( 'DISTINCT' )
+ );
+ if ( $this->title->getNamespace() == NS_FILE ) {
+ $resSets[] = $dbr->select(
+ array( 'imagelinks', 'page_restrictions', 'page' ),
+ array( 'page_namespace', 'page_title', 'page_id' ),
+ array(
+ 'il_to' => $this->title->getDBkey(),
+ 'il_from = pr_page',
+ 'pr_cascade' => 1,
+ 'page_id = il_from'
+ ),
+ __METHOD__,
+ array( 'DISTINCT' )
+ );
+ }
+
+ // Combine and de-duplicate the results
+ $mergedRes = array();
+ foreach ( $resSets as $res ) {
+ foreach ( $res as $row ) {
+ $mergedRes[$row->page_id] = $row;
+ }
+ }
+
+ return TitleArray::newFromResult(
+ new FakeResultWrapper( array_values( $mergedRes ) ) );
+ }
}
diff --git a/includes/cache/CacheDependency.php b/includes/cache/CacheDependency.php
index 9b48ecb7..517f3798 100644
--- a/includes/cache/CacheDependency.php
+++ b/includes/cache/CacheDependency.php
@@ -181,13 +181,11 @@ class FileDependency extends CacheDependency {
function loadDependencyValues() {
if ( is_null( $this->timestamp ) ) {
- if ( !file_exists( $this->filename ) ) {
- # Dependency on a non-existent file
- # This is a valid concept!
- $this->timestamp = false;
- } else {
- $this->timestamp = filemtime( $this->filename );
- }
+ wfSuppressWarnings();
+ # Dependency on a non-existent file stores "false"
+ # This is a valid concept!
+ $this->timestamp = filemtime( $this->filename );
+ wfRestoreWarnings();
}
}
@@ -195,7 +193,10 @@ class FileDependency extends CacheDependency {
* @return bool
*/
function isExpired() {
- if ( !file_exists( $this->filename ) ) {
+ wfSuppressWarnings();
+ $lastmod = filemtime( $this->filename );
+ wfRestoreWarnings();
+ if ( $lastmod === false ) {
if ( $this->timestamp === false ) {
# Still nonexistent
return false;
@@ -206,7 +207,6 @@ class FileDependency extends CacheDependency {
return true;
}
} else {
- $lastmod = filemtime( $this->filename );
if ( $lastmod > $this->timestamp ) {
# Modified or created
wfDebug( "Dependency triggered: {$this->filename} changed.\n" );
diff --git a/includes/cache/HTMLFileCache.php b/includes/cache/HTMLFileCache.php
index 58ca2dcd..c07032bf 100644
--- a/includes/cache/HTMLFileCache.php
+++ b/includes/cache/HTMLFileCache.php
@@ -131,7 +131,7 @@ class HTMLFileCache extends FileCacheBase {
return false;
}
// Allow extensions to disable caching
- return wfRunHooks( 'HTMLFileCache::useFileCache', array( $context ) );
+ return Hooks::run( 'HTMLFileCache::useFileCache', array( $context ) );
}
/**
diff --git a/includes/cache/LinkBatch.php b/includes/cache/LinkBatch.php
index 48c063f4..77e4d490 100644
--- a/includes/cache/LinkBatch.php
+++ b/includes/cache/LinkBatch.php
@@ -128,11 +128,9 @@ class LinkBatch {
* @return array Remaining IDs
*/
protected function executeInto( &$cache ) {
- wfProfileIn( __METHOD__ );
$res = $this->doQuery();
$this->doGenderQuery();
$ids = $this->addResultToCache( $cache, $res );
- wfProfileOut( __METHOD__ );
return $ids;
}
@@ -185,7 +183,6 @@ class LinkBatch {
if ( $this->isEmpty() ) {
return false;
}
- wfProfileIn( __METHOD__ );
// This is similar to LinkHolderArray::replaceInternal
$dbr = wfGetDB( DB_SLAVE );
@@ -205,7 +202,6 @@ class LinkBatch {
$caller .= " (for {$this->caller})";
}
$res = $dbr->select( $table, $fields, $conds, $caller );
- wfProfileOut( __METHOD__ );
return $res;
}
diff --git a/includes/cache/LinkCache.php b/includes/cache/LinkCache.php
index 6925df90..eace1eea 100644
--- a/includes/cache/LinkCache.php
+++ b/includes/cache/LinkCache.php
@@ -216,25 +216,20 @@ class LinkCache {
* @return int
*/
public function addLinkObj( $nt ) {
- global $wgAntiLockFlags, $wgContentHandlerUseDB;
-
- wfProfileIn( __METHOD__ );
+ global $wgContentHandlerUseDB;
$key = $nt->getPrefixedDBkey();
if ( $this->isBadLink( $key ) || $nt->isExternal() ) {
- wfProfileOut( __METHOD__ );
return 0;
}
$id = $this->getGoodLinkID( $key );
if ( $id != 0 ) {
- wfProfileOut( __METHOD__ );
return $id;
}
if ( $key === '' ) {
- wfProfileOut( __METHOD__ );
return 0;
}
@@ -242,14 +237,8 @@ class LinkCache {
# Some fields heavily used for linking...
if ( $this->mForUpdate ) {
$db = wfGetDB( DB_MASTER );
- if ( !( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) ) {
- $options = array( 'FOR UPDATE' );
- } else {
- $options = array();
- }
} else {
$db = wfGetDB( DB_SLAVE );
- $options = array();
}
$f = array( 'page_id', 'page_len', 'page_is_redirect', 'page_latest' );
@@ -259,7 +248,7 @@ class LinkCache {
$s = $db->selectRow( 'page', $f,
array( 'page_namespace' => $nt->getNamespace(), 'page_title' => $nt->getDBkey() ),
- __METHOD__, $options );
+ __METHOD__ );
# Set fields...
if ( $s !== false ) {
$this->addGoodLinkObjFromRow( $nt, $s );
@@ -269,8 +258,6 @@ class LinkCache {
$id = 0;
}
- wfProfileOut( __METHOD__ );
-
return $id;
}
diff --git a/includes/cache/LocalisationCache.php b/includes/cache/LocalisationCache.php
index ae27fba3..dc5a2eb6 100644
--- a/includes/cache/LocalisationCache.php
+++ b/includes/cache/LocalisationCache.php
@@ -20,6 +20,10 @@
* @file
*/
+use Cdb\Exception as CdbException;
+use Cdb\Reader as CdbReader;
+use Cdb\Writer as CdbWriter;
+
/**
* Class for caching the contents of localisation files, Messages*.php
* and *.i18n.php.
@@ -33,7 +37,7 @@
* as grammatical transformation, is done by the caller.
*/
class LocalisationCache {
- const VERSION = 2;
+ const VERSION = 3;
/** Configuration associative array */
private $conf;
@@ -253,9 +257,7 @@ class LocalisationCache {
*/
public function getItem( $code, $key ) {
if ( !isset( $this->loadedItems[$code][$key] ) ) {
- wfProfileIn( __METHOD__ . '-load' );
$this->loadItem( $code, $key );
- wfProfileOut( __METHOD__ . '-load' );
}
if ( $key === 'fallback' && isset( $this->shallowFallbacks[$code] ) ) {
@@ -276,9 +278,7 @@ class LocalisationCache {
if ( !isset( $this->loadedSubitems[$code][$key][$subkey] ) &&
!isset( $this->loadedItems[$code][$key] )
) {
- wfProfileIn( __METHOD__ . '-load' );
$this->loadSubitem( $code, $key, $subkey );
- wfProfileOut( __METHOD__ . '-load' );
}
if ( isset( $this->data[$code][$key][$subkey] ) ) {
@@ -505,7 +505,6 @@ class LocalisationCache {
* @return array
*/
protected function readPHPFile( $_fileName, $_fileType ) {
- wfProfileIn( __METHOD__ );
// Disable APC caching
wfSuppressWarnings();
$_apcEnabled = ini_set( 'apc.cache_by_default', '0' );
@@ -522,10 +521,8 @@ class LocalisationCache {
} elseif ( $_fileType == 'aliases' ) {
$data = compact( 'aliases' );
} else {
- wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . ": Invalid file type: $_fileType" );
}
- wfProfileOut( __METHOD__ );
return $data;
}
@@ -537,24 +534,20 @@ class LocalisationCache {
* @return array Array with a 'messages' key, or empty array if the file doesn't exist
*/
public function readJSONFile( $fileName ) {
- wfProfileIn( __METHOD__ );
if ( !is_readable( $fileName ) ) {
- wfProfileOut( __METHOD__ );
return array();
}
$json = file_get_contents( $fileName );
if ( $json === false ) {
- wfProfileOut( __METHOD__ );
return array();
}
$data = FormatJson::decode( $json, true );
if ( $data === null ) {
- wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . ": Invalid JSON file: $fileName" );
}
@@ -566,8 +559,6 @@ class LocalisationCache {
}
}
- wfProfileOut( __METHOD__ );
-
// The JSON format only supports messages, none of the other variables, so wrap the data
return array( 'messages' => $data );
}
@@ -650,10 +641,16 @@ class LocalisationCache {
* rules, and save the compiled rules in a process-local cache.
*
* @param string $fileName
+ * @throws MWException
*/
protected function loadPluralFile( $fileName ) {
+ // Use file_get_contents instead of DOMDocument::load (T58439)
+ $xml = file_get_contents( $fileName );
+ if ( !$xml ) {
+ throw new MWException( "Unable to read plurals file $fileName" );
+ }
$doc = new DOMDocument;
- $doc->load( $fileName );
+ $doc->loadXML( $xml );
$rulesets = $doc->getElementsByTagName( "pluralRules" );
foreach ( $rulesets as $ruleset ) {
$codes = $ruleset->getAttribute( 'locales' );
@@ -687,7 +684,6 @@ class LocalisationCache {
*/
protected function readSourceFilesAndRegisterDeps( $code, &$deps ) {
global $IP;
- wfProfileIn( __METHOD__ );
// This reads in the PHP i18n file with non-messages l10n data
$fileName = Language::getMessagesFileName( $code );
@@ -708,8 +704,6 @@ class LocalisationCache {
$deps['plurals'] = new FileDependency( "$IP/languages/data/plurals.xml" );
$deps['plurals-mw'] = new FileDependency( "$IP/languages/data/plurals-mediawiki.xml" );
- wfProfileOut( __METHOD__ );
-
return $data;
}
@@ -790,17 +784,31 @@ class LocalisationCache {
}
/**
+ * Gets the combined list of messages dirs from
+ * core and extensions
+ *
+ * @since 1.25
+ * @return array
+ */
+ public function getMessagesDirs() {
+ global $wgMessagesDirs, $IP;
+ return array(
+ 'core' => "$IP/languages/i18n",
+ 'api' => "$IP/includes/api/i18n",
+ 'oojs-ui' => "$IP/resources/lib/oojs-ui/i18n",
+ ) + $wgMessagesDirs;
+ }
+
+ /**
* Load localisation data for a given language for both core and extensions
* and save it to the persistent cache store and the process cache
* @param string $code
* @throws MWException
*/
public function recache( $code ) {
- global $wgExtensionMessagesFiles, $wgMessagesDirs;
- wfProfileIn( __METHOD__ );
+ global $wgExtensionMessagesFiles;
if ( !$code ) {
- wfProfileOut( __METHOD__ );
throw new MWException( "Invalid language code requested" );
}
$this->recachedLangs[$code] = true;
@@ -843,15 +851,14 @@ class LocalisationCache {
}
$codeSequence = array_merge( array( $code ), $coreData['fallbackSequence'] );
-
- wfProfileIn( __METHOD__ . '-fallbacks' );
+ $messageDirs = $this->getMessagesDirs();
# Load non-JSON localisation data for extensions
$extensionData = array_combine(
$codeSequence,
array_fill( 0, count( $codeSequence ), $initialData ) );
foreach ( $wgExtensionMessagesFiles as $extension => $fileName ) {
- if ( isset( $wgMessagesDirs[$extension] ) ) {
+ if ( isset( $messageDirs[$extension] ) ) {
# This extension has JSON message data; skip the PHP shim
continue;
}
@@ -879,7 +886,7 @@ class LocalisationCache {
$csData = $initialData;
# Load core messages and the extension localisations.
- foreach ( $wgMessagesDirs as $dirs ) {
+ foreach ( $messageDirs as $dirs ) {
foreach ( (array)$dirs as $dir ) {
$fileName = "$dir/$csCode.json";
$data = $this->readJSONFile( $fileName );
@@ -924,7 +931,7 @@ class LocalisationCache {
# Allow extensions an opportunity to adjust the data for this
# fallback
- wfRunHooks( 'LocalisationCacheRecacheFallback', array( $this, $csCode, &$csData ) );
+ Hooks::run( 'LocalisationCacheRecacheFallback', array( $this, $csCode, &$csData ) );
# Merge the data for this fallback into the final array
if ( $csCode === $code ) {
@@ -942,10 +949,9 @@ class LocalisationCache {
}
}
- wfProfileOut( __METHOD__ . '-fallbacks' );
-
# Add cache dependencies for any referenced globals
$deps['wgExtensionMessagesFiles'] = new GlobalDependency( 'wgExtensionMessagesFiles' );
+ // $wgMessagesDirs is used in LocalisationCache::getMessagesDirs()
$deps['wgMessagesDirs'] = new GlobalDependency( 'wgMessagesDirs' );
$deps['version'] = new ConstantDependency( 'LocalisationCache::VERSION' );
@@ -981,10 +987,9 @@ class LocalisationCache {
}
# Run hooks
$purgeBlobs = true;
- wfRunHooks( 'LocalisationCacheRecache', array( $this, $code, &$allData, &$purgeBlobs ) );
+ Hooks::run( 'LocalisationCacheRecache', array( $this, $code, &$allData, &$purgeBlobs ) );
if ( is_null( $allData['namespaceNames'] ) ) {
- wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . ': Localisation data failed sanity check! ' .
'Check that your languages/messages/MessagesEn.php file is intact.' );
}
@@ -999,7 +1004,6 @@ class LocalisationCache {
}
# Save to the persistent cache
- wfProfileIn( __METHOD__ . '-write' );
$this->store->startWrite( $code );
foreach ( $allData as $key => $value ) {
if ( in_array( $key, self::$splitKeys ) ) {
@@ -1011,16 +1015,15 @@ class LocalisationCache {
}
}
$this->store->finishWrite();
- wfProfileOut( __METHOD__ . '-write' );
# Clear out the MessageBlobStore
# HACK: If using a null (i.e. disabled) storage backend, we
# can't write to the MessageBlobStore either
if ( $purgeBlobs && !$this->store instanceof LCStoreNull ) {
- MessageBlobStore::getInstance()->clear();
+ $blobStore = new MessageBlobStore();
+ $blobStore->clear();
}
- wfProfileOut( __METHOD__ );
}
/**
diff --git a/includes/cache/MessageCache.php b/includes/cache/MessageCache.php
index 1ef7cc58..a55e25a3 100644
--- a/includes/cache/MessageCache.php
+++ b/includes/cache/MessageCache.php
@@ -72,7 +72,7 @@ class MessageCache {
protected $mExpiry;
/**
- * Message cache has it's own parser which it uses to transform
+ * Message cache has its own parser which it uses to transform
* messages.
*/
protected $mParserOptions, $mParser;
@@ -266,7 +266,6 @@ class MessageCache {
}
# Loading code starts
- wfProfileIn( __METHOD__ );
$success = false; # Keep track of success
$staleCache = false; # a cache array with expired data, or false if none has been loaded
$where = array(); # Debug info, delayed to avoid spamming debug log too much
@@ -276,7 +275,6 @@ class MessageCache {
# Hash of the contents is stored in memcache, to detect if local cache goes
# out of date (e.g. due to replace() on some other server)
if ( $wgUseLocalMessageCache ) {
- wfProfileIn( __METHOD__ . '-fromlocal' );
$hash = $this->mMemc->get( wfMemcKey( 'messages', $code, 'hash' ) );
if ( $hash ) {
@@ -292,7 +290,6 @@ class MessageCache {
$this->mCache[$code] = $cache;
}
}
- wfProfileOut( __METHOD__ . '-fromlocal' );
}
if ( !$success ) {
@@ -300,7 +297,6 @@ class MessageCache {
# the lock can't be acquired, wait for the other thread to finish
# and then try the global cache a second time.
for ( $failedAttempts = 0; $failedAttempts < 2; $failedAttempts++ ) {
- wfProfileIn( __METHOD__ . '-fromcache' );
$cache = $this->mMemc->get( $cacheKey );
if ( !$cache ) {
$where[] = 'global cache is empty';
@@ -314,8 +310,6 @@ class MessageCache {
$success = true;
}
- wfProfileOut( __METHOD__ . '-fromcache' );
-
if ( $success ) {
# Done, no need to retry
break;
@@ -422,8 +416,7 @@ class MessageCache {
$this->mLoadedLanguages[$code] = true;
}
$info = implode( ', ', $where );
- wfDebug( __METHOD__ . ": Loading $code... $info\n" );
- wfProfileOut( __METHOD__ );
+ wfDebugLog( 'MessageCache', __METHOD__ . ": Loading $code... $info\n" );
return $success;
}
@@ -437,7 +430,6 @@ class MessageCache {
* @return array Loaded messages for storing in caches.
*/
function loadFromDB( $code ) {
- wfProfileIn( __METHOD__ );
global $wgMaxMsgCacheEntrySize, $wgLanguageCode, $wgAdaptiveMessageCache;
$dbr = wfGetDB( DB_SLAVE );
$cache = array();
@@ -511,7 +503,6 @@ class MessageCache {
$cache['VERSION'] = MSG_CACHE_VERSION;
$cache['EXPIRY'] = wfTimestamp( TS_MW, time() + $this->mExpiry );
- wfProfileOut( __METHOD__ );
return $cache;
}
@@ -524,10 +515,8 @@ class MessageCache {
*/
public function replace( $title, $text ) {
global $wgMaxMsgCacheEntrySize;
- wfProfileIn( __METHOD__ );
if ( $this->mDisable ) {
- wfProfileOut( __METHOD__ );
return;
}
@@ -573,11 +562,11 @@ class MessageCache {
// Update the message in the message blob store
global $wgContLang;
- MessageBlobStore::getInstance()->updateMessage( $wgContLang->lcfirst( $msg ) );
+ $blobStore = new MessageBlobStore();
+ $blobStore->updateMessage( $wgContLang->lcfirst( $msg ) );
- wfRunHooks( 'MessageCacheReplace', array( $title, $text ) );
+ Hooks::run( 'MessageCacheReplace', array( $title, $text ) );
- wfProfileOut( __METHOD__ );
}
/**
@@ -610,7 +599,6 @@ class MessageCache {
* @return bool
*/
protected function saveToCaches( $cache, $dest, $code = false ) {
- wfProfileIn( __METHOD__ );
global $wgUseLocalMessageCache;
$cacheKey = wfMemcKey( 'messages', $code );
@@ -629,8 +617,6 @@ class MessageCache {
$this->saveToLocal( $serialized, $hash, $code );
}
- wfProfileOut( __METHOD__ );
-
return $success;
}
@@ -708,8 +694,6 @@ class MessageCache {
function get( $key, $useDB = true, $langcode = true, $isFullKey = false ) {
global $wgContLang;
- $section = new ProfileSection( __METHOD__ );
-
if ( is_int( $key ) ) {
// Fix numerical strings that somehow become ints
// on their way here
@@ -736,7 +720,7 @@ class MessageCache {
$lckey = $wgContLang->lcfirst( $lckey );
}
- wfRunHooks( 'MessageCache::get', array( &$lckey ) );
+ Hooks::run( 'MessageCache::get', array( &$lckey ) );
if ( ord( $lckey ) < 128 ) {
$uckey = ucfirst( $lckey );
@@ -909,7 +893,7 @@ class MessageCache {
} else {
// XXX: This is not cached in process cache, should it?
$message = false;
- wfRunHooks( 'MessagesPreLoad', array( $title, &$message ) );
+ Hooks::run( 'MessagesPreLoad', array( $title, &$message ) );
if ( $message !== false ) {
return $message;
}
@@ -1056,24 +1040,22 @@ class MessageCache {
$popts->setInterfaceMessage( $interface );
$popts->setTargetLanguage( $language );
- wfProfileIn( __METHOD__ );
if ( !$title || !$title instanceof Title ) {
global $wgTitle;
+ wfDebugLog( 'GlobalTitleFail', __METHOD__ . ' called by ' . wfGetAllCallers( 5 ) . ' with no title set.' );
$title = $wgTitle;
}
// Sometimes $wgTitle isn't set either...
if ( !$title ) {
# It's not uncommon having a null $wgTitle in scripts. See r80898
# Create a ghost title in such case
- $title = Title::newFromText( 'Dwimmerlaik' );
+ $title = Title::makeTitle( NS_SPECIAL, 'Badtitle/title not set in ' . __METHOD__ );
}
$this->mInParser = true;
$res = $parser->parse( $text, $title, $popts, $linestart );
$this->mInParser = false;
- wfProfileOut( __METHOD__ );
-
return $res;
}
diff --git a/includes/cache/ResourceFileCache.php b/includes/cache/ResourceFileCache.php
index 55da52c5..6d26a2d5 100644
--- a/includes/cache/ResourceFileCache.php
+++ b/includes/cache/ResourceFileCache.php
@@ -40,7 +40,9 @@ class ResourceFileCache extends FileCacheBase {
public static function newFromContext( ResourceLoaderContext $context ) {
$cache = new self();
- if ( $context->getOnly() === 'styles' ) {
+ if ( $context->getImage() ) {
+ $cache->mType = 'image';
+ } elseif ( $context->getOnly() === 'styles' ) {
$cache->mType = 'css';
} else {
$cache->mType = 'js';
@@ -69,7 +71,8 @@ class ResourceFileCache extends FileCacheBase {
// Get all query values
$queryVals = $context->getRequest()->getValues();
foreach ( $queryVals as $query => $val ) {
- if ( $query === 'modules' || $query === 'version' || $query === '*' ) {
+ if ( in_array( $query, array( 'modules', 'image', 'variant', 'version', '*' ) ) ) {
+ // Use file cache regardless of the value of this parameter
continue; // note: &* added as IE fix
} elseif ( $query === 'skin' && $val === $wgDefaultSkin ) {
continue;
@@ -79,6 +82,8 @@ class ResourceFileCache extends FileCacheBase {
continue;
} elseif ( $query === 'debug' && $val === 'false' ) {
continue;
+ } elseif ( $query === 'format' && $val === 'rasterized' ) {
+ continue;
}
return false;
diff --git a/includes/cache/UserCache.php b/includes/cache/UserCache.php
index 7f36f5a6..8a42489c 100644
--- a/includes/cache/UserCache.php
+++ b/includes/cache/UserCache.php
@@ -80,7 +80,6 @@ class UserCache {
* @param string $caller The calling method
*/
public function doQuery( array $userIds, $options = array(), $caller = '' ) {
- wfProfileIn( __METHOD__ );
$usersToCheck = array();
$usersToQuery = array();
@@ -134,7 +133,6 @@ class UserCache {
}
$lb->execute();
- wfProfileOut( __METHOD__ );
}
/**
diff --git a/includes/cache/bloom/BloomCache.php b/includes/cache/bloom/BloomCache.php
deleted file mode 100644
index 236db954..00000000
--- a/includes/cache/bloom/BloomCache.php
+++ /dev/null
@@ -1,323 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Persistent bloom filter used to avoid expensive lookups
- *
- * @since 1.24
- */
-abstract class BloomCache {
- /** @var string Unique ID for key namespacing */
- protected $cacheID;
-
- /** @var array Map of (id => BloomCache) */
- protected static $instances = array();
-
- /**
- * @param string $id
- * @return BloomCache
- */
- final public static function get( $id ) {
- global $wgBloomFilterStores;
-
- if ( !isset( self::$instances[$id] ) ) {
- if ( isset( $wgBloomFilterStores[$id] ) ) {
- $class = $wgBloomFilterStores[$id]['class'];
- self::$instances[$id] = new $class( $wgBloomFilterStores[$id] );
- } else {
- wfDebug( "No bloom filter store '$id'; using EmptyBloomCache." );
- return new EmptyBloomCache( array() );
- }
- }
-
- return self::$instances[$id];
- }
-
- /**
- * Create a new bloom cache instance from configuration.
- * This should only be called from within BloomCache.
- *
- * @param array $config Parameters include:
- * - cacheID : Prefix to all bloom filter names that is unique to this cache.
- * It should only consist of alphanumberic, '-', and '_' characters.
- * This ID is what avoids collisions if multiple logical caches
- * use the same storage system, so this should be set carefully.
- */
- public function __construct( array $config ) {
- $this->cacheID = $config['cacheId'];
- if ( !preg_match( '!^[a-zA-Z0-9-_]{1,32}$!', $this->cacheID ) ) {
- throw new MWException( "Cache ID '{$this->cacheID}' is invalid." );
- }
- }
-
- /**
- * Check if a member is set in the bloom filter
- *
- * A member being set means that it *might* have been added.
- * A member not being set means it *could not* have been added.
- *
- * This abstracts over isHit() to deal with filter updates and readiness.
- * A class must exist with the name BloomFilter<type> and a static public
- * mergeAndCheck() method. The later takes the following arguments:
- * (BloomCache $bcache, $domain, $virtualKey, array $status)
- * The method should return a bool indicating whether to use the filter.
- *
- * The 'shared' bloom key must be used for any updates and will be used
- * for the membership check if the method returns true. Since the key is shared,
- * the method should never use delete(). The filter cannot be used in cases where
- * membership in the filter needs to be taken away. In such cases, code *cannot*
- * use this method - instead, it can directly use the other BloomCache methods
- * to manage custom filters with their own keys (e.g. not 'shared').
- *
- * @param string $domain
- * @param string $type
- * @param string $member
- * @return bool True if set, false if not (also returns true on error)
- */
- final public function check( $domain, $type, $member ) {
- $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
-
- if ( method_exists( "BloomFilter{$type}", 'mergeAndCheck' ) ) {
- try {
- $virtualKey = "$domain:$type";
-
- $status = $this->getStatus( $virtualKey );
- if ( $status == false ) {
- wfDebug( "Could not query virtual bloom filter '$virtualKey'." );
- return null;
- }
-
- $useFilter = call_user_func_array(
- array( "BloomFilter{$type}", 'mergeAndCheck' ),
- array( $this, $domain, $virtualKey, $status )
- );
-
- if ( $useFilter ) {
- return ( $this->isHit( 'shared', "$virtualKey:$member" ) !== false );
- }
- } catch ( MWException $e ) {
- MWExceptionHandler::logException( $e );
- return true;
- }
- }
-
- return true;
- }
-
- /**
- * Inform the bloom filter of a new member in order to keep it up to date
- *
- * @param string $domain
- * @param string $type
- * @param string|array $members
- * @return bool Success
- */
- final public function insert( $domain, $type, $members ) {
- $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
-
- if ( method_exists( "BloomFilter{$type}", 'mergeAndCheck' ) ) {
- try {
- $virtualKey = "$domain:$type";
- $prefixedMembers = array();
- foreach ( (array)$members as $member ) {
- $prefixedMembers[] = "$virtualKey:$member";
- }
-
- return $this->add( 'shared', $prefixedMembers );
- } catch ( MWException $e ) {
- MWExceptionHandler::logException( $e );
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Create a new bloom filter at $key (if one does not exist yet)
- *
- * @param string $key
- * @param integer $size Bit length [default: 1000000]
- * @param float $precision [default: .001]
- * @return bool Success
- */
- final public function init( $key, $size = 1000000, $precision = .001 ) {
- $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
-
- return $this->doInit( "{$this->cacheID}:$key", $size, min( .1, $precision ) );
- }
-
- /**
- * Add a member to the bloom filter at $key
- *
- * @param string $key
- * @param string|array $members
- * @return bool Success
- */
- final public function add( $key, $members ) {
- $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
-
- return $this->doAdd( "{$this->cacheID}:$key", (array)$members );
- }
-
- /**
- * Check if a member is set in the bloom filter.
- *
- * A member being set means that it *might* have been added.
- * A member not being set means it *could not* have been added.
- *
- * If this returns true, then the caller usually should do the
- * expensive check (whatever that may be). It can be avoided otherwise.
- *
- * @param string $key
- * @param string $member
- * @return bool|null True if set, false if not, null on error
- */
- final public function isHit( $key, $member ) {
- $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
-
- return $this->doIsHit( "{$this->cacheID}:$key", $member );
- }
-
- /**
- * Destroy a bloom filter at $key
- *
- * @param string $key
- * @return bool Success
- */
- final public function delete( $key ) {
- $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
-
- return $this->doDelete( "{$this->cacheID}:$key" );
- }
-
- /**
- * Set the status map of the virtual bloom filter at $key
- *
- * @param string $virtualKey
- * @param array $values Map including some of (lastID, asOfTime, epoch)
- * @return bool Success
- */
- final public function setStatus( $virtualKey, array $values ) {
- $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
-
- return $this->doSetStatus( "{$this->cacheID}:$virtualKey", $values );
- }
-
- /**
- * Get the status map of the virtual bloom filter at $key
- *
- * The map includes:
- * - lastID : the highest ID of the items merged in
- * - asOfTime : UNIX timestamp that the filter is up-to-date as of
- * - epoch : UNIX timestamp that filter started being populated
- * Unset fields will have a null value.
- *
- * @param string $virtualKey
- * @return array|bool False on failure
- */
- final public function getStatus( $virtualKey ) {
- $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
-
- return $this->doGetStatus( "{$this->cacheID}:$virtualKey" );
- }
-
- /**
- * Get an exclusive lock on a filter for updates
- *
- * @param string $virtualKey
- * @return ScopedCallback|ScopedLock|null Returns null if acquisition failed
- */
- public function getScopedLock( $virtualKey ) {
- return null;
- }
-
- /**
- * @param string $key
- * @param integer $size Bit length
- * @param float $precision
- * @return bool Success
- */
- abstract protected function doInit( $key, $size, $precision );
-
- /**
- * @param string $key
- * @param array $members
- * @return bool Success
- */
- abstract protected function doAdd( $key, array $members );
-
- /**
- * @param string $key
- * @param string $member
- * @return bool|null
- */
- abstract protected function doIsHit( $key, $member );
-
- /**
- * @param string $key
- * @return bool Success
- */
- abstract protected function doDelete( $key );
-
- /**
- * @param string $virtualKey
- * @param array $values
- * @return bool Success
- */
- abstract protected function doSetStatus( $virtualKey, array $values );
-
- /**
- * @param string $key
- * @return array|bool
- */
- abstract protected function doGetStatus( $key );
-}
-
-class EmptyBloomCache extends BloomCache {
- public function __construct( array $config ) {
- parent::__construct( array( 'cacheId' => 'none' ) );
- }
-
- protected function doInit( $key, $size, $precision ) {
- return true;
- }
-
- protected function doAdd( $key, array $members ) {
- return true;
- }
-
- protected function doIsHit( $key, $member ) {
- return true;
- }
-
- protected function doDelete( $key ) {
- return true;
- }
-
- protected function doSetStatus( $virtualKey, array $values ) {
- return true;
- }
-
- protected function doGetStatus( $virtualKey ) {
- return array( 'lastID' => null, 'asOfTime' => null, 'epoch' => null ) ;
- }
-}
diff --git a/includes/cache/bloom/BloomCacheRedis.php b/includes/cache/bloom/BloomCacheRedis.php
deleted file mode 100644
index 212e5e8b..00000000
--- a/includes/cache/bloom/BloomCacheRedis.php
+++ /dev/null
@@ -1,370 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Bloom filter implemented using Redis
- *
- * The Redis server must be >= 2.6 and should have volatile-lru or volatile-ttl
- * if there is any eviction policy. It should not be allkeys-* in any case. Also,
- * this can be used in a simple master/slave setup or with Redis Sentinel preferably.
- *
- * Some bits are based on https://github.com/ErikDubbelboer/redis-lua-scaling-bloom-filter
- * but are simplified to use a single filter instead of up to 32 filters.
- *
- * @since 1.24
- */
-class BloomCacheRedis extends BloomCache {
- /** @var RedisConnectionPool */
- protected $redisPool;
- /** @var RedisLockManager */
- protected $lockMgr;
- /** @var array */
- protected $servers;
- /** @var integer Federate each filter into this many redis bitfield objects */
- protected $segments = 128;
-
- /**
- * @params include:
- * - redisServers : list of servers (address:<port>) (the first is the master)
- * - redisConf : additional redis configuration
- *
- * @param array $config
- */
- public function __construct( array $config ) {
- parent::__construct( $config );
-
- $redisConf = $config['redisConfig'];
- $redisConf['serializer'] = 'none'; // manage that in this class
- $this->redisPool = RedisConnectionPool::singleton( $redisConf );
- $this->servers = $config['redisServers'];
- $this->lockMgr = new RedisLockManager( array(
- 'lockServers' => array( 'srv1' => $this->servers[0] ),
- 'srvsByBucket' => array( 0 => array( 'srv1' ) ),
- 'redisConfig' => $config['redisConfig']
- ) );
- }
-
- protected function doInit( $key, $size, $precision ) {
- $conn = $this->getConnection( 'master' );
- if ( !$conn ) {
- return false;
- }
-
- // 80000000 items at p = .001 take up 500MB and fit into one value.
- // Do not hit the 512MB redis value limit by reducing the demands.
- $size = min( $size, 80000000 * $this->segments );
- $precision = max( round( $precision, 3 ), .001 );
- $epoch = microtime( true );
-
- static $script =
-<<<LUA
- local kMetadata, kData = unpack(KEYS)
- local aEntries, aPrec, aEpoch = unpack(ARGV)
- if redis.call('EXISTS',kMetadata) == 0 or redis.call('EXISTS',kData) == 0 then
- redis.call('DEL',kMetadata)
- redis.call('HSET',kMetadata,'entries',aEntries)
- redis.call('HSET',kMetadata,'precision',aPrec)
- redis.call('HSET',kMetadata,'epoch',aEpoch)
- redis.call('SET',kData,'')
- return 1
- end
- return 0
-LUA;
-
- $res = false;
- try {
- $conn->script( 'load', $script );
- $conn->multi( Redis::MULTI );
- for ( $i = 0; $i < $this->segments; ++$i ) {
- $res = $conn->luaEval( $script,
- array(
- "$key:$i:bloom-metadata", # KEYS[1]
- "$key:$i:bloom-data", # KEYS[2]
- ceil( $size / $this->segments ), # ARGV[1]
- $precision, # ARGV[2]
- $epoch # ARGV[3]
- ),
- 2 # number of first argument(s) that are keys
- );
- }
- $results = $conn->exec();
- $res = $results && !in_array( false, $results, true );
- } catch ( RedisException $e ) {
- $this->handleException( $conn, $e );
- }
-
- return ( $res !== false );
- }
-
- protected function doAdd( $key, array $members ) {
- $conn = $this->getConnection( 'master' );
- if ( !$conn ) {
- return false;
- }
-
- static $script =
-<<<LUA
- local kMetadata, kData = unpack(KEYS)
- local aMember = unpack(ARGV)
-
- -- Check if the filter was initialized
- if redis.call('EXISTS',kMetadata) == 0 or redis.call('EXISTS',kData) == 0 then
- return false
- end
-
- -- Initial expected entries and desired precision
- local entries = 1*redis.call('HGET',kMetadata,'entries')
- local precision = 1*redis.call('HGET',kMetadata,'precision')
- local hash = redis.sha1hex(aMember)
-
- -- Based on the math from: http://en.wikipedia.org/wiki/Bloom_filter#Probability_of_false_positives
- -- 0.480453013 = ln(2)^2
- local bits = math.ceil((entries * math.log(precision)) / -0.480453013)
-
- -- 0.693147180 = ln(2)
- local k = math.floor(0.693147180 * bits / entries)
-
- -- This uses a variation on:
- -- 'Less Hashing, Same Performance: Building a Better Bloom Filter'
- -- http://www.eecs.harvard.edu/~kirsch/pubs/bbbf/esa06.pdf
- local h = { }
- h[0] = tonumber(string.sub(hash, 1, 8 ), 16)
- h[1] = tonumber(string.sub(hash, 9, 16), 16)
- h[2] = tonumber(string.sub(hash, 17, 24), 16)
- h[3] = tonumber(string.sub(hash, 25, 32), 16)
-
- for i=1, k do
- local pos = (h[i % 2] + i * h[2 + (((i + (i % 2)) % 4) / 2)]) % bits
- redis.call('SETBIT', kData, pos, 1)
- end
-
- return 1
-LUA;
-
- $res = false;
- try {
- $conn->script( 'load', $script );
- $conn->multi( Redis::PIPELINE );
- foreach ( $members as $member ) {
- $i = $this->getSegment( $member );
- $conn->luaEval( $script,
- array(
- "$key:$i:bloom-metadata", # KEYS[1],
- "$key:$i:bloom-data", # KEYS[2]
- $member # ARGV[1]
- ),
- 2 # number of first argument(s) that are keys
- );
- }
- $results = $conn->exec();
- $res = $results && !in_array( false, $results, true );
- } catch ( RedisException $e ) {
- $this->handleException( $conn, $e );
- }
-
- if ( $res === false ) {
- wfDebug( "Could not add to the '$key' bloom filter; it may be missing." );
- }
-
- return ( $res !== false );
- }
-
- protected function doSetStatus( $virtualKey, array $values ) {
- $conn = $this->getConnection( 'master' );
- if ( !$conn ) {
- return null;
- }
-
- $res = false;
- try {
- $res = $conn->hMSet( "$virtualKey:filter-metadata", $values );
- } catch ( RedisException $e ) {
- $this->handleException( $conn, $e );
- }
-
- return ( $res !== false );
- }
-
- protected function doGetStatus( $virtualKey ) {
- $conn = $this->getConnection( 'slave' );
- if ( !$conn ) {
- return false;
- }
-
- $res = false;
- try {
- $res = $conn->hGetAll( "$virtualKey:filter-metadata" );
- } catch ( RedisException $e ) {
- $this->handleException( $conn, $e );
- }
-
- if ( is_array( $res ) ) {
- $res['lastID'] = isset( $res['lastID'] ) ? $res['lastID'] : null;
- $res['asOfTime'] = isset( $res['asOfTime'] ) ? $res['asOfTime'] : null;
- $res['epoch'] = isset( $res['epoch'] ) ? $res['epoch'] : null;
- }
-
- return $res;
- }
-
- protected function doIsHit( $key, $member ) {
- $conn = $this->getConnection( 'slave' );
- if ( !$conn ) {
- return null;
- }
-
- static $script =
-<<<LUA
- local kMetadata, kData = unpack(KEYS)
- local aMember = unpack(ARGV)
-
- -- Check if the filter was initialized
- if redis.call('EXISTS',kMetadata) == 0 or redis.call('EXISTS',kData) == 0 then
- return false
- end
-
- -- Initial expected entries and desired precision.
- -- This determines the size of the first and subsequent filters.
- local entries = redis.call('HGET',kMetadata,'entries')
- local precision = redis.call('HGET',kMetadata,'precision')
- local hash = redis.sha1hex(aMember)
-
- -- This uses a variation on:
- -- 'Less Hashing, Same Performance: Building a Better Bloom Filter'
- -- http://www.eecs.harvard.edu/~kirsch/pubs/bbbf/esa06.pdf
- local h = { }
- h[0] = tonumber(string.sub(hash, 1, 8 ), 16)
- h[1] = tonumber(string.sub(hash, 9, 16), 16)
- h[2] = tonumber(string.sub(hash, 17, 24), 16)
- h[3] = tonumber(string.sub(hash, 25, 32), 16)
-
- -- 0.480453013 = ln(2)^2
- local bits = math.ceil((entries * math.log(precision)) / -0.480453013)
-
- -- 0.693147180 = ln(2)
- local k = math.floor(0.693147180 * bits / entries)
-
- local found = 1
- for i=1, k do
- local pos = (h[i % 2] + i * h[2 + (((i + (i % 2)) % 4) / 2)]) % bits
- if redis.call('GETBIT', kData, pos) == 0 then
- found = 0
- break
- end
- end
-
- return found
-LUA;
-
- $res = null;
- try {
- $i = $this->getSegment( $member );
- $res = $conn->luaEval( $script,
- array(
- "$key:$i:bloom-metadata", # KEYS[1],
- "$key:$i:bloom-data", # KEYS[2]
- $member # ARGV[1]
- ),
- 2 # number of first argument(s) that are keys
- );
- } catch ( RedisException $e ) {
- $this->handleException( $conn, $e );
- }
-
- return is_int( $res ) ? (bool)$res : null;
- }
-
- protected function doDelete( $key ) {
- $conn = $this->getConnection( 'master' );
- if ( !$conn ) {
- return false;
- }
-
- $res = false;
- try {
- $keys = array();
- for ( $i = 0; $i < $this->segments; ++$i ) {
- $keys[] = "$key:$i:bloom-metadata";
- $keys[] = "$key:$i:bloom-data";
- }
- $res = $conn->delete( $keys );
- } catch ( RedisException $e ) {
- $this->handleException( $conn, $e );
- }
-
- return ( $res !== false );
- }
-
- public function getScopedLock( $virtualKey ) {
- $status = Status::newGood();
- return ScopedLock::factory( $this->lockMgr,
- array( $virtualKey ), LockManager::LOCK_EX, $status );
- }
-
- /**
- * @param string $member
- * @return integer
- */
- protected function getSegment( $member ) {
- return hexdec( substr( md5( $member ), 0, 2 ) ) % $this->segments;
- }
-
- /**
- * $param string $to (master/slave)
- * @return RedisConnRef|bool Returns false on failure
- */
- protected function getConnection( $to ) {
- if ( $to === 'master' ) {
- $conn = $this->redisPool->getConnection( $this->servers[0] );
- } else {
- static $lastServer = null;
-
- $conn = false;
- if ( $lastServer ) {
- $conn = $this->redisPool->getConnection( $lastServer );
- if ( $conn ) {
- return $conn; // reuse connection
- }
- }
- $servers = $this->servers;
- $attempts = min( 3, count( $servers ) );
- for ( $i = 1; $i <= $attempts; ++$i ) {
- $index = mt_rand( 0, count( $servers ) - 1 );
- $conn = $this->redisPool->getConnection( $servers[$index] );
- if ( $conn ) {
- $lastServer = $servers[$index];
- return $conn;
- }
- unset( $servers[$index] ); // skip next time
- }
- }
-
- return $conn;
- }
-
- /**
- * @param RedisConnRef $conn
- * @param Exception $e
- */
- protected function handleException( RedisConnRef $conn, $e ) {
- $this->redisPool->handleError( $conn, $e );
- }
-}
diff --git a/includes/cache/bloom/BloomFilters.php b/includes/cache/bloom/BloomFilters.php
deleted file mode 100644
index 9b710d79..00000000
--- a/includes/cache/bloom/BloomFilters.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * @since 1.24
- */
-class BloomFilterTitleHasLogs {
- public static function mergeAndCheck(
- BloomCache $bcache, $domain, $virtualKey, array $status
- ) {
- $age = microtime( true ) - $status['asOfTime']; // seconds
- $scopedLock = ( mt_rand( 1, (int)pow( 3, max( 0, 5 - $age ) ) ) == 1 )
- ? $bcache->getScopedLock( $virtualKey )
- : false;
-
- if ( $scopedLock ) {
- $updates = self::merge( $bcache, $domain, $virtualKey, $status );
- if ( isset( $updates['asOfTime'] ) ) {
- $age = ( microtime( true ) - $updates['asOfTime'] );
- }
- }
-
- return ( $age < 30 );
- }
-
- public static function merge(
- BloomCache $bcache, $domain, $virtualKey, array $status
- ) {
- $limit = 1000;
- $dbr = wfGetDB( DB_SLAVE, array(), $domain );
- $res = $dbr->select( 'logging',
- array( 'log_namespace', 'log_title', 'log_id', 'log_timestamp' ),
- array( 'log_id > ' . $dbr->addQuotes( (int)$status['lastID'] ) ),
- __METHOD__,
- array( 'ORDER BY' => 'log_id', 'LIMIT' => $limit )
- );
-
- $updates = array();
- if ( $res->numRows() > 0 ) {
- $members = array();
- foreach ( $res as $row ) {
- $members[] = "$virtualKey:{$row->log_namespace}:{$row->log_title}";
- }
- $lastID = $row->log_id;
- $lastTime = $row->log_timestamp;
- if ( !$bcache->add( 'shared', $members ) ) {
- return false;
- }
- $updates['lastID'] = $lastID;
- $updates['asOfTime'] = wfTimestamp( TS_UNIX, $lastTime );
- } else {
- $updates['asOfTime'] = microtime( true );
- }
-
- $updates['epoch'] = $status['epoch'] ?: microtime( true );
-
- $bcache->setStatus( $virtualKey, $updates );
-
- return $updates;
- }
-}
diff --git a/includes/changes/ChangesFeed.php b/includes/changes/ChangesFeed.php
index 2d3b919d..28c2f7ed 100644
--- a/includes/changes/ChangesFeed.php
+++ b/includes/changes/ChangesFeed.php
@@ -167,14 +167,12 @@ class ChangesFeed {
* @param Feed $feed
*/
public static function generateFeed( $rows, &$feed ) {
- wfProfileIn( __METHOD__ );
$items = self::buildItems( $rows );
$feed->outHeader();
foreach ( $items as $item ) {
$feed->outItem( $item );
}
$feed->outFooter();
- wfProfileOut( __METHOD__ );
}
/**
@@ -183,7 +181,6 @@ class ChangesFeed {
* @return array
*/
public static function buildItems( $rows ) {
- wfProfileIn( __METHOD__ );
$items = array();
# Merge adjacent edits by one user
@@ -234,7 +231,6 @@ class ChangesFeed {
);
}
- wfProfileOut( __METHOD__ );
return $items;
}
}
diff --git a/includes/changes/ChangesList.php b/includes/changes/ChangesList.php
index 03d1289f..932006d4 100644
--- a/includes/changes/ChangesList.php
+++ b/includes/changes/ChangesList.php
@@ -67,7 +67,7 @@ class ChangesList extends ContextSource {
$user = $context->getUser();
$sk = $context->getSkin();
$list = null;
- if ( wfRunHooks( 'FetchChangesList', array( $user, &$sk, &$list ) ) ) {
+ if ( Hooks::run( 'FetchChangesList', array( $user, &$sk, &$list ) ) ) {
$new = $context->getRequest()->getBool( 'enhanced', $user->getOption( 'usenewrc' ) );
return $new ? new EnhancedChangesList( $context ) : new OldChangesList( $context );
@@ -180,7 +180,7 @@ class ChangesList extends ContextSource {
* @param ResultWrapper|array $rows
*/
public function initChangesListRows( $rows ) {
- wfRunHooks( 'ChangesListInitRows', array( $this, $rows ) );
+ Hooks::run( 'ChangesListInitRows', array( $this, $rows ) );
}
/**
@@ -364,7 +364,7 @@ class ChangesList extends ContextSource {
# RTL/LTR marker
$articlelink .= $this->getLanguage()->getDirMark();
- wfRunHooks( 'ChangesListInsertArticleLink',
+ Hooks::run( 'ChangesListInsertArticleLink',
array( &$this, &$articlelink, &$s, &$rc, $unpatrolled, $watched ) );
$s .= " $articlelink";
diff --git a/includes/changes/EnhancedChangesList.php b/includes/changes/EnhancedChangesList.php
index 4ab77297..19277f10 100644
--- a/includes/changes/EnhancedChangesList.php
+++ b/includes/changes/EnhancedChangesList.php
@@ -34,6 +34,7 @@ class EnhancedChangesList extends ChangesList {
/**
* @param IContextSource|Skin $obj
+ * @throws MWException
*/
public function __construct( $obj ) {
if ( $obj instanceof Skin ) {
@@ -88,7 +89,6 @@ class EnhancedChangesList extends ChangesList {
* @return string
*/
public function recentChangesLine( &$baseRC, $watched = false ) {
- wfProfileIn( __METHOD__ );
$date = $this->getLanguage()->userDate(
$baseRC->mAttribs['rc_timestamp'],
@@ -109,8 +109,6 @@ class EnhancedChangesList extends ChangesList {
$cacheEntry = $this->cacheEntryFactory->newFromRecentChange( $baseRC, $watched );
$this->addCacheEntry( $cacheEntry );
- wfProfileOut( __METHOD__ );
-
return $ret;
}
@@ -160,7 +158,6 @@ class EnhancedChangesList extends ChangesList {
* @return string
*/
protected function recentChangesBlockGroup( $block ) {
- wfProfileIn( __METHOD__ );
# Add the namespace and title of the block as part of the class
$classes = array( 'mw-collapsible', 'mw-collapsed', 'mw-enhanced-rc' );
@@ -184,14 +181,12 @@ class EnhancedChangesList extends ChangesList {
$isnew = false;
$allBots = true;
$allMinors = true;
- $curId = $currentRevision = 0;
+ $curId = 0;
# Some catalyst variables...
$namehidden = true;
$allLogs = true;
- $oldid = '';
$RCShowChangedSize = $this->getConfig()->get( 'RCShowChangedSize' );
foreach ( $block as $rcObj ) {
- $oldid = $rcObj->mAttribs['rc_last_oldid'];
if ( $rcObj->mAttribs['rc_type'] == RC_NEW ) {
$isnew = true;
}
@@ -215,9 +210,6 @@ class EnhancedChangesList extends ChangesList {
if ( !$curId && $rcObj->mAttribs['rc_cur_id'] ) {
$curId = $rcObj->mAttribs['rc_cur_id'];
}
- if ( !$currentRevision && $rcObj->mAttribs['rc_this_oldid'] ) {
- $currentRevision = $rcObj->mAttribs['rc_this_oldid'];
- }
if ( !$rcObj->mAttribs['rc_bot'] ) {
$allBots = false;
@@ -278,87 +270,7 @@ class EnhancedChangesList extends ChangesList {
$queryParams['curid'] = $curId;
- # Changes message
- static $nchanges = array();
- static $sinceLastVisitMsg = array();
-
- $n = count( $block );
- if ( !isset( $nchanges[$n] ) ) {
- $nchanges[$n] = $this->msg( 'nchanges' )->numParams( $n )->escaped();
- }
-
- $sinceLast = 0;
- $unvisitedOldid = null;
- /** @var $rcObj RCCacheEntry */
- foreach ( $block as $rcObj ) {
- // Same logic as below inside main foreach
- if ( $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched ) {
- $sinceLast++;
- $unvisitedOldid = $rcObj->mAttribs['rc_last_oldid'];
- }
- }
- if ( !isset( $sinceLastVisitMsg[$sinceLast] ) ) {
- $sinceLastVisitMsg[$sinceLast] =
- $this->msg( 'enhancedrc-since-last-visit' )->numParams( $sinceLast )->escaped();
- }
-
- # Total change link
- $r .= ' ';
- $logtext = '';
- /** @var $block0 RecentChange */
- $block0 = $block[0];
- if ( !$allLogs ) {
- if ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
- $logtext .= $nchanges[$n];
- } elseif ( $isnew ) {
- $logtext .= $nchanges[$n];
- } else {
- $logtext .= Linker::link(
- $block0->getTitle(),
- $nchanges[$n],
- array(),
- $queryParams + array(
- 'diff' => $currentRevision,
- 'oldid' => $oldid,
- ),
- array( 'known', 'noclasses' )
- );
- if ( $sinceLast > 0 && $sinceLast < $n ) {
- $logtext .= $this->message['pipe-separator'] . Linker::link(
- $block0->getTitle(),
- $sinceLastVisitMsg[$sinceLast],
- array(),
- $queryParams + array(
- 'diff' => $currentRevision,
- 'oldid' => $unvisitedOldid,
- ),
- array( 'known', 'noclasses' )
- );
- }
- }
- }
-
- # History
- if ( $allLogs ) {
- // don't show history link for logs
- } elseif ( $namehidden || !$block0->getTitle()->exists() ) {
- $logtext .= $this->message['pipe-separator'] . $this->message['enhancedrc-history'];
- } else {
- $params = $queryParams;
- $params['action'] = 'history';
-
- $logtext .= $this->message['pipe-separator'] .
- Linker::linkKnown(
- $block0->getTitle(),
- $this->message['enhancedrc-history'],
- array(),
- $params
- );
- }
-
- if ( $logtext !== '' ) {
- $r .= $this->msg( 'parentheses' )->rawParams( $logtext )->escaped();
- }
+ $r .= $this->getLogText( $block, $queryParams, $allLogs, $isnew, $namehidden );
$r .= ' <span class="mw-changeslist-separator">. .</span> ';
@@ -384,7 +296,7 @@ class EnhancedChangesList extends ChangesList {
}
$r .= $users;
- $r .= $this->numberofWatchingusers( $block0->numberofWatchingusers );
+ $r .= $this->numberofWatchingusers( $block[0]->numberofWatchingusers );
$r .= '</td></tr>';
# Sub-entries
@@ -468,19 +380,124 @@ class EnhancedChangesList extends ChangesList {
$this->rcCacheIndex++;
- wfProfileOut( __METHOD__ );
-
return $r;
}
/**
+ * Generates amount of changes (linking to diff ) & link to history.
+ *
+ * @param array $block
+ * @param array $queryParams
+ * @param bool $allLogs
+ * @param bool $isnew
+ * @param bool $namehidden
+ * @return string
+ */
+ protected function getLogText( $block, $queryParams, $allLogs, $isnew, $namehidden ) {
+ # Changes message
+ static $nchanges = array();
+ static $sinceLastVisitMsg = array();
+
+ $n = count( $block );
+ if ( !isset( $nchanges[$n] ) ) {
+ $nchanges[$n] = $this->msg( 'nchanges' )->numParams( $n )->escaped();
+ }
+
+ $sinceLast = 0;
+ $unvisitedOldid = null;
+ /** @var $rcObj RCCacheEntry */
+ foreach ( $block as $rcObj ) {
+ // Same logic as below inside main foreach
+ if ( $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched ) {
+ $sinceLast++;
+ $unvisitedOldid = $rcObj->mAttribs['rc_last_oldid'];
+ }
+ }
+ if ( !isset( $sinceLastVisitMsg[$sinceLast] ) ) {
+ $sinceLastVisitMsg[$sinceLast] =
+ $this->msg( 'enhancedrc-since-last-visit' )->numParams( $sinceLast )->escaped();
+ }
+
+ $currentRevision = 0;
+ foreach ( $block as $rcObj ) {
+ if ( !$currentRevision ) {
+ $currentRevision = $rcObj->mAttribs['rc_this_oldid'];
+ }
+ }
+
+ # Total change link
+ $links = array();
+ /** @var $block0 RecentChange */
+ $block0 = $block[0];
+ $last = $block[count( $block ) - 1];
+ if ( !$allLogs ) {
+ if ( !ChangesList::userCan( $rcObj, Revision::DELETED_TEXT, $this->getUser() ) ) {
+ $links['total-changes'] = $nchanges[$n];
+ } elseif ( $isnew ) {
+ $links['total-changes'] = $nchanges[$n];
+ } else {
+ $links['total-changes'] = Linker::link(
+ $block0->getTitle(),
+ $nchanges[$n],
+ array(),
+ $queryParams + array(
+ 'diff' => $currentRevision,
+ 'oldid' => $last->mAttribs['rc_last_oldid'],
+ ),
+ array( 'known', 'noclasses' )
+ );
+ if ( $sinceLast > 0 && $sinceLast < $n ) {
+ $links['total-changes-since-last'] = Linker::link(
+ $block0->getTitle(),
+ $sinceLastVisitMsg[$sinceLast],
+ array(),
+ $queryParams + array(
+ 'diff' => $currentRevision,
+ 'oldid' => $unvisitedOldid,
+ ),
+ array( 'known', 'noclasses' )
+ );
+ }
+ }
+ }
+
+ # History
+ if ( $allLogs ) {
+ // don't show history link for logs
+ } elseif ( $namehidden || !$block0->getTitle()->exists() ) {
+ $links['history'] = $this->message['enhancedrc-history'];
+ } else {
+ $params = $queryParams;
+ $params['action'] = 'history';
+
+ $links['history'] = Linker::linkKnown(
+ $block0->getTitle(),
+ $this->message['enhancedrc-history'],
+ array(),
+ $params
+ );
+ }
+
+ # Allow others to alter, remove or add to these links
+ Hooks::run( 'EnhancedChangesList::getLogText',
+ array( $this, &$links, $block ) );
+
+ if ( !$links ) {
+ return '';
+ }
+
+ $logtext = implode( $this->message['pipe-separator'], $links );
+ $logtext = $this->msg( 'parentheses' )->rawParams( $logtext )->escaped();
+ return ' ' . $logtext;
+ }
+
+ /**
* Enhanced RC ungrouped line.
*
* @param RecentChange|RCCacheEntry $rcObj
* @return string A HTML formatted line (generated using $r)
*/
protected function recentChangesBlockLine( $rcObj ) {
- wfProfileIn( __METHOD__ );
$query['curid'] = $rcObj->mAttribs['rc_cur_id'];
$type = $rcObj->mAttribs['rc_type'];
@@ -552,8 +569,6 @@ class EnhancedChangesList extends ChangesList {
$r .= "</td></tr></table>\n";
- wfProfileOut( __METHOD__ );
-
return $r;
}
@@ -568,8 +583,6 @@ class EnhancedChangesList extends ChangesList {
return '';
}
- wfProfileIn( __METHOD__ );
-
$blockOut = '';
foreach ( $this->rc_cache as $block ) {
if ( count( $block ) < 2 ) {
@@ -579,8 +592,6 @@ class EnhancedChangesList extends ChangesList {
}
}
- wfProfileOut( __METHOD__ );
-
return '<div>' . $blockOut . '</div>';
}
diff --git a/includes/changes/OldChangesList.php b/includes/changes/OldChangesList.php
index 4eed9262..4ce564d1 100644
--- a/includes/changes/OldChangesList.php
+++ b/includes/changes/OldChangesList.php
@@ -32,7 +32,6 @@ class OldChangesList extends ChangesList {
* @return string|bool
*/
public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
- wfProfileIn( __METHOD__ );
$classes = array();
// use mw-line-even/mw-line-odd class only if linenumber is given (feature from bug 14468)
@@ -56,14 +55,10 @@ class OldChangesList extends ChangesList {
$rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
}
- if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$html, $rc, &$classes ) ) ) {
- wfProfileOut( __METHOD__ );
-
+ if ( !Hooks::run( 'OldChangesListRecentChangesLine', array( &$this, &$html, $rc, &$classes ) ) ) {
return false;
}
- wfProfileOut( __METHOD__ );
-
$dateheader = ''; // $html now contains only <li>...</li>, for hooks' convenience.
$this->insertDateHeader( $dateheader, $rc->mAttribs['rc_timestamp'] );
@@ -73,7 +68,7 @@ class OldChangesList extends ChangesList {
/**
* @param RecentChange $rc
* @param string[] &$classes
- * @param boolean $watched
+ * @param bool $watched
*
* @return string
*/
diff --git a/includes/changes/RecentChange.php b/includes/changes/RecentChange.php
index e33274e8..b430bab9 100644
--- a/includes/changes/RecentChange.php
+++ b/includes/changes/RecentChange.php
@@ -257,7 +257,7 @@ class RecentChange {
public function getPerformer() {
if ( $this->mPerformer === false ) {
if ( $this->mAttribs['rc_user'] ) {
- $this->mPerformer = User::newFromID( $this->mAttribs['rc_user'] );
+ $this->mPerformer = User::newFromId( $this->mAttribs['rc_user'] );
} else {
$this->mPerformer = User::newFromName( $this->mAttribs['rc_user_text'], false );
}
@@ -283,7 +283,7 @@ class RecentChange {
}
# If our database is strict about IP addresses, use NULL instead of an empty string
- if ( $dbw->strictIPs() and $this->mAttribs['rc_ip'] == '' ) {
+ if ( $dbw->strictIPs() && $this->mAttribs['rc_ip'] == '' ) {
unset( $this->mAttribs['rc_ip'] );
}
@@ -298,7 +298,7 @@ class RecentChange {
$this->mAttribs['rc_id'] = $dbw->nextSequenceValue( 'recentchanges_rc_id_seq' );
## If we are using foreign keys, an entry of 0 for the page_id will fail, so use NULL
- if ( $dbw->cascadingDeletes() and $this->mAttribs['rc_cur_id'] == 0 ) {
+ if ( $dbw->cascadingDeletes() && $this->mAttribs['rc_cur_id'] == 0 ) {
unset( $this->mAttribs['rc_cur_id'] );
}
@@ -309,7 +309,7 @@ class RecentChange {
$this->mAttribs['rc_id'] = $dbw->insertId();
# Notify extensions
- wfRunHooks( 'RecentChange_save', array( &$this ) );
+ Hooks::run( 'RecentChange_save', array( &$this ) );
# Notify external application via UDP
if ( !$noudp ) {
@@ -321,7 +321,7 @@ class RecentChange {
$editor = $this->getPerformer();
$title = $this->getTitle();
- if ( wfRunHooks( 'AbortEmailNotification', array( $editor, $title, $this ) ) ) {
+ if ( Hooks::run( 'AbortEmailNotification', array( $editor, $title, $this ) ) ) {
# @todo FIXME: This would be better as an extension hook
$enotif = new EmailNotification();
$enotif->notifyOnPageChange( $editor, $title,
@@ -445,12 +445,12 @@ class RecentChange {
// Automatic patrol needs "autopatrol", ordinary patrol needs "patrol"
$right = $auto ? 'autopatrol' : 'patrol';
$errors = array_merge( $errors, $this->getTitle()->getUserPermissionsErrors( $right, $user ) );
- if ( !wfRunHooks( 'MarkPatrolled', array( $this->getAttribute( 'rc_id' ), &$user, false ) ) ) {
+ if ( !Hooks::run( 'MarkPatrolled', array( $this->getAttribute( 'rc_id' ), &$user, false ) ) ) {
$errors[] = array( 'hookaborted' );
}
// Users without the 'autopatrol' right can't patrol their
// own revisions
- if ( $user->getName() == $this->getAttribute( 'rc_user_text' )
+ if ( $user->getName() === $this->getAttribute( 'rc_user_text' )
&& !$user->isAllowed( 'autopatrol' )
) {
$errors[] = array( 'markedaspatrollederror-noautopatrol' );
@@ -466,7 +466,7 @@ class RecentChange {
$this->reallyMarkPatrolled();
// Log this patrol event
PatrolLog::record( $this, $auto, $user );
- wfRunHooks( 'MarkPatrolledComplete', array( $this->getAttribute( 'rc_id' ), &$user, false ) );
+ Hooks::run( 'MarkPatrolledComplete', array( $this->getAttribute( 'rc_id' ), &$user, false ) );
return array();
}
@@ -796,29 +796,6 @@ class RecentChange {
return ChangesList::showCharacterDifference( $old, $new );
}
- /**
- * Purge expired changes from the recentchanges table
- * @since 1.22
- */
- public static function purgeExpiredChanges() {
- if ( wfReadOnly() ) {
- return;
- }
-
- $method = __METHOD__;
- $dbw = wfGetDB( DB_MASTER );
- $dbw->onTransactionIdle( function () use ( $dbw, $method ) {
- global $wgRCMaxAge;
-
- $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
- $dbw->delete(
- 'recentchanges',
- array( 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ),
- $method
- );
- } );
- }
-
private static function checkIPAddress( $ip ) {
global $wgRequest;
if ( $ip ) {
diff --git a/includes/changetags/ChangeTagsList.php b/includes/changetags/ChangeTagsList.php
new file mode 100644
index 00000000..dd8bab98
--- /dev/null
+++ b/includes/changetags/ChangeTagsList.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Change tagging
+ */
+
+/**
+ * Generic list for change tagging.
+ */
+abstract class ChangeTagsList extends RevisionListBase {
+ function __construct( IContextSource $context, Title $title, array $ids ) {
+ parent::__construct( $context, $title );
+ $this->ids = $ids;
+ }
+
+ /**
+ * Creates a ChangeTags*List of the requested type.
+ *
+ * @param string $typeName 'revision' or 'logentry'
+ * @param IContextSource $context
+ * @param Title $title
+ * @param array $ids
+ * @return ChangeTagsList An instance of the requested subclass
+ * @throws Exception If you give an unknown $typeName
+ */
+ public static function factory( $typeName, IContextSource $context,
+ Title $title, array $ids ) {
+
+ switch ( $typeName ) {
+ case 'revision':
+ $className = 'ChangeTagsRevisionList';
+ break;
+ case 'logentry':
+ $className = 'ChangeTagsLogList';
+ break;
+ default:
+ throw new Exception( "Class $className requested, but does not exist" );
+ }
+ return new $className( $context, $title, $ids );
+ }
+
+ /**
+ * Reload the list data from the master DB.
+ */
+ function reloadFromMaster() {
+ $dbw = wfGetDB( DB_MASTER );
+ $this->res = $this->doQuery( $dbw );
+ }
+
+ /**
+ * Add/remove change tags from all the items in the list.
+ *
+ * @param array $tagsToAdd
+ * @param array $tagsToRemove
+ * @param array $params
+ * @param string $reason
+ * @param User $user
+ * @return Status
+ */
+ abstract function updateChangeTagsOnAll( $tagsToAdd, $tagsToRemove, $params,
+ $reason, $user );
+}
diff --git a/includes/changetags/ChangeTagsLogItem.php b/includes/changetags/ChangeTagsLogItem.php
new file mode 100644
index 00000000..565d159a
--- /dev/null
+++ b/includes/changetags/ChangeTagsLogItem.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Change tagging
+ */
+
+/**
+ * Item class for a logging table row with its associated change tags.
+ * @todo Abstract out a base class for this and RevDelLogItem, similar to the
+ * RevisionItem class but specifically for log items.
+ * @since 1.25
+ */
+class ChangeTagsLogItem extends RevisionItemBase {
+ public function getIdField() {
+ return 'log_id';
+ }
+
+ public function getTimestampField() {
+ return 'log_timestamp';
+ }
+
+ public function getAuthorIdField() {
+ return 'log_user';
+ }
+
+ public function getAuthorNameField() {
+ return 'log_user_text';
+ }
+
+ public function canView() {
+ return LogEventsList::userCan( $this->row, Revision::DELETED_RESTRICTED, $this->list->getUser() );
+ }
+
+ public function canViewContent() {
+ return true; // none
+ }
+
+ /**
+ * @return string Comma-separated list of tags
+ */
+ public function getTags() {
+ return $this->row->ts_tags;
+ }
+
+ /**
+ * @return string A HTML <li> element representing this revision, showing
+ * change tags and everything
+ */
+ public function getHTML() {
+ $date = htmlspecialchars( $this->list->getLanguage()->userTimeAndDate(
+ $this->row->log_timestamp, $this->list->getUser() ) );
+ $title = Title::makeTitle( $this->row->log_namespace, $this->row->log_title );
+ $formatter = LogFormatter::newFromRow( $this->row );
+ $formatter->setContext( $this->list->getContext() );
+ $formatter->setAudience( LogFormatter::FOR_THIS_USER );
+
+ // Log link for this page
+ $loglink = Linker::link(
+ SpecialPage::getTitleFor( 'Log' ),
+ $this->list->msg( 'log' )->escaped(),
+ array(),
+ array( 'page' => $title->getPrefixedText() )
+ );
+ $loglink = $this->list->msg( 'parentheses' )->rawParams( $loglink )->escaped();
+ // User links and action text
+ $action = $formatter->getActionText();
+ // Comment
+ $comment = $this->list->getLanguage()->getDirMark() .
+ $formatter->getComment();
+
+ if ( LogEventsList::isDeleted( $this->row, LogPage::DELETED_COMMENT ) ) {
+ $comment = '<span class="history-deleted">' . $comment . '</span>';
+ }
+
+ $content = "$loglink $date $action $comment";
+ $attribs = array();
+ $tags = $this->getTags();
+ if ( $tags ) {
+ list( $tagSummary, $classes ) = ChangeTags::formatSummaryRow( $tags, 'edittags' );
+ $content .= " $tagSummary";
+ $attribs['class'] = implode( ' ', $classes );
+ }
+ return Xml::tags( 'li', $attribs, $content );
+ }
+}
diff --git a/includes/changetags/ChangeTagsLogList.php b/includes/changetags/ChangeTagsLogList.php
new file mode 100644
index 00000000..fe80695f
--- /dev/null
+++ b/includes/changetags/ChangeTagsLogList.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Change tagging
+ */
+
+/**
+ * Stores a list of taggable log entries.
+ * @since 1.25
+ */
+class ChangeTagsLogList extends ChangeTagsList {
+ public function getType() {
+ return 'logentry';
+ }
+
+ /**
+ * @param DatabaseBase $db
+ * @return mixed
+ */
+ public function doQuery( $db ) {
+ $ids = array_map( 'intval', $this->ids );
+ $queryInfo = DatabaseLogEntry::getSelectQueryData();
+ $queryInfo['conds'] += array( 'log_id' => $ids );
+ $queryInfo['options'] += array( 'ORDER BY' => 'log_id DESC' );
+ ChangeTags::modifyDisplayQuery(
+ $queryInfo['tables'],
+ $queryInfo['fields'],
+ $queryInfo['conds'],
+ $queryInfo['join_conds'],
+ $queryInfo['options']
+ );
+ return $db->select(
+ $queryInfo['tables'],
+ $queryInfo['fields'],
+ $queryInfo['conds'],
+ __METHOD__,
+ $queryInfo['options'],
+ $queryInfo['join_conds']
+ );
+ }
+
+ public function newItem( $row ) {
+ return new ChangeTagsLogItem( $this, $row );
+ }
+
+ /**
+ * Add/remove change tags from all the log entries in the list.
+ *
+ * @param array $tagsToAdd
+ * @param array $tagsToRemove
+ * @param array $params
+ * @param string $reason
+ * @param User $user
+ * @return Status
+ */
+ public function updateChangeTagsOnAll( $tagsToAdd, $tagsToRemove, $params,
+ $reason, $user ) {
+
+ // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ for ( $this->reset(); $this->current(); $this->next() ) {
+ // @codingStandardsIgnoreEnd
+ $item = $this->current();
+ $status = ChangeTags::updateTagsWithChecks( $tagsToAdd, $tagsToRemove,
+ null, null, $item->getId(), $params, $reason, $user );
+ // Should only fail on second and subsequent times if the user trips
+ // the rate limiter
+ if ( !$status->isOK() ) {
+ break;
+ }
+ }
+
+ return $status;
+ }
+}
diff --git a/includes/changetags/ChangeTagsRevisionItem.php b/includes/changetags/ChangeTagsRevisionItem.php
new file mode 100644
index 00000000..e90a1b4f
--- /dev/null
+++ b/includes/changetags/ChangeTagsRevisionItem.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Change tagging
+ */
+
+/**
+ * Item class for a live revision table row with its associated change tags.
+ * @since 1.25
+ */
+class ChangeTagsRevisionItem extends RevisionItem {
+ /**
+ * @return string Comma-separated list of tags
+ */
+ public function getTags() {
+ return $this->row->ts_tags;
+ }
+
+ /**
+ * @return string A HTML <li> element representing this revision, showing
+ * change tags and everything
+ */
+ public function getHTML() {
+ $difflink = $this->list->msg( 'parentheses' )
+ ->rawParams( $this->getDiffLink() )->escaped();
+ $revlink = $this->getRevisionLink();
+ $userlink = Linker::revUserLink( $this->revision );
+ $comment = Linker::revComment( $this->revision );
+ if ( $this->isDeleted() ) {
+ $revlink = "<span class=\"history-deleted\">$revlink</span>";
+ }
+
+ $content = "$difflink $revlink $userlink $comment";
+ $attribs = array();
+ $tags = $this->getTags();
+ if ( $tags ) {
+ list( $tagSummary, $classes ) = ChangeTags::formatSummaryRow( $tags, 'edittags' );
+ $content .= " $tagSummary";
+ $attribs['class'] = implode( ' ', $classes );
+ }
+ return Xml::tags( 'li', $attribs, $content );
+ }
+}
diff --git a/includes/changetags/ChangeTagsRevisionList.php b/includes/changetags/ChangeTagsRevisionList.php
new file mode 100644
index 00000000..842d3272
--- /dev/null
+++ b/includes/changetags/ChangeTagsRevisionList.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Change tagging
+ */
+
+/**
+ * Stores a list of taggable revisions.
+ * @since 1.25
+ */
+class ChangeTagsRevisionList extends ChangeTagsList {
+ public function getType() {
+ return 'revision';
+ }
+
+ /**
+ * @param DatabaseBase $db
+ * @return mixed
+ */
+ public function doQuery( $db ) {
+ $ids = array_map( 'intval', $this->ids );
+ $queryInfo = array(
+ 'tables' => array( 'revision', 'user' ),
+ 'fields' => array_merge( Revision::selectFields(), Revision::selectUserFields() ),
+ 'conds' => array(
+ 'rev_page' => $this->title->getArticleID(),
+ 'rev_id' => $ids,
+ ),
+ 'options' => array( 'ORDER BY' => 'rev_id DESC' ),
+ 'join_conds' => array(
+ 'page' => Revision::pageJoinCond(),
+ 'user' => Revision::userJoinCond(),
+ ),
+ );
+ ChangeTags::modifyDisplayQuery(
+ $queryInfo['tables'],
+ $queryInfo['fields'],
+ $queryInfo['conds'],
+ $queryInfo['join_conds'],
+ $queryInfo['options']
+ );
+ return $db->select(
+ $queryInfo['tables'],
+ $queryInfo['fields'],
+ $queryInfo['conds'],
+ __METHOD__,
+ $queryInfo['options'],
+ $queryInfo['join_conds']
+ );
+ }
+
+ public function newItem( $row ) {
+ return new ChangeTagsRevisionItem( $this, $row );
+ }
+
+ /**
+ * Add/remove change tags from all the revisions in the list.
+ *
+ * @param array $tagsToAdd
+ * @param array $tagsToRemove
+ * @param array $params
+ * @param string $reason
+ * @param User $user
+ * @return Status
+ */
+ public function updateChangeTagsOnAll( $tagsToAdd, $tagsToRemove, $params,
+ $reason, $user ) {
+
+ // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ for ( $this->reset(); $this->current(); $this->next() ) {
+ // @codingStandardsIgnoreEnd
+ $item = $this->current();
+ $status = ChangeTags::updateTagsWithChecks( $tagsToAdd, $tagsToRemove,
+ null, $item->getId(), null, $params, $reason, $user );
+ // Should only fail on second and subsequent times if the user trips
+ // the rate limiter
+ if ( !$status->isOK() ) {
+ break;
+ }
+ }
+
+ return $status;
+ }
+}
diff --git a/includes/config/ConfigException.php b/includes/config/ConfigException.php
index 75cd5eeb..3b3ba9de 100644
--- a/includes/config/ConfigException.php
+++ b/includes/config/ConfigException.php
@@ -25,5 +25,5 @@
*
* @since 1.23
*/
-class ConfigException extends MWException {
+class ConfigException extends Exception {
}
diff --git a/includes/config/GlobalVarConfig.php b/includes/config/GlobalVarConfig.php
index 39d6e8e1..589f7d35 100644
--- a/includes/config/GlobalVarConfig.php
+++ b/includes/config/GlobalVarConfig.php
@@ -63,15 +63,6 @@ class GlobalVarConfig implements Config {
}
/**
- * @see MutableConfig::set
- * @deprecated since 1.24
- */
- public function set( $name, $value ) {
- wfDeprecated( __METHOD__, '1.24' );
- $this->setWithPrefix( $this->prefix, $name, $value );
- }
-
- /**
* Get a variable with a given prefix, if not the defaults.
*
* @param string $prefix Prefix to use on the variable, if one.
@@ -93,16 +84,4 @@ class GlobalVarConfig implements Config {
$var = $prefix . $name;
return array_key_exists( $var, $GLOBALS );
}
-
- /**
- * Get a variable with a given prefix, if not the defaults.
- *
- * @param string $prefix Prefix to use on the variable
- * @param string $name Variable name without prefix
- * @param mixed $value Value to set
- * @deprecated since 1.24
- */
- protected function setWithPrefix( $prefix, $name, $value ) {
- $GLOBALS[$prefix . $name] = $value;
- }
}
diff --git a/includes/content/AbstractContent.php b/includes/content/AbstractContent.php
index 9d257a6a..6542d7df 100644
--- a/includes/content/AbstractContent.php
+++ b/includes/content/AbstractContent.php
@@ -204,13 +204,13 @@ abstract class AbstractContent implements Content {
* Returns a list of DataUpdate objects for recording information about this
* Content in some secondary data store.
*
- * This default implementation calls
- * $this->getParserOutput( $content, $title, null, null, false ),
- * and then calls getSecondaryDataUpdates( $title, $recursive ) on the
- * resulting ParserOutput object.
+ * This default implementation returns a LinksUpdate object and calls the
+ * SecondaryDataUpdates hook.
*
* Subclasses may override this to determine the secondary data updates more
* efficiently, preferably without the need to generate a parser output object.
+ * They should however make sure to call SecondaryDataUpdates to give extensions
+ * a chance to inject additional updates.
*
* @since 1.21
*
@@ -224,12 +224,19 @@ abstract class AbstractContent implements Content {
* @see Content::getSecondaryDataUpdates()
*/
public function getSecondaryDataUpdates( Title $title, Content $old = null,
- $recursive = true, ParserOutput $parserOutput = null ) {
+ $recursive = true, ParserOutput $parserOutput = null
+ ) {
if ( $parserOutput === null ) {
$parserOutput = $this->getParserOutput( $title, null, null, false );
}
- return $parserOutput->getSecondaryDataUpdates( $title, $recursive );
+ $updates = array(
+ new LinksUpdate( $title, $parserOutput, $recursive )
+ );
+
+ Hooks::run( 'SecondaryDataUpdates', array( $title, $old, $recursive, $parserOutput, &$updates ) );
+
+ return $updates;
}
/**
@@ -386,7 +393,7 @@ abstract class AbstractContent implements Content {
*
* @see Content::prepareSave
*/
- public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user ) {
+ public function prepareSave( WikiPage $page, $flags, $parentRevId, User $user ) {
if ( $this->isValid() ) {
return Status::newGood();
} else {
@@ -446,7 +453,7 @@ abstract class AbstractContent implements Content {
$lossy = ( $lossy === 'lossy' ); // string flag, convert to boolean for convenience
$result = false;
- wfRunHooks( 'ConvertContent', array( $this, $toModel, $lossy, &$result ) );
+ Hooks::run( 'ConvertContent', array( $this, $toModel, $lossy, &$result ) );
return $result;
}
@@ -480,7 +487,7 @@ abstract class AbstractContent implements Content {
$po = new ParserOutput();
- if ( wfRunHooks( 'ContentGetParserOutput',
+ if ( Hooks::run( 'ContentGetParserOutput',
array( $this, $title, $revId, $options, $generateHtml, &$po ) ) ) {
// Save and restore the old value, just in case something is reusing
@@ -491,6 +498,8 @@ abstract class AbstractContent implements Content {
$options->setRedirectTarget( $oldRedir );
}
+ Hooks::run( 'ContentAlterParserOutput', array( $this, $title, $po ) );
+
return $po;
}
diff --git a/includes/content/CodeContentHandler.php b/includes/content/CodeContentHandler.php
index 447a2a73..694b633e 100644
--- a/includes/content/CodeContentHandler.php
+++ b/includes/content/CodeContentHandler.php
@@ -58,6 +58,7 @@ abstract class CodeContentHandler extends TextContentHandler {
/**
* @return string
+ * @throws MWException
*/
protected function getContentClass() {
throw new MWException( 'Subclass must override' );
diff --git a/includes/content/Content.php b/includes/content/Content.php
index 61b9254f..8ed761f5 100644
--- a/includes/content/Content.php
+++ b/includes/content/Content.php
@@ -292,6 +292,9 @@ interface Content {
* Subclasses may implement this to determine the necessary updates more
* efficiently, or make use of information about the old content.
*
+ * @note Implementations should call the SecondaryDataUpdates hook, like
+ * AbstractContent does.
+ *
* @param Title $title The context for determining the necessary updates
* @param Content $old An optional Content object representing the
* previous content, i.e. the content being replaced by this Content
@@ -461,7 +464,7 @@ interface Content {
*
* @param WikiPage $page The page to be saved.
* @param int $flags Bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
- * @param int $baseRevId The ID of the current revision
+ * @param int $parentRevId The ID of the current revision
* @param User $user
*
* @return Status A status object indicating whether the content was
@@ -470,7 +473,7 @@ interface Content {
*
* @see WikiPage::doEditContent()
*/
- public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user );
+ public function prepareSave( WikiPage $page, $flags, $parentRevId, User $user );
/**
* Returns a list of updates to perform when this content is deleted.
diff --git a/includes/content/ContentHandler.php b/includes/content/ContentHandler.php
index ac417223..371b267e 100644
--- a/includes/content/ContentHandler.php
+++ b/includes/content/ContentHandler.php
@@ -201,7 +201,7 @@ abstract class ContentHandler {
$model = MWNamespace::getNamespaceContentModel( $ns );
// Hook can determine default model
- if ( !wfRunHooks( 'ContentHandlerDefaultModelFor', array( $title, &$model ) ) ) {
+ if ( !Hooks::run( 'ContentHandlerDefaultModelFor', array( $title, &$model ) ) ) {
if ( !is_null( $model ) ) {
return $model;
}
@@ -214,7 +214,7 @@ abstract class ContentHandler {
}
// Hook can force JS/CSS
- wfRunHooks( 'TitleIsCssOrJsPage', array( $title, &$isCssOrJsPage ) );
+ Hooks::run( 'TitleIsCssOrJsPage', array( $title, &$isCssOrJsPage ), '1.25' );
// Is this a .css subpage of a user page?
$isJsCssSubpage = NS_USER == $ns
@@ -229,7 +229,7 @@ abstract class ContentHandler {
$isWikitext = $isWikitext && !$isCssOrJsPage && !$isJsCssSubpage;
// Hook can override $isWikitext
- wfRunHooks( 'TitleIsWikitextPage', array( $title, &$isWikitext ) );
+ Hooks::run( 'TitleIsWikitextPage', array( $title, &$isWikitext ), '1.25' );
if ( !$isWikitext ) {
switch ( $ext ) {
@@ -318,7 +318,7 @@ abstract class ContentHandler {
if ( empty( $wgContentHandlers[$modelId] ) ) {
$handler = null;
- wfRunHooks( 'ContentHandlerForModelID', array( $modelId, &$handler ) );
+ Hooks::run( 'ContentHandlerForModelID', array( $modelId, &$handler ) );
if ( $handler === null ) {
throw new MWException( "No handler for model '$modelId' registered in \$wgContentHandlers" );
@@ -626,8 +626,15 @@ abstract class ContentHandler {
public function createDifferenceEngine( IContextSource $context, $old = 0, $new = 0,
$rcid = 0, //FIXME: Deprecated, no longer used
$refreshCache = false, $unhide = false ) {
- $diffEngineClass = $this->getDiffEngineClass();
+ // hook: get difference engine
+ $differenceEngine = null;
+ if ( !wfRunHooks( 'GetDifferenceEngine',
+ array( $context, $old, $new, $refreshCache, $unhide, &$differenceEngine )
+ ) ) {
+ return $differenceEngine;
+ }
+ $diffEngineClass = $this->getDiffEngineClass();
return new $diffEngineClass( $context, $old, $new, $rcid, $refreshCache, $unhide );
}
@@ -660,7 +667,7 @@ abstract class ContentHandler {
$pageLang = wfGetLangObj( $lang );
}
- wfRunHooks( 'PageContentLanguage', array( $title, &$pageLang, $wgLang ) );
+ Hooks::run( 'PageContentLanguage', array( $title, &$pageLang, $wgLang ) );
return wfGetLangObj( $pageLang );
}
@@ -719,7 +726,7 @@ abstract class ContentHandler {
public function canBeUsedOn( Title $title ) {
$ok = true;
- wfRunHooks( 'ContentModelCanBeUsedOn', array( $this->getModelID(), $title, &$ok ) );
+ Hooks::run( 'ContentModelCanBeUsedOn', array( $this->getModelID(), $title, &$ok ) );
return $ok;
}
@@ -1151,7 +1158,7 @@ abstract class ContentHandler {
}
// call the hook functions
- $ok = wfRunHooks( $event, $args );
+ $ok = Hooks::run( $event, $args );
// see if the hook changed the text
foreach ( $contentTexts as $k => $orig ) {
diff --git a/includes/content/JavaScriptContentHandler.php b/includes/content/JavaScriptContentHandler.php
index 457b83d7..d2218971 100644
--- a/includes/content/JavaScriptContentHandler.php
+++ b/includes/content/JavaScriptContentHandler.php
@@ -1,7 +1,5 @@
<?php
/**
- * Content handler for JavaScript pages.
- *
* 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
@@ -23,9 +21,10 @@
/**
* Content handler for JavaScript pages.
*
+ * @todo Create a ScriptContentHandler base class, do highlighting stuff there?
+ *
* @since 1.21
* @ingroup Content
- * @todo make ScriptContentHandler base class, do highlighting stuff there?
*/
class JavaScriptContentHandler extends CodeContentHandler {
@@ -36,6 +35,9 @@ class JavaScriptContentHandler extends CodeContentHandler {
parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
}
+ /**
+ * @return string
+ */
protected function getContentClass() {
return 'JavaScriptContent';
}
diff --git a/includes/content/JsonContent.php b/includes/content/JsonContent.php
index b36827c5..bf3a25bf 100644
--- a/includes/content/JsonContent.php
+++ b/includes/content/JsonContent.php
@@ -14,53 +14,83 @@
*/
class JsonContent extends TextContent {
+ /**
+ * @since 1.25
+ * @var Status
+ */
+ protected $jsonParse;
+
+ /**
+ * @param string $text JSON
+ */
public function __construct( $text, $modelId = CONTENT_MODEL_JSON ) {
parent::__construct( $text, $modelId );
}
/**
* Decodes the JSON into a PHP associative array.
- * @return array
+ *
+ * @deprecated since 1.25 Use getData instead.
+ * @return array|null
*/
public function getJsonData() {
+ wfDeprecated( __METHOD__, '1.25' );
return FormatJson::decode( $this->getNativeData(), true );
}
/**
- * @return bool Whether content is valid JSON.
+ * Decodes the JSON string.
+ *
+ * Note that this parses it without casting objects to associative arrays.
+ * Objects and arrays are kept as distinguishable types in the PHP values.
+ *
+ * @return Status
+ */
+ public function getData() {
+ if ( $this->jsonParse === null ) {
+ $this->jsonParse = FormatJson::parse( $this->getNativeData() );
+ }
+ return $this->jsonParse;
+ }
+
+ /**
+ * @return bool Whether content is valid.
*/
public function isValid() {
- return $this->getJsonData() !== null;
+ return $this->getData()->isGood();
}
/**
- * Pretty-print JSON
+ * Pretty-print JSON.
*
- * @return bool|null|string
+ * If called before validation, it may return JSON "null".
+ *
+ * @return string
*/
public function beautifyJSON() {
- $decoded = FormatJson::decode( $this->getNativeData(), true );
- if ( !is_array( $decoded ) ) {
- return null;
- }
- return FormatJson::encode( $decoded, true );
-
+ return FormatJson::encode( $this->getData()->getValue(), true, FormatJson::UTF8_OK );
}
/**
* Beautifies JSON prior to save.
+ *
* @param Title $title Title
* @param User $user User
* @param ParserOptions $popts
* @return JsonContent
*/
public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
+ // FIXME: WikiPage::doEditContent invokes PST before validation. As such, native data
+ // may be invalid (though PST result is discarded later in that case).
+ if ( !$this->isValid() ) {
+ return $this;
+ }
+
return new static( $this->beautifyJSON() );
}
/**
- * Set the HTML and add the appropriate styles
- *
+ * Set the HTML and add the appropriate styles.
*
* @param Title $title
* @param int $revId
@@ -71,50 +101,150 @@ class JsonContent extends TextContent {
protected function fillParserOutput( Title $title, $revId,
ParserOptions $options, $generateHtml, ParserOutput &$output
) {
- if ( $generateHtml ) {
- $output->setText( $this->objectTable( $this->getJsonData() ) );
+ // FIXME: WikiPage::doEditContent generates parser output before validation.
+ // As such, native data may be invalid (though output is discarded later in that case).
+ if ( $generateHtml && $this->isValid() ) {
+ $output->setText( $this->rootValueTable( $this->getData()->getValue() ) );
$output->addModuleStyles( 'mediawiki.content.json' );
} else {
$output->setText( '' );
}
}
+
/**
- * Constructs an HTML representation of a JSON object.
- * @param array $mapping
+ * Construct HTML table representation of any JSON value.
+ *
+ * See also valueCell, which is similar.
+ *
+ * @param mixed $val
+ * @return string HTML.
+ */
+ protected function rootValueTable( $val ) {
+ if ( is_object( $val ) ) {
+ return self::objectTable( $val );
+ }
+
+ if ( is_array( $val ) ) {
+ // Wrap arrays in another array so that they're visually boxed in a container.
+ // Otherwise they are visually indistinguishable from a single value.
+ return self::arrayTable( array( $val ) );
+ }
+
+ return Html::rawElement( 'table', array( 'class' => 'mw-json mw-json-single-value' ),
+ Html::rawElement( 'tbody', array(),
+ Html::rawElement( 'tr', array(),
+ Html::element( 'td', array(), self::primitiveValue( $val ) )
+ )
+ )
+ );
+ }
+
+ /**
+ * Create HTML table representing a JSON object.
+ *
+ * @param stdClass $mapping
* @return string HTML
*/
protected function objectTable( $mapping ) {
$rows = array();
+ $empty = true;
foreach ( $mapping as $key => $val ) {
$rows[] = $this->objectRow( $key, $val );
+ $empty = false;
+ }
+ if ( $empty ) {
+ $rows[] = Html::rawElement( 'tr', array(),
+ Html::element( 'td', array( 'class' => 'mw-json-empty' ),
+ wfMessage( 'content-json-empty-object' )->text()
+ )
+ );
}
- return Xml::tags( 'table', array( 'class' => 'mw-json' ),
- Xml::tags( 'tbody', array(), join( "\n", $rows ) )
+ return Html::rawElement( 'table', array( 'class' => 'mw-json' ),
+ Html::rawElement( 'tbody', array(), join( '', $rows ) )
);
}
/**
- * Constructs HTML representation of a single key-value pair.
+ * Create HTML table row representing one object property.
+ *
* @param string $key
* @param mixed $val
* @return string HTML.
*/
protected function objectRow( $key, $val ) {
- $th = Xml::elementClean( 'th', array(), $key );
- if ( is_array( $val ) ) {
- $td = Xml::tags( 'td', array(), self::objectTable( $val ) );
- } else {
- if ( is_string( $val ) ) {
- $val = '"' . $val . '"';
- } else {
- $val = FormatJson::encode( $val );
- }
+ $th = Html::element( 'th', array(), $key );
+ $td = self::valueCell( $val );
+ return Html::rawElement( 'tr', array(), $th . $td );
+ }
- $td = Xml::elementClean( 'td', array( 'class' => 'value' ), $val );
+ /**
+ * Create HTML table representing a JSON array.
+ *
+ * @param array $mapping
+ * @return string HTML
+ */
+ protected function arrayTable( $mapping ) {
+ $rows = array();
+ $empty = true;
+
+ foreach ( $mapping as $val ) {
+ $rows[] = $this->arrayRow( $val );
+ $empty = false;
+ }
+ if ( $empty ) {
+ $rows[] = Html::rawElement( 'tr', array(),
+ Html::element( 'td', array( 'class' => 'mw-json-empty' ),
+ wfMessage( 'content-json-empty-array' )->text()
+ )
+ );
}
+ return Html::rawElement( 'table', array( 'class' => 'mw-json' ),
+ Html::rawElement( 'tbody', array(), join( "\n", $rows ) )
+ );
+ }
- return Xml::tags( 'tr', array(), $th . $td );
+ /**
+ * Create HTML table row representing the value in an array.
+ *
+ * @param mixed $val
+ * @return string HTML.
+ */
+ protected function arrayRow( $val ) {
+ $td = self::valueCell( $val );
+ return Html::rawElement( 'tr', array(), $td );
}
+ /**
+ * Construct HTML table cell representing any JSON value.
+ *
+ * @param mixed $val
+ * @return string HTML.
+ */
+ protected function valueCell( $val ) {
+ if ( is_object( $val ) ) {
+ return Html::rawElement( 'td', array(), self::objectTable( $val ) );
+ }
+
+ if ( is_array( $val ) ) {
+ return Html::rawElement( 'td', array(), self::arrayTable( $val ) );
+ }
+
+ return Html::element( 'td', array( 'class' => 'value' ), self::primitiveValue( $val ) );
+ }
+
+ /**
+ * Construct text representing a JSON primitive value.
+ *
+ * @param mixed $val
+ * @return string Text.
+ */
+ protected function primitiveValue( $val ) {
+ if ( is_string( $val ) ) {
+ // Don't FormatJson::encode for strings since we want quotes
+ // and new lines to render visually instead of escaped.
+ return '"' . $val . '"';
+ }
+ return FormatJson::encode( $val );
+ }
}
diff --git a/includes/content/JsonContentHandler.php b/includes/content/JsonContentHandler.php
index 392ce37b..b149f528 100644
--- a/includes/content/JsonContentHandler.php
+++ b/includes/content/JsonContentHandler.php
@@ -1,15 +1,31 @@
<?php
/**
- * JSON Schema Content Handler
+ * 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.
*
- * @file
+ * 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.
*
- * @author Ori Livneh <ori@wikimedia.org>
- * @author Kunal Mehta <legoktm@gmail.com>
+ * 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
*/
/**
+ * Content handler for JSON.
+ *
+ * @author Ori Livneh <ori@wikimedia.org>
+ * @author Kunal Mehta <legoktm@gmail.com>
+ *
* @since 1.24
+ * @ingroup Content
*/
class JsonContentHandler extends CodeContentHandler {
diff --git a/includes/content/TextContent.php b/includes/content/TextContent.php
index c479f202..baea8125 100644
--- a/includes/content/TextContent.php
+++ b/includes/content/TextContent.php
@@ -37,6 +37,7 @@ class TextContent extends AbstractContent {
/**
* @param string $text
* @param string $model_id
+ * @throws MWException
*/
public function __construct( $text, $model_id = CONTENT_MODEL_TEXT ) {
parent::__construct( $model_id );
diff --git a/includes/content/WikitextContent.php b/includes/content/WikitextContent.php
index 9a8ab3a6..dbe09f91 100644
--- a/includes/content/WikitextContent.php
+++ b/includes/content/WikitextContent.php
@@ -68,13 +68,11 @@ class WikitextContent extends TextContent {
* @see Content::replaceSection()
*/
public function replaceSection( $sectionId, Content $with, $sectionTitle = '' ) {
- wfProfileIn( __METHOD__ );
$myModelId = $this->getModel();
$sectionModelId = $with->getModel();
if ( $sectionModelId != $myModelId ) {
- wfProfileOut( __METHOD__ );
throw new MWException( "Incompatible content model for section: " .
"document uses $myModelId but " .
"section uses $sectionModelId." );
@@ -84,7 +82,6 @@ class WikitextContent extends TextContent {
$text = $with->getNativeData();
if ( strval( $sectionId ) === '' ) {
- wfProfileOut( __METHOD__ );
return $with; # XXX: copy first?
}
@@ -93,7 +90,7 @@ class WikitextContent extends TextContent {
# Inserting a new section
$subject = $sectionTitle ? wfMessage( 'newsectionheaderdefaultlevel' )
->rawParams( $sectionTitle )->inContentLanguage()->text() . "\n\n" : '';
- if ( wfRunHooks( 'PlaceNewSection', array( $this, $oldtext, $subject, &$text ) ) ) {
+ if ( Hooks::run( 'PlaceNewSection', array( $this, $oldtext, $subject, &$text ) ) ) {
$text = strlen( trim( $oldtext ) ) > 0
? "{$oldtext}\n\n{$subject}{$text}"
: "{$subject}{$text}";
@@ -107,8 +104,6 @@ class WikitextContent extends TextContent {
$newContent = new static( $text );
- wfProfileOut( __METHOD__ );
-
return $newContent;
}
diff --git a/includes/context/ContextSource.php b/includes/context/ContextSource.php
index 076504ec..d526d84b 100644
--- a/includes/context/ContextSource.php
+++ b/includes/context/ContextSource.php
@@ -1,7 +1,5 @@
<?php
/**
- * Request-dependant objects containers.
- *
* 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
@@ -17,8 +15,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
- * @since 1.18
- *
* @author Happy-melon
* @file
*/
@@ -26,6 +22,8 @@
/**
* The simplest way of implementing IContextSource is to hold a RequestContext as a
* member variable and provide accessors to it.
+ *
+ * @since 1.18
*/
abstract class ContextSource implements IContextSource {
/**
@@ -155,6 +153,17 @@ abstract class ContextSource implements IContextSource {
}
/**
+ * Get the Stats object
+ *
+ * @since 1.25
+ * @return BufferingStatsdDataFactory
+ */
+ public function getStats() {
+ return $this->getContext()->getStats();
+ }
+
+
+ /**
* Get a Message object with context set
* Parameters are the same as wfMessage()
*
diff --git a/includes/context/DerivativeContext.php b/includes/context/DerivativeContext.php
index b8966f0c..00323cae 100644
--- a/includes/context/DerivativeContext.php
+++ b/includes/context/DerivativeContext.php
@@ -1,7 +1,5 @@
<?php
/**
- * Request-dependant objects containers.
- *
* 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
@@ -17,8 +15,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
- * @since 1.19
- *
* @author Daniel Friesen
* @file
*/
@@ -28,6 +24,7 @@
* but allow individual pieces of context to be changed locally
* eg: A ContextSource that can inherit from the main RequestContext but have
* a different Title instance set on it.
+ * @since 1.19
*/
class DerivativeContext extends ContextSource {
/**
@@ -101,6 +98,19 @@ class DerivativeContext extends ContextSource {
}
/**
+ * Get the stats object
+ *
+ * @return BufferingStatsdDataFactory
+ */
+ public function getStats() {
+ if ( !is_null( $this->stats ) ) {
+ return $this->stats;
+ } else {
+ return $this->getContext()->getStats();
+ }
+ }
+
+ /**
* Set the WebRequest object
*
* @param WebRequest $r
diff --git a/includes/context/IContextSource.php b/includes/context/IContextSource.php
index f718103d..713c5cbf 100644
--- a/includes/context/IContextSource.php
+++ b/includes/context/IContextSource.php
@@ -1,7 +1,5 @@
<?php
/**
- * Request-dependant objects containers.
- *
* 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
@@ -24,7 +22,33 @@
*/
/**
- * Interface for objects which can provide a context on request.
+ * Interface for objects which can provide a MediaWiki context on request
+ *
+ * Context objects contain request-dependent objects that manage the core
+ * web request/response logic for essentially all requests to MediaWiki.
+ * The contained objects include:
+ * a) Key objects that depend (for construction/loading) on the HTTP request
+ * b) Key objects used for response building and PHP session state control
+ * c) Performance metric deltas accumulated from request execution
+ * d) The site configuration object
+ * All of the objects are useful for the vast majority of MediaWiki requests.
+ * The site configuration object is included on grounds of extreme
+ * utility, even though it should not actually depend on the web request.
+ *
+ * More specifically, the scope of the context includes:
+ * a) Objects that represent the HTTP request/response and PHP session state
+ * b) Object representing the MediaWiki user (as determined by the HTTP request)
+ * c) Primary MediaWiki output builder objects (OutputPage, user skin object)
+ * d) The language object for the user/request
+ * e) The title and wiki page objects requested via URL (if any)
+ * f) Performance metric deltas accumulated from request execution
+ * g) The site configuration object
+ *
+ * This class is not intended as a service-locator nor a service singleton.
+ * Objects that only depend on site configuration do not belong here (aside
+ * from Config itself). Objects that represent persistent data stores do not
+ * belong here either. Session state changes should only be propagated on
+ * shutdown by separate persistence handler objects, for example.
*/
interface IContextSource {
/**
@@ -100,6 +124,14 @@ interface IContextSource {
public function getConfig();
/**
+ * Get the stats object
+ *
+ * @since 1.25
+ * @return BufferingStatsdDataFactory
+ */
+ public function getStats();
+
+ /**
* Get a Message object with context set
*
* @return Message
diff --git a/includes/context/RequestContext.php b/includes/context/RequestContext.php
index ede10fe9..4e790c04 100644
--- a/includes/context/RequestContext.php
+++ b/includes/context/RequestContext.php
@@ -1,7 +1,5 @@
<?php
/**
- * Request-dependant objects containers.
- *
* 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
@@ -64,6 +62,11 @@ class RequestContext implements IContextSource {
private $skin;
/**
+ * @var StatsdDataFactory
+ */
+ private $stats;
+
+ /**
* @var Config
*/
private $config;
@@ -121,6 +124,22 @@ class RequestContext implements IContextSource {
}
/**
+ * Get the Stats object
+ *
+ * @return BufferingStatsdDataFactory
+ */
+ public function getStats() {
+ if ( $this->stats === null ) {
+ $config = $this->getConfig();
+ $prefix = $config->has( 'StatsdMetricPrefix' )
+ ? rtrim( $config->get( 'StatsdMetricPrefix' ), '.' )
+ : 'MediaWiki';
+ $this->stats = new BufferingStatsdDataFactory( $prefix );
+ }
+ return $this->stats;
+ }
+
+ /**
* Set the Title object
*
* @param Title $title
@@ -140,12 +159,23 @@ class RequestContext implements IContextSource {
if ( $this->title === null ) {
global $wgTitle; # fallback to $wg till we can improve this
$this->title = $wgTitle;
+ wfDebugLog( 'GlobalTitleFail', __METHOD__ . ' called by ' . wfGetAllCallers( 5 ) . ' with no title set.' );
}
return $this->title;
}
/**
+ * Check, if a Title object is set
+ *
+ * @since 1.25
+ * @return bool
+ */
+ public function hasTitle() {
+ return $this->title !== null;
+ }
+
+ /**
* Check whether a WikiPage object can be get with getWikiPage().
* Callers should expect that an exception is thrown from getWikiPage()
* if this method returns false.
@@ -171,9 +201,8 @@ class RequestContext implements IContextSource {
* @param WikiPage $p
*/
public function setWikiPage( WikiPage $p ) {
- $contextTitle = $this->getTitle();
$pageTitle = $p->getTitle();
- if ( !$contextTitle || !$pageTitle->equals( $contextTitle ) ) {
+ if ( !$this->hasTitle() || !$pageTitle->equals( $this->getTitle() ) ) {
$this->setTitle( $pageTitle );
}
// Defer this to the end since setTitle sets it to null.
@@ -287,8 +316,8 @@ class RequestContext implements IContextSource {
/**
* Get the Language object.
* Initialization of user or request objects can depend on this.
- *
* @return Language
+ * @throws Exception
* @since 1.19
*/
public function getLanguage() {
@@ -308,10 +337,13 @@ class RequestContext implements IContextSource {
$request = $this->getRequest();
$user = $this->getUser();
- $code = $request->getVal( 'uselang', $user->getOption( 'language' ) );
+ $code = $request->getVal( 'uselang', 'user' );
+ if ( $code === 'user' ) {
+ $code = $user->getOption( 'language' );
+ }
$code = self::sanitizeLangCode( $code );
- wfRunHooks( 'UserGetLanguageObject', array( $user, &$code, $this ) );
+ Hooks::run( 'UserGetLanguageObject', array( $user, &$code, $this ) );
if ( $code === $this->getConfig()->get( 'LanguageCode' ) ) {
$this->lang = $wgContLang;
@@ -348,10 +380,9 @@ class RequestContext implements IContextSource {
*/
public function getSkin() {
if ( $this->skin === null ) {
- wfProfileIn( __METHOD__ . '-createskin' );
$skin = null;
- wfRunHooks( 'RequestContextCreateSkin', array( $this, &$skin ) );
+ Hooks::run( 'RequestContextCreateSkin', array( $this, &$skin ) );
$factory = SkinFactory::getDefaultInstance();
// If the hook worked try to set a skin from it
@@ -386,7 +417,6 @@ class RequestContext implements IContextSource {
// After all that set a context on whatever skin got created
$this->skin->setContext( $this );
- wfProfileOut( __METHOD__ . '-createskin' );
}
return $this->skin;
@@ -463,10 +493,14 @@ class RequestContext implements IContextSource {
}
/**
- * Import the resolved user IP, HTTP headers, user ID, and session ID.
+ * Import an client IP address, HTTP headers, user ID, and session ID
+ *
* This sets the current session and sets $wgUser and $wgRequest.
* Once the return value falls out of scope, the old context is restored.
- * This function can only be called within CLI mode scripts.
+ * This method should only be called in contexts (CLI or HTTP job runners)
+ * where there is no session ID or end user receiving the response. This
+ * is partly enforced, and is done so to avoid leaking cookies if certain
+ * error conditions arise.
*
* This will setup the session from the given ID. This is useful when
* background scripts inherit context when acting on behalf of a user.
@@ -479,11 +513,12 @@ class RequestContext implements IContextSource {
* @since 1.21
*/
public static function importScopedSession( array $params ) {
- if ( PHP_SAPI !== 'cli' ) {
- // Don't send random private cookies or turn $wgRequest into FauxRequest
- throw new MWException( "Sessions can only be imported in cli mode." );
- } elseif ( !strlen( $params['sessionId'] ) ) {
- throw new MWException( "No session ID was specified." );
+ if ( session_id() != '' && strlen( $params['sessionId'] ) ) {
+ // Sanity check to avoid sending random cookies for the wrong users.
+ // This method should only called by CLI scripts or by HTTP job runners.
+ throw new MWException( "Sessions can only be imported when none is active." );
+ } elseif ( !IP::isValid( $params['ip'] ) ) {
+ throw new MWException( "Invalid client IP address '{$params['ip']}'." );
}
if ( $params['userId'] ) { // logged-in user
@@ -492,13 +527,11 @@ class RequestContext implements IContextSource {
if ( !$user->getId() ) {
throw new MWException( "No user with ID '{$params['userId']}'." );
}
- } elseif ( !IP::isValid( $params['ip'] ) ) {
- throw new MWException( "Could not load user '{$params['ip']}'." );
} else { // anon user
$user = User::newFromName( $params['ip'], false );
}
- $importSessionFunction = function ( User $user, array $params ) {
+ $importSessionFunc = function ( User $user, array $params ) {
global $wgRequest, $wgUser;
$context = RequestContext::getMain();
@@ -531,12 +564,19 @@ class RequestContext implements IContextSource {
// Stash the old session and load in the new one
$oUser = self::getMain()->getUser();
$oParams = self::getMain()->exportSession();
- $importSessionFunction( $user, $params );
+ $oRequest = self::getMain()->getRequest();
+ $importSessionFunc( $user, $params );
// Set callback to save and close the new session and reload the old one
- return new ScopedCallback( function () use ( $importSessionFunction, $oUser, $oParams ) {
- $importSessionFunction( $oUser, $oParams );
- } );
+ return new ScopedCallback(
+ function () use ( $importSessionFunc, $oUser, $oParams, $oRequest ) {
+ global $wgRequest;
+ $importSessionFunc( $oUser, $oParams );
+ // Restore the exact previous Request object (instead of leaving FauxRequest)
+ RequestContext::getMain()->setRequest( $oRequest );
+ $wgRequest = RequestContext::getMain()->getRequest(); // b/c
+ }
+ );
}
/**
diff --git a/includes/db/Database.php b/includes/db/Database.php
index 9b783a99..0c0248da 100644
--- a/includes/db/Database.php
+++ b/includes/db/Database.php
@@ -26,186 +26,6 @@
*/
/**
- * Base interface for all DBMS-specific code. At a bare minimum, all of the
- * following must be implemented to support MediaWiki
- *
- * @file
- * @ingroup Database
- */
-interface DatabaseType {
- /**
- * Get the type of the DBMS, as it appears in $wgDBtype.
- *
- * @return string
- */
- function getType();
-
- /**
- * Open a connection to the database. Usually aborts on failure
- *
- * @param string $server Database server host
- * @param string $user Database user name
- * @param string $password Database user password
- * @param string $dbName Database name
- * @return bool
- * @throws DBConnectionError
- */
- function open( $server, $user, $password, $dbName );
-
- /**
- * Fetch the next row from the given result object, in object form.
- * Fields can be retrieved with $row->fieldname, with fields acting like
- * member variables.
- * If no more rows are available, false is returned.
- *
- * @param ResultWrapper|stdClass $res Object as returned from DatabaseBase::query(), etc.
- * @return stdClass|bool
- * @throws DBUnexpectedError Thrown if the database returns an error
- */
- function fetchObject( $res );
-
- /**
- * Fetch the next row from the given result object, in associative array
- * form. Fields are retrieved with $row['fieldname'].
- * If no more rows are available, false is returned.
- *
- * @param ResultWrapper $res Result object as returned from DatabaseBase::query(), etc.
- * @return array|bool
- * @throws DBUnexpectedError Thrown if the database returns an error
- */
- function fetchRow( $res );
-
- /**
- * Get the number of rows in a result object
- *
- * @param mixed $res A SQL result
- * @return int
- */
- function numRows( $res );
-
- /**
- * Get the number of fields in a result object
- * @see http://www.php.net/mysql_num_fields
- *
- * @param mixed $res A SQL result
- * @return int
- */
- function numFields( $res );
-
- /**
- * Get a field name in a result object
- * @see http://www.php.net/mysql_field_name
- *
- * @param mixed $res A SQL result
- * @param int $n
- * @return string
- */
- function fieldName( $res, $n );
-
- /**
- * Get the inserted value of an auto-increment row
- *
- * The value inserted should be fetched from nextSequenceValue()
- *
- * Example:
- * $id = $dbw->nextSequenceValue( 'page_page_id_seq' );
- * $dbw->insert( 'page', array( 'page_id' => $id ) );
- * $id = $dbw->insertId();
- *
- * @return int
- */
- function insertId();
-
- /**
- * Change the position of the cursor in a result object
- * @see http://www.php.net/mysql_data_seek
- *
- * @param mixed $res A SQL result
- * @param int $row
- */
- function dataSeek( $res, $row );
-
- /**
- * Get the last error number
- * @see http://www.php.net/mysql_errno
- *
- * @return int
- */
- function lastErrno();
-
- /**
- * Get a description of the last error
- * @see http://www.php.net/mysql_error
- *
- * @return string
- */
- function lastError();
-
- /**
- * mysql_fetch_field() wrapper
- * Returns false if the field doesn't exist
- *
- * @param string $table Table name
- * @param string $field Field name
- *
- * @return Field
- */
- function fieldInfo( $table, $field );
-
- /**
- * Get information about an index into an object
- * @param string $table Table name
- * @param string $index Index name
- * @param string $fname Calling function name
- * @return mixed Database-specific index description class or false if the index does not exist
- */
- function indexInfo( $table, $index, $fname = __METHOD__ );
-
- /**
- * Get the number of rows affected by the last write query
- * @see http://www.php.net/mysql_affected_rows
- *
- * @return int
- */
- function affectedRows();
-
- /**
- * Wrapper for addslashes()
- *
- * @param string $s String to be slashed.
- * @return string Slashed string.
- */
- function strencode( $s );
-
- /**
- * Returns a wikitext link to the DB's website, e.g.,
- * return "[http://www.mysql.com/ MySQL]";
- * Should at least contain plain text, if for some reason
- * your database has no website.
- *
- * @return string Wikitext of a link to the server software's web site
- */
- function getSoftwareLink();
-
- /**
- * A string describing the current software version, like from
- * mysql_get_server_info().
- *
- * @return string Version information from the database server.
- */
- function getServerVersion();
-
- /**
- * A string describing the current software version, and possibly
- * other details in a user-friendly way. Will be listed on Special:Version, etc.
- * Use getServerVersion() to get machine-friendly information.
- *
- * @return string Version information from the database server
- */
- function getServerInfo();
-}
-
-/**
* Interface for classes that implement or wrap DatabaseBase
* @ingroup Database
*/
@@ -216,7 +36,7 @@ interface IDatabase {
* Database abstraction object
* @ingroup Database
*/
-abstract class DatabaseBase implements IDatabase, DatabaseType {
+abstract class DatabaseBase implements IDatabase {
/** Number of times to re-try an operation in case of deadlock */
const DEADLOCK_TRIES = 4;
@@ -226,10 +46,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
/** Maximum time to wait before retry */
const DEADLOCK_DELAY_MAX = 1500000;
-# ------------------------------------------------------------------------------
-# Variables
-# ------------------------------------------------------------------------------
-
protected $mLastQuery = '';
protected $mDoneWrites = false;
protected $mPHPError = false;
@@ -272,10 +88,21 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
* Either a short hexidecimal string if a transaction is active or ""
*
* @var string
+ * @see DatabaseBase::mTrxLevel
*/
protected $mTrxShortId = '';
/**
+ * The UNIX time that the transaction started. Callers can assume that if
+ * snapshot isolation is used, then the data is *at least* up to date to that
+ * point (possibly more up-to-date since the first SELECT defines the snapshot).
+ *
+ * @var float|null
+ * @see DatabaseBase::mTrxLevel
+ */
+ private $mTrxTimestamp = null;
+
+ /**
* Remembers the function name given for starting the most recent transaction via begin().
* Used to provide additional context for error reporting.
*
@@ -326,10 +153,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
*/
protected $allViews = null;
-# ------------------------------------------------------------------------------
-# Accessors
-# ------------------------------------------------------------------------------
- # These optionally set a variable and return the previous state
+ /** @var TransactionProfiler */
+ protected $trxProfiler;
/**
* A string describing the current software version, and possibly
@@ -420,6 +245,19 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
/**
+ * Get the UNIX timestamp of the time that the transaction was established
+ *
+ * This can be used to reason about the staleness of SELECT data
+ * in REPEATABLE-READ transaction isolation level.
+ *
+ * @return float|null Returns null if there is not active transaction
+ * @since 1.25
+ */
+ public function trxTimestamp() {
+ return $this->mTrxLevel ? $this->mTrxTimestamp : null;
+ }
+
+ /**
* Get/set the number of errors logged. Only useful when errors are ignored
* @param int $count The count to set, or omitted to leave it unchanged.
* @return int The error count
@@ -511,6 +349,15 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
/**
+ * @return TransactionProfiler
+ */
+ protected function getTransactionProfiler() {
+ return $this->trxProfiler
+ ? $this->trxProfiler
+ : Profiler::instance()->getTransactionProfiler();
+ }
+
+ /**
* Returns true if this database supports (and uses) cascading deletes
*
* @return bool
@@ -744,9 +591,167 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
return $this->getSqlFilePath( 'update-keys.sql' );
}
-# ------------------------------------------------------------------------------
-# Other functions
-# ------------------------------------------------------------------------------
+ /**
+ * Get the type of the DBMS, as it appears in $wgDBtype.
+ *
+ * @return string
+ */
+ abstract function getType();
+
+ /**
+ * Open a connection to the database. Usually aborts on failure
+ *
+ * @param string $server Database server host
+ * @param string $user Database user name
+ * @param string $password Database user password
+ * @param string $dbName Database name
+ * @return bool
+ * @throws DBConnectionError
+ */
+ abstract function open( $server, $user, $password, $dbName );
+
+ /**
+ * Fetch the next row from the given result object, in object form.
+ * Fields can be retrieved with $row->fieldname, with fields acting like
+ * member variables.
+ * If no more rows are available, false is returned.
+ *
+ * @param ResultWrapper|stdClass $res Object as returned from DatabaseBase::query(), etc.
+ * @return stdClass|bool
+ * @throws DBUnexpectedError Thrown if the database returns an error
+ */
+ abstract function fetchObject( $res );
+
+ /**
+ * Fetch the next row from the given result object, in associative array
+ * form. Fields are retrieved with $row['fieldname'].
+ * If no more rows are available, false is returned.
+ *
+ * @param ResultWrapper $res Result object as returned from DatabaseBase::query(), etc.
+ * @return array|bool
+ * @throws DBUnexpectedError Thrown if the database returns an error
+ */
+ abstract function fetchRow( $res );
+
+ /**
+ * Get the number of rows in a result object
+ *
+ * @param mixed $res A SQL result
+ * @return int
+ */
+ abstract function numRows( $res );
+
+ /**
+ * Get the number of fields in a result object
+ * @see http://www.php.net/mysql_num_fields
+ *
+ * @param mixed $res A SQL result
+ * @return int
+ */
+ abstract function numFields( $res );
+
+ /**
+ * Get a field name in a result object
+ * @see http://www.php.net/mysql_field_name
+ *
+ * @param mixed $res A SQL result
+ * @param int $n
+ * @return string
+ */
+ abstract function fieldName( $res, $n );
+
+ /**
+ * Get the inserted value of an auto-increment row
+ *
+ * The value inserted should be fetched from nextSequenceValue()
+ *
+ * Example:
+ * $id = $dbw->nextSequenceValue( 'page_page_id_seq' );
+ * $dbw->insert( 'page', array( 'page_id' => $id ) );
+ * $id = $dbw->insertId();
+ *
+ * @return int
+ */
+ abstract function insertId();
+
+ /**
+ * Change the position of the cursor in a result object
+ * @see http://www.php.net/mysql_data_seek
+ *
+ * @param mixed $res A SQL result
+ * @param int $row
+ */
+ abstract function dataSeek( $res, $row );
+
+ /**
+ * Get the last error number
+ * @see http://www.php.net/mysql_errno
+ *
+ * @return int
+ */
+ abstract function lastErrno();
+
+ /**
+ * Get a description of the last error
+ * @see http://www.php.net/mysql_error
+ *
+ * @return string
+ */
+ abstract function lastError();
+
+ /**
+ * mysql_fetch_field() wrapper
+ * Returns false if the field doesn't exist
+ *
+ * @param string $table Table name
+ * @param string $field Field name
+ *
+ * @return Field
+ */
+ abstract function fieldInfo( $table, $field );
+
+ /**
+ * Get information about an index into an object
+ * @param string $table Table name
+ * @param string $index Index name
+ * @param string $fname Calling function name
+ * @return mixed Database-specific index description class or false if the index does not exist
+ */
+ abstract function indexInfo( $table, $index, $fname = __METHOD__ );
+
+ /**
+ * Get the number of rows affected by the last write query
+ * @see http://www.php.net/mysql_affected_rows
+ *
+ * @return int
+ */
+ abstract function affectedRows();
+
+ /**
+ * Wrapper for addslashes()
+ *
+ * @param string $s String to be slashed.
+ * @return string Slashed string.
+ */
+ abstract function strencode( $s );
+
+ /**
+ * Returns a wikitext link to the DB's website, e.g.,
+ * return "[http://www.mysql.com/ MySQL]";
+ * Should at least contain plain text, if for some reason
+ * your database has no website.
+ *
+ * @return string Wikitext of a link to the server software's web site
+ */
+ abstract function getSoftwareLink();
+
+ /**
+ * A string describing the current software version, like from
+ * mysql_get_server_info().
+ *
+ * @return string Version information from the database server.
+ */
+ abstract function getServerVersion();
/**
* Constructor.
@@ -760,32 +765,19 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
*
* @param array $params Parameters passed from DatabaseBase::factory()
*/
- function __construct( $params = null ) {
+ function __construct( array $params ) {
global $wgDBprefix, $wgDBmwschema, $wgCommandLineMode, $wgDebugDBTransactions;
$this->mTrxAtomicLevels = new SplStack;
- if ( is_array( $params ) ) { // MW 1.22
- $server = $params['host'];
- $user = $params['user'];
- $password = $params['password'];
- $dbName = $params['dbname'];
- $flags = $params['flags'];
- $tablePrefix = $params['tablePrefix'];
- $schema = $params['schema'];
- $foreign = $params['foreign'];
- } else { // legacy calling pattern
- wfDeprecated( __METHOD__ . " method called without parameter array.", "1.23" );
- $args = func_get_args();
- $server = isset( $args[0] ) ? $args[0] : false;
- $user = isset( $args[1] ) ? $args[1] : false;
- $password = isset( $args[2] ) ? $args[2] : false;
- $dbName = isset( $args[3] ) ? $args[3] : false;
- $flags = isset( $args[4] ) ? $args[4] : 0;
- $tablePrefix = isset( $args[5] ) ? $args[5] : 'get from global';
- $schema = 'get from global';
- $foreign = isset( $args[6] ) ? $args[6] : false;
- }
+ $server = $params['host'];
+ $user = $params['user'];
+ $password = $params['password'];
+ $dbName = $params['dbname'];
+ $flags = $params['flags'];
+ $tablePrefix = $params['tablePrefix'];
+ $schema = $params['schema'];
+ $foreign = $params['foreign'];
$this->mFlags = $flags;
if ( $this->mFlags & DBO_DEFAULT ) {
@@ -818,6 +810,10 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
$this->mForeign = $foreign;
+ if ( isset( $params['trxProfiler'] ) ) {
+ $this->trxProfiler = $params['trxProfiler']; // override
+ }
+
if ( $user ) {
$this->open( $server, $user, $password, $dbName );
}
@@ -905,18 +901,17 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
$class = 'Database' . ucfirst( $driver );
if ( class_exists( $class ) && is_subclass_of( $class, 'DatabaseBase' ) ) {
- $params = array(
- 'host' => isset( $p['host'] ) ? $p['host'] : false,
- 'user' => isset( $p['user'] ) ? $p['user'] : false,
- 'password' => isset( $p['password'] ) ? $p['password'] : false,
- 'dbname' => isset( $p['dbname'] ) ? $p['dbname'] : false,
- 'flags' => isset( $p['flags'] ) ? $p['flags'] : 0,
- 'tablePrefix' => isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global',
- 'schema' => isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType],
- 'foreign' => isset( $p['foreign'] ) ? $p['foreign'] : false
- );
-
- return new $class( $params );
+ // Resolve some defaults for b/c
+ $p['host'] = isset( $p['host'] ) ? $p['host'] : false;
+ $p['user'] = isset( $p['user'] ) ? $p['user'] : false;
+ $p['password'] = isset( $p['password'] ) ? $p['password'] : false;
+ $p['dbname'] = isset( $p['dbname'] ) ? $p['dbname'] : false;
+ $p['flags'] = isset( $p['flags'] ) ? $p['flags'] : 0;
+ $p['tablePrefix'] = isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global';
+ $p['schema'] = isset( $p['schema'] ) ? $p['schema'] : $defaultSchemas[$dbType];
+ $p['foreign'] = isset( $p['foreign'] ) ? $p['foreign'] : false;
+
+ return new $class( $p );
} else {
return null;
}
@@ -955,6 +950,23 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
/**
+ * Create a log context to pass to wfLogDBError or other logging functions.
+ *
+ * @param array $extras Additional data to add to context
+ * @return array
+ */
+ protected function getLogContext( array $extras = array() ) {
+ return array_merge(
+ array(
+ 'db_server' => $this->mServer,
+ 'db_name' => $this->mDBname,
+ 'db_user' => $this->mUser,
+ ),
+ $extras
+ );
+ }
+
+ /**
* Closes a database connection.
* if it is open : commits any open transactions
*
@@ -1027,6 +1039,20 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
/**
+ * Determine whether a SQL statement is sensitive to isolation level.
+ * A SQL statement is considered transactable if its result could vary
+ * depending on the transaction isolation level. Operational commands
+ * such as 'SET' and 'SHOW' are not considered to be transactable.
+ *
+ * @param string $sql
+ * @return bool
+ */
+ public function isTransactableQuery( $sql ) {
+ $verb = substr( $sql, 0, strcspn( $sql, " \t\r\n" ) );
+ return !in_array( $verb, array( 'BEGIN', 'COMMIT', 'ROLLBACK', 'SHOW', 'SET' ) );
+ }
+
+ /**
* Run an SQL query and return the result. Normally throws a DBQueryError
* on failure. If errors are ignored, returns false instead.
*
@@ -1052,9 +1078,14 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
global $wgUser, $wgDebugDBTransactions, $wgDebugDumpSqlLength;
$this->mLastQuery = $sql;
- if ( $this->isWriteQuery( $sql ) ) {
+
+ $isWriteQuery = $this->isWriteQuery( $sql );
+ if ( $isWriteQuery ) {
+ if ( !$this->mDoneWrites ) {
+ wfDebug( __METHOD__ . ': Writes done: ' .
+ DatabaseBase::generalizeSQL( $sql ) . "\n" );
+ }
# Set a flag indicating that writes have been done
- wfDebug( __METHOD__ . ': Writes done: ' . DatabaseBase::generalizeSQL( $sql ) . "\n" );
$this->mDoneWrites = microtime( true );
}
@@ -1073,50 +1104,38 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
// Or, for one-word queries (like "BEGIN" or COMMIT") add it to the end (bug 42598)
$commentedSql = preg_replace( '/\s|$/', " /* $fname $userName */ ", $sql, 1 );
- # If DBO_TRX is set, start a transaction
- if ( ( $this->mFlags & DBO_TRX ) && !$this->mTrxLevel &&
- $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK'
- ) {
- # Avoid establishing transactions for SHOW and SET statements too -
- # that would delay transaction initializations to once connection
- # is really used by application
- $sqlstart = substr( $sql, 0, 10 ); // very much worth it, benchmark certified(tm)
- if ( strpos( $sqlstart, "SHOW " ) !== 0 && strpos( $sqlstart, "SET " ) !== 0 ) {
- if ( $wgDebugDBTransactions ) {
- wfDebug( "Implicit transaction start.\n" );
- }
- $this->begin( __METHOD__ . " ($fname)" );
- $this->mTrxAutomatic = true;
+ if ( !$this->mTrxLevel && $this->getFlag( DBO_TRX ) && $this->isTransactableQuery( $sql ) ) {
+ if ( $wgDebugDBTransactions ) {
+ wfDebug( "Implicit transaction start.\n" );
}
+ $this->begin( __METHOD__ . " ($fname)" );
+ $this->mTrxAutomatic = true;
}
# Keep track of whether the transaction has write queries pending
- if ( $this->mTrxLevel && !$this->mTrxDoneWrites && $this->isWriteQuery( $sql ) ) {
+ if ( $this->mTrxLevel && !$this->mTrxDoneWrites && $isWriteQuery ) {
$this->mTrxDoneWrites = true;
- Profiler::instance()->transactionWritingIn(
+ $this->getTransactionProfiler()->transactionWritingIn(
$this->mServer, $this->mDBname, $this->mTrxShortId );
}
- $queryProf = '';
- $totalProf = '';
$isMaster = !is_null( $this->getLBInfo( 'master' ) );
+ # generalizeSQL will probably cut down the query to reasonable
+ # logging size most of the time. The substr is really just a sanity check.
+ if ( $isMaster ) {
+ $queryProf = 'query-m: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
+ $totalProf = 'DatabaseBase::query-master';
+ } else {
+ $queryProf = 'query: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
+ $totalProf = 'DatabaseBase::query';
+ }
+ # Include query transaction state
+ $queryProf .= $this->mTrxShortId ? " [TRX#{$this->mTrxShortId}]" : "";
- if ( !Profiler::instance()->isStub() ) {
- # generalizeSQL will probably cut down the query to reasonable
- # logging size most of the time. The substr is really just a sanity check.
- if ( $isMaster ) {
- $queryProf = 'query-m: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
- $totalProf = 'DatabaseBase::query-master';
- } else {
- $queryProf = 'query: ' . substr( DatabaseBase::generalizeSQL( $sql ), 0, 255 );
- $totalProf = 'DatabaseBase::query';
- }
- # Include query transaction state
- $queryProf .= $this->mTrxShortId ? " [TRX#{$this->mTrxShortId}]" : "";
-
- $trx = $this->mTrxLevel ? 'TRX=yes' : 'TRX=no';
- wfProfileIn( $totalProf );
- wfProfileIn( $queryProf );
+ $profiler = Profiler::instance();
+ if ( !$profiler instanceof ProfilerStub ) {
+ $totalProfSection = $profiler->scopedProfileIn( $totalProf );
+ $queryProfSection = $profiler->scopedProfileIn( $queryProf );
}
if ( $this->debug() ) {
@@ -1139,7 +1158,11 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
# Do the query and handle errors
+ $startTime = microtime( true );
$ret = $this->doQuery( $commentedSql );
+ # Log the query time and feed it into the DB trx profiler
+ $this->getTransactionProfiler()->recordQueryCompletion(
+ $queryProf, $startTime, $isWriteQuery, $this->affectedRows() );
MWDebug::queryTime( $queryId );
@@ -1155,23 +1178,22 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
$lastError = $this->lastError();
$lastErrno = $this->lastErrno();
if ( $this->ping() ) {
- global $wgRequestTime;
wfDebug( "Reconnected\n" );
- $sqlx = $wgDebugDumpSqlLength ? substr( $commentedSql, 0, $wgDebugDumpSqlLength )
- : $commentedSql;
- $sqlx = strtr( $sqlx, "\t\n", ' ' );
- $elapsed = round( microtime( true ) - $wgRequestTime, 3 );
- if ( $elapsed < 300 ) {
- # Not a database error to lose a transaction after a minute or two
- wfLogDBError( "Connection lost and reconnected after {$elapsed}s, query: $sqlx" );
- }
+ $server = $this->getServer();
+ $msg = __METHOD__ . ": lost connection to $server; reconnected";
+ wfDebugLog( 'DBPerformance', "$msg:\n" . wfBacktrace( true ) );
+
if ( $hadTrx ) {
# Leave $ret as false and let an error be reported.
# Callers may catch the exception and continue to use the DB.
$this->reportQueryError( $lastError, $lastErrno, $sql, $fname, $tempIgnore );
} else {
# Should be safe to silently retry (no trx and thus no callbacks)
+ $startTime = microtime( true );
$ret = $this->doQuery( $commentedSql );
+ # Log the query time and feed it into the DB trx profiler
+ $this->getTransactionProfiler()->recordQueryCompletion(
+ $queryProf, $startTime, $isWriteQuery, $this->affectedRows() );
}
} else {
wfDebug( "Failed\n" );
@@ -1179,15 +1201,17 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
if ( false === $ret ) {
- $this->reportQueryError( $this->lastError(), $this->lastErrno(), $sql, $fname, $tempIgnore );
+ $this->reportQueryError(
+ $this->lastError(), $this->lastErrno(), $sql, $fname, $tempIgnore );
}
- if ( !Profiler::instance()->isStub() ) {
- wfProfileOut( $queryProf );
- wfProfileOut( $totalProf );
- }
+ $res = $this->resultObject( $ret );
+
+ // Destroy profile sections in the opposite order to their creation
+ $queryProfSection = false;
+ $totalProfSection = false;
- return $this->resultObject( $ret );
+ return $res;
}
/**
@@ -1202,16 +1226,22 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
* @throws DBQueryError
*/
public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
- # Ignore errors during error handling to avoid infinite recursion
- $ignore = $this->ignoreErrors( true );
++$this->mErrorCount;
- if ( $ignore || $tempIgnore ) {
+ if ( $this->ignoreErrors() || $tempIgnore ) {
wfDebug( "SQL ERROR (ignored): $error\n" );
- $this->ignoreErrors( $ignore );
} else {
$sql1line = mb_substr( str_replace( "\n", "\\n", $sql ), 0, 5 * 1024 );
- wfLogDBError( "$fname\t{$this->mServer}\t$errno\t$error\t$sql1line" );
+ wfLogDBError(
+ "{fname}\t{db_server}\t{errno}\t{error}\t{sql1line}",
+ $this->getLogContext( array(
+ 'method' => __METHOD__,
+ 'errno' => $errno,
+ 'error' => $error,
+ 'sql1line' => $sql1line,
+ 'fname' => $fname,
+ ) )
+ );
wfDebug( "SQL ERROR: " . $error . "\n" );
throw new DBQueryError( $this, $error, $errno, $sql, $fname );
}
@@ -1348,9 +1378,13 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
*
* @return bool|mixed The value from the field, or false on failure.
*/
- public function selectField( $table, $var, $cond = '', $fname = __METHOD__,
- $options = array()
+ public function selectField(
+ $table, $var, $cond = '', $fname = __METHOD__, $options = array()
) {
+ if ( $var === '*' ) { // sanity
+ throw new DBUnexpectedError( $this, "Cannot use a * field: got '$var'" );
+ }
+
if ( !is_array( $options ) ) {
$options = array( $options );
}
@@ -1358,7 +1392,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
$options['LIMIT'] = 1;
$res = $this->select( $table, $var, $cond, $fname, $options );
-
if ( $res === false || !$this->numRows( $res ) ) {
return false;
}
@@ -1373,6 +1406,48 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
/**
+ * A SELECT wrapper which returns a list of single field values from result rows.
+ *
+ * Usually throws a DBQueryError on failure. If errors are explicitly
+ * ignored, returns false on failure.
+ *
+ * If no result rows are returned from the query, false is returned.
+ *
+ * @param string|array $table Table name. See DatabaseBase::select() for details.
+ * @param string $var The field name to select. This must be a valid SQL
+ * fragment: do not use unvalidated user input.
+ * @param string|array $cond The condition array. See DatabaseBase::select() for details.
+ * @param string $fname The function name of the caller.
+ * @param string|array $options The query options. See DatabaseBase::select() for details.
+ *
+ * @return bool|array The values from the field, or false on failure
+ * @since 1.25
+ */
+ public function selectFieldValues(
+ $table, $var, $cond = '', $fname = __METHOD__, $options = array()
+ ) {
+ if ( $var === '*' ) { // sanity
+ throw new DBUnexpectedError( $this, "Cannot use a * field: got '$var'" );
+ }
+
+ if ( !is_array( $options ) ) {
+ $options = array( $options );
+ }
+
+ $res = $this->select( $table, $var, $cond, $fname, $options );
+ if ( $res === false ) {
+ return false;
+ }
+
+ $values = array();
+ foreach ( $res as $row ) {
+ $values[] = $row->$var;
+ }
+
+ return $values;
+ }
+
+ /**
* Returns an optional USE INDEX clause to go after the table, and a
* string to go at the end of the query.
*
@@ -1558,9 +1633,10 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
* - If the value of such an array element is a scalar (such as a
* string), it will be treated as data and thus quoted appropriately.
* If it is null, an IS NULL clause will be added.
- * - If the value is an array, an IN(...) clause will be constructed,
- * such that the field name may match any of the elements in the
- * array. The elements of the array will be quoted.
+ * - If the value is an array, an IN (...) clause will be constructed
+ * from its non-null elements, and an IS NULL clause will be added
+ * if null is present, such that the field may match any of the
+ * elements in the array. The non-null elements will be quoted.
*
* Note that expressions are often DBMS-dependent in their syntax.
* DBMS-independent wrappers are provided for constructing several types of
@@ -1779,7 +1855,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
if ( $res ) {
$row = $this->fetchRow( $res );
- $rows = ( isset( $row['rowcount'] ) ) ? $row['rowcount'] : 0;
+ $rows = ( isset( $row['rowcount'] ) ) ? (int)$row['rowcount'] : 0;
}
return $rows;
@@ -1809,7 +1885,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
if ( $res ) {
$row = $this->fetchRow( $res );
- $rows = ( isset( $row['rowcount'] ) ) ? $row['rowcount'] : 0;
+ $rows = ( isset( $row['rowcount'] ) ) ? (int)$row['rowcount'] : 0;
}
return $rows;
@@ -2117,16 +2193,36 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
} elseif ( ( $mode == LIST_SET ) && is_numeric( $field ) ) {
$list .= "$value";
} elseif ( ( $mode == LIST_AND || $mode == LIST_OR ) && is_array( $value ) ) {
- if ( count( $value ) == 0 ) {
+ // Remove null from array to be handled separately if found
+ $includeNull = false;
+ foreach ( array_keys( $value, null, true ) as $nullKey ) {
+ $includeNull = true;
+ unset( $value[$nullKey] );
+ }
+ if ( count( $value ) == 0 && !$includeNull ) {
throw new MWException( __METHOD__ . ": empty input for field $field" );
- } elseif ( count( $value ) == 1 ) {
- // Special-case single values, as IN isn't terribly efficient
- // Don't necessarily assume the single key is 0; we don't
- // enforce linear numeric ordering on other arrays here.
- $value = array_values( $value );
- $list .= $field . " = " . $this->addQuotes( $value[0] );
+ } elseif ( count( $value ) == 0 ) {
+ // only check if $field is null
+ $list .= "$field IS NULL";
} else {
- $list .= $field . " IN (" . $this->makeList( $value ) . ") ";
+ // IN clause contains at least one valid element
+ if ( $includeNull ) {
+ // Group subconditions to ensure correct precedence
+ $list .= '(';
+ }
+ if ( count( $value ) == 1 ) {
+ // Special-case single values, as IN isn't terribly efficient
+ // Don't necessarily assume the single key is 0; we don't
+ // enforce linear numeric ordering on other arrays here.
+ $value = array_values( $value );
+ $list .= $field . " = " . $this->addQuotes( $value[0] );
+ } else {
+ $list .= $field . " IN (" . $this->makeList( $value ) . ") ";
+ }
+ // if null present in array, append IS NULL
+ if ( $includeNull ) {
+ $list .= " OR $field IS NULL)";
+ }
}
} elseif ( $value === null ) {
if ( $mode == LIST_AND || $mode == LIST_OR ) {
@@ -2322,7 +2418,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
# Split database and table into proper variables.
# We reverse the explode so that database.table and table both output
# the correct table.
- $dbDetails = explode( '.', $name, 2 );
+ $dbDetails = explode( '.', $name, 3 );
if ( count( $dbDetails ) == 3 ) {
list( $database, $schema, $table ) = $dbDetails;
# We don't want any prefix added in this case
@@ -2552,12 +2648,16 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
/**
- * Get the name of an index in a given table
+ * Get the name of an index in a given table.
*
+ * @protected Don't use outside of DatabaseBase and childs
* @param string $index
* @return string
*/
- protected function indexName( $index ) {
+ public function indexName( $index ) {
+ // @FIXME: Make this protected once we move away from PHP 5.3
+ // Needs to be public because of usage in closure (in DatabaseBase::replaceVars)
+
// Backwards-compatibility hack
$renamed = array(
'ar_usertext_timestamp' => 'usertext_timestamp',
@@ -2575,10 +2675,13 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
/**
* Adds quotes and backslashes.
*
- * @param string $s
+ * @param string|Blob $s
* @return string
*/
public function addQuotes( $s ) {
+ if ( $s instanceof Blob ) {
+ $s = $s->fetch();
+ }
if ( $s === null ) {
return 'NULL';
} else {
@@ -3218,41 +3321,40 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
* @return bool
*/
public function deadlockLoop() {
- $this->begin( __METHOD__ );
$args = func_get_args();
$function = array_shift( $args );
- $oldIgnore = $this->ignoreErrors( true );
$tries = self::DEADLOCK_TRIES;
-
if ( is_array( $function ) ) {
$fname = $function[0];
} else {
$fname = $function;
}
- do {
- $retVal = call_user_func_array( $function, $args );
- $error = $this->lastError();
- $errno = $this->lastErrno();
- $sql = $this->lastQuery();
+ $this->begin( __METHOD__ );
- if ( $errno ) {
+ $e = null;
+ do {
+ try {
+ $retVal = call_user_func_array( $function, $args );
+ break;
+ } catch ( DBQueryError $e ) {
+ $error = $this->lastError();
+ $errno = $this->lastErrno();
+ $sql = $this->lastQuery();
if ( $this->wasDeadlock() ) {
- # Retry
+ // Retry after a randomized delay
usleep( mt_rand( self::DEADLOCK_DELAY_MIN, self::DEADLOCK_DELAY_MAX ) );
} else {
- $this->reportQueryError( $error, $errno, $sql, $fname );
+ // Throw the error back up
+ throw $e;
}
}
- } while ( $this->wasDeadlock() && --$tries > 0 );
-
- $this->ignoreErrors( $oldIgnore );
+ } while ( --$tries > 0 );
if ( $tries <= 0 ) {
+ // Too many deadlocks; give up
$this->rollback( __METHOD__ );
- $this->reportQueryError( $error, $errno, $sql, $fname );
-
- return false;
+ throw $e;
} else {
$this->commit( __METHOD__ );
@@ -3486,7 +3588,12 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
$msg = "$fname: Transaction already in progress (from {$this->mTrxFname}), " .
" performing implicit commit!";
wfWarn( $msg );
- wfLogDBError( $msg );
+ wfLogDBError( $msg,
+ $this->getLogContext( array(
+ 'method' => __METHOD__,
+ 'fname' => $fname,
+ ) )
+ );
} else {
// if the transaction was automatic and has done write operations,
// log it if $wgDebugDBTransactions is enabled.
@@ -3500,7 +3607,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
$this->runOnTransactionPreCommitCallbacks();
$this->doCommit( $fname );
if ( $this->mTrxDoneWrites ) {
- Profiler::instance()->transactionWritingOut(
+ $this->mDoneWrites = microtime( true );
+ $this->getTransactionProfiler()->transactionWritingOut(
$this->mServer, $this->mDBname, $this->mTrxShortId );
}
$this->runOnTransactionIdleCallbacks();
@@ -3512,6 +3620,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
$this->doBegin( $fname );
+ $this->mTrxTimestamp = microtime( true );
$this->mTrxFname = $fname;
$this->mTrxDoneWrites = false;
$this->mTrxAutomatic = false;
@@ -3579,7 +3688,8 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
$this->runOnTransactionPreCommitCallbacks();
$this->doCommit( $fname );
if ( $this->mTrxDoneWrites ) {
- Profiler::instance()->transactionWritingOut(
+ $this->mDoneWrites = microtime( true );
+ $this->getTransactionProfiler()->transactionWritingOut(
$this->mServer, $this->mDBname, $this->mTrxShortId );
}
$this->runOnTransactionIdleCallbacks();
@@ -3609,6 +3719,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
* calling rollback when no transaction is in progress. This will silently
* break any ongoing explicit transaction. Only set the flush flag if you
* are sure that it is safe to ignore these warnings in your context.
+ * @throws DBUnexpectedError
* @since 1.23 Added $flush parameter
*/
final public function rollback( $fname = __METHOD__, $flush = '' ) {
@@ -3637,7 +3748,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
$this->mTrxPreCommitCallbacks = array(); // cancel
$this->mTrxAtomicLevels = new SplStack;
if ( $this->mTrxDoneWrites ) {
- Profiler::instance()->transactionWritingOut(
+ $this->getTransactionProfiler()->transactionWritingOut(
$this->mServer, $this->mDBname, $this->mTrxShortId );
}
}
@@ -3835,10 +3946,13 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
* in result objects. Pass the object through this function to return the
* original string.
*
- * @param string $b
+ * @param string|Blob $b
* @return string
*/
public function decodeBlob( $b ) {
+ if ( $b instanceof Blob ) {
+ $b = $b->fetch();
+ }
return $b;
}
@@ -3888,7 +4002,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
try {
$error = $this->sourceStream( $fp, $lineCallback, $resultCallback, $fname, $inputCallback );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
fclose( $fp );
throw $e;
}
@@ -4019,47 +4133,49 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
*
* - '{$var}' should be used for text and is passed through the database's
* addQuotes method.
- * - `{$var}` should be used for identifiers (eg: table and database names),
- * it is passed through the database's addIdentifierQuotes method which
+ * - `{$var}` should be used for identifiers (e.g. table and database names).
+ * It is passed through the database's addIdentifierQuotes method which
* can be overridden if the database uses something other than backticks.
- * - / *$var* / is just encoded, besides traditional table prefix and
- * table options its use should be avoided.
+ * - / *_* / or / *$wgDBprefix* / passes the name that follows through the
+ * database's tableName method.
+ * - / *i* / passes the name that follows through the database's indexName method.
+ * - In all other cases, / *$var* / is left unencoded. Except for table options,
+ * its use should be avoided. In 1.24 and older, string encoding was applied.
*
* @param string $ins SQL statement to replace variables in
* @return string The new SQL statement with variables replaced
*/
- protected function replaceSchemaVars( $ins ) {
- $vars = $this->getSchemaVars();
- foreach ( $vars as $var => $value ) {
- // replace '{$var}'
- $ins = str_replace( '\'{$' . $var . '}\'', $this->addQuotes( $value ), $ins );
- // replace `{$var}`
- $ins = str_replace( '`{$' . $var . '}`', $this->addIdentifierQuotes( $value ), $ins );
- // replace /*$var*/
- $ins = str_replace( '/*$' . $var . '*/', $this->strencode( $value ), $ins );
- }
-
- return $ins;
- }
-
- /**
- * Replace variables in sourced SQL
- *
- * @param string $ins
- * @return string
- */
protected function replaceVars( $ins ) {
- $ins = $this->replaceSchemaVars( $ins );
-
- // Table prefixes
- $ins = preg_replace_callback( '!/\*(?:\$wgDBprefix|_)\*/([a-zA-Z_0-9]*)!',
- array( $this, 'tableNameCallback' ), $ins );
-
- // Index names
- $ins = preg_replace_callback( '!/\*i\*/([a-zA-Z_0-9]*)!',
- array( $this, 'indexNameCallback' ), $ins );
-
- return $ins;
+ $that = $this;
+ $vars = $this->getSchemaVars();
+ return preg_replace_callback(
+ '!
+ /\* (\$wgDBprefix|[_i]) \*/ (\w*) | # 1-2. tableName, indexName
+ \'\{\$ (\w+) }\' | # 3. addQuotes
+ `\{\$ (\w+) }` | # 4. addIdentifierQuotes
+ /\*\$ (\w+) \*/ # 5. leave unencoded
+ !x',
+ function ( $m ) use ( $that, $vars ) {
+ // Note: Because of <https://bugs.php.net/bug.php?id=51881>,
+ // check for both nonexistent keys *and* the empty string.
+ if ( isset( $m[1] ) && $m[1] !== '' ) {
+ if ( $m[1] === 'i' ) {
+ return $that->indexName( $m[2] );
+ } else {
+ return $that->tableName( $m[2] );
+ }
+ } elseif ( isset( $m[3] ) && $m[3] !== '' && array_key_exists( $m[3], $vars ) ) {
+ return $that->addQuotes( $vars[$m[3]] );
+ } elseif ( isset( $m[4] ) && $m[4] !== '' && array_key_exists( $m[4], $vars ) ) {
+ return $that->addIdentifierQuotes( $vars[$m[4]] );
+ } elseif ( isset( $m[5] ) && $m[5] !== '' && array_key_exists( $m[5], $vars ) ) {
+ return $vars[$m[5]];
+ } else {
+ return $m[0];
+ }
+ },
+ $ins
+ );
}
/**
@@ -4089,26 +4205,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
}
/**
- * Table name callback
- *
- * @param array $matches
- * @return string
- */
- protected function tableNameCallback( $matches ) {
- return $this->tableName( $matches[1] );
- }
-
- /**
- * Index name callback
- *
- * @param array $matches
- * @return string
- */
- protected function indexNameCallback( $matches ) {
- return $this->indexName( $matches[1] );
- }
-
- /**
* Check to see if a named lock is available. This is non-blocking.
*
* @param string $lockName Name of lock to poll
diff --git a/includes/db/DatabaseError.php b/includes/db/DatabaseError.php
index 2dfec41d..86950a89 100644
--- a/includes/db/DatabaseError.php
+++ b/includes/db/DatabaseError.php
@@ -168,12 +168,12 @@ class DBConnectionError extends DBExpectedError {
if ( $wgShowHostnames || $wgShowSQLErrors ) {
$info = str_replace(
'$1', Html::element( 'span', array( 'dir' => 'ltr' ), $this->error ),
- htmlspecialchars( $this->msg( 'dberr-info', '(Cannot contact the database server: $1)' ) )
+ htmlspecialchars( $this->msg( 'dberr-info', '(Cannot access the database: $1)' ) )
);
} else {
$info = htmlspecialchars( $this->msg(
'dberr-info-hidden',
- '(Cannot contact the database server)'
+ '(Cannot access the database)'
) );
}
@@ -229,7 +229,7 @@ class DBConnectionError extends DBExpectedError {
return;
}
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// Do nothing, just use the default page
}
}
diff --git a/includes/db/DatabaseMssql.php b/includes/db/DatabaseMssql.php
index af3cc72d..2b8f395f 100644
--- a/includes/db/DatabaseMssql.php
+++ b/includes/db/DatabaseMssql.php
@@ -380,6 +380,9 @@ class DatabaseMssql extends DatabaseBase {
* (optional) (e.g. array( 'page' => array('LEFT JOIN','page_latest=rev_id') )
* @return mixed Database result resource (feed to Database::fetchObject
* or whatever), or false on failure
+ * @throws DBQueryError
+ * @throws DBUnexpectedError
+ * @throws Exception
*/
public function select( $table, $vars, $conds = '', $fname = __METHOD__,
$options = array(), $join_conds = array()
@@ -515,7 +518,7 @@ class DatabaseMssql extends DatabaseBase {
$row = $this->fetchRow( $res );
if ( isset( $row['EstimateRows'] ) ) {
- $rows = $row['EstimateRows'];
+ $rows = (int)$row['EstimateRows'];
}
}
@@ -574,8 +577,8 @@ class DatabaseMssql extends DatabaseBase {
* @param array $arrToInsert
* @param string $fname
* @param array $options
- * @throws DBQueryError
* @return bool
+ * @throws Exception
*/
public function insert( $table, $arrToInsert, $fname = __METHOD__, $options = array() ) {
# No rows to insert, easy just return now
@@ -692,7 +695,7 @@ class DatabaseMssql extends DatabaseBase {
if ( !is_null( $identity ) ) {
// then we want to get the identity column value we were assigned and save it off
$row = $ret->fetchObject();
- if( is_object( $row ) ){
+ if ( is_object( $row ) ) {
$this->mInsertId = $row->$identity;
}
}
@@ -713,8 +716,8 @@ class DatabaseMssql extends DatabaseBase {
* @param string $fname
* @param array $insertOptions
* @param array $selectOptions
- * @throws DBQueryError
* @return null|ResultWrapper
+ * @throws Exception
*/
public function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
$insertOptions = array(), $selectOptions = array()
@@ -761,6 +764,9 @@ class DatabaseMssql extends DatabaseBase {
* - IGNORE: Ignore unique key conflicts
* - LOW_PRIORITY: MySQL-specific, see MySQL manual.
* @return bool
+ * @throws DBUnexpectedError
+ * @throws Exception
+ * @throws MWException
*/
function update( $table, $values, $conds, $fname = __METHOD__, $options = array() ) {
$table = $this->tableName( $table );
@@ -806,64 +812,27 @@ class DatabaseMssql extends DatabaseBase {
'DatabaseBase::makeList called with incorrect parameters' );
}
- $first = true;
- $list = '';
+ if ( $mode != LIST_NAMES ) {
+ // In MS SQL, values need to be specially encoded when they are
+ // inserted into binary fields. Perform this necessary encoding
+ // for the specified set of columns.
+ foreach ( array_keys( $a ) as $field ) {
+ if ( !isset( $binaryColumns[$field] ) ) {
+ continue;
+ }
- foreach ( $a as $field => $value ) {
- if ( $mode != LIST_NAMES && isset( $binaryColumns[$field] ) ) {
- if ( is_array( $value ) ) {
- foreach ( $value as &$v ) {
+ if ( is_array( $a[$field] ) ) {
+ foreach ( $a[$field] as &$v ) {
$v = new MssqlBlob( $v );
}
+ unset( $v );
} else {
- $value = new MssqlBlob( $value );
- }
- }
-
- if ( !$first ) {
- if ( $mode == LIST_AND ) {
- $list .= ' AND ';
- } elseif ( $mode == LIST_OR ) {
- $list .= ' OR ';
- } else {
- $list .= ',';
+ $a[$field] = new MssqlBlob( $a[$field] );
}
- } else {
- $first = false;
- }
-
- if ( ( $mode == LIST_AND || $mode == LIST_OR ) && is_numeric( $field ) ) {
- $list .= "($value)";
- } elseif ( ( $mode == LIST_SET ) && is_numeric( $field ) ) {
- $list .= "$value";
- } elseif ( ( $mode == LIST_AND || $mode == LIST_OR ) && is_array( $value ) ) {
- if ( count( $value ) == 0 ) {
- throw new MWException( __METHOD__ . ": empty input for field $field" );
- } elseif ( count( $value ) == 1 ) {
- // Special-case single values, as IN isn't terribly efficient
- // Don't necessarily assume the single key is 0; we don't
- // enforce linear numeric ordering on other arrays here.
- $value = array_values( $value );
- $list .= $field . " = " . $this->addQuotes( $value[0] );
- } else {
- $list .= $field . " IN (" . $this->makeList( $value ) . ") ";
- }
- } elseif ( $value === null ) {
- if ( $mode == LIST_AND || $mode == LIST_OR ) {
- $list .= "$field IS ";
- } elseif ( $mode == LIST_SET ) {
- $list .= "$field = ";
- }
- $list .= 'NULL';
- } else {
- if ( $mode == LIST_AND || $mode == LIST_OR || $mode == LIST_SET ) {
- $list .= "$field = ";
- }
- $list .= $mode == LIST_NAMES ? $value : $this->addQuotes( $value );
}
}
- return $list;
+ return parent::makeList( $a, $mode );
}
/**
@@ -893,6 +862,7 @@ class DatabaseMssql extends DatabaseBase {
* @param int $limit The SQL limit
* @param bool|int $offset The SQL offset (default false)
* @return array|string
+ * @throws DBUnexpectedError
*/
public function limitResult( $sql, $limit, $offset = false ) {
if ( $offset === false || $offset == 0 ) {
@@ -953,12 +923,8 @@ class DatabaseMssql extends DatabaseBase {
// Matches: LIMIT {[offset,] row_count | row_count OFFSET offset}
$pattern = '/\bLIMIT\s+((([0-9]+)\s*,\s*)?([0-9]+)(\s+OFFSET\s+([0-9]+))?)/i';
if ( preg_match( $pattern, $sql, $matches ) ) {
- // row_count = $matches[4]
$row_count = $matches[4];
- // offset = $matches[3] OR $matches[6]
- $offset = $matches[3] or
- $offset = $matches[6] or
- $offset = false;
+ $offset = $matches[3] ?: $matches[6] ?: false;
// strip the matching LIMIT clause out
$sql = str_replace( $matches[0], '', $sql );
@@ -1128,7 +1094,7 @@ class DatabaseMssql extends DatabaseBase {
}
/**
- * @param string $s
+ * @param string|Blob $s
* @return string
*/
public function addQuotes( $s ) {
diff --git a/includes/db/DatabaseMysql.php b/includes/db/DatabaseMysql.php
index dc4a67df..823d9b67 100644
--- a/includes/db/DatabaseMysql.php
+++ b/includes/db/DatabaseMysql.php
@@ -142,13 +142,6 @@ class DatabaseMysql extends DatabaseMysqlBase {
return mysql_select_db( $db, $this->mConn );
}
- /**
- * @return string
- */
- function getServerVersion() {
- return mysql_get_server_info( $this->mConn );
- }
-
protected function mysqlFreeResult( $res ) {
return mysql_free_result( $res );
}
diff --git a/includes/db/DatabaseMysqlBase.php b/includes/db/DatabaseMysqlBase.php
index ba0f39ff..aac95a8c 100644
--- a/includes/db/DatabaseMysqlBase.php
+++ b/includes/db/DatabaseMysqlBase.php
@@ -38,6 +38,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
protected $mFakeMaster = false;
+ /** @var string|null */
+ private $serverVersion = null;
+
/**
* @return string
*/
@@ -55,7 +58,6 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
*/
function open( $server, $user, $password, $dbName ) {
global $wgAllDBsAreLocalhost, $wgSQLMode;
- wfProfileIn( __METHOD__ );
# Debugging hack -- fake cluster
if ( $wgAllDBsAreLocalhost ) {
@@ -69,8 +71,6 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
$this->mPassword = $password;
$this->mDBname = $dbName;
- wfProfileIn( "dbconnect-$server" );
-
# The kernel's default SYN retransmission period is far too slow for us,
# so we use a short timeout plus a manual retry. Retrying means that a small
# but finite rate of SYN packet loss won't cause user-visible errors.
@@ -79,27 +79,27 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
try {
$this->mConn = $this->mysqlConnect( $realServer );
} catch ( Exception $ex ) {
- wfProfileOut( "dbconnect-$server" );
- wfProfileOut( __METHOD__ );
$this->restoreErrorHandler();
throw $ex;
}
$error = $this->restoreErrorHandler();
- wfProfileOut( "dbconnect-$server" );
-
# Always log connection errors
if ( !$this->mConn ) {
if ( !$error ) {
$error = $this->lastError();
}
- wfLogDBError( "Error connecting to {$this->mServer}: $error" );
+ wfLogDBError(
+ "Error connecting to {db_server}: {error}",
+ $this->getLogContext( array(
+ 'method' => __METHOD__,
+ 'error' => $error,
+ ) )
+ );
wfDebug( "DB connection error\n" .
"Server: $server, User: $user, Password: " .
substr( $password, 0, 3 ) . "..., error: " . $error . "\n" );
- wfProfileOut( __METHOD__ );
-
$this->reportConnectionError( $error );
}
@@ -108,12 +108,15 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
$success = $this->selectDB( $dbName );
wfRestoreWarnings();
if ( !$success ) {
- wfLogDBError( "Error selecting database $dbName on server {$this->mServer}" );
+ wfLogDBError(
+ "Error selecting database {db_name} on server {db_server}",
+ $this->getLogContext( array(
+ 'method' => __METHOD__,
+ ) )
+ );
wfDebug( "Error selecting database $dbName on server {$this->mServer} " .
"from client host " . wfHostname() . "\n" );
- wfProfileOut( __METHOD__ );
-
$this->reportConnectionError( "Error selecting database $dbName" );
}
}
@@ -123,20 +126,29 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
$this->reportConnectionError( "Error setting character set" );
}
+ // Abstract over any insane MySQL defaults
+ $set = array( 'group_concat_max_len = 262144' );
// Set SQL mode, default is turning them all off, can be overridden or skipped with null
if ( is_string( $wgSQLMode ) ) {
- $mode = $this->addQuotes( $wgSQLMode );
+ $set[] = 'sql_mode = ' . $this->addQuotes( $wgSQLMode );
+ }
+
+ if ( $set ) {
// Use doQuery() to avoid opening implicit transactions (DBO_TRX)
- $success = $this->doQuery( "SET sql_mode = $mode", __METHOD__ );
+ $success = $this->doQuery( 'SET ' . implode( ', ', $set ), __METHOD__ );
if ( !$success ) {
- wfLogDBError( "Error setting sql_mode to $mode on server {$this->mServer}" );
- wfProfileOut( __METHOD__ );
- $this->reportConnectionError( "Error setting sql_mode to $mode" );
+ wfLogDBError(
+ 'Error setting MySQL variables on server {db_server} (check $wgSQLMode)',
+ $this->getLogContext( array(
+ 'method' => __METHOD__,
+ ) )
+ );
+ $this->reportConnectionError(
+ 'Error setting MySQL variables on server {db_server} (check $wgSQLMode)' );
}
}
$this->mOpened = true;
- wfProfileOut( __METHOD__ );
return true;
}
@@ -456,7 +468,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
$rows *= $plan->rows > 0 ? $plan->rows : 1; // avoid resetting to zero
}
- return $rows;
+ return (int)$rows;
}
/**
@@ -652,7 +664,6 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
return '0'; // http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html
}
- wfProfileIn( __METHOD__ );
# Commit any open transactions
$this->commit( __METHOD__, 'flush' );
@@ -661,18 +672,15 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
if ( $wait > $timeout * 1e6 ) {
wfDebug( "Fake slave timed out waiting for $pos ($wait us)\n" );
- wfProfileOut( __METHOD__ );
return -1;
} elseif ( $wait > 0 ) {
wfDebug( "Fake slave waiting $wait us\n" );
usleep( $wait );
- wfProfileOut( __METHOD__ );
return 1;
} else {
wfDebug( "Fake slave up to date ($wait us)\n" );
- wfProfileOut( __METHOD__ );
return 0;
}
@@ -692,8 +700,6 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
}
}
- wfProfileOut( __METHOD__ );
-
return $status;
}
@@ -763,9 +769,9 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
* @return string
*/
public function getSoftwareLink() {
- // MariaDB includes its name in its version string (sent when the connection is opened),
- // and this is how MariaDB's version of the mysql command-line client identifies MariaDB
- // servers (see the mariadb_connection() function in libmysql/libmysql.c).
+ // MariaDB includes its name in its version string; this is how MariaDB's version of
+ // the mysql command-line client identifies MariaDB servers (see mariadb_connection()
+ // in libmysql/libmysql.c).
$version = $this->getServerVersion();
if ( strpos( $version, 'MariaDB' ) !== false || strpos( $version, '-maria-' ) !== false ) {
return '[{{int:version-db-mariadb-url}} MariaDB]';
@@ -778,6 +784,19 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
}
/**
+ * @return string
+ */
+ public function getServerVersion() {
+ // Not using mysql_get_server_info() or similar for consistency: in the handshake,
+ // MariaDB 10 adds the prefix "5.5.5-", and only some newer client libraries strip
+ // it off (see RPL_VERSION_HACK in include/mysql_com.h).
+ if ( $this->serverVersion === null ) {
+ $this->serverVersion = $this->selectField( '', 'VERSION()', '', __METHOD__ );
+ }
+ return $this->serverVersion;
+ }
+
+ /**
* @param array $options
*/
public function setSessionOptions( array $options ) {
@@ -1169,7 +1188,8 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
*/
class MySQLField implements Field {
private $name, $tablename, $default, $max_length, $nullable,
- $is_pk, $is_unique, $is_multiple, $is_key, $type, $binary;
+ $is_pk, $is_unique, $is_multiple, $is_key, $type, $binary,
+ $is_numeric, $is_blob, $is_unsigned, $is_zerofill;
function __construct( $info ) {
$this->name = $info->name;
@@ -1183,6 +1203,10 @@ class MySQLField implements Field {
$this->is_key = ( $this->is_pk || $this->is_unique || $this->is_multiple );
$this->type = $info->type;
$this->binary = isset( $info->binary ) ? $info->binary : false;
+ $this->is_numeric = isset( $info->numeric ) ? $info->numeric : false;
+ $this->is_blob = isset( $info->blob ) ? $info->blob : false;
+ $this->is_unsigned = isset( $info->unsigned ) ? $info->unsigned : false;
+ $this->is_zerofill = isset( $info->zerofill ) ? $info->zerofill : false;
}
/**
@@ -1231,21 +1255,54 @@ class MySQLField implements Field {
return $this->is_multiple;
}
+ /**
+ * @return bool
+ */
function isBinary() {
return $this->binary;
}
+
+ /**
+ * @return bool
+ */
+ function isNumeric() {
+ return $this->is_numeric;
+ }
+
+ /**
+ * @return bool
+ */
+ function isBlob() {
+ return $this->is_blob;
+ }
+
+ /**
+ * @return bool
+ */
+ function isUnsigned() {
+ return $this->is_unsigned;
+ }
+
+ /**
+ * @return bool
+ */
+ function isZerofill() {
+ return $this->is_zerofill;
+ }
}
class MySQLMasterPos implements DBMasterPos {
/** @var string */
public $file;
-
- /** @var int Timestamp */
+ /** @var int Position */
public $pos;
+ /** @var float UNIX timestamp */
+ public $asOfTime = 0.0;
function __construct( $file, $pos ) {
$this->file = $file;
$this->pos = $pos;
+ $this->asOfTime = microtime( true );
}
function __toString() {
@@ -1271,4 +1328,8 @@ class MySQLMasterPos implements DBMasterPos {
return ( $thisPos && $thatPos && $thisPos >= $thatPos );
}
+
+ function asOfTime() {
+ return $this->asOfTime;
+ }
}
diff --git a/includes/db/DatabaseMysqli.php b/includes/db/DatabaseMysqli.php
index a03c9aaf..ad12e196 100644
--- a/includes/db/DatabaseMysqli.php
+++ b/includes/db/DatabaseMysqli.php
@@ -166,13 +166,6 @@ class DatabaseMysqli extends DatabaseMysqlBase {
}
/**
- * @return string
- */
- function getServerVersion() {
- return $this->mConn->server_info;
- }
-
- /**
* @param mysqli $res
* @return bool
*/
@@ -231,11 +224,18 @@ class DatabaseMysqli extends DatabaseMysqlBase {
*/
protected function mysqlFetchField( $res, $n ) {
$field = $res->fetch_field_direct( $n );
+
+ // Add missing properties to result (using flags property)
+ // which will be part of function mysql-fetch-field for backward compatibility
$field->not_null = $field->flags & MYSQLI_NOT_NULL_FLAG;
$field->primary_key = $field->flags & MYSQLI_PRI_KEY_FLAG;
$field->unique_key = $field->flags & MYSQLI_UNIQUE_KEY_FLAG;
$field->multiple_key = $field->flags & MYSQLI_MULTIPLE_KEY_FLAG;
$field->binary = $field->flags & MYSQLI_BINARY_FLAG;
+ $field->numeric = $field->flags & MYSQLI_NUM_FLAG;
+ $field->blob = $field->flags & MYSQLI_BLOB_FLAG;
+ $field->unsigned = $field->flags & MYSQLI_UNSIGNED_FLAG;
+ $field->zerofill = $field->flags & MYSQLI_ZEROFILL_FLAG;
return $field;
}
diff --git a/includes/db/DatabaseOracle.php b/includes/db/DatabaseOracle.php
index f031f780..9b00fbd1 100644
--- a/includes/db/DatabaseOracle.php
+++ b/includes/db/DatabaseOracle.php
@@ -207,29 +207,15 @@ class DatabaseOracle extends DatabaseBase {
/** @var array */
private $mFieldInfoCache = array();
- function __construct( $p = null ) {
+ function __construct( array $p ) {
global $wgDBprefix;
- if ( !is_array( $p ) ) { // legacy calling pattern
- wfDeprecated( __METHOD__ . " method called without parameter array.", "1.22" );
- $args = func_get_args();
- $p = array(
- 'host' => isset( $args[0] ) ? $args[0] : false,
- 'user' => isset( $args[1] ) ? $args[1] : false,
- 'password' => isset( $args[2] ) ? $args[2] : false,
- 'dbname' => isset( $args[3] ) ? $args[3] : false,
- 'flags' => isset( $args[4] ) ? $args[4] : 0,
- 'tablePrefix' => isset( $args[5] ) ? $args[5] : 'get from global',
- 'schema' => 'get from global',
- 'foreign' => isset( $args[6] ) ? $args[6] : false
- );
- }
if ( $p['tablePrefix'] == 'get from global' ) {
$p['tablePrefix'] = $wgDBprefix;
}
$p['tablePrefix'] = strtoupper( $p['tablePrefix'] );
parent::__construct( $p );
- wfRunHooks( 'DatabaseOraclePostInit', array( $this ) );
+ Hooks::run( 'DatabaseOraclePostInit', array( $this ) );
}
function __destruct() {
diff --git a/includes/db/DatabasePostgres.php b/includes/db/DatabasePostgres.php
index ce14d7a9..9287f7a6 100644
--- a/includes/db/DatabasePostgres.php
+++ b/includes/db/DatabasePostgres.php
@@ -530,10 +530,12 @@ class DatabasePostgres extends DatabaseBase {
return;
}
}
- /* Transaction stays in the ERROR state until rolledback */
+ /* Transaction stays in the ERROR state until rolled back */
if ( $this->mTrxLevel ) {
+ $ignore = $this->ignoreErrors( true );
$this->rollback( __METHOD__ );
- };
+ $this->ignoreErrors( $ignore );
+ }
parent::reportQueryError( $error, $errno, $sql, $fname, false );
}
@@ -712,7 +714,7 @@ class DatabasePostgres extends DatabaseBase {
$row = $this->fetchRow( $res );
$count = array();
if ( preg_match( '/rows=(\d+)/', $row[0], $count ) ) {
- $rows = $count[1];
+ $rows = (int)$count[1];
}
}
@@ -1495,12 +1497,14 @@ SQL;
* @return Blob
*/
function encodeBlob( $b ) {
- return new Blob( pg_escape_bytea( $this->mConn, $b ) );
+ return new PostgresBlob( pg_escape_bytea( $b ) );
}
function decodeBlob( $b ) {
- if ( $b instanceof Blob ) {
+ if ( $b instanceof PostgresBlob ) {
$b = $b->fetch();
+ } elseif ( $b instanceof Blob ) {
+ return $b->fetch();
}
return pg_unescape_bytea( $b );
@@ -1520,7 +1524,12 @@ SQL;
} elseif ( is_bool( $s ) ) {
return intval( $s );
} elseif ( $s instanceof Blob ) {
- return "'" . $s->fetch( $s ) . "'";
+ if ( $s instanceof PostgresBlob ) {
+ $s = $s->fetch();
+ } else {
+ $s = pg_escape_bytea( $this->mConn, $s->fetch() );
+ }
+ return "'$s'";
}
return "'" . pg_escape_string( $this->mConn, $s ) . "'";
@@ -1692,3 +1701,5 @@ SQL;
return wfBaseConvert( substr( sha1( $lockName ), 0, 15 ), 16, 10 );
}
} // end DatabasePostgres class
+
+class PostgresBlob extends Blob {}
diff --git a/includes/db/DatabaseSqlite.php b/includes/db/DatabaseSqlite.php
index dd2e813e..ed86bab1 100644
--- a/includes/db/DatabaseSqlite.php
+++ b/includes/db/DatabaseSqlite.php
@@ -29,8 +29,14 @@ class DatabaseSqlite extends DatabaseBase {
/** @var bool Whether full text is enabled */
private static $fulltextEnabled = null;
+ /** @var string Directory */
+ protected $dbDir;
+
/** @var string File name for SQLite database file */
- public $mDatabaseFile;
+ protected $dbPath;
+
+ /** @var string Transaction mode */
+ protected $trxMode;
/** @var int The number of rows affected as an integer */
protected $mAffectedRows;
@@ -44,35 +50,63 @@ class DatabaseSqlite extends DatabaseBase {
/** @var FSLockManager (hopefully on the same server as the DB) */
protected $lockMgr;
- function __construct( $p = null ) {
+ /**
+ * Additional params include:
+ * - dbDirectory : directory containing the DB and the lock file directory
+ * [defaults to $wgSQLiteDataDir]
+ * - dbFilePath : use this to force the path of the DB file
+ * - trxMode : one of (deferred, immediate, exclusive)
+ * @param array $p
+ */
+ function __construct( array $p ) {
global $wgSharedDB, $wgSQLiteDataDir;
- if ( !is_array( $p ) ) { // legacy calling pattern
- wfDeprecated( __METHOD__ . " method called without parameter array.", "1.22" );
- $args = func_get_args();
- $p = array(
- 'host' => isset( $args[0] ) ? $args[0] : false,
- 'user' => isset( $args[1] ) ? $args[1] : false,
- 'password' => isset( $args[2] ) ? $args[2] : false,
- 'dbname' => isset( $args[3] ) ? $args[3] : false,
- 'flags' => isset( $args[4] ) ? $args[4] : 0,
- 'tablePrefix' => isset( $args[5] ) ? $args[5] : 'get from global',
- 'schema' => 'get from global',
- 'foreign' => isset( $args[6] ) ? $args[6] : false
- );
- }
- $this->mDBname = $p['dbname'];
- parent::__construct( $p );
- // parent doesn't open when $user is false, but we can work with $dbName
- if ( $p['dbname'] && !$this->isOpen() ) {
- if ( $this->open( $p['host'], $p['user'], $p['password'], $p['dbname'] ) ) {
- if ( $wgSharedDB ) {
- $this->attachDatabase( $wgSharedDB );
+ $this->dbDir = isset( $p['dbDirectory'] ) ? $p['dbDirectory'] : $wgSQLiteDataDir;
+
+ if ( isset( $p['dbFilePath'] ) ) {
+ $this->mFlags = isset( $p['flags'] ) ? $p['flags'] : 0;
+ // Standalone .sqlite file mode
+ $this->openFile( $p['dbFilePath'] );
+ // @FIXME: clean up base constructor so this can call super instead
+ $this->mTrxAtomicLevels = new SplStack;
+ } else {
+ $this->mDBname = $p['dbname'];
+ // Stock wiki mode using standard file names per DB
+ parent::__construct( $p );
+ // parent doesn't open when $user is false, but we can work with $dbName
+ if ( $p['dbname'] && !$this->isOpen() ) {
+ if ( $this->open( $p['host'], $p['user'], $p['password'], $p['dbname'] ) ) {
+ if ( $wgSharedDB ) {
+ $this->attachDatabase( $wgSharedDB );
+ }
}
}
}
- $this->lockMgr = new FSLockManager( array( 'lockDirectory' => "$wgSQLiteDataDir/locks" ) );
+ $this->trxMode = isset( $p['trxMode'] ) ? strtoupper( $p['trxMode'] ) : null;
+ if ( $this->trxMode &&
+ !in_array( $this->trxMode, array( 'DEFERRED', 'IMMEDIATE', 'EXCLUSIVE' ) )
+ ) {
+ $this->trxMode = null;
+ wfWarn( "Invalid SQLite transaction mode provided." );
+ }
+
+ $this->lockMgr = new FSLockManager( array( 'lockDirectory' => "{$this->dbDir}/locks" ) );
+ }
+
+ /**
+ * @param string $filename
+ * @param array $p Options map; supports:
+ * - flags : (same as __construct counterpart)
+ * - trxMode : (same as __construct counterpart)
+ * - dbDirectory : (same as __construct counterpart)
+ * @return DatabaseSqlite
+ * @since 1.25
+ */
+ public static function newStandaloneInstance( $filename, array $p = array() ) {
+ $p['dbFilePath'] = $filename;
+
+ return new self( $p );
}
/**
@@ -103,10 +137,8 @@ class DatabaseSqlite extends DatabaseBase {
* @return PDO
*/
function open( $server, $user, $pass, $dbName ) {
- global $wgSQLiteDataDir;
-
$this->close();
- $fileName = self::generateFileName( $wgSQLiteDataDir, $dbName );
+ $fileName = self::generateFileName( $this->dbDir, $dbName );
if ( !is_readable( $fileName ) ) {
$this->mConn = false;
throw new DBConnectionError( $this, "SQLite database not accessible" );
@@ -123,10 +155,10 @@ class DatabaseSqlite extends DatabaseBase {
* @throws DBConnectionError
* @return PDO|bool SQL connection or false if failed
*/
- function openFile( $fileName ) {
+ protected function openFile( $fileName ) {
$err = false;
- $this->mDatabaseFile = $fileName;
+ $this->dbPath = $fileName;
try {
if ( $this->mFlags & DBO_PERSISTENT ) {
$this->mConn = new PDO( "sqlite:$fileName", '', '',
@@ -144,8 +176,8 @@ class DatabaseSqlite extends DatabaseBase {
}
$this->mOpened = !!$this->mConn;
- # set error codes only, don't raise exceptions
if ( $this->mOpened ) {
+ # Set error codes only, don't raise exceptions
$this->mConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
# Enforce LIKE to be case sensitive, just like MySQL
$this->query( 'PRAGMA case_sensitive_like = 1' );
@@ -157,6 +189,14 @@ class DatabaseSqlite extends DatabaseBase {
}
/**
+ * @return string SQLite DB file path
+ * @since 1.25
+ */
+ public function getDbFilePath() {
+ return $this->dbPath;
+ }
+
+ /**
* Does not actually close the connection, just destroys the reference for GC to do its work
* @return bool
*/
@@ -206,8 +246,7 @@ class DatabaseSqlite extends DatabaseBase {
$cachedResult = false;
$table = 'dummy_search_test';
- $db = new DatabaseSqliteStandalone( ':memory:' );
-
+ $db = self::newStandaloneInstance( ':memory:' );
if ( $db->query( "CREATE VIRTUAL TABLE $table USING FTS3(dummy_field)", __METHOD__, true ) ) {
$cachedResult = 'FTS3';
}
@@ -223,14 +262,13 @@ class DatabaseSqlite extends DatabaseBase {
* @param string $name Database name to be used in queries like
* SELECT foo FROM dbname.table
* @param bool|string $file Database file name. If omitted, will be generated
- * using $name and $wgSQLiteDataDir
+ * using $name and configured data directory
* @param string $fname Calling function name
* @return ResultWrapper
*/
function attachDatabase( $name, $file = false, $fname = __METHOD__ ) {
- global $wgSQLiteDataDir;
if ( !$file ) {
- $file = self::generateFileName( $wgSQLiteDataDir, $name );
+ $file = self::generateFileName( $this->dbDir, $name );
}
$file = $this->addQuotes( $file );
@@ -712,37 +750,14 @@ class DatabaseSqlite extends DatabaseBase {
}
protected function doBegin( $fname = '' ) {
- if ( $this->mTrxLevel == 1 ) {
- $this->commit( __METHOD__ );
- }
- try {
- $this->mConn->beginTransaction();
- } catch ( PDOException $e ) {
- throw new DBUnexpectedError( $this, 'Error in BEGIN query: ' . $e->getMessage() );
+ if ( $this->trxMode ) {
+ $this->query( "BEGIN {$this->trxMode}", $fname );
+ } else {
+ $this->query( 'BEGIN', $fname );
}
$this->mTrxLevel = 1;
}
- protected function doCommit( $fname = '' ) {
- if ( $this->mTrxLevel == 0 ) {
- return;
- }
- try {
- $this->mConn->commit();
- } catch ( PDOException $e ) {
- throw new DBUnexpectedError( $this, 'Error in COMMIT query: ' . $e->getMessage() );
- }
- $this->mTrxLevel = 0;
- }
-
- protected function doRollback( $fname = '' ) {
- if ( $this->mTrxLevel == 0 ) {
- return;
- }
- $this->mConn->rollBack();
- $this->mTrxLevel = 0;
- }
-
/**
* @param string $s
* @return string
@@ -787,6 +802,10 @@ class DatabaseSqlite extends DatabaseBase {
// https://bugs.php.net/bug.php?id=63419
// There was already a similar report for SQLite3::escapeString, bug #62361:
// https://bugs.php.net/bug.php?id=62361
+ // There is an additional bug regarding sorting this data after insert
+ // on older versions of sqlite shipped with ubuntu 12.04
+ // https://bugzilla.wikimedia.org/show_bug.cgi?id=72367
+ wfDebugLog( __CLASS__, __FUNCTION__ . ': Quoting value containing null byte. For consistency all binary data should have been first processed with self::encodeBlob()' );
return "x'" . bin2hex( $s ) . "'";
} else {
return $this->mConn->quote( $s );
@@ -882,11 +901,9 @@ class DatabaseSqlite extends DatabaseBase {
}
public function lock( $lockName, $method, $timeout = 5 ) {
- global $wgSQLiteDataDir;
-
- if ( !is_dir( "$wgSQLiteDataDir/locks" ) ) { // create dir as needed
- if ( !is_writable( $wgSQLiteDataDir ) || !mkdir( "$wgSQLiteDataDir/locks" ) ) {
- throw new DBError( "Cannot create directory \"$wgSQLiteDataDir/locks\"." );
+ if ( !is_dir( "{$this->dbDir}/locks" ) ) { // create dir as needed
+ if ( !is_writable( $this->dbDir ) || !mkdir( "{$this->dbDir}/locks" ) ) {
+ throw new DBError( "Cannot create directory \"{$this->dbDir}/locks\"." );
}
}
@@ -981,18 +998,6 @@ class DatabaseSqlite extends DatabaseBase {
} // end DatabaseSqlite class
/**
- * This class allows simple acccess to a SQLite database independently from main database settings
- * @ingroup Database
- */
-class DatabaseSqliteStandalone extends DatabaseSqlite {
- public function __construct( $fileName, $flags = 0 ) {
- $this->mFlags = $flags;
- $this->tablePrefix( null );
- $this->openFile( $fileName );
- }
-}
-
-/**
* @ingroup Database
*/
class SQLiteField implements Field {
diff --git a/includes/db/DatabaseUtility.php b/includes/db/DatabaseUtility.php
index c1e80d33..9a520ff9 100644
--- a/includes/db/DatabaseUtility.php
+++ b/includes/db/DatabaseUtility.php
@@ -22,29 +22,6 @@
*/
/**
- * Utility class.
- * @ingroup Database
- */
-class DBObject {
- public $mData;
-
- function __construct( $data ) {
- $this->mData = $data;
- }
-
- /**
- * @return bool
- */
- function isLOB() {
- return false;
- }
-
- function data() {
- return $this->mData;
- }
-}
-
-/**
* Utility class
* @ingroup Database
*
@@ -339,4 +316,8 @@ class LikeMatch {
* The implementation details of this opaque type are up to the database subclass.
*/
interface DBMasterPos {
+ /**
+ * @return float UNIX timestamp
+ */
+ public function asOfTime();
}
diff --git a/includes/db/IORMTable.php b/includes/db/IORMTable.php
index 4dc693ac..b2527f95 100644
--- a/includes/db/IORMTable.php
+++ b/includes/db/IORMTable.php
@@ -94,7 +94,7 @@ interface IORMTable {
public function getSummaryFields();
/**
- * Selects the the specified fields of the records matching the provided
+ * Selects the specified fields of the records matching the provided
* conditions and returns them as DBDataObject. Field names get prefixed.
*
* @see DatabaseBase::select()
@@ -113,7 +113,7 @@ interface IORMTable {
array $options = array(), $functionName = null );
/**
- * Selects the the specified fields of the records matching the provided
+ * Selects the specified fields of the records matching the provided
* conditions and returns them as DBDataObject. Field names get prefixed.
*
* @since 1.20
@@ -145,7 +145,7 @@ interface IORMTable {
array $options = array(), $functionName = null );
/**
- * Selects the the specified fields of the records matching the provided
+ * Selects the specified fields of the records matching the provided
* conditions and returns them as associative arrays.
* Provided field names get prefixed.
* Returned field names will not have a prefix.
@@ -170,7 +170,7 @@ interface IORMTable {
array $options = array(), $collapse = true, $functionName = null );
/**
- * Selects the the specified fields of the first matching record.
+ * Selects the specified fields of the first matching record.
* Field names get prefixed.
*
* @since 1.20
@@ -186,7 +186,7 @@ interface IORMTable {
array $options = array(), $functionName = null );
/**
- * Selects the the specified fields of the records matching the provided
+ * Selects the specified fields of the records matching the provided
* conditions. Field names do NOT get prefixed.
*
* @since 1.20
@@ -202,7 +202,7 @@ interface IORMTable {
array $options = array(), $functionName = null );
/**
- * Selects the the specified fields of the first record matching the provided
+ * Selects the specified fields of the first record matching the provided
* conditions and returns it as an associative array, or false when nothing matches.
* This method makes use of selectFields and expects the same parameters and
* returns the same results (if there are any, if there are none, this method returns false).
@@ -442,10 +442,11 @@ interface IORMTable {
* Takes an array of field names with prefix and returns the unprefixed equivalent.
*
* @since 1.20
+ * @deprecated since 1.25, will be removed
*
- * @param array $fieldNames
+ * @param string[] $fieldNames
*
- * @return array
+ * @return string[]
*/
public function unprefixFieldNames( array $fieldNames );
@@ -453,6 +454,7 @@ interface IORMTable {
* Takes a field name with prefix and returns the unprefixed equivalent.
*
* @since 1.20
+ * @deprecated since 1.25, will be removed
*
* @param string $fieldName
*
diff --git a/includes/db/LBFactory.php b/includes/db/LBFactory.php
index 73456e23..4551e2d7 100644
--- a/includes/db/LBFactory.php
+++ b/includes/db/LBFactory.php
@@ -27,7 +27,7 @@
*/
abstract class LBFactory {
/** @var LBFactory */
- protected static $instance;
+ private static $instance;
/**
* Disables all access to the load balancer, will cause all database access
@@ -43,7 +43,7 @@ abstract class LBFactory {
*
* @return LBFactory
*/
- static function &singleton() {
+ public static function singleton() {
global $wgLBFactoryConf;
if ( is_null( self::$instance ) ) {
@@ -87,7 +87,7 @@ abstract class LBFactory {
/**
* Shut down, close connections and destroy the cached instance.
*/
- static function destroyInstance() {
+ public static function destroyInstance() {
if ( self::$instance ) {
self::$instance->shutdown();
self::$instance->forEachLBCallMethod( 'closeAll' );
@@ -100,7 +100,7 @@ abstract class LBFactory {
*
* @param LBFactory $instance
*/
- static function setInstance( $instance ) {
+ public static function setInstance( $instance ) {
self::destroyInstance();
self::$instance = $instance;
}
@@ -109,7 +109,7 @@ abstract class LBFactory {
* Construct a factory based on a configuration array (typically from $wgLBFactoryConf)
* @param array $conf
*/
- abstract function __construct( $conf );
+ abstract public function __construct( array $conf );
/**
* Create a new load balancer object. The resulting object will be untracked,
@@ -118,7 +118,7 @@ abstract class LBFactory {
* @param bool|string $wiki Wiki ID, or false for the current wiki
* @return LoadBalancer
*/
- abstract function newMainLB( $wiki = false );
+ abstract public function newMainLB( $wiki = false );
/**
* Get a cached (tracked) load balancer object.
@@ -126,7 +126,7 @@ abstract class LBFactory {
* @param bool|string $wiki Wiki ID, or false for the current wiki
* @return LoadBalancer
*/
- abstract function getMainLB( $wiki = false );
+ abstract public function getMainLB( $wiki = false );
/**
* Create a new load balancer for external storage. The resulting object will be
@@ -137,7 +137,7 @@ abstract class LBFactory {
* @param bool|string $wiki Wiki ID, or false for the current wiki
* @return LoadBalancer
*/
- abstract function newExternalLB( $cluster, $wiki = false );
+ abstract protected function newExternalLB( $cluster, $wiki = false );
/**
* Get a cached (tracked) load balancer for external storage
@@ -146,7 +146,7 @@ abstract class LBFactory {
* @param bool|string $wiki Wiki ID, or false for the current wiki
* @return LoadBalancer
*/
- abstract function &getExternalLB( $cluster, $wiki = false );
+ abstract public function &getExternalLB( $cluster, $wiki = false );
/**
* Execute a function for each tracked load balancer
@@ -156,13 +156,13 @@ abstract class LBFactory {
* @param callable $callback
* @param array $params
*/
- abstract function forEachLB( $callback, $params = array() );
+ abstract public function forEachLB( $callback, array $params = array() );
/**
* Prepare all tracked load balancers for shutdown
* STUB
*/
- function shutdown() {
+ public function shutdown() {
}
/**
@@ -171,24 +171,16 @@ abstract class LBFactory {
* @param string $methodName
* @param array $args
*/
- function forEachLBCallMethod( $methodName, $args = array() ) {
- $this->forEachLB( array( $this, 'callMethod' ), array( $methodName, $args ) );
- }
-
- /**
- * Private helper for forEachLBCallMethod
- * @param LoadBalancer $loadBalancer
- * @param string $methodName
- * @param array $args
- */
- function callMethod( $loadBalancer, $methodName, $args ) {
- call_user_func_array( array( $loadBalancer, $methodName ), $args );
+ private function forEachLBCallMethod( $methodName, array $args = array() ) {
+ $this->forEachLB( function ( LoadBalancer $loadBalancer, $methodName, array $args ) {
+ call_user_func_array( array( $loadBalancer, $methodName ), $args );
+ }, array( $methodName, $args ) );
}
/**
* Commit changes on all master connections
*/
- function commitMasterChanges() {
+ public function commitMasterChanges() {
$this->forEachLBCallMethod( 'commitMasterChanges' );
}
@@ -196,7 +188,7 @@ abstract class LBFactory {
* Rollback changes on all master connections
* @since 1.23
*/
- function rollbackMasterChanges() {
+ public function rollbackMasterChanges() {
$this->forEachLBCallMethod( 'rollbackMasterChanges' );
}
@@ -205,7 +197,7 @@ abstract class LBFactory {
* @since 1.23
* @return bool
*/
- function hasMasterChanges() {
+ public function hasMasterChanges() {
$ret = false;
$this->forEachLB( function ( $lb ) use ( &$ret ) {
$ret = $ret || $lb->hasMasterChanges();
@@ -219,15 +211,15 @@ abstract class LBFactory {
*/
class LBFactorySimple extends LBFactory {
/** @var LoadBalancer */
- protected $mainLB;
+ private $mainLB;
/** @var LoadBalancer[] */
- protected $extLBs = array();
+ private $extLBs = array();
/** @var ChronologyProtector */
- protected $chronProt;
+ private $chronProt;
- function __construct( $conf ) {
+ public function __construct( array $conf ) {
$this->chronProt = new ChronologyProtector;
}
@@ -235,7 +227,7 @@ class LBFactorySimple extends LBFactory {
* @param bool|string $wiki
* @return LoadBalancer
*/
- function newMainLB( $wiki = false ) {
+ public function newMainLB( $wiki = false ) {
global $wgDBservers;
if ( $wgDBservers ) {
$servers = $wgDBservers;
@@ -274,7 +266,7 @@ class LBFactorySimple extends LBFactory {
* @param bool|string $wiki
* @return LoadBalancer
*/
- function getMainLB( $wiki = false ) {
+ public function getMainLB( $wiki = false ) {
if ( !isset( $this->mainLB ) ) {
$this->mainLB = $this->newMainLB( $wiki );
$this->mainLB->parentInfo( array( 'id' => 'main' ) );
@@ -290,7 +282,7 @@ class LBFactorySimple extends LBFactory {
* @param bool|string $wiki
* @return LoadBalancer
*/
- function newExternalLB( $cluster, $wiki = false ) {
+ protected function newExternalLB( $cluster, $wiki = false ) {
global $wgExternalServers;
if ( !isset( $wgExternalServers[$cluster] ) ) {
throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
@@ -306,7 +298,7 @@ class LBFactorySimple extends LBFactory {
* @param bool|string $wiki
* @return array
*/
- function &getExternalLB( $cluster, $wiki = false ) {
+ public function &getExternalLB( $cluster, $wiki = false ) {
if ( !isset( $this->extLBs[$cluster] ) ) {
$this->extLBs[$cluster] = $this->newExternalLB( $cluster, $wiki );
$this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
@@ -324,7 +316,7 @@ class LBFactorySimple extends LBFactory {
* @param callable $callback
* @param array $params
*/
- function forEachLB( $callback, $params = array() ) {
+ public function forEachLB( $callback, array $params = array() ) {
if ( isset( $this->mainLB ) ) {
call_user_func_array( $callback, array_merge( array( $this->mainLB ), $params ) );
}
@@ -333,7 +325,7 @@ class LBFactorySimple extends LBFactory {
}
}
- function shutdown() {
+ public function shutdown() {
if ( $this->mainLB ) {
$this->chronProt->shutdownLB( $this->mainLB );
}
@@ -352,26 +344,26 @@ class LBFactorySimple extends LBFactory {
* LBFactory::enableBackend() to return to normal behavior
*/
class LBFactoryFake extends LBFactory {
- function __construct( $conf ) {
+ public function __construct( array $conf ) {
}
- function newMainLB( $wiki = false ) {
+ public function newMainLB( $wiki = false ) {
throw new DBAccessError;
}
- function getMainLB( $wiki = false ) {
+ public function getMainLB( $wiki = false ) {
throw new DBAccessError;
}
- function newExternalLB( $cluster, $wiki = false ) {
+ protected function newExternalLB( $cluster, $wiki = false ) {
throw new DBAccessError;
}
- function &getExternalLB( $cluster, $wiki = false ) {
+ public function &getExternalLB( $cluster, $wiki = false ) {
throw new DBAccessError;
}
- function forEachLB( $callback, $params = array() ) {
+ public function forEachLB( $callback, array $params = array() ) {
}
}
@@ -379,7 +371,7 @@ class LBFactoryFake extends LBFactory {
* Exception class for attempted DB access
*/
class DBAccessError extends MWException {
- function __construct() {
+ public function __construct() {
parent::__construct( "Mediawiki tried to access the database via wfGetDB(). " .
"This is not allowed." );
}
diff --git a/includes/db/LBFactoryMulti.php b/includes/db/LBFactoryMulti.php
index bac96523..aa305ab1 100644
--- a/includes/db/LBFactoryMulti.php
+++ b/includes/db/LBFactoryMulti.php
@@ -77,82 +77,82 @@ class LBFactoryMulti extends LBFactory {
// Required settings
/** @var array A map of database names to section names */
- protected $sectionsByDB;
+ private $sectionsByDB;
/**
* @var array A 2-d map. For each section, gives a map of server names to
* load ratios
*/
- protected $sectionLoads;
+ private $sectionLoads;
/**
* @var array A server info associative array as documented for
* $wgDBservers. The host, hostName and load entries will be
* overridden
*/
- protected $serverTemplate;
+ private $serverTemplate;
// Optional settings
/** @var array A 3-d map giving server load ratios for each section and group */
- protected $groupLoadsBySection = array();
+ private $groupLoadsBySection = array();
/** @var array A 3-d map giving server load ratios by DB name */
- protected $groupLoadsByDB = array();
+ private $groupLoadsByDB = array();
/** @var array A map of hostname to IP address */
- protected $hostsByName = array();
+ private $hostsByName = array();
/** @var array A map of external storage cluster name to server load map */
- protected $externalLoads = array();
+ private $externalLoads = array();
/**
* @var array A set of server info keys overriding serverTemplate for
* external storage
*/
- protected $externalTemplateOverrides;
+ private $externalTemplateOverrides;
/**
* @var array A 2-d map overriding serverTemplate and
* externalTemplateOverrides on a server-by-server basis. Applies to both
* core and external storage
*/
- protected $templateOverridesByServer;
+ private $templateOverridesByServer;
/** @var array A 2-d map overriding the server info by external storage cluster */
- protected $templateOverridesByCluster;
+ private $templateOverridesByCluster;
/** @var array An override array for all master servers */
- protected $masterTemplateOverrides;
+ private $masterTemplateOverrides;
/**
* @var array|bool A map of section name to read-only message. Missing or
* false for read/write
*/
- protected $readOnlyBySection = array();
+ private $readOnlyBySection = array();
// Other stuff
/** @var array Load balancer factory configuration */
- protected $conf;
+ private $conf;
/** @var LoadBalancer[] */
- protected $mainLBs = array();
+ private $mainLBs = array();
/** @var LoadBalancer[] */
- protected $extLBs = array();
+ private $extLBs = array();
/** @var string */
- protected $lastWiki;
+ private $lastWiki;
/** @var string */
- protected $lastSection;
+ private $lastSection;
/**
* @param array $conf
* @throws MWException
*/
- function __construct( $conf ) {
+ public function __construct( array $conf ) {
$this->chronProt = new ChronologyProtector;
$this->conf = $conf;
$required = array( 'sectionsByDB', 'sectionLoads', 'serverTemplate' );
@@ -186,7 +186,7 @@ class LBFactoryMulti extends LBFactory {
* @param bool|string $wiki
* @return string
*/
- function getSectionForWiki( $wiki = false ) {
+ private function getSectionForWiki( $wiki = false ) {
if ( $this->lastWiki === $wiki ) {
return $this->lastSection;
}
@@ -206,7 +206,7 @@ class LBFactoryMulti extends LBFactory {
* @param bool|string $wiki
* @return LoadBalancer
*/
- function newMainLB( $wiki = false ) {
+ public function newMainLB( $wiki = false ) {
list( $dbName, ) = $this->getDBNameAndPrefix( $wiki );
$section = $this->getSectionForWiki( $wiki );
$groupLoads = array();
@@ -229,7 +229,7 @@ class LBFactoryMulti extends LBFactory {
* @param bool|string $wiki
* @return LoadBalancer
*/
- function getMainLB( $wiki = false ) {
+ public function getMainLB( $wiki = false ) {
$section = $this->getSectionForWiki( $wiki );
if ( !isset( $this->mainLBs[$section] ) ) {
$lb = $this->newMainLB( $wiki, $section );
@@ -247,7 +247,7 @@ class LBFactoryMulti extends LBFactory {
* @throws MWException
* @return LoadBalancer
*/
- function newExternalLB( $cluster, $wiki = false ) {
+ protected function newExternalLB( $cluster, $wiki = false ) {
if ( !isset( $this->externalLoads[$cluster] ) ) {
throw new MWException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
}
@@ -267,7 +267,7 @@ class LBFactoryMulti extends LBFactory {
* @param bool|string $wiki Wiki ID, or false for the current wiki
* @return LoadBalancer
*/
- function &getExternalLB( $cluster, $wiki = false ) {
+ public function &getExternalLB( $cluster, $wiki = false ) {
if ( !isset( $this->extLBs[$cluster] ) ) {
$this->extLBs[$cluster] = $this->newExternalLB( $cluster, $wiki );
$this->extLBs[$cluster]->parentInfo( array( 'id' => "ext-$cluster" ) );
@@ -285,7 +285,7 @@ class LBFactoryMulti extends LBFactory {
* @param array $groupLoads
* @return LoadBalancer
*/
- function newLoadBalancer( $template, $loads, $groupLoads ) {
+ private function newLoadBalancer( $template, $loads, $groupLoads ) {
$servers = $this->makeServerArray( $template, $loads, $groupLoads );
$lb = new LoadBalancer( array(
'servers' => $servers,
@@ -302,7 +302,7 @@ class LBFactoryMulti extends LBFactory {
* @param array $groupLoads
* @return array
*/
- function makeServerArray( $template, $loads, $groupLoads ) {
+ private function makeServerArray( $template, $loads, $groupLoads ) {
$servers = array();
$master = true;
$groupLoadsByServer = $this->reindexGroupLoads( $groupLoads );
@@ -344,7 +344,7 @@ class LBFactoryMulti extends LBFactory {
* @param array $groupLoads
* @return array
*/
- function reindexGroupLoads( $groupLoads ) {
+ private function reindexGroupLoads( $groupLoads ) {
$reindexed = array();
foreach ( $groupLoads as $group => $loads ) {
foreach ( $loads as $server => $load ) {
@@ -360,7 +360,7 @@ class LBFactoryMulti extends LBFactory {
* @param bool|string $wiki
* @return array
*/
- function getDBNameAndPrefix( $wiki = false ) {
+ private function getDBNameAndPrefix( $wiki = false ) {
if ( $wiki === false ) {
global $wgDBname, $wgDBprefix;
@@ -377,7 +377,7 @@ class LBFactoryMulti extends LBFactory {
* @param callable $callback
* @param array $params
*/
- function forEachLB( $callback, $params = array() ) {
+ public function forEachLB( $callback, array $params = array() ) {
foreach ( $this->mainLBs as $lb ) {
call_user_func_array( $callback, array_merge( array( $lb ), $params ) );
}
@@ -386,7 +386,7 @@ class LBFactoryMulti extends LBFactory {
}
}
- function shutdown() {
+ public function shutdown() {
foreach ( $this->mainLBs as $lb ) {
$this->chronProt->shutdownLB( $lb );
}
diff --git a/includes/db/LBFactorySingle.php b/includes/db/LBFactorySingle.php
index 3a4d829b..a41dadfa 100644
--- a/includes/db/LBFactorySingle.php
+++ b/includes/db/LBFactorySingle.php
@@ -26,13 +26,13 @@
*/
class LBFactorySingle extends LBFactory {
/** @var LoadBalancerSingle */
- protected $lb;
+ private $lb;
/**
* @param array $conf An associative array with one member:
* - connection: The DatabaseBase connection object
*/
- function __construct( $conf ) {
+ public function __construct( array $conf ) {
$this->lb = new LoadBalancerSingle( $conf );
}
@@ -40,7 +40,7 @@ class LBFactorySingle extends LBFactory {
* @param bool|string $wiki
* @return LoadBalancerSingle
*/
- function newMainLB( $wiki = false ) {
+ public function newMainLB( $wiki = false ) {
return $this->lb;
}
@@ -48,7 +48,7 @@ class LBFactorySingle extends LBFactory {
* @param bool|string $wiki
* @return LoadBalancerSingle
*/
- function getMainLB( $wiki = false ) {
+ public function getMainLB( $wiki = false ) {
return $this->lb;
}
@@ -57,7 +57,7 @@ class LBFactorySingle extends LBFactory {
* @param bool|string $wiki Wiki ID, or false for the current wiki
* @return LoadBalancerSingle
*/
- function newExternalLB( $cluster, $wiki = false ) {
+ protected function newExternalLB( $cluster, $wiki = false ) {
return $this->lb;
}
@@ -66,7 +66,7 @@ class LBFactorySingle extends LBFactory {
* @param bool|string $wiki Wiki ID, or false for the current wiki
* @return LoadBalancerSingle
*/
- function &getExternalLB( $cluster, $wiki = false ) {
+ public function &getExternalLB( $cluster, $wiki = false ) {
return $this->lb;
}
@@ -74,7 +74,7 @@ class LBFactorySingle extends LBFactory {
* @param string|callable $callback
* @param array $params
*/
- function forEachLB( $callback, $params = array() ) {
+ public function forEachLB( $callback, array $params = array() ) {
call_user_func_array( $callback, array_merge( array( $this->lb ), $params ) );
}
}
@@ -84,12 +84,12 @@ class LBFactorySingle extends LBFactory {
*/
class LoadBalancerSingle extends LoadBalancer {
/** @var DatabaseBase */
- protected $db;
+ private $db;
/**
* @param array $params
*/
- function __construct( $params ) {
+ public function __construct( array $params ) {
$this->db = $params['connection'];
parent::__construct( array( 'servers' => array( array(
'type' => $this->db->getType(),
@@ -106,7 +106,7 @@ class LoadBalancerSingle extends LoadBalancer {
*
* @return DatabaseBase
*/
- function reallyOpenConnection( $server, $dbNameOverride = false ) {
+ protected function reallyOpenConnection( $server, $dbNameOverride = false ) {
return $this->db;
}
}
diff --git a/includes/db/LoadBalancer.php b/includes/db/LoadBalancer.php
index e517a025..d9584e14 100644
--- a/includes/db/LoadBalancer.php
+++ b/includes/db/LoadBalancer.php
@@ -28,13 +28,13 @@
* @ingroup Database
*/
class LoadBalancer {
- /** @var array Map of (server index => server config array) */
+ /** @var array[] Map of (server index => server config array) */
private $mServers;
- /** @var array Map of (local/foreignUsed/foreignFree => server index => DatabaseBase array) */
+ /** @var array[] Map of (local/foreignUsed/foreignFree => server index => DatabaseBase array) */
private $mConns;
/** @var array Map of (server index => weight) */
private $mLoads;
- /** @var array Map of (group => server index => weight) */
+ /** @var array[] Map of (group => server index => weight) */
private $mGroupLoads;
/** @var bool Whether to disregard slave lag as a factor in slave selection */
private $mAllowLagged;
@@ -58,8 +58,13 @@ class LoadBalancer {
private $mLaggedSlaveMode;
/** @var string The last DB selection or connection error */
private $mLastError = 'Unknown error';
- /** @var array Process cache of LoadMonitor::getLagTimes() */
- private $mLagTimes;
+ /** @var integer Total connections opened */
+ private $connsOpened = 0;
+ /** @var ProcessCacheLRU */
+ private $mProcCache;
+
+ /** @var integer Warn when this many connection are held */
+ const CONN_HELD_WARN_THRESHOLD = 10;
/**
* @param array $params Array with keys:
@@ -67,7 +72,7 @@ class LoadBalancer {
* loadMonitor Name of a class used to fetch server lag and load.
* @throws MWException
*/
- function __construct( $params ) {
+ public function __construct( array $params ) {
if ( !isset( $params['servers'] ) ) {
throw new MWException( __CLASS__ . ': missing servers parameter' );
}
@@ -108,6 +113,8 @@ class LoadBalancer {
}
}
}
+
+ $this->mProcCache = new ProcessCacheLRU( 30 );
}
/**
@@ -115,7 +122,7 @@ class LoadBalancer {
*
* @return LoadMonitor
*/
- function getLoadMonitor() {
+ private function getLoadMonitor() {
if ( !isset( $this->mLoadMonitor ) ) {
$class = $this->mLoadMonitorClass;
$this->mLoadMonitor = new $class( $this );
@@ -129,7 +136,7 @@ class LoadBalancer {
* @param mixed $x
* @return mixed
*/
- function parentInfo( $x = null ) {
+ public function parentInfo( $x = null ) {
return wfSetVar( $this->mParentInfo, $x );
}
@@ -142,24 +149,30 @@ class LoadBalancer {
* @param array $weights
* @return bool|int|string
*/
- function pickRandom( $weights ) {
+ public function pickRandom( array $weights ) {
return ArrayUtils::pickRandom( $weights );
}
/**
* @param array $loads
* @param bool|string $wiki Wiki to get non-lagged for
+ * @param float $maxLag Restrict the maximum allowed lag to this many seconds
* @return bool|int|string
*/
- function getRandomNonLagged( $loads, $wiki = false ) {
- # Unset excessively lagged servers
+ private function getRandomNonLagged( array $loads, $wiki = false, $maxLag = INF ) {
$lags = $this->getLagTimes( $wiki );
+
+ # Unset excessively lagged servers
foreach ( $lags as $i => $lag ) {
if ( $i != 0 ) {
+ $maxServerLag = $maxLag;
+ if ( isset( $this->mServers[$i]['max lag'] ) ) {
+ $maxServerLag = min( $maxServerLag, $this->mServers[$i]['max lag'] );
+ }
if ( $lag === false ) {
wfDebugLog( 'replication', "Server #$i is not replicating" );
unset( $loads[$i] );
- } elseif ( isset( $this->mServers[$i]['max lag'] ) && $lag > $this->mServers[$i]['max lag'] ) {
+ } elseif ( $lag > $maxServerLag ) {
wfDebugLog( 'replication', "Server #$i is excessively lagged ($lag seconds)" );
unset( $loads[$i] );
}
@@ -195,12 +208,12 @@ class LoadBalancer {
* always return a consistent index during a given invocation
*
* Side effect: opens connections to databases
- * @param bool|string $group
- * @param bool|string $wiki
+ * @param string|bool $group Query group, or false for the generic reader
+ * @param string|bool $wiki Wiki ID, or false for the current wiki
* @throws MWException
* @return bool|int|string
*/
- function getReaderIndex( $group = false, $wiki = false ) {
+ public function getReaderIndex( $group = false, $wiki = false ) {
global $wgReadOnly, $wgDBtype;
# @todo FIXME: For now, only go through all this for mysql databases
@@ -216,8 +229,6 @@ class LoadBalancer {
return $this->mReadIndex;
}
- $section = new ProfileSection( __METHOD__ );
-
# Find the relevant load array
if ( $group !== false ) {
if ( isset( $this->mGroupLoads[$group] ) ) {
@@ -250,7 +261,19 @@ class LoadBalancer {
if ( $wgReadOnly || $this->mAllowLagged || $laggedSlaveMode ) {
$i = ArrayUtils::pickRandom( $currentLoads );
} else {
- $i = $this->getRandomNonLagged( $currentLoads, $wiki );
+ $i = false;
+ if ( $this->mWaitForPos && $this->mWaitForPos->asOfTime() ) {
+ # ChronologyProtecter causes mWaitForPos to be set via sessions.
+ # This triggers doWait() after connect, so it's especially good to
+ # avoid lagged servers so as to avoid just blocking in that method.
+ $ago = microtime( true ) - $this->mWaitForPos->asOfTime();
+ # Aim for <= 1 second of waiting (being too picky can backfire)
+ $i = $this->getRandomNonLagged( $currentLoads, $wiki, $ago + 1 );
+ }
+ if ( $i === false ) {
+ # Any server with less lag than it's 'max lag' param is preferable
+ $i = $this->getRandomNonLagged( $currentLoads, $wiki );
+ }
if ( $i === false && count( $currentLoads ) != 0 ) {
# All slaves lagged. Switch to read-only mode
wfDebugLog( 'replication', "All slaves lagged. Switch to read-only mode" );
@@ -305,36 +328,23 @@ class LoadBalancer {
$this->mServers[$i]['slave pos'] = $conn->getSlavePos();
}
}
- if ( $this->mReadIndex <= 0 && $this->mLoads[$i] > 0 && $group !== false ) {
+ if ( $this->mReadIndex <= 0 && $this->mLoads[$i] > 0 && $group === false ) {
$this->mReadIndex = $i;
}
+ $serverName = $this->getServerName( $i );
+ wfDebug( __METHOD__ . ": using server $serverName for group '$group'\n" );
}
return $i;
}
/**
- * Wait for a specified number of microseconds, and return the period waited
- * @param int $t
- * @return int
- */
- function sleep( $t ) {
- wfProfileIn( __METHOD__ );
- wfDebug( __METHOD__ . ": waiting $t us\n" );
- usleep( $t );
- wfProfileOut( __METHOD__ );
-
- return $t;
- }
-
- /**
* Set the master wait position
* If a DB_SLAVE connection has been opened already, waits
* Otherwise sets a variable telling it to wait if such a connection is opened
* @param DBMasterPos $pos
*/
public function waitFor( $pos ) {
- wfProfileIn( __METHOD__ );
$this->mWaitForPos = $pos;
$i = $this->mReadIndex;
@@ -344,7 +354,6 @@ class LoadBalancer {
$this->mLaggedSlaveMode = true;
}
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -354,7 +363,6 @@ class LoadBalancer {
* @return bool Success (able to connect and no timeouts reached)
*/
public function waitForAll( $pos, $timeout = null ) {
- wfProfileIn( __METHOD__ );
$this->mWaitForPos = $pos;
$serverCount = count( $this->mServers );
@@ -364,7 +372,6 @@ class LoadBalancer {
$ok = $this->doWait( $i, true, $timeout ) && $ok;
}
}
- wfProfileOut( __METHOD__ );
return $ok;
}
@@ -376,7 +383,7 @@ class LoadBalancer {
* @param int $i
* @return DatabaseBase|bool False on failure
*/
- function getAnyOpenConnection( $i ) {
+ public function getAnyOpenConnection( $i ) {
foreach ( $this->mConns as $conns ) {
if ( !empty( $conns[$i] ) ) {
return reset( $conns[$i] );
@@ -394,7 +401,9 @@ class LoadBalancer {
* @return bool
*/
protected function doWait( $index, $open = false, $timeout = null ) {
- # Find a connection to wait on
+ $close = false; // close the connection afterwards
+
+ # Find a connection to wait on, creating one if needed and allowed
$conn = $this->getAnyOpenConnection( $index );
if ( !$conn ) {
if ( !$open ) {
@@ -408,6 +417,9 @@ class LoadBalancer {
return false;
}
+ // Avoid connection spam in waitForAll() when connections
+ // are made just for the sake of doing this lag check.
+ $close = true;
}
}
@@ -417,14 +429,21 @@ class LoadBalancer {
if ( $result == -1 || is_null( $result ) ) {
# Timed out waiting for slave, use master instead
- wfDebug( __METHOD__ . ": Timed out waiting for slave #$index pos {$this->mWaitForPos}\n" );
-
- return false;
+ $server = $this->mServers[$index]['host'];
+ $msg = __METHOD__ . ": Timed out waiting on $server pos {$this->mWaitForPos}";
+ wfDebug( "$msg\n" );
+ wfDebugLog( 'DBPerformance', "$msg:\n" . wfBacktrace( true ) );
+ $ok = false;
} else {
wfDebug( __METHOD__ . ": Done\n" );
+ $ok = true;
+ }
- return true;
+ if ( $close ) {
+ $this->closeConnection( $conn );
}
+
+ return $ok;
}
/**
@@ -432,17 +451,14 @@ class LoadBalancer {
* This is the main entry point for this class.
*
* @param int $i Server index
- * @param array $groups Query groups
- * @param bool|string $wiki Wiki ID
+ * @param array|string|bool $groups Query group(s), or false for the generic reader
+ * @param string|bool $wiki Wiki ID, or false for the current wiki
*
* @throws MWException
* @return DatabaseBase
*/
- public function &getConnection( $i, $groups = array(), $wiki = false ) {
- wfProfileIn( __METHOD__ );
-
+ public function getConnection( $i, $groups = array(), $wiki = false ) {
if ( $i === null || $i === false ) {
- wfProfileOut( __METHOD__ );
throw new MWException( 'Attempt to call ' . __METHOD__ .
' with invalid server index' );
}
@@ -451,22 +467,20 @@ class LoadBalancer {
$wiki = false;
}
- # Query groups
+ $groups = ( $groups === false || $groups === array() )
+ ? array( false ) // check one "group": the generic pool
+ : (array)$groups;
+
+ $masterOnly = ( $i == DB_MASTER || $i == $this->getWriterIndex() );
+ $oldConnsOpened = $this->connsOpened; // connections open now
+
if ( $i == DB_MASTER ) {
$i = $this->getWriterIndex();
- } elseif ( !is_array( $groups ) ) {
- $groupIndex = $this->getReaderIndex( $groups, $wiki );
- if ( $groupIndex !== false ) {
- $serverName = $this->getServerName( $groupIndex );
- wfDebug( __METHOD__ . ": using server $serverName for group $groups\n" );
- $i = $groupIndex;
- }
} else {
+ # Try to find an available server in any the query groups (in order)
foreach ( $groups as $group ) {
$groupIndex = $this->getReaderIndex( $group, $wiki );
if ( $groupIndex !== false ) {
- $serverName = $this->getServerName( $groupIndex );
- wfDebug( __METHOD__ . ": using server $serverName for group $group\n" );
$i = $groupIndex;
break;
}
@@ -476,11 +490,13 @@ class LoadBalancer {
# Operation-based index
if ( $i == DB_SLAVE ) {
$this->mLastError = 'Unknown error'; // reset error string
- $i = $this->getReaderIndex( false, $wiki );
+ # Try the general server pool if $groups are unavailable.
+ $i = in_array( false, $groups, true )
+ ? false // don't bother with this if that is what was tried above
+ : $this->getReaderIndex( false, $wiki );
# Couldn't find a working server in getReaderIndex()?
if ( $i === false ) {
$this->mLastError = 'No working slave server: ' . $this->mLastError;
- wfProfileOut( __METHOD__ );
return $this->reportConnectionError();
}
@@ -489,12 +505,17 @@ class LoadBalancer {
# Now we have an explicit index into the servers array
$conn = $this->openConnection( $i, $wiki );
if ( !$conn ) {
- wfProfileOut( __METHOD__ );
return $this->reportConnectionError();
}
- wfProfileOut( __METHOD__ );
+ # Profile any new connections that happen
+ if ( $this->connsOpened > $oldConnsOpened ) {
+ $host = $conn->getServer();
+ $dbname = $conn->getDBname();
+ $trxProf = Profiler::instance()->getTransactionProfiler();
+ $trxProf->recordConnection( $host, $dbname, $masterOnly );
+ }
return $conn;
}
@@ -556,8 +577,8 @@ class LoadBalancer {
* @see LoadBalancer::getConnection() for parameter information
*
* @param int $db
- * @param mixed $groups
- * @param bool|string $wiki
+ * @param array|string|bool $groups Query group(s), or false for the generic reader
+ * @param string|bool $wiki Wiki ID, or false for the current wiki
* @return DBConnRef
*/
public function getConnectionRef( $db, $groups = array(), $wiki = false ) {
@@ -572,8 +593,8 @@ class LoadBalancer {
* @see LoadBalancer::getConnection() for parameter information
*
* @param int $db
- * @param mixed $groups
- * @param bool|string $wiki
+ * @param array|string|bool $groups Query group(s), or false for the generic reader
+ * @param string|bool $wiki Wiki ID, or false for the current wiki
* @return DBConnRef
*/
public function getLazyConnectionRef( $db, $groups = array(), $wiki = false ) {
@@ -589,16 +610,14 @@ class LoadBalancer {
* error will be available via $this->mErrorConnection.
*
* @param int $i Server index
- * @param bool|string $wiki Wiki ID to open
+ * @param string|bool $wiki Wiki ID, or false for the current wiki
* @return DatabaseBase
*
* @access private
*/
- function openConnection( $i, $wiki = false ) {
- wfProfileIn( __METHOD__ );
+ public function openConnection( $i, $wiki = false ) {
if ( $wiki !== false ) {
$conn = $this->openForeignConnection( $i, $wiki );
- wfProfileOut( __METHOD__ );
return $conn;
}
@@ -617,7 +636,6 @@ class LoadBalancer {
$conn = false;
}
}
- wfProfileOut( __METHOD__ );
return $conn;
}
@@ -640,8 +658,7 @@ class LoadBalancer {
* @param string $wiki Wiki ID to open
* @return DatabaseBase
*/
- function openForeignConnection( $i, $wiki ) {
- wfProfileIn( __METHOD__ );
+ private function openForeignConnection( $i, $wiki ) {
list( $dbName, $prefix ) = wfSplitWikiID( $wiki );
if ( isset( $this->mConns['foreignUsed'][$i][$wiki] ) ) {
// Reuse an already-used connection
@@ -658,7 +675,9 @@ class LoadBalancer {
$conn = reset( $this->mConns['foreignFree'][$i] );
$oldWiki = key( $this->mConns['foreignFree'][$i] );
- if ( !$conn->selectDB( $dbName ) ) {
+ // The empty string as a DB name means "don't care".
+ // DatabaseMysqlBase::open() already handle this on connection.
+ if ( $dbName !== '' && !$conn->selectDB( $dbName ) ) {
$this->mLastError = "Error selecting database $dbName on server " .
$conn->getServer() . " from client host " . wfHostname() . "\n";
$this->mErrorConnection = $conn;
@@ -692,7 +711,6 @@ class LoadBalancer {
$refCount = $conn->getLBInfo( 'foreignPoolRefCount' );
$conn->setLBInfo( 'foreignPoolRefCount', $refCount + 1 );
}
- wfProfileOut( __METHOD__ );
return $conn;
}
@@ -704,7 +722,7 @@ class LoadBalancer {
* @access private
* @return bool
*/
- function isOpen( $index ) {
+ private function isOpen( $index ) {
if ( !is_integer( $index ) ) {
return false;
}
@@ -722,7 +740,7 @@ class LoadBalancer {
* @throws MWException
* @return DatabaseBase
*/
- function reallyOpenConnection( $server, $dbNameOverride = false ) {
+ protected function reallyOpenConnection( $server, $dbNameOverride = false ) {
if ( !is_array( $server ) ) {
throw new MWException( 'You must update your load-balancing configuration. ' .
'See DefaultSettings.php entry for $wgDBservers.' );
@@ -732,6 +750,14 @@ class LoadBalancer {
$server['dbname'] = $dbNameOverride;
}
+ // Log when many connection are made on requests
+ if ( ++$this->connsOpened >= self::CONN_HELD_WARN_THRESHOLD ) {
+ $masterAddr = $this->getServerName( 0 );
+ wfDebugLog( 'DBPerformance', __METHOD__ . ": " .
+ "{$this->connsOpened}+ connections made (master=$masterAddr)\n" .
+ wfBacktrace( true ) );
+ }
+
# Create object
try {
$db = DatabaseBase::factory( $server['type'], $server );
@@ -758,17 +784,27 @@ class LoadBalancer {
*/
private function reportConnectionError() {
$conn = $this->mErrorConnection; // The connection which caused the error
+ $context = array(
+ 'method' => __METHOD__,
+ 'last_error' => $this->mLastError,
+ );
if ( !is_object( $conn ) ) {
// No last connection, probably due to all servers being too busy
- wfLogDBError( "LB failure with no last connection. Connection error: {$this->mLastError}" );
+ wfLogDBError(
+ "LB failure with no last connection. Connection error: {last_error}",
+ $context
+ );
// If all servers were busy, mLastError will contain something sensible
throw new DBConnectionError( null, $this->mLastError );
} else {
- $server = $conn->getProperty( 'mServer' );
- wfLogDBError( "Connection error: {$this->mLastError} ({$server})" );
- $conn->reportConnectionError( "{$this->mLastError} ({$server})" ); // throws DBConnectionError
+ $context['db_server'] = $conn->getProperty( 'mServer' );
+ wfLogDBError(
+ "Connection error: {last_error} ({db_server})",
+ $context
+ );
+ $conn->reportConnectionError( "{$this->mLastError} ({$context['db_server']})" ); // throws DBConnectionError
}
return false; /* not reached */
@@ -777,7 +813,7 @@ class LoadBalancer {
/**
* @return int
*/
- function getWriterIndex() {
+ private function getWriterIndex() {
return 0;
}
@@ -787,7 +823,7 @@ class LoadBalancer {
* @param string $i
* @return bool
*/
- function haveIndex( $i ) {
+ public function haveIndex( $i ) {
return array_key_exists( $i, $this->mServers );
}
@@ -797,7 +833,7 @@ class LoadBalancer {
* @param string $i
* @return bool
*/
- function isNonZeroLoad( $i ) {
+ public function isNonZeroLoad( $i ) {
return array_key_exists( $i, $this->mServers ) && $this->mLoads[$i] != 0;
}
@@ -806,7 +842,7 @@ class LoadBalancer {
*
* @return int
*/
- function getServerCount() {
+ public function getServerCount() {
return count( $this->mServers );
}
@@ -816,7 +852,7 @@ class LoadBalancer {
* @param string $i
* @return string
*/
- function getServerName( $i ) {
+ public function getServerName( $i ) {
if ( isset( $this->mServers[$i]['hostName'] ) ) {
return $this->mServers[$i]['hostName'];
} elseif ( isset( $this->mServers[$i]['host'] ) ) {
@@ -831,7 +867,7 @@ class LoadBalancer {
* @param int $i
* @return array|bool
*/
- function getServerInfo( $i ) {
+ public function getServerInfo( $i ) {
if ( isset( $this->mServers[$i] ) ) {
return $this->mServers[$i];
} else {
@@ -845,7 +881,7 @@ class LoadBalancer {
* @param int $i
* @param array $serverInfo
*/
- function setServerInfo( $i, $serverInfo ) {
+ public function setServerInfo( $i, array $serverInfo ) {
$this->mServers[$i] = $serverInfo;
}
@@ -853,7 +889,7 @@ class LoadBalancer {
* Get the current master position for chronology control purposes
* @return mixed
*/
- function getMasterPos() {
+ public function getMasterPos() {
# If this entire request was served from a slave without opening a connection to the
# master (however unlikely that may be), then we can fetch the position from the slave.
$masterConn = $this->getAnyOpenConnection( 0 );
@@ -879,7 +915,7 @@ class LoadBalancer {
/**
* Close all open connections
*/
- function closeAll() {
+ public function closeAll() {
foreach ( $this->mConns as $conns2 ) {
foreach ( $conns2 as $conns3 ) {
/** @var DatabaseBase $conn */
@@ -893,6 +929,7 @@ class LoadBalancer {
'foreignFree' => array(),
'foreignUsed' => array(),
);
+ $this->connsOpened = 0;
}
/**
@@ -901,7 +938,7 @@ class LoadBalancer {
* If you use $conn->close() directly, the load balancer won't update its state.
* @param DatabaseBase $conn
*/
- function closeConnection( $conn ) {
+ public function closeConnection( $conn ) {
$done = false;
foreach ( $this->mConns as $i1 => $conns2 ) {
foreach ( $conns2 as $i2 => $conns3 ) {
@@ -909,6 +946,7 @@ class LoadBalancer {
if ( $conn === $candidateConn ) {
$conn->close();
unset( $this->mConns[$i1][$i2][$i3] );
+ --$this->connsOpened;
$done = true;
break;
}
@@ -923,7 +961,7 @@ class LoadBalancer {
/**
* Commit transactions on all open connections
*/
- function commitAll() {
+ public function commitAll() {
foreach ( $this->mConns as $conns2 ) {
foreach ( $conns2 as $conns3 ) {
/** @var DatabaseBase[] $conns3 */
@@ -939,8 +977,7 @@ class LoadBalancer {
/**
* Issue COMMIT only on master, only if queries were done on connection
*/
- function commitMasterChanges() {
- // Always 0, but who knows.. :)
+ public function commitMasterChanges() {
$masterIndex = $this->getWriterIndex();
foreach ( $this->mConns as $conns2 ) {
if ( empty( $conns2[$masterIndex] ) ) {
@@ -959,8 +996,9 @@ class LoadBalancer {
* Issue ROLLBACK only on master, only if queries were done on connection
* @since 1.23
*/
- function rollbackMasterChanges() {
- // Always 0, but who knows.. :)
+ public function rollbackMasterChanges() {
+ $failedServers = array();
+
$masterIndex = $this->getWriterIndex();
foreach ( $this->mConns as $conns2 ) {
if ( empty( $conns2[$masterIndex] ) ) {
@@ -969,28 +1007,36 @@ class LoadBalancer {
/** @var DatabaseBase $conn */
foreach ( $conns2[$masterIndex] as $conn ) {
if ( $conn->trxLevel() && $conn->writesOrCallbacksPending() ) {
- $conn->rollback( __METHOD__, 'flush' );
+ try {
+ $conn->rollback( __METHOD__, 'flush' );
+ } catch ( DBError $e ) {
+ MWExceptionHandler::logException( $e );
+ $failedServers[] = $conn->getServer();
+ }
}
}
}
+
+ if ( $failedServers ) {
+ throw new DBExpectedError( null, "Rollback failed on server(s) " .
+ implode( ', ', array_unique( $failedServers ) ) );
+ }
}
/**
* @return bool Whether a master connection is already open
* @since 1.24
*/
- function hasMasterConnection() {
+ public function hasMasterConnection() {
return $this->isOpen( $this->getWriterIndex() );
}
/**
- * Determine if there are any pending changes that need to be rolled back
- * or committed.
+ * Determine if there are pending changes in a transaction by this thread
* @since 1.23
* @return bool
*/
- function hasMasterChanges() {
- // Always 0, but who knows.. :)
+ public function hasMasterChanges() {
$masterIndex = $this->getWriterIndex();
foreach ( $this->mConns as $conns2 ) {
if ( empty( $conns2[$masterIndex] ) ) {
@@ -1007,17 +1053,52 @@ class LoadBalancer {
}
/**
+ * Get the timestamp of the latest write query done by this thread
+ * @since 1.25
+ * @return float|bool UNIX timestamp or false
+ */
+ public function lastMasterChangeTimestamp() {
+ $lastTime = false;
+ $masterIndex = $this->getWriterIndex();
+ foreach ( $this->mConns as $conns2 ) {
+ if ( empty( $conns2[$masterIndex] ) ) {
+ continue;
+ }
+ /** @var DatabaseBase $conn */
+ foreach ( $conns2[$masterIndex] as $conn ) {
+ $lastTime = max( $lastTime, $conn->lastDoneWrites() );
+ }
+ }
+ return $lastTime;
+ }
+
+ /**
+ * Check if this load balancer object had any recent or still
+ * pending writes issued against it by this PHP thread
+ *
+ * @param float $age How many seconds ago is "recent" [defaults to mWaitTimeout]
+ * @return bool
+ * @since 1.25
+ */
+ public function hasOrMadeRecentMasterChanges( $age = null ) {
+ $age = ( $age === null ) ? $this->mWaitTimeout : $age;
+
+ return ( $this->hasMasterChanges()
+ || $this->lastMasterChangeTimestamp() > microtime( true ) - $age );
+ }
+
+ /**
* @param mixed $value
* @return mixed
*/
- function waitTimeout( $value = null ) {
+ public function waitTimeout( $value = null ) {
return wfSetVar( $this->mWaitTimeout, $value );
}
/**
* @return bool
*/
- function getLaggedSlaveMode() {
+ public function getLaggedSlaveMode() {
return $this->mLaggedSlaveMode;
}
@@ -1026,7 +1107,7 @@ class LoadBalancer {
* @param null|bool $mode
* @return bool
*/
- function allowLagged( $mode = null ) {
+ public function allowLagged( $mode = null ) {
if ( $mode === null ) {
return $this->mAllowLagged;
}
@@ -1038,7 +1119,7 @@ class LoadBalancer {
/**
* @return bool
*/
- function pingAll() {
+ public function pingAll() {
$success = true;
foreach ( $this->mConns as $conns2 ) {
foreach ( $conns2 as $conns3 ) {
@@ -1059,7 +1140,7 @@ class LoadBalancer {
* @param callable $callback
* @param array $params
*/
- function forEachOpenConnection( $callback, $params = array() ) {
+ public function forEachOpenConnection( $callback, array $params = array() ) {
foreach ( $this->mConns as $conns2 ) {
foreach ( $conns2 as $conns3 ) {
foreach ( $conns3 as $conn ) {
@@ -1071,7 +1152,8 @@ class LoadBalancer {
}
/**
- * Get the hostname and lag time of the most-lagged slave.
+ * Get the hostname and lag time of the most-lagged slave
+ *
* This is useful for maintenance scripts that need to throttle their updates.
* May attempt to open connections to slaves on the default DB. If there is
* no lag, the maximum lag will be reported as -1.
@@ -1079,72 +1161,50 @@ class LoadBalancer {
* @param bool|string $wiki Wiki ID, or false for the default database
* @return array ( host, max lag, index of max lagged host )
*/
- function getMaxLag( $wiki = false ) {
+ public function getMaxLag( $wiki = false ) {
$maxLag = -1;
$host = '';
$maxIndex = 0;
- if ( $this->getServerCount() <= 1 ) { // no replication = no lag
- return array( $host, $maxLag, $maxIndex );
+ if ( $this->getServerCount() <= 1 ) {
+ return array( $host, $maxLag, $maxIndex ); // no replication = no lag
}
- // Try to get the max lag info from the server cache
- $key = 'loadbalancer:maxlag:cluster:' . $this->mServers[0]['host'];
- $cache = ObjectCache::newAccelerator( array(), 'hash' );
- $maxLagInfo = $cache->get( $key ); // (host, lag, index)
-
- // Fallback to connecting to each slave and getting the lag
- if ( !$maxLagInfo ) {
- foreach ( $this->mServers as $i => $conn ) {
- if ( $i == $this->getWriterIndex() ) {
- continue; // nothing to check
- }
- $conn = false;
- if ( $wiki === false ) {
- $conn = $this->getAnyOpenConnection( $i );
- }
- if ( !$conn ) {
- $conn = $this->openConnection( $i, $wiki );
- }
- if ( !$conn ) {
- continue;
- }
- $lag = $conn->getLag();
- if ( $lag > $maxLag ) {
- $maxLag = $lag;
- $host = $this->mServers[$i]['host'];
- $maxIndex = $i;
- }
+ $lagTimes = $this->getLagTimes( $wiki );
+ foreach ( $lagTimes as $i => $lag ) {
+ if ( $lag > $maxLag ) {
+ $maxLag = $lag;
+ $host = $this->mServers[$i]['host'];
+ $maxIndex = $i;
}
- $maxLagInfo = array( $host, $maxLag, $maxIndex );
- $cache->set( $key, $maxLagInfo, 5 );
}
- return $maxLagInfo;
+ return array( $host, $maxLag, $maxIndex );
}
/**
* Get lag time for each server
- * Results are cached for a short time in memcached, and indefinitely in the process cache
+ *
+ * Results are cached for a short time in memcached/process cache
*
* @param string|bool $wiki
- * @return array
+ * @return int[] Map of (server index => seconds)
*/
- function getLagTimes( $wiki = false ) {
- # Try process cache
- if ( isset( $this->mLagTimes ) ) {
- return $this->mLagTimes;
+ public function getLagTimes( $wiki = false ) {
+ if ( $this->getServerCount() <= 1 ) {
+ return array( 0 => 0 ); // no replication = no lag
}
- if ( $this->getServerCount() == 1 ) {
- # No replication
- $this->mLagTimes = array( 0 => 0 );
- } else {
- # Send the request to the load monitor
- $this->mLagTimes = $this->getLoadMonitor()->getLagTimes(
- array_keys( $this->mServers ), $wiki );
+
+ if ( $this->mProcCache->has( 'slave_lag', 'times', 1 ) ) {
+ return $this->mProcCache->get( 'slave_lag', 'times' );
}
- return $this->mLagTimes;
+ # Send the request to the load monitor
+ $times = $this->getLoadMonitor()->getLagTimes( array_keys( $this->mServers ), $wiki );
+
+ $this->mProcCache->set( 'slave_lag', 'times', $times );
+
+ return $times;
}
/**
@@ -1161,7 +1221,7 @@ class LoadBalancer {
* @param DatabaseBase $conn
* @return int
*/
- function safeGetLag( $conn ) {
+ public function safeGetLag( $conn ) {
if ( $this->getServerCount() == 1 ) {
return 0;
} else {
@@ -1170,15 +1230,15 @@ class LoadBalancer {
}
/**
- * Clear the cache for getLagTimes
+ * Clear the cache for slag lag delay times
*/
- function clearLagTimeCache() {
- $this->mLagTimes = null;
+ public function clearLagTimeCache() {
+ $this->mProcCache->clear( 'slave_lag' );
}
}
/**
- * Helper class to handle automatically marking connectons as reusable (via RAII pattern)
+ * Helper class to handle automatically marking connections as reusable (via RAII pattern)
* as well handling deferring the actual network connection until the handle is used
*
* @ingroup Database
@@ -1186,13 +1246,13 @@ class LoadBalancer {
*/
class DBConnRef implements IDatabase {
/** @var LoadBalancer */
- protected $lb;
+ private $lb;
/** @var DatabaseBase|null */
- protected $conn;
+ private $conn;
/** @var array|null */
- protected $params;
+ private $params;
/**
* @param LoadBalancer $lb
@@ -1216,7 +1276,7 @@ class DBConnRef implements IDatabase {
return call_user_func_array( array( $this->conn, $name ), $arguments );
}
- function __destruct() {
+ public function __destruct() {
if ( $this->conn !== null ) {
$this->lb->reuseConnection( $this->conn );
}
diff --git a/includes/db/LoadMonitor.php b/includes/db/LoadMonitor.php
index 7281485b..91840dd9 100644
--- a/includes/db/LoadMonitor.php
+++ b/includes/db/LoadMonitor.php
@@ -48,7 +48,7 @@ interface LoadMonitor {
* @param array $serverIndexes
* @param string $wiki
*
- * @return array
+ * @return array Map of (server index => seconds)
*/
public function getLagTimes( $serverIndexes, $wiki );
}
@@ -93,8 +93,6 @@ class LoadMonitorMySQL implements LoadMonitor {
return array( 0 => 0 );
}
- $section = new ProfileSection( __METHOD__ );
-
$expiry = 5;
$requestRate = 10;
diff --git a/includes/db/ORMTable.php b/includes/db/ORMTable.php
index 2f898b75..562a8106 100644
--- a/includes/db/ORMTable.php
+++ b/includes/db/ORMTable.php
@@ -129,6 +129,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
* Gets the db field prefix.
*
* @since 1.20
+ * @deprecated since 1.25, use the $this->fieldPrefix property instead
*
* @return string
*/
@@ -189,7 +190,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
}
/**
- * Selects the the specified fields of the records matching the provided
+ * Selects the specified fields of the records matching the provided
* conditions and returns them as DBDataObject. Field names get prefixed.
*
* @since 1.20
@@ -210,7 +211,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
}
/**
- * Selects the the specified fields of the records matching the provided
+ * Selects the specified fields of the records matching the provided
* conditions and returns them as DBDataObject. Field names get prefixed.
*
* @since 1.20
@@ -247,8 +248,8 @@ class ORMTable extends DBAccessBase implements IORMTable {
* @param array $options
* @param null|string $functionName
* @return ResultWrapper
- * @throws DBQueryError If the query failed (even if the database was in
- * ignoreErrors mode).
+ * @throws Exception
+ * @throws MWException
*/
public function rawSelect( $fields = null, array $conditions = array(),
array $options = array(), $functionName = null
@@ -295,7 +296,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
}
/**
- * Selects the the specified fields of the records matching the provided
+ * Selects the specified fields of the records matching the provided
* conditions and returns them as associative arrays.
* Provided field names get prefixed.
* Returned field names will not have a prefix.
@@ -345,7 +346,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
}
/**
- * Selects the the specified fields of the first matching record.
+ * Selects the specified fields of the first matching record.
* Field names get prefixed.
*
* @since 1.20
@@ -368,7 +369,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
}
/**
- * Selects the the specified fields of the records matching the provided
+ * Selects the specified fields of the records matching the provided
* conditions. Field names do NOT get prefixed.
*
* @since 1.20
@@ -399,7 +400,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
}
/**
- * Selects the the specified fields of the first record matching the provided
+ * Selects the specified fields of the first record matching the provided
* conditions and returns it as an associative array, or false when nothing matches.
* This method makes use of selectFields and expects the same parameters and
* returns the same results (if there are any, if there are none, this method returns false).
@@ -770,33 +771,54 @@ class ORMTable extends DBAccessBase implements IORMTable {
* @return string
*/
public function getPrefixedField( $field ) {
- return $this->getFieldPrefix() . $field;
+ return $this->fieldPrefix . $field;
}
/**
* Takes an array of field names with prefix and returns the unprefixed equivalent.
*
* @since 1.20
+ * @deprecated since 1.25, will be removed
*
- * @param array $fieldNames
+ * @param string[] $fieldNames
*
- * @return array
+ * @return string[]
*/
public function unprefixFieldNames( array $fieldNames ) {
- return array_map( array( $this, 'unprefixFieldName' ), $fieldNames );
+ wfDeprecated( __METHOD__, '1.25' );
+
+ return $this->stripFieldPrefix( $fieldNames );
+ }
+
+ /**
+ * Takes an array of field names with prefix and returns the unprefixed equivalent.
+ *
+ * @param string[] $fieldNames
+ *
+ * @return string[]
+ */
+ private function stripFieldPrefix( array $fieldNames ) {
+ $start = strlen( $this->fieldPrefix );
+
+ return array_map( function ( $fieldName ) use ( $start ) {
+ return substr( $fieldName, $start );
+ }, $fieldNames );
}
/**
* Takes a field name with prefix and returns the unprefixed equivalent.
*
* @since 1.20
+ * @deprecated since 1.25, will be removed
*
* @param string $fieldName
*
* @return string
*/
public function unprefixFieldName( $fieldName ) {
- return substr( $fieldName, strlen( $this->getFieldPrefix() ) );
+ wfDeprecated( __METHOD__, '1.25' );
+
+ return substr( $fieldName, strlen( $this->fieldPrefix ) );
}
/**
@@ -832,7 +854,7 @@ class ORMTable extends DBAccessBase implements IORMTable {
$result = (array)$result;
$rawFields = array_combine(
- $this->unprefixFieldNames( array_keys( $result ) ),
+ $this->stripFieldPrefix( array_keys( $result ) ),
array_values( $result )
);
diff --git a/includes/debug/MWDebug.php b/includes/debug/MWDebug.php
index c2f22233..ae2d9954 100644
--- a/includes/debug/MWDebug.php
+++ b/includes/debug/MWDebug.php
@@ -26,8 +26,6 @@
* By default, most methods do nothing ( self::$enabled = false ). You have
* to explicitly call MWDebug::init() to enabled them.
*
- * @todo Profiler support
- *
* @since 1.19
*/
class MWDebug {
@@ -46,7 +44,7 @@ class MWDebug {
protected static $debug = array();
/**
- * SQL statements of the databses queries.
+ * SQL statements of the database queries.
*
* @var array $query
*/
@@ -311,12 +309,25 @@ class MWDebug {
*
* @since 1.19
* @param string $str
+ * @param array $context
*/
- public static function debugMsg( $str ) {
+ public static function debugMsg( $str, $context = array() ) {
global $wgDebugComments, $wgShowDebug;
if ( self::$enabled || $wgDebugComments || $wgShowDebug ) {
- self::$debug[] = rtrim( UtfNormal::cleanUp( $str ) );
+ if ( $context ) {
+ $prefix = '';
+ if ( isset( $context['prefix'] ) ) {
+ $prefix = $context['prefix'];
+ } elseif ( isset( $context['channel'] ) && $context['channel'] !== 'wfDebug' ) {
+ $prefix = "[{$context['channel']}] ";
+ }
+ if ( isset( $context['seconds_elapsed'] ) && isset( $context['memory_used'] ) ) {
+ $prefix .= "{$context['seconds_elapsed']} {$context['memory_used']} ";
+ }
+ $str = $prefix . $str;
+ }
+ self::$debug[] = rtrim( UtfNormal\Validator::cleanUp( $str ) );
}
}
@@ -529,12 +540,11 @@ class MWDebug {
MWDebug::log( 'MWDebug output complete' );
$debugInfo = self::getDebugInfo( $context );
- $result->setIndexedTagName( $debugInfo, 'debuginfo' );
- $result->setIndexedTagName( $debugInfo['log'], 'line' );
- $result->setIndexedTagName( $debugInfo['debugLog'], 'msg' );
- $result->setIndexedTagName( $debugInfo['queries'], 'query' );
- $result->setIndexedTagName( $debugInfo['includes'], 'queries' );
- $result->setIndexedTagName( $debugInfo['profile'], 'function' );
+ ApiResult::setIndexedTagName( $debugInfo, 'debuginfo' );
+ ApiResult::setIndexedTagName( $debugInfo['log'], 'line' );
+ ApiResult::setIndexedTagName( $debugInfo['debugLog'], 'msg' );
+ ApiResult::setIndexedTagName( $debugInfo['queries'], 'query' );
+ ApiResult::setIndexedTagName( $debugInfo['includes'], 'queries' );
$result->addValue( null, 'debuginfo', $debugInfo );
}
@@ -578,7 +588,6 @@ class MWDebug {
'memory' => $context->getLanguage()->formatSize( memory_get_usage( $realMemoryUsage ) ),
'memoryPeak' => $context->getLanguage()->formatSize( memory_get_peak_usage( $realMemoryUsage ) ),
'includes' => self::getFilesIncluded( $context ),
- 'profile' => Profiler::instance()->getRawData(),
);
}
}
diff --git a/includes/debug/logger/LegacyLogger.php b/includes/debug/logger/LegacyLogger.php
new file mode 100644
index 00000000..edaef4a7
--- /dev/null
+++ b/includes/debug/logger/LegacyLogger.php
@@ -0,0 +1,380 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+use DateTimeZone;
+use MWDebug;
+use Psr\Log\AbstractLogger;
+use Psr\Log\LogLevel;
+use UDPTransport;
+
+/**
+ * PSR-3 logger that mimics the historic implementation of MediaWiki's
+ * wfErrorLog logging implementation.
+ *
+ * This logger is configured by the following global configuration variables:
+ * - `$wgDebugLogFile`
+ * - `$wgDebugLogGroups`
+ * - `$wgDBerrorLog`
+ * - `$wgDBerrorLogTZ`
+ *
+ * See documentation in DefaultSettings.php for detailed explanations of each
+ * variable.
+ *
+ * @see \MediaWiki\Logger\LoggerFactory
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class LegacyLogger extends AbstractLogger {
+
+ /**
+ * @var string $channel
+ */
+ protected $channel;
+
+ /**
+ * Convert Psr\Log\LogLevel constants into int for sane comparisons
+ * These are the same values that Monlog uses
+ *
+ * @var array
+ */
+ protected static $levelMapping = array(
+ LogLevel::DEBUG => 100,
+ LogLevel::INFO => 200,
+ LogLevel::NOTICE => 250,
+ LogLevel::WARNING => 300,
+ LogLevel::ERROR => 400,
+ LogLevel::CRITICAL => 500,
+ LogLevel::ALERT => 550,
+ LogLevel::EMERGENCY => 600,
+ );
+
+
+ /**
+ * @param string $channel
+ */
+ public function __construct( $channel ) {
+ $this->channel = $channel;
+ }
+
+ /**
+ * Logs with an arbitrary level.
+ *
+ * @param string|int $level
+ * @param string $message
+ * @param array $context
+ */
+ public function log( $level, $message, array $context = array() ) {
+ if ( self::shouldEmit( $this->channel, $message, $level, $context ) ) {
+ $text = self::format( $this->channel, $message, $context );
+ $destination = self::destination( $this->channel, $message, $context );
+ self::emit( $text, $destination );
+ }
+ // Add to debug toolbar
+ MWDebug::debugMsg( $message, array( 'channel' => $this->channel ) + $context );
+ }
+
+
+ /**
+ * Determine if the given message should be emitted or not.
+ *
+ * @param string $channel
+ * @param string $message
+ * @param string|int $level Psr\Log\LogEvent constant or Monlog level int
+ * @param array $context
+ * @return bool True if message should be sent to disk/network, false
+ * otherwise
+ */
+ public static function shouldEmit( $channel, $message, $level, $context ) {
+ global $wgDebugLogFile, $wgDBerrorLog, $wgDebugLogGroups;
+
+ if ( $channel === 'wfLogDBError' ) {
+ // wfLogDBError messages are emitted if a database log location is
+ // specfied.
+ $shouldEmit = (bool)$wgDBerrorLog;
+
+ } elseif ( $channel === 'wfErrorLog' ) {
+ // All messages on the wfErrorLog channel should be emitted.
+ $shouldEmit = true;
+
+ } elseif ( isset( $wgDebugLogGroups[$channel] ) ) {
+ $logConfig = $wgDebugLogGroups[$channel];
+
+ if ( is_array( $logConfig ) ) {
+ $shouldEmit = true;
+ if ( isset( $logConfig['sample'] ) ) {
+ // Emit randomly with a 1 in 'sample' chance for each message.
+ $shouldEmit = mt_rand( 1, $logConfig['sample'] ) === 1;
+ }
+
+ if ( isset( $logConfig['level'] ) ) {
+ if ( is_string( $level ) ) {
+ $level = self::$levelMapping[$level];
+ }
+ $shouldEmit = $level >= self::$levelMapping[$logConfig['level']];
+ }
+ } else {
+ // Emit unless the config value is explictly false.
+ $shouldEmit = $logConfig !== false;
+ }
+
+ } elseif ( isset( $context['private'] ) && $context['private'] ) {
+ // Don't emit if the message didn't match previous checks based on
+ // the channel and the event is marked as private. This check
+ // discards messages sent via wfDebugLog() with dest == 'private'
+ // and no explicit wgDebugLogGroups configuration.
+ $shouldEmit = false;
+ } else {
+ // Default return value is the same as the historic wfDebug
+ // method: emit if $wgDebugLogFile has been set.
+ $shouldEmit = $wgDebugLogFile != '';
+ }
+
+ return $shouldEmit;
+ }
+
+
+ /**
+ * Format a message.
+ *
+ * Messages to the 'wfDebug', 'wfLogDBError' and 'wfErrorLog' channels
+ * receive special fomatting to mimic the historic output of the functions
+ * of the same name. All other channel values are formatted based on the
+ * historic output of the `wfDebugLog()` global function.
+ *
+ * @param string $channel
+ * @param string $message
+ * @param array $context
+ * @return string
+ */
+ public static function format( $channel, $message, $context ) {
+ global $wgDebugLogGroups;
+
+ if ( $channel === 'wfDebug' ) {
+ $text = self::formatAsWfDebug( $channel, $message, $context );
+
+ } elseif ( $channel === 'wfLogDBError' ) {
+ $text = self::formatAsWfLogDBError( $channel, $message, $context );
+
+ } elseif ( $channel === 'wfErrorLog' ) {
+ $text = "{$message}\n";
+
+ } elseif ( $channel === 'profileoutput' ) {
+ // Legacy wfLogProfilingData formatitng
+ $forward = '';
+ if ( isset( $context['forwarded_for'] )) {
+ $forward = " forwarded for {$context['forwarded_for']}";
+ }
+ if ( isset( $context['client_ip'] ) ) {
+ $forward .= " client IP {$context['client_ip']}";
+ }
+ if ( isset( $context['from'] ) ) {
+ $forward .= " from {$context['from']}";
+ }
+ if ( $forward ) {
+ $forward = "\t(proxied via {$context['proxy']}{$forward})";
+ }
+ if ( $context['anon'] ) {
+ $forward .= ' anon';
+ }
+ if ( !isset( $context['url'] ) ) {
+ $context['url'] = 'n/a';
+ }
+
+ $log = sprintf( "%s\t%04.3f\t%s%s\n",
+ gmdate( 'YmdHis' ), $context['elapsed'], $context['url'], $forward );
+
+ $text = self::formatAsWfDebugLog(
+ $channel, $log . $context['output'], $context );
+
+ } elseif ( !isset( $wgDebugLogGroups[$channel] ) ) {
+ $text = self::formatAsWfDebug(
+ $channel, "[{$channel}] {$message}", $context );
+
+ } else {
+ // Default formatting is wfDebugLog's historic style
+ $text = self::formatAsWfDebugLog( $channel, $message, $context );
+ }
+
+ return self::interpolate( $text, $context );
+ }
+
+
+ /**
+ * Format a message as `wfDebug()` would have formatted it.
+ *
+ * @param string $channel
+ * @param string $message
+ * @param array $context
+ * @return string
+ */
+ protected static function formatAsWfDebug( $channel, $message, $context ) {
+ $text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $message );
+ if ( isset( $context['seconds_elapsed'] ) ) {
+ // Prepend elapsed request time and real memory usage with two
+ // trailing spaces.
+ $text = "{$context['seconds_elapsed']} {$context['memory_used']} {$text}";
+ }
+ if ( isset( $context['prefix'] ) ) {
+ $text = "{$context['prefix']}{$text}";
+ }
+ return "{$text}\n";
+ }
+
+
+ /**
+ * Format a message as `wfLogDBError()` would have formatted it.
+ *
+ * @param string $channel
+ * @param string $message
+ * @param array $context
+ * @return string
+ */
+ protected static function formatAsWfLogDBError( $channel, $message, $context ) {
+ global $wgDBerrorLogTZ;
+ static $cachedTimezone = null;
+
+ if ( $wgDBerrorLogTZ && !$cachedTimezone ) {
+ $cachedTimezone = new DateTimeZone( $wgDBerrorLogTZ );
+ }
+
+ // Workaround for https://bugs.php.net/bug.php?id=52063
+ // Can be removed when min PHP > 5.3.6
+ if ( $cachedTimezone === null ) {
+ $d = date_create( 'now' );
+ } else {
+ $d = date_create( 'now', $cachedTimezone );
+ }
+ $date = $d->format( 'D M j G:i:s T Y' );
+
+ $host = wfHostname();
+ $wiki = wfWikiID();
+
+ $text = "{$date}\t{$host}\t{$wiki}\t{$message}\n";
+ return $text;
+ }
+
+
+ /**
+ * Format a message as `wfDebugLog() would have formatted it.
+ *
+ * @param string $channel
+ * @param string $message
+ * @param array $context
+ */
+ protected static function formatAsWfDebugLog( $channel, $message, $context ) {
+ $time = wfTimestamp( TS_DB );
+ $wiki = wfWikiID();
+ $host = wfHostname();
+ $text = "{$time} {$host} {$wiki}: {$message}\n";
+ return $text;
+ }
+
+
+ /**
+ * Interpolate placeholders in logging message.
+ *
+ * @param string $message
+ * @param array $context
+ * @return string Interpolated message
+ */
+ public static function interpolate( $message, array $context ) {
+ if ( strpos( $message, '{' ) !== false ) {
+ $replace = array();
+ foreach ( $context as $key => $val ) {
+ $replace['{' . $key . '}'] = $val;
+ }
+ $message = strtr( $message, $replace );
+ }
+ return $message;
+ }
+
+
+ /**
+ * Select the appropriate log output destination for the given log event.
+ *
+ * If the event context contains 'destination'
+ *
+ * @param string $channel
+ * @param string $message
+ * @param array $context
+ * @return string
+ */
+ protected static function destination( $channel, $message, $context ) {
+ global $wgDebugLogFile, $wgDBerrorLog, $wgDebugLogGroups;
+
+ // Default destination is the debug log file as historically used by
+ // the wfDebug function.
+ $destination = $wgDebugLogFile;
+
+ if ( isset( $context['destination'] ) ) {
+ // Use destination explicitly provided in context
+ $destination = $context['destination'];
+
+ } elseif ( $channel === 'wfDebug' ) {
+ $destination = $wgDebugLogFile;
+
+ } elseif ( $channel === 'wfLogDBError' ) {
+ $destination = $wgDBerrorLog;
+
+ } elseif ( isset( $wgDebugLogGroups[$channel] ) ) {
+ $logConfig = $wgDebugLogGroups[$channel];
+
+ if ( is_array( $logConfig ) ) {
+ $destination = $logConfig['destination'];
+ } else {
+ $destination = strval( $logConfig );
+ }
+ }
+
+ return $destination;
+ }
+
+
+ /**
+ * Log to a file without getting "file size exceeded" signals.
+ *
+ * Can also log to UDP with the syntax udp://host:port/prefix. This will send
+ * lines to the specified port, prefixed by the specified prefix and a space.
+ *
+ * @param string $text
+ * @param string $file Filename
+ * @throws MWException
+ */
+ public static function emit( $text, $file ) {
+ if ( substr( $file, 0, 4 ) == 'udp:' ) {
+ $transport = UDPTransport::newFromString( $file );
+ $transport->emit( $text );
+ } else {
+ wfSuppressWarnings();
+ $exists = file_exists( $file );
+ $size = $exists ? filesize( $file ) : false;
+ if ( !$exists ||
+ ( $size !== false && $size + strlen( $text ) < 0x7fffffff )
+ ) {
+ file_put_contents( $file, $text, FILE_APPEND );
+ }
+ wfRestoreWarnings();
+ }
+ }
+
+}
diff --git a/includes/debug/logger/LegacySpi.php b/includes/debug/logger/LegacySpi.php
new file mode 100644
index 00000000..1bf39e41
--- /dev/null
+++ b/includes/debug/logger/LegacySpi.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+/**
+ * LoggerFactory service provider that creates LegacyLogger instances.
+ *
+ * Usage:
+ * @code
+ * $wgMWLoggerDefaultSpi = array(
+ * 'class' => '\\MediaWiki\\Logger\\LegacySpi',
+ * );
+ * @endcode
+ *
+ * @see \MediaWiki\Logger\LoggerFactory
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class LegacySpi implements Spi {
+
+ /**
+ * @var array $singletons
+ */
+ protected $singletons = array();
+
+
+ /**
+ * Get a logger instance.
+ *
+ * @param string $channel Logging channel
+ * @return \Psr\Log\LoggerInterface Logger instance
+ */
+ public function getLogger( $channel ) {
+ if ( !isset( $this->singletons[$channel] ) ) {
+ $this->singletons[$channel] = new LegacyLogger( $channel );
+ }
+ return $this->singletons[$channel];
+ }
+
+}
diff --git a/includes/debug/logger/LoggerFactory.php b/includes/debug/logger/LoggerFactory.php
new file mode 100644
index 00000000..b3078b9a
--- /dev/null
+++ b/includes/debug/logger/LoggerFactory.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+use ObjectFactory;
+
+/**
+ * PSR-3 logger instance factory.
+ *
+ * Creation of \Psr\Log\LoggerInterface instances is managed via the
+ * LoggerFactory::getInstance() static method which in turn delegates to the
+ * currently registered service provider.
+ *
+ * A service provider is any class implementing the Spi interface.
+ * There are two possible methods of registering a service provider. The
+ * LoggerFactory::registerProvider() static method can be called at any time
+ * to change the service provider. If LoggerFactory::getInstance() is called
+ * before any service provider has been registered, it will attempt to use the
+ * $wgMWLoggerDefaultSpi global to bootstrap Spi registration.
+ * $wgMWLoggerDefaultSpi is expected to be an array usable by
+ * ObjectFactory::getObjectFromSpec() to create a class.
+ *
+ * @see \MediaWiki\Logger\Spi
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class LoggerFactory {
+
+ /**
+ * Service provider.
+ * @var Spi $spi
+ */
+ private static $spi;
+
+
+ /**
+ * Register a service provider to create new \Psr\Log\LoggerInterface
+ * instances.
+ *
+ * @param Spi $provider Provider to register
+ */
+ public static function registerProvider( Spi $provider ) {
+ self::$spi = $provider;
+ }
+
+
+ /**
+ * Get the registered service provider.
+ *
+ * If called before any service provider has been registered, it will
+ * attempt to use the $wgMWLoggerDefaultSpi global to bootstrap
+ * Spi registration. $wgMWLoggerDefaultSpi is expected to be an
+ * array usable by ObjectFactory::getObjectFromSpec() to create a class.
+ *
+ * @return Spi
+ * @see registerProvider()
+ * @see ObjectFactory::getObjectFromSpec()
+ */
+ public static function getProvider() {
+ if ( self::$spi === null ) {
+ global $wgMWLoggerDefaultSpi;
+ $provider = ObjectFactory::getObjectFromSpec(
+ $wgMWLoggerDefaultSpi
+ );
+ self::registerProvider( $provider );
+ }
+ return self::$spi;
+ }
+
+
+ /**
+ * Get a named logger instance from the currently configured logger factory.
+ *
+ * @param string $channel Logger channel (name)
+ * @return \Psr\Log\LoggerInterface
+ */
+ public static function getInstance( $channel ) {
+ if ( !interface_exists( '\Psr\Log\LoggerInterface' ) ) {
+ $message = (
+ 'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
+ "library</a> to be present. This library is not embedded directly in MediaWiki's " .
+ "git repository and must be installed separately by the end user.\n\n" .
+ 'Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
+ '#Fetch_external_libraries">mediawiki.org</a> for help on installing ' .
+ 'the required components.'
+ );
+ echo $message;
+ trigger_error( $message, E_USER_ERROR );
+ die( 1 );
+ }
+
+ return self::getProvider()->getLogger( $channel );
+ }
+
+
+ /**
+ * Construction of utility class is not allowed.
+ */
+ private function __construct() {
+ // no-op
+ }
+}
diff --git a/includes/debug/logger/MonologSpi.php b/includes/debug/logger/MonologSpi.php
new file mode 100644
index 00000000..a07fdc4a
--- /dev/null
+++ b/includes/debug/logger/MonologSpi.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+use Monolog\Logger;
+use ObjectFactory;
+
+/**
+ * LoggerFactory service provider that creates loggers implemented by
+ * Monolog.
+ *
+ * Configured using an array of configuration data with the keys 'loggers',
+ * 'processors', 'handlers' and 'formatters'.
+ *
+ * The ['loggers']['@default'] configuration will be used to create loggers
+ * for any channel that isn't explicitly named in the 'loggers' configuration
+ * section.
+ *
+ * Configuration will most typically be provided in the $wgMWLoggerDefaultSpi
+ * global configuration variable used by LoggerFactory to construct its
+ * default SPI provider:
+ * @code
+ * $wgMWLoggerDefaultSpi = array(
+ * 'class' => '\\MediaWiki\\Logger\\MonologSpi',
+ * 'args' => array( array(
+ * 'loggers' => array(
+ * '@default' => array(
+ * 'processors' => array( 'wiki', 'psr', 'pid', 'uid', 'web' ),
+ * 'handlers' => array( 'stream' ),
+ * ),
+ * 'runJobs' => array(
+ * 'processors' => array( 'wiki', 'psr', 'pid' ),
+ * 'handlers' => array( 'stream' ),
+ * )
+ * ),
+ * 'processors' => array(
+ * 'wiki' => array(
+ * 'class' => '\\MediaWiki\\Logger\\Monolog\\WikiProcessor',
+ * ),
+ * 'psr' => array(
+ * 'class' => '\\Monolog\\Processor\\PsrLogMessageProcessor',
+ * ),
+ * 'pid' => array(
+ * 'class' => '\\Monolog\\Processor\\ProcessIdProcessor',
+ * ),
+ * 'uid' => array(
+ * 'class' => '\\Monolog\\Processor\\UidProcessor',
+ * ),
+ * 'web' => array(
+ * 'class' => '\\Monolog\\Processor\\WebProcessor',
+ * ),
+ * ),
+ * 'handlers' => array(
+ * 'stream' => array(
+ * 'class' => '\\Monolog\\Handler\\StreamHandler',
+ * 'args' => array( 'path/to/your.log' ),
+ * 'formatter' => 'line',
+ * ),
+ * 'redis' => array(
+ * 'class' => '\\Monolog\\Handler\\RedisHandler',
+ * 'args' => array( function() {
+ * $redis = new Redis();
+ * $redis->connect( '127.0.0.1', 6379 );
+ * return $redis;
+ * },
+ * 'logstash'
+ * ),
+ * 'formatter' => 'logstash',
+ * ),
+ * 'udp2log' => array(
+ * 'class' => '\\MediaWiki\\Logger\\Monolog\\LegacyHandler',
+ * 'args' => array(
+ * 'udp://127.0.0.1:8420/mediawiki
+ * ),
+ * 'formatter' => 'line',
+ * ),
+ * ),
+ * 'formatters' => array(
+ * 'line' => array(
+ * 'class' => '\\Monolog\\Formatter\\LineFormatter',
+ * ),
+ * 'logstash' => array(
+ * 'class' => '\\Monolog\\Formatter\\LogstashFormatter',
+ * 'args' => array( 'mediawiki', php_uname( 'n' ), null, '', 1 ),
+ * ),
+ * ),
+ * ) ),
+ * );
+ * @endcode
+ *
+ * @see https://github.com/Seldaek/monolog
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MonologSpi implements Spi {
+
+ /**
+ * @var array $singletons
+ */
+ protected $singletons;
+
+ /**
+ * Configuration for creating new loggers.
+ * @var array $config
+ */
+ protected $config;
+
+
+ /**
+ * @param array $config Configuration data.
+ */
+ public function __construct( array $config ) {
+ $this->config = $config;
+ $this->reset();
+ }
+
+
+ /**
+ * Reset internal caches.
+ *
+ * This is public for use in unit tests. Under normal operation there should
+ * be no need to flush the caches.
+ */
+ public function reset() {
+ $this->singletons = array(
+ 'loggers' => array(),
+ 'handlers' => array(),
+ 'formatters' => array(),
+ 'processors' => array(),
+ );
+ }
+
+
+ /**
+ * Get a logger instance.
+ *
+ * Creates and caches a logger instance based on configuration found in the
+ * $wgMWLoggerMonologSpiConfig global. Subsequent request for the same channel
+ * name will return the cached instance.
+ *
+ * @param string $channel Logging channel
+ * @return \Psr\Log\LoggerInterface Logger instance
+ */
+ public function getLogger( $channel ) {
+ if ( !isset( $this->singletons['loggers'][$channel] ) ) {
+ // Fallback to using the '@default' configuration if an explict
+ // configuration for the requested channel isn't found.
+ $spec = isset( $this->config['loggers'][$channel] ) ?
+ $this->config['loggers'][$channel] :
+ $this->config['loggers']['@default'];
+
+ $monolog = $this->createLogger( $channel, $spec );
+ $this->singletons['loggers'][$channel] = $monolog;
+ }
+
+ return $this->singletons['loggers'][$channel];
+ }
+
+
+ /**
+ * Create a logger.
+ * @param string $channel Logger channel
+ * @param array $spec Configuration
+ * @return \Monolog\Logger
+ */
+ protected function createLogger( $channel, $spec ) {
+ $obj = new Logger( $channel );
+
+ if ( isset( $spec['processors'] ) ) {
+ foreach ( $spec['processors'] as $processor ) {
+ $obj->pushProcessor( $this->getProcessor( $processor ) );
+ }
+ }
+
+ if ( isset( $spec['handlers'] ) ) {
+ foreach ( $spec['handlers'] as $handler ) {
+ $obj->pushHandler( $this->getHandler( $handler ) );
+ }
+ }
+ return $obj;
+ }
+
+
+ /**
+ * Create or return cached processor.
+ * @param string $name Processor name
+ * @return callable
+ */
+ public function getProcessor( $name ) {
+ if ( !isset( $this->singletons['processors'][$name] ) ) {
+ $spec = $this->config['processors'][$name];
+ $processor = ObjectFactory::getObjectFromSpec( $spec );
+ $this->singletons['processors'][$name] = $processor;
+ }
+ return $this->singletons['processors'][$name];
+ }
+
+
+ /**
+ * Create or return cached handler.
+ * @param string $name Processor name
+ * @return \Monolog\Handler\HandlerInterface
+ */
+ public function getHandler( $name ) {
+ if ( !isset( $this->singletons['handlers'][$name] ) ) {
+ $spec = $this->config['handlers'][$name];
+ $handler = ObjectFactory::getObjectFromSpec( $spec );
+ if ( isset( $spec['formatter'] ) ) {
+ $handler->setFormatter(
+ $this->getFormatter( $spec['formatter'] )
+ );
+ }
+ $this->singletons['handlers'][$name] = $handler;
+ }
+ return $this->singletons['handlers'][$name];
+ }
+
+
+ /**
+ * Create or return cached formatter.
+ * @param string $name Formatter name
+ * @return \Monolog\Formatter\FormatterInterface
+ */
+ public function getFormatter( $name ) {
+ if ( !isset( $this->singletons['formatters'][$name] ) ) {
+ $spec = $this->config['formatters'][$name];
+ $formatter = ObjectFactory::getObjectFromSpec( $spec );
+ $this->singletons['formatters'][$name] = $formatter;
+ }
+ return $this->singletons['formatters'][$name];
+ }
+}
diff --git a/includes/debug/logger/NullSpi.php b/includes/debug/logger/NullSpi.php
new file mode 100644
index 00000000..a82d2c4c
--- /dev/null
+++ b/includes/debug/logger/NullSpi.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+use Psr\Log\NullLogger;
+
+/**
+ * LoggerFactory service provider that creates \Psr\Log\NullLogger
+ * instances. A NullLogger silently discards all log events sent to it.
+ *
+ * Usage:
+ * @code
+ * $wgMWLoggerDefaultSpi = array(
+ * 'class' => '\\MediaWiki\\Logger\\NullSpi',
+ * );
+ * @endcode
+ *
+ * @see \MediaWiki\Logger\LoggerFactory
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class NullSpi implements Spi {
+
+ /**
+ * @var \Psr\Log\NullLogger $singleton
+ */
+ protected $singleton;
+
+
+ public function __construct() {
+ $this->singleton = new NullLogger();
+ }
+
+
+ /**
+ * Get a logger instance.
+ *
+ * @param string $channel Logging channel
+ * @return \Psr\Log\NullLogger Logger instance
+ */
+ public function getLogger( $channel ) {
+ return $this->singleton;
+ }
+
+}
diff --git a/includes/debug/logger/Spi.php b/includes/debug/logger/Spi.php
new file mode 100644
index 00000000..044789f2
--- /dev/null
+++ b/includes/debug/logger/Spi.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+/**
+ * Service provider interface for \Psr\Log\LoggerInterface implementation
+ * libraries.
+ *
+ * MediaWiki can be configured to use a class implementing this interface to
+ * create new \Psr\Log\LoggerInterface instances via either the
+ * $wgMWLoggerDefaultSpi global variable or code that constructs an instance
+ * and registers it via the LoggerFactory::registerProvider() static method.
+ *
+ * @see \MediaWiki\Logger\LoggerFactory
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+interface Spi {
+
+ /**
+ * Get a logger instance.
+ *
+ * @param string $channel Logging channel
+ * @return \Psr\Log\LoggerInterface Logger instance
+ */
+ public function getLogger( $channel );
+
+}
diff --git a/includes/debug/logger/monolog/LegacyFormatter.php b/includes/debug/logger/monolog/LegacyFormatter.php
new file mode 100644
index 00000000..9ec15cb8
--- /dev/null
+++ b/includes/debug/logger/monolog/LegacyFormatter.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use MediaWiki\Logger\LegacyLogger;
+use Monolog\Formatter\NormalizerFormatter;
+
+/**
+ * Log message formatter that mimics the legacy log message formatting of
+ * `wfDebug`, `wfDebugLog`, `wfLogDBError` and `wfErrorLog` global functions by
+ * delegating the formatting to \MediaWiki\Logger\LegacyLogger.
+ *
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
+ * @see \MediaWiki\Logger\LegacyLogger
+ */
+class LegacyFormatter extends NormalizerFormatter {
+
+ public function __construct() {
+ parent::__construct( 'c' );
+ }
+
+ public function format( array $record ) {
+ $normalized = parent::format( $record );
+ return LegacyLogger::format(
+ $normalized['channel'], $normalized['message'], $normalized
+ );
+ }
+}
diff --git a/includes/debug/logger/monolog/LegacyHandler.php b/includes/debug/logger/monolog/LegacyHandler.php
new file mode 100644
index 00000000..8405819d
--- /dev/null
+++ b/includes/debug/logger/monolog/LegacyHandler.php
@@ -0,0 +1,243 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use LogicException;
+use MediaWiki\Logger\LegacyLogger;
+use Monolog\Handler\AbstractProcessingHandler;
+use Monolog\Logger;
+use UnexpectedValueException;
+
+/**
+ * Log handler that replicates the behavior of MediaWiki's wfErrorLog()
+ * logging service. Log output can be directed to a local file, a PHP stream,
+ * or a udp2log server.
+ *
+ * For udp2log output, the stream specification must have the form:
+ * "udp://HOST:PORT[/PREFIX]"
+ * where:
+ * - HOST: IPv4, IPv6 or hostname
+ * - PORT: server port
+ * - PREFIX: optional (but recommended) prefix telling udp2log how to route
+ * the log event. The special prefix "{channel}" will use the log event's
+ * channel as the prefix value.
+ *
+ * When not targeting a udp2log stream this class will act as a drop-in
+ * replacement for Monolog's StreamHandler.
+ *
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
+ */
+class LegacyHandler extends AbstractProcessingHandler {
+
+ /**
+ * Log sink descriptor
+ * @var string $uri
+ */
+ protected $uri;
+
+ /**
+ * Filter log events using legacy rules
+ * @var bool $useLegacyFilter
+ */
+ protected $useLegacyFilter;
+
+ /**
+ * Log sink
+ * @var resource $sink
+ */
+ protected $sink;
+
+ /**
+ * @var string $error
+ */
+ protected $error;
+
+ /**
+ * @var string $host
+ */
+ protected $host;
+
+ /**
+ * @var int $port
+ */
+ protected $port;
+
+ /**
+ * @var string $prefix
+ */
+ protected $prefix;
+
+
+ /**
+ * @param string $stream Stream URI
+ * @param bool $useLegacyFilter Filter log events using legacy rules
+ * @param int $level Minimum logging level that will trigger handler
+ * @param bool $bubble Can handled meesages bubble up the handler stack?
+ */
+ public function __construct(
+ $stream,
+ $useLegacyFilter = false,
+ $level = Logger::DEBUG,
+ $bubble = true
+ ) {
+ parent::__construct( $level, $bubble );
+ $this->uri = $stream;
+ $this->useLegacyFilter = $useLegacyFilter;
+ }
+
+ /**
+ * Open the log sink described by our stream URI.
+ */
+ protected function openSink() {
+ if ( !$this->uri ) {
+ throw new LogicException(
+ 'Missing stream uri, the stream can not be opened.' );
+ }
+ $this->error = null;
+ set_error_handler( array( $this, 'errorTrap' ) );
+
+ if ( substr( $this->uri, 0, 4 ) == 'udp:' ) {
+ $parsed = parse_url( $this->uri );
+ if ( !isset( $parsed['host'] ) ) {
+ throw new UnexpectedValueException( sprintf(
+ 'Udp transport "%s" must specify a host', $this->uri
+ ) );
+ }
+ if ( !isset( $parsed['port'] ) ) {
+ throw new UnexpectedValueException( sprintf(
+ 'Udp transport "%s" must specify a port', $this->uri
+ ) );
+ }
+
+ $this->host = $parsed['host'];
+ $this->port = $parsed['port'];
+ $this->prefix = '';
+
+ if ( isset( $parsed['path'] ) ) {
+ $this->prefix = ltrim( $parsed['path'], '/' );
+ }
+
+ if ( filter_var( $this->host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
+ $domain = AF_INET6;
+
+ } else {
+ $domain = AF_INET;
+ }
+
+ $this->sink = socket_create( $domain, SOCK_DGRAM, SOL_UDP );
+
+ } else {
+ $this->sink = fopen( $this->uri, 'a' );
+ }
+ restore_error_handler();
+
+ if ( !is_resource( $this->sink ) ) {
+ $this->sink = null;
+ throw new UnexpectedValueException( sprintf(
+ 'The stream or file "%s" could not be opened: %s',
+ $this->uri, $this->error
+ ) );
+ }
+ }
+
+
+ /**
+ * Custom error handler.
+ * @param int $code Error number
+ * @param string $msg Error message
+ */
+ protected function errorTrap( $code, $msg ) {
+ $this->error = $msg;
+ }
+
+
+ /**
+ * Should we use UDP to send messages to the sink?
+ * @return bool
+ */
+ protected function useUdp() {
+ return $this->host !== null;
+ }
+
+
+ protected function write( array $record ) {
+ if ( $this->useLegacyFilter &&
+ !LegacyLogger::shouldEmit(
+ $record['channel'], $record['message'],
+ $record['level'], $record
+ ) ) {
+ // Do not write record if we are enforcing legacy rules and they
+ // do not pass this message. This used to be done in isHandling(),
+ // but Monolog 1.12.0 made a breaking change that removed access
+ // to the needed channel and context information.
+ return;
+ }
+
+ if ( $this->sink === null ) {
+ $this->openSink();
+ }
+
+ $text = (string)$record['formatted'];
+ if ( $this->useUdp() ) {
+
+ // Clean it up for the multiplexer
+ if ( $this->prefix !== '' ) {
+ $leader = ( $this->prefix === '{channel}' ) ?
+ $record['channel'] : $this->prefix;
+ $text = preg_replace( '/^/m', "{$leader} ", $text );
+
+ // Limit to 64KB
+ if ( strlen( $text ) > 65506 ) {
+ $text = substr( $text, 0, 65506 );
+ }
+
+ if ( substr( $text, -1 ) != "\n" ) {
+ $text .= "\n";
+ }
+
+ } elseif ( strlen( $text ) > 65507 ) {
+ $text = substr( $text, 0, 65507 );
+ }
+
+ socket_sendto(
+ $this->sink, $text, strlen( $text ), 0, $this->host, $this->port
+ );
+
+ } else {
+ fwrite( $this->sink, $text );
+ }
+ }
+
+
+ public function close() {
+ if ( is_resource( $this->sink ) ) {
+ if ( $this->useUdp() ) {
+ socket_close( $this->sink );
+
+ } else {
+ fclose( $this->sink );
+ }
+ }
+ $this->sink = null;
+ }
+}
diff --git a/includes/debug/logger/monolog/SyslogHandler.php b/includes/debug/logger/monolog/SyslogHandler.php
new file mode 100644
index 00000000..008efbc1
--- /dev/null
+++ b/includes/debug/logger/monolog/SyslogHandler.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use Monolog\Handler\SyslogUdpHandler;
+use Monolog\Logger;
+
+/**
+ * Log handler that supports sending log events to a syslog server using RFC
+ * 3164 formatted UDP packets.
+ *
+ * Monolog's SyslogUdpHandler creates a partial RFC 5424 header (PRI and
+ * VERSION) and relies on the associated formatter to complete the header and
+ * message payload. This makes using it with a fixed format formatter like
+ * Monolog\Formatter\LogstashFormatter impossible. Additionally, the direct
+ * syslog input for Logstash only handles RFC 3164 syslog packets.
+ *
+ * This Handler should work with any Formatter. The formatted message will be
+ * prepended with an RFC 3164 message header and a partial message body. The
+ * resulting packet will looks something like:
+ *
+ * <PRI>DATETIME HOSTNAME PROGRAM: MESSAGE
+ *
+ * This format works as input to rsyslog and can also be processed by the
+ * default Logstash syslog input handler.
+ *
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2015 Bryan Davis and Wikimedia Foundation.
+ */
+class SyslogHandler extends SyslogUdpHandler {
+
+ /**
+ * @var string $appname
+ */
+ private $appname;
+
+ /**
+ * @var string $hostname
+ */
+ private $hostname;
+
+
+ /**
+ * @param string $appname Application name to report to syslog
+ * @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
+ * will be triggered
+ * @param bool $bubble Whether the messages that are handled can bubble up
+ * the stack or not
+ */
+ public function __construct(
+ $appname,
+ $host,
+ $port = 514,
+ $facility = LOG_USER,
+ $level = Logger::DEBUG,
+ $bubble = true
+ ) {
+ parent::__construct( $host, $port, $facility, $level, $bubble );
+ $this->appname = $appname;
+ $this->hostname = php_uname( 'n' );
+ }
+
+ protected function makeCommonSyslogHeader( $severity ) {
+ $pri = $severity + $this->facility;
+
+ // Goofy date format courtesy of RFC 3164 :(
+ // RFC 3164 actually specifies that the day of month should be space
+ // padded rather than unpadded but this seems to work with rsyslog and
+ // Logstash.
+ $timestamp = date( 'M j H:i:s' );
+
+ return "<{$pri}>{$timestamp} {$this->hostname} {$this->appname}: ";
+ }
+}
diff --git a/includes/debug/logger/monolog/WikiProcessor.php b/includes/debug/logger/monolog/WikiProcessor.php
new file mode 100644
index 00000000..a52f6366
--- /dev/null
+++ b/includes/debug/logger/monolog/WikiProcessor.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+/**
+ * Injects `wfHostname()` and `wfWikiID()` in all records.
+ *
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
+ */
+class WikiProcessor {
+
+ /**
+ * @param array $record
+ * @return array
+ */
+ public function __invoke( array $record ) {
+ $record['extra'] = array_merge(
+ $record['extra'],
+ array(
+ 'host' => wfHostname(),
+ 'wiki' => wfWikiID(),
+ )
+ );
+ return $record;
+ }
+
+}
diff --git a/includes/deferred/DeferredUpdates.php b/includes/deferred/DeferredUpdates.php
index b0c1899f..42816ddc 100644
--- a/includes/deferred/DeferredUpdates.php
+++ b/includes/deferred/DeferredUpdates.php
@@ -82,13 +82,10 @@ class DeferredUpdates {
public static function doUpdates( $commit = '' ) {
global $wgDeferredUpdateList;
- wfProfileIn( __METHOD__ );
-
$updates = array_merge( $wgDeferredUpdateList, self::$updates );
// No need to get master connections in case of empty updates array
if ( !count( $updates ) ) {
- wfProfileOut( __METHOD__ );
return;
}
@@ -110,7 +107,7 @@ class DeferredUpdates {
if ( $doCommit && $dbw->trxLevel() ) {
$dbw->commit( __METHOD__, 'flush' );
}
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// We don't want exceptions thrown during deferred updates to
// be reported to the user since the output is already sent.
// Instead we just log them.
@@ -122,7 +119,6 @@ class DeferredUpdates {
$updates = array_merge( $wgDeferredUpdateList, self::$updates );
}
- wfProfileOut( __METHOD__ );
}
/**
diff --git a/includes/deferred/HTMLCacheUpdate.php b/includes/deferred/HTMLCacheUpdate.php
index 54fa5943..79a10e68 100644
--- a/includes/deferred/HTMLCacheUpdate.php
+++ b/includes/deferred/HTMLCacheUpdate.php
@@ -43,12 +43,11 @@ class HTMLCacheUpdate implements DeferrableUpdate {
}
public function doUpdate() {
- wfProfileIn( __METHOD__ );
-
$job = new HTMLCacheUpdateJob(
$this->mTitle,
array(
'table' => $this->mTable,
+ 'recursive' => true
) + Job::newRootJobParams( // "overall" refresh links job info
"htmlCacheUpdate:{$this->mTable}:{$this->mTitle->getPrefixedText()}"
)
@@ -64,7 +63,5 @@ class HTMLCacheUpdate implements DeferrableUpdate {
$job->run(); // just do the purge query now
} );
}
-
- wfProfileOut( __METHOD__ );
}
}
diff --git a/includes/deferred/LinksUpdate.php b/includes/deferred/LinksUpdate.php
index 45d26648..e4f00e75 100644
--- a/includes/deferred/LinksUpdate.php
+++ b/includes/deferred/LinksUpdate.php
@@ -58,12 +58,6 @@ class LinksUpdate extends SqlDataUpdate {
/** @var array Map of arbitrary name to value */
public $mProperties;
- /** @var DatabaseBase Database connection reference */
- public $mDb;
-
- /** @var array SELECT options to be used */
- public $mOptions;
-
/** @var bool Whether to queue jobs for recursive updates */
public $mRecursive;
@@ -140,20 +134,19 @@ class LinksUpdate extends SqlDataUpdate {
$this->mRecursive = $recursive;
- wfRunHooks( 'LinksUpdateConstructed', array( &$this ) );
+ Hooks::run( 'LinksUpdateConstructed', array( &$this ) );
}
/**
* Update link tables with outgoing links from an updated article
*/
public function doUpdate() {
- wfRunHooks( 'LinksUpdate', array( &$this ) );
+ Hooks::run( 'LinksUpdate', array( &$this ) );
$this->doIncrementalUpdate();
- wfRunHooks( 'LinksUpdateComplete', array( &$this ) );
+ Hooks::run( 'LinksUpdateComplete', array( &$this ) );
}
protected function doIncrementalUpdate() {
- wfProfileIn( __METHOD__ );
# Page links
$existing = $this->getExistingLinks();
@@ -227,7 +220,6 @@ class LinksUpdate extends SqlDataUpdate {
$this->queueRecursiveJobs();
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -236,12 +228,24 @@ class LinksUpdate extends SqlDataUpdate {
* Which means do LinksUpdate on all pages that include the current page,
* using the job queue.
*/
- function queueRecursiveJobs() {
+ protected function queueRecursiveJobs() {
self::queueRecursiveJobsForTable( $this->mTitle, 'templatelinks' );
if ( $this->mTitle->getNamespace() == NS_FILE ) {
// Process imagelinks in case the title is or was a redirect
self::queueRecursiveJobsForTable( $this->mTitle, 'imagelinks' );
}
+
+ $bc = $this->mTitle->getBacklinkCache();
+ // Get jobs for cascade-protected backlinks for a high priority queue.
+ // If meta-templates change to using a new template, the new template
+ // should be implicitly protected as soon as possible, if applicable.
+ // These jobs duplicate a subset of the above ones, but can run sooner.
+ // Which ever runs first generally no-ops the other one.
+ $jobs = array();
+ foreach ( $bc->getCascadeProtectedLinks() as $title ) {
+ $jobs[] = new RefreshLinksJob( $title, array( 'prioritize' => true ) );
+ }
+ JobQueueGroup::singleton()->push( $jobs );
}
/**
@@ -251,7 +255,6 @@ class LinksUpdate extends SqlDataUpdate {
* @param string $table Table to use (e.g. 'templatelinks')
*/
public static function queueRecursiveJobsForTable( Title $title, $table ) {
- wfProfileIn( __METHOD__ );
if ( $title->getBacklinkCache()->hasLinks( $table ) ) {
$job = new RefreshLinksJob(
$title,
@@ -262,10 +265,10 @@ class LinksUpdate extends SqlDataUpdate {
"refreshlinks:{$table}:{$title->getPrefixedText()}"
)
);
+
JobQueueGroup::singleton()->push( $job );
JobQueueGroup::singleton()->deduplicateRootJob( $job );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -339,7 +342,7 @@ class LinksUpdate extends SqlDataUpdate {
}
if ( count( $insertions ) ) {
$this->mDb->insert( $table, $insertions, __METHOD__, 'IGNORE' );
- wfRunHooks( 'LinksUpdateAfterInsert', array( $this, $table, $insertions ) );
+ Hooks::run( 'LinksUpdateAfterInsert', array( $this, $table, $insertions ) );
}
}
diff --git a/includes/deferred/SearchUpdate.php b/includes/deferred/SearchUpdate.php
index 5d084afd..ba14f099 100644
--- a/includes/deferred/SearchUpdate.php
+++ b/includes/deferred/SearchUpdate.php
@@ -78,9 +78,7 @@ class SearchUpdate implements DeferrableUpdate {
return;
}
- wfProfileIn( __METHOD__ );
-
- $page = WikiPage::newFromId( $this->id, WikiPage::READ_LATEST );
+ $page = WikiPage::newFromID( $this->id, WikiPage::READ_LATEST );
foreach ( SearchEngine::getSearchTypes() as $type ) {
$search = SearchEngine::create( $type );
@@ -108,7 +106,6 @@ class SearchUpdate implements DeferrableUpdate {
$search->update( $this->id, $normalTitle, $search->normalizeText( $text ) );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -125,7 +122,6 @@ class SearchUpdate implements DeferrableUpdate {
$text = $wgContLang->normalizeForSearch( $text );
$lc = SearchEngine::legalSearchChars() . '&#;';
- wfProfileIn( __METHOD__ . '-regexps' );
$text = preg_replace( "/<\\/?\\s*[A-Za-z][^>]*?>/",
' ', $wgContLang->lc( " " . $text . " " ) ); # Strip HTML markup
$text = preg_replace( "/(^|\\n)==\\s*([^\\n]+)\\s*==(\\s)/sD",
@@ -172,7 +168,6 @@ class SearchUpdate implements DeferrableUpdate {
# Strip wiki '' and '''
$text = preg_replace( "/''[']*/", " ", $text );
- wfProfileOut( __METHOD__ . '-regexps' );
return $text;
}
diff --git a/includes/deferred/SiteStatsUpdate.php b/includes/deferred/SiteStatsUpdate.php
index 7bfafee8..97a17c39 100644
--- a/includes/deferred/SiteStatsUpdate.php
+++ b/includes/deferred/SiteStatsUpdate.php
@@ -23,9 +23,6 @@
*/
class SiteStatsUpdate implements DeferrableUpdate {
/** @var int */
- protected $views = 0;
-
- /** @var int */
protected $edits = 0;
/** @var int */
@@ -42,7 +39,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
// @todo deprecate this constructor
function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) {
- $this->views = $views;
$this->edits = $edits;
$this->articles = $good;
$this->pages = $pages;
@@ -100,7 +96,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
}
$pd = $this->getPendingDeltas();
// Piggy-back the async deltas onto those of this stats update....
- $this->views += ( $pd['ss_total_views']['+'] - $pd['ss_total_views']['-'] );
$this->edits += ( $pd['ss_total_edits']['+'] - $pd['ss_total_edits']['-'] );
$this->articles += ( $pd['ss_good_articles']['+'] - $pd['ss_good_articles']['-'] );
$this->pages += ( $pd['ss_total_pages']['+'] - $pd['ss_total_pages']['-'] );
@@ -110,7 +105,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
// Build up an SQL query of deltas and apply them...
$updates = '';
- $this->appendUpdate( $updates, 'ss_total_views', $this->views );
$this->appendUpdate( $updates, 'ss_total_edits', $this->edits );
$this->appendUpdate( $updates, 'ss_good_articles', $this->articles );
$this->appendUpdate( $updates, 'ss_total_pages', $this->pages );
@@ -160,7 +154,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
}
protected function doUpdatePendingDeltas() {
- $this->adjustPending( 'ss_total_views', $this->views );
$this->adjustPending( 'ss_total_edits', $this->edits );
$this->adjustPending( 'ss_good_articles', $this->articles );
$this->adjustPending( 'ss_total_pages', $this->pages );
@@ -226,7 +219,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
global $wgMemc;
$pending = array();
- foreach ( array( 'ss_total_views', 'ss_total_edits',
+ foreach ( array( 'ss_total_edits',
'ss_good_articles', 'ss_total_pages', 'ss_users', 'ss_images' ) as $type
) {
// Get pending increments and pending decrements
diff --git a/includes/deferred/SqlDataUpdate.php b/includes/deferred/SqlDataUpdate.php
index 9c58503f..49164e33 100644
--- a/includes/deferred/SqlDataUpdate.php
+++ b/includes/deferred/SqlDataUpdate.php
@@ -31,11 +31,11 @@
* the beginTransaction() and commitTransaction() methods.
*/
abstract class SqlDataUpdate extends DataUpdate {
- /** @var DatabaseBase Database connection reference */
+ /** @var IDatabase Database connection reference */
protected $mDb;
/** @var array SELECT options to be used (array) */
- protected $mOptions;
+ protected $mOptions = array();
/** @var bool Whether a transaction is open on this object (internal use only!) */
private $mHasTransaction;
@@ -51,19 +51,9 @@ abstract class SqlDataUpdate extends DataUpdate {
* transaction is already in progress, see beginTransaction() for details.
*/
public function __construct( $withTransaction = true ) {
- global $wgAntiLockFlags;
-
parent::__construct();
- if ( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) {
- $this->mOptions = array();
- } else {
- $this->mOptions = array( 'FOR UPDATE' );
- }
-
- // @todo Get connection only when it's needed? Make sure that doesn't
- // break anything, especially transactions!
- $this->mDb = wfGetDB( DB_MASTER );
+ $this->mDb = wfGetLB()->getLazyConnectionRef( DB_MASTER );
$this->mWithTransaction = $withTransaction;
$this->mHasTransaction = false;
@@ -121,39 +111,40 @@ abstract class SqlDataUpdate extends DataUpdate {
return;
}
- /**
- * Determine which pages need to be updated
- * This is necessary to prevent the job queue from smashing the DB with
- * large numbers of concurrent invalidations of the same page
- */
- $now = $this->mDb->timestamp();
- $ids = array();
- $res = $this->mDb->select( 'page', array( 'page_id' ),
- array(
- 'page_namespace' => $namespace,
- 'page_title' => $dbkeys,
- 'page_touched < ' . $this->mDb->addQuotes( $now )
- ), __METHOD__
- );
-
- foreach ( $res as $row ) {
- $ids[] = $row->page_id;
- }
-
- if ( $ids === array() ) {
- return;
- }
-
- /**
- * Do the update
- * We still need the page_touched condition, in case the row has changed since
- * the non-locking select above.
- */
- $this->mDb->update( 'page', array( 'page_touched' => $now ),
- array(
- 'page_id' => $ids,
- 'page_touched < ' . $this->mDb->addQuotes( $now )
- ), __METHOD__
- );
+ $dbw = $this->mDb;
+ $dbw->onTransactionPreCommitOrIdle( function() use ( $dbw, $namespace, $dbkeys ) {
+ /**
+ * Determine which pages need to be updated
+ * This is necessary to prevent the job queue from smashing the DB with
+ * large numbers of concurrent invalidations of the same page
+ */
+ $now = $dbw->timestamp();
+ $ids = $dbw->selectFieldValues( 'page',
+ 'page_id',
+ array(
+ 'page_namespace' => $namespace,
+ 'page_title' => $dbkeys,
+ 'page_touched < ' . $dbw->addQuotes( $now )
+ ),
+ __METHOD__
+ );
+
+ if ( $ids === array() ) {
+ return;
+ }
+
+ /**
+ * Do the update
+ * We still need the page_touched condition, in case the row has changed since
+ * the non-locking select above.
+ */
+ $dbw->update( 'page',
+ array( 'page_touched' => $now ),
+ array(
+ 'page_id' => $ids,
+ 'page_touched < ' . $dbw->addQuotes( $now )
+ ), __METHOD__
+ );
+ } );
}
}
diff --git a/includes/deferred/SquidUpdate.php b/includes/deferred/SquidUpdate.php
index 0dcff44a..950a264a 100644
--- a/includes/deferred/SquidUpdate.php
+++ b/includes/deferred/SquidUpdate.php
@@ -52,41 +52,6 @@ class SquidUpdate {
}
/**
- * Create a SquidUpdate from the given Title object.
- *
- * The resulting SquidUpdate will purge the given Title's URLs as well as
- * the pages that link to it. Capped at $wgMaxSquidPurgeTitles total URLs.
- *
- * @param Title $title
- * @return SquidUpdate
- */
- public static function newFromLinksTo( Title $title ) {
- global $wgMaxSquidPurgeTitles;
- wfProfileIn( __METHOD__ );
-
- # Get a list of URLs linking to this page
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( array( 'links', 'page' ),
- array( 'page_namespace', 'page_title' ),
- array(
- 'pl_namespace' => $title->getNamespace(),
- 'pl_title' => $title->getDBkey(),
- 'pl_from=page_id' ),
- __METHOD__ );
- $blurlArr = $title->getSquidURLs();
- if ( $res->numRows() <= $wgMaxSquidPurgeTitles ) {
- foreach ( $res as $BL ) {
- $tobj = Title::makeTitle( $BL->page_namespace, $BL->page_title );
- $blurlArr[] = $tobj->getInternalURL();
- }
- }
-
- wfProfileOut( __METHOD__ );
-
- return new SquidUpdate( $blurlArr );
- }
-
- /**
* Create a SquidUpdate from an array of Title objects, or a TitleArray object
*
* @param array $titles
@@ -145,8 +110,6 @@ class SquidUpdate {
self::HTCPPurge( $urlArr );
}
- wfProfileIn( __METHOD__ );
-
// Remove duplicate URLs
$urlArr = array_unique( $urlArr );
// Maximum number of parallel connections per squid
@@ -172,7 +135,6 @@ class SquidUpdate {
}
$pool->run();
- wfProfileOut( __METHOD__ );
}
/**
@@ -183,7 +145,6 @@ class SquidUpdate {
*/
public static function HTCPPurge( $urlArr ) {
global $wgHTCPRouting, $wgHTCPMulticastTTL;
- wfProfileIn( __METHOD__ );
// HTCP CLR operation
$htcpOpCLR = 4;
@@ -201,7 +162,6 @@ class SquidUpdate {
$errstr = socket_strerror( socket_last_error() );
wfDebugLog( 'squid', __METHOD__ .
": Error opening UDP socket: $errstr" );
- wfProfileOut( __METHOD__ );
return;
}
@@ -223,7 +183,6 @@ class SquidUpdate {
foreach ( $urlArr as $url ) {
if ( !is_string( $url ) ) {
- wfProfileOut( __METHOD__ );
throw new MWException( 'Bad purge URL' );
}
$url = self::expand( $url );
@@ -240,7 +199,6 @@ class SquidUpdate {
}
foreach ( $conf as $subconf ) {
if ( !isset( $subconf['host'] ) || !isset( $subconf['port'] ) ) {
- wfProfileOut( __METHOD__ );
throw new MWException( "Invalid HTCP rule for URL $url\n" );
}
}
@@ -272,7 +230,6 @@ class SquidUpdate {
$subconf['host'], $subconf['port'] );
}
}
- wfProfileOut( __METHOD__ );
}
/**
diff --git a/includes/deferred/ViewCountUpdate.php b/includes/deferred/ViewCountUpdate.php
deleted file mode 100644
index 8282295b..00000000
--- a/includes/deferred/ViewCountUpdate.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-/**
- * Update for the 'page_counter' field
- *
- * 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
- */
-
-/**
- * Update for the 'page_counter' field, when $wgDisableCounters is false.
- *
- * Depending on $wgHitcounterUpdateFreq, this will directly increment the
- * 'page_counter' field or use the 'hitcounter' table and then collect the data
- * from that table to update the 'page_counter' field in a batch operation.
- */
-class ViewCountUpdate implements DeferrableUpdate {
- /** @var int Page ID to increment the view count */
- protected $id;
-
- /**
- * Constructor
- *
- * @param int $id Page ID to increment the view count
- */
- public function __construct( $id ) {
- $this->id = intval( $id );
- }
-
- /**
- * Run the update
- */
- public function doUpdate() {
- global $wgHitcounterUpdateFreq;
-
- $dbw = wfGetDB( DB_MASTER );
-
- if ( $wgHitcounterUpdateFreq <= 1 || $dbw->getType() == 'sqlite' ) {
- $id = $this->id;
- $method = __METHOD__;
- $dbw->onTransactionIdle( function () use ( $dbw, $id, $method ) {
- try {
- $dbw->update( 'page',
- array( 'page_counter = page_counter + 1' ),
- array( 'page_id' => $id ),
- $method
- );
- } catch ( DBError $e ) {
- MWExceptionHandler::logException( $e );
- }
- } );
- return;
- }
-
- # Not important enough to warrant an error page in case of failure
- try {
- // Since `hitcounter` is non-transactional, the contention is minimal
- $dbw->insert( 'hitcounter', array( 'hc_id' => $this->id ), __METHOD__ );
- $checkfreq = intval( $wgHitcounterUpdateFreq / 25 + 1 );
- if ( rand() % $checkfreq == 0 && $dbw->lastErrno() == 0 ) {
- $this->collect();
- }
- } catch ( DBError $e ) {
- MWExceptionHandler::logException( $e );
- }
- }
-
- protected function collect() {
- global $wgHitcounterUpdateFreq;
-
- $dbw = wfGetDB( DB_MASTER );
-
- $rown = $dbw->selectField( 'hitcounter', 'COUNT(*)', array(), __METHOD__ );
- if ( $rown < $wgHitcounterUpdateFreq ) {
- return;
- }
-
- wfProfileIn( __METHOD__ . '-collect' );
- $old_user_abort = ignore_user_abort( true );
-
- $dbType = $dbw->getType();
- $tabletype = $dbType == 'mysql' ? "ENGINE=HEAP " : '';
- $hitcounterTable = $dbw->tableName( 'hitcounter' );
- $acchitsTable = $dbw->tableName( 'acchits' );
- $pageTable = $dbw->tableName( 'page' );
-
- $dbw->lockTables( array(), array( 'hitcounter' ), __METHOD__, false );
- $dbw->query( "CREATE TEMPORARY TABLE $acchitsTable $tabletype AS " .
- "SELECT hc_id,COUNT(*) AS hc_n FROM $hitcounterTable " .
- 'GROUP BY hc_id', __METHOD__ );
- $dbw->delete( 'hitcounter', '*', __METHOD__ );
- $dbw->unlockTables( __METHOD__ );
-
- if ( $dbType == 'mysql' ) {
- $dbw->query( "UPDATE $pageTable,$acchitsTable SET page_counter=page_counter + hc_n " .
- 'WHERE page_id = hc_id', __METHOD__ );
- } else {
- $dbw->query( "UPDATE $pageTable SET page_counter=page_counter + hc_n " .
- "FROM $acchitsTable WHERE page_id = hc_id", __METHOD__ );
- }
- $dbw->query( "DROP TABLE $acchitsTable", __METHOD__ );
-
- ignore_user_abort( $old_user_abort );
- wfProfileOut( __METHOD__ . '-collect' );
- }
-}
diff --git a/includes/diff/DairikiDiff.php b/includes/diff/DairikiDiff.php
index a4c0168f..d327433f 100644
--- a/includes/diff/DairikiDiff.php
+++ b/includes/diff/DairikiDiff.php
@@ -189,7 +189,7 @@ class DiffOpChange extends DiffOp {
* More ideas are taken from:
* http://www.ics.uci.edu/~eppstein/161/960229.html
*
- * Some ideas are (and a bit of code) are from from analyze.c, from GNU
+ * Some ideas (and a bit of code) are from analyze.c, from GNU
* diffutils-2.7, which can be found at:
* ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
*
@@ -222,7 +222,6 @@ class DiffEngine {
* @return DiffOp[]
*/
public function diff( $from_lines, $to_lines ) {
- wfProfileIn( __METHOD__ );
// Diff and store locally
$this->diffLocal( $from_lines, $to_lines );
@@ -272,7 +271,6 @@ class DiffEngine {
$edits[] = new DiffOpAdd( $add );
}
}
- wfProfileOut( __METHOD__ );
return $edits;
}
@@ -283,7 +281,6 @@ class DiffEngine {
*/
private function diffLocal( $from_lines, $to_lines ) {
global $wgExternalDiffEngine;
- wfProfileIn( __METHOD__ );
if ( $wgExternalDiffEngine == 'wikidiff3' ) {
// wikidiff3
@@ -346,7 +343,6 @@ class DiffEngine {
// Find the LCS.
$this->compareSeq( 0, count( $this->xv ), 0, count( $this->yv ) );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -582,7 +578,6 @@ class DiffEngine {
* This is extracted verbatim from analyze.c (GNU diffutils-2.7).
*/
private function shiftBoundaries( $lines, &$changed, $other_changed ) {
- wfProfileIn( __METHOD__ );
$i = 0;
$j = 0;
@@ -697,7 +692,6 @@ class DiffEngine {
assert( '$j >= 0 && !$other_changed[$j]' );
}
}
- wfProfileOut( __METHOD__ );
}
}
@@ -858,7 +852,6 @@ class MappedDiff extends Diff {
*/
public function __construct( $from_lines, $to_lines,
$mapped_from_lines, $mapped_to_lines ) {
- wfProfileIn( __METHOD__ );
assert( 'count( $from_lines ) == count( $mapped_from_lines )' );
assert( 'count( $to_lines ) == count( $mapped_to_lines )' );
@@ -880,7 +873,6 @@ class MappedDiff extends Diff {
$yi += count( $closing );
}
}
- wfProfileOut( __METHOD__ );
}
}
@@ -981,14 +973,12 @@ class WordLevelDiff extends MappedDiff {
* @param string[] $closing_lines
*/
public function __construct( $orig_lines, $closing_lines ) {
- wfProfileIn( __METHOD__ );
list( $orig_words, $orig_stripped ) = $this->split( $orig_lines );
list( $closing_words, $closing_stripped ) = $this->split( $closing_lines );
parent::__construct( $orig_words, $closing_words,
$orig_stripped, $closing_stripped );
- wfProfileOut( __METHOD__ );
}
/**
@@ -997,7 +987,6 @@ class WordLevelDiff extends MappedDiff {
* @return array[]
*/
private function split( $lines ) {
- wfProfileIn( __METHOD__ );
$words = array();
$stripped = array();
@@ -1028,7 +1017,6 @@ class WordLevelDiff extends MappedDiff {
}
}
}
- wfProfileOut( __METHOD__ );
return array( $words, $stripped );
}
@@ -1037,7 +1025,6 @@ class WordLevelDiff extends MappedDiff {
* @return string[]
*/
public function orig() {
- wfProfileIn( __METHOD__ );
$orig = new HWLDFWordAccumulator;
foreach ( $this->edits as $edit ) {
@@ -1048,7 +1035,6 @@ class WordLevelDiff extends MappedDiff {
}
}
$lines = $orig->getLines();
- wfProfileOut( __METHOD__ );
return $lines;
}
@@ -1057,7 +1043,6 @@ class WordLevelDiff extends MappedDiff {
* @return string[]
*/
public function closing() {
- wfProfileIn( __METHOD__ );
$closing = new HWLDFWordAccumulator;
foreach ( $this->edits as $edit ) {
@@ -1068,7 +1053,6 @@ class WordLevelDiff extends MappedDiff {
}
}
$lines = $closing->getLines();
- wfProfileOut( __METHOD__ );
return $lines;
}
diff --git a/includes/diff/DiffFormatter.php b/includes/diff/DiffFormatter.php
index 40df0d75..33ca931f 100644
--- a/includes/diff/DiffFormatter.php
+++ b/includes/diff/DiffFormatter.php
@@ -57,7 +57,6 @@ abstract class DiffFormatter {
* @return string The formatted output.
*/
public function format( $diff ) {
- wfProfileIn( __METHOD__ );
$xi = $yi = 1;
$block = false;
@@ -115,7 +114,6 @@ abstract class DiffFormatter {
}
$end = $this->endDiff();
- wfProfileOut( __METHOD__ );
return $end;
}
@@ -130,7 +128,6 @@ abstract class DiffFormatter {
* @throws MWException If the edit type is not known.
*/
protected function block( $xbeg, $xlen, $ybeg, $ylen, &$edits ) {
- wfProfileIn( __METHOD__ );
$this->startBlock( $this->blockHeader( $xbeg, $xlen, $ybeg, $ylen ) );
foreach ( $edits as $edit ) {
if ( $edit->type == 'copy' ) {
@@ -146,7 +143,6 @@ abstract class DiffFormatter {
}
}
$this->endBlock();
- wfProfileOut( __METHOD__ );
}
protected function startDiff() {
diff --git a/includes/diff/DifferenceEngine.php b/includes/diff/DifferenceEngine.php
index 50e08ca1..77bbd36a 100644
--- a/includes/diff/DifferenceEngine.php
+++ b/includes/diff/DifferenceEngine.php
@@ -94,6 +94,10 @@ class DifferenceEngine extends ContextSource {
/** @var bool Show rev_deleted content if allowed */
protected $unhide = false;
+
+ /** @var bool Refresh the diff cache */
+ protected $mRefreshCache = false;
+
/**#@-*/
/**
@@ -224,12 +228,14 @@ class DifferenceEngine extends ContextSource {
}
$out->setPageTitle( $this->msg( 'errorpagetitle' ) );
- $out->addWikiMsg( 'difference-missing-revision',
- $this->getLanguage()->listToText( $missing ), count( $missing ) );
+ $msg = $this->msg( 'difference-missing-revision' )
+ ->params( $this->getLanguage()->listToText( $missing ) )
+ ->numParams( count( $missing ) )
+ ->parseAsBlock();
+ $out->addHtml( $msg );
}
public function showDiffPage( $diffOnly = false ) {
- wfProfileIn( __METHOD__ );
# Allow frames except in certain special cases
$out = $this->getOutput();
@@ -238,7 +244,6 @@ class DifferenceEngine extends ContextSource {
if ( !$this->loadRevisionData() ) {
$this->showMissingRevision();
- wfProfileOut( __METHOD__ );
return;
}
@@ -250,7 +255,6 @@ class DifferenceEngine extends ContextSource {
$this->mOldPage->getUserPermissionsErrors( 'read', $user ) );
}
if ( count( $permErrors ) ) {
- wfProfileOut( __METHOD__ );
throw new PermissionsError( 'read', $permErrors );
}
@@ -280,7 +284,7 @@ class DifferenceEngine extends ContextSource {
$samePage = true;
$oldHeader = '';
} else {
- wfRunHooks( 'DiffViewHeader', array( $this, $this->mOldRev, $this->mNewRev ) );
+ Hooks::run( 'DiffViewHeader', array( $this, $this->mOldRev, $this->mNewRev ) );
if ( $this->mNewPage->equals( $this->mOldPage ) ) {
$out->setPageTitle( $this->msg( 'difference-title', $this->mNewPage->getPrefixedText() ) );
@@ -384,7 +388,7 @@ class DifferenceEngine extends ContextSource {
$rdel = $this->revisionDeleteLink( $this->mNewRev );
# Allow extensions to define their own revision tools
- wfRunHooks( 'DiffRevisionTools', array( $this->mNewRev, &$revisionTools, $this->mOldRev ) );
+ Hooks::run( 'DiffRevisionTools', array( $this->mNewRev, &$revisionTools, $this->mOldRev ) );
$formattedRevisionTools = array();
// Put each one in parentheses (poor man's button)
foreach ( $revisionTools as $key => $tool ) {
@@ -451,7 +455,6 @@ class DifferenceEngine extends ContextSource {
$this->renderNewRevision();
}
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -488,7 +491,7 @@ class DifferenceEngine extends ContextSource {
array( 'USE INDEX' => 'rc_timestamp' )
);
- if ( $change && $change->getPerformer()->getName() !== $user->getName() ) {
+ if ( $change && !$change->getPerformer()->equals( $user ) ) {
$rcid = $change->getAttribute( 'rc_id' );
} else {
// None found or the page has been created by the current user.
@@ -544,15 +547,14 @@ class DifferenceEngine extends ContextSource {
* Show the new revision of the page.
*/
public function renderNewRevision() {
- wfProfileIn( __METHOD__ );
$out = $this->getOutput();
$revHeader = $this->getRevisionHeader( $this->mNewRev );
# Add "current version as of X" title
- $out->addHTML( "<hr class='diff-hr' />
+ $out->addHTML( "<hr class='diff-hr' id='mw-oldid' />
<h2 class='diff-currentversion-title'>{$revHeader}</h2>\n" );
# Page content may be handled by a hooked call instead...
# @codingStandardsIgnoreStart Ignoring long lines.
- if ( wfRunHooks( 'ArticleContentOnDiff', array( $this, $out ) ) ) {
+ if ( Hooks::run( 'ArticleContentOnDiff', array( $this, $out ) ) ) {
$this->loadNewText();
$out->setRevisionId( $this->mNewid );
$out->setRevisionTimestamp( $this->mNewRev->getTimestamp() );
@@ -572,7 +574,7 @@ class DifferenceEngine extends ContextSource {
$out->addParserOutputContent( $po );
}
}
- } elseif ( !wfRunHooks( 'ArticleContentViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
+ } elseif ( !Hooks::run( 'ArticleContentViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
// Handled by extension
} elseif ( !ContentHandler::runLegacyHooks( 'ArticleViewCustom', array( $this->mNewContent, $this->mNewPage, $out ) ) ) {
// NOTE: deprecated hook, B/C only
@@ -602,13 +604,12 @@ class DifferenceEngine extends ContextSource {
# Add redundant patrol link on bottom...
$out->addHTML( $this->markPatrolledLink() );
- wfProfileOut( __METHOD__ );
}
protected function getParserOutput( WikiPage $page, Revision $rev ) {
$parserOptions = $page->makeParserOptions( $this->getContext() );
- if ( !$rev->isCurrent() || !$rev->getTitle()->quickUserCan( "edit" ) ) {
+ if ( !$rev->isCurrent() || !$rev->getTitle()->quickUserCan( 'edit', $this->getUser() ) ) {
$parserOptions->setEditSection( false );
}
@@ -681,23 +682,19 @@ class DifferenceEngine extends ContextSource {
*/
public function getDiffBody() {
global $wgMemc;
- wfProfileIn( __METHOD__ );
$this->mCacheHit = true;
// Check if the diff should be hidden from this user
if ( !$this->loadRevisionData() ) {
- wfProfileOut( __METHOD__ );
return false;
} elseif ( $this->mOldRev &&
!$this->mOldRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
) {
- wfProfileOut( __METHOD__ );
return false;
} elseif ( $this->mNewRev &&
!$this->mNewRev->userCan( Revision::DELETED_TEXT, $this->getUser() )
) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -705,7 +702,6 @@ class DifferenceEngine extends ContextSource {
if ( $this->mOldRev === false || ( $this->mOldRev && $this->mNewRev
&& $this->mOldRev->getID() == $this->mNewRev->getID() )
) {
- wfProfileOut( __METHOD__ );
return '';
}
@@ -721,7 +717,6 @@ class DifferenceEngine extends ContextSource {
wfIncrStats( 'diff_cache_hit' );
$difftext = $this->localiseLineNumbers( $difftext );
$difftext .= "\n<!-- diff cache key $key -->\n";
- wfProfileOut( __METHOD__ );
return $difftext;
}
@@ -731,7 +726,6 @@ class DifferenceEngine extends ContextSource {
// Loadtext is permission safe, this just clears out the diff
if ( !$this->loadText() ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -739,7 +733,7 @@ class DifferenceEngine extends ContextSource {
$difftext = $this->generateContentDiffBody( $this->mOldContent, $this->mNewContent );
// Save to cache for 7 days
- if ( !wfRunHooks( 'AbortDiffCache', array( &$this ) ) ) {
+ if ( !Hooks::run( 'AbortDiffCache', array( &$this ) ) ) {
wfIncrStats( 'diff_uncacheable' );
} elseif ( $key !== false && $difftext !== false ) {
wfIncrStats( 'diff_cache_miss' );
@@ -751,7 +745,6 @@ class DifferenceEngine extends ContextSource {
if ( $difftext !== false ) {
$difftext = $this->localiseLineNumbers( $difftext );
}
- wfProfileOut( __METHOD__ );
return $difftext;
}
@@ -837,8 +830,6 @@ class DifferenceEngine extends ContextSource {
public function generateTextDiffBody( $otext, $ntext ) {
global $wgExternalDiffEngine, $wgContLang;
- wfProfileIn( __METHOD__ );
-
$otext = str_replace( "\r\n", "\n", $otext );
$ntext = str_replace( "\r\n", "\n", $ntext );
@@ -847,7 +838,6 @@ class DifferenceEngine extends ContextSource {
# input text to be HTML-escaped already
$otext = htmlspecialchars( $wgContLang->segmentForDiff( $otext ) );
$ntext = htmlspecialchars( $wgContLang->segmentForDiff( $ntext ) );
- wfProfileOut( __METHOD__ );
return $wgContLang->unsegmentForDiff( wikidiff_do_diff( $otext, $ntext, 2 ) ) .
$this->debug( 'wikidiff1' );
@@ -856,11 +846,8 @@ class DifferenceEngine extends ContextSource {
if ( $wgExternalDiffEngine == 'wikidiff2' && function_exists( 'wikidiff2_do_diff' ) ) {
# Better external diff engine, the 2 may some day be dropped
# This one does the escaping and segmenting itself
- wfProfileIn( 'wikidiff2_do_diff' );
$text = wikidiff2_do_diff( $otext, $ntext, 2 );
$text .= $this->debug( 'wikidiff2' );
- wfProfileOut( 'wikidiff2_do_diff' );
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -872,13 +859,11 @@ class DifferenceEngine extends ContextSource {
$tempFile1 = fopen( $tempName1, "w" );
if ( !$tempFile1 ) {
- wfProfileOut( __METHOD__ );
return false;
}
$tempFile2 = fopen( $tempName2, "w" );
if ( !$tempFile2 ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -887,13 +872,10 @@ class DifferenceEngine extends ContextSource {
fclose( $tempFile1 );
fclose( $tempFile2 );
$cmd = wfEscapeShellArg( $wgExternalDiffEngine, $tempName1, $tempName2 );
- wfProfileIn( __METHOD__ . "-shellexec" );
$difftext = wfShellExec( $cmd );
$difftext .= $this->debug( "external $wgExternalDiffEngine" );
- wfProfileOut( __METHOD__ . "-shellexec" );
unlink( $tempName1 );
unlink( $tempName2 );
- wfProfileOut( __METHOD__ );
return $difftext;
}
@@ -903,8 +885,7 @@ class DifferenceEngine extends ContextSource {
$nta = explode( "\n", $wgContLang->segmentForDiff( $ntext ) );
$diffs = new Diff( $ota, $nta );
$formatter = new TableDiffFormatter();
- $difftext = $wgContLang->unsegmentForDiff( $formatter->format( $diffs ) ) .
- wfProfileOut( __METHOD__ );
+ $difftext = $wgContLang->unsegmentForDiff( $formatter->format( $diffs ) );
return $difftext;
}
@@ -985,7 +966,7 @@ class DifferenceEngine extends ContextSource {
$users = $this->mNewPage->getAuthorsBetween( $oldRev, $newRev, $limit );
$numUsers = count( $users );
- if ( $numUsers == 1 && $users[0] == $newRev->getRawUserText() ) {
+ if ( $numUsers == 1 && $users[0] == $newRev->getUserText( Revision::RAW ) ) {
$numUsers = 0; // special case to say "by the same user" instead of "by one other user"
}
@@ -1059,7 +1040,7 @@ class DifferenceEngine extends ContextSource {
$key = $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold';
$msg = $this->msg( $key )->escaped();
$editLink = $this->msg( 'parentheses' )->rawParams(
- Linker::linkKnown( $title, $msg, array( ), $editQuery ) )->plain();
+ Linker::linkKnown( $title, $msg, array( ), $editQuery ) )->escaped();
$header .= ' ' . Html::rawElement(
'span',
array( 'class' => 'mw-diff-edit' ),
@@ -1221,7 +1202,7 @@ class DifferenceEngine extends ContextSource {
$this->mNewid = 0;
}
- wfRunHooks(
+ Hooks::run(
'NewDifferenceEngine',
array( $this->getTitle(), &$this->mOldid, &$this->mNewid, $old, $new )
);
diff --git a/includes/diff/TableDiffFormatter.php b/includes/diff/TableDiffFormatter.php
index db7318f2..5d0183ff 100644
--- a/includes/diff/TableDiffFormatter.php
+++ b/includes/diff/TableDiffFormatter.php
@@ -62,7 +62,7 @@ class TableDiffFormatter extends DiffFormatter {
protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
// '<!--LINE \d+ -->' get replaced by a localised line number
// in DifferenceEngine::localiseLineNumbers
- $r = '<tr><td colspan="2" class="diff-lineno"><!--LINE ' . $xbeg . "--></td>\n" .
+ $r = '<tr><td colspan="2" class="diff-lineno" id="L' . $xbeg . '" ><!--LINE ' . $xbeg . "--></td>\n" .
'<td colspan="2" class="diff-lineno"><!--LINE ' . $ybeg . "--></td></tr>\n";
return $r;
@@ -190,7 +190,6 @@ class TableDiffFormatter extends DiffFormatter {
* @param string[] $closing
*/
protected function changed( $orig, $closing ) {
- wfProfileIn( __METHOD__ );
$diff = new WordLevelDiff( $orig, $closing );
$del = $diff->orig();
@@ -208,7 +207,6 @@ class TableDiffFormatter extends DiffFormatter {
echo '<tr>' . $this->emptyLine() .
$this->addedLine( $line ) . "</tr>\n";
}
- wfProfileOut( __METHOD__ );
}
}
diff --git a/includes/exception/HttpError.php b/includes/exception/HttpError.php
index 6ab6e039..b81c5731 100644
--- a/includes/exception/HttpError.php
+++ b/includes/exception/HttpError.php
@@ -18,6 +18,8 @@
* @file
*/
+use MediaWiki\Logger\LoggerFactory;
+
/**
* Show an error that looks like an HTTP server error.
* Replacement for wfHttpError().
@@ -43,6 +45,19 @@ class HttpError extends MWException {
}
/**
+ * We don't want the default exception logging as we got our own logging set
+ * up in self::report.
+ *
+ * @see MWException::isLoggable
+ *
+ * @since 1.24
+ * @return bool
+ */
+ public function isLoggable() {
+ return false;
+ }
+
+ /**
* Returns the HTTP status code supplied to the constructor.
*
* @return int
@@ -52,11 +67,13 @@ class HttpError extends MWException {
}
/**
- * Report the HTTP error.
+ * Report and log the HTTP error.
* Sends the appropriate HTTP status code and outputs an
* HTML page with an error message.
*/
public function report() {
+ $this->doLog();
+
$httpMessage = HttpStatus::getMessage( $this->httpCode );
header( "Status: {$this->httpCode} {$httpMessage}", true, $this->httpCode );
@@ -65,6 +82,29 @@ class HttpError extends MWException {
print $this->getHTML();
}
+ private function doLog() {
+ $logger = LoggerFactory::getInstance( 'HttpError' );
+ $content = $this->content;
+
+ if ( $content instanceof Message ) {
+ $content = $content->text();
+ }
+
+ $context = array(
+ 'file' => $this->getFile(),
+ 'line' => $this->getLine(),
+ 'http_code' => $this->httpCode,
+ );
+
+ $logMsg = "$content ({http_code}) from {file}:{line}";
+
+ if ( $this->getStatusCode() < 500 ) {
+ $logger->info( $logMsg, $context );
+ } else {
+ $logger->error( $logMsg, $context );
+ }
+ }
+
/**
* Returns HTML for reporting the HTTP error.
* This will be a minimal but complete HTML document.
diff --git a/includes/exception/MWException.php b/includes/exception/MWException.php
index 074128f8..478fead1 100644
--- a/includes/exception/MWException.php
+++ b/includes/exception/MWException.php
@@ -117,10 +117,12 @@ class MWException extends Exception {
$args = array_slice( func_get_args(), 2 );
if ( $this->useMessageCache() ) {
- return wfMessage( $key, $args )->text();
- } else {
- return wfMsgReplaceArgs( $fallback, $args );
+ try {
+ return wfMessage( $key, $args )->text();
+ } catch ( Exception $e ) {
+ }
}
+ return wfMsgReplaceArgs( $fallback, $args );
}
/**
@@ -139,10 +141,17 @@ class MWException extends Exception {
nl2br( htmlspecialchars( MWExceptionHandler::getRedactedTraceAsString( $this ) ) ) .
"</p>\n";
} else {
+ $logId = MWExceptionHandler::getLogId( $this );
+ $type = get_class( $this );
return "<div class=\"errorbox\">" .
- '[' . MWExceptionHandler::getLogId( $this ) . '] ' .
- gmdate( 'Y-m-d H:i:s' ) .
- ": Fatal exception of type " . get_class( $this ) . "</div>\n" .
+ '[' . $logId . '] ' .
+ gmdate( 'Y-m-d H:i:s' ) . ": " .
+ $this->msg( "internalerror-fatal-exception",
+ "Fatal exception of type $1",
+ $type,
+ $logId,
+ MWExceptionHandler::getURL( $this )
+ ) . "</div>\n" .
"<!-- Set \$wgShowExceptionDetails = true; " .
"at the bottom of LocalSettings.php to show detailed " .
"debugging information. -->";
@@ -222,8 +231,6 @@ class MWException extends Exception {
public function report() {
global $wgMimeType;
- MWExceptionHandler::logException( $this );
-
if ( defined( 'MW_API' ) ) {
// Unhandled API exception, we can't be sure that format printer is alive
self::header( 'MediaWiki-API-Error: internal_api_error_' . get_class( $this ) );
diff --git a/includes/exception/MWExceptionHandler.php b/includes/exception/MWExceptionHandler.php
index 71917e13..c50b6c8c 100644
--- a/includes/exception/MWExceptionHandler.php
+++ b/includes/exception/MWExceptionHandler.php
@@ -23,11 +23,25 @@
* @ingroup Exception
*/
class MWExceptionHandler {
+
+ protected static $reservedMemory;
+ protected static $fatalErrorTypes = array(
+ E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR,
+ /* HHVM's FATAL_ERROR level */ 16777217,
+ );
+
/**
- * Install an exception handler for MediaWiki exception types.
+ * Install handlers with PHP.
*/
public static function installHandler() {
- set_exception_handler( array( 'MWExceptionHandler', 'handle' ) );
+ set_exception_handler( array( 'MWExceptionHandler', 'handleException' ) );
+ set_error_handler( array( 'MWExceptionHandler', 'handleError' ) );
+
+ // Reserve 16k of memory so we can report OOM fatals
+ self::$reservedMemory = str_repeat( ' ', 16384 );
+ register_shutdown_function(
+ array( 'MWExceptionHandler', 'handleFatalError' )
+ );
}
/**
@@ -45,7 +59,7 @@ class MWExceptionHandler {
$e->report();
} catch ( Exception $e2 ) {
// Exception occurred from within exception handler
- // Show a simpler error message for the original exception,
+ // Show a simpler message for the original exception,
// don't try to invoke report()
$message = "MediaWiki internal error.\n\n";
@@ -69,8 +83,7 @@ class MWExceptionHandler {
}
}
} else {
- $message = "Unexpected non-MediaWiki exception encountered, of type \"" .
- get_class( $e ) . "\"";
+ $message = "Exception encountered, of type \"" . get_class( $e ) . "\"";
if ( $wgShowExceptionDetails ) {
$message .= "\n" . MWExceptionHandler::getLogMessage( $e ) . "\nBacktrace:\n" .
@@ -82,6 +95,7 @@ class MWExceptionHandler {
} else {
echo nl2br( htmlspecialchars( $message ) ) . "\n";
}
+
}
}
@@ -106,6 +120,7 @@ class MWExceptionHandler {
* If there are any open database transactions, roll them back and log
* the stack trace of the exception that should have been caught so the
* transaction could be aborted properly.
+ *
* @since 1.23
* @param Exception $e
*/
@@ -126,34 +141,132 @@ class MWExceptionHandler {
*
* try {
* ...
- * } catch ( MWException $e ) {
+ * } catch ( Exception $e ) {
* $e->report();
* } catch ( Exception $e ) {
* echo $e->__toString();
* }
+ *
+ * @since 1.25
* @param Exception $e
*/
- public static function handle( $e ) {
- global $wgFullyInitialised;
-
- self::rollbackMasterChangesAndLog( $e );
+ public static function handleException( Exception $e ) {
+ try {
+ // Rollback DBs to avoid transaction notices. This may fail
+ // to rollback some DB due to connection issues or exceptions.
+ // However, any sane DB driver will rollback implicitly anyway.
+ self::rollbackMasterChangesAndLog( $e );
+ } catch ( DBError $e2 ) {
+ // If the DB is unreacheable, rollback() will throw an error
+ // and the error report() method might need messages from the DB,
+ // which would result in an exception loop. PHP may escalate such
+ // errors to "Exception thrown without a stack frame" fatals, but
+ // it's better to be explicit here.
+ self::logException( $e2 );
+ }
+ self::logException( $e );
self::report( $e );
- // Final cleanup
- if ( $wgFullyInitialised ) {
- try {
- // uses $wgRequest, hence the $wgFullyInitialised condition
- wfLogProfilingData();
- } catch ( Exception $e ) {
- }
- }
-
// Exit value should be nonzero for the benefit of shell jobs
exit( 1 );
}
/**
+ * @since 1.25
+ * @param int $level Error level raised
+ * @param string $message
+ * @param string $file
+ * @param int $line
+ */
+ public static function handleError( $level, $message, $file = null, $line = null ) {
+ // Map error constant to error name (reverse-engineer PHP error reporting)
+ $channel = 'error';
+ switch ( $level ) {
+ case E_ERROR:
+ case E_CORE_ERROR:
+ case E_COMPILE_ERROR:
+ case E_USER_ERROR:
+ case E_RECOVERABLE_ERROR:
+ case E_PARSE:
+ $levelName = 'Error';
+ $channel = 'fatal';
+ break;
+ case E_WARNING:
+ case E_CORE_WARNING:
+ case E_COMPILE_WARNING:
+ case E_USER_WARNING:
+ $levelName = 'Warning';
+ break;
+ case E_NOTICE:
+ case E_USER_NOTICE:
+ $levelName = 'Notice';
+ break;
+ case E_STRICT:
+ $levelName = 'Strict Standards';
+ break;
+ case E_DEPRECATED:
+ case E_USER_DEPRECATED:
+ $levelName = 'Deprecated';
+ break;
+ case /* HHVM's FATAL_ERROR */ 16777217:
+ $levelName = 'Fatal';
+ $channel = 'fatal';
+ break;
+ default:
+ $levelName = 'Unknown error';
+ break;
+ }
+
+ $e = new ErrorException( "PHP $levelName: $message", 0, $level, $file, $line );
+ self::logError( $e, $channel );
+
+ // This handler is for logging only. Return false will instruct PHP
+ // to continue regular handling.
+ return false;
+ }
+
+
+ /**
+ * Look for a fatal error as the cause of the request termination and log
+ * as an exception.
+ *
+ * Special handling is included for missing class errors as they may
+ * indicate that the user needs to install 3rd-party libraries via
+ * Composer or other means.
+ *
+ * @since 1.25
+ */
+ public static function handleFatalError() {
+ self::$reservedMemory = null;
+ $lastError = error_get_last();
+
+ if ( $lastError &&
+ isset( $lastError['type'] ) &&
+ in_array( $lastError['type'], self::$fatalErrorTypes )
+ ) {
+ $msg = "Fatal Error: {$lastError['message']}";
+ // HHVM: Class undefined: foo
+ // PHP5: Class 'foo' not found
+ if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/",
+ $lastError['message']
+ ) ) {
+ // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
+ $msg = <<<TXT
+{$msg}
+
+MediaWiki or an installed extension requires this class but it is not embedded directly in MediaWiki's git repository and must be installed separately by the end user.
+
+Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
+TXT;
+ // @codingStandardsIgnoreEnd
+ }
+ $e = new ErrorException( $msg, 0, $lastError['type'] );
+ self::logError( $e, 'fatal' );
+ }
+ }
+
+ /**
* Generate a string representation of an exception's stack trace
*
* Like Exception::getTraceAsString, but replaces argument values with
@@ -217,7 +330,7 @@ class MWExceptionHandler {
}
/**
- * Get the ID for this error.
+ * Get the ID for this exception.
*
* The ID is saved so that one can match the one output to the user (when
* $wgShowExceptionDetails is set to false), to the entry in the debug log.
@@ -238,7 +351,7 @@ class MWExceptionHandler {
* returns the requested URL. Otherwise, returns false.
*
* @since 1.23
- * @return string|bool
+ * @return string|false
*/
public static function getURL() {
global $wgRequest;
@@ -249,8 +362,7 @@ class MWExceptionHandler {
}
/**
- * Return the requested URL and point to file and line number from which the
- * exception occurred.
+ * Get a message formatting the exception message and its origin.
*
* @since 1.22
* @param Exception $e
@@ -258,12 +370,13 @@ class MWExceptionHandler {
*/
public static function getLogMessage( Exception $e ) {
$id = self::getLogId( $e );
+ $type = get_class( $e );
$file = $e->getFile();
$line = $e->getLine();
$message = $e->getMessage();
$url = self::getURL() ?: '[no req]';
- return "[$id] $url Exception from line $line of $file: $message";
+ return "[$id] $url $type from line $line of $file: $message";
}
/**
@@ -285,6 +398,7 @@ class MWExceptionHandler {
* @code
* {
* "id": "c41fb419",
+ * "type": "MWException",
* "file": "/var/www/mediawiki/includes/cache/MessageCache.php",
* "line": 704,
* "message": "Non-string key given",
@@ -296,6 +410,7 @@ class MWExceptionHandler {
* @code
* {
* "id": "dc457938",
+ * "type": "MWException",
* "file": "/vagrant/mediawiki/includes/cache/MessageCache.php",
* "line": 704,
* "message": "Non-string key given",
@@ -315,18 +430,24 @@ class MWExceptionHandler {
* @param Exception $e
* @param bool $pretty Add non-significant whitespace to improve readability (default: false).
* @param int $escaping Bitfield consisting of FormatJson::.*_OK class constants.
- * @return string|bool JSON string if successful; false upon failure
+ * @return string|false JSON string if successful; false upon failure
*/
public static function jsonSerializeException( Exception $e, $pretty = false, $escaping = 0 ) {
global $wgLogExceptionBacktrace;
$exceptionData = array(
'id' => self::getLogId( $e ),
+ 'type' => get_class( $e ),
'file' => $e->getFile(),
'line' => $e->getLine(),
'message' => $e->getMessage(),
);
+ if ( $e instanceof ErrorException && ( error_reporting() & $e->getSeverity() ) === 0 ) {
+ // Flag surpressed errors
+ $exceptionData['suppressed'] = true;
+ }
+
// Because MediaWiki is first and foremost a web application, we set a
// 'url' key unconditionally, but set it to null if the exception does
// not occur in the context of a web request, as a way of making that
@@ -345,7 +466,7 @@ class MWExceptionHandler {
* Log an exception to the exception log (if enabled).
*
* This method must not assume the exception is an MWException,
- * it is also used to handle PHP errors or errors from other libraries.
+ * it is also used to handle PHP exceptions or exceptions from other libraries.
*
* @since 1.22
* @param Exception $e
@@ -366,7 +487,33 @@ class MWExceptionHandler {
wfDebugLog( 'exception-json', $json, 'private' );
}
}
-
}
+ /**
+ * Log an exception that wasn't thrown but made to wrap an error.
+ *
+ * @since 1.25
+ * @param ErrorException $e
+ * @param string $channel
+ */
+ protected static function logError( ErrorException $e, $channel ) {
+ global $wgLogExceptionBacktrace;
+
+ // The set_error_handler callback is independent from error_reporting.
+ // Filter out unwanted errors manually (e.g. when wfSuppressWarnings is active).
+ if ( ( error_reporting() & $e->getSeverity() ) !== 0 ) {
+ $log = self::getLogMessage( $e );
+ if ( $wgLogExceptionBacktrace ) {
+ wfDebugLog( $channel, $log . "\n" . $e->getTraceAsString() );
+ } else {
+ wfDebugLog( $channel, $log );
+ }
+ }
+
+ // Include all errors in the json log (surpressed errors will be flagged)
+ $json = self::jsonSerializeException( $e, false, FormatJson::ALL_OK );
+ if ( $json !== false ) {
+ wfDebugLog( "$channel-json", $json, 'private' );
+ }
+ }
}
diff --git a/includes/TimestampException.php b/includes/exception/TimestampException.php
index b9c0c35c..b9c0c35c 100644
--- a/includes/TimestampException.php
+++ b/includes/exception/TimestampException.php
diff --git a/includes/exception/UserNotLoggedIn.php b/includes/exception/UserNotLoggedIn.php
index 03ba0b20..02fca3d8 100644
--- a/includes/exception/UserNotLoggedIn.php
+++ b/includes/exception/UserNotLoggedIn.php
@@ -25,8 +25,9 @@
* 'exception-nologin' as a title and 'exception-nologin-text' for the message.
*
* @note In order for this exception to redirect, the error message passed to the
- * constructor has to be explicitly added to LoginForm::validErrorMessages. Otherwise,
- * the user will just be shown the message rather than redirected.
+ * constructor has to be explicitly added to LoginForm::validErrorMessages or with
+ * the LoginFormValidErrorMessages hook. Otherwise, the user will just be shown the message
+ * rather than redirected.
*
* @par Example:
* @code
@@ -52,7 +53,8 @@
class UserNotLoggedIn extends ErrorPageError {
/**
- * @note The value of the $reasonMsg parameter must be put into LoginForm::validErrorMessages
+ * @note The value of the $reasonMsg parameter must be put into LoginForm::validErrorMessages or
+ * set with the LoginFormValidErrorMessages Hook.
* if you want the user to be automatically redirected to the login form.
*
* @param string $reasonMsg A message key containing the reason for the error.
@@ -77,7 +79,7 @@ class UserNotLoggedIn extends ErrorPageError {
public function report() {
// If an unsupported message is used, don't try redirecting to Special:Userlogin,
// since the message may not be compatible.
- if ( !in_array( $this->msg, LoginForm::$validErrorMessages ) ) {
+ if ( !in_array( $this->msg, LoginForm::getValidErrorMessages() ) ) {
parent::report();
}
diff --git a/includes/externalstore/ExternalStore.php b/includes/externalstore/ExternalStore.php
index 688130e0..ea04cc85 100644
--- a/includes/externalstore/ExternalStore.php
+++ b/includes/externalstore/ExternalStore.php
@@ -197,7 +197,7 @@ class ExternalStore {
}
try {
$url = $store->store( $path, $data ); // Try to save the object
- } catch ( MWException $error ) {
+ } catch ( Exception $error ) {
$url = false;
}
if ( strlen( $url ) ) {
diff --git a/includes/externalstore/ExternalStoreHttp.php b/includes/externalstore/ExternalStoreHttp.php
index 345c17be..00030d85 100644
--- a/includes/externalstore/ExternalStoreHttp.php
+++ b/includes/externalstore/ExternalStoreHttp.php
@@ -31,7 +31,7 @@ class ExternalStoreHttp extends ExternalStoreMedium {
* @see ExternalStoreMedium::fetchFromURL()
*/
public function fetchFromURL( $url ) {
- return Http::get( $url );
+ return Http::get( $url, array(), __METHOD__ );
}
/**
diff --git a/includes/filebackend/FSFile.php b/includes/filebackend/FSFile.php
index 1659c62a..6ee9b2e0 100644
--- a/includes/filebackend/FSFile.php
+++ b/includes/filebackend/FSFile.php
@@ -104,7 +104,6 @@ class FSFile {
* @return array
*/
public function getProps( $ext = true ) {
- wfProfileIn( __METHOD__ );
wfDebug( __METHOD__ . ": Getting file info for $this->path\n" );
$info = self::placeholderProps();
@@ -146,8 +145,6 @@ class FSFile {
wfDebug( __METHOD__ . ": $this->path NOT FOUND!\n" );
}
- wfProfileOut( __METHOD__ );
-
return $info;
}
@@ -201,10 +198,8 @@ class FSFile {
* @return bool|string False on failure
*/
public function getSha1Base36( $recache = false ) {
- wfProfileIn( __METHOD__ );
if ( $this->sha1Base36 !== null && !$recache ) {
- wfProfileOut( __METHOD__ );
return $this->sha1Base36;
}
@@ -217,8 +212,6 @@ class FSFile {
$this->sha1Base36 = wfBaseConvert( $this->sha1Base36, 16, 36, 31 );
}
- wfProfileOut( __METHOD__ );
-
return $this->sha1Base36;
}
diff --git a/includes/filebackend/FSFileBackend.php b/includes/filebackend/FSFileBackend.php
index b99ffb62..07370ad2 100644
--- a/includes/filebackend/FSFileBackend.php
+++ b/includes/filebackend/FSFileBackend.php
@@ -451,10 +451,13 @@ class FSFileBackend extends FileBackendStore {
// Create the directory and its parents as needed...
$this->trapWarnings();
if ( !wfMkdirParents( $dir ) ) {
+ wfDebugLog( 'FSFileBackend', __METHOD__ . ": cannot create directory $dir" );
$status->fatal( 'directorycreateerror', $params['dir'] ); // fails on races
} elseif ( !is_writable( $dir ) ) {
+ wfDebugLog( 'FSFileBackend', __METHOD__ . ": directory $dir is read-only" );
$status->fatal( 'directoryreadonlyerror', $params['dir'] );
} elseif ( !is_readable( $dir ) ) {
+ wfDebugLog( 'FSFileBackend', __METHOD__ . ": directory $dir is not readable" );
$status->fatal( 'directorynotreadableerror', $params['dir'] );
}
$this->untrapWarnings();
@@ -678,6 +681,11 @@ class FSFileBackend extends FileBackendStore {
return false;
}
+ /**
+ * @param FileBackendStoreOpHandle[] $fileOpHandles
+ *
+ * @return Status[]
+ */
protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
$statuses = array();
diff --git a/includes/filebackend/FileBackend.php b/includes/filebackend/FileBackend.php
index 8c0a61a1..b87e26d3 100644
--- a/includes/filebackend/FileBackend.php
+++ b/includes/filebackend/FileBackend.php
@@ -1204,7 +1204,9 @@ abstract class FileBackend {
/**
* Preload file stat information (concurrently if possible) into in-process cache.
+ *
* This should be used when stat calls will be made on a known list of a many files.
+ * This does not make use of the persistent file stat cache.
*
* @see FileBackend::getFileStat()
*
@@ -1491,7 +1493,7 @@ abstract class FileBackend {
* @ingroup FileBackend
* @since 1.23
*/
-class FileBackendException extends MWException {
+class FileBackendException extends Exception {
}
/**
diff --git a/includes/filebackend/FileBackendMultiWrite.php b/includes/filebackend/FileBackendMultiWrite.php
index bfffcc0f..f2d13eeb 100644
--- a/includes/filebackend/FileBackendMultiWrite.php
+++ b/includes/filebackend/FileBackendMultiWrite.php
@@ -299,7 +299,7 @@ class FileBackendMultiWrite extends FileBackend {
/**
* Check that a set of files are consistent across all internal backends
- * and re-synchronize those files againt the "multi master" if needed.
+ * and re-synchronize those files against the "multi master" if needed.
*
* @param array $paths List of storage paths
* @return Status
@@ -314,6 +314,8 @@ class FileBackendMultiWrite extends FileBackend {
$mStat = $mBackend->getFileStat( array( 'src' => $mPath, 'latest' => true ) );
if ( $mStat === null || ( $mSha1 !== false && !$mStat ) ) { // sanity
$status->fatal( 'backend-fail-internal', $this->name );
+ wfDebugLog( 'FileOperation', __METHOD__
+ . ': File is not available on the master backend' );
continue; // file is not available on the master backend...
}
// Check of all clone backends agree with the master...
@@ -326,6 +328,8 @@ class FileBackendMultiWrite extends FileBackend {
$cStat = $cBackend->getFileStat( array( 'src' => $cPath, 'latest' => true ) );
if ( $cStat === null || ( $cSha1 !== false && !$cStat ) ) { // sanity
$status->fatal( 'backend-fail-internal', $cBackend->getName() );
+ wfDebugLog( 'FileOperation', __METHOD__
+ . ': File is not available on the clone backend' );
continue; // file is not available on the clone backend...
}
if ( $mSha1 === $cSha1 ) {
diff --git a/includes/filebackend/FileBackendStore.php b/includes/filebackend/FileBackendStore.php
index 495ac3c0..25e87d43 100644
--- a/includes/filebackend/FileBackendStore.php
+++ b/includes/filebackend/FileBackendStore.php
@@ -118,7 +118,7 @@ abstract class FileBackendStore extends FileBackend {
* @return Status
*/
final public function createInternal( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
if ( strlen( $params['content'] ) > $this->maxFileSizeInternal() ) {
$status = Status::newFatal( 'backend-fail-maxsize',
$params['dst'], $this->maxFileSizeInternal() );
@@ -159,7 +159,7 @@ abstract class FileBackendStore extends FileBackend {
* @return Status
*/
final public function storeInternal( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
if ( filesize( $params['src'] ) > $this->maxFileSizeInternal() ) {
$status = Status::newFatal( 'backend-fail-maxsize',
$params['dst'], $this->maxFileSizeInternal() );
@@ -201,7 +201,7 @@ abstract class FileBackendStore extends FileBackend {
* @return Status
*/
final public function copyInternal( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = $this->doCopyInternal( $params );
$this->clearCache( array( $params['dst'] ) );
if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
@@ -233,7 +233,7 @@ abstract class FileBackendStore extends FileBackend {
* @return Status
*/
final public function deleteInternal( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = $this->doDeleteInternal( $params );
$this->clearCache( array( $params['src'] ) );
$this->deleteFileCache( $params['src'] ); // persistent cache
@@ -267,7 +267,7 @@ abstract class FileBackendStore extends FileBackend {
* @return Status
*/
final public function moveInternal( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = $this->doMoveInternal( $params );
$this->clearCache( array( $params['src'], $params['dst'] ) );
$this->deleteFileCache( $params['src'] ); // persistent cache
@@ -313,7 +313,7 @@ abstract class FileBackendStore extends FileBackend {
* @return Status
*/
final public function describeInternal( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
if ( count( $params['headers'] ) ) {
$status = $this->doDescribeInternal( $params );
$this->clearCache( array( $params['src'] ) );
@@ -346,7 +346,7 @@ abstract class FileBackendStore extends FileBackend {
}
final public function concatenate( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = Status::newGood();
// Try to lock the source files for the scope of this function
@@ -439,7 +439,7 @@ abstract class FileBackendStore extends FileBackend {
}
final protected function doPrepare( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = Status::newGood();
list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
@@ -474,7 +474,7 @@ abstract class FileBackendStore extends FileBackend {
}
final protected function doSecure( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = Status::newGood();
list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
@@ -509,7 +509,7 @@ abstract class FileBackendStore extends FileBackend {
}
final protected function doPublish( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = Status::newGood();
list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
@@ -544,7 +544,7 @@ abstract class FileBackendStore extends FileBackend {
}
final protected function doClean( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = Status::newGood();
// Recursive: first delete all empty subdirs recursively
@@ -600,21 +600,21 @@ abstract class FileBackendStore extends FileBackend {
}
final public function fileExists( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$stat = $this->getFileStat( $params );
return ( $stat === null ) ? null : (bool)$stat; // null => failure
}
final public function getFileTimestamp( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$stat = $this->getFileStat( $params );
return $stat ? $stat['mtime'] : false;
}
final public function getFileSize( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$stat = $this->getFileStat( $params );
return $stat ? $stat['size'] : false;
@@ -625,9 +625,9 @@ abstract class FileBackendStore extends FileBackend {
if ( $path === null ) {
return false; // invalid storage path
}
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$latest = !empty( $params['latest'] ); // use latest data?
- if ( !$this->cheapCache->has( $path, 'stat', self::CACHE_TTL ) ) {
+ if ( !$latest && !$this->cheapCache->has( $path, 'stat', self::CACHE_TTL ) ) {
$this->primeFileCache( array( $path ) ); // check persistent cache
}
if ( $this->cheapCache->has( $path, 'stat', self::CACHE_TTL ) ) {
@@ -644,9 +644,7 @@ abstract class FileBackendStore extends FileBackend {
}
}
}
- wfProfileIn( __METHOD__ . '-miss-' . $this->name );
$stat = $this->doGetFileStat( $params );
- wfProfileOut( __METHOD__ . '-miss-' . $this->name );
if ( is_array( $stat ) ) { // file exists
// Strongly consistent backends can automatically set "latest"
$stat['latest'] = isset( $stat['latest'] ) ? $stat['latest'] : $latest;
@@ -679,7 +677,7 @@ abstract class FileBackendStore extends FileBackend {
abstract protected function doGetFileStat( array $params );
public function getFileContentsMulti( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$params = $this->setConcurrencyFlags( $params );
$contents = $this->doGetFileContentsMulti( $params );
@@ -708,7 +706,7 @@ abstract class FileBackendStore extends FileBackend {
if ( $path === null ) {
return false; // invalid storage path
}
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$latest = !empty( $params['latest'] ); // use latest data?
if ( $this->cheapCache->has( $path, 'xattr', self::CACHE_TTL ) ) {
$stat = $this->cheapCache->get( $path, 'xattr' );
@@ -718,12 +716,8 @@ abstract class FileBackendStore extends FileBackend {
return $stat['map'];
}
}
- wfProfileIn( __METHOD__ . '-miss' );
- wfProfileIn( __METHOD__ . '-miss-' . $this->name );
$fields = $this->doGetFileXAttributes( $params );
$fields = is_array( $fields ) ? self::normalizeXAttributes( $fields ) : false;
- wfProfileOut( __METHOD__ . '-miss-' . $this->name );
- wfProfileOut( __METHOD__ . '-miss' );
$this->cheapCache->set( $path, 'xattr', array( 'map' => $fields, 'latest' => $latest ) );
return $fields;
@@ -742,7 +736,7 @@ abstract class FileBackendStore extends FileBackend {
if ( $path === null ) {
return false; // invalid storage path
}
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$latest = !empty( $params['latest'] ); // use latest data?
if ( $this->cheapCache->has( $path, 'sha1', self::CACHE_TTL ) ) {
$stat = $this->cheapCache->get( $path, 'sha1' );
@@ -752,9 +746,7 @@ abstract class FileBackendStore extends FileBackend {
return $stat['hash'];
}
}
- wfProfileIn( __METHOD__ . '-miss-' . $this->name );
$hash = $this->doGetFileSha1Base36( $params );
- wfProfileOut( __METHOD__ . '-miss-' . $this->name );
$this->cheapCache->set( $path, 'sha1', array( 'hash' => $hash, 'latest' => $latest ) );
return $hash;
@@ -775,7 +767,7 @@ abstract class FileBackendStore extends FileBackend {
}
final public function getFileProps( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$fsFile = $this->getLocalReference( $params );
$props = $fsFile ? $fsFile->getProps() : FSFile::placeholderProps();
@@ -783,7 +775,7 @@ abstract class FileBackendStore extends FileBackend {
}
final public function getLocalReferenceMulti( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$params = $this->setConcurrencyFlags( $params );
@@ -826,7 +818,7 @@ abstract class FileBackendStore extends FileBackend {
}
final public function getLocalCopyMulti( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$params = $this->setConcurrencyFlags( $params );
$tmpFiles = $this->doGetLocalCopyMulti( $params );
@@ -851,7 +843,7 @@ abstract class FileBackendStore extends FileBackend {
}
final public function streamFile( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = Status::newGood();
$info = $this->getFileStat( $params );
@@ -865,9 +857,7 @@ abstract class FileBackendStore extends FileBackend {
if ( $res == StreamFile::NOT_MODIFIED ) {
// do nothing; client cache is up to date
} elseif ( $res == StreamFile::READY_STREAM ) {
- wfProfileIn( __METHOD__ . '-send-' . $this->name );
$status = $this->doStreamFile( $params );
- wfProfileOut( __METHOD__ . '-send-' . $this->name );
if ( !$status->isOK() ) {
// Per bug 41113, nasty things can happen if bad cache entries get
// stuck in cache. It's also possible that this error can come up
@@ -1071,7 +1061,7 @@ abstract class FileBackendStore extends FileBackend {
}
final protected function doOperationsInternal( array $ops, array $opts ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = Status::newGood();
// Fix up custom header name/value pairs...
@@ -1137,7 +1127,7 @@ abstract class FileBackendStore extends FileBackend {
}
final protected function doQuickOperationsInternal( array $ops ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$status = Status::newGood();
// Fix up custom header name/value pairs...
@@ -1198,13 +1188,13 @@ abstract class FileBackendStore extends FileBackend {
* The resulting Status object fields will correspond
* to the order in which the handles where given.
*
- * @param array $fileOpHandles
+ * @param FileBackendStoreOpHandle[] $fileOpHandles
+ *
* @throws FileBackendError
- * @internal param array $handles List of FileBackendStoreOpHandle objects
* @return array Map of Status objects
*/
final public function executeOpHandlesInternal( array $fileOpHandles ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
foreach ( $fileOpHandles as $fileOpHandle ) {
if ( !( $fileOpHandle instanceof FileBackendStoreOpHandle ) ) {
@@ -1223,9 +1213,11 @@ abstract class FileBackendStore extends FileBackend {
/**
* @see FileBackendStore::executeOpHandlesInternal()
- * @param array $fileOpHandles
+ *
+ * @param FileBackendStoreOpHandle[] $fileOpHandles
+ *
* @throws FileBackendError
- * @return array List of corresponding Status objects
+ * @return Status[] List of corresponding Status objects
*/
protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
if ( count( $fileOpHandles ) ) {
@@ -1300,7 +1292,7 @@ abstract class FileBackendStore extends FileBackend {
}
final public function preloadFileStat( array $params ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$success = true; // no network errors
$params['concurrency'] = ( $this->parallelize !== 'off' ) ? $this->concurrency : 1;
@@ -1372,7 +1364,7 @@ abstract class FileBackendStore extends FileBackend {
/**
* Check if a container name is valid.
- * This checks for for length and illegal characters.
+ * This checks for length and illegal characters.
*
* @param string $container
* @return bool
@@ -1623,7 +1615,7 @@ abstract class FileBackendStore extends FileBackend {
* @param array $items
*/
final protected function primeContainerCache( array $items ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$paths = array(); // list of storage paths
$contNames = array(); // (cache key => resolved container name)
@@ -1733,7 +1725,7 @@ abstract class FileBackendStore extends FileBackend {
* @param array $items List of storage paths
*/
final protected function primeFileCache( array $items ) {
- $section = new ProfileSection( __METHOD__ . "-{$this->name}" );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$paths = array(); // list of storage paths
$pathNames = array(); // (cache key => storage path)
@@ -1755,17 +1747,18 @@ abstract class FileBackendStore extends FileBackend {
// Get all cache entries for these container cache keys...
$values = $this->memCache->getMulti( array_keys( $pathNames ) );
foreach ( $values as $cacheKey => $val ) {
+ $path = $pathNames[$cacheKey];
if ( is_array( $val ) ) {
- $path = $pathNames[$cacheKey];
+ $val['latest'] = false; // never completely trust cache
$this->cheapCache->set( $path, 'stat', $val );
if ( isset( $val['sha1'] ) ) { // some backends store SHA-1 as metadata
$this->cheapCache->set( $path, 'sha1',
- array( 'hash' => $val['sha1'], 'latest' => $val['latest'] ) );
+ array( 'hash' => $val['sha1'], 'latest' => false ) );
}
if ( isset( $val['xattr'] ) ) { // some backends store headers/metadata
$val['xattr'] = self::normalizeXAttributes( $val['xattr'] );
$this->cheapCache->set( $path, 'xattr',
- array( 'map' => $val['xattr'], 'latest' => $val['latest'] ) );
+ array( 'map' => $val['xattr'], 'latest' => false ) );
}
}
}
diff --git a/includes/filebackend/FileOpBatch.php b/includes/filebackend/FileOpBatch.php
index b0d83e01..faa13144 100644
--- a/includes/filebackend/FileOpBatch.php
+++ b/includes/filebackend/FileOpBatch.php
@@ -55,7 +55,6 @@ class FileOpBatch {
* @return Status
*/
public static function attempt( array $performOps, array $opts, FileJournal $journal ) {
- $section = new ProfileSection( __METHOD__ );
$status = Status::newGood();
$n = count( $performOps );
diff --git a/includes/filebackend/SwiftFileBackend.php b/includes/filebackend/SwiftFileBackend.php
index f40ec46e..5f406c9b 100644
--- a/includes/filebackend/SwiftFileBackend.php
+++ b/includes/filebackend/SwiftFileBackend.php
@@ -112,7 +112,7 @@ class SwiftFileBackend extends FileBackendStore {
// Optional settings
$this->authTTL = isset( $config['swiftAuthTTL'] )
? $config['swiftAuthTTL']
- : 5 * 60; // some sane number
+ : 15 * 60; // some sane number
$this->swiftTempUrlKey = isset( $config['swiftTempUrlKey'] )
? $config['swiftTempUrlKey']
: '';
@@ -537,6 +537,7 @@ class SwiftFileBackend extends FileBackendStore {
return $status; // already there
} elseif ( $stat === null ) {
$status->fatal( 'backend-fail-internal', $this->name );
+ wfDebugLog( 'SwiftBackend', __METHOD__ . ': cannot get container stat' );
return $status;
}
@@ -568,6 +569,7 @@ class SwiftFileBackend extends FileBackendStore {
$status->fatal( 'backend-fail-usable', $params['dir'] );
} else {
$status->fatal( 'backend-fail-internal', $this->name );
+ wfDebugLog( 'SwiftBackend', __METHOD__ . ': cannot get container stat' );
}
return $status;
@@ -588,6 +590,7 @@ class SwiftFileBackend extends FileBackendStore {
$status->fatal( 'backend-fail-usable', $params['dir'] );
} else {
$status->fatal( 'backend-fail-internal', $this->name );
+ wfDebugLog( 'SwiftBackend', __METHOD__ . ': cannot get container stat' );
}
return $status;
@@ -607,6 +610,7 @@ class SwiftFileBackend extends FileBackendStore {
return $status; // ok, nothing to do
} elseif ( !is_array( $stat ) ) {
$status->fatal( 'backend-fail-internal', $this->name );
+ wfDebugLog( 'SwiftBackend', __METHOD__ . ': cannot get container stat' );
return $status;
}
@@ -643,7 +647,7 @@ class SwiftFileBackend extends FileBackendStore {
$timestamp = new MWTimestamp( $ts );
return $timestamp->getTimestamp( $format );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
throw new FileBackendError( $e->getMessage() );
}
}
@@ -660,7 +664,7 @@ class SwiftFileBackend extends FileBackendStore {
return $objHdrs; // nothing to do
}
- $section = new ProfileSection( __METHOD__ . '-' . $this->name );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
trigger_error( "$path was not stored with SHA-1 metadata.", E_USER_WARNING );
$auth = $this->getAuthentication();
@@ -794,7 +798,7 @@ class SwiftFileBackend extends FileBackendStore {
return $dirs; // nothing more
}
- $section = new ProfileSection( __METHOD__ . '-' . $this->name );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$prefix = ( $dir == '' ) ? null : "{$dir}/";
// Non-recursive: only list dirs right under $dir
@@ -874,7 +878,7 @@ class SwiftFileBackend extends FileBackendStore {
return $files; // nothing more
}
- $section = new ProfileSection( __METHOD__ . '-' . $this->name );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
$prefix = ( $dir == '' ) ? null : "{$dir}/";
// $objects will contain a list of unfiltered names or CF_Object items
@@ -933,6 +937,7 @@ class SwiftFileBackend extends FileBackendStore {
// Convert various random Swift dates to TS_MW
'mtime' => $this->convertSwiftDate( $object->last_modified, TS_MW ),
'size' => (int)$object->bytes,
+ 'sha1' => null,
// Note: manifiest ETags are not an MD5 of the file
'md5' => ctype_xdigit( $object->hash ) ? $object->hash : null,
'latest' => false // eventually consistent
@@ -1060,6 +1065,7 @@ class SwiftFileBackend extends FileBackendStore {
$tmpFiles[$path] = $tmpFile;
}
+ $isLatest = ( $this->isRGW || !empty( $params['latest'] ) );
$opts = array( 'maxConnsPerHost' => $params['concurrency'] );
$reqs = $this->http->runMulti( $reqs, $opts );
foreach ( $reqs as $path => $op ) {
@@ -1074,6 +1080,10 @@ class SwiftFileBackend extends FileBackendStore {
$this->onError( null, __METHOD__,
array( 'src' => $path ) + $ep, $rerr, $rcode, $rdesc );
}
+ // Set the file stat process cache in passing
+ $stat = $this->getStatFromHeaders( $rhdrs );
+ $stat['latest'] = $isLatest;
+ $this->cheapCache->set( $path, 'stat', $stat );
} elseif ( $rcode === 404 ) {
$tmpFiles[$path] = false;
} else {
@@ -1161,6 +1171,11 @@ class SwiftFileBackend extends FileBackendStore {
return $hdrs;
}
+ /**
+ * @param FileBackendStoreOpHandle[] $fileOpHandles
+ *
+ * @return Status[]
+ */
protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
$statuses = array();
@@ -1253,6 +1268,7 @@ class SwiftFileBackend extends FileBackendStore {
if ( $rcode != 204 && $rcode !== 202 ) {
$status->fatal( 'backend-fail-internal', $this->name );
+ wfDebugLog( 'SwiftBackend', __METHOD__ . ': unexpected rcode value (' . $rcode . ')' );
}
return $status;
@@ -1267,7 +1283,7 @@ class SwiftFileBackend extends FileBackendStore {
* @return array|bool|null False on 404, null on failure
*/
protected function getContainerStat( $container, $bypassCache = false ) {
- $section = new ProfileSection( __METHOD__ . '-' . $this->name );
+ $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
if ( $bypassCache ) { // purge cache
$this->containerStatCache->clear( $container );
@@ -1280,13 +1296,11 @@ class SwiftFileBackend extends FileBackendStore {
return null;
}
- wfProfileIn( __METHOD__ . "-{$this->name}-miss" );
list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $this->http->run( array(
'method' => 'HEAD',
'url' => $this->storageUrl( $auth, $container ),
'headers' => $this->authTokenHeaders( $auth )
) );
- wfProfileOut( __METHOD__ . "-{$this->name}-miss" );
if ( $rcode === 204 ) {
$stat = array(
@@ -1507,25 +1521,8 @@ class SwiftFileBackend extends FileBackendStore {
if ( $rcode === 200 || $rcode === 204 ) {
// Update the object if it is missing some headers
$rhdrs = $this->addMissingMetadata( $rhdrs, $path );
- // Fetch all of the custom metadata headers
- $metadata = array();
- foreach ( $rhdrs as $name => $value ) {
- if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
- $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
- }
- }
- // Fetch all of the custom raw HTTP headers
- $headers = $this->sanitizeHdrs( array( 'headers' => $rhdrs ) );
- $stat = array(
- // Convert various random Swift dates to TS_MW
- 'mtime' => $this->convertSwiftDate( $rhdrs['last-modified'], TS_MW ),
- // Empty objects actually return no content-length header in Ceph
- 'size' => isset( $rhdrs['content-length'] ) ? (int)$rhdrs['content-length'] : 0,
- 'sha1' => $rhdrs['x-object-meta-sha1base36'],
- // Note: manifiest ETags are not an MD5 of the file
- 'md5' => ctype_xdigit( $rhdrs['etag'] ) ? $rhdrs['etag'] : null,
- 'xattr' => array( 'metadata' => $metadata, 'headers' => $headers )
- );
+ // Load the stat array from the headers
+ $stat = $this->getStatFromHeaders( $rhdrs );
if ( $this->isRGW ) {
$stat['latest'] = true; // strong consistency
}
@@ -1542,6 +1539,34 @@ class SwiftFileBackend extends FileBackendStore {
}
/**
+ * @param array $rhdrs
+ * @return array
+ */
+ protected function getStatFromHeaders( array $rhdrs ) {
+ // Fetch all of the custom metadata headers
+ $metadata = array();
+ foreach ( $rhdrs as $name => $value ) {
+ if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
+ $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
+ }
+ }
+ // Fetch all of the custom raw HTTP headers
+ $headers = $this->sanitizeHdrs( array( 'headers' => $rhdrs ) );
+ return array(
+ // Convert various random Swift dates to TS_MW
+ 'mtime' => $this->convertSwiftDate( $rhdrs['last-modified'], TS_MW ),
+ // Empty objects actually return no content-length header in Ceph
+ 'size' => isset( $rhdrs['content-length'] ) ? (int)$rhdrs['content-length'] : 0,
+ 'sha1' => isset( $rhdrs['x-object-meta-sha1base36'] )
+ ? $rhdrs['x-object-meta-sha1base36']
+ : null,
+ // Note: manifiest ETags are not an MD5 of the file
+ 'md5' => ctype_xdigit( $rhdrs['etag'] ) ? $rhdrs['etag'] : null,
+ 'xattr' => array( 'metadata' => $metadata, 'headers' => $headers )
+ );
+ }
+
+ /**
* @return array|null Credential map
*/
protected function getAuthentication() {
@@ -1595,7 +1620,7 @@ class SwiftFileBackend extends FileBackendStore {
}
// Ceph RGW does not use <account> in URLs (OpenStack Swift uses "/v1/<account>")
if ( substr( $this->authCreds['storage_url'], -3 ) === '/v1' ) {
- $this->isRGW = true; // take advantage of strong consistency
+ $this->isRGW = true; // take advantage of strong consistency in Ceph
}
}
diff --git a/includes/filebackend/TempFSFile.php b/includes/filebackend/TempFSFile.php
index 1b68130f..791be7fc 100644
--- a/includes/filebackend/TempFSFile.php
+++ b/includes/filebackend/TempFSFile.php
@@ -55,7 +55,6 @@ class TempFSFile extends FSFile {
* @return TempFSFile|null
*/
public static function factory( $prefix, $extension = '' ) {
- wfProfileIn( __METHOD__ );
$base = wfTempDir() . '/' . $prefix . wfRandomString( 12 );
$ext = ( $extension != '' ) ? ".{$extension}" : "";
for ( $attempt = 1; true; $attempt++ ) {
@@ -68,14 +67,12 @@ class TempFSFile extends FSFile {
break; // got it
}
if ( $attempt >= 5 ) {
- wfProfileOut( __METHOD__ );
return null; // give up
}
}
$tmpFile = new self( $path );
$tmpFile->autocollect(); // safely instantiated
- wfProfileOut( __METHOD__ );
return $tmpFile;
}
diff --git a/includes/filebackend/filejournal/FileJournal.php b/includes/filebackend/filejournal/FileJournal.php
index c0651485..4ee52220 100644
--- a/includes/filebackend/filejournal/FileJournal.php
+++ b/includes/filebackend/filejournal/FileJournal.php
@@ -57,14 +57,14 @@ abstract class FileJournal {
*
* @param array $config
* @param string $backend A registered file backend name
- * @throws MWException
+ * @throws Exception
* @return FileJournal
*/
final public static function factory( array $config, $backend ) {
$class = $config['class'];
$jrn = new $class( $config );
if ( !$jrn instanceof self ) {
- throw new MWException( "Class given is not an instance of FileJournal." );
+ throw new Exception( "Class given is not an instance of FileJournal." );
}
$jrn->backend = $backend;
diff --git a/includes/filebackend/lockmanager/DBLockManager.php b/includes/filebackend/lockmanager/DBLockManager.php
index 450ccc82..39a55635 100644
--- a/includes/filebackend/lockmanager/DBLockManager.php
+++ b/includes/filebackend/lockmanager/DBLockManager.php
@@ -52,7 +52,7 @@ abstract class DBLockManager extends QuorumLockManager {
/**
* Construct a new instance from configuration.
*
- * @param array $config Paramaters include:
+ * @param array $config Parameters include:
* - dbServers : Associative array of DB names to server configuration.
* Configuration is an associative array that includes:
* - host : DB server name
@@ -97,7 +97,7 @@ abstract class DBLockManager extends QuorumLockManager {
// connection timeouts. This is useless if each bucket has one peer.
try {
$this->statusCache = ObjectCache::newAccelerator( array() );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
trigger_error( __CLASS__ .
" using multiple DB peers without apc, xcache, or wincache." );
}
diff --git a/includes/filebackend/lockmanager/LockManager.php b/includes/filebackend/lockmanager/LockManager.php
index df8d2d4f..615ba77e 100644
--- a/includes/filebackend/lockmanager/LockManager.php
+++ b/includes/filebackend/lockmanager/LockManager.php
@@ -64,7 +64,7 @@ abstract class LockManager {
/**
* Construct a new instance from configuration
*
- * @param array $config Paramaters include:
+ * @param array $config Parameters include:
* - domain : Domain (usually wiki ID) that all resources are relative to [optional]
* - lockTTL : Age (in seconds) at which resource locks should expire.
* This only applies if locks are not tied to a connection/process.
@@ -72,9 +72,9 @@ abstract class LockManager {
public function __construct( array $config ) {
$this->domain = isset( $config['domain'] ) ? $config['domain'] : wfWikiID();
if ( isset( $config['lockTTL'] ) ) {
- $this->lockTTL = max( 1, $config['lockTTL'] );
+ $this->lockTTL = max( 5, $config['lockTTL'] );
} elseif ( PHP_SAPI === 'cli' ) {
- $this->lockTTL = 2 * 3600;
+ $this->lockTTL = 3600;
} else {
$met = ini_get( 'max_execution_time' ); // this is 0 in CLI mode
$this->lockTTL = max( 5 * 60, 2 * (int)$met );
@@ -102,7 +102,6 @@ abstract class LockManager {
* @since 1.22
*/
final public function lockByType( array $pathsByType, $timeout = 0 ) {
- wfProfileIn( __METHOD__ );
$status = Status::newGood();
$pathsByType = $this->normalizePathsByType( $pathsByType );
$msleep = array( 0, 50, 100, 300, 500 ); // retry backoff times
@@ -116,7 +115,6 @@ abstract class LockManager {
usleep( 1e3 * ( next( $msleep ) ?: 1000 ) ); // use 1 sec after enough times
$elapsed = microtime( true ) - $start;
} while ( $elapsed < $timeout && $elapsed >= 0 );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -140,10 +138,8 @@ abstract class LockManager {
* @since 1.22
*/
final public function unlockByType( array $pathsByType ) {
- wfProfileIn( __METHOD__ );
$pathsByType = $this->normalizePathsByType( $pathsByType );
$status = $this->doUnlockByType( $pathsByType );
- wfProfileOut( __METHOD__ );
return $status;
}
diff --git a/includes/filebackend/lockmanager/LockManagerGroup.php b/includes/filebackend/lockmanager/LockManagerGroup.php
index 19fc4fef..c72863ed 100644
--- a/includes/filebackend/lockmanager/LockManagerGroup.php
+++ b/includes/filebackend/lockmanager/LockManagerGroup.php
@@ -78,17 +78,17 @@ class LockManagerGroup {
* Register an array of file lock manager configurations
*
* @param array $configs
- * @throws MWException
+ * @throws Exception
*/
protected function register( array $configs ) {
foreach ( $configs as $config ) {
$config['domain'] = $this->domain;
if ( !isset( $config['name'] ) ) {
- throw new MWException( "Cannot register a lock manager with no name." );
+ throw new Exception( "Cannot register a lock manager with no name." );
}
$name = $config['name'];
if ( !isset( $config['class'] ) ) {
- throw new MWException( "Cannot register lock manager `{$name}` with no class." );
+ throw new Exception( "Cannot register lock manager `{$name}` with no class." );
}
$class = $config['class'];
unset( $config['class'] ); // lock manager won't need this
@@ -105,11 +105,11 @@ class LockManagerGroup {
*
* @param string $name
* @return LockManager
- * @throws MWException
+ * @throws Exception
*/
public function get( $name ) {
if ( !isset( $this->managers[$name] ) ) {
- throw new MWException( "No lock manager defined with the name `$name`." );
+ throw new Exception( "No lock manager defined with the name `$name`." );
}
// Lazy-load the actual lock manager instance
if ( !isset( $this->managers[$name]['instance'] ) ) {
@@ -126,11 +126,11 @@ class LockManagerGroup {
*
* @param string $name
* @return array
- * @throws MWException
+ * @throws Exception
*/
public function config( $name ) {
if ( !isset( $this->managers[$name] ) ) {
- throw new MWException( "No lock manager defined with the name `$name`." );
+ throw new Exception( "No lock manager defined with the name `$name`." );
}
$class = $this->managers[$name]['class'];
@@ -155,7 +155,7 @@ class LockManagerGroup {
* Throws an exception if no lock manager could be found.
*
* @return LockManager
- * @throws MWException
+ * @throws Exception
*/
public function getAny() {
return isset( $this->managers['default'] )
diff --git a/includes/filebackend/lockmanager/MemcLockManager.php b/includes/filebackend/lockmanager/MemcLockManager.php
index 9bb01c21..24d96e02 100644
--- a/includes/filebackend/lockmanager/MemcLockManager.php
+++ b/includes/filebackend/lockmanager/MemcLockManager.php
@@ -55,13 +55,13 @@ class MemcLockManager extends QuorumLockManager {
/**
* Construct a new instance from configuration.
*
- * @param array $config Paramaters include:
+ * @param array $config Parameters include:
* - lockServers : Associative array of server names to "<IP>:<port>" strings.
* - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
* each having an odd-numbered list of server names (peers) as values.
* - memcConfig : Configuration array for ObjectCache::newFromParams. [optional]
* If set, this must use one of the memcached classes.
- * @throws MWException
+ * @throws Exception
*/
public function __construct( array $config ) {
parent::__construct( $config );
@@ -80,7 +80,7 @@ class MemcLockManager extends QuorumLockManager {
if ( $cache instanceof MemcachedBagOStuff ) {
$this->bagOStuffs[$name] = $cache;
} else {
- throw new MWException(
+ throw new Exception(
'Only MemcachedBagOStuff classes are supported by MemcLockManager.' );
}
}
diff --git a/includes/filebackend/lockmanager/RedisLockManager.php b/includes/filebackend/lockmanager/RedisLockManager.php
index 90e05817..90e62e69 100644
--- a/includes/filebackend/lockmanager/RedisLockManager.php
+++ b/includes/filebackend/lockmanager/RedisLockManager.php
@@ -62,7 +62,7 @@ class RedisLockManager extends QuorumLockManager {
* - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
* each having an odd-numbered list of server names (peers) as values.
* - redisConfig : Configuration for RedisConnectionPool::__construct().
- * @throws MWException
+ * @throws Exception
*/
public function __construct( array $config ) {
parent::__construct( $config );
diff --git a/includes/filerepo/FileRepo.php b/includes/filerepo/FileRepo.php
index 59295257..5b42c2c6 100644
--- a/includes/filerepo/FileRepo.php
+++ b/includes/filerepo/FileRepo.php
@@ -114,6 +114,9 @@ class FileRepo {
/** @var string The URL of the repo's favicon, if any */
protected $favicon;
+ /** @var bool Whether all zones should be private (e.g. private wiki repo) */
+ protected $isPrivate;
+
/**
* Factory functions for creating new files
* Override these in the base class
@@ -269,7 +272,7 @@ class FileRepo {
* @return string|bool
*/
public function getZoneUrl( $zone, $ext = null ) {
- if ( in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) ) {
+ if ( in_array( $zone, array( 'public', 'thumb', 'transcoded' ) ) ) {
// standard public zones
if ( $ext !== null && isset( $this->zones[$zone]['urlsByExt'][$ext] ) ) {
// custom URL for extension/zone
@@ -283,7 +286,6 @@ class FileRepo {
case 'public':
return $this->url;
case 'temp':
- return "{$this->url}/temp";
case 'deleted':
return false; // no public URL
case 'thumb':
@@ -404,6 +406,7 @@ class FileRepo {
* private: If true, return restricted (deleted) files if the current
* user is allowed to view them. Otherwise, such files will not
* be found. If a User object, use that user instead of the current.
+ * latest: If true, load from the latest available data into File objects
* @return File|bool False on failure
*/
public function findFile( $title, $options = array() ) {
@@ -411,18 +414,24 @@ class FileRepo {
if ( !$title ) {
return false;
}
+ if ( isset( $options['bypassCache'] ) ) {
+ $options['latest'] = $options['bypassCache']; // b/c
+ }
$time = isset( $options['time'] ) ? $options['time'] : false;
+ $flags = !empty( $options['latest'] ) ? File::READ_LATEST : 0;
# First try the current version of the file to see if it precedes the timestamp
$img = $this->newFile( $title );
if ( !$img ) {
return false;
}
+ $img->load( $flags );
if ( $img->exists() && ( !$time || $img->getTimestamp() == $time ) ) {
return $img;
}
# Now try an old version of the file
if ( $time !== false ) {
$img = $this->newFile( $title, $time );
+ $img->load( $flags );
if ( $img && $img->exists() ) {
if ( !$img->isDeleted( File::DELETED_FILE ) ) {
return $img; // always OK
@@ -443,6 +452,7 @@ class FileRepo {
$redir = $this->checkRedirect( $title );
if ( $redir && $title->getNamespace() == NS_FILE ) {
$img = $this->newFile( $redir );
+ $img->load( $flags );
if ( !$img ) {
return false;
}
@@ -1305,7 +1315,10 @@ class FileRepo {
list( , $container, ) = FileBackend::splitStoragePath( $path );
$params = array( 'dir' => $path );
- if ( $this->isPrivate || $container === $this->zones['deleted']['container'] ) {
+ if ( $this->isPrivate
+ || $container === $this->zones['deleted']['container']
+ || $container === $this->zones['temp']['container']
+ ) {
# Take all available measures to prevent web accessibility of new deleted
# directories, in case the user has not configured offline storage
$params = array( 'noAccess' => true, 'noListing' => true ) + $params;
@@ -1676,23 +1689,26 @@ class FileRepo {
* Create a new fatal error
*
* @param string $message
- * @return FileRepoStatus
+ * @return Status
*/
public function newFatal( $message /*, parameters...*/ ) {
- $params = func_get_args();
- array_unshift( $params, $this );
+ $status = call_user_func_array( array( 'Status', 'newFatal' ), func_get_args() );
+ $status->cleanCallback = $this->getErrorCleanupFunction();
- return call_user_func_array( array( 'FileRepoStatus', 'newFatal' ), $params );
+ return $status;
}
/**
* Create a new good result
*
* @param null|string $value
- * @return FileRepoStatus
+ * @return Status
*/
public function newGood( $value = null ) {
- return FileRepoStatus::newGood( $this, $value );
+ $status = Status::newGood( $value );
+ $status->cleanCallback = $this->getErrorCleanupFunction();
+
+ return $status;
}
/**
@@ -1785,9 +1801,9 @@ class FileRepo {
}
/**
- * Get an temporary FileRepo associated with this repo.
- * Files will be created in the temp zone of this repo and
- * thumbnails in a /temp subdirectory in thumb zone of this repo.
+ * Get a temporary private FileRepo associated with this repo.
+ *
+ * Files will be created in the temp zone of this repo.
* It will have the same backend as this repo.
*
* @return TempFileRepo
@@ -1798,26 +1814,26 @@ class FileRepo {
'backend' => $this->backend,
'zones' => array(
'public' => array(
+ // Same place storeTemp() uses in the base repo, though
+ // the path hashing is mismatched, which is annoying.
'container' => $this->zones['temp']['container'],
'directory' => $this->zones['temp']['directory']
),
'thumb' => array(
- 'container' => $this->zones['thumb']['container'],
- 'directory' => $this->zones['thumb']['directory'] == ''
- ? 'temp'
- : $this->zones['thumb']['directory'] . '/temp'
+ 'container' => $this->zones['temp']['container'],
+ 'directory' => $this->zones['temp']['directory'] == ''
+ ? 'thumb'
+ : $this->zones['temp']['directory'] . '/thumb'
),
'transcoded' => array(
- 'container' => $this->zones['transcoded']['container'],
- 'directory' => $this->zones['transcoded']['directory'] == ''
- ? 'temp'
- : $this->zones['transcoded']['directory'] . '/temp'
+ 'container' => $this->zones['temp']['container'],
+ 'directory' => $this->zones['temp']['directory'] == ''
+ ? 'transcoded'
+ : $this->zones['temp']['directory'] . '/transcoded'
)
),
- 'url' => $this->getZoneUrl( 'temp' ),
- 'thumbUrl' => $this->getZoneUrl( 'thumb' ) . '/temp',
- 'transcodedUrl' => $this->getZoneUrl( 'transcoded' ) . '/temp',
- 'hashLevels' => $this->hashLevels // performance
+ 'hashLevels' => $this->hashLevels, // performance
+ 'isPrivate' => true // all in temp zone
) );
}
diff --git a/includes/filerepo/FileRepoStatus.php b/includes/filerepo/FileRepoStatus.php
index 56848df2..67080b6f 100644
--- a/includes/filerepo/FileRepoStatus.php
+++ b/includes/filerepo/FileRepoStatus.php
@@ -24,41 +24,7 @@
/**
* Generic operation result class for FileRepo-related operations
* @ingroup FileRepo
+ * @deprecated 1.25
*/
class FileRepoStatus extends Status {
- /**
- * Factory function for fatal errors
- *
- * @param FileRepo $repo
- * @return FileRepoStatus
- */
- static function newFatal( $repo /*, parameters...*/ ) {
- $params = array_slice( func_get_args(), 1 );
- $result = new self( $repo );
- call_user_func_array( array( &$result, 'error' ), $params );
- $result->ok = false;
-
- return $result;
- }
-
- /**
- * @param FileRepo|bool $repo Default: false
- * @param mixed $value
- * @return FileRepoStatus
- */
- static function newGood( $repo = false, $value = null ) {
- $result = new self( $repo );
- $result->value = $value;
-
- return $result;
- }
-
- /**
- * @param bool|FileRepo $repo
- */
- function __construct( $repo = false ) {
- if ( $repo ) {
- $this->cleanCallback = $repo->getErrorCleanupFunction();
- }
- }
}
diff --git a/includes/filerepo/ForeignAPIRepo.php b/includes/filerepo/ForeignAPIRepo.php
index 6924f0a6..7ead968f 100644
--- a/includes/filerepo/ForeignAPIRepo.php
+++ b/includes/filerepo/ForeignAPIRepo.php
@@ -514,7 +514,7 @@ class ForeignAPIRepo extends FileRepo {
$options['timeout'] = 'default';
}
- $req = MWHttpRequest::factory( $url, $options );
+ $req = MWHttpRequest::factory( $url, $options, __METHOD__ );
$req->setUserAgent( ForeignAPIRepo::getUserAgent() );
$status = $req->execute();
diff --git a/includes/filerepo/RepoGroup.php b/includes/filerepo/RepoGroup.php
index fab42162..050c4290 100644
--- a/includes/filerepo/RepoGroup.php
+++ b/includes/filerepo/RepoGroup.php
@@ -114,7 +114,7 @@ class RepoGroup {
* private: If true, return restricted (deleted) files if the current
* user is allowed to view them. Otherwise, such files will not
* be found.
- * bypassCache: If true, do not use the process-local cache of File objects
+ * latest: If true, load from the latest available data into File objects
* @return File|bool False if title is not found
*/
function findFile( $title, $options = array() ) {
@@ -122,6 +122,10 @@ class RepoGroup {
// MW 1.15 compat
$options = array( 'time' => $options );
}
+ if ( isset( $options['bypassCache'] ) ) {
+ $options['latest'] = $options['bypassCache']; // b/c
+ }
+
if ( !$this->reposInitialised ) {
$this->initialiseRepos();
}
diff --git a/includes/filerepo/file/ArchivedFile.php b/includes/filerepo/file/ArchivedFile.php
index 5b0d8e2b..1d454283 100644
--- a/includes/filerepo/file/ArchivedFile.php
+++ b/includes/filerepo/file/ArchivedFile.php
@@ -100,8 +100,9 @@ class ArchivedFile {
* @param Title $title
* @param int $id
* @param string $key
+ * @param string $sha1
*/
- function __construct( $title, $id = 0, $key = '' ) {
+ function __construct( $title, $id = 0, $key = '', $sha1 = '' ) {
$this->id = -1;
$this->title = false;
$this->name = false;
@@ -136,7 +137,11 @@ class ArchivedFile {
$this->key = $key;
}
- if ( !$id && !$key && !( $title instanceof Title ) ) {
+ if ( $sha1 ) {
+ $this->sha1 = $sha1;
+ }
+
+ if ( !$id && !$key && !( $title instanceof Title ) && !$sha1 ) {
throw new MWException( "No specifications provided to ArchivedFile constructor." );
}
}
@@ -162,6 +167,9 @@ class ArchivedFile {
if ( $this->title ) {
$conds['fa_name'] = $this->title->getDBkey();
}
+ if ( $this->sha1 ) {
+ $conds['fa_sha1'] = $this->sha1;
+ }
if ( !count( $conds ) ) {
throw new MWException( "No specific information for retrieving archived file" );
diff --git a/includes/filerepo/file/File.php b/includes/filerepo/file/File.php
index b574c5e7..6edd6fcc 100644
--- a/includes/filerepo/file/File.php
+++ b/includes/filerepo/file/File.php
@@ -47,7 +47,7 @@
*
* @ingroup FileAbstraction
*/
-abstract class File {
+abstract class File implements IDBAccessObject {
// Bitfield values akin to the Revision deletion constants
const DELETED_FILE = 1;
const DELETED_COMMENT = 2;
@@ -138,10 +138,10 @@ abstract class File {
/** @var Title */
protected $redirectTitle;
- /** @var bool Wether the output of transform() for this file is likely to be valid. */
+ /** @var bool Whether the output of transform() for this file is likely to be valid. */
protected $canRender;
- /** @var bool Wether this media file is in a format that is unlikely to
+ /** @var bool Whether this media file is in a format that is unlikely to
* contain viruses or malicious content
*/
protected $isSafeFile;
@@ -490,7 +490,7 @@ abstract class File {
sort( $sortedBuckets );
foreach ( $sortedBuckets as $bucket ) {
- if ( $bucket > $imageWidth ) {
+ if ( $bucket >= $imageWidth ) {
return false;
}
@@ -837,6 +837,18 @@ abstract class File {
}
/**
+ * Load any lazy-loaded file object fields from source
+ *
+ * This is only useful when setting $flags
+ *
+ * Overridden by LocalFile to actually query the DB
+ *
+ * @param integer $flags Bitfield of File::READ_* constants
+ */
+ public function load( $flags = 0 ) {
+ }
+
+ /**
* Returns true if file exists in the repository.
*
* Overridden by LocalFile to avoid unnecessary stat calls.
@@ -996,7 +1008,6 @@ abstract class File {
function transform( $params, $flags = 0 ) {
global $wgThumbnailEpoch;
- wfProfileIn( __METHOD__ );
do {
if ( !$this->canRender() ) {
$thumb = $this->iconThumb();
@@ -1069,8 +1080,6 @@ abstract class File {
}
} while ( false );
- wfProfileOut( __METHOD__ );
-
return is_object( $thumb ) ? $thumb : false;
}
@@ -1100,9 +1109,7 @@ abstract class File {
}
// Actually render the thumbnail...
- wfProfileIn( __METHOD__ . '-doTransform' );
$thumb = $handler->doTransform( $this, $tmpThumbPath, $thumbUrl, $transformParams );
- wfProfileOut( __METHOD__ . '-doTransform' );
$tmpFile->bind( $thumb ); // keep alive with $thumb
if ( !$thumb ) { // bad params?
@@ -1123,7 +1130,7 @@ abstract class File {
$thumb = $this->transformErrorOutput( $thumbPath, $thumbUrl, $transformParams, $flags );
}
// Give extensions a chance to do something with this thumbnail...
- wfRunHooks( 'FileTransformed', array( $this, $thumb, $tmpThumbPath, $thumbPath ) );
+ Hooks::run( 'FileTransformed', array( $this, $thumb, $tmpThumbPath, $thumbPath ) );
}
// Purge. Useful in the event of Core -> Squid connection failure or squid
@@ -1237,7 +1244,7 @@ abstract class File {
$that = $this;
$work = new PoolCounterWorkViaCallback( 'GetLocalFileCopy', sha1( $this->getName() ),
array(
- 'doWork' => function() use ( $that ) {
+ 'doWork' => function () use ( $that ) {
return $that->getLocalRefPath();
}
)
@@ -1458,7 +1465,7 @@ abstract class File {
/**
* Get the path of the file relative to the public zone root.
- * This function is overriden in OldLocalFile to be like getArchiveRel().
+ * This function is overridden in OldLocalFile to be like getArchiveRel().
*
* @return string
*/
@@ -1502,7 +1509,7 @@ abstract class File {
/**
* Get urlencoded path of the file relative to the public zone root.
- * This function is overriden in OldLocalFile to be like getArchiveUrl().
+ * This function is overridden in OldLocalFile to be like getArchiveUrl().
*
* @return string
*/
@@ -1770,14 +1777,15 @@ abstract class File {
}
/**
+ * @param bool|IContextSource $context Context to use (optional)
* @return bool
*/
- function formatMetadata() {
+ function formatMetadata( $context = false ) {
if ( !$this->getHandler() ) {
return false;
}
- return $this->getHandler()->formatMetadata( $this, $this->getMetadata() );
+ return $this->getHandler()->formatMetadata( $this, $context );
}
/**
@@ -2013,7 +2021,7 @@ abstract class File {
wfDebug( "miss\n" );
}
wfDebug( "Fetching shared description from $renderUrl\n" );
- $res = Http::get( $renderUrl );
+ $res = Http::get( $renderUrl, array(), __METHOD__ );
if ( $res && $this->repo->descriptionCacheExpiry > 0 ) {
$wgMemc->set( $key, $res, $this->repo->descriptionCacheExpiry );
}
@@ -2052,6 +2060,17 @@ abstract class File {
}
/**
+ * Returns the timestamp (in TS_MW format) of the last change of the description page.
+ * Returns false if the file does not have a description page, or retrieving the timestamp
+ * would be expensive.
+ * @since 1.25
+ * @return string|bool
+ */
+ public function getDescriptionTouched() {
+ return false;
+ }
+
+ /**
* Get the SHA-1 base 36 hash of the file
*
* @return string
diff --git a/includes/filerepo/file/LocalFile.php b/includes/filerepo/file/LocalFile.php
index 8824b669..b4cced38 100644
--- a/includes/filerepo/file/LocalFile.php
+++ b/includes/filerepo/file/LocalFile.php
@@ -109,6 +109,9 @@ class LocalFile extends File {
/** @var string Description of current revision of the file */
private $description;
+ /** @var string TS_MW timestamp of the last change of the file description */
+ private $descriptionTouched;
+
/** @var bool Whether the row was upgraded on load */
private $upgraded;
@@ -121,13 +124,8 @@ class LocalFile extends File {
/** @var bool True if file is not present in file system. Not to be cached in memcached */
private $missing;
- /** @var int UNIX timestamp of last markVolatile() call */
- private $lastMarkedVolatile = 0;
-
- const LOAD_ALL = 1; // integer; load all the lazy fields too (like metadata)
- const LOAD_VIA_SLAVE = 2; // integer; use a slave to load the data
-
- const VOLATILE_TTL = 300; // integer; seconds
+ // @note: higher than IDBAccessObject constants
+ const LOAD_ALL = 16; // integer; load all the lazy fields too (like metadata)
/**
* Create a LocalFile from a title
@@ -247,13 +245,11 @@ class LocalFile extends File {
function loadFromCache() {
global $wgMemc;
- wfProfileIn( __METHOD__ );
$this->dataLoaded = false;
$this->extraDataLoaded = false;
$key = $this->getCacheKey();
if ( !$key ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -280,8 +276,6 @@ class LocalFile extends File {
wfIncrStats( 'image_cache_miss' );
}
- wfProfileOut( __METHOD__ );
-
return $this->dataLoaded;
}
@@ -382,17 +376,15 @@ class LocalFile extends File {
* @param int $flags
*/
function loadFromDB( $flags = 0 ) {
- # Polymorphic function name to distinguish foreign and local fetches
$fname = get_class( $this ) . '::' . __FUNCTION__;
- wfProfileIn( $fname );
# Unconditionally set loaded=true, we don't want the accessors constantly rechecking
$this->dataLoaded = true;
$this->extraDataLoaded = true;
- $dbr = ( $flags & self::LOAD_VIA_SLAVE )
- ? $this->repo->getSlaveDB()
- : $this->repo->getMasterDB();
+ $dbr = ( $flags & self::READ_LATEST )
+ ? $this->repo->getMasterDB()
+ : $this->repo->getSlaveDB();
$row = $dbr->selectRow( 'image', $this->getCacheFields( 'img_' ),
array( 'img_name' => $this->getName() ), $fname );
@@ -402,8 +394,6 @@ class LocalFile extends File {
} else {
$this->fileExists = false;
}
-
- wfProfileOut( $fname );
}
/**
@@ -411,9 +401,7 @@ class LocalFile extends File {
* This covers fields that are sometimes not cached.
*/
protected function loadExtraFromDB() {
- # Polymorphic function name to distinguish foreign and local fetches
$fname = get_class( $this ) . '::' . __FUNCTION__;
- wfProfileIn( $fname );
# Unconditionally set loaded=true, we don't want the accessors constantly rechecking
$this->extraDataLoaded = true;
@@ -428,11 +416,8 @@ class LocalFile extends File {
$this->$name = $value;
}
} else {
- wfProfileOut( $fname );
throw new MWException( "Could not find data for image '{$this->getName()}'." );
}
-
- wfProfileOut( $fname );
}
/**
@@ -540,13 +525,14 @@ class LocalFile extends File {
*/
function load( $flags = 0 ) {
if ( !$this->dataLoaded ) {
- if ( !$this->loadFromCache() ) {
- $this->loadFromDB( $this->isVolatile() ? 0 : self::LOAD_VIA_SLAVE );
+ if ( ( $flags & self::READ_LATEST ) || !$this->loadFromCache() ) {
+ $this->loadFromDB( $flags );
$this->saveToCache();
}
$this->dataLoaded = true;
}
if ( ( $flags & self::LOAD_ALL ) && !$this->extraDataLoaded ) {
+ // @note: loads on name/timestamp to reduce race condition problems
$this->loadExtraFromDB();
}
}
@@ -587,7 +573,6 @@ class LocalFile extends File {
* Fix assorted version-related problems with the image row by reloading it from the file
*/
function upgradeRow() {
- wfProfileIn( __METHOD__ );
$this->lock(); // begin
@@ -597,7 +582,6 @@ class LocalFile extends File {
if ( !$this->fileExists ) {
$this->unlock();
wfDebug( __METHOD__ . ": file does not exist, aborting\n" );
- wfProfileOut( __METHOD__ );
return;
}
@@ -607,7 +591,6 @@ class LocalFile extends File {
if ( wfReadOnly() ) {
$this->unlock();
- wfProfileOut( __METHOD__ );
return;
}
@@ -633,7 +616,6 @@ class LocalFile extends File {
$this->unlock(); // done
- wfProfileOut( __METHOD__ );
}
/**
@@ -672,7 +654,7 @@ class LocalFile extends File {
/** getURL inherited */
/** getViewURL inherited */
/** getPath inherited */
- /** isVisible inhereted */
+ /** isVisible inherited */
/**
* @return bool
@@ -860,7 +842,7 @@ class LocalFile extends File {
* Refresh metadata in memcached, but don't touch thumbnails or squid
*/
function purgeMetadataCache() {
- $this->loadFromDB();
+ $this->loadFromDB( File::READ_LATEST );
$this->saveToCache();
$this->purgeHistory();
}
@@ -889,7 +871,6 @@ class LocalFile extends File {
* @note This used to purge old thumbnails by default as well, but doesn't anymore.
*/
function purgeCache( $options = array() ) {
- wfProfileIn( __METHOD__ );
// Refresh metadata cache
$this->purgeMetadataCache();
@@ -898,7 +879,6 @@ class LocalFile extends File {
// Purge squid cache for this file
SquidUpdate::purge( array( $this->getURL() ) );
- wfProfileOut( __METHOD__ );
}
/**
@@ -907,13 +887,12 @@ class LocalFile extends File {
*/
function purgeOldThumbnails( $archiveName ) {
global $wgUseSquid;
- wfProfileIn( __METHOD__ );
// Get a list of old thumbnails and URLs
$files = $this->getThumbnails( $archiveName );
// Purge any custom thumbnail caches
- wfRunHooks( 'LocalFilePurgeThumbnails', array( $this, $archiveName ) );
+ Hooks::run( 'LocalFilePurgeThumbnails', array( $this, $archiveName ) );
$dir = array_shift( $files );
$this->purgeThumbList( $dir, $files );
@@ -927,7 +906,6 @@ class LocalFile extends File {
SquidUpdate::purge( $urls );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -936,7 +914,6 @@ class LocalFile extends File {
*/
function purgeThumbnails( $options = array() ) {
global $wgUseSquid;
- wfProfileIn( __METHOD__ );
// Delete thumbnails
$files = $this->getThumbnails();
@@ -958,7 +935,7 @@ class LocalFile extends File {
}
// Purge any custom thumbnail caches
- wfRunHooks( 'LocalFilePurgeThumbnails', array( $this, false ) );
+ Hooks::run( 'LocalFilePurgeThumbnails', array( $this, false ) );
$dir = array_shift( $files );
$this->purgeThumbList( $dir, $files );
@@ -968,7 +945,6 @@ class LocalFile extends File {
SquidUpdate::purge( $urls );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -1035,7 +1011,7 @@ class LocalFile extends File {
$opts['ORDER BY'] = "oi_timestamp $order";
$opts['USE INDEX'] = array( 'oldimage' => 'oi_name_timestamp' );
- wfRunHooks( 'LocalFile::getHistory', array( &$this, &$tables, &$fields,
+ Hooks::run( 'LocalFile::getHistory', array( &$this, &$tables, &$fields,
&$conds, &$opts, &$join_conds ) );
$res = $dbr->select( $tables, $fields, $conds, __METHOD__, $opts, $join_conds );
@@ -1146,7 +1122,6 @@ class LocalFile extends File {
}
if ( !$props ) {
- wfProfileIn( __METHOD__ . '-getProps' );
if ( $this->repo->isVirtualUrl( $srcPath )
|| FileBackend::isStoragePath( $srcPath )
) {
@@ -1154,7 +1129,6 @@ class LocalFile extends File {
} else {
$props = FSFile::getPropsFromPath( $srcPath );
}
- wfProfileOut( __METHOD__ . '-getProps' );
}
$options = array();
@@ -1236,7 +1210,6 @@ class LocalFile extends File {
function recordUpload2( $oldver, $comment, $pageText, $props = false, $timestamp = false,
$user = null
) {
- wfProfileIn( __METHOD__ );
if ( is_null( $user ) ) {
global $wgUser;
@@ -1247,9 +1220,7 @@ class LocalFile extends File {
$dbw->begin( __METHOD__ );
if ( !$props ) {
- wfProfileIn( __METHOD__ . '-getProps' );
$props = $this->repo->getFileProps( $this->getVirtualUrl() );
- wfProfileOut( __METHOD__ . '-getProps' );
}
# Imports or such might force a certain timestamp; otherwise we generate
@@ -1271,7 +1242,6 @@ class LocalFile extends File {
if ( !$this->fileExists ) {
wfDebug( __METHOD__ . ": File " . $this->getRel() . " went missing!\n" );
$dbw->rollback( __METHOD__ );
- wfProfileOut( __METHOD__ );
return false;
}
@@ -1303,9 +1273,11 @@ class LocalFile extends File {
);
if ( $dbw->affectedRows() == 0 ) {
if ( $allowTimeKludge ) {
- # Use FOR UPDATE to ignore any transaction snapshotting
+ # Use LOCK IN SHARE MODE to ignore any transaction snapshotting
$ltimestamp = $dbw->selectField( 'image', 'img_timestamp',
- array( 'img_name' => $this->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
+ array( 'img_name' => $this->getName() ),
+ __METHOD__,
+ array( 'LOCK IN SHARE MODE' ) );
$lUnixtime = $ltimestamp ? wfTimestamp( TS_UNIX, $ltimestamp ) : false;
# Avoid a timestamp that is not newer than the last version
# TODO: the image/oldimage tables should be like page/revision with an ID field
@@ -1404,12 +1376,14 @@ class LocalFile extends File {
// Page exists, do RC entry now (otherwise we wait for later).
$logEntry->publish( $logId );
}
- wfProfileIn( __METHOD__ . '-edit' );
if ( $exists ) {
# Create a null revision
$latest = $descTitle->getLatestRevID();
- $editSummary = LogFormatter::newFromEntry( $logEntry )->getPlainActionText();
+ // Use own context to get the action text in content language
+ $formatter = LogFormatter::newFromEntry( $logEntry );
+ $formatter->setContext( RequestContext::newExtraneousContext( $descTitle ) );
+ $editSummary = $formatter->getPlainActionText();
$nullRevision = Revision::newNullRevision(
$dbw,
@@ -1421,7 +1395,7 @@ class LocalFile extends File {
if ( !is_null( $nullRevision ) ) {
$nullRevision->insertOn( $dbw );
- wfRunHooks( 'NewRevisionFromEditComplete', array( $wikiPage, $nullRevision, $latest, $user ) );
+ Hooks::run( 'NewRevisionFromEditComplete', array( $wikiPage, $nullRevision, $latest, $user ) );
$wikiPage->updateRevisionOn( $dbw, $nullRevision );
}
}
@@ -1468,22 +1442,16 @@ class LocalFile extends File {
$dbw->commit( __METHOD__ ); // commit before anything bad can happen
}
- wfProfileOut( __METHOD__ . '-edit' );
-
if ( $reupload ) {
# Delete old thumbnails
- wfProfileIn( __METHOD__ . '-purge' );
$this->purgeThumbnails();
- wfProfileOut( __METHOD__ . '-purge' );
# Remove the old file from the squid cache
SquidUpdate::purge( array( $this->getURL() ) );
}
# Hooks, hooks, the magic of hooks...
- wfProfileIn( __METHOD__ . '-hooks' );
- wfRunHooks( 'FileUpload', array( $this, $reupload, $descTitle->exists() ) );
- wfProfileOut( __METHOD__ . '-hooks' );
+ Hooks::run( 'FileUpload', array( $this, $reupload, $descTitle->exists() ) );
# Invalidate cache for all pages using this file
$update = new HTMLCacheUpdate( $this->getTitle(), 'imagelinks' );
@@ -1492,8 +1460,6 @@ class LocalFile extends File {
LinksUpdate::queueRecursiveJobsForTable( $this->getTitle(), 'imagelinks' );
}
- wfProfileOut( __METHOD__ );
-
return true;
}
@@ -1811,6 +1777,25 @@ class LocalFile extends File {
}
/**
+ * @return bool|string
+ */
+ public function getDescriptionTouched() {
+ // The DB lookup might return false, e.g. if the file was just deleted, or the shared DB repo
+ // itself gets it from elsewhere. To avoid repeating the DB lookups in such a case, we
+ // need to differentiate between null (uninitialized) and false (failed to load).
+ if ( $this->descriptionTouched === null ) {
+ $cond = array(
+ 'page_namespace' => $this->title->getNamespace(),
+ 'page_title' => $this->title->getDBkey()
+ );
+ $touched = $this->repo->getSlaveDB()->selectField( 'page', 'page_touched', $cond, __METHOD__ );
+ $this->descriptionTouched = $touched ? wfTimestamp( TS_MW, $touched ) : false;
+ }
+
+ return $this->descriptionTouched;
+ }
+
+ /**
* @return string
*/
function getSha1() {
@@ -1850,7 +1835,7 @@ class LocalFile extends File {
* Start a transaction and lock the image for update
* Increments a reference counter if the lock is already held
* @throws MWException Throws an error if the lock was not acquired
- * @return bool Success
+ * @return bool Whether the file lock owns/spawned the DB transaction
*/
function lock() {
$dbw = $this->repo->getMasterDB();
@@ -1875,9 +1860,7 @@ class LocalFile extends File {
} );
}
- $this->markVolatile(); // file may change soon
-
- return true;
+ return $this->lockedOwnTrx;
}
/**
@@ -1896,48 +1879,6 @@ class LocalFile extends File {
}
/**
- * Mark a file as about to be changed
- *
- * This sets a cache key that alters master/slave DB loading behavior
- *
- * @return bool Success
- */
- protected function markVolatile() {
- global $wgMemc;
-
- $key = $this->repo->getSharedCacheKey( 'file-volatile', md5( $this->getName() ) );
- if ( $key ) {
- $this->lastMarkedVolatile = time();
- return $wgMemc->set( $key, $this->lastMarkedVolatile, self::VOLATILE_TTL );
- }
-
- return true;
- }
-
- /**
- * Check if a file is about to be changed or has been changed recently
- *
- * @see LocalFile::isVolatile()
- * @return bool Whether the file is volatile
- */
- protected function isVolatile() {
- global $wgMemc;
-
- $key = $this->repo->getSharedCacheKey( 'file-volatile', md5( $this->getName() ) );
- if ( !$key ) {
- // repo unavailable; bail.
- return false;
- }
-
- if ( $this->lastMarkedVolatile === 0 ) {
- $this->lastMarkedVolatile = $wgMemc->get( $key ) ?: 0;
- }
-
- $volatileDuration = time() - $this->lastMarkedVolatile;
- return $volatileDuration <= self::VOLATILE_TTL;
- }
-
- /**
* Roll back the DB transaction and mark the image unlocked
*/
function unlockAndRollback() {
@@ -1985,7 +1926,7 @@ class LocalFileDeleteBatch {
/** @var array Items to be processed in the deletion batch */
private $deletionBatch;
- /** @var bool Wether to suppress all suppressable fields when deleting */
+ /** @var bool Whether to suppress all suppressable fields when deleting */
private $suppress;
/** @var FileRepoStatus */
@@ -2238,26 +2179,9 @@ class LocalFileDeleteBatch {
* @return FileRepoStatus
*/
function execute() {
- wfProfileIn( __METHOD__ );
$this->file->lock();
- // Leave private files alone
- $privateFiles = array();
- list( $oldRels, ) = $this->getOldRels();
- $dbw = $this->file->repo->getMasterDB();
-
- if ( !empty( $oldRels ) ) {
- $res = $dbw->select( 'oldimage',
- array( 'oi_archive_name' ),
- array( 'oi_name' => $this->file->getName(),
- 'oi_archive_name' => array_keys( $oldRels ),
- $dbw->bitAnd( 'oi_deleted', File::DELETED_FILE ) => File::DELETED_FILE ),
- __METHOD__ );
- foreach ( $res as $row ) {
- $privateFiles[$row->oi_archive_name] = 1;
- }
- }
// Prepare deletion batch
$hashes = $this->getHashes();
$this->deletionBatch = array();
@@ -2265,9 +2189,8 @@ class LocalFileDeleteBatch {
$dotExt = $ext === '' ? '' : ".$ext";
foreach ( $this->srcRels as $name => $srcRel ) {
- // Skip files that have no hash (missing source).
- // Keep private files where they are.
- if ( isset( $hashes[$name] ) && !array_key_exists( $name, $privateFiles ) ) {
+ // Skip files that have no hash (e.g. missing DB record, or sha1 field and file source)
+ if ( isset( $hashes[$name] ) ) {
$hash = $hashes[$name];
$key = $hash . $dotExt;
$dstRel = $this->file->repo->getDeletedHashPath( $key ) . $key;
@@ -2284,6 +2207,7 @@ class LocalFileDeleteBatch {
$this->doDBInserts();
// Removes non-existent file from the batch, so we don't get errors.
+ // This also handles files in the 'deleted' zone deleted via revision deletion.
$checkStatus = $this->removeNonexistentFiles( $this->deletionBatch );
if ( !$checkStatus->isGood() ) {
$this->status->merge( $checkStatus );
@@ -2303,7 +2227,6 @@ class LocalFileDeleteBatch {
// Roll back inserts, release lock and abort
// TODO: delete the defunct filearchive rows if we are using a non-transactional DB
$this->file->unlockAndRollback();
- wfProfileOut( __METHOD__ );
return $this->status;
}
@@ -2313,7 +2236,6 @@ class LocalFileDeleteBatch {
// Commit and return
$this->file->unlock();
- wfProfileOut( __METHOD__ );
return $this->status;
}
@@ -2366,7 +2288,7 @@ class LocalFileRestoreBatch {
/** @var bool Add all revisions of the file */
private $all;
- /** @var bool Wether to remove all settings for suppressed fields */
+ /** @var bool Whether to remove all settings for suppressed fields */
private $unsuppress = false;
/**
@@ -2419,13 +2341,19 @@ class LocalFileRestoreBatch {
return $this->file->repo->newGood();
}
- $this->file->lock();
+ $lockOwnsTrx = $this->file->lock();
$dbw = $this->file->repo->getMasterDB();
$status = $this->file->repo->newGood();
$exists = (bool)$dbw->selectField( 'image', '1',
- array( 'img_name' => $this->file->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
+ array( 'img_name' => $this->file->getName() ),
+ __METHOD__,
+ // The lock() should already prevents changes, but this still may need
+ // to bypass any transaction snapshot. However, if lock() started the
+ // trx (which it probably did) then snapshot is post-lock and up-to-date.
+ $lockOwnsTrx ? array() : array( 'LOCK IN SHARE MODE' )
+ );
// Fetch all or selected archived revisions for the file,
// sorted from the most recent to the oldest.
@@ -2797,7 +2725,7 @@ class LocalFileMoveBatch {
array( 'oi_archive_name', 'oi_deleted' ),
array( 'oi_name' => $this->oldName ),
__METHOD__,
- array( 'FOR UPDATE' ) // ignore snapshot
+ array( 'LOCK IN SHARE MODE' ) // ignore snapshot
);
foreach ( $result as $row ) {
diff --git a/includes/filerepo/file/OldLocalFile.php b/includes/filerepo/file/OldLocalFile.php
index 710058fb..fd92e11a 100644
--- a/includes/filerepo/file/OldLocalFile.php
+++ b/includes/filerepo/file/OldLocalFile.php
@@ -175,11 +175,12 @@ class OldLocalFile extends LocalFile {
}
function loadFromDB( $flags = 0 ) {
- wfProfileIn( __METHOD__ );
-
$this->dataLoaded = true;
- $dbr = $this->repo->getSlaveDB();
+ $dbr = ( $flags & self::READ_LATEST )
+ ? $this->repo->getMasterDB()
+ : $this->repo->getSlaveDB();
+
$conds = array( 'oi_name' => $this->getName() );
if ( is_null( $this->requestedTime ) ) {
$conds['oi_archive_name'] = $this->archive_name;
@@ -194,14 +195,12 @@ class OldLocalFile extends LocalFile {
$this->fileExists = false;
}
- wfProfileOut( __METHOD__ );
}
/**
* Load lazy file metadata from the DB
*/
protected function loadExtraFromDB() {
- wfProfileIn( __METHOD__ );
$this->extraDataLoaded = true;
$dbr = $this->repo->getSlaveDB();
@@ -226,11 +225,9 @@ class OldLocalFile extends LocalFile {
$this->$name = $value;
}
} else {
- wfProfileOut( __METHOD__ );
throw new MWException( "Could not find data for image '{$this->archive_name}'." );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -260,13 +257,11 @@ class OldLocalFile extends LocalFile {
}
function upgradeRow() {
- wfProfileIn( __METHOD__ );
$this->loadFromFile();
# Don't destroy file info of missing files
if ( !$this->fileExists ) {
wfDebug( __METHOD__ . ": file does not exist, aborting\n" );
- wfProfileOut( __METHOD__ );
return;
}
@@ -291,7 +286,6 @@ class OldLocalFile extends LocalFile {
'oi_archive_name' => $this->archive_name ),
__METHOD__
);
- wfProfileOut( __METHOD__ );
}
/**
diff --git a/includes/filerepo/file/UnregisteredLocalFile.php b/includes/filerepo/file/UnregisteredLocalFile.php
index 5a3e4e9c..4c11341b 100644
--- a/includes/filerepo/file/UnregisteredLocalFile.php
+++ b/includes/filerepo/file/UnregisteredLocalFile.php
@@ -166,6 +166,18 @@ class UnregisteredLocalFile extends File {
}
/**
+ * @return int
+ */
+ function getBitDepth() {
+ $gis = $this->getImageSize( $this->getLocalRefPath() );
+
+ if ( !$gis || !isset( $gis['bits'] ) ) {
+ return 0;
+ }
+ return $gis['bits'];
+ }
+
+ /**
* @return bool
*/
function getMetadata() {
diff --git a/includes/gallery/ImageGalleryBase.php b/includes/gallery/ImageGalleryBase.php
index b0a593de..c89c6b6c 100644
--- a/includes/gallery/ImageGalleryBase.php
+++ b/includes/gallery/ImageGalleryBase.php
@@ -30,39 +30,33 @@
abstract class ImageGalleryBase extends ContextSource {
/**
* @var array Gallery images
- * @deprecated since 1.23 (was declared "var") and will be removed in 1.24
*/
- public $mImages;
+ protected $mImages;
/**
* @var bool Whether to show the filesize in bytes in categories
- * @deprecated since 1.23 (was declared "var") and will be removed in 1.24
*/
- public $mShowBytes;
+ protected $mShowBytes;
/**
* @var bool Whether to show the filename. Default: true
- * @deprecated since 1.23 (was declared "var") and will be removed in 1.24
*/
- public $mShowFilename;
+ protected $mShowFilename;
/**
* @var string Gallery mode. Default: traditional
- * @deprecated since 1.23 (was declared "var") and will be removed in 1.24
*/
- public $mMode;
+ protected $mMode;
/**
* @var bool|string Gallery caption. Default: false
- * @deprecated since 1.23 (was declared "var") and will be removed in 1.24
*/
- public $mCaption = false;
+ protected $mCaption = false;
/**
* @var bool Hide blacklisted images?
- * @deprecated since 1.23 (was declared "var") and will be removed in 1.24
*/
- public $mHideBadImages;
+ protected $mHideBadImages;
/**
* @var Parser Registered parser object for output callbacks
@@ -120,7 +114,7 @@ abstract class ImageGalleryBase extends ContextSource {
'packed-overlay' => 'PackedOverlayImageGallery',
);
// Allow extensions to make a new gallery format.
- wfRunHooks( 'GalleryGetModes', self::$modeMapping );
+ Hooks::run( 'GalleryGetModes', array( &self::$modeMapping ) );
}
}
diff --git a/includes/gallery/TraditionalImageGallery.php b/includes/gallery/TraditionalImageGallery.php
index 37f2221f..7a0206c2 100644
--- a/includes/gallery/TraditionalImageGallery.php
+++ b/includes/gallery/TraditionalImageGallery.php
@@ -72,7 +72,7 @@ class TraditionalImageGallery extends ImageGalleryBase {
if ( $this->mParser instanceof Parser ) {
# Give extensions a chance to select the file revision for us
$options = array();
- wfRunHooks( 'BeforeParserFetchFileAndTitle',
+ Hooks::run( 'BeforeParserFetchFileAndTitle',
array( $this->mParser, $nt, &$options, &$descQuery ) );
# Fetch and register the file (file title may be different via hooks)
list( $img, $nt ) = $this->mParser->fetchFileAndTitle( $nt, $options );
@@ -133,6 +133,8 @@ class TraditionalImageGallery extends ImageGalleryBase {
$this->adjustImageParameters( $thumb, $imageParameters );
+ Linker::processResponsiveImages( $img, $thumb, $transformOptions );
+
# Set both fixed width and min-height.
$thumbhtml = "\n\t\t\t"
. '<div class="thumb" style="width: '
diff --git a/includes/htmlform/HTMLCheckField.php b/includes/htmlform/HTMLCheckField.php
index 5f70362a..4942327f 100644
--- a/includes/htmlform/HTMLCheckField.php
+++ b/includes/htmlform/HTMLCheckField.php
@@ -20,28 +20,19 @@ class HTMLCheckField extends HTMLFormField {
$attr['class'] = $this->mClass;
}
- if ( $this->mParent->isVForm() ) {
- // Nest checkbox inside label.
- return Html::rawElement( 'label',
- array(
- 'class' => 'mw-ui-checkbox-label'
- ),
- Xml::check( $this->mName, $value, $attr ) . $this->mLabel );
- } else {
- $chkLabel = Xml::check( $this->mName, $value, $attr )
- . '&#160;'
- . Html::rawElement( 'label', array( 'for' => $this->mID ), $this->mLabel );
-
- if ( $wgUseMediaWikiUIEverywhere ) {
- $chkLabel = Html::rawElement(
- 'div',
- array( 'class' => 'mw-ui-checkbox' ),
- $chkLabel
- );
- }
+ $chkLabel = Xml::check( $this->mName, $value, $attr )
+ . '&#160;'
+ . Html::rawElement( 'label', array( 'for' => $this->mID ), $this->mLabel );
- return $chkLabel;
+ if ( $wgUseMediaWikiUIEverywhere || $this->mParent instanceof VFormHTMLForm ) {
+ $chkLabel = Html::rawElement(
+ 'div',
+ array( 'class' => 'mw-ui-checkbox' ),
+ $chkLabel
+ );
}
+
+ return $chkLabel;
}
/**
@@ -67,23 +58,16 @@ class HTMLCheckField extends HTMLFormField {
* @return string
*/
function loadDataFromRequest( $request ) {
- $invert = false;
- if ( isset( $this->mParams['invert'] ) && $this->mParams['invert'] ) {
- $invert = true;
- }
+ $invert = isset( $this->mParams['invert'] ) && $this->mParams['invert'];
// GetCheck won't work like we want for checks.
// Fetch the value in either one of the two following case:
// - we have a valid token (form got posted or GET forged by the user)
// - checkbox name has a value (false or true), ie is not null
if ( $request->getCheck( 'wpEditToken' ) || $request->getVal( $this->mName ) !== null ) {
- // XOR has the following truth table, which is what we want
- // INVERT VALUE | OUTPUT
- // true true | false
- // false true | true
- // false false | false
- // true false | true
- return $request->getBool( $this->mName ) xor $invert;
+ return $invert
+ ? !$request->getBool( $this->mName )
+ : $request->getBool( $this->mName );
} else {
return $this->getDefault();
}
diff --git a/includes/htmlform/HTMLCheckMatrix.php b/includes/htmlform/HTMLCheckMatrix.php
index 6c538fdd..83f12665 100644
--- a/includes/htmlform/HTMLCheckMatrix.php
+++ b/includes/htmlform/HTMLCheckMatrix.php
@@ -178,6 +178,13 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
$helptext = $this->getHelpTextHtmlTable( $this->getHelpText() );
$cellAttributes = array( 'colspan' => 2 );
+ $hideClass = '';
+ $hideAttributes = array();
+ if ( $this->mHideIf ) {
+ $hideAttributes['data-hide-if'] = FormatJson::encode( $this->mHideIf );
+ $hideClass = 'mw-htmlform-hide-if';
+ }
+
$label = $this->getLabelHtml( $cellAttributes );
$field = Html::rawElement(
@@ -186,9 +193,12 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
$inputHtml . "\n$errors"
);
- $html = Html::rawElement( 'tr', array( 'class' => 'mw-htmlform-vertical-label' ), $label );
+ $html = Html::rawElement( 'tr',
+ array( 'class' => "mw-htmlform-vertical-label $hideClass" ) + $hideAttributes,
+ $label );
$html .= Html::rawElement( 'tr',
- array( 'class' => "mw-htmlform-field-$fieldType {$this->mClass} $errorClass" ),
+ array( 'class' => "mw-htmlform-field-$fieldType {$this->mClass} $errorClass $hideClass" ) +
+ $hideAttributes,
$field );
return $html . $helptext;
diff --git a/includes/htmlform/HTMLFloatField.php b/includes/htmlform/HTMLFloatField.php
index 3b38fbe8..2ef49789 100644
--- a/includes/htmlform/HTMLFloatField.php
+++ b/includes/htmlform/HTMLFloatField.php
@@ -17,7 +17,7 @@ class HTMLFloatField extends HTMLTextField {
$value = trim( $value );
- # http://dev.w3.org/html5/spec/common-microsyntaxes.html#real-numbers
+ # http://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers
# with the addition that a leading '+' sign is ok.
if ( !preg_match( '/^((\+|\-)?\d+(\.\d+)?(E(\+|\-)?\d+)?)?$/i', $value ) ) {
return $this->msg( 'htmlform-float-invalid' )->parseAsBlock();
diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php
index d582da3b..ce140038 100644
--- a/includes/htmlform/HTMLForm.php
+++ b/includes/htmlform/HTMLForm.php
@@ -115,6 +115,8 @@ class HTMLForm extends ContextSource {
'info' => 'HTMLInfoField',
'selectorother' => 'HTMLSelectOrOtherField',
'selectandother' => 'HTMLSelectAndOtherField',
+ 'namespaceselect' => 'HTMLSelectNamespace',
+ 'tagfilter' => 'HTMLTagFilter',
'submit' => 'HTMLSubmitField',
'hidden' => 'HTMLHiddenField',
'edittools' => 'HTMLEditTools',
@@ -205,10 +207,42 @@ class HTMLForm extends ContextSource {
'table',
'div',
'raw',
+ 'inline',
+ );
+
+ /**
+ * Available formats in which to display the form
+ * @var array
+ */
+ protected $availableSubclassDisplayFormats = array(
'vform',
);
/**
+ * Construct a HTMLForm object for given display type. May return a HTMLForm subclass.
+ *
+ * @throws MWException When the display format requested is not known
+ * @param string $displayFormat
+ * @param mixed $arguments... Additional arguments to pass to the constructor.
+ * @return HTMLForm
+ */
+ public static function factory( $displayFormat/*, $arguments...*/ ) {
+ $arguments = func_get_args();
+ array_shift( $arguments );
+
+ switch ( $displayFormat ) {
+ case 'vform':
+ $reflector = new ReflectionClass( 'VFormHTMLForm' );
+ return $reflector->newInstanceArgs( $arguments );
+ default:
+ $reflector = new ReflectionClass( 'HTMLForm' );
+ $form = $reflector->newInstanceArgs( $arguments );
+ $form->setDisplayFormat( $displayFormat );
+ return $form;
+ }
+ }
+
+ /**
* Build a new HTMLForm from an array of field attributes
*
* @param array $descriptor Array of Field constructs, as described above
@@ -231,6 +265,11 @@ class HTMLForm extends ContextSource {
$this->mMessagePrefix = $context;
}
+ // Evil hack for mobile :(
+ if ( !$this->getConfig()->get( 'HTMLFormAllowTableFormat' ) && $this->displayFormat === 'table' ) {
+ $this->displayFormat = 'div';
+ }
+
// Expand out into a tree.
$loadedDescriptor = array();
$this->mFlatFields = array();
@@ -244,15 +283,7 @@ class HTMLForm extends ContextSource {
$this->mUseMultipart = true;
}
- $field = self::loadInputFromParameters( $fieldname, $info );
- // FIXME During field's construct, the parent form isn't available!
- // could add a 'parent' name-value to $info, could add a third parameter.
- $field->mParent = $this;
-
- // vform gets too much space if empty labels generate HTML.
- if ( $this->isVForm() ) {
- $field->setShowEmptyLabel( false );
- }
+ $field = static::loadInputFromParameters( $fieldname, $info, $this );
$setSection =& $loadedDescriptor;
if ( $section ) {
@@ -287,10 +318,24 @@ class HTMLForm extends ContextSource {
* @return HTMLForm $this for chaining calls (since 1.20)
*/
public function setDisplayFormat( $format ) {
+ if (
+ in_array( $format, $this->availableSubclassDisplayFormats ) ||
+ in_array( $this->displayFormat, $this->availableSubclassDisplayFormats )
+ ) {
+ throw new MWException( 'Cannot change display format after creation, ' .
+ 'use HTMLForm::factory() instead' );
+ }
+
if ( !in_array( $format, $this->availableDisplayFormats ) ) {
throw new MWException( 'Display format must be one of ' .
print_r( $this->availableDisplayFormats, true ) );
}
+
+ // Evil hack for mobile :(
+ if ( !$this->getConfig()->get( 'HTMLFormAllowTableFormat' ) && $format === 'table' ) {
+ $format = 'div';
+ }
+
$this->displayFormat = $format;
return $this;
@@ -302,20 +347,18 @@ class HTMLForm extends ContextSource {
* @return string
*/
public function getDisplayFormat() {
- $format = $this->displayFormat;
- if ( !$this->getConfig()->get( 'HTMLFormAllowTableFormat' ) && $format === 'table' ) {
- $format = 'div';
- }
- return $format;
+ return $this->displayFormat;
}
/**
* Test if displayFormat is 'vform'
* @since 1.22
+ * @deprecated since 1.25
* @return bool
*/
public function isVForm() {
- return $this->displayFormat === 'vform';
+ wfDeprecated( __METHOD__, '1.25' );
+ return false;
}
/**
@@ -338,7 +381,7 @@ class HTMLForm extends ContextSource {
if ( isset( $descriptor['class'] ) ) {
$class = $descriptor['class'];
} elseif ( isset( $descriptor['type'] ) ) {
- $class = self::$typeMappings[$descriptor['type']];
+ $class = static::$typeMappings[$descriptor['type']];
$descriptor['class'] = $class;
} else {
$class = null;
@@ -357,14 +400,18 @@ class HTMLForm extends ContextSource {
*
* @param string $fieldname Name of the field
* @param array $descriptor Input Descriptor, as described above
+ * @param HTMLForm|null $parent Parent instance of HTMLForm
*
* @throws MWException
* @return HTMLFormField Instance of a subclass of HTMLFormField
*/
- public static function loadInputFromParameters( $fieldname, $descriptor ) {
- $class = self::getClassFromDescriptor( $fieldname, $descriptor );
+ public static function loadInputFromParameters( $fieldname, $descriptor, HTMLForm $parent = null ) {
+ $class = static::getClassFromDescriptor( $fieldname, $descriptor );
$descriptor['fieldname'] = $fieldname;
+ if ( $parent ) {
+ $descriptor['parent'] = $parent;
+ }
# @todo This will throw a fatal error whenever someone try to use
# 'class' to feed a CSS class instead of 'cssclass'. Would be
@@ -787,14 +834,6 @@ class HTMLForm extends ContextSource {
# For good measure (it is the default)
$this->getOutput()->preventClickjacking();
$this->getOutput()->addModules( 'mediawiki.htmlform' );
- if ( $this->isVForm() ) {
- $this->getOutput()->addModuleStyles( array(
- 'mediawiki.ui',
- 'mediawiki.ui.button',
- ) );
- // @todo Should vertical form set setWrapperLegend( false )
- // to hide ugly fieldsets?
- }
$html = ''
. $this->getErrors( $submitResult )
@@ -810,18 +849,10 @@ class HTMLForm extends ContextSource {
}
/**
- * Wrap the form innards in an actual "<form>" element
- *
- * @param string $html HTML contents to wrap.
- *
- * @return string Wrapped HTML.
+ * Get HTML attributes for the `<form>` tag.
+ * @return array
*/
- function wrapForm( $html ) {
-
- # Include a <fieldset> wrapper for style, if requested.
- if ( $this->mWrapperLegend !== false ) {
- $html = Xml::fieldset( $this->mWrapperLegend, $html );
- }
+ protected function getFormAttributes() {
# Use multipart/form-data
$encType = $this->mUseMultipart
? 'multipart/form-data'
@@ -836,12 +867,23 @@ class HTMLForm extends ContextSource {
if ( !empty( $this->mId ) ) {
$attribs['id'] = $this->mId;
}
+ return $attribs;
+ }
- if ( $this->isVForm() ) {
- array_push( $attribs['class'], 'mw-ui-vform', 'mw-ui-container' );
+ /**
+ * Wrap the form innards in an actual "<form>" element
+ *
+ * @param string $html HTML contents to wrap.
+ *
+ * @return string Wrapped HTML.
+ */
+ function wrapForm( $html ) {
+ # Include a <fieldset> wrapper for style, if requested.
+ if ( $this->mWrapperLegend !== false ) {
+ $html = Xml::fieldset( $this->mWrapperLegend, $html );
}
- return Html::rawElement( 'form', $attribs, $html );
+ return Html::rawElement( 'form', $this->getFormAttributes(), $html );
}
/**
@@ -897,21 +939,10 @@ class HTMLForm extends ContextSource {
$attribs['class'] = array( 'mw-htmlform-submit' );
- if ( $this->isVForm() || $useMediaWikiUIEverywhere ) {
+ if ( $useMediaWikiUIEverywhere ) {
array_push( $attribs['class'], 'mw-ui-button', $this->mSubmitModifierClass );
}
- if ( $this->isVForm() ) {
- // mw-ui-block is necessary because the buttons aren't necessarily in an
- // immediate child div of the vform.
- // @todo Let client specify if the primary submit button is progressive or destructive
- array_push(
- $attribs['class'],
- 'mw-ui-big',
- 'mw-ui-block'
- );
- }
-
$buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
}
@@ -920,7 +951,8 @@ class HTMLForm extends ContextSource {
'input',
array(
'type' => 'reset',
- 'value' => $this->msg( 'htmlform-reset' )->text()
+ 'value' => $this->msg( 'htmlform-reset' )->text(),
+ 'class' => ( $useMediaWikiUIEverywhere ? 'mw-ui-button' : null ),
)
) . "\n";
}
@@ -940,15 +972,9 @@ class HTMLForm extends ContextSource {
$attrs['id'] = $button['id'];
}
- if ( $this->isVForm() || $useMediaWikiUIEverywhere ) {
- if ( isset( $attrs['class'] ) ) {
- $attrs['class'] .= ' mw-ui-button';
- } else {
- $attrs['class'] = 'mw-ui-button';
- }
- if ( $this->isVForm() ) {
- $attrs['class'] .= ' mw-ui-big mw-ui-block';
- }
+ if ( $useMediaWikiUIEverywhere ) {
+ $attrs['class'] = isset( $attrs['class'] ) ? (array)$attrs['class'] : array();
+ $attrs['class'][] = 'mw-ui-button';
}
$buttons .= Html::element( 'input', $attrs ) . "\n";
@@ -957,13 +983,6 @@ class HTMLForm extends ContextSource {
$html = Html::rawElement( 'span',
array( 'class' => 'mw-htmlform-submit-buttons' ), "\n$buttons" ) . "\n";
- // Buttons are top-level form elements in table and div layouts,
- // but vform wants all elements inside divs to get spaced-out block
- // styling.
- if ( $this->mShowSubmit && $this->isVForm() ) {
- $html = Html::rawElement( 'div', null, "\n$html" ) . "\n";
- }
-
return $html;
}
@@ -1007,7 +1026,7 @@ class HTMLForm extends ContextSource {
*
* @return string HTML, a "<ul>" list of errors
*/
- public static function formatErrors( $errors ) {
+ public function formatErrors( $errors ) {
$errorstr = '';
foreach ( $errors as $error ) {
@@ -1021,7 +1040,7 @@ class HTMLForm extends ContextSource {
$errorstr .= Html::rawElement(
'li',
array(),
- wfMessage( $msg, $error )->parse()
+ $this->msg( $msg, $error )->parse()
);
}
@@ -1045,13 +1064,21 @@ class HTMLForm extends ContextSource {
/**
* Identify that the submit button in the form has a destructive action
- *
+ * @since 1.24
*/
public function setSubmitDestructive() {
$this->mSubmitModifierClass = 'mw-ui-destructive';
}
/**
+ * Identify that the submit button in the form has a progressive action
+ * @since 1.25
+ */
+ public function setSubmitProgressive() {
+ $this->mSubmitModifierClass = 'mw-ui-progressive';
+ }
+
+ /**
* Set the text for the submit button to a message
* @since 1.19
*
@@ -1268,20 +1295,8 @@ class HTMLForm extends ContextSource {
$subsectionHtml = '';
$hasLabel = false;
- switch ( $displayFormat ) {
- case 'table':
- $getFieldHtmlMethod = 'getTableRow';
- break;
- case 'vform':
- // Close enough to a div.
- $getFieldHtmlMethod = 'getDiv';
- break;
- case 'div':
- $getFieldHtmlMethod = 'getDiv';
- break;
- default:
- $getFieldHtmlMethod = 'get' . ucfirst( $displayFormat );
- }
+ // Conveniently, PHP method names are case-insensitive.
+ $getFieldHtmlMethod = $displayFormat == 'table' ? 'getTableRow' : ( 'get' . $displayFormat );
foreach ( $fields as $key => $value ) {
if ( $value instanceof HTMLFormField ) {
@@ -1353,7 +1368,9 @@ class HTMLForm extends ContextSource {
$html = Html::rawElement( 'table',
$attribs,
Html::rawElement( 'tbody', array(), "\n$html\n" ) ) . "\n";
- } elseif ( $displayFormat === 'div' || $displayFormat === 'vform' ) {
+ } elseif ( $displayFormat === 'inline' ) {
+ $html = Html::rawElement( 'span', $attribs, "\n$html\n" );
+ } else {
$html = Html::rawElement( 'div', $attribs, "\n$html\n" );
}
}
diff --git a/includes/htmlform/HTMLFormField.php b/includes/htmlform/HTMLFormField.php
index 4cf23942..9576c77c 100644
--- a/includes/htmlform/HTMLFormField.php
+++ b/includes/htmlform/HTMLFormField.php
@@ -13,6 +13,7 @@ abstract class HTMLFormField {
protected $mLabel; # String label. Set on construction
protected $mID;
protected $mClass = '';
+ protected $mVFormClass = '';
protected $mHelpClass = false;
protected $mDefault;
protected $mOptions = false;
@@ -126,6 +127,7 @@ abstract class HTMLFormField {
* @param array $alldata
* @param array $params
* @return bool
+ * @throws MWException
*/
protected function isHiddenRecurse( array $alldata, array $params ) {
$origParams = $params;
@@ -217,7 +219,7 @@ abstract class HTMLFormField {
default:
throw new MWException( "Unknown operation" );
}
- } catch ( MWException $ex ) {
+ } catch ( Exception $ex ) {
throw new MWException(
"Invalid hide-if specification for $this->mName: " .
$ex->getMessage() . " in " . var_export( $origParams, true ),
@@ -343,6 +345,10 @@ abstract class HTMLFormField {
function __construct( $params ) {
$this->mParams = $params;
+ if ( isset( $params['parent'] ) && $params['parent'] instanceof HTMLForm ) {
+ $this->mParent = $params['parent'];
+ }
+
# Generate the label from a message, if possible
if ( isset( $params['label-message'] ) ) {
$msgInfo = $params['label-message'];
@@ -354,7 +360,7 @@ abstract class HTMLFormField {
$msgInfo = array();
}
- $this->mLabel = wfMessage( $msg, $msgInfo )->parse();
+ $this->mLabel = $this->msg( $msg, $msgInfo )->parse();
} elseif ( isset( $params['label'] ) ) {
if ( $params['label'] === '&#160;' ) {
// Apparently some things set &nbsp directly and in an odd format
@@ -507,10 +513,7 @@ abstract class HTMLFormField {
array( 'class' => $outerDivClass ) + $cellAttributes,
$inputHtml . "\n$errors"
);
- $divCssClasses = array( "mw-htmlform-field-$fieldType", $this->mClass, $errorClass );
- if ( $this->mParent->isVForm() ) {
- $divCssClasses[] = 'mw-ui-vform-field';
- }
+ $divCssClasses = array( "mw-htmlform-field-$fieldType", $this->mClass, $this->mVFormClass, $errorClass );
$wrapperAttributes = array(
'class' => $divCssClasses,
@@ -550,6 +553,41 @@ abstract class HTMLFormField {
}
/**
+ * Get the complete field for the input, including help text,
+ * labels, and whatever. Fall back from 'vform' to 'div' when not overridden.
+ *
+ * @since 1.25
+ * @param string $value The value to set the input to.
+ * @return string Complete HTML field.
+ */
+ public function getVForm( $value ) {
+ // Ewwww
+ $this->mVFormClass = ' mw-ui-vform-field';
+ return $this->getDiv( $value );
+ }
+
+ /**
+ * Get the complete field as an inline element.
+ * @since 1.25
+ * @param string $value The value to set the input to.
+ * @return string Complete HTML inline element
+ */
+ public function getInline( $value ) {
+ list( $errors, $errorClass ) = $this->getErrorsAndErrorClass( $value );
+ $inputHtml = $this->getInputHTML( $value );
+ $helptext = $this->getHelpTextHtmlDiv( $this->getHelpText() );
+ $cellAttributes = array();
+ $label = $this->getLabelHtml( $cellAttributes );
+
+ $html = "\n" . $errors .
+ $label . '&#160;' .
+ $inputHtml .
+ $helptext;
+
+ return $html;
+ }
+
+ /**
* Generate help text HTML in table format
* @since 1.20
*
diff --git a/includes/htmlform/HTMLFormFieldCloner.php b/includes/htmlform/HTMLFormFieldCloner.php
index 029911cd..b06f10d5 100644
--- a/includes/htmlform/HTMLFormFieldCloner.php
+++ b/includes/htmlform/HTMLFormFieldCloner.php
@@ -96,8 +96,7 @@ class HTMLFormFieldCloner extends HTMLFormField {
} else {
$info['id'] = Sanitizer::escapeId( "{$this->mID}--$key--$fieldname" );
}
- $field = HTMLForm::loadInputFromParameters( $name, $info );
- $field->mParent = $this->mParent;
+ $field = HTMLForm::loadInputFromParameters( $name, $info, $this->mParent );
$fields[$fieldname] = $field;
}
return $fields;
@@ -263,19 +262,11 @@ class HTMLFormFieldCloner extends HTMLFormField {
? $this->mParams['format']
: $this->mParent->getDisplayFormat();
- switch ( $displayFormat ) {
- case 'table':
- $getFieldHtmlMethod = 'getTableRow';
- break;
- case 'vform':
- // Close enough to a div.
- $getFieldHtmlMethod = 'getDiv';
- break;
- default:
- $getFieldHtmlMethod = 'get' . ucfirst( $displayFormat );
- }
+ // Conveniently, PHP method names are case-insensitive.
+ $getFieldHtmlMethod = $displayFormat == 'table' ? 'getTableRow' : ( 'get' . $displayFormat );
$html = '';
+ $hidden = '';
$hasLabel = false;
$fields = $this->createFieldsForKey( $key );
@@ -283,11 +274,18 @@ class HTMLFormFieldCloner extends HTMLFormField {
$v = ( empty( $field->mParams['nodata'] ) && $values !== null )
? $values[$fieldname]
: $field->getDefault();
- $html .= $field->$getFieldHtmlMethod( $v );
- $labelValue = trim( $field->getLabel() );
- if ( $labelValue != '&#160;' && $labelValue !== '' ) {
- $hasLabel = true;
+ if ( $field instanceof HTMLHiddenField ) {
+ // HTMLHiddenField doesn't generate its own HTML
+ list( $name, $value, $params ) = $field->getHiddenFieldData( $v );
+ $hidden .= Html::hidden( $name, $value, $params ) . "\n";
+ } else {
+ $html .= $field->$getFieldHtmlMethod( $v );
+
+ $labelValue = trim( $field->getLabel() );
+ if ( $labelValue != '&#160;' && $labelValue !== '' ) {
+ $hasLabel = true;
+ }
}
}
@@ -302,8 +300,7 @@ class HTMLFormFieldCloner extends HTMLFormField {
'id' => Sanitizer::escapeId( "{$this->mID}--$key--delete" ),
'cssclass' => 'mw-htmlform-cloner-delete-button',
'default' => $this->msg( $label )->text(),
- ) );
- $field->mParent = $this->mParent;
+ ), $this->mParent );
$v = $field->getDefault();
if ( $displayFormat === 'table' ) {
@@ -330,11 +327,13 @@ class HTMLFormFieldCloner extends HTMLFormField {
$html = Html::rawElement( 'table',
$attribs,
Html::rawElement( 'tbody', array(), "\n$html\n" ) ) . "\n";
- } elseif ( $displayFormat === 'div' || $displayFormat === 'vform' ) {
+ } else {
$html = Html::rawElement( 'div', $attribs, "\n$html\n" );
}
}
+ $html .= $hidden;
+
if ( !empty( $this->mParams['row-legend'] ) ) {
$legend = $this->msg( $this->mParams['row-legend'] )->text();
$html = Xml::fieldset( $legend, $html );
@@ -373,8 +372,7 @@ class HTMLFormFieldCloner extends HTMLFormField {
'id' => Sanitizer::escapeId( "{$this->mID}--create" ),
'cssclass' => 'mw-htmlform-cloner-create-button',
'default' => $this->msg( $label )->text(),
- ) );
- $field->mParent = $this->mParent;
+ ), $this->mParent );
$html .= $field->getInputHTML( $field->getDefault() );
return $html;
diff --git a/includes/htmlform/HTMLHiddenField.php b/includes/htmlform/HTMLHiddenField.php
index e32c0bb2..ffde9151 100644
--- a/includes/htmlform/HTMLHiddenField.php
+++ b/includes/htmlform/HTMLHiddenField.php
@@ -1,22 +1,36 @@
<?php
class HTMLHiddenField extends HTMLFormField {
+ protected $outputAsDefault = true;
+
public function __construct( $params ) {
parent::__construct( $params );
+ if ( isset( $this->mParams['output-as-default'] ) ) {
+ $this->outputAsDefault = (bool)$this->mParams['output-as-default'];
+ }
+
# Per HTML5 spec, hidden fields cannot be 'required'
# http://www.w3.org/TR/html5/forms.html#hidden-state-%28type=hidden%29
unset( $this->mParams['required'] );
}
- public function getTableRow( $value ) {
+ public function getHiddenFieldData( $value ) {
$params = array();
if ( $this->mID ) {
$params['id'] = $this->mID;
}
- $this->mParent->addHiddenField( $this->mName, $this->mDefault, $params );
+ if ( $this->outputAsDefault ) {
+ $value = $this->mDefault;
+ }
+
+ return array( $this->mName, $value, $params );
+ }
+ public function getTableRow( $value ) {
+ list( $name, $value, $params ) = $this->getHiddenFieldData( $value );
+ $this->mParent->addHiddenField( $name, $value, $params );
return '';
}
diff --git a/includes/htmlform/HTMLIntField.php b/includes/htmlform/HTMLIntField.php
index 28876e2c..b0148d98 100644
--- a/includes/htmlform/HTMLIntField.php
+++ b/includes/htmlform/HTMLIntField.php
@@ -11,14 +11,13 @@ class HTMLIntField extends HTMLFloatField {
return $p;
}
- # http://dev.w3.org/html5/spec/common-microsyntaxes.html#signed-integers
+ # http://www.w3.org/TR/html5/infrastructure.html#signed-integers
# with the addition that a leading '+' sign is ok. Note that leading zeros
# are fine, and will be left in the input, which is useful for things like
# phone numbers when you know that they are integers (the HTML5 type=tel
# input does not require its value to be numeric). If you want a tidier
# value to, eg, save in the DB, clean it up with intval().
- if ( !preg_match( '/^((\+|\-)?\d+)?$/', trim( $value ) )
- ) {
+ if ( !preg_match( '/^((\+|\-)?\d+)?$/', trim( $value ) ) ) {
return $this->msg( 'htmlform-int-invalid' )->parseAsBlock();
}
diff --git a/includes/htmlform/HTMLMultiSelectField.php b/includes/htmlform/HTMLMultiSelectField.php
index 1b71ab95..8d28b59e 100644
--- a/includes/htmlform/HTMLMultiSelectField.php
+++ b/includes/htmlform/HTMLMultiSelectField.php
@@ -59,6 +59,14 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
$label
);
+ if ( $this->mParent->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
+ $checkbox = Html::rawElement(
+ 'div',
+ array( 'class' => 'mw-ui-checkbox' ),
+ $checkbox
+ );
+ }
+
$html .= ' ' . Html::rawElement(
'div',
array( 'class' => 'mw-htmlform-flatlist-item' ),
diff --git a/includes/htmlform/HTMLRadioField.php b/includes/htmlform/HTMLRadioField.php
index 8765407b..0f005408 100644
--- a/includes/htmlform/HTMLRadioField.php
+++ b/includes/htmlform/HTMLRadioField.php
@@ -56,7 +56,7 @@ class HTMLRadioField extends HTMLFormField {
$html .= ' ' . Html::rawElement(
'div',
- array( 'class' => 'mw-htmlform-flatlist-item' ),
+ array( 'class' => 'mw-htmlform-flatlist-item mw-ui-radio' ),
$radio
);
}
diff --git a/includes/htmlform/HTMLSelectAndOtherField.php b/includes/htmlform/HTMLSelectAndOtherField.php
index 65176dd7..a1c0c957 100644
--- a/includes/htmlform/HTMLSelectAndOtherField.php
+++ b/includes/htmlform/HTMLSelectAndOtherField.php
@@ -13,6 +13,7 @@
class HTMLSelectAndOtherField extends HTMLSelectField {
function __construct( $params ) {
if ( array_key_exists( 'other', $params ) ) {
+ // Do nothing
} elseif ( array_key_exists( 'other-message', $params ) ) {
$params['other'] = wfMessage( $params['other-message'] )->plain();
} else {
@@ -22,7 +23,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
parent::__construct( $params );
if ( $this->getOptions() === null ) {
- # Sulk
+ // Sulk
throw new MWException( 'HTMLSelectAndOtherField called without any options' );
}
if ( !in_array( 'other', $this->mOptions, true ) ) {
@@ -39,10 +40,12 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
$textAttribs = array(
'id' => $this->mID . '-other',
'size' => $this->getSize(),
+ 'class' => array( 'mw-htmlform-select-and-other-field' ),
+ 'data-id-select' => $this->mID,
);
if ( $this->mClass !== '' ) {
- $textAttribs['class'] = $this->mClass;
+ $textAttribs['class'][] = $this->mClass;
}
$allowedParams = array(
@@ -50,7 +53,8 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
'autofocus',
'multiple',
'disabled',
- 'tabindex'
+ 'tabindex',
+ 'maxlength', // gets dynamic with javascript, see mediawiki.htmlform.js
);
$textAttribs += $this->getAttributes( $allowedParams );
@@ -71,6 +75,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
$list = $request->getText( $this->mName );
$text = $request->getText( $this->mName . '-other' );
+ // Should be built the same as in mediawiki.htmlform.js
if ( $list == 'other' ) {
$final = $text;
} elseif ( !in_array( $list, $this->mFlatOptions, true ) ) {
diff --git a/includes/htmlform/HTMLSelectNamespace.php b/includes/htmlform/HTMLSelectNamespace.php
new file mode 100644
index 00000000..96381062
--- /dev/null
+++ b/includes/htmlform/HTMLSelectNamespace.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Wrapper for Html::namespaceSelector to use in HTMLForm
+ */
+class HTMLSelectNamespace extends HTMLFormField {
+ function getInputHTML( $value ) {
+ return Html::namespaceSelector(
+ array(
+ 'selected' => $value,
+ 'all' => 'all'
+ ), array(
+ 'name' => $this->mName,
+ 'id' => $this->mID,
+ 'class' => 'namespaceselector',
+ )
+ );
+ }
+}
diff --git a/includes/htmlform/HTMLTagFilter.php b/includes/htmlform/HTMLTagFilter.php
new file mode 100644
index 00000000..8075de5a
--- /dev/null
+++ b/includes/htmlform/HTMLTagFilter.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Wrapper for ChangeTags::buildTagFilterSelector to use in HTMLForm
+ */
+class HTMLTagFilter extends HTMLFormField {
+ protected $tagFilter;
+
+ function getTableRow( $value ) {
+ $this->tagFilter = ChangeTags::buildTagFilterSelector( $value );
+ if ( $this->tagFilter ) {
+ return parent::getTableRow( $value );
+ }
+ return '';
+ }
+
+ function getDiv( $value ) {
+ $this->tagFilter = ChangeTags::buildTagFilterSelector( $value );
+ if ( $this->tagFilter ) {
+ return parent::getDiv( $value );
+ }
+ return '';
+ }
+
+ function getInputHTML( $value ) {
+ if ( $this->tagFilter ) {
+ // we only need the select field, HTMLForm should handle the label
+ return $this->tagFilter[1];
+ }
+ return '';
+ }
+}
diff --git a/includes/htmlform/HTMLTextField.php b/includes/htmlform/HTMLTextField.php
index 10bc67f0..88df49db 100644
--- a/includes/htmlform/HTMLTextField.php
+++ b/includes/htmlform/HTMLTextField.php
@@ -20,6 +20,7 @@ class HTMLTextField extends HTMLFormField {
# @todo Enforce pattern, step, required, readonly on the server side as
# well
$allowedParams = array(
+ 'type',
'min',
'max',
'pattern',
@@ -38,10 +39,13 @@ class HTMLTextField extends HTMLFormField {
$attribs += $this->getAttributes( $allowedParams );
+ # Extract 'type'
+ $type = isset( $attribs['type'] ) ? $attribs['type'] : 'text';
+ unset( $attribs['type'] );
+
# Implement tiny differences between some field variants
# here, rather than creating a new class for each one which
# is essentially just a clone of this one.
- $type = 'text';
if ( isset( $this->mParams['type'] ) ) {
switch ( $this->mParams['type'] ) {
case 'int':
@@ -60,6 +64,7 @@ class HTMLTextField extends HTMLFormField {
break;
}
}
+
return Html::input( $this->mName, $value, $type, $attribs );
}
}
diff --git a/includes/htmlform/VFormHTMLForm.php b/includes/htmlform/VFormHTMLForm.php
new file mode 100644
index 00000000..0c0e4252
--- /dev/null
+++ b/includes/htmlform/VFormHTMLForm.php
@@ -0,0 +1,141 @@
+<?php
+
+/**
+ * HTML form generation and submission handling, vertical-form style.
+ *
+ * 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
+ */
+
+/**
+ * Compact stacked vertical format for forms.
+ */
+class VFormHTMLForm extends HTMLForm {
+ /**
+ * Wrapper and its legend are never generated in VForm mode.
+ * @var boolean
+ */
+ protected $mWrapperLegend = false;
+
+ /**
+ * Symbolic display format name.
+ * @var string
+ */
+ protected $displayFormat = 'vform';
+
+ public function isVForm() {
+ wfDeprecated( __METHOD__, '1.25' );
+ return true;
+ }
+
+ public static function loadInputFromParameters( $fieldname, $descriptor, HTMLForm $parent = null ) {
+ $field = parent::loadInputFromParameters( $fieldname, $descriptor, $parent );
+ $field->setShowEmptyLabel( false );
+ return $field;
+ }
+
+ function getHTML( $submitResult ) {
+ // This is required for VForm HTMLForms that use that style regardless
+ // of wgUseMediaWikiUIEverywhere (since they pre-date it).
+ // When wgUseMediaWikiUIEverywhere is removed, this should be consolidated
+ // with the addModuleStyles in SpecialPage->setHeaders.
+ $this->getOutput()->addModuleStyles( array(
+ 'mediawiki.ui',
+ 'mediawiki.ui.button',
+ 'mediawiki.ui.input',
+ 'mediawiki.ui.checkbox',
+ ) );
+
+ return parent::getHTML( $submitResult );
+ }
+
+ protected function getFormAttributes() {
+ $attribs = parent::getFormAttributes();
+ array_push( $attribs['class'], 'mw-ui-vform', 'mw-ui-container' );
+ return $attribs;
+ }
+
+ function wrapForm( $html ) {
+ // Always discard $this->mWrapperLegend
+ return Html::rawElement( 'form', $this->getFormAttributes(), $html );
+ }
+
+ function getButtons() {
+ $buttons = '';
+
+ if ( $this->mShowSubmit ) {
+ $attribs = array();
+
+ if ( isset( $this->mSubmitID ) ) {
+ $attribs['id'] = $this->mSubmitID;
+ }
+
+ if ( isset( $this->mSubmitName ) ) {
+ $attribs['name'] = $this->mSubmitName;
+ }
+
+ if ( isset( $this->mSubmitTooltip ) ) {
+ $attribs += Linker::tooltipAndAccesskeyAttribs( $this->mSubmitTooltip );
+ }
+
+ $attribs['class'] = array(
+ 'mw-htmlform-submit',
+ 'mw-ui-button mw-ui-big mw-ui-block',
+ $this->mSubmitModifierClass,
+ );
+
+ $buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
+ }
+
+ if ( $this->mShowReset ) {
+ $buttons .= Html::element(
+ 'input',
+ array(
+ 'type' => 'reset',
+ 'value' => $this->msg( 'htmlform-reset' )->text(),
+ 'class' => 'mw-ui-button mw-ui-big mw-ui-block',
+ )
+ ) . "\n";
+ }
+
+ foreach ( $this->mButtons as $button ) {
+ $attrs = array(
+ 'type' => 'submit',
+ 'name' => $button['name'],
+ 'value' => $button['value']
+ );
+
+ if ( $button['attribs'] ) {
+ $attrs += $button['attribs'];
+ }
+
+ if ( isset( $button['id'] ) ) {
+ $attrs['id'] = $button['id'];
+ }
+
+ $attrs['class'] = isset( $attrs['class'] ) ? (array)$attrs['class'] : array();
+ $attrs['class'][] = 'mw-ui-button mw-ui-big mw-ui-block';
+
+ $buttons .= Html::element( 'input', $attrs ) . "\n";
+ }
+
+ $html = Html::rawElement( 'div',
+ array( 'class' => 'mw-htmlform-submit-buttons' ), "\n$buttons" ) . "\n";
+
+ return $html;
+ }
+}
diff --git a/includes/installer/DatabaseInstaller.php b/includes/installer/DatabaseInstaller.php
index 31b93c88..6ccf2d55 100644
--- a/includes/installer/DatabaseInstaller.php
+++ b/includes/installer/DatabaseInstaller.php
@@ -305,7 +305,7 @@ abstract class DatabaseInstaller {
$up = DatabaseUpdater::newForDB( $this->db );
try {
$up->doUpdates();
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
echo "\nAn error occurred:\n";
echo $e->getText();
$ret = false;
@@ -369,12 +369,17 @@ abstract class DatabaseInstaller {
}
/**
- * Get a name=>value map of MW configuration globals that overrides.
- * DefaultSettings.php
+ * Get a name=>value map of MW configuration globals for the default values.
* @return array
*/
public function getGlobalDefaults() {
- return array();
+ $defaults = array();
+ foreach ( $this->getGlobalNames() as $var ) {
+ if ( isset( $GLOBALS[$var] ) ) {
+ $defaults[$var] = $GLOBALS[$var];
+ }
+ }
+ return $defaults;
}
/**
@@ -657,7 +662,7 @@ abstract class DatabaseInstaller {
if ( $row == "" ) {
continue;
}
- $row .= "||";
+ $row .= "|";
$interwikis[] = array_combine(
array( 'iw_prefix', 'iw_url', 'iw_local', 'iw_api', 'iw_wikiid' ),
explode( '|', $row )
diff --git a/includes/installer/DatabaseUpdater.php b/includes/installer/DatabaseUpdater.php
index 193d5920..702f850c 100644
--- a/includes/installer/DatabaseUpdater.php
+++ b/includes/installer/DatabaseUpdater.php
@@ -31,6 +31,7 @@ require_once __DIR__ . '/../../maintenance/Maintenance.php';
* @since 1.17
*/
abstract class DatabaseUpdater {
+ protected static $updateCounter = 0;
/**
* Array of updates to perform on the database
@@ -114,7 +115,7 @@ abstract class DatabaseUpdater {
$this->maintenance->setDB( $db );
$this->initOldGlobals();
$this->loadExtensions();
- wfRunHooks( 'LoadExtensionSchemaUpdates', array( $this ) );
+ Hooks::run( 'LoadExtensionSchemaUpdates', array( $this ) );
}
/**
@@ -460,7 +461,8 @@ abstract class DatabaseUpdater {
if ( !$this->canUseNewUpdatelog() ) {
return;
}
- $key = "updatelist-$version-" . time();
+ $key = "updatelist-$version-" . time() . self::$updateCounter;
+ self::$updateCounter++;
$this->db->insert( 'updatelog',
array( 'ul_key' => $key, 'ul_value' => serialize( $updates ) ),
__METHOD__ );
@@ -610,7 +612,7 @@ abstract class DatabaseUpdater {
* Append a line to the open filehandle. The line is assumed to
* be a complete SQL statement.
*
- * This is used as a callback for for sourceLine().
+ * This is used as a callback for sourceLine().
*
* @param string $line Text to append to the file
* @return bool False to skip actually executing the file
@@ -896,6 +898,29 @@ abstract class DatabaseUpdater {
}
/**
+ * Set any .htaccess files or equivilent for storage repos
+ *
+ * Some zones (e.g. "temp") used to be public and may have been initialized as such
+ */
+ public function setFileAccess() {
+ $repo = RepoGroup::singleton()->getLocalRepo();
+ $zonePath = $repo->getZonePath( 'temp' );
+ if ( $repo->getBackend()->directoryExists( array( 'dir' => $zonePath ) ) ) {
+ // If the directory was never made, then it will have the right ACLs when it is made
+ $status = $repo->getBackend()->secure( array(
+ 'dir' => $zonePath,
+ 'noAccess' => true,
+ 'noListing' => true
+ ) );
+ if ( $status->isOK() ) {
+ $this->output( "Set the local repo temp zone container to be private.\n" );
+ } else {
+ $this->output( "Failed to set the local repo temp zone container to be private.\n" );
+ }
+ }
+ }
+
+ /**
* Purge the objectcache table
*/
public function purgeCache() {
@@ -907,7 +932,9 @@ abstract class DatabaseUpdater {
if ( $wgLocalisationCacheConf['manualRecache'] ) {
$this->rebuildLocalisationCache();
}
- MessageBlobStore::getInstance()->clear();
+ $blobStore = new MessageBlobStore();
+ $blobStore->clear();
+ $this->db->delete( 'module_deps', '*', __METHOD__ );
$this->output( "done.\n" );
}
@@ -1034,6 +1061,31 @@ abstract class DatabaseUpdater {
}
/**
+ * Enable profiling table when it's turned on
+ */
+ protected function doEnableProfiling() {
+ global $wgProfiler;
+
+ if ( !$this->doTable( 'profiling' ) ) {
+ return true;
+ }
+
+ $profileToDb = false;
+ if ( isset( $wgProfiler['output'] ) ) {
+ $out = $wgProfiler['output'];
+ if ( $out === 'db' ) {
+ $profileToDb = true;
+ } elseif ( is_array( $out ) && in_array( 'db', $out ) ) {
+ $profileToDb = true;
+ }
+ }
+
+ if ( $profileToDb && !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
+ $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
+ }
+ }
+
+ /**
* Rebuilds the localisation cache
*/
protected function rebuildLocalisationCache() {
diff --git a/includes/installer/InstallDocFormatter.php b/includes/installer/InstallDocFormatter.php
index 3250ff8a..0d52e64d 100644
--- a/includes/installer/InstallDocFormatter.php
+++ b/includes/installer/InstallDocFormatter.php
@@ -44,25 +44,31 @@ class InstallDocFormatter {
// Replace tab indents with colons
$text = preg_replace( '/^\t\t/m', '::', $text );
$text = preg_replace( '/^\t/m', ':', $text );
+
+ $linkStart = '<span class="config-plainlink">[';
+ $linkEnd = ' $0]</span>';
+
+ // turn (Tnnnn) into links
+ $text = preg_replace(
+ '/T\d+/',
+ "{$linkStart}https://phabricator.wikimedia.org/$0{$linkEnd}",
+ $text
+ );
+
// turn (bug nnnn) into links
- $text = preg_replace_callback( '/bug (\d+)/', array( $this, 'replaceBugLinks' ), $text );
+ $text = preg_replace(
+ '/bug (\d+)/',
+ "{$linkStart}https://bugzilla.wikimedia.org/$1{$linkEnd}",
+ $text
+ );
+
// add links to manual to every global variable mentioned
- $text = preg_replace_callback(
- '/(\$wg[a-z0-9_]+)/i',
- array( $this, 'replaceConfigLinks' ),
+ $text = preg_replace(
+ '/\$wg[a-z0-9_]+/i',
+ "{$linkStart}https://www.mediawiki.org/wiki/Manual:$0{$linkEnd}",
$text
);
return $text;
}
-
- protected function replaceBugLinks( $matches ) {
- return '<span class="config-plainlink">[https://bugzilla.wikimedia.org/' .
- $matches[1] . ' bug ' . $matches[1] . ']</span>';
- }
-
- protected function replaceConfigLinks( $matches ) {
- return '<span class="config-plainlink">[https://www.mediawiki.org/wiki/Manual:' .
- $matches[1] . ' ' . $matches[1] . ']</span>';
- }
}
diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php
index d2651ae5..5ae499db 100644
--- a/includes/installer/Installer.php
+++ b/includes/installer/Installer.php
@@ -186,7 +186,6 @@ abstract class Installer {
'wgUseInstantCommons',
'wgUpgradeKey',
'wgDefaultSkin',
- 'wgResourceLoaderMaxQueryLength',
);
/**
@@ -225,7 +224,7 @@ abstract class Installer {
// $wgLogo is probably wrong (bug 48084); set something that will work.
// Single quotes work fine here, as LocalSettingsGenerator outputs this unescaped.
- 'wgLogo' => '$wgScriptPath/resources/assets/wiki.png',
+ 'wgLogo' => '$wgResourceBasePath/resources/assets/wiki.png',
);
/**
@@ -285,28 +284,28 @@ abstract class Installer {
*/
public $licenses = array(
'cc-by' => array(
- 'url' => 'http://creativecommons.org/licenses/by/3.0/',
- 'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by.png',
+ 'url' => 'https://creativecommons.org/licenses/by/3.0/',
+ 'icon' => '$wgResourceBasePath/resources/assets/licenses/cc-by.png',
),
'cc-by-sa' => array(
- 'url' => 'http://creativecommons.org/licenses/by-sa/3.0/',
- 'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by-sa.png',
+ 'url' => 'https://creativecommons.org/licenses/by-sa/3.0/',
+ 'icon' => '$wgResourceBasePath/resources/assets/licenses/cc-by-sa.png',
),
'cc-by-nc-sa' => array(
- 'url' => 'http://creativecommons.org/licenses/by-nc-sa/3.0/',
- 'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-by-nc-sa.png',
+ 'url' => 'https://creativecommons.org/licenses/by-nc-sa/3.0/',
+ 'icon' => '$wgResourceBasePath/resources/assets/licenses/cc-by-nc-sa.png',
),
'cc-0' => array(
'url' => 'https://creativecommons.org/publicdomain/zero/1.0/',
- 'icon' => '{$wgResourceBasePath}/resources/assets/licenses/cc-0.png',
+ 'icon' => '$wgResourceBasePath/resources/assets/licenses/cc-0.png',
),
'pd' => array(
'url' => '',
- 'icon' => '{$wgResourceBasePath}/resources/assets/licenses/public-domain.png',
+ 'icon' => '$wgResourceBasePath/resources/assets/licenses/public-domain.png',
),
'gfdl' => array(
- 'url' => 'http://www.gnu.org/copyleft/fdl.html',
- 'icon' => '{$wgResourceBasePath}/resources/assets/licenses/gnu-fdl.png',
+ 'url' => 'https://www.gnu.org/copyleft/fdl.html',
+ 'icon' => '$wgResourceBasePath/resources/assets/licenses/gnu-fdl.png',
),
'none' => array(
'url' => '',
@@ -674,7 +673,6 @@ abstract class Installer {
'site_stats',
array(
'ss_row_id' => 1,
- 'ss_total_views' => 0,
'ss_total_edits' => 0,
'ss_good_articles' => 0,
'ss_total_pages' => 0,
@@ -728,7 +726,7 @@ abstract class Installer {
}
$databases = array_flip( $databases );
if ( !$databases ) {
- $this->showError( 'config-no-db', $wgLang->commaList( $allNames ) );
+ $this->showError( 'config-no-db', $wgLang->commaList( $allNames ), count( $allNames ) );
// @todo FIXME: This only works for the web installer!
return false;
@@ -898,11 +896,12 @@ abstract class Installer {
}
/**
- * Scare user to death if they have mod_security
+ * Scare user to death if they have mod_security or mod_security2
* @return bool
*/
protected function envCheckModSecurity() {
- if ( self::apacheModulePresent( 'mod_security' ) ) {
+ if ( self::apacheModulePresent( 'mod_security' )
+ || self::apacheModulePresent( 'mod_security2' ) ) {
$this->showMessage( 'config-mod-security' );
}
@@ -1141,9 +1140,6 @@ abstract class Installer {
* Check the libicu version
*/
protected function envCheckLibicu() {
- $utf8 = function_exists( 'utf8_normalize' );
- $intl = function_exists( 'normalizer_normalize' );
-
/**
* This needs to be updated something that the latest libicu
* will properly normalize. This normalization was found at
@@ -1157,18 +1153,7 @@ abstract class Installer {
$useNormalizer = 'php';
$needsUpdate = false;
- /**
- * We're going to prefer the pecl extension here unless
- * utf8_normalize is more up to date.
- */
- if ( $utf8 ) {
- $useNormalizer = 'utf8';
- $utf8 = utf8_normalize( $not_normal_c, UtfNormal::UNORM_NFC );
- if ( $utf8 !== $normal_c ) {
- $needsUpdate = true;
- }
- }
- if ( $intl ) {
+ if ( function_exists( 'normalizer_normalize' ) ) {
$useNormalizer = 'intl';
$intl = normalizer_normalize( $not_normal_c, Normalizer::FORM_C );
if ( $intl !== $normal_c ) {
@@ -1176,8 +1161,7 @@ abstract class Installer {
}
}
- // Uses messages 'config-unicode-using-php', 'config-unicode-using-utf8',
- // 'config-unicode-using-intl'
+ // Uses messages 'config-unicode-using-php' and 'config-unicode-using-intl'
if ( $useNormalizer === 'php' ) {
$this->showMessage( 'config-unicode-pure-php-warning' );
} else {
@@ -1376,8 +1360,8 @@ abstract class Installer {
}
try {
- $text = Http::get( $url . $file, array( 'timeout' => 3 ) );
- } catch ( MWException $e ) {
+ $text = Http::get( $url . $file, array( 'timeout' => 3 ), __METHOD__ );
+ } catch ( Exception $e ) {
// Http::get throws with allow_url_fopen = false and no curl extension.
$text = null;
}
@@ -1452,13 +1436,16 @@ abstract class Installer {
return array();
}
+ // extensions -> extension.json, skins -> skin.json
+ $jsonFile = substr( $directory, 0, strlen( $directory ) -1 ) . '.json';
+
$dh = opendir( $extDir );
$exts = array();
while ( ( $file = readdir( $dh ) ) !== false ) {
if ( !is_dir( "$extDir/$file" ) ) {
continue;
}
- if ( file_exists( "$extDir/$file/$file.php" ) ) {
+ if ( file_exists( "$extDir/$file/$jsonFile" ) || file_exists( "$extDir/$file/$file.php" ) ) {
$exts[] = $file;
}
}
@@ -1469,15 +1456,16 @@ abstract class Installer {
}
/**
- * Returns a default value to be used for $wgDefaultSkin: the preferred skin, if available among
- * the installed skins, or any other one otherwise.
+ * Returns a default value to be used for $wgDefaultSkin: normally the one set in DefaultSettings,
+ * but will fall back to another if the default skin is missing and some other one is present
+ * instead.
*
* @param string[] $skinNames Names of installed skins.
* @return string
*/
public function getDefaultSkin( array $skinNames ) {
$defaultSkin = $GLOBALS['wgDefaultSkin'];
- if ( in_array( $defaultSkin, $skinNames ) ) {
+ if ( !$skinNames || in_array( $defaultSkin, $skinNames ) ) {
return $defaultSkin;
} else {
return $skinNames[0];
@@ -1504,16 +1492,31 @@ abstract class Installer {
*/
global $wgAutoloadClasses;
$wgAutoloadClasses = array();
+ $queue = array();
require "$IP/includes/DefaultSettings.php";
foreach ( $exts as $e ) {
- require_once "$IP/extensions/$e/$e.php";
+ if ( file_exists( "$IP/extensions/$e/extension.json" ) ) {
+ $queue["$IP/extensions/$e/extension.json"] = 1;
+ } else {
+ require_once "$IP/extensions/$e/$e.php";
+ }
}
+ $registry = new ExtensionRegistry();
+ $data = $registry->readFromQueue( $queue );
+ $wgAutoloadClasses += $data['autoload'];
+
$hooksWeWant = isset( $wgHooks['LoadExtensionSchemaUpdates'] ) ?
$wgHooks['LoadExtensionSchemaUpdates'] : array();
+ if ( isset( $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
+ $hooksWeWant = array_merge_recursive(
+ $hooksWeWant,
+ $data['globals']['wgHooks']['LoadExtensionSchemaUpdates']
+ );
+ }
// Unset everyone else's hooks. Lord knows what someone might be doing
// in ParserFirstCallInit (see bug 27171)
$GLOBALS['wgHooks'] = array( 'LoadExtensionSchemaUpdates' => $hooksWeWant );
@@ -1723,7 +1726,7 @@ abstract class Installer {
if ( MWHttpRequest::canMakeRequests() ) {
$res = MWHttpRequest::factory( $this->mediaWikiAnnounceUrl,
- array( 'method' => 'POST', 'postData' => $params ) )->execute();
+ array( 'method' => 'POST', 'postData' => $params ), __METHOD__ )->execute();
if ( !$res->isOK() ) {
$s->warning( 'config-install-subscribe-fail', $res->getMessage() );
}
@@ -1753,7 +1756,7 @@ abstract class Installer {
false,
User::newFromName( 'MediaWiki default' )
);
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
//using raw, because $wgShowExceptionDetails can not be set yet
$status->fatal( 'config-install-mainpage-failed', $e->getMessage() );
}
diff --git a/includes/installer/LocalSettingsGenerator.php b/includes/installer/LocalSettingsGenerator.php
index c0ba300d..162a7897 100644
--- a/includes/installer/LocalSettingsGenerator.php
+++ b/includes/installer/LocalSettingsGenerator.php
@@ -34,6 +34,7 @@ class LocalSettingsGenerator {
protected $groupPermissions = array();
protected $dbSettings = '';
protected $safeMode = false;
+ protected $IP;
/**
* @var Installer
@@ -50,6 +51,7 @@ class LocalSettingsGenerator {
$this->extensions = $installer->getVar( '_Extensions' );
$this->skins = $installer->getVar( '_Skins' );
+ $this->IP = $installer->getVar( 'IP' );
$db = $installer->getDBInstaller( $installer->getVar( 'wgDBtype' ) );
@@ -63,7 +65,7 @@ class LocalSettingsGenerator {
'wgRightsText', 'wgMainCacheType', 'wgEnableUploads',
'wgMainCacheType', '_MemCachedServers', 'wgDBserver', 'wgDBuser',
'wgDBpassword', 'wgUseInstantCommons', 'wgUpgradeKey', 'wgDefaultSkin',
- 'wgMetaNamespace', 'wgResourceLoaderMaxQueryLength', 'wgLogo',
+ 'wgMetaNamespace', 'wgLogo',
),
$db->getGlobalNames()
);
@@ -143,8 +145,7 @@ class LocalSettingsGenerator {
# The following skins were automatically enabled:\n";
foreach ( $this->skins as $skinName ) {
- $encSkinName = self::escapePhpString( $skinName );
- $localSettings .= "require_once \"\$IP/skins/$encSkinName/$encSkinName.php\";\n";
+ $localSettings .= $this->generateExtEnableLine( 'skins', $skinName );
}
$localSettings .= "\n";
@@ -157,8 +158,7 @@ class LocalSettingsGenerator {
# The following extensions were automatically enabled:\n";
foreach ( $this->extensions as $extName ) {
- $encExtName = self::escapePhpString( $extName );
- $localSettings .= "require_once \"\$IP/extensions/$encExtName/$encExtName.php\";\n";
+ $localSettings .= $this->generateExtEnableLine( 'extensions', $extName );
}
$localSettings .= "\n";
@@ -172,6 +172,34 @@ class LocalSettingsGenerator {
}
/**
+ * Generate the appropriate line to enable the given extension or skin
+ *
+ * @param string $dir Either "extensions" or "skins"
+ * @param string $name Name of extension/skin
+ * @throws InvalidArgumentException
+ * @return string
+ */
+ private function generateExtEnableLine( $dir, $name ) {
+ if ( $dir === 'extensions' ) {
+ $jsonFile = 'extension.json';
+ $function = 'wfLoadExtension';
+ } elseif ( $dir === 'skins' ) {
+ $jsonFile = 'skin.json';
+ $function = 'wfLoadSkin';
+ } else {
+ throw new InvalidArgumentException( '$dir was not "extensions" or "skins' );
+ }
+
+ $encName = self::escapePhpString( $name );
+
+ if ( file_exists( "{$this->IP}/$dir/$encName/$jsonFile" ) ) {
+ return "$function( '$encName' );\n";
+ } else {
+ return "require_once \"\$IP/$dir/$encName/$encName.php\";\n";
+ }
+ }
+
+ /**
* Write the generated LocalSettings to a file
*
* @param string $fileName Full path to filename to write to
@@ -307,6 +335,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
${serverSetting}
## The relative URL path to the skins directory
\$wgStylePath = \"\$wgScriptPath/skins\";
+\$wgResourceBasePath = \$wgScriptPath;
## The relative URL path to the logo. Make sure you change this from the default,
## or else you'll overwrite your logo when you upgrade!
diff --git a/includes/installer/MssqlInstaller.php b/includes/installer/MssqlInstaller.php
index 46bb86c0..5a8403f5 100644
--- a/includes/installer/MssqlInstaller.php
+++ b/includes/installer/MssqlInstaller.php
@@ -652,9 +652,9 @@ class MssqlInstaller extends DatabaseInstaller {
public function getGlobalDefaults() {
// The default $wgDBmwschema is null, which breaks Postgres and other DBMSes that require
// the use of a schema, so we need to set it here
- return array(
+ return array_merge( parent::getGlobalDefaults(), array(
'wgDBmwschema' => 'mediawiki',
- );
+ ) );
}
/**
diff --git a/includes/installer/MssqlUpdater.php b/includes/installer/MssqlUpdater.php
index ed11f8b6..5eef3355 100644
--- a/includes/installer/MssqlUpdater.php
+++ b/includes/installer/MssqlUpdater.php
@@ -42,6 +42,11 @@ class MssqlUpdater extends DatabaseUpdater {
// 1.24
array( 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql'),
+
+ // 1.25
+ array( 'dropTable', 'hitcounter' ),
+ array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
+ array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
// Constraint updates
array( 'updateConstraints', 'category_types', 'categorylinks', 'cl_type' ),
array( 'updateConstraints', 'major_mime', 'filearchive', 'fa_major_mime' ),
diff --git a/includes/installer/MysqlInstaller.php b/includes/installer/MysqlInstaller.php
index b82e6114..3af08d60 100644
--- a/includes/installer/MysqlInstaller.php
+++ b/includes/installer/MysqlInstaller.php
@@ -47,7 +47,7 @@ class MysqlInstaller extends DatabaseInstaller {
public $supportedEngines = array( 'InnoDB', 'MyISAM' );
- public $minimumVersion = '5.0.2';
+ public $minimumVersion = '5.0.3';
public $webUserPrivs = array(
'DELETE',
@@ -72,13 +72,6 @@ class MysqlInstaller extends DatabaseInstaller {
}
/**
- * @return array
- */
- public function getGlobalDefaults() {
- return array();
- }
-
- /**
* @return string
*/
public function getConnectForm() {
diff --git a/includes/installer/MysqlUpdater.php b/includes/installer/MysqlUpdater.php
index 990b5b03..52a09222 100644
--- a/includes/installer/MysqlUpdater.php
+++ b/includes/installer/MysqlUpdater.php
@@ -37,7 +37,6 @@ class MysqlUpdater extends DatabaseUpdater {
array( 'addField', 'ipblocks', 'ipb_expiry', 'patch-ipb_expiry.sql' ),
array( 'doInterwikiUpdate' ),
array( 'doIndexUpdate' ),
- array( 'addTable', 'hitcounter', 'patch-hitcounter.sql' ),
array( 'addField', 'recentchanges', 'rc_type', 'patch-rc_type.sql' ),
array( 'addIndex', 'recentchanges', 'new_name_timestamp', 'patch-rc-newindex.sql' ),
@@ -266,6 +265,11 @@ class MysqlUpdater extends DatabaseUpdater {
'patch-oi_major_mime-chemical.sql' ),
array( 'modifyField', 'filearchive', 'fa_major_mime',
'patch-fa_major_mime-chemical.sql' ),
+
+ // 1.25
+ array( 'doUserNewTalkUseridUnsigned' ),
+ // note this patch covers other _comment and _description fields too
+ array( 'modifyField', 'recentchanges', 'rc_comment', 'patch-editsummary-length.sql' ),
);
}
@@ -516,7 +520,6 @@ class MysqlUpdater extends DatabaseUpdater {
page_namespace int NOT NULL,
page_title varchar(255) binary NOT NULL,
page_restrictions tinyblob NOT NULL,
- page_counter bigint(20) unsigned NOT NULL default '0',
page_is_redirect tinyint(1) unsigned NOT NULL default '0',
page_is_new tinyint(1) unsigned NOT NULL default '0',
page_random real unsigned NOT NULL,
@@ -598,9 +601,9 @@ class MysqlUpdater extends DatabaseUpdater {
$this->output( "......Setting up page table.\n" );
$this->db->query(
"INSERT INTO $page (page_id, page_namespace, page_title,
- page_restrictions, page_counter, page_is_redirect, page_is_new, page_random,
+ page_restrictions, page_is_redirect, page_is_new, page_random,
page_touched, page_latest, page_len)
- SELECT cur_id, cur_namespace, cur_title, cur_restrictions, cur_counter,
+ SELECT cur_id, cur_namespace, cur_title, cur_restrictions,
cur_is_redirect, cur_is_new, cur_random, cur_touched, rev_id, LENGTH(cur_text)
FROM $cur,$revision
WHERE cur_id=rev_page AND rev_timestamp=cur_timestamp AND rev_id > {$maxold}",
@@ -924,18 +927,6 @@ class MysqlUpdater extends DatabaseUpdater {
}
}
- protected function doEnableProfiling() {
- global $wgProfileToDatabase;
-
- if ( !$this->doTable( 'profiling' ) ) {
- return true;
- }
-
- if ( $wgProfileToDatabase === true && !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
- $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
- }
- }
-
protected function doMaybeProfilingMemoryUpdate() {
if ( !$this->doTable( 'profiling' ) ) {
return true;
@@ -1071,4 +1062,26 @@ class MysqlUpdater extends DatabaseUpdater {
'Making iwl_prefix_title_from index non-UNIQUE'
);
}
+
+ protected function doUserNewTalkUseridUnsigned() {
+ if ( !$this->doTable( 'user_newtalk' ) ) {
+ return true;
+ }
+
+ $info = $this->db->fieldInfo( 'user_newtalk', 'user_id' );
+ if ( $info === false ) {
+ return true;
+ }
+ if ( $info->isUnsigned() ) {
+ $this->output( "...user_id is already unsigned int.\n" );
+
+ return true;
+ }
+
+ return $this->applyPatch(
+ 'patch-user-newtalk-userid-unsigned.sql',
+ false,
+ 'Making user_id unsigned int'
+ );
+ }
}
diff --git a/includes/installer/OracleUpdater.php b/includes/installer/OracleUpdater.php
index 18468544..03dbd1ce 100644
--- a/includes/installer/OracleUpdater.php
+++ b/includes/installer/OracleUpdater.php
@@ -103,6 +103,11 @@ class OracleUpdater extends DatabaseUpdater {
// 1.24
array( 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql' ),
+ // 1.25
+ array( 'dropTable', 'hitcounter' ),
+ array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
+ array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
+
// KEEP THIS AT THE BOTTOM!!
array( 'doRebuildDuplicateFunction' ),
@@ -172,7 +177,6 @@ class OracleUpdater extends DatabaseUpdater {
'page_id' => 0,
'page_namespace' => 0,
'page_title' => ' ',
- 'page_counter' => 0,
'page_is_redirect' => 0,
'page_is_new' => 0,
'page_random' => 0,
diff --git a/includes/installer/PostgresInstaller.php b/includes/installer/PostgresInstaller.php
index c30a989e..b18fe944 100644
--- a/includes/installer/PostgresInstaller.php
+++ b/includes/installer/PostgresInstaller.php
@@ -262,11 +262,13 @@ class PostgresInstaller extends DatabaseInstaller {
$status = Status::newGood();
foreach ( $dbs as $db ) {
try {
- $conn = new DatabasePostgres(
- $this->getVar( 'wgDBserver' ),
- $user,
- $password,
- $db );
+ $p = array(
+ 'host' => $this->getVar( 'wgDBserver' ),
+ 'user' => $user,
+ 'password' => $password,
+ 'dbname' => $db
+ );
+ $conn = DatabaseBase::factory( 'postgres', $p );
} catch ( DBConnectionError $error ) {
$conn = false;
$status->fatal( 'config-pg-test-error', $db,
@@ -627,9 +629,9 @@ class PostgresInstaller extends DatabaseInstaller {
public function getGlobalDefaults() {
// The default $wgDBmwschema is null, which breaks Postgres and other DBMSes that require
// the use of a schema, so we need to set it here
- return array(
+ return array_merge( parent::getGlobalDefaults(), array(
'wgDBmwschema' => 'mediawiki',
- );
+ ) );
}
public function setupPLpgSQL() {
diff --git a/includes/installer/PostgresUpdater.php b/includes/installer/PostgresUpdater.php
index df2f0e32..6ac54360 100644
--- a/includes/installer/PostgresUpdater.php
+++ b/includes/installer/PostgresUpdater.php
@@ -417,9 +417,11 @@ class PostgresUpdater extends DatabaseUpdater {
array( 'addPgField', 'templatelinks', 'tl_from_namespace', 'INTEGER NOT NULL DEFAULT 0' ),
array( 'addPgField', 'imagelinks', 'il_from_namespace', 'INTEGER NOT NULL DEFAULT 0' ),
- // 1.24.1 (backport from 1.25)
+ // 1.25
+ array( 'dropTable', 'hitcounter' ),
+ array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
+ array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
array( 'dropFkey', 'recentchanges', 'rc_cur_id' )
-
);
}
diff --git a/includes/installer/SqliteInstaller.php b/includes/installer/SqliteInstaller.php
index 351b0223..f990ddf5 100644
--- a/includes/installer/SqliteInstaller.php
+++ b/includes/installer/SqliteInstaller.php
@@ -55,7 +55,7 @@ class SqliteInstaller extends DatabaseInstaller {
public function checkPrerequisites() {
$result = Status::newGood();
// Bail out if SQLite is too old
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
if ( version_compare( $db->getServerVersion(), self::MINIMUM_VERSION, '<' ) ) {
$result->fatal( 'config-outdated-sqlite', $db->getServerVersion(), self::MINIMUM_VERSION );
}
@@ -68,6 +68,7 @@ class SqliteInstaller extends DatabaseInstaller {
}
public function getGlobalDefaults() {
+ $defaults = parent::getGlobalDefaults();
if ( isset( $_SERVER['DOCUMENT_ROOT'] ) ) {
$path = str_replace(
array( '/', '\\' ),
@@ -75,10 +76,9 @@ class SqliteInstaller extends DatabaseInstaller {
dirname( $_SERVER['DOCUMENT_ROOT'] ) . '/data'
);
- return array( 'wgSQLiteDataDir' => $path );
- } else {
- return array();
+ $defaults['wgSQLiteDataDir'] = $path;
}
+ return $defaults;
}
public function getConnectForm() {
@@ -188,7 +188,7 @@ class SqliteInstaller extends DatabaseInstaller {
# @todo FIXME: Need more sensible constructor parameters, e.g. single associative array
# Setting globals kind of sucks
$wgSQLiteDataDir = $dir;
- $db = new DatabaseSqlite( false, false, false, $dbName );
+ $db = DatabaseBase::factory( 'sqlite', array( 'dbname' => $dbName ) );
$status->value = $db;
} catch ( DBConnectionError $e ) {
$status->fatal( 'config-sqlite-connection-error', $e->getMessage() );
@@ -226,6 +226,49 @@ class SqliteInstaller extends DatabaseInstaller {
}
$db = $this->getVar( 'wgDBname' );
+
+ # Make the main and cache stub DB files
+ $status = Status::newGood();
+ $status->merge( $this->makeStubDBFile( $dir, $db ) );
+ $status->merge( $this->makeStubDBFile( $dir, "wikicache" ) );
+ if ( !$status->isOK() ) {
+ return $status;
+ }
+
+ # Nuke the unused settings for clarity
+ $this->setVar( 'wgDBserver', '' );
+ $this->setVar( 'wgDBuser', '' );
+ $this->setVar( 'wgDBpassword', '' );
+ $this->setupSchemaVars();
+
+ # Create the global cache DB
+ try {
+ global $wgSQLiteDataDir;
+ # @todo FIXME: setting globals kind of sucks
+ $wgSQLiteDataDir = $dir;
+ $conn = DatabaseBase::factory( 'sqlite', array( 'dbname' => "wikicache" ) );
+ # @todo: don't duplicate objectcache definition, though it's very simple
+ $sql =
+<<<EOT
+ CREATE TABLE IF NOT EXISTS objectcache (
+ keyname BLOB NOT NULL default '' PRIMARY KEY,
+ value BLOB,
+ exptime TEXT
+ )
+EOT;
+ $conn->query( $sql );
+ $conn->query( "CREATE INDEX IF NOT EXISTS exptime ON objectcache (exptime)" );
+ $conn->query( "PRAGMA journal_mode=WAL" ); // this is permanent
+ $conn->close();
+ } catch ( DBConnectionError $e ) {
+ return Status::newFatal( 'config-sqlite-connection-error', $e->getMessage() );
+ }
+
+ # Open the main DB
+ return $this->getConnection();
+ }
+
+ protected function makeStubDBFile( $dir, $db ) {
$file = DatabaseSqlite::generateFileName( $dir, $db );
if ( file_exists( $file ) ) {
if ( !is_writable( $file ) ) {
@@ -236,13 +279,8 @@ class SqliteInstaller extends DatabaseInstaller {
return Status::newFatal( 'config-sqlite-cant-create-db', $file );
}
}
- // nuke the unused settings for clarity
- $this->setVar( 'wgDBserver', '' );
- $this->setVar( 'wgDBuser', '' );
- $this->setVar( 'wgDBpassword', '' );
- $this->setupSchemaVars();
- return $this->getConnection();
+ return Status::newGood();
}
/**
@@ -280,6 +318,16 @@ class SqliteInstaller extends DatabaseInstaller {
$dir = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgSQLiteDataDir' ) );
return "# SQLite-specific settings
-\$wgSQLiteDataDir = \"{$dir}\";";
+\$wgSQLiteDataDir = \"{$dir}\";
+\$wgObjectCaches[CACHE_DB] = array(
+ 'class' => 'SqlBagOStuff',
+ 'loggroup' => 'SQLBagOStuff',
+ 'server' => array(
+ 'type' => 'sqlite',
+ 'dbname' => 'wikicache',
+ 'tablePrefix' => '',
+ 'flags' => 0
+ )
+);";
}
}
diff --git a/includes/installer/SqliteUpdater.php b/includes/installer/SqliteUpdater.php
index ab5ab7d7..2693be0d 100644
--- a/includes/installer/SqliteUpdater.php
+++ b/includes/installer/SqliteUpdater.php
@@ -137,6 +137,12 @@ class SqliteUpdater extends DatabaseUpdater {
array( 'addField', 'pagelinks', 'pl_from_namespace', 'patch-pl_from_namespace.sql' ),
array( 'addField', 'templatelinks', 'tl_from_namespace', 'patch-tl_from_namespace.sql' ),
array( 'addField', 'imagelinks', 'il_from_namespace', 'patch-il_from_namespace.sql' ),
+
+ // 1.25
+ array( 'dropTable', 'hitcounter' ),
+ array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
+ array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
+ array( 'modifyField', 'filearchive', 'fa_deleted_reason', 'patch-editsummary-length.sql' ),
);
}
@@ -168,11 +174,4 @@ class SqliteUpdater extends DatabaseUpdater {
$this->output( "...fulltext search table appears to be in order.\n" );
}
}
-
- protected function doEnableProfiling() {
- global $wgProfileToDatabase;
- if ( $wgProfileToDatabase === true && !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
- $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
- }
- }
}
diff --git a/includes/installer/WebInstaller.php b/includes/installer/WebInstaller.php
index f3dba3a7..156606a6 100644
--- a/includes/installer/WebInstaller.php
+++ b/includes/installer/WebInstaller.php
@@ -1163,6 +1163,25 @@ class WebInstaller extends Installer {
} elseif ( !empty( $_SERVER['SCRIPT_NAME'] ) ) {
$path = $_SERVER['SCRIPT_NAME'];
}
+ if ( $path === false ) {
+ $this->showError( 'config-no-uri' );
+ return false;
+ }
+
+ return parent::envCheckPath();
+ }
+
+ public function envPrepPath() {
+ parent::envPrepPath();
+ // PHP_SELF isn't available sometimes, such as when PHP is CGI but
+ // cgi.fix_pathinfo is disabled. In that case, fall back to SCRIPT_NAME
+ // to get the path to the current script... hopefully it's reliable. SIGH
+ $path = false;
+ if ( !empty( $_SERVER['PHP_SELF'] ) ) {
+ $path = $_SERVER['PHP_SELF'];
+ } elseif ( !empty( $_SERVER['SCRIPT_NAME'] ) ) {
+ $path = $_SERVER['SCRIPT_NAME'];
+ }
if ( $path !== false ) {
$scriptPath = preg_replace( '{^(.*)/(mw-)?config.*$}', '$1', $path );
$scriptExtension = $this->getVar( 'wgScriptExtension' );
@@ -1175,14 +1194,8 @@ class WebInstaller extends Installer {
$this->setVar( 'wgLocalStylePath', "$scriptPath/skins" );
$this->setVar( 'wgExtensionAssetsPath', "$scriptPath/extensions" );
$this->setVar( 'wgUploadPath', "$scriptPath/images" );
-
- } else {
- $this->showError( 'config-no-uri' );
-
- return false;
+ $this->setVar( 'wgResourceBasePath', "$scriptPath" );
}
-
- return parent::envCheckPath();
}
/**
diff --git a/includes/installer/WebInstallerOutput.php b/includes/installer/WebInstallerOutput.php
index 3094d557..0ccdb11a 100644
--- a/includes/installer/WebInstallerOutput.php
+++ b/includes/installer/WebInstallerOutput.php
@@ -133,26 +133,24 @@ class WebInstallerOutput {
'mediawiki.skinning.interface',
);
- if ( file_exists( "$wgStyleDirectory/Vector/Vector.php" ) ) {
+ $resourceLoader = new ResourceLoader();
+
+ if ( file_exists( "$wgStyleDirectory/Vector/skin.json" ) ) {
// Force loading Vector skin if available as a fallback skin
// for whatever ResourceLoader wants to have as the default.
-
- // Include instead of require, as this will work without it, it will just look bad.
- // We need the 'global' statement for $wgResourceModules because the Vector skin adds the
- // definitions for its RL modules there that we use implicitly below.
-
- // @codingStandardsIgnoreStart
- global $wgResourceModules; // This is NOT UNUSED!
- // @codingStandardsIgnoreEnd
-
- include_once "$wgStyleDirectory/Vector/Vector.php";
+ $registry = new ExtensionRegistry();
+ $data = $registry->readFromQueue( array(
+ "$wgStyleDirectory/Vector/skin.json" => 1,
+ ) );
+ if ( isset( $data['globals']['wgResourceModules'] ) ) {
+ $resourceLoader->register( $data['globals']['wgResourceModules'] );
+ }
$moduleNames[] = 'skins.vector.styles';
}
$moduleNames[] = 'mediawiki.legacy.config';
- $resourceLoader = new ResourceLoader();
$rlContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( array(
'debug' => 'true',
'lang' => $this->getLanguageCode(),
@@ -163,6 +161,10 @@ class WebInstallerOutput {
foreach ( $moduleNames as $moduleName ) {
/** @var ResourceLoaderFileModule $module */
$module = $resourceLoader->getModule( $moduleName );
+ if ( !$module ) {
+ // T98043: Don't fatal, but it won't look as pretty.
+ continue;
+ }
// Based on: ResourceLoaderFileModule::getStyles (without the DB query)
$styles = array_merge( $styles, ResourceLoader::makeCombinedStyles(
@@ -227,7 +229,7 @@ class WebInstallerOutput {
public function getHeadAttribs() {
return array(
'dir' => $this->getDir(),
- 'lang' => $this->getLanguageCode(),
+ 'lang' => wfBCP47( $this->getLanguageCode() ),
);
}
@@ -296,11 +298,14 @@ class WebInstallerOutput {
href="https://www.mediawiki.org/"
title="Main Page"></a>
</div>
- <div class="portal"><div class="body">
<?php
- echo $this->parent->parse( wfMessage( 'config-sidebar' )->plain(), true );
+ $message = wfMessage( 'config-sidebar' )->plain();
+ foreach ( explode( '----', $message ) as $section ) {
+ echo '<div class="portal"><div class="body">';
+ echo $this->parent->parse( $section, true );
+ echo '</div></div>';
+ }
?>
- </div></div>
</div>
<?php
diff --git a/includes/installer/WebInstallerPage.php b/includes/installer/WebInstallerPage.php
index 2e31e413..98f3ae8a 100644
--- a/includes/installer/WebInstallerPage.php
+++ b/includes/installer/WebInstallerPage.php
@@ -796,6 +796,9 @@ class WebInstallerName extends WebInstallerPage {
) ) .
$this->parent->getTextBox( array(
'var' => '_AdminEmail',
+ 'attribs' => array(
+ 'dir' => 'ltr',
+ ),
'label' => 'config-admin-email',
'help' => $this->parent->getHelpBox( 'config-admin-email-help' )
) ) .
@@ -1030,14 +1033,15 @@ class WebInstallerOptions extends WebInstallerPage {
$skins = $this->parent->findExtensions( 'skins' );
$skinHtml = $this->getFieldSetStart( 'config-skins' );
- if ( $skins ) {
- $skinNames = array_map( 'strtolower', $skins );
+ $skinNames = array_map( 'strtolower', $skins );
+ $chosenSkinName = $this->getVar( 'wgDefaultSkin', $this->parent->getDefaultSkin( $skinNames ) );
+ if ( $skins ) {
$radioButtons = $this->parent->getRadioElements( array(
'var' => 'wgDefaultSkin',
'itemLabels' => array_fill_keys( $skinNames, 'config-skins-use-as-default' ),
'values' => $skinNames,
- 'value' => $this->getVar( 'wgDefaultSkin', $this->parent->getDefaultSkin( $skinNames ) ),
+ 'value' => $chosenSkinName,
) );
foreach ( $skins as $skin ) {
@@ -1052,7 +1056,9 @@ class WebInstallerOptions extends WebInstallerPage {
'</div>';
}
} else {
- $skinHtml .= $this->parent->getWarningBox( wfMessage( 'config-skins-missing' )->plain() );
+ $skinHtml .=
+ $this->parent->getWarningBox( wfMessage( 'config-skins-missing' )->plain() ) .
+ Html::hidden( 'config_wgDefaultSkin', $chosenSkinName );
}
$skinHtml .= $this->parent->getHelpBox( 'config-skins-help' ) .
@@ -1177,7 +1183,7 @@ class WebInstallerOptions extends WebInstallerPage {
) );
$styleUrl = $server . dirname( dirname( $this->parent->getUrl() ) ) .
'/mw-config/config-cc.css';
- $iframeUrl = 'http://creativecommons.org/license/?' .
+ $iframeUrl = '//creativecommons.org/license/?' .
wfArrayToCgi( array(
'partner' => 'MediaWiki',
'exit_url' => $exitUrl,
@@ -1284,8 +1290,7 @@ class WebInstallerOptions extends WebInstallerPage {
$retVal = true;
- if ( !array_key_exists( $this->getVar( '_RightsProfile' ), $this->parent->rightsProfiles )
- ) {
+ if ( !array_key_exists( $this->getVar( '_RightsProfile' ), $this->parent->rightsProfiles ) ) {
reset( $this->parent->rightsProfiles );
$this->setVar( '_RightsProfile', key( $this->parent->rightsProfiles ) );
}
@@ -1461,7 +1466,7 @@ class WebInstallerComplete extends WebInstallerPage {
strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== false
) {
// JS appears to be the only method that works consistently with IE7+
- $this->addHtml( "\n<script>jQuery( function () { document.location = " .
+ $this->addHtml( "\n<script>jQuery( function () { location.href = " .
Xml::encodeJsVar( $lsUrl ) . "; } );</script>\n" );
} else {
$this->parent->request->response()->header( "Refresh: 0;url=$lsUrl" );
diff --git a/includes/installer/i18n/ar.json b/includes/installer/i18n/ar.json
index 7edb97c4..36136a5e 100644
--- a/includes/installer/i18n/ar.json
+++ b/includes/installer/i18n/ar.json
@@ -47,16 +47,20 @@
"config-restart": "نعم، إعادة التشغيل",
"config-env-php": "بي إتش بي $1 مثبت.",
"config-db-type": "نوع قاعدة البيانات:",
+ "config-db-host": "مضيف قاعدة البيانات:",
"config-db-wiki-settings": "حدِّد هذا الويكي",
"config-db-name": "اسم قاعدة البيانات",
+ "config-db-name-oracle": "سكيما قاعدة البيانات:",
"config-db-username": "اسم مستخدم قاعدة البيانات:",
"config-db-password": "كلمة سر قاعدة البيانات:",
+ "config-db-prefix": "بادئة جدول قاعدة البيانات:",
"config-db-port": "منفذ قاعدة البيانات:",
"config-db-schema": "سكيما لميدياويكي",
- "config-type-mysql": "ماي إس كيو إل",
+ "config-type-mysql": "MySQL (أو متوافق)",
"config-type-postgres": "بوستجر إس كيو إل",
"config-type-sqlite": "إس كيو لايت",
"config-type-oracle": "أوراكل",
+ "config-type-mssql": "خادم SQL لميكروسوفت",
"config-header-mysql": "إعدادات MySQL",
"config-header-postgres": "إعدادات PostgreSQL",
"config-header-sqlite": "إعدادات SQLite",
@@ -109,12 +113,14 @@
"config-install-extensions": "متضمنا الامتدادات",
"config-install-database": "إنشاء قاعدة البيانات",
"config-install-schema": "إنشاء السكيما",
+ "config-install-pg-commit": "تنفيذ التغييرات",
"config-install-user": "إنشاء مستخدم قاعدة البيانات",
"config-install-user-alreadyexists": "المستخدم \"$1\" موجود بالفعل",
"config-install-user-create-failed": "إنشاء مستخدم \"$1\" فشل:$2",
"config-install-tables": "إنشاء الجداول",
"config-install-keys": "توليد المفاتيح السرية",
"config-help": "مساعدة",
+ "config-help-tooltip": "اضغط للتوسيع",
"mainpagetext": "'''تم تثبيت ميدياويكي بنجاح.'''",
"mainpagedocfooter": "استشر [//meta.wikimedia.org/wiki/Help:Contents دليل المستخدم] لمعلومات حول استخدام برنامج الويكي.\n\n== البداية ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings قائمة إعدادات الضبط]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ أسئلة متكررة حول ميدياويكي]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce القائمة البريدية الخاصة بإصدار ميدياويكي]"
}
diff --git a/includes/installer/i18n/ast.json b/includes/installer/i18n/ast.json
index df7184f5..62f0f036 100644
--- a/includes/installer/i18n/ast.json
+++ b/includes/installer/i18n/ast.json
@@ -46,15 +46,18 @@
"config-env-good": "Comprobóse l'entornu.\nPue instalar MediaWiki.",
"config-env-bad": "Comprobóse l'entornu.\nNun pue instalar MediaWiki.",
"config-env-php": "PHP $1 ta instaláu.",
- "config-env-php-toolow": "PHP $1 ta instaláu.\nSicasí, MediaWiki necesita PHP $2 o superior.",
+ "config-env-hhvm": "HHVM $1 ta instaláu.",
"config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber pa la normalización Unicode.",
"config-unicode-using-intl": "Usando la [http://pecl.php.net/intl estensión intl PECL] pa la normalización Unicode.",
"config-unicode-pure-php-warning": "'''Avisu:''' La [http://pecl.php.net/intl estensión intl PECL] nun ta disponible pa xestionar la normalización Unicode; volviendo a la implementación lenta en PHP puru.\nSi xestiona un sitiu con un tráficu altu, tendría de lleer una migaya sobro la [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
"config-unicode-update-warning": "'''Avisu:''' La versión instalada del envoltoriu de normalización Unicode usa una versión antigua de la biblioteca [http://site.icu-project.org/ de los proyeutos ICU].\nTendría [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations d'anovala] si ye importante pa vusté usar Unicode.",
- "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesita instalar un controlador de base de datos pa PHP.\nTienen sofitu los tipos de base de datos siguientes: $1.\n\nSi compiló PHP vusté mesmu, reconfigúrelu con un cliente de base de datos activáu, por exemplu, usando <code>./configure --with-mysqli</code>.\nSi instaló PHP dende un paquete de Debian o Ubuntu, necesita instalar tamién,por exemplu, el paquete <code>php5-mysql</code>.",
+ "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesites instalar un controlador de base de datos pa PHP.\n{{PLURAL:$2|Tien sofitu el tipu de base de datos siguiente|Tienen sofitu los tipos de base de datos siguientes}}: $1.\n\nSi compilasti PHP tu mesmu, reconfigúralu con un cliente de base de datos activáu, por exemplu, usando <code>./configure --with-mysqli</code>.\nSi instalasti PHP dende un paquete de Debian o Ubuntu, necesites instalar tamién,por exemplu, el paquete <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Avisu:''' tien SQLite $1, que ye inferior a la versión mínima necesaria $2. SQLite nun tará disponible.",
"config-no-fts3": "'''Avisu:''' SQLite ta compiláu ensin el [//sqlite.org/fts3.html módulu FTS3]; les funciones de gueta nun tarán disponibles nesti sistema.",
- "config-register-globals": "'''Avisu: La opción de PHP <code>[http://php.net/register_globals register_globals]</code> ta activada.'''\n'''Desactívela si ye posible.'''\nMediaWiki funcionará, pero'l so sirvidor queda albentestate ente posibles vulnerabilidaes de seguridá.",
+ "config-register-globals-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> ta activada.\nTien de desactivase pa siguir cola instalación.</strong>\nVisita [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] p'alcontrar ayuda tocante a cómo facelo.",
+ "config-diff3-bad": "Nun s'alcontró GNU diff3.",
+ "config-git": "Alcontróse'l software de control de versiones Git: <code>$1</code>.",
+ "config-git-bad": "Nun s'alcontró el software de control de versiones Git.",
"config-site-name": "Nome de la wiki:",
"config-site-name-help": "Esto apaecerá na barra de títulos del navegador y en dellos sitios más.",
"config-site-name-blank": "Escriba un nome pal sitiu.",
diff --git a/includes/installer/i18n/av.json b/includes/installer/i18n/av.json
index 0ce76fa0..3568258e 100644
--- a/includes/installer/i18n/av.json
+++ b/includes/installer/i18n/av.json
@@ -4,5 +4,8 @@
"Gazimagomedov"
]
},
- "config-page-options": "Рекъезаби"
+ "config-page-welcome": "ЛъикI щварал МедиаВикиялда!",
+ "config-page-name": "ЦӀар",
+ "config-page-options": "Рекъезаби",
+ "config-page-complete": "ЛъугӀана!"
}
diff --git a/includes/installer/i18n/az.json b/includes/installer/i18n/az.json
index 8688fe4e..8fda8d4d 100644
--- a/includes/installer/i18n/az.json
+++ b/includes/installer/i18n/az.json
@@ -23,7 +23,7 @@
"config-mysql-myisam": "MyISAM",
"config-mysql-utf8": "UTF-8",
"config-ns-generic": "Layihə",
- "config-admin-name": "Sizin adınız:",
+ "config-admin-name": "Sizin istifadəçi adınız:",
"config-admin-password": "Parol:",
"config-admin-email": "E-poçt ünvanı",
"config-license-pd": "İctimai istifadə",
diff --git a/includes/installer/i18n/ba.json b/includes/installer/i18n/ba.json
index cca993ae..e3838e3d 100644
--- a/includes/installer/i18n/ba.json
+++ b/includes/installer/i18n/ba.json
@@ -2,9 +2,28 @@
"@metadata": {
"authors": [
"Haqmar",
- "Seb35"
+ "Seb35",
+ "Рустам Нурыев"
]
},
+ "config-desc": "MediaWiki йөкләүсе",
+ "config-title": "MediaWiki $1 йөкләмеше",
+ "config-information": "Мәғлүмәт",
+ "config-localsettings-key": "Яңыртыу асҡысы:",
+ "config-localsettings-badkey": "Дөрөҫ булмаған асҡыс күрһәттегеҙ",
+ "config-your-language": "Һеҙҙең тел:",
+ "config-back": "← Кире",
+ "config-continue": "Дауам итергә →",
+ "config-page-language": "Тел",
+ "config-page-welcome": "MediaWiki-ға рәхим итегеҙ!",
+ "config-page-name": "Исем",
+ "config-page-options": "Көйләүҙәр",
+ "config-page-complete": "Тамам!",
+ "config-page-readme": "Мине уҡы",
+ "config-page-releasenotes": "Өлгө тураһында мәғлүмәт",
+ "config-page-copying": "Рөхсәтнәмә",
+ "config-page-upgradedoc": "Яңыртыу",
+ "config-restart": "Эйе, яңынан башларға",
"mainpagetext": "«MediaWiki» уңышлы рәүештә ҡоролдо.",
"mainpagedocfooter": "Был вики менән эшләү тураһында мәғлүмәтте [//meta.wikimedia.org/wiki/Help:Contents ошонда] табып була.\n\n== Файҙалы сығанаҡтар ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Көйләүҙәр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki тураһында йыш бирелгән һорауҙар һәм яуаптар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-ның яңы версиялары тураһында хәбәрҙәр алып тороу].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
}
diff --git a/includes/installer/i18n/be-tarask.json b/includes/installer/i18n/be-tarask.json
index 0aeae7fc..c131a781 100644
--- a/includes/installer/i18n/be-tarask.json
+++ b/includes/installer/i18n/be-tarask.json
@@ -56,7 +56,7 @@
"config-unicode-using-intl": "Выкарыстоўваецца [http://pecl.php.net/intl intl пашырэньне з PECL] для Unicode-нармалізацыі",
"config-unicode-pure-php-warning": "'''Папярэджаньне''': [http://pecl.php.net/intl Пашырэньне intl з PECL] — ня слушнае для Unicode-нармалізацыі, цяпер выкарыстоўваецца марудная PHP-рэалізацыя.\nКалі ў Вас сайт з высокай наведваемасьцю, раім пачытаць пра [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-нармалізацыю].",
"config-unicode-update-warning": "'''Папярэджаньне''': усталяваная вэрсія бібліятэкі для Unicode-нармалізацыі выкарыстоўвае састарэлую вэрсію бібліятэкі з [http://site.icu-project.org/ праекту ICU].\nРаім [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations абнавіць], калі ваш сайт будзе працаваць зь Unicode.",
- "config-no-db": "Немагчыма знайсьці адпаведны драйвэр базы зьвестак. Вам неабходна ўсталяваць драйвэр базы зьвестак для PHP.\nПадтрымліваюцца наступныя тыпы базаў зьвестак: $1.\n\nКалі вы скампілявалі PHP самастойна, зьмяніце канфігурацыю, каб уключыць кліента базы зьвестак, напрыклад, з дапамогай <code>./configure --with-mysqli</code>.\nКалі вы ўсталявалі PHP з пакунку Debian або Ubuntu, тады вам трэба таксама ўсталяваць, напрыклад, пакунак <code>php5-mysql</code>.",
+ "config-no-db": "Немагчыма знайсьці адпаведны драйвэр базы зьвестак. Вам неабходна ўсталяваць драйвэр базы зьвестак для PHP.\n{{PLURAL:$2|Падтрымліваецца наступны тып базы|Падтрымліваюцца наступныя тыпы базаў}} зьвестак: $1.\n\nКалі вы скампілявалі PHP самастойна, зьмяніце канфігурацыю, каб уключыць кліента базы зьвестак, напрыклад, з дапамогай <code>./configure --with-mysqli</code>.\nКалі вы ўсталявалі PHP з пакунку Debian або Ubuntu, тады вам трэба дадаткова ўсталяваць, напрыклад, пакунак <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Папярэджаньне''': усталяваны SQLite $1, у той час, калі мінімальная сумяшчальная вэрсія — $2. SQLite ня будзе даступны.",
"config-no-fts3": "'''Папярэджаньне''': SQLite створаны без модуля [//sqlite.org/fts3.html FTS3], для гэтага ўнутранага інтэрфэйсу ня будзе даступная магчымасьць пошуку.",
"config-register-globals-error": "<strong>Памылка: парамэтар PHP <code>[http://php.net/register_globals register_globals]</code> уключаны.\nЁн павінен быць адключаны, каб працягнуць усталяваньне.</strong>\nГлядзіце [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] дзеля дапамогі, як зрабіць гэта.",
diff --git a/includes/installer/i18n/bg.json b/includes/installer/i18n/bg.json
index 32e4c397..51fe74f5 100644
--- a/includes/installer/i18n/bg.json
+++ b/includes/installer/i18n/bg.json
@@ -3,7 +3,8 @@
"authors": [
"DCLXVI",
"아라",
- "StanProg"
+ "StanProg",
+ "Vodnokon4e"
]
},
"config-desc": "Инсталатор на МедияУики",
@@ -48,11 +49,12 @@
"config-env-good": "Средата беше проверена.\nИнсталирането на МедияУики е възможно.",
"config-env-bad": "Средата беше проверена.\nНе е възможна инсталация на МедияУики.",
"config-env-php": "Инсталирана е версия на PHP $1.",
+ "config-env-hhvm": "HHVM $1 е инсталиран.",
"config-unicode-using-utf8": "Използване на utf8_normalize.so от Brion Vibber за нормализация на Уникод.",
"config-unicode-using-intl": "Използване на разширението [http://pecl.php.net/intl intl PECL] за нормализация на Уникод.",
"config-unicode-pure-php-warning": "'''Предупреждение''': [http://pecl.php.net/intl Разширението intl PECL] не е налично за справяне с нормализацията на Уникод, превключване към по-бавното изпълнение на чист PHP.\nАко сайтът е с голям трафик, препоръчително е запознаването с [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализацията на Уникод].",
"config-unicode-update-warning": "'''Предупреждение''': Инсталираната версия на Обвивката за нормализация на Unicode използва по-старата версия на библиотеката на [http://site.icu-project.org/ проекта ICU].\nНеобходимо е да [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations инсталирате по-нова верия], в случай че сте загрижени за използването на Unicode.",
- "config-no-db": "Не може да бъде открит подходящ драйвер за база от данни! Необходимо е да се инсталира драйвер за база от данни за PHP.\nПоддържат се следните типове базни от данни: $1.\n\nАко използвате споделен хостинг, помолете доставчика на услугата да инсталира подходящ драйвер за база от данни.\nАко сами сте компилирали PHP, преконфигурирайте го с включен клиент за база от данни, например чрез използване на <code>./configure --with-mysql</code>.\nАко сте инсталирали PHP от пакет за Debian или Убунту, необходимо е, също така, да инсталирате и модула php5-mysql.",
+ "config-no-db": "Не може да бъде открит подходящ драйвер за база данни! Необходимо е да инсталирате драйвер за база данни за PHP.\nПоддържат се следните типове базни данни: $1.\n\nАко сами сте компилирали PHP, преконфигурирайте го с включен клиент за база данни, например чрез използване на <code>./configure --with-mysql</code>.\nАко сте инсталирали PHP от пакет за Debian или Ubuntu, необходимо е също така да инсталирате и модула <code>php5-mysql</code>.",
"config-outdated-sqlite": "<strong>Предупреждение:</strong> имате инсталиран SQLite $1, а минималната допустима версия е $2. SQLite ще бъде недостъпна за ползване.",
"config-no-fts3": "'''Предупреждение''': SQLite е компилирана без [//sqlite.org/fts3.html модула FTS3], затова възможностите за търсене няма да са достъпни.",
"config-magic-quotes-runtime": "'''Фатално: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] е активирана!'''\nТова може да повреди непредвидимо въвеждането на данните.\nИнсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.",
@@ -69,6 +71,7 @@
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] е инсталиран",
"config-no-cache": "'''Предупреждение:''' Не бяха открити [http://www.php.net/apc APC] [http://xcache.lighttpd.net/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache].\nОбектното кеширане не е включено.",
"config-diff3-bad": "GNU diff3 не беше намерен.",
+ "config-git-bad": "Не е намерен софтуер за контрол на версиите Git.",
"config-imagemagick": "Открит е ImageMagick: <code>$1</code>.\nПреоразмеряването на картинки ще бъде включено ако качването на файлове бъде разрешено.",
"config-gd": "Открита е вградена графичната библиотека GD.\nАко качването на файлове бъде включено, ще бъде включена възможността за преоразмеряване на картинки.",
"config-no-scaling": "Не са открити библиотеките GD или ImageMagick.\nПреоразмеряването на картинки ще бъде изключено.",
@@ -207,7 +210,7 @@
"config-license-gfdl": "Лиценз за свободна документация на GNU 1.3 или по-нов",
"config-license-pd": "Обществено достояние",
"config-license-cc-choose": "Избиране на друг лиценз от Криейтив Комънс",
- "config-license-help": "Много публични уикита поставят всички приноси под [http://freedomdefined.org/Definition/Bg свободен лиценз].\nТова помага създаване на усещане за общност и насърчава дългосрочните приноси.\nТова не е необходимо за частни или корпоративни уикита.\n\nАко е необходимо да се използват текстове от Уикипедия, както и Уикипедия да може да използва текстове от уикито, необходимо е да се избере лиценз '''Криейтив Комънс Признание-Споделяне на споделеното'''.\n\nЛицензът за свободна документация на GNU е старият лиценз на съдържанието на Уикипедия.\nТой все още е валиден лиценз, но някои негови условия са трудни за разбиране и правят по-сложни повторното използване и интерпретацията.",
+ "config-license-help": "Много публични уикита поставят всички приноси под [http://freedomdefined.org/Definition/Bg свободен лиценз].\nТова помага за създаването на усещане за общност и насърчава дългосрочните приноси. \nТова не е необходимо като цяло за частно или корпоративно уики.\n\nАко искате да използвате текстове от Уикипедия, и искате Уикипедия да може да приема текстове, копирани от вашето уики, трябва да изберете лиценз <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nЛицензът за свободна документация на GNU е старият лиценз на съдържанието на Уикипедия.\nТой все още е валиден лиценз, но някои негови условия са трудни за разбиране и правят по-сложни повторното използване и интерпретацията.",
"config-email-settings": "Настройки за е-поща",
"config-enable-email": "Разрешаване на изходящи е-писма",
"config-enable-email-help": "За да работят възможностите за използване на е-поща, необходимо е [http://www.php.net/manual/en/mail.configuration.php настройките за поща на PHP] да бъдат конфигурирани правилно.\nАко няма да се използват услугите за е-поща в уикито, те могат да бъдат изключени тук.",
@@ -248,6 +251,8 @@
"config-extensions": "Разширения",
"config-extensions-help": "Разширенията от списъка по-горе бяха открити в директорията <code>./extensions</code>.\n\nВъзможно е те да изискват допълнително конфигуриране, но сега могат да бъдат включени.",
"config-skins": "Облици",
+ "config-skins-help": "По-горе са посочени облиците, които са открити във вашата директория <code>./skins</code>. Необходимо е да изберете поне един, който да се използва по подразбиране.",
+ "config-skins-use-as-default": "Използване на този облик по подразбиране",
"config-install-alreadydone": "'''Предупреждение:''' Изглежда вече сте инсталирали МедияУики и се опитвате да го инсталирате отново.\nПродължете към следващата страница.",
"config-install-begin": "Инсталацията на МедияУики ще започне след натискане на бутона „{{int:config-continue}}“.\nВ случай, че е необходимо да се направят промени, използва се бутона „{{int:config-back}}“.",
"config-install-step-done": "готово",
diff --git a/includes/installer/i18n/bgn.json b/includes/installer/i18n/bgn.json
new file mode 100644
index 00000000..196f1c47
--- /dev/null
+++ b/includes/installer/i18n/bgn.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan",
+ "Ibrahim khashrowdi"
+ ]
+ },
+ "config-your-language": "شمی زبان:",
+ "config-your-language-help": "یک زبانی ئا په ایستیپاده ئی خاتیرا انتخاب بکنیت.",
+ "config-wiki-language": "ویکی ئی زبان:",
+ "config-wiki-language-help": "زبانی ئا انتخاب کنیت که گیشتیر ویکی بئ آیی تا نیویشته ئه به ینت.",
+ "config-back": "→ بیئرگشت",
+ "config-continue": "دیم ره وگ ←",
+ "config-page-language": "زبان",
+ "config-page-welcome": "بئ میڈیاویکی ئا وش آتیت!",
+ "config-page-dbconnect": "وسل بوتین بئ مالوماتین بانکا",
+ "config-page-dbsettings": "مالوماتی بانکی تنزیمات",
+ "config-page-name": "نام",
+ "config-page-options": "تنزیمات",
+ "config-page-install": "لچینتین",
+ "config-page-complete": "کامل!",
+ "config-sidebar": "* [//www.mediawiki.org میڈیاویکی ئی بُنیادین تاکدیم]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents کار زوروکانی کومک و رهنمایی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents مدیر ئی رهنمایی]\n* [//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": "محیط بررسی بوته.\nشما ئه توانیت میڈیاویکی ئا نصب کنیت.",
+ "config-ns-generic": "پروژه",
+ "config-ns-other-default": "نی ویکی"
+}
diff --git a/includes/installer/i18n/bn.json b/includes/installer/i18n/bn.json
index 212c5995..0aecb705 100644
--- a/includes/installer/i18n/bn.json
+++ b/includes/installer/i18n/bn.json
@@ -4,7 +4,8 @@
"Bellayet",
"Wikitanvir",
"Aftab1995",
- "Tauhid16"
+ "Tauhid16",
+ "Aftabuzzaman"
]
},
"config-desc": "মিডিয়াউইকির জন্য ইন্সটলার",
@@ -46,7 +47,7 @@
"config-db-name": "উপাত্তসংগ্রহশালা নামঃ",
"config-db-install-account": "ইন্সটলের জন্য ব্যবহারকারী অ্যাকাউন্ট",
"config-db-username": "ডেটাবেজের ব্যবহারকারী নাম:",
- "config-db-password": "ডেটাবেজের শব্দচাবি:",
+ "config-db-password": "ডেটাবেজের পাসওয়ার্ড:",
"config-db-username-empty": "আপনাকে অবশ্যই \"{{int:config-db-username}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
"config-db-wiki-account": "সাধারণ অভিযানের জন্য ব্যবহারকারী একাউন্ট",
"config-db-prefix": "উপাত্তশালা ছক প্রিফিক্স:",
@@ -66,7 +67,7 @@
"config-missing-db-name": "আপনাকে অবশ্যই \"{{int:config-db-name}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
"config-missing-db-host": "আপনাকে অবশ্যই \"{{int:config-db-host}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
"config-missing-db-server-oracle": "আপনাকে অবশ্যই \"{{int:config-db-host-oracle}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
- "config-connection-error": "$1।\n\n\nদয়া করে প্রস্তাবকারী, ব্যবহারকারী নাম ও শব্দচাবি দেখুন এবং পুনরায় চেষ্টা করুন।",
+ "config-connection-error": "$1।\n\n\nদয়া করে প্রস্তাবকারী, ব্যবহারকারী নাম ও পাসওয়ার্ড দেখুন এবং পুনরায় চেষ্টা করুন।",
"config-mysql-engine": "সংরক্ষণ ইঞ্জিন:",
"config-mysql-innodb": "ইনোডিবি",
"config-mysql-myisam": "মাইআইএসএএম",
@@ -83,11 +84,11 @@
"config-ns-other-default": "মাইউইকি",
"config-admin-box": "প্রশাসক অ্যাকাউন্ট",
"config-admin-name": "আপনার ব্যবহারকারী নাম:",
- "config-admin-password": "শব্দচাবি:",
- "config-admin-password-confirm": "শব্দচাবি আবারও প্রবেশ করান:",
+ "config-admin-password": "পাসওয়ার্ড:",
+ "config-admin-password-confirm": "পাসওয়ার্ড আবারও প্রবেশ করান:",
"config-admin-name-blank": "একটি প্রশাসক ব্যবহারকারী নাম প্রবেশ করান",
"config-admin-password-blank": "প্রশাসক অ্যাকাউন্টের জন্য পাসওয়ার্ড প্রবেশ করান।",
- "config-admin-password-mismatch": "আপনি যে দুটি শব্দচাবি দিয়েছেন তারা পরস্পর মেলেনি।",
+ "config-admin-password-mismatch": "আপনি যে দুটি পাসওয়ার্ড দিয়েছেন তারা পরস্পর মেলেনি।",
"config-admin-email": "ইমেইল ঠিকানা:",
"config-optional-continue": "আরও প্রশ্ন জিজ্ঞেস করুন।",
"config-optional-skip": "আমি ইতিমধ্যেই বিরক্ত হয়ে গেছি, উইকিটি ইন্সটল করো।",
diff --git a/includes/installer/i18n/bs.json b/includes/installer/i18n/bs.json
index 28b14fae..668fbff7 100644
--- a/includes/installer/i18n/bs.json
+++ b/includes/installer/i18n/bs.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "CERminator"
+ "CERminator",
+ "Palapa"
]
},
"config-desc": "Instalacija za MediaWiki",
@@ -9,6 +10,7 @@
"config-information": "Informacija",
"config-localsettings-upgrade": "Otkrivena je datoteka <code>LocalSettings.php</code>.\nDa biste unaprijedili vaš softver, molimo vas upišite vrijednost od <code>$wgUpgradeKey</code> u okvir ispod.\nNaći ćete ga u <code>LocalSettings.php</code>.",
"config-localsettings-key": "Ključ za nadgradnju:",
+ "config-localsettings-badkey": "Ključ koji ste dali je pogrešan.",
"config-session-error": "Greška pri pokretanju sesije: $1",
"config-no-session": "Vaši podaci sesije su izgubljeni!\nProvjerite vaš php.ini i provjerite da li je <code>session.save_path</code> postavljen na pravilni direktorijum.",
"config-your-language": "Vaš jezik:",
@@ -31,12 +33,14 @@
"config-page-releasenotes": "Bilješke izdanja",
"config-page-copying": "Kopiram",
"config-page-upgradedoc": "Nadograđujem",
+ "config-page-existingwiki": "Postojeća wiki",
"config-help-restart": "Da li želite očistiti sve spremljene podatke koje ste unijeli i da započnete ponovo proces instalacije?",
"config-restart": "Da, pokreni ponovo",
"config-sidebar": "* [//www.mediawiki.org MediaWiki Početna strana]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Vodič za korisnike]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Vodič za administratore]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ NPP]\n----\n* <doclink href=Readme>Pročitaj me</doclink>\n* <doclink href=ReleaseNotes>Napomene izdanja</doclink>\n* <doclink href=Copying>Kopiranje</doclink>\n* <doclink href=UpgradeDoc>Poboljšavanje</doclink>",
"config-env-good": "Okruženje je provjereno.\nMožete instalirati MediaWiki.",
"config-env-php": "PHP $1 je instaliran.",
- "config-no-db": "Nije mogao biti pronađen pogodan driver za bazu podataka! Morate instalirati driver baze podataka za PHP.\nSlijedeće vrste baza podataka su podržane: $1.\n\nAko se na dijeljenom serveru, tražite od vašeg pružaoca usluga da instalira pogodan driver za bazu podataka.\nAko se sami kompajlirali PHP, podesite ga sa omogućenim klijentom baze podataka, koristeći naprimjer <code>./configure --with-mysql</code>.\nAko ste instalirali PHP iz Debian ili Ubuntu paketa, možda morate instalirati i modul php5-mysql.",
+ "config-env-hhvm": "HHVM $1 je instaliran.",
+ "config-no-db": "Nije mogao biti pronađen pogodan driver za bazu podataka! Morate instalirati driver baze podataka za PHP.\nSljedeće vrste baza podataka su podržane: $1.\n\nAko se sami kompajlirali PHP, podesite ga sa omogućenim klijentom baze podataka, koristeći naprimjer, <code>./configure --with-mysqli</code>.\nAko ste instalirali PHP iz Debian ili Ubuntu paketa, tada morate instalirati, naprimjer, i paket <code>php5-mysql</code>.",
"config-xcache": "[http://xcache.lighttpd.net/ XCache] je instaliran",
"config-apc": "[http://www.php.net/apc APC] je instaliran",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je instaliran",
@@ -46,14 +50,37 @@
"config-db-wiki-settings": "Identificiraj ovu wiki",
"config-db-name": "Naziv baze podataka:",
"config-db-name-oracle": "Šema baze podataka:",
+ "config-db-username": "Korisničko ime baze podataka:",
+ "config-db-password": "Pasvord baze podataka:",
+ "config-db-port": "Port baze podataka:",
"config-header-mysql": "Postavke MySQL",
"config-header-postgres": "Postavke PostgreSQL",
"config-header-sqlite": "Postavke SQLite",
"config-header-oracle": "Postavke Oracle",
+ "config-header-mssql": "Postavke za Microsoft SQL Server",
"config-invalid-db-type": "Nevaljana vrsta baze podataka",
+ "config-missing-db-name": "Morate unijeti vrijednost za \"{{int:config-db-name}}\".",
"config-upgrade-done": "Nadogradnja završena.\n\nSada možete [$1 početi koristiti vašu wiki].\n\nAko želite regenerisati vašu datoteku <code>LocalSettings.php</code>, kliknite na dugme ispod.\nOvo '''nije preporučeno''' osim ako nemate problema s vašom wiki.",
- "config-admin-name": "Vaše ime:",
+ "config-mysql-innodb": "InnoDB",
+ "config-mysql-myisam": "MyISAM",
+ "config-mysql-binary": "Binarni",
+ "config-site-name": "Ime wiki:",
+ "config-ns-other-default": "MyWiki",
+ "config-admin-name": "Vaše korisničko ime:",
"config-admin-password": "Šifra:",
+ "config-admin-password-confirm": "Ponovno unesite pasvord:",
+ "config-admin-email": "E-mail adresa:",
+ "config-profile-wiki": "Otvori wiki",
+ "config-profile-private": "Privatna wiki",
+ "config-license-pd": "Javno vlasništvo",
+ "config-logo": "Logo URL:",
+ "config-cc-again": "Odaberi ponovno...",
+ "config-install-step-done": "završeno",
+ "config-install-step-failed": "neuspješno",
+ "config-install-extensions": "Uključujući ekstenzije",
+ "config-install-tables": "Kreiranje tabela",
+ "config-help": "pomoć",
+ "config-help-tooltip": "klikni za proširenje",
"mainpagetext": "'''MediaViki softver is uspješno instaliran.'''",
"mainpagedocfooter": "Kontaktirajte [//meta.wikimedia.org/wiki/Help:Contents uputstva za korisnike] za informacije o upotrebi wiki programa.\n\n== Početak ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista postavki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki najčešće postavljana pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista E-Mail adresa MediaWiki]"
}
diff --git a/includes/installer/i18n/ca.json b/includes/installer/i18n/ca.json
index 3f1fcfc0..6d28a582 100644
--- a/includes/installer/i18n/ca.json
+++ b/includes/installer/i18n/ca.json
@@ -5,7 +5,11 @@
"පසිඳු කාවින්ද",
"Kippelboy",
"Toniher",
- "Fitoschido"
+ "Fitoschido",
+ "Jmarchn",
+ "Alvaro Vidal-Abarca",
+ "ESM",
+ "Xavier Dengra"
]
},
"config-desc": "L'instal·lador del MediaWiki",
@@ -19,6 +23,8 @@
"config-localsettings-incomplete": "El <code>LocalSettings.php</code> que hi ha sembla incomplet.\nLa variable $1 no està definida.\nCanvieu <code>LocalSettings.php</code> perquè la variable estigui definida i feu clic a «{{int:Config-continue}}».",
"config-localsettings-connection-error": "S'ha trobat un error en connectar-se amb la base de dades fent servir els paràmetres especificats a <code>LocalSettings.php</code>. Corregiu aquests paràmetres i torneu-ho a provar.\n\n$1",
"config-session-error": "Error en iniciar la sessió: $1",
+ "config-session-expired": "Les dades de la vostra sessió sembla que han caducat.\nLes sessions estan configurades per a un temps de $1.\nPodeu augmentar-lo posant <code>session.gc_maxlifetime</code> en php.ini.\nReprengueu el procés d'instal·lació.",
+ "config-no-session": "Les dades de la vostra sessió s'han perdut!\nComprovar el vostre php.ini i assegureu-vos que <code>session.save_path</code> està assignat a un directori apropiat.",
"config-your-language": "La vostra llengua:",
"config-your-language-help": "Seleccioneu la llengua que s'utilitzarà durant el procés d'instal·lació.",
"config-wiki-language": "Llengua del wiki:",
@@ -43,12 +49,18 @@
"config-help-restart": "Voleu esborrar totes les dades que heu introduït i tornar a començar el procés d'instal·lació?",
"config-restart": "Sí, torna a començar",
"config-welcome": "=== Comprovacions de l'entorn ===\nS'efectuaran comprovacions bàsiques per veure si l'entorn és adequat per a la instal·lació del MediaWiki.\nRecordeu d'incloure aquesta informació si heu de demanar ajuda sobre com completar la instal·lació.",
+ "config-copyright": "=== Drets d'autor i condicions ===\n\n$1\n\nAquest programa és de programari lliure; podeu redistribuir-lo i/o modificar-lo sota les condicions de la Llicència Pública General GNU com es publicada per la Free Software Foundation; qualsevol versió 2 de la llicència, o (opcionalment) qualsevol versió posterior.\n\nAquest programa és distribueix amb l'esperança que serà útil, però <strong>sense cap garantia</strong>; sense ni tan sols la garantia implícita de <strong>\ncomerciabilitat</strong> o <strong>idoneïtat per a un propòsit particular</strong>.\nConsulteu la Llicència Pública General GNU, per a més detalls.\n\nHauríeu d'haver rebut <doclink href=\"Copying\">una còpia de la Llicència Pública General GNU</doclink> amb aquest programa; si no, escriviu a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA o [http://www.gnu.org/copyleft/gpl.html per llegir-lo en línia].",
+ "config-sidebar": "* [//www.mediawiki.org la Pàgina d'inici]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guia de l'Usuari]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guia de l'Administrador]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Llegeix-me</doclink>\n* <doclink href=ReleaseNotes>Notes de la versió</doclink>\n* <doclink href=Còpia>Còpia</doclink>\n* <doclink href=UpgradeDoc>Actualització</doclink>",
"config-env-good": "S'ha comprovat l'entorn.\nPodeu instal·lar el MediaWiki.",
"config-env-bad": "S'ha comprovat l'entorn.\nNo podeu instal·lar el MediaWiki.",
"config-env-php": "El PHP $1 està instal·lat.",
+ "config-env-hhvm": "L’HHVM $1 és instal·lat.",
+ "config-unicode-using-intl": "S'utilitza l'[http://pecl.php.net/intl extensió intl PECL] per a la normalització de l'Unicode.",
"config-memory-raised": "El <code>memory_limit</code> del PHP és $1 i s'ha aixecat a $2.",
"config-memory-bad": "<strong>Avís:</strong> El <code>memory_limit</code> del PHP és $1.\nAixò és probablement massa baix.\nLa instal·lació pot fallar!",
+ "config-xcache": "[http://xcache.lighttpd.net/ XCache] està instal·lat",
"config-apc": "L’[http://www.php.net/apc APC] està instal·lat",
+ "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] està instal·lat",
"config-diff3-bad": "No s'ha trobat el GNU diff3.",
"config-git": "S'ha trobat el programari de control de versions Git: <code>$1</code>.",
"config-git-bad": "No s'ha trobat el programari de control de versions Git.",
@@ -60,6 +72,7 @@
"config-uploads-not-safe": "<strong>Avís:</strong> El directori de càrregues per defecte <code>$1</code> és vulnerable a l'execució d'scripts arbitraris.\nEncara que el MediaWiki comprova tots els fitxers que es carreguen davant d'amenaces de seguretat, és molt recomanable [//www.mediawiki.org/ wiki/Special:MyLanguage/Manual:Security#Upload_security tancar aquesta vulnerabilitat de seguretat] abans d'habilitar les càrregues.",
"config-db-type": "Tipus de base de dades:",
"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-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.",
@@ -67,7 +80,11 @@
"config-db-install-account": "Compte d'usuari per a la instal·lació",
"config-db-username": "Nom d'usuari de la base de dades:",
"config-db-password": "Contrasenya de la base de dades:",
+ "config-db-password-empty": "Si us plau, introduïu una contrasenya pel nou usuari de la base de dades $1. Tot i que es poden crear usuaris sense contrasenyes, no és segur.",
"config-db-username-empty": "Heu d'introduir un valor per a «{{int:config-db-username}}»",
+ "config-db-install-username": "Introduïu el nom d'usuari que s'utilitzarà per connectar a la base de dades durant el procés d'instal·lació. Aquest no és el nom d'usuari de MediaWiki, és el nom d'usuari de la vostra base de dades.",
+ "config-db-install-password": "Introduïu la contrasenya que s'utilitzarà per connectar a la base de dades durant el procés d'instal·lació. Aquesta no és la contrasenya del vostre compte a MediaWiki, és la contrasenya de la vostra base de dades.",
+ "config-db-install-help": "Introduïu el nom d'usuari i la contrasenya que s'empraran per connectar a la base de dades durant el procés d'instal·lació.",
"config-db-account-lock": "Utilitzeu el mateix nom d'usuari i contrasenya durant una operació normal",
"config-db-wiki-account": "Compte d'usuari per al funcionament normal",
"config-db-wiki-help": "Introduïu el nom d'usuari i la contrasenya que s'utilitzarà per connectar-se a la base de dades durant l'operació normal del wiki.\nSi el compte no existeix, i el compte d'instal·lació té prou privilegis, es crearà aquest compte d'usuari amb els privilegis mínims necessaris per operar el wiki.",
@@ -76,6 +93,7 @@
"config-db-charset": "Joc de caràcters de la base de dades",
"config-charset-mysql5-binary": "Binari de MySQL 4.1/5.0",
"config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+ "config-charset-mysql4": "MySQL 4.0 compatible cap enrere amb UTF-8",
"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:",
@@ -86,6 +104,7 @@
"config-oracle-temp-ts": "Espai de taules temporal:",
"config-type-mysql": "MySQL (o compatible)",
"config-type-mssql": "Microsoft SQL Server",
+ "config-support-info": "MediaWiki és compatible amb els següents sistemes de bases de dades:\n$1\nSi el sistema de bases de dades que intenteu utilitzar no apareix a la llista, seguiu les instruccions enllaçades més amunt per habilitar el suport.",
"config-header-mysql": "Paràmetres de MySQL",
"config-header-postgres": "Paràmetres del PostgreSQL",
"config-header-sqlite": "Paràmetres de l'SQLite",
@@ -95,13 +114,21 @@
"config-missing-db-name": "Heu d'introduir un valor per a «{{int:config-db-name}}».",
"config-missing-db-host": "Heu d'introduir un valor per a «{{int:config-db-host}}».",
"config-missing-db-server-oracle": "Heu d’introduir un valor per a «{{int:config-db-host-oracle}}».",
+ "config-connection-error": "$1.\n\nComproveu el servidor central, el nom d'usuari i la contrasenya i torneu-ho a provar.",
+ "config-db-sys-create-oracle": "L'instal·lador només accepta emprar un compte SYSDBA per a la creació d'un nou compte.",
"config-db-sys-user-exists-oracle": "El compte d’usuari «$1» ja existeix. SYSDBA només es pot fer servir per crear comptes nous.",
+ "config-postgres-old": "Cal el PostgreSQL $1 o posterior. Teniu el $2.",
+ "config-mssql-old": "Cal utilitzar el Microsoft SQL Server $1 o posterior. Teniu la versió $2.",
+ "config-sqlite-mkdir-error": "S'ha produït un error en crear el directori de dades «$1».\nComproveu la ubicació i torneu-ho a provar.",
+ "config-sqlite-dir-unwritable": "No s'ha pogut escriure al directori «$1».\nCanvieu els seus permisos per tal que el servidor web pugui escriure-hi i torneu-ho a provar.",
+ "config-sqlite-connection-error": "$1. \n\nComproveu el directori de dades i el nom de la base de dades a continuació i torneu-ho a provar.",
"config-sqlite-readonly": "El fitxer <code>$1</code> no es pot escriure.",
"config-sqlite-cant-create-db": "No s'ha pogut crear el fitxer de base de dades <code>$1</code>.",
"config-upgrade-done-no-regenerate": "S'ha completat l'actualització.\n\nJa podeu [$1 començar a utilitzar el wiki].",
"config-regenerate": "Torna a generar el LocalSettings.php →",
"config-show-table-status": "La consulta <code>SHOW TABLE STATUS</code> ha fallat!",
"config-db-web-account": "Compte de la base de dades per a l'accés web",
+ "config-db-web-help": "Seleccioneu el nom d'usuari i la contrasenya que el servidor web utilitzarà per a connectar-se al servidor de base de dades durant el funcionament normal del wiki.",
"config-db-web-account-same": "Utilitza el mateix compte que a la instal·lació",
"config-db-web-create": "Crea el compte si no existeix encara",
"config-db-web-no-create-privs": "El compte que heu especificat a la instal·lació no té suficients privilegis per crear un compte. El compte que especifiqueu aquí ja ha d'existir.",
@@ -115,6 +142,7 @@
"config-mssql-sqlauth": "Autenticació de l’SQL Server",
"config-mssql-windowsauth": "Autenticació del Windows",
"config-site-name": "Nom del wiki:",
+ "config-site-name-help": "Això apareixerà en la barra de títol del navegador i en altres llocs diferents.",
"config-site-name-blank": "Introduïu un nom per al lloc.",
"config-project-namespace": "Espai de noms del projecte:",
"config-ns-generic": "Projecte",
@@ -131,6 +159,8 @@
"config-admin-password-blank": "Introduïu una contrasenya per al compte d'administrador.",
"config-admin-password-mismatch": "Les dues contrasenyes que heu introduït no coincideixen.",
"config-admin-email": "Adreça electrònica:",
+ "config-admin-error-user": "S'ha produït un error intern en crear un administrador amb el nom «<nowiki>$1</nowiki>».",
+ "config-admin-error-password": "S'ha produït un error intern en definir una contrasenya per a l'administrador «<nowiki>$1</nowiki>»: <pre>$2</pre>",
"config-admin-error-bademail": "Heu introduït una adreça electrònica no vàlida.",
"config-almost-done": "Gairebé ja heu acabat!\nPodeu ometre el que queda de la configuració i procedir amb la instal·lació del wiki.",
"config-optional-continue": "Fes-me més preguntes.",
@@ -142,7 +172,13 @@
"config-profile-private": "Wiki privat",
"config-license": "Copyright i llicència:",
"config-license-none": "Sense llicència al peu de pàgina",
+ "config-license-cc-by-sa": "Creative Commons Reconeixement-CompartirIgual",
+ "config-license-cc-by": "Creative Commons Reconeixement",
+ "config-license-cc-by-nc-sa": "Creative Commons Reconeixement-NoComercial-CompartirIgual",
+ "config-license-cc-0": "Creative Commons Zero (Domini Públic)",
+ "config-license-gfdl": "GNU Free Documentation License 1.3 o posterior",
"config-license-pd": "Domini públic",
+ "config-license-cc-choose": "Selecció d'una llicència personalitzada de Creative Commons",
"config-email-settings": "Paràmetres del correu electrònic",
"config-email-user": "Habilita el correu electrònic usuari-a-usuari",
"config-email-user-help": "Permet que tots els usuaris puguin enviar-se correu si ho han habilitat a les preferències.",
@@ -154,6 +190,7 @@
"config-upload-settings": "Imatges i càrregues de fitxers",
"config-upload-enable": "Habilita la càrrega de fitxers",
"config-upload-deleted": "Directori pels arxius suprimits:",
+ "config-upload-deleted-help": "Trieu un directori on arxivar els fitxers suprimits.\nIdealment no hauria de ser accessible des del web.",
"config-logo": "URL del logo:",
"config-instantcommons": "Habilita Instant Commons",
"config-cc-error": "El selector de llicència Creative Commons no ha donat cap resultat.\nIntroduïu la llicència manualment.",
@@ -163,9 +200,16 @@
"config-cache-options": "Configuració per a la memòria cau dels objectes:",
"config-cache-help": "L'encauament d'objectes s'utilitza per a millorar la rapidesa del MediaWiki afegint a la memòria cau les dades que s'utilitzen de forma freqüent. És recomanable que els llocs web mitjans o grans ho habilitin. També els llocs web petits en veuran els beneficis.",
"config-cache-none": "Sense encauament (no se suprimeix cap funcionalitat, però la velocitat pot veure's afectada en els llocs wiki més grans)",
+ "config-cache-memcached": "Utilitza Memcached (requereix una instal·lació i configuració addicionals)",
"config-memcached-servers": "Servidors de Memcache:",
+ "config-memcache-badip": "Heu introduït una adreça IP no vàlida per al Memcached: $1.",
+ "config-memcache-noport": "No heu especificat un port per utilitzar el servidor Memcached: $1.\nSi no coneixeu el port, per defecte és 11211.",
"config-extensions": "Extensions",
"config-skins": "Aparences",
+ "config-skins-use-as-default": "Utilitza aquest tema per defecte",
+ "config-skins-missing": "No s'ha trobat cap tema; MediaWiki utilitzarà el tema per defecte fins que hi instal·leu alguns adequats.",
+ "config-skins-must-enable-some": "Heu de triar com a mínim un tema per habilitar.",
+ "config-skins-must-enable-default": "Cal habilitar el tema triat per defecte.",
"config-install-step-done": "fet",
"config-install-step-failed": "ha fallat",
"config-install-extensions": "S'estan incloent les extensions",
@@ -174,6 +218,8 @@
"config-install-pg-schema-not-exist": "No existeix un esquema PostgreSQL.",
"config-install-pg-schema-failed": "La creació de les taules ha fallat.\nAssegureu-vos que l'usuari «$1» pot escriure a l'esquema «$2».",
"config-install-pg-commit": "S'estan trametent els canvis",
+ "config-pg-no-plpgsql": "Necessiteu instal·lar l'idioma PL/pgSQL a la base de dades $1",
+ "config-pg-no-create-privs": "El compte que heu especificat per a la instal·lació no té suficients permisos per crear un compte.",
"config-install-user": "S'està creant l'usuari de la base de dades",
"config-install-user-alreadyexists": "L'usuari «$1» ja existeix",
"config-install-user-create-failed": "La creació de l'usuari «$1» ha fallat: $2",
@@ -188,6 +234,7 @@
"config-install-interwiki-exists": "'''Avís:''' La taula d'interwiki sembla que ja té entrades. S'omet la llista per defecte.",
"config-install-stats": "S'estan inicialitzant les estadístiques",
"config-install-keys": "S'estan generant les claus secretes",
+ "config-install-updates": "Evita que s'executin actualitzacions no necessàries",
"config-install-sysop": "S'està creant un compte d'usuari d'administrador",
"config-install-subscribe-fail": "No s'ha pogut subscriure a mediawiki-announce: $1",
"config-install-subscribe-notpossible": "El cURL no està instal·lat i <code>allow_url_fopen</code> no està disponible.",
diff --git a/includes/installer/i18n/ckb.json b/includes/installer/i18n/ckb.json
index d0db0849..202edeff 100644
--- a/includes/installer/i18n/ckb.json
+++ b/includes/installer/i18n/ckb.json
@@ -6,11 +6,13 @@
"Muhammed taha"
]
},
+ "config-desc": "دامەزرێنەرەکە بۆ میدیاویکی",
+ "config-title": "دامەزرانی میدیاویکی $1",
"config-information": "زانیاری",
"config-your-language": "زمانەکەت:",
"config-wiki-language": "زمانی ویکی:",
"config-back": "→ گەڕانەوە",
- "config-continue": "بەردەوامبوون ←",
+ "config-continue": "بەردەوام بە ←",
"config-page-language": "زمان",
"config-page-welcome": "بەخێربێیت بۆ میدیاویکی!",
"config-page-dbconnect": "پەیوەندی دەکات بەبنکەی زانیارییەکان",
@@ -26,15 +28,26 @@
"config-page-upgradedoc": "نوێدەکرێتەوە",
"config-page-existingwiki": "ویکی پێشوو",
"config-restart": "بەڵێ، دەستی پێ بکەرەوە",
- "config-env-php": "PHP $1 دابەزێندرا.",
- "config-env-php-toolow": "PHP $1 دابەزێندرا.\nھەرچۆنێک بێت میدیاویکی پێویستی بە PHP $2 یان بەرزتر ھەیە.",
+ "config-env-php": "PHP $1 دامەزراوە.",
+ "config-apc": "[http://www.php.net/apc APC] دامەزراوە",
+ "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] دامەزراوە",
+ "config-db-type": "جۆری داتابەیس:",
+ "config-db-host": "خانەخوێی داتابەیس:",
"config-db-name": "ناوی بنکەدراوە:",
+ "config-db-install-account": "ھەژماری بەکارھێنەری بۆ دامەزراندن",
"config-db-username": "ناوی بەکارھێنەری بنکەدراوە:",
"config-db-password": "تێپەڕوشەی بنکەدراوە",
"config-site-name": "ناوی ویکی:",
"config-ns-generic": "پرۆژە",
+ "config-admin-name": "ناوی بەکارھێنەرییەکەت:",
"config-admin-password": "تێپەڕوشە:",
+ "config-admin-password-confirm": "دووبارە تێپەڕوشە:",
"config-admin-email": "ناونیشانی ئیمەیل:",
+ "config-profile-wiki": "ویکیی کراوە",
+ "config-profile-no-anon": "دروستکردنی ھەژمارە پێویستە",
+ "config-profile-fishbowl": "تەنھا دەستکاریکەری ڕێگەپێدراوە",
+ "config-license-pd": "پاوانی گشتی",
+ "config-email-settings": "ڕێکخستنەکانی ئیمەیڵ",
"config-install-step-done": "کرا",
"config-help": "یارمەتی",
"mainpagetext": "'''میدیاویکی بە سەرکەوتوویی دامەزرا.'''",
diff --git a/includes/installer/i18n/cs.json b/includes/installer/i18n/cs.json
index a783cfe2..da2de842 100644
--- a/includes/installer/i18n/cs.json
+++ b/includes/installer/i18n/cs.json
@@ -57,7 +57,7 @@
"config-unicode-using-intl": "Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].",
"config-unicode-pure-php-warning": "'''Upozornění''': Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkou návštěvností, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].",
"config-unicode-update-warning": "'''Upozornění''': Nainstalovaná verze vrstvy pro normalizaci Unicode používá starší verzi knihovny [http://site.icu-project.org/ projektu ICU].\nPokud vám aspoň trochu záleží na používání Unicode, měli byste [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ji aktualizovat].",
- "config-no-db": "Nepodařilo se nalézt vhodný databázový ovladač! Musíte do PHP nainstalovat databázový ovladač.\nJsou podporovány následující typy databází: $1.\n\nPokud jste si PHP přeložili sami, překonfigurujte ho se zapnutým databázovým klientem, například pomocí <code>./configure --with-mysql</code>.\nPokud jste PHP nainstalovali z balíčku Debian či Ubuntu, potřebujete nainstalovat také modul php5-mysql.",
+ "config-no-db": "Nepodařilo se nalézt vhodný databázový ovladač! Musíte nainstalovat databázový ovladač pro PHP.\n{{PLURAL:$2|Je podporován následující typ databáze|Jsou podporovány následující typy databází}}: $1.\n\nPokud jste si PHP přeložili sami, překonfigurujte ho se zapnutým databázovým klientem, například pomocí <code>./configure --with-mysql</code>.\nPokud jste PHP nainstalovali z balíčku Debian či Ubuntu, potřebujete nainstalovat také modul <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Upozornění''': Máte SQLite $1, které je starší než minimálně vyžadovaná verze $2. SQLite nebude dostupné.",
"config-no-fts3": "'''Upozornění''': SQLite bylo přeloženo bez [//sqlite.org/fts3.html modulu FTS3], funkce pro vyhledávání zde nebudou dostupné.",
"config-register-globals-error": "<strong>Chyba: PHP nastavení <code>[http://php.net/register_globals register_globals]</code> je zapnuto. Pro pokračování v instalaci musí být vypnuto.</strong>\nRady, jak toho dosáhnout, najdete na [https://www.mediawiki.org/wiki/Register_globals https://www.mediawiki.org/wiki/register_globals].",
diff --git a/includes/installer/i18n/cv.json b/includes/installer/i18n/cv.json
index adf128e8..9959f291 100644
--- a/includes/installer/i18n/cv.json
+++ b/includes/installer/i18n/cv.json
@@ -1,9 +1,17 @@
{
"@metadata": {
"authors": [
- "Seb35"
+ "Seb35",
+ "Chuvash2014"
]
},
+ "config-information": "Информаци",
+ "config-your-language": "Сирĕн чĕлхӳ:",
+ "config-wiki-language": "Вики чĕлхе:",
+ "config-back": "← Кутăн",
+ "config-continue": "Малалла →",
+ "config-page-language": "Чĕлхе",
+ "config-page-name": "Ят",
"mainpagetext": "'''«MediaWiki» вики-движока лартасси ăнăçлă вĕçленчĕ.'''",
"mainpagedocfooter": "Ку википе ĕçлеме пулăшакан информацине [//meta.wikimedia.org/wiki/Help:Contents/ru усăç руководствинче] тупма пултаратăр.\n\n== Пулăшма пултарĕç ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Ĕнерлевсен списокĕ];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki тăрăх час-часах ыйтакан ыйтусемпе хуравсем];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki çĕнĕ верси тухнине пĕлтерекен рассылка].\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
}
diff --git a/includes/installer/i18n/cy.json b/includes/installer/i18n/cy.json
index 5ead1dca..ff7afaac 100644
--- a/includes/installer/i18n/cy.json
+++ b/includes/installer/i18n/cy.json
@@ -7,6 +7,9 @@
]
},
"config-desc": "Y gosodwr ar gyfer MediaWiki",
+ "config-title": "Gosod MediaWiki $1",
+ "config-information": "Gwybodaeth",
+ "config-localsettings-upgrade": "Rydym wedi canfod ffeil <code>LocalSettings.php</code>.\nI uwchraddio'r gosodiad yma, rhowch fanylion y<code>$wgUpgradeKey</code> yn y blwch isod.\nFe'i cewch yn <code>LocalSettings.php</code>.",
"mainpagetext": "'''Wedi llwyddo gosod meddalwedd MediaWiki yma'''",
"mainpagedocfooter": "Ceir cymorth (yn Saesneg) ar ddefnyddio meddalwedd wici yn y [//meta.wikimedia.org/wiki/Help:Contents Canllaw Defnyddwyr] ar wefan Wikimedia.\n\n==Cychwyn arni==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Rhestr osodiadau wrth gyflunio]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Cwestiynau poblogaidd ar MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Rhestr postio datganiadau MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Cyfieithu MediaWici i'ch iaith chi]"
}
diff --git a/includes/installer/i18n/de.json b/includes/installer/i18n/de.json
index f329db9b..b348a1b3 100644
--- a/includes/installer/i18n/de.json
+++ b/includes/installer/i18n/de.json
@@ -13,7 +13,8 @@
"아라",
"Se4598",
"Suriyaa Kudo",
- "Das Schäfchen"
+ "Das Schäfchen",
+ "Florian"
]
},
"config-desc": "Das MediaWiki-Installationsprogramm",
@@ -23,7 +24,7 @@
"config-localsettings-cli-upgrade": "Eine Datei <code>LocalSettings.php</code> wurde gefunden.\nUm die vorhandene Installation zu aktualisieren, muss die Datei <code>update.php</code> ausgeführt werden.",
"config-localsettings-key": "Aktualisierungsschlüssel:",
"config-localsettings-badkey": "Der angegebene Aktualisierungsschlüssel ist falsch.",
- "config-upgrade-key-missing": "Eine MediaWiki-Installation wurde gefunden.\nUm die vorhandene Installation aktualisieren zu können, muss die unten angegebene Codezeile in die Datei <code>LocalSettings.php</code> an deren Ende eingefügt werden:\n\n$1",
+ "config-upgrade-key-missing": "Eine MediaWiki-Installation wurde gefunden.\nUm die vorhandene Installation aktualisieren zu können, muss die unten angegebene Codezeile an das Ende der Datei <code>LocalSettings.php</code> eingefügt werden:\n\n$1",
"config-localsettings-incomplete": "Die vorhandene Datei <code>LocalSettings.php</code> scheint unvollständig zu sein.\nDie Variable <code>$1</code> wurde nicht definiert.\nDie Datei <code>LocalSettings.php</code> muss entsprechend geändert werden, so dass sie definiert ist. Klicke danach auf „{{int:Config-continue}}“.",
"config-localsettings-connection-error": "Beim Verbindungsversuch zur Datenbank ist, unter Verwendung der in der Datei <code>LocalSettings.php</code> hinterlegten Einstellungen, ein Fehler aufgetreten. Diese Einstellungen müssen korrigiert werden. Danach kann ein erneuter Versuch unternommen werden.\n\n$1",
"config-session-error": "Fehler beim Starten der Sitzung: $1",
@@ -54,16 +55,15 @@
"config-restart": "Ja, erneut starten",
"config-welcome": "=== Prüfung der Installationsumgebung ===\nDie Basisprüfungen werden jetzt durchgeführt, um festzustellen, ob die Installationsumgebung für MediaWiki geeignet ist.\nNotiere diese Informationen und gib sie an, sofern du Hilfe beim Installieren benötigst.",
"config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es kann, gemäß den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine <doclink href=Copying>Kopie der GNU General Public License</doclink> sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.",
- "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/de Benutzeranleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/de Administratorenanleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/de Häufig gestellte Fragen]\n----\n* <doclink href=Readme>Lies mich</doclink>\n* <doclink href=ReleaseNotes>Versionsinformationen</doclink>\n* <doclink href=Copying>Lizenzbestimmungen</doclink>\n* <doclink href=UpgradeDoc>Aktualisierung</doclink>",
+ "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/de Website von MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/de Benutzer­anleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/de Administratoren­anleitung]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/de Häufig gestellte Fragen]\n----\n* <doclink href=Readme>Lies mich</doclink>\n* <doclink href=ReleaseNotes>Versions­informationen</doclink>\n* <doclink href=Copying>Lizenz­bestimmungen</doclink>\n* <doclink href=UpgradeDoc>Aktualisierung</doclink>",
"config-env-good": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann installiert werden.",
"config-env-bad": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann nicht installiert werden.",
"config-env-php": "Die Skriptsprache „PHP“ ($1) ist installiert.",
"config-env-hhvm": "HHVM $1 ist installiert.",
- "config-unicode-using-utf8": "Zur Unicode-Normalisierung wird Brion Vibbers <code>utf8_normalize.so</code> eingesetzt.",
"config-unicode-using-intl": "Zur Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.",
"config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.",
"config-unicode-update-warning": "'''Warnung:''' Die installierte Version des Unicode-Normalisierungswrappers nutzt einer ältere Version der Bibliothek des [http://site.icu-project.org/ ICU-Projekts].\nDiese sollte [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aktualisiert] werden, sofern auf die Verwendung von Unicode Wert gelegt wird.",
- "config-no-db": "Es konnte kein adäquater Datenbanktreiber gefunden werden. Es muss daher ein Datenbanktreiber für PHP installiert werden.\nDie folgenden Datenbanksysteme werden unterstützt: $1\n\nWenn du PHP selbst kompiliert hast, konfiguriere es erneut mit einem aktivierten Datenbankclient, zum Beispiel durch Verwendung von <code>./configure --with-mysqli</code>.\nWenn du PHP von einem Debian- oder Ubuntu-Paket installiert hast, dann musst du auch beispielsweise das <code>php5-mysql</code>-Paket installieren.",
+ "config-no-db": "Es konnte kein adäquater Datenbanktreiber gefunden werden. Es muss daher ein Datenbanktreiber für PHP installiert werden.\n{{PLURAL:$2|Das folgende Datenbanksystem wird|Die folgenden Datenbanksysteme werden}} unterstützt: $1\n\nWenn du PHP selbst kompiliert hast, konfiguriere es erneut mit einem aktivierten Datenbankclient, zum Beispiel durch Verwendung von <code>./configure --with-mysqli</code>.\nWenn du PHP von einem Debian- oder Ubuntu-Paket installiert hast, dann musst du auch beispielsweise das <code>php5-mysql</code>-Paket installieren.",
"config-outdated-sqlite": "'''Warnung:''' SQLite $1 ist installiert. Allerdings benötigt MediaWiki SQLite $2 oder höher. SQLite wird daher nicht verfügbar sein.",
"config-no-fts3": "'''Warnung:''' SQLite wurde ohne das [//sqlite.org/fts3.html FTS3-Modul] kompiliert, sodass keine Suchfunktionen für dieses Datenbanksystem zur Verfügung stehen werden.",
"config-register-globals-error": "<strong>Fehler: Die PHP-Option <code>[http://php.net/register_globals register_globals]</code> ist aktiviert.\nSie muss deaktiviert sein, um mit der Installation fortzufahren.</strong>\nSiehe [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] für Hilfe.",
@@ -112,7 +112,7 @@
"config-db-install-account": "Benutzerkonto für die Installation",
"config-db-username": "Name des Datenbankbenutzers:",
"config-db-password": "Passwort des Datenbankbenutzers:",
- "config-db-password-empty": "Bitte ein Passwort für den neuen Datenbankbenutzer angeben: $1\nObzwar es möglich ist, Datenbankbenutzer ohne Passwort anzulegen, so ist dies aber nicht sicher.",
+ "config-db-password-empty": "Bitte ein Passwort für den neuen Datenbankbenutzer angeben: $1.\nObwohl es möglich ist, Datenbankbenutzer ohne Passwort anzulegen, so ist dies nicht sicher.",
"config-db-username-empty": "Du musst einen Wert für „{{int:config-db-username}}“ eingeben",
"config-db-install-username": "Den Benutzernamen angeben, der für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um den Benutzernamen für das MediaWiki-Konto, sondern um den Benutzernamen der vorgesehenen Datenbank.",
"config-db-install-password": "Das Passwort angeben, das für die Verbindung mit der Datenbank während des Installationsvorgangs genutzt werden soll. Es handelt sich dabei nicht um das Passwort für das MediaWiki-Konto, sondern um das Passwort der vorgesehenen Datenbank.",
@@ -141,12 +141,12 @@
"config-type-sqlite": "SQLite",
"config-type-oracle": "Oracle",
"config-type-mssql": "Microsoft SQL Server",
- "config-support-info": "MediaWiki unterstützt die folgenden Datenbanksysteme:\n\n$1\n\nSofern nicht das Datenbanksystem angezeigt wird, das verwendet werden soll, gibt es oben einen Link zur Anleitung mit Informationen, wie dieses aktiviert werden kann.",
- "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] ist das von MediaWiki primär unterstützte Datenbanksystem. MediaWiki funktioniert auch mit [{{int:version-db-mariadb-url}} MariaDB] und [{{int:version-db-percona-url}} Percona Server], die MySQL-kompatibel sind. ([http://www.php.net/manual/en/mysqli.installation.php Anleitung zur Kompilierung von PHP mit MySQL-Unterstützung] [englische Sprache])",
- "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL. Es gibt allerdings einige kleinere Implementierungsfehler, so dass von der Nutzung in einer Produktivumgebung abgeraten wird. ([http://www.php.net/manual/de/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung])",
- "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] ist ein verschlanktes Datenbanksystem, das auch gut unterstützt wird ([http://www.php.net/manual/de/pdo.installation.php Anleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwendet PHP Data Objects (PDO))",
- "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] ist eine kommerzielle Unternehmensdatenbank ([http://www.php.net/manual/en/oci8.installation.php Anleitung zur Kompilierung von PHP mit OCI8-Unterstützung (en)])",
- "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ist eine gewerbliche Unternehmensdatenbank für Windows. ([http://www.php.net/manual/de/sqlsrv.installation.php Anleitung zur Kompilierung von PHP mithilfe SQLSRV-Unterstützung])",
+ "config-support-info": "MediaWiki unterstützt die folgenden Datenbanksysteme:\n\n$1\n\nSofern unterhalb nicht das Datenbanksystem angezeigt wird, das verwendet werden soll, muss dieses noch verfügbar gemacht werden. Oben ist zu jedem unterstützten Datenbanksystem ein Link zur entsprechenden Anleitung vorhanden.",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] ist das von MediaWiki primär unterstützte Datenbanksystem. MediaWiki funktioniert auch mit [{{int:version-db-mariadb-url}} MariaDB] und [{{int:version-db-percona-url}} Percona Server], die MySQL-kompatibel sind. ([https://www.php.net/manual/en/mysqli.installation.php Anleitung zur Kompilierung von PHP mit MySQL-Unterstützung])",
+ "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL. Es gibt allerdings einige kleinere Implementierungsfehler, so dass von der Nutzung in einer Produktivumgebung abgeraten wird. ([https://www.php.net/manual/de/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung])",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] ist ein verschlanktes Datenbanksystem, das auch gut unterstützt wird ([https://www.php.net/manual/de/pdo.installation.php Anleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwendet PHP Data Objects (PDO))",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] ist eine kommerzielle Unternehmensdatenbank ([https://www.php.net/manual/en/oci8.installation.php Anleitung zur Kompilierung von PHP mit OCI8-Unterstützung])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ist eine gewerbliche Unternehmensdatenbank für Windows. ([https://www.php.net/manual/de/sqlsrv.installation.php Anleitung zur Kompilierung von PHP mit SQLSRV-Unterstützung])",
"config-header-mysql": "MySQL-Einstellungen",
"config-header-postgres": "PostgreSQL-Einstellungen",
"config-header-sqlite": "SQLite-Einstellungen",
diff --git a/includes/installer/i18n/diq.json b/includes/installer/i18n/diq.json
index 843fe2f3..2cc85cea 100644
--- a/includes/installer/i18n/diq.json
+++ b/includes/installer/i18n/diq.json
@@ -42,7 +42,7 @@
"config-ns-other": "Zewbi (keyfiyo)",
"config-ns-other-default": "MyWiki",
"config-admin-box": "Hesabê Administratori",
- "config-admin-name": "Namey karberdé to:",
+ "config-admin-name": "Nameyê şımayê karberi:",
"config-admin-password": "Parola:",
"config-admin-password-confirm": "Fına parola:",
"config-admin-email": "Adresa e-postey:",
diff --git a/includes/installer/i18n/el.json b/includes/installer/i18n/el.json
index 325ee986..27b930a7 100644
--- a/includes/installer/i18n/el.json
+++ b/includes/installer/i18n/el.json
@@ -37,7 +37,6 @@
"config-env-good": "Το περιβάλλον έχει ελεγχθεί.\nΜπορείτε να εγκαταστήσετε το MediaWiki.",
"config-env-bad": "Το περιβάλλον έχει ελεγχθεί.\nΔεν μπορείτε να εγκαταστήσετε το MediaWiki.",
"config-env-php": "H PHP $1 είναι εγκατεστημένη.",
- "config-env-php-toolow": "Η PHP $1 είναι εγκατεστημένη.\nΩστόσο, το MediaWiki απαιτεί την PHP $2 ή μεταγενέστερη έκδοση.",
"config-apc": "Το [http://www.php.net/apc APC] είναι εγκατεστημένο",
"config-diff3-bad": "Το GNU diff3 δεν βρέθηκε.",
"config-db-type": "Τύπος βάσης δεδομένων:",
@@ -45,11 +44,13 @@
"config-db-host-oracle": "Βάση δεδομένων TNS:",
"config-db-wiki-settings": "Αναγνώριση αυτού του wiki",
"config-db-name": "Όνομα βάσης δεδομένων:",
+ "config-db-name-oracle": "Σχήμα βάσης δεδομένων:",
"config-db-install-account": "Λογαριασμός χρήστη για την εγκατάσταση",
"config-db-username": "Όνομα χρήστη βάσης δεδομένων:",
"config-db-password": "Κωδικός πρόσβασης βάσης δεδομένων:",
"config-db-wiki-account": "Λογαριασμός χρήστη για κανονική λειτουργία",
"config-charset-mysql5-binary": "MySQL 4.1/5.0 δυαδικό",
+ "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
"config-db-port": "Θύρα βάσης δεδομένων:",
"config-header-mysql": "Ρυθμίσεις MySQL",
"config-header-postgres": "Ρυθμίσεις PostgreSQL",
@@ -74,6 +75,7 @@
"config-ns-generic": "Εγχείρημα",
"config-ns-site-name": "Ίδιο με το όνομα του wiki: $1",
"config-ns-other": "Άλλο (προσδιορίστε)",
+ "config-ns-other-default": "ΤοWikiμου",
"config-admin-box": "Λογαριασμός διαχειριστή",
"config-admin-name": "Το όνομα χρήστη σας:",
"config-admin-password": "Κωδικός πρόσβασης:",
@@ -88,18 +90,26 @@
"config-profile-no-anon": "Απαιτείται η δημιουργία λογαριασμού",
"config-profile-fishbowl": "Εξουσιοδοτημένοι συντάκτες μόνο",
"config-profile-private": "Ιδιωτικό wiki",
+ "config-license-pd": "Κοινό Κτήμα",
"config-license-cc-choose": "Επιλέξτε μια προσαρμοσμένη άδεια Creative Commons",
"config-email-settings": "Ρυθμίσεις ηλεκτρονικού ταχυδρομείου",
"config-email-usertalk": "Ενεργοποίηση ειδοποίησης σελίδας συζήτησης χρήστη",
"config-email-auth": "Ενεργοποίηση ταυτοποίησης μέσω ηλεκτρονικού ταχυδρομείου",
"config-upload-settings": "Ανέβασμα εικόνων και άλλων αρχείων",
"config-upload-enable": "Ενεργοποιήστε το ανέβασμα αρχείων",
+ "config-upload-deleted": "Καταλόγος για διαγραφέντα αρχεία:",
"config-logo": "Διεύθυνση URL λογότυπου:",
+ "config-instantcommons": "Ενεργοποίηση Instant Commons",
"config-cc-again": "Επιλέξτε ξανά...",
"config-advanced-settings": "Προηγμένες ρυθμίσεις παραμέτρων",
"config-extensions": "Επεκτάσεις",
+ "config-skins": "Θέματα εμφάνισης",
+ "config-skins-help": "Τα θέματα εμφάνισης που αναφέρονται παραπάνω εντοπίστηκαν στον κατάλογο <code>./skins</code>. Πρέπει να ενεργοποιήσετε τουλάχιστον ένα και να επιλέξτε ποιο θα είναι το προεπιλεγμένο.",
+ "config-skins-use-as-default": "Χρήση αυτού του θέματος εμφάνισης ως προεπιλογή",
+ "config-skins-must-enable-default": "Το θέμα εμφάνισης που επιλέχθηκε ως προεπιλεγμένο πρέπει να είναι ενεργοποιημένο.",
"config-install-step-done": "έγινε",
"config-install-step-failed": "απέτυχε",
+ "config-install-database": "Ρύθμιση βάσης δεδομένων",
"config-install-user-alreadyexists": "Ο χρήστης \"$1\" υπάρχει ήδη",
"config-install-tables": "Γίνεται δημιουργία πινάκων",
"config-install-tables-failed": "<strong>Σφάλμα:</strong>Η δημιουργία πινάκων απέτυχε με το ακόλουθο μήνυμα λάθους: $1",
diff --git a/includes/installer/i18n/eml.json b/includes/installer/i18n/eml.json
new file mode 100644
index 00000000..37fefefa
--- /dev/null
+++ b/includes/installer/i18n/eml.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gloria sah"
+ ]
+ },
+ "config-information": "Infurmasiòun",
+ "config-your-language": "La tó lengva:",
+ "config-page-language": "Lengva",
+ "config-charset-mysql5-binary": "binàri MySQL 4.1/5.0",
+ "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+ "config-admin-password-mismatch": "El dó paró li cêv 't ê pruvê i n'vàn mia bèin.",
+ "config-admin-email": "Indirìs e-mail:",
+ "config-optional-continue": "Edmànd-em de piò.",
+ "config-license-cc-by": "Atribusiòun Creative Commons"
+}
diff --git a/includes/installer/i18n/en-gb.json b/includes/installer/i18n/en-gb.json
index 6b9f5901..a79282a2 100644
--- a/includes/installer/i18n/en-gb.json
+++ b/includes/installer/i18n/en-gb.json
@@ -1,9 +1,13 @@
{
"@metadata": {
"authors": [
- "Shirayuki"
+ "Shirayuki",
+ "Caliburn"
]
},
+ "config-desc": "The installer for MediaWiki",
+ "config-title": "MediaWiki $1 installation",
+ "config-information": "Information",
"config-copyright": "=== Copyright and Terms ===\n\n$1\n\nThis program 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\nThis 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'''.\nSee the GNU General Public Licence for more details.\n\nYou should have received <doclink href=Copying>a copy of the GNU General Public Licence</doclink> along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. or [http://www.gnu.org/copyleft/gpl.html read it online].",
"config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalisation.",
"config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalisation.",
diff --git a/includes/installer/i18n/en.json b/includes/installer/i18n/en.json
index 1e1c2da7..c19e3ee6 100644
--- a/includes/installer/i18n/en.json
+++ b/includes/installer/i18n/en.json
@@ -45,11 +45,10 @@
"config-env-bad": "The environment has been checked.\nYou cannot install MediaWiki.",
"config-env-php": "PHP $1 is installed.",
"config-env-hhvm": "HHVM $1 is installed.",
- "config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalization.",
"config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.",
"config-unicode-pure-php-warning": "<strong>Warning:</strong> The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
"config-unicode-update-warning": "<strong>Warning:</strong> The installed version of the Unicode normalization wrapper uses an older version of [http://site.icu-project.org/ the ICU project's] library.\nYou should [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade] if you are at all concerned about using Unicode.",
- "config-no-db": "Could not find a suitable database driver! You need to install a database driver for PHP.\nThe following database types are supported: $1.\n\nIf you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>.\nIf you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.",
+ "config-no-db": "Could not find a suitable database driver! You need to install a database driver for PHP.\nThe following database {{PLURAL:$2|type is|types are}} supported: $1.\n\nIf you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>.\nIf you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.",
"config-outdated-sqlite": "<strong>Warning:</strong> you have SQLite $1, which is lower than minimum required version $2. SQLite will be unavailable.",
"config-no-fts3": "<strong>Warning:</strong> SQLite is compiled without the [//sqlite.org/fts3.html FTS3 module], search features will be unavailable on this backend.",
"config-register-globals-error": "<strong>Error: PHP's <code>[http://php.net/register_globals register_globals]</code> option is enabled.\nIt must be disabled to continue with the installation.</strong>\nSee [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] for help on how to do so.",
@@ -58,7 +57,7 @@
"config-magic-quotes-sybase": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] is active!</strong>\nThis option corrupts data input unpredictably.\nYou cannot install or use MediaWiki unless this option is disabled.",
"config-mbstring": "<strong>Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is active!</strong>\nThis option causes errors and may corrupt data unpredictably.\nYou cannot install or use MediaWiki unless this option is disabled.",
"config-safe-mode": "<strong>Warning:</strong> PHP's [http://www.php.net/features.safe-mode safe mode] is active.\nIt may cause problems, particularly if using file uploads and <code>math</code> support.",
- "config-xml-bad": "PHP's XML module is missing.\nMediaWiki requires functions in this module and will not work in this configuration.\nIf you're running Mandrake, install the php-xml package.",
+ "config-xml-bad": "PHP's XML module is missing.\nMediaWiki requires functions in this module and will not work in this configuration.\nYou may need to install the php-xml RPM package.",
"config-pcre-old": "<strong>Fatal:</strong> PCRE $1 or later is required.\nYour PHP binary is linked with PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE More information].",
"config-pcre-no-utf8": "<strong>Fatal:</strong> PHP's PCRE module seems to be compiled without PCRE_UTF8 support.\nMediaWiki requires UTF-8 support to function correctly.",
"config-memory-raised": "PHP's <code>memory_limit</code> is $1, raised to $2.",
@@ -70,7 +69,7 @@
"config-apc": "[http://www.php.net/apc APC] is installed",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is installed",
"config-no-cache": "<strong>Warning:</strong> Could not find [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] or [http://www.iis.net/download/WinCacheForPhp WinCache].\nObject caching is not enabled.",
- "config-mod-security": "<strong>Warning:</strong> Your web server has [http://modsecurity.org/ mod_security] enabled. If misconfigured, it can cause problems for MediaWiki or other software that allows users to post arbitrary content.\nRefer to [http://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.",
+ "config-mod-security": "<strong>Warning:</strong> Your web server has [http://modsecurity.org/ mod_security]/mod_security2 enabled. Many common configurations of this will cause problems for MediaWiki and other software that allows users to post arbitrary content.\nIf possible, this should be disabled. Otherwise, refer to [http://modsecurity.org/documentation/ mod_security documentation] or contact your host's support if you encounter random errors.",
"config-diff3-bad": "GNU diff3 not found.",
"config-git": "Found the Git version control software: <code>$1</code>.",
"config-git-bad": "Git version control software not found.",
@@ -151,7 +150,7 @@
"config-db-sys-user-exists-oracle": "User account \"$1\" already exists. SYSDBA can only be used for creating of a new account!",
"config-postgres-old": "PostgreSQL $1 or later is required. You have $2.",
"config-mssql-old": "Microsoft SQL Server $1 or later is required. You have $2.",
- "config-sqlite-name-help": "Choose a name that identifies your wiki.\nDo not use spaces or hyphens.\nThis will be used for the SQLite data file name.",
+ "config-sqlite-name-help": "Choose a name that identifies your wiki.\nDo not use spaces or hyphens.\nThis will be used for the SQLite data filename.",
"config-sqlite-parent-unwritable-group": "Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.\n\nThe installer has determined the user your webserver is running as.\nMake the <code><nowiki>$3</nowiki></code> directory writable by it to continue.\nOn a Unix/Linux system do:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
"config-sqlite-parent-unwritable-nogroup": "Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.\n\nThe installer could not determine the user your webserver is running as.\nMake the <code><nowiki>$3</nowiki></code> directory globally writable by it (and others!) to continue.\nOn a Unix/Linux system do:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
"config-sqlite-mkdir-error": "Error creating the data directory \"$1\".\nCheck the location and try again.",
diff --git a/includes/installer/i18n/es.json b/includes/installer/i18n/es.json
index ee1a2f46..a9836514 100644
--- a/includes/installer/i18n/es.json
+++ b/includes/installer/i18n/es.json
@@ -25,19 +25,20 @@
"Miguel2706",
"Macofe",
"AVIADOR",
- "FuzzyDice"
+ "FuzzyDice",
+ "Legoktm"
]
},
"config-desc": "El instalador de MediaWiki",
"config-title": "Instalación de MediaWiki $1",
"config-information": "Información",
- "config-localsettings-upgrade": "Se ha encontrado un archivo <code>LocalSettings.php</code>.\nPara actualizar esta instalación, por favor ingresa el valor de <code>$wgUpgradeKey</code> en el cuadro de abajo.\nLo encontrarás en <code>LocalSettings.php</code>.",
- "config-localsettings-cli-upgrade": "Se ha detectado un archivo <code>LocalSettings.php</code>.\nPara actualizar la instalación, vuelva a ejecutar <code>update.php</code>",
+ "config-localsettings-upgrade": "Se ha encontrado un archivo <code>LocalSettings.php</code>.\nPara actualizar esta instalación, escribe el valor de <code>$wgUpgradeKey</code> en el cuadro de abajo.\nLo encontrarás en <code>LocalSettings.php</code>.",
+ "config-localsettings-cli-upgrade": "Se ha detectado un archivo <code>LocalSettings.php</code>.\nPara actualizar la instalación, en su lugar ejecuta <code>update.php</code>",
"config-localsettings-key": "Clave de actualización:",
"config-localsettings-badkey": "La clave proporcionada es incorrecta.",
- "config-upgrade-key-missing": "Se ha detectado una instalación existente de MediaWiki.\nPara actualizar la instalación, por favor, ponga la siguiente línea al final de su archivo <code>LocalSettings.php</code>:\n\n$1",
- "config-localsettings-incomplete": "El archivo <code>LocalSettings.php</code> existente parece estar incompleto.\nLa variable $1 no está definida.\nCambie el archivo <code>LocalSettings.php</code> para que esta variable quede establecida y haga clic en \"{{int:Config-continue}}\".",
- "config-localsettings-connection-error": "Se ha producido un error al conectar a la base de datos utilizando la configuración especificada en <code>LocalSettings.php</code> . Por favor arreglar estos ajustes e inténtelo de nuevo.\n\n$1",
+ "config-upgrade-key-missing": "Se ha detectado una instalación existente de MediaWiki.\nPara actualizar la instalación, añade la siguiente línea al final de tu <code>LocalSettings.php</code>:\n\n$1",
+ "config-localsettings-incomplete": "El archivo <code>LocalSettings.php</code> existente parece estar incompleto.\nLa variable $1 no está definida.\nCambia <code>LocalSettings.php</code> para que esta variable quede establecida y haz clic en \"{{int:Config-continue}}\".",
+ "config-localsettings-connection-error": "Se ha producido un error al conectar a la base de datos utilizando la configuración especificada en <code>LocalSettings.php</code>. Corrige estos ajustes e inténtalo de nuevo.\n\n$1",
"config-session-error": "Error al iniciar la sesión: $1",
"config-session-expired": "Tus datos de sesión parecen haber expirado.\nLas sesiones están configuradas por una duración de $1.\nPuedes incrementar esto configurando <code>session.gc_maxlifetime</code> en php.ini.\nReiniciar el proceso de instalación.",
"config-no-session": "Se han perdido los datos de sesión.\nVerifica tu php.ini y comprueba que <code>session.save_path</code> está establecido en un directorio apropiado.",
@@ -59,10 +60,10 @@
"config-page-restart": "Reiniciar instalación",
"config-page-readme": "Léeme",
"config-page-releasenotes": "Notas de la versión",
- "config-page-copying": "Copiando",
- "config-page-upgradedoc": "Actualizando",
+ "config-page-copying": "Copia",
+ "config-page-upgradedoc": "Actualización",
"config-page-existingwiki": "Wiki existente",
- "config-help-restart": "¿Deseas borrar todos los datos que has ingresado hasta ahora y reiniciar el proceso de instalación desde el principio?",
+ "config-help-restart": "¿Deseas borrar todos los datos guardados que has escrito y reiniciar el proceso de instalación?",
"config-restart": "Sí, reiniciarlo",
"config-welcome": "=== Comprobación del entorno ===\nAhora se van a realizar comprobaciones básicas para ver si el entorno es adecuado para la instalación de MediaWiki.\nRecuerda suministrar los resultados de tales comprobaciones si necesitas ayuda para completar la instalación.",
"config-copyright": "=== Derechos de autor y Términos de uso ===\n\n$1\n\nEste programa es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública General de GNU, tal como aparece publicada por la Fundación para el Software Libre, tanto la versión 2 de la Licencia, como cualquier versión posterior (según prefiera).\n\nEste programa es distribuido en la esperanza de que sea útil, pero '''sin cualquier garantía'''; inclusive, sin la garantía implícita de la '''posibilidad de ser comercializado''' o de '''idoneidad para cualquier finalidad específica'''.\nConsulte la licencia *GNU General *Public *License para más detalles.\n\nEn conjunto con este programa debe haber recibido <doclink href=Copying>una copia de la Licencia Pública General de GNU</doclink>; si no la recibió, pídala por escrito a Fundación para el Software Libre, Inc., 51 Franklin Street, Fifth Floor, Boston, ME La 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html léala en internet].",
@@ -71,69 +72,68 @@
"config-env-bad": "El entorno ha sido comprobado.\nNo puedes instalar MediaWiki.",
"config-env-php": "PHP $1 está instalado.",
"config-env-hhvm": "HHVM $1 está instalado.",
- "config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber para la normalización Unicode.",
"config-unicode-using-intl": "Usando la [http://pecl.php.net/intl extensión intl PECL] para la normalización Unicode.",
- "config-unicode-pure-php-warning": "'''Advertencia''': La [http://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Utilizando la implementación más lenta en PHP.\nSi tu web tiene mucho tráfico, te recomendamos leer acerca de la [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
- "config-unicode-update-warning": "'''Warning''': La versión instalada del contenedor de normalización Unicode usa una versión anterior de la biblioteca del [http://site.icu-project.org/ proyecto ICU].\nDeberás [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualizar] si realmente deseas usar Unicode.",
- "config-no-db": "¡No fue posible encontrar un controlador adecuado para la base de datos! Necesitas instalar un controlador de base de datos para PHP.\nLos siguientes sistemas gestores de bases de datos están soportados: $1.\n\nSi compilaste PHP tú mismo, debes reconfigurarlo habilitando un cliente de base de datos, por ejemplo, usando <code>./configure --with-mysqli</code>.\nSi instalaste PHP desde un paquete Debian o Ubuntu, entonces también necesitas instalar, por ejemplo, el paquete <code>php5-mysql</code>.",
- "config-outdated-sqlite": "''' Advertencia ''': tiene la versión SQLite $1, que es inferior a la mínima versión requerida: $2 . SQLite no estará disponible.",
- "config-no-fts3": "'''Advertencia''': SQLite está compilado sin el [//sqlite.org/fts3.html módulo FTS3]. Las funcionalidades de búsqueda no estarán disponibles en esta instalación.",
- "config-register-globals-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> está activada.\nDebe estar desactivada para continuar con la instalación.</strong>\nVea [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obtener ayuda sobre cómo hacerlo.",
+ "config-unicode-pure-php-warning": "<strong>Advertencia:</strong> la [http://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Se utilizará la implementación más lenta en PHP puro.\nSi tu web tiene mucho tráfico, te recomendamos leer acerca de la [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
+ "config-unicode-update-warning": "<strong>Warning:</strong> la versión instalada del contenedor de normalización Unicode usa una versión antigua de la biblioteca del [http://site.icu-project.org/ proyecto ICU].\nDeberás [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualizar] si realmente deseas usar Unicode.",
+ "config-no-db": "No se encontró un controlador adecuado para la base de datos. Necesitas instalar un controlador de base de datos para PHP.\n{{PLURAL:$2|El siguiente gestor de bases de datos está soportado|Los siguientes gestores de bases de datos están soportados}}: $1.\n\nSi compilaste PHP tú mismo, debes reconfigurarlo habilitando un cliente de base de datos, por ejemplo, usando <code>./configure --with-mysqli</code>.\nSi instalaste PHP desde un paquete Debian o Ubuntu, entonces también necesitas instalar, por ejemplo, el paquete <code>php5-mysql</code>.",
+ "config-outdated-sqlite": "<strong>Advertencia:</strong> tienes SQLite $1, que es inferior a la mínima versión requerida: $2. SQLite no estará disponible.",
+ "config-no-fts3": "<strong>Advertencia:</strong> SQLite está compilado sin el [//sqlite.org/fts3.html módulo FTS3]. Las funcionalidades de búsqueda no estarán disponibles en esta instalación.",
+ "config-register-globals-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> está activada.\nDebe estar desactivada para continuar con la instalación.</strong>\nVéase [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obtener ayuda sobre cómo hacerlo.",
"config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] está activa!</strong>\nEsta opción corrompe la entrada de datos de forma impredecible.\nUsted no puede instalar o utilizar MediaWiki a menos que esta opción esté deshabilitada.",
"config-magic-quotes-runtime": "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activada!'''\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
"config-magic-quotes-sybase": "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activada!'''\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
"config-mbstring": "'''Fatal: La opción [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activada!'''\nEsta opción causa errores y puede corromper los datos de una forma imprevisible.\nNo se puede instalar o usar MediaWiki a menos que esta opción sea desactivada.",
- "config-safe-mode": "'''Advertencia:''' El [http://www.php.net/features.safe-mode modo seguro] de PHP está activado.\nEste modo puede causar problemas, especialmente en la carga de archivosy en compatibilidad con <code>math</code>.",
- "config-xml-bad": "Falta el módulo XML de PHP.\nMediaWiki necesita funciones en este módulo y no funcionará con esta configuración.\nSi está ejecutando Mandrake, instale el paquete php-xml.",
+ "config-safe-mode": "<strong>Advertencia:</strong> el [http://www.php.net/features.safe-mode modo seguro] de PHP está activado.\nEste modo puede causar problemas, especialmente en la carga de archivos y en compatibilidad con <code>math</code>.",
+ "config-xml-bad": "Falta el módulo XML de PHP.\nMediaWiki necesita funciones en este módulo y no funcionará con esta configuración.\nSi estás usando Mandrake, instala el paquete php-xml.",
"config-pcre-old": "'''Fatal:''' Se requiere PCRE $1 o posterior.\nSu PHP binario está enlazado con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Más información].",
"config-pcre-no-utf8": "'''Error fatal ''': Parece que el módulo PCRE de PHP fue compilado sin el soporte PCRE_UTF8.\nMediaWiki requiere compatibilidad con UTF-8 para funcionar correctamente.",
"config-memory-raised": "el parámetro <code>memory_limit</code> de PHP es $1, aumentada a $2.",
- "config-memory-bad": "'''Advertencia:''' El parámetro <code>memory_limit</code> de PHP es $1.\nProbablemente este valor es demasiado bajo.\n¡La instalación podrá fallar!",
+ "config-memory-bad": "<strong>Advertencia:</strong> el parámetro <code>memory_limit</code> de PHP es $1.\nProbablemente sea demasiado bajo.\n¡La instalación puede fallar!",
"config-ctype": "'''Fatal''': Se necesita compilar PHP con compatibilidad para la [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].",
"config-iconv": "<strong>Fatal:</strong> PHP debe ser compilado con soporte para la [http://www.php.net/manual/en/iconv.installation.php extensión iconv].",
"config-json": "'''Fatal:''' PHP fue compilado sin soporte para JSON.\nDebes instalar la extensión JSON o la extensión [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar MediaWiki.\n* La extensión PHP se incluye en Red Hat Enterprise Linux (CentOS) 5 y 6, aunque debe habilitarse en <code>/etc/php.ini</code> o <code>/etc/php.d/json.ini</code>.\n* Algunas distribuciones Linux liberadas después de mayo del 2013 omiten la extensión PHP, y en su lugar disponen de la extensión PECL en el paquete <code>php5-json</code> o <code>php-pecl-jsonc</code>.",
"config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado",
"config-apc": "[http://www.php.net/apc APC] está instalado",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado",
- "config-no-cache": "'''Advertencia:''' No pudo encontrarse [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caché de objetos no está habilitado.",
- "config-mod-security": "''' Advertencia ''': Su servidor web tiene [http://modsecurity.org/ mod_security] habilitado. Si la configuración es incorrecta, puede causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrarios.\nConsulte la [http://modsecurity.org/documentation/ documentación de mod_security] o contacte con el soporte de su servidor (''host'') si encuentra errores aleatorios.",
+ "config-no-cache": "<strong>Advertencia:</strong> no pudo encontrarse [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caché de objetos no está activado.",
+ "config-mod-security": "<strong>Advertencia:</strong> tu servidor web tiene activado [http://modsecurity.org/ mod_security]/mod_security2. Muchas de sus configuraciones comunes pueden causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrario. De ser posible, deberías desactivarlo. Si no, consulta la [http://modsecurity.org/documentation/ documentación de mod_security] o contacta con el administrador de tu servidor si encuentras errores aleatorios.",
"config-diff3-bad": "GNU diff3 no se encuentra.",
"config-git": "Se encontró el software de control de versiones Git: <code>$1</code>.",
"config-git-bad": "No se encontró el software de control de versiones Git.",
"config-imagemagick": "ImageMagick encontrado: <code>$1</code>.\nLa miniaturización de imágenes se habilitará si habilitas las cargas.",
"config-gd": "Se ha encontrado una biblioteca de gráficos GD integrada.\nLa miniaturización de imágenes se habilitará si habilitas las subidas.",
- "config-no-scaling": "No se ha encontrado ninguma biblioteca GD o ImageMagik.\nSe inhabilitará la miniaturización de imágenes.",
+ "config-no-scaling": "No se ha encontrado la biblioteca GD o ImageMagik.\nSe desactivará la miniaturización de imágenes.",
"config-no-uri": "<strong>Error:</strong> no se pudo determinar el URI actual.\nSe interrumpió la instalación.",
"config-no-cli-uri": "<strong>Aviso:</strong> No se especificó <code>--scriptpath</code>; se usa el valor predeterminado: <code>$1</code>.",
"config-using-server": "Utilizando el nombre de servidor \"<nowiki>$1</nowiki>\".",
"config-using-uri": "Utilizando la URL del servidor \"<nowiki>$1$2</nowiki>\".",
- "config-uploads-not-safe": "'''Atención:''' Su directorio por defecto para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.\nAunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
- "config-no-cli-uploads-check": "'''Atención:''' Su directorio predeterminado para cargas (<code>$1</code>) no está comprobado para la vulnerabilidad\n de ejecución arbitraria de comandos script durante la instalación de CLI.",
+ "config-uploads-not-safe": "<strong>Advertencia:</strong> tu directorio predeterminado para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.\nAunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
+ "config-no-cli-uploads-check": "<strong>Advertencia:</strong> tu directorio predeterminado para cargas (<code>$1</code>) no está comprobado contra la vulnerabilidad\n de ejecución arbitraria de \"scripts\" durante la instalación por línea de comandos.",
"config-brokenlibxml": "El sistema tiene una combinación de versiones de PHP y de libxml2 que es poco confiable y puede provocar corrupción oculta en los datos de MediaWiki y otras aplicaciones web.\nActualizar a PHP 5.2.9 o posterior y a libxml2 2.7.3 o posterior ([//bugs.php.net/bug.php?id=45996 bug reportado con PHP]).\nInstalación abortada.",
"config-suhosin-max-value-length": "Suhosin está instalado y limita el parámetro <code>length</code> GET a $1 bytes.\nEl componente ResourceLoader (gestor de recursos) de MediaWiki trabajará en este límite, pero eso perjudicará el rendimiento.\nSi es posible, deberías establecer <code>suhosin.get.max_value_length</code> en el valor 1024 o superior en <code>php.ini</code> y establecer <code>$wgResourceLoaderMaxQueryLength</code> en el mismo valor en <code>php.ini</code>.",
"config-db-type": "Tipo de base de datos:",
"config-db-host": "Servidor de la base de datos:",
- "config-db-host-help": "Si su servidor de base de datos está en otro servidor, escriba el nombre del host o su dirección IP aquí.\nSi está utilizando alojamiento web compartido, su proveedor de alojamiento debería darle el nombre correcto del servidor de alojamiento (host) en su documentación.\nSi va a instalarlo en un servidor Windows y utiliza MySQL, el uso de \"localhost\" como nombre del servidor puede no funcionar. Si no es así, intente poner \"127.0.0.1\" como dirección IP local.\nSi utiliza PostgreSQL, deje este campo en blanco para conectarse a través de un socket de Unix.",
+ "config-db-host-help": "Si tu servidor de base de datos está en otro servidor, escribe el nombre del equipo o su dirección IP aquí.\n\nSi estás utilizando alojamiento web compartido, tu proveedor debería darte el nombre correcto del servidor en su documentación.\n\nSi vas a instalar en un servidor Windows y a utilizar MySQL, el uso de \"localhost\" como nombre del servidor puede no funcionar. Si es así, intenta poner \"127.0.0.1\" como dirección IP local.\n\nSi utilizas PostgreSQL, deja este campo vacío para conectarse a través de un socket de Unix.",
"config-db-host-oracle": "TNS de la base de datos:",
"config-db-host-oracle-help": "Introduzca un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nombre de conexión local] válido; un archivo tnsnames.ora debe ser visible para esta instalación.<br />Si está utilizando bibliotecas de cliente 10g o más recientes también puede utilizar el método de asignación de nombres [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
"config-db-wiki-settings": "Identifica este wiki",
"config-db-name": "Nombre de la base de datos:",
- "config-db-name-help": "Elija un nombre que identifique su wiki.\nNo debe contener espacios.\n\nSi está utilizando alojamiento web compartido, su proveedor de alojamiento le dará un nombre específico de base de datos para que lo utilice, o bien le permitirá crear bases de datos a través de un panel de control.",
+ "config-db-name-help": "Elige un nombre que identifique tu wiki.\nNo debe contener espacios.\n\nSi estás utilizando alojamiento web compartido, tu proveedor te dará un nombre específico de base de datos para que lo utilices, o bien te permitirá crear bases de datos a través de un panel de control.",
"config-db-name-oracle": "Esquema de la base de datos:",
"config-db-account-oracle-warn": "Hay tres escenarios compatibles para la instalación de Oracle como base de datos back-end:\n\nSi desea crear una cuenta de base de datos como parte del proceso de instalación, por favor suministre una cuenta con función SYSDBA como cuenta de base de datos para la instalación y especifique las credenciales deseadas de la cuenta de acceso al web, de lo contrario puede crear manualmente la cuenta de acceso al web y suministrar sólo esa cuenta (si tiene los permisos necesarios para crear los objetos de esquema) o suministrar dos cuentas diferentes, una con privilegios de creación y otra con acceso restringido a la web\n\nLa secuencia de comandos (script) para crear una cuenta con los privilegios necesarios puede encontrarse en el directorio \"maintenance/oracle/\" de esta instalación. Tenga en cuenta que utilizando una cuenta restringida desactivará todas las capacidades de mantenimiento con la cuenta predeterminada.",
"config-db-install-account": "Cuenta de usuario para instalación",
"config-db-username": "Nombre de usuario de la base de datos:",
"config-db-password": "Contraseña de la base de datos:",
- "config-db-password-empty": "Introduzca una contraseña para el nuevo usuario de base de datos: $1.\nAunque es posible crear usuarios sin contraseña, esto no es seguro.",
- "config-db-username-empty": "Debe introducir un valor para \"{{int:config-db-username}}\"",
- "config-db-install-username": "Introduzca el nombre de usuario que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEste no es el nombre de usuario de la cuenta de MediaWiki; Este es el nombre de usuario para la base de datos.",
- "config-db-install-password": "Introduzca la contraseña que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEsta no es la contraseña para la cuenta de MediaWiki; esta es la contraseña para la base de datos.",
- "config-db-install-help": "Ingresar el nombre de usuario y la contraseña que será usada para conectar a la base de datos durante el proceso de instalación.",
+ "config-db-password-empty": "Escribe una contraseña para el nuevo usuario de base de datos: $1.\nAunque es posible crear usuarios sin contraseña, esto no es seguro.",
+ "config-db-username-empty": "Debes introducir un valor para \"{{int:config-db-username}}\"",
+ "config-db-install-username": "Escribe el nombre de usuario que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEste no es el nombre de usuario de la cuenta de MediaWiki, sino el nombre de usuario para la base de datos.",
+ "config-db-install-password": "Escribe la contraseña que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEsta no es la contraseña para la cuenta de MediaWiki, sino la contraseña para la base de datos.",
+ "config-db-install-help": "Escribe el nombre de usuario y la contraseña que se utilizarán para conectarse a la base de datos durante el proceso de instalación.",
"config-db-account-lock": "Usar el mismo nombre de usuario y contraseña durante operación normal",
"config-db-wiki-account": "Cuenta de usuario para operación normal",
- "config-db-wiki-help": "Introduce el nombre de usuario y la contraseña que serán usados para acceder a la base de datos durante la operación normal del wiki.\nSi esta cuenta no existe y la cuenta de instalación tiene suficientes privilegios, se creará esta cuenta de usuario con los privilegios mínimos necesarios para la operación normal del wiki.",
+ "config-db-wiki-help": "Escribe el nombre de usuario y la contraseña que se utilizarán para acceder a la base de datos durante la operación normal del wiki.\nSi esta cuenta no existe y la cuenta de instalación tiene suficientes privilegios, se creará esta cuenta de usuario con los privilegios mínimos necesarios para la operación normal del wiki.",
"config-db-prefix": "Prefijo de tablas de la base de datos:",
- "config-db-prefix-help": "Si necesita compartir una base de datos entre múltiples wikis, o entre MediaWiki y otra aplicación web, puede optar por agregar un prefijo a todos los nombres de tabla para evitar conflictos.\nNo utilice espacios.\n\nNormalmente se deja este campo vacío.",
+ "config-db-prefix-help": "Si necesitas compartir una base de datos entre múltiples wikis, o entre MediaWiki y otra aplicación web, puedes optar por agregar un prefijo a todos los nombres de tabla para evitar conflictos.\nNo utilices espacios.\n\nNormalmente se deja este campo vacío.",
"config-db-charset": "Conjunto de caracteres de la base de datos",
"config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
"config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
@@ -142,18 +142,18 @@
"config-mysql-old": "Se necesita MySQL $1 o posterior. Tienes $2.",
"config-db-port": "Puerto de la base de datos:",
"config-db-schema": "Esquema para MediaWiki",
- "config-db-schema-help": "Estos esquemas usualmente estarán bien.\nAltéralos sólo si tienes la seguridad de que necesitas hacerlo.",
- "config-pg-test-error": "No se puede conectar a la base de datos '''$1''': $2",
+ "config-db-schema-help": "Este esquema usualmente estará bien.\nCámbialos solo si lo necesitas.",
+ "config-pg-test-error": "No se puede conectar a la base de datos <strong>$1</strong>: $2",
"config-sqlite-dir": "Directorio de datos SQLite:",
- "config-sqlite-dir-help": "SQLite almacena todos los datos en un único archivo.\n\nEl directorio que proporcione debe ser escribible por el servidor Web durante la instalación.\n\n'''No''' debería ser accesible a través de Internet, por eso no vamos a ponerlo en el sitio donde están los archivos PHP.\n\nEl instalador escribirá un archivo <code>.htaccess</code> junto con él, pero si falla alguien podría tener acceso a la base de datos en bloque.\nEso incluye los datos de usuario en bloque (direcciones de correo electrónico, las contraseñas con hash) así como revisiones eliminadas y otros datos restringidos del wiki.\n\nConsidere la posibilidad de poner la base de datos en algún otro sitio, por ejemplo en <code>/var/lib/mediawiki/yourwiki</code> .",
- "config-oracle-def-ts": "Espacio de tablas por defecto:",
+ "config-sqlite-dir-help": "SQLite almacena todos los datos en un único archivo.\n\nEl directorio que proporciones debe poder escribirse por el servidor web durante la instalación.\n\n'''No''' debería ser accesible a través de Internet. Por eso no vamos a ponerlo en el sitio donde están los archivos PHP.\n\nEl instalador escribirá un archivo <code>.htaccess</code> junto con él, pero si falla alguien podría tener acceso a la base de datos en bloque.\nEso incluye los datos de usuario en bloque (direcciones de correo electrónico, las contraseñas con hash) así como revisiones eliminadas y otros datos restringidos del wiki.\n\nConsidera poner la base de datos en algún otro sitio, por ejemplo en <code>/var/lib/mediawiki/tuwiki</code> .",
+ "config-oracle-def-ts": "Espacio de tablas predeterminado:",
"config-oracle-temp-ts": "Espacio de tablas temporal:",
"config-type-mysql": "MySQL (o compatible)",
"config-type-postgres": "PostgreSQL",
"config-type-sqlite": "SQLite",
"config-type-oracle": "Oracle",
"config-type-mssql": "Microsoft SQL Server",
- "config-support-info": "MediaWiki es compatible con los siguientes sistemas de bases de datos:\n\n$1\n\nSi no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones vinculadas arriba para habilitar la compatibilidad.",
+ "config-support-info": "MediaWiki es compatible con los siguientes sistemas de bases de datos:\n\n$1\n\nSi no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones enlazadas arriba para activar la compatibilidad.",
"config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] es la base de datos mayoritaria para MediaWiki y la que goza de mayor compatibilidad. MediaWiki también funciona con [{{int:version-db-mariadb-url}} MariaDB] y [{{int:version-db-percona-url}} Percona Server], que son compatibles con MySQL. ([http://www.php.net/manual/es/mysql.installation.php Cómo compilar PHP con compatibilidad MySQL])",
"config-dbsupport-postgres": "[{{int:version-db-postgres-url}} PostgreSQL] es un sistema de base de datos popular de código abierto, alternativa a MySQL. Pueden haber algunos fallos menores destacables, y no es recomendable para su uso en un entorno de producción. ([http://www.php.net/manual/es/pgsql.installation.php Cómo compilar PHP con compatibilidad PostgreSQL]).",
"config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] es un sistema de base de datos ligero con gran compatibilidad con MediaWiki. ([http://www.php.net/manual/es/pdo.installation.php Cómo compilar PHP con compatibilidad SQLite], usando PDO)",
@@ -165,44 +165,44 @@
"config-header-oracle": "Configuración de Oracle",
"config-header-mssql": "Configuración de Microsoft SQL Server",
"config-invalid-db-type": "El tipo de base de datos no es válido",
- "config-missing-db-name": "Debe introducir un valor para \"{{int:config-db-nombre}}\".",
- "config-missing-db-host": "Debe introducir un valor para \"{{int:config-db-host}}\".",
- "config-missing-db-server-oracle": "Debe introducir un valor para \"{{int:config-db-host-oracle}}\".",
+ "config-missing-db-name": "Debes escribir un valor para \"{{int:config-db-nombre}}\".",
+ "config-missing-db-host": "Debes escribir un valor para \"{{int:config-db-host}}\".",
+ "config-missing-db-server-oracle": "Debes escribir un valor para \"{{int:config-db-host-oracle}}\".",
"config-invalid-db-server-oracle": "El TNS de la base de datos «$1» es inválido.\nDebes usar un \"TNS Name\" o una cadena \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Nomenclatura de Oracle]).",
- "config-invalid-db-name": "El nombre de la base de datos \"$1\" es inválido.\nUsa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_)y guiones (-).",
- "config-invalid-db-prefix": "El prefijo de la base de datos \"$1\" es inválido.\nUse sólo carateres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).",
- "config-connection-error": "$1.\n\nVerifique el servidor, el nombre de usuario y la contraseña, e intente de nuevo.",
+ "config-invalid-db-name": "El nombre de la base de datos \"$1\" no es válido.\nUsa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).",
+ "config-invalid-db-prefix": "El prefijo de la base de datos \"$1\" no es válido.\nUsa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).",
+ "config-connection-error": "$1.\n\nVerifica el servidor, el nombre de usuario y la contraseña, e intenta de nuevo.",
"config-invalid-schema": "El esquema de la base de datos \"$1\" es inválido.\nUse sólo carateres ASCII: letras (a-z, A-Z), guarismos (0-9) y guiones bajos (_).",
"config-db-sys-create-oracle": "El instalador sólo admite el empleo de cuentas SYSDBA como método para crear una cuenta nueva.",
"config-db-sys-user-exists-oracle": "La cuenta de usuario \"$1\" ya existe. ¡SYSDBA sólo puede utilizarse para crear una nueva cuenta!",
- "config-postgres-old": "Se necesita PostgreSQL $1 o una versión más reciente; tienes la versión $2.",
- "config-mssql-old": "Microsoft SQL Server $1 o posterior es necesario. Tienes $2 .",
- "config-sqlite-name-help": "Elige el nombre que identificará tu wiki.\nNo uses espacios o guiones.\nEste nombre será usado como nombre del archivo de datos de SQLite.",
+ "config-postgres-old": "Se requiere PostgreSQL $1 o posterior. Tienes la versión $2.",
+ "config-mssql-old": "Se requiere Microsoft SQL Server $1 o posterior. Tienes la versión $2.",
+ "config-sqlite-name-help": "Elige el nombre que identificará a tu wiki.\nNo uses espacios o guiones.\nEste nombre se usará como nombre del archivo de datos de SQLite.",
"config-sqlite-parent-unwritable-group": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.\n\nEl instalador ha determinado el usuario cuyo servidor Web se está ejecutando.\nConceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haga:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
"config-sqlite-parent-unwritable-nogroup": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.\n\nEl programa de instalación no pudo determinar el usuario que se ejecuta en el servidor Web\nConceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haga:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
"config-sqlite-mkdir-error": "Error al crear el directorio de datos \"$1\".\nComprueba la ubicación e inténtalo de nuevo.",
- "config-sqlite-dir-unwritable": "No se puede escribir en el directorio \"$1\".\nModifica los permisos para que el servidor web pueda escribir en él y vuelve a intentarlo.",
- "config-sqlite-connection-error": "$1.\n\nVerifique el directório de datos y el nombre de la base de datos mostrada a continuación e inténtalo nuevamente.",
+ "config-sqlite-dir-unwritable": "No se puede escribir en el directorio \"$1\".\nModifica sus permisos para que el servidor web pueda escribir en él, y vuelve a intentarlo.",
+ "config-sqlite-connection-error": "$1.\n\nVerifica el directorio de datos y el nombre de la base de datos mostrada a continuación, e inténtalo nuevamente.",
"config-sqlite-readonly": "El archivo <code>$1</code> no se puede escribir.",
"config-sqlite-cant-create-db": "No fue posible crear el archivo de la base de datos <code>$1</code>.",
"config-sqlite-fts3-downgrade": "El PHP no tiene compatibilidad FTS3. actualizando tablas a una versión anterior",
- "config-can-upgrade": "Esta base de datos contiene tablas de MediaWiki.\nPara actualizarlas a MediaWiki $1, haz clic en '''Continuar'''.",
- "config-upgrade-done": "Actualización completa.\n\nUsted puede ahora [ $1 empezar a usar su wiki].\n\nSi desea regenerar su archivo <code>LocalSettings.php</code> de archivo, haga clic en el botón de abajo.\nEsto '''no se recomienda''' a menos que esté teniendo problemas con su wiki.",
- "config-upgrade-done-no-regenerate": "Actualización completa.\n\nUsted puede ahora [$1 empezar a usar su wiki].",
+ "config-can-upgrade": "Esta base de datos contiene tablas de MediaWiki.\nPara actualizarlas a MediaWiki $1, haz clic en <strong>Continuar</strong>.",
+ "config-upgrade-done": "Actualización completa.\n\nYa puedes [$1 empezar a usar tu wiki].\n\nSi quieres regenerar tu archivo <code>LocalSettings.php</code>, haz clic en el botón de abajo.\nEsto <strong>no se recomienda</strong> a menos que estés teniendo problemas con tu wiki.",
+ "config-upgrade-done-no-regenerate": "Actualización completa.\n\nYa puedes [$1 empezar a usar tu wiki].",
"config-regenerate": "Regenerar LocalSettings.php →",
"config-show-table-status": "¡Falló la consulta <code>SHOW TABLE STATUS</code>!",
- "config-unknown-collation": "'''Advertencia:''' La base de datos está utilizando una intercalación no reconocida.",
+ "config-unknown-collation": "<strong>Advertencia:</strong> la base de datos está utilizando una intercalación no reconocida.",
"config-db-web-account": "Cuenta de la base de datos para acceso web",
- "config-db-web-help": "Elige el usuario y contraseña que el servidor Web usará para conectarse al servidor de la base de datos durante el fincionamiento normal del wiki.",
+ "config-db-web-help": "Elige el usuario y contraseña que el servidor web usará para conectarse al servidor de la base de datos durante el funcionamiento normal del wiki.",
"config-db-web-account-same": "Utilizar la misma cuenta que en la instalación",
"config-db-web-create": "Crear la cuenta si no existe",
- "config-db-web-no-create-privs": "La cuenta que has especificado para la instalación no tiene privilegios suficientes para crear una cuenta.\nLa cuenta que especifiques aquí debe existir.",
+ "config-db-web-no-create-privs": "La cuenta que has especificado para la instalación no tiene privilegios suficientes para crear una cuenta.\nLa cuenta que especifiques aquí ya debe existir.",
"config-mysql-engine": "Motor de almacenamiento:",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
- "config-mysql-myisam-dep": "'''Atención''': Ha seleccionado MyISAM como motor de almacenamiento de MySQL, el cual no está recomendado para su uso con MediaWiki, porque:\n * apenas soporta accesos simultáneos debido al bloqueo de tablas\n * es más propenso a la corrupción que otros motores\n * el código MediaWiki no siempre controla MyISAM como debiera\n\nSi su instalación de MySQL soporta InnoDB, es muy recomendable que lo elija en su lugar.\nSi la instalación de MySQL no admite InnoDB, quizás es el momento de una actualización.",
- "config-mysql-only-myisam-dep": "'''Advertencia:''' Solo se ha encontrado el motor de almacenamiento MyISAM para MySQL en esta máquina, y no se recomienda su uso con MediaWiki, porque:\n* apenas soporta concurrencia debido a los bloqueos de tablas\n* es más propenso a sufrir corrupción de datos que otros motores\n* el código MediaWiki no siempre maneja MyISAM como debería\n\nTu instalación de MySQL no soporta InnoDB, quizá vaya siendo hora de actualizarla.",
- "config-mysql-engine-help": "'''InnoDB''' es casi siempre la mejor opción, dado que soporta bien los accesos simultáneos.\n\n'''MyISAM''' es más rápido en instalaciones de usuario único o de sólo lectura.\nLas bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.",
+ "config-mysql-myisam-dep": "<strong>Advertencia:</strong> has seleccionado MyISAM como motor de almacenamiento de MySQL, el cual no está recomendado para usarse con MediaWiki, porque:\n* apenas soporta concurrencia debido al bloqueo de tablas\n* es más propenso a la corrupción que otros motores\n* el código MediaWiki no siempre controla MyISAM como debiera\n\nSi tu instalación de MySQL soporta InnoDB, es muy recomendable que lo elijas en su lugar.\nSi tu instalación de MySQL no soporta InnoDB, quizás es el momento de una actualización.",
+ "config-mysql-only-myisam-dep": "<strong>Advertencia:</strong> solo se ha encontrado el motor de almacenamiento MyISAM para MySQL en esta máquina, y no se recomienda su uso con MediaWiki, porque:\n* apenas soporta concurrencia debido al bloqueo de tablas\n* es más propenso a la corrupción que otros motores\n* el código MediaWiki no siempre controla MyISAM como debiera\n\nTu instalación de MySQL no soporta InnoDB, quizás es el momento de una actualización.",
+ "config-mysql-engine-help": "<strong>InnoDB</strong> es casi siempre la mejor opción, dado que soporta bien los accesos simultáneos.\n\n<strong>MyISAM</strong> puede ser más rápido en instalaciones con usuario único o de sólo lectura.\nLas bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.",
"config-mysql-charset": "Conjunto de caracteres de la base de datos:",
"config-mysql-binary": "Binario",
"config-mysql-utf8": "UTF-8",
@@ -214,33 +214,33 @@
"config-mssql-windowsauth": "Autentificación de Windows",
"config-site-name": "Nombre del wiki:",
"config-site-name-help": "Esto aparecerá en la barra de título del navegador y en varios otros lugares.",
- "config-site-name-blank": "Ingresar un nombre de sitio.",
- "config-project-namespace": "Espacio de nombre de proyecto:",
+ "config-site-name-blank": "Escribe un nombre de sitio.",
+ "config-project-namespace": "Espacio de nombres del proyecto:",
"config-ns-generic": "Proyecto",
"config-ns-site-name": "Igual al nombre del wiki: $1",
"config-ns-other": "Otro (especificar)",
"config-ns-other-default": "MiWiki",
"config-project-namespace-help": "Siguiendo el ejemplo de Wikipedia, muchos wikis mantienen sus páginas de políticas separadas de sus páginas de contenido, en un \"'''espacio de nombres del proyecto'''\".\n\nTodos los títulos de página en este espacio de nombres comienzan con un determinado prefijo, que usted puede especificar aquí.\nTradicionalmente, este prefijo se deriva del nombre del wiki, pero no puede contener caracteres de puntuación como \"#\" o \":\".",
- "config-ns-invalid": "El espacio de nombre especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifica un espacio de nombre de proyecto diferente.",
- "config-ns-conflict": "El espacio de nombres especificado \"<nowiki>$1</nowiki>\" entra en conflicto con un espacio de nombres predeterminado de MediaWiki.\nEspecifique un espacio de nombres de proyecto diferente.",
+ "config-ns-invalid": "El espacio de nombres especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifica uno diferente.",
+ "config-ns-conflict": "El espacio de nombres especificado \"<nowiki>$1</nowiki>\" entra en conflicto con uno predeterminado de MediaWiki.\nEspecifica uno diferente.",
"config-admin-box": "Cuenta de administrador",
"config-admin-name": "Tu nombre de usuario:",
"config-admin-password": "Contraseña:",
"config-admin-password-confirm": "Repite la contraseña:",
"config-admin-help": "Escribe aquí el nombre de usuario que desees, como por ejemplo \"Pedro Bloggs\".\nEste es el nombre que usarás para entrar al wiki.",
- "config-admin-name-blank": "Introduce un nombre de usuario de administrador.",
- "config-admin-name-invalid": "El nombre de usuario especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifique un nombre de usuario diferente.",
- "config-admin-password-blank": "Introduzca una contraseña para la cuenta de administrador.",
+ "config-admin-name-blank": "Escribe un nombre de usuario de administrador.",
+ "config-admin-name-invalid": "El nombre de usuario especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifica un nombre de usuario diferente.",
+ "config-admin-password-blank": "Escribe una contraseña para la cuenta de administrador.",
"config-admin-password-mismatch": "Las dos contraseñas que ingresaste no coinciden.",
"config-admin-email": "Dirección de correo electrónico:",
- "config-admin-email-help": "Introduce aquí un correo electrónico que te permita recibir mensajes de otros usuarios del wiki, vuelve a configurar tu contraseña y recibe notificaciones de cambios realizados a tus páginas vigiladas. Puedes dejar este campo vacío.",
+ "config-admin-email-help": "Escribe aquí una dirección de correo electrónico para que te permita recibir mensajes de otros usuarios del wiki, restablecer tu contraseña y recibir notificaciones de cambios a tus páginas vigiladas. Puedes dejar este campo vacío.",
"config-admin-error-user": "Error interno al crear un administrador con el nombre \"<nowiki>$1</nowiki>\".",
- "config-admin-error-password": "Error interno al establecer una contraseña para el administrador \" <nowiki>$1</nowiki> \": <pre>$2</pre>",
- "config-admin-error-bademail": "Ha introducido una dirección de correo electrónico inválida.",
- "config-subscribe": "Suscribirse para recibir [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce avisos de nuevas versiones].",
+ "config-admin-error-password": "Error interno al establecer una contraseña para el administrador \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
+ "config-admin-error-bademail": "Has escrito una dirección de correo electrónico no válida.",
+ "config-subscribe": "Suscribirse a la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista de correo de anuncios de versiones].",
"config-subscribe-help": "Esta es una lista de divulgación de bajo volumen para anuncios de lanzamiento de versiones nuevas, incluyendo anuncios de seguridad importantes.\nTe recomendamos suscribirte y actualizar tu instalación MediaWiki cada vez que se lance una nueva versión.",
"config-subscribe-noemail": "Ha intentado suscribirse a la lista de correo de anuncios de nuevos lanzamientos sin proporcionar una dirección de correo electrónico.\nProporcione una dirección de correo electrónico si desea suscribirse a la lista de correo.",
- "config-almost-done": "¡Ya casi has terminado!\nAhora puedes saltarte el resto de pasos e instalar el wiki con valores predeterminados.",
+ "config-almost-done": "¡Ya casi has terminado!\nAhora puedes saltarte el resto de los pasos e instalar el wiki ya.",
"config-optional-continue": "Hazme más preguntas.",
"config-optional-skip": "Ya estoy aburrido, sólo instala el wiki.",
"config-profile": "Perfil de derechos de usuario:",
@@ -347,6 +347,6 @@
"config-help-tooltip": "haz clic para ampliar",
"config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
"config-extension-link": "¿Sabías que tu wiki admite [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nPuedes navegar por las [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category categorías] o visitar el [//www.mediawiki.org/wiki/Extension_Matrix centro de extensiones] para ver una lista completa.",
- "mainpagetext": "<strong>MediaWiki se ha instalado con éxito.<strong>",
+ "mainpagetext": "<strong>MediaWiki se ha instalado con éxito.</strong>",
"mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Help:Contents/es guía del usuario] para obtener información sobre el uso del software wiki.\n\n== Primeros pasos ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ/es Preguntas frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de publicación de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traducir MediaWiki en tu idioma]"
}
diff --git a/includes/installer/i18n/et.json b/includes/installer/i18n/et.json
index 8fae026e..a3732a80 100644
--- a/includes/installer/i18n/et.json
+++ b/includes/installer/i18n/et.json
@@ -3,10 +3,13 @@
"authors": [
"Avjoska",
"Pikne",
- "Boxmein"
+ "Boxmein",
+ "Cumbril",
+ "Roland"
]
},
"config-information": "Teave",
+ "config-upgrade-key-missing": "Tuvastati olemasolev MediaWiki install.\nSelle installi täiendamiseks lisa palun järgmine rida faili <code>LocalSettings.php</code> lõppu:\n\n$1",
"config-session-error": "Tõrge seansi alustamisel: $1",
"config-your-language": "Oma keel:",
"config-wiki-language": "Viki keel:",
@@ -23,12 +26,17 @@
"config-page-complete": "Valmis!",
"config-page-restart": "Alusta installimist uuesti",
"config-page-readme": "Loe mind",
+ "config-page-releasenotes": "Redaktsioonimärkmed",
"config-page-copying": "Kopeerimine",
"config-page-upgradedoc": "Uuendamine",
"config-page-existingwiki": "Olemasolev viki",
"config-restart": "Jah, tee taaskäivitus",
+ "config-env-php": "PHP $1 on paigaldatud.",
"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-oracle": "Andmebaasi skeem:",
"config-db-username": "Andmebaasi kasutajanimi:",
"config-db-password": "Andmebaasi parool:",
"config-db-port": "Andmebaasi port:",
@@ -38,7 +46,7 @@
"config-project-namespace": "Projekti nimeruum:",
"config-ns-generic": "Projekt",
"config-admin-box": "Administraatorikonto",
- "config-admin-name": "Sinu nimi:",
+ "config-admin-name": "Sinu kasutajanimi:",
"config-admin-password": "Parool:",
"config-admin-password-confirm": "Parool uuesti:",
"config-admin-name-blank": "Sisesta administraatori kasutajanimi.",
@@ -47,7 +55,11 @@
"config-admin-email": "E-posti aadress:",
"config-admin-error-bademail": "Sisestasid vigase e-posti aadressi.",
"config-optional-continue": "Küsi minult veel küsimusi.",
+ "config-profile-wiki": "Avalik viki",
+ "config-profile-no-anon": "Registreerumine nõutav",
+ "config-profile-fishbowl": "Ainult volitatud kasutajad",
"config-profile-private": "Eraviki",
+ "config-profile-help": "Vikid toimivad kõige paremini siis, kui lased neid redigeerida nii paljudel inimestel kui võimalik.\nMediaWikis on lihtne viimaseid muudatusi üle vaadata ja pöörata tagasi oskamatute või pahatahtlike kasutajate tehtud kahju.\n\nEnt inimesed on leidnud MediaWikile mitmesuguseid erinevaid kasutusvõimalusi ja mõnikord pole lihtne kõiki veenda viki meetodi kasulikkuses. \nSeega on sul valik.\n\n\"<strong>{{int:config-profile-wiki}}</strong>\" annab kõigile redigeerimisvõimaluse isegi sisse logimata.\nMudeli \"<strong>{{int:config-profile-no-anon}}</strong>\" viki tagab lisavastutuse, kuid võib juhuslikud kaastöölised eemale peletada.\n\nStsenaarium \"<strong>{{int:config-profile-fishbowl}}</strong>\" võimaldab redigeerida heaks kiidetud kasutajatel, kuid avalikkus saab lehekülgi ja nende ajalugu vaadata.\n\"<strong>{{int:config-profile-private}}</strong>\" laseb vaid heaks kiidetud kasutajatel lehekülgi vaadata ja samadel kasutajatel on õigus lehekülgi redigeerida.\n\nPärast paigaldamist on kasutajaõigusi võimalik täpsemalt häälestada, vaata [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights kasutusjuhendi vastavat kohta].",
"config-license": "Autoriõigus ja litsents:",
"config-license-none": "Litsentsijaluseta",
"config-license-cc-by-sa": "Creative Commonsi litsents \"Autorile viitamine + jagamine samadel tingimustel\"",
diff --git a/includes/installer/i18n/eu.json b/includes/installer/i18n/eu.json
index 4b32743c..baab24aa 100644
--- a/includes/installer/i18n/eu.json
+++ b/includes/installer/i18n/eu.json
@@ -30,6 +30,7 @@
"config-restart": "Bai, berriz hasi",
"config-sidebar": "* [//www.mediawiki.org MediaWiki nagusia]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Erabiltzaileentzako Gida]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administratzaileentzako Gida]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MEG]\n----\n* <doclink href=Readme>Irakur nazazu</doclink>\n* <doclink href=ReleaseNotes>Oharren argitalpena</doclink>\n* <doclink href=Copying>Kopiaketa</doclink>\n* <doclink href=UpgradeDoc>Eguneratzea</doclink>",
"config-env-php": "PHP $1 instalatuta dago.",
+ "config-env-hhvm": "HHVM $1 instalatuta dago.",
"config-xcache": "[http://xcache.lighttpd.net/ XCache] instalatuta dago",
"config-apc": "[http://www.php.net/apc APC] instalatuta dago",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] instalatuta dago",
@@ -41,10 +42,11 @@
"config-db-password": "Datu-base pasahitza:",
"config-charset-mysql5-binary": "MySQL 4.1/5.0 bitarra",
"config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
- "config-type-mysql": "MySQL",
+ "config-type-mysql": "MySQL (edo bateragarria)",
"config-type-postgres": "PostgreSQL",
"config-type-sqlite": "SQLite",
"config-type-oracle": "Oracle",
+ "config-type-mssql": "Microsoft SQL Server",
"config-header-mysql": "MySQL hobespenak",
"config-header-postgres": "PostgreSQL hobespenak",
"config-header-sqlite": "SQLite hobespenak",
@@ -67,6 +69,7 @@
"config-profile-wiki": "Wikia ireki",
"config-profile-private": "Wiki pribatua",
"config-license": "Copyright eta lizentzia:",
+ "config-license-cc-0": "Creative Commons Zero (Jabari Publikoa)",
"config-license-pd": "Domeinu Askea",
"config-email-settings": "E-posta hobespenak",
"config-logo": "Logo URL:",
diff --git a/includes/installer/i18n/fa.json b/includes/installer/i18n/fa.json
index 02ffd0d1..6452fc6e 100644
--- a/includes/installer/i18n/fa.json
+++ b/includes/installer/i18n/fa.json
@@ -7,7 +7,8 @@
"Omidh",
"Pouyana",
"Reza1615",
- "Alirezaaa"
+ "Alirezaaa",
+ "Danialbehzadi"
]
},
"config-desc": "نصب کنندهٔ ویکی‌مدیا",
@@ -47,17 +48,16 @@
"config-help-restart": "آیا می‌خواهید همهٔ اطلاعات ذخیره شده‌ای که وارد کرده‌اید را پاک کنید و دوباره روند نصب را شروع کنید؟",
"config-restart": "بله، دوباره راه‌اندازی کن",
"config-welcome": "===بررسی‌های محیطی===\nبرای فهمیدن اینکه این محیط برای نصب مدیاویکی مناسب است، اکنون بررسی‌های اساسی انجام خواهد‌شد.\nاگر به دنبال پشتیبانی در چگونگی تکمیل نصب هستید،به یاد داشته باشید این اطلاعات را بگنجانید.",
- "config-copyright": "===حق چاپ و شرایط===\n$1\nاین برنامه،نرم‌افزاری آزاد است;شما می‌توانید این برنامه را دوباره توزیع کنید و/یا تحت شرایط مجوز عمومی کلی جی‌ان‌یو که توسط بنیاد نرم‌افزار آزاد منتشر شده،اصلاح کنید;یا نسخهٔ 2 مجوز، یا (به انتخاب خود) هر نسخهٔ پس از این.\nاین برنامه به امید اینکه مفید واقع‌ شود توزیع شده‌است،اما '''بدون هیچ ضمانتی'''; حتی بدون اشارهٔ ضمانتی از '''قابلیت عرضه''' یا ''' صلاحیت برای یک هدف خاص'''.\nبرای جزئیات بیشتر مجوز عمومی کلی جی‌ان‌یو را مشاهده کنید.\nشما باید <doclink href=Copying> یک چاپ ازمجوز عمومی کلی </doclink> همراه این برنامه دریافت کنید; اگر دریافت نکردید،به بنیاد نرم‌افزار آزاد بنویسید،Inc.،خیابان فرانکلین۵۱،طبقه پنجم،بوستون، MA۰۲۱۱۰-۱۳۰،آمریکا،یا [http://www.gnu.org/copyleft/gpl.html read it online].",
+ "config-copyright": "===حق چاپ و شرایط===\n$1\nاین برنامه، یک نرم‌افزاری آزاد است. شما می‌توانید آن را بازتوزیع کرده و/یا با شرایط نگارش ۲ یا (با نظر خودتان) هر نگارش جدیدتری از پروانه جامع همگانی گنو که توسط بنیاد نرم‌افزار آزاد منتشر شده، تغییر دهید.\n\nاین برنامه با امید این که مفید واقع‌ شود توزیع شده‌است،اما '''بدون هیچ ضمانتی'''; حتی بدون اشارهٔ ضمانتی از '''قابلیت عرضه''' یا ''' صلاحیت برای یک هدف خاص'''.\nبرای جزئیات بیش‌تر پروانه جامع همگانی گنو را مشاهده کنید.\n\nشما باید <doclink href=Copying> یک نگارش ازمجوز عمومی کلی </doclink> همراه این برنامه دریافت کرده باشید. در غیر این صورت با بنیاد نرم‌افزار آزاد، ایالات متحده امریکا، بوستون، خیابان فرانکلین، پلاک ۵۱، طبقه پنجم، صندوق پستی MA۰۲۱۱۰-۱۳۰ مکاتبه کنید، یا [http://www.gnu.org/copyleft/gpl.html در این‌جا به صورت برخط بخوانید].",
"config-sidebar": "* [//www.mediawiki.org صفحهٔ اصلی مدیاویکی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents راهنمای کاربر]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents راهنمای مدیر]\n* [//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": "محیط بررسی شده‌است.\nشما می‌توانید مدیاویکی را نصب کنید.",
"config-env-bad": "محیط بررسی شده‌است.\nشما نمی‌توانید مدیاویکی را نصب کنید.",
"config-env-php": "پی‌اچ‌پی $1 نصب شده‌است.",
"config-env-hhvm": "HHVM $1 نصب شده‌است.",
- "config-unicode-using-utf8": "برای یونیکد عادی از Brion Vibber's utf8_normalize.so استفاده کنید.",
"config-unicode-using-intl": "برای یونیکد عادی از [http://pecl.php.net/intl intl PECL extension] استفاده کنید.",
"config-unicode-pure-php-warning": "'''هشدار:''' [http://pecl.php.net/intl intl PECL extension] برای کنترل یونیکد عادی در دسترس نیست،اجرای کاملاً آهسته به تعویق می‌افتد.\nاگر شما یک سایت پر‌ ترافیک را اجرا می‌کنید، باید کمی [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization] را بخوانید.",
"config-unicode-update-warning": "'''هشدار:''' نسخهٔ نصب شدهٔ پوشهٔ یونیکد عادی از ورژن قدیمی‌تر کتابخانه [http://site.icu-project.org/ the ICU project's] استفاده می‌کند.\nاگر کلاً علاقه‌مند به استفاده از یونیکد هستید باید [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations upgrade].",
- "config-no-db": "درایور پایگاه اطلاعاتی مناسب پیدا نشد! شما لازم دارید یک درایور پایگاه اطلاعاتی برای پی‌اچ‌پی نصب کنید.انواع پایگاه اطلاعاتی زیر پشتیبانی شده‌اند:$1.\nاگر شما در گروه اشتراک‌گذاری هستید، از تهیه کنندهٔ گروه خود برای نصب یک درایور پایگاه اطلاعاتی مناسب سوأل کنید.\nاگر خود، پی‌اچ‌پی را تهیه کرده‌اید، با یک پردازشگر فعال دوباره پیکربندی کنید، برای مثال از <code>./configure --with-mysql</code> استفاده کنید.\nاگر پی‌اچ‌پی را از یک بستهٔ دبیان یا آبونتو نصب کرده‌اید، بنابراین لازم دارید بخش php5-mysql را نصب کنید.",
+ "config-no-db": "درایور پایگاه اطلاعاتی مناسب پیدا نشد! شما لازم دارید یک درایور پایگاه اطلاعاتی برای پی‌اچ‌پی نصب کنید.انواع پایگاه اطلاعاتی زیر پشتیبانی شده‌اند:$1.\nاگر شما در گروه اشتراک‌گذاری هستید، از تهیه کنندهٔ گروه خود برای نصب یک درایور پایگاه اطلاعاتی مناسب {{PLURAL:$2|سوأل کنید.|سوأل کنید.}}\nاگر خود، پی‌اچ‌پی را تهیه کرده‌اید، با یک پردازشگر فعال دوباره پیکربندی کنید، برای مثال از <code>./configure --with-mysql</code> استفاده کنید.\nاگر پی‌اچ‌پی را از یک بستهٔ دبیان یا آبونتو نصب کرده‌اید، بنابراین لازم دارید بخش php5-mysql را نصب کنید.",
"config-outdated-sqlite": "''' هشدار:''' شما اس‌کیولایت $1 دارید، که پایین‌تر از حداقل نسخهٔ $2 مورد نیاز است.اس‌کیولایت در دسترس نخواهد بود.",
"config-no-fts3": "'''هشدار:''' اس‌کیولایت بدون [//sqlite.org/fts3.html FTS3 module] تهیه شده‌است ، جستجوی ویژگی‌ها در این بخش پیشین در دسترس نخواهد‌بود.",
"config-register-globals-error": "<strong>خطا: پی‌اچ‌پی<code>[http://php.net/register_globals register_globals]</code> گزینه فعال است.\nبرای ادامه نصب باید غیر فعال باشد.</strong>\n[Https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] را برای کمک در مورد نحوه انجام این کار ببینید.",
@@ -102,7 +102,7 @@
"config-db-name": "نام پایگاه اطلاعاتی:",
"config-db-name-help": "نامی را انتخاب کنید که ویکی شما را شناسایی کند.\nنباید شامل فاصله باشد.\nاگر از گروه شبکهٔ اشتراک‌گذاری استفاده می‌کنید، تهیه‌کنندهٔ گروهتان یا باید به شما نام یک پایگاه اطلاعاتی مشخص برای استفاده بدهد یا برای ایجاد پایگاه‌های اطلاعاتی از طریق یک کنترل پنل به شما اجازه بدهد.",
"config-db-name-oracle": "طرح کلی پایگاه اطلاعاتی:",
- "config-db-account-oracle-warn": "برای نصب برنامهٔ اوراکل به‌عنوان پایگاه اطلاعاتی در بخش گذشته،سه سناریو پشتیبانی شده است:\nاگر مایل به ایجاد حساب پایگاه اطلاعاتی به عنوان بخشی از روند نصب هستید، لطفاً یک حساب با نقش اس‌وای‌اس‌دی‌بی‌ای به عنوان حساب پایگاه اطلاعاتی برای نصب تهیه کنید و اعتبارنامه‌های مطلوبی را برای حساب دردسترس شبکه تعیین کنید، به عبارتی دیگر یا می‌توانید حساب دردسترس شبکه را به طور دستی ایجاد کنید و تنها آن حساب را تهیه کنید (اگر مستلزم مجوزهایی برای ایجاد موضوعات طرح کلی باشد) یا دو حساب دیگر تهیه کنید،یکی با ایجاد مزایا و یک حساب محدود برای دسترسی شبکه.\nمتنی برای ایجاد یک حساب با مزایای لازم بنویسید که می‌تواند در فهرست\"نگهداری/برنامهٔ اوراکل\" این نصب یافت شود. به یاد داشته باشید که استفاده از یک حساب محدود،همهٔ قابلیت‌های نگهداری با حساب پیش‌فرض را غیرفعال خواهد کرد.",
+ "config-db-account-oracle-warn": "برای نصب برنامهٔ اوراکل به عنوان پایگاه اطلاعاتی در بخش گذشته،سه سناریو پشتیبانی شده است:\nاگر مایل به ایجاد حساب پایگاه اطلاعاتی به عنوان بخشی از روند نصب هستید، لطفاً یک حساب با نقش اس‌وای‌اس‌دی‌بی‌ای به عنوان حساب پایگاه اطلاعاتی برای نصب تهیه کنید و اعتبارنامه‌های مطلوبی را برای حساب دردسترس شبکه تعیین کنید، به عبارتی دیگر یا می‌توانید حساب دردسترس شبکه را به طور دستی ایجاد کنید و تنها آن حساب را تهیه کنید (اگر مستلزم مجوزهایی برای ایجاد موضوعات طرح کلی باشد) یا دو حساب دیگر تهیه کنید،یکی با ایجاد مزایا و یک حساب محدود برای دسترسی شبکه.\nمتنی برای ایجاد یک حساب با مزایای لازم بنویسید که می‌تواند در فهرست\"نگهداری/برنامهٔ اوراکل\" این نصب یافت شود. به یاد داشته باشید که استفاده از یک حساب محدود،همهٔ قابلیت‌های نگهداری با حساب پیش‌فرض را غیرفعال خواهد کرد.",
"config-db-install-account": "حساب کاربری برای نصب",
"config-db-username": "نام کاربری پایگاه اطلاعات:",
"config-db-password": "گذرواژه پایگاه داده‌ها:",
@@ -127,7 +127,7 @@
"config-db-schema-help": "طرح کلی اغلب بی‌نقص خواهد بود.\nاگر می‌دانید نیاز دارید که تغییرش دهید،آن را تغییر دهید.",
"config-pg-test-error": "نمی‌توان به پایگاه اطلاعاتی '''$1''' وصل شد: $2",
"config-sqlite-dir": "فهرست اطلاعات اس‌کیو‌لایت:",
- "config-sqlite-dir-help": "اس‌کیولایت همهٔ اطلاعات را در یک پوشهٔ جداگانه ذخیره می‌کند.\nفهرستی را که به وجود‌ آوردید باید در طی نصب به‌ وسیلهٔ وب‌سرور قابل نوشتن باشد.\nنباید از طریق وب در دسترس باشد،به همین دلیل ما آن را در جایی که پوشه‌های پی‌اچ‌پی شما هست، قرار نمی‌دهیم.\nنصب کننده یک پوشهٔ <code>.htaccess</code> همراه آن خواهدآورد،اما اگر این کار را انجام ندهد،کسی می‌تواند به پایگاه اطلاعاتی شما دسترسی پیدا کند.\nاطلاعات خام کاربر شامل (آدرس‌های رایانامه،علامت‌‌ها با شماره‌های رمز عبور) به خوبی پاک کردن تغییرات و دیگر اطلاعات محرمانه در ویکی.\nقرار دادن پایگاه اطلاعاتی باهم را در جایی دیگر در نظر بگیرید، برای مثال در <code>/var/lib/mediawiki/yourwiki</code>.",
+ "config-sqlite-dir-help": "اس‌کیولایت همهٔ اطلاعات را در یک پوشهٔ جداگانه ذخیره می‌کند.\nفهرستی را که به وجود‌ آوردید باید در طی نصب به‌ وسیلهٔ وب‌سرور قابل نوشتن باشد.\n<strong>نباید</strong> از طریق وب در دسترس باشد، به همین دلیل ما آن را در جایی که پوشه‌های پی‌اچ‌پی شما هست، قرار نمی‌دهیم.\nنصب کننده یک پوشهٔ <code>.htaccess</code> همراه آن خواهدآورد،اما اگر این کار را انجام ندهد،کسی می‌تواند به پایگاه اطلاعاتی شما دسترسی پیدا کند.\nاطلاعات خام کاربر شامل (آدرس‌های ایمیل، علامت‌‌ها با شماره‌های رمز عبور) به خوبی پاک کردن تغییرات و دیگر اطلاعات محرمانه در ویکی.\nقرار دادن پایگاه اطلاعاتی باهم را در جایی دیگر در نظر بگیرید، برای مثال در <code>/var/lib/mediawiki/yourwiki</code>.",
"config-oracle-def-ts": "جدول پیش فرض:",
"config-oracle-temp-ts": "جدول موقت:",
"config-type-mysql": "مای‌اس‌کیو‌ال (یا سازگار)",
@@ -211,21 +211,21 @@
"config-admin-name-invalid": "نام کاربری تعیین شدهٔ \"<nowiki>$1</nowiki>\" نامعتبر است.\nیک نام کاربری دیگر تعیین کنید.",
"config-admin-password-blank": "برای حساب سرپرست یک رمز عبور وارد کنید.",
"config-admin-password-mismatch": "دو رمز عبوری که وارد کرده‌اید با هم مطابقت ندارند.",
- "config-admin-email": "رایانامهٔ شما:",
- "config-admin-email-help": "یک آدرس رایانامه برای اجازهٔ دریافت رایانامه از دیگر کاربران ویکی،اینجا وارد کنید، رمز عبور خود را دوباره تنظیم کنید، و از تغییرات صفحه در فهرست پیگیریها مطلع باشید.می‌توانید این زمینه را خالی بگذارید.",
+ "config-admin-email": "آدرس ایمیل:",
+ "config-admin-email-help": "یک آدرس ایمیل برای اجازهٔ دریافت ایمیل از دیگر کاربران ویکی، اینجا وارد کنید، رمز عبور خود را دوباره تنظیم کنید، و از تغییرات صفحه در فهرست پیگیری‌ها مطلع باشید. می‌توانید این بخش را خالی بگذارید.",
"config-admin-error-user": "خطای داخلی هنگام ایجاد یک مدیر با نام \"<nowiki>$1</nowiki>\".",
"config-admin-error-password": "خطای داخلی هنگام تنظیم یک رمز عبور برای مدیر \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
- "config-admin-error-bademail": "شما آدرس رایانامهٔ نامعتبر وارد کرده‌اید.",
+ "config-admin-error-bademail": "شما آدرس ایمیل نامعتبر وارد کرده‌اید.",
"config-subscribe": "عضویت در [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release announcements mailing list].",
"config-subscribe-help": "این یک میلینگ لیست کم حجم است که برای اطلاع‌رسانی کاربرد دارد و شامل اطلاعیه‌های امنیتی می‌شود.\nشما باید در آن ثبت نام کنید و زمانی که نسخهٔ جدید مدیاویکی ارائه شد آن را به‌روز نمائید.",
- "config-subscribe-noemail": "شما بدون ثبت رایانامه‌تان قصد داشتید در فهرست پستی ثبت‌نام کنید.\nاگر قصد ثبت‌نام دارید لطفاً رایانامه‌ای مشخص کنید.",
+ "config-subscribe-noemail": "شما بدون ثبت آدرس ایمیل قصد داشتید در فهرست ایمیل‌رسانی ثبت‌نام کنید.\nاگر قصد ثبت‌نام دارید لطفاً ایمیلی مشخص کنید.",
"config-almost-done": "شما تقریباً عملیات را کامل کرده‌اید.\nاکنون می‌توانید پیکربندی باقیمانده را نخوانده رها کنید و درحال‌حاضر ویکی را نصب کنید.",
"config-optional-continue": "سوال‌های بیشتری از من بپرسید.",
"config-optional-skip": "درحال‌حاضر خسته‌ام،سریعاً ویکی را نصب کنید.",
"config-profile": "شرح‌حال حقوق کاربر:",
"config-profile-wiki": "بازکردن ویکی",
"config-profile-no-anon": "ساخت کاربری مورد نیاز است",
- "config-profile-fishbowl": "فقط کاربر تأیید شده",
+ "config-profile-fishbowl": "فقط کاربر مجاز",
"config-profile-private": "ویکی خصوصی",
"config-profile-help": "زمانی ویکی درست کار می کند که شما اجازه دهید تعداد زیادی از مردم آن را ویرایش کنند.\nدر مدیاویکی امکان مشاهدهٔ تغییرات اخیر و واگردانی ویرایش‌های خرابکاری به آسانی وجود دارد.\n\nبا وجودی که مدیا ویکی منافع بسیاری برای مردم دارد ولی متقاعد کردن خیلی از مردم درباره روش کار ویکی‌ها کار آسانی نیست.\n\nدر نتیجه شما دو انتخاب دارید.\n\n'''{{int:config-profile-wiki}}''' به همه کاربرها اجازهٔ ویرایش می دهد حتی بدون ثبت‌نام.\n\nیک ویکی که دارای '''{{int:config-profile-no-anon}}''' باشد امکانات کاربری بیشتری ارائه می‌دهد ولی امکان دارد ویرایشگران عادی را نگران کند.\n\nسناریوی '''{{int:config-profile-fishbowl}}''' به کاربرها اجازهٔ ویرایش می دهد ولی همه می توانند متن و تاریخچه را ببیند.\n\n'''{{int:config-profile-private}}''' فقط به کاربران اجازهٔ مشاهدهٔ مطالب را می‌دهد و فقط آنها می توانند ویرایش کنند.\n\nدسترسی‌های بیشتر کاربری بعد از نصب در [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights راهنماهای مرتبط] موجود است.",
"config-license": "حق تکثیر و مجوز:",
@@ -238,19 +238,19 @@
"config-license-pd": "مالکیت عمومی",
"config-license-cc-choose": "انتخاب یک مجوز سفارشی عوام خلاق",
"config-license-help": "بسیاری از وبگاه‌ها ویرایش‌های ها را با [http://freedomdefined.org/Definition اجازه‌نامهٔ آزاد] منتشر می‌کنند.\nاین کار به داشتن حس مالکیت جمعی کمک می‌کند و ویرایش‌های طولانی مدت را اشاعه می‌دهد.\nاین برای ویکی‌های خصوصی یا سازمانی الزامی نیست.\n\nاگر شما می‌خواهید از متون ویکی‌پدیا استفاده کنید، یا اینکه به ویکی‌پدیا اجازه دهید از متون شما استفاده کند باید متون خود را با <strong>{{int:config-license-cc-by-sa}}</strong> منتشر کنید.\n\nویکی‌پدیا در گذشته از اجازه‌نامهٔ داده‌های آزاد گنو استفاده می‌کرد.\nاین اجازه‌نامه مورد قبول است، ولی فهم آن آسان نیست.\nهمچنین استفادهٔ دوباره از متون تحت اجازه‌نامهٔ داده‌های آزاد گنو به سختی انجام می‌گیرد.",
- "config-email-settings": "تنظیمات رایانامه",
- "config-enable-email": "فعال‌سازی رایانامهٔ خروجی",
- "config-enable-email-help": "اگر برای کار کردن رایانامه می‌خواهید [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] نیازمند پیکربندی صحیح است.\nاگر هیچ ویژگی رایانامه را نمی‌خواهید، می‌توانید آنها را اینجا غیر‌فعال کنید.",
- "config-email-user": "فعال‌کردن رایانامهٔ کاربر به کاربر",
- "config-email-user-help": "به همهٔ کاربرانی که ارسال رایانامه را در اولویت‌های خود فعال کرده‌اند،اجازه خواهد داده‌شد که رایانامه خود را به یکدیگر ارسال کنند.",
+ "config-email-settings": "تنظیمات ایمیل",
+ "config-enable-email": "فعال‌سازی ایمیل خروجی",
+ "config-enable-email-help": "اگر می‌خواهید ارسال ایمیل کار کند، [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] نیازمند پیکربندی صحیح است.\nاگر هیچ قابلیت ایمیلی نمی‌خواهید، می‌توانید آنها را اینجا غیر‌فعال کنید.",
+ "config-email-user": "فعال‌کردن ایمیل کاربر به کاربر",
+ "config-email-user-help": "به همهٔ کاربرانی که ارسال ایمیل را در ترجیحات خود فعال کرده‌اند، اجازه داده خواهد شد که به یکدیگر ایمیل ارسال کنند.",
"config-email-usertalk": "فعال‌کردن اطلاع‌رسانی صفحهٔ بحث کاربر",
"config-email-usertalk-help": "به همهٔ کاربرانی که دریافت اطلاعیه را در اولویت‌های خود فعال کرده‌اند،اجازه خواهد داده‌شد که اطلاعیه‌ها را در صفحهٔ تغییر گفت‌وگوی کاربر دریافت کنند.",
"config-email-watchlist": "فعال‌کردن اطلاع‌رسانی فهرست پیگیری‌ها",
"config-email-watchlist-help": "به همهٔ کاربرانی که مشاهدهٔ صفحه را در اولویت‌های خود فعال کرده‌اند،اجازه خواهد داده‌شد که اطلاعیه‌های در رابطه با صفحات مشاهده شده را دریافت کنند.",
- "config-email-auth": "فعال‌کردن تأیید اعتبار رایانامه",
- "config-email-auth-help": "اگر این مورد را فعال کنید، کاربران باید رایانامه خود را با استفاده از پیوند تأییدهٔ که به رایانامه‌یشان فرستاده می‌شود، تأیید کنند. \nدر این صورت تنها رایانامه‌هایی که تأیید شده‌باشند، می‌توانند از سامانه در هنگام تغییرات رایانامه دریافت کنند.\nبرای ویکی‌هایی که به صورت عمومی استفاده می‌شوند، فعال‌کردن این گزینه پیشنهاد می‌شود.",
- "config-email-sender": "بازگشت به رایانامه:",
- "config-email-sender-help": "آدرس رایانامه‌ای را وارد کنید که هنگام مراجعت آدرس به رایانامهٔ خارجی استفاده می‌شود.\nبه جایی که پیام‌ها برگشت داده می‌شوند، فرستاده خواهد‌شد.\nبسیاری از سرورهای پستی حداقل به بخش نام عمومی معتبر نیاز دارند.",
+ "config-email-auth": "فعال کردن احراز هویت توسط ایمیل",
+ "config-email-auth-help": "اگر این گزینه را فعال کنید، کاربران باید ایمیل خود را با استفاده از پیوند تأیید که به ایمیلشان ارسال می‌شود، تأیید کنند. \nدر این صورت تنها ایمیل‌هایی که تأیید شده باشند، می‌توانند از سیستم در هنگام تغییرات، ایمیل دریافت کنند.\nبرای ویکی‌هایی که به صورت عمومی استفاده می‌شوند، فعال‌کردن این گزینه پیشنهاد می‌شود.",
+ "config-email-sender": "آدرس ایمیل بازگشت:",
+ "config-email-sender-help": "آدرس ایمیلی را وارد کنید که هنگام ارسال ایمیل خارج از محدوده از آن به عنوان ایمیل بازگشت استفاده شود.\nبه جایی که پیام‌ها برگشت داده می‌شوند، فرستاده خواهد شد.\nبسیاری از سرورهای پستی حداقل به بخش نام عمومی معتبر نیاز دارند.",
"config-upload-settings": "بارگذاری‌های پرونده و تصویر",
"config-upload-enable": "فعال‌سازی بارگذاری پرونده",
"config-upload-help": "بارگذاری پرونده بصورت بالقوه می‌تواند کارساز شما در معرض خطرات امنیتی قرار بدهد. برای کسب اطلاعات بیشتر لطفاً [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security قسمت امنیتی] را مطالعه کنید.\n\nبرای اجازه‌دادن به بارگذاری پرونده‌ها٬ حالت زیر مجموعه <code>images</code> در پوشه ریشه مدیاویکی را تغییر دهید که کارسازهای وب قادر به نوشتن بر روی آن باشند. سپس این قابلیت را فعال کنید.",
diff --git a/includes/installer/i18n/fi.json b/includes/installer/i18n/fi.json
index c40544df..6b01b61f 100644
--- a/includes/installer/i18n/fi.json
+++ b/includes/installer/i18n/fi.json
@@ -13,7 +13,10 @@
"Elseweyr",
"Lliehu",
"Syreeni",
- "Stryn"
+ "Stryn",
+ "SMAUG",
+ "SuperPete",
+ "McSalama"
]
},
"config-desc": "MediaWiki-asennin",
@@ -68,17 +71,32 @@
"config-apc": "[http://www.php.net/apc APC] on asennettu.",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] on asennettu",
"config-diff3-bad": "GNU diff3:a ei löytynyt.",
+ "config-git": "Löydetty Git versionhallintaohjelmisto: <code>$1</code>",
+ "config-git-bad": "Git versionhallintaohjelmistoa ei löydy.",
"config-imagemagick": "Löydettiin ImageMagick: <code>$1</code>.\nKuvien esikatselukuvat otetaan samalla käyttöön jos otetaan tiedostojen tallennus.",
+ "config-gd": "Löydettiin sisäänrakennettu GD-grafiikkakirjasto.\nKuvista luodaan esikatseluversiot automaattisesti, jos otat käyttöön tiedostojen lähettämisen.",
+ "config-no-scaling": "GD-kirjastoa tai ImageMagick-ohjelmaa ei löydy. \nKuvista ei luoda esikatseluversioita.",
+ "config-no-uri": "Virhe: Tämänhetkistä URIa ei tunnisteta. Asennus keskeytetään.",
+ "config-no-cli-uri": "<strong>Varoitus:</strong> <code>--scriptpath</code> määrittämättä, käytetään oletusta: <code>$1</code>",
"config-using-server": "Palvelimen nimenä käytetään \"<nowiki>$1</nowiki>\".",
"config-using-uri": "Palvelinen URL-osoitteena käytetään \"<nowiki>$1$2</nowiki>\".",
+ "config-uploads-not-safe": "<strong>Varoitus:</strong> Tiedostojen lähetyshakemistoa <code>$1</code> ei ole suojattu haitalliselta koodilta. MediaWiki tarkistaa kaikki lähetetyt tiedostot, mutta suosittelemme toimimaan ohjeen [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security close this security vulnerability] mukaan ennen kuin tiedostojen lähetys otetaan käyttöön.",
+ "config-no-cli-uploads-check": "<strong>Varoitus:</strong> Tiedostojen lähetyshakemistoa (<code>$1</code>) ei ole tarkistettu haavoittuvuuksien varalta komentoriviasennuksen aikana.",
+ "config-brokenlibxml": "Järjestelmässäsi on käytössä PHP:n ja libxml2:n versioyhdistelmä, joka ei toimi kunnolla ja voi aiheuttaa tiedon vahingoittumista MediaWikissä ja muissa web-sovelluksissa.\nPäivitä libxml2 versioon 2.7.3 tai uudempaan ([https://bugs.php.net/bug.php?id=45996 bug filed with PHP]).\nAsennus keskeytetty.",
+ "config-suhosin-max-value-length": "Suhosin on asennettu ja se rajoittaa GET-parametrin <code>length</code> $1 tavuun.\nMediaWikin ResourceLoader-komponentti pystyy toimimaan tämän kanssa, mutta ohjelmiston suorituskyky heikkenee.\nMikäli mahdollista, aseta muuttuja <code>suhosin.get.max_value_length</code> arvoon 1024 (tai suurempaan) tiedostossa <code>php.ini</code> ja aseta myös <code>$wgResourceLoaderMaxQueryLength</code> samaksi arvoksi tiedostossa <code>LocalSettings.php</code>.",
"config-db-type": "Tietokannan tyyppi",
"config-db-host": "Tietokantapalvelin",
+ "config-db-host-help": "Jos tietokantapalvelimesi sijaitsee eri palvelimella, syötä palvelimen nimi tai ip-osoite tähän.\n\nJos käytössäsi on ulkoinen palveluntarjoaja, pitäisi palvelimen nimen löytyä yrityksen ohjesivuilta.\n\nJos asennat MediaWikiä Windows-palvelimelle ja käytät MySQL:ää ei palvelimen nimi \"localhost\" välttämättä toimi. Tässä tapauksessa koita käyttää osoitetta 127.0.0.1.\n\nJos käytät PostgreSQL:ää jätä tämä kenttä tyhjäksi.",
+ "config-db-host-oracle": "Tietokannan TNS:",
"config-db-wiki-settings": "Identifioi tämä wiki",
"config-db-name": "Tietokannan nimi",
+ "config-db-name-help": "Valitse wikiäsi kuvaava nimi.\nNimessä ei saa olla välilyöntejä.\n\nMikäli et pysty itse hallitsemaan tietokantojasi, pyydä palveluntarjoajaasi luomaan tietokanta tai tee se palveluntarjoajasi hallintapaneelissa.",
+ "config-db-name-oracle": "Tietokannan rakenne:",
"config-db-install-account": "Asennuksessa käytettävä käyttäjätili",
"config-db-username": "Tietokannan käyttäjätunnus",
"config-db-password": "Tietokannan salasana",
"config-db-password-empty": "Syötä salasana uudelle tietokannan käyttäjälle: $1.\nVaikka käyttäjä voidaan luoda ilman salasanaa, se ei ole turvallista.",
+ "config-db-username-empty": "Syötä arvo tiedolle \"{{int:config-db-username}}\".",
"config-db-install-username": "Syötä käyttäjänimi jota käytetään muodostettaessa yhteys tietokantaan asennuksen aikana.\nTämä ei ole MediaWiki tilin käyttäjänimi; tämä on tietokannan käyttäjänimi.",
"config-db-install-password": "Syötä salasana jota käytetään muodostettaessa yhteys tietokantaan asennuksen aikana.\nTämä ei ole MediaWiki tilin salasana; tämä on tietokannan salasana.",
"config-db-install-help": "Anna käyttäjätunnus ja salasana, joita käytetään asennuksen aikana.",
@@ -93,11 +111,18 @@
"config-charset-mysql4": "MySQL 4.0, taaksepäin yhteensopiva UTF-8",
"config-mysql-old": "MediaWiki tarvitsee MySQL:n version $1 tai uudemman. Nykyinen versio on $2.",
"config-db-port": "Tietokannan portti:",
+ "config-db-schema": "MediaWikin rakenne:",
+ "config-db-schema-help": "Tämä rakenne on normaalisti toimiva.\nMuuta rakennetta vain, mikäli on pakko ja tiedät, mitä teet.",
"config-pg-test-error": "Tietokantaan <strong>$1 ei voida muodostaa yhteyttä</strong>: $2",
+ "config-sqlite-dir": "SQLiten datahakemisto:",
+ "config-sqlite-dir-help": "SQLite tallentaa kaiken sisällön yhteen tiedostoon.\n\nPalvelimen pitää pystyä kirjoittamaan tietoa hakemistoon asennuksen aikana.\n\nHakemiston <strong>ei</strong> tulisi olla nähtävissä www-selaimella. Siksi hakemisto on eri kuin missä PHP-tiedostot sijaitsevat.\n\nAsennusohjelma luo <code>.htaccess</code>-tiedoston, mutta jos sen luomisessa ilmenee ongelmia joku voi päästä käsiksi tietokantaasi. \nTietokannassa on kaikki sähköpostiosoitteet, salasanat, poistetut versiot ja kaikki muu tieto, joka ei näy wikissä.\n\nSuosittelemme tallentamaan tietokannan eri hakemistoon, esimerkiksi <code>/var/lib/mediawiki/yourwiki</code>.",
+ "config-oracle-def-ts": "Oletus taulukkotila:",
+ "config-oracle-temp-ts": "Väliaikainen taulukkotila:",
"config-type-mysql": "MySQL (tai yhteensopiva)",
"config-type-postgres": "PostgreSQL",
"config-type-sqlite": "SQLite",
"config-type-oracle": "Oracle",
+ "config-type-mssql": "Microsoft SQL Server",
"config-header-mysql": "MySQL-asetukset",
"config-header-postgres": "PostgreSQL-asetukset",
"config-header-sqlite": "SQLite-asetukset",
@@ -165,7 +190,13 @@
"config-profile-fishbowl": "Vain hyväksytyt muokkaajat",
"config-profile-private": "Yksityinen wiki",
"config-license": "Tekijänoikeus ja lisenssi:",
+ "config-license-cc-by-sa": "Creative Commons Nimeä-Tarttuva",
+ "config-license-cc-by": "Creative Commons Nimeä",
+ "config-license-cc-by-nc-sa": "Creative Commons Nimeä-Epäkaupallinen-Tarttuva",
+ "config-license-cc-0": "Creative Commons Zero (Public Domain)",
+ "config-license-gfdl": "GNU Free Documentation -lisenssi 1.3 tai uudempi",
"config-license-pd": "Public domain",
+ "config-license-cc-choose": "Valitse mukautettu Creative Commons -lisenssi",
"config-email-settings": "Sähköpostiasetukset",
"config-enable-email": "Ota käyttöön sähköpostien lähetys",
"config-enable-email-help": "Jotta sähköposti toimii, [http://www.php.net/manual/en/mail.configuration.php PHP:n sähköpostiasetukset] täytyy asettaa oikein.\nJos et halua käyttää sähköpostiominaisuuksia, ne voi kytkeä pois päältä tästä.",
@@ -187,14 +218,25 @@
"config-extensions": "Laajennukset",
"config-extensions-help": "Yllä luetellut laajennukset löytyvät <code>./extensions</code> hakemistosta.\n\nNe saattavat vaatia lisäasetuksia, mutta voit ottaa ne käyttöön nyt.",
"config-skins": "Ulkoasut",
+ "config-skins-help": "Seuraavat teemat löydettiin hakemistosta <code>./skins</code>. Ota käyttöön vähintään yksi teema ja aseta se oletukseksi.",
+ "config-skins-use-as-default": "Käytä tätä teemaa oletuksena.",
+ "config-skins-missing": "Teemoja ei löytynyt; MediaWiki käyttää väliaikaista teemaa, kunnes asennat toimivia.",
"config-skins-must-enable-some": "Sinut täytyy valita ainakin yksi ulkoasu.",
+ "config-skins-must-enable-default": "Oletusteeman pitää olla käytössä.",
"config-install-alreadydone": "<strong>Varoitus:</strong> MediaWiki on jo asennettu ja yrität asentaa sitä uudestaan.\nSiirry seuraavalle sivulle.",
"config-install-begin": "Painamalla \"{{int:config-continue}}\", aloitetaan MediaWikin asentaminen. \nJos haluat vielä tehdä muutoksia, paina \"{{int:config-back}}\".",
"config-install-step-done": "valmis",
"config-install-step-failed": "epäonnistui",
"config-install-extensions": "Sisällytetään laajennukset",
"config-install-database": "Asennetaan tietokantaa",
+ "config-install-schema": "Luodaan rakennetta",
+ "config-install-pg-schema-not-exist": "PostgreSQL-rakennetta ei ole olemassa.",
+ "config-install-pg-schema-failed": "Taulun luominen epäonnistui.\nVarmista, että käyttäjätunnus \"$1\" pystyy kirjoittamaan rakenteeseen \"$2\".",
+ "config-install-pg-commit": "Muutoksia tallennetaan",
+ "config-install-pg-plpgsql": "Tarkistetaan PL/pgSQL:n kieltä.",
+ "config-pg-no-plpgsql": "PL/pgSQL-kieli pitää asentaa tietokantaan $1",
"config-pg-no-create-privs": "Määrittelemälläsi tilillä ei ole riittävästi oikeuksia luoda tiliä.",
+ "config-pg-not-in-role": "Määrittelemäsi web-käyttäjän tili on jo olemassa.\nMäärittelemälläsi käyttäjätilillä ei ole pääkäyttäjäoikeuksia eikä se toimi web-käyttäjän roolissa. Käyttäjätili ei pysty luomaan tarvittavia objekteja.\n\nMediaWiki vaatii, että web-käyttäjän pitää pystyä hallitsemaan tauluja. Anna toinen web-käyttäjätunnus tai klikkaa \"takaisin\" ja määrittele käyttäjätunnus, joka toimii asennuksessa.",
"config-install-user": "Luodaan tietokannalle käyttäjää",
"config-install-user-alreadyexists": "Käyttäjä $1 on jo olemassa",
"config-install-user-create-failed": "Käyttäjän \"$1\" luonti epäonnistui: $2",
@@ -204,15 +246,22 @@
"config-install-tables": "Luodaan tauluja",
"config-install-tables-exist": "<strong>Varoitus:</strong> MediaWiki taulut ovat jo olemassa.\nOhitetaan taulujen luonti.",
"config-install-tables-failed": "<strong>Virhe:</strong> Taulujen luominen epäonnistui seuraavaan virheen takia: $1",
+ "config-install-interwiki": "Luodaan oletustaulua interwikille",
"config-install-interwiki-list": "Tiedostoa <code>interwiki.list</code> ei voitu lukea.",
+ "config-install-interwiki-exists": "<strong>Varoitus:</strong> interwiki-taulussa on jo tietueita, ohitetaan oletuslista.",
+ "config-install-stats": "Alustetaan tilastoja",
"config-install-keys": "Muodostetaan salausavaimia",
+ "config-install-updates": "Estä tarpeettomien päivitysten asennus",
"config-install-sysop": "Luodaan ylläpitäjän tiliä",
"config-install-subscribe-fail": "Liittyminen mediawiki-announce listalle epäonnistui: $1",
+ "config-install-subscribe-notpossible": "cURL-ohjelmaa ei ole asennettu eikä <code>allow_url_fopen</code> ole saatavilla.",
"config-install-mainpage": "Luodaan etusivu oletussisällöllä",
"config-install-extension-tables": "Luodaan tauluja käyttöönotetuille laajuennuksille",
"config-install-mainpage-failed": "Etusivun lisääminen ei onnistunut: $1",
+ "config-install-done": "<strong>Onnittelut!</strong>\nMediaWiki on asennettu onnistuneesti\n\nAsennusohjelma on luonut <code>LocalSettings.php</code> -tiedoston.\nSiinä on kaikki MediaWikin asetukset.\n\nLataa tiedosto ja laita se MediaWikin asennushakemistoon (sama kuin missä on index.php). Lataamisen olisi pitänyt alkaa automaattisesti.\n\nMikäli keskeytit latauksen, käynnistä se uudestaan tästä linkistä:\n\n$3\n\n<strong>HUOM!</strong> Mikäli et nyt lataa tiedostoa, joudut aloittamaan asennuksen alusta.\n\nKun olet laittanut tiedoston oikeaan paikkaan voit <strong>[$2 mennä wikiisi]</strong>.",
"config-download-localsettings": "Lataa <code>LocalSettings.php</code>",
"config-help": "ohje",
+ "config-help-tooltip": "Klikkaa laajentaaksesi",
"config-nofile": "Tiedostoa \"$1\" ei löytynyt. Onko se poistettu?",
"config-extension-link": "Tiesitkö että wiki tukee [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions laajennuksia]?\n\nLaajennuksia voi hakea myös [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category luokittain].",
"mainpagetext": "'''MediaWiki on onnistuneesti asennettu.'''",
diff --git a/includes/installer/i18n/fr.json b/includes/installer/i18n/fr.json
index 9fd6726e..c9750903 100644
--- a/includes/installer/i18n/fr.json
+++ b/includes/installer/i18n/fr.json
@@ -21,7 +21,8 @@
"Maxim21",
"Wladek92",
"Scoopfinder",
- "Seb35"
+ "Seb35",
+ "Linedwell"
]
},
"config-desc": "Le programme d’installation de MediaWiki",
@@ -71,7 +72,7 @@
"config-unicode-using-intl": "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.",
"config-unicode-pure-php-warning": "<strong>Attention</strong> : L'[http://pecl.php.net/intl extension PECL intl] n'est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP.\nSi votre site web sera très fréquenté, vous devriez lire ceci : [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).",
"config-unicode-update-warning": "'''Attention''': La version installée du ''wrapper'' de normalisation Unicode utilise une vieille version de la [http://site.icu-project.org/ bibliothèque logicielle ''ICU Project''].\nVous devriez faire une [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations mise à jour] si vous êtes tout à fait concerné par l'usage d'Unicode.",
- "config-no-db": "Impossible de trouver un pilote de base de données approprié ! Vous devez installer un pilote de base de données pour PHP. Les types de bases de données suivants sont reconnus : $1.\n\nSi vous avez compilé PHP vous-même, reconfigurez-le avec un client de base de données activé, par exemple en utilisant <code>./configure --with-mysqli</code>. Si vous avez installé PHP depuis un paquet Debian ou Ubuntu, alors vous devrez aussi installer, par exemple, le paquet <code>php5-mysql</code>.",
+ "config-no-db": "Impossible de trouver un pilote de base de données approprié ! Vous devez installer un pilote de base de données pour PHP. {{PLURAL:$2|Le type suivant|Les types suivants}} de bases de données {{PLURAL:$2|est reconnu|sont reconnus}} : $1.\n\nSi vous avez compilé PHP vous-même, reconfigurez-le avec un client de base de données actif, par exemple en utilisant <code>./configure --with-mysqli</code>. Si vous avez installé PHP depuis un paquet Debian ou Ubuntu, alors vous devrez aussi installer, par exemple, le paquet <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Attention''': vous avez SQLite $1, qui est inférieur à la version minimale requise $2. SQLite sera indisponible.",
"config-no-fts3": "'''Attention :''' SQLite est compilé sans le module [//sqlite.org/fts3.html FTS3] ; les fonctions de recherche ne seront pas disponibles sur ce moteur.",
"config-register-globals-error": "<strong>Erreur : L’option <code>[http://php.net/register_globals register_globals]</code> de PHP est activée.\nElle doit être désactivée pour poursuivre l’installation.</strong>\nVoyez [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pour avoir de l’aide sur la manière de faire cela.",
diff --git a/includes/installer/i18n/frc.json b/includes/installer/i18n/frc.json
index e05cd252..ac60dea7 100644
--- a/includes/installer/i18n/frc.json
+++ b/includes/installer/i18n/frc.json
@@ -1,5 +1,24 @@
{
- "@metadata": [],
+ "@metadata": {
+ "authors": [
+ "Hangmanwa7id"
+ ]
+ },
+ "config-your-language": "Ton langue:",
+ "config-page-name": "Nom",
+ "config-page-options": "Options",
+ "config-page-install": "Installer",
+ "config-page-complete": "Terminé!",
+ "config-sqlite-name-help": "Choisir un nom qui identifie ton wiki.\nFait user pas ni d'espaces ni des traits d'union\nIl va user pour fichier de données SQLite.",
+ "config-mysql-innodb": "InnoDB",
+ "config-mysql-myisam": "MyISAM",
+ "config-mysql-binary": "Binaire",
+ "config-mysql-utf8": "UTF-8",
+ "config-ns-generic": "Projet",
+ "config-ns-other-default": "MonWiki",
+ "config-admin-name": "Ton nom d'useur:",
+ "config-admin-password": "Mot de passe:",
+ "config-admin-email": "Adresse d'email:",
"mainpagetext": "'''Vous avez bien installé MediaWiki.'''",
"mainpagedocfooter": "Lisez la [//meta.wikimedia.org/wiki/Help:Contents Guide des Useurs] pour apprendre à user le wiki software.\n\n== Pour Commencer ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Réglage]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki: Questions Souvent Posées]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki Liste à Malle]"
}
diff --git a/includes/installer/i18n/fy.json b/includes/installer/i18n/fy.json
index 1eb0d894..39c46b53 100644
--- a/includes/installer/i18n/fy.json
+++ b/includes/installer/i18n/fy.json
@@ -1,9 +1,19 @@
{
"@metadata": {
"authors": [
- "Seb35"
+ "Seb35",
+ "Robin0van0der0vliet"
]
},
+ "config-information": "Ynformaasje",
+ "config-back": "← Foarige",
+ "config-page-language": "Taal",
+ "config-page-name": "Namme",
+ "config-page-options": "Opsjes",
+ "config-mysql-binary": "Binêr",
+ "config-ns-generic": "Projekt",
+ "config-admin-password": "Wachtwurd:",
+ "config-help": "help",
"mainpagetext": "'''MediaWiki-program goed ynstallearre.'''",
- "mainpagedocfooter": "Rieplachtsje de [//meta.wikimedia.org/wiki/Help:Contents Ynhâldsopjefte hantlieding] foar ynformaasje oer it gebrûk fan 'e wikisoftware.\n\n== Mear help oer Mediawiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings List mei ynstellings]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Faak stelde fragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglist foar oankundigings fan nije ferzjes]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
+ "mainpagedocfooter": "Rieplachtsje de [//meta.wikimedia.org/wiki/Help:Contents Ynhâldsopjefte hantlieding] foar ynformaasje oer it gebrûk fan 'e wikisoftware.\n\n== Mear help oer Mediawiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings List mei ynstellingen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Faak stelde fragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglist foar oankundigings fan nije ferzjes]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]"
}
diff --git a/includes/installer/i18n/gl.json b/includes/installer/i18n/gl.json
index a42cb179..940b4c01 100644
--- a/includes/installer/i18n/gl.json
+++ b/includes/installer/i18n/gl.json
@@ -54,7 +54,7 @@
"config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensión intl PECL] para a normalización Unicode.",
"config-unicode-pure-php-warning": "<strong>Atención:</strong> A [http://pecl.php.net/intl extensión intl PECL] non está dispoñible para manexar a normalización Unicode; volvendo á implementación lenta de PHP puro.\nSe o seu sitio posúe un alto tráfico de visitantes, debería ler un chisco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
"config-unicode-update-warning": "<strong>Atención:</strong> A versión instalada da envoltura de normalización Unicode emprega unha versión vella da biblioteca [http://site.icu-project.org/ do proxecto ICU].\nDebería [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualizar] se o uso de Unicode é importante para vostede.",
- "config-no-db": "Non se puido atopar un controlador axeitado para a base de datos! Necesita instalar un controlador de base de datos para PHP.\nOs tipos de base de datos admitidos son os seguintes: $1.\n\nSe compilou o PHP vostede mesmo, reconfigúreo activando un cliente de base de datos, por exemplo, usando <code>./configure --with-mysql</code>.\nSe instalou o PHP desde un paquete Debian ou Ubuntu, entón tamén necesita instalar, por exemplo, o módulo <code>php5-mysql</code>.",
+ "config-no-db": "Non se puido atopar un controlador axeitado para a base de datos! Necesita instalar un controlador de base de datos para PHP.\n{{PLURAL:$2|Acéptase o seguinte tipo|Acéptanse os seguintes tipos}} de base de datos: $1.\n\nSe compilou o PHP vostede mesmo, reconfigúreo activando un cliente de base de datos, por exemplo, usando <code>./configure --with-mysql</code>.\nSe instalou o PHP desde un paquete Debian ou Ubuntu, entón tamén necesita instalar, por exemplo, o módulo <code>php5-mysql</code>.",
"config-outdated-sqlite": "<strong>Atención:</strong> Ten o SQLite $1, que é inferior á versión mínima necesaria: $2. O SQLite non estará dispoñible.",
"config-no-fts3": "<strong>Atención:</strong> O SQLite está compilado sen o [//sqlite.org/fts3.html módulo FTS3]; as características de procura non estarán dispoñibles nesta instalación.",
"config-register-globals-error": "<strong>Erro: A opción <code>[http://php.net/register_globals register_globals]</code> do PHP está activada.\nCómpre desactivala para continuar a instalación.</strong>\nConsulte o enderezo [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obter axuda sobre como facelo.",
diff --git a/includes/installer/i18n/gor.json b/includes/installer/i18n/gor.json
new file mode 100644
index 00000000..b080848b
--- /dev/null
+++ b/includes/installer/i18n/gor.json
@@ -0,0 +1,48 @@
+{
+ "@metadata": {
+ "authors": [
+ "Marwan Mohamad"
+ ]
+ },
+ "config-information": "habari",
+ "config-wiki-language": "bahasa wiki",
+ "config-back": "Mohalingo",
+ "config-continue": "Turusi",
+ "config-page-language": "Bahasa",
+ "config-page-dbconnect": "mohumbuto ode database",
+ "config-page-upgrade": "Popobohuwa umapilopohuli",
+ "config-page-dbsettings": "Aturu lo database",
+ "config-page-name": "Tanggulo",
+ "config-page-options": "Tulawotolo",
+ "config-page-install": "Mopohuli",
+ "config-page-complete": "Yilapato",
+ "config-page-restart": "Ulangiya instalasi",
+ "config-page-readme": "Pobacawa Wau",
+ "config-page-releasenotes": "Tuladu mopolopato",
+ "config-page-copying": "Mohemi",
+ "config-page-upgradedoc": "Mopobohu",
+ "config-page-existingwiki": "Wiki uwoluwo",
+ "config-help-restart": "Yio mohuto moluluta ngaamila data utahu-tahu ma pilopomaso wawu mopobohu upasi-pasi",
+ "config-restart": "Jo, potumula ulangi",
+ "config-env-good": "Yio mowali mopopasi MediaWiki",
+ "config-env-bad": "Yio dilamowali mopopasi MediaWiki",
+ "config-env-php": "PHP$1 mayilepasi",
+ "config-env-hhvm": "HHVM $1 mayilepasi",
+ "config-apc": "[http://www.php.net/apc APC] mayilepasi",
+ "config-diff3-bad": "GNU diff3 ja yilotapu",
+ "config-using-server": "Momake tanggulo server \"<nowiki>$1<nowiki>\"",
+ "config-using-uri": "Momake server URL \"<nowiki>$1$2</nowiki>\"",
+ "config-db-host": "Tiyombu lo basis data",
+ "config-db-host-oracle": "Basis data TNS",
+ "config-db-wiki-settings": "Lolohe wiki botiye",
+ "config-db-name": "Tanggulo basis data",
+ "config-db-name-oracle": "Skema lo basis data",
+ "config-db-username": "Basis data lo tanggulo user",
+ "config-charset-mysql5": "MySQL 4.1/5.0 UFT-8",
+ "config-type-mysql": "MySQL (meyalo umopasiya)",
+ "config-header-mysql": "Aturangi lo MySQL",
+ "config-header-postgres": "Aturangi lo PostgreSQL",
+ "config-header-sqlite": "Aturangi lo SQLite",
+ "config-header-oracle": "Aturangi lo Oracle",
+ "config-header-mssql": "Aturangi lo Server Microsoft SQL"
+}
diff --git a/includes/installer/i18n/he.json b/includes/installer/i18n/he.json
index dd14e633..34190891 100644
--- a/includes/installer/i18n/he.json
+++ b/includes/installer/i18n/he.json
@@ -56,7 +56,7 @@
"config-unicode-using-intl": "משתמש ב[http://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד.",
"config-unicode-pure-php-warning": "'''אזהרה''': [http://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.\nאם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
"config-unicode-update-warning": "'''אזהרה''': הגרסה המותקנת של מעטפת נרמול יוניקוד משתמשת בגרסה ישנה של הספרייה של [http://site.icu-project.org/ פרויקט ICU].\nכדאי [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations לעדכן] אם הטיפול ביוניקוד חשוב לך.",
- "config-no-db": "לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.\nנתמכים הסוגים הבאים של מסדי נתונים: $1.\n\nאם קִמפלת את PHP בעצמך, יש להגדיר אותו מחדש ולהפעיל את לקוח מסד נתונים, למשל באמצעות <code dir=\"ltr\">./configure --with-mysqli</code>.\nאם התקנת את PHP מחבילה של דביאן או של אובונטו, יש להתקין, למשל, גם את המודול <code dir=\"ltr\">php5-mysql</code>.",
+ "config-no-db": "לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.\n{{PLURAL:$2|נתמך הסוג הבא של מסד נתונים|נתמכים הסוגים הבאים של מסדי נתונים}}: $1.\n\nאם קִמפלת את PHP בעצמך, יש להגדיר אותו מחדש ולהפעיל את לקוח מסד נתונים, למשל באמצעות <code dir=\"ltr\">./configure --with-mysqli</code>.\nאם התקנת את PHP מחבילה של דביאן או של אובונטו, יש להתקין, למשל, גם את המודול <code dir=\"ltr\">php5-mysql</code>.",
"config-outdated-sqlite": "'''אזהרה''': במערכת מתוקן SQLite $1. גרסה זו לא נתמכת ולשימוש ב־SQLite נדרשת גרסה $2 לפחות. SQLlite לא יהיה זמין.",
"config-no-fts3": "'''אזהרה''': SQLite מקומפל ללא [//sqlite.org/fts3.html מודול FTS]. יכולות חיפוש לא יהיו זמינות בהתקנה הזאת.",
"config-register-globals-error": "<strong>שגיאה: האפשרות <code>[http://php.net/register_globals register_globals]</code> של PHP מופעלת.\nצריך לכבות אותה כדי להמשיך בהתקנה.</strong>\nר' [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] להסבר איך לעשות את זה.",
diff --git a/includes/installer/i18n/hi.json b/includes/installer/i18n/hi.json
index b3779e4f..629b53b5 100644
--- a/includes/installer/i18n/hi.json
+++ b/includes/installer/i18n/hi.json
@@ -2,10 +2,17 @@
"@metadata": {
"authors": [
"Smtchahal",
- "Vivek Rai"
+ "Vivek Rai",
+ "Phoenix303",
+ "संजीव कुमार"
]
},
+ "config-desc": "साँचा लिए इंस्टॉलर",
+ "config-title": "मीडियाविकी $1 इंस्टॉलेशन",
"config-information": "जानकारी",
+ "config-localsettings-upgrade": "<code>LocalSettings.php</code> फ़ाइल पाया गया है ।\nइस स्थापना को अपग्रेड करने के लिए, नीचे दिए गए बॉक्स में <code>$wgUpgradeKey</code> का मान दर्ज करें।\nआपको <code>LocalSettings.php</code> में मिल जाएगा।",
+ "config-localsettings-cli-upgrade": "<code>LocalSettings.php</code> फ़ाइल पाया गया है ।\nइस स्थापना को अपग्रेड करने के लिए, बदले में कृपया करके ये चलाए <code>update.php</code>",
+ "config-localsettings-key": "नवीनीकरण कुंजी",
"config-localsettings-badkey": "आपकी दी गई कुंजी ग़लत है।",
"config-your-language": "आपकी भाषा:",
"config-wiki-language": "विकी भाषा:",
@@ -14,16 +21,21 @@
"config-page-language": "भाषा",
"config-page-welcome": "मीडियाविकी पर आपका स्वागत है!",
"config-page-dbconnect": "डेटाबेस से जुड़ें",
+ "config-page-upgrade": "मौजूदा स्थापना का नवीनीकरण",
+ "config-page-dbsettings": "डेटाबेस वरियतायें",
"config-page-name": "नाम",
"config-page-options": "विकल्प",
"config-page-install": "स्थापित करें",
"config-page-complete": "पूर्ण!",
"config-page-restart": "स्थापना को पुनरारंभ करें",
"config-page-readme": "मुझे पढ़ें",
+ "config-page-releasenotes": "रिलीज नोट्स",
+ "config-page-copying": "अनुकरण",
+ "config-page-upgradedoc": "उन्नयन",
"config-page-existingwiki": "मौजूदा विकि",
"config-restart": "हाँ, इसे पुनः आरंभ करें",
"config-env-php": "PHP $1 स्थापित किया गया है।",
- "config-env-php-toolow": "PHP $1 स्थापित किया गया है।\nतथापि, मीडियाविकि PHP $2 या उच्चतर की आवश्यकता है।",
+ "config-db-wiki-settings": "इस विकि को पहचानें",
"config-mssql-auth": "प्रमाणन प्रकार:",
"config-mssql-sqlauth": "SQL सर्वर प्रमाणन",
"config-site-name": "विकि का नाम:",
diff --git a/includes/installer/i18n/hu.json b/includes/installer/i18n/hu.json
index a150fbcd..cf5ad454 100644
--- a/includes/installer/i18n/hu.json
+++ b/includes/installer/i18n/hu.json
@@ -6,7 +6,8 @@
"아라",
"Dj",
"Misibacsi",
- "Tacsipacsi"
+ "Tacsipacsi",
+ "Dorgan"
]
},
"config-desc": "A MediaWiki telepítője",
@@ -51,14 +52,12 @@
"config-env-good": "A környezet ellenőrzése befejeződött.\nA MediaWiki telepíthető.",
"config-env-bad": "A környezet ellenőrzése befejeződött.\nA MediaWiki nem telepíthető.",
"config-env-php": "A PHP verziója: $1",
- "config-env-php-toolow": "PHP $1 van telepítve,\nazonban a MediaWikinek PHP $2, vagy újabb szükséges.",
- "config-unicode-using-utf8": "A rendszer Unicode normalizálására Brion Vibber utf8_normalize.so könyvtárát használja.",
+ "config-env-hhvm": "HHVM verziója: $1",
"config-unicode-using-intl": "A rendszer Unicode normalizálására az [http://pecl.php.net/intl intl PECL kiterjesztést] használja.",
"config-unicode-pure-php-warning": "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el, helyette a lassú, PHP alapú implementáció lesz használva.\nHa nagy látogatottságú oldalt üzemeltetsz, itt találhatsz további információkat [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations a témáról].",
"config-unicode-update-warning": "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges burkolókönyvtár [http://site.icu-project.org/ ICU projekt] függvénykönyvtárának régebbi változatát használja.\nHa ügyelni kívánsz a Unicode használatára, fontold meg a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations frissítését].",
- "config-no-db": "Nem sikerült egyetlen használható adatbázis-illesztőprogramot sem találni. Telepítened kell egyet a PHP-hez.\nA következő adatbázistípusok támogatottak: $1.\n\nHa a PHP-t magad fordítottad, konfiguráld újra úgy, hogy engedélyezve legyen egy adatbáziskliens, pl. a <code>./configure --with-mysql</code> parancs használatával.\nHa a PHP-t Debian vagy Ubuntu csomaggal telepítetted, akkor szükséged lesz a php5-mysql modulra is.",
+ "config-no-db": "Nem sikerült egyetlen használható adatbázis-illesztőprogramot sem találni. Telepítened kell egyet a PHP-hez.\nA következő {{PLURAL:$2|adatbázistípus támogatott|adatbázistípusok támogatottak}}: $1.\n\nHa a PHP-t magad fordítottad, konfiguráld újra úgy, hogy engedélyezve legyen egy adatbáziskliens, pl. a <code>./configure --with-mysql</code> parancs használatával.\nHa a PHP-t Debian vagy Ubuntu csomaggal telepítetted, akkor szükséged lesz például a php5-mysql csomagra is.",
"config-no-fts3": "'''Figyelmeztetés''': Az SQLite [//sqlite.org/fts3.html FTS3 modul] nélkül lett fordítva, a keresési funkciók nem fognak működni ezen a rendszeren.",
- "config-register-globals": "'''Figyelmeztetés: A PHP <code>[http://php.net/register_globals register_globals]</code> beállítása engedélyezve van.'''\n'''Tiltsd le, ha van rá lehetőséged.'''\nA MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.",
"config-magic-quotes-runtime": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
"config-magic-quotes-sybase": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
"config-mbstring": "'''Kritikus hiba: az [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime mbstring.func_overload] aktív!'''\nEz a beállítás hibákat okoz és kiszámíthatatlanul károsíthatja bevitt adatokat.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
@@ -221,7 +220,7 @@
"config-license-gfdl": "GNU Szabad Dokumentációs Licenc 1.3 vagy újabb",
"config-license-pd": "Közkincs",
"config-license-cc-choose": "Creative Commons-licenc választása",
- "config-license-help": "A legtöbb wiki valamilyen [http://freedomdefined.org/Definition szabad licenc] alatt teszi közzé a szerkesztéseit.\nEz erősíti a közösségi tulajdon érzését, és elősegíti a hosszú távú közreműködők megjelenését.\nÁltalában nem szükséges magán- vagy vállalati wiki esetén.\n\nHa a Wikipédiáról szeretnél szövegeket másolni, és a Wikipédián felhasználhassák a wikidben található szöveget, akkor a '''Creative Commons Nevezd meg! - Így add tovább!''' lehetőséget válaszd.\n\nA Wikipédia korábban a GNU Szabad Dokumentációs Licencet használta.\nEz a licenc még ma is használható, azonban nem könnyű megérteni,\ntovábbá a GFDL alatt közzétett tartalom újrafelhasználása nehézkes.",
+ "config-license-help": "A legtöbb wiki valamilyen [http://freedomdefined.org/Definition szabad licenc] alatt teszi közzé a szerkesztéseit.\nEz erősíti a közösségi tulajdon érzését, és elősegíti a hosszú távú közreműködők megjelenését.\nÁltalában nem szükséges magán- vagy vállalati wiki esetén.\n\nHa a Wikipédiáról szeretnél szövegeket másolni, és azt szeretnéd, hogy a Wikipédián felhasználhassák a wikidben található szöveget, akkor a <strong>{{int:config-license-cc-by-sa}}</strong> lehetőséget válaszd.\n\nA Wikipédia korábban a GNU Szabad Dokumentációs Licencet használta.\nEz a licenc még ma is használható, azonban nem könnyű megérteni,\ntovábbá a GFDL alatt közzétett tartalom újrafelhasználása nehézkes.",
"config-email-settings": "E-mail beállítások",
"config-enable-email": "Kimenő e-mailek engedélyezése",
"config-enable-email-help": "E-mailek küldéséhez [http://www.php.net/manual/en/mail.configuration.php a PHP mail beállításait] megfelelően meg kell adni.\nHa nem akarsz semmilyen e-mailes funkciót használni, itt tilthatod le őket.",
@@ -261,6 +260,8 @@
"config-memcache-badport": "A Memcached a(z) $1 és $2 közötti portokat szokta használni.",
"config-extensions": "Kiterjesztések",
"config-extensions-help": "A fent felsorolt kiterjesztések találhatóak meg az <code>./extensions</code> könyvtárban.\n\nLehetséges, hogy további beállításra lesz szükség hozzájuk, de már most engedélyezheted őket.",
+ "config-skins": "Felületek",
+ "config-skins-use-as-default": "Felület használata alapértelmezettként",
"config-install-alreadydone": "'''Figyelmeztetés:''' Úgy tűnik, hogy a MediaWiki telepítve van, és te ismét megpróbálod telepíteni.\nFolytasd a következő oldalon.",
"config-install-begin": "A „{{int:config-continue}}” gomb megnyomása elindítja a MediaWiki telepítését.\nHa szeretnél módosítani a beállításokon, kattints a \"{{int:config-back}}\" gombra.",
"config-install-step-done": "kész",
diff --git a/includes/installer/i18n/ia.json b/includes/installer/i18n/ia.json
index 62afb44f..0e8f5973 100644
--- a/includes/installer/i18n/ia.json
+++ b/includes/installer/i18n/ia.json
@@ -47,6 +47,7 @@
"config-env-good": "Le ambiente ha essite verificate.\nTu pote installar MediaWiki.",
"config-env-bad": "Le ambiente ha essite verificate.\nTu non pote installar MediaWiki.",
"config-env-php": "PHP $1 es installate.",
+ "config-env-hhvm": "HHVM $1 es installate.",
"config-unicode-using-utf8": "utf8_normalize.so per Brion Vibber es usate pro le normalisation Unicode.",
"config-unicode-using-intl": "Le [http://pecl.php.net/intl extension PECL intl] es usate pro le normalisation Unicode.",
"config-unicode-pure-php-warning": "'''Aviso''': Le [http://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.\nSi tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisation Unicode].",
@@ -55,6 +56,7 @@
"config-outdated-sqlite": "'''Attention''': tu ha SQLite $1, que es inferior al version minimal requirite, $2. SQLite essera indisponibile.",
"config-no-fts3": "'''Attention''': SQLite es compilate sin [//sqlite.org/fts3.html modulo FTS3]; functionalitate de recerca non essera disponibile in iste back-end.",
"config-register-globals-error": "<strong>Error: Le option <code>[http://php.net/register_globals register_globals]</code> de PHP es active.\nIllo debe esser disactivate pro continuar le installation.</strong>\nVide [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pro obtener adjuta sur como facer lo.",
+ "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] es active!</strong>\nIste option corrumpe le datos entrate de maniera imprevisibile.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
"config-magic-quotes-runtime": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] es active!'''\nIste option corrumpe le entrata de datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
"config-magic-quotes-sybase": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] es active!'''\nIste option corrumpe le entrata de datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
"config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] es active!'''\nIste option causa errores e pote corrumper datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
@@ -65,6 +67,7 @@
"config-memory-raised": "Le <code>memory_limit</code> de PHP es $1, elevate a $2.",
"config-memory-bad": "'''Aviso:''' Le <code>memory_limit</code> de PHP es $1.\nIsto es probabilemente troppo basse.\nLe installation pote faller!",
"config-ctype": "'''Fatal''': PHP debe esser compilate con supporto pro le [http://www.php.net/manual/en/ctype.installation.php extension Ctype].",
+ "config-iconv": "<strong>Fatal:</strong> PHP debe esser compilate con supporto pro le [http://www.php.net/manual/en/iconv.installation.php extension iconv].",
"config-json": "'''Fatal:''' PHP ha essite compilate sin supporto de JSON.\nTu debe installar le extension JSON de PHP o le extension [http://pecl.php.net/package/jsonc PECL jsonc] extension ante de installar MediaWiki.\n* Le extension de PHP es includite in Red Hat Enterprise Linux (CentOS) 5 e 6, ma debe esser activate in <code>/etc/php.ini</code> o <code>/etc/php.d/json.ini</code>.\n* Alcun distributiones de Linux liberate post maio 2013 omitte iste extension de PHP, forniente in su loco le extension PECL como <code>php5-json</code> o <code>php-pecl-jsonc</code>.",
"config-xcache": "[http://xcache.lighttpd.net/ XCache] es installate",
"config-apc": "[http://www.php.net/apc APC] es installate",
@@ -232,7 +235,7 @@
"config-license-gfdl": "Licentia GNU pro Documentation Libere 1.3 o plus recente",
"config-license-pd": "Dominio public",
"config-license-cc-choose": "Seliger un licentia Creative Commons personalisate",
- "config-license-help": "Multe wikis public pone tote le contributiones sub un [http://freedomdefined.org/Definition/Ia?uselang=ia licentia libere].\nIsto adjuta a crear un senso de proprietate communitari e incoragia le contribution in longe termino.\nIsto non es generalmente necessari pro un wiki private o de interprisa.\n\nSi tu vole poter usar texto de Wikipedia, e si tu vole que Wikipedia pote acceptar texto copiate de tu wiki, tu debe seliger '''Creative Commons Attribution Share Alike'''.\n\nWikipedia usava anteriormente le Licentia GNU pro Documentation Libere (GFDL).\nIste es un licentia valide, ma es difficile a comprender.\nIl es anque difficile reusar le contento licentiate sub GFDL.",
+ "config-license-help": "Multe wikis public pone tote le contributiones sub un [http://freedomdefined.org/Definition/Ia?uselang=ia licentia libere].\nIsto adjuta a crear un senso de proprietate communitari e incoragia le contribution in longe termino.\nIsto non es generalmente necessari pro un wiki private o de interprisa.\n\nSi tu vole poter usar texto de Wikipedia, e si tu vole que Wikipedia pote acceptar texto copiate de tu wiki, tu debe seliger <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia usava anteriormente le Licentia GNU pro Documentation Libere (GFDL).\nIste es un licentia valide, ma es difficile a comprender.\nIl es anque difficile reusar le contento licentiate sub GFDL.",
"config-email-settings": "Configuration de e-mail",
"config-enable-email": "Activar le e-mail sortiente",
"config-enable-email-help": "Si tu vole que e-mail functiona, [http://www.php.net/manual/en/mail.configuration.php le optiones de e-mail de PHP] debe esser configurate correctemente.\nSi tu non vole functiones de e-mail, tu pote disactivar los hic.",
@@ -272,6 +275,12 @@
"config-memcache-badport": "Le numeros de porto de Memcached debe esser inter $1 e $2",
"config-extensions": "Extensiones",
"config-extensions-help": "Le extensiones listate hic supra esseva detegite in tu directorio <code>./extensions</code>.\n\nIstes pote requirer additional configuration, ma tu pote activar los ora.",
+ "config-skins": "Apparentias",
+ "config-skins-help": "Hic supra es le lista de apparentias detegite in tu directorio <code>./skins</code>. Tu debe activar al minus un de illos e seliger le predefinite.",
+ "config-skins-use-as-default": "Usar iste apparentia como predefinite",
+ "config-skins-missing": "Nulle apparentia ha essite trovate; MediaWiki usara un apparentia de reserva usque tu installa alcun apparentia complete.",
+ "config-skins-must-enable-some": "Tu debe seliger al minus un apparentia a activar.",
+ "config-skins-must-enable-default": "Le apparentia seligite como predefinite debe esser activate.",
"config-install-alreadydone": "'''Aviso:''' Il pare que tu ha jam installate MediaWiki e tenta installar lo de novo.\nPer favor continua al proxime pagina.",
"config-install-begin": "Un clic sur \"{{int:config-continue}}\" comencia le installation de MediaWiki.\nPro facer alterationes, clicca sur \"{{int:config-back}}\".",
"config-install-step-done": "finite",
@@ -301,6 +310,8 @@
"config-install-stats": "Initialisation del statisticas",
"config-install-keys": "Generation de claves secrete",
"config-insecure-keys": "'''Attention:''' {{PLURAL:$2|Un clave|Alcun claves}} secur ($1) generate durante le installation non es completemente secur. Considera cambiar {{PLURAL:$2|lo|los}} manualmente.",
+ "config-install-updates": "Impedir le execution de actualisationes innecessari",
+ "config-install-updates-failed": "<strong>Error:</strong> Le insertion de claves de actualisation in le tabellas ha fallite con le error sequente: $1",
"config-install-sysop": "Crea conto de usator pro administrator",
"config-install-subscribe-fail": "Impossibile subscriber a mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL non es installate e <code>allow_url_fopen</code> non es disponibile.",
diff --git a/includes/installer/i18n/id.json b/includes/installer/i18n/id.json
index c2411ef0..e85e735a 100644
--- a/includes/installer/i18n/id.json
+++ b/includes/installer/i18n/id.json
@@ -8,7 +8,8 @@
"아라",
"C5st4wr6ch",
"Seb35",
- "Arifin.wijaya"
+ "Arifin.wijaya",
+ "Ilham151096"
]
},
"config-desc": "Penginstal untuk MediaWiki",
@@ -48,11 +49,12 @@
"config-help-restart": "Apakah Anda ingin menghapus semua data tersimpan yang telah Anda masukkan dan mengulang proses instalasi?",
"config-restart": "Ya, nyalakan ulang",
"config-welcome": "=== Pengecekan lingkungan ===\nPengecekan dasar kini akan dilakukan untuk melihat apakah lingkungan ini memadai untuk instalasi MediaWiki.\nIngatlah untuk menyertakan informasi ini jika Anda mencari bantuan tentang cara menyelesaikan instalasi.",
- "config-copyright": "=== Hak cipta dan persyaratan ===\n\n$1\n\nProgram ini adalah perangkat lunak bebas; Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; baik versi 2 lisensi, atau (sesuai pilihan Anda) versi yang lebih baru.\n\nProgram ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi '''tanpa jaminan apa pun'''; bahkan tanpa jaminan tersirat untuk '''dapat diperjualbelikan ''' atau '''sesuai untuk tujuan tertentu'''.\nLihat GNU General Public License untuk lebih jelasnya.\n\nAnda seharusnya telah menerima <doclink href=\"Copying\">salinan dari GNU General Public License</doclink> bersama dengan program ini; jika tidak, kirimkan surat untuk Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. atau [http://www.gnu.org/copyleft/gpl.html baca versi daring].",
+ "config-copyright": "=== Hak cipta dan persyaratan ===\n\n$1\n\nProgram ini adalah perangkat lunak bebas; Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan GNU General Public License seperti yang diterbitkan oleh Free Software Foundation; baik versi 2 lisensi, atau (sesuai pilihan Anda) versi yang lebih baru.\n\nProgram ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi <strong>tanpa jaminan apa pun</strong>; bahkan tanpa jaminan tersirat untuk <strong>dapat diperjualbelikan</strong> atau <strong>sesuai untuk tujuan tertentu</strong>.\nLihat GNU General Public License untuk lebih jelasnya.\n\nAnda seharusnya telah menerima <doclink href=\"Copying\">salinan dari GNU General Public License</doclink> bersama dengan program ini; jika tidak, kirimkan surat untuk Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, atau [http://www.gnu.org/copyleft/gpl.html baca versi daring].",
"config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/id Situs MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/id Pedoman Pengguna]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/id Pedoman Administrator]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/id FAQ]\n----\n* <doclink href=Readme>Read me</doclink>\n* <doclink href=ReleaseNotes>Release notes</doclink>\n* <doclink href=Copying>Copying</doclink>\n* <doclink href=UpgradeDoc>Upgrading</doclink>",
"config-env-good": "Kondisi telah diperiksa.\nAnda dapat menginstal MediaWiki.",
"config-env-bad": "Kondisi telah diperiksa.\nAnda tidak dapat menginstal MediaWiki.",
"config-env-php": "PHP $1 diinstal.",
+ "config-env-hhvm": "HHVM $1 telah dipasang.",
"config-unicode-using-utf8": "Menggunakan utf8_normalize.so Brion Vibber untuk normalisasi Unicode.",
"config-unicode-using-intl": "Menggunakan [http://pecl.php.net/intl ekstensi PECL intl] untuk normalisasi Unicode.",
"config-unicode-pure-php-warning": "'''Peringatan''': [http://pecl.php.net/intl Ekstensi intl PECL] untuk menangani normalisasi Unicode tidak tersedia, kembali menggunakan implementasi murni PHP yang lambat.\nJika Anda menjalankan situs berlalu lintas tinggi, Anda harus sedikit membaca [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisasi Unicode].",
diff --git a/includes/installer/i18n/it.json b/includes/installer/i18n/it.json
index a61fff29..b9aab3ac 100644
--- a/includes/installer/i18n/it.json
+++ b/includes/installer/i18n/it.json
@@ -10,7 +10,8 @@
"Lucas2",
"Ontsed",
"Seb35",
- "Nemo bis"
+ "Nemo bis",
+ "Ricordisamoa"
]
},
"config-desc": "Il programma di installazione per MediaWiki",
@@ -60,7 +61,7 @@
"config-unicode-using-intl": "Usa [http://pecl.php.net/intl l'estensione PECL intl] per la normalizzazione Unicode.",
"config-unicode-pure-php-warning": "'''Attenzione:''' [http://pecl.php.net/intl l'estensione PECL intl] non è disponibile per gestire la normalizzazione Unicode, così si usa la lenta implementazione in puro PHP.\nSe esegui un sito ad alto traffico, dovresti leggere alcune considerazioni sulla [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzazione Unicode].",
"config-unicode-update-warning": "'''Attenzione:''' La versione installata del gestore per la normalizzazione Unicode usa una vecchia versione della libreria [http://site.icu-project.org/ del progetto ICU].\nDovresti [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aggiornare] se ti interessa usare l'Unicode.",
- "config-no-db": "Impossibile trovare un driver adatto per il database! È necessario installare un driver per PHP.\nI seguenti formati di database sono supportati: $1.\n\nSe compili PHP autonomamente, riconfiguralo attivando un client database, per esempio utilizzando <code>./configure --with-mysqli</code>.\nQualora avessi installato PHP per mezzo di un pacchetto Debian o Ubuntu, allora devi installare anche il pacchetto <code>php5-mysql</code>.",
+ "config-no-db": "Impossibile trovare un driver adatto per il database! È necessario installare un driver per PHP.\n{{PLURAL:$2|Il seguente formato di database è supportato|I seguenti formati di database sono supportati}}: $1.\n\nSe compili PHP autonomamente, riconfiguralo attivando un client database, per esempio utilizzando <code>./configure --with-mysqli</code>.\nQualora avessi installato PHP per mezzo di un pacchetto Debian o Ubuntu, allora devi installare anche il pacchetto <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Attenzione''': è presente SQLite $1 mentre è richiesta la versione $2, SQLite non sarà disponibile.",
"config-no-fts3": "'''Attenzione''': SQLite è compilato senza il [//sqlite.org/fts3.html modulo FTS3], le funzionalità di ricerca non saranno disponibili su questo backend.",
"config-register-globals-error": "<strong>Errore: l'opzione PHP <code>[http://php.net/register_globals register_globals]</code> è abilitata.\nDeve essere disabilitata per continuare con l'installazione.</strong>\nVedi [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] per un aiuto su come farlo.",
@@ -220,7 +221,7 @@
"config-admin-error-password": "Errore interno durante l'impostazione di una password per amministratore \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
"config-admin-error-bademail": "È stato inserito un indirizzo email non valido.",
"config-subscribe": "Sottoscrivi la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list degli annunci di rilasci].",
- "config-subscribe-help": "Si tratta di una mailing list a basso traffico dedicata agli annunci di nuove versioni, compresi importanti segnalazioni riguardanti la sicurezza.\nÈ consigliato iscriversi e aggiornare la proprio installazione di MediaWiki quando una nuova versione viene resa pubblica.",
+ "config-subscribe-help": "Si tratta di una mailing list a basso traffico dedicata agli annunci di nuove versioni, compresi importanti segnalazioni riguardanti la sicurezza.\nÈ consigliato iscriversi e aggiornare la propria installazione di MediaWiki quando una nuova versione viene resa pubblica.",
"config-subscribe-noemail": "Hai provato ad iscriverti alla mailing list dedicata agli annunci delle nuove versioni senza fornire un indirizzo email.\nInserire un indirizzo email se si desidera effettuare l'iscrizione alla mailing list.",
"config-almost-done": "Hai quasi finito!\nAdesso puoi saltare la rimanente parte della configurazione e semplicemente installare la wiki.",
"config-optional-continue": "Fammi altre domande.",
diff --git a/includes/installer/i18n/ja.json b/includes/installer/i18n/ja.json
index 21fcb9d7..dedc3c20 100644
--- a/includes/installer/i18n/ja.json
+++ b/includes/installer/i18n/ja.json
@@ -321,6 +321,7 @@
"config-install-stats": "統計情報の初期化",
"config-install-keys": "秘密鍵の生成",
"config-insecure-keys": "<strong>警告:</strong> インストール中に生成されたセキュアキー ($1) は完璧に安全ではありません。手動で変更することを検討してください。",
+ "config-install-updates": "不要な更新を実行するのを防ぐ",
"config-install-sysop": "管理者のアカウントの作成",
"config-install-subscribe-fail": "mediawiki-announce を購読できませんでした: $1",
"config-install-subscribe-notpossible": "cURL がインストールされていないため、<code>allow_url_fopen</code> を利用できません。",
diff --git a/includes/installer/i18n/ko.json b/includes/installer/i18n/ko.json
index bc828a54..10ca898e 100644
--- a/includes/installer/i18n/ko.json
+++ b/includes/installer/i18n/ko.json
@@ -5,17 +5,18 @@
"아라",
"Hym411",
"Priviet",
- "Namoroka"
+ "Namoroka",
+ "Revi"
]
},
- "config-desc": "미디어위키 설치 프로그램",
+ "config-desc": "미디어위키를 위한 설치 관리자",
"config-title": "미디어위키 $1 설치",
"config-information": "정보",
- "config-localsettings-upgrade": "<code>LocalSettings.php</code> 파일을 감지했습니다.\n이 설치를 업그레이드하려면 아래 상자에 <code>$wgUpgradeKey</code>의 값을 입력하세요.\n<code>LocalSettings.php</code>에서 찾을 수 있습니다.",
+ "config-localsettings-upgrade": "<code>LocalSettings.php</code> 파일을 감지했습니다.\n이 설치를 업그레이드하려면, 아래 상자에 <code>$wgUpgradeKey</code>의 값을 입력하세요.\n<code>LocalSettings.php</code>에서 찾을 수 있습니다.",
"config-localsettings-cli-upgrade": "<code>LocalSettings.php</code> 파일을 감지했습니다.\n이 설치를 업그레이드하려면 <code>update.php</code>를 대신 실행하세요",
"config-localsettings-key": "업그레이드 키:",
- "config-localsettings-badkey": "입력한 키가 잘못되었습니다.",
- "config-upgrade-key-missing": "기존에 설치 했던 미디어위키를 감지했습니다.\n이 설치를 업그레이드하려면 <code>LocalSettings.php</code>의 아래에 다음 줄을 넣으세요:\n\n$1",
+ "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-localsettings-connection-error": "<code>LocalSettings.php</code>에 지정한 설정을 사용하여 데이터베이스에 연결할 때 오류가 발생했습니다. 이러한 설정을 고치고 다시 시도하세요.\n\n$1",
"config-session-error": "세션 시작 오류: $1",
@@ -45,29 +46,32 @@
"config-help-restart": "입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?",
"config-restart": "예, 다시 시작합니다",
"config-welcome": "=== 사용 환경 검사 ===\n기본 검사는 지금 이 환경이 미디어위키 설치에 적합한지 수행합니다.\n설치를 완료하는 방법에 대한 지원을 찾는다면 이 정보를 포함해야 하는 것을 기억하세요.",
- "config-copyright": "=== 저작권 및 이용 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참고하십시오.\n\n당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
+ "config-copyright": "=== 저작권 및 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참고하십시오.\n\n당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
"config-sidebar": "* [//www.mediawiki.org 미디어위키 홈]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 사용자 가이드]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents 관리자 가이드]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>읽어보기</doclink>\n* <doclink href=ReleaseNotes>릴리스 노트</doclink>\n* <doclink href=Copying>전문</doclink>\n* <doclink href=UpgradeDoc>업그레이드하기</doclink>",
"config-env-good": "환경이 확인되었습니다.\n미디어위키를 설치할 수 있습니다.",
"config-env-bad": "환경이 확인되었습니다.\n미디어위키를 설치할 수 없습니다.",
- "config-env-php": "PHP $1(이)가 설치되었습니다.",
+ "config-env-php": "PHP $1이(가) 설치되어 있습니다.",
+ "config-env-hhvm": "HHMV $1이(가) 설치되어 있습니다.",
"config-unicode-using-utf8": "유니코드 정규화에 Brion Vibber의 utf8_normalize.so를 사용합니다.",
"config-unicode-using-intl": "유니코드 정규화에 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용합니다.",
- "config-unicode-pure-php-warning": "'''경고''': 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 pure-PHP 구현을 대신 사용합니다.\n트래픽이 높은 사이트에서 실행하시려면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 유니코드 정규화]를 읽어보시기 바랍니다.",
- "config-unicode-update-warning": "'''경고''': 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.\n만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 업그레이드]해야합니다.",
- "config-no-db": "적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP용 데이터베이스 드라이버를 설치해야 합니다.\n다음 데이터베이스 유형을 지원합니다: $1.\n\nPHP를 직접 컴파일했다면, 예를 들어 <code>./configure --with-mysql</code>을 사용하여, 데이터베이스 클라이언트를 활성화하도록 다시 설정하세요.\n데비안이나 우분투 패키지에서 PHP를 설치했다면 <code>php5-mysql</code> 모듈도 설치해야 합니다.",
- "config-outdated-sqlite": "'''경고''': 최소인 $2 버전보다 낮은 SQLite $1(이)가 있습니다. SQLite를 사용할 수 없습니다.",
- "config-no-fts3": "'''경고''': SQLite를 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일하며, 검색 기능은 백엔드에 사용할 수 없습니다.",
+ "config-unicode-pure-php-warning": "<strong>경고</strong>: 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 pure-PHP 구현을 대신 사용합니다.\n트래픽이 높은 사이트에서 실행하시려면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 유니코드 정규화]를 읽어보셔야 합니다.",
+ "config-unicode-update-warning": "<strong>경고</strong>: 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.\n만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 업그레이드]해야합니다.",
+ "config-no-db": "적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP용 데이터베이스 드라이버를 설치해야 합니다.\n다음 데이터베이스 {{PLURAL:$2|유형을 지원합니다}}: $1.\n\nPHP를 직접 컴파일했다면, 예를 들어 <code>./configure --with-mysql</code>을 사용하여, 데이터베이스 클라이언트를 활성화하도록 다시 설정하세요.\n데비안이나 우분투 패키지에서 PHP를 설치했다면 <code>php5-mysql</code> 모듈도 설치해야 합니다.",
+ "config-outdated-sqlite": "<strong>경고</strong>: 최소인 $2 버전보다 낮은 SQLite $1(이)가 있습니다. SQLite를 사용할 수 없습니다.",
+ "config-no-fts3": "<strong>경고</strong>: SQLite를 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일하며, 검색 기능은 백엔드에 사용할 수 없습니다.",
"config-register-globals-error": "<strong>오류: PHP의 <code>[http://php.net/register_globals register_globals]</code> 옵션이 활성화되어 있습니다.\n설치를 계속하려면 비활성화해야 합니다.</strong>\n어떻게 하는지에 대한 도움말에 대해서는 [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals]를 보세요.",
- "config-magic-quotes-runtime": "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성화됩니다!'''\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
- "config-magic-quotes-sybase": "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성화됩니다!'''\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
- "config-mbstring": "'''치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성화됩니다!'''\n이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상을 일으킬 수 있습니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
- "config-safe-mode": "'''경고:''' [http://www.php.net/features.safe-mode 안전 모드]가 활성화됩니다!\n특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
+ "config-magic-quotes-gpc": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+ "config-magic-quotes-runtime": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+ "config-magic-quotes-sybase": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+ "config-mbstring": "<strong>치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성화되어 있습니다!</strong>\n이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상을 일으킬 수 있습니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
+ "config-safe-mode": "<strong>경고:</strong> PHP의 [http://www.php.net/features.safe-mode 안전 모드]가 활성화되어 있습니다!\n특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
"config-xml-bad": "PHP의 XML 모듈이 없습니다.\n미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.\nMandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.",
- "config-pcre-old": "'''치명적인 오류:''' PCRE $1 또는 이후의 것들이 필요합니다. 당신의 PHP 바이너리는 PCRE $2와 연결되어 있습니다. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 더 많은 정보].",
- "config-pcre-no-utf8": "'''치명''': PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.\n미디어위키가 제대로 작동하려면 UTF-8을 지원해야 합니다.",
+ "config-pcre-old": "<strong>치명:</strong> PCRE $1 또는 그 이상이 필요합니다.\nPHP 바이너리는 PCRE $2에 연결되어 있습니다. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 자세한 정보].",
+ "config-pcre-no-utf8": "<strong>치명:</strong> PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.\n미디어위키가 올바르게 작동하려면 UTF-8을 지원해야 합니다.",
"config-memory-raised": "PHP의 <code>memory_limit</code>는 $1이며 $2(으)로 늘렸습니다.",
"config-memory-bad": "'''경고:''' PHP의 <code>memory_limit</code>는 $1입니다.\n아마도 너무 낮은 것 같습니다.\n설치가 실패할 수 있습니다!",
"config-ctype": "'''치명''': PHP는 [http://www.php.net/manual/en/ctype.installation.php Ctype 확장 기능]을 지원하도록 하여 컴파일해야 합니다.",
+ "config-iconv": "<strong>치명</strong>: PHP는 [http://www.php.net/manual/en/iconv.installation.php iconv 확장 기능]을 지원하도록 하여 컴파일해야 합니다.",
"config-json": "'''치명:''' PHP가 JSON 지원이 없이 컴파일되었습니다.\n미디어위키를 설치하기 전에 PHP JSON 확장 기능이나 [http://pecl.php.net/package/jsonc PECL jsonc] 확장 기능 중 하나를 설치해야 합니다.\n* PHP 확장 기능은 Red Hat Enterprise Linux (CentOS) 5와 6에 포함되어 있지만, <code>/etc/php.ini</code>나 <code>/etc/php.d/json.ini</code>에서 활성화해야 합니다.\n* 2013년 5월 이후에 출시된 일부 리눅스 배포판은 PHP 확장 기능이 생략된 대신, <code>php5-json</code>이나 <code>php-pecl-jsonc</code>로 PECL 확장 기능이 포장되어 있습니다.",
"config-xcache": "[http://xcache.lighttpd.net/ XCache]가 설치되었습니다",
"config-apc": "[http://www.php.net/apc APC]가 설치되었습니다",
@@ -90,14 +94,14 @@
"config-suhosin-max-value-length": "수호신(Suhosin)이 설치되고 $1 바이트로 GET 매개 변수 <code>length</code>를 제한하고 있습니다.\n미디어위키의 ResourceLoader 구성 요소는 이 제한을 회피하지만 성능이 저하됩니다.\n가능하면 <code>php.ini</code>의 <code>suhosin.get.max_value_length</code>를 1024 이상으로 설정하고 <code>LocalSettings.php</code>의 <code>$wgResourceLoaderMaxQueryLength</code>를 같은 값으로 설정해야 합니다.",
"config-db-type": "데이터베이스 종류:",
"config-db-host": "데이터베이스 호스트:",
- "config-db-host-help": "데이터베이스 서버가 다른 서버에 있으면 여기에 호스트 이름이나 IP 주소를 입력하세요.\n\n공유하는 웹 호스팅을 사용하고 있으면 호스팅 제공 업체는 정확한 호스트 이름을 설명하고 있을 것입니다.\n\n윈도 서버에 설치하고 MySQL을 사용하면 \"localhost\"가 해당 서버 이름으로는 작동하지 않을 수 있습니다. 그렇게 된다면 로컬 IP 주소로 \"127.0.0.1\"을 시도하세요.\n\nPostgreSQL을 사용하면 유닉스 소켓을 통해 연결되도록 입력란을 비워두세요.",
+ "config-db-host-help": "데이터베이스 서버가 다른 서버에 있으면 여기에 호스트 이름이나 IP 주소를 입력하세요.\n\n공유하는 웹 호스팅을 사용하고 있으면 호스팅 제공 업체는 올바른 호스트 이름을 설명하고 있을 것입니다.\n\nWindows 서버에 설치하고 MySQL을 사용하면 \"localhost\"가 서버 이름으로는 작동하지 않을 수 있습니다. 그렇게 된다면 로컬 IP 주소로 \"127.0.0.1\"을 시도하세요.\n\nPostgreSQL을 사용하면 유닉스 소켓을 통해 연결되도록 입력란을 비워두세요.",
"config-db-host-oracle": "데이터베이스 TNS:",
"config-db-host-oracle-help": "올바른 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 로컬 연결 이름]을 입력하세요. tnsnames.ora 파일이 이 설치 위치에서 참조할 수 있는 곳에 있어야 합니다.<br />10g 이후의 클라이언트 라이브러리를 사용하는 경우 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 쉬운 연결] 네이밍 메서드도 사용할 수 있습니다.",
"config-db-wiki-settings": "이 위키 식별",
"config-db-name": "데이터베이스 이름:",
"config-db-name-help": "위키를 식별하기 위한 이름을 선택하세요.\n공백이 없어야 합니다.\n\n공유하는 웹 호스팅 사용하면 호스팅 제공 업체가 특정 데이터베이스 이름을 제공하거나 제어판에서 데이터베이스를 만들 수 있습니다.",
"config-db-name-oracle": "데이터베이스 스키마:",
- "config-db-account-oracle-warn": "데이터베이스 백엔드로 오라클을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:\n\n설치 과정의 일부로 데이터베이스 계정을 만들려면 설치를 위해 데이터베이스 계정으로 SYSDBA 역할을 가진 계정을 제공하고 웹 접근 계정에 대해 원하는 자격 증명을 지정하세요, 그렇지 않으면 수동으로 웹 접근 계정을 만들 수 있으며 (스키마 개체를 만들 권한이 필요한 경우) 또는 생성 권한으 가진 계정과 웹 접근이 제한된 계정의 두 가지 다른 계정을 제공할 수도 있습니다\n\n필요한 권한을 가진 계정을 만드는 스크립트는 이 설치 위치의 \"maintenance/oracle/\" 디렉터리에서 찾을 수 있습니다. 제한된 계정을 사용하면 기본 계정의 모든 유지 관리 기능이 비활성화된다는 점에 유의하십시오.",
+ "config-db-account-oracle-warn": "데이터베이스 백엔드로 Oracle을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:\n\n설치 과정의 일부로 데이터베이스 계정을 만들려면 설치를 위해 데이터베이스 계정으로 SYSDBA 역할을 가진 계정을 제공하고 웹 접근 계정에 대해 원하는 자격 증명을 지정하세요, 그렇지 않으면 수동으로 웹 접근 계정을 만들 수 있으며 (스키마 개체를 만들 권한이 필요한 경우) 또는 생성 권한을 가진 계정과 웹 접근이 제한된 계정의 두 가지 다른 계정을 제공할 수도 있습니다\n\n필요한 권한을 가진 계정을 만드는 스크립트는 이 설치 위치의 \"maintenance/oracle/\" 디렉터리에서 찾을 수 있습니다. 제한된 계정을 사용하면 기본 계정의 모든 유지 관리 기능이 비활성화된다는 점에 유의하십시오.",
"config-db-install-account": "설치를 위한 사용자 계정",
"config-db-username": "데이터베이스 사용자 이름:",
"config-db-password": "데이터베이스 비밀번호:",
@@ -122,39 +126,39 @@
"config-db-schema-help": "보통 이 스키마는 문제가 없습니다.\n필요한 경우에만 바꾸세요.",
"config-pg-test-error": "'''$1''' 데이터베이스에 연결할 수 없습니다: $2",
"config-sqlite-dir": "SQLite 데이터 디렉터리:",
- "config-sqlite-dir-help": "SQLite는 하나의 파일에 모든 데이터를 저장합니다.\n\n입력한 디렉토리는 설치하는 동안 웹 서버가 쓸 수 있어야 합니다.\n\n이 디렉토리는 웹을 통해 접근할 수 '''없어야''' 하는데, PHP 파일이 있는 곳에 넣을 수 없는 것은 이 때문입니다.\n\n설치 프로그램은 <code>.htaccess</code> 파일을 작성하지만, 이것이 실패하면 누군가가 원본 데이터베이스에 접근할 수 있습니다.\n데이터베이스는 원본 사용자 데이터(이메일 주소, 해시한 비밀번호)뿐만 아니라 삭제된 판과 위키의 다른 제한된 데이터를 포함합니다.\n\n예를 들어 <code>/var/lib/mediawiki/yourwiki</code>와 같이 다른 곳에 데이터베이스를 넣는 것이 좋습니다.",
+ "config-sqlite-dir-help": "SQLite는 하나의 파일에 모든 데이터를 저장합니다.\n\n입력한 디렉토리는 설치하는 동안 웹 서버가 쓸 수 있어야 합니다.\n\n이 디렉토리는 웹을 통해 접근할 수 <strong>없어야</strong> 합니다. PHP 파일이 있는 곳에 넣을 수 없는 것은 이 때문입니다.\n\n설치 관리자는 <code>.htaccess</code> 파일을 작성하지만, 이것이 실패하면 누군가가 원본 데이터베이스에 접근할 수 있습니다.\n데이터베이스는 원본 사용자 데이터(이메일 주소, 해시한 비밀번호)뿐만 아니라 삭제된 판과 위키의 다른 제한된 데이터를 포함합니다.\n\n예를 들어 <code>/var/lib/mediawiki/yourwiki</code>와 같이 다른 곳에 데이터베이스를 넣는 것이 좋습니다.",
"config-oracle-def-ts": "기본 테이블공간:",
"config-oracle-temp-ts": "임시 테이블공간:",
"config-type-mysql": "MySQL (또는 호환되는 데이터베이스 시스템)",
"config-type-oracle": "Oracle",
- "config-type-mssql": "마이크로소프트 SQL 서버",
+ "config-type-mssql": "Microsoft SQL 서버",
"config-support-info": "미디어위키는 다음의 데이터베이스 시스템을 지원합니다:\n\n$1\n\n데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 위의 링크된 지시에 따라 설치해볼 수 있습니다.",
- "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]은 미디어위키의 기본 대상이며 가장 잘 지원됩니다. 미디어위키는 또한 MySQL와 호환되는 [{{int:version-db-mariadb-url}} MariaDB]와 [{{int:version-db-percona-url}} Percona 서버]에서도 작동합니다. \n\n([http://www.php.net/manual/en/mysql.installation.php MySQL을 지원하여 PHP를 컴파일하는 방법])",
- "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]은 MySQL의 대안으로서 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL을 지원하여 PHP를 컴파일하는 방법]) 몇 가지 해결하지 못한 사소한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.",
- "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]는 매우 잘 지원되고 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite를 지원하여 PHP를 컴파일하는 방법], PDO 사용)",
- "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} 오라클]은 상용 엔터프라이스 데이터베이스입니다. ([http://www.php.net/manual/en/oci8.installation.php OCI8을 지원하여 PHP를 컴파일하는 방법])",
- "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} 마이크로소프트 SQL 서버]는 윈도용 상용 기업 데이터베이스입니다.([http://www.php.net/manual/en/sqlsrv.installation.php SQLSRV 지원으로 PHP를 컴파일하는 방법])",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]은 미디어위키의 기본 대상이며 가장 잘 지원됩니다. 미디어위키는 또한 MySQL와 호환되는 [{{int:version-db-mariadb-url}} MariaDB]와 [{{int:version-db-percona-url}} Percona 서버]에서도 작동합니다. ([http://www.php.net/manual/en/mysql.installation.php MySQL 지원으로 PHP를 컴파일하는 방법])",
+ "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]은 MySQL의 대안으로서 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL 지원으로 PHP를 컴파일하는 방법]) 몇 가지 해결하지 못한 사소한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]는 매우 잘 지원되고 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite 지원으로 PHP를 컴파일하는 방법], PDO 사용)",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle]은 상용 기업 데이터베이스입니다. ([http://www.php.net/manual/en/oci8.installation.php OCI8 지원으로 PHP를 컴파일하는 방법])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL 서버]는 Windows용 상용 기업 데이터베이스입니다. ([http://www.php.net/manual/en/sqlsrv.installation.php SQLSRV 지원으로 PHP를 컴파일하는 방법])",
"config-header-mysql": "MySQL 설정",
"config-header-postgres": "PostgreSQL 설정",
"config-header-sqlite": "SQLite 설정",
"config-header-oracle": "Oracle 설정",
- "config-header-mssql": "마이크로소프트 SQL 서버 설정",
+ "config-header-mssql": "Microsoft SQL 서버 설정",
"config-invalid-db-type": "잘못된 데이터베이스 종류",
"config-missing-db-name": "\"{{int:config-db-name}}\"에 대한 값을 입력해야 합니다.",
"config-missing-db-host": "\"{{int:config-db-host}}\"에 대한 값을 입력해야 합니다.",
"config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\"에 대한 값을 입력해야 합니다.",
- "config-invalid-db-server-oracle": "\"$1\" 데이터베이스 TNS가 잘못됐습니다.\n\"TNS Name\"이나 \"Easy Connect\" 문자열 중 하나를 사용하세요 ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm 오라클 네이밍 메서드])",
+ "config-invalid-db-server-oracle": "\"$1\" 데이터베이스 TNS가 잘못됐습니다.\n\"TNS Name\"이나 \"Easy Connect\" 문자열 중 하나를 사용하세요 ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle 네이밍 메서드]).",
"config-invalid-db-name": "\"$1\" 데이터베이스 이름이 잘못되었습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
"config-invalid-db-prefix": "\"$1\" 데이터베이스 접두어가 잘못됐습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
"config-connection-error": "$1.\n\n호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.",
"config-invalid-schema": "미디어위키 \"$1\"에 대한 스키마가 잘못됐습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
- "config-db-sys-create-oracle": "설치 프로그램은 새 계정을 만들기 위한 SYSDBA 계정만을 지원합니다.",
+ "config-db-sys-create-oracle": "설치 관리자는 새 계정을 만들기 위한 SYSDBA 계정만을 지원합니다.",
"config-db-sys-user-exists-oracle": "\"$1\" 사용자 계정이 이미 존재합니다. SYSDBA는 새 계정을 만드는 데에만 사용할 수 있습니다!",
"config-postgres-old": "PostgreSQL $1 이상이 필요하나 $2(이)가 있습니다.",
- "config-mssql-old": "마이크로소프트 SQL 서버 $1 이상의 버전이 필요합니다. 현재 버전은 $2입니다.",
+ "config-mssql-old": "Microsoft SQL 서버 $1 이상의 버전이 필요합니다. 현재 버전은 $2입니다.",
"config-sqlite-name-help": "위키를 식별하기 위한 이름을 선택하세요.\n공백이나 하이픈을 사용하지 마십시오.\nSQLite 데이터 파일 이름에 사용됩니다.",
- "config-sqlite-parent-unwritable-group": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며, 이는 웹 서버는 상위 디렉토리인 <code><nowiki>$2</nowiki></code>에 쓸 수 없기 때문입니다.\n\n설치 프로그램은 웹 서버로 실행 중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버가 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
- "config-sqlite-parent-unwritable-nogroup": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며, 이는 웹 서버가 상위 디렉토리인 <code><nowiki>$2</nowiki></code>에 쓸 수 없기 때문입니다.\n\n설치 프로그램은 웹 서버로 실행 중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버(와 그 외 서버!)가 전역으로 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+ "config-sqlite-parent-unwritable-group": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며, 이는 웹 서버는 상위 디렉토리인 <code><nowiki>$2</nowiki></code>에 쓸 수 없기 때문입니다.\n\n설치 관리자는 웹 서버로 실행 중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버가 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+ "config-sqlite-parent-unwritable-nogroup": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며, 이는 웹 서버가 상위 디렉토리인 <code><nowiki>$2</nowiki></code>에 쓸 수 없기 때문입니다.\n\n설치 관리자는 웹 서버로 실행 중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버(와 그 외 서버!)가 전역으로 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
"config-sqlite-mkdir-error": "\"$1\" 데이터 디렉터리를 만드는 도중 오류가 발생했습니다.\n경로를 확인하고 다시 시도하세요.",
"config-sqlite-dir-unwritable": "\"$1\" 디렉토리에 쓸 수 없습니다.\n웹 서버를 쓸 수 있도록 권한을 바꾸고 다시 시도하세요.",
"config-sqlite-connection-error": "$1.\n\n호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.",
@@ -274,7 +278,9 @@
"config-extensions": "확장 기능",
"config-extensions-help": "위에 나열된 확장 기능이 <code>./extensions</code>에서 발견되었습니다.\n\n추가적인 설정이 필요할 수 있습니다만 지금 활성화시킬 수 있습니다.",
"config-skins": "스킨",
+ "config-skins-help": "위에 나열된 스킨이 <code>./skins</code> 디렉터리에서 감지되었습니다. 적어도 하나를 활성화하고 나서, 기본값을 선택해야 합니다.",
"config-skins-use-as-default": "이 스킨을 기본값으로 사용",
+ "config-skins-missing": "스킨을 찾을 수 없습니다; 미디어위키는 당신이 적절한 스킨을 설치할 때까지 대체 스킨을 사용합니다.",
"config-skins-must-enable-some": "적어도 활성화활 스킨 하나를 선택해야 합니다.",
"config-skins-must-enable-default": "기본값으로 설정한 스킨은 반드시 활성화해야 합니다.",
"config-install-alreadydone": "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.\n다음 페이지로 진행하세요.",
@@ -306,13 +312,15 @@
"config-install-stats": "통계를 초기화하는 중",
"config-install-keys": "보안 키를 만드는 중",
"config-insecure-keys": "'''경고:''' 설치 중에 생성한 {{PLURAL:$2|보안 키}} ($1)는 완전히 안전하지 {{PLURAL:$2|않습니다}}. 직접 바꾸는 것을 고려하세요.",
+ "config-install-updates": "불필요한 업데이트 실행 방지",
+ "config-install-updates-failed": "<strong>오류:</strong> 다음 오류로 테이블 안에 업데이트 키를 넣기에 실패했습니다: $1",
"config-install-sysop": "관리자 사용자 계정을 만드는 중",
"config-install-subscribe-fail": "미디어위키 알림을 구독할 수 없습니다: $1",
"config-install-subscribe-notpossible": "cURL이 설치되어 있지 않고 <code>allow_url_fopen</code>을 사용할 수 없습니다.",
"config-install-mainpage": "기본 내용으로 대문을 만드는 중",
"config-install-extension-tables": "활성화된 확장 기능을 위한 테이블을 만드는 중",
"config-install-mainpage-failed": "대문을 삽입할 수 없습니다: $1",
- "config-install-done": "'''축하합니다!'''\n미디어위키가 성공적으로 설치되었습니다.\n\n설치 프로그램이 <code>LocalSettings.php</code> 파일을 만들었습니다.\n모든 설정이 포함되어 있습니다.\n\n파일을 다운로드하여 위키 설치의 거점에 넣어야 합니다. (index.php와 같은 디렉터리) 다운로드가 자동으로 시작됩니다.\n\n다운로드가 제공되지 않을 경우나 그것을 취소한 경우에는 아래의 링크를 클릭하여 다운로드를 다시 시작할 수 있습니다:\n\n$3\n\n'''참고:''' 이 생성한 설정 파일을 다운로드하지 않고 설치를 끝내면 이 파일은 나중에 사용할 수 없습니다.\n\n완료되었으면 '''[$2 위키에 들어갈 수 있습니다]'''.",
+ "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-download-localsettings": "<code>LocalSettings.php</code> 다운로드",
"config-help": "도움말",
"config-help-tooltip": "확장하려면 클릭",
diff --git a/includes/installer/i18n/ksh.json b/includes/installer/i18n/ksh.json
index 785b2b5e..367db406 100644
--- a/includes/installer/i18n/ksh.json
+++ b/includes/installer/i18n/ksh.json
@@ -19,13 +19,13 @@
"config-session-error": "Ene Fähler es opjetrodde beim Aanmelde för en Sezung: $1",
"config-session-expired": "De Daate för Ding Setzung sinn wall övverholld of afjeloufe.\nDe Setzungunge sin esu enjeshtallt, nit mieh wi $1 ze doore.\nDat kanns De verlängere, endämm dat De de <code lang=\"en\">session.gc_maxlifetime</code> en dä Dattei <code>php.ini</code> jrüüßer määß.\nDon dat Projramm för et Opsäze norr_ens aanschmiiße.",
"config-no-session": "De Daate för Ding Setzung sinn verschött jejange.\nDonn en dä Dattei <code>php.ini</code> nohloore, ov dä <code lang=\"en\">session.save_path</code> op e zopaß Verzeijschneß zeisch.",
- "config-your-language": "Ding Schprooch:",
- "config-your-language-help": "Donn heh di Shprooch ußsöhke, di dat Enshtallzjuhnsprojramm kalle sull.",
- "config-wiki-language": "Dem Wiki sing Shprooch:",
- "config-wiki-language-help": "Donn heh di Shprooch ußsöhke, di et Wiki shtandattmääßesch kalle sull.",
+ "config-your-language": "De Schprohch beim Enreeschte:",
+ "config-your-language-help": "Donn heh di Schprohch ußsöhke, di dat Enschtallzjuhnsprojramm kalle sull.",
+ "config-wiki-language": "Dem Wiki sing Schprohch:",
+ "config-wiki-language-help": "Donn heh di Schprohch ußsöhke, di et Wiki schtandattmääßesch kalle sull.",
"config-back": "← Retuur",
"config-continue": "Wigger →",
- "config-page-language": "Schprooch",
+ "config-page-language": "Schprohch",
"config-page-welcome": "Wellkumme beim MediaWiki!",
"config-page-dbconnect": "Met dä Daatebangk Verbenge",
"config-page-upgrade": "En Inshtallzjuhn op der neuste Shtand bränge",
@@ -48,7 +48,7 @@
"config-env-good": "De Ömjävung es jeprööf.\nDo kanns MediaWiki opsäze.",
"config-env-bad": "De Ömjävung es jeprööf.\nDo kanns MediaWiki nit opsäze.",
"config-env-php": "PHP $1 es doh.",
- "config-env-php-toolow": "PHP $1 es enshtalleert.\nÄvver MediaWiki bruch PHP $2 udder hühter.",
+ "config-env-hhvm": "HHVM $1 es enschtalleerd.",
"config-unicode-using-utf8": "För et <i lang=\"en\">Unicode</i>-Nommaliseere dom_mer däm <i lang=\"en\">Brion Vibber</i> sing Projramm <code lang=\"en\">utf8_normalize.so</code> nämme.",
"config-unicode-using-intl": "För et <i lang=\"en\">Unicode</i>-Nommaliseere dom_mer dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] nämme.",
"config-unicode-pure-php-warning": "'''Opjepaß:''' Mer kunnte dä [http://pecl.php.net/intl Zohsaz <code lang=\"en\">intl</code> uss em <code lang=\"en\">PECL</code>] för et <i lang=\"en\">Unicode</i>-Nommaliseere nit fenge. Dröm nämme mer dat eijfache, ävver ärsh lahme, <i lang=\"en\">PHP</i>-Projrammshtöck doför.\nFör jruuße Wikis met vill Metmaachere doht Üsch die Sigg övver et [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations <i lang=\"en\">Unicode</i>-Nommaliseere] (es op Änglesch) aanloore.",
@@ -56,7 +56,8 @@
"config-no-db": "Mer kunnte kei zopaß Daatebangk-Driiverprojamm fenge.\nMer bruche e Daatebangk-Driiverprojamm för PHP. Dat moß enjeresht wääde.\nMer künne met heh dä Daatebangke ömjonn: $1.\n\nWann De nit om eijene Rääshner bes, moß De Dinge <i lang=\"en\">provider</i> bedde, dat hä Der ene zopaß Driiver enresht.\nWann de PHP sellver övversaz häs, donn e Zohjangsprojramm för en Daatebangk enbenge, för e Beishpell met: <code lang=\"en\">./configure --with-mysql</code>.\nWann De PHP uss enem <i lang=\"en\">Debian</i> udder <i lang=\"en\">Ubuntu</i> Pakätt enjeresht häs, moß De dann och noch et <code lang=\"en\">php5-mysql</code> op Dinge Räschner bränge.",
"config-outdated-sqlite": "'''Opjepaß:''' <i lang=\"en\">SQLite</i> $1 es enschtaleert. Avver MediaWiki bruch <i lang=\"en\">SQLite</i> $2 udder hühter. <i lang=\"en\">SQLite</i> kann dröm nit enjesaz wääde.",
"config-no-fts3": "'''Opjepaß:''' De Projramme vum <i lang=\"en\">SQLite</i> sin der ohne et [//sqlite.org/fts3.html FTS3-Modul] övversaz, dröm wääde de Funxjohne för et Söhke fähle.",
- "config-register-globals": "'''Opjepaß:''' dem PHP singe Schallder <code lang=\"en\">[http://php.net/register_globals register_globals]</code> es enjeschalldt.\n'''Donn dä ußmaache, wann De kann.'''\nMediaWiki löp och esu, dä künnt ävver Sesherheitslöcke opmaache, di mer noch nit jefonge un eruß jemaat hät.",
+ "config-register-globals-error": "<strong>Fähler: dem PHP sing Enschtällong <code>[http://php.net/register_globals register_globals]</code> es aanjeschalldt.\nSe moß ußjeschalldt sin, domet mer heh wigger maache kann.</strong>\nLoor op dä Sigg [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] wi mer se ußschallde kann.",
+ "config-magic-quotes-gpc": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
"config-magic-quotes-runtime": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
"config-magic-quotes-sybase": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
"config-mbstring": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> es enjeschalldt.\nDat sorresch för Fähler un kann enjejovve Daate esu kapott maach, dat doh draan nix mieh ze repareere es.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
@@ -67,6 +68,7 @@
"config-memory-raised": "Der jrühzte zohjelasse Shpeisherbedarf vum PHP, et <code lang=\"en\">memory_limit</code>, shtund op $1 un es op $2 erop jesaz woode.",
"config-memory-bad": "'''Opjepaß:''' Dem PHP singe Parameeter <code lang=\"en\">memory_limit</code> es $1.\nDat es wall ze winnisch.\nEt Enreeschte kunnt doh draan kappott jon!",
"config-ctype": "'''Fähler:''' <i lang=\"en\">PHP</i> moß met dä Ongerschtözong för der [http://www.php.net/manual/en/ctype.installation.php <code lang=\"en\">Ctype</code> Zohsaz] övversaz woode sin.",
+ "config-iconv": "'''Fähler:''' <i lang=\"en\">PHP</i> moß met dä Ongerschtözong för der [http://www.php.net/manual/en/iconv.installation.php <code lang=\"en\">iconv</code> Zohsaz] övversaz woode sin.",
"config-json": "'''Dä!:''' PHP wood der ohne <i lang=\"en\" xml:lang=\"en\">JSON</i> övversaz.\nJäz moß de äntweeder dä PHP-<i lang=\"en\" xml:lang=\"en\">JSON</i>-Zohsaz enschtallere udder der <i lang=\"en\" xml:lang=\"en\">[http://pecl.php.net/package/jsonc PECL jsonc]</i>-Zohsaz, ih dat de MedijaWikki enschtallere kanns.\n* Dä PHP-Zohsaz es em <i lang=\"en\" xml:lang=\"en\">Red Hat Enterprise Linux (CentOS)</i> 5 un 6 änthallde, moß ävver en de <code lang=\"en\" xml:lang=\"en\">/etc/php.ini</code> udder <code lang=\"en\" xml:lang=\"en\">/etc/php.d/json.ini</code> enjeschalldt wääde.\n* E paa Linux Destrebuzjohne lohß zigg_em Mai 2013 dä PHP-Zohsaz fott un packe doför der PECL-Zohsaz als <code lang=\"en\" xml:lang=\"en\">php5-json</code> udder <code lang=\"en\" xml:lang=\"en\">php-pecl-jsonc</code> med ein.",
"config-xcache": "Dä <code lang=\"en\">[http://xcache.lighttpd.net/ XCache]</code> es ennjeresht.",
"config-apc": "Dä <code lang=\"en\">[http://www.php.net/apc APC]</code> es ennjeresht.",
@@ -114,7 +116,7 @@
"config-charset-mysql5-binary": "MySQL (4.1 udder 5.0) binär",
"config-charset-mysql5": "MySQL (4.1 udder 5.0) UTF-8",
"config-charset-mysql4": "MySQL 4.0 röckwääts kompatibel UTF-8",
- "config-charset-help": "<strong>Opjepaß:</strong>\nWann De et <strong>röckwääts kompatibel UTF-8 Fommaat</strong> nemmps, met dem <i lang=\"en\">MySQL</i> singe Version4.1 udder hüüter, dann künnt dat all di Zeische kappott maache, die nit em <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> sen, un domet all ding Sescherungskopieje kapott maache, wat mer nieh mieh retuur krijje kann.\n\nBeim Schpeischere em <strong>binäre Fomaat</strong> deiht MediaWiki de Täx, dä em UTF-8 Fommaat küdd, en dä Daatebangk en binär kodeerte Daatefälder faßhallde.\nDat es flöcker un spaasaamer wi et UTF-8 Fommaat vum <i lang=\"en\">MySQL</i> un määd et müjjelesch, all un jeedes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeischere em <strong>UTF-8 Fomaat</strong> deiht et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Schprooche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wääde.",
+ "config-charset-help": "<strong>Opjepaß:</strong>\nWann De et <strong>röckwääts kompatibel UTF-8 Fommaht</strong> nemmps, met dem <i lang=\"en\">MySQL</i> singe Väsjohn 4.1 udder hüüter, dann künnt dat all di Zeische kappott maache, die nit em <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> sen, un domet all Ding Sescherungskopieje kapott maache, wat mer nieh mieh retuur krijje kann.\n\nBeim Schpeischere em <strong>binäre Fomaat</strong> deiht MediaWiki de Täx, dä em UTF-8 Fommaht küt, en dä Dahtebangk en binähr kodehrte Dahtefälder faßhallde.\nDat es flöcker un spaasahmer wi et UTF-8 Fommaht vum <i lang=\"en\">MySQL</i> un määd_et müjjelesch, jehdes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeischere em <strong>UTF-8 Fomaht</strong> deihd_et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodehrung vun dä Dahte känne, un kann se akeraht aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrondlähje Knubbel för vill Schprohche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wähde.",
"config-mysql-old": "Mer bruche <i lang=\"en\">MySQL</i> $1 udder neuer. Em Momang es <i lang=\"en\">MySQL</i> $2 aam Loufe.",
"config-db-port": "De Pooz-Nommer (<i lang=\"en\">port</i>) för de Daatebangk:",
"config-db-schema": "Et Schema en de Datebangk för MediaWiki:",
@@ -182,7 +184,7 @@
"config-mysql-charset": "Dä Daatebangk iere Zeischesaz:",
"config-mysql-binary": "binär",
"config-mysql-utf8": "UTF-8",
- "config-mysql-charset-help": "Beim Schpeishere em <strong>binäre Fomaat</strong> deiht MediaWiki Täxt, dä em UTF-8 Fommaat kütt, en dä Daatebangk en binär kodeerte Daatefälder faßhallde.\nDat es flöcker un spaasaamer wi et UTF-8 Fommaat vum <i lang=\"en\">MySQL</i> un määd et müjjelesch, all un jeedes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeishere em <strong>UTF-8 Fomaat<strong> deiht et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodeerung vun dä Daate känne, un kann se akeraat aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlääje Knubbel för vill Schprooche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wääde.",
+ "config-mysql-charset-help": "Beim Schpeischere em <strong>binähre Fomaht</strong> deiht MediaWiki Täx, dä em UTF-8 Fommaht kütt, en singer Dahtebangk en binähr kodehrte Dahtefälder faßhallde.\nDad_es flöcker un spahsamer wi et UTF-8 Fommaht vum <i lang=\"en\">MySQL</i> un määd_et müjjelesch, jehdes <i lang=\"en\">Unicode</i>-Zeische met faßzehallde.\n\nBeim Schpeischere em <strong>UTF-8 Fomaht<strong> deihd_et <i lang=\"en\">MySQL</i> der Zeischesaz un de Kodehrung vun dä Dahte känne, un kann se akeraht aanzeije un ömwandelle,\nallerdengs künne kein Zeische ußerhalv vum [//de.wikipedia.org/wiki/Basic_Multilingual_Plane#Gliederung_in_Ebenen_und_Bl.C3.B6cke jrundlähje Knubbel för vill Schprohche (<i lang=\"en\">Basic Multilingual Plane — BMP</i>)] afjeschpeischert wähde.",
"config-mssql-auth": "De Zoot Aanmäldong:",
"config-mssql-install-auth": "Söhk us, wi dat Aanmälde aan dä Daatebangk vor sesch jonn sull för de Enschtallazjuhn.\nWann De <em>{{int:Config-mssql-windowsauth}}</em> nemms, weed jenumme, met wat emmer dä Wäbßööver aam loufe es.",
"config-mssql-web-auth": "Söhk us, wi dat Aanmälde aan dä Daatebangk vör sesch jonn sull för de nommaale Ärbeid vum Wiki.\nWann De <em>{{int:Config-mssql-windowsauth}}</em> nemms, weed dat jenumme, wohmet dä Wäbßööver aam loufe es.",
@@ -234,7 +236,7 @@
"config-license-gfdl": "De <i lang=\"en\">GNU</i>-Lizänz för frei Dokemäntazjuhne, Version 1.3 udder en späädere",
"config-license-pd": "Allmende (jemeinfrei, <i lang=\"en\">public domain</i>)",
"config-license-cc-choose": "En <i lang=\"en\">Creative Commons</i> Lizänz, sellver ußjesöhk:",
- "config-license-help": "Ättlijje öffentleje Wikis donn iehr Beidrääsh onger en [http://freedomdefined.org/Definition frei Lizänz] shtelle.\nDat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesh emmer wider Beidrääsch ze krijje.\nDat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki.\n\nWä Stöcke uß de Wikipedia bruche well, un han well, dat de Wikipedia uss_em eije Wiki jät övvernämme kann, sullt „'''<i lang=\"en\">Creative Commons</i>, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle.\n\nDe su jenannte '''<i lang=\"en\">GNU Free Documentation License</i>''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se es schwer ze vershtonn un et Wiggerjävve un widder Verwände es manshmool schwieeresch domet.",
+ "config-license-help": "Ättlijje öffentleje Wikis donn iehr Beidrääsch onger en [http://freedomdefined.org/Definition freije Lizänz] schtelle.\nDat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesch emmer wider Beidrääsch ze krijje.\nDat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki.\n\nWä Stöcke uß de Wikipedia bruche well, un dröm han well, dat mer för Wikipedia uss_em eije Wiki jät övvernämme kann, sullt „'''<i lang=\"en\">Creative Commons</i>, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle.\n\nDe su jenannte '''<i lang=\"en\">GNU Free Documentation License</i>''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se es schwer ze verschtonn un et Wiggerjävve un widder Bruche es ens schwieerejer domet.",
"config-email-settings": "Enschtellunge för de <i lang=\"en\">e-mail</i>",
"config-enable-email": "De <i lang=\"en\">e-mail</i> noh druße zohlohße",
"config-enable-email-help": "Sulle <i lang=\"en\">e-mails</i> zohjelohße sin, moß mer, domet et noher flupp, de [http://www.php.net/manual/en/mail.configuration.php Enschtellunge em PHP för de <i lang=\"en\">e-mails</i>] zopaß jemaat han.\nWann kein <i lang=\"en\">e-mails</i> nüüdesch sin, kam_mer se heh afschallde.",
@@ -274,6 +276,12 @@
"config-memcache-badport": "Dem <code lang=\"en\">memcached</code> ẞööver singe Pooz (<code lang=\"en\">port</code>) Nommere sullte zwesche $1 un $2 sin.",
"config-extensions": "Projramm-Zohsäz (<i lang=\"en\">Extensions</i>)",
"config-extensions-help": "Di bovve opjeleß Zohsazprojramme för et MediaWiki sin em Verzeischneß <code lang=\"en\">./extensions</code> ald ze fenge.\n\nDo kann se heh un jez aanschallde, ävver se künnte noch zohsäzlesch Enshtellunge bruche.",
+ "config-skins": "Bedeenbovverfläsche",
+ "config-skins-help": "De opjeleß Beddenbovverfläsche sin en Dingem Verzeischnesß <code>./skins</code> dre. Do moß winneschßdens eine enschallde, un eine för der Schtandatt ußsöhke.",
+ "config-skins-use-as-default": "Donn heh di Bovverfläsch als der Schtandatt nämme.",
+ "config-skins-missing": "Mer han kein bedeebovverfläsche jevonge un nämme dröm der Schtandatt, bes De wälsche enjeresch häß.",
+ "config-skins-must-enable-some": "Do moß winneschßtens ein Beddenbovverfläsch ußsöhke zum aanschallde.",
+ "config-skins-must-enable-default": "De Schtadatt-Beddenbovverfläsch moß och enjeschalldt sin.",
"config-install-alreadydone": "'''Opjepaß:'''\nEt sühd esu uß, wi wann De MediaWiki ald enshtalleet hätß, un wöhrs aam Versöhke, dat norr_ens ze donn.\nJang wigger op de näähßte Sigg.",
"config-install-begin": "Wann De op „{{int:config-continue}}“ klecks, jeiht de Enshtallazjuhn vum MediaWiki loßß.\nWann De noch Änderonge maache wells, dann kleck op „{{int:config-back}}“.",
"config-install-step-done": "jedonn",
@@ -303,6 +311,8 @@
"config-install-stats": "De Shtatestek-Zahle wääde op Aanfang jeshtallt.",
"config-install-keys": "Jeheime Schlößel wääde opjebout.",
"config-insecure-keys": "'''Opjepaß:''' {{PLURAL:$2|Ene jeheime Schlößel|Jeheim Schlößele|Keine jeheime Schlößel}} ($1) {{PLURAL:$2|es|sin|es}} automattesch aanjelaat woode. {{PLURAL:$2|Dä es|Di sin|Hä es}} ävver nit onbedengk janz sescher. Övverlääsch Der, {{PLURAL:$2|dä|di|en}} norr_ens vun Hand ze ändere.",
+ "config-install-updates": "Donn kein onnühdeje Änderonge maache.",
+ "config-install-updates-failed": "<strong>Dä:</strong> Schlößßelle för et Ändere en Tabälle bränge es donävve jajange. Jemäldt wood: $1",
"config-install-sysop": "Dä Zohjang för der Wiki-Köbes weed aanjelaat.",
"config-install-subscribe-fail": "Mer künne de <i lang=\"en\">e-mail</i>-Leß <code lang=\"en\">mediawiki-announce</code> nit abonneere: $1",
"config-install-subscribe-notpossible": "<code lang=\"en\">cURL</code> es nit enstalleed un <code lang=\"en\">allow_url_fopen</code>es nit doh.",
@@ -312,6 +322,7 @@
"config-install-done": "'''Jlöckwonsch!'''\nMediaWiki es jetz enstalleet.\n\nEt Projramm zom Enreeschte hät en Dattei <code lang=\"en\">LocalSettings.php</code> aanjelaat.\nDoh sin de Enstellunge vum Wiki dren.\n\nDo weeß se eronge laade möße un dann en dem Wiki sing Aanfangsverzeishnes donn möße, et sellve Verzeisneß, woh di Dattei <code lang=\"en\">index.php</code> dren litt. Dat Erongerlaade sullt automattesch aanjefange han.\n\nWann domet jet nit jeflupp hät, udder De di Dattei norr_ens han wells, donn op dä Lengk heh dronger klecke:\n\n$3\n\n'''Opjepaß''': Wann De dat jez nit deihß, es alles verschött, wat De bes jöz enjejovve häs, weil di Dattei fott es en däm Momang, woh heh dat Projamm aam Engk es.\n\nWann De mem Ronger- un widder Huhlaade fäädesh bes, kanns De '''[$2 en Ding Wiki jonn]'''.",
"config-download-localsettings": "Donn di Dattei <code lang=\"en\">LocalSettings.php</code> eronger laade",
"config-help": "Hölp",
+ "config-help-tooltip": "Donn Hölp heh aan däm Plaaz enblände.",
"config-nofile": "De Dattei „$1“ ham_mer nit jefonge. Es di fottjeschmeße?",
"config-extension-link": "Häs De jewoß, dat et Wiki [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions Zohsazprojramme] hann kann?\n\nDo kanns [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category Zohsazprojramme noh Saachjroppe] söhke udder en de [//www.mediawiki.org/wiki/Extension_Matrix Tabäll met de Zohsazprojramme] kike, öm de kumplätte Leß met de Zohsazprojramme ze krijje.",
"mainpagetext": "'''MediaWiki es jäz enschtalleht.'''",
diff --git a/includes/installer/i18n/ku-latn.json b/includes/installer/i18n/ku-latn.json
index a08c83ac..920d9ae2 100644
--- a/includes/installer/i18n/ku-latn.json
+++ b/includes/installer/i18n/ku-latn.json
@@ -6,6 +6,7 @@
},
"config-information": "Agahî",
"config-your-language": "Zimanê te:",
+ "config-wiki-language": "Zimanê wîkiyê:",
"config-page-language": "Ziman",
"config-page-name": "Nav",
"config-page-options": "Vebijêrk",
diff --git a/includes/installer/i18n/lb.json b/includes/installer/i18n/lb.json
index bb1c8295..2dccc50c 100644
--- a/includes/installer/i18n/lb.json
+++ b/includes/installer/i18n/lb.json
@@ -46,7 +46,7 @@
"config-env-php": "PHP $1 ass installéiert.",
"config-env-hhvm": "HHVM $1 ass installéiert.",
"config-unicode-using-utf8": "Fir d'Unicode-Normalisatioun gëtt dem Brion Vibber säin <code>utf8_normalize.so</code> benotzt.",
- "config-no-db": "Et konnt kee passenden Datebank-Driver fonnt ginn! Dir musst een Datebank-Driver fir PHP installéieren.\nDës Datebank-Type ginn ënnerstëtzt: $1.\n\nWann Dir PHP selwer compiléiert hutt, da rekonfiguréiert en mat dem ageschalten Datebank-Client, zum Beispill an deem Dir <code>./configure --with-mysql</code> benotzt.\nWann Dir PHP vun engem Debian oder Ubuntu Package aus installéiert hutt, da musst Dir och den php5-mysql Modul installéieren.",
+ "config-no-db": "Et konnt kee passenden Datebank-Driver fonnt ginn! Dir musst een Datebank-Driver fir PHP installéieren.\n{{PLURAL:$2|Dësn Datebank-Typ gëtt|Dës Datebank-Type ginn}} ënnerstëtzt: $1.\n\nWann Dir PHP selwer compiléiert hutt, da rekonfiguréiert en mat dem ageschalten Datebank-Client, zum Beispill an deem Dir <code>./configure --with-mysql</code> benotzt.\nWann Dir PHP vun engem Debian oder Ubuntu Package aus installéiert hutt, da musst Dir och den php5-mysql Modul installéieren.",
"config-outdated-sqlite": "'''Warnung:''' SQLite $1 ass installéiert. Allerdengs brauch MediaWiki SQLite $2 oder méi nei. SQLite ass dofir net disponibel.",
"config-memory-bad": "'''Opgepasst:''' De Parameter <code>memory_limit</code> vu PHP ass $1.\nDat ass wahrscheinlech ze niddreg.\nD'Installatioun kéint net funktionéieren.",
"config-iconv": "<strong>Fatal:</strong> PHP muss mat Support fir d'[http://www.php.net/manual/en/iconv.installation.php iconv-Erweiderung] kompiléiert ginn.",
@@ -160,6 +160,7 @@
"config-email-settings": "E-Mail-Astellungen",
"config-enable-email": "E-Mailen déi no bausse ginn aschalten",
"config-email-user": "Benotzer-op-Benotzer E-Mail aschalten",
+ "config-email-user-help": "All Benotzer erlaben sech géigesäiteg E-Mailen ze schécken, wa si dat an hiren Astellungen aktivéiert hunn.",
"config-email-usertalk": "Benoriichtege bei Ännerung vun der Benotzerdiskussiounssäit aschalten",
"config-email-watchlist": "Benoriichtigung vun der Iwwerwaachungslëscht aschalten",
"config-email-watchlist-help": "Erlaabt et de Benotzer fir Notifikatioune vun hiren iwwerwaachte Säiten ze kréie wa si dat an hiren Astellungen aktivéiert hunn.",
diff --git a/includes/installer/i18n/lzh.json b/includes/installer/i18n/lzh.json
index 190ee047..91353939 100644
--- a/includes/installer/i18n/lzh.json
+++ b/includes/installer/i18n/lzh.json
@@ -5,6 +5,7 @@
]
},
"config-information": "文訊",
+ "config-page-language": "語",
"mainpagetext": "'''共筆臺已立'''",
"mainpagedocfooter": "欲識維基,見[//meta.wikimedia.org/wiki/Help:Contents User's Guide]\n\n== 始 ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
}
diff --git a/includes/installer/i18n/mai.json b/includes/installer/i18n/mai.json
index b52cef79..8302c03c 100644
--- a/includes/installer/i18n/mai.json
+++ b/includes/installer/i18n/mai.json
@@ -1,9 +1,29 @@
{
"@metadata": {
"authors": [
- "Umeshberma"
+ "Umeshberma",
+ "बिप्लब आनन्द"
]
},
- "mainpagetext": "'''मीडियाविकी नीक जकाँ प्रस्थापित भेल।'''",
- "mainpagedocfooter": "सम्पर्क करू [//meta.wikimedia.org/wiki/Help:Contents User's Guide] विकी तंत्रांशक प्रयोगक जानकारी लेल।\n\n==प्रारम्भ कोना करी==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
+ "config-information": "जानकारी",
+ "config-your-language": "अहाँक भाषा:",
+ "config-your-language-help": "प्रतिस्थापन होएतकाल भाषाके चयन करू",
+ "config-wiki-language": "विकि भाषा:",
+ "config-back": "← पाछा",
+ "config-continue": "आगु चलु →",
+ "config-page-language": "भाषा",
+ "config-page-welcome": "मेडियाविकिमे अहाँक स्वागत अछि!",
+ "config-page-dbconnect": "डेटाबेसस जुडु",
+ "config-page-upgrade": "भेल प्रतिस्थापन के नविनीकरण करु",
+ "config-page-dbsettings": "डाटाबेस कुंजी",
+ "config-page-name": "नाम",
+ "config-page-options": "विकल्प",
+ "config-page-install": "स्थापित करु",
+ "config-page-complete": "पूर्ण!",
+ "config-page-restart": "स्थापनाके पुनारम्भ करु",
+ "config-page-readme": "पढू",
+ "config-page-existingwiki": "रहल विकी",
+ "config-restart": "हँ, एकरा पुन: सुरु कएल जाए",
+ "mainpagetext": "'''मेडियाविकी नीक जकाँ प्रस्थापित भेल।'''",
+ "mainpagedocfooter": "सम्पर्क करू [//meta.wikimedia.org/wiki/Help:Contents User's Guide] विकि तंत्रांशक प्रयोगक जानकारी लेल।\n\n==प्रारम्भ कोना करी==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
}
diff --git a/includes/installer/i18n/mfe.json b/includes/installer/i18n/mfe.json
new file mode 100644
index 00000000..0cd9b6e3
--- /dev/null
+++ b/includes/installer/i18n/mfe.json
@@ -0,0 +1,45 @@
+{
+ "@metadata": {
+ "authors": [
+ "Moris231"
+ ]
+ },
+ "config-desc": "Programme installasion pu MediaWiki",
+ "config-title": "Installasion MediaWiki $1",
+ "config-information": "Informasion",
+ "config-localsettings-key": "Mis a zour lakle:",
+ "config-localsettings-badkey": "Lakle ki ou inn fourni inkorrekt.",
+ "config-your-language": "Ou langaz:",
+ "config-your-language-help": "Seleksionn enn langaz ki pu servi pendan prosesis installasion.",
+ "config-wiki-language": "Langaz Wiki:",
+ "config-wiki-language-help": "Seleksionn langaz dan ki Wiki pu prinsipalman ekrir.",
+ "config-back": "← Retourne",
+ "config-continue": "Kontinye →",
+ "config-page-language": "Langaz",
+ "config-page-welcome": "Bienvini lor MediaWiki!",
+ "config-page-dbconnect": "Konekte base donnee",
+ "config-page-dbsettings": "Paramets database",
+ "config-page-name": "Nom",
+ "config-page-options": "Opsion",
+ "config-page-install": "Installe",
+ "config-page-complete": "Termine!",
+ "config-page-restart": "Rekoumans installasion",
+ "config-page-readme": "Lir-mwa",
+ "config-page-releasenotes": "Notes verzion",
+ "config-page-copying": "Kopi",
+ "config-page-upgradedoc": "Mis a zour",
+ "config-page-existingwiki": "Wiki existan",
+ "config-restart": "Oui, rekoumans li",
+ "config-env-php": "PHP $1 inn finn installe.",
+ "config-env-hhvm": "HHVM $1 inn finn installe.",
+ "config-diff3-bad": "GNU diff3 introuvab.",
+ "config-db-type": "Type database:",
+ "config-db-host": "Hote database:",
+ "config-db-host-oracle": "Nom TNS database:",
+ "config-db-wiki-settings": "Idantifie sa wiki-la",
+ "config-db-name": "Nom base donnee:",
+ "config-db-name-oracle": "Schema base donnee:",
+ "config-db-install-account": "Kontt litilizater pu sa installasion",
+ "config-db-username": "Itilizater database:",
+ "config-db-password": "Password database:"
+}
diff --git a/includes/installer/i18n/mk.json b/includes/installer/i18n/mk.json
index 8784521e..86494844 100644
--- a/includes/installer/i18n/mk.json
+++ b/includes/installer/i18n/mk.json
@@ -25,7 +25,7 @@
"config-back": "← Назад",
"config-continue": "Продолжи →",
"config-page-language": "Јазик",
- "config-page-welcome": "Добредојдовте на МедијаВики!",
+ "config-page-welcome": "Добре дојдовте на МедијаВики!",
"config-page-dbconnect": "Поврзување со базата",
"config-page-upgrade": "Надградба на постоечката воспоставка",
"config-page-dbsettings": "Нагодувања на базата",
@@ -48,11 +48,10 @@
"config-env-bad": "Околината е проверена.\nНе можете да го воспоставите МедијаВики.",
"config-env-php": "PHP $1 е воспоставен.",
"config-env-hhvm": "HHVM $1 е воспоставен.",
- "config-unicode-using-utf8": "Со utf8_normalize.so за уникодна нормализација од Брајон Вибер (Brion Vibber).",
"config-unicode-using-intl": "Со додатокот [http://pecl.php.net/intl intl PECL] за уникодна нормализација.",
"config-unicode-pure-php-warning": "'''Предупредување''': Додатокот [http://pecl.php.net/intl intl PECL] не е достапен за врши уникодна нормализација, враќајќи се на бавна примена на чист PHP.\n\nАко имате високопрометно мрежно место, тогаш ќе треба да прочитате повеќе за [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations уникодната нормализација].",
"config-unicode-update-warning": "'''Предупредување:''' Воспоставената верзија на обвивката за уникодна нормализација користи постара верзија на библиотеката на [http://site.icu-project.org/ проектот ICU].\nЗа да користите Уникод, ќе треба да направите [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations надградба].",
- "config-no-db": "Не можев да најдам соодветен двигател за базата на податоци! Ќе треба да воспоставите двигател за PHP-база.\nПоддржани се следниве видови бази: $1.\n\nДоколку самите го срочивте овој PHP, овозможете го базниот клиент во поставките — на пр. со <code>./configure --with-mysqli</code>.\nАко овој PHP го воспоставите од пакет на Debian или Ubuntu, тогаш ќе треба исто така да го воспоставите, на пр., пакетот <code>php5-mysql</code>.",
+ "config-no-db": "Не можев да најдам соодветен двигател за базата на податоци! Ќе треба да воспоставите двигател за PHP-база.\n{{PLURAL:$2|Поддржан се следниов вид|Поддржани се следниве видови}} бази: $1.\n\nДоколку самите го срочивте овој PHP, овозможете го базниот клиент во поставките — на пр. со <code>./configure --with-mysqli</code>.\nАко овој PHP го воспоставите од пакет на Debian или Ubuntu, тогаш ќе треба исто така да го воспоставите, на пр., пакетот <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Предупредување''': имате SQLite $1. Најстарата допуштена верзија е $2. Затоа, SQLite ќе биде недостапен.",
"config-no-fts3": "'''Предупредување''': SQLite iе составен без модулот [//sqlite.org/fts3.html FTS3] - за оваа база нема да има можност за пребарување.",
"config-register-globals-error": "<strong>Грешка: Вклучена е можноста <code>[http://php.net/register_globals register_globals]</code> за PHP.\nМора да се исклучи за да продолжите со воспоставката.</strong>\nКако да го направите тоа можете да прочитате на [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals].",
@@ -92,7 +91,7 @@
"config-db-host": "Домаќин на базата:",
"config-db-host-help": "Ако вашата база е на друг опслужувач, тогаш тука внесете го името на домаќинот или IP-адресата.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител треба да го наведе точното име на домаќинот во неговата документација.\n\nАко воспоставувате на опслужувач на Windows и користите MySQL, можноста „localhost“ може да не функционира за опслужувачкото име. Во тој случај, обидете се со внесување на „127.0.0.1“ како локална IP-адреса.\n\nАко користите PostgreSQL, оставете го полево празно за да се поврзете преку Unix-приклучок.",
"config-db-host-oracle": "TNS на базата:",
- "config-db-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-host-oracle-help": "Внесете важечко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm месно име за поврзување]. На оваа воспоставка мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
"config-db-wiki-settings": "Идентификувај го викиво",
"config-db-name": "Име на базата:",
"config-db-name-help": "Одберете име што ќе го претставува вашето вики.\nИмето не смее да содржи празни места.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител ќе ви даде конкретно име на база за користење, или пак ќе ви даде да создавате бази преку контролната табла.",
diff --git a/includes/installer/i18n/ms.json b/includes/installer/i18n/ms.json
index 879a330b..7d5fab7f 100644
--- a/includes/installer/i18n/ms.json
+++ b/includes/installer/i18n/ms.json
@@ -5,7 +5,8 @@
"Pizza1016",
"SNN95",
"MaxSem",
- "Aviator"
+ "Aviator",
+ "Macofe"
]
},
"config-desc": "Pemasang MediaWiki",
@@ -53,7 +54,7 @@
"config-unicode-using-utf8": "utf8_normalize.so oleh Brion Vibber digunakan untuk penormalan Unicode.",
"config-unicode-using-intl": "[http://pecl.php.net/intl Sambungan intl PECL] digunakan untuk penormalan Unicode.",
"config-unicode-update-warning": "<strong>Amaran:</strong> Versi pembalut penormalan Unicode yang terpasang menggunakan perpustakaan [http://site.icu-project.org/ projek ICU] dalam versi yang lampau.\nAnda harus [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations menaik taraf] jika Unicode penting bagi anda.",
- "config-outdated-sqlite": "<strong>Amaran:</strong> anda mempunyai SQLite $1, yang lebih rendah daripada versi keperluan minimum $1. SQLite tidak akan disediakan.",
+ "config-outdated-sqlite": "<strong>Amaran:</strong> anda mempunyai SQLite $1 yang lebih rendah daripada versi keperluan minimum $1. SQLite tidak akan disediakan.",
"config-no-fts3": "<strong>Amaran:</strong> SQLite disusun tanpa [//sqlite.org/fts3.html modil FTS3], maka ciri-ciri pencarian tidak akan disediakan pada backend ini.",
"config-mbstring": "<strong>Amaran keras: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] sedang aktif!</strong>\nOpsyen ini menyebabkan ralat dan mungkin mencemari data secara tanpa diduga.\nAnda tidak boleh memasang atau menggunakan MediaWiki melainkan opsyen ini dinyahdayakan.",
"config-pcre-old": "<strong>Amaran keras:</strong> PCRE $1 ke atas diperlukan.\nBinari PHP anda berpaut dengan PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Keterangan lanjut].",
@@ -62,6 +63,7 @@
"config-xcache": "[http://xcache.lighttpd.net/ XCache] dipasang",
"config-apc": "[http://www.php.net/apc APC] dipasang",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] dipasang",
+ "config-mod-security": "<strong>Amaran:</strong> Pelayan web anda dihidupkan [http://modsecurity.org/ mod_security]/mod_security2. Kebanyakan konfigurasinya yang umum boleh menimbulkan kesulitan untuk MediaWiki dan perisian-perisian lain yang membolehkan pengguna untuk mengeposkan kandungan yang sewenang-wenang.\nJika boleh, ciri-ciri ini harus dimatikan. Jika tidak, rujuki [http://modsecurity.org/documentation/ dokumentasi mod_security] atau hubungi bantuan hos anda jika anda menghadapi ralat sembarangan.",
"config-diff3-bad": "GNU diff3 tidak dijumpai.",
"config-git": "Perisian kawalan versi Git dijumpai: <code>$1</code>.",
"config-git-bad": "Perisian kawalan versi Git tidak dijumpai.",
@@ -87,6 +89,7 @@
"config-oracle-def-ts": "Ruang jadual lalai:",
"config-oracle-temp-ts": "Ruang jadual sementara:",
"config-type-mysql": "MySQL (atau yang serasi)",
+ "config-type-mssql": "Microsoft SQL Server",
"config-header-mysql": "Keutamaan MySQL",
"config-header-postgres": "Keutamaan PostgreSQL",
"config-header-sqlite": "Keutamaan SQLite",
@@ -104,6 +107,7 @@
"config-mysql-charset": "Peranggu aksara pangkalan data:",
"config-mysql-binary": "Perduaan",
"config-mysql-utf8": "UTF-8",
+ "config-mssql-auth": "Jenis pengesahan:",
"config-site-name": "Nama wiki:",
"config-site-name-help": "Ini akan dipaparkan pada bar tajuk perisian pelayar dan tempat-tempat lain yang berkenaan.",
"config-site-name-blank": "Isikan nama tapak.",
@@ -117,6 +121,7 @@
"config-admin-password": "Kata laluan:",
"config-admin-password-confirm": "Kata laluan lagi:",
"config-admin-name-blank": "Masukkan nama pengguna pentadbir.",
+ "config-admin-password-blank": "Berikan kata laluan untuk akaun pentadbir.",
"config-admin-password-mismatch": "Kata-kata laluan yang kamu berikan tidak sepadan.",
"config-admin-email": "Alamat e-mel:",
"config-admin-error-bademail": "Kamu telah memberikan alamat e-mel yang tidak betul.",
@@ -133,6 +138,8 @@
"config-license-gfdl": "Lesen Pendokumenan Bebas GNU 1.3 atau ke atas",
"config-license-pd": "Domain Awam",
"config-email-settings": "Tetapan e-mel",
+ "config-skins": "Rupa",
+ "config-skins-use-as-default": "Gunakan rupa ini sebagai asal",
"config-install-step-done": "siap",
"config-install-step-failed": "gagal",
"config-install-user-alreadyexists": "Pengguna \"$1\" sudah wujud",
diff --git a/includes/installer/i18n/nap.json b/includes/installer/i18n/nap.json
index 1cbe7d56..3a43d901 100644
--- a/includes/installer/i18n/nap.json
+++ b/includes/installer/i18n/nap.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "C.R."
+ "C.R.",
+ "Chelin"
]
},
"config-desc": "'O prugramma d'istallazione 'e MediaWiki",
@@ -11,6 +12,197 @@
"config-localsettings-cli-upgrade": "È stato scummigliato nu file <code>LocalSettings.php</code>.\nPe l'agghiurnà sta installazione, secutate <code>update.php</code>",
"config-localsettings-key": "Chiave d'agghiurnamiento:",
"config-localsettings-badkey": "'A chiave c'avete dato nun è curretta.",
+ "config-upgrade-key-missing": "S'è scummigliata n'installazione 'e MediaWiki ch'esisteva già.\nPe' ll'agghiurnà, nzertate pe' piacere sta riga ccà abbascio dint' 'a parta vascia d' 'o <code>LocalSettings.php</code> vuosto:\n\n$1",
+ "config-localsettings-incomplete": "'O file <code>LocalSettings.php</code> esistente pare ca fosse cumpleto a metà.\n'A variabbele $1 nun è mpustata.\nCagnate <code>LocalSettings.php</code> in modo ca sta variabbele fosse mpustata e facite clic ncopp'a \"{{int:Config-continue}}\".",
+ "config-localsettings-connection-error": "S'è truvato n'errore pe' tramente ca se faceva 'a connessione a 'o database ausanno 'e mpustaziune specificate dint'a <code>LocalSettings.php</code>. Pe' piacere curriggite sti mpustaziuni e provate n'ata vota.\n\n$1",
+ "config-session-error": "Errore facenno accumincià 'a sessione: $1",
+ "config-session-expired": "'E date d' 'a sessione pareno ammaturate.\n'E sessiune so' configurate pe na durata 'e $1.\n'A putite aumentà pe' bbìa 'e na mpustazione <code>session.gc_maxlifetime</code> dint' 'o file php.ini.\nRiabbìa 'o prucesso 'e installazione.",
+ "config-no-session": "'E date d' 'a sessione so' state perdute!\nCuntrullate 'o file php.ini vuosto e assicurateve ca 'a <code>session.save_path</code> è stata mpustata ncopp'a na cartella appropriata.",
+ "config-your-language": "'A lengua vosta:",
+ "config-your-language-help": "Scigliete na lengua pe' l'ausà pe' tramente ca se fa 'o prucesso 'installazione.",
+ "config-wiki-language": "Lengua d' 'o wiki:",
+ "config-wiki-language-help": "Scigliete 'a lengua ca sarrà ausàta prevalentemente ncopp' 'a wiki.",
+ "config-back": "← Arreto",
+ "config-continue": "Annanze →",
+ "config-page-language": "Lengua",
+ "config-page-welcome": "Bemmenute a MediaWiki!",
+ "config-page-dbconnect": "Connessione a 'o database",
+ "config-page-upgrade": "Agghiuorna l'istallazione esistente",
+ "config-page-dbsettings": "Mpustaziune d' 'o database",
+ "config-page-name": "Nomme",
+ "config-page-options": "Opziune",
+ "config-page-install": "Installa",
+ "config-page-complete": "Cumpreta!",
+ "config-page-restart": "Riabbìa l'installazione",
+ "config-page-readme": "Lieggeme",
+ "config-page-releasenotes": "Note 'e verziona",
+ "config-page-copying": "Copia",
+ "config-page-upgradedoc": "Agghiurnanno",
+ "config-page-existingwiki": "Wiki esistente",
+ "config-help-restart": "Vulite scancellà tutt' 'e date astipate c'avite nzertato e riabbià 'o prucesso d'installazione?",
+ "config-restart": "Sì, riabbìa",
+ "config-welcome": "=== Cuntrollo 'e ll'ambiente ===\nSarranno eseguite 'e cuntrolle bbase pe' putè vedè si st'ambiente è adatto pe' ne ffà l'installazione 'e MediaWiki.\nArricurdateve d'includere sti nfurmaziune si spiate assistenza ncopp' 'a maniera 'e cumpletà l'installazione.",
+ "config-copyright": "=== Copyright e termine ===\n\n$1\n\nChistu programma è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nChistu programma è destribbuito c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICULARE.\nIate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nCu stu programma avísseve 'a ricevere <doclink href=Copying>na copia d' 'a Licienza GNU GPL</doclink> cu stu prugramma; si nò, scrivete â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html liggite sta paggena ncopp' 'a l'Internet].",
+ "config-sidebar": "* [//www.mediawiki.org Paggina prencepale MediaWiki]\n* [//www.mediawiki.org/wiki/Aiuto:Guida a 'e cuntenute pe' l'utente]\n* [//www.mediawiki.org/wiki/Manuale:Guida a 'e cuntenute pe l'ammenistrature]\n* [//www.mediawiki.org/wiki/Manuale:FAQ FAQ]\n----\n* <doclink href=Readme>Lieggeme</doclink>\n* <doclink href=ReleaseNotes>Note 'e verziona</doclink>\n* <doclink href=Copying>Copie</doclink>\n* <doclink href=UpgradeDoc>Agghiurnamento</doclink>",
+ "config-env-good": "L'ambiente è stato cuntrullato.\nÈ pussibbele installare MediaWiki.",
+ "config-env-bad": "L'ambiente è stato cuntrullato.\nNun se può installà MediaWiki.",
+ "config-env-php": "PHP $1 è installato.",
+ "config-env-hhvm": "HHVM $1 è installato.",
+ "config-unicode-using-utf8": "Aúsa Brion Vibber's utf8_normalize.so pe' ne fà 'a normalizzazione Unicode.",
+ "config-unicode-using-intl": "Aúsa [http://pecl.php.net/intl l'estensione PECL intl] pe' ne fà 'a normalizzazione Unicode.",
+ "config-unicode-pure-php-warning": "<strong>Attenziò:</strong> L' [http://pecl.php.net/intl estensione intl PECL] nun è a disposizione pe' gestire 'a normalizzazione Unicode, accussì se ausasse n'imprementazziona llenta 'n puro PHP.\nSi state a gestire nu pizzo ad alto traffico, avisseve a lieggere cocche considerazione ncopp' 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaziona Unicode].",
+ "config-unicode-update-warning": "<strong>Attenziò:</strong> 'A verziona installata 'e normalizzazione Unicode aùsa 'a verziona viecchia d' 'o [http://site.icu-project.org/ pruggetto ICU].\nV'avite 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agghiurnà] si state a penzà ncopp' 'o fatto d'ausà Unicode.",
+ "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n{{PLURAL:$2|'O furmatto suppurtato|'E furmatte suppurtate}} 'e database ccà annanze: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo <code>./configure --with-mysqli</code>.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto <code>php5-mysql</code>.",
+ "config-outdated-sqlite": "'''Attenziò''': tenite 'o SQLite $1 pe' tramente ca ce vulesse 'a verziona $2, SQLite nun sarrà a disposizione.",
+ "config-no-fts3": "'''Attenziò''': SQLite è cumpilato senza 'o [//sqlite.org/fts3.html modulo FTS3], 'e funziune 'e p'ascià dinto nun sarranno a disposizione ncopp'a stu backend.",
+ "config-register-globals-error": "<strong>Errore: l'opzione PHP <code>[http://php.net/register_globals register_globals]</code> è apicciata.\nS'avesse 'a stutà pe' cuntinuà c' 'a installazione.</strong>\nVide [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pe' n'avé n'aiuto ncopp'a comme s'avess'a ffà.",
+ "config-magic-quotes-gpc": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] è attivo!</strong>\nChest'opzione scassa 'e date d'input 'n modo scanusciuto.\nNun putite installare o utilizzare MediaWiki, si nun stutate st'opzione.",
+ "config-magic-quotes-runtime": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] è attivo!'</strong>\nSt'opzione scassa 'e date 'e na manera scanusciuta.\nNun se può installà o ausà MediaWiki si nun se stuta st'opzione.",
+ "config-magic-quotes-sybase": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] è attivo!'</strong>\nSt'opzione scassa 'e date 'e na manera scanusciuta.\nNun se può installà o ausà MediaWiki si nun se stuta st'opzione.",
+ "config-mbstring": "<strong>Fatale: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] è attivo!'</strong>\nSt'opzione scassa 'e date 'e na manera scanusciuta.\nNun se può installà o ausà MediaWiki si nun se stuta st'opzione.",
+ "config-safe-mode": "<strong>Warning:</strong> PHP's [http://www.php.net/features.safe-mode safe mode] è attivato.\nPutesse fà cocche probblema, specialmente si state ausanno 'a funziona 'e carrecà file e 'o supporto d' ' e funziune <code>math</code>.",
+ "config-xml-bad": "'O modulo XML 'e PHP è mancante.\nA MediaWiki servessero 'e funziune prisente dint'a stu modulo e nun faticarrà c' 'a configurazione 'e mò.\nSi se sta eseguenno Mandrake, installare 'o pacco php-xml.",
+ "config-pcre-old": "<strong>Errore fatale:</strong> s'addimanna PCRE $1 o succiessivo.\n'O file vuosto binario PHP è acucchiato c' 'o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Cchiù nfurmaziune].",
+ "config-pcre-no-utf8": "<strong>Fatale:</strong> 'E module PCRE d' 'o PHP pare ca se so' compilate senza PCRE_UTF8 supporto.\nA MediaWiki serve nu supporto UTF-8 pe' putè funziunà apposto.",
+ "config-memory-raised": "'O valore 'e PHP <code>memory_limit</code> è $1, aumentato a $2.",
+ "config-memory-bad": "<strong>Attenziò:</strong> 'o valore 'e PHP <code>memory_limit</code> è $1.\nProbabbilmente troppo basso.\n'A installazione se putesse scassà!",
+ "config-ctype": "'''Errore''': 'o PHP s'adda ghienchere c' 'o supporto pe' l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
+ "config-iconv": "<strong>Fatale:</strong> PHP s'adda ghienchere c' 'o supporto pe' l'[http://www.php.net/manual/en/iconv.installation.php estensione iconv].",
+ "config-json": "'''Errore:''' PHP è stato compilato senza 'o supporto pe' JSON. E' necessario installà l'estensione PHP pe' JSON o l'estensione [http://pecl.php.net/package/jsonc PECL jsonc] apprimm' 'e installà MediaWiki.\n* L'estensione PHP sta dint'a Red Hat Enterprise Linux (CentOS) 5 e 6, ma s'avess'abbià 'n <code>/etc/php.ini</code> o <code>/etc/php.d/json.ini</code>.\n* Cocche distribuzione 'e Linux pubblicata aropp'a majo 'e 2013 lèvano l'estensione PHP, e a pizzo sujo aúsano l'estensione PECL comme <code>php5-json</code> o <code>php-pecl-jsonc</code>",
+ "config-xcache": "[http://xcache.lighttpd.net/ XCache] è installato",
+ "config-apc": "[http://www.php.net/apc APC] è installato",
+ "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] è installato",
+ "config-no-cache": "'''Attenziò:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache] nun so' state truvate.\n'A funziona caching 'e ll'oggette non è apicciata.",
+ "config-mod-security": "<strong>Attenziò:</strong> 'O servitore web vuosto téne [http://modsecurity.org/ mod_security]/mod_security2 appicciato. Ce stanno tante mpustaziune commune ca 'o facessero causà prubbleme a MediaWiki e ll'ati software ca permettessero ll'utente 'e pubbrecà cuntenute.\nSi putite, stutate sta funziona. Sinò, riferite 'a [http://modsecurity.org/documentation/ documentaziona ncopp' 'o mod_security] o cuntattate 'o host vuosto pe' ve dà supporto quanno se scummogliasse cocch'errore.",
+ "config-diff3-bad": "GNU diff3 nun truvato.",
+ "config-git": "Truvato software 'e cuntrollo d' 'a verziona Git: <code>$1</code>.",
+ "config-git-bad": "Software 'e cuntrollo d' 'a verziona Git nun truvato.",
+ "config-imagemagick": "Truvato ImageMagick: <code>$1</code>.\n'E miniature d' 'e fiùre sarranno prisente si l'upload song'abbiàte.",
+ "config-gd": "Truvata 'a bibblioteca ntegrata GD Graphics.\n'E miniature 'e ll'immaggene sarranno prisente si l'upload se song'abbiàte.",
+ "config-no-scaling": "Nun se può truvà 'a bibblioteca GD o ImageMagick.\n'E miniature 'e l'immaggene sarranno stutate.",
+ "config-no-uri": "<strong>Errore:</strong> Nun se può determina l'URI 'e mmò.\nInstallazione spezzata.",
+ "config-no-cli-uri": "'''Attenziò''': <code>--scriptpath</code> nun specificato, s'aùsa 'o valore predefinito: <code>$1</code>.",
+ "config-using-server": "Nomme d' 'o server ca se stà ausanno \"<nowiki>$1</nowiki>\".",
+ "config-using-uri": "URL d' 'o server ca se stà ausanno \"<nowiki>$1$2</nowiki>\".",
+ "config-uploads-not-safe": "<strong>Attenziò:</strong> 'a cartella predefinita p' 'e carreche <code>$1</code> è vulnerabbele all'esecuzione arbitraria 'e script.\nPure si MediaWiki cuntrolla tutt' 'e file carrecate pe' rischio 'a sicurezza se raccumanna 'e [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security nchiure sta vulnerabbilità 'e sicurezza] apprimm'appiccià 'a funcione 'e carreche.",
+ "config-no-cli-uploads-check": "<strong>Attenziò:</strong> 'a cartella predefinita p' 'e carreche (<code>$1</code>) nun è stata cuntrullata p' 'a vulnerabbelità ncopp'a l'esecuzione arbitraria 'e script pe' tramente ca se fà l'installazione 'a linea 'e commando.",
+ "config-brokenlibxml": "'O sistema vuosto ave na combinazione 'e verziune 'e PHP e libxml2 nguacchiata ca putesse scassà 'e date 'e MediaWiki 'n manera annascunnusa e pure l'ati apprecaziune p' 'o web.\nAgghiurnate a libxml2 2.7.3 o cchiù muderno ([https://bugs.php.net/bug.php?id=45996 'o bug studiato d' 'o lato PHP]).\nInstallaziona spezzata.",
+ "config-suhosin-max-value-length": "Suhosin è installato e miette lemmeto 'o parametro GET <code>length</code> a $1 byte.\n'O componente MediaWiki ResourceLoader funzionarrà aggirann'a stu lemmeto, ma luvanno prestaziune.\nSi pussibile, avit'a mpustà <code>suhosin.get.max_value_length</code> a 1024 o cchiù auto 'n <code>php.ini</code>, e mpustà <code>$wgResourceLoaderMaxQueryLength</code> a 'o stesso valore 'n <code>LocalSettings.php</code>.",
+ "config-db-type": "Tipo 'e database:",
+ "config-db-host": "Host d' 'o database:",
+ "config-db-host-help": "Si 'o server database vuosto stà mpizzato dint' 'a nu server differente, miette 'o nomme d' 'o host o l'indirizzo IP sujo.\n\nSi state ausanno nu servizio spartuto web hosting, 'aggenzia 'e hosting v'avess'a dà 'o nomme buono 'e nomme host dint' 'a documentaziona suoja.\n\nSi state installanno chisto dint'a nu server Windows cu MySQL, ausanno \"localhost\" può darse ca nun funziona p' 'o nomme server. Si chisto nun funziona, mettite \"127.0.0.1\" p' 'o ndirizzo locale vuosto.\n\nSi state ausanno PostgreSQL, lassate abbacante stu campo pe' v'accucchià cu nu socket Unix.",
+ "config-db-host-oracle": "TNS d' 'o database:",
+ "config-db-host-oracle-help": "Mettite nu valido [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nomme 'e conessione lucale]; nu file \"tnsnames.ora\" adda essere vesibbele dint'a sta installazione.<br />Si state ausanno 'a libbreria cliente 10g o cchiù ricente putite pure ausà 'o metodo 'e denominazione [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+ "config-db-wiki-settings": "Identifica stu wiki",
+ "config-db-name": "Nomme d' 'o database:",
+ "config-db-name-help": "Sciglite nu nomme ca identificasse 'a wiki vosta.\nNun avess'a cuntenè spazie.\n\nSi ausate nu web hosting spartuto, 'o furnitore d' 'o hosting v'avesse 'a specificà nu nomme 'e database specifico pe' ve permettere 'e crià database pe' bbìa 'e nu pannello 'e cuntrollo.",
+ "config-db-name-oracle": "Schema d' 'o database:",
+ "config-db-account-oracle-warn": "Ce stanno tre scenarie suppurtate p' 'a installazione d'Oracle comme database 'e backend:\n\nSi vulite crià n'utenza 'e database comme parte d' 'o prucesso 'e installazione, dàte nu cunto c' 'o ruolo SYSDBA comme utenza d' 'o database pe ne fà installazione e specificate 'e credenziale vulute pe' ne fà l'utenza d'acciesso web, sinò è possibbele crià manualmente l'utenza d'accesso web e dà surtanto chillu cunto (si tenite autorizzaziune neccessarie pe' crià oggette 'e stu schema) po dà dduje utenze divierze, una ch' 'e permesse 'e criazione e n'ata pe ne putè trasì ô web.\n\n'O script p' 'a criazione 'e n'utenza cu tutte st'autorizzaziune neccessarie 'o putite truvà dint' 'a cartella \"maintenance/oracle\" 'e sta installazione. Tenite a mmente che l'uso 'e n'utenza cu sti restriziune stutarrà tutt' 'e funziune 'e manutenzione c' 'o cunto predefinito.",
+ "config-db-install-account": "Cunto utente pe' l'installazione",
+ "config-db-username": "Nomme utente p' 'o database:",
+ "config-db-password": "Password d' 'o database:",
+ "config-db-password-empty": "Avita nzertà na password pe' l'utente nuovo d' 'o database: $1.\nPure si fosse possibbele 'e crià ll'utente senza password chisto nun fosse sicuro.",
+ "config-db-username-empty": "Avita miette nu valore p' 'o \"{{int:config-db-username}}\"",
+ "config-db-install-username": "Nzertate 'o nomme utente ca s'aussarrà pe' ve cullegà ô database pe' tramente ca se fà l'installazione. Chistu nun è 'o nomme utente d' 'o cunto MediaWiki; ma chillo p' 'o database vuosto.",
+ "config-db-install-password": "Nzertate 'a password che s'ausarrà pe' ve putè cullegà ô database pe' tramente ca se fa l'installazione.\nChista nun è 'a password d' 'o cunto 'e MediaWiki; ma chilla p' 'o database vuosto.",
+ "config-db-install-help": "Miette 'o nomme utente e 'a password ca sarrà usata quanno ve cullegate ô database pe' tramente ca facite 'a installazione.",
+ "config-db-account-lock": "Aúsa 'o stisso nomme utente e password pe' l'operazione normale.",
+ "config-db-wiki-account": "Account utente p' 'o funzionamento nurmale",
+ "config-db-wiki-help": "Miette 'o nomme utente e 'a password ca sarrà ausata pe' se cullegà ô database pe' l'operazione normale d' 'o wiki. Si 'o cunto nun esiste, e 'o cunto e installazione téne diritte sufficiente, sarrà criato ch' 'e diritte minime necessarie pe' putè faticà ncopp' 'o wiki.",
+ "config-db-prefix": "Prefisso d' 'a tavolozza d' 'o database:",
+ "config-db-prefix-help": "Si tenite abbesuogno 'e spartì nu database nfra cchiù wiki, o nfra MediaWiki e n'at'apprecazione web, putite scegliere d'azzeccà nu prefisso a tutte 'e nomme 'e tabbella, pe putè evità cunflitte.\nNun ausate abbacante.\n\n'O solito, stu campo se lassasse abbacante.",
+ "config-db-charset": "Nzieme 'e carattere d' 'o database",
+ "config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
+ "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+ "config-charset-mysql4": "MySQL 4.0 cu compatibbelità UTF-8",
+ "config-charset-help": "<strong>Attenziò:</strong> Si state ausanno <strong>backwards-compatible UTF-8</strong> ncopp' 'o MySQL 4.1+, e po' se fà 'o backup d' 'o databas c' 'o codece <code>mysqldump</code>, putesse scassà tutt' 'e carattere nun-ASCII, sfunnanno irreversibbilmente sti backup!\n\nDint' 'a <strong>modalità binaria</strong>, MediaWiki astipa 'o testo UTF-8 dint' 'o database 'n campe binarie.\nChest'è assaje cchiù efficiente rispett' 'a modalità UTF-8 'e MySQL, e te premmettesse 'ausà 'a gamma cumpreta 'e carattere unicode.\nDint' 'o <strong>UTF-8 mode</strong>, MySQL canoscerrà dint'a qualu set 'e carattere stanno 'e date vuoste, putenn'accussì apprisentà e cagnà chiste int'a nu modo appropriato,\nchesto però nun te lassarrà astipà 'e carattere pe' copp' 'o [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
+ "config-mysql-old": "MySQL $1 o cchiù muderno è necessario. Vuje avite $2.",
+ "config-db-port": "Porta d' 'o database:",
+ "config-db-schema": "Schema pe' MediaWiki:",
+ "config-db-schema-help": "Stu schema 'n genere sarrà buono.\nSi 'o vulite cagnà facite sulamente si ne tenite abbesuogno.",
+ "config-pg-test-error": "Nun se può connettà a 'o database <strong>$1</strong>: $2",
+ "config-sqlite-dir": "Cartella 'e data 'e SQLite:",
+ "config-sqlite-dir-help": "SQLite astipa tutte 'e date dint'a n'uneco file.\n\n'A cartella ca starraje a innecà adda essere scrivibbele d' 'o server webe pe' tramente ca sta l'istallazione.\n\nAvess'a essere <strong>nun trasibbele via web</strong>, è pecchesto ca nun se sta mettenno addò stanno 'e file PHP.\n\nL'installatore scriverrà nzieme a chesta nu file <code>.htaccess</code>, ma si 'o tentativo scassasse, coccheruno putesse tenè acciesso dint' 'o database ncruro.\nChesto pure cunzidera 'e date ncruro 'e ll'utente (indirizze, password cifrate) accussì comme 'e verziune luvate e ati dati d'accesso limmetato dint' 'o wiki.\n\nCunzidera ll'opportunità 'e sistimà ô tiempo 'o database 'a n'ata parte, p'esempio int'a <code>/var/lib/mediawiki/tuowiki</code>.",
+ "config-oracle-def-ts": "Tablespace 'e default:",
+ "config-oracle-temp-ts": "Tablespace temporaneo:",
+ "config-type-mysql": "MySQL (o compatibbele)",
+ "config-type-mssql": "Microsoft SQL Server",
+ "config-support-info": "MediaWiki supporta 'e sisteme 'e database ccà abbascio:\n\n$1\n\nSi nfra chiste ccà nun vedite 'o sistema 'e database ca vulite ausà, allora avite liegge 'e instruziune ccà ncoppa pe' ne dà supporto.",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] è 'a configurazione cchiù mmeglio p' 'o MediaWiki e è chilla meglio suppurtata. MediaWiki può faticà pure cu' [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], ca fossero MySQL cumpatibbele. ([http://www.php.net/manual/en/mysqli.installation.php Comme s'adda fà pe' cumpilà PHP cu suppuorto MySQL])",
+ "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è nu sistema canusciuto 'e database open source ca fosse n'alternativa a MySQL. Putess'avé cocch'errore p'arricettà, e nun è cunzigliato 'e ll'ausà dint'a n'ambiente 'e produziona. ([http://www.php.net/manual/en/pgsql.installation.php Comme s'avess'a cumpilà PHP cu suppuorto PostgreSQL])",
+ "config-header-mysql": "Mpustaziune MySQL",
+ "config-header-postgres": "Mpustaziune PostgreSQL",
+ "config-header-sqlite": "Mpustaziune SQLite",
+ "config-header-oracle": "Mpustaziune Oracle",
+ "config-header-mssql": "Mpustaziune 'e Microsoft SQL Server",
+ "config-invalid-db-type": "'O tipo 'e database nun è buono.",
+ "config-missing-db-name": "Avita miette nu valore p' 'o \"{{int:config-db-name}}\"",
+ "config-missing-db-host": "Avita miette nu valore p' 'o \"{{int:config-db-host}}\"",
+ "config-missing-db-server-oracle": "Avita miette nu valore p' 'o \"{{int:config-db-host-oracle}}\"",
+ "config-invalid-db-server-oracle": "'O database 'e TNS \"$1\" nun è buono.\nAusate 'o \"TNS Name\" o na catena d' \"Easy Connect\"([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Metude 'e Nommena Oracle]).",
+ "config-connection-error": "$1.\n\nCuntrullate 'o host, nomme utente e password e tentate n'ata vota.",
+ "config-invalid-schema": "Schema MediaWiki \"$1\" nun è buono.\nAusate surtanto 'e lettere ASCII (a-z, A-Z), nummere (0-9) e carattere 'e sottolineatura (_).",
+ "config-db-sys-create-oracle": "'O prugramma 'e installazione supporta surtanto l'uso 'e nu cunto SYSDBA pe' putè crià nu cunto nuovo.",
+ "config-postgres-old": "PostgreSQL $1 o cchiù muderno è necessario. Vuje tenite $2.",
+ "config-mssql-old": "Microsoft SQL Server $1 o cchiù muderno è necessario. Vuje tenite $2.",
+ "config-sqlite-name-help": "Sciglite nu nomme ca identificasse 'o wiki vuosto.\nNun ausà spazie o trattine.\nChesto serverrà pe' putè miettere 'o nomme ro file 'e date SQLite.",
+ "config-sqlite-parent-unwritable-group": "Nun se pò crià 'a cartella 'e date <code><nowiki>$1</nowiki></code>, pecché 'a cartella supiriore <code><nowiki>$2</nowiki></code> nun se pò scrivere 'a 'o webserver.\n\n'O prugramma d'installazione ha determinato l'utente c' 'o quale 'o server web se stà a esecutà.\nDàte 'a pussibbelità 'e scrivere dint' 'a cartella <code><nowiki>$3</nowiki></code> pe' cuntinuà\nNcopp'a nu sistema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+ "config-sqlite-connection-error": "$1.\n\nCuntrullate 'a cartella 'e date e 'o nomme d' 'o database ccà abbascio e pruvate n'ata vota.",
+ "config-sqlite-readonly": "'O file <code>$1</code> nun è scrivibbele.",
+ "config-sqlite-cant-create-db": "Nun se può crià 'o file database <code>$1</code>.",
+ "config-sqlite-fts3-downgrade": "'O PHP è mancante d' 'o suppuorto FTS3, declassamento tabbelle 'n curzo",
+ "config-can-upgrade": "Nce stanno tabbelle 'e MediaWiki int'a stu database.\nPe ll'agghiurnà a MediaWiki $1, facite click ncopp' 'a '''continua'''.",
+ "config-upgrade-done": "Agghiurnamiento cumpreto.\n\nMo' putite [$1 accummincià 'ausà 'o wiki vuosto].\n\nSi vulite ringignà 'o file vuosto 'e <code>LocalSettings.php</code>, cliccate ncopp' 'o buttone ccà abbascio. St'operazione '''nun è cunzigliata''', si nun è pecché forse tenite cocche prubblema c' 'o wiki vuosto.",
+ "config-upgrade-done-no-regenerate": "Agghiurnamiento cumpreto.\n\nPutite [$1 accummincià 'ausà 'o wiki vuosto].",
+ "config-regenerate": "Rigennera LocalSettings.php →",
+ "config-show-table-status": "'A query <code>SHOW TABLE STATUS</code> è fallita!",
+ "config-unknown-collation": "<strong>Attenziò:</strong> 'O database sta ausanno reule 'e cunfronto nun ricanusciute.",
+ "config-db-web-account": "Account d' 'o database pe' ne fà acciesso web",
+ "config-db-web-help": "Scigliete 'o nomme utente e passwrod ca 'o web server ausarrà pe' se cullegà 'o server database, pe' tramente ca se fa' operazione normale d' 'o wiki.",
+ "config-db-web-account-same": "Aúsa 'o stisso cunto comme quanno s'è fatta 'a installazione",
+ "config-db-web-create": "Crìa 'o cunto si nun esiste ancora",
+ "config-db-web-no-create-privs": "'O cunto ausato pe' ne fà l'installazione nun tene diritte necessarie pe' ne putè crià n'atu cunto.\n'O cunto zegnàto ccà adda esistere già.",
+ "config-mysql-engine": "Mutore d'astipo:",
+ "config-mysql-innodb": "InnoDB",
+ "config-mysql-myisam": "MyISAM",
+ "config-mysql-charset": "Nzieme 'e carattere d' 'o database:",
+ "config-mysql-binary": "Binario",
+ "config-mysql-utf8": "UTF-8",
+ "config-mssql-auth": "Tipo d'autenticazione:",
"config-mssql-install-auth": "Sceglie 'o tipo d'autenticazziona ca s'ausarrà pe cunnettà â database, durante ll'operazziona d'istallazziona. Si piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate.",
- "config-mssql-web-auth": "Sceglie 'o tipo d'autenticazziona ca 'o web server pigliarrà pe se cunnettà a 'o server 'e bbase 'e dati, durante ll'operazziona nurmale d&#39;'a wiki.\nSi piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate."
+ "config-mssql-web-auth": "Sceglie 'o tipo d'autenticazziona ca 'o web server pigliarrà pe se cunnettà a 'o server 'e bbase 'e dati, durante ll'operazziona nurmale d' 'a wiki.\nSi piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate.",
+ "config-mssql-sqlauth": "Autenticazione 'e SQL Server",
+ "config-mssql-windowsauth": "Autenticazione 'e Windows",
+ "config-site-name": "Nomme d' 'o wiki:",
+ "config-site-name-help": "Chisto cumparerrà dint' 'a barra d' 'o titolo d' 'o navigatore e pure dint'a n'ati pizze.",
+ "config-site-name-blank": "Scrive 'o nomme d' 'o sito.",
+ "config-project-namespace": "Namespace d' 'o pruggetto:",
+ "config-ns-generic": "Pruggetto",
+ "config-ns-site-name": "'O stesso ch' 'o nomme d' 'o wiki: $1",
+ "config-ns-other": "Ati (specificà)",
+ "config-ns-other-default": "MyWiki",
+ "config-ns-invalid": "'O namespace specificato \"<nowiki>$1</nowiki>\" nun è buono.\nSpecificate nu namespace 'e pruggetto differente.",
+ "config-ns-conflict": "'O namespace innecato \"<nowiki>$1</nowiki>\" tràse ncunflitto cu nu namespace predefinito 'e MediaWiki.\nSpecifiate n'atu nomme divierzo 'e namespace 'e pruggetto.",
+ "config-admin-box": "Cunto ammenistratore",
+ "config-admin-name": "'O nomme utente vuosto:",
+ "config-admin-password": "'A password vuosta:",
+ "config-admin-password-confirm": "Password n'ata vota:",
+ "config-admin-help": "Mettite 'o nomme utente ca vuje vulite ccà, p'esempio \"Gennaro Esposito\".\nChest'è 'o nomme ca vuje auserrate pe' trasì 'o wiki.",
+ "config-admin-name-blank": "Mettite nu nomme utente p' 'ammenistratore.",
+ "config-admin-name-invalid": "'O namespace specificato \"<nowiki>$1</nowiki>\" nun è buono.\nSpecificate nu namespace differente.",
+ "config-admin-password-blank": "Miette na password p' 'o cunto d'ammenistratore.",
+ "config-admin-email": "Indirizzo e-mail:",
+ "config-admin-error-bademail": "Avite miso n'indirizzo e-mail invalido.",
+ "config-optional-continue": "Spiate cchiù dimanne.",
+ "config-profile": "Profilo 'e deritte utente:",
+ "config-profile-wiki": "Wiki araputo",
+ "config-profile-no-anon": "Cunto utente obbligatorio",
+ "config-profile-fishbowl": "Surtanto ll'editure premmesse",
+ "config-profile-private": "Wiki privato",
+ "config-license-pd": "Pubbreco duminio",
+ "config-logo": "URL d\"o logo:",
+ "config-cc-again": "Selezziona 'e novo...",
+ "config-install-step-done": "fatto",
+ "config-install-updates": "Mpiccià ll'agghiurnamiente ca nun fossero necessarie",
+ "config-help": "ajùto"
}
diff --git a/includes/installer/i18n/nb.json b/includes/installer/i18n/nb.json
index f3cf6454..26772e98 100644
--- a/includes/installer/i18n/nb.json
+++ b/includes/installer/i18n/nb.json
@@ -55,7 +55,7 @@
"config-unicode-using-intl": "Bruker [http://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.",
"config-unicode-pure-php-warning": "'''Advarsel''': [http://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for å håndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese litt om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
"config-unicode-update-warning": "'''Advarsel''': Den installerte versjonen av Unicode-normalisereren bruker en eldre versjon av [http://site.icu-project.org/ ICU-prosjektets] bibliotek.\nDu bør [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations oppgradere] om du er bekymret for å bruke Unicode.",
- "config-no-db": "Fant ingen passende databasedriver! Du må installere en databasedriver for PHP.\nFølgende databasetyper støttes: $1\n\nOm du kompilerte PHP selv, rekonfigurer den med en aktivert databaseklient, for eksempel ved å bruke <code>./configure --with-mysql</code>.\nOm du installerte PHP fra en Debian- eller Ubuntu-pakke, må du også installere for eksempel <code>php5-mysql</code>-pakken.",
+ "config-no-db": "Fant ingen passende databasedriver! Du må installere en databasedriver for PHP.\nFølgende {{PLURAL:$2|databasetype|databasetyper}} støttes: $1\n\nOm du kompilerte PHP selv, rekonfigurer den med en aktivert databaseklient, for eksempel ved å bruke <code>./configure --with-mysql</code>.\nOm du installerte PHP fra en Debian- eller Ubuntu-pakke, må du også installere for eksempel <code>php5-mysql</code>-pakken.",
"config-outdated-sqlite": "'''Advarsel''': Du har SQLite $1, som er en eldre versjon enn minimumskravet SQLite $2. SQLite vil ikke være tilgjengelig.",
"config-no-fts3": "'''Advarsel''': SQLite er kompilert uten [//sqlite.org/fts3.html FTS3-modulen], søkefunksjoner vil ikke være tilgjengelig på dette bakstykket.",
"config-register-globals-error": "<strong>Feil: PHPs <code>[http://php.net/register_globals register_globals]</code>-valg er aktivt.\nDet må deaktiveres for å kunne fortsette med installeringen.</strong>\nSe [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] for å få hjelp til å gjøre dette.",
@@ -220,8 +220,8 @@
"config-subscribe": "Abonner på [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce e-postlisten for utgivelsesannonseringer].",
"config-subscribe-help": "Dette er en lav-volums e-postliste brukt til utgivelsesannonseringer, herunder viktige sikkerhetsannonseringer.\nDu bør abonnere på den og oppdatere MediaWikiinstallasjonen din når nye versjoner kommer ut.",
"config-subscribe-noemail": "Du prøvde å abonnere på epost-meldinger om nye versjoner uten å oppgi en epost-adresse. Vær vennlig å oppgi en epost-adresse om du ønsker dette abonnementet.",
- "config-almost-done": "Du er nesten ferdig!\nDu kan hoppe over de resterende konfigurasjonene og installere wikien nå.",
- "config-optional-continue": "Spør meg flere spørsmål.",
+ "config-almost-done": "Du er nesten ferdig!\nDu kan velge å hoppe over de siste konfigurasjonstrinnene og installere wikien med en gang.",
+ "config-optional-continue": "Still meg flere spørsmål.",
"config-optional-skip": "Jeg er lei, bare installer wikien.",
"config-profile": "Brukerrettighetsprofil:",
"config-profile-wiki": "Åpen wiki",
@@ -231,14 +231,14 @@
"config-profile-help": "Wikier fungerer best om du lar så mange mennesker som mulig redigere den.\nI MediaWiki er det enkelt å se på de siste endringene og tilbakestille eventuell skade som er gjort av naive eller ondsinnede brukere.\n\nImidlertid har mange funnet at MediaWiki er nyttig for mange formål, og av og til er det ikke lett å overbevise alle om fordelene med wiki-funksjonaliteten.\nSå du har valget.\n\nEn '''{{int:config-profile-wiki}}''' tillater enhver å redigere, selv uten å logge inn.\nEn wiki med '''{{int:config-profile-no-anon}}''' tilbyr ekstra ansvarlighet, men kan avskrekke tilfeldige bidragsytere.\n\n'''{{int:config-profile-fishbowl}}'''-scenariet tillater godkjente brukere å redigere, mens publikum kan se sider, og også historikken.\nEn '''{{int:config-profile-private}}''' tillater kun godkjente brukere å se sider, der den samme gruppen også får lov til å redigere dem.\n\nMer komplekse konfigurasjoner av brukerrettigheter er tilgjengelige etter installasjonen, se [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights relevant avsnitt i brukerbeskrivelsen].",
"config-license": "Opphavsrett og lisens:",
"config-license-none": "Ingen lisensbunntekst",
- "config-license-cc-by-sa": "Creative Commons Navngivelse Del på samme vilkår",
- "config-license-cc-by": "Creative Commons Attribution",
- "config-license-cc-by-nc-sa": "Creative Commons Navngivelse Ikke-kommersiell Del på samme vilkår",
- "config-license-cc-0": "Creative Commons Zero (tilgjengelig for alle)",
+ "config-license-cc-by-sa": "Creative Commons Navngivelse-DelPåSammeVilkår",
+ "config-license-cc-by": "Creative Commons Navngivelse",
+ "config-license-cc-by-nc-sa": "Creative Commons Navngivelse-IkkeKommersiell-DelPåSammeVilkår",
+ "config-license-cc-0": "Creative Commons Zero (Fristatus-erklæring)",
"config-license-gfdl": "GNU Free Documentation License 1.3 eller senere",
- "config-license-pd": "Offentlig rom",
+ "config-license-pd": "Offentlig eiendom",
"config-license-cc-choose": "Velg en egendefinert Creative Commons-lisens",
- "config-license-help": "Mange åpne wikier legger alle bidrag under en [http://freedomdefined.org/Definition gratislisens].\nDette gir en følelse av felleseie og stimulerer til langvarige bidrag.\nDette er normalt unødvendig for en privat eller virksomhetsbegrenset wiki.\n\nHvis du ønsker å kunne bruke tekst fra Wikipedia, og at Wikipedia skal kunne ta i mot tekst kopiert fra din wiki, bør du velge '''Creative Commons Attribution Share Alike'''.\n\nWikipedia brukte tidligere GNU Free Documentation License.\nGFDL er en grei lisens, med vanskelig å forstå.\nDet er også vanskelig å gjenbruke innhold lisensiert under GFDL.",
+ "config-license-help": "Mange åpne wikier legger alle bidrag under en [http://freedomdefined.org/Definition gratislisens].\nDette gir en følelse av felleseie og stimulerer til langvarige bidrag.\nDette er normalt unødvendig for en privat eller virksomhetsbegrenset wiki.\n\nHvis du ønsker å kunne bruke tekst fra Wikipedia, og at Wikipedia skal kunne ta i mot tekst kopiert fra din wiki, bør du velge <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia brukte tidligere GNU Free Documentation License.\nGFDL er en grei lisens, med vanskelig å forstå.\nDet er også vanskelig å gjenbruke innhold lisensiert under GFDL.",
"config-email-settings": "E-postinnstillinger",
"config-enable-email": "Aktiver utgående e-post",
"config-enable-email-help": "Hvis du vil at e-post skal virke må [http://www.php.net/manual/en/mail.configuration.php PHPs e-postinnstillinger] bli konfigurert riktig.\nHvis du ikke ønsker noen e-postfunksjoner kan du deaktivere dem her.",
@@ -278,6 +278,12 @@
"config-memcache-badport": "Memcached-port-numrene må være mellom $1 og $2.",
"config-extensions": "Utvidelser",
"config-extensions-help": "Utvidelsene listet over ble oppdaget i din <code>./extensions</code>-folder.\n\nDisse kan trenge ekstra konfigurering, men du kan aktivisere dem nå.",
+ "config-skins": "Drakt",
+ "config-skins-help": "Draktene som listes opp nedenfor ble funnet i <code>./skins</code>-mappen din. Du må slå på minst én, og velge en standarddrakt.",
+ "config-skins-use-as-default": "Bruk denne drakta som standard",
+ "config-skins-missing": "Ingen drakter ble funnet; MediaWiki vil bruke en reservedrakt til du har installert noen ordentlige drakter.",
+ "config-skins-must-enable-some": "Du må velge minst én drakt å slå på.",
+ "config-skins-must-enable-default": "Standarddrakten må være slått på.",
"config-install-alreadydone": "'''Advarsel:''' Det ser ut til at allerede har installert MediaWiki og prøver å installere denne må nytt.\nVær vennlig å fortsette til neste side.",
"config-install-begin": "Ved å trykke \"{{int:config-continue}}\", starter du installeringen av MediaWiki.\nHvis du først ønsker å endre på noe, trykk\"{{int:config-back}}\".",
"config-install-step-done": "ferdig",
@@ -307,6 +313,8 @@
"config-install-stats": "Initialiserer statisikk",
"config-install-keys": "Genererer hemmelige nøkler",
"config-insecure-keys": "<strong>Advarsel:</strong> {{PLURAL:$2|En sikker nøkkel|Sikre nøkler}} ($1) generert under installeringen er ikke helt {{PLURAL:$2|trygg|trygge}}. Vurder å endre {{PLURAL:$2|den|dem}} manuelt.",
+ "config-install-updates": "Forhindre unødvendige oppdateringer",
+ "config-install-updates-failed": "<strong>Feil:</strong> Innsetting av oppdateringsnøkler i tabellene mislyktes med følgende feilmelding: $1",
"config-install-sysop": "Oppretter brukerkonto for administrator",
"config-install-subscribe-fail": "Ikke mulig å abonnere på mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL er ikke installert og <code>allow_url_fopen</code> er ikke tilgjengelig.",
diff --git a/includes/installer/i18n/ne.json b/includes/installer/i18n/ne.json
index 836e0fcb..b3d40d22 100644
--- a/includes/installer/i18n/ne.json
+++ b/includes/installer/i18n/ne.json
@@ -13,6 +13,11 @@
"config-your-language": "तपाईंको भाषा:",
"config-your-language-help": "इन्स्टल गर्दा उपयोग गर्ने भाषा छान्नुहोस् ।",
"config-wiki-language": "विकि भाषाहरू",
+ "config-back": "← पछाडी",
+ "config-continue": "जारी राख्ने →",
+ "config-page-language": "भाषा",
+ "config-page-welcome": "मिडीयाविकिमा तपाईंलाई स्वागत छ!",
+ "config-page-dbconnect": "डेटाबेससँग सम्बन्ध बनाउने",
"config-page-name": "नाम",
"config-page-options": "विकल्पहरु",
"config-page-install": "स्थापना गर्ने",
@@ -20,6 +25,7 @@
"config-page-restart": "स्थापना फेरि सुरु गर्ने",
"config-page-readme": "पढ्नुहोस्",
"config-page-releasenotes": "प्रकाशन टिप्पणी",
+ "config-help": "सहायता",
"config-help-tooltip": "विस्तार गर्न क्लीक गर्नुहोस्",
"mainpagetext": "'''मीडिया सफलतापूर्वक कम्प्यूटरमा स्थापित भयो ।'''",
"mainpagedocfooter": " विकी अनुप्रयोग कसरी प्रयोग गर्ने भन्ने जानकारीको लागि [//meta.wikimedia.org/wiki/Help:Contents प्रयोगकर्ता सहायता] हेर्नुहोस्\n\n== सुरू गर्नको लागि ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings विन्यास सेटिङ्ग सूची]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ मेडियाविकि सामान्य प्रश्नका उत्तरहरु]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मेडियाविकि सुचना मेलिङ्ग सूची]"
diff --git a/includes/installer/i18n/nl.json b/includes/installer/i18n/nl.json
index 5bf16456..d7bd9a67 100644
--- a/includes/installer/i18n/nl.json
+++ b/includes/installer/i18n/nl.json
@@ -54,17 +54,20 @@
"config-restart": "Ja, opnieuw starten",
"config-welcome": "=== Controle omgeving ===\nEr worden een aantal basiscontroles uitgevoerd met als doel vast te stellen of deze omgeving geschikt is voor een installatie van MediaWiki.\nLever deze gegevens dan ook aan indien u support vraagt bij de installatie.",
"config-copyright": "=== Auteursrechten en voorwaarden ===\n\n$1\n\nDit programma is vrije software. U mag het verder verspreiden en/of aanpassen in overeenstemming met de voorwaarden van de GNU General Public License zoals uitgegeven door de Free Software Foundation; ofwel versie 2 van de Licentie of - naar uw keuze - enige latere versie.\n\nDit programma wordt verspreid in de hoop dat het nuttig is, maar '''zonder enige garantie''', zelfs zonder de impliciete garantie van '''verkoopbaarheid''' of '''geschiktheid voor een bepaald doel'''.\nZie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoort u een <doclink href=Copying>exemplaar van de GNU General Public License</doclink> ontvangen te hebben; zo niet, schrijf dan aan de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Verenigde Staten. Of [http://www.gnu.org/copyleft/gpl.html lees de licentie online].",
- "config-sidebar": "* [//www.mediawiki.org MediaWiki thuispagina]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Beheerdershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veel gestelde vragen] (Engelstalig)\n----\n* <doclink href=Readme>Leesmij</doclink> (Engelstalig)\n* <doclink href=ReleaseNotes>Release notes</doclink> (Engelstalig)\n* <doclink href=Copying>Kopiëren</doclink> (Engelstalig)\n* <doclink href=UpgradeDoc>Versie bijwerken</doclink> (Engelstalig)",
+ "config-sidebar": "* [//www.mediawiki.org MediaWiki thuispagina]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Gebruikershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Beheerdershandleiding] (Engelstalig)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen] (Engelstalig)\n----\n* <doclink href=Readme>Leesmij</doclink> (Engelstalig)\n* <doclink href=ReleaseNotes>Release notes</doclink> (Engelstalig)\n* <doclink href=Copying>Kopiëren</doclink> (Engelstalig)\n* <doclink href=UpgradeDoc>Versie bijwerken</doclink> (Engelstalig)",
"config-env-good": "De omgeving is gecontroleerd.\nU kunt MediaWiki installeren.",
"config-env-bad": "De omgeving is gecontroleerd.\nU kunt MediaWiki niet installeren.",
"config-env-php": "PHP $1 is op dit moment geïnstalleerd.",
+ "config-env-hhvm": "HHVM $1 is geïnstalleerd.",
"config-unicode-using-utf8": "Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.",
"config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.",
"config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].",
"config-unicode-update-warning": "'''Waarschuwing''': de geïnstalleerde versie van de Unicodenormalisatiewrapper maakt gebruik van een oudere versie van [http://site.icu-project.org/ de bibliotheek van het ICU-project].\nU moet [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations bijwerken] als Unicode voor u van belang is.",
- "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP. U moet een databasedriver installeren voor PHP.\nDe volgende databases worden ondersteund: $1.\n\nAls u een gedeelde omgeving gebruikt, vraag dan aan uw hostingprovider een geschikte databasedriver te installeren.\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.",
+ "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP! U moet een databasedriver installeren voor PHP.\n{{PLURAL:$2|Het volgende databasetype wordt|De volgende databasetypes worden}} ondersteund: $1.\n\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysqli</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook bijvoorbeeld de module <code>php5-mysql</code>.",
"config-outdated-sqlite": "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
"config-no-fts3": "'''Waarschuwing''': SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; zoekfuncties zijn niet beschikbaar.",
+ "config-register-globals-error": "<strong>Fout: de optie <code>[http://php.net/register_globals register_globals]</code> van PHP is ingeschakeld.\nDeze optie moet uitgeschakeld zijn om door te kunnen gaan met de installatie.</strong>\nOp de pagina [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] staat beschreven hoe u dit kunt doen.",
+ "config-magic-quotes-gpc": "<strong>Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] is actief!<strong>\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
"config-magic-quotes-runtime": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
"config-magic-quotes-sybase": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
"config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
@@ -75,6 +78,7 @@
"config-memory-raised": "PHP's <code>memory_limit</code> is $1 en is verhoogd tot $2.",
"config-memory-bad": "'''Waarschuwing:''' PHP's <code>memory_limit</code> is $1.\nDit is waarschijnlijk te laag.\nDe installatie kan mislukken!",
"config-ctype": "'''Fataal:''' PHP moet gecompileerd zijn met ondersteuning voor de [http://www.php.net/manual/en/ctype.installation.php extensie Ctype].",
+ "config-iconv": "<strong>Onherstelbare fout:</strong> PHP moet gecompileerd zijn met ondersteuning voor de [http://www.php.net/manual/en/iconv.installation.php uitbreiding iconv].",
"config-json": "'''Fatale fout:''' PHP is gecompileerd zonder ondersteuning voor JSON.\nU moet de PHP-extensie JSON installeren of de extensie [http://pecl.php.net/package/jsonc PECL jsonc] voordat u MediaWiki installeert.\n* De PHP-extensie is beschikbaar in Red Hat Enterprise Linux (CentOS) 5 en 6, maar moet ingeschakeld worden <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.\n* Sommige Linuxdistributies die zijn uitgebracht na mei 2013 hebben de PHP-extensie niet, maar hebben een package voor de PECL-extensie als <code>php5-json</code> of <code>php-pecl-jsonc</code>.",
"config-xcache": "[http://xcache.lighttpd.net/ XCache] is op dit moment geïnstalleerd",
"config-apc": "[http://www.php.net/apc APC] is op dit moment geïnstalleerd",
@@ -138,11 +142,11 @@
"config-type-oracle": "Oracle",
"config-type-mssql": "Microsoft SQL Server",
"config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
- "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn. ([http://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL ondersteuning])",
- "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL. Het is mogelijk dat er een aantal bekende kleinere problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving.([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]).",
- "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd zijn met ondersteuning voor SQLite]; gebruikt PDO)",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn ([http://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL ondersteuning]).",
+ "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL. Het is mogelijk dat er een aantal bekende kleinere problemen zijn met MediaWiki in combinatie met deze database en daarom wordt PostgreSQL niet aanbevolen voor een productieomgeving ([http://www.php.net/manual/en/pgsql.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor PostgreSQL]).",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor SQLite]; gebruikt PDO).",
"config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is een commerciële database voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
- "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is een commerciële enterprisedatabase voor Windows. Zie ook [http://www.php.net/manual/en/sqlsrv.installation.php PHP compileren met ondersteuning voor SQLSRV].",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is een commerciële enterprisedatabase voor Windows ([http://www.php.net/manual/en/sqlsrv.installation.php PHP compileren met ondersteuning voor SQLSRV]).",
"config-header-mysql": "MySQL-instellingen",
"config-header-postgres": "PostgreSQL-instellingen",
"config-header-sqlite": "SQLite-instellingen",
@@ -186,11 +190,11 @@
"config-mysql-myisam": "MyISAM",
"config-mysql-myisam-dep": "'''Waarschuwing''': u hebt MyISAM geselecteerd als opslagengine voor MySQL. Dit is niet aan te raden voor MediaWiki omdat:\n* het nauwelijks ondersteuning biedt voor gebruik door meerdere gebruikers tegelijkertijd door het locken van tabellen;\n* het meer vatbaar is voor corruptie dan andere engines;\n* de code van MediaWiki niet alstijd omgaat met MyISAM zoals dat zou moeten.\n\nAls uw installatie van MySQL InnoDB ondersteunt, gebruik dat dan vooral.\nAls uw installatie van MySQL geen ondersteuning heeft voor InnoDB, denk dan na over upgraden.",
"config-mysql-only-myisam-dep": "'''Waarschuwing:''' MyISAM is enige beschikbare opslagmethode voor MySQL in deze omgeving, en deze wordt niet aangeraden voor gebruik met MediaWiki, omdat:\n* er nauwelijks ondersteuning is voor meerdere gelijktijdige transacties omdat tabellen op slot gezet worden;\n* tabellen makkelijker stuk kunnen gaan;\n* de code van MediaWiki niet altijd op de juiste wijze omgaat met MyISAM.\n\nUw installatie van MySQL heeft geen ondersteuning voor InnoDB. We raden u aan om een meer recente versie te gebruiken.",
- "config-mysql-engine-help": "'''InnoDB''' is vrijwel altijd de beste instelling, omdat deze goed omgaat met meerdere verzoeken tegelijkertijd.\n\n'''MyISAM''' is bij een zeer beperkt aantal gebruikers mogelijk sneller, of als de wiki alleen-lezen is.\nMyISAM-databases raken vaker corrupt dan InnoDB-databases.",
+ "config-mysql-engine-help": "'''InnoDB''' is vrijwel altijd de beste instelling, omdat deze goed omgaat met meerdere verzoeken tegelijkertijd.\n\n'''MyISAM''' is bij een zeer beperkt aantal gebruikers mogelijk sneller, of als de wiki alleen-lezen is.\nMyISAM-databases raken vaker beschadigd dan InnoDB-databases.",
"config-mysql-charset": "Tekenset voor de database:",
"config-mysql-binary": "Binair",
"config-mysql-utf8": "UTF-8",
- "config-mysql-charset-help": "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicodetekens te gebruiken.\n\nIn '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dat niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
+ "config-mysql-charset-help": "In '''binaire modus''' slaat MediaWiki tekst in UTF-8 op in binaire databasevelden.\nDit is efficiënter dan de UTF-8-modus van MySQL en stelt u in staat de volledige reeks Unicodetekens te gebruiken.\n\nIn '''UTF-8-modus''' kent MySQL de tekenset van uw gegevens en kan de databaseserver ze juist weergeven en converteren.\nHet is dan niet mogelijk tekens op te slaan die de \"[//nl.wikipedia.org/wiki/Lijst_van_Unicode-subbereiken#Basic_Multilingual_Plane Basic Multilingual Plane]\" te boven gaan.",
"config-mssql-auth": "Authenticatietype:",
"config-mssql-install-auth": "Selecteer de authenticatiemethode die wordt gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
"config-mssql-web-auth": "Selecteer de authenticatiemethode die de webserver gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
@@ -242,7 +246,7 @@
"config-license-gfdl": "GNU Free Documentation License 1.3 of hoger",
"config-license-pd": "Publiek domein",
"config-license-cc-choose": "Een Creative Commons-licentie selecteren",
- "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie '''Creative Commons Naamsvermelding-Gelijk delen'''.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.",
+ "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [http://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.",
"config-email-settings": "E-mailinstellingen",
"config-enable-email": "Uitgaande e-mail inschakelen",
"config-enable-email-help": "Als u wilt dat e-mailen mogelijk is, dan moeten de [http://www.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.\nAls u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.",
@@ -283,7 +287,11 @@
"config-extensions": "Uitbreidingen",
"config-extensions-help": "De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.\n\nMogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen nu inschakelen.",
"config-skins": "Vormgevingen",
+ "config-skins-help": "De hierboven weergegeven uiterlijken zijn aangetroffen in de map <code>./skins</code>. U moet tenminste één uiterlijk inschakelen en het standaard uiterlijk kiezen.",
"config-skins-use-as-default": "Als standaard vormgeving instellen",
+ "config-skins-missing": "Er zijn geen uiterlijken aangetroffen. MediaWiki gebruikt een basisuiterlijk totdat u een uiterlijk installeert.",
+ "config-skins-must-enable-some": "U moet minstens één vormgeving kiezen om in te schakelen.",
+ "config-skins-must-enable-default": "De vormgeving gekozen als standaard moet ingeschakeld zijn.",
"config-install-alreadydone": "'''Waarschuwing:''' het lijkt alsof u MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.\nGa door naar de volgende pagina.",
"config-install-begin": "Als u nu op \"{{int:config-continue}}\" klikt, begint de installatie van MediaWiki.\nAls u nog wijzigingen wilt maken, klik dan op \"{{int:config-back}}\".",
"config-install-step-done": "afgerond",
@@ -313,6 +321,8 @@
"config-install-stats": "Statistieken initialiseren",
"config-install-keys": "Bezig met aanmaken van geheime sleutels",
"config-insecure-keys": "'''Waarschuwing:''' De {{PLURAL:$2|sleutel die is aangemaakt|sleutels die zijn aangemaakt}} ($1) tijdens de installatie {{PLURAL:$2|is|zijn}} niet volledig veilig. Overweeg deze handmatig te wijzigen.",
+ "config-install-updates": "Voorkomen dat updates onnodig worden uitgevoerd",
+ "config-install-updates-failed": "<strong>Fout:</strong> het toevoegen van updatesleutels aan tabellen is mislukt met de volgende fout: $1",
"config-install-sysop": "Gebruiker voor beheerder aanmaken",
"config-install-subscribe-fail": "Het is niet mogelijk te abonneren op mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL is niet geïnstalleerd en <code>allow_url_fopen</code> is niet beschikbaar.",
diff --git a/includes/installer/i18n/oc.json b/includes/installer/i18n/oc.json
index 372058f8..98d54ac4 100644
--- a/includes/installer/i18n/oc.json
+++ b/includes/installer/i18n/oc.json
@@ -166,12 +166,15 @@
"config-install-user": "Creacion d'un utilizaire de la banca de donadas",
"config-install-user-alreadyexists": "L'utilizaire « $1 » existís ja.",
"config-install-user-create-failed": "Fracàs al moment de la creacion de l'utilizaire « $1 » : $2",
+ "config-install-user-grant-failed": "Fracàs al moment de l'apondon de permissions a l'utilizaire « $1 » : $2",
"config-install-user-missing": "L'utilizaire «$1» existís pas.",
"config-install-tables": "Creacion de las taulas",
"config-install-stats": "Inicializacion de las estatisticas",
"config-install-keys": "Generacion de la clau secreta",
"config-install-updates": "Empachar l’execucion de las mesas a jorn inutilas",
"config-install-sysop": "Creacion del compte administrator",
+ "config-install-mainpage": "Creacion de la pagina principala amb un contengut per defaut",
+ "config-install-extension-tables": "Creacion de taulas per las extensions activadas",
"config-install-mainpage-failed": "Impossible d’inserir la pagina principala : $1",
"config-download-localsettings": "Telecargar <code>LocalSettings.php</code>",
"config-help": "ajuda",
diff --git a/includes/installer/i18n/pa.json b/includes/installer/i18n/pa.json
index c129ab96..75f73d3b 100644
--- a/includes/installer/i18n/pa.json
+++ b/includes/installer/i18n/pa.json
@@ -1,13 +1,35 @@
{
"@metadata": {
"authors": [
- "Aalam"
+ "Aalam",
+ "Babanwalia"
]
},
"config-information": "ਜਾਣਕਾਰੀ",
"config-your-language": "ਤੁਹਾਡੀ ਭਾਸ਼ਾ:",
+ "config-your-language-help": "ਜੜਾਈ ਦੀ ਕਾਰਵਾਈ ਵੇਲੇ ਵਰਤਣ ਵਾਸਤੇ ਕੋਈ ਭਾਸ਼ਾ ਚੁਣੋ।",
+ "config-wiki-language": "ਵਿਕੀ ਦੀ ਭਾਸ਼ਾ:",
+ "config-wiki-language-help": "ਉਹ ਭਾਸ਼ਾ ਚੁਣੋ ਜਿਸ ਵਿੱਚ ਵਿਕੀ ਮੁੱਖ ਤੌਰ 'ਤੇ ਲਿਖਿਆ ਜਾਵੇਗਾ।",
"config-back": "← ਪਿੱਛੇ",
"config-continue": "ਜਾਰੀ ਰੱਖੋ →",
"config-page-language": "ਭਾਸ਼ਾ",
+ "config-page-welcome": "ਮੀਡੀਆਵਿਕੀ 'ਤੇ ਜੀ ਆਇਆਂ ਨੂੰ!",
+ "config-page-dbconnect": "ਤੱਥ-ਅਧਾਰ ਨਾਲ਼ ਜੁੜੋ",
+ "config-page-upgrade": "ਮੌਜੂਦਾ ਜੜਾਈ ਦਾ ਮਿਆਰ ਚੁੱਕੋ",
+ "config-page-dbsettings": "ਤੱਥ-ਅਧਾਰ ਦੀਆਂ ਸੈਟਿੰਗਾਂ",
+ "config-page-name": "ਨਾਂ",
+ "config-page-options": "ਚੋਣਾਂ",
+ "config-page-install": "ਜੜੋ",
+ "config-page-complete": "ਮੁਕੰਮਲ!",
+ "config-page-restart": "ਜੜਾਈ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ",
+ "config-page-readme": "ਮੈਨੂੰ ਪੜ੍ਹੋ",
+ "config-page-copying": "ਨਕਲ",
+ "config-page-upgradedoc": "ਮਿਆਰ-ਉਚਾਈ",
+ "config-page-existingwiki": "ਮੌਜੂਦਾ ਵਿਕੀ",
+ "config-restart": "ਹਾਂਜੀ, ਮੁੜ ਸ਼ੁਰੂ ਕਰੋ",
+ "config-env-php": "PHP $1 ਜੜਿਆ ਗਿਆ।",
+ "config-env-hhvm": "HHVM $1 ਜੜਿਆ ਗਿਆ।",
+ "config-db-wiki-settings": "ਇਸ ਵਿਕੀ ਦੀ ਪਛਾਣ ਕਰਾਉ",
+ "config-db-name": "ਤੱਥ-ਅਧਾਰ ਦਾ ਨਾਂ:",
"mainpagetext": "'''ਮੀਡਿਆਵਿਕਿ ਠੀਕ ਤਰ੍ਹਾਂ ਇੰਸਟਾਲ ਹੋ ਗਿਆ ਹੈ।'''"
}
diff --git a/includes/installer/i18n/pl.json b/includes/installer/i18n/pl.json
index 2e7e0233..5cf71c40 100644
--- a/includes/installer/i18n/pl.json
+++ b/includes/installer/i18n/pl.json
@@ -17,7 +17,8 @@
"WTM",
"Alan ffm",
"Matik7",
- "Pio387"
+ "Pio387",
+ "Darellur"
]
},
"config-desc": "Instalator MediaWiki",
@@ -67,7 +68,7 @@
"config-unicode-using-intl": "Korzystanie z [http://pecl.php.net/intl rozszerzenia intl PECL] do normalizacji Unicode.",
"config-unicode-pure-php-warning": "'''Uwaga!''' [http://pecl.php.net/intl Rozszerzenie intl PECL] do obsługi normalizacji Unicode nie jest dostępne. Użyta zostanie mało wydajna zwykła implementacja w PHP.\nJeśli prowadzisz stronę o dużym natężeniu ruchu, powinieneś zapoznać się z informacjami o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizacji Unicode].",
"config-unicode-update-warning": "'''Uwaga''' – zainstalowana wersja normalizacji Unicode korzysta z nieaktualnej biblioteki [http://site.icu-project.org/ projektu ICU].\nPowinieneś [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations zrobić aktualizację] jeśli chcesz korzystać w pełni z Unicode.",
- "config-no-db": "Nie można odnaleźć właściwego sterownika bazy danych! Musisz zainstalować sterownik bazy danych dla PHP.\nMożna użyć następujących typów baz danych: $1.\n\nJeśli skompilowałeś PHP samodzielnie, skonfiguruj je ponownie z włączonym klientem bazy danych, na przykład za pomocą polecenia <code>./configure --with-mysqli</code>.\nJeśli zainstalowałeś PHP jako pakiet Debiana lub Ubuntu, musisz również zainstalować np. moduł <code>php5-mysql</code>.",
+ "config-no-db": "Nie można odnaleźć właściwego sterownika bazy danych! Musisz zainstalować sterownik bazy danych dla PHP.\nMożna użyć {{PLURAL:$2|następującego typu bazy|następujących typów baz} danych: $1.\n\nJeśli skompilowałeś PHP samodzielnie, skonfiguruj je ponownie z włączonym klientem bazy danych, na przykład za pomocą polecenia <code>./configure --with-mysqli</code>.\nJeśli zainstalowałeś PHP jako pakiet Debiana lub Ubuntu, musisz również zainstalować np. moduł <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Ostrzeżenie''': masz SQLite $1, która jest niższa od minimalnej wymaganej wersji $2 . SQLite będzie niedostępne.",
"config-no-fts3": "'''Uwaga''' – SQLite został skompilowany bez [//sqlite.org/fts3.html modułu FTS3] – funkcje wyszukiwania nie będą dostępne.",
"config-register-globals-error": "<strong>Błąd: dyrektywa PHP <code>[http://php.net/register_globals register_globals]</code> jest włączona.\nAby kontynuować instalację musi zostać wyłączona.</strong>\nPrzeczytaj [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals], aby dowiedzieć się, jak to zrobić.",
@@ -88,7 +89,7 @@
"config-apc": "[Http://www.php.net/apc APC] jest zainstalowany",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany",
"config-no-cache": "'''Uwaga:''' Pamięć podręczna dla kodu MediaWiki nie będzie uruchomiona., gdyż nie ma żadnego z następujących narzędzi: [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] lub [http://www.iis.net/download/WinCacheForPhp WinCache].",
- "config-mod-security": "''' Ostrzeżenie ''': Serwer sieci web ma włączone [http://modsecurity.org/ mod_security]. Jeśli niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.\nSprawdź w [http://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.",
+ "config-mod-security": "''' Ostrzeżenie ''': Serwer sieci web ma włączone [http://modsecurity.org/ mod_security]. Jeśli jest niepoprawnie skonfigurowane, może być przyczyną problemów MediaWiki lub innego oprogramowania, które pozwala użytkownikom na wysyłanie dowolnej zawartości.\nSprawdź w [http://modsecurity.org/documentation/ dokumentacji mod_security] lub skontaktuj się z obsługa hosta, jeśli wystąpią losowe błędy.",
"config-diff3-bad": "Nie znaleziono GNU diff3.",
"config-git": "Znaleziono oprogramowanie kontroli wersji Git: <code>$1</code>.",
"config-git-bad": "Oprogramowanie systemu kontroli wersji Git nie zostało znalezione.",
diff --git a/includes/installer/i18n/pms.json b/includes/installer/i18n/pms.json
index 671671bc..36b48c8e 100644
--- a/includes/installer/i18n/pms.json
+++ b/includes/installer/i18n/pms.json
@@ -17,7 +17,7 @@
"config-localsettings-badkey": "La ciav ch'it l'has dàit a l'é pa giusta.",
"config-upgrade-key-missing": "A l'é stàita trovà n'istalassion esistenta ëd MediaWiki.\nPër agiorné soa istalassion, për piasì ch'a buta la linia sì-sota al fond ëd sò <code>LocalSettings.php</code>:\n\n$1",
"config-localsettings-incomplete": "L'esistent <code>LocalSettings.php</code> a smija esse ancomplet.\nLa variàbil $1 a l'é nen ampostà.\nPër piasì, ch'a modìfica <code>LocalSettings.php</code> ëd fasson che costa variàbil a sia ampostà, e ch'a sgnaca «{{int:Config-continue}}».",
- "config-localsettings-connection-error": "A l'é ancapitaje n'eror an colegand-se a la base ëd dàit an dovrand j'ampostassion specificà an <code>LocalSettings.php</code> o <code>AdminSettings.php</code>. Për piasì, ch'a coregia cost'ampostassion e ch'a preuva torna.\n\n$1",
+ "config-localsettings-connection-error": "A l'é ancapitaje n'eror an colegand-se a la base ëd dàit an dovrand j'ampostassion specificà an <code>LocalSettings.php</code>. Për piasì, ch'a coregia cost'ampostassion e ch'a preuva torna.\n\n$1",
"config-session-error": "Eror an fasend parte la session: $1",
"config-session-expired": "Ij sò dat ëd session a smijo scadù.\nLe session a son configurà për na durà ëd $1.\nA peul aumenté sòn an ampostand <code>session.gc_maxlifetime</code> an php.ini.\nCh'a anandia torna ël process d'instalassion.",
"config-no-session": "Ij sò dat ëd session a son përdù!\nCh'a contròla sò php.ini e ch'as sigura che <code>session.save_path</code> a sia ampostà ant ël dossié giust.",
@@ -44,21 +44,19 @@
"config-page-existingwiki": "Wiki esistenta",
"config-help-restart": "Veul-lo scancelé tùit ij dat salvà ch'a l'ha anserì e anandié torna ël process d'instalassion?",
"config-restart": "É!, felo torna parte",
- "config-welcome": "=== Contròj d'ambient ===\nDle verìfiche ëd base a son fàite për vëdde se st'ambient a va bin për l'instalassion ëd MediaWiki.\nS'a l'ha da manca d'agiut durant l'anstalassion, a dovrìa fornì j'arzultà dë sti contròj.",
+ "config-welcome": "=== Contròj d'ambient ===\nDle verìfiche ëd base a saran adess fàite për vëdde se st'ambient a va bin për l'instalassion ëd MediaWiki.\nCh'as visa d'anserì coste anformassion s'a sërca d'agiut su com completé l'instalassion.",
"config-copyright": "=== Drit d'Autor e Condission ===\n\n$1\n\nCost-sì a l'é un programa lìber e a gràtis: a peul ridistribuilo e/o modifichelo sota le condission dla licensa pùblica general GNU com publicà da la Free Software Foundation; la version 2 dla Licensa, o (a toa sèrnìa) qualsëssìa version pi recenta.\n\nCost programa a l'é distribuì ant la speransa ch'a sia ùtil, ma '''sensa gnun-e garansìe'''; sensa gnanca la garansia implìssita ëd '''comersiabilità''' o '''d'esse adat a un but particolar'''.\n\nA dovrìa avèj arseivù <doclink href=Copying>na còpia ëd la licensa pùblica general GNU</doclink> ansema a sto programa; dësnò, ch'a scriva a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA opura [http://www.gnu.org/copyleft/gpl.html ch'a la lesa an linia].",
"config-sidebar": "* [//www.mediawiki.org Intrada MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guida dl'Utent]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guida dl'Aministrator]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Soens an ciamo]\n----\n* <doclink href=Readme>Ch'am lesa</doclink>\n* <doclink href=ReleaseNotes>Nòte ëd publicassion</doclink>\n* <doclink href=Copying>Còpia</doclink>\n* <doclink href=UpgradeDoc>Agiornament</doclink>",
"config-env-good": "L'ambient a l'é stàit controlà.\nIt peule instalé MediaWiki.",
"config-env-bad": "L'ambient a l'é stàit controlà.\nIt peule pa instalé MediaWiki.",
"config-env-php": "PHP $1 a l'é instalà.",
- "config-env-php-toolow": "PHP $1 a l'é instalà.\nAnt tùit ij cas, MediaWiki a ciama PHP $2 o pi neuv.",
- "config-unicode-using-utf8": "As deuvra utf8_normalize.so ëd Brion Vibber për la normalisassion Unicode.",
+ "config-env-hhvm": "HHVM $1 a l'é instalà.",
"config-unicode-using-intl": "As deuvra l'[http://pecl.php.net/intl estension intl PECL] për la normalisassion Unicode.",
"config-unicode-pure-php-warning": "'''Avis:''' L'[http://pecl.php.net/intl estension intl PECL] a l'é pa disponìbil për gestì la normalisassion Unicode, da già che l'implementassion an PHP pur a faliss për lentëssa.\nS'a gestiss un sit a àut tràfich, a dovrìa lese cheicòs an sla [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisassion Unicode].",
"config-unicode-update-warning": "'''Avis:''' La version instalà dlë spassiador ëd normalisassion Unicode a deuvra na version veja ëd la librarìa dël [http://site.icu-project.org/ proget ICU].\nA dovrìa fé n'[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agiornament] s'a l'é anteressà a dovré Unicode.",
- "config-no-db": "Impossìbil trové un pilòta ëd base ëd dàit bon! A dev instalé un pilòta ëd base ëd dàit për PHP.\nLe sòrt ëd database ch'a ven-o a son apogià: $1.\n\nS'a l'é ansima a 'n servissi partagià, ch'a ciama a sò fornidor ëd servissi d'instalé un pilòta ëd base ëd dàit compatìbil.\nS'a l'é compilasse PHP chiel-midem, ch'a lo configura torna con un client ëd base ëd dàit abilità, për esempi an dovrand <code>./configure --with-mysql</code>.\nS'a l'ha instalà PHP dai pachèt Debian o Ubuntu, antlora a dev ëdcò istalé ël mòdul php5-mysql.",
+ "config-no-db": "Impossìbil trové un pilòta ëd base ëd dàit bon! A dev instalé un pilòta ëd base ëd dàit për PHP.\n{{PLURAL:$2|La sòrt ëd base ëd dàit mantnùa a l'é costa|Le sòrt ëd base ëd dàit mantùe a son coste}} sì-dapress: $1.\n\nS'a l'é compilasse PHP chiel-midem, ch'a lo configura torna con un client ëd base ëd dàit abilità, për esempi an dovrand <code>./configure --with-mysql</code>.\nS'a l'ha instalà PHP dai pachèt Debian o Ubuntu, antlora a dev ëdcò anstalé, për esempi, ël mòdul <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Avis''': chiel a l'ha SQLite $1, che a l'é pi vej che la version mìnima dont a-i é damanca $2. SQLite a sarà pa disponìbil.",
"config-no-fts3": "'''Avis''': SQLite a l'é compilà sensa ël mòdul [//sqlite.org/fts3.html FTS3], le funsion d'arserca a saran pa disponìbij su cost motor.",
- "config-register-globals": "'''Avis: L'opsion <code>[http://php.net/register_globals register_globals]</code> ëd PHP a l'é abilità.'''\n'''Ch'a la disabìlita s'a peul.'''\nMediaWiki a marcërà, ma sò servent a l'é espòst a 'd possìbij vunerabilità ëd sicurëssa.",
"config-magic-quotes-runtime": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] a l'é ativ!'''\nCosta opsion a danegia ij dat d'intrada an manera pa prevedìbil.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
"config-magic-quotes-sybase": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] a l'é ativ!'''\nCosta opsion a danegia ij dat d'intrada an manera pa prevedìbil.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
"config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] a l'é ativ!'''\nCosta opsion a càusa d'eror e a peul danegié ij dat d'intrada an manera pa prevedìbil.\nA peul pa instalé o dovré MediaWiki se st'opsion a l'é pa disabilità.",
diff --git a/includes/installer/i18n/pt-br.json b/includes/installer/i18n/pt-br.json
index 68a94e83..132644da 100644
--- a/includes/installer/i18n/pt-br.json
+++ b/includes/installer/i18n/pt-br.json
@@ -12,7 +12,9 @@
"Cybermandrake",
"Fabsouza1",
"Rodrigo codignoli",
- "Tuliouel"
+ "Tuliouel",
+ "Marcos dias de oliveira",
+ "Fasouzafreitas"
]
},
"config-desc": "O instalador do MediaWiki",
@@ -57,6 +59,7 @@
"config-env-good": "O ambiente foi verificado.\nVocê pode instalar o MediaWiki.",
"config-env-bad": "O ambiente foi verificado.\nVocê não pode instalar o MediaWiki.",
"config-env-php": "O PHP $1 está instalado.",
+ "config-env-hhvm": "HHVM $1 está instalado.",
"config-unicode-using-utf8": "Usando o utf8_normalize.so, de Brion Vibber, para a normalização Unicode.",
"config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
"config-unicode-pure-php-warning": "<strong>Aviso</strong>: A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode, abortando e passando para a lenta implementação de PHP puro.\nSe o seu site tem um alto volume de tráfego, informe-se sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalização Unicode].",
@@ -217,6 +220,8 @@
"config-instantcommons": "Ativar o Instant Commons",
"config-cc-again": "Escolha novamente...",
"config-advanced-settings": "Configuração avançada",
+ "config-cache-options": "Configuração da cache de objetos:",
+ "config-cache-help": "A cache de objetos é usada para melhorar o desempenho do MediaWiki. Armazena dados usados com frequência.\nSites de tamanho médio ou grande são altamente encorajados a ativar esta funcionalidade e os sites pequenos também terão alguns benefícios em fazê-lo.",
"config-extensions": "Extensões",
"config-install-step-done": "feito",
"config-install-extensions": "Incluindo extensões",
@@ -237,6 +242,7 @@
"config-install-done": "<strong>Parabéns!</strong>\nVocê concluiu a instalação do MediaWiki.\n\nO instalador gerou um arquivo <code>LocalSettings.php</code>.\nEste arquivo contém todas as suas configurações.\n\nVocê precisa fazer o download desse arquivo e colocá-lo na raiz da sua instalação (o mesmo diretório onde está o arquivo <code>index.php</code>). Este download deve ter sido iniciado automaticamente.\n\nSe o download não foi iniciado, ou se ele foi cancelado, pode recomeçá-lo clicando no link abaixo:\n\n$3\n\n<strong>Nota</strong>: Se não fizer isto agora, o arquivo que foi gerado não estará disponível depois que você sair do processo de instalação sem baixá-lo.\n\nQuando isso tiver sido feito, pode <strong>[$2 entrar na sua wiki]</strong>.",
"config-download-localsettings": "Baixar <code>LocalSettings.php</code>",
"config-help": "ajuda",
+ "config-help-tooltip": "clique para expandir",
"config-nofile": "O arquivo \"$1\" não foi encontrado. Ele foi apagado?",
"config-extension-link": "Você sabia que sua wiki suporta [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nVocê pode explorar as [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria] ou visitar a [//www.mediawiki.org/wiki/Extension_Matrix Matriz de Extensões] para ver a lista completa.",
"mainpagetext": "<strong>O MediaWiki foi instalado com sucesso.</strong>",
diff --git a/includes/installer/i18n/pt.json b/includes/installer/i18n/pt.json
index 835cf9b4..b63905b8 100644
--- a/includes/installer/i18n/pt.json
+++ b/includes/installer/i18n/pt.json
@@ -64,7 +64,7 @@
"config-unicode-using-intl": "A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
"config-unicode-pure-php-warning": "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/pt normalização Unicode].",
"config-unicode-update-warning": "'''Aviso''': A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [http://site.icu-project.org/ projeto ICU].\nDevia [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations atualizá-la] se tem quaisquer preocupações sobre o uso do Unicode.",
- "config-no-db": "Não foi possível encontrar um controlador ''(driver)'' apropriado da base de dados! Precisa de instalar um controlador da base de dados para o PHP. São aceites os seguintes tipos de base de dados: $1.\n\nSe fez a compilação do PHP, reconfigure-o com um cliente de base de dados ativado; por exemplo, usando <code>./configure --with-mysql</code>.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também, por exemplo, o pacote <code>php5-mysql</code>.",
+ "config-no-db": "Não foi possível encontrar um controlador apropriado da base de dados! Precisa de instalar um controlador da base de dados para o PHP. {{PLURAL:$2|É aceite o seguinte tipo|São aceites os seguintes tipos}} de base de dados: $1.\n\nSe fez a compilação do PHP, reconfigure-o com um cliente de base de dados ativado; por exemplo, usando <code>./configure --with-mysql</code>.\nSe instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também, por exemplo, o pacote <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Aviso''': Tem a versão $1 do SQLite, que é anterior à versão mínima necessária, a $2. O SQLite não estará disponível.",
"config-no-fts3": "'''Aviso''': O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
"config-magic-quotes-runtime": "'''Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está ativa!'''\nEsta opção causa corrupção dos dados de entrada, de uma forma imprevisível.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
diff --git a/includes/installer/i18n/qqq.json b/includes/installer/i18n/qqq.json
index 772ce969..fba5165c 100644
--- a/includes/installer/i18n/qqq.json
+++ b/includes/installer/i18n/qqq.json
@@ -63,11 +63,10 @@
"config-env-bad": "See also:\n* {{msg-mw|Config-env-good}}",
"config-env-php": "Parameters:\n* $1 - the version of PHP that has been installed\nSee also:\n* {{msg-mw|config-env-php-toolow}}",
"config-env-hhvm": "Parameters:\n* $1 - the version of HHVM that has been installed",
- "config-unicode-using-utf8": "Status message in the MediaWiki installer environment checks.",
"config-unicode-using-intl": "Status message in the MediaWiki installer environment checks.",
"config-unicode-pure-php-warning": "PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.",
"config-unicode-update-warning": "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.",
- "config-no-db": "{{doc-important|Do not translate \"<code>./configure --with-mysqli</code>\" and \"<code>php5-mysql</code>\".}}\nParameters:\n* $1 is comma separated list of database types supported by MediaWiki.",
+ "config-no-db": "{{doc-important|Do not translate \"<code>./configure --with-mysqli</code>\" and \"<code>php5-mysql</code>\".}}\nParameters:\n* $1 is comma separated list of database types supported by MediaWiki.\n* $2 is the count of items in $1 - for use in plural.",
"config-outdated-sqlite": "Used as warning. Parameters:\n* $1 - the version of SQLite that has been installed\n* $2 - minimum version",
"config-no-fts3": "A \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.",
"config-register-globals-error": "Error message in the MediaWiki installer environment checks.",
diff --git a/includes/installer/i18n/ro.json b/includes/installer/i18n/ro.json
index 77257344..fcade71f 100644
--- a/includes/installer/i18n/ro.json
+++ b/includes/installer/i18n/ro.json
@@ -4,7 +4,8 @@
"Firilacroco",
"Minisarm",
"Stelistcristi",
- "XXN"
+ "XXN",
+ "Tuxilina"
]
},
"config-desc": "Programul de instalare pentru MediaWiki",
@@ -39,9 +40,14 @@
"config-page-copying": "Copiere",
"config-page-upgradedoc": "Actualizare",
"config-page-existingwiki": "Wiki existent",
+ "config-help-restart": "Doriți să ștergeți toate datele salvate introduse și să reporniți procesul de instalare?",
"config-restart": "Da, repornește.",
+ "config-env-good": "Verificarea mediului a fost efectuată cu succes.\nPuteți instala MediaWiki.",
"config-env-php": "PHP $1 este instalat.",
- "config-env-php-toolow": "PHP $1 este instalat.\nTotuși, MediaWiki necesită PHP $2 sau mai nou.",
+ "config-env-hhvm": "HHVM $1 este instalat.",
+ "config-xcache": "[http://xcache.lighttpd.net/ XCache] este instalat",
+ "config-apc": "[http://www.php.net/apc APC] este instalat",
+ "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] este instalat",
"config-db-type": "Tipul bazei de date:",
"config-db-host": "Gazdă bază de date:",
"config-db-host-oracle": "Baza de date TNS:",
@@ -65,7 +71,9 @@
"config-header-oracle": "Setări Oracle",
"config-header-mssql": "Setări Microsoft SQL Server",
"config-invalid-db-type": "Tip de bază de date incorect",
- "config-missing-db-name": "Trebuie să introduci o valoare pentru „Numele bazei de date”",
+ "config-missing-db-name": "Trebuie să introduceți o valoare pentru „{{int:config-db-name}}”.",
+ "config-missing-db-host": "Trebuie să introduceți o valoare pentru „{{int:config-db-host}}”.",
+ "config-missing-db-server-oracle": "Trebuie să introduceți o valoare pentru „{{int:config-db-host-oracle}}”.",
"config-connection-error": "$1.\n\nVerificați gazda, numele de utilizator și parola și reîncercați.",
"config-upgrade-done-no-regenerate": "Actualizare completă.\n\nAcum puteți [$1 începe să vă folosiți wikiul].",
"config-regenerate": "Regenerare LocalSettings.php →",
@@ -78,6 +86,7 @@
"config-mysql-charset": "Setul de caractere al bazei de date:",
"config-mysql-binary": "Binar",
"config-mysql-utf8": "UTF-8",
+ "config-mssql-auth": "Tip de autentificare:",
"config-site-name": "Numele wikiului:",
"config-site-name-blank": "Introduceți un nume pentru sit.",
"config-project-namespace": "Spațiul de nume al proiectului:",
@@ -86,7 +95,7 @@
"config-ns-other": "Altul (specificați)",
"config-ns-other-default": "MyWiki",
"config-admin-box": "Cont de administrator",
- "config-admin-name": "Numele dumneavoastră:",
+ "config-admin-name": "Numele dumneavoastră de utilizator:",
"config-admin-password": "Parolă:",
"config-admin-password-confirm": "Parola, din nou:",
"config-admin-password-blank": "Introduceți o parolă pentru contul de administrator.",
@@ -97,7 +106,7 @@
"config-optional-continue": "Adresează-mi mai multe întrebări.",
"config-optional-skip": "Sunt deja plictisit, doar instalează wikiul.",
"config-profile": "Profilul drepturilor de utilizator:",
- "config-profile-wiki": "Wiki tradițional",
+ "config-profile-wiki": "Wiki deschis",
"config-profile-no-anon": "Crearea de cont este necesară",
"config-profile-fishbowl": "Doar editorii autorizați",
"config-profile-private": "Wiki privat",
@@ -112,6 +121,7 @@
"config-license-cc-choose": "Alegeți o licență Creative Commons personalizată",
"config-email-settings": "Setări pentru e-mail",
"config-email-usertalk": "Activați notificările pentru pagina de discuții a utilizatorului",
+ "config-upload-settings": "Încărcare de imagini și fișiere",
"config-upload-deleted": "Director pentru fișierele șterse:",
"config-logo": "Adresa URL a siglei:",
"config-cc-again": "Alegeți din nou...",
@@ -128,6 +138,7 @@
"config-install-user": "Se creează utilizatorul pentru baza de date",
"config-install-user-alreadyexists": "Utilizatorul „$1” există deja",
"config-install-user-create-failed": "Crearea utilizatorului „$1” a eșuat: $2",
+ "config-install-user-missing": "Utilizatorul „$1” specificat nu există.",
"config-install-tables": "Se creează tabelele",
"config-install-stats": "Se inițializează statisticile",
"config-install-keys": "Se generează cheile secrete",
@@ -135,6 +146,7 @@
"config-install-mainpage-failed": "Nu s-a putut insera pagina principală: $1",
"config-download-localsettings": "Descarcă <code>LocalSettings.php</code>",
"config-help": "ajutor",
+ "config-help-tooltip": "clic pentru a extinde",
"mainpagetext": "'''Programul Wiki a fost instalat cu succes.'''",
"mainpagedocfooter": "Consultați [//meta.wikimedia.org/wiki/Help:Contents Ghidul utilizatorului (en)] pentru informații despre utilizarea software-ului wiki.\n\n== Primii pași ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista parametrilor configurabili (en)]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Întrebări frecvente despre MediaWiki (en)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discuții a MediaWiki (en)]"
}
diff --git a/includes/installer/i18n/roa-tara.json b/includes/installer/i18n/roa-tara.json
index 82203375..8b82db01 100644
--- a/includes/installer/i18n/roa-tara.json
+++ b/includes/installer/i18n/roa-tara.json
@@ -30,17 +30,29 @@
"config-page-copying": "Stoche a copie",
"config-page-upgradedoc": "Aggiornamende",
"config-page-existingwiki": "Uicchi esistende",
+ "config-restart": "Sìne, falle repartì",
+ "config-env-php": "PHP $1 ha state installate.",
+ "config-env-hhvm": "HHVM $1 ha state installate.",
"config-db-type": "Tipe de database:",
+ "config-db-host-oracle": "Database TNS:",
+ "config-db-name-oracle": "Scheme d'u database:",
"config-db-charset": "'Nzieme de carattere d'u database",
"config-charset-mysql5-binary": "MySQL 4.1/5.0 binary",
"config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
"config-charset-mysql4": "MySQL 4.0 backwards-compatible UTF-8",
"config-db-port": "Porte d'u database:",
"config-db-schema": "Scheme pe MediaUicchi:",
- "config-type-mysql": "MySQL",
+ "config-type-mysql": "MySQL (o combatibbile)",
"config-type-postgres": "PostgreSQL",
"config-type-sqlite": "SQLite",
"config-type-oracle": "Oracle",
+ "config-type-mssql": "Microsoft SQL Server",
+ "config-header-mysql": "'Mbostaziune de MySQL",
+ "config-header-postgres": "'Mbostaziune de PostgreSQL",
+ "config-header-sqlite": "'Mbostaziune de SQLite",
+ "config-header-oracle": "'Mbostaziune de Oracle",
+ "config-header-mssql": "'Mbostaziune de Microsoft SQL Server",
+ "config-invalid-db-type": "Tipe de database invalide.",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
"config-admin-email": "Indirizze e-mail:",
@@ -51,6 +63,7 @@
"config-install-schema": "Stoche a creje 'u scheme",
"config-install-pg-schema-not-exist": "'U scheme PostgreSQL non g'esiste.",
"config-help": "ajute",
+ "config-help-tooltip": "cazze pe spannere",
"mainpagetext": "'''MediaUicchi ha state 'nstallete.'''",
"mainpagedocfooter": "Vè vide [//meta.wikimedia.org/wiki/Help:Contents User's Guide] pe l'mbormaziune sus a cumme s'ause 'u softuer wiki.\n\n== Pe accumenzà ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste pe le configuraziune]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Elenghe d'a poste de MediaUicchi]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localizzazzione de MediaUicchi pa lènga toje]"
}
diff --git a/includes/installer/i18n/ru.json b/includes/installer/i18n/ru.json
index b8a36bef..386215ab 100644
--- a/includes/installer/i18n/ru.json
+++ b/includes/installer/i18n/ru.json
@@ -17,7 +17,8 @@
"아라",
"Meshkov.a",
"Eroha",
- "Seb35"
+ "Seb35",
+ "Striking Blue"
]
},
"config-desc": "Инсталлятор MediaWiki",
@@ -67,7 +68,7 @@
"config-unicode-using-intl": "Будет использовано [http://pecl.php.net/intl расширение «intl» для PECL] для нормализации Юникода.",
"config-unicode-pure-php-warning": "'''Внимание!''': [http://pecl.php.net/intl расширение intl из PECL] недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP.\nЕсли ваш сайт работает под высокой нагрузкой, вам следует больше узнать о [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникода].",
"config-unicode-update-warning": "'''Предупреждение''': установленная версия обёртки нормализации Юникода использует старую версию библиотеки [http://site.icu-project.org/ проекта ICU].\nВы должны [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations обновить версию], если хотите полноценно использовать Юникод.",
- "config-no-db": "Не удалось найти подходящие драйвера баз данных! Вам необходимо установить драйвера базы данных для PHP.\nПоддерживаются следующие типы баз данных: $1.\nЕсли вы скомпилировали PHP сами, перенастройте его с включением клиента баз данных, например, с помощью <code>./configure --with-mysqli</code>.\nЕсли вы скомпилировали PHP сами, сконфигурируйте его снова с включенным клиентом базы данных, например, с помощью <code>./configure --with-mysql</code>.\nЕсли вы установили PHP из пакетов Debian или Ubuntu, то вам также необходимо установить, например, пакет <code>php5-mysql</code>.",
+ "config-no-db": "Не удалось найти подходящие драйвера баз данных! Вам необходимо установить драйвера базы данных для PHP.\n{{PLURAL:$2|Поддерживается следующий тип|Поддерживаются следующие типы}} баз данных: $1.\n\nЕсли вы скомпилировали PHP сами, перенастройте его с включением клиента баз данных, например, с помощью <code>./configure --with-mysqli</code>.\nЕсли вы установили PHP из пакетов Debian или Ubuntu, то вам также необходимо установить, например, пакет <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Предупреждение''': у Вас установлен SQLite $1, версия которого ниже требуемой $2 . SQLite будет недоступен.",
"config-no-fts3": "'''Внимание''': SQLite собран без модуля [//sqlite.org/fts3.html FTS3] — поиск не будет работать для этой базы данных.",
"config-register-globals-error": "<strong>Ошибка: Параметр PHP <code>[http://php.net/register_globals register_globals]</code> включен.\nОн должен быть отключен для того, чтобы можно было продолжить установку.</strong>\nПолучить справку о том, как это сделать, можно по адресу [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals].",
@@ -88,7 +89,7 @@
"config-apc": "[http://www.php.net/apc APC] установлен",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] установлен",
"config-no-cache": "'''Внимание:''' Не найдены [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] или [http://www.iis.net/download/WinCacheForPhp WinCache].\nКэширование объектов будет отключено.",
- "config-mod-security": "'''Внимание''': на вашем веб-сервере включен [http://modsecurity.org/ mod_security]. При неправильной настройке он может вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный текст.\nОбратитесь к [http://modsecurity.org/documentation/ документации mod_security] или в поддержку вашего хостера, если при работе возникают непонятные ошибки.",
+ "config-mod-security": "<strong>Внимание</strong>: На вашем веб-сервере включен [http://modsecurity.org/ mod_security]/mod_security2. Многие его стандартные настройки могут вызывать проблемы для MediaWiki или другого ПО, позволяющего пользователям отправлять на сервер произвольный контент.\nОбратитесь к [http://modsecurity.org/documentation/ документации mod_security] или в службу поддержки вашего хостинг-провайдера, если вы сталкиваетесь со случайными ошибками.",
"config-diff3-bad": "GNU diff3 не найден.",
"config-git": "Найдена система контроля версий Git: <code>$1</code>.",
"config-git-bad": "Программное обеспечение по управлению версиями Git не найдено.",
@@ -192,7 +193,7 @@
"config-mysql-engine": "Движок базы данных:",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
- "config-mysql-myisam-dep": "''' Внимание.''' Вы выбрали механизм MyISAM для хранения данных MySQL. Он не рекомендуется к использованию по следующим причинам:\n* он слабо поддерживает параллелизм из-за табличных блокировок;\n* более склонен к потере данных, по сравнению с другими механизмами;\n* код MediaWiki не всегда учитывает особенности MyISAM должным образом.\n\nЕсли ваша установка MySQL поддерживает InnoDB, настоятельно рекомендуется выбрать этот механизм.\nЕсли ваша установка MySQL не поддерживает InnoDB, возможно, настало время обновиться.",
+ "config-mysql-myisam-dep": "''' Внимание.''' Вы выбрали механизм MyISAM для хранения данных MySQL. Он не рекомендуется к использованию по следующим причинам:\n* он слабо поддерживает параллелизм из-за табличных блокировок;\n* более склонен к потере данных, по сравнению с другими механизмами;\n* код MediaWiki не всегда учитывает особенности MyISAM должным образом.\n\nЕсли ваша MySQL поддерживает InnoDB, настоятельно рекомендуется выбрать этот механизм.\nЕсли ваша MySQL не поддерживает InnoDB, возможно, настало время обновиться.",
"config-mysql-only-myisam-dep": "'''Предупреждение:''' MyISAM является единственной доступной системой хранения данных для MySQL на этом компьютере, и она не рекомендуется для использования с MediaWiki, потому что:\n * он слабо поддерживает параллелизм из-за блокировки таблиц\n * она больше других систем подвержена повреждению\n * кодовая база MediaWiki не всегда обрабатывает MyISAM так, как следует\n\nВаша MySQL не поддерживает InnoDB, так что, возможно, настало время для обновления.",
"config-mysql-engine-help": "'''InnoDB''' почти всегда предпочтительнее, так как он лучше справляется с параллельным доступом.\n\n'''MyISAM''' может оказаться быстрее для вики с одним пользователем или с минимальным количеством поступающих правок, однако базы данных на нём портятся чаще, чем на InnoDB.",
"config-mysql-charset": "Кодировка базы данных:",
diff --git a/includes/installer/i18n/sco.json b/includes/installer/i18n/sco.json
index 4d447351..41818934 100644
--- a/includes/installer/i18n/sco.json
+++ b/includes/installer/i18n/sco.json
@@ -48,6 +48,7 @@
"config-env-good": "The environment haes been checked.\nYe can install MediaWiki.",
"config-env-bad": "The environment haes been checked.\nYe canna install MediaWiki.",
"config-env-php": "PHP $1 is instâlled.",
+ "config-env-hhvm": "HHVM $1 is instawed.",
"config-unicode-using-utf8": "Uising Brion Vibber's utf8_normalize.so fer Unicode normalization.",
"config-unicode-using-intl": "Uising the [http://pecl.php.net/intl intl PECL extension] fer Unicode normalization.",
"config-unicode-pure-php-warning": "<strong>Warnishment:</strong> The [http://pecl.php.net/intl intl PECL extension] is no available tae haunle Unicode normalisation, fawin back tae slaw pure-PHP implementation.\nGif ye rin ae hei-traffic steid, ye shid read ae wee bit oan [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
@@ -55,6 +56,7 @@
"config-no-db": "Coudna fynd ae suitable database driver! Ye need tae instaw ae database driver fer PHP.\nThe follaein database types ar supported: $1.\n\nGif ye compiled PHP yersel, reconfeegure it wi ae database client enabled, fer example, uising <code>./confeegure --wi-mysqli</code>.\nGif ye installed PHP fae ae Debian or Ubuntu package, than ye need tae instaw forby, fer example, the <code>php5-mysql</code> package.",
"config-outdated-sqlite": "<strong>Warnishment:</strong> ye have SQLite $1, this is lower than minimum required version $2. SQLite will be onavailable.",
"config-no-fts3": "<strong>Warnishment:</strong> SQLite is compiled wioot the [//sqlite.org/fts3.html FTS3 module], rake features will be onavailable oan this backend.",
+ "config-register-globals-error": "<strong>Mistak: PHP's <code>[http://php.net/register_globals register_globals]</code> optie is enablit.\nIt maun be disablit tae keep gaun wi the instawation.</strong>\nSee [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] fer help oan hou tae dae sae.",
"config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] is active!</strong>\nThis option corrupts data input unpredictably.\nYe cannae install or uise MediaWiki unless this option is disabled.",
"config-magic-quotes-runtime": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is active!'</strong>\nThis optie rots data input onpredictably.\nYe canna install or uise MediaWiki onless this optie is disabled.",
"config-magic-quotes-sybase": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] is active!</strong>\nThis optie rots data input onpredictably.\nYe canna install or uise MediaWiki onless this optie is disabled.",
@@ -66,6 +68,7 @@
"config-memory-raised": "PHP's <code>memerie_limit</code> is $1, raised til $2.",
"config-memory-bad": "<strong>Warnishment:</strong> PHP's <code>memerie_limit</code> is $1.\nThis is proably ower low.\nThe installation micht fail!",
"config-ctype": "<strong>Fatal:</strong> PHP maun be compiled wi support fer the [http://www.php.net/manual/en/ctype.installation.php Ctype extension].",
+ "config-iconv": "<strong>Fatal:</strong> PHP maun be compiled wi support fer the [http://www.php.net/manual/en/iconv.installation.php iconv extension].",
"config-json": "<strong>Fatal:</strong> PHP wis compiled wioot JSON support.\nYe maun instaw either the PHP JSON extension or the [http://pecl.php.net/package/jsonc PECL jsonc] extension afore instawin MediaWiki.\n* The PHP extension is incluided in Red Hat Enterprise Linux (CentOS) 5 n 6, thoogh it maun be enabled in <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.\n* Some Linux distributions released efter Mey 2013 omit the PHP extension, instead packagin the PECL extension aes <code>php5-json</code> or <code>php-pecl-jsonc</code>.",
"config-xcache": "[http://xcache.lighttpd.net/ XCache] is installed.",
"config-apc": "[http://www.php.net/apc APC] is installed.",
@@ -100,6 +103,7 @@
"config-db-username": "Database uisername:",
"config-db-password": "Database passwaird:",
"config-db-password-empty": "Please enter ae passwaird fer the new database uiser: $1.\nWhile it micht be possible tae mak uisers wi naw passwairds, it's naw secure.",
+ "config-db-username-empty": "Ye maun enter ae value fer \"{{int:config-db-username}}\".",
"config-db-install-username": "Enter the uisername that will be uised tae connect til the database durin the installâtion process.\nThis isna the uisername o the MediaWiki accont; this is the uisername fr yer database.",
"config-db-install-password": "Enter the passwaird that will be uised tae connect til the database durin the installâtion process.\nThis isna the passwaird fer the MediaWiki accoont; this is the passwaird fer yer database.",
"config-db-install-help": "Enter the uisername an passwaird that will be uised tae connect til the database durin the installâtion process.",
@@ -269,6 +273,12 @@
"config-memcache-badport": "Memcached port nummers shid be atween $1 n $2.",
"config-extensions": "Extensions",
"config-extensions-help": "The extensions leetit abuin were detected in yer <code>./extensions</code> directerie.\n\nThey micht need addeetional confeeguration, but ye can enable thaim nou.",
+ "config-skins": "Skins",
+ "config-skins-help": "The skins leetit abuin were detectit in yer <code>./skins</code> directerie. Ye maun enable at least yin, n chuise the defaut.",
+ "config-skins-use-as-default": "Uise this skin aes the defaut",
+ "config-skins-missing": "Nae skins were foond; MediaWiki will uise ae fawback skin ontil ye instaw some proper skins.",
+ "config-skins-must-enable-some": "Ye need tae chuisse at least yin skin tae enable.",
+ "config-skins-must-enable-default": "The skin chosen aes the defaut maun be enablit.",
"config-install-alreadydone": "<strong>Warnishment:</strong> Ye seem tae'v awreadie instawed MediaWiki n ar tryin tae instaw it again.\nPlease proceed til the nex page.",
"config-install-begin": "Bi pressin \"{{int:config-continue}}\", ye will begin the installation o MediaWiki.\nGif ye still wish tae mak chynges, press \"{{int:config-back}}\".",
"config-install-step-done": "dun",
@@ -298,6 +308,8 @@
"config-install-stats": "Ineetializin stateestics",
"config-install-keys": "Generatin hidlins keys",
"config-insecure-keys": "<strong>Warnishment:</strong> {{PLURAL:$2|Ae secure key|Secure keys}} ($1) generated durin instawation {{PLURAL:$2|is|ar}} naw compleatelie safe. Consider chyngin {{PLURAL:$2|it|theim}} manuallie.",
+ "config-install-updates": "Hinder the runnin o onneedit updates.",
+ "config-install-updates-failed": "<strong>Mistak:</strong> Insertin update keys intae the buirds failed wi the folleain mistak: $1",
"config-install-sysop": "Makin admeenistrâter uiser accoont",
"config-install-subscribe-fail": "Onable tae subscribe til mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL isna instawed n <code>allow_url_fopen</code> is na available.",
@@ -307,6 +319,7 @@
"config-install-done": "<strong>Congratulations!</strong>\nYe'v successfulie instawed MediaWiki.\n\nThe instawer haes generated ae <code>LocalSettings.php</code> file.\nIt contains aw yer confeeguration.\n\nYe'll need tae doonlaid it n pit it in the base o yer wiki instawation (the same directerie aes index.php). The doonlaid shid hae stairted autæmateeclie.\n\nGif the doonlaid wisna affered, or gif ye cancelled it, ye can restairt the doonlaid bi clapin oan the airtin ablo:\n\n$3\n\n<strong>Mynd:</strong> Gif ye dinna dae this the nou, this generated confeeguration file willna be available til ye laiter gif ye exit the instawation wioot doonlaidin it.\n\nWhan that haes been dun, ye can <strong>[$2 enter yer wiki]</strong>.",
"config-download-localsettings": "Dounlaid <code>LocalSettings.php</code>",
"config-help": "heelp",
+ "config-help-tooltip": "clap tae mak muckler",
"config-nofile": "File \"$1\" coudna be foond. Haes it been delytit?",
"config-extension-link": "Did ye ken that yer wiki supports [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions]?\n\nYe can brouse [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions bi categorie] or the [//www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] tae see the full leet o extensions.",
"mainpagetext": "<strong>MediaWiki haes been installit wi speed.</strong>",
diff --git a/includes/installer/i18n/si.json b/includes/installer/i18n/si.json
index 7dd0baad..27b7b93c 100644
--- a/includes/installer/i18n/si.json
+++ b/includes/installer/i18n/si.json
@@ -3,7 +3,8 @@
"authors": [
"Singhalawap",
"පසිඳු කාවින්ද",
- "Sahan.ssw"
+ "Sahan.ssw",
+ "Thirsty"
]
},
"config-desc": "මාධ්‍යවිකි සඳහා වූ ස්ථාපකය",
@@ -60,6 +61,7 @@
"config-missing-db-name": "\"දත්ත සංචිත නාමය\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
"config-missing-db-host": "\"දත්ත සංචිත ධාරකය\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
"config-missing-db-server-oracle": "\"දත්ත සංචිත TNS\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
+ "config-sqlite-name-help": "ඔබගේ විකිය හදුන්වාදෙන නමක් තෝරාගන්න. \nහිස්තැන් හෝ විරාම ලක්ෂණ ‍නොයොදන්න.\nමෙය SQLite දත්ත ගොනුනාමය සදහා යොදා ගනු ඇත.",
"config-regenerate": "නැවත ජනිත කරන්න LocalSettings.php →",
"config-db-web-account": "ජාල ප්‍රවේශනය සඳහා දත්ත සංචිත ගිණුම",
"config-mysql-engine": "ආචයන එන්ජිම:",
diff --git a/includes/installer/i18n/sk.json b/includes/installer/i18n/sk.json
index ad6bca7a..a22f94d6 100644
--- a/includes/installer/i18n/sk.json
+++ b/includes/installer/i18n/sk.json
@@ -37,7 +37,7 @@
"config-env-good": "Prostredie bolo skontrolované.\nMôžete nainštalovať MediaWiki.",
"config-env-bad": "Prostredie bolo skontrolované.\nNemôžete nainštalovať MediaWiki.",
"config-env-php": "PHP $1 je nainštalované.",
- "config-env-php-toolow": "PHP $1 je nainštalované. Avšak, MediaWiki vyžaduje PHP $2 alebo vyššie.",
+ "config-env-hhvm": "HHVM $1 je nainštalované.",
"config-db-type": "Typ databázy:",
"config-db-host": "Databázový server:",
"config-db-host-oracle": "Databázové TNS:",
@@ -50,9 +50,10 @@
"config-missing-db-name": "Musíte zadať hodnotu pre \"{{int:config-db-name}}\".",
"config-missing-db-host": "Musíte zadať hodnotu pre \"{{int:config-db-host}}\".",
"config-missing-db-server-oracle": "Musíte zadať hodnotu pre \"{{int:config-db-host-oracle}}\".",
+ "config-admin-box": "Účet správcu",
"config-admin-name": "Vaše používateľské meno:",
"config-admin-password": "Heslo:",
- "config-admin-password-confirm": "Zopakuj heslo:",
+ "config-admin-password-confirm": "Zopakujte heslo:",
"config-admin-name-blank": "Zadajte používateľské meno správcu.",
"config-admin-name-invalid": "Zadané používateľské meno \"<nowiki>$1</nowiki>\" je neplatné. \nZadajte iné meno.",
"config-admin-password-blank": "Zadajte heslo ku správcovskému účtu.",
diff --git a/includes/installer/i18n/sl.json b/includes/installer/i18n/sl.json
index b27fcdd3..d7f435ee 100644
--- a/includes/installer/i18n/sl.json
+++ b/includes/installer/i18n/sl.json
@@ -47,6 +47,7 @@
"config-env-good": "Okolje je pregledano.\nLahko namestite MediaWiki.",
"config-env-bad": "Okolje je pregledano.\nNe morete namestiti MediaWiki.",
"config-env-php": "Nameščen je PHP $1.",
+ "config-env-hhvm": "HHVM $1 je nameščen.",
"config-unicode-using-utf8": "Uporaba utf8_normalize.so Briona Vibberja za normalizacijo unikoda.",
"config-unicode-using-intl": "Uporaba [http://pecl.php.net/intl razširitve PECL intl] za normalizacijo unikoda.",
"config-memory-raised": "PHP-jev <code>memory_limit</code> je $1, dvignjen na $2.",
@@ -54,14 +55,23 @@
"config-apc": "[http://www.php.net/apc APC] je nameščen",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] je nameščen",
"config-diff3-bad": "GNU diff3 ni bilo mogoče najti.",
+ "config-using-server": "Uporabljam ime strežnika \"<nowiki>$1</nowiki>\".",
+ "config-using-uri": "Uporabljam URL strežnika \"<nowiki>$1$2</nowiki>\".",
"config-db-type": "Vrsta zbirke podatkov:",
"config-db-host": "Gostitelj zbirke podatkov:",
"config-db-host-oracle": "TNS zbirke podatkov:",
"config-db-wiki-settings": "Prepoznaj ta wiki:",
"config-db-name": "Ime zbirke podatkov:",
"config-db-name-oracle": "Shema zbirke podatkov:",
+ "config-db-install-account": "Uporabniški račun za namestitev",
"config-db-username": "Uporabniško ime zbirke podatkov:",
"config-db-password": "Geslo zbirke podatkov:",
+ "config-db-password-empty": "Prosimo, vnesite geslo za novega uporabnika podatkovne zbirke: $1. Morda je mogoče ustvarjati uporabnike brez gesel, ni pa varno.",
+ "config-db-username-empty": "Vnesti morate vrednost za \"{{int:config-db-username}}\".",
+ "config-db-install-username": "Vnesite uporabniško ime za povezavo s podatkovno zbirko med postopkom nameščanja.\nTo ni uporabniško ime računa MediaWiki, pač pa uporabniško ime za vašo podatkovno zbirko.",
+ "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-charset": "Nabor znakov zbirke podatkov",
"config-charset-mysql5-binary": "MySQL 4.1/5.0 dvojiško",
@@ -71,12 +81,15 @@
"config-db-port": "Vrata zbirke podatkov:",
"config-db-schema": "Shema MediaWiki",
"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:",
+ "config-type-mysql": "MySQL (ali združljiv)",
"config-support-info": "MediaWiki podpira naslednje sisteme zbirk podatkov:\n\n$1\n\nČe zgoraj ne vidite navedenega sistema zbirk podatkov, ki ga poskušate uporabiti, sledite navodilom na spodnji povezavi, da omogočite podporo.",
"config-header-mysql": "Nastavitve MySQL",
"config-header-postgres": "Nastavitve PostgreSQL",
"config-header-sqlite": "Nastavitve SQLite",
"config-header-oracle": "Nastavitve Oracle",
+ "config-header-mssql": "nastavitve Microsoft SQL Server",
"config-invalid-db-type": "Neveljavna vrsta zbirke podatkov",
"config-missing-db-name": "Vnesti morate vrednost za »{{int:config-db-name}}«",
"config-missing-db-host": "Vnesti morate vrednost za »{{int:config-db-host}}«.",
@@ -102,6 +115,7 @@
"config-mysql-charset": "Nabor znakov zbirke podatkov:",
"config-mysql-binary": "Dvojiško",
"config-mysql-utf8": "UTF-8",
+ "config-mssql-auth": "Tip avtentikacije:",
"config-site-name": "Ime wikija:",
"config-site-name-help": "To bo prikazano v naslovni vrstici brskalnika in na drugih različnih mestih.",
"config-site-name-blank": "Vnesite ime strani.",
@@ -134,12 +148,14 @@
"config-profile-no-anon": "Zahtevano je ustvarjanje računa",
"config-profile-fishbowl": "Samo pooblaščeni urejevalci",
"config-profile-private": "Zasebni wiki",
+ "config-profile-help": "Wikiji delujejo najbolje, kadar jih lahko ureja največje možno število ljudi.\nPregled nad zadnjimi spremembami in razveljavljanje škode, ki jo povzročijo neuki ali zlonamerni uporabniki, je v MediaWiki preprosto.\n\nVendar pa je MediaWiki uporaben v celi vrsti različnih vlog, pri čemer včasih ni lahko prepričati vseh o prednostih wiki načina. Zato imate izbiro.\n\nModel <strong>{{int:config-profile-wiki}}</strong> dovoljuje urejanje vsem, tudi brez prijavljanja.\nWiki, nastavljen na <strong>{{int:config-profile-no-anon}}</strong> nudi dodatno sledljivost, vendar lahko odvrne priložnostne urejevalce.\n\nScenarij <strong>{{int:config-profile-fishbowl}}</strong> dovoljuje urejanje odobrenim uporabnikom, pri čemer sta vsebina in zgodovina strani javni.\nV načinu <strong>{{int:config-profile-private}}</strong> lahko urejajo in pregledujejo strani le odobreni uporabniki.\n\nPodrobnejše konfiguriranje uporabniških pravic je možno po namestitvi, glejte [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights vnos v uporabniškem priročniku].",
"config-license": "Avtorske pravice in licenca:",
"config-license-none": "Brez noge dovoljenja",
"config-license-cc-by-sa": "Creative Commons Priznanje avtorstva-Deljenje pod enakimi pogoji",
"config-license-cc-by": "Creative Commons Priznanje avtorstva",
"config-license-cc-by-nc-sa": "Creative Commons Priznanje avtorstva-Nekomercialno-Deljenje pod enakimi pogoji",
"config-license-cc-0": "Creative Commons Zero (javna last)",
+ "config-license-gfdl": "Dovoljenje GNU za rabo proste dokumentacije 1.3 ali kasnejše",
"config-license-pd": "Javna last",
"config-license-cc-choose": "Izberite dovoljenje Creative Commons po meri",
"config-email-settings": "Nastavitve e-pošte",
diff --git a/includes/installer/i18n/sr-ec.json b/includes/installer/i18n/sr-ec.json
index 950ee44e..c63ac008 100644
--- a/includes/installer/i18n/sr-ec.json
+++ b/includes/installer/i18n/sr-ec.json
@@ -3,7 +3,8 @@
"authors": [
"Rancher",
"Михајло Анђелковић",
- "Milicevic01"
+ "Milicevic01",
+ "Aktron"
]
},
"config-desc": "Инсталација за Медијавики",
@@ -42,6 +43,8 @@
"config-db-type": "Тип базе података:",
"config-db-host": "Хост базе података",
"config-db-name": "Назив базе података:",
+ "config-db-password": "Лозинка за базу података:",
+ "config-db-password-empty": "Унесите лозинку за новог корисника базе података: ($1).\n\nМада је могуће отворити налоге без лозинки, то се не препоручује.",
"config-type-mysql": "MySQL (или компактибилан)",
"config-type-postgres": "PostgreSQL",
"config-type-sqlite": "SQLite",
@@ -49,6 +52,7 @@
"config-type-mssql": "Microsoft SQL Server",
"config-header-mysql": "MySQL подешавања",
"config-header-mssql": "Поставке Microsoft SQL Server-а",
+ "config-invalid-db-type": "Неважећи тип базе података.",
"config-mssql-old": "Потребан је Microsoft SQL Server $1 или новији. Ви имате $2.",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
@@ -60,6 +64,10 @@
"config-admin-name": "Корисничко име:",
"config-admin-password": "Лозинка:",
"config-admin-email": "Адреса е-поште:",
+ "config-optional-skip": "Досадно ми је, хајде да инсталирамо вики.",
+ "config-profile-no-anon": "Неопходно је отворити налог",
+ "config-profile-fishbowl": "Само овлашћени корисници",
+ "config-profile-private": "Приватна вики",
"config-license": "Ауторска права и лиценца:",
"config-license-none": "Без заглавља са лиценцом",
"config-license-cc-by-sa": "Creative Commons Ауторство-Делити под истим условима (CC BY-SA)",
@@ -68,6 +76,13 @@
"config-license-cc-0": "Creative Commons Zero (јавно власништво)",
"config-license-gfdl": "ГНУ-ова лиценца за слободну документацију верзија 1.3 или новија верзија",
"config-license-pd": "Јавно власништво",
+ "config-email-settings": "Подешавања е-поште",
+ "config-cc-not-chosen": "Одаберите која Кријејтив комонс лиценца вам одговара и потврдите.",
+ "config-skins": "Теме",
+ "config-install-step-done": "готово",
+ "config-install-step-failed": "није успело",
+ "config-help": "помоћ",
+ "config-help-tooltip": "кликните да проширите",
"mainpagetext": "'''Медијавики је успешно инсталиран.'''",
"mainpagedocfooter": "Погледајте [//meta.wikimedia.org/wiki/Help:Contents кориснички водич] за коришћење програма.\n\n== Увод ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Помоћ у вези са подешавањима]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Често постављена питања]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]"
}
diff --git a/includes/installer/i18n/sr-el.json b/includes/installer/i18n/sr-el.json
index a0cd5f55..b1a97e9b 100644
--- a/includes/installer/i18n/sr-el.json
+++ b/includes/installer/i18n/sr-el.json
@@ -34,6 +34,7 @@
"config-type-oracle": "Oracle",
"config-site-name": "Ime vikija:",
"config-license-cc-0": "Creative Commons Zero (javno vlasništvo)",
+ "config-skins": "Teme",
"mainpagetext": "'''MedijaViki je uspešno instaliran.'''",
"mainpagedocfooter": "Molimo vidite [//meta.wikimedia.org/wiki/Help:Contents korisnički vodič] za informacije o upotrebi viki softvera.\n\n== Za početak ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Najčešće postavljena pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]"
}
diff --git a/includes/installer/i18n/su.json b/includes/installer/i18n/su.json
index 7a0976b3..b8f131ee 100644
--- a/includes/installer/i18n/su.json
+++ b/includes/installer/i18n/su.json
@@ -1,5 +1,9 @@
{
- "@metadata": [],
- "mainpagetext": "'''''Software'' MediaWiki geus diinstal.'''",
+ "@metadata": {
+ "authors": [
+ "Kandar"
+ ]
+ },
+ "mainpagetext": "<strong>MediaWiki geus réngsé diinstal.</strong>",
"mainpagedocfooter": "Mangga tingal ''[//meta.wikimedia.org/wiki/MediaWiki_localisation documentation on customizing the interface]'' jeung [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Tungtunan Pamaké] pikeun pitulung maké jeung konfigurasi."
}
diff --git a/includes/installer/i18n/sv.json b/includes/installer/i18n/sv.json
index 2bdfb100..87ac7a53 100644
--- a/includes/installer/i18n/sv.json
+++ b/includes/installer/i18n/sv.json
@@ -6,7 +6,9 @@
"WikiPhoenix",
"Josve05a",
"Lokal Profil",
- "Tobulos1"
+ "Tobulos1",
+ "Rotsee",
+ "Boom"
]
},
"config-desc": "Installationsprogrammet för MediaWiki",
@@ -56,7 +58,7 @@
"config-unicode-using-intl": "Använder [http://pecl.php.net/intl intl PECL-tillägget] för Unicode-normalisering.",
"config-unicode-pure-php-warning": "'''Varning:''' [http://pecl.php.net/intl intl PECL-tillägget] är inte tillgängligt för att hantera Unicode-normalisering, faller tillbaka till en långsamt implementering i ren PHP.\nOm du driver en högtrafikerad webbplats bör du läsa lite om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
"config-unicode-update-warning": "'''Varning:''' Den installerade versionen av Unicode-normaliserings \"wrappern\" använder en äldre version av [http://site.icu-project.org/ ICU projektets] bibliotek.\nDu bör [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations uppgradera] om är intresserad av att använda Unicode.",
- "config-no-db": "Kunde inte hitta en lämplig databasdrivrutin! Du måste installera en databasdrivrutin för PHP.\nFöljande databastyper stöds: $1.\n\nI du själv kompilerat din PHP, konfigurera den med en databasklient aktiverad genom att t.ex. använda <code>./configure --with-mysqli</code>.\nOm du installerade PHP från ett Debian- eller Ubuntupaket måste du även installera, t.ex. <code>php5-mysql</code>-paketet.",
+ "config-no-db": "Kunde inte hitta en lämplig databasdrivrutin! Du måste installera en databasdrivrutin för PHP.\nFöljande databas{{PLURAL:$2|typ |typer}} stöds: $1.\n\nI du själv kompilerat din PHP, konfigurera den med en databasklient aktiverad genom att t.ex. använda <code>./configure --with-mysqli</code>.\nOm du installerade PHP från ett Debian- eller Ubuntupaket måste du även installera, t.ex. <code>php5-mysql</code>-paketet.",
"config-outdated-sqlite": "'''Varning:''' du har SQLite $1, vilket är lägre än minimikravet version $2. SQLite kommer inte att vara tillgänglig.",
"config-no-fts3": "'''Varning:''' SQLite kompileras utan [//sqlite.org/fts3.html FTS3-modulen], sökfunktioner kommer att vara otillgängliga på denna backend.",
"config-register-globals-error": "<strong>Fel: PHP-alternativet <code>[http://php.net/register_globals register_globals]</code> är aktiverad.\nDen måste vara inaktiverad för att fortsätta med installationen.</strong>\nSe [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] för hjälp om hur man gör så.",
@@ -226,7 +228,7 @@
"config-profile-no-anon": "Kontoskapande krävs",
"config-profile-fishbowl": "Endast auktoriserade redigerare",
"config-profile-private": "Privat wiki",
- "config-profile-help": "Wikis fungerar bäst när du låter som många människor som möjligt redigera dem.\nI MediaWiki, är det lätt att granska de senaste ändringarna och återställa alla skador som utförs av naiva eller illvilliga användare.\n\nMen många har funnit MediaWiki användbart i en mängd olika roller, och ibland är det inte lätt att övertyga alla fördelarna med wiki-sättet.\nSå valet är ditt.\n\nModellen <strong>{{int:config-profil-wiki}}</strong> tillåter vem som helst att redigera, utan att ens behöva logga in.\nEn wiki med <strong>{{int:config-profil-ingen-anon}}</strong> ger extra ansvarskänsla, men kan avskräcka tillfälliga bidragsgivare.\n\nScenariot <strong>{{int:config-profil-fishbowl}}</strong> tillåter godkända användare att redigera, men allmänheten kan se sidorna, inklusive historik.\nA <strong>{{int:config-profil-privat}}</strong> tillåter endast godkända användare att se sidor, samma grupp får även redigera.\n\nMer komplexa användarrättighetskonfigurationer finns tillgängliga efter installationen, se [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights avsnittet i manualen].",
+ "config-profile-help": "Wikier fungerar bäst när du låter som många människor som möjligt redigera dem.\nI MediaWiki är det lätt att granska de senaste ändringarna och återställa alla skador som utförs av naiva eller illvilliga användare.\n\nMen många har funnit MediaWiki användbart i en mängd olika roller, och ibland är det inte lätt att övertyga alla om fördelarna med wiki-sättet.\nSå valet är ditt.\n\nModellen <strong>{{int:config-profil-wiki}}</strong> tillåter vem som helst att redigera, utan att ens behöva logga in.\nEn wiki med <strong>{{int:config-profil-ingen-anon}}</strong> ger extra ansvarskänsla, men kan avskräcka tillfälliga bidragsgivare.\n\nScenariot <strong>{{int:config-profil-fishbowl}}</strong> tillåter godkända användare att redigera, men allmänheten kan se sidorna, inklusive historik.\nA <strong>{{int:config-profil-privat}}</strong> tillåter endast godkända användare att se sidor, samma grupp får även redigera.\n\nMer komplexa användarrättighetskonfigurationer finns tillgängliga efter installationen, se [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights avsnittet i manualen].",
"config-license": "Upphovsrätt och licens:",
"config-license-none": "Ingen licenssidfot",
"config-license-cc-by-sa": "Creative Commons Erkännande-DelaLika",
diff --git a/includes/installer/i18n/te.json b/includes/installer/i18n/te.json
index 86b760c8..ba84435c 100644
--- a/includes/installer/i18n/te.json
+++ b/includes/installer/i18n/te.json
@@ -48,7 +48,6 @@
"config-env-good": "పర్యావరణాన్ని పరీక్షించాం.\nఇక మీరు MediaWiki ని స్థాపించుకోవచ్చు.",
"config-env-bad": "పర్యావరణాన్ని పరీక్షించాం.\nమీరు MediaWiki ని స్థాపించలేరు.",
"config-env-php": "PHP $1 స్థాపించబడింది.",
- "config-env-php-toolow": "PHP $1 స్థాపించబడింది.\nఅయితే, MediaWiki కి PHP $2 గానీ ఆ పైది గానీ కావాలి.",
"config-unicode-using-utf8": "యూనికోడు నార్మలైజేషన్ కోసం బ్రయాన్ విబర్ గారి utf8_normalize.so ను వాడుతున్నాం.",
"config-unicode-using-intl": "యూనికోడు నార్మలైజేషన్ కోసం [http://pecl.php.net/intl intl PECL పొడిగింత] ను వాడుతున్నాం.",
"config-outdated-sqlite": "<strong>హెచ్చరిక:</strong> మీ వద్ద SQLite $1 ఉంది. అదికావలసిన వెర్షను $2 కంటే దిగువది. SQLite అందుబాటులో ఉండదు.",
@@ -201,6 +200,7 @@
"config-memcache-badport": "Memcached పోర్టు సఖ్యలు $1, $2 ల మధ్య ఉండాలి.",
"config-extensions": "పొడిగింతలు",
"config-extensions-help": "పైన చూపిన పొడిగింతలు మీ <code>./extensions</code> డైరెక్టరీలో ఉన్నాయి.\n\nవాటికి అదనంగా కాన్ఫిగరేషన్ అవసరం కావచ్చు. అయితే మీరు వాటిని చేతనం చెయ్యవచ్చు.",
+ "config-skins": "అలంకారాలు",
"config-install-alreadydone": "<strong>హెచ్చరిక:</strong> మీరు ఈసరికే MediaWiki ని స్థాపించినట్లుగా అనిపిస్తోంది. మళ్ళీ స్థాపించే ప్రయత్నం చేస్తున్నట్లున్నారు.\nతరువాత పేజీకి వెళ్ళండి.",
"config-install-begin": "\"{{int:config-continue}}\" నొక్కి, MediaWiki స్థాపనను మొదలుపెట్టవచ్చు.\nఇంకా మార్పులు చెయ్యదలిస్తే, \"{{int:config-back}}\" నొక్కండి.",
"config-install-step-done": "పూర్తయింది",
diff --git a/includes/installer/i18n/th.json b/includes/installer/i18n/th.json
index ec6526be..fd406a78 100644
--- a/includes/installer/i18n/th.json
+++ b/includes/installer/i18n/th.json
@@ -2,9 +2,97 @@
"@metadata": {
"authors": [
"Korrawit",
- "Horus"
+ "Horus",
+ "Octahedron80"
]
},
+ "config-desc": "ตัวติดตั้งสำหรับมีเดียวิกิ",
+ "config-title": "การติดตั้งมีเดียวิกิ $1",
+ "config-information": "สารสนเทศ",
+ "config-localsettings-upgrade": "ตรวจพบไฟล์ <code>LocalSettings.php</code>\nเพื่ออัปเกรดการติดตั้งนี้ กรุณากรอกค่าของ <code>$wgUpgradeKey</code> ในกล่องด้านล่าง\nคุณจะพบมันได้ใน <code>LocalSettings.php</code>",
+ "config-localsettings-cli-upgrade": "ตรวจพบไฟล์ <code>LocalSettings.php</code>\nเพื่ออัปเกรดการติดตั้งนี้ กรุณาดำเนินงาน <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-localsettings-connection-error": "ความผิดพลาดเกิดขึ้นเมื่อเชื่อมต่อฐานข้อมูลโดยใช้การตั้งค่าที่ระบุใน <code>LocalSettings.php</code> กรุณาแก้ไขการตั้งค่าเหล่านี้และลองอีกครั้ง\n\n$1",
+ "config-session-error": "ความผิดพลาดการเริ่มต้นช่วงเวลาสื่อสาร: $1",
+ "config-session-expired": "ช่วงเวลาสื่อสารของคุณดูเหมือนว่าหมดอายุแล้ว\nช่วงเวลาสื่อสารถูกตั้งไว้ให้มีช่วงอายุเป็น $1\nคุณสามารถเพิ่มค่าสิ่งนี้โดยกำหนด <code>session.gc_maxlifetime</code> ใน php.ini\nให้เริ่มกระบวนการติดตั้งอีกครั้ง",
+ "config-no-session": "ข้อมูลช่วงเวลาสื่อสารของคุณสูญหาย!\nให้ตรวจสอบ php.ini ของคุณและแน่ใจว่า <code>session.save_path</code> ถูกกำหนดไปยังไดเรกทอรีที่เหมาะสม",
+ "config-your-language": "ภาษาของคุณ:",
+ "config-your-language-help": "เลือกภาษาที่จะใช้ระหว่างกระบวนการติดตั้ง",
+ "config-wiki-language": "ภาษาวิกิ:",
+ "config-wiki-language-help": "เลือกภาษาที่จะใช้เขียนเป็นหลักในวิกิ",
+ "config-back": "← ย้อนกลับ",
+ "config-continue": "ดำเนินการต่อ →",
+ "config-page-language": "ภาษา",
+ "config-page-welcome": "ยินดีต้อนรับสู่มีเดียวิกิ!",
+ "config-page-dbconnect": "เชื่อมต่อไปยังฐานข้อมูล",
+ "config-page-upgrade": "อัปเกรดการติดตั้งที่มีอยู่",
+ "config-page-dbsettings": "การตั้งค่าฐานข้อมูล",
+ "config-page-name": "ชื่อ",
+ "config-page-options": "ตัวเลือก",
+ "config-page-install": "ติดตั้ง",
+ "config-page-complete": "สมบูรณ์!",
+ "config-page-restart": "เริ่มการติดตั้งอีกครั้ง",
+ "config-page-readme": "อ่านเอกสารกำกับ",
+ "config-page-releasenotes": "บันทึกการเผยแพร่",
+ "config-page-copying": "การคัดลอก",
+ "config-page-upgradedoc": "การอัปเกรด",
+ "config-page-existingwiki": "วิกิที่มีอยู่",
+ "config-help-restart": "คุณต้องการล้างข้อมูลทั้งหมดที่คุณกรอกและเริ่มกระบวนการติดตั้งอีกครั้งหรือไม่?",
+ "config-restart": "ใช่ เริ่มใหม่อีกครั้ง",
+ "config-welcome": "=== การตรวจสอบสภาพแวดล้อม ===\nการตรวจสอบเบื้องต้นจะกระทำขึ้นเพื่อดูว่าสภาพแวดล้อมนี้เหมาะสมสำหรับการติดตั้งมีเดียวิกิหรือไม่\nจำไว้ว่าให้รวบรวมสารสนเทศนี้ ถ้าคุณแสวงหาการสนับสนุนเพื่อที่จะติดตั้งให้สมบูรณ์",
+ "config-sidebar": "* [//www.mediawiki.org โฮมเพจมีเดียวิกิ]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents แนวปฏิบัติของผู้ใช้]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents แนวปฏิบัติของผู้ดูแลระบบ]\n* [//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": "สภาพแวดล้อมถูกตรวจสอบแล้ว\nคุณสามารถติดตั้งมีเดียวิกิ",
+ "config-env-bad": "สภาพแวดล้อมถูกตรวจสอบแล้ว\nคุณไม่สามารถติดตั้งมีเดียวิกิ",
+ "config-env-php": "PHP $1 ติดตั้งแล้ว",
+ "config-env-hhvm": "HHVM $1 ติดตั้งแล้ว",
+ "config-memory-raised": "<code>memory_limit</code> ของ PHP คือ $1 ได้เพิ่มเป็น $2",
+ "config-memory-bad": "<strong>คำเตือน:</strong> <code>memory_limit</code> ของ PHP คือ $1.\nเป็นไปได้ว่ามันอาจต่ำเกินไป\nการติดตั้งอาจล้มเหลวได้!",
+ "config-xcache": "[http://xcache.lighttpd.net/ XCache] ติดตั้งแล้ว",
+ "config-apc": "[http://www.php.net/apc APC] ติดตั้งแล้ว",
+ "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ติดตั้งแล้ว",
+ "config-no-cache": "<strong>คำเตือน:</strong> ไม่พบ [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] หรือ [http://www.iis.net/download/WinCacheForPhp WinCache]\nการแคชอ็อบเจกต์จะไม่ถูกเปิดใช้งาน",
+ "config-mod-security": "<strong>คำเตือน:</strong> เว็บเซิร์ฟเวอร์ของคุณมี [http://modsecurity.org/ mod_security]/mod_security2 เปิดใช้งานอยู่ การตั้งค่าทั่วไปหลายอย่างของสิ่งนี้จะก่อให้เกิดปัญหาสำหรับมีเดียวิกิ และซอฟต์แวร์อื่นที่อนุญาตให้ผู้ใช้สามารถโพสต์เนื้อหาได้ตามใจ\nหากเป็นไปได้ สิ่งนี้ควรปิดใช้งาน หรือมิฉะนั้นก็ อ้างไปยัง[http://modsecurity.org/documentation/ เอกสารกำกับการใช้งาน mod_security] หรือติดต่อการสนับสนุนจากโฮสต์ของคุณ ถ้าคุณพบความผิดพลาดโดยสุ่ม",
+ "config-diff3-bad": "ไม่พบ GNU diff3",
+ "config-git": "พบซอฟต์แวร์ควบคุมรุ่น Git: <code>$1</code>",
+ "config-git-bad": "ไม่พบซอฟต์แวร์ควบคุมรุ่น Git",
+ "config-imagemagick": "พบ ImageMagick: <code>$1</code>\nการย่อรูปภาพจะถูกเปิดใช้งาน ถ้าคุณเปิดใช้งานการอัปโหลด",
+ "config-gd": "พบไลบรารีกราฟิก GD ภายใน\nการย่อรูปภาพจะถูกเปิดใช้งาน ถ้าคุณเปิดใช้งานการอัปโหลด",
+ "config-no-scaling": "ไม่พบไลบรารี GD หรือ ImageMagick\nการย่อรูปภาพจะถูกปิดใช้งาน",
+ "config-using-server": "ใช้ชื่อเซิร์ฟเวอร์ \"<nowiki>$1</nowiki>\"",
+ "config-using-uri": "ใช้ยูอาร์แอลของเซิร์ฟเวอร์ \"<nowiki>$1$2</nowiki>\"",
+ "config-mysql-innodb": "อินโนดีบี",
+ "config-mysql-myisam": "มายไอแซม",
+ "config-mysql-binary": "ไบนารี",
+ "config-mysql-utf8": "ยูทีเอฟ-8",
+ "config-site-name": "ชื่อของวิกิ:",
+ "config-ns-generic": "โครงการ",
+ "config-ns-other-default": "วิกิของฉัน",
+ "config-admin-box": "บัญชีผู้ดูแลระบบ",
+ "config-admin-name": "ชื่อผู้ใช้ของคุณ:",
+ "config-admin-password": "รหัสผ่าน:",
+ "config-admin-password-confirm": "รหัสผ่านอีกครั้ง:",
+ "config-admin-email": "ที่อยู่อีเมล:",
+ "config-license-pd": "สาธารณสมบัติ",
+ "config-extensions": "ส่วนขยาย",
+ "config-install-step-done": "เสร็จสิ้น",
+ "config-install-step-failed": "ล้มเหลว",
+ "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> ตารางมีเดียวิกิดูเหมือนว่ามีอยู่แล้ว\nข้ามการสร้างไป",
+ "config-install-tables-failed": "<strong>ความผิดพลาด:</strong> การสร้างตารางล้มเหลวด้วยความผิดพลาดต่อไปนี้: $1",
+ "config-install-interwiki-list": "ไม่สามารถอ่านไฟล์ <code>interwiki.list</code>",
+ "config-install-sysop": "สร้างบัญชีผู้ใช้ที่เป็นผู้ดูแลระบบ",
+ "config-download-localsettings": "ดาวน์โหลด <code>LocalSettings.php</code>",
+ "config-help-tooltip": "คลิกเพื่อขยาย",
+ "config-nofile": "ไม่พบไฟล์ \"$1\" มันอาจถูกลบไปแล้วหรือไม่?",
"mainpagetext": "<strong>ติดตั้งมีเดียวิกิสำเร็จ</strong>",
"mainpagedocfooter": "ศึกษา[//meta.wikimedia.org/wiki/Help:Contents คู่มือการใช้งาน] สำหรับเริ่มต้นใช้งานซอฟต์แวร์วิกิ\n\n== เริ่มต้น ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings รายการการปรับแต่งระบบ] (ภาษาอังกฤษ)\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ คำถามที่ถามบ่อยในมีเดียวิกิ] (ภาษาอังกฤษ)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce เมลลิงลิสต์ของมีเดียวิกิ]"
}
diff --git a/includes/installer/i18n/tl.json b/includes/installer/i18n/tl.json
index 9a894c25..4b835008 100644
--- a/includes/installer/i18n/tl.json
+++ b/includes/installer/i18n/tl.json
@@ -50,7 +50,6 @@
"config-env-good": "Nasuri na ang kapaligiran.\nMailuluklok mo ang MediaWiki.",
"config-env-bad": "Nasuri na ang kapaligiran.\nHindi mo mailuklok ang MediaWiki.",
"config-env-php": "Naitalaga ang PHP na $1.",
- "config-env-php-toolow": "Naitalaga ang PHP $1.\nSubalit, nangangailangan ang MediaWiki ng PHP $2 o mas mataas pa.",
"config-unicode-using-utf8": "Ginagamit ang utf8_normalize.so ni Brion Vibber para sa pagpapanormal ng Unikodigo.",
"config-unicode-using-intl": "Ginagamit ang [http://pecl.php.net/intl intl dugtong na PECL] para sa pagsasanormal ng Unikodigo.",
"config-unicode-pure-php-warning": "'''Babala''': Ang [http://pecl.php.net/intl dugtong ng internasyunal na PECL] ay hindi makukuha upang makapanghawak ng pagpapanormal ng Unikodigo, na babagsak na pabalik sa mabagal na pagsasakatuparan ng dalisay na PHP.\nKapag nagpapatakbo ka ng isang pook na mataas ang trapiko, dapat kang bumasa ng kaunti hinggil sa [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations pagpapanormal ng Unikodigo].",
@@ -58,7 +57,6 @@
"config-no-db": "Hindi matagpuan ang isang angkop na tagapagmaneho ng kalipunan ng datos! Kailangan mong magluklok ng isang tagapagmaneho ng kalipunan ng dato para sa PHP.\nTinatangkilik ang sumusunod na mga uri ng kalipunan ng dato: $1.\n\nKung ikaw ay nasa isang pinagsasaluhang pagpapasinaya, hilingin sa iyong tagapagbigay ng pagpapasinaya na iluklok ang isang angkop na tagapagmaneho ng kalipunan ng dato.\nKung ikaw mismo ang nangalap ng PHP, muling isaayos ito na pinagagana ang isang kliyente ng kalipunan ng dato, halimbawa na ang paggamit ng <code>./configure --with-mysql</code>.\nKung iniluklok mo ang PHP mula sa isang pakete ng Debian o Ubuntu, kung gayon kailangan mo ring magluklok ng modyul na php5-mysql.",
"config-outdated-sqlite": "'''Babala''': mayroong kang $1 ng SQLite, na mas mababa kaysa sa pinaka mababang kailangang bersiyon na $2. Magiging hindi makukuha ang SQLite.",
"config-no-fts3": "'''Warning''': Ang SQLite ay hindi itinala at tinipon na wala ang [//sqlite.org/fts3.html modulong FTS3], ang mga tampok na panghanap ay magiging hindi makukuha sa ibabaw ng panlikod na dulong ito.",
- "config-register-globals": "'''Babala: Ang mapipili na <code>[http://php.net/register_globals register_globals]</code> ng PHP ay pinagagana.'''\n'''Huwag paganahin kung kaya mo.'''\nAandar ang MediaWiki, subalit ang tagapaghain mo ay nakalantad sa maaaring maganap na mga kahinaang pangkatiwasayan.",
"config-magic-quotes-runtime": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''\nAng piniling ito ay hindi mahuhulaan na pipinsala sa lahok na dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na gumagana ang pinili na ito.",
"config-magic-quotes-sybase": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''\nHindi mahuhulaan na sinisira ng napiling ito ang lahok na dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
"config-mbstring": "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''\nAng napiling ito ay nagdurulot ng mga kamalian at maaaring sumira nang hindi nahuhulaan ang dato.\nHindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
diff --git a/includes/installer/i18n/tr.json b/includes/installer/i18n/tr.json
index 83c51ee6..e9b05cf2 100644
--- a/includes/installer/i18n/tr.json
+++ b/includes/installer/i18n/tr.json
@@ -6,7 +6,9 @@
"Rhinestorm",
"SiLveRLeaD",
"Trncmvsr",
- "Sayginer"
+ "Sayginer",
+ "Trockya",
+ "Aşilleus"
]
},
"config-desc": "MediaWiki yükleyicisi",
@@ -64,8 +66,10 @@
"config-git": "Sürüm kontrol yazılımı Git bulundu: <code>$1</code>.",
"config-git-bad": "Sürüm kontrol yazılımı Git bulunamadı.",
"config-imagemagick": "ImageMagick bulundu: <code>$1</code>.\nEğer yüklemeleri etkinleştirirseniz, küçük resimler etkinleştirilecektir.",
+ "config-db-type": "Veritabanı tipi:",
"config-db-host": "Veritabanı sunucusu:",
"config-db-host-help": "Veritabanı sunucunuz farklı bir sunucu üzerinde ise, ana bilgisayar adını veya IP adresini buraya girin.\n\nPaylaşılan ağ barındırma hizmeti kullanıyorsanız, barındırma sağlayıcınız size doğru bir ana bilgisayar adını kendi belgelerinde vermiştir.\n\nEğer MySQL kullanan bir Windows sunucusuna yükleme yapıyorsanız, sunucu adı olarak \"localhost\" kullanırsanız çalışmayabilir. Çalışmazsa, yerel IP adresi için \"127.0.0.1\" deneyin.\n\nPostgreSQL kullanıyorsanız, bu alanı bir Unix soketi ile bağlanmak için boş bırakın.",
+ "config-db-host-oracle": "Veritabanı TNS:",
"config-db-wiki-settings": "Bu wikiyi tanımla",
"config-db-name": "Veritabanı adı:",
"config-db-name-oracle": "Veritabanı şeması:",
@@ -175,6 +179,7 @@
"config-install-schema": "Şema oluştur",
"config-install-pg-schema-not-exist": "PostgreSQL şema yok.",
"config-install-pg-commit": "Değişiklikleri yapılıyor",
+ "config-pg-no-create-privs": "Kurulum için belirttiğiniz hesap yeni bir hesap oluşturmak için gereken izinlere sahip değil.",
"config-install-user": "Veritabanı kullanıcısı oluşturma",
"config-install-user-alreadyexists": "Kullanıcı \" $1 \" zaten var",
"config-install-user-create-failed": "Kullanıcı oluşturma \" $1 \" başarısız oldu:$2",
diff --git a/includes/installer/i18n/uk.json b/includes/installer/i18n/uk.json
index 9eee1a7f..e0304433 100644
--- a/includes/installer/i18n/uk.json
+++ b/includes/installer/i18n/uk.json
@@ -55,6 +55,7 @@
"config-env-good": "Перевірку середовища успішно завершено.\nВи можете встановити MediaWiki.",
"config-env-bad": "Було проведено перевірку середовища. Ви не можете встановити MediaWiki.",
"config-env-php": "Встановлено версію PHP: $1.",
+ "config-env-hhvm": "HHVM $1 встановлено.",
"config-unicode-using-utf8": "Використовувати utf8_normalize.so Брайона Віббера для нормалізації Юнікоду.",
"config-unicode-using-intl": "Використовувати [http://pecl.php.net/intl міжнародне розширення PECL] для нормалізації Юнікоду.",
"config-unicode-pure-php-warning": "'''Увага''': [http://pecl.php.net/intl міжнародне розширення PECL] не може провести нормалізацію Юнікоду.\nЯкщо ваш сайт має високий трафік, вам варто почитати про [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормалізацію Юнікоду].",
@@ -314,6 +315,7 @@
"config-install-stats": "Ініціалізація статистики",
"config-install-keys": "Генерація секретних ключів",
"config-insecure-keys": "'''Увага:''' {{PLURAL:$2|1=Секретний ключ|Секретні ключі}} ($1), {{PLURAL:$2|1=згенерований в процесі встановлення, недостатньо надійний|згенеровані в процесі встановлення, недостатньо надійні}}. Розгляньте можливість {{PLURAL:$2|1=його|їх}} заміни вручну.",
+ "config-install-updates": "Запобігти запуску непотрібних оновлень",
"config-install-updates-failed": "<strong>Помилка:</strong> Вставка оновленних ключів в таблиці не вдалося через таку помилку:$1",
"config-install-sysop": "Створення облікового запису адміністратора",
"config-install-subscribe-fail": "Не можливо підписатись на mediawiki-announce: $1",
diff --git a/includes/installer/i18n/vi.json b/includes/installer/i18n/vi.json
index 1f3f89ef..30342aa3 100644
--- a/includes/installer/i18n/vi.json
+++ b/includes/installer/i18n/vi.json
@@ -3,15 +3,23 @@
"authors": [
"පසිඳු කාවින්ද",
"Minh Nguyen",
- "Withoutaname"
+ "Withoutaname",
+ "Dinhxuanduyet"
]
},
"config-desc": "Trình cài đặt MediaWiki",
"config-title": "Cài đặt MediaWiki $1",
"config-information": "Thông tin",
+ "config-localsettings-upgrade": "Một tập tin <code>LocalSettings.php</code> đã được phát hiện.\nĐể nâng cấp bản cài đặt này, xin nhập giá trị của <code>$wgUpgradeKey</code> trong hộp thoại bên dưới đây.\nBạn sẽ tìm thấy nó trong <code>LocalSettings.php</code>.",
+ "config-localsettings-cli-upgrade": "Một tập tin <code>LocalSettings.php</code> đã được phát hiện.\nĐể nâng cấp bản cài đặt này, hãy chạy <code>update.php</code> thay thế.",
"config-localsettings-key": "Chìa khóa nâng cấp:",
"config-localsettings-badkey": "Bạn đã cung cấp một chìa khóa sai.",
+ "config-upgrade-key-missing": "Một bản cài đặt MediaWiki sẵn đã được phát hiện.\nĐể nâng cấp bản cài đặt này, hãy thêm dòng sau vào cuối <code>LocalSettings.php</code>:\n\n$1",
+ "config-localsettings-incomplete": "Tập tin <code>LocalSettings.php</code> đã tồn tại hình như không hoàn chỉnh.\nBiến $1 chưa được đặt.\nXin hãy thay đổi <code>LocalSettings.php</code> để đặt biến này, rồi bấm “{{int:Config-continue}}”.",
+ "config-localsettings-connection-error": "Đã xuất hiện lỗi khi kết nối với cơ sở dữ liệu dùng cấu hình trong <code>LocalSettings.php</code>. Xin hãy sửa lại cấu hình và thử lại.\n\n$1",
"config-session-error": "Lỗi khi bắt đầu phiên làm việc: $1",
+ "config-session-expired": "Dữ liệu phiên làm việc của bạn dường như đã hết hạn. Các phiên làm việc được cấu hình để kéo dài $1. Để tăng thời gian này, đặt <code>session.gc_maxlifetime</code> trong php.ini, rồi khởi động lại quá trình cài đặt.",
+ "config-no-session": "Đã mất dữ liệu phiên làm việc của bạn! Kiểm tra tập tin php.ini và đảm bảo rằng <code>session.save_path</code> đã được đặt thành một thư mục thích hợp.",
"config-your-language": "Ngôn ngữ của bạn:",
"config-your-language-help": "Chọn một ngôn ngữ để sử dụng trong quá trình cài đặt.",
"config-wiki-language": "Ngôn ngữ wiki:",
@@ -33,46 +41,100 @@
"config-page-copying": "Sao chép",
"config-page-upgradedoc": "Nâng cấp",
"config-page-existingwiki": "Wiki đã tồn tại",
+ "config-help-restart": "Bạn có muốn xóa tất cả dữ liệu được lưu mà bạn vừa nhập và khởi động lại quá trình cài đặt?",
"config-restart": "Có, khởi động lại nó",
+ "config-welcome": "=== Kiểm tra môi trường ===\nBây giờ sẽ kiểm tra sơ qua môi trường này có phù hợp cho việc cài đặt MediaWiki.\nHãy nhớ bao gồm thông tin này khi nào xin hỗ trợ hoàn thành việc cài đặt.",
+ "config-copyright": "=== Bản quyền và Điều khoản ===\n\n$1\n\nChương trình này là phần mềm tự do; bạn có thể phân phối lại và/hoặc chỉnh sửa nó dưới điều khoản của Giấy phép Công cộng GNU (GNU General Public License) do Quỹ Phần mềm Tự do (Free Software Foundation) xuất bản; hoặc phiên bản 2 của giấy phép đó, hoặc (tùy theo ý bạn) bất kỳ phiên bản nào sau này.\n\nChương trình này được phân phối với hy vọng rằng nó sẽ hữu ích, nhưng <strong>không có bất kỳ bảo hành nào</strong>; không có thậm chí bảo hành bao hàm về <strong>khả năng thương mại</strong> hoặc <strong>sự thích hợp với một mục đích cụ thể</strong>.\nXem Giấy phép Công cộng GNU để biết thêm chi tiết.\n\nBạn phải nhận <doclink href=Copying>một bản sao của Giấy phép Công cộng GNU</doclink> đi kèm chương trình này; nếu không, hãy viết thư cho Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, Hoa Kỳ, hoặc [http://www.gnu.org/copyleft/gpl.html đọc nó trên mạng].",
+ "config-sidebar": "* [//www.mediawiki.org/wiki/Special:MyLanguage/MediaWiki Trang chủ MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Hướng dẫn sử dụng]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Hướng dẫn quản lý]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Câu thường hỏi]\n----\n* <doclink href=Readme>Cần đọc trước</doclink>\n* <doclink href=ReleaseNotes>Ghi chú phát hành</doclink>\n* <doclink href=Copying>Sao chép</doclink>\n* <doclink href=UpgradeDoc>Nâng cấp</doclink>",
"config-env-good": "Đã kiểm tra môi trường.\nBạn có thể cài đặt MediaWiki.",
"config-env-bad": "Đã kiểm tra môi trường.\nBạn không thể cài đặt MediaWiki.",
"config-env-php": "PHP $1 đã được cài đặt.",
- "config-env-php-toolow": "PHP $1 đã được cài đặt.\nTuy nhiên, MediaWiki cần PHP $2 trở lên.",
+ "config-env-hhvm": "HHVM $1 được cài đặt.",
"config-unicode-using-utf8": "Đang sử dụng utf8_normalize.so của Brion Vibber để chuẩn hóa văn bản Unicode.",
"config-unicode-using-intl": "Sẽ sử dụng [http://pecl.php.net/intl phần mở rộng PECL intl] để chuẩn hóa Unicode.",
+ "config-unicode-pure-php-warning": "<strong>Cảnh báo:</strong> [http://pecl.php.net/intl intl PECL extension] không được phép xử lý Unicode chuẩn hóa, trả lại thực thi PHP-gốc chậm.\nNếu bạn chạy một site lưu lượng lớn, bạn phải để ý qua một chút trên [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
+ "config-unicode-update-warning": "<strong>Cảnh báo:</strong> Phiên bản cài đặt của gói Unicode chuẩn hóa sử dụng một phiên bản cũ của thư viện [http://site.icu-project.org/ the ICU project].\nBạn phải [//www.mediawiki.org/wiki/Special:MyLanguage/nâng cấp Unicode_normalization_considerations] nếu bạn quan tâm đến việc sử dụng Unicode.",
+ "config-no-db": "Không tìm thấy một trình điều khiển cơ sở dữ liệu phù hợp! Bạn cần phải cài một trình điều khiển cơ sở dữ liệu cho PHP.\n{{PLURAL:$2|Loại|Các loại}} cơ sở dữ liệu sau đây được hỗ trợ: $1.\n\nNếu bạn đã biên dịch PHP lấy, cấu hình lại nó mà kích hoạt một trình khách cơ sở dữ liệu, ví dụ bằng lệnh <code>./configure --with-mysqli</code>.\nNếu bạn đã cài PHP từ một gói Debian hoặc Ubuntu, thì bạn cũng cần phải cài ví dụ gói <code>php5-mysql</code>.",
+ "config-outdated-sqlite": "<strong>Chú ý:</strong> Bạn có SQLite $1, phiên bản này thấp hơn phiên bản yêu câu tối thiểu $2. SQLite sẽ không có tác dụng.",
+ "config-no-fts3": "<strong>Chú ý:</strong> SQLite được biên dịch mà không có [//sqlite.org/fts3.html mô đun FTS3], nên các chức năng tìm kiếm sẽ bị vô hiệu trên hệ thống phía sau này.",
+ "config-register-globals-error": "<strong>Lỗi: Tùy chọn <code>[http://php.net/register_globals register_globals]</code> của PHP đã được kích hoạt.\nNó phải bị vô hiệu để tiếp tục quá trình cài đặt.</strong>\nXem [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] để biết cách thực hiện.",
+ "config-magic-quotes-gpc": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+ "config-magic-quotes-runtime": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+ "config-magic-quotes-sybase": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+ "config-mbstring": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] được kích hoạt!</strong>\nTùy chọn này gây lỗi và có thể làm hỏng dữ liệu một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
+ "config-safe-mode": "<strong>Cảnh báo:</strong> [http://www.php.net/features.safe-mode Chế độ an toàn] của PHP đang được kích hoạt.\nNó có thể gây vấn đề, nhất là nếu dùng các chức năng tải lên tập tin và <code>math</code>.",
+ "config-xml-bad": "Mô đun XML của PHP đang bị thiếu.\nMediaWiki yêu cầu các hàm trong mô đun này và sẽ không hoạt động trong cấu hình này.\nNếu bạn đang chạy Mandrake, hãy cài đặt gói php-xml.",
+ "config-pcre-old": "<strong>Lỗi chí tử:</strong> PCRE $1 trở lên được yêu cầu phải có.\nBản nhị phân PHP của bạn dang được liên kết với PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Thông tin bổ sung].",
+ "config-pcre-no-utf8": "<strong>Lỗi chí tử:</strong> Mô đun PCRE của PHP dường như được biên dịch mà không có hỗ trợ PCRE_UTF8.\nMediaWiki yêu cầu phải có hỗ trợ UTF-8 để hoạt động chính xác.",
+ "config-memory-raised": "<code>memory_limit</code> của PHP là $1, tăng lên $2.",
+ "config-memory-bad": "<strong>Cảnh báo:</strong> <code>memory_limit</code> của PHP là $1.\nGiá trị này có lẽ quá thấp.\nCài đặt có thể bị thất bại!",
+ "config-ctype": "<strong>Lỗi chí tử:</strong> PHP phải được biên dịch với hỗ trợ cho [http://www.php.net/manual/en/ctype.installation.php phần mở rộng Ctype].",
+ "config-iconv": "<strong>Lỗi chí tử:</strong> PHP phải được biên dịch với hỗ trợ cho [http://www.php.net/manual/en/iconv.installation.php phần mở rộng iconv].",
+ "config-json": "<strong>Lỗi chí tử:</strong> PHP được biên dịch mà không có hỗ trợ cho JSON.\nBạn phải cài đặt hoặc phần mở rộng JSON PHP hoặc phần mở rộng [http://pecl.php.net/package/jsonc PECL jsonc] trước khi cài đặt MediaWiki.\n* Phần mở rộng PHP có sẵn trong Red Hat Enterprise Linux (CentOS) 5 và 6 nhưng phải được kích hoạt trong <code>/etc/php.ini</code> hoặc <code>/etc/php.d/json.ini</code>.\n* Một số phiên bản Linux được phát hành sau tháng 5 năm 2013 bỏ qua phần mở rộng PHP và gói lại phần mở rộng PECL là <code>php5-json</code> hoặc <code>php-pecl-jsonc</code> thay thế.",
"config-xcache": "[http://xcache.lighttpd.net/ XCache] đã được cài đặt",
"config-apc": "[http://www.php.net/apc APC] đã được cài đặt",
"config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] đã được cài đặt",
+ "config-no-cache": "<strong>Cảnh báo:</strong> Không tìm thấy [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] hoặc [http://www.iis.net/download/WinCacheForPhp WinCache].\nVùng nhớ đệm đối tượng không được kích hoạt.",
+ "config-mod-security": "<strong>Cảnh báo:</strong> [http://modsecurity.org/ mod_security]/mod_security2 đã được kích hoạt trên máy chủ Web của bạn. Nhiều cấu hình phổ biến của phần mềm này sẽ gây vấn đề cho MediaWiki và những phần mềm khác cho phép người dùng đăng các nội dung tùy tiện.\nNếu có thể, bạn nên vô hiệu nó. Còn không, tra cứu [http://modsecurity.org/documentation/ tài liệu mod_security] hoặc liên hệ với nhà cung cấp hỗ trợ cho máy chủ nếu bạn gặp những lỗi ngẫu nhiên nào đó.",
"config-diff3-bad": "Không tìm thấy GNU diff3.",
"config-git": "Đã tìm thấy phần mềm điều khiển phiên bản Git: <code>$1</code>.",
"config-git-bad": "Không tìm thấy phần mềm điều khiển phiên bản Git.",
+ "config-imagemagick": "Đã tìm thấy ImageMagick: <code>$1</code>.\nChức năng thu nhỏ hình ảnh sẽ được kích hoạt nếu bạn cho phép tải lên.",
+ "config-gd": "Đã tìm thấy thư viện đồ họa GD đi kèm.\nChức năng thu nhỏ hình ảnh sẽ được kích hoạt nếu bạn cho phép tải lên.",
+ "config-no-scaling": "Không thể tìm thấy thư viện GD hoặc ImageMagic. Chức năng thu nhỏ hình ảnh sẽ bị vô hiệu.",
+ "config-no-uri": "<strong>Lỗi:</strong> Không thể xác định URI hiện tại. Cài đặt bị thất bại.",
+ "config-no-cli-uri": "<strong>Cảnh báo:</strong> Không có <code>--scriptpath</code> nào được xác định, nên sử dụng mặc định: <code>$1</code>.",
"config-using-server": "Sẽ sử dụng tên máy chủ “<nowiki>$1</nowiki>”.",
"config-using-uri": "Sẽ sử dụng URL máy chủ “<nowiki>$1$2</nowiki>”.",
+ "config-uploads-not-safe": "<strong>Cảnh báo:</strong> Thư mục tải lên mặc định của bạn, <code>$1</code>, đang có lỗ hỏng bảo mật, dễ bị khai thác bởi các đoạn mã thực thi xấu.\nMặc dù MediaWiki kiểm tra tất cả các tập tin tải lên để tránh nguy cơ bảo mật, chúng tôi đặc biệt khuyến cáo [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security đóng lỗ hỏng bảo mật này lại] trước khi kích hoạt tính năng tải lên.",
+ "config-no-cli-uploads-check": "<strong>Cảnh báo:</strong> Thư mục tải lên mặc định của bạn (<code>$1</code>) không được kiểm tra lỗ hỏng bảo mật dễ bị khai thác bởi các đoạn mã thực thi xấu trong quá trình cài đặt giao diện dòng lệnh.",
+ "config-brokenlibxml": "Hệ thống của bạn có kết hợp các phiên bản lỗi lầm của PHP và libxml2, điều này có thể gây ra tổn thương không nhìn thấy được đối với dữ liệu trong MediaWiki và các ứng dụng Web khác.\nHãy nâng cấp lên phiên bản libxml2 2.7.3 trở lên ([https://bugs.php.net/bug.php?id=45996 lỗi nộp PHP]).\nCài đặt bị hủy bỏ.",
+ "config-suhosin-max-value-length": "Suhosin được cài đặt và hạn chế tham số GET <code>length</code> (độ dài) không thể vượt quá $1 byte.\nThành phần ResourceLoader của MediaWiki sẽ khắc phục giới hạn này, nhưng điều này sẽ làm giảm hiệu suất.\nNếu có thể, bạn nên tăng <code>suhosin.get.max_value_length</code> lên 1024 trở lên trong <code>php.ini</code>, và đặt <code>$wgResourceLoaderMaxQueryLength</code> cùng giá trị trong <code>LocalSettings.php</code>.",
"config-db-type": "Kiểu cơ sở dữ liệu:",
"config-db-host": "Máy chủ của cơ sở dữ liệu:",
+ "config-db-host-help": "Nếu máy chủ cơ sở dữ liệu của bạn nằm trên máy chủ khác, hãy điền tên hoặc địa chỉ IP của máy chủ vào đây.\n\nNếu bạn đang dùng Web hosting chia sẻ, tài liệu của nhà cung cấp hosting của bạn sẽ có tên chính xác của máy chủ.\n\nNếu bạn đang cài đặt trên một máy chủ Windows và sử dụng MySQL, việc dùng “localhost” có thể không hợp với tên máy chủ. Nếu bị như vậy, hãy thử “127.0.0.1” tức địa chỉ IP địa phương.\n\nNếu bạn đang dùng PostgreSQL, hãy để trống mục này để kết nối với một ổ cắm Unix.",
"config-db-host-oracle": "TNS cơ sở dữ liệu:",
+ "config-db-host-oracle-help": "Nhập một [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Tên Kết nối Địa phương] hợp lệ; một tập tin tnsnames.ora phải được hiển thị đối với cài đặt này.<br />Nếu bạn đang sử dụng các thư viện trình khách 10g trở lên, bạn cũng có thể sử dụng phương pháp đặt tên [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
"config-db-wiki-settings": "Dữ liệu để nhận ra wiki này",
"config-db-name": "Tên cơ sở dữ liệu:",
+ "config-db-name-help": "Chọn một tên để chỉ thị wiki của bạn.\nKhông nên đưa dấu cách vào tên này.\n\nNếu bạn đang sử dụng Web hosting chia sẻ, nhà cung cấp hosting của bạn hoặc là sẽ cung cấp cho bạn một tên cơ sở dữ liệu cụ thể để sử dụng hoặc là sẽ cho phép bạn tạo ra các cơ sở dữ liệu thông qua một bảng điều khiển.",
"config-db-name-oracle": "Giản đồ cơ sở dữ liệu:",
+ "config-db-account-oracle-warn": "Có ba trường hợp được hỗ trợ để cài đặt Oracle làm cơ sở dữ liệu phía sau:\n\nNếu bạn muốn tạo tài khoản cơ sở dữ liệu trong quá trình cài đặt, xin vui lòng cung cấp một tài khoản với vai trò SYSDBA là tài khoản cơ sở dữ liệu để cài đặt và xác định định danh mong muốn cho tài khoản truy cập Web, nếu không bạn có thể tạo tài khoản truy cập Web thủ công và chỉ cung cấp tài khoản đó (nếu nó có các quyền yêu cầu để tạo ra các đối tượng giản đồ) hoặc cung cấp hai tài khoản riêng, một có quyền tạo ra và một bị hạn chế có quyền truy cập Web.\n\nMột kịch bản để tạo một tài khoản với quyền yêu cầu có sẵn trong thư mục cài đặt “maintenance/oracle/”. Hãy nhớ rằng việc sử dụng một tài khoản bị hạn chế sẽ vô hiệu hóa tất cả các khả năng bảo trì với tài khoản mặc định.",
"config-db-install-account": "Tài khoản người dùng để cài đặt",
"config-db-username": "Tên người dùng cơ sở dữ liệu:",
"config-db-password": "Mật khẩu cơ sở dữ liệu:",
+ "config-db-password-empty": "Xin nhập vào một mật khẩu cho người dùng cơ sở dữ liệu mới: $1. Tuy bạn có thể tạo một tài khoản người dùng mà không cần mật khẩu, nhưng khi đó sẽ không đảm bảo tính bảo mật cho bạn.",
"config-db-username-empty": "Bạn phải nhập một giá trị cho “{{int:config-db-username}}”",
+ "config-db-install-username": "Nhập tên người dùng để kết nối với cơ sở dữ liệu trong quá trình cài đặt.\nĐây không phải là tên người dùng của tài khoản MediaWiki; đây là tên người dùng cho cơ sở dữ liệu của bạn.",
+ "config-db-install-password": "Nhập mật khẩu để kết nối với cơ sở dữ liệu trong quá trình cài đặt.\nĐây không phải là mật khẩu của tài khoản MediaWiki; đây là mật khẩu cho cơ sở dữ liệu của bạn.",
+ "config-db-install-help": "Nhập tên người dùng và mật khẩu sẽ được sử dụng để kết nối với cơ sở dữ liệu trong quá trình cài đặt.",
+ "config-db-account-lock": "Sử dụng cùng tên người dùng và mật khẩu trong quá trình hoạt động bình thường",
"config-db-wiki-account": "Tài khoản người dùng để hoạt động bình thường",
+ "config-db-wiki-help": "Nhập tên người dùng và mật khẩu sẽ được sử dụng để kết nối với cơ sở dữ liệu trong quá trình hoạt động bình thường của wiki.\nNếu tài khoản không tồn tại và tài khoản cài đặt có đủ quyền hạn, tài khoản người dùng này sẽ được tạo ra với những đặc quyền tối thiểu cần thiết để vận hành wiki.",
"config-db-prefix": "Tiền tố bảng cơ sở dữ liệu:",
+ "config-db-prefix-help": "Nếu bạn cần phải chia sẻ một cơ sở dữ liệu chung với nhiều wiki, hay giữa MediaWiki và một ứng dụng Web, bạn có thể quyết định thêm một tiền tố cho tất cả các tên bảng để tránh xung đột.\nKhông sử dụng dấu cách.\n\nTrường này thường được bỏ trống.",
"config-db-charset": "Bảng mã cơ sở dữ liệu",
"config-charset-mysql5-binary": "MySQL 4.1/5.0 nhị phân",
"config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
"config-charset-mysql4": "MySQL 4.0 UTF-8 tương thích ngược",
+ "config-charset-help": "<strong>Cảnh báo:</strong> Nếu bạn sử dụng <strong>UTF-8 tương thích ngược</strong> trên MySQL 4.1+ và sau đó sao lưu cơ sở dữ liệu với <code>mysqldump</code>, việc này có thể phá hủy tất cả các ký tự không phải ASCII, không thể phục hồi sao lưu bị hỏng của bạn!\n\nTrong <strong>chế độ nhị phân</strong>, MediaWiki lưu trữ văn bản UTF-8 vào cơ sở dữ liệu trong các trường nhị phân.\nĐiều này hiệu quả hơn so với chế độ UTF-8 của MySQL và cho phép bạn sử dụng đầy đủ các ký tự của Unicode.\nTrong <strong>chế độ UTF-8</strong>, MySQL sẽ biết bảng mã của dữ liệu và có thể trình bày và chuyển đổi nó chính xác,\nnhưng nó sẽ không cho phép lưu các ký tự nằm cao hơn [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Mặt phẳng đa ngôn ngữ căn bản].",
"config-mysql-old": "Cần MySQL $1 trở lên; bạn có $2.",
"config-db-port": "Cổng cơ sở dữ liệu:",
"config-db-schema": "Giản đồ cho MediaWiki:",
+ "config-db-schema-help": "Giản đồ này thường làm việc tốt.\nChỉ thay đổi nó nếu bạn biết cần phải làm như vậy.",
"config-pg-test-error": "Không thể kết nối với cơ sở dữ liệu '''$1''': $2",
"config-sqlite-dir": "Thư mục dữ liệu SQLite:",
+ "config-sqlite-dir-help": "SQLite lưu tất cả các dữ liệu trong một tập tin duy nhất.\n\nThư mục mà bạn cung cấp phải cho phép máy chủ Web ghi vào khi cài đặt.\n\n<strong>Không</strong> nên làm cho nó truy cập được qua Web; đây là lý do chúng tôi không đặt nó vào cùng thư mục với các tập tin PHP của bạn.\n\nTrình cài đặt sẽ ghi một tập tin <code>.htaccess</code> đi kèm, nhưng nếu thất bại người nào đó có thể truy cập vào cơ sở dữ liệu thô của bạn.\nĐiều đó bao gồm dữ liệu người dùng thô (địa chỉ thư điện tử, mật khẩu được băm) cũng như các phiên bản bị xóa và dữ liệu bị hạn chế khác trên wiki.\n\nXem xét đặt cơ sở dữ liệu tại nơi nào khác hẳn, ví dụ trong <code>/var/lib/mediawiki/wiki_cua_ban</code>.",
"config-oracle-def-ts": "Không gian bảng mặc định:",
"config-oracle-temp-ts": "Không gian bảng tạm:",
"config-type-mysql": "MySQL (hoặc tương hợp)",
"config-type-mssql": "Microsoft SQL Server",
+ "config-support-info": "MediaWiki hỗ trợ các hệ thống cơ sở dữ liệu sau đây:\n\n$1\n\nNếu bạn không thấy hệ thống cơ sở dữ liệu mà bạn đang muốn sử dụng được liệt kê dưới đây, thì hãy theo chỉ dẫn được liên kết ở trên để kích hoạt tính năng hỗ trợ.",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] là mục tiêu chính cho MediaWiki và được hỗ trợ tốt nhất. MediaWiki cũng làm việc với [{{int:version-db-mariadb-url}} MariaDB] và [{{int:version-db-percona-url}} Percona Server], là những cơ sở dữ liệu tương thích với MySQL. ([http://www.php.net/manual/en/mysqli.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của MySQL])",
+ "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] là một hệ thống cơ sở dữ liệu mã nguồn mở phổ biến như là một thay thế cho MySQL. Có thể có một số lỗi nhỏ lâu đời, và nó không được khuyến cáo sử dụng trong môi trường sản xuất. ([http://www.php.net/manual/en/pgsql.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của PostgreSQL])",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] là một hệ thống cơ sở dữ liệu dung lượng nhẹ được hỗ trợ rất tốt. ([http://www.php.net/manual/en/pdo.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của SQLite], sử dụng PDO)",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] là một cơ sở dữ liệu doanh nghiệp thương mại. ([http://www.php.net/manual/en/oci8.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của OCI8])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] là một cơ sở dữ liệu doanh nghiệp thương mại cho Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của SQLSRV])",
"config-header-mysql": "Thiết lập MySQL",
"config-header-postgres": "Thiết lập PostgreSQL",
"config-header-sqlite": "Thiết lập SQLite",
@@ -82,50 +144,87 @@
"config-missing-db-name": "Bạn phải nhập một giá trị cho “{{int:config-db-name}}”",
"config-missing-db-host": "Bạn phải nhập một giá trị cho “{{int:config-db-host}}”",
"config-missing-db-server-oracle": "Bạn phải nhập một giá trị cho “{{int:config-db-host-oracle}}”",
+ "config-invalid-db-server-oracle": "Cơ sở dữ liệu TNS không hợp lệ “$1”.\nHoặc sử dụng “TNS Name” hoặc một chuỗi “Easy Connect” ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Phương pháp đặt tên Oracle]).",
+ "config-invalid-db-name": "Tên cơ sở dữ liệu không hợp lệ “$1”.\nChỉ sử dụng các chữ cái ASCII (a–z, A–Z), số (0–9), dấu gạch dưới (_) và dấu gạch ngang (-).",
+ "config-invalid-db-prefix": "Tiền tố cơ sở dữ liệu không hợp lệ “$1”.\nChỉ sử dụng các chữ cái ASCII (a–z, A–Z), số (0–9), dấu gạch dưới (_) và dấu gạch ngang (-).",
+ "config-connection-error": "$1.\n\nKiểm tra máy chủ, tên người dùng, và mật khẩu và thử lại lần nữa.",
"config-invalid-schema": "Giản đồ “$1” không hợp lệ cho MediaWiki.\nHãy chỉ sử dụng các chữ cái ASCII (a–z, A–Z), chữ số (0–9), và dấu gạch dưới (_).",
+ "config-db-sys-create-oracle": "Trình cài đặt chỉ hỗ trợ sử dụng một tài khoản SYSDBA để tạo một tài khoản mới.",
+ "config-db-sys-user-exists-oracle": "Tài khoản người dùng “$1” đã tồn tại. SYSDBA chỉ có thể được sử dụng để tạo một tài khoản mới!",
"config-postgres-old": "Cần PostgreSQL $1 trở lên; bạn có $2.",
"config-mssql-old": "Cần Microsoft SQL Server $1 trở lên. Bạn có $2.",
+ "config-sqlite-name-help": "Chọn một tên để chỉ thị wiki của bạn.\nKhông sử dụng các dấu cách ( ) hoặc dấu gạch nối (-).\nTên này sẽ được sử dụng cho tên tập tin dữ liệu SQLite.",
+ "config-sqlite-parent-unwritable-group": "Không thể tạo ra thư mục dữ liệu <code><nowiki>$1</nowiki></code>, bởi vì thư mục cha <code><nowiki>$2</nowiki></code> không cho phép máy chủ Web ghi vào.\n\nTrình cài đặt đã xác định người dùng mà máy chủ Web của bạn đang chạy.\n\nHãy thiết lập để thư mục <code><nowiki>$3</nowiki></code> có thể ghi được bởi nó để tiếp tục.\nTrong một hệ thống Unix/Linux làm theo như sau:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+ "config-sqlite-parent-unwritable-nogroup": "Không thể tạo ra thư mục dữ liệu <code><nowiki>$1</nowiki></code>, bởi vì thư mục cha <code><nowiki>$2</nowiki></code> không cho phép máy chủ Web ghi vào.\n\nTrình cài đặt không thể xác định người sử dụng mà máy chủ web của bạn đang chạy.\nThiết lập thư mục <code><nowiki>$3</nowiki></code> có thể ghi toàn cục bởi nó (và những người khác!) để tiếp tục.\nTrong một hệ thống Unix/Linux hãy đánh các dòng lệnh sau:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+ "config-sqlite-mkdir-error": "Lỗi tạo thư mục dữ liệu “$1”.\nKiểm tra vị trí lưu và thử lại.",
+ "config-sqlite-dir-unwritable": "Không thể ghi vào thư mục “$1”.\nThay đổi quyền hạn của nó để máy chủ Web có thể ghi vào, và thử lại.",
+ "config-sqlite-connection-error": "$1.\n\nKiểm tra thư mục dữ liệu và tên cơ sở dữ liệu dưới đây và thử lại.",
"config-sqlite-readonly": "Không thể ghi vào tập tin <code>$1</code>.",
"config-sqlite-cant-create-db": "Không thể tạo ra tập tin cơ sở dữ liệu <code>$1</code>.",
"config-sqlite-fts3-downgrade": "PHP thiếu sự hỗ trợ cho FTS3; đang giáng cấp các bảng",
"config-can-upgrade": "Cơ sở dữ liệu này có bảng MediaWiki.\nĐể nâng cấp các bảng đến MediaWiki $1, bấm <strong>Tiếp tục</strong>.",
+ "config-upgrade-done": "Nâng cấp đã hoàn thành.\n\nBạn có thể [$1 bắt đầu sử dụng wiki của bạn] ngay bây giờ.\n\nNếu bạn muốn tạo lại tập tin <code>LocalSettings.php</code> của bạn, bấm nút bên dưới.\nĐiều này <strong>không được khuyến khích</strong>, trừ khi bạn đang gặp vấn đề với wiki của bạn.",
+ "config-upgrade-done-no-regenerate": "Nâng cấp đã hoàn thành.\n\nBạn có thể [$1 bắt đầu sử dụng wiki của bạn] ngay bây giờ.",
"config-regenerate": "Tạo lại LocalSettings.php →",
"config-show-table-status": "Truy vấn <code>SHOW TABLE STATUS</code> bị thất bại!",
+ "config-unknown-collation": "<strong>Cảnh báo:</strong> Database đang sử dụng đối chiếu không được thừa nhận.",
"config-db-web-account": "Tài khoản cơ sở dữ liệu để truy cập Web",
+ "config-db-web-help": "Chọn tên người dùng và mật khẩu mà máy chủ Web sẽ sử dụng để kết nối đến máy chủ cơ sở dữ liệu trong quá trình hoạt động bình thường của wiki.",
"config-db-web-account-same": "Sử dụng lại tài khoản cài đặt",
"config-db-web-create": "Mở tài khoản nếu chưa tồn tại",
+ "config-db-web-no-create-privs": "Tài khoản mà bạn xác định để cài đặt không có đủ quyền để tạo một tài khoản. Tài khoản mà bạn chỉ ra ở đây phải thực sự tồn tại trước đó.",
"config-mysql-engine": "Máy lưu trữ:",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
+ "config-mysql-myisam-dep": "<strong>Cảnh báo:</strong> Bạn đã chọn MyISAM làm động cơ lưu trữ cho MySQL, điều này không được khuyến khích sử dụng với MediaWiki, bởi vì:\n* Nó ít hỗ trợ đồng thời do việc khóa bảng\n* Nó dễ bị lỗi hơn so với các động cơ khác\n* Kho mã nguồn của MediaWiki không phải khi nào cũng xử lý MyISAM như mong muốn\n\nNếu cài đặt MySQL của bạn hỗ trợ InnoDB, đặc biệt khuyến cáo bạn nên chọn để thay thế.\nNếu cài đặt MySQL của bạn không hỗ trợ InnoDB, có lẽ đã đến lúc để nâng cấp.",
+ "config-mysql-only-myisam-dep": "<strong>Cảnh báo:</strong> MyISAM chỉ là công cụ lưu trữ có sẵn cho MySQL trên máy tính này, và điều này không được khuyến khích sử dụng với MediaWiki, bởi vì:\n* Nó ít hỗ trợ đồng thời do việc khóa khóa\n* Nó là dễ bị hư hỏng hơn các engine khác\n* Codebase MediaWiki không phải khi nào cũng xử lý MyISAM như mong muốn\n\nCài đặt MySQL của bạn không hỗ trợ InnoDB, có lẽ đã đến lúc để nâng cấp.",
+ "config-mysql-engine-help": "<strong>InnoDB</strong> hầu như luôn là tùy chọn tốt nhất, vì nó có hỗ trợ đồng thời rất tốt.\n\n<strong>MyISAM</strong> có thể nhanh hơn trong chế độ một người dùng hoặc các cài đặt chỉ-đọc (read-only).\nCơ sở dữ liệu MyISAM có xu hướng thường xuyên bị hỏng hóc hơn so với cơ sở dữ liệu InnoDB.",
"config-mysql-charset": "Bảng mã cơ sở dữ liệu:",
"config-mysql-binary": "Nhị phân",
"config-mysql-utf8": "UTF-8",
+ "config-mysql-charset-help": "Trong <strong>chế độ nhị phân</strong>, MediaWiki lưu văn bản UTF-8 vào cơ sở dữ liệu trong các trường nhị phân.\nĐiều này hiệu quả hơn so với chế độ UTF-8 của MySQL, và cho phép bạn sử dụng đầy đủ các ký tự Unicode.\n\nTrong <strong>chế độ UTF-8 </strong>, MySQL sẽ biết những ký tự nào thiết lập dữ liệu của bạn, và có thể trình bày và chuyển đổi nó một cách thích hợp, nhưng nó sẽ không cho phép bạn lưu trữ các ký tự nằm trên [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
"config-mssql-auth": "Kiểu xác thực:",
+ "config-mssql-install-auth": "Chọn loại xác thực sẽ được sử dụng để kết nối với cơ sở dữ liệu trong quá trình cài đặt.\nNếu bạn chọn \"{{int:config-mssql-windowsauth}}\", thông tin của bất cứ người sử dụng nào mà máy chủ web đang chạy sẽ được sử dụng.",
+ "config-mssql-web-auth": "Chọn kiểu xác thực mà máy chủ web sẽ sử dụng để kết nối đến máy chủ cơ sở dữ liệu, trong quá trình hoạt động bình thường của wiki.\nNếu bạn chọn \"{{int:config-mssql-windowsauth}}\", thông tin của bất cứ người sử dụng nào mà máy chủ web đang hoạt động sẽ được sử dụng.",
"config-mssql-sqlauth": "Xác thực SQL Server",
"config-mssql-windowsauth": "Xác thực Windows",
"config-site-name": "Tên wiki:",
+ "config-site-name-help": "Điều này sẽ xuất hiện trên thanh tiêu đề của trình duyệt và ở những nơi khác.",
"config-site-name-blank": "Nhập tên của trang Web.",
"config-project-namespace": "Không gian tên dự án:",
"config-ns-generic": "Dự án",
"config-ns-site-name": "Cùng với tên wiki: $1",
"config-ns-other": "Khác (định rõ)",
"config-ns-other-default": "WikiTôi",
+ "config-project-namespace-help": "Ví dụ sau đây của Wikipedia, nhiều wiki tách các trang sách họ với các trang nội dung, trong một \"''' không gian tên dự án'''\".\nTất cả các tiêu đề trang trong không gian tên này bắt đầu với một tiền tố nhất định, bạn có thể xác định ở đây.\nThông thường, tiền tố này được bắt nguồn từ tên của wiki, nhưng nó không thể chứa các ký tự đặc biệt như \"#\" hoặc \":\".",
+ "config-ns-invalid": "Không gian tên cụ thể \"<nowiki>$1</nowiki>\" không hợp lệ.\nXác định một không gian tên dự án khác.",
+ "config-ns-conflict": "Không gian tên cụ thể \"<nowiki>$1</nowiki>\" xung đột với một không gian tên MediaWiki mặc định.\nXác định một không gian tên dự án khác.",
"config-admin-box": "Tài khoản bảo quản viên",
"config-admin-name": "Tên người dùng của bạn:",
"config-admin-password": "Mật khẩu:",
"config-admin-password-confirm": "Nhập lại mật khẩu:",
+ "config-admin-help": "Nhập tên người dùng ưa thích ở đây, ví dụ như \" Joe Bloggs\" .\nĐây là tên mà bạn sẽ sử dụng để đăng nhập vào wiki.",
"config-admin-name-blank": "Nhập tên người dùng của bảo quản viên.",
+ "config-admin-name-invalid": "Tên người dùng cụ thể \"<nowiki>$1</nowiki>\" không hợp lệ.\nChỉ định một tên người dùng khác.",
"config-admin-password-blank": "Nhập mật khẩu của tài khoản bảo quản viên.",
"config-admin-password-mismatch": "Bạn đã nhập hai mật khẩu không khớp với nhau.",
"config-admin-email": "Địa chỉ thư điện tử:",
+ "config-admin-email-help": "Nhập một địa chỉ email vào đây để cho phép bạn nhận được email từ những người dùng khác trên wiki, thiết lập lại mật khẩu của bạn, và sẽ được thông báo về những thay đổi trong các trang nằm trong danh sách theo dõi của bạn. Bạn có thể để trống trường này.",
+ "config-admin-error-user": "Lỗi nội bộ khi tạo một admin với tên <nowiki>$1</nowiki>\".",
+ "config-admin-error-password": "Lỗi nội bộ khi thiết lập một mật khẩu cho admin \" <nowiki>$1</nowiki>\": <pre>$2</pre>",
"config-admin-error-bademail": "Bạn đã nhập một địa chỉ thư điện tử không hợp lệ.",
"config-subscribe": "Theo dõi [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce danh sách thư thông báo phát hành].",
+ "config-subscribe-help": "thông báo an ninh.\nBạn nên đồng ý với nó và cập nhật bản cài đặt MediaWiki của bạn khi phiên bản mới xuất hiện.",
+ "config-subscribe-noemail": "Bạn đã cố gắng để đăng ký vào danh sách nhận thư thông báo phát hành mà không cung cấp một địa chỉ email nào cả.\nVui lòng cung cấp một địa chỉ email nếu bạn muốn đăng ký vào danh sách nhận thư.",
+ "config-almost-done": "Bạn gần như đã hoàn tất!\nBây giờ bạn có thể bỏ qua cấu hình còn lại và cài đặt wiki ngay bây giờ.",
"config-optional-continue": "Hỏi tôi về thêm chi tiết.",
"config-optional-skip": "Chán quá, cài đặt wiki rỗi.",
"config-profile": "Hồ sơ quyền người dùng:",
"config-profile-wiki": "Mở wiki",
"config-profile-no-anon": "Bắt buộc mở tài khoản",
+ "config-profile-fishbowl": "Chỉ những người dùng được phép",
"config-profile-private": "Wiki riêng tư",
+ "config-profile-help": "Wiki làm việc tốt nhất khi có càng nhiều người chỉnh sửa chúng nhất có thể.\nTrong MediaWiki, rất dễ dàng để xem lại các thay đổi gần đây, và quay trở lại tình trạng ban đầu trước bất kỳ thiệt hại nào được thực hiện bởi người dùng vô tình hoặc người dùng có dụng ý xấu.\n\nTuy nhiên, nhiều người thấy là MediaWiki rất hữu ích trong chừng mực nào đó, và đôi khi thật không phải dễ dàng để thuyết phục mọi người về những lợi ích theo cách thức mà wiki mang lại.\nVì vậy, bạn có sự lựa chọn của riêng bạn.\n\nMô hình <strong>{{int:config-profile-wiki}}</strong> cho phép bất cứ ai tham gia chỉnh sửa, thậm chí không cần đăng nhập.\nMột wiki với <strong>{{int:config-profile-no-anon}}</strong> cung cấp thêm trách nhiệm, nhưng có thể ngăn chặn những người đóng góp thông thường.\n\nKịch bản <strong>{{int:config-profile-fishbowl}}</strong> cho phép người dùng được duyệt chỉnh sửa, nhưng công chúng có thể xem các trang web, bao gồm cả lịch sử.\nMột <strong>{{int:config-profile-private}}</strong> chỉ cho phép được duyệt xem các trang, với cùng nhóm được phép chỉnh sửa.\n\nNhiều cấu hình quyền sử dụng phức tạp có sẵn sau khi cài đặt, xin xem [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights relevant manual entry].",
"config-license": "Bản quyền và giấy phép:",
"config-license-none": "Không hiển thị giấy phép ở chân trang",
"config-license-cc-by-sa": "Creative Commons Ghi công–Chia sẻ tương tự",
@@ -135,29 +234,54 @@
"config-license-gfdl": "Giấy pháp Tài liệu Tự do GNU 1.3 trở lên",
"config-license-pd": "Phạm vi công cộng",
"config-license-cc-choose": "Chọn một giấy phép Creative Commons tùy biến",
+ "config-license-help": "Nhiều wiki công khai phát hành tất cả các đóng góp theo một [http://freedomdefined.org/Definition/Vi?uselang=vi giấy phép tự do].\nĐiều này giúp tạo nên thái độ cộng đồng sở hữu và ủng hộ sự đóng góp lâu dài.\nNói chung, một wiki riêng tư hoặc của công ty không nhất thiết phải sử dụng một giấy phép tự do.\n\nNếu bạn muốn được phép sử dụng văn bản từ Wikipedia và muốn Wikipedia nhận được những văn bản được sao chép từ wiki của bạn, bạn nên chọn <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia từng sử dụng Giấy phép Tài liệu Tự do GNU.\nGFDL là một giấy phép hợp lệ nhưng khó hiểu trên thực tế.\nNội dung được phát hành theo GFDL cũng khó tái sử dụng.",
"config-email-settings": "Thiết lập thư điện tử",
"config-enable-email": "Cho phép gửi thư điện tử đi",
+ "config-enable-email-help": "Nếu bạn muốn email để làm việc, [http://www.php.net/manual/en/mail.configuration.php thiết lập mail của PHP] cần phải được cấu hình đúng.\nNếu bạn không muốn sử dụng bất kỳ tính năng email nào, bạn có thể vô hiệu chúng ở đây.",
"config-email-user": "Cho phép người dùng gửi thư điện tử cho người dùng khác",
+ "config-email-user-help": "Cho phép tất cả người dùng gửi email cho nhau, nếu họ đã kích hoạt nó trong cài đặt tùy chọn của họ.",
"config-email-usertalk": "Gửi thư thông báo về tin nhắn mới",
+ "config-email-usertalk-help": "Cho phép người dùng nhận được thông báo về các thay đổi trong trang thảo luận người dùng, nếu họ đã kích hoạt nó trong cài đặt tùy chọn của họ.",
"config-email-watchlist": "Gửi thư thông báo về bài theo dõi",
+ "config-email-watchlist-help": "Cho phép người dùng nhận được thông báo về các trang theo dõi của họ nếu họ đã kích hoạt nó trong ưu tiên của họ.",
"config-email-auth": "Xác minh qua thư điện tử",
+ "config-email-auth-help": "Nếu tùy chọn này được kích hoạt, người dùng phải xác nhận địa chỉ email của họ bằng cách sử dụng một liên kết được gửi tới cho họ bất cứ khi nào họ thiết lập hoặc thay đổi nó.\nChỉ có địa chỉ email được xác thực mới có thể nhận email từ những người dùng khác hoặc các email thông báo thay đổi.\nThiết lập tùy chọn này <strong>khuyến cáo sử dụng</strong> cho các wiki công cộng do khả năng các tính năng email dễ bị lạm dụng để gây hại.",
"config-email-sender": "Địa chỉ thư điện tử trả lại:",
+ "config-email-sender-help": "Nhập địa chỉ email để làm địa chỉ trở về trong mail gửi đi.\nĐây là nơi mà thư từ chối sẽ được gửi đi.\nNhiều máy chủ mail yêu cầu phải có ít nhất là phần tên miền để đảm bảo tính hợp lệ.",
"config-upload-settings": "Hình ảnh và tập tin tải lên",
"config-upload-enable": "Cho phép tải lên tập tin",
+ "config-upload-help": "Tập tin tải lên có khả năng làm lộ các nguy cơ bảo mật của máy chủ của bạn.\nĐể biết thêm thông tin, xin đọc [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security phần bảo mật] trong tài liệu hướng dẫn.\n\nĐể kích hoạt tính năng tải tập tin lên, thay đổi chế độ trên thư mục con <code>hình ảnh</code> trong thư mục gốc (root) của MediaWiki để máy chủ web có thể lưu dữ liệu vào đó.\nSau đó kích hoạt tùy chọn này.",
"config-upload-deleted": "Thư mục chứa các tập tin đã xóa:",
+ "config-upload-deleted-help": "Chọn một thư mục trong đó lưu trữ các tập tin đã bị xóa.\nLý tưởng nhất, thư mục này không nên được truy cập từ trang web.",
"config-logo": "URL biểu trưng:",
+ "config-logo-help": "Giao diện mặc định của MediaWiki bao gồm không gian cho một logo 135x160 điểm ảnh trên menu sidebar (thanh bên).\nTải lên một hình ảnh kích thước thích hợp, và nhập URL hình ảnh đó vào đây.\n\nBạn có thể sử dụng <code>$wgStylePath</code> hoặc <code>$wgScriptPath</code> nếu logo của bạn liên quan đường những đường dẫn ở đây.\n\nNếu bạn không muốn có một logo, hãy bỏ trống ô này.",
"config-instantcommons": "Kích hoạt Instant Commons",
+ "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] là một tính năng cho phép wiki sử dụng hình ảnh, âm thanh và tập tin đa phương tiện khác được tìm thấy trong trang web [//commons.wikimedia.org/ Wikimedia Commons].\nĐể làm được điều này, MediaWiki yêu cầu phải truy cập vào Internet.\n\nĐể biết thêm thông tin về tính năng này, trong đó có hướng dẫn về cách thiết lập cho các wiki khác với Wikimedia Commons, tham khảo thêm tại [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos tài liệu hướng dẫn].",
+ "config-cc-error": "Người chọn giấy phép Creative Commons đã không đưa ra kết quả nào.\nNhập tên giấy phép bằng tay.",
"config-cc-again": "Chọn một lần nữa…",
"config-cc-not-chosen": "Chọn một giấy phép Creative Commons và bấm “Tiếp tục”.",
"config-advanced-settings": "Thiết lập nâng cao",
"config-cache-options": "Thiết lập bộ nhớ đệm đối tượng:",
+ "config-cache-help": "Lưu vào bộ nhớ đệm đối tượng được sử dụng để cải thiện tốc độ của MediaWiki bằng cách lưu vào bộ nhớ đệm những dữ liệu thường xuyên sử dụng.\nCác trang web từ trung bình cho đến các trang web lớn rất được khuyến khích kích hoạt tính năng này, và các trang web nhỏ cũng sẽ nhìn thấy lợi ích tương tự.",
+ "config-cache-none": "Không lưu vào bộ nhớ đệm (không có chức năng nhiệm vụ sẽ được loại bỏ, nhưng tốc độ có thể bị ảnh hưởng trên các trang web wiki lớn hơn)",
"config-cache-accel": "Bộ nhớ đệm đối tượng PHP (APC, XCache, hoặc WinCache)",
"config-cache-memcached": "Sử dụng Memcached (cần thiết lập và cấu hình thêm)",
"config-memcached-servers": "Máy chủ Memcached:",
+ "config-memcached-help": "Danh sách các địa chỉ IP để sử dụng cho Memcached .\nNên xác định trên một dòng và chỉ định các cổng được sử dụng. Ví dụ:\n 127.0.0.1:11211\n 192.168.1.25:1234",
"config-memcache-needservers": "Bạn đã chọn Memcached là loại bộ nhớ đệm nhưng không định rõ máy chủ nào.",
"config-memcache-badip": "Bạn đã nhập một địa chỉ IP không hợp lệ cho Memcached: $1.",
+ "config-memcache-noport": "Bạn không thể chỉ định một cổng để sử dụng cho máy chủ Memcached:$1.\nNếu bạn không biết cổng nào, mặc định là 11211.",
"config-memcache-badport": "Số cổng Memcached phải từ $1 đến $2.",
"config-extensions": "Phần mở rộng",
+ "config-extensions-help": "Mở rộng được liệt kê ở trên đã được phát hiện trong thư mục <code>./extensions</code> của bạn.\n\nChúng có thể yêu cầu thêm cấu hình, nhưng bạn có thể kích hoạt chúng ngay bây giờ.",
+ "config-skins": "Giao diện",
+ "config-skins-help": "Các giao diện được liệt kê ở trên đã được phát hiện trong thư mục <code>./skins</code> của bạn. Bạn phải kích hoạt ít nhất một giao diện, và chọn nó làm mặc định.",
+ "config-skins-use-as-default": "Dùng giao diện này làm mặc định",
+ "config-skins-missing": "Không giao diện nào được tìm thấy; MediaWiki sẽ sử dụng một giao diện dự phòng cho đến khi bạn cài đặt giao diện thích hợp.",
+ "config-skins-must-enable-some": "Phải chọn ít nhất một giao diện để kích hoạt.",
+ "config-skins-must-enable-default": "Giao diện được chọn làm mặc định phải được kích hoạt.",
+ "config-install-alreadydone": "<strong>Cảnh báo:</strong> Bạn dường như đã cài đặt MediaWiki và đang cố gắng để cài đặt nó lại một lần nữa.\nXin hãy chuyển sang trang tiếp theo.",
+ "config-install-begin": "Bằng cách nhấn \"{{int:config-continue}}\", bạn sẽ bắt đầu cài đặt MediaWiki của mình.\nNếu bạn vẫn muốn thay đổi, nhấn \"{{int:config-back}}\".",
"config-install-step-done": "hoàn tất",
"config-install-step-failed": "thất bại",
"config-install-extensions": "Đang bao gồm phần mở rộng",
@@ -165,8 +289,11 @@
"config-install-schema": "Đang tạo giản đồ",
"config-install-pg-schema-not-exist": "Lược đồ PostgreSQL không tồn tại.",
"config-install-pg-schema-failed": "Thất bại khi tạo các bảng.\nHãy chắc chắn rằng người dùng “$1” có thể ghi vào giản đồ “$2”.",
+ "config-install-pg-commit": "Đang gửi các thay đổi",
"config-install-pg-plpgsql": "Tìm ngôn ngữ PL/pgSQL",
"config-pg-no-plpgsql": "Bạn cần phải cài đặt ngôn ngữ PL/pgSQL vào cơ sở dữ liệu $1",
+ "config-pg-no-create-privs": "Tài khoản bạn xác định để cài đặt không đủ quyền hạn để tạo một tài khoản.",
+ "config-pg-not-in-role": "Tài khoản bạn xác định cho người dùng web đã tồn tại.\nTài khoản bạn xác định cho việc cài đặt không phải là một superuser(người dùng cao cấp) và không phải là một thành viên của vai trò người sử dụng web, vì vậy nó không thể tạo ra các đối tượng thuộc sở hữu của người sử dụng web.\n\nMediaWiki hiện nay yêu cầu rằng các bảng được sở hữu bởi người sử dụng web. Hãy xác định một tên tài khoản web, hoặc click \"back\" (quay trở về) và chỉ định một người dùng cài đặt có đặc quyền thích hợp.",
"config-install-user": "Đang tạo người dùng trên cơ sở dữ liệu",
"config-install-user-alreadyexists": "Người dùng “$1” đã tồn tại",
"config-install-user-create-failed": "Thất bại khi tạo người dùng “$1”: $2",
@@ -181,15 +308,21 @@
"config-install-interwiki-exists": "'''Cảnh báo:''' Hình như đã có mục trong bảng liên wiki.\nĐã bỏ qua danh sách mặc định.",
"config-install-stats": "Đang khởi tạo các thống kê",
"config-install-keys": "Tạo ra các chìa khóa bí mật",
+ "config-insecure-keys": "<strong>Cảnh báo:</strong>{{PLURAL:$2|Một khóa an toàn|Khóa an toàn}} ($1) được tạo ra trong quá trình cài đặt {{PLURAL:$2|là}} không hoàn toàn an toàn. Hãy cân nhắc việc thay đổi {{PLURAL: $2|nó|chúng}} bằng tay.",
+ "config-install-updates": "Tránh các cập nhật không cần thiết",
+ "config-install-updates-failed": "<strong>Lỗi:</strong> Chèn phím cập nhật vào các bảng không thành công với các lỗi sau:1$",
"config-install-sysop": "Đang mở tài khoản người dùng bảo quản viên",
"config-install-subscribe-fail": "Không thể theo dõi mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL không được cài đặt và <code>allow_url_fopen</code> không có sẵn.",
"config-install-mainpage": "Đang tạo trang đầu với nội dung mặc định",
"config-install-extension-tables": "Đang tạo bảng cho các phần mở rộng được kích hoạt",
"config-install-mainpage-failed": "Không thể chèn trang đầu: $1",
+ "config-install-done": "<strong>Xin chúc mừng!</strong>\nBạn đã cài đặt thành công MediaWiki.\n\nBộ cài đặt đã tạo ra một file <code>LocalSettings.php</code>.\nFile này chứa tất cả các cấu hình của bạn.\n\nBạn sẽ cần phải tải nó về và đặt nó trong thư mục cài đặt wiki của bạn (cùng thư mục với index.php). Việc tải về có lẽ sẽ được khởi động tự động.\n\nNếu việc tải về không được cung cấp, hoặc nếu bạn hủy bỏ nó, bạn có thể khởi động lại tải về bằng cách nhấn vào liên kết dưới đây:\n\n$3\n\n<strong>Lưu ý:</strong> Nếu bạn không làm điều này ngay bây giờ, điều này sẽ tạo ra tập tin cấu hình sẽ không có giá trị cho bạn sau này nếu bạn thoát khỏi trình cài đặt mà không tải nó về.\n\nKhi đã việc tải về đã hoàn thành, bạn có thể <strong>[$2 truy cập trang wiki của bạn]</strong>.",
"config-download-localsettings": "Tải về <code>LocalSettings.php</code>",
"config-help": "Trợ giúp",
+ "config-help-tooltip": "nhấn chuột để mở rộng",
"config-nofile": "Không tìm thấy tập tin “$1”. Nó có phải bị xóa không?",
+ "config-extension-link": "Bạn có biết rằng wiki của bạn có hỗ trợ [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions mở rộng]?\n\nBạn có thể truy cập [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category phần mở rộng theo thể loại] hoặc [//www.mediawiki.org/wiki/Extension_Matrix Ma trận Mở rộng] để xem danh sách đầy đủ các phần mở rộng.",
"mainpagetext": "'''MediaWiki đã được cài đặt thành công.'''",
"mainpagedocfooter": "Xin đọc [//meta.wikimedia.org/wiki/Help:Contents Hướng dẫn sử dụng] để biết thêm thông tin về cách sử dụng phần mềm wiki.\n\n== Để bắt đầu ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Danh sách các thiết lập cấu hình]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Các câu hỏi thường gặp MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Danh sách gửi thư về việc phát hành MediaWiki]"
}
diff --git a/includes/installer/i18n/yi.json b/includes/installer/i18n/yi.json
index 47749b74..e1d2226c 100644
--- a/includes/installer/i18n/yi.json
+++ b/includes/installer/i18n/yi.json
@@ -2,14 +2,15 @@
"@metadata": {
"authors": [
"פוילישער",
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "Har-wradim"
]
},
"config-desc": "דער אינסטאלירער פאר מעדיעוויקי",
"config-title": "מעדיעוויקי $1 אינסטאלירונג",
"config-information": "אינפֿארמאציע",
"config-localsettings-badkey": "דעם שליסל וואס איר האט אײַנגעגעבן איז פאלש.",
- "config-session-error": "פֿעלער ביים אנהייבן סעסיע:$1",
+ "config-session-error": "פֿעלער ביים אָנהייבן סעסיע: $1",
"config-your-language": "אײַער שפראך:",
"config-your-language-help": "קלויבט א שפראך צו ניצן ביים אינסטאלירונג פראצעס.",
"config-wiki-language": "ווקי שפראך:",
diff --git a/includes/installer/i18n/zh-hans.json b/includes/installer/i18n/zh-hans.json
index f4dbdd78..cbd48f15 100644
--- a/includes/installer/i18n/zh-hans.json
+++ b/includes/installer/i18n/zh-hans.json
@@ -21,7 +21,8 @@
"Zjzengdongyang",
"Mywood",
"Impersonator 1",
- "Fengchao"
+ "Fengchao",
+ "Duolaimi"
]
},
"config-desc": "MediaWiki安装程序",
@@ -69,9 +70,9 @@
"config-env-hhvm": "HHVM $1已安装。",
"config-unicode-using-utf8": "使用Brion Vibber的utf8_normalize.so实现Unicode正常化。",
"config-unicode-using-intl": "使用[http://pecl.php.net/intl intl PECL扩展程序]标准化Unicode。",
- "config-unicode-pure-php-warning": "<strong>警告:</strong>因为尚未安装 [http://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 PHP 实现的方法。\n如果您运行着一个高流量的站点,请参阅 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode 正常化]一文。",
+ "config-unicode-pure-php-warning": "<strong>警告:</strong>因为尚未安装 [http://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 PHP 实现的方法。\n如果您运行着一个高流量的网站,请参阅 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode标准化]一文。",
"config-unicode-update-warning": "'''警告''':Unicode正常化封装器的已安装版本使用了旧版本的[http://site.icu-project.org/ ICU项目]库。如果您需要使用Unicode,请将其[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升级]。",
- "config-no-db": "找不到合适的数据库驱动!您需要为PHP安装数据库驱动。目前支持以下数据库:$1。如果您是自己编译的PHP,请重新配置他与数据库客户端将其启用,诸如,使用<code>./configure --with-mysqli</code>。如果您从Debian或Ubuntu包安装了PHP,之后您仍需要安装诸如<code>php5-mysql</code>包。",
+ "config-no-db": "无法找到合适的数据库驱动!您需要为PHP安装数据库驱动。目前支持以下数据库{{PLURAL:$2|类型}}:$1。\n\n如果您自己编译了PHP,请通过启用数据库客户端重新配置它,例如使用 <code>./configure --with-mysqli</code>。如果您从 Debian 或 Ubuntu 安装包安装了PHP,那么您也需要安装,例如 <code>php5-mysql</code> 安装包。",
"config-outdated-sqlite": "'''警告''':您已安装SQLite $1,但是它的版本低于最低要求版本$2。因此您无法选择SQLite。",
"config-no-fts3": "'''警告''':已编译的SQLite不包含[//sqlite.org/fts3.html FTS3模块],后台搜索功能将不可用。",
"config-register-globals-error": "<strong>错误:PHP<code>[http://php.net/register_globals register_globals]</code>选项被启用。必须禁用它才能继续安装。</strong>关于如何禁用,参见[https://www.mediawiki.org/wiki/register_globals mediawiki.org此页]。",
@@ -147,7 +148,7 @@
"config-type-mysql": "MySQL(或兼容程序)",
"config-type-mssql": "微软SQL服务器",
"config-support-info": "MediaWiki支持以下数据库系统:\n\n$1\n\n如果您在下面列出的数据库系统中没有找到您希望使用的系统,请根据上方链向的指引启用支持。",
- "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]是MediaWiki的首选数据库,对它的支持最为完备([http://www.php.net/manual/en/mysql.installation.php 如何将对MySQL的支持编译进PHP中])",
+ "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]是MediaWiki的首选数据库,对它的支持最为完备。MediaWiki也可以在[{{int:version-db-mariadb-url}} MariaDB]和[{{int:version-db-percona-url}} Percona Server]下工作,它们与MySQL兼容。([http://www.php.net/manual/en/mysql.installation.php 如何将对MySQL的支持编译进PHP中])",
"config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]是一种流行的开源数据库系统,可作为MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何将对PostgreSQL的支持编译进PHP中])。本程序中可能依然存在一些小而明显的错误,因此并不建议在生产环境中使用该数据库系统。",
"config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]是一种轻量级的数据库系统,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何将对SQLite的支持编译进PHP中],须使用PDO)",
"config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle]是一种商用企业级的数据库。([http://www.php.net/manual/en/oci8.installation.php 如何将对OCI8的支持编译进PHP中])",
@@ -244,7 +245,7 @@
"config-profile-help": "如果您允许尽量多的人编写wiki,网站上的内容会更加丰富。在MediaWiki中,您可以轻松地审查最近更改,并轻易回退掉新手或破坏者造成的损害。\n\n然而,许多人觉得让MediaWiki存在多种角色将更加好用;同时,要说服所有人都愿以wiki的方式作贡献并非一件易事。因此,您可以有以下选择:\n\n'''{{int:config-profile-wiki}}'''允许包括未登录用户在内的所有人编辑。'''{{int:config-profile-no-anon}}'''的wiki需要额外的注册流程,这有可能会阻碍随意贡献者。\n\n'''{{int:config-profile-fishbowl}}'''模式只允许获批准的用户编辑,但对公众开放页面浏览(包括历史记录)。'''{{int:config-profile-private}}'''则只允许获批准的用户浏览、编辑页面。\n\n安装完成后,您还可以对用户权限进行更多、更复杂的配置,参见[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 相关的使用手册]。",
"config-license": "版权和许可证:",
"config-license-none": "页脚无许可证",
- "config-license-cc-by-sa": "知识共享署名-相同方式共享",
+ "config-license-cc-by-sa": "知识共享“署名-相同方式共享”",
"config-license-cc-by": "知识共享署名",
"config-license-cc-by-nc-sa": "知识共享署名-非商业性使用-相同方式共享",
"config-license-cc-0": "知识共享Zero(公有领域)",
diff --git a/includes/installer/i18n/zh-hant.json b/includes/installer/i18n/zh-hant.json
index b860dc6f..4c7b0c50 100644
--- a/includes/installer/i18n/zh-hant.json
+++ b/includes/installer/i18n/zh-hant.json
@@ -59,11 +59,10 @@
"config-env-bad": "環境檢查已完成。\n您無法安裝 MediaWiki。",
"config-env-php": "PHP $1 已安裝。",
"config-env-hhvm": "HHVM $1 已安裝。",
- "config-unicode-using-utf8": "使用 Brion Vibber 的 utf8_normalize.so 做 Unicode 正規化。",
"config-unicode-using-intl": "使用 [http://pecl.php.net/intl intl PECL 擴充套件] 做 Unicode 正規化。",
"config-unicode-pure-php-warning": "<strong>警告:</strong> 無法使用 [http://pecl.php.net/intl intl PECL 擴充套件] 處理 Unicode 正規化,故回退使用純 PHP 實作的正規化程式,此方式處理速度較緩慢。\n\n如果您的網站瀏覽人次很高,您應先閱讀 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/zh Unicode 正規化]。",
"config-unicode-update-warning": "<strong>警告</strong>:目前安裝的 Unicode 正規化包裝程式使用了舊版 [http://site.icu-project.org/ ICU 計劃] 的程式庫。\n若您需要使用 Unicode,您應先進行 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升級]。",
- "config-no-db": "找不到合適的資料庫驅動程式!您需要安裝 PHP 資料庫驅動程式。\n目前支援以下類型的資料庫: $1 。\n\n如果您是自行編譯 PHP,您必須重新設定並開啟資料庫客戶端,例:使用 <code>./configure --with-mysqli</code> 指令參數。\n如果您是使用 Debian 或 Ubuntu 的套件安裝,您則需要額外安裝,例:<code>php5-mysql</code> 套件。",
+ "config-no-db": "找不到合適的資料庫驅動程式!您需要安裝 PHP 資料庫驅動程式。\n目前支援以下{{PLURAL:$2|類型|類型}}的資料庫: $1 。\n\n如果您是自行編譯 PHP,您必須重新設定並開啟資料庫客戶端,例:使用 <code>./configure --with-mysqli</code> 指令參數。\n如果您是使用 Debian 或 Ubuntu 的套件安裝 PHP ,您則需要額外安裝,例:<code>php5-mysql</code> 套件。",
"config-outdated-sqlite": "<strong>警告:</strong>您已安裝 SQLite $1,但是它的版本低於最低需求版本 $2。 因此您無法使用 SQLite。",
"config-no-fts3": "<strong>警告:</strong> SQLite 編譯時未包含 [//sqlite.org/fts3.html FTS3 模組],後台搜尋功能將無法使用。",
"config-register-globals-error": "<strong>錯誤:PHP 的 <code>[http://php.net/register_globals register_globals]</code> 選項已開啟。\n要繼續安裝程序必須關閉該選項。</strong>\n請參考 [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] 以取得操作說明。",
@@ -217,14 +216,14 @@
"config-admin-name-invalid": "指定的使用者名稱 \"<nowiki>$1</nowiki>\" 無效,請改用其他使用者名稱。",
"config-admin-password-blank": "輸入管理員帳號密碼。",
"config-admin-password-mismatch": "兩次輸入的密碼並不相同。",
- "config-admin-email": "電子郵件位址:",
+ "config-admin-email": "電子郵件地址:",
"config-admin-email-help": "在此輸入的電子郵件信箱可用來接收 Wiki 上其他使用者所傳送的訊息、重設您的密碼與通知監視清單中頁面更動。您可將此欄位留空。",
"config-admin-error-user": "建立管理員帳號 \"<nowiki>$1</nowiki>\" 時發送內部錯誤。",
"config-admin-error-password": "設定管理員 \"<nowiki>$1</nowiki>\" 的密碼時發送內部錯誤:<pre>$2</pre>",
- "config-admin-error-bademail": "您輸入了不正確的電子郵件位址。",
+ "config-admin-error-bademail": "您輸入了不正確的電子郵件地址。",
"config-subscribe": "訂閱 [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 發佈公告郵寄清單]。",
"config-subscribe-help": "這是一個用於發佈公告的低郵件量郵寄清單,內容包括重要的安全公告。\n您應該訂閱它並在 MediaWiki 發佈新版的時候更新系統。",
- "config-subscribe-noemail": "您正嘗試不填寫電子郵件位址訂閱發佈公告郵寄清單。 \n請如果您希望訂閱郵寄清單,請提供一個有效的電子郵件位址。",
+ "config-subscribe-noemail": "您正嘗試不填寫電子郵件地址訂閱發佈公告郵寄清單。 \n請如果您希望訂閱郵寄清單,請提供一個有效的電子郵件地址。",
"config-almost-done": "您快要完成了!\n您現在可以跳過其餘的設定項目並且立即安裝 Wiki。",
"config-optional-continue": "多問我一些問題吧。",
"config-optional-skip": "我已經不耐煩了,請趕緊安裝 Wiki。",
@@ -243,7 +242,7 @@
"config-license-gfdl": "GNU 自由文件授權條款 1.3 或更高版本",
"config-license-pd": "公共領域",
"config-license-cc-choose": "請選擇一個自訂的創作共用授權條款",
- "config-license-help": "許多開放式 Wiki 會以 [http://freedomdefined.org/Definition 自由授權條款] 的方式釋放出編者的所有貢獻,這有助於構建社群的所有權,並且能鼓勵長期貢獻。對於封閉式的 Wiki 或公司 Wiki 則是非必要的。\n\n如果您希望使用來自維基百科(Wikipedia)的內容,並希望維基百科能接受您的 Wiki 內容,請應選擇 <strong>{{int:config-license-cc-by-sa}}</strong> 授權條款。\n\n維基百科̽(Wikipedia)先前是使用 GNU 自由文件授權條款,\n但該授權條款的內容較難理解,因此較難再利用在該條款底下的內容。",
+ "config-license-help": "許多開放式 Wiki 會以 [http://freedomdefined.org/Definition 自由授權條款] 的方式釋放出編者的所有貢獻,這有助於構建社群的所有權,並且能鼓勵長期貢獻。對於封閉式的 Wiki 或公司 Wiki 則是非必要的。\n\n如果您希望使用來自維基百科(Wikipedia)的內容,並希望維基百科能接受您的 Wiki 內容,請應選擇 <strong>{{int:config-license-cc-by-sa}}</strong> 授權條款。\n\n維基百科(Wikipedia)先前是使用 GNU 自由文件授權條款,\n但該授權條款的內容較難理解,因此較難再利用在該條款底下的內容。",
"config-email-settings": "E-mail 設定",
"config-enable-email": "開啟外寄電子郵件",
"config-enable-email-help": "如果您要使用電子郵件功能,請正確設定 [http://www.php.net/manual/en/mail.configuration.php PHP 的郵件設定]。\n如果您不需要使用電子郵件功能,請在此處關閉。",
@@ -285,10 +284,10 @@
"config-extensions-help": "已在您的 <code>./extensions</code> 目錄中發現下列擴充套件。\n\n這些擴充套件可能需要做額外的設定,但您可以現在先開啟功能。",
"config-skins": "外觀",
"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-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}}\" 開始安裝 MediaWiki。\n若您還想要修改設定,請點選 \"{{int:config-back}}\"。",
"config-install-step-done": "完成",
@@ -318,6 +317,8 @@
"config-install-stats": "初始化統計資訊",
"config-install-keys": "產生秘密金鑰中",
"config-insecure-keys": "<strong>警告:</strong>在安裝過程中所產生的 $2 組安全金鑰($1)並不完全安全。請考慮手動更改。",
+ "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> 設定項目。",
@@ -327,7 +328,7 @@
"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-download-localsettings": "下載 <code>LocalSettings.php</code>",
"config-help": "說明",
- "config-help-tooltip": "按一下以展開",
+ "config-help-tooltip": "點選以展開",
"config-nofile": "查無檔案 \"$1\",是否已被刪除?",
"config-extension-link": "您是否了解您的 Wiki 支援 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 擴充套件]?\n\n\n您可以瀏覽 [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 擴充套件分類] 或 [//www.mediawiki.org/wiki/Extension_Matrix 擴充套件資料表] 以取得相關的資訊。",
"mainpagetext": "<strong>已成功安裝 MediaWiki。</strong>",
diff --git a/includes/interwiki/Interwiki.php b/includes/interwiki/Interwiki.php
index 55b25069..02fbb080 100644
--- a/includes/interwiki/Interwiki.php
+++ b/includes/interwiki/Interwiki.php
@@ -19,6 +19,8 @@
*
* @file
*/
+use \Cdb\Exception as CdbException;
+use \Cdb\Reader as CdbReader;
/**
* The interwiki class
@@ -192,7 +194,7 @@ class Interwiki {
global $wgMemc, $wgInterwikiExpiry;
$iwData = array();
- if ( !wfRunHooks( 'InterwikiLoadPrefix', array( $prefix, &$iwData ) ) ) {
+ if ( !Hooks::run( 'InterwikiLoadPrefix', array( $prefix, &$iwData ) ) ) {
return Interwiki::loadFromArray( $iwData );
}
diff --git a/includes/jobqueue/Job.php b/includes/jobqueue/Job.php
index ee3f2c2b..f8de0b5d 100644
--- a/includes/jobqueue/Job.php
+++ b/includes/jobqueue/Job.php
@@ -47,20 +47,12 @@ abstract class Job implements IJobSpecification {
/** @var string Text for error that occurred last */
protected $error;
- /*-------------------------------------------------------------------------
- * Abstract functions
- *------------------------------------------------------------------------*/
-
/**
* Run the job
* @return bool Success
*/
abstract public function run();
- /*-------------------------------------------------------------------------
- * Static functions
- *------------------------------------------------------------------------*/
-
/**
* Create the appropriate object to handle a specific job
*
@@ -81,80 +73,37 @@ abstract class Job implements IJobSpecification {
}
/**
+ * @param string $command
+ * @param Title $title
+ * @param array|bool $params Can not be === true
+ */
+ public function __construct( $command, $title, $params = false ) {
+ $this->command = $command;
+ $this->title = $title;
+ $this->params = $params;
+
+ // expensive jobs may set this to true
+ $this->removeDuplicates = false;
+ }
+
+ /**
* Batch-insert a group of jobs into the queue.
* This will be wrapped in a transaction with a forced commit.
*
* This may add duplicate at insert time, but they will be
* removed later on, when the first one is popped.
*
- * @param array $jobs Array of Job objects
+ * @param Job[] $jobs Array of Job objects
* @return bool
* @deprecated since 1.21
*/
public static function batchInsert( $jobs ) {
+ wfDeprecated( __METHOD__, '1.21' );
JobQueueGroup::singleton()->push( $jobs );
return true;
}
/**
- * Insert a group of jobs into the queue.
- *
- * Same as batchInsert() but does not commit and can thus
- * be rolled-back as part of a larger transaction. However,
- * large batches of jobs can cause slave lag.
- *
- * @param array $jobs Array of Job objects
- * @return bool
- * @deprecated since 1.21
- */
- public static function safeBatchInsert( $jobs ) {
- JobQueueGroup::singleton()->push( $jobs, JobQueue::QOS_ATOMIC );
- return true;
- }
-
- /**
- * Pop a job of a certain type. This tries less hard than pop() to
- * actually find a job; it may be adversely affected by concurrent job
- * runners.
- *
- * @param string $type
- * @return Job|bool Returns false if there are no jobs
- * @deprecated since 1.21
- */
- public static function pop_type( $type ) {
- return JobQueueGroup::singleton()->get( $type )->pop();
- }
-
- /**
- * Pop a job off the front of the queue.
- * This is subject to $wgJobTypesExcludedFromDefaultQueue.
- *
- * @return Job|bool False if there are no jobs
- * @deprecated since 1.21
- */
- public static function pop() {
- return JobQueueGroup::singleton()->pop();
- }
-
- /*-------------------------------------------------------------------------
- * Non-static functions
- *------------------------------------------------------------------------*/
-
- /**
- * @param string $command
- * @param Title $title
- * @param array|bool $params
- */
- public function __construct( $command, $title, $params = false ) {
- $this->command = $command;
- $this->title = $title;
- $this->params = $params;
-
- // expensive jobs may set this to true
- $this->removeDuplicates = false;
- }
-
- /**
* @return string
*/
public function getType() {
@@ -186,7 +135,15 @@ abstract class Job implements IJobSpecification {
}
/**
- * @return bool Whether only one of each identical set of jobs should be run
+ * Whether the queue should reject insertion of this job if a duplicate exists
+ *
+ * This can be used to avoid duplicated effort or combined with delayed jobs to
+ * coalesce updates into larger batches. Claimed jobs are never treated as
+ * duplicates of new jobs, and some queues may allow a few duplicates due to
+ * network partitions and fail-over. Thus, additional locking is needed to
+ * enforce mutual exclusion if this is really needed.
+ *
+ * @return bool
*/
public function ignoreDuplicates() {
return $this->removeDuplicates;
@@ -231,6 +188,8 @@ abstract class Job implements IJobSpecification {
unset( $info['params']['rootJobTimestamp'] );
// Likewise for jobs with different delay times
unset( $info['params']['jobReleaseTimestamp'] );
+ // Queues pack and hash this array, so normalize the order
+ ksort( $info['params'] );
}
return $info;
@@ -315,7 +274,7 @@ abstract class Job implements IJobSpecification {
break;
}
}
- if ( $filteredValue ) {
+ if ( $filteredValue && count( $filteredValue ) < 10 ) {
$value = FormatJson::encode( $filteredValue );
} else {
$value = "array(" . count( $value ) . ")";
@@ -328,16 +287,25 @@ abstract class Job implements IJobSpecification {
}
}
- if ( is_object( $this->title ) ) {
- $s = "{$this->command} " . $this->title->getPrefixedDBkey();
- if ( $paramString !== '' ) {
- $s .= ' ' . $paramString;
+ $metaString = '';
+ foreach ( $this->metadata as $key => $value ) {
+ if ( is_scalar( $value ) && mb_strlen( $value ) < 1024 ) {
+ $metaString .= ( $metaString ? ",$key=$value" : "$key=$value" );
}
+ }
- return $s;
- } else {
- return "{$this->command} $paramString";
+ $s = $this->command;
+ if ( is_object( $this->title ) ) {
+ $s .= " {$this->title->getPrefixedDBkey()}";
}
+ if ( $paramString != '' ) {
+ $s .= " $paramString";
+ }
+ if ( $metaString != '' ) {
+ $s .= " ($metaString)";
+ }
+
+ return $s;
}
protected function setLastError( $error ) {
diff --git a/includes/jobqueue/JobQueue.php b/includes/jobqueue/JobQueue.php
index c00d22e9..91fe86cf 100644
--- a/includes/jobqueue/JobQueue.php
+++ b/includes/jobqueue/JobQueue.php
@@ -44,11 +44,10 @@ abstract class JobQueue {
/** @var int Maximum number of times to try a job */
protected $maxTries;
- /** @var bool Allow delayed jobs */
- protected $checkDelay;
-
/** @var BagOStuff */
protected $dupCache;
+ /** @var JobQueueAggregator */
+ protected $aggr;
const QOS_ATOMIC = 1; // integer; "all-or-nothing" job insertions
@@ -71,11 +70,10 @@ abstract class JobQueue {
if ( !in_array( $this->order, $this->supportedOrders() ) ) {
throw new MWException( __CLASS__ . " does not support '{$this->order}' order." );
}
- $this->checkDelay = !empty( $params['checkDelay'] );
- if ( $this->checkDelay && !$this->supportsDelayedJobs() ) {
- throw new MWException( __CLASS__ . " does not support delayed jobs." );
- }
$this->dupCache = wfGetCache( CACHE_ANYTHING );
+ $this->aggr = isset( $params['aggregator'] )
+ ? $params['aggregator']
+ : new JobQueueAggregatorNull( array() );
}
/**
@@ -98,10 +96,6 @@ abstract class JobQueue {
* but not acknowledged as completed after this many seconds. Recycling
* of jobs simple means re-inserting them into the queue. Jobs can be
* attempted up to three times before being discarded.
- * - checkDelay : If supported, respect Job::getReleaseTimestamp() in the push functions.
- * This lets delayed jobs wait in a staging area until a given timestamp is
- * reached, at which point they will enter the queue. If this is not enabled
- * or not supported, an exception will be thrown on delayed job insertion.
*
* Queue classes should throw an exception if they do not support the options given.
*
@@ -144,14 +138,6 @@ abstract class JobQueue {
}
/**
- * @return bool Whether delayed jobs are enabled
- * @since 1.22
- */
- final public function delayedJobsEnabled() {
- return $this->checkDelay;
- }
-
- /**
* Get the allowed queue orders for configuration validation
*
* @return array Subset of (random, timestamp, fifo, undefined)
@@ -175,6 +161,14 @@ abstract class JobQueue {
}
/**
+ * @return bool Whether delayed jobs are enabled
+ * @since 1.22
+ */
+ final public function delayedJobsEnabled() {
+ return $this->supportsDelayedJobs();
+ }
+
+ /**
* Quickly check if the queue has no available (unacquired, non-delayed) jobs.
* Queue classes should use caching if they are any slower without memcached.
*
@@ -187,9 +181,7 @@ abstract class JobQueue {
* @throws JobQueueError
*/
final public function isEmpty() {
- wfProfileIn( __METHOD__ );
$res = $this->doIsEmpty();
- wfProfileOut( __METHOD__ );
return $res;
}
@@ -210,9 +202,7 @@ abstract class JobQueue {
* @throws JobQueueError
*/
final public function getSize() {
- wfProfileIn( __METHOD__ );
$res = $this->doGetSize();
- wfProfileOut( __METHOD__ );
return $res;
}
@@ -233,9 +223,7 @@ abstract class JobQueue {
* @throws JobQueueError
*/
final public function getAcquiredCount() {
- wfProfileIn( __METHOD__ );
$res = $this->doGetAcquiredCount();
- wfProfileOut( __METHOD__ );
return $res;
}
@@ -257,9 +245,7 @@ abstract class JobQueue {
* @since 1.22
*/
final public function getDelayedCount() {
- wfProfileIn( __METHOD__ );
$res = $this->doGetDelayedCount();
- wfProfileOut( __METHOD__ );
return $res;
}
@@ -282,9 +268,7 @@ abstract class JobQueue {
* @throws JobQueueError
*/
final public function getAbandonedCount() {
- wfProfileIn( __METHOD__ );
$res = $this->doGetAbandonedCount();
- wfProfileOut( __METHOD__ );
return $res;
}
@@ -308,7 +292,8 @@ abstract class JobQueue {
* @throws JobQueueError
*/
final public function push( $jobs, $flags = 0 ) {
- $this->batchPush( is_array( $jobs ) ? $jobs : array( $jobs ), $flags );
+ $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
+ $this->batchPush( $jobs, $flags );
}
/**
@@ -330,15 +315,14 @@ abstract class JobQueue {
if ( $job->getType() !== $this->type ) {
throw new MWException(
"Got '{$job->getType()}' job; expected a '{$this->type}' job." );
- } elseif ( $job->getReleaseTimestamp() && !$this->checkDelay ) {
+ } elseif ( $job->getReleaseTimestamp() && !$this->supportsDelayedJobs() ) {
throw new MWException(
"Got delayed '{$job->getType()}' job; delays are not supported." );
}
}
- wfProfileIn( __METHOD__ );
$this->doBatchPush( $jobs, $flags );
- wfProfileOut( __METHOD__ );
+ $this->aggr->notifyQueueNonEmpty( $this->wiki, $this->type );
}
/**
@@ -366,9 +350,11 @@ abstract class JobQueue {
throw new MWException( "Unrecognized job type '{$this->type}'." );
}
- wfProfileIn( __METHOD__ );
$job = $this->doPop();
- wfProfileOut( __METHOD__ );
+
+ if ( !$job ) {
+ $this->aggr->notifyQueueEmpty( $this->wiki, $this->type );
+ }
// Flag this job as an old duplicate based on its "root" job...
try {
@@ -376,7 +362,7 @@ abstract class JobQueue {
JobQueue::incrStats( 'job-pop-duplicate', $this->type, 1, $this->wiki );
$job = DuplicateJob::newFromJob( $job ); // convert to a no-op
}
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// don't lose jobs over this
}
@@ -403,9 +389,7 @@ abstract class JobQueue {
if ( $job->getType() !== $this->type ) {
throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
}
- wfProfileIn( __METHOD__ );
$this->doAck( $job );
- wfProfileOut( __METHOD__ );
}
/**
@@ -449,9 +433,7 @@ abstract class JobQueue {
if ( $job->getType() !== $this->type ) {
throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
}
- wfProfileIn( __METHOD__ );
$ok = $this->doDeduplicateRootJob( $job );
- wfProfileOut( __METHOD__ );
return $ok;
}
@@ -494,9 +476,7 @@ abstract class JobQueue {
if ( $job->getType() !== $this->type ) {
throw new MWException( "Got '{$job->getType()}' job; expected '{$this->type}'." );
}
- wfProfileIn( __METHOD__ );
$isDuplicate = $this->doIsRootJobOldDuplicate( $job );
- wfProfileOut( __METHOD__ );
return $isDuplicate;
}
@@ -538,9 +518,7 @@ abstract class JobQueue {
* @return void
*/
final public function delete() {
- wfProfileIn( __METHOD__ );
$this->doDelete();
- wfProfileOut( __METHOD__ );
}
/**
@@ -560,9 +538,7 @@ abstract class JobQueue {
* @throws JobQueueError
*/
final public function waitForBackups() {
- wfProfileIn( __METHOD__ );
$this->doWaitForBackups();
- wfProfileOut( __METHOD__ );
}
/**
@@ -607,9 +583,7 @@ abstract class JobQueue {
* @return void
*/
final public function flushCaches() {
- wfProfileIn( __METHOD__ );
$this->doFlushCaches();
- wfProfileOut( __METHOD__ );
}
/**
@@ -642,6 +616,17 @@ abstract class JobQueue {
}
/**
+ * Get an iterator to traverse over all abandoned jobs in this queue
+ *
+ * @return Iterator
+ * @throws JobQueueError
+ * @since 1.25
+ */
+ public function getAllAbandonedJobs() {
+ return new ArrayIterator( array() ); // not implemented
+ }
+
+ /**
* Do not use this function outside of JobQueue/JobQueueGroup
*
* @return string
@@ -661,7 +646,6 @@ abstract class JobQueue {
* @since 1.22
*/
final public function getSiblingQueuesWithJobs( array $types ) {
- $section = new ProfileSection( __METHOD__ );
return $this->doGetSiblingQueuesWithJobs( $types );
}
@@ -686,7 +670,6 @@ abstract class JobQueue {
* @since 1.22
*/
final public function getSiblingQueueSizes( array $types ) {
- $section = new ProfileSection( __METHOD__ );
return $this->doGetSiblingQueueSizes( $types );
}
diff --git a/includes/jobqueue/JobQueueDB.php b/includes/jobqueue/JobQueueDB.php
index 08873cc1..d5f47ffd 100644
--- a/includes/jobqueue/JobQueueDB.php
+++ b/includes/jobqueue/JobQueueDB.php
@@ -221,7 +221,7 @@ class JobQueueDB extends JobQueue {
}
$rowSet = array(); // (sha1 => job) map for jobs that are de-duplicated
- $rowList = array(); // list of jobs for jobs that are are not de-duplicated
+ $rowList = array(); // list of jobs for jobs that are not de-duplicated
foreach ( $jobs as $job ) {
$row = $this->insertFields( $job );
if ( $job->ignoreDuplicates() ) {
@@ -556,7 +556,7 @@ class JobQueueDB extends JobQueue {
* @return void
*/
protected function doWaitForBackups() {
- wfWaitForSlaves();
+ wfWaitForSlaves( false, $this->wiki, $this->cluster ?: false );
}
/**
@@ -686,7 +686,9 @@ class JobQueueDB extends JobQueue {
$affected = $dbw->affectedRows();
$count += $affected;
JobQueue::incrStats( 'job-recycle', $this->type, $affected, $this->wiki );
+ // The tasks recycled jobs or release delayed jobs into the queue
$this->cache->set( $this->getCacheKey( 'empty' ), 'false', self::CACHE_TTL_LONG );
+ $this->aggr->notifyQueueNonEmpty( $this->wiki, $this->type );
}
}
diff --git a/includes/jobqueue/JobQueueFederated.php b/includes/jobqueue/JobQueueFederated.php
index c4301eed..d985d449 100644
--- a/includes/jobqueue/JobQueueFederated.php
+++ b/includes/jobqueue/JobQueueFederated.php
@@ -49,20 +49,12 @@
class JobQueueFederated extends JobQueue {
/** @var HashRing */
protected $partitionRing;
- /** @var HashRing */
- protected $partitionPushRing;
/** @var array (partition name => JobQueue) reverse sorted by weight */
protected $partitionQueues = array();
- /** @var BagOStuff */
- protected $cache;
-
/** @var int Maximum number of partitions to try */
protected $maxPartitionsTry;
- const CACHE_TTL_SHORT = 30; // integer; seconds to cache info without re-validating
- const CACHE_TTL_LONG = 300; // integer; seconds to cache info that is kept up to date
-
/**
* @param array $params Possible keys:
* - sectionsByWiki : A map of wiki IDs to section names.
@@ -72,10 +64,8 @@ class JobQueueFederated extends JobQueue {
* have explicitly defined sections.
* - configByPartition : Map of queue partition names to configuration arrays.
* These configuration arrays are passed to JobQueue::factory().
- * The options set here are overriden by those passed to this
+ * The options set here are overridden by those passed to this
* the federated queue itself (e.g. 'order' and 'claimTTL').
- * - partitionsNoPush : List of partition names that can handle pop() but not push().
- * This can be used to migrate away from a certain partition.
* - maxPartitionsTry : Maximum number of times to attempt job insertion using
* different partition queues. This improves availability
* during failure, at the cost of added latency and somewhat
@@ -96,17 +86,10 @@ class JobQueueFederated extends JobQueue {
// Get the full partition map
$partitionMap = $params['partitionsBySection'][$section];
arsort( $partitionMap, SORT_NUMERIC );
- // Get the partitions jobs can actually be pushed to
- $partitionPushMap = $partitionMap;
- if ( isset( $params['partitionsNoPush'] ) ) {
- foreach ( $params['partitionsNoPush'] as $partition ) {
- unset( $partitionPushMap[$partition] );
- }
- }
// Get the config to pass to merge into each partition queue config
$baseConfig = $params;
foreach ( array( 'class', 'sectionsByWiki', 'maxPartitionsTry',
- 'partitionsBySection', 'configByPartition', 'partitionsNoPush' ) as $o
+ 'partitionsBySection', 'configByPartition', ) as $o
) {
unset( $baseConfig[$o] ); // partition queue doesn't care about this
}
@@ -120,14 +103,6 @@ class JobQueueFederated extends JobQueue {
}
// Ring of all partitions
$this->partitionRing = new HashRing( $partitionMap );
- // Get the ring of partitions to push jobs into
- if ( count( $partitionPushMap ) === count( $partitionMap ) ) {
- $this->partitionPushRing = clone $this->partitionRing; // faster
- } else {
- $this->partitionPushRing = new HashRing( $partitionPushMap );
- }
- // Aggregate cache some per-queue values if there are multiple partition queues
- $this->cache = count( $partitionMap ) > 1 ? wfGetMainCache() : new EmptyBagOStuff();
}
protected function supportedOrders() {
@@ -140,19 +115,16 @@ class JobQueueFederated extends JobQueue {
}
protected function supportsDelayedJobs() {
- return true; // defer checks to the partitions
+ foreach ( $this->partitionQueues as $queue ) {
+ if ( !$queue->supportsDelayedJobs() ) {
+ return false;
+ }
+ }
+
+ return true;
}
protected function doIsEmpty() {
- $key = $this->getCacheKey( 'empty' );
-
- $isEmpty = $this->cache->get( $key );
- if ( $isEmpty === 'true' ) {
- return true;
- } elseif ( $isEmpty === 'false' ) {
- return false;
- }
-
$empty = true;
$failed = 0;
foreach ( $this->partitionQueues as $queue ) {
@@ -160,12 +132,11 @@ class JobQueueFederated extends JobQueue {
$empty = $empty && $queue->doIsEmpty();
} catch ( JobQueueError $e ) {
++$failed;
- MWExceptionHandler::logException( $e );
+ $this->logException( $e );
}
}
$this->throwErrorIfAllPartitionsDown( $failed );
- $this->cache->add( $key, $empty ? 'true' : 'false', self::CACHE_TTL_LONG );
return $empty;
}
@@ -191,32 +162,24 @@ class JobQueueFederated extends JobQueue {
* @return int
*/
protected function getCrossPartitionSum( $type, $method ) {
- $key = $this->getCacheKey( $type );
-
- $count = $this->cache->get( $key );
- if ( $count !== false ) {
- return $count;
- }
-
+ $count = 0;
$failed = 0;
foreach ( $this->partitionQueues as $queue ) {
try {
$count += $queue->$method();
} catch ( JobQueueError $e ) {
++$failed;
- MWExceptionHandler::logException( $e );
+ $this->logException( $e );
}
}
$this->throwErrorIfAllPartitionsDown( $failed );
- $this->cache->set( $key, $count, self::CACHE_TTL_SHORT );
-
return $count;
}
protected function doBatchPush( array $jobs, $flags ) {
// Local ring variable that may be changed to point to a new ring on failure
- $partitionRing = $this->partitionPushRing;
+ $partitionRing = $this->partitionRing;
// Try to insert the jobs and update $partitionsTry on any failures.
// Retry to insert any remaning jobs again, ignoring the bad partitions.
$jobsLeft = $jobs;
@@ -277,12 +240,9 @@ class JobQueueFederated extends JobQueue {
$queue->doBatchPush( $jobBatch, $flags | self::QOS_ATOMIC );
} catch ( JobQueueError $e ) {
$ok = false;
- MWExceptionHandler::logException( $e );
+ $this->logException( $e );
}
- if ( $ok ) {
- $key = $this->getCacheKey( 'empty' );
- $this->cache->set( $key, 'false', self::CACHE_TTL_LONG );
- } else {
+ if ( !$ok ) {
if ( !$partitionRing->ejectFromLiveRing( $partition, 5 ) ) { // blacklist
throw new JobQueueError( "Could not insert job(s), no partitions available." );
}
@@ -299,12 +259,9 @@ class JobQueueFederated extends JobQueue {
$queue->doBatchPush( $jobBatch, $flags | self::QOS_ATOMIC );
} catch ( JobQueueError $e ) {
$ok = false;
- MWExceptionHandler::logException( $e );
+ $this->logException( $e );
}
- if ( $ok ) {
- $key = $this->getCacheKey( 'empty' );
- $this->cache->set( $key, 'false', self::CACHE_TTL_LONG );
- } else {
+ if ( !$ok ) {
if ( !$partitionRing->ejectFromLiveRing( $partition, 5 ) ) { // blacklist
throw new JobQueueError( "Could not insert job(s), no partitions available." );
}
@@ -331,7 +288,7 @@ class JobQueueFederated extends JobQueue {
$job = $queue->pop();
} catch ( JobQueueError $e ) {
++$failed;
- MWExceptionHandler::logException( $e );
+ $this->logException( $e );
$job = false;
}
if ( $job ) {
@@ -344,9 +301,6 @@ class JobQueueFederated extends JobQueue {
}
$this->throwErrorIfAllPartitionsDown( $failed );
- $key = $this->getCacheKey( 'empty' );
- $this->cache->set( $key, 'true', self::CACHE_TTL_LONG );
-
return false;
}
@@ -361,12 +315,12 @@ class JobQueueFederated extends JobQueue {
protected function doIsRootJobOldDuplicate( Job $job ) {
$params = $job->getRootJobParams();
$sigature = $params['rootJobSignature'];
- $partition = $this->partitionPushRing->getLiveLocation( $sigature );
+ $partition = $this->partitionRing->getLiveLocation( $sigature );
try {
return $this->partitionQueues[$partition]->doIsRootJobOldDuplicate( $job );
} catch ( JobQueueError $e ) {
- if ( $this->partitionPushRing->ejectFromLiveRing( $partition, 5 ) ) {
- $partition = $this->partitionPushRing->getLiveLocation( $sigature );
+ if ( $this->partitionRing->ejectFromLiveRing( $partition, 5 ) ) {
+ $partition = $this->partitionRing->getLiveLocation( $sigature );
return $this->partitionQueues[$partition]->doIsRootJobOldDuplicate( $job );
}
}
@@ -377,12 +331,12 @@ class JobQueueFederated extends JobQueue {
protected function doDeduplicateRootJob( Job $job ) {
$params = $job->getRootJobParams();
$sigature = $params['rootJobSignature'];
- $partition = $this->partitionPushRing->getLiveLocation( $sigature );
+ $partition = $this->partitionRing->getLiveLocation( $sigature );
try {
return $this->partitionQueues[$partition]->doDeduplicateRootJob( $job );
} catch ( JobQueueError $e ) {
- if ( $this->partitionPushRing->ejectFromLiveRing( $partition, 5 ) ) {
- $partition = $this->partitionPushRing->getLiveLocation( $sigature );
+ if ( $this->partitionRing->ejectFromLiveRing( $partition, 5 ) ) {
+ $partition = $this->partitionRing->getLiveLocation( $sigature );
return $this->partitionQueues[$partition]->doDeduplicateRootJob( $job );
}
}
@@ -398,7 +352,7 @@ class JobQueueFederated extends JobQueue {
$queue->doDelete();
} catch ( JobQueueError $e ) {
++$failed;
- MWExceptionHandler::logException( $e );
+ $this->logException( $e );
}
}
$this->throwErrorIfAllPartitionsDown( $failed );
@@ -413,7 +367,7 @@ class JobQueueFederated extends JobQueue {
$queue->waitForBackups();
} catch ( JobQueueError $e ) {
++$failed;
- MWExceptionHandler::logException( $e );
+ $this->logException( $e );
}
}
$this->throwErrorIfAllPartitionsDown( $failed );
@@ -440,10 +394,6 @@ class JobQueueFederated extends JobQueue {
'abandonedcount'
);
- foreach ( $types as $type ) {
- $this->cache->delete( $this->getCacheKey( $type ) );
- }
-
/** @var JobQueue $queue */
foreach ( $this->partitionQueues as $queue ) {
$queue->doFlushCaches();
@@ -472,6 +422,17 @@ class JobQueueFederated extends JobQueue {
return $iterator;
}
+ public function getAllAbandonedJobs() {
+ $iterator = new AppendIterator();
+
+ /** @var JobQueue $queue */
+ foreach ( $this->partitionQueues as $queue ) {
+ $iterator->append( $queue->getAllAbandonedJobs() );
+ }
+
+ return $iterator;
+ }
+
public function getCoalesceLocationInternal() {
return "JobQueueFederated:wiki:{$this->wiki}" .
sha1( serialize( array_keys( $this->partitionQueues ) ) );
@@ -495,7 +456,7 @@ class JobQueueFederated extends JobQueue {
}
} catch ( JobQueueError $e ) {
++$failed;
- MWExceptionHandler::logException( $e );
+ $this->logException( $e );
}
}
$this->throwErrorIfAllPartitionsDown( $failed );
@@ -519,7 +480,7 @@ class JobQueueFederated extends JobQueue {
}
} catch ( JobQueueError $e ) {
++$failed;
- MWExceptionHandler::logException( $e );
+ $this->logException( $e );
}
}
$this->throwErrorIfAllPartitionsDown( $failed );
@@ -527,6 +488,10 @@ class JobQueueFederated extends JobQueue {
return $result;
}
+ protected function logException( Exception $e ) {
+ wfDebugLog( 'JobQueueFederated', $e->getMessage() . "\n" . $e->getTraceAsString() );
+ }
+
/**
* Throw an error if no partitions available
*
@@ -546,14 +511,4 @@ class JobQueueFederated extends JobQueue {
$queue->setTestingPrefix( $key );
}
}
-
- /**
- * @param string $property
- * @return string
- */
- private function getCacheKey( $property ) {
- list( $db, $prefix ) = wfSplitWikiID( $this->wiki );
-
- return wfForeignMemcKey( $db, $prefix, 'jobqueue', $this->type, $property );
- }
}
diff --git a/includes/jobqueue/JobQueueGroup.php b/includes/jobqueue/JobQueueGroup.php
index 98a78c5e..ebd547a0 100644
--- a/includes/jobqueue/JobQueueGroup.php
+++ b/includes/jobqueue/JobQueueGroup.php
@@ -94,6 +94,7 @@ class JobQueueGroup {
} else {
$conf = $conf + $wgJobTypeConf['default'];
}
+ $conf['aggregator'] = JobQueueAggregator::singleton();
return JobQueue::factory( $conf );
}
@@ -104,7 +105,7 @@ class JobQueueGroup {
* This inserts the jobs into the queue specified by $wgJobTypeConf
* and updates the aggregate job queue information cache as needed.
*
- * @param Job|array $jobs A single Job or a list of Jobs
+ * @param Job|Job[] $jobs A single Job or a list of Jobs
* @throws MWException
* @return void
*/
@@ -125,7 +126,6 @@ class JobQueueGroup {
foreach ( $jobsByType as $type => $jobs ) {
$this->get( $type )->push( $jobs );
- JobQueueAggregator::singleton()->notifyQueueNonEmpty( $this->wiki, $type );
}
if ( $this->cache->has( 'queues-ready', 'list' ) ) {
@@ -153,9 +153,6 @@ class JobQueueGroup {
if ( is_string( $qtype ) ) { // specific job type
if ( !in_array( $qtype, $blacklist ) ) {
$job = $this->get( $qtype )->pop();
- if ( !$job ) {
- JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $qtype );
- }
}
} else { // any job in the "default" jobs types
if ( $flags & self::USE_CACHE ) {
@@ -179,7 +176,6 @@ class JobQueueGroup {
if ( $job ) { // found
break;
} else { // not found
- JobQueueAggregator::singleton()->notifyQueueEmpty( $this->wiki, $type );
$this->cache->clear( 'queues-ready' );
}
}
@@ -220,12 +216,10 @@ class JobQueueGroup {
public function waitForBackups() {
global $wgJobTypeConf;
- wfProfileIn( __METHOD__ );
// Try to avoid doing this more than once per queue storage medium
foreach ( $wgJobTypeConf as $type => $conf ) {
$this->get( $type )->waitForBackups();
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -383,10 +377,6 @@ class JobQueueGroup {
}
}
}
- // The tasks may have recycled jobs or release delayed jobs into the queue
- if ( isset( $tasksRun[$type] ) && !$queue->isEmpty() ) {
- JobQueueAggregator::singleton()->notifyQueueNonEmpty( $this->wiki, $type );
- }
}
if ( $count === 0 ) {
diff --git a/includes/jobqueue/JobQueueRedis.php b/includes/jobqueue/JobQueueRedis.php
index 3519eac8..6c823fb9 100644
--- a/includes/jobqueue/JobQueueRedis.php
+++ b/includes/jobqueue/JobQueueRedis.php
@@ -24,7 +24,7 @@
/**
* Class to handle job queues stored in Redis
*
- * This is faster, less resource intensive, queue that JobQueueDB.
+ * This is a faster and less resource-intensive job queue than JobQueueDB.
* All data for a queue using this class is placed into one redis server.
*
* There are eight main redis keys used to track jobs:
@@ -49,7 +49,7 @@
*
* This class requires Redis 2.6 as it makes use Lua scripts for fast atomic operations.
* Additionally, it should be noted that redis has different persistence modes, such
- * as rdb snapshots, journaling, and no persistent. Appropriate configuration should be
+ * as rdb snapshots, journaling, and no persistence. Appropriate configuration should be
* made on the servers based on what queues are using it and what tolerance they have.
*
* @ingroup JobQueue
@@ -64,8 +64,6 @@ class JobQueueRedis extends JobQueue {
protected $server;
/** @var string Compression method to use */
protected $compression;
- /** @var bool */
- protected $daemonized;
const MAX_AGE_PRUNE = 604800; // integer; seconds a job can live once claimed (7 days)
@@ -90,7 +88,11 @@ class JobQueueRedis extends JobQueue {
$this->server = $params['redisServer'];
$this->compression = isset( $params['compression'] ) ? $params['compression'] : 'none';
$this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
- $this->daemonized = !empty( $params['daemonized'] );
+ if ( empty( $params['daemonized'] ) ) {
+ throw new Exception(
+ "Non-daemonized mode is no longer supported. Please install the " .
+ "mediawiki/services/jobrunner service and update \$wgJobTypeConf as needed." );
+ }
}
protected function supportedOrders() {
@@ -134,9 +136,6 @@ class JobQueueRedis extends JobQueue {
* @throws JobQueueError
*/
protected function doGetAcquiredCount() {
- if ( $this->claimTTL <= 0 ) {
- return 0; // no acknowledgements
- }
$conn = $this->getConnection();
try {
$conn->multi( Redis::PIPELINE );
@@ -155,9 +154,6 @@ class JobQueueRedis extends JobQueue {
* @throws JobQueueError
*/
protected function doGetDelayedCount() {
- if ( !$this->checkDelay ) {
- return 0; // no delayed jobs
- }
$conn = $this->getConnection();
try {
return $conn->zSize( $this->getQueueKey( 'z-delayed' ) );
@@ -172,9 +168,6 @@ class JobQueueRedis extends JobQueue {
* @throws JobQueueError
*/
protected function doGetAbandonedCount() {
- if ( $this->claimTTL <= 0 ) {
- return 0; // no acknowledgements
- }
$conn = $this->getConnection();
try {
return $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
@@ -299,24 +292,10 @@ LUA;
protected function doPop() {
$job = false;
- // Push ready delayed jobs into the queue every 10 jobs to spread the load.
- // This is also done as a periodic task, but we don't want too much done at once.
- if ( $this->checkDelay && mt_rand( 0, 9 ) == 0 ) {
- $this->recyclePruneAndUndelayJobs();
- }
-
$conn = $this->getConnection();
try {
do {
- if ( $this->claimTTL > 0 ) {
- // Keep the claimed job list down for high-traffic queues
- if ( mt_rand( 0, 99 ) == 0 ) {
- $this->recyclePruneAndUndelayJobs();
- }
- $blob = $this->popAndAcquireBlob( $conn );
- } else {
- $blob = $this->popAndDeleteBlob( $conn );
- }
+ $blob = $this->popAndAcquireBlob( $conn );
if ( !is_string( $blob ) ) {
break; // no jobs; nothing to do
}
@@ -328,7 +307,7 @@ LUA;
continue;
}
- // If $item is invalid, recyclePruneAndUndelayJobs() will cleanup as needed
+ // If $item is invalid, the runner loop recyling will cleanup as needed
$job = $this->getJobFromFields( $item ); // may be false
} while ( !$job ); // job may be false if invalid
} catch ( RedisException $e ) {
@@ -343,39 +322,6 @@ LUA;
* @return array Serialized string or false
* @throws RedisException
*/
- protected function popAndDeleteBlob( RedisConnRef $conn ) {
- static $script =
-<<<LUA
- local kUnclaimed, kSha1ById, kIdBySha1, kData = unpack(KEYS)
- -- Pop an item off the queue
- local id = redis.call('rpop',kUnclaimed)
- if not id then return false end
- -- Get the job data and remove it
- local item = redis.call('hGet',kData,id)
- redis.call('hDel',kData,id)
- -- Allow new duplicates of this job
- local sha1 = redis.call('hGet',kSha1ById,id)
- if sha1 then redis.call('hDel',kIdBySha1,sha1) end
- redis.call('hDel',kSha1ById,id)
- -- Return the job data
- return item
-LUA;
- return $conn->luaEval( $script,
- array(
- $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
- $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
- $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
- $this->getQueueKey( 'h-data' ), # KEYS[4]
- ),
- 4 # number of first argument(s) that are keys
- );
- }
-
- /**
- * @param RedisConnRef $conn
- * @return array Serialized string or false
- * @throws RedisException
- */
protected function popAndAcquireBlob( RedisConnRef $conn ) {
static $script =
<<<LUA
@@ -416,36 +362,35 @@ LUA;
if ( !isset( $job->metadata['uuid'] ) ) {
throw new MWException( "Job of type '{$job->getType()}' has no UUID." );
}
- if ( $this->claimTTL > 0 ) {
- $conn = $this->getConnection();
- try {
- static $script =
+
+ $conn = $this->getConnection();
+ try {
+ static $script =
<<<LUA
- local kClaimed, kAttempts, kData = unpack(KEYS)
- -- Unmark the job as claimed
- redis.call('zRem',kClaimed,ARGV[1])
- redis.call('hDel',kAttempts,ARGV[1])
- -- Delete the job data itself
- return redis.call('hDel',kData,ARGV[1])
+ local kClaimed, kAttempts, kData = unpack(KEYS)
+ -- Unmark the job as claimed
+ redis.call('zRem',kClaimed,ARGV[1])
+ redis.call('hDel',kAttempts,ARGV[1])
+ -- Delete the job data itself
+ return redis.call('hDel',kData,ARGV[1])
LUA;
- $res = $conn->luaEval( $script,
- array(
- $this->getQueueKey( 'z-claimed' ), # KEYS[1]
- $this->getQueueKey( 'h-attempts' ), # KEYS[2]
- $this->getQueueKey( 'h-data' ), # KEYS[3]
- $job->metadata['uuid'] # ARGV[1]
- ),
- 3 # number of first argument(s) that are keys
- );
-
- if ( !$res ) {
- wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
-
- return false;
- }
- } catch ( RedisException $e ) {
- $this->throwRedisException( $conn, $e );
+ $res = $conn->luaEval( $script,
+ array(
+ $this->getQueueKey( 'z-claimed' ), # KEYS[1]
+ $this->getQueueKey( 'h-attempts' ), # KEYS[2]
+ $this->getQueueKey( 'h-data' ), # KEYS[3]
+ $job->metadata['uuid'] # ARGV[1]
+ ),
+ 3 # number of first argument(s) that are keys
+ );
+
+ if ( !$res ) {
+ wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
+
+ return false;
}
+ } catch ( RedisException $e ) {
+ $this->throwRedisException( $conn, $e );
}
return true;
@@ -571,6 +516,29 @@ LUA;
}
}
+ /**
+ * @see JobQueue::getAllAbandonedJobs()
+ * @return Iterator
+ */
+ public function getAllAbandonedJobs() {
+ $conn = $this->getConnection();
+ try {
+ $that = $this;
+
+ return new MappedIterator( // delayed jobs
+ $conn->zRange( $this->getQueueKey( 'z-abandoned' ), 0, -1 ),
+ function ( $uid ) use ( $that, $conn ) {
+ return $that->getJobFromUidInternal( $uid, $conn );
+ },
+ array( 'accept' => function ( $job ) {
+ return is_object( $job );
+ } )
+ );
+ } catch ( RedisException $e ) {
+ $this->throwRedisException( $conn, $e );
+ }
+ }
+
public function getCoalesceLocationInternal() {
return "RedisServer:" . $this->server;
}
@@ -630,115 +598,10 @@ LUA;
}
/**
- * Recycle or destroy any jobs that have been claimed for too long
- * and release any ready delayed jobs into the queue
- *
- * @return int Number of jobs recycled/deleted/undelayed
- * @throws MWException|JobQueueError
- */
- public function recyclePruneAndUndelayJobs() {
- $count = 0;
- // For each job item that can be retried, we need to add it back to the
- // main queue and remove it from the list of currenty claimed job items.
- // For those that cannot, they are marked as dead and kept around for
- // investigation and manual job restoration but are eventually deleted.
- $conn = $this->getConnection();
- try {
- $now = time();
- static $script =
-<<<LUA
- local kClaimed, kAttempts, kUnclaimed, kData, kAbandoned, kDelayed = unpack(KEYS)
- local released,abandoned,pruned,undelayed = 0,0,0,0
- -- Get all non-dead jobs that have an expired claim on them.
- -- The score for each item is the last claim timestamp (UNIX).
- local staleClaims = redis.call('zRangeByScore',kClaimed,0,ARGV[1])
- for k,id in ipairs(staleClaims) do
- local timestamp = redis.call('zScore',kClaimed,id)
- local attempts = redis.call('hGet',kAttempts,id)
- if attempts < ARGV[3] then
- -- Claim expired and retries left: re-enqueue the job
- redis.call('lPush',kUnclaimed,id)
- redis.call('hIncrBy',kAttempts,id,1)
- released = released + 1
- else
- -- Claim expired and no retries left: mark the job as dead
- redis.call('zAdd',kAbandoned,timestamp,id)
- abandoned = abandoned + 1
- end
- redis.call('zRem',kClaimed,id)
- end
- -- Get all of the dead jobs that have been marked as dead for too long.
- -- The score for each item is the last claim timestamp (UNIX).
- local deadClaims = redis.call('zRangeByScore',kAbandoned,0,ARGV[2])
- for k,id in ipairs(deadClaims) do
- -- Stale and out of retries: remove any traces of the job
- redis.call('zRem',kAbandoned,id)
- redis.call('hDel',kAttempts,id)
- redis.call('hDel',kData,id)
- pruned = pruned + 1
- end
- -- Get the list of ready delayed jobs, sorted by readiness (UNIX timestamp)
- local ids = redis.call('zRangeByScore',kDelayed,0,ARGV[4])
- -- Migrate the jobs from the "delayed" set to the "unclaimed" list
- for k,id in ipairs(ids) do
- redis.call('lPush',kUnclaimed,id)
- redis.call('zRem',kDelayed,id)
- end
- undelayed = #ids
- return {released,abandoned,pruned,undelayed}
-LUA;
- $res = $conn->luaEval( $script,
- array(
- $this->getQueueKey( 'z-claimed' ), # KEYS[1]
- $this->getQueueKey( 'h-attempts' ), # KEYS[2]
- $this->getQueueKey( 'l-unclaimed' ), # KEYS[3]
- $this->getQueueKey( 'h-data' ), # KEYS[4]
- $this->getQueueKey( 'z-abandoned' ), # KEYS[5]
- $this->getQueueKey( 'z-delayed' ), # KEYS[6]
- $now - $this->claimTTL, # ARGV[1]
- $now - self::MAX_AGE_PRUNE, # ARGV[2]
- $this->maxTries, # ARGV[3]
- $now # ARGV[4]
- ),
- 6 # number of first argument(s) that are keys
- );
- if ( $res ) {
- list( $released, $abandoned, $pruned, $undelayed ) = $res;
- $count += $released + $pruned + $undelayed;
- JobQueue::incrStats( 'job-recycle', $this->type, $released, $this->wiki );
- JobQueue::incrStats( 'job-abandon', $this->type, $abandoned, $this->wiki );
- JobQueue::incrStats( 'job-undelay', $this->type, $undelayed, $this->wiki );
- }
- } catch ( RedisException $e ) {
- $this->throwRedisException( $conn, $e );
- }
-
- return $count;
- }
-
- /**
* @return array
*/
protected function doGetPeriodicTasks() {
- if ( $this->daemonized ) {
- return array(); // managed in the runner loop
- }
- $periods = array( 3600 ); // standard cleanup (useful on config change)
- if ( $this->claimTTL > 0 ) {
- $periods[] = ceil( $this->claimTTL / 2 ); // avoid bad timing
- }
- if ( $this->checkDelay ) {
- $periods[] = 300; // 5 minutes
- }
- $period = min( $periods );
- $period = max( $period, 30 ); // sanity
-
- return array(
- 'recyclePruneAndUndelayJobs' => array(
- 'callback' => array( $this, 'recyclePruneAndUndelayJobs' ),
- 'period' => $period,
- )
- );
+ return array(); // managed in the runner loop
}
/**
diff --git a/includes/jobqueue/JobRunner.php b/includes/jobqueue/JobRunner.php
index 8cccedaf..b8c5d6cf 100644
--- a/includes/jobqueue/JobRunner.php
+++ b/includes/jobqueue/JobRunner.php
@@ -21,13 +21,17 @@
* @ingroup JobQueue
*/
+use MediaWiki\Logger\LoggerFactory;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+
/**
* Job queue runner utility methods
*
* @ingroup JobQueue
* @since 1.24
*/
-class JobRunner {
+class JobRunner implements LoggerAwareInterface {
/** @var callable|null Debug output handler */
protected $debug;
@@ -39,6 +43,28 @@ class JobRunner {
}
/**
+ * @var LoggerInterface $logger
+ */
+ protected $logger;
+
+ /**
+ * @param LoggerInterface $logger
+ */
+ public function setLogger( LoggerInterface $logger ) {
+ $this->logger = $logger;
+ }
+
+ /**
+ * @param LoggerInterface $logger
+ */
+ public function __construct( LoggerInterface $logger = null ) {
+ if ( $logger === null ) {
+ $logger = LoggerFactory::getInstance( 'runJobs' );
+ }
+ $this->setLogger( $logger );
+ }
+
+ /**
* Run jobs of the specified number/type for the specified time
*
* The response map has a 'job' field that lists status of each job, including:
@@ -62,6 +88,8 @@ class JobRunner {
* @return array Summary response that can easily be JSON serialized
*/
public function run( array $options ) {
+ global $wgJobClasses;
+
$response = array( 'jobs' => array(), 'reached' => 'none-ready' );
$type = isset( $options['type'] ) ? $options['type'] : false;
@@ -69,11 +97,31 @@ class JobRunner {
$maxTime = isset( $options['maxTime'] ) ? $options['maxTime'] : false;
$noThrottle = isset( $options['throttle'] ) && !$options['throttle'];
+ if ( $type !== false && !isset( $wgJobClasses[$type] ) ) {
+ $response['reached'] = 'none-possible';
+ return $response;
+ }
+
$group = JobQueueGroup::singleton();
// Handle any required periodic queue maintenance
$count = $group->executeReadyPeriodicTasks();
if ( $count > 0 ) {
- $this->runJobsLog( "Executed $count periodic queue task(s)." );
+ $msg = "Executed $count periodic queue task(s).";
+ $this->logger->debug( $msg );
+ $this->debugCallback( $msg );
+ }
+
+ // Bail out if in read-only mode
+ if ( wfReadOnly() ) {
+ $response['reached'] = 'read-only';
+ return $response;
+ }
+
+ // Bail out if there is too much DB lag
+ list( , $maxLag ) = wfGetLBFactory()->getMainLB( wfWikiID() )->getMaxLag();
+ if ( $maxLag >= 5 ) {
+ $response['reached'] = 'slave-lag-limit';
+ return $response;
}
// Flush any pending DB writes for sanity
@@ -87,8 +135,10 @@ class JobRunner {
$jobsRun = 0;
$timeMsTotal = 0;
$flags = JobQueueGroup::USE_CACHE;
+ $checkPeriod = 5.0; // seconds
+ $checkPhase = mt_rand( 0, 1000 * $checkPeriod ) / 1000; // avoid stampedes
$startTime = microtime( true ); // time since jobs started running
- $lastTime = microtime( true ); // time since last slave check
+ $lastTime = microtime( true ) - $checkPhase; // time since last slave check
do {
// Sync the persistent backoffs with concurrent runners
$backoffs = $this->syncBackoffDeltas( $backoffs, $backoffDeltas, $wait );
@@ -117,24 +167,24 @@ class JobRunner {
$backoffs = $this->syncBackoffDeltas( $backoffs, $backoffDeltas, $wait );
}
- $this->runJobsLog( $job->toString() . " STARTING" );
+ $msg = $job->toString() . " STARTING";
+ $this->logger->info( $msg );
+ $this->debugCallback( $msg );
// Run the job...
- wfProfileIn( __METHOD__ . '-' . get_class( $job ) );
$jobStartTime = microtime( true );
try {
++$jobsRun;
$status = $job->run();
$error = $job->getLastError();
wfGetLBFactory()->commitMasterChanges();
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
MWExceptionHandler::rollbackMasterChangesAndLog( $e );
$status = false;
$error = get_class( $e ) . ': ' . $e->getMessage();
MWExceptionHandler::logException( $e );
}
$timeMs = intval( ( microtime( true ) - $jobStartTime ) * 1000 );
- wfProfileOut( __METHOD__ . '-' . get_class( $job ) );
$timeMsTotal += $timeMs;
// Mark the job as done on success or when the job cannot be retried
@@ -151,9 +201,13 @@ class JobRunner {
}
if ( $status === false ) {
- $this->runJobsLog( $job->toString() . " t=$timeMs error={$error}" );
+ $msg = $job->toString() . " t=$timeMs error={$error}";
+ $this->logger->error( $msg );
+ $this->debugCallback( $msg );
} else {
- $this->runJobsLog( $job->toString() . " t=$timeMs good" );
+ $msg = $job->toString() . " t=$timeMs good";
+ $this->logger->info( $msg );
+ $this->debugCallback( $msg );
}
$response['jobs'][] = array(
@@ -172,10 +226,15 @@ class JobRunner {
break;
}
- // Don't let any of the main DB slaves get backed up
+ // Don't let any of the main DB slaves get backed up.
+ // This only waits for so long before exiting and letting
+ // other wikis in the farm (on different masters) get a chance.
$timePassed = microtime( true ) - $lastTime;
if ( $timePassed >= 5 || $timePassed < 0 ) {
- wfWaitForSlaves( $lastTime );
+ if ( !wfWaitForSlaves( $lastTime, false, '*', 5 ) ) {
+ $response['reached'] = 'slave-lag-limit';
+ break;
+ }
$lastTime = microtime( true );
}
// Don't let any queue slaves/backups fall behind
@@ -239,7 +298,6 @@ class JobRunner {
* @return array Map of (job type => backoff expiry timestamp)
*/
private function loadBackoffs( array $backoffs, $mode = 'wait' ) {
- $section = new ProfileSection( __METHOD__ );
$file = wfTempDir() . '/mw-runJobs-backoffs.json';
if ( is_file( $file ) ) {
@@ -278,7 +336,6 @@ class JobRunner {
* @return array The new backoffs account for $backoffs and the latest file data
*/
private function syncBackoffDeltas( array $backoffs, array &$deltas, $mode = 'wait' ) {
- $section = new ProfileSection( __METHOD__ );
if ( !$deltas ) {
return $this->loadBackoffs( $backoffs, $mode );
@@ -341,10 +398,9 @@ class JobRunner {
* Log the job message
* @param string $msg The message to log
*/
- private function runJobsLog( $msg ) {
+ private function debugCallback( $msg ) {
if ( $this->debug ) {
call_user_func_array( $this->debug, array( wfTimestamp( TS_DB ) . " $msg\n" ) );
}
- wfDebugLog( 'runJobs', $msg );
}
}
diff --git a/includes/jobqueue/JobSpecification.php b/includes/jobqueue/JobSpecification.php
index 9fa7747f..42d2a39b 100644
--- a/includes/jobqueue/JobSpecification.php
+++ b/includes/jobqueue/JobSpecification.php
@@ -91,8 +91,8 @@ class JobSpecification implements IJobSpecification {
/** @var Title */
protected $title;
- /** @var bool Expensive jobs may set this to true */
- protected $ignoreDuplicates;
+ /** @var array */
+ protected $opts;
/**
* @param string $type
@@ -104,11 +104,12 @@ class JobSpecification implements IJobSpecification {
$type, array $params, array $opts = array(), Title $title = null
) {
$this->validateParams( $params );
+ $this->validateParams( $opts );
$this->type = $type;
$this->params = $params;
$this->title = $title ?: Title::newMainPage();
- $this->ignoreDuplicates = !empty( $opts['removeDuplicates'] );
+ $this->opts = $opts;
}
/**
@@ -158,7 +159,7 @@ class JobSpecification implements IJobSpecification {
* @return bool Whether only one of each identical set of jobs should be run
*/
public function ignoreDuplicates() {
- return $this->ignoreDuplicates;
+ return !empty( $this->opts['removeDuplicates'] );
}
/**
@@ -186,4 +187,31 @@ class JobSpecification implements IJobSpecification {
return $info;
}
+
+ /**
+ * @return array Field/value map that can immediately be serialized
+ * @since 1.25
+ */
+ public function toSerializableArray() {
+ return array(
+ 'type' => $this->type,
+ 'params' => $this->params,
+ 'opts' => $this->opts,
+ 'title' => array(
+ 'ns' => $this->title->getNamespace(),
+ 'key' => $this->title->getDbKey()
+ )
+ );
+ }
+
+ /**
+ * @param array $map Field/value map
+ * @return JobSpecification
+ * @since 1.25
+ */
+ public static function newFromArray( array $map ) {
+ $title = Title::makeTitle( $map['title']['ns'], $map['title']['key'] );
+
+ return new self( $map['type'], $map['params'], $map['opts'], $title );
+ }
}
diff --git a/includes/jobqueue/aggregator/JobQueueAggregator.php b/includes/jobqueue/aggregator/JobQueueAggregator.php
index 8600eed9..febc277a 100644
--- a/includes/jobqueue/aggregator/JobQueueAggregator.php
+++ b/includes/jobqueue/aggregator/JobQueueAggregator.php
@@ -34,7 +34,7 @@ abstract class JobQueueAggregator {
/**
* @param array $params
*/
- protected function __construct( array $params ) {
+ public function __construct( array $params ) {
}
/**
@@ -73,9 +73,7 @@ abstract class JobQueueAggregator {
* @return bool Success
*/
final public function notifyQueueEmpty( $wiki, $type ) {
- wfProfileIn( __METHOD__ );
$ok = $this->doNotifyQueueEmpty( $wiki, $type );
- wfProfileOut( __METHOD__ );
return $ok;
}
@@ -93,9 +91,7 @@ abstract class JobQueueAggregator {
* @return bool Success
*/
final public function notifyQueueNonEmpty( $wiki, $type ) {
- wfProfileIn( __METHOD__ );
$ok = $this->doNotifyQueueNonEmpty( $wiki, $type );
- wfProfileOut( __METHOD__ );
return $ok;
}
@@ -111,9 +107,7 @@ abstract class JobQueueAggregator {
* @return array (job type => (list of wiki IDs))
*/
final public function getAllReadyWikiQueues() {
- wfProfileIn( __METHOD__ );
$res = $this->doGetAllReadyWikiQueues();
- wfProfileOut( __METHOD__ );
return $res;
}
@@ -129,9 +123,7 @@ abstract class JobQueueAggregator {
* @return bool Success
*/
final public function purge() {
- wfProfileIn( __METHOD__ );
$res = $this->doPurge();
- wfProfileOut( __METHOD__ );
return $res;
}
@@ -160,3 +152,21 @@ abstract class JobQueueAggregator {
return $pendingDBs;
}
}
+
+class JobQueueAggregatorNull extends JobQueueAggregator {
+ protected function doNotifyQueueEmpty( $wiki, $type ) {
+ return true;
+ }
+
+ protected function doNotifyQueueNonEmpty( $wiki, $type ) {
+ return true;
+ }
+
+ protected function doGetAllReadyWikiQueues() {
+ return array();
+ }
+
+ protected function doPurge() {
+ return true;
+ }
+} \ No newline at end of file
diff --git a/includes/jobqueue/aggregator/JobQueueAggregatorMemc.php b/includes/jobqueue/aggregator/JobQueueAggregatorMemc.php
deleted file mode 100644
index ae266ef3..00000000
--- a/includes/jobqueue/aggregator/JobQueueAggregatorMemc.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-/**
- * Job queue aggregator code that uses BagOStuff.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Aaron Schulz
- */
-
-/**
- * Class to handle tracking information about all queues using BagOStuff
- *
- * @ingroup JobQueue
- * @since 1.21
- */
-class JobQueueAggregatorMemc extends JobQueueAggregator {
- /** @var BagOStuff */
- protected $cache;
-
- protected $cacheTTL; // integer; seconds
-
- /**
- * @param array $params Possible keys:
- * - objectCache : Name of an object cache registered in $wgObjectCaches.
- * This defaults to the one specified by $wgMainCacheType.
- * - cacheTTL : Seconds to cache the aggregate data before regenerating.
- */
- protected function __construct( array $params ) {
- parent::__construct( $params );
- $this->cache = isset( $params['objectCache'] )
- ? wfGetCache( $params['objectCache'] )
- : wfGetMainCache();
- $this->cacheTTL = isset( $params['cacheTTL'] ) ? $params['cacheTTL'] : 180; // 3 min
- }
-
- /**
- * @see JobQueueAggregator::doNotifyQueueEmpty()
- */
- protected function doNotifyQueueEmpty( $wiki, $type ) {
- $key = $this->getReadyQueueCacheKey();
- // Delist the queue from the "ready queue" list
- if ( $this->cache->add( "$key:lock", 1, 60 ) ) { // lock
- $curInfo = $this->cache->get( $key );
- if ( is_array( $curInfo ) && isset( $curInfo['pendingDBs'][$type] ) ) {
- if ( in_array( $wiki, $curInfo['pendingDBs'][$type] ) ) {
- $curInfo['pendingDBs'][$type] = array_diff(
- $curInfo['pendingDBs'][$type], array( $wiki ) );
- $this->cache->set( $key, $curInfo );
- }
- }
- $this->cache->delete( "$key:lock" ); // unlock
- }
-
- return true;
- }
-
- /**
- * @see JobQueueAggregator::doNotifyQueueNonEmpty()
- */
- protected function doNotifyQueueNonEmpty( $wiki, $type ) {
- return true; // updated periodically
- }
-
- /**
- * @see JobQueueAggregator::doAllGetReadyWikiQueues()
- */
- protected function doGetAllReadyWikiQueues() {
- $key = $this->getReadyQueueCacheKey();
- // If the cache entry wasn't present, is stale, or in .1% of cases otherwise,
- // regenerate the cache. Use any available stale cache if another process is
- // currently regenerating the pending DB information.
- $pendingDbInfo = $this->cache->get( $key );
- if ( !is_array( $pendingDbInfo )
- || ( time() - $pendingDbInfo['timestamp'] ) > $this->cacheTTL
- || mt_rand( 0, 999 ) == 0
- ) {
- if ( $this->cache->add( "$key:rebuild", 1, 1800 ) ) { // lock
- $pendingDbInfo = array(
- 'pendingDBs' => $this->findPendingWikiQueues(),
- 'timestamp' => time()
- );
- for ( $attempts = 1; $attempts <= 25; ++$attempts ) {
- if ( $this->cache->add( "$key:lock", 1, 60 ) ) { // lock
- $this->cache->set( $key, $pendingDbInfo );
- $this->cache->delete( "$key:lock" ); // unlock
- break;
- }
- }
- $this->cache->delete( "$key:rebuild" ); // unlock
- }
- }
-
- return is_array( $pendingDbInfo )
- ? $pendingDbInfo['pendingDBs']
- : array(); // cache is both empty and locked
- }
-
- /**
- * @see JobQueueAggregator::doPurge()
- */
- protected function doPurge() {
- return $this->cache->delete( $this->getReadyQueueCacheKey() );
- }
-
- /**
- * @return string
- */
- private function getReadyQueueCacheKey() {
- return "jobqueue:aggregator:ready-queues:v1"; // global
- }
-}
diff --git a/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php b/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php
index db9e764c..847dd6f4 100644
--- a/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php
+++ b/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php
@@ -44,7 +44,7 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
* If a hostname is specified but no port, the standard port number
* 6379 will be used. Required.
*/
- protected function __construct( array $params ) {
+ public function __construct( array $params ) {
parent::__construct( $params );
$this->servers = isset( $params['redisServers'] )
? $params['redisServers']
diff --git a/includes/jobqueue/jobs/AssembleUploadChunksJob.php b/includes/jobqueue/jobs/AssembleUploadChunksJob.php
index 9e9bda6f..b7f09e77 100644
--- a/includes/jobqueue/jobs/AssembleUploadChunksJob.php
+++ b/includes/jobqueue/jobs/AssembleUploadChunksJob.php
@@ -35,26 +35,16 @@ class AssembleUploadChunksJob extends Job {
public function run() {
$scope = RequestContext::importScopedSession( $this->params['session'] );
$context = RequestContext::getMain();
+ $user = $context->getUser();
try {
- $user = $context->getUser();
if ( !$user->isLoggedIn() ) {
$this->setLastError( "Could not load the author user from session." );
return false;
}
- if ( count( $_SESSION ) === 0 ) {
- // Empty session probably indicates that we didn't associate
- // with the session correctly. Note that being able to load
- // the user does not necessarily mean the session was loaded.
- // Most likely cause by suhosin.session.encrypt = On.
- $this->setLastError( "Error associating with user session. " .
- "Try setting suhosin.session.encrypt = Off" );
-
- return false;
- }
-
UploadBase::setSessionStatus(
+ $user,
$this->params['filekey'],
array( 'result' => 'Poll', 'stage' => 'assembling', 'status' => Status::newGood() )
);
@@ -70,6 +60,7 @@ class AssembleUploadChunksJob extends Job {
$status = $upload->concatenateChunks();
if ( !$status->isGood() ) {
UploadBase::setSessionStatus(
+ $user,
$this->params['filekey'],
array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
);
@@ -93,6 +84,7 @@ class AssembleUploadChunksJob extends Job {
// Cache the info so the user doesn't have to wait forever to get the final info
UploadBase::setSessionStatus(
+ $user,
$this->params['filekey'],
array(
'result' => 'Success',
@@ -102,8 +94,9 @@ class AssembleUploadChunksJob extends Job {
'status' => Status::newGood()
)
);
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
UploadBase::setSessionStatus(
+ $user,
$this->params['filekey'],
array(
'result' => 'Failure',
diff --git a/includes/jobqueue/jobs/DuplicateJob.php b/includes/jobqueue/jobs/DuplicateJob.php
index 1fa6cefe..c5e3a234 100644
--- a/includes/jobqueue/jobs/DuplicateJob.php
+++ b/includes/jobqueue/jobs/DuplicateJob.php
@@ -18,7 +18,7 @@
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @ingroup Cache
+ * @ingroup JobQueue
*/
/**
diff --git a/includes/jobqueue/jobs/EnqueueJob.php b/includes/jobqueue/jobs/EnqueueJob.php
new file mode 100644
index 00000000..46fb2aa7
--- /dev/null
+++ b/includes/jobqueue/jobs/EnqueueJob.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Router job that takes jobs and enqueues them.
+ *
+ * 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 JobQueue
+ */
+
+/**
+ * Router job that takes jobs and enqueues them to their proper queues
+ *
+ * This can be used for several things:
+ * - a) Making multi-job enqueues more robust by atomically enqueueing
+ * a single job that pushes the actual jobs (with retry logic)
+ * - b) Masking the latency of pushing jobs to different queues/wikis
+ * - c) Low-latency enqueues to push jobs from warm to hot datacenters
+ *
+ * @ingroup JobQueue
+ * @since 1.25
+ */
+final class EnqueueJob extends Job {
+ /**
+ * Callers should use the factory methods instead
+ *
+ * @param Title $title
+ * @param array $params Job parameters
+ */
+ function __construct( $title, $params ) {
+ parent::__construct( 'enqueue', $title, $params );
+ }
+
+ /**
+ * @param Job|JobSpecification|array $jobs
+ * @return JobRouteJob
+ */
+ public static function newFromLocalJobs( $jobs ) {
+ $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
+
+ return self::newFromJobsByWiki( array( wfWikiID() => $jobs ) );
+ }
+
+ /**
+ * @param array $jobsByWiki Map of (wiki => JobSpecification list)
+ * @return JobRouteJob
+ */
+ public static function newFromJobsByWiki( array $jobsByWiki ) {
+ $jobMapsByWiki = array();
+ foreach ( $jobsByWiki as $wiki => $jobs ) {
+ $jobMapsByWiki[$wiki] = array();
+ foreach ( $jobs as $job ) {
+ if ( $job instanceof JobSpecification ) {
+ $jobMapsByWiki[$wiki][] = $job->toSerializableArray();
+ } else {
+ throw new InvalidArgumentException( "Jobs must be of type JobSpecification." );
+ }
+ }
+ }
+
+ return new self( Title::newMainPage(), array( 'jobsByWiki' => $jobMapsByWiki ) );
+ }
+
+ public function run() {
+ foreach ( $this->params['jobsByWiki'] as $wiki => $jobMaps ) {
+ $jobSpecs = array();
+ foreach ( $jobMaps as $jobMap ) {
+ $jobSpecs[] = JobSpecification::newFromArray( $jobMap );
+ }
+ JobQueueGroup::singleton( $wiki )->push( $jobSpecs );
+ }
+
+ return true;
+ }
+}
diff --git a/includes/jobqueue/jobs/HTMLCacheUpdateJob.php b/includes/jobqueue/jobs/HTMLCacheUpdateJob.php
index 4d1e72c9..e5e521c3 100644
--- a/includes/jobqueue/jobs/HTMLCacheUpdateJob.php
+++ b/includes/jobqueue/jobs/HTMLCacheUpdateJob.php
@@ -18,6 +18,7 @@
* http://www.gnu.org/copyleft/gpl.html
*
* @file
+ * @ingroup JobQueue
* @ingroup Cache
*/
@@ -26,9 +27,9 @@
*
* This job comes in a few variants:
* - a) Recursive jobs to purge caches for backlink pages for a given title.
- * These jobs have have (recursive:true,table:<table>) set.
+ * These jobs have (recursive:true,table:<table>) set.
* - b) Jobs to purge caches for a set of titles (the job title is ignored).
- * These jobs have have (pages:(<page ID>:(<namespace>,<title>),...) set.
+ * These jobs have (pages:(<page ID>:(<namespace>,<title>),...) set.
*
* @ingroup JobQueue
*/
@@ -42,17 +43,8 @@ class HTMLCacheUpdateJob extends Job {
function run() {
global $wgUpdateRowsPerJob, $wgUpdateRowsPerQuery;
- static $expected = array( 'recursive', 'pages' ); // new jobs have one of these
-
- $oldRangeJob = false;
- if ( !array_intersect( array_keys( $this->params ), $expected ) ) {
- // B/C for older job params formats that lack these fields:
- // a) base jobs with just ("table") and b) range jobs with ("table","start","end")
- if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
- $oldRangeJob = true;
- } else {
- $this->params['recursive'] = true; // base job
- }
+ if ( isset( $this->params['table'] ) && !isset( $this->params['pages'] ) ) {
+ $this->params['recursive'] = true; // b/c; base job
}
// Job to purge all (or a range of) backlink pages for a page
@@ -67,29 +59,15 @@ class HTMLCacheUpdateJob extends Job {
array( 'params' => $this->getRootJobParams() )
);
JobQueueGroup::singleton()->push( $jobs );
- // Job to purge pages for for a set of titles
+ // Job to purge pages for a set of titles
} elseif ( isset( $this->params['pages'] ) ) {
$this->invalidateTitles( $this->params['pages'] );
- // B/C for job to purge a range of backlink pages for a given page
- } elseif ( $oldRangeJob ) {
- $titleArray = $this->title->getBacklinkCache()->getLinks(
- $this->params['table'], $this->params['start'], $this->params['end'] );
-
- $pages = array(); // same format BacklinkJobUtils uses
- foreach ( $titleArray as $tl ) {
- $pages[$tl->getArticleId()] = array( $tl->getNamespace(), $tl->getDbKey() );
- }
-
- $jobs = array();
- foreach ( array_chunk( $pages, $wgUpdateRowsPerJob ) as $pageChunk ) {
- $jobs[] = new HTMLCacheUpdateJob( $this->title,
- array(
- 'table' => $this->params['table'],
- 'pages' => $pageChunk
- ) + $this->getRootJobParams() // carry over information for de-duplication
- );
- }
- JobQueueGroup::singleton()->push( $jobs );
+ // Job to update a single title
+ } else {
+ $t = $this->title;
+ $this->invalidateTitles( array(
+ $t->getArticleID() => array( $t->getNamespace(), $t->getDBkey() )
+ ) );
}
return true;
diff --git a/includes/jobqueue/jobs/NullJob.php b/includes/jobqueue/jobs/NullJob.php
index 66291e9d..f94d6ebc 100644
--- a/includes/jobqueue/jobs/NullJob.php
+++ b/includes/jobqueue/jobs/NullJob.php
@@ -18,7 +18,7 @@
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @ingroup Cache
+ * @ingroup JobQueue
*/
/**
diff --git a/includes/jobqueue/jobs/PublishStashedFileJob.php b/includes/jobqueue/jobs/PublishStashedFileJob.php
index 918a392d..a922dd3d 100644
--- a/includes/jobqueue/jobs/PublishStashedFileJob.php
+++ b/includes/jobqueue/jobs/PublishStashedFileJob.php
@@ -19,12 +19,14 @@
*
* @file
* @ingroup Upload
+ * @ingroup JobQueue
*/
/**
* Upload a file from the upload stash into the local file repo.
*
* @ingroup Upload
+ * @ingroup JobQueue
*/
class PublishStashedFileJob extends Job {
public function __construct( $title, $params ) {
@@ -35,26 +37,16 @@ class PublishStashedFileJob extends Job {
public function run() {
$scope = RequestContext::importScopedSession( $this->params['session'] );
$context = RequestContext::getMain();
+ $user = $context->getUser();
try {
- $user = $context->getUser();
if ( !$user->isLoggedIn() ) {
$this->setLastError( "Could not load the author user from session." );
return false;
}
- if ( count( $_SESSION ) === 0 ) {
- // Empty session probably indicates that we didn't associate
- // with the session correctly. Note that being able to load
- // the user does not necessarily mean the session was loaded.
- // Most likely cause by suhosin.session.encrypt = On.
- $this->setLastError( "Error associating with user session. " .
- "Try setting suhosin.session.encrypt = Off" );
-
- return false;
- }
-
UploadBase::setSessionStatus(
+ $user,
$this->params['filekey'],
array( 'result' => 'Poll', 'stage' => 'publish', 'status' => Status::newGood() )
);
@@ -72,6 +64,7 @@ class PublishStashedFileJob extends Job {
$status = Status::newFatal( 'verification-error' );
$status->value = array( 'verification' => $verification );
UploadBase::setSessionStatus(
+ $user,
$this->params['filekey'],
array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
);
@@ -89,6 +82,7 @@ class PublishStashedFileJob extends Job {
);
if ( !$status->isGood() ) {
UploadBase::setSessionStatus(
+ $user,
$this->params['filekey'],
array( 'result' => 'Failure', 'stage' => 'publish', 'status' => $status )
);
@@ -106,6 +100,7 @@ class PublishStashedFileJob extends Job {
// Cache the info so the user doesn't have to wait forever to get the final info
UploadBase::setSessionStatus(
+ $user,
$this->params['filekey'],
array(
'result' => 'Success',
@@ -115,8 +110,9 @@ class PublishStashedFileJob extends Job {
'status' => Status::newGood()
)
);
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
UploadBase::setSessionStatus(
+ $user,
$this->params['filekey'],
array(
'result' => 'Failure',
diff --git a/includes/jobqueue/jobs/RecentChangesUpdateJob.php b/includes/jobqueue/jobs/RecentChangesUpdateJob.php
new file mode 100644
index 00000000..cc04595d
--- /dev/null
+++ b/includes/jobqueue/jobs/RecentChangesUpdateJob.php
@@ -0,0 +1,223 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job for pruning recent changes
+ *
+ * @ingroup JobQueue
+ * @since 1.25
+ */
+class RecentChangesUpdateJob extends Job {
+ function __construct( $title, $params ) {
+ parent::__construct( 'recentChangesUpdate', $title, $params );
+
+ if ( !isset( $params['type'] ) ) {
+ throw new Exception( "Missing 'type' parameter." );
+ }
+
+ $this->removeDuplicates = true;
+ }
+
+ /**
+ * @return RecentChangesUpdateJob
+ */
+ final public static function newPurgeJob() {
+ return new self(
+ SpecialPage::getTitleFor( 'Recentchanges' ), array( 'type' => 'purge' )
+ );
+ }
+
+ /**
+ * @return RecentChangesUpdateJob
+ * @since 1.26
+ */
+ final public static function newCacheUpdateJob() {
+ return new self(
+ SpecialPage::getTitleFor( 'Recentchanges' ), array( 'type' => 'cacheUpdate' )
+ );
+ }
+
+ public function run() {
+ if ( $this->params['type'] === 'purge' ) {
+ $this->purgeExpiredRows();
+ } elseif ( $this->params['type'] === 'cacheUpdate' ) {
+ $this->updateActiveUsers();
+ } else {
+ throw new InvalidArgumentException(
+ "Invalid 'type' parameter '{$this->params['type']}'." );
+ }
+
+ return true;
+ }
+
+ protected function purgeExpiredRows() {
+ global $wgRCMaxAge;
+
+ $lockKey = wfWikiID() . ':recentchanges-prune';
+
+ $dbw = wfGetDB( DB_MASTER );
+ if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
+ return; // already in progress
+ }
+ $batchSize = 100; // Avoid slave lag
+
+ $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
+ do {
+ $rcIds = $dbw->selectFieldValues( 'recentchanges',
+ 'rc_id',
+ array( 'rc_timestamp < ' . $dbw->addQuotes( $cutoff ) ),
+ __METHOD__,
+ array( 'LIMIT' => $batchSize )
+ );
+ if ( $rcIds ) {
+ $dbw->delete( 'recentchanges', array( 'rc_id' => $rcIds ), __METHOD__ );
+ }
+ // Commit in chunks to avoid slave lag
+ $dbw->commit( __METHOD__, 'flush' );
+
+ if ( count( $rcIds ) === $batchSize ) {
+ // There might be more, so try waiting for slaves
+ if ( !wfWaitForSlaves( null, false, false, /* $timeout = */ 3 ) ) {
+ // Another job will continue anyway
+ break;
+ }
+ }
+ } while ( $rcIds );
+
+ $dbw->unlock( $lockKey, __METHOD__ );
+ }
+
+ protected function updateActiveUsers() {
+ global $wgActiveUserDays;
+
+ // Users that made edits at least this many days ago are "active"
+ $days = $wgActiveUserDays;
+ // Pull in the full window of active users in this update
+ $window = $wgActiveUserDays * 86400;
+
+ $dbw = wfGetDB( DB_MASTER );
+ // JobRunner uses DBO_TRX, but doesn't call begin/commit itself;
+ // onTransactionIdle() will run immediately since there is no trx.
+ $dbw->onTransactionIdle( function() use ( $dbw, $days, $window ) {
+ // Avoid disconnect/ping() cycle that makes locks fall off
+ $dbw->setSessionOptions( array( 'connTimeout' => 900 ) );
+
+ $lockKey = wfWikiID() . '-activeusers';
+ if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
+ return false; // exclusive update (avoids duplicate entries)
+ }
+
+ $nowUnix = time();
+ // Get the last-updated timestamp for the cache
+ $cTime = $dbw->selectField( 'querycache_info',
+ 'qci_timestamp',
+ array( 'qci_type' => 'activeusers' )
+ );
+ $cTimeUnix = $cTime ? wfTimestamp( TS_UNIX, $cTime ) : 1;
+
+ // Pick the date range to fetch from. This is normally from the last
+ // update to till the present time, but has a limited window for sanity.
+ // If the window is limited, multiple runs are need to fully populate it.
+ $sTimestamp = max( $cTimeUnix, $nowUnix - $days * 86400 );
+ $eTimestamp = min( $sTimestamp + $window, $nowUnix );
+
+ // Get all the users active since the last update
+ $res = $dbw->select(
+ array( 'recentchanges' ),
+ array( 'rc_user_text', 'lastedittime' => 'MAX(rc_timestamp)' ),
+ array(
+ 'rc_user > 0', // actual accounts
+ 'rc_type != ' . $dbw->addQuotes( RC_EXTERNAL ), // no wikidata
+ 'rc_log_type IS NULL OR rc_log_type != ' . $dbw->addQuotes( 'newusers' ),
+ 'rc_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $sTimestamp ) ),
+ 'rc_timestamp <= ' . $dbw->addQuotes( $dbw->timestamp( $eTimestamp ) )
+ ),
+ __METHOD__,
+ array(
+ 'GROUP BY' => array( 'rc_user_text' ),
+ 'ORDER BY' => 'NULL' // avoid filesort
+ )
+ );
+ $names = array();
+ foreach ( $res as $row ) {
+ $names[$row->rc_user_text] = $row->lastedittime;
+ }
+
+ // Rotate out users that have not edited in too long (according to old data set)
+ $dbw->delete( 'querycachetwo',
+ array(
+ 'qcc_type' => 'activeusers',
+ 'qcc_value < ' . $dbw->addQuotes( $nowUnix - $days * 86400 ) // TS_UNIX
+ ),
+ __METHOD__
+ );
+
+ // Find which of the recently active users are already accounted for
+ if ( count( $names ) ) {
+ $res = $dbw->select( 'querycachetwo',
+ array( 'user_name' => 'qcc_title' ),
+ array(
+ 'qcc_type' => 'activeusers',
+ 'qcc_namespace' => NS_USER,
+ 'qcc_title' => array_keys( $names ) ),
+ __METHOD__
+ );
+ foreach ( $res as $row ) {
+ unset( $names[$row->user_name] );
+ }
+ }
+
+ // Insert the users that need to be added to the list
+ if ( count( $names ) ) {
+ $newRows = array();
+ foreach ( $names as $name => $lastEditTime ) {
+ $newRows[] = array(
+ 'qcc_type' => 'activeusers',
+ 'qcc_namespace' => NS_USER,
+ 'qcc_title' => $name,
+ 'qcc_value' => wfTimestamp( TS_UNIX, $lastEditTime ),
+ 'qcc_namespacetwo' => 0, // unused
+ 'qcc_titletwo' => '' // unused
+ );
+ }
+ foreach ( array_chunk( $newRows, 500 ) as $rowBatch ) {
+ $dbw->insert( 'querycachetwo', $rowBatch, __METHOD__ );
+ wfWaitForSlaves();
+ }
+ }
+
+ // If a transaction was already started, it might have an old
+ // snapshot, so kludge the timestamp range back as needed.
+ $asOfTimestamp = min( $eTimestamp, (int)$dbw->trxTimestamp() );
+
+ // Touch the data freshness timestamp
+ $dbw->replace( 'querycache_info',
+ array( 'qci_type' ),
+ array( 'qci_type' => 'activeusers',
+ 'qci_timestamp' => $dbw->timestamp( $asOfTimestamp ) ), // not always $now
+ __METHOD__
+ );
+
+ $dbw->unlock( $lockKey, __METHOD__ );
+ } );
+ }
+}
diff --git a/includes/jobqueue/jobs/RefreshLinksJob.php b/includes/jobqueue/jobs/RefreshLinksJob.php
index f82af273..1252b0b5 100644
--- a/includes/jobqueue/jobs/RefreshLinksJob.php
+++ b/includes/jobqueue/jobs/RefreshLinksJob.php
@@ -26,9 +26,9 @@
*
* This job comes in a few variants:
* - a) Recursive jobs to update links for backlink pages for a given title.
- * These jobs have have (recursive:true,table:<table>) set.
+ * These jobs have (recursive:true,table:<table>) set.
* - b) Jobs to update links for a set of pages (the job title is ignored).
- * These jobs have have (pages:(<page ID>:(<namespace>,<title>),...) set.
+ * These jobs have (pages:(<page ID>:(<namespace>,<title>),...) set.
* - c) Jobs to update links for a single page (the job title)
* These jobs need no extra fields set.
*
@@ -39,6 +39,10 @@ class RefreshLinksJob extends Job {
function __construct( $title, $params = '' ) {
parent::__construct( 'refreshLinks', $title, $params );
+ // A separate type is used just for cascade-protected backlinks
+ if ( !empty( $this->params['prioritize'] ) ) {
+ $this->command .= 'Prioritized';
+ }
// Base backlink update jobs and per-title update jobs can be de-duplicated.
// If template A changes twice before any jobs run, a clean queue will have:
// (A base, A base)
@@ -86,7 +90,7 @@ class RefreshLinksJob extends Job {
array( 'params' => $extraParams )
);
JobQueueGroup::singleton()->push( $jobs );
- // Job to update link tables for for a set of titles
+ // Job to update link tables for a set of titles
} elseif ( isset( $this->params['pages'] ) ) {
foreach ( $this->params['pages'] as $pageId => $nsAndKey ) {
list( $ns, $dbKey ) = $nsAndKey;
@@ -100,6 +104,10 @@ class RefreshLinksJob extends Job {
return true;
}
+ /**
+ * @param Title $title
+ * @return bool
+ */
protected function runForTitle( Title $title = null ) {
$linkCache = LinkCache::singleton();
$linkCache->clear();
@@ -157,7 +165,7 @@ class RefreshLinksJob extends Job {
$ellapsed = microtime( true ) - $start;
// If it took a long time to render, then save this back to the cache to avoid
// wasted CPU by other apaches or job runners. We don't want to always save to
- // cache as this cause cause high cache I/O and LRU churn when a template changes.
+ // cache as this can cause high cache I/O and LRU churn when a template changes.
if ( $ellapsed >= self::PARSE_THRESHOLD_SEC
&& $page->isParserCacheUsed( $parserOptions, $revision->getId() )
&& $parserOutput->isCacheable()
diff --git a/includes/jobqueue/jobs/RefreshLinksJob2.php b/includes/jobqueue/jobs/RefreshLinksJob2.php
deleted file mode 100644
index 97405aeb..00000000
--- a/includes/jobqueue/jobs/RefreshLinksJob2.php
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-/**
- * Job to update links for a given title.
- *
- * 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 JobQueue
- */
-
-/**
- * Background job to update links for titles in certain backlink range by page ID.
- * Newer version for high use templates. This is deprecated by RefreshLinksPartitionJob.
- *
- * @ingroup JobQueue
- * @deprecated since 1.23
- */
-class RefreshLinksJob2 extends Job {
- function __construct( $title, $params ) {
- parent::__construct( 'refreshLinks2', $title, $params );
- // Base jobs for large templates can easily be de-duplicated
- $this->removeDuplicates = !isset( $params['start'] ) && !isset( $params['end'] );
- }
-
- /**
- * Run a refreshLinks2 job
- * @return bool Success
- */
- function run() {
- global $wgUpdateRowsPerJob;
-
- $linkCache = LinkCache::singleton();
- $linkCache->clear();
-
- if ( is_null( $this->title ) ) {
- $this->error = "refreshLinks2: Invalid title";
- return false;
- }
-
- // Back compat for pre-r94435 jobs
- $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
-
- // Avoid slave lag when fetching templates.
- // When the outermost job is run, we know that the caller that enqueued it must have
- // committed the relevant changes to the DB by now. At that point, record the master
- // position and pass it along as the job recursively breaks into smaller range jobs.
- // Hopefully, when leaf jobs are popped, the slaves will have reached that position.
- if ( isset( $this->params['masterPos'] ) ) {
- $masterPos = $this->params['masterPos'];
- } elseif ( wfGetLB()->getServerCount() > 1 ) {
- $masterPos = wfGetLB()->getMasterPos();
- } else {
- $masterPos = false;
- }
-
- $tbc = $this->title->getBacklinkCache();
-
- $jobs = array(); // jobs to insert
- if ( isset( $this->params['start'] ) && isset( $this->params['end'] ) ) {
- # This is a partition job to trigger the insertion of leaf jobs...
- $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
- } else {
- # This is a base job to trigger the insertion of partitioned jobs...
- if ( $tbc->getNumLinks( $table, $wgUpdateRowsPerJob + 1 ) <= $wgUpdateRowsPerJob ) {
- # Just directly insert the single per-title jobs
- $jobs = array_merge( $jobs, $this->getSingleTitleJobs( $table, $masterPos ) );
- } else {
- # Insert the partition jobs to make per-title jobs
- foreach ( $tbc->partition( $table, $wgUpdateRowsPerJob ) as $batch ) {
- list( $start, $end ) = $batch;
- $jobs[] = new RefreshLinksJob2( $this->title,
- array(
- 'table' => $table,
- 'start' => $start,
- 'end' => $end,
- 'masterPos' => $masterPos,
- ) + $this->getRootJobParams() // carry over information for de-duplication
- );
- }
- }
- }
-
- if ( count( $jobs ) ) {
- JobQueueGroup::singleton()->push( $jobs );
- }
-
- return true;
- }
-
- /**
- * @param string $table
- * @param mixed $masterPos
- * @return array
- */
- protected function getSingleTitleJobs( $table, $masterPos ) {
- # The "start"/"end" fields are not set for the base jobs
- $start = isset( $this->params['start'] ) ? $this->params['start'] : false;
- $end = isset( $this->params['end'] ) ? $this->params['end'] : false;
- $titles = $this->title->getBacklinkCache()->getLinks( $table, $start, $end );
- # Convert into single page refresh links jobs.
- # This handles well when in sapi mode and is useful in any case for job
- # de-duplication. If many pages use template A, and that template itself
- # uses template B, then an edit to both will create many duplicate jobs.
- # Roughly speaking, for each page, one of the "RefreshLinksJob" jobs will
- # get run first, and when it does, it will remove the duplicates. Of course,
- # one page could have its job popped when the other page's job is still
- # buried within the logic of a refreshLinks2 job.
- $jobs = array();
- foreach ( $titles as $title ) {
- $jobs[] = new RefreshLinksJob( $title,
- array( 'masterPos' => $masterPos ) + $this->getRootJobParams()
- ); // carry over information for de-duplication
- }
- return $jobs;
- }
-
- /**
- * @return array
- */
- public function getDeduplicationInfo() {
- $info = parent::getDeduplicationInfo();
- // Don't let highly unique "masterPos" values ruin duplicate detection
- if ( is_array( $info['params'] ) ) {
- unset( $info['params']['masterPos'] );
- }
- return $info;
- }
-}
diff --git a/includes/jobqueue/jobs/ThumbnailRenderJob.php b/includes/jobqueue/jobs/ThumbnailRenderJob.php
new file mode 100644
index 00000000..ab381388
--- /dev/null
+++ b/includes/jobqueue/jobs/ThumbnailRenderJob.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * Job for asynchronous rendering of thumbnails.
+ *
+ * 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 JobQueue
+ */
+
+/**
+ * Job for asynchronous rendering of thumbnails.
+ *
+ * @ingroup JobQueue
+ */
+class ThumbnailRenderJob extends Job {
+ public function __construct( $title, $params ) {
+ parent::__construct( 'ThumbnailRender', $title, $params );
+ }
+
+ public function run() {
+ global $wgUploadThumbnailRenderMethod;
+
+ $transformParams = $this->params['transformParams'];
+
+ $file = wfLocalFile( $this->title );
+ $file->load( File::READ_LATEST );
+
+ if ( $file && $file->exists() ) {
+ if ( $wgUploadThumbnailRenderMethod === 'jobqueue' ) {
+ $thumb = $file->transform( $transformParams, File::RENDER_NOW );
+
+ if ( $thumb && !$thumb->isError() ) {
+ return true;
+ } else {
+ $this->setLastError( __METHOD__ . ': thumbnail couln\'t be generated' );
+ return false;
+ }
+ } elseif ( $wgUploadThumbnailRenderMethod === 'http' ) {
+ $status = $this->hitThumbUrl( $file, $transformParams );
+
+ wfDebug( __METHOD__ . ": received status {$status}\n" );
+
+ if ( $status === 200 || $status === 301 || $status === 302 ) {
+ return true;
+ } elseif ( $status ) {
+ // Note that this currently happens (500) when requesting sizes larger then or
+ // equal to the original, which is harmless.
+ $this->setLastError( __METHOD__ . ': incorrect HTTP status ' . $status );
+ return false;
+ } else {
+ $this->setLastError( __METHOD__ . ': HTTP request failure' );
+ return false;
+ }
+ } else {
+ $this->setLastError( __METHOD__ . ': unknown thumbnail render method ' . $wgUploadThumbnailRenderMethod );
+ return false;
+ }
+ } else {
+ $this->setLastError( __METHOD__ . ': file doesn\'t exist' );
+ return false;
+ }
+ }
+
+ protected function hitThumbUrl( $file, $transformParams ) {
+ global $wgUploadThumbnailRenderHttpCustomHost, $wgUploadThumbnailRenderHttpCustomDomain;
+
+ $thumbName = $file->thumbName( $transformParams );
+ $thumbUrl = $file->getThumbUrl( $thumbName );
+
+ if ( $wgUploadThumbnailRenderHttpCustomDomain ) {
+ $parsedUrl = wfParseUrl( $thumbUrl );
+
+ if ( !$parsedUrl || !isset( $parsedUrl['path'] ) || !strlen( $parsedUrl['path'] ) ) {
+ return false;
+ }
+
+ $thumbUrl = '//' . $wgUploadThumbnailRenderHttpCustomDomain . $parsedUrl['path'];
+ }
+
+ wfDebug( __METHOD__ . ": hitting url {$thumbUrl}\n" );
+
+ $request = MWHttpRequest::factory( $thumbUrl,
+ array( 'method' => 'HEAD', 'followRedirects' => true ),
+ __METHOD__
+ );
+
+ if ( $wgUploadThumbnailRenderHttpCustomHost ) {
+ $request->setHeader( 'Host', $wgUploadThumbnailRenderHttpCustomHost );
+ }
+
+ $status = $request->execute();
+
+ return $request->getStatus();
+ }
+}
diff --git a/includes/jobqueue/jobs/UploadFromUrlJob.php b/includes/jobqueue/jobs/UploadFromUrlJob.php
index a09db15a..d15fd025 100644
--- a/includes/jobqueue/jobs/UploadFromUrlJob.php
+++ b/includes/jobqueue/jobs/UploadFromUrlJob.php
@@ -81,7 +81,7 @@ class UploadFromUrlJob extends Job {
if ( $warnings ) {
# Stash the upload
- $key = $this->upload->stashFile();
+ $key = $this->upload->stashFile( $this->user );
// @todo FIXME: This has been broken for a while.
// User::leaveUserMessage() does not exist.
diff --git a/includes/json/FormatJson.php b/includes/json/FormatJson.php
index f3e5c76d..095811ff 100644
--- a/includes/json/FormatJson.php
+++ b/includes/json/FormatJson.php
@@ -71,6 +71,13 @@ class FormatJson {
const TRY_FIXING = 0x200;
/**
+ * If set, strip comments from input before parsing as JSON.
+ *
+ * @since 1.25
+ */
+ const STRIP_COMMENTS = 0x400;
+
+ /**
* Regex that matches whitespace inside empty arrays and objects.
*
* This doesn't affect regular strings inside the JSON because those can't
@@ -115,7 +122,7 @@ class FormatJson {
* readability, using that string for indentation. If true, use the default indent
* string (four spaces).
* @param int $escaping Bitfield consisting of _OK class constants
- * @return string|bool: String if successful; false upon failure
+ * @return string|false String if successful; false upon failure
*/
public static function encode( $value, $pretty = false, $escaping = 0 ) {
if ( !is_string( $pretty ) ) {
@@ -130,8 +137,9 @@ class FormatJson {
}
/**
- * Decodes a JSON string. It is recommended to use FormatJson::parse(), which returns more comprehensive
- * result in case of an error, and has more parsing options.
+ * Decodes a JSON string. It is recommended to use FormatJson::parse(),
+ * which returns more comprehensive result in case of an error, and has
+ * more parsing options.
*
* @param string $value The JSON string being decoded
* @param bool $assoc When true, returned objects will be converted into associative arrays.
@@ -147,13 +155,18 @@ class FormatJson {
/**
* Decodes a JSON string.
- * Unlike FormatJson::decode(), if $value represents null value, it will be properly decoded as valid.
+ * Unlike FormatJson::decode(), if $value represents null value, it will be
+ * properly decoded as valid.
*
* @param string $value The JSON string being decoded
- * @param int $options A bit field that allows FORCE_ASSOC, TRY_FIXING
+ * @param int $options A bit field that allows FORCE_ASSOC, TRY_FIXING,
+ * STRIP_COMMENTS
* @return Status If valid JSON, the value is available in $result->getValue()
*/
public static function parse( $value, $options = 0 ) {
+ if ( $options & self::STRIP_COMMENTS ) {
+ $value = self::stripComments( $value );
+ }
$assoc = ( $options & self::FORCE_ASSOC ) !== 0;
$result = json_decode( $value, $assoc );
$code = json_last_error();
@@ -219,7 +232,7 @@ class FormatJson {
* @param mixed $value
* @param string|bool $pretty
* @param int $escaping
- * @return string|bool
+ * @return string|false
*/
private static function encode54( $value, $pretty, $escaping ) {
static $bug66021;
@@ -271,7 +284,7 @@ class FormatJson {
* @param mixed $value
* @param string|bool $pretty
* @param int $escaping
- * @return string|bool
+ * @return string|false
*/
private static function encode53( $value, $pretty, $escaping ) {
$options = ( $escaping & self::XMLMETA_OK ) ? 0 : ( JSON_HEX_TAG | JSON_HEX_AMP );
@@ -347,4 +360,79 @@ class FormatJson {
return str_replace( "\x01", '\"', $buf );
}
+
+ /**
+ * Remove multiline and single line comments from an otherwise valid JSON
+ * input string. This can be used as a preprocessor for to allow JSON
+ * formatted configuration files to contain comments.
+ *
+ * @param string $json
+ * @return string JSON with comments removed
+ */
+ public static function stripComments( $json ) {
+ // Ensure we have a string
+ $str = (string) $json;
+ $buffer = '';
+ $maxLen = strlen( $str );
+ $mark = 0;
+
+ $inString = false;
+ $inComment = false;
+ $multiline = false;
+
+ for ($idx = 0; $idx < $maxLen; $idx++) {
+ switch ( $str[$idx] ) {
+ case '"':
+ $lookBehind = ( $idx - 1 >= 0 ) ? $str[$idx - 1] : '';
+ if ( !$inComment && $lookBehind !== '\\' ) {
+ // Either started or ended a string
+ $inString = !$inString;
+ }
+ break;
+
+ case '/':
+ $lookAhead = ( $idx + 1 < $maxLen ) ? $str[$idx + 1] : '';
+ $lookBehind = ( $idx - 1 >= 0 ) ? $str[$idx - 1] : '';
+ if ( $inString ) {
+ continue;
+
+ } elseif ( !$inComment &&
+ ( $lookAhead === '/' || $lookAhead === '*' )
+ ) {
+ // Transition into a comment
+ // Add characters seen to buffer
+ $buffer .= substr( $str, $mark, $idx - $mark );
+ // Consume the look ahead character
+ $idx++;
+ // Track state
+ $inComment = true;
+ $multiline = $lookAhead === '*';
+
+ } elseif ( $multiline && $lookBehind === '*' ) {
+ // Found the end of the current comment
+ $mark = $idx + 1;
+ $inComment = false;
+ $multiline = false;
+ }
+ break;
+
+ case "\n":
+ if ( $inComment && !$multiline ) {
+ // Found the end of the current comment
+ $mark = $idx + 1;
+ $inComment = false;
+ }
+ break;
+ }
+ }
+ if ( $inComment ) {
+ // Comment ends with input
+ // Technically we should check to ensure that we aren't in
+ // a multiline comment that hasn't been properly ended, but this
+ // is a strip filter, not a validating parser.
+ $mark = $maxLen;
+ }
+ // Add final chunk to buffer before returning
+ return $buffer . substr( $str, $mark, $maxLen - $mark );
+ }
}
diff --git a/includes/libs/APACHE-LICENSE-2.0.txt b/includes/libs/APACHE-LICENSE-2.0.txt
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/includes/libs/APACHE-LICENSE-2.0.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/includes/utils/ArrayUtils.php b/includes/libs/ArrayUtils.php
index 1e521cb8..f9340210 100644
--- a/includes/utils/ArrayUtils.php
+++ b/includes/libs/ArrayUtils.php
@@ -98,11 +98,11 @@ class ArrayUtils {
*
* @since 1.23
*
- * @param array $valueCallback A function to call to get the value with
+ * @param callable $valueCallback A function to call to get the value with
* a given array index.
* @param int $valueCount The number of items accessible via $valueCallback,
* indexed from 0 to $valueCount - 1
- * @param array $comparisonCallback A callback to compare two values, returning
+ * @param callable $comparisonCallback A callback to compare two values, returning
* -1, 0 or 1 in the style of strcmp().
* @param string $target The target value to find.
*
diff --git a/includes/libs/BufferingStatsdDataFactory.php b/includes/libs/BufferingStatsdDataFactory.php
new file mode 100644
index 00000000..ea5b09dc
--- /dev/null
+++ b/includes/libs/BufferingStatsdDataFactory.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Copyright 2015
+ *
+ * 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
+ */
+
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+
+/**
+ * A factory for application metric data.
+ *
+ * This class prepends a context-specific prefix to each metric key and keeps
+ * a reference to each constructed metric in an internal array buffer.
+ *
+ * @since 1.25
+ */
+class BufferingStatsdDataFactory extends StatsdDataFactory {
+ protected $buffer = array();
+
+ public function __construct( $prefix ) {
+ parent::__construct();
+ $this->prefix = $prefix;
+ }
+
+ public function produceStatsdData( $key, $value = 1, $metric = self::STATSD_METRIC_COUNT ) {
+ $this->buffer[] = $entity = $this->produceStatsdDataEntity();
+ if ( $key !== null ) {
+ $prefixedKey = ltrim( $this->prefix . '.' . $key, '.' );
+ $entity->setKey( $prefixedKey );
+ }
+ if ( $value !== null ) {
+ $entity->setValue( $value );
+ }
+ if ( $metric !== null ) {
+ $entity->setMetric( $metric );
+ }
+ return $entity;
+ }
+
+ public function getBuffer() {
+ return $this->buffer;
+ }
+}
diff --git a/includes/libs/CSSMin.php b/includes/libs/CSSMin.php
index c69e79f5..ffe26a96 100644
--- a/includes/libs/CSSMin.php
+++ b/includes/libs/CSSMin.php
@@ -32,12 +32,9 @@ class CSSMin {
/* Constants */
/**
- * Maximum file size to still qualify for in-line embedding as a data-URI
- *
- * 24,576 is used because Internet Explorer has a 32,768 byte limit for data URIs,
- * which when base64 encoded will result in a 1/3 increase in size.
+ * Internet Explorer data URI length limit. See encodeImageAsDataURI().
*/
- const EMBED_SIZE_LIMIT = 24576;
+ const DATA_URI_SIZE_LIMIT = 32768;
const URL_REGEX = 'url\(\s*[\'"]?(?P<file>[^\?\)\'"]*?)(?P<query>\?[^\)\'"]*?|)[\'"]?\s*\)';
const EMBED_REGEX = '\/\*\s*\@embed\s*\*\/';
const COMMENT_REGEX = '\/\*.*?\*\/';
@@ -100,33 +97,68 @@ class CSSMin {
}
/**
- * Encode an image file as a base64 data URI.
- * If the image file has a suitable MIME type and size, encode it as a
- * base64 data URI. Return false if the image type is unfamiliar or exceeds
- * the size limit.
+ * Encode an image file as a data URI.
+ *
+ * If the image file has a suitable MIME type and size, encode it as a data URI, base64-encoded
+ * for binary files or just percent-encoded otherwise. Return false if the image type is
+ * unfamiliar or file exceeds the size limit.
*
* @param string $file Image file to encode.
* @param string|null $type File's MIME type or null. If null, CSSMin will
* try to autodetect the type.
- * @param int|bool $sizeLimit If the size of the target file is greater than
- * this value, decline to encode the image file and return false
- * instead. If $sizeLimit is false, no limit is enforced.
- * @return string|bool: Image contents encoded as a data URI or false.
+ * @param bool $ie8Compat By default, a data URI will only be produced if it can be made short
+ * enough to fit in Internet Explorer 8 (and earlier) URI length limit (32,768 bytes). Pass
+ * `false` to remove this limitation.
+ * @return string|bool Image contents encoded as a data URI or false.
*/
- public static function encodeImageAsDataURI( $file, $type = null,
- $sizeLimit = self::EMBED_SIZE_LIMIT
- ) {
- if ( $sizeLimit !== false && filesize( $file ) >= $sizeLimit ) {
+ public static function encodeImageAsDataURI( $file, $type = null, $ie8Compat = true ) {
+ // Fast-fail for files that definitely exceed the maximum data URI length
+ if ( $ie8Compat && filesize( $file ) >= self::DATA_URI_SIZE_LIMIT ) {
return false;
}
+
if ( $type === null ) {
$type = self::getMimeType( $file );
}
if ( !$type ) {
return false;
}
- $data = base64_encode( file_get_contents( $file ) );
- return 'data:' . $type . ';base64,' . $data;
+
+ return self::encodeStringAsDataURI( file_get_contents( $file ), $type, $ie8Compat );
+ }
+
+ /**
+ * Encode file contents as a data URI with chosen MIME type.
+ *
+ * The URI will be base64-encoded for binary files or just percent-encoded otherwise.
+ *
+ * @since 1.25
+ *
+ * @param string $contents File contents to encode.
+ * @param string $type File's MIME type.
+ * @param bool $ie8Compat See encodeImageAsDataURI().
+ * @return string|bool Image contents encoded as a data URI or false.
+ */
+ public static function encodeStringAsDataURI( $contents, $type, $ie8Compat = true ) {
+ // Try #1: Non-encoded data URI
+ // The regular expression matches ASCII whitespace and printable characters.
+ if ( preg_match( '/^[\r\n\t\x20-\x7e]+$/', $contents ) ) {
+ // Do not base64-encode non-binary files (sane SVGs).
+ // (This often produces longer URLs, but they compress better, yielding a net smaller size.)
+ $uri = 'data:' . $type . ',' . rawurlencode( $contents );
+ if ( !$ie8Compat || strlen( $uri ) < self::DATA_URI_SIZE_LIMIT ) {
+ return $uri;
+ }
+ }
+
+ // Try #2: Encoded data URI
+ $uri = 'data:' . $type . ';base64,' . base64_encode( $contents );
+ if ( !$ie8Compat || strlen( $uri ) < self::DATA_URI_SIZE_LIMIT ) {
+ return $uri;
+ }
+
+ // A data URI couldn't be produced
+ return false;
}
/**
@@ -248,9 +280,12 @@ class CSSMin {
);
if ( $embedData ) {
+ // Remember the occurring MIME types to avoid fallbacks when embedding some files.
+ $mimeTypes = array();
+
$ruleWithEmbedded = preg_replace_callback(
$pattern,
- function ( $match ) use ( $embedAll, $local, $remote ) {
+ function ( $match ) use ( $embedAll, $local, $remote, &$mimeTypes ) {
$embed = $embedAll || $match['embed'];
$embedded = CSSMin::remapOne(
$match['file'],
@@ -260,21 +295,35 @@ class CSSMin {
$embed
);
+ $url = $match['file'] . $match['query'];
+ $file = $local . $match['file'];
+ if (
+ !CSSMin::isRemoteUrl( $url ) && !CSSMin::isLocalUrl( $url )
+ && file_exists( $file )
+ ) {
+ $mimeTypes[ CSSMin::getMimeType( $file ) ] = true;
+ }
+
return CSSMin::buildUrlValue( $embedded );
},
$rule
);
+
+ // Are all referenced images SVGs?
+ $needsEmbedFallback = $mimeTypes !== array( 'image/svg+xml' => true );
}
- if ( $embedData && $ruleWithEmbedded !== $ruleWithRemapped ) {
- // Build 2 CSS properties; one which uses a base64 encoded data URI in place
- // of the @embed comment to try and retain line-number integrity, and the
- // other with a remapped an versioned URL and an Internet Explorer hack
+ if ( !$embedData || $ruleWithEmbedded === $ruleWithRemapped ) {
+ // We're not embedding anything, or we tried to but the file is not embeddable
+ return $ruleWithRemapped;
+ } elseif ( $embedData && $needsEmbedFallback ) {
+ // Build 2 CSS properties; one which uses a data URI in place of the @embed comment, and
+ // the other with a remapped and versioned URL with an Internet Explorer 6 and 7 hack
// making it ignored in all browsers that support data URIs
return "$ruleWithEmbedded;$ruleWithRemapped!ie";
} else {
- // No reason to repeat twice
- return $ruleWithRemapped;
+ // Look ma, no fallbacks! This is for files which IE 6 and 7 don't support anyway: SVG.
+ return $ruleWithEmbedded;
}
}, $source );
@@ -289,6 +338,34 @@ class CSSMin {
}
/**
+ * Is this CSS rule referencing a remote URL?
+ *
+ * @private Until we require PHP 5.5 and we can access self:: from closures.
+ * @param string $maybeUrl
+ * @return bool
+ */
+ public static function isRemoteUrl( $maybeUrl ) {
+ if ( substr( $maybeUrl, 0, 2 ) === '//' || parse_url( $maybeUrl, PHP_URL_SCHEME ) ) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Is this CSS rule referencing a local URL?
+ *
+ * @private Until we require PHP 5.5 and we can access self:: from closures.
+ * @param string $maybeUrl
+ * @return bool
+ */
+ public static function isLocalUrl( $maybeUrl ) {
+ if ( $maybeUrl !== '' && $maybeUrl[0] === '/' && !self::isRemoteUrl( $maybeUrl ) ) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
* Remap or embed a CSS URL path.
*
* @param string $file URL to remap/embed
@@ -302,22 +379,16 @@ class CSSMin {
// The full URL possibly with query, as passed to the 'url()' value in CSS
$url = $file . $query;
- // Skip fully-qualified and protocol-relative URLs and data URIs
- if ( substr( $url, 0, 2 ) === '//' || parse_url( $url, PHP_URL_SCHEME ) ) {
- return $url;
+ // Expand local URLs with absolute paths like /w/index.php to possibly protocol-relative URL, if
+ // wfExpandUrl() is available. (This will not be the case if we're running outside of MW.)
+ if ( self::isLocalUrl( $url ) && function_exists( 'wfExpandUrl' ) ) {
+ return wfExpandUrl( $url, PROTO_RELATIVE );
}
- // URLs with absolute paths like /w/index.php need to be expanded
- // to absolute URLs but otherwise left alone
- if ( $url !== '' && $url[0] === '/' ) {
- // Replace the file path with an expanded (possibly protocol-relative) URL
- // ...but only if wfExpandUrl() is even available.
- // This will not be the case if we're running outside of MW
- if ( function_exists( 'wfExpandUrl' ) ) {
- return wfExpandUrl( $url, PROTO_RELATIVE );
- } else {
- return $url;
- }
+ // Pass thru fully-qualified and protocol-relative URLs and data URIs, as well as local URLs if
+ // we can't expand them.
+ if ( self::isRemoteUrl( $url ) || self::isLocalUrl( $url ) ) {
+ return $url;
}
if ( $local === false ) {
diff --git a/includes/Cookie.php b/includes/libs/Cookie.php
index cb041904..0fe94444 100644
--- a/includes/Cookie.php
+++ b/includes/libs/Cookie.php
@@ -48,7 +48,7 @@ class Cookie {
* expires A date string
* path The path this cookie is used on
* domain Domain this cookie is used on
- * @throws MWException
+ * @throws InvalidArgumentException
*/
public function set( $value, $attr ) {
$this->value = $value;
@@ -69,7 +69,7 @@ class Cookie {
$this->domain = $attr['domain'];
}
} else {
- throw new MWException( 'You must specify a domain.' );
+ throw new InvalidArgumentException( '$attr must contain a domain' );
}
}
diff --git a/includes/libs/DeferredStringifier.php b/includes/libs/DeferredStringifier.php
new file mode 100644
index 00000000..a6fd11a4
--- /dev/null
+++ b/includes/libs/DeferredStringifier.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Class that defers a slow string generation until the string is actually needed.
+ *
+ * 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
+ */
+
+/**
+ * @since 1.25
+ */
+class DeferredStringifier {
+ /** @var callable Callback used for result string generation */
+ private $callback;
+
+ /** @var array */
+ private $params;
+
+ /** @var string */
+ private $result;
+
+ /**
+ * @param callable $callback Callback that gets called by __toString
+ * @param mixed $param,... Parameters to the callback
+ */
+ public function __construct( $callback /*...*/ ) {
+ $this->params = func_get_args();
+ array_shift( $this->params );
+ $this->callback = $callback;
+ }
+
+ /**
+ * Get the string generated from the callback
+ *
+ * @return string
+ */
+ public function __toString() {
+ if ( $this->result === null ) {
+ $this->result = call_user_func_array( $this->callback, $this->params );
+ }
+ return $this->result;
+ }
+}
diff --git a/includes/libs/ExplodeIterator.php b/includes/libs/ExplodeIterator.php
new file mode 100644
index 00000000..3b34d9bc
--- /dev/null
+++ b/includes/libs/ExplodeIterator.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * An iterator which works exactly like:
+ *
+ * foreach ( explode( $delim, $s ) as $element ) {
+ * ...
+ * }
+ *
+ * Except it doesn't use 193 byte per element
+ */
+class ExplodeIterator implements Iterator {
+ // The subject string
+ private $subject, $subjectLength;
+
+ // The delimiter
+ private $delim, $delimLength;
+
+ // The position of the start of the line
+ private $curPos;
+
+ // The position after the end of the next delimiter
+ private $endPos;
+
+ // The current token
+ private $current;
+
+ /**
+ * Construct a DelimIterator
+ * @param string $delim
+ * @param string $subject
+ */
+ public function __construct( $delim, $subject ) {
+ $this->subject = $subject;
+ $this->delim = $delim;
+
+ // Micro-optimisation (theoretical)
+ $this->subjectLength = strlen( $subject );
+ $this->delimLength = strlen( $delim );
+
+ $this->rewind();
+ }
+
+ public function rewind() {
+ $this->curPos = 0;
+ $this->endPos = strpos( $this->subject, $this->delim );
+ $this->refreshCurrent();
+ }
+
+ public function refreshCurrent() {
+ if ( $this->curPos === false ) {
+ $this->current = false;
+ } elseif ( $this->curPos >= $this->subjectLength ) {
+ $this->current = '';
+ } elseif ( $this->endPos === false ) {
+ $this->current = substr( $this->subject, $this->curPos );
+ } else {
+ $this->current = substr( $this->subject, $this->curPos, $this->endPos - $this->curPos );
+ }
+ }
+
+ public function current() {
+ return $this->current;
+ }
+
+ /**
+ * @return int|bool Current position or boolean false if invalid
+ */
+ public function key() {
+ return $this->curPos;
+ }
+
+ /**
+ * @return string
+ */
+ public function next() {
+ if ( $this->endPos === false ) {
+ $this->curPos = false;
+ } else {
+ $this->curPos = $this->endPos + $this->delimLength;
+ if ( $this->curPos >= $this->subjectLength ) {
+ $this->endPos = false;
+ } else {
+ $this->endPos = strpos( $this->subject, $this->delim, $this->curPos );
+ }
+ }
+ $this->refreshCurrent();
+
+ return $this->current;
+ }
+
+ /**
+ * @return bool
+ */
+ public function valid() {
+ return $this->curPos !== false;
+ }
+}
diff --git a/includes/libs/GenericArrayObject.php b/includes/libs/GenericArrayObject.php
index db8a7ecf..93ae83b2 100644
--- a/includes/libs/GenericArrayObject.php
+++ b/includes/libs/GenericArrayObject.php
@@ -117,7 +117,7 @@ abstract class GenericArrayObject extends ArrayObject {
*
* @param mixed $value
*
- * @return boolean
+ * @return bool
*/
protected function hasValidType( $value ) {
$class = $this->getObjectType();
@@ -171,7 +171,7 @@ abstract class GenericArrayObject extends ArrayObject {
* @param integer|string $index
* @param mixed $value
*
- * @return boolean
+ * @return bool
*/
protected function preSetElement( $index, $value ) {
return true;
@@ -232,7 +232,7 @@ abstract class GenericArrayObject extends ArrayObject {
*
* @since 1.20
*
- * @return boolean
+ * @return bool
*/
public function isEmpty() {
return $this->count() === 0;
diff --git a/includes/libs/IPSet.php b/includes/libs/IPSet.php
index ae593785..c1c841e6 100644
--- a/includes/libs/IPSet.php
+++ b/includes/libs/IPSet.php
@@ -1,6 +1,5 @@
<?php
/**
- * @section LICENSE
* 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
@@ -163,7 +162,7 @@ class IPSet {
* Match an IP address against the set
*
* @param string $ip string IPv[46] address
- * @return boolean true is match success, false is match failure
+ * @return bool true is match success, false is match failure
*
* If $ip is unparseable, inet_pton may issue an E_WARNING to that effect
*/
diff --git a/includes/cache/MapCacheLRU.php b/includes/libs/MapCacheLRU.php
index 95e3af76..0b6db32e 100644
--- a/includes/cache/MapCacheLRU.php
+++ b/includes/libs/MapCacheLRU.php
@@ -38,11 +38,11 @@ class MapCacheLRU {
/**
* @param int $maxKeys Maximum number of entries allowed (min 1).
- * @throws MWException When $maxCacheKeys is not an int or =< 0.
+ * @throws Exception When $maxCacheKeys is not an int or =< 0.
*/
public function __construct( $maxKeys ) {
if ( !is_int( $maxKeys ) || $maxKeys < 1 ) {
- throw new MWException( __METHOD__ . " must be given an integer and >= 1" );
+ throw new Exception( __METHOD__ . " must be given an integer and >= 1" );
}
$this->maxCacheKeys = $maxKeys;
}
@@ -95,6 +95,14 @@ class MapCacheLRU {
}
/**
+ * @return array
+ * @since 1.25
+ */
+ public function getAllKeys() {
+ return array_keys( $this->cache );
+ }
+
+ /**
* Clear one or several cache entries, or all cache entries
*
* @param string|array $keys
diff --git a/includes/libs/MessageSpecifier.php b/includes/libs/MessageSpecifier.php
new file mode 100644
index 00000000..b417f299
--- /dev/null
+++ b/includes/libs/MessageSpecifier.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+interface MessageSpecifier {
+ /**
+ * Returns the message key
+ *
+ * If a list of multiple possible keys was supplied to the constructor, this method may
+ * return any of these keys. After the message has been fetched, this method will return
+ * the key that was actually used to fetch the message.
+ *
+ * @return string
+ */
+ public function getKey();
+
+ /**
+ * Returns the message parameters
+ *
+ * @return array
+ */
+ public function getParams();
+}
diff --git a/includes/libs/MultiHttpClient.php b/includes/libs/MultiHttpClient.php
index 8c982c43..fb2daa69 100644
--- a/includes/libs/MultiHttpClient.php
+++ b/includes/libs/MultiHttpClient.php
@@ -34,6 +34,7 @@
* array bodies are encoded as multipart/form-data and strings
* use application/x-www-form-urlencoded (headers sent automatically)
* - stream : resource to stream the HTTP response body to
+ * - proxy : HTTP proxy to use
* Request maps can use integer index 0 instead of 'method' and 1 instead of 'url'.
*
* @author Aaron Schulz
@@ -52,13 +53,17 @@ class MultiHttpClient {
protected $usePipelining = false;
/** @var integer */
protected $maxConnsPerHost = 50;
+ /** @var string|null proxy */
+ protected $proxy;
/**
* @param array $options
* - connTimeout : default connection timeout
* - reqTimeout : default request timeout
+ * - proxy : HTTP proxy to use
* - usePipelining : whether to use HTTP pipelining if possible (for all hosts)
* - maxConnsPerHost : maximum number of concurrent connections (per host)
+ * @throws Exception
*/
public function __construct( array $options ) {
if ( isset( $options['caBundlePath'] ) ) {
@@ -67,7 +72,7 @@ class MultiHttpClient {
throw new Exception( "Cannot find CA bundle: " . $this->caBundlePath );
}
}
- static $opts = array( 'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost' );
+ static $opts = array( 'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost', 'proxy' );
foreach ( $opts as $key ) {
if ( isset( $options[$key] ) ) {
$this->$key = $options[$key];
@@ -83,7 +88,7 @@ class MultiHttpClient {
* - reason : HTTP response reason (empty if there was a serious cURL error)
* - headers : <header name/value associative array>
* - body : HTTP response body or resource (if "stream" was set)
- * - err : Any cURL error string
+ * - error : Any cURL error string
* The map also stores integer-indexed copies of these values. This lets callers do:
* <code>
* list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $http->run( $req );
@@ -103,14 +108,14 @@ class MultiHttpClient {
* Execute a set of HTTP(S) requests concurrently
*
* The maps are returned by this method with the 'response' field set to a map of:
- * - code : HTTP response code or 0 if there was a serious cURL error
- * - reason : HTTP response reason (empty if there was a serious cURL error)
- * - headers : <header name/value associative array>
- * - body : HTTP response body or resource (if "stream" was set)
- * - err : Any cURL error string
- * The map also stores integer-indexed copies of these values. This lets callers do:
- * <code>
- * list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req['response'];
+ * - code : HTTP response code or 0 if there was a serious cURL error
+ * - reason : HTTP response reason (empty if there was a serious cURL error)
+ * - headers : <header name/value associative array>
+ * - body : HTTP response body or resource (if "stream" was set)
+ * - error : Any cURL error string
+ * The map also stores integer-indexed copies of these values. This lets callers do:
+ * <code>
+ * list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req['response'];
* </code>
* All headers in the 'headers' field are normalized to use lower case names.
* This is true for the request headers and the response headers. Integer-indexed
@@ -123,6 +128,7 @@ class MultiHttpClient {
* - usePipelining : whether to use HTTP pipelining if possible
* - maxConnsPerHost : maximum number of concurrent connections (per host)
* @return array $reqs With response array populated for each
+ * @throws Exception
*/
public function runMulti( array $reqs, array $opts = array() ) {
$chm = $this->getCurlMulti();
@@ -244,12 +250,14 @@ class MultiHttpClient {
* - connTimeout : default connection timeout
* - reqTimeout : default request timeout
* @return resource
+ * @throws Exception
*/
protected function getCurlHandle( array &$req, array $opts = array() ) {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT,
isset( $opts['connTimeout'] ) ? $opts['connTimeout'] : $this->connTimeout );
+ curl_setopt( $ch, CURLOPT_PROXY, isset( $req['proxy'] ) ? $req['proxy'] : $this->proxy );
curl_setopt( $ch, CURLOPT_TIMEOUT,
isset( $opts['reqTimeout'] ) ? $opts['reqTimeout'] : $this->reqTimeout );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
diff --git a/includes/libs/ObjectFactory.php b/includes/libs/ObjectFactory.php
new file mode 100644
index 00000000..ec8c36a1
--- /dev/null
+++ b/includes/libs/ObjectFactory.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Construct objects from configuration instructions.
+ *
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class ObjectFactory {
+
+ /**
+ * Instantiate an object based on a specification array.
+ *
+ * The specification array must contain a 'class' key with string value
+ * that specifies the class name to instantiate or a 'factory' key with
+ * a callable (is_callable() === true). It can optionally contain
+ * an 'args' key that provides arguments to pass to the
+ * constructor/callable.
+ *
+ * Object construction using a specification having both 'class' and
+ * 'args' members will call the constructor of the class using
+ * ReflectionClass::newInstanceArgs. The use of ReflectionClass carries
+ * a performance penalty and should not be used to create large numbers of
+ * objects. If this is needed, consider introducing a factory method that
+ * can be called via call_user_func_array() instead.
+ *
+ * Values in the arguments collection which are Closure instances will be
+ * expanded by invoking them with no arguments before passing the
+ * resulting value on to the constructor/callable. This can be used to
+ * pass DatabaseBase instances or other live objects to the
+ * constructor/callable. This behavior can be suppressed by adding
+ * closure_expansion => false to the specification.
+ *
+ * @param array $spec Object specification
+ * @return object
+ * @throws InvalidArgumentException when object specification does not
+ * contain 'class' or 'factory' keys
+ * @throws ReflectionException when 'args' are supplied and 'class'
+ * constructor is non-public or non-existent
+ */
+ public static function getObjectFromSpec( $spec ) {
+ $args = isset( $spec['args'] ) ? $spec['args'] : array();
+
+ if ( !isset( $spec['closure_expansion'] ) ||
+ $spec['closure_expansion'] === true
+ ) {
+ $args = array_map( function ( $value ) {
+ if ( is_object( $value ) && $value instanceof Closure ) {
+ // If an argument is a Closure, call it.
+ return $value();
+ } else {
+ return $value;
+ }
+ }, $args );
+ }
+
+ if ( isset( $spec['class'] ) ) {
+ $clazz = $spec['class'];
+ if ( !$args ) {
+ $obj = new $clazz();
+ } else {
+ $ref = new ReflectionClass( $clazz );
+ $obj = $ref->newInstanceArgs( $args );
+ }
+ } elseif ( isset( $spec['factory'] ) ) {
+ $obj = call_user_func_array( $spec['factory'], $args );
+ } else {
+ throw new InvalidArgumentException(
+ 'Provided specification lacks both factory and class parameters.'
+ );
+ }
+
+ return $obj;
+ }
+}
diff --git a/includes/libs/ProcessCacheLRU.php b/includes/libs/ProcessCacheLRU.php
index f988207a..8d80eb38 100644
--- a/includes/libs/ProcessCacheLRU.php
+++ b/includes/libs/ProcessCacheLRU.php
@@ -28,13 +28,14 @@
class ProcessCacheLRU {
/** @var Array */
protected $cache = array(); // (key => prop => value)
+
/** @var Array */
protected $cacheTimes = array(); // (key => prop => UNIX timestamp)
protected $maxCacheKeys; // integer; max entries
/**
- * @param $maxKeys integer Maximum number of entries allowed (min 1).
+ * @param int $maxKeys Maximum number of entries allowed (min 1).
* @throws UnexpectedValueException When $maxCacheKeys is not an int or =< 0.
*/
public function __construct( $maxKeys ) {
@@ -46,9 +47,9 @@ class ProcessCacheLRU {
* This will prune the cache if it gets too large based on LRU.
* If the item is already set, it will be pushed to the top of the cache.
*
- * @param $key string
- * @param $prop string
- * @param $value mixed
+ * @param string $key
+ * @param string $prop
+ * @param mixed $value
* @return void
*/
public function set( $key, $prop, $value ) {
@@ -61,20 +62,22 @@ class ProcessCacheLRU {
unset( $this->cacheTimes[$evictKey] );
}
$this->cache[$key][$prop] = $value;
- $this->cacheTimes[$key][$prop] = time();
+ $this->cacheTimes[$key][$prop] = microtime( true );
}
/**
* Check if a property field exists for a cache entry.
*
- * @param $key string
- * @param $prop string
- * @param $maxAge integer Ignore items older than this many seconds (since 1.21)
+ * @param string $key
+ * @param string $prop
+ * @param float $maxAge Ignore items older than this many seconds (since 1.21)
* @return bool
*/
- public function has( $key, $prop, $maxAge = 0 ) {
+ public function has( $key, $prop, $maxAge = 0.0 ) {
if ( isset( $this->cache[$key][$prop] ) ) {
- return ( $maxAge <= 0 || ( time() - $this->cacheTimes[$key][$prop] ) <= $maxAge );
+ return ( $maxAge <= 0 ||
+ ( microtime( true ) - $this->cacheTimes[$key][$prop] ) <= $maxAge
+ );
}
return false;
@@ -85,13 +88,14 @@ class ProcessCacheLRU {
* This returns null if the property is not set.
* If the item is already set, it will be pushed to the top of the cache.
*
- * @param $key string
- * @param $prop string
+ * @param string $key
+ * @param string $prop
* @return mixed
*/
public function get( $key, $prop ) {
if ( isset( $this->cache[$key][$prop] ) ) {
- $this->ping( $key ); // push to top
+ // push to top
+ $this->ping( $key );
return $this->cache[$key][$prop];
} else {
return null;
@@ -99,9 +103,9 @@ class ProcessCacheLRU {
}
/**
- * Clear one or several cache entries, or all cache entries
+ * Clear one or several cache entries, or all cache entries.
*
- * @param $keys string|Array
+ * @param string|array $keys
* @return void
*/
public function clear( $keys = null ) {
@@ -119,8 +123,9 @@ class ProcessCacheLRU {
/**
* Resize the maximum number of cache entries, removing older entries as needed
*
- * @param $maxKeys integer
+ * @param int $maxKeys
* @return void
+ * @throws UnexpectedValueException
*/
public function resize( $maxKeys ) {
if ( !is_int( $maxKeys ) || $maxKeys < 1 ) {
@@ -138,7 +143,7 @@ class ProcessCacheLRU {
/**
* Push an entry to the top of the cache
*
- * @param $key string
+ * @param string $key
*/
protected function ping( $key ) {
$item = $this->cache[$key];
diff --git a/includes/libs/ReplacementArray.php b/includes/libs/ReplacementArray.php
new file mode 100644
index 00000000..7fdb3093
--- /dev/null
+++ b/includes/libs/ReplacementArray.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Replacement array for FSS with fallback to strtr()
+ * Supports lazy initialisation of FSS resource
+ */
+class ReplacementArray {
+ private $data = false;
+ private $fss = false;
+
+ /**
+ * Create an object with the specified replacement array
+ * The array should have the same form as the replacement array for strtr()
+ * @param array $data
+ */
+ public function __construct( $data = array() ) {
+ $this->data = $data;
+ }
+
+ /**
+ * @return array
+ */
+ public function __sleep() {
+ return array( 'data' );
+ }
+
+ public function __wakeup() {
+ $this->fss = false;
+ }
+
+ /**
+ * Set the whole replacement array at once
+ * @param array $data
+ */
+ public function setArray( $data ) {
+ $this->data = $data;
+ $this->fss = false;
+ }
+
+ /**
+ * @return array|bool
+ */
+ public function getArray() {
+ return $this->data;
+ }
+
+ /**
+ * Set an element of the replacement array
+ * @param string $from
+ * @param string $to
+ */
+ public function setPair( $from, $to ) {
+ $this->data[$from] = $to;
+ $this->fss = false;
+ }
+
+ /**
+ * @param array $data
+ */
+ public function mergeArray( $data ) {
+ $this->data = array_merge( $this->data, $data );
+ $this->fss = false;
+ }
+
+ /**
+ * @param ReplacementArray $other
+ */
+ public function merge( ReplacementArray $other ) {
+ $this->data = array_merge( $this->data, $other->data );
+ $this->fss = false;
+ }
+
+ /**
+ * @param string $from
+ */
+ public function removePair( $from ) {
+ unset( $this->data[$from] );
+ $this->fss = false;
+ }
+
+ /**
+ * @param array $data
+ */
+ public function removeArray( $data ) {
+ foreach ( $data as $from => $to ) {
+ $this->removePair( $from );
+ }
+ $this->fss = false;
+ }
+
+ /**
+ * @param string $subject
+ * @return string
+ */
+ public function replace( $subject ) {
+ if ( function_exists( 'fss_prep_replace' ) ) {
+ if ( $this->fss === false ) {
+ $this->fss = fss_prep_replace( $this->data );
+ }
+ $result = fss_exec_replace( $this->fss, $subject );
+ } else {
+ $result = strtr( $subject, $this->data );
+ }
+
+ return $result;
+ }
+}
diff --git a/includes/libs/RunningStat.php b/includes/libs/RunningStat.php
index dda5254e..8bd4656c 100644
--- a/includes/libs/RunningStat.php
+++ b/includes/libs/RunningStat.php
@@ -60,10 +60,10 @@ class RunningStat implements Countable {
/** @var float The second central moment (or variance). **/
public $m2 = 0.0;
- /** @var float The least value in the the set. **/
+ /** @var float The least value in the set. **/
public $min = INF;
- /** @var float The most value in the set. **/
+ /** @var float The greatest value in the set. **/
public $max = NEGATIVE_INF;
/**
@@ -126,10 +126,10 @@ class RunningStat implements Countable {
}
/**
- * Get the estimated stanard deviation.
+ * Get the estimated standard deviation.
*
* The standard deviation of a statistical population is the square root of
- * its variance. It shows shows how much variation from the mean exists. In
+ * its variance. It shows how much variation from the mean exists. In
* addition to expressing the variability of a population, the standard
* deviation is commonly used to measure confidence in statistical conclusions.
*
diff --git a/includes/libs/ScopedCallback.php b/includes/libs/ScopedCallback.php
index 631b6519..1ec9eaa6 100644
--- a/includes/libs/ScopedCallback.php
+++ b/includes/libs/ScopedCallback.php
@@ -28,16 +28,20 @@
class ScopedCallback {
/** @var callable */
protected $callback;
+ /** @var array */
+ protected $params;
/**
- * @param callable $callback
+ * @param callable|null $callback
+ * @param array $params Callback arguments (since 1.25)
* @throws Exception
*/
- public function __construct( $callback ) {
- if ( !is_callable( $callback ) ) {
+ public function __construct( $callback, array $params = array() ) {
+ if ( $callback !== null && !is_callable( $callback ) ) {
throw new InvalidArgumentException( "Provided callback is not valid." );
}
$this->callback = $callback;
+ $this->params = $params;
}
/**
@@ -67,7 +71,7 @@ class ScopedCallback {
*/
function __destruct() {
if ( $this->callback !== null ) {
- call_user_func( $this->callback );
+ call_user_func_array( $this->callback, $this->params );
}
}
}
diff --git a/includes/libs/StatusValue.php b/includes/libs/StatusValue.php
new file mode 100644
index 00000000..3c2dd409
--- /dev/null
+++ b/includes/libs/StatusValue.php
@@ -0,0 +1,316 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Generic operation result class
+ * Has warning/error list, boolean status and arbitrary value
+ *
+ * "Good" means the operation was completed with no warnings or errors.
+ *
+ * "OK" means the operation was partially or wholly completed.
+ *
+ * An operation which is not OK should have errors so that the user can be
+ * informed as to what went wrong. Calling the fatal() function sets an error
+ * message and simultaneously switches off the OK flag.
+ *
+ * The recommended pattern for Status objects is to return a StatusValue
+ * unconditionally, i.e. both on success and on failure -- so that the
+ * developer of the calling code is reminded that the function can fail, and
+ * so that a lack of error-handling will be explicit.
+ *
+ * The use of Message objects should be avoided when serializability is needed.
+ *
+ * @since 1.25
+ */
+class StatusValue {
+ /** @var bool */
+ protected $ok = true;
+ /** @var array */
+ protected $errors = array();
+
+ /** @var mixed */
+ public $value;
+ /** @var array Map of (key => bool) to indicate success of each part of batch operations */
+ public $success = array();
+ /** @var int Counter for batch operations */
+ public $successCount = 0;
+ /** @var int Counter for batch operations */
+ public $failCount = 0;
+
+ /**
+ * Factory function for fatal errors
+ *
+ * @param string|MessageSpecifier $message Message key or object
+ * @return Status
+ */
+ public static function newFatal( $message /*, parameters...*/ ) {
+ $params = func_get_args();
+ $result = new static();
+ call_user_func_array( array( &$result, 'fatal' ), $params );
+ return $result;
+ }
+
+ /**
+ * Factory function for good results
+ *
+ * @param mixed $value
+ * @return Status
+ */
+ public static function newGood( $value = null ) {
+ $result = new static();
+ $result->value = $value;
+ return $result;
+ }
+
+ /**
+ * Returns whether the operation completed and didn't have any error or
+ * warnings
+ *
+ * @return bool
+ */
+ public function isGood() {
+ return $this->ok && !$this->errors;
+ }
+
+ /**
+ * Returns whether the operation completed
+ *
+ * @return bool
+ */
+ public function isOK() {
+ return $this->ok;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getValue() {
+ return $this->value;
+ }
+
+ /**
+ * Get the list of errors
+ *
+ * Each error is a (message:string or MessageSpecifier,params:array) map
+ *
+ * @return array
+ */
+ public function getErrors() {
+ return $this->errors;
+ }
+
+ /**
+ * Change operation status
+ *
+ * @param bool $ok
+ */
+ public function setOK( $ok ) {
+ $this->ok = $ok;
+ }
+
+ /**
+ * Change operation resuklt
+ *
+ * @param bool $ok Whether the operation completed
+ * @param mixed $value
+ */
+ public function setResult( $ok, $value = null ) {
+ $this->ok = $ok;
+ $this->value = $value;
+ }
+
+ /**
+ * Add a new warning
+ *
+ * @param string|MessageSpecifier $message Message key or object
+ */
+ public function warning( $message /*, parameters... */ ) {
+ $this->errors[] = array(
+ 'type' => 'warning',
+ 'message' => $message,
+ 'params' => array_slice( func_get_args(), 1 )
+ );
+ }
+
+ /**
+ * Add an error, do not set fatal flag
+ * This can be used for non-fatal errors
+ *
+ * @param string|MessageSpecifier $message Message key or object
+ */
+ public function error( $message /*, parameters... */ ) {
+ $this->errors[] = array(
+ 'type' => 'error',
+ 'message' => $message,
+ 'params' => array_slice( func_get_args(), 1 )
+ );
+ }
+
+ /**
+ * Add an error and set OK to false, indicating that the operation
+ * as a whole was fatal
+ *
+ * @param string|MessageSpecifier $message Message key or object
+ */
+ public function fatal( $message /*, parameters... */ ) {
+ $this->errors[] = array(
+ 'type' => 'error',
+ 'message' => $message,
+ 'params' => array_slice( func_get_args(), 1 )
+ );
+ $this->ok = false;
+ }
+
+ /**
+ * Merge another status object into this one
+ *
+ * @param Status $other Other Status object
+ * @param bool $overwriteValue Whether to override the "value" member
+ */
+ public function merge( $other, $overwriteValue = false ) {
+ $this->errors = array_merge( $this->errors, $other->errors );
+ $this->ok = $this->ok && $other->ok;
+ if ( $overwriteValue ) {
+ $this->value = $other->value;
+ }
+ $this->successCount += $other->successCount;
+ $this->failCount += $other->failCount;
+ }
+
+ /**
+ * Returns a list of status messages of the given type
+ *
+ * Each entry is a map of (message:string or MessageSpecifier,params:array))
+ *
+ * @param string $type
+ * @return array
+ */
+ public function getErrorsByType( $type ) {
+ $result = array();
+ foreach ( $this->errors as $error ) {
+ if ( $error['type'] === $type ) {
+ $result[] = $error;
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Returns true if the specified message is present as a warning or error
+ *
+ * @param string|MessageSpecifier $message Message key or object to search for
+ *
+ * @return bool
+ */
+ public function hasMessage( $message ) {
+ if ( $message instanceof MessageSpecifier ) {
+ $message = $message->getKey();
+ }
+ foreach ( $this->errors as $error ) {
+ if ( $error['message'] instanceof MessageSpecifier
+ && $error['message']->getKey() === $message
+ ) {
+ return true;
+ } elseif ( $error['message'] === $message ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * If the specified source message exists, replace it with the specified
+ * destination message, but keep the same parameters as in the original error.
+ *
+ * Note, due to the lack of tools for comparing IStatusMessage objects, this
+ * function will not work when using such an object as the search parameter.
+ *
+ * @param IStatusMessage|string $source Message key or object to search for
+ * @param IStatusMessage|string $dest Replacement message key or object
+ * @return bool Return true if the replacement was done, false otherwise.
+ */
+ public function replaceMessage( $source, $dest ) {
+ $replaced = false;
+
+ foreach ( $this->errors as $index => $error ) {
+ if ( $error['message'] === $source ) {
+ $this->errors[$index]['message'] = $dest;
+ $replaced = true;
+ }
+ }
+
+ return $replaced;
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString() {
+ $status = $this->isOK() ? "OK" : "Error";
+ if ( count( $this->errors ) ) {
+ $errorcount = "collected " . ( count( $this->errors ) ) . " error(s) on the way";
+ } else {
+ $errorcount = "no errors detected";
+ }
+ if ( isset( $this->value ) ) {
+ $valstr = gettype( $this->value ) . " value set";
+ if ( is_object( $this->value ) ) {
+ $valstr .= "\"" . get_class( $this->value ) . "\" instance";
+ }
+ } else {
+ $valstr = "no value set";
+ }
+ $out = sprintf( "<%s, %s, %s>",
+ $status,
+ $errorcount,
+ $valstr
+ );
+ if ( count( $this->errors ) > 0 ) {
+ $hdr = sprintf( "+-%'-4s-+-%'-25s-+-%'-40s-+\n", "", "", "" );
+ $i = 1;
+ $out .= "\n";
+ $out .= $hdr;
+ foreach ( $this->errors as $error ) {
+ if ( $error['message'] instanceof MessageSpecifier ) {
+ $key = $error['message']->getKey();
+ $params = $error['message']->getParams();
+ } elseif ( $error['params'] ) {
+ $key = $error['message'];
+ $params = $error['params'];
+ } else {
+ $key = $error['message'];
+ $params = array();
+ }
+
+ $out .= sprintf( "| %4d | %-25.25s | %-40.40s |\n",
+ $i,
+ $key,
+ implode( " ", $params )
+ );
+ $i += 1;
+ }
+ $out .= $hdr;
+ }
+
+ return $out;
+ }
+}
diff --git a/includes/libs/StringUtils.php b/includes/libs/StringUtils.php
new file mode 100644
index 00000000..11ae0b26
--- /dev/null
+++ b/includes/libs/StringUtils.php
@@ -0,0 +1,317 @@
+<?php
+/**
+ * Methods to play with strings.
+ *
+ * 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
+ */
+
+/**
+ * A collection of static methods to play with strings.
+ */
+class StringUtils {
+ /**
+ * Test whether a string is valid UTF-8.
+ *
+ * The function check for invalid byte sequences, overlong encoding but
+ * not for different normalisations.
+ *
+ * This relies internally on the mbstring function mb_check_encoding()
+ * hardcoded to check against UTF-8. Whenever the function is not available
+ * we fallback to a pure PHP implementation. Setting $disableMbstring to
+ * true will skip the use of mb_check_encoding, this is mostly intended for
+ * unit testing our internal implementation.
+ *
+ * @since 1.21
+ * @note In MediaWiki 1.21, this function did not provide proper UTF-8 validation.
+ * In particular, the pure PHP code path did not in fact check for overlong forms.
+ * Beware of this when backporting code to that version of MediaWiki.
+ *
+ * @param string $value String to check
+ * @param bool $disableMbstring Whether to use the pure PHP
+ * implementation instead of trying mb_check_encoding. Intended for unit
+ * testing. Default: false
+ *
+ * @return bool Whether the given $value is a valid UTF-8 encoded string
+ */
+ static function isUtf8( $value, $disableMbstring = false ) {
+ $value = (string)$value;
+
+ // If the mbstring extension is loaded, use it. However, before PHP 5.4, values above
+ // U+10FFFF are incorrectly allowed, so we have to check for them separately.
+ if ( !$disableMbstring && function_exists( 'mb_check_encoding' ) ) {
+ static $newPHP;
+ if ( $newPHP === null ) {
+ $newPHP = !mb_check_encoding( "\xf4\x90\x80\x80", 'UTF-8' );
+ }
+
+ return mb_check_encoding( $value, 'UTF-8' ) &&
+ ( $newPHP || preg_match( "/\xf4[\x90-\xbf]|[\xf5-\xff]/S", $value ) === 0 );
+ }
+
+ if ( preg_match( "/[\x80-\xff]/S", $value ) === 0 ) {
+ // String contains only ASCII characters, has to be valid
+ return true;
+ }
+
+ // PCRE implements repetition using recursion; to avoid a stack overflow (and segfault)
+ // for large input, we check for invalid sequences (<= 5 bytes) rather than valid
+ // sequences, which can be as long as the input string is. Multiple short regexes are
+ // used rather than a single long regex for performance.
+ static $regexes;
+ if ( $regexes === null ) {
+ $cont = "[\x80-\xbf]";
+ $after = "(?!$cont)"; // "(?:[^\x80-\xbf]|$)" would work here
+ $regexes = array(
+ // Continuation byte at the start
+ "/^$cont/",
+
+ // ASCII byte followed by a continuation byte
+ "/[\\x00-\x7f]$cont/S",
+
+ // Illegal byte
+ "/[\xc0\xc1\xf5-\xff]/S",
+
+ // Invalid 2-byte sequence, or valid one then an extra continuation byte
+ "/[\xc2-\xdf](?!$cont$after)/S",
+
+ // Invalid 3-byte sequence, or valid one then an extra continuation byte
+ "/\xe0(?![\xa0-\xbf]$cont$after)/",
+ "/[\xe1-\xec\xee\xef](?!$cont{2}$after)/S",
+ "/\xed(?![\x80-\x9f]$cont$after)/",
+
+ // Invalid 4-byte sequence, or valid one then an extra continuation byte
+ "/\xf0(?![\x90-\xbf]$cont{2}$after)/",
+ "/[\xf1-\xf3](?!$cont{3}$after)/S",
+ "/\xf4(?![\x80-\x8f]$cont{2}$after)/",
+ );
+ }
+
+ foreach ( $regexes as $regex ) {
+ if ( preg_match( $regex, $value ) !== 0 ) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Perform an operation equivalent to
+ *
+ * preg_replace( "!$startDelim(.*?)$endDelim!", $replace, $subject );
+ *
+ * except that it's worst-case O(N) instead of O(N^2)
+ *
+ * Compared to delimiterReplace(), this implementation is fast but memory-
+ * hungry and inflexible. The memory requirements are such that I don't
+ * recommend using it on anything but guaranteed small chunks of text.
+ *
+ * @param string $startDelim
+ * @param string $endDelim
+ * @param string $replace
+ * @param string $subject
+ *
+ * @return string
+ */
+ static function hungryDelimiterReplace( $startDelim, $endDelim, $replace, $subject ) {
+ $segments = explode( $startDelim, $subject );
+ $output = array_shift( $segments );
+ foreach ( $segments as $s ) {
+ $endDelimPos = strpos( $s, $endDelim );
+ if ( $endDelimPos === false ) {
+ $output .= $startDelim . $s;
+ } else {
+ $output .= $replace . substr( $s, $endDelimPos + strlen( $endDelim ) );
+ }
+ }
+
+ return $output;
+ }
+
+ /**
+ * Perform an operation equivalent to
+ *
+ * preg_replace_callback( "!$startDelim(.*)$endDelim!s$flags", $callback, $subject )
+ *
+ * This implementation is slower than hungryDelimiterReplace but uses far less
+ * memory. The delimiters are literal strings, not regular expressions.
+ *
+ * If the start delimiter ends with an initial substring of the end delimiter,
+ * e.g. in the case of C-style comments, the behavior differs from the model
+ * regex. In this implementation, the end must share no characters with the
+ * start, so e.g. /*\/ is not considered to be both the start and end of a
+ * comment. /*\/xy/*\/ is considered to be a single comment with contents /xy/.
+ *
+ * @param string $startDelim Start delimiter
+ * @param string $endDelim End delimiter
+ * @param callable $callback Function to call on each match
+ * @param string $subject
+ * @param string $flags Regular expression flags
+ * @throws InvalidArgumentException
+ * @return string
+ */
+ static function delimiterReplaceCallback( $startDelim, $endDelim, $callback,
+ $subject, $flags = ''
+ ) {
+ $inputPos = 0;
+ $outputPos = 0;
+ $output = '';
+ $foundStart = false;
+ $encStart = preg_quote( $startDelim, '!' );
+ $encEnd = preg_quote( $endDelim, '!' );
+ $strcmp = strpos( $flags, 'i' ) === false ? 'strcmp' : 'strcasecmp';
+ $endLength = strlen( $endDelim );
+ $m = array();
+
+ while ( $inputPos < strlen( $subject ) &&
+ preg_match( "!($encStart)|($encEnd)!S$flags", $subject, $m, PREG_OFFSET_CAPTURE, $inputPos )
+ ) {
+ $tokenOffset = $m[0][1];
+ if ( $m[1][0] != '' ) {
+ if ( $foundStart &&
+ $strcmp( $endDelim, substr( $subject, $tokenOffset, $endLength ) ) == 0
+ ) {
+ # An end match is present at the same location
+ $tokenType = 'end';
+ $tokenLength = $endLength;
+ } else {
+ $tokenType = 'start';
+ $tokenLength = strlen( $m[0][0] );
+ }
+ } elseif ( $m[2][0] != '' ) {
+ $tokenType = 'end';
+ $tokenLength = strlen( $m[0][0] );
+ } else {
+ throw new InvalidArgumentException( 'Invalid delimiter given to ' . __METHOD__ );
+ }
+
+ if ( $tokenType == 'start' ) {
+ # Only move the start position if we haven't already found a start
+ # This means that START START END matches outer pair
+ if ( !$foundStart ) {
+ # Found start
+ $inputPos = $tokenOffset + $tokenLength;
+ # Write out the non-matching section
+ $output .= substr( $subject, $outputPos, $tokenOffset - $outputPos );
+ $outputPos = $tokenOffset;
+ $contentPos = $inputPos;
+ $foundStart = true;
+ } else {
+ # Move the input position past the *first character* of START,
+ # to protect against missing END when it overlaps with START
+ $inputPos = $tokenOffset + 1;
+ }
+ } elseif ( $tokenType == 'end' ) {
+ if ( $foundStart ) {
+ # Found match
+ $output .= call_user_func( $callback, array(
+ substr( $subject, $outputPos, $tokenOffset + $tokenLength - $outputPos ),
+ substr( $subject, $contentPos, $tokenOffset - $contentPos )
+ ) );
+ $foundStart = false;
+ } else {
+ # Non-matching end, write it out
+ $output .= substr( $subject, $inputPos, $tokenOffset + $tokenLength - $outputPos );
+ }
+ $inputPos = $outputPos = $tokenOffset + $tokenLength;
+ } else {
+ throw new InvalidArgumentException( 'Invalid delimiter given to ' . __METHOD__ );
+ }
+ }
+ if ( $outputPos < strlen( $subject ) ) {
+ $output .= substr( $subject, $outputPos );
+ }
+
+ return $output;
+ }
+
+ /**
+ * Perform an operation equivalent to
+ *
+ * preg_replace( "!$startDelim(.*)$endDelim!$flags", $replace, $subject )
+ *
+ * @param string $startDelim Start delimiter regular expression
+ * @param string $endDelim End delimiter regular expression
+ * @param string $replace Replacement string. May contain $1, which will be
+ * replaced by the text between the delimiters
+ * @param string $subject String to search
+ * @param string $flags Regular expression flags
+ * @return string The string with the matches replaced
+ */
+ static function delimiterReplace( $startDelim, $endDelim, $replace, $subject, $flags = '' ) {
+ $replacer = new RegexlikeReplacer( $replace );
+
+ return self::delimiterReplaceCallback( $startDelim, $endDelim,
+ $replacer->cb(), $subject, $flags );
+ }
+
+ /**
+ * More or less "markup-safe" explode()
+ * Ignores any instances of the separator inside <...>
+ * @param string $separator
+ * @param string $text
+ * @return array
+ */
+ static function explodeMarkup( $separator, $text ) {
+ $placeholder = "\x00";
+
+ // Remove placeholder instances
+ $text = str_replace( $placeholder, '', $text );
+
+ // Replace instances of the separator inside HTML-like tags with the placeholder
+ $replacer = new DoubleReplacer( $separator, $placeholder );
+ $cleaned = StringUtils::delimiterReplaceCallback( '<', '>', $replacer->cb(), $text );
+
+ // Explode, then put the replaced separators back in
+ $items = explode( $separator, $cleaned );
+ foreach ( $items as $i => $str ) {
+ $items[$i] = str_replace( $placeholder, $separator, $str );
+ }
+
+ return $items;
+ }
+
+ /**
+ * Escape a string to make it suitable for inclusion in a preg_replace()
+ * replacement parameter.
+ *
+ * @param string $string
+ * @return string
+ */
+ static function escapeRegexReplacement( $string ) {
+ $string = str_replace( '\\', '\\\\', $string );
+ $string = str_replace( '$', '\\$', $string );
+
+ return $string;
+ }
+
+ /**
+ * Workalike for explode() with limited memory usage.
+ * Returns an Iterator
+ * @param string $separator
+ * @param string $subject
+ * @return ArrayIterator|ExplodeIterator
+ */
+ static function explode( $separator, $subject ) {
+ if ( substr_count( $subject, $separator ) > 1000 ) {
+ return new ExplodeIterator( $separator, $subject );
+ } else {
+ return new ArrayIterator( explode( $separator, $subject ) );
+ }
+ }
+}
diff --git a/includes/libs/UDPTransport.php b/includes/libs/UDPTransport.php
new file mode 100644
index 00000000..7fad882a
--- /dev/null
+++ b/includes/libs/UDPTransport.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A generic class to send a message over UDP
+ *
+ * If a message prefix is provided to the constructor or via
+ * UDPTransport::newFromString(), the payload of the UDP datagrams emitted
+ * will be formatted with the prefix and a single space at the start of each
+ * line. This is the payload format expected by the udp2log service.
+ *
+ * @since 1.25
+ */
+class UDPTransport {
+ private $host, $port, $prefix, $domain;
+
+ /**
+ * @param string $host IP address to send to
+ * @param int $port port number
+ * @param int $domain AF_INET or AF_INET6 constant
+ * @param string|bool $prefix Prefix to use, false for no prefix
+ */
+ public function __construct( $host, $port, $domain, $prefix = false ) {
+ $this->host = $host;
+ $this->port = $port;
+ $this->domain = $domain;
+ $this->prefix = $prefix;
+ }
+
+ /**
+ * @param string $info In the format of "udp://host:port/prefix"
+ * @return UDPTransport
+ * @throws InvalidArgumentException
+ */
+ public static function newFromString( $info ) {
+ if ( preg_match( '!^udp:(?://)?\[([0-9a-fA-F:]+)\]:(\d+)(?:/(.*))?$!', $info, $m ) ) {
+ // IPv6 bracketed host
+ $host = $m[1];
+ $port = intval( $m[2] );
+ $prefix = isset( $m[3] ) ? $m[3] : false;
+ $domain = AF_INET6;
+ } elseif ( preg_match( '!^udp:(?://)?([a-zA-Z0-9.-]+):(\d+)(?:/(.*))?$!', $info, $m ) ) {
+ $host = $m[1];
+ if ( !IP::isIPv4( $host ) ) {
+ $host = gethostbyname( $host );
+ }
+ $port = intval( $m[2] );
+ $prefix = isset( $m[3] ) ? $m[3] : false;
+ $domain = AF_INET;
+ } else {
+ throw new InvalidArgumentException( __METHOD__ . ': Invalid UDP specification' );
+ }
+
+ return new self( $host, $port, $domain, $prefix );
+ }
+
+ /**
+ * @param string $text
+ */
+ public function emit( $text ) {
+ // Clean it up for the multiplexer
+ if ( $this->prefix !== false ) {
+ $text = preg_replace( '/^/m', $this->prefix . ' ', $text );
+
+ // Limit to 64KB
+ if ( strlen( $text ) > 65506 ) {
+ $text = substr( $text, 0, 65506 );
+ }
+
+ if ( substr( $text, -1 ) != "\n" ) {
+ $text .= "\n";
+ }
+ } elseif ( strlen( $text ) > 65507 ) {
+ $text = substr( $text, 0, 65507 );
+ }
+
+ $sock = socket_create( $this->domain, SOCK_DGRAM, SOL_UDP );
+ if ( !$sock ) { // @todo should this throw an exception?
+ return;
+ }
+
+ socket_sendto( $sock, $text, strlen( $text ), 0, $this->host, $this->port );
+ socket_close( $sock );
+ }
+}
diff --git a/includes/libs/Xhprof.php b/includes/libs/Xhprof.php
new file mode 100644
index 00000000..5ed67c73
--- /dev/null
+++ b/includes/libs/Xhprof.php
@@ -0,0 +1,445 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Convenience class for working with XHProf
+ * <https://github.com/phacility/xhprof>. XHProf can be installed as a PECL
+ * package for use with PHP5 (Zend PHP) and is built-in to HHVM 3.3.0.
+ *
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ * @since 1.25
+ */
+class Xhprof {
+
+ /**
+ * @var array $config
+ */
+ protected $config;
+
+ /**
+ * Hierarchical profiling data returned by xhprof.
+ * @var array $hieraData
+ */
+ protected $hieraData;
+
+ /**
+ * Per-function inclusive data.
+ * @var array $inclusive
+ */
+ protected $inclusive;
+
+ /**
+ * Per-function inclusive and exclusive data.
+ * @var array $complete
+ */
+ protected $complete;
+
+ /**
+ * Configuration data can contain:
+ * - flags: Optional flags to add additional information to the
+ * profiling data collected.
+ * (XHPROF_FLAGS_NO_BUILTINS, XHPROF_FLAGS_CPU,
+ * XHPROF_FLAGS_MEMORY)
+ * - exclude: Array of function names to exclude from profiling.
+ * - include: Array of function names to include in profiling.
+ * - sort: Key to sort per-function reports on.
+ *
+ * Note: When running under HHVM, xhprof will always behave as though the
+ * XHPROF_FLAGS_NO_BUILTINS flag has been used unless the
+ * Eval.JitEnableRenameFunction option is enabled for the HHVM process.
+ *
+ * @param array $config
+ */
+ public function __construct( array $config = array() ) {
+ $this->config = array_merge(
+ array(
+ 'flags' => 0,
+ 'exclude' => array(),
+ 'include' => null,
+ 'sort' => 'wt',
+ ),
+ $config
+ );
+
+ xhprof_enable( $this->config['flags'], array(
+ 'ignored_functions' => $this->config['exclude']
+ ) );
+ }
+
+ /**
+ * Stop collecting profiling data.
+ *
+ * Only the first invocation of this method will effect the internal
+ * object state. Subsequent calls will return the data collected by the
+ * initial call.
+ *
+ * @return array Collected profiling data (possibly cached)
+ */
+ public function stop() {
+ if ( $this->hieraData === null ) {
+ $this->hieraData = $this->pruneData( xhprof_disable() );
+ }
+ return $this->hieraData;
+ }
+
+ /**
+ * Load raw data from a prior run for analysis.
+ * Stops any existing data collection and clears internal caches.
+ *
+ * Any 'include' filters configured for this Xhprof instance will be
+ * enforced on the data as it is loaded. 'exclude' filters will however
+ * not be enforced as they are an XHProf intrinsic behavior.
+ *
+ * @param array $data
+ * @see getRawData()
+ */
+ public function loadRawData( array $data ) {
+ $this->stop();
+ $this->inclusive = null;
+ $this->complete = null;
+ $this->hieraData = $this->pruneData( $data );
+ }
+
+ /**
+ * Get raw data collected by xhprof.
+ *
+ * If data collection has not been stopped yet this method will halt
+ * collection to gather the profiling data.
+ *
+ * Each key in the returned array is an edge label for the call graph in
+ * the form "caller==>callee". There is once special case edge labled
+ * simply "main()" which represents the global scope entry point of the
+ * application.
+ *
+ * XHProf will collect different data depending on the flags that are used:
+ * - ct: Number of matching events seen.
+ * - wt: Inclusive elapsed wall time for this event in microseconds.
+ * - cpu: Inclusive elapsed cpu time for this event in microseconds.
+ * (XHPROF_FLAGS_CPU)
+ * - mu: Delta of memory usage from start to end of callee in bytes.
+ * (XHPROF_FLAGS_MEMORY)
+ * - pmu: Delta of peak memory usage from start to end of callee in
+ * bytes. (XHPROF_FLAGS_MEMORY)
+ * - alloc: Delta of amount memory requested from malloc() by the callee,
+ * in bytes. (XHPROF_FLAGS_MALLOC)
+ * - free: Delta of amount of memory passed to free() by the callee, in
+ * bytes. (XHPROF_FLAGS_MALLOC)
+ *
+ * @return array
+ * @see stop()
+ * @see getInclusiveMetrics()
+ * @see getCompleteMetrics()
+ */
+ public function getRawData() {
+ return $this->stop();
+ }
+
+ /**
+ * Convert an xhprof data key into an array of ['parent', 'child']
+ * function names.
+ *
+ * The resulting array is left padded with nulls, so a key
+ * with no parent (eg 'main()') will return [null, 'function'].
+ *
+ * @return array
+ */
+ public static function splitKey( $key ) {
+ return array_pad( explode( '==>', $key, 2 ), -2, null );
+ }
+
+ /**
+ * Remove data for functions that are not included in the 'include'
+ * configuration array.
+ *
+ * @param array $data Raw xhprof data
+ * @return array
+ */
+ protected function pruneData( $data ) {
+ if ( !$this->config['include'] ) {
+ return $data;
+ }
+
+ $want = array_fill_keys( $this->config['include'], true );
+ $want['main()'] = true;
+
+ $keep = array();
+ foreach ( $data as $key => $stats ) {
+ list( $parent, $child ) = self::splitKey( $key );
+ if ( isset( $want[$parent] ) || isset( $want[$child] ) ) {
+ $keep[$key] = $stats;
+ }
+ }
+ return $keep;
+ }
+
+ /**
+ * Get the inclusive metrics for each function call. Inclusive metrics
+ * for given function include the metrics for all functions that were
+ * called from that function during the measurement period.
+ *
+ * If data collection has not been stopped yet this method will halt
+ * collection to gather the profiling data.
+ *
+ * See getRawData() for a description of the metric that are returned for
+ * each funcition call. The values for the wt, cpu, mu and pmu metrics are
+ * arrays with these values:
+ * - total: Cumulative value
+ * - min: Minimum value
+ * - mean: Mean (average) value
+ * - max: Maximum value
+ * - variance: Variance (spread) of the values
+ *
+ * @return array
+ * @see getRawData()
+ * @see getCompleteMetrics()
+ */
+ public function getInclusiveMetrics() {
+ if ( $this->inclusive === null ) {
+ // Make sure we have data to work with
+ $this->stop();
+
+ $main = $this->hieraData['main()'];
+ $hasCpu = isset( $main['cpu'] );
+ $hasMu = isset( $main['mu'] );
+ $hasAlloc = isset( $main['alloc'] );
+
+ $this->inclusive = array();
+ foreach ( $this->hieraData as $key => $stats ) {
+ list( $parent, $child ) = self::splitKey( $key );
+ if ( !isset( $this->inclusive[$child] ) ) {
+ $this->inclusive[$child] = array(
+ 'ct' => 0,
+ 'wt' => new RunningStat(),
+ );
+ if ( $hasCpu ) {
+ $this->inclusive[$child]['cpu'] = new RunningStat();
+ }
+ if ( $hasMu ) {
+ $this->inclusive[$child]['mu'] = new RunningStat();
+ $this->inclusive[$child]['pmu'] = new RunningStat();
+ }
+ if ( $hasAlloc ) {
+ $this->inclusive[$child]['alloc'] = new RunningStat();
+ $this->inclusive[$child]['free'] = new RunningStat();
+ }
+ }
+
+ $this->inclusive[$child]['ct'] += $stats['ct'];
+ foreach ( $stats as $stat => $value ) {
+ if ( $stat === 'ct' ) {
+ continue;
+ }
+
+ if ( !isset( $this->inclusive[$child][$stat] ) ) {
+ // Ignore unknown stats
+ continue;
+ }
+
+ for ( $i = 0; $i < $stats['ct']; $i++ ) {
+ $this->inclusive[$child][$stat]->push(
+ $value / $stats['ct']
+ );
+ }
+ }
+ }
+
+ // Convert RunningStat instances to static arrays and add
+ // percentage stats.
+ foreach ( $this->inclusive as $func => $stats ) {
+ foreach ( $stats as $name => $value ) {
+ if ( $value instanceof RunningStat ) {
+ $total = $value->m1 * $value->n;
+ $percent = ( isset( $main[$name] ) && $main[$name] )
+ ? 100 * $total / $main[$name]
+ : 0;
+ $this->inclusive[$func][$name] = array(
+ 'total' => $total,
+ 'min' => $value->min,
+ 'mean' => $value->m1,
+ 'max' => $value->max,
+ 'variance' => $value->m2,
+ 'percent' => $percent,
+ );
+ }
+ }
+ }
+
+ uasort( $this->inclusive, self::makeSortFunction(
+ $this->config['sort'], 'total'
+ ) );
+ }
+ return $this->inclusive;
+ }
+
+ /**
+ * Get the inclusive and exclusive metrics for each function call.
+ *
+ * If data collection has not been stopped yet this method will halt
+ * collection to gather the profiling data.
+ *
+ * In addition to the normal data contained in the inclusive metrics, the
+ * metrics have an additional 'exclusive' measurement which is the total
+ * minus the totals of all child function calls.
+ *
+ * @return array
+ * @see getRawData()
+ * @see getInclusiveMetrics()
+ */
+ public function getCompleteMetrics() {
+ if ( $this->complete === null ) {
+ // Start with inclusive data
+ $this->complete = $this->getInclusiveMetrics();
+
+ foreach ( $this->complete as $func => $stats ) {
+ foreach ( $stats as $stat => $value ) {
+ if ( $stat === 'ct' ) {
+ continue;
+ }
+ // Initialize exclusive data with inclusive totals
+ $this->complete[$func][$stat]['exclusive'] = $value['total'];
+ }
+ // Add sapce for call tree information to be filled in later
+ $this->complete[$func]['calls'] = array();
+ $this->complete[$func]['subcalls'] = array();
+ }
+
+ foreach ( $this->hieraData as $key => $stats ) {
+ list( $parent, $child ) = self::splitKey( $key );
+ if ( $parent !== null ) {
+ // Track call tree information
+ $this->complete[$child]['calls'][$parent] = $stats;
+ $this->complete[$parent]['subcalls'][$child] = $stats;
+ }
+
+ if ( isset( $this->complete[$parent] ) ) {
+ // Deduct child inclusive data from exclusive data
+ foreach ( $stats as $stat => $value ) {
+ if ( $stat === 'ct' ) {
+ continue;
+ }
+
+ if ( !isset( $this->complete[$parent][$stat] ) ) {
+ // Ignore unknown stats
+ continue;
+ }
+
+ $this->complete[$parent][$stat]['exclusive'] -= $value;
+ }
+ }
+ }
+
+ uasort( $this->complete, self::makeSortFunction(
+ $this->config['sort'], 'exclusive'
+ ) );
+ }
+ return $this->complete;
+ }
+
+ /**
+ * Get a list of all callers of a given function.
+ *
+ * @param string $function Function name
+ * @return array
+ * @see getEdges()
+ */
+ public function getCallers( $function ) {
+ $edges = $this->getCompleteMetrics();
+ if ( isset( $edges[$function]['calls'] ) ) {
+ return array_keys( $edges[$function]['calls'] );
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Get a list of all callees from a given function.
+ *
+ * @param string $function Function name
+ * @return array
+ * @see getEdges()
+ */
+ public function getCallees( $function ) {
+ $edges = $this->getCompleteMetrics();
+ if ( isset( $edges[$function]['subcalls'] ) ) {
+ return array_keys( $edges[$function]['subcalls'] );
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Find the critical path for the given metric.
+ *
+ * @param string $metric Metric to find critical path for
+ * @return array
+ */
+ public function getCriticalPath( $metric = 'wt' ) {
+ $this->stop();
+ $func = 'main()';
+ $path = array(
+ $func => $this->hieraData[$func],
+ );
+ while ( $func ) {
+ $callees = $this->getCallees( $func );
+ $maxCallee = null;
+ $maxCall = null;
+ foreach ( $callees as $callee ) {
+ $call = "{$func}==>{$callee}";
+ if ( $maxCall === null ||
+ $this->hieraData[$call][$metric] >
+ $this->hieraData[$maxCall][$metric]
+ ) {
+ $maxCallee = $callee;
+ $maxCall = $call;
+ }
+ }
+ if ( $maxCall !== null ) {
+ $path[$maxCall] = $this->hieraData[$maxCall];
+ }
+ $func = $maxCallee;
+ }
+ return $path;
+ }
+
+ /**
+ * Make a closure to use as a sort function. The resulting function will
+ * sort by descending numeric values (largest value first).
+ *
+ * @param string $key Data key to sort on
+ * @param string $sub Sub key to sort array values on
+ * @return Closure
+ */
+ public static function makeSortFunction( $key, $sub ) {
+ return function ( $a, $b ) use ( $key, $sub ) {
+ if ( isset( $a[$key] ) && isset( $b[$key] ) ) {
+ // Descending sort: larger values will be first in result.
+ // Assumes all values are numeric.
+ // Values for 'main()' will not have sub keys
+ $valA = is_array( $a[$key] ) ? $a[$key][$sub] : $a[$key];
+ $valB = is_array( $b[$key] ) ? $b[$key][$sub] : $b[$key];
+ return $valB - $valA;
+ } else {
+ // Sort datum with the key before those without
+ return isset( $a[$key] ) ? -1 : 1;
+ }
+ };
+ }
+}
diff --git a/includes/libs/XmlTypeCheck.php b/includes/libs/XmlTypeCheck.php
index 31a4e28a..6d01986d 100644
--- a/includes/libs/XmlTypeCheck.php
+++ b/includes/libs/XmlTypeCheck.php
@@ -75,7 +75,7 @@ class XmlTypeCheck {
* SAX element handler event. This gives you access to the element
* namespace, name, attributes, and text contents.
* Filter should return 'true' to toggle on $this->filterMatch
- * @param boolean $isFile (optional) indicates if the first parameter is a
+ * @param bool $isFile (optional) indicates if the first parameter is a
* filename (default, true) or if it is a string (false)
* @param array $options list of additional parsing options:
* processing_instruction_handler: Callback for xml_set_processing_instruction_handler
diff --git a/includes/libs/composer/ComposerJson.php b/includes/libs/composer/ComposerJson.php
new file mode 100644
index 00000000..796acb56
--- /dev/null
+++ b/includes/libs/composer/ComposerJson.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * Reads a composer.json file and provides accessors to get
+ * its hash and the required dependencies
+ *
+ * @since 1.25
+ */
+class ComposerJson {
+
+ /**
+ * @param string $location
+ */
+ public function __construct( $location ) {
+ $this->hash = md5_file( $location );
+ $this->contents = json_decode( file_get_contents( $location ), true );
+ }
+
+ public function getHash() {
+ return $this->hash;
+ }
+
+ /**
+ * Dependencies as specified by composer.json
+ *
+ * @return array
+ */
+ public function getRequiredDependencies() {
+ $deps = array();
+ foreach ( $this->contents['require'] as $package => $version ) {
+ if ( $package !== "php" && strpos( $package, 'ext-' ) !== 0 ) {
+ $deps[$package] = self::normalizeVersion( $version );
+ }
+ }
+
+ return $deps;
+ }
+
+ /**
+ * Strip a leading "v" from the version name
+ *
+ * @param string $version
+ * @return string
+ */
+ public static function normalizeVersion( $version ) {
+ if ( strpos( $version, 'v' ) === 0 ) {
+ // Composer auto-strips the "v" in front of the tag name
+ $version = ltrim( $version, 'v' );
+ }
+
+ return $version;
+ }
+
+}
diff --git a/includes/libs/composer/ComposerLock.php b/includes/libs/composer/ComposerLock.php
new file mode 100644
index 00000000..9c7bf2f9
--- /dev/null
+++ b/includes/libs/composer/ComposerLock.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * Reads a composer.lock file and provides accessors to get
+ * its hash and what is installed
+ *
+ * @since 1.25
+ */
+class ComposerLock {
+
+ /**
+ * @param string $location
+ */
+ public function __construct( $location ) {
+ $this->contents = json_decode( file_get_contents( $location ), true );
+ }
+
+ public function getHash() {
+ return $this->contents['hash'];
+ }
+
+ /**
+ * Dependencies currently installed according to composer.lock
+ *
+ * @return array
+ */
+ public function getInstalledDependencies() {
+ $deps = array();
+ foreach ( $this->contents['packages'] as $installed ) {
+ $deps[$installed['name']] = array(
+ 'version' => ComposerJson::normalizeVersion( $installed['version'] ),
+ 'type' => $installed['type'],
+ );
+ }
+
+ return $deps;
+ }
+}
diff --git a/includes/libs/jsminplus.php b/includes/libs/jsminplus.php
index ed0382cf..99cf399b 100644
--- a/includes/libs/jsminplus.php
+++ b/includes/libs/jsminplus.php
@@ -1017,7 +1017,7 @@ class JSParser
case KEYWORD_CATCH:
case KEYWORD_FINALLY:
- throw $this->t->newSyntaxError($tt + ' without preceding try');
+ throw $this->t->newSyntaxError($tt . ' without preceding try');
case KEYWORD_THROW:
$n = new JSNode($this->t);
diff --git a/includes/libs/normal/UtfNormal.php b/includes/libs/normal/UtfNormal.php
new file mode 100644
index 00000000..c9c05a07
--- /dev/null
+++ b/includes/libs/normal/UtfNormal.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Unicode normalization routines
+ *
+ * Copyright © 2004 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup UtfNormal
+ */
+
+/**
+ * @defgroup UtfNormal UtfNormal
+ */
+
+use UtfNormal\Validator;
+
+/**
+ * Unicode normalization routines for working with UTF-8 strings.
+ * Currently assumes that input strings are valid UTF-8!
+ *
+ * Not as fast as I'd like, but should be usable for most purposes.
+ * UtfNormal::toNFC() will bail early if given ASCII text or text
+ * it can quickly determine is already normalized.
+ *
+ * All functions can be called static.
+ *
+ * See description of forms at http://www.unicode.org/reports/tr15/
+ *
+ * @deprecated since 1.25, use UtfNormal\Validator directly
+ * @ingroup UtfNormal
+ */
+class UtfNormal {
+ /**
+ * The ultimate convenience function! Clean up invalid UTF-8 sequences,
+ * and convert to normal form C, canonical composition.
+ *
+ * Fast return for pure ASCII strings; some lesser optimizations for
+ * strings containing only known-good characters. Not as fast as toNFC().
+ *
+ * @param string $string a UTF-8 string
+ * @return string a clean, shiny, normalized UTF-8 string
+ */
+ static function cleanUp( $string ) {
+ return Validator::cleanUp( $string );
+ }
+
+ /**
+ * Convert a UTF-8 string to normal form C, canonical composition.
+ * Fast return for pure ASCII strings; some lesser optimizations for
+ * strings containing only known-good characters.
+ *
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return string a UTF-8 string in normal form C
+ */
+ static function toNFC( $string ) {
+ return Validator::toNFC( $string );
+ }
+
+ /**
+ * Convert a UTF-8 string to normal form D, canonical decomposition.
+ * Fast return for pure ASCII strings.
+ *
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return string a UTF-8 string in normal form D
+ */
+ static function toNFD( $string ) {
+ return Validator::toNFD( $string );
+ }
+
+ /**
+ * Convert a UTF-8 string to normal form KC, compatibility composition.
+ * This may cause irreversible information loss, use judiciously.
+ * Fast return for pure ASCII strings.
+ *
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return string a UTF-8 string in normal form KC
+ */
+ static function toNFKC( $string ) {
+ return Validator::toNFKC( $string );
+ }
+
+ /**
+ * Convert a UTF-8 string to normal form KD, compatibility decomposition.
+ * This may cause irreversible information loss, use judiciously.
+ * Fast return for pure ASCII strings.
+ *
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return string a UTF-8 string in normal form KD
+ */
+ static function toNFKD( $string ) {
+ return Validator::toNFKD( $string );
+ }
+
+ /**
+ * Returns true if the string is _definitely_ in NFC.
+ * Returns false if not or uncertain.
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return bool
+ */
+ static function quickIsNFC( $string ) {
+ return Validator::quickIsNFC( $string );
+ }
+
+ /**
+ * Returns true if the string is _definitely_ in NFC.
+ * Returns false if not or uncertain.
+ * @param string $string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
+ * @return bool
+ */
+ static function quickIsNFCVerify( &$string ) {
+ return Validator::quickIsNFCVerify( $string );
+ }
+}
diff --git a/includes/libs/normal/UtfNormalDefines.php b/includes/libs/normal/UtfNormalDefines.php
new file mode 100644
index 00000000..b8e44c77
--- /dev/null
+++ b/includes/libs/normal/UtfNormalDefines.php
@@ -0,0 +1,186 @@
+<?php
+/**
+ * Backwards-compatability constants which are now provided by the
+ * UtfNormal library. They are hardcoded here since they are needed
+ * before the composer autoloader is initialized.
+ *
+ * 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 UtfNormal
+ */
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_FIRST', 0xac00 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_LAST', 0xd7a3 );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_LBASE', 0x1100 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_VBASE', 0x1161 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_TBASE', 0x11a7 );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_LCOUNT', 19 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_VCOUNT', 21 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_TCOUNT', 28 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_NCOUNT', UNICODE_HANGUL_VCOUNT * UNICODE_HANGUL_TCOUNT );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_LEND', UNICODE_HANGUL_LBASE + UNICODE_HANGUL_LCOUNT - 1 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_VEND', UNICODE_HANGUL_VBASE + UNICODE_HANGUL_VCOUNT - 1 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_HANGUL_TEND', UNICODE_HANGUL_TBASE + UNICODE_HANGUL_TCOUNT - 1 );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_SURROGATE_FIRST', 0xd800 );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_SURROGATE_LAST', 0xdfff );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_MAX', 0x10ffff );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UNICODE_REPLACEMENT', 0xfffd );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_FIRST', "\xea\xb0\x80" /*codepointToUtf8( UNICODE_HANGUL_FIRST )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_LAST', "\xed\x9e\xa3" /*codepointToUtf8( UNICODE_HANGUL_LAST )*/ );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_LBASE', "\xe1\x84\x80" /*codepointToUtf8( UNICODE_HANGUL_LBASE )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_VBASE', "\xe1\x85\xa1" /*codepointToUtf8( UNICODE_HANGUL_VBASE )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_TBASE', "\xe1\x86\xa7" /*codepointToUtf8( UNICODE_HANGUL_TBASE )*/ );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_LEND', "\xe1\x84\x92" /*codepointToUtf8( UNICODE_HANGUL_LEND )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_VEND', "\xe1\x85\xb5" /*codepointToUtf8( UNICODE_HANGUL_VEND )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HANGUL_TEND', "\xe1\x87\x82" /*codepointToUtf8( UNICODE_HANGUL_TEND )*/ );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_SURROGATE_FIRST', "\xed\xa0\x80" /*codepointToUtf8( UNICODE_SURROGATE_FIRST )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_SURROGATE_LAST', "\xed\xbf\xbf" /*codepointToUtf8( UNICODE_SURROGATE_LAST )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_MAX', "\xf4\x8f\xbf\xbf" /*codepointToUtf8( UNICODE_MAX )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_REPLACEMENT', "\xef\xbf\xbd" /*codepointToUtf8( UNICODE_REPLACEMENT )*/ );
+#define( 'UTF8_REPLACEMENT', '!' );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_OVERLONG_A', "\xc1\xbf" );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_OVERLONG_B', "\xe0\x9f\xbf" );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_OVERLONG_C', "\xf0\x8f\xbf\xbf" );
+
+# These two ranges are illegal
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_FDD0', "\xef\xb7\x90" /*codepointToUtf8( 0xfdd0 )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_FDEF', "\xef\xb7\xaf" /*codepointToUtf8( 0xfdef )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_FFFE', "\xef\xbf\xbe" /*codepointToUtf8( 0xfffe )*/ );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_FFFF', "\xef\xbf\xbf" /*codepointToUtf8( 0xffff )*/ );
+
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_HEAD', false );
+/**
+ * @deprecated since 1.25, use UtfNormal\Constants instead
+ */
+define( 'UTF8_TAIL', true );
diff --git a/includes/libs/normal/UtfNormalUtil.php b/includes/libs/normal/UtfNormalUtil.php
new file mode 100644
index 00000000..ad9a2b9a
--- /dev/null
+++ b/includes/libs/normal/UtfNormalUtil.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * Some of these functions are adapted from places in MediaWiki.
+ * Should probably merge them for consistency.
+ *
+ * Copyright © 2004 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup UtfNormal
+ */
+
+
+use UtfNormal\Utils;
+/**
+ * Return UTF-8 sequence for a given Unicode code point.
+ *
+ * @param $codepoint Integer:
+ * @return String
+ * @throws InvalidArgumentException if fed out of range data.
+ * @public
+ * @deprecated since 1.25, use UtfNormal\Utils directly
+ */
+function codepointToUtf8( $codepoint ) {
+ return Utils::codepointToUtf8( $codepoint );
+}
+
+/**
+ * Take a series of space-separated hexadecimal numbers representing
+ * Unicode code points and return a UTF-8 string composed of those
+ * characters. Used by UTF-8 data generation and testing routines.
+ *
+ * @param $sequence String
+ * @return String
+ * @throws InvalidArgumentException if fed out of range data.
+ * @private
+ * @deprecated since 1.25, use UtfNormal\Utils directly
+ */
+function hexSequenceToUtf8( $sequence ) {
+ return Utils::hexSequenceToUtf8( $sequence );
+}
+
+/**
+ * Take a UTF-8 string and return a space-separated series of hex
+ * numbers representing Unicode code points. For debugging.
+ *
+ * @fixme this is private but extensions + maint scripts are using it
+ * @param string $str UTF-8 string.
+ * @return string
+ * @private
+ */
+function utf8ToHexSequence( $str ) {
+ $buf = '';
+ foreach ( preg_split( '//u', $str, -1, PREG_SPLIT_NO_EMPTY ) as $cp ) {
+ $buf .= sprintf( '%04x ', UtfNormal\Utils::utf8ToCodepoint( $cp ) );
+ }
+
+ return rtrim( $buf );
+}
+
+/**
+ * Determine the Unicode codepoint of a single-character UTF-8 sequence.
+ * Does not check for invalid input data.
+ *
+ * @param $char String
+ * @return Integer
+ * @public
+ * @deprecated since 1.25, use UtfNormal\Utils directly
+ */
+function utf8ToCodepoint( $char ) {
+ return Utils::utf8ToCodepoint( $char );
+}
+
+/**
+ * Escape a string for inclusion in a PHP single-quoted string literal.
+ *
+ * @param string $string string to be escaped.
+ * @return String: escaped string.
+ * @public
+ * @deprecated since 1.25, use UtfNormal\Utils directly
+ */
+function escapeSingleString( $string ) {
+ return Utils::escapeSingleString( $string );
+}
diff --git a/includes/libs/objectcache/APCBagOStuff.php b/includes/libs/objectcache/APCBagOStuff.php
new file mode 100644
index 00000000..eaf11557
--- /dev/null
+++ b/includes/libs/objectcache/APCBagOStuff.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Object caching using PHP's APC accelerator.
+ *
+ * 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 Cache
+ */
+
+/**
+ * This is a wrapper for APC's shared memory functions
+ *
+ * @ingroup Cache
+ */
+class APCBagOStuff extends BagOStuff {
+ public function get( $key, &$casToken = null ) {
+ $val = apc_fetch( $key );
+
+ $casToken = $val;
+
+ if ( is_string( $val ) ) {
+ if ( $this->isInteger( $val ) ) {
+ $val = intval( $val );
+ } else {
+ $val = unserialize( $val );
+ }
+ }
+
+ return $val;
+ }
+
+ public function set( $key, $value, $exptime = 0 ) {
+ if ( !$this->isInteger( $value ) ) {
+ $value = serialize( $value );
+ }
+
+ apc_store( $key, $value, $exptime );
+
+ return true;
+ }
+
+ public function delete( $key ) {
+ apc_delete( $key );
+
+ return true;
+ }
+
+ public function incr( $key, $value = 1 ) {
+ return apc_inc( $key, $value );
+ }
+
+ public function decr( $key, $value = 1 ) {
+ return apc_dec( $key, $value );
+ }
+}
diff --git a/includes/objectcache/BagOStuff.php b/includes/libs/objectcache/BagOStuff.php
index 1978c3ea..0b791e5a 100644
--- a/includes/objectcache/BagOStuff.php
+++ b/includes/libs/objectcache/BagOStuff.php
@@ -28,6 +28,10 @@
* @defgroup Cache Cache
*/
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+
/**
* interface is intended to be more or less compatible with
* the PHP memcached client.
@@ -40,17 +44,38 @@
*
* @ingroup Cache
*/
-abstract class BagOStuff {
+abstract class BagOStuff implements LoggerAwareInterface {
private $debugMode = false;
protected $lastError = self::ERR_NONE;
+ /**
+ * @var LoggerInterface
+ */
+ protected $logger;
+
/** Possible values for getLastError() */
const ERR_NONE = 0; // no error
const ERR_NO_RESPONSE = 1; // no response
const ERR_UNREACHABLE = 2; // can't connect
const ERR_UNEXPECTED = 3; // response gave some error
+ public function __construct( array $params = array() ) {
+ if ( isset( $params['logger'] ) ) {
+ $this->setLogger( $params['logger'] );
+ } else {
+ $this->setLogger( new NullLogger() );
+ }
+ }
+
+ /**
+ * @param LoggerInterface $logger
+ * @return null
+ */
+ public function setLogger( LoggerInterface $logger ) {
+ $this->logger = $logger;
+ }
+
/**
* @param bool $bool
*/
@@ -58,9 +83,6 @@ abstract class BagOStuff {
$this->debugMode = $bool;
}
- /* *** THE GUTS OF THE OPERATION *** */
- /* Override these with functional things in subclasses */
-
/**
* Get an item with the given key. Returns false if it does not exist.
* @param string $key
@@ -79,22 +101,11 @@ abstract class BagOStuff {
abstract public function set( $key, $value, $exptime = 0 );
/**
- * Check and set an item.
- * @param mixed $casToken
- * @param string $key
- * @param mixed $value
- * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
- * @return bool Success
- */
- abstract public function cas( $casToken, $key, $value, $exptime = 0 );
-
- /**
* Delete an item.
* @param string $key
- * @param int $time Amount of time to delay the operation (mostly memcached-specific)
* @return bool True if the item was deleted or not found, false on failure
*/
- abstract public function delete( $key, $time = 0 );
+ abstract public function delete( $key );
/**
* Merge changes into the existing cache value (possibly creating a new one).
@@ -102,29 +113,34 @@ abstract class BagOStuff {
* and takes the arguments: (this BagOStuff object, cache key, current value).
*
* @param string $key
- * @param Closure $callback Callback method to be executed
+ * @param callable $callback Callback method to be executed
* @param int $exptime Either an interval in seconds or a unix timestamp for expiry
* @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool Success
*/
- public function merge( $key, Closure $callback, $exptime = 0, $attempts = 10 ) {
- return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+ public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+ if ( !is_callable( $callback ) ) {
+ throw new Exception( "Got invalid callback." );
+ }
+
+ return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
}
/**
* @see BagOStuff::merge()
*
* @param string $key
- * @param Closure $callback Callback method to be executed
+ * @param callable $callback Callback method to be executed
* @param int $exptime Either an interval in seconds or a unix timestamp for expiry
* @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool Success
*/
- protected function mergeViaCas( $key, Closure $callback, $exptime = 0, $attempts = 10 ) {
+ protected function mergeViaCas( $key, $callback, $exptime = 0, $attempts = 10 ) {
do {
$casToken = null; // passed by reference
- $currentValue = $this->get( $key, $casToken ); // get the old value
- $value = $callback( $this, $key, $currentValue ); // derive the new value
+ $currentValue = $this->get( $key, $casToken );
+ // Derive the new value from the old value
+ $value = call_user_func( $callback, $this, $key, $currentValue );
if ( $value === false ) {
$success = true; // do nothing
@@ -141,21 +157,35 @@ abstract class BagOStuff {
}
/**
+ * Check and set an item
+ *
+ * @param mixed $casToken
+ * @param string $key
+ * @param mixed $value
+ * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+ * @return bool Success
+ */
+ protected function cas( $casToken, $key, $value, $exptime = 0 ) {
+ throw new Exception( "CAS is not implemented in " . __CLASS__ );
+ }
+
+ /**
* @see BagOStuff::merge()
*
* @param string $key
- * @param Closure $callback Callback method to be executed
+ * @param callable $callback Callback method to be executed
* @param int $exptime Either an interval in seconds or a unix timestamp for expiry
* @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool Success
*/
- protected function mergeViaLock( $key, Closure $callback, $exptime = 0, $attempts = 10 ) {
+ protected function mergeViaLock( $key, $callback, $exptime = 0, $attempts = 10 ) {
if ( !$this->lock( $key, 6 ) ) {
return false;
}
- $currentValue = $this->get( $key ); // get the old value
- $value = $callback( $this, $key, $currentValue ); // derive the new value
+ $currentValue = $this->get( $key );
+ // Derive the new value from the old value
+ $value = call_user_func( $callback, $this, $key, $currentValue );
if ( $value === false ) {
$success = true; // do nothing
@@ -173,13 +203,14 @@ abstract class BagOStuff {
/**
* @param string $key
- * @param int $timeout [optional]
+ * @param int $timeout Lock wait timeout [optional]
+ * @param int $expiry Lock expiry [optional]
* @return bool Success
*/
- public function lock( $key, $timeout = 6 ) {
+ public function lock( $key, $timeout = 6, $expiry = 6 ) {
$this->clearLastError();
$timestamp = microtime( true ); // starting UNIX timestamp
- if ( $this->add( "{$key}:lock", 1, $timeout ) ) {
+ if ( $this->add( "{$key}:lock", 1, $expiry ) ) {
return true;
} elseif ( $this->getLastError() ) {
return false;
@@ -191,18 +222,18 @@ abstract class BagOStuff {
$locked = false; // lock acquired
$attempts = 0; // failed attempts
do {
- if ( ++$attempts >= 3 && $sleep <= 1e6 ) {
+ if ( ++$attempts >= 3 && $sleep <= 5e5 ) {
// Exponentially back off after failed attempts to avoid network spam.
// About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
$sleep *= 2;
}
usleep( $sleep ); // back off
$this->clearLastError();
- $locked = $this->add( "{$key}:lock", 1, $timeout );
+ $locked = $this->add( "{$key}:lock", 1, $expiry );
if ( $this->getLastError() ) {
return false;
}
- } while ( !$locked );
+ } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout );
return $locked;
}
@@ -355,10 +386,11 @@ abstract class BagOStuff {
/**
* @param string $text
*/
- public function debug( $text ) {
+ protected function debug( $text ) {
if ( $this->debugMode ) {
- $class = get_class( $this );
- wfDebug( "$class debug: $text\n" );
+ $this->logger->debug( "{class} debug: $text", array(
+ 'class' => get_class( $this ),
+ ) );
}
}
diff --git a/includes/libs/objectcache/EmptyBagOStuff.php b/includes/libs/objectcache/EmptyBagOStuff.php
new file mode 100644
index 00000000..4ccf2707
--- /dev/null
+++ b/includes/libs/objectcache/EmptyBagOStuff.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Dummy object caching.
+ *
+ * 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 Cache
+ */
+
+/**
+ * A BagOStuff object with no objects in it. Used to provide a no-op object to calling code.
+ *
+ * @ingroup Cache
+ */
+class EmptyBagOStuff extends BagOStuff {
+ public function get( $key, &$casToken = null ) {
+ return false;
+ }
+
+ public function set( $key, $value, $exp = 0 ) {
+ return true;
+ }
+
+ public function delete( $key ) {
+ return true;
+ }
+
+ public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+ return true; // faster
+ }
+}
diff --git a/includes/libs/objectcache/HashBagOStuff.php b/includes/libs/objectcache/HashBagOStuff.php
new file mode 100644
index 00000000..2c8b05a5
--- /dev/null
+++ b/includes/libs/objectcache/HashBagOStuff.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Object caching using PHP arrays.
+ *
+ * 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 Cache
+ */
+
+/**
+ * This is a test of the interface, mainly. It stores things in an associative
+ * array, which is not going to persist between program runs.
+ *
+ * @ingroup Cache
+ */
+class HashBagOStuff extends BagOStuff {
+ /** @var array */
+ protected $bag;
+
+ function __construct( $params = array() ) {
+ parent::__construct( $params );
+ $this->bag = array();
+ }
+
+ protected function expire( $key ) {
+ $et = $this->bag[$key][1];
+
+ if ( ( $et == 0 ) || ( $et > time() ) ) {
+ return false;
+ }
+
+ $this->delete( $key );
+
+ return true;
+ }
+
+ public function get( $key, &$casToken = null ) {
+ if ( !isset( $this->bag[$key] ) ) {
+ return false;
+ }
+
+ if ( $this->expire( $key ) ) {
+ return false;
+ }
+
+ $casToken = $this->bag[$key][0];
+
+ return $this->bag[$key][0];
+ }
+
+ public function set( $key, $value, $exptime = 0 ) {
+ $this->bag[$key] = array( $value, $this->convertExpiry( $exptime ) );
+ return true;
+ }
+
+ function delete( $key ) {
+ if ( !isset( $this->bag[$key] ) ) {
+ return false;
+ }
+
+ unset( $this->bag[$key] );
+
+ return true;
+ }
+
+ public function lock( $key, $timeout = 6, $expiry = 6 ) {
+ return true;
+ }
+
+ function unlock( $key ) {
+ return true;
+ }
+}
diff --git a/includes/objectcache/WinCacheBagOStuff.php b/includes/libs/objectcache/WinCacheBagOStuff.php
index 78a512ce..53625746 100644
--- a/includes/objectcache/WinCacheBagOStuff.php
+++ b/includes/libs/objectcache/WinCacheBagOStuff.php
@@ -73,7 +73,7 @@ class WinCacheBagOStuff extends BagOStuff {
* @param int $exptime Expiration time
* @return bool
*/
- public function cas( $casToken, $key, $value, $exptime = 0 ) {
+ protected function cas( $casToken, $key, $value, $exptime = 0 ) {
return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
}
@@ -81,12 +81,19 @@ class WinCacheBagOStuff extends BagOStuff {
* Remove a value from the WinCache object cache
*
* @param string $key Cache key
- * @param int $time Not used in this implementation
* @return bool
*/
- public function delete( $key, $time = 0 ) {
+ public function delete( $key ) {
wincache_ucache_delete( $key );
return true;
}
+
+ public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+ if ( !is_callable( $callback ) ) {
+ throw new Exception( "Got invalid callback." );
+ }
+
+ return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+ }
}
diff --git a/includes/libs/objectcache/XCacheBagOStuff.php b/includes/libs/objectcache/XCacheBagOStuff.php
new file mode 100644
index 00000000..cfee9236
--- /dev/null
+++ b/includes/libs/objectcache/XCacheBagOStuff.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Object caching using XCache.
+ *
+ * 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 Cache
+ */
+
+/**
+ * Wrapper for XCache object caching functions; identical interface
+ * to the APC wrapper
+ *
+ * @ingroup Cache
+ */
+class XCacheBagOStuff extends BagOStuff {
+ /**
+ * Get a value from the XCache object cache
+ *
+ * @param string $key Cache key
+ * @param mixed $casToken Cas token
+ * @return mixed
+ */
+ public function get( $key, &$casToken = null ) {
+ $val = xcache_get( $key );
+
+ if ( is_string( $val ) ) {
+ if ( $this->isInteger( $val ) ) {
+ $val = intval( $val );
+ } else {
+ $val = unserialize( $val );
+ }
+ } elseif ( is_null( $val ) ) {
+ return false;
+ }
+
+ return $val;
+ }
+
+ /**
+ * Store a value in the XCache object cache
+ *
+ * @param string $key Cache key
+ * @param mixed $value Object to store
+ * @param int $expire Expiration time
+ * @return bool
+ */
+ public function set( $key, $value, $expire = 0 ) {
+ if ( !$this->isInteger( $value ) ) {
+ $value = serialize( $value );
+ }
+
+ xcache_set( $key, $value, $expire );
+ return true;
+ }
+
+ /**
+ * Remove a value from the XCache object cache
+ *
+ * @param string $key Cache key
+ * @return bool
+ */
+ public function delete( $key ) {
+ xcache_unset( $key );
+ return true;
+ }
+
+ public function incr( $key, $value = 1 ) {
+ return xcache_inc( $key, $value );
+ }
+
+ public function decr( $key, $value = 1 ) {
+ return xcache_dec( $key, $value );
+ }
+}
diff --git a/includes/libs/replacers/DoubleReplacer.php b/includes/libs/replacers/DoubleReplacer.php
new file mode 100644
index 00000000..fed023b1
--- /dev/null
+++ b/includes/libs/replacers/DoubleReplacer.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Class to perform secondary replacement within each replacement string
+ */
+class DoubleReplacer extends Replacer {
+ /**
+ * @param mixed $from
+ * @param mixed $to
+ * @param int $index
+ */
+ public function __construct( $from, $to, $index = 0 ) {
+ $this->from = $from;
+ $this->to = $to;
+ $this->index = $index;
+ }
+
+ /**
+ * @param array $matches
+ * @return mixed
+ */
+ public function replace( array $matches ) {
+ return str_replace( $this->from, $this->to, $matches[$this->index] );
+ }
+}
diff --git a/includes/libs/replacers/HashtableReplacer.php b/includes/libs/replacers/HashtableReplacer.php
new file mode 100644
index 00000000..b3c219d4
--- /dev/null
+++ b/includes/libs/replacers/HashtableReplacer.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Class to perform replacement based on a simple hashtable lookup
+ */
+class HashtableReplacer extends Replacer {
+ private $table, $index;
+
+ /**
+ * @param array $table
+ * @param int $index
+ */
+ public function __construct( $table, $index = 0 ) {
+ $this->table = $table;
+ $this->index = $index;
+ }
+
+ /**
+ * @param array $matches
+ * @return mixed
+ */
+ public function replace( array $matches ) {
+ return $this->table[$matches[$this->index]];
+ }
+}
+
diff --git a/includes/libs/replacers/RegexlikeReplacer.php b/includes/libs/replacers/RegexlikeReplacer.php
new file mode 100644
index 00000000..2b1fa740
--- /dev/null
+++ b/includes/libs/replacers/RegexlikeReplacer.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Class to replace regex matches with a string similar to that used in preg_replace()
+ */
+class RegexlikeReplacer extends Replacer {
+ private $r;
+
+ /**
+ * @param string $r
+ */
+ public function __construct( $r ) {
+ $this->r = $r;
+ }
+
+ /**
+ * @param array $matches
+ * @return string
+ */
+ public function replace( array $matches ) {
+ $pairs = array();
+ foreach ( $matches as $i => $match ) {
+ $pairs["\$$i"] = $match;
+ }
+
+ return strtr( $this->r, $pairs );
+ }
+}
diff --git a/includes/libs/replacers/Replacer.php b/includes/libs/replacers/Replacer.php
new file mode 100644
index 00000000..f4850bf6
--- /dev/null
+++ b/includes/libs/replacers/Replacer.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Base class for "replacers", objects used in preg_replace_callback() and
+ * StringUtils::delimiterReplaceCallback()
+ */
+abstract class Replacer {
+ /**
+ * @return array
+ */
+ public function cb() {
+ return array( &$this, 'replace' );
+ }
+
+ /**
+ * @param array $matches
+ * @return string
+ */
+ abstract public function replace( array $matches );
+}
diff --git a/includes/libs/virtualrest/ParsoidVirtualRESTService.php b/includes/libs/virtualrest/ParsoidVirtualRESTService.php
new file mode 100644
index 00000000..32a27f79
--- /dev/null
+++ b/includes/libs/virtualrest/ParsoidVirtualRESTService.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Virtual HTTP service client for Parsoid
+ *
+ * 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
+ */
+
+/**
+ * Virtual REST service for Parsoid
+ * @since 1.25
+ */
+class ParsoidVirtualRESTService extends VirtualRESTService {
+ /**
+ * Example requests:
+ * GET /local/v1/page/$title/html/$oldid
+ * * $oldid is optional
+ * POST /local/v1/transform/html/to/wikitext/$title/$oldid
+ * * body: array( 'html' => ... )
+ * * $title and $oldid are optional
+ * POST /local/v1/transform/wikitext/to/html/$title
+ * * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
+ * * $title is optional
+ * @param array $params Key/value map
+ * - url : Parsoid server URL
+ * - prefix : Parsoid prefix for this wiki
+ * - timeout : Parsoid timeout (optional)
+ * - forwardCookies : Cookies to forward to Parsoid, or false. (optional)
+ * - HTTPProxy : Parsoid HTTP proxy (optional)
+ */
+ public function __construct( array $params ) {
+ // for backwards compatibility:
+ if ( isset( $params['URL'] ) ) {
+ $params['url'] = $params['URL'];
+ unset( $params['URL'] );
+ }
+ parent::__construct( $params );
+ }
+
+ public function onRequests( array $reqs, Closure $idGeneratorFunc ) {
+ $result = array();
+ foreach ( $reqs as $key => $req ) {
+ $parts = explode( '/', $req['url'] );
+
+ list(
+ $targetWiki, // 'local'
+ $version, // 'v1'
+ $reqType // 'page' or 'transform'
+ ) = $parts;
+
+ if ( $targetWiki !== 'local' ) {
+ throw new Exception( "Only 'local' target wiki is currently supported" );
+ } elseif ( $version !== 'v1' ) {
+ throw new Exception( "Only version 1 exists" );
+ } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
+ throw new Exception( "Request type must be either 'page' or 'transform'" );
+ }
+
+ $req['url'] = $this->params['url'] . '/' . urlencode( $this->params['prefix'] ) . '/';
+
+ if ( $reqType === 'page' ) {
+ $title = $parts[3];
+ if ( $parts[4] !== 'html' ) {
+ throw new Exception( "Only 'html' output format is currently supported" );
+ }
+ if ( isset( $parts[5] ) ) {
+ $req['url'] .= $title . '?oldid=' . $parts[5];
+ } else {
+ $req['url'] .= $title;
+ }
+ } elseif ( $reqType === 'transform' ) {
+ if ( $parts[4] !== 'to' ) {
+ throw new Exception( "Part index 4 is not 'to'" );
+ }
+
+ if ( isset( $parts[6] ) ) {
+ $req['url'] .= $parts[6];
+ }
+
+ if ( $parts[3] === 'html' & $parts[5] === 'wikitext' ) {
+ if ( !isset( $req['body']['html'] ) ) {
+ throw new Exception( "You must set an 'html' body key for this request" );
+ }
+ if ( isset( $parts[7] ) ) {
+ $req['body']['oldid'] = $parts[7];
+ }
+ } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
+ if ( !isset( $req['body']['wikitext'] ) ) {
+ throw new Exception( "You must set a 'wikitext' body key for this request" );
+ }
+ $req['body']['wt'] = $req['body']['wikitext'];
+ unset( $req['body']['wikitext'] );
+ } else {
+ throw new Exception( "Transformation unsupported" );
+ }
+ }
+
+ if ( isset( $this->params['HTTPProxy'] ) && $this->params['HTTPProxy'] ) {
+ $req['proxy'] = $this->params['HTTPProxy'];
+ }
+ if ( isset( $this->params['timeout'] ) ) {
+ $req['reqTimeout'] = $this->params['timeout'];
+ }
+
+ // Forward cookies
+ if ( isset( $this->params['forwardCookies'] ) ) {
+ $req['headers']['Cookie'] = $this->params['forwardCookies'];
+ }
+
+ $result[$key] = $req;
+ }
+ return $result;
+ }
+}
diff --git a/includes/libs/virtualrest/RestbaseVirtualRESTService.php b/includes/libs/virtualrest/RestbaseVirtualRESTService.php
new file mode 100644
index 00000000..8fe5b921
--- /dev/null
+++ b/includes/libs/virtualrest/RestbaseVirtualRESTService.php
@@ -0,0 +1,177 @@
+<?php
+/**
+ * Virtual HTTP service client for Restbase
+ *
+ * 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
+ */
+
+/**
+ * Virtual REST service for Restbase
+ * @since 1.25
+ */
+class RestbaseVirtualRESTService extends VirtualRESTService {
+ /**
+ * Example requests:
+ * GET /local/v1/page/{title}/html{/revision}
+ * POST /local/v1/transform/html/to/wikitext{/title}{/revision}
+ * * body: array( 'html' => ... )
+ * POST /local/v1/transform/wikitext/to/html{/title}{/revision}
+ * * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'bodyOnly' => true/false )
+ *
+ * @param array $params Key/value map
+ * - url : Restbase server URL
+ * - domain : Wiki domain to use
+ * - timeout : request timeout in seconds (optional)
+ * - forwardCookies : cookies to forward to Restbase/Parsoid (as a Cookie
+ * header string) or false (optional)
+ * Note: forwardCookies will in the future be a boolean
+ * only, signifing request cookies should be forwarded
+ * to the service; the current state is due to the way
+ * VE handles this particular parameter
+ * - HTTPProxy : HTTP proxy to use (optional)
+ * - parsoidCompat : whether to parse URL as if they were meant for Parsoid
+ * boolean (optional)
+ */
+ public function __construct( array $params ) {
+ // set up defaults and merge them with the given params
+ $mparams = array_merge( array(
+ 'url' => 'http://localhost:7231',
+ 'domain' => 'localhost',
+ 'timeout' => 100,
+ 'forwardCookies' => false,
+ 'HTTPProxy' => null,
+ 'parsoidCompat' => false
+ ), $params );
+ // ensure the correct domain format
+ $mparams['domain'] = preg_replace(
+ '/^(https?:\/\/)?([^\/:]+?)(\/|:\d+\/?)?$/',
+ '$2',
+ $mparams['domain']
+ );
+ parent::__construct( $mparams );
+ }
+
+ public function onRequests( array $reqs, Closure $idGenFunc ) {
+
+ if ( $this->params['parsoidCompat'] ) {
+ return $this->onParsoidRequests( $reqs, $idGenFunc );
+ }
+
+ $result = array();
+ foreach ( $reqs as $key => $req ) {
+ // replace /local/ with the current domain
+ $req['url'] = preg_replace( '/^\/local\//', '/' . $this->params['domain'] . '/', $req['url'] );
+ // and prefix it with the service URL
+ $req['url'] = $this->params['url'] . $req['url'];
+ // set the appropriate proxy, timeout and headers
+ if ( $this->params['HTTPProxy'] ) {
+ $req['proxy'] = $this->params['HTTPProxy'];
+ }
+ if ( $this->params['timeout'] != null ) {
+ $req['reqTimeout'] = $this->params['timeout'];
+ }
+ if ( $this->params['forwardCookies'] ) {
+ $req['headers']['Cookie'] = $this->params['forwardCookies'];
+ }
+ $result[$key] = $req;
+ }
+
+ return $result;
+
+ }
+
+ /**
+ * Remaps Parsoid requests to Restbase paths
+ */
+ public function onParsoidRequests( array $reqs, Closure $idGeneratorFunc ) {
+
+ $result = array();
+ foreach ( $reqs as $key => $req ) {
+ $parts = explode( '/', $req['url'] );
+ list(
+ $targetWiki, // 'local'
+ $version, // 'v1'
+ $reqType // 'page' or 'transform'
+ ) = $parts;
+ if ( $targetWiki !== 'local' ) {
+ throw new Exception( "Only 'local' target wiki is currently supported" );
+ } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
+ throw new Exception( "Request type must be either 'page' or 'transform'" );
+ }
+ $req['url'] = $this->params['url'] . '/' . $this->params['domain'] . '/v1/' . $reqType . '/';
+ if ( $reqType === 'page' ) {
+ $title = $parts[3];
+ if ( $parts[4] !== 'html' ) {
+ throw new Exception( "Only 'html' output format is currently supported" );
+ }
+ $req['url'] .= 'html/' . $title;
+ if ( isset( $parts[5] ) ) {
+ $req['url'] .= '/' . $parts[5];
+ } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
+ $req['url'] .= '/' . $req['query']['oldid'];
+ unset( $req['query']['oldid'] );
+ }
+ } elseif ( $reqType === 'transform' ) {
+ // from / to transform
+ $req['url'] .= $parts[3] . '/to/' . $parts[5];
+ // the title
+ if ( isset( $parts[6] ) ) {
+ $req['url'] .= '/' . $parts[6];
+ }
+ // revision id
+ if ( isset( $parts[7] ) ) {
+ $req['url'] .= '/' . $parts[7];
+ } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
+ $req['url'] .= '/' . $req['body']['oldid'];
+ unset( $req['body']['oldid'] );
+ }
+ if ( $parts[4] !== 'to' ) {
+ throw new Exception( "Part index 4 is not 'to'" );
+ }
+ if ( $parts[3] === 'html' & $parts[5] === 'wikitext' ) {
+ if ( !isset( $req['body']['html'] ) ) {
+ throw new Exception( "You must set an 'html' body key for this request" );
+ }
+ } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
+ if ( !isset( $req['body']['wikitext'] ) ) {
+ throw new Exception( "You must set a 'wikitext' body key for this request" );
+ }
+ if ( isset( $req['body']['body'] ) ) {
+ $req['body']['bodyOnly'] = $req['body']['body'];
+ unset( $req['body']['body'] );
+ }
+ } else {
+ throw new Exception( "Transformation unsupported" );
+ }
+ }
+ // set the appropriate proxy, timeout and headers
+ if ( $this->params['HTTPProxy'] ) {
+ $req['proxy'] = $this->params['HTTPProxy'];
+ }
+ if ( $this->params['timeout'] != null ) {
+ $req['reqTimeout'] = $this->params['timeout'];
+ }
+ if ( $this->params['forwardCookies'] ) {
+ $req['headers']['Cookie'] = $this->params['forwardCookies'];
+ }
+ $result[$key] = $req;
+ }
+
+ return $result;
+
+ }
+
+}
diff --git a/includes/libs/virtualrest/VirtualRESTServiceClient.php b/includes/libs/virtualrest/VirtualRESTServiceClient.php
index 2d21d3cf..e8bb38d8 100644
--- a/includes/libs/virtualrest/VirtualRESTServiceClient.php
+++ b/includes/libs/virtualrest/VirtualRESTServiceClient.php
@@ -125,17 +125,17 @@ class VirtualRESTServiceClient {
* - reason : HTTP response reason (empty if there was a serious cURL error)
* - headers : <header name/value associative array>
* - body : HTTP response body or resource (if "stream" was set)
- * - err : Any cURL error string
+ * - error : Any cURL error string
* The map also stores integer-indexed copies of these values. This lets callers do:
* <code>
* list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $client->run( $req );
* </code>
- * @param array $req Virtual HTTP request array
+ * @param array $req Virtual HTTP request maps
* @return array Response array for request
*/
public function run( array $req ) {
- $req = $this->runMulti( array( $req ) );
- return $req[0]['response'];
+ $responses = $this->runMulti( array( $req ) );
+ return $responses[0];
}
/**
@@ -146,14 +146,15 @@ class VirtualRESTServiceClient {
* - reason : HTTP response reason (empty if there was a serious cURL error)
* - headers : <header name/value associative array>
* - body : HTTP response body or resource (if "stream" was set)
- * - err : Any cURL error string
+ * - error : Any cURL error string
* The map also stores integer-indexed copies of these values. This lets callers do:
- * <code>
- * list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $responses[0];
+ * <code>
+ * list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $responses[0];
* </code>
*
- * @param array $req Map of Virtual HTTP request arrays
+ * @param array $reqs Map of Virtual HTTP request maps
* @return array $reqs Map of corresponding response values with the same keys/order
+ * @throws Exception
*/
public function runMulti( array $reqs ) {
foreach ( $reqs as $index => &$req ) {
@@ -207,6 +208,9 @@ class VirtualRESTServiceClient {
if ( ++$rounds > 5 ) { // sanity
throw new Exception( "Too many replacement rounds detected. Aborting." );
}
+ // Track requests executed this round that have a prefix/service.
+ // Note that this also includes requests where 'response' was forced.
+ $checkReqIndexesByPrefix = array();
// Resolve the virtual URLs valid and qualified HTTP(S) URLs
// and add any required authentication headers for the backend.
// Services can also replace requests with new ones, either to
@@ -219,7 +223,7 @@ class VirtualRESTServiceClient {
if ( isset( $servReqs[$index] ) || isset( $origPending[$index] ) ) {
// A current or original request which was not modified
} else {
- // Replacement requests with pre-set responses should not execute
+ // Replacement request that will convert to original requests
$newReplaceReqsByService[$prefix][$index] = $req;
}
if ( isset( $req['response'] ) ) {
@@ -231,6 +235,7 @@ class VirtualRESTServiceClient {
// Original or mangled request included
$executeReqs[$index] = $req;
}
+ $checkReqIndexesByPrefix[$prefix][$index] = 1;
}
}
// Update index of requests to inspect for replacement
@@ -245,12 +250,12 @@ class VirtualRESTServiceClient {
// defer the original or to set a proxy response to the original.
// Any replacement requests executed above will need to be replaced
// with new requests (eventually the original). The responses can be
- // forced instead of having the request sent over the wire.
+ // forced by setting 'response' rather than actually be sent over the wire.
$newReplaceReqsByService = array();
- foreach ( $replaceReqsByService as $prefix => $servReqs ) {
+ foreach ( $checkReqIndexesByPrefix as $prefix => $servReqIndexes ) {
$service = $this->instances[$prefix];
- // Only the request copies stored in $doneReqs actually have the response
- $servReqs = array_intersect_key( $doneReqs, $servReqs );
+ // $doneReqs actually has the requests (with 'response' set)
+ $servReqs = array_intersect_key( $doneReqs, $servReqIndexes );
foreach ( $service->onResponses( $servReqs, $idFunc ) as $index => $req ) {
// Services use unique IDs for replacement requests
if ( isset( $servReqs[$index] ) || isset( $origPending[$index] ) ) {
diff --git a/includes/logging/BlockLogFormatter.php b/includes/logging/BlockLogFormatter.php
new file mode 100644
index 00000000..07ef24b4
--- /dev/null
+++ b/includes/logging/BlockLogFormatter.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * Formatter for block log entries.
+ *
+ * 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
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.25
+ */
+
+/**
+ * This class formats block log entries.
+ *
+ * @since 1.25
+ */
+class BlockLogFormatter extends LogFormatter {
+ protected function getMessageParameters() {
+ $params = parent::getMessageParameters();
+
+ $title = $this->entry->getTarget();
+ if ( substr( $title->getText(), 0, 1 ) === '#' ) {
+ // autoblock - no user link possible
+ $params[2] = $title->getText();
+ $params[3] = ''; // no user name for gender use
+ } else {
+ // Create a user link for the blocked
+ $username = $title->getText();
+ // @todo Store the user identifier in the parameters
+ // to make this faster for future log entries
+ $targetUser = User::newFromName( $username, false );
+ $params[2] = Message::rawParam( $this->makeUserLink( $targetUser, Linker::TOOL_LINKS_NOBLOCK ) );
+ $params[3] = $username; // plain user name for gender use
+ }
+
+ $subtype = $this->entry->getSubtype();
+ if ( $subtype === 'block' || $subtype === 'reblock' ) {
+ if ( !isset( $params[4] ) ) {
+ // Very old log entry without duration: means infinite
+ $params[4] = 'infinite';
+ }
+ // Localize the duration, and add a tooltip
+ // in English to help visitors from other wikis.
+ // The lrm is needed to make sure that the number
+ // is shown on the correct side of the tooltip text.
+ $durationTooltip = '&lrm;' . htmlspecialchars( $params[4] );
+ $params[4] = Message::rawParam( "<span class='blockExpiry' title='$durationTooltip'>" .
+ $this->context->getLanguage()->translateBlockExpiry( $params[4] ) . '</span>' );
+ $params[5] = isset( $params[5] ) ?
+ self::formatBlockFlags( $params[5], $this->context->getLanguage() ) : '';
+ }
+
+ return $params;
+ }
+
+ protected function extractParameters() {
+ $params = parent::extractParameters();
+ // Legacy log params returning the params in index 3 and 4, moved to 4 and 5
+ if ( $this->entry->isLegacy() && isset( $params[3] ) ) {
+ if ( isset( $params[4] ) ) {
+ $params[5] = $params[4];
+ }
+ $params[4] = $params[3];
+ $params[3] = '';
+ }
+ return $params;
+ }
+
+ public function getPreloadTitles() {
+ $title = $this->entry->getTarget();
+ // Preload user page for non-autoblocks
+ if ( substr( $title->getText(), 0, 1 ) !== '#' ) {
+ return array( $title->getTalkPage() );
+ }
+ return array();
+ }
+
+ public function getActionLinks() {
+ $subtype = $this->entry->getSubtype();
+ if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
+ || !( $subtype === 'block' || $subtype === 'reblock' )
+ || !$this->context->getUser()->isAllowed( 'block' )
+ ) {
+ return '';
+ }
+
+ // Show unblock/change block link
+ $title = $this->entry->getTarget();
+ $links = array(
+ Linker::linkKnown(
+ SpecialPage::getTitleFor( 'Unblock', $title->getDBkey() ),
+ $this->msg( 'unblocklink' )->escaped()
+ ),
+ Linker::linkKnown(
+ SpecialPage::getTitleFor( 'Block', $title->getDBkey() ),
+ $this->msg( 'change-blocklink' )->escaped()
+ )
+ );
+
+ return $this->msg( 'parentheses' )->rawParams(
+ $this->context->getLanguage()->pipeList( $links ) )->escaped();
+ }
+
+ /**
+ * Convert a comma-delimited list of block log flags
+ * into a more readable (and translated) form
+ *
+ * @param string $flags Flags to format
+ * @param Language $lang
+ * @return string
+ */
+ public static function formatBlockFlags( $flags, $lang ) {
+ $flags = trim( $flags );
+ if ( $flags === '' ) {
+ return ''; //nothing to do
+ }
+ $flags = explode( ',', $flags );
+ $flagsCount = count( $flags );
+
+ for ( $i = 0; $i < $flagsCount; $i++ ) {
+ $flags[$i] = self::formatBlockFlag( $flags[$i], $lang );
+ }
+
+ return wfMessage( 'parentheses' )->inLanguage( $lang )
+ ->rawParams( $lang->commaList( $flags ) )->escaped();
+ }
+
+ /**
+ * Translate a block log flag if possible
+ *
+ * @param int $flag Flag to translate
+ * @param Language $lang Language object to use
+ * @return string
+ */
+ public static function formatBlockFlag( $flag, $lang ) {
+ static $messages = array();
+
+ if ( !isset( $messages[$flag] ) ) {
+ $messages[$flag] = htmlspecialchars( $flag ); // Fallback
+
+ // For grepping. The following core messages can be used here:
+ // * block-log-flags-angry-autoblock
+ // * block-log-flags-anononly
+ // * block-log-flags-hiddenname
+ // * block-log-flags-noautoblock
+ // * block-log-flags-nocreate
+ // * block-log-flags-noemail
+ // * block-log-flags-nousertalk
+ $msg = wfMessage( 'block-log-flags-' . $flag )->inLanguage( $lang );
+
+ if ( $msg->exists() ) {
+ $messages[$flag] = $msg->escaped();
+ }
+ }
+
+ return $messages[$flag];
+ }
+
+ protected function getParametersForApi() {
+ $entry = $this->entry;
+ $params = $entry->getParameters();
+
+ static $map = array(
+ // While this looks wrong to be starting at 5 rather than 4, it's
+ // because getMessageParameters uses $4 for its own purposes.
+ '5::duration',
+ '6:array:flags',
+ '6::flags' => '6:array:flags',
+ );
+ foreach ( $map as $index => $key ) {
+ if ( isset( $params[$index] ) ) {
+ $params[$key] = $params[$index];
+ unset( $params[$index] );
+ }
+ }
+
+ $subtype = $entry->getSubtype();
+ if ( $subtype === 'block' || $subtype === 'reblock' ) {
+ // Defaults for old log entries missing some fields
+ $params += array(
+ '5::duration' => 'infinite',
+ '6:array:flags' => array(),
+ );
+
+ if ( !is_array( $params['6:array:flags'] ) ) {
+ $params['6:array:flags'] = $params['6:array:flags'] === ''
+ ? array()
+ : explode( ',', $params['6:array:flags'] );
+ }
+
+ if ( !wfIsInfinity( $params['5::duration'] ) ) {
+ $ts = wfTimestamp( TS_UNIX, $entry->getTimestamp() );
+ $expiry = strtotime( $params['5::duration'], $ts );
+ if ( $expiry !== false && $expiry > 0 ) {
+ $params[':timestamp:expiry'] = $expiry;
+ }
+ }
+ }
+
+ return $params;
+ }
+
+ public function formatParametersForApi() {
+ $ret = parent::formatParametersForApi();
+ if ( isset( $ret['flags'] ) ) {
+ ApiResult::setIndexedTagName( $ret['flags'], 'f' );
+ }
+ return $ret;
+ }
+
+}
diff --git a/includes/logging/DeleteLogFormatter.php b/includes/logging/DeleteLogFormatter.php
index 8b30e9ba..f0598aa7 100644
--- a/includes/logging/DeleteLogFormatter.php
+++ b/includes/logging/DeleteLogFormatter.php
@@ -79,8 +79,10 @@ class DeleteLogFormatter extends LogFormatter {
$newParams = array_slice( $params, 0, 3 );
$newParams[3] = $changeText;
- $count = count( explode( ',', $params[$paramStart] ) );
- $newParams[4] = $this->context->getLanguage()->formatNum( $count );
+ $ids = is_array( $params[$paramStart] )
+ ? $params[$paramStart]
+ : explode( ',', $params[$paramStart] );
+ $newParams[4] = $this->context->getLanguage()->formatNum( count( $ids ) );
$this->parsedParametersDeleteLog = $newParams;
return $this->parsedParametersDeleteLog;
@@ -137,8 +139,10 @@ class DeleteLogFormatter extends LogFormatter {
// Different revision types use different URL params...
$key = $params[3];
- // This is a CSV of the IDs
- $ids = explode( ',', $params[4] );
+ // This is a array or CSV of the IDs
+ $ids = is_array( $params[4] )
+ ? $params[4]
+ : explode( ',', $params[4] );
$links = array();
@@ -192,6 +196,9 @@ class DeleteLogFormatter extends LogFormatter {
}
// This is a CSV of the IDs
$query = $params[3];
+ if ( is_array( $query ) ) {
+ $query = implode( ',', $query );
+ }
// Link to each hidden object ID, $params[1] is the url param
$revert = Linker::linkKnown(
SpecialPage::getTitleFor( 'Revisiondelete' ),
@@ -209,4 +216,67 @@ class DeleteLogFormatter extends LogFormatter {
return '';
}
}
+
+ protected function getParametersForApi() {
+ $entry = $this->entry;
+ $params = array();
+
+ $subtype = $this->entry->getSubtype();
+ if ( in_array( $subtype, array( 'event', 'revision' ) ) ) {
+ $rawParams = $entry->getParameters();
+ if ( $subtype === 'event' ) {
+ array_unshift( $rawParams, 'logging' );
+ }
+
+ static $map = array(
+ '4::type',
+ '5::ids',
+ '6::ofield',
+ '7::nfield',
+ '4::ids' => '5::ids',
+ '5::ofield' => '6::ofield',
+ '6::nfield' => '7::nfield',
+ );
+ foreach ( $map as $index => $key ) {
+ if ( isset( $rawParams[$index] ) ) {
+ $rawParams[$key] = $rawParams[$index];
+ unset( $rawParams[$index] );
+ }
+ }
+
+ $old = $this->parseBitField( $rawParams['6::ofield'] );
+ $new = $this->parseBitField( $rawParams['7::nfield'] );
+ if ( !is_array( $rawParams['5::ids'] ) ) {
+ $rawParams['5::ids'] = explode( ',', $rawParams['5::ids'] );
+ }
+
+ $params = array(
+ '::type' => $rawParams['4::type'],
+ ':array:ids' => $rawParams['5::ids'],
+ ':assoc:old' => array( 'bitmask' => $old ),
+ ':assoc:new' => array( 'bitmask' => $new ),
+ );
+
+ static $fields = array(
+ Revision::DELETED_TEXT => 'content',
+ Revision::DELETED_COMMENT => 'comment',
+ Revision::DELETED_USER => 'user',
+ Revision::DELETED_RESTRICTED => 'restricted',
+ );
+ foreach ( $fields as $bit => $key ) {
+ $params[':assoc:old'][$key] = (bool)( $old & $bit );
+ $params[':assoc:new'][$key] = (bool)( $new & $bit );
+ }
+ }
+
+ return $params;
+ }
+
+ public function formatParametersForApi() {
+ $ret = parent::formatParametersForApi();
+ if ( isset( $ret['ids'] ) ) {
+ ApiResult::setIndexedTagName( $ret['ids'], 'id' );
+ }
+ return $ret;
+ }
}
diff --git a/includes/logging/LogEntry.php b/includes/logging/LogEntry.php
index 46c55157..66c2bde1 100644
--- a/includes/logging/LogEntry.php
+++ b/includes/logging/LogEntry.php
@@ -370,6 +370,9 @@ class ManualLogEntry extends LogEntryBase {
/** @var int ID of the log entry */
protected $id;
+ /** @var bool Whether this is a legacy log entry */
+ protected $legacy = false;
+
/**
* Constructor.
*
@@ -385,13 +388,14 @@ class ManualLogEntry extends LogEntryBase {
/**
* Set extra log parameters.
- * You can pass params to the log action message
- * by prefixing the keys with a number and colon.
- * The numbering should start with number 4, the
- * first three parameters are hardcoded for every
- * message. Example:
+ *
+ * You can pass params to the log action message by prefixing the keys with
+ * a number and optional type, using colons to separate the fields. The
+ * numbering should start with number 4, the first three parameters are
+ * hardcoded for every message. Example:
* $entry->setParameters(
- * '4:color' => 'blue',
+ * '4::color' => 'blue',
+ * '5:number:count' => 3000,
* 'animal' => 'dog'
* );
*
@@ -459,6 +463,16 @@ class ManualLogEntry extends LogEntryBase {
}
/**
+ * Set the 'legacy' flag
+ *
+ * @since 1.25
+ * @param bool $legacy
+ */
+ public function setLegacy( $legacy ) {
+ $this->legacy = $legacy;
+ }
+
+ /**
* TODO: document
*
* @since 1.19
@@ -533,10 +547,6 @@ class ManualLogEntry extends LogEntryBase {
$dbw->insert( 'log_search', $rows, __METHOD__, 'IGNORE' );
}
- // Update any bloom filter cache
- $member = $this->getTarget()->getNamespace() . ':' . $this->getTarget()->getDBkey();
- BloomCache::get( 'main' )->insert( wfWikiId(), 'TitleHasLogs', $member );
-
return $this->id;
}
@@ -640,6 +650,14 @@ class ManualLogEntry extends LogEntryBase {
return $this->comment;
}
+ /**
+ * @since 1.25
+ * @return bool
+ */
+ public function isLegacy() {
+ return $this->legacy;
+ }
+
public function getDeleted() {
return (int)$this->deleted;
}
diff --git a/includes/logging/LogEventsList.php b/includes/logging/LogEventsList.php
index 4dc25ef3..dfe31365 100644
--- a/includes/logging/LogEventsList.php
+++ b/includes/logging/LogEventsList.php
@@ -26,7 +26,7 @@
class LogEventsList extends ContextSource {
const NO_ACTION_LINK = 1;
const NO_EXTRA_USER_LINKS = 2;
- const USE_REVDEL_CHECKBOXES = 4;
+ const USE_CHECKBOXES = 4;
public $flags;
@@ -44,7 +44,7 @@ class LogEventsList extends ContextSource {
* a Skin object. Use of Skin is deprecated.
* @param null $unused Unused; used to be an OutputPage object.
* @param int $flags Can be a combination of self::NO_ACTION_LINK,
- * self::NO_EXTRA_USER_LINKS or self::USE_REVDEL_CHECKBOXES.
+ * self::NO_EXTRA_USER_LINKS or self::USE_CHECKBOXES.
*/
public function __construct( $context, $unused = null, $flags = 0 ) {
if ( $context instanceof IContextSource ) {
@@ -58,17 +58,6 @@ class LogEventsList extends ContextSource {
}
/**
- * Deprecated alias for getTitle(); do not use.
- *
- * @deprecated since 1.20; use getTitle() instead.
- * @return Title
- */
- public function getDisplayTitle() {
- wfDeprecated( __METHOD__, '1.20' );
- return $this->getTitle();
- }
-
- /**
* Show options for the log list
*
* @param array|string $types
@@ -234,7 +223,8 @@ class LogEventsList extends ContextSource {
'user',
'mw-log-user',
15,
- $user
+ $user,
+ array( 'class' => 'mw-autocomplete-user' )
);
return '<span style="white-space: nowrap">' . $label . '</span>';
@@ -271,14 +261,21 @@ class LogEventsList extends ContextSource {
* @return string
*/
private function getExtraInputs( $types ) {
- $offender = $this->getRequest()->getVal( 'offender' );
- $user = User::newFromName( $offender, false );
- if ( !$user || ( $user->getId() == 0 && !IP::isIPAddress( $offender ) ) ) {
- $offender = ''; // Blank field if invalid
- }
- if ( count( $types ) == 1 && $types[0] == 'suppress' ) {
- return Xml::inputLabel( $this->msg( 'revdelete-offender' )->text(), 'offender',
- 'mw-log-offender', 20, $offender );
+ if ( count( $types ) == 1 ) {
+ if ( $types[0] == 'suppress' ) {
+ $offender = $this->getRequest()->getVal( 'offender' );
+ $user = User::newFromName( $offender, false );
+ if ( !$user || ( $user->getId() == 0 && !IP::isIPAddress( $offender ) ) ) {
+ $offender = ''; // Blank field if invalid
+ }
+ return Xml::inputLabel( $this->msg( 'revdelete-offender' )->text(), 'offender',
+ 'mw-log-offender', 20, $offender );
+ } else {
+ // Allow extensions to add their own extra inputs
+ $input = '';
+ Hooks::run( 'LogEventsListGetExtraInputs', array( $types[0], $this, &$input ) );
+ return $input;
+ }
}
return '';
@@ -344,14 +341,27 @@ class LogEventsList extends ContextSource {
*/
private function getShowHideLinks( $row ) {
// We don't want to see the links and
+ if ( $this->flags == self::NO_ACTION_LINK ) {
+ return '';
+ }
+
+ $user = $this->getUser();
+
+ // If change tag editing is available to this user, return the checkbox
+ if ( $this->flags & self::USE_CHECKBOXES && ChangeTags::showTagEditingUI( $user ) ) {
+ return Xml::check(
+ 'showhiderevisions',
+ false,
+ array( 'name' => 'ids[' . $row->log_id . ']' )
+ );
+ }
+
// no one can hide items from the suppress log.
- if ( ( $this->flags == self::NO_ACTION_LINK )
- || $row->log_type == 'suppress'
- ) {
+ if ( $row->log_type == 'suppress' ) {
return '';
}
+
$del = '';
- $user = $this->getUser();
// Don't show useless checkbox to people who cannot hide log entries
if ( $user->isAllowed( 'deletedhistory' ) ) {
$canHide = $user->isAllowed( 'deletelogentry' );
@@ -361,7 +371,7 @@ class LogEventsList extends ContextSource {
$canViewThisSuppressedEntry = $canViewSuppressedOnly && $entryIsSuppressed;
if ( $row->log_deleted || $canHide ) {
// Show checkboxes instead of links.
- if ( $canHide && $this->flags & self::USE_REVDEL_CHECKBOXES && !$canViewThisSuppressedEntry ) {
+ if ( $canHide && $this->flags & self::USE_CHECKBOXES && !$canViewThisSuppressedEntry ) {
// If event was hidden from sysops
if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) {
$del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
@@ -544,14 +554,16 @@ class LogEventsList extends ContextSource {
if ( $lim > 0 ) {
$pager->mLimit = $lim;
}
-
+ // Fetch the log rows and build the HTML if needed
$logBody = $pager->getBody();
+ $numRows = $pager->getNumRows();
+
$s = '';
if ( $logBody ) {
if ( $msgKey[0] ) {
$dir = $context->getLanguage()->getDir();
- $lang = $context->getLanguage()->getCode();
+ $lang = $context->getLanguage()->getHtmlCode();
$s = Xml::openElement( 'div', array(
'class' => "mw-warning-with-logexcerpt mw-content-$dir",
@@ -575,7 +587,7 @@ class LogEventsList extends ContextSource {
$context->msg( 'logempty' )->parse() );
}
- if ( $pager->getNumRows() > $pager->mLimit ) { # Show "Full log" link
+ if ( $numRows > $pager->mLimit ) { # Show "Full log" link
$urlParam = array();
if ( $page instanceof Title ) {
$urlParam['page'] = $page->getPrefixedDBkey();
@@ -613,7 +625,7 @@ class LogEventsList extends ContextSource {
}
/* hook can return false, if we don't want the message to be emitted (Wikia BugId:7093) */
- if ( wfRunHooks( 'LogEventsListShowLogExtract', array( &$s, $types, $page, $user, $param ) ) ) {
+ if ( Hooks::run( 'LogEventsListShowLogExtract', array( &$s, $types, $page, $user, $param ) ) ) {
// $out can be either an OutputPage object or a String-by-reference
if ( $out instanceof OutputPage ) {
$out->addHTML( $s );
@@ -622,7 +634,7 @@ class LogEventsList extends ContextSource {
}
}
- return $pager->getNumRows();
+ return $numRows;
}
/**
diff --git a/includes/logging/LogFormatter.php b/includes/logging/LogFormatter.php
index 48a565f2..9c2fdd35 100644
--- a/includes/logging/LogFormatter.php
+++ b/includes/logging/LogFormatter.php
@@ -25,9 +25,12 @@
/**
* Implements the default log formatting.
- * Can be overridden by subclassing and setting
- * $wgLogActionsHandlers['type/subtype'] = 'class'; or
- * $wgLogActionsHandlers['type/*'] = 'class';
+ *
+ * Can be overridden by subclassing and setting:
+ *
+ * $wgLogActionsHandlers['type/subtype'] = 'class'; or
+ * $wgLogActionsHandlers['type/*'] = 'class';
+ *
* @since 1.19
*/
class LogFormatter {
@@ -80,6 +83,9 @@ class LogFormatter {
/** @var int Constant for handling log_deleted */
protected $audience = self::FOR_PUBLIC;
+ /** @var IContextSource Context for logging */
+ public $context;
+
/** @var bool Whether to output user tool links */
protected $linkFlood = false;
@@ -322,6 +328,57 @@ class LogFormatter {
break;
}
break;
+
+ case 'merge':
+ $text = wfMessage( 'pagemerge-logentry' )
+ ->rawParams( $target, $parameters['4::dest'], $parameters['5::mergepoint'] )
+ ->inContentLanguage()->escaped();
+ break;
+
+ case 'block':
+ switch ( $entry->getSubtype() ) {
+ case 'block':
+ global $wgContLang;
+ // Keep compatibility with extensions by checking for
+ // new key (5::duration/6::flags) or old key (0/optional 1)
+ if ( $entry->isLegacy() ) {
+ $rawDuration = $parameters[0];
+ $rawFlags = isset( $parameters[1] ) ? $parameters[1] : '';
+ } else {
+ $rawDuration = $parameters['5::duration'];
+ $rawFlags = $parameters['6::flags'];
+ }
+ $duration = $wgContLang->translateBlockExpiry( $rawDuration );
+ $flags = BlockLogFormatter::formatBlockFlags( $rawFlags, $wgContLang );
+ $text = wfMessage( 'blocklogentry' )
+ ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
+ break;
+ case 'unblock':
+ $text = wfMessage( 'unblocklogentry' )
+ ->rawParams( $target )->inContentLanguage()->escaped();
+ break;
+ case 'reblock':
+ global $wgContLang;
+ $duration = $wgContLang->translateBlockExpiry( $parameters['5::duration'] );
+ $flags = BlockLogFormatter::formatBlockFlags( $parameters['6::flags'], $wgContLang );
+ $text = wfMessage( 'reblock-logentry' )
+ ->rawParams( $target, $duration, $flags )->inContentLanguage()->escaped();
+ break;
+ }
+ break;
+
+ case 'import':
+ switch ( $entry->getSubtype() ) {
+ case 'upload':
+ $text = wfMessage( 'import-logentry-upload' )
+ ->rawParams( $target )->inContentLanguage()->escaped();
+ break;
+ case 'interwiki':
+ $text = wfMessage( 'import-logentry-interwiki' )
+ ->rawParams( $target )->inContentLanguage()->escaped();
+ break;
+ }
+ break;
// case 'suppress' --private log -- aaron (so we know who to blame in a few years :-D)
// default:
}
@@ -349,8 +406,10 @@ class LogFormatter {
$element = $this->styleRestricedElement( $element );
}
} else {
- $performer = $this->getPerformerElement() . $this->msg( 'word-separator' )->text();
- $element = $performer . $this->getRestrictedElement( 'rev-deleted-event' );
+ $sep = $this->msg( 'word-separator' );
+ $sep = $this->plaintext ? $sep->text() : $sep->escaped();
+ $performer = $this->getPerformerElement();
+ $element = $performer . $sep . $this->getRestrictedElement( 'rev-deleted-event' );
}
return $element;
@@ -413,7 +472,9 @@ class LogFormatter {
continue;
}
list( $index, $type, ) = explode( ':', $key, 3 );
- $params[$index - 1] = $this->formatParameterValue( $type, $value );
+ if ( ctype_digit( $index ) ) {
+ $params[$index - 1] = $this->formatParameterValue( $type, $value );
+ }
}
/* Message class doesn't like non consecutive numbering.
@@ -422,7 +483,8 @@ class LogFormatter {
*/
if ( count( $params ) ) {
$max = max( array_keys( $params ) );
- for ( $i = 4; $i < $max; $i++ ) {
+ // index 0 to 2 are added in getMessageParameters
+ for ( $i = 3; $i < $max; $i++ ) {
if ( !isset( $params[$i] ) ) {
$params[$i] = '';
}
@@ -480,8 +542,8 @@ class LogFormatter {
* * title-link: The value is a page title,
* returns link to this page
* * number: Format value as number
- * @param string $value The parameter value that should
- * be formated
+ * * list: Format value as a comma-separated list
+ * @param mixed $value The parameter value that should be formatted
* @return string|array Formated value
* @since 1.21
*/
@@ -492,6 +554,9 @@ class LogFormatter {
case 'raw':
$value = Message::rawParam( $value );
break;
+ case 'list':
+ $value = $this->context->getLanguage()->commaList( $value );
+ break;
case 'msg':
$value = $this->msg( $value )->text();
break;
@@ -629,7 +694,7 @@ class LogFormatter {
return $this->context->msg( $key );
}
- protected function makeUserLink( User $user ) {
+ protected function makeUserLink( User $user, $toolFlags = 0 ) {
if ( $this->plaintext ) {
$element = $user->getName();
} else {
@@ -639,9 +704,11 @@ class LogFormatter {
);
if ( $this->linkFlood ) {
- $element .= Linker::userToolLinksRedContribs(
+ $element .= Linker::userToolLinks(
$user->getId(),
$user->getName(),
+ true, // redContribsWhenNoEdits
+ $toolFlags,
$user->getEditCount()
);
}
@@ -666,6 +733,120 @@ class LogFormatter {
// problems with extensions
return $this->getMessageParameters();
}
+
+ /**
+ * Get the array of parameters, converted from legacy format if necessary.
+ * @since 1.25
+ * @return array
+ */
+ protected function getParametersForApi() {
+ return $this->entry->getParameters();
+ }
+
+ /**
+ * Format parameters for API output
+ *
+ * The result array should generally map named keys to values. Index and
+ * type should be omitted, e.g. "4::foo" should be returned as "foo" in the
+ * output. Values should generally be unformatted.
+ *
+ * Renames or removals of keys besides from the legacy numeric format to
+ * modern named style should be avoided. Any renames should be announced to
+ * the mediawiki-api-announce mailing list.
+ *
+ * @since 1.25
+ * @return array
+ */
+ public function formatParametersForApi() {
+ $logParams = array();
+ foreach ( $this->getParametersForApi() as $key => $value ) {
+ $vals = explode( ':', $key, 3 );
+ if ( count( $vals ) !== 3 ) {
+ $logParams[$key] = $value;
+ continue;
+ }
+ $logParams += $this->formatParameterValueForApi( $vals[2], $vals[1], $value );
+ }
+ ApiResult::setIndexedTagName( $logParams, 'param' );
+ ApiResult::setArrayType( $logParams, 'assoc' );
+
+ return $logParams;
+ }
+
+ /**
+ * Format a single parameter value for API output
+ *
+ * @since 1.25
+ * @param string $name
+ * @param string $type
+ * @param string $value
+ * @return array
+ */
+ protected function formatParameterValueForApi( $name, $type, $value ) {
+ $type = strtolower( trim( $type ) );
+ switch ( $type ) {
+ case 'bool':
+ $value = (bool)$value;
+ break;
+
+ case 'number':
+ if ( ctype_digit( $value ) ) {
+ $value = (int)$value;
+ } else {
+ $value = (float)$value;
+ }
+ break;
+
+ case 'array':
+ case 'assoc':
+ case 'kvp':
+ if ( is_array( $value ) ) {
+ ApiResult::setArrayType( $value, $type );
+ }
+ break;
+
+ case 'timestamp':
+ $value = wfTimestamp( TS_ISO_8601, $value );
+ break;
+
+ case 'msg':
+ case 'msg-content':
+ $msg = $this->msg( $value );
+ if ( $type === 'msg-content' ) {
+ $msg->inContentLanguage();
+ }
+ $value = array();
+ $value["{$name}_key"] = $msg->getKey();
+ if ( $msg->getParams() ) {
+ $value["{$name}_params"] = $msg->getParams();
+ }
+ $value["{$name}_text"] = $msg->text();
+ return $value;
+
+ case 'title':
+ case 'title-link':
+ $title = Title::newFromText( $value );
+ if ( $title ) {
+ $value = array();
+ ApiQueryBase::addTitleInfo( $value, $title, "{$name}_" );
+ }
+ return $value;
+
+ case 'user':
+ case 'user-link':
+ $user = User::newFromName( $value );
+ if ( $user ) {
+ $value = $user->getName();
+ }
+ break;
+
+ default:
+ // do nothing
+ break;
+ }
+
+ return array( $name => $value );
+ }
}
/**
@@ -725,7 +906,9 @@ class LegacyLogFormatter extends LogFormatter {
$performer = $this->getPerformerElement();
if ( !$this->irctext ) {
- $action = $performer . $this->msg( 'word-separator' )->text() . $action;
+ $sep = $this->msg( 'word-separator' );
+ $sep = $this->plaintext ? $sep->text() : $sep->escaped();
+ $action = $performer . $sep . $action;
}
return $action;
@@ -745,29 +928,7 @@ class LegacyLogFormatter extends LogFormatter {
$type = $this->entry->getType();
$subtype = $this->entry->getSubtype();
- // Show unblock/change block link
- if ( ( $type == 'block' || $type == 'suppress' )
- && ( $subtype == 'block' || $subtype == 'reblock' )
- ) {
- if ( !$this->context->getUser()->isAllowed( 'block' ) ) {
- return '';
- }
-
- $links = array(
- Linker::linkKnown(
- SpecialPage::getTitleFor( 'Unblock', $title->getDBkey() ),
- $this->msg( 'unblocklink' )->escaped()
- ),
- Linker::linkKnown(
- SpecialPage::getTitleFor( 'Block', $title->getDBkey() ),
- $this->msg( 'change-blocklink' )->escaped()
- )
- );
-
- return $this->msg( 'parentheses' )->rawParams(
- $this->context->getLanguage()->pipeList( $links ) )->escaped();
- // Show change protection link
- } elseif ( $type == 'protect'
+ if ( $type == 'protect'
&& ( $subtype == 'protect' || $subtype == 'modify' || $subtype == 'unprotect' )
) {
$links = array(
@@ -791,26 +952,6 @@ class LegacyLogFormatter extends LogFormatter {
return $this->msg( 'parentheses' )->rawParams(
$this->context->getLanguage()->pipeList( $links ) )->escaped();
- // Show unmerge link
- } elseif ( $type == 'merge' && $subtype == 'merge' ) {
- if ( !$this->context->getUser()->isAllowed( 'mergehistory' ) ) {
- return '';
- }
-
- $params = $this->extractParameters();
- $revert = Linker::linkKnown(
- SpecialPage::getTitleFor( 'MergeHistory' ),
- $this->msg( 'revertmerge' )->escaped(),
- array(),
- array(
- 'target' => $params[3],
- 'dest' => $title->getPrefixedDBkey(),
- 'mergepoint' => $params[4],
- 'submitted' => 1 // show the revisions immediately
- )
- );
-
- return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
}
// Do nothing. The implementation is handled by the hook modifiying the
@@ -826,7 +967,7 @@ class LegacyLogFormatter extends LogFormatter {
$params = $this->entry->getParameters();
- wfRunHooks( 'LogLine', array( $type, $subtype, $title, $params,
+ Hooks::run( 'LogLine', array( $type, $subtype, $title, $params,
&$this->comment, &$this->revert, $this->entry->getTimestamp() ) );
return $this->revert;
diff --git a/includes/logging/LogPage.php b/includes/logging/LogPage.php
index ce5b972f..82e5808a 100644
--- a/includes/logging/LogPage.php
+++ b/includes/logging/LogPage.php
@@ -288,24 +288,8 @@ class LogPage {
$details = '';
array_unshift( $params, $titleLink );
- // User suppression
- if ( preg_match( '/^(block|suppress)\/(block|reblock)$/', $key ) ) {
- if ( $skin ) {
- // Localize the duration, and add a tooltip
- // in English to help visitors from other wikis.
- // The lrm is needed to make sure that the number
- // is shown on the correct side of the tooltip text.
- $durationTooltip = '&lrm;' . htmlspecialchars( $params[1] );
- $params[1] = "<span class='blockExpiry' title='$durationTooltip'>" .
- $wgLang->translateBlockExpiry( $params[1] ) . '</span>';
- } else {
- $params[1] = $wgContLang->translateBlockExpiry( $params[1] );
- }
-
- $params[2] = isset( $params[2] ) ?
- self::formatBlockFlags( $params[2], $langObj ) : '';
// Page protections
- } elseif ( $type == 'protect' && count( $params ) == 3 ) {
+ if ( $type == 'protect' && count( $params ) == 3 ) {
// Restrictions and expiries
if ( $skin ) {
$details .= $wgLang->getDirMark() . htmlspecialchars( " {$params[1]}" );
@@ -370,69 +354,22 @@ class LogPage {
return $title->getPrefixedText();
}
- switch ( $type ) {
- case 'move':
- $titleLink = Linker::link(
- $title,
- htmlspecialchars( $title->getPrefixedText() ),
- array(),
- array( 'redirect' => 'no' )
- );
-
- $targetTitle = Title::newFromText( $params[0] );
-
- if ( !$targetTitle ) {
- # Workaround for broken database
- $params[0] = htmlspecialchars( $params[0] );
- } else {
- $params[0] = Linker::link(
- $targetTitle,
- htmlspecialchars( $params[0] )
- );
- }
- break;
- case 'block':
- if ( substr( $title->getText(), 0, 1 ) == '#' ) {
- $titleLink = $title->getText();
- } else {
- // @todo Store the user identifier in the parameters
- // to make this faster for future log entries
- $id = User::idFromName( $title->getText() );
- $titleLink = Linker::userLink( $id, $title->getText() )
- . Linker::userToolLinks( $id, $title->getText(), false, Linker::TOOL_LINKS_NOBLOCK );
- }
- break;
- case 'merge':
- $titleLink = Linker::link(
- $title,
- $title->getPrefixedText(),
- array(),
- array( 'redirect' => 'no' )
- );
- $params[0] = Linker::link(
- Title::newFromText( $params[0] ),
- htmlspecialchars( $params[0] )
- );
- $params[1] = $lang->timeanddate( $params[1] );
- break;
- default:
- if ( $title->isSpecialPage() ) {
- list( $name, $par ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
-
- # Use the language name for log titles, rather than Log/X
- if ( $name == 'Log' ) {
- $logPage = new LogPage( $par );
- $titleLink = Linker::link( $title, $logPage->getName()->escaped() );
- $titleLink = wfMessage( 'parentheses' )
- ->inLanguage( $lang )
- ->rawParams( $titleLink )
- ->escaped();
- } else {
- $titleLink = Linker::link( $title );
- }
- } else {
- $titleLink = Linker::link( $title );
- }
+ if ( $title->isSpecialPage() ) {
+ list( $name, $par ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+
+ # Use the language name for log titles, rather than Log/X
+ if ( $name == 'Log' ) {
+ $logPage = new LogPage( $par );
+ $titleLink = Linker::link( $title, $logPage->getName()->escaped() );
+ $titleLink = wfMessage( 'parentheses' )
+ ->inLanguage( $lang )
+ ->rawParams( $titleLink )
+ ->escaped();
+ } else {
+ $titleLink = Linker::link( $title );
+ }
+ } else {
+ $titleLink = Linker::link( $title );
}
return $titleLink;
@@ -485,6 +422,10 @@ class LogPage {
$logEntry->setTarget( $target );
$logEntry->setPerformer( $doer );
$logEntry->setParameters( $params );
+ // All log entries using the LogPage to insert into the logging table
+ // are using the old logging system and therefore the legacy flag is
+ // needed to say the LogFormatter the parameters have numeric keys
+ $logEntry->setLegacy( true );
$formatter = LogFormatter::newFromEntry( $logEntry );
$context = RequestContext::newExtraneousContext( $target );
@@ -550,61 +491,6 @@ class LogPage {
}
/**
- * Convert a comma-delimited list of block log flags
- * into a more readable (and translated) form
- *
- * @param string $flags Flags to format
- * @param Language $lang
- * @return string
- */
- public static function formatBlockFlags( $flags, $lang ) {
- $flags = trim( $flags );
- if ( $flags === '' ) {
- return ''; //nothing to do
- }
- $flags = explode( ',', $flags );
- $flagsCount = count( $flags );
-
- for ( $i = 0; $i < $flagsCount; $i++ ) {
- $flags[$i] = self::formatBlockFlag( $flags[$i], $lang );
- }
-
- return wfMessage( 'parentheses' )->inLanguage( $lang )
- ->rawParams( $lang->commaList( $flags ) )->escaped();
- }
-
- /**
- * Translate a block log flag if possible
- *
- * @param int $flag Flag to translate
- * @param Language $lang Language object to use
- * @return string
- */
- public static function formatBlockFlag( $flag, $lang ) {
- static $messages = array();
-
- if ( !isset( $messages[$flag] ) ) {
- $messages[$flag] = htmlspecialchars( $flag ); // Fallback
-
- // For grepping. The following core messages can be used here:
- // * block-log-flags-angry-autoblock
- // * block-log-flags-anononly
- // * block-log-flags-hiddenname
- // * block-log-flags-noautoblock
- // * block-log-flags-nocreate
- // * block-log-flags-noemail
- // * block-log-flags-nousertalk
- $msg = wfMessage( 'block-log-flags-' . $flag )->inLanguage( $lang );
-
- if ( $msg->exists() ) {
- $messages[$flag] = $msg->escaped();
- }
- }
-
- return $messages[$flag];
- }
-
- /**
* Name of the log.
* @return Message
* @since 1.19
diff --git a/includes/logging/LogPager.php b/includes/logging/LogPager.php
index 256934e4..bf489ab9 100644
--- a/includes/logging/LogPager.php
+++ b/includes/logging/LogPager.php
@@ -323,7 +323,6 @@ class LogPager extends ReverseChronologicalPager {
}
public function getStartBody() {
- wfProfileIn( __METHOD__ );
# Do a link batch query
if ( $this->getNumRows() > 0 ) {
$lb = new LinkBatch;
@@ -339,7 +338,6 @@ class LogPager extends ReverseChronologicalPager {
$lb->execute();
$this->mResult->seek( 0 );
}
- wfProfileOut( __METHOD__ );
return '';
}
diff --git a/includes/logging/MergeLogFormatter.php b/includes/logging/MergeLogFormatter.php
new file mode 100644
index 00000000..36e383b0
--- /dev/null
+++ b/includes/logging/MergeLogFormatter.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Formatter for merge log entries.
+ *
+ * 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
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.25
+ */
+
+/**
+ * This class formats merge log entries.
+ *
+ * @since 1.25
+ */
+class MergeLogFormatter extends LogFormatter {
+ public function getPreloadTitles() {
+ $params = $this->extractParameters();
+
+ return array( Title::newFromText( $params[3] ) );
+ }
+
+ protected function getMessageParameters() {
+ $params = parent::getMessageParameters();
+ $oldname = $this->makePageLink( $this->entry->getTarget(), array( 'redirect' => 'no' ) );
+ $newname = $this->makePageLink( Title::newFromText( $params[3] ) );
+ $params[2] = Message::rawParam( $oldname );
+ $params[3] = Message::rawParam( $newname );
+ $params[4] = $this->context->getLanguage()
+ ->userTimeAndDate( $params[4], $this->context->getUser() );
+ return $params;
+ }
+
+ public function getActionLinks() {
+ if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
+ || !$this->context->getUser()->isAllowed( 'mergehistory' )
+ ) {
+ return '';
+ }
+
+ // Show unmerge link
+ $params = $this->extractParameters();
+ $revert = Linker::linkKnown(
+ SpecialPage::getTitleFor( 'MergeHistory' ),
+ $this->msg( 'revertmerge' )->escaped(),
+ array(),
+ array(
+ 'target' => $params[3],
+ 'dest' => $this->entry->getTarget()->getPrefixedDBkey(),
+ 'mergepoint' => $params[4],
+ 'submitted' => 1 // show the revisions immediately
+ )
+ );
+
+ return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
+ }
+
+ protected function getParametersForApi() {
+ $entry = $this->entry;
+ $params = $entry->getParameters();
+
+ static $map = array(
+ '4:title:dest',
+ '5:timestamp:mergepoint',
+ '4::dest' => '4:title:dest',
+ '5::mergepoint' => '5:timestamp:mergepoint',
+ );
+ foreach ( $map as $index => $key ) {
+ if ( isset( $params[$index] ) ) {
+ $params[$key] = $params[$index];
+ unset( $params[$index] );
+ }
+ }
+
+ return $params;
+ }
+}
diff --git a/includes/logging/MoveLogFormatter.php b/includes/logging/MoveLogFormatter.php
index 39130163..7f5e9efa 100644
--- a/includes/logging/MoveLogFormatter.php
+++ b/includes/logging/MoveLogFormatter.php
@@ -37,8 +37,9 @@ class MoveLogFormatter extends LogFormatter {
protected function getMessageKey() {
$key = parent::getMessageKey();
- $params = $this->getMessageParameters();
+ $params = $this->extractParameters();
if ( isset( $params[4] ) && $params[4] === '1' ) {
+ // Messages: logentry-move-move-noredirect, logentry-move-move_redir-noredirect
$key .= '-noredirect';
}
@@ -51,6 +52,7 @@ class MoveLogFormatter extends LogFormatter {
$newname = $this->makePageLink( Title::newFromText( $params[3] ) );
$params[2] = Message::rawParam( $oldname );
$params[3] = Message::rawParam( $newname );
+ unset( $params[4] ); // handled in getMessageKey
return $params;
}
@@ -83,4 +85,29 @@ class MoveLogFormatter extends LogFormatter {
return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
}
+
+ protected function getParametersForApi() {
+ $entry = $this->entry;
+ $params = $entry->getParameters();
+
+ static $map = array(
+ '4:title:target',
+ '5:bool:suppressredirect',
+ '4::target' => '4:title:target',
+ '5::noredir' => '5:bool:suppressredirect',
+ );
+ foreach ( $map as $index => $key ) {
+ if ( isset( $params[$index] ) ) {
+ $params[$key] = $params[$index];
+ unset( $params[$index] );
+ }
+ }
+
+ if ( !isset( $params['5:bool:suppressredirect'] ) ) {
+ $params['5:bool:suppressredirect'] = false;
+ }
+
+ return $params;
+ }
+
}
diff --git a/includes/logging/PatrolLogFormatter.php b/includes/logging/PatrolLogFormatter.php
index 2abaf173..00337432 100644
--- a/includes/logging/PatrolLogFormatter.php
+++ b/includes/logging/PatrolLogFormatter.php
@@ -62,4 +62,24 @@ class PatrolLogFormatter extends LogFormatter {
return $params;
}
+
+ protected function getParametersForApi() {
+ $entry = $this->entry;
+ $params = $entry->getParameters();
+
+ static $map = array(
+ '4::curid',
+ '5::previd',
+ '6:bool:auto',
+ '6::auto' => '6:bool:auto',
+ );
+ foreach ( $map as $index => $key ) {
+ if ( isset( $params[$index] ) ) {
+ $params[$key] = $params[$index];
+ unset( $params[$index] );
+ }
+ }
+
+ return $params;
+ }
}
diff --git a/includes/logging/RightsLogFormatter.php b/includes/logging/RightsLogFormatter.php
index ac252aeb..352bda58 100644
--- a/includes/logging/RightsLogFormatter.php
+++ b/includes/logging/RightsLogFormatter.php
@@ -67,20 +67,8 @@ class RightsLogFormatter extends LogFormatter {
return $params;
}
- $oldGroups = $params[3];
- $newGroups = $params[4];
-
- // Less old entries
- if ( $oldGroups === '' ) {
- $oldGroups = array();
- } elseif ( is_string( $oldGroups ) ) {
- $oldGroups = array_map( 'trim', explode( ',', $oldGroups ) );
- }
- if ( $newGroups === '' ) {
- $newGroups = array();
- } elseif ( is_string( $newGroups ) ) {
- $newGroups = array_map( 'trim', explode( ',', $newGroups ) );
- }
+ $oldGroups = $this->makeGroupArray( $params[3] );
+ $newGroups = $this->makeGroupArray( $params[4] );
$userName = $this->entry->getTarget()->getText();
if ( !$this->plaintext && count( $oldGroups ) ) {
@@ -110,4 +98,53 @@ class RightsLogFormatter extends LogFormatter {
return $params;
}
+
+ protected function getParametersForApi() {
+ $entry = $this->entry;
+ $params = $entry->getParameters();
+
+ static $map = array(
+ '4:array:oldgroups',
+ '5:array:newgroups',
+ '4::oldgroups' => '4:array:oldgroups',
+ '5::newgroups' => '5:array:newgroups',
+ );
+ foreach ( $map as $index => $key ) {
+ if ( isset( $params[$index] ) ) {
+ $params[$key] = $params[$index];
+ unset( $params[$index] );
+ }
+ }
+
+ // Really old entries does not have log params
+ if ( isset( $params['4:array:oldgroups'] ) ) {
+ $params['4:array:oldgroups'] = $this->makeGroupArray( $params['4:array:oldgroups'] );
+ }
+ if ( isset( $params['5:array:newgroups'] ) ) {
+ $params['5:array:newgroups'] = $this->makeGroupArray( $params['5:array:newgroups'] );
+ }
+
+ return $params;
+ }
+
+ public function formatParametersForApi() {
+ $ret = parent::formatParametersForApi();
+ if ( isset( $ret['oldgroups'] ) ) {
+ ApiResult::setIndexedTagName( $ret['oldgroups'], 'g' );
+ }
+ if ( isset( $ret['newgroups'] ) ) {
+ ApiResult::setIndexedTagName( $ret['newgroups'], 'g' );
+ }
+ return $ret;
+ }
+
+ private function makeGroupArray( $group ) {
+ // Migrate old group params from string to array
+ if ( $group === '' ) {
+ $group = array();
+ } elseif ( is_string( $group ) ) {
+ $group = array_map( 'trim', explode( ',', $group ) );
+ }
+ return $group;
+ }
}
diff --git a/includes/logging/TagLogFormatter.php b/includes/logging/TagLogFormatter.php
new file mode 100644
index 00000000..5a58c331
--- /dev/null
+++ b/includes/logging/TagLogFormatter.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/**
+ * This class formats tag log entries.
+ *
+ * Parameters (one-based indexes):
+ * 4::revid
+ * 5::logid
+ * 6:list:tagsAdded
+ * 7:number:tagsAddedCount
+ * 8:list:tagsRemoved
+ * 9:number:tagsRemovedCount
+ *
+ * @since 1.25
+ */
+class TagLogFormatter extends LogFormatter {
+ protected function getMessageKey() {
+ $key = parent::getMessageKey();
+ $params = $this->getMessageParameters();
+
+ $add = ( isset( $params[6] ) && isset( $params[6]['num'] ) && $params[6]['num'] );
+ $remove = ( isset( $params[8] ) && isset( $params[8]['num'] ) && $params[8]['num'] );
+ $key .= ( $remove ? ( $add ? '' : '-remove' ) : '-add' );
+
+ if ( isset( $params[4] ) && $params[4] ) {
+ $key .= '-logentry';
+ } else {
+ $key .= '-revision';
+ }
+
+ return $key;
+ }
+}
diff --git a/includes/logging/UploadLogFormatter.php b/includes/logging/UploadLogFormatter.php
new file mode 100644
index 00000000..52961dc4
--- /dev/null
+++ b/includes/logging/UploadLogFormatter.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Formatter for upload log entries.
+ *
+ * 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
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.25
+ */
+
+/**
+ * This class formats upload log entries.
+ *
+ * @since 1.25
+ */
+class UploadLogFormatter extends LogFormatter {
+
+ protected function getParametersForApi() {
+ $entry = $this->entry;
+ $params = $entry->getParameters();
+
+ static $map = array(
+ 'img_timestamp' => ':timestamp:img_timestamp',
+ );
+ foreach ( $map as $index => $key ) {
+ if ( isset( $params[$index] ) ) {
+ $params[$key] = $params[$index];
+ unset( $params[$index] );
+ }
+ }
+
+ return $params;
+ }
+
+}
diff --git a/includes/mail/EmailNotification.php b/includes/mail/EmailNotification.php
index 8215403e..81c4e38d 100644
--- a/includes/mail/EmailNotification.php
+++ b/includes/mail/EmailNotification.php
@@ -205,8 +205,6 @@ class EmailNotification {
global $wgEnotifWatchlist;
global $wgEnotifMinorEdits, $wgEnotifUserTalk;
- wfProfileIn( __METHOD__ );
-
# The following code is only run, if several conditions are met:
# 1. EmailNotification for pages (other than user_talk pages) must be enabled
# 2. minor edits (changes) are only regarded if the global flag indicates so
@@ -224,9 +222,8 @@ class EmailNotification {
$formattedPageStatus = array( 'deleted', 'created', 'moved', 'restored', 'changed' );
- wfRunHooks( 'UpdateUserMailerFormattedPageStatus', array( &$formattedPageStatus ) );
+ Hooks::run( 'UpdateUserMailerFormattedPageStatus', array( &$formattedPageStatus ) );
if ( !in_array( $this->pageStatus, $formattedPageStatus ) ) {
- wfProfileOut( __METHOD__ );
throw new MWException( 'Not a valid page status!' );
}
@@ -251,7 +248,7 @@ class EmailNotification {
&& $watchingUser->isEmailConfirmed()
&& $watchingUser->getID() != $userTalkId
) {
- if ( wfRunHooks( 'SendWatchlistEmailNotification', array( $watchingUser, $title, $this ) ) ) {
+ if ( Hooks::run( 'SendWatchlistEmailNotification', array( $watchingUser, $title, $this ) ) ) {
$this->compose( $watchingUser );
}
}
@@ -270,7 +267,6 @@ class EmailNotification {
}
$this->sendMails();
- wfProfileOut( __METHOD__ );
}
/**
@@ -295,7 +291,7 @@ class EmailNotification {
) {
if ( !$targetUser->isEmailConfirmed() ) {
wfDebug( __METHOD__ . ": talk page owner doesn't have validated email\n" );
- } elseif ( !wfRunHooks( 'AbortTalkPageEmailNotification', array( $targetUser, $title ) ) ) {
+ } elseif ( !Hooks::run( 'AbortTalkPageEmailNotification', array( $targetUser, $title ) ) ) {
wfDebug( __METHOD__ . ": talk page update notification is aborted for this user\n" );
} else {
wfDebug( __METHOD__ . ": sending talk page update notification\n" );
diff --git a/includes/mail/MailAddress.php b/includes/mail/MailAddress.php
index 68179088..7a228bda 100644
--- a/includes/mail/MailAddress.php
+++ b/includes/mail/MailAddress.php
@@ -38,7 +38,7 @@ class MailAddress {
function __construct( $address, $name = null, $realName = null ) {
if ( is_object( $address ) && $address instanceof User ) {
// Old calling format, now deprecated
- wfDeprecated( __METHOD__ . ' with a User object' , '1.24' );
+ wfDeprecated( __METHOD__ . ' with a User object', '1.24' );
$this->address = $address->getEmail();
$this->name = $address->getName();
$this->realName = $address->getRealName();
diff --git a/includes/mail/UserMailer.php b/includes/mail/UserMailer.php
index b5a57a84..3cabdaeb 100644
--- a/includes/mail/UserMailer.php
+++ b/includes/mail/UserMailer.php
@@ -191,7 +191,7 @@ class UserMailer {
$extraParams = $wgAdditionalMailParams;
// Hook to generate custom VERP address for 'Return-Path'
- wfRunHooks( 'UserMailerChangeReturnPath', array( $to, &$returnPath ) );
+ Hooks::run( 'UserMailerChangeReturnPath', array( $to, &$returnPath ) );
# Add the envelope sender address using the -f command line option when PHP mail() is used.
# Will default to the $from->address when the UserMailerChangeReturnPath hook fails and the
# generated VERP address when the hook runs effectively.
@@ -250,7 +250,7 @@ class UserMailer {
$headers['Content-transfer-encoding'] = '8bit';
}
- $ret = wfRunHooks( 'AlternateUserMailer', array( $headers, $to, $from, $subject, $body ) );
+ $ret = Hooks::run( 'AlternateUserMailer', array( $headers, $to, $from, $subject, $body ) );
if ( $ret === false ) {
// the hook implementation will return false to skip regular mail sending
return Status::newGood();
diff --git a/includes/media/BMP.php b/includes/media/BMP.php
index d8b0ba64..52f9518f 100644
--- a/includes/media/BMP.php
+++ b/includes/media/BMP.php
@@ -71,7 +71,7 @@ class BmpHandler extends BitmapHandler {
try {
$w = wfUnpack( 'V', $w, 4 );
$h = wfUnpack( 'V', $h, 4 );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
return false;
}
diff --git a/includes/media/Bitmap.php b/includes/media/Bitmap.php
index e81b37de..eadcf94b 100644
--- a/includes/media/Bitmap.php
+++ b/includes/media/Bitmap.php
@@ -142,7 +142,7 @@ class BitmapHandler extends TransformationalImageHandler {
$env['MAGICK_TMPDIR'] = $wgImageMagickTempDir;
}
- $rotation = $this->getRotation( $image );
+ $rotation = isset( $params['disableRotation'] ) ? 0 : $this->getRotation( $image );
list( $width, $height ) = $this->extractPreRotationDimensions( $params, $rotation );
$cmd = call_user_func_array( 'wfEscapeShellArg', array_merge(
@@ -169,10 +169,8 @@ class BitmapHandler extends TransformationalImageHandler {
array( $this->escapeMagickOutput( $params['dstPath'] ) ) ) );
wfDebug( __METHOD__ . ": running ImageMagick: $cmd\n" );
- wfProfileIn( 'convert' );
$retval = 0;
$err = wfShellExecWithStderr( $cmd, $retval, $env );
- wfProfileOut( 'convert' );
if ( $retval !== 0 ) {
$this->logErrorForExternalProcess( $retval, $err, $cmd );
@@ -204,7 +202,7 @@ class BitmapHandler extends TransformationalImageHandler {
/ ( $params['srcWidth'] + $params['srcHeight'] )
< $wgSharpenReductionThreshold
) {
- // Hack, since $wgSharpenParamater is written specifically for the command line convert
+ // Hack, since $wgSharpenParameter is written specifically for the command line convert
list( $radius, $sigma ) = explode( 'x', $wgSharpenParameter );
$im->sharpenImage( $radius, $sigma );
}
@@ -223,7 +221,7 @@ class BitmapHandler extends TransformationalImageHandler {
}
}
- $rotation = $this->getRotation( $image );
+ $rotation = isset( $params['disableRotation'] ) ? 0 : $this->getRotation( $image );
list( $width, $height ) = $this->extractPreRotationDimensions( $params, $rotation );
$im->setImageBackgroundColor( new ImagickPixel( 'white' ) );
@@ -280,10 +278,8 @@ class BitmapHandler extends TransformationalImageHandler {
$cmd = str_replace( '%h', wfEscapeShellArg( $params['physicalHeight'] ),
str_replace( '%w', wfEscapeShellArg( $params['physicalWidth'] ), $cmd ) ); # Size
wfDebug( __METHOD__ . ": Running custom convert command $cmd\n" );
- wfProfileIn( 'convert' );
$retval = 0;
$err = wfShellExecWithStderr( $cmd, $retval );
- wfProfileOut( 'convert' );
if ( $retval !== 0 ) {
$this->logErrorForExternalProcess( $retval, $err, $cmd );
@@ -344,7 +340,7 @@ class BitmapHandler extends TransformationalImageHandler {
$src_image = call_user_func( $loader, $params['srcPath'] );
- $rotation = function_exists( 'imagerotate' ) ? $this->getRotation( $image ) : 0;
+ $rotation = function_exists( 'imagerotate' ) && !isset( $params['disableRotation'] ) ? $this->getRotation( $image ) : 0;
list( $width, $height ) = $this->extractPreRotationDimensions( $params, $rotation );
$dst_image = imagecreatetruecolor( $width, $height );
@@ -457,10 +453,8 @@ class BitmapHandler extends TransformationalImageHandler {
" -rotate " . wfEscapeShellArg( "-$rotation" ) . " " .
wfEscapeShellArg( $this->escapeMagickOutput( $params['dstPath'] ) );
wfDebug( __METHOD__ . ": running ImageMagick: $cmd\n" );
- wfProfileIn( 'convert' );
$retval = 0;
$err = wfShellExecWithStderr( $cmd, $retval );
- wfProfileOut( 'convert' );
if ( $retval !== 0 ) {
$this->logErrorForExternalProcess( $retval, $err, $cmd );
diff --git a/includes/media/BitmapMetadataHandler.php b/includes/media/BitmapMetadataHandler.php
index 1d790155..c8d37bbb 100644
--- a/includes/media/BitmapMetadataHandler.php
+++ b/includes/media/BitmapMetadataHandler.php
@@ -61,7 +61,7 @@ class BitmapMetadataHandler {
private function doApp13( $app13 ) {
try {
$this->iptcType = JpegMetadataExtractor::doPSIR( $app13 );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// Error reading the iptc hash information.
// This probably means the App13 segment is something other than what we expect.
// However, still try to read it, and treat it as if the hash didn't exist.
diff --git a/includes/media/DjVu.php b/includes/media/DjVu.php
index daeb475f..1b0eb492 100644
--- a/includes/media/DjVu.php
+++ b/includes/media/DjVu.php
@@ -221,11 +221,9 @@ class DjVuHandler extends ImageHandler {
$cmd .= " | {$wgDjvuPostProcessor}";
}
$cmd .= ' > ' . wfEscapeShellArg( $dstPath ) . ') 2>&1';
- wfProfileIn( 'ddjvu' );
wfDebug( __METHOD__ . ": $cmd\n" );
$retval = '';
$err = wfShellExec( $cmd, $retval );
- wfProfileOut( 'ddjvu' );
$removed = $this->removeBadFile( $dstPath, $retval );
if ( $retval != 0 || $removed ) {
@@ -266,6 +264,7 @@ class DjVuHandler extends ImageHandler {
*
* @param File $file The DjVu file in question
* @return string XML metadata as a string.
+ * @throws MWException
*/
private function getUnserializedMetadata( File $file ) {
$metadata = $file->getMetadata();
@@ -312,7 +311,6 @@ class DjVuHandler extends ImageHandler {
return false;
}
- wfProfileIn( __METHOD__ );
wfSuppressWarnings();
try {
@@ -338,7 +336,6 @@ class DjVuHandler extends ImageHandler {
wfDebug( "Bogus multipage XML metadata on '{$image->getName()}'\n" );
}
wfRestoreWarnings();
- wfProfileOut( __METHOD__ );
if ( $gettext ) {
return $image->djvuTextTree;
} else {
diff --git a/includes/media/DjVuImage.php b/includes/media/DjVuImage.php
index 6ff19c90..e8faa70a 100644
--- a/includes/media/DjVuImage.php
+++ b/includes/media/DjVuImage.php
@@ -265,37 +265,34 @@ class DjVuImage {
/**
* Return an XML string describing the DjVu image
- * @return string
+ * @return string|bool
*/
function retrieveMetaData() {
global $wgDjvuToXML, $wgDjvuDump, $wgDjvuTxt;
- wfProfileIn( __METHOD__ );
+
+ if ( !$this->isValid() ) {
+ return false;
+ }
if ( isset( $wgDjvuDump ) ) {
# djvudump is faster as of version 3.5
# http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583
- wfProfileIn( 'djvudump' );
$cmd = wfEscapeShellArg( $wgDjvuDump ) . ' ' . wfEscapeShellArg( $this->mFilename );
$dump = wfShellExec( $cmd );
$xml = $this->convertDumpToXML( $dump );
- wfProfileOut( 'djvudump' );
} elseif ( isset( $wgDjvuToXML ) ) {
- wfProfileIn( 'djvutoxml' );
$cmd = wfEscapeShellArg( $wgDjvuToXML ) . ' --without-anno --without-text ' .
wfEscapeShellArg( $this->mFilename );
$xml = wfShellExec( $cmd );
- wfProfileOut( 'djvutoxml' );
} else {
$xml = null;
}
# Text layer
if ( isset( $wgDjvuTxt ) ) {
- wfProfileIn( 'djvutxt' );
$cmd = wfEscapeShellArg( $wgDjvuTxt ) . ' --detail=page ' . wfEscapeShellArg( $this->mFilename );
wfDebug( __METHOD__ . ": $cmd\n" );
$retval = '';
$txt = wfShellExec( $cmd, $retval, array(), array( 'memory' => self::DJVUTXT_MEMORY_LIMIT ) );
- wfProfileOut( 'djvutxt' );
if ( $retval == 0 ) {
# Strip some control characters
$txt = preg_replace( "/[\013\035\037]/", "", $txt );
@@ -316,14 +313,13 @@ EOR;
$xml = $xml . $txt . '</mw-djvu>';
}
}
- wfProfileOut( __METHOD__ );
return $xml;
}
function pageTextCallback( $matches ) {
# Get rid of invalid UTF-8, strip control characters
- $val = htmlspecialchars( UtfNormal::cleanUp( stripcslashes( $matches[1] ) ) );
+ $val = htmlspecialchars( UtfNormal\Validator::cleanUp( stripcslashes( $matches[1] ) ) );
$val = str_replace( array( "\n", '�' ), array( '&#10;', '' ), $val );
return '<PAGE value="' . $val . '" />';
}
diff --git a/includes/media/Exif.php b/includes/media/Exif.php
index 018b58c5..33868689 100644
--- a/includes/media/Exif.php
+++ b/includes/media/Exif.php
@@ -477,7 +477,7 @@ class Exif {
} else {
// if valid utf-8, assume that, otherwise assume windows-1252
$valCopy = $val;
- UtfNormal::quickIsNFCVerify( $valCopy ); //validates $valCopy.
+ UtfNormal\Validator::quickIsNFCVerify( $valCopy ); //validates $valCopy.
if ( $valCopy !== $val ) {
wfSuppressWarnings();
$val = iconv( 'Windows-1252', 'UTF-8//IGNORE', $val );
diff --git a/includes/media/ExifBitmap.php b/includes/media/ExifBitmap.php
index b7657cb3..f56a947f 100644
--- a/includes/media/ExifBitmap.php
+++ b/includes/media/ExifBitmap.php
@@ -125,15 +125,16 @@ class ExifBitmapHandler extends BitmapHandler {
/**
* @param File $image
+ * @param bool|IContextSource $context Context to use (optional)
* @return array|bool
*/
- function formatMetadata( $image ) {
+ function formatMetadata( $image, $context = false ) {
$meta = $this->getCommonMetaArray( $image );
if ( count( $meta ) === 0 ) {
return false;
}
- return $this->formatMetadataHelper( $meta );
+ return $this->formatMetadataHelper( $meta, $context );
}
public function getCommonMetaArray( File $file ) {
diff --git a/includes/media/FormatMetadata.php b/includes/media/FormatMetadata.php
index 43569539..501bb9c2 100644
--- a/includes/media/FormatMetadata.php
+++ b/includes/media/FormatMetadata.php
@@ -1595,11 +1595,8 @@ class FormatMetadata extends ContextSource {
public function fetchExtendedMetadata( File $file ) {
global $wgMemc;
- wfProfileIn( __METHOD__ );
-
// If revision deleted, exit immediately
if ( $file->isDeleted( File::DELETED_FILE ) ) {
- wfProfileOut( __METHOD__ );
return array();
}
@@ -1614,7 +1611,7 @@ class FormatMetadata extends ContextSource {
$cachedValue = $wgMemc->get( $cacheKey );
if (
$cachedValue
- && wfRunHooks( 'ValidateExtendedMetadataCache', array( $cachedValue['timestamp'], $file ) )
+ && Hooks::run( 'ValidateExtendedMetadataCache', array( $cachedValue['timestamp'], $file ) )
) {
$extendedMetadata = $cachedValue['data'];
} else {
@@ -1624,17 +1621,16 @@ class FormatMetadata extends ContextSource {
if ( $this->singleLang ) {
$this->resolveMultilangMetadata( $extendedMetadata );
}
+ $this->discardMultipleValues( $extendedMetadata );
// Make sure the metadata won't break the API when an XML format is used.
// This is an API-specific function so it would be cleaner to call it from
// outside fetchExtendedMetadata, but this way we don't need to redo the
// computation on a cache hit.
- $this->sanitizeArrayForXml( $extendedMetadata );
+ $this->sanitizeArrayForAPI( $extendedMetadata );
$valueToCache = array( 'data' => $extendedMetadata, 'timestamp' => wfTimestampNow() );
$wgMemc->set( $cacheKey, $valueToCache, $maxCacheTime );
}
- wfProfileOut( __METHOD__ );
-
return $extendedMetadata;
}
@@ -1656,8 +1652,6 @@ class FormatMetadata extends ContextSource {
return $file->getExtendedMetadata() ?: array();
}
- wfProfileIn( __METHOD__ );
-
$uploadDate = wfTimestamp( TS_ISO_8601, $file->getTimestamp() );
$fileMetadata = array(
@@ -1685,19 +1679,6 @@ class FormatMetadata extends ContextSource {
);
}
- $common = $file->getCommonMetaArray();
-
- if ( $common !== false ) {
- foreach ( $common as $key => $value ) {
- $fileMetadata[$key] = array(
- 'value' => $value,
- 'source' => 'file-metadata',
- );
- }
- }
-
- wfProfileOut( __METHOD__ );
-
return $fileMetadata;
}
@@ -1714,9 +1695,8 @@ class FormatMetadata extends ContextSource {
protected function getExtendedMetadataFromHook( File $file, array $extendedMetadata,
&$maxCacheTime
) {
- wfProfileIn( __METHOD__ );
- wfRunHooks( 'GetExtendedMetadata', array(
+ Hooks::run( 'GetExtendedMetadata', array(
&$extendedMetadata,
$file,
$this->getContext(),
@@ -1731,8 +1711,6 @@ class FormatMetadata extends ContextSource {
}
}
- wfProfileOut( __METHOD__ );
-
return $extendedMetadata;
}
@@ -1777,6 +1755,32 @@ class FormatMetadata extends ContextSource {
}
/**
+ * Turns an XMP-style multivalue array into a single value by dropping all but the first value.
+ * If the value is not a multivalue array (or a multivalue array inside a multilang array), it is returned unchanged.
+ * See mediawiki.org/wiki/Manual:File_metadata_handling#Multi-language_array_format
+ * @param mixed $value
+ * @return mixed The value, or the first value if there were multiple ones
+ * @since 1.25
+ */
+ protected function resolveMultivalueValue( $value ) {
+ if ( !is_array( $value ) ) {
+ return $value;
+ } elseif ( isset( $value['_type'] ) && $value['_type'] === 'lang' ) { // if this is a multilang array, process fields separately
+ $newValue = array();
+ foreach ( $value as $k => $v ) {
+ $newValue[$k] = $this->resolveMultivalueValue( $v );
+ }
+ return $newValue;
+ } else { // _type is 'ul' or 'ol' or missing in which case it defaults to 'ul'
+ list( $k, $v ) = each( $value );
+ if ( $k === '_type' ) {
+ $v = current( $value );
+ }
+ return $v;
+ }
+ }
+
+ /**
* Takes an array returned by the getExtendedMetadata* functions,
* and resolves multi-language values in it.
* @param array $metadata
@@ -1794,18 +1798,40 @@ class FormatMetadata extends ContextSource {
}
/**
+ * Takes an array returned by the getExtendedMetadata* functions,
+ * and turns all fields into single-valued ones by dropping extra values.
+ * @param array $metadata
+ * @since 1.25
+ */
+ protected function discardMultipleValues( &$metadata ) {
+ if ( !is_array( $metadata ) ) {
+ return;
+ }
+ foreach ( $metadata as $key => &$field ) {
+ if ( $key === 'Software' || $key === 'Contact' ) {
+ // we skip some fields which have composite values. They are not particularly interesting
+ // and you can get them via the metadata / commonmetadata APIs anyway.
+ continue;
+ }
+ if ( isset( $field['value'] ) ) {
+ $field['value'] = $this->resolveMultivalueValue( $field['value'] );
+ }
+ }
+
+ }
+
+ /**
* Makes sure the given array is a valid API response fragment
- * (can be transformed into XML)
* @param array $arr
*/
- protected function sanitizeArrayForXml( &$arr ) {
+ protected function sanitizeArrayForAPI( &$arr ) {
if ( !is_array( $arr ) ) {
return;
}
$counter = 1;
foreach ( $arr as $key => &$value ) {
- $sanitizedKey = $this->sanitizeKeyForXml( $key );
+ $sanitizedKey = $this->sanitizeKeyForAPI( $key );
if ( $sanitizedKey !== $key ) {
if ( isset( $arr[$sanitizedKey] ) ) {
// Make the sanitized keys hopefully unique.
@@ -1819,20 +1845,24 @@ class FormatMetadata extends ContextSource {
unset( $arr[$key] );
}
if ( is_array( $value ) ) {
- $this->sanitizeArrayForXml( $value );
+ $this->sanitizeArrayForAPI( $value );
}
}
+
+ // Handle API metadata keys (particularly "_type")
+ $keys = array_filter( array_keys( $arr ), 'ApiResult::isMetadataKey' );
+ if ( $keys ) {
+ ApiResult::setPreserveKeysList( $arr, $keys );
+ }
}
/**
- * Turns a string into a valid XML identifier.
- * Used to ensure that keys of an associative array in the
- * API response do not break the XML formatter.
+ * Turns a string into a valid API identifier.
* @param string $key
* @return string
* @since 1.23
*/
- protected function sanitizeKeyForXml( $key ) {
+ protected function sanitizeKeyForAPI( $key ) {
// drop all characters which are not valid in an XML tag name
// a bunch of non-ASCII letters would be valid but probably won't
// be used so we take the easy way
diff --git a/includes/media/GIF.php b/includes/media/GIF.php
index 5992be11..e3621fbd 100644
--- a/includes/media/GIF.php
+++ b/includes/media/GIF.php
@@ -44,15 +44,16 @@ class GIFHandler extends BitmapHandler {
/**
* @param File $image
+ * @param bool|IContextSource $context Context to use (optional)
* @return array|bool
*/
- function formatMetadata( $image ) {
+ function formatMetadata( $image, $context = false ) {
$meta = $this->getCommonMetaArray( $image );
if ( count( $meta ) === 0 ) {
return false;
}
- return $this->formatMetadataHelper( $meta );
+ return $this->formatMetadataHelper( $meta, $context );
}
/**
diff --git a/includes/media/GIFMetadataExtractor.php b/includes/media/GIFMetadataExtractor.php
index 178b0bf7..5c370465 100644
--- a/includes/media/GIFMetadataExtractor.php
+++ b/includes/media/GIFMetadataExtractor.php
@@ -158,7 +158,7 @@ class GIFMetadataExtractor {
// assume its that, otherwise assume its windows-1252 (iso-8859-1)
$dataCopy = $data;
// quickIsNFCVerify has the side effect of replacing any invalid characters
- UtfNormal::quickIsNFCVerify( $dataCopy );
+ UtfNormal\Validator::quickIsNFCVerify( $dataCopy );
if ( $dataCopy !== $data ) {
wfSuppressWarnings();
diff --git a/includes/media/IPTC.php b/includes/media/IPTC.php
index 478249fe..0eb27cc8 100644
--- a/includes/media/IPTC.php
+++ b/includes/media/IPTC.php
@@ -456,7 +456,7 @@ class IPTC {
//treat as utf-8 if is valid utf-8. otherwise pretend its windows-1252
// most of the time if there is no 1:90 tag, it is either ascii, latin1, or utf-8
$oldData = $data;
- UtfNormal::quickIsNFCVerify( $data ); //make $data valid utf-8
+ UtfNormal\Validator::quickIsNFCVerify( $data ); //make $data valid utf-8
if ( $data === $oldData ) {
return $data; //if validation didn't change $data
} else {
diff --git a/includes/media/ImageHandler.php b/includes/media/ImageHandler.php
index 6dd0453e..968e4243 100644
--- a/includes/media/ImageHandler.php
+++ b/includes/media/ImageHandler.php
@@ -57,7 +57,7 @@ abstract class ImageHandler extends MediaHandler {
} elseif ( isset( $params['width'] ) ) {
$width = $params['width'];
} else {
- throw new MWException( 'No width specified to ' . __METHOD__ );
+ throw new MediaTransformInvalidParametersException( 'No width specified to ' . __METHOD__ );
}
# Removed for ProofreadPage
@@ -245,11 +245,11 @@ abstract class ImageHandler extends MediaHandler {
if ( $pages === false || $pages <= 1 ) {
$msg = wfMessage( 'file-info-size' )->numParams( $file->getWidth(),
$file->getHeight() )->params( $size,
- $file->getMimeType() )->parse();
+ '<span class="mime-type">' . $file->getMimeType() . '</span>' )->parse();
} else {
$msg = wfMessage( 'file-info-size-pages' )->numParams( $file->getWidth(),
$file->getHeight() )->params( $size,
- $file->getMimeType() )->numParams( $pages )->parse();
+ '<span class="mime-type">' . $file->getMimeType() . '</span>' )->numParams( $pages )->parse();
}
return $msg;
diff --git a/includes/media/Jpeg.php b/includes/media/Jpeg.php
index fbdbdfe3..5463922b 100644
--- a/includes/media/Jpeg.php
+++ b/includes/media/Jpeg.php
@@ -106,7 +106,7 @@ class JpegHandler extends ExifBitmapHandler {
$meta['MEDIAWIKI_EXIF_VERSION'] = Exif::version();
return serialize( $meta );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// BitmapMetadataHandler throws an exception in certain exceptional
// cases like if file does not exist.
wfDebug( __METHOD__ . ': ' . $e->getMessage() . "\n" );
@@ -143,10 +143,8 @@ class JpegHandler extends ExifBitmapHandler {
" -outfile " . wfEscapeShellArg( $params['dstPath'] ) .
" " . wfEscapeShellArg( $params['srcPath'] );
wfDebug( __METHOD__ . ": running jpgtran: $cmd\n" );
- wfProfileIn( 'jpegtran' );
$retval = 0;
$err = wfShellExecWithStderr( $cmd, $retval );
- wfProfileOut( 'jpegtran' );
if ( $retval !== 0 ) {
$this->logErrorForExternalProcess( $retval, $err, $cmd );
diff --git a/includes/media/JpegMetadataExtractor.php b/includes/media/JpegMetadataExtractor.php
index aaa9930a..ae4af8d1 100644
--- a/includes/media/JpegMetadataExtractor.php
+++ b/includes/media/JpegMetadataExtractor.php
@@ -98,7 +98,7 @@ class JpegMetadataExtractor {
// First see if valid utf-8,
// if not try to convert it to windows-1252.
$com = $oldCom = trim( self::jpegExtractMarker( $fh ) );
- UtfNormal::quickIsNFCVerify( $com );
+ UtfNormal\Validator::quickIsNFCVerify( $com );
// turns $com to valid utf-8.
// thus if no change, its utf-8, otherwise its something else.
if ( $com !== $oldCom ) {
@@ -108,7 +108,7 @@ class JpegMetadataExtractor {
}
// Try it again, if its still not a valid string, then probably
// binary junk or some really weird encoding, so don't extract.
- UtfNormal::quickIsNFCVerify( $com );
+ UtfNormal\Validator::quickIsNFCVerify( $com );
if ( $com === $oldCom ) {
$segments["COM"][] = $oldCom;
} else {
diff --git a/includes/media/MediaHandler.php b/includes/media/MediaHandler.php
index 64ca0115..33aed34f 100644
--- a/includes/media/MediaHandler.php
+++ b/includes/media/MediaHandler.php
@@ -162,7 +162,7 @@ abstract class MediaHandler {
*/
static function getMetadataVersion() {
$version = array( '2' ); // core metadata version
- wfRunHooks( 'GetMetadataVersion', array( &$version ) );
+ Hooks::run( 'GetMetadataVersion', array( &$version ) );
return implode( ';', $version );
}
@@ -507,9 +507,10 @@ abstract class MediaHandler {
* to some standard. That makes it possible to do things like visual
* indication of grouped and chained streams in ogg container files.
* @param File $image
+ * @param bool|IContextSource $context Context to use (optional)
* @return array|bool
*/
- function formatMetadata( $image ) {
+ function formatMetadata( $image, $context = false ) {
return false;
}
@@ -520,15 +521,16 @@ abstract class MediaHandler {
* This is used by the media handlers that use the FormatMetadata class
*
* @param array $metadataArray Metadata array
+ * @param bool|IContextSource $context Context to use (optional)
* @return array Array for use displaying metadata.
*/
- function formatMetadataHelper( $metadataArray ) {
+ function formatMetadataHelper( $metadataArray, $context = false ) {
$result = array(
'visible' => array(),
'collapsed' => array()
);
- $formatted = FormatMetadata::getFormattedData( $metadataArray );
+ $formatted = FormatMetadata::getFormattedData( $metadataArray, $context );
// Sort fields into visible and collapsed
$visibleFields = $this->visibleMetadataFields();
foreach ( $formatted as $name => $value ) {
@@ -637,7 +639,7 @@ abstract class MediaHandler {
*/
static function getGeneralLongDesc( $file ) {
return wfMessage( 'file-info' )->sizeParams( $file->getSize() )
- ->params( $file->getMimeType() )->parse();
+ ->params( '<span class="mime-type">' . $file->getMimeType() . '</span>' )->parse();
}
/**
@@ -859,4 +861,26 @@ abstract class MediaHandler {
public function sanitizeParamsForBucketing( $params ) {
return $params;
}
+
+ /**
+ * Gets configuration for the file warning message. Return value of
+ * the following structure:
+ * array(
+ * 'module' => 'example.filewarning.messages', // Required, module with messages loaded for the client
+ * 'messages' => array( // Required, array of names of messages
+ * 'main' => 'example-filewarning-main', // Required, main warning message
+ * 'header' => 'example-filewarning-header', // Optional, header for warning dialog
+ * 'footer' => 'example-filewarning-footer', // Optional, footer for warning dialog
+ * 'info' => 'example-filewarning-info', // Optional, text for more-information link (see below)
+ * ),
+ * 'link' => 'http://example.com', // Optional, link for more information
+ * )
+ *
+ * Returns null if no warning is necessary.
+ * @param File $file
+ * @return array|null
+ */
+ public function getWarningConfig( $file ) {
+ return null;
+ }
}
diff --git a/includes/media/MediaTransformInvalidParametersException.php b/includes/media/MediaTransformInvalidParametersException.php
new file mode 100644
index 00000000..15a2ca55
--- /dev/null
+++ b/includes/media/MediaTransformInvalidParametersException.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * MediaWiki exception thrown by some methods when the transform parameter array is invalid
+ *
+ * @ingroup Exception
+ */
+class MediaTransformInvalidParametersException extends MWException {}
diff --git a/includes/media/MediaTransformOutput.php b/includes/media/MediaTransformOutput.php
index bc9e9173..1dd85191 100644
--- a/includes/media/MediaTransformOutput.php
+++ b/includes/media/MediaTransformOutput.php
@@ -348,9 +348,14 @@ class ThumbnailImage extends MediaTransformOutput {
throw new MWException( __METHOD__ . ' called in the old style' );
}
- $alt = empty( $options['alt'] ) ? '' : $options['alt'];
+ $alt = isset( $options['alt'] ) ? $options['alt'] : '';
- $query = empty( $options['desc-query'] ) ? '' : $options['desc-query'];
+ $query = isset( $options['desc-query'] ) ? $options['desc-query'] : '';
+
+ $attribs = array(
+ 'alt' => $alt,
+ 'src' => $this->url,
+ );
if ( !empty( $options['custom-url-link'] ) ) {
$linkAttribs = array( 'href' => $options['custom-url-link'] );
@@ -381,13 +386,11 @@ class ThumbnailImage extends MediaTransformOutput {
$linkAttribs = array( 'href' => $this->file->getURL() );
} else {
$linkAttribs = false;
+ if ( !empty( $options['title'] ) ) {
+ $attribs['title'] = $options['title'];
+ }
}
- $attribs = array(
- 'alt' => $alt,
- 'src' => $this->url,
- );
-
if ( empty( $options['no-dimensions'] ) ) {
$attribs['width'] = $this->width;
$attribs['height'] = $this->height;
@@ -410,7 +413,7 @@ class ThumbnailImage extends MediaTransformOutput {
$attribs['srcset'] = Html::srcSet( $this->responsiveUrls );
}
- wfRunHooks( 'ThumbnailBeforeProduceHTML', array( $this, &$attribs, &$linkAttribs ) );
+ Hooks::run( 'ThumbnailBeforeProduceHTML', array( $this, &$attribs, &$linkAttribs ) );
return $this->linkWrap( $linkAttribs, Xml::element( 'img', $attribs ) );
}
@@ -474,3 +477,24 @@ class TransformParameterError extends MediaTransformError {
wfMessage( 'thumbnail_invalid_params' )->text() );
}
}
+
+/**
+ * Shortcut class for parameter file size errors
+ *
+ * @ingroup Media
+ * @since 1.25
+ */
+class TransformTooBigImageAreaError extends MediaTransformError {
+ function __construct( $params, $maxImageArea ) {
+ $msg = wfMessage( 'thumbnail_toobigimagearea' );
+
+ parent::__construct( 'thumbnail_error',
+ max( isset( $params['width'] ) ? $params['width'] : 0, 120 ),
+ max( isset( $params['height'] ) ? $params['height'] : 0, 120 ),
+ $msg->rawParams(
+ $msg->getLanguage()->formatComputingNumbers(
+ $maxImageArea, 1000, "size-$1pixel" )
+ )->text()
+ );
+ }
+}
diff --git a/includes/media/PNG.php b/includes/media/PNG.php
index 7b3ddb51..5f1aca57 100644
--- a/includes/media/PNG.php
+++ b/includes/media/PNG.php
@@ -49,15 +49,16 @@ class PNGHandler extends BitmapHandler {
/**
* @param File $image
+ * @param bool|IContextSource $context Context to use (optional)
* @return array|bool
*/
- function formatMetadata( $image ) {
+ function formatMetadata( $image, $context = false ) {
$meta = $this->getCommonMetaArray( $image );
if ( count( $meta ) === 0 ) {
return false;
}
- return $this->formatMetadataHelper( $meta );
+ return $this->formatMetadataHelper( $meta, $context );
}
/**
@@ -174,7 +175,10 @@ class PNGHandler extends BitmapHandler {
return $wgLang->commaList( $info );
}
+ // PNGs should be easy to support, but it will need some sharpening applied
+ // and another user test to check if the perceived quality change is noticeable
+
public function supportsBucketing() {
- return true;
+ return false;
}
}
diff --git a/includes/media/SVG.php b/includes/media/SVG.php
index 74e5e048..8fdfa474 100644
--- a/includes/media/SVG.php
+++ b/includes/media/SVG.php
@@ -272,10 +272,8 @@ class SvgHandler extends ImageHandler {
$env['LANG'] = $lang;
}
- wfProfileIn( 'rsvg' );
wfDebug( __METHOD__ . ": $cmd\n" );
$err = wfShellExecWithStderr( $cmd, $retval, $env );
- wfProfileOut( 'rsvg' );
}
}
$removed = $this->removeBadFile( $dstPath, $retval );
@@ -364,7 +362,7 @@ class SvgHandler extends ImageHandler {
$metadata = array( 'version' => self::SVG_METADATA_VERSION );
try {
$metadata += SVGMetadataExtractor::getMetadata( $filename );
- } catch ( MWException $e ) { // @todo SVG specific exceptions
+ } catch ( Exception $e ) { // @todo SVG specific exceptions
// File not found, broken, etc.
$metadata['error'] = array(
'message' => $e->getMessage(),
@@ -412,9 +410,10 @@ class SvgHandler extends ImageHandler {
/**
* @param File $file
+ * @param bool|IContextSource $context Context to use (optional)
* @return array|bool
*/
- function formatMetadata( $file ) {
+ function formatMetadata( $file, $context = false ) {
$result = array(
'visible' => array(),
'collapsed' => array()
@@ -488,7 +487,7 @@ class SvgHandler extends ImageHandler {
function makeParamString( $params ) {
$lang = '';
if ( isset( $params['lang'] ) && $params['lang'] !== 'en' ) {
- $params['lang'] = mb_strtolower( $params['lang'] );
+ $params['lang'] = strtolower( $params['lang'] );
$lang = "lang{$params['lang']}-";
}
if ( !isset( $params['width'] ) ) {
diff --git a/includes/media/SVGMetadataExtractor.php b/includes/media/SVGMetadataExtractor.php
index 2a1091d8..2037c331 100644
--- a/includes/media/SVGMetadataExtractor.php
+++ b/includes/media/SVGMetadataExtractor.php
@@ -138,7 +138,7 @@ class SVGReader {
$keepReading = $this->reader->read();
/* Skip until first element */
- while ( $keepReading && $this->reader->nodeType != XmlReader::ELEMENT ) {
+ while ( $keepReading && $this->reader->nodeType != XMLReader::ELEMENT ) {
$keepReading = $this->reader->read();
}
@@ -158,7 +158,7 @@ class SVGReader {
$this->debug( "$tag" );
- if ( $isSVG && $tag == 'svg' && $type == XmlReader::END_ELEMENT
+ if ( $isSVG && $tag == 'svg' && $type == XMLReader::END_ELEMENT
&& $this->reader->depth <= $exitDepth
) {
break;
@@ -166,7 +166,7 @@ class SVGReader {
$this->readField( $tag, 'title' );
} elseif ( $isSVG && $tag == 'desc' ) {
$this->readField( $tag, 'description' );
- } elseif ( $isSVG && $tag == 'metadata' && $type == XmlReader::ELEMENT ) {
+ } elseif ( $isSVG && $tag == 'metadata' && $type == XMLReader::ELEMENT ) {
$this->readXml( $tag, 'metadata' );
} elseif ( $isSVG && $tag == 'script' ) {
// We normally do not allow scripted svgs.
@@ -199,17 +199,17 @@ class SVGReader {
*/
private function readField( $name, $metafield = null ) {
$this->debug( "Read field $metafield" );
- if ( !$metafield || $this->reader->nodeType != XmlReader::ELEMENT ) {
+ if ( !$metafield || $this->reader->nodeType != XMLReader::ELEMENT ) {
return;
}
$keepReading = $this->reader->read();
while ( $keepReading ) {
if ( $this->reader->localName == $name
&& $this->reader->namespaceURI == self::NS_SVG
- && $this->reader->nodeType == XmlReader::END_ELEMENT
+ && $this->reader->nodeType == XMLReader::END_ELEMENT
) {
break;
- } elseif ( $this->reader->nodeType == XmlReader::TEXT ) {
+ } elseif ( $this->reader->nodeType == XMLReader::TEXT ) {
$this->metadata[$metafield] = trim( $this->reader->value );
}
$keepReading = $this->reader->read();
@@ -224,7 +224,7 @@ class SVGReader {
*/
private function readXml( $metafield = null ) {
$this->debug( "Read top level metadata" );
- if ( !$metafield || $this->reader->nodeType != XmlReader::ELEMENT ) {
+ if ( !$metafield || $this->reader->nodeType != XMLReader::ELEMENT ) {
return;
}
// @todo Find and store type of xml snippet. metadata['metadataType'] = "rdf"
@@ -246,7 +246,7 @@ class SVGReader {
*/
private function animateFilterAndLang( $name ) {
$this->debug( "animate filter for tag $name" );
- if ( $this->reader->nodeType != XmlReader::ELEMENT ) {
+ if ( $this->reader->nodeType != XMLReader::ELEMENT ) {
return;
}
if ( $this->reader->isEmptyElement ) {
@@ -256,11 +256,11 @@ class SVGReader {
$keepReading = $this->reader->read();
while ( $keepReading ) {
if ( $this->reader->localName == $name && $this->reader->depth <= $exitDepth
- && $this->reader->nodeType == XmlReader::END_ELEMENT
+ && $this->reader->nodeType == XMLReader::END_ELEMENT
) {
break;
} elseif ( $this->reader->namespaceURI == self::NS_SVG
- && $this->reader->nodeType == XmlReader::ELEMENT
+ && $this->reader->nodeType == XMLReader::ELEMENT
) {
$sysLang = $this->reader->getAttribute( 'systemLanguage' );
diff --git a/includes/media/Tiff.php b/includes/media/Tiff.php
index bea6cab3..750528f0 100644
--- a/includes/media/Tiff.php
+++ b/includes/media/Tiff.php
@@ -88,7 +88,7 @@ class TiffHandler extends ExifBitmapHandler {
$meta['MEDIAWIKI_EXIF_VERSION'] = Exif::version();
return serialize( $meta );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// BitmapMetadataHandler throws an exception in certain exceptional
// cases like if file does not exist.
wfDebug( __METHOD__ . ': ' . $e->getMessage() . "\n" );
diff --git a/includes/media/TransformationalImageHandler.php b/includes/media/TransformationalImageHandler.php
index 3e3be3d1..fd8d81d2 100644
--- a/includes/media/TransformationalImageHandler.php
+++ b/includes/media/TransformationalImageHandler.php
@@ -61,29 +61,6 @@ abstract class TransformationalImageHandler extends ImageHandler {
}
}
- # Check if the file is smaller than the maximum image area for thumbnailing
- # For historical reasons, hook starts with BitmapHandler
- $checkImageAreaHookResult = null;
- wfRunHooks(
- 'BitmapHandlerCheckImageArea',
- array( $image, &$params, &$checkImageAreaHookResult )
- );
-
- if ( is_null( $checkImageAreaHookResult ) ) {
- global $wgMaxImageArea;
-
- if ( $srcWidth * $srcHeight > $wgMaxImageArea
- && !( $image->getMimeType() == 'image/jpeg'
- && $this->getScalerType( false, false ) == 'im' )
- ) {
- # Only ImageMagick can efficiently downsize jpg images without loading
- # the entire file in memory
- return false;
- }
- } else {
- return $checkImageAreaHookResult;
- }
-
return true;
}
@@ -190,6 +167,11 @@ abstract class TransformationalImageHandler extends ImageHandler {
return $this->getClientScalingThumbnailImage( $image, $scalerParams );
}
+ if ( !$this->isImageAreaOkForThumbnaling( $image, $params ) ) {
+ global $wgMaxImageArea;
+ return new TransformTooBigImageAreaError( $params, $wgMaxImageArea );
+ }
+
if ( $flags & self::TRANSFORM_LATER ) {
wfDebug( __METHOD__ . ": Transforming later per flags.\n" );
$newParams = array(
@@ -216,6 +198,12 @@ abstract class TransformationalImageHandler extends ImageHandler {
# Transform functions and binaries need a FS source file
$thumbnailSource = $this->getThumbnailSource( $image, $params );
+ // If the source isn't the original, disable EXIF rotation because it's already been applied
+ if ( $scalerParams['srcWidth'] != $thumbnailSource['width']
+ || $scalerParams['srcHeight'] != $thumbnailSource['height'] ) {
+ $scalerParams['disableRotation'] = true;
+ }
+
$scalerParams['srcPath'] = $thumbnailSource['path'];
$scalerParams['srcWidth'] = $thumbnailSource['width'];
$scalerParams['srcHeight'] = $thumbnailSource['height'];
@@ -234,7 +222,7 @@ abstract class TransformationalImageHandler extends ImageHandler {
# Try a hook. Called "Bitmap" for historical reasons.
/** @var $mto MediaTransformOutput */
$mto = null;
- wfRunHooks( 'BitmapHandlerTransform', array( $this, $image, &$scalerParams, &$mto ) );
+ Hooks::run( 'BitmapHandlerTransform', array( $this, $image, &$scalerParams, &$mto ) );
if ( !is_null( $mto ) ) {
wfDebug( __METHOD__ . ": Hook to BitmapHandlerTransform created an mto\n" );
$scaler = 'hookaborted';
@@ -590,4 +578,43 @@ abstract class TransformationalImageHandler extends ImageHandler {
public function mustRender( $file ) {
return $this->canRotate() && $this->getRotation( $file ) != 0;
}
+
+ /**
+ * Check if the file is smaller than the maximum image area for thumbnailing.
+ *
+ * Runs the 'BitmapHandlerCheckImageArea' hook.
+ *
+ * @param File $file
+ * @param array $params
+ * @return bool
+ * @since 1.25
+ */
+ public function isImageAreaOkForThumbnaling( $file, &$params ) {
+ global $wgMaxImageArea;
+
+ # For historical reasons, hook starts with BitmapHandler
+ $checkImageAreaHookResult = null;
+ Hooks::run(
+ 'BitmapHandlerCheckImageArea',
+ array( $file, &$params, &$checkImageAreaHookResult )
+ );
+
+ if ( !is_null( $checkImageAreaHookResult ) ) {
+ // was set by hook, so return that value
+ return (bool)$checkImageAreaHookResult;
+ }
+
+ $srcWidth = $file->getWidth( $params['page'] );
+ $srcHeight = $file->getHeight( $params['page'] );
+
+ if ( $srcWidth * $srcHeight > $wgMaxImageArea
+ && !( $file->getMimeType() == 'image/jpeg'
+ && $this->getScalerType( false, false ) == 'im' )
+ ) {
+ # Only ImageMagick can efficiently downsize jpg images without loading
+ # the entire file in memory
+ return false;
+ }
+ return true;
+ }
}
diff --git a/includes/media/XCF.php b/includes/media/XCF.php
index 48b7a47c..6544d5cf 100644
--- a/includes/media/XCF.php
+++ b/includes/media/XCF.php
@@ -130,7 +130,7 @@ class XCFHandler extends BitmapHandler {
"/Nbase_type", # /
$binaryHeader
);
- } catch ( MWException $mwe ) {
+ } catch ( Exception $mwe ) {
return false;
}
diff --git a/includes/media/XMP.php b/includes/media/XMP.php
index a3f45e6c..50f04ae9 100644
--- a/includes/media/XMP.php
+++ b/includes/media/XMP.php
@@ -195,7 +195,7 @@ class XMPReader {
$data = $this->results;
- wfRunHooks( 'XMPGetResults', array( &$data ) );
+ Hooks::run( 'XMPGetResults', array( &$data ) );
if ( isset( $data['xmp-special']['AuthorsPosition'] )
&& is_string( $data['xmp-special']['AuthorsPosition'] )
@@ -331,7 +331,7 @@ class XMPReader {
// could declare entities unsafe to parse with xml_parse (T85848/T71210).
if ( $this->parsable !== self::PARSABLE_OK ) {
if ( $this->parsable === self::PARSABLE_NO ) {
- throw new MWException( 'Unsafe doctype declaration in XML.' );
+ throw new Exception( 'Unsafe doctype declaration in XML.' );
}
$content = $this->xmlParsableBuffer . $content;
@@ -344,7 +344,7 @@ class XMPReader {
$msg = ( $this->parsable === self::PARSABLE_NO ) ?
'Unsafe doctype declaration in XML.' :
'No root element found in XML.';
- throw new MWException( $msg );
+ throw new Exception( $msg );
}
}
@@ -359,7 +359,7 @@ class XMPReader {
$this->results = array(); // blank if error.
return false;
}
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
wfDebugLog( 'XMP', 'XMP parse error: ' . $e );
$this->results = array();
@@ -501,6 +501,10 @@ class XMPReader {
);
$oldDisable = libxml_disable_entity_loader( true );
+ $reset = new ScopedCallback(
+ 'libxml_disable_entity_loader',
+ array( $oldDisable )
+ );
$reader->setParserProperty( XMLReader::SUBST_ENTITIES, false );
// Even with LIBXML_NOWARNING set, XMLReader::read gives a warning
@@ -520,7 +524,6 @@ class XMPReader {
}
}
wfRestoreWarnings();
- libxml_disable_entity_loader( $oldDisable );
if ( !is_null( $result ) ) {
return $result;
diff --git a/includes/media/XMPInfo.php b/includes/media/XMPInfo.php
index 7e47ec14..e0a491cb 100644
--- a/includes/media/XMPInfo.php
+++ b/includes/media/XMPInfo.php
@@ -34,7 +34,7 @@ class XMPInfo {
if ( !self::$ranHooks ) {
// This is for if someone makes a custom metadata extension.
// For example, a medical wiki might want to decode DICOM xmp properties.
- wfRunHooks( 'XMPGetInfo', array( &self::$items ) );
+ Hooks::run( 'XMPGetInfo', array( &self::$items ) );
self::$ranHooks = true; // Only want to do this once.
}
diff --git a/includes/mime.info b/includes/mime.info
index 07b24954..243e2802 100644
--- a/includes/mime.info
+++ b/includes/mime.info
@@ -72,6 +72,7 @@ text/tab-separated-values [TEXT]
application/zip application/x-zip [ARCHIVE]
application/x-gzip [ARCHIVE]
application/x-bzip [ARCHIVE]
+application/x-bzip2 [ARCHIVE]
application/x-tar [ARCHIVE]
application/x-stuffit [ARCHIVE]
application/x-opc+zip [ARCHIVE]
diff --git a/includes/mime.types b/includes/mime.types
index 75017db2..210610ad 100644
--- a/includes/mime.types
+++ b/includes/mime.types
@@ -21,7 +21,8 @@ application/vnd.wap.wmlc wmlc
application/vnd.wap.wmlscriptc wmlsc
application/voicexml+xml vxml
application/x-bcpio bcpio
-application/x-bzip gz bz2
+application/x-bzip bz
+application/x-bzip2 bz2
application/x-cdlink vcd
application/x-chess-pgn pgn
application/x-cpio cpio
diff --git a/includes/normal/Makefile b/includes/normal/Makefile
deleted file mode 100644
index 76cb68ba..00000000
--- a/includes/normal/Makefile
+++ /dev/null
@@ -1,78 +0,0 @@
-.PHONY : all test testutf8 testclean icutest bench icubench clean distclean
-
-## Latest greatest version of Unicode
-## May cause confusion if running test suite from these files
-## when the data was generated from a previous version.
-#BASE=http://www.unicode.org/Public/UNIDATA
-
-# Explicitly using Unicode 6.0
-BASE=http://www.unicode.org/Public/6.0.0/ucd
-
-# Can override to php-cli or php5 or whatever
-PHP=php
-#PHP=php-cli
-
-# Some nice tool to grab URLs with
-FETCH=wget
-#FETCH=fetch
-
-all : UtfNormalData.inc
-
-UtfNormalData.inc : UtfNormalGenerate.php UtfNormalUtil.php UnicodeData.txt CompositionExclusions.txt NormalizationCorrections.txt DerivedNormalizationProps.txt
- $(PHP) UtfNormalGenerate.php
-
-test : testutf8 UtfNormalTest.php UtfNormalData.inc NormalizationTest.txt
- $(PHP) UtfNormalTest.php
-
-testutf8 : Utf8Test.php UTF-8-test.txt
- $(PHP) Utf8Test.php
-
-bench : UtfNormalData.inc testdata/washington.txt testdata/berlin.txt testdata/tokyo.txt testdata/young.txt testdata/bulgakov.txt
- $(PHP) UtfNormalBench.php
-
-icutest : UtfNormalData.inc NormalizationTest.txt
- $(PHP) Utf8Test.php --icu
- $(PHP) UtfNormalTest.php --icu
-
-icubench : UtfNormalData.inc testdata/washington.txt testdata/berlin.txt testdata/tokyo.txt testdata/young.txt testdata/bulgakov.txt
- $(PHP) UtfNormalBench.php --icu
-
-clean :
- rm -f UtfNormalData.inc UtfNormalDataK.inc
-
-distclean : clean
- rm -f CompositionExclusions.txt NormalizationTest.txt NormalizationCorrections.txt UnicodeData.txt DerivedNormalizationProps.txt UTF-8-test.txt
-
-# The Unicode data files...
-CompositionExclusions.txt :
- $(FETCH) $(BASE)/CompositionExclusions.txt
-
-NormalizationTest.txt :
- $(FETCH) $(BASE)/NormalizationTest.txt
-
-NormalizationCorrections.txt :
- $(FETCH) $(BASE)/NormalizationCorrections.txt
-
-DerivedNormalizationProps.txt :
- $(FETCH) $(BASE)/DerivedNormalizationProps.txt
-
-UnicodeData.txt :
- $(FETCH) $(BASE)/UnicodeData.txt
-
-UTF-8-test.txt :
- $(FETCH) http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
-
-testdata/berlin.txt :
- mkdir -p testdata && wget -U MediaWiki/test -O testdata/berlin.txt "http://de.wikipedia.org/w/index.php?title=Berlin&oldid=2775712&action=raw"
-
-testdata/washington.txt :
- mkdir -p testdata && wget -U MediaWiki/test -O testdata/washington.txt "http://en.wikipedia.org/w/index.php?title=Washington%2C_D.C.&oldid=6370218&action=raw"
-
-testdata/tokyo.txt :
- mkdir -p testdata && wget -U MediaWiki/test -O testdata/tokyo.txt "http://ja.wikipedia.org/w/index.php?title=%E6%9D%B1%E4%BA%AC%E9%83%BD&oldid=940880&action=raw"
-
-testdata/young.txt :
- mkdir -p testdata && wget -U MediaWiki/test -O testdata/young.txt "http://ko.wikipedia.org/w/index.php?title=%EC%9D%B4%EC%88%98%EC%98%81&oldid=627688&action=raw"
-
-testdata/bulgakov.txt :
- mkdir -p testdata && wget -U MediaWiki/test -O testdata/bulgakov.txt "http://ru.wikipedia.org/w/index.php?title=%D0%91%D1%83%D0%BB%D0%B3%D0%B0%D0%BA%D0%BE%D0%B2%2C_%D0%A1%D0%B5%D1%80%D0%B3%D0%B5%D0%B9_%D0%9D%D0%B8%D0%BA%D0%BE%D0%BB%D0%B0%D0%B5%D0%B2%D0%B8%D1%87&oldid=17704&action=raw"
diff --git a/includes/normal/README b/includes/normal/README
deleted file mode 100644
index 0f718d2c..00000000
--- a/includes/normal/README
+++ /dev/null
@@ -1,59 +0,0 @@
-This directory contains some Unicode normalization routines. These routines
-are meant to be reusable in other projects, so I'm not tying them to the
-MediaWiki utility functions.
-
-The main function to care about is UtfNormal::toNFC(); this will convert
-a given UTF-8 string to Normalization Form C if it's not already such.
-The function assumes that the input string is already valid UTF-8; if there
-are corrupt characters this may produce erroneous results.
-
-To also check for illegal characters, use UtfNormal::cleanUp(). This will
-strip illegal UTF-8 sequences and characters that are illegal in XML, and
-if necessary convert to normalization form C.
-
-Performance is kind of stinky in absolute terms, though it should be speedy
-on pure ASCII text. ;) On text that can be determined quickly to already be
-in NFC it's not too awful but it can quickly get uncomfortably slow,
-particularly for Korean text (the hangul decomposition/composition code is
-extra slow).
-
-
-== Regenerating data tables ==
-
-UtfNormalData.inc and UtfNormalDataK.inc are generated from the Unicode
-Character Database by the script UtfNormalGenerate.php. On a *nix system
-'make' should fetch the necessary files and regenerate it if the scripts
-have been changed or you remove it.
-
-
-== Testing ==
-
-'make test' will run the conformance test (UtfNormalTest.php), fetching the
-data from from the net if necessary. If it reports failure, something is
-going wrong!
-
-You may have to set up PHPUnit first.
-
-$ pear channel-discover pear.phpunit.de
-$ pear install phpunit/PHPUnit
-
-== Benchmarks ==
-
-Run 'make bench' to download some sample texts from Wikipedia and run some
-cheap benchmarks of some of the functions. Take all numbers with large
-grains of salt.
-
-
-== PHP module extension ==
-
-There's an experimental PHP extension module which wraps the ICU library's
-normalization functions. This is *MUCH* faster than doing this work in pure
-PHP code. This is at https://git.wikimedia.org/summary/mediawiki%2Fextensions%2Fnormal.git.
-It is used by the WMF, which currently runs PHP 5.3.10 on Linux. It hasn't been
-thoroughly tested on other configurations, but may work.
-
-If the php_normal.so module is loaded in php.ini, the normalization functions
-will automatically use it. If you can't (or don't want to) load it in php.ini,
-you may be able to load it using the dl() function before the inclusion of
-UtfNormal.php, and it will be picked up.
-
diff --git a/includes/normal/RandomTest.php b/includes/normal/RandomTest.php
deleted file mode 100644
index 0604d7bb..00000000
--- a/includes/normal/RandomTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-/**
- * Test feeds random 16-byte strings to both the pure PHP and ICU-based
- * UtfNormal::cleanUp() code paths, and checks to see if there's a
- * difference. Will run forever until it finds one or you kill it.
- *
- * Copyright (C) 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-if ( PHP_SAPI != 'cli' ) {
- die( "Run me from the command line please.\n" );
-}
-
-/** */
-require_once 'UtfNormal.php';
-require_once '../diff/DifferenceEngine.php';
-
-dl( 'php_utfnormal.so' );
-
-# mt_srand( 99999 );
-
-function randomString( $length, $nullOk, $ascii = false ) {
- $out = '';
- for ( $i = 0; $i < $length; $i++ )
- $out .= chr( mt_rand( $nullOk ? 0 : 1, $ascii ? 127 : 255 ) );
-
- return $out;
-}
-
-/* Duplicate of the cleanUp() path for ICU usage */
-function donorm( $str ) {
- # We exclude a few chars that ICU would not.
- $str = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', UTF8_REPLACEMENT, $str );
- $str = str_replace( UTF8_FFFE, UTF8_REPLACEMENT, $str );
- $str = str_replace( UTF8_FFFF, UTF8_REPLACEMENT, $str );
-
- # UnicodeString constructor fails if the string ends with a head byte.
- # Add a junk char at the end, we'll strip it off
- return rtrim( utf8_normalize( $str . "\x01", UtfNormal::UNORM_NFC ), "\x01" );
-}
-
-function showDiffs( $a, $b ) {
- $ota = explode( "\n", str_replace( "\r\n", "\n", $a ) );
- $nta = explode( "\n", str_replace( "\r\n", "\n", $b ) );
-
- $diffs = new Diff( $ota, $nta );
- $formatter = new TableDiffFormatter();
- $funky = $formatter->format( $diffs );
- $matches = array();
- preg_match_all( '/<(?:ins|del) class="diffchange">(.*?)<\/(?:ins|del)>/', $funky, $matches );
- foreach ( $matches[1] as $bit ) {
- $hex = bin2hex( $bit );
- echo "\t$hex\n";
- }
-}
-
-$size = 16;
-$n = 0;
-while ( true ) {
- $n++;
- echo "$n\n";
-
- $str = randomString( $size, true );
- $clean = UtfNormal::cleanUp( $str );
- $norm = donorm( $str );
-
- echo strlen( $clean ) . ", " . strlen( $norm );
- if ( $clean == $norm ) {
- echo " (match)\n";
- } else {
- echo " (FAIL)\n";
- echo "\traw: " . bin2hex( $str ) . "\n" .
- "\tphp: " . bin2hex( $clean ) . "\n" .
- "\ticu: " . bin2hex( $norm ) . "\n";
- echo "\n\tdiffs:\n";
- showDiffs( $clean, $norm );
- die();
- }
-
- $str = '';
- $clean = '';
- $norm = '';
-}
diff --git a/includes/normal/Utf8Test.php b/includes/normal/Utf8Test.php
deleted file mode 100644
index f4acc1eb..00000000
--- a/includes/normal/Utf8Test.php
+++ /dev/null
@@ -1,156 +0,0 @@
-<?php
-/**
- * Runs the UTF-8 decoder test at:
- * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-/** */
-
-if ( PHP_SAPI != 'cli' ) {
- die( "Run me from the command line please.\n" );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-require_once 'UtfNormal.php';
-mb_internal_encoding( "utf-8" );
-
-$verbose = false;
-#$verbose = true;
-
-$in = fopen( "UTF-8-test.txt", "rt" );
-if ( !$in ) {
- print "Couldn't open UTF-8-test.txt -- can't run tests.\n";
- print "If necessary, manually download this file. It can be obtained at\n";
- print "http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt\n";
- exit( -1 );
-}
-
-$columns = 0;
-while ( false !== ( $line = fgets( $in ) ) ) {
- $matches = array();
- if ( preg_match( '/^(Here come the tests:\s*)\|$/', $line, $matches ) ) {
- $columns = strpos( $line, '|' );
- break;
- }
-}
-
-if ( !$columns ) {
- print "Something seems to be wrong; couldn't extract line length.\n";
- print "Check that UTF-8-test.txt was downloaded correctly from\n";
- print "http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt\n";
- exit( -1 );
-}
-
-# print "$columns\n";
-
-$ignore = array(
- # These two lines actually seem to be corrupt
- '2.1.1', '2.2.1' );
-
-$exceptions = array(
- # Tests that should mark invalid characters due to using long
- # sequences beyond what is now considered legal.
- '2.1.5', '2.1.6', '2.2.4', '2.2.5', '2.2.6', '2.3.5',
-
- # Literal 0xffff, which is illegal
- '2.2.3' );
-
-$longTests = array(
- # These tests span multiple lines
- '3.1.9', '3.2.1', '3.2.2', '3.2.3', '3.2.4', '3.2.5',
- '3.4' );
-
-# These tests are not in proper subsections
-$sectionTests = array( '3.4' );
-
-$section = null;
-$test = '';
-$failed = 0;
-$success = 0;
-$total = 0;
-while ( false !== ( $line = fgets( $in ) ) ) {
- $matches = array();
- if ( preg_match( '/^(\d+)\s+(.*?)\s*\|/', $line, $matches ) ) {
- $section = $matches[1];
- print $line;
- continue;
- }
- if ( preg_match( '/^(\d+\.\d+\.\d+)\s*/', $line, $matches ) ) {
- $test = $matches[1];
-
- if ( in_array( $test, $ignore ) ) {
- continue;
- }
- if ( in_array( $test, $longTests ) ) {
- $line = fgets( $in );
-
- // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
- for ( $line = fgets( $in ); !preg_match( '/^\s+\|/', $line ); $line = fgets( $in ) ) {
- // @codingStandardsIgnoreEnd
-
- testLine( $test, $line, $total, $success, $failed, $columns, $exceptions, $verbose );
- }
- } else {
- testLine( $test, $line, $total, $success, $failed, $columns, $exceptions, $verbose );
- }
- }
-}
-
-if ( $failed ) {
- echo "\nFailed $failed tests.\n";
- echo "UTF-8 DECODER TEST FAILED\n";
- exit ( -1 );
-}
-
-echo "UTF-8 DECODER TEST SUCCESS!\n";
-exit ( 0 );
-
-function testLine( $test, $line, &$total, &$success, &$failed, $columns, $exceptions, $verbose ) {
- $stripped = $line;
- UtfNormal::quickisNFCVerify( $stripped );
-
- $same = ( $line == $stripped );
- $len = mb_strlen( substr( $stripped, 0, strpos( $stripped, '|' ) ) );
- if ( $len == 0 ) {
- $len = strlen( substr( $stripped, 0, strpos( $stripped, '|' ) ) );
- }
-
- $ok = $same ^ ( $test >= 3 );
-
- $ok ^= in_array( $test, $exceptions );
-
- $ok &= ( $columns == $len );
-
- $total++;
- if ( $ok ) {
- $success++;
- } else {
- $failed++;
- }
-
- if ( $verbose || !$ok ) {
- print str_replace( "\n", "$len\n", $stripped );
- }
-}
diff --git a/includes/normal/UtfNormal.php b/includes/normal/UtfNormal.php
deleted file mode 100644
index 8204f974..00000000
--- a/includes/normal/UtfNormal.php
+++ /dev/null
@@ -1,790 +0,0 @@
-<?php
-/**
- * Unicode normalization routines
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-/**
- * @defgroup UtfNormal UtfNormal
- */
-
-define( 'NORMALIZE_ICU', function_exists( 'utf8_normalize' ) );
-define( 'NORMALIZE_INTL', function_exists( 'normalizer_normalize' ) );
-
-/**
- * Unicode normalization routines for working with UTF-8 strings.
- * Currently assumes that input strings are valid UTF-8!
- *
- * Not as fast as I'd like, but should be usable for most purposes.
- * UtfNormal::toNFC() will bail early if given ASCII text or text
- * it can quickly determine is already normalized.
- *
- * All functions can be called static.
- *
- * See description of forms at http://www.unicode.org/reports/tr15/
- *
- * @ingroup UtfNormal
- */
-class UtfNormal {
- /**
- * For using the ICU wrapper
- */
- const UNORM_NONE = 1;
- const UNORM_NFD = 2;
- const UNORM_NFKD = 3;
- const UNORM_NFC = 4;
- const UNORM_NFKC = 5;
- const UNORM_FCD = 6;
- const UNORM_DEFAULT = self::UNORM_NFC;
-
- public static $utfCombiningClass = null;
- public static $utfCanonicalComp = null;
- public static $utfCanonicalDecomp = null;
-
- # Load compatibility decompositions on demand if they are needed.
- public static $utfCompatibilityDecomp = null;
- public static $utfCheckNFC;
-
- /**
- * The ultimate convenience function! Clean up invalid UTF-8 sequences,
- * and convert to normal form C, canonical composition.
- *
- * Fast return for pure ASCII strings; some lesser optimizations for
- * strings containing only known-good characters. Not as fast as toNFC().
- *
- * @param string $string a UTF-8 string
- * @return string a clean, shiny, normalized UTF-8 string
- */
- static function cleanUp( $string ) {
- if ( NORMALIZE_ICU ) {
- $string = self::replaceForNativeNormalize( $string );
-
- # UnicodeString constructor fails if the string ends with a
- # head byte. Add a junk char at the end, we'll strip it off.
- return rtrim( utf8_normalize( $string . "\x01", self::UNORM_NFC ), "\x01" );
- } elseif ( NORMALIZE_INTL ) {
- $string = self::replaceForNativeNormalize( $string );
- $norm = normalizer_normalize( $string, Normalizer::FORM_C );
- if ( $norm === null || $norm === false ) {
- # normalizer_normalize will either return false or null
- # (depending on which doc you read) if invalid utf8 string.
- # quickIsNFCVerify cleans up invalid sequences.
-
- if ( UtfNormal::quickIsNFCVerify( $string ) ) {
- # if that's true, the string is actually already normal.
- return $string;
- } else {
- # Now we are valid but non-normal
- return normalizer_normalize( $string, Normalizer::FORM_C );
- }
- } else {
- return $norm;
- }
- } elseif ( UtfNormal::quickIsNFCVerify( $string ) ) {
- # Side effect -- $string has had UTF-8 errors cleaned up.
- return $string;
- } else {
- return UtfNormal::NFC( $string );
- }
- }
-
- /**
- * Convert a UTF-8 string to normal form C, canonical composition.
- * Fast return for pure ASCII strings; some lesser optimizations for
- * strings containing only known-good characters.
- *
- * @param string $string a valid UTF-8 string. Input is not validated.
- * @return string a UTF-8 string in normal form C
- */
- static function toNFC( $string ) {
- if ( NORMALIZE_INTL )
- return normalizer_normalize( $string, Normalizer::FORM_C );
- elseif ( NORMALIZE_ICU )
- return utf8_normalize( $string, self::UNORM_NFC );
- elseif ( UtfNormal::quickIsNFC( $string ) )
- return $string;
- else
- return UtfNormal::NFC( $string );
- }
-
- /**
- * Convert a UTF-8 string to normal form D, canonical decomposition.
- * Fast return for pure ASCII strings.
- *
- * @param string $string a valid UTF-8 string. Input is not validated.
- * @return string a UTF-8 string in normal form D
- */
- static function toNFD( $string ) {
- if ( NORMALIZE_INTL )
- return normalizer_normalize( $string, Normalizer::FORM_D );
- elseif ( NORMALIZE_ICU )
- return utf8_normalize( $string, self::UNORM_NFD );
- elseif ( preg_match( '/[\x80-\xff]/', $string ) )
- return UtfNormal::NFD( $string );
- else
- return $string;
- }
-
- /**
- * Convert a UTF-8 string to normal form KC, compatibility composition.
- * This may cause irreversible information loss, use judiciously.
- * Fast return for pure ASCII strings.
- *
- * @param string $string a valid UTF-8 string. Input is not validated.
- * @return string a UTF-8 string in normal form KC
- */
- static function toNFKC( $string ) {
- if ( NORMALIZE_INTL )
- return normalizer_normalize( $string, Normalizer::FORM_KC );
- elseif ( NORMALIZE_ICU )
- return utf8_normalize( $string, self::UNORM_NFKC );
- elseif ( preg_match( '/[\x80-\xff]/', $string ) )
- return UtfNormal::NFKC( $string );
- else
- return $string;
- }
-
- /**
- * Convert a UTF-8 string to normal form KD, compatibility decomposition.
- * This may cause irreversible information loss, use judiciously.
- * Fast return for pure ASCII strings.
- *
- * @param string $string a valid UTF-8 string. Input is not validated.
- * @return string a UTF-8 string in normal form KD
- */
- static function toNFKD( $string ) {
- if ( NORMALIZE_INTL )
- return normalizer_normalize( $string, Normalizer::FORM_KD );
- elseif ( NORMALIZE_ICU )
- return utf8_normalize( $string, self::UNORM_NFKD );
- elseif ( preg_match( '/[\x80-\xff]/', $string ) )
- return UtfNormal::NFKD( $string );
- else
- return $string;
- }
-
- /**
- * Load the basic composition data if necessary
- * @private
- */
- static function loadData() {
- if ( !isset( self::$utfCombiningClass ) ) {
- require_once __DIR__ . '/UtfNormalData.inc';
- }
- }
-
- /**
- * Returns true if the string is _definitely_ in NFC.
- * Returns false if not or uncertain.
- * @param string $string a valid UTF-8 string. Input is not validated.
- * @return bool
- */
- static function quickIsNFC( $string ) {
- # ASCII is always valid NFC!
- # If it's pure ASCII, let it through.
- if ( !preg_match( '/[\x80-\xff]/', $string ) ) return true;
-
- UtfNormal::loadData();
- $len = strlen( $string );
- for ( $i = 0; $i < $len; $i++ ) {
- $c = $string[$i];
- $n = ord( $c );
- if ( $n < 0x80 ) {
- continue;
- } elseif ( $n >= 0xf0 ) {
- $c = substr( $string, $i, 4 );
- $i += 3;
- } elseif ( $n >= 0xe0 ) {
- $c = substr( $string, $i, 3 );
- $i += 2;
- } elseif ( $n >= 0xc0 ) {
- $c = substr( $string, $i, 2 );
- $i++;
- }
- if ( isset( self::$utfCheckNFC[$c] ) ) {
- # If it's NO or MAYBE, bail and do the slow check.
- return false;
- }
- if ( isset( self::$utfCombiningClass[$c] ) ) {
- # Combining character? We might have to do sorting, at least.
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Returns true if the string is _definitely_ in NFC.
- * Returns false if not or uncertain.
- * @param string $string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
- * @return bool
- */
- static function quickIsNFCVerify( &$string ) {
- # Screen out some characters that eg won't be allowed in XML
- $string = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', UTF8_REPLACEMENT, $string );
-
- # ASCII is always valid NFC!
- # If we're only ever given plain ASCII, we can avoid the overhead
- # of initializing the decomposition tables by skipping out early.
- if ( !preg_match( '/[\x80-\xff]/', $string ) ) return true;
-
- static $checkit = null, $tailBytes = null, $utfCheckOrCombining = null;
- if ( !isset( $checkit ) ) {
- # Load/build some scary lookup tables...
- UtfNormal::loadData();
-
- $utfCheckOrCombining = array_merge( self::$utfCheckNFC, self::$utfCombiningClass );
-
- # Head bytes for sequences which we should do further validity checks
- $checkit = array_flip( array_map( 'chr',
- array( 0xc0, 0xc1, 0xe0, 0xed, 0xef,
- 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
- 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff ) ) );
-
- # Each UTF-8 head byte is followed by a certain
- # number of tail bytes.
- $tailBytes = array();
- for ( $n = 0; $n < 256; $n++ ) {
- if ( $n < 0xc0 ) {
- $remaining = 0;
- } elseif ( $n < 0xe0 ) {
- $remaining = 1;
- } elseif ( $n < 0xf0 ) {
- $remaining = 2;
- } elseif ( $n < 0xf8 ) {
- $remaining = 3;
- } elseif ( $n < 0xfc ) {
- $remaining = 4;
- } elseif ( $n < 0xfe ) {
- $remaining = 5;
- } else {
- $remaining = 0;
- }
- $tailBytes[chr( $n )] = $remaining;
- }
- }
-
- # Chop the text into pure-ASCII and non-ASCII areas;
- # large ASCII parts can be handled much more quickly.
- # Don't chop up Unicode areas for punctuation, though,
- # that wastes energy.
- $matches = array();
- preg_match_all(
- '/([\x00-\x7f]+|[\x80-\xff][\x00-\x40\x5b-\x5f\x7b-\xff]*)/',
- $string, $matches );
-
- $looksNormal = true;
- $base = 0;
- $replace = array();
- foreach ( $matches[1] as $str ) {
- $chunk = strlen( $str );
-
- if ( $str[0] < "\x80" ) {
- # ASCII chunk: guaranteed to be valid UTF-8
- # and in normal form C, so skip over it.
- $base += $chunk;
- continue;
- }
-
- # We'll have to examine the chunk byte by byte to ensure
- # that it consists of valid UTF-8 sequences, and to see
- # if any of them might not be normalized.
- #
- # Since PHP is not the fastest language on earth, some of
- # this code is a little ugly with inner loop optimizations.
-
- $head = '';
- $len = $chunk + 1; # Counting down is faster. I'm *so* sorry.
-
- for ( $i = -1; --$len; ) {
- $remaining = $tailBytes[$c = $str[++$i]];
- if ( $remaining ) {
- # UTF-8 head byte!
- $sequence = $head = $c;
- do {
- # Look for the defined number of tail bytes...
- if ( --$len && ( $c = $str[++$i] ) >= "\x80" && $c < "\xc0" ) {
- # Legal tail bytes are nice.
- $sequence .= $c;
- } else {
- if ( 0 == $len ) {
- # Premature end of string!
- # Drop a replacement character into output to
- # represent the invalid UTF-8 sequence.
- $replace[] = array( UTF8_REPLACEMENT,
- $base + $i + 1 - strlen( $sequence ),
- strlen( $sequence ) );
- break 2;
- } else {
- # Illegal tail byte; abandon the sequence.
- $replace[] = array( UTF8_REPLACEMENT,
- $base + $i - strlen( $sequence ),
- strlen( $sequence ) );
- # Back up and reprocess this byte; it may itself
- # be a legal ASCII or UTF-8 sequence head.
- --$i;
- ++$len;
- continue 2;
- }
- }
- } while ( --$remaining );
-
- if ( isset( $checkit[$head] ) ) {
- # Do some more detailed validity checks, for
- # invalid characters and illegal sequences.
- if ( $head == "\xed" ) {
- # 0xed is relatively frequent in Korean, which
- # abuts the surrogate area, so we're doing
- # this check separately to speed things up.
-
- if ( $sequence >= UTF8_SURROGATE_FIRST ) {
- # Surrogates are legal only in UTF-16 code.
- # They are totally forbidden here in UTF-8
- # utopia.
- $replace[] = array( UTF8_REPLACEMENT,
- $base + $i + 1 - strlen( $sequence ),
- strlen( $sequence ) );
- $head = '';
- continue;
- }
- } else {
- # Slower, but rarer checks...
- $n = ord( $head );
- if (
- # "Overlong sequences" are those that are syntactically
- # correct but use more UTF-8 bytes than are necessary to
- # encode a character. Naïve string comparisons can be
- # tricked into failing to see a match for an ASCII
- # character, for instance, which can be a security hole
- # if blacklist checks are being used.
- ( $n < 0xc2 && $sequence <= UTF8_OVERLONG_A )
- || ( $n == 0xe0 && $sequence <= UTF8_OVERLONG_B )
- || ( $n == 0xf0 && $sequence <= UTF8_OVERLONG_C )
-
- # U+FFFE and U+FFFF are explicitly forbidden in Unicode.
- || ( $n == 0xef &&
- ( $sequence == UTF8_FFFE )
- || ( $sequence == UTF8_FFFF ) )
-
- # Unicode has been limited to 21 bits; longer
- # sequences are not allowed.
- || ( $n >= 0xf0 && $sequence > UTF8_MAX )
- ) {
-
- $replace[] = array( UTF8_REPLACEMENT,
- $base + $i + 1 - strlen( $sequence ),
- strlen( $sequence ) );
- $head = '';
- continue;
- }
- }
- }
-
- if ( isset( $utfCheckOrCombining[$sequence] ) ) {
- # If it's NO or MAYBE, we'll have to rip
- # the string apart and put it back together.
- # That's going to be mighty slow.
- $looksNormal = false;
- }
-
- # The sequence is legal!
- $head = '';
- } elseif ( $c < "\x80" ) {
- # ASCII byte.
- $head = '';
- } elseif ( $c < "\xc0" ) {
- # Illegal tail bytes
- if ( $head == '' ) {
- # Out of the blue!
- $replace[] = array( UTF8_REPLACEMENT, $base + $i, 1 );
- } else {
- # Don't add if we're continuing a broken sequence;
- # we already put a replacement character when we looked
- # at the broken sequence.
- $replace[] = array( '', $base + $i, 1 );
- }
- } else {
- # Miscellaneous freaks.
- $replace[] = array( UTF8_REPLACEMENT, $base + $i, 1 );
- $head = '';
- }
- }
- $base += $chunk;
- }
- if ( count( $replace ) ) {
- # There were illegal UTF-8 sequences we need to fix up.
- $out = '';
- $last = 0;
- foreach ( $replace as $rep ) {
- list( $replacement, $start, $length ) = $rep;
- if ( $last < $start ) {
- $out .= substr( $string, $last, $start - $last );
- }
- $out .= $replacement;
- $last = $start + $length;
- }
- if ( $last < strlen( $string ) ) {
- $out .= substr( $string, $last );
- }
- $string = $out;
- }
-
- return $looksNormal;
- }
-
- # These take a string and run the normalization on them, without
- # checking for validity or any optimization etc. Input must be
- # VALID UTF-8!
- /**
- * @param $string string
- * @return string
- * @private
- */
- static function NFC( $string ) {
- return UtfNormal::fastCompose( UtfNormal::NFD( $string ) );
- }
-
- /**
- * @param $string string
- * @return string
- * @private
- */
- static function NFD( $string ) {
- UtfNormal::loadData();
-
- return UtfNormal::fastCombiningSort(
- UtfNormal::fastDecompose( $string, self::$utfCanonicalDecomp ) );
- }
-
- /**
- * @param $string string
- * @return string
- * @private
- */
- static function NFKC( $string ) {
- return UtfNormal::fastCompose( UtfNormal::NFKD( $string ) );
- }
-
- /**
- * @param $string string
- * @return string
- * @private
- */
- static function NFKD( $string ) {
- if ( !isset( self::$utfCompatibilityDecomp ) ) {
- require_once 'UtfNormalDataK.inc';
- }
-
- return self::fastCombiningSort(
- self::fastDecompose( $string, self::$utfCompatibilityDecomp ) );
- }
-
- /**
- * Perform decomposition of a UTF-8 string into either D or KD form
- * (depending on which decomposition map is passed to us).
- * Input is assumed to be *valid* UTF-8. Invalid code will break.
- * @private
- * @param string $string valid UTF-8 string
- * @param array $map hash of expanded decomposition map
- * @return string a UTF-8 string decomposed, not yet normalized (needs sorting)
- */
- static function fastDecompose( $string, $map ) {
- UtfNormal::loadData();
- $len = strlen( $string );
- $out = '';
- for ( $i = 0; $i < $len; $i++ ) {
- $c = $string[$i];
- $n = ord( $c );
- if ( $n < 0x80 ) {
- # ASCII chars never decompose
- # THEY ARE IMMORTAL
- $out .= $c;
- continue;
- } elseif ( $n >= 0xf0 ) {
- $c = substr( $string, $i, 4 );
- $i += 3;
- } elseif ( $n >= 0xe0 ) {
- $c = substr( $string, $i, 3 );
- $i += 2;
- } elseif ( $n >= 0xc0 ) {
- $c = substr( $string, $i, 2 );
- $i++;
- }
- if ( isset( $map[$c] ) ) {
- $out .= $map[$c];
- continue;
- } else {
- if ( $c >= UTF8_HANGUL_FIRST && $c <= UTF8_HANGUL_LAST ) {
- # Decompose a hangul syllable into jamo;
- # hardcoded for three-byte UTF-8 sequence.
- # A lookup table would be slightly faster,
- # but adds a lot of memory & disk needs.
- #
- $index = ( ( ord( $c[0] ) & 0x0f ) << 12
- | ( ord( $c[1] ) & 0x3f ) << 6
- | ( ord( $c[2] ) & 0x3f ) )
- - UNICODE_HANGUL_FIRST;
- $l = intval( $index / UNICODE_HANGUL_NCOUNT );
- $v = intval( ( $index % UNICODE_HANGUL_NCOUNT ) / UNICODE_HANGUL_TCOUNT );
- $t = $index % UNICODE_HANGUL_TCOUNT;
- $out .= "\xe1\x84" . chr( 0x80 + $l ) . "\xe1\x85" . chr( 0xa1 + $v );
- if ( $t >= 25 ) {
- $out .= "\xe1\x87" . chr( 0x80 + $t - 25 );
- } elseif ( $t ) {
- $out .= "\xe1\x86" . chr( 0xa7 + $t );
- }
- continue;
- }
- }
- $out .= $c;
- }
-
- return $out;
- }
-
- /**
- * Sorts combining characters into canonical order. This is the
- * final step in creating decomposed normal forms D and KD.
- * @private
- * @param string $string a valid, decomposed UTF-8 string. Input is not validated.
- * @return string a UTF-8 string with combining characters sorted in canonical order
- */
- static function fastCombiningSort( $string ) {
- UtfNormal::loadData();
- $len = strlen( $string );
- $out = '';
- $combiners = array();
- $lastClass = -1;
- for ( $i = 0; $i < $len; $i++ ) {
- $c = $string[$i];
- $n = ord( $c );
- if ( $n >= 0x80 ) {
- if ( $n >= 0xf0 ) {
- $c = substr( $string, $i, 4 );
- $i += 3;
- } elseif ( $n >= 0xe0 ) {
- $c = substr( $string, $i, 3 );
- $i += 2;
- } elseif ( $n >= 0xc0 ) {
- $c = substr( $string, $i, 2 );
- $i++;
- }
- if ( isset( self::$utfCombiningClass[$c] ) ) {
- $lastClass = self::$utfCombiningClass[$c];
- if ( isset( $combiners[$lastClass] ) ) {
- $combiners[$lastClass] .= $c;
- } else {
- $combiners[$lastClass] = $c;
- }
- continue;
- }
- }
- if ( $lastClass ) {
- ksort( $combiners );
- $out .= implode( '', $combiners );
- $combiners = array();
- }
- $out .= $c;
- $lastClass = 0;
- }
- if ( $lastClass ) {
- ksort( $combiners );
- $out .= implode( '', $combiners );
- }
-
- return $out;
- }
-
- /**
- * Produces canonically composed sequences, i.e. normal form C or KC.
- *
- * @private
- * @param string $string a valid UTF-8 string in sorted normal form D or KD.
- * Input is not validated.
- * @return string a UTF-8 string with canonical precomposed characters used
- * where possible.
- */
- static function fastCompose( $string ) {
- UtfNormal::loadData();
- $len = strlen( $string );
- $out = '';
- $lastClass = -1;
- $lastHangul = 0;
- $startChar = '';
- $combining = '';
- $x1 = ord( substr( UTF8_HANGUL_VBASE, 0, 1 ) );
- $x2 = ord( substr( UTF8_HANGUL_TEND, 0, 1 ) );
- for ( $i = 0; $i < $len; $i++ ) {
- $c = $string[$i];
- $n = ord( $c );
- if ( $n < 0x80 ) {
- # No combining characters here...
- $out .= $startChar;
- $out .= $combining;
- $startChar = $c;
- $combining = '';
- $lastClass = 0;
- continue;
- } elseif ( $n >= 0xf0 ) {
- $c = substr( $string, $i, 4 );
- $i += 3;
- } elseif ( $n >= 0xe0 ) {
- $c = substr( $string, $i, 3 );
- $i += 2;
- } elseif ( $n >= 0xc0 ) {
- $c = substr( $string, $i, 2 );
- $i++;
- }
- $pair = $startChar . $c;
- if ( $n > 0x80 ) {
- if ( isset( self::$utfCombiningClass[$c] ) ) {
- # A combining char; see what we can do with it
- $class = self::$utfCombiningClass[$c];
- if ( !empty( $startChar ) &&
- $lastClass < $class &&
- $class > 0 &&
- isset( self::$utfCanonicalComp[$pair] )
- ) {
- $startChar = self::$utfCanonicalComp[$pair];
- $class = 0;
- } else {
- $combining .= $c;
- }
- $lastClass = $class;
- $lastHangul = 0;
- continue;
- }
- }
- # New start char
- if ( $lastClass == 0 ) {
- if ( isset( self::$utfCanonicalComp[$pair] ) ) {
- $startChar = self::$utfCanonicalComp[$pair];
- $lastHangul = 0;
- continue;
- }
- if ( $n >= $x1 && $n <= $x2 ) {
- # WARNING: Hangul code is painfully slow.
- # I apologize for this ugly, ugly code; however
- # performance is even more teh suck if we call
- # out to nice clean functions. Lookup tables are
- # marginally faster, but require a lot of space.
- #
- if ( $c >= UTF8_HANGUL_VBASE &&
- $c <= UTF8_HANGUL_VEND &&
- $startChar >= UTF8_HANGUL_LBASE &&
- $startChar <= UTF8_HANGUL_LEND
- ) {
- #
- #$lIndex = utf8ToCodepoint( $startChar ) - UNICODE_HANGUL_LBASE;
- #$vIndex = utf8ToCodepoint( $c ) - UNICODE_HANGUL_VBASE;
- $lIndex = ord( $startChar[2] ) - 0x80;
- $vIndex = ord( $c[2] ) - 0xa1;
-
- $hangulPoint = UNICODE_HANGUL_FIRST +
- UNICODE_HANGUL_TCOUNT *
- ( UNICODE_HANGUL_VCOUNT * $lIndex + $vIndex );
-
- # Hardcode the limited-range UTF-8 conversion:
- $startChar = chr( $hangulPoint >> 12 & 0x0f | 0xe0 ) .
- chr( $hangulPoint >> 6 & 0x3f | 0x80 ) .
- chr( $hangulPoint & 0x3f | 0x80 );
- $lastHangul = 0;
- continue;
- } elseif ( $c >= UTF8_HANGUL_TBASE &&
- $c <= UTF8_HANGUL_TEND &&
- $startChar >= UTF8_HANGUL_FIRST &&
- $startChar <= UTF8_HANGUL_LAST &&
- !$lastHangul
- ) {
- # $tIndex = utf8ToCodepoint( $c ) - UNICODE_HANGUL_TBASE;
- $tIndex = ord( $c[2] ) - 0xa7;
- if ( $tIndex < 0 ) $tIndex = ord( $c[2] ) - 0x80 + ( 0x11c0 - 0x11a7 );
-
- # Increment the code point by $tIndex, without
- # the function overhead of decoding and recoding UTF-8
- #
- $tail = ord( $startChar[2] ) + $tIndex;
- if ( $tail > 0xbf ) {
- $tail -= 0x40;
- $mid = ord( $startChar[1] ) + 1;
- if ( $mid > 0xbf ) {
- $startChar[0] = chr( ord( $startChar[0] ) + 1 );
- $mid -= 0x40;
- }
- $startChar[1] = chr( $mid );
- }
- $startChar[2] = chr( $tail );
-
- # If there's another jamo char after this, *don't* try to merge it.
- $lastHangul = 1;
- continue;
- }
- }
- }
- $out .= $startChar;
- $out .= $combining;
- $startChar = $c;
- $combining = '';
- $lastClass = 0;
- $lastHangul = 0;
- }
- $out .= $startChar . $combining;
-
- return $out;
- }
-
- /**
- * This is just used for the benchmark, comparing how long it takes to
- * interate through a string without really doing anything of substance.
- * @param $string string
- * @return string
- */
- static function placebo( $string ) {
- $len = strlen( $string );
- $out = '';
- for ( $i = 0; $i < $len; $i++ ) {
- $out .= $string[$i];
- }
-
- return $out;
- }
-
- /**
- * Function to replace some characters that we don't want
- * but most of the native normalize functions keep.
- *
- * @param string $string The string
- * @return String String with the character codes replaced.
- */
- private static function replaceForNativeNormalize( $string ) {
- $string = preg_replace(
- '/[\x00-\x08\x0b\x0c\x0e-\x1f]/',
- UTF8_REPLACEMENT,
- $string );
- $string = str_replace( UTF8_FFFE, UTF8_REPLACEMENT, $string );
- $string = str_replace( UTF8_FFFF, UTF8_REPLACEMENT, $string );
-
- return $string;
- }
-}
diff --git a/includes/normal/UtfNormalBench.php b/includes/normal/UtfNormalBench.php
deleted file mode 100644
index bd2bc4e4..00000000
--- a/includes/normal/UtfNormalBench.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/**
- * Approximate benchmark for some basic operations.
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-if ( PHP_SAPI != 'cli' ) {
- die( "Run me from the command line please.\n" );
-}
-
-if ( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) {
- dl( 'php_utfnormal.so' );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-require_once 'UtfNormal.php';
-
-define( 'BENCH_CYCLES', 5 );
-
-$testfiles = array(
- 'testdata/washington.txt' => 'English text',
- 'testdata/berlin.txt' => 'German text',
- 'testdata/bulgakov.txt' => 'Russian text',
- 'testdata/tokyo.txt' => 'Japanese text',
- 'testdata/young.txt' => 'Korean text'
-);
-$normalizer = new UtfNormal;
-UtfNormal::loadData();
-foreach ( $testfiles as $file => $desc ) {
- benchmarkTest( $normalizer, $file, $desc );
-}
-
-# -------
-
-function benchmarkTest( &$u, $filename, $desc ) {
- print "Testing $filename ($desc)...\n";
- $data = file_get_contents( $filename );
- $forms = array(
-# 'placebo',
- 'cleanUp',
- 'toNFC',
-# 'toNFKC',
-# 'toNFD', 'toNFKD',
- 'NFC',
-# 'NFKC',
-# 'NFD', 'NFKD',
- array( 'fastDecompose', 'fastCombiningSort', 'fastCompose' ),
-# 'quickIsNFC', 'quickIsNFCVerify',
- );
-
- foreach ( $forms as $form ) {
- if ( is_array( $form ) ) {
- $str = $data;
- foreach ( $form as $step ) {
- $str = benchmarkForm( $u, $str, $step );
- }
- } else {
- benchmarkForm( $u, $data, $form );
- }
- }
-}
-
-function benchmarkForm( &$u, &$data, $form ) {
- #$start = microtime( true );
- for ( $i = 0; $i < BENCH_CYCLES; $i++ ) {
- $start = microtime( true );
- $out = $u->$form( $data, UtfNormal::$utfCanonicalDecomp );
- $deltas[] = ( microtime( true ) - $start );
- }
- #$delta = (microtime( true ) - $start) / BENCH_CYCLES;
- sort( $deltas );
- $delta = $deltas[0]; # Take shortest time
-
- $rate = intval( strlen( $data ) / $delta );
- $same = ( 0 == strcmp( $data, $out ) );
-
- printf( " %20s %6.1fms %12s bytes/s (%s)\n",
- $form,
- $delta * 1000.0,
- number_format( $rate ),
- ( $same ? 'no change' : 'changed' ) );
-
- return $out;
-}
diff --git a/includes/normal/UtfNormalData.inc b/includes/normal/UtfNormalData.inc
deleted file mode 100644
index 5755f6b9..00000000
--- a/includes/normal/UtfNormalData.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * This file was automatically generated -- do not edit!
- * Run UtfNormalGenerate.php to create this file again (make clean && make)
- *
- * @file
- */
-// @codingStandardsIgnoreFile
-
-UtfNormal::$utfCombiningClass = unserialize( 'a:606:{s:2:"̀";i:230;s:2:"́";i:230;s:2:"̂";i:230;s:2:"̃";i:230;s:2:"̄";i:230;s:2:"̅";i:230;s:2:"̆";i:230;s:2:"̇";i:230;s:2:"̈";i:230;s:2:"̉";i:230;s:2:"̊";i:230;s:2:"̋";i:230;s:2:"̌";i:230;s:2:"̍";i:230;s:2:"̎";i:230;s:2:"̏";i:230;s:2:"̐";i:230;s:2:"̑";i:230;s:2:"̒";i:230;s:2:"̓";i:230;s:2:"̔";i:230;s:2:"̕";i:232;s:2:"̖";i:220;s:2:"̗";i:220;s:2:"̘";i:220;s:2:"̙";i:220;s:2:"̚";i:232;s:2:"̛";i:216;s:2:"̜";i:220;s:2:"̝";i:220;s:2:"̞";i:220;s:2:"̟";i:220;s:2:"̠";i:220;s:2:"̡";i:202;s:2:"̢";i:202;s:2:"̣";i:220;s:2:"̤";i:220;s:2:"̥";i:220;s:2:"̦";i:220;s:2:"̧";i:202;s:2:"̨";i:202;s:2:"̩";i:220;s:2:"̪";i:220;s:2:"̫";i:220;s:2:"̬";i:220;s:2:"̭";i:220;s:2:"̮";i:220;s:2:"̯";i:220;s:2:"̰";i:220;s:2:"̱";i:220;s:2:"̲";i:220;s:2:"̳";i:220;s:2:"̴";i:1;s:2:"̵";i:1;s:2:"̶";i:1;s:2:"̷";i:1;s:2:"̸";i:1;s:2:"̹";i:220;s:2:"̺";i:220;s:2:"̻";i:220;s:2:"̼";i:220;s:2:"̽";i:230;s:2:"̾";i:230;s:2:"̿";i:230;s:2:"̀";i:230;s:2:"́";i:230;s:2:"͂";i:230;s:2:"̓";i:230;s:2:"̈́";i:230;s:2:"ͅ";i:240;s:2:"͆";i:230;s:2:"͇";i:220;s:2:"͈";i:220;s:2:"͉";i:220;s:2:"͊";i:230;s:2:"͋";i:230;s:2:"͌";i:230;s:2:"͍";i:220;s:2:"͎";i:220;s:2:"͐";i:230;s:2:"͑";i:230;s:2:"͒";i:230;s:2:"͓";i:220;s:2:"͔";i:220;s:2:"͕";i:220;s:2:"͖";i:220;s:2:"͗";i:230;s:2:"͘";i:232;s:2:"͙";i:220;s:2:"͚";i:220;s:2:"͛";i:230;s:2:"͜";i:233;s:2:"͝";i:234;s:2:"͞";i:234;s:2:"͟";i:233;s:2:"͠";i:234;s:2:"͡";i:234;s:2:"͢";i:233;s:2:"ͣ";i:230;s:2:"ͤ";i:230;s:2:"ͥ";i:230;s:2:"ͦ";i:230;s:2:"ͧ";i:230;s:2:"ͨ";i:230;s:2:"ͩ";i:230;s:2:"ͪ";i:230;s:2:"ͫ";i:230;s:2:"ͬ";i:230;s:2:"ͭ";i:230;s:2:"ͮ";i:230;s:2:"ͯ";i:230;s:2:"҃";i:230;s:2:"҄";i:230;s:2:"҅";i:230;s:2:"҆";i:230;s:2:"҇";i:230;s:2:"֑";i:220;s:2:"֒";i:230;s:2:"֓";i:230;s:2:"֔";i:230;s:2:"֕";i:230;s:2:"֖";i:220;s:2:"֗";i:230;s:2:"֘";i:230;s:2:"֙";i:230;s:2:"֚";i:222;s:2:"֛";i:220;s:2:"֜";i:230;s:2:"֝";i:230;s:2:"֞";i:230;s:2:"֟";i:230;s:2:"֠";i:230;s:2:"֡";i:230;s:2:"֢";i:220;s:2:"֣";i:220;s:2:"֤";i:220;s:2:"֥";i:220;s:2:"֦";i:220;s:2:"֧";i:220;s:2:"֨";i:230;s:2:"֩";i:230;s:2:"֪";i:220;s:2:"֫";i:230;s:2:"֬";i:230;s:2:"֭";i:222;s:2:"֮";i:228;s:2:"֯";i:230;s:2:"ְ";i:10;s:2:"ֱ";i:11;s:2:"ֲ";i:12;s:2:"ֳ";i:13;s:2:"ִ";i:14;s:2:"ֵ";i:15;s:2:"ֶ";i:16;s:2:"ַ";i:17;s:2:"ָ";i:18;s:2:"ֹ";i:19;s:2:"ֺ";i:19;s:2:"ֻ";i:20;s:2:"ּ";i:21;s:2:"ֽ";i:22;s:2:"ֿ";i:23;s:2:"ׁ";i:24;s:2:"ׂ";i:25;s:2:"ׄ";i:230;s:2:"ׅ";i:220;s:2:"ׇ";i:18;s:2:"ؐ";i:230;s:2:"ؑ";i:230;s:2:"ؒ";i:230;s:2:"ؓ";i:230;s:2:"ؔ";i:230;s:2:"ؕ";i:230;s:2:"ؖ";i:230;s:2:"ؗ";i:230;s:2:"ؘ";i:30;s:2:"ؙ";i:31;s:2:"ؚ";i:32;s:2:"ً";i:27;s:2:"ٌ";i:28;s:2:"ٍ";i:29;s:2:"َ";i:30;s:2:"ُ";i:31;s:2:"ِ";i:32;s:2:"ّ";i:33;s:2:"ْ";i:34;s:2:"ٓ";i:230;s:2:"ٔ";i:230;s:2:"ٕ";i:220;s:2:"ٖ";i:220;s:2:"ٗ";i:230;s:2:"٘";i:230;s:2:"ٙ";i:230;s:2:"ٚ";i:230;s:2:"ٛ";i:230;s:2:"ٜ";i:220;s:2:"ٝ";i:230;s:2:"ٞ";i:230;s:2:"ٟ";i:220;s:2:"ٰ";i:35;s:2:"ۖ";i:230;s:2:"ۗ";i:230;s:2:"ۘ";i:230;s:2:"ۙ";i:230;s:2:"ۚ";i:230;s:2:"ۛ";i:230;s:2:"ۜ";i:230;s:2:"۟";i:230;s:2:"۠";i:230;s:2:"ۡ";i:230;s:2:"ۢ";i:230;s:2:"ۣ";i:220;s:2:"ۤ";i:230;s:2:"ۧ";i:230;s:2:"ۨ";i:230;s:2:"۪";i:220;s:2:"۫";i:230;s:2:"۬";i:230;s:2:"ۭ";i:220;s:2:"ܑ";i:36;s:2:"ܰ";i:230;s:2:"ܱ";i:220;s:2:"ܲ";i:230;s:2:"ܳ";i:230;s:2:"ܴ";i:220;s:2:"ܵ";i:230;s:2:"ܶ";i:230;s:2:"ܷ";i:220;s:2:"ܸ";i:220;s:2:"ܹ";i:220;s:2:"ܺ";i:230;s:2:"ܻ";i:220;s:2:"ܼ";i:220;s:2:"ܽ";i:230;s:2:"ܾ";i:220;s:2:"ܿ";i:230;s:2:"݀";i:230;s:2:"݁";i:230;s:2:"݂";i:220;s:2:"݃";i:230;s:2:"݄";i:220;s:2:"݅";i:230;s:2:"݆";i:220;s:2:"݇";i:230;s:2:"݈";i:220;s:2:"݉";i:230;s:2:"݊";i:230;s:2:"߫";i:230;s:2:"߬";i:230;s:2:"߭";i:230;s:2:"߮";i:230;s:2:"߯";i:230;s:2:"߰";i:230;s:2:"߱";i:230;s:2:"߲";i:220;s:2:"߳";i:230;s:3:"ࠖ";i:230;s:3:"ࠗ";i:230;s:3:"࠘";i:230;s:3:"࠙";i:230;s:3:"ࠛ";i:230;s:3:"ࠜ";i:230;s:3:"ࠝ";i:230;s:3:"ࠞ";i:230;s:3:"ࠟ";i:230;s:3:"ࠠ";i:230;s:3:"ࠡ";i:230;s:3:"ࠢ";i:230;s:3:"ࠣ";i:230;s:3:"ࠥ";i:230;s:3:"ࠦ";i:230;s:3:"ࠧ";i:230;s:3:"ࠩ";i:230;s:3:"ࠪ";i:230;s:3:"ࠫ";i:230;s:3:"ࠬ";i:230;s:3:"࠭";i:230;s:3:"࡙";i:220;s:3:"࡚";i:220;s:3:"࡛";i:220;s:3:"़";i:7;s:3:"्";i:9;s:3:"॑";i:230;s:3:"॒";i:220;s:3:"॓";i:230;s:3:"॔";i:230;s:3:"়";i:7;s:3:"্";i:9;s:3:"਼";i:7;s:3:"੍";i:9;s:3:"઼";i:7;s:3:"્";i:9;s:3:"଼";i:7;s:3:"୍";i:9;s:3:"்";i:9;s:3:"్";i:9;s:3:"ౕ";i:84;s:3:"ౖ";i:91;s:3:"಼";i:7;s:3:"್";i:9;s:3:"്";i:9;s:3:"්";i:9;s:3:"ุ";i:103;s:3:"ู";i:103;s:3:"ฺ";i:9;s:3:"่";i:107;s:3:"้";i:107;s:3:"๊";i:107;s:3:"๋";i:107;s:3:"ຸ";i:118;s:3:"ູ";i:118;s:3:"່";i:122;s:3:"້";i:122;s:3:"໊";i:122;s:3:"໋";i:122;s:3:"༘";i:220;s:3:"༙";i:220;s:3:"༵";i:220;s:3:"༷";i:220;s:3:"༹";i:216;s:3:"ཱ";i:129;s:3:"ི";i:130;s:3:"ུ";i:132;s:3:"ེ";i:130;s:3:"ཻ";i:130;s:3:"ོ";i:130;s:3:"ཽ";i:130;s:3:"ྀ";i:130;s:3:"ྂ";i:230;s:3:"ྃ";i:230;s:3:"྄";i:9;s:3:"྆";i:230;s:3:"྇";i:230;s:3:"࿆";i:220;s:3:"့";i:7;s:3:"္";i:9;s:3:"်";i:9;s:3:"ႍ";i:220;s:3:"፝";i:230;s:3:"፞";i:230;s:3:"፟";i:230;s:3:"᜔";i:9;s:3:"᜴";i:9;s:3:"្";i:9;s:3:"៝";i:230;s:3:"ᢩ";i:228;s:3:"᤹";i:222;s:3:"᤺";i:230;s:3:"᤻";i:220;s:3:"ᨗ";i:230;s:3:"ᨘ";i:220;s:3:"᩠";i:9;s:3:"᩵";i:230;s:3:"᩶";i:230;s:3:"᩷";i:230;s:3:"᩸";i:230;s:3:"᩹";i:230;s:3:"᩺";i:230;s:3:"᩻";i:230;s:3:"᩼";i:230;s:3:"᩿";i:220;s:3:"᬴";i:7;s:3:"᭄";i:9;s:3:"᭫";i:230;s:3:"᭬";i:220;s:3:"᭭";i:230;s:3:"᭮";i:230;s:3:"᭯";i:230;s:3:"᭰";i:230;s:3:"᭱";i:230;s:3:"᭲";i:230;s:3:"᭳";i:230;s:3:"᮪";i:9;s:3:"᯦";i:7;s:3:"᯲";i:9;s:3:"᯳";i:9;s:3:"᰷";i:7;s:3:"᳐";i:230;s:3:"᳑";i:230;s:3:"᳒";i:230;s:3:"᳔";i:1;s:3:"᳕";i:220;s:3:"᳖";i:220;s:3:"᳗";i:220;s:3:"᳘";i:220;s:3:"᳙";i:220;s:3:"᳚";i:230;s:3:"᳛";i:230;s:3:"᳜";i:220;s:3:"᳝";i:220;s:3:"᳞";i:220;s:3:"᳟";i:220;s:3:"᳠";i:230;s:3:"᳢";i:1;s:3:"᳣";i:1;s:3:"᳤";i:1;s:3:"᳥";i:1;s:3:"᳦";i:1;s:3:"᳧";i:1;s:3:"᳨";i:1;s:3:"᳭";i:220;s:3:"᷀";i:230;s:3:"᷁";i:230;s:3:"᷂";i:220;s:3:"᷃";i:230;s:3:"᷄";i:230;s:3:"᷅";i:230;s:3:"᷆";i:230;s:3:"᷇";i:230;s:3:"᷈";i:230;s:3:"᷉";i:230;s:3:"᷊";i:220;s:3:"᷋";i:230;s:3:"᷌";i:230;s:3:"᷍";i:234;s:3:"᷎";i:214;s:3:"᷏";i:220;s:3:"᷐";i:202;s:3:"᷑";i:230;s:3:"᷒";i:230;s:3:"ᷓ";i:230;s:3:"ᷔ";i:230;s:3:"ᷕ";i:230;s:3:"ᷖ";i:230;s:3:"ᷗ";i:230;s:3:"ᷘ";i:230;s:3:"ᷙ";i:230;s:3:"ᷚ";i:230;s:3:"ᷛ";i:230;s:3:"ᷜ";i:230;s:3:"ᷝ";i:230;s:3:"ᷞ";i:230;s:3:"ᷟ";i:230;s:3:"ᷠ";i:230;s:3:"ᷡ";i:230;s:3:"ᷢ";i:230;s:3:"ᷣ";i:230;s:3:"ᷤ";i:230;s:3:"ᷥ";i:230;s:3:"ᷦ";i:230;s:3:"᷼";i:233;s:3:"᷽";i:220;s:3:"᷾";i:230;s:3:"᷿";i:220;s:3:"⃐";i:230;s:3:"⃑";i:230;s:3:"⃒";i:1;s:3:"⃓";i:1;s:3:"⃔";i:230;s:3:"⃕";i:230;s:3:"⃖";i:230;s:3:"⃗";i:230;s:3:"⃘";i:1;s:3:"⃙";i:1;s:3:"⃚";i:1;s:3:"⃛";i:230;s:3:"⃜";i:230;s:3:"⃡";i:230;s:3:"⃥";i:1;s:3:"⃦";i:1;s:3:"⃧";i:230;s:3:"⃨";i:220;s:3:"⃩";i:230;s:3:"⃪";i:1;s:3:"⃫";i:1;s:3:"⃬";i:220;s:3:"⃭";i:220;s:3:"⃮";i:220;s:3:"⃯";i:220;s:3:"⃰";i:230;s:3:"⳯";i:230;s:3:"⳰";i:230;s:3:"⳱";i:230;s:3:"⵿";i:9;s:3:"ⷠ";i:230;s:3:"ⷡ";i:230;s:3:"ⷢ";i:230;s:3:"ⷣ";i:230;s:3:"ⷤ";i:230;s:3:"ⷥ";i:230;s:3:"ⷦ";i:230;s:3:"ⷧ";i:230;s:3:"ⷨ";i:230;s:3:"ⷩ";i:230;s:3:"ⷪ";i:230;s:3:"ⷫ";i:230;s:3:"ⷬ";i:230;s:3:"ⷭ";i:230;s:3:"ⷮ";i:230;s:3:"ⷯ";i:230;s:3:"ⷰ";i:230;s:3:"ⷱ";i:230;s:3:"ⷲ";i:230;s:3:"ⷳ";i:230;s:3:"ⷴ";i:230;s:3:"ⷵ";i:230;s:3:"ⷶ";i:230;s:3:"ⷷ";i:230;s:3:"ⷸ";i:230;s:3:"ⷹ";i:230;s:3:"ⷺ";i:230;s:3:"ⷻ";i:230;s:3:"ⷼ";i:230;s:3:"ⷽ";i:230;s:3:"ⷾ";i:230;s:3:"ⷿ";i:230;s:3:"〪";i:218;s:3:"〫";i:228;s:3:"〬";i:232;s:3:"〭";i:222;s:3:"〮";i:224;s:3:"〯";i:224;s:3:"゙";i:8;s:3:"゚";i:8;s:3:"꙯";i:230;s:3:"꙼";i:230;s:3:"꙽";i:230;s:3:"꛰";i:230;s:3:"꛱";i:230;s:3:"꠆";i:9;s:3:"꣄";i:9;s:3:"꣠";i:230;s:3:"꣡";i:230;s:3:"꣢";i:230;s:3:"꣣";i:230;s:3:"꣤";i:230;s:3:"꣥";i:230;s:3:"꣦";i:230;s:3:"꣧";i:230;s:3:"꣨";i:230;s:3:"꣩";i:230;s:3:"꣪";i:230;s:3:"꣫";i:230;s:3:"꣬";i:230;s:3:"꣭";i:230;s:3:"꣮";i:230;s:3:"꣯";i:230;s:3:"꣰";i:230;s:3:"꣱";i:230;s:3:"꤫";i:220;s:3:"꤬";i:220;s:3:"꤭";i:220;s:3:"꥓";i:9;s:3:"꦳";i:7;s:3:"꧀";i:9;s:3:"ꪰ";i:230;s:3:"ꪲ";i:230;s:3:"ꪳ";i:230;s:3:"ꪴ";i:220;s:3:"ꪷ";i:230;s:3:"ꪸ";i:230;s:3:"ꪾ";i:230;s:3:"꪿";i:230;s:3:"꫁";i:230;s:3:"꯭";i:9;s:3:"ﬞ";i:26;s:3:"︠";i:230;s:3:"︡";i:230;s:3:"︢";i:230;s:3:"︣";i:230;s:3:"︤";i:230;s:3:"︥";i:230;s:3:"︦";i:230;s:4:"𐇽";i:220;s:4:"𐨍";i:220;s:4:"𐨏";i:230;s:4:"𐨸";i:230;s:4:"𐨹";i:1;s:4:"𐨺";i:220;s:4:"𐨿";i:9;s:4:"𑁆";i:9;s:4:"𑂹";i:9;s:4:"𑂺";i:7;s:4:"𝅥";i:216;s:4:"𝅦";i:216;s:4:"𝅧";i:1;s:4:"𝅨";i:1;s:4:"𝅩";i:1;s:4:"𝅭";i:226;s:4:"𝅮";i:216;s:4:"𝅯";i:216;s:4:"𝅰";i:216;s:4:"𝅱";i:216;s:4:"𝅲";i:216;s:4:"𝅻";i:220;s:4:"𝅼";i:220;s:4:"𝅽";i:220;s:4:"𝅾";i:220;s:4:"𝅿";i:220;s:4:"𝆀";i:220;s:4:"𝆁";i:220;s:4:"𝆂";i:220;s:4:"𝆅";i:230;s:4:"𝆆";i:230;s:4:"𝆇";i:230;s:4:"𝆈";i:230;s:4:"𝆉";i:230;s:4:"𝆊";i:220;s:4:"𝆋";i:220;s:4:"𝆪";i:230;s:4:"𝆫";i:230;s:4:"𝆬";i:230;s:4:"𝆭";i:230;s:4:"𝉂";i:230;s:4:"𝉃";i:230;s:4:"𝉄";i:230;}' );
-UtfNormal::$utfCanonicalComp = unserialize( 'a:1868:{s:3:"À";s:2:"À";s:3:"Á";s:2:"Á";s:3:"Â";s:2:"Â";s:3:"Ã";s:2:"Ã";s:3:"Ä";s:2:"Ä";s:3:"Å";s:2:"Å";s:3:"Ç";s:2:"Ç";s:3:"È";s:2:"È";s:3:"É";s:2:"É";s:3:"Ê";s:2:"Ê";s:3:"Ë";s:2:"Ë";s:3:"Ì";s:2:"Ì";s:3:"Í";s:2:"Í";s:3:"Î";s:2:"Î";s:3:"Ï";s:2:"Ï";s:3:"Ñ";s:2:"Ñ";s:3:"Ò";s:2:"Ò";s:3:"Ó";s:2:"Ó";s:3:"Ô";s:2:"Ô";s:3:"Õ";s:2:"Õ";s:3:"Ö";s:2:"Ö";s:3:"Ù";s:2:"Ù";s:3:"Ú";s:2:"Ú";s:3:"Û";s:2:"Û";s:3:"Ü";s:2:"Ü";s:3:"Ý";s:2:"Ý";s:3:"à";s:2:"à";s:3:"á";s:2:"á";s:3:"â";s:2:"â";s:3:"ã";s:2:"ã";s:3:"ä";s:2:"ä";s:3:"å";s:2:"å";s:3:"ç";s:2:"ç";s:3:"è";s:2:"è";s:3:"é";s:2:"é";s:3:"ê";s:2:"ê";s:3:"ë";s:2:"ë";s:3:"ì";s:2:"ì";s:3:"í";s:2:"í";s:3:"î";s:2:"î";s:3:"ï";s:2:"ï";s:3:"ñ";s:2:"ñ";s:3:"ò";s:2:"ò";s:3:"ó";s:2:"ó";s:3:"ô";s:2:"ô";s:3:"õ";s:2:"õ";s:3:"ö";s:2:"ö";s:3:"ù";s:2:"ù";s:3:"ú";s:2:"ú";s:3:"û";s:2:"û";s:3:"ü";s:2:"ü";s:3:"ý";s:2:"ý";s:3:"ÿ";s:2:"ÿ";s:3:"Ā";s:2:"Ā";s:3:"ā";s:2:"ā";s:3:"Ă";s:2:"Ă";s:3:"ă";s:2:"ă";s:3:"Ą";s:2:"Ą";s:3:"ą";s:2:"ą";s:3:"Ć";s:2:"Ć";s:3:"ć";s:2:"ć";s:3:"Ĉ";s:2:"Ĉ";s:3:"ĉ";s:2:"ĉ";s:3:"Ċ";s:2:"Ċ";s:3:"ċ";s:2:"ċ";s:3:"Č";s:2:"Č";s:3:"č";s:2:"č";s:3:"Ď";s:2:"Ď";s:3:"ď";s:2:"ď";s:3:"Ē";s:2:"Ē";s:3:"ē";s:2:"ē";s:3:"Ĕ";s:2:"Ĕ";s:3:"ĕ";s:2:"ĕ";s:3:"Ė";s:2:"Ė";s:3:"ė";s:2:"ė";s:3:"Ę";s:2:"Ę";s:3:"ę";s:2:"ę";s:3:"Ě";s:2:"Ě";s:3:"ě";s:2:"ě";s:3:"Ĝ";s:2:"Ĝ";s:3:"ĝ";s:2:"ĝ";s:3:"Ğ";s:2:"Ğ";s:3:"ğ";s:2:"ğ";s:3:"Ġ";s:2:"Ġ";s:3:"ġ";s:2:"ġ";s:3:"Ģ";s:2:"Ģ";s:3:"ģ";s:2:"ģ";s:3:"Ĥ";s:2:"Ĥ";s:3:"ĥ";s:2:"ĥ";s:3:"Ĩ";s:2:"Ĩ";s:3:"ĩ";s:2:"ĩ";s:3:"Ī";s:2:"Ī";s:3:"ī";s:2:"ī";s:3:"Ĭ";s:2:"Ĭ";s:3:"ĭ";s:2:"ĭ";s:3:"Į";s:2:"Į";s:3:"į";s:2:"į";s:3:"İ";s:2:"İ";s:3:"Ĵ";s:2:"Ĵ";s:3:"ĵ";s:2:"ĵ";s:3:"Ķ";s:2:"Ķ";s:3:"ķ";s:2:"ķ";s:3:"Ĺ";s:2:"Ĺ";s:3:"ĺ";s:2:"ĺ";s:3:"Ļ";s:2:"Ļ";s:3:"ļ";s:2:"ļ";s:3:"Ľ";s:2:"Ľ";s:3:"ľ";s:2:"ľ";s:3:"Ń";s:2:"Ń";s:3:"ń";s:2:"ń";s:3:"Ņ";s:2:"Ņ";s:3:"ņ";s:2:"ņ";s:3:"Ň";s:2:"Ň";s:3:"ň";s:2:"ň";s:3:"Ō";s:2:"Ō";s:3:"ō";s:2:"ō";s:3:"Ŏ";s:2:"Ŏ";s:3:"ŏ";s:2:"ŏ";s:3:"Ő";s:2:"Ő";s:3:"ő";s:2:"ő";s:3:"Ŕ";s:2:"Ŕ";s:3:"ŕ";s:2:"ŕ";s:3:"Ŗ";s:2:"Ŗ";s:3:"ŗ";s:2:"ŗ";s:3:"Ř";s:2:"Ř";s:3:"ř";s:2:"ř";s:3:"Ś";s:2:"Ś";s:3:"ś";s:2:"ś";s:3:"Ŝ";s:2:"Ŝ";s:3:"ŝ";s:2:"ŝ";s:3:"Ş";s:2:"Ş";s:3:"ş";s:2:"ş";s:3:"Š";s:2:"Š";s:3:"š";s:2:"š";s:3:"Ţ";s:2:"Ţ";s:3:"ţ";s:2:"ţ";s:3:"Ť";s:2:"Ť";s:3:"ť";s:2:"ť";s:3:"Ũ";s:2:"Ũ";s:3:"ũ";s:2:"ũ";s:3:"Ū";s:2:"Ū";s:3:"ū";s:2:"ū";s:3:"Ŭ";s:2:"Ŭ";s:3:"ŭ";s:2:"ŭ";s:3:"Ů";s:2:"Ů";s:3:"ů";s:2:"ů";s:3:"Ű";s:2:"Ű";s:3:"ű";s:2:"ű";s:3:"Ų";s:2:"Ų";s:3:"ų";s:2:"ų";s:3:"Ŵ";s:2:"Ŵ";s:3:"ŵ";s:2:"ŵ";s:3:"Ŷ";s:2:"Ŷ";s:3:"ŷ";s:2:"ŷ";s:3:"Ÿ";s:2:"Ÿ";s:3:"Ź";s:2:"Ź";s:3:"ź";s:2:"ź";s:3:"Ż";s:2:"Ż";s:3:"ż";s:2:"ż";s:3:"Ž";s:2:"Ž";s:3:"ž";s:2:"ž";s:3:"Ơ";s:2:"Ơ";s:3:"ơ";s:2:"ơ";s:3:"Ư";s:2:"Ư";s:3:"ư";s:2:"ư";s:3:"Ǎ";s:2:"Ǎ";s:3:"ǎ";s:2:"ǎ";s:3:"Ǐ";s:2:"Ǐ";s:3:"ǐ";s:2:"ǐ";s:3:"Ǒ";s:2:"Ǒ";s:3:"ǒ";s:2:"ǒ";s:3:"Ǔ";s:2:"Ǔ";s:3:"ǔ";s:2:"ǔ";s:4:"Ǖ";s:2:"Ǖ";s:4:"ǖ";s:2:"ǖ";s:4:"Ǘ";s:2:"Ǘ";s:4:"ǘ";s:2:"ǘ";s:4:"Ǚ";s:2:"Ǚ";s:4:"ǚ";s:2:"ǚ";s:4:"Ǜ";s:2:"Ǜ";s:4:"ǜ";s:2:"ǜ";s:4:"Ǟ";s:2:"Ǟ";s:4:"ǟ";s:2:"ǟ";s:4:"Ǡ";s:2:"Ǡ";s:4:"ǡ";s:2:"ǡ";s:4:"Ǣ";s:2:"Ǣ";s:4:"ǣ";s:2:"ǣ";s:3:"Ǧ";s:2:"Ǧ";s:3:"ǧ";s:2:"ǧ";s:3:"Ǩ";s:2:"Ǩ";s:3:"ǩ";s:2:"ǩ";s:3:"Ǫ";s:2:"Ǫ";s:3:"ǫ";s:2:"ǫ";s:4:"Ǭ";s:2:"Ǭ";s:4:"ǭ";s:2:"ǭ";s:4:"Ǯ";s:2:"Ǯ";s:4:"ǯ";s:2:"ǯ";s:3:"ǰ";s:2:"ǰ";s:3:"Ǵ";s:2:"Ǵ";s:3:"ǵ";s:2:"ǵ";s:3:"Ǹ";s:2:"Ǹ";s:3:"ǹ";s:2:"ǹ";s:4:"Ǻ";s:2:"Ǻ";s:4:"ǻ";s:2:"ǻ";s:4:"Ǽ";s:2:"Ǽ";s:4:"ǽ";s:2:"ǽ";s:4:"Ǿ";s:2:"Ǿ";s:4:"ǿ";s:2:"ǿ";s:3:"Ȁ";s:2:"Ȁ";s:3:"ȁ";s:2:"ȁ";s:3:"Ȃ";s:2:"Ȃ";s:3:"ȃ";s:2:"ȃ";s:3:"Ȅ";s:2:"Ȅ";s:3:"ȅ";s:2:"ȅ";s:3:"Ȇ";s:2:"Ȇ";s:3:"ȇ";s:2:"ȇ";s:3:"Ȉ";s:2:"Ȉ";s:3:"ȉ";s:2:"ȉ";s:3:"Ȋ";s:2:"Ȋ";s:3:"ȋ";s:2:"ȋ";s:3:"Ȍ";s:2:"Ȍ";s:3:"ȍ";s:2:"ȍ";s:3:"Ȏ";s:2:"Ȏ";s:3:"ȏ";s:2:"ȏ";s:3:"Ȑ";s:2:"Ȑ";s:3:"ȑ";s:2:"ȑ";s:3:"Ȓ";s:2:"Ȓ";s:3:"ȓ";s:2:"ȓ";s:3:"Ȕ";s:2:"Ȕ";s:3:"ȕ";s:2:"ȕ";s:3:"Ȗ";s:2:"Ȗ";s:3:"ȗ";s:2:"ȗ";s:3:"Ș";s:2:"Ș";s:3:"ș";s:2:"ș";s:3:"Ț";s:2:"Ț";s:3:"ț";s:2:"ț";s:3:"Ȟ";s:2:"Ȟ";s:3:"ȟ";s:2:"ȟ";s:3:"Ȧ";s:2:"Ȧ";s:3:"ȧ";s:2:"ȧ";s:3:"Ȩ";s:2:"Ȩ";s:3:"ȩ";s:2:"ȩ";s:4:"Ȫ";s:2:"Ȫ";s:4:"ȫ";s:2:"ȫ";s:4:"Ȭ";s:2:"Ȭ";s:4:"ȭ";s:2:"ȭ";s:3:"Ȯ";s:2:"Ȯ";s:3:"ȯ";s:2:"ȯ";s:4:"Ȱ";s:2:"Ȱ";s:4:"ȱ";s:2:"ȱ";s:3:"Ȳ";s:2:"Ȳ";s:3:"ȳ";s:2:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:4:"̈́";s:2:"̈́";s:2:"ʹ";s:2:"ʹ";s:1:";";s:2:";";s:4:"΅";s:2:"΅";s:4:"Ά";s:2:"Ά";s:2:"·";s:2:"·";s:4:"Έ";s:2:"Έ";s:4:"Ή";s:2:"Ή";s:4:"Ί";s:2:"Ί";s:4:"Ό";s:2:"Ό";s:4:"Ύ";s:2:"Ύ";s:4:"Ώ";s:2:"Ώ";s:4:"ΐ";s:2:"ΐ";s:4:"Ϊ";s:2:"Ϊ";s:4:"Ϋ";s:2:"Ϋ";s:4:"ά";s:2:"ά";s:4:"έ";s:2:"έ";s:4:"ή";s:2:"ή";s:4:"ί";s:2:"ί";s:4:"ΰ";s:2:"ΰ";s:4:"ϊ";s:2:"ϊ";s:4:"ϋ";s:2:"ϋ";s:4:"ό";s:2:"ό";s:4:"ύ";s:2:"ύ";s:4:"ώ";s:2:"ώ";s:4:"ϓ";s:2:"ϓ";s:4:"ϔ";s:2:"ϔ";s:4:"Ѐ";s:2:"Ѐ";s:4:"Ё";s:2:"Ё";s:4:"Ѓ";s:2:"Ѓ";s:4:"Ї";s:2:"Ї";s:4:"Ќ";s:2:"Ќ";s:4:"Ѝ";s:2:"Ѝ";s:4:"Ў";s:2:"Ў";s:4:"Й";s:2:"Й";s:4:"й";s:2:"й";s:4:"ѐ";s:2:"ѐ";s:4:"ё";s:2:"ё";s:4:"ѓ";s:2:"ѓ";s:4:"ї";s:2:"ї";s:4:"ќ";s:2:"ќ";s:4:"ѝ";s:2:"ѝ";s:4:"ў";s:2:"ў";s:4:"Ѷ";s:2:"Ѷ";s:4:"ѷ";s:2:"ѷ";s:4:"Ӂ";s:2:"Ӂ";s:4:"ӂ";s:2:"ӂ";s:4:"Ӑ";s:2:"Ӑ";s:4:"ӑ";s:2:"ӑ";s:4:"Ӓ";s:2:"Ӓ";s:4:"ӓ";s:2:"ӓ";s:4:"Ӗ";s:2:"Ӗ";s:4:"ӗ";s:2:"ӗ";s:4:"Ӛ";s:2:"Ӛ";s:4:"ӛ";s:2:"ӛ";s:4:"Ӝ";s:2:"Ӝ";s:4:"ӝ";s:2:"ӝ";s:4:"Ӟ";s:2:"Ӟ";s:4:"ӟ";s:2:"ӟ";s:4:"Ӣ";s:2:"Ӣ";s:4:"ӣ";s:2:"ӣ";s:4:"Ӥ";s:2:"Ӥ";s:4:"ӥ";s:2:"ӥ";s:4:"Ӧ";s:2:"Ӧ";s:4:"ӧ";s:2:"ӧ";s:4:"Ӫ";s:2:"Ӫ";s:4:"ӫ";s:2:"ӫ";s:4:"Ӭ";s:2:"Ӭ";s:4:"ӭ";s:2:"ӭ";s:4:"Ӯ";s:2:"Ӯ";s:4:"ӯ";s:2:"ӯ";s:4:"Ӱ";s:2:"Ӱ";s:4:"ӱ";s:2:"ӱ";s:4:"Ӳ";s:2:"Ӳ";s:4:"ӳ";s:2:"ӳ";s:4:"Ӵ";s:2:"Ӵ";s:4:"ӵ";s:2:"ӵ";s:4:"Ӹ";s:2:"Ӹ";s:4:"ӹ";s:2:"ӹ";s:4:"آ";s:2:"آ";s:4:"أ";s:2:"أ";s:4:"ؤ";s:2:"ؤ";s:4:"إ";s:2:"إ";s:4:"ئ";s:2:"ئ";s:4:"ۀ";s:2:"ۀ";s:4:"ۂ";s:2:"ۂ";s:4:"ۓ";s:2:"ۓ";s:6:"ऩ";s:3:"ऩ";s:6:"ऱ";s:3:"ऱ";s:6:"ऴ";s:3:"ऴ";s:6:"ো";s:3:"ো";s:6:"ৌ";s:3:"ৌ";s:6:"ୈ";s:3:"ୈ";s:6:"ୋ";s:3:"ୋ";s:6:"ୌ";s:3:"ୌ";s:6:"ஔ";s:3:"ஔ";s:6:"ொ";s:3:"ொ";s:6:"ோ";s:3:"ோ";s:6:"ௌ";s:3:"ௌ";s:6:"ై";s:3:"ై";s:6:"ೀ";s:3:"ೀ";s:6:"ೇ";s:3:"ೇ";s:6:"ೈ";s:3:"ೈ";s:6:"ೊ";s:3:"ೊ";s:6:"ೋ";s:3:"ೋ";s:6:"ൊ";s:3:"ൊ";s:6:"ോ";s:3:"ോ";s:6:"ൌ";s:3:"ൌ";s:6:"ේ";s:3:"ේ";s:6:"ො";s:3:"ො";s:6:"ෝ";s:3:"ෝ";s:6:"ෞ";s:3:"ෞ";s:6:"ཱི";s:3:"ཱི";s:6:"ཱུ";s:3:"ཱུ";s:6:"ཱྀ";s:3:"ཱྀ";s:6:"ဦ";s:3:"ဦ";s:6:"ᬆ";s:3:"ᬆ";s:6:"ᬈ";s:3:"ᬈ";s:6:"ᬊ";s:3:"ᬊ";s:6:"ᬌ";s:3:"ᬌ";s:6:"ᬎ";s:3:"ᬎ";s:6:"ᬒ";s:3:"ᬒ";s:6:"ᬻ";s:3:"ᬻ";s:6:"ᬽ";s:3:"ᬽ";s:6:"ᭀ";s:3:"ᭀ";s:6:"ᭁ";s:3:"ᭁ";s:6:"ᭃ";s:3:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:4:"Ḉ";s:3:"Ḉ";s:4:"ḉ";s:3:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:4:"Ḕ";s:3:"Ḕ";s:4:"ḕ";s:3:"ḕ";s:4:"Ḗ";s:3:"Ḗ";s:4:"ḗ";s:3:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:4:"Ḝ";s:3:"Ḝ";s:4:"ḝ";s:3:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:4:"Ḯ";s:3:"Ḯ";s:4:"ḯ";s:3:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:5:"Ḹ";s:3:"Ḹ";s:5:"ḹ";s:3:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:4:"Ṍ";s:3:"Ṍ";s:4:"ṍ";s:3:"ṍ";s:4:"Ṏ";s:3:"Ṏ";s:4:"ṏ";s:3:"ṏ";s:4:"Ṑ";s:3:"Ṑ";s:4:"ṑ";s:3:"ṑ";s:4:"Ṓ";s:3:"Ṓ";s:4:"ṓ";s:3:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:5:"Ṝ";s:3:"Ṝ";s:5:"ṝ";s:3:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:4:"Ṥ";s:3:"Ṥ";s:4:"ṥ";s:3:"ṥ";s:4:"Ṧ";s:3:"Ṧ";s:4:"ṧ";s:3:"ṧ";s:5:"Ṩ";s:3:"Ṩ";s:5:"ṩ";s:3:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:4:"Ṹ";s:3:"Ṹ";s:4:"ṹ";s:3:"ṹ";s:4:"Ṻ";s:3:"Ṻ";s:4:"ṻ";s:3:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:4:"ẛ";s:3:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:4:"Ấ";s:3:"Ấ";s:4:"ấ";s:3:"ấ";s:4:"Ầ";s:3:"Ầ";s:4:"ầ";s:3:"ầ";s:4:"Ẩ";s:3:"Ẩ";s:4:"ẩ";s:3:"ẩ";s:4:"Ẫ";s:3:"Ẫ";s:4:"ẫ";s:3:"ẫ";s:5:"Ậ";s:3:"Ậ";s:5:"ậ";s:3:"ậ";s:4:"Ắ";s:3:"Ắ";s:4:"ắ";s:3:"ắ";s:4:"Ằ";s:3:"Ằ";s:4:"ằ";s:3:"ằ";s:4:"Ẳ";s:3:"Ẳ";s:4:"ẳ";s:3:"ẳ";s:4:"Ẵ";s:3:"Ẵ";s:4:"ẵ";s:3:"ẵ";s:5:"Ặ";s:3:"Ặ";s:5:"ặ";s:3:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:4:"Ế";s:3:"Ế";s:4:"ế";s:3:"ế";s:4:"Ề";s:3:"Ề";s:4:"ề";s:3:"ề";s:4:"Ể";s:3:"Ể";s:4:"ể";s:3:"ể";s:4:"Ễ";s:3:"Ễ";s:4:"ễ";s:3:"ễ";s:5:"Ệ";s:3:"Ệ";s:5:"ệ";s:3:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:4:"Ố";s:3:"Ố";s:4:"ố";s:3:"ố";s:4:"Ồ";s:3:"Ồ";s:4:"ồ";s:3:"ồ";s:4:"Ổ";s:3:"Ổ";s:4:"ổ";s:3:"ổ";s:4:"Ỗ";s:3:"Ỗ";s:4:"ỗ";s:3:"ỗ";s:5:"Ộ";s:3:"Ộ";s:5:"ộ";s:3:"ộ";s:4:"Ớ";s:3:"Ớ";s:4:"ớ";s:3:"ớ";s:4:"Ờ";s:3:"Ờ";s:4:"ờ";s:3:"ờ";s:4:"Ở";s:3:"Ở";s:4:"ở";s:3:"ở";s:4:"Ỡ";s:3:"Ỡ";s:4:"ỡ";s:3:"ỡ";s:4:"Ợ";s:3:"Ợ";s:4:"ợ";s:3:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:4:"Ứ";s:3:"Ứ";s:4:"ứ";s:3:"ứ";s:4:"Ừ";s:3:"Ừ";s:4:"ừ";s:3:"ừ";s:4:"Ử";s:3:"Ử";s:4:"ử";s:3:"ử";s:4:"Ữ";s:3:"Ữ";s:4:"ữ";s:3:"ữ";s:4:"Ự";s:3:"Ự";s:4:"ự";s:3:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:4:"ἀ";s:3:"ἀ";s:4:"ἁ";s:3:"ἁ";s:5:"ἂ";s:3:"ἂ";s:5:"ἃ";s:3:"ἃ";s:5:"ἄ";s:3:"ἄ";s:5:"ἅ";s:3:"ἅ";s:5:"ἆ";s:3:"ἆ";s:5:"ἇ";s:3:"ἇ";s:4:"Ἀ";s:3:"Ἀ";s:4:"Ἁ";s:3:"Ἁ";s:5:"Ἂ";s:3:"Ἂ";s:5:"Ἃ";s:3:"Ἃ";s:5:"Ἄ";s:3:"Ἄ";s:5:"Ἅ";s:3:"Ἅ";s:5:"Ἆ";s:3:"Ἆ";s:5:"Ἇ";s:3:"Ἇ";s:4:"ἐ";s:3:"ἐ";s:4:"ἑ";s:3:"ἑ";s:5:"ἒ";s:3:"ἒ";s:5:"ἓ";s:3:"ἓ";s:5:"ἔ";s:3:"ἔ";s:5:"ἕ";s:3:"ἕ";s:4:"Ἐ";s:3:"Ἐ";s:4:"Ἑ";s:3:"Ἑ";s:5:"Ἒ";s:3:"Ἒ";s:5:"Ἓ";s:3:"Ἓ";s:5:"Ἔ";s:3:"Ἔ";s:5:"Ἕ";s:3:"Ἕ";s:4:"ἠ";s:3:"ἠ";s:4:"ἡ";s:3:"ἡ";s:5:"ἢ";s:3:"ἢ";s:5:"ἣ";s:3:"ἣ";s:5:"ἤ";s:3:"ἤ";s:5:"ἥ";s:3:"ἥ";s:5:"ἦ";s:3:"ἦ";s:5:"ἧ";s:3:"ἧ";s:4:"Ἠ";s:3:"Ἠ";s:4:"Ἡ";s:3:"Ἡ";s:5:"Ἢ";s:3:"Ἢ";s:5:"Ἣ";s:3:"Ἣ";s:5:"Ἤ";s:3:"Ἤ";s:5:"Ἥ";s:3:"Ἥ";s:5:"Ἦ";s:3:"Ἦ";s:5:"Ἧ";s:3:"Ἧ";s:4:"ἰ";s:3:"ἰ";s:4:"ἱ";s:3:"ἱ";s:5:"ἲ";s:3:"ἲ";s:5:"ἳ";s:3:"ἳ";s:5:"ἴ";s:3:"ἴ";s:5:"ἵ";s:3:"ἵ";s:5:"ἶ";s:3:"ἶ";s:5:"ἷ";s:3:"ἷ";s:4:"Ἰ";s:3:"Ἰ";s:4:"Ἱ";s:3:"Ἱ";s:5:"Ἲ";s:3:"Ἲ";s:5:"Ἳ";s:3:"Ἳ";s:5:"Ἴ";s:3:"Ἴ";s:5:"Ἵ";s:3:"Ἵ";s:5:"Ἶ";s:3:"Ἶ";s:5:"Ἷ";s:3:"Ἷ";s:4:"ὀ";s:3:"ὀ";s:4:"ὁ";s:3:"ὁ";s:5:"ὂ";s:3:"ὂ";s:5:"ὃ";s:3:"ὃ";s:5:"ὄ";s:3:"ὄ";s:5:"ὅ";s:3:"ὅ";s:4:"Ὀ";s:3:"Ὀ";s:4:"Ὁ";s:3:"Ὁ";s:5:"Ὂ";s:3:"Ὂ";s:5:"Ὃ";s:3:"Ὃ";s:5:"Ὄ";s:3:"Ὄ";s:5:"Ὅ";s:3:"Ὅ";s:4:"ὐ";s:3:"ὐ";s:4:"ὑ";s:3:"ὑ";s:5:"ὒ";s:3:"ὒ";s:5:"ὓ";s:3:"ὓ";s:5:"ὔ";s:3:"ὔ";s:5:"ὕ";s:3:"ὕ";s:5:"ὖ";s:3:"ὖ";s:5:"ὗ";s:3:"ὗ";s:4:"Ὑ";s:3:"Ὑ";s:5:"Ὓ";s:3:"Ὓ";s:5:"Ὕ";s:3:"Ὕ";s:5:"Ὗ";s:3:"Ὗ";s:4:"ὠ";s:3:"ὠ";s:4:"ὡ";s:3:"ὡ";s:5:"ὢ";s:3:"ὢ";s:5:"ὣ";s:3:"ὣ";s:5:"ὤ";s:3:"ὤ";s:5:"ὥ";s:3:"ὥ";s:5:"ὦ";s:3:"ὦ";s:5:"ὧ";s:3:"ὧ";s:4:"Ὠ";s:3:"Ὠ";s:4:"Ὡ";s:3:"Ὡ";s:5:"Ὢ";s:3:"Ὢ";s:5:"Ὣ";s:3:"Ὣ";s:5:"Ὤ";s:3:"Ὤ";s:5:"Ὥ";s:3:"Ὥ";s:5:"Ὦ";s:3:"Ὦ";s:5:"Ὧ";s:3:"Ὧ";s:4:"ὰ";s:3:"ὰ";s:2:"ά";s:3:"ά";s:4:"ὲ";s:3:"ὲ";s:2:"έ";s:3:"έ";s:4:"ὴ";s:3:"ὴ";s:2:"ή";s:3:"ή";s:4:"ὶ";s:3:"ὶ";s:2:"ί";s:3:"ί";s:4:"ὸ";s:3:"ὸ";s:2:"ό";s:3:"ό";s:4:"ὺ";s:3:"ὺ";s:2:"ύ";s:3:"ύ";s:4:"ὼ";s:3:"ὼ";s:2:"ώ";s:3:"ώ";s:5:"ᾀ";s:3:"ᾀ";s:5:"ᾁ";s:3:"ᾁ";s:5:"ᾂ";s:3:"ᾂ";s:5:"ᾃ";s:3:"ᾃ";s:5:"ᾄ";s:3:"ᾄ";s:5:"ᾅ";s:3:"ᾅ";s:5:"ᾆ";s:3:"ᾆ";s:5:"ᾇ";s:3:"ᾇ";s:5:"ᾈ";s:3:"ᾈ";s:5:"ᾉ";s:3:"ᾉ";s:5:"ᾊ";s:3:"ᾊ";s:5:"ᾋ";s:3:"ᾋ";s:5:"ᾌ";s:3:"ᾌ";s:5:"ᾍ";s:3:"ᾍ";s:5:"ᾎ";s:3:"ᾎ";s:5:"ᾏ";s:3:"ᾏ";s:5:"ᾐ";s:3:"ᾐ";s:5:"ᾑ";s:3:"ᾑ";s:5:"ᾒ";s:3:"ᾒ";s:5:"ᾓ";s:3:"ᾓ";s:5:"ᾔ";s:3:"ᾔ";s:5:"ᾕ";s:3:"ᾕ";s:5:"ᾖ";s:3:"ᾖ";s:5:"ᾗ";s:3:"ᾗ";s:5:"ᾘ";s:3:"ᾘ";s:5:"ᾙ";s:3:"ᾙ";s:5:"ᾚ";s:3:"ᾚ";s:5:"ᾛ";s:3:"ᾛ";s:5:"ᾜ";s:3:"ᾜ";s:5:"ᾝ";s:3:"ᾝ";s:5:"ᾞ";s:3:"ᾞ";s:5:"ᾟ";s:3:"ᾟ";s:5:"ᾠ";s:3:"ᾠ";s:5:"ᾡ";s:3:"ᾡ";s:5:"ᾢ";s:3:"ᾢ";s:5:"ᾣ";s:3:"ᾣ";s:5:"ᾤ";s:3:"ᾤ";s:5:"ᾥ";s:3:"ᾥ";s:5:"ᾦ";s:3:"ᾦ";s:5:"ᾧ";s:3:"ᾧ";s:5:"ᾨ";s:3:"ᾨ";s:5:"ᾩ";s:3:"ᾩ";s:5:"ᾪ";s:3:"ᾪ";s:5:"ᾫ";s:3:"ᾫ";s:5:"ᾬ";s:3:"ᾬ";s:5:"ᾭ";s:3:"ᾭ";s:5:"ᾮ";s:3:"ᾮ";s:5:"ᾯ";s:3:"ᾯ";s:4:"ᾰ";s:3:"ᾰ";s:4:"ᾱ";s:3:"ᾱ";s:5:"ᾲ";s:3:"ᾲ";s:4:"ᾳ";s:3:"ᾳ";s:4:"ᾴ";s:3:"ᾴ";s:4:"ᾶ";s:3:"ᾶ";s:5:"ᾷ";s:3:"ᾷ";s:4:"Ᾰ";s:3:"Ᾰ";s:4:"Ᾱ";s:3:"Ᾱ";s:4:"Ὰ";s:3:"Ὰ";s:2:"Ά";s:3:"Ά";s:4:"ᾼ";s:3:"ᾼ";s:2:"ι";s:3:"ι";s:4:"῁";s:3:"῁";s:5:"ῂ";s:3:"ῂ";s:4:"ῃ";s:3:"ῃ";s:4:"ῄ";s:3:"ῄ";s:4:"ῆ";s:3:"ῆ";s:5:"ῇ";s:3:"ῇ";s:4:"Ὲ";s:3:"Ὲ";s:2:"Έ";s:3:"Έ";s:4:"Ὴ";s:3:"Ὴ";s:2:"Ή";s:3:"Ή";s:4:"ῌ";s:3:"ῌ";s:5:"῍";s:3:"῍";s:5:"῎";s:3:"῎";s:5:"῏";s:3:"῏";s:4:"ῐ";s:3:"ῐ";s:4:"ῑ";s:3:"ῑ";s:4:"ῒ";s:3:"ῒ";s:2:"ΐ";s:3:"ΐ";s:4:"ῖ";s:3:"ῖ";s:4:"ῗ";s:3:"ῗ";s:4:"Ῐ";s:3:"Ῐ";s:4:"Ῑ";s:3:"Ῑ";s:4:"Ὶ";s:3:"Ὶ";s:2:"Ί";s:3:"Ί";s:5:"῝";s:3:"῝";s:5:"῞";s:3:"῞";s:5:"῟";s:3:"῟";s:4:"ῠ";s:3:"ῠ";s:4:"ῡ";s:3:"ῡ";s:4:"ῢ";s:3:"ῢ";s:2:"ΰ";s:3:"ΰ";s:4:"ῤ";s:3:"ῤ";s:4:"ῥ";s:3:"ῥ";s:4:"ῦ";s:3:"ῦ";s:4:"ῧ";s:3:"ῧ";s:4:"Ῠ";s:3:"Ῠ";s:4:"Ῡ";s:3:"Ῡ";s:4:"Ὺ";s:3:"Ὺ";s:2:"Ύ";s:3:"Ύ";s:4:"Ῥ";s:3:"Ῥ";s:4:"῭";s:3:"῭";s:2:"΅";s:3:"΅";s:1:"`";s:3:"`";s:5:"ῲ";s:3:"ῲ";s:4:"ῳ";s:3:"ῳ";s:4:"ῴ";s:3:"ῴ";s:4:"ῶ";s:3:"ῶ";s:5:"ῷ";s:3:"ῷ";s:4:"Ὸ";s:3:"Ὸ";s:2:"Ό";s:3:"Ό";s:4:"Ὼ";s:3:"Ὼ";s:2:"Ώ";s:3:"Ώ";s:4:"ῼ";s:3:"ῼ";s:2:"´";s:3:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:2:"Ω";s:3:"Ω";s:1:"K";s:3:"K";s:2:"Å";s:3:"Å";s:5:"↚";s:3:"↚";s:5:"↛";s:3:"↛";s:5:"↮";s:3:"↮";s:5:"⇍";s:3:"⇍";s:5:"⇎";s:3:"⇎";s:5:"⇏";s:3:"⇏";s:5:"∄";s:3:"∄";s:5:"∉";s:3:"∉";s:5:"∌";s:3:"∌";s:5:"∤";s:3:"∤";s:5:"∦";s:3:"∦";s:5:"≁";s:3:"≁";s:5:"≄";s:3:"≄";s:5:"≇";s:3:"≇";s:5:"≉";s:3:"≉";s:3:"≠";s:3:"≠";s:5:"≢";s:3:"≢";s:5:"≭";s:3:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:5:"≰";s:3:"≰";s:5:"≱";s:3:"≱";s:5:"≴";s:3:"≴";s:5:"≵";s:3:"≵";s:5:"≸";s:3:"≸";s:5:"≹";s:3:"≹";s:5:"⊀";s:3:"⊀";s:5:"⊁";s:3:"⊁";s:5:"⊄";s:3:"⊄";s:5:"⊅";s:3:"⊅";s:5:"⊈";s:3:"⊈";s:5:"⊉";s:3:"⊉";s:5:"⊬";s:3:"⊬";s:5:"⊭";s:3:"⊭";s:5:"⊮";s:3:"⊮";s:5:"⊯";s:3:"⊯";s:5:"⋠";s:3:"⋠";s:5:"⋡";s:3:"⋡";s:5:"⋢";s:3:"⋢";s:5:"⋣";s:3:"⋣";s:5:"⋪";s:3:"⋪";s:5:"⋫";s:3:"⋫";s:5:"⋬";s:3:"⋬";s:5:"⋭";s:3:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:6:"が";s:3:"が";s:6:"ぎ";s:3:"ぎ";s:6:"ぐ";s:3:"ぐ";s:6:"げ";s:3:"げ";s:6:"ご";s:3:"ご";s:6:"ざ";s:3:"ざ";s:6:"じ";s:3:"じ";s:6:"ず";s:3:"ず";s:6:"ぜ";s:3:"ぜ";s:6:"ぞ";s:3:"ぞ";s:6:"だ";s:3:"だ";s:6:"ぢ";s:3:"ぢ";s:6:"づ";s:3:"づ";s:6:"で";s:3:"で";s:6:"ど";s:3:"ど";s:6:"ば";s:3:"ば";s:6:"ぱ";s:3:"ぱ";s:6:"び";s:3:"び";s:6:"ぴ";s:3:"ぴ";s:6:"ぶ";s:3:"ぶ";s:6:"ぷ";s:3:"ぷ";s:6:"べ";s:3:"べ";s:6:"ぺ";s:3:"ぺ";s:6:"ぼ";s:3:"ぼ";s:6:"ぽ";s:3:"ぽ";s:6:"ゔ";s:3:"ゔ";s:6:"ゞ";s:3:"ゞ";s:6:"ガ";s:3:"ガ";s:6:"ギ";s:3:"ギ";s:6:"グ";s:3:"グ";s:6:"ゲ";s:3:"ゲ";s:6:"ゴ";s:3:"ゴ";s:6:"ザ";s:3:"ザ";s:6:"ジ";s:3:"ジ";s:6:"ズ";s:3:"ズ";s:6:"ゼ";s:3:"ゼ";s:6:"ゾ";s:3:"ゾ";s:6:"ダ";s:3:"ダ";s:6:"ヂ";s:3:"ヂ";s:6:"ヅ";s:3:"ヅ";s:6:"デ";s:3:"デ";s:6:"ド";s:3:"ド";s:6:"バ";s:3:"バ";s:6:"パ";s:3:"パ";s:6:"ビ";s:3:"ビ";s:6:"ピ";s:3:"ピ";s:6:"ブ";s:3:"ブ";s:6:"プ";s:3:"プ";s:6:"ベ";s:3:"ベ";s:6:"ペ";s:3:"ペ";s:6:"ボ";s:3:"ボ";s:6:"ポ";s:3:"ポ";s:6:"ヴ";s:3:"ヴ";s:6:"ヷ";s:3:"ヷ";s:6:"ヸ";s:3:"ヸ";s:6:"ヹ";s:3:"ヹ";s:6:"ヺ";s:3:"ヺ";s:6:"ヾ";s:3:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:4:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:4:"廊";s:3:"朗";s:4:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:4:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:4:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:4:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:4:"異";s:3:"北";s:4:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:4:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:4:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:4:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:4:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:4:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:4:"侮";s:3:"僧";s:4:"僧";s:3:"免";s:4:"免";s:3:"勉";s:4:"勉";s:3:"勤";s:4:"勤";s:3:"卑";s:4:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:4:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:4:"屮";s:3:"悔";s:4:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:4:"憎";s:3:"懲";s:4:"懲";s:3:"敏";s:4:"敏";s:3:"既";s:3:"既";s:3:"暑";s:4:"暑";s:3:"梅";s:4:"梅";s:3:"海";s:4:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:4:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:4:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:4:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"著";s:4:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:4:"𤋮";s:3:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:4:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:4:"勇";s:3:"勺";s:4:"勺";s:3:"啕";s:3:"啕";s:3:"喙";s:4:"喙";s:3:"嗢";s:3:"嗢";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:4:"慎";s:3:"愈";s:3:"愈";s:3:"慠";s:3:"慠";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"望";s:4:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"滛";s:3:"滛";s:3:"滋";s:4:"滋";s:3:"瀞";s:4:"瀞";s:3:"瞧";s:3:"瞧";s:3:"爵";s:4:"爵";s:3:"犯";s:3:"犯";s:3:"瑱";s:4:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"盛";s:3:"盛";s:3:"直";s:4:"直";s:3:"睊";s:4:"睊";s:3:"着";s:3:"着";s:3:"磌";s:4:"磌";s:3:"窱";s:3:"窱";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"缾";s:3:"缾";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:4:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"調";s:3:"調";s:3:"請";s:3:"請";s:3:"諭";s:4:"諭";s:3:"變";s:4:"變";s:3:"輸";s:4:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"韛";s:3:"韛";s:3:"頋";s:4:"頋";s:3:"鬒";s:4:"鬒";s:4:"𢡊";s:3:"𢡊";s:4:"𢡄";s:3:"𢡄";s:4:"𣏕";s:3:"𣏕";s:3:"㮝";s:4:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:4:"䀹";s:4:"𥉉";s:3:"𥉉";s:4:"𥳐";s:3:"𥳐";s:4:"𧻓";s:3:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:8:"𑂚";s:4:"𑂚";s:8:"𑂜";s:4:"𑂜";s:8:"𑂫";s:4:"𑂫";s:3:"丽";s:4:"丽";s:3:"丸";s:4:"丸";s:3:"乁";s:4:"乁";s:4:"𠄢";s:4:"𠄢";s:3:"你";s:4:"你";s:3:"侻";s:4:"侻";s:3:"倂";s:4:"倂";s:3:"偺";s:4:"偺";s:3:"備";s:4:"備";s:3:"像";s:4:"像";s:3:"㒞";s:4:"㒞";s:4:"𠘺";s:4:"𠘺";s:3:"兔";s:4:"兔";s:3:"兤";s:4:"兤";s:3:"具";s:4:"具";s:4:"𠔜";s:4:"𠔜";s:3:"㒹";s:4:"㒹";s:3:"內";s:4:"內";s:3:"再";s:4:"再";s:4:"𠕋";s:4:"𠕋";s:3:"冗";s:4:"冗";s:3:"冤";s:4:"冤";s:3:"仌";s:4:"仌";s:3:"冬";s:4:"冬";s:4:"𩇟";s:4:"𩇟";s:3:"凵";s:4:"凵";s:3:"刃";s:4:"刃";s:3:"㓟";s:4:"㓟";s:3:"刻";s:4:"刻";s:3:"剆";s:4:"剆";s:3:"割";s:4:"割";s:3:"剷";s:4:"剷";s:3:"㔕";s:4:"㔕";s:3:"包";s:4:"包";s:3:"匆";s:4:"匆";s:3:"卉";s:4:"卉";s:3:"博";s:4:"博";s:3:"即";s:4:"即";s:3:"卽";s:4:"卽";s:3:"卿";s:4:"卿";s:4:"𠨬";s:4:"𠨬";s:3:"灰";s:4:"灰";s:3:"及";s:4:"及";s:3:"叟";s:4:"叟";s:4:"𠭣";s:4:"𠭣";s:3:"叫";s:4:"叫";s:3:"叱";s:4:"叱";s:3:"吆";s:4:"吆";s:3:"咞";s:4:"咞";s:3:"吸";s:4:"吸";s:3:"呈";s:4:"呈";s:3:"周";s:4:"周";s:3:"咢";s:4:"咢";s:3:"哶";s:4:"哶";s:3:"唐";s:4:"唐";s:3:"啓";s:4:"啓";s:3:"啣";s:4:"啣";s:3:"善";s:4:"善";s:3:"喫";s:4:"喫";s:3:"喳";s:4:"喳";s:3:"嗂";s:4:"嗂";s:3:"圖";s:4:"圖";s:3:"圗";s:4:"圗";s:3:"噑";s:4:"噑";s:3:"噴";s:4:"噴";s:3:"壮";s:4:"壮";s:3:"城";s:4:"城";s:3:"埴";s:4:"埴";s:3:"堍";s:4:"堍";s:3:"型";s:4:"型";s:3:"堲";s:4:"堲";s:3:"報";s:4:"報";s:3:"墬";s:4:"墬";s:4:"𡓤";s:4:"𡓤";s:3:"売";s:4:"売";s:3:"壷";s:4:"壷";s:3:"夆";s:4:"夆";s:3:"多";s:4:"多";s:3:"夢";s:4:"夢";s:3:"奢";s:4:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:3:"姬";s:4:"姬";s:3:"娛";s:4:"娛";s:3:"娧";s:4:"娧";s:3:"姘";s:4:"姘";s:3:"婦";s:4:"婦";s:3:"㛮";s:4:"㛮";s:3:"㛼";s:4:"㛼";s:3:"嬈";s:4:"嬈";s:3:"嬾";s:4:"嬾";s:4:"𡧈";s:4:"𡧈";s:3:"寃";s:4:"寃";s:3:"寘";s:4:"寘";s:3:"寳";s:4:"寳";s:4:"𡬘";s:4:"𡬘";s:3:"寿";s:4:"寿";s:3:"将";s:4:"将";s:3:"当";s:4:"当";s:3:"尢";s:4:"尢";s:3:"㞁";s:4:"㞁";s:3:"屠";s:4:"屠";s:3:"峀";s:4:"峀";s:3:"岍";s:4:"岍";s:4:"𡷤";s:4:"𡷤";s:3:"嵃";s:4:"嵃";s:4:"𡷦";s:4:"𡷦";s:3:"嵮";s:4:"嵮";s:3:"嵫";s:4:"嵫";s:3:"嵼";s:4:"嵼";s:3:"巡";s:4:"巡";s:3:"巢";s:4:"巢";s:3:"㠯";s:4:"㠯";s:3:"巽";s:4:"巽";s:3:"帨";s:4:"帨";s:3:"帽";s:4:"帽";s:3:"幩";s:4:"幩";s:3:"㡢";s:4:"㡢";s:4:"𢆃";s:4:"𢆃";s:3:"㡼";s:4:"㡼";s:3:"庰";s:4:"庰";s:3:"庳";s:4:"庳";s:3:"庶";s:4:"庶";s:4:"𪎒";s:4:"𪎒";s:3:"廾";s:4:"廾";s:4:"𢌱";s:4:"𢌱";s:3:"舁";s:4:"舁";s:3:"弢";s:4:"弢";s:3:"㣇";s:4:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:3:"形";s:4:"形";s:3:"彫";s:4:"彫";s:3:"㣣";s:4:"㣣";s:3:"徚";s:4:"徚";s:3:"忍";s:4:"忍";s:3:"志";s:4:"志";s:3:"忹";s:4:"忹";s:3:"悁";s:4:"悁";s:3:"㤺";s:4:"㤺";s:3:"㤜";s:4:"㤜";s:4:"𢛔";s:4:"𢛔";s:3:"惇";s:4:"惇";s:3:"慈";s:4:"慈";s:3:"慌";s:4:"慌";s:3:"慺";s:4:"慺";s:3:"憲";s:4:"憲";s:3:"憤";s:4:"憤";s:3:"憯";s:4:"憯";s:3:"懞";s:4:"懞";s:3:"成";s:4:"成";s:3:"戛";s:4:"戛";s:3:"扝";s:4:"扝";s:3:"抱";s:4:"抱";s:3:"拔";s:4:"拔";s:3:"捐";s:4:"捐";s:4:"𢬌";s:4:"𢬌";s:3:"挽";s:4:"挽";s:3:"拼";s:4:"拼";s:3:"捨";s:4:"捨";s:3:"掃";s:4:"掃";s:3:"揤";s:4:"揤";s:4:"𢯱";s:4:"𢯱";s:3:"搢";s:4:"搢";s:3:"揅";s:4:"揅";s:3:"掩";s:4:"掩";s:3:"㨮";s:4:"㨮";s:3:"摩";s:4:"摩";s:3:"摾";s:4:"摾";s:3:"撝";s:4:"撝";s:3:"摷";s:4:"摷";s:3:"㩬";s:4:"㩬";s:3:"敬";s:4:"敬";s:4:"𣀊";s:4:"𣀊";s:3:"旣";s:4:"旣";s:3:"書";s:4:"書";s:3:"晉";s:4:"晉";s:3:"㬙";s:4:"㬙";s:3:"㬈";s:4:"㬈";s:3:"㫤";s:4:"㫤";s:3:"冒";s:4:"冒";s:3:"冕";s:4:"冕";s:3:"最";s:4:"最";s:3:"暜";s:4:"暜";s:3:"肭";s:4:"肭";s:3:"䏙";s:4:"䏙";s:3:"朡";s:4:"朡";s:3:"杞";s:4:"杞";s:3:"杓";s:4:"杓";s:4:"𣏃";s:4:"𣏃";s:3:"㭉";s:4:"㭉";s:3:"柺";s:4:"柺";s:3:"枅";s:4:"枅";s:3:"桒";s:4:"桒";s:4:"𣑭";s:4:"𣑭";s:3:"梎";s:4:"梎";s:3:"栟";s:4:"栟";s:3:"椔";s:4:"椔";s:3:"楂";s:4:"楂";s:3:"榣";s:4:"榣";s:3:"槪";s:4:"槪";s:3:"檨";s:4:"檨";s:4:"𣚣";s:4:"𣚣";s:3:"櫛";s:4:"櫛";s:3:"㰘";s:4:"㰘";s:3:"次";s:4:"次";s:4:"𣢧";s:4:"𣢧";s:3:"歔";s:4:"歔";s:3:"㱎";s:4:"㱎";s:3:"歲";s:4:"歲";s:3:"殟";s:4:"殟";s:3:"殻";s:4:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:3:"汎";s:4:"汎";s:4:"𣲼";s:4:"𣲼";s:3:"沿";s:4:"沿";s:3:"泍";s:4:"泍";s:3:"汧";s:4:"汧";s:3:"洖";s:4:"洖";s:3:"派";s:4:"派";s:3:"浩";s:4:"浩";s:3:"浸";s:4:"浸";s:3:"涅";s:4:"涅";s:4:"𣴞";s:4:"𣴞";s:3:"洴";s:4:"洴";s:3:"港";s:4:"港";s:3:"湮";s:4:"湮";s:3:"㴳";s:4:"㴳";s:3:"滇";s:4:"滇";s:4:"𣻑";s:4:"𣻑";s:3:"淹";s:4:"淹";s:3:"潮";s:4:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:3:"濆";s:4:"濆";s:3:"瀹";s:4:"瀹";s:3:"瀛";s:4:"瀛";s:3:"㶖";s:4:"㶖";s:3:"灊";s:4:"灊";s:3:"災";s:4:"災";s:3:"灷";s:4:"灷";s:3:"炭";s:4:"炭";s:4:"𠔥";s:4:"𠔥";s:3:"煅";s:4:"煅";s:4:"𤉣";s:4:"𤉣";s:3:"熜";s:4:"熜";s:4:"𤎫";s:4:"𤎫";s:3:"爨";s:4:"爨";s:3:"牐";s:4:"牐";s:4:"𤘈";s:4:"𤘈";s:3:"犀";s:4:"犀";s:3:"犕";s:4:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:3:"獺";s:4:"獺";s:3:"王";s:4:"王";s:3:"㺬";s:4:"㺬";s:3:"玥";s:4:"玥";s:3:"㺸";s:4:"㺸";s:3:"瑇";s:4:"瑇";s:3:"瑜";s:4:"瑜";s:3:"璅";s:4:"璅";s:3:"瓊";s:4:"瓊";s:3:"㼛";s:4:"㼛";s:3:"甤";s:4:"甤";s:4:"𤰶";s:4:"𤰶";s:3:"甾";s:4:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"𢆟";s:4:"𢆟";s:3:"瘐";s:4:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:3:"㿼";s:4:"㿼";s:3:"䀈";s:4:"䀈";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:3:"眞";s:4:"眞";s:3:"真";s:4:"真";s:3:"瞋";s:4:"瞋";s:3:"䁆";s:4:"䁆";s:3:"䂖";s:4:"䂖";s:4:"𥐝";s:4:"𥐝";s:3:"硎";s:4:"硎";s:3:"䃣";s:4:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:3:"秫";s:4:"秫";s:3:"䄯";s:4:"䄯";s:3:"穊";s:4:"穊";s:3:"穏";s:4:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:3:"竮";s:4:"竮";s:3:"䈂";s:4:"䈂";s:4:"𥮫";s:4:"𥮫";s:3:"篆";s:4:"篆";s:3:"築";s:4:"築";s:3:"䈧";s:4:"䈧";s:4:"𥲀";s:4:"𥲀";s:3:"糒";s:4:"糒";s:3:"䊠";s:4:"䊠";s:3:"糨";s:4:"糨";s:3:"糣";s:4:"糣";s:3:"紀";s:4:"紀";s:4:"𥾆";s:4:"𥾆";s:3:"絣";s:4:"絣";s:3:"䌁";s:4:"䌁";s:3:"緇";s:4:"緇";s:3:"縂";s:4:"縂";s:3:"繅";s:4:"繅";s:3:"䌴";s:4:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:3:"䍙";s:4:"䍙";s:4:"𦋙";s:4:"𦋙";s:3:"罺";s:4:"罺";s:4:"𦌾";s:4:"𦌾";s:3:"羕";s:4:"羕";s:3:"翺";s:4:"翺";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:3:"聠";s:4:"聠";s:4:"𦖨";s:4:"𦖨";s:3:"聰";s:4:"聰";s:4:"𣍟";s:4:"𣍟";s:3:"䏕";s:4:"䏕";s:3:"育";s:4:"育";s:3:"脃";s:4:"脃";s:3:"䐋";s:4:"䐋";s:3:"脾";s:4:"脾";s:3:"媵";s:4:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:3:"舄";s:4:"舄";s:3:"辞";s:4:"辞";s:3:"䑫";s:4:"䑫";s:3:"芑";s:4:"芑";s:3:"芋";s:4:"芋";s:3:"芝";s:4:"芝";s:3:"劳";s:4:"劳";s:3:"花";s:4:"花";s:3:"芳";s:4:"芳";s:3:"芽";s:4:"芽";s:3:"苦";s:4:"苦";s:4:"𦬼";s:4:"𦬼";s:3:"茝";s:4:"茝";s:3:"荣";s:4:"荣";s:3:"莭";s:4:"莭";s:3:"茣";s:4:"茣";s:3:"莽";s:4:"莽";s:3:"菧";s:4:"菧";s:3:"荓";s:4:"荓";s:3:"菊";s:4:"菊";s:3:"菌";s:4:"菌";s:3:"菜";s:4:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:3:"䔫";s:4:"䔫";s:3:"蓱";s:4:"蓱";s:3:"蓳";s:4:"蓳";s:3:"蔖";s:4:"蔖";s:4:"𧏊";s:4:"𧏊";s:3:"蕤";s:4:"蕤";s:4:"𦼬";s:4:"𦼬";s:3:"䕝";s:4:"䕝";s:3:"䕡";s:4:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:3:"䕫";s:4:"䕫";s:3:"虐";s:4:"虐";s:3:"虧";s:4:"虧";s:3:"虩";s:4:"虩";s:3:"蚩";s:4:"蚩";s:3:"蚈";s:4:"蚈";s:3:"蜎";s:4:"蜎";s:3:"蛢";s:4:"蛢";s:3:"蜨";s:4:"蜨";s:3:"蝫";s:4:"蝫";s:3:"螆";s:4:"螆";s:3:"䗗";s:4:"䗗";s:3:"蟡";s:4:"蟡";s:3:"蠁";s:4:"蠁";s:3:"䗹";s:4:"䗹";s:3:"衠";s:4:"衠";s:3:"衣";s:4:"衣";s:4:"𧙧";s:4:"𧙧";s:3:"裗";s:4:"裗";s:3:"裞";s:4:"裞";s:3:"䘵";s:4:"䘵";s:3:"裺";s:4:"裺";s:3:"㒻";s:4:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:3:"䚾";s:4:"䚾";s:3:"䛇";s:4:"䛇";s:3:"誠";s:4:"誠";s:3:"豕";s:4:"豕";s:4:"𧲨";s:4:"𧲨";s:3:"貫";s:4:"貫";s:3:"賁";s:4:"賁";s:3:"贛";s:4:"贛";s:3:"起";s:4:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:3:"跋";s:4:"跋";s:3:"趼";s:4:"趼";s:3:"跰";s:4:"跰";s:4:"𠣞";s:4:"𠣞";s:3:"軔";s:4:"軔";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:3:"邔";s:4:"邔";s:3:"郱";s:4:"郱";s:3:"鄑";s:4:"鄑";s:4:"𨜮";s:4:"𨜮";s:3:"鄛";s:4:"鄛";s:3:"鈸";s:4:"鈸";s:3:"鋗";s:4:"鋗";s:3:"鋘";s:4:"鋘";s:3:"鉼";s:4:"鉼";s:3:"鏹";s:4:"鏹";s:3:"鐕";s:4:"鐕";s:4:"𨯺";s:4:"𨯺";s:3:"開";s:4:"開";s:3:"䦕";s:4:"䦕";s:3:"閷";s:4:"閷";s:4:"𨵷";s:4:"𨵷";s:3:"䧦";s:4:"䧦";s:3:"雃";s:4:"雃";s:3:"嶲";s:4:"嶲";s:3:"霣";s:4:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:3:"䩮";s:4:"䩮";s:3:"䩶";s:4:"䩶";s:3:"韠";s:4:"韠";s:4:"𩐊";s:4:"𩐊";s:3:"䪲";s:4:"䪲";s:4:"𩒖";s:4:"𩒖";s:3:"頩";s:4:"頩";s:4:"𩖶";s:4:"𩖶";s:3:"飢";s:4:"飢";s:3:"䬳";s:4:"䬳";s:3:"餩";s:4:"餩";s:3:"馧";s:4:"馧";s:3:"駂";s:4:"駂";s:3:"駾";s:4:"駾";s:3:"䯎";s:4:"䯎";s:4:"𩬰";s:4:"𩬰";s:3:"鱀";s:4:"鱀";s:3:"鳽";s:4:"鳽";s:3:"䳎";s:4:"䳎";s:3:"䳭";s:4:"䳭";s:3:"鵧";s:4:"鵧";s:4:"𪃎";s:4:"𪃎";s:3:"䳸";s:4:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:3:"麻";s:4:"麻";s:3:"䵖";s:4:"䵖";s:3:"黹";s:4:"黹";s:3:"黾";s:4:"黾";s:3:"鼅";s:4:"鼅";s:3:"鼏";s:4:"鼏";s:3:"鼖";s:4:"鼖";s:3:"鼻";s:4:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
-UtfNormal::$utfCanonicalDecomp = unserialize( 'a:2049:{s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:";";s:1:";";s:2:"΅";s:4:"΅";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϓ";s:4:"ϓ";s:2:"ϔ";s:4:"ϔ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẛ";s:4:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"ι";s:2:"ι";s:3:"῁";s:4:"῁";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:"῍";s:3:"῎";s:5:"῎";s:3:"῏";s:5:"῏";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:"῝";s:3:"῞";s:5:"῞";s:3:"῟";s:5:"῟";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:4:"῭";s:3:"΅";s:4:"΅";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:2:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:3:"Ω";s:2:"Ω";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"⫝̸";s:5:"⫝̸";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"ゞ";s:6:"ゞ";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:3:"𤋮";s:4:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:4:"𑂚";s:8:"𑂚";s:4:"𑂜";s:8:"𑂜";s:4:"𑂫";s:8:"𑂫";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
-UtfNormal::$utfCheckNFC = unserialize( 'a:1221:{s:2:"̀";s:1:"N";s:2:"́";s:1:"N";s:2:"̓";s:1:"N";s:2:"̈́";s:1:"N";s:2:"ʹ";s:1:"N";s:2:";";s:1:"N";s:2:"·";s:1:"N";s:3:"क़";s:1:"N";s:3:"ख़";s:1:"N";s:3:"ग़";s:1:"N";s:3:"ज़";s:1:"N";s:3:"ड़";s:1:"N";s:3:"ढ़";s:1:"N";s:3:"फ़";s:1:"N";s:3:"य़";s:1:"N";s:3:"ড়";s:1:"N";s:3:"ঢ়";s:1:"N";s:3:"য়";s:1:"N";s:3:"ਲ਼";s:1:"N";s:3:"ਸ਼";s:1:"N";s:3:"ਖ਼";s:1:"N";s:3:"ਗ਼";s:1:"N";s:3:"ਜ਼";s:1:"N";s:3:"ਫ਼";s:1:"N";s:3:"ଡ଼";s:1:"N";s:3:"ଢ଼";s:1:"N";s:3:"གྷ";s:1:"N";s:3:"ཌྷ";s:1:"N";s:3:"དྷ";s:1:"N";s:3:"བྷ";s:1:"N";s:3:"ཛྷ";s:1:"N";s:3:"ཀྵ";s:1:"N";s:3:"ཱི";s:1:"N";s:3:"ཱུ";s:1:"N";s:3:"ྲྀ";s:1:"N";s:3:"ླྀ";s:1:"N";s:3:"ཱྀ";s:1:"N";s:3:"ྒྷ";s:1:"N";s:3:"ྜྷ";s:1:"N";s:3:"ྡྷ";s:1:"N";s:3:"ྦྷ";s:1:"N";s:3:"ྫྷ";s:1:"N";s:3:"ྐྵ";s:1:"N";s:3:"ά";s:1:"N";s:3:"έ";s:1:"N";s:3:"ή";s:1:"N";s:3:"ί";s:1:"N";s:3:"ό";s:1:"N";s:3:"ύ";s:1:"N";s:3:"ώ";s:1:"N";s:3:"Ά";s:1:"N";s:3:"ι";s:1:"N";s:3:"Έ";s:1:"N";s:3:"Ή";s:1:"N";s:3:"ΐ";s:1:"N";s:3:"Ί";s:1:"N";s:3:"ΰ";s:1:"N";s:3:"Ύ";s:1:"N";s:3:"΅";s:1:"N";s:3:"`";s:1:"N";s:3:"Ό";s:1:"N";s:3:"Ώ";s:1:"N";s:3:"´";s:1:"N";s:3:" ";s:1:"N";s:3:" ";s:1:"N";s:3:"Ω";s:1:"N";s:3:"K";s:1:"N";s:3:"Å";s:1:"N";s:3:"〈";s:1:"N";s:3:"〉";s:1:"N";s:3:"⫝̸";s:1:"N";s:3:"豈";s:1:"N";s:3:"更";s:1:"N";s:3:"車";s:1:"N";s:3:"賈";s:1:"N";s:3:"滑";s:1:"N";s:3:"串";s:1:"N";s:3:"句";s:1:"N";s:3:"龜";s:1:"N";s:3:"龜";s:1:"N";s:3:"契";s:1:"N";s:3:"金";s:1:"N";s:3:"喇";s:1:"N";s:3:"奈";s:1:"N";s:3:"懶";s:1:"N";s:3:"癩";s:1:"N";s:3:"羅";s:1:"N";s:3:"蘿";s:1:"N";s:3:"螺";s:1:"N";s:3:"裸";s:1:"N";s:3:"邏";s:1:"N";s:3:"樂";s:1:"N";s:3:"洛";s:1:"N";s:3:"烙";s:1:"N";s:3:"珞";s:1:"N";s:3:"落";s:1:"N";s:3:"酪";s:1:"N";s:3:"駱";s:1:"N";s:3:"亂";s:1:"N";s:3:"卵";s:1:"N";s:3:"欄";s:1:"N";s:3:"爛";s:1:"N";s:3:"蘭";s:1:"N";s:3:"鸞";s:1:"N";s:3:"嵐";s:1:"N";s:3:"濫";s:1:"N";s:3:"藍";s:1:"N";s:3:"襤";s:1:"N";s:3:"拉";s:1:"N";s:3:"臘";s:1:"N";s:3:"蠟";s:1:"N";s:3:"廊";s:1:"N";s:3:"朗";s:1:"N";s:3:"浪";s:1:"N";s:3:"狼";s:1:"N";s:3:"郎";s:1:"N";s:3:"來";s:1:"N";s:3:"冷";s:1:"N";s:3:"勞";s:1:"N";s:3:"擄";s:1:"N";s:3:"櫓";s:1:"N";s:3:"爐";s:1:"N";s:3:"盧";s:1:"N";s:3:"老";s:1:"N";s:3:"蘆";s:1:"N";s:3:"虜";s:1:"N";s:3:"路";s:1:"N";s:3:"露";s:1:"N";s:3:"魯";s:1:"N";s:3:"鷺";s:1:"N";s:3:"碌";s:1:"N";s:3:"祿";s:1:"N";s:3:"綠";s:1:"N";s:3:"菉";s:1:"N";s:3:"錄";s:1:"N";s:3:"鹿";s:1:"N";s:3:"論";s:1:"N";s:3:"壟";s:1:"N";s:3:"弄";s:1:"N";s:3:"籠";s:1:"N";s:3:"聾";s:1:"N";s:3:"牢";s:1:"N";s:3:"磊";s:1:"N";s:3:"賂";s:1:"N";s:3:"雷";s:1:"N";s:3:"壘";s:1:"N";s:3:"屢";s:1:"N";s:3:"樓";s:1:"N";s:3:"淚";s:1:"N";s:3:"漏";s:1:"N";s:3:"累";s:1:"N";s:3:"縷";s:1:"N";s:3:"陋";s:1:"N";s:3:"勒";s:1:"N";s:3:"肋";s:1:"N";s:3:"凜";s:1:"N";s:3:"凌";s:1:"N";s:3:"稜";s:1:"N";s:3:"綾";s:1:"N";s:3:"菱";s:1:"N";s:3:"陵";s:1:"N";s:3:"讀";s:1:"N";s:3:"拏";s:1:"N";s:3:"樂";s:1:"N";s:3:"諾";s:1:"N";s:3:"丹";s:1:"N";s:3:"寧";s:1:"N";s:3:"怒";s:1:"N";s:3:"率";s:1:"N";s:3:"異";s:1:"N";s:3:"北";s:1:"N";s:3:"磻";s:1:"N";s:3:"便";s:1:"N";s:3:"復";s:1:"N";s:3:"不";s:1:"N";s:3:"泌";s:1:"N";s:3:"數";s:1:"N";s:3:"索";s:1:"N";s:3:"參";s:1:"N";s:3:"塞";s:1:"N";s:3:"省";s:1:"N";s:3:"葉";s:1:"N";s:3:"說";s:1:"N";s:3:"殺";s:1:"N";s:3:"辰";s:1:"N";s:3:"沈";s:1:"N";s:3:"拾";s:1:"N";s:3:"若";s:1:"N";s:3:"掠";s:1:"N";s:3:"略";s:1:"N";s:3:"亮";s:1:"N";s:3:"兩";s:1:"N";s:3:"凉";s:1:"N";s:3:"梁";s:1:"N";s:3:"糧";s:1:"N";s:3:"良";s:1:"N";s:3:"諒";s:1:"N";s:3:"量";s:1:"N";s:3:"勵";s:1:"N";s:3:"呂";s:1:"N";s:3:"女";s:1:"N";s:3:"廬";s:1:"N";s:3:"旅";s:1:"N";s:3:"濾";s:1:"N";s:3:"礪";s:1:"N";s:3:"閭";s:1:"N";s:3:"驪";s:1:"N";s:3:"麗";s:1:"N";s:3:"黎";s:1:"N";s:3:"力";s:1:"N";s:3:"曆";s:1:"N";s:3:"歷";s:1:"N";s:3:"轢";s:1:"N";s:3:"年";s:1:"N";s:3:"憐";s:1:"N";s:3:"戀";s:1:"N";s:3:"撚";s:1:"N";s:3:"漣";s:1:"N";s:3:"煉";s:1:"N";s:3:"璉";s:1:"N";s:3:"秊";s:1:"N";s:3:"練";s:1:"N";s:3:"聯";s:1:"N";s:3:"輦";s:1:"N";s:3:"蓮";s:1:"N";s:3:"連";s:1:"N";s:3:"鍊";s:1:"N";s:3:"列";s:1:"N";s:3:"劣";s:1:"N";s:3:"咽";s:1:"N";s:3:"烈";s:1:"N";s:3:"裂";s:1:"N";s:3:"說";s:1:"N";s:3:"廉";s:1:"N";s:3:"念";s:1:"N";s:3:"捻";s:1:"N";s:3:"殮";s:1:"N";s:3:"簾";s:1:"N";s:3:"獵";s:1:"N";s:3:"令";s:1:"N";s:3:"囹";s:1:"N";s:3:"寧";s:1:"N";s:3:"嶺";s:1:"N";s:3:"怜";s:1:"N";s:3:"玲";s:1:"N";s:3:"瑩";s:1:"N";s:3:"羚";s:1:"N";s:3:"聆";s:1:"N";s:3:"鈴";s:1:"N";s:3:"零";s:1:"N";s:3:"靈";s:1:"N";s:3:"領";s:1:"N";s:3:"例";s:1:"N";s:3:"禮";s:1:"N";s:3:"醴";s:1:"N";s:3:"隸";s:1:"N";s:3:"惡";s:1:"N";s:3:"了";s:1:"N";s:3:"僚";s:1:"N";s:3:"寮";s:1:"N";s:3:"尿";s:1:"N";s:3:"料";s:1:"N";s:3:"樂";s:1:"N";s:3:"燎";s:1:"N";s:3:"療";s:1:"N";s:3:"蓼";s:1:"N";s:3:"遼";s:1:"N";s:3:"龍";s:1:"N";s:3:"暈";s:1:"N";s:3:"阮";s:1:"N";s:3:"劉";s:1:"N";s:3:"杻";s:1:"N";s:3:"柳";s:1:"N";s:3:"流";s:1:"N";s:3:"溜";s:1:"N";s:3:"琉";s:1:"N";s:3:"留";s:1:"N";s:3:"硫";s:1:"N";s:3:"紐";s:1:"N";s:3:"類";s:1:"N";s:3:"六";s:1:"N";s:3:"戮";s:1:"N";s:3:"陸";s:1:"N";s:3:"倫";s:1:"N";s:3:"崙";s:1:"N";s:3:"淪";s:1:"N";s:3:"輪";s:1:"N";s:3:"律";s:1:"N";s:3:"慄";s:1:"N";s:3:"栗";s:1:"N";s:3:"率";s:1:"N";s:3:"隆";s:1:"N";s:3:"利";s:1:"N";s:3:"吏";s:1:"N";s:3:"履";s:1:"N";s:3:"易";s:1:"N";s:3:"李";s:1:"N";s:3:"梨";s:1:"N";s:3:"泥";s:1:"N";s:3:"理";s:1:"N";s:3:"痢";s:1:"N";s:3:"罹";s:1:"N";s:3:"裏";s:1:"N";s:3:"裡";s:1:"N";s:3:"里";s:1:"N";s:3:"離";s:1:"N";s:3:"匿";s:1:"N";s:3:"溺";s:1:"N";s:3:"吝";s:1:"N";s:3:"燐";s:1:"N";s:3:"璘";s:1:"N";s:3:"藺";s:1:"N";s:3:"隣";s:1:"N";s:3:"鱗";s:1:"N";s:3:"麟";s:1:"N";s:3:"林";s:1:"N";s:3:"淋";s:1:"N";s:3:"臨";s:1:"N";s:3:"立";s:1:"N";s:3:"笠";s:1:"N";s:3:"粒";s:1:"N";s:3:"狀";s:1:"N";s:3:"炙";s:1:"N";s:3:"識";s:1:"N";s:3:"什";s:1:"N";s:3:"茶";s:1:"N";s:3:"刺";s:1:"N";s:3:"切";s:1:"N";s:3:"度";s:1:"N";s:3:"拓";s:1:"N";s:3:"糖";s:1:"N";s:3:"宅";s:1:"N";s:3:"洞";s:1:"N";s:3:"暴";s:1:"N";s:3:"輻";s:1:"N";s:3:"行";s:1:"N";s:3:"降";s:1:"N";s:3:"見";s:1:"N";s:3:"廓";s:1:"N";s:3:"兀";s:1:"N";s:3:"嗀";s:1:"N";s:3:"塚";s:1:"N";s:3:"晴";s:1:"N";s:3:"凞";s:1:"N";s:3:"猪";s:1:"N";s:3:"益";s:1:"N";s:3:"礼";s:1:"N";s:3:"神";s:1:"N";s:3:"祥";s:1:"N";s:3:"福";s:1:"N";s:3:"靖";s:1:"N";s:3:"精";s:1:"N";s:3:"羽";s:1:"N";s:3:"蘒";s:1:"N";s:3:"諸";s:1:"N";s:3:"逸";s:1:"N";s:3:"都";s:1:"N";s:3:"飯";s:1:"N";s:3:"飼";s:1:"N";s:3:"館";s:1:"N";s:3:"鶴";s:1:"N";s:3:"侮";s:1:"N";s:3:"僧";s:1:"N";s:3:"免";s:1:"N";s:3:"勉";s:1:"N";s:3:"勤";s:1:"N";s:3:"卑";s:1:"N";s:3:"喝";s:1:"N";s:3:"嘆";s:1:"N";s:3:"器";s:1:"N";s:3:"塀";s:1:"N";s:3:"墨";s:1:"N";s:3:"層";s:1:"N";s:3:"屮";s:1:"N";s:3:"悔";s:1:"N";s:3:"慨";s:1:"N";s:3:"憎";s:1:"N";s:3:"懲";s:1:"N";s:3:"敏";s:1:"N";s:3:"既";s:1:"N";s:3:"暑";s:1:"N";s:3:"梅";s:1:"N";s:3:"海";s:1:"N";s:3:"渚";s:1:"N";s:3:"漢";s:1:"N";s:3:"煮";s:1:"N";s:3:"爫";s:1:"N";s:3:"琢";s:1:"N";s:3:"碑";s:1:"N";s:3:"社";s:1:"N";s:3:"祉";s:1:"N";s:3:"祈";s:1:"N";s:3:"祐";s:1:"N";s:3:"祖";s:1:"N";s:3:"祝";s:1:"N";s:3:"禍";s:1:"N";s:3:"禎";s:1:"N";s:3:"穀";s:1:"N";s:3:"突";s:1:"N";s:3:"節";s:1:"N";s:3:"練";s:1:"N";s:3:"縉";s:1:"N";s:3:"繁";s:1:"N";s:3:"署";s:1:"N";s:3:"者";s:1:"N";s:3:"臭";s:1:"N";s:3:"艹";s:1:"N";s:3:"艹";s:1:"N";s:3:"著";s:1:"N";s:3:"褐";s:1:"N";s:3:"視";s:1:"N";s:3:"謁";s:1:"N";s:3:"謹";s:1:"N";s:3:"賓";s:1:"N";s:3:"贈";s:1:"N";s:3:"辶";s:1:"N";s:3:"逸";s:1:"N";s:3:"難";s:1:"N";s:3:"響";s:1:"N";s:3:"頻";s:1:"N";s:3:"恵";s:1:"N";s:3:"𤋮";s:1:"N";s:3:"舘";s:1:"N";s:3:"並";s:1:"N";s:3:"况";s:1:"N";s:3:"全";s:1:"N";s:3:"侀";s:1:"N";s:3:"充";s:1:"N";s:3:"冀";s:1:"N";s:3:"勇";s:1:"N";s:3:"勺";s:1:"N";s:3:"喝";s:1:"N";s:3:"啕";s:1:"N";s:3:"喙";s:1:"N";s:3:"嗢";s:1:"N";s:3:"塚";s:1:"N";s:3:"墳";s:1:"N";s:3:"奄";s:1:"N";s:3:"奔";s:1:"N";s:3:"婢";s:1:"N";s:3:"嬨";s:1:"N";s:3:"廒";s:1:"N";s:3:"廙";s:1:"N";s:3:"彩";s:1:"N";s:3:"徭";s:1:"N";s:3:"惘";s:1:"N";s:3:"慎";s:1:"N";s:3:"愈";s:1:"N";s:3:"憎";s:1:"N";s:3:"慠";s:1:"N";s:3:"懲";s:1:"N";s:3:"戴";s:1:"N";s:3:"揄";s:1:"N";s:3:"搜";s:1:"N";s:3:"摒";s:1:"N";s:3:"敖";s:1:"N";s:3:"晴";s:1:"N";s:3:"朗";s:1:"N";s:3:"望";s:1:"N";s:3:"杖";s:1:"N";s:3:"歹";s:1:"N";s:3:"殺";s:1:"N";s:3:"流";s:1:"N";s:3:"滛";s:1:"N";s:3:"滋";s:1:"N";s:3:"漢";s:1:"N";s:3:"瀞";s:1:"N";s:3:"煮";s:1:"N";s:3:"瞧";s:1:"N";s:3:"爵";s:1:"N";s:3:"犯";s:1:"N";s:3:"猪";s:1:"N";s:3:"瑱";s:1:"N";s:3:"甆";s:1:"N";s:3:"画";s:1:"N";s:3:"瘝";s:1:"N";s:3:"瘟";s:1:"N";s:3:"益";s:1:"N";s:3:"盛";s:1:"N";s:3:"直";s:1:"N";s:3:"睊";s:1:"N";s:3:"着";s:1:"N";s:3:"磌";s:1:"N";s:3:"窱";s:1:"N";s:3:"節";s:1:"N";s:3:"类";s:1:"N";s:3:"絛";s:1:"N";s:3:"練";s:1:"N";s:3:"缾";s:1:"N";s:3:"者";s:1:"N";s:3:"荒";s:1:"N";s:3:"華";s:1:"N";s:3:"蝹";s:1:"N";s:3:"襁";s:1:"N";s:3:"覆";s:1:"N";s:3:"視";s:1:"N";s:3:"調";s:1:"N";s:3:"諸";s:1:"N";s:3:"請";s:1:"N";s:3:"謁";s:1:"N";s:3:"諾";s:1:"N";s:3:"諭";s:1:"N";s:3:"謹";s:1:"N";s:3:"變";s:1:"N";s:3:"贈";s:1:"N";s:3:"輸";s:1:"N";s:3:"遲";s:1:"N";s:3:"醙";s:1:"N";s:3:"鉶";s:1:"N";s:3:"陼";s:1:"N";s:3:"難";s:1:"N";s:3:"靖";s:1:"N";s:3:"韛";s:1:"N";s:3:"響";s:1:"N";s:3:"頋";s:1:"N";s:3:"頻";s:1:"N";s:3:"鬒";s:1:"N";s:3:"龜";s:1:"N";s:3:"𢡊";s:1:"N";s:3:"𢡄";s:1:"N";s:3:"𣏕";s:1:"N";s:3:"㮝";s:1:"N";s:3:"䀘";s:1:"N";s:3:"䀹";s:1:"N";s:3:"𥉉";s:1:"N";s:3:"𥳐";s:1:"N";s:3:"𧻓";s:1:"N";s:3:"齃";s:1:"N";s:3:"龎";s:1:"N";s:3:"יִ";s:1:"N";s:3:"ײַ";s:1:"N";s:3:"שׁ";s:1:"N";s:3:"שׂ";s:1:"N";s:3:"שּׁ";s:1:"N";s:3:"שּׂ";s:1:"N";s:3:"אַ";s:1:"N";s:3:"אָ";s:1:"N";s:3:"אּ";s:1:"N";s:3:"בּ";s:1:"N";s:3:"גּ";s:1:"N";s:3:"דּ";s:1:"N";s:3:"הּ";s:1:"N";s:3:"וּ";s:1:"N";s:3:"זּ";s:1:"N";s:3:"טּ";s:1:"N";s:3:"יּ";s:1:"N";s:3:"ךּ";s:1:"N";s:3:"כּ";s:1:"N";s:3:"לּ";s:1:"N";s:3:"מּ";s:1:"N";s:3:"נּ";s:1:"N";s:3:"סּ";s:1:"N";s:3:"ףּ";s:1:"N";s:3:"פּ";s:1:"N";s:3:"צּ";s:1:"N";s:3:"קּ";s:1:"N";s:3:"רּ";s:1:"N";s:3:"שּ";s:1:"N";s:3:"תּ";s:1:"N";s:3:"וֹ";s:1:"N";s:3:"בֿ";s:1:"N";s:3:"כֿ";s:1:"N";s:3:"פֿ";s:1:"N";s:4:"𝅗𝅥";s:1:"N";s:4:"𝅘𝅥";s:1:"N";s:4:"𝅘𝅥𝅮";s:1:"N";s:4:"𝅘𝅥𝅯";s:1:"N";s:4:"𝅘𝅥𝅰";s:1:"N";s:4:"𝅘𝅥𝅱";s:1:"N";s:4:"𝅘𝅥𝅲";s:1:"N";s:4:"𝆹𝅥";s:1:"N";s:4:"𝆺𝅥";s:1:"N";s:4:"𝆹𝅥𝅮";s:1:"N";s:4:"𝆺𝅥𝅮";s:1:"N";s:4:"𝆹𝅥𝅯";s:1:"N";s:4:"𝆺𝅥𝅯";s:1:"N";s:4:"丽";s:1:"N";s:4:"丸";s:1:"N";s:4:"乁";s:1:"N";s:4:"𠄢";s:1:"N";s:4:"你";s:1:"N";s:4:"侮";s:1:"N";s:4:"侻";s:1:"N";s:4:"倂";s:1:"N";s:4:"偺";s:1:"N";s:4:"備";s:1:"N";s:4:"僧";s:1:"N";s:4:"像";s:1:"N";s:4:"㒞";s:1:"N";s:4:"𠘺";s:1:"N";s:4:"免";s:1:"N";s:4:"兔";s:1:"N";s:4:"兤";s:1:"N";s:4:"具";s:1:"N";s:4:"𠔜";s:1:"N";s:4:"㒹";s:1:"N";s:4:"內";s:1:"N";s:4:"再";s:1:"N";s:4:"𠕋";s:1:"N";s:4:"冗";s:1:"N";s:4:"冤";s:1:"N";s:4:"仌";s:1:"N";s:4:"冬";s:1:"N";s:4:"况";s:1:"N";s:4:"𩇟";s:1:"N";s:4:"凵";s:1:"N";s:4:"刃";s:1:"N";s:4:"㓟";s:1:"N";s:4:"刻";s:1:"N";s:4:"剆";s:1:"N";s:4:"割";s:1:"N";s:4:"剷";s:1:"N";s:4:"㔕";s:1:"N";s:4:"勇";s:1:"N";s:4:"勉";s:1:"N";s:4:"勤";s:1:"N";s:4:"勺";s:1:"N";s:4:"包";s:1:"N";s:4:"匆";s:1:"N";s:4:"北";s:1:"N";s:4:"卉";s:1:"N";s:4:"卑";s:1:"N";s:4:"博";s:1:"N";s:4:"即";s:1:"N";s:4:"卽";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"𠨬";s:1:"N";s:4:"灰";s:1:"N";s:4:"及";s:1:"N";s:4:"叟";s:1:"N";s:4:"𠭣";s:1:"N";s:4:"叫";s:1:"N";s:4:"叱";s:1:"N";s:4:"吆";s:1:"N";s:4:"咞";s:1:"N";s:4:"吸";s:1:"N";s:4:"呈";s:1:"N";s:4:"周";s:1:"N";s:4:"咢";s:1:"N";s:4:"哶";s:1:"N";s:4:"唐";s:1:"N";s:4:"啓";s:1:"N";s:4:"啣";s:1:"N";s:4:"善";s:1:"N";s:4:"善";s:1:"N";s:4:"喙";s:1:"N";s:4:"喫";s:1:"N";s:4:"喳";s:1:"N";s:4:"嗂";s:1:"N";s:4:"圖";s:1:"N";s:4:"嘆";s:1:"N";s:4:"圗";s:1:"N";s:4:"噑";s:1:"N";s:4:"噴";s:1:"N";s:4:"切";s:1:"N";s:4:"壮";s:1:"N";s:4:"城";s:1:"N";s:4:"埴";s:1:"N";s:4:"堍";s:1:"N";s:4:"型";s:1:"N";s:4:"堲";s:1:"N";s:4:"報";s:1:"N";s:4:"墬";s:1:"N";s:4:"𡓤";s:1:"N";s:4:"売";s:1:"N";s:4:"壷";s:1:"N";s:4:"夆";s:1:"N";s:4:"多";s:1:"N";s:4:"夢";s:1:"N";s:4:"奢";s:1:"N";s:4:"𡚨";s:1:"N";s:4:"𡛪";s:1:"N";s:4:"姬";s:1:"N";s:4:"娛";s:1:"N";s:4:"娧";s:1:"N";s:4:"姘";s:1:"N";s:4:"婦";s:1:"N";s:4:"㛮";s:1:"N";s:4:"㛼";s:1:"N";s:4:"嬈";s:1:"N";s:4:"嬾";s:1:"N";s:4:"嬾";s:1:"N";s:4:"𡧈";s:1:"N";s:4:"寃";s:1:"N";s:4:"寘";s:1:"N";s:4:"寧";s:1:"N";s:4:"寳";s:1:"N";s:4:"𡬘";s:1:"N";s:4:"寿";s:1:"N";s:4:"将";s:1:"N";s:4:"当";s:1:"N";s:4:"尢";s:1:"N";s:4:"㞁";s:1:"N";s:4:"屠";s:1:"N";s:4:"屮";s:1:"N";s:4:"峀";s:1:"N";s:4:"岍";s:1:"N";s:4:"𡷤";s:1:"N";s:4:"嵃";s:1:"N";s:4:"𡷦";s:1:"N";s:4:"嵮";s:1:"N";s:4:"嵫";s:1:"N";s:4:"嵼";s:1:"N";s:4:"巡";s:1:"N";s:4:"巢";s:1:"N";s:4:"㠯";s:1:"N";s:4:"巽";s:1:"N";s:4:"帨";s:1:"N";s:4:"帽";s:1:"N";s:4:"幩";s:1:"N";s:4:"㡢";s:1:"N";s:4:"𢆃";s:1:"N";s:4:"㡼";s:1:"N";s:4:"庰";s:1:"N";s:4:"庳";s:1:"N";s:4:"庶";s:1:"N";s:4:"廊";s:1:"N";s:4:"𪎒";s:1:"N";s:4:"廾";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"舁";s:1:"N";s:4:"弢";s:1:"N";s:4:"弢";s:1:"N";s:4:"㣇";s:1:"N";s:4:"𣊸";s:1:"N";s:4:"𦇚";s:1:"N";s:4:"形";s:1:"N";s:4:"彫";s:1:"N";s:4:"㣣";s:1:"N";s:4:"徚";s:1:"N";s:4:"忍";s:1:"N";s:4:"志";s:1:"N";s:4:"忹";s:1:"N";s:4:"悁";s:1:"N";s:4:"㤺";s:1:"N";s:4:"㤜";s:1:"N";s:4:"悔";s:1:"N";s:4:"𢛔";s:1:"N";s:4:"惇";s:1:"N";s:4:"慈";s:1:"N";s:4:"慌";s:1:"N";s:4:"慎";s:1:"N";s:4:"慌";s:1:"N";s:4:"慺";s:1:"N";s:4:"憎";s:1:"N";s:4:"憲";s:1:"N";s:4:"憤";s:1:"N";s:4:"憯";s:1:"N";s:4:"懞";s:1:"N";s:4:"懲";s:1:"N";s:4:"懶";s:1:"N";s:4:"成";s:1:"N";s:4:"戛";s:1:"N";s:4:"扝";s:1:"N";s:4:"抱";s:1:"N";s:4:"拔";s:1:"N";s:4:"捐";s:1:"N";s:4:"𢬌";s:1:"N";s:4:"挽";s:1:"N";s:4:"拼";s:1:"N";s:4:"捨";s:1:"N";s:4:"掃";s:1:"N";s:4:"揤";s:1:"N";s:4:"𢯱";s:1:"N";s:4:"搢";s:1:"N";s:4:"揅";s:1:"N";s:4:"掩";s:1:"N";s:4:"㨮";s:1:"N";s:4:"摩";s:1:"N";s:4:"摾";s:1:"N";s:4:"撝";s:1:"N";s:4:"摷";s:1:"N";s:4:"㩬";s:1:"N";s:4:"敏";s:1:"N";s:4:"敬";s:1:"N";s:4:"𣀊";s:1:"N";s:4:"旣";s:1:"N";s:4:"書";s:1:"N";s:4:"晉";s:1:"N";s:4:"㬙";s:1:"N";s:4:"暑";s:1:"N";s:4:"㬈";s:1:"N";s:4:"㫤";s:1:"N";s:4:"冒";s:1:"N";s:4:"冕";s:1:"N";s:4:"最";s:1:"N";s:4:"暜";s:1:"N";s:4:"肭";s:1:"N";s:4:"䏙";s:1:"N";s:4:"朗";s:1:"N";s:4:"望";s:1:"N";s:4:"朡";s:1:"N";s:4:"杞";s:1:"N";s:4:"杓";s:1:"N";s:4:"𣏃";s:1:"N";s:4:"㭉";s:1:"N";s:4:"柺";s:1:"N";s:4:"枅";s:1:"N";s:4:"桒";s:1:"N";s:4:"梅";s:1:"N";s:4:"𣑭";s:1:"N";s:4:"梎";s:1:"N";s:4:"栟";s:1:"N";s:4:"椔";s:1:"N";s:4:"㮝";s:1:"N";s:4:"楂";s:1:"N";s:4:"榣";s:1:"N";s:4:"槪";s:1:"N";s:4:"檨";s:1:"N";s:4:"𣚣";s:1:"N";s:4:"櫛";s:1:"N";s:4:"㰘";s:1:"N";s:4:"次";s:1:"N";s:4:"𣢧";s:1:"N";s:4:"歔";s:1:"N";s:4:"㱎";s:1:"N";s:4:"歲";s:1:"N";s:4:"殟";s:1:"N";s:4:"殺";s:1:"N";s:4:"殻";s:1:"N";s:4:"𣪍";s:1:"N";s:4:"𡴋";s:1:"N";s:4:"𣫺";s:1:"N";s:4:"汎";s:1:"N";s:4:"𣲼";s:1:"N";s:4:"沿";s:1:"N";s:4:"泍";s:1:"N";s:4:"汧";s:1:"N";s:4:"洖";s:1:"N";s:4:"派";s:1:"N";s:4:"海";s:1:"N";s:4:"流";s:1:"N";s:4:"浩";s:1:"N";s:4:"浸";s:1:"N";s:4:"涅";s:1:"N";s:4:"𣴞";s:1:"N";s:4:"洴";s:1:"N";s:4:"港";s:1:"N";s:4:"湮";s:1:"N";s:4:"㴳";s:1:"N";s:4:"滋";s:1:"N";s:4:"滇";s:1:"N";s:4:"𣻑";s:1:"N";s:4:"淹";s:1:"N";s:4:"潮";s:1:"N";s:4:"𣽞";s:1:"N";s:4:"𣾎";s:1:"N";s:4:"濆";s:1:"N";s:4:"瀹";s:1:"N";s:4:"瀞";s:1:"N";s:4:"瀛";s:1:"N";s:4:"㶖";s:1:"N";s:4:"灊";s:1:"N";s:4:"災";s:1:"N";s:4:"灷";s:1:"N";s:4:"炭";s:1:"N";s:4:"𠔥";s:1:"N";s:4:"煅";s:1:"N";s:4:"𤉣";s:1:"N";s:4:"熜";s:1:"N";s:4:"𤎫";s:1:"N";s:4:"爨";s:1:"N";s:4:"爵";s:1:"N";s:4:"牐";s:1:"N";s:4:"𤘈";s:1:"N";s:4:"犀";s:1:"N";s:4:"犕";s:1:"N";s:4:"𤜵";s:1:"N";s:4:"𤠔";s:1:"N";s:4:"獺";s:1:"N";s:4:"王";s:1:"N";s:4:"㺬";s:1:"N";s:4:"玥";s:1:"N";s:4:"㺸";s:1:"N";s:4:"㺸";s:1:"N";s:4:"瑇";s:1:"N";s:4:"瑜";s:1:"N";s:4:"瑱";s:1:"N";s:4:"璅";s:1:"N";s:4:"瓊";s:1:"N";s:4:"㼛";s:1:"N";s:4:"甤";s:1:"N";s:4:"𤰶";s:1:"N";s:4:"甾";s:1:"N";s:4:"𤲒";s:1:"N";s:4:"異";s:1:"N";s:4:"𢆟";s:1:"N";s:4:"瘐";s:1:"N";s:4:"𤾡";s:1:"N";s:4:"𤾸";s:1:"N";s:4:"𥁄";s:1:"N";s:4:"㿼";s:1:"N";s:4:"䀈";s:1:"N";s:4:"直";s:1:"N";s:4:"𥃳";s:1:"N";s:4:"𥃲";s:1:"N";s:4:"𥄙";s:1:"N";s:4:"𥄳";s:1:"N";s:4:"眞";s:1:"N";s:4:"真";s:1:"N";s:4:"真";s:1:"N";s:4:"睊";s:1:"N";s:4:"䀹";s:1:"N";s:4:"瞋";s:1:"N";s:4:"䁆";s:1:"N";s:4:"䂖";s:1:"N";s:4:"𥐝";s:1:"N";s:4:"硎";s:1:"N";s:4:"碌";s:1:"N";s:4:"磌";s:1:"N";s:4:"䃣";s:1:"N";s:4:"𥘦";s:1:"N";s:4:"祖";s:1:"N";s:4:"𥚚";s:1:"N";s:4:"𥛅";s:1:"N";s:4:"福";s:1:"N";s:4:"秫";s:1:"N";s:4:"䄯";s:1:"N";s:4:"穀";s:1:"N";s:4:"穊";s:1:"N";s:4:"穏";s:1:"N";s:4:"𥥼";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"竮";s:1:"N";s:4:"䈂";s:1:"N";s:4:"𥮫";s:1:"N";s:4:"篆";s:1:"N";s:4:"築";s:1:"N";s:4:"䈧";s:1:"N";s:4:"𥲀";s:1:"N";s:4:"糒";s:1:"N";s:4:"䊠";s:1:"N";s:4:"糨";s:1:"N";s:4:"糣";s:1:"N";s:4:"紀";s:1:"N";s:4:"𥾆";s:1:"N";s:4:"絣";s:1:"N";s:4:"䌁";s:1:"N";s:4:"緇";s:1:"N";s:4:"縂";s:1:"N";s:4:"繅";s:1:"N";s:4:"䌴";s:1:"N";s:4:"𦈨";s:1:"N";s:4:"𦉇";s:1:"N";s:4:"䍙";s:1:"N";s:4:"𦋙";s:1:"N";s:4:"罺";s:1:"N";s:4:"𦌾";s:1:"N";s:4:"羕";s:1:"N";s:4:"翺";s:1:"N";s:4:"者";s:1:"N";s:4:"𦓚";s:1:"N";s:4:"𦔣";s:1:"N";s:4:"聠";s:1:"N";s:4:"𦖨";s:1:"N";s:4:"聰";s:1:"N";s:4:"𣍟";s:1:"N";s:4:"䏕";s:1:"N";s:4:"育";s:1:"N";s:4:"脃";s:1:"N";s:4:"䐋";s:1:"N";s:4:"脾";s:1:"N";s:4:"媵";s:1:"N";s:4:"𦞧";s:1:"N";s:4:"𦞵";s:1:"N";s:4:"𣎓";s:1:"N";s:4:"𣎜";s:1:"N";s:4:"舁";s:1:"N";s:4:"舄";s:1:"N";s:4:"辞";s:1:"N";s:4:"䑫";s:1:"N";s:4:"芑";s:1:"N";s:4:"芋";s:1:"N";s:4:"芝";s:1:"N";s:4:"劳";s:1:"N";s:4:"花";s:1:"N";s:4:"芳";s:1:"N";s:4:"芽";s:1:"N";s:4:"苦";s:1:"N";s:4:"𦬼";s:1:"N";s:4:"若";s:1:"N";s:4:"茝";s:1:"N";s:4:"荣";s:1:"N";s:4:"莭";s:1:"N";s:4:"茣";s:1:"N";s:4:"莽";s:1:"N";s:4:"菧";s:1:"N";s:4:"著";s:1:"N";s:4:"荓";s:1:"N";s:4:"菊";s:1:"N";s:4:"菌";s:1:"N";s:4:"菜";s:1:"N";s:4:"𦰶";s:1:"N";s:4:"𦵫";s:1:"N";s:4:"𦳕";s:1:"N";s:4:"䔫";s:1:"N";s:4:"蓱";s:1:"N";s:4:"蓳";s:1:"N";s:4:"蔖";s:1:"N";s:4:"𧏊";s:1:"N";s:4:"蕤";s:1:"N";s:4:"𦼬";s:1:"N";s:4:"䕝";s:1:"N";s:4:"䕡";s:1:"N";s:4:"𦾱";s:1:"N";s:4:"𧃒";s:1:"N";s:4:"䕫";s:1:"N";s:4:"虐";s:1:"N";s:4:"虜";s:1:"N";s:4:"虧";s:1:"N";s:4:"虩";s:1:"N";s:4:"蚩";s:1:"N";s:4:"蚈";s:1:"N";s:4:"蜎";s:1:"N";s:4:"蛢";s:1:"N";s:4:"蝹";s:1:"N";s:4:"蜨";s:1:"N";s:4:"蝫";s:1:"N";s:4:"螆";s:1:"N";s:4:"䗗";s:1:"N";s:4:"蟡";s:1:"N";s:4:"蠁";s:1:"N";s:4:"䗹";s:1:"N";s:4:"衠";s:1:"N";s:4:"衣";s:1:"N";s:4:"𧙧";s:1:"N";s:4:"裗";s:1:"N";s:4:"裞";s:1:"N";s:4:"䘵";s:1:"N";s:4:"裺";s:1:"N";s:4:"㒻";s:1:"N";s:4:"𧢮";s:1:"N";s:4:"𧥦";s:1:"N";s:4:"䚾";s:1:"N";s:4:"䛇";s:1:"N";s:4:"誠";s:1:"N";s:4:"諭";s:1:"N";s:4:"變";s:1:"N";s:4:"豕";s:1:"N";s:4:"𧲨";s:1:"N";s:4:"貫";s:1:"N";s:4:"賁";s:1:"N";s:4:"贛";s:1:"N";s:4:"起";s:1:"N";s:4:"𧼯";s:1:"N";s:4:"𠠄";s:1:"N";s:4:"跋";s:1:"N";s:4:"趼";s:1:"N";s:4:"跰";s:1:"N";s:4:"𠣞";s:1:"N";s:4:"軔";s:1:"N";s:4:"輸";s:1:"N";s:4:"𨗒";s:1:"N";s:4:"𨗭";s:1:"N";s:4:"邔";s:1:"N";s:4:"郱";s:1:"N";s:4:"鄑";s:1:"N";s:4:"𨜮";s:1:"N";s:4:"鄛";s:1:"N";s:4:"鈸";s:1:"N";s:4:"鋗";s:1:"N";s:4:"鋘";s:1:"N";s:4:"鉼";s:1:"N";s:4:"鏹";s:1:"N";s:4:"鐕";s:1:"N";s:4:"𨯺";s:1:"N";s:4:"開";s:1:"N";s:4:"䦕";s:1:"N";s:4:"閷";s:1:"N";s:4:"𨵷";s:1:"N";s:4:"䧦";s:1:"N";s:4:"雃";s:1:"N";s:4:"嶲";s:1:"N";s:4:"霣";s:1:"N";s:4:"𩅅";s:1:"N";s:4:"𩈚";s:1:"N";s:4:"䩮";s:1:"N";s:4:"䩶";s:1:"N";s:4:"韠";s:1:"N";s:4:"𩐊";s:1:"N";s:4:"䪲";s:1:"N";s:4:"𩒖";s:1:"N";s:4:"頋";s:1:"N";s:4:"頋";s:1:"N";s:4:"頩";s:1:"N";s:4:"𩖶";s:1:"N";s:4:"飢";s:1:"N";s:4:"䬳";s:1:"N";s:4:"餩";s:1:"N";s:4:"馧";s:1:"N";s:4:"駂";s:1:"N";s:4:"駾";s:1:"N";s:4:"䯎";s:1:"N";s:4:"𩬰";s:1:"N";s:4:"鬒";s:1:"N";s:4:"鱀";s:1:"N";s:4:"鳽";s:1:"N";s:4:"䳎";s:1:"N";s:4:"䳭";s:1:"N";s:4:"鵧";s:1:"N";s:4:"𪃎";s:1:"N";s:4:"䳸";s:1:"N";s:4:"𪄅";s:1:"N";s:4:"𪈎";s:1:"N";s:4:"𪊑";s:1:"N";s:4:"麻";s:1:"N";s:4:"䵖";s:1:"N";s:4:"黹";s:1:"N";s:4:"黾";s:1:"N";s:4:"鼅";s:1:"N";s:4:"鼏";s:1:"N";s:4:"鼖";s:1:"N";s:4:"鼻";s:1:"N";s:4:"𪘀";s:1:"N";s:2:"̀";s:1:"M";s:2:"́";s:1:"M";s:2:"̂";s:1:"M";s:2:"̃";s:1:"M";s:2:"̄";s:1:"M";s:2:"̆";s:1:"M";s:2:"̇";s:1:"M";s:2:"̈";s:1:"M";s:2:"̉";s:1:"M";s:2:"̊";s:1:"M";s:2:"̋";s:1:"M";s:2:"̌";s:1:"M";s:2:"̏";s:1:"M";s:2:"̑";s:1:"M";s:2:"̓";s:1:"M";s:2:"̔";s:1:"M";s:2:"̛";s:1:"M";s:2:"̣";s:1:"M";s:2:"̤";s:1:"M";s:2:"̥";s:1:"M";s:2:"̦";s:1:"M";s:2:"̧";s:1:"M";s:2:"̨";s:1:"M";s:2:"̭";s:1:"M";s:2:"̮";s:1:"M";s:2:"̰";s:1:"M";s:2:"̱";s:1:"M";s:2:"̸";s:1:"M";s:2:"͂";s:1:"M";s:2:"ͅ";s:1:"M";s:2:"ٓ";s:1:"M";s:2:"ٔ";s:1:"M";s:2:"ٕ";s:1:"M";s:3:"़";s:1:"M";s:3:"া";s:1:"M";s:3:"ৗ";s:1:"M";s:3:"ା";s:1:"M";s:3:"ୖ";s:1:"M";s:3:"ୗ";s:1:"M";s:3:"ா";s:1:"M";s:3:"ௗ";s:1:"M";s:3:"ౖ";s:1:"M";s:3:"ೂ";s:1:"M";s:3:"ೕ";s:1:"M";s:3:"ೖ";s:1:"M";s:3:"ാ";s:1:"M";s:3:"ൗ";s:1:"M";s:3:"්";s:1:"M";s:3:"ා";s:1:"M";s:3:"ෟ";s:1:"M";s:3:"ီ";s:1:"M";s:3:"ᅡ";s:1:"M";s:3:"ᅢ";s:1:"M";s:3:"ᅣ";s:1:"M";s:3:"ᅤ";s:1:"M";s:3:"ᅥ";s:1:"M";s:3:"ᅦ";s:1:"M";s:3:"ᅧ";s:1:"M";s:3:"ᅨ";s:1:"M";s:3:"ᅩ";s:1:"M";s:3:"ᅪ";s:1:"M";s:3:"ᅫ";s:1:"M";s:3:"ᅬ";s:1:"M";s:3:"ᅭ";s:1:"M";s:3:"ᅮ";s:1:"M";s:3:"ᅯ";s:1:"M";s:3:"ᅰ";s:1:"M";s:3:"ᅱ";s:1:"M";s:3:"ᅲ";s:1:"M";s:3:"ᅳ";s:1:"M";s:3:"ᅴ";s:1:"M";s:3:"ᅵ";s:1:"M";s:3:"ᆨ";s:1:"M";s:3:"ᆩ";s:1:"M";s:3:"ᆪ";s:1:"M";s:3:"ᆫ";s:1:"M";s:3:"ᆬ";s:1:"M";s:3:"ᆭ";s:1:"M";s:3:"ᆮ";s:1:"M";s:3:"ᆯ";s:1:"M";s:3:"ᆰ";s:1:"M";s:3:"ᆱ";s:1:"M";s:3:"ᆲ";s:1:"M";s:3:"ᆳ";s:1:"M";s:3:"ᆴ";s:1:"M";s:3:"ᆵ";s:1:"M";s:3:"ᆶ";s:1:"M";s:3:"ᆷ";s:1:"M";s:3:"ᆸ";s:1:"M";s:3:"ᆹ";s:1:"M";s:3:"ᆺ";s:1:"M";s:3:"ᆻ";s:1:"M";s:3:"ᆼ";s:1:"M";s:3:"ᆽ";s:1:"M";s:3:"ᆾ";s:1:"M";s:3:"ᆿ";s:1:"M";s:3:"ᇀ";s:1:"M";s:3:"ᇁ";s:1:"M";s:3:"ᇂ";s:1:"M";s:3:"ᬵ";s:1:"M";s:3:"゙";s:1:"M";s:3:"゚";s:1:"M";s:4:"𑂺";s:1:"M";}' );
-
diff --git a/includes/normal/UtfNormalDataK.inc b/includes/normal/UtfNormalDataK.inc
deleted file mode 100644
index dde3effb..00000000
--- a/includes/normal/UtfNormalDataK.inc
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-/**
- * This file was automatically generated -- do not edit!
- * Run UtfNormalGenerate.php to create this file again (make clean && make)
- *
- * @file
- */
-// @codingStandardsIgnoreFile
-
-UtfNormal::$utfCompatibilityDecomp = unserialize( 'a:5559:{s:2:" ";s:1:" ";s:2:"¨";s:3:" ̈";s:2:"ª";s:1:"a";s:2:"¯";s:3:" ̄";s:2:"²";s:1:"2";s:2:"³";s:1:"3";s:2:"´";s:3:" ́";s:2:"µ";s:2:"μ";s:2:"¸";s:3:" ̧";s:2:"¹";s:1:"1";s:2:"º";s:1:"o";s:2:"¼";s:5:"1⁄4";s:2:"½";s:5:"1⁄2";s:2:"¾";s:5:"3⁄4";s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"IJ";s:2:"IJ";s:2:"ij";s:2:"ij";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ŀ";s:3:"L·";s:2:"ŀ";s:3:"l·";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"ʼn";s:3:"ʼn";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"ſ";s:1:"s";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"DŽ";s:4:"DŽ";s:2:"Dž";s:4:"Dž";s:2:"dž";s:4:"dž";s:2:"LJ";s:2:"LJ";s:2:"Lj";s:2:"Lj";s:2:"lj";s:2:"lj";s:2:"NJ";s:2:"NJ";s:2:"Nj";s:2:"Nj";s:2:"nj";s:2:"nj";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"DZ";s:2:"DZ";s:2:"Dz";s:2:"Dz";s:2:"dz";s:2:"dz";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"ʰ";s:1:"h";s:2:"ʱ";s:2:"ɦ";s:2:"ʲ";s:1:"j";s:2:"ʳ";s:1:"r";s:2:"ʴ";s:2:"ɹ";s:2:"ʵ";s:2:"ɻ";s:2:"ʶ";s:2:"ʁ";s:2:"ʷ";s:1:"w";s:2:"ʸ";s:1:"y";s:2:"˘";s:3:" ̆";s:2:"˙";s:3:" ̇";s:2:"˚";s:3:" ̊";s:2:"˛";s:3:" ̨";s:2:"˜";s:3:" ̃";s:2:"˝";s:3:" ̋";s:2:"ˠ";s:2:"ɣ";s:2:"ˡ";s:1:"l";s:2:"ˢ";s:1:"s";s:2:"ˣ";s:1:"x";s:2:"ˤ";s:2:"ʕ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:"ͺ";s:3:" ͅ";s:2:";";s:1:";";s:2:"΄";s:3:" ́";s:2:"΅";s:5:" ̈́";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϐ";s:2:"β";s:2:"ϑ";s:2:"θ";s:2:"ϒ";s:2:"Υ";s:2:"ϓ";s:4:"Ύ";s:2:"ϔ";s:4:"Ϋ";s:2:"ϕ";s:2:"φ";s:2:"ϖ";s:2:"π";s:2:"ϰ";s:2:"κ";s:2:"ϱ";s:2:"ρ";s:2:"ϲ";s:2:"ς";s:2:"ϴ";s:2:"Θ";s:2:"ϵ";s:2:"ε";s:2:"Ϲ";s:2:"Σ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"և";s:4:"եւ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ٵ";s:4:"اٴ";s:2:"ٶ";s:4:"وٴ";s:2:"ٷ";s:4:"ۇٴ";s:2:"ٸ";s:4:"يٴ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"ำ";s:6:"ํา";s:3:"ຳ";s:6:"ໍາ";s:3:"ໜ";s:6:"ຫນ";s:3:"ໝ";s:6:"ຫມ";s:3:"༌";s:3:"་";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ཷ";s:9:"ྲཱྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཹ";s:9:"ླཱྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ჼ";s:3:"ნ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"ᴬ";s:1:"A";s:3:"ᴭ";s:2:"Æ";s:3:"ᴮ";s:1:"B";s:3:"ᴰ";s:1:"D";s:3:"ᴱ";s:1:"E";s:3:"ᴲ";s:2:"Ǝ";s:3:"ᴳ";s:1:"G";s:3:"ᴴ";s:1:"H";s:3:"ᴵ";s:1:"I";s:3:"ᴶ";s:1:"J";s:3:"ᴷ";s:1:"K";s:3:"ᴸ";s:1:"L";s:3:"ᴹ";s:1:"M";s:3:"ᴺ";s:1:"N";s:3:"ᴼ";s:1:"O";s:3:"ᴽ";s:2:"Ȣ";s:3:"ᴾ";s:1:"P";s:3:"ᴿ";s:1:"R";s:3:"ᵀ";s:1:"T";s:3:"ᵁ";s:1:"U";s:3:"ᵂ";s:1:"W";s:3:"ᵃ";s:1:"a";s:3:"ᵄ";s:2:"ɐ";s:3:"ᵅ";s:2:"ɑ";s:3:"ᵆ";s:3:"ᴂ";s:3:"ᵇ";s:1:"b";s:3:"ᵈ";s:1:"d";s:3:"ᵉ";s:1:"e";s:3:"ᵊ";s:2:"ə";s:3:"ᵋ";s:2:"ɛ";s:3:"ᵌ";s:2:"ɜ";s:3:"ᵍ";s:1:"g";s:3:"ᵏ";s:1:"k";s:3:"ᵐ";s:1:"m";s:3:"ᵑ";s:2:"ŋ";s:3:"ᵒ";s:1:"o";s:3:"ᵓ";s:2:"ɔ";s:3:"ᵔ";s:3:"ᴖ";s:3:"ᵕ";s:3:"ᴗ";s:3:"ᵖ";s:1:"p";s:3:"ᵗ";s:1:"t";s:3:"ᵘ";s:1:"u";s:3:"ᵙ";s:3:"ᴝ";s:3:"ᵚ";s:2:"ɯ";s:3:"ᵛ";s:1:"v";s:3:"ᵜ";s:3:"ᴥ";s:3:"ᵝ";s:2:"β";s:3:"ᵞ";s:2:"γ";s:3:"ᵟ";s:2:"δ";s:3:"ᵠ";s:2:"φ";s:3:"ᵡ";s:2:"χ";s:3:"ᵢ";s:1:"i";s:3:"ᵣ";s:1:"r";s:3:"ᵤ";s:1:"u";s:3:"ᵥ";s:1:"v";s:3:"ᵦ";s:2:"β";s:3:"ᵧ";s:2:"γ";s:3:"ᵨ";s:2:"ρ";s:3:"ᵩ";s:2:"φ";s:3:"ᵪ";s:2:"χ";s:3:"ᵸ";s:2:"н";s:3:"ᶛ";s:2:"ɒ";s:3:"ᶜ";s:1:"c";s:3:"ᶝ";s:2:"ɕ";s:3:"ᶞ";s:2:"ð";s:3:"ᶟ";s:2:"ɜ";s:3:"ᶠ";s:1:"f";s:3:"ᶡ";s:2:"ɟ";s:3:"ᶢ";s:2:"ɡ";s:3:"ᶣ";s:2:"ɥ";s:3:"ᶤ";s:2:"ɨ";s:3:"ᶥ";s:2:"ɩ";s:3:"ᶦ";s:2:"ɪ";s:3:"ᶧ";s:3:"ᵻ";s:3:"ᶨ";s:2:"ʝ";s:3:"ᶩ";s:2:"ɭ";s:3:"ᶪ";s:3:"ᶅ";s:3:"ᶫ";s:2:"ʟ";s:3:"ᶬ";s:2:"ɱ";s:3:"ᶭ";s:2:"ɰ";s:3:"ᶮ";s:2:"ɲ";s:3:"ᶯ";s:2:"ɳ";s:3:"ᶰ";s:2:"ɴ";s:3:"ᶱ";s:2:"ɵ";s:3:"ᶲ";s:2:"ɸ";s:3:"ᶳ";s:2:"ʂ";s:3:"ᶴ";s:2:"ʃ";s:3:"ᶵ";s:2:"ƫ";s:3:"ᶶ";s:2:"ʉ";s:3:"ᶷ";s:2:"ʊ";s:3:"ᶸ";s:3:"ᴜ";s:3:"ᶹ";s:2:"ʋ";s:3:"ᶺ";s:2:"ʌ";s:3:"ᶻ";s:1:"z";s:3:"ᶼ";s:2:"ʐ";s:3:"ᶽ";s:2:"ʑ";s:3:"ᶾ";s:2:"ʒ";s:3:"ᶿ";s:2:"θ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẚ";s:3:"aʾ";s:3:"ẛ";s:3:"ṡ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"᾽";s:3:" ̓";s:3:"ι";s:2:"ι";s:3:"᾿";s:3:" ̓";s:3:"῀";s:3:" ͂";s:3:"῁";s:5:" ̈͂";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:" ̓̀";s:3:"῎";s:5:" ̓́";s:3:"῏";s:5:" ̓͂";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:" ̔̀";s:3:"῞";s:5:" ̔́";s:3:"῟";s:5:" ̔͂";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:5:" ̈̀";s:3:"΅";s:5:" ̈́";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:3:" ́";s:3:"῾";s:3:" ̔";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:"‑";s:3:"‐";s:3:"‗";s:3:" ̳";s:3:"․";s:1:".";s:3:"‥";s:2:"..";s:3:"…";s:3:"...";s:3:" ";s:1:" ";s:3:"″";s:6:"′′";s:3:"‴";s:9:"′′′";s:3:"‶";s:6:"‵‵";s:3:"‷";s:9:"‵‵‵";s:3:"‼";s:2:"!!";s:3:"‾";s:3:" ̅";s:3:"⁇";s:2:"??";s:3:"⁈";s:2:"?!";s:3:"⁉";s:2:"!?";s:3:"⁗";s:12:"′′′′";s:3:" ";s:1:" ";s:3:"⁰";s:1:"0";s:3:"ⁱ";s:1:"i";s:3:"⁴";s:1:"4";s:3:"⁵";s:1:"5";s:3:"⁶";s:1:"6";s:3:"⁷";s:1:"7";s:3:"⁸";s:1:"8";s:3:"⁹";s:1:"9";s:3:"⁺";s:1:"+";s:3:"⁻";s:3:"−";s:3:"⁼";s:1:"=";s:3:"⁽";s:1:"(";s:3:"⁾";s:1:")";s:3:"ⁿ";s:1:"n";s:3:"₀";s:1:"0";s:3:"₁";s:1:"1";s:3:"₂";s:1:"2";s:3:"₃";s:1:"3";s:3:"₄";s:1:"4";s:3:"₅";s:1:"5";s:3:"₆";s:1:"6";s:3:"₇";s:1:"7";s:3:"₈";s:1:"8";s:3:"₉";s:1:"9";s:3:"₊";s:1:"+";s:3:"₋";s:3:"−";s:3:"₌";s:1:"=";s:3:"₍";s:1:"(";s:3:"₎";s:1:")";s:3:"ₐ";s:1:"a";s:3:"ₑ";s:1:"e";s:3:"ₒ";s:1:"o";s:3:"ₓ";s:1:"x";s:3:"ₔ";s:2:"ə";s:3:"ₕ";s:1:"h";s:3:"ₖ";s:1:"k";s:3:"ₗ";s:1:"l";s:3:"ₘ";s:1:"m";s:3:"ₙ";s:1:"n";s:3:"ₚ";s:1:"p";s:3:"ₛ";s:1:"s";s:3:"ₜ";s:1:"t";s:3:"₨";s:2:"Rs";s:3:"℀";s:3:"a/c";s:3:"℁";s:3:"a/s";s:3:"ℂ";s:1:"C";s:3:"℃";s:3:"°C";s:3:"℅";s:3:"c/o";s:3:"℆";s:3:"c/u";s:3:"ℇ";s:2:"Ɛ";s:3:"℉";s:3:"°F";s:3:"ℊ";s:1:"g";s:3:"ℋ";s:1:"H";s:3:"ℌ";s:1:"H";s:3:"ℍ";s:1:"H";s:3:"ℎ";s:1:"h";s:3:"ℏ";s:2:"ħ";s:3:"ℐ";s:1:"I";s:3:"ℑ";s:1:"I";s:3:"ℒ";s:1:"L";s:3:"ℓ";s:1:"l";s:3:"ℕ";s:1:"N";s:3:"№";s:2:"No";s:3:"ℙ";s:1:"P";s:3:"ℚ";s:1:"Q";s:3:"ℛ";s:1:"R";s:3:"ℜ";s:1:"R";s:3:"ℝ";s:1:"R";s:3:"℠";s:2:"SM";s:3:"℡";s:3:"TEL";s:3:"™";s:2:"TM";s:3:"ℤ";s:1:"Z";s:3:"Ω";s:2:"Ω";s:3:"ℨ";s:1:"Z";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"ℬ";s:1:"B";s:3:"ℭ";s:1:"C";s:3:"ℯ";s:1:"e";s:3:"ℰ";s:1:"E";s:3:"ℱ";s:1:"F";s:3:"ℳ";s:1:"M";s:3:"ℴ";s:1:"o";s:3:"ℵ";s:2:"א";s:3:"ℶ";s:2:"ב";s:3:"ℷ";s:2:"ג";s:3:"ℸ";s:2:"ד";s:3:"ℹ";s:1:"i";s:3:"℻";s:3:"FAX";s:3:"ℼ";s:2:"π";s:3:"ℽ";s:2:"γ";s:3:"ℾ";s:2:"Γ";s:3:"ℿ";s:2:"Π";s:3:"⅀";s:3:"∑";s:3:"ⅅ";s:1:"D";s:3:"ⅆ";s:1:"d";s:3:"ⅇ";s:1:"e";s:3:"ⅈ";s:1:"i";s:3:"ⅉ";s:1:"j";s:3:"⅐";s:5:"1⁄7";s:3:"⅑";s:5:"1⁄9";s:3:"⅒";s:6:"1⁄10";s:3:"⅓";s:5:"1⁄3";s:3:"⅔";s:5:"2⁄3";s:3:"⅕";s:5:"1⁄5";s:3:"⅖";s:5:"2⁄5";s:3:"⅗";s:5:"3⁄5";s:3:"⅘";s:5:"4⁄5";s:3:"⅙";s:5:"1⁄6";s:3:"⅚";s:5:"5⁄6";s:3:"⅛";s:5:"1⁄8";s:3:"⅜";s:5:"3⁄8";s:3:"⅝";s:5:"5⁄8";s:3:"⅞";s:5:"7⁄8";s:3:"⅟";s:4:"1⁄";s:3:"Ⅰ";s:1:"I";s:3:"Ⅱ";s:2:"II";s:3:"Ⅲ";s:3:"III";s:3:"Ⅳ";s:2:"IV";s:3:"Ⅴ";s:1:"V";s:3:"Ⅵ";s:2:"VI";s:3:"Ⅶ";s:3:"VII";s:3:"Ⅷ";s:4:"VIII";s:3:"Ⅸ";s:2:"IX";s:3:"Ⅹ";s:1:"X";s:3:"Ⅺ";s:2:"XI";s:3:"Ⅻ";s:3:"XII";s:3:"Ⅼ";s:1:"L";s:3:"Ⅽ";s:1:"C";s:3:"Ⅾ";s:1:"D";s:3:"Ⅿ";s:1:"M";s:3:"ⅰ";s:1:"i";s:3:"ⅱ";s:2:"ii";s:3:"ⅲ";s:3:"iii";s:3:"ⅳ";s:2:"iv";s:3:"ⅴ";s:1:"v";s:3:"ⅵ";s:2:"vi";s:3:"ⅶ";s:3:"vii";s:3:"ⅷ";s:4:"viii";s:3:"ⅸ";s:2:"ix";s:3:"ⅹ";s:1:"x";s:3:"ⅺ";s:2:"xi";s:3:"ⅻ";s:3:"xii";s:3:"ⅼ";s:1:"l";s:3:"ⅽ";s:1:"c";s:3:"ⅾ";s:1:"d";s:3:"ⅿ";s:1:"m";s:3:"↉";s:5:"0⁄3";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"∬";s:6:"∫∫";s:3:"∭";s:9:"∫∫∫";s:3:"∯";s:6:"∮∮";s:3:"∰";s:9:"∮∮∮";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"①";s:1:"1";s:3:"②";s:1:"2";s:3:"③";s:1:"3";s:3:"④";s:1:"4";s:3:"⑤";s:1:"5";s:3:"⑥";s:1:"6";s:3:"⑦";s:1:"7";s:3:"⑧";s:1:"8";s:3:"⑨";s:1:"9";s:3:"⑩";s:2:"10";s:3:"⑪";s:2:"11";s:3:"⑫";s:2:"12";s:3:"⑬";s:2:"13";s:3:"⑭";s:2:"14";s:3:"⑮";s:2:"15";s:3:"⑯";s:2:"16";s:3:"⑰";s:2:"17";s:3:"⑱";s:2:"18";s:3:"⑲";s:2:"19";s:3:"⑳";s:2:"20";s:3:"⑴";s:3:"(1)";s:3:"⑵";s:3:"(2)";s:3:"⑶";s:3:"(3)";s:3:"⑷";s:3:"(4)";s:3:"⑸";s:3:"(5)";s:3:"⑹";s:3:"(6)";s:3:"⑺";s:3:"(7)";s:3:"⑻";s:3:"(8)";s:3:"⑼";s:3:"(9)";s:3:"⑽";s:4:"(10)";s:3:"⑾";s:4:"(11)";s:3:"⑿";s:4:"(12)";s:3:"⒀";s:4:"(13)";s:3:"⒁";s:4:"(14)";s:3:"⒂";s:4:"(15)";s:3:"⒃";s:4:"(16)";s:3:"⒄";s:4:"(17)";s:3:"⒅";s:4:"(18)";s:3:"⒆";s:4:"(19)";s:3:"⒇";s:4:"(20)";s:3:"⒈";s:2:"1.";s:3:"⒉";s:2:"2.";s:3:"⒊";s:2:"3.";s:3:"⒋";s:2:"4.";s:3:"⒌";s:2:"5.";s:3:"⒍";s:2:"6.";s:3:"⒎";s:2:"7.";s:3:"⒏";s:2:"8.";s:3:"⒐";s:2:"9.";s:3:"⒑";s:3:"10.";s:3:"⒒";s:3:"11.";s:3:"⒓";s:3:"12.";s:3:"⒔";s:3:"13.";s:3:"⒕";s:3:"14.";s:3:"⒖";s:3:"15.";s:3:"⒗";s:3:"16.";s:3:"⒘";s:3:"17.";s:3:"⒙";s:3:"18.";s:3:"⒚";s:3:"19.";s:3:"⒛";s:3:"20.";s:3:"⒜";s:3:"(a)";s:3:"⒝";s:3:"(b)";s:3:"⒞";s:3:"(c)";s:3:"⒟";s:3:"(d)";s:3:"⒠";s:3:"(e)";s:3:"⒡";s:3:"(f)";s:3:"⒢";s:3:"(g)";s:3:"⒣";s:3:"(h)";s:3:"⒤";s:3:"(i)";s:3:"⒥";s:3:"(j)";s:3:"⒦";s:3:"(k)";s:3:"⒧";s:3:"(l)";s:3:"⒨";s:3:"(m)";s:3:"⒩";s:3:"(n)";s:3:"⒪";s:3:"(o)";s:3:"⒫";s:3:"(p)";s:3:"⒬";s:3:"(q)";s:3:"⒭";s:3:"(r)";s:3:"⒮";s:3:"(s)";s:3:"⒯";s:3:"(t)";s:3:"⒰";s:3:"(u)";s:3:"⒱";s:3:"(v)";s:3:"⒲";s:3:"(w)";s:3:"⒳";s:3:"(x)";s:3:"⒴";s:3:"(y)";s:3:"⒵";s:3:"(z)";s:3:"Ⓐ";s:1:"A";s:3:"Ⓑ";s:1:"B";s:3:"Ⓒ";s:1:"C";s:3:"Ⓓ";s:1:"D";s:3:"Ⓔ";s:1:"E";s:3:"Ⓕ";s:1:"F";s:3:"Ⓖ";s:1:"G";s:3:"Ⓗ";s:1:"H";s:3:"Ⓘ";s:1:"I";s:3:"Ⓙ";s:1:"J";s:3:"Ⓚ";s:1:"K";s:3:"Ⓛ";s:1:"L";s:3:"Ⓜ";s:1:"M";s:3:"Ⓝ";s:1:"N";s:3:"Ⓞ";s:1:"O";s:3:"Ⓟ";s:1:"P";s:3:"Ⓠ";s:1:"Q";s:3:"Ⓡ";s:1:"R";s:3:"Ⓢ";s:1:"S";s:3:"Ⓣ";s:1:"T";s:3:"Ⓤ";s:1:"U";s:3:"Ⓥ";s:1:"V";s:3:"Ⓦ";s:1:"W";s:3:"Ⓧ";s:1:"X";s:3:"Ⓨ";s:1:"Y";s:3:"Ⓩ";s:1:"Z";s:3:"ⓐ";s:1:"a";s:3:"ⓑ";s:1:"b";s:3:"ⓒ";s:1:"c";s:3:"ⓓ";s:1:"d";s:3:"ⓔ";s:1:"e";s:3:"ⓕ";s:1:"f";s:3:"ⓖ";s:1:"g";s:3:"ⓗ";s:1:"h";s:3:"ⓘ";s:1:"i";s:3:"ⓙ";s:1:"j";s:3:"ⓚ";s:1:"k";s:3:"ⓛ";s:1:"l";s:3:"ⓜ";s:1:"m";s:3:"ⓝ";s:1:"n";s:3:"ⓞ";s:1:"o";s:3:"ⓟ";s:1:"p";s:3:"ⓠ";s:1:"q";s:3:"ⓡ";s:1:"r";s:3:"ⓢ";s:1:"s";s:3:"ⓣ";s:1:"t";s:3:"ⓤ";s:1:"u";s:3:"ⓥ";s:1:"v";s:3:"ⓦ";s:1:"w";s:3:"ⓧ";s:1:"x";s:3:"ⓨ";s:1:"y";s:3:"ⓩ";s:1:"z";s:3:"⓪";s:1:"0";s:3:"⨌";s:12:"∫∫∫∫";s:3:"⩴";s:3:"::=";s:3:"⩵";s:2:"==";s:3:"⩶";s:3:"===";s:3:"⫝̸";s:5:"⫝̸";s:3:"ⱼ";s:1:"j";s:3:"ⱽ";s:1:"V";s:3:"ⵯ";s:3:"ⵡ";s:3:"⺟";s:3:"母";s:3:"⻳";s:3:"龟";s:3:"⼀";s:3:"一";s:3:"⼁";s:3:"丨";s:3:"⼂";s:3:"丶";s:3:"⼃";s:3:"丿";s:3:"⼄";s:3:"乙";s:3:"⼅";s:3:"亅";s:3:"⼆";s:3:"二";s:3:"⼇";s:3:"亠";s:3:"⼈";s:3:"人";s:3:"⼉";s:3:"儿";s:3:"⼊";s:3:"入";s:3:"⼋";s:3:"八";s:3:"⼌";s:3:"冂";s:3:"⼍";s:3:"冖";s:3:"⼎";s:3:"冫";s:3:"⼏";s:3:"几";s:3:"⼐";s:3:"凵";s:3:"⼑";s:3:"刀";s:3:"⼒";s:3:"力";s:3:"⼓";s:3:"勹";s:3:"⼔";s:3:"匕";s:3:"⼕";s:3:"匚";s:3:"⼖";s:3:"匸";s:3:"⼗";s:3:"十";s:3:"⼘";s:3:"卜";s:3:"⼙";s:3:"卩";s:3:"⼚";s:3:"厂";s:3:"⼛";s:3:"厶";s:3:"⼜";s:3:"又";s:3:"⼝";s:3:"口";s:3:"⼞";s:3:"囗";s:3:"⼟";s:3:"土";s:3:"⼠";s:3:"士";s:3:"⼡";s:3:"夂";s:3:"⼢";s:3:"夊";s:3:"⼣";s:3:"夕";s:3:"⼤";s:3:"大";s:3:"⼥";s:3:"女";s:3:"⼦";s:3:"子";s:3:"⼧";s:3:"宀";s:3:"⼨";s:3:"寸";s:3:"⼩";s:3:"小";s:3:"⼪";s:3:"尢";s:3:"⼫";s:3:"尸";s:3:"⼬";s:3:"屮";s:3:"⼭";s:3:"山";s:3:"⼮";s:3:"巛";s:3:"⼯";s:3:"工";s:3:"⼰";s:3:"己";s:3:"⼱";s:3:"巾";s:3:"⼲";s:3:"干";s:3:"⼳";s:3:"幺";s:3:"⼴";s:3:"广";s:3:"⼵";s:3:"廴";s:3:"⼶";s:3:"廾";s:3:"⼷";s:3:"弋";s:3:"⼸";s:3:"弓";s:3:"⼹";s:3:"彐";s:3:"⼺";s:3:"彡";s:3:"⼻";s:3:"彳";s:3:"⼼";s:3:"心";s:3:"⼽";s:3:"戈";s:3:"⼾";s:3:"戶";s:3:"⼿";s:3:"手";s:3:"⽀";s:3:"支";s:3:"⽁";s:3:"攴";s:3:"⽂";s:3:"文";s:3:"⽃";s:3:"斗";s:3:"⽄";s:3:"斤";s:3:"⽅";s:3:"方";s:3:"⽆";s:3:"无";s:3:"⽇";s:3:"日";s:3:"⽈";s:3:"曰";s:3:"⽉";s:3:"月";s:3:"⽊";s:3:"木";s:3:"⽋";s:3:"欠";s:3:"⽌";s:3:"止";s:3:"⽍";s:3:"歹";s:3:"⽎";s:3:"殳";s:3:"⽏";s:3:"毋";s:3:"⽐";s:3:"比";s:3:"⽑";s:3:"毛";s:3:"⽒";s:3:"氏";s:3:"⽓";s:3:"气";s:3:"⽔";s:3:"水";s:3:"⽕";s:3:"火";s:3:"⽖";s:3:"爪";s:3:"⽗";s:3:"父";s:3:"⽘";s:3:"爻";s:3:"⽙";s:3:"爿";s:3:"⽚";s:3:"片";s:3:"⽛";s:3:"牙";s:3:"⽜";s:3:"牛";s:3:"⽝";s:3:"犬";s:3:"⽞";s:3:"玄";s:3:"⽟";s:3:"玉";s:3:"⽠";s:3:"瓜";s:3:"⽡";s:3:"瓦";s:3:"⽢";s:3:"甘";s:3:"⽣";s:3:"生";s:3:"⽤";s:3:"用";s:3:"⽥";s:3:"田";s:3:"⽦";s:3:"疋";s:3:"⽧";s:3:"疒";s:3:"⽨";s:3:"癶";s:3:"⽩";s:3:"白";s:3:"⽪";s:3:"皮";s:3:"⽫";s:3:"皿";s:3:"⽬";s:3:"目";s:3:"⽭";s:3:"矛";s:3:"⽮";s:3:"矢";s:3:"⽯";s:3:"石";s:3:"⽰";s:3:"示";s:3:"⽱";s:3:"禸";s:3:"⽲";s:3:"禾";s:3:"⽳";s:3:"穴";s:3:"⽴";s:3:"立";s:3:"⽵";s:3:"竹";s:3:"⽶";s:3:"米";s:3:"⽷";s:3:"糸";s:3:"⽸";s:3:"缶";s:3:"⽹";s:3:"网";s:3:"⽺";s:3:"羊";s:3:"⽻";s:3:"羽";s:3:"⽼";s:3:"老";s:3:"⽽";s:3:"而";s:3:"⽾";s:3:"耒";s:3:"⽿";s:3:"耳";s:3:"⾀";s:3:"聿";s:3:"⾁";s:3:"肉";s:3:"⾂";s:3:"臣";s:3:"⾃";s:3:"自";s:3:"⾄";s:3:"至";s:3:"⾅";s:3:"臼";s:3:"⾆";s:3:"舌";s:3:"⾇";s:3:"舛";s:3:"⾈";s:3:"舟";s:3:"⾉";s:3:"艮";s:3:"⾊";s:3:"色";s:3:"⾋";s:3:"艸";s:3:"⾌";s:3:"虍";s:3:"⾍";s:3:"虫";s:3:"⾎";s:3:"血";s:3:"⾏";s:3:"行";s:3:"⾐";s:3:"衣";s:3:"⾑";s:3:"襾";s:3:"⾒";s:3:"見";s:3:"⾓";s:3:"角";s:3:"⾔";s:3:"言";s:3:"⾕";s:3:"谷";s:3:"⾖";s:3:"豆";s:3:"⾗";s:3:"豕";s:3:"⾘";s:3:"豸";s:3:"⾙";s:3:"貝";s:3:"⾚";s:3:"赤";s:3:"⾛";s:3:"走";s:3:"⾜";s:3:"足";s:3:"⾝";s:3:"身";s:3:"⾞";s:3:"車";s:3:"⾟";s:3:"辛";s:3:"⾠";s:3:"辰";s:3:"⾡";s:3:"辵";s:3:"⾢";s:3:"邑";s:3:"⾣";s:3:"酉";s:3:"⾤";s:3:"釆";s:3:"⾥";s:3:"里";s:3:"⾦";s:3:"金";s:3:"⾧";s:3:"長";s:3:"⾨";s:3:"門";s:3:"⾩";s:3:"阜";s:3:"⾪";s:3:"隶";s:3:"⾫";s:3:"隹";s:3:"⾬";s:3:"雨";s:3:"⾭";s:3:"靑";s:3:"⾮";s:3:"非";s:3:"⾯";s:3:"面";s:3:"⾰";s:3:"革";s:3:"⾱";s:3:"韋";s:3:"⾲";s:3:"韭";s:3:"⾳";s:3:"音";s:3:"⾴";s:3:"頁";s:3:"⾵";s:3:"風";s:3:"⾶";s:3:"飛";s:3:"⾷";s:3:"食";s:3:"⾸";s:3:"首";s:3:"⾹";s:3:"香";s:3:"⾺";s:3:"馬";s:3:"⾻";s:3:"骨";s:3:"⾼";s:3:"高";s:3:"⾽";s:3:"髟";s:3:"⾾";s:3:"鬥";s:3:"⾿";s:3:"鬯";s:3:"⿀";s:3:"鬲";s:3:"⿁";s:3:"鬼";s:3:"⿂";s:3:"魚";s:3:"⿃";s:3:"鳥";s:3:"⿄";s:3:"鹵";s:3:"⿅";s:3:"鹿";s:3:"⿆";s:3:"麥";s:3:"⿇";s:3:"麻";s:3:"⿈";s:3:"黃";s:3:"⿉";s:3:"黍";s:3:"⿊";s:3:"黑";s:3:"⿋";s:3:"黹";s:3:"⿌";s:3:"黽";s:3:"⿍";s:3:"鼎";s:3:"⿎";s:3:"鼓";s:3:"⿏";s:3:"鼠";s:3:"⿐";s:3:"鼻";s:3:"⿑";s:3:"齊";s:3:"⿒";s:3:"齒";s:3:"⿓";s:3:"龍";s:3:"⿔";s:3:"龜";s:3:"⿕";s:3:"龠";s:3:" ";s:1:" ";s:3:"〶";s:3:"〒";s:3:"〸";s:3:"十";s:3:"〹";s:3:"卄";s:3:"〺";s:3:"卅";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"゛";s:4:" ゙";s:3:"゜";s:4:" ゚";s:3:"ゞ";s:6:"ゞ";s:3:"ゟ";s:6:"より";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"ヿ";s:6:"コト";s:3:"ㄱ";s:3:"ᄀ";s:3:"ㄲ";s:3:"ᄁ";s:3:"ㄳ";s:3:"ᆪ";s:3:"ㄴ";s:3:"ᄂ";s:3:"ㄵ";s:3:"ᆬ";s:3:"ㄶ";s:3:"ᆭ";s:3:"ㄷ";s:3:"ᄃ";s:3:"ㄸ";s:3:"ᄄ";s:3:"ㄹ";s:3:"ᄅ";s:3:"ㄺ";s:3:"ᆰ";s:3:"ㄻ";s:3:"ᆱ";s:3:"ㄼ";s:3:"ᆲ";s:3:"ㄽ";s:3:"ᆳ";s:3:"ㄾ";s:3:"ᆴ";s:3:"ㄿ";s:3:"ᆵ";s:3:"ㅀ";s:3:"ᄚ";s:3:"ㅁ";s:3:"ᄆ";s:3:"ㅂ";s:3:"ᄇ";s:3:"ㅃ";s:3:"ᄈ";s:3:"ㅄ";s:3:"ᄡ";s:3:"ㅅ";s:3:"ᄉ";s:3:"ㅆ";s:3:"ᄊ";s:3:"ㅇ";s:3:"ᄋ";s:3:"ㅈ";s:3:"ᄌ";s:3:"ㅉ";s:3:"ᄍ";s:3:"ㅊ";s:3:"ᄎ";s:3:"ㅋ";s:3:"ᄏ";s:3:"ㅌ";s:3:"ᄐ";s:3:"ㅍ";s:3:"ᄑ";s:3:"ㅎ";s:3:"ᄒ";s:3:"ㅏ";s:3:"ᅡ";s:3:"ㅐ";s:3:"ᅢ";s:3:"ㅑ";s:3:"ᅣ";s:3:"ㅒ";s:3:"ᅤ";s:3:"ㅓ";s:3:"ᅥ";s:3:"ㅔ";s:3:"ᅦ";s:3:"ㅕ";s:3:"ᅧ";s:3:"ㅖ";s:3:"ᅨ";s:3:"ㅗ";s:3:"ᅩ";s:3:"ㅘ";s:3:"ᅪ";s:3:"ㅙ";s:3:"ᅫ";s:3:"ㅚ";s:3:"ᅬ";s:3:"ㅛ";s:3:"ᅭ";s:3:"ㅜ";s:3:"ᅮ";s:3:"ㅝ";s:3:"ᅯ";s:3:"ㅞ";s:3:"ᅰ";s:3:"ㅟ";s:3:"ᅱ";s:3:"ㅠ";s:3:"ᅲ";s:3:"ㅡ";s:3:"ᅳ";s:3:"ㅢ";s:3:"ᅴ";s:3:"ㅣ";s:3:"ᅵ";s:3:"ㅤ";s:3:"ᅠ";s:3:"ㅥ";s:3:"ᄔ";s:3:"ㅦ";s:3:"ᄕ";s:3:"ㅧ";s:3:"ᇇ";s:3:"ㅨ";s:3:"ᇈ";s:3:"ㅩ";s:3:"ᇌ";s:3:"ㅪ";s:3:"ᇎ";s:3:"ㅫ";s:3:"ᇓ";s:3:"ㅬ";s:3:"ᇗ";s:3:"ㅭ";s:3:"ᇙ";s:3:"ㅮ";s:3:"ᄜ";s:3:"ㅯ";s:3:"ᇝ";s:3:"ㅰ";s:3:"ᇟ";s:3:"ㅱ";s:3:"ᄝ";s:3:"ㅲ";s:3:"ᄞ";s:3:"ㅳ";s:3:"ᄠ";s:3:"ㅴ";s:3:"ᄢ";s:3:"ㅵ";s:3:"ᄣ";s:3:"ㅶ";s:3:"ᄧ";s:3:"ㅷ";s:3:"ᄩ";s:3:"ㅸ";s:3:"ᄫ";s:3:"ㅹ";s:3:"ᄬ";s:3:"ㅺ";s:3:"ᄭ";s:3:"ㅻ";s:3:"ᄮ";s:3:"ㅼ";s:3:"ᄯ";s:3:"ㅽ";s:3:"ᄲ";s:3:"ㅾ";s:3:"ᄶ";s:3:"ㅿ";s:3:"ᅀ";s:3:"ㆀ";s:3:"ᅇ";s:3:"ㆁ";s:3:"ᅌ";s:3:"ㆂ";s:3:"ᇱ";s:3:"ㆃ";s:3:"ᇲ";s:3:"ㆄ";s:3:"ᅗ";s:3:"ㆅ";s:3:"ᅘ";s:3:"ㆆ";s:3:"ᅙ";s:3:"ㆇ";s:3:"ᆄ";s:3:"ㆈ";s:3:"ᆅ";s:3:"ㆉ";s:3:"ᆈ";s:3:"ㆊ";s:3:"ᆑ";s:3:"ㆋ";s:3:"ᆒ";s:3:"ㆌ";s:3:"ᆔ";s:3:"ㆍ";s:3:"ᆞ";s:3:"ㆎ";s:3:"ᆡ";s:3:"㆒";s:3:"一";s:3:"㆓";s:3:"二";s:3:"㆔";s:3:"三";s:3:"㆕";s:3:"四";s:3:"㆖";s:3:"上";s:3:"㆗";s:3:"中";s:3:"㆘";s:3:"下";s:3:"㆙";s:3:"甲";s:3:"㆚";s:3:"乙";s:3:"㆛";s:3:"丙";s:3:"㆜";s:3:"丁";s:3:"㆝";s:3:"天";s:3:"㆞";s:3:"地";s:3:"㆟";s:3:"人";s:3:"㈀";s:5:"(ᄀ)";s:3:"㈁";s:5:"(ᄂ)";s:3:"㈂";s:5:"(ᄃ)";s:3:"㈃";s:5:"(ᄅ)";s:3:"㈄";s:5:"(ᄆ)";s:3:"㈅";s:5:"(ᄇ)";s:3:"㈆";s:5:"(ᄉ)";s:3:"㈇";s:5:"(ᄋ)";s:3:"㈈";s:5:"(ᄌ)";s:3:"㈉";s:5:"(ᄎ)";s:3:"㈊";s:5:"(ᄏ)";s:3:"㈋";s:5:"(ᄐ)";s:3:"㈌";s:5:"(ᄑ)";s:3:"㈍";s:5:"(ᄒ)";s:3:"㈎";s:8:"(가)";s:3:"㈏";s:8:"(나)";s:3:"㈐";s:8:"(다)";s:3:"㈑";s:8:"(라)";s:3:"㈒";s:8:"(마)";s:3:"㈓";s:8:"(바)";s:3:"㈔";s:8:"(사)";s:3:"㈕";s:8:"(아)";s:3:"㈖";s:8:"(자)";s:3:"㈗";s:8:"(차)";s:3:"㈘";s:8:"(카)";s:3:"㈙";s:8:"(타)";s:3:"㈚";s:8:"(파)";s:3:"㈛";s:8:"(하)";s:3:"㈜";s:8:"(주)";s:3:"㈝";s:17:"(오전)";s:3:"㈞";s:14:"(오후)";s:3:"㈠";s:5:"(一)";s:3:"㈡";s:5:"(二)";s:3:"㈢";s:5:"(三)";s:3:"㈣";s:5:"(四)";s:3:"㈤";s:5:"(五)";s:3:"㈥";s:5:"(六)";s:3:"㈦";s:5:"(七)";s:3:"㈧";s:5:"(八)";s:3:"㈨";s:5:"(九)";s:3:"㈩";s:5:"(十)";s:3:"㈪";s:5:"(月)";s:3:"㈫";s:5:"(火)";s:3:"㈬";s:5:"(水)";s:3:"㈭";s:5:"(木)";s:3:"㈮";s:5:"(金)";s:3:"㈯";s:5:"(土)";s:3:"㈰";s:5:"(日)";s:3:"㈱";s:5:"(株)";s:3:"㈲";s:5:"(有)";s:3:"㈳";s:5:"(社)";s:3:"㈴";s:5:"(名)";s:3:"㈵";s:5:"(特)";s:3:"㈶";s:5:"(財)";s:3:"㈷";s:5:"(祝)";s:3:"㈸";s:5:"(労)";s:3:"㈹";s:5:"(代)";s:3:"㈺";s:5:"(呼)";s:3:"㈻";s:5:"(学)";s:3:"㈼";s:5:"(監)";s:3:"㈽";s:5:"(企)";s:3:"㈾";s:5:"(資)";s:3:"㈿";s:5:"(協)";s:3:"㉀";s:5:"(祭)";s:3:"㉁";s:5:"(休)";s:3:"㉂";s:5:"(自)";s:3:"㉃";s:5:"(至)";s:3:"㉄";s:3:"問";s:3:"㉅";s:3:"幼";s:3:"㉆";s:3:"文";s:3:"㉇";s:3:"箏";s:3:"㉐";s:3:"PTE";s:3:"㉑";s:2:"21";s:3:"㉒";s:2:"22";s:3:"㉓";s:2:"23";s:3:"㉔";s:2:"24";s:3:"㉕";s:2:"25";s:3:"㉖";s:2:"26";s:3:"㉗";s:2:"27";s:3:"㉘";s:2:"28";s:3:"㉙";s:2:"29";s:3:"㉚";s:2:"30";s:3:"㉛";s:2:"31";s:3:"㉜";s:2:"32";s:3:"㉝";s:2:"33";s:3:"㉞";s:2:"34";s:3:"㉟";s:2:"35";s:3:"㉠";s:3:"ᄀ";s:3:"㉡";s:3:"ᄂ";s:3:"㉢";s:3:"ᄃ";s:3:"㉣";s:3:"ᄅ";s:3:"㉤";s:3:"ᄆ";s:3:"㉥";s:3:"ᄇ";s:3:"㉦";s:3:"ᄉ";s:3:"㉧";s:3:"ᄋ";s:3:"㉨";s:3:"ᄌ";s:3:"㉩";s:3:"ᄎ";s:3:"㉪";s:3:"ᄏ";s:3:"㉫";s:3:"ᄐ";s:3:"㉬";s:3:"ᄑ";s:3:"㉭";s:3:"ᄒ";s:3:"㉮";s:6:"가";s:3:"㉯";s:6:"나";s:3:"㉰";s:6:"다";s:3:"㉱";s:6:"라";s:3:"㉲";s:6:"마";s:3:"㉳";s:6:"바";s:3:"㉴";s:6:"사";s:3:"㉵";s:6:"아";s:3:"㉶";s:6:"자";s:3:"㉷";s:6:"차";s:3:"㉸";s:6:"카";s:3:"㉹";s:6:"타";s:3:"㉺";s:6:"파";s:3:"㉻";s:6:"하";s:3:"㉼";s:15:"참고";s:3:"㉽";s:12:"주의";s:3:"㉾";s:6:"우";s:3:"㊀";s:3:"一";s:3:"㊁";s:3:"二";s:3:"㊂";s:3:"三";s:3:"㊃";s:3:"四";s:3:"㊄";s:3:"五";s:3:"㊅";s:3:"六";s:3:"㊆";s:3:"七";s:3:"㊇";s:3:"八";s:3:"㊈";s:3:"九";s:3:"㊉";s:3:"十";s:3:"㊊";s:3:"月";s:3:"㊋";s:3:"火";s:3:"㊌";s:3:"水";s:3:"㊍";s:3:"木";s:3:"㊎";s:3:"金";s:3:"㊏";s:3:"土";s:3:"㊐";s:3:"日";s:3:"㊑";s:3:"株";s:3:"㊒";s:3:"有";s:3:"㊓";s:3:"社";s:3:"㊔";s:3:"名";s:3:"㊕";s:3:"特";s:3:"㊖";s:3:"財";s:3:"㊗";s:3:"祝";s:3:"㊘";s:3:"労";s:3:"㊙";s:3:"秘";s:3:"㊚";s:3:"男";s:3:"㊛";s:3:"女";s:3:"㊜";s:3:"適";s:3:"㊝";s:3:"優";s:3:"㊞";s:3:"印";s:3:"㊟";s:3:"注";s:3:"㊠";s:3:"項";s:3:"㊡";s:3:"休";s:3:"㊢";s:3:"写";s:3:"㊣";s:3:"正";s:3:"㊤";s:3:"上";s:3:"㊥";s:3:"中";s:3:"㊦";s:3:"下";s:3:"㊧";s:3:"左";s:3:"㊨";s:3:"右";s:3:"㊩";s:3:"医";s:3:"㊪";s:3:"宗";s:3:"㊫";s:3:"学";s:3:"㊬";s:3:"監";s:3:"㊭";s:3:"企";s:3:"㊮";s:3:"資";s:3:"㊯";s:3:"協";s:3:"㊰";s:3:"夜";s:3:"㊱";s:2:"36";s:3:"㊲";s:2:"37";s:3:"㊳";s:2:"38";s:3:"㊴";s:2:"39";s:3:"㊵";s:2:"40";s:3:"㊶";s:2:"41";s:3:"㊷";s:2:"42";s:3:"㊸";s:2:"43";s:3:"㊹";s:2:"44";s:3:"㊺";s:2:"45";s:3:"㊻";s:2:"46";s:3:"㊼";s:2:"47";s:3:"㊽";s:2:"48";s:3:"㊾";s:2:"49";s:3:"㊿";s:2:"50";s:3:"㋀";s:4:"1月";s:3:"㋁";s:4:"2月";s:3:"㋂";s:4:"3月";s:3:"㋃";s:4:"4月";s:3:"㋄";s:4:"5月";s:3:"㋅";s:4:"6月";s:3:"㋆";s:4:"7月";s:3:"㋇";s:4:"8月";s:3:"㋈";s:4:"9月";s:3:"㋉";s:5:"10月";s:3:"㋊";s:5:"11月";s:3:"㋋";s:5:"12月";s:3:"㋌";s:2:"Hg";s:3:"㋍";s:3:"erg";s:3:"㋎";s:2:"eV";s:3:"㋏";s:3:"LTD";s:3:"㋐";s:3:"ア";s:3:"㋑";s:3:"イ";s:3:"㋒";s:3:"ウ";s:3:"㋓";s:3:"エ";s:3:"㋔";s:3:"オ";s:3:"㋕";s:3:"カ";s:3:"㋖";s:3:"キ";s:3:"㋗";s:3:"ク";s:3:"㋘";s:3:"ケ";s:3:"㋙";s:3:"コ";s:3:"㋚";s:3:"サ";s:3:"㋛";s:3:"シ";s:3:"㋜";s:3:"ス";s:3:"㋝";s:3:"セ";s:3:"㋞";s:3:"ソ";s:3:"㋟";s:3:"タ";s:3:"㋠";s:3:"チ";s:3:"㋡";s:3:"ツ";s:3:"㋢";s:3:"テ";s:3:"㋣";s:3:"ト";s:3:"㋤";s:3:"ナ";s:3:"㋥";s:3:"ニ";s:3:"㋦";s:3:"ヌ";s:3:"㋧";s:3:"ネ";s:3:"㋨";s:3:"ノ";s:3:"㋩";s:3:"ハ";s:3:"㋪";s:3:"ヒ";s:3:"㋫";s:3:"フ";s:3:"㋬";s:3:"ヘ";s:3:"㋭";s:3:"ホ";s:3:"㋮";s:3:"マ";s:3:"㋯";s:3:"ミ";s:3:"㋰";s:3:"ム";s:3:"㋱";s:3:"メ";s:3:"㋲";s:3:"モ";s:3:"㋳";s:3:"ヤ";s:3:"㋴";s:3:"ユ";s:3:"㋵";s:3:"ヨ";s:3:"㋶";s:3:"ラ";s:3:"㋷";s:3:"リ";s:3:"㋸";s:3:"ル";s:3:"㋹";s:3:"レ";s:3:"㋺";s:3:"ロ";s:3:"㋻";s:3:"ワ";s:3:"㋼";s:3:"ヰ";s:3:"㋽";s:3:"ヱ";s:3:"㋾";s:3:"ヲ";s:3:"㌀";s:15:"アパート";s:3:"㌁";s:12:"アルファ";s:3:"㌂";s:15:"アンペア";s:3:"㌃";s:9:"アール";s:3:"㌄";s:15:"イニング";s:3:"㌅";s:9:"インチ";s:3:"㌆";s:9:"ウォン";s:3:"㌇";s:18:"エスクード";s:3:"㌈";s:12:"エーカー";s:3:"㌉";s:9:"オンス";s:3:"㌊";s:9:"オーム";s:3:"㌋";s:9:"カイリ";s:3:"㌌";s:12:"カラット";s:3:"㌍";s:12:"カロリー";s:3:"㌎";s:12:"ガロン";s:3:"㌏";s:12:"ガンマ";s:3:"㌐";s:12:"ギガ";s:3:"㌑";s:12:"ギニー";s:3:"㌒";s:12:"キュリー";s:3:"㌓";s:18:"ギルダー";s:3:"㌔";s:6:"キロ";s:3:"㌕";s:18:"キログラム";s:3:"㌖";s:18:"キロメートル";s:3:"㌗";s:15:"キロワット";s:3:"㌘";s:12:"グラム";s:3:"㌙";s:18:"グラムトン";s:3:"㌚";s:18:"クルゼイロ";s:3:"㌛";s:12:"クローネ";s:3:"㌜";s:9:"ケース";s:3:"㌝";s:9:"コルナ";s:3:"㌞";s:12:"コーポ";s:3:"㌟";s:12:"サイクル";s:3:"㌠";s:15:"サンチーム";s:3:"㌡";s:15:"シリング";s:3:"㌢";s:9:"センチ";s:3:"㌣";s:9:"セント";s:3:"㌤";s:12:"ダース";s:3:"㌥";s:9:"デシ";s:3:"㌦";s:9:"ドル";s:3:"㌧";s:6:"トン";s:3:"㌨";s:6:"ナノ";s:3:"㌩";s:9:"ノット";s:3:"㌪";s:9:"ハイツ";s:3:"㌫";s:18:"パーセント";s:3:"㌬";s:12:"パーツ";s:3:"㌭";s:15:"バーレル";s:3:"㌮";s:18:"ピアストル";s:3:"㌯";s:12:"ピクル";s:3:"㌰";s:9:"ピコ";s:3:"㌱";s:9:"ビル";s:3:"㌲";s:18:"ファラッド";s:3:"㌳";s:12:"フィート";s:3:"㌴";s:18:"ブッシェル";s:3:"㌵";s:9:"フラン";s:3:"㌶";s:15:"ヘクタール";s:3:"㌷";s:9:"ペソ";s:3:"㌸";s:12:"ペニヒ";s:3:"㌹";s:9:"ヘルツ";s:3:"㌺";s:12:"ペンス";s:3:"㌻";s:15:"ページ";s:3:"㌼";s:12:"ベータ";s:3:"㌽";s:15:"ポイント";s:3:"㌾";s:12:"ボルト";s:3:"㌿";s:6:"ホン";s:3:"㍀";s:15:"ポンド";s:3:"㍁";s:9:"ホール";s:3:"㍂";s:9:"ホーン";s:3:"㍃";s:12:"マイクロ";s:3:"㍄";s:9:"マイル";s:3:"㍅";s:9:"マッハ";s:3:"㍆";s:9:"マルク";s:3:"㍇";s:15:"マンション";s:3:"㍈";s:12:"ミクロン";s:3:"㍉";s:6:"ミリ";s:3:"㍊";s:18:"ミリバール";s:3:"㍋";s:9:"メガ";s:3:"㍌";s:15:"メガトン";s:3:"㍍";s:12:"メートル";s:3:"㍎";s:12:"ヤード";s:3:"㍏";s:9:"ヤール";s:3:"㍐";s:9:"ユアン";s:3:"㍑";s:12:"リットル";s:3:"㍒";s:6:"リラ";s:3:"㍓";s:12:"ルピー";s:3:"㍔";s:15:"ルーブル";s:3:"㍕";s:6:"レム";s:3:"㍖";s:18:"レントゲン";s:3:"㍗";s:9:"ワット";s:3:"㍘";s:4:"0点";s:3:"㍙";s:4:"1点";s:3:"㍚";s:4:"2点";s:3:"㍛";s:4:"3点";s:3:"㍜";s:4:"4点";s:3:"㍝";s:4:"5点";s:3:"㍞";s:4:"6点";s:3:"㍟";s:4:"7点";s:3:"㍠";s:4:"8点";s:3:"㍡";s:4:"9点";s:3:"㍢";s:5:"10点";s:3:"㍣";s:5:"11点";s:3:"㍤";s:5:"12点";s:3:"㍥";s:5:"13点";s:3:"㍦";s:5:"14点";s:3:"㍧";s:5:"15点";s:3:"㍨";s:5:"16点";s:3:"㍩";s:5:"17点";s:3:"㍪";s:5:"18点";s:3:"㍫";s:5:"19点";s:3:"㍬";s:5:"20点";s:3:"㍭";s:5:"21点";s:3:"㍮";s:5:"22点";s:3:"㍯";s:5:"23点";s:3:"㍰";s:5:"24点";s:3:"㍱";s:3:"hPa";s:3:"㍲";s:2:"da";s:3:"㍳";s:2:"AU";s:3:"㍴";s:3:"bar";s:3:"㍵";s:2:"oV";s:3:"㍶";s:2:"pc";s:3:"㍷";s:2:"dm";s:3:"㍸";s:3:"dm2";s:3:"㍹";s:3:"dm3";s:3:"㍺";s:2:"IU";s:3:"㍻";s:6:"平成";s:3:"㍼";s:6:"昭和";s:3:"㍽";s:6:"大正";s:3:"㍾";s:6:"明治";s:3:"㍿";s:12:"株式会社";s:3:"㎀";s:2:"pA";s:3:"㎁";s:2:"nA";s:3:"㎂";s:3:"μA";s:3:"㎃";s:2:"mA";s:3:"㎄";s:2:"kA";s:3:"㎅";s:2:"KB";s:3:"㎆";s:2:"MB";s:3:"㎇";s:2:"GB";s:3:"㎈";s:3:"cal";s:3:"㎉";s:4:"kcal";s:3:"㎊";s:2:"pF";s:3:"㎋";s:2:"nF";s:3:"㎌";s:3:"μF";s:3:"㎍";s:3:"μg";s:3:"㎎";s:2:"mg";s:3:"㎏";s:2:"kg";s:3:"㎐";s:2:"Hz";s:3:"㎑";s:3:"kHz";s:3:"㎒";s:3:"MHz";s:3:"㎓";s:3:"GHz";s:3:"㎔";s:3:"THz";s:3:"㎕";s:3:"μl";s:3:"㎖";s:2:"ml";s:3:"㎗";s:2:"dl";s:3:"㎘";s:2:"kl";s:3:"㎙";s:2:"fm";s:3:"㎚";s:2:"nm";s:3:"㎛";s:3:"μm";s:3:"㎜";s:2:"mm";s:3:"㎝";s:2:"cm";s:3:"㎞";s:2:"km";s:3:"㎟";s:3:"mm2";s:3:"㎠";s:3:"cm2";s:3:"㎡";s:2:"m2";s:3:"㎢";s:3:"km2";s:3:"㎣";s:3:"mm3";s:3:"㎤";s:3:"cm3";s:3:"㎥";s:2:"m3";s:3:"㎦";s:3:"km3";s:3:"㎧";s:5:"m∕s";s:3:"㎨";s:6:"m∕s2";s:3:"㎩";s:2:"Pa";s:3:"㎪";s:3:"kPa";s:3:"㎫";s:3:"MPa";s:3:"㎬";s:3:"GPa";s:3:"㎭";s:3:"rad";s:3:"㎮";s:7:"rad∕s";s:3:"㎯";s:8:"rad∕s2";s:3:"㎰";s:2:"ps";s:3:"㎱";s:2:"ns";s:3:"㎲";s:3:"μs";s:3:"㎳";s:2:"ms";s:3:"㎴";s:2:"pV";s:3:"㎵";s:2:"nV";s:3:"㎶";s:3:"μV";s:3:"㎷";s:2:"mV";s:3:"㎸";s:2:"kV";s:3:"㎹";s:2:"MV";s:3:"㎺";s:2:"pW";s:3:"㎻";s:2:"nW";s:3:"㎼";s:3:"μW";s:3:"㎽";s:2:"mW";s:3:"㎾";s:2:"kW";s:3:"㎿";s:2:"MW";s:3:"㏀";s:3:"kΩ";s:3:"㏁";s:3:"MΩ";s:3:"㏂";s:4:"a.m.";s:3:"㏃";s:2:"Bq";s:3:"㏄";s:2:"cc";s:3:"㏅";s:2:"cd";s:3:"㏆";s:6:"C∕kg";s:3:"㏇";s:3:"Co.";s:3:"㏈";s:2:"dB";s:3:"㏉";s:2:"Gy";s:3:"㏊";s:2:"ha";s:3:"㏋";s:2:"HP";s:3:"㏌";s:2:"in";s:3:"㏍";s:2:"KK";s:3:"㏎";s:2:"KM";s:3:"㏏";s:2:"kt";s:3:"㏐";s:2:"lm";s:3:"㏑";s:2:"ln";s:3:"㏒";s:3:"log";s:3:"㏓";s:2:"lx";s:3:"㏔";s:2:"mb";s:3:"㏕";s:3:"mil";s:3:"㏖";s:3:"mol";s:3:"㏗";s:2:"PH";s:3:"㏘";s:4:"p.m.";s:3:"㏙";s:3:"PPM";s:3:"㏚";s:2:"PR";s:3:"㏛";s:2:"sr";s:3:"㏜";s:2:"Sv";s:3:"㏝";s:2:"Wb";s:3:"㏞";s:5:"V∕m";s:3:"㏟";s:5:"A∕m";s:3:"㏠";s:4:"1日";s:3:"㏡";s:4:"2日";s:3:"㏢";s:4:"3日";s:3:"㏣";s:4:"4日";s:3:"㏤";s:4:"5日";s:3:"㏥";s:4:"6日";s:3:"㏦";s:4:"7日";s:3:"㏧";s:4:"8日";s:3:"㏨";s:4:"9日";s:3:"㏩";s:5:"10日";s:3:"㏪";s:5:"11日";s:3:"㏫";s:5:"12日";s:3:"㏬";s:5:"13日";s:3:"㏭";s:5:"14日";s:3:"㏮";s:5:"15日";s:3:"㏯";s:5:"16日";s:3:"㏰";s:5:"17日";s:3:"㏱";s:5:"18日";s:3:"㏲";s:5:"19日";s:3:"㏳";s:5:"20日";s:3:"㏴";s:5:"21日";s:3:"㏵";s:5:"22日";s:3:"㏶";s:5:"23日";s:3:"㏷";s:5:"24日";s:3:"㏸";s:5:"25日";s:3:"㏹";s:5:"26日";s:3:"㏺";s:5:"27日";s:3:"㏻";s:5:"28日";s:3:"㏼";s:5:"29日";s:3:"㏽";s:5:"30日";s:3:"㏾";s:5:"31日";s:3:"㏿";s:3:"gal";s:3:"ꝰ";s:3:"ꝯ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:3:"𤋮";s:4:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"ff";s:2:"ff";s:3:"fi";s:2:"fi";s:3:"fl";s:2:"fl";s:3:"ffi";s:3:"ffi";s:3:"ffl";s:3:"ffl";s:3:"ſt";s:2:"st";s:3:"st";s:2:"st";s:3:"ﬓ";s:4:"մն";s:3:"ﬔ";s:4:"մե";s:3:"ﬕ";s:4:"մի";s:3:"ﬖ";s:4:"վն";s:3:"ﬗ";s:4:"մխ";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"ﬠ";s:2:"ע";s:3:"ﬡ";s:2:"א";s:3:"ﬢ";s:2:"ד";s:3:"ﬣ";s:2:"ה";s:3:"ﬤ";s:2:"כ";s:3:"ﬥ";s:2:"ל";s:3:"ﬦ";s:2:"ם";s:3:"ﬧ";s:2:"ר";s:3:"ﬨ";s:2:"ת";s:3:"﬩";s:1:"+";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:3:"ﭏ";s:4:"אל";s:3:"ﭐ";s:2:"ٱ";s:3:"ﭑ";s:2:"ٱ";s:3:"ﭒ";s:2:"ٻ";s:3:"ﭓ";s:2:"ٻ";s:3:"ﭔ";s:2:"ٻ";s:3:"ﭕ";s:2:"ٻ";s:3:"ﭖ";s:2:"پ";s:3:"ﭗ";s:2:"پ";s:3:"ﭘ";s:2:"پ";s:3:"ﭙ";s:2:"پ";s:3:"ﭚ";s:2:"ڀ";s:3:"ﭛ";s:2:"ڀ";s:3:"ﭜ";s:2:"ڀ";s:3:"ﭝ";s:2:"ڀ";s:3:"ﭞ";s:2:"ٺ";s:3:"ﭟ";s:2:"ٺ";s:3:"ﭠ";s:2:"ٺ";s:3:"ﭡ";s:2:"ٺ";s:3:"ﭢ";s:2:"ٿ";s:3:"ﭣ";s:2:"ٿ";s:3:"ﭤ";s:2:"ٿ";s:3:"ﭥ";s:2:"ٿ";s:3:"ﭦ";s:2:"ٹ";s:3:"ﭧ";s:2:"ٹ";s:3:"ﭨ";s:2:"ٹ";s:3:"ﭩ";s:2:"ٹ";s:3:"ﭪ";s:2:"ڤ";s:3:"ﭫ";s:2:"ڤ";s:3:"ﭬ";s:2:"ڤ";s:3:"ﭭ";s:2:"ڤ";s:3:"ﭮ";s:2:"ڦ";s:3:"ﭯ";s:2:"ڦ";s:3:"ﭰ";s:2:"ڦ";s:3:"ﭱ";s:2:"ڦ";s:3:"ﭲ";s:2:"ڄ";s:3:"ﭳ";s:2:"ڄ";s:3:"ﭴ";s:2:"ڄ";s:3:"ﭵ";s:2:"ڄ";s:3:"ﭶ";s:2:"ڃ";s:3:"ﭷ";s:2:"ڃ";s:3:"ﭸ";s:2:"ڃ";s:3:"ﭹ";s:2:"ڃ";s:3:"ﭺ";s:2:"چ";s:3:"ﭻ";s:2:"چ";s:3:"ﭼ";s:2:"چ";s:3:"ﭽ";s:2:"چ";s:3:"ﭾ";s:2:"ڇ";s:3:"ﭿ";s:2:"ڇ";s:3:"ﮀ";s:2:"ڇ";s:3:"ﮁ";s:2:"ڇ";s:3:"ﮂ";s:2:"ڍ";s:3:"ﮃ";s:2:"ڍ";s:3:"ﮄ";s:2:"ڌ";s:3:"ﮅ";s:2:"ڌ";s:3:"ﮆ";s:2:"ڎ";s:3:"ﮇ";s:2:"ڎ";s:3:"ﮈ";s:2:"ڈ";s:3:"ﮉ";s:2:"ڈ";s:3:"ﮊ";s:2:"ژ";s:3:"ﮋ";s:2:"ژ";s:3:"ﮌ";s:2:"ڑ";s:3:"ﮍ";s:2:"ڑ";s:3:"ﮎ";s:2:"ک";s:3:"ﮏ";s:2:"ک";s:3:"ﮐ";s:2:"ک";s:3:"ﮑ";s:2:"ک";s:3:"ﮒ";s:2:"گ";s:3:"ﮓ";s:2:"گ";s:3:"ﮔ";s:2:"گ";s:3:"ﮕ";s:2:"گ";s:3:"ﮖ";s:2:"ڳ";s:3:"ﮗ";s:2:"ڳ";s:3:"ﮘ";s:2:"ڳ";s:3:"ﮙ";s:2:"ڳ";s:3:"ﮚ";s:2:"ڱ";s:3:"ﮛ";s:2:"ڱ";s:3:"ﮜ";s:2:"ڱ";s:3:"ﮝ";s:2:"ڱ";s:3:"ﮞ";s:2:"ں";s:3:"ﮟ";s:2:"ں";s:3:"ﮠ";s:2:"ڻ";s:3:"ﮡ";s:2:"ڻ";s:3:"ﮢ";s:2:"ڻ";s:3:"ﮣ";s:2:"ڻ";s:3:"ﮤ";s:4:"ۀ";s:3:"ﮥ";s:4:"ۀ";s:3:"ﮦ";s:2:"ہ";s:3:"ﮧ";s:2:"ہ";s:3:"ﮨ";s:2:"ہ";s:3:"ﮩ";s:2:"ہ";s:3:"ﮪ";s:2:"ھ";s:3:"ﮫ";s:2:"ھ";s:3:"ﮬ";s:2:"ھ";s:3:"ﮭ";s:2:"ھ";s:3:"ﮮ";s:2:"ے";s:3:"ﮯ";s:2:"ے";s:3:"ﮰ";s:4:"ۓ";s:3:"ﮱ";s:4:"ۓ";s:3:"ﯓ";s:2:"ڭ";s:3:"ﯔ";s:2:"ڭ";s:3:"ﯕ";s:2:"ڭ";s:3:"ﯖ";s:2:"ڭ";s:3:"ﯗ";s:2:"ۇ";s:3:"ﯘ";s:2:"ۇ";s:3:"ﯙ";s:2:"ۆ";s:3:"ﯚ";s:2:"ۆ";s:3:"ﯛ";s:2:"ۈ";s:3:"ﯜ";s:2:"ۈ";s:3:"ﯝ";s:4:"ۇٴ";s:3:"ﯞ";s:2:"ۋ";s:3:"ﯟ";s:2:"ۋ";s:3:"ﯠ";s:2:"ۅ";s:3:"ﯡ";s:2:"ۅ";s:3:"ﯢ";s:2:"ۉ";s:3:"ﯣ";s:2:"ۉ";s:3:"ﯤ";s:2:"ې";s:3:"ﯥ";s:2:"ې";s:3:"ﯦ";s:2:"ې";s:3:"ﯧ";s:2:"ې";s:3:"ﯨ";s:2:"ى";s:3:"ﯩ";s:2:"ى";s:3:"ﯪ";s:6:"ئا";s:3:"ﯫ";s:6:"ئا";s:3:"ﯬ";s:6:"ئە";s:3:"ﯭ";s:6:"ئە";s:3:"ﯮ";s:6:"ئو";s:3:"ﯯ";s:6:"ئو";s:3:"ﯰ";s:6:"ئۇ";s:3:"ﯱ";s:6:"ئۇ";s:3:"ﯲ";s:6:"ئۆ";s:3:"ﯳ";s:6:"ئۆ";s:3:"ﯴ";s:6:"ئۈ";s:3:"ﯵ";s:6:"ئۈ";s:3:"ﯶ";s:6:"ئې";s:3:"ﯷ";s:6:"ئې";s:3:"ﯸ";s:6:"ئې";s:3:"ﯹ";s:6:"ئى";s:3:"ﯺ";s:6:"ئى";s:3:"ﯻ";s:6:"ئى";s:3:"ﯼ";s:2:"ی";s:3:"ﯽ";s:2:"ی";s:3:"ﯾ";s:2:"ی";s:3:"ﯿ";s:2:"ی";s:3:"ﰀ";s:6:"ئج";s:3:"ﰁ";s:6:"ئح";s:3:"ﰂ";s:6:"ئم";s:3:"ﰃ";s:6:"ئى";s:3:"ﰄ";s:6:"ئي";s:3:"ﰅ";s:4:"بج";s:3:"ﰆ";s:4:"بح";s:3:"ﰇ";s:4:"بخ";s:3:"ﰈ";s:4:"بم";s:3:"ﰉ";s:4:"بى";s:3:"ﰊ";s:4:"بي";s:3:"ﰋ";s:4:"تج";s:3:"ﰌ";s:4:"تح";s:3:"ﰍ";s:4:"تخ";s:3:"ﰎ";s:4:"تم";s:3:"ﰏ";s:4:"تى";s:3:"ﰐ";s:4:"تي";s:3:"ﰑ";s:4:"ثج";s:3:"ﰒ";s:4:"ثم";s:3:"ﰓ";s:4:"ثى";s:3:"ﰔ";s:4:"ثي";s:3:"ﰕ";s:4:"جح";s:3:"ﰖ";s:4:"جم";s:3:"ﰗ";s:4:"حج";s:3:"ﰘ";s:4:"حم";s:3:"ﰙ";s:4:"خج";s:3:"ﰚ";s:4:"خح";s:3:"ﰛ";s:4:"خم";s:3:"ﰜ";s:4:"سج";s:3:"ﰝ";s:4:"سح";s:3:"ﰞ";s:4:"سخ";s:3:"ﰟ";s:4:"سم";s:3:"ﰠ";s:4:"صح";s:3:"ﰡ";s:4:"صم";s:3:"ﰢ";s:4:"ضج";s:3:"ﰣ";s:4:"ضح";s:3:"ﰤ";s:4:"ضخ";s:3:"ﰥ";s:4:"ضم";s:3:"ﰦ";s:4:"طح";s:3:"ﰧ";s:4:"طم";s:3:"ﰨ";s:4:"ظم";s:3:"ﰩ";s:4:"عج";s:3:"ﰪ";s:4:"عم";s:3:"ﰫ";s:4:"غج";s:3:"ﰬ";s:4:"غم";s:3:"ﰭ";s:4:"فج";s:3:"ﰮ";s:4:"فح";s:3:"ﰯ";s:4:"فخ";s:3:"ﰰ";s:4:"فم";s:3:"ﰱ";s:4:"فى";s:3:"ﰲ";s:4:"في";s:3:"ﰳ";s:4:"قح";s:3:"ﰴ";s:4:"قم";s:3:"ﰵ";s:4:"قى";s:3:"ﰶ";s:4:"قي";s:3:"ﰷ";s:4:"كا";s:3:"ﰸ";s:4:"كج";s:3:"ﰹ";s:4:"كح";s:3:"ﰺ";s:4:"كخ";s:3:"ﰻ";s:4:"كل";s:3:"ﰼ";s:4:"كم";s:3:"ﰽ";s:4:"كى";s:3:"ﰾ";s:4:"كي";s:3:"ﰿ";s:4:"لج";s:3:"ﱀ";s:4:"لح";s:3:"ﱁ";s:4:"لخ";s:3:"ﱂ";s:4:"لم";s:3:"ﱃ";s:4:"لى";s:3:"ﱄ";s:4:"لي";s:3:"ﱅ";s:4:"مج";s:3:"ﱆ";s:4:"مح";s:3:"ﱇ";s:4:"مخ";s:3:"ﱈ";s:4:"مم";s:3:"ﱉ";s:4:"مى";s:3:"ﱊ";s:4:"مي";s:3:"ﱋ";s:4:"نج";s:3:"ﱌ";s:4:"نح";s:3:"ﱍ";s:4:"نخ";s:3:"ﱎ";s:4:"نم";s:3:"ﱏ";s:4:"نى";s:3:"ﱐ";s:4:"ني";s:3:"ﱑ";s:4:"هج";s:3:"ﱒ";s:4:"هم";s:3:"ﱓ";s:4:"هى";s:3:"ﱔ";s:4:"هي";s:3:"ﱕ";s:4:"يج";s:3:"ﱖ";s:4:"يح";s:3:"ﱗ";s:4:"يخ";s:3:"ﱘ";s:4:"يم";s:3:"ﱙ";s:4:"يى";s:3:"ﱚ";s:4:"يي";s:3:"ﱛ";s:4:"ذٰ";s:3:"ﱜ";s:4:"رٰ";s:3:"ﱝ";s:4:"ىٰ";s:3:"ﱞ";s:5:" ٌّ";s:3:"ﱟ";s:5:" ٍّ";s:3:"ﱠ";s:5:" َّ";s:3:"ﱡ";s:5:" ُّ";s:3:"ﱢ";s:5:" ِّ";s:3:"ﱣ";s:5:" ّٰ";s:3:"ﱤ";s:6:"ئر";s:3:"ﱥ";s:6:"ئز";s:3:"ﱦ";s:6:"ئم";s:3:"ﱧ";s:6:"ئن";s:3:"ﱨ";s:6:"ئى";s:3:"ﱩ";s:6:"ئي";s:3:"ﱪ";s:4:"بر";s:3:"ﱫ";s:4:"بز";s:3:"ﱬ";s:4:"بم";s:3:"ﱭ";s:4:"بن";s:3:"ﱮ";s:4:"بى";s:3:"ﱯ";s:4:"بي";s:3:"ﱰ";s:4:"تر";s:3:"ﱱ";s:4:"تز";s:3:"ﱲ";s:4:"تم";s:3:"ﱳ";s:4:"تن";s:3:"ﱴ";s:4:"تى";s:3:"ﱵ";s:4:"تي";s:3:"ﱶ";s:4:"ثر";s:3:"ﱷ";s:4:"ثز";s:3:"ﱸ";s:4:"ثم";s:3:"ﱹ";s:4:"ثن";s:3:"ﱺ";s:4:"ثى";s:3:"ﱻ";s:4:"ثي";s:3:"ﱼ";s:4:"فى";s:3:"ﱽ";s:4:"في";s:3:"ﱾ";s:4:"قى";s:3:"ﱿ";s:4:"قي";s:3:"ﲀ";s:4:"كا";s:3:"ﲁ";s:4:"كل";s:3:"ﲂ";s:4:"كم";s:3:"ﲃ";s:4:"كى";s:3:"ﲄ";s:4:"كي";s:3:"ﲅ";s:4:"لم";s:3:"ﲆ";s:4:"لى";s:3:"ﲇ";s:4:"لي";s:3:"ﲈ";s:4:"ما";s:3:"ﲉ";s:4:"مم";s:3:"ﲊ";s:4:"نر";s:3:"ﲋ";s:4:"نز";s:3:"ﲌ";s:4:"نم";s:3:"ﲍ";s:4:"نن";s:3:"ﲎ";s:4:"نى";s:3:"ﲏ";s:4:"ني";s:3:"ﲐ";s:4:"ىٰ";s:3:"ﲑ";s:4:"ير";s:3:"ﲒ";s:4:"يز";s:3:"ﲓ";s:4:"يم";s:3:"ﲔ";s:4:"ين";s:3:"ﲕ";s:4:"يى";s:3:"ﲖ";s:4:"يي";s:3:"ﲗ";s:6:"ئج";s:3:"ﲘ";s:6:"ئح";s:3:"ﲙ";s:6:"ئخ";s:3:"ﲚ";s:6:"ئم";s:3:"ﲛ";s:6:"ئه";s:3:"ﲜ";s:4:"بج";s:3:"ﲝ";s:4:"بح";s:3:"ﲞ";s:4:"بخ";s:3:"ﲟ";s:4:"بم";s:3:"ﲠ";s:4:"به";s:3:"ﲡ";s:4:"تج";s:3:"ﲢ";s:4:"تح";s:3:"ﲣ";s:4:"تخ";s:3:"ﲤ";s:4:"تم";s:3:"ﲥ";s:4:"ته";s:3:"ﲦ";s:4:"ثم";s:3:"ﲧ";s:4:"جح";s:3:"ﲨ";s:4:"جم";s:3:"ﲩ";s:4:"حج";s:3:"ﲪ";s:4:"حم";s:3:"ﲫ";s:4:"خج";s:3:"ﲬ";s:4:"خم";s:3:"ﲭ";s:4:"سج";s:3:"ﲮ";s:4:"سح";s:3:"ﲯ";s:4:"سخ";s:3:"ﲰ";s:4:"سم";s:3:"ﲱ";s:4:"صح";s:3:"ﲲ";s:4:"صخ";s:3:"ﲳ";s:4:"صم";s:3:"ﲴ";s:4:"ضج";s:3:"ﲵ";s:4:"ضح";s:3:"ﲶ";s:4:"ضخ";s:3:"ﲷ";s:4:"ضم";s:3:"ﲸ";s:4:"طح";s:3:"ﲹ";s:4:"ظم";s:3:"ﲺ";s:4:"عج";s:3:"ﲻ";s:4:"عم";s:3:"ﲼ";s:4:"غج";s:3:"ﲽ";s:4:"غم";s:3:"ﲾ";s:4:"فج";s:3:"ﲿ";s:4:"فح";s:3:"ﳀ";s:4:"فخ";s:3:"ﳁ";s:4:"فم";s:3:"ﳂ";s:4:"قح";s:3:"ﳃ";s:4:"قم";s:3:"ﳄ";s:4:"كج";s:3:"ﳅ";s:4:"كح";s:3:"ﳆ";s:4:"كخ";s:3:"ﳇ";s:4:"كل";s:3:"ﳈ";s:4:"كم";s:3:"ﳉ";s:4:"لج";s:3:"ﳊ";s:4:"لح";s:3:"ﳋ";s:4:"لخ";s:3:"ﳌ";s:4:"لم";s:3:"ﳍ";s:4:"له";s:3:"ﳎ";s:4:"مج";s:3:"ﳏ";s:4:"مح";s:3:"ﳐ";s:4:"مخ";s:3:"ﳑ";s:4:"مم";s:3:"ﳒ";s:4:"نج";s:3:"ﳓ";s:4:"نح";s:3:"ﳔ";s:4:"نخ";s:3:"ﳕ";s:4:"نم";s:3:"ﳖ";s:4:"نه";s:3:"ﳗ";s:4:"هج";s:3:"ﳘ";s:4:"هم";s:3:"ﳙ";s:4:"هٰ";s:3:"ﳚ";s:4:"يج";s:3:"ﳛ";s:4:"يح";s:3:"ﳜ";s:4:"يخ";s:3:"ﳝ";s:4:"يم";s:3:"ﳞ";s:4:"يه";s:3:"ﳟ";s:6:"ئم";s:3:"ﳠ";s:6:"ئه";s:3:"ﳡ";s:4:"بم";s:3:"ﳢ";s:4:"به";s:3:"ﳣ";s:4:"تم";s:3:"ﳤ";s:4:"ته";s:3:"ﳥ";s:4:"ثم";s:3:"ﳦ";s:4:"ثه";s:3:"ﳧ";s:4:"سم";s:3:"ﳨ";s:4:"سه";s:3:"ﳩ";s:4:"شم";s:3:"ﳪ";s:4:"شه";s:3:"ﳫ";s:4:"كل";s:3:"ﳬ";s:4:"كم";s:3:"ﳭ";s:4:"لم";s:3:"ﳮ";s:4:"نم";s:3:"ﳯ";s:4:"نه";s:3:"ﳰ";s:4:"يم";s:3:"ﳱ";s:4:"يه";s:3:"ﳲ";s:6:"ـَّ";s:3:"ﳳ";s:6:"ـُّ";s:3:"ﳴ";s:6:"ـِّ";s:3:"ﳵ";s:4:"طى";s:3:"ﳶ";s:4:"طي";s:3:"ﳷ";s:4:"عى";s:3:"ﳸ";s:4:"عي";s:3:"ﳹ";s:4:"غى";s:3:"ﳺ";s:4:"غي";s:3:"ﳻ";s:4:"سى";s:3:"ﳼ";s:4:"سي";s:3:"ﳽ";s:4:"شى";s:3:"ﳾ";s:4:"شي";s:3:"ﳿ";s:4:"حى";s:3:"ﴀ";s:4:"حي";s:3:"ﴁ";s:4:"جى";s:3:"ﴂ";s:4:"جي";s:3:"ﴃ";s:4:"خى";s:3:"ﴄ";s:4:"خي";s:3:"ﴅ";s:4:"صى";s:3:"ﴆ";s:4:"صي";s:3:"ﴇ";s:4:"ضى";s:3:"ﴈ";s:4:"ضي";s:3:"ﴉ";s:4:"شج";s:3:"ﴊ";s:4:"شح";s:3:"ﴋ";s:4:"شخ";s:3:"ﴌ";s:4:"شم";s:3:"ﴍ";s:4:"شر";s:3:"ﴎ";s:4:"سر";s:3:"ﴏ";s:4:"صر";s:3:"ﴐ";s:4:"ضر";s:3:"ﴑ";s:4:"طى";s:3:"ﴒ";s:4:"طي";s:3:"ﴓ";s:4:"عى";s:3:"ﴔ";s:4:"عي";s:3:"ﴕ";s:4:"غى";s:3:"ﴖ";s:4:"غي";s:3:"ﴗ";s:4:"سى";s:3:"ﴘ";s:4:"سي";s:3:"ﴙ";s:4:"شى";s:3:"ﴚ";s:4:"شي";s:3:"ﴛ";s:4:"حى";s:3:"ﴜ";s:4:"حي";s:3:"ﴝ";s:4:"جى";s:3:"ﴞ";s:4:"جي";s:3:"ﴟ";s:4:"خى";s:3:"ﴠ";s:4:"خي";s:3:"ﴡ";s:4:"صى";s:3:"ﴢ";s:4:"صي";s:3:"ﴣ";s:4:"ضى";s:3:"ﴤ";s:4:"ضي";s:3:"ﴥ";s:4:"شج";s:3:"ﴦ";s:4:"شح";s:3:"ﴧ";s:4:"شخ";s:3:"ﴨ";s:4:"شم";s:3:"ﴩ";s:4:"شر";s:3:"ﴪ";s:4:"سر";s:3:"ﴫ";s:4:"صر";s:3:"ﴬ";s:4:"ضر";s:3:"ﴭ";s:4:"شج";s:3:"ﴮ";s:4:"شح";s:3:"ﴯ";s:4:"شخ";s:3:"ﴰ";s:4:"شم";s:3:"ﴱ";s:4:"سه";s:3:"ﴲ";s:4:"شه";s:3:"ﴳ";s:4:"طم";s:3:"ﴴ";s:4:"سج";s:3:"ﴵ";s:4:"سح";s:3:"ﴶ";s:4:"سخ";s:3:"ﴷ";s:4:"شج";s:3:"ﴸ";s:4:"شح";s:3:"ﴹ";s:4:"شخ";s:3:"ﴺ";s:4:"طم";s:3:"ﴻ";s:4:"ظم";s:3:"ﴼ";s:4:"اً";s:3:"ﴽ";s:4:"اً";s:3:"ﵐ";s:6:"تجم";s:3:"ﵑ";s:6:"تحج";s:3:"ﵒ";s:6:"تحج";s:3:"ﵓ";s:6:"تحم";s:3:"ﵔ";s:6:"تخم";s:3:"ﵕ";s:6:"تمج";s:3:"ﵖ";s:6:"تمح";s:3:"ﵗ";s:6:"تمخ";s:3:"ﵘ";s:6:"جمح";s:3:"ﵙ";s:6:"جمح";s:3:"ﵚ";s:6:"حمي";s:3:"ﵛ";s:6:"حمى";s:3:"ﵜ";s:6:"سحج";s:3:"ﵝ";s:6:"سجح";s:3:"ﵞ";s:6:"سجى";s:3:"ﵟ";s:6:"سمح";s:3:"ﵠ";s:6:"سمح";s:3:"ﵡ";s:6:"سمج";s:3:"ﵢ";s:6:"سمم";s:3:"ﵣ";s:6:"سمم";s:3:"ﵤ";s:6:"صحح";s:3:"ﵥ";s:6:"صحح";s:3:"ﵦ";s:6:"صمم";s:3:"ﵧ";s:6:"شحم";s:3:"ﵨ";s:6:"شحم";s:3:"ﵩ";s:6:"شجي";s:3:"ﵪ";s:6:"شمخ";s:3:"ﵫ";s:6:"شمخ";s:3:"ﵬ";s:6:"شمم";s:3:"ﵭ";s:6:"شمم";s:3:"ﵮ";s:6:"ضحى";s:3:"ﵯ";s:6:"ضخم";s:3:"ﵰ";s:6:"ضخم";s:3:"ﵱ";s:6:"طمح";s:3:"ﵲ";s:6:"طمح";s:3:"ﵳ";s:6:"طمم";s:3:"ﵴ";s:6:"طمي";s:3:"ﵵ";s:6:"عجم";s:3:"ﵶ";s:6:"عمم";s:3:"ﵷ";s:6:"عمم";s:3:"ﵸ";s:6:"عمى";s:3:"ﵹ";s:6:"غمم";s:3:"ﵺ";s:6:"غمي";s:3:"ﵻ";s:6:"غمى";s:3:"ﵼ";s:6:"فخم";s:3:"ﵽ";s:6:"فخم";s:3:"ﵾ";s:6:"قمح";s:3:"ﵿ";s:6:"قمم";s:3:"ﶀ";s:6:"لحم";s:3:"ﶁ";s:6:"لحي";s:3:"ﶂ";s:6:"لحى";s:3:"ﶃ";s:6:"لجج";s:3:"ﶄ";s:6:"لجج";s:3:"ﶅ";s:6:"لخم";s:3:"ﶆ";s:6:"لخم";s:3:"ﶇ";s:6:"لمح";s:3:"ﶈ";s:6:"لمح";s:3:"ﶉ";s:6:"محج";s:3:"ﶊ";s:6:"محم";s:3:"ﶋ";s:6:"محي";s:3:"ﶌ";s:6:"مجح";s:3:"ﶍ";s:6:"مجم";s:3:"ﶎ";s:6:"مخج";s:3:"ﶏ";s:6:"مخم";s:3:"ﶒ";s:6:"مجخ";s:3:"ﶓ";s:6:"همج";s:3:"ﶔ";s:6:"همم";s:3:"ﶕ";s:6:"نحم";s:3:"ﶖ";s:6:"نحى";s:3:"ﶗ";s:6:"نجم";s:3:"ﶘ";s:6:"نجم";s:3:"ﶙ";s:6:"نجى";s:3:"ﶚ";s:6:"نمي";s:3:"ﶛ";s:6:"نمى";s:3:"ﶜ";s:6:"يمم";s:3:"ﶝ";s:6:"يمم";s:3:"ﶞ";s:6:"بخي";s:3:"ﶟ";s:6:"تجي";s:3:"ﶠ";s:6:"تجى";s:3:"ﶡ";s:6:"تخي";s:3:"ﶢ";s:6:"تخى";s:3:"ﶣ";s:6:"تمي";s:3:"ﶤ";s:6:"تمى";s:3:"ﶥ";s:6:"جمي";s:3:"ﶦ";s:6:"جحى";s:3:"ﶧ";s:6:"جمى";s:3:"ﶨ";s:6:"سخى";s:3:"ﶩ";s:6:"صحي";s:3:"ﶪ";s:6:"شحي";s:3:"ﶫ";s:6:"ضحي";s:3:"ﶬ";s:6:"لجي";s:3:"ﶭ";s:6:"لمي";s:3:"ﶮ";s:6:"يحي";s:3:"ﶯ";s:6:"يجي";s:3:"ﶰ";s:6:"يمي";s:3:"ﶱ";s:6:"ممي";s:3:"ﶲ";s:6:"قمي";s:3:"ﶳ";s:6:"نحي";s:3:"ﶴ";s:6:"قمح";s:3:"ﶵ";s:6:"لحم";s:3:"ﶶ";s:6:"عمي";s:3:"ﶷ";s:6:"كمي";s:3:"ﶸ";s:6:"نجح";s:3:"ﶹ";s:6:"مخي";s:3:"ﶺ";s:6:"لجم";s:3:"ﶻ";s:6:"كمم";s:3:"ﶼ";s:6:"لجم";s:3:"ﶽ";s:6:"نجح";s:3:"ﶾ";s:6:"جحي";s:3:"ﶿ";s:6:"حجي";s:3:"ﷀ";s:6:"مجي";s:3:"ﷁ";s:6:"فمي";s:3:"ﷂ";s:6:"بحي";s:3:"ﷃ";s:6:"كمم";s:3:"ﷄ";s:6:"عجم";s:3:"ﷅ";s:6:"صمم";s:3:"ﷆ";s:6:"سخي";s:3:"ﷇ";s:6:"نجي";s:3:"ﷰ";s:6:"صلے";s:3:"ﷱ";s:6:"قلے";s:3:"ﷲ";s:8:"الله";s:3:"ﷳ";s:8:"اكبر";s:3:"ﷴ";s:8:"محمد";s:3:"ﷵ";s:8:"صلعم";s:3:"ﷶ";s:8:"رسول";s:3:"ﷷ";s:8:"عليه";s:3:"ﷸ";s:8:"وسلم";s:3:"ﷹ";s:6:"صلى";s:3:"ﷺ";s:33:"صلى الله عليه وسلم";s:3:"ﷻ";s:15:"جل جلاله";s:3:"﷼";s:8:"ریال";s:3:"︐";s:1:",";s:3:"︑";s:3:"、";s:3:"︒";s:3:"。";s:3:"︓";s:1:":";s:3:"︔";s:1:";";s:3:"︕";s:1:"!";s:3:"︖";s:1:"?";s:3:"︗";s:3:"〖";s:3:"︘";s:3:"〗";s:3:"︙";s:3:"...";s:3:"︰";s:2:"..";s:3:"︱";s:3:"—";s:3:"︲";s:3:"–";s:3:"︳";s:1:"_";s:3:"︴";s:1:"_";s:3:"︵";s:1:"(";s:3:"︶";s:1:")";s:3:"︷";s:1:"{";s:3:"︸";s:1:"}";s:3:"︹";s:3:"〔";s:3:"︺";s:3:"〕";s:3:"︻";s:3:"【";s:3:"︼";s:3:"】";s:3:"︽";s:3:"《";s:3:"︾";s:3:"》";s:3:"︿";s:3:"〈";s:3:"﹀";s:3:"〉";s:3:"﹁";s:3:"「";s:3:"﹂";s:3:"」";s:3:"﹃";s:3:"『";s:3:"﹄";s:3:"』";s:3:"﹇";s:1:"[";s:3:"﹈";s:1:"]";s:3:"﹉";s:3:" ̅";s:3:"﹊";s:3:" ̅";s:3:"﹋";s:3:" ̅";s:3:"﹌";s:3:" ̅";s:3:"﹍";s:1:"_";s:3:"﹎";s:1:"_";s:3:"﹏";s:1:"_";s:3:"﹐";s:1:",";s:3:"﹑";s:3:"、";s:3:"﹒";s:1:".";s:3:"﹔";s:1:";";s:3:"﹕";s:1:":";s:3:"﹖";s:1:"?";s:3:"﹗";s:1:"!";s:3:"﹘";s:3:"—";s:3:"﹙";s:1:"(";s:3:"﹚";s:1:")";s:3:"﹛";s:1:"{";s:3:"﹜";s:1:"}";s:3:"﹝";s:3:"〔";s:3:"﹞";s:3:"〕";s:3:"﹟";s:1:"#";s:3:"﹠";s:1:"&";s:3:"﹡";s:1:"*";s:3:"﹢";s:1:"+";s:3:"﹣";s:1:"-";s:3:"﹤";s:1:"<";s:3:"﹥";s:1:">";s:3:"﹦";s:1:"=";s:3:"﹨";s:1:"\\";s:3:"﹩";s:1:"$";s:3:"﹪";s:1:"%";s:3:"﹫";s:1:"@";s:3:"ﹰ";s:3:" ً";s:3:"ﹱ";s:4:"ـً";s:3:"ﹲ";s:3:" ٌ";s:3:"ﹴ";s:3:" ٍ";s:3:"ﹶ";s:3:" َ";s:3:"ﹷ";s:4:"ـَ";s:3:"ﹸ";s:3:" ُ";s:3:"ﹹ";s:4:"ـُ";s:3:"ﹺ";s:3:" ِ";s:3:"ﹻ";s:4:"ـِ";s:3:"ﹼ";s:3:" ّ";s:3:"ﹽ";s:4:"ـّ";s:3:"ﹾ";s:3:" ْ";s:3:"ﹿ";s:4:"ـْ";s:3:"ﺀ";s:2:"ء";s:3:"ﺁ";s:4:"آ";s:3:"ﺂ";s:4:"آ";s:3:"ﺃ";s:4:"أ";s:3:"ﺄ";s:4:"أ";s:3:"ﺅ";s:4:"ؤ";s:3:"ﺆ";s:4:"ؤ";s:3:"ﺇ";s:4:"إ";s:3:"ﺈ";s:4:"إ";s:3:"ﺉ";s:4:"ئ";s:3:"ﺊ";s:4:"ئ";s:3:"ﺋ";s:4:"ئ";s:3:"ﺌ";s:4:"ئ";s:3:"ﺍ";s:2:"ا";s:3:"ﺎ";s:2:"ا";s:3:"ﺏ";s:2:"ب";s:3:"ﺐ";s:2:"ب";s:3:"ﺑ";s:2:"ب";s:3:"ﺒ";s:2:"ب";s:3:"ﺓ";s:2:"ة";s:3:"ﺔ";s:2:"ة";s:3:"ﺕ";s:2:"ت";s:3:"ﺖ";s:2:"ت";s:3:"ﺗ";s:2:"ت";s:3:"ﺘ";s:2:"ت";s:3:"ﺙ";s:2:"ث";s:3:"ﺚ";s:2:"ث";s:3:"ﺛ";s:2:"ث";s:3:"ﺜ";s:2:"ث";s:3:"ﺝ";s:2:"ج";s:3:"ﺞ";s:2:"ج";s:3:"ﺟ";s:2:"ج";s:3:"ﺠ";s:2:"ج";s:3:"ﺡ";s:2:"ح";s:3:"ﺢ";s:2:"ح";s:3:"ﺣ";s:2:"ح";s:3:"ﺤ";s:2:"ح";s:3:"ﺥ";s:2:"خ";s:3:"ﺦ";s:2:"خ";s:3:"ﺧ";s:2:"خ";s:3:"ﺨ";s:2:"خ";s:3:"ﺩ";s:2:"د";s:3:"ﺪ";s:2:"د";s:3:"ﺫ";s:2:"ذ";s:3:"ﺬ";s:2:"ذ";s:3:"ﺭ";s:2:"ر";s:3:"ﺮ";s:2:"ر";s:3:"ﺯ";s:2:"ز";s:3:"ﺰ";s:2:"ز";s:3:"ﺱ";s:2:"س";s:3:"ﺲ";s:2:"س";s:3:"ﺳ";s:2:"س";s:3:"ﺴ";s:2:"س";s:3:"ﺵ";s:2:"ش";s:3:"ﺶ";s:2:"ش";s:3:"ﺷ";s:2:"ش";s:3:"ﺸ";s:2:"ش";s:3:"ﺹ";s:2:"ص";s:3:"ﺺ";s:2:"ص";s:3:"ﺻ";s:2:"ص";s:3:"ﺼ";s:2:"ص";s:3:"ﺽ";s:2:"ض";s:3:"ﺾ";s:2:"ض";s:3:"ﺿ";s:2:"ض";s:3:"ﻀ";s:2:"ض";s:3:"ﻁ";s:2:"ط";s:3:"ﻂ";s:2:"ط";s:3:"ﻃ";s:2:"ط";s:3:"ﻄ";s:2:"ط";s:3:"ﻅ";s:2:"ظ";s:3:"ﻆ";s:2:"ظ";s:3:"ﻇ";s:2:"ظ";s:3:"ﻈ";s:2:"ظ";s:3:"ﻉ";s:2:"ع";s:3:"ﻊ";s:2:"ع";s:3:"ﻋ";s:2:"ع";s:3:"ﻌ";s:2:"ع";s:3:"ﻍ";s:2:"غ";s:3:"ﻎ";s:2:"غ";s:3:"ﻏ";s:2:"غ";s:3:"ﻐ";s:2:"غ";s:3:"ﻑ";s:2:"ف";s:3:"ﻒ";s:2:"ف";s:3:"ﻓ";s:2:"ف";s:3:"ﻔ";s:2:"ف";s:3:"ﻕ";s:2:"ق";s:3:"ﻖ";s:2:"ق";s:3:"ﻗ";s:2:"ق";s:3:"ﻘ";s:2:"ق";s:3:"ﻙ";s:2:"ك";s:3:"ﻚ";s:2:"ك";s:3:"ﻛ";s:2:"ك";s:3:"ﻜ";s:2:"ك";s:3:"ﻝ";s:2:"ل";s:3:"ﻞ";s:2:"ل";s:3:"ﻟ";s:2:"ل";s:3:"ﻠ";s:2:"ل";s:3:"ﻡ";s:2:"م";s:3:"ﻢ";s:2:"م";s:3:"ﻣ";s:2:"م";s:3:"ﻤ";s:2:"م";s:3:"ﻥ";s:2:"ن";s:3:"ﻦ";s:2:"ن";s:3:"ﻧ";s:2:"ن";s:3:"ﻨ";s:2:"ن";s:3:"ﻩ";s:2:"ه";s:3:"ﻪ";s:2:"ه";s:3:"ﻫ";s:2:"ه";s:3:"ﻬ";s:2:"ه";s:3:"ﻭ";s:2:"و";s:3:"ﻮ";s:2:"و";s:3:"ﻯ";s:2:"ى";s:3:"ﻰ";s:2:"ى";s:3:"ﻱ";s:2:"ي";s:3:"ﻲ";s:2:"ي";s:3:"ﻳ";s:2:"ي";s:3:"ﻴ";s:2:"ي";s:3:"ﻵ";s:6:"لآ";s:3:"ﻶ";s:6:"لآ";s:3:"ﻷ";s:6:"لأ";s:3:"ﻸ";s:6:"لأ";s:3:"ﻹ";s:6:"لإ";s:3:"ﻺ";s:6:"لإ";s:3:"ﻻ";s:4:"لا";s:3:"ﻼ";s:4:"لا";s:3:"!";s:1:"!";s:3:""";s:1:""";s:3:"#";s:1:"#";s:3:"$";s:1:"$";s:3:"%";s:1:"%";s:3:"&";s:1:"&";s:3:"'";s:1:"\'";s:3:"(";s:1:"(";s:3:")";s:1:")";s:3:"*";s:1:"*";s:3:"+";s:1:"+";s:3:",";s:1:",";s:3:"-";s:1:"-";s:3:".";s:1:".";s:3:"/";s:1:"/";s:3:"0";s:1:"0";s:3:"1";s:1:"1";s:3:"2";s:1:"2";s:3:"3";s:1:"3";s:3:"4";s:1:"4";s:3:"5";s:1:"5";s:3:"6";s:1:"6";s:3:"7";s:1:"7";s:3:"8";s:1:"8";s:3:"9";s:1:"9";s:3:":";s:1:":";s:3:";";s:1:";";s:3:"<";s:1:"<";s:3:"=";s:1:"=";s:3:">";s:1:">";s:3:"?";s:1:"?";s:3:"@";s:1:"@";s:3:"A";s:1:"A";s:3:"B";s:1:"B";s:3:"C";s:1:"C";s:3:"D";s:1:"D";s:3:"E";s:1:"E";s:3:"F";s:1:"F";s:3:"G";s:1:"G";s:3:"H";s:1:"H";s:3:"I";s:1:"I";s:3:"J";s:1:"J";s:3:"K";s:1:"K";s:3:"L";s:1:"L";s:3:"M";s:1:"M";s:3:"N";s:1:"N";s:3:"O";s:1:"O";s:3:"P";s:1:"P";s:3:"Q";s:1:"Q";s:3:"R";s:1:"R";s:3:"S";s:1:"S";s:3:"T";s:1:"T";s:3:"U";s:1:"U";s:3:"V";s:1:"V";s:3:"W";s:1:"W";s:3:"X";s:1:"X";s:3:"Y";s:1:"Y";s:3:"Z";s:1:"Z";s:3:"[";s:1:"[";s:3:"\";s:1:"\\";s:3:"]";s:1:"]";s:3:"^";s:1:"^";s:3:"_";s:1:"_";s:3:"`";s:1:"`";s:3:"a";s:1:"a";s:3:"b";s:1:"b";s:3:"c";s:1:"c";s:3:"d";s:1:"d";s:3:"e";s:1:"e";s:3:"f";s:1:"f";s:3:"g";s:1:"g";s:3:"h";s:1:"h";s:3:"i";s:1:"i";s:3:"j";s:1:"j";s:3:"k";s:1:"k";s:3:"l";s:1:"l";s:3:"m";s:1:"m";s:3:"n";s:1:"n";s:3:"o";s:1:"o";s:3:"p";s:1:"p";s:3:"q";s:1:"q";s:3:"r";s:1:"r";s:3:"s";s:1:"s";s:3:"t";s:1:"t";s:3:"u";s:1:"u";s:3:"v";s:1:"v";s:3:"w";s:1:"w";s:3:"x";s:1:"x";s:3:"y";s:1:"y";s:3:"z";s:1:"z";s:3:"{";s:1:"{";s:3:"|";s:1:"|";s:3:"}";s:1:"}";s:3:"~";s:1:"~";s:3:"⦅";s:3:"⦅";s:3:"⦆";s:3:"⦆";s:3:"。";s:3:"。";s:3:"「";s:3:"「";s:3:"」";s:3:"」";s:3:"、";s:3:"、";s:3:"・";s:3:"・";s:3:"ヲ";s:3:"ヲ";s:3:"ァ";s:3:"ァ";s:3:"ィ";s:3:"ィ";s:3:"ゥ";s:3:"ゥ";s:3:"ェ";s:3:"ェ";s:3:"ォ";s:3:"ォ";s:3:"ャ";s:3:"ャ";s:3:"ュ";s:3:"ュ";s:3:"ョ";s:3:"ョ";s:3:"ッ";s:3:"ッ";s:3:"ー";s:3:"ー";s:3:"ア";s:3:"ア";s:3:"イ";s:3:"イ";s:3:"ウ";s:3:"ウ";s:3:"エ";s:3:"エ";s:3:"オ";s:3:"オ";s:3:"カ";s:3:"カ";s:3:"キ";s:3:"キ";s:3:"ク";s:3:"ク";s:3:"ケ";s:3:"ケ";s:3:"コ";s:3:"コ";s:3:"サ";s:3:"サ";s:3:"シ";s:3:"シ";s:3:"ス";s:3:"ス";s:3:"セ";s:3:"セ";s:3:"ソ";s:3:"ソ";s:3:"タ";s:3:"タ";s:3:"チ";s:3:"チ";s:3:"ツ";s:3:"ツ";s:3:"テ";s:3:"テ";s:3:"ト";s:3:"ト";s:3:"ナ";s:3:"ナ";s:3:"ニ";s:3:"ニ";s:3:"ヌ";s:3:"ヌ";s:3:"ネ";s:3:"ネ";s:3:"ノ";s:3:"ノ";s:3:"ハ";s:3:"ハ";s:3:"ヒ";s:3:"ヒ";s:3:"フ";s:3:"フ";s:3:"ヘ";s:3:"ヘ";s:3:"ホ";s:3:"ホ";s:3:"マ";s:3:"マ";s:3:"ミ";s:3:"ミ";s:3:"ム";s:3:"ム";s:3:"メ";s:3:"メ";s:3:"モ";s:3:"モ";s:3:"ヤ";s:3:"ヤ";s:3:"ユ";s:3:"ユ";s:3:"ヨ";s:3:"ヨ";s:3:"ラ";s:3:"ラ";s:3:"リ";s:3:"リ";s:3:"ル";s:3:"ル";s:3:"レ";s:3:"レ";s:3:"ロ";s:3:"ロ";s:3:"ワ";s:3:"ワ";s:3:"ン";s:3:"ン";s:3:"゙";s:3:"゙";s:3:"゚";s:3:"゚";s:3:"ᅠ";s:3:"ᅠ";s:3:"ᄀ";s:3:"ᄀ";s:3:"ᄁ";s:3:"ᄁ";s:3:"ᆪ";s:3:"ᆪ";s:3:"ᄂ";s:3:"ᄂ";s:3:"ᆬ";s:3:"ᆬ";s:3:"ᆭ";s:3:"ᆭ";s:3:"ᄃ";s:3:"ᄃ";s:3:"ᄄ";s:3:"ᄄ";s:3:"ᄅ";s:3:"ᄅ";s:3:"ᆰ";s:3:"ᆰ";s:3:"ᆱ";s:3:"ᆱ";s:3:"ᆲ";s:3:"ᆲ";s:3:"ᆳ";s:3:"ᆳ";s:3:"ᆴ";s:3:"ᆴ";s:3:"ᆵ";s:3:"ᆵ";s:3:"ᄚ";s:3:"ᄚ";s:3:"ᄆ";s:3:"ᄆ";s:3:"ᄇ";s:3:"ᄇ";s:3:"ᄈ";s:3:"ᄈ";s:3:"ᄡ";s:3:"ᄡ";s:3:"ᄉ";s:3:"ᄉ";s:3:"ᄊ";s:3:"ᄊ";s:3:"ᄋ";s:3:"ᄋ";s:3:"ᄌ";s:3:"ᄌ";s:3:"ᄍ";s:3:"ᄍ";s:3:"ᄎ";s:3:"ᄎ";s:3:"ᄏ";s:3:"ᄏ";s:3:"ᄐ";s:3:"ᄐ";s:3:"ᄑ";s:3:"ᄑ";s:3:"ᄒ";s:3:"ᄒ";s:3:"ᅡ";s:3:"ᅡ";s:3:"ᅢ";s:3:"ᅢ";s:3:"ᅣ";s:3:"ᅣ";s:3:"ᅤ";s:3:"ᅤ";s:3:"ᅥ";s:3:"ᅥ";s:3:"ᅦ";s:3:"ᅦ";s:3:"ᅧ";s:3:"ᅧ";s:3:"ᅨ";s:3:"ᅨ";s:3:"ᅩ";s:3:"ᅩ";s:3:"ᅪ";s:3:"ᅪ";s:3:"ᅫ";s:3:"ᅫ";s:3:"ᅬ";s:3:"ᅬ";s:3:"ᅭ";s:3:"ᅭ";s:3:"ᅮ";s:3:"ᅮ";s:3:"ᅯ";s:3:"ᅯ";s:3:"ᅰ";s:3:"ᅰ";s:3:"ᅱ";s:3:"ᅱ";s:3:"ᅲ";s:3:"ᅲ";s:3:"ᅳ";s:3:"ᅳ";s:3:"ᅴ";s:3:"ᅴ";s:3:"ᅵ";s:3:"ᅵ";s:3:"¢";s:2:"¢";s:3:"£";s:2:"£";s:3:"¬";s:2:"¬";s:3:" ̄";s:3:" ̄";s:3:"¦";s:2:"¦";s:3:"¥";s:2:"¥";s:3:"₩";s:3:"₩";s:3:"│";s:3:"│";s:3:"←";s:3:"←";s:3:"↑";s:3:"↑";s:3:"→";s:3:"→";s:3:"↓";s:3:"↓";s:3:"■";s:3:"■";s:3:"○";s:3:"○";s:4:"𑂚";s:8:"𑂚";s:4:"𑂜";s:8:"𑂜";s:4:"𑂫";s:8:"𑂫";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"𝐀";s:1:"A";s:4:"𝐁";s:1:"B";s:4:"𝐂";s:1:"C";s:4:"𝐃";s:1:"D";s:4:"𝐄";s:1:"E";s:4:"𝐅";s:1:"F";s:4:"𝐆";s:1:"G";s:4:"𝐇";s:1:"H";s:4:"𝐈";s:1:"I";s:4:"𝐉";s:1:"J";s:4:"𝐊";s:1:"K";s:4:"𝐋";s:1:"L";s:4:"𝐌";s:1:"M";s:4:"𝐍";s:1:"N";s:4:"𝐎";s:1:"O";s:4:"𝐏";s:1:"P";s:4:"𝐐";s:1:"Q";s:4:"𝐑";s:1:"R";s:4:"𝐒";s:1:"S";s:4:"𝐓";s:1:"T";s:4:"𝐔";s:1:"U";s:4:"𝐕";s:1:"V";s:4:"𝐖";s:1:"W";s:4:"𝐗";s:1:"X";s:4:"𝐘";s:1:"Y";s:4:"𝐙";s:1:"Z";s:4:"𝐚";s:1:"a";s:4:"𝐛";s:1:"b";s:4:"𝐜";s:1:"c";s:4:"𝐝";s:1:"d";s:4:"𝐞";s:1:"e";s:4:"𝐟";s:1:"f";s:4:"𝐠";s:1:"g";s:4:"𝐡";s:1:"h";s:4:"𝐢";s:1:"i";s:4:"𝐣";s:1:"j";s:4:"𝐤";s:1:"k";s:4:"𝐥";s:1:"l";s:4:"𝐦";s:1:"m";s:4:"𝐧";s:1:"n";s:4:"𝐨";s:1:"o";s:4:"𝐩";s:1:"p";s:4:"𝐪";s:1:"q";s:4:"𝐫";s:1:"r";s:4:"𝐬";s:1:"s";s:4:"𝐭";s:1:"t";s:4:"𝐮";s:1:"u";s:4:"𝐯";s:1:"v";s:4:"𝐰";s:1:"w";s:4:"𝐱";s:1:"x";s:4:"𝐲";s:1:"y";s:4:"𝐳";s:1:"z";s:4:"𝐴";s:1:"A";s:4:"𝐵";s:1:"B";s:4:"𝐶";s:1:"C";s:4:"𝐷";s:1:"D";s:4:"𝐸";s:1:"E";s:4:"𝐹";s:1:"F";s:4:"𝐺";s:1:"G";s:4:"𝐻";s:1:"H";s:4:"𝐼";s:1:"I";s:4:"𝐽";s:1:"J";s:4:"𝐾";s:1:"K";s:4:"𝐿";s:1:"L";s:4:"𝑀";s:1:"M";s:4:"𝑁";s:1:"N";s:4:"𝑂";s:1:"O";s:4:"𝑃";s:1:"P";s:4:"𝑄";s:1:"Q";s:4:"𝑅";s:1:"R";s:4:"𝑆";s:1:"S";s:4:"𝑇";s:1:"T";s:4:"𝑈";s:1:"U";s:4:"𝑉";s:1:"V";s:4:"𝑊";s:1:"W";s:4:"𝑋";s:1:"X";s:4:"𝑌";s:1:"Y";s:4:"𝑍";s:1:"Z";s:4:"𝑎";s:1:"a";s:4:"𝑏";s:1:"b";s:4:"𝑐";s:1:"c";s:4:"𝑑";s:1:"d";s:4:"𝑒";s:1:"e";s:4:"𝑓";s:1:"f";s:4:"𝑔";s:1:"g";s:4:"𝑖";s:1:"i";s:4:"𝑗";s:1:"j";s:4:"𝑘";s:1:"k";s:4:"𝑙";s:1:"l";s:4:"𝑚";s:1:"m";s:4:"𝑛";s:1:"n";s:4:"𝑜";s:1:"o";s:4:"𝑝";s:1:"p";s:4:"𝑞";s:1:"q";s:4:"𝑟";s:1:"r";s:4:"𝑠";s:1:"s";s:4:"𝑡";s:1:"t";s:4:"𝑢";s:1:"u";s:4:"𝑣";s:1:"v";s:4:"𝑤";s:1:"w";s:4:"𝑥";s:1:"x";s:4:"𝑦";s:1:"y";s:4:"𝑧";s:1:"z";s:4:"𝑨";s:1:"A";s:4:"𝑩";s:1:"B";s:4:"𝑪";s:1:"C";s:4:"𝑫";s:1:"D";s:4:"𝑬";s:1:"E";s:4:"𝑭";s:1:"F";s:4:"𝑮";s:1:"G";s:4:"𝑯";s:1:"H";s:4:"𝑰";s:1:"I";s:4:"𝑱";s:1:"J";s:4:"𝑲";s:1:"K";s:4:"𝑳";s:1:"L";s:4:"𝑴";s:1:"M";s:4:"𝑵";s:1:"N";s:4:"𝑶";s:1:"O";s:4:"𝑷";s:1:"P";s:4:"𝑸";s:1:"Q";s:4:"𝑹";s:1:"R";s:4:"𝑺";s:1:"S";s:4:"𝑻";s:1:"T";s:4:"𝑼";s:1:"U";s:4:"𝑽";s:1:"V";s:4:"𝑾";s:1:"W";s:4:"𝑿";s:1:"X";s:4:"𝒀";s:1:"Y";s:4:"𝒁";s:1:"Z";s:4:"𝒂";s:1:"a";s:4:"𝒃";s:1:"b";s:4:"𝒄";s:1:"c";s:4:"𝒅";s:1:"d";s:4:"𝒆";s:1:"e";s:4:"𝒇";s:1:"f";s:4:"𝒈";s:1:"g";s:4:"𝒉";s:1:"h";s:4:"𝒊";s:1:"i";s:4:"𝒋";s:1:"j";s:4:"𝒌";s:1:"k";s:4:"𝒍";s:1:"l";s:4:"𝒎";s:1:"m";s:4:"𝒏";s:1:"n";s:4:"𝒐";s:1:"o";s:4:"𝒑";s:1:"p";s:4:"𝒒";s:1:"q";s:4:"𝒓";s:1:"r";s:4:"𝒔";s:1:"s";s:4:"𝒕";s:1:"t";s:4:"𝒖";s:1:"u";s:4:"𝒗";s:1:"v";s:4:"𝒘";s:1:"w";s:4:"𝒙";s:1:"x";s:4:"𝒚";s:1:"y";s:4:"𝒛";s:1:"z";s:4:"𝒜";s:1:"A";s:4:"𝒞";s:1:"C";s:4:"𝒟";s:1:"D";s:4:"𝒢";s:1:"G";s:4:"𝒥";s:1:"J";s:4:"𝒦";s:1:"K";s:4:"𝒩";s:1:"N";s:4:"𝒪";s:1:"O";s:4:"𝒫";s:1:"P";s:4:"𝒬";s:1:"Q";s:4:"𝒮";s:1:"S";s:4:"𝒯";s:1:"T";s:4:"𝒰";s:1:"U";s:4:"𝒱";s:1:"V";s:4:"𝒲";s:1:"W";s:4:"𝒳";s:1:"X";s:4:"𝒴";s:1:"Y";s:4:"𝒵";s:1:"Z";s:4:"𝒶";s:1:"a";s:4:"𝒷";s:1:"b";s:4:"𝒸";s:1:"c";s:4:"𝒹";s:1:"d";s:4:"𝒻";s:1:"f";s:4:"𝒽";s:1:"h";s:4:"𝒾";s:1:"i";s:4:"𝒿";s:1:"j";s:4:"𝓀";s:1:"k";s:4:"𝓁";s:1:"l";s:4:"𝓂";s:1:"m";s:4:"𝓃";s:1:"n";s:4:"𝓅";s:1:"p";s:4:"𝓆";s:1:"q";s:4:"𝓇";s:1:"r";s:4:"𝓈";s:1:"s";s:4:"𝓉";s:1:"t";s:4:"𝓊";s:1:"u";s:4:"𝓋";s:1:"v";s:4:"𝓌";s:1:"w";s:4:"𝓍";s:1:"x";s:4:"𝓎";s:1:"y";s:4:"𝓏";s:1:"z";s:4:"𝓐";s:1:"A";s:4:"𝓑";s:1:"B";s:4:"𝓒";s:1:"C";s:4:"𝓓";s:1:"D";s:4:"𝓔";s:1:"E";s:4:"𝓕";s:1:"F";s:4:"𝓖";s:1:"G";s:4:"𝓗";s:1:"H";s:4:"𝓘";s:1:"I";s:4:"𝓙";s:1:"J";s:4:"𝓚";s:1:"K";s:4:"𝓛";s:1:"L";s:4:"𝓜";s:1:"M";s:4:"𝓝";s:1:"N";s:4:"𝓞";s:1:"O";s:4:"𝓟";s:1:"P";s:4:"𝓠";s:1:"Q";s:4:"𝓡";s:1:"R";s:4:"𝓢";s:1:"S";s:4:"𝓣";s:1:"T";s:4:"𝓤";s:1:"U";s:4:"𝓥";s:1:"V";s:4:"𝓦";s:1:"W";s:4:"𝓧";s:1:"X";s:4:"𝓨";s:1:"Y";s:4:"𝓩";s:1:"Z";s:4:"𝓪";s:1:"a";s:4:"𝓫";s:1:"b";s:4:"𝓬";s:1:"c";s:4:"𝓭";s:1:"d";s:4:"𝓮";s:1:"e";s:4:"𝓯";s:1:"f";s:4:"𝓰";s:1:"g";s:4:"𝓱";s:1:"h";s:4:"𝓲";s:1:"i";s:4:"𝓳";s:1:"j";s:4:"𝓴";s:1:"k";s:4:"𝓵";s:1:"l";s:4:"𝓶";s:1:"m";s:4:"𝓷";s:1:"n";s:4:"𝓸";s:1:"o";s:4:"𝓹";s:1:"p";s:4:"𝓺";s:1:"q";s:4:"𝓻";s:1:"r";s:4:"𝓼";s:1:"s";s:4:"𝓽";s:1:"t";s:4:"𝓾";s:1:"u";s:4:"𝓿";s:1:"v";s:4:"𝔀";s:1:"w";s:4:"𝔁";s:1:"x";s:4:"𝔂";s:1:"y";s:4:"𝔃";s:1:"z";s:4:"𝔄";s:1:"A";s:4:"𝔅";s:1:"B";s:4:"𝔇";s:1:"D";s:4:"𝔈";s:1:"E";s:4:"𝔉";s:1:"F";s:4:"𝔊";s:1:"G";s:4:"𝔍";s:1:"J";s:4:"𝔎";s:1:"K";s:4:"𝔏";s:1:"L";s:4:"𝔐";s:1:"M";s:4:"𝔑";s:1:"N";s:4:"𝔒";s:1:"O";s:4:"𝔓";s:1:"P";s:4:"𝔔";s:1:"Q";s:4:"𝔖";s:1:"S";s:4:"𝔗";s:1:"T";s:4:"𝔘";s:1:"U";s:4:"𝔙";s:1:"V";s:4:"𝔚";s:1:"W";s:4:"𝔛";s:1:"X";s:4:"𝔜";s:1:"Y";s:4:"𝔞";s:1:"a";s:4:"𝔟";s:1:"b";s:4:"𝔠";s:1:"c";s:4:"𝔡";s:1:"d";s:4:"𝔢";s:1:"e";s:4:"𝔣";s:1:"f";s:4:"𝔤";s:1:"g";s:4:"𝔥";s:1:"h";s:4:"𝔦";s:1:"i";s:4:"𝔧";s:1:"j";s:4:"𝔨";s:1:"k";s:4:"𝔩";s:1:"l";s:4:"𝔪";s:1:"m";s:4:"𝔫";s:1:"n";s:4:"𝔬";s:1:"o";s:4:"𝔭";s:1:"p";s:4:"𝔮";s:1:"q";s:4:"𝔯";s:1:"r";s:4:"𝔰";s:1:"s";s:4:"𝔱";s:1:"t";s:4:"𝔲";s:1:"u";s:4:"𝔳";s:1:"v";s:4:"𝔴";s:1:"w";s:4:"𝔵";s:1:"x";s:4:"𝔶";s:1:"y";s:4:"𝔷";s:1:"z";s:4:"𝔸";s:1:"A";s:4:"𝔹";s:1:"B";s:4:"𝔻";s:1:"D";s:4:"𝔼";s:1:"E";s:4:"𝔽";s:1:"F";s:4:"𝔾";s:1:"G";s:4:"𝕀";s:1:"I";s:4:"𝕁";s:1:"J";s:4:"𝕂";s:1:"K";s:4:"𝕃";s:1:"L";s:4:"𝕄";s:1:"M";s:4:"𝕆";s:1:"O";s:4:"𝕊";s:1:"S";s:4:"𝕋";s:1:"T";s:4:"𝕌";s:1:"U";s:4:"𝕍";s:1:"V";s:4:"𝕎";s:1:"W";s:4:"𝕏";s:1:"X";s:4:"𝕐";s:1:"Y";s:4:"𝕒";s:1:"a";s:4:"𝕓";s:1:"b";s:4:"𝕔";s:1:"c";s:4:"𝕕";s:1:"d";s:4:"𝕖";s:1:"e";s:4:"𝕗";s:1:"f";s:4:"𝕘";s:1:"g";s:4:"𝕙";s:1:"h";s:4:"𝕚";s:1:"i";s:4:"𝕛";s:1:"j";s:4:"𝕜";s:1:"k";s:4:"𝕝";s:1:"l";s:4:"𝕞";s:1:"m";s:4:"𝕟";s:1:"n";s:4:"𝕠";s:1:"o";s:4:"𝕡";s:1:"p";s:4:"𝕢";s:1:"q";s:4:"𝕣";s:1:"r";s:4:"𝕤";s:1:"s";s:4:"𝕥";s:1:"t";s:4:"𝕦";s:1:"u";s:4:"𝕧";s:1:"v";s:4:"𝕨";s:1:"w";s:4:"𝕩";s:1:"x";s:4:"𝕪";s:1:"y";s:4:"𝕫";s:1:"z";s:4:"𝕬";s:1:"A";s:4:"𝕭";s:1:"B";s:4:"𝕮";s:1:"C";s:4:"𝕯";s:1:"D";s:4:"𝕰";s:1:"E";s:4:"𝕱";s:1:"F";s:4:"𝕲";s:1:"G";s:4:"𝕳";s:1:"H";s:4:"𝕴";s:1:"I";s:4:"𝕵";s:1:"J";s:4:"𝕶";s:1:"K";s:4:"𝕷";s:1:"L";s:4:"𝕸";s:1:"M";s:4:"𝕹";s:1:"N";s:4:"𝕺";s:1:"O";s:4:"𝕻";s:1:"P";s:4:"𝕼";s:1:"Q";s:4:"𝕽";s:1:"R";s:4:"𝕾";s:1:"S";s:4:"𝕿";s:1:"T";s:4:"𝖀";s:1:"U";s:4:"𝖁";s:1:"V";s:4:"𝖂";s:1:"W";s:4:"𝖃";s:1:"X";s:4:"𝖄";s:1:"Y";s:4:"𝖅";s:1:"Z";s:4:"𝖆";s:1:"a";s:4:"𝖇";s:1:"b";s:4:"𝖈";s:1:"c";s:4:"𝖉";s:1:"d";s:4:"𝖊";s:1:"e";s:4:"𝖋";s:1:"f";s:4:"𝖌";s:1:"g";s:4:"𝖍";s:1:"h";s:4:"𝖎";s:1:"i";s:4:"𝖏";s:1:"j";s:4:"𝖐";s:1:"k";s:4:"𝖑";s:1:"l";s:4:"𝖒";s:1:"m";s:4:"𝖓";s:1:"n";s:4:"𝖔";s:1:"o";s:4:"𝖕";s:1:"p";s:4:"𝖖";s:1:"q";s:4:"𝖗";s:1:"r";s:4:"𝖘";s:1:"s";s:4:"𝖙";s:1:"t";s:4:"𝖚";s:1:"u";s:4:"𝖛";s:1:"v";s:4:"𝖜";s:1:"w";s:4:"𝖝";s:1:"x";s:4:"𝖞";s:1:"y";s:4:"𝖟";s:1:"z";s:4:"𝖠";s:1:"A";s:4:"𝖡";s:1:"B";s:4:"𝖢";s:1:"C";s:4:"𝖣";s:1:"D";s:4:"𝖤";s:1:"E";s:4:"𝖥";s:1:"F";s:4:"𝖦";s:1:"G";s:4:"𝖧";s:1:"H";s:4:"𝖨";s:1:"I";s:4:"𝖩";s:1:"J";s:4:"𝖪";s:1:"K";s:4:"𝖫";s:1:"L";s:4:"𝖬";s:1:"M";s:4:"𝖭";s:1:"N";s:4:"𝖮";s:1:"O";s:4:"𝖯";s:1:"P";s:4:"𝖰";s:1:"Q";s:4:"𝖱";s:1:"R";s:4:"𝖲";s:1:"S";s:4:"𝖳";s:1:"T";s:4:"𝖴";s:1:"U";s:4:"𝖵";s:1:"V";s:4:"𝖶";s:1:"W";s:4:"𝖷";s:1:"X";s:4:"𝖸";s:1:"Y";s:4:"𝖹";s:1:"Z";s:4:"𝖺";s:1:"a";s:4:"𝖻";s:1:"b";s:4:"𝖼";s:1:"c";s:4:"𝖽";s:1:"d";s:4:"𝖾";s:1:"e";s:4:"𝖿";s:1:"f";s:4:"𝗀";s:1:"g";s:4:"𝗁";s:1:"h";s:4:"𝗂";s:1:"i";s:4:"𝗃";s:1:"j";s:4:"𝗄";s:1:"k";s:4:"𝗅";s:1:"l";s:4:"𝗆";s:1:"m";s:4:"𝗇";s:1:"n";s:4:"𝗈";s:1:"o";s:4:"𝗉";s:1:"p";s:4:"𝗊";s:1:"q";s:4:"𝗋";s:1:"r";s:4:"𝗌";s:1:"s";s:4:"𝗍";s:1:"t";s:4:"𝗎";s:1:"u";s:4:"𝗏";s:1:"v";s:4:"𝗐";s:1:"w";s:4:"𝗑";s:1:"x";s:4:"𝗒";s:1:"y";s:4:"𝗓";s:1:"z";s:4:"𝗔";s:1:"A";s:4:"𝗕";s:1:"B";s:4:"𝗖";s:1:"C";s:4:"𝗗";s:1:"D";s:4:"𝗘";s:1:"E";s:4:"𝗙";s:1:"F";s:4:"𝗚";s:1:"G";s:4:"𝗛";s:1:"H";s:4:"𝗜";s:1:"I";s:4:"𝗝";s:1:"J";s:4:"𝗞";s:1:"K";s:4:"𝗟";s:1:"L";s:4:"𝗠";s:1:"M";s:4:"𝗡";s:1:"N";s:4:"𝗢";s:1:"O";s:4:"𝗣";s:1:"P";s:4:"𝗤";s:1:"Q";s:4:"𝗥";s:1:"R";s:4:"𝗦";s:1:"S";s:4:"𝗧";s:1:"T";s:4:"𝗨";s:1:"U";s:4:"𝗩";s:1:"V";s:4:"𝗪";s:1:"W";s:4:"𝗫";s:1:"X";s:4:"𝗬";s:1:"Y";s:4:"𝗭";s:1:"Z";s:4:"𝗮";s:1:"a";s:4:"𝗯";s:1:"b";s:4:"𝗰";s:1:"c";s:4:"𝗱";s:1:"d";s:4:"𝗲";s:1:"e";s:4:"𝗳";s:1:"f";s:4:"𝗴";s:1:"g";s:4:"𝗵";s:1:"h";s:4:"𝗶";s:1:"i";s:4:"𝗷";s:1:"j";s:4:"𝗸";s:1:"k";s:4:"𝗹";s:1:"l";s:4:"𝗺";s:1:"m";s:4:"𝗻";s:1:"n";s:4:"𝗼";s:1:"o";s:4:"𝗽";s:1:"p";s:4:"𝗾";s:1:"q";s:4:"𝗿";s:1:"r";s:4:"𝘀";s:1:"s";s:4:"𝘁";s:1:"t";s:4:"𝘂";s:1:"u";s:4:"𝘃";s:1:"v";s:4:"𝘄";s:1:"w";s:4:"𝘅";s:1:"x";s:4:"𝘆";s:1:"y";s:4:"𝘇";s:1:"z";s:4:"𝘈";s:1:"A";s:4:"𝘉";s:1:"B";s:4:"𝘊";s:1:"C";s:4:"𝘋";s:1:"D";s:4:"𝘌";s:1:"E";s:4:"𝘍";s:1:"F";s:4:"𝘎";s:1:"G";s:4:"𝘏";s:1:"H";s:4:"𝘐";s:1:"I";s:4:"𝘑";s:1:"J";s:4:"𝘒";s:1:"K";s:4:"𝘓";s:1:"L";s:4:"𝘔";s:1:"M";s:4:"𝘕";s:1:"N";s:4:"𝘖";s:1:"O";s:4:"𝘗";s:1:"P";s:4:"𝘘";s:1:"Q";s:4:"𝘙";s:1:"R";s:4:"𝘚";s:1:"S";s:4:"𝘛";s:1:"T";s:4:"𝘜";s:1:"U";s:4:"𝘝";s:1:"V";s:4:"𝘞";s:1:"W";s:4:"𝘟";s:1:"X";s:4:"𝘠";s:1:"Y";s:4:"𝘡";s:1:"Z";s:4:"𝘢";s:1:"a";s:4:"𝘣";s:1:"b";s:4:"𝘤";s:1:"c";s:4:"𝘥";s:1:"d";s:4:"𝘦";s:1:"e";s:4:"𝘧";s:1:"f";s:4:"𝘨";s:1:"g";s:4:"𝘩";s:1:"h";s:4:"𝘪";s:1:"i";s:4:"𝘫";s:1:"j";s:4:"𝘬";s:1:"k";s:4:"𝘭";s:1:"l";s:4:"𝘮";s:1:"m";s:4:"𝘯";s:1:"n";s:4:"𝘰";s:1:"o";s:4:"𝘱";s:1:"p";s:4:"𝘲";s:1:"q";s:4:"𝘳";s:1:"r";s:4:"𝘴";s:1:"s";s:4:"𝘵";s:1:"t";s:4:"𝘶";s:1:"u";s:4:"𝘷";s:1:"v";s:4:"𝘸";s:1:"w";s:4:"𝘹";s:1:"x";s:4:"𝘺";s:1:"y";s:4:"𝘻";s:1:"z";s:4:"𝘼";s:1:"A";s:4:"𝘽";s:1:"B";s:4:"𝘾";s:1:"C";s:4:"𝘿";s:1:"D";s:4:"𝙀";s:1:"E";s:4:"𝙁";s:1:"F";s:4:"𝙂";s:1:"G";s:4:"𝙃";s:1:"H";s:4:"𝙄";s:1:"I";s:4:"𝙅";s:1:"J";s:4:"𝙆";s:1:"K";s:4:"𝙇";s:1:"L";s:4:"𝙈";s:1:"M";s:4:"𝙉";s:1:"N";s:4:"𝙊";s:1:"O";s:4:"𝙋";s:1:"P";s:4:"𝙌";s:1:"Q";s:4:"𝙍";s:1:"R";s:4:"𝙎";s:1:"S";s:4:"𝙏";s:1:"T";s:4:"𝙐";s:1:"U";s:4:"𝙑";s:1:"V";s:4:"𝙒";s:1:"W";s:4:"𝙓";s:1:"X";s:4:"𝙔";s:1:"Y";s:4:"𝙕";s:1:"Z";s:4:"𝙖";s:1:"a";s:4:"𝙗";s:1:"b";s:4:"𝙘";s:1:"c";s:4:"𝙙";s:1:"d";s:4:"𝙚";s:1:"e";s:4:"𝙛";s:1:"f";s:4:"𝙜";s:1:"g";s:4:"𝙝";s:1:"h";s:4:"𝙞";s:1:"i";s:4:"𝙟";s:1:"j";s:4:"𝙠";s:1:"k";s:4:"𝙡";s:1:"l";s:4:"𝙢";s:1:"m";s:4:"𝙣";s:1:"n";s:4:"𝙤";s:1:"o";s:4:"𝙥";s:1:"p";s:4:"𝙦";s:1:"q";s:4:"𝙧";s:1:"r";s:4:"𝙨";s:1:"s";s:4:"𝙩";s:1:"t";s:4:"𝙪";s:1:"u";s:4:"𝙫";s:1:"v";s:4:"𝙬";s:1:"w";s:4:"𝙭";s:1:"x";s:4:"𝙮";s:1:"y";s:4:"𝙯";s:1:"z";s:4:"𝙰";s:1:"A";s:4:"𝙱";s:1:"B";s:4:"𝙲";s:1:"C";s:4:"𝙳";s:1:"D";s:4:"𝙴";s:1:"E";s:4:"𝙵";s:1:"F";s:4:"𝙶";s:1:"G";s:4:"𝙷";s:1:"H";s:4:"𝙸";s:1:"I";s:4:"𝙹";s:1:"J";s:4:"𝙺";s:1:"K";s:4:"𝙻";s:1:"L";s:4:"𝙼";s:1:"M";s:4:"𝙽";s:1:"N";s:4:"𝙾";s:1:"O";s:4:"𝙿";s:1:"P";s:4:"𝚀";s:1:"Q";s:4:"𝚁";s:1:"R";s:4:"𝚂";s:1:"S";s:4:"𝚃";s:1:"T";s:4:"𝚄";s:1:"U";s:4:"𝚅";s:1:"V";s:4:"𝚆";s:1:"W";s:4:"𝚇";s:1:"X";s:4:"𝚈";s:1:"Y";s:4:"𝚉";s:1:"Z";s:4:"𝚊";s:1:"a";s:4:"𝚋";s:1:"b";s:4:"𝚌";s:1:"c";s:4:"𝚍";s:1:"d";s:4:"𝚎";s:1:"e";s:4:"𝚏";s:1:"f";s:4:"𝚐";s:1:"g";s:4:"𝚑";s:1:"h";s:4:"𝚒";s:1:"i";s:4:"𝚓";s:1:"j";s:4:"𝚔";s:1:"k";s:4:"𝚕";s:1:"l";s:4:"𝚖";s:1:"m";s:4:"𝚗";s:1:"n";s:4:"𝚘";s:1:"o";s:4:"𝚙";s:1:"p";s:4:"𝚚";s:1:"q";s:4:"𝚛";s:1:"r";s:4:"𝚜";s:1:"s";s:4:"𝚝";s:1:"t";s:4:"𝚞";s:1:"u";s:4:"𝚟";s:1:"v";s:4:"𝚠";s:1:"w";s:4:"𝚡";s:1:"x";s:4:"𝚢";s:1:"y";s:4:"𝚣";s:1:"z";s:4:"𝚤";s:2:"ı";s:4:"𝚥";s:2:"ȷ";s:4:"𝚨";s:2:"Α";s:4:"𝚩";s:2:"Β";s:4:"𝚪";s:2:"Γ";s:4:"𝚫";s:2:"Δ";s:4:"𝚬";s:2:"Ε";s:4:"𝚭";s:2:"Ζ";s:4:"𝚮";s:2:"Η";s:4:"𝚯";s:2:"Θ";s:4:"𝚰";s:2:"Ι";s:4:"𝚱";s:2:"Κ";s:4:"𝚲";s:2:"Λ";s:4:"𝚳";s:2:"Μ";s:4:"𝚴";s:2:"Ν";s:4:"𝚵";s:2:"Ξ";s:4:"𝚶";s:2:"Ο";s:4:"𝚷";s:2:"Π";s:4:"𝚸";s:2:"Ρ";s:4:"𝚹";s:2:"Θ";s:4:"𝚺";s:2:"Σ";s:4:"𝚻";s:2:"Τ";s:4:"𝚼";s:2:"Υ";s:4:"𝚽";s:2:"Φ";s:4:"𝚾";s:2:"Χ";s:4:"𝚿";s:2:"Ψ";s:4:"𝛀";s:2:"Ω";s:4:"𝛁";s:3:"∇";s:4:"𝛂";s:2:"α";s:4:"𝛃";s:2:"β";s:4:"𝛄";s:2:"γ";s:4:"𝛅";s:2:"δ";s:4:"𝛆";s:2:"ε";s:4:"𝛇";s:2:"ζ";s:4:"𝛈";s:2:"η";s:4:"𝛉";s:2:"θ";s:4:"𝛊";s:2:"ι";s:4:"𝛋";s:2:"κ";s:4:"𝛌";s:2:"λ";s:4:"𝛍";s:2:"μ";s:4:"𝛎";s:2:"ν";s:4:"𝛏";s:2:"ξ";s:4:"𝛐";s:2:"ο";s:4:"𝛑";s:2:"π";s:4:"𝛒";s:2:"ρ";s:4:"𝛓";s:2:"ς";s:4:"𝛔";s:2:"σ";s:4:"𝛕";s:2:"τ";s:4:"𝛖";s:2:"υ";s:4:"𝛗";s:2:"φ";s:4:"𝛘";s:2:"χ";s:4:"𝛙";s:2:"ψ";s:4:"𝛚";s:2:"ω";s:4:"𝛛";s:3:"∂";s:4:"𝛜";s:2:"ε";s:4:"𝛝";s:2:"θ";s:4:"𝛞";s:2:"κ";s:4:"𝛟";s:2:"φ";s:4:"𝛠";s:2:"ρ";s:4:"𝛡";s:2:"π";s:4:"𝛢";s:2:"Α";s:4:"𝛣";s:2:"Β";s:4:"𝛤";s:2:"Γ";s:4:"𝛥";s:2:"Δ";s:4:"𝛦";s:2:"Ε";s:4:"𝛧";s:2:"Ζ";s:4:"𝛨";s:2:"Η";s:4:"𝛩";s:2:"Θ";s:4:"𝛪";s:2:"Ι";s:4:"𝛫";s:2:"Κ";s:4:"𝛬";s:2:"Λ";s:4:"𝛭";s:2:"Μ";s:4:"𝛮";s:2:"Ν";s:4:"𝛯";s:2:"Ξ";s:4:"𝛰";s:2:"Ο";s:4:"𝛱";s:2:"Π";s:4:"𝛲";s:2:"Ρ";s:4:"𝛳";s:2:"Θ";s:4:"𝛴";s:2:"Σ";s:4:"𝛵";s:2:"Τ";s:4:"𝛶";s:2:"Υ";s:4:"𝛷";s:2:"Φ";s:4:"𝛸";s:2:"Χ";s:4:"𝛹";s:2:"Ψ";s:4:"𝛺";s:2:"Ω";s:4:"𝛻";s:3:"∇";s:4:"𝛼";s:2:"α";s:4:"𝛽";s:2:"β";s:4:"𝛾";s:2:"γ";s:4:"𝛿";s:2:"δ";s:4:"𝜀";s:2:"ε";s:4:"𝜁";s:2:"ζ";s:4:"𝜂";s:2:"η";s:4:"𝜃";s:2:"θ";s:4:"𝜄";s:2:"ι";s:4:"𝜅";s:2:"κ";s:4:"𝜆";s:2:"λ";s:4:"𝜇";s:2:"μ";s:4:"𝜈";s:2:"ν";s:4:"𝜉";s:2:"ξ";s:4:"𝜊";s:2:"ο";s:4:"𝜋";s:2:"π";s:4:"𝜌";s:2:"ρ";s:4:"𝜍";s:2:"ς";s:4:"𝜎";s:2:"σ";s:4:"𝜏";s:2:"τ";s:4:"𝜐";s:2:"υ";s:4:"𝜑";s:2:"φ";s:4:"𝜒";s:2:"χ";s:4:"𝜓";s:2:"ψ";s:4:"𝜔";s:2:"ω";s:4:"𝜕";s:3:"∂";s:4:"𝜖";s:2:"ε";s:4:"𝜗";s:2:"θ";s:4:"𝜘";s:2:"κ";s:4:"𝜙";s:2:"φ";s:4:"𝜚";s:2:"ρ";s:4:"𝜛";s:2:"π";s:4:"𝜜";s:2:"Α";s:4:"𝜝";s:2:"Β";s:4:"𝜞";s:2:"Γ";s:4:"𝜟";s:2:"Δ";s:4:"𝜠";s:2:"Ε";s:4:"𝜡";s:2:"Ζ";s:4:"𝜢";s:2:"Η";s:4:"𝜣";s:2:"Θ";s:4:"𝜤";s:2:"Ι";s:4:"𝜥";s:2:"Κ";s:4:"𝜦";s:2:"Λ";s:4:"𝜧";s:2:"Μ";s:4:"𝜨";s:2:"Ν";s:4:"𝜩";s:2:"Ξ";s:4:"𝜪";s:2:"Ο";s:4:"𝜫";s:2:"Π";s:4:"𝜬";s:2:"Ρ";s:4:"𝜭";s:2:"Θ";s:4:"𝜮";s:2:"Σ";s:4:"𝜯";s:2:"Τ";s:4:"𝜰";s:2:"Υ";s:4:"𝜱";s:2:"Φ";s:4:"𝜲";s:2:"Χ";s:4:"𝜳";s:2:"Ψ";s:4:"𝜴";s:2:"Ω";s:4:"𝜵";s:3:"∇";s:4:"𝜶";s:2:"α";s:4:"𝜷";s:2:"β";s:4:"𝜸";s:2:"γ";s:4:"𝜹";s:2:"δ";s:4:"𝜺";s:2:"ε";s:4:"𝜻";s:2:"ζ";s:4:"𝜼";s:2:"η";s:4:"𝜽";s:2:"θ";s:4:"𝜾";s:2:"ι";s:4:"𝜿";s:2:"κ";s:4:"𝝀";s:2:"λ";s:4:"𝝁";s:2:"μ";s:4:"𝝂";s:2:"ν";s:4:"𝝃";s:2:"ξ";s:4:"𝝄";s:2:"ο";s:4:"𝝅";s:2:"π";s:4:"𝝆";s:2:"ρ";s:4:"𝝇";s:2:"ς";s:4:"𝝈";s:2:"σ";s:4:"𝝉";s:2:"τ";s:4:"𝝊";s:2:"υ";s:4:"𝝋";s:2:"φ";s:4:"𝝌";s:2:"χ";s:4:"𝝍";s:2:"ψ";s:4:"𝝎";s:2:"ω";s:4:"𝝏";s:3:"∂";s:4:"𝝐";s:2:"ε";s:4:"𝝑";s:2:"θ";s:4:"𝝒";s:2:"κ";s:4:"𝝓";s:2:"φ";s:4:"𝝔";s:2:"ρ";s:4:"𝝕";s:2:"π";s:4:"𝝖";s:2:"Α";s:4:"𝝗";s:2:"Β";s:4:"𝝘";s:2:"Γ";s:4:"𝝙";s:2:"Δ";s:4:"𝝚";s:2:"Ε";s:4:"𝝛";s:2:"Ζ";s:4:"𝝜";s:2:"Η";s:4:"𝝝";s:2:"Θ";s:4:"𝝞";s:2:"Ι";s:4:"𝝟";s:2:"Κ";s:4:"𝝠";s:2:"Λ";s:4:"𝝡";s:2:"Μ";s:4:"𝝢";s:2:"Ν";s:4:"𝝣";s:2:"Ξ";s:4:"𝝤";s:2:"Ο";s:4:"𝝥";s:2:"Π";s:4:"𝝦";s:2:"Ρ";s:4:"𝝧";s:2:"Θ";s:4:"𝝨";s:2:"Σ";s:4:"𝝩";s:2:"Τ";s:4:"𝝪";s:2:"Υ";s:4:"𝝫";s:2:"Φ";s:4:"𝝬";s:2:"Χ";s:4:"𝝭";s:2:"Ψ";s:4:"𝝮";s:2:"Ω";s:4:"𝝯";s:3:"∇";s:4:"𝝰";s:2:"α";s:4:"𝝱";s:2:"β";s:4:"𝝲";s:2:"γ";s:4:"𝝳";s:2:"δ";s:4:"𝝴";s:2:"ε";s:4:"𝝵";s:2:"ζ";s:4:"𝝶";s:2:"η";s:4:"𝝷";s:2:"θ";s:4:"𝝸";s:2:"ι";s:4:"𝝹";s:2:"κ";s:4:"𝝺";s:2:"λ";s:4:"𝝻";s:2:"μ";s:4:"𝝼";s:2:"ν";s:4:"𝝽";s:2:"ξ";s:4:"𝝾";s:2:"ο";s:4:"𝝿";s:2:"π";s:4:"𝞀";s:2:"ρ";s:4:"𝞁";s:2:"ς";s:4:"𝞂";s:2:"σ";s:4:"𝞃";s:2:"τ";s:4:"𝞄";s:2:"υ";s:4:"𝞅";s:2:"φ";s:4:"𝞆";s:2:"χ";s:4:"𝞇";s:2:"ψ";s:4:"𝞈";s:2:"ω";s:4:"𝞉";s:3:"∂";s:4:"𝞊";s:2:"ε";s:4:"𝞋";s:2:"θ";s:4:"𝞌";s:2:"κ";s:4:"𝞍";s:2:"φ";s:4:"𝞎";s:2:"ρ";s:4:"𝞏";s:2:"π";s:4:"𝞐";s:2:"Α";s:4:"𝞑";s:2:"Β";s:4:"𝞒";s:2:"Γ";s:4:"𝞓";s:2:"Δ";s:4:"𝞔";s:2:"Ε";s:4:"𝞕";s:2:"Ζ";s:4:"𝞖";s:2:"Η";s:4:"𝞗";s:2:"Θ";s:4:"𝞘";s:2:"Ι";s:4:"𝞙";s:2:"Κ";s:4:"𝞚";s:2:"Λ";s:4:"𝞛";s:2:"Μ";s:4:"𝞜";s:2:"Ν";s:4:"𝞝";s:2:"Ξ";s:4:"𝞞";s:2:"Ο";s:4:"𝞟";s:2:"Π";s:4:"𝞠";s:2:"Ρ";s:4:"𝞡";s:2:"Θ";s:4:"𝞢";s:2:"Σ";s:4:"𝞣";s:2:"Τ";s:4:"𝞤";s:2:"Υ";s:4:"𝞥";s:2:"Φ";s:4:"𝞦";s:2:"Χ";s:4:"𝞧";s:2:"Ψ";s:4:"𝞨";s:2:"Ω";s:4:"𝞩";s:3:"∇";s:4:"𝞪";s:2:"α";s:4:"𝞫";s:2:"β";s:4:"𝞬";s:2:"γ";s:4:"𝞭";s:2:"δ";s:4:"𝞮";s:2:"ε";s:4:"𝞯";s:2:"ζ";s:4:"𝞰";s:2:"η";s:4:"𝞱";s:2:"θ";s:4:"𝞲";s:2:"ι";s:4:"𝞳";s:2:"κ";s:4:"𝞴";s:2:"λ";s:4:"𝞵";s:2:"μ";s:4:"𝞶";s:2:"ν";s:4:"𝞷";s:2:"ξ";s:4:"𝞸";s:2:"ο";s:4:"𝞹";s:2:"π";s:4:"𝞺";s:2:"ρ";s:4:"𝞻";s:2:"ς";s:4:"𝞼";s:2:"σ";s:4:"𝞽";s:2:"τ";s:4:"𝞾";s:2:"υ";s:4:"𝞿";s:2:"φ";s:4:"𝟀";s:2:"χ";s:4:"𝟁";s:2:"ψ";s:4:"𝟂";s:2:"ω";s:4:"𝟃";s:3:"∂";s:4:"𝟄";s:2:"ε";s:4:"𝟅";s:2:"θ";s:4:"𝟆";s:2:"κ";s:4:"𝟇";s:2:"φ";s:4:"𝟈";s:2:"ρ";s:4:"𝟉";s:2:"π";s:4:"𝟊";s:2:"Ϝ";s:4:"𝟋";s:2:"ϝ";s:4:"𝟎";s:1:"0";s:4:"𝟏";s:1:"1";s:4:"𝟐";s:1:"2";s:4:"𝟑";s:1:"3";s:4:"𝟒";s:1:"4";s:4:"𝟓";s:1:"5";s:4:"𝟔";s:1:"6";s:4:"𝟕";s:1:"7";s:4:"𝟖";s:1:"8";s:4:"𝟗";s:1:"9";s:4:"𝟘";s:1:"0";s:4:"𝟙";s:1:"1";s:4:"𝟚";s:1:"2";s:4:"𝟛";s:1:"3";s:4:"𝟜";s:1:"4";s:4:"𝟝";s:1:"5";s:4:"𝟞";s:1:"6";s:4:"𝟟";s:1:"7";s:4:"𝟠";s:1:"8";s:4:"𝟡";s:1:"9";s:4:"𝟢";s:1:"0";s:4:"𝟣";s:1:"1";s:4:"𝟤";s:1:"2";s:4:"𝟥";s:1:"3";s:4:"𝟦";s:1:"4";s:4:"𝟧";s:1:"5";s:4:"𝟨";s:1:"6";s:4:"𝟩";s:1:"7";s:4:"𝟪";s:1:"8";s:4:"𝟫";s:1:"9";s:4:"𝟬";s:1:"0";s:4:"𝟭";s:1:"1";s:4:"𝟮";s:1:"2";s:4:"𝟯";s:1:"3";s:4:"𝟰";s:1:"4";s:4:"𝟱";s:1:"5";s:4:"𝟲";s:1:"6";s:4:"𝟳";s:1:"7";s:4:"𝟴";s:1:"8";s:4:"𝟵";s:1:"9";s:4:"𝟶";s:1:"0";s:4:"𝟷";s:1:"1";s:4:"𝟸";s:1:"2";s:4:"𝟹";s:1:"3";s:4:"𝟺";s:1:"4";s:4:"𝟻";s:1:"5";s:4:"𝟼";s:1:"6";s:4:"𝟽";s:1:"7";s:4:"𝟾";s:1:"8";s:4:"𝟿";s:1:"9";s:4:"🄀";s:2:"0.";s:4:"🄁";s:2:"0,";s:4:"🄂";s:2:"1,";s:4:"🄃";s:2:"2,";s:4:"🄄";s:2:"3,";s:4:"🄅";s:2:"4,";s:4:"🄆";s:2:"5,";s:4:"🄇";s:2:"6,";s:4:"🄈";s:2:"7,";s:4:"🄉";s:2:"8,";s:4:"🄊";s:2:"9,";s:4:"🄐";s:3:"(A)";s:4:"🄑";s:3:"(B)";s:4:"🄒";s:3:"(C)";s:4:"🄓";s:3:"(D)";s:4:"🄔";s:3:"(E)";s:4:"🄕";s:3:"(F)";s:4:"🄖";s:3:"(G)";s:4:"🄗";s:3:"(H)";s:4:"🄘";s:3:"(I)";s:4:"🄙";s:3:"(J)";s:4:"🄚";s:3:"(K)";s:4:"🄛";s:3:"(L)";s:4:"🄜";s:3:"(M)";s:4:"🄝";s:3:"(N)";s:4:"🄞";s:3:"(O)";s:4:"🄟";s:3:"(P)";s:4:"🄠";s:3:"(Q)";s:4:"🄡";s:3:"(R)";s:4:"🄢";s:3:"(S)";s:4:"🄣";s:3:"(T)";s:4:"🄤";s:3:"(U)";s:4:"🄥";s:3:"(V)";s:4:"🄦";s:3:"(W)";s:4:"🄧";s:3:"(X)";s:4:"🄨";s:3:"(Y)";s:4:"🄩";s:3:"(Z)";s:4:"🄪";s:7:"〔S〕";s:4:"🄫";s:1:"C";s:4:"🄬";s:1:"R";s:4:"🄭";s:2:"CD";s:4:"🄮";s:2:"WZ";s:4:"🄰";s:1:"A";s:4:"🄱";s:1:"B";s:4:"🄲";s:1:"C";s:4:"🄳";s:1:"D";s:4:"🄴";s:1:"E";s:4:"🄵";s:1:"F";s:4:"🄶";s:1:"G";s:4:"🄷";s:1:"H";s:4:"🄸";s:1:"I";s:4:"🄹";s:1:"J";s:4:"🄺";s:1:"K";s:4:"🄻";s:1:"L";s:4:"🄼";s:1:"M";s:4:"🄽";s:1:"N";s:4:"🄾";s:1:"O";s:4:"🄿";s:1:"P";s:4:"🅀";s:1:"Q";s:4:"🅁";s:1:"R";s:4:"🅂";s:1:"S";s:4:"🅃";s:1:"T";s:4:"🅄";s:1:"U";s:4:"🅅";s:1:"V";s:4:"🅆";s:1:"W";s:4:"🅇";s:1:"X";s:4:"🅈";s:1:"Y";s:4:"🅉";s:1:"Z";s:4:"🅊";s:2:"HV";s:4:"🅋";s:2:"MV";s:4:"🅌";s:2:"SD";s:4:"🅍";s:2:"SS";s:4:"🅎";s:3:"PPV";s:4:"🅏";s:2:"WC";s:4:"🆐";s:2:"DJ";s:4:"🈀";s:6:"ほか";s:4:"🈁";s:6:"ココ";s:4:"🈂";s:3:"サ";s:4:"🈐";s:3:"手";s:4:"🈑";s:3:"字";s:4:"🈒";s:3:"双";s:4:"🈓";s:6:"デ";s:4:"🈔";s:3:"二";s:4:"🈕";s:3:"多";s:4:"🈖";s:3:"解";s:4:"🈗";s:3:"天";s:4:"🈘";s:3:"交";s:4:"🈙";s:3:"映";s:4:"🈚";s:3:"無";s:4:"🈛";s:3:"料";s:4:"🈜";s:3:"前";s:4:"🈝";s:3:"後";s:4:"🈞";s:3:"再";s:4:"🈟";s:3:"新";s:4:"🈠";s:3:"初";s:4:"🈡";s:3:"終";s:4:"🈢";s:3:"生";s:4:"🈣";s:3:"販";s:4:"🈤";s:3:"声";s:4:"🈥";s:3:"吹";s:4:"🈦";s:3:"演";s:4:"🈧";s:3:"投";s:4:"🈨";s:3:"捕";s:4:"🈩";s:3:"一";s:4:"🈪";s:3:"三";s:4:"🈫";s:3:"遊";s:4:"🈬";s:3:"左";s:4:"🈭";s:3:"中";s:4:"🈮";s:3:"右";s:4:"🈯";s:3:"指";s:4:"🈰";s:3:"走";s:4:"🈱";s:3:"打";s:4:"🈲";s:3:"禁";s:4:"🈳";s:3:"空";s:4:"🈴";s:3:"合";s:4:"🈵";s:3:"満";s:4:"🈶";s:3:"有";s:4:"🈷";s:3:"月";s:4:"🈸";s:3:"申";s:4:"🈹";s:3:"割";s:4:"🈺";s:3:"営";s:4:"🉀";s:9:"〔本〕";s:4:"🉁";s:9:"〔三〕";s:4:"🉂";s:9:"〔二〕";s:4:"🉃";s:9:"〔安〕";s:4:"🉄";s:9:"〔点〕";s:4:"🉅";s:9:"〔打〕";s:4:"🉆";s:9:"〔盗〕";s:4:"🉇";s:9:"〔勝〕";s:4:"🉈";s:9:"〔敗〕";s:4:"🉐";s:3:"得";s:4:"🉑";s:3:"可";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
-
diff --git a/includes/normal/UtfNormalDefines.php b/includes/normal/UtfNormalDefines.php
deleted file mode 100644
index 18d89f6d..00000000
--- a/includes/normal/UtfNormalDefines.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-/**
- * Some constant definitions for the unicode normalization module.
- *
- * Note: these constants must all be resolvable at compile time by HipHop,
- * since this file will not be executed during request startup for a compiled
- * 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
- * @ingroup UtfNormal
- */
-
-define( 'UNICODE_HANGUL_FIRST', 0xac00 );
-define( 'UNICODE_HANGUL_LAST', 0xd7a3 );
-
-define( 'UNICODE_HANGUL_LBASE', 0x1100 );
-define( 'UNICODE_HANGUL_VBASE', 0x1161 );
-define( 'UNICODE_HANGUL_TBASE', 0x11a7 );
-
-define( 'UNICODE_HANGUL_LCOUNT', 19 );
-define( 'UNICODE_HANGUL_VCOUNT', 21 );
-define( 'UNICODE_HANGUL_TCOUNT', 28 );
-define( 'UNICODE_HANGUL_NCOUNT', UNICODE_HANGUL_VCOUNT * UNICODE_HANGUL_TCOUNT );
-
-define( 'UNICODE_HANGUL_LEND', UNICODE_HANGUL_LBASE + UNICODE_HANGUL_LCOUNT - 1 );
-define( 'UNICODE_HANGUL_VEND', UNICODE_HANGUL_VBASE + UNICODE_HANGUL_VCOUNT - 1 );
-define( 'UNICODE_HANGUL_TEND', UNICODE_HANGUL_TBASE + UNICODE_HANGUL_TCOUNT - 1 );
-
-define( 'UNICODE_SURROGATE_FIRST', 0xd800 );
-define( 'UNICODE_SURROGATE_LAST', 0xdfff );
-define( 'UNICODE_MAX', 0x10ffff );
-define( 'UNICODE_REPLACEMENT', 0xfffd );
-
-define( 'UTF8_HANGUL_FIRST', "\xea\xb0\x80" /*codepointToUtf8( UNICODE_HANGUL_FIRST )*/ );
-define( 'UTF8_HANGUL_LAST', "\xed\x9e\xa3" /*codepointToUtf8( UNICODE_HANGUL_LAST )*/ );
-
-define( 'UTF8_HANGUL_LBASE', "\xe1\x84\x80" /*codepointToUtf8( UNICODE_HANGUL_LBASE )*/ );
-define( 'UTF8_HANGUL_VBASE', "\xe1\x85\xa1" /*codepointToUtf8( UNICODE_HANGUL_VBASE )*/ );
-define( 'UTF8_HANGUL_TBASE', "\xe1\x86\xa7" /*codepointToUtf8( UNICODE_HANGUL_TBASE )*/ );
-
-define( 'UTF8_HANGUL_LEND', "\xe1\x84\x92" /*codepointToUtf8( UNICODE_HANGUL_LEND )*/ );
-define( 'UTF8_HANGUL_VEND', "\xe1\x85\xb5" /*codepointToUtf8( UNICODE_HANGUL_VEND )*/ );
-define( 'UTF8_HANGUL_TEND', "\xe1\x87\x82" /*codepointToUtf8( UNICODE_HANGUL_TEND )*/ );
-
-define( 'UTF8_SURROGATE_FIRST', "\xed\xa0\x80" /*codepointToUtf8( UNICODE_SURROGATE_FIRST )*/ );
-define( 'UTF8_SURROGATE_LAST', "\xed\xbf\xbf" /*codepointToUtf8( UNICODE_SURROGATE_LAST )*/ );
-define( 'UTF8_MAX', "\xf4\x8f\xbf\xbf" /*codepointToUtf8( UNICODE_MAX )*/ );
-define( 'UTF8_REPLACEMENT', "\xef\xbf\xbd" /*codepointToUtf8( UNICODE_REPLACEMENT )*/ );
-#define( 'UTF8_REPLACEMENT', '!' );
-
-define( 'UTF8_OVERLONG_A', "\xc1\xbf" );
-define( 'UTF8_OVERLONG_B', "\xe0\x9f\xbf" );
-define( 'UTF8_OVERLONG_C', "\xf0\x8f\xbf\xbf" );
-
-# These two ranges are illegal
-define( 'UTF8_FDD0', "\xef\xb7\x90" /*codepointToUtf8( 0xfdd0 )*/ );
-define( 'UTF8_FDEF', "\xef\xb7\xaf" /*codepointToUtf8( 0xfdef )*/ );
-define( 'UTF8_FFFE', "\xef\xbf\xbe" /*codepointToUtf8( 0xfffe )*/ );
-define( 'UTF8_FFFF', "\xef\xbf\xbf" /*codepointToUtf8( 0xffff )*/ );
-
-define( 'UTF8_HEAD', false );
-define( 'UTF8_TAIL', true );
diff --git a/includes/normal/UtfNormalGenerate.php b/includes/normal/UtfNormalGenerate.php
deleted file mode 100644
index f57aa6cc..00000000
--- a/includes/normal/UtfNormalGenerate.php
+++ /dev/null
@@ -1,250 +0,0 @@
-<?php
-/**
- * This script generates UniNormalData.inc from the Unicode Character Database
- * and supplementary files.
- *
- * Copyright (C) 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-if ( PHP_SAPI != 'cli' ) {
- die( "Run me from the command line please.\n" );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-
-$in = fopen( "DerivedNormalizationProps.txt", "rt" );
-if ( !$in ) {
- print "Can't open DerivedNormalizationProps.txt for reading.\n";
- print "If necessary, fetch this file from the internet:\n";
- print "http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt\n";
- exit( -1 );
-}
-print "Initializing normalization quick check tables...\n";
-$checkNFC = array();
-while ( false !== ( $line = fgets( $in ) ) ) {
- $matches = array();
- if ( preg_match(
- '/^([0-9A-F]+)(?:..([0-9A-F]+))?\s*;\s*(NFC_QC)\s*;\s*([MN])/',
- $line,
- $matches )
- ) {
- list( $junk, $first, $last, $prop, $value ) = $matches;
- #print "$first $last $prop $value\n";
- if ( !$last ) {
- $last = $first;
- }
-
- $lastInDecimal = hexdec( $last );
- for ( $i = hexdec( $first ); $i <= $lastInDecimal; $i++ ) {
- $char = codepointToUtf8( $i );
- $checkNFC[$char] = $value;
- }
- }
-}
-fclose( $in );
-
-$in = fopen( "CompositionExclusions.txt", "rt" );
-if ( !$in ) {
- print "Can't open CompositionExclusions.txt for reading.\n";
- print "If necessary, fetch this file from the internet:\n";
- print "http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt\n";
- exit( -1 );
-}
-$exclude = array();
-while ( false !== ( $line = fgets( $in ) ) ) {
- if ( preg_match( '/^([0-9A-F]+)/i', $line, $matches ) ) {
- $codepoint = $matches[1];
- $source = codepointToUtf8( hexdec( $codepoint ) );
- $exclude[$source] = true;
- }
-}
-fclose( $in );
-
-$in = fopen( "UnicodeData.txt", "rt" );
-if ( !$in ) {
- print "Can't open UnicodeData.txt for reading.\n";
- print "If necessary, fetch this file from the internet:\n";
- print "http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n";
- exit( -1 );
-}
-
-$compatibilityDecomp = array();
-$canonicalDecomp = array();
-$canonicalComp = array();
-$combiningClass = array();
-$total = 0;
-$compat = 0;
-$canon = 0;
-
-print "Reading character definitions...\n";
-while ( false !== ( $line = fgets( $in ) ) ) {
- $columns = explode( ';', $line );
- $codepoint = $columns[0];
- $name = $columns[1];
- $canonicalCombiningClass = $columns[3];
- $decompositionMapping = $columns[5];
-
- $source = codepointToUtf8( hexdec( $codepoint ) );
-
- if ( $canonicalCombiningClass != 0 ) {
- $combiningClass[$source] = intval( $canonicalCombiningClass );
- }
-
- if ( $decompositionMapping === '' ) continue;
- if ( preg_match( '/^<(.+)> (.*)$/', $decompositionMapping, $matches ) ) {
- # Compatibility decomposition
- $canonical = false;
- $decompositionMapping = $matches[2];
- $compat++;
- } else {
- $canonical = true;
- $canon++;
- }
- $total++;
- $dest = hexSequenceToUtf8( $decompositionMapping );
-
- $compatibilityDecomp[$source] = $dest;
- if ( $canonical ) {
- $canonicalDecomp[$source] = $dest;
- if ( empty( $exclude[$source] ) ) {
- $canonicalComp[$dest] = $source;
- }
- }
- #print "$codepoint | $canonicalCombiningClasses | $decompositionMapping\n";
-}
-fclose( $in );
-
-print "Recursively expanding canonical mappings...\n";
-$changed = 42;
-$pass = 1;
-while ( $changed > 0 ) {
- print "pass $pass\n";
- $changed = 0;
- foreach ( $canonicalDecomp as $source => $dest ) {
- $newDest = preg_replace_callback(
- '/([\xc0-\xff][\x80-\xbf]+)/',
- 'callbackCanonical',
- $dest );
- if ( $newDest === $dest ) continue;
- $changed++;
- $canonicalDecomp[$source] = $newDest;
- }
- $pass++;
-}
-
-print "Recursively expanding compatibility mappings...\n";
-$changed = 42;
-$pass = 1;
-while ( $changed > 0 ) {
- print "pass $pass\n";
- $changed = 0;
- foreach ( $compatibilityDecomp as $source => $dest ) {
- $newDest = preg_replace_callback(
- '/([\xc0-\xff][\x80-\xbf]+)/',
- 'callbackCompat',
- $dest );
- if ( $newDest === $dest ) continue;
- $changed++;
- $compatibilityDecomp[$source] = $newDest;
- }
- $pass++;
-}
-
-print "$total decomposition mappings ($canon canonical, $compat compatibility)\n";
-
-$out = fopen( "UtfNormalData.inc", "wt" );
-if ( $out ) {
- $serCombining = escapeSingleString( serialize( $combiningClass ) );
- $serComp = escapeSingleString( serialize( $canonicalComp ) );
- $serCanon = escapeSingleString( serialize( $canonicalDecomp ) );
- $serCheckNFC = escapeSingleString( serialize( $checkNFC ) );
- $outdata = "<" . "?php
-/**
- * This file was automatically generated -- do not edit!
- * Run UtfNormalGenerate.php to create this file again (make clean && make)
- *
- * @file
- */
-// @codingStandardsIgnoreFile
-
-UtfNormal::\$utfCombiningClass = unserialize( '$serCombining' );
-UtfNormal::\$utfCanonicalComp = unserialize( '$serComp' );
-UtfNormal::\$utfCanonicalDecomp = unserialize( '$serCanon' );
-UtfNormal::\$utfCheckNFC = unserialize( '$serCheckNFC' );
-\n";
- fputs( $out, $outdata );
- fclose( $out );
- print "Wrote out UtfNormalData.inc\n";
-} else {
- print "Can't create file UtfNormalData.inc\n";
- exit( -1 );
-}
-
-$out = fopen( "UtfNormalDataK.inc", "wt" );
-if ( $out ) {
- $serCompat = escapeSingleString( serialize( $compatibilityDecomp ) );
- $outdata = "<" . "?php
-/**
- * This file was automatically generated -- do not edit!
- * Run UtfNormalGenerate.php to create this file again (make clean && make)
- *
- * @file
- */
-// @codingStandardsIgnoreFile
-
-UtfNormal::\$utfCompatibilityDecomp = unserialize( '$serCompat' );
-\n";
- fputs( $out, $outdata );
- fclose( $out );
- print "Wrote out UtfNormalDataK.inc\n";
- exit( 0 );
-} else {
- print "Can't create file UtfNormalDataK.inc\n";
- exit( -1 );
-}
-
-# ---------------
-
-function callbackCanonical( $matches ) {
- // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
- global $canonicalDecomp;
- // @codingStandardsIgnoreEnd
-
- if ( isset( $canonicalDecomp[$matches[1]] ) ) {
- return $canonicalDecomp[$matches[1]];
- }
-
- return $matches[1];
-}
-
-function callbackCompat( $matches ) {
- // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
- global $compatibilityDecomp;
- // @codingStandardsIgnoreEnd
-
- if ( isset( $compatibilityDecomp[$matches[1]] ) ) {
- return $compatibilityDecomp[$matches[1]];
- }
-
- return $matches[1];
-}
diff --git a/includes/normal/UtfNormalMemStress.php b/includes/normal/UtfNormalMemStress.php
deleted file mode 100644
index f133e4d5..00000000
--- a/includes/normal/UtfNormalMemStress.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-/**
- * Approximate benchmark for some basic operations.
- * Runs large chunks of text through cleanup with a lowish memory limit,
- * to test regression on mem usage (bug 28146)
- *
- * Copyright © 2004-2011 Brion Vibber <brion@wikimedia.org>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-if ( PHP_SAPI != 'cli' ) {
- die( "Run me from the command line please.\n" );
-}
-
-if ( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) {
- dl( 'php_utfnormal.so' );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-require_once 'UtfNormal.php';
-
-define( 'BENCH_CYCLES', 1 );
-define( 'BIGSIZE', 1024 * 1024 * 10 ); // 10m
-ini_set( 'memory_limit', BIGSIZE + 120 * 1024 * 1024 );
-
-$testfiles = array(
- 'testdata/washington.txt' => 'English text',
- 'testdata/berlin.txt' => 'German text',
- 'testdata/bulgakov.txt' => 'Russian text',
- 'testdata/tokyo.txt' => 'Japanese text',
- 'testdata/young.txt' => 'Korean text'
-);
-$normalizer = new UtfNormal;
-UtfNormal::loadData();
-foreach ( $testfiles as $file => $desc ) {
- benchmarkTest( $normalizer, $file, $desc );
-}
-
-# -------
-
-function benchmarkTest( &$u, $filename, $desc ) {
- print "Testing $filename ($desc)...\n";
- $data = file_get_contents( $filename );
- $all = $data;
- while ( strlen( $all ) < BIGSIZE ) {
- $all .= $all;
- }
- $data = $all;
- echo "Data is " . strlen( $data ) . " bytes.\n";
- $forms = array(
- 'quickIsNFCVerify',
- 'cleanUp',
- );
-
- foreach ( $forms as $form ) {
- if ( is_array( $form ) ) {
- $str = $data;
- foreach ( $form as $step ) {
- $str = benchmarkForm( $u, $str, $step );
- }
- } else {
- benchmarkForm( $u, $data, $form );
- }
- }
-}
-
-function benchmarkForm( &$u, &$data, $form ) {
- #$start = microtime( true );
- for ( $i = 0; $i < BENCH_CYCLES; $i++ ) {
- $start = microtime( true );
- $out = $u->$form( $data, UtfNormal::$utfCanonicalDecomp );
- $deltas[] = ( microtime( true ) - $start );
- }
- #$delta = (microtime( true ) - $start) / BENCH_CYCLES;
- sort( $deltas );
- $delta = $deltas[0]; # Take shortest time
-
- $rate = intval( strlen( $data ) / $delta );
- $same = ( 0 == strcmp( $data, $out ) );
-
- printf( " %20s %6.1fms %12s bytes/s (%s)\n",
- $form,
- $delta * 1000.0,
- number_format( $rate ),
- ( $same ? 'no change' : 'changed' ) );
-
- return $out;
-}
diff --git a/includes/normal/UtfNormalTest.php b/includes/normal/UtfNormalTest.php
deleted file mode 100644
index 10cd0f0c..00000000
--- a/includes/normal/UtfNormalTest.php
+++ /dev/null
@@ -1,257 +0,0 @@
-<?php
-/**
- * Implements the conformance test at:
- * http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-if ( PHP_SAPI != 'cli' ) {
- die( "Run me from the command line please.\n" );
-}
-
-$verbose = true;
-#define( 'PRETTY_UTF8', true );
-
-if ( defined( 'PRETTY_UTF8' ) ) {
- function pretty( $string ) {
- return strtoupper( bin2hex( $string ) );
- }
-} else {
- /**
- * @ignore
- * @param string $string
- * @return string
- */
- function pretty( $string ) {
- return strtoupper( utf8ToHexSequence( $string ) );
- }
-}
-
-if ( isset( $_SERVER['argv'] ) && in_array( '--icu', $_SERVER['argv'] ) ) {
- dl( 'php_utfnormal.so' );
-}
-
-require_once 'UtfNormalDefines.php';
-require_once 'UtfNormalUtil.php';
-require_once 'UtfNormal.php';
-
-$in = fopen( "NormalizationTest.txt", "rt" );
-if ( !$in ) {
- print "Couldn't open NormalizationTest.txt -- can't run tests.\n";
- print "If necessary, manually download this file. It can be obtained at\n";
- print "http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt";
- exit( -1 );
-}
-
-$normalizer = new UtfNormal;
-
-$total = 0;
-$success = 0;
-$failure = 0;
-$ok = true;
-$testedChars = array();
-
-while ( false !== ( $line = fgets( $in ) ) ) {
- list( $data, $comment ) = explode( '#', $line );
- if ( $data === '' ) continue;
- $matches = array();
- if ( preg_match( '/@Part([\d])/', $data, $matches ) ) {
- if ( $matches[1] > 0 ) {
- $ok = reportResults( $total, $success, $failure ) && $ok;
- }
- print "Part {$matches[1]}: $comment";
- continue;
- }
-
- $columns = array_map( "hexSequenceToUtf8", explode( ";", $data ) );
- array_unshift( $columns, '' );
-
- $testedChars[$columns[1]] = true;
- $total++;
- if ( testNormals( $normalizer, $columns, $comment, $verbose ) ) {
- $success++;
- } else {
- $failure++;
- # print "FAILED: $comment";
- }
- if ( $total % 100 == 0 ) print "$total ";
-}
-fclose( $in );
-
-$ok = reportResults( $total, $success, $failure ) && $ok;
-
-$in = fopen( "UnicodeData.txt", "rt" );
-if ( !$in ) {
- print "Can't open UnicodeData.txt for reading.\n";
- print "If necessary, fetch this file from the internet:\n";
- print "http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\n";
- exit( -1 );
-}
-print "Now testing invariants...\n";
-
-while ( false !== ( $line = fgets( $in ) ) ) {
- $cols = explode( ';', $line );
- $char = codepointToUtf8( hexdec( $cols[0] ) );
- $desc = $cols[0] . ": " . $cols[1];
- if ( $char < "\x20" || $char >= UTF8_SURROGATE_FIRST && $char <= UTF8_SURROGATE_LAST ) {
- # Can't check NULL with the ICU plugin, as null bytes fail in C land.
- # Skip other control characters, as we strip them for XML safety.
- # Surrogates are illegal on their own or in UTF-8, ignore.
- continue;
- }
- if ( empty( $testedChars[$char] ) ) {
- $total++;
- if ( testInvariant( $normalizer, $char, $desc, $verbose ) ) {
- $success++;
- } else {
- $failure++;
- }
- if ( $total % 100 == 0 ) print "$total ";
- }
-}
-fclose( $in );
-
-$ok = reportResults( $total, $success, $failure ) && $ok;
-
-if ( $ok ) {
- print "TEST SUCCEEDED!\n";
- exit( 0 );
-} else {
- print "TEST FAILED!\n";
- exit( -1 );
-}
-
-## ------
-
-function reportResults( &$total, &$success, &$failure ) {
- $percSucc = intval( $success * 100 / $total );
- $percFail = intval( $failure * 100 / $total );
- print "\n";
- print "$success tests successful ($percSucc%)\n";
- print "$failure tests failed ($percFail%)\n\n";
- $ok = ( $success > 0 && $failure == 0 );
- $total = 0;
- $success = 0;
- $failure = 0;
-
- return $ok;
-}
-
-function testNormals( &$u, $c, $comment, $verbose, $reportFailure = false ) {
- $result = testNFC( $u, $c, $comment, $reportFailure );
- $result = testNFD( $u, $c, $comment, $reportFailure ) && $result;
- $result = testNFKC( $u, $c, $comment, $reportFailure ) && $result;
- $result = testNFKD( $u, $c, $comment, $reportFailure ) && $result;
- $result = testCleanUp( $u, $c, $comment, $reportFailure ) && $result;
-
- if ( $verbose && !$result && !$reportFailure ) {
- print $comment;
- testNormals( $u, $c, $comment, $verbose, true );
- }
-
- return $result;
-}
-
-function verbosify( $a, $b, $col, $form, $verbose ) {
- #$result = ($a === $b);
- $result = ( strcmp( $a, $b ) == 0 );
- if ( $verbose ) {
- $aa = pretty( $a );
- $bb = pretty( $b );
- $ok = $result ? "succeed" : " failed";
- $eq = $result ? "==" : "!=";
- print " $ok $form c$col '$aa' $eq '$bb'\n";
- }
-
- return $result;
-}
-
-function testNFC( &$u, $c, $comment, $verbose ) {
- $result = verbosify( $c[2], $u->toNFC( $c[1] ), 1, 'NFC', $verbose );
- $result = verbosify( $c[2], $u->toNFC( $c[2] ), 2, 'NFC', $verbose ) && $result;
- $result = verbosify( $c[2], $u->toNFC( $c[3] ), 3, 'NFC', $verbose ) && $result;
- $result = verbosify( $c[4], $u->toNFC( $c[4] ), 4, 'NFC', $verbose ) && $result;
- $result = verbosify( $c[4], $u->toNFC( $c[5] ), 5, 'NFC', $verbose ) && $result;
-
- return $result;
-}
-
-function testCleanUp( &$u, $c, $comment, $verbose ) {
- $x = $c[1];
- $result = verbosify( $c[2], $u->cleanUp( $x ), 1, 'cleanUp', $verbose );
- $x = $c[2];
- $result = verbosify( $c[2], $u->cleanUp( $x ), 2, 'cleanUp', $verbose ) && $result;
- $x = $c[3];
- $result = verbosify( $c[2], $u->cleanUp( $x ), 3, 'cleanUp', $verbose ) && $result;
- $x = $c[4];
- $result = verbosify( $c[4], $u->cleanUp( $x ), 4, 'cleanUp', $verbose ) && $result;
- $x = $c[5];
- $result = verbosify( $c[4], $u->cleanUp( $x ), 5, 'cleanUp', $verbose ) && $result;
-
- return $result;
-}
-
-function testNFD( &$u, $c, $comment, $verbose ) {
- $result = verbosify( $c[3], $u->toNFD( $c[1] ), 1, 'NFD', $verbose );
- $result = verbosify( $c[3], $u->toNFD( $c[2] ), 2, 'NFD', $verbose ) && $result;
- $result = verbosify( $c[3], $u->toNFD( $c[3] ), 3, 'NFD', $verbose ) && $result;
- $result = verbosify( $c[5], $u->toNFD( $c[4] ), 4, 'NFD', $verbose ) && $result;
- $result = verbosify( $c[5], $u->toNFD( $c[5] ), 5, 'NFD', $verbose ) && $result;
-
- return $result;
-}
-
-function testNFKC( &$u, $c, $comment, $verbose ) {
- $result = verbosify( $c[4], $u->toNFKC( $c[1] ), 1, 'NFKC', $verbose );
- $result = verbosify( $c[4], $u->toNFKC( $c[2] ), 2, 'NFKC', $verbose ) && $result;
- $result = verbosify( $c[4], $u->toNFKC( $c[3] ), 3, 'NFKC', $verbose ) && $result;
- $result = verbosify( $c[4], $u->toNFKC( $c[4] ), 4, 'NFKC', $verbose ) && $result;
- $result = verbosify( $c[4], $u->toNFKC( $c[5] ), 5, 'NFKC', $verbose ) && $result;
-
- return $result;
-}
-
-function testNFKD( &$u, $c, $comment, $verbose ) {
- $result = verbosify( $c[5], $u->toNFKD( $c[1] ), 1, 'NFKD', $verbose );
- $result = verbosify( $c[5], $u->toNFKD( $c[2] ), 2, 'NFKD', $verbose ) && $result;
- $result = verbosify( $c[5], $u->toNFKD( $c[3] ), 3, 'NFKD', $verbose ) && $result;
- $result = verbosify( $c[5], $u->toNFKD( $c[4] ), 4, 'NFKD', $verbose ) && $result;
- $result = verbosify( $c[5], $u->toNFKD( $c[5] ), 5, 'NFKD', $verbose ) && $result;
-
- return $result;
-}
-
-function testInvariant( &$u, $char, $desc, $verbose, $reportFailure = false ) {
- $result = verbosify( $char, $u->toNFC( $char ), 1, 'NFC', $reportFailure );
- $result = verbosify( $char, $u->toNFD( $char ), 1, 'NFD', $reportFailure ) && $result;
- $result = verbosify( $char, $u->toNFKC( $char ), 1, 'NFKC', $reportFailure ) && $result;
- $result = verbosify( $char, $u->toNFKD( $char ), 1, 'NFKD', $reportFailure ) && $result;
- $result = verbosify( $char, $u->cleanUp( $char ), 1, 'cleanUp', $reportFailure ) && $result;
-
- if ( $verbose && !$result && !$reportFailure ) {
- print $desc;
- testInvariant( $u, $char, $desc, $verbose, true );
- }
-
- return $result;
-}
diff --git a/includes/normal/UtfNormalTest2.php b/includes/normal/UtfNormalTest2.php
deleted file mode 100644
index 53e68c29..00000000
--- a/includes/normal/UtfNormalTest2.php
+++ /dev/null
@@ -1,275 +0,0 @@
-#!/usr/bin/env php
-<?php
-/**
- * Other tests for the unicode normalization module.
- *
- * 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 UtfNormal
- */
-
-if ( PHP_SAPI != 'cli' ) {
- die( "Run me from the command line please.\n" );
-}
-
-// From http://unicode.org/Public/UNIDATA/NormalizationTest.txt
-$file = "NormalizationTest.txt";
-
-// Anything after this character is a comment
-define ( 'COMMENT', '#' );
-
-// Semicolons are used to separate the columns
-define ( 'SEPARATOR', ';' );
-
-$f = fopen( $file, "r" );
-
-/**
- * The following section will be used for testing different normalization methods.
- * - Pure PHP
- * ~ no assertion errors
- * ~ 6.25 minutes
- * - php_utfnormal.so or intl extension: both are wrappers around
- * libicu so we list the version of libicu when making the
- * comparison
- * - libicu Ubuntu 3.8.1-3ubuntu1.1 php 5.2.6-3ubuntu4.5
- * ~ 2200 assertion errors
- * ~ 5 seconds
- * ~ output: http://paste2.org/p/921566
- * - libicu Ubuntu 4.2.1-3 php 5.3.2-1ubuntu4.2
- * ~ 1384 assertion errors
- * ~ 15 seconds
- * ~ output: http://paste2.org/p/921435
- * - libicu Debian 4.4.1-5 php 5.3.2-1ubuntu4.2
- * ~ no assertion errors
- * ~ 13 seconds
- * - Tests comparing pure PHP output with libicu output were added
- * later and slow down the runtime.
- */
-
-require_once './UtfNormal.php';
-function normalize_form_c( $c ) {
- return UtfNormal::toNFC( $c );
-}
-
-function normalize_form_d( $c ) {
- return UtfNormal::toNFD( $c );
-}
-
-function normalize_form_kc( $c ) {
- return UtfNormal::toNFKC( $c );
-}
-
-function normalize_form_kd( $c ) {
- return UtfNormal::toNFKD( $c );
-}
-
-/**
- * This set of functions is only useful if youve added a param to the
- * following functions to force pure PHP usage. I decided not to
- * commit that code since might produce a slowdown in the UTF
- * normalization code just for the sake of these tests. -- hexmode
- * @return string
- */
-function normalize_form_c_php( $c ) {
- return UtfNormal::toNFC( $c, "php" );
-}
-
-function normalize_form_d_php( $c ) {
- return UtfNormal::toNFD( $c, "php" );
-}
-
-function normalize_form_kc_php( $c ) {
- return UtfNormal::toNFKC( $c, "php" );
-}
-
-function normalize_form_kd_php( $c ) {
- return UtfNormal::toNFKD( $c, "php" );
-}
-
-assert_options( ASSERT_ACTIVE, 1 );
-assert_options( ASSERT_WARNING, 0 );
-assert_options( ASSERT_QUIET_EVAL, 1 );
-assert_options( ASSERT_CALLBACK, 'my_assert' );
-
-function my_assert( $file, $line, $code ) {
- // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
- global $col, $lineNo;
- // @codingStandardsIgnoreEnd
-
- echo "Assertion that '$code' failed on line $lineNo ($col[5])\n";
-}
-
-$count = 0;
-$lineNo = 0;
-if ( $f !== false ) {
- while ( ( $col = getRow( $f ) ) !== false ) {
- $lineNo++;
-
- if ( count( $col ) == 6 ) {
- $count++;
- if ( $count % 100 === 0 ) echo "Count: $count\n";
- } else {
- continue;
- }
-
- # verify that the pure PHP version is correct
- $NFCc1 = normalize_form_c( $col[0] );
- $NFCc1p = normalize_form_c_php( $col[0] );
- assert( '$NFCc1 === $NFCc1p' );
- $NFCc2 = normalize_form_c( $col[1] );
- $NFCc2p = normalize_form_c_php( $col[1] );
- assert( '$NFCc2 === $NFCc2p' );
- $NFCc3 = normalize_form_c( $col[2] );
- $NFCc3p = normalize_form_c_php( $col[2] );
- assert( '$NFCc3 === $NFCc3p' );
- $NFCc4 = normalize_form_c( $col[3] );
- $NFCc4p = normalize_form_c_php( $col[3] );
- assert( '$NFCc4 === $NFCc4p' );
- $NFCc5 = normalize_form_c( $col[4] );
- $NFCc5p = normalize_form_c_php( $col[4] );
- assert( '$NFCc5 === $NFCc5p' );
-
- $NFDc1 = normalize_form_d( $col[0] );
- $NFDc1p = normalize_form_d_php( $col[0] );
- assert( '$NFDc1 === $NFDc1p' );
- $NFDc2 = normalize_form_d( $col[1] );
- $NFDc2p = normalize_form_d_php( $col[1] );
- assert( '$NFDc2 === $NFDc2p' );
- $NFDc3 = normalize_form_d( $col[2] );
- $NFDc3p = normalize_form_d_php( $col[2] );
- assert( '$NFDc3 === $NFDc3p' );
- $NFDc4 = normalize_form_d( $col[3] );
- $NFDc4p = normalize_form_d_php( $col[3] );
- assert( '$NFDc4 === $NFDc4p' );
- $NFDc5 = normalize_form_d( $col[4] );
- $NFDc5p = normalize_form_d_php( $col[4] );
- assert( '$NFDc5 === $NFDc5p' );
-
- $NFKDc1 = normalize_form_kd( $col[0] );
- $NFKDc1p = normalize_form_kd_php( $col[0] );
- assert( '$NFKDc1 === $NFKDc1p' );
- $NFKDc2 = normalize_form_kd( $col[1] );
- $NFKDc2p = normalize_form_kd_php( $col[1] );
- assert( '$NFKDc2 === $NFKDc2p' );
- $NFKDc3 = normalize_form_kd( $col[2] );
- $NFKDc3p = normalize_form_kd_php( $col[2] );
- assert( '$NFKDc3 === $NFKDc3p' );
- $NFKDc4 = normalize_form_kd( $col[3] );
- $NFKDc4p = normalize_form_kd_php( $col[3] );
- assert( '$NFKDc4 === $NFKDc4p' );
- $NFKDc5 = normalize_form_kd( $col[4] );
- $NFKDc5p = normalize_form_kd_php( $col[4] );
- assert( '$NFKDc5 === $NFKDc5p' );
-
- $NFKCc1 = normalize_form_kc( $col[0] );
- $NFKCc1p = normalize_form_kc_php( $col[0] );
- assert( '$NFKCc1 === $NFKCc1p' );
- $NFKCc2 = normalize_form_kc( $col[1] );
- $NFKCc2p = normalize_form_kc_php( $col[1] );
- assert( '$NFKCc2 === $NFKCc2p' );
- $NFKCc3 = normalize_form_kc( $col[2] );
- $NFKCc3p = normalize_form_kc_php( $col[2] );
- assert( '$NFKCc3 === $NFKCc3p' );
- $NFKCc4 = normalize_form_kc( $col[3] );
- $NFKCc4p = normalize_form_kc_php( $col[3] );
- assert( '$NFKCc4 === $NFKCc4p' );
- $NFKCc5 = normalize_form_kc( $col[4] );
- $NFKCc5p = normalize_form_kc_php( $col[4] );
- assert( '$NFKCc5 === $NFKCc5p' );
-
- # c2 == NFC(c1) == NFC(c2) == NFC(c3)
- assert( '$col[1] === $NFCc1' );
- assert( '$col[1] === $NFCc2' );
- assert( '$col[1] === $NFCc3' );
-
- # c4 == NFC(c4) == NFC(c5)
- assert( '$col[3] === $NFCc4' );
- assert( '$col[3] === $NFCc5' );
-
- # c3 == NFD(c1) == NFD(c2) == NFD(c3)
- assert( '$col[2] === $NFDc1' );
- assert( '$col[2] === $NFDc2' );
- assert( '$col[2] === $NFDc3' );
-
- # c5 == NFD(c4) == NFD(c5)
- assert( '$col[4] === $NFDc4' );
- assert( '$col[4] === $NFDc5' );
-
- # c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5)
- assert( '$col[3] === $NFKCc1' );
- assert( '$col[3] === $NFKCc2' );
- assert( '$col[3] === $NFKCc3' );
- assert( '$col[3] === $NFKCc4' );
- assert( '$col[3] === $NFKCc5' );
-
- # c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5)
- assert( '$col[4] === $NFKDc1' );
- assert( '$col[4] === $NFKDc2' );
- assert( '$col[4] === $NFKDc3' );
- assert( '$col[4] === $NFKDc4' );
- assert( '$col[4] === $NFKDc5' );
- }
-}
-echo "done.\n";
-
-// Compare against http://en.wikipedia.org/wiki/UTF-8#Description
-function unichr( $c ) {
- if ( $c <= 0x7F ) {
- return chr( $c );
- } elseif ( $c <= 0x7FF ) {
- return chr( 0xC0 | $c >> 6 ) . chr( 0x80 | $c & 0x3F );
- } elseif ( $c <= 0xFFFF ) {
- return chr( 0xE0 | $c >> 12 ) . chr( 0x80 | $c >> 6 & 0x3F )
- . chr( 0x80 | $c & 0x3F );
- } elseif ( $c <= 0x10FFFF ) {
- return chr( 0xF0 | $c >> 18 ) . chr( 0x80 | $c >> 12 & 0x3F )
- . chr( 0x80 | $c >> 6 & 0x3F )
- . chr( 0x80 | $c & 0x3F );
- } else {
- return false;
- }
-}
-
-function unistr( $c ) {
- return implode( "", array_map( "unichr", array_map( "hexdec", explode( " ", $c ) ) ) );
-}
-
-function getRow( $f ) {
- $row = fgets( $f );
- if ( $row === false ) return false;
- $row = rtrim( $row );
- $pos = strpos( $row, COMMENT );
- $pos2 = strpos( $row, ")" );
- if ( $pos === 0 ) return array( $row );
- $c = "";
-
- if ( $pos ) {
- if ( $pos2 ) $c = substr( $row, $pos2 + 2 );
- else $c = substr( $row, $pos );
- $row = substr( $row, 0, $pos );
- }
-
- $ret = array();
- foreach ( explode( SEPARATOR, $row ) as $ent ) {
- if ( trim( $ent ) !== "" ) {
- $ret[] = unistr( $ent );
- }
- }
- $ret[] = $c;
-
- return $ret;
-}
diff --git a/includes/normal/UtfNormalUtil.php b/includes/normal/UtfNormalUtil.php
deleted file mode 100644
index 6c925dfa..00000000
--- a/includes/normal/UtfNormalUtil.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-/**
- * Some of these functions are adapted from places in MediaWiki.
- * Should probably merge them for consistency.
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup UtfNormal
- */
-
-/**
- * Return UTF-8 sequence for a given Unicode code point.
- * May die if fed out of range data.
- *
- * @param $codepoint Integer:
- * @return String
- * @public
- */
-function codepointToUtf8( $codepoint ) {
- if ( $codepoint < 0x80 ) {
- return chr( $codepoint );
- }
-
- if ( $codepoint < 0x800 ) {
- return chr( $codepoint >> 6 & 0x3f | 0xc0 ) .
- chr( $codepoint & 0x3f | 0x80 );
- }
-
- if ( $codepoint < 0x10000 ) {
- return chr( $codepoint >> 12 & 0x0f | 0xe0 ) .
- chr( $codepoint >> 6 & 0x3f | 0x80 ) .
- chr( $codepoint & 0x3f | 0x80 );
- }
-
- if ( $codepoint < 0x110000 ) {
- return chr( $codepoint >> 18 & 0x07 | 0xf0 ) .
- chr( $codepoint >> 12 & 0x3f | 0x80 ) .
- chr( $codepoint >> 6 & 0x3f | 0x80 ) .
- chr( $codepoint & 0x3f | 0x80 );
- }
-
- echo "Asked for code outside of range ($codepoint)\n";
- die( -1 );
-}
-
-/**
- * Take a series of space-separated hexadecimal numbers representing
- * Unicode code points and return a UTF-8 string composed of those
- * characters. Used by UTF-8 data generation and testing routines.
- *
- * @param $sequence String
- * @return String
- * @private
- */
-function hexSequenceToUtf8( $sequence ) {
- $utf = '';
- foreach ( explode( ' ', $sequence ) as $hex ) {
- $n = hexdec( $hex );
- $utf .= codepointToUtf8( $n );
- }
-
- return $utf;
-}
-
-/**
- * Take a UTF-8 string and return a space-separated series of hex
- * numbers representing Unicode code points. For debugging.
- *
- * @param string $str UTF-8 string.
- * @return string
- * @private
- */
-function utf8ToHexSequence( $str ) {
- $buf = '';
- foreach ( preg_split( '//u', $str, -1, PREG_SPLIT_NO_EMPTY ) as $cp ) {
- $buf .= sprintf( '%04x ', utf8ToCodepoint( $cp ) );
- }
-
- return rtrim( $buf );
-}
-
-/**
- * Determine the Unicode codepoint of a single-character UTF-8 sequence.
- * Does not check for invalid input data.
- *
- * @param $char String
- * @return Integer
- * @public
- */
-function utf8ToCodepoint( $char ) {
- # Find the length
- $z = ord( $char[0] );
- if ( $z & 0x80 ) {
- $length = 0;
- while ( $z & 0x80 ) {
- $length++;
- $z <<= 1;
- }
- } else {
- $length = 1;
- }
-
- if ( $length != strlen( $char ) ) {
- return false;
- }
-
- if ( $length == 1 ) {
- return ord( $char );
- }
-
- # Mask off the length-determining bits and shift back to the original location
- $z &= 0xff;
- $z >>= $length;
-
- # Add in the free bits from subsequent bytes
- for ( $i = 1; $i < $length; $i++ ) {
- $z <<= 6;
- $z |= ord( $char[$i] ) & 0x3f;
- }
-
- return $z;
-}
-
-/**
- * Escape a string for inclusion in a PHP single-quoted string literal.
- *
- * @param string $string string to be escaped.
- * @return String: escaped string.
- * @public
- */
-function escapeSingleString( $string ) {
- return strtr( $string,
- array(
- '\\' => '\\\\',
- '\'' => '\\\''
- ) );
-}
diff --git a/includes/objectcache/APCBagOStuff.php b/includes/objectcache/APCBagOStuff.php
deleted file mode 100644
index 4cbb32df..00000000
--- a/includes/objectcache/APCBagOStuff.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-/**
- * Object caching using PHP's APC accelerator.
- *
- * 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 Cache
- */
-
-/**
- * This is a wrapper for APC's shared memory functions
- *
- * @ingroup Cache
- */
-class APCBagOStuff extends BagOStuff {
- /**
- * @param string $key
- * @param int $casToken [optional]
- * @return mixed
- */
- public function get( $key, &$casToken = null ) {
- $val = apc_fetch( $key );
-
- $casToken = $val;
-
- if ( is_string( $val ) ) {
- if ( $this->isInteger( $val ) ) {
- $val = intval( $val );
- } else {
- $val = unserialize( $val );
- }
- }
-
- return $val;
- }
-
- /**
- * @param string $key
- * @param mixed $value
- * @param int $exptime
- * @return bool
- */
- public function set( $key, $value, $exptime = 0 ) {
- if ( !$this->isInteger( $value ) ) {
- $value = serialize( $value );
- }
-
- apc_store( $key, $value, $exptime );
-
- return true;
- }
-
- /**
- * @param mixed $casToken
- * @param string $key
- * @param mixed $value
- * @param int $exptime
- * @return bool
- */
- public function cas( $casToken, $key, $value, $exptime = 0 ) {
- // APC's CAS functions only work on integers
- throw new MWException( "CAS is not implemented in " . __CLASS__ );
- }
-
- /**
- * @param string $key
- * @param int $time
- * @return bool
- */
- public function delete( $key, $time = 0 ) {
- apc_delete( $key );
-
- return true;
- }
-
- /**
- * @param string $key
- * @param Closure $callback Callback method to be executed
- * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
- * @param int $attempts The amount of times to attempt a merge in case of failure
- * @return bool Success
- */
- public function merge( $key, Closure $callback, $exptime = 0, $attempts = 10 ) {
- return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
- }
-
- public function incr( $key, $value = 1 ) {
- return apc_inc( $key, $value );
- }
-
- public function decr( $key, $value = 1 ) {
- return apc_dec( $key, $value );
- }
-}
diff --git a/includes/objectcache/EmptyBagOStuff.php b/includes/objectcache/EmptyBagOStuff.php
deleted file mode 100644
index 9595b83c..00000000
--- a/includes/objectcache/EmptyBagOStuff.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Dummy object caching.
- *
- * 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 Cache
- */
-
-/**
- * A BagOStuff object with no objects in it. Used to provide a no-op object to calling code.
- *
- * @ingroup Cache
- */
-class EmptyBagOStuff extends BagOStuff {
-
- /**
- * @param string $key
- * @param mixed $casToken [optional]
- * @return bool
- */
- function get( $key, &$casToken = null ) {
- return false;
- }
-
- /**
- * @param string $key
- * @param mixed $value
- * @param int $exp
- * @return bool
- */
- function set( $key, $value, $exp = 0 ) {
- return true;
- }
-
- /**
- * @param mixed $casToken
- * @param string $key
- * @param mixed $value
- * @param int $exp
- * @return bool
- */
- function cas( $casToken, $key, $value, $exp = 0 ) {
- return true;
- }
-
- /**
- * @param string $key
- * @param int $time
- * @return bool
- */
- function delete( $key, $time = 0 ) {
- return true;
- }
-
- /**
- * @param string $key
- * @param Closure $callback Callback method to be executed
- * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
- * @param int $attempts The amount of times to attempt a merge in case of failure
- * @return bool Success
- */
- public function merge( $key, Closure $callback, $exptime = 0, $attempts = 10 ) {
- return true;
- }
-}
diff --git a/includes/objectcache/HashBagOStuff.php b/includes/objectcache/HashBagOStuff.php
deleted file mode 100644
index 6e50a8c3..00000000
--- a/includes/objectcache/HashBagOStuff.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/**
- * Object caching using PHP arrays.
- *
- * 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 Cache
- */
-
-/**
- * This is a test of the interface, mainly. It stores things in an associative
- * array, which is not going to persist between program runs.
- *
- * @ingroup Cache
- */
-class HashBagOStuff extends BagOStuff {
- /** @var array */
- protected $bag;
-
- function __construct() {
- $this->bag = array();
- }
-
- /**
- * @param string $key
- * @return bool
- */
- protected function expire( $key ) {
- $et = $this->bag[$key][1];
-
- if ( ( $et == 0 ) || ( $et > time() ) ) {
- return false;
- }
-
- $this->delete( $key );
-
- return true;
- }
-
- /**
- * @param string $key
- * @param mixed $casToken [optional]
- * @return bool|mixed
- */
- function get( $key, &$casToken = null ) {
- if ( !isset( $this->bag[$key] ) ) {
- return false;
- }
-
- if ( $this->expire( $key ) ) {
- return false;
- }
-
- $casToken = serialize( $this->bag[$key][0] );
-
- return $this->bag[$key][0];
- }
-
- /**
- * @param string $key
- * @param mixed $value
- * @param int $exptime
- * @return bool
- */
- function set( $key, $value, $exptime = 0 ) {
- $this->bag[$key] = array( $value, $this->convertExpiry( $exptime ) );
- return true;
- }
-
- /**
- * @param mixed $casToken
- * @param string $key
- * @param mixed $value
- * @param int $exptime
- * @return bool
- */
- function cas( $casToken, $key, $value, $exptime = 0 ) {
- if ( serialize( $this->get( $key ) ) === $casToken ) {
- return $this->set( $key, $value, $exptime );
- }
-
- return false;
- }
-
- /**
- * @param string $key
- * @param int $time
- * @return bool
- */
- function delete( $key, $time = 0 ) {
- if ( !isset( $this->bag[$key] ) ) {
- return false;
- }
-
- unset( $this->bag[$key] );
-
- return true;
- }
-}
diff --git a/includes/objectcache/MemcachedBagOStuff.php b/includes/objectcache/MemcachedBagOStuff.php
index 53edcdde..83bee700 100644
--- a/includes/objectcache/MemcachedBagOStuff.php
+++ b/includes/objectcache/MemcachedBagOStuff.php
@@ -84,18 +84,17 @@ class MemcachedBagOStuff extends BagOStuff {
* @param int $exptime
* @return bool
*/
- public function cas( $casToken, $key, $value, $exptime = 0 ) {
+ protected function cas( $casToken, $key, $value, $exptime = 0 ) {
return $this->client->cas( $casToken, $this->encodeKey( $key ),
$value, $this->fixExpiry( $exptime ) );
}
/**
* @param string $key
- * @param int $time
* @return bool
*/
- public function delete( $key, $time = 0 ) {
- return $this->client->delete( $this->encodeKey( $key ), $time );
+ public function delete( $key ) {
+ return $this->client->delete( $this->encodeKey( $key ) );
}
/**
@@ -109,6 +108,14 @@ class MemcachedBagOStuff extends BagOStuff {
$this->fixExpiry( $exptime ) );
}
+ public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+ if ( !is_callable( $callback ) ) {
+ throw new Exception( "Got invalid callback." );
+ }
+
+ return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+ }
+
/**
* Get the underlying client object. This is provided for debugging
* purposes.
@@ -145,7 +152,7 @@ class MemcachedBagOStuff extends BagOStuff {
* TTLs higher than 30 days will be detected as absolute TTLs
* (UNIX timestamps), and will result in the cache entry being
* discarded immediately because the expiry is in the past.
- * Clamp expiries >30d at 30d, unless they're >=1e9 in which
+ * Clamp expires >30d at 30d, unless they're >=1e9 in which
* case they are likely to really be absolute (1e9 = 2011-09-09)
* @param int $expiry
* @return int
@@ -174,6 +181,6 @@ class MemcachedBagOStuff extends BagOStuff {
* @param string $text
*/
protected function debugLog( $text ) {
- wfDebugLog( 'memcached', $text );
+ $this->logger->debug( $text );
}
}
diff --git a/includes/objectcache/MemcachedClient.php b/includes/objectcache/MemcachedClient.php
index 41eebfb5..bc4a00b2 100644
--- a/includes/objectcache/MemcachedClient.php
+++ b/includes/objectcache/MemcachedClient.php
@@ -64,6 +64,9 @@
* @version 0.1.2
*/
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+
// {{{ requirements
// }}}
@@ -233,6 +236,11 @@ class MWMemcached {
*/
public $_connect_attempts;
+ /**
+ * @var LoggerInterface
+ */
+ private $_logger;
+
// }}}
// }}}
// {{{ methods
@@ -263,6 +271,8 @@ class MWMemcached {
$this->_connect_timeout = isset( $args['connect_timeout'] ) ? $args['connect_timeout'] : 0.1;
$this->_connect_attempts = 2;
+
+ $this->_logger = isset( $args['logger'] ) ? $args['logger'] : new NullLogger();
}
// }}}
@@ -413,7 +423,6 @@ class MWMemcached {
* @return mixed
*/
public function get( $key, &$casToken = null ) {
- wfProfileIn( __METHOD__ );
if ( $this->_debug ) {
$this->_debugprint( "get($key)\n" );
@@ -421,19 +430,16 @@ class MWMemcached {
if ( !is_array( $key ) && strval( $key ) === '' ) {
$this->_debugprint( "Skipping key which equals to an empty string" );
- wfProfileOut( __METHOD__ );
return false;
}
if ( !$this->_active ) {
- wfProfileOut( __METHOD__ );
return false;
}
$sock = $this->get_sock( $key );
if ( !is_resource( $sock ) ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -446,7 +452,6 @@ class MWMemcached {
$cmd = "gets $key\r\n";
if ( !$this->_fwrite( $sock, $cmd ) ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -463,7 +468,6 @@ class MWMemcached {
if ( isset( $val[$key] ) ) {
$value = $val[$key];
}
- wfProfileOut( __METHOD__ );
return $value;
}
@@ -1110,14 +1114,14 @@ class MWMemcached {
* @param string $text
*/
function _debugprint( $text ) {
- wfDebugLog( 'memcached', $text );
+ $this->_logger->debug( $text );
}
/**
* @param string $text
*/
function _error_log( $text ) {
- wfDebugLog( 'memcached-serious', "Memcached error: $text" );
+ $this->_logger->error( "Memcached error: $text" );
}
/**
diff --git a/includes/objectcache/MemcachedPeclBagOStuff.php b/includes/objectcache/MemcachedPeclBagOStuff.php
index c853bcf4..f2c49281 100644
--- a/includes/objectcache/MemcachedPeclBagOStuff.php
+++ b/includes/objectcache/MemcachedPeclBagOStuff.php
@@ -43,8 +43,10 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
* values, but serialization is much slower unless the php.ini option
* igbinary.compact_strings is off.
* @param array $params
+ * @throws MWException
*/
function __construct( $params ) {
+ parent::__construct( $params );
$params = $this->applyDefaultParams( $params );
if ( $params['persistent'] ) {
@@ -53,7 +55,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
// We can only reuse a pool ID if we keep the config consistent.
$this->client = new Memcached( md5( serialize( $params ) ) );
if ( count( $this->client->getServerList() ) ) {
- wfDebug( __METHOD__ . ": persistent Memcached object already loaded.\n" );
+ $this->logger->debug( __METHOD__ . ": persistent Memcached object already loaded." );
return; // already initialized; don't add duplicate servers
}
} else {
@@ -119,11 +121,9 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
* @return mixed
*/
public function get( $key, &$casToken = null ) {
- wfProfileIn( __METHOD__ );
$this->debugLog( "get($key)" );
$result = $this->client->get( $this->encodeKey( $key ), null, $casToken );
$result = $this->checkResult( $key, $result );
- wfProfileOut( __METHOD__ );
return $result;
}
@@ -145,19 +145,18 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
* @param int $exptime
* @return bool
*/
- public function cas( $casToken, $key, $value, $exptime = 0 ) {
+ protected function cas( $casToken, $key, $value, $exptime = 0 ) {
$this->debugLog( "cas($key)" );
return $this->checkResult( $key, parent::cas( $casToken, $key, $value, $exptime ) );
}
/**
* @param string $key
- * @param int $time
* @return bool
*/
- public function delete( $key, $time = 0 ) {
+ public function delete( $key ) {
$this->debugLog( "delete($key)" );
- $result = parent::delete( $key, $time );
+ $result = parent::delete( $key );
if ( $result === false && $this->client->getResultCode() === Memcached::RES_NOTFOUND ) {
// "Not found" is counted as success in our interface
return true;
@@ -224,14 +223,16 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
break;
default:
$msg = $this->client->getResultMessage();
+ $logCtx = array();
if ( $key !== false ) {
$server = $this->client->getServerByKey( $key );
- $serverName = "{$server['host']}:{$server['port']}";
- $msg = "Memcached error for key \"$key\" on server \"$serverName\": $msg";
+ $logCtx['memcached-server'] = "{$server['host']}:{$server['port']}";
+ $logCtx['memcached-key'] = $key;
+ $msg = "Memcached error for key \"{memcached-key}\" on server \"{memcached-server}\": $msg";
} else {
$msg = "Memcached error: $msg";
}
- wfDebugLog( 'memcached-serious', $msg );
+ $this->logger->error( $msg, $logCtx );
$this->setLastError( BagOStuff::ERR_UNEXPECTED );
}
return $result;
@@ -242,11 +243,9 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
* @return array
*/
public function getMulti( array $keys ) {
- wfProfileIn( __METHOD__ );
$this->debugLog( 'getMulti(' . implode( ', ', $keys ) . ')' );
$callback = array( $this, 'encodeKey' );
$result = $this->client->getMulti( array_map( $callback, $keys ) );
- wfProfileOut( __METHOD__ );
$result = $result ?: array(); // must be an array
return $this->checkResult( false, $result );
}
@@ -257,7 +256,6 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
* @return bool
*/
public function setMulti( array $data, $exptime = 0 ) {
- wfProfileIn( __METHOD__ );
foreach ( $data as $key => $value ) {
$encKey = $this->encodeKey( $key );
if ( $encKey !== $key ) {
@@ -267,7 +265,6 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
}
$this->debugLog( 'setMulti(' . implode( ', ', array_keys( $data ) ) . ')' );
$result = $this->client->setMulti( $data, $this->fixExpiry( $exptime ) );
- wfProfileOut( __METHOD__ );
return $this->checkResult( false, $result );
}
}
diff --git a/includes/objectcache/MemcachedPhpBagOStuff.php b/includes/objectcache/MemcachedPhpBagOStuff.php
index 330d2b52..6fba61ba 100644
--- a/includes/objectcache/MemcachedPhpBagOStuff.php
+++ b/includes/objectcache/MemcachedPhpBagOStuff.php
@@ -42,6 +42,7 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
* @param array $params
*/
function __construct( $params ) {
+ parent::__construct( $params );
$params = $this->applyDefaultParams( $params );
$this->client = new MemCachedClientforWiki( $params );
@@ -67,23 +68,6 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
/**
* @param string $key
- * @param int $timeout
- * @return bool
- */
- public function lock( $key, $timeout = 0 ) {
- return $this->client->lock( $this->encodeKey( $key ), $timeout );
- }
-
- /**
- * @param string $key
- * @return mixed
- */
- public function unlock( $key ) {
- return $this->client->unlock( $this->encodeKey( $key ) );
- }
-
- /**
- * @param string $key
* @param int $value
* @return mixed
*/
diff --git a/includes/objectcache/MultiWriteBagOStuff.php b/includes/objectcache/MultiWriteBagOStuff.php
index 6a691379..be54e4d3 100644
--- a/includes/objectcache/MultiWriteBagOStuff.php
+++ b/includes/objectcache/MultiWriteBagOStuff.php
@@ -40,11 +40,12 @@ class MultiWriteBagOStuff extends BagOStuff {
* the documentation of $wgObjectCaches for more detail.
*
* @param array $params
- * @throws MWException
+ * @throws InvalidArgumentException
*/
public function __construct( $params ) {
+ parent::__construct( $params );
if ( !isset( $params['caches'] ) ) {
- throw new MWException( __METHOD__ . ': the caches parameter is required' );
+ throw new InvalidArgumentException( __METHOD__ . ': the caches parameter is required' );
}
$this->caches = array();
@@ -76,17 +77,6 @@ class MultiWriteBagOStuff extends BagOStuff {
}
/**
- * @param mixed $casToken
- * @param string $key
- * @param mixed $value
- * @param mixed $exptime
- * @return bool
- */
- public function cas( $casToken, $key, $value, $exptime = 0 ) {
- throw new MWException( "CAS is not implemented in " . __CLASS__ );
- }
-
- /**
* @param string $key
* @param mixed $value
* @param int $exptime
@@ -98,11 +88,10 @@ class MultiWriteBagOStuff extends BagOStuff {
/**
* @param string $key
- * @param int $time
* @return bool
*/
- public function delete( $key, $time = 0 ) {
- return $this->doWrite( 'delete', $key, $time );
+ public function delete( $key ) {
+ return $this->doWrite( 'delete', $key );
}
/**
@@ -136,12 +125,13 @@ class MultiWriteBagOStuff extends BagOStuff {
/**
* @param string $key
* @param int $timeout
+ * @param int $expiry
* @return bool
*/
- public function lock( $key, $timeout = 0 ) {
+ public function lock( $key, $timeout = 6, $expiry = 6 ) {
// Lock only the first cache, to avoid deadlocks
if ( isset( $this->caches[0] ) ) {
- return $this->caches[0]->lock( $key, $timeout );
+ return $this->caches[0]->lock( $key, $timeout, $expiry );
} else {
return true;
}
@@ -161,12 +151,12 @@ class MultiWriteBagOStuff extends BagOStuff {
/**
* @param string $key
- * @param Closure $callback Callback method to be executed
+ * @param callable $callback Callback method to be executed
* @param int $exptime Either an interval in seconds or a unix timestamp for expiry
* @param int $attempts The amount of times to attempt a merge in case of failure
* @return bool Success
*/
- public function merge( $key, Closure $callback, $exptime = 0, $attempts = 10 ) {
+ public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
return $this->doWrite( 'merge', $key, $callback, $exptime );
}
diff --git a/includes/objectcache/ObjectCache.php b/includes/objectcache/ObjectCache.php
index 633b34a2..2e47e24a 100644
--- a/includes/objectcache/ObjectCache.php
+++ b/includes/objectcache/ObjectCache.php
@@ -21,6 +21,8 @@
* @ingroup Cache
*/
+use MediaWiki\Logger\LoggerFactory;
+
/**
* Functions to get cache objects
*
@@ -81,6 +83,13 @@ class ObjectCache {
* @return BagOStuff
*/
static function newFromParams( $params ) {
+ if ( isset( $params['loggroup'] ) ) {
+ $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
+ } else {
+ // For backwards-compatability with custom parameters, lets not
+ // have all logging suddenly disappear
+ $params['logger'] = LoggerFactory::getInstance( 'objectcache' );
+ }
if ( isset( $params['factory'] ) ) {
return call_user_func( $params['factory'], $params );
} elseif ( isset( $params['class'] ) ) {
@@ -135,7 +144,7 @@ class ObjectCache {
} elseif ( function_exists( 'wincache_ucache_get' ) ) {
$id = 'wincache';
} else {
- if ( $fallback ) {
+ if ( $fallback !== null ) {
return self::newFromId( $fallback );
}
throw new MWException( "CACHE_ACCEL requested but no suitable object " .
diff --git a/includes/objectcache/ObjectCacheSessionHandler.php b/includes/objectcache/ObjectCacheSessionHandler.php
index cdf8da1e..789f1e3b 100644
--- a/includes/objectcache/ObjectCacheSessionHandler.php
+++ b/includes/objectcache/ObjectCacheSessionHandler.php
@@ -28,6 +28,9 @@
* @ingroup Cache
*/
class ObjectCacheSessionHandler {
+ /** @var array Map of (session ID => SHA-1 of the data) */
+ protected static $hashCache = array();
+
/**
* Install a session handler for the current web request
*/
@@ -49,10 +52,11 @@ class ObjectCacheSessionHandler {
/**
* Get the cache storage object to use for session storage
- * @return ObjectCache
+ * @return BagOStuff
*/
- static function getCache() {
+ protected static function getCache() {
global $wgSessionCacheType;
+
return ObjectCache::getInstance( $wgSessionCacheType );
}
@@ -62,11 +66,19 @@ class ObjectCacheSessionHandler {
* @param string $id Session id
* @return string Cache key
*/
- static function getKey( $id ) {
+ protected static function getKey( $id ) {
return wfMemcKey( 'session', $id );
}
/**
+ * @param mixed $data
+ * @return string
+ */
+ protected static function getHash( $data ) {
+ return sha1( serialize( $data ) );
+ }
+
+ /**
* Callback when opening a session.
*
* @param string $save_path Path used to store session files, unused
@@ -95,22 +107,29 @@ class ObjectCacheSessionHandler {
*/
static function read( $id ) {
$data = self::getCache()->get( self::getKey( $id ) );
- if ( $data === false ) {
- return '';
- }
- return $data;
+
+ self::$hashCache = array( $id => self::getHash( $data ) );
+
+ return ( $data === false ) ? '' : $data;
}
/**
* Callback when writing session data.
*
* @param string $id Session id
- * @param mixed $data Session data
+ * @param string $data Session data
* @return bool Success
*/
static function write( $id, $data ) {
global $wgObjectCacheSessionExpiry;
- self::getCache()->set( self::getKey( $id ), $data, $wgObjectCacheSessionExpiry );
+
+ // Only issue a write if anything changed (PHP 5.6 already does this)
+ if ( !isset( self::$hashCache[$id] )
+ || self::getHash( $data ) !== self::$hashCache[$id]
+ ) {
+ self::getCache()->set( self::getKey( $id ), $data, $wgObjectCacheSessionExpiry );
+ }
+
return true;
}
@@ -122,6 +141,7 @@ class ObjectCacheSessionHandler {
*/
static function destroy( $id ) {
self::getCache()->delete( self::getKey( $id ) );
+
return true;
}
diff --git a/includes/objectcache/RedisBagOStuff.php b/includes/objectcache/RedisBagOStuff.php
index ae8cc5b7..de3511df 100644
--- a/includes/objectcache/RedisBagOStuff.php
+++ b/includes/objectcache/RedisBagOStuff.php
@@ -56,6 +56,7 @@ class RedisBagOStuff extends BagOStuff {
* @param array $params
*/
function __construct( $params ) {
+ parent::__construct( $params );
$redisConf = array( 'serializer' => 'none' ); // manage that in this class
foreach ( array( 'connectTimeout', 'persistent', 'password' ) as $opt ) {
if ( isset( $params[$opt] ) ) {
@@ -73,7 +74,6 @@ class RedisBagOStuff extends BagOStuff {
}
public function get( $key, &$casToken = null ) {
- $section = new ProfileSection( __METHOD__ );
list( $server, $conn ) = $this->getConnection( $key );
if ( !$conn ) {
@@ -93,7 +93,6 @@ class RedisBagOStuff extends BagOStuff {
}
public function set( $key, $value, $expiry = 0 ) {
- $section = new ProfileSection( __METHOD__ );
list( $server, $conn ) = $this->getConnection( $key );
if ( !$conn ) {
@@ -116,8 +115,7 @@ class RedisBagOStuff extends BagOStuff {
return $result;
}
- public function cas( $casToken, $key, $value, $expiry = 0 ) {
- $section = new ProfileSection( __METHOD__ );
+ protected function cas( $casToken, $key, $value, $expiry = 0 ) {
list( $server, $conn ) = $this->getConnection( $key );
if ( !$conn ) {
@@ -150,8 +148,7 @@ class RedisBagOStuff extends BagOStuff {
return $result;
}
- public function delete( $key, $time = 0 ) {
- $section = new ProfileSection( __METHOD__ );
+ public function delete( $key ) {
list( $server, $conn ) = $this->getConnection( $key );
if ( !$conn ) {
@@ -171,7 +168,6 @@ class RedisBagOStuff extends BagOStuff {
}
public function getMulti( array $keys ) {
- $section = new ProfileSection( __METHOD__ );
$batches = array();
$conns = array();
@@ -217,7 +213,6 @@ class RedisBagOStuff extends BagOStuff {
* @return bool
*/
public function setMulti( array $data, $expiry = 0 ) {
- $section = new ProfileSection( __METHOD__ );
$batches = array();
$conns = array();
@@ -265,7 +260,6 @@ class RedisBagOStuff extends BagOStuff {
public function add( $key, $value, $expiry = 0 ) {
- $section = new ProfileSection( __METHOD__ );
list( $server, $conn ) = $this->getConnection( $key );
if ( !$conn ) {
@@ -303,7 +297,6 @@ class RedisBagOStuff extends BagOStuff {
* @return int|bool New value or false on failure
*/
public function incr( $key, $value = 1 ) {
- $section = new ProfileSection( __METHOD__ );
list( $server, $conn ) = $this->getConnection( $key );
if ( !$conn ) {
@@ -322,6 +315,15 @@ class RedisBagOStuff extends BagOStuff {
$this->logRequest( 'incr', $key, $server, $result );
return $result;
}
+
+ public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+ if ( !is_callable( $callback ) ) {
+ throw new Exception( "Got invalid callback." );
+ }
+
+ return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+ }
+
/**
* @param mixed $data
* @return string
@@ -371,7 +373,7 @@ class RedisBagOStuff extends BagOStuff {
* @param string $msg
*/
protected function logError( $msg ) {
- wfDebugLog( 'redis', "Redis error: $msg" );
+ $this->logger->error( "Redis error: $msg" );
}
/**
diff --git a/includes/objectcache/SqlBagOStuff.php b/includes/objectcache/SqlBagOStuff.php
index 58720790..82eeb842 100644
--- a/includes/objectcache/SqlBagOStuff.php
+++ b/includes/objectcache/SqlBagOStuff.php
@@ -88,6 +88,7 @@ class SqlBagOStuff extends BagOStuff {
* @param array $params
*/
public function __construct( $params ) {
+ parent::__construct( $params );
if ( isset( $params['servers'] ) ) {
$this->serverInfos = $params['servers'];
$this->numServers = count( $this->serverInfos );
@@ -118,6 +119,7 @@ class SqlBagOStuff extends BagOStuff {
*
* @param int $serverIndex
* @return DatabaseBase
+ * @throws MWException
*/
protected function getDB( $serverIndex ) {
global $wgDebugDBTransactions;
@@ -137,12 +139,14 @@ class SqlBagOStuff extends BagOStuff {
# If server connection info was given, use that
if ( $this->serverInfos ) {
if ( $wgDebugDBTransactions ) {
- wfDebug( "Using provided serverInfo for SqlBagOStuff\n" );
+ $this->logger->debug( "Using provided serverInfo for SqlBagOStuff" );
}
$info = $this->serverInfos[$serverIndex];
$type = isset( $info['type'] ) ? $info['type'] : 'mysql';
$host = isset( $info['host'] ) ? $info['host'] : '[unknown]';
- wfDebug( __CLASS__ . ": connecting to $host\n" );
+ $this->logger->debug( __CLASS__ . ": connecting to $host" );
+ // Use a blank trx profiler to ignore expections as this is a cache
+ $info['trxProfiler'] = new TransactionProfiler();
$db = DatabaseBase::factory( $type, $info );
$db->clearFlag( DBO_TRX );
} else {
@@ -160,7 +164,7 @@ class SqlBagOStuff extends BagOStuff {
}
}
if ( $wgDebugDBTransactions ) {
- wfDebug( sprintf( "Connection %s will be used for SqlBagOStuff\n", $db ) );
+ $this->logger->debug( sprintf( "Connection %s will be used for SqlBagOStuff", $db ) );
}
$this->conns[$serverIndex] = $db;
}
@@ -322,9 +326,7 @@ class SqlBagOStuff extends BagOStuff {
if ( $exptime == 0 ) {
$encExpiry = $this->getMaxDateTime( $db );
} else {
- if ( $exptime < 3.16e8 ) { # ~10 years
- $exptime += time();
- }
+ $exptime = $this->convertExpiry( $exptime );
$encExpiry = $db->timestamp( $exptime );
}
foreach ( $serverKeys as $tableName => $tableKeys ) {
@@ -377,10 +379,7 @@ class SqlBagOStuff extends BagOStuff {
if ( $exptime == 0 ) {
$encExpiry = $this->getMaxDateTime( $db );
} else {
- if ( $exptime < 3.16e8 ) { # ~10 years
- $exptime += time();
- }
-
+ $exptime = $this->convertExpiry( $exptime );
$encExpiry = $db->timestamp( $exptime );
}
// (bug 24425) use a replace if the db supports it instead of
@@ -408,7 +407,7 @@ class SqlBagOStuff extends BagOStuff {
* @param int $exptime
* @return bool
*/
- public function cas( $casToken, $key, $value, $exptime = 0 ) {
+ protected function cas( $casToken, $key, $value, $exptime = 0 ) {
list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
try {
$db = $this->getDB( $serverIndex );
@@ -421,9 +420,7 @@ class SqlBagOStuff extends BagOStuff {
if ( $exptime == 0 ) {
$encExpiry = $this->getMaxDateTime( $db );
} else {
- if ( $exptime < 3.16e8 ) { # ~10 years
- $exptime += time();
- }
+ $exptime = $this->convertExpiry( $exptime );
$encExpiry = $db->timestamp( $exptime );
}
// (bug 24425) use a replace if the db supports it instead of
@@ -452,10 +449,9 @@ class SqlBagOStuff extends BagOStuff {
/**
* @param string $key
- * @param int $time
* @return bool
*/
- public function delete( $key, $time = 0 ) {
+ public function delete( $key ) {
list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
try {
$db = $this->getDB( $serverIndex );
@@ -520,6 +516,14 @@ class SqlBagOStuff extends BagOStuff {
return $newValue;
}
+ public function merge( $key, $callback, $exptime = 0, $attempts = 10 ) {
+ if ( !is_callable( $callback ) ) {
+ throw new Exception( "Got invalid callback." );
+ }
+
+ return $this->mergeViaCas( $key, $callback, $exptime, $attempts );
+ }
+
/**
* @param DatabaseBase $db
* @param string $exptime
@@ -621,7 +625,8 @@ class SqlBagOStuff extends BagOStuff {
if ( $remainingSeconds > $totalSeconds ) {
$totalSeconds = $remainingSeconds;
}
- $percent = ( $i + $remainingSeconds / $totalSeconds )
+ $processedSeconds = $totalSeconds - $remainingSeconds;
+ $percent = ( $i + $processedSeconds / $totalSeconds )
/ $this->shards * 100;
}
$percent = ( $percent / $this->numServers )
@@ -638,6 +643,11 @@ class SqlBagOStuff extends BagOStuff {
return true;
}
+ /**
+ * Delete content of shard tables in every server.
+ * Return true if the operation is successful, false otherwise.
+ * @return bool
+ */
public function deleteAll() {
for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
try {
@@ -702,13 +712,13 @@ class SqlBagOStuff extends BagOStuff {
if ( $exception instanceof DBConnectionError ) {
$this->markServerDown( $exception, $serverIndex );
}
- wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
+ $this->logger->error( "DBError: {$exception->getMessage()}" );
if ( $exception instanceof DBConnectionError ) {
$this->setLastError( BagOStuff::ERR_UNREACHABLE );
- wfDebug( __METHOD__ . ": ignoring connection error\n" );
+ $this->logger->debug( __METHOD__ . ": ignoring connection error" );
} else {
$this->setLastError( BagOStuff::ERR_UNEXPECTED );
- wfDebug( __METHOD__ . ": ignoring query error\n" );
+ $this->logger->debug( __METHOD__ . ": ignoring query error" );
}
}
@@ -723,18 +733,21 @@ class SqlBagOStuff extends BagOStuff {
$this->markServerDown( $exception, $serverIndex );
}
if ( $exception->db && $exception->db->wasReadOnlyError() ) {
- try {
- $exception->db->rollback( __METHOD__ );
- } catch ( DBError $e ) {
+ if ( $exception->db->trxLevel() ) {
+ try {
+ $exception->db->rollback( __METHOD__ );
+ } catch ( DBError $e ) {
+ }
}
}
- wfDebugLog( 'SQLBagOStuff', "DBError: {$exception->getMessage()}" );
+
+ $this->logger->error( "DBError: {$exception->getMessage()}" );
if ( $exception instanceof DBConnectionError ) {
$this->setLastError( BagOStuff::ERR_UNREACHABLE );
- wfDebug( __METHOD__ . ": ignoring connection error\n" );
+ $this->logger->debug( __METHOD__ . ": ignoring connection error" );
} else {
$this->setLastError( BagOStuff::ERR_UNEXPECTED );
- wfDebug( __METHOD__ . ": ignoring query error\n" );
+ $this->logger->debug( __METHOD__ . ": ignoring query error" );
}
}
@@ -750,12 +763,12 @@ class SqlBagOStuff extends BagOStuff {
unset( $this->connFailureTimes[$serverIndex] );
unset( $this->connFailureErrors[$serverIndex] );
} else {
- wfDebug( __METHOD__ . ": Server #$serverIndex already down\n" );
+ $this->logger->debug( __METHOD__ . ": Server #$serverIndex already down" );
return;
}
}
$now = time();
- wfDebug( __METHOD__ . ": Server #$serverIndex down until " . ( $now + 60 ) . "\n" );
+ $this->logger->info( __METHOD__ . ": Server #$serverIndex down until " . ( $now + 60 ) );
$this->connFailureTimes[$serverIndex] = $now;
$this->connFailureErrors[$serverIndex] = $exception;
}
@@ -779,9 +792,3 @@ class SqlBagOStuff extends BagOStuff {
}
}
}
-
-/**
- * Backwards compatibility alias
- */
-class MediaWikiBagOStuff extends SqlBagOStuff {
-}
diff --git a/includes/objectcache/XCacheBagOStuff.php b/includes/objectcache/XCacheBagOStuff.php
deleted file mode 100644
index 8e2a160d..00000000
--- a/includes/objectcache/XCacheBagOStuff.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-/**
- * Object caching using XCache.
- *
- * 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 Cache
- */
-
-/**
- * Wrapper for XCache object caching functions; identical interface
- * to the APC wrapper
- *
- * @ingroup Cache
- */
-class XCacheBagOStuff extends BagOStuff {
- /**
- * Get a value from the XCache object cache
- *
- * @param string $key Cache key
- * @param mixed $casToken Cas token
- * @return mixed
- */
- public function get( $key, &$casToken = null ) {
- $val = xcache_get( $key );
-
- if ( is_string( $val ) ) {
- if ( $this->isInteger( $val ) ) {
- $val = intval( $val );
- } else {
- $val = unserialize( $val );
- }
- } elseif ( is_null( $val ) ) {
- return false;
- }
-
- return $val;
- }
-
- /**
- * Store a value in the XCache object cache
- *
- * @param string $key Cache key
- * @param mixed $value Object to store
- * @param int $expire Expiration time
- * @return bool
- */
- public function set( $key, $value, $expire = 0 ) {
- if ( !$this->isInteger( $value ) ) {
- $value = serialize( $value );
- }
-
- xcache_set( $key, $value, $expire );
- return true;
- }
-
- /**
- * @param mixed $casToken
- * @param string $key
- * @param mixed $value
- * @param int $exptime
- * @return bool
- */
- public function cas( $casToken, $key, $value, $exptime = 0 ) {
- // Can't find any documentation on xcache cas
- throw new MWException( "CAS is not implemented in " . __CLASS__ );
- }
-
- /**
- * Remove a value from the XCache object cache
- *
- * @param string $key Cache key
- * @param int $time Not used in this implementation
- * @return bool
- */
- public function delete( $key, $time = 0 ) {
- xcache_unset( $key );
- return true;
- }
-
- /**
- * Merge an item.
- * XCache does not seem to support any way of performing CAS - this however will
- * provide a way to perform CAS-like functionality.
- *
- * @param string $key
- * @param Closure $callback Callback method to be executed
- * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
- * @param int $attempts The amount of times to attempt a merge in case of failure
- * @return bool Success
- */
- public function merge( $key, Closure $callback, $exptime = 0, $attempts = 10 ) {
- return $this->mergeViaLock( $key, $callback, $exptime, $attempts );
- }
-
- public function incr( $key, $value = 1 ) {
- return xcache_inc( $key, $value );
- }
-
- public function decr( $key, $value = 1 ) {
- return xcache_dec( $key, $value );
- }
-}
diff --git a/includes/page/Article.php b/includes/page/Article.php
index 4e753817..4cde5ad8 100644
--- a/includes/page/Article.php
+++ b/includes/page/Article.php
@@ -30,8 +30,6 @@
* See design.txt for an overview.
* Note: edit user interface and cache support functions have been
* moved to separate EditPage and HTMLFileCache classes.
- *
- * @internal documentation reviewed 15 Mar 2010
*/
class Article implements Page {
/** @var IContextSource The context this Article is executed in */
@@ -120,7 +118,7 @@ class Article implements Page {
}
$page = null;
- wfRunHooks( 'ArticleFromTitle', array( &$title, &$page, $context ) );
+ Hooks::run( 'ArticleFromTitle', array( &$title, &$page, $context ) );
if ( !$page ) {
switch ( $title->getNamespace() ) {
case NS_FILE:
@@ -226,7 +224,6 @@ class Article implements Page {
* @since 1.21
*/
protected function getContentObject() {
- wfProfileIn( __METHOD__ );
if ( $this->mPage->getID() === 0 ) {
# If this is a MediaWiki:x message, then load the messages
@@ -247,7 +244,6 @@ class Article implements Page {
$content = $this->mContentObject;
}
- wfProfileOut( __METHOD__ );
return $content;
}
@@ -344,12 +340,9 @@ class Article implements Page {
return $this->mContent;
}
- wfProfileIn( __METHOD__ );
-
$content = $this->fetchContentObject();
if ( !$content ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -357,8 +350,6 @@ class Article implements Page {
$this->mContent = ContentHandler::getContentText( $content );
ContentHandler::runLegacyHooks( 'ArticleAfterFetchContent', array( &$this, &$this->mContent ) );
- wfProfileOut( __METHOD__ );
-
return $this->mContent;
}
@@ -379,8 +370,6 @@ class Article implements Page {
return $this->mContentObject;
}
- wfProfileIn( __METHOD__ );
-
$this->mContentLoaded = true;
$this->mContent = null;
@@ -389,7 +378,7 @@ class Article implements Page {
# Pre-fill content with error message so that if something
# fails we'll have something telling us what we intended.
//XXX: this isn't page content but a UI message. horrible.
- $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ), array() );
+ $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ) );
if ( $oldid ) {
# $this->mRevision might already be fetched by getOldIDFromRequest()
@@ -397,24 +386,24 @@ class Article implements Page {
$this->mRevision = Revision::newFromId( $oldid );
if ( !$this->mRevision ) {
wfDebug( __METHOD__ . " failed to retrieve specified revision, id $oldid\n" );
- wfProfileOut( __METHOD__ );
return false;
}
}
} else {
- if ( !$this->mPage->getLatest() ) {
+ $oldid = $this->mPage->getLatest();
+ if ( !$oldid ) {
wfDebug( __METHOD__ . " failed to find page data for title " .
$this->getTitle()->getPrefixedText() . "\n" );
- wfProfileOut( __METHOD__ );
return false;
}
+ # Update error message with correct oldid
+ $this->mContentObject = new MessageContent( 'missing-revision', array( $oldid ) );
+
$this->mRevision = $this->mPage->getRevision();
if ( !$this->mRevision ) {
- wfDebug( __METHOD__ . " failed to retrieve current page, rev_id " .
- $this->mPage->getLatest() . "\n" );
- wfProfileOut( __METHOD__ );
+ wfDebug( __METHOD__ . " failed to retrieve current page, rev_id $oldid\n" );
return false;
}
}
@@ -422,15 +411,21 @@ class Article implements Page {
// @todo FIXME: Horrible, horrible! This content-loading interface just plain sucks.
// We should instead work with the Revision object when we need it...
// Loads if user is allowed
- $this->mContentObject = $this->mRevision->getContent(
+ $content = $this->mRevision->getContent(
Revision::FOR_THIS_USER,
$this->getContext()->getUser()
);
- $this->mRevIdFetched = $this->mRevision->getId();
- wfRunHooks( 'ArticleAfterFetchContentObject', array( &$this, &$this->mContentObject ) );
+ if ( !$content ) {
+ wfDebug( __METHOD__ . " failed to retrieve content of revision " .
+ $this->mRevision->getId() . "\n" );
+ return false;
+ }
+
+ $this->mContentObject = $content;
+ $this->mRevIdFetched = $this->mRevision->getId();
- wfProfileOut( __METHOD__ );
+ Hooks::run( 'ArticleAfterFetchContentObject', array( &$this, &$this->mContentObject ) );
return $this->mContentObject;
}
@@ -482,8 +477,6 @@ class Article implements Page {
public function view() {
global $wgUseFileCache, $wgUseETag, $wgDebugToolbar, $wgMaxRedirects;
- wfProfileIn( __METHOD__ );
-
# Get variables from query string
# As side effect this will load the revision and update the title
# in a revision ID is passed in the request, so this should remain
@@ -495,7 +488,6 @@ class Article implements Page {
$permErrors = $this->getTitle()->getUserPermissionsErrors( 'read', $user );
if ( count( $permErrors ) ) {
wfDebug( __METHOD__ . ": denied on secondary read check\n" );
- wfProfileOut( __METHOD__ );
throw new PermissionsError( 'read', $permErrors );
}
@@ -504,7 +496,6 @@ class Article implements Page {
if ( $this->mRedirectUrl ) {
$outputPage->redirect( $this->mRedirectUrl );
wfDebug( __METHOD__ . ": redirecting due to oldid\n" );
- wfProfileOut( __METHOD__ );
return;
}
@@ -513,7 +504,6 @@ class Article implements Page {
if ( $this->getContext()->getRequest()->getCheck( 'diff' ) ) {
wfDebug( __METHOD__ . ": showing diff page\n" );
$this->showDiffPage();
- wfProfileOut( __METHOD__ );
return;
}
@@ -568,7 +558,6 @@ class Article implements Page {
# Is it client cached?
if ( $outputPage->checkLastModified( $timestamp ) ) {
wfDebug( __METHOD__ . ": done 304\n" );
- wfProfileOut( __METHOD__ );
return;
# Try file cache
@@ -577,7 +566,6 @@ class Article implements Page {
# tell wgOut that output is taken care of
$outputPage->disable();
$this->mPage->doViewUpdates( $user, $oldid );
- wfProfileOut( __METHOD__ );
return;
}
@@ -587,7 +575,7 @@ class Article implements Page {
$useParserCache = $this->mPage->isParserCacheUsed( $parserOptions, $oldid );
wfDebug( 'Article::view using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
if ( $user->getStubThreshold() ) {
- wfIncrStats( 'pcache_miss_stub' );
+ $this->getContext()->getStats()->increment( 'pcache_miss_stub' );
}
$this->showRedirectedFromHeader();
@@ -602,7 +590,7 @@ class Article implements Page {
while ( !$outputDone && ++$pass ) {
switch ( $pass ) {
case 1:
- wfRunHooks( 'ArticleViewHeader', array( &$this, &$outputDone, &$useParserCache ) );
+ Hooks::run( 'ArticleViewHeader', array( &$this, &$outputDone, &$useParserCache ) );
break;
case 2:
# Early abort if the page doesn't exist
@@ -610,7 +598,6 @@ class Article implements Page {
wfDebug( __METHOD__ . ": showing missing article\n" );
$this->showMissingArticle();
$this->mPage->doViewUpdates( $user );
- wfProfileOut( __METHOD__ );
return;
}
@@ -649,7 +636,6 @@ class Article implements Page {
if ( !$this->showDeletedRevisionHeader() ) {
wfDebug( __METHOD__ . ": cannot view deleted revision\n" );
- wfProfileOut( __METHOD__ );
return;
}
}
@@ -665,7 +651,7 @@ class Article implements Page {
wfDebug( __METHOD__ . ": showing CSS/JS source\n" );
$this->showCssOrJsPage();
$outputDone = true;
- } elseif ( !wfRunHooks( 'ArticleContentViewCustom',
+ } elseif ( !Hooks::run( 'ArticleContentViewCustom',
array( $this->fetchContentObject(), $this->getTitle(), $outputPage ) ) ) {
# Allow extensions do their own custom view for certain pages
@@ -696,16 +682,14 @@ class Article implements Page {
$outputPage->addWikiText( '<div class="errorbox">' . $errortext . '</div>' );
}
# Connection or timeout error
- wfProfileOut( __METHOD__ );
return;
}
$this->mParserOutput = $poolArticleView->getParserOutput();
$outputPage->addParserOutput( $this->mParserOutput );
if ( $content->getRedirectTarget() ) {
- $outputPage->addSubtitle(
- "<span id=\"redirectsub\">" . wfMessage( 'redirectpagesub' )->parse() . "</span>"
- );
+ $outputPage->addSubtitle( "<span id=\"redirectsub\">" .
+ $this->getContext()->msg( 'redirectpagesub' )->parse() . "</span>" );
}
# Don't cache a dirty ParserOutput object
@@ -724,7 +708,7 @@ class Article implements Page {
}
# Get the ParserOutput actually *displayed* here.
- # Note that $this->mParserOutput is the *current* version output.
+ # Note that $this->mParserOutput is the *current*/oldid version output.
$pOutput = ( $outputDone instanceof ParserOutput )
? $outputDone // object fetched by hook
: $this->mParserOutput;
@@ -755,7 +739,6 @@ class Article implements Page {
$outputPage->addModules( 'mediawiki.action.view.postEdit' );
- wfProfileOut( __METHOD__ );
}
/**
@@ -774,9 +757,8 @@ class Article implements Page {
* Show a diff page according to current request variables. For use within
* Article::view() only, other callers should use the DifferenceEngine class.
*
- * @todo Make protected
*/
- public function showDiffPage() {
+ protected function showDiffPage() {
$request = $this->getContext()->getRequest();
$user = $this->getContext()->getUser();
$diff = $request->getVal( 'diff' );
@@ -790,7 +772,11 @@ class Article implements Page {
if ( !$rev ) {
$this->getContext()->getOutput()->setPageTitle( wfMessage( 'errorpagetitle' ) );
- $this->getContext()->getOutput()->addWikiMsg( 'difference-missing-revision', $oldid, 1 );
+ $msg = $this->getContext()->msg( 'difference-missing-revision' )
+ ->params( $oldid )
+ ->numParams( 1 )
+ ->parseAsBlock();
+ $this->getContext()->getOutput()->addHtml( $msg );
return;
}
@@ -831,7 +817,7 @@ class Article implements Page {
if ( $showCacheHint ) {
$dir = $this->getContext()->getLanguage()->getDir();
- $lang = $this->getContext()->getLanguage()->getCode();
+ $lang = $this->getContext()->getLanguage()->getHtmlCode();
$outputPage->wrapWikiMsg(
"<div id='mw-clearyourcache' lang='$lang' dir='$dir' class='mw-content-$dir'>\n$1\n</div>",
@@ -973,9 +959,10 @@ class Article implements Page {
*/
public function showRedirectedFromHeader() {
global $wgRedirectSources;
- $outputPage = $this->getContext()->getOutput();
- $request = $this->getContext()->getRequest();
+ $context = $this->getContext();
+ $outputPage = $context->getOutput();
+ $request = $context->getRequest();
$rdfrom = $request->getVal( 'rdfrom' );
// Construct a URL for the current page view, but with the target title
@@ -991,7 +978,7 @@ class Article implements Page {
if ( isset( $this->mRedirectedFrom ) ) {
// This is an internally redirected page view.
// We'll need a backlink to the source page for navigation.
- if ( wfRunHooks( 'ArticleViewRedirect', array( &$this ) ) ) {
+ if ( Hooks::run( 'ArticleViewRedirect', array( &$this ) ) ) {
$redir = Linker::linkKnown(
$this->mRedirectedFrom,
null,
@@ -999,7 +986,9 @@ class Article implements Page {
array( 'redirect' => 'no' )
);
- $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+ $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
+ $context->msg( 'redirectedfrom' )->rawParams( $redir )->parse()
+ . "</span>" );
// Add the script to update the displayed URL and
// set the fragment if one was specified in the redirect
@@ -1021,7 +1010,9 @@ class Article implements Page {
// If it was reported from a trusted site, supply a backlink.
if ( $wgRedirectSources && preg_match( $wgRedirectSources, $rdfrom ) ) {
$redir = Linker::makeExternalLink( $rdfrom, $rdfrom );
- $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
+ $outputPage->addSubtitle( "<span class=\"mw-redirectedfrom\">" .
+ $context->msg( 'redirectedfrom' )->rawParams( $redir )->parse()
+ . "</span>" );
// Add the script to update the displayed URL
$outputPage->addJsConfigVars( array(
@@ -1065,7 +1056,7 @@ class Article implements Page {
// Show a footer allowing the user to patrol the shown revision or page if possible
$patrolFooterShown = $this->showPatrolFooter();
- wfRunHooks( 'ArticleViewFooter', array( $this, $patrolFooterShown ) );
+ Hooks::run( 'ArticleViewFooter', array( $this, $patrolFooterShown ) );
}
/**
@@ -1092,8 +1083,6 @@ class Article implements Page {
return false;
}
- wfProfileIn( __METHOD__ );
-
// New page patrol: Get the timestamp of the oldest revison which
// the revision table holds for the given page. Then we look
// whether it's within the RC lifespan and if it is, we try
@@ -1102,7 +1091,6 @@ class Article implements Page {
// Check for cached results
if ( $cache->get( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ) ) ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -1111,7 +1099,6 @@ class Article implements Page {
) {
// The current revision is already older than what could be in the RC table
// 6h tolerance because the RC might not be cleaned out regularly
- wfProfileOut( __METHOD__ );
return false;
}
@@ -1147,14 +1134,12 @@ class Article implements Page {
// Don't cache in case we can patrol as this could change
$cache->set( wfMemcKey( 'NotPatrollablePage', $this->getTitle()->getArticleID() ), '1' );
- wfProfileOut( __METHOD__ );
return false;
}
- if ( $rc->getPerformer()->getName() == $user->getName() ) {
+ if ( $rc->getPerformer()->equals( $user ) ) {
// Don't show a patrol link for own creations. If the user could
// patrol them, they already would be patrolled
- wfProfileOut( __METHOD__ );
return false;
}
@@ -1184,7 +1169,6 @@ class Article implements Page {
'</div>'
);
- wfProfileOut( __METHOD__ );
return true;
}
@@ -1214,7 +1198,8 @@ class Article implements Page {
if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
$outputPage->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n\$1\n</div>",
array( 'userpage-userdoesnotexist-view', wfEscapeWikiText( $rootPart ) ) );
- } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) { # Show log extract if the user is currently blocked
+ } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) {
+ # Show log extract if the user is currently blocked
LogEventsList::showLogExtract(
$outputPage,
'block',
@@ -1235,24 +1220,20 @@ class Article implements Page {
}
}
- wfRunHooks( 'ShowMissingArticle', array( $this ) );
+ Hooks::run( 'ShowMissingArticle', array( $this ) );
// Give extensions a chance to hide their (unrelated) log entries
$logTypes = array( 'delete', 'move' );
$conds = array( "log_action != 'revision'" );
- wfRunHooks( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
+ Hooks::run( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
# Show delete and move logs
- $member = $title->getNamespace() . ':' . $title->getDBkey();
- // @todo: move optimization to showLogExtract()?
- if ( BloomCache::get( 'main' )->check( wfWikiId(), 'TitleHasLogs', $member ) ) {
- LogEventsList::showLogExtract( $outputPage, $logTypes, $title, '',
- array( 'lim' => 10,
- 'conds' => $conds,
- 'showIfEmpty' => false,
- 'msgKey' => array( 'moveddeleted-notice' ) )
- );
- }
+ LogEventsList::showLogExtract( $outputPage, $logTypes, $title, '',
+ array( 'lim' => 10,
+ 'conds' => $conds,
+ 'showIfEmpty' => false,
+ 'msgKey' => array( 'moveddeleted-notice' ) )
+ );
if ( !$this->mPage->hasViewableContent() && $wgSend404Code && !$validUserPage ) {
// If there's no backing content, send a 404 Not Found
@@ -1265,7 +1246,7 @@ class Article implements Page {
$outputPage->setIndexPolicy( $policy['index'] );
$outputPage->setFollowPolicy( $policy['follow'] );
- $hookResult = wfRunHooks( 'BeforeDisplayNoArticleText', array( $this ) );
+ $hookResult = Hooks::run( 'BeforeDisplayNoArticleText', array( $this ) );
if ( !$hookResult ) {
return;
@@ -1341,11 +1322,12 @@ class Article implements Page {
* @param int $oldid Revision ID of this article revision
*/
public function setOldSubtitle( $oldid = 0 ) {
- if ( !wfRunHooks( 'DisplayOldSubtitle', array( &$this, &$oldid ) ) ) {
+ if ( !Hooks::run( 'DisplayOldSubtitle', array( &$this, &$oldid ) ) ) {
return;
}
- $unhide = $this->getContext()->getRequest()->getInt( 'unhide' ) == 1;
+ $context = $this->getContext();
+ $unhide = $context->getRequest()->getInt( 'unhide' ) == 1;
# Cascade unhide param in links for easy deletion browsing
$extraParams = array();
@@ -1362,8 +1344,8 @@ class Article implements Page {
$timestamp = $revision->getTimestamp();
$current = ( $oldid == $this->mPage->getLatest() );
- $language = $this->getContext()->getLanguage();
- $user = $this->getContext()->getUser();
+ $language = $context->getLanguage();
+ $user = $context->getUser();
$td = $language->userTimeAndDate( $timestamp, $user );
$tddate = $language->userDate( $timestamp, $user );
@@ -1372,28 +1354,33 @@ class Article implements Page {
# Show user links if allowed to see them. If hidden, then show them only if requested...
$userlinks = Linker::revUserTools( $revision, !$unhide );
- $infomsg = $current && !wfMessage( 'revision-info-current' )->isDisabled()
+ $infomsg = $current && !$context->msg( 'revision-info-current' )->isDisabled()
? 'revision-info-current'
: 'revision-info';
- $outputPage = $this->getContext()->getOutput();
- $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" . wfMessage( $infomsg,
- $td )->rawParams( $userlinks )->params( $revision->getID(), $tddate,
- $tdtime, $revision->getUserText() )->rawParams( Linker::revComment( $revision, true, true ) )->parse() . "</div>" );
+ $outputPage = $context->getOutput();
+ $outputPage->addSubtitle( "<div id=\"mw-{$infomsg}\">" .
+ $context->msg( $infomsg, $td )
+ ->rawParams( $userlinks )
+ ->params( $revision->getID(), $tddate, $tdtime, $revision->getUserText() )
+ ->rawParams( Linker::revComment( $revision, true, true ) )
+ ->parse() .
+ "</div>"
+ );
$lnk = $current
- ? wfMessage( 'currentrevisionlink' )->escaped()
+ ? $context->msg( 'currentrevisionlink' )->escaped()
: Linker::linkKnown(
$this->getTitle(),
- wfMessage( 'currentrevisionlink' )->escaped(),
+ $context->msg( 'currentrevisionlink' )->escaped(),
array(),
$extraParams
);
$curdiff = $current
- ? wfMessage( 'diff' )->escaped()
+ ? $context->msg( 'diff' )->escaped()
: Linker::linkKnown(
$this->getTitle(),
- wfMessage( 'diff' )->escaped(),
+ $context->msg( 'diff' )->escaped(),
array(),
array(
'diff' => 'cur',
@@ -1404,30 +1391,30 @@ class Article implements Page {
$prevlink = $prev
? Linker::linkKnown(
$this->getTitle(),
- wfMessage( 'previousrevision' )->escaped(),
+ $context->msg( 'previousrevision' )->escaped(),
array(),
array(
'direction' => 'prev',
'oldid' => $oldid
) + $extraParams
)
- : wfMessage( 'previousrevision' )->escaped();
+ : $context->msg( 'previousrevision' )->escaped();
$prevdiff = $prev
? Linker::linkKnown(
$this->getTitle(),
- wfMessage( 'diff' )->escaped(),
+ $context->msg( 'diff' )->escaped(),
array(),
array(
'diff' => 'prev',
'oldid' => $oldid
) + $extraParams
)
- : wfMessage( 'diff' )->escaped();
+ : $context->msg( 'diff' )->escaped();
$nextlink = $current
- ? wfMessage( 'nextrevision' )->escaped()
+ ? $context->msg( 'nextrevision' )->escaped()
: Linker::linkKnown(
$this->getTitle(),
- wfMessage( 'nextrevision' )->escaped(),
+ $context->msg( 'nextrevision' )->escaped(),
array(),
array(
'direction' => 'next',
@@ -1435,10 +1422,10 @@ class Article implements Page {
) + $extraParams
);
$nextdiff = $current
- ? wfMessage( 'diff' )->escaped()
+ ? $context->msg( 'diff' )->escaped()
: Linker::linkKnown(
$this->getTitle(),
- wfMessage( 'diff' )->escaped(),
+ $context->msg( 'diff' )->escaped(),
array(),
array(
'diff' => 'next',
@@ -1452,7 +1439,7 @@ class Article implements Page {
}
$outputPage->addSubtitle( "<div id=\"mw-revision-nav\">" . $cdel .
- wfMessage( 'revision-nav' )->rawParams(
+ $context->msg( 'revision-nav' )->rawParams(
$prevdiff, $prevlink, $lnk, $curdiff, $nextlink, $nextdiff
)->escaped() . "</div>" );
}
@@ -1472,7 +1459,7 @@ class Article implements Page {
$lang = $this->getTitle()->getPageLanguage();
$out = $this->getContext()->getOutput();
if ( $appendSubtitle ) {
- $out->addSubtitle( wfMessage( 'redirectpagesub' )->parse() );
+ $out->addSubtitle( wfMessage( 'redirectpagesub' ) );
}
$out->addModuleStyles( 'mediawiki.action.view.redirectPage' );
return static::getRedirectHeaderHtml( $lang, $target, $forceKnown );
@@ -1508,8 +1495,9 @@ class Article implements Page {
( $forceKnown ? array( 'known', 'noclasses' ) : array() )
) . '</li>';
}
+ $html .= '</ul>';
- $redirectToText = wfMessage( 'redirectto' )->inLanguage( $lang )->text();
+ $redirectToText = wfMessage( 'redirectto' )->inLanguage( $lang )->escaped();
return '<div class="redirectMsg">' .
'<p>' . $redirectToText . '</p>' .
@@ -1518,6 +1506,28 @@ class Article implements Page {
}
/**
+ * Adds help link with an icon via page indicators.
+ * Link target can be overridden by a local message containing a wikilink:
+ * the message key is: 'namespace-' + namespace number + '-helppage'.
+ * @param string $to Target MediaWiki.org page title or encoded URL.
+ * @param bool $overrideBaseUrl Whether $url is a full URL, to avoid MW.o.
+ * @since 1.25
+ */
+ public function addHelpLink( $to, $overrideBaseUrl = false ) {
+ $msg = wfMessage(
+ 'namespace-' . $this->getTitle()->getNamespace() . '-helppage'
+ );
+
+ $out = $this->getContext()->getOutput();
+ if ( !$msg->isDisabled() ) {
+ $helpUrl = Skin::makeUrl( $msg->plain() );
+ $out->addHelpLink( $helpUrl, true );
+ } else {
+ $out->addHelpLink( $to, $overrideBaseUrl );
+ }
+ }
+
+ /**
* Handle action=render
*/
public function render() {
@@ -1549,7 +1559,8 @@ class Article implements Page {
# This code desperately needs to be totally rewritten
$title = $this->getTitle();
- $user = $this->getContext()->getUser();
+ $context = $this->getContext();
+ $user = $context->getUser();
# Check permissions
$permissionErrors = $title->getUserPermissionsErrors( 'delete', $user );
@@ -1566,8 +1577,8 @@ class Article implements Page {
$this->mPage->loadPageData( 'fromdbmaster' );
if ( !$this->mPage->exists() ) {
$deleteLogPage = new LogPage( 'delete' );
- $outputPage = $this->getContext()->getOutput();
- $outputPage->setPageTitle( wfMessage( 'cannotdelete-title', $title->getPrefixedText() ) );
+ $outputPage = $context->getOutput();
+ $outputPage->setPageTitle( $context->msg( 'cannotdelete-title', $title->getPrefixedText() ) );
$outputPage->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
array( 'cannotdelete', wfEscapeWikiText( $title->getPrefixedText() ) )
);
@@ -1583,7 +1594,7 @@ class Article implements Page {
return;
}
- $request = $this->getContext()->getRequest();
+ $request = $context->getRequest();
$deleteReasonList = $request->getText( 'wpDeleteReasonList', 'other' );
$deleteReason = $request->getText( 'wpReason' );
@@ -1615,7 +1626,7 @@ class Article implements Page {
if ( !$reason ) {
try {
$reason = $this->generateReason( $hasHistory );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
# if a page is horribly broken, we still want to be able to
# delete it. So be lenient about errors here.
wfDebug( "Error while building auto delete summary: $e" );
@@ -1627,10 +1638,11 @@ class Article implements Page {
if ( $hasHistory ) {
$title = $this->getTitle();
- // The following can use the real revision count as this is only being shown for users that can delete
- // this page.
- // This, as a side-effect, also makes sure that the following query isn't being run for pages with a
- // larger history, unless the user has the 'bigdelete' right (and is about to delete this page).
+ // The following can use the real revision count as this is only being shown for users
+ // that can delete this page.
+ // This, as a side-effect, also makes sure that the following query isn't being run for
+ // pages with a larger history, unless the user has the 'bigdelete' right
+ // (and is about to delete this page).
$dbr = wfGetDB( DB_SLAVE );
$revisions = $edits = (int)$dbr->selectField(
'revision',
@@ -1640,21 +1652,22 @@ class Article implements Page {
);
// @todo FIXME: i18n issue/patchwork message
- $this->getContext()->getOutput()->addHTML( '<strong class="mw-delete-warning-revisions">' .
- wfMessage( 'historywarning' )->numParams( $revisions )->parse() .
- wfMessage( 'word-separator' )->plain() . Linker::linkKnown( $title,
- wfMessage( 'history' )->escaped(),
- array( 'rel' => 'archives' ),
+ $context->getOutput()->addHTML(
+ '<strong class="mw-delete-warning-revisions">' .
+ $context->msg( 'historywarning' )->numParams( $revisions )->parse() .
+ $context->msg( 'word-separator' )->escaped() . Linker::linkKnown( $title,
+ $context->msg( 'history' )->escaped(),
+ array(),
array( 'action' => 'history' ) ) .
'</strong>'
);
if ( $title->isBigDeletion() ) {
global $wgDeleteRevisionsLimit;
- $this->getContext()->getOutput()->wrapWikiMsg( "<div class='error'>\n$1\n</div>\n",
+ $context->getOutput()->wrapWikiMsg( "<div class='error'>\n$1\n</div>\n",
array(
'delete-warning-toobig',
- $this->getContext()->getLanguage()->formatNum( $wgDeleteRevisionsLimit )
+ $context->getLanguage()->formatNum( $wgDeleteRevisionsLimit )
)
);
}
@@ -1672,7 +1685,9 @@ class Article implements Page {
wfDebug( "Article::confirmDelete\n" );
$title = $this->getTitle();
- $outputPage = $this->getContext()->getOutput();
+ $ctx = $this->getContext();
+ $outputPage = $ctx->getOutput();
+ $useMediaWikiUIEverywhere = $ctx->getConfig()->get( 'UseMediaWikiUIEverywhere' );
$outputPage->setPageTitle( wfMessage( 'delete-confirm', $title->getPrefixedText() ) );
$outputPage->addBacklinkSubtitle( $title );
$outputPage->setRobotPolicy( 'noindex,nofollow' );
@@ -1683,80 +1698,72 @@ class Article implements Page {
}
$outputPage->addWikiMsg( 'confirmdeletetext' );
- wfRunHooks( 'ArticleConfirmDelete', array( $this, $outputPage, &$reason ) );
+ Hooks::run( 'ArticleConfirmDelete', array( $this, $outputPage, &$reason ) );
$user = $this->getContext()->getUser();
if ( $user->isAllowed( 'suppressrevision' ) ) {
- $suppress = "<tr id=\"wpDeleteSuppressRow\">
- <td></td>
- <td class='mw-input'><strong>" .
+ $suppress = Html::openElement( 'div', array( 'id' => 'wpDeleteSuppressRow' ) ) .
+ "<strong>" .
Xml::checkLabel( wfMessage( 'revdelete-suppress' )->text(),
'wpSuppress', 'wpSuppress', false, array( 'tabindex' => '4' ) ) .
- "</strong></td>
- </tr>";
+ "</strong>" .
+ Html::closeElement( 'div' );
} else {
$suppress = '';
}
$checkWatch = $user->getBoolOption( 'watchdeletion' ) || $user->isWatched( $title );
- $form = Xml::openElement( 'form', array( 'method' => 'post',
+ $form = Html::openElement( 'form', array( 'method' => 'post',
'action' => $title->getLocalURL( 'action=delete' ), 'id' => 'deleteconfirm' ) ) .
- Xml::openElement( 'fieldset', array( 'id' => 'mw-delete-table' ) ) .
- Xml::tags( 'legend', null, wfMessage( 'delete-legend' )->escaped() ) .
- Xml::openElement( 'table', array( 'id' => 'mw-deleteconfirm-table' ) ) .
- "<tr id=\"wpDeleteReasonListRow\">
- <td class='mw-label'>" .
- Xml::label( wfMessage( 'deletecomment' )->text(), 'wpDeleteReasonList' ) .
- "</td>
- <td class='mw-input'>" .
- Xml::listDropDown(
- 'wpDeleteReasonList',
- wfMessage( 'deletereason-dropdown' )->inContentLanguage()->text(),
- wfMessage( 'deletereasonotherlist' )->inContentLanguage()->text(),
- '',
- 'wpReasonDropDown',
- 1
- ) .
- "</td>
- </tr>
- <tr id=\"wpDeleteReasonRow\">
- <td class='mw-label'>" .
- Xml::label( wfMessage( 'deleteotherreason' )->text(), 'wpReason' ) .
- "</td>
- <td class='mw-input'>" .
- Html::input( 'wpReason', $reason, 'text', array(
- 'size' => '60',
- 'maxlength' => '255',
- 'tabindex' => '2',
- 'id' => 'wpReason',
- 'autofocus'
- ) ) .
- "</td>
- </tr>";
+ Html::openElement( 'fieldset', array( 'id' => 'mw-delete-table' ) ) .
+ Html::element( 'legend', null, wfMessage( 'delete-legend' )->text() ) .
+ Html::openElement( 'div', array( 'id' => 'mw-deleteconfirm-table' ) ) .
+ Html::openElement( 'div', array( 'id' => 'wpDeleteReasonListRow' ) ) .
+ Html::label( wfMessage( 'deletecomment' )->text(), 'wpDeleteReasonList' ) .
+ '&nbsp;' .
+ Xml::listDropDown(
+ 'wpDeleteReasonList',
+ wfMessage( 'deletereason-dropdown' )->inContentLanguage()->text(),
+ wfMessage( 'deletereasonotherlist' )->inContentLanguage()->text(),
+ '',
+ 'wpReasonDropDown',
+ 1
+ ) .
+ Html::closeElement( 'div' ) .
+ Html::openElement( 'div', array( 'id' => 'wpDeleteReasonRow' ) ) .
+ Html::label( wfMessage( 'deleteotherreason' )->text(), 'wpReason' ) .
+ '&nbsp;' .
+ Html::input( 'wpReason', $reason, 'text', array(
+ 'size' => '60',
+ 'maxlength' => '255',
+ 'tabindex' => '2',
+ 'id' => 'wpReason',
+ 'class' => 'mw-ui-input-inline',
+ 'autofocus'
+ ) ) .
+ Html::closeElement( 'div' );
# Disallow watching if user is not logged in
if ( $user->isLoggedIn() ) {
- $form .= "
- <tr>
- <td></td>
- <td class='mw-input'>" .
+ $form .=
Xml::checkLabel( wfMessage( 'watchthis' )->text(),
- 'wpWatch', 'wpWatch', $checkWatch, array( 'tabindex' => '3' ) ) .
- "</td>
- </tr>";
+ 'wpWatch', 'wpWatch', $checkWatch, array( 'tabindex' => '3' ) );
}
- $form .= "
- $suppress
- <tr>
- <td></td>
- <td class='mw-submit'>" .
+ $form .=
+ Html::openElement( 'div' ) .
+ $suppress .
Xml::submitButton( wfMessage( 'deletepage' )->text(),
- array( 'name' => 'wpConfirmB', 'id' => 'wpConfirmB', 'tabindex' => '5' ) ) .
- "</td>
- </tr>" .
- Xml::closeElement( 'table' ) .
+ array(
+ 'name' => 'wpConfirmB',
+ 'id' => 'wpConfirmB',
+ 'tabindex' => '5',
+ 'class' => $useMediaWikiUIEverywhere ? 'mw-ui-button mw-ui-destructive' : '',
+ )
+ ) .
+ Html::closeElement( 'div' ) .
+ Html::closeElement( 'div' ) .
Xml::closeElement( 'fieldset' ) .
Html::hidden(
'wpEditToken',
@@ -1801,6 +1808,9 @@ class Article implements Page {
$loglink = '[[Special:Log/delete|' . wfMessage( 'deletionlog' )->text() . ']]';
$outputPage->addWikiMsg( 'deletedtext', wfEscapeWikiText( $deleted ), $loglink );
+
+ Hooks::run( 'ArticleDeleteAfterSuccess', array( $this->getTitle(), $outputPage ) );
+
$outputPage->returnToMain( false );
} else {
$outputPage->setPageTitle(
@@ -1873,7 +1883,7 @@ class Article implements Page {
&& !$this->mRedirectedFrom && !$this->getTitle()->isRedirect();
// Extension may have reason to disable file caching on some pages.
if ( $cacheable ) {
- $cacheable = wfRunHooks( 'IsFileCacheable', array( &$this ) );
+ $cacheable = Hooks::run( 'IsFileCacheable', array( &$this ) );
}
}
diff --git a/includes/page/CategoryPage.php b/includes/page/CategoryPage.php
index 9abc6a89..caebcd7d 100644
--- a/includes/page/CategoryPage.php
+++ b/includes/page/CategoryPage.php
@@ -61,7 +61,7 @@ class CategoryPage extends Article {
return;
}
- if ( !wfRunHooks( 'CategoryPageView', array( &$this ) ) ) {
+ if ( !Hooks::run( 'CategoryPageView', array( &$this ) ) ) {
return;
}
@@ -113,6 +113,8 @@ class CategoryPage extends Article {
$until,
$reqArray
);
- $this->getContext()->getOutput()->addHTML( $viewer->getHTML() );
+ $out = $this->getContext()->getOutput();
+ $out->addHTML( $viewer->getHTML() );
+ $this->addHelpLink( 'Help:Categories' );
}
}
diff --git a/includes/page/ImagePage.php b/includes/page/ImagePage.php
index d06c8191..8f635cfa 100644
--- a/includes/page/ImagePage.php
+++ b/includes/page/ImagePage.php
@@ -76,7 +76,7 @@ class ImagePage extends Article {
$this->fileLoaded = true;
$this->displayImg = $img = false;
- wfRunHooks( 'ImagePageFindFile', array( $this, &$img, &$this->displayImg ) );
+ Hooks::run( 'ImagePageFindFile', array( $this, &$img, &$this->displayImg ) );
if ( !$img ) { // not set by hook?
$img = wfFindFile( $this->getTitle() );
if ( !$img ) {
@@ -140,7 +140,7 @@ class ImagePage extends Article {
if ( $wgShowEXIF && $this->displayImg->exists() ) {
// @todo FIXME: Bad interface, see note on MediaHandler::formatMetadata().
- $formattedMetadata = $this->displayImg->formatMetadata();
+ $formattedMetadata = $this->displayImg->formatMetadata( $this->getContext() );
$showmeta = $formattedMetadata !== false;
} else {
$showmeta = false;
@@ -175,7 +175,7 @@ class ImagePage extends Article {
# Show shared description, if needed
if ( $this->mExtraDescription ) {
- $fol = wfMessage( 'shareddescriptionfollows' );
+ $fol = $this->getContext()->msg( 'shareddescriptionfollows' );
if ( !$fol->isDisabled() ) {
$out->addWikiText( $fol->plain() );
}
@@ -188,7 +188,7 @@ class ImagePage extends Article {
$out->addHTML( Xml::element( 'h2',
array( 'id' => 'filelinks' ),
- wfMessage( 'imagelinks' )->text() ) . "\n" );
+ $this->getContext()->msg( 'imagelinks' )->text() ) . "\n" );
$this->imageDupes();
# @todo FIXME: For some freaky reason, we can't redirect to foreign images.
# Yet we return metadata about the target. Definitely an issue in the FileRepo
@@ -196,7 +196,7 @@ class ImagePage extends Article {
# Allow extensions to add something after the image links
$html = '';
- wfRunHooks( 'ImagePageAfterImageLinks', array( $this, &$html ) );
+ Hooks::run( 'ImagePageAfterImageLinks', array( $this, &$html ) );
if ( $html ) {
$out->addHTML( $html );
}
@@ -205,7 +205,7 @@ class ImagePage extends Article {
$out->addHTML( Xml::element(
'h2',
array( 'id' => 'metadata' ),
- wfMessage( 'metadata' )->text() ) . "\n" );
+ $this->getContext()->msg( 'metadata' )->text() ) . "\n" );
$out->addWikiText( $this->makeMetadataTable( $formattedMetadata ) );
$out->addModules( array( 'mediawiki.action.view.metadata' ) );
}
@@ -237,16 +237,17 @@ class ImagePage extends Article {
*/
protected function showTOC( $metadata ) {
$r = array(
- '<li><a href="#file">' . wfMessage( 'file-anchor-link' )->escaped() . '</a></li>',
- '<li><a href="#filehistory">' . wfMessage( 'filehist' )->escaped() . '</a></li>',
- '<li><a href="#filelinks">' . wfMessage( 'imagelinks' )->escaped() . '</a></li>',
+ '<li><a href="#file">' . $this->getContext()->msg( 'file-anchor-link' )->escaped() . '</a></li>',
+ '<li><a href="#filehistory">' . $this->getContext()->msg( 'filehist' )->escaped() . '</a></li>',
+ '<li><a href="#filelinks">' . $this->getContext()->msg( 'imagelinks' )->escaped() . '</a></li>',
);
+
+ Hooks::run( 'ImagePageShowTOC', array( $this, &$r ) );
+
if ( $metadata ) {
- $r[] = '<li><a href="#metadata">' . wfMessage( 'metadata' )->escaped() . '</a></li>';
+ $r[] = '<li><a href="#metadata">' . $this->getContext()->msg( 'metadata' )->escaped() . '</a></li>';
}
- wfRunHooks( 'ImagePageShowTOC', array( $this, &$r ) );
-
return '<ul id="filetoc">' . implode( "\n", $r ) . '</ul>';
}
@@ -260,7 +261,7 @@ class ImagePage extends Article {
*/
protected function makeMetadataTable( $metadata ) {
$r = "<div class=\"mw-imagepage-section-metadata\">";
- $r .= wfMessage( 'metadata-help' )->plain();
+ $r .= $this->getContext()->msg( 'metadata-help' )->plain();
$r .= "<table id=\"mw_metadata\" class=\"mw_metadata\">\n";
foreach ( $metadata as $type => $stuff ) {
foreach ( $stuff as $v ) {
@@ -336,19 +337,19 @@ class ImagePage extends Article {
$filename = wfEscapeWikiText( $this->displayImg->getName() );
$linktext = $filename;
- wfRunHooks( 'ImageOpenShowImageInlineBefore', array( &$this, &$out ) );
+ Hooks::run( 'ImageOpenShowImageInlineBefore', array( &$this, &$out ) );
if ( $this->displayImg->allowInlineDisplay() ) {
# image
# "Download high res version" link below the image
- # $msgsize = wfMessage( 'file-info-size', $width_orig, $height_orig,
+ # $msgsize = $this->getContext()->msg( 'file-info-size', $width_orig, $height_orig,
# Linker::formatSize( $this->displayImg->getSize() ), $mime )->escaped();
# We'll show a thumbnail of this image
if ( $width > $maxWidth || $height > $maxHeight || $this->displayImg->isVectorized() ) {
list( $width, $height ) = $this->getDisplayWidthHeight(
$maxWidth, $maxHeight, $width, $height
);
- $linktext = wfMessage( 'show-big-image' )->escaped();
+ $linktext = $this->getContext()->msg( 'show-big-image' )->escaped();
$thumbSizes = $this->getThumbSizes( $width, $height, $width_orig, $height_orig );
# Generate thumbnails or thumbnail links as needed...
@@ -377,14 +378,14 @@ class ImagePage extends Article {
$msgsmall = '';
$sizeLinkBigImagePreview = $this->makeSizeLink( $params, $width, $height );
if ( $sizeLinkBigImagePreview ) {
- $msgsmall .= wfMessage( 'show-big-image-preview' )->
+ $msgsmall .= $this->getContext()->msg( 'show-big-image-preview' )->
rawParams( $sizeLinkBigImagePreview )->
parse();
}
if ( count( $otherSizes ) ) {
$msgsmall .= ' ' .
Html::rawElement( 'span', array( 'class' => 'mw-filepage-other-resolutions' ),
- wfMessage( 'show-big-image-other' )->rawParams( $lang->pipeList( $otherSizes ) )->
+ $this->getContext()->msg( 'show-big-image-other' )->rawParams( $lang->pipeList( $otherSizes ) )->
params( count( $otherSizes ) )->parse()
);
}
@@ -394,7 +395,7 @@ class ImagePage extends Article {
$msgsmall = '';
} else {
# Image is small enough to show full size on image page
- $msgsmall = wfMessage( 'file-nohires' )->parse();
+ $msgsmall = $this->getContext()->msg( 'file-nohires' )->parse();
}
$params['width'] = $width;
@@ -428,7 +429,7 @@ class ImagePage extends Article {
$count = $this->displayImg->pageCount();
if ( $page > 1 ) {
- $label = $out->parse( wfMessage( 'imgmultipageprev' )->text(), false );
+ $label = $out->parse( $this->getContext()->msg( 'imgmultipageprev' )->text(), false );
// on the client side, this link is generated in ajaxifyPageNavigation()
// in the mediawiki.page.image.pagination module
$link = Linker::linkKnown(
@@ -450,7 +451,7 @@ class ImagePage extends Article {
}
if ( $page < $count ) {
- $label = wfMessage( 'imgmultipagenext' )->text();
+ $label = $this->getContext()->msg( 'imgmultipagenext' )->text();
$link = Linker::linkKnown(
$this->getTitle(),
$label,
@@ -487,8 +488,8 @@ class ImagePage extends Article {
'</td><td><div class="multipageimagenavbox">' .
Xml::openElement( 'form', $formParams ) .
Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) .
- wfMessage( 'imgmultigoto' )->rawParams( $select )->parse() .
- Xml::submitButton( wfMessage( 'imgmultigo' )->text() ) .
+ $this->getContext()->msg( 'imgmultigoto' )->rawParams( $select )->parse() .
+ Xml::submitButton( $this->getContext()->msg( 'imgmultigo' )->text() ) .
Xml::closeElement( 'form' ) .
"<hr />$thumb1\n$thumb2<br style=\"clear: both\" /></div></td></tr></table>"
);
@@ -502,12 +503,28 @@ class ImagePage extends Article {
"</div>\n" );
}
- $longDesc = wfMessage( 'parentheses', $this->displayImg->getLongDesc() )->text();
+ $longDesc = $this->getContext()->msg( 'parentheses', $this->displayImg->getLongDesc() )->text();
+
+ $handler = $this->displayImg->getHandler();
+
+ // If this is a filetype with potential issues, warn the user.
+ if ( $handler ) {
+ $warningConfig = $handler->getWarningConfig( $this->displayImg );
+
+ if ( $warningConfig !== null ) {
+ // The warning will be displayed via CSS and JavaScript.
+ // We just need to tell the client side what message to use.
+ $output = $this->getContext()->getOutput();
+ $output->addJsConfigVars( 'wgFileWarning', $warningConfig );
+ $output->addModules( $warningConfig['module'] );
+ $output->addModules( 'mediawiki.filewarning' );
+ }
+ }
$medialink = "[[Media:$filename|$linktext]]";
if ( !$this->displayImg->isSafeFile() ) {
- $warning = wfMessage( 'mediawarning' )->plain();
+ $warning = $this->getContext()->msg( 'mediawarning' )->plain();
// dirmark is needed here to separate the file name, which
// most likely ends in Latin characters, from the description,
// which may begin with the file type. In RTL environment
@@ -619,7 +636,7 @@ EOT
return Html::rawElement( 'a', array(
'href' => $thumbnail->getUrl(),
'class' => 'mw-thumbnail-link'
- ), wfMessage( 'show-big-image-size' )->numParams(
+ ), $this->getContext()->msg( 'show-big-image-size' )->numParams(
$thumbnail->getWidth(), $thumbnail->getHeight()
)->parse() );
} else {
@@ -645,9 +662,9 @@ EOT
$wrap = "<div class=\"sharedUploadNotice\">\n$1\n</div>\n";
$repo = $this->mPage->getFile()->getRepo()->getDisplayName();
- if ( $descUrl && $descText && wfMessage( 'sharedupload-desc-here' )->plain() !== '-' ) {
+ if ( $descUrl && $descText && $this->getContext()->msg( 'sharedupload-desc-here' )->plain() !== '-' ) {
$out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-here', $repo, $descUrl ) );
- } elseif ( $descUrl && wfMessage( 'sharedupload-desc-there' )->plain() !== '-' ) {
+ } elseif ( $descUrl && $this->getContext()->msg( 'sharedupload-desc-there' )->plain() !== '-' ) {
$out->wrapWikiMsg( $wrap, array( 'sharedupload-desc-there', $repo, $descUrl ) );
} else {
$out->wrapWikiMsg( $wrap, array( 'sharedupload', $repo ), ''/*BACKCOMPAT*/ );
@@ -694,7 +711,7 @@ EOT
) {
$ulink = Linker::makeExternalLink(
$this->getUploadUrl(),
- wfMessage( 'uploadnewversion-linktext' )->text()
+ $this->getContext()->msg( 'uploadnewversion-linktext' )->text()
);
$out->addHTML( "<li id=\"mw-imagepage-reupload-link\">"
. "<div class=\"plainlinks\">{$ulink}</div></li>\n" );
@@ -832,7 +849,7 @@ EOT
$liContents = $link;
} elseif ( count( $redirects[$element->page_title] ) === 0 ) {
# Redirect without usages
- $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams( $link, '' )->parse();
+ $liContents = $this->getContext()->msg( 'linkstoimage-redirect' )->rawParams( $link, '' )->parse();
} else {
# Redirect with usages
$li = '';
@@ -855,7 +872,7 @@ EOT
array( 'class' => 'mw-imagepage-redirectstofile' ),
$li
) . "\n";
- $liContents = wfMessage( 'linkstoimage-redirect' )->rawParams(
+ $liContents = $this->getContext()->msg( 'linkstoimage-redirect' )->rawParams(
$link, $ul )->parse();
}
$out->addHTML( Html::rawElement(
@@ -901,7 +918,7 @@ EOT
} else {
$link = Linker::makeExternalLink( $file->getDescriptionUrl(),
$file->getTitle()->getPrefixedText() );
- $fromSrc = wfMessage( 'shared-repo-from', $file->getRepo()->getDisplayName() )->text();
+ $fromSrc = $this->getContext()->msg( 'shared-repo-from', $file->getRepo()->getDisplayName() )->text();
}
$out->addHTML( "<li>{$link} {$fromSrc}</li>\n" );
}
@@ -930,7 +947,7 @@ EOT
*/
function showError( $description ) {
$out = $this->getContext()->getOutput();
- $out->setPageTitle( wfMessage( 'internalerror' ) );
+ $out->setPageTitle( $this->getContext()->msg( 'internalerror' ) );
$out->setRobotPolicy( 'noindex,nofollow' );
$out->setArticleRelated( false );
$out->enableClientCache( false );
@@ -1008,7 +1025,7 @@ EOT
$code = wfBCP47( $lang );
$name = Language::fetchLanguageName( $code, $this->getContext()->getLanguage()->getCode() );
if ( $name !== '' ) {
- $display = wfMessage( 'img-lang-opt', $code, $name )->text();
+ $display = $this->getContext()->msg( 'img-lang-opt', $code, $name )->text();
} else {
$display = $code;
}
@@ -1024,7 +1041,7 @@ EOT
// Its hard to know if the content is really in the default language, or
// if its just unmarked content that could be in any language.
$opts = Xml::option(
- wfMessage( 'img-lang-default' )->text(),
+ $this->getContext()->msg( 'img-lang-default' )->text(),
$defaultLang,
$defaultLang === $curLang
) . $opts;
@@ -1032,7 +1049,7 @@ EOT
if ( !$haveCurrentLang && $defaultLang !== $curLang ) {
$name = Language::fetchLanguageName( $curLang, $this->getContext()->getLanguage()->getCode() );
if ( $name !== '' ) {
- $display = wfMessage( 'img-lang-opt', $curLang, $name )->text();
+ $display = $this->getContext()->msg( 'img-lang-opt', $curLang, $name )->text();
} else {
$display = $curLang;
}
@@ -1044,9 +1061,9 @@ EOT
array( 'id' => 'mw-imglangselector', 'name' => 'lang' ),
$opts
);
- $submit = Xml::submitButton( wfMessage( 'img-lang-go' )->text() );
+ $submit = Xml::submitButton( $this->getContext()->msg( 'img-lang-go' )->text() );
- $formContents = wfMessage( 'img-lang-info' )->rawParams( $select, $submit )->parse()
+ $formContents = $this->getContext()->msg( 'img-lang-info' )->rawParams( $select, $submit )->parse()
. Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() );
$langSelectLine = Html::rawElement( 'div', array( 'id' => 'mw-imglangselector-line' ),
@@ -1199,9 +1216,9 @@ class ImageHistoryList extends ContextSource {
. $this->msg( 'filehist-help' )->parseAsBlock()
. $navLinks . "\n"
. Xml::openElement( 'table', array( 'class' => 'wikitable filehistory' ) ) . "\n"
- . '<tr><td></td>'
+ . '<tr><th></th>'
. ( $this->current->isLocal()
- && ( $this->getUser()->isAllowedAny( 'delete', 'deletedhistory' ) ) ? '<td></td>' : '' )
+ && ( $this->getUser()->isAllowedAny( 'delete', 'deletedhistory' ) ) ? '<th></th>' : '' )
. '<th>' . $this->msg( 'filehist-datetime' )->escaped() . '</th>'
. ( $this->showThumb ? '<th>' . $this->msg( 'filehist-thumb' )->escaped() . '</th>' : '' )
. '<th>' . $this->msg( 'filehist-dimensions' )->escaped() . '</th>'
@@ -1364,7 +1381,6 @@ class ImageHistoryList extends ContextSource {
} else {
if ( $local ) {
$row .= Linker::userLink( $userId, $userText );
- $row .= $this->msg( 'word-separator' )->escaped();
$row .= '<span style="white-space: nowrap;">';
$row .= Linker::userToolLinks( $userId, $userText );
$row .= '</span>';
@@ -1384,7 +1400,7 @@ class ImageHistoryList extends ContextSource {
}
$rowClass = null;
- wfRunHooks( 'ImagePageFileHistoryLine', array( $this, $file, &$row, &$rowClass ) );
+ Hooks::run( 'ImagePageFileHistoryLine', array( $this, $file, &$row, &$rowClass ) );
$classAttr = $rowClass ? " class='$rowClass'" : '';
return "<tr{$classAttr}>{$row}</tr>\n";
diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php
index 9ade16e5..7c789249 100644
--- a/includes/page/WikiPage.php
+++ b/includes/page/WikiPage.php
@@ -31,8 +31,6 @@ interface Page {
*
* Some fields are public only for backwards-compatibility. Use accessors.
* In the past, this class was part of Article.php and everything was public.
- *
- * @internal documentation reviewed 15 Mar 2010
*/
class WikiPage implements Page, IDBAccessObject {
// Constants for $mDataLoadedFrom and related
@@ -50,7 +48,7 @@ class WikiPage implements Page, IDBAccessObject {
public $mLatest = false; // !< Integer (false means "not loaded")
/**@}}*/
- /** @var stdclass Map of cache fields (text, parser output, ect) for a proposed/new edit */
+ /** @var stdClass Map of cache fields (text, parser output, ect) for a proposed/new edit */
public $mPreparedEdit = false;
/**
@@ -89,11 +87,6 @@ class WikiPage implements Page, IDBAccessObject {
protected $mLinksUpdated = '19700101000000';
/**
- * @var int|null
- */
- protected $mCounter = null;
-
- /**
* Constructor and clear the article
* @param Title $title Reference to a Title object.
*/
@@ -247,7 +240,6 @@ class WikiPage implements Page, IDBAccessObject {
*/
protected function clearCacheFields() {
$this->mId = null;
- $this->mCounter = null;
$this->mRedirectTarget = null; // Title object if set
$this->mLastRevision = null; // Latest revision
$this->mTouched = '19700101000000';
@@ -284,7 +276,6 @@ class WikiPage implements Page, IDBAccessObject {
'page_namespace',
'page_title',
'page_restrictions',
- 'page_counter',
'page_is_redirect',
'page_is_new',
'page_random',
@@ -315,11 +306,11 @@ class WikiPage implements Page, IDBAccessObject {
protected function pageData( $dbr, $conditions, $options = array() ) {
$fields = self::selectFields();
- wfRunHooks( 'ArticlePageDataBefore', array( &$this, &$fields ) );
+ Hooks::run( 'ArticlePageDataBefore', array( &$this, &$fields ) );
$row = $dbr->selectRow( 'page', $fields, $conditions, __METHOD__, $options );
- wfRunHooks( 'ArticlePageDataAfter', array( &$this, &$row ) );
+ Hooks::run( 'ArticlePageDataAfter', array( &$this, &$row ) );
return $row;
}
@@ -352,8 +343,7 @@ class WikiPage implements Page, IDBAccessObject {
}
/**
- * Set the general counter, title etc data loaded from
- * some source.
+ * Load the object from a given source by title
*
* @param object|string|int $from One of the following:
* - A DB query result object.
@@ -377,14 +367,12 @@ class WikiPage implements Page, IDBAccessObject {
$data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
} elseif ( $from === self::READ_NORMAL ) {
$data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
- // Use a "last rev inserted" timestamp key to diminish the issue of slave lag.
- // Note that DB also stores the master position in the session and checks it.
- $touched = $this->getCachedLastEditTime();
- if ( $touched ) { // key set
- if ( !$data || $touched > wfTimestamp( TS_MW, $data->page_touched ) ) {
- $from = self::READ_LATEST;
- $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
- }
+ if ( !$data
+ && wfGetLB()->getServerCount() > 1
+ && wfGetLB()->hasOrMadeRecentMasterChanges()
+ ) {
+ $from = self::READ_LATEST;
+ $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
}
} else {
// No idea from where the caller got this data, assume slave database.
@@ -403,7 +391,7 @@ class WikiPage implements Page, IDBAccessObject {
* @param string|int $from One of the following:
* - "fromdb" or WikiPage::READ_NORMAL if the data comes from a slave DB
* - "fromdbmaster" or WikiPage::READ_LATEST if the data comes from the master DB
- * - "forupdate" or WikiPage::READ_LOCKING if the data comes from from
+ * - "forupdate" or WikiPage::READ_LOCKING if the data comes from
* the master DB using SELECT FOR UPDATE
*/
public function loadFromRow( $data, $from ) {
@@ -419,7 +407,6 @@ class WikiPage implements Page, IDBAccessObject {
$this->mTitle->loadRestrictions( $data->page_restrictions );
$this->mId = intval( $data->page_id );
- $this->mCounter = intval( $data->page_counter );
$this->mTouched = wfTimestamp( TS_MW, $data->page_touched );
$this->mLinksUpdated = wfTimestampOrNull( TS_MW, $data->page_links_updated );
$this->mIsRedirect = intval( $data->page_is_redirect );
@@ -477,17 +464,6 @@ class WikiPage implements Page, IDBAccessObject {
}
/**
- * @return int The view count for the page
- */
- public function getCount() {
- if ( !$this->mDataLoaded ) {
- $this->loadPageData();
- }
-
- return $this->mCounter;
- }
-
- /**
* Tests if the article content represents a redirect
*
* @return bool
@@ -577,7 +553,6 @@ class WikiPage implements Page, IDBAccessObject {
* @return Revision|null
*/
public function getOldestRevision() {
- wfProfileIn( __METHOD__ );
// Try using the slave database first, then try the master
$continue = 2;
@@ -608,7 +583,6 @@ class WikiPage implements Page, IDBAccessObject {
}
}
- wfProfileOut( __METHOD__ );
return $row ? Revision::newFromRow( $row ) : null;
}
@@ -626,13 +600,23 @@ class WikiPage implements Page, IDBAccessObject {
return; // page doesn't exist or is missing page_latest info
}
- // Bug 37225: if session S1 loads the page row FOR UPDATE, the result always includes the
- // latest changes committed. This is true even within REPEATABLE-READ transactions, where
- // S1 normally only sees changes committed before the first S1 SELECT. Thus we need S1 to
- // also gets the revision row FOR UPDATE; otherwise, it may not find it since a page row
- // UPDATE and revision row INSERT by S2 may have happened after the first S1 SELECT.
- // http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-read.
- $flags = ( $this->mDataLoadedFrom == self::READ_LOCKING ) ? Revision::READ_LOCKING : 0;
+ if ( $this->mDataLoadedFrom == self::READ_LOCKING ) {
+ // Bug 37225: if session S1 loads the page row FOR UPDATE, the result always
+ // includes the latest changes committed. This is true even within REPEATABLE-READ
+ // transactions, where S1 normally only sees changes committed before the first S1
+ // SELECT. Thus we need S1 to also gets the revision row FOR UPDATE; otherwise, it
+ // may not find it since a page row UPDATE and revision row INSERT by S2 may have
+ // happened after the first S1 SELECT.
+ // http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html#isolevel_repeatable-read.
+ $flags = Revision::READ_LOCKING;
+ } elseif ( $this->mDataLoadedFrom == self::READ_LATEST ) {
+ // Bug T93976: if page_latest was loaded from the master, fetch the
+ // revision from there as well, as it may not exist yet on a slave DB.
+ // Also, this keeps the queries in the same REPEATABLE-READ snapshot.
+ $flags = Revision::READ_LATEST;
+ } else {
+ $flags = 0;
+ }
$revision = Revision::newFromPageId( $this->getId(), $latest, $flags );
if ( $revision ) { // sanity
$this->setLastEdit( $revision );
@@ -825,29 +809,6 @@ class WikiPage implements Page, IDBAccessObject {
}
/**
- * Get the cached timestamp for the last time the page changed.
- * This is only used to help handle slave lag by comparing to page_touched.
- * @return string MW timestamp
- */
- protected function getCachedLastEditTime() {
- global $wgMemc;
- $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
- return $wgMemc->get( $key );
- }
-
- /**
- * Set the cached timestamp for the last time the page changed.
- * This is only used to help handle slave lag by comparing to page_touched.
- * @param string $timestamp
- * @return void
- */
- public function setCachedLastEditTime( $timestamp ) {
- global $wgMemc;
- $key = wfMemcKey( 'page-lastedit', md5( $this->mTitle->getPrefixedDBkey() ) );
- $wgMemc->set( $key, wfTimestamp( TS_MW, $timestamp ), 60 * 15 );
- }
-
- /**
* Determine whether a page would be suitable for being counted as an
* article in the site_stats table based on the title & its content
*
@@ -995,7 +956,7 @@ class WikiPage implements Page, IDBAccessObject {
$source = $this->mTitle->getFullURL( 'redirect=no' );
return $rt->getFullURL( array( 'rdfrom' => $source ) );
} else {
- // External pages pages without "local" bit set are not valid
+ // External pages without "local" bit set are not valid
// redirect targets
return false;
}
@@ -1075,7 +1036,6 @@ class WikiPage implements Page, IDBAccessObject {
* @return array Array of authors, duplicates not removed
*/
public function getLastNAuthors( $num, $revLatest = 0 ) {
- wfProfileIn( __METHOD__ );
// First try the slave
// If that doesn't have the latest revision, try the master
$continue = 2;
@@ -1096,7 +1056,6 @@ class WikiPage implements Page, IDBAccessObject {
);
if ( !$res ) {
- wfProfileOut( __METHOD__ );
return array();
}
@@ -1116,7 +1075,6 @@ class WikiPage implements Page, IDBAccessObject {
$authors[] = $row->rev_user_text;
}
- wfProfileOut( __METHOD__ );
return $authors;
}
@@ -1149,7 +1107,6 @@ class WikiPage implements Page, IDBAccessObject {
* @return ParserOutput|bool ParserOutput or false if the revision was not found
*/
public function getParserOutput( ParserOptions $parserOptions, $oldid = null ) {
- wfProfileIn( __METHOD__ );
$useParserCache = $this->isParserCacheUsed( $parserOptions, $oldid );
wfDebug( __METHOD__ . ': using parser cache: ' . ( $useParserCache ? 'yes' : 'no' ) . "\n" );
@@ -1160,7 +1117,6 @@ class WikiPage implements Page, IDBAccessObject {
if ( $useParserCache ) {
$parserOutput = ParserCache::singleton()->get( $this, $parserOptions );
if ( $parserOutput !== false ) {
- wfProfileOut( __METHOD__ );
return $parserOutput;
}
}
@@ -1172,8 +1128,6 @@ class WikiPage implements Page, IDBAccessObject {
$pool = new PoolWorkArticleView( $this, $parserOptions, $oldid, $useParserCache );
$pool->execute();
- wfProfileOut( __METHOD__ );
-
return $pool->getParserOutput();
}
@@ -1183,17 +1137,11 @@ class WikiPage implements Page, IDBAccessObject {
* @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
*/
public function doViewUpdates( User $user, $oldid = 0 ) {
- global $wgDisableCounters;
if ( wfReadOnly() ) {
return;
}
- // Don't update page view counters on views from bot users (bug 14044)
- if ( !$wgDisableCounters && !$user->isAllowed( 'bot' ) && $this->exists() ) {
- DeferredUpdates::addUpdate( new ViewCountUpdate( $this->getId() ) );
- DeferredUpdates::addUpdate( new SiteStatsUpdate( 1, 0, 0 ) );
- }
-
+ Hooks::run( 'PageViewUpdates', array( $this, $user ) );
// Update newtalk / watchlist notification status
$user->clearNotification( $this->mTitle, $oldid );
}
@@ -1205,7 +1153,7 @@ class WikiPage implements Page, IDBAccessObject {
public function doPurge() {
global $wgUseSquid;
- if ( !wfRunHooks( 'ArticlePurge', array( &$this ) ) ) {
+ if ( !Hooks::run( 'ArticlePurge', array( &$this ) ) ) {
return false;
}
@@ -1255,14 +1203,12 @@ class WikiPage implements Page, IDBAccessObject {
* @return int The newly created page_id key, or false if the title already existed
*/
public function insertOn( $dbw ) {
- wfProfileIn( __METHOD__ );
$page_id = $dbw->nextSequenceValue( 'page_page_id_seq' );
$dbw->insert( 'page', array(
'page_id' => $page_id,
'page_namespace' => $this->mTitle->getNamespace(),
'page_title' => $this->mTitle->getDBkey(),
- 'page_counter' => 0,
'page_restrictions' => '',
'page_is_redirect' => 0, // Will set this shortly...
'page_is_new' => 1,
@@ -1279,7 +1225,6 @@ class WikiPage implements Page, IDBAccessObject {
$this->mId = $newid;
$this->mTitle->resetArticleID( $newid );
}
- wfProfileOut( __METHOD__ );
return $affected ? $newid : false;
}
@@ -1302,7 +1247,12 @@ class WikiPage implements Page, IDBAccessObject {
) {
global $wgContentHandlerUseDB;
- wfProfileIn( __METHOD__ );
+ // Assertion to try to catch T92046
+ if ( (int)$revision->getId() === 0 ) {
+ throw new InvalidArgumentException(
+ __METHOD__ . ': Revision has ID ' . var_export( $revision->getId(), 1 )
+ );
+ }
$content = $revision->getContent();
$len = $content ? $content->getSize() : 0;
@@ -1337,7 +1287,6 @@ class WikiPage implements Page, IDBAccessObject {
if ( $result ) {
$this->updateRedirectOn( $dbw, $rt, $lastRevIsRedirect );
$this->setLastEdit( $revision );
- $this->setCachedLastEditTime( $now );
$this->mLatest = $revision->getId();
$this->mIsRedirect = (bool)$rt;
// Update the LinkCache.
@@ -1345,7 +1294,6 @@ class WikiPage implements Page, IDBAccessObject {
$this->mLatest, $revision->getContentModel() );
}
- wfProfileOut( __METHOD__ );
return $result;
}
@@ -1370,7 +1318,6 @@ class WikiPage implements Page, IDBAccessObject {
return true;
}
- wfProfileIn( __METHOD__ );
if ( $isRedirect ) {
$this->insertRedirectEntry( $redirectTitle );
} else {
@@ -1382,7 +1329,6 @@ class WikiPage implements Page, IDBAccessObject {
if ( $this->getTitle()->getNamespace() == NS_FILE ) {
RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $this->getTitle() );
}
- wfProfileOut( __METHOD__ );
return ( $dbw->affectedRows() != 0 );
}
@@ -1398,7 +1344,6 @@ class WikiPage implements Page, IDBAccessObject {
* @return bool
*/
public function updateIfNewerOn( $dbw, $revision ) {
- wfProfileIn( __METHOD__ );
$row = $dbw->selectRow(
array( 'revision', 'page' ),
@@ -1410,7 +1355,6 @@ class WikiPage implements Page, IDBAccessObject {
if ( $row ) {
if ( wfTimestamp( TS_MW, $row->rev_timestamp ) >= $revision->getTimestamp() ) {
- wfProfileOut( __METHOD__ );
return false;
}
$prev = $row->rev_id;
@@ -1423,7 +1367,6 @@ class WikiPage implements Page, IDBAccessObject {
$ret = $this->updateRevisionOn( $dbw, $revision, $prev, $lastRevIsRedirect );
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -1542,18 +1485,26 @@ class WikiPage implements Page, IDBAccessObject {
*/
public function replaceSectionContent( $sectionId, Content $sectionContent, $sectionTitle = '',
$edittime = null ) {
- wfProfileIn( __METHOD__ );
$baseRevId = null;
if ( $edittime && $sectionId !== 'new' ) {
- $dbw = wfGetDB( DB_MASTER );
- $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+ $dbr = wfGetDB( DB_SLAVE );
+ $rev = Revision::loadFromTimestamp( $dbr, $this->mTitle, $edittime );
+ // Try the master if this thread may have just added it.
+ // This could be abstracted into a Revision method, but we don't want
+ // to encourage loading of revisions by timestamp.
+ if ( !$rev
+ && wfGetLB()->getServerCount() > 1
+ && wfGetLB()->hasOrMadeRecentMasterChanges()
+ ) {
+ $dbw = wfGetDB( DB_MASTER );
+ $rev = Revision::loadFromTimestamp( $dbw, $this->mTitle, $edittime );
+ }
if ( $rev ) {
$baseRevId = $rev->getId();
}
}
- wfProfileOut( __METHOD__ );
return $this->replaceSectionAtRev( $sectionId, $sectionContent, $sectionTitle, $baseRevId );
}
@@ -1573,14 +1524,12 @@ class WikiPage implements Page, IDBAccessObject {
public function replaceSectionAtRev( $sectionId, Content $sectionContent,
$sectionTitle = '', $baseRevId = null
) {
- wfProfileIn( __METHOD__ );
if ( strval( $sectionId ) === '' ) {
// Whole-page edit; let the whole text through
$newContent = $sectionContent;
} else {
if ( !$this->supportsSections() ) {
- wfProfileOut( __METHOD__ );
throw new MWException( "sections not supported for content model " .
$this->getContentHandler()->getModelID() );
}
@@ -1589,14 +1538,10 @@ class WikiPage implements Page, IDBAccessObject {
if ( is_null( $baseRevId ) || $sectionId === 'new' ) {
$oldContent = $this->getContent();
} else {
- // TODO: try DB_SLAVE first
- $dbw = wfGetDB( DB_MASTER );
- $rev = Revision::loadFromId( $dbw, $baseRevId );
-
+ $rev = Revision::newFromId( $baseRevId );
if ( !$rev ) {
wfDebug( __METHOD__ . " asked for bogus section (page: " .
$this->getId() . "; section: $sectionId)\n" );
- wfProfileOut( __METHOD__ );
return null;
}
@@ -1605,14 +1550,12 @@ class WikiPage implements Page, IDBAccessObject {
if ( !$oldContent ) {
wfDebug( __METHOD__ . ": no page text\n" );
- wfProfileOut( __METHOD__ );
return null;
}
$newContent = $oldContent->replaceSection( $sectionId, $sectionContent, $sectionTitle );
}
- wfProfileOut( __METHOD__ );
return $newContent;
}
@@ -1662,7 +1605,9 @@ class WikiPage implements Page, IDBAccessObject {
* error will be returned. These two conditions are also possible with
* auto-detection due to MediaWiki's performance-optimised locking strategy.
*
- * @param bool|int $baseRevId The revision ID this edit was based off, if any
+ * @param bool|int $baseRevId The revision ID this edit was based off, if any.
+ * This is not the parent revision ID, rather the revision ID for older
+ * content used as the source for a rollback, for example.
* @param User $user The user doing the edit
*
* @throws MWException
@@ -1722,9 +1667,11 @@ class WikiPage implements Page, IDBAccessObject {
* error will be returned. These two conditions are also possible with
* auto-detection due to MediaWiki's performance-optimised locking strategy.
*
- * @param bool|int $baseRevId The revision ID this edit was based off, if any
+ * @param bool|int $baseRevId The revision ID this edit was based off, if any.
+ * This is not the parent revision ID, rather the revision ID for older
+ * content used as the source for a rollback, for example.
* @param User $user The user doing the edit
- * @param string $serialisation_format Format for storing the content in the
+ * @param string $serialFormat Format for storing the content in the
* database.
*
* @throws MWException
@@ -1745,7 +1692,7 @@ class WikiPage implements Page, IDBAccessObject {
* @since 1.21
*/
public function doEditContent( Content $content, $summary, $flags = 0, $baseRevId = false,
- User $user = null, $serialisation_format = null
+ User $user = null, $serialFormat = null
) {
global $wgUser, $wgUseAutomaticEditSummaries, $wgUseRCPatrol, $wgUseNPPatrol;
@@ -1754,10 +1701,7 @@ class WikiPage implements Page, IDBAccessObject {
throw new MWException( 'Something is trying to edit an article with an empty title' );
}
- wfProfileIn( __METHOD__ );
-
if ( !$content->getContentHandler()->canBeUsedOn( $this->getTitle() ) ) {
- wfProfileOut( __METHOD__ );
return Status::newFatal( 'content-not-allowed-here',
ContentHandler::getLocalizedName( $content->getModel() ),
$this->getTitle()->getPrefixedText() );
@@ -1777,7 +1721,7 @@ class WikiPage implements Page, IDBAccessObject {
$hook_args = array( &$this, &$user, &$content, &$summary,
$flags & EDIT_MINOR, null, null, &$flags, &$status );
- if ( !wfRunHooks( 'PageContentSave', $hook_args )
+ if ( !Hooks::run( 'PageContentSave', $hook_args )
|| !ContentHandler::runLegacyHooks( 'ArticleSave', $hook_args ) ) {
wfDebug( __METHOD__ . ": ArticleSave or ArticleSaveContent hook aborted save!\n" );
@@ -1786,7 +1730,6 @@ class WikiPage implements Page, IDBAccessObject {
$status->fatal( 'edit-hook-aborted' );
}
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1811,7 +1754,7 @@ class WikiPage implements Page, IDBAccessObject {
$summary = $handler->getAutosummary( $old_content, $content, $flags );
}
- $editInfo = $this->prepareContentForEdit( $content, null, $user, $serialisation_format );
+ $editInfo = $this->prepareContentForEdit( $content, null, $user, $serialFormat );
$serialized = $editInfo->pst;
/**
@@ -1833,11 +1776,9 @@ class WikiPage implements Page, IDBAccessObject {
wfDebug( __METHOD__ . ": EDIT_UPDATE specified but article doesn't exist\n" );
$status->fatal( 'edit-gone-missing' );
- wfProfileOut( __METHOD__ );
return $status;
} elseif ( !$old_content ) {
// Sanity check for bug 37225
- wfProfileOut( __METHOD__ );
throw new MWException( "Could not find text for current revision {$oldid}." );
}
@@ -1853,27 +1794,21 @@ class WikiPage implements Page, IDBAccessObject {
'user_text' => $user->getName(),
'timestamp' => $now,
'content_model' => $content->getModel(),
- 'content_format' => $serialisation_format,
+ 'content_format' => $serialFormat,
) ); // XXX: pass content object?!
$changed = !$content->equals( $old_content );
if ( $changed ) {
- if ( !$content->isValid() ) {
- wfProfileOut( __METHOD__ );
- throw new MWException( "New content failed validity check!" );
- }
-
$dbw->begin( __METHOD__ );
try {
- $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+ $prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
$status->merge( $prepStatus );
if ( !$status->isOK() ) {
$dbw->rollback( __METHOD__ );
- wfProfileOut( __METHOD__ );
return $status;
}
$revisionId = $revision->insertOn( $dbw );
@@ -1889,11 +1824,10 @@ class WikiPage implements Page, IDBAccessObject {
$dbw->rollback( __METHOD__ );
- wfProfileOut( __METHOD__ );
return $status;
}
- wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, $baseRevId, $user ) );
+ Hooks::run( 'NewRevisionFromEditComplete', array( $this, $revision, $baseRevId, $user ) );
// Update recentchanges
if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
// Mark as patrolled if the user can do so
@@ -1911,7 +1845,7 @@ class WikiPage implements Page, IDBAccessObject {
}
}
$user->incEditCount();
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$dbw->rollback( __METHOD__ );
// Question: Would it perhaps be better if this method turned all
// exceptions into $status's?
@@ -1948,13 +1882,12 @@ class WikiPage implements Page, IDBAccessObject {
$dbw->begin( __METHOD__ );
try {
- $prepStatus = $content->prepareSave( $this, $flags, $baseRevId, $user );
+ $prepStatus = $content->prepareSave( $this, $flags, $oldid, $user );
$status->merge( $prepStatus );
if ( !$status->isOK() ) {
$dbw->rollback( __METHOD__ );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1968,7 +1901,6 @@ class WikiPage implements Page, IDBAccessObject {
$dbw->rollback( __METHOD__ );
$status->fatal( 'edit-already-exists' );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -1984,7 +1916,7 @@ class WikiPage implements Page, IDBAccessObject {
'user_text' => $user->getName(),
'timestamp' => $now,
'content_model' => $content->getModel(),
- 'content_format' => $serialisation_format,
+ 'content_format' => $serialFormat,
) );
$revisionId = $revision->insertOn( $dbw );
@@ -1998,7 +1930,7 @@ class WikiPage implements Page, IDBAccessObject {
// Update the page record with revision data
$this->updateRevisionOn( $dbw, $revision, 0 );
- wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
+ Hooks::run( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
// Update recentchanges
if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
@@ -2016,7 +1948,7 @@ class WikiPage implements Page, IDBAccessObject {
}
$user->incEditCount();
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$dbw->rollback( __METHOD__ );
throw $e;
}
@@ -2029,7 +1961,7 @@ class WikiPage implements Page, IDBAccessObject {
$flags & EDIT_MINOR, null, null, &$flags, $revision );
ContentHandler::runLegacyHooks( 'ArticleInsertComplete', $hook_args );
- wfRunHooks( 'PageContentInsertComplete', $hook_args );
+ Hooks::run( 'PageContentInsertComplete', $hook_args );
}
// Do updates right now unless deferral was requested
@@ -2044,14 +1976,14 @@ class WikiPage implements Page, IDBAccessObject {
$flags & EDIT_MINOR, null, null, &$flags, $revision, &$status, $baseRevId );
ContentHandler::runLegacyHooks( 'ArticleSaveComplete', $hook_args );
- wfRunHooks( 'PageContentSaveComplete', $hook_args );
+ Hooks::run( 'PageContentSaveComplete', $hook_args );
// Promote user to any groups they meet the criteria for
$dbw->onTransactionIdle( function () use ( $user ) {
$user->addAutopromoteOnceGroups( 'onEdit' );
+ $user->addAutopromoteOnceGroups( 'onView' ); // b/c
} );
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -2083,7 +2015,7 @@ class WikiPage implements Page, IDBAccessObject {
/**
* Prepare text which is about to be saved.
- * Returns a stdclass with source, pst and output members
+ * Returns a stdClass with source, pst and output members
*
* @deprecated since 1.21: use prepareContentForEdit instead.
* @return object
@@ -2096,54 +2028,109 @@ class WikiPage implements Page, IDBAccessObject {
/**
* Prepare content which is about to be saved.
- * Returns a stdclass with source, pst and output members
+ * Returns a stdClass with source, pst and output members
*
* @param Content $content
- * @param int|null $revid
+ * @param Revision|int|null $revision Revision object. For backwards compatibility, a
+ * revision ID is also accepted, but this is deprecated.
* @param User|null $user
- * @param string|null $serialization_format
+ * @param string|null $serialFormat
+ * @param bool $useCache Check shared prepared edit cache
*
- * @return bool|object
+ * @return object
*
* @since 1.21
*/
- public function prepareContentForEdit( Content $content, $revid = null, User $user = null,
- $serialization_format = null
+ public function prepareContentForEdit(
+ Content $content, $revision = null, User $user = null, $serialFormat = null, $useCache = true
) {
- global $wgContLang, $wgUser;
+ global $wgContLang, $wgUser, $wgAjaxEditStash;
+
+ if ( is_object( $revision ) ) {
+ $revid = $revision->getId();
+ } else {
+ $revid = $revision;
+ // This code path is deprecated, and nothing is known to
+ // use it, so performance here shouldn't be a worry.
+ if ( $revid !== null ) {
+ $revision = Revision::newFromId( $revid, Revision::READ_LATEST );
+ } else {
+ $revision = null;
+ }
+ }
+
$user = is_null( $user ) ? $wgUser : $user;
//XXX: check $user->getId() here???
- // Use a sane default for $serialization_format, see bug 57026
- if ( $serialization_format === null ) {
- $serialization_format = $content->getContentHandler()->getDefaultFormat();
+ // Use a sane default for $serialFormat, see bug 57026
+ if ( $serialFormat === null ) {
+ $serialFormat = $content->getContentHandler()->getDefaultFormat();
}
if ( $this->mPreparedEdit
&& $this->mPreparedEdit->newContent
&& $this->mPreparedEdit->newContent->equals( $content )
&& $this->mPreparedEdit->revid == $revid
- && $this->mPreparedEdit->format == $serialization_format
+ && $this->mPreparedEdit->format == $serialFormat
// XXX: also check $user here?
) {
// Already prepared
return $this->mPreparedEdit;
}
+ // The edit may have already been prepared via api.php?action=stashedit
+ $cachedEdit = $useCache && $wgAjaxEditStash
+ ? ApiStashEdit::checkCache( $this->getTitle(), $content, $user )
+ : false;
+
$popts = ParserOptions::newFromUserAndLang( $user, $wgContLang );
- wfRunHooks( 'ArticlePrepareTextForEdit', array( $this, $popts ) );
+ Hooks::run( 'ArticlePrepareTextForEdit', array( $this, $popts ) );
$edit = (object)array();
+ if ( $cachedEdit ) {
+ $edit->timestamp = $cachedEdit->timestamp;
+ } else {
+ $edit->timestamp = wfTimestampNow();
+ }
+ // @note: $cachedEdit is not used if the rev ID was referenced in the text
$edit->revid = $revid;
- $edit->timestamp = wfTimestampNow();
- $edit->pstContent = $content ? $content->preSaveTransform( $this->mTitle, $user, $popts ) : null;
+ if ( $cachedEdit ) {
+ $edit->pstContent = $cachedEdit->pstContent;
+ } else {
+ $edit->pstContent = $content
+ ? $content->preSaveTransform( $this->mTitle, $user, $popts )
+ : null;
+ }
- $edit->format = $serialization_format;
+ $edit->format = $serialFormat;
$edit->popts = $this->makeParserOptions( 'canonical' );
- $edit->output = $edit->pstContent
- ? $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts )
- : null;
+ if ( $cachedEdit ) {
+ $edit->output = $cachedEdit->output;
+ } else {
+ if ( $revision ) {
+ // We get here if vary-revision is set. This means that this page references
+ // itself (such as via self-transclusion). In this case, we need to make sure
+ // that any such self-references refer to the newly-saved revision, and not
+ // to the previous one, which could otherwise happen due to slave lag.
+ $oldCallback = $edit->popts->setCurrentRevisionCallback(
+ function ( $title, $parser = false ) use ( $revision, &$oldCallback ) {
+ if ( $title->equals( $revision->getTitle() ) ) {
+ return $revision;
+ } else {
+ return call_user_func(
+ $oldCallback,
+ $title,
+ $parser
+ );
+ }
+ }
+ );
+ }
+ $edit->output = $edit->pstContent
+ ? $edit->pstContent->getParserOutput( $this->mTitle, $revid, $edit->popts )
+ : null;
+ }
$edit->newContent = $content;
$edit->oldContent = $this->getContent( Revision::RAW );
@@ -2151,7 +2138,7 @@ class WikiPage implements Page, IDBAccessObject {
// NOTE: B/C for hooks! don't use these fields!
$edit->newText = $edit->newContent ? ContentHandler::getContentText( $edit->newContent ) : '';
$edit->oldText = $edit->oldContent ? ContentHandler::getContentText( $edit->oldContent ) : '';
- $edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialization_format ) : '';
+ $edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialFormat ) : '';
$this->mPreparedEdit = $edit;
return $edit;
@@ -2168,17 +2155,23 @@ class WikiPage implements Page, IDBAccessObject {
* @param array $options Array of options, following indexes are used:
* - changed: boolean, whether the revision changed the content (default true)
* - created: boolean, whether the revision created the page (default false)
- * - oldcountable: boolean or null (default null):
+ * - moved: boolean, whether the page was moved (default false)
+ * - oldcountable: boolean, null, or string 'no-change' (default null):
* - boolean: whether the page was counted as an article before that
* revision, only used in changed is true and created is false
- * - null: don't change the article count
+ * - null: if created is false, don't update the article count; if created
+ * is true, do update the article count
+ * - 'no-change': don't update the article count, ever
*/
public function doEditUpdates( Revision $revision, User $user, array $options = array() ) {
global $wgEnableParserCache;
- wfProfileIn( __METHOD__ );
-
- $options += array( 'changed' => true, 'created' => false, 'oldcountable' => null );
+ $options += array(
+ 'changed' => true,
+ 'created' => false,
+ 'moved' => false,
+ 'oldcountable' => null
+ );
$content = $revision->getContent();
// Parse the text
@@ -2186,7 +2179,7 @@ class WikiPage implements Page, IDBAccessObject {
// already pre-save transformed once.
if ( !$this->mPreparedEdit || $this->mPreparedEdit->output->getFlag( 'vary-revision' ) ) {
wfDebug( __METHOD__ . ": No prepared edit or vary-revision is set...\n" );
- $editInfo = $this->prepareContentForEdit( $content, $revision->getId(), $user );
+ $editInfo = $this->prepareContentForEdit( $content, $revision, $user );
} else {
wfDebug( __METHOD__ . ": No vary-revision, using prepared edit...\n" );
$editInfo = $this->mPreparedEdit;
@@ -2208,18 +2201,18 @@ class WikiPage implements Page, IDBAccessObject {
DataUpdate::runUpdates( $updates );
}
- wfRunHooks( 'ArticleEditUpdates', array( &$this, &$editInfo, $options['changed'] ) );
+ Hooks::run( 'ArticleEditUpdates', array( &$this, &$editInfo, $options['changed'] ) );
- if ( wfRunHooks( 'ArticleEditUpdatesDeleteFromRecentchanges', array( &$this ) ) ) {
- if ( 0 == mt_rand( 0, 99 ) ) {
- // Flush old entries from the `recentchanges` table; we do this on
- // random requests so as to avoid an increase in writes for no good reason
- RecentChange::purgeExpiredChanges();
- }
+ if ( Hooks::run( 'ArticleEditUpdatesDeleteFromRecentchanges', array( &$this ) ) ) {
+ JobQueueGroup::singleton()->push( array(
+ // Flush old entries from the `recentchanges` table
+ RecentChangesUpdateJob::newPurgeJob(),
+ // Update the cached list of active users
+ RecentChangesUpdateJob::newCacheUpdateJob()
+ ) );
}
if ( !$this->exists() ) {
- wfProfileOut( __METHOD__ );
return;
}
@@ -2227,7 +2220,9 @@ class WikiPage implements Page, IDBAccessObject {
$title = $this->mTitle->getPrefixedDBkey();
$shortTitle = $this->mTitle->getDBkey();
- if ( !$options['changed'] ) {
+ if ( $options['oldcountable'] === 'no-change' ||
+ ( !$options['changed'] && !$options['moved'] )
+ ) {
$good = 0;
} elseif ( $options['created'] ) {
$good = (int)$this->isCountable( $editInfo );
@@ -2255,7 +2250,7 @@ class WikiPage implements Page, IDBAccessObject {
wfDebug( __METHOD__ . ": invalid username\n" );
} else {
// Allow extensions to prevent user notification when a new message is added to their talk page
- if ( wfRunHooks( 'ArticleEditUpdateNewTalk', array( &$this, $recipient ) ) ) {
+ if ( Hooks::run( 'ArticleEditUpdateNewTalk', array( &$this, $recipient ) ) ) {
if ( User::isIP( $shortTitle ) ) {
// An anonymous user
$recipient->setNewtalk( true, $revision );
@@ -2284,7 +2279,6 @@ class WikiPage implements Page, IDBAccessObject {
self::onArticleEdit( $this->mTitle );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -2315,14 +2309,13 @@ class WikiPage implements Page, IDBAccessObject {
* @param User $user The relevant user
* @param string $comment Comment submitted
* @param bool $minor Whereas it's a minor modification
- * @param string $serialisation_format Format for storing the content in the database
+ * @param string $serialFormat Format for storing the content in the database
*/
public function doQuickEditContent( Content $content, User $user, $comment = '', $minor = false,
- $serialisation_format = null
+ $serialFormat = null
) {
- wfProfileIn( __METHOD__ );
- $serialized = $content->serialize( $serialisation_format );
+ $serialized = $content->serialize( $serialFormat );
$dbw = wfGetDB( DB_MASTER );
$revision = new Revision( array(
@@ -2338,9 +2331,8 @@ class WikiPage implements Page, IDBAccessObject {
$revision->insertOn( $dbw );
$this->updateRevisionOn( $dbw, $revision );
- wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
+ Hooks::run( 'NewRevisionFromEditComplete', array( $this, $revision, false, $user ) );
- wfProfileOut( __METHOD__ );
}
/**
@@ -2437,7 +2429,7 @@ class WikiPage implements Page, IDBAccessObject {
$logRelationsField = null;
if ( $id ) { // Protection of existing page
- if ( !wfRunHooks( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
+ if ( !Hooks::run( 'ArticleProtect', array( &$this, &$user, $limit, $reason ) ) ) {
return Status::newGood();
}
@@ -2517,8 +2509,8 @@ class WikiPage implements Page, IDBAccessObject {
__METHOD__
);
- wfRunHooks( 'NewRevisionFromEditComplete', array( $this, $nullRevision, $latest, $user ) );
- wfRunHooks( 'ArticleProtectComplete', array( &$this, &$user, $limit, $reason ) );
+ Hooks::run( 'NewRevisionFromEditComplete', array( $this, $nullRevision, $latest, $user ) );
+ Hooks::run( 'ArticleProtectComplete', array( &$this, &$user, $limit, $reason ) );
} else { // Protection of non-existing page (also known as "title protection")
// Cascade protection is meaningless in this case
$cascade = false;
@@ -2780,7 +2772,7 @@ class WikiPage implements Page, IDBAccessObject {
}
$user = is_null( $user ) ? $wgUser : $user;
- if ( !wfRunHooks( 'ArticleDelete', array( &$this, &$user, &$reason, &$error, &$status ) ) ) {
+ if ( !Hooks::run( 'ArticleDelete', array( &$this, &$user, &$reason, &$error, &$status ) ) ) {
if ( $status->isOK() ) {
// Hook aborted but didn't set a fatal status
$status->fatal( 'delete-hook-aborted' );
@@ -2896,7 +2888,7 @@ class WikiPage implements Page, IDBAccessObject {
$this->doDeleteUpdates( $id, $content );
- wfRunHooks( 'ArticleDeleteComplete', array( &$this, &$user, $reason, $id, $content, $logEntry ) );
+ Hooks::run( 'ArticleDeleteComplete', array( &$this, &$user, $reason, $id, $content, $logEntry ) );
$status->value = $logid;
return $status;
}
@@ -3031,8 +3023,8 @@ class WikiPage implements Page, IDBAccessObject {
// Get the last edit not by this guy...
// Note: these may not be public values
- $user = intval( $current->getRawUser() );
- $user_text = $dbw->addQuotes( $current->getRawUserText() );
+ $user = intval( $current->getUser( Revision::RAW ) );
+ $user_text = $dbw->addQuotes( $current->getUserText( Revision::RAW ) );
$s = $dbw->selectRow( 'revision',
array( 'rev_id', 'rev_timestamp', 'rev_deleted' ),
array( 'rev_page' => $current->getPage(),
@@ -3075,7 +3067,7 @@ class WikiPage implements Page, IDBAccessObject {
}
// Generate the edit summary if necessary
- $target = Revision::newFromId( $s->rev_id );
+ $target = Revision::newFromId( $s->rev_id, Revision::READ_LATEST );
if ( empty( $summary ) ) {
if ( $from == '' ) { // no public user name
$summary = wfMessage( 'revertpage-nouser' );
@@ -3138,7 +3130,7 @@ class WikiPage implements Page, IDBAccessObject {
$revId = $status->value['revision']->getId();
- wfRunHooks( 'ArticleRollbackComplete', array( $this, $guser, $target, $current ) );
+ Hooks::run( 'ArticleRollbackComplete', array( $this, $guser, $target, $current ) );
$resultDetails = array(
'summary' => $summary,
@@ -3161,13 +3153,9 @@ class WikiPage implements Page, IDBAccessObject {
*
* @param Title $title
*/
- public static function onArticleCreate( $title ) {
+ public static function onArticleCreate( Title $title ) {
// Update existence markers on article/talk tabs...
- if ( $title->isTalkPage() ) {
- $other = $title->getSubjectPage();
- } else {
- $other = $title->getTalkPage();
- }
+ $other = $title->getOtherPage();
$other->invalidateCache();
$other->purgeSquid();
@@ -3182,13 +3170,9 @@ class WikiPage implements Page, IDBAccessObject {
*
* @param Title $title
*/
- public static function onArticleDelete( $title ) {
+ public static function onArticleDelete( Title $title ) {
// Update existence markers on article/talk tabs...
- if ( $title->isTalkPage() ) {
- $other = $title->getSubjectPage();
- } else {
- $other = $title->getTalkPage();
- }
+ $other = $title->getOtherPage();
$other->invalidateCache();
$other->purgeSquid();
@@ -3227,10 +3211,8 @@ class WikiPage implements Page, IDBAccessObject {
* Purge caches on page update etc
*
* @param Title $title
- * @todo Verify that $title is always a Title object (and never false or
- * null), add Title hint to parameter $title.
*/
- public static function onArticleEdit( $title ) {
+ public static function onArticleEdit( Title $title ) {
// Invalidate caches of articles which include this page
DeferredUpdates::addHTMLCacheUpdate( $title, 'templatelinks' );
@@ -3390,82 +3372,52 @@ class WikiPage implements Page, IDBAccessObject {
foreach ( $added as $catName ) {
$cat = Category::newFromName( $catName );
- wfRunHooks( 'CategoryAfterPageAdded', array( $cat, $that ) );
+ Hooks::run( 'CategoryAfterPageAdded', array( $cat, $that ) );
}
foreach ( $deleted as $catName ) {
$cat = Category::newFromName( $catName );
- wfRunHooks( 'CategoryAfterPageRemoved', array( $cat, $that ) );
+ Hooks::run( 'CategoryAfterPageRemoved', array( $cat, $that ) );
}
}
);
}
/**
- * Updates cascading protections
+ * Opportunistically enqueue link update jobs given fresh parser output if useful
*
- * @param ParserOutput $parserOutput ParserOutput object for the current version
+ * @param ParserOutput $parserOutput Current version page output
+ * @since 1.25
*/
- public function doCascadeProtectionUpdates( ParserOutput $parserOutput ) {
- if ( wfReadOnly() || !$this->mTitle->areRestrictionsCascading() ) {
+ public function triggerOpportunisticLinksUpdate( ParserOutput $parserOutput ) {
+ if ( wfReadOnly() ) {
return;
}
- // templatelinks or imagelinks tables may have become out of sync,
- // especially if using variable-based transclusions.
- // For paranoia, check if things have changed and if
- // so apply updates to the database. This will ensure
- // that cascaded protections apply as soon as the changes
- // are visible.
-
- // Get templates from templatelinks and images from imagelinks
- $id = $this->getId();
-
- $dbLinks = array();
-
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( array( 'templatelinks' ),
- array( 'tl_namespace', 'tl_title' ),
- array( 'tl_from' => $id ),
- __METHOD__
- );
-
- foreach ( $res as $row ) {
- $dbLinks["{$row->tl_namespace}:{$row->tl_title}"] = true;
+ if ( !Hooks::run( 'OpportunisticLinksUpdate', array( $this, $this->mTitle, $parserOutput ) ) ) {
+ return;
}
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( array( 'imagelinks' ),
- array( 'il_to' ),
- array( 'il_from' => $id ),
- __METHOD__
- );
-
- foreach ( $res as $row ) {
- $dbLinks[NS_FILE . ":{$row->il_to}"] = true;
+ if ( $this->mTitle->areRestrictionsCascading() ) {
+ // If the page is cascade protecting, the links should really be up-to-date
+ $params = array( 'prioritize' => true );
+ } elseif ( $parserOutput->hasDynamicContent() ) {
+ // Assume the output contains time/random based magic words
+ $params = array();
+ } else {
+ // If the inclusions are deterministic, the edit-triggered link jobs are enough
+ return;
}
- // Get templates and images from parser output.
- $poLinks = array();
- foreach ( $parserOutput->getTemplates() as $ns => $templates ) {
- foreach ( $templates as $dbk => $id ) {
- $poLinks["$ns:$dbk"] = true;
- }
- }
- foreach ( $parserOutput->getImages() as $dbk => $id ) {
- $poLinks[NS_FILE . ":$dbk"] = true;
+ // Check if the last link refresh was before page_touched
+ if ( $this->getLinksTimestamp() < $this->getTouched() ) {
+ JobQueueGroup::singleton()->push( EnqueueJob::newFromLocalJobs(
+ new JobSpecification( 'refreshLinks', $params, array(), $this->mTitle )
+ ) );
+ return;
}
- // Get the diff
- $links_diff = array_diff_key( $poLinks, $dbLinks );
-
- if ( count( $links_diff ) > 0 ) {
- // Whee, link updates time.
- // Note: we are only interested in links here. We don't need to get
- // other DataUpdate items from the parser output.
- $u = new LinksUpdate( $this->mTitle, $parserOutput, false );
- $u->doUpdate();
- }
+ return;
}
/**
@@ -3548,7 +3500,7 @@ class WikiPage implements Page, IDBAccessObject {
$updates = $content->getDeletionUpdates( $this );
}
- wfRunHooks( 'WikiPageDeletionUpdates', array( $this, $content, &$updates ) );
+ Hooks::run( 'WikiPageDeletionUpdates', array( $this, $content, &$updates ) );
return $updates;
}
}
diff --git a/includes/pager/IndexPager.php b/includes/pager/IndexPager.php
index ce6dc50c..7a5952f1 100644
--- a/includes/pager/IndexPager.php
+++ b/includes/pager/IndexPager.php
@@ -196,7 +196,7 @@ abstract class IndexPager extends ContextSource implements Pager {
public function doQuery() {
# Use the child class name for profiling
$fname = __METHOD__ . ' (' . get_class( $this ) . ')';
- wfProfileIn( $fname );
+ $section = Profiler::instance()->scopedProfileIn( $fname );
// @todo This should probably compare to DIR_DESCENDING and DIR_ASCENDING constants
$descending = ( $this->mIsBackwards == $this->mDefaultDirection );
@@ -226,8 +226,6 @@ abstract class IndexPager extends ContextSource implements Pager {
$this->preprocessResults( $this->mResult );
$this->mResult->rewind(); // Paranoia
-
- wfProfileOut( $fname );
}
/**
@@ -478,7 +476,6 @@ abstract class IndexPager extends ContextSource implements Pager {
$attrs['class'] = "mw-{$type}link";
}
-
return Linker::linkKnown(
$this->getTitle(),
$text,
diff --git a/includes/parser/CacheTime.php b/includes/parser/CacheTime.php
index 94abc266..950c0d46 100644
--- a/includes/parser/CacheTime.php
+++ b/includes/parser/CacheTime.php
@@ -34,8 +34,7 @@ class CacheTime {
public $mVersion = Parser::VERSION, # Compatibility check
$mCacheTime = '', # Time when this object was generated, or -1 for uncacheable. Used in ParserCache.
- $mCacheExpiry = null, # Seconds after which the object should expire, use 0 for uncachable. Used in ParserCache.
- $mContainsOldMagic, # Boolean variable indicating if the input contained variables like {{CURRENTDAY}}
+ $mCacheExpiry = null, # Seconds after which the object should expire, use 0 for uncacheable. Used in ParserCache.
$mCacheRevisionId = null; # Revision ID that was parsed
/**
@@ -46,21 +45,6 @@ class CacheTime {
}
/**
- * @return bool
- */
- public function containsOldMagic() {
- return $this->mContainsOldMagic;
- }
-
- /**
- * @param bool $com
- * @return bool
- */
- public function setContainsOldMagic( $com ) {
- return wfSetVar( $this->mContainsOldMagic, $com );
- }
-
- /**
* setCacheTime() sets the timestamp expressing when the page has been rendered.
* This does not control expiry, see updateCacheExpiry() for that!
* @param string $t
@@ -123,7 +107,7 @@ class CacheTime {
if ( $this->mCacheTime < 0 ) {
return 0;
- } // old-style marker for "not cachable"
+ } // old-style marker for "not cacheable"
$expire = $this->mCacheExpiry;
@@ -133,12 +117,8 @@ class CacheTime {
$expire = min( $expire, $wgParserCacheExpireTime );
}
- if ( $this->containsOldMagic() ) { //compatibility hack
- $expire = min( $expire, 3600 ); # 1 hour
- }
-
if ( $expire <= 0 ) {
- return 0; // not cachable
+ return 0; // not cacheable
} else {
return $expire;
}
diff --git a/includes/parser/CoreParserFunctions.php b/includes/parser/CoreParserFunctions.php
index eacbecd4..830a68fc 100644
--- a/includes/parser/CoreParserFunctions.php
+++ b/includes/parser/CoreParserFunctions.php
@@ -36,7 +36,7 @@ class CoreParserFunctions {
# Syntax for arguments (see Parser::setFunctionHook):
# "name for lookup in localized magic words array",
# function callback,
- # optional SFH_NO_HASH to omit the hash from calls (e.g. {{int:...}}
+ # optional Parser::SFH_NO_HASH to omit the hash from calls (e.g. {{int:...}}
# instead of {{#int:...}})
$noHashFunctions = array(
'ns', 'nse', 'urlencode', 'lcfirst', 'ucfirst', 'lc', 'uc',
@@ -44,7 +44,7 @@ class CoreParserFunctions {
'canonicalurle', 'formatnum', 'grammar', 'gender', 'plural',
'numberofpages', 'numberofusers', 'numberofactiveusers',
'numberofarticles', 'numberoffiles', 'numberofadmins',
- 'numberingroup', 'numberofedits', 'numberofviews', 'language',
+ 'numberingroup', 'numberofedits', 'language',
'padleft', 'padright', 'anchorencode', 'defaultsort', 'filepath',
'pagesincategory', 'pagesize', 'protectionlevel',
'namespacee', 'namespacenumber', 'talkspace', 'talkspacee',
@@ -57,24 +57,24 @@ class CoreParserFunctions {
'revisiontimestamp', 'revisionuser', 'cascadingsources',
);
foreach ( $noHashFunctions as $func ) {
- $parser->setFunctionHook( $func, array( __CLASS__, $func ), SFH_NO_HASH );
+ $parser->setFunctionHook( $func, array( __CLASS__, $func ), Parser::SFH_NO_HASH );
}
- $parser->setFunctionHook( 'namespace', array( __CLASS__, 'mwnamespace' ), SFH_NO_HASH );
- $parser->setFunctionHook( 'int', array( __CLASS__, 'intFunction' ), SFH_NO_HASH );
+ $parser->setFunctionHook( 'namespace', array( __CLASS__, 'mwnamespace' ), Parser::SFH_NO_HASH );
+ $parser->setFunctionHook( 'int', array( __CLASS__, 'intFunction' ), Parser::SFH_NO_HASH );
$parser->setFunctionHook( 'special', array( __CLASS__, 'special' ) );
$parser->setFunctionHook( 'speciale', array( __CLASS__, 'speciale' ) );
- $parser->setFunctionHook( 'tag', array( __CLASS__, 'tagObj' ), SFH_OBJECT_ARGS );
+ $parser->setFunctionHook( 'tag', array( __CLASS__, 'tagObj' ), Parser::SFH_OBJECT_ARGS );
$parser->setFunctionHook( 'formatdate', array( __CLASS__, 'formatDate' ) );
if ( $wgAllowDisplayTitle ) {
- $parser->setFunctionHook( 'displaytitle', array( __CLASS__, 'displaytitle' ), SFH_NO_HASH );
+ $parser->setFunctionHook( 'displaytitle', array( __CLASS__, 'displaytitle' ), Parser::SFH_NO_HASH );
}
if ( $wgAllowSlowParserFunctions ) {
$parser->setFunctionHook(
'pagesinnamespace',
array( __CLASS__, 'pagesinnamespace' ),
- SFH_NO_HASH
+ Parser::SFH_NO_HASH
);
}
}
@@ -111,7 +111,7 @@ class CoreParserFunctions {
$pref = $parser->getOptions()->getDateFormat();
- // Specify a different default date format other than the the normal default
+ // Specify a different default date format other than the normal default
// if the user has 'default' for their setting
if ( $pref == 'default' && $defaultPref ) {
$pref = $defaultPref;
@@ -309,15 +309,12 @@ class CoreParserFunctions {
* @return string
*/
public static function gender( $parser, $username ) {
- wfProfileIn( __METHOD__ );
$forms = array_slice( func_get_args(), 2 );
// Some shortcuts to avoid loading user data unnecessarily
if ( count( $forms ) === 0 ) {
- wfProfileOut( __METHOD__ );
return '';
} elseif ( count( $forms ) === 1 ) {
- wfProfileOut( __METHOD__ );
return $forms[0];
}
@@ -341,7 +338,6 @@ class CoreParserFunctions {
$gender = GenderCache::singleton()->getGenderOf( $parser->getOptions()->getUser(), __METHOD__ );
}
$ret = $parser->getFunctionLang()->gender( $gender, $forms );
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -379,8 +375,7 @@ class CoreParserFunctions {
$text = $parser->doQuotes( $text );
// remove stripped text (e.g. the UNIQ-QINU stuff) that was generated by tag extensions/whatever
- $text = preg_replace( '/' . preg_quote( $parser->uniqPrefix(), '/' ) . '.*?'
- . preg_quote( Parser::MARKER_SUFFIX, '/' ) . '/', '', $text );
+ $text = $parser->killMarkers( $text );
// list of disallowed tags for DISPLAYTITLE
// these will be escaped even though they are allowed in normal wiki text
@@ -489,10 +484,6 @@ class CoreParserFunctions {
public static function numberofedits( $parser, $raw = null ) {
return self::formatRaw( SiteStats::edits(), $raw );
}
- public static function numberofviews( $parser, $raw = null ) {
- global $wgDisableCounters;
- return !$wgDisableCounters ? self::formatRaw( SiteStats::views(), $raw ) : '';
- }
public static function pagesinnamespace( $parser, $namespace = 0, $raw = null ) {
return self::formatRaw( SiteStats::pagesInNs( intval( $namespace ) ), $raw );
}
@@ -902,9 +893,17 @@ class CoreParserFunctions {
}
}
- // Usage {{filepath|300}}, {{filepath|nowiki}}, {{filepath|nowiki|300}}
- // or {{filepath|300|nowiki}} or {{filepath|300px}}, {{filepath|200x300px}},
- // {{filepath|nowiki|200x300px}}, {{filepath|200x300px|nowiki}}.
+ /**
+ * Usage {{filepath|300}}, {{filepath|nowiki}}, {{filepath|nowiki|300}}
+ * or {{filepath|300|nowiki}} or {{filepath|300px}}, {{filepath|200x300px}},
+ * {{filepath|nowiki|200x300px}}, {{filepath|200x300px|nowiki}}.
+ *
+ * @param Parser $parser
+ * @param string $name
+ * @param string $argA
+ * @param string $argB
+ * @return array|string
+ */
public static function filepath( $parser, $name = '', $argA = '', $argB = '' ) {
$file = wfFindFile( $name );
@@ -943,7 +942,7 @@ class CoreParserFunctions {
* Parser function to extension tag adaptor
* @param Parser $parser
* @param PPFrame $frame
- * @param array $args
+ * @param PPNode[] $args
* @return string
*/
public static function tagObj( $parser, $frame, $args ) {
@@ -958,13 +957,6 @@ class CoreParserFunctions {
$inner = null;
}
- $stripList = $parser->getStripList();
- if ( !in_array( $tagName, $stripList ) ) {
- return '<span class="error">' .
- wfMessage( 'unknown_extension_tag', $tagName )->inContentLanguage()->text() .
- '</span>';
- }
-
$attributes = array();
foreach ( $args as $arg ) {
$bits = $arg->splitArg();
@@ -978,6 +970,19 @@ class CoreParserFunctions {
}
}
+ $stripList = $parser->getStripList();
+ if ( !in_array( $tagName, $stripList ) ) {
+ // we can't handle this tag (at least not now), so just re-emit it as an ordinary tag
+ $attrText = '';
+ foreach ( $attributes as $name => $value ) {
+ $attrText .= ' ' . htmlspecialchars( $name ) . '="' . htmlspecialchars( $value ) . '"';
+ }
+ if ( $inner === null ) {
+ return "<$tagName$attrText/>";
+ }
+ return "<$tagName$attrText>$inner</$tagName>";
+ }
+
$params = array(
'name' => $tagName,
'inner' => $inner,
@@ -1000,11 +1005,6 @@ class CoreParserFunctions {
* @since 1.23
*/
private static function getCachedRevisionObject( $parser, $title = null ) {
- static $cache = null;
- if ( $cache == null ) {
- $cache = new MapCacheLRU( 50 );
- }
-
if ( is_null( $title ) ) {
return null;
}
@@ -1024,22 +1024,18 @@ class CoreParserFunctions {
// Normalize name for cache
$page = $title->getPrefixedDBkey();
- if ( $cache->has( $page ) ) { // cache contains null values
- return $cache->get( $page );
+ if ( !( $parser->currentRevisionCache && $parser->currentRevisionCache->has( $page ) )
+ && !$parser->incrementExpensiveFunctionCount() ) {
+ return null;
}
- if ( $parser->incrementExpensiveFunctionCount() ) {
- $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
- $pageID = $rev ? $rev->getPage() : 0;
- $revID = $rev ? $rev->getId() : 0;
- $cache->set( $page, $rev ); // maybe null
+ $rev = $parser->fetchCurrentRevisionOfTitle( $title );
+ $pageID = $rev ? $rev->getPage() : 0;
+ $revID = $rev ? $rev->getId() : 0;
- // Register dependency in templatelinks
- $parser->getOutput()->addTemplate( $title, $pageID, $revID );
+ // Register dependency in templatelinks
+ $parser->getOutput()->addTemplate( $title, $pageID, $revID );
- return $rev;
- }
- $cache->set( $page, null );
- return null;
+ return $rev;
}
/**
diff --git a/includes/parser/CoreTagHooks.php b/includes/parser/CoreTagHooks.php
index 85920cc1..9755ea93 100644
--- a/includes/parser/CoreTagHooks.php
+++ b/includes/parser/CoreTagHooks.php
@@ -35,6 +35,7 @@ class CoreTagHooks {
$parser->setHook( 'pre', array( __CLASS__, 'pre' ) );
$parser->setHook( 'nowiki', array( __CLASS__, 'nowiki' ) );
$parser->setHook( 'gallery', array( __CLASS__, 'gallery' ) );
+ $parser->setHook( 'indicator', array( __CLASS__, 'indicator' ) );
if ( $wgRawHtml ) {
$parser->setHook( 'html', array( __CLASS__, 'html' ) );
}
@@ -119,4 +120,30 @@ class CoreTagHooks {
public static function gallery( $content, $attributes, $parser ) {
return $parser->renderImageGallery( $content, $attributes );
}
+
+ /**
+ * XML-style tag for page status indicators: icons (or short text snippets) usually displayed in
+ * the top-right corner of the page, outside of the main content.
+ *
+ * @param string $content
+ * @param array $attributes
+ * @param Parser $parser
+ * @param PPFrame $frame
+ * @return string
+ * @since 1.25
+ */
+ public static function indicator( $content, array $attributes, Parser $parser, PPFrame $frame ) {
+ if ( !isset( $attributes['name'] ) || trim( $attributes['name'] ) === '' ) {
+ return '<span class="error">' .
+ wfMessage( 'invalid-indicator-name' )->inContentLanguage()->parse() .
+ '</span>';
+ }
+
+ $parser->getOutput()->setIndicator(
+ trim( $attributes['name'] ),
+ Parser::stripOuterParagraph( $parser->recursiveTagParseFully( $content, $frame ) )
+ );
+
+ return '';
+ }
}
diff --git a/includes/parser/DateFormatter.php b/includes/parser/DateFormatter.php
index 82f0e9d4..ef295ab2 100644
--- a/includes/parser/DateFormatter.php
+++ b/includes/parser/DateFormatter.php
@@ -33,7 +33,7 @@ class DateFormatter {
public $regexes, $pDays, $pMonths, $pYears;
public $rules, $xMonths, $preferences;
- protected $lang;
+ protected $lang, $mLinked;
const ALL = -1;
const NONE = 0;
@@ -315,8 +315,8 @@ class DateFormatter {
}
/**
- * @todo document
- * @return string
+ * Return a regex that can be used to find month names in string
+ * @return string regex to find the months with
*/
public function getMonthRegex() {
$names = array();
@@ -338,7 +338,7 @@ class DateFormatter {
}
/**
- * @todo document
+ * Make an ISO year from a year name, for instance: '-1199' from '1200 BC'
* @param string $year Year name
* @return string ISO year name
*/
@@ -356,9 +356,10 @@ class DateFormatter {
}
/**
- * @todo document
- * @param string $iso
- * @return int|string
+ * Make a year one from an ISO year, for instance: '400 BC' from '-0399'.
+ * @param string $iso ISO year
+ * @return int|string int representing year number in case of AD dates, or string containing
+ * year number and 'BC' at the end otherwise.
*/
public function makeNormalYear( $iso ) {
if ( $iso[0] == '-' ) {
diff --git a/includes/parser/LinkHolderArray.php b/includes/parser/LinkHolderArray.php
index 7794fae4..7026c5ce 100644
--- a/includes/parser/LinkHolderArray.php
+++ b/includes/parser/LinkHolderArray.php
@@ -229,7 +229,6 @@ class LinkHolderArray {
* @return string
*/
public function makeHolder( $nt, $text = '', $query = array(), $trail = '', $prefix = '' ) {
- wfProfileIn( __METHOD__ );
if ( !is_object( $nt ) ) {
# Fail gracefully
$retVal = "<!-- ERROR -->{$prefix}{$text}{$trail}";
@@ -259,7 +258,6 @@ class LinkHolderArray {
}
$this->size++;
}
- wfProfileOut( __METHOD__ );
return $retVal;
}
@@ -267,17 +265,12 @@ class LinkHolderArray {
* Replace <!--LINK--> link placeholders with actual links, in the buffer
*
* @param string $text
- * @return array Array of link CSS classes, indexed by PDBK.
*/
public function replace( &$text ) {
- wfProfileIn( __METHOD__ );
- /** @todo FIXME: replaceInternal doesn't return a value */
- $colours = $this->replaceInternal( $text );
+ $this->replaceInternal( $text );
$this->replaceInterwiki( $text );
- wfProfileOut( __METHOD__ );
- return $colours;
}
/**
@@ -289,14 +282,12 @@ class LinkHolderArray {
return;
}
- wfProfileIn( __METHOD__ );
global $wgContLang, $wgContentHandlerUseDB;
$colours = array();
$linkCache = LinkCache::singleton();
$output = $this->parent->getOutput();
- wfProfileIn( __METHOD__ . '-check' );
$dbr = wfGetDB( DB_SLAVE );
$threshold = $this->parent->getOptions()->getStubThreshold();
@@ -380,9 +371,8 @@ class LinkHolderArray {
}
if ( count( $linkcolour_ids ) ) {
//pass an array of page_ids to an extension
- wfRunHooks( 'GetLinkColours', array( $linkcolour_ids, &$colours ) );
+ Hooks::run( 'GetLinkColours', array( $linkcolour_ids, &$colours ) );
}
- wfProfileOut( __METHOD__ . '-check' );
# Do a second query for different language variants of links and categories
if ( $wgContLang->hasVariants() ) {
@@ -390,7 +380,6 @@ class LinkHolderArray {
}
# Construct search and replace arrays
- wfProfileIn( __METHOD__ . '-construct' );
$replacePairs = array();
foreach ( $this->internals as $ns => $entries ) {
foreach ( $entries as $index => $entry ) {
@@ -426,18 +415,14 @@ class LinkHolderArray {
}
}
$replacer = new HashtableReplacer( $replacePairs, 1 );
- wfProfileOut( __METHOD__ . '-construct' );
# Do the thing
- wfProfileIn( __METHOD__ . '-replace' );
$text = preg_replace_callback(
'/(<!--LINK .*?-->)/',
$replacer->cb(),
$text
);
- wfProfileOut( __METHOD__ . '-replace' );
- wfProfileOut( __METHOD__ );
}
/**
@@ -449,7 +434,6 @@ class LinkHolderArray {
return;
}
- wfProfileIn( __METHOD__ );
# Make interwiki link HTML
$output = $this->parent->getOutput();
$replacePairs = array();
@@ -463,7 +447,6 @@ class LinkHolderArray {
'/<!--IWLINK (.*?)-->/',
$replacer->cb(),
$text );
- wfProfileOut( __METHOD__ );
}
/**
@@ -617,7 +600,7 @@ class LinkHolderArray {
}
}
}
- wfRunHooks( 'GetLinkColours', array( $linkcolour_ids, &$colours ) );
+ Hooks::run( 'GetLinkColours', array( $linkcolour_ids, &$colours ) );
// rebuild the categories in original order (if there are replacements)
if ( count( $varCategories ) > 0 ) {
@@ -644,14 +627,12 @@ class LinkHolderArray {
* @return string
*/
public function replaceText( $text ) {
- wfProfileIn( __METHOD__ );
$text = preg_replace_callback(
'/<!--(LINK|IWLINK) (.*?)-->/',
array( &$this, 'replaceTextCallback' ),
$text );
- wfProfileOut( __METHOD__ );
return $text;
}
diff --git a/includes/parser/MWTidy.php b/includes/parser/MWTidy.php
index b310862f..d446ccf6 100644
--- a/includes/parser/MWTidy.php
+++ b/includes/parser/MWTidy.php
@@ -127,17 +127,11 @@ class MWTidy {
* @return string Corrected HTML output
*/
public static function tidy( $text ) {
- global $wgTidyInternal;
-
$wrapper = new MWTidyWrapper;
$wrappedtext = $wrapper->getWrapped( $text );
$retVal = null;
- if ( $wgTidyInternal ) {
- $correctedtext = self::execInternalTidy( $wrappedtext, false, $retVal );
- } else {
- $correctedtext = self::execExternalTidy( $wrappedtext, false, $retVal );
- }
+ $correctedtext = self::clean( $wrappedtext, false, $retVal );
if ( $retVal < 0 ) {
wfDebug( "Possible tidy configuration error!\n" );
@@ -160,16 +154,34 @@ class MWTidy {
* @return bool Whether the HTML is valid
*/
public static function checkErrors( $text, &$errorStr = null ) {
+ $retval = 0;
+ $errorStr = self::clean( $text, true, $retval );
+ return ( $retval < 0 && $errorStr == '' ) || $retval == 0;
+ }
+
+ /**
+ * Perform a clean/repair operation
+ * @param string $text HTML to check
+ * @param bool $stderr Whether to read result from STDERR rather than STDOUT
+ * @param int &$retval Exit code (-1 on internal error)
+ * @return null|string
+ * @throws MWException
+ */
+ private static function clean( $text, $stderr = false, &$retval = null ) {
global $wgTidyInternal;
- $retval = 0;
if ( $wgTidyInternal ) {
- $errorStr = self::execInternalTidy( $text, true, $retval );
+ if ( wfIsHHVM() ) {
+ if ( $stderr ) {
+ throw new MWException( __METHOD__ . ": error text return from HHVM tidy is not supported" );
+ }
+ return self::hhvmClean( $text, $retval );
+ } else {
+ return self::phpClean( $text, $stderr, $retval );
+ }
} else {
- $errorStr = self::execExternalTidy( $text, true, $retval );
+ return self::externalClean( $text, $stderr, $retval );
}
-
- return ( $retval < 0 && $errorStr == '' ) || $retval == 0;
}
/**
@@ -181,9 +193,8 @@ class MWTidy {
* @param int &$retval Exit code (-1 on internal error)
* @return string|null
*/
- private static function execExternalTidy( $text, $stderr = false, &$retval = null ) {
+ private static function externalClean( $text, $stderr = false, &$retval = null ) {
global $wgTidyConf, $wgTidyBin, $wgTidyOpts;
- wfProfileIn( __METHOD__ );
$cleansource = '';
$opts = ' -utf8';
@@ -235,7 +246,6 @@ class MWTidy {
$cleansource = null;
}
- wfProfileOut( __METHOD__ );
return $cleansource;
}
@@ -248,15 +258,15 @@ class MWTidy {
* @param int &$retval Exit code (-1 on internal error)
* @return string|null
*/
- private static function execInternalTidy( $text, $stderr = false, &$retval = null ) {
+ private static function phpClean( $text, $stderr = false, &$retval = null ) {
global $wgTidyConf, $wgDebugTidy;
- wfProfileIn( __METHOD__ );
- if ( !class_exists( 'tidy' ) ) {
+ if ( ( !wfIsHHVM() && !class_exists( 'tidy' ) ) ||
+ ( wfIsHHVM() && !function_exists( 'tidy_repair_string' ) )
+ ) {
wfWarn( "Unable to load internal tidy class." );
$retval = -1;
- wfProfileOut( __METHOD__ );
return null;
}
@@ -265,8 +275,6 @@ class MWTidy {
if ( $stderr ) {
$retval = $tidy->getStatus();
-
- wfProfileOut( __METHOD__ );
return $tidy->errorBuffer;
}
@@ -285,7 +293,31 @@ class MWTidy {
}
}
- wfProfileOut( __METHOD__ );
+ return $cleansource;
+ }
+
+ /**
+ * Use the tidy extension for HHVM from
+ * https://github.com/wikimedia/mediawiki-php-tidy
+ *
+ * This currently does not support the object-oriented interface, but
+ * tidy_repair_string() can be used for the most common tasks.
+ *
+ * @param string $text HTML to check
+ * @param int &$retval Exit code (-1 on internal error)
+ * @return string|null
+ */
+ private static function hhvmClean( $text, &$retval ) {
+ global $wgTidyConf;
+
+ $cleansource = tidy_repair_string( $text, $wgTidyConf, 'utf8' );
+ if ( $cleansource === false ) {
+ $cleansource = null;
+ $retval = -1;
+ } else {
+ $retval = 0;
+ }
+
return $cleansource;
}
}
diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php
index 84bb2243..ace63a09 100644
--- a/includes/parser/Parser.php
+++ b/includes/parser/Parser.php
@@ -35,18 +35,18 @@
*
* - Parser::parse()
* produces HTML output
- * - Parser::preSaveTransform().
- * produces altered wiki markup.
+ * - Parser::preSaveTransform()
+ * produces altered wiki markup
* - Parser::preprocess()
* removes HTML comments and expands templates
* - Parser::cleanSig() and Parser::cleanSigInSig()
- * Cleans a signature before saving it to preferences
+ * cleans a signature before saving it to preferences
* - Parser::getSection()
- * Return the content of a section from an article for section editing
+ * return the content of a section from an article for section editing
* - Parser::replaceSection()
- * Replaces a section by number inside an article
+ * replaces a section by number inside an article
* - Parser::getPreloadText()
- * Removes <noinclude> sections, and <includeonly> tags.
+ * removes <noinclude> sections and <includeonly> tags
*
* Globals used:
* object: $wgContLang
@@ -79,7 +79,6 @@ class Parser {
const HALF_PARSED_VERSION = 2;
# Flags for Parser::setFunctionHook
- # Also available as global constants from Defines.php
const SFH_NO_HASH = 1;
const SFH_OBJECT_ARGS = 2;
@@ -91,6 +90,9 @@ class Parser {
const EXT_IMAGE_REGEX = '/^(http:\/\/|https:\/\/)([^][<>"\\x00-\\x20\\x7F\p{Zs}]+)
\\/([A-Za-z0-9_.,~%\\-+&;#*?!=()@\\x80-\\xFF]+)\\.((?i)gif|png|jpg|jpeg)$/Sxu';
+ # Regular expression for a non-newline space
+ const SPACE_NOT_NL = '(?:\t|&nbsp;|&\#0*160;|&\#[Xx]0*[Aa]0;|\p{Zs})';
+
# State constants for the definition list colon extraction
const COLON_STATE_TEXT = 0;
const COLON_STATE_TAG = 1;
@@ -144,7 +146,12 @@ class Parser {
* @var MagicWordArray
*/
public $mSubstWords;
- public $mConf, $mPreprocessor, $mExtLinkBracketedRegex, $mUrlProtocols; # Initialised in constructor
+ # Initialised in constructor
+ public $mConf, $mExtLinkBracketedRegex, $mUrlProtocols;
+
+ # Initialized in getPreprocessor()
+ /** @var Preprocessor */
+ public $mPreprocessor;
# Cleared with clearState():
/**
@@ -211,11 +218,22 @@ class Parser {
public $mLangLinkLanguages;
/**
+ * @var MapCacheLRU|null
+ * @since 1.24
+ *
+ * A cache of the current revisions of titles. Keys are $title->getPrefixedDbKey()
+ */
+ public $currentRevisionCache;
+
+ /**
* @var bool Recursive call protection.
* This variable should be treated as if it were private.
*/
public $mInParse = false;
+ /** @var SectionProfiler */
+ protected $mProfiler;
+
/**
* @param array $conf
*/
@@ -258,7 +276,22 @@ class Parser {
*/
public function __clone() {
$this->mInParse = false;
- wfRunHooks( 'ParserCloned', array( $this ) );
+
+ // Bug 56226: When you create a reference "to" an object field, that
+ // makes the object field itself be a reference too (until the other
+ // reference goes out of scope). When cloning, any field that's a
+ // reference is copied as a reference in the new object. Both of these
+ // are defined PHP5 behaviors, as inconvenient as it is for us when old
+ // hooks from PHP4 days are passing fields by reference.
+ foreach ( array( 'mStripState', 'mVarCache' ) as $k ) {
+ // Make a non-reference copy of the field, then rebind the field to
+ // reference the new copy.
+ $tmp = $this->$k;
+ $this->$k =& $tmp;
+ unset( $tmp );
+ }
+
+ Hooks::run( 'ParserCloned', array( $this ) );
}
/**
@@ -270,14 +303,11 @@ class Parser {
}
$this->mFirstCall = false;
- wfProfileIn( __METHOD__ );
-
CoreParserFunctions::register( $this );
CoreTagHooks::register( $this );
$this->initialiseVariables();
- wfRunHooks( 'ParserFirstCallInit', array( &$this ) );
- wfProfileOut( __METHOD__ );
+ Hooks::run( 'ParserFirstCallInit', array( &$this ) );
}
/**
@@ -286,7 +316,6 @@ class Parser {
* @private
*/
public function clearState() {
- wfProfileIn( __METHOD__ );
if ( $this->mFirstCall ) {
$this->firstCallInit();
}
@@ -305,6 +334,7 @@ class Parser {
$this->mVarCache = array();
$this->mUser = null;
$this->mLangLinkLanguages = array();
+ $this->currentRevisionCache = null;
/**
* Prefix for temporary replacement strings for the multipass parser.
@@ -341,8 +371,9 @@ class Parser {
$this->mPreprocessor = null;
}
- wfRunHooks( 'ParserClearState', array( &$this ) );
- wfProfileOut( __METHOD__ );
+ $this->mProfiler = new SectionProfiler();
+
+ Hooks::run( 'ParserClearState', array( &$this ) );
}
/**
@@ -365,10 +396,7 @@ class Parser {
* to internalParse() which does all the real work.
*/
- global $wgUseTidy, $wgAlwaysUseTidy, $wgShowHostnames;
- $fname = __METHOD__ . '-' . wfGetCaller();
- wfProfileIn( __METHOD__ );
- wfProfileIn( $fname );
+ global $wgShowHostnames;
if ( $clearState ) {
$magicScopeVariable = $this->lock();
@@ -376,6 +404,7 @@ class Parser {
$this->startParse( $title, $options, self::OT_HTML, $clearState );
+ $this->currentRevisionCache = null;
$this->mInputSize = strlen( $text );
if ( $this->mOptions->getEnableLimitReport() ) {
$this->mOutput->resetParseStartTime();
@@ -399,46 +428,13 @@ class Parser {
$this->mRevisionSize = null;
}
- wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
+ Hooks::run( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
# No more strip!
- wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
+ Hooks::run( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
$text = $this->internalParse( $text );
- wfRunHooks( 'ParserAfterParse', array( &$this, &$text, &$this->mStripState ) );
-
- $text = $this->mStripState->unstripGeneral( $text );
+ Hooks::run( 'ParserAfterParse', array( &$this, &$text, &$this->mStripState ) );
- # Clean up special characters, only run once, next-to-last before doBlockLevels
- $fixtags = array(
- # french spaces, last one Guillemet-left
- # only if there is something before the space
- '/(.) (?=\\?|:|;|!|%|\\302\\273)/' => '\\1&#160;',
- # french spaces, Guillemet-right
- '/(\\302\\253) /' => '\\1&#160;',
- '/&#160;(!\s*important)/' => ' \\1', # Beware of CSS magic word !important, bug #11874.
- );
- $text = preg_replace( array_keys( $fixtags ), array_values( $fixtags ), $text );
-
- $text = $this->doBlockLevels( $text, $linestart );
-
- $this->replaceLinkHolders( $text );
-
- /**
- * The input doesn't get language converted if
- * a) It's disabled
- * b) Content isn't converted
- * c) It's a conversion table
- * d) it is an interface message (which is in the user language)
- */
- if ( !( $options->getDisableContentConversion()
- || isset( $this->mDoubleUnderscores['nocontentconvert'] ) )
- ) {
- if ( !$this->mOptions->getInterfaceMessage() ) {
- # The position of the convert() call should not be changed. it
- # assumes that the links are all replaced and the only thing left
- # is the <nowiki> mark.
- $text = $this->getConverterLanguage()->convert( $text );
- }
- }
+ $text = $this->internalParseHalfParsed( $text, true, $linestart );
/**
* A converted title will be provided in the output object if title and
@@ -461,45 +457,6 @@ class Parser {
}
}
- $text = $this->mStripState->unstripNoWiki( $text );
-
- wfRunHooks( 'ParserBeforeTidy', array( &$this, &$text ) );
-
- $text = $this->replaceTransparentTags( $text );
- $text = $this->mStripState->unstripGeneral( $text );
-
- $text = Sanitizer::normalizeCharReferences( $text );
-
- if ( ( $wgUseTidy && $this->mOptions->getTidy() ) || $wgAlwaysUseTidy ) {
- $text = MWTidy::tidy( $text );
- } else {
- # attempt to sanitize at least some nesting problems
- # (bug #2702 and quite a few others)
- $tidyregs = array(
- # ''Something [http://www.cool.com cool''] -->
- # <i>Something</i><a href="http://www.cool.com"..><i>cool></i></a>
- '/(<([bi])>)(<([bi])>)?([^<]*)(<\/?a[^<]*>)([^<]*)(<\/\\4>)?(<\/\\2>)/' =>
- '\\1\\3\\5\\8\\9\\6\\1\\3\\7\\8\\9',
- # fix up an anchor inside another anchor, only
- # at least for a single single nested link (bug 3695)
- '/(<a[^>]+>)([^<]*)(<a[^>]+>[^<]*)<\/a>(.*)<\/a>/' =>
- '\\1\\2</a>\\3</a>\\1\\4</a>',
- # fix div inside inline elements- doBlockLevels won't wrap a line which
- # contains a div, so fix it up here; replace
- # div with escaped text
- '/(<([aib]) [^>]+>)([^<]*)(<div([^>]*)>)(.*)(<\/div>)([^<]*)(<\/\\2>)/' =>
- '\\1\\3&lt;div\\5&gt;\\6&lt;/div&gt;\\8\\9',
- # remove empty italic or bold tag pairs, some
- # introduced by rules above
- '/<([bi])><\/\\1>/' => '',
- );
-
- $text = preg_replace(
- array_keys( $tidyregs ),
- array_values( $tidyregs ),
- $text );
- }
-
if ( $this->mExpensiveFunctionCount > $this->mOptions->getExpensiveParserFunctionLimit() ) {
$this->limitationWarn( 'expensive-parserfunction',
$this->mExpensiveFunctionCount,
@@ -507,8 +464,6 @@ class Parser {
);
}
- wfRunHooks( 'ParserAfterTidy', array( &$this, &$text ) );
-
# Information on include size limits, for the benefit of users who try to skirt them
if ( $this->mOptions->getEnableLimitReport() ) {
$max = $this->mOptions->getMaxIncludeSize();
@@ -543,14 +498,14 @@ class Parser {
$this->mOutput->setLimitReportData( 'limitreport-expensivefunctioncount',
array( $this->mExpensiveFunctionCount, $this->mOptions->getExpensiveParserFunctionLimit() )
);
- wfRunHooks( 'ParserLimitReportPrepare', array( $this, $this->mOutput ) );
+ Hooks::run( 'ParserLimitReportPrepare', array( $this, $this->mOutput ) );
$limitReport = "NewPP limit report\n";
if ( $wgShowHostnames ) {
$limitReport .= 'Parsed by ' . wfHostname() . "\n";
}
foreach ( $this->mOutput->getLimitReportData() as $key => $value ) {
- if ( wfRunHooks( 'ParserLimitReportFormat',
+ if ( Hooks::run( 'ParserLimitReportFormat',
array( $key, &$value, &$limitReport, false, false )
) ) {
$keyMsg = wfMessage( $key )->inLanguage( 'en' )->useDatabase( false );
@@ -568,13 +523,26 @@ class Parser {
// Since we're not really outputting HTML, decode the entities and
// then re-encode the things that need hiding inside HTML comments.
$limitReport = htmlspecialchars_decode( $limitReport );
- wfRunHooks( 'ParserLimitReport', array( $this, &$limitReport ) );
+ Hooks::run( 'ParserLimitReport', array( $this, &$limitReport ) );
// Sanitize for comment. Note '‐' in the replacement is U+2010,
// which looks much like the problematic '-'.
$limitReport = str_replace( array( '-', '&' ), array( '‐', '&amp;' ), $limitReport );
$text .= "\n<!-- \n$limitReport-->\n";
+ // Add on template profiling data
+ $dataByFunc = $this->mProfiler->getFunctionStats();
+ uasort( $dataByFunc, function ( $a, $b ) {
+ return $a['real'] < $b['real']; // descending order
+ } );
+ $profileReport = "Transclusion expansion time report (%,ms,calls,template)\n";
+ foreach ( array_slice( $dataByFunc, 0, 10 ) as $item ) {
+ $profileReport .= sprintf( "%6.2f%% %8.3f %6d - %s\n",
+ $item['%real'], $item['real'], $item['calls'],
+ htmlspecialchars( $item['name'] ) );
+ }
+ $text .= "\n<!-- \n$profileReport-->\n";
+
if ( $this->mGeneratedPPNodeCount > $this->mOptions->getMaxGeneratedPPNodeCount() / 10 ) {
wfDebugLog( 'generated-pp-node-count', $this->mGeneratedPPNodeCount . ' ' .
$this->mTitle->getPrefixedDBkey() );
@@ -588,29 +556,60 @@ class Parser {
$this->mRevisionUser = $oldRevisionUser;
$this->mRevisionSize = $oldRevisionSize;
$this->mInputSize = false;
- wfProfileOut( $fname );
- wfProfileOut( __METHOD__ );
+ $this->currentRevisionCache = null;
return $this->mOutput;
}
/**
- * Recursive parser entry point that can be called from an extension tag
- * hook.
+ * Half-parse wikitext to half-parsed HTML. This recursive parser entry point
+ * can be called from an extension tag hook.
+ *
+ * The output of this function IS NOT SAFE PARSED HTML; it is "half-parsed"
+ * instead, which means that lists and links have not been fully parsed yet,
+ * and strip markers are still present.
*
- * If $frame is not provided, then template variables (e.g., {{{1}}}) within $text are not expanded
+ * Use recursiveTagParseFully() to fully parse wikitext to output-safe HTML.
+ *
+ * Use this function if you're a parser tag hook and you want to parse
+ * wikitext before or after applying additional transformations, and you
+ * intend to *return the result as hook output*, which will cause it to go
+ * through the rest of parsing process automatically.
+ *
+ * If $frame is not provided, then template variables (e.g., {{{1}}}) within
+ * $text are not expanded
*
* @param string $text Text extension wants to have parsed
* @param bool|PPFrame $frame The frame to use for expanding any template variables
- *
- * @return string
+ * @return string UNSAFE half-parsed HTML
*/
public function recursiveTagParse( $text, $frame = false ) {
- wfProfileIn( __METHOD__ );
- wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
- wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
+ Hooks::run( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
+ Hooks::run( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
$text = $this->internalParse( $text, false, $frame );
- wfProfileOut( __METHOD__ );
+ return $text;
+ }
+
+ /**
+ * Fully parse wikitext to fully parsed HTML. This recursive parser entry
+ * point can be called from an extension tag hook.
+ *
+ * The output of this function is fully-parsed HTML that is safe for output.
+ * If you're a parser tag hook, you might want to use recursiveTagParse()
+ * instead.
+ *
+ * If $frame is not provided, then template variables (e.g., {{{1}}}) within
+ * $text are not expanded
+ *
+ * @since 1.25
+ *
+ * @param string $text Text extension wants to have parsed
+ * @param bool|PPFrame $frame The frame to use for expanding any template variables
+ * @return string Fully parsed HTML
+ */
+ public function recursiveTagParseFully( $text, $frame = false ) {
+ $text = $this->recursiveTagParse( $text, $frame );
+ $text = $this->internalParseHalfParsed( $text, false );
return $text;
}
@@ -625,18 +624,18 @@ class Parser {
* @param bool|PPFrame $frame
* @return mixed|string
*/
- public function preprocess( $text, Title $title = null, ParserOptions $options, $revid = null, $frame = false ) {
- wfProfileIn( __METHOD__ );
+ public function preprocess( $text, Title $title = null,
+ ParserOptions $options, $revid = null, $frame = false
+ ) {
$magicScopeVariable = $this->lock();
$this->startParse( $title, $options, self::OT_PREPROCESS, true );
if ( $revid !== null ) {
$this->mRevisionId = $revid;
}
- wfRunHooks( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
- wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
+ Hooks::run( 'ParserBeforeStrip', array( &$this, &$text, &$this->mStripState ) );
+ Hooks::run( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
$text = $this->replaceVariables( $text, $frame );
$text = $this->mStripState->unstripBoth( $text );
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -650,10 +649,8 @@ class Parser {
* @since 1.19
*/
public function recursivePreprocess( $text, $frame = false ) {
- wfProfileIn( __METHOD__ );
$text = $this->replaceVariables( $text, $frame );
$text = $this->mStripState->unstripBoth( $text );
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -1008,7 +1005,6 @@ class Parser {
* @return string
*/
public function doTableStuff( $text ) {
- wfProfileIn( __METHOD__ );
$lines = StringUtils::explode( "\n", $text );
$out = '';
@@ -1195,31 +1191,27 @@ class Parser {
$out = '';
}
- wfProfileOut( __METHOD__ );
-
return $out;
}
/**
- * Helper function for parse() that transforms wiki markup into
+ * Helper function for parse() that transforms wiki markup into half-parsed
* HTML. Only called for $mOutputType == self::OT_HTML.
*
* @private
*
* @param string $text
* @param bool $isMain
- * @param bool $frame
+ * @param PPFrame|bool $frame
*
* @return string
*/
public function internalParse( $text, $isMain = true, $frame = false ) {
- wfProfileIn( __METHOD__ );
$origText = $text;
# Hook to suspend the parser in this state
- if ( !wfRunHooks( 'ParserBeforeInternalParse', array( &$this, &$text, &$this->mStripState ) ) ) {
- wfProfileOut( __METHOD__ );
+ if ( !Hooks::run( 'ParserBeforeInternalParse', array( &$this, &$text, &$this->mStripState ) ) ) {
return $text;
}
@@ -1239,14 +1231,14 @@ class Parser {
$text = $this->replaceVariables( $text );
}
- wfRunHooks( 'InternalParseBeforeSanitize', array( &$this, &$text, &$this->mStripState ) );
+ Hooks::run( 'InternalParseBeforeSanitize', array( &$this, &$text, &$this->mStripState ) );
$text = Sanitizer::removeHTMLtags(
$text,
array( &$this, 'attributeStripCallback' ),
false,
array_keys( $this->mTransparentTagHooks )
);
- wfRunHooks( 'InternalParseBeforeLinks', array( &$this, &$text, &$this->mStripState ) );
+ Hooks::run( 'InternalParseBeforeLinks', array( &$this, &$text, &$this->mStripState ) );
# Tables need to come after variable replacement for things to work
# properly; putting them before other transformations should keep
@@ -1270,7 +1262,101 @@ class Parser {
$text = $this->doMagicLinks( $text );
$text = $this->formatHeadings( $text, $origText, $isMain );
- wfProfileOut( __METHOD__ );
+ return $text;
+ }
+
+ /**
+ * Helper function for parse() that transforms half-parsed HTML into fully
+ * parsed HTML.
+ *
+ * @param string $text
+ * @param bool $isMain
+ * @param bool $linestart
+ * @return string
+ */
+ private function internalParseHalfParsed( $text, $isMain = true, $linestart = true ) {
+ global $wgUseTidy, $wgAlwaysUseTidy;
+
+ $text = $this->mStripState->unstripGeneral( $text );
+
+ # Clean up special characters, only run once, next-to-last before doBlockLevels
+ $fixtags = array(
+ # french spaces, last one Guillemet-left
+ # only if there is something before the space
+ '/(.) (?=\\?|:|;|!|%|\\302\\273)/' => '\\1&#160;',
+ # french spaces, Guillemet-right
+ '/(\\302\\253) /' => '\\1&#160;',
+ '/&#160;(!\s*important)/' => ' \\1', # Beware of CSS magic word !important, bug #11874.
+ );
+ $text = preg_replace( array_keys( $fixtags ), array_values( $fixtags ), $text );
+
+ $text = $this->doBlockLevels( $text, $linestart );
+
+ $this->replaceLinkHolders( $text );
+
+ /**
+ * The input doesn't get language converted if
+ * a) It's disabled
+ * b) Content isn't converted
+ * c) It's a conversion table
+ * d) it is an interface message (which is in the user language)
+ */
+ if ( !( $this->mOptions->getDisableContentConversion()
+ || isset( $this->mDoubleUnderscores['nocontentconvert'] ) )
+ ) {
+ if ( !$this->mOptions->getInterfaceMessage() ) {
+ # The position of the convert() call should not be changed. it
+ # assumes that the links are all replaced and the only thing left
+ # is the <nowiki> mark.
+ $text = $this->getConverterLanguage()->convert( $text );
+ }
+ }
+
+ $text = $this->mStripState->unstripNoWiki( $text );
+
+ if ( $isMain ) {
+ Hooks::run( 'ParserBeforeTidy', array( &$this, &$text ) );
+ }
+
+ $text = $this->replaceTransparentTags( $text );
+ $text = $this->mStripState->unstripGeneral( $text );
+
+ $text = Sanitizer::normalizeCharReferences( $text );
+
+ if ( ( $wgUseTidy && $this->mOptions->getTidy() ) || $wgAlwaysUseTidy ) {
+ $text = MWTidy::tidy( $text );
+ } else {
+ # attempt to sanitize at least some nesting problems
+ # (bug #2702 and quite a few others)
+ $tidyregs = array(
+ # ''Something [http://www.cool.com cool''] -->
+ # <i>Something</i><a href="http://www.cool.com"..><i>cool></i></a>
+ '/(<([bi])>)(<([bi])>)?([^<]*)(<\/?a[^<]*>)([^<]*)(<\/\\4>)?(<\/\\2>)/' =>
+ '\\1\\3\\5\\8\\9\\6\\1\\3\\7\\8\\9',
+ # fix up an anchor inside another anchor, only
+ # at least for a single single nested link (bug 3695)
+ '/(<a[^>]+>)([^<]*)(<a[^>]+>[^<]*)<\/a>(.*)<\/a>/' =>
+ '\\1\\2</a>\\3</a>\\1\\4</a>',
+ # fix div inside inline elements- doBlockLevels won't wrap a line which
+ # contains a div, so fix it up here; replace
+ # div with escaped text
+ '/(<([aib]) [^>]+>)([^<]*)(<div([^>]*)>)(.*)(<\/div>)([^<]*)(<\/\\2>)/' =>
+ '\\1\\3&lt;div\\5&gt;\\6&lt;/div&gt;\\8\\9',
+ # remove empty italic or bold tag pairs, some
+ # introduced by rules above
+ '/<([bi])><\/\\1>/' => '',
+ );
+
+ $text = preg_replace(
+ array_keys( $tidyregs ),
+ array_values( $tidyregs ),
+ $text );
+ }
+
+ if ( $isMain ) {
+ Hooks::run( 'ParserAfterTidy', array( &$this, &$text ) );
+ }
+
return $text;
}
@@ -1286,22 +1372,24 @@ class Parser {
* @return string
*/
public function doMagicLinks( $text ) {
- wfProfileIn( __METHOD__ );
$prots = wfUrlProtocolsWithoutProtRel();
$urlChar = self::EXT_LINK_URL_CLASS;
+ $space = self::SPACE_NOT_NL; # non-newline space
+ $spdash = "(?:-|$space)"; # a dash or a non-newline space
+ $spaces = "$space++"; # possessive match of 1 or more spaces
$text = preg_replace_callback(
'!(?: # Start cases
(<a[ \t\r\n>].*?</a>) | # m[1]: Skip link text
(<.*?>) | # m[2]: Skip stuff inside HTML elements' . "
- (\\b(?i:$prots)$urlChar+) | # m[3]: Free external links" . '
- (?:RFC|PMID)\s+([0-9]+) | # m[4]: RFC or PMID, capture number
- ISBN\s+(\b # m[5]: ISBN, capture number
- (?: 97[89] [\ \-]? )? # optional 13-digit ISBN prefix
- (?: [0-9] [\ \-]? ){9} # 9 digits with opt. delimiters
+ (\b(?i:$prots)$urlChar+) | # m[3]: Free external links
+ \b(?:RFC|PMID) $spaces # m[4]: RFC or PMID, capture number
+ ([0-9]+)\b |
+ \bISBN $spaces ( # m[5]: ISBN, capture number
+ (?: 97[89] $spdash? )? # optional 13-digit ISBN prefix
+ (?: [0-9] $spdash? ){9} # 9 digits with opt. delimiters
[0-9Xx] # check digit
- \b)
- )!xu', array( &$this, 'magicLinkCallback' ), $text );
- wfProfileOut( __METHOD__ );
+ )\b
+ )!xu", array( &$this, 'magicLinkCallback' ), $text );
return $text;
}
@@ -1341,6 +1429,8 @@ class Parser {
} elseif ( isset( $m[5] ) && $m[5] !== '' ) {
# ISBN
$isbn = $m[5];
+ $space = self::SPACE_NOT_NL; # non-newline space
+ $isbn = preg_replace( "/$space/", ' ', $isbn );
$num = strtr( $isbn, array(
'-' => '',
' ' => '',
@@ -1364,7 +1454,6 @@ class Parser {
* @private
*/
public function makeFreeExternalLink( $url ) {
- wfProfileIn( __METHOD__ );
$trail = '';
@@ -1384,7 +1473,20 @@ class Parser {
$sep .= ')';
}
- $numSepChars = strspn( strrev( $url ), $sep );
+ $urlRev = strrev( $url );
+ $numSepChars = strspn( $urlRev, $sep );
+ # Don't break a trailing HTML entity by moving the ; into $trail
+ # This is in hot code, so use substr_compare to avoid having to
+ # create a new string object for the comparison
+ if ( $numSepChars && substr_compare( $url, ";", -$numSepChars, 1 ) === 0) {
+ # more optimization: instead of running preg_match with a $
+ # anchor, which can be slow, do the match on the reversed
+ # string starting at the desired offset.
+ # un-reversed regexp is: /&([a-z]+|#x[\da-f]+|#\d+)$/i
+ if ( preg_match( '/\G([a-z]+|[\da-f]+x#|\d+#)&/i', $urlRev, $m2, 0, $numSepChars ) ) {
+ $numSepChars--;
+ }
+ }
if ( $numSepChars ) {
$trail = substr( $url, -$numSepChars ) . $trail;
$url = substr( $url, 0, -$numSepChars );
@@ -1405,7 +1507,6 @@ class Parser {
$pasteurized = self::normalizeLinkUrl( $url );
$this->mOutput->addExternalLink( $pasteurized );
}
- wfProfileOut( __METHOD__ );
return $text . $trail;
}
@@ -1419,12 +1520,10 @@ class Parser {
* @return string
*/
public function doHeadings( $text ) {
- wfProfileIn( __METHOD__ );
for ( $i = 6; $i >= 1; --$i ) {
$h = str_repeat( '=', $i );
$text = preg_replace( "/^$h(.+)$h\\s*$/m", "<h$i>\\1</h$i>", $text );
}
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -1437,14 +1536,12 @@ class Parser {
* @return string The altered text
*/
public function doAllQuotes( $text ) {
- wfProfileIn( __METHOD__ );
$outtext = '';
$lines = StringUtils::explode( "\n", $text );
foreach ( $lines as $line ) {
$outtext .= $this->doQuotes( $line ) . "\n";
}
$outtext = substr( $outtext, 0, -1 );
- wfProfileOut( __METHOD__ );
return $outtext;
}
@@ -1646,11 +1743,9 @@ class Parser {
* @return string
*/
public function replaceExternalLinks( $text ) {
- wfProfileIn( __METHOD__ );
$bits = preg_split( $this->mExtLinkBracketedRegex, $text, -1, PREG_SPLIT_DELIM_CAPTURE );
if ( $bits === false ) {
- wfProfileOut( __METHOD__ );
throw new MWException( "PCRE needs to be compiled with "
. "--enable-unicode-properties in order for MediaWiki to function" );
}
@@ -1714,7 +1809,6 @@ class Parser {
$this->mOutput->addExternalLink( $pasteurized );
}
- wfProfileOut( __METHOD__ );
return $s;
}
@@ -1912,9 +2006,7 @@ class Parser {
*/
public function replaceInternalLinks2( &$s ) {
global $wgExtraInterlanguageLinkPrefixes;
- wfProfileIn( __METHOD__ );
- wfProfileIn( __METHOD__ . '-setup' );
static $tc = false, $e1, $e1_img;
# the % is needed to support urlencoded titles as well
if ( !$tc ) {
@@ -1946,8 +2038,6 @@ class Parser {
}
if ( is_null( $this->mTitle ) ) {
- wfProfileOut( __METHOD__ . '-setup' );
- wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . ": \$this->mTitle is null\n" );
}
$nottalk = !$this->mTitle->isTalkPage();
@@ -1964,7 +2054,6 @@ class Parser {
}
$useSubpages = $this->areSubpagesAllowed();
- wfProfileOut( __METHOD__ . '-setup' );
// @codingStandardsIgnoreStart Squiz.WhiteSpace.SemicolonSpacing.Incorrect
# Loop for each link
@@ -1980,7 +2069,6 @@ class Parser {
}
if ( $useLinkPrefixExtension ) {
- wfProfileIn( __METHOD__ . '-prefixhandling' );
if ( preg_match( $e2, $s, $m ) ) {
$prefix = $m[2];
$s = $m[1];
@@ -1992,12 +2080,10 @@ class Parser {
$prefix = $first_prefix;
$first_prefix = false;
}
- wfProfileOut( __METHOD__ . '-prefixhandling' );
}
$might_be_img = false;
- wfProfileIn( __METHOD__ . "-e1" );
if ( preg_match( $e1, $line, $m ) ) { # page with normal text or alt
$text = $m[2];
# If we get a ] at the beginning of $m[3] that means we have a link that's something like:
@@ -2031,11 +2117,8 @@ class Parser {
$trail = "";
} else { # Invalid form; output directly
$s .= $prefix . '[[' . $line;
- wfProfileOut( __METHOD__ . "-e1" );
continue;
}
- wfProfileOut( __METHOD__ . "-e1" );
- wfProfileIn( __METHOD__ . "-misc" );
$origLink = $m[1];
@@ -2044,7 +2127,6 @@ class Parser {
# should be external links.
if ( preg_match( '/^(?i:' . $this->mUrlProtocols . ')/', $origLink ) ) {
$s .= $prefix . '[[' . $line;
- wfProfileOut( __METHOD__ . "-misc" );
continue;
}
@@ -2061,21 +2143,16 @@ class Parser {
$link = substr( $link, 1 );
}
- wfProfileOut( __METHOD__ . "-misc" );
- wfProfileIn( __METHOD__ . "-title" );
$nt = Title::newFromText( $this->mStripState->unstripNoWiki( $link ) );
if ( $nt === null ) {
$s .= $prefix . '[[' . $line;
- wfProfileOut( __METHOD__ . "-title" );
continue;
}
$ns = $nt->getNamespace();
$iw = $nt->getInterwiki();
- wfProfileOut( __METHOD__ . "-title" );
if ( $might_be_img ) { # if this is actually an invalid link
- wfProfileIn( __METHOD__ . "-might_be_img" );
if ( $ns == NS_FILE && $noforce ) { # but might be an image
$found = false;
while ( true ) {
@@ -2107,16 +2184,13 @@ class Parser {
$holders->merge( $this->replaceInternalLinks2( $text ) );
$s .= "{$prefix}[[$link|$text";
# note: no $trail, because without an end, there *is* no trail
- wfProfileOut( __METHOD__ . "-might_be_img" );
continue;
}
} else { # it's not an image, so output it raw
$s .= "{$prefix}[[$link|$text";
# note: no $trail, because without an end, there *is* no trail
- wfProfileOut( __METHOD__ . "-might_be_img" );
continue;
}
- wfProfileOut( __METHOD__ . "-might_be_img" );
}
$wasblank = ( $text == '' );
@@ -2133,7 +2207,6 @@ class Parser {
# Link not escaped by : , create the various objects
if ( $noforce && !$nt->wasLocalInterwiki() ) {
# Interwikis
- wfProfileIn( __METHOD__ . "-interwiki" );
if (
$iw && $this->mOptions->getInterwikiMagic() && $nottalk && (
Language::fetchLanguageName( $iw, null, 'mw' ) ||
@@ -2148,13 +2221,10 @@ class Parser {
$s = rtrim( $s . $prefix );
$s .= trim( $trail, "\n" ) == '' ? '': $prefix . $trail;
- wfProfileOut( __METHOD__ . "-interwiki" );
continue;
}
- wfProfileOut( __METHOD__ . "-interwiki" );
if ( $ns == NS_FILE ) {
- wfProfileIn( __METHOD__ . "-image" );
if ( !wfIsBadImage( $nt->getDBkey(), $this->mTitle ) ) {
if ( $wasblank ) {
# if no parameters were passed, $text
@@ -2175,12 +2245,10 @@ class Parser {
} else {
$s .= $prefix . $trail;
}
- wfProfileOut( __METHOD__ . "-image" );
continue;
}
if ( $ns == NS_CATEGORY ) {
- wfProfileIn( __METHOD__ . "-category" );
$s = rtrim( $s . "\n" ); # bug 87
if ( $wasblank ) {
@@ -2198,7 +2266,6 @@ class Parser {
*/
$s .= trim( $prefix . $trail, "\n" ) == '' ? '' : $prefix . $trail;
- wfProfileOut( __METHOD__ . "-category" );
continue;
}
}
@@ -2214,22 +2281,19 @@ class Parser {
# NS_MEDIA is a pseudo-namespace for linking directly to a file
# @todo FIXME: Should do batch file existence checks, see comment below
if ( $ns == NS_MEDIA ) {
- wfProfileIn( __METHOD__ . "-media" );
# Give extensions a chance to select the file revision for us
$options = array();
$descQuery = false;
- wfRunHooks( 'BeforeParserFetchFileAndTitle',
+ Hooks::run( 'BeforeParserFetchFileAndTitle',
array( $this, $nt, &$options, &$descQuery ) );
# Fetch and register the file (file title may be different via hooks)
list( $file, $nt ) = $this->fetchFileAndTitle( $nt, $options );
# Cloak with NOPARSE to avoid replacement in replaceExternalLinks
$s .= $prefix . $this->armorLinks(
Linker::makeMediaLinkFile( $nt, $file, $text ) ) . $trail;
- wfProfileOut( __METHOD__ . "-media" );
continue;
}
- wfProfileIn( __METHOD__ . "-always_known" );
# Some titles, such as valid special pages or files in foreign repos, should
# be shown as bluelinks even though they're not included in the page table
#
@@ -2242,9 +2306,7 @@ class Parser {
# Links will be added to the output link list after checking
$s .= $holders->makeHolder( $nt, $text, array(), $trail, $prefix );
}
- wfProfileOut( __METHOD__ . "-always_known" );
}
- wfProfileOut( __METHOD__ );
return $holders;
}
@@ -2443,7 +2505,6 @@ class Parser {
* @return string The lists rendered as HTML
*/
public function doBlockLevels( $text, $linestart ) {
- wfProfileIn( __METHOD__ );
# Parsing through the text line by line. The main thing
# happening here is handling of block-level elements p, pre,
@@ -2552,7 +2613,6 @@ class Parser {
# If we have no prefixes, go to paragraph mode.
if ( 0 == $prefixLength ) {
- wfProfileIn( __METHOD__ . "-paragraph" );
# No prefix (not in list)--go to paragraph mode
# XXX: use a stack for nestable elements like span, table and div
$openmatch = preg_match(
@@ -2568,11 +2628,11 @@ class Parser {
$t
);
- if ( $openmatch or $closematch ) {
+ if ( $openmatch || $closematch ) {
$paragraphStack = false;
# @todo bug 5718: paragraph closed
$output .= $this->closeParagraph();
- if ( $preOpenMatch and !$preCloseMatch ) {
+ if ( $preOpenMatch && !$preCloseMatch ) {
$this->mInPre = true;
}
$bqOffset = 0;
@@ -2621,7 +2681,6 @@ class Parser {
}
}
}
- wfProfileOut( __METHOD__ . "-paragraph" );
}
# somewhere above we forget to get out of pre block (bug 785)
if ( $preCloseMatch && $this->mInPre ) {
@@ -2646,7 +2705,6 @@ class Parser {
$this->mLastSection = '';
}
- wfProfileOut( __METHOD__ );
return $output;
}
@@ -2661,12 +2719,10 @@ class Parser {
* @return string The position of the ':', or false if none found
*/
public function findColonNoLinks( $str, &$before, &$after ) {
- wfProfileIn( __METHOD__ );
$pos = strpos( $str, ':' );
if ( $pos === false ) {
# Nothing to find!
- wfProfileOut( __METHOD__ );
return false;
}
@@ -2675,7 +2731,6 @@ class Parser {
# Easy; no tag nesting to worry about
$before = substr( $str, 0, $pos );
$after = substr( $str, $pos + 1 );
- wfProfileOut( __METHOD__ );
return $pos;
}
@@ -2699,7 +2754,6 @@ class Parser {
# We found it!
$before = substr( $str, 0, $i );
$after = substr( $str, $i + 1 );
- wfProfileOut( __METHOD__ );
return $i;
}
# Embedded in a tag; don't break it.
@@ -2709,7 +2763,6 @@ class Parser {
$colon = strpos( $str, ':', $i );
if ( $colon === false ) {
# Nothing else interesting
- wfProfileOut( __METHOD__ );
return false;
}
$lt = strpos( $str, '<', $i );
@@ -2718,7 +2771,6 @@ class Parser {
# We found it!
$before = substr( $str, 0, $colon );
$after = substr( $str, $colon + 1 );
- wfProfileOut( __METHOD__ );
return $i;
}
}
@@ -2769,7 +2821,6 @@ class Parser {
$stack--;
if ( $stack < 0 ) {
wfDebug( __METHOD__ . ": Invalid input; too many close tags\n" );
- wfProfileOut( __METHOD__ );
return false;
}
$state = self::COLON_STATE_TEXT;
@@ -2804,16 +2855,13 @@ class Parser {
}
break;
default:
- wfProfileOut( __METHOD__ );
throw new MWException( "State machine error in " . __METHOD__ );
}
}
if ( $stack > 0 ) {
wfDebug( __METHOD__ . ": Invalid input; not enough close tags (stack $stack, state $state)\n" );
- wfProfileOut( __METHOD__ );
return false;
}
- wfProfileOut( __METHOD__ );
return false;
}
@@ -2845,14 +2893,14 @@ class Parser {
* Some of these require message or data lookups and can be
* expensive to check many times.
*/
- if ( wfRunHooks( 'ParserGetVariableValueVarCache', array( &$this, &$this->mVarCache ) ) ) {
+ if ( Hooks::run( 'ParserGetVariableValueVarCache', array( &$this, &$this->mVarCache ) ) ) {
if ( isset( $this->mVarCache[$index] ) ) {
return $this->mVarCache[$index];
}
}
$ts = wfTimestamp( TS_UNIX, $this->mOptions->getTimestamp() );
- wfRunHooks( 'ParserGetVariableValueTs', array( &$this, &$ts ) );
+ Hooks::run( 'ParserGetVariableValueTs', array( &$this, &$ts ) );
$pageLang = $this->getFunctionLang();
@@ -3129,10 +3177,6 @@ class Parser {
case 'numberofedits':
$value = $pageLang->formatNum( SiteStats::edits() );
break;
- case 'numberofviews':
- global $wgDisableCounters;
- $value = !$wgDisableCounters ? $pageLang->formatNum( SiteStats::views() ) : '';
- break;
case 'currenttimestamp':
$value = wfTimestamp( TS_MW, $ts );
break;
@@ -3164,7 +3208,7 @@ class Parser {
break;
default:
$ret = null;
- wfRunHooks(
+ Hooks::run(
'ParserGetVariableValueSwitch',
array( &$this, &$this->mVarCache, &$index, &$ret, &$frame )
);
@@ -3185,13 +3229,11 @@ class Parser {
* @private
*/
public function initialiseVariables() {
- wfProfileIn( __METHOD__ );
$variableIDs = MagicWord::getVariableIDs();
$substIDs = MagicWord::getSubstIDs();
$this->mVariables = new MagicWordArray( $variableIDs );
$this->mSubstWords = new MagicWordArray( $substIDs );
- wfProfileOut( __METHOD__ );
}
/**
@@ -3266,7 +3308,6 @@ class Parser {
if ( strlen( $text ) < 1 || strlen( $text ) > $this->mOptions->getMaxIncludeSize() ) {
return $text;
}
- wfProfileIn( __METHOD__ );
if ( $frame === false ) {
$frame = $this->getPreprocessor()->newFrame();
@@ -3280,7 +3321,6 @@ class Parser {
$flags = $argsOnly ? PPFrame::NO_TEMPLATES : 0;
$text = $frame->expand( $dom, $flags );
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -3358,8 +3398,6 @@ class Parser {
* @return string The text of the template
*/
public function braceSubstitution( $piece, $frame ) {
- wfProfileIn( __METHOD__ );
- wfProfileIn( __METHOD__ . '-setup' );
// Flags
@@ -3392,12 +3430,10 @@ class Parser {
# @todo FIXME: If piece['parts'] is null then the call to getLength()
# below won't work b/c this $args isn't an object
$args = ( null == $piece['parts'] ) ? array() : $piece['parts'];
- wfProfileOut( __METHOD__ . '-setup' );
- $titleProfileIn = null; // profile templates
+ $profileSection = null; // profile templates
# SUBST
- wfProfileIn( __METHOD__ . '-modifiers' );
if ( !$found ) {
$substMatch = $this->mSubstWords->matchStartAndRemove( $part1 );
@@ -3454,11 +3490,9 @@ class Parser {
$forceRawInterwiki = true;
}
}
- wfProfileOut( __METHOD__ . '-modifiers' );
# Parser functions
if ( !$found ) {
- wfProfileIn( __METHOD__ . '-pfunc' );
$colonPos = strpos( $part1, ':' );
if ( $colonPos !== false ) {
@@ -3470,8 +3504,6 @@ class Parser {
try {
$result = $this->callParserFunction( $frame, $func, $funcArgs );
} catch ( Exception $ex ) {
- wfProfileOut( __METHOD__ . '-pfunc' );
- wfProfileOut( __METHOD__ );
throw $ex;
}
@@ -3480,7 +3512,6 @@ class Parser {
# here.
extract( $result );
}
- wfProfileOut( __METHOD__ . '-pfunc' );
}
# Finish mangling title and then check for loops.
@@ -3515,12 +3546,7 @@ class Parser {
# Load from database
if ( !$found && $title ) {
- if ( !Profiler::instance()->isPersistent() ) {
- # Too many unique items can kill profiling DBs/collectors
- $titleProfileIn = __METHOD__ . "-title-" . $title->getPrefixedDBkey();
- wfProfileIn( $titleProfileIn ); // template in
- }
- wfProfileIn( __METHOD__ . '-loadtpl' );
+ $profileSection = $this->mProfiler->scopedProfileIn( $title->getPrefixedDBkey() );
if ( !$title->isExternal() ) {
if ( $title->isSpecialPage()
&& $this->mOptions->getAllowSpecialInclusion()
@@ -3594,17 +3620,15 @@ class Parser {
. '</span>';
wfDebug( __METHOD__ . ": template loop broken at '$titleText'\n" );
}
- wfProfileOut( __METHOD__ . '-loadtpl' );
}
# If we haven't found text to substitute by now, we're done
# Recover the source wikitext and return it
if ( !$found ) {
$text = $frame->virtualBracketedImplode( '{{', '|', '}}', $titleWithSpaces, $args );
- if ( $titleProfileIn ) {
- wfProfileOut( $titleProfileIn ); // template out
+ if ( $profileSection ) {
+ $this->mProfiler->scopedProfileOut( $profileSection );
}
- wfProfileOut( __METHOD__ );
return array( 'object' => $text );
}
@@ -3628,8 +3652,8 @@ class Parser {
$isLocalObj = false;
}
- if ( $titleProfileIn ) {
- wfProfileOut( $titleProfileIn ); // template out
+ if ( $profileSection ) {
+ $this->mProfiler->scopedProfileOut( $profileSection );
}
# Replace raw HTML by a placeholder
@@ -3670,7 +3694,6 @@ class Parser {
$ret = array( 'text' => $text );
}
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -3696,7 +3719,6 @@ class Parser {
public function callParserFunction( $frame, $function, array $args = array() ) {
global $wgContLang;
- wfProfileIn( __METHOD__ );
# Case sensitive functions
if ( isset( $this->mFunctionSynonyms[1][$function] ) ) {
@@ -3707,23 +3729,19 @@ class Parser {
if ( isset( $this->mFunctionSynonyms[0][$function] ) ) {
$function = $this->mFunctionSynonyms[0][$function];
} else {
- wfProfileOut( __METHOD__ );
return array( 'found' => false );
}
}
- wfProfileIn( __METHOD__ . '-pfunc-' . $function );
list( $callback, $flags ) = $this->mFunctionHooks[$function];
# Workaround for PHP bug 35229 and similar
if ( !is_callable( $callback ) ) {
- wfProfileOut( __METHOD__ . '-pfunc-' . $function );
- wfProfileOut( __METHOD__ );
throw new MWException( "Tag hook for $function is not callable\n" );
}
$allArgs = array( &$this );
- if ( $flags & SFH_OBJECT_ARGS ) {
+ if ( $flags & self::SFH_OBJECT_ARGS ) {
# Convert arguments to PPNodes and collect for appending to $allArgs
$funcArgs = array();
foreach ( $args as $k => $v ) {
@@ -3783,8 +3801,6 @@ class Parser {
$result['text'] = $this->preprocessToDom( $result['text'], $preprocessFlags );
$result['isChildObj'] = true;
}
- wfProfileOut( __METHOD__ . '-pfunc-' . $function );
- wfProfileOut( __METHOD__ );
return $result;
}
@@ -3830,6 +3846,44 @@ class Parser {
}
/**
+ * Fetch the current revision of a given title. Note that the revision
+ * (and even the title) may not exist in the database, so everything
+ * contributing to the output of the parser should use this method
+ * where possible, rather than getting the revisions themselves. This
+ * method also caches its results, so using it benefits performance.
+ *
+ * @since 1.24
+ * @param Title $title
+ * @return Revision
+ */
+ public function fetchCurrentRevisionOfTitle( $title ) {
+ $cacheKey = $title->getPrefixedDBkey();
+ if ( !$this->currentRevisionCache ) {
+ $this->currentRevisionCache = new MapCacheLRU( 100 );
+ }
+ if ( !$this->currentRevisionCache->has( $cacheKey ) ) {
+ $this->currentRevisionCache->set( $cacheKey,
+ // Defaults to Parser::statelessFetchRevision()
+ call_user_func( $this->mOptions->getCurrentRevisionCallback(), $title, $this )
+ );
+ }
+ return $this->currentRevisionCache->get( $cacheKey );
+ }
+
+ /**
+ * Wrapper around Revision::newFromTitle to allow passing additional parameters
+ * without passing them on to it.
+ *
+ * @since 1.24
+ * @param Title $title
+ * @param Parser|bool $parser
+ * @return Revision
+ */
+ public static function statelessFetchRevision( $title, $parser = false ) {
+ return Revision::newFromTitle( $title );
+ }
+
+ /**
* Fetch the unparsed text of a template and register a reference to it.
* @param Title $title
* @return array ( string or false, Title )
@@ -3881,7 +3935,7 @@ class Parser {
for ( $i = 0; $i < 2 && is_object( $title ); $i++ ) {
# Give extensions a chance to select the revision instead
$id = false; # Assume current
- wfRunHooks( 'BeforeParserFetchTemplateAndtitle',
+ Hooks::run( 'BeforeParserFetchTemplateAndtitle',
array( $parser, $title, &$skip, &$id ) );
if ( $skip ) {
@@ -3894,9 +3948,13 @@ class Parser {
break;
}
# Get the revision
- $rev = $id
- ? Revision::newFromId( $id )
- : Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
+ if ( $id ) {
+ $rev = Revision::newFromId( $id );
+ } elseif ( $parser ) {
+ $rev = $parser->fetchCurrentRevisionOfTitle( $title );
+ } else {
+ $rev = Revision::newFromTitle( $title );
+ }
$rev_id = $rev ? $rev->getId() : 0;
# If there is no current revision, there is no page
if ( $id === false && !$rev ) {
@@ -4041,7 +4099,7 @@ class Parser {
return $obj->tc_contents;
}
- $req = MWHttpRequest::factory( $url );
+ $req = MWHttpRequest::factory( $url, array(), __METHOD__ );
$status = $req->execute(); // Status object
if ( $status->isOK() ) {
$text = $req->getContent();
@@ -4072,7 +4130,6 @@ class Parser {
* @return array
*/
public function argSubstitution( $piece, $frame ) {
- wfProfileIn( __METHOD__ );
$error = false;
$parts = $piece['parts'];
@@ -4107,7 +4164,6 @@ class Parser {
$ret = array( 'text' => $text );
}
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -4238,7 +4294,6 @@ class Parser {
* @return string
*/
public function doDoubleUnderscore( $text ) {
- wfProfileIn( __METHOD__ );
# The position of __TOC__ needs to be recorded
$mw = MagicWord::get( 'toc' );
@@ -4286,45 +4341,16 @@ class Parser {
$this->mOutput->setProperty( $key, '' );
}
- wfProfileOut( __METHOD__ );
return $text;
}
/**
- * Add a tracking category, getting the title from a system message,
- * or print a debug message if the title is invalid.
- *
- * Please add any message that you use with this function to
- * $wgTrackingCategories. That way they will be listed on
- * Special:TrackingCategories.
- *
+ * @see ParserOutput::addTrackingCategory()
* @param string $msg Message key
* @return bool Whether the addition was successful
*/
public function addTrackingCategory( $msg ) {
- if ( $this->mTitle->getNamespace() === NS_SPECIAL ) {
- wfDebug( __METHOD__ . ": Not adding tracking category $msg to special page!\n" );
- return false;
- }
- // Important to parse with correct title (bug 31469)
- $cat = wfMessage( $msg )
- ->title( $this->getTitle() )
- ->inContentLanguage()
- ->text();
-
- # Allow tracking categories to be disabled by setting them to "-"
- if ( $cat === '-' ) {
- return false;
- }
-
- $containerCategory = Title::makeTitleSafe( NS_CATEGORY, $cat );
- if ( $containerCategory ) {
- $this->mOutput->addCategory( $containerCategory->getDBkey(), $this->getDefaultSort() );
- return true;
- } else {
- wfDebug( __METHOD__ . ": [[MediaWiki:$msg]] is not a valid title!\n" );
- return false;
- }
+ return $this->mOutput->addTrackingCategory( $msg, $this->mTitle );
}
/**
@@ -4361,7 +4387,7 @@ class Parser {
# links - this is for later, but we need the number of headlines right now
$matches = array();
$numMatches = preg_match_all(
- '/<H(?P<level>[1-6])(?P<attrib>.*?' . '>)\s*(?P<header>[\s\S]*?)\s*<\/H[1-6] *>/i',
+ '/<H(?P<level>[1-6])(?P<attrib>.*?>)\s*(?P<header>[\s\S]*?)\s*<\/H[1-6] *>/i',
$text,
$matches
);
@@ -4508,14 +4534,15 @@ class Parser {
# * <sup> and <sub> (bug 8393)
# * <i> (bug 26375)
# * <b> (r105284)
+ # * <bdi> (bug 72884)
# * <span dir="rtl"> and <span dir="ltr"> (bug 35167)
#
# We strip any parameter from accepted tags (second regex), except dir="rtl|ltr" from <span>,
# to allow setting directionality in toc items.
$tocline = preg_replace(
array(
- '#<(?!/?(span|sup|sub|i|b)(?: [^>]*)?>).*?' . '>#',
- '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|i|b))(?: .*?)?' . '>#'
+ '#<(?!/?(span|sup|sub|bdi|i|b)(?: [^>]*)?>).*?>#',
+ '#<(/?(?:span(?: dir="(?:rtl|ltr)")?|sup|sub|bdi|i|b))(?: .*?)?>#'
),
array( '', '<$1>' ),
$safeHeadline
@@ -4523,7 +4550,7 @@ class Parser {
$tocline = trim( $tocline );
# For the anchor, strip out HTML-y stuff period
- $safeHeadline = preg_replace( '/<.*?' . '>/', '', $safeHeadline );
+ $safeHeadline = preg_replace( '/<.*?>/', '', $safeHeadline );
$safeHeadline = Sanitizer::normalizeSectionNameWhitespace( $safeHeadline );
# Save headline for section edit hint before it's escaped
@@ -4556,7 +4583,7 @@ class Parser {
# HTML names must be case-insensitively unique (bug 10721).
# This does not apply to Unicode characters per
- # http://dev.w3.org/html5/spec/infrastructure.html#case-sensitivity-and-string-comparison
+ # http://www.w3.org/TR/html5/infrastructure.html#case-sensitivity-and-string-comparison
# @todo FIXME: We may be changing them depending on the current locale.
$arrayKey = strtolower( $safeHeadline );
if ( $legacyHeadline === false ) {
@@ -4565,16 +4592,22 @@ class Parser {
$legacyArrayKey = strtolower( $legacyHeadline );
}
- # count how many in assoc. array so we can track dupes in anchors
+ # Create the anchor for linking from the TOC to the section
+ $anchor = $safeHeadline;
+ $legacyAnchor = $legacyHeadline;
if ( isset( $refers[$arrayKey] ) ) {
- $refers[$arrayKey]++;
+ for ( $i = 2; isset( $refers["${arrayKey}_$i"] ); ++$i );
+ $anchor .= "_$i";
+ $refers["${arrayKey}_$i"] = true;
} else {
- $refers[$arrayKey] = 1;
+ $refers[$arrayKey] = true;
}
- if ( isset( $refers[$legacyArrayKey] ) ) {
- $refers[$legacyArrayKey]++;
+ if ( $legacyHeadline !== false && isset( $refers[$legacyArrayKey] ) ) {
+ for ( $i = 2; isset( $refers["${legacyArrayKey}_$i"] ); ++$i );
+ $legacyAnchor .= "_$i";
+ $refers["${legacyArrayKey}_$i"] = true;
} else {
- $refers[$legacyArrayKey] = 1;
+ $refers[$legacyArrayKey] = true;
}
# Don't number the heading if it is the only one (looks silly)
@@ -4587,15 +4620,6 @@ class Parser {
) . ' ' . $headline;
}
- # Create the anchor for linking from the TOC to the section
- $anchor = $safeHeadline;
- $legacyAnchor = $legacyHeadline;
- if ( $refers[$arrayKey] > 1 ) {
- $anchor .= '_' . $refers[$arrayKey];
- }
- if ( $legacyHeadline !== false && $refers[$legacyArrayKey] > 1 ) {
- $legacyAnchor .= '_' . $refers[$legacyArrayKey];
- }
if ( $enoughToc && ( !isset( $wgMaxTocLevel ) || $toclevel < $wgMaxTocLevel ) ) {
$toc .= Linker::tocLine( $anchor, $tocline,
$numbering, $toclevel, ( $isTemplate ? false : $sectionIndex ) );
@@ -4691,7 +4715,7 @@ class Parser {
}
# split up and insert constructed headlines
- $blocks = preg_split( '/<H[1-6].*?' . '>[\s\S]*?<\/H[1-6]>/i', $text );
+ $blocks = preg_split( '/<H[1-6].*?>[\s\S]*?<\/H[1-6]>/i', $text );
$i = 0;
// build an array of document sections
@@ -4714,7 +4738,7 @@ class Parser {
* &$sectionContent : ref to the content of the section
* $showEditLinks : boolean describing whether this section has an edit link
*/
- wfRunHooks( 'ParserSectionCreate', array( $this, $i, &$sections[$i], $showEditLink ) );
+ Hooks::run( 'ParserSectionCreate', array( $this, $i, &$sections[$i], $showEditLink ) );
$i++;
}
@@ -4736,7 +4760,7 @@ class Parser {
/**
* Transform wiki markup when saving a page by doing "\r\n" -> "\n"
- * conversion, substitting signatures, {{subst:}} templates, etc.
+ * conversion, substituting signatures, {{subst:}} templates, etc.
*
* @param string $text The text to transform
* @param Title $title The Title object for the current article
@@ -4756,6 +4780,7 @@ class Parser {
$pairs = array(
"\r\n" => "\n",
+ "\r" => "\n",
);
$text = str_replace( array_keys( $pairs ), array_values( $pairs ), $text );
if ( $options->getPreSaveTransform() ) {
@@ -4920,7 +4945,7 @@ class Parser {
/**
* Clean up signature text
*
- * 1) Strip ~~~, ~~~~ and ~~~~~ out of signatures @see cleanSigInSig
+ * 1) Strip 3, 4 or 5 tildes out of signatures @see cleanSigInSig
* 2) Substitute all transclusions
*
* @param string $text
@@ -4959,7 +4984,7 @@ class Parser {
}
/**
- * Strip ~~~, ~~~~ and ~~~~~ out of signatures
+ * Strip 3, 4 or 5 tildes out of signatures.
*
* @param string $text
* @return string Signature text with /~{3,5}/ removed
@@ -5018,7 +5043,6 @@ class Parser {
}
$executing = true;
- wfProfileIn( __METHOD__ );
if ( !$title ) {
global $wgTitle;
$title = $wgTitle;
@@ -5027,7 +5051,6 @@ class Parser {
$text = $this->preprocess( $text, $title, $options );
$executing = false;
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -5111,7 +5134,7 @@ class Parser {
* The callback function should have the form:
* function myParserFunction( &$parser, $arg1, $arg2, $arg3 ) { ... }
*
- * Or with SFH_OBJECT_ARGS:
+ * Or with Parser::SFH_OBJECT_ARGS:
* function myParserFunction( $parser, $frame, $args ) { ... }
*
* The callback may either return the text result of the function, or an array with the text
@@ -5125,10 +5148,10 @@ class Parser {
* @param string $id The magic word ID
* @param callable $callback The callback function (and object) to use
* @param int $flags A combination of the following flags:
- * SFH_NO_HASH No leading hash, i.e. {{plural:...}} instead of {{#if:...}}
+ * Parser::SFH_NO_HASH No leading hash, i.e. {{plural:...}} instead of {{#if:...}}
*
- * SFH_OBJECT_ARGS Pass the template arguments as PPNode objects instead of text. This
- * allows for conditional expansion of the parse tree, allowing you to eliminate dead
+ * Parser::SFH_OBJECT_ARGS Pass the template arguments as PPNode objects instead of text.
+ * This allows for conditional expansion of the parse tree, allowing you to eliminate dead
* branches and thus speed up parsing. It is also possible to analyse the parse tree of
* the arguments, and to control the way they are expanded.
*
@@ -5170,7 +5193,7 @@ class Parser {
$syn = $wgContLang->lc( $syn );
}
# Add leading hash
- if ( !( $flags & SFH_NO_HASH ) ) {
+ if ( !( $flags & self::SFH_NO_HASH ) ) {
$syn = '#' . $syn;
}
# Remove trailing colon
@@ -5224,11 +5247,9 @@ class Parser {
*
* @param string $text
* @param int $options
- *
- * @return array Array of link CSS classes, indexed by PDBK.
*/
public function replaceLinkHolders( &$text, $options = 0 ) {
- return $this->mLinkHolders->replace( $text );
+ $this->mLinkHolders->replace( $text );
}
/**
@@ -5256,7 +5277,6 @@ class Parser {
* @return string HTML
*/
public function renderImageGallery( $text, $params ) {
- wfProfileIn( __METHOD__ );
$mode = false;
if ( isset( $params['mode'] ) ) {
@@ -5265,7 +5285,7 @@ class Parser {
try {
$ig = ImageGalleryBase::factory( $mode );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// If invalid type set, fallback to default.
$ig = ImageGalleryBase::factory( false );
}
@@ -5299,7 +5319,7 @@ class Parser {
}
$ig->setAdditionalOptions( $params );
- wfRunHooks( 'BeforeParserrenderImageGallery', array( &$this, &$ig ) );
+ Hooks::run( 'BeforeParserrenderImageGallery', array( &$this, &$ig ) );
$lines = StringUtils::explode( "\n", $text );
foreach ( $lines as $line ) {
@@ -5326,13 +5346,12 @@ class Parser {
# file (which potentially could be of a different type and have different handler).
$options = array();
$descQuery = false;
- wfRunHooks( 'BeforeParserFetchFileAndTitle',
+ Hooks::run( 'BeforeParserFetchFileAndTitle',
array( $this, $title, &$options, &$descQuery ) );
# Don't register it now, as ImageGallery does that later.
$file = $this->fetchFileNoRegister( $title, $options );
$handler = $file ? $file->getHandler() : false;
- wfProfileIn( __METHOD__ . '-getMagicWord' );
$paramMap = array(
'img_alt' => 'gallery-internal-alt',
'img_link' => 'gallery-internal-link',
@@ -5345,7 +5364,6 @@ class Parser {
}
$mwArray = new MagicWordArray( array_keys( $paramMap ) );
- wfProfileOut( __METHOD__ . '-getMagicWord' );
$label = '';
$alt = '';
@@ -5407,13 +5425,12 @@ class Parser {
$ig->add( $title, $label, $alt, $link, $handlerOptions );
}
$html = $ig->toHTML();
- wfRunHooks( 'AfterParserFetchFileAndTitle', array( $this, $ig, &$html ) );
- wfProfileOut( __METHOD__ );
+ Hooks::run( 'AfterParserFetchFileAndTitle', array( $this, $ig, &$html ) );
return $html;
}
/**
- * @param string $handler
+ * @param MediaHandler $handler
* @return array
*/
public function getImageParams( $handler ) {
@@ -5496,7 +5513,7 @@ class Parser {
# Give extensions a chance to select the file revision for us
$options = array();
$descQuery = false;
- wfRunHooks( 'BeforeParserFetchFileAndTitle',
+ Hooks::run( 'BeforeParserFetchFileAndTitle',
array( $this, $title, &$options, &$descQuery ) );
# Fetch and register the file (file title may be different via hooks)
list( $file, $title ) = $this->fetchFileAndTitle( $title, $options );
@@ -5660,7 +5677,7 @@ class Parser {
$params['frame']['title'] = $this->stripAltText( $caption, $holders );
}
- wfRunHooks( 'ParserMakeImageParams', array( $title, $file, &$params, $this ) );
+ Hooks::run( 'ParserMakeImageParams', array( $title, $file, &$params, $this ) );
# Linker does the rest
$time = isset( $options['time'] ) ? $options['time'] : false;
@@ -5969,7 +5986,19 @@ class Parser {
return null;
}
- $this->mRevisionObject = Revision::newFromId( $this->mRevisionId );
+ $rev = call_user_func(
+ $this->mOptions->getCurrentRevisionCallback(), $this->getTitle(), $this
+ );
+
+ # If the parse is for a new revision, then the callback should have
+ # already been set to force the object and should match mRevisionId.
+ # If not, try to fetch by mRevisionId for sanity.
+ if ( $rev && $rev->getId() != $this->mRevisionId ) {
+ $rev = Revision::newFromId( $this->mRevisionId );
+ }
+
+ $this->mRevisionObject = $rev;
+
return $this->mRevisionObject;
}
@@ -5980,8 +6009,6 @@ class Parser {
*/
public function getRevisionTimestamp() {
if ( is_null( $this->mRevisionTimestamp ) ) {
- wfProfileIn( __METHOD__ );
-
global $wgContLang;
$revObject = $this->getRevisionObject();
@@ -5995,7 +6022,6 @@ class Parser {
# it needs to be consistent for all visitors.
$this->mRevisionTimestamp = $wgContLang->userAdjust( $timestamp, '' );
- wfProfileOut( __METHOD__ );
}
return $this->mRevisionTimestamp;
}
@@ -6250,14 +6276,12 @@ class Parser {
* @return array
*/
public function serializeHalfParsedText( $text ) {
- wfProfileIn( __METHOD__ );
$data = array(
'text' => $text,
'version' => self::HALF_PARSED_VERSION,
'stripState' => $this->mStripState->getSubState( $text ),
'linkHolders' => $this->mLinkHolders->getSubArray( $text )
);
- wfProfileOut( __METHOD__ );
return $data;
}
diff --git a/includes/parser/ParserCache.php b/includes/parser/ParserCache.php
index 79523003..bc8e4a69 100644
--- a/includes/parser/ParserCache.php
+++ b/includes/parser/ParserCache.php
@@ -184,12 +184,10 @@ class ParserCache {
*/
public function get( $article, $popts, $useOutdated = false ) {
global $wgCacheEpoch;
- wfProfileIn( __METHOD__ );
$canCache = $article->checkTouched();
if ( !$canCache ) {
// It's a redirect now
- wfProfileOut( __METHOD__ );
return false;
}
@@ -198,7 +196,6 @@ class ParserCache {
$parserOutputKey = $this->getKey( $article, $popts, $useOutdated );
if ( $parserOutputKey === false ) {
wfIncrStats( 'pcache_miss_absent' );
- wfProfileOut( __METHOD__ );
return false;
}
@@ -206,7 +203,6 @@ class ParserCache {
if ( !$value ) {
wfDebug( "ParserOutput cache miss.\n" );
wfIncrStats( "pcache_miss_absent" );
- wfProfileOut( __METHOD__ );
return false;
}
@@ -233,7 +229,6 @@ class ParserCache {
wfIncrStats( "pcache_hit" );
}
- wfProfileOut( __METHOD__ );
return $value;
}
@@ -262,8 +257,6 @@ class ParserCache {
$optionsKey->setCacheRevisionId( $revId );
$parserOutput->setCacheRevisionId( $revId );
- $optionsKey->setContainsOldMagic( $parserOutput->containsOldMagic() );
-
$parserOutputKey = $this->getParserOutputKey( $page,
$popts->optionsHash( $optionsKey->mUsedOptions, $page->getTitle() ) );
diff --git a/includes/parser/ParserOptions.php b/includes/parser/ParserOptions.php
index 7e4059b8..100656d1 100644
--- a/includes/parser/ParserOptions.php
+++ b/includes/parser/ParserOptions.php
@@ -25,7 +25,7 @@
* @brief Set options of the Parser
*
* All member variables are supposed to be private in theory, although in
- * practise this is not the case.
+ * practice this is not the case.
*
* @ingroup Parser
*/
@@ -117,6 +117,12 @@ class ParserOptions {
public $mRemoveComments = true;
/**
+ * Callback for current revision fetching. Used as first argument to call_user_func().
+ */
+ public $mCurrentRevisionCallback =
+ array( 'Parser', 'statelessFetchRevision' );
+
+ /**
* Callback for template fetching. Used as first argument to call_user_func().
*/
public $mTemplateCallback =
@@ -139,9 +145,7 @@ class ParserOptions {
/**
* Clean up signature texts?
- *
- * 1) Strip ~~~, ~~~~ and ~~~~~ out of signatures
- * 2) Substitute all transclusions
+ * @see Parser::cleanSig
*/
public $mCleanSignatures;
@@ -289,6 +293,11 @@ class ParserOptions {
return $this->mRemoveComments;
}
+ /* @since 1.24 */
+ public function getCurrentRevisionCallback() {
+ return $this->mCurrentRevisionCallback;
+ }
+
public function getTemplateCallback() {
return $this->mTemplateCallback;
}
@@ -462,6 +471,11 @@ class ParserOptions {
return wfSetVar( $this->mRemoveComments, $x );
}
+ /* @since 1.24 */
+ public function setCurrentRevisionCallback( $x ) {
+ return wfSetVar( $this->mCurrentRevisionCallback, $x );
+ }
+
public function setTemplateCallback( $x ) {
return wfSetVar( $this->mTemplateCallback, $x );
}
@@ -623,8 +637,7 @@ class ParserOptions {
$wgCleanSignatures, $wgExternalLinkTarget, $wgExpensiveParserFunctionLimit,
$wgMaxGeneratedPPNodeCount, $wgDisableLangConversion, $wgDisableTitleConversion;
- wfProfileIn( __METHOD__ );
-
+ // *UPDATE* ParserOptions::matches() if any of this changes as needed
$this->mInterwikiMagic = $wgInterwikiMagic;
$this->mAllowExternalImages = $wgAllowExternalImages;
$this->mAllowExternalImagesFrom = $wgAllowExternalImagesFrom;
@@ -647,7 +660,33 @@ class ParserOptions {
$this->mStubThreshold = $user->getStubThreshold();
$this->mUserLang = $lang;
- wfProfileOut( __METHOD__ );
+ }
+
+ /**
+ * Check if these options match that of another options set
+ *
+ * This ignores report limit settings that only affect HTML comments
+ *
+ * @param ParserOptions $other
+ * @return bool
+ * @since 1.25
+ */
+ public function matches( ParserOptions $other ) {
+ $fields = array_keys( get_class_vars( __CLASS__ ) );
+ $fields = array_diff( $fields, array(
+ 'mEnableLimitReport', // only effects HTML comments
+ 'onAccessCallback', // only used for ParserOutput option tracking
+ ) );
+ foreach ( $fields as $field ) {
+ if ( !is_object( $this->$field ) && $this->$field !== $other->$field ) {
+ return false;
+ }
+ }
+ // Check the object and lazy-loaded options
+ return (
+ $this->mUserLang->getCode() === $other->mUserLang->getCode() &&
+ $this->getDateFormat() === $other->getDateFormat()
+ );
}
/**
@@ -768,11 +807,53 @@ class ParserOptions {
// Give a chance for extensions to modify the hash, if they have
// extra options or other effects on the parser cache.
- wfRunHooks( 'PageRenderingHash', array( &$confstr, $this->getUser(), &$forOptions ) );
+ Hooks::run( 'PageRenderingHash', array( &$confstr, $this->getUser(), &$forOptions ) );
// Make it a valid memcached key fragment
$confstr = str_replace( ' ', '_', $confstr );
return $confstr;
}
+
+ /**
+ * Sets a hook to force that a page exists, and sets a current revision callback to return a
+ * revision with custom content when the current revision of the page is requested.
+ *
+ * @since 1.25
+ * @param Title $title
+ * @param Content $content
+ * @param User $user The user that the fake revision is attributed to
+ * @return ScopedCallback to unset the hook
+ */
+ public function setupFakeRevision( $title, $content, $user ) {
+ $oldCallback = $this->setCurrentRevisionCallback( function ( $titleToCheck, $parser = false ) use ( $title, $content, $user, &$oldCallback ) {
+ if ( $titleToCheck->equals( $title ) ) {
+ return new Revision( array(
+ 'page' => $title->getArticleID(),
+ 'user_text' => $user->getName(),
+ 'user' => $user->getId(),
+ 'parent_id' => $title->getLatestRevId(),
+ 'title' => $title,
+ 'content' => $content
+ ) );
+ } else {
+ return call_user_func( $oldCallback, $titleToCheck, $parser );
+ }
+ } );
+ global $wgHooks;
+ $wgHooks['TitleExists'][] =
+ function ( $titleToCheck, &$exists ) use ( $title ) {
+ if ( $titleToCheck->equals( $title ) ) {
+ $exists = true;
+ }
+ };
+ end( $wgHooks['TitleExists'] );
+ $key = key( $wgHooks['TitleExists'] );
+ LinkCache::singleton()->clearBadLink( $title->getPrefixedDBkey() );
+ return new ScopedCallback( function () use ( $title, $key ) {
+ global $wgHooks;
+ unset( $wgHooks['TitleExists'][$key] );
+ LinkCache::singleton()->clearLink( $title );
+ } );
+ }
}
diff --git a/includes/parser/ParserOutput.php b/includes/parser/ParserOutput.php
index 5037ce18..65b527c8 100644
--- a/includes/parser/ParserOutput.php
+++ b/includes/parser/ParserOutput.php
@@ -25,6 +25,7 @@ class ParserOutput extends CacheTime {
public $mText, # The output text
$mLanguageLinks, # List of the full text of language links, in the order they appear
$mCategories, # Map of category names to sort keys
+ $mIndicators = array(), # Page status indicators, usually displayed in top-right corner
$mTitleText, # title text of the chosen language variant
$mLinks = array(), # 2-D map of NS/DBK to ID for the links in the document. ID=zero for broken.
$mTemplates = array(), # 2-D map of NS/DBK to ID for the template references. ID=zero for broken.
@@ -52,27 +53,25 @@ class ParserOutput extends CacheTime {
$mTOCEnabled = true; # Whether TOC should be shown, can't override __NOTOC__
private $mIndexPolicy = ''; # 'index' or 'noindex'? Any other value will result in no change.
private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys)
- private $mSecondaryDataUpdates = array(); # List of DataUpdate, used to save info from the page somewhere else.
private $mExtensionData = array(); # extra data used by extensions
private $mLimitReportData = array(); # Parser limit report data
private $mParseStartTime = array(); # Timestamps for getTimeSinceStart()
private $mPreventClickjacking = false; # Whether to emit X-Frame-Options: DENY
+ private $mFlags = array(); # Generic flags
const EDITSECTION_REGEX =
'#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)(</(?:mw:)?editsection>))#';
public function __construct( $text = '', $languageLinks = array(), $categoryLinks = array(),
- $containsOldMagic = false, $titletext = ''
+ $unused = false, $titletext = ''
) {
$this->mText = $text;
$this->mLanguageLinks = $languageLinks;
$this->mCategories = $categoryLinks;
- $this->mContainsOldMagic = $containsOldMagic;
$this->mTitleText = $titletext;
}
public function getText() {
- wfProfileIn( __METHOD__ );
$text = $this->mText;
if ( $this->mEditSectionTokens ) {
$text = preg_replace_callback(
@@ -110,7 +109,6 @@ class ParserOutput extends CacheTime {
$text
);
}
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -130,6 +128,13 @@ class ParserOutput extends CacheTime {
return $this->mCategories;
}
+ /**
+ * @since 1.25
+ */
+ public function getIndicators() {
+ return $this->mIndicators;
+ }
+
public function getTitleText() {
return $this->mTitleText;
}
@@ -267,6 +272,13 @@ class ParserOutput extends CacheTime {
$this->mCategories[$c] = $sort;
}
+ /**
+ * @since 1.25
+ */
+ public function setIndicator( $id, $content ) {
+ $this->mIndicators[$id] = $content;
+ }
+
public function addLanguageLink( $t ) {
$this->mLanguageLinks[] = $t;
}
@@ -472,6 +484,47 @@ class ParserOutput extends CacheTime {
}
/**
+ * Add a tracking category, getting the title from a system message,
+ * or print a debug message if the title is invalid.
+ *
+ * Any message used with this function should be registered so it will
+ * show up on Special:TrackingCategories. Core messages should be added
+ * to SpecialTrackingCategories::$coreTrackingCategories, and extensions
+ * should add to "TrackingCategories" in their extension.json.
+ *
+ * @param string $msg Message key
+ * @param Title $title title of the page which is being tracked
+ * @return bool Whether the addition was successful
+ * @since 1.25
+ */
+ public function addTrackingCategory( $msg, $title ) {
+ if ( $title->getNamespace() === NS_SPECIAL ) {
+ wfDebug( __METHOD__ . ": Not adding tracking category $msg to special page!\n" );
+ return false;
+ }
+
+ // Important to parse with correct title (bug 31469)
+ $cat = wfMessage( $msg )
+ ->title( $title )
+ ->inContentLanguage()
+ ->text();
+
+ # Allow tracking categories to be disabled by setting them to "-"
+ if ( $cat === '-' ) {
+ return false;
+ }
+
+ $containerCategory = Title::makeTitleSafe( NS_CATEGORY, $cat );
+ if ( $containerCategory ) {
+ $this->addCategory( $containerCategory->getDBkey(), $this->getProperty( 'defaultsort' ) ?: '' );
+ return true;
+ } else {
+ wfDebug( __METHOD__ . ": [[MediaWiki:$msg]] is not a valid title!\n" );
+ return false;
+ }
+ }
+
+ /**
* Override the title to be used for display
* -- this is assumed to have been validated
* (check equal normalisation, etc.)
@@ -622,43 +675,57 @@ class ParserOutput extends CacheTime {
}
/**
- * Adds an update job to the output. Any update jobs added to the output will
- * eventually be executed in order to store any secondary information extracted
- * from the page's content. This is triggered by calling getSecondaryDataUpdates()
- * and is used for forward links updates on edit and backlink updates by jobs.
+ * @deprecated since 1.25. Instead, store any relevant data using setExtensionData,
+ * and implement Content::getSecondaryDataUpdates() if possible, or use the
+ * 'SecondaryDataUpdates' hook to construct the necessary update objects.
*
- * @since 1.20
+ * @note Hard deprecation and removal without long deprecation period, since there are no
+ * known users, but known conceptual issues.
+ *
+ * @todo remove in 1.26
*
* @param DataUpdate $update
+ *
+ * @throws MWException
*/
public function addSecondaryDataUpdate( DataUpdate $update ) {
- $this->mSecondaryDataUpdates[] = $update;
+ wfDeprecated( __METHOD__, '1.25' );
+ throw new MWException( 'ParserOutput::addSecondaryDataUpdate() is no longer supported. Override Content::getSecondaryDataUpdates() or use the SecondaryDataUpdates hook instead.' );
}
/**
- * Returns any DataUpdate jobs to be executed in order to store secondary information
- * extracted from the page's content, including a LinksUpdate object for all links stored in
- * this ParserOutput object.
+ * @deprecated since 1.25.
*
- * @note Avoid using this method directly, use ContentHandler::getSecondaryDataUpdates()
- * instead! The content handler may provide additional update objects.
+ * @note Hard deprecation and removal without long deprecation period, since there are no
+ * known users, but known conceptual issues.
*
- * @since 1.20
+ * @todo remove in 1.26
*
- * @param Title $title The title of the page we're updating. If not given, a title object will
- * be created based on $this->getTitleText()
- * @param bool $recursive Queue jobs for recursive updates?
+ * @return bool false (since 1.25)
+ */
+ public function hasCustomDataUpdates() {
+ wfDeprecated( __METHOD__, '1.25' );
+ return false;
+ }
+
+ /**
+ * @deprecated since 1.25. Instead, store any relevant data using setExtensionData,
+ * and implement Content::getSecondaryDataUpdates() if possible, or use the
+ * 'SecondaryDataUpdates' hook to construct the necessary update objects.
+ *
+ * @note Hard deprecation and removal without long deprecation period, since there are no
+ * known users, but known conceptual issues.
+ *
+ * @todo remove in 1.26
+ *
+ * @param Title $title
+ * @param bool $recursive
*
* @return array An array of instances of DataUpdate
*/
public function getSecondaryDataUpdates( Title $title = null, $recursive = true ) {
- if ( is_null( $title ) ) {
- $title = Title::newFromText( $this->getTitleText() );
- }
-
- $linksUpdate = new LinksUpdate( $title, $this, $recursive );
-
- return array_merge( $this->mSecondaryDataUpdates, array( $linksUpdate ) );
+ wfDeprecated( __METHOD__, '1.25' );
+ return array();
}
/**
@@ -795,6 +862,22 @@ class ParserOutput extends CacheTime {
}
/**
+ * Check whether the cache TTL was lowered due to dynamic content
+ *
+ * When content is determined by more than hard state (e.g. page edits),
+ * such as template/file transclusions based on the current timestamp or
+ * extension tags that generate lists based on queries, this return true.
+ *
+ * @return bool
+ * @since 1.25
+ */
+ public function hasDynamicContent() {
+ global $wgParserCacheExpireTime;
+
+ return $this->getCacheExpiry() < $wgParserCacheExpireTime;
+ }
+
+ /**
* Get or set the prevent-clickjacking flag
*
* @since 1.24
@@ -806,13 +889,13 @@ class ParserOutput extends CacheTime {
}
/**
- * Save space for for serialization by removing useless values
+ * Save space for serialization by removing useless values
* @return array
*/
public function __sleep() {
return array_diff(
array_keys( get_object_vars( $this ) ),
- array( 'mSecondaryDataUpdates', 'mParseStartTime' )
+ array( 'mParseStartTime' )
);
}
}
diff --git a/includes/parser/Preprocessor_DOM.php b/includes/parser/Preprocessor_DOM.php
index 2edb79a2..0351f2a8 100644
--- a/includes/parser/Preprocessor_DOM.php
+++ b/includes/parser/Preprocessor_DOM.php
@@ -68,6 +68,7 @@ class Preprocessor_DOM implements Preprocessor {
/**
* @param array $values
* @return PPNode_DOM
+ * @throws MWException
*/
public function newPartNodeArray( $values ) {
//NOTE: DOM manipulation is slower than building & parsing XML! (or so Tim sais)
@@ -85,19 +86,17 @@ class Preprocessor_DOM implements Preprocessor {
$xml .= "</list>";
- wfProfileIn( __METHOD__ . '-loadXML' );
$dom = new DOMDocument();
wfSuppressWarnings();
$result = $dom->loadXML( $xml );
wfRestoreWarnings();
if ( !$result ) {
// Try running the XML through UtfNormal to get rid of invalid characters
- $xml = UtfNormal::cleanUp( $xml );
+ $xml = UtfNormal\Validator::cleanUp( $xml );
// 1 << 19 == XML_PARSE_HUGE, needed so newer versions of libxml2
// don't barf when the XML is >256 levels deep
$result = $dom->loadXML( $xml, 1 << 19 );
}
- wfProfileOut( __METHOD__ . '-loadXML' );
if ( !$result ) {
throw new MWException( 'Parameters passed to ' . __METHOD__ . ' result in invalid XML' );
@@ -149,14 +148,12 @@ class Preprocessor_DOM implements Preprocessor {
* @return PPNode_DOM
*/
public function preprocessToObj( $text, $flags = 0 ) {
- wfProfileIn( __METHOD__ );
global $wgMemc, $wgPreprocessorCacheThreshold;
$xml = false;
$cacheable = ( $wgPreprocessorCacheThreshold !== false
&& strlen( $text ) > $wgPreprocessorCacheThreshold );
if ( $cacheable ) {
- wfProfileIn( __METHOD__ . '-cacheable' );
$cacheKey = wfMemcKey( 'preprocess-xml', md5( $text ), $flags );
$cacheValue = $wgMemc->get( $cacheKey );
@@ -169,11 +166,9 @@ class Preprocessor_DOM implements Preprocessor {
}
}
if ( $xml === false ) {
- wfProfileIn( __METHOD__ . '-cache-miss' );
$xml = $this->preprocessToXml( $text, $flags );
$cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . $xml;
$wgMemc->set( $cacheKey, $cacheValue, 86400 );
- wfProfileOut( __METHOD__ . '-cache-miss' );
wfDebugLog( "Preprocessor", "Saved preprocessor XML to memcached (key $cacheKey)" );
}
} else {
@@ -186,20 +181,17 @@ class Preprocessor_DOM implements Preprocessor {
$max = $this->parser->mOptions->getMaxGeneratedPPNodeCount();
if ( $this->parser->mGeneratedPPNodeCount > $max ) {
if ( $cacheable ) {
- wfProfileOut( __METHOD__ . '-cacheable' );
}
- wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . ': generated node count limit exceeded' );
}
- wfProfileIn( __METHOD__ . '-loadXML' );
$dom = new DOMDocument;
wfSuppressWarnings();
$result = $dom->loadXML( $xml );
wfRestoreWarnings();
if ( !$result ) {
// Try running the XML through UtfNormal to get rid of invalid characters
- $xml = UtfNormal::cleanUp( $xml );
+ $xml = UtfNormal\Validator::cleanUp( $xml );
// 1 << 19 == XML_PARSE_HUGE, needed so newer versions of libxml2
// don't barf when the XML is >256 levels deep.
$result = $dom->loadXML( $xml, 1 << 19 );
@@ -207,14 +199,10 @@ class Preprocessor_DOM implements Preprocessor {
if ( $result ) {
$obj = new PPNode_DOM( $dom->documentElement );
}
- wfProfileOut( __METHOD__ . '-loadXML' );
if ( $cacheable ) {
- wfProfileOut( __METHOD__ . '-cacheable' );
}
- wfProfileOut( __METHOD__ );
-
if ( !$result ) {
throw new MWException( __METHOD__ . ' generated invalid XML' );
}
@@ -227,7 +215,6 @@ class Preprocessor_DOM implements Preprocessor {
* @return string
*/
public function preprocessToXml( $text, $flags = 0 ) {
- wfProfileIn( __METHOD__ );
$rules = array(
'{' => array(
'end' => '}',
@@ -764,8 +751,6 @@ class Preprocessor_DOM implements Preprocessor {
$stack->rootAccum .= '</root>';
$xml = $stack->rootAccum;
- wfProfileOut( __METHOD__ );
-
return $xml;
}
}
@@ -1043,11 +1028,17 @@ class PPFrame_DOM implements PPFrame {
// Numbered parameter
$index = $nameNodes->item( 0 )->attributes->getNamedItem( 'index' )->textContent;
$index = $index - $indexOffset;
+ if ( isset( $namedArgs[$index] ) || isset( $numberedArgs[$index] ) ) {
+ $this->parser->addTrackingCategory( 'duplicate-args-category' );
+ }
$numberedArgs[$index] = $value->item( 0 );
unset( $namedArgs[$index] );
} else {
// Named parameter
$name = trim( $this->expand( $nameNodes->item( 0 ), PPFrame::STRIP_COMMENTS ) );
+ if ( isset( $namedArgs[$name] ) || isset( $numberedArgs[$name] ) ) {
+ $this->parser->addTrackingCategory( 'duplicate-args-category' );
+ }
$namedArgs[$name] = $value->item( 0 );
unset( $numberedArgs[$name] );
}
@@ -1095,7 +1086,6 @@ class PPFrame_DOM implements PPFrame {
);
return '<span class="error">Expansion depth limit exceeded</span>';
}
- wfProfileIn( __METHOD__ );
++$expansionDepth;
if ( $expansionDepth > $this->parser->mHighestExpansionDepth ) {
$this->parser->mHighestExpansionDepth = $expansionDepth;
@@ -1284,7 +1274,6 @@ class PPFrame_DOM implements PPFrame {
$newIterator = $contextNode->childNodes;
}
} else {
- wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . ': Invalid parameter type' );
}
@@ -1308,7 +1297,6 @@ class PPFrame_DOM implements PPFrame {
}
}
--$expansionDepth;
- wfProfileOut( __METHOD__ );
return $outStack[0];
}
diff --git a/includes/parser/Preprocessor_Hash.php b/includes/parser/Preprocessor_Hash.php
index 63763967..af91ad47 100644
--- a/includes/parser/Preprocessor_Hash.php
+++ b/includes/parser/Preprocessor_Hash.php
@@ -112,7 +112,6 @@ class Preprocessor_Hash implements Preprocessor {
* @return PPNode_Hash_Tree
*/
public function preprocessToObj( $text, $flags = 0 ) {
- wfProfileIn( __METHOD__ );
// Check cache.
global $wgMemc, $wgPreprocessorCacheThreshold;
@@ -121,7 +120,6 @@ class Preprocessor_Hash implements Preprocessor {
&& strlen( $text ) > $wgPreprocessorCacheThreshold;
if ( $cacheable ) {
- wfProfileIn( __METHOD__ . '-cacheable' );
$cacheKey = wfMemcKey( 'preprocess-hash', md5( $text ), $flags );
$cacheValue = $wgMemc->get( $cacheKey );
@@ -132,12 +130,9 @@ class Preprocessor_Hash implements Preprocessor {
// From the cache
wfDebugLog( "Preprocessor",
"Loaded preprocessor hash from memcached (key $cacheKey)" );
- wfProfileOut( __METHOD__ . '-cacheable' );
- wfProfileOut( __METHOD__ );
return $hash;
}
}
- wfProfileIn( __METHOD__ . '-cache-miss' );
}
$rules = array(
@@ -637,18 +632,12 @@ class Preprocessor_Hash implements Preprocessor {
}
if ( !$node ) {
if ( $cacheable ) {
- wfProfileOut( __METHOD__ . '-cache-miss' );
- wfProfileOut( __METHOD__ . '-cacheable' );
}
- wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . ': eqpos not found' );
}
if ( $node->name !== 'equals' ) {
if ( $cacheable ) {
- wfProfileOut( __METHOD__ . '-cache-miss' );
- wfProfileOut( __METHOD__ . '-cacheable' );
}
- wfProfileOut( __METHOD__ );
throw new MWException( __METHOD__ . ': eqpos is not equals' );
}
$equalsNode = $node;
@@ -748,12 +737,9 @@ class Preprocessor_Hash implements Preprocessor {
if ( $cacheable ) {
$cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . serialize( $rootNode );
$wgMemc->set( $cacheKey, $cacheValue, 86400 );
- wfProfileOut( __METHOD__ . '-cache-miss' );
- wfProfileOut( __METHOD__ . '-cacheable' );
wfDebugLog( "Preprocessor", "Saved preprocessor Hash to memcached (key $cacheKey)" );
}
- wfProfileOut( __METHOD__ );
return $rootNode;
}
}
@@ -985,11 +971,17 @@ class PPFrame_Hash implements PPFrame {
if ( $bits['index'] !== '' ) {
// Numbered parameter
$index = $bits['index'] - $indexOffset;
+ if ( isset( $namedArgs[$index] ) || isset( $numberedArgs[$index] ) ) {
+ $this->parser->addTrackingCategory( 'duplicate-args-category' );
+ }
$numberedArgs[$index] = $bits['value'];
unset( $namedArgs[$index] );
} else {
// Named parameter
$name = trim( $this->expand( $bits['name'], PPFrame::STRIP_COMMENTS ) );
+ if ( isset( $namedArgs[$name] ) || isset( $numberedArgs[$name] ) ) {
+ $this->parser->addTrackingCategory( 'duplicate-args-category' );
+ }
$namedArgs[$name] = $bits['value'];
unset( $numberedArgs[$name] );
}
diff --git a/includes/parser/StripState.php b/includes/parser/StripState.php
index 5d1743e6..51ae42dc 100644
--- a/includes/parser/StripState.php
+++ b/includes/parser/StripState.php
@@ -117,12 +117,10 @@ class StripState {
return $text;
}
- wfProfileIn( __METHOD__ );
$oldType = $this->tempType;
$this->tempType = $type;
$text = preg_replace_callback( $this->regex, array( $this, 'unstripCallback' ), $text );
$this->tempType = $oldType;
- wfProfileOut( __METHOD__ );
return $text;
}
diff --git a/includes/password/PasswordFactory.php b/includes/password/PasswordFactory.php
index 3b4ebb1a..86a3fefd 100644
--- a/includes/password/PasswordFactory.php
+++ b/includes/password/PasswordFactory.php
@@ -69,6 +69,15 @@ final class PasswordFactory {
}
/**
+ * Get the default password type
+ *
+ * @return string
+ */
+ public function getDefaultType() {
+ return $this->default;
+ }
+
+ /**
* Initialize the internal static variables using the global variables
*
* @param Config $config Configuration object to load data from
@@ -141,11 +150,15 @@ final class PasswordFactory {
* If no existing object is given, make a new default object. If one is given, clone that
* object. Then pass the plaintext to Password::crypt().
*
- * @param string $password Plaintext password
+ * @param string|null $password Plaintext password, or null for an invalid password
* @param Password|null $existing Optional existing hash to get options from
* @return Password
*/
public function newFromPlaintext( $password, Password $existing = null ) {
+ if ( $password === null ) {
+ return new InvalidPassword( $this, array( 'type' => '' ), null );
+ }
+
if ( $existing === null ) {
$config = $this->types[$this->default];
$obj = new $config['class']( $this, $config );
diff --git a/includes/poolcounter/PoolCounter.php b/includes/poolcounter/PoolCounter.php
index e77ffd7c..5692d731 100644
--- a/includes/poolcounter/PoolCounter.php
+++ b/includes/poolcounter/PoolCounter.php
@@ -34,7 +34,10 @@
* minutes and hundreds of read hits.
*
* The PoolCounter provides semaphore semantics for restricting the number
- * of workers that may be concurrently performing such single task.
+ * of workers that may be concurrently performing such single task. Only one
+ * key can be locked by any PoolCounter instance of a process, except for keys
+ * that start with "nowait:". However, only 0 timeouts (non-blocking requests)
+ * can be used with "nowait:" keys.
*
* By default PoolCounter_Stub is used, which provides no locking. You
* can get a useful one in the PoolCounter extension.
@@ -68,6 +71,15 @@ abstract class PoolCounter {
protected $timeout;
/**
+ * @var boolean Whether the key is a "might wait" key
+ */
+ private $isMightWaitKey;
+ /**
+ * @var boolean Whether this process holds a "might wait" lock key
+ */
+ private static $acquiredMightWaitKey = 0;
+
+ /**
* @param array $conf
* @param string $type
* @param string $key
@@ -84,6 +96,7 @@ abstract class PoolCounter {
$key = $this->hashKeyIntoSlots( $key, $this->slots );
}
$this->key = $key;
+ $this->isMightWaitKey = !preg_match( '/^nowait:/', $this->key );
}
/**
@@ -137,6 +150,48 @@ abstract class PoolCounter {
abstract public function release();
/**
+ * Checks that the lock request is sane.
+ * @return Status - good for sane requests fatal for insane
+ * @since 1.25
+ */
+ final protected function precheckAcquire() {
+ if ( $this->isMightWaitKey ) {
+ if ( self::$acquiredMightWaitKey ) {
+ /*
+ * The poolcounter itself is quite happy to allow you to wait
+ * on another lock while you have a lock you waited on already
+ * but we think that it is unlikely to be a good idea. So we
+ * made it an error. If you are _really_ _really_ sure it is a
+ * good idea then feel free to implement an unsafe flag or
+ * something.
+ */
+ return Status::newFatal( 'poolcounter-usage-error',
+ 'You may only aquire a single non-nowait lock.' );
+ }
+ } elseif ( $this->timeout !== 0 ) {
+ return Status::newFatal( 'poolcounter-usage-error',
+ 'Locks starting in nowait: must have 0 timeout.' );
+ }
+ return Status::newGood();
+ }
+
+ /**
+ * Update any lock tracking information when the lock is acquired
+ * @since 1.25
+ */
+ final protected function onAcquire() {
+ self::$acquiredMightWaitKey |= $this->isMightWaitKey;
+ }
+
+ /**
+ * Update any lock tracking information when the lock is released
+ * @since 1.25
+ */
+ final protected function onRelease() {
+ self::$acquiredMightWaitKey &= !$this->isMightWaitKey;
+ }
+
+ /**
* Given a key (any string) and the number of lots, returns a slot number (an integer from the [0..($slots-1)] range).
* This is used for a global limit on the number of instances of a given type that can acquire a lock.
* The hashing is deterministic so that PoolCounter::$workers is always an upper limit of how many instances with
diff --git a/includes/poolcounter/PoolCounterRedis.php b/includes/poolcounter/PoolCounterRedis.php
index d609f614..98797a30 100644
--- a/includes/poolcounter/PoolCounterRedis.php
+++ b/includes/poolcounter/PoolCounterRedis.php
@@ -121,19 +121,26 @@ class PoolCounterRedis extends PoolCounter {
}
function acquireForMe() {
- $section = new ProfileSection( __METHOD__ );
+
+ $status = $this->precheckAcquire();
+ if ( !$status->isGood() ) {
+ return $status;
+ }
return $this->waitForSlotOrNotif( self::AWAKE_ONE );
}
function acquireForAnyone() {
- $section = new ProfileSection( __METHOD__ );
+
+ $status = $this->precheckAcquire();
+ if ( !$status->isGood() ) {
+ return $status;
+ }
return $this->waitForSlotOrNotif( self::AWAKE_ALL );
}
function release() {
- $section = new ProfileSection( __METHOD__ );
if ( $this->slot === null ) {
return Status::newGood( PoolCounter::NOT_LOCKED ); // not locked
@@ -207,6 +214,8 @@ LUA;
$this->onRelease = null;
unset( self::$active[$this->session] );
+ $this->onRelease();
+
return Status::newGood( PoolCounter::RELEASED );
}
@@ -266,6 +275,8 @@ LUA;
self::$active[$this->session] = $this;
}
+ $this->onAcquire();
+
return Status::newGood( $slot === 'w' ? PoolCounter::DONE : PoolCounter::LOCKED );
}
diff --git a/includes/poolcounter/PoolWorkArticleView.php b/includes/poolcounter/PoolWorkArticleView.php
index 5e7e3912..a702d2e8 100644
--- a/includes/poolcounter/PoolWorkArticleView.php
+++ b/includes/poolcounter/PoolWorkArticleView.php
@@ -67,7 +67,8 @@ class PoolWorkArticleView extends PoolCounterWork {
$this->parserOptions = $parserOptions;
$this->content = $content;
$this->cacheKey = ParserCache::singleton()->getKey( $page, $parserOptions );
- parent::__construct( 'ArticleView', $this->cacheKey . ':revid:' . $revid );
+ $keyPrefix = $this->cacheKey ?: wfMemcKey( 'articleview', 'missingcachekey' );
+ parent::__construct( 'ArticleView', $keyPrefix . ':revid:' . $revid );
}
/**
@@ -153,12 +154,12 @@ class PoolWorkArticleView extends PoolCounterWork {
// Make sure file cache is not used on uncacheable content.
// Output that has magic words in it can still use the parser cache
// (if enabled), though it will generally expire sooner.
- if ( !$this->parserOutput->isCacheable() || $this->parserOutput->containsOldMagic() ) {
+ if ( !$this->parserOutput->isCacheable() ) {
$wgUseFileCache = false;
}
if ( $isCurrent ) {
- $this->page->doCascadeProtectionUpdates( $this->parserOutput );
+ $this->page->triggerOpportunisticLinksUpdate( $this->parserOutput );
}
return true;
diff --git a/includes/profiler/ProfileSection.php b/includes/profiler/ProfileSection.php
new file mode 100644
index 00000000..68ef6680
--- /dev/null
+++ b/includes/profiler/ProfileSection.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Function scope profiling assistant
+ *
+ * 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 Profiler
+ */
+
+/**
+ * Class for handling function-scope profiling
+ *
+ * @since 1.22
+ * @deprecated 1.25 No-op now
+ */
+class ProfileSection {
+ /**
+ * Begin profiling of a function and return an object that ends profiling
+ * of the function when that object leaves scope. As long as the object is
+ * not specifically linked to other objects, it will fall out of scope at
+ * the same moment that the function to be profiled terminates.
+ *
+ * This is typically called like:
+ * <code>$section = new ProfileSection( __METHOD__ );</code>
+ *
+ * @param string $name Name of the function to profile
+ */
+ public function __construct( $name ) {}
+}
diff --git a/includes/profiler/Profiler.php b/includes/profiler/Profiler.php
index 418b5d48..dbf80fa1 100644
--- a/includes/profiler/Profiler.php
+++ b/includes/profiler/Profiler.php
@@ -1,6 +1,6 @@
<?php
/**
- * Base class and functions for profiling.
+ * Base class for profiling.
*
* 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
@@ -23,113 +23,33 @@
*/
/**
- * Get system resource usage of current request context.
- * Invokes the getrusage(2) system call, requesting RUSAGE_SELF if on PHP5
- * or RUSAGE_THREAD if on HHVM. Returns false if getrusage is not available.
- *
- * @since 1.24
- * @return array|bool Resource usage data or false if no data available.
- */
-function wfGetRusage() {
- if ( !function_exists( 'getrusage' ) ) {
- return false;
- } elseif ( defined ( 'HHVM_VERSION' ) ) {
- return getrusage( 2 /* RUSAGE_THREAD */ );
- } else {
- return getrusage( 0 /* RUSAGE_SELF */ );
- }
-}
-
-/**
- * Begin profiling of a function
- * @param string $functionname Name of the function we will profile
- */
-function wfProfileIn( $functionname ) {
- if ( Profiler::$__instance === null ) { // use this directly to reduce overhead
- Profiler::instance();
- }
- if ( !( Profiler::$__instance instanceof ProfilerStub ) ) {
- Profiler::$__instance->profileIn( $functionname );
- }
-}
-
-/**
- * Stop profiling of a function
- * @param string $functionname Name of the function we have profiled
- */
-function wfProfileOut( $functionname = 'missing' ) {
- if ( Profiler::$__instance === null ) { // use this directly to reduce overhead
- Profiler::instance();
- }
- if ( !( Profiler::$__instance instanceof ProfilerStub ) ) {
- Profiler::$__instance->profileOut( $functionname );
- }
-}
-
-/**
- * Class for handling function-scope profiling
- *
- * @since 1.22
- */
-class ProfileSection {
- protected $name; // string; method name
- protected $enabled = false; // boolean; whether profiling is enabled
-
- /**
- * Begin profiling of a function and return an object that ends profiling of
- * the function when that object leaves scope. As long as the object is not
- * specifically linked to other objects, it will fall out of scope at the same
- * moment that the function to be profiled terminates.
- *
- * This is typically called like:
- * <code>$section = new ProfileSection( __METHOD__ );</code>
- *
- * @param string $name Name of the function to profile
- */
- public function __construct( $name ) {
- $this->name = $name;
- if ( Profiler::$__instance === null ) { // use this directly to reduce overhead
- Profiler::instance();
- }
- if ( !( Profiler::$__instance instanceof ProfilerStub ) ) {
- $this->enabled = true;
- Profiler::$__instance->profileIn( $this->name );
- }
- }
-
- function __destruct() {
- if ( $this->enabled ) {
- Profiler::$__instance->profileOut( $this->name );
- }
- }
-}
-
-/**
- * Profiler base class that defines the interface and some trivial functionality
+ * Profiler base class that defines the interface and some trivial
+ * functionality
*
* @ingroup Profiler
*/
abstract class Profiler {
/** @var string|bool Profiler ID for bucketing data */
- protected $mProfileID = false;
+ protected $profileID = false;
/** @var bool Whether MediaWiki is in a SkinTemplate output context */
- protected $mTemplated = false;
-
+ protected $templated = false;
+ /** @var array All of the params passed from $wgProfiler */
+ protected $params = array();
+ /** @var IContextSource Current request context */
+ protected $context = null;
/** @var TransactionProfiler */
protected $trxProfiler;
-
- // @codingStandardsIgnoreStart PSR2.Classes.PropertyDeclaration.Underscore
- /** @var Profiler Do not call this outside Profiler and ProfileSection */
- public static $__instance = null;
- // @codingStandardsIgnoreEnd
+ /** @var Profiler */
+ private static $instance = null;
/**
* @param array $params
*/
public function __construct( array $params ) {
if ( isset( $params['profileID'] ) ) {
- $this->mProfileID = $params['profileID'];
+ $this->profileID = $params['profileID'];
}
+ $this->params = $params;
$this->trxProfiler = new TransactionProfiler();
}
@@ -138,332 +58,243 @@ abstract class Profiler {
* @return Profiler
*/
final public static function instance() {
- if ( self::$__instance === null ) {
- global $wgProfiler;
+ if ( self::$instance === null ) {
+ global $wgProfiler, $wgProfileLimit;
+
+ $params = array(
+ 'class' => 'ProfilerStub',
+ 'sampling' => 1,
+ 'threshold' => $wgProfileLimit,
+ 'output' => array(),
+ );
if ( is_array( $wgProfiler ) ) {
- if ( !isset( $wgProfiler['class'] ) ) {
- $class = 'ProfilerStub';
- } elseif ( $wgProfiler['class'] === 'Profiler' ) {
- $class = 'ProfilerStub'; // b/c; don't explode
- } else {
- $class = $wgProfiler['class'];
- }
- self::$__instance = new $class( $wgProfiler );
- } elseif ( $wgProfiler instanceof Profiler ) {
- self::$__instance = $wgProfiler; // back-compat
- } else {
- self::$__instance = new ProfilerStub( array() );
+ $params = array_merge( $params, $wgProfiler );
}
- }
- return self::$__instance;
- }
- /**
- * Set the profiler to a specific profiler instance. Mostly for dumpHTML
- * @param Profiler $p
- */
- final public static function setInstance( Profiler $p ) {
- self::$__instance = $p;
- }
+ $inSample = mt_rand( 0, $params['sampling'] - 1 ) === 0;
+ if ( PHP_SAPI === 'cli' || !$inSample ) {
+ $params['class'] = 'ProfilerStub';
+ }
- /**
- * Return whether this a stub profiler
- *
- * @return bool
- */
- abstract public function isStub();
+ if ( !is_array( $params['output'] ) ) {
+ $params['output'] = array( $params['output'] );
+ }
+
+ self::$instance = new $params['class']( $params );
+ }
+ return self::$instance;
+ }
/**
- * Return whether this profiler stores data
- *
- * Called by Parser::braceSubstitution. If true, the parser will not
- * generate per-title profiling sections, to avoid overloading the
- * profiling data collector.
+ * Replace the current profiler with $profiler if no non-stub profiler is set
*
- * @see Profiler::logData()
- * @return bool
+ * @param Profiler $profiler
+ * @throws MWException
+ * @since 1.25
*/
- abstract public function isPersistent();
+ final public static function replaceStubInstance( Profiler $profiler ) {
+ if ( self::$instance && !( self::$instance instanceof ProfilerStub ) ) {
+ throw new MWException( 'Could not replace non-stub profiler instance.' );
+ } else {
+ self::$instance = $profiler;
+ }
+ }
/**
* @param string $id
*/
public function setProfileID( $id ) {
- $this->mProfileID = $id;
+ $this->profileID = $id;
}
/**
* @return string
*/
public function getProfileID() {
- if ( $this->mProfileID === false ) {
+ if ( $this->profileID === false ) {
return wfWikiID();
} else {
- return $this->mProfileID;
+ return $this->profileID;
}
}
/**
- * Called by wfProfieIn()
- *
- * @param string $functionname
- */
- abstract public function profileIn( $functionname );
-
- /**
- * Called by wfProfieOut()
- *
- * @param string $functionname
- */
- abstract public function profileOut( $functionname );
-
- /**
- * Mark a DB as in a transaction with one or more writes pending
+ * Sets the context for this Profiler
*
- * Note that there can be multiple connections to a single DB.
- *
- * @param string $server DB server
- * @param string $db DB name
- * @param string $id Resource ID string of connection
+ * @param IContextSource $context
+ * @since 1.25
*/
- public function transactionWritingIn( $server, $db, $id = '' ) {
- $this->trxProfiler->transactionWritingIn( $server, $db, $id );
+ public function setContext( $context ) {
+ $this->context = $context;
}
/**
- * Mark a DB as no longer in a transaction
- *
- * This will check if locks are possibly held for longer than
- * needed and log any affected transactions to a special DB log.
- * Note that there can be multiple connections to a single DB.
+ * Gets the context for this Profiler
*
- * @param string $server DB server
- * @param string $db DB name
- * @param string $id Resource ID string of connection
+ * @return IContextSource
+ * @since 1.25
*/
- public function transactionWritingOut( $server, $db, $id = '' ) {
- $this->trxProfiler->transactionWritingOut( $server, $db, $id );
+ public function getContext() {
+ if ( $this->context ) {
+ return $this->context;
+ } else {
+ wfDebug( __METHOD__ . " called and \$context is null. " .
+ "Return RequestContext::getMain(); for sanity\n" );
+ return RequestContext::getMain();
+ }
}
- /**
- * Close opened profiling sections
- */
- abstract public function close();
+ // Kept BC for now, remove when possible
+ public function profileIn( $functionname ) {}
+ public function profileOut( $functionname ) {}
/**
- * Log the data to some store or even the page output
+ * Mark the start of a custom profiling frame (e.g. DB queries).
+ * The frame ends when the result of this method falls out of scope.
+ *
+ * @param string $section
+ * @return ScopedCallback|null
+ * @since 1.25
*/
- abstract public function logData();
+ abstract public function scopedProfileIn( $section );
/**
- * Mark this call as templated or not
- *
- * @param bool $t
+ * @param ScopedCallback $section
*/
- public function setTemplated( $t ) {
- $this->mTemplated = $t;
+ public function scopedProfileOut( ScopedCallback &$section = null ) {
+ $section = null;
}
/**
- * Returns a profiling output to be stored in debug file
- *
- * @return string
+ * @return TransactionProfiler
+ * @since 1.25
*/
- abstract public function getOutput();
+ public function getTransactionProfiler() {
+ return $this->trxProfiler;
+ }
/**
- * @return array
+ * Close opened profiling sections
*/
- abstract public function getRawData();
+ abstract public function close();
/**
- * Get the initial time of the request, based either on $wgRequestTime or
- * $wgRUstart. Will return null if not able to find data.
+ * Get all usable outputs.
*
- * @param string|bool $metric Metric to use, with the following possibilities:
- * - user: User CPU time (without system calls)
- * - cpu: Total CPU time (user and system calls)
- * - wall (or any other string): elapsed time
- * - false (default): will fall back to default metric
- * @return float|null
+ * @throws MWException
+ * @return array Array of ProfilerOutput instances.
+ * @since 1.25
*/
- protected function getTime( $metric = 'wall' ) {
- if ( $metric === 'cpu' || $metric === 'user' ) {
- $ru = wfGetRusage();
- if ( !$ru ) {
- return 0;
+ private function getOutputs() {
+ $outputs = array();
+ foreach ( $this->params['output'] as $outputType ) {
+ // The class may be specified as either the full class name (for
+ // example, 'ProfilerOutputUdp') or (for backward compatibility)
+ // the trailing portion of the class name (for example, 'udp').
+ $outputClass = strpos( $outputType, 'ProfilerOutput' ) === false
+ ? 'ProfilerOutput' . ucfirst( $outputType )
+ : $outputType;
+ if ( !class_exists( $outputClass ) ) {
+ throw new MWException( "'$outputType' is an invalid output type" );
}
- $time = $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6;
- if ( $metric === 'cpu' ) {
- # This is the time of system calls, added to the user time
- # it gives the total CPU time
- $time += $ru['ru_stime.tv_sec'] + $ru['ru_stime.tv_usec'] / 1e6;
+ $outputInstance = new $outputClass( $this, $this->params );
+ if ( $outputInstance->canUse() ) {
+ $outputs[] = $outputInstance;
}
- return $time;
- } else {
- return microtime( true );
}
+ return $outputs;
}
/**
- * Get the initial time of the request, based either on $wgRequestTime or
- * $wgRUstart. Will return null if not able to find data.
+ * Log the data to some store or even the page output
*
- * @param string|bool $metric Metric to use, with the following possibilities:
- * - user: User CPU time (without system calls)
- * - cpu: Total CPU time (user and system calls)
- * - wall (or any other string): elapsed time
- * - false (default): will fall back to default metric
- * @return float|null
+ * @since 1.25
*/
- protected function getInitialTime( $metric = 'wall' ) {
- global $wgRequestTime, $wgRUstart;
+ public function logData() {
+ $request = $this->getContext()->getRequest();
- if ( $metric === 'cpu' || $metric === 'user' ) {
- if ( !count( $wgRUstart ) ) {
- return null;
- }
+ $timeElapsed = $request->getElapsedTime();
+ $timeElapsedThreshold = $this->params['threshold'];
+ if ( $timeElapsed <= $timeElapsedThreshold ) {
+ return;
+ }
- $time = $wgRUstart['ru_utime.tv_sec'] + $wgRUstart['ru_utime.tv_usec'] / 1e6;
- if ( $metric === 'cpu' ) {
- # This is the time of system calls, added to the user time
- # it gives the total CPU time
- $time += $wgRUstart['ru_stime.tv_sec'] + $wgRUstart['ru_stime.tv_usec'] / 1e6;
- }
- return $time;
- } else {
- if ( empty( $wgRequestTime ) ) {
- return null;
- } else {
- return $wgRequestTime;
- }
+ $outputs = $this->getOutputs();
+ if ( !$outputs ) {
+ return;
+ }
+
+ $stats = $this->getFunctionStats();
+ foreach ( $outputs as $output ) {
+ $output->log( $stats );
}
}
/**
- * Add an entry in the debug log file
- *
- * @param string $s String to output
+ * Get the content type sent out to the client.
+ * Used for profilers that output instead of store data.
+ * @return string
+ * @since 1.25
*/
- protected function debug( $s ) {
- if ( function_exists( 'wfDebug' ) ) {
- wfDebug( $s );
+ public function getContentType() {
+ foreach ( headers_list() as $header ) {
+ if ( preg_match( '#^content-type: (\w+/\w+);?#i', $header, $m ) ) {
+ return $m[1];
+ }
}
+ return null;
}
/**
- * Add an entry in the debug log group
+ * Mark this call as templated or not
*
- * @param string $group Group to send the message to
- * @param string $s String to output
+ * @param bool $t
*/
- protected function debugGroup( $group, $s ) {
- if ( function_exists( 'wfDebugLog' ) ) {
- wfDebugLog( $group, $s );
- }
+ public function setTemplated( $t ) {
+ $this->templated = $t;
}
-}
-
-/**
- * Helper class that detects high-contention DB queries via profiling calls
- *
- * This class is meant to work with a Profiler, as the later already knows
- * when methods start and finish (which may take place during transactions).
- *
- * @since 1.24
- */
-class TransactionProfiler {
- /** @var float Seconds */
- protected $mDBLockThreshold = 3.0;
- /** @var array DB/server name => (active trx count, time, DBs involved) */
- protected $mDBTrxHoldingLocks = array();
- /** @var array DB/server name => list of (function name, elapsed time) */
- protected $mDBTrxMethodTimes = array();
/**
- * Mark a DB as in a transaction with one or more writes pending
- *
- * Note that there can be multiple connections to a single DB.
+ * Was this call as templated or not
*
- * @param string $server DB server
- * @param string $db DB name
- * @param string $id ID string of transaction
+ * @return bool
*/
- public function transactionWritingIn( $server, $db, $id ) {
- $name = "{$server} ({$db}) (TRX#$id)";
- if ( isset( $this->mDBTrxHoldingLocks[$name] ) ) {
- wfDebugLog( 'DBPerformance', "Nested transaction for '$name' - out of sync." );
- }
- $this->mDBTrxHoldingLocks[$name] =
- array( 'start' => microtime( true ), 'conns' => array() );
- $this->mDBTrxMethodTimes[$name] = array();
-
- foreach ( $this->mDBTrxHoldingLocks as $name => &$info ) {
- $info['conns'][$name] = 1; // track all DBs in transactions for this transaction
- }
+ public function getTemplated() {
+ return $this->templated;
}
/**
- * Register the name and time of a method for slow DB trx detection
+ * Get the aggregated inclusive profiling data for each method
*
- * This method is only to be called by the Profiler class as methods finish
+ * The percent time for each time is based on the current "total" time
+ * used is based on all methods so far. This method can therefore be
+ * called several times in between several profiling calls without the
+ * delays in usage of the profiler skewing the results. A "-total" entry
+ * is always included in the results.
*
- * @param string $method Function name
- * @param float $realtime Wal time ellapsed
+ * When a call chain involves a method invoked within itself, any
+ * entries for the cyclic invocation should be be demarked with "@".
+ * This makes filtering them out easier and follows the xhprof style.
+ *
+ * @return array List of method entries arrays, each having:
+ * - name : method name
+ * - calls : the number of invoking calls
+ * - real : real time ellapsed (ms)
+ * - %real : percent real time
+ * - cpu : CPU time ellapsed (ms)
+ * - %cpu : percent CPU time
+ * - memory : memory used (bytes)
+ * - %memory : percent memory used
+ * - min_real : min real time in a call (ms)
+ * - max_real : max real time in a call (ms)
+ * @since 1.25
*/
- public function recordFunctionCompletion( $method, $realtime ) {
- if ( !$this->mDBTrxHoldingLocks ) {
- return; // short-circuit
- // @todo hardcoded check is a tad janky (what about FOR UPDATE?)
- } elseif ( !preg_match( '/^query-m: (?!SELECT)/', $method )
- && $realtime < $this->mDBLockThreshold
- ) {
- return; // not a DB master query nor slow enough
- }
- $now = microtime( true );
- foreach ( $this->mDBTrxHoldingLocks as $name => $info ) {
- // Hacky check to exclude entries from before the first TRX write
- if ( ( $now - $realtime ) >= $info['start'] ) {
- $this->mDBTrxMethodTimes[$name][] = array( $method, $realtime );
- }
- }
- }
+ abstract public function getFunctionStats();
/**
- * Mark a DB as no longer in a transaction
- *
- * This will check if locks are possibly held for longer than
- * needed and log any affected transactions to a special DB log.
- * Note that there can be multiple connections to a single DB.
+ * Returns a profiling output to be stored in debug file
*
- * @param string $server DB server
- * @param string $db DB name
- * @param string $id ID string of transaction
+ * @return string
*/
- public function transactionWritingOut( $server, $db, $id ) {
- $name = "{$server} ({$db}) (TRX#$id)";
- if ( !isset( $this->mDBTrxMethodTimes[$name] ) ) {
- wfDebugLog( 'DBPerformance', "Detected no transaction for '$name' - out of sync." );
- return;
- }
- $slow = false;
- foreach ( $this->mDBTrxMethodTimes[$name] as $info ) {
- $realtime = $info[1];
- if ( $realtime >= $this->mDBLockThreshold ) {
- $slow = true;
- break;
- }
- }
- if ( $slow ) {
- $dbs = implode( ', ', array_keys( $this->mDBTrxHoldingLocks[$name]['conns'] ) );
- $msg = "Sub-optimal transaction on DB(s) [{$dbs}]:\n";
- foreach ( $this->mDBTrxMethodTimes[$name] as $i => $info ) {
- list( $method, $realtime ) = $info;
- $msg .= sprintf( "%d\t%.6f\t%s\n", $i, $realtime, $method );
- }
- wfDebugLog( 'DBPerformance', $msg );
- }
- unset( $this->mDBTrxHoldingLocks[$name] );
- unset( $this->mDBTrxMethodTimes[$name] );
- }
+ abstract public function getOutput();
}
diff --git a/includes/profiler/ProfilerFunctions.php b/includes/profiler/ProfilerFunctions.php
new file mode 100644
index 00000000..4984e77d
--- /dev/null
+++ b/includes/profiler/ProfilerFunctions.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Core profiling functions. Have to exist before basically anything.
+ *
+ * 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 Profiler
+ */
+
+/**
+ * Get system resource usage of current request context.
+ * Invokes the getrusage(2) system call, requesting RUSAGE_SELF if on PHP5
+ * or RUSAGE_THREAD if on HHVM. Returns false if getrusage is not available.
+ *
+ * @since 1.24
+ * @return array|bool Resource usage data or false if no data available.
+ */
+function wfGetRusage() {
+ if ( !function_exists( 'getrusage' ) ) {
+ return false;
+ } elseif ( defined ( 'HHVM_VERSION' ) ) {
+ return getrusage( 2 /* RUSAGE_THREAD */ );
+ } else {
+ return getrusage( 0 /* RUSAGE_SELF */ );
+ }
+}
+
+/**
+ * Begin profiling of a function
+ * @param string $functionname Name of the function we will profile
+ * @deprecated 1.25
+ */
+function wfProfileIn( $functionname ) {
+}
+
+/**
+ * Stop profiling of a function
+ * @param string $functionname Name of the function we have profiled
+ * @deprecated 1.25
+ */
+function wfProfileOut( $functionname = 'missing' ) {
+}
diff --git a/includes/profiler/ProfilerMwprof.php b/includes/profiler/ProfilerMwprof.php
deleted file mode 100644
index af3c7741..00000000
--- a/includes/profiler/ProfilerMwprof.php
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-/**
- * Profiler class for Mwprof.
- *
- * 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 Profiler
- */
-
-/**
- * Profiler class for Mwprof.
- *
- * Mwprof is a high-performance MediaWiki profiling data collector, designed to
- * collect profiling data from multiple hosts running in tandem. This class
- * serializes profiling samples into MessagePack arrays and sends them to an
- * Mwprof instance via UDP.
- *
- * @see https://github.com/wikimedia/operations-software-mwprof
- * @since 1.23
- */
-class ProfilerMwprof extends Profiler {
- /** @var array Queue of open profile calls with start data */
- protected $mWorkStack = array();
-
- /** @var array Map of (function name => aggregate data array) */
- protected $mCollated = array();
- /** @var array Cache of a standard broken collation entry */
- protected $mErrorEntry;
-
- // Message types
- const TYPE_SINGLE = 1;
- const TYPE_RUNNING = 2;
-
- public function isStub() {
- return false;
- }
-
- public function isPersistent() {
- return true;
- }
-
- /**
- * Start a profiling section.
- *
- * Marks the beginning of the function or code-block that should be time
- * and logged under some specific name.
- *
- * @param string $inName Section to start
- */
- public function profileIn( $inName ) {
- $this->mWorkStack[] = array( $inName, count( $this->mWorkStack ),
- $this->getTime(), $this->getTime( 'cpu' ), 0 );
- }
-
- /**
- * Close a profiling section.
- *
- * Marks the end of the function or code-block that should be timed and
- * logged under some specific name.
- *
- * @param string $outName Section to close
- */
- public function profileOut( $outName ) {
- list( $inName, $inCount, $inWall, $inCpu ) = array_pop( $this->mWorkStack );
-
- // Check for unbalanced profileIn / profileOut calls.
- // Bad entries are logged but not sent.
- if ( $inName !== $outName ) {
- $this->debugGroup( 'ProfilerUnbalanced', json_encode( array( $inName, $outName ) ) );
- return;
- }
-
- $elapsedCpu = $this->getTime( 'cpu' ) - $inCpu;
- $elapsedWall = $this->getTime() - $inWall;
- $this->updateRunningEntry( $outName, $elapsedCpu, $elapsedWall );
- $this->trxProfiler->recordFunctionCompletion( $outName, $elapsedWall );
- }
-
- /**
- * Update an entry with timing data.
- *
- * @param string $name Section name
- * @param float $elapsedCpu Elapsed CPU time
- * @param float $elapsedWall Elapsed wall-clock time
- */
- public function updateRunningEntry( $name, $elapsedCpu, $elapsedWall ) {
- // If this is the first measurement for this entry, store plain values.
- // Many profiled functions will only be called once per request.
- if ( !isset( $this->mCollated[$name] ) ) {
- $this->mCollated[$name] = array(
- 'cpu' => $elapsedCpu,
- 'wall' => $elapsedWall,
- 'count' => 1,
- );
- return;
- }
-
- $entry = &$this->mCollated[$name];
-
- // If it's the second measurement, convert the plain values to
- // RunningStat instances, so we can push the incoming values on top.
- if ( $entry['count'] === 1 ) {
- $cpu = new RunningStat();
- $cpu->push( $entry['cpu'] );
- $entry['cpu'] = $cpu;
-
- $wall = new RunningStat();
- $wall->push( $entry['wall'] );
- $entry['wall'] = $wall;
- }
-
- $entry['count']++;
- $entry['cpu']->push( $elapsedCpu );
- $entry['wall']->push( $elapsedWall );
- }
-
- /**
- * @return array
- */
- public function getRawData() {
- // This method is called before shutdown in the footer method on Skins.
- // If some outer methods have not yet called wfProfileOut(), work around
- // that by clearing anything in the work stack to just the "-total" entry.
- if ( count( $this->mWorkStack ) > 1 ) {
- $oldWorkStack = $this->mWorkStack;
- $this->mWorkStack = array( $this->mWorkStack[0] ); // just the "-total" one
- } else {
- $oldWorkStack = null;
- }
- $this->close();
- // If this trick is used, then the old work stack is swapped back afterwards.
- // This means that logData() will still make use of all the method data since
- // the missing wfProfileOut() calls should be made by the time it is called.
- if ( $oldWorkStack ) {
- $this->mWorkStack = $oldWorkStack;
- }
-
- $totalWall = 0.0;
- $profile = array();
- foreach ( $this->mCollated as $fname => $data ) {
- if ( $data['count'] == 1 ) {
- $profile[] = array(
- 'name' => $fname,
- 'calls' => $data['count'],
- 'elapsed' => $data['wall'] * 1000,
- 'memory' => 0, // not supported
- 'min' => $data['wall'] * 1000,
- 'max' => $data['wall'] * 1000,
- 'overhead' => 0, // not supported
- 'periods' => array() // not supported
- );
- $totalWall += $data['wall'];
- } else {
- $profile[] = array(
- 'name' => $fname,
- 'calls' => $data['count'],
- 'elapsed' => $data['wall']->n * $data['wall']->getMean() * 1000,
- 'memory' => 0, // not supported
- 'min' => $data['wall']->min * 1000,
- 'max' => $data['wall']->max * 1000,
- 'overhead' => 0, // not supported
- 'periods' => array() // not supported
- );
- $totalWall += $data['wall']->n * $data['wall']->getMean();
- }
- }
- $totalWall = $totalWall * 1000;
-
- foreach ( $profile as &$item ) {
- $item['percent'] = $totalWall ? 100 * $item['elapsed'] / $totalWall : 0;
- }
-
- return $profile;
- }
-
- /**
- * Serialize profiling data and send to a profiling data aggregator.
- *
- * Individual entries are represented as arrays and then encoded using
- * MessagePack, an efficient binary data-interchange format. Encoded
- * entries are accumulated into a buffer and sent in batch via UDP to the
- * profiling data aggregator.
- */
- public function logData() {
- global $wgUDPProfilerHost, $wgUDPProfilerPort;
-
- $this->close();
-
- if ( !function_exists( 'socket_create' ) ) {
- return; // avoid fatal
- }
-
- $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
- socket_connect( $sock, $wgUDPProfilerHost, $wgUDPProfilerPort );
- $bufferLength = 0;
- $buffer = '';
- foreach ( $this->mCollated as $name => $entry ) {
- $count = $entry['count'];
- $cpu = $entry['cpu'];
- $wall = $entry['wall'];
-
- if ( $count === 1 ) {
- $data = array( self::TYPE_SINGLE, $name, $cpu, $wall );
- } else {
- $data = array( self::TYPE_RUNNING, $name, $count,
- $cpu->m1, $cpu->m2, $cpu->min, $cpu->max,
- $wall->m1, $wall->m2, $wall->min, $wall->max );
- }
-
- $encoded = MWMessagePack::pack( $data );
- $length = strlen( $encoded );
-
- // If adding this entry would cause the size of the buffer to
- // exceed the standard ethernet MTU size less the UDP header,
- // send all pending data and reset the buffer. Otherwise, continue
- // accumulating entries into the current buffer.
- if ( $length + $bufferLength > 1450 ) {
- socket_send( $sock, $buffer, $bufferLength, 0 );
- $buffer = '';
- $bufferLength = 0;
- }
- $buffer .= $encoded;
- $bufferLength += $length;
- }
- if ( $bufferLength !== 0 ) {
- socket_send( $sock, $buffer, $bufferLength, 0 );
- }
- }
-
- /**
- * Close opened profiling sections
- */
- public function close() {
- while ( count( $this->mWorkStack ) ) {
- $this->profileOut( 'close' );
- }
- }
-
- public function getOutput() {
- return ''; // no report
- }
-}
diff --git a/includes/profiler/ProfilerSectionOnly.php b/includes/profiler/ProfilerSectionOnly.php
new file mode 100644
index 00000000..1f8d33b1
--- /dev/null
+++ b/includes/profiler/ProfilerSectionOnly.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Profiler that only tracks explicit profiling sections
+ *
+ * @code
+ * $wgProfiler['class'] = 'ProfilerSectionOnly';
+ * $wgProfiler['output'] = 'text';
+ * $wgProfiler['visible'] = true;
+ * @endcode
+ *
+ * @author Aaron Schulz
+ * @ingroup Profiler
+ * @since 1.25
+ */
+class ProfilerSectionOnly extends Profiler {
+ /** @var SectionProfiler */
+ protected $sprofiler;
+
+ public function __construct( array $params = array() ) {
+ parent::__construct( $params );
+ $this->sprofiler = new SectionProfiler();
+ }
+
+ public function scopedProfileIn( $section ) {
+ return $this->sprofiler->scopedProfileIn( $section );
+ }
+
+ public function close() {
+ }
+
+ public function getFunctionStats() {
+ return $this->sprofiler->getFunctionStats();
+ }
+
+ public function getOutput() {
+ return $this->getFunctionReport();
+ }
+
+ /**
+ * Get a report of profiled functions sorted by inclusive wall clock time
+ * in descending order.
+ *
+ * Each line of the report includes this data:
+ * - Function name
+ * - Number of times function was called
+ * - Total wall clock time spent in function in microseconds
+ * - Minimum wall clock time spent in function in microseconds
+ * - Average wall clock time spent in function in microseconds
+ * - Maximum wall clock time spent in function in microseconds
+ * - Percentage of total wall clock time spent in function
+ * - Total delta of memory usage from start to end of function in bytes
+ *
+ * @return string
+ */
+ protected function getFunctionReport() {
+ $data = $this->getFunctionStats();
+ usort( $data, function( $a, $b ) {
+ if ( $a['real'] === $b['real'] ) {
+ return 0;
+ }
+ return ( $a['real'] > $b['real'] ) ? -1 : 1; // descending
+ } );
+
+ $width = 140;
+ $nameWidth = $width - 65;
+ $format = "%-{$nameWidth}s %6d %9d %9d %9d %9d %7.3f%% %9d";
+ $out = array();
+ $out[] = sprintf( "%-{$nameWidth}s %6s %9s %9s %9s %9s %7s %9s",
+ 'Name', 'Calls', 'Total', 'Min', 'Each', 'Max', '%', 'Mem'
+ );
+ foreach ( $data as $stats ) {
+ $out[] = sprintf( $format,
+ $stats['name'],
+ $stats['calls'],
+ $stats['real'] * 1000,
+ $stats['min_real'] * 1000,
+ $stats['real'] / $stats['calls'] * 1000,
+ $stats['max_real'] * 1000,
+ $stats['%real'],
+ $stats['memory']
+ );
+ }
+ return implode( "\n", $out );
+ }
+}
diff --git a/includes/profiler/ProfilerSimpleDB.php b/includes/profiler/ProfilerSimpleDB.php
deleted file mode 100644
index 7ef0ad05..00000000
--- a/includes/profiler/ProfilerSimpleDB.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/**
- * Profiler storing information in the DB.
- *
- * 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 Profiler
- */
-
-/**
- * $wgProfiler['class'] = 'ProfilerSimpleDB';
- *
- * @ingroup Profiler
- */
-class ProfilerSimpleDB extends ProfilerStandard {
- protected function collateOnly() {
- return true;
- }
-
- public function isPersistent() {
- return true;
- }
-
- /**
- * Log the whole profiling data into the database.
- */
- public function logData() {
- global $wgProfilePerHost;
-
- # Do not log anything if database is readonly (bug 5375)
- if ( wfReadOnly() ) {
- return;
- }
-
- if ( $wgProfilePerHost ) {
- $pfhost = wfHostname();
- } else {
- $pfhost = '';
- }
-
- try {
- $this->collateData();
-
- $dbw = wfGetDB( DB_MASTER );
- $useTrx = ( $dbw->getType() === 'sqlite' ); // much faster
- if ( $useTrx ) {
- $dbw->startAtomic( __METHOD__ );
- }
- foreach ( $this->mCollated as $name => $data ) {
- $eventCount = $data['count'];
- $timeSum = (float)( $data['real'] * 1000 );
- $memorySum = (float)$data['memory'];
- $name = substr( $name, 0, 255 );
-
- // Kludge
- $timeSum = $timeSum >= 0 ? $timeSum : 0;
- $memorySum = $memorySum >= 0 ? $memorySum : 0;
-
- $dbw->update( 'profiling',
- array(
- "pf_count=pf_count+{$eventCount}",
- "pf_time=pf_time+{$timeSum}",
- "pf_memory=pf_memory+{$memorySum}",
- ),
- array(
- 'pf_name' => $name,
- 'pf_server' => $pfhost,
- ),
- __METHOD__ );
-
- $rc = $dbw->affectedRows();
- if ( $rc == 0 ) {
- $dbw->insert( 'profiling',
- array(
- 'pf_name' => $name,
- 'pf_count' => $eventCount,
- 'pf_time' => $timeSum,
- 'pf_memory' => $memorySum,
- 'pf_server' => $pfhost
- ),
- __METHOD__,
- array( 'IGNORE' )
- );
- }
- // When we upgrade to mysql 4.1, the insert+update
- // can be merged into just a insert with this construct added:
- // "ON DUPLICATE KEY UPDATE ".
- // "pf_count=pf_count + VALUES(pf_count), ".
- // "pf_time=pf_time + VALUES(pf_time)";
- }
- if ( $useTrx ) {
- $dbw->endAtomic( __METHOD__ );
- }
- } catch ( DBError $e ) {
- }
- }
-}
diff --git a/includes/profiler/ProfilerSimpleText.php b/includes/profiler/ProfilerSimpleText.php
deleted file mode 100644
index 0ee7aad2..00000000
--- a/includes/profiler/ProfilerSimpleText.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-/**
- * Profiler showing output in page source.
- *
- * 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 Profiler
- */
-
-/**
- * The least sophisticated profiler output class possible, view your source! :)
- *
- * Put the following 2 lines in StartProfiler.php:
- *
- * $wgProfiler['class'] = 'ProfilerSimpleText';
- * $wgProfiler['visible'] = true;
- *
- * @ingroup Profiler
- */
-class ProfilerSimpleText extends ProfilerStandard {
- public $visible = false; /* Show as <PRE> or <!-- ? */
- static private $out;
-
- public function __construct( $profileConfig ) {
- if ( isset( $profileConfig['visible'] ) && $profileConfig['visible'] ) {
- $this->visible = true;
- }
- parent::__construct( $profileConfig );
- }
-
- protected function collateOnly() {
- return true;
- }
-
- public function logData() {
- if ( $this->mTemplated ) {
- $this->close();
- $totalReal = isset( $this->mCollated['-total'] )
- ? $this->mCollated['-total']['real']
- : 0; // profiling mismatch error?
- uasort( $this->mCollated, array( 'self', 'sort' ) );
- array_walk( $this->mCollated, array( 'self', 'format' ), $totalReal );
- if ( PHP_SAPI === 'cli' ) {
- print "<!--\n" . self::$out . "\n-->\n";
- } elseif ( $this->getContentType() === 'text/html' ) {
- if ( $this->visible ) {
- print '<pre>' . self::$out . '</pre>';
- } else {
- print "<!--\n" . self::$out . "\n-->\n";
- }
- } elseif ( $this->getContentType() === 'text/javascript' ) {
- print "\n/*\n" . self::$out . "*/\n";
- } elseif ( $this->getContentType() === 'text/css' ) {
- print "\n/*\n" . self::$out . "*/\n";
- }
- }
- }
-
- static function sort( $a, $b ) {
- return $a['real'] < $b['real']; /* sort descending by time elapsed */
- }
-
- static function format( $item, $key, $totalReal ) {
- $perc = $totalReal ? $item['real'] / $totalReal * 100 : 0;
- self::$out .= sprintf( "%6.2f%% %3.6f %6d - %s\n",
- $perc, $item['real'], $item['count'], $key );
- }
-}
diff --git a/includes/profiler/ProfilerSimpleTrace.php b/includes/profiler/ProfilerSimpleTrace.php
deleted file mode 100644
index 2a444948..00000000
--- a/includes/profiler/ProfilerSimpleTrace.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/**
- * Profiler showing execution trace.
- *
- * 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 Profiler
- */
-
-/**
- * Execution trace profiler
- * @todo document methods (?)
- * @ingroup Profiler
- */
-class ProfilerSimpleTrace extends ProfilerStandard {
- protected $trace = "Beginning trace: \n";
- protected $memory = 0;
-
- protected function collateOnly() {
- return true;
- }
-
- public function profileIn( $functionname ) {
- parent::profileIn( $functionname );
-
- $this->trace .= " " . sprintf( "%6.1f", $this->memoryDiff() ) .
- str_repeat( " ", count( $this->mWorkStack ) ) . " > " . $functionname . "\n";
- }
-
- public function profileOut( $functionname ) {
- $item = end( $this->mWorkStack );
-
- parent::profileOut( $functionname );
-
- if ( !$item ) {
- $this->trace .= "Profiling error: $functionname\n";
- } else {
- list( $ofname, /* $ocount */, $ortime ) = $item;
- if ( $functionname == 'close' ) {
- $message = "Profile section ended by close(): {$ofname}";
- $functionname = $ofname;
- $this->trace .= $message . "\n";
- } elseif ( $ofname != $functionname ) {
- $this->trace .= "Profiling error: in({$ofname}), out($functionname)";
- }
- $elapsedreal = $this->getTime() - $ortime;
- $this->trace .= sprintf( "%03.6f %6.1f", $elapsedreal, $this->memoryDiff() ) .
- str_repeat( " ", count( $this->mWorkStack ) + 1 ) . " < " . $functionname . "\n";
- }
- }
-
- protected function memoryDiff() {
- $diff = memory_get_usage() - $this->memory;
- $this->memory = memory_get_usage();
- return $diff / 1024;
- }
-
- public function logData() {
- if ( $this->mTemplated ) {
- if ( PHP_SAPI === 'cli' ) {
- print "<!-- \n {$this->trace} \n -->";
- } elseif ( $this->getContentType() === 'text/html' ) {
- print "<!-- \n {$this->trace} \n -->";
- } elseif ( $this->getContentType() === 'text/javascript' ) {
- print "\n/*\n {$this->trace}\n*/";
- } elseif ( $this->getContentType() === 'text/css' ) {
- print "\n/*\n {$this->trace}\n*/";
- }
- }
- }
-}
diff --git a/includes/profiler/ProfilerSimpleUDP.php b/includes/profiler/ProfilerSimpleUDP.php
deleted file mode 100644
index 627b4de2..00000000
--- a/includes/profiler/ProfilerSimpleUDP.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-/**
- * Profiler sending messages over UDP.
- *
- * 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 Profiler
- */
-
-/**
- * ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
- * (the one from
- * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
- * @ingroup Profiler
- */
-class ProfilerSimpleUDP extends ProfilerStandard {
- protected function collateOnly() {
- return true;
- }
-
- public function isPersistent() {
- return true;
- }
-
- public function logData() {
- global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgUDPProfilerFormatString;
-
- $this->close();
-
- if ( !function_exists( 'socket_create' ) ) {
- # Sockets are not enabled
- return;
- }
-
- $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
- $plength = 0;
- $packet = "";
- foreach ( $this->mCollated as $entry => $pfdata ) {
- if ( !isset( $pfdata['count'] )
- || !isset( $pfdata['cpu'] )
- || !isset( $pfdata['cpu_sq'] )
- || !isset( $pfdata['real'] )
- || !isset( $pfdata['real_sq'] ) ) {
- continue;
- }
- $pfline = sprintf( $wgUDPProfilerFormatString, $this->getProfileID(), $pfdata['count'],
- $pfdata['cpu'], $pfdata['cpu_sq'], $pfdata['real'], $pfdata['real_sq'], $entry,
- $pfdata['memory'] );
- $length = strlen( $pfline );
- /* printf("<!-- $pfline -->"); */
- if ( $length + $plength > 1400 ) {
- socket_sendto( $sock, $packet, $plength, 0, $wgUDPProfilerHost, $wgUDPProfilerPort );
- $packet = "";
- $plength = 0;
- }
- $packet .= $pfline;
- $plength += $length;
- }
- socket_sendto( $sock, $packet, $plength, 0x100, $wgUDPProfilerHost, $wgUDPProfilerPort );
- }
-}
diff --git a/includes/profiler/ProfilerStandard.php b/includes/profiler/ProfilerStandard.php
deleted file mode 100644
index cc134165..00000000
--- a/includes/profiler/ProfilerStandard.php
+++ /dev/null
@@ -1,559 +0,0 @@
-<?php
-/**
- * Common implementation class for profiling.
- *
- * 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 Profiler
- */
-
-/**
- * Standard profiler that tracks real time, cpu time, and memory deltas
- *
- * This supports profile reports, the debug toolbar, and high-contention
- * DB query warnings. This does not persist the profiling data though.
- *
- * @ingroup Profiler
- * @since 1.24
- */
-class ProfilerStandard extends Profiler {
- /** @var array List of resolved profile calls with start/end data */
- protected $mStack = array();
- /** @var array Queue of open profile calls with start data */
- protected $mWorkStack = array();
-
- /** @var array Map of (function name => aggregate data array) */
- protected $mCollated = array();
- /** @var bool */
- protected $mCollateDone = false;
- /** @var bool */
- protected $mCollateOnly = false;
- /** @var array Cache of a standard broken collation entry */
- protected $mErrorEntry;
-
- /**
- * @param array $params
- */
- public function __construct( array $params ) {
- parent::__construct( $params );
-
- $this->mCollateOnly = $this->collateOnly();
-
- $this->addInitialStack();
- }
-
- /**
- * Return whether this a stub profiler
- *
- * @return bool
- */
- public function isStub() {
- return false;
- }
-
- /**
- * Return whether this profiler stores data
- *
- * @see Profiler::logData()
- * @return bool
- */
- public function isPersistent() {
- return false;
- }
-
- /**
- * Whether to internally just track aggregates and ignore the full stack trace
- *
- * Only doing collation saves memory overhead but limits the use of certain
- * features like that of graph generation for the debug toolbar.
- *
- * @return bool
- */
- protected function collateOnly() {
- return false;
- }
-
- /**
- * Add the inital item in the stack.
- */
- protected function addInitialStack() {
- $this->mErrorEntry = $this->getErrorEntry();
-
- $initialTime = $this->getInitialTime( 'wall' );
- $initialCpu = $this->getInitialTime( 'cpu' );
- if ( $initialTime !== null && $initialCpu !== null ) {
- $this->mWorkStack[] = array( '-total', 0, $initialTime, $initialCpu, 0 );
- if ( $this->mCollateOnly ) {
- $this->mWorkStack[] = array( '-setup', 1, $initialTime, $initialCpu, 0 );
- $this->profileOut( '-setup' );
- } else {
- $this->mStack[] = array( '-setup', 1, $initialTime, $initialCpu, 0,
- $this->getTime( 'wall' ), $this->getTime( 'cpu' ), 0 );
- }
- } else {
- $this->profileIn( '-total' );
- }
- }
-
- /**
- * @return array Initial collation entry
- */
- protected function getZeroEntry() {
- return array(
- 'cpu' => 0.0,
- 'cpu_sq' => 0.0,
- 'real' => 0.0,
- 'real_sq' => 0.0,
- 'memory' => 0,
- 'count' => 0,
- 'min_cpu' => 0.0,
- 'max_cpu' => 0.0,
- 'min_real' => 0.0,
- 'max_real' => 0.0,
- 'periods' => array(), // not filled if mCollateOnly
- 'overhead' => 0 // not filled if mCollateOnly
- );
- }
-
- /**
- * @return array Initial collation entry for errors
- */
- protected function getErrorEntry() {
- $entry = $this->getZeroEntry();
- $entry['count'] = 1;
- return $entry;
- }
-
- /**
- * Update the collation entry for a given method name
- *
- * @param string $name
- * @param float $elapsedCpu
- * @param float $elapsedReal
- * @param int $memChange
- * @param int $subcalls
- * @param array|null $period Map of ('start','end','memory','subcalls')
- */
- protected function updateEntry(
- $name, $elapsedCpu, $elapsedReal, $memChange, $subcalls = 0, $period = null
- ) {
- $entry =& $this->mCollated[$name];
- if ( !is_array( $entry ) ) {
- $entry = $this->getZeroEntry();
- $this->mCollated[$name] =& $entry;
- }
- $entry['cpu'] += $elapsedCpu;
- $entry['cpu_sq'] += $elapsedCpu * $elapsedCpu;
- $entry['real'] += $elapsedReal;
- $entry['real_sq'] += $elapsedReal * $elapsedReal;
- $entry['memory'] += $memChange > 0 ? $memChange : 0;
- $entry['count']++;
- $entry['min_cpu'] = $elapsedCpu < $entry['min_cpu'] ? $elapsedCpu : $entry['min_cpu'];
- $entry['max_cpu'] = $elapsedCpu > $entry['max_cpu'] ? $elapsedCpu : $entry['max_cpu'];
- $entry['min_real'] = $elapsedReal < $entry['min_real'] ? $elapsedReal : $entry['min_real'];
- $entry['max_real'] = $elapsedReal > $entry['max_real'] ? $elapsedReal : $entry['max_real'];
- // Apply optional fields
- $entry['overhead'] += $subcalls;
- if ( $period ) {
- $entry['periods'][] = $period;
- }
- }
-
- /**
- * Called by wfProfieIn()
- *
- * @param string $functionname
- */
- public function profileIn( $functionname ) {
- global $wgDebugFunctionEntry;
-
- if ( $wgDebugFunctionEntry ) {
- $this->debug( str_repeat( ' ', count( $this->mWorkStack ) ) .
- 'Entering ' . $functionname . "\n" );
- }
-
- $this->mWorkStack[] = array(
- $functionname,
- count( $this->mWorkStack ),
- $this->getTime( 'time' ),
- $this->getTime( 'cpu' ),
- memory_get_usage()
- );
- }
-
- /**
- * Called by wfProfieOut()
- *
- * @param string $functionname
- */
- public function profileOut( $functionname ) {
- global $wgDebugFunctionEntry;
-
- if ( $wgDebugFunctionEntry ) {
- $this->debug( str_repeat( ' ', count( $this->mWorkStack ) - 1 ) .
- 'Exiting ' . $functionname . "\n" );
- }
-
- $item = array_pop( $this->mWorkStack );
- list( $ofname, /* $ocount */, $ortime, $octime, $omem ) = $item;
-
- if ( $item === null ) {
- $this->debugGroup( 'profileerror', "Profiling error: $functionname" );
- } else {
- if ( $functionname === 'close' ) {
- if ( $ofname !== '-total' ) {
- $message = "Profile section ended by close(): {$ofname}";
- $this->debugGroup( 'profileerror', $message );
- if ( $this->mCollateOnly ) {
- $this->mCollated[$message] = $this->mErrorEntry;
- } else {
- $this->mStack[] = array( $message, 0, 0.0, 0.0, 0, 0.0, 0.0, 0 );
- }
- }
- $functionname = $ofname;
- } elseif ( $ofname !== $functionname ) {
- $message = "Profiling error: in({$ofname}), out($functionname)";
- $this->debugGroup( 'profileerror', $message );
- if ( $this->mCollateOnly ) {
- $this->mCollated[$message] = $this->mErrorEntry;
- } else {
- $this->mStack[] = array( $message, 0, 0.0, 0.0, 0, 0.0, 0.0, 0 );
- }
- }
- $realTime = $this->getTime( 'wall' );
- $cpuTime = $this->getTime( 'cpu' );
- if ( $this->mCollateOnly ) {
- $elapsedcpu = $cpuTime - $octime;
- $elapsedreal = $realTime - $ortime;
- $memchange = memory_get_usage() - $omem;
- $this->updateEntry( $functionname, $elapsedcpu, $elapsedreal, $memchange );
- } else {
- $this->mStack[] = array_merge( $item,
- array( $realTime, $cpuTime, memory_get_usage() ) );
- }
- $this->trxProfiler->recordFunctionCompletion( $functionname, $realTime - $ortime );
- }
- }
-
- /**
- * Close opened profiling sections
- */
- public function close() {
- while ( count( $this->mWorkStack ) ) {
- $this->profileOut( 'close' );
- }
- }
-
- /**
- * Log the data to some store or even the page output
- */
- public function logData() {
- /* Implement in subclasses */
- }
-
- /**
- * Returns a profiling output to be stored in debug file
- *
- * @return string
- */
- public function getOutput() {
- global $wgDebugFunctionEntry, $wgProfileCallTree;
-
- $wgDebugFunctionEntry = false; // hack
-
- if ( !count( $this->mStack ) && !count( $this->mCollated ) ) {
- return "No profiling output\n";
- }
-
- if ( $wgProfileCallTree ) {
- return $this->getCallTree();
- } else {
- return $this->getFunctionReport();
- }
- }
-
- /**
- * Returns a tree of function call instead of a list of functions
- * @return string
- */
- protected function getCallTree() {
- return implode( '', array_map(
- array( &$this, 'getCallTreeLine' ), $this->remapCallTree( $this->mStack )
- ) );
- }
-
- /**
- * Recursive function the format the current profiling array into a tree
- *
- * @param array $stack Profiling array
- * @return array
- */
- protected function remapCallTree( array $stack ) {
- if ( count( $stack ) < 2 ) {
- return $stack;
- }
- $outputs = array();
- for ( $max = count( $stack ) - 1; $max > 0; ) {
- /* Find all items under this entry */
- $level = $stack[$max][1];
- $working = array();
- for ( $i = $max -1; $i >= 0; $i-- ) {
- if ( $stack[$i][1] > $level ) {
- $working[] = $stack[$i];
- } else {
- break;
- }
- }
- $working = $this->remapCallTree( array_reverse( $working ) );
- $output = array();
- foreach ( $working as $item ) {
- array_push( $output, $item );
- }
- array_unshift( $output, $stack[$max] );
- $max = $i;
-
- array_unshift( $outputs, $output );
- }
- $final = array();
- foreach ( $outputs as $output ) {
- foreach ( $output as $item ) {
- $final[] = $item;
- }
- }
- return $final;
- }
-
- /**
- * Callback to get a formatted line for the call tree
- * @param array $entry
- * @return string
- */
- protected function getCallTreeLine( $entry ) {
- list( $fname, $level, $startreal, , , $endreal ) = $entry;
- $delta = $endreal - $startreal;
- $space = str_repeat( ' ', $level );
- # The ugly double sprintf is to work around a PHP bug,
- # which has been fixed in recent releases.
- return sprintf( "%10s %s %s\n",
- trim( sprintf( "%7.3f", $delta * 1000.0 ) ), $space, $fname );
- }
-
- /**
- * Populate mCollated
- */
- protected function collateData() {
- if ( $this->mCollateDone ) {
- return;
- }
- $this->mCollateDone = true;
- $this->close(); // set "-total" entry
-
- if ( $this->mCollateOnly ) {
- return; // already collated as methods exited
- }
-
- $this->mCollated = array();
-
- # Estimate profiling overhead
- $profileCount = count( $this->mStack );
- self::calculateOverhead( $profileCount );
-
- # First, subtract the overhead!
- $overheadTotal = $overheadMemory = $overheadInternal = array();
- foreach ( $this->mStack as $entry ) {
- // $entry is (name,pos,rtime0,cputime0,mem0,rtime1,cputime1,mem1)
- $fname = $entry[0];
- $elapsed = $entry[5] - $entry[2];
- $memchange = $entry[7] - $entry[4];
-
- if ( $fname === '-overhead-total' ) {
- $overheadTotal[] = $elapsed;
- $overheadMemory[] = max( 0, $memchange );
- } elseif ( $fname === '-overhead-internal' ) {
- $overheadInternal[] = $elapsed;
- }
- }
- $overheadTotal = $overheadTotal ?
- array_sum( $overheadTotal ) / count( $overheadInternal ) : 0;
- $overheadMemory = $overheadMemory ?
- array_sum( $overheadMemory ) / count( $overheadInternal ) : 0;
- $overheadInternal = $overheadInternal ?
- array_sum( $overheadInternal ) / count( $overheadInternal ) : 0;
-
- # Collate
- foreach ( $this->mStack as $index => $entry ) {
- // $entry is (name,pos,rtime0,cputime0,mem0,rtime1,cputime1,mem1)
- $fname = $entry[0];
- $elapsedCpu = $entry[6] - $entry[3];
- $elapsedReal = $entry[5] - $entry[2];
- $memchange = $entry[7] - $entry[4];
- $subcalls = $this->calltreeCount( $this->mStack, $index );
-
- if ( substr( $fname, 0, 9 ) !== '-overhead' ) {
- # Adjust for profiling overhead (except special values with elapsed=0
- if ( $elapsed ) {
- $elapsed -= $overheadInternal;
- $elapsed -= ( $subcalls * $overheadTotal );
- $memchange -= ( $subcalls * $overheadMemory );
- }
- }
-
- $period = array( 'start' => $entry[2], 'end' => $entry[5],
- 'memory' => $memchange, 'subcalls' => $subcalls );
- $this->updateEntry( $fname, $elapsedCpu, $elapsedReal, $memchange, $subcalls, $period );
- }
-
- $this->mCollated['-overhead-total']['count'] = $profileCount;
- arsort( $this->mCollated, SORT_NUMERIC );
- }
-
- /**
- * Returns a list of profiled functions.
- *
- * @return string
- */
- protected function getFunctionReport() {
- $this->collateData();
-
- $width = 140;
- $nameWidth = $width - 65;
- $format = "%-{$nameWidth}s %6d %13.3f %13.3f %13.3f%% %9d (%13.3f -%13.3f) [%d]\n";
- $titleFormat = "%-{$nameWidth}s %6s %13s %13s %13s %9s\n";
- $prof = "\nProfiling data\n";
- $prof .= sprintf( $titleFormat, 'Name', 'Calls', 'Total', 'Each', '%', 'Mem' );
-
- $total = isset( $this->mCollated['-total'] )
- ? $this->mCollated['-total']['real']
- : 0;
-
- foreach ( $this->mCollated as $fname => $data ) {
- $calls = $data['count'];
- $percent = $total ? 100 * $data['real'] / $total : 0;
- $memory = $data['memory'];
- $prof .= sprintf( $format,
- substr( $fname, 0, $nameWidth ),
- $calls,
- (float)( $data['real'] * 1000 ),
- (float)( $data['real'] * 1000 ) / $calls,
- $percent,
- $memory,
- ( $data['min_real'] * 1000.0 ),
- ( $data['max_real'] * 1000.0 ),
- $data['overhead']
- );
- }
- $prof .= "\nTotal: $total\n\n";
-
- return $prof;
- }
-
- /**
- * @return array
- */
- public function getRawData() {
- // This method is called before shutdown in the footer method on Skins.
- // If some outer methods have not yet called wfProfileOut(), work around
- // that by clearing anything in the work stack to just the "-total" entry.
- // Collate after doing this so the results do not include profile errors.
- if ( count( $this->mWorkStack ) > 1 ) {
- $oldWorkStack = $this->mWorkStack;
- $this->mWorkStack = array( $this->mWorkStack[0] ); // just the "-total" one
- } else {
- $oldWorkStack = null;
- }
- $this->collateData();
- // If this trick is used, then the old work stack is swapped back afterwards
- // and mCollateDone is reset to false. This means that logData() will still
- // make use of all the method data since the missing wfProfileOut() calls
- // should be made by the time it is called.
- if ( $oldWorkStack ) {
- $this->mWorkStack = $oldWorkStack;
- $this->mCollateDone = false;
- }
-
- $total = isset( $this->mCollated['-total'] )
- ? $this->mCollated['-total']['real']
- : 0;
-
- $profile = array();
- foreach ( $this->mCollated as $fname => $data ) {
- $periods = array();
- foreach ( $data['periods'] as $period ) {
- $period['start'] *= 1000;
- $period['end'] *= 1000;
- $periods[] = $period;
- }
- $profile[] = array(
- 'name' => $fname,
- 'calls' => $data['count'],
- 'elapsed' => $data['real'] * 1000,
- 'percent' => $total ? 100 * $data['real'] / $total : 0,
- 'memory' => $data['memory'],
- 'min' => $data['min_real'] * 1000,
- 'max' => $data['max_real'] * 1000,
- 'overhead' => $data['overhead'],
- 'periods' => $periods
- );
- }
-
- return $profile;
- }
-
- /**
- * Dummy calls to wfProfileIn/wfProfileOut to calculate its overhead
- * @param int $profileCount
- */
- protected static function calculateOverhead( $profileCount ) {
- wfProfileIn( '-overhead-total' );
- for ( $i = 0; $i < $profileCount; $i++ ) {
- wfProfileIn( '-overhead-internal' );
- wfProfileOut( '-overhead-internal' );
- }
- wfProfileOut( '-overhead-total' );
- }
-
- /**
- * Counts the number of profiled function calls sitting under
- * the given point in the call graph. Not the most efficient algo.
- *
- * @param array $stack
- * @param int $start
- * @return int
- */
- protected function calltreeCount( $stack, $start ) {
- $level = $stack[$start][1];
- $count = 0;
- for ( $i = $start -1; $i >= 0 && $stack[$i][1] > $level; $i-- ) {
- $count ++;
- }
- return $count;
- }
-
- /**
- * Get the content type sent out to the client.
- * Used for profilers that output instead of store data.
- * @return string
- */
- protected function getContentType() {
- foreach ( headers_list() as $header ) {
- if ( preg_match( '#^content-type: (\w+/\w+);?#i', $header, $m ) ) {
- return $m[1];
- }
- }
- return null;
- }
-}
diff --git a/includes/profiler/ProfilerStub.php b/includes/profiler/ProfilerStub.php
index 1d3b65d2..244b4e4b 100644
--- a/includes/profiler/ProfilerStub.php
+++ b/includes/profiler/ProfilerStub.php
@@ -27,18 +27,11 @@
* @ingroup Profiler
*/
class ProfilerStub extends Profiler {
- public function isStub() {
- return true;
+ public function scopedProfileIn( $section ) {
+ return null; // no-op
}
- public function isPersistent() {
- return false;
- }
-
- public function profileIn( $fn ) {
- }
-
- public function profileOut( $fn ) {
+ public function getFunctionStats() {
}
public function getOutput() {
@@ -47,20 +40,10 @@ class ProfilerStub extends Profiler {
public function close() {
}
- public function logData() {
- }
-
public function getCurrentSection() {
return '';
}
- public function transactionWritingIn( $server, $db, $id = '' ) {
- }
-
- public function transactionWritingOut( $server, $db, $id = '' ) {
- }
-
- public function getRawData() {
- return array();
+ public function logData() {
}
}
diff --git a/includes/profiler/ProfilerXhprof.php b/includes/profiler/ProfilerXhprof.php
new file mode 100644
index 00000000..f36cdc1a
--- /dev/null
+++ b/includes/profiler/ProfilerXhprof.php
@@ -0,0 +1,194 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Profiler wrapper for XHProf extension.
+ *
+ * @code
+ * $wgProfiler['class'] = 'ProfilerXhprof';
+ * $wgProfiler['flags'] = XHPROF_FLAGS_NO_BUILTINS;
+ * $wgProfiler['output'] = 'text';
+ * $wgProfiler['visible'] = true;
+ * @endcode
+ *
+ * @code
+ * $wgProfiler['class'] = 'ProfilerXhprof';
+ * $wgProfiler['flags'] = XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_NO_BUILTINS;
+ * $wgProfiler['output'] = 'udp';
+ * @endcode
+ *
+ * ProfilerXhprof profiles all functions using the XHProf PHP extenstion.
+ * For PHP5 users, this extension can be installed via PECL or your operating
+ * system's package manager. XHProf support is built into HHVM.
+ *
+ * To restrict the functions for which profiling data is collected, you can
+ * use either a whitelist ($wgProfiler['include']) or a blacklist
+ * ($wgProfiler['exclude']) containing an array of function names. The
+ * blacklist functionality is built into HHVM and will completely exclude the
+ * named functions from profiling collection. The whitelist is implemented by
+ * Xhprof class which will filter the data collected by XHProf before reporting.
+ * See documentation for the Xhprof class and the XHProf extension for
+ * additional information.
+ *
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ * @ingroup Profiler
+ * @see Xhprof
+ * @see https://php.net/xhprof
+ * @see https://github.com/facebook/hhvm/blob/master/hphp/doc/profiling.md
+ */
+class ProfilerXhprof extends Profiler {
+ /**
+ * @var Xhprof $xhprof
+ */
+ protected $xhprof;
+
+ /**
+ * Profiler for explicit, arbitrary, frame labels
+ * @var SectionProfiler
+ */
+ protected $sprofiler;
+
+ /**
+ * @param array $params
+ * @see Xhprof::__construct()
+ */
+ public function __construct( array $params = array() ) {
+ parent::__construct( $params );
+ $this->xhprof = new Xhprof( $params );
+ $this->sprofiler = new SectionProfiler();
+ }
+
+ public function scopedProfileIn( $section ) {
+ return $this->sprofiler->scopedProfileIn( $section );
+ }
+
+ /**
+ * No-op for xhprof profiling.
+ */
+ public function close() {
+ }
+
+ public function getFunctionStats() {
+ $metrics = $this->xhprof->getCompleteMetrics();
+ $profile = array();
+
+ $main = null; // units in ms
+ foreach ( $metrics as $fname => $stats ) {
+ // Convert elapsed times from μs to ms to match interface
+ $entry = array(
+ 'name' => $fname,
+ 'calls' => $stats['ct'],
+ 'real' => $stats['wt']['total'] / 1000,
+ '%real' => $stats['wt']['percent'],
+ 'cpu' => isset( $stats['cpu'] ) ? $stats['cpu']['total'] / 1000 : 0,
+ '%cpu' => isset( $stats['cpu'] ) ? $stats['cpu']['percent'] : 0,
+ 'memory' => isset( $stats['mu'] ) ? $stats['mu']['total'] : 0,
+ '%memory' => isset( $stats['mu'] ) ? $stats['mu']['percent'] : 0,
+ 'min_real' => $stats['wt']['min'] / 1000,
+ 'max_real' => $stats['wt']['max'] / 1000
+ );
+ $profile[] = $entry;
+ if ( $fname === 'main()' ) {
+ $main = $entry;
+ }
+ }
+
+ // Merge in all of the custom profile sections
+ foreach ( $this->sprofiler->getFunctionStats() as $stats ) {
+ if ( $stats['name'] === '-total' ) {
+ // Discard section profiler running totals
+ continue;
+ }
+
+ // @note: getFunctionStats() values already in ms
+ $stats['%real'] = $main['real'] ? $stats['real'] / $main['real'] * 100 : 0;
+ $stats['%cpu'] = $main['cpu'] ? $stats['cpu'] / $main['cpu'] * 100 : 0;
+ $stats['%memory'] = $main['memory'] ? $stats['memory'] / $main['memory'] * 100 : 0;
+ $profile[] = $stats; // assume no section names collide with $metrics
+ }
+
+ return $profile;
+ }
+
+ /**
+ * Returns a profiling output to be stored in debug file
+ *
+ * @return string
+ */
+ public function getOutput() {
+ return $this->getFunctionReport();
+ }
+
+ /**
+ * Get a report of profiled functions sorted by inclusive wall clock time
+ * in descending order.
+ *
+ * Each line of the report includes this data:
+ * - Function name
+ * - Number of times function was called
+ * - Total wall clock time spent in function in microseconds
+ * - Minimum wall clock time spent in function in microseconds
+ * - Average wall clock time spent in function in microseconds
+ * - Maximum wall clock time spent in function in microseconds
+ * - Percentage of total wall clock time spent in function
+ * - Total delta of memory usage from start to end of function in bytes
+ *
+ * @return string
+ */
+ protected function getFunctionReport() {
+ $data = $this->getFunctionStats();
+ usort( $data, function( $a, $b ) {
+ if ( $a['real'] === $b['real'] ) {
+ return 0;
+ }
+ return ( $a['real'] > $b['real'] ) ? -1 : 1; // descending
+ } );
+
+ $width = 140;
+ $nameWidth = $width - 65;
+ $format = "%-{$nameWidth}s %6d %9d %9d %9d %9d %7.3f%% %9d";
+ $out = array();
+ $out[] = sprintf( "%-{$nameWidth}s %6s %9s %9s %9s %9s %7s %9s",
+ 'Name', 'Calls', 'Total', 'Min', 'Each', 'Max', '%', 'Mem'
+ );
+ foreach ( $data as $stats ) {
+ $out[] = sprintf( $format,
+ $stats['name'],
+ $stats['calls'],
+ $stats['real'] * 1000,
+ $stats['min_real'] * 1000,
+ $stats['real'] / $stats['calls'] * 1000,
+ $stats['max_real'] * 1000,
+ $stats['%real'],
+ $stats['memory']
+ );
+ }
+ return implode( "\n", $out );
+ }
+
+ /**
+ * Retrieve raw data from xhprof
+ * @return array
+ */
+ public function getRawData() {
+ return $this->xhprof->getRawData();
+ }
+}
diff --git a/includes/profiler/SectionProfiler.php b/includes/profiler/SectionProfiler.php
new file mode 100644
index 00000000..245022df
--- /dev/null
+++ b/includes/profiler/SectionProfiler.php
@@ -0,0 +1,530 @@
+<?php
+/**
+ * Arbitrary section name based PHP profiling.
+ *
+ * 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 Profiler
+ * @author Aaron Schulz
+ */
+
+/**
+ * Custom PHP profiler for parser/DB type section names that xhprof/xdebug can't handle
+ *
+ * @since 1.25
+ */
+class SectionProfiler {
+ /** @var array Map of (mem,real,cpu) */
+ protected $start;
+ /** @var array Map of (mem,real,cpu) */
+ protected $end;
+ /** @var array List of resolved profile calls with start/end data */
+ protected $stack = array();
+ /** @var array Queue of open profile calls with start data */
+ protected $workStack = array();
+
+ /** @var array Map of (function name => aggregate data array) */
+ protected $collated = array();
+ /** @var bool */
+ protected $collateDone = false;
+
+ /** @var bool Whether to collect the full stack trace or just aggregates */
+ protected $collateOnly = true;
+ /** @var array Cache of a standard broken collation entry */
+ protected $errorEntry;
+ /** @var callable Cache of a profile out callback */
+ protected $profileOutCallback;
+
+ /**
+ * @param array $params
+ */
+ public function __construct( array $params = array() ) {
+ $this->errorEntry = $this->getErrorEntry();
+ $this->collateOnly = empty( $params['trace'] );
+ $this->profileOutCallback = function ( $profiler, $section ) {
+ $profiler->profileOutInternal( $section );
+ };
+ }
+
+ /**
+ * @param string $section
+ * @return ScopedCallback
+ */
+ public function scopedProfileIn( $section ) {
+ $this->profileInInternal( $section );
+
+ return new SectionProfileCallback( $this, $section );
+ }
+
+ /**
+ * @param ScopedCallback $section
+ */
+ public function scopedProfileOut( ScopedCallback &$section ) {
+ $section = null;
+ }
+
+ /**
+ * Get the aggregated inclusive profiling data for each method
+ *
+ * The percent time for each time is based on the current "total" time
+ * used is based on all methods so far. This method can therefore be
+ * called several times in between several profiling calls without the
+ * delays in usage of the profiler skewing the results. A "-total" entry
+ * is always included in the results.
+ *
+ * @return array List of method entries arrays, each having:
+ * - name : method name
+ * - calls : the number of invoking calls
+ * - real : real time ellapsed (ms)
+ * - %real : percent real time
+ * - cpu : real time ellapsed (ms)
+ * - %cpu : percent real time
+ * - memory : memory used (bytes)
+ * - %memory : percent memory used
+ * - min_real : min real time in a call (ms)
+ * - max_real : max real time in a call (ms)
+ */
+ public function getFunctionStats() {
+ $this->collateData();
+
+ $totalCpu = max( $this->end['cpu'] - $this->start['cpu'], 0 );
+ $totalReal = max( $this->end['real'] - $this->start['real'], 0 );
+ $totalMem = max( $this->end['memory'] - $this->start['memory'], 0 );
+
+ $profile = array();
+ foreach ( $this->collated as $fname => $data ) {
+ $profile[] = array(
+ 'name' => $fname,
+ 'calls' => $data['count'],
+ 'real' => $data['real'] * 1000,
+ '%real' => $totalReal ? 100 * $data['real'] / $totalReal : 0,
+ 'cpu' => $data['cpu'] * 1000,
+ '%cpu' => $totalCpu ? 100 * $data['cpu'] / $totalCpu : 0,
+ 'memory' => $data['memory'],
+ '%memory' => $totalMem ? 100 * $data['memory'] / $totalMem : 0,
+ 'min_real' => 1000 * $data['min_real'],
+ 'max_real' => 1000 * $data['max_real']
+ );
+ }
+
+ $profile[] = array(
+ 'name' => '-total',
+ 'calls' => 1,
+ 'real' => 1000 * $totalReal,
+ '%real' => 100,
+ 'cpu' => 1000 * $totalCpu,
+ '%cpu' => 100,
+ 'memory' => $totalMem,
+ '%memory' => 100,
+ 'min_real' => 1000 * $totalReal,
+ 'max_real' => 1000 * $totalReal
+ );
+
+ return $profile;
+ }
+
+ /**
+ * Clear all of the profiling data for another run
+ */
+ public function reset() {
+ $this->start = null;
+ $this->end = null;
+ $this->stack = array();
+ $this->workStack = array();
+ $this->collated = array();
+ $this->collateDone = false;
+ }
+
+ /**
+ * @return array Initial collation entry
+ */
+ protected function getZeroEntry() {
+ return array(
+ 'cpu' => 0.0,
+ 'real' => 0.0,
+ 'memory' => 0,
+ 'count' => 0,
+ 'min_real' => 0.0,
+ 'max_real' => 0.0
+ );
+ }
+
+ /**
+ * @return array Initial collation entry for errors
+ */
+ protected function getErrorEntry() {
+ $entry = $this->getZeroEntry();
+ $entry['count'] = 1;
+ return $entry;
+ }
+
+ /**
+ * Update the collation entry for a given method name
+ *
+ * @param string $name
+ * @param float $elapsedCpu
+ * @param float $elapsedReal
+ * @param int $memChange
+ */
+ protected function updateEntry( $name, $elapsedCpu, $elapsedReal, $memChange ) {
+ $entry =& $this->collated[$name];
+ if ( !is_array( $entry ) ) {
+ $entry = $this->getZeroEntry();
+ $this->collated[$name] =& $entry;
+ }
+ $entry['cpu'] += $elapsedCpu;
+ $entry['real'] += $elapsedReal;
+ $entry['memory'] += $memChange > 0 ? $memChange : 0;
+ $entry['count']++;
+ $entry['min_real'] = min( $entry['min_real'], $elapsedReal );
+ $entry['max_real'] = max( $entry['max_real'], $elapsedReal );
+ }
+
+ /**
+ * This method should not be called outside SectionProfiler
+ *
+ * @param string $functionname
+ */
+ public function profileInInternal( $functionname ) {
+ // Once the data is collated for reports, any future calls
+ // should clear the collation cache so the next report will
+ // reflect them. This matters when trace mode is used.
+ $this->collateDone = false;
+
+ $cpu = $this->getTime( 'cpu' );
+ $real = $this->getTime( 'wall' );
+ $memory = memory_get_usage();
+
+ if ( $this->start === null ) {
+ $this->start = array( 'cpu' => $cpu, 'real' => $real, 'memory' => $memory );
+ }
+
+ $this->workStack[] = array(
+ $functionname,
+ count( $this->workStack ),
+ $real,
+ $cpu,
+ $memory
+ );
+ }
+
+ /**
+ * This method should not be called outside SectionProfiler
+ *
+ * @param string $functionname
+ */
+ public function profileOutInternal( $functionname ) {
+ $item = array_pop( $this->workStack );
+ if ( $item === null ) {
+ $this->debugGroup( 'profileerror', "Profiling error: $functionname" );
+ return;
+ }
+ list( $ofname, /* $ocount */, $ortime, $octime, $omem ) = $item;
+
+ if ( $functionname === 'close' ) {
+ $message = "Profile section ended by close(): {$ofname}";
+ $this->debugGroup( 'profileerror', $message );
+ if ( $this->collateOnly ) {
+ $this->collated[$message] = $this->errorEntry;
+ } else {
+ $this->stack[] = array( $message, 0, 0.0, 0.0, 0, 0.0, 0.0, 0 );
+ }
+ $functionname = $ofname;
+ } elseif ( $ofname !== $functionname ) {
+ $message = "Profiling error: in({$ofname}), out($functionname)";
+ $this->debugGroup( 'profileerror', $message );
+ if ( $this->collateOnly ) {
+ $this->collated[$message] = $this->errorEntry;
+ } else {
+ $this->stack[] = array( $message, 0, 0.0, 0.0, 0, 0.0, 0.0, 0 );
+ }
+ }
+
+ $realTime = $this->getTime( 'wall' );
+ $cpuTime = $this->getTime( 'cpu' );
+ $memUsage = memory_get_usage();
+
+ if ( $this->collateOnly ) {
+ $elapsedcpu = $cpuTime - $octime;
+ $elapsedreal = $realTime - $ortime;
+ $memchange = $memUsage - $omem;
+ $this->updateEntry( $functionname, $elapsedcpu, $elapsedreal, $memchange );
+ } else {
+ $this->stack[] = array_merge( $item, array( $realTime, $cpuTime, $memUsage ) );
+ }
+
+ $this->end = array(
+ 'cpu' => $cpuTime,
+ 'real' => $realTime,
+ 'memory' => $memUsage
+ );
+ }
+
+ /**
+ * Returns a tree of function calls with their real times
+ * @return string
+ * @throws Exception
+ */
+ public function getCallTreeReport() {
+ if ( $this->collateOnly ) {
+ throw new Exception( "Tree is only available for trace profiling." );
+ }
+ return implode( '', array_map(
+ array( $this, 'getCallTreeLine' ), $this->remapCallTree( $this->stack )
+ ) );
+ }
+
+ /**
+ * Recursive function the format the current profiling array into a tree
+ *
+ * @param array $stack Profiling array
+ * @return array
+ */
+ protected function remapCallTree( array $stack ) {
+ if ( count( $stack ) < 2 ) {
+ return $stack;
+ }
+ $outputs = array();
+ for ( $max = count( $stack ) - 1; $max > 0; ) {
+ /* Find all items under this entry */
+ $level = $stack[$max][1];
+ $working = array();
+ for ( $i = $max -1; $i >= 0; $i-- ) {
+ if ( $stack[$i][1] > $level ) {
+ $working[] = $stack[$i];
+ } else {
+ break;
+ }
+ }
+ $working = $this->remapCallTree( array_reverse( $working ) );
+ $output = array();
+ foreach ( $working as $item ) {
+ array_push( $output, $item );
+ }
+ array_unshift( $output, $stack[$max] );
+ $max = $i;
+
+ array_unshift( $outputs, $output );
+ }
+ $final = array();
+ foreach ( $outputs as $output ) {
+ foreach ( $output as $item ) {
+ $final[] = $item;
+ }
+ }
+ return $final;
+ }
+
+ /**
+ * Callback to get a formatted line for the call tree
+ * @param array $entry
+ * @return string
+ */
+ protected function getCallTreeLine( $entry ) {
+ // $entry has (name, level, stime, scpu, smem, etime, ecpu, emem)
+ list( $fname, $level, $startreal, , , $endreal ) = $entry;
+ $delta = $endreal - $startreal;
+ $space = str_repeat( ' ', $level );
+ # The ugly double sprintf is to work around a PHP bug,
+ # which has been fixed in recent releases.
+ return sprintf( "%10s %s %s\n",
+ trim( sprintf( "%7.3f", $delta * 1000.0 ) ), $space, $fname );
+ }
+
+ /**
+ * Populate collated data
+ */
+ protected function collateData() {
+ if ( $this->collateDone ) {
+ return;
+ }
+ $this->collateDone = true;
+ // Close opened profiling sections
+ while ( count( $this->workStack ) ) {
+ $this->profileOutInternal( 'close' );
+ }
+
+ if ( $this->collateOnly ) {
+ return; // already collated as methods exited
+ }
+
+ $this->collated = array();
+
+ # Estimate profiling overhead
+ $oldEnd = $this->end;
+ $profileCount = count( $this->stack );
+ $this->calculateOverhead( $profileCount );
+
+ # First, subtract the overhead!
+ $overheadTotal = $overheadMemory = $overheadInternal = array();
+ foreach ( $this->stack as $entry ) {
+ // $entry is (name,pos,rtime0,cputime0,mem0,rtime1,cputime1,mem1)
+ $fname = $entry[0];
+ $elapsed = $entry[5] - $entry[2];
+ $memchange = $entry[7] - $entry[4];
+
+ if ( $fname === '-overhead-total' ) {
+ $overheadTotal[] = $elapsed;
+ $overheadMemory[] = max( 0, $memchange );
+ } elseif ( $fname === '-overhead-internal' ) {
+ $overheadInternal[] = $elapsed;
+ }
+ }
+ $overheadTotal = $overheadTotal ?
+ array_sum( $overheadTotal ) / count( $overheadInternal ) : 0;
+ $overheadMemory = $overheadMemory ?
+ array_sum( $overheadMemory ) / count( $overheadInternal ) : 0;
+ $overheadInternal = $overheadInternal ?
+ array_sum( $overheadInternal ) / count( $overheadInternal ) : 0;
+
+ # Collate
+ foreach ( $this->stack as $index => $entry ) {
+ // $entry is (name,pos,rtime0,cputime0,mem0,rtime1,cputime1,mem1)
+ $fname = $entry[0];
+ $elapsedCpu = $entry[6] - $entry[3];
+ $elapsedReal = $entry[5] - $entry[2];
+ $memchange = $entry[7] - $entry[4];
+ $subcalls = $this->calltreeCount( $this->stack, $index );
+
+ if ( substr( $fname, 0, 9 ) !== '-overhead' ) {
+ # Adjust for profiling overhead (except special values with elapsed=0)
+ if ( $elapsed ) {
+ $elapsed -= $overheadInternal;
+ $elapsed -= ( $subcalls * $overheadTotal );
+ $memchange -= ( $subcalls * $overheadMemory );
+ }
+ }
+
+ $this->updateEntry( $fname, $elapsedCpu, $elapsedReal, $memchange );
+ }
+
+ $this->collated['-overhead-total']['count'] = $profileCount;
+ arsort( $this->collated, SORT_NUMERIC );
+
+ // Unclobber the end info map (the overhead checking alters it)
+ $this->end = $oldEnd;
+ }
+
+ /**
+ * Dummy calls to calculate profiling overhead
+ *
+ * @param int $profileCount
+ */
+ protected function calculateOverhead( $profileCount ) {
+ $this->profileInInternal( '-overhead-total' );
+ for ( $i = 0; $i < $profileCount; $i++ ) {
+ $this->profileInInternal( '-overhead-internal' );
+ $this->profileOutInternal( '-overhead-internal' );
+ }
+ $this->profileOutInternal( '-overhead-total' );
+ }
+
+ /**
+ * Counts the number of profiled function calls sitting under
+ * the given point in the call graph. Not the most efficient algo.
+ *
+ * @param array $stack
+ * @param int $start
+ * @return int
+ */
+ protected function calltreeCount( $stack, $start ) {
+ $level = $stack[$start][1];
+ $count = 0;
+ for ( $i = $start -1; $i >= 0 && $stack[$i][1] > $level; $i-- ) {
+ $count ++;
+ }
+ return $count;
+ }
+
+ /**
+ * Get the initial time of the request, based either on $wgRequestTime or
+ * $wgRUstart. Will return null if not able to find data.
+ *
+ * @param string|bool $metric Metric to use, with the following possibilities:
+ * - user: User CPU time (without system calls)
+ * - cpu: Total CPU time (user and system calls)
+ * - wall (or any other string): elapsed time
+ * - false (default): will fall back to default metric
+ * @return float|null
+ */
+ protected function getTime( $metric = 'wall' ) {
+ if ( $metric === 'cpu' || $metric === 'user' ) {
+ $ru = wfGetRusage();
+ if ( !$ru ) {
+ return 0;
+ }
+ $time = $ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec'] / 1e6;
+ if ( $metric === 'cpu' ) {
+ # This is the time of system calls, added to the user time
+ # it gives the total CPU time
+ $time += $ru['ru_stime.tv_sec'] + $ru['ru_stime.tv_usec'] / 1e6;
+ }
+ return $time;
+ } else {
+ return microtime( true );
+ }
+ }
+
+ /**
+ * Add an entry in the debug log file
+ *
+ * @param string $s String to output
+ */
+ protected function debug( $s ) {
+ if ( function_exists( 'wfDebug' ) ) {
+ wfDebug( $s );
+ }
+ }
+
+ /**
+ * Add an entry in the debug log group
+ *
+ * @param string $group Group to send the message to
+ * @param string $s String to output
+ */
+ protected function debugGroup( $group, $s ) {
+ if ( function_exists( 'wfDebugLog' ) ) {
+ wfDebugLog( $group, $s );
+ }
+ }
+}
+
+/**
+ * Subclass ScopedCallback to avoid call_user_func_array(), which is slow
+ *
+ * This class should not be used outside of SectionProfiler
+ */
+class SectionProfileCallback extends ScopedCallback {
+ /** @var SectionProfiler */
+ protected $profiler;
+ /** @var string */
+ protected $section;
+
+ /**
+ * @param SectionProfiler $profiler
+ * @param string $section
+ */
+ public function __construct( SectionProfiler $profiler, $section ) {
+ parent::__construct( null );
+ $this->profiler = $profiler;
+ $this->section = $section;
+ }
+
+ function __destruct() {
+ $this->profiler->profileOutInternal( $this->section );
+ }
+}
diff --git a/includes/profiler/TransactionProfiler.php b/includes/profiler/TransactionProfiler.php
new file mode 100644
index 00000000..f02d66f8
--- /dev/null
+++ b/includes/profiler/TransactionProfiler.php
@@ -0,0 +1,274 @@
+<?php
+/**
+ * Transaction profiling for contention
+ *
+ * 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 Profiler
+ * @author Aaron Schulz
+ */
+
+use Psr\Log\LoggerInterface;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\NullLogger;
+/**
+ * Helper class that detects high-contention DB queries via profiling calls
+ *
+ * This class is meant to work with a DatabaseBase object, which manages queries
+ *
+ * @since 1.24
+ */
+class TransactionProfiler implements LoggerAwareInterface {
+ /** @var float Seconds */
+ protected $dbLockThreshold = 3.0;
+ /** @var float Seconds */
+ protected $eventThreshold = .25;
+
+ /** @var array transaction ID => (write start time, list of DBs involved) */
+ protected $dbTrxHoldingLocks = array();
+ /** @var array transaction ID => list of (query name, start time, end time) */
+ protected $dbTrxMethodTimes = array();
+
+ /** @var array */
+ protected $hits = array(
+ 'writes' => 0,
+ 'queries' => 0,
+ 'conns' => 0,
+ 'masterConns' => 0
+ );
+ /** @var array */
+ protected $expect = array(
+ 'writes' => INF,
+ 'queries' => INF,
+ 'conns' => INF,
+ 'masterConns' => INF,
+ 'maxAffected' => INF
+ );
+ /** @var array */
+ protected $expectBy = array();
+
+ /**
+ * @var LoggerInterface
+ */
+ private $logger;
+
+ public function __construct() {
+ $this->setLogger( new NullLogger() );
+ }
+
+ public function setLogger( LoggerInterface $logger ) {
+ $this->logger = $logger;
+ }
+
+ /**
+ * Set performance expectations
+ *
+ * With conflicting expect, the most specific ones will be used
+ *
+ * @param string $event (writes,queries,conns,mConns)
+ * @param integer $value Maximum count of the event
+ * @param string $fname Caller
+ * @since 1.25
+ */
+ public function setExpectation( $event, $value, $fname ) {
+ $this->expect[$event] = isset( $this->expect[$event] )
+ ? min( $this->expect[$event], $value )
+ : $value;
+ if ( $this->expect[$event] == $value ) {
+ $this->expectBy[$event] = $fname;
+ }
+ }
+
+ /**
+ * Reset performance expectations and hit counters
+ *
+ * @since 1.25
+ */
+ public function resetExpectations() {
+ foreach ( $this->hits as &$val ) {
+ $val = 0;
+ }
+ unset( $val );
+ foreach ( $this->expect as &$val ) {
+ $val = INF;
+ }
+ unset( $val );
+ $this->expectBy = array();
+ }
+
+ /**
+ * Mark a DB as having been connected to with a new handle
+ *
+ * Note that there can be multiple connections to a single DB.
+ *
+ * @param string $server DB server
+ * @param string $db DB name
+ * @param bool $isMaster
+ */
+ public function recordConnection( $server, $db, $isMaster ) {
+ // Report when too many connections happen...
+ if ( $this->hits['conns']++ == $this->expect['conns'] ) {
+ $this->reportExpectationViolated( 'conns', "[connect to $server ($db)]" );
+ }
+ if ( $isMaster && $this->hits['masterConns']++ == $this->expect['masterConns'] ) {
+ $this->reportExpectationViolated( 'masterConns', "[connect to $server ($db)]" );
+ }
+ }
+
+ /**
+ * Mark a DB as in a transaction with one or more writes pending
+ *
+ * Note that there can be multiple connections to a single DB.
+ *
+ * @param string $server DB server
+ * @param string $db DB name
+ * @param string $id ID string of transaction
+ */
+ public function transactionWritingIn( $server, $db, $id ) {
+ $name = "{$server} ({$db}) (TRX#$id)";
+ if ( isset( $this->dbTrxHoldingLocks[$name] ) ) {
+ $this->logger->info( "Nested transaction for '$name' - out of sync." );
+ }
+ $this->dbTrxHoldingLocks[$name] = array(
+ 'start' => microtime( true ),
+ 'conns' => array(), // all connections involved
+ );
+ $this->dbTrxMethodTimes[$name] = array();
+
+ foreach ( $this->dbTrxHoldingLocks as $name => &$info ) {
+ // Track all DBs in transactions for this transaction
+ $info['conns'][$name] = 1;
+ }
+ }
+
+ /**
+ * Register the name and time of a method for slow DB trx detection
+ *
+ * This assumes that all queries are synchronous (non-overlapping)
+ *
+ * @param string $query Function name or generalized SQL
+ * @param float $sTime Starting UNIX wall time
+ * @param bool $isWrite Whether this is a write query
+ * @param integer $n Number of affected rows
+ */
+ public function recordQueryCompletion( $query, $sTime, $isWrite = false, $n = 0 ) {
+ $eTime = microtime( true );
+ $elapsed = ( $eTime - $sTime );
+
+ if ( $isWrite && $n > $this->expect['maxAffected'] ) {
+ $this->logger->info( "Query affected $n row(s):\n" . $query . "\n" . wfBacktrace( true ) );
+ }
+
+ // Report when too many writes/queries happen...
+ if ( $this->hits['queries']++ == $this->expect['queries'] ) {
+ $this->reportExpectationViolated( 'queries', $query );
+ }
+ if ( $isWrite && $this->hits['writes']++ == $this->expect['writes'] ) {
+ $this->reportExpectationViolated( 'writes', $query );
+ }
+
+ if ( !$this->dbTrxHoldingLocks ) {
+ // Short-circuit
+ return;
+ } elseif ( !$isWrite && $elapsed < $this->eventThreshold ) {
+ // Not an important query nor slow enough
+ return;
+ }
+
+ foreach ( $this->dbTrxHoldingLocks as $name => $info ) {
+ $lastQuery = end( $this->dbTrxMethodTimes[$name] );
+ if ( $lastQuery ) {
+ // Additional query in the trx...
+ $lastEnd = $lastQuery[2];
+ if ( $sTime >= $lastEnd ) { // sanity check
+ if ( ( $sTime - $lastEnd ) > $this->eventThreshold ) {
+ // Add an entry representing the time spent doing non-queries
+ $this->dbTrxMethodTimes[$name][] = array( '...delay...', $lastEnd, $sTime );
+ }
+ $this->dbTrxMethodTimes[$name][] = array( $query, $sTime, $eTime );
+ }
+ } else {
+ // First query in the trx...
+ if ( $sTime >= $info['start'] ) { // sanity check
+ $this->dbTrxMethodTimes[$name][] = array( $query, $sTime, $eTime );
+ }
+ }
+ }
+ }
+
+ /**
+ * Mark a DB as no longer in a transaction
+ *
+ * This will check if locks are possibly held for longer than
+ * needed and log any affected transactions to a special DB log.
+ * Note that there can be multiple connections to a single DB.
+ *
+ * @param string $server DB server
+ * @param string $db DB name
+ * @param string $id ID string of transaction
+ */
+ public function transactionWritingOut( $server, $db, $id ) {
+ $name = "{$server} ({$db}) (TRX#$id)";
+ if ( !isset( $this->dbTrxMethodTimes[$name] ) ) {
+ $this->logger->info( "Detected no transaction for '$name' - out of sync." );
+ return;
+ }
+ // Fill in the last non-query period...
+ $lastQuery = end( $this->dbTrxMethodTimes[$name] );
+ if ( $lastQuery ) {
+ $now = microtime( true );
+ $lastEnd = $lastQuery[2];
+ if ( ( $now - $lastEnd ) > $this->eventThreshold ) {
+ $this->dbTrxMethodTimes[$name][] = array( '...delay...', $lastEnd, $now );
+ }
+ }
+ // Check for any slow queries or non-query periods...
+ $slow = false;
+ foreach ( $this->dbTrxMethodTimes[$name] as $info ) {
+ $elapsed = ( $info[2] - $info[1] );
+ if ( $elapsed >= $this->dbLockThreshold ) {
+ $slow = true;
+ break;
+ }
+ }
+ if ( $slow ) {
+ $dbs = implode( ', ', array_keys( $this->dbTrxHoldingLocks[$name]['conns'] ) );
+ $msg = "Sub-optimal transaction on DB(s) [{$dbs}]:\n";
+ foreach ( $this->dbTrxMethodTimes[$name] as $i => $info ) {
+ list( $query, $sTime, $end ) = $info;
+ $msg .= sprintf( "%d\t%.6f\t%s\n", $i, ( $end - $sTime ), $query );
+ }
+ $this->logger->info( $msg );
+ }
+ unset( $this->dbTrxHoldingLocks[$name] );
+ unset( $this->dbTrxMethodTimes[$name] );
+ }
+
+ /**
+ * @param string $expect
+ * @param string $query
+ */
+ protected function reportExpectationViolated( $expect, $query ) {
+ global $wgRequest;
+
+ $n = $this->expect[$expect];
+ $by = $this->expectBy[$expect];
+ $this->logger->info(
+ "[{$wgRequest->getMethod()}] Expectation ($expect <= $n) by $by not met:\n$query\n" . wfBacktrace( true )
+ );
+ }
+}
diff --git a/includes/profiler/output/ProfilerOutput.php b/includes/profiler/output/ProfilerOutput.php
new file mode 100644
index 00000000..3473e0b2
--- /dev/null
+++ b/includes/profiler/output/ProfilerOutput.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Profiler
+ */
+
+/**
+ * Base class for profiling output
+ *
+ * Since 1.25
+ */
+abstract class ProfilerOutput {
+ /** @var Profiler */
+ protected $collector;
+ /** @var array Configuration of $wgProfiler */
+ protected $params = array();
+
+ /**
+ * Constructor
+ * @param Profiler $collector The actual profiler
+ * @param array $params Configuration array, passed down from $wgProfiler
+ */
+ public function __construct( Profiler $collector, array $params ) {
+ $this->collector = $collector;
+ $this->params = $params;
+ }
+
+ /**
+ * Can this output type be used?
+ * @return bool
+ */
+ public function canUse() {
+ return true;
+ }
+
+ /**
+ * Log MediaWiki-style profiling data
+ *
+ * @param array $stats Result of Profiler::getFunctionStats()
+ */
+ abstract public function log( array $stats );
+}
diff --git a/includes/profiler/output/ProfilerOutputDb.php b/includes/profiler/output/ProfilerOutputDb.php
new file mode 100644
index 00000000..76d62d2e
--- /dev/null
+++ b/includes/profiler/output/ProfilerOutputDb.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Profiler storing information in the DB.
+ *
+ * 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 Profiler
+ */
+
+/**
+ * Logs profiling data into the local DB
+ *
+ * @ingroup Profiler
+ * @since 1.25
+ */
+class ProfilerOutputDb extends ProfilerOutput {
+ /** @var bool Whether to store host data with profiling calls */
+ private $perHost = false;
+
+ public function __construct( Profiler $collector, array $params ) {
+ parent::__construct( $collector, $params );
+ global $wgProfilePerHost;
+
+ // Initialize per-host profiling from config, back-compat if available
+ if ( isset( $this->params['perHost'] ) ) {
+ $this->perHost = $this->params['perHost'];
+ } elseif ( $wgProfilePerHost ) {
+ $this->perHost = $wgProfilePerHost;
+ }
+ }
+
+ public function canUse() {
+ # Do not log anything if database is readonly (bug 5375)
+ return !wfReadOnly();
+ }
+
+ public function log( array $stats ) {
+ $pfhost = $this->perHost ? wfHostname() : '';
+
+ try {
+ $dbw = wfGetDB( DB_MASTER );
+ $useTrx = ( $dbw->getType() === 'sqlite' ); // much faster
+ if ( $useTrx ) {
+ $dbw->startAtomic( __METHOD__ );
+ }
+ foreach ( $stats as $data ) {
+ $name = $data['name'];
+ $eventCount = $data['calls'];
+ $timeSum = (float)$data['real'];
+ $memorySum = (float)$data['memory'];
+ $name = substr( $name, 0, 255 );
+
+ // Kludge
+ $timeSum = $timeSum >= 0 ? $timeSum : 0;
+ $memorySum = $memorySum >= 0 ? $memorySum : 0;
+
+ $dbw->upsert( 'profiling',
+ array(
+ 'pf_name' => $name,
+ 'pf_count' => $eventCount,
+ 'pf_time' => $timeSum,
+ 'pf_memory' => $memorySum,
+ 'pf_server' => $pfhost
+ ),
+ array( array( 'pf_name', 'pf_server' ) ),
+ array(
+ "pf_count=pf_count+{$eventCount}",
+ "pf_time=pf_time+{$timeSum}",
+ "pf_memory=pf_memory+{$memorySum}",
+ ),
+ __METHOD__
+ );
+ }
+ if ( $useTrx ) {
+ $dbw->endAtomic( __METHOD__ );
+ }
+ } catch ( DBError $e ) {
+ }
+ }
+}
diff --git a/includes/profiler/output/ProfilerOutputDump.php b/includes/profiler/output/ProfilerOutputDump.php
new file mode 100644
index 00000000..bf4b85c2
--- /dev/null
+++ b/includes/profiler/output/ProfilerOutputDump.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Profiler dumping output in xhprof dump file
+ *
+ * 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 Profiler
+ */
+
+/**
+ * Profiler dumping output in xhprof dump file
+ * @ingroup Profiler
+ *
+ * @since 1.25
+ */
+class ProfilerOutputDump extends ProfilerOutput {
+
+ protected $suffix = ".xhprof";
+
+ /**
+ * Can this output type be used?
+ *
+ * @return bool
+ */
+ public function canUse() {
+ if ( empty( $this->params['outputDir'] ) ) {
+ return false;
+ }
+ return true;
+ }
+
+ public function log( array $stats ) {
+ $data = $this->collector->getRawData();
+ $filename = sprintf( "%s/%s.%s%s", $this->params['outputDir'], uniqid(), $this->collector->getProfileID(), $this->suffix );
+ file_put_contents( $filename, serialize( $data ) );
+ }
+}
diff --git a/includes/profiler/output/ProfilerOutputStats.php b/includes/profiler/output/ProfilerOutputStats.php
new file mode 100644
index 00000000..ef6ef7c9
--- /dev/null
+++ b/includes/profiler/output/ProfilerOutputStats.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * ProfilerOutput class that flushes profiling data to the profiling
+ * context's stats buffer.
+ *
+ * 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 Profiler
+ */
+
+/**
+ * ProfilerOutput class that flushes profiling data to the profiling
+ * context's stats buffer.
+ *
+ * @ingroup Profiler
+ * @since 1.25
+ */
+class ProfilerOutputStats extends ProfilerOutput {
+
+ /**
+ * Flush profiling data to the current profiling context's stats buffer.
+ *
+ * @param array $stats
+ */
+ public function log( array $stats ) {
+ $contextStats = $this->collector->getContext()->getStats();
+
+ foreach ( $stats as $stat ) {
+ // Sanitize the key
+ $key = str_replace( '::', '.', $stat['name'] );
+ $key = preg_replace( '/[^a-z.]+/i', '_', $key );
+ $key = trim( $key, '_.' );
+
+ // Convert fractional seconds to whole milliseconds
+ $cpu = round( $stat['cpu'] * 1000 );
+ $real = round( $stat['real'] * 1000 );
+
+ $contextStats->increment( "{$key}.calls" );
+ $contextStats->timing( "{$key}.cpu", $cpu );
+ $contextStats->timing( "{$key}.real", $real );
+ }
+ }
+}
diff --git a/includes/profiler/output/ProfilerOutputText.php b/includes/profiler/output/ProfilerOutputText.php
new file mode 100644
index 00000000..67527798
--- /dev/null
+++ b/includes/profiler/output/ProfilerOutputText.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Profiler showing output in page source.
+ *
+ * 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 Profiler
+ */
+
+/**
+ * The least sophisticated profiler output class possible, view your source! :)
+ *
+ * @ingroup Profiler
+ * @since 1.25
+ */
+class ProfilerOutputText extends ProfilerOutput {
+ /** @var float Min real time display threshold */
+ protected $thresholdMs;
+
+ function __construct( Profiler $collector, array $params ) {
+ parent::__construct( $collector, $params );
+ $this->thresholdMs = isset( $params['thresholdMs'] )
+ ? $params['thresholdMs']
+ : .25;
+ }
+ public function log( array $stats ) {
+ if ( $this->collector->getTemplated() ) {
+ $out = '';
+
+ // Filter out really tiny entries
+ $min = $this->thresholdMs;
+ $stats = array_filter( $stats, function ( $a ) use ( $min ) {
+ return $a['real'] > $min;
+ } );
+ // Sort descending by time elapsed
+ usort( $stats, function ( $a, $b ) {
+ return $a['real'] < $b['real'];
+ } );
+
+ array_walk( $stats,
+ function ( $item ) use ( &$out ) {
+ $out .= sprintf( "%6.2f%% %3.3f %6d - %s\n",
+ $item['%real'], $item['real'], $item['calls'], $item['name'] );
+ }
+ );
+
+ $contentType = $this->collector->getContentType();
+ if ( PHP_SAPI === 'cli' ) {
+ print "<!--\n{$out}\n-->\n";
+ } elseif ( $contentType === 'text/html' ) {
+ $visible = isset( $this->params['visible'] ) ?
+ $this->params['visible'] : false;
+ if ( $visible ) {
+ print "<pre>{$out}</pre>";
+ } else {
+ print "<!--\n{$out}\n-->\n";
+ }
+ } elseif ( $contentType === 'text/javascript' || $contentType === 'text/css' ) {
+ print "\n/*\n{$out}*/\n";
+ }
+ }
+ }
+}
diff --git a/includes/profiler/output/ProfilerOutputUdp.php b/includes/profiler/output/ProfilerOutputUdp.php
new file mode 100644
index 00000000..7da03c11
--- /dev/null
+++ b/includes/profiler/output/ProfilerOutputUdp.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Profiler sending messages over UDP.
+ *
+ * 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 Profiler
+ */
+
+/**
+ * ProfilerSimpleUDP class, that sends out messages for 'udpprofile' daemon
+ * (see http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile)
+ *
+ * @ingroup Profiler
+ * @since 1.25
+ */
+class ProfilerOutputUdp extends ProfilerOutput {
+ /** @var int port to send profiling data to */
+ private $port = 3811;
+
+ /** @var string host to send profiling data to */
+ private $host = '127.0.0.1';
+
+ /** @var string format string for profiling data */
+ private $format = "%s - %d %f %f %f %f %s\n";
+
+ public function __construct( Profiler $collector, array $params ) {
+ parent::__construct( $collector, $params );
+ global $wgUDPProfilerPort, $wgUDPProfilerHost, $wgUDPProfilerFormatString;
+
+ // Initialize port, host, and format from config, back-compat if available
+ if ( isset( $this->params['udpport'] ) ) {
+ $this->port = $this->params['udpport'];
+ } elseif ( $wgUDPProfilerPort ) {
+ $this->port = $wgUDPProfilerPort;
+ }
+
+ if ( isset( $this->params['udphost'] ) ) {
+ $this->host = $this->params['udphost'];
+ } elseif ( $wgUDPProfilerHost ) {
+ $this->host = $wgUDPProfilerHost;
+ }
+
+ if ( isset( $this->params['udpformat'] ) ) {
+ $this->format = $this->params['udpformat'];
+ } elseif ( $wgUDPProfilerFormatString ) {
+ $this->format = $wgUDPProfilerFormatString;
+ }
+ }
+
+ public function canUse() {
+ # Sockets are not enabled
+ return function_exists( 'socket_create' );
+ }
+
+ public function log( array $stats ) {
+ $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
+ $plength = 0;
+ $packet = "";
+ foreach ( $stats as $pfdata ) {
+ $pfline = sprintf( $this->format,
+ $this->collector->getProfileID(),
+ $pfdata['calls'],
+ $pfdata['cpu'] / 1000, // ms => sec
+ 0.0, // sum of CPU^2 for each invocation (unused)
+ $pfdata['real'] / 1000, // ms => sec
+ 0.0, // sum of real^2 for each invocation (unused)
+ $pfdata['name'],
+ $pfdata['memory']
+ );
+ $length = strlen( $pfline );
+ if ( $length + $plength > 1400 ) {
+ socket_sendto( $sock, $packet, $plength, 0, $this->host, $this->port );
+ $packet = "";
+ $plength = 0;
+ }
+ $packet .= $pfline;
+ $plength += $length;
+ }
+ socket_sendto( $sock, $packet, $plength, 0x100, $this->host, $this->port );
+ }
+}
diff --git a/includes/rcfeed/IRCColourfulRCFeedFormatter.php b/includes/rcfeed/IRCColourfulRCFeedFormatter.php
index 02a8d7eb..30be3431 100644
--- a/includes/rcfeed/IRCColourfulRCFeedFormatter.php
+++ b/includes/rcfeed/IRCColourfulRCFeedFormatter.php
@@ -56,7 +56,7 @@ class IRCColourfulRCFeedFormatter implements RCFeedFormatter {
$query .= '&rcid=' . $attribs['rc_id'];
}
// HACK: We need this hook for WMF's secure server setup
- wfRunHooks( 'IRCLineURL', array( &$url, &$query, $rc ) );
+ Hooks::run( 'IRCLineURL', array( &$url, &$query, $rc ) );
$url .= $query;
}
diff --git a/includes/rcfeed/UDPRCFeedEngine.php b/includes/rcfeed/UDPRCFeedEngine.php
index 8554670e..9afae661 100644
--- a/includes/rcfeed/UDPRCFeedEngine.php
+++ b/includes/rcfeed/UDPRCFeedEngine.php
@@ -29,6 +29,7 @@ class UDPRCFeedEngine implements RCFeedEngine {
* @see RCFeedEngine::send
*/
public function send( array $feed, $line ) {
- wfErrorLog( $line, $feed['uri'] );
+ $transport = UDPTransport::newFromString( $feed['uri'] );
+ $transport->emit( $line );
}
}
diff --git a/includes/registration/ExtensionProcessor.php b/includes/registration/ExtensionProcessor.php
new file mode 100644
index 00000000..7f738661
--- /dev/null
+++ b/includes/registration/ExtensionProcessor.php
@@ -0,0 +1,299 @@
+<?php
+
+class ExtensionProcessor implements Processor {
+
+ /**
+ * Keys that should be set to $GLOBALS
+ *
+ * @var array
+ */
+ protected static $globalSettings = array(
+ 'ResourceLoaderSources',
+ 'ResourceLoaderLESSVars',
+ 'ResourceLoaderLESSImportPaths',
+ 'DefaultUserOptions',
+ 'HiddenPrefs',
+ 'GroupPermissions',
+ 'RevokePermissions',
+ 'ImplicitGroups',
+ 'GroupsAddToSelf',
+ 'GroupsRemoveFromSelf',
+ 'AddGroups',
+ 'RemoveGroups',
+ 'AvailableRights',
+ 'ContentHandlers',
+ 'ConfigRegistry',
+ 'RateLimits',
+ 'RecentChangesFlags',
+ 'MediaHandlers',
+ 'ExtensionFunctions',
+ 'ExtensionEntryPointListFiles',
+ 'SpecialPages',
+ 'JobClasses',
+ 'LogTypes',
+ 'LogRestrictions',
+ 'FilterLogTypes',
+ 'LogNames',
+ 'LogHeaders',
+ 'LogActions',
+ 'LogActionsHandlers',
+ 'Actions',
+ 'APIModules',
+ 'APIFormatModules',
+ 'APIMetaModules',
+ 'APIPropModules',
+ 'APIListModules',
+ 'ValidSkinNames',
+ );
+
+ /**
+ * Keys that are part of the extension credits
+ *
+ * @var array
+ */
+ protected static $creditsAttributes = array(
+ 'name',
+ 'namemsg',
+ 'author',
+ 'version',
+ 'url',
+ 'description',
+ 'descriptionmsg',
+ 'license-name',
+ );
+
+ /**
+ * Things that are not 'attributes', but are not in
+ * $globalSettings or $creditsAttributes.
+ *
+ * @var array
+ */
+ protected static $notAttributes = array(
+ 'callback',
+ 'Hooks',
+ 'namespaces',
+ 'ResourceFileModulePaths',
+ 'ResourceModules',
+ 'ResourceModuleSkinStyles',
+ 'ExtensionMessagesFiles',
+ 'MessagesDirs',
+ 'type',
+ 'config',
+ 'ParserTestFiles',
+ 'AutoloadClasses',
+ );
+
+ /**
+ * Stuff that is going to be set to $GLOBALS
+ *
+ * Some keys are pre-set to arrays so we can += to them
+ *
+ * @var array
+ */
+ protected $globals = array(
+ 'wgExtensionMessagesFiles' => array(),
+ 'wgMessagesDirs' => array(),
+ );
+
+ /**
+ * Things that should be define()'d
+ *
+ * @var array
+ */
+ protected $defines = array();
+
+ /**
+ * Things to be called once registration of these extensions are done
+ *
+ * @var callable[]
+ */
+ protected $callbacks = array();
+
+ /**
+ * @var array
+ */
+ protected $credits = array();
+
+ /**
+ * Any thing else in the $info that hasn't
+ * already been processed
+ *
+ * @var array
+ */
+ protected $attributes = array();
+
+ /**
+ * @param string $path
+ * @param array $info
+ * @return array
+ */
+ public function extractInfo( $path, array $info ) {
+ $this->extractConfig( $info );
+ $this->extractHooks( $info );
+ $dir = dirname( $path );
+ $this->extractExtensionMessagesFiles( $dir, $info );
+ $this->extractMessagesDirs( $dir, $info );
+ $this->extractNamespaces( $info );
+ $this->extractResourceLoaderModules( $dir, $info );
+ $this->extractParserTestFiles( $dir, $info );
+ if ( isset( $info['callback'] ) ) {
+ $this->callbacks[] = $info['callback'];
+ }
+
+ $this->extractCredits( $path, $info );
+ foreach ( $info as $key => $val ) {
+ if ( in_array( $key, self::$globalSettings ) ) {
+ $this->storeToArray( "wg$key", $val, $this->globals );
+ // Ignore anything that starts with a @
+ } elseif ( $key[0] !== '@' && !in_array( $key, self::$notAttributes )
+ && !in_array( $key, self::$creditsAttributes )
+ ) {
+ $this->storeToArray( $key, $val, $this->attributes );
+ }
+ }
+ }
+
+ public function getExtractedInfo() {
+ return array(
+ 'globals' => $this->globals,
+ 'defines' => $this->defines,
+ 'callbacks' => $this->callbacks,
+ 'credits' => $this->credits,
+ 'attributes' => $this->attributes,
+ );
+ }
+
+ protected function extractHooks( array $info ) {
+ if ( isset( $info['Hooks'] ) ) {
+ foreach ( $info['Hooks'] as $name => $callable ) {
+ $this->globals['wgHooks'][$name][] = $callable;
+ }
+ }
+ }
+
+ /**
+ * Register namespaces with the appropriate global settings
+ *
+ * @param array $info
+ */
+ protected function extractNamespaces( array $info ) {
+ if ( isset( $info['namespaces'] ) ) {
+ foreach ( $info['namespaces'] as $ns ) {
+ $id = $ns['id'];
+ $this->defines[$ns['constant']] = $id;
+ $this->globals['wgExtraNamespaces'][$id] = $ns['name'];
+ if ( isset( $ns['gender'] ) ) {
+ $this->globals['wgExtraGenderNamespaces'][$id] = $ns['gender'];
+ }
+ if ( isset( $ns['subpages'] ) && $ns['subpages'] ) {
+ $this->globals['wgNamespacesWithSubpages'][$id] = true;
+ }
+ if ( isset( $ns['content'] ) && $ns['content'] ) {
+ $this->globals['wgContentNamespaces'][] = $id;
+ }
+ if ( isset( $ns['defaultcontentmodel'] ) ) {
+ $this->globals['wgNamespaceContentModels'][$id] = $ns['defaultcontentmodel'];
+ }
+ }
+ }
+ }
+
+ protected function extractResourceLoaderModules( $dir, array $info ) {
+ $defaultPaths = isset( $info['ResourceFileModulePaths'] )
+ ? $info['ResourceFileModulePaths']
+ : false;
+ if ( isset( $defaultPaths['localBasePath'] ) ) {
+ $defaultPaths['localBasePath'] = "$dir/{$defaultPaths['localBasePath']}";
+ }
+
+ foreach ( array( 'ResourceModules', 'ResourceModuleSkinStyles' ) as $setting ) {
+ if ( isset( $info[$setting] ) ) {
+ foreach ( $info[$setting] as $name => $data ) {
+ if ( isset( $data['localBasePath'] ) ) {
+ $data['localBasePath'] = "$dir/{$data['localBasePath']}";
+ }
+ if ( $defaultPaths ) {
+ $data += $defaultPaths;
+ }
+ $this->globals["wg$setting"][$name] = $data;
+ }
+ }
+ }
+ }
+
+ protected function extractExtensionMessagesFiles( $dir, array $info ) {
+ if ( isset( $info['ExtensionMessagesFiles'] ) ) {
+ $this->globals["wgExtensionMessagesFiles"] += array_map( function( $file ) use ( $dir ) {
+ return "$dir/$file";
+ }, $info['ExtensionMessagesFiles'] );
+ }
+ }
+
+ /**
+ * Set message-related settings, which need to be expanded to use
+ * absolute paths
+ *
+ * @param string $dir
+ * @param array $info
+ */
+ protected function extractMessagesDirs( $dir, array $info ) {
+ if ( isset( $info['MessagesDirs'] ) ) {
+ foreach ( $info['MessagesDirs'] as $name => $files ) {
+ foreach ( (array)$files as $file ) {
+ $this->globals["wgMessagesDirs"][$name][] = "$dir/$file";
+ }
+ }
+ }
+ }
+
+ protected function extractCredits( $path, array $info ) {
+ $credits = array(
+ 'path' => $path,
+ 'type' => isset( $info['type'] ) ? $info['type'] : 'other',
+ );
+ foreach ( self::$creditsAttributes as $attr ) {
+ if ( isset( $info[$attr] ) ) {
+ $credits[$attr] = $info[$attr];
+ }
+ }
+
+ $this->credits[$credits['name']] = $credits;
+ }
+
+ /**
+ * Set configuration settings
+ * @todo In the future, this should be done via Config interfaces
+ *
+ * @param array $info
+ */
+ protected function extractConfig( array $info ) {
+ if ( isset( $info['config'] ) ) {
+ foreach ( $info['config'] as $key => $val ) {
+ if ( $key[0] !== '@' ) {
+ $this->globals["wg$key"] = $val;
+ }
+ }
+ }
+ }
+
+ protected function extractParserTestFiles( $dir, array $info ) {
+ if ( isset( $info['ParserTestFiles'] ) ) {
+ foreach ( $info['ParserTestFiles'] as $path ) {
+ $this->globals['wgParserTestFiles'][] = "$dir/$path";
+ }
+ }
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $value
+ * @param array &$array
+ */
+ protected function storeToArray( $name, $value, &$array ) {
+ if ( isset( $array[$name] ) ) {
+ $array[$name] = array_merge_recursive( $array[$name], $value );
+ } else {
+ $array[$name] = $value;
+ }
+ }
+}
diff --git a/includes/registration/ExtensionRegistry.php b/includes/registration/ExtensionRegistry.php
new file mode 100644
index 00000000..2558f7e2
--- /dev/null
+++ b/includes/registration/ExtensionRegistry.php
@@ -0,0 +1,254 @@
+<?php
+
+/**
+ * ExtensionRegistry class
+ *
+ * The Registry loads JSON files, and uses a Processor
+ * to extract information from them. It also registers
+ * classes with the autoloader.
+ *
+ * @since 1.25
+ */
+class ExtensionRegistry {
+
+ /**
+ * @var BagOStuff
+ */
+ protected $cache;
+
+ /**
+ * Array of loaded things, keyed by name, values are credits information
+ *
+ * @var array
+ */
+ private $loaded = array();
+
+ /**
+ * List of paths that should be loaded
+ *
+ * @var array
+ */
+ protected $queued = array();
+
+ /**
+ * Items in the JSON file that aren't being
+ * set as globals
+ *
+ * @var array
+ */
+ protected $attributes = array();
+
+ /**
+ * @var ExtensionRegistry
+ */
+ private static $instance;
+
+ /**
+ * @return ExtensionRegistry
+ */
+ public static function getInstance() {
+ if ( self::$instance === null ) {
+ self::$instance = new self();
+ }
+
+ return self::$instance;
+ }
+
+ public function __construct() {
+ // We use a try/catch instead of the $fallback parameter because
+ // we don't want to fail here if $wgObjectCaches is not configured
+ // properly for APC setup
+ try {
+ $this->cache = ObjectCache::newAccelerator( array() );
+ } catch ( MWException $e ) {
+ $this->cache = new EmptyBagOStuff();
+ }
+ }
+
+ /**
+ * @param string $path Absolute path to the JSON file
+ */
+ public function queue( $path ) {
+ global $wgExtensionInfoMTime;
+
+ $mtime = $wgExtensionInfoMTime;
+ if ( $mtime === false ) {
+ if ( file_exists( $path ) ) {
+ $mtime = filemtime( $path );
+ } else {
+ throw new Exception( "$path does not exist!" );
+ }
+ if ( !$mtime ) {
+ $err = error_get_last();
+ throw new Exception( "Couldn't stat $path: {$err['message']}" );
+ }
+ }
+ $this->queued[$path] = $mtime;
+ }
+
+ public function loadFromQueue() {
+ if ( !$this->queued ) {
+ return;
+ }
+
+ // See if this queue is in APC
+ $key = wfMemcKey( 'registration', md5( json_encode( $this->queued ) ) );
+ $data = $this->cache->get( $key );
+ if ( $data ) {
+ $this->exportExtractedData( $data );
+ } else {
+ $data = $this->readFromQueue( $this->queued );
+ $this->exportExtractedData( $data );
+ // Do this late since we don't want to extract it since we already
+ // did that, but it should be cached
+ $data['globals']['wgAutoloadClasses'] += $data['autoload'];
+ unset( $data['autoload'] );
+ $this->cache->set( $key, $data, 60 * 60 * 24 );
+ }
+ $this->queued = array();
+ }
+
+ /**
+ * Process a queue of extensions and return their extracted data
+ *
+ * @param array $queue keys are filenames, values are ignored
+ * @return array extracted info
+ * @throws Exception
+ */
+ public function readFromQueue( array $queue ) {
+ $data = array( 'globals' => array( 'wgAutoloadClasses' => array() ) );
+ $autoloadClasses = array();
+ $processor = new ExtensionProcessor();
+ foreach ( $queue as $path => $mtime ) {
+ $json = file_get_contents( $path );
+ $info = json_decode( $json, /* $assoc = */ true );
+ if ( !is_array( $info ) ) {
+ throw new Exception( "$path is not a valid JSON file." );
+ }
+ $autoload = $this->processAutoLoader( dirname( $path ), $info );
+ // Set up the autoloader now so custom processors will work
+ $GLOBALS['wgAutoloadClasses'] += $autoload;
+ $autoloadClasses += $autoload;
+ $processor->extractInfo( $path, $info );
+ }
+ $data = $processor->getExtractedInfo();
+ // Need to set this so we can += to it later
+ $data['globals']['wgAutoloadClasses'] = array();
+ foreach ( $data['credits'] as $credit ) {
+ $data['globals']['wgExtensionCredits'][$credit['type']][] = $credit;
+ }
+ $data['autoload'] = $autoloadClasses;
+ return $data;
+ }
+
+ protected function exportExtractedData( array $info ) {
+ foreach ( $info['globals'] as $key => $val ) {
+ if ( !isset( $GLOBALS[$key] ) || !$GLOBALS[$key] ) {
+ $GLOBALS[$key] = $val;
+ } elseif ( $key === 'wgHooks' || $key === 'wgExtensionCredits' ) {
+ // Special case $wgHooks and $wgExtensionCredits, which require a recursive merge.
+ // Ideally it would have been taken care of in the first if block though.
+ $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val );
+ } elseif ( $key === 'wgGroupPermissions' ) {
+ // First merge individual groups
+ foreach ( $GLOBALS[$key] as $name => &$groupVal ) {
+ if ( isset( $val[$name] ) ) {
+ $groupVal += $val[$name];
+ }
+ }
+ // Now merge groups that didn't exist yet
+ $GLOBALS[$key] += $val;
+ } elseif ( is_array( $GLOBALS[$key] ) && is_array( $val ) ) {
+ $GLOBALS[$key] = array_merge( $val, $GLOBALS[$key] );
+ } // else case is a config setting where it has already been overriden, so don't set it
+ }
+ foreach ( $info['defines'] as $name => $val ) {
+ define( $name, $val );
+ }
+ foreach ( $info['callbacks'] as $cb ) {
+ call_user_func( $cb );
+ }
+
+ $this->loaded += $info['credits'];
+
+ if ( $info['attributes'] ) {
+ if ( !$this->attributes ) {
+ $this->attributes = $info['attributes'];
+ } else {
+ $this->attributes = array_merge_recursive( $this->attributes, $info['attributes'] );
+ }
+ }
+ }
+
+ /**
+ * Loads and processes the given JSON file without delay
+ *
+ * If some extensions are already queued, this will load
+ * those as well.
+ *
+ * @param string $path Absolute path to the JSON file
+ */
+ public function load( $path ) {
+ $this->loadFromQueue(); // First clear the queue
+ $this->queue( $path );
+ $this->loadFromQueue();
+ }
+
+ /**
+ * Whether a thing has been loaded
+ * @param string $name
+ * @return bool
+ */
+ public function isLoaded( $name ) {
+ return isset( $this->loaded[$name] );
+ }
+
+ /**
+ * @param string $name
+ * @return array
+ */
+ public function getAttribute( $name ) {
+ if ( isset( $this->attributes[$name] ) ) {
+ return $this->attributes[$name];
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Get information about all things
+ *
+ * @return array
+ */
+ public function getAllThings() {
+ return $this->loaded;
+ }
+
+ /**
+ * Mark a thing as loaded
+ *
+ * @param string $name
+ * @param array $credits
+ */
+ protected function markLoaded( $name, array $credits ) {
+ $this->loaded[$name] = $credits;
+ }
+
+ /**
+ * Register classes with the autoloader
+ *
+ * @param string $dir
+ * @param array $info
+ * @return array
+ */
+ protected function processAutoLoader( $dir, array $info ) {
+ if ( isset( $info['AutoloadClasses'] ) ) {
+ // Make paths absolute, relative to the JSON file
+ return array_map( function( $file ) use ( $dir ) {
+ return "$dir/$file";
+ }, $info['AutoloadClasses'] );
+ } else {
+ return array();
+ }
+ }
+}
diff --git a/includes/registration/Processor.php b/includes/registration/Processor.php
new file mode 100644
index 00000000..e930fd3e
--- /dev/null
+++ b/includes/registration/Processor.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * Processors read associated arrays and register
+ * whatever is required
+ *
+ * @since 1.25
+ */
+interface Processor {
+
+ /**
+ * Main entry point, processes the information
+ * provided.
+ * Callers should call "callback" after calling
+ * this function.
+ *
+ * @param string $path Absolute path of JSON file
+ * @param array $info
+ * @return array "credits" information to store
+ */
+ public function extractInfo( $path, array $info );
+
+ /**
+ * @return array With 'globals', 'defines', 'callbacks', 'credits' keys.
+ */
+ public function getExtractedInfo();
+}
diff --git a/includes/resourceloader/DerivativeResourceLoaderContext.php b/includes/resourceloader/DerivativeResourceLoaderContext.php
index d114d7ed..5784f2a0 100644
--- a/includes/resourceloader/DerivativeResourceLoaderContext.php
+++ b/includes/resourceloader/DerivativeResourceLoaderContext.php
@@ -126,6 +126,7 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
public function setUser( $user ) {
$this->user = $user;
$this->hash = null;
+ $this->userObj = null;
}
public function getDebug() {
diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php
index 4f1414bc..150ccd07 100644
--- a/includes/resourceloader/ResourceLoader.php
+++ b/includes/resourceloader/ResourceLoader.php
@@ -35,26 +35,47 @@ class ResourceLoader {
/** @var bool */
protected static $debugMode = null;
- /** @var array Module name/ResourceLoaderModule object pairs */
+ /** @var array */
+ private static $lessVars = null;
+
+ /**
+ * Module name/ResourceLoaderModule object pairs
+ * @var array
+ */
protected $modules = array();
- /** @var array Associative array mapping module name to info associative array */
+ /**
+ * Associative array mapping module name to info associative array
+ * @var array
+ */
protected $moduleInfos = array();
/** @var Config $config */
private $config;
/**
- * @var array Associative array mapping framework ids to a list of names of test suite modules
- * like array( 'qunit' => array( 'mediawiki.tests.qunit.suites', 'ext.foo.tests', .. ), .. )
+ * Associative array mapping framework ids to a list of names of test suite modules
+ * like array( 'qunit' => array( 'mediawiki.tests.qunit.suites', 'ext.foo.tests', .. ), .. )
+ * @var array
*/
protected $testModuleNames = array();
- /** @var array E.g. array( 'source-id' => 'http://.../load.php' ) */
+ /**
+ * E.g. array( 'source-id' => 'http://.../load.php' )
+ * @var array
+ */
protected $sources = array();
- /** @var bool */
- protected $hasErrors = false;
+ /**
+ * Errors accumulated during current respond() call.
+ * @var array
+ */
+ protected $errors = array();
+
+ /**
+ * @var MessageBlobStore
+ */
+ protected $blobStore;
/**
* Load information stored in the database about modules.
@@ -130,7 +151,7 @@ class ResourceLoader {
foreach ( array_keys( $modulesWithoutMessages ) as $name ) {
$module = $this->getModule( $name );
if ( $module ) {
- $module->setMsgBlobMtime( $lang, 0 );
+ $module->setMsgBlobMtime( $lang, 1 );
}
}
}
@@ -152,12 +173,10 @@ class ResourceLoader {
* @return string Filtered data, or a comment containing an error message
*/
public function filter( $filter, $data, $cacheReport = true ) {
- wfProfileIn( __METHOD__ );
// For empty/whitespace-only data or for unknown filters, don't perform
// any caching or processing
if ( trim( $data ) === '' || !in_array( $filter, array( 'minify-js', 'minify-css' ) ) ) {
- wfProfileOut( __METHOD__ );
return $data;
}
@@ -168,7 +187,6 @@ class ResourceLoader {
$cacheEntry = $cache->get( $key );
if ( is_string( $cacheEntry ) ) {
wfIncrStats( "rl-$filter-cache-hits" );
- wfProfileOut( __METHOD__ );
return $cacheEntry;
}
@@ -199,13 +217,9 @@ class ResourceLoader {
} catch ( Exception $e ) {
MWExceptionHandler::logException( $e );
wfDebugLog( 'resourceloader', __METHOD__ . ": minification failed: $e" );
- $this->hasErrors = true;
- // Return exception as a comment
- $result = self::formatException( $e );
+ $this->errors[] = self::formatExceptionNoComment( $e );
}
- wfProfileOut( __METHOD__ );
-
return $result;
}
@@ -218,8 +232,6 @@ class ResourceLoader {
public function __construct( Config $config = null ) {
global $IP;
- wfProfileIn( __METHOD__ );
-
if ( $config === null ) {
wfDebug( __METHOD__ . ' was called without providing a Config instance' );
$config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
@@ -236,14 +248,14 @@ class ResourceLoader {
// Register core modules
$this->register( include "$IP/resources/Resources.php" );
// Register extension modules
- wfRunHooks( 'ResourceLoaderRegisterModules', array( &$this ) );
+ Hooks::run( 'ResourceLoaderRegisterModules', array( &$this ) );
$this->register( $config->get( 'ResourceModules' ) );
if ( $config->get( 'EnableJavaScriptTest' ) === true ) {
$this->registerTestModules();
}
- wfProfileOut( __METHOD__ );
+ $this->setMessageBlobStore( new MessageBlobStore() );
}
/**
@@ -254,6 +266,14 @@ class ResourceLoader {
}
/**
+ * @param MessageBlobStore $blobStore
+ * @since 1.25
+ */
+ public function setMessageBlobStore( MessageBlobStore $blobStore ) {
+ $this->blobStore = $blobStore;
+ }
+
+ /**
* Register a module with the ResourceLoader system.
*
* @param mixed $name Name of module as a string or List of name/object pairs as an array
@@ -267,14 +287,12 @@ class ResourceLoader {
* not registered
*/
public function register( $name, $info = null ) {
- wfProfileIn( __METHOD__ );
// Allow multiple modules to be registered in one call
$registrations = is_array( $name ) ? $name : array( $name => $info );
foreach ( $registrations as $name => $info ) {
// Disallow duplicate registrations
if ( isset( $this->moduleInfos[$name] ) ) {
- wfProfileOut( __METHOD__ );
// A module has already been registered by this name
throw new MWException(
'ResourceLoader duplicate registration error. ' .
@@ -284,7 +302,6 @@ class ResourceLoader {
// Check $name for validity
if ( !self::isValidModuleName( $name ) ) {
- wfProfileOut( __METHOD__ );
throw new MWException( "ResourceLoader module name '$name' is invalid, "
. "see ResourceLoader::isValidModuleName()" );
}
@@ -298,7 +315,6 @@ class ResourceLoader {
// New calling convention
$this->moduleInfos[$name] = $info;
} else {
- wfProfileOut( __METHOD__ );
throw new MWException(
'ResourceLoader module info type error for module \'' . $name .
'\': expected ResourceLoaderModule or array (got: ' . gettype( $info ) . ')'
@@ -323,19 +339,16 @@ class ResourceLoader {
} elseif ( isset( $skinStyles['+' . $name] ) ) {
$paths = (array)$skinStyles['+' . $name];
$styleFiles = isset( $this->moduleInfos[$name]['skinStyles']['default'] ) ?
- $this->moduleInfos[$name]['skinStyles']['default'] :
+ (array)$this->moduleInfos[$name]['skinStyles']['default'] :
array();
} else {
continue;
}
// Add new file paths, remapping them to refer to our directories and not use settings
- // from the module we're modifying. These can come from the base definition or be defined
- // for each module.
+ // from the module we're modifying, which come from the base definition.
list( $localBasePath, $remoteBasePath ) =
ResourceLoaderFileModule::extractBasePaths( $skinStyles );
- list( $localBasePath, $remoteBasePath ) =
- ResourceLoaderFileModule::extractBasePaths( $paths, $localBasePath, $remoteBasePath );
foreach ( $paths as $path ) {
$styleFiles[] = new ResourceLoaderFilePath( $path, $localBasePath, $remoteBasePath );
@@ -346,7 +359,6 @@ class ResourceLoader {
}
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -360,13 +372,11 @@ class ResourceLoader {
. 'Edit your <code>LocalSettings.php</code> to enable it.' );
}
- wfProfileIn( __METHOD__ );
-
// Get core test suites
$testModules = array();
$testModules['qunit'] = array();
// Get other test suites (e.g. from extensions)
- wfRunHooks( 'ResourceLoaderTestModules', array( &$testModules, &$this ) );
+ Hooks::run( 'ResourceLoaderTestModules', array( &$testModules, &$this ) );
// Add the testrunner (which configures QUnit) to the dependencies.
// Since it must be ready before any of the test suites are executed.
@@ -389,7 +399,6 @@ class ResourceLoader {
$this->testModuleNames[$id] = array_keys( $testModules[$id] );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -464,6 +473,17 @@ class ResourceLoader {
}
/**
+ * Check whether a ResourceLoader module is registered
+ *
+ * @since 1.25
+ * @param string $name
+ * @return bool
+ */
+ public function isModuleRegistered( $name ) {
+ return isset( $this->moduleInfos[$name] );
+ }
+
+ /**
* Get the ResourceLoaderModule object for a given module name.
*
* If an array of module parameters exists but a ResourceLoaderModule object has not
@@ -568,9 +588,6 @@ class ResourceLoader {
// See http://bugs.php.net/bug.php?id=36514
ob_start();
- wfProfileIn( __METHOD__ );
- $errors = '';
-
// Find out which modules are missing and instantiate the others
$modules = array();
$missing = array();
@@ -581,10 +598,7 @@ class ResourceLoader {
// This is a security issue, see bug 34907.
if ( $module->getGroup() === 'private' ) {
wfDebugLog( 'resourceloader', __METHOD__ . ": request for private module '$name' denied" );
- $this->hasErrors = true;
- // Add exception to the output as a comment
- $errors .= self::makeComment( "Cannot show private module \"$name\"" );
-
+ $this->errors[] = "Cannot show private module \"$name\"";
continue;
}
$modules[$name] = $module;
@@ -599,13 +613,9 @@ class ResourceLoader {
} catch ( Exception $e ) {
MWExceptionHandler::logException( $e );
wfDebugLog( 'resourceloader', __METHOD__ . ": preloading module info failed: $e" );
- $this->hasErrors = true;
- // Add exception to the output as a comment
- $errors .= self::formatException( $e );
+ $this->errors[] = self::formatExceptionNoComment( $e );
}
- wfProfileIn( __METHOD__ . '-getModifiedTime' );
-
// To send Last-Modified and support If-Modified-Since, we need to detect
// the last modified time
$mtime = wfTimestamp( TS_UNIX, $this->config->get( 'CacheEpoch' ) );
@@ -619,36 +629,27 @@ class ResourceLoader {
} catch ( Exception $e ) {
MWExceptionHandler::logException( $e );
wfDebugLog( 'resourceloader', __METHOD__ . ": calculating maximum modified time failed: $e" );
- $this->hasErrors = true;
- // Add exception to the output as a comment
- $errors .= self::formatException( $e );
+ $this->errors[] = self::formatExceptionNoComment( $e );
}
}
- wfProfileOut( __METHOD__ . '-getModifiedTime' );
-
// If there's an If-Modified-Since header, respond with a 304 appropriately
if ( $this->tryRespondLastModified( $context, $mtime ) ) {
- wfProfileOut( __METHOD__ );
return; // output handled (buffers cleared)
}
// Generate a response
$response = $this->makeModuleResponse( $context, $modules, $missing );
- // Prepend comments indicating exceptions
- $response = $errors . $response;
-
// Capture any PHP warnings from the output buffer and append them to the
- // response in a comment if we're in debug mode.
+ // error list if we're in debug mode.
if ( $context->getDebug() && strlen( $warnings = ob_get_contents() ) ) {
- $response = self::makeComment( $warnings ) . $response;
- $this->hasErrors = true;
+ $this->errors[] = $warnings;
}
// Save response to file cache unless there are errors
- if ( isset( $fileCache ) && !$errors && !count( $missing ) ) {
- // Cache single modules...and other requests if there are enough hits
+ if ( isset( $fileCache ) && !$this->errors && !count( $missing ) ) {
+ // Cache single modules and images...and other requests if there are enough hits
if ( ResourceFileCache::useFileCache( $context ) ) {
if ( $fileCache->isCacheWorthy() ) {
$fileCache->saveText( $response );
@@ -659,20 +660,37 @@ class ResourceLoader {
}
// Send content type and cache related headers
- $this->sendResponseHeaders( $context, $mtime, $this->hasErrors );
+ $this->sendResponseHeaders( $context, $mtime, (bool)$this->errors );
// Remove the output buffer and output the response
ob_end_clean();
+
+ if ( $context->getImageObj() && $this->errors ) {
+ // We can't show both the error messages and the response when it's an image.
+ $errorText = '';
+ foreach ( $this->errors as $error ) {
+ $errorText .= $error . "\n";
+ }
+ $response = $errorText;
+ } elseif ( $this->errors ) {
+ // Prepend comments indicating errors
+ $errorText = '';
+ foreach ( $this->errors as $error ) {
+ $errorText .= self::makeComment( $error );
+ }
+ $response = $errorText . $response;
+ }
+
+ $this->errors = array();
echo $response;
- wfProfileOut( __METHOD__ );
}
/**
* Send content type and last modified headers to the client.
* @param ResourceLoaderContext $context
* @param string $mtime TS_MW timestamp to use for last-modified
- * @param bool $errors Whether there are commented-out errors in the response
+ * @param bool $errors Whether there are errors in the response
* @return void
*/
protected function sendResponseHeaders( ResourceLoaderContext $context, $mtime, $errors ) {
@@ -689,7 +707,14 @@ class ResourceLoader {
$maxage = $rlMaxage['versioned']['client'];
$smaxage = $rlMaxage['versioned']['server'];
}
- if ( $context->getOnly() === 'styles' ) {
+ if ( $context->getImageObj() ) {
+ // Output different headers if we're outputting textual errors.
+ if ( $errors ) {
+ header( 'Content-Type: text/plain; charset=utf-8' );
+ } else {
+ $context->getImageObj()->sendResponseHeaders( $context );
+ }
+ } elseif ( $context->getOnly() === 'styles' ) {
header( 'Content-Type: text/css; charset=utf-8' );
header( 'Access-Control-Allow-Origin: *' );
} else {
@@ -813,15 +838,26 @@ class ResourceLoader {
* Handle exception display.
*
* @param Exception $e Exception to be shown to the user
- * @return string Sanitized text that can be returned to the user
+ * @return string Sanitized text in a CSS/JS comment that can be returned to the user
*/
public static function formatException( $e ) {
+ return self::makeComment( self::formatExceptionNoComment( $e ) );
+ }
+
+ /**
+ * Handle exception display.
+ *
+ * @since 1.25
+ * @param Exception $e Exception to be shown to the user
+ * @return string Sanitized text that can be returned to the user
+ */
+ protected static function formatExceptionNoComment( $e ) {
global $wgShowExceptionDetails;
if ( $wgShowExceptionDetails ) {
- return self::makeComment( $e->__toString() );
+ return $e->__toString();
} else {
- return self::makeComment( wfMessage( 'internalerror' )->text() );
+ return wfMessage( 'internalerror' )->text();
}
}
@@ -837,30 +873,37 @@ class ResourceLoader {
array $modules, array $missing = array()
) {
$out = '';
- $exceptions = '';
$states = array();
if ( !count( $modules ) && !count( $missing ) ) {
- return "/* This file is the Web entry point for MediaWiki's ResourceLoader:
+ return <<<MESSAGE
+/* This file is the Web entry point for MediaWiki's ResourceLoader:
<https://www.mediawiki.org/wiki/ResourceLoader>. In this request,
- no modules were requested. Max made me put this here. */";
+ no modules were requested. Max made me put this here. */
+MESSAGE;
}
- wfProfileIn( __METHOD__ );
+ $image = $context->getImageObj();
+ if ( $image ) {
+ $data = $image->getImageData( $context );
+ if ( $data === false ) {
+ $data = '';
+ $this->errors[] = 'Image generation failed';
+ }
+ return $data;
+ }
// Pre-fetch blobs
if ( $context->shouldIncludeMessages() ) {
try {
- $blobs = MessageBlobStore::getInstance()->get( $this, $modules, $context->getLanguage() );
+ $blobs = $this->blobStore->get( $this, $modules, $context->getLanguage() );
} catch ( Exception $e ) {
MWExceptionHandler::logException( $e );
wfDebugLog(
'resourceloader',
__METHOD__ . ": pre-fetching blobs from MessageBlobStore failed: $e"
);
- $this->hasErrors = true;
- // Add exception to the output as a comment
- $exceptions .= self::formatException( $e );
+ $this->errors[] = self::formatExceptionNoComment( $e );
}
} else {
$blobs = array();
@@ -877,7 +920,6 @@ class ResourceLoader {
* @var $module ResourceLoaderModule
*/
- wfProfileIn( __METHOD__ . '-' . $name );
try {
$scripts = '';
if ( $context->shouldIncludeScripts() ) {
@@ -964,28 +1006,33 @@ class ResourceLoader {
case 'messages':
$out .= self::makeMessageSetScript( new XmlJsCode( $messagesBlob ) );
break;
+ case 'templates':
+ $out .= Xml::encodeJsCall(
+ 'mw.templates.set',
+ array( $name, (object)$module->getTemplates() ),
+ ResourceLoader::inDebugMode()
+ );
+ break;
default:
$out .= self::makeLoaderImplementScript(
$name,
$scripts,
$styles,
- new XmlJsCode( $messagesBlob )
+ new XmlJsCode( $messagesBlob ),
+ $module->getTemplates()
);
break;
}
} catch ( Exception $e ) {
MWExceptionHandler::logException( $e );
wfDebugLog( 'resourceloader', __METHOD__ . ": generating module package failed: $e" );
- $this->hasErrors = true;
- // Add exception to the output as a comment
- $exceptions .= self::formatException( $e );
+ $this->errors[] = self::formatExceptionNoComment( $e );
// Respond to client with error-state instead of module implementation
$states[$name] = 'error';
unset( $modules[$name] );
}
$isRaw |= $module->isRaw();
- wfProfileOut( __METHOD__ . '-' . $name );
}
// Update module states
@@ -1004,9 +1051,8 @@ class ResourceLoader {
}
} else {
if ( count( $states ) ) {
- $exceptions .= self::makeComment(
- 'Problematic modules: ' . FormatJson::encode( $states, ResourceLoader::inDebugMode() )
- );
+ $this->errors[] = 'Problematic modules: ' .
+ FormatJson::encode( $states, ResourceLoader::inDebugMode() );
}
}
@@ -1018,8 +1064,7 @@ class ResourceLoader {
}
}
- wfProfileOut( __METHOD__ );
- return $exceptions . $out;
+ return $out;
}
/* Static Methods */
@@ -1034,30 +1079,32 @@ class ResourceLoader {
* @param mixed $messages List of messages associated with this module. May either be an
* associative array mapping message key to value, or a JSON-encoded message blob containing
* the same data, wrapped in an XmlJsCode object.
+ * @param array $templates Keys are name of templates and values are the source of
+ * the template.
* @throws MWException
* @return string
*/
- public static function makeLoaderImplementScript( $name, $scripts, $styles, $messages ) {
+ public static function makeLoaderImplementScript( $name, $scripts, $styles,
+ $messages, $templates
+ ) {
if ( is_string( $scripts ) ) {
$scripts = new XmlJsCode( "function ( $, jQuery ) {\n{$scripts}\n}" );
} elseif ( !is_array( $scripts ) ) {
throw new MWException( 'Invalid scripts error. Array of URLs or string of code expected.' );
}
- return Xml::encodeJsCall(
- 'mw.loader.implement',
- array(
- $name,
- $scripts,
- // Force objects. mw.loader.implement requires them to be javascript objects.
- // Although these variables are associative arrays, which become javascript
- // objects through json_encode. In many cases they will be empty arrays, and
- // PHP/json_encode() consider empty arrays to be numerical arrays and
- // output javascript "[]" instead of "{}". This fixes that.
- (object)$styles,
- (object)$messages
- ),
- ResourceLoader::inDebugMode()
+ // mw.loader.implement requires 'styles', 'messages' and 'templates' to be objects (not
+ // arrays). json_encode considers empty arrays to be numerical and outputs "[]" instead
+ // of "{}". Force them to objects.
+ $module = array(
+ $name,
+ $scripts,
+ (object) $styles,
+ (object) $messages,
+ (object) $templates,
);
+ self::trimArray( $module );
+
+ return Xml::encodeJsCall( 'mw.loader.implement', $module, ResourceLoader::inDebugMode() );
}
/**
@@ -1164,6 +1211,40 @@ class ResourceLoader {
);
}
+ private static function isEmptyObject( stdClass $obj ) {
+ foreach ( $obj as $key => &$value ) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Remove empty values from the end of an array.
+ *
+ * Values considered empty:
+ *
+ * - null
+ * - array()
+ * - new XmlJsCode( '{}' )
+ * - new stdClass() // (object) array()
+ *
+ * @param Array $array
+ */
+ private static function trimArray( Array &$array ) {
+ $i = count( $array );
+ while ( $i-- ) {
+ if ( $array[$i] === null
+ || $array[$i] === array()
+ || ( $array[$i] instanceof XmlJsCode && $array[$i]->value === '{}' )
+ || ( $array[$i] instanceof stdClass && self::isEmptyObject( $array[$i] ) )
+ ) {
+ unset( $array[$i] );
+ } else {
+ break;
+ }
+ }
+ }
+
/**
* Returns JS code which calls mw.loader.register with the given
* parameters. Has three calling conventions:
@@ -1195,16 +1276,37 @@ class ResourceLoader {
$dependencies = null, $group = null, $source = null, $skip = null
) {
if ( is_array( $name ) ) {
+ // Build module name index
+ $index = array();
+ foreach ( $name as $i => &$module ) {
+ $index[$module[0]] = $i;
+ }
+
+ // Transform dependency names into indexes when possible, they will be resolved by
+ // mw.loader.register on the other end
+ foreach ( $name as &$module ) {
+ if ( isset( $module[2] ) ) {
+ foreach ( $module[2] as &$dependency ) {
+ if ( isset( $index[$dependency] ) ) {
+ $dependency = $index[$dependency];
+ }
+ }
+ }
+ }
+
+ array_walk( $name, array( 'self', 'trimArray' ) );
+
return Xml::encodeJsCall(
'mw.loader.register',
array( $name ),
ResourceLoader::inDebugMode()
);
} else {
- $version = (int)$version > 1 ? (int)$version : 1;
+ $registration = array( $name, $version, $dependencies, $group, $source, $skip );
+ self::trimArray( $registration );
return Xml::encodeJsCall(
'mw.loader.register',
- array( $name, $version, $dependencies, $group, $source, $skip ),
+ $registration,
ResourceLoader::inDebugMode()
);
}
@@ -1466,6 +1568,9 @@ class ResourceLoader {
// When called from the installer, it is possible that a required PHP extension
// is missing (at least for now; see bug 47564). If this is the case, throw an
// exception (caught by the installer) to prevent a fatal error later on.
+ if ( !class_exists( 'lessc' ) ) {
+ throw new MWException( 'MediaWiki requires the lessphp compiler' );
+ }
if ( !function_exists( 'ctype_digit' ) ) {
throw new MWException( 'lessc requires the Ctype extension' );
}
@@ -1488,9 +1593,13 @@ class ResourceLoader {
* @return array Map of variable names to string CSS values.
*/
public static function getLessVars( Config $config ) {
- $lessVars = $config->get( 'ResourceLoaderLESSVars' );
- // Sort by key to ensure consistent hashing for cache lookups.
- ksort( $lessVars );
- return $lessVars;
+ if ( !self::$lessVars ) {
+ $lessVars = $config->get( 'ResourceLoaderLESSVars' );
+ Hooks::run( 'ResourceLoaderGetLessVars', array( &$lessVars ) );
+ // Sort by key to ensure consistent hashing for cache lookups.
+ ksort( $lessVars );
+ self::$lessVars = $lessVars;
+ }
+ return self::$lessVars;
}
}
diff --git a/includes/resourceloader/ResourceLoaderContext.php b/includes/resourceloader/ResourceLoaderContext.php
index 7af7b898..a6a7d347 100644
--- a/includes/resourceloader/ResourceLoaderContext.php
+++ b/includes/resourceloader/ResourceLoaderContext.php
@@ -41,6 +41,11 @@ class ResourceLoaderContext {
protected $version;
protected $hash;
protected $raw;
+ protected $image;
+ protected $variant;
+ protected $format;
+ protected $userObj;
+ protected $imageObj;
/* Methods */
@@ -65,6 +70,10 @@ class ResourceLoaderContext {
$this->only = $request->getVal( 'only' );
$this->version = $request->getVal( 'version' );
$this->raw = $request->getFuzzyBool( 'raw' );
+ // Image requests
+ $this->image = $request->getVal( 'image' );
+ $this->variant = $request->getVal( 'variant' );
+ $this->format = $request->getVal( 'format' );
$skinnames = Skin::getSkinNames();
// If no skin is specified, or we don't recognize the skin, use the default skin
@@ -179,6 +188,31 @@ class ResourceLoaderContext {
}
/**
+ * Get the possibly-cached User object for the specified username
+ *
+ * @since 1.25
+ * @return User|bool false if a valid object cannot be created
+ */
+ public function getUserObj() {
+ if ( $this->userObj === null ) {
+ $username = $this->getUser();
+ if ( $username ) {
+ // Optimize: Avoid loading a new User object if possible
+ global $wgUser;
+ if ( is_object( $wgUser ) && $wgUser->getName() === $username ) {
+ $this->userObj = $wgUser;
+ } else {
+ $this->userObj = User::newFromName( $username );
+ }
+ } else {
+ $this->userObj = new User; // Anonymous user
+ }
+ }
+
+ return $this->userObj;
+ }
+
+ /**
* @return bool
*/
public function getDebug() {
@@ -207,6 +241,62 @@ class ResourceLoaderContext {
}
/**
+ * @return string|null
+ */
+ public function getImage() {
+ return $this->image;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getVariant() {
+ return $this->variant;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getFormat() {
+ return $this->format;
+ }
+
+ /**
+ * If this is a request for an image, get the ResourceLoaderImage object.
+ *
+ * @since 1.25
+ * @return ResourceLoaderImage|bool false if a valid object cannot be created
+ */
+ public function getImageObj() {
+ if ( $this->imageObj === null ) {
+ $this->imageObj = false;
+
+ if ( !$this->image ) {
+ return $this->imageObj;
+ }
+
+ $modules = $this->getModules();
+ if ( count( $modules ) !== 1 ) {
+ return $this->imageObj;
+ }
+
+ $module = $this->getResourceLoader()->getModule( $modules[0] );
+ if ( !$module || !$module instanceof ResourceLoaderImageModule ) {
+ return $this->imageObj;
+ }
+
+ $image = $module->getImage( $this->image );
+ if ( !$image ) {
+ return $this->imageObj;
+ }
+
+ $this->imageObj = $image;
+ }
+
+ return $this->imageObj;
+ }
+
+ /**
* @return bool
*/
public function shouldIncludeScripts() {
@@ -234,6 +324,7 @@ class ResourceLoaderContext {
if ( !isset( $this->hash ) ) {
$this->hash = implode( '|', array(
$this->getLanguage(), $this->getDirection(), $this->getSkin(), $this->getUser(),
+ $this->getImage(), $this->getVariant(), $this->getFormat(),
$this->getDebug(), $this->getOnly(), $this->getVersion()
) );
}
diff --git a/includes/resourceloader/ResourceLoaderEditToolbarModule.php b/includes/resourceloader/ResourceLoaderEditToolbarModule.php
index 2e07911c..d79174cd 100644
--- a/includes/resourceloader/ResourceLoaderEditToolbarModule.php
+++ b/includes/resourceloader/ResourceLoaderEditToolbarModule.php
@@ -32,6 +32,7 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
*
* @param string $value
* @return string
+ * @throws Exception
*/
private static function cssSerializeString( $value ) {
if ( strstr( $value, "\0" ) ) {
diff --git a/includes/resourceloader/ResourceLoaderFileModule.php b/includes/resourceloader/ResourceLoaderFileModule.php
index dc8b14a2..671098e1 100644
--- a/includes/resourceloader/ResourceLoaderFileModule.php
+++ b/includes/resourceloader/ResourceLoaderFileModule.php
@@ -34,6 +34,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
/** @var string Remote base path, see __construct() */
protected $remoteBasePath = '';
+ /** @var array Saves a list of the templates named by the modules. */
+ protected $templates = array();
+
/**
* @var array List of paths to JavaScript files to always include
* @par Usage:
@@ -171,7 +174,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
* to $wgResourceBasePath
*
* Below is a description for the $options array:
- * @throws MWException
+ * @throws InvalidArgumentException
* @par Construction options:
* @code
* array(
@@ -199,6 +202,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
* 'loaderScripts' => [file path string or array of file path strings],
* // Modules which must be loaded before this module
* 'dependencies' => [module name string or array of module name strings],
+ * 'templates' => array(
+ * [template alias with file.ext] => [file path to a template file],
+ * ),
* // Styles to always load
* 'styles' => [file path string or array of file path strings],
* // Styles to include in specific skin contexts
@@ -223,6 +229,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
$localBasePath = null,
$remoteBasePath = null
) {
+ // Flag to decide whether to automagically add the mediawiki.template module
+ $hasTemplates = false;
// localBasePath and remoteBasePath both have unbelievably long fallback chains
// and need to be handled separately.
list( $this->localBasePath, $this->remoteBasePath ) =
@@ -238,19 +246,23 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
case 'styles':
$this->{$member} = (array)$option;
break;
+ case 'templates':
+ $hasTemplates = true;
+ $this->{$member} = (array)$option;
+ break;
// Collated lists of file paths
case 'languageScripts':
case 'skinScripts':
case 'skinStyles':
if ( !is_array( $option ) ) {
- throw new MWException(
+ throw new InvalidArgumentException(
"Invalid collated file path list error. " .
"'$option' given, array expected."
);
}
foreach ( $option as $key => $value ) {
if ( !is_string( $key ) ) {
- throw new MWException(
+ throw new InvalidArgumentException(
"Invalid collated file path list key error. " .
"'$key' given, string expected."
);
@@ -281,6 +293,21 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
break;
}
}
+ if ( $hasTemplates ) {
+ $this->dependencies[] = 'mediawiki.template';
+ // Ensure relevant template compiler module gets loaded
+ foreach ( $this->templates as $alias => $templatePath ) {
+ if ( is_int( $alias ) ) {
+ $alias = $templatePath;
+ }
+ $suffix = explode( '.', $alias );
+ $suffix = end( $suffix );
+ $compilerModule = 'mediawiki.template.' . $suffix;
+ if ( $suffix !== 'html' && !in_array( $compilerModule, $this->dependencies ) ) {
+ $this->dependencies[] = $compilerModule;
+ }
+ }
+ }
}
/**
@@ -304,7 +331,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
// The different ways these checks are done, and their ordering, look very silly,
// but were preserved for backwards-compatibility just in case. Tread lightly.
- $localBasePath = $localBasePath === null ? $IP : $localBasePath;
+ if ( $localBasePath === null ) {
+ $localBasePath = $IP;
+ }
if ( $remoteBasePath === null ) {
$remoteBasePath = $wgResourceBasePath;
}
@@ -466,8 +495,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
/**
* Get the skip function.
- *
- * @return string|null
+ * @return null|string
+ * @throws MWException
*/
public function getSkipFunction() {
if ( !$this->skipFunction ) {
@@ -510,7 +539,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
if ( isset( $this->modifiedTime[$context->getHash()] ) ) {
return $this->modifiedTime[$context->getHash()];
}
- wfProfileIn( __METHOD__ );
$files = array();
@@ -533,8 +561,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
$files = array_merge(
$files,
$this->scripts,
+ $this->templates,
$context->getDebug() ? $this->debugScripts : array(),
- self::tryForKey( $this->languageScripts, $context->getLanguage() ),
+ $this->getLanguageScripts( $context->getLanguage() ),
self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' ),
$this->loaderScripts
);
@@ -544,18 +573,19 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
$files = array_map( array( $this, 'getLocalPath' ), $files );
// File deps need to be treated separately because they're already prefixed
$files = array_merge( $files, $this->getFileDependencies( $context->getSkin() ) );
+ // Filter out any duplicates from getFileDependencies() and others.
+ // Most commonly introduced by compileLessFile(), which always includes the
+ // entry point Less file we already know about.
+ $files = array_values( array_unique( $files ) );
// If a module is nothing but a list of dependencies, we need to avoid
// giving max() an empty array
if ( count( $files ) === 0 ) {
$this->modifiedTime[$context->getHash()] = 1;
- wfProfileOut( __METHOD__ );
return $this->modifiedTime[$context->getHash()];
}
- wfProfileIn( __METHOD__ . '-filemtime' );
$filesMtime = max( array_map( array( __CLASS__, 'safeFilemtime' ), $files ) );
- wfProfileOut( __METHOD__ . '-filemtime' );
$this->modifiedTime[$context->getHash()] = max(
$filesMtime,
@@ -563,7 +593,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
$this->getDefinitionMtime( $context )
);
- wfProfileOut( __METHOD__ );
return $this->modifiedTime[$context->getHash()];
}
@@ -574,9 +603,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
* @return array
*/
public function getDefinitionSummary( ResourceLoaderContext $context ) {
- $summary = array(
- 'class' => get_class( $this ),
- );
+ $summary = parent::getDefinitionSummary( $context );
foreach ( array(
'scripts',
'debugScripts',
@@ -588,6 +615,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
'dependencies',
'messages',
'targets',
+ 'templates',
'group',
'position',
'skipFunction',
@@ -698,7 +726,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
protected function getScriptFiles( ResourceLoaderContext $context ) {
$files = array_merge(
$this->scripts,
- self::tryForKey( $this->languageScripts, $context->getLanguage() ),
+ $this->getLanguageScripts( $context->getLanguage() ),
self::tryForKey( $this->skinScripts, $context->getSkin(), 'default' )
);
if ( $context->getDebug() ) {
@@ -709,6 +737,29 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
}
/**
+ * Get the set of language scripts for the given language,
+ * possibly using a fallback language.
+ *
+ * @param string $lang
+ * @return array
+ */
+ private function getLanguageScripts( $lang ) {
+ $scripts = self::tryForKey( $this->languageScripts, $lang );
+ if ( $scripts ) {
+ return $scripts;
+ }
+ $fallbacks = Language::getFallbacksFor( $lang );
+ foreach ( $fallbacks as $lang ) {
+ $scripts = self::tryForKey( $this->languageScripts, $lang );
+ if ( $scripts ) {
+ return $scripts;
+ }
+ }
+
+ return array();
+ }
+
+ /**
* Get a list of file paths for all styles in this module, in order of proper inclusion.
*
* @param ResourceLoaderContext $context
@@ -934,4 +985,30 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
protected function getLessCompiler( ResourceLoaderContext $context = null ) {
return ResourceLoader::getLessCompiler( $this->getConfig() );
}
+
+ /**
+ * Takes named templates by the module and returns an array mapping.
+ * @return array of templates mapping template alias to content
+ * @throws MWException
+ */
+ public function getTemplates() {
+ $templates = array();
+
+ foreach ( $this->templates as $alias => $templatePath ) {
+ // Alias is optional
+ if ( is_int( $alias ) ) {
+ $alias = $templatePath;
+ }
+ $localPath = $this->getLocalPath( $templatePath );
+ if ( file_exists( $localPath ) ) {
+ $content = file_get_contents( $localPath );
+ $templates[$alias] = $content;
+ } else {
+ $msg = __METHOD__ . ": template file not found: \"$localPath\"";
+ wfDebugLog( 'resourceloader', $msg );
+ throw new MWException( $msg );
+ }
+ }
+ return $templates;
+ }
}
diff --git a/includes/resourceloader/ResourceLoaderFilePageModule.php b/includes/resourceloader/ResourceLoaderFilePageModule.php
deleted file mode 100644
index 8c7fbe76..00000000
--- a/includes/resourceloader/ResourceLoaderFilePageModule.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Resource loader module for MediaWiki:Filepage.css
- *
- * 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
- */
-
-/**
- * ResourceLoader definition for MediaWiki:Filepage.css
- */
-class ResourceLoaderFilePageModule extends ResourceLoaderWikiModule {
-
- /**
- * @param ResourceLoaderContext $context
- * @return array
- */
- protected function getPages( ResourceLoaderContext $context ) {
- return array(
- 'MediaWiki:Filepage.css' => array( 'type' => 'style' ),
- );
- }
-}
diff --git a/includes/resourceloader/ResourceLoaderImage.php b/includes/resourceloader/ResourceLoaderImage.php
new file mode 100644
index 00000000..12d1e827
--- /dev/null
+++ b/includes/resourceloader/ResourceLoaderImage.php
@@ -0,0 +1,388 @@
+<?php
+/**
+ * Class encapsulating an image used in a ResourceLoaderImageModule.
+ *
+ * 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
+ */
+
+/**
+ * Class encapsulating an image used in a ResourceLoaderImageModule.
+ *
+ * @since 1.25
+ */
+class ResourceLoaderImage {
+
+ /**
+ * Map of allowed file extensions to their MIME types.
+ * @var array
+ */
+ protected static $fileTypes = array(
+ 'svg' => 'image/svg+xml',
+ 'png' => 'image/png',
+ 'gif' => 'image/gif',
+ 'jpg' => 'image/jpg',
+ );
+
+ /**
+ * @param string $name Image name
+ * @param string $module Module name
+ * @param string|array $descriptor Path to image file, or array structure containing paths
+ * @param string $basePath Directory to which paths in descriptor refer
+ * @param array $variants
+ * @throws InvalidArgumentException
+ */
+ public function __construct( $name, $module, $descriptor, $basePath, $variants ) {
+ $this->name = $name;
+ $this->module = $module;
+ $this->descriptor = $descriptor;
+ $this->basePath = $basePath;
+ $this->variants = $variants;
+
+ // Expand shorthands:
+ // array( "en,de,fr" => "foo.svg" ) → array( "en" => "foo.svg", "de" => "foo.svg", "fr" => "foo.svg" )
+ if ( is_array( $this->descriptor ) && isset( $this->descriptor['lang'] ) ) {
+ foreach ( array_keys( $this->descriptor['lang'] ) as $langList ) {
+ if ( strpos( $langList, ',' ) !== false ) {
+ $this->descriptor['lang'] += array_fill_keys(
+ explode( ',', $langList ),
+ $this->descriptor['lang'][ $langList ]
+ );
+ unset( $this->descriptor['lang'][ $langList ] );
+ }
+ }
+ }
+
+ // Ensure that all files have common extension.
+ $extensions = array();
+ $descriptor = (array)$descriptor;
+ array_walk_recursive( $descriptor, function ( $path ) use ( &$extensions ) {
+ $extensions[] = pathinfo( $path, PATHINFO_EXTENSION );
+ } );
+ $extensions = array_unique( $extensions );
+ if ( count( $extensions ) !== 1 ) {
+ throw new InvalidArgumentException( "File type for different image files of '$name' not the same" );
+ }
+ $ext = $extensions[0];
+ if ( !isset( self::$fileTypes[$ext] ) ) {
+ throw new InvalidArgumentException( "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg)" );
+ }
+ $this->extension = $ext;
+ }
+
+ /**
+ * Get name of this image.
+ *
+ * @return string
+ */
+ public function getName() {
+ return $this->name;
+ }
+
+ /**
+ * Get name of the module this image belongs to.
+ *
+ * @return string
+ */
+ public function getModule() {
+ return $this->module;
+ }
+
+ /**
+ * Get the list of variants this image can be converted to.
+ *
+ * @return string[]
+ */
+ public function getVariants() {
+ return array_keys( $this->variants );
+ }
+
+ /**
+ * Get the path to image file for given context.
+ *
+ * @param ResourceLoaderContext $context Any context
+ * @return string
+ */
+ protected function getPath( ResourceLoaderContext $context ) {
+ $desc = $this->descriptor;
+ if ( is_string( $desc ) ) {
+ return $this->basePath . '/' . $desc;
+ } elseif ( isset( $desc['lang'][ $context->getLanguage() ] ) ) {
+ return $this->basePath . '/' . $desc['lang'][ $context->getLanguage() ];
+ } elseif ( isset( $desc[ $context->getDirection() ] ) ) {
+ return $this->basePath . '/' . $desc[ $context->getDirection() ];
+ } else {
+ return $this->basePath . '/' . $desc['default'];
+ }
+ }
+
+ /**
+ * Get the extension of the image.
+ *
+ * @param string $format Format to get the extension for, 'original' or 'rasterized'
+ * @return string Extension without leading dot, e.g. 'png'
+ */
+ public function getExtension( $format = 'original' ) {
+ if ( $format === 'rasterized' && $this->extension === 'svg' ) {
+ return 'png';
+ } else {
+ return $this->extension;
+ }
+ }
+
+ /**
+ * Get the MIME type of the image.
+ *
+ * @param string $format Format to get the MIME type for, 'original' or 'rasterized'
+ * @return string
+ */
+ public function getMimeType( $format = 'original' ) {
+ $ext = $this->getExtension( $format );
+ return self::$fileTypes[$ext];
+ }
+
+ /**
+ * Get the load.php URL that will produce this image.
+ *
+ * @param ResourceLoaderContext $context Any context
+ * @param string $script URL to load.php
+ * @param string|null $variant Variant to get the URL for
+ * @param string $format Format to get the URL for, 'original' or 'rasterized'
+ * @return string
+ */
+ public function getUrl( ResourceLoaderContext $context, $script, $variant, $format ) {
+ $query = array(
+ 'modules' => $this->getModule(),
+ 'image' => $this->getName(),
+ 'variant' => $variant,
+ 'format' => $format,
+ 'lang' => $context->getLanguage(),
+ 'version' => $context->getVersion(),
+ );
+
+ return wfExpandUrl( wfAppendQuery( $script, $query ), PROTO_RELATIVE );
+ }
+
+ /**
+ * Get the data: URI that will produce this image.
+ *
+ * @param ResourceLoaderContext $context Any context
+ * @param string|null $variant Variant to get the URI for
+ * @param string $format Format to get the URI for, 'original' or 'rasterized'
+ * @return string
+ */
+ public function getDataUri( ResourceLoaderContext $context, $variant, $format ) {
+ $type = $this->getMimeType( $format );
+ $contents = $this->getImageData( $context, $variant, $format );
+ return CSSMin::encodeStringAsDataURI( $contents, $type );
+ }
+
+ /**
+ * Get actual image data for this image. This can be saved to a file or sent to the browser to
+ * produce the converted image.
+ *
+ * Call getExtension() or getMimeType() with the same $format argument to learn what file type the
+ * returned data uses.
+ *
+ * @param ResourceLoaderContext $context Image context, or any context if $variant and $format
+ * given.
+ * @param string|null $variant Variant to get the data for. Optional; if given, overrides the data
+ * from $context.
+ * @param string $format Format to get the data for, 'original' or 'rasterized'. Optional; if
+ * given, overrides the data from $context.
+ * @return string|false Possibly binary image data, or false on failure
+ * @throws MWException If the image file doesn't exist
+ */
+ public function getImageData( ResourceLoaderContext $context, $variant = false, $format = false ) {
+ if ( $variant === false ) {
+ $variant = $context->getVariant();
+ }
+ if ( $format === false ) {
+ $format = $context->getFormat();
+ }
+
+ $path = $this->getPath( $context );
+ if ( !file_exists( $path ) ) {
+ throw new MWException( "File '$path' does not exist" );
+ }
+
+ if ( $this->getExtension() !== 'svg' ) {
+ return file_get_contents( $path );
+ }
+
+ if ( $variant && isset( $this->variants[$variant] ) ) {
+ $data = $this->variantize( $this->variants[$variant], $context );
+ } else {
+ $data = file_get_contents( $path );
+ }
+
+ if ( $format === 'rasterized' ) {
+ $data = $this->rasterize( $data );
+ if ( !$data ) {
+ wfDebugLog( 'ResourceLoaderImage', __METHOD__ . " failed to rasterize for $path" );
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Send response headers (using the header() function) that are necessary to correctly serve the
+ * image data for this image, as returned by getImageData().
+ *
+ * Note that the headers are independent of the language or image variant.
+ *
+ * @param ResourceLoaderContext $context Image context
+ */
+ public function sendResponseHeaders( ResourceLoaderContext $context ) {
+ $format = $context->getFormat();
+ $mime = $this->getMimeType( $format );
+ $filename = $this->getName() . '.' . $this->getExtension( $format );
+
+ header( 'Content-Type: ' . $mime );
+ header( 'Content-Disposition: ' .
+ FileBackend::makeContentDisposition( 'inline', $filename ) );
+ }
+
+ /**
+ * Convert this image, which is assumed to be SVG, to given variant.
+ *
+ * @param array $variantConf Array with a 'color' key, its value will be used as fill color
+ * @param ResourceLoaderContext $context Image context
+ * @return string New SVG file data
+ */
+ protected function variantize( $variantConf, ResourceLoaderContext $context ) {
+ $dom = new DomDocument;
+ $dom->load( $this->getPath( $context ) );
+ $root = $dom->documentElement;
+ $wrapper = $dom->createElement( 'g' );
+ while ( $root->firstChild ) {
+ $wrapper->appendChild( $root->firstChild );
+ }
+ $root->appendChild( $wrapper );
+ $wrapper->setAttribute( 'fill', $variantConf['color'] );
+ return $dom->saveXml();
+ }
+
+ /**
+ * Massage the SVG image data for converters which don't understand some path data syntax.
+ *
+ * This is necessary for rsvg and ImageMagick when compiled with rsvg support.
+ * Upstream bug is https://bugzilla.gnome.org/show_bug.cgi?id=620923, fixed 2014-11-10, so
+ * this will be needed for a while. (T76852)
+ *
+ * @param string $svg SVG image data
+ * @return string Massaged SVG image data
+ */
+ protected function massageSvgPathdata( $svg ) {
+ $dom = new DomDocument;
+ $dom->loadXml( $svg );
+ foreach ( $dom->getElementsByTagName( 'path' ) as $node ) {
+ $pathData = $node->getAttribute( 'd' );
+ // Make sure there is at least one space between numbers, and that leading zero is not omitted.
+ // rsvg has issues with syntax like "M-1-2" and "M.445.483" and especially "M-.445-.483".
+ $pathData = preg_replace( '/(-?)(\d*\.\d+|\d+)/', ' ${1}0$2 ', $pathData );
+ // Strip unnecessary leading zeroes for prettiness, not strictly necessary
+ $pathData = preg_replace( '/([ -])0(\d)/', '$1$2', $pathData );
+ $node->setAttribute( 'd', $pathData );
+ }
+ return $dom->saveXml();
+ }
+
+ /**
+ * Convert passed image data, which is assumed to be SVG, to PNG.
+ *
+ * @param string $svg SVG image data
+ * @return string|bool PNG image data, or false on failure
+ */
+ protected function rasterize( $svg ) {
+ // This code should be factored out to a separate method on SvgHandler, or perhaps a separate
+ // class, with a separate set of configuration settings.
+ //
+ // This is a distinct use case from regular SVG rasterization:
+ // * We can skip many sanity and security checks (as the images come from a trusted source,
+ // rather than from the user).
+ // * We need to provide extra options to some converters to achieve acceptable quality for very
+ // small images, which might cause performance issues in the general case.
+ // * We want to directly pass image data to the converter, rather than a file path.
+ //
+ // See https://phabricator.wikimedia.org/T76473#801446 for examples of what happens with the
+ // default settings.
+ //
+ // For now, we special-case rsvg (used in WMF production) and do a messy workaround for other
+ // converters.
+
+ global $wgSVGConverter, $wgSVGConverterPath;
+
+ $svg = $this->massageSvgPathdata( $svg );
+
+ // Sometimes this might be 'rsvg-secure'. Long as it's rsvg.
+ if ( strpos( $wgSVGConverter, 'rsvg' ) === 0 ) {
+ $command = 'rsvg-convert';
+ if ( $wgSVGConverterPath ) {
+ $command = wfEscapeShellArg( "$wgSVGConverterPath/" ) . $command;
+ }
+
+ $process = proc_open(
+ $command,
+ array( 0 => array( 'pipe', 'r' ), 1 => array( 'pipe', 'w' ) ),
+ $pipes
+ );
+
+ if ( is_resource( $process ) ) {
+ fwrite( $pipes[0], $svg );
+ fclose( $pipes[0] );
+ $png = stream_get_contents( $pipes[1] );
+ fclose( $pipes[1] );
+ proc_close( $process );
+
+ return $png ?: false;
+ }
+ return false;
+
+ } else {
+ // Write input to and read output from a temporary file
+ $tempFilenameSvg = tempnam( wfTempDir(), 'ResourceLoaderImage' );
+ $tempFilenamePng = tempnam( wfTempDir(), 'ResourceLoaderImage' );
+
+ file_put_contents( $tempFilenameSvg, $svg );
+
+ $metadata = SVGMetadataExtractor::getMetadata( $tempFilenameSvg );
+ if ( !isset( $metadata['width'] ) || !isset( $metadata['height'] ) ) {
+ unlink( $tempFilenameSvg );
+ return false;
+ }
+
+ $handler = new SvgHandler;
+ $res = $handler->rasterize(
+ $tempFilenameSvg,
+ $tempFilenamePng,
+ $metadata['width'],
+ $metadata['height']
+ );
+ unlink( $tempFilenameSvg );
+
+ $png = null;
+ if ( $res === true ) {
+ $png = file_get_contents( $tempFilenamePng );
+ unlink( $tempFilenamePng );
+ }
+
+ return $png ?: false;
+ }
+ }
+}
diff --git a/includes/resourceloader/ResourceLoaderImageModule.php b/includes/resourceloader/ResourceLoaderImageModule.php
new file mode 100644
index 00000000..bf6a7dd2
--- /dev/null
+++ b/includes/resourceloader/ResourceLoaderImageModule.php
@@ -0,0 +1,327 @@
+<?php
+/**
+ * Resource loader module for generated and embedded images.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Trevor Parscal
+ */
+
+/**
+ * Resource loader module for generated and embedded images.
+ *
+ * @since 1.25
+ */
+class ResourceLoaderImageModule extends ResourceLoaderModule {
+
+ /**
+ * Local base path, see __construct()
+ * @var string
+ */
+ protected $localBasePath = '';
+
+ protected $origin = self::ORIGIN_CORE_SITEWIDE;
+
+ protected $images = array();
+ protected $variants = array();
+ protected $prefix = null;
+ protected $selectorWithoutVariant = '.{prefix}-{name}';
+ protected $selectorWithVariant = '.{prefix}-{name}-{variant}';
+ protected $targets = array( 'desktop', 'mobile' );
+
+ /**
+ * Constructs a new module from an options array.
+ *
+ * @param array $options List of options; if not given or empty, an empty module will be
+ * constructed
+ * @param string $localBasePath Base path to prepend to all local paths in $options. Defaults
+ * to $IP
+ *
+ * Below is a description for the $options array:
+ * @par Construction options:
+ * @code
+ * array(
+ * // Base path to prepend to all local paths in $options. Defaults to $IP
+ * 'localBasePath' => [base path],
+ * // CSS class prefix to use in all style rules
+ * 'prefix' => [CSS class prefix],
+ * // Alternatively: Format of CSS selector to use in all style rules
+ * 'selector' => [CSS selector template, variables: {prefix} {name} {variant}],
+ * // Alternatively: When using variants
+ * 'selectorWithoutVariant' => [CSS selector template, variables: {prefix} {name}],
+ * 'selectorWithVariant' => [CSS selector template, variables: {prefix} {name} {variant}],
+ * // List of variants that may be used for the image files
+ * 'variants' => array(
+ * [variant name] => array(
+ * 'color' => [color string, e.g. '#ffff00'],
+ * 'global' => [boolean, if true, this variant is available
+ * for all images of this type],
+ * ),
+ * ...
+ * ),
+ * // List of image files and their options
+ * 'images' => array(
+ * [file path string],
+ * [file path string] => array(
+ * 'name' => [image name string, defaults to file name],
+ * 'variants' => [array of variant name strings, variants
+ * available for this image],
+ * ),
+ * ...
+ * ),
+ * )
+ * @endcode
+ * @throws InvalidArgumentException
+ */
+ public function __construct( $options = array(), $localBasePath = null ) {
+ $this->localBasePath = self::extractLocalBasePath( $options, $localBasePath );
+
+ // Accepted combinations:
+ // * prefix
+ // * selector
+ // * selectorWithoutVariant + selectorWithVariant
+ // * prefix + selector
+ // * prefix + selectorWithoutVariant + selectorWithVariant
+
+ $prefix = isset( $options['prefix'] ) && $options['prefix'];
+ $selector = isset( $options['selector'] ) && $options['selector'];
+ $selectorWithoutVariant = isset( $options['selectorWithoutVariant'] ) && $options['selectorWithoutVariant'];
+ $selectorWithVariant = isset( $options['selectorWithVariant'] ) && $options['selectorWithVariant'];
+
+ if ( $selectorWithoutVariant && !$selectorWithVariant ) {
+ throw new InvalidArgumentException( "Given 'selectorWithoutVariant' but no 'selectorWithVariant'." );
+ }
+ if ( $selectorWithVariant && !$selectorWithoutVariant ) {
+ throw new InvalidArgumentException( "Given 'selectorWithVariant' but no 'selectorWithoutVariant'." );
+ }
+ if ( $selector && $selectorWithVariant ) {
+ throw new InvalidArgumentException( "Incompatible 'selector' and 'selectorWithVariant'+'selectorWithoutVariant' given." );
+ }
+ if ( !$prefix && !$selector && !$selectorWithVariant ) {
+ throw new InvalidArgumentException( "None of 'prefix', 'selector' or 'selectorWithVariant'+'selectorWithoutVariant' given." );
+ }
+
+ foreach ( $options as $member => $option ) {
+ switch ( $member ) {
+ case 'images':
+ case 'variants':
+ if ( !is_array( $option ) ) {
+ throw new InvalidArgumentException(
+ "Invalid list error. '$option' given, array expected."
+ );
+ }
+ $this->{$member} = $option;
+ break;
+
+ case 'prefix':
+ case 'selectorWithoutVariant':
+ case 'selectorWithVariant':
+ $this->{$member} = (string)$option;
+ break;
+
+ case 'selector':
+ $this->selectorWithoutVariant = $this->selectorWithVariant = (string)$option;
+ }
+ }
+ }
+
+ /**
+ * Get CSS class prefix used by this module.
+ * @return string
+ */
+ public function getPrefix() {
+ return $this->prefix;
+ }
+
+ /**
+ * Get CSS selector templates used by this module.
+ * @return string
+ */
+ public function getSelectors() {
+ return array(
+ 'selectorWithoutVariant' => $this->selectorWithoutVariant,
+ 'selectorWithVariant' => $this->selectorWithVariant,
+ );
+ }
+
+ /**
+ * Get a ResourceLoaderImage object for given image.
+ * @param string $name Image name
+ * @return ResourceLoaderImage|null
+ */
+ public function getImage( $name ) {
+ $images = $this->getImages();
+ return isset( $images[$name] ) ? $images[$name] : null;
+ }
+
+ /**
+ * Get ResourceLoaderImage objects for all images.
+ * @return ResourceLoaderImage[] Array keyed by image name
+ */
+ public function getImages() {
+ if ( !isset( $this->imageObjects ) ) {
+ $this->imageObjects = array();
+
+ foreach ( $this->images as $name => $options ) {
+ $fileDescriptor = is_string( $options ) ? $options : $options['file'];
+
+ $allowedVariants = array_merge(
+ is_array( $options ) && isset( $options['variants'] ) ? $options['variants'] : array(),
+ $this->getGlobalVariants()
+ );
+ if ( isset( $this->variants ) ) {
+ $variantConfig = array_intersect_key(
+ $this->variants,
+ array_fill_keys( $allowedVariants, true )
+ );
+ } else {
+ $variantConfig = array();
+ }
+
+ $image = new ResourceLoaderImage(
+ $name,
+ $this->getName(),
+ $fileDescriptor,
+ $this->localBasePath,
+ $variantConfig
+ );
+ $this->imageObjects[ $image->getName() ] = $image;
+ }
+ }
+
+ return $this->imageObjects;
+ }
+
+ /**
+ * Get list of variants in this module that are 'global', i.e., available
+ * for every image regardless of image options.
+ * @return string[]
+ */
+ public function getGlobalVariants() {
+ if ( !isset( $this->globalVariants ) ) {
+ $this->globalVariants = array();
+
+ if ( isset( $this->variants ) ) {
+ foreach ( $this->variants as $name => $config ) {
+ if ( isset( $config['global'] ) && $config['global'] ) {
+ $this->globalVariants[] = $name;
+ }
+ }
+ }
+ }
+
+ return $this->globalVariants;
+ }
+
+ /**
+ * @param ResourceLoaderContext $context
+ * @return array
+ */
+ public function getStyles( ResourceLoaderContext $context ) {
+ // Build CSS rules
+ $rules = array();
+ $script = $context->getResourceLoader()->getLoadScript( $this->getSource() );
+ $selectors = $this->getSelectors();
+
+ foreach ( $this->getImages() as $name => $image ) {
+ $declarations = $this->getCssDeclarations(
+ $image->getDataUri( $context, null, 'original' ),
+ $image->getUrl( $context, $script, null, 'rasterized' )
+ );
+ $declarations = implode( "\n\t", $declarations );
+ $selector = strtr(
+ $selectors['selectorWithoutVariant'],
+ array(
+ '{prefix}' => $this->getPrefix(),
+ '{name}' => $name,
+ '{variant}' => '',
+ )
+ );
+ $rules[] = "$selector {\n\t$declarations\n}";
+
+ foreach ( $image->getVariants() as $variant ) {
+ $declarations = $this->getCssDeclarations(
+ $image->getDataUri( $context, $variant, 'original' ),
+ $image->getUrl( $context, $script, $variant, 'rasterized' )
+ );
+ $declarations = implode( "\n\t", $declarations );
+ $selector = strtr(
+ $selectors['selectorWithVariant'],
+ array(
+ '{prefix}' => $this->getPrefix(),
+ '{name}' => $name,
+ '{variant}' => $variant,
+ )
+ );
+ $rules[] = "$selector {\n\t$declarations\n}";
+ }
+ }
+
+ $style = implode( "\n", $rules );
+ return array( 'all' => $style );
+ }
+
+ /**
+ * SVG support using a transparent gradient to guarantee cross-browser
+ * compatibility (browsers able to understand gradient syntax support also SVG).
+ * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique
+ *
+ * Keep synchronized with the .background-image-svg LESS mixin in
+ * /resources/src/mediawiki.less/mediawiki.mixins.less.
+ *
+ * @param string $primary Primary URI
+ * @param string $fallback Fallback URI
+ * @return string[] CSS declarations to use given URIs as background-image
+ */
+ protected function getCssDeclarations( $primary, $fallback ) {
+ return array(
+ "background-image: url($fallback);",
+ "background-image: -webkit-linear-gradient(transparent, transparent), url($primary);",
+ "background-image: linear-gradient(transparent, transparent), url($primary);",
+ "background-image: -o-linear-gradient(transparent, transparent), url($fallback);",
+ );
+ }
+
+ /**
+ * @return bool
+ */
+ public function supportsURLLoading() {
+ return false;
+ }
+
+ /**
+ * Extract a local base path from module definition information.
+ *
+ * @param array $options Module definition
+ * @param string $localBasePath Path to use if not provided in module definition. Defaults
+ * to $IP
+ * @return string Local base path
+ */
+ public static function extractLocalBasePath( $options, $localBasePath = null ) {
+ global $IP;
+
+ if ( $localBasePath === null ) {
+ $localBasePath = $IP;
+ }
+
+ if ( array_key_exists( 'localBasePath', $options ) ) {
+ $localBasePath = (string)$options['localBasePath'];
+ }
+
+ return $localBasePath;
+ }
+}
diff --git a/includes/resourceloader/ResourceLoaderLanguageDataModule.php b/includes/resourceloader/ResourceLoaderLanguageDataModule.php
index 09d90d6e..12394536 100644
--- a/includes/resourceloader/ResourceLoaderLanguageDataModule.php
+++ b/includes/resourceloader/ResourceLoaderLanguageDataModule.php
@@ -52,10 +52,14 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
* @return string JavaScript code
*/
public function getScript( ResourceLoaderContext $context ) {
- return Xml::encodeJsCall( 'mw.language.setData', array(
- $context->getLanguage(),
- $this->getData( $context )
- ) );
+ return Xml::encodeJsCall(
+ 'mw.language.setData',
+ array(
+ $context->getLanguage(),
+ $this->getData( $context )
+ ),
+ ResourceLoader::inDebugMode()
+ );
}
/**
diff --git a/includes/resourceloader/ResourceLoaderLanguageNamesModule.php b/includes/resourceloader/ResourceLoaderLanguageNamesModule.php
index fe0c8454..55b1f4b1 100644
--- a/includes/resourceloader/ResourceLoaderLanguageNamesModule.php
+++ b/includes/resourceloader/ResourceLoaderLanguageNamesModule.php
@@ -49,11 +49,15 @@ class ResourceLoaderLanguageNamesModule extends ResourceLoaderModule {
* @return string JavaScript code
*/
public function getScript( ResourceLoaderContext $context ) {
- return Xml::encodeJsCall( 'mw.language.setData', array(
- $context->getLanguage(),
- 'languageNames',
- $this->getData( $context )
- ) );
+ return Xml::encodeJsCall(
+ 'mw.language.setData',
+ array(
+ $context->getLanguage(),
+ 'languageNames',
+ $this->getData( $context )
+ ),
+ ResourceLoader::inDebugMode()
+ );
}
public function getDependencies() {
diff --git a/includes/resourceloader/ResourceLoaderModule.php b/includes/resourceloader/ResourceLoaderModule.php
index 45eb70f8..ed16521b 100644
--- a/includes/resourceloader/ResourceLoaderModule.php
+++ b/includes/resourceloader/ResourceLoaderModule.php
@@ -135,6 +135,16 @@ abstract class ResourceLoaderModule {
}
/**
+ * Takes named templates by the module and returns an array mapping.
+ *
+ * @return array of templates mapping template alias to content
+ */
+ public function getTemplates() {
+ // Stub, override expected.
+ return array();
+ }
+
+ /**
* @return Config
* @since 1.24
*/
@@ -378,12 +388,12 @@ abstract class ResourceLoaderModule {
* Get the last modification timestamp of the message blob for this
* module in a given language.
* @param string $lang Language code
- * @return int UNIX timestamp, or 0 if the module doesn't have messages
+ * @return int UNIX timestamp
*/
public function getMsgBlobMtime( $lang ) {
if ( !isset( $this->msgBlobMtime[$lang] ) ) {
if ( !count( $this->getMessages() ) ) {
- return 0;
+ return 1;
}
$dbr = wfGetDB( DB_SLAVE );
@@ -406,7 +416,7 @@ abstract class ResourceLoaderModule {
* Set a preloaded message blob last modification timestamp. Used so we
* can load this information for all modules at once.
* @param string $lang Language code
- * @param int $mtime UNIX timestamp or 0 if there is no such blob
+ * @param int $mtime UNIX timestamp
*/
public function setMsgBlobMtime( $lang, $mtime ) {
$this->msgBlobMtime[$lang] = $mtime;
@@ -433,7 +443,6 @@ abstract class ResourceLoaderModule {
* @return int UNIX timestamp
*/
public function getModifiedTime( ResourceLoaderContext $context ) {
- // 0 would mean now
return 1;
}
@@ -441,30 +450,34 @@ abstract class ResourceLoaderModule {
* Helper method for calculating when the module's hash (if it has one) changed.
*
* @param ResourceLoaderContext $context
- * @return int UNIX timestamp or 0 if no hash was provided
- * by getModifiedHash()
+ * @return int UNIX timestamp
*/
public function getHashMtime( ResourceLoaderContext $context ) {
$hash = $this->getModifiedHash( $context );
if ( !is_string( $hash ) ) {
- return 0;
+ return 1;
}
+ // Embed the hash itself in the cache key. This allows for a few nifty things:
+ // - During deployment, servers with old and new versions of the code communicating
+ // with the same memcached will not override the same key repeatedly increasing
+ // the timestamp.
+ // - In case of the definition changing and then changing back in a short period of time
+ // (e.g. in case of a revert or a corrupt server) the old timestamp and client-side cache
+ // url will be re-used.
+ // - If different context-combinations (e.g. same skin, same language or some combination
+ // thereof) result in the same definition, they will use the same hash and timestamp.
$cache = wfGetCache( CACHE_ANYTHING );
- $key = wfMemcKey( 'resourceloader', 'modulemodifiedhash', $this->getName(), $hash );
+ $key = wfMemcKey( 'resourceloader', 'hashmtime', $this->getName(), $hash );
$data = $cache->get( $key );
- if ( is_array( $data ) && $data['hash'] === $hash ) {
- // Hash is still the same, re-use the timestamp of when we first saw this hash.
- return $data['timestamp'];
+ if ( is_int( $data ) && $data > 0 ) {
+ // We've seen this hash before, re-use the timestamp of when we first saw it.
+ return $data;
}
- $timestamp = wfTimestamp();
- $cache->set( $key, array(
- 'hash' => $hash,
- 'timestamp' => $timestamp,
- ) );
-
+ $timestamp = time();
+ $cache->set( $key, $timestamp );
return $timestamp;
}
@@ -487,46 +500,29 @@ abstract class ResourceLoaderModule {
* @since 1.23
*
* @param ResourceLoaderContext $context
- * @return int UNIX timestamp or 0 if no definition summary was provided
- * by getDefinitionSummary()
+ * @return int UNIX timestamp
*/
public function getDefinitionMtime( ResourceLoaderContext $context ) {
- wfProfileIn( __METHOD__ );
$summary = $this->getDefinitionSummary( $context );
if ( $summary === null ) {
- wfProfileOut( __METHOD__ );
- return 0;
+ return 1;
}
$hash = md5( json_encode( $summary ) );
-
$cache = wfGetCache( CACHE_ANYTHING );
-
- // Embed the hash itself in the cache key. This allows for a few nifty things:
- // - During deployment, servers with old and new versions of the code communicating
- // with the same memcached will not override the same key repeatedly increasing
- // the timestamp.
- // - In case of the definition changing and then changing back in a short period of time
- // (e.g. in case of a revert or a corrupt server) the old timestamp and client-side cache
- // url will be re-used.
- // - If different context-combinations (e.g. same skin, same language or some combination
- // thereof) result in the same definition, they will use the same hash and timestamp.
$key = wfMemcKey( 'resourceloader', 'moduledefinition', $this->getName(), $hash );
$data = $cache->get( $key );
if ( is_int( $data ) && $data > 0 ) {
// We've seen this hash before, re-use the timestamp of when we first saw it.
- wfProfileOut( __METHOD__ );
return $data;
}
- wfDebugLog( 'resourceloader', __METHOD__ . ": New definition hash for module "
- . "{$this->getName()} in context {$context->getHash()}: $hash." );
+ wfDebugLog( 'resourceloader', __METHOD__ . ": New definition for module "
+ . "{$this->getName()} in context \"{$context->getHash()}\"" );
$timestamp = time();
$cache->set( $key, $timestamp );
-
- wfProfileOut( __METHOD__ );
return $timestamp;
}
@@ -630,16 +626,13 @@ abstract class ResourceLoaderModule {
* Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist
* but returns 1 instead.
* @param string $filename File name
- * @return int UNIX timestamp, or 1 if the file doesn't exist
+ * @return int UNIX timestamp
*/
protected static function safeFilemtime( $filename ) {
- if ( file_exists( $filename ) ) {
- return filemtime( $filename );
- } else {
- // We only ever map this function on an array if we're gonna call max() after,
- // so return our standard minimum timestamps here. This is 1, not 0, because
- // wfTimestamp(0) == NOW
- return 1;
- }
+ wfSuppressWarnings();
+ $mtime = filemtime( $filename ) ?: 1;
+ wfRestoreWarnings();
+
+ return $mtime;
}
}
diff --git a/includes/resourceloader/ResourceLoaderNoscriptModule.php b/includes/resourceloader/ResourceLoaderNoscriptModule.php
deleted file mode 100644
index 61927d77..00000000
--- a/includes/resourceloader/ResourceLoaderNoscriptModule.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Resource loader for site customizations for users without JavaScript enabled.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Trevor Parscal
- * @author Roan Kattouw
- */
-
-/**
- * Module for site customizations
- */
-class ResourceLoaderNoscriptModule extends ResourceLoaderWikiModule {
-
- /* Protected Methods */
-
- /**
- * Gets list of pages used by this module. Obviously, it makes absolutely no
- * sense to include JavaScript files here... :D
- *
- * @param ResourceLoaderContext $context
- *
- * @return array List of pages
- */
- protected function getPages( ResourceLoaderContext $context ) {
- return array( 'MediaWiki:Noscript.css' => array( 'type' => 'style' ) );
- }
-
- /* Methods */
-
- /**
- * Gets group name
- *
- * @return string Name of group
- */
- public function getGroup() {
- return 'noscript';
- }
-}
diff --git a/includes/resourceloader/ResourceLoaderSiteModule.php b/includes/resourceloader/ResourceLoaderSiteModule.php
index 1d9721aa..19e0baeb 100644
--- a/includes/resourceloader/ResourceLoaderSiteModule.php
+++ b/includes/resourceloader/ResourceLoaderSiteModule.php
@@ -27,13 +27,10 @@
*/
class ResourceLoaderSiteModule extends ResourceLoaderWikiModule {
- /* Protected Methods */
-
/**
- * Gets list of pages used by this module
+ * Get list of pages used by this module
*
* @param ResourceLoaderContext $context
- *
* @return array List of pages
*/
protected function getPages( ResourceLoaderContext $context ) {
@@ -45,18 +42,16 @@ class ResourceLoaderSiteModule extends ResourceLoaderWikiModule {
if ( $this->getConfig()->get( 'UseSiteCss' ) ) {
$pages['MediaWiki:Common.css'] = array( 'type' => 'style' );
$pages['MediaWiki:' . ucfirst( $context->getSkin() ) . '.css'] = array( 'type' => 'style' );
+ $pages['MediaWiki:Print.css'] = array( 'type' => 'style', 'media' => 'print' );
}
- $pages['MediaWiki:Print.css'] = array( 'type' => 'style', 'media' => 'print' );
return $pages;
}
- /* Methods */
-
/**
- * Gets group name
+ * Get group name
*
- * @return string Name of group
+ * @return string
*/
public function getGroup() {
return 'site';
diff --git a/includes/resourceloader/ResourceLoaderSkinModule.php b/includes/resourceloader/ResourceLoaderSkinModule.php
new file mode 100644
index 00000000..3ba63e68
--- /dev/null
+++ b/includes/resourceloader/ResourceLoaderSkinModule.php
@@ -0,0 +1,92 @@
+<?php
+/**
+ * Resource loader module for skin stylesheets.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Timo Tijhof
+ */
+
+class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
+
+ /* Methods */
+
+ /**
+ * @param $context ResourceLoaderContext
+ * @return array
+ */
+ public function getStyles( ResourceLoaderContext $context ) {
+ $logo = $this->getConfig()->get( 'Logo' );
+ $logoHD = $this->getConfig()->get( 'LogoHD' );
+ $styles = parent::getStyles( $context );
+ $styles['all'][] = '.mw-wiki-logo { background-image: ' .
+ CSSMin::buildUrlValue( $logo ) .
+ '; }';
+ if ( $logoHD ) {
+ if ( isset( $logoHD['1.5x'] ) ) {
+ $styles[
+ '(-webkit-min-device-pixel-ratio: 1.5), ' .
+ '(min--moz-device-pixel-ratio: 1.5), ' .
+ '(min-resolution: 1.5dppx), ' .
+ '(min-resolution: 144dpi)'
+ ][] = '.mw-wiki-logo { background-image: ' .
+ CSSMin::buildUrlValue( $logoHD['1.5x'] ) .';' .
+ 'background-size: 135px auto; }';
+ }
+ if ( isset( $logoHD['2x'] ) ) {
+ $styles[
+ '(-webkit-min-device-pixel-ratio: 2), ' .
+ '(min--moz-device-pixel-ratio: 2),'.
+ '(min-resolution: 2dppx), ' .
+ '(min-resolution: 192dpi)'
+ ][] = '.mw-wiki-logo { background-image: ' .
+ CSSMin::buildUrlValue( $logoHD['2x'] ) . ';' .
+ 'background-size: 135px auto; }';
+ }
+ }
+ return $styles;
+ }
+
+ /**
+ * @param $context ResourceLoaderContext
+ * @return bool
+ */
+ public function isKnownEmpty( ResourceLoaderContext $context ) {
+ // Regardless of whether the files are specified, we always
+ // provide mw-wiki-logo styles.
+ return false;
+ }
+
+ /**
+ * @param $context ResourceLoaderContext
+ * @return int|mixed
+ */
+ public function getModifiedTime( ResourceLoaderContext $context ) {
+ $parentMTime = parent::getModifiedTime( $context );
+ return max( $parentMTime, $this->getHashMtime( $context ) );
+ }
+
+ /**
+ * @param $context ResourceLoaderContext
+ * @return string: Hash
+ */
+ public function getModifiedHash( ResourceLoaderContext $context ) {
+ $logo = $this->getConfig()->get( 'Logo' );
+ $logoHD = $this->getConfig()->get( 'LogoHD' );
+ return md5( parent::getModifiedHash( $context ) . $logo . json_encode( $logoHD ) );
+ }
+}
diff --git a/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php b/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php
new file mode 100644
index 00000000..5c917091
--- /dev/null
+++ b/includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Resource loader module for populating special characters data for some
+ * editing extensions to use.
+ *
+ * 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
+ */
+
+/**
+ * Resource loader module for populating special characters data for some
+ * editing extensions to use.
+ */
+class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule {
+ private $path = "resources/src/mediawiki.language/specialcharacters.json";
+ protected $targets = array( 'desktop', 'mobile' );
+
+ /**
+ * Get all the dynamic data.
+ *
+ * @return array
+ */
+ protected function getData() {
+ return json_decode( file_get_contents( $this->path ) );
+ }
+
+ /**
+ * @param ResourceLoaderContext $context
+ * @return string JavaScript code
+ */
+ public function getScript( ResourceLoaderContext $context ) {
+ return Xml::encodeJsCall(
+ 'mw.language.setSpecialCharacters',
+ array(
+ $this->getData()
+ ),
+ ResourceLoader::inDebugMode()
+ );
+ }
+
+ /**
+ * @param ResourceLoaderContext $context
+ * @return int UNIX timestamp
+ */
+ public function getModifiedTime( ResourceLoaderContext $context ) {
+ return static::safeFilemtime( $this->path );
+ }
+
+ /**
+ * @param ResourceLoaderContext $context
+ * @return string Hash
+ */
+ public function getModifiedHash( ResourceLoaderContext $context ) {
+ return md5( serialize( $this->getData() ) );
+ }
+
+ /**
+ * @return array
+ */
+ public function getDependencies() {
+ return array( 'mediawiki.language' );
+ }
+
+ /**
+ * @return array
+ */
+ public function getMessages() {
+ return array(
+ 'special-characters-group-latin',
+ 'special-characters-group-latinextended',
+ 'special-characters-group-ipa',
+ 'special-characters-group-symbols',
+ 'special-characters-group-greek',
+ 'special-characters-group-cyrillic',
+ 'special-characters-group-arabic',
+ 'special-characters-group-arabicextended',
+ 'special-characters-group-persian',
+ 'special-characters-group-hebrew',
+ 'special-characters-group-bangla',
+ 'special-characters-group-tamil',
+ 'special-characters-group-telugu',
+ 'special-characters-group-sinhala',
+ 'special-characters-group-devanagari',
+ 'special-characters-group-gujarati',
+ 'special-characters-group-thai',
+ 'special-characters-group-lao',
+ 'special-characters-group-khmer',
+ 'special-characters-title-endash',
+ 'special-characters-title-emdash',
+ 'special-characters-title-minus'
+ );
+ }
+}
diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php
index 78fe8e01..b2fbae9c 100644
--- a/includes/resourceloader/ResourceLoaderStartUpModule.php
+++ b/includes/resourceloader/ResourceLoaderStartUpModule.php
@@ -82,6 +82,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
'wgServerName' => $conf->get( 'ServerName' ),
'wgUserLanguage' => $context->getLanguage(),
'wgContentLanguage' => $wgContLang->getCode(),
+ 'wgTranslateNumerals' => $conf->get( 'TranslateNumerals' ),
'wgVersion' => $conf->get( 'Version' ),
'wgEnableAPI' => $conf->get( 'EnableAPI' ),
'wgEnableWriteAPI' => $conf->get( 'EnableWriteAPI' ),
@@ -90,11 +91,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
'wgNamespaceIds' => $namespaceIds,
'wgContentNamespaces' => MWNamespace::getContentNamespaces(),
'wgSiteName' => $conf->get( 'Sitename' ),
- 'wgFileExtensions' => array_values( array_unique( $conf->get( 'FileExtensions' ) ) ),
'wgDBname' => $conf->get( 'DBname' ),
- // This sucks, it is only needed on Special:Upload, but I could
- // not find a way to add vars only for a certain module
- 'wgFileCanRotate' => SpecialUpload::rotationEnabled(),
'wgAvailableSkins' => Skin::getSkinNames(),
'wgExtensionAssetsPath' => $conf->get( 'ExtensionAssetsPath' ),
// MediaWiki sets cookies to have this prefix by default
@@ -109,7 +106,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
'wgResourceLoaderStorageEnabled' => $conf->get( 'ResourceLoaderStorageEnabled' ),
);
- wfRunHooks( 'ResourceLoaderGetConfigVars', array( &$vars ) );
+ Hooks::run( 'ResourceLoaderGetConfigVars', array( &$vars ) );
$this->configVars[$hash] = $vars;
return $this->configVars[$hash];
@@ -150,7 +147,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
}
/**
- * Optimize the dependency tree in $this->modules and return it.
+ * Optimize the dependency tree in $this->modules.
*
* The optimization basically works like this:
* Given we have module A with the dependencies B and C
@@ -158,11 +155,11 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
* Now we don't have to tell the client to explicitly fetch module
* C as that's already included in module B.
*
- * This way we can reasonably reduce the amout of module registration
+ * This way we can reasonably reduce the amount of module registration
* data send to the client.
*
* @param array &$registryData Modules keyed by name with properties:
- * - string 'version'
+ * - number 'version'
* - array 'dependencies'
* - string|null 'group'
* - string 'source'
@@ -191,7 +188,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
* @return string JavaScript code for registering all modules with the client loader
*/
public function getModuleRegistrations( ResourceLoaderContext $context ) {
- wfProfileIn( __METHOD__ );
$resourceLoader = $context->getResourceLoader();
$target = $context->getRequest()->getVal( 'target', 'desktop' );
@@ -214,12 +210,10 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
continue;
}
- // getModifiedTime() is supposed to return a UNIX timestamp, but it doesn't always
- // seem to do that, and custom implementations might forget. Coerce it to TS_UNIX
+ // Coerce module timestamp to UNIX timestamp.
+ // getModifiedTime() is supposed to return a UNIX timestamp, but custom implementations
+ // might forget. TODO: Maybe emit warning?
$moduleMtime = wfTimestamp( TS_UNIX, $module->getModifiedTime( $context ) );
- $mtime = max( $moduleMtime, wfTimestamp( TS_UNIX, $this->getConfig()->get( 'CacheEpoch' ) ) );
-
- // FIXME: Convert to numbers, wfTimestamp always gives us stings, even for TS_UNIX
$skipFunction = $module->getSkipFunction();
if ( $skipFunction !== null && !ResourceLoader::inDebugMode() ) {
@@ -232,8 +226,14 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
);
}
+ $mtime = max(
+ $moduleMtime,
+ wfTimestamp( TS_UNIX, $this->getConfig()->get( 'CacheEpoch' ) )
+ );
+
$registryData[$name] = array(
- 'version' => $mtime,
+ // Convert to numbers as wfTimestamp always returns a string, even for TS_UNIX
+ 'version' => (int) $mtime,
'dependencies' => $module->getDependencies(),
'group' => $module->getGroup(),
'source' => $module->getSource(),
@@ -254,7 +254,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
if ( $data['loader'] !== false ) {
$out .= ResourceLoader::makeCustomLoaderScript(
$name,
- wfTimestamp( TS_ISO_8601_BASIC, $data['version'] ),
+ $data['version'],
$data['dependencies'],
$data['group'],
$data['source'],
@@ -263,63 +263,21 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
continue;
}
- if (
- !count( $data['dependencies'] ) &&
- $data['group'] === null &&
- $data['source'] === 'local' &&
- $data['skip'] === null
- ) {
- // Modules with no dependencies, group, foreign source or skip function;
- // call mw.loader.register(name, timestamp)
- $registrations[] = array( $name, $data['version'] );
- } elseif (
- $data['group'] === null &&
- $data['source'] === 'local' &&
- $data['skip'] === null
- ) {
- // Modules with dependencies but no group, foreign source or skip function;
- // call mw.loader.register(name, timestamp, dependencies)
- $registrations[] = array( $name, $data['version'], $data['dependencies'] );
- } elseif (
- $data['source'] === 'local' &&
- $data['skip'] === null
- ) {
- // Modules with a group but no foreign source or skip function;
- // call mw.loader.register(name, timestamp, dependencies, group)
- $registrations[] = array(
- $name,
- $data['version'],
- $data['dependencies'],
- $data['group']
- );
- } elseif ( $data['skip'] === null ) {
- // Modules with a foreign source but no skip function;
- // call mw.loader.register(name, timestamp, dependencies, group, source)
- $registrations[] = array(
- $name,
- $data['version'],
- $data['dependencies'],
- $data['group'],
- $data['source']
- );
- } else {
- // Modules with a skip function;
- // call mw.loader.register(name, timestamp, dependencies, group, source, skip)
- $registrations[] = array(
- $name,
- $data['version'],
- $data['dependencies'],
- $data['group'],
- $data['source'],
- $data['skip']
- );
- }
+ // Call mw.loader.register(name, timestamp, dependencies, group, source, skip)
+ $registrations[] = array(
+ $name,
+ $data['version'],
+ $data['dependencies'],
+ $data['group'],
+ // Swap default (local) for null
+ $data['source'] === 'local' ? null : $data['source'],
+ $data['skip']
+ );
}
// Register modules
$out .= ResourceLoader::makeLoaderRegisterScript( $registrations );
- wfProfileOut( __METHOD__ );
return $out;
}
@@ -333,7 +291,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
}
/**
- * Base modules required for the the base environment of ResourceLoader
+ * Base modules required for the base environment of ResourceLoader
*
* @return array
*/
@@ -355,7 +313,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
// Get the latest version
$loader = $context->getResourceLoader();
- $version = 0;
+ $version = 1;
foreach ( $moduleNames as $moduleName ) {
$version = max( $version,
$loader->getModule( $moduleName )->getModifiedTime( $context )
@@ -390,18 +348,28 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
$registrations = $this->getModuleRegistrations( $context );
// Fix indentation
$registrations = str_replace( "\n", "\n\t", trim( $registrations ) );
+ $mwMapJsCall = Xml::encodeJsCall(
+ 'mw.Map',
+ array( $this->getConfig()->get( 'LegacyJavaScriptGlobals' ) )
+ );
+ $mwConfigSetJsCall = Xml::encodeJsCall(
+ 'mw.config.set',
+ array( $configuration ),
+ ResourceLoader::inDebugMode()
+ );
+
$out .= "var startUp = function () {\n" .
"\tmw.config = new " .
- Xml::encodeJsCall( 'mw.Map', array( $this->getConfig()->get( 'LegacyJavaScriptGlobals' ) ) ) . "\n" .
+ $mwMapJsCall . "\n" .
"\t$registrations\n" .
- "\t" . Xml::encodeJsCall( 'mw.config.set', array( $configuration ) ) .
+ "\t" . $mwConfigSetJsCall .
"};\n";
// Conditional script injection
$scriptTag = Html::linkedScript( self::getStartupModulesUrl( $context ) );
$out .= "if ( isCompatible() ) {\n" .
"\t" . Xml::encodeJsCall( 'document.write', array( $scriptTag ) ) .
- "}";
+ "\n}";
}
return $out;
@@ -440,8 +408,8 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
// ATTENTION!: Because of the line below, this is not going to cause
// infinite recursion - think carefully before making changes to this
// code!
- // Pre-populate modifiedTime with something because the the loop over
- // all modules below includes the the startup module (this module).
+ // Pre-populate modifiedTime with something because the loop over
+ // all modules below includes the startup module (this module).
$this->modifiedTime[$hash] = 1;
foreach ( $loader->getModuleNames() as $name ) {
diff --git a/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php b/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
index 40274c63..472ceb26 100644
--- a/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
+++ b/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
@@ -42,8 +42,7 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
public function getModifiedTime( ResourceLoaderContext $context ) {
$hash = $context->getHash();
if ( !isset( $this->modifiedTime[$hash] ) ) {
- global $wgUser;
- $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
+ $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
}
return $this->modifiedTime[$hash];
@@ -54,13 +53,11 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
* @return array
*/
public function getStyles( ResourceLoaderContext $context ) {
- global $wgUser;
-
if ( !$this->getConfig()->get( 'AllowUserCssPrefs' ) ) {
return array();
}
- $options = $wgUser->getOptions();
+ $options = $context->getUserObj()->getOptions();
// Build CSS rules
$rules = array();
@@ -93,11 +90,4 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
public function getGroup() {
return 'private';
}
-
- /**
- * @return array
- */
- public function getDependencies() {
- return array( 'mediawiki.user' );
- }
}
diff --git a/includes/resourceloader/ResourceLoaderUserDefaultsModule.php b/includes/resourceloader/ResourceLoaderUserDefaultsModule.php
new file mode 100644
index 00000000..5f4bc16b
--- /dev/null
+++ b/includes/resourceloader/ResourceLoaderUserDefaultsModule.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Resource loader module for default user preferences.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Ori Livneh
+ */
+
+/**
+ * Module for default user preferences.
+ */
+class ResourceLoaderUserDefaultsModule extends ResourceLoaderModule {
+
+ /* Protected Members */
+
+ protected $targets = array( 'desktop', 'mobile' );
+
+ /* Methods */
+
+ /**
+ * @param ResourceLoaderContext $context
+ * @return string Hash
+ */
+ public function getModifiedHash( ResourceLoaderContext $context ) {
+ return md5( serialize( User::getDefaultOptions() ) );
+ }
+
+ /**
+ * @param ResourceLoaderContext $context
+ * @return int
+ */
+ public function getModifiedTime( ResourceLoaderContext $context ) {
+ return $this->getHashMtime( $context );
+ }
+
+ /**
+ * @param ResourceLoaderContext $context
+ * @return string
+ */
+ public function getScript( ResourceLoaderContext $context ) {
+ return Xml::encodeJsCall(
+ 'mw.user.options.set',
+ array( User::getDefaultOptions() ),
+ ResourceLoader::inDebugMode()
+ );
+ }
+}
diff --git a/includes/resourceloader/ResourceLoaderUserGroupsModule.php b/includes/resourceloader/ResourceLoaderUserGroupsModule.php
index 7cf19420..417cfced 100644
--- a/includes/resourceloader/ResourceLoaderUserGroupsModule.php
+++ b/includes/resourceloader/ResourceLoaderUserGroupsModule.php
@@ -25,39 +25,23 @@
*/
class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
- /* Protected Members */
-
protected $origin = self::ORIGIN_USER_SITEWIDE;
protected $targets = array( 'desktop', 'mobile' );
- /* Protected Methods */
-
/**
* @param ResourceLoaderContext $context
* @return array
*/
protected function getPages( ResourceLoaderContext $context ) {
- global $wgUser;
-
- $userName = $context->getUser();
- if ( $userName === null ) {
- return array();
- }
-
$useSiteJs = $this->getConfig()->get( 'UseSiteJs' );
$useSiteCss = $this->getConfig()->get( 'UseSiteCss' );
if ( !$useSiteJs && !$useSiteCss ) {
return array();
}
- // Use $wgUser is possible; allows to skip a lot of code
- if ( is_object( $wgUser ) && $wgUser->getName() == $userName ) {
- $user = $wgUser;
- } else {
- $user = User::newFromName( $userName );
- if ( !$user instanceof User ) {
- return array();
- }
+ $user = $context->getUserObj();
+ if ( !$user || $user->isAnon() ) {
+ return array();
}
$pages = array();
@@ -75,9 +59,9 @@ class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
return $pages;
}
- /* Methods */
-
/**
+ * Get group name
+ *
* @return string
*/
public function getGroup() {
diff --git a/includes/resourceloader/ResourceLoaderUserModule.php b/includes/resourceloader/ResourceLoaderUserModule.php
index 1b6d1de0..a0978445 100644
--- a/includes/resourceloader/ResourceLoaderUserModule.php
+++ b/includes/resourceloader/ResourceLoaderUserModule.php
@@ -27,47 +27,37 @@
*/
class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
- /* Protected Members */
-
protected $origin = self::ORIGIN_USER_INDIVIDUAL;
- /* Protected Methods */
-
/**
+ * Get list of pages used by this module
+ *
* @param ResourceLoaderContext $context
- * @return array
+ * @return array List of pages
*/
protected function getPages( ResourceLoaderContext $context ) {
- $username = $context->getUser();
-
- if ( $username === null ) {
- return array();
- }
-
$allowUserJs = $this->getConfig()->get( 'AllowUserJs' );
$allowUserCss = $this->getConfig()->get( 'AllowUserCss' );
-
if ( !$allowUserJs && !$allowUserCss ) {
return array();
}
- // Get the normalized title of the user's user page
- $userpageTitle = Title::makeTitleSafe( NS_USER, $username );
-
- if ( !$userpageTitle instanceof Title ) {
+ $user = $context->getUserObj();
+ if ( !$user || $user->isAnon() ) {
return array();
}
- $userpage = $userpageTitle->getPrefixedDBkey(); // Needed so $excludepages works
+ // Needed so $excludepages works
+ $userPage = $user->getUserPage()->getPrefixedDBkey();
$pages = array();
if ( $allowUserJs ) {
- $pages["$userpage/common.js"] = array( 'type' => 'script' );
- $pages["$userpage/" . $context->getSkin() . '.js'] = array( 'type' => 'script' );
+ $pages["$userPage/common.js"] = array( 'type' => 'script' );
+ $pages["$userPage/" . $context->getSkin() . '.js'] = array( 'type' => 'script' );
}
if ( $allowUserCss ) {
- $pages["$userpage/common.css"] = array( 'type' => 'style' );
- $pages["$userpage/" . $context->getSkin() . '.css'] = array( 'type' => 'style' );
+ $pages["$userPage/common.css"] = array( 'type' => 'style' );
+ $pages["$userPage/" . $context->getSkin() . '.css'] = array( 'type' => 'style' );
}
// Hack for bug 26283: if we're on a preview page for a CSS/JS page,
@@ -82,9 +72,9 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
return $pages;
}
- /* Methods */
-
/**
+ * Get group name
+ *
* @return string
*/
public function getGroup() {
diff --git a/includes/resourceloader/ResourceLoaderUserOptionsModule.php b/includes/resourceloader/ResourceLoaderUserOptionsModule.php
index bd97a8e5..84c1906d 100644
--- a/includes/resourceloader/ResourceLoaderUserOptionsModule.php
+++ b/includes/resourceloader/ResourceLoaderUserOptionsModule.php
@@ -38,14 +38,20 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
/* Methods */
/**
+ * @return array List of module names as strings
+ */
+ public function getDependencies() {
+ return array( 'user.defaults' );
+ }
+
+ /**
* @param ResourceLoaderContext $context
- * @return array|int|mixed
+ * @return int
*/
public function getModifiedTime( ResourceLoaderContext $context ) {
$hash = $context->getHash();
if ( !isset( $this->modifiedTime[$hash] ) ) {
- global $wgUser;
- $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
+ $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
}
return $this->modifiedTime[$hash];
@@ -56,9 +62,8 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
* @return string
*/
public function getScript( ResourceLoaderContext $context ) {
- global $wgUser;
return Xml::encodeJsCall( 'mw.user.options.set',
- array( $wgUser->getOptions() ),
+ array( $context->getUserObj()->getOptions( User::GETOPTIONS_EXCLUDE_DEFAULTS ) ),
ResourceLoader::inDebugMode()
);
}
diff --git a/includes/resourceloader/ResourceLoaderUserTokensModule.php b/includes/resourceloader/ResourceLoaderUserTokensModule.php
index 668467ca..ccd1dfd0 100644
--- a/includes/resourceloader/ResourceLoaderUserTokensModule.php
+++ b/includes/resourceloader/ResourceLoaderUserTokensModule.php
@@ -37,15 +37,16 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
/**
* Fetch the tokens for the current user.
*
+ * @param ResourceLoaderContext $context
* @return array List of tokens keyed by token type
*/
- protected function contextUserTokens() {
- global $wgUser;
+ protected function contextUserTokens( ResourceLoaderContext $context ) {
+ $user = $context->getUserObj();
return array(
- 'editToken' => $wgUser->getEditToken(),
- 'patrolToken' => $wgUser->getEditToken( 'patrol' ),
- 'watchToken' => $wgUser->getEditToken( 'watch' ),
+ 'editToken' => $user->getEditToken(),
+ 'patrolToken' => $user->getEditToken( 'patrol' ),
+ 'watchToken' => $user->getEditToken( 'watch' ),
);
}
@@ -55,7 +56,7 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
*/
public function getScript( ResourceLoaderContext $context ) {
return Xml::encodeJsCall( 'mw.user.tokens.set',
- array( $this->contextUserTokens() ),
+ array( $this->contextUserTokens( $context ) ),
ResourceLoader::inDebugMode()
);
}
diff --git a/includes/resourceloader/ResourceLoaderWikiModule.php b/includes/resourceloader/ResourceLoaderWikiModule.php
index de61fc55..7b44cc67 100644
--- a/includes/resourceloader/ResourceLoaderWikiModule.php
+++ b/includes/resourceloader/ResourceLoaderWikiModule.php
@@ -29,17 +29,37 @@
* because of its dependence on the functionality of
* Title::isCssJsSubpage.
*/
-abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
+class ResourceLoaderWikiModule extends ResourceLoaderModule {
- /* Protected Members */
-
- # Origin is user-supplied code
+ // Origin defaults to users with sitewide authority
protected $origin = self::ORIGIN_USER_SITEWIDE;
// In-object cache for title info
protected $titleInfo = array();
- /* Abstract Protected Methods */
+ // List of page names that contain CSS
+ protected $styles = array();
+
+ // List of page names that contain JavaScript
+ protected $scripts = array();
+
+ // Group of module
+ protected $group;
+
+ /**
+ * @param array $options For back-compat, this can be omitted in favour of overwriting getPages.
+ */
+ public function __construct( array $options = null ) {
+ if ( isset( $options['styles'] ) ) {
+ $this->styles = $options['styles'];
+ }
+ if ( isset( $options['scripts'] ) ) {
+ $this->scripts = $options['scripts'];
+ }
+ if ( isset( $options['group'] ) ) {
+ $this->group = $options['group'];
+ }
+ }
/**
* Subclasses should return an associative array of resources in the module.
@@ -57,9 +77,34 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
* @param ResourceLoaderContext $context
* @return array
*/
- abstract protected function getPages( ResourceLoaderContext $context );
+ protected function getPages( ResourceLoaderContext $context ) {
+ $config = $this->getConfig();
+ $pages = array();
- /* Protected Methods */
+ // Filter out pages from origins not allowed by the current wiki configuration.
+ if ( $config->get( 'UseSiteJs' ) ) {
+ foreach ( $this->scripts as $script ) {
+ $pages[$script] = array( 'type' => 'script' );
+ }
+ }
+
+ if ( $config->get( 'UseSiteCss' ) ) {
+ foreach ( $this->styles as $style ) {
+ $pages[$style] = array( 'type' => 'style' );
+ }
+ }
+
+ return $pages;
+ }
+
+ /**
+ * Get group name
+ *
+ * @return string
+ */
+ public function getGroup() {
+ return $this->group;
+ }
/**
* Get the Database object used in getTitleMTimes(). Defaults to the local slave DB
@@ -70,7 +115,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
* In particular, it doesn't work for getting the content of JS and CSS pages. That functionality
* will use the local DB irrespective of the return value of this method.
*
- * @return DatabaseBase|null
+ * @return IDatabase|null
*/
protected function getDB() {
return wfGetDB( DB_SLAVE );
@@ -81,9 +126,15 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
* @return null|string
*/
protected function getContent( $title ) {
- if ( !$title->isCssJsSubpage() && !$title->isCssOrJsPage() ) {
+ $handler = ContentHandler::getForTitle( $title );
+ if ( $handler->isSupportedFormat( CONTENT_FORMAT_CSS ) ) {
+ $format = CONTENT_FORMAT_CSS;
+ } elseif ( $handler->isSupportedFormat( CONTENT_FORMAT_JAVASCRIPT ) ) {
+ $format = CONTENT_FORMAT_JAVASCRIPT;
+ } else {
return null;
}
+
$revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
if ( !$revision ) {
return null;
@@ -96,18 +147,9 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
return null;
}
- if ( $content->isSupportedFormat( CONTENT_FORMAT_JAVASCRIPT ) ) {
- return $content->serialize( CONTENT_FORMAT_JAVASCRIPT );
- } elseif ( $content->isSupportedFormat( CONTENT_FORMAT_CSS ) ) {
- return $content->serialize( CONTENT_FORMAT_CSS );
- } else {
- wfDebugLog( 'resourceloader', __METHOD__ . ": bad content model {$content->getModel()} for JS/CSS page!" );
- return null;
- }
+ return $content->serialize( $format );
}
- /* Methods */
-
/**
* @param ResourceLoaderContext $context
* @return string
@@ -165,13 +207,13 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
/**
* @param ResourceLoaderContext $context
- * @return int|mixed
+ * @return int
*/
public function getModifiedTime( ResourceLoaderContext $context ) {
- $modifiedTime = 1; // wfTimestamp() interprets 0 as "now"
+ $modifiedTime = 1;
$titleInfo = $this->getTitleInfo( $context );
if ( count( $titleInfo ) ) {
- $mtimes = array_map( function( $value ) {
+ $mtimes = array_map( function ( $value ) {
return $value['timestamp'];
}, $titleInfo );
$modifiedTime = max( $modifiedTime, max( $mtimes ) );
@@ -227,8 +269,8 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
* Get the modification times of all titles that would be loaded for
* a given context.
* @param ResourceLoaderContext $context Context object
- * @return array keyed by page dbkey, with value is an array with 'length' and 'timestamp'
- * keys, where the timestamp is a unix one
+ * @return array Keyed by page dbkey. Value is an array with 'length' and 'timestamp'
+ * keys, where the timestamp is a UNIX timestamp
*/
protected function getTitleInfo( ResourceLoaderContext $context ) {
$dbr = $this->getDB();
diff --git a/includes/revisiondelete/RevDelArchiveList.php b/includes/revisiondelete/RevDelArchiveList.php
index e7aed737..6ae0afce 100644
--- a/includes/revisiondelete/RevDelArchiveList.php
+++ b/includes/revisiondelete/RevDelArchiveList.php
@@ -32,7 +32,7 @@ class RevDelArchiveList extends RevDelRevisionList {
}
/**
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @return mixed
*/
public function doQuery( $db ) {
diff --git a/includes/revisiondelete/RevDelArchivedFileList.php b/includes/revisiondelete/RevDelArchivedFileList.php
index aec51b17..f2b99aed 100644
--- a/includes/revisiondelete/RevDelArchivedFileList.php
+++ b/includes/revisiondelete/RevDelArchivedFileList.php
@@ -32,7 +32,7 @@ class RevDelArchivedFileList extends RevDelFileList {
}
/**
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @return mixed
*/
public function doQuery( $db ) {
diff --git a/includes/revisiondelete/RevDelFileList.php b/includes/revisiondelete/RevDelFileList.php
index 57e15d81..2295eaa1 100644
--- a/includes/revisiondelete/RevDelFileList.php
+++ b/includes/revisiondelete/RevDelFileList.php
@@ -49,7 +49,7 @@ class RevDelFileList extends RevDelList {
}
/**
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @return mixed
*/
public function doQuery( $db ) {
diff --git a/includes/revisiondelete/RevDelList.php b/includes/revisiondelete/RevDelList.php
index a0ff6672..840fd772 100644
--- a/includes/revisiondelete/RevDelList.php
+++ b/includes/revisiondelete/RevDelList.php
@@ -247,16 +247,22 @@ abstract class RevDelList extends RevisionListBase {
} else {
$logType = 'delete';
}
- // Add params for effected page and ids
+ // Add params for affected page and ids
$logParams = $this->getLogParams( $params );
// Actually add the deletion log entry
- $log = new LogPage( $logType );
- $logid = $log->addEntry( $this->getLogAction(), $params['title'],
- $params['comment'], $logParams, $this->getUser() );
+ $logEntry = new ManualLogEntry( $logType, $this->getLogAction() );
+ $logEntry->setTarget( $params['title'] );
+ $logEntry->setComment( $params['comment'] );
+ $logEntry->setParameters( $logParams );
+ $logEntry->setPerformer( $this->getUser() );
// Allow for easy searching of deletion log items for revision/log items
- $log->addRelations( $field, $params['ids'], $logid );
- $log->addRelations( 'target_author_id', $params['authorIds'], $logid );
- $log->addRelations( 'target_author_ip', $params['authorIPs'], $logid );
+ $logEntry->setRelations( array(
+ $field => $params['ids'],
+ 'target_author_id' => $params['authorIds'],
+ 'target_author_ip' => $params['authorIPs'],
+ ) );
+ $logId = $logEntry->insert();
+ $logEntry->publish( $logId );
}
/**
@@ -274,10 +280,10 @@ abstract class RevDelList extends RevisionListBase {
*/
public function getLogParams( $params ) {
return array(
- $this->getType(),
- implode( ',', $params['ids'] ),
- "ofield={$params['oldBits']}",
- "nfield={$params['newBits']}"
+ '4::type' => $this->getType(),
+ '5::ids' => $params['ids'],
+ '6::ofield' => $params['oldBits'],
+ '7::nfield' => $params['newBits'],
);
}
diff --git a/includes/revisiondelete/RevDelLogItem.php b/includes/revisiondelete/RevDelLogItem.php
index 5c8b8c9d..49adf204 100644
--- a/includes/revisiondelete/RevDelLogItem.php
+++ b/includes/revisiondelete/RevDelLogItem.php
@@ -124,15 +124,7 @@ class RevDelLogItem extends RevDelItem {
: array();
if ( LogEventsList::userCan( $this->row, LogPage::DELETED_ACTION, $user ) ) {
- ApiQueryLogEvents::addLogParams(
- $result,
- $ret,
- $logEntry->getParameters(),
- $logEntry->getType(),
- $logEntry->getSubtype(),
- $logEntry->getTimestamp(),
- $logEntry->isLegacy()
- );
+ $ret['params'] = LogFormatter::newFromEntry( $logEntry )->formatParametersForApi();
}
if ( LogEventsList::userCan( $this->row, LogPage::DELETED_USER, $user ) ) {
$ret += array(
diff --git a/includes/revisiondelete/RevDelLogList.php b/includes/revisiondelete/RevDelLogList.php
index ad040425..d8bd2f7e 100644
--- a/includes/revisiondelete/RevDelLogList.php
+++ b/includes/revisiondelete/RevDelLogList.php
@@ -55,7 +55,7 @@ class RevDelLogList extends RevDelList {
}
/**
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @return mixed
*/
public function doQuery( $db ) {
@@ -95,9 +95,9 @@ class RevDelLogList extends RevDelList {
public function getLogParams( $params ) {
return array(
- implode( ',', $params['ids'] ),
- "ofield={$params['oldBits']}",
- "nfield={$params['newBits']}"
+ '4::ids' => $params['ids'],
+ '5::ofield' => $params['oldBits'],
+ '6::nfield' => $params['newBits'],
);
}
}
diff --git a/includes/revisiondelete/RevDelRevisionList.php b/includes/revisiondelete/RevDelRevisionList.php
index 25450725..4a0fff87 100644
--- a/includes/revisiondelete/RevDelRevisionList.php
+++ b/includes/revisiondelete/RevDelRevisionList.php
@@ -54,7 +54,7 @@ class RevDelRevisionList extends RevDelList {
}
/**
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @return mixed
*/
public function doQuery( $db ) {
@@ -137,7 +137,7 @@ class RevDelRevisionList extends RevDelList {
public function doPostCommitUpdates() {
$this->title->purgeSquid();
// Extensions that require referencing previous revisions may need this
- wfRunHooks( 'ArticleRevisionVisibilitySet', array( &$this->title ) );
+ Hooks::run( 'ArticleRevisionVisibilitySet', array( $this->title, $this->ids ) );
return Status::newGood();
}
}
diff --git a/includes/revisiondelete/RevisionDeleteUser.php b/includes/revisiondelete/RevisionDeleteUser.php
index 55c46c5e..79802d66 100644
--- a/includes/revisiondelete/RevisionDeleteUser.php
+++ b/includes/revisiondelete/RevisionDeleteUser.php
@@ -36,14 +36,14 @@ class RevisionDeleteUser {
* @param string $name Username
* @param int $userId User id
* @param string $op Operator '|' or '&'
- * @param null|DatabaseBase $dbw If you happen to have one lying around
+ * @param null|IDatabase $dbw If you happen to have one lying around
* @return bool
*/
private static function setUsernameBitfields( $name, $userId, $op, $dbw ) {
if ( !$userId || ( $op !== '|' && $op !== '&' ) ) {
return false; // sanity check
}
- if ( !$dbw instanceof DatabaseBase ) {
+ if ( !$dbw instanceof IDatabase ) {
$dbw = wfGetDB( DB_MASTER );
}
diff --git a/includes/revisiondelete/RevisionDeleter.php b/includes/revisiondelete/RevisionDeleter.php
index d4f81678..ba1f0f69 100644
--- a/includes/revisiondelete/RevisionDeleter.php
+++ b/includes/revisiondelete/RevisionDeleter.php
@@ -78,6 +78,7 @@ class RevisionDeleter {
* @param Title $title
* @param array $ids
* @return RevDelList
+ * @throws MWException
*/
public static function createList( $typeName, IContextSource $context, Title $title, array $ids ) {
$typeName = self::getCanonicalTypeName( $typeName );
@@ -115,7 +116,7 @@ class RevisionDeleter {
* "revdelete-restricted", "revdelete-unrestricted" indicating (un)suppression
* or null to indicate nothing in particular.
* You can turn the keys in $arr[0] and $arr[1] into message keys by
- * appending -hid and and -unhid to the keys respectively.
+ * appending -hid and -unhid to the keys respectively.
*
* @param int $n The new bitfield.
* @param int $o The old bitfield.
diff --git a/includes/search/SearchEngine.php b/includes/search/SearchEngine.php
index 0eb87e4a..5770276a 100644
--- a/includes/search/SearchEngine.php
+++ b/includes/search/SearchEngine.php
@@ -47,6 +47,7 @@ class SearchEngine {
/** @var bool */
protected $showSuggestion = true;
+ private $sort = 'relevance';
/** @var array Feature values */
protected $features = array();
@@ -137,7 +138,7 @@ class SearchEngine {
public static function getNearMatch( $searchterm ) {
$title = self::getNearMatchInternal( $searchterm );
- wfRunHooks( 'SearchGetNearMatchComplete', array( $searchterm, &$title ) );
+ Hooks::run( 'SearchGetNearMatchComplete', array( $searchterm, &$title ) );
return $title;
}
@@ -170,7 +171,7 @@ class SearchEngine {
}
$titleResult = null;
- if ( !wfRunHooks( 'SearchGetNearMatchBefore', array( $allSearchTerms, &$titleResult ) ) ) {
+ if ( !Hooks::run( 'SearchGetNearMatchBefore', array( $allSearchTerms, &$titleResult ) ) ) {
return $titleResult;
}
@@ -197,7 +198,7 @@ class SearchEngine {
return $title;
}
- if ( !wfRunHooks( 'SearchAfterNoDirectMatch', array( $term, &$title ) ) ) {
+ if ( !Hooks::run( 'SearchAfterNoDirectMatch', array( $term, &$title ) ) ) {
return $title;
}
@@ -227,7 +228,7 @@ class SearchEngine {
// Give hooks a chance at better match variants
$title = null;
- if ( !wfRunHooks( 'SearchGetNearMatch', array( $term, &$title ) ) ) {
+ if ( !Hooks::run( 'SearchGetNearMatch', array( $term, &$title ) ) ) {
return $title;
}
}
@@ -310,6 +311,43 @@ class SearchEngine {
}
/**
+ * Get the valid sort directions. All search engines support 'relevance' but others
+ * might support more. The default in all implementations should be 'relevance.'
+ *
+ * @since 1.25
+ * @return array(string) the valid sort directions for setSort
+ */
+ public function getValidSorts() {
+ return array( 'relevance' );
+ }
+
+ /**
+ * Set the sort direction of the search results. Must be one returned by
+ * SearchEngine::getValidSorts()
+ *
+ * @since 1.25
+ * @throws InvalidArgumentException
+ * @param string $sort sort direction for query result
+ */
+ public function setSort( $sort ) {
+ if ( !in_array( $sort, $this->getValidSorts() ) ) {
+ throw new InvalidArgumentException( "Invalid sort: $sort. " .
+ "Must be one of: " . implode( ', ', $this->getValidSorts() ) );
+ }
+ $this->sort = $sort;
+ }
+
+ /**
+ * Get the sort direction of the search results
+ *
+ * @since 1.25
+ * @return string
+ */
+ public function getSort() {
+ return $this->sort;
+ }
+
+ /**
* Parse some common prefixes: all (search everything)
* or namespace names
*
@@ -356,7 +394,7 @@ class SearchEngine {
}
}
- wfRunHooks( 'SearchableNamespaces', array( &$arr ) );
+ Hooks::run( 'SearchableNamespaces', array( &$arr ) );
return $arr;
}
@@ -500,22 +538,12 @@ class SearchEngine {
/**
* Get OpenSearch suggestion template
*
+ * @deprecated since 1.25
* @return string
*/
public static function getOpenSearchTemplate() {
- global $wgOpenSearchTemplate, $wgCanonicalServer;
-
- if ( $wgOpenSearchTemplate ) {
- return $wgOpenSearchTemplate;
- } else {
- $ns = implode( '|', SearchEngine::defaultNamespaces() );
- if ( !$ns ) {
- $ns = "0";
- }
-
- return $wgCanonicalServer . wfScript( 'api' )
- . '?action=opensearch&search={searchTerms}&namespace=' . $ns;
- }
+ wfDeprecated( __METHOD__, '1.25' );
+ return ApiOpenSearch::getOpenSearchTemplate( 'application/x-suggestions+json' );
}
/**
diff --git a/includes/search/SearchHighlighter.php b/includes/search/SearchHighlighter.php
index c3c3a8f8..5087e8d5 100644
--- a/includes/search/SearchHighlighter.php
+++ b/includes/search/SearchHighlighter.php
@@ -45,8 +45,6 @@ class SearchHighlighter {
public function highlightText( $text, $terms, $contextlines, $contextchars ) {
global $wgContLang, $wgSearchHighlightBoundaries;
- $fname = __METHOD__;
-
if ( $text == '' ) {
return '';
}
@@ -60,14 +58,14 @@ class SearchHighlighter {
3 => "/(\n\\{\\|)|(\n\\|\\})/" ); // table
// @todo FIXME: This should prolly be a hook or something
- if ( function_exists( 'wfCite' ) ) {
+ // instead of hardcoding a class name from the Cite extension
+ if ( class_exists( 'Cite' ) ) {
$spat .= '|(<ref>)'; // references via cite extension
$endPatterns[4] = '/(<ref>)|(<\/ref>)/';
}
$spat .= '/';
$textExt = array(); // text extracts
$otherExt = array(); // other extracts
- wfProfileIn( "$fname-split" );
$start = 0;
$textLen = strlen( $text );
$count = 0; // sequence number to maintain ordering
@@ -132,8 +130,6 @@ class SearchHighlighter {
$all = $textExt + $otherExt; // these have disjunct key sets
- wfProfileOut( "$fname-split" );
-
// prepare regexps
foreach ( $terms as $index => $term ) {
// manually do upper/lowercase stuff for utf-8 since PHP won't do it
@@ -163,8 +159,6 @@ class SearchHighlighter {
$pat1 = "/(" . $phrase . ")/ui";
$pat2 = "/$patPre(" . $anyterm . ")$patPost/ui";
- wfProfileIn( "$fname-extract" );
-
$left = $contextlines;
$snippets = array();
@@ -287,8 +281,6 @@ class SearchHighlighter {
}
}
- wfProfileOut( "$fname-extract" );
-
return $extract;
}
@@ -451,15 +443,6 @@ class SearchHighlighter {
* @return mixed
*/
function removeWiki( $text ) {
- $fname = __METHOD__;
- wfProfileIn( $fname );
-
- // $text = preg_replace( "/'{2,5}/", "", $text );
- // $text = preg_replace( "/\[[a-z]+:\/\/[^ ]+ ([^]]+)\]/", "\\2", $text );
- // $text = preg_replace( "/\[\[([^]|]+)\]\]/", "\\1", $text );
- // $text = preg_replace( "/\[\[([^]]+\|)?([^|]]+)\]\]/", "\\2", $text );
- // $text = preg_replace( "/\\{\\|(.*?)\\|\\}/", "", $text );
- // $text = preg_replace( "/\\[\\[[A-Za-z_-]+:([^|]+?)\\]\\]/", "", $text );
$text = preg_replace( "/\\{\\{([^|]+?)\\}\\}/", "", $text );
$text = preg_replace( "/\\{\\{([^|]+\\|)(.*?)\\}\\}/", "\\2", $text );
$text = preg_replace( "/\\[\\[([^|]+?)\\]\\]/", "\\1", $text );
@@ -468,13 +451,11 @@ class SearchHighlighter {
array( $this, 'linkReplace' ),
$text
);
- // $text = preg_replace("/\\[\\[([^|]+\\|)(.*?)\\]\\]/", "\\2", $text);
$text = preg_replace( "/<\/?[^>]+>/", "", $text );
$text = preg_replace( "/'''''/", "", $text );
$text = preg_replace( "/('''|<\/?[iIuUbB]>)/", "", $text );
$text = preg_replace( "/''/", "", $text );
- wfProfileOut( $fname );
return $text;
}
@@ -512,7 +493,6 @@ class SearchHighlighter {
*/
public function highlightSimple( $text, $terms, $contextlines, $contextchars ) {
global $wgContLang;
- $fname = __METHOD__;
$lines = explode( "\n", $text );
@@ -523,7 +503,6 @@ class SearchHighlighter {
$lineno = 0;
$extract = "";
- wfProfileIn( "$fname-extract" );
foreach ( $lines as $line ) {
if ( 0 == $contextlines ) {
break;
@@ -551,7 +530,6 @@ class SearchHighlighter {
$extract .= "${line}\n";
}
- wfProfileOut( "$fname-extract" );
return $extract;
}
diff --git a/includes/search/SearchMySQL.php b/includes/search/SearchMySQL.php
index 78eba2d0..485088cb 100644
--- a/includes/search/SearchMySQL.php
+++ b/includes/search/SearchMySQL.php
@@ -382,8 +382,6 @@ class SearchMySQL extends SearchDatabase {
function normalizeText( $string ) {
global $wgContLang;
- wfProfileIn( __METHOD__ );
-
$out = parent::normalizeText( $string );
// MySQL fulltext index doesn't grok utf-8, so we
@@ -416,8 +414,6 @@ class SearchMySQL extends SearchDatabase {
"$1u82e$2",
$out );
- wfProfileOut( __METHOD__ );
-
return $out;
}
diff --git a/includes/search/SearchPostgres.php b/includes/search/SearchPostgres.php
index 59b0c31c..bda10b0b 100644
--- a/includes/search/SearchPostgres.php
+++ b/includes/search/SearchPostgres.php
@@ -85,7 +85,7 @@ class SearchPostgres extends SearchDatabase {
if ( strtolower( $terms[2] ) === 'and' ) {
$searchstring .= ' & ';
}
- elseif ( strtolower( $terms[2] ) === 'or' or $terms[2] === '|' ) {
+ elseif ( strtolower( $terms[2] ) === 'or' || $terms[2] === '|' ) {
$searchstring .= ' | ';
}
elseif ( strtolower( $terms[2] ) === 'not' ) {
diff --git a/includes/search/SearchResult.php b/includes/search/SearchResult.php
index aeaba8df..d384ae96 100644
--- a/includes/search/SearchResult.php
+++ b/includes/search/SearchResult.php
@@ -71,7 +71,7 @@ class SearchResult {
$this->mTitle = $title;
if ( !is_null( $this->mTitle ) ) {
$id = false;
- wfRunHooks( 'SearchResultInitFromTitle', array( $title, &$id ) );
+ Hooks::run( 'SearchResultInitFromTitle', array( $title, &$id ) );
$this->mRevision = Revision::newFromTitle(
$this->mTitle, $id, Revision::READ_NORMAL );
if ( $this->mTitle->getNamespace() === NS_FILE ) {
@@ -186,6 +186,13 @@ class SearchResult {
}
/**
+ * @return string Highlighted relevant category name or '' if none or not supported
+ */
+ public function getCategorySnippet() {
+ return '';
+ }
+
+ /**
* @return string Timestamp
*/
function getTimestamp() {
diff --git a/includes/site/CachingSiteStore.php b/includes/site/CachingSiteStore.php
new file mode 100644
index 00000000..9243f12b
--- /dev/null
+++ b/includes/site/CachingSiteStore.php
@@ -0,0 +1,195 @@
+<?php
+
+/**
+ * Represents the site configuration of a wiki.
+ * Holds a list of sites (ie SiteList), with a caching layer.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class CachingSiteStore implements SiteStore {
+
+ /**
+ * @var SiteList|null
+ */
+ private $sites = null;
+
+ /**
+ * @var string|null
+ */
+ private $cacheKey;
+
+ /**
+ * @var int
+ */
+ private $cacheTimeout;
+
+ /**
+ * @var BagOStuff
+ */
+ private $cache;
+
+ /**
+ * @var SiteStore
+ */
+ private $siteStore;
+
+ /**
+ * @param SiteStore $siteStore
+ * @param BagOStuff $cache
+ * @param string|null $cacheKey
+ * @param int $cacheTimeout
+ */
+ public function __construct(
+ SiteStore $siteStore,
+ BagOStuff $cache,
+ $cacheKey = null,
+ $cacheTimeout = 3600
+ ) {
+ $this->siteStore = $siteStore;
+ $this->cache = $cache;
+ $this->cacheKey = $cacheKey;
+ $this->cacheTimeout = $cacheTimeout;
+ }
+
+ /**
+ * Constructs a cache key to use for caching the list of sites.
+ *
+ * This includes the concrete class name of the site list as well as a version identifier
+ * for the list's serialization, to avoid problems when unserializing site lists serialized
+ * by an older version, e.g. when reading from a cache.
+ *
+ * The cache key also includes information about where the sites were loaded from, e.g.
+ * the name of a database table.
+ *
+ * @see SiteList::getSerialVersionId
+ *
+ * @return string The cache key.
+ */
+ private function getCacheKey() {
+ if ( $this->cacheKey === null ) {
+ $type = 'SiteList#' . SiteList::getSerialVersionId();
+ $this->cacheKey = wfMemcKey( "sites/$type" );
+ }
+
+ return $this->cacheKey;
+ }
+
+ /**
+ * @see SiteStore::getSites
+ *
+ * @since 1.25
+ *
+ * @return SiteList
+ */
+ public function getSites() {
+ if ( $this->sites === null ) {
+ $this->sites = $this->cache->get( $this->getCacheKey() );
+
+ if ( !is_object( $this->sites ) ) {
+ $this->sites = $this->siteStore->getSites();
+
+ $this->cache->set( $this->getCacheKey(), $this->sites, $this->cacheTimeout );
+ }
+ }
+
+ return $this->sites;
+ }
+
+ /**
+ * @see SiteStore::getSite
+ *
+ * @since 1.25
+ *
+ * @param string $globalId
+ *
+ * @return Site|null
+ */
+ public function getSite( $globalId ) {
+ $sites = $this->getSites();
+
+ return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
+ }
+
+ /**
+ * @see SiteStore::saveSite
+ *
+ * @since 1.25
+ *
+ * @param Site $site
+ *
+ * @return bool Success indicator
+ */
+ public function saveSite( Site $site ) {
+ return $this->saveSites( array( $site ) );
+ }
+
+ /**
+ * @see SiteStore::saveSites
+ *
+ * @since 1.25
+ *
+ * @param Site[] $sites
+ *
+ * @return bool Success indicator
+ */
+ public function saveSites( array $sites ) {
+ if ( empty( $sites ) ) {
+ return true;
+ }
+
+ $success = $this->siteStore->saveSites( $sites );
+
+ // purge cache
+ $this->reset();
+
+ return $success;
+ }
+
+ /**
+ * Purges the internal and external cache of the site list, forcing the list
+ * of sites to be reloaded.
+ *
+ * @since 1.25
+ */
+ public function reset() {
+ // purge cache
+ $this->cache->delete( $this->getCacheKey() );
+ $this->sites = null;
+ }
+
+ /**
+ * Clears the list of sites stored.
+ *
+ * @see SiteStore::clear()
+ *
+ * @return bool Success
+ */
+ public function clear() {
+ $this->reset();
+
+ return $this->siteStore->clear();
+ }
+
+}
diff --git a/includes/site/DBSiteStore.php b/includes/site/DBSiteStore.php
new file mode 100644
index 00000000..f167584e
--- /dev/null
+++ b/includes/site/DBSiteStore.php
@@ -0,0 +1,345 @@
+<?php
+
+/**
+ * Represents the site configuration of a wiki.
+ * Holds a list of sites (ie SiteList), stored in the database.
+ *
+ * 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
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class DBSiteStore implements SiteStore {
+
+ /**
+ * @var SiteList|null
+ */
+ protected $sites = null;
+
+ /**
+ * @var ORMTable
+ */
+ protected $sitesTable;
+
+ /**
+ * @since 1.25
+ *
+ * @param ORMTable|null $sitesTable
+ */
+ public function __construct( ORMTable $sitesTable = null ) {
+ if ( $sitesTable === null ) {
+ $sitesTable = $this->newSitesTable();
+ }
+
+ $this->sitesTable = $sitesTable;
+ }
+
+ /**
+ * @see SiteStore::getSites
+ *
+ * @since 1.25
+ *
+ * @return SiteList
+ */
+ public function getSites() {
+ $this->loadSites();
+
+ return $this->sites;
+ }
+
+ /**
+ * Returns a new Site object constructed from the provided ORMRow.
+ *
+ * @since 1.25
+ *
+ * @param ORMRow $siteRow
+ *
+ * @return Site
+ */
+ protected function siteFromRow( ORMRow $siteRow ) {
+
+ $site = Site::newForType( $siteRow->getField( 'type', Site::TYPE_UNKNOWN ) );
+
+ $site->setGlobalId( $siteRow->getField( 'global_key' ) );
+
+ $site->setInternalId( $siteRow->getField( 'id' ) );
+
+ if ( $siteRow->hasField( 'forward' ) ) {
+ $site->setForward( $siteRow->getField( 'forward' ) );
+ }
+
+ if ( $siteRow->hasField( 'group' ) ) {
+ $site->setGroup( $siteRow->getField( 'group' ) );
+ }
+
+ if ( $siteRow->hasField( 'language' ) ) {
+ $site->setLanguageCode( $siteRow->getField( 'language' ) === ''
+ ? null
+ : $siteRow->getField( 'language' )
+ );
+ }
+
+ if ( $siteRow->hasField( 'source' ) ) {
+ $site->setSource( $siteRow->getField( 'source' ) );
+ }
+
+ if ( $siteRow->hasField( 'data' ) ) {
+ $site->setExtraData( $siteRow->getField( 'data' ) );
+ }
+
+ if ( $siteRow->hasField( 'config' ) ) {
+ $site->setExtraConfig( $siteRow->getField( 'config' ) );
+ }
+
+ return $site;
+ }
+
+ /**
+ * Get a new ORMRow from a Site object
+ *
+ * @since 1.25
+ *
+ * @param Site $site
+ *
+ * @return ORMRow
+ */
+ protected function getRowFromSite( Site $site ) {
+ $fields = array(
+ // Site data
+ 'global_key' => $site->getGlobalId(), // TODO: check not null
+ 'type' => $site->getType(),
+ 'group' => $site->getGroup(),
+ 'source' => $site->getSource(),
+ 'language' => $site->getLanguageCode() === null ? '' : $site->getLanguageCode(),
+ 'protocol' => $site->getProtocol(),
+ 'domain' => strrev( $site->getDomain() ) . '.',
+ 'data' => $site->getExtraData(),
+
+ // Site config
+ 'forward' => $site->shouldForward(),
+ 'config' => $site->getExtraConfig(),
+ );
+
+ if ( $site->getInternalId() !== null ) {
+ $fields['id'] = $site->getInternalId();
+ }
+
+ return new ORMRow( $this->sitesTable, $fields );
+ }
+
+ /**
+ * Fetches the site from the database and loads them into the sites field.
+ *
+ * @since 1.25
+ */
+ protected function loadSites() {
+ $this->sites = new SiteList();
+
+ foreach ( $this->sitesTable->select() as $siteRow ) {
+ $this->sites[] = $this->siteFromRow( $siteRow );
+ }
+
+ // Batch load the local site identifiers.
+ $ids = wfGetDB( $this->sitesTable->getReadDb() )->select(
+ 'site_identifiers',
+ array(
+ 'si_site',
+ 'si_type',
+ 'si_key',
+ ),
+ array(),
+ __METHOD__
+ );
+
+ foreach ( $ids as $id ) {
+ if ( $this->sites->hasInternalId( $id->si_site ) ) {
+ $site = $this->sites->getSiteByInternalId( $id->si_site );
+ $site->addLocalId( $id->si_type, $id->si_key );
+ $this->sites->setSite( $site );
+ }
+ }
+ }
+
+ /**
+ * @see SiteStore::getSite
+ *
+ * @since 1.25
+ *
+ * @param string $globalId
+ *
+ * @return Site|null
+ */
+ public function getSite( $globalId ) {
+ if ( $this->sites === null ) {
+ $this->sites = $this->getSites();
+ }
+
+ return $this->sites->hasSite( $globalId ) ? $this->sites->getSite( $globalId ) : null;
+ }
+
+ /**
+ * @see SiteStore::saveSite
+ *
+ * @since 1.25
+ *
+ * @param Site $site
+ *
+ * @return bool Success indicator
+ */
+ public function saveSite( Site $site ) {
+ return $this->saveSites( array( $site ) );
+ }
+
+ /**
+ * @see SiteStore::saveSites
+ *
+ * @since 1.25
+ *
+ * @param Site[] $sites
+ *
+ * @return bool Success indicator
+ */
+ public function saveSites( array $sites ) {
+ if ( empty( $sites ) ) {
+ return true;
+ }
+
+ $dbw = $this->sitesTable->getWriteDbConnection();
+
+ $dbw->startAtomic( __METHOD__ );
+
+ $success = true;
+
+ $internalIds = array();
+ $localIds = array();
+
+ foreach ( $sites as $site ) {
+ if ( $site->getInternalId() !== null ) {
+ $internalIds[] = $site->getInternalId();
+ }
+
+ $siteRow = $this->getRowFromSite( $site );
+ $success = $siteRow->save( __METHOD__ ) && $success;
+
+ foreach ( $site->getLocalIds() as $idType => $ids ) {
+ foreach ( $ids as $id ) {
+ $localIds[] = array( $siteRow->getId(), $idType, $id );
+ }
+ }
+ }
+
+ if ( $internalIds !== array() ) {
+ $dbw->delete(
+ 'site_identifiers',
+ array( 'si_site' => $internalIds ),
+ __METHOD__
+ );
+ }
+
+ foreach ( $localIds as $localId ) {
+ $dbw->insert(
+ 'site_identifiers',
+ array(
+ 'si_site' => $localId[0],
+ 'si_type' => $localId[1],
+ 'si_key' => $localId[2],
+ ),
+ __METHOD__
+ );
+ }
+
+ $dbw->endAtomic( __METHOD__ );
+
+ $this->reset();
+
+ return $success;
+ }
+
+ /**
+ * Resets the SiteList
+ *
+ * @since 1.25
+ */
+ public function reset() {
+ $this->sites = null;
+ }
+
+ /**
+ * Clears the list of sites stored in the database.
+ *
+ * @see SiteStore::clear()
+ *
+ * @return bool Success
+ */
+ public function clear() {
+ $dbw = $this->sitesTable->getWriteDbConnection();
+
+ $dbw->startAtomic( __METHOD__ );
+ $ok = $dbw->delete( 'sites', '*', __METHOD__ );
+ $ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok;
+ $dbw->endAtomic( __METHOD__ );
+
+ $this->reset();
+
+ return $ok;
+ }
+
+ /**
+ * @since 1.25
+ *
+ * @return ORMTable
+ */
+ protected function newSitesTable() {
+ return new ORMTable(
+ 'sites',
+ array(
+ 'id' => 'id',
+
+ // Site data
+ 'global_key' => 'str',
+ 'type' => 'str',
+ 'group' => 'str',
+ 'source' => 'str',
+ 'language' => 'str',
+ 'protocol' => 'str',
+ 'domain' => 'str',
+ 'data' => 'array',
+
+ // Site config
+ 'forward' => 'bool',
+ 'config' => 'array',
+ ),
+ array(
+ 'type' => Site::TYPE_UNKNOWN,
+ 'group' => Site::GROUP_NONE,
+ 'source' => Site::SOURCE_LOCAL,
+ 'data' => array(),
+
+ 'forward' => false,
+ 'config' => array(),
+ 'language' => '',
+ ),
+ 'ORMRow',
+ 'site_'
+ );
+ }
+
+}
diff --git a/includes/site/FileBasedSiteLookup.php b/includes/site/FileBasedSiteLookup.php
new file mode 100644
index 00000000..96544403
--- /dev/null
+++ b/includes/site/FileBasedSiteLookup.php
@@ -0,0 +1,139 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ *
+ * @license GNU GPL v2+
+ */
+
+/**
+ * Provides a file-based cache of a SiteStore. The sites are stored in
+ * a json file. (see docs/sitescache.txt regarding format)
+ *
+ * The cache can be built with the rebuildSitesCache.php maintenance script,
+ * and a MediaWiki instance can be setup to use this by setting the
+ * 'wgSitesCacheFile' configuration to the cache file location.
+ *
+ * @since 1.25
+ */
+class FileBasedSiteLookup implements SiteLookup {
+
+ /**
+ * @var SiteList
+ */
+ private $sites = null;
+
+ /**
+ * @var string
+ */
+ private $cacheFile;
+
+ /**
+ * @param string $cacheFile
+ */
+ public function __construct( $cacheFile ) {
+ $this->cacheFile = $cacheFile;
+ }
+
+ /**
+ * @since 1.25
+ *
+ * @return SiteList
+ */
+ public function getSites() {
+ if ( $this->sites === null ) {
+ $this->sites = $this->loadSitesFromCache();
+ }
+
+ return $this->sites;
+ }
+
+ /**
+ * @param string $globalId
+ *
+ * @since 1.25
+ *
+ * @return Site|null
+ */
+ public function getSite( $globalId ) {
+ $sites = $this->getSites();
+
+ return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
+ }
+
+ /**
+ * @return SiteList
+ */
+ private function loadSitesFromCache() {
+ $data = $this->loadJsonFile();
+
+ $sites = new SiteList();
+
+ // @todo lazy initialize the site objects in the site list (e.g. only when needed to access)
+ foreach ( $data['sites'] as $siteArray ) {
+ $sites[] = $this->newSiteFromArray( $siteArray );
+ }
+
+ return $sites;
+ }
+
+ /**
+ * @throws MWException
+ * @return array see docs/sitescache.txt for format of the array.
+ */
+ private function loadJsonFile() {
+ if ( !is_readable( $this->cacheFile ) ) {
+ throw new MWException( 'SiteList cache file not found.' );
+ }
+
+ $contents = file_get_contents( $this->cacheFile );
+ $data = json_decode( $contents, true );
+
+ if ( !is_array( $data ) || !is_array( $data['sites'] )
+ || !array_key_exists( 'sites', $data )
+ ) {
+ throw new MWException( 'SiteStore json cache data is invalid.' );
+ }
+
+ return $data;
+ }
+
+ /**
+ * @param array $data
+ *
+ * @return Site
+ */
+ private function newSiteFromArray( array $data ) {
+ $siteType = array_key_exists( 'type', $data ) ? $data['type'] : Site::TYPE_UNKNOWN;
+ $site = Site::newForType( $siteType );
+
+ $site->setGlobalId( $data['globalid'] );
+ $site->setForward( $data['forward'] );
+ $site->setGroup( $data['group'] );
+ $site->setLanguageCode( $data['language'] );
+ $site->setSource( $data['source'] );
+ $site->setExtraData( $data['data'] );
+ $site->setExtraConfig( $data['config'] );
+
+ foreach ( $data['identifiers'] as $identifier ) {
+ $site->addLocalId( $identifier['type'], $identifier['key'] );
+ }
+
+ return $site;
+ }
+
+}
diff --git a/includes/site/HashSiteStore.php b/includes/site/HashSiteStore.php
new file mode 100644
index 00000000..2c254721
--- /dev/null
+++ b/includes/site/HashSiteStore.php
@@ -0,0 +1,123 @@
+<?php
+/**
+ * In-memory implementation of SiteStore.
+ *
+ * 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
+ */
+
+/**
+ * In-memory SiteStore implementation, storing sites in an associative array.
+ *
+ * @author Daniel Kinzler
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ *
+ * @since 1.25
+ * @ingroup Site
+ */
+class HashSiteStore implements SiteStore {
+
+ /**
+ * @var Site[]
+ */
+ private $sites = array();
+
+ /**
+ * @param array $sites
+ */
+ public function __construct( $sites = array() ) {
+ $this->saveSites( $sites );
+ }
+
+ /**
+ * Saves the provided site.
+ *
+ * @since 1.25
+ *
+ * @param Site $site
+ *
+ * @return boolean Success indicator
+ */
+ public function saveSite( Site $site ) {
+ $this->sites[$site->getGlobalId()] = $site;
+
+ return true;
+ }
+
+ /**
+ * Saves the provided sites.
+ *
+ * @since 1.25
+ *
+ * @param Site[] $sites
+ *
+ * @return boolean Success indicator
+ */
+ public function saveSites( array $sites ) {
+ foreach ( $sites as $site ) {
+ $this->saveSite( $site );
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the site with provided global id, or null if there is no such site.
+ *
+ * @since 1.25
+ *
+ * @param string $globalId
+ * @param string $source either 'cache' or 'recache'.
+ * If 'cache', the values can (but not obliged) come from a cache.
+ *
+ * @return Site|null
+ */
+ public function getSite( $globalId, $source = 'cache' ) {
+ if ( isset( $this->sites[$globalId] ) ) {
+ return $this->sites[$globalId];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns a list of all sites. By default this site is
+ * fetched from the cache, which can be changed to loading
+ * the list from the database using the $useCache parameter.
+ *
+ * @since 1.25
+ *
+ * @param string $source either 'cache' or 'recache'.
+ * If 'cache', the values can (but not obliged) come from a cache.
+ *
+ * @return SiteList
+ */
+ public function getSites( $source = 'cache' ) {
+ return new SiteList( $this->sites );
+ }
+
+ /**
+ * Deletes all sites from the database. After calling clear(), getSites() will return an empty
+ * list and getSite() will return null until saveSite() or saveSites() is called.
+ */
+ public function clear() {
+ $this->sites = array();
+
+ return true;
+ }
+
+}
diff --git a/includes/site/MediaWikiSite.php b/includes/site/MediaWikiSite.php
index 9711f042..95631f8e 100644
--- a/includes/site/MediaWikiSite.php
+++ b/includes/site/MediaWikiSite.php
@@ -116,7 +116,7 @@ class MediaWikiSite extends Site {
// Make sure the string is normalized into NFC (due to the bug 40017)
// but do nothing to the whitespaces, that should work appropriately.
// @see https://bugzilla.wikimedia.org/show_bug.cgi?id=40017
- $pageName = UtfNormal::cleanUp( $pageName );
+ $pageName = UtfNormal\Validator::cleanUp( $pageName );
// Build the args for the specific call
$args = array(
@@ -137,7 +137,7 @@ class MediaWikiSite extends Site {
// Go on call the external site
// @todo we need a good way to specify a timeout here.
- $ret = Http::get( $url );
+ $ret = Http::get( $url, array(), __METHOD__ );
}
if ( $ret === false ) {
diff --git a/includes/site/SiteExporter.php b/includes/site/SiteExporter.php
new file mode 100644
index 00000000..62f6ca3c
--- /dev/null
+++ b/includes/site/SiteExporter.php
@@ -0,0 +1,114 @@
+<?php
+
+/**
+ * Utility for exporting site entries to XML.
+ * For the output file format, see docs/sitelist.txt and docs/sitelist-1.0.xsd.
+ *
+ * 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
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+class SiteExporter {
+
+ /**
+ * @var resource
+ */
+ private $sink;
+
+ /**
+ * @param resource $sink A file handle open for writing
+ */
+ public function __construct( $sink ) {
+ if ( !is_resource( $sink ) || get_resource_type( $sink ) !== 'stream' ) {
+ throw new InvalidArgumentException( '$sink must be a file handle' );
+ }
+
+ $this->sink = $sink;
+ }
+
+ /**
+ * Writes a <site> tag for each Site object in $sites, and encloses the entire list
+ * between <sites> tags.
+ *
+ * @param Site[]|SiteList $sites
+ */
+ public function exportSites( $sites ) {
+ $attributes = array(
+ 'version' => '1.0',
+ 'xmlns' => 'http://www.mediawiki.org/xml/sitelist-1.0/',
+ );
+
+ fwrite( $this->sink, XML::openElement( 'sites', $attributes ) . "\n" );
+
+ foreach ( $sites as $site ) {
+ $this->exportSite( $site );
+ }
+
+ fwrite( $this->sink, XML::closeElement( 'sites' ) . "\n" );
+ fflush( $this->sink );
+ }
+
+ /**
+ * Writes a <site> tag representing the given Site object.
+ *
+ * @param Site $site
+ */
+ private function exportSite( Site $site ) {
+ if ( $site->getType() !== Site::TYPE_UNKNOWN ) {
+ $siteAttr = array( 'type' => $site->getType() );
+ } else {
+ $siteAttr = null;
+ }
+
+ fwrite( $this->sink, "\t" . XML::openElement( 'site', $siteAttr ) . "\n" );
+
+ fwrite( $this->sink, "\t\t" . XML::element( 'globalid', null, $site->getGlobalId() ) . "\n" );
+
+ if ( $site->getGroup() !== Site::GROUP_NONE ) {
+ fwrite( $this->sink, "\t\t" . XML::element( 'group', null, $site->getGroup() ) . "\n" );
+ }
+
+ if ( $site->getSource() !== Site::SOURCE_LOCAL ) {
+ fwrite( $this->sink, "\t\t" . XML::element( 'source', null, $site->getSource() ) . "\n" );
+ }
+
+ if ( $site->shouldForward() ) {
+ fwrite( $this->sink, "\t\t" . XML::element( 'forward', null, '' ) . "\n" );
+ }
+
+ foreach ( $site->getAllPaths() as $type => $path ) {
+ fwrite( $this->sink, "\t\t" . XML::element( 'path', array( 'type' => $type ), $path ) . "\n" );
+ }
+
+ foreach ( $site->getLocalIds() as $type => $ids ) {
+ foreach ( $ids as $id ) {
+ fwrite( $this->sink, "\t\t" . XML::element( 'localid', array( 'type' => $type ), $id ) . "\n" );
+ }
+ }
+
+ //@todo: export <data>
+ //@todo: export <config>
+
+ fwrite( $this->sink, "\t" . XML::closeElement( 'site' ) . "\n" );
+ }
+
+}
diff --git a/includes/site/SiteImporter.php b/includes/site/SiteImporter.php
new file mode 100644
index 00000000..a05bad5d
--- /dev/null
+++ b/includes/site/SiteImporter.php
@@ -0,0 +1,263 @@
+<?php
+
+/**
+ * Utility for importing site entries from XML.
+ * For the expected format of the input, see docs/sitelist.txt and docs/sitelist-1.0.xsd.
+ *
+ * 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
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+class SiteImporter {
+
+ /**
+ * @var SiteStore
+ */
+ private $store;
+
+ /**
+ * @var callable|null
+ */
+ private $exceptionCallback;
+
+ /**
+ * @param SiteStore $store
+ */
+ public function __construct( SiteStore $store ) {
+ $this->store = $store;
+ }
+
+ /**
+ * @return callable
+ */
+ public function getExceptionCallback() {
+ return $this->exceptionCallback;
+ }
+
+ /**
+ * @param callable $exceptionCallback
+ */
+ public function setExceptionCallback( $exceptionCallback ) {
+ $this->exceptionCallback = $exceptionCallback;
+ }
+
+ /**
+ * @param string $file
+ */
+ public function importFromFile( $file ) {
+ $xml = file_get_contents( $file );
+
+ if ( $xml === false ) {
+ throw new RuntimeException( 'Failed to read ' . $file . '!' );
+ }
+
+ $this->importFromXML( $xml );
+ }
+
+ /**
+ * @param string $xml
+ *
+ * @throws InvalidArgumentException
+ */
+ public function importFromXML( $xml ) {
+ $document = new DOMDocument();
+
+ $oldLibXmlErrors = libxml_use_internal_errors( true );
+ $ok = $document->loadXML( $xml, LIBXML_NONET );
+
+ if ( !$ok ) {
+ $errors = libxml_get_errors();
+ libxml_use_internal_errors( $oldLibXmlErrors );
+
+ foreach ( $errors as $error ) {
+ /** @var LibXMLError $error */
+ throw new InvalidArgumentException(
+ 'Malformed XML: ' . $error->message . ' in line ' . $error->line
+ );
+ }
+
+ throw new InvalidArgumentException( 'Malformed XML!' );
+ }
+
+ libxml_use_internal_errors( $oldLibXmlErrors );
+ $this->importFromDOM( $document->documentElement );
+ }
+
+ /**
+ * @param DOMElement $root
+ */
+ private function importFromDOM( DOMElement $root ) {
+ $sites = $this->makeSiteList( $root );
+ $this->store->saveSites( $sites );
+ }
+
+ /**
+ * @param DOMElement $root
+ *
+ * @return Site[]
+ */
+ private function makeSiteList( DOMElement $root ) {
+ $sites = array();
+
+ // Old sites, to get the row IDs that correspond to the global site IDs.
+ // TODO: Get rid of internal row IDs, they just get in the way. Get rid of ORMRow, too.
+ $oldSites = $this->store->getSites();
+
+ $current = $root->firstChild;
+ while ( $current ) {
+ if ( $current instanceof DOMElement && $current->tagName === 'site' ) {
+ try {
+ $site = $this->makeSite( $current );
+ $key = $site->getGlobalId();
+
+ if ( $oldSites->hasSite( $key ) ) {
+ $oldSite = $oldSites->getSite( $key );
+ $site->setInternalId( $oldSite->getInternalId() );
+ }
+
+ $sites[$key] = $site;
+ } catch ( Exception $ex ) {
+ $this->handleException( $ex );
+ }
+ }
+
+ $current = $current->nextSibling;
+ }
+
+ return $sites;
+ }
+
+ /**
+ * @param DOMElement $siteElement
+ *
+ * @return Site
+ * @throws InvalidArgumentException
+ */
+ public function makeSite( DOMElement $siteElement ) {
+ if ( $siteElement->tagName !== 'site' ) {
+ throw new InvalidArgumentException( 'Expected <site> tag, found ' . $siteElement->tagName );
+ }
+
+ $type = $this->getAttributeValue( $siteElement, 'type', Site::TYPE_UNKNOWN );
+ $site = Site::newForType( $type );
+
+ $site->setForward( $this->hasChild( $siteElement, 'forward' ) );
+ $site->setGlobalId( $this->getChildText( $siteElement, 'globalid' ) );
+ $site->setGroup( $this->getChildText( $siteElement, 'group', Site::GROUP_NONE ) );
+ $site->setSource( $this->getChildText( $siteElement, 'source', Site::SOURCE_LOCAL ) );
+
+ $pathTags = $siteElement->getElementsByTagName( 'path' );
+ for ( $i = 0; $i < $pathTags->length; $i++ ) {
+ $pathElement = $pathTags->item( $i );
+ $pathType = $this->getAttributeValue( $pathElement, 'type' );
+ $path = $pathElement->textContent;
+
+ $site->setPath( $pathType, $path );
+ }
+
+ $idTags = $siteElement->getElementsByTagName( 'localid' );
+ for ( $i = 0; $i < $idTags->length; $i++ ) {
+ $idElement = $idTags->item( $i );
+ $idType = $this->getAttributeValue( $idElement, 'type' );
+ $id = $idElement->textContent;
+
+ $site->addLocalId( $idType, $id );
+ }
+
+ //@todo: import <data>
+ //@todo: import <config>
+
+ return $site;
+ }
+
+ /**
+ * @param DOMElement $element
+ * @param $name
+ * @param string|null|bool $default
+ *
+ * @return null|string
+ * @throws MWException If the attribute is not found and no default is provided
+ */
+ private function getAttributeValue( DOMElement $element, $name, $default = false ) {
+ $node = $element->getAttributeNode( $name );
+
+ if ( !$node ) {
+ if ( $default !== false ) {
+ return $default;
+ } else {
+ throw new MWException(
+ 'Required ' . $name . ' attribute not found in <' . $element->tagName . '> tag'
+ );
+ }
+ }
+
+ return $node->textContent;
+ }
+
+ /**
+ * @param DOMElement $element
+ * @param string $name
+ * @param string|null|bool $default
+ *
+ * @return null|string
+ * @throws MWException If the child element is not found and no default is provided
+ */
+ private function getChildText( DOMElement $element, $name, $default = false ) {
+ $elements = $element->getElementsByTagName( $name );
+
+ if ( $elements->length < 1 ) {
+ if ( $default !== false ) {
+ return $default;
+ } else {
+ throw new MWException(
+ 'Required <' . $name . '> tag not found inside <' . $element->tagName . '> tag'
+ );
+ }
+ }
+
+ $node = $elements->item( 0 );
+ return $node->textContent;
+ }
+
+ /**
+ * @param DOMElement $element
+ * @param string $name
+ *
+ * @return bool
+ * @throws MWException
+ */
+ private function hasChild( DOMElement $element, $name ) {
+ return $this->getChildText( $element, $name, null ) !== null;
+ }
+
+ /**
+ * @param Exception $ex
+ */
+ private function handleException( Exception $ex ) {
+ if ( $this->exceptionCallback ) {
+ call_user_func( $this->exceptionCallback, $ex );
+ } else {
+ wfLogWarning( $ex->getMessage() );
+ }
+ }
+
+}
diff --git a/includes/site/SiteLookup.php b/includes/site/SiteLookup.php
new file mode 100644
index 00000000..610bf0b7
--- /dev/null
+++ b/includes/site/SiteLookup.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Interface for service objects providing a lookup of Site objects.
+ *
+ * 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
+ *
+ * @since 1.25
+ *
+ * @file
+ * @ingroup Site
+ *
+ * @license GNU GPL v2+
+ */
+interface SiteLookup {
+
+ /**
+ * Returns the site with provided global id, or null if there is no such site.
+ *
+ * @since 1.25
+ *
+ * @param string $globalId
+ *
+ * @return Site|null
+ */
+ public function getSite( $globalId );
+
+ /**
+ * Returns a list of all sites.
+ *
+ * @since 1.25
+ *
+ * @return SiteList
+ */
+ public function getSites();
+
+}
diff --git a/includes/site/SiteSQLStore.php b/includes/site/SiteSQLStore.php
index d1334680..d77f07be 100644
--- a/includes/site/SiteSQLStore.php
+++ b/includes/site/SiteSQLStore.php
@@ -28,468 +28,25 @@
* @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
-class SiteSQLStore implements SiteStore {
- /**
- * @since 1.21
- *
- * @var SiteList|null
- */
- protected $sites = null;
-
- /**
- * @var ORMTable
- */
- protected $sitesTable;
-
- /**
- * @var string|null
- */
- private $cacheKey = null;
-
- /**
- * @var int
- */
- private $cacheTimeout = 3600;
+class SiteSQLStore extends CachingSiteStore {
/**
* @since 1.21
+ * @deprecated 1.25 Construct a SiteStore instance directly instead.
*
* @param ORMTable|null $sitesTable
+ * @param BagOStuff|null $cache
*
* @return SiteStore
*/
- public static function newInstance( ORMTable $sitesTable = null ) {
- return new static( $sitesTable );
- }
-
- /**
- * Constructor.
- *
- * @since 1.21
- *
- * @param ORMTable|null $sitesTable
- */
- protected function __construct( ORMTable $sitesTable = null ) {
- if ( $sitesTable === null ) {
- $sitesTable = $this->newSitesTable();
- }
-
- $this->sitesTable = $sitesTable;
- }
-
- /**
- * Constructs a cache key to use for caching the list of sites.
- *
- * This includes the concrete class name of the site list as well as a version identifier
- * for the list's serialization, to avoid problems when unserializing site lists serialized
- * by an older version, e.g. when reading from a cache.
- *
- * The cache key also includes information about where the sites were loaded from, e.g.
- * the name of a database table.
- *
- * @see SiteList::getSerialVersionId
- *
- * @return string The cache key.
- */
- protected function getCacheKey() {
- wfProfileIn( __METHOD__ );
-
- if ( $this->cacheKey === null ) {
- $type = 'SiteList#' . SiteList::getSerialVersionId();
- $source = $this->sitesTable->getName();
-
- if ( $this->sitesTable->getTargetWiki() !== false ) {
- $source = $this->sitesTable->getTargetWiki() . '.' . $source;
- }
-
- $this->cacheKey = wfMemcKey( "$source/$type" );
- }
-
- wfProfileOut( __METHOD__ );
- return $this->cacheKey;
- }
-
- /**
- * @see SiteStore::getSites
- *
- * @since 1.21
- *
- * @param string $source Either 'cache' or 'recache'
- *
- * @return SiteList
- */
- public function getSites( $source = 'cache' ) {
- wfProfileIn( __METHOD__ );
-
- if ( $source === 'cache' ) {
- if ( $this->sites === null ) {
- $cache = wfGetMainCache();
- $sites = $cache->get( $this->getCacheKey() );
-
- if ( is_object( $sites ) ) {
- $this->sites = $sites;
- } else {
- $this->loadSites();
- }
- }
- }
- else {
- $this->loadSites();
- }
-
- wfProfileOut( __METHOD__ );
- return $this->sites;
- }
-
- /**
- * Returns a new Site object constructed from the provided ORMRow.
- *
- * @since 1.21
- *
- * @param ORMRow $siteRow
- *
- * @return Site
- */
- protected function siteFromRow( ORMRow $siteRow ) {
- wfProfileIn( __METHOD__ );
-
- $site = Site::newForType( $siteRow->getField( 'type', Site::TYPE_UNKNOWN ) );
-
- $site->setGlobalId( $siteRow->getField( 'global_key' ) );
-
- $site->setInternalId( $siteRow->getField( 'id' ) );
-
- if ( $siteRow->hasField( 'forward' ) ) {
- $site->setForward( $siteRow->getField( 'forward' ) );
- }
-
- if ( $siteRow->hasField( 'group' ) ) {
- $site->setGroup( $siteRow->getField( 'group' ) );
- }
-
- if ( $siteRow->hasField( 'language' ) ) {
- $site->setLanguageCode( $siteRow->getField( 'language' ) === ''
- ? null
- : $siteRow->getField( 'language' )
- );
- }
-
- if ( $siteRow->hasField( 'source' ) ) {
- $site->setSource( $siteRow->getField( 'source' ) );
- }
-
- if ( $siteRow->hasField( 'data' ) ) {
- $site->setExtraData( $siteRow->getField( 'data' ) );
- }
-
- if ( $siteRow->hasField( 'config' ) ) {
- $site->setExtraConfig( $siteRow->getField( 'config' ) );
- }
-
- wfProfileOut( __METHOD__ );
- return $site;
- }
-
- /**
- * Get a new ORMRow from a Site object
- *
- * @since 1.22
- *
- * @param Site $site
- *
- * @return ORMRow
- */
- protected function getRowFromSite( Site $site ) {
- $fields = array(
- // Site data
- 'global_key' => $site->getGlobalId(), // TODO: check not null
- 'type' => $site->getType(),
- 'group' => $site->getGroup(),
- 'source' => $site->getSource(),
- 'language' => $site->getLanguageCode() === null ? '' : $site->getLanguageCode(),
- 'protocol' => $site->getProtocol(),
- 'domain' => strrev( $site->getDomain() ) . '.',
- 'data' => $site->getExtraData(),
-
- // Site config
- 'forward' => $site->shouldForward(),
- 'config' => $site->getExtraConfig(),
- );
-
- if ( $site->getInternalId() !== null ) {
- $fields['id'] = $site->getInternalId();
- }
-
- return new ORMRow( $this->sitesTable, $fields );
- }
-
- /**
- * Fetches the site from the database and loads them into the sites field.
- *
- * @since 1.21
- */
- protected function loadSites() {
- wfProfileIn( __METHOD__ );
-
- $this->sites = new SiteList();
-
- foreach ( $this->sitesTable->select() as $siteRow ) {
- $this->sites[] = $this->siteFromRow( $siteRow );
- }
-
- // Batch load the local site identifiers.
- $ids = wfGetDB( $this->sitesTable->getReadDb() )->select(
- 'site_identifiers',
- array(
- 'si_site',
- 'si_type',
- 'si_key',
- ),
- array(),
- __METHOD__
- );
-
- foreach ( $ids as $id ) {
- if ( $this->sites->hasInternalId( $id->si_site ) ) {
- $site = $this->sites->getSiteByInternalId( $id->si_site );
- $site->addLocalId( $id->si_type, $id->si_key );
- $this->sites->setSite( $site );
- }
- }
-
- $cache = wfGetMainCache();
- $cache->set( $this->getCacheKey(), $this->sites, $this->cacheTimeout );
-
- wfProfileOut( __METHOD__ );
- }
-
- /**
- * @see SiteStore::getSite
- *
- * @since 1.21
- *
- * @param string $globalId
- * @param string $source
- *
- * @return Site|null
- */
- public function getSite( $globalId, $source = 'cache' ) {
- wfProfileIn( __METHOD__ );
-
- $sites = $this->getSites( $source );
-
- wfProfileOut( __METHOD__ );
- return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
- }
-
- /**
- * @see SiteStore::saveSite
- *
- * @since 1.21
- *
- * @param Site $site
- *
- * @return bool Success indicator
- */
- public function saveSite( Site $site ) {
- return $this->saveSites( array( $site ) );
- }
-
- /**
- * @see SiteStore::saveSites
- *
- * @since 1.21
- *
- * @param Site[] $sites
- *
- * @return bool Success indicator
- */
- public function saveSites( array $sites ) {
- wfProfileIn( __METHOD__ );
-
- if ( empty( $sites ) ) {
- wfProfileOut( __METHOD__ );
- return true;
- }
-
- $dbw = $this->sitesTable->getWriteDbConnection();
-
- $dbw->startAtomic( __METHOD__ );
-
- $success = true;
-
- $internalIds = array();
- $localIds = array();
-
- foreach ( $sites as $site ) {
- if ( $site->getInternalId() !== null ) {
- $internalIds[] = $site->getInternalId();
- }
-
- $siteRow = $this->getRowFromSite( $site );
- $success = $siteRow->save( __METHOD__ ) && $success;
-
- foreach ( $site->getLocalIds() as $idType => $ids ) {
- foreach ( $ids as $id ) {
- $localIds[] = array( $siteRow->getId(), $idType, $id );
- }
- }
- }
-
- if ( $internalIds !== array() ) {
- $dbw->delete(
- 'site_identifiers',
- array( 'si_site' => $internalIds ),
- __METHOD__
- );
- }
-
- foreach ( $localIds as $localId ) {
- $dbw->insert(
- 'site_identifiers',
- array(
- 'si_site' => $localId[0],
- 'si_type' => $localId[1],
- 'si_key' => $localId[2],
- ),
- __METHOD__
- );
+ public static function newInstance( ORMTable $sitesTable = null, BagOStuff $cache = null ) {
+ if ( $cache === null ) {
+ $cache = wfGetMainCache();
}
- $dbw->endAtomic( __METHOD__ );
+ $siteStore = new DBSiteStore();
- // purge cache
- $this->reset();
-
- wfProfileOut( __METHOD__ );
- return $success;
+ return new static( $siteStore, $cache );
}
- /**
- * Purges the internal and external cache of the site list, forcing the list
- * of sites to be re-read from the database.
- *
- * @since 1.21
- */
- public function reset() {
- wfProfileIn( __METHOD__ );
- // purge cache
- $cache = wfGetMainCache();
- $cache->delete( $this->getCacheKey() );
- $this->sites = null;
-
- wfProfileOut( __METHOD__ );
- }
-
- /**
- * Clears the list of sites stored in the database.
- *
- * @see SiteStore::clear()
- *
- * @return bool Success
- */
- public function clear() {
- wfProfileIn( __METHOD__ );
- $dbw = $this->sitesTable->getWriteDbConnection();
-
- $dbw->startAtomic( __METHOD__ );
- $ok = $dbw->delete( 'sites', '*', __METHOD__ );
- $ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok;
- $dbw->endAtomic( __METHOD__);
-
- $this->reset();
-
- wfProfileOut( __METHOD__ );
- return $ok;
- }
-
- /**
- * @since 1.21
- *
- * @return ORMTable
- */
- protected function newSitesTable() {
- return new ORMTable(
- 'sites',
- array(
- 'id' => 'id',
-
- // Site data
- 'global_key' => 'str',
- 'type' => 'str',
- 'group' => 'str',
- 'source' => 'str',
- 'language' => 'str',
- 'protocol' => 'str',
- 'domain' => 'str',
- 'data' => 'array',
-
- // Site config
- 'forward' => 'bool',
- 'config' => 'array',
- ),
- array(
- 'type' => Site::TYPE_UNKNOWN,
- 'group' => Site::GROUP_NONE,
- 'source' => Site::SOURCE_LOCAL,
- 'data' => array(),
-
- 'forward' => false,
- 'config' => array(),
- 'language' => '',
- ),
- 'ORMRow',
- 'site_'
- );
- }
-
-}
-
-/**
- * @deprecated since 1.21
- */
-class Sites extends SiteSQLStore {
-
- /**
- * Factory for creating new site objects.
- *
- * @since 1.21
- * @deprecated since 1.21
- *
- * @param string|bool $globalId
- *
- * @return Site
- */
- public static function newSite( $globalId = false ) {
- $site = new Site();
-
- if ( $globalId !== false ) {
- $site->setGlobalId( $globalId );
- }
-
- return $site;
- }
-
- /**
- * @deprecated since 1.21
- * @return SiteStore
- */
- public static function singleton() {
- static $singleton;
-
- if ( $singleton === null ) {
- $singleton = new static();
- }
-
- return $singleton;
- }
-
- /**
- * @deprecated since 1.21
- * @param string $group
- * @return SiteList
- */
- public function getSiteGroup( $group ) {
- return $this->getSites()->getGroup( $group );
- }
}
diff --git a/includes/site/SiteStore.php b/includes/site/SiteStore.php
index 537f1ccb..10e0c1b9 100644
--- a/includes/site/SiteStore.php
+++ b/includes/site/SiteStore.php
@@ -26,7 +26,7 @@
* @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
-interface SiteStore {
+interface SiteStore extends SiteLookup {
/**
* Saves the provided site.
@@ -51,33 +51,6 @@ interface SiteStore {
public function saveSites( array $sites );
/**
- * Returns the site with provided global id, or null if there is no such site.
- *
- * @since 1.21
- *
- * @param string $globalId
- * @param string $source Either 'cache' or 'recache'.
- * If 'cache', the values are allowed (but not obliged) to come from a cache.
- *
- * @return Site|null
- */
- public function getSite( $globalId, $source = 'cache' );
-
- /**
- * Returns a list of all sites. By default this site is
- * fetched from the cache, which can be changed to loading
- * the list from the database using the $useCache parameter.
- *
- * @since 1.21
- *
- * @param string $source Either 'cache' or 'recache'.
- * If 'cache', the values are allowed (but not obliged) to come from a cache.
- *
- * @return SiteList
- */
- public function getSites( $source = 'cache' );
-
- /**
* Deletes all sites from the database. After calling clear(), getSites() will return an empty
* list and getSite() will return null until saveSite() or saveSites() is called.
*/
diff --git a/includes/site/SitesCacheFileBuilder.php b/includes/site/SitesCacheFileBuilder.php
new file mode 100644
index 00000000..2e420409
--- /dev/null
+++ b/includes/site/SitesCacheFileBuilder.php
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.25
+ *
+ * @file
+ *
+ * @license GNU GPL v2+
+ */
+class SitesCacheFileBuilder {
+
+ /**
+ * @var SiteLookup
+ */
+ private $siteLookup;
+
+ /**
+ * @var string
+ */
+ private $cacheFile;
+
+ /**
+ * @param SiteLookup $siteLookup
+ * @param string $cacheFile
+ */
+ public function __construct( SiteLookup $siteLookup, $cacheFile ) {
+ $this->siteLookup = $siteLookup;
+ $this->cacheFile = $cacheFile;
+ }
+
+ public function build() {
+ $this->sites = $this->siteLookup->getSites();
+ $this->cacheSites( $this->sites->getArrayCopy() );
+ }
+
+ /**
+ * @param Site[] $sites
+ *
+ * @throws MWException if in manualRecache mode
+ * @return bool
+ */
+ private function cacheSites( array $sites ) {
+ $sitesArray = array();
+
+ foreach ( $sites as $site ) {
+ $globalId = $site->getGlobalId();
+ $sitesArray[$globalId] = $this->getSiteAsArray( $site );
+ }
+
+ $json = json_encode( array(
+ 'sites' => $sitesArray
+ ) );
+
+ $result = file_put_contents( $this->cacheFile, $json );
+
+ return $result !== false;
+ }
+
+ /**
+ * @param Site $site
+ *
+ * @return array
+ */
+ private function getSiteAsArray( Site $site ) {
+ $siteEntry = unserialize( $site->serialize() );
+ $siteIdentifiers = $this->buildLocalIdentifiers( $site );
+ $identifiersArray = array();
+
+ foreach ( $siteIdentifiers as $identifier ) {
+ $identifiersArray[] = $identifier;
+ }
+
+ $siteEntry['identifiers'] = $identifiersArray;
+
+ return $siteEntry;
+ }
+
+ /**
+ * @param Site $site
+ *
+ * @return array Site local identifiers
+ */
+ private function buildLocalIdentifiers( Site $site ) {
+ $localIds = array();
+
+ foreach ( $site->getLocalIds() as $idType => $ids ) {
+ foreach ( $ids as $id ) {
+ $localIds[] = array(
+ 'type' => $idType,
+ 'key' => $id
+ );
+ }
+ }
+
+ return $localIds;
+ }
+
+}
diff --git a/includes/skins/BaseTemplate.php b/includes/skins/BaseTemplate.php
new file mode 100644
index 00000000..25df0f93
--- /dev/null
+++ b/includes/skins/BaseTemplate.php
@@ -0,0 +1,644 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * New base template for a skin's template extended from QuickTemplate
+ * this class features helper methods that provide common ways of interacting
+ * with the data stored in the QuickTemplate
+ */
+abstract class BaseTemplate extends QuickTemplate {
+
+ /**
+ * Get a Message object with its context set
+ *
+ * @param string $name Message name
+ * @return Message
+ */
+ public function getMsg( $name ) {
+ return $this->getSkin()->msg( $name );
+ }
+
+ function msg( $str ) {
+ echo $this->getMsg( $str )->escaped();
+ }
+
+ function msgHtml( $str ) {
+ echo $this->getMsg( $str )->text();
+ }
+
+ function msgWiki( $str ) {
+ echo $this->getMsg( $str )->parseAsBlock();
+ }
+
+ /**
+ * Create an array of common toolbox items from the data in the quicktemplate
+ * stored by SkinTemplate.
+ * The resulting array is built according to a format intended to be passed
+ * through makeListItem to generate the html.
+ * @return array
+ */
+ function getToolbox() {
+
+ $toolbox = array();
+ if ( isset( $this->data['nav_urls']['whatlinkshere'] )
+ && $this->data['nav_urls']['whatlinkshere']
+ ) {
+ $toolbox['whatlinkshere'] = $this->data['nav_urls']['whatlinkshere'];
+ $toolbox['whatlinkshere']['id'] = 't-whatlinkshere';
+ }
+ if ( isset( $this->data['nav_urls']['recentchangeslinked'] )
+ && $this->data['nav_urls']['recentchangeslinked']
+ ) {
+ $toolbox['recentchangeslinked'] = $this->data['nav_urls']['recentchangeslinked'];
+ $toolbox['recentchangeslinked']['msg'] = 'recentchangeslinked-toolbox';
+ $toolbox['recentchangeslinked']['id'] = 't-recentchangeslinked';
+ }
+ if ( isset( $this->data['feeds'] ) && $this->data['feeds'] ) {
+ $toolbox['feeds']['id'] = 'feedlinks';
+ $toolbox['feeds']['links'] = array();
+ foreach ( $this->data['feeds'] as $key => $feed ) {
+ $toolbox['feeds']['links'][$key] = $feed;
+ $toolbox['feeds']['links'][$key]['id'] = "feed-$key";
+ $toolbox['feeds']['links'][$key]['rel'] = 'alternate';
+ $toolbox['feeds']['links'][$key]['type'] = "application/{$key}+xml";
+ $toolbox['feeds']['links'][$key]['class'] = 'feedlink';
+ }
+ }
+ foreach ( array( 'contributions', 'log', 'blockip', 'emailuser',
+ 'userrights', 'upload', 'specialpages' ) as $special
+ ) {
+ if ( isset( $this->data['nav_urls'][$special] ) && $this->data['nav_urls'][$special] ) {
+ $toolbox[$special] = $this->data['nav_urls'][$special];
+ $toolbox[$special]['id'] = "t-$special";
+ }
+ }
+ if ( isset( $this->data['nav_urls']['print'] ) && $this->data['nav_urls']['print'] ) {
+ $toolbox['print'] = $this->data['nav_urls']['print'];
+ $toolbox['print']['id'] = 't-print';
+ $toolbox['print']['rel'] = 'alternate';
+ $toolbox['print']['msg'] = 'printableversion';
+ }
+ if ( isset( $this->data['nav_urls']['permalink'] ) && $this->data['nav_urls']['permalink'] ) {
+ $toolbox['permalink'] = $this->data['nav_urls']['permalink'];
+ if ( $toolbox['permalink']['href'] === '' ) {
+ unset( $toolbox['permalink']['href'] );
+ $toolbox['ispermalink']['tooltiponly'] = true;
+ $toolbox['ispermalink']['id'] = 't-ispermalink';
+ $toolbox['ispermalink']['msg'] = 'permalink';
+ } else {
+ $toolbox['permalink']['id'] = 't-permalink';
+ }
+ }
+ if ( isset( $this->data['nav_urls']['info'] ) && $this->data['nav_urls']['info'] ) {
+ $toolbox['info'] = $this->data['nav_urls']['info'];
+ $toolbox['info']['id'] = 't-info';
+ }
+
+ Hooks::run( 'BaseTemplateToolbox', array( &$this, &$toolbox ) );
+ return $toolbox;
+ }
+
+ /**
+ * Create an array of personal tools items from the data in the quicktemplate
+ * stored by SkinTemplate.
+ * The resulting array is built according to a format intended to be passed
+ * through makeListItem to generate the html.
+ * This is in reality the same list as already stored in personal_urls
+ * however it is reformatted so that you can just pass the individual items
+ * to makeListItem instead of hardcoding the element creation boilerplate.
+ * @return array
+ */
+ function getPersonalTools() {
+ $personal_tools = array();
+ foreach ( $this->get( 'personal_urls' ) as $key => $plink ) {
+ # The class on a personal_urls item is meant to go on the <a> instead
+ # of the <li> so we have to use a single item "links" array instead
+ # of using most of the personal_url's keys directly.
+ $ptool = array(
+ 'links' => array(
+ array( 'single-id' => "pt-$key" ),
+ ),
+ 'id' => "pt-$key",
+ );
+ if ( isset( $plink['active'] ) ) {
+ $ptool['active'] = $plink['active'];
+ }
+ foreach ( array( 'href', 'class', 'text', 'dir' ) as $k ) {
+ if ( isset( $plink[$k] ) ) {
+ $ptool['links'][0][$k] = $plink[$k];
+ }
+ }
+ $personal_tools[$key] = $ptool;
+ }
+ return $personal_tools;
+ }
+
+ function getSidebar( $options = array() ) {
+ // Force the rendering of the following portals
+ $sidebar = $this->data['sidebar'];
+ if ( !isset( $sidebar['SEARCH'] ) ) {
+ $sidebar['SEARCH'] = true;
+ }
+ if ( !isset( $sidebar['TOOLBOX'] ) ) {
+ $sidebar['TOOLBOX'] = true;
+ }
+ if ( !isset( $sidebar['LANGUAGES'] ) ) {
+ $sidebar['LANGUAGES'] = true;
+ }
+
+ if ( !isset( $options['search'] ) || $options['search'] !== true ) {
+ unset( $sidebar['SEARCH'] );
+ }
+ if ( isset( $options['toolbox'] ) && $options['toolbox'] === false ) {
+ unset( $sidebar['TOOLBOX'] );
+ }
+ if ( isset( $options['languages'] ) && $options['languages'] === false ) {
+ unset( $sidebar['LANGUAGES'] );
+ }
+
+ $boxes = array();
+ foreach ( $sidebar as $boxName => $content ) {
+ if ( $content === false ) {
+ continue;
+ }
+ switch ( $boxName ) {
+ case 'SEARCH':
+ // Search is a special case, skins should custom implement this
+ $boxes[$boxName] = array(
+ 'id' => 'p-search',
+ 'header' => $this->getMsg( 'search' )->text(),
+ 'generated' => false,
+ 'content' => true,
+ );
+ break;
+ case 'TOOLBOX':
+ $msgObj = $this->getMsg( 'toolbox' );
+ $boxes[$boxName] = array(
+ 'id' => 'p-tb',
+ 'header' => $msgObj->exists() ? $msgObj->text() : 'toolbox',
+ 'generated' => false,
+ 'content' => $this->getToolbox(),
+ );
+ break;
+ case 'LANGUAGES':
+ if ( $this->data['language_urls'] ) {
+ $msgObj = $this->getMsg( 'otherlanguages' );
+ $boxes[$boxName] = array(
+ 'id' => 'p-lang',
+ 'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
+ 'generated' => false,
+ 'content' => $this->data['language_urls'],
+ );
+ }
+ break;
+ default:
+ $msgObj = $this->getMsg( $boxName );
+ $boxes[$boxName] = array(
+ 'id' => "p-$boxName",
+ 'header' => $msgObj->exists() ? $msgObj->text() : $boxName,
+ 'generated' => true,
+ 'content' => $content,
+ );
+ break;
+ }
+ }
+
+ // HACK: Compatibility with extensions still using SkinTemplateToolboxEnd
+ $hookContents = null;
+ if ( isset( $boxes['TOOLBOX'] ) ) {
+ ob_start();
+ // We pass an extra 'true' at the end so extensions using BaseTemplateToolbox
+ // can abort and avoid outputting double toolbox links
+ Hooks::run( 'SkinTemplateToolboxEnd', array( &$this, true ) );
+ $hookContents = ob_get_contents();
+ ob_end_clean();
+ if ( !trim( $hookContents ) ) {
+ $hookContents = null;
+ }
+ }
+ // END hack
+
+ if ( isset( $options['htmlOnly'] ) && $options['htmlOnly'] === true ) {
+ foreach ( $boxes as $boxName => $box ) {
+ if ( is_array( $box['content'] ) ) {
+ $content = '<ul>';
+ foreach ( $box['content'] as $key => $val ) {
+ $content .= "\n " . $this->makeListItem( $key, $val );
+ }
+ // HACK, shove the toolbox end onto the toolbox if we're rendering itself
+ if ( $hookContents ) {
+ $content .= "\n $hookContents";
+ }
+ // END hack
+ $content .= "\n</ul>\n";
+ $boxes[$boxName]['content'] = $content;
+ }
+ }
+ } else {
+ if ( $hookContents ) {
+ $boxes['TOOLBOXEND'] = array(
+ 'id' => 'p-toolboxend',
+ 'header' => $boxes['TOOLBOX']['header'],
+ 'generated' => false,
+ 'content' => "<ul>{$hookContents}</ul>",
+ );
+ // HACK: Make sure that TOOLBOXEND is sorted next to TOOLBOX
+ $boxes2 = array();
+ foreach ( $boxes as $key => $box ) {
+ if ( $key === 'TOOLBOXEND' ) {
+ continue;
+ }
+ $boxes2[$key] = $box;
+ if ( $key === 'TOOLBOX' ) {
+ $boxes2['TOOLBOXEND'] = $boxes['TOOLBOXEND'];
+ }
+ }
+ $boxes = $boxes2;
+ // END hack
+ }
+ }
+
+ return $boxes;
+ }
+
+ /**
+ * @param string $name
+ */
+ protected function renderAfterPortlet( $name ) {
+ $content = '';
+ Hooks::run( 'BaseTemplateAfterPortlet', array( $this, $name, &$content ) );
+
+ if ( $content !== '' ) {
+ echo "<div class='after-portlet after-portlet-$name'>$content</div>";
+ }
+
+ }
+
+ /**
+ * Makes a link, usually used by makeListItem to generate a link for an item
+ * in a list used in navigation lists, portlets, portals, sidebars, etc...
+ *
+ * @param string $key Usually a key from the list you are generating this
+ * link from.
+ * @param array $item Contains some of a specific set of keys.
+ *
+ * The text of the link will be generated either from the contents of the
+ * "text" key in the $item array, if a "msg" key is present a message by
+ * that name will be used, and if neither of those are set the $key will be
+ * used as a message name.
+ *
+ * If a "href" key is not present makeLink will just output htmlescaped text.
+ * The "href", "id", "class", "rel", and "type" keys are used as attributes
+ * for the link if present.
+ *
+ * If an "id" or "single-id" (if you don't want the actual id to be output
+ * on the link) is present it will be used to generate a tooltip and
+ * accesskey for the link.
+ *
+ * The keys "context" and "primary" are ignored; these keys are used
+ * internally by skins and are not supposed to be included in the HTML
+ * output.
+ *
+ * If you don't want an accesskey, set $item['tooltiponly'] = true;
+ *
+ * @param array $options Can be used to affect the output of a link.
+ * Possible options are:
+ * - 'text-wrapper' key to specify a list of elements to wrap the text of
+ * a link in. This should be an array of arrays containing a 'tag' and
+ * optionally an 'attributes' key. If you only have one element you don't
+ * need to wrap it in another array. eg: To use <a><span>...</span></a>
+ * in all links use array( 'text-wrapper' => array( 'tag' => 'span' ) )
+ * for your options.
+ * - 'link-class' key can be used to specify additional classes to apply
+ * to all links.
+ * - 'link-fallback' can be used to specify a tag to use instead of "<a>"
+ * if there is no link. eg: If you specify 'link-fallback' => 'span' than
+ * any non-link will output a "<span>" instead of just text.
+ *
+ * @return string
+ */
+ function makeLink( $key, $item, $options = array() ) {
+ if ( isset( $item['text'] ) ) {
+ $text = $item['text'];
+ } else {
+ $text = $this->translator->translate( isset( $item['msg'] ) ? $item['msg'] : $key );
+ }
+
+ $html = htmlspecialchars( $text );
+
+ if ( isset( $options['text-wrapper'] ) ) {
+ $wrapper = $options['text-wrapper'];
+ if ( isset( $wrapper['tag'] ) ) {
+ $wrapper = array( $wrapper );
+ }
+ while ( count( $wrapper ) > 0 ) {
+ $element = array_pop( $wrapper );
+ $html = Html::rawElement( $element['tag'], isset( $element['attributes'] )
+ ? $element['attributes']
+ : null, $html );
+ }
+ }
+
+ if ( isset( $item['href'] ) || isset( $options['link-fallback'] ) ) {
+ $attrs = $item;
+ foreach ( array( 'single-id', 'text', 'msg', 'tooltiponly', 'context', 'primary' ) as $k ) {
+ unset( $attrs[$k] );
+ }
+
+ if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
+ $item['single-id'] = $item['id'];
+ }
+ if ( isset( $item['single-id'] ) ) {
+ if ( isset( $item['tooltiponly'] ) && $item['tooltiponly'] ) {
+ $title = Linker::titleAttrib( $item['single-id'] );
+ if ( $title !== false ) {
+ $attrs['title'] = $title;
+ }
+ } else {
+ $tip = Linker::tooltipAndAccesskeyAttribs( $item['single-id'] );
+ if ( isset( $tip['title'] ) && $tip['title'] !== false ) {
+ $attrs['title'] = $tip['title'];
+ }
+ if ( isset( $tip['accesskey'] ) && $tip['accesskey'] !== false ) {
+ $attrs['accesskey'] = $tip['accesskey'];
+ }
+ }
+ }
+ if ( isset( $options['link-class'] ) ) {
+ if ( isset( $attrs['class'] ) ) {
+ $attrs['class'] .= " {$options['link-class']}";
+ } else {
+ $attrs['class'] = $options['link-class'];
+ }
+ }
+ $html = Html::rawElement( isset( $attrs['href'] )
+ ? 'a'
+ : $options['link-fallback'], $attrs, $html );
+ }
+
+ return $html;
+ }
+
+ /**
+ * Generates a list item for a navigation, portlet, portal, sidebar... list
+ *
+ * @param string $key Usually a key from the list you are generating this link from.
+ * @param array $item Array of list item data containing some of a specific set of keys.
+ * The "id", "class" and "itemtitle" keys will be used as attributes for the list item,
+ * if "active" contains a value of true a "active" class will also be appended to class.
+ *
+ * @param array $options
+ *
+ * If you want something other than a "<li>" you can pass a tag name such as
+ * "tag" => "span" in the $options array to change the tag used.
+ * link/content data for the list item may come in one of two forms
+ * A "links" key may be used, in which case it should contain an array with
+ * a list of links to include inside the list item, see makeLink for the
+ * format of individual links array items.
+ *
+ * Otherwise the relevant keys from the list item $item array will be passed
+ * to makeLink instead. Note however that "id" and "class" are used by the
+ * list item directly so they will not be passed to makeLink
+ * (however the link will still support a tooltip and accesskey from it)
+ * If you need an id or class on a single link you should include a "links"
+ * array with just one link item inside of it. If you want to add a title
+ * to the list item itself, you can set "itemtitle" to the value.
+ * $options is also passed on to makeLink calls
+ *
+ * @return string
+ */
+ function makeListItem( $key, $item, $options = array() ) {
+ if ( isset( $item['links'] ) ) {
+ $links = array();
+ foreach ( $item['links'] as $linkKey => $link ) {
+ $links[] = $this->makeLink( $linkKey, $link, $options );
+ }
+ $html = implode( ' ', $links );
+ } else {
+ $link = $item;
+ // These keys are used by makeListItem and shouldn't be passed on to the link
+ foreach ( array( 'id', 'class', 'active', 'tag', 'itemtitle' ) as $k ) {
+ unset( $link[$k] );
+ }
+ if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
+ // The id goes on the <li> not on the <a> for single links
+ // but makeSidebarLink still needs to know what id to use when
+ // generating tooltips and accesskeys.
+ $link['single-id'] = $item['id'];
+ }
+ $html = $this->makeLink( $key, $link, $options );
+ }
+
+ $attrs = array();
+ foreach ( array( 'id', 'class' ) as $attr ) {
+ if ( isset( $item[$attr] ) ) {
+ $attrs[$attr] = $item[$attr];
+ }
+ }
+ if ( isset( $item['active'] ) && $item['active'] ) {
+ if ( !isset( $attrs['class'] ) ) {
+ $attrs['class'] = '';
+ }
+ $attrs['class'] .= ' active';
+ $attrs['class'] = trim( $attrs['class'] );
+ }
+ if ( isset( $item['itemtitle'] ) ) {
+ $attrs['title'] = $item['itemtitle'];
+ }
+ return Html::rawElement( isset( $options['tag'] ) ? $options['tag'] : 'li', $attrs, $html );
+ }
+
+ function makeSearchInput( $attrs = array() ) {
+ $realAttrs = array(
+ 'type' => 'search',
+ 'name' => 'search',
+ 'placeholder' => wfMessage( 'searchsuggest-search' )->text(),
+ 'value' => $this->get( 'search', '' ),
+ );
+ $realAttrs = array_merge( $realAttrs, Linker::tooltipAndAccesskeyAttribs( 'search' ), $attrs );
+ return Html::element( 'input', $realAttrs );
+ }
+
+ function makeSearchButton( $mode, $attrs = array() ) {
+ switch ( $mode ) {
+ case 'go':
+ case 'fulltext':
+ $realAttrs = array(
+ 'type' => 'submit',
+ 'name' => $mode,
+ 'value' => $this->translator->translate(
+ $mode == 'go' ? 'searcharticle' : 'searchbutton' ),
+ );
+ $realAttrs = array_merge(
+ $realAttrs,
+ Linker::tooltipAndAccesskeyAttribs( "search-$mode" ),
+ $attrs
+ );
+ return Html::element( 'input', $realAttrs );
+ case 'image':
+ $buttonAttrs = array(
+ 'type' => 'submit',
+ 'name' => 'button',
+ );
+ $buttonAttrs = array_merge(
+ $buttonAttrs,
+ Linker::tooltipAndAccesskeyAttribs( 'search-fulltext' ),
+ $attrs
+ );
+ unset( $buttonAttrs['src'] );
+ unset( $buttonAttrs['alt'] );
+ unset( $buttonAttrs['width'] );
+ unset( $buttonAttrs['height'] );
+ $imgAttrs = array(
+ 'src' => $attrs['src'],
+ 'alt' => isset( $attrs['alt'] )
+ ? $attrs['alt']
+ : $this->translator->translate( 'searchbutton' ),
+ 'width' => isset( $attrs['width'] ) ? $attrs['width'] : null,
+ 'height' => isset( $attrs['height'] ) ? $attrs['height'] : null,
+ );
+ return Html::rawElement( 'button', $buttonAttrs, Html::element( 'img', $imgAttrs ) );
+ default:
+ throw new MWException( 'Unknown mode passed to BaseTemplate::makeSearchButton' );
+ }
+ }
+
+ /**
+ * Returns an array of footerlinks trimmed down to only those footer links that
+ * are valid.
+ * If you pass "flat" as an option then the returned array will be a flat array
+ * of footer icons instead of a key/value array of footerlinks arrays broken
+ * up into categories.
+ * @param string $option
+ * @return array|mixed
+ */
+ function getFooterLinks( $option = null ) {
+ $footerlinks = $this->get( 'footerlinks' );
+
+ // Reduce footer links down to only those which are being used
+ $validFooterLinks = array();
+ foreach ( $footerlinks as $category => $links ) {
+ $validFooterLinks[$category] = array();
+ foreach ( $links as $link ) {
+ if ( isset( $this->data[$link] ) && $this->data[$link] ) {
+ $validFooterLinks[$category][] = $link;
+ }
+ }
+ if ( count( $validFooterLinks[$category] ) <= 0 ) {
+ unset( $validFooterLinks[$category] );
+ }
+ }
+
+ if ( $option == 'flat' ) {
+ // fold footerlinks into a single array using a bit of trickery
+ $validFooterLinks = call_user_func_array(
+ 'array_merge',
+ array_values( $validFooterLinks )
+ );
+ }
+
+ return $validFooterLinks;
+ }
+
+ /**
+ * Returns an array of footer icons filtered down by options relevant to how
+ * the skin wishes to display them.
+ * If you pass "icononly" as the option all footer icons which do not have an
+ * image icon set will be filtered out.
+ * If you pass "nocopyright" then MediaWiki's copyright icon will not be included
+ * in the list of footer icons. This is mostly useful for skins which only
+ * display the text from footericons instead of the images and don't want a
+ * duplicate copyright statement because footerlinks already rendered one.
+ * @param string $option
+ * @return string
+ */
+ function getFooterIcons( $option = null ) {
+ // Generate additional footer icons
+ $footericons = $this->get( 'footericons' );
+
+ if ( $option == 'icononly' ) {
+ // Unset any icons which don't have an image
+ foreach ( $footericons as &$footerIconsBlock ) {
+ foreach ( $footerIconsBlock as $footerIconKey => $footerIcon ) {
+ if ( !is_string( $footerIcon ) && !isset( $footerIcon['src'] ) ) {
+ unset( $footerIconsBlock[$footerIconKey] );
+ }
+ }
+ }
+ // Redo removal of any empty blocks
+ foreach ( $footericons as $footerIconsKey => &$footerIconsBlock ) {
+ if ( count( $footerIconsBlock ) <= 0 ) {
+ unset( $footericons[$footerIconsKey] );
+ }
+ }
+ } elseif ( $option == 'nocopyright' ) {
+ unset( $footericons['copyright']['copyright'] );
+ if ( count( $footericons['copyright'] ) <= 0 ) {
+ unset( $footericons['copyright'] );
+ }
+ }
+
+ return $footericons;
+ }
+
+ /**
+ * Get the suggested HTML for page status indicators: icons (or short text snippets) usually
+ * displayed in the top-right corner of the page, outside of the main content.
+ *
+ * Your skin may implement this differently, for example by handling some indicator names
+ * specially with a different UI. However, it is recommended to use a `<div class="mw-indicator"
+ * id="mw-indicator-<id>" />` as a wrapper element for each indicator, for better compatibility
+ * with extensions and user scripts.
+ *
+ * The raw data is available in `$this->data['indicators']` as an associative array (keys:
+ * identifiers, values: contents) internally ordered by keys.
+ *
+ * @return string HTML
+ * @since 1.25
+ */
+ public function getIndicators() {
+ $out = "<div class=\"mw-indicators\">\n";
+ foreach ( $this->data['indicators'] as $id => $content ) {
+ $out .= Html::rawElement(
+ 'div',
+ array(
+ 'id' => Sanitizer::escapeId( "mw-indicator-$id" ),
+ 'class' => 'mw-indicator',
+ ),
+ $content
+ ) . "\n";
+ }
+ $out .= "</div>\n";
+ return $out;
+ }
+
+ /**
+ * Output the basic end-page trail including bottomscripts, reporttime, and
+ * debug stuff. This should be called right before outputting the closing
+ * body and html tags.
+ */
+ function printTrail() {
+?>
+<?php echo MWDebug::getDebugHTML( $this->getSkin()->getContext() ); ?>
+<?php $this->html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?>
+<?php $this->html( 'reporttime' ) ?>
+<?php
+ }
+}
diff --git a/includes/skins/MediaWikiI18N.php b/includes/skins/MediaWikiI18N.php
new file mode 100644
index 00000000..6e48d04a
--- /dev/null
+++ b/includes/skins/MediaWikiI18N.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Wrapper object for MediaWiki's localization functions,
+ * to be passed to the template engine.
+ *
+ * @private
+ * @ingroup Skins
+ */
+class MediaWikiI18N {
+ private $context = array();
+
+ function set( $varName, $value ) {
+ $this->context[$varName] = $value;
+ }
+
+ function translate( $value ) {
+
+ // Hack for i18n:attributes in PHPTAL 1.0.0 dev version as of 2004-10-23
+ $value = preg_replace( '/^string:/', '', $value );
+
+ $value = wfMessage( $value )->text();
+ // interpolate variables
+ $m = array();
+ while ( preg_match( '/\$([0-9]*?)/sm', $value, $m ) ) {
+ list( $src, $var ) = $m;
+ wfSuppressWarnings();
+ $varValue = $this->context[$var];
+ wfRestoreWarnings();
+ $value = str_replace( $src, $varValue, $value );
+ }
+ return $value;
+ }
+}
diff --git a/includes/skins/QuickTemplate.php b/includes/skins/QuickTemplate.php
new file mode 100644
index 00000000..905e537e
--- /dev/null
+++ b/includes/skins/QuickTemplate.php
@@ -0,0 +1,194 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Generic wrapper for template functions, with interface
+ * compatible with what we use of PHPTAL 0.7.
+ * @ingroup Skins
+ */
+abstract class QuickTemplate {
+
+ /** @var Config $config */
+ protected $config;
+
+ /**
+ * @param Config $config
+ */
+ function __construct( Config $config = null ) {
+ $this->data = array();
+ $this->translator = new MediaWikiI18N();
+ if ( $config === null ) {
+ wfDebug( __METHOD__ . ' was called with no Config instance passed to it' );
+ $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+ }
+ $this->config = $config;
+ }
+
+ /**
+ * Sets the value $value to $name
+ * @param string $name
+ * @param mixed $value
+ */
+ public function set( $name, $value ) {
+ $this->data[$name] = $value;
+ }
+
+ /**
+ * extends the value of data with name $name with the value $value
+ * @since 1.25
+ * @param string $name
+ * @param mixed $value
+ */
+ public function extend( $name, $value ) {
+ if ( $this->haveData( $name ) ) {
+ $this->data[$name] = $this->data[$name] . $value;
+ } else {
+ $this->data[$name] = $value;
+ }
+ }
+
+ /**
+ * Gets the template data requested
+ * @since 1.22
+ * @param string $name Key for the data
+ * @param mixed $default Optional default (or null)
+ * @return mixed The value of the data requested or the deafult
+ */
+ public function get( $name, $default = null ) {
+ if ( isset( $this->data[$name] ) ) {
+ return $this->data[$name];
+ } else {
+ return $default;
+ }
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $value
+ */
+ public function setRef( $name, &$value ) {
+ $this->data[$name] =& $value;
+ }
+
+ /**
+ * @param MediaWikiI18N $t
+ */
+ public function setTranslator( &$t ) {
+ $this->translator = &$t;
+ }
+
+ /**
+ * Main function, used by classes that subclass QuickTemplate
+ * to show the actual HTML output
+ */
+ abstract public function execute();
+
+ /**
+ * @private
+ * @param string $str
+ * @return string
+ */
+ function text( $str ) {
+ echo htmlspecialchars( $this->data[$str] );
+ }
+
+ /**
+ * @private
+ * @param string $str
+ * @return string
+ */
+ function html( $str ) {
+ echo $this->data[$str];
+ }
+
+ /**
+ * @private
+ * @param string $str
+ * @return string
+ */
+ function msg( $str ) {
+ echo htmlspecialchars( $this->translator->translate( $str ) );
+ }
+
+ /**
+ * @private
+ * @param string $str
+ * @return string
+ */
+ function msgHtml( $str ) {
+ echo $this->translator->translate( $str );
+ }
+
+ /**
+ * An ugly, ugly hack.
+ * @private
+ * @param string $str
+ * @return string
+ */
+ function msgWiki( $str ) {
+ global $wgOut;
+
+ $text = $this->translator->translate( $str );
+ echo $wgOut->parse( $text );
+ }
+
+ /**
+ * @private
+ * @param string $str
+ * @return bool
+ */
+ function haveData( $str ) {
+ return isset( $this->data[$str] );
+ }
+
+ /**
+ * @private
+ *
+ * @param string $str
+ * @return bool
+ */
+ function haveMsg( $str ) {
+ $msg = $this->translator->translate( $str );
+ return ( $msg != '-' ) && ( $msg != '' ); # ????
+ }
+
+ /**
+ * Get the Skin object related to this object
+ *
+ * @return Skin
+ */
+ public function getSkin() {
+ return $this->data['skin'];
+ }
+
+ /**
+ * Fetch the output of a QuickTemplate and return it
+ *
+ * @since 1.23
+ * @return string
+ */
+ public function getHTML() {
+ ob_start();
+ $this->execute();
+ $html = ob_get_contents();
+ ob_end_clean();
+ return $html;
+ }
+}
diff --git a/includes/skins/Skin.php b/includes/skins/Skin.php
index 2f6a7101..ac7a85ba 100644
--- a/includes/skins/Skin.php
+++ b/includes/skins/Skin.php
@@ -168,11 +168,9 @@ abstract class Skin extends ContextSource {
* @param OutputPage $out
*/
function initPage( OutputPage $out ) {
- wfProfileIn( __METHOD__ );
$this->preloadExistence();
- wfProfileOut( __METHOD__ );
}
/**
@@ -239,25 +237,33 @@ abstract class Skin extends ContextSource {
* Preload the existence of three commonly-requested pages in a single query
*/
function preloadExistence() {
+ $titles = array();
+
$user = $this->getUser();
+ $title = $this->getRelevantTitle();
// User/talk link
- $titles = array( $user->getUserPage(), $user->getTalkPage() );
+ if ( $user->isLoggedIn() || $this->showIPinHeader() ) {
+ $titles[] = $user->getUserPage();
+ $titles[] = $user->getTalkPage();
+ }
// Other tab link
- if ( $this->getTitle()->isSpecialPage() ) {
+ if ( $title->isSpecialPage() ) {
// nothing
- } elseif ( $this->getTitle()->isTalkPage() ) {
- $titles[] = $this->getTitle()->getSubjectPage();
+ } elseif ( $title->isTalkPage() ) {
+ $titles[] = $title->getSubjectPage();
} else {
- $titles[] = $this->getTitle()->getTalkPage();
+ $titles[] = $title->getTalkPage();
}
- wfRunHooks( 'SkinPreloadExistence', array( &$titles, $this ) );
+ Hooks::run( 'SkinPreloadExistence', array( &$titles, $this ) );
- $lb = new LinkBatch( $titles );
- $lb->setCaller( __METHOD__ );
- $lb->execute();
+ if ( count( $titles ) ) {
+ $lb = new LinkBatch( $titles );
+ $lb->setCaller( __METHOD__ );
+ $lb->execute();
+ }
}
/**
@@ -333,8 +339,13 @@ abstract class Skin extends ContextSource {
$this->mRelevantUser = User::newFromName( $rootUser, false );
} else {
$user = User::newFromName( $rootUser, false );
- if ( $user && $user->isLoggedIn() ) {
- $this->mRelevantUser = $user;
+
+ if ( $user ) {
+ $user->load( User::READ_NORMAL );
+
+ if ( $user->isLoggedIn() ) {
+ $this->mRelevantUser = $user;
+ }
}
}
return $this->mRelevantUser;
@@ -474,9 +485,10 @@ abstract class Skin extends ContextSource {
$msg = $this->msg( 'pagecategories' )->numParams( count( $allCats['normal'] ) )->escaped();
$linkPage = wfMessage( 'pagecategorieslink' )->inContentLanguage()->text();
+ $title = Title::newFromText( $linkPage );
+ $link = $title ? Linker::link( $title, $msg ) : $msg;
$s .= '<div id="mw-normal-catlinks" class="mw-normal-catlinks">' .
- Linker::link( Title::newFromText( $linkPage ), $msg )
- . $colon . '<ul>' . $t . '</ul>' . '</div>';
+ $link . $colon . '<ul>' . $t . '</ul>' . '</div>';
}
# Hidden categories
@@ -579,7 +591,7 @@ abstract class Skin extends ContextSource {
protected function afterContentHook() {
$data = '';
- if ( wfRunHooks( 'SkinAfterContent', array( &$data, $this ) ) ) {
+ if ( Hooks::run( 'SkinAfterContent', array( &$data, $this ) ) ) {
// adding just some spaces shouldn't toggle the output
// of the whole <div/>, so we use trim() here
if ( trim( $data ) != '' ) {
@@ -616,7 +628,7 @@ abstract class Skin extends ContextSource {
// OutputPage::getBottomScripts() which takes a Skin param. This should be cleaned
// up at some point
$bottomScriptText = $this->getOutput()->getBottomScripts();
- wfRunHooks( 'SkinAfterBottomScripts', array( $this, &$bottomScriptText ) );
+ Hooks::run( 'SkinAfterBottomScripts', array( $this, &$bottomScriptText ) );
return $bottomScriptText;
}
@@ -637,22 +649,23 @@ abstract class Skin extends ContextSource {
$url = htmlspecialchars( wfExpandIRI( $this->getTitle()->getCanonicalURL() ) );
}
- return $this->msg( 'retrievedfrom', '<a dir="ltr" href="' . $url
- . '">' . $url . '</a>' )->text();
+ return $this->msg( 'retrievedfrom' )
+ ->rawParams( '<a dir="ltr" href="' . $url. '">' . $url . '</a>' )
+ ->parse();
}
/**
- * @return string
+ * @return string HTML
*/
function getUndeleteLink() {
$action = $this->getRequest()->getVal( 'action', 'view' );
- if ( $this->getUser()->isAllowed( 'deletedhistory' ) &&
- ( $this->getTitle()->getArticleID() == 0 || $action == 'history' ) ) {
+ if ( $this->getTitle()->userCan( 'deletedhistory', $this->getUser() ) &&
+ ( !$this->getTitle()->exists() || $action == 'history' ) ) {
$n = $this->getTitle()->isDeleted();
if ( $n ) {
- if ( $this->getUser()->isAllowed( 'undelete' ) ) {
+ if ( $this->getTitle()->quickUserCan( 'undelete', $this->getUser() ) ) {
$msg = 'thisisdeleted';
} else {
$msg = 'viewdeleted';
@@ -662,7 +675,7 @@ abstract class Skin extends ContextSource {
Linker::linkKnown(
SpecialPage::getTitleFor( 'Undelete', $this->getTitle()->getPrefixedDBkey() ),
$this->msg( 'restorelink' )->numParams( $n )->escaped() )
- )->text();
+ )->escaped();
}
}
@@ -676,7 +689,7 @@ abstract class Skin extends ContextSource {
$out = $this->getOutput();
$subpages = '';
- if ( !wfRunHooks( 'SkinSubPageSubtitle', array( &$subpages, $this, $out ) ) ) {
+ if ( !Hooks::run( 'SkinSubPageSubtitle', array( &$subpages, $this, $out ) ) ) {
return $subpages;
}
@@ -785,7 +798,7 @@ abstract class Skin extends ContextSource {
// @todo Remove deprecated $forContent param from hook handlers and then remove here.
$forContent = true;
- wfRunHooks(
+ Hooks::run(
'SkinCopyrightFooter',
array( $this->getTitle(), $type, &$msg, &$link, &$forContent )
);
@@ -829,10 +842,19 @@ abstract class Skin extends ContextSource {
function getPoweredBy() {
global $wgResourceBasePath;
- $url = htmlspecialchars( "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png" );
- $text = '<a href="//www.mediawiki.org/"><img src="' . $url
- . '" height="31" width="88" alt="Powered by MediaWiki" /></a>';
- wfRunHooks( 'SkinGetPoweredBy', array( &$text, $this ) );
+ $url1 = htmlspecialchars(
+ "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
+ );
+ $url1_5 = htmlspecialchars(
+ "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png"
+ );
+ $url2 = htmlspecialchars(
+ "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png"
+ );
+ $text = '<a href="//www.mediawiki.org/"><img src="' . $url1
+ . '" srcset="' . $url1_5 . ' 1.5x, ' . $url2 . ' 2x" '
+ . 'height="31" width="88" alt="Powered by MediaWiki" /></a>';
+ Hooks::run( 'SkinGetPoweredBy', array( &$text, $this ) );
return $text;
}
@@ -852,13 +874,13 @@ abstract class Skin extends ContextSource {
if ( $timestamp ) {
$d = $this->getLanguage()->userDate( $timestamp, $this->getUser() );
$t = $this->getLanguage()->userTime( $timestamp, $this->getUser() );
- $s = ' ' . $this->msg( 'lastmodifiedat', $d, $t )->text();
+ $s = ' ' . $this->msg( 'lastmodifiedat', $d, $t )->parse();
} else {
$s = '';
}
if ( wfGetLB()->getLaggedSlaveMode() ) {
- $s .= ' <strong>' . $this->msg( 'laggedslavemode' )->text() . '</strong>';
+ $s .= ' <strong>' . $this->msg( 'laggedslavemode' )->parse() . '</strong>';
}
return $s;
@@ -942,6 +964,10 @@ abstract class Skin extends ContextSource {
// but we make the link target be the one site-wide page.
$title = Title::newFromText( $this->msg( $page )->inContentLanguage()->text() );
+ if ( !$title ) {
+ return '';
+ }
+
return Linker::linkKnown(
$title,
$this->msg( $desc )->escaped()
@@ -1031,6 +1057,7 @@ abstract class Skin extends ContextSource {
*
* @param string $name The name or path of a skin resource file
* @return string The fully resolved style path url including styleversion
+ * @throws MWException
*/
function getSkinStylePath( $name ) {
global $wgStylePath, $wgStyleVersion;
@@ -1150,7 +1177,7 @@ abstract class Skin extends ContextSource {
return array(
'href' => $title->getLocalURL( $urlaction ),
- 'exists' => $title->getArticleID() != 0,
+ 'exists' => $title->isKnown(),
);
}
@@ -1208,16 +1235,14 @@ abstract class Skin extends ContextSource {
*/
function buildSidebar() {
global $wgMemc, $wgEnableSidebarCache, $wgSidebarCacheExpiry;
- wfProfileIn( __METHOD__ );
$key = wfMemcKey( 'sidebar', $this->getLanguage()->getCode() );
if ( $wgEnableSidebarCache ) {
$cachedsidebar = $wgMemc->get( $key );
if ( $cachedsidebar ) {
- wfRunHooks( 'SidebarBeforeOutput', array( $this, &$cachedsidebar ) );
+ Hooks::run( 'SidebarBeforeOutput', array( $this, &$cachedsidebar ) );
- wfProfileOut( __METHOD__ );
return $cachedsidebar;
}
}
@@ -1225,14 +1250,13 @@ abstract class Skin extends ContextSource {
$bar = array();
$this->addToSidebar( $bar, 'sidebar' );
- wfRunHooks( 'SkinBuildSidebar', array( $this, &$bar ) );
+ Hooks::run( 'SkinBuildSidebar', array( $this, &$bar ) );
if ( $wgEnableSidebarCache ) {
$wgMemc->set( $key, $bar, $wgSidebarCacheExpiry );
}
- wfRunHooks( 'SidebarBeforeOutput', array( $this, &$bar ) );
+ Hooks::run( 'SidebarBeforeOutput', array( $this, &$bar ) );
- wfProfileOut( __METHOD__ );
return $bar;
}
@@ -1370,7 +1394,7 @@ abstract class Skin extends ContextSource {
$out = $this->getOutput();
// Allow extensions to disable or modify the new messages alert
- if ( !wfRunHooks( 'GetNewMessagesAlert', array( &$newMessagesAlert, $newtalks, $user, $out ) ) ) {
+ if ( !Hooks::run( 'GetNewMessagesAlert', array( &$newMessagesAlert, $newtalks, $user, $out ) ) ) {
return '';
}
if ( $newMessagesAlert ) {
@@ -1453,13 +1477,12 @@ abstract class Skin extends ContextSource {
* Get a cached notice
*
* @param string $name Message name, or 'default' for $wgSiteNotice
- * @return string HTML fragment
+ * @return string|bool HTML fragment, or false to indicate that the caller
+ * should fall back to the next notice in its sequence
*/
private function getCachedNotice( $name ) {
global $wgRenderHashAppend, $parserMemc, $wgContLang;
- wfProfileIn( __METHOD__ );
-
$needParse = false;
if ( $name === 'default' ) {
@@ -1467,13 +1490,13 @@ abstract class Skin extends ContextSource {
global $wgSiteNotice;
$notice = $wgSiteNotice;
if ( empty( $notice ) ) {
- wfProfileOut( __METHOD__ );
return false;
}
} else {
$msg = $this->msg( $name )->inContentLanguage();
- if ( $msg->isDisabled() ) {
- wfProfileOut( __METHOD__ );
+ if ( $msg->isBlank() ) {
+ return '';
+ } elseif ( $msg->isDisabled() ) {
return false;
}
$notice = $msg->plain();
@@ -1500,7 +1523,6 @@ abstract class Skin extends ContextSource {
$notice = Html::rawElement( 'div', array( 'id' => 'localNotice',
'lang' => $wgContLang->getHtmlCode(), 'dir' => $wgContLang->getDir() ), $notice );
- wfProfileOut( __METHOD__ );
return $notice;
}
@@ -1510,7 +1532,6 @@ abstract class Skin extends ContextSource {
* @return string HTML fragment
*/
function getNamespaceNotice() {
- wfProfileIn( __METHOD__ );
$key = 'namespacenotice-' . $this->getTitle()->getNsText();
$namespaceNotice = $this->getCachedNotice( $key );
@@ -1520,7 +1541,6 @@ abstract class Skin extends ContextSource {
$namespaceNotice = '';
}
- wfProfileOut( __METHOD__ );
return $namespaceNotice;
}
@@ -1530,27 +1550,25 @@ abstract class Skin extends ContextSource {
* @return string HTML fragment
*/
function getSiteNotice() {
- wfProfileIn( __METHOD__ );
$siteNotice = '';
- if ( wfRunHooks( 'SiteNoticeBefore', array( &$siteNotice, $this ) ) ) {
+ if ( Hooks::run( 'SiteNoticeBefore', array( &$siteNotice, $this ) ) ) {
if ( is_object( $this->getUser() ) && $this->getUser()->isLoggedIn() ) {
$siteNotice = $this->getCachedNotice( 'sitenotice' );
} else {
$anonNotice = $this->getCachedNotice( 'anonnotice' );
- if ( !$anonNotice ) {
+ if ( $anonNotice === false ) {
$siteNotice = $this->getCachedNotice( 'sitenotice' );
} else {
$siteNotice = $anonNotice;
}
}
- if ( !$siteNotice ) {
+ if ( $siteNotice === false ) {
$siteNotice = $this->getCachedNotice( 'default' );
}
}
- wfRunHooks( 'SiteNoticeAfter', array( &$siteNotice, $this ) );
- wfProfileOut( __METHOD__ );
+ Hooks::run( 'SiteNoticeAfter', array( &$siteNotice, $this ) );
return $siteNotice;
}
@@ -1580,20 +1598,46 @@ abstract class Skin extends ContextSource {
$attribs['title'] = wfMessage( 'editsectionhint' )->rawParams( $tooltip )
->inLanguage( $lang )->text();
}
- $link = Linker::link( $nt, wfMessage( 'editsection' )->inLanguage( $lang )->text(),
- $attribs,
- array( 'action' => 'edit', 'section' => $section ),
- array( 'noclasses', 'known' )
+
+ $links = array(
+ 'editsection' => array(
+ 'text' => wfMessage( 'editsection' )->inLanguage( $lang )->escaped(),
+ 'targetTitle' => $nt,
+ 'attribs' => $attribs,
+ 'query' => array( 'action' => 'edit', 'section' => $section ),
+ 'options' => array( 'noclasses', 'known' )
+ )
);
- # Add the brackets and the span and run the hook.
- $result = '<span class="mw-editsection">'
- . '<span class="mw-editsection-bracket">[</span>'
- . $link
- . '<span class="mw-editsection-bracket">]</span>'
- . '</span>';
+ Hooks::run( 'SkinEditSectionLinks', array( $this, $nt, $section, $tooltip, &$links, $lang ) );
+
+ $result = '<span class="mw-editsection"><span class="mw-editsection-bracket">[</span>';
- wfRunHooks( 'DoEditSectionLink', array( $this, $nt, $section, $tooltip, &$result, $lang ) );
+ $linksHtml = array();
+ foreach ( $links as $k => $linkDetails ) {
+ $linksHtml[] = Linker::link(
+ $linkDetails['targetTitle'],
+ $linkDetails['text'],
+ $linkDetails['attribs'],
+ $linkDetails['query'],
+ $linkDetails['options']
+ );
+ }
+
+ $result .= implode(
+ '<span class="mw-editsection-divider">'
+ . wfMessage( 'pipe-separator' )->inLanguage( $lang )->text()
+ . '</span>',
+ $linksHtml
+ );
+
+ $result .= '<span class="mw-editsection-bracket">]</span></span>';
+ // Deprecated, use SkinEditSectionLinks hook instead
+ Hooks::run(
+ 'DoEditSectionLink',
+ array( $this, $nt, $section, $tooltip, &$result, $lang ),
+ '1.25'
+ );
return $result;
}
diff --git a/includes/skins/SkinApi.php b/includes/skins/SkinApi.php
new file mode 100644
index 00000000..2fef2209
--- /dev/null
+++ b/includes/skins/SkinApi.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Extremely basic "skin" for API output, which needs to output a page without
+ * the usual skin elements but still using CSS, JS, and such via OutputPage and
+ * ResourceLoader.
+ *
+ * Created on Sep 08, 2014
+ *
+ * Copyright © 2014 Brad Jorsch <bjorsch@wikimedia.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * SkinTemplate class for API output
+ * @since 1.25
+ */
+class SkinApi extends SkinTemplate {
+ public $skinname = 'apioutput';
+ public $template = 'SkinApiTemplate';
+
+ public function setupSkinUserCss( OutputPage $out ) {
+ parent::setupSkinUserCss( $out );
+ $out->addModuleStyles( 'mediawiki.skinning.interface' );
+ }
+
+ // Skip work and hooks for stuff we don't use
+
+ function buildSidebar() {
+ return array();
+ }
+
+ function getNewtalks() {
+ return '';
+ }
+
+ function getSiteNotice() {
+ return '';
+ }
+
+ public function getLanguages() {
+ return array();
+ }
+
+ protected function buildPersonalUrls() {
+ return array();
+ }
+
+ protected function buildContentNavigationUrls() {
+ return array();
+ }
+
+ protected function buildNavUrls() {
+ return array();
+ }
+}
diff --git a/includes/skins/SkinApiTemplate.php b/includes/skins/SkinApiTemplate.php
new file mode 100644
index 00000000..97b70382
--- /dev/null
+++ b/includes/skins/SkinApiTemplate.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Extremely basic "skin" for API output, which needs to output a page without
+ * the usual skin elements but still using CSS, JS, and such via OutputPage and
+ * ResourceLoader.
+ *
+ * Created on Sep 08, 2014
+ *
+ * Copyright © 2014 Brad Jorsch <bjorsch@wikimedia.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * BaseTemplate class for the 'apioutput' skin
+ * @since 1.25
+ */
+class SkinApiTemplate extends BaseTemplate {
+
+ public function execute() {
+ $this->html( 'headelement' ) ?>
+
+ <div class="mw-body" role="main">
+ <h1 class="firstHeading"><?php $this->html( 'title' ) ?></h1>
+ <div class="mw-body-content">
+ <?php $this->html( 'bodytext' ) ?>
+ </div>
+ </div>
+
+ <?php $this->printTrail() ?>
+ </body></html>
+<?php
+ }
+
+ // Skip work and hooks for stuff we don't use
+
+ function getToolbox() {
+ return array();
+ }
+
+ function getPersonalTools() {
+ return array();
+ }
+
+ function getSidebar( $options = array() ) {
+ return array();
+ }
+}
diff --git a/includes/skins/SkinFactory.php b/includes/skins/SkinFactory.php
index fb408577..ffbe6293 100644
--- a/includes/skins/SkinFactory.php
+++ b/includes/skins/SkinFactory.php
@@ -40,13 +40,6 @@ class SkinFactory {
* @var array
*/
private $displayNames = array();
- /**
- * Map of name => class name without "Skin" prefix, for legacy skins using the autodiscovery
- * mechanism
- *
- * @var array
- */
- private $legacySkins = array();
/**
* @var SkinFactory
@@ -83,109 +76,13 @@ class SkinFactory {
}
/**
- * @return array
- */
- private function getLegacySkinNames() {
- static $skinsInitialised = false;
-
- if ( !$skinsInitialised || !count( $this->legacySkins ) ) {
- # Get a list of available skins
- # Build using the regular expression '^(.*).php$'
- # Array keys are all lower case, array value keep the case used by filename
- #
- wfProfileIn( __METHOD__ . '-init' );
-
- global $wgStyleDirectory;
-
- $skinDir = dir( $wgStyleDirectory );
-
- if ( $skinDir !== false && $skinDir !== null ) {
- # while code from www.php.net
- while ( false !== ( $file = $skinDir->read() ) ) {
- // Skip non-PHP files, hidden files, and '.dep' includes
- $matches = array();
-
- if ( preg_match( '/^([^.]*)\.php$/', $file, $matches ) ) {
- $aSkin = $matches[1];
-
- // Explicitly disallow loading core skins via the autodiscovery mechanism.
- //
- // They should be loaded already (in a non-autodicovery way), but old files might still
- // exist on the server because our MW version upgrade process is widely documented as
- // requiring just copying over all files, without removing old ones.
- //
- // This is one of the reasons we should have never used autodiscovery in the first
- // place. This hack can be safely removed when autodiscovery is gone.
- if ( in_array( $aSkin, array( 'CologneBlue', 'Modern', 'MonoBook', 'Vector' ) ) ) {
- wfLogWarning(
- "An old copy of the $aSkin skin was found in your skins/ directory. " .
- "You should remove it to avoid problems in the future." .
- "See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for details."
- );
- continue;
- }
-
- wfLogWarning(
- "A skin using autodiscovery mechanism, $aSkin, was found in your skins/ directory. " .
- "The mechanism will be removed in MediaWiki 1.25 and the skin will no longer be recognized. " .
- "See https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery for information how to fix this."
- );
- $this->legacySkins[strtolower( $aSkin )] = $aSkin;
- }
- }
- $skinDir->close();
- }
- $skinsInitialised = true;
- wfProfileOut( __METHOD__ . '-init' );
- }
- return $this->legacySkins;
-
- }
-
- /**
* Returns an associative array of:
* skin name => human readable name
*
* @return array
*/
public function getSkinNames() {
- return array_merge(
- $this->getLegacySkinNames(),
- $this->displayNames
- );
- }
-
- /**
- * Get a legacy skin which uses the autodiscovery mechanism.
- *
- * @param string $name
- * @return Skin|bool False if the skin couldn't be constructed
- */
- private function getLegacySkin( $name ) {
- $skinNames = $this->getLegacySkinNames();
- if ( !isset( $skinNames[$name] ) ) {
- return false;
- }
- $skinName = $skinNames[$name];
- $className = "Skin{$skinName}";
-
- # Grab the skin class and initialise it.
- if ( !class_exists( $className ) ) {
- global $wgStyleDirectory;
- require_once "{$wgStyleDirectory}/{$skinName}.php";
-
- # Check if we got it
- if ( !class_exists( $className ) ) {
- # DO NOT die if the class isn't found. This breaks maintenance
- # scripts and can cause a user account to be unrecoverable
- # except by SQL manipulation if a previously valid skin name
- # is no longer valid.
- return false;
- }
- }
- $skin = new $className( $name );
- return $skin;
-
+ return $this->displayNames;
}
/**
@@ -197,11 +94,6 @@ class SkinFactory {
*/
public function makeSkin( $name ) {
if ( !isset( $this->factoryFunctions[$name] ) ) {
- // Check the legacy autodiscovery method of skin loading
- $legacy = $this->getLegacySkin( $name );
- if ( $legacy ) {
- return $legacy;
- }
throw new SkinException( "No registered builder available for $name." );
}
$skin = call_user_func( $this->factoryFunctions[$name], $name );
diff --git a/includes/skins/SkinFallbackTemplate.php b/includes/skins/SkinFallbackTemplate.php
index 603ee5c5..1c5f3a6f 100644
--- a/includes/skins/SkinFallbackTemplate.php
+++ b/includes/skins/SkinFallbackTemplate.php
@@ -17,16 +17,18 @@ class SkinFallbackTemplate extends BaseTemplate {
* @return array
*/
private function findInstalledSkins() {
- $styleDirectory = $this->config->get( 'StyleDirectory' ); // @todo we should inject this directly?
+ $styleDirectory = $this->config->get( 'StyleDirectory' );
// Get all subdirectories which might contains skins
$possibleSkins = scandir( $styleDirectory );
$possibleSkins = array_filter( $possibleSkins, function ( $maybeDir ) use ( $styleDirectory ) {
return $maybeDir !== '.' && $maybeDir !== '..' && is_dir( "$styleDirectory/$maybeDir" );
} );
- // Only keep the ones that contain a .php file with the same name inside
+ // Filter out skins that aren't installed
$possibleSkins = array_filter( $possibleSkins, function ( $skinDir ) use ( $styleDirectory ) {
- return is_file( "$styleDirectory/$skinDir/$skinDir.php" );
+ return
+ is_file( "$styleDirectory/$skinDir/skin.json" )
+ || is_file( "$styleDirectory/$skinDir/$skinDir.php" );
} );
return $possibleSkins;
@@ -56,7 +58,7 @@ class SkinFallbackTemplate extends BaseTemplate {
} else {
$skinsInstalledText[] = $this->getMsg( 'default-skin-not-found-row-disabled' )
->params( $normalizedKey, $skin )->plain();
- $skinsInstalledSnippet[] = "require_once \"\$IP/skins/$skin/$skin.php\";";
+ $skinsInstalledSnippet[] = $this->getSnippetForSkin( $skin );
}
}
@@ -73,6 +75,21 @@ class SkinFallbackTemplate extends BaseTemplate {
}
/**
+ * Get the appropriate LocalSettings.php snippet to enable the given skin
+ *
+ * @param string $skin
+ * @return string
+ */
+ private function getSnippetForSkin( $skin ) {
+ global $IP;
+ if ( file_exists( "$IP/skins/$skin/skin.json" ) ) {
+ return "wfLoadSkin( '$skin' );";
+ } else {
+ return "require_once \"\$IP/skins/$skin/$skin.php\";";
+ }
+ }
+
+ /**
* Outputs the entire contents of the page. No navigation (other than search box), just the big
* warning message and page content.
*/
@@ -91,9 +108,7 @@ class SkinFallbackTemplate extends BaseTemplate {
</form>
<div class="mw-body" role="main">
- <h1 class="firstHeading">
- <span dir="auto"><?php $this->html( 'title' ) ?></span>
- </h1>
+ <h1 class="firstHeading"><?php $this->html( 'title' ) ?></h1>
<div class="mw-body-content">
<?php $this->html( 'bodytext' ) ?>
diff --git a/includes/skins/SkinTemplate.php b/includes/skins/SkinTemplate.php
index b66862b8..61aad921 100644
--- a/includes/skins/SkinTemplate.php
+++ b/includes/skins/SkinTemplate.php
@@ -1,7 +1,5 @@
<?php
/**
- * Base class for template-based skins.
- *
* 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
@@ -21,41 +19,8 @@
*/
/**
- * Wrapper object for MediaWiki's localization functions,
- * to be passed to the template engine.
+ * Base class for template-based skins.
*
- * @private
- * @ingroup Skins
- */
-class MediaWikiI18N {
- private $context = array();
-
- function set( $varName, $value ) {
- $this->context[$varName] = $value;
- }
-
- function translate( $value ) {
- wfProfileIn( __METHOD__ );
-
- // Hack for i18n:attributes in PHPTAL 1.0.0 dev version as of 2004-10-23
- $value = preg_replace( '/^string:/', '', $value );
-
- $value = wfMessage( $value )->text();
- // interpolate variables
- $m = array();
- while ( preg_match( '/\$([0-9]*?)/sm', $value, $m ) ) {
- list( $src, $var ) = $m;
- wfSuppressWarnings();
- $varValue = $this->context[$var];
- wfRestoreWarnings();
- $value = str_replace( $src, $varValue, $value );
- }
- wfProfileOut( __METHOD__ );
- return $value;
- }
-}
-
-/**
* Template-filler skin base class
* Formerly generic PHPTal (http://phptal.sourceforge.net/) skin
* Based on Brion's smarty skin
@@ -89,7 +54,8 @@ class SkinTemplate extends Skin {
$out->addModuleStyles( array(
'mediawiki.legacy.shared',
'mediawiki.legacy.commonPrint',
- 'mediawiki.ui.button'
+ 'mediawiki.ui.button',
+ 'mediawiki.sectionAnchor'
) );
}
@@ -198,7 +164,7 @@ class SkinTemplate extends Skin {
'lang' => $ilInterwikiCodeBCP47,
'hreflang' => $ilInterwikiCodeBCP47,
);
- wfRunHooks(
+ Hooks::run(
'SkinTemplateGetLanguageLink',
array( &$languageLink, $languageLinkTitle, $this->getTitle(), $this->getOutput() )
);
@@ -210,17 +176,13 @@ class SkinTemplate extends Skin {
}
protected function setupTemplateForOutput() {
- wfProfileIn( __METHOD__ );
$request = $this->getRequest();
$user = $this->getUser();
$title = $this->getTitle();
- wfProfileIn( __METHOD__ . '-init' );
$tpl = $this->setupTemplate( $this->template, 'skins' );
- wfProfileOut( __METHOD__ . '-init' );
- wfProfileIn( __METHOD__ . '-stuff' );
$this->thispage = $title->getPrefixedDBkey();
$this->titletxt = $title->getPrefixedText();
$this->userpage = $user->getUserPage()->getPrefixedText();
@@ -243,10 +205,6 @@ class SkinTemplate extends Skin {
$this->userpageUrlDetails = self::makeKnownUrlDetails( $this->userpage );
}
- wfProfileOut( __METHOD__ . '-stuff' );
-
- wfProfileOut( __METHOD__ );
-
return $tpl;
}
@@ -256,26 +214,22 @@ class SkinTemplate extends Skin {
* @param OutputPage $out
*/
function outputPage( OutputPage $out = null ) {
- wfProfileIn( __METHOD__ );
Profiler::instance()->setTemplated( true );
$oldContext = null;
if ( $out !== null ) {
- // @todo Add wfDeprecated in 1.20
+ // Deprecated since 1.20, note added in 1.25
+ wfDeprecated( __METHOD__, '1.25' );
$oldContext = $this->getContext();
$this->setContext( $out->getContext() );
}
$out = $this->getOutput();
- wfProfileIn( __METHOD__ . '-init' );
$this->initPage( $out );
- wfProfileOut( __METHOD__ . '-init' );
$tpl = $this->prepareQuickTemplate( $out );
// execute template
- wfProfileIn( __METHOD__ . '-execute' );
$res = $tpl->execute();
- wfProfileOut( __METHOD__ . '-execute' );
// result may be an error
$this->printOrError( $res );
@@ -284,7 +238,6 @@ class SkinTemplate extends Skin {
$this->setContext( $oldContext );
}
- wfProfileOut( __METHOD__ );
}
/**
@@ -295,18 +248,15 @@ class SkinTemplate extends Skin {
*/
protected function prepareQuickTemplate() {
global $wgContLang, $wgScript, $wgStylePath, $wgMimeType, $wgJsMimeType,
- $wgDisableCounters, $wgSitename, $wgLogo, $wgMaxCredits,
- $wgShowCreditsIfMax, $wgPageShowWatchingUsers, $wgArticlePath,
+ $wgSitename, $wgLogo, $wgMaxCredits,
+ $wgShowCreditsIfMax, $wgArticlePath,
$wgScriptPath, $wgServer;
- wfProfileIn( __METHOD__ );
-
$title = $this->getTitle();
$request = $this->getRequest();
$out = $this->getOutput();
$tpl = $this->setupTemplateForOutput();
- wfProfileIn( __METHOD__ . '-stuff2' );
$tpl->set( 'title', $out->getPageTitle() );
$tpl->set( 'pagetitle', $out->getHTMLTitle() );
$tpl->set( 'displaytitle', $out->mPageLinkTitle );
@@ -401,39 +351,17 @@ class SkinTemplate extends Skin {
$tpl->set( 'userlangattributes', $attrs );
}
- wfProfileOut( __METHOD__ . '-stuff2' );
-
- wfProfileIn( __METHOD__ . '-stuff3' );
$tpl->set( 'newtalk', $this->getNewtalks() );
$tpl->set( 'logo', $this->logoText() );
$tpl->set( 'copyright', false );
+ // No longer used
$tpl->set( 'viewcount', false );
$tpl->set( 'lastmod', false );
$tpl->set( 'credits', false );
$tpl->set( 'numberofwatchingusers', false );
if ( $out->isArticle() && $title->exists() ) {
if ( $this->isRevisionCurrent() ) {
- if ( !$wgDisableCounters ) {
- $viewcount = $this->getWikiPage()->getCount();
- if ( $viewcount ) {
- $tpl->set( 'viewcount', $this->msg( 'viewcount' )->numParams( $viewcount )->parse() );
- }
- }
-
- if ( $wgPageShowWatchingUsers ) {
- $dbr = wfGetDB( DB_SLAVE );
- $num = $dbr->selectField( 'watchlist', 'COUNT(*)',
- array( 'wl_title' => $title->getDBkey(), 'wl_namespace' => $title->getNamespace() ),
- __METHOD__
- );
- if ( $num > 0 ) {
- $tpl->set( 'numberofwatchingusers',
- $this->msg( 'number_of_watching_users_pageview' )->numParams( $num )->parse()
- );
- }
- }
-
if ( $wgMaxCredits != 0 ) {
$tpl->set( 'credits', Action::factory( 'credits', $this->getWikiPage(),
$this->getContext() )->getCredits( $wgMaxCredits, $wgShowCreditsIfMax ) );
@@ -443,9 +371,7 @@ class SkinTemplate extends Skin {
}
$tpl->set( 'copyright', $this->getCopyright() );
}
- wfProfileOut( __METHOD__ . '-stuff3' );
- wfProfileIn( __METHOD__ . '-stuff4' );
$tpl->set( 'copyrightico', $this->getCopyrightIcon() );
$tpl->set( 'poweredbyico', $this->getPoweredBy() );
$tpl->set( 'disclaimer', $this->disclaimerLink() );
@@ -455,7 +381,6 @@ class SkinTemplate extends Skin {
$tpl->set( 'footerlinks', array(
'info' => array(
'lastmod',
- 'viewcount',
'numberofwatchingusers',
'credits',
'copyright',
@@ -486,6 +411,8 @@ class SkinTemplate extends Skin {
}
}
+ $tpl->set( 'indicators', $out->getIndicators() );
+
$tpl->set( 'sitenotice', $this->getSiteNotice() );
$tpl->set( 'bottomscripts', $this->bottomScripts() );
$tpl->set( 'printfooter', $this->printSource() );
@@ -515,9 +442,7 @@ class SkinTemplate extends Skin {
} else {
$tpl->set( 'language_urls', false );
}
- wfProfileOut( __METHOD__ . '-stuff4' );
- wfProfileIn( __METHOD__ . '-stuff5' );
# Personal toolbar
$tpl->set( 'personal_urls', $this->buildPersonalUrls() );
$content_navigation = $this->buildContentNavigationUrls();
@@ -536,11 +461,11 @@ class SkinTemplate extends Skin {
$tpl->set( 'reporttime', wfReportTime() );
// original version by hansm
- if ( !wfRunHooks( 'SkinTemplateOutputPageBeforeExec', array( &$this, &$tpl ) ) ) {
+ if ( !Hooks::run( 'SkinTemplateOutputPageBeforeExec', array( &$this, &$tpl ) ) ) {
wfDebug( __METHOD__ . ": Hook SkinTemplateOutputPageBeforeExec broke outputPage execution!\n" );
}
- // Set the bodytext to another key so that skins can just output it on it's own
+ // Set the bodytext to another key so that skins can just output it on its own
// and output printfooter and debughtml separately
$tpl->set( 'bodycontent', $tpl->data['bodytext'] );
@@ -557,9 +482,7 @@ class SkinTemplate extends Skin {
// allow extensions adding stuff after the page content.
// See Skin::afterContentHook() for further documentation.
$tpl->set( 'dataAfterContent', $this->afterContentHook() );
- wfProfileOut( __METHOD__ . '-stuff5' );
- wfProfileOut( __METHOD__ );
return $tpl;
}
@@ -623,7 +546,6 @@ class SkinTemplate extends Skin {
$title = $this->getTitle();
$request = $this->getRequest();
$pageurl = $title->getLocalURL();
- wfProfileIn( __METHOD__ );
/* set up the default links for the personal toolbar */
$personal_urls = array();
@@ -755,8 +677,7 @@ class SkinTemplate extends Skin {
$personal_urls['login'] = $login_url;
}
- wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$title, $this ) );
- wfProfileOut( __METHOD__ );
+ Hooks::run( 'PersonalUrls', array( &$personal_urls, &$title, $this ) );
return $personal_urls;
}
@@ -796,12 +717,12 @@ class SkinTemplate extends Skin {
$text = $msg->text();
} else {
global $wgContLang;
- $text = $wgContLang->getFormattedNsText(
+ $text = $wgContLang->getConverter()->convertNamespace(
MWNamespace::getSubject( $title->getNamespace() ) );
}
$result = array();
- if ( !wfRunHooks( 'SkinTemplateTabAction', array( &$this,
+ if ( !Hooks::run( 'SkinTemplateTabAction', array( &$this,
$title, $message, $selected, $checkEdit,
&$classes, &$query, &$text, &$result ) ) ) {
return $result;
@@ -823,17 +744,20 @@ class SkinTemplate extends Skin {
self::checkTitle( $title, $name );
return array(
'href' => $title->getLocalURL( $urlaction ),
- 'exists' => $title->getArticleID() != 0,
+ 'exists' => $title->isKnown(),
);
}
+ /**
+ * @todo is this even used?
+ */
function makeArticleUrlDetails( $name, $urlaction = '' ) {
$title = Title::newFromText( $name );
$title = $title->getSubjectPage();
self::checkTitle( $title, $name );
return array(
'href' => $title->getLocalURL( $urlaction ),
- 'exists' => $title->getArticleID() != 0,
+ 'exists' => $title->exists(),
);
}
@@ -874,8 +798,6 @@ class SkinTemplate extends Skin {
protected function buildContentNavigationUrls() {
global $wgDisableLangConversion;
- wfProfileIn( __METHOD__ );
-
// Display tabs for the relevant title rather than always the title itself
$title = $this->getRelevantTitle();
$onPage = $title->equals( $this->getTitle() );
@@ -897,7 +819,7 @@ class SkinTemplate extends Skin {
$userCanRead = $title->quickUserCan( 'read', $user );
$preventActiveTabs = false;
- wfRunHooks( 'SkinTemplatePreventOtherActiveTabs', array( &$this, &$preventActiveTabs ) );
+ Hooks::run( 'SkinTemplatePreventOtherActiveTabs', array( &$this, &$preventActiveTabs ) );
// Checks if page is some kind of content
if ( $title->canExist() ) {
@@ -961,8 +883,6 @@ class SkinTemplate extends Skin {
);
}
- wfProfileIn( __METHOD__ . '-edit' );
-
// Checks if user can edit the current page if it exists or create it otherwise
if ( $title->quickUserCan( 'edit', $user )
&& ( $title->exists() || $title->quickUserCan( 'create', $user ) )
@@ -1019,9 +939,7 @@ class SkinTemplate extends Skin {
'primary' => true, // don't collapse this in vector
);
}
- wfProfileOut( __METHOD__ . '-edit' );
- wfProfileIn( __METHOD__ . '-live' );
// Checks if the page exists
if ( $title->exists() ) {
// Adds history view link
@@ -1030,7 +948,6 @@ class SkinTemplate extends Skin {
'text' => wfMessageFallback( "$skname-view-history", 'history_short' )
->setContext( $this->getContext() )->text(),
'href' => $title->getLocalURL( 'action=history' ),
- 'rel' => 'archives',
);
if ( $title->quickUserCan( 'delete', $user ) ) {
@@ -1056,7 +973,7 @@ class SkinTemplate extends Skin {
if ( $user->isAllowed( 'deletedhistory' ) ) {
$n = $title->isDeleted();
if ( $n ) {
- $undelTitle = SpecialPage::getTitleFor( 'Undelete' );
+ $undelTitle = SpecialPage::getTitleFor( 'Undelete', $title->getPrefixedDBkey() );
// If the user can't undelete but can view deleted
// history show them a "View .. deleted" tab instead.
$msgKey = $user->isAllowed( 'undelete' ) ? 'undelete' : 'viewdeleted';
@@ -1064,7 +981,7 @@ class SkinTemplate extends Skin {
'class' => $this->getTitle()->isSpecial( 'Undelete' ) ? 'selected' : false,
'text' => wfMessageFallback( "$skname-action-$msgKey", "{$msgKey}_short" )
->setContext( $this->getContext() )->numParams( $n )->text(),
- 'href' => $undelTitle->getLocalURL( array( 'target' => $title->getPrefixedDBkey() ) )
+ 'href' => $undelTitle->getLocalURL()
);
}
}
@@ -1082,8 +999,6 @@ class SkinTemplate extends Skin {
);
}
- wfProfileOut( __METHOD__ . '-live' );
-
// Checks if the user is logged in
if ( $this->loggedin && $user->isAllowedAll( 'viewmywatchlist', 'editmywatchlist' ) ) {
/**
@@ -1106,7 +1021,7 @@ class SkinTemplate extends Skin {
}
}
- wfRunHooks( 'SkinTemplateNavigation', array( &$this, &$content_navigation ) );
+ Hooks::run( 'SkinTemplateNavigation', array( &$this, &$content_navigation ) );
if ( $userCanRead && !$wgDisableLangConversion ) {
$pageLang = $title->getPageLanguage();
@@ -1148,12 +1063,12 @@ class SkinTemplate extends Skin {
'context' => 'subject'
);
- wfRunHooks( 'SkinTemplateNavigation::SpecialPage',
+ Hooks::run( 'SkinTemplateNavigation::SpecialPage',
array( &$this, &$content_navigation ) );
}
// Equiv to SkinTemplateContentActions
- wfRunHooks( 'SkinTemplateNavigation::Universal', array( &$this, &$content_navigation ) );
+ Hooks::run( 'SkinTemplateNavigation::Universal', array( &$this, &$content_navigation ) );
// Setup xml ids and tooltip info
foreach ( $content_navigation as $section => &$links ) {
@@ -1190,8 +1105,6 @@ class SkinTemplate extends Skin {
}
}
- wfProfileOut( __METHOD__ );
-
return $content_navigation;
}
@@ -1202,8 +1115,6 @@ class SkinTemplate extends Skin {
*/
private function buildContentActionUrls( $content_navigation ) {
- wfProfileIn( __METHOD__ );
-
// content_actions has been replaced with content_navigation for backwards
// compatibility and also for skins that just want simple tabs content_actions
// is now built by flattening the content_navigation arrays into one
@@ -1235,8 +1146,6 @@ class SkinTemplate extends Skin {
}
}
- wfProfileOut( __METHOD__ );
-
return $content_actions;
}
@@ -1247,8 +1156,6 @@ class SkinTemplate extends Skin {
protected function buildNavUrls() {
global $wgUploadNavigationUrl;
- wfProfileIn( __METHOD__ );
-
$out = $this->getOutput();
$request = $this->getRequest();
@@ -1295,7 +1202,7 @@ class SkinTemplate extends Skin {
}
// Use the copy of revision ID in case this undocumented, shady hook tries to mess with internals
- wfRunHooks( 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink',
+ Hooks::run( 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink',
array( &$this, &$nav_urls, &$revid, &$revid ) );
}
@@ -1309,7 +1216,7 @@ class SkinTemplate extends Skin {
'href' => $this->getTitle()->getLocalURL( "action=info" )
);
- if ( $this->getTitle()->getArticleID() ) {
+ if ( $this->getTitle()->exists() ) {
$nav_urls['recentchangeslinked'] = array(
'href' => SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage )->getLocalURL()
);
@@ -1353,7 +1260,6 @@ class SkinTemplate extends Skin {
}
}
- wfProfileOut( __METHOD__ );
return $nav_urls;
}
@@ -1365,759 +1271,3 @@ class SkinTemplate extends Skin {
return $this->getTitle()->getNamespaceKey();
}
}
-
-/**
- * Generic wrapper for template functions, with interface
- * compatible with what we use of PHPTAL 0.7.
- * @ingroup Skins
- */
-abstract class QuickTemplate {
-
- /** @var Config $config */
- protected $config;
-
- /**
- * @param Config $config
- */
- function __construct( Config $config = null ) {
- $this->data = array();
- $this->translator = new MediaWikiI18N();
- if ( $config === null ) {
- wfDebug( __METHOD__ . ' was called with no Config instance passed to it' );
- $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
- }
- $this->config = $config;
- }
-
- /**
- * Sets the value $value to $name
- * @param string $name
- * @param mixed $value
- */
- public function set( $name, $value ) {
- $this->data[$name] = $value;
- }
-
- /**
- * Gets the template data requested
- * @since 1.22
- * @param string $name Key for the data
- * @param mixed $default Optional default (or null)
- * @return mixed The value of the data requested or the deafult
- */
- public function get( $name, $default = null ) {
- if ( isset( $this->data[$name] ) ) {
- return $this->data[$name];
- } else {
- return $default;
- }
- }
-
- /**
- * @param string $name
- * @param mixed $value
- */
- public function setRef( $name, &$value ) {
- $this->data[$name] =& $value;
- }
-
- /**
- * @param MediaWikiI18N $t
- */
- public function setTranslator( &$t ) {
- $this->translator = &$t;
- }
-
- /**
- * Main function, used by classes that subclass QuickTemplate
- * to show the actual HTML output
- */
- abstract public function execute();
-
- /**
- * @private
- * @param string $str
- * @return string
- */
- function text( $str ) {
- echo htmlspecialchars( $this->data[$str] );
- }
-
- /**
- * @private
- * @param string $str
- * @return string
- */
- function html( $str ) {
- echo $this->data[$str];
- }
-
- /**
- * @private
- * @param string $str
- * @return string
- */
- function msg( $str ) {
- echo htmlspecialchars( $this->translator->translate( $str ) );
- }
-
- /**
- * @private
- * @param string $str
- * @return string
- */
- function msgHtml( $str ) {
- echo $this->translator->translate( $str );
- }
-
- /**
- * An ugly, ugly hack.
- * @private
- * @param string $str
- * @return string
- */
- function msgWiki( $str ) {
- global $wgOut;
-
- $text = $this->translator->translate( $str );
- echo $wgOut->parse( $text );
- }
-
- /**
- * @private
- * @param string $str
- * @return bool
- */
- function haveData( $str ) {
- return isset( $this->data[$str] );
- }
-
- /**
- * @private
- *
- * @param string $str
- * @return bool
- */
- function haveMsg( $str ) {
- $msg = $this->translator->translate( $str );
- return ( $msg != '-' ) && ( $msg != '' ); # ????
- }
-
- /**
- * Get the Skin object related to this object
- *
- * @return Skin
- */
- public function getSkin() {
- return $this->data['skin'];
- }
-
- /**
- * Fetch the output of a QuickTemplate and return it
- *
- * @since 1.23
- * @return string
- */
- public function getHTML() {
- ob_start();
- $this->execute();
- $html = ob_get_contents();
- ob_end_clean();
- return $html;
- }
-}
-
-/**
- * New base template for a skin's template extended from QuickTemplate
- * this class features helper methods that provide common ways of interacting
- * with the data stored in the QuickTemplate
- */
-abstract class BaseTemplate extends QuickTemplate {
-
- /**
- * Get a Message object with its context set
- *
- * @param string $name Message name
- * @return Message
- */
- public function getMsg( $name ) {
- return $this->getSkin()->msg( $name );
- }
-
- function msg( $str ) {
- echo $this->getMsg( $str )->escaped();
- }
-
- function msgHtml( $str ) {
- echo $this->getMsg( $str )->text();
- }
-
- function msgWiki( $str ) {
- echo $this->getMsg( $str )->parseAsBlock();
- }
-
- /**
- * Create an array of common toolbox items from the data in the quicktemplate
- * stored by SkinTemplate.
- * The resulting array is built according to a format intended to be passed
- * through makeListItem to generate the html.
- * @return array
- */
- function getToolbox() {
- wfProfileIn( __METHOD__ );
-
- $toolbox = array();
- if ( isset( $this->data['nav_urls']['whatlinkshere'] )
- && $this->data['nav_urls']['whatlinkshere']
- ) {
- $toolbox['whatlinkshere'] = $this->data['nav_urls']['whatlinkshere'];
- $toolbox['whatlinkshere']['id'] = 't-whatlinkshere';
- }
- if ( isset( $this->data['nav_urls']['recentchangeslinked'] )
- && $this->data['nav_urls']['recentchangeslinked']
- ) {
- $toolbox['recentchangeslinked'] = $this->data['nav_urls']['recentchangeslinked'];
- $toolbox['recentchangeslinked']['msg'] = 'recentchangeslinked-toolbox';
- $toolbox['recentchangeslinked']['id'] = 't-recentchangeslinked';
- }
- if ( isset( $this->data['feeds'] ) && $this->data['feeds'] ) {
- $toolbox['feeds']['id'] = 'feedlinks';
- $toolbox['feeds']['links'] = array();
- foreach ( $this->data['feeds'] as $key => $feed ) {
- $toolbox['feeds']['links'][$key] = $feed;
- $toolbox['feeds']['links'][$key]['id'] = "feed-$key";
- $toolbox['feeds']['links'][$key]['rel'] = 'alternate';
- $toolbox['feeds']['links'][$key]['type'] = "application/{$key}+xml";
- $toolbox['feeds']['links'][$key]['class'] = 'feedlink';
- }
- }
- foreach ( array( 'contributions', 'log', 'blockip', 'emailuser',
- 'userrights', 'upload', 'specialpages' ) as $special
- ) {
- if ( isset( $this->data['nav_urls'][$special] ) && $this->data['nav_urls'][$special] ) {
- $toolbox[$special] = $this->data['nav_urls'][$special];
- $toolbox[$special]['id'] = "t-$special";
- }
- }
- if ( isset( $this->data['nav_urls']['print'] ) && $this->data['nav_urls']['print'] ) {
- $toolbox['print'] = $this->data['nav_urls']['print'];
- $toolbox['print']['id'] = 't-print';
- $toolbox['print']['rel'] = 'alternate';
- $toolbox['print']['msg'] = 'printableversion';
- }
- if ( isset( $this->data['nav_urls']['permalink'] ) && $this->data['nav_urls']['permalink'] ) {
- $toolbox['permalink'] = $this->data['nav_urls']['permalink'];
- if ( $toolbox['permalink']['href'] === '' ) {
- unset( $toolbox['permalink']['href'] );
- $toolbox['ispermalink']['tooltiponly'] = true;
- $toolbox['ispermalink']['id'] = 't-ispermalink';
- $toolbox['ispermalink']['msg'] = 'permalink';
- } else {
- $toolbox['permalink']['id'] = 't-permalink';
- }
- }
- if ( isset( $this->data['nav_urls']['info'] ) && $this->data['nav_urls']['info'] ) {
- $toolbox['info'] = $this->data['nav_urls']['info'];
- $toolbox['info']['id'] = 't-info';
- }
-
- wfRunHooks( 'BaseTemplateToolbox', array( &$this, &$toolbox ) );
- wfProfileOut( __METHOD__ );
- return $toolbox;
- }
-
- /**
- * Create an array of personal tools items from the data in the quicktemplate
- * stored by SkinTemplate.
- * The resulting array is built according to a format intended to be passed
- * through makeListItem to generate the html.
- * This is in reality the same list as already stored in personal_urls
- * however it is reformatted so that you can just pass the individual items
- * to makeListItem instead of hardcoding the element creation boilerplate.
- * @return array
- */
- function getPersonalTools() {
- $personal_tools = array();
- foreach ( $this->get( 'personal_urls' ) as $key => $plink ) {
- # The class on a personal_urls item is meant to go on the <a> instead
- # of the <li> so we have to use a single item "links" array instead
- # of using most of the personal_url's keys directly.
- $ptool = array(
- 'links' => array(
- array( 'single-id' => "pt-$key" ),
- ),
- 'id' => "pt-$key",
- );
- if ( isset( $plink['active'] ) ) {
- $ptool['active'] = $plink['active'];
- }
- foreach ( array( 'href', 'class', 'text', 'dir' ) as $k ) {
- if ( isset( $plink[$k] ) ) {
- $ptool['links'][0][$k] = $plink[$k];
- }
- }
- $personal_tools[$key] = $ptool;
- }
- return $personal_tools;
- }
-
- function getSidebar( $options = array() ) {
- // Force the rendering of the following portals
- $sidebar = $this->data['sidebar'];
- if ( !isset( $sidebar['SEARCH'] ) ) {
- $sidebar['SEARCH'] = true;
- }
- if ( !isset( $sidebar['TOOLBOX'] ) ) {
- $sidebar['TOOLBOX'] = true;
- }
- if ( !isset( $sidebar['LANGUAGES'] ) ) {
- $sidebar['LANGUAGES'] = true;
- }
-
- if ( !isset( $options['search'] ) || $options['search'] !== true ) {
- unset( $sidebar['SEARCH'] );
- }
- if ( isset( $options['toolbox'] ) && $options['toolbox'] === false ) {
- unset( $sidebar['TOOLBOX'] );
- }
- if ( isset( $options['languages'] ) && $options['languages'] === false ) {
- unset( $sidebar['LANGUAGES'] );
- }
-
- $boxes = array();
- foreach ( $sidebar as $boxName => $content ) {
- if ( $content === false ) {
- continue;
- }
- switch ( $boxName ) {
- case 'SEARCH':
- // Search is a special case, skins should custom implement this
- $boxes[$boxName] = array(
- 'id' => 'p-search',
- 'header' => $this->getMsg( 'search' )->text(),
- 'generated' => false,
- 'content' => true,
- );
- break;
- case 'TOOLBOX':
- $msgObj = $this->getMsg( 'toolbox' );
- $boxes[$boxName] = array(
- 'id' => 'p-tb',
- 'header' => $msgObj->exists() ? $msgObj->text() : 'toolbox',
- 'generated' => false,
- 'content' => $this->getToolbox(),
- );
- break;
- case 'LANGUAGES':
- if ( $this->data['language_urls'] ) {
- $msgObj = $this->getMsg( 'otherlanguages' );
- $boxes[$boxName] = array(
- 'id' => 'p-lang',
- 'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
- 'generated' => false,
- 'content' => $this->data['language_urls'],
- );
- }
- break;
- default:
- $msgObj = $this->getMsg( $boxName );
- $boxes[$boxName] = array(
- 'id' => "p-$boxName",
- 'header' => $msgObj->exists() ? $msgObj->text() : $boxName,
- 'generated' => true,
- 'content' => $content,
- );
- break;
- }
- }
-
- // HACK: Compatibility with extensions still using SkinTemplateToolboxEnd
- $hookContents = null;
- if ( isset( $boxes['TOOLBOX'] ) ) {
- ob_start();
- // We pass an extra 'true' at the end so extensions using BaseTemplateToolbox
- // can abort and avoid outputting double toolbox links
- wfRunHooks( 'SkinTemplateToolboxEnd', array( &$this, true ) );
- $hookContents = ob_get_contents();
- ob_end_clean();
- if ( !trim( $hookContents ) ) {
- $hookContents = null;
- }
- }
- // END hack
-
- if ( isset( $options['htmlOnly'] ) && $options['htmlOnly'] === true ) {
- foreach ( $boxes as $boxName => $box ) {
- if ( is_array( $box['content'] ) ) {
- $content = '<ul>';
- foreach ( $box['content'] as $key => $val ) {
- $content .= "\n " . $this->makeListItem( $key, $val );
- }
- // HACK, shove the toolbox end onto the toolbox if we're rendering itself
- if ( $hookContents ) {
- $content .= "\n $hookContents";
- }
- // END hack
- $content .= "\n</ul>\n";
- $boxes[$boxName]['content'] = $content;
- }
- }
- } else {
- if ( $hookContents ) {
- $boxes['TOOLBOXEND'] = array(
- 'id' => 'p-toolboxend',
- 'header' => $boxes['TOOLBOX']['header'],
- 'generated' => false,
- 'content' => "<ul>{$hookContents}</ul>",
- );
- // HACK: Make sure that TOOLBOXEND is sorted next to TOOLBOX
- $boxes2 = array();
- foreach ( $boxes as $key => $box ) {
- if ( $key === 'TOOLBOXEND' ) {
- continue;
- }
- $boxes2[$key] = $box;
- if ( $key === 'TOOLBOX' ) {
- $boxes2['TOOLBOXEND'] = $boxes['TOOLBOXEND'];
- }
- }
- $boxes = $boxes2;
- // END hack
- }
- }
-
- return $boxes;
- }
-
- /**
- * @param string $name
- */
- protected function renderAfterPortlet( $name ) {
- $content = '';
- wfRunHooks( 'BaseTemplateAfterPortlet', array( $this, $name, &$content ) );
-
- if ( $content !== '' ) {
- echo "<div class='after-portlet after-portlet-$name'>$content</div>";
- }
-
- }
-
- /**
- * Makes a link, usually used by makeListItem to generate a link for an item
- * in a list used in navigation lists, portlets, portals, sidebars, etc...
- *
- * @param string $key Usually a key from the list you are generating this
- * link from.
- * @param array $item Contains some of a specific set of keys.
- *
- * The text of the link will be generated either from the contents of the
- * "text" key in the $item array, if a "msg" key is present a message by
- * that name will be used, and if neither of those are set the $key will be
- * used as a message name.
- *
- * If a "href" key is not present makeLink will just output htmlescaped text.
- * The "href", "id", "class", "rel", and "type" keys are used as attributes
- * for the link if present.
- *
- * If an "id" or "single-id" (if you don't want the actual id to be output
- * on the link) is present it will be used to generate a tooltip and
- * accesskey for the link.
- *
- * The keys "context" and "primary" are ignored; these keys are used
- * internally by skins and are not supposed to be included in the HTML
- * output.
- *
- * If you don't want an accesskey, set $item['tooltiponly'] = true;
- *
- * @param array $options Can be used to affect the output of a link.
- * Possible options are:
- * - 'text-wrapper' key to specify a list of elements to wrap the text of
- * a link in. This should be an array of arrays containing a 'tag' and
- * optionally an 'attributes' key. If you only have one element you don't
- * need to wrap it in another array. eg: To use <a><span>...</span></a>
- * in all links use array( 'text-wrapper' => array( 'tag' => 'span' ) )
- * for your options.
- * - 'link-class' key can be used to specify additional classes to apply
- * to all links.
- * - 'link-fallback' can be used to specify a tag to use instead of "<a>"
- * if there is no link. eg: If you specify 'link-fallback' => 'span' than
- * any non-link will output a "<span>" instead of just text.
- *
- * @return string
- */
- function makeLink( $key, $item, $options = array() ) {
- if ( isset( $item['text'] ) ) {
- $text = $item['text'];
- } else {
- $text = $this->translator->translate( isset( $item['msg'] ) ? $item['msg'] : $key );
- }
-
- $html = htmlspecialchars( $text );
-
- if ( isset( $options['text-wrapper'] ) ) {
- $wrapper = $options['text-wrapper'];
- if ( isset( $wrapper['tag'] ) ) {
- $wrapper = array( $wrapper );
- }
- while ( count( $wrapper ) > 0 ) {
- $element = array_pop( $wrapper );
- $html = Html::rawElement( $element['tag'], isset( $element['attributes'] )
- ? $element['attributes']
- : null, $html );
- }
- }
-
- if ( isset( $item['href'] ) || isset( $options['link-fallback'] ) ) {
- $attrs = $item;
- foreach ( array( 'single-id', 'text', 'msg', 'tooltiponly', 'context', 'primary' ) as $k ) {
- unset( $attrs[$k] );
- }
-
- if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
- $item['single-id'] = $item['id'];
- }
- if ( isset( $item['single-id'] ) ) {
- if ( isset( $item['tooltiponly'] ) && $item['tooltiponly'] ) {
- $title = Linker::titleAttrib( $item['single-id'] );
- if ( $title !== false ) {
- $attrs['title'] = $title;
- }
- } else {
- $tip = Linker::tooltipAndAccesskeyAttribs( $item['single-id'] );
- if ( isset( $tip['title'] ) && $tip['title'] !== false ) {
- $attrs['title'] = $tip['title'];
- }
- if ( isset( $tip['accesskey'] ) && $tip['accesskey'] !== false ) {
- $attrs['accesskey'] = $tip['accesskey'];
- }
- }
- }
- if ( isset( $options['link-class'] ) ) {
- if ( isset( $attrs['class'] ) ) {
- $attrs['class'] .= " {$options['link-class']}";
- } else {
- $attrs['class'] = $options['link-class'];
- }
- }
- $html = Html::rawElement( isset( $attrs['href'] )
- ? 'a'
- : $options['link-fallback'], $attrs, $html );
- }
-
- return $html;
- }
-
- /**
- * Generates a list item for a navigation, portlet, portal, sidebar... list
- *
- * @param string $key Usually a key from the list you are generating this link from.
- * @param array $item Array of list item data containing some of a specific set of keys.
- * The "id", "class" and "itemtitle" keys will be used as attributes for the list item,
- * if "active" contains a value of true a "active" class will also be appended to class.
- *
- * @param array $options
- *
- * If you want something other than a "<li>" you can pass a tag name such as
- * "tag" => "span" in the $options array to change the tag used.
- * link/content data for the list item may come in one of two forms
- * A "links" key may be used, in which case it should contain an array with
- * a list of links to include inside the list item, see makeLink for the
- * format of individual links array items.
- *
- * Otherwise the relevant keys from the list item $item array will be passed
- * to makeLink instead. Note however that "id" and "class" are used by the
- * list item directly so they will not be passed to makeLink
- * (however the link will still support a tooltip and accesskey from it)
- * If you need an id or class on a single link you should include a "links"
- * array with just one link item inside of it. If you want to add a title
- * to the list item itself, you can set "itemtitle" to the value.
- * $options is also passed on to makeLink calls
- *
- * @return string
- */
- function makeListItem( $key, $item, $options = array() ) {
- if ( isset( $item['links'] ) ) {
- $links = array();
- foreach ( $item['links'] as $linkKey => $link ) {
- $links[] = $this->makeLink( $linkKey, $link, $options );
- }
- $html = implode( ' ', $links );
- } else {
- $link = $item;
- // These keys are used by makeListItem and shouldn't be passed on to the link
- foreach ( array( 'id', 'class', 'active', 'tag', 'itemtitle' ) as $k ) {
- unset( $link[$k] );
- }
- if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
- // The id goes on the <li> not on the <a> for single links
- // but makeSidebarLink still needs to know what id to use when
- // generating tooltips and accesskeys.
- $link['single-id'] = $item['id'];
- }
- $html = $this->makeLink( $key, $link, $options );
- }
-
- $attrs = array();
- foreach ( array( 'id', 'class' ) as $attr ) {
- if ( isset( $item[$attr] ) ) {
- $attrs[$attr] = $item[$attr];
- }
- }
- if ( isset( $item['active'] ) && $item['active'] ) {
- if ( !isset( $attrs['class'] ) ) {
- $attrs['class'] = '';
- }
- $attrs['class'] .= ' active';
- $attrs['class'] = trim( $attrs['class'] );
- }
- if ( isset( $item['itemtitle'] ) ) {
- $attrs['title'] = $item['itemtitle'];
- }
- return Html::rawElement( isset( $options['tag'] ) ? $options['tag'] : 'li', $attrs, $html );
- }
-
- function makeSearchInput( $attrs = array() ) {
- $realAttrs = array(
- 'type' => 'search',
- 'name' => 'search',
- 'placeholder' => wfMessage( 'searchsuggest-search' )->text(),
- 'value' => $this->get( 'search', '' ),
- );
- $realAttrs = array_merge( $realAttrs, Linker::tooltipAndAccesskeyAttribs( 'search' ), $attrs );
- return Html::element( 'input', $realAttrs );
- }
-
- function makeSearchButton( $mode, $attrs = array() ) {
- switch ( $mode ) {
- case 'go':
- case 'fulltext':
- $realAttrs = array(
- 'type' => 'submit',
- 'name' => $mode,
- 'value' => $this->translator->translate(
- $mode == 'go' ? 'searcharticle' : 'searchbutton' ),
- );
- $realAttrs = array_merge(
- $realAttrs,
- Linker::tooltipAndAccesskeyAttribs( "search-$mode" ),
- $attrs
- );
- return Html::element( 'input', $realAttrs );
- case 'image':
- $buttonAttrs = array(
- 'type' => 'submit',
- 'name' => 'button',
- );
- $buttonAttrs = array_merge(
- $buttonAttrs,
- Linker::tooltipAndAccesskeyAttribs( 'search-fulltext' ),
- $attrs
- );
- unset( $buttonAttrs['src'] );
- unset( $buttonAttrs['alt'] );
- unset( $buttonAttrs['width'] );
- unset( $buttonAttrs['height'] );
- $imgAttrs = array(
- 'src' => $attrs['src'],
- 'alt' => isset( $attrs['alt'] )
- ? $attrs['alt']
- : $this->translator->translate( 'searchbutton' ),
- 'width' => isset( $attrs['width'] ) ? $attrs['width'] : null,
- 'height' => isset( $attrs['height'] ) ? $attrs['height'] : null,
- );
- return Html::rawElement( 'button', $buttonAttrs, Html::element( 'img', $imgAttrs ) );
- default:
- throw new MWException( 'Unknown mode passed to BaseTemplate::makeSearchButton' );
- }
- }
-
- /**
- * Returns an array of footerlinks trimmed down to only those footer links that
- * are valid.
- * If you pass "flat" as an option then the returned array will be a flat array
- * of footer icons instead of a key/value array of footerlinks arrays broken
- * up into categories.
- * @param string $option
- * @return array|mixed
- */
- function getFooterLinks( $option = null ) {
- $footerlinks = $this->get( 'footerlinks' );
-
- // Reduce footer links down to only those which are being used
- $validFooterLinks = array();
- foreach ( $footerlinks as $category => $links ) {
- $validFooterLinks[$category] = array();
- foreach ( $links as $link ) {
- if ( isset( $this->data[$link] ) && $this->data[$link] ) {
- $validFooterLinks[$category][] = $link;
- }
- }
- if ( count( $validFooterLinks[$category] ) <= 0 ) {
- unset( $validFooterLinks[$category] );
- }
- }
-
- if ( $option == 'flat' ) {
- // fold footerlinks into a single array using a bit of trickery
- $validFooterLinks = call_user_func_array(
- 'array_merge',
- array_values( $validFooterLinks )
- );
- }
-
- return $validFooterLinks;
- }
-
- /**
- * Returns an array of footer icons filtered down by options relevant to how
- * the skin wishes to display them.
- * If you pass "icononly" as the option all footer icons which do not have an
- * image icon set will be filtered out.
- * If you pass "nocopyright" then MediaWiki's copyright icon will not be included
- * in the list of footer icons. This is mostly useful for skins which only
- * display the text from footericons instead of the images and don't want a
- * duplicate copyright statement because footerlinks already rendered one.
- * @param string $option
- * @return string
- */
- function getFooterIcons( $option = null ) {
- // Generate additional footer icons
- $footericons = $this->get( 'footericons' );
-
- if ( $option == 'icononly' ) {
- // Unset any icons which don't have an image
- foreach ( $footericons as &$footerIconsBlock ) {
- foreach ( $footerIconsBlock as $footerIconKey => $footerIcon ) {
- if ( !is_string( $footerIcon ) && !isset( $footerIcon['src'] ) ) {
- unset( $footerIconsBlock[$footerIconKey] );
- }
- }
- }
- // Redo removal of any empty blocks
- foreach ( $footericons as $footerIconsKey => &$footerIconsBlock ) {
- if ( count( $footerIconsBlock ) <= 0 ) {
- unset( $footericons[$footerIconsKey] );
- }
- }
- } elseif ( $option == 'nocopyright' ) {
- unset( $footericons['copyright']['copyright'] );
- if ( count( $footericons['copyright'] ) <= 0 ) {
- unset( $footericons['copyright'] );
- }
- }
-
- return $footericons;
- }
-
- /**
- * Output the basic end-page trail including bottomscripts, reporttime, and
- * debug stuff. This should be called right before outputting the closing
- * body and html tags.
- */
- function printTrail() { ?>
-<?php echo MWDebug::getDebugHTML( $this->getSkin()->getContext() ); ?>
-<?php $this->html( 'bottomscripts' ); /* JS call to runBodyOnloadHook */ ?>
-<?php $this->html( 'reporttime' ) ?>
-<?php
- }
-}
diff --git a/includes/specialpage/ChangesListSpecialPage.php b/includes/specialpage/ChangesListSpecialPage.php
index c28aa867..b9132358 100644
--- a/includes/specialpage/ChangesListSpecialPage.php
+++ b/includes/specialpage/ChangesListSpecialPage.php
@@ -65,6 +65,12 @@ abstract class ChangesListSpecialPage extends SpecialPage {
$batch->add( NS_USER, $row->rc_user_text );
$batch->add( NS_USER_TALK, $row->rc_user_text );
$batch->add( $row->rc_namespace, $row->rc_title );
+ if ( $row->rc_source === RecentChange::SRC_LOG ) {
+ $formatter = LogFormatter::newFromRow( $row );
+ foreach ( $formatter->getPreloadTitles() as $title ) {
+ $batch->addObj( $title );
+ }
+ }
}
$batch->execute();
@@ -154,7 +160,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
protected function getCustomFilters() {
if ( $this->customFilters === null ) {
$this->customFilters = array();
- wfRunHooks( 'ChangesListSpecialPageFilters', array( $this, &$this->customFilters ) );
+ Hooks::run( 'ChangesListSpecialPageFilters', array( $this, &$this->customFilters ) );
}
return $this->customFilters;
@@ -309,17 +315,19 @@ abstract class ChangesListSpecialPage extends SpecialPage {
);
}
- protected function runMainQueryHook( &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts ) {
- return wfRunHooks(
+ protected function runMainQueryHook( &$tables, &$fields, &$conds,
+ &$query_options, &$join_conds, $opts
+ ) {
+ return Hooks::run(
'ChangesListSpecialPageQuery',
array( $this->getName(), &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts )
);
}
/**
- * Return a DatabaseBase object for reading
+ * Return a IDatabase object for reading
*
- * @return DatabaseBase
+ * @return IDatabase
*/
protected function getDB() {
return wfGetDB( DB_SLAVE );
diff --git a/includes/specialpage/FormSpecialPage.php b/includes/specialpage/FormSpecialPage.php
index bf86ab2e..90567617 100644
--- a/includes/specialpage/FormSpecialPage.php
+++ b/includes/specialpage/FormSpecialPage.php
@@ -75,21 +75,28 @@ abstract class FormSpecialPage extends SpecialPage {
}
/**
+ * Get display format for the form. See HTMLForm documentation for available values.
+ *
+ * @since 1.25
+ * @return string
+ */
+ protected function getDisplayFormat() {
+ return 'table';
+ }
+
+ /**
* Get the HTMLForm to control behavior
* @return HTMLForm|null
*/
protected function getForm() {
- $this->fields = $this->getFormFields();
-
- $form = new HTMLForm( $this->fields, $this->getContext(), $this->getMessagePrefix() );
+ $form = HTMLForm::factory(
+ $this->getDisplayFormat(),
+ $this->getFormFields(),
+ $this->getContext(),
+ $this->getMessagePrefix()
+ );
$form->setSubmitCallback( array( $this, 'onSubmit' ) );
- // If the form is a compact vertical form, then don't output this ugly
- // fieldset surrounding it.
- // XXX Special pages can setDisplayFormat to 'vform' in alterForm(), but that
- // is called after this.
- if ( !$form->isVForm() ) {
- $form->setWrapperLegendMsg( $this->getMessagePrefix() . '-legend' );
- }
+ $form->setWrapperLegendMsg( $this->getMessagePrefix() . '-legend' );
$headerMsg = $this->msg( $this->getMessagePrefix() . '-text' );
if ( !$headerMsg->isDisabled() ) {
@@ -106,7 +113,7 @@ abstract class FormSpecialPage extends SpecialPage {
$this->alterForm( $form );
// Give hooks a chance to alter the form, adding extra fields or text etc
- wfRunHooks( 'SpecialPageBeforeFormDisplay', array( $this->getName(), &$form ) );
+ Hooks::run( 'SpecialPageBeforeFormDisplay', array( $this->getName(), &$form ) );
return $form;
}
diff --git a/includes/specialpage/ImageQueryPage.php b/includes/specialpage/ImageQueryPage.php
index 272d5337..c4e53eef 100644
--- a/includes/specialpage/ImageQueryPage.php
+++ b/includes/specialpage/ImageQueryPage.php
@@ -35,7 +35,7 @@ abstract class ImageQueryPage extends QueryPage {
*
* @param OutputPage $out OutputPage to print to
* @param Skin $skin User skin to use [unused]
- * @param DatabaseBase $dbr (read) connection to use
+ * @param IDatabase $dbr (read) connection to use
* @param ResultWrapper $res Result pointer
* @param int $num Number of available result rows
* @param int $offset Paging offset
@@ -59,7 +59,7 @@ abstract class ImageQueryPage extends QueryPage {
}
}
- $out->addHTML( $gallery->toHtml() );
+ $out->addHTML( $gallery->toHTML() );
}
}
diff --git a/includes/specialpage/PageQueryPage.php b/includes/specialpage/PageQueryPage.php
index afc02271..d72744b1 100644
--- a/includes/specialpage/PageQueryPage.php
+++ b/includes/specialpage/PageQueryPage.php
@@ -32,7 +32,7 @@ abstract class PageQueryPage extends QueryPage {
* like page existence and information for stub color and redirect hints.
* This should be done for live data and cached data.
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
public function preprocessResults( $db, $res ) {
diff --git a/includes/specialpage/QueryPage.php b/includes/specialpage/QueryPage.php
index b229e06e..1ff7e3fb 100644
--- a/includes/specialpage/QueryPage.php
+++ b/includes/specialpage/QueryPage.php
@@ -60,7 +60,6 @@ abstract class QueryPage extends SpecialPage {
* @return array
*/
public static function getPages() {
- global $wgDisableCounters;
static $qp = null;
if ( $qp === null ) {
@@ -82,7 +81,7 @@ abstract class QueryPage extends SpecialPage {
array( 'MostimagesPage', 'Mostimages' ),
array( 'MostinterwikisPage', 'Mostinterwikis' ),
array( 'MostlinkedCategoriesPage', 'Mostlinkedcategories' ),
- array( 'MostlinkedtemplatesPage', 'Mostlinkedtemplates' ),
+ array( 'MostlinkedTemplatesPage', 'Mostlinkedtemplates' ),
array( 'MostlinkedPage', 'Mostlinked' ),
array( 'MostrevisionsPage', 'Mostrevisions' ),
array( 'FewestrevisionsPage', 'Fewestrevisions' ),
@@ -97,15 +96,11 @@ abstract class QueryPage extends SpecialPage {
array( 'WantedFilesPage', 'Wantedfiles' ),
array( 'WantedPagesPage', 'Wantedpages' ),
array( 'WantedTemplatesPage', 'Wantedtemplates' ),
- array( 'UnwatchedPagesPage', 'Unwatchedpages' ),
+ array( 'UnwatchedpagesPage', 'Unwatchedpages' ),
array( 'UnusedtemplatesPage', 'Unusedtemplates' ),
array( 'WithoutInterwikiPage', 'Withoutinterwiki' ),
);
- wfRunHooks( 'wgQueryPages', array( &$qp ) );
-
- if ( !$wgDisableCounters ) {
- $qp[] = array( 'PopularPagesPage', 'Popularpages' );
- }
+ Hooks::run( 'wgQueryPages', array( &$qp ) );
}
return $qp;
@@ -351,7 +346,7 @@ abstract class QueryPage extends SpecialPage {
/**
* Get a DB connection to be used for slow recache queries
- * @return DatabaseBase
+ * @return IDatabase
*/
function getRecacheDB() {
return wfGetDB( DB_SLAVE, array( $this->getName(), 'QueryPage::recache', 'vslow' ) );
@@ -581,7 +576,7 @@ abstract class QueryPage extends SpecialPage {
*
* @param OutputPage $out OutputPage to print to
* @param Skin $skin User skin to use
- * @param DatabaseBase $dbr Database (read) connection to use
+ * @param IDatabase $dbr Database (read) connection to use
* @param ResultWrapper $res Result pointer
* @param int $num Number of available result rows
* @param int $offset Paging offset
@@ -654,7 +649,7 @@ abstract class QueryPage extends SpecialPage {
/**
* Do any necessary preprocessing of the result object.
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
diff --git a/includes/specialpage/RedirectSpecialPage.php b/includes/specialpage/RedirectSpecialPage.php
index 4226ee02..2e6e55a7 100644
--- a/includes/specialpage/RedirectSpecialPage.php
+++ b/includes/specialpage/RedirectSpecialPage.php
@@ -203,7 +203,7 @@ abstract class RedirectSpecialArticle extends RedirectSpecialPage {
'ctype', 'maxage', 'smaxage',
);
- wfRunHooks( "RedirectSpecialArticleRedirectParams", array( &$redirectParams ) );
+ Hooks::run( "RedirectSpecialArticleRedirectParams", array( &$redirectParams ) );
$this->mAllowedRedirectParams = $redirectParams;
}
}
diff --git a/includes/specialpage/SpecialPage.php b/includes/specialpage/SpecialPage.php
index c0a94af1..a7a43b0e 100644
--- a/includes/specialpage/SpecialPage.php
+++ b/includes/specialpage/SpecialPage.php
@@ -303,26 +303,46 @@ class SpecialPage {
* - `prefixSearchSubpages( "" )` should return `array( foo", "bar", "baz" )`
*
* @param string $search Prefix to search for
- * @param int $limit Maximum number of results to return
+ * @param int $limit Maximum number of results to return (usually 10)
+ * @param int $offset Number of results to skip (usually 0)
* @return string[] Matching subpages
*/
- public function prefixSearchSubpages( $search, $limit = 10 ) {
+ public function prefixSearchSubpages( $search, $limit, $offset ) {
+ $subpages = $this->getSubpagesForPrefixSearch();
+ if ( !$subpages ) {
+ return array();
+ }
+
+ return self::prefixSearchArray( $search, $limit, $subpages, $offset );
+ }
+
+ /**
+ * Return an array of subpages that this special page will accept for prefix
+ * searches. If this method requires a query you might instead want to implement
+ * prefixSearchSubpages() directly so you can support $limit and $offset. This
+ * method is better for static-ish lists of things.
+ *
+ * @return string[] subpages to search from
+ */
+ protected function getSubpagesForPrefixSearch() {
return array();
}
/**
* Helper function for implementations of prefixSearchSubpages() that
- * filter the values in memory (as oppposed to making a query).
+ * filter the values in memory (as opposed to making a query).
*
* @since 1.24
* @param string $search
* @param int $limit
* @param array $subpages
+ * @param int $offset
* @return string[]
*/
- protected static function prefixSearchArray( $search, $limit, array $subpages ) {
+ protected static function prefixSearchArray( $search, $limit, array $subpages, $offset ) {
$escaped = preg_quote( $search, '/' );
- return array_slice( preg_grep( "/^$escaped/i", $subpages ), 0, $limit );
+ return array_slice( preg_grep( "/^$escaped/i",
+ array_slice( $subpages, $offset ) ), 0, $limit );
}
/**
@@ -336,6 +356,7 @@ class SpecialPage {
if ( $this->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
$out->addModuleStyles( array(
'mediawiki.ui.input',
+ 'mediawiki.ui.radio',
'mediawiki.ui.checkbox',
) );
}
@@ -357,7 +378,7 @@ class SpecialPage {
* @param SpecialPage $this
* @param string|null $subPage
*/
- wfRunHooks( 'SpecialPageBeforeExecute', array( $this, $subPage ) );
+ Hooks::run( 'SpecialPageBeforeExecute', array( $this, $subPage ) );
$this->beforeExecute( $subPage );
$this->execute( $subPage );
@@ -371,7 +392,7 @@ class SpecialPage {
* @param SpecialPage $this
* @param string|null $subPage
*/
- wfRunHooks( 'SpecialPageAfterExecute', array( $this, $subPage ) );
+ Hooks::run( 'SpecialPageAfterExecute', array( $this, $subPage ) );
}
/**
@@ -612,6 +633,26 @@ class SpecialPage {
}
/**
+ * Adds help link with an icon via page indicators.
+ * Link target can be overridden by a local message containing a wikilink:
+ * the message key is: lowercase special page name + '-helppage'.
+ * @param string $to Target MediaWiki.org page title or encoded URL.
+ * @param bool $overrideBaseUrl Whether $url is a full URL, to avoid MW.o.
+ * @since 1.25
+ */
+ public function addHelpLink( $to, $overrideBaseUrl = false ) {
+ global $wgContLang;
+ $msg = $this->msg( $wgContLang->lc( $this->getName() ) . '-helppage' );
+
+ if ( !$msg->isDisabled() ) {
+ $helpUrl = Skin::makeUrl( $msg->plain() );
+ $this->getOutput()->addHelpLink( $helpUrl, true );
+ } else {
+ $this->getOutput()->addHelpLink( $to, $overrideBaseUrl );
+ }
+ }
+
+ /**
* Get the group that the special page belongs in on Special:SpecialPage
* Use this method, instead of getGroupName to allow customization
* of the group name from the wiki side
diff --git a/includes/specialpage/SpecialPageFactory.php b/includes/specialpage/SpecialPageFactory.php
index 23fdc71a..dedfcb6a 100644
--- a/includes/specialpage/SpecialPageFactory.php
+++ b/includes/specialpage/SpecialPageFactory.php
@@ -47,7 +47,7 @@ class SpecialPageFactory {
/**
* List of special page names to the subclass of SpecialPage which handles them.
*/
- private static $list = array(
+ private static $coreList = array(
// Maintenance Reports
'BrokenRedirects' => 'BrokenRedirectsPage',
'Deadendpages' => 'DeadendPagesPage',
@@ -59,7 +59,7 @@ class SpecialPageFactory {
'Withoutinterwiki' => 'WithoutInterwikiPage',
'Protectedpages' => 'SpecialProtectedpages',
'Protectedtitles' => 'SpecialProtectedtitles',
- 'Shortpages' => 'ShortpagesPage',
+ 'Shortpages' => 'ShortPagesPage',
'Uncategorizedcategories' => 'UncategorizedCategoriesPage',
'Uncategorizedimages' => 'UncategorizedImagesPage',
'Uncategorizedpages' => 'UncategorizedPagesPage',
@@ -156,8 +156,10 @@ class SpecialPageFactory {
'Booksources' => 'SpecialBookSources',
// Unlisted / redirects
+ 'ApiHelp' => 'SpecialApiHelp',
'Blankpage' => 'SpecialBlankpage',
'Diff' => 'SpecialDiff',
+ 'EditTags' => 'SpecialEditTags',
'Emailuser' => 'SpecialEmailUser',
'Movepage' => 'MovePageForm',
'Mycontributions' => 'SpecialMycontributions',
@@ -174,6 +176,7 @@ class SpecialPageFactory {
'Userlogout' => 'SpecialUserlogout',
);
+ private static $list;
private static $aliases;
/**
@@ -213,16 +216,13 @@ class SpecialPageFactory {
*/
private static function getPageList() {
global $wgSpecialPages;
- global $wgDisableCounters, $wgDisableInternalSearch, $wgEmailAuthentication;
+ global $wgDisableInternalSearch, $wgEmailAuthentication;
global $wgEnableEmail, $wgEnableJavaScriptTest;
global $wgPageLanguageUseDB;
- if ( !is_object( self::$list ) ) {
- wfProfileIn( __METHOD__ );
+ if ( !is_array( self::$list ) ) {
- if ( !$wgDisableCounters ) {
- self::$list['Popularpages'] = 'PopularPagesPage';
- }
+ self::$list = self::$coreList;
if ( !$wgDisableInternalSearch ) {
self::$list['Search'] = 'SpecialSearch';
@@ -250,11 +250,10 @@ class SpecialPageFactory {
// Add extension special pages
self::$list = array_merge( self::$list, $wgSpecialPages );
- // Run hooks
- // This hook can be used to remove undesired built-in special pages
- wfRunHooks( 'SpecialPage_initList', array( &self::$list ) );
+ // This hook can be used to disable unwanted core special pages
+ // or conditionally register special pages.
+ Hooks::run( 'SpecialPage_initList', array( &self::$list ) );
- wfProfileOut( __METHOD__ );
}
return self::$list;
@@ -271,12 +270,13 @@ class SpecialPageFactory {
if ( !is_object( self::$aliases ) ) {
global $wgContLang;
$aliases = $wgContLang->getSpecialPageAliases();
+ $pageList = self::getPageList();
self::$aliases = array();
$keepAlias = array();
// Force every canonical name to be an alias for itself.
- foreach ( self::getPageList() as $name => $stuff ) {
+ foreach ( $pageList as $name => $stuff ) {
$caseFoldedAlias = $wgContLang->caseFold( $name );
self::$aliases[$caseFoldedAlias] = $name;
$keepAlias[$caseFoldedAlias] = 'canonical';
@@ -413,7 +413,11 @@ class SpecialPageFactory {
// @deprecated, officially since 1.18, unofficially since forever
wfDeprecated( "Array syntax for \$wgSpecialPages is deprecated ($className), " .
"define a subclass of SpecialPage instead.", '1.18' );
- $page = MWFunction::newObj( $className, $rec );
+ $page = ObjectFactory::getObjectFromSpec( array(
+ 'class' => $className,
+ 'args' => $rec,
+ 'closure_expansion' => false,
+ ) );
} elseif ( $rec instanceof SpecialPage ) {
$page = $rec; //XXX: we should deep clone here
} else {
@@ -522,7 +526,6 @@ class SpecialPageFactory {
* @return bool
*/
public static function executePath( Title &$title, IContextSource &$context, $including = false ) {
- wfProfileIn( __METHOD__ );
// @todo FIXME: Redirects broken due to this call
$bits = explode( '/', $title->getDBkey(), 2 );
@@ -544,7 +547,6 @@ class SpecialPageFactory {
}
$context->getOutput()->showErrorPage( 'nosuchspecialpage', 'nospecialpagetext' );
- wfProfileOut( __METHOD__ );
return false;
}
@@ -564,14 +566,12 @@ class SpecialPageFactory {
$title = $page->getPageTitle( $par );
$url = $title->getFullURL( $query );
$context->getOutput()->redirect( $url );
- wfProfileOut( __METHOD__ );
return $title;
} else {
$context->setTitle( $page->getPageTitle( $par ) );
}
} elseif ( !$page->isIncludable() ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -579,11 +579,7 @@ class SpecialPageFactory {
$page->including( $including );
// Execute special page
- $profName = 'Special:' . $page->getName();
- wfProfileIn( $profName );
$page->run( $par );
- wfProfileOut( $profName );
- wfProfileOut( __METHOD__ );
return true;
}
diff --git a/includes/specialpage/WantedQueryPage.php b/includes/specialpage/WantedQueryPage.php
index be2f1e8d..c4140de1 100644
--- a/includes/specialpage/WantedQueryPage.php
+++ b/includes/specialpage/WantedQueryPage.php
@@ -37,7 +37,7 @@ abstract class WantedQueryPage extends QueryPage {
/**
* Cache page existence for performance
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
@@ -109,7 +109,7 @@ abstract class WantedQueryPage extends QueryPage {
* @note This will only be run if the page is cached (ie $wgMiserMode = true)
* unless forceExistenceCheck() is true.
* @since 1.24
- * @return boolean
+ * @return bool
*/
protected function existenceCheck( Title $title ) {
return $title->isKnown();
diff --git a/includes/specials/SpecialActiveusers.php b/includes/specials/SpecialActiveusers.php
index f983b452..5e2ee1c2 100644
--- a/includes/specials/SpecialActiveusers.php
+++ b/includes/specials/SpecialActiveusers.php
@@ -130,6 +130,8 @@ class ActiveUsersPager extends UsersPager {
}
function doBatchLookups() {
+ parent::doBatchLookups();
+
$uids = array();
foreach ( $this->mResult as $row ) {
$uids[] = $row->user_id;
@@ -178,7 +180,8 @@ class ActiveUsersPager extends UsersPager {
// Note: This is a different loop than for user rights,
// because we're reusing it to build the group links
// at the same time
- foreach ( $user->getGroups() as $group ) {
+ $groups_list = self::getGroups( intval( $row->user_id ), $this->userGroupCache );
+ foreach ( $groups_list as $group ) {
if ( in_array( $group, $this->hideGroups ) ) {
return '';
}
@@ -211,7 +214,8 @@ class ActiveUsersPager extends UsersPager {
# Username field
$out .= Xml::inputLabel( $this->msg( 'activeusers-from' )->text(),
- 'username', 'offset', 20, $this->requestedUser, array( 'tabindex' => 1 ) ) . '<br />';
+ 'username', 'offset', 20, $this->requestedUser,
+ array( 'class' => 'mw-ui-input-inline', 'tabindex' => 1 ) ) . '<br />';
$out .= Xml::checkLabel( $this->msg( 'activeusers-hidebots' )->text(),
'hidebots', 'hidebots', $this->opts->getValue( 'hidebots' ), array( 'tabindex' => 2 ) );
@@ -263,11 +267,22 @@ class SpecialActiveUsers extends SpecialPage {
$out->wrapWikiMsg( "<div class='mw-activeusers-intro'>\n$1\n</div>",
array( 'activeusers-intro', $this->getLanguage()->formatNum( $days ) ) );
- // Occasionally merge in new updates
- $seconds = min( self::mergeActiveUsers( 600, $days ), $days * 86400 );
- // Mention the level of staleness
- $out->addWikiMsg( 'cachedspecial-viewing-cached-ttl',
- $this->getLanguage()->formatDuration( $seconds ) );
+ // Get the timestamp of the last cache update
+ $dbr = wfGetDB( DB_SLAVE, 'recentchanges' );
+ $cTime = $dbr->selectField( 'querycache_info',
+ 'qci_timestamp',
+ array( 'qci_type' => 'activeusers' )
+ );
+
+ $secondsOld = $cTime
+ ? time() - wfTimestamp( TS_UNIX, $cTime )
+ : $days * 86400; // fully stale :)
+
+ if ( $secondsOld > 0 ) {
+ // Mention the level of staleness
+ $out->addWikiMsg( 'cachedspecial-viewing-cached-ttl',
+ $this->getLanguage()->formatDuration( $secondsOld ) );
+ }
$up = new ActiveUsersPager( $this->getContext(), null, $par );
@@ -289,149 +304,4 @@ class SpecialActiveUsers extends SpecialPage {
protected function getGroupName() {
return 'users';
}
-
- /**
- * @param int $period Seconds (do updates no more often than this)
- * @param int $days How many days user must be idle before he is considered inactive
- * @return int How many seconds old the cache is
- */
- public static function mergeActiveUsers( $period, $days ) {
- $dbr = wfGetDB( DB_SLAVE );
- $cTime = $dbr->selectField( 'querycache_info',
- 'qci_timestamp',
- array( 'qci_type' => 'activeusers' )
- );
-
- if ( !wfReadOnly() ) {
- if ( !$cTime || ( time() - wfTimestamp( TS_UNIX, $cTime ) ) > $period ) {
- $dbw = wfGetDB( DB_MASTER );
- if ( $dbw->estimateRowCount( 'recentchanges' ) <= 10000 ) {
- $window = $days * 86400; // small wiki
- } else {
- $window = $period * 2;
- }
- $cTime = self::doQueryCacheUpdate( $dbw, $days, $window ) ?: $cTime;
- }
- }
-
- return ( time() -
- ( $cTime ? wfTimestamp( TS_UNIX, $cTime ) : $days * 86400 ) );
- }
-
- /**
- * @param DatabaseBase $dbw Passed in from updateSpecialPages.php
- * @return void
- */
- public static function cacheUpdate( DatabaseBase $dbw ) {
- global $wgActiveUserDays;
-
- self::doQueryCacheUpdate( $dbw, $wgActiveUserDays, $wgActiveUserDays * 86400 );
- }
-
- /**
- * Update the query cache as needed
- *
- * @param DatabaseBase $dbw
- * @param int $days How many days user must be idle before he is considered inactive
- * @param int $window Maximum time range of new data to scan (in seconds)
- * @return int|bool UNIX timestamp the cache is now up-to-date as of (false on error)
- */
- protected static function doQueryCacheUpdate( DatabaseBase $dbw, $days, $window ) {
- $lockKey = wfWikiID() . '-activeusers';
- if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
- return false; // exclusive update (avoids duplicate entries)
- }
-
- $now = time();
- $cTime = $dbw->selectField( 'querycache_info',
- 'qci_timestamp',
- array( 'qci_type' => 'activeusers' )
- );
- $cTimeUnix = $cTime ? wfTimestamp( TS_UNIX, $cTime ) : 1;
-
- // Pick the date range to fetch from. This is normally from the last
- // update to till the present time, but has a limited window for sanity.
- // If the window is limited, multiple runs are need to fully populate it.
- $sTimestamp = max( $cTimeUnix, $now - $days * 86400 );
- $eTimestamp = min( $sTimestamp + $window, $now );
-
- // Get all the users active since the last update
- $res = $dbw->select(
- array( 'recentchanges' ),
- array( 'rc_user_text', 'lastedittime' => 'MAX(rc_timestamp)' ),
- array(
- 'rc_user > 0', // actual accounts
- 'rc_type != ' . $dbw->addQuotes( RC_EXTERNAL ), // no wikidata
- 'rc_log_type IS NULL OR rc_log_type != ' . $dbw->addQuotes( 'newusers' ),
- 'rc_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $sTimestamp ) ),
- 'rc_timestamp <= ' . $dbw->addQuotes( $dbw->timestamp( $eTimestamp ) )
- ),
- __METHOD__,
- array(
- 'GROUP BY' => array( 'rc_user_text' ),
- 'ORDER BY' => 'NULL' // avoid filesort
- )
- );
- $names = array();
- foreach ( $res as $row ) {
- $names[$row->rc_user_text] = $row->lastedittime;
- }
-
- // Rotate out users that have not edited in too long (according to old data set)
- $dbw->delete( 'querycachetwo',
- array(
- 'qcc_type' => 'activeusers',
- 'qcc_value < ' . $dbw->addQuotes( $now - $days * 86400 ) // TS_UNIX
- ),
- __METHOD__
- );
-
- // Find which of the recently active users are already accounted for
- if ( count( $names ) ) {
- $res = $dbw->select( 'querycachetwo',
- array( 'user_name' => 'qcc_title' ),
- array(
- 'qcc_type' => 'activeusers',
- 'qcc_namespace' => NS_USER,
- 'qcc_title' => array_keys( $names ) ),
- __METHOD__
- );
- foreach ( $res as $row ) {
- unset( $names[$row->user_name] );
- }
- }
-
- // Insert the users that need to be added to the list (which their last edit time
- if ( count( $names ) ) {
- $newRows = array();
- foreach ( $names as $name => $lastEditTime ) {
- $newRows[] = array(
- 'qcc_type' => 'activeusers',
- 'qcc_namespace' => NS_USER,
- 'qcc_title' => $name,
- 'qcc_value' => wfTimestamp( TS_UNIX, $lastEditTime ),
- 'qcc_namespacetwo' => 0, // unused
- 'qcc_titletwo' => '' // unused
- );
- }
- foreach ( array_chunk( $newRows, 500 ) as $rowBatch ) {
- $dbw->insert( 'querycachetwo', $rowBatch, __METHOD__ );
- if ( !$dbw->trxLevel() ) {
- wfWaitForSlaves();
- }
- }
- }
-
- // Touch the data freshness timestamp
- $dbw->replace( 'querycache_info',
- array( 'qci_type' ),
- array( 'qci_type' => 'activeusers',
- 'qci_timestamp' => $dbw->timestamp( $eTimestamp ) ), // not always $now
- __METHOD__
- );
-
- $dbw->unlock( $lockKey, __METHOD__ );
-
- return $eTimestamp;
- }
}
diff --git a/includes/specials/SpecialAllMessages.php b/includes/specials/SpecialAllMessages.php
index 96be4d03..7b596bb0 100644
--- a/includes/specials/SpecialAllMessages.php
+++ b/includes/specials/SpecialAllMessages.php
@@ -59,6 +59,7 @@ class SpecialAllMessages extends SpecialPage {
$this->outputHeader( 'allmessagestext' );
$out->addModuleStyles( 'mediawiki.special' );
+ $this->addHelpLink( 'Help:System message' );
$this->table = new AllmessagesTablePager(
$this,
@@ -223,19 +224,17 @@ class AllMessagesTablePager extends TablePager {
}
function getAllMessages( $descending ) {
- wfProfileIn( __METHOD__ );
$messageNames = Language::getLocalisationCache()->getSubitemList( 'en', 'messages' );
+
+ // Normalise message names so they look like page titles and sort correctly - T86139
+ $messageNames = array_map( array( $this->lang, 'ucfirst' ), $messageNames );
+
if ( $descending ) {
rsort( $messageNames );
} else {
asort( $messageNames );
}
- // Normalise message names so they look like page titles
- $messageNames = array_map( array( $this->lang, 'ucfirst' ), $messageNames );
-
- wfProfileOut( __METHOD__ );
-
return $messageNames;
}
@@ -252,7 +251,6 @@ class AllMessagesTablePager extends TablePager {
*/
public static function getCustomisedStatuses( $messageNames, $langcode = 'en', $foreign = false ) {
// FIXME: This function should be moved to Language:: or something.
- wfProfileIn( __METHOD__ . '-db' );
$dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select( 'page',
@@ -288,8 +286,6 @@ class AllMessagesTablePager extends TablePager {
}
}
- wfProfileOut( __METHOD__ . '-db' );
-
return array( 'pages' => $pageFlags, 'talks' => $talkFlags );
}
diff --git a/includes/specials/SpecialAllPages.php b/includes/specials/SpecialAllPages.php
index 08b8761a..74b1f7bb 100644
--- a/includes/specials/SpecialAllPages.php
+++ b/includes/specials/SpecialAllPages.php
@@ -101,7 +101,10 @@ class SpecialAllPages extends IncludableSpecialPage {
$t = $this->getPageTitle();
$out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
- $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) ) );
+ $out .= Xml::openElement(
+ 'form',
+ array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) )
+ );
$out .= Html::hidden( 'title', $t->getPrefixedText() );
$out .= Xml::openElement( 'fieldset' );
$out .= Xml::element( 'legend', null, $this->msg( 'allpages' )->text() );
diff --git a/includes/specials/SpecialApiHelp.php b/includes/specials/SpecialApiHelp.php
new file mode 100644
index 00000000..b43911f5
--- /dev/null
+++ b/includes/specials/SpecialApiHelp.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Implements Special:ApiHelp
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Special page to redirect to API help pages, for situations where linking to
+ * the api.php endpoint is not wanted.
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialApiHelp extends UnlistedSpecialPage {
+ public function __construct() {
+ parent::__construct( 'ApiHelp' );
+ }
+
+ public function execute( $par ) {
+ if ( empty( $par ) ) {
+ $par = 'main';
+ }
+
+ // These come from transclusions
+ $request = $this->getRequest();
+ $options = array(
+ 'action' => 'help',
+ 'nolead' => true,
+ 'submodules' => $request->getCheck( 'submodules' ),
+ 'recursivesubmodules' => $request->getCheck( 'recursivesubmodules' ),
+ 'title' => $request->getVal( 'title', $this->getPageTitle( '$1' )->getPrefixedText() ),
+ );
+
+ // These are for linking from wikitext, since url parameters are a pain
+ // to do.
+ while ( true ) {
+ if ( substr( $par, 0, 4 ) === 'sub/' ) {
+ $par = substr( $par, 4 );
+ $options['submodules'] = 1;
+ continue;
+ }
+
+ if ( substr( $par, 0, 5 ) === 'rsub/' ) {
+ $par = substr( $par, 5 );
+ $options['recursivesubmodules'] = 1;
+ continue;
+ }
+
+ $moduleName = $par;
+ break;
+ }
+
+ if ( !$this->including() ) {
+ unset( $options['nolead'], $options['title'] );
+ $options['modules'] = $moduleName;
+ $link = wfAppendQuery( wfExpandUrl( wfScript( 'api' ), PROTO_CURRENT ), $options );
+ $this->getOutput()->redirect( $link );
+ return;
+ }
+
+ $main = new ApiMain( $this->getContext(), false );
+ try {
+ $module = $main->getModuleFromPath( $moduleName );
+ } catch ( UsageException $ex ) {
+ $this->getOutput()->addHTML( Html::rawElement( 'span', array( 'class' => 'error' ),
+ $this->msg( 'apihelp-no-such-module', $moduleName )->inContentLanguage()->parse()
+ ) );
+ return;
+ }
+
+ ApiHelp::getHelp( $this->getContext(), $module, $options );
+ }
+
+ public function isIncludable() {
+ return true;
+ }
+}
diff --git a/includes/specials/SpecialBlock.php b/includes/specials/SpecialBlock.php
index 3297c17a..b80d921d 100644
--- a/includes/specials/SpecialBlock.php
+++ b/includes/specials/SpecialBlock.php
@@ -98,13 +98,16 @@ class SpecialBlock extends FormSpecialPage {
$form->setWrapperLegendMsg( 'blockip-legend' );
$form->setHeaderText( '' );
$form->setSubmitCallback( array( __CLASS__, 'processUIForm' ) );
+ $form->setSubmitDestructive();
$msg = $this->alreadyBlocked ? 'ipb-change-block' : 'ipbsubmit';
$form->setSubmitTextMsg( $msg );
+ $this->addHelpLink( 'Help:Blocking users' );
+
# Don't need to do anything if the form has been posted
if ( !$this->getRequest()->wasPosted() && $this->preErrors ) {
- $s = HTMLForm::formatErrors( $this->preErrors );
+ $s = $form->formatErrors( $this->preErrors );
if ( $s ) {
$form->addHeaderText( Html::rawElement(
'div',
@@ -135,6 +138,7 @@ class SpecialBlock extends FormSpecialPage {
'autofocus' => true,
'required' => true,
'validation-callback' => array( __CLASS__, 'validateTargetField' ),
+ 'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
),
'Expiry' => array(
'type' => !count( $suggestedDurations ) ? 'text' : 'selectorother',
@@ -146,6 +150,7 @@ class SpecialBlock extends FormSpecialPage {
),
'Reason' => array(
'type' => 'selectandother',
+ 'maxlength' => 255,
'label-message' => 'ipbreason',
'options-message' => 'ipbreason-dropdown',
),
@@ -217,7 +222,7 @@ class SpecialBlock extends FormSpecialPage {
$this->maybeAlterFormDefaults( $a );
// Allow extensions to add more fields
- wfRunHooks( 'SpecialBlockModifyFormFields', array( $this, &$a ) );
+ Hooks::run( 'SpecialBlockModifyFormFields', array( $this, &$a ) );
return $a;
}
@@ -233,6 +238,14 @@ class SpecialBlock extends FormSpecialPage {
# This will be overwritten by request data
$fields['Target']['default'] = (string)$this->target;
+ if ( $this->target ) {
+ $status = self::validateTarget( $this->target, $this->getUser() );
+ if ( !$status->isOK() ) {
+ $errors = $status->getErrorsArray();
+ $this->preErrors = array_merge( $this->preErrors, $errors );
+ }
+ }
+
# This won't be
$fields['PreviousTarget']['default'] = (string)$this->target;
@@ -307,14 +320,14 @@ class SpecialBlock extends FormSpecialPage {
* @return string
*/
protected function preText() {
- $this->getOutput()->addModules( 'mediawiki.special.block' );
+ $this->getOutput()->addModules( array( 'mediawiki.special.block', 'mediawiki.userSuggest' ) );
$text = $this->msg( 'blockiptext' )->parse();
$otherBlockMessages = array();
if ( $this->target !== null ) {
# Get other blocks, i.e. from GlobalBlocking or TorBlock extension
- wfRunHooks( 'OtherBlockLogLink', array( &$otherBlockMessages, $this->target ) );
+ Hooks::run( 'OtherBlockLogLink', array( &$otherBlockMessages, $this->target ) );
if ( count( $otherBlockMessages ) ) {
$s = Html::rawElement(
@@ -623,7 +636,7 @@ class SpecialBlock extends FormSpecialPage {
# permission anyway, although the code does allow for it.
# Note: Important to use $target instead of $data['Target']
# since both $data['PreviousTarget'] and $target are normalized
- # but $data['target'] gets overriden by (non-normalized) request variable
+ # but $data['target'] gets overridden by (non-normalized) request variable
# from previous request.
if ( $target === $performer->getName() &&
( $data['PreviousTarget'] !== $target || !$data['Confirm'] )
@@ -668,7 +681,7 @@ class SpecialBlock extends FormSpecialPage {
# Recheck params here...
if ( $type != Block::TYPE_USER ) {
$data['HideUser'] = false; # IP users should not be hidden
- } elseif ( !in_array( $data['Expiry'], array( 'infinite', 'infinity', 'indefinite' ) ) ) {
+ } elseif ( !wfIsInfinity( $data['Expiry'] ) ) {
# Bad expiry.
return array( 'ipb_expiry_temp' );
} elseif ( $wgHideUserContribLimit !== false
@@ -698,7 +711,7 @@ class SpecialBlock extends FormSpecialPage {
$block->mHideName = $data['HideUser'];
$reason = array( 'hookaborted' );
- if ( !wfRunHooks( 'BlockIp', array( &$block, &$performer, &$reason ) ) ) {
+ if ( !Hooks::run( 'BlockIp', array( &$block, &$performer, &$reason ) ) ) {
return $reason;
}
@@ -759,7 +772,7 @@ class SpecialBlock extends FormSpecialPage {
$logaction = 'block';
}
- wfRunHooks( 'BlockIpComplete', array( $block, $performer ) );
+ Hooks::run( 'BlockIpComplete', array( $block, $performer ) );
# Set *_deleted fields if requested
if ( $data['HideUser'] ) {
@@ -781,22 +794,21 @@ class SpecialBlock extends FormSpecialPage {
# Prepare log parameters
$logParams = array();
- $logParams[] = $data['Expiry'];
- $logParams[] = self::blockLogFlags( $data, $type );
+ $logParams['5::duration'] = $data['Expiry'];
+ $logParams['6::flags'] = self::blockLogFlags( $data, $type );
# Make log entry, if the name is hidden, put it in the oversight log
$log_type = $data['HideUser'] ? 'suppress' : 'block';
- $log = new LogPage( $log_type );
- $log_id = $log->addEntry(
- $logaction,
- Title::makeTitle( NS_USER, $target ),
- $data['Reason'][0],
- $logParams,
- $performer
- );
+ $logEntry = new ManualLogEntry( $log_type, $logaction );
+ $logEntry->setTarget( Title::makeTitle( NS_USER, $target ) );
+ $logEntry->setComment( $data['Reason'][0] );
+ $logEntry->setPerformer( $performer );
+ $logEntry->setParameters( $logParams );
# Relate log ID to block IDs (bug 25763)
$blockIds = array_merge( array( $status['id'] ), $status['autoIds'] );
- $log->addRelations( 'ipb_id', $blockIds, $log_id );
+ $logEntry->setRelations( array( 'ipb_id' => $blockIds ) );
+ $logId = $logEntry->insert();
+ $logEntry->publish( $logId );
# Report to the user
return true;
@@ -826,7 +838,7 @@ class SpecialBlock extends FormSpecialPage {
}
list( $show, $value ) = explode( ':', $option );
- $a[htmlspecialchars( $show )] = htmlspecialchars( $value );
+ $a[$show] = $value;
}
return $a;
@@ -844,7 +856,7 @@ class SpecialBlock extends FormSpecialPage {
$infinity = wfGetDB( DB_SLAVE )->getInfinity();
}
- if ( $expiry == 'infinite' || $expiry == 'indefinite' ) {
+ if ( wfIsInfinity( $expiry ) ) {
$expiry = $infinity;
} else {
$expiry = strtotime( $expiry );
diff --git a/includes/specials/SpecialBlockList.php b/includes/specials/SpecialBlockList.php
index 456f4ecb..0ec144a2 100644
--- a/includes/specials/SpecialBlockList.php
+++ b/includes/specials/SpecialBlockList.php
@@ -47,6 +47,7 @@ class SpecialBlockList extends SpecialPage {
$lang = $this->getLanguage();
$out->setPageTitle( $this->msg( 'ipblocklist' ) );
$out->addModuleStyles( 'mediawiki.special' );
+ $out->addModules( 'mediawiki.userSuggest' );
$request = $this->getRequest();
$par = $request->getVal( 'ip', $par );
@@ -72,6 +73,7 @@ class SpecialBlockList extends SpecialPage {
'tabindex' => '1',
'size' => '45',
'default' => $this->target,
+ 'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
),
'Options' => array(
'type' => 'multiselect',
@@ -103,6 +105,7 @@ class SpecialBlockList extends SpecialPage {
$form->setMethod( 'get' );
$form->setWrapperLegendMsg( 'ipblocklist-legend' );
$form->setSubmitTextMsg( 'ipblocklist-submit' );
+ $form->setSubmitProgressive();
$form->prepareForm();
$form->displayForm( '' );
@@ -110,11 +113,6 @@ class SpecialBlockList extends SpecialPage {
}
function showList() {
- # Purge expired entries on one in every 10 queries
- if ( !mt_rand( 0, 10 ) ) {
- Block::purgeExpired();
- }
-
$conds = array();
# Is the user allowed to see hidden blocks?
if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
@@ -167,7 +165,7 @@ class SpecialBlockList extends SpecialPage {
# Check for other blocks, i.e. global/tor blocks
$otherBlockLink = array();
- wfRunHooks( 'OtherBlockLogLink', array( &$otherBlockLink, $this->target ) );
+ Hooks::run( 'OtherBlockLogLink', array( &$otherBlockLink, $this->target ) );
$out = $this->getOutput();
@@ -259,7 +257,6 @@ class BlockListPager extends TablePager {
'blocklist-nousertalk',
'unblocklink',
'change-blocklink',
- 'infiniteblock',
);
$msg = array_combine( $msg, array_map( array( $this, 'msg' ), $msg ) );
}
@@ -396,6 +393,10 @@ class BlockListPager extends TablePager {
'join_conds' => array( 'user' => array( 'LEFT JOIN', 'user_id = ipb_by' ) )
);
+ # Filter out any expired blocks
+ $db = $this->getDatabase();
+ $info['conds'][] = 'ipb_expiry > ' . $db->addQuotes( $db->timestamp() );
+
# Is the user allowed to see hidden blocks?
if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
$info['conds']['ipb_deleted'] = 0;
@@ -425,7 +426,6 @@ class BlockListPager extends TablePager {
* @param ResultWrapper $result
*/
function preprocessResults( $result ) {
- wfProfileIn( __METHOD__ );
# Do a link batch query
$lb = new LinkBatch;
$lb->setCaller( __METHOD__ );
@@ -450,6 +450,5 @@ class BlockListPager extends TablePager {
}
$lb->execute();
- wfProfileOut( __METHOD__ );
}
}
diff --git a/includes/specials/SpecialBooksources.php b/includes/specials/SpecialBooksources.php
index 72f4e466..7028fdcb 100644
--- a/includes/specials/SpecialBooksources.php
+++ b/includes/specials/SpecialBooksources.php
@@ -26,7 +26,6 @@
* The parser creates links to this page when dealing with ISBNs in wikitext
*
* @author Rob Church <robchur@gmail.com>
- * @todo Validate ISBNs using the standard check-digit method
* @ingroup SpecialPage
*/
class SpecialBookSources extends SpecialPage {
@@ -73,7 +72,9 @@ class SpecialBookSources extends SpecialPage {
$sum = 0;
if ( strlen( $isbn ) == 13 ) {
for ( $i = 0; $i < 12; $i++ ) {
- if ( $i % 2 == 0 ) {
+ if ( $isbn[$i] === 'X' ) {
+ return false;
+ } elseif ( $i % 2 == 0 ) {
$sum += $isbn[$i];
} else {
$sum += 3 * $isbn[$i];
@@ -81,11 +82,14 @@ class SpecialBookSources extends SpecialPage {
}
$check = ( 10 - ( $sum % 10 ) ) % 10;
- if ( $check == $isbn[12] ) {
+ if ( (string)$check === $isbn[12] ) {
return true;
}
} elseif ( strlen( $isbn ) == 10 ) {
for ( $i = 0; $i < 9; $i++ ) {
+ if ( $isbn[$i] === 'X' ) {
+ return false;
+ }
$sum += $isbn[$i] * ( $i + 1 );
}
@@ -93,7 +97,7 @@ class SpecialBookSources extends SpecialPage {
if ( $check == 10 ) {
$check = "X";
}
- if ( $check == $isbn[9] ) {
+ if ( (string)$check === $isbn[9] ) {
return true;
}
}
@@ -131,9 +135,14 @@ class SpecialBookSources extends SpecialPage {
'isbn',
20,
$this->isbn,
- array( 'autofocus' => true )
+ array( 'autofocus' => '', 'class' => 'mw-ui-input-inline' )
);
- $form .= '&#160;' . Xml::submitButton( $this->msg( 'booksources-go' )->text() ) . "</p>\n";
+
+ $form .= '&#160;' . Html::submitButton(
+ $this->msg( 'booksources-search' )->text(),
+ array(), array( 'mw-ui-progressive' )
+ ) . "</p>\n";
+
$form .= Html::closeElement( 'form' ) . "\n";
$form .= Html::closeElement( 'fieldset' ) . "\n";
@@ -152,7 +161,7 @@ class SpecialBookSources extends SpecialPage {
# Hook to allow extensions to insert additional HTML,
# e.g. for API-interacting plugins and so on
- wfRunHooks( 'BookInformation', array( $this->isbn, $this->getOutput() ) );
+ Hooks::run( 'BookInformation', array( $this->isbn, $this->getOutput() ) );
# Check for a local page such as Project:Book_sources and use that if available
$page = $this->msg( 'booksources' )->inContentLanguage()->text();
diff --git a/includes/specials/SpecialCategories.php b/includes/specials/SpecialCategories.php
index 95f9efd2..3a13b7ed 100644
--- a/includes/specials/SpecialCategories.php
+++ b/includes/specials/SpecialCategories.php
@@ -188,9 +188,11 @@ class CategoryPager extends AlphabeticPager {
$this->msg( 'categories' )->text(),
Xml::inputLabel(
$this->msg( 'categoriesfrom' )->text(),
- 'from', 'from', 20, $from ) .
+ 'from', 'from', 20, $from, array( 'class' => 'mw-ui-input-inline' ) ) .
' ' .
- Xml::submitButton( $this->msg( 'allpagessubmit' )->text()
+ Html::submitButton(
+ $this->msg( 'allpagessubmit' )->text(),
+ array(), array( 'mw-ui-progressive' )
)
)
);
diff --git a/includes/specials/SpecialChangeEmail.php b/includes/specials/SpecialChangeEmail.php
index e0be838b..eca307d9 100644
--- a/includes/specials/SpecialChangeEmail.php
+++ b/includes/specials/SpecialChangeEmail.php
@@ -39,7 +39,7 @@ class SpecialChangeEmail extends FormSpecialPage {
/**
* @return bool
*/
- function isListed() {
+ public function isListed() {
global $wgAuth;
return $wgAuth->allowPropChange( 'emailaddress' );
@@ -54,7 +54,7 @@ class SpecialChangeEmail extends FormSpecialPage {
$out->disallowUserJs();
$out->addModules( 'mediawiki.special.changeemail' );
- return parent::execute( $par );
+ parent::execute( $par );
}
protected function checkExecutePermissions( User $user ) {
@@ -106,22 +106,20 @@ class SpecialChangeEmail extends FormSpecialPage {
return $fields;
}
+ protected function getDisplayFormat() {
+ return 'vform';
+ }
+
protected function alterForm( HTMLForm $form ) {
- $form->setDisplayFormat( 'vform' );
$form->setId( 'mw-changeemail-form' );
$form->setTableId( 'mw-changeemail-table' );
- $form->setWrapperLegend( false );
$form->setSubmitTextMsg( 'changeemail-submit' );
- $form->addHiddenField( 'returnto', $this->getRequest()->getVal( 'returnto' ) );
+ $form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
}
public function onSubmit( array $data ) {
- if ( $this->getRequest()->getBool( 'wpCancel' ) ) {
- $status = Status::newGood( true );
- } else {
- $password = isset( $data['Password'] ) ? $data['Password'] : null;
- $status = $this->attemptChange( $this->getUser(), $password, $data['NewEmail'] );
- }
+ $password = isset( $data['Password'] ) ? $data['Password'] : null;
+ $status = $this->attemptChange( $this->getUser(), $password, $data['NewEmail'] );
$this->status = $status;
@@ -129,18 +127,22 @@ class SpecialChangeEmail extends FormSpecialPage {
}
public function onSuccess() {
- $titleObj = Title::newFromText( $this->getRequest()->getVal( 'returnto' ) );
+ $request = $this->getRequest();
+
+ $titleObj = Title::newFromText( $request->getVal( 'returnto' ) );
if ( !$titleObj instanceof Title ) {
$titleObj = Title::newMainPage();
}
+ $query = $request->getVal( 'returntoquery' );
if ( $this->status->value === true ) {
- $this->getOutput()->redirect( $titleObj->getFullURL() );
+ $this->getOutput()->redirect( $titleObj->getFullURL( $query ) );
} elseif ( $this->status->value === 'eauth' ) {
# Notify user that a confirmation email has been sent...
$this->getOutput()->wrapWikiMsg( "<div class='error' style='clear: both;'>\n$1\n</div>",
'eauthentsent', $this->getUser()->getName() );
- $this->getOutput()->addReturnTo( $titleObj ); // just show the link to go back
+ // just show the link to go back
+ $this->getOutput()->addReturnTo( $titleObj, wfCgiToArray( $query ) );
}
}
@@ -150,7 +152,7 @@ class SpecialChangeEmail extends FormSpecialPage {
* @param string $newaddr
* @return Status
*/
- protected function attemptChange( User $user, $pass, $newaddr ) {
+ private function attemptChange( User $user, $pass, $newaddr ) {
global $wgAuth;
if ( $newaddr != '' && !Sanitizer::validateEmail( $newaddr ) ) {
@@ -184,7 +186,7 @@ class SpecialChangeEmail extends FormSpecialPage {
return $status;
}
- wfRunHooks( 'PrefsEmailAudit', array( $user, $oldaddr, $newaddr ) );
+ Hooks::run( 'PrefsEmailAudit', array( $user, $oldaddr, $newaddr ) );
$user->saveSettings();
diff --git a/includes/specials/SpecialChangePassword.php b/includes/specials/SpecialChangePassword.php
index 24664edb..168095f8 100644
--- a/includes/specials/SpecialChangePassword.php
+++ b/includes/specials/SpecialChangePassword.php
@@ -118,7 +118,7 @@ class SpecialChangePassword extends FormSpecialPage {
}
$extraFields = array();
- wfRunHooks( 'ChangePasswordForm', array( &$extraFields ) );
+ Hooks::run( 'ChangePasswordForm', array( &$extraFields ) );
foreach ( $extraFields as $extra ) {
list( $name, $label, $type, $default ) = $extra;
$fields[$name] = array(
@@ -248,7 +248,7 @@ class SpecialChangePassword extends FormSpecialPage {
}
if ( $newpass !== $retype ) {
- wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'badretype' ) );
+ Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'badretype' ) );
throw new PasswordError( $this->msg( 'badretype' )->text() );
}
@@ -264,7 +264,7 @@ class SpecialChangePassword extends FormSpecialPage {
// @todo Make these separate messages, since the message is written for both cases
if ( !$user->checkTemporaryPassword( $oldpass ) && !$user->checkPassword( $oldpass ) ) {
- wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'wrongpassword' ) );
+ Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'wrongpassword' ) );
throw new PasswordError( $this->msg( 'resetpass-wrong-oldpass' )->text() );
}
@@ -276,8 +276,8 @@ class SpecialChangePassword extends FormSpecialPage {
// Do AbortChangePassword after checking mOldpass, so we don't leak information
// by possibly aborting a new password before verifying the old password.
$abortMsg = 'resetpass-abort-generic';
- if ( !wfRunHooks( 'AbortChangePassword', array( $user, $oldpass, $newpass, &$abortMsg ) ) ) {
- wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'abortreset' ) );
+ if ( !Hooks::run( 'AbortChangePassword', array( $user, $oldpass, $newpass, &$abortMsg ) ) ) {
+ Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'abortreset' ) );
throw new PasswordError( $this->msg( $abortMsg )->text() );
}
@@ -288,9 +288,9 @@ class SpecialChangePassword extends FormSpecialPage {
try {
$user->setPassword( $newpass );
- wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'success' ) );
+ Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'success' ) );
} catch ( PasswordError $e ) {
- wfRunHooks( 'PrefsPasswordAudit', array( $user, $newpass, 'error' ) );
+ Hooks::run( 'PrefsPasswordAudit', array( $user, $newpass, 'error' ) );
throw new PasswordError( $e->getMessage() );
}
diff --git a/includes/specials/SpecialConfirmemail.php b/includes/specials/SpecialConfirmemail.php
index d771589d..b6ab112b 100644
--- a/includes/specials/SpecialConfirmemail.php
+++ b/includes/specials/SpecialConfirmemail.php
@@ -38,6 +38,9 @@ class EmailConfirmation extends UnlistedSpecialPage {
* Main execution point
*
* @param null|string $code Confirmation code passed to the page
+ * @throws PermissionsError
+ * @throws ReadOnlyError
+ * @throws UserNotLoggedIn
*/
function execute( $code ) {
$this->setHeaders();
diff --git a/includes/specials/SpecialContributions.php b/includes/specials/SpecialContributions.php
index 32a887c4..c2cd8122 100644
--- a/includes/specials/SpecialContributions.php
+++ b/includes/specials/SpecialContributions.php
@@ -176,7 +176,7 @@ class SpecialContributions extends IncludableSpecialPage {
// Add RSS/atom links
$this->addFeedLinks( $feedParams );
- if ( wfRunHooks( 'SpecialContributionsBeforeMainOutput', array( $id, $userObj, $this ) ) ) {
+ if ( Hooks::run( 'SpecialContributionsBeforeMainOutput', array( $id, $userObj, $this ) ) ) {
if ( !$this->including() ) {
$out->addHTML( $this->getForm() );
}
@@ -386,7 +386,7 @@ class SpecialContributions extends IncludableSpecialPage {
);
}
- wfRunHooks( 'ContributionsToolLinks', array( $id, $userpage, &$tools ) );
+ Hooks::run( 'ContributionsToolLinks', array( $id, $userpage, &$tools ) );
return $tools;
}
@@ -478,18 +478,15 @@ class SpecialContributions extends IncludableSpecialPage {
if ( $tagFilter ) {
$filterSelection = Html::rawElement(
'td',
- array( 'class' => 'mw-label' ),
- array_shift( $tagFilter )
- );
- $filterSelection .= Html::rawElement(
- 'td',
- array( 'class' => 'mw-input' ),
- implode( '&#160', $tagFilter )
+ array(),
+ array_shift( $tagFilter ) . implode( '&#160', $tagFilter )
);
} else {
$filterSelection = Html::rawElement( 'td', array( 'colspan' => 2 ), '' );
}
+ $this->getOutput()->addModules( 'mediawiki.userSuggest' );
+
$labelNewbies = Xml::radioLabel(
$this->msg( 'sp-contributions-newbies' )->text(),
'contribs',
@@ -510,9 +507,15 @@ class SpecialContributions extends IncludableSpecialPage {
'target',
$this->opts['target'],
'text',
- array( 'size' => '40', 'required' => '', 'class' => 'mw-input' ) +
- ( $this->opts['target'] ? array() : array( 'autofocus' )
- )
+ array(
+ 'size' => '40',
+ 'required' => '',
+ 'class' => array(
+ 'mw-input',
+ 'mw-ui-input-inline',
+ 'mw-autocomplete-user', // used by mediawiki.userSuggest
+ ),
+ ) + ( $this->opts['target'] ? array() : array( 'autofocus' ) )
);
$targetSelection = Html::rawElement(
'td',
@@ -522,16 +525,12 @@ class SpecialContributions extends IncludableSpecialPage {
$namespaceSelection = Xml::tags(
'td',
- array( 'class' => 'mw-label' ),
+ array(),
Xml::label(
$this->msg( 'namespace' )->text(),
'namespace',
''
- )
- );
- $namespaceSelection .= Html::rawElement(
- 'td',
- null,
+ ) .
Html::namespaceSelector(
array( 'selected' => $this->opts['namespace'], 'all' => '' ),
array(
@@ -617,9 +616,9 @@ class SpecialContributions extends IncludableSpecialPage {
$this->opts['year'] === '' ? MWTimestamp::getInstance()->format( 'Y' ) : $this->opts['year'],
$this->opts['month']
) . ' ' .
- Xml::submitButton(
+ Html::submitButton(
$this->msg( 'sp-contributions-submit' )->text(),
- array( 'class' => 'mw-submit' )
+ array( 'class' => 'mw-submit' ), array( 'mw-ui-progressive' )
)
);
@@ -659,7 +658,7 @@ class ContribsPager extends ReverseChronologicalPager {
public $mDb;
public $preventClickjacking = false;
- /** @var DatabaseBase */
+ /** @var IDatabase */
public $mDbSecondary;
/**
@@ -673,10 +672,7 @@ class ContribsPager extends ReverseChronologicalPager {
$msgs = array(
'diff',
'hist',
- 'newarticle',
'pipe-separator',
- 'rev-delundel',
- 'rollbacklink',
'uctop'
);
@@ -715,7 +711,7 @@ class ContribsPager extends ReverseChronologicalPager {
/**
* This method basically executes the exact same code as the parent class, though with
- * a hook added, to allow extentions to add additional queries.
+ * a hook added, to allow extensions to add additional queries.
*
* @param string $offset Index offset, inclusive
* @param int $limit Exact query limit
@@ -751,7 +747,7 @@ class ContribsPager extends ReverseChronologicalPager {
$data = array( $this->mDb->select(
$tables, $fields, $conds, $fname, $options, $join_conds
) );
- wfRunHooks(
+ Hooks::run(
'ContribsPager::reallyDoQuery',
array( &$data, $pager, $offset, $limit, $descending )
);
@@ -828,7 +824,7 @@ class ContribsPager extends ReverseChronologicalPager {
$this->tagFilter
);
- wfRunHooks( 'ContribsPager::getQueryInfo', array( &$this, &$queryInfo ) );
+ Hooks::run( 'ContribsPager::getQueryInfo', array( &$this, &$queryInfo ) );
return $queryInfo;
}
@@ -935,7 +931,7 @@ class ContribsPager extends ReverseChronologicalPager {
* @return string
*/
function getStartBody() {
- return "<ul>\n";
+ return "<ul class=\"mw-contributions-list\">\n";
}
/**
@@ -958,7 +954,6 @@ class ContribsPager extends ReverseChronologicalPager {
* @return string
*/
function formatRow( $row ) {
- wfProfileIn( __METHOD__ );
$ret = '';
$classes = array();
@@ -974,7 +969,7 @@ class ContribsPager extends ReverseChronologicalPager {
try {
$rev = new Revision( $row );
$validRevision = (bool)$rev->getId();
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$validRevision = false;
}
wfRestoreWarnings();
@@ -1113,7 +1108,7 @@ class ContribsPager extends ReverseChronologicalPager {
}
// Let extensions add data
- wfRunHooks( 'ContributionsLineEnding', array( $this, &$ret, $row, &$classes ) );
+ Hooks::run( 'ContributionsLineEnding', array( $this, &$ret, $row, &$classes ) );
if ( $classes === array() && $ret === '' ) {
wfDebug( "Dropping Special:Contribution row that could not be formatted\n" );
@@ -1122,8 +1117,6 @@ class ContribsPager extends ReverseChronologicalPager {
$ret = Html::rawElement( 'li', array( 'class' => $classes ), $ret ) . "\n";
}
- wfProfileOut( __METHOD__ );
-
return $ret;
}
diff --git a/includes/specials/SpecialDeletedContributions.php b/includes/specials/SpecialDeletedContributions.php
index 68f2c469..9e4bbbe5 100644
--- a/includes/specials/SpecialDeletedContributions.php
+++ b/includes/specials/SpecialDeletedContributions.php
@@ -78,6 +78,53 @@ class DeletedContribsPager extends IndexPager {
);
}
+ /**
+ * This method basically executes the exact same code as the parent class, though with
+ * a hook added, to allow extensions to add additional queries.
+ *
+ * @param string $offset Index offset, inclusive
+ * @param int $limit Exact query limit
+ * @param bool $descending Query direction, false for ascending, true for descending
+ * @return ResultWrapper
+ */
+ function reallyDoQuery( $offset, $limit, $descending ) {
+ $pager = $this;
+
+ $data = array( parent::reallyDoQuery( $offset, $limit, $descending ) );
+
+ // This hook will allow extensions to add in additional queries, nearly
+ // identical to ContribsPager::reallyDoQuery.
+ Hooks::run(
+ 'DeletedContribsPager::reallyDoQuery',
+ array( &$data, $pager, $offset, $limit, $descending )
+ );
+
+ $result = array();
+
+ // loop all results and collect them in an array
+ foreach ( $data as $query ) {
+ foreach ( $query as $i => $row ) {
+ // use index column as key, allowing us to easily sort in PHP
+ $result[$row->{$this->getIndexField()} . "-$i"] = $row;
+ }
+ }
+
+ // sort results
+ if ( $descending ) {
+ ksort( $result );
+ } else {
+ krsort( $result );
+ }
+
+ // enforce limit
+ $result = array_slice( $result, 0, $limit );
+
+ // get rid of array keys
+ $result = array_values( $result );
+
+ return new FakeResultWrapper( $result );
+ }
+
function getUserCond() {
$condition = array();
@@ -141,6 +188,50 @@ class DeletedContribsPager extends IndexPager {
/**
* Generates each row in the contributions list.
*
+ * @todo This would probably look a lot nicer in a table.
+ * @param stdClass $row
+ * @return string
+ */
+ function formatRow( $row ) {
+ $ret = '';
+ $classes = array();
+
+ /*
+ * There may be more than just revision rows. To make sure that we'll only be processing
+ * revisions here, let's _try_ to build a revision out of our row (without displaying
+ * notices though) and then trying to grab data from the built object. If we succeed,
+ * we're definitely dealing with revision data and we may proceed, if not, we'll leave it
+ * to extensions to subscribe to the hook to parse the row.
+ */
+ wfSuppressWarnings();
+ try {
+ $rev = Revision::newFromArchiveRow( $row );
+ $validRevision = (bool)$rev->getId();
+ } catch ( Exception $e ) {
+ $validRevision = false;
+ }
+ wfRestoreWarnings();
+
+ if ( $validRevision ) {
+ $ret = $this->formatRevisionRow( $row );
+ }
+
+ // Let extensions add data
+ Hooks::run( 'DeletedContributionsLineEnding', array( $this, &$ret, $row, &$classes ) );
+
+ if ( $classes === array() && $ret === '' ) {
+ wfDebug( "Dropping Special:DeletedContribution row that could not be formatted\n" );
+ $ret = "<!-- Could not format Special:DeletedContribution row. -->\n";
+ } else {
+ $ret = Html::rawElement( 'li', array( 'class' => $classes ), $ret ) . "\n";
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Generates each row in the contributions list for archive entries.
+ *
* Contributions which are marked "top" are currently on top of the history.
* For these contributions, a [rollback] link is shown for users with sysop
* privileges. The rollback link restores the most recent version that was not
@@ -150,9 +241,7 @@ class DeletedContribsPager extends IndexPager {
* @param stdClass $row
* @return string
*/
- function formatRow( $row ) {
- wfProfileIn( __METHOD__ );
-
+ function formatRevisionRow( $row ) {
$page = Title::makeTitle( $row->ar_namespace, $row->ar_title );
$rev = new Revision( array(
@@ -256,17 +345,13 @@ class DeletedContribsPager extends IndexPager {
$ret .= " <strong>" . $this->msg( 'rev-deleted-user-contribs' )->escaped() . "</strong>";
}
- $ret = Html::rawElement( 'li', array(), $ret ) . "\n";
-
- wfProfileOut( __METHOD__ );
-
return $ret;
}
/**
* Get the Database object in use
*
- * @return DatabaseBase
+ * @return IDatabase
*/
public function getDatabase() {
return $this->mDb;
@@ -315,7 +400,8 @@ class DeletedContributionsPage extends SpecialPage {
return;
}
- $options['limit'] = $request->getInt( 'limit', $this->getConfig()->get( 'QueryPageDefaultLimit' ) );
+ $options['limit'] = $request->getInt( 'limit',
+ $this->getConfig()->get( 'QueryPageDefaultLimit' ) );
$options['target'] = $target;
$userObj = User::newFromName( $target, false );
@@ -465,7 +551,7 @@ class DeletedContributionsPage extends SpecialPage {
);
}
- wfRunHooks( 'ContributionsToolLinks', array( $id, $nt, &$tools ) );
+ Hooks::run( 'ContributionsToolLinks', array( $id, $nt, &$tools ) );
$links = $this->getLanguage()->pipeList( $tools );
@@ -533,6 +619,8 @@ class DeletedContributionsPage extends SpecialPage {
$f .= "\t" . Html::hidden( $name, $value ) . "\n";
}
+ $this->getOutput()->addModules( 'mediawiki.userSuggest' );
+
$f .= Xml::openElement( 'fieldset' );
$f .= Xml::element( 'legend', array(), $this->msg( 'sp-contributions-search' )->text() );
$f .= Xml::tags(
@@ -546,7 +634,10 @@ class DeletedContributionsPage extends SpecialPage {
'text',
array(
'size' => '20',
- 'required' => ''
+ 'required' => '',
+ 'class' => array(
+ 'mw-autocomplete-user', // used by mediawiki.userSuggest
+ ),
) + ( $options['target'] ? array() : array( 'autofocus' ) )
) . ' ';
$f .= Html::namespaceSelector(
diff --git a/includes/specials/SpecialDiff.php b/includes/specials/SpecialDiff.php
index 77d23173..89c1c021 100644
--- a/includes/specials/SpecialDiff.php
+++ b/includes/specials/SpecialDiff.php
@@ -53,6 +53,7 @@ class SpecialDiff extends RedirectSpecialPage {
$this->mAddedRedirectParams['diff'] = $parts[1];
} else {
// Wrong number of parameters, bail out
+ $this->addHelpLink( 'Help:Diff' );
throw new ErrorPageError( 'nopagetitle', 'nopagetext' );
}
diff --git a/includes/specials/SpecialEditTags.php b/includes/specials/SpecialEditTags.php
new file mode 100644
index 00000000..f41a1f1d
--- /dev/null
+++ b/includes/specials/SpecialEditTags.php
@@ -0,0 +1,460 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Special page for adding and removing change tags to individual revisions.
+ * A lot of this is copied out of SpecialRevisiondelete.
+ *
+ * @ingroup SpecialPage
+ * @since 1.25
+ */
+class SpecialEditTags extends UnlistedSpecialPage {
+ /** @var bool Was the DB modified in this request */
+ protected $wasSaved = false;
+
+ /** @var bool True if the submit button was clicked, and the form was posted */
+ private $submitClicked;
+
+ /** @var array Target ID list */
+ private $ids;
+
+ /** @var Title Title object for target parameter */
+ private $targetObj;
+
+ /** @var string Deletion type, may be revision or logentry */
+ private $typeName;
+
+ /** @var ChangeTagsList Storing the list of items to be tagged */
+ private $revList;
+
+ /** @var bool Whether user is allowed to perform the action */
+ private $isAllowed;
+
+ /** @var string */
+ private $reason;
+
+ public function __construct() {
+ parent::__construct( 'EditTags', 'changetags' );
+ }
+
+ public function execute( $par ) {
+ $this->checkPermissions();
+ $this->checkReadOnly();
+
+ $output = $this->getOutput();
+ $user = $this->getUser();
+ $request = $this->getRequest();
+
+ $this->setHeaders();
+ $this->outputHeader();
+
+ $this->getOutput()->addModules( array( 'mediawiki.special.edittags',
+ 'mediawiki.special.edittags.styles' ) );
+
+ $this->submitClicked = $request->wasPosted() && $request->getBool( 'wpSubmit' );
+
+ // Handle our many different possible input types
+ $ids = $request->getVal( 'ids' );
+ if ( !is_null( $ids ) ) {
+ // Allow CSV from the form hidden field, or a single ID for show/hide links
+ $this->ids = explode( ',', $ids );
+ } else {
+ // Array input
+ $this->ids = array_keys( $request->getArray( 'ids', array() ) );
+ }
+ $this->ids = array_unique( array_filter( $this->ids ) );
+
+ // No targets?
+ if ( count( $this->ids ) == 0 ) {
+ throw new ErrorPageError( 'tags-edit-nooldid-title', 'tags-edit-nooldid-text' );
+ }
+
+ $this->typeName = $request->getVal( 'type' );
+ $this->targetObj = Title::newFromText( $request->getText( 'target' ) );
+
+ // sanity check of parameter
+ switch ( $this->typeName ) {
+ case 'logentry':
+ case 'logging':
+ $this->typeName = 'logentry';
+ break;
+ default:
+ $this->typeName = 'revision';
+ break;
+ }
+
+ // Allow the list type to adjust the passed target
+ // Yuck! Copied straight out of SpecialRevisiondelete, but it does exactly
+ // what we want
+ $this->targetObj = RevisionDeleter::suggestTarget(
+ $this->typeName === 'revision' ? 'revision' : 'logging',
+ $this->targetObj,
+ $this->ids
+ );
+
+ $this->isAllowed = $user->isAllowed( 'changetags' );
+
+ $this->reason = $request->getVal( 'wpReason' );
+ // We need a target page!
+ if ( is_null( $this->targetObj ) ) {
+ $output->addWikiMsg( 'undelete-header' );
+ return;
+ }
+ // Give a link to the logs/hist for this page
+ $this->showConvenienceLinks();
+
+ // Either submit or create our form
+ if ( $this->isAllowed && $this->submitClicked ) {
+ $this->submit( $request );
+ } else {
+ $this->showForm();
+ }
+
+ // Show relevant lines from the tag log
+ $tagLogPage = new LogPage( 'tag' );
+ $output->addHTML( "<h2>" . $tagLogPage->getName()->escaped() . "</h2>\n" );
+ LogEventsList::showLogExtract(
+ $output,
+ 'tag',
+ $this->targetObj,
+ '', /* user */
+ array( 'lim' => 25, 'conds' => array(), 'useMaster' => $this->wasSaved )
+ );
+ }
+
+ /**
+ * Show some useful links in the subtitle
+ */
+ protected function showConvenienceLinks() {
+ // Give a link to the logs/hist for this page
+ if ( $this->targetObj ) {
+ // Also set header tabs to be for the target.
+ $this->getSkin()->setRelevantTitle( $this->targetObj );
+
+ $links = array();
+ $links[] = Linker::linkKnown(
+ SpecialPage::getTitleFor( 'Log' ),
+ $this->msg( 'viewpagelogs' )->escaped(),
+ array(),
+ array(
+ 'page' => $this->targetObj->getPrefixedText(),
+ 'hide_tag_log' => '0',
+ )
+ );
+ if ( !$this->targetObj->isSpecialPage() ) {
+ // Give a link to the page history
+ $links[] = Linker::linkKnown(
+ $this->targetObj,
+ $this->msg( 'pagehist' )->escaped(),
+ array(),
+ array( 'action' => 'history' )
+ );
+ }
+ // Link to Special:Tags
+ $links[] = Linker::linkKnown(
+ SpecialPage::getTitleFor( 'Tags' ),
+ $this->msg( 'tags-edit-manage-link' )->escaped()
+ );
+ // Logs themselves don't have histories or archived revisions
+ $this->getOutput()->addSubtitle( $this->getLanguage()->pipeList( $links ) );
+ }
+ }
+
+ /**
+ * Get the list object for this request
+ * @return ChangeTagsList
+ */
+ protected function getList() {
+ if ( is_null( $this->revList ) ) {
+ $this->revList = ChangeTagsList::factory( $this->typeName, $this->getContext(),
+ $this->targetObj, $this->ids );
+ }
+
+ return $this->revList;
+ }
+
+ /**
+ * Show a list of items that we will operate on, and show a form which allows
+ * the user to modify the tags applied to those items.
+ */
+ protected function showForm() {
+ $userAllowed = true;
+
+ $out = $this->getOutput();
+ // Messages: tags-edit-revision-selected, tags-edit-logentry-selected
+ $out->wrapWikiMsg( "<strong>$1</strong>", array(
+ "tags-edit-{$this->typeName}-selected",
+ $this->getLanguage()->formatNum( count( $this->ids ) ),
+ $this->targetObj->getPrefixedText()
+ ) );
+
+ $this->addHelpLink( 'Help:Tags' );
+ $out->addHTML( "<ul>" );
+
+ $numRevisions = 0;
+ // Live revisions...
+ $list = $this->getList();
+ // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ for ( $list->reset(); $list->current(); $list->next() ) {
+ // @codingStandardsIgnoreEnd
+ $item = $list->current();
+ $numRevisions++;
+ $out->addHTML( $item->getHTML() );
+ }
+
+ if ( !$numRevisions ) {
+ throw new ErrorPageError( 'tags-edit-nooldid-title', 'tags-edit-nooldid-text' );
+ }
+
+ $out->addHTML( "</ul>" );
+ // Explanation text
+ $out->wrapWikiMsg( '<p>$1</p>', "tags-edit-{$this->typeName}-explanation" );
+
+ // Show form if the user can submit
+ if ( $this->isAllowed ) {
+ $form = Xml::openElement( 'form', array( 'method' => 'post',
+ 'action' => $this->getPageTitle()->getLocalURL( array( 'action' => 'submit' ) ),
+ 'id' => 'mw-revdel-form-revisions' ) ) .
+ Xml::fieldset( $this->msg( "tags-edit-{$this->typeName}-legend",
+ count( $this->ids ) )->text() ) .
+ $this->buildCheckBoxes() .
+ Xml::openElement( 'table' ) .
+ "<tr>\n" .
+ '<td class="mw-label">' .
+ Xml::label( $this->msg( 'tags-edit-reason' )->text(), 'wpReason' ) .
+ '</td>' .
+ '<td class="mw-input">' .
+ Xml::input(
+ 'wpReason',
+ 60,
+ $this->reason,
+ array( 'id' => 'wpReason', 'maxlength' => 100 )
+ ) .
+ '</td>' .
+ "</tr><tr>\n" .
+ '<td></td>' .
+ '<td class="mw-submit">' .
+ Xml::submitButton( $this->msg( "tags-edit-{$this->typeName}-submit",
+ $numRevisions )->text(), array( 'name' => 'wpSubmit' ) ) .
+ '</td>' .
+ "</tr>\n" .
+ Xml::closeElement( 'table' ) .
+ Html::hidden( 'wpEditToken', $this->getUser()->getEditToken() ) .
+ Html::hidden( 'target', $this->targetObj->getPrefixedText() ) .
+ Html::hidden( 'type', $this->typeName ) .
+ Html::hidden( 'ids', implode( ',', $this->ids ) ) .
+ Xml::closeElement( 'fieldset' ) . "\n" .
+ Xml::closeElement( 'form' ) . "\n";
+ } else {
+ $form = '';
+ }
+ $out->addHTML( $form );
+ }
+
+ /**
+ * @return string HTML
+ */
+ protected function buildCheckBoxes() {
+ // If there is just one item, provide the user with a multi-select field
+ $list = $this->getList();
+ if ( $list->length() == 1 ) {
+ $list->reset();
+ $tags = $list->current()->getTags();
+ if ( $tags ) {
+ $tags = explode( ',', $tags );
+ } else {
+ $tags = array();
+ }
+
+ $html = '<table id="mw-edittags-tags-selector">';
+ $html .= '<tr><td>' . $this->msg( 'tags-edit-existing-tags' )->escaped() .
+ '</td><td>';
+ if ( $tags ) {
+ $html .= $this->getLanguage()->commaList( array_map( 'htmlspecialchars', $tags ) );
+ } else {
+ $html .= $this->msg( 'tags-edit-existing-tags-none' )->parse();
+ }
+ $html .= '</td></tr>';
+ $tagSelect = $this->getTagSelect( $tags, $this->msg( 'tags-edit-new-tags' )->plain() );
+ $html .= '<tr><td>' . $tagSelect[0] . '</td><td>' . $tagSelect[1];
+ // also output the tags currently applied as a hidden form field, so we
+ // know what to remove from the revision/log entry when the form is submitted
+ $html .= Html::hidden( 'wpExistingTags', implode( ',', $tags ) );
+ $html .= '</td></tr></table>';
+ } else {
+ // Otherwise, use a multi-select field for adding tags, and a list of
+ // checkboxes for removing them
+ $tags = array();
+
+ // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+ for ( $list->reset(); $list->current(); $list->next() ) {
+ // @codingStandardsIgnoreEnd
+ $currentTags = $list->current()->getTags();
+ if ( $currentTags ) {
+ $tags = array_merge( $tags, explode( ',', $currentTags ) );
+ }
+ }
+ $tags = array_unique( $tags );
+
+ $html = '<table id="mw-edittags-tags-selector-multi"><tr><td>';
+ $tagSelect = $this->getTagSelect( array(), $this->msg( 'tags-edit-add' )->plain() );
+ $html .= '<p>' . $tagSelect[0] . '</p>' . $tagSelect[1] . '</td><td>';
+ $html .= Xml::element( 'p', null, $this->msg( 'tags-edit-remove' )->plain() );
+ $html .= Xml::checkLabel( $this->msg( 'tags-edit-remove-all-tags' )->plain(),
+ 'wpRemoveAllTags', 'mw-edittags-remove-all' );
+ $i = 0; // used for generating checkbox IDs only
+ foreach ( $tags as $tag ) {
+ $html .= Xml::element( 'br' ) . "\n" . Xml::checkLabel( $tag,
+ 'wpTagsToRemove[]', 'mw-edittags-remove-' . $i++, false, array(
+ 'value' => $tag,
+ 'class' => 'mw-edittags-remove-checkbox',
+ ) );
+ }
+ $html .= '</td></tr></table>';
+ }
+
+ return $html;
+ }
+
+ /**
+ * Returns a <select multiple> element with a list of change tags that can be
+ * applied by users.
+ *
+ * @param array $selectedTags The tags that should be preselected in the
+ * list. Any tags in this list, but not in the list returned by
+ * ChangeTags::listExplicitlyDefinedTags, will be appended to the <select>
+ * element.
+ * @param string $label The text of a <label> to precede the <select>
+ * @return array HTML <label> element at index 0, HTML <select> element at
+ * index 1
+ */
+ protected function getTagSelect( $selectedTags, $label ) {
+ $result = array();
+ $result[0] = Xml::label( $label, 'mw-edittags-tag-list' );
+ $result[1] = Xml::openElement( 'select', array(
+ 'name' => 'wpTagList[]',
+ 'id' => 'mw-edittags-tag-list',
+ 'multiple' => 'multiple',
+ 'size' => '8',
+ ) );
+
+ $tags = ChangeTags::listExplicitlyDefinedTags();
+ $tags = array_unique( array_merge( $tags, $selectedTags ) );
+ foreach ( $tags as $tag ) {
+ $result[1] .= Xml::option( $tag, $tag, in_array( $tag, $selectedTags ) );
+ }
+
+ $result[1] .= Xml::closeElement( 'select' );
+ return $result;
+ }
+
+ /**
+ * UI entry point for form submission.
+ * @throws PermissionsError
+ * @return bool
+ */
+ protected function submit() {
+ // Check edit token on submission
+ $request = $this->getRequest();
+ $token = $request->getVal( 'wpEditToken' );
+ if ( $this->submitClicked && !$this->getUser()->matchEditToken( $token ) ) {
+ $this->getOutput()->addWikiMsg( 'sessionfailure' );
+ return false;
+ }
+
+ // Evaluate incoming request data
+ $tagList = $request->getArray( 'wpTagList' );
+ if ( is_null( $tagList ) ) {
+ $tagList = array();
+ }
+ $existingTags = $request->getVal( 'wpExistingTags' );
+ if ( is_null( $existingTags ) || $existingTags === '' ) {
+ $existingTags = array();
+ } else {
+ $existingTags = explode( ',', $existingTags );
+ }
+
+ if ( count( $this->ids ) > 1 ) {
+ // multiple revisions selected
+ $tagsToAdd = $tagList;
+ if ( $request->getBool( 'wpRemoveAllTags' ) ) {
+ $tagsToRemove = $existingTags;
+ } else {
+ $tagsToRemove = $request->getArray( 'wpTagsToRemove' );
+ }
+ } else {
+ // single revision selected
+ // The user tells us which tags they want associated to the revision.
+ // We have to figure out which ones to add, and which to remove.
+ $tagsToAdd = array_diff( $tagList, $existingTags );
+ $tagsToRemove = array_diff( $existingTags, $tagList );
+ }
+
+ if ( !$tagsToAdd && !$tagsToRemove ) {
+ $status = Status::newFatal( 'tags-edit-none-selected' );
+ } else {
+ $status = $this->getList()->updateChangeTagsOnAll( $tagsToAdd,
+ $tagsToRemove, null, $this->reason, $this->getUser() );
+ }
+
+ if ( $status->isGood() ) {
+ $this->success();
+ return true;
+ } else {
+ $this->failure( $status );
+ return false;
+ }
+ }
+
+ /**
+ * Report that the submit operation succeeded
+ */
+ protected function success() {
+ $this->getOutput()->setPageTitle( $this->msg( 'actioncomplete' ) );
+ $this->getOutput()->wrapWikiMsg( "<div class=\"successbox\">\n$1\n</div>",
+ 'tags-edit-success' );
+ $this->wasSaved = true;
+ $this->revList->reloadFromMaster();
+ $this->reason = ''; // no need to spew the reason back at the user
+ $this->showForm();
+ }
+
+ /**
+ * Report that the submit operation failed
+ * @param Status $status
+ */
+ protected function failure( $status ) {
+ $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
+ $this->getOutput()->addWikiText( '<div class="errorbox">' .
+ $status->getWikiText( 'tags-edit-failure' ) .
+ '</div>'
+ );
+ $this->showForm();
+ }
+
+ public function getDescription() {
+ return $this->msg( 'tags-edit-title' )->text();
+ }
+
+ protected function getGroupName() {
+ return 'pagetools';
+ }
+}
diff --git a/includes/specials/SpecialEditWatchlist.php b/includes/specials/SpecialEditWatchlist.php
index 3656b9cc..910fe259 100644
--- a/includes/specials/SpecialEditWatchlist.php
+++ b/includes/specials/SpecialEditWatchlist.php
@@ -134,22 +134,17 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
}
/**
- * Return an array of subpages beginning with $search that this special page will accept.
+ * Return an array of subpages that this special page will accept.
*
- * @param string $search Prefix to search for
- * @param int $limit Maximum number of results to return
- * @return string[] Matching subpages
+ * @see also SpecialWatchlist::getSubpagesForPrefixSearch
+ * @return string[] subpages
*/
- public function prefixSearchSubpages( $search, $limit = 10 ) {
- return self::prefixSearchArray(
- $search,
- $limit,
- // SpecialWatchlist uses SpecialEditWatchlist::getMode, so new types should be added
- // here and there - no 'edit' here, because that the default for this page
- array(
- 'clear',
- 'raw',
- )
+ public function getSubpagesForPrefixSearch() {
+ // SpecialWatchlist uses SpecialEditWatchlist::getMode, so new types should be added
+ // here and there - no 'edit' here, because that the default for this page
+ return array(
+ 'clear',
+ 'raw',
);
}
@@ -261,7 +256,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
// Do a batch existence check
$batch = new LinkBatch();
if ( count( $titles ) >= 100 ) {
- $output = wfMessage( 'watchlistedit-too-many' )->parse();
+ $output = $this->msg( 'watchlistedit-too-many' )->parse();
return;
}
foreach ( $titles as $title ) {
@@ -349,7 +344,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
*/
protected function getWatchlistInfo() {
$titles = array();
- $dbr = wfGetDB( DB_MASTER );
+ $dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select(
array( 'watchlist' ),
@@ -518,7 +513,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
);
$page = WikiPage::factory( $title );
- wfRunHooks( 'UnwatchArticleComplete', array( $this->getUser(), &$page ) );
+ Hooks::run( 'UnwatchArticleComplete', array( $this->getUser(), &$page ) );
}
}
}
@@ -556,7 +551,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
// Allow subscribers to manipulate the list of watched pages (or use it
// to preload lots of details at once)
$watchlistInfo = $this->getWatchlistInfo();
- wfRunHooks(
+ Hooks::run(
'WatchlistEditorBeforeFormRender',
array( &$watchlistInfo )
);
@@ -609,6 +604,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
$context->setTitle( $this->getPageTitle() ); // Remove subpage
$form = new EditWatchlistNormalHTMLForm( $fields, $context );
$form->setSubmitTextMsg( 'watchlistedit-normal-submit' );
+ $form->setSubmitDestructive();
# Used message keys:
# 'accesskey-watchlistedit-normal-submit', 'tooltip-watchlistedit-normal-submit'
$form->setSubmitTooltip( 'watchlistedit-normal-submit' );
@@ -628,7 +624,10 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
private function buildRemoveLine( $title ) {
$link = Linker::link( $title );
- $tools['talk'] = Linker::link( $title->getTalkPage(), $this->msg( 'talkpagelinktext' )->escaped() );
+ $tools['talk'] = Linker::link(
+ $title->getTalkPage(),
+ $this->msg( 'talkpagelinktext' )->escaped()
+ );
if ( $title->exists() ) {
$tools['history'] = Linker::linkKnown(
@@ -646,7 +645,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
);
}
- wfRunHooks(
+ Hooks::run(
'WatchlistEditorBuildRemoveLine',
array( &$tools, $title, $title->isRedirect(), $this->getSkin(), &$link )
);
@@ -701,6 +700,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
$form->setWrapperLegendMsg( 'watchlistedit-clear-legend' );
$form->addHeaderText( $this->msg( 'watchlistedit-clear-explain' )->parse() );
$form->setSubmitCallback( array( $this, 'submitClear' ) );
+ $form->setSubmitDestructive();
return $form;
}
@@ -760,7 +760,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
return Html::rawElement(
'span',
array( 'class' => 'mw-watchlist-toollinks' ),
- wfMessage( 'parentheses', $wgLang->pipeList( $tools ) )->text()
+ wfMessage( 'parentheses' )->rawParams( $wgLang->pipeList( $tools ) )->escaped()
);
}
}
diff --git a/includes/specials/SpecialEmailuser.php b/includes/specials/SpecialEmailuser.php
index 20532a92..c55fa94c 100644
--- a/includes/specials/SpecialEmailuser.php
+++ b/includes/specials/SpecialEmailuser.php
@@ -160,7 +160,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
$form->setWrapperLegendMsg( 'email-legend' );
$form->loadData();
- if ( !wfRunHooks( 'EmailUserForm', array( &$form ) ) ) {
+ if ( !Hooks::run( 'EmailUserForm', array( &$form ) ) ) {
return;
}
@@ -243,8 +243,8 @@ class SpecialEmailUser extends UnlistedSpecialPage {
$hookErr = false;
- wfRunHooks( 'UserCanSendEmail', array( &$user, &$hookErr ) );
- wfRunHooks( 'EmailUserPermissionsErrors', array( $user, $editToken, &$hookErr ) );
+ Hooks::run( 'UserCanSendEmail', array( &$user, &$hookErr ) );
+ Hooks::run( 'EmailUserPermissionsErrors', array( $user, $editToken, &$hookErr ) );
if ( $hookErr ) {
return $hookErr;
@@ -324,7 +324,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
$from->name, $to->name )->inContentLanguage()->text();
$error = '';
- if ( !wfRunHooks( 'EmailUser', array( &$to, &$from, &$subject, &$text, &$error ) ) ) {
+ if ( !Hooks::run( 'EmailUser', array( &$to, &$from, &$subject, &$text, &$error ) ) ) {
return $error;
}
@@ -367,12 +367,12 @@ class SpecialEmailUser extends UnlistedSpecialPage {
if ( $data['CCMe'] && $to != $from ) {
$cc_subject = $context->msg( 'emailccsubject' )->rawParams(
$target->getName(), $subject )->text();
- wfRunHooks( 'EmailUserCC', array( &$from, &$from, &$cc_subject, &$text ) );
+ Hooks::run( 'EmailUserCC', array( &$from, &$from, &$cc_subject, &$text ) );
$ccStatus = UserMailer::send( $from, $from, $cc_subject, $text );
$status->merge( $ccStatus );
}
- wfRunHooks( 'EmailUserComplete', array( $to, $from, $subject, $text ) );
+ Hooks::run( 'EmailUserComplete', array( $to, $from, $subject, $text ) );
return $status;
}
diff --git a/includes/specials/SpecialExpandTemplates.php b/includes/specials/SpecialExpandTemplates.php
index 62f957fc..b7582e6c 100644
--- a/includes/specials/SpecialExpandTemplates.php
+++ b/includes/specials/SpecialExpandTemplates.php
@@ -77,7 +77,7 @@ class SpecialExpandTemplates extends SpecialPage {
$options->setMaxIncludeSize( self::MAX_INCLUDE_SIZE );
if ( $this->generateXML ) {
- $wgParser->startExternalParse( $title, $options, OT_PREPROCESS );
+ $wgParser->startExternalParse( $title, $options, Parser::OT_PREPROCESS );
$dom = $wgParser->preprocessToDom( $input );
if ( method_exists( $dom, 'saveXML' ) ) {
@@ -154,7 +154,7 @@ class SpecialExpandTemplates extends SpecialPage {
'contexttitle',
60,
$title,
- array( 'autofocus' => true )
+ array( 'autofocus' => '', 'class' => 'mw-ui-input-inline' )
) . '</p>';
$form .= '<p>' . Xml::label(
$this->msg( 'expand_templates_input' )->text(),
@@ -278,6 +278,7 @@ class SpecialExpandTemplates extends SpecialPage {
) ) );
$out->addParserOutputContent( $pout );
$out->addHTML( Html::closeElement( 'div' ) );
+ $out->setCategoryLinks( $pout->getCategories() );
}
protected function getGroupName() {
diff --git a/includes/specials/SpecialExport.php b/includes/specials/SpecialExport.php
index 38c52a01..c30d962a 100644
--- a/includes/specials/SpecialExport.php
+++ b/includes/specials/SpecialExport.php
@@ -182,13 +182,20 @@ class SpecialExport extends SpecialPage {
$out = $this->getOutput();
$out->addWikiMsg( 'exporttext' );
+ if ( $page == '' ) {
+ $categoryName = $request->getText( 'catname' );
+ } else {
+ $categoryName = '';
+ }
+
$form = Xml::openElement( 'form', array( 'method' => 'post',
'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ) ) );
$form .= Xml::inputLabel(
$this->msg( 'export-addcattext' )->text(),
'catname',
'catname',
- 40
+ 40,
+ $categoryName
) . '&#160;';
$form .= Xml::submitButton(
$this->msg( 'export-addcat' )->text(),
diff --git a/includes/specials/SpecialFileDuplicateSearch.php b/includes/specials/SpecialFileDuplicateSearch.php
index fc26c903..da79bb81 100644
--- a/includes/specials/SpecialFileDuplicateSearch.php
+++ b/includes/specials/SpecialFileDuplicateSearch.php
@@ -110,25 +110,31 @@ class FileDuplicateSearchPage extends QueryPage {
$out = $this->getOutput();
# Create the input form
- $out->addHTML(
- Html::openElement(
- 'form',
- array( 'id' => 'fileduplicatesearch', 'method' => 'get', 'action' => wfScript() )
- ) . "\n" .
- Html::hidden( 'title', $this->getPageTitle()->getPrefixedDBkey() ) . "\n" .
- Html::openElement( 'fieldset' ) . "\n" .
- Html::element( 'legend', null, $this->msg( 'fileduplicatesearch-legend' )->text() ) . "\n" .
- Xml::inputLabel(
- $this->msg( 'fileduplicatesearch-filename' )->text(),
- 'filename',
- 'filename',
- 50,
- $this->filename
- ) . "\n" .
- Xml::submitButton( $this->msg( 'fileduplicatesearch-submit' )->text() ) . "\n" .
- Html::closeElement( 'fieldset' ) . "\n" .
- Html::closeElement( 'form' )
+ $formFields = array(
+ 'filename' => array(
+ 'type' => 'text',
+ 'name' => 'filename',
+ 'label-message' => 'fileduplicatesearch-filename',
+ 'id' => 'filename',
+ 'size' => 50,
+ 'value' => $this->filename,
+ 'cssclass' => 'mw-ui-input-inline'
+ ),
+ );
+ $hiddenFields = array(
+ 'title' => $this->getPageTitle()->getPrefixedDBKey(),
);
+ $htmlForm = HTMLForm::factory( 'inline', $formFields, $this->getContext() );
+ $htmlForm->addHiddenFields( $hiddenFields );
+ $htmlForm->setAction( wfScript() );
+ $htmlForm->setMethod( 'get' );
+ $htmlForm->setSubmitProgressive();
+ $htmlForm->setSubmitTextMsg( $this->msg( 'fileduplicatesearch-submit' ) );
+ $htmlForm->setWrapperLegendMsg( 'fileduplicatesearch-legend' );
+
+ // The form should be visible always, even if it was submitted (e.g. to perform another action).
+ // To bypass the callback validation of HTMLForm, use prepareForm() and displayForm().
+ $htmlForm->prepareForm()->displayForm( false );
if ( $this->file ) {
$this->hash = $this->file->getSha1();
@@ -196,7 +202,7 @@ class FileDuplicateSearchPage extends QueryPage {
*
* @param Skin $skin
* @param File $result
- * @return string
+ * @return string HTML
*/
function formatResult( $skin, $result ) {
global $wgContLang;
@@ -204,15 +210,14 @@ class FileDuplicateSearchPage extends QueryPage {
$nt = $result->getTitle();
$text = $wgContLang->convert( $nt->getText() );
$plink = Linker::link(
- Title::newFromText( $nt->getPrefixedText() ),
- $text
+ $nt,
+ htmlspecialchars( $text )
);
$userText = $result->getUser( 'text' );
if ( $result->isLocal() ) {
$userId = $result->getUser( 'id' );
$user = Linker::userLink( $userId, $userText );
- $user .= $this->getContext()->msg( 'word-separator' )->plain();
$user .= '<span style="white-space: nowrap;">';
$user .= Linker::userToolLinks( $userId, $userText );
$user .= '</span>';
@@ -220,7 +225,8 @@ class FileDuplicateSearchPage extends QueryPage {
$user = htmlspecialchars( $userText );
}
- $time = $this->getLanguage()->userTimeAndDate( $result->getTimestamp(), $this->getUser() );
+ $time = htmlspecialchars( $this->getLanguage()->userTimeAndDate(
+ $result->getTimestamp(), $this->getUser() ) );
return "$plink . . $user . . $time";
}
diff --git a/includes/specials/SpecialFilepath.php b/includes/specials/SpecialFilepath.php
index 5860f636..93232117 100644
--- a/includes/specials/SpecialFilepath.php
+++ b/includes/specials/SpecialFilepath.php
@@ -2,7 +2,6 @@
/**
* Implements Special:Filepath
*
- * @section LICENSE
* 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
diff --git a/includes/specials/SpecialImport.php b/includes/specials/SpecialImport.php
index eab4784c..af869647 100644
--- a/includes/specials/SpecialImport.php
+++ b/includes/specials/SpecialImport.php
@@ -30,6 +30,7 @@
* @ingroup SpecialPage
*/
class SpecialImport extends SpecialPage {
+ private $sourceName = false;
private $interwiki = false;
private $subproject;
private $fullInterwikiPrefix;
@@ -46,17 +47,20 @@ class SpecialImport extends SpecialPage {
*/
public function __construct() {
parent::__construct( 'Import', 'import' );
- $this->namespace = $this->getConfig()->get( 'ImportTargetNamespace' );
}
/**
* Execute
* @param string|null $par
+ * @throws PermissionsError
+ * @throws ReadOnlyError
*/
function execute( $par ) {
$this->setHeaders();
$this->outputHeader();
+ $this->namespace = $this->getConfig()->get( 'ImportTargetNamespace' );
+
$this->getOutput()->addModules( 'mediawiki.special.import' );
$user = $this->getUser();
@@ -98,7 +102,7 @@ class SpecialImport extends SpecialPage {
$isUpload = false;
$request = $this->getRequest();
$this->namespace = $request->getIntOrNull( 'namespace' );
- $sourceName = $request->getVal( "source" );
+ $this->sourceName = $request->getVal( "source" );
$this->logcomment = $request->getText( 'log-comment' );
$this->pageLinkDepth = $this->getConfig()->get( 'ExportMaxLinkDepth' ) == 0
@@ -109,14 +113,14 @@ class SpecialImport extends SpecialPage {
$user = $this->getUser();
if ( !$user->matchEditToken( $request->getVal( 'editToken' ) ) ) {
$source = Status::newFatal( 'import-token-mismatch' );
- } elseif ( $sourceName == 'upload' ) {
+ } elseif ( $this->sourceName == 'upload' ) {
$isUpload = true;
if ( $user->isAllowed( 'importupload' ) ) {
$source = ImportStreamSource::newFromUpload( "xmlimport" );
} else {
throw new PermissionsError( 'importupload' );
}
- } elseif ( $sourceName == "interwiki" ) {
+ } elseif ( $this->sourceName == "interwiki" ) {
if ( !$user->isAllowed( 'import' ) ) {
throw new PermissionsError( 'import' );
}
@@ -156,7 +160,7 @@ class SpecialImport extends SpecialPage {
array( 'importfailed', $source->getWikiText() )
);
} else {
- $importer = new WikiImporter( $source->value );
+ $importer = new WikiImporter( $source->value, $this->getConfig() );
if ( !is_null( $this->namespace ) ) {
$importer->setTargetNamespace( $this->namespace );
}
@@ -190,7 +194,7 @@ class SpecialImport extends SpecialPage {
$reporter->open();
try {
$importer->doImport();
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$exception = $e;
}
$result = $reporter->close();
@@ -250,7 +254,8 @@ class SpecialImport extends SpecialPage {
Xml::label( $this->msg( 'import-comment' )->text(), 'mw-import-comment' ) .
"</td>
<td class='mw-input'>" .
- Xml::input( 'log-comment', 50, '',
+ Xml::input( 'log-comment', 50,
+ ( $this->sourceName == 'upload' ? $this->logcomment : '' ),
array( 'id' => 'mw-import-comment', 'type' => 'text' ) ) . ' ' .
"</td>
</tr>
@@ -430,7 +435,8 @@ class SpecialImport extends SpecialPage {
Xml::label( $this->msg( 'import-comment' )->text(), 'mw-interwiki-comment' ) .
"</td>
<td class='mw-input'>" .
- Xml::input( 'log-comment', 50, '',
+ Xml::input( 'log-comment', 50,
+ ( $this->sourceName == 'interwiki' ? $this->logcomment : '' ),
array( 'id' => 'mw-interwiki-comment', 'type' => 'text' ) ) . ' ' .
"</td>
</tr>
@@ -515,13 +521,14 @@ class ImportReporter extends ContextSource {
/**
* @param Title $title
- * @param Title $origTitle
+ * @param ForeignTitle $foreignTitle
* @param int $revisionCount
* @param int $successCount
* @param array $pageInfo
* @return void
*/
- function reportPage( $title, $origTitle, $revisionCount, $successCount, $pageInfo ) {
+ function reportPage( $title, $foreignTitle, $revisionCount,
+ $successCount, $pageInfo ) {
$args = func_get_args();
call_user_func_array( $this->mOriginalPageOutCallback, $args );
@@ -539,7 +546,6 @@ class ImportReporter extends ContextSource {
"</li>\n"
);
- $log = new LogPage( 'import' );
if ( $this->mIsUpload ) {
$detail = $this->msg( 'import-logentry-upload-detail' )->numParams(
$successCount )->inContentLanguage()->text();
@@ -547,19 +553,26 @@ class ImportReporter extends ContextSource {
$detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text()
. $this->reason;
}
- $log->addEntry( 'upload', $title, $detail, array(), $this->getUser() );
+ $action = 'upload';
} else {
$interwiki = '[[:' . $this->mInterwiki . ':' .
- $origTitle->getPrefixedText() . ']]';
+ $foreignTitle->getFullText() . ']]';
$detail = $this->msg( 'import-logentry-interwiki-detail' )->numParams(
$successCount )->params( $interwiki )->inContentLanguage()->text();
if ( $this->reason ) {
$detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text()
. $this->reason;
}
- $log->addEntry( 'interwiki', $title, $detail, array(), $this->getUser() );
+ $action = 'interwiki';
}
+ $logEntry = new ManualLogEntry( 'import', $action );
+ $logEntry->setTarget( $title );
+ $logEntry->setComment( $detail );
+ $logEntry->setPerformer( $this->getUser() );
+ $logid = $logEntry->insert();
+ $logEntry->publish( $logid );
+
$comment = $detail; // quick
$dbw = wfGetDB( DB_MASTER );
$latest = $title->getLatestRevID();
@@ -576,7 +589,7 @@ class ImportReporter extends ContextSource {
$page = WikiPage::factory( $title );
# Update page record
$page->updateRevisionOn( $dbw, $nullRevision );
- wfRunHooks(
+ Hooks::run(
'NewRevisionFromEditComplete',
array( $page, $nullRevision, $latest, $this->getUser() )
);
diff --git a/includes/specials/SpecialJavaScriptTest.php b/includes/specials/SpecialJavaScriptTest.php
index 7d745a50..ecb166a4 100644
--- a/includes/specials/SpecialJavaScriptTest.php
+++ b/includes/specials/SpecialJavaScriptTest.php
@@ -150,12 +150,11 @@ class SpecialJavaScriptTest extends SpecialPage {
*/
private function viewQUnit() {
$out = $this->getOutput();
- $testConfig = $this->getConfig()->get( 'JavaScriptTestConfig' );
$modules = $out->getResourceLoader()->getTestModuleNames( 'qunit' );
$summary = $this->msg( 'javascripttest-qunit-intro' )
- ->params( $testConfig['qunit']['documentation'] )
+ ->params( 'https://www.mediawiki.org/wiki/Manual:JavaScript_unit_testing' )
->parseAsBlock();
$baseHtml = <<<HTML
@@ -164,13 +163,6 @@ class SpecialJavaScriptTest extends SpecialPage {
</div>
HTML;
- // Used in ./tests/qunit/data/testrunner.js, see also documentation of
- // $wgJavaScriptTestConfig in DefaultSettings.php
- $out->addJsConfigVars(
- 'QUnitTestSwarmInjectJSPath',
- $testConfig['qunit']['testswarm-injectjs']
- );
-
$out->addHtml( $this->wrapSummaryHtml( $summary ) . $baseHtml );
// The testrunner configures QUnit and essentially depends on it. However, test suites
@@ -200,7 +192,6 @@ HTML;
*/
private function exportQUnit() {
$out = $this->getOutput();
-
$out->disable();
$rl = $out->getResourceLoader();
@@ -251,9 +242,13 @@ HTML;
'debug' => ResourceLoader::inDebugMode() ? 'true' : 'false',
) );
- $styles = $out->makeResourceLoaderLink( 'jquery.qunit', ResourceLoaderModule::TYPE_STYLES, false );
+ $styles = $out->makeResourceLoaderLink(
+ 'jquery.qunit', ResourceLoaderModule::TYPE_STYLES, false
+ );
// Use 'raw' since this is a plain HTML page without ResourceLoader
- $scripts = $out->makeResourceLoaderLink( 'jquery.qunit', ResourceLoaderModule::TYPE_SCRIPTS, false, array( 'raw' => 'true' ) );
+ $scripts = $out->makeResourceLoaderLink(
+ 'jquery.qunit', ResourceLoaderModule::TYPE_SCRIPTS, false, array( 'raw' => 'true' )
+ );
$head = trim( $styles['html'] . $scripts['html'] );
$html = <<<HTML
@@ -269,18 +264,12 @@ HTML;
}
/**
- * Return an array of subpages beginning with $search that this special page will accept.
+ * Return an array of subpages that this special page will accept.
*
- * @param string $search Prefix to search for
- * @param int $limit Maximum number of results to return
- * @return string[] Matching subpages
+ * @return string[] subpages
*/
- public function prefixSearchSubpages( $search, $limit = 10 ) {
- return self::prefixSearchArray(
- $search,
- $limit,
- self::$frameworks
- );
+ public function getSubpagesForPrefixSearch() {
+ return self::$frameworks;
}
protected function getGroupName() {
diff --git a/includes/specials/SpecialLinkSearch.php b/includes/specials/SpecialLinkSearch.php
index 371469bb..75ff8f30 100644
--- a/includes/specials/SpecialLinkSearch.php
+++ b/includes/specials/SpecialLinkSearch.php
@@ -27,6 +27,8 @@
* @ingroup SpecialPage
*/
class LinkSearchPage extends QueryPage {
+ /** @var array|bool */
+ private $mungedQuery = false;
/**
* @var PageLinkRenderer
@@ -66,8 +68,9 @@ class LinkSearchPage extends QueryPage {
* This allows for dependency injection even though we don't control object creation.
*/
private function initServices() {
+ global $wgLanguageCode;
if ( !$this->linkRenderer ) {
- $lang = $this->getContext()->getLanguage();
+ $lang = Language::factory( $wgLanguageCode );
$titleFormatter = new MediaWikiTitleCodec( $lang, GenderCache::singleton() );
$this->linkRenderer = new MediaWikiPageLinkRenderer( $titleFormatter );
}
@@ -88,7 +91,7 @@ class LinkSearchPage extends QueryPage {
$request = $this->getRequest();
$target = $request->getVal( 'target', $par );
- $namespace = $request->getIntorNull( 'namespace', null );
+ $namespace = $request->getIntOrNull( 'namespace', null );
$protocols_list = array();
foreach ( $this->getConfig()->get( 'UrlProtocols' ) as $prot ) {
@@ -162,7 +165,7 @@ class LinkSearchPage extends QueryPage {
'namespace' => $namespace,
'protocol' => $protocol ) );
parent::execute( $par );
- if ( $this->mMungedQuery === false ) {
+ if ( $this->mungedQuery === false ) {
$out->addWikiMsg( 'linksearch-error' );
}
}
@@ -221,13 +224,13 @@ class LinkSearchPage extends QueryPage {
$dbr = wfGetDB( DB_SLAVE );
// strip everything past first wildcard, so that
// index-based-only lookup would be done
- list( $this->mMungedQuery, $clause ) = self::mungeQuery( $this->mQuery, $this->mProt );
- if ( $this->mMungedQuery === false ) {
+ list( $this->mungedQuery, $clause ) = self::mungeQuery( $this->mQuery, $this->mProt );
+ if ( $this->mungedQuery === false ) {
// Invalid query; return no results
return array( 'tables' => 'page', 'fields' => 'page_id', 'conds' => '0=1' );
}
- $stripped = LinkFilter::keepOneWildcard( $this->mMungedQuery );
+ $stripped = LinkFilter::keepOneWildcard( $this->mungedQuery );
$like = $dbr->buildLike( $stripped );
$retval = array(
'tables' => array( 'page', 'externallinks' ),
@@ -252,6 +255,25 @@ class LinkSearchPage extends QueryPage {
}
/**
+ * Pre-fill the link cache
+ *
+ * @param IDatabase $db
+ * @param ResultWrapper $res
+ */
+ function preprocessResults( $db, $res ) {
+ if ( $res->numRows() > 0 ) {
+ $linkBatch = new LinkBatch();
+
+ foreach ( $res as $row ) {
+ $linkBatch->add( $row->namespace, $row->title );
+ }
+
+ $res->seek( 0 );
+ $linkBatch->execute();
+ }
+ }
+
+ /**
* @param Skin $skin
* @param object $result Result row
* @return string
@@ -267,24 +289,6 @@ class LinkSearchPage extends QueryPage {
}
/**
- * Override to check query validity.
- *
- * @param mixed $offset Numerical offset or false for no offset
- * @param mixed $limit Numerical limit or false for no limit
- */
- function doQuery( $offset = false, $limit = false ) {
- list( $this->mMungedQuery, ) = LinkSearchPage::mungeQuery( $this->mQuery, $this->mProt );
- if ( $this->mMungedQuery === false ) {
- $this->getOutput()->addWikiMsg( 'linksearch-error' );
- } else {
- // For debugging
- // Generates invalid xhtml with patterns that contain --
- //$this->getOutput()->addHTML( "\n<!-- " . htmlspecialchars( $this->mMungedQuery ) . " -->\n" );
- parent::doQuery( $offset, $limit );
- }
- }
-
- /**
* 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
diff --git a/includes/specials/SpecialListDuplicatedFiles.php b/includes/specials/SpecialListDuplicatedFiles.php
index 26672706..1e3dff6f 100644
--- a/includes/specials/SpecialListDuplicatedFiles.php
+++ b/includes/specials/SpecialListDuplicatedFiles.php
@@ -71,7 +71,7 @@ class ListDuplicatedFilesPage extends QueryPage {
/**
* Pre-fill the link cache
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
diff --git a/includes/specials/SpecialListfiles.php b/includes/specials/SpecialListfiles.php
index 04a83c8f..d4b45fb3 100644
--- a/includes/specials/SpecialListfiles.php
+++ b/includes/specials/SpecialListfiles.php
@@ -87,7 +87,7 @@ class ImageListPager extends TablePager {
$this->mIncluding = $including;
$this->mShowAll = $showAll;
- if ( $userName ) {
+ if ( $userName !== null && $userName !== '' ) {
$nt = Title::newFromText( $userName, NS_USER );
if ( !is_null( $nt ) ) {
$this->mUserName = $nt->getText();
@@ -203,7 +203,9 @@ class ImageListPager extends TablePager {
} else {
return false;
}
- } elseif ( $this->getConfig()->get( 'MiserMode' ) && $this->mShowAll /* && mUserName === null */ ) {
+ } elseif ( $this->getConfig()->get( 'MiserMode' )
+ && $this->mShowAll /* && mUserName === null */
+ ) {
// no oi_timestamp index, so only alphabetical sorting in this case.
if ( $field === 'img_name' ) {
return true;
@@ -300,6 +302,7 @@ class ImageListPager extends TablePager {
* @param int $limit
* @param bool $asc
* @return array
+ * @throws MWException
*/
function reallyDoQuery( $offset, $limit, $asc ) {
$prevTableName = $this->mTableName;
@@ -422,7 +425,7 @@ class ImageListPager extends TablePager {
function formatValue( $field, $value ) {
switch ( $field ) {
case 'thumb':
- $opt = array( 'time' => $this->mCurrentRow->img_timestamp );
+ $opt = array( 'time' => wfTimestamp( TS_MW, $this->mCurrentRow->img_timestamp ) );
$file = RepoGroup::singleton()->getLocalRepo()->findFile( $value, $opt );
// If statement for paranoia
if ( $file ) {
@@ -519,6 +522,7 @@ class ImageListPager extends TablePager {
);
}
+ $this->getOutput()->addModules( 'mediawiki.userSuggest' );
$fields['user'] = array(
'type' => 'text',
'name' => 'user',
@@ -527,6 +531,7 @@ class ImageListPager extends TablePager {
'default' => $this->mUserName,
'size' => '40',
'maxlength' => '255',
+ 'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
);
$fields['ilshowall'] = array(
@@ -541,6 +546,7 @@ class ImageListPager extends TablePager {
unset( $query['title'] );
unset( $query['limit'] );
unset( $query['ilsearch'] );
+ unset( $query['ilshowall'] );
unset( $query['user'] );
$form = new HTMLForm( $fields, $this->getContext() );
diff --git a/includes/specials/SpecialListgrouprights.php b/includes/specials/SpecialListgrouprights.php
index 5bae28f0..828a93b9 100644
--- a/includes/specials/SpecialListgrouprights.php
+++ b/includes/specials/SpecialListgrouprights.php
@@ -86,13 +86,14 @@ class SpecialListGroupRights extends SpecialPage {
$grouppageLocalized = !$msg->isBlank() ?
$msg->text() :
MWNamespace::getCanonicalName( NS_PROJECT ) . ':' . $groupname;
+ $grouppageLocalizedTitle = Title::newFromText( $grouppageLocalized );
- if ( $group == '*' ) {
- // Do not make a link for the generic * group
+ if ( $group == '*' || !$grouppageLocalizedTitle ) {
+ // Do not make a link for the generic * group or group with invalid group page
$grouppage = htmlspecialchars( $groupnameLocalized );
} else {
$grouppage = Linker::link(
- Title::newFromText( $grouppageLocalized ),
+ $grouppageLocalizedTitle,
htmlspecialchars( $groupnameLocalized )
);
}
@@ -235,20 +236,18 @@ class SpecialListGroupRights extends SpecialPage {
foreach ( $permissions as $permission => $granted ) {
//show as granted only if it isn't revoked to prevent duplicate display of permissions
if ( $granted && ( !isset( $revoke[$permission] ) || !$revoke[$permission] ) ) {
- $description = $this->msg( 'listgrouprights-right-display',
+ $r[] = $this->msg( 'listgrouprights-right-display',
User::getRightDescription( $permission ),
'<span class="mw-listgrouprights-right-name">' . $permission . '</span>'
)->parse();
- $r[] = $description;
}
}
foreach ( $revoke as $permission => $revoked ) {
if ( $revoked ) {
- $description = $this->msg( 'listgrouprights-right-revoked',
+ $r[] = $this->msg( 'listgrouprights-right-revoked',
User::getRightDescription( $permission ),
'<span class="mw-listgrouprights-right-name">' . $permission . '</span>'
)->parse();
- $r[] = $description;
}
}
@@ -257,51 +256,28 @@ class SpecialListGroupRights extends SpecialPage {
$lang = $this->getLanguage();
$allGroups = User::getAllGroups();
- if ( $add === true ) {
- $r[] = $this->msg( 'listgrouprights-addgroup-all' )->escaped();
- } elseif ( is_array( $add ) ) {
- $add = array_intersect( array_values( array_unique( $add ) ), $allGroups );
- if ( count( $add ) ) {
- $r[] = $this->msg( 'listgrouprights-addgroup',
- $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $add ) ),
- count( $add )
- )->parse();
- }
- }
-
- if ( $remove === true ) {
- $r[] = $this->msg( 'listgrouprights-removegroup-all' )->escaped();
- } elseif ( is_array( $remove ) ) {
- $remove = array_intersect( array_values( array_unique( $remove ) ), $allGroups );
- if ( count( $remove ) ) {
- $r[] = $this->msg( 'listgrouprights-removegroup',
- $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $remove ) ),
- count( $remove )
- )->parse();
- }
- }
-
- if ( $addSelf === true ) {
- $r[] = $this->msg( 'listgrouprights-addgroup-self-all' )->escaped();
- } elseif ( is_array( $addSelf ) ) {
- $addSelf = array_intersect( array_values( array_unique( $addSelf ) ), $allGroups );
- if ( count( $addSelf ) ) {
- $r[] = $this->msg( 'listgrouprights-addgroup-self',
- $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $addSelf ) ),
- count( $addSelf )
- )->parse();
- }
- }
+ $changeGroups = array(
+ 'addgroup' => $add,
+ 'removegroup' => $remove,
+ 'addgroup-self' => $addSelf,
+ 'removegroup-self' => $removeSelf
+ );
- if ( $removeSelf === true ) {
- $r[] = $this->msg( 'listgrouprights-removegroup-self-all' )->parse();
- } elseif ( is_array( $removeSelf ) ) {
- $removeSelf = array_intersect( array_values( array_unique( $removeSelf ) ), $allGroups );
- if ( count( $removeSelf ) ) {
- $r[] = $this->msg( 'listgrouprights-removegroup-self',
- $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $removeSelf ) ),
- count( $removeSelf )
- )->parse();
+ foreach ( $changeGroups as $messageKey => $changeGroup ) {
+ if ( $changeGroup === true ) {
+ // For grep: listgrouprights-addgroup-all, listgrouprights-removegroup-all,
+ // listgrouprights-addgroup-self-all, listgrouprights-removegroup-self-all
+ $r[] = $this->msg( 'listgrouprights-' . $messageKey . '-all' )->escaped();
+ } elseif ( is_array( $changeGroup ) ) {
+ $changeGroup = array_intersect( array_values( array_unique( $changeGroup ) ), $allGroups );
+ if ( count( $changeGroup ) ) {
+ // For grep: listgrouprights-addgroup, listgrouprights-removegroup,
+ // listgrouprights-addgroup-self, listgrouprights-removegroup-self
+ $r[] = $this->msg( 'listgrouprights-' . $messageKey,
+ $lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $changeGroup ) ),
+ count( $changeGroup )
+ )->parse();
+ }
}
}
diff --git a/includes/specials/SpecialListredirects.php b/includes/specials/SpecialListredirects.php
index de05be41..2df48347 100644
--- a/includes/specials/SpecialListredirects.php
+++ b/includes/specials/SpecialListredirects.php
@@ -72,7 +72,7 @@ class ListredirectsPage extends QueryPage {
/**
* Cache page existence for performance
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
diff --git a/includes/specials/SpecialListusers.php b/includes/specials/SpecialListusers.php
index dad9074d..56c4eb50 100644
--- a/includes/specials/SpecialListusers.php
+++ b/includes/specials/SpecialListusers.php
@@ -35,6 +35,11 @@
class UsersPager extends AlphabeticPager {
/**
+ * @var array A array with user ids as key and a array of groups as value
+ */
+ protected $userGroupCache;
+
+ /**
* @param IContextSource $context
* @param array $par (Default null)
* @param bool $including Whether this page is being transcluded in
@@ -132,8 +137,6 @@ class UsersPager extends AlphabeticPager {
'user_name' => $this->creationSort ? 'MAX(user_name)' : 'user_name',
'user_id' => $this->creationSort ? 'user_id' : 'MAX(user_id)',
'edits' => 'MAX(user_editcount)',
- 'numgroups' => 'COUNT(ug_group)',
- 'singlegroup' => 'MAX(ug_group)', // the usergroup if there is only one
'creation' => 'MIN(user_registration)',
'ipb_deleted' => 'MAX(ipb_deleted)' // block/hide status
),
@@ -150,7 +153,7 @@ class UsersPager extends AlphabeticPager {
'conds' => $conds
);
- wfRunHooks( 'SpecialListusersQueryInfo', array( $this, &$query ) );
+ Hooks::run( 'SpecialListusersQueryInfo', array( $this, &$query ) );
return $query;
}
@@ -176,7 +179,7 @@ class UsersPager extends AlphabeticPager {
$lang = $this->getLanguage();
$groups = '';
- $groups_list = self::getGroups( $row->user_id );
+ $groups_list = self::getGroups( intval( $row->user_id ), $this->userGroupCache );
if ( !$this->including && count( $groups_list ) > 0 ) {
$list = array();
@@ -211,18 +214,45 @@ class UsersPager extends AlphabeticPager {
' ' . $this->msg( 'listusers-blocked', $userName )->escaped() :
'';
- wfRunHooks( 'SpecialListusersFormatRow', array( &$item, $row ) );
+ Hooks::run( 'SpecialListusersFormatRow', array( &$item, $row ) );
return Html::rawElement( 'li', array(), "{$item}{$edits}{$created}{$blocked}" );
}
function doBatchLookups() {
$batch = new LinkBatch();
+ $userIds = array();
# Give some pointers to make user links
foreach ( $this->mResult as $row ) {
$batch->add( NS_USER, $row->user_name );
$batch->add( NS_USER_TALK, $row->user_name );
+ $userIds[] = $row->user_id;
+ }
+
+ // Lookup groups for all the users
+ $dbr = wfGetDB( DB_SLAVE );
+ $groupRes = $dbr->select(
+ 'user_groups',
+ array( 'ug_user', 'ug_group' ),
+ array( 'ug_user' => $userIds ),
+ __METHOD__
+ );
+ $cache = array();
+ $groups = array();
+ foreach ( $groupRes as $row ) {
+ $cache[intval( $row->ug_user )][] = $row->ug_group;
+ $groups[$row->ug_group] = true;
}
+ $this->userGroupCache = $cache;
+
+ // Add page of groups to link batch
+ foreach ( $groups as $group => $unused ) {
+ $groupPage = User::getGroupPage( $group );
+ if ( $groupPage ) {
+ $batch->addObj( $groupPage );
+ }
+ }
+
$batch->execute();
$this->mResult->rewind();
}
@@ -284,12 +314,12 @@ class UsersPager extends AlphabeticPager {
);
$out .= '<br />';
- wfRunHooks( 'SpecialListusersHeaderForm', array( $this, &$out ) );
+ Hooks::run( 'SpecialListusersHeaderForm', array( $this, &$out ) );
# Submit button and form bottom
$out .= Html::hidden( 'limit', $this->mLimit );
$out .= Xml::submitButton( $this->msg( 'allpagessubmit' )->text() );
- wfRunHooks( 'SpecialListusersHeader', array( $this, &$out ) );
+ Hooks::run( 'SpecialListusersHeader', array( $this, &$out ) );
$out .= Xml::closeElement( 'fieldset' ) .
Xml::closeElement( 'form' );
@@ -322,7 +352,7 @@ class UsersPager extends AlphabeticPager {
if ( $this->requestedUser != '' ) {
$query['username'] = $this->requestedUser;
}
- wfRunHooks( 'SpecialListusersDefaultQuery', array( $this, &$query ) );
+ Hooks::run( 'SpecialListusersDefaultQuery', array( $this, &$query ) );
return $query;
}
@@ -331,11 +361,17 @@ class UsersPager extends AlphabeticPager {
* Get a list of groups the specified user belongs to
*
* @param int $uid User id
+ * @param array|null $cache
* @return array
*/
- protected static function getGroups( $uid ) {
- $user = User::newFromId( $uid );
- $groups = array_diff( $user->getEffectiveGroups(), User::getImplicitGroups() );
+ protected static function getGroups( $uid, $cache = null ) {
+ if ( $cache === null ) {
+ $user = User::newFromId( $uid );
+ $effectiveGroups = $user->getEffectiveGroups();
+ } else {
+ $effectiveGroups = isset( $cache[$uid] ) ? $cache[$uid] : array();
+ }
+ $groups = array_diff( $effectiveGroups, User::getImplicitGroups() );
return $groups;
}
@@ -350,7 +386,7 @@ class UsersPager extends AlphabeticPager {
protected static function buildGroupLink( $group, $username ) {
return User::makeGroupLinkHtml(
$group,
- htmlspecialchars( User::getGroupMember( $group, $username ) )
+ User::getGroupMember( $group, $username )
);
}
}
@@ -397,15 +433,12 @@ class SpecialListUsers extends IncludableSpecialPage {
}
/**
- * Return an array of subpages beginning with $search that this special page will accept.
+ * Return an array of subpages that this special page will accept.
*
- * @param string $search Prefix to search for
- * @param int $limit Maximum number of results to return
- * @return string[] Matching subpages
+ * @return string[] subpages
*/
- public function prefixSearchSubpages( $search, $limit = 10 ) {
- $subpages = User::getAllGroups();
- return self::prefixSearchArray( $search, $limit, $subpages );
+ public function getSubpagesForPrefixSearch() {
+ return User::getAllGroups();
}
protected function getGroupName() {
diff --git a/includes/specials/SpecialLog.php b/includes/specials/SpecialLog.php
index dc33801d..e44ce5f5 100644
--- a/includes/specials/SpecialLog.php
+++ b/includes/specials/SpecialLog.php
@@ -29,17 +29,6 @@
* @ingroup SpecialPage
*/
class SpecialLog extends SpecialPage {
- /**
- * List log type for which the target is a user
- * Thus if the given target is in NS_MAIN we can alter it to be an NS_USER
- * Title user instead.
- */
- private $typeOnUser = array(
- 'block',
- 'newusers',
- 'rights',
- );
-
public function __construct() {
parent::__construct( 'Log' );
}
@@ -47,6 +36,7 @@ class SpecialLog extends SpecialPage {
public function execute( $par ) {
$this->setHeaders();
$this->outputHeader();
+ $this->getOutput()->addModules( 'mediawiki.userSuggest' );
$opts = new FormOptions;
$opts->add( 'type', '' );
@@ -94,13 +84,18 @@ class SpecialLog extends SpecialPage {
} elseif ( $offender && IP::isIPAddress( $offender->getName() ) ) {
$qc = array( 'ls_field' => 'target_author_ip', 'ls_value' => $offender->getName() );
}
+ } else {
+ // Allow extensions to add relations to their search types
+ Hooks::run(
+ 'SpecialLogAddLogSearchRelations',
+ array( $opts->getValue( 'type' ), $this->getRequest(), &$qc )
+ );
}
# Some log types are only for a 'User:' title but we might have been given
# only the username instead of the full title 'User:username'. This part try
# to lookup for a user by that name and eventually fix user input. See bug 1697.
- wfRunHooks( 'GetLogTypesOnUser', array( &$this->typeOnUser ) );
- if ( in_array( $opts->getValue( 'type' ), $this->typeOnUser ) ) {
+ if ( in_array( $opts->getValue( 'type' ), self::getLogTypesOnUser() ) ) {
# ok we have a type of log which expect a user title.
$target = Title::newFromText( $opts->getValue( 'page' ) );
if ( $target && $target->getNamespace() === NS_MAIN ) {
@@ -115,17 +110,38 @@ class SpecialLog extends SpecialPage {
}
/**
- * Return an array of subpages beginning with $search that this special page will accept.
+ * List log type for which the target is a user
+ * Thus if the given target is in NS_MAIN we can alter it to be an NS_USER
+ * Title user instead.
*
- * @param string $search Prefix to search for
- * @param int $limit Maximum number of results to return
- * @return string[] Matching subpages
+ * @since 1.25
+ * @return array
*/
- public function prefixSearchSubpages( $search, $limit = 10 ) {
+ public static function getLogTypesOnUser() {
+ static $types = null;
+ if ( $types !== null ) {
+ return $types;
+ }
+ $types = array(
+ 'block',
+ 'newusers',
+ 'rights',
+ );
+
+ Hooks::run( 'GetLogTypesOnUser', array( &$types ) );
+ return $types;
+ }
+
+ /**
+ * Return an array of subpages that this special page will accept.
+ *
+ * @return string[] subpages
+ */
+ public function getSubpagesForPrefixSearch() {
$subpages = $this->getConfig()->get( 'LogTypes' );
$subpages[] = 'all';
sort( $subpages );
- return self::prefixSearchArray( $search, $limit, $subpages );
+ return $subpages;
}
private function parseParams( FormOptions $opts, $par ) {
@@ -149,7 +165,7 @@ class SpecialLog extends SpecialPage {
$loglist = new LogEventsList(
$this->getContext(),
null,
- LogEventsList::USE_REVDEL_CHECKBOXES
+ LogEventsList::USE_CHECKBOXES
);
$pager = new LogPager(
$loglist,
@@ -187,7 +203,7 @@ class SpecialLog extends SpecialPage {
if ( $logBody ) {
$this->getOutput()->addHTML(
$pager->getNavigationBar() .
- $this->getRevisionButton(
+ $this->getActionButtons(
$loglist->beginLogEventsList() .
$logBody .
$loglist->endLogEventsList()
@@ -199,30 +215,50 @@ class SpecialLog extends SpecialPage {
}
}
- private function getRevisionButton( $formcontents ) {
- # If the user doesn't have the ability to delete log entries,
- # don't bother showing them the button.
- if ( !$this->getUser()->isAllowedAll( 'deletedhistory', 'deletelogentry' ) ) {
+ private function getActionButtons( $formcontents ) {
+ $user = $this->getUser();
+ $canRevDelete = $user->isAllowedAll( 'deletedhistory', 'deletelogentry' );
+ $showTagEditUI = ChangeTags::showTagEditingUI( $user );
+ # If the user doesn't have the ability to delete log entries nor edit tags,
+ # don't bother showing them the button(s).
+ if ( !$canRevDelete && !$showTagEditUI ) {
return $formcontents;
}
- # Show button to hide log entries
+ # Show button to hide log entries and/or edit change tags
$s = Html::openElement(
'form',
array( 'action' => wfScript(), 'id' => 'mw-log-deleterevision-submit' )
) . "\n";
- $s .= Html::hidden( 'title', SpecialPage::getTitleFor( 'Revisiondelete' ) ) . "\n";
- $s .= Html::hidden( 'target', SpecialPage::getTitleFor( 'Log' ) ) . "\n";
+ $s .= Html::hidden( 'action', 'historysubmit' ) . "\n";
$s .= Html::hidden( 'type', 'logging' ) . "\n";
- $button = Html::element(
- 'button',
- array(
- 'type' => 'submit',
- 'class' => "deleterevision-log-submit mw-log-deleterevision-button"
- ),
- $this->msg( 'showhideselectedlogentries' )->text()
- ) . "\n";
- $s .= $button . $formcontents . $button;
+
+ $buttons = '';
+ if ( $canRevDelete ) {
+ $buttons .= Html::element(
+ 'button',
+ array(
+ 'type' => 'submit',
+ 'name' => 'revisiondelete',
+ 'value' => '1',
+ 'class' => "deleterevision-log-submit mw-log-deleterevision-button"
+ ),
+ $this->msg( 'showhideselectedlogentries' )->text()
+ ) . "\n";
+ }
+ if ( $showTagEditUI ) {
+ $buttons .= Html::element(
+ 'button',
+ array(
+ 'type' => 'submit',
+ 'name' => 'editchangetags',
+ 'value' => '1',
+ 'class' => "editchangetags-log-submit mw-log-editchangetags-button"
+ ),
+ $this->msg( 'log-edit-tags' )->text()
+ ) . "\n";
+ }
+ $s .= $buttons . $formcontents . $buttons;
$s .= Html::closeElement( 'form' );
return $s;
@@ -235,8 +271,9 @@ class SpecialLog extends SpecialPage {
*/
protected function addHeader( $type ) {
$page = new LogPage( $type );
- $this->getOutput()->setPageTitle( $page->getName()->text() );
- $this->getOutput()->addHTML( $page->getDescription()->parseAsBlock() );
+ $this->getOutput()->setPageTitle( $page->getName() );
+ $this->getOutput()->addHTML( $page->getDescription()
+ ->setContext( $this->getContext() )->parseAsBlock() );
}
protected function getGroupName() {
diff --git a/includes/specials/SpecialLonelypages.php b/includes/specials/SpecialLonelypages.php
index f533234f..c072491b 100644
--- a/includes/specials/SpecialLonelypages.php
+++ b/includes/specials/SpecialLonelypages.php
@@ -72,7 +72,7 @@ class LonelyPagesPage extends PageQueryPage {
);
// Allow extensions to modify the query
- wfRunHooks( 'LonelyPagesQuery', array( &$tables, &$conds, &$joinConds ) );
+ Hooks::run( 'LonelyPagesQuery', array( &$tables, &$conds, &$joinConds ) );
return array(
'tables' => $tables,
diff --git a/includes/specials/SpecialMediaStatistics.php b/includes/specials/SpecialMediaStatistics.php
index 681c332f..b62de5d2 100644
--- a/includes/specials/SpecialMediaStatistics.php
+++ b/includes/specials/SpecialMediaStatistics.php
@@ -73,6 +73,10 @@ class MediaStatisticsPage extends QueryPage {
'namespace' => NS_MEDIA, /* needs to be something */
'value' => '1'
),
+ 'conds' => array(
+ // WMF has a random null row in the db
+ 'img_media_type IS NOT NULL'
+ ),
'options' => array(
'GROUP BY' => array(
'img_media_type',
@@ -99,7 +103,7 @@ class MediaStatisticsPage extends QueryPage {
*
* @param $out OutputPage
* @param $skin Skin (deprecated presumably)
- * @param $dbr DatabaseBase
+ * @param $dbr IDatabase
* @param $res ResultWrapper Results from query
* @param $num integer Number of results
* @param $offset integer Paging offset (Should always be 0 in our case)
@@ -153,7 +157,8 @@ class MediaStatisticsPage extends QueryPage {
);
$row .= Html::rawElement(
'td',
- array(),
+ // Make sure js sorts it in numeric order
+ array( 'data-sort-value' => $count ),
$this->msg( 'mediastatistics-nfiles' )
->numParams( $count )
/** @todo Check to be sure this really should have number formatting */
@@ -185,6 +190,9 @@ class MediaStatisticsPage extends QueryPage {
if ( $decimal == 0 ) {
return '0';
}
+ if ( $decimal >= 100 ) {
+ return '100';
+ }
$percent = sprintf( "%." . max( 0, 2 - floor( log10( $decimal ) ) ) . "f", $decimal );
// Then remove any trailing 0's
return preg_replace( '/\.?0*$/', '', $percent );
@@ -302,6 +310,8 @@ class MediaStatisticsPage extends QueryPage {
*
* @param $skin Skin
* @param $result stdObject Result row
+ * @return bool|string|void
+ * @throws MWException
*/
public function formatResult( $skin, $result ) {
throw new MWException( "unimplemented" );
@@ -310,15 +320,15 @@ class MediaStatisticsPage extends QueryPage {
/**
* Initialize total values so we can figure out percentages later.
*
- * @param $dbr DatabaseBase
+ * @param $dbr IDatabase
* @param $res ResultWrapper
*/
public function preprocessResults( $dbr, $res ) {
$this->totalCount = $this->totalBytes = 0;
foreach ( $res as $row ) {
- list( , , $count, $bytes ) = $this->splitFakeTitle( $row->title );
- $this->totalCount += $count;
- $this->totalBytes += $bytes;
+ $mediaStats = $this->splitFakeTitle( $row->title );
+ $this->totalCount += isset( $mediaStats[2] ) ? $mediaStats[2] : 0;
+ $this->totalBytes += isset( $mediaStats[3] ) ? $mediaStats[3] : 0;
}
$res->seek( 0 );
}
diff --git a/includes/specials/SpecialMergeHistory.php b/includes/specials/SpecialMergeHistory.php
index 43f5a1ba..1f0b6d45 100644
--- a/includes/specials/SpecialMergeHistory.php
+++ b/includes/specials/SpecialMergeHistory.php
@@ -159,9 +159,10 @@ class SpecialMergeHistory extends SpecialPage {
}
function showMergeForm() {
- $this->getOutput()->addWikiMsg( 'mergehistory-header' );
+ $out = $this->getOutput();
+ $out->addWikiMsg( 'mergehistory-header' );
- $this->getOutput()->addHTML(
+ $out->addHTML(
Xml::openElement( 'form', array(
'method' => 'get',
'action' => wfScript() ) ) .
@@ -185,6 +186,8 @@ class SpecialMergeHistory extends SpecialPage {
'</fieldset>' .
'</form>'
);
+
+ $this->addHelpLink( 'Help:Merge history' );
}
private function showHistory() {
@@ -469,18 +472,23 @@ class SpecialMergeHistory extends SpecialPage {
return false;
}
# Update our logs
- $log = new LogPage( 'merge' );
- $log->addEntry(
- 'merge', $targetTitle, $this->mComment,
- array( $destTitle->getPrefixedText(), $timestampLimit ), $this->getUser()
- );
+ $logEntry = new ManualLogEntry( 'merge', 'merge' );
+ $logEntry->setPerformer( $this->getUser() );
+ $logEntry->setComment( $this->mComment );
+ $logEntry->setTarget( $targetTitle );
+ $logEntry->setParameters( array(
+ '4::dest' => $destTitle->getPrefixedText(),
+ '5::mergepoint' => $timestampLimit
+ ) );
+ $logId = $logEntry->insert();
+ $logEntry->publish( $logId );
# @todo message should use redirect=no
$this->getOutput()->addWikiText( $this->msg( 'mergehistory-success',
$targetTitle->getPrefixedText(), $destTitle->getPrefixedText() )->numParams(
$count )->text() );
- wfRunHooks( 'ArticleMergeComplete', array( $targetTitle, $destTitle ) );
+ Hooks::run( 'ArticleMergeComplete', array( $targetTitle, $destTitle ) );
return true;
}
@@ -516,7 +524,6 @@ class MergeHistoryPager extends ReverseChronologicalPager {
}
function getStartBody() {
- wfProfileIn( __METHOD__ );
# Do a link batch query
$this->mResult->seek( 0 );
$batch = new LinkBatch();
@@ -539,8 +546,6 @@ class MergeHistoryPager extends ReverseChronologicalPager {
$batch->execute();
$this->mResult->seek( 0 );
- wfProfileOut( __METHOD__ );
-
return '';
}
diff --git a/includes/specials/SpecialMostcategories.php b/includes/specials/SpecialMostcategories.php
index 9b67f343..c70bbdba 100644
--- a/includes/specials/SpecialMostcategories.php
+++ b/includes/specials/SpecialMostcategories.php
@@ -65,7 +65,7 @@ class MostcategoriesPage extends QueryPage {
}
/**
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
diff --git a/includes/specials/SpecialMostimages.php b/includes/specials/SpecialMostimages.php
index 98d8da3a..36669641 100644
--- a/includes/specials/SpecialMostimages.php
+++ b/includes/specials/SpecialMostimages.php
@@ -25,7 +25,7 @@
*/
/**
- * A special page page that list most used images
+ * A special page that lists most used images
*
* @ingroup SpecialPage
*/
diff --git a/includes/specials/SpecialMostinterwikis.php b/includes/specials/SpecialMostinterwikis.php
index 30ccbe5a..ab3d9c91 100644
--- a/includes/specials/SpecialMostinterwikis.php
+++ b/includes/specials/SpecialMostinterwikis.php
@@ -71,7 +71,7 @@ class MostinterwikisPage extends QueryPage {
/**
* Pre-fill the link cache
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
diff --git a/includes/specials/SpecialMostlinked.php b/includes/specials/SpecialMostlinked.php
index 99f0ecf5..ae0b0708 100644
--- a/includes/specials/SpecialMostlinked.php
+++ b/includes/specials/SpecialMostlinked.php
@@ -74,7 +74,7 @@ class MostlinkedPage extends QueryPage {
/**
* Pre-fill the link cache
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
diff --git a/includes/specials/SpecialMostlinkedcategories.php b/includes/specials/SpecialMostlinkedcategories.php
index f61a1158..cc718e06 100644
--- a/includes/specials/SpecialMostlinkedcategories.php
+++ b/includes/specials/SpecialMostlinkedcategories.php
@@ -55,7 +55,7 @@ class MostlinkedCategoriesPage extends QueryPage {
/**
* Fetch user page links and cache their existence
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
diff --git a/includes/specials/SpecialMostlinkedtemplates.php b/includes/specials/SpecialMostlinkedtemplates.php
index 8e6a596d..a924525d 100644
--- a/includes/specials/SpecialMostlinkedtemplates.php
+++ b/includes/specials/SpecialMostlinkedtemplates.php
@@ -75,7 +75,7 @@ class MostlinkedTemplatesPage extends QueryPage {
/**
* Pre-cache page existence to speed up link generation
*
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
public function preprocessResults( $db, $res ) {
diff --git a/includes/specials/SpecialMovepage.php b/includes/specials/SpecialMovepage.php
index ec9593f7..ae1fefea 100644
--- a/includes/specials/SpecialMovepage.php
+++ b/includes/specials/SpecialMovepage.php
@@ -140,6 +140,7 @@ class MovePageForm extends UnlistedSpecialPage {
$out = $this->getOutput();
$out->setPageTitle( $this->msg( 'move-page', $this->oldTitle->getPrefixedText() ) );
$out->addModules( 'mediawiki.special.movePage' );
+ $this->addHelpLink( 'Help:Moving a page' );
$newTitle = $this->newTitle;
@@ -165,17 +166,7 @@ class MovePageForm extends UnlistedSpecialPage {
$out->addWikiMsg( 'delete_and_move_text', $newTitle->getPrefixedText() );
$movepagebtn = $this->msg( 'delete_and_move' )->text();
$submitVar = 'wpDeleteAndMove';
- $confirm = "
- <tr>
- <td></td>
- <td class='mw-input'>" .
- Xml::checkLabel(
- $this->msg( 'delete_and_move_confirm' )->text(),
- 'wpConfirm',
- 'wpConfirm'
- ) .
- "</td>
- </tr>";
+ $confirm = true;
$err = array();
} else {
if ( $this->oldTitle->getNamespace() == NS_USER && !$this->oldTitle->isSubpage() ) {
@@ -310,12 +301,15 @@ class MovePageForm extends UnlistedSpecialPage {
'id' => 'movepage'
)
) .
- Xml::openElement( 'fieldset' ) .
- Xml::element( 'legend', null, $this->msg( 'move-page-legend' )->text() ) .
- Xml::openElement( 'table', array( 'id' => 'mw-movepage-table' ) ) .
- "<tr>
+ Xml::openElement( 'fieldset' ) .
+ Xml::element( 'legend', null, $this->msg( 'move-page-legend' )->text() ) .
+ Xml::openElement( 'table', array( 'id' => 'mw-movepage-table' ) )
+ );
+
+ $out->addHTML(
+ "<tr>
<td class='mw-label'>" .
- $this->msg( 'movearticle' )->escaped() .
+ $this->msg( 'movearticle' )->escaped() .
"</td>
<td class='mw-input'>
<strong>{$oldTitleLink}</strong>
@@ -323,32 +317,32 @@ class MovePageForm extends UnlistedSpecialPage {
</tr>
<tr>
<td class='mw-label'>" .
- Xml::label( $this->msg( 'newtitle' )->text(), 'wpNewTitleMain' ) .
+ Xml::label( $this->msg( 'newtitle' )->text(), 'wpNewTitleMain' ) .
"</td>
<td class='mw-input'>" .
- Html::namespaceSelector(
- array(
- 'selected' => $newTitle->getNamespace(),
- 'exclude' => $immovableNamespaces
- ),
- array( 'name' => 'wpNewTitleNs', 'id' => 'wpNewTitleNs' )
- ) .
- Xml::input(
- 'wpNewTitleMain',
- 60,
- $wgContLang->recodeForEdit( $newTitle->getText() ),
- array(
- 'type' => 'text',
- 'id' => 'wpNewTitleMain',
- 'maxlength' => 255
- )
- ) .
- Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) .
+ Html::namespaceSelector(
+ array(
+ 'selected' => $newTitle->getNamespace(),
+ 'exclude' => $immovableNamespaces
+ ),
+ array( 'name' => 'wpNewTitleNs', 'id' => 'wpNewTitleNs' )
+ ) .
+ Xml::input(
+ 'wpNewTitleMain',
+ 60,
+ $wgContLang->recodeForEdit( $newTitle->getText() ),
+ array(
+ 'type' => 'text',
+ 'id' => 'wpNewTitleMain',
+ 'maxlength' => 255
+ )
+ ) .
+ Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) .
"</td>
</tr>
<tr>
<td class='mw-label'>" .
- Xml::label( $this->msg( 'movereason' )->text(), 'wpReason' ) .
+ Xml::label( $this->msg( 'movereason' )->text(), 'wpReason' ) .
"</td>
<td class='mw-input'>" .
Xml::input( 'wpReason', 60, $this->reason, array(
@@ -365,12 +359,12 @@ class MovePageForm extends UnlistedSpecialPage {
<tr>
<td></td>
<td class='mw-input'>" .
- Xml::checkLabel(
- $this->msg( 'movetalk' )->text(),
- 'wpMovetalk',
- 'wpMovetalk',
- $this->moveTalk
- ) .
+ Xml::checkLabel(
+ $this->msg( 'movetalk' )->text(),
+ 'wpMovetalk',
+ 'wpMovetalk',
+ $this->moveTalk
+ ) .
"</td>
</tr>"
);
@@ -389,14 +383,14 @@ class MovePageForm extends UnlistedSpecialPage {
$out->addHTML( "
<tr>
<td></td>
- <td class='mw-input' >" .
- Xml::checkLabel(
- $this->msg( 'move-leave-redirect' )->text(),
- 'wpLeaveRedirect',
- 'wpLeaveRedirect',
- $isChecked,
- $options
- ) .
+ <td class='mw-input'>" .
+ Xml::checkLabel(
+ $this->msg( 'move-leave-redirect' )->text(),
+ 'wpLeaveRedirect',
+ 'wpLeaveRedirect',
+ $isChecked,
+ $options
+ ) .
"</td>
</tr>"
);
@@ -406,13 +400,13 @@ class MovePageForm extends UnlistedSpecialPage {
$out->addHTML( "
<tr>
<td></td>
- <td class='mw-input' >" .
- Xml::checkLabel(
- $this->msg( 'fix-double-redirects' )->text(),
- 'wpFixRedirects',
- 'wpFixRedirects',
- $this->fixRedirects
- ) .
+ <td class='mw-input'>" .
+ Xml::checkLabel(
+ $this->msg( 'fix-double-redirects' )->text(),
+ 'wpFixRedirects',
+ 'wpFixRedirects',
+ $this->fixRedirects
+ ) .
"</td>
</tr>"
);
@@ -423,21 +417,23 @@ class MovePageForm extends UnlistedSpecialPage {
$out->addHTML( "
<tr>
<td></td>
- <td class=\"mw-input\">" .
- Xml::check(
- 'wpMovesubpages',
- # Don't check the box if we only have talk subpages to
- # move and we aren't moving the talk page.
- $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
- array( 'id' => 'wpMovesubpages' )
- ) . '&#160;' .
- Xml::tags( 'label', array( 'for' => 'wpMovesubpages' ),
- $this->msg(
- ( $this->oldTitle->hasSubpages()
- ? 'move-subpages'
- : 'move-talk-subpages' )
- )->numParams( $maximumMovedPages )->params( $maximumMovedPages )->parse()
- ) .
+ <td class='mw-input'>" .
+ Xml::check(
+ 'wpMovesubpages',
+ # Don't check the box if we only have talk subpages to
+ # move and we aren't moving the talk page.
+ $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
+ array( 'id' => 'wpMovesubpages' )
+ ) . '&#160;' .
+ Xml::tags(
+ 'label',
+ array( 'for' => 'wpMovesubpages' ),
+ $this->msg(
+ ( $this->oldTitle->hasSubpages()
+ ? 'move-subpages'
+ : 'move-talk-subpages' )
+ )->numParams( $maximumMovedPages )->params( $maximumMovedPages )->parse()
+ ) .
"</td>
</tr>"
);
@@ -448,32 +444,50 @@ class MovePageForm extends UnlistedSpecialPage {
# Don't allow watching if user is not logged in
if ( $user->isLoggedIn() ) {
$out->addHTML( "
- <tr>
- <td></td>
- <td class='mw-input'>" .
- Xml::checkLabel(
- $this->msg( 'move-watch' )->text(),
- 'wpWatch',
- 'watch',
- $watchChecked
- ) .
- "</td>
- </tr>" );
+ <tr>
+ <td></td>
+ <td class='mw-input'>" .
+ Xml::checkLabel(
+ $this->msg( 'move-watch' )->text(),
+ 'wpWatch',
+ 'watch',
+ $watchChecked
+ ) .
+ "</td>
+ </tr>"
+ );
+ }
+
+ if ( $confirm ) {
+ $out->addHTML( "
+ <tr>
+ <td></td>
+ <td class='mw-input'>" .
+ Xml::checkLabel(
+ $this->msg( 'delete_and_move_confirm' )->text(),
+ 'wpConfirm',
+ 'wpConfirm'
+ ) .
+ "</td>
+ </tr>"
+ );
}
$out->addHTML( "
- {$confirm}
<tr>
- <td>&#160;</td>
+ <td></td>
<td class='mw-submit'>" .
- Xml::submitButton( $movepagebtn, array( 'name' => $submitVar ) ) .
+ Xml::submitButton( $movepagebtn, array( 'name' => $submitVar ) ) .
"</td>
- </tr>" .
- Xml::closeElement( 'table' ) .
- Html::hidden( 'wpEditToken', $user->getEditToken() ) .
- Xml::closeElement( 'fieldset' ) .
- Xml::closeElement( 'form' ) .
- "\n"
+ </tr>"
+ );
+
+ $out->addHTML(
+ Xml::closeElement( 'table' ) .
+ Html::hidden( 'wpEditToken', $user->getEditToken() ) .
+ Xml::closeElement( 'fieldset' ) .
+ Xml::closeElement( 'form' ) .
+ "\n"
);
$this->showLogFragment( $this->oldTitle );
@@ -523,8 +537,9 @@ class MovePageForm extends UnlistedSpecialPage {
// Delete an associated image if there is
if ( $nt->getNamespace() == NS_FILE ) {
$file = wfLocalFile( $nt );
+ $file->load( File::READ_LATEST );
if ( $file->exists() ) {
- $file->delete( $reason, false );
+ $file->delete( $reason, false, $user );
}
}
@@ -549,10 +564,22 @@ class MovePageForm extends UnlistedSpecialPage {
}
# Do the actual move.
- $error = $ot->moveTo( $nt, true, $this->reason, $createRedirect );
- if ( $error !== true ) {
- $this->showForm( $error );
+ $mp = new MovePage( $ot, $nt );
+ $valid = $mp->isValidMove();
+ if ( !$valid->isOK() ) {
+ $this->showForm( $valid->getErrorsArray() );
+ return;
+ }
+
+ $permStatus = $mp->checkPermissions( $user, $this->reason );
+ if ( !$permStatus->isOK() ) {
+ $this->showForm( $permStatus->getErrorsArray() );
+ return;
+ }
+ $status = $mp->move( $user, $this->reason, $createRedirect );
+ if ( !$status->isOK() ) {
+ $this->showForm( $status->getErrorsArray() );
return;
}
@@ -592,7 +619,7 @@ class MovePageForm extends UnlistedSpecialPage {
$newLink )->params( $oldText, $newText )->parseAsBlock() );
$out->addWikiMsg( $msgName );
- wfRunHooks( 'SpecialMovepageAfterMove', array( &$this, &$ot, &$nt ) );
+ Hooks::run( 'SpecialMovepageAfterMove', array( &$this, &$ot, &$nt ) );
# Now we move extra pages we've been asked to move: subpages and talk
# pages. First, if the old page or the new page is a talk page, we
@@ -673,7 +700,10 @@ class MovePageForm extends UnlistedSpecialPage {
$oldSubpage->getDBkey()
);
- if ( $oldSubpage->isTalkPage() ) {
+ if ( $oldSubpage->isSubpage() && ( $ot->isTalkPage() xor $nt->isTalkPage() ) ) {
+ // Moving a subpage from a subject namespace to a talk namespace or vice-versa
+ $newNs = $nt->getNamespace();
+ } elseif ( $oldSubpage->isTalkPage() ) {
$newNs = $nt->getTalkPage()->getNamespace();
} else {
$newNs = $nt->getSubjectPage()->getNamespace();
diff --git a/includes/specials/SpecialMyLanguage.php b/includes/specials/SpecialMyLanguage.php
index 71b18930..6cea1581 100644
--- a/includes/specials/SpecialMyLanguage.php
+++ b/includes/specials/SpecialMyLanguage.php
@@ -80,6 +80,11 @@ class SpecialMyLanguage extends RedirectSpecialArticle {
return null;
}
+ if ( $base->isRedirect() ) {
+ $page = new WikiPage( $base );
+ $base = $page->getRedirectTarget();
+ }
+
$uiCode = $this->getLanguage()->getCode();
$proposed = $base->getSubpage( $uiCode );
if ( $uiCode !== $this->getConfig()->get( 'LanguageCode' ) && $proposed && $proposed->exists() ) {
diff --git a/includes/specials/SpecialNewimages.php b/includes/specials/SpecialNewimages.php
index 546c1914..00c8e050 100644
--- a/includes/specials/SpecialNewimages.php
+++ b/includes/specials/SpecialNewimages.php
@@ -30,6 +30,9 @@ class SpecialNewFiles extends IncludableSpecialPage {
$this->setHeaders();
$this->outputHeader();
+ $out = $this->getOutput();
+ $this->addHelpLink( 'Help:New images' );
+
$pager = new NewFilesPager( $this->getContext(), $par );
if ( !$this->including() ) {
@@ -39,9 +42,9 @@ class SpecialNewFiles extends IncludableSpecialPage {
$form->displayForm( '' );
}
- $this->getOutput()->addHTML( $pager->getBody() );
+ $out->addHTML( $pager->getBody() );
if ( !$this->including() ) {
- $this->getOutput()->addHTML( $pager->getNavigationBar() );
+ $out->addHTML( $pager->getNavigationBar() );
}
}
@@ -59,7 +62,7 @@ class SpecialNewFiles extends IncludableSpecialPage {
if ( !$message->isDisabled() ) {
$this->getOutput()->addWikiText(
Html::rawElement( 'p',
- array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() ),
+ array( 'lang' => $wgContLang->getHtmlCode(), 'dir' => $wgContLang->getDir() ),
"\n" . $message->plain() . "\n"
),
/* $lineStart */ false,
@@ -141,7 +144,7 @@ class NewFilesPager extends ReverseChronologicalPager {
$mode = $this->getRequest()->getVal( 'gallerymode', null );
try {
$this->gallery = ImageGalleryBase::factory( $mode, $this->getContext() );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// User specified something invalid, fallback to default.
$this->gallery = ImageGalleryBase::factory( false, $this->getContext() );
}
@@ -201,7 +204,10 @@ class NewFilesPager extends ReverseChronologicalPager {
$context = new DerivativeContext( $this->getContext() );
$context->setTitle( $this->getTitle() ); // Remove subpage
$form = new HTMLForm( $fields, $context );
+
$form->setSubmitTextMsg( 'ilsubmit' );
+ $form->setSubmitProgressive();
+
$form->setMethod( 'get' );
$form->setWrapperLegendMsg( 'newimages-legend' );
diff --git a/includes/specials/SpecialNewpages.php b/includes/specials/SpecialNewpages.php
index 0b70bb7e..899c7368 100644
--- a/includes/specials/SpecialNewpages.php
+++ b/includes/specials/SpecialNewpages.php
@@ -56,7 +56,7 @@ class SpecialNewpages extends IncludableSpecialPage {
$opts->add( 'invert', false );
$this->customFilters = array();
- wfRunHooks( 'SpecialNewPagesFilters', array( $this, &$this->customFilters ) );
+ Hooks::run( 'SpecialNewPagesFilters', array( $this, &$this->customFilters ) );
foreach ( $this->customFilters as $key => $params ) {
$opts->add( $key, $params['default'] );
}
@@ -127,6 +127,8 @@ class SpecialNewpages extends IncludableSpecialPage {
$this->showNavigation = !$this->including(); // Maybe changed in setup
$this->setup( $par );
+ $this->addHelpLink( 'Help:New pages' );
+
if ( !$this->including() ) {
// Settings
$this->form();
@@ -198,6 +200,9 @@ class SpecialNewpages extends IncludableSpecialPage {
}
protected function form() {
+ $out = $this->getOutput();
+ $out->addModules( 'mediawiki.userSuggest' );
+
// Consume values
$this->opts->consumeValue( 'offset' ); // don't carry offset, DWIW
$namespace = $this->opts->consumeValue( 'namespace' );
@@ -216,72 +221,62 @@ class SpecialNewpages extends IncludableSpecialPage {
}
$hidden = implode( "\n", $hidden );
- $tagFilter = ChangeTags::buildTagFilterSelector( $tagFilterVal );
- if ( $tagFilter ) {
- list( $tagFilterLabel, $tagFilterSelector ) = $tagFilter;
- }
+ $form = array(
+ 'namespace' => array(
+ 'type' => 'namespaceselect',
+ 'name' => 'namespace',
+ 'label-message' => 'namespace',
+ 'default' => $namespace,
+ ),
+ 'nsinvert' => array(
+ 'type' => 'check',
+ 'name' => 'invert',
+ 'label-message' => 'invert',
+ 'default' => $nsinvert,
+ 'tooltip' => $this->msg( 'tooltip-invert' )->text(),
+ ),
+ 'tagFilter' => array(
+ 'type' => 'tagfilter',
+ 'name' => 'tagfilter',
+ 'label-raw' => $this->msg( 'tag-filter' )->parse(),
+ 'default' => $tagFilterVal,
+ ),
+ 'username' => array(
+ 'type' => 'text',
+ 'name' => 'username',
+ 'label-message' => 'newpages-username',
+ 'default' => $userText,
+ 'id' => 'mw-np-username',
+ 'size' => 30,
+ 'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
+ ),
+ );
+
+ $htmlForm = new HTMLForm( $form, $this->getContext() );
- $form = Xml::openElement( 'form', array( 'action' => wfScript() ) ) .
- Html::hidden( 'title', $this->getPageTitle()->getPrefixedDBkey() ) .
- Xml::fieldset( $this->msg( 'newpages' )->text() ) .
- Xml::openElement( 'table', array( 'id' => 'mw-newpages-table' ) ) .
- '<tr>
- <td class="mw-label">' .
- Xml::label( $this->msg( 'namespace' )->text(), 'namespace' ) .
- '</td>
- <td class="mw-input">' .
- Html::namespaceSelector(
- array(
- 'selected' => $namespace,
- 'all' => 'all',
- ), array(
- 'name' => 'namespace',
- 'id' => 'namespace',
- 'class' => 'namespaceselector',
- )
- ) . '&#160;' .
- Xml::checkLabel(
- $this->msg( 'invert' )->text(),
- 'invert',
- 'nsinvert',
- $nsinvert,
- array( 'title' => $this->msg( 'tooltip-invert' )->text() )
+ $htmlForm->setSubmitText( $this->msg( 'allpagessubmit' )->text() );
+ $htmlForm->setSubmitProgressive();
+ // The form should be visible on each request (inclusive requests with submitted forms), so
+ // return always false here.
+ $htmlForm->setSubmitCallback(
+ function () {
+ return false;
+ }
+ );
+ $htmlForm->setMethod( 'get' );
+
+ $out->addHtml( Xml::fieldset( $this->msg( 'newpages' )->text() ) );
+
+ $htmlForm->show();
+
+ $out->addHtml(
+ Html::rawElement(
+ 'div',
+ null,
+ $this->filterLinks()
) .
- '</td>
- </tr>' . ( $tagFilter ? (
- '<tr>
- <td class="mw-label">' .
- $tagFilterLabel .
- '</td>
- <td class="mw-input">' .
- $tagFilterSelector .
- '</td>
- </tr>' ) : '' ) .
- '<tr>
- <td class="mw-label">' .
- Xml::label( $this->msg( 'newpages-username' )->text(), 'mw-np-username' ) .
- '</td>
- <td class="mw-input">' .
- Xml::input( 'username', 30, $userText, array( 'id' => 'mw-np-username' ) ) .
- '</td>
- </tr>' .
- '<tr> <td></td>
- <td class="mw-submit">' .
- Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) .
- '</td>
- </tr>' .
- '<tr>
- <td></td>
- <td class="mw-input">' .
- $this->filterLinks() .
- '</td>
- </tr>' .
- Xml::closeElement( 'table' ) .
- Xml::closeElement( 'fieldset' ) .
- $hidden .
- Xml::closeElement( 'form' );
-
- $this->getOutput()->addHTML( $form );
+ Xml::closeElement( 'fieldset' )
+ );
}
/**
@@ -340,12 +335,12 @@ class SpecialNewpages extends IncludableSpecialPage {
$hist = Html::rawElement( 'span', array( 'class' => 'mw-newpages-history' ),
$this->msg( 'parentheses' )->rawParams( $histLink )->escaped() );
- $length = Html::element(
+ $length = Html::rawElement(
'span',
array( 'class' => 'mw-newpages-length' ),
- $this->msg( 'brackets' )->params( $this->msg( 'nbytes' )
- ->numParams( $result->length )->text()
- )
+ $this->msg( 'brackets' )->rawParams(
+ $this->msg( 'nbytes' )->numParams( $result->length )->escaped()
+ )->escaped()
);
$ulink = Linker::revUserTools( $rev );
@@ -555,7 +550,7 @@ class NewPagesPager extends ReverseChronologicalPager {
);
$join_conds = array( 'page' => array( 'INNER JOIN', 'page_id=rc_cur_id' ) );
- wfRunHooks( 'SpecialNewpagesConditions',
+ Hooks::run( 'SpecialNewpagesConditions',
array( &$this, $this->opts, &$conds, &$tables, &$fields, &$join_conds ) );
$options = array();
diff --git a/includes/specials/SpecialPageLanguage.php b/includes/specials/SpecialPageLanguage.php
index 2acf23cd..79b2444e 100644
--- a/includes/specials/SpecialPageLanguage.php
+++ b/includes/specials/SpecialPageLanguage.php
@@ -90,10 +90,12 @@ class SpecialPageLanguage extends FormSpecialPage {
return $this->showLogFragment( $this->par );
}
+ protected function getDisplayFormat() {
+ return 'vform';
+ }
+
public function alterForm( HTMLForm $form ) {
- $form->setDisplayFormat( 'vform' );
- $form->setWrapperLegend( false );
- wfRunHooks( 'LanguageSelector', array( $this->getOutput(), 'mw-languageselector' ) );
+ Hooks::run( 'LanguageSelector', array( $this->getOutput(), 'mw-languageselector' ) );
}
/**
diff --git a/includes/specials/SpecialPagesWithProp.php b/includes/specials/SpecialPagesWithProp.php
index f5b19cc6..670a3973 100644
--- a/includes/specials/SpecialPagesWithProp.php
+++ b/includes/specials/SpecialPagesWithProp.php
@@ -83,11 +83,13 @@ class SpecialPagesWithProp extends QueryPage {
*
* @param string $search Prefix to search for
* @param int $limit Maximum number of results to return
+ * @param int $offset Number of pages to skip
* @return string[] Matching subpages
*/
- public function prefixSearchSubpages( $search, $limit = 10 ) {
- $subpages = array_keys( $this->getExistingPropNames() );
- return self::prefixSearchArray( $search, $limit, $subpages );
+ public function prefixSearchSubpages( $search, $limit, $offset ) {
+ $subpages = array_keys( $this->queryExistingProps( $limit, $offset ) );
+ // We've already limited and offsetted, set to N and 0 respectively.
+ return self::prefixSearchArray( $search, count( $subpages ), $subpages, 0 );
}
/**
@@ -154,23 +156,38 @@ class SpecialPagesWithProp extends QueryPage {
public function getExistingPropNames() {
if ( $this->existingPropNames === null ) {
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select(
- 'page_props',
- 'pp_propname',
- '',
- __METHOD__,
- array( 'DISTINCT', 'ORDER BY' => 'pp_propname' )
- );
- $propnames = array();
- foreach ( $res as $row ) {
- $propnames[$row->pp_propname] = $row->pp_propname;
- }
- $this->existingPropNames = $propnames;
+ $this->existingPropNames = $this->queryExistingProps();
}
return $this->existingPropNames;
}
+ protected function queryExistingProps( $limit = null, $offset = 0 ) {
+ $opts = array(
+ 'DISTINCT', 'ORDER BY' => 'pp_propname'
+ );
+ if ( $limit ) {
+ $opts['LIMIT'] = $limit;
+ }
+ if ( $offset ) {
+ $opts['OFFSET'] = $offset;
+ }
+
+ $res = wfGetDB( DB_SLAVE )->select(
+ 'page_props',
+ 'pp_propname',
+ '',
+ __METHOD__,
+ $opts
+ );
+
+ $propnames = array();
+ foreach ( $res as $row ) {
+ $propnames[$row->pp_propname] = $row->pp_propname;
+ }
+
+ return $propnames;
+ }
+
protected function getGroupName() {
return 'pages';
}
diff --git a/includes/specials/SpecialPasswordReset.php b/includes/specials/SpecialPasswordReset.php
index 3061c85b..a2dc2add 100644
--- a/includes/specials/SpecialPasswordReset.php
+++ b/includes/specials/SpecialPasswordReset.php
@@ -103,16 +103,13 @@ class SpecialPasswordReset extends FormSpecialPage {
return $a;
}
+ protected function getDisplayFormat() {
+ return 'vform';
+ }
+
public function alterForm( HTMLForm $form ) {
$resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' );
- $form->setDisplayFormat( 'vform' );
- // Turn the old-school line around the form off.
- // XXX This wouldn't be necessary here if we could set the format of
- // the HTMLForm to 'vform' at its creation, but there's no way to do so
- // from a FormSpecialPage class.
- $form->setWrapperLegend( false );
-
$form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
$i = 0;
@@ -195,7 +192,7 @@ class SpecialPasswordReset extends FormSpecialPage {
// Check for hooks (captcha etc), and allow them to modify the users list
$error = array();
- if ( !wfRunHooks( 'SpecialPasswordResetOnSubmit', array( &$users, $data, &$error ) ) ) {
+ if ( !Hooks::run( 'SpecialPasswordResetOnSubmit', array( &$users, $data, &$error ) ) ) {
return array( $error );
}
@@ -246,7 +243,7 @@ class SpecialPasswordReset extends FormSpecialPage {
return array( 'badipaddress' );
}
$caller = $this->getUser();
- wfRunHooks( 'User::mailPasswordInternal', array( &$caller, &$ip, &$firstUser ) );
+ Hooks::run( 'User::mailPasswordInternal', array( &$caller, &$ip, &$firstUser ) );
$username = $caller->getName();
$msg = IP::isValid( $username )
? 'passwordreset-emailtext-ip'
diff --git a/includes/specials/SpecialPopularpages.php b/includes/specials/SpecialPopularpages.php
deleted file mode 100644
index 2a80f651..00000000
--- a/includes/specials/SpecialPopularpages.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Implements Special:PopularPages
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
-
-/**
- * A special page that list most viewed pages
- *
- * @ingroup SpecialPage
- */
-class PopularPagesPage extends QueryPage {
- function __construct( $name = 'Popularpages' ) {
- parent::__construct( $name );
- }
-
- function isExpensive() {
- # page_counter is not indexed
- return true;
- }
-
- function isSyndicated() {
- return false;
- }
-
- function getQueryInfo() {
- return array(
- 'tables' => array( 'page' ),
- 'fields' => array(
- 'namespace' => 'page_namespace',
- 'title' => 'page_title',
- 'value' => 'page_counter' ),
- 'conds' => array(
- 'page_is_redirect' => 0,
- 'page_namespace' => MWNamespace::getContentNamespaces()
- )
- );
- }
-
- /**
- * @param Skin $skin
- * @param object $result Result row
- * @return string
- */
- function formatResult( $skin, $result ) {
- global $wgContLang;
-
- $title = Title::makeTitleSafe( $result->namespace, $result->title );
- if ( !$title ) {
- return Html::element(
- 'span',
- array( 'class' => 'mw-invalidtitle' ),
- Linker::getInvalidTitleDescription(
- $this->getContext(),
- $result->namespace,
- $result->title )
- );
- }
-
- $link = Linker::linkKnown(
- $title,
- htmlspecialchars( $wgContLang->convert( $title->getPrefixedText() ) )
- );
- $nv = $this->msg( 'nviews' )->numParams( $result->value )->escaped();
-
- return $this->getLanguage()->specialList( $link, $nv );
- }
-
- protected function getGroupName() {
- return 'wiki';
- }
-}
diff --git a/includes/specials/SpecialPreferences.php b/includes/specials/SpecialPreferences.php
index cea00fa6..7371da74 100644
--- a/includes/specials/SpecialPreferences.php
+++ b/includes/specials/SpecialPreferences.php
@@ -55,6 +55,8 @@ class SpecialPreferences extends SpecialPage {
);
}
+ $this->addHelpLink( 'Help:Preferences' );
+
$htmlForm = Preferences::getFormObject( $this->getUser(), $this->getContext() );
$htmlForm->setSubmitCallback( array( 'Preferences', 'tryUISubmit' ) );
diff --git a/includes/specials/SpecialPrefixindex.php b/includes/specials/SpecialPrefixindex.php
index 2e67e2b5..5a67d924 100644
--- a/includes/specials/SpecialPrefixindex.php
+++ b/includes/specials/SpecialPrefixindex.php
@@ -102,7 +102,10 @@ class SpecialPrefixindex extends SpecialAllPages {
*/
protected function namespacePrefixForm( $namespace = NS_MAIN, $from = '' ) {
$out = Xml::openElement( 'div', array( 'class' => 'namespaceoptions' ) );
- $out .= Xml::openElement( 'form', array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) ) );
+ $out .= Xml::openElement(
+ 'form',
+ array( 'method' => 'get', 'action' => $this->getConfig()->get( 'Script' ) )
+ );
$out .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
$out .= Xml::openElement( 'fieldset' );
$out .= Xml::element( 'legend', null, $this->msg( 'allpages' )->text() );
diff --git a/includes/specials/SpecialProtectedpages.php b/includes/specials/SpecialProtectedpages.php
index 0ba73857..00e56c1c 100644
--- a/includes/specials/SpecialProtectedpages.php
+++ b/includes/specials/SpecialProtectedpages.php
@@ -39,11 +39,6 @@ class SpecialProtectedpages extends SpecialPage {
$this->outputHeader();
$this->getOutput()->addModuleStyles( 'mediawiki.special' );
- // Purge expired entries on one in every 10 queries
- if ( !mt_rand( 0, 10 ) ) {
- Title::purgeExpiredRestrictions();
- }
-
$request = $this->getRequest();
$type = $request->getVal( $this->IdType );
$level = $request->getVal( $this->IdLevel );
@@ -353,7 +348,7 @@ class ProtectedPagesPager extends TablePager {
/**
* @param string $field
* @param string $value
- * @return string
+ * @return string HTML
* @throws MWException
*/
function formatValue( $field, $value ) {
@@ -372,7 +367,8 @@ class ProtectedPagesPager extends TablePager {
$this->msg( 'protectedpages-unknown-timestamp' )->escaped()
);
} else {
- $formatted = $this->getLanguage()->userTimeAndDate( $value, $this->getUser() );
+ $formatted = htmlspecialchars( $this->getLanguage()->userTimeAndDate(
+ $value, $this->getUser() ) );
}
break;
@@ -402,7 +398,8 @@ class ProtectedPagesPager extends TablePager {
break;
case 'pr_expiry':
- $formatted = $this->getLanguage()->formatExpiry( $value, /* User preference timezone */true );
+ $formatted = htmlspecialchars( $this->getLanguage()->formatExpiry(
+ $value, /* User preference timezone */true ) );
$title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
if ( $this->getUser()->isAllowed( 'protect' ) && $title ) {
$changeProtection = Linker::linkKnown(
@@ -454,7 +451,7 @@ class ProtectedPagesPager extends TablePager {
// Messages: restriction-level-sysop, restriction-level-autoconfirmed
$params[] = $this->msg( 'restriction-level-' . $row->pr_level )->escaped();
if ( $row->pr_cascade ) {
- $params[] = $this->msg( 'protect-summary-cascade' )->text();
+ $params[] = $this->msg( 'protect-summary-cascade' )->escaped();
}
$formatted = $this->getLanguage()->commaList( $params );
break;
@@ -493,7 +490,7 @@ class ProtectedPagesPager extends TablePager {
function getQueryInfo() {
$conds = $this->mConds;
$conds[] = 'pr_expiry > ' . $this->mDb->addQuotes( $this->mDb->timestamp() ) .
- 'OR pr_expiry IS NULL';
+ ' OR pr_expiry IS NULL';
$conds[] = 'page_id=pr_page';
$conds[] = 'pr_type=' . $this->mDb->addQuotes( $this->type );
diff --git a/includes/specials/SpecialProtectedtitles.php b/includes/specials/SpecialProtectedtitles.php
index a40da87d..dd9198cb 100644
--- a/includes/specials/SpecialProtectedtitles.php
+++ b/includes/specials/SpecialProtectedtitles.php
@@ -38,11 +38,6 @@ class SpecialProtectedtitles extends SpecialPage {
$this->setHeaders();
$this->outputHeader();
- // Purge expired entries on one in every 10 queries
- if ( !mt_rand( 0, 10 ) ) {
- Title::purgeExpiredRestrictions();
- }
-
$request = $this->getRequest();
$type = $request->getVal( $this->IdType );
$level = $request->getVal( $this->IdLevel );
@@ -72,7 +67,6 @@ class SpecialProtectedtitles extends SpecialPage {
* @return string
*/
function formatRow( $row ) {
- wfProfileIn( __METHOD__ );
static $infinity = null;
@@ -82,7 +76,6 @@ class SpecialProtectedtitles extends SpecialPage {
$title = Title::makeTitleSafe( $row->pt_namespace, $row->pt_title );
if ( !$title ) {
- wfProfileOut( __METHOD__ );
return Html::rawElement(
'li',
@@ -119,8 +112,6 @@ class SpecialProtectedtitles extends SpecialPage {
)->escaped();
}
- wfProfileOut( __METHOD__ );
-
// @todo i18n: This should use a comma separator instead of a hard coded comma, right?
return '<li>' . $lang->specialList( $link, implode( $description_items, ', ' ) ) . "</li>\n";
}
@@ -227,7 +218,6 @@ class ProtectedTitlesPager extends AlphabeticPager {
}
function getStartBody() {
- wfProfileIn( __METHOD__ );
# Do a link batch query
$this->mResult->seek( 0 );
$lb = new LinkBatch;
@@ -237,7 +227,6 @@ class ProtectedTitlesPager extends AlphabeticPager {
}
$lb->execute();
- wfProfileOut( __METHOD__ );
return '';
}
@@ -258,7 +247,8 @@ class ProtectedTitlesPager extends AlphabeticPager {
*/
function getQueryInfo() {
$conds = $this->mConds;
- $conds[] = 'pt_expiry>' . $this->mDb->addQuotes( $this->mDb->timestamp() );
+ $conds[] = 'pt_expiry > ' . $this->mDb->addQuotes( $this->mDb->timestamp() ) .
+ ' OR pt_expiry IS NULL';
if ( $this->level ) {
$conds['pt_create_perm'] = $this->level;
}
diff --git a/includes/specials/SpecialRandomInCategory.php b/includes/specials/SpecialRandomInCategory.php
index 570ab3bf..b5c9e19a 100644
--- a/includes/specials/SpecialRandomInCategory.php
+++ b/includes/specials/SpecialRandomInCategory.php
@@ -68,6 +68,8 @@ class SpecialRandomInCategory extends FormSpecialPage {
}
protected function getFormFields() {
+ $this->addHelpLink( 'Help:RandomInCategory' );
+
$form = array(
'category' => array(
'type' => 'text',
@@ -117,7 +119,7 @@ class SpecialRandomInCategory extends FormSpecialPage {
return Status::newFatal( $msg );
} elseif ( !$this->category ) {
- return; // no data sent
+ return false; // no data sent
}
$title = $this->getRandomTitle();
@@ -179,12 +181,12 @@ class SpecialRandomInCategory extends FormSpecialPage {
* @param float $rand Random number between 0 and 1
* @param int $offset Extra offset to fudge randomness
* @param bool $up True to get the result above the random number, false for below
- *
+ * @return array Query information.
+ * @throws MWException
* @note The $up parameter is supposed to counteract what would happen if there
* was a large gap in the distribution of cl_timestamp values. This way instead
* of things to the right of the gap being favoured, both sides of the gap
* are favoured.
- * @return array Query information.
*/
protected function getQueryInfo( $rand, $offset, $up ) {
$op = $up ? '>=' : '<=';
@@ -230,7 +232,7 @@ class SpecialRandomInCategory extends FormSpecialPage {
if ( !$this->minTimestamp || !$this->maxTimestamp ) {
try {
list( $this->minTimestamp, $this->maxTimestamp ) = $this->getMinAndMaxForCat( $this->category );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// Possibly no entries in category.
return false;
}
diff --git a/includes/specials/SpecialRandompage.php b/includes/specials/SpecialRandompage.php
index 6d8f59b5..73a88b9e 100644
--- a/includes/specials/SpecialRandompage.php
+++ b/includes/specials/SpecialRandompage.php
@@ -106,7 +106,7 @@ class RandomPage extends SpecialPage {
$randstr = wfRandom();
$title = null;
- if ( !wfRunHooks(
+ if ( !Hooks::run(
'SpecialRandomGetRandomTitle',
array( &$randstr, &$this->isRedir, &$this->namespaces, &$this->extra, &$title )
) ) {
diff --git a/includes/specials/SpecialRecentchanges.php b/includes/specials/SpecialRecentchanges.php
index e6d8f1c3..64b0ecae 100644
--- a/includes/specials/SpecialRecentchanges.php
+++ b/includes/specials/SpecialRecentchanges.php
@@ -95,7 +95,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
protected function getCustomFilters() {
if ( $this->customFilters === null ) {
$this->customFilters = parent::getCustomFilters();
- wfRunHooks( 'SpecialRecentChangesFilters', array( $this, &$this->customFilters ), '1.23' );
+ Hooks::run( 'SpecialRecentChangesFilters', array( $this, &$this->customFilters ), '1.23' );
}
return $this->customFilters;
@@ -252,9 +252,11 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
return $rows;
}
- protected function runMainQueryHook( &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts ) {
+ protected function runMainQueryHook( &$tables, &$fields, &$conds,
+ &$query_options, &$join_conds, $opts
+ ) {
return parent::runMainQueryHook( $tables, $fields, $conds, $query_options, $join_conds, $opts )
- && wfRunHooks(
+ && Hooks::run(
'SpecialRecentChangesQuery',
array( &$conds, &$tables, &$join_conds, $opts, &$query_options, &$fields ),
'1.23'
@@ -311,7 +313,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
$rc = RecentChange::newFromRow( $obj );
$rc->counter = $counter++;
# Check if the page has been updated since the last visit
- if ( $this->getConfig()->get( 'ShowUpdatedMarker' ) && !empty( $obj->wl_notificationtimestamp ) ) {
+ if ( $this->getConfig()->get( 'ShowUpdatedMarker' )
+ && !empty( $obj->wl_notificationtimestamp )
+ ) {
$rc->notificationtimestamp = ( $obj->rc_timestamp >= $obj->wl_notificationtimestamp );
} else {
$rc->notificationtimestamp = false; // Default
@@ -440,11 +444,11 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
$message = $this->msg( 'recentchangestext' )->inContentLanguage();
if ( !$message->isDisabled() ) {
$this->getOutput()->addWikiText(
- Html::rawElement( 'p',
- array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() ),
+ Html::rawElement( 'div',
+ array( 'lang' => $wgContLang->getHtmlCode(), 'dir' => $wgContLang->getDir() ),
"\n" . $message->plain() . "\n"
),
- /* $lineStart */ false,
+ /* $lineStart */ true,
/* $interface */ false
);
}
@@ -475,7 +479,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
// Don't fire the hook for subclasses. (Or should we?)
if ( $this->getName() === 'Recentchanges' ) {
- wfRunHooks( 'SpecialRecentChangesPanel', array( &$extraOpts, $opts ) );
+ Hooks::run( 'SpecialRecentChangesPanel', array( &$extraOpts, $opts ) );
}
return $extraOpts;
@@ -732,7 +736,8 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
$link = $this->makeOptionsLink( $linkMessage->text(),
array( $key => 1 - $options[$key] ), $nondefaults );
- $links[] = "<span class=\"$msg rcshowhideoption\">" . $this->msg( $msg )->rawParams( $link )->escaped() . '</span>';
+ $links[] = "<span class=\"$msg rcshowhideoption\">"
+ . $this->msg( $msg )->rawParams( $link )->escaped() . '</span>';
}
// show from this onward link
diff --git a/includes/specials/SpecialRedirect.php b/includes/specials/SpecialRedirect.php
index 2022d748..72d21ebe 100644
--- a/includes/specials/SpecialRedirect.php
+++ b/includes/specials/SpecialRedirect.php
@@ -2,7 +2,6 @@
/**
* Implements Special:Redirect
*
- * @section LICENSE
* 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
@@ -263,6 +262,20 @@ class SpecialRedirect extends FormSpecialPage {
$form->setMethod( 'get' );
}
+ /**
+ * Return an array of subpages that this special page will accept.
+ *
+ * @return string[] subpages
+ */
+ protected function getSubpagesForPrefixSearch() {
+ return array(
+ "file",
+ "page",
+ "revision",
+ "user",
+ );
+ }
+
protected function getGroupName() {
return 'redirects';
}
diff --git a/includes/specials/SpecialResetTokens.php b/includes/specials/SpecialResetTokens.php
index 4add7421..ba2b9a5b 100644
--- a/includes/specials/SpecialResetTokens.php
+++ b/includes/specials/SpecialResetTokens.php
@@ -44,7 +44,7 @@ class SpecialResetTokens extends FormSpecialPage {
$tokens = array(
array( 'preference' => 'watchlisttoken', 'label-message' => 'resettokens-watchlist-token' ),
);
- wfRunHooks( 'SpecialResetTokensTokens', array( &$tokens ) );
+ Hooks::run( 'SpecialResetTokensTokens', array( &$tokens ) );
$hiddenPrefs = $this->getConfig()->get( 'HiddenPrefs' );
$tokens = array_filter( $tokens, function ( $tok ) use ( $hiddenPrefs ) {
diff --git a/includes/specials/SpecialRevisiondelete.php b/includes/specials/SpecialRevisiondelete.php
index 7eea71da..9e2ca277 100644
--- a/includes/specials/SpecialRevisiondelete.php
+++ b/includes/specials/SpecialRevisiondelete.php
@@ -132,18 +132,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
// $this->ids = array_map( 'intval', $this->ids );
$this->ids = array_unique( array_filter( $this->ids ) );
- if ( $request->getVal( 'action' ) == 'historysubmit'
- || $request->getVal( 'action' ) == 'revisiondelete'
- ) {
- // For show/hide form submission from history page
- // Since we are access through index.php?title=XXX&action=historysubmit
- // getFullTitle() will contain the target title and not our title
- $this->targetObj = $this->getFullTitle();
- $this->typeName = 'revision';
- } else {
- $this->typeName = $request->getVal( 'type' );
- $this->targetObj = Title::newFromText( $request->getText( 'target' ) );
- }
+ $this->typeName = $request->getVal( 'type' );
+ $this->targetObj = Title::newFromText( $request->getText( 'target' ) );
# For reviewing deleted files...
$this->archiveName = $request->getVal( 'file' );
@@ -293,6 +283,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
* Show a deleted file version requested by the visitor.
* @todo Mostly copied from Special:Undelete. Refactor.
* @param string $archiveName
+ * @throws MWException
+ * @throws PermissionsError
*/
protected function tryShowFile( $archiveName ) {
$repo = RepoGroup::singleton()->getLocalRepo();
@@ -372,10 +364,12 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
$userAllowed = true;
// Messages: revdelete-selected-text, revdelete-selected-file, logdelete-selected
- $this->getOutput()->wrapWikiMsg( "<strong>$1</strong>", array( $this->typeLabels['selected'],
+ $out = $this->getOutput();
+ $out->wrapWikiMsg( "<strong>$1</strong>", array( $this->typeLabels['selected'],
$this->getLanguage()->formatNum( count( $this->ids ) ), $this->targetObj->getPrefixedText() ) );
- $this->getOutput()->addHTML( "<ul>" );
+ $this->addHelpLink( 'Help:RevisionDelete' );
+ $out->addHTML( "<ul>" );
$numRevisions = 0;
// Live revisions...
@@ -393,14 +387,14 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
}
$numRevisions++;
- $this->getOutput()->addHTML( $item->getHTML() );
+ $out->addHTML( $item->getHTML() );
}
if ( !$numRevisions ) {
throw new ErrorPageError( 'revdelete-nooldid-title', 'revdelete-nooldid-text' );
}
- $this->getOutput()->addHTML( "</ul>" );
+ $out->addHTML( "</ul>" );
// Explanation text
$this->addUsageText();
@@ -411,7 +405,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
// Show form if the user can submit
if ( $this->mIsAllowed ) {
- $out = Xml::openElement( 'form', array( 'method' => 'post',
+ $form = Xml::openElement( 'form', array( 'method' => 'post',
'action' => $this->getPageTitle()->getLocalURL( array( 'action' => 'submit' ) ),
'id' => 'mw-revdel-form-revisions' ) ) .
Xml::fieldset( $this->msg( 'revdelete-legend' )->text() ) .
@@ -463,12 +457,12 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
array(),
array( 'action' => 'edit' )
);
- $out .= Xml::tags( 'p', array( 'class' => 'mw-revdel-editreasons' ), $link ) . "\n";
+ $form .= Xml::tags( 'p', array( 'class' => 'mw-revdel-editreasons' ), $link ) . "\n";
}
} else {
- $out = '';
+ $form = '';
}
- $this->getOutput()->addHTML( $out );
+ $out->addHTML( $form );
}
/**
diff --git a/includes/specials/SpecialRunJobs.php b/includes/specials/SpecialRunJobs.php
index d4a06eb5..8cf93670 100644
--- a/includes/specials/SpecialRunJobs.php
+++ b/includes/specials/SpecialRunJobs.php
@@ -22,6 +22,8 @@
* @author Aaron Schulz
*/
+use MediaWiki\Logger\LoggerFactory;
+
/**
* Special page designed for running background tasks (internal use only)
*
@@ -61,10 +63,11 @@ class SpecialRunJobs extends UnlistedSpecialPage {
$squery = $params;
unset( $squery['signature'] );
- $cSig = self::getQuerySignature( $squery, $this->getConfig()->get( 'SecretKey' ) ); // correct signature
- $rSig = $params['signature']; // provided signature
+ $correctSignature = self::getQuerySignature( $squery, $this->getConfig()->get( 'SecretKey' ) );
+ $providedSignature = $params['signature'];
- $verified = is_string( $rSig ) && hash_equals( $cSig, $rSig );
+ $verified = is_string( $providedSignature )
+ && hash_equals( $correctSignature, $providedSignature );
if ( !$verified || $params['sigexpiry'] < time() ) {
header( "HTTP/1.0 400 Bad Request" );
print 'Invalid or stale signature provided';
@@ -88,7 +91,7 @@ class SpecialRunJobs extends UnlistedSpecialPage {
// Do all of the specified tasks...
if ( in_array( 'jobs', explode( '|', $params['tasks'] ) ) ) {
- $runner = new JobRunner();
+ $runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) );
$response = $runner->run( array(
'type' => $params['type'],
'maxJobs' => $params['maxjobs'] ? $params['maxjobs'] : 1,
diff --git a/includes/specials/SpecialSearch.php b/includes/specials/SpecialSearch.php
index 88ab7d82..608d62e6 100644
--- a/includes/specials/SpecialSearch.php
+++ b/includes/specials/SpecialSearch.php
@@ -63,7 +63,7 @@ class SpecialSearch extends SpecialPage {
/**
* @var string
*/
- protected $didYouMeanHtml, $fulltext;
+ protected $fulltext;
const NAMESPACES_CURRENT = 'sense';
@@ -165,7 +165,6 @@ class SpecialSearch extends SpecialPage {
}
}
- $this->didYouMeanHtml = ''; # html of did you mean... link
$this->fulltext = $request->getVal( 'fulltext' );
$this->profile = $profile;
}
@@ -196,7 +195,7 @@ class SpecialSearch extends SpecialPage {
# No match, generate an edit URL
$title = Title::newFromText( $term );
if ( !is_null( $title ) ) {
- wfRunHooks( 'SpecialSearchNogomatch', array( &$title ) );
+ Hooks::run( 'SpecialSearchNogomatch', array( &$title ) );
}
$this->showResults( $term );
}
@@ -207,14 +206,14 @@ class SpecialSearch extends SpecialPage {
public function showResults( $term ) {
global $wgContLang;
- $profile = new ProfileSection( __METHOD__ );
$search = $this->getSearchEngine();
$search->setLimitOffset( $this->limit, $this->offset );
$search->setNamespaces( $this->namespaces );
$search->prefix = $this->mPrefix;
$term = $search->transformSearchTerm( $term );
+ $didYouMeanHtml = '';
- wfRunHooks( 'SpecialSearchSetupEngine', array( $this, $this->profile, $search ) );
+ Hooks::run( 'SpecialSearchSetupEngine', array( $this, $this->profile, $search ) );
$this->setupPage( $term );
@@ -289,11 +288,14 @@ class SpecialSearch extends SpecialPage {
$stParams
);
- $this->didYouMeanHtml = '<div class="searchdidyoumean">'
- . $this->msg( 'search-suggest' )->rawParams( $suggestLink )->text() . '</div>';
+ # html of did you mean... search suggestion link
+ $didYouMeanHtml =
+ Xml::openElement( 'div', array( 'class' => 'searchdidyoumean' ) ) .
+ $this->msg( 'search-suggest' )->rawParams( $suggestLink )->text() .
+ Xml::closeElement( 'div' );
}
- if ( !wfRunHooks( 'SpecialSearchResultsPrepend', array( $this, $out, $term ) ) ) {
+ if ( !Hooks::run( 'SpecialSearchResultsPrepend', array( $this, $out, $term ) ) ) {
# Hook requested termination
return;
}
@@ -303,7 +305,7 @@ class SpecialSearch extends SpecialPage {
Xml::openElement(
'form',
array(
- 'id' => ( $this->profile === 'advanced' ? 'powersearch' : 'search' ),
+ 'id' => ( $this->isPowerSearch() ? 'powersearch' : 'search' ),
'method' => 'get',
'action' => wfScript(),
)
@@ -330,8 +332,10 @@ class SpecialSearch extends SpecialPage {
Xml::openElement( 'div', array( 'id' => 'mw-search-top-table' ) ) .
$this->shortDialog( $term, $num, $totalRes ) .
Xml::closeElement( 'div' ) .
- $this->formHeader( $term ) .
- Xml::closeElement( 'form' )
+ $this->searchProfileTabs( $term ) .
+ $this->searchOptions( $term ) .
+ Xml::closeElement( 'form' ) .
+ $didYouMeanHtml
);
$filePrefix = $wgContLang->getFormattedNsText( NS_FILE ) . ':';
@@ -360,7 +364,7 @@ class SpecialSearch extends SpecialPage {
);
}
}
- wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) );
+ Hooks::run( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) );
$out->parserOptions()->setEditSection( false );
if ( $titleMatches ) {
@@ -426,21 +430,24 @@ class SpecialSearch extends SpecialPage {
return;
}
+ $messageName = 'searchmenu-new-nocreate';
$linkClass = 'mw-search-createlink';
- if ( $title->isKnown() ) {
- $messageName = 'searchmenu-exists';
- $linkClass = 'mw-search-exists';
- } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
- $messageName = 'searchmenu-new';
- } else {
- $messageName = 'searchmenu-new-nocreate';
+
+ if ( !$title->isExternal() ) {
+ if ( $title->isKnown() ) {
+ $messageName = 'searchmenu-exists';
+ $linkClass = 'mw-search-exists';
+ } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
+ $messageName = 'searchmenu-new';
+ }
}
+
$params = array(
$messageName,
wfEscapeWikiText( $title->getPrefixedText() ),
Message::numParam( $num )
);
- wfRunHooks( 'SpecialSearchCreateLink', array( $title, &$params ) );
+ Hooks::run( 'SpecialSearchCreateLink', array( $title, &$params ) );
// Extensions using the hook might still return an empty $messageName
if ( $messageName ) {
@@ -455,8 +462,6 @@ class SpecialSearch extends SpecialPage {
* @param string $term
*/
protected function setupPage( $term ) {
- # Should advanced UI be used?
- $this->searchAdvanced = ( $this->profile === 'advanced' );
$out = $this->getOutput();
if ( strval( $term ) !== '' ) {
$out->setPageTitle( $this->msg( 'searchresults' ) );
@@ -470,6 +475,15 @@ class SpecialSearch extends SpecialPage {
}
/**
+ * Return true if current search is a power (advanced) search
+ *
+ * @return bool
+ */
+ protected function isPowerSearch() {
+ return $this->profile === 'advanced';
+ }
+
+ /**
* Extract "power search" namespace settings from the request object,
* returning a list of index numbers to search.
*
@@ -494,7 +508,7 @@ class SpecialSearch extends SpecialPage {
*/
protected function powerSearchOptions() {
$opt = array();
- if ( $this->profile !== 'advanced' ) {
+ if ( !$this->isPowerSearch() ) {
$opt['profile'] = $this->profile;
} else {
foreach ( $this->namespaces as $n ) {
@@ -519,7 +533,7 @@ class SpecialSearch extends SpecialPage {
$request->getVal( 'nsRemember' ),
'searchnamespace',
$request
- )
+ ) && !wfReadOnly()
) {
// Reset namespace preferences: namespaces are not searched
// when they're not mentioned in the URL parameters.
@@ -549,7 +563,6 @@ class SpecialSearch extends SpecialPage {
protected function showMatches( &$matches ) {
global $wgContLang;
- $profile = new ProfileSection( __METHOD__ );
$terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
$out = "<ul class='mw-search-results'>\n";
@@ -575,7 +588,6 @@ class SpecialSearch extends SpecialPage {
* @return string
*/
protected function showHit( $result, $terms ) {
- $profile = new ProfileSection( __METHOD__ );
if ( $result->isBrokenTitle() ) {
return '';
@@ -583,7 +595,7 @@ class SpecialSearch extends SpecialPage {
$title = $result->getTitle();
- $titleSnippet = $result->getTitleSnippet( $terms );
+ $titleSnippet = $result->getTitleSnippet();
if ( $titleSnippet == '' ) {
$titleSnippet = null;
@@ -591,7 +603,7 @@ class SpecialSearch extends SpecialPage {
$link_t = clone $title;
- wfRunHooks( 'ShowSearchHitTitle',
+ Hooks::run( 'ShowSearchHitTitle',
array( &$link_t, &$titleSnippet, $result, $terms, $this ) );
$link = Linker::linkKnown(
@@ -615,11 +627,12 @@ class SpecialSearch extends SpecialPage {
// format redirects / relevant sections
$redirectTitle = $result->getRedirectTitle();
- $redirectText = $result->getRedirectSnippet( $terms );
+ $redirectText = $result->getRedirectSnippet();
$sectionTitle = $result->getSectionTitle();
- $sectionText = $result->getSectionSnippet( $terms );
- $redirect = '';
+ $sectionText = $result->getSectionSnippet();
+ $categorySnippet = $result->getCategorySnippet();
+ $redirect = '';
if ( !is_null( $redirectTitle ) ) {
if ( $redirectText == '' ) {
$redirectText = null;
@@ -632,7 +645,6 @@ class SpecialSearch extends SpecialPage {
}
$section = '';
-
if ( !is_null( $sectionTitle ) ) {
if ( $sectionText == '' ) {
$sectionText = null;
@@ -644,6 +656,13 @@ class SpecialSearch extends SpecialPage {
"</span>";
}
+ $category = '';
+ if ( $categorySnippet ) {
+ $category = "<span class='searchalttitle'>" .
+ $this->msg( 'search-category' )->rawParams( $categorySnippet )->text() .
+ "</span>";
+ }
+
// format text extract
$extract = "<div class='searchresult'>" . $result->getTextSnippet( $terms ) . "</div>";
@@ -688,7 +707,7 @@ class SpecialSearch extends SpecialPage {
$thumb->toHtml( array( 'desc-link' => true ) ) .
'</td>' .
'<td style="vertical-align: top;">' .
- "{$link} {$redirect} {$section} {$fileMatch}" .
+ "{$link} {$redirect} {$category} {$section} {$fileMatch}" .
$extract .
"<div class='mw-search-result-data'>{$desc} - {$date}</div>" .
'</td>' .
@@ -702,14 +721,14 @@ class SpecialSearch extends SpecialPage {
$html = null;
$score = '';
- if ( wfRunHooks( 'ShowSearchHit', array(
+ if ( Hooks::run( 'ShowSearchHit', array(
$this, $result, $terms,
&$link, &$redirect, &$section, &$extract,
&$score, &$size, &$date, &$related,
&$html
) ) ) {
$html = "<li><div class='mw-search-result-heading'>" .
- "{$link} {$redirect} {$section} {$fileMatch}</div> {$extract}\n" .
+ "{$link} {$redirect} {$category} {$section} {$fileMatch}</div> {$extract}\n" .
"<div class='mw-search-result-data'>{$size} - {$date}</div>" .
"</li>\n";
}
@@ -727,7 +746,6 @@ class SpecialSearch extends SpecialPage {
*/
protected function showInterwiki( $matches, $query ) {
global $wgContLang;
- $profile = new ProfileSection( __METHOD__ );
$out = "<div id='mw-search-interwiki'><div id='mw-search-interwiki-caption'>" .
$this->msg( 'search-interwiki-caption' )->text() . "</div>\n";
@@ -778,7 +796,6 @@ class SpecialSearch extends SpecialPage {
* @return string
*/
protected function showInterwikiHit( $result, $lastInterwiki, $query, $customCaptions ) {
- $profile = new ProfileSection( __METHOD__ );
if ( $result->isBrokenTitle() ) {
return '';
@@ -885,10 +902,7 @@ class SpecialSearch extends SpecialPage {
// be arranged nicely while still accommodating different screen widths
$namespaceTables = '';
for ( $i = 0; $i < $numRows; $i += 4 ) {
- $namespaceTables .= Xml::openElement(
- 'table',
- array( 'cellpadding' => 0, 'cellspacing' => 0 )
- );
+ $namespaceTables .= Xml::openElement( 'table' );
for ( $j = $i; $j < $i + 4 && $j < $numRows; $j++ ) {
$namespaceTables .= Xml::tags( 'tr', null, $rows[$j] );
@@ -899,7 +913,7 @@ class SpecialSearch extends SpecialPage {
$showSections = array( 'namespaceTables' => $namespaceTables );
- wfRunHooks( 'SpecialSearchPowerBox', array( &$showSections, $term, $opts ) );
+ Hooks::run( 'SpecialSearchPowerBox', array( &$showSections, $term, $opts ) );
$hidden = '';
foreach ( $opts as $key => $value ) {
@@ -911,7 +925,7 @@ class SpecialSearch extends SpecialPage {
$user = $this->getUser();
if ( $user->isLoggedIn() ) {
$remember .= Xml::checkLabel(
- wfMessage( 'powersearch-remember' )->text(),
+ $this->msg( 'powersearch-remember' )->text(),
'nsRemember',
'mw-search-powersearch-remember',
false,
@@ -970,7 +984,7 @@ class SpecialSearch extends SpecialPage {
)
);
- wfRunHooks( 'SpecialSearchProfiles', array( &$profiles ) );
+ Hooks::run( 'SpecialSearchProfiles', array( &$profiles ) );
foreach ( $profiles as &$data ) {
if ( !is_array( $data['namespaces'] ) ) {
@@ -986,8 +1000,8 @@ class SpecialSearch extends SpecialPage {
* @param string $term
* @return string
*/
- protected function formHeader( $term ) {
- $out = Xml::openElement( 'div', array( 'class' => 'mw-search-formheader' ) );
+ protected function searchProfileTabs( $term ) {
+ $out = Xml::openElement( 'div', array( 'class' => 'mw-search-profile-tabs' ) );
$bareterm = $term;
if ( $this->startsWithImage( $term ) ) {
@@ -1028,15 +1042,23 @@ class SpecialSearch extends SpecialPage {
$out .= Xml::element( 'div', array( 'style' => 'clear:both' ), '', false );
$out .= Xml::closeElement( 'div' );
- // Hidden stuff
+ return $out;
+ }
+
+ /**
+ * @param string $term Search term
+ * @return string
+ */
+ protected function searchOptions( $term ) {
+ $out = '';
$opts = array();
$opts['profile'] = $this->profile;
- if ( $this->profile === 'advanced' ) {
+ if ( $this->isPowerSearch() ) {
$out .= $this->powerSearchBox( $term, $opts );
} else {
$form = '';
- wfRunHooks( 'SpecialSearchProfileForm', array( $this, &$form, $this->profile, $term, $opts ) );
+ Hooks::run( 'SpecialSearchProfileForm', array( $this, &$form, $this->profile, $term, $opts ) );
$out .= $form;
}
@@ -1054,15 +1076,16 @@ class SpecialSearch extends SpecialPage {
$out .= Html::hidden( 'profile', $this->profile ) . "\n";
// Term box
$out .= Html::input( 'search', $term, 'search', array(
- 'id' => $this->profile === 'advanced' ? 'powerSearchText' : 'searchText',
+ 'id' => $this->isPowerSearch() ? 'powerSearchText' : 'searchText',
'size' => '50',
- 'autofocus',
+ 'autofocus' => trim( $term ) === '',
'class' => 'mw-ui-input mw-ui-input-inline',
) ) . "\n";
$out .= Html::hidden( 'fulltext', 'Search' ) . "\n";
- $out .= Xml::submitButton(
+ $out .= Html::submitButton(
$this->msg( 'searchbutton' )->text(),
- array( 'class' => array( 'mw-ui-button', 'mw-ui-progressive' ) )
+ array( 'class' => 'mw-ui-button mw-ui-progressive' ),
+ array( 'mw-ui-progressive' )
) . "\n";
// Results-info
@@ -1075,7 +1098,7 @@ class SpecialSearch extends SpecialPage {
Xml::element( 'div', array( 'style' => 'clear:both' ), '', false );
}
- return $out . $this->didYouMeanHtml;
+ return $out;
}
/**
diff --git a/includes/specials/SpecialShortpages.php b/includes/specials/SpecialShortpages.php
index 782d9a17..7ec69e06 100644
--- a/includes/specials/SpecialShortpages.php
+++ b/includes/specials/SpecialShortpages.php
@@ -58,7 +58,7 @@ class ShortPagesPage extends QueryPage {
}
/**
- * @param DatabaseBase $db
+ * @param IDatabase $db
* @param ResultWrapper $res
*/
function preprocessResults( $db, $res ) {
diff --git a/includes/specials/SpecialSpecialpages.php b/includes/specials/SpecialSpecialpages.php
index eff06f46..eaa90072 100644
--- a/includes/specials/SpecialSpecialpages.php
+++ b/includes/specials/SpecialSpecialpages.php
@@ -45,6 +45,7 @@ class SpecialSpecialpages extends UnlistedSpecialPage {
return;
}
+ $this->addHelpLink( 'Help:Special pages' );
$this->outputPageList( $groups );
}
diff --git a/includes/specials/SpecialStatistics.php b/includes/specials/SpecialStatistics.php
index f0e360e8..c35de241 100644
--- a/includes/specials/SpecialStatistics.php
+++ b/includes/specials/SpecialStatistics.php
@@ -28,7 +28,7 @@
* @ingroup SpecialPage
*/
class SpecialStatistics extends SpecialPage {
- private $views, $edits, $good, $images, $total, $users,
+ private $edits, $good, $images, $total, $users,
$activeUsers = 0;
public function __construct() {
@@ -38,13 +38,11 @@ class SpecialStatistics extends SpecialPage {
public function execute( $par ) {
global $wgMemc;
- $disableCounters = $this->getConfig()->get( 'DisableCounters' );
$miserMode = $this->getConfig()->get( 'MiserMode' );
$this->setHeaders();
$this->getOutput()->addModuleStyles( 'mediawiki.special' );
- $this->views = SiteStats::views();
$this->edits = SiteStats::edits();
$this->good = SiteStats::articles();
$this->images = SiteStats::images();
@@ -53,12 +51,6 @@ class SpecialStatistics extends SpecialPage {
$this->activeUsers = SiteStats::activeUsers();
$this->hook = '';
- # Staticic - views
- $viewsStats = '';
- if ( !$disableCounters ) {
- $viewsStats = $this->getViewsStats();
- }
-
# Set active user count
if ( !$miserMode ) {
$key = wfMemcKey( 'sitestats', 'activeusers-updated' );
@@ -83,16 +75,10 @@ class SpecialStatistics extends SpecialPage {
# Statistic - usergroups
$text .= $this->getGroupStats();
- $text .= $viewsStats;
-
- # Statistic - popular pages
- if ( !$disableCounters && !$miserMode ) {
- $text .= $this->getMostViewedPages();
- }
# Statistic - other
$extraStats = array();
- if ( wfRunHooks( 'SpecialStatsAddExtra', array( &$extraStats ) ) ) {
+ if ( Hooks::run( 'SpecialStatsAddExtra', array( &$extraStats, $this->getContext() ) ) ) {
$text .= $this->getOtherStats( $extraStats );
}
@@ -213,10 +199,16 @@ class SpecialStatistics extends SpecialPage {
$grouppageLocalized = $msg->text();
}
$linkTarget = Title::newFromText( $grouppageLocalized );
- $grouppage = Linker::link(
- $linkTarget,
- htmlspecialchars( $groupnameLocalized )
- );
+
+ if ( $linkTarget ) {
+ $grouppage = Linker::link(
+ $linkTarget,
+ htmlspecialchars( $groupnameLocalized )
+ );
+ } else {
+ $grouppage = htmlspecialchars( $groupnameLocalized );
+ }
+
$grouplink = Linker::linkKnown(
SpecialPage::getTitleFor( 'Listusers' ),
$this->msg( 'listgrouprights-members' )->escaped(),
@@ -237,63 +229,6 @@ class SpecialStatistics extends SpecialPage {
return $text;
}
- private function getViewsStats() {
- return Xml::openElement( 'tr' ) .
- Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( 'statistics-header-views' )->parse() ) .
- Xml::closeElement( 'tr' ) .
- $this->formatRow( $this->msg( 'statistics-views-total' )->parse(),
- $this->getLanguage()->formatNum( $this->views ),
- array( 'class' => 'mw-statistics-views-total' ), 'statistics-views-total-desc' ) .
- $this->formatRow( $this->msg( 'statistics-views-peredit' )->parse(),
- $this->getLanguage()->formatNum( sprintf( '%.2f', $this->edits ?
- $this->views / $this->edits : 0 ) ),
- array( 'class' => 'mw-statistics-views-peredit' ) );
- }
-
- private function getMostViewedPages() {
- $text = '';
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select(
- 'page',
- array(
- 'page_namespace',
- 'page_title',
- 'page_counter',
- ),
- array(
- 'page_is_redirect' => 0,
- 'page_counter > 0',
- ),
- __METHOD__,
- array(
- 'ORDER BY' => 'page_counter DESC',
- 'LIMIT' => 10,
- )
- );
-
- if ( $res->numRows() > 0 ) {
- $text .= Xml::openElement( 'tr' );
- $text .= Xml::tags(
- 'th',
- array( 'colspan' => '2' ),
- $this->msg( 'statistics-mostpopular' )->parse()
- );
- $text .= Xml::closeElement( 'tr' );
-
- foreach ( $res as $row ) {
- $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
-
- if ( $title instanceof Title ) {
- $text .= $this->formatRow( Linker::link( $title ),
- $this->getLanguage()->formatNum( $row->page_counter ) );
- }
- }
- $res->free();
- }
-
- return $text;
- }
-
/**
* Conversion of external statistics into an internal representation
* Following a ([<header-message>][<item-message>] = number) pattern
@@ -315,12 +250,17 @@ class SpecialStatistics extends SpecialPage {
// Collect all items that belong to the same header
foreach ( $items as $key => $value ) {
- $name = $this->msg( $key )->parse();
- $number = htmlspecialchars( $value );
+ if ( is_array( $value ) ) {
+ $name = $value['name'];
+ $number = $value['number'];
+ } else {
+ $name = $this->msg( $key )->parse();
+ $number = $value;
+ }
$return .= $this->formatRow(
$name,
- $this->getLanguage()->formatNum( $number ),
+ $this->getLanguage()->formatNum( htmlspecialchars( $number ) ),
array( 'class' => 'mw-statistics-hook', 'id' => 'mw-' . $key )
);
}
diff --git a/includes/specials/SpecialTags.php b/includes/specials/SpecialTags.php
index b7627285..0b8147e1 100644
--- a/includes/specials/SpecialTags.php
+++ b/includes/specials/SpecialTags.php
@@ -31,6 +31,10 @@ class SpecialTags extends SpecialPage {
* @var array List of defined tags
*/
public $definedTags;
+ /**
+ * @var array List of active tags
+ */
+ public $activeTags;
function __construct() {
parent::__construct( 'Tags' );
@@ -40,33 +44,114 @@ class SpecialTags extends SpecialPage {
$this->setHeaders();
$this->outputHeader();
+ $request = $this->getRequest();
+ switch ( $par ) {
+ case 'delete':
+ $this->showDeleteTagForm( $request->getVal( 'tag' ) );
+ break;
+ case 'activate':
+ $this->showActivateDeactivateForm( $request->getVal( 'tag' ), true );
+ break;
+ case 'deactivate':
+ $this->showActivateDeactivateForm( $request->getVal( 'tag' ), false );
+ break;
+ case 'create':
+ // fall through, thanks to HTMLForm's logic
+ default:
+ $this->showTagList();
+ break;
+ }
+ }
+
+ function showTagList() {
$out = $this->getOutput();
$out->setPageTitle( $this->msg( 'tags-title' ) );
$out->wrapWikiMsg( "<div class='mw-tags-intro'>\n$1\n</div>", 'tags-intro' );
+ $user = $this->getUser();
+
+ // Show form to create a tag
+ if ( $user->isAllowed( 'managechangetags' ) ) {
+ $fields = array(
+ 'Tag' => array(
+ 'type' => 'text',
+ 'label' => $this->msg( 'tags-create-tag-name' )->plain(),
+ 'required' => true,
+ ),
+ 'Reason' => array(
+ 'type' => 'text',
+ 'label' => $this->msg( 'tags-create-reason' )->plain(),
+ 'size' => 50,
+ ),
+ 'IgnoreWarnings' => array(
+ 'type' => 'hidden',
+ ),
+ );
+
+ $form = new HTMLForm( $fields, $this->getContext() );
+ $form->setAction( $this->getPageTitle( 'create' )->getLocalURL() );
+ $form->setWrapperLegendMsg( 'tags-create-heading' );
+ $form->setHeaderText( $this->msg( 'tags-create-explanation' )->plain() );
+ $form->setSubmitCallback( array( $this, 'processCreateTagForm' ) );
+ $form->setSubmitTextMsg( 'tags-create-submit' );
+ $form->show();
+
+ // If processCreateTagForm generated a redirect, there's no point
+ // continuing with this, as the user is just going to end up getting sent
+ // somewhere else. Additionally, if we keep going here, we end up
+ // populating the memcache of tag data (see ChangeTags::listDefinedTags)
+ // with out-of-date data from the slave, because the slave hasn't caught
+ // up to the fact that a new tag has been created as part of an implicit,
+ // as yet uncommitted transaction on master.
+ if ( $out->getRedirect() !== '' ) {
+ return;
+ }
+ }
+
+ // Whether to show the "Actions" column in the tag list
+ // If any actions added in the future require other user rights, add those
+ // rights here
+ $showActions = $user->isAllowed( 'managechangetags' );
+
// Write the headers
+ $tagUsageStatistics = ChangeTags::tagUsageStatistics();
+
+ // Show header only if there exists atleast one tag
+ if ( !$tagUsageStatistics ) {
+ return;
+ }
$html = Xml::tags( 'tr', null, Xml::tags( 'th', null, $this->msg( 'tags-tag' )->parse() ) .
Xml::tags( 'th', null, $this->msg( 'tags-display-header' )->parse() ) .
Xml::tags( 'th', null, $this->msg( 'tags-description-header' )->parse() ) .
+ Xml::tags( 'th', null, $this->msg( 'tags-source-header' )->parse() ) .
Xml::tags( 'th', null, $this->msg( 'tags-active-header' )->parse() ) .
- Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() )
+ Xml::tags( 'th', null, $this->msg( 'tags-hitcount-header' )->parse() ) .
+ ( $showActions ?
+ Xml::tags( 'th', array( 'class' => 'unsortable' ),
+ $this->msg( 'tags-actions-header' )->parse() ) :
+ '' )
);
// Used in #doTagRow()
- $this->definedTags = array_fill_keys( ChangeTags::listDefinedTags(), true );
+ $this->explicitlyDefinedTags = array_fill_keys(
+ ChangeTags::listExplicitlyDefinedTags(), true );
+ $this->extensionDefinedTags = array_fill_keys(
+ ChangeTags::listExtensionDefinedTags(), true );
+ $this->extensionActivatedTags = array_fill_keys(
+ ChangeTags::listExtensionActivatedTags(), true );
- foreach ( ChangeTags::tagUsageStatistics() as $tag => $hitcount ) {
- $html .= $this->doTagRow( $tag, $hitcount );
+ foreach ( $tagUsageStatistics as $tag => $hitcount ) {
+ $html .= $this->doTagRow( $tag, $hitcount, $showActions );
}
$out->addHTML( Xml::tags(
'table',
- array( 'class' => 'wikitable sortable mw-tags-table' ),
+ array( 'class' => 'mw-datatable sortable mw-tags-table' ),
$html
) );
}
- function doTagRow( $tag, $hitcount ) {
+ function doTagRow( $tag, $hitcount, $showActions ) {
$user = $this->getUser();
$newRow = '';
$newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
@@ -94,9 +179,23 @@ class SpecialTags extends SpecialPage {
}
$newRow .= Xml::tags( 'td', null, $desc );
- $active = isset( $this->definedTags[$tag] ) ? 'tags-active-yes' : 'tags-active-no';
- $active = $this->msg( $active )->escaped();
- $newRow .= Xml::tags( 'td', null, $active );
+ $sourceMsgs = array();
+ $isExtension = isset( $this->extensionDefinedTags[$tag] );
+ $isExplicit = isset( $this->explicitlyDefinedTags[$tag] );
+ if ( $isExtension ) {
+ $sourceMsgs[] = $this->msg( 'tags-source-extension' )->escaped();
+ }
+ if ( $isExplicit ) {
+ $sourceMsgs[] = $this->msg( 'tags-source-manual' )->escaped();
+ }
+ if ( !$sourceMsgs ) {
+ $sourceMsgs[] = $this->msg( 'tags-source-none' )->escaped();
+ }
+ $newRow .= Xml::tags( 'td', null, implode( Xml::element( 'br' ), $sourceMsgs ) );
+
+ $isActive = $isExplicit || isset( $this->extensionActivatedTags[$tag] );
+ $activeMsg = ( $isActive ? 'tags-active-yes' : 'tags-active-no' );
+ $newRow .= Xml::tags( 'td', null, $this->msg( $activeMsg )->escaped() );
$hitcountLabel = $this->msg( 'tags-hitcount' )->numParams( $hitcount )->escaped();
$hitcountLink = Linker::link(
@@ -109,9 +208,228 @@ class SpecialTags extends SpecialPage {
// add raw $hitcount for sorting, because tags-hitcount contains numbers and letters
$newRow .= Xml::tags( 'td', array( 'data-sort-value' => $hitcount ), $hitcountLink );
+ // actions
+ $actionLinks = array();
+ if ( $showActions ) {
+ // delete
+ if ( ChangeTags::canDeleteTag( $tag, $user )->isOK() ) {
+ $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'delete' ),
+ $this->msg( 'tags-delete' )->escaped(),
+ array(),
+ array( 'tag' => $tag ) );
+ }
+
+ // activate
+ if ( ChangeTags::canActivateTag( $tag, $user )->isOK() ) {
+ $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'activate' ),
+ $this->msg( 'tags-activate' )->escaped(),
+ array(),
+ array( 'tag' => $tag ) );
+ }
+
+ // deactivate
+ if ( ChangeTags::canDeactivateTag( $tag, $user )->isOK() ) {
+ $actionLinks[] = Linker::linkKnown( $this->getPageTitle( 'deactivate' ),
+ $this->msg( 'tags-deactivate' )->escaped(),
+ array(),
+ array( 'tag' => $tag ) );
+ }
+
+ $newRow .= Xml::tags( 'td', null, $this->getLanguage()->pipeList( $actionLinks ) );
+ }
+
return Xml::tags( 'tr', null, $newRow ) . "\n";
}
+ public function processCreateTagForm( array $data, HTMLForm $form ) {
+ $context = $form->getContext();
+ $out = $context->getOutput();
+
+ $tag = trim( strval( $data['Tag'] ) );
+ $ignoreWarnings = isset( $data['IgnoreWarnings'] ) && $data['IgnoreWarnings'] === '1';
+ $status = ChangeTags::createTagWithChecks( $tag, $data['Reason'],
+ $context->getUser(), $ignoreWarnings );
+
+ if ( $status->isGood() ) {
+ $out->redirect( $this->getPageTitle()->getLocalURL() );
+ return true;
+ } elseif ( $status->isOK() ) {
+ // we have some warnings, so we show a confirmation form
+ $fields = array(
+ 'Tag' => array(
+ 'type' => 'hidden',
+ 'default' => $data['Tag'],
+ ),
+ 'Reason' => array(
+ 'type' => 'hidden',
+ 'default' => $data['Reason'],
+ ),
+ 'IgnoreWarnings' => array(
+ 'type' => 'hidden',
+ 'default' => '1',
+ ),
+ );
+
+ // fool HTMLForm into thinking the form hasn't been submitted yet. Otherwise
+ // we get into an infinite loop!
+ $context->getRequest()->unsetVal( 'wpEditToken' );
+
+ $headerText = $this->msg( 'tags-create-warnings-above', $tag,
+ count( $status->getWarningsArray() ) )->parseAsBlock() .
+ $out->parse( $status->getWikitext() ) .
+ $this->msg( 'tags-create-warnings-below' )->parseAsBlock();
+
+ $subform = new HTMLForm( $fields, $this->getContext() );
+ $subform->setAction( $this->getPageTitle( 'create' )->getLocalURL() );
+ $subform->setWrapperLegendMsg( 'tags-create-heading' );
+ $subform->setHeaderText( $headerText );
+ $subform->setSubmitCallback( array( $this, 'processCreateTagForm' ) );
+ $subform->setSubmitTextMsg( 'htmlform-yes' );
+ $subform->show();
+
+ $out->addBacklinkSubtitle( $this->getPageTitle() );
+ return true;
+ } else {
+ $out->addWikiText( "<div class=\"error\">\n" . $status->getWikitext() .
+ "\n</div>" );
+ return false;
+ }
+ }
+
+ protected function showDeleteTagForm( $tag ) {
+ $user = $this->getUser();
+ if ( !$user->isAllowed( 'managechangetags' ) ) {
+ throw new PermissionsError( 'managechangetags' );
+ }
+
+ $out = $this->getOutput();
+ $out->setPageTitle( $this->msg( 'tags-delete-title' ) );
+ $out->addBacklinkSubtitle( $this->getPageTitle() );
+
+ // is the tag actually able to be deleted?
+ $canDeleteResult = ChangeTags::canDeleteTag( $tag, $user );
+ if ( !$canDeleteResult->isGood() ) {
+ $out->addWikiText( "<div class=\"error\">\n" . $canDeleteResult->getWikiText() .
+ "\n</div>" );
+ if ( !$canDeleteResult->isOK() ) {
+ return;
+ }
+ }
+
+ $preText = $this->msg( 'tags-delete-explanation-initial', $tag )->parseAsBlock();
+ $tagUsage = ChangeTags::tagUsageStatistics();
+ if ( $tagUsage[$tag] > 0 ) {
+ $preText .= $this->msg( 'tags-delete-explanation-in-use', $tag,
+ $tagUsage[$tag] )->parseAsBlock();
+ }
+ $preText .= $this->msg( 'tags-delete-explanation-warning', $tag )->parseAsBlock();
+
+ // see if the tag is in use
+ $this->extensionActivatedTags = array_fill_keys(
+ ChangeTags::listExtensionActivatedTags(), true );
+ if ( isset( $this->extensionActivatedTags[$tag] ) ) {
+ $preText .= $this->msg( 'tags-delete-explanation-active', $tag )->parseAsBlock();
+ }
+
+ $fields = array();
+ $fields['Reason'] = array(
+ 'type' => 'text',
+ 'label' => $this->msg( 'tags-delete-reason' )->plain(),
+ 'size' => 50,
+ );
+ $fields['HiddenTag'] = array(
+ 'type' => 'hidden',
+ 'name' => 'tag',
+ 'default' => $tag,
+ 'required' => true,
+ );
+
+ $form = new HTMLForm( $fields, $this->getContext() );
+ $form->setAction( $this->getPageTitle( 'delete' )->getLocalURL() );
+ $form->tagAction = 'delete'; // custom property on HTMLForm object
+ $form->setSubmitCallback( array( $this, 'processTagForm' ) );
+ $form->setSubmitTextMsg( 'tags-delete-submit' );
+ $form->setSubmitDestructive(); // nasty!
+ $form->addPreText( $preText );
+ $form->show();
+ }
+
+ protected function showActivateDeactivateForm( $tag, $activate ) {
+ $actionStr = $activate ? 'activate' : 'deactivate';
+
+ $user = $this->getUser();
+ if ( !$user->isAllowed( 'managechangetags' ) ) {
+ throw new PermissionsError( 'managechangetags' );
+ }
+
+ $out = $this->getOutput();
+ // tags-activate-title, tags-deactivate-title
+ $out->setPageTitle( $this->msg( "tags-$actionStr-title" ) );
+ $out->addBacklinkSubtitle( $this->getPageTitle() );
+
+ // is it possible to do this?
+ $func = $activate ? 'canActivateTag' : 'canDeactivateTag';
+ $result = ChangeTags::$func( $tag, $user );
+ if ( !$result->isGood() ) {
+ $out->wrapWikiMsg( "<div class=\"error\">\n$1" . $result->getWikiText() .
+ "\n</div>" );
+ if ( !$result->isOK() ) {
+ return;
+ }
+ }
+
+ // tags-activate-question, tags-deactivate-question
+ $preText = $this->msg( "tags-$actionStr-question", $tag )->parseAsBlock();
+
+ $fields = array();
+ // tags-activate-reason, tags-deactivate-reason
+ $fields['Reason'] = array(
+ 'type' => 'text',
+ 'label' => $this->msg( "tags-$actionStr-reason" )->plain(),
+ 'size' => 50,
+ );
+ $fields['HiddenTag'] = array(
+ 'type' => 'hidden',
+ 'name' => 'tag',
+ 'default' => $tag,
+ 'required' => true,
+ );
+
+ $form = new HTMLForm( $fields, $this->getContext() );
+ $form->setAction( $this->getPageTitle( $actionStr )->getLocalURL() );
+ $form->tagAction = $actionStr;
+ $form->setSubmitCallback( array( $this, 'processTagForm' ) );
+ // tags-activate-submit, tags-deactivate-submit
+ $form->setSubmitTextMsg( "tags-$actionStr-submit" );
+ $form->addPreText( $preText );
+ $form->show();
+ }
+
+ public function processTagForm( array $data, HTMLForm $form ) {
+ $context = $form->getContext();
+ $out = $context->getOutput();
+
+ $tag = $data['HiddenTag'];
+ $status = call_user_func( array( 'ChangeTags', "{$form->tagAction}TagWithChecks" ),
+ $tag, $data['Reason'], $context->getUser(), true );
+
+ if ( $status->isGood() ) {
+ $out->redirect( $this->getPageTitle()->getLocalURL() );
+ return true;
+ } elseif ( $status->isOK() && $form->tagAction === 'delete' ) {
+ // deletion succeeded, but hooks raised a warning
+ $out->addWikiText( $this->msg( 'tags-delete-warnings-after-delete', $tag,
+ count( $status->getWarningsArray() ) )->text() . "\n" .
+ $status->getWikitext() );
+ $out->addReturnTo( $this->getPageTitle() );
+ return true;
+ } else {
+ $out->addWikiText( "<div class=\"error\">\n" . $status->getWikitext() .
+ "\n</div>" );
+ return false;
+ }
+ }
+
protected function getGroupName() {
return 'changes';
}
diff --git a/includes/specials/SpecialTrackingCategories.php b/includes/specials/SpecialTrackingCategories.php
index 552031f1..d219c99d 100644
--- a/includes/specials/SpecialTrackingCategories.php
+++ b/includes/specials/SpecialTrackingCategories.php
@@ -36,6 +36,24 @@ class SpecialTrackingCategories extends SpecialPage {
parent::__construct( 'TrackingCategories' );
}
+ /**
+ * Tracking categories that exist in core
+ *
+ * @var array
+ */
+ private static $coreTrackingCategories = array(
+ 'index-category',
+ 'noindex-category',
+ 'duplicate-args-category',
+ 'expensive-parserfunction-category',
+ 'post-expand-template-argument-category',
+ 'post-expand-template-inclusion-category',
+ 'hidden-category-category',
+ 'broken-file-category',
+ 'node-count-exceeded-category',
+ 'expansion-depth-exceeded-category',
+ );
+
function execute( $par ) {
$this->setHeaders();
$this->outputHeader();
@@ -56,23 +74,88 @@ class SpecialTrackingCategories extends SpecialPage {
</tr></thead>"
);
- foreach ( $this->getConfig()->get( 'TrackingCategories' ) as $catMsg ) {
+ $trackingCategories = $this->prepareTrackingCategoriesData();
+
+ $batch = new LinkBatch();
+ foreach ( $trackingCategories as $catMsg => $data ) {
+ $batch->addObj( $data['msg'] );
+ foreach ( $data['cats'] as $catTitle ) {
+ $batch->addObj( $catTitle );
+ }
+ }
+ $batch->execute();
+
+ foreach ( $trackingCategories as $catMsg => $data ) {
+ $allMsgs = array();
+ $catDesc = $catMsg . '-desc';
+
+ $catMsgTitleText = Linker::link(
+ $data['msg'],
+ htmlspecialchars( $catMsg )
+ );
+
+ foreach ( $data['cats'] as $catTitle ) {
+ $catTitleText = Linker::link(
+ $catTitle,
+ htmlspecialchars( $catTitle->getText() )
+ );
+ $allMsgs[] = $catTitleText;
+ }
+
+ # Extra message, when no category was found
+ if ( !count( $allMsgs ) ) {
+ $allMsgs[] = $this->msg( 'trackingcategories-disabled' )->parse();
+ }
+
+ /*
+ * Show category description if it exists as a system message
+ * as category-name-desc
+ */
+ $descMsg = $this->msg( $catDesc );
+ if ( $descMsg->isBlank() ) {
+ $descMsg = $this->msg( 'trackingcategories-nodesc' );
+ }
+
+ $this->getOutput()->addHTML(
+ Html::openElement( 'tr' ) .
+ Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-name' ) ) .
+ $this->getLanguage()->commaList( array_unique( $allMsgs ) ) .
+ Html::closeElement( 'td' ) .
+ Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-msg' ) ) .
+ $catMsgTitleText .
+ Html::closeElement( 'td' ) .
+ Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-desc' ) ) .
+ $descMsg->parse() .
+ Html::closeElement( 'td' ) .
+ Html::closeElement( 'tr' )
+ );
+ }
+ $this->getOutput()->addHTML( Html::closeElement( 'table' ) );
+ }
+
+ /**
+ * Read the global and extract title objects from the corresponding messages
+ * @return array Array( 'msg' => Title, 'cats' => Title[] )
+ */
+ private function prepareTrackingCategoriesData() {
+ $categories = array_merge(
+ self::$coreTrackingCategories,
+ ExtensionRegistry::getInstance()->getAttribute( 'TrackingCategories' ),
+ $this->getConfig()->get( 'TrackingCategories' ) // deprecated
+ );
+ $trackingCategories = array();
+ foreach ( $categories as $catMsg ) {
/*
* Check if the tracking category varies by namespace
* Otherwise only pages in the current namespace will be displayed
* If it does vary, show pages considering all namespaces
*/
$msgObj = $this->msg( $catMsg )->inContentLanguage();
- $allMsgs = array();
- $catDesc = $catMsg . '-desc';
+ $allCats = array();
$catMsgTitle = Title::makeTitleSafe( NS_MEDIAWIKI, $catMsg );
if ( !$catMsgTitle ) {
continue;
}
- $catMsgTitleText = Linker::link(
- $catMsgTitle,
- htmlspecialchars( $catMsg )
- );
// Match things like {{NAMESPACE}} and {{NAMESPACENUMBER}}.
// False positives are ok, this is just an efficiency shortcut
@@ -88,11 +171,7 @@ class SpecialTrackingCategories extends SpecialPage {
if ( $catName !== '-' ) {
$catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
if ( $catTitle ) {
- $catTitleText = Linker::link(
- $catTitle,
- htmlspecialchars( $catName )
- );
- $allMsgs[] = $catTitleText;
+ $allCats[] = $catTitle;
}
}
}
@@ -102,44 +181,17 @@ class SpecialTrackingCategories extends SpecialPage {
if ( $catName !== '-' ) {
$catTitle = Title::makeTitleSafe( NS_CATEGORY, $catName );
if ( $catTitle ) {
- $catTitleText = Linker::link(
- $catTitle,
- htmlspecialchars( $catName )
- );
- $allMsgs[] = $catTitleText;
+ $allCats[] = $catTitle;
}
}
}
-
- # Extra message, when no category was found
- if ( !count( $allMsgs ) ) {
- $allMsgs[] = $this->msg( 'trackingcategories-disabled' )->parse();
- }
-
- /*
- * Show category description if it exists as a system message
- * as category-name-desc
- */
- $descMsg = $this->msg( $catDesc );
- if ( $descMsg->isBlank() ) {
- $descMsg = $this->msg( 'trackingcategories-nodesc' );
- }
-
- $this->getOutput()->addHTML(
- Html::openElement( 'tr' ) .
- Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-name' ) ) .
- $this->getLanguage()->commaList( array_unique( $allMsgs ) ) .
- Html::closeElement( 'td' ) .
- Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-msg' ) ) .
- $catMsgTitleText .
- Html::closeElement( 'td' ) .
- Html::openElement( 'td', array( 'class' => 'mw-trackingcategories-desc' ) ) .
- $descMsg->parse() .
- Html::closeElement( 'td' ) .
- Html::closeElement( 'tr' )
+ $trackingCategories[$catMsg] = array(
+ 'cats' => $allCats,
+ 'msg' => $catMsgTitle,
);
}
- $this->getOutput()->addHTML( Html::closeElement( 'table' ) );
+
+ return $trackingCategories;
}
protected function getGroupName() {
diff --git a/includes/specials/SpecialUnblock.php b/includes/specials/SpecialUnblock.php
index 244b8894..f81f1c30 100644
--- a/includes/specials/SpecialUnblock.php
+++ b/includes/specials/SpecialUnblock.php
@@ -53,7 +53,7 @@ class SpecialUnblock extends SpecialPage {
$out = $this->getOutput();
$out->setPageTitle( $this->msg( 'unblockip' ) );
- $out->addModules( 'mediawiki.special' );
+ $out->addModules( array( 'mediawiki.special', 'mediawiki.userSuggest' ) );
$form = new HTMLForm( $this->getFields(), $this->getContext() );
$form->setWrapperLegendMsg( 'unblockip' );
@@ -88,6 +88,7 @@ class SpecialUnblock extends SpecialPage {
'autofocus' => true,
'size' => '45',
'required' => true,
+ 'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
),
'Name' => array(
'type' => 'info',
@@ -226,8 +227,12 @@ class SpecialUnblock extends SpecialPage {
}
# Make log entry
- $log = new LogPage( 'block' );
- $log->addEntry( 'unblock', $page, $data['Reason'], array(), $performer );
+ $logEntry = new ManualLogEntry( 'block', 'unblock' );
+ $logEntry->setTarget( $page );
+ $logEntry->setComment( $data['Reason'] );
+ $logEntry->setPerformer( $performer );
+ $logId = $logEntry->insert();
+ $logEntry->publish( $logId );
return true;
}
diff --git a/includes/specials/SpecialUndelete.php b/includes/specials/SpecialUndelete.php
index c3e871b8..f2362a18 100644
--- a/includes/specials/SpecialUndelete.php
+++ b/includes/specials/SpecialUndelete.php
@@ -94,7 +94,7 @@ class PageArchive {
}
/**
- * @param DatabaseBase $dbr
+ * @param IDatabase $dbr
* @param string|array $condition
* @return bool|ResultWrapper
*/
@@ -370,6 +370,7 @@ class PageArchive {
if ( $restoreFiles && $this->title->getNamespace() == NS_FILE ) {
$img = wfLocalFile( $this->title );
+ $img->load( File::READ_LATEST );
$this->fileStatus = $img->restore( $fileVersions, $unsuppress );
if ( !$this->fileStatus->isOK() ) {
return false;
@@ -421,7 +422,7 @@ class PageArchive {
$logEntry->setTarget( $this->title );
$logEntry->setComment( $reason );
- wfRunHooks( 'ArticleUndeleteLogEntry', array( $this, &$logEntry, $user ) );
+ Hooks::run( 'ArticleUndeleteLogEntry', array( $this, &$logEntry, $user ) );
$logid = $logEntry->insert();
$logEntry->publish( $logid );
@@ -550,7 +551,7 @@ class PageArchive {
'title' => $article->getTitle(), // used to derive default content model
)
);
- $user = User::newFromName( $revision->getRawUserText(), false );
+ $user = User::newFromName( $revision->getUserText( Revision::RAW ), false );
$content = $revision->getContent( Revision::RAW );
//NOTE: article ID may not be known yet. prepareSave() should not modify the database.
@@ -605,7 +606,7 @@ class PageArchive {
$revision->insertOn( $dbw );
$restored++;
- wfRunHooks( 'ArticleRevisionUndeleted', array( &$this->title, $revision, $row->ar_page_id ) );
+ Hooks::run( 'ArticleRevisionUndeleted', array( &$this->title, $revision, $row->ar_page_id ) );
}
# Now that it's safely stored, take it out of the archive
$dbw->delete( 'archive',
@@ -623,7 +624,7 @@ class PageArchive {
$wasnew = $article->updateIfNewerOn( $dbw, $revision, $previousRevId );
if ( $created || $wasnew ) {
// Update site stats, link tables, etc
- $user = User::newFromName( $revision->getRawUserText(), false );
+ $user = User::newFromName( $revision->getUserText( Revision::RAW ), false );
$article->doEditUpdates(
$revision,
$user,
@@ -631,7 +632,7 @@ class PageArchive {
);
}
- wfRunHooks( 'ArticleUndelete', array( &$this->title, $created, $comment, $oldPageId ) );
+ Hooks::run( 'ArticleUndelete', array( &$this->title, $created, $comment, $oldPageId ) );
if ( $this->title->getNamespace() == NS_FILE ) {
$update = new HTMLCacheUpdate( $this->title, 'imagelinks' );
@@ -790,6 +791,7 @@ class SpecialUndelete extends SpecialPage {
return;
}
+ $this->addHelpLink( 'Help:Undelete' );
if ( $this->mAllowed ) {
$out->setPageTitle( $this->msg( 'undeletepage' ) );
} else {
@@ -839,7 +841,7 @@ class SpecialUndelete extends SpecialPage {
'prefix',
20,
$this->mSearchPrefix,
- array( 'id' => 'prefix', 'autofocus' => true )
+ array( 'id' => 'prefix', 'autofocus' => '' )
) . ' ' .
Xml::submitButton( $this->msg( 'undelete-search-submit' )->text() ) .
Xml::closeElement( 'fieldset' ) .
@@ -908,7 +910,7 @@ class SpecialUndelete extends SpecialPage {
}
$archive = new PageArchive( $this->mTargetObj, $this->getConfig() );
- if ( !wfRunHooks( 'UndeleteForm::showRevision', array( &$archive, $this->mTargetObj ) ) ) {
+ if ( !Hooks::run( 'UndeleteForm::showRevision', array( &$archive, $this->mTargetObj ) ) ) {
return;
}
$rev = $archive->getRevision( $timestamp );
@@ -992,7 +994,7 @@ class SpecialUndelete extends SpecialPage {
$out->addHTML( $this->msg( 'undelete-revision' )->rawParams( $link )->params(
$time )->rawParams( $userLink )->params( $d, $t )->parse() . '</div>' );
- if ( !wfRunHooks( 'UndeleteShowRevision', array( $this->mTargetObj, $rev ) ) ) {
+ if ( !Hooks::run( 'UndeleteShowRevision', array( $this->mTargetObj, $rev ) ) ) {
return;
}
@@ -1215,7 +1217,7 @@ class SpecialUndelete extends SpecialPage {
);
$archive = new PageArchive( $this->mTargetObj, $this->getConfig() );
- wfRunHooks( 'UndeleteForm::showHistory', array( &$archive, $this->mTargetObj ) );
+ Hooks::run( 'UndeleteForm::showHistory', array( &$archive, $this->mTargetObj ) );
/*
$text = $archive->getLastRevisionText();
if( is_null( $text ) ) {
@@ -1312,7 +1314,7 @@ class SpecialUndelete extends SpecialPage {
'wpComment',
50,
$this->mComment,
- array( 'id' => 'wpComment', 'autofocus' => true )
+ array( 'id' => 'wpComment', 'autofocus' => '' )
) .
"</td>
</tr>
@@ -1628,7 +1630,9 @@ class SpecialUndelete extends SpecialPage {
}
function undelete() {
- if ( $this->getConfig()->get( 'UploadMaintenance' ) && $this->mTargetObj->getNamespace() == NS_FILE ) {
+ if ( $this->getConfig()->get( 'UploadMaintenance' )
+ && $this->mTargetObj->getNamespace() == NS_FILE
+ ) {
throw new ErrorPageError( 'undelete-error', 'filedelete-maintenance' );
}
@@ -1638,7 +1642,7 @@ class SpecialUndelete extends SpecialPage {
$out = $this->getOutput();
$archive = new PageArchive( $this->mTargetObj, $this->getConfig() );
- wfRunHooks( 'UndeleteForm::undelete', array( &$archive, $this->mTargetObj ) );
+ Hooks::run( 'UndeleteForm::undelete', array( &$archive, $this->mTargetObj ) );
$ok = $archive->undelete(
$this->mTargetTimestamp,
$this->mComment,
@@ -1649,7 +1653,7 @@ class SpecialUndelete extends SpecialPage {
if ( is_array( $ok ) ) {
if ( $ok[1] ) { // Undeleted file count
- wfRunHooks( 'FileUndeleteComplete', array(
+ Hooks::run( 'FileUndeleteComplete', array(
$this->mTargetObj, $this->mFileVersions,
$this->getUser(), $this->mComment ) );
}
diff --git a/includes/specials/SpecialUpload.php b/includes/specials/SpecialUpload.php
index 55d09dd6..640562e4 100644
--- a/includes/specials/SpecialUpload.php
+++ b/includes/specials/SpecialUpload.php
@@ -143,6 +143,13 @@ class SpecialUpload extends SpecialPage {
/**
* Special page entry point
* @param string $par
+ * @throws ErrorPageError
+ * @throws Exception
+ * @throws FatalError
+ * @throws MWException
+ * @throws PermissionsError
+ * @throws ReadOnlyError
+ * @throws UserBlockedError
*/
public function execute( $par ) {
$this->setHeaders();
@@ -153,6 +160,8 @@ class SpecialUpload extends SpecialPage {
throw new ErrorPageError( 'uploaddisabled', 'uploaddisabledtext' );
}
+ $this->addHelpLink( 'Help:Managing files' );
+
# Check permissions
$user = $this->getUser();
$permissionRequired = UploadBase::isAllowed( $user );
@@ -186,7 +195,7 @@ class SpecialUpload extends SpecialPage {
$this->processUpload();
} else {
# Backwards compatibility hook
- if ( !wfRunHooks( 'UploadForm:initial', array( &$this ) ) ) {
+ if ( !Hooks::run( 'UploadForm:initial', array( &$this ) ) ) {
wfDebug( "Hook 'UploadForm:initial' broke output of the upload form\n" );
return;
@@ -414,7 +423,7 @@ class SpecialUpload extends SpecialPage {
return;
}
- if ( !wfRunHooks( 'UploadForm:BeforeProcessing', array( &$this ) ) ) {
+ if ( !Hooks::run( 'UploadForm:BeforeProcessing', array( &$this ) ) ) {
wfDebug( "Hook 'UploadForm:BeforeProcessing' broke processing the file.\n" );
// This code path is deprecated. If you want to break upload processing
// do so by hooking into the appropriate hooks in UploadBase::verifyUpload
@@ -454,7 +463,7 @@ class SpecialUpload extends SpecialPage {
// Get the page text if this is not a reupload
if ( !$this->mForReUpload ) {
$pageText = self::getInitialPageText( $this->mComment, $this->mLicense,
- $this->mCopyrightStatus, $this->mCopyrightSource );
+ $this->mCopyrightStatus, $this->mCopyrightSource, $this->getConfig() );
} else {
$pageText = false;
}
@@ -474,7 +483,7 @@ class SpecialUpload extends SpecialPage {
// Success, redirect to description page
$this->mUploadSuccessful = true;
- wfRunHooks( 'SpecialUploadComplete', array( &$this ) );
+ Hooks::run( 'SpecialUploadComplete', array( &$this ) );
$this->getOutput()->redirect( $this->mLocalFile->getTitle()->getFullURL() );
}
@@ -484,28 +493,32 @@ class SpecialUpload extends SpecialPage {
* @param string $license
* @param string $copyStatus
* @param string $source
+ * @param Config $config Configuration object to load data from
* @return string
- * @todo Use Config obj instead of globals
*/
public static function getInitialPageText( $comment = '', $license = '',
- $copyStatus = '', $source = ''
+ $copyStatus = '', $source = '', Config $config = null
) {
- global $wgUseCopyrightUpload, $wgForceUIMsgAsContentMsg;
+ if ( $config === null ) {
+ wfDebug( __METHOD__ . ' called without a Config instance passed to it' );
+ $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+ }
$msg = array();
+ $forceUIMsgAsContentMsg = (array)$config->get( 'ForceUIMsgAsContentMsg' );
/* These messages are transcluded into the actual text of the description page.
* Thus, forcing them as content messages makes the upload to produce an int: template
* instead of hardcoding it there in the uploader language.
*/
foreach ( array( 'license-header', 'filedesc', 'filestatus', 'filesource' ) as $msgName ) {
- if ( in_array( $msgName, (array)$wgForceUIMsgAsContentMsg ) ) {
+ if ( in_array( $msgName, $forceUIMsgAsContentMsg ) ) {
$msg[$msgName] = "{{int:$msgName}}";
} else {
$msg[$msgName] = wfMessage( $msgName )->inContentLanguage()->text();
}
}
- if ( $wgUseCopyrightUpload ) {
+ if ( $config->get( 'UseCopyrightUpload' ) ) {
$licensetxt = '';
if ( $license != '' ) {
$licensetxt = '== ' . $msg['license-header'] . " ==\n" . '{{' . $license . '}}' . "\n";
@@ -731,8 +744,8 @@ class SpecialUpload extends SpecialPage {
}
return '<li>' .
- wfMessage( 'file-exists-duplicate' )->numParams( count( $dupes ) )->parse() .
- $gallery->toHtml() . "</li>\n";
+ $this->msg( 'file-exists-duplicate' )->numParams( count( $dupes ) )->parse() .
+ $gallery->toHTML() . "</li>\n";
}
protected function getGroupName() {
@@ -746,7 +759,7 @@ class SpecialUpload extends SpecialPage {
*
* @todo What about non-BitmapHandler handled files?
*/
- static public function rotationEnabled() {
+ public static function rotationEnabled() {
$bitmapHandler = new BitmapHandler();
return $bitmapHandler->autoRotateEnabled();
}
@@ -795,7 +808,7 @@ class UploadForm extends HTMLForm {
+ $this->getDescriptionSection()
+ $this->getOptionsSection();
- wfRunHooks( 'UploadFormInitDescriptor', array( &$descriptor ) );
+ Hooks::run( 'UploadFormInitDescriptor', array( &$descriptor ) );
parent::__construct( $descriptor, $context, 'upload' );
# Add a link to edit MediaWik:Licenses
@@ -872,6 +885,17 @@ class UploadForm extends HTMLForm {
);
}
+ $help = $this->msg( 'upload-maxfilesize',
+ $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
+ )->parse();
+
+ // If the user can also upload by URL, there are 2 different file size limits.
+ // This extra message helps stress which limit corresponds to what.
+ if ( $canUploadByUrl ) {
+ $help .= $this->msg( 'word-separator' )->escaped();
+ $help .= $this->msg( 'upload_source_file' )->parse();
+ }
+
$descriptor['UploadFile'] = array(
'class' => 'UploadSourceField',
'section' => 'source',
@@ -881,11 +905,7 @@ class UploadForm extends HTMLForm {
'label-message' => 'sourcefilename',
'upload-type' => 'File',
'radio' => &$radio,
- 'help' => $this->msg( 'upload-maxfilesize',
- $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
- )->parse() .
- $this->msg( 'word-separator' )->escaped() .
- $this->msg( 'upload_source_file' )->escaped(),
+ 'help' => $help,
'checked' => $selectedSourceType == 'file',
);
@@ -903,11 +923,11 @@ class UploadForm extends HTMLForm {
$this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
)->parse() .
$this->msg( 'word-separator' )->escaped() .
- $this->msg( 'upload_source_url' )->escaped(),
+ $this->msg( 'upload_source_url' )->parse(),
'checked' => $selectedSourceType == 'url',
);
}
- wfRunHooks( 'UploadFormSourceDescriptors', array( &$descriptor, &$radio, $selectedSourceType ) );
+ Hooks::run( 'UploadFormSourceDescriptors', array( &$descriptor, &$radio, $selectedSourceType ) );
$descriptor['Extensions'] = array(
'type' => 'info',
@@ -930,35 +950,31 @@ class UploadForm extends HTMLForm {
$config = $this->getConfig();
if ( $config->get( 'CheckFileExtensions' ) ) {
+ $fileExtensions = array_unique( $config->get( 'FileExtensions' ) );
if ( $config->get( 'StrictFileExtensions' ) ) {
# Everything not permitted is banned
$extensionsList =
'<div id="mw-upload-permitted">' .
- $this->msg(
- 'upload-permitted',
- $this->getContext()->getLanguage()->commaList(
- array_unique( $config->get( 'FileExtensions' ) )
- )
- )->parseAsBlock() .
+ $this->msg( 'upload-permitted' )
+ ->params( $this->getLanguage()->commaList( $fileExtensions ) )
+ ->numParams( count( $fileExtensions ) )
+ ->parseAsBlock() .
"</div>\n";
} else {
# We have to list both preferred and prohibited
+ $fileBlacklist = array_unique( $config->get( 'FileBlacklist' ) );
$extensionsList =
'<div id="mw-upload-preferred">' .
- $this->msg(
- 'upload-preferred',
- $this->getContext()->getLanguage()->commaList(
- array_unique( $config->get( 'FileExtensions' ) )
- )
- )->parseAsBlock() .
+ $this->msg( 'upload-preferred' )
+ ->params( $this->getLanguage()->commaList( $fileExtensions ) )
+ ->numParams( count( $fileExtensions ) )
+ ->parseAsBlock() .
"</div>\n" .
'<div id="mw-upload-prohibited">' .
- $this->msg(
- 'upload-prohibited',
- $this->getContext()->getLanguage()->commaList(
- array_unique( $config->get( 'FileBlacklist' ) )
- )
- )->parseAsBlock() .
+ $this->msg( 'upload-prohibited' )
+ ->params( $this->getLanguage()->commaList( $fileBlacklist ) )
+ ->numParams( count( $fileBlacklist ) )
+ ->parseAsBlock() .
"</div>\n";
}
} else {
@@ -978,10 +994,10 @@ class UploadForm extends HTMLForm {
protected function getDescriptionSection() {
$config = $this->getConfig();
if ( $this->mSessionKey ) {
- $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash();
+ $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
try {
$file = $stash->getFile( $this->mSessionKey );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$file = null;
}
if ( $file ) {
@@ -1139,9 +1155,12 @@ class UploadForm extends HTMLForm {
// the wpDestFile textbox
$this->mDestFile === '',
'wgUploadSourceIds' => $this->mSourceIds,
+ 'wgCheckFileExtensions' => $config->get( 'CheckFileExtensions' ),
'wgStrictFileExtensions' => $config->get( 'StrictFileExtensions' ),
+ 'wgFileExtensions' => array_values( array_unique( $config->get( 'FileExtensions' ) ) ),
'wgCapitalizeUploads' => MWNamespace::isCapitalized( NS_FILE ),
'wgMaxUploadSize' => $this->mMaxUploadSize,
+ 'wgFileCanRotate' => SpecialUpload::rotationEnabled(),
);
$out = $this->getOutput();
diff --git a/includes/specials/SpecialUploadStash.php b/includes/specials/SpecialUploadStash.php
index ddb435d9..12e103e7 100644
--- a/includes/specials/SpecialUploadStash.php
+++ b/includes/specials/SpecialUploadStash.php
@@ -48,10 +48,6 @@ class SpecialUploadStash extends UnlistedSpecialPage {
public function __construct() {
parent::__construct( 'UploadStash', 'upload' );
- try {
- $this->stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash();
- } catch ( UploadStashNotAvailableException $e ) {
- }
}
/**
@@ -62,6 +58,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
* @return bool Success
*/
public function execute( $subPage ) {
+ $this->stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
$this->checkPermissions();
if ( $subPage === null || $subPage === '' ) {
@@ -250,9 +247,9 @@ class SpecialUploadStash extends UnlistedSpecialPage {
// make a curl call to the scaler to create a thumbnail
$httpOptions = array(
'method' => 'GET',
- 'timeout' => 'default'
+ 'timeout' => 5 // T90599 attempt to time out cleanly
);
- $req = MWHttpRequest::factory( $scalerThumbUrl, $httpOptions );
+ $req = MWHttpRequest::factory( $scalerThumbUrl, $httpOptions, __METHOD__ );
$status = $req->execute();
if ( !$status->isOK() ) {
$errors = $status->getErrorsArray();
@@ -331,11 +328,12 @@ class SpecialUploadStash extends UnlistedSpecialPage {
* This works, because there really is only one stash per logged-in user, despite appearances.
*
* @param array $formData
+ * @param HTMLForm $form
* @return Status
*/
- public static function tryClearStashedUploads( $formData ) {
+ public static function tryClearStashedUploads( $formData, $form ) {
if ( isset( $formData['Clear'] ) ) {
- $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash();
+ $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $form->getUser() );
wfDebug( 'stash has: ' . print_r( $stash->listFiles(), true ) . "\n" );
if ( !$stash->clear() ) {
diff --git a/includes/specials/SpecialUserlogin.php b/includes/specials/SpecialUserlogin.php
index 24b636b1..10edbcfb 100644
--- a/includes/specials/SpecialUserlogin.php
+++ b/includes/specials/SpecialUserlogin.php
@@ -105,9 +105,27 @@ class LoginForm extends SpecialPage {
* @param WebRequest $request
*/
public function __construct( $request = null ) {
+ global $wgUseMediaWikiUIEverywhere;
parent::__construct( 'Userlogin' );
$this->mOverrideRequest = $request;
+ // Override UseMediaWikiEverywhere to true, to force login and create form to use mw ui
+ $wgUseMediaWikiUIEverywhere = true;
+ }
+
+ /**
+ * Returns an array of all valid error messages.
+ *
+ * @return array
+ */
+ public static function getValidErrorMessages() {
+ static $messages = null;
+ if ( !$messages ) {
+ $messages = self::$validErrorMessages;
+ Hooks::run( 'LoginFormValidErrorMessages', array( &$messages ) );
+ }
+
+ return $messages;
}
/**
@@ -142,7 +160,8 @@ class LoginForm extends SpecialPage {
$this->mLoginattempt = $request->getCheck( 'wpLoginattempt' );
$this->mAction = $request->getVal( 'action' );
$this->mRemember = $request->getCheck( 'wpRemember' );
- $this->mFromHTTP = $request->getBool( 'fromhttp', false );
+ $this->mFromHTTP = $request->getBool( 'fromhttp', false )
+ || $request->getBool( 'wpFromhttp', false );
$this->mStickHTTPS = ( !$this->mFromHTTP && $request->getProtocol() === 'https' )
|| $request->getBool( 'wpForceHttps', false );
$this->mLanguage = $request->getText( 'uselang' );
@@ -172,13 +191,13 @@ class LoginForm extends SpecialPage {
// Only show valid error or warning messages.
if ( $entryError->exists()
- && in_array( $entryError->getKey(), self::$validErrorMessages )
+ && in_array( $entryError->getKey(), self::getValidErrorMessages() )
) {
$this->mEntryErrorType = 'error';
$this->mEntryError = $entryError->rawParams( $loginreqlink )->escaped();
} elseif ( $entryWarning->exists()
- && in_array( $entryWarning->getKey(), self::$validErrorMessages )
+ && in_array( $entryWarning->getKey(), self::getValidErrorMessages() )
) {
$this->mEntryErrorType = 'warning';
$this->mEntryError = $entryWarning->rawParams( $loginreqlink )->escaped();
@@ -333,7 +352,7 @@ class LoginForm extends SpecialPage {
$u->saveSettings();
$result = $this->mailPasswordInternal( $u, false, 'createaccount-title', 'createaccount-text' );
- wfRunHooks( 'AddNewAccount', array( $u, true ) );
+ Hooks::run( 'AddNewAccount', array( $u, true ) );
$u->addNewUserLogEntry( 'byemail', $this->mReason );
$out = $this->getOutput();
@@ -408,7 +427,7 @@ class LoginForm extends SpecialPage {
// which is needed or the personal links will be
// wrong.
$this->getContext()->setUser( $u );
- wfRunHooks( 'AddNewAccount', array( $u, false ) );
+ Hooks::run( 'AddNewAccount', array( $u, false ) );
$u->addNewUserLogEntry( 'create' );
if ( $this->hasSessionCookie() ) {
$this->successfulCreation();
@@ -420,7 +439,7 @@ class LoginForm extends SpecialPage {
$out->setPageTitle( $this->msg( 'accountcreated' ) );
$out->addWikiMsg( 'accountcreatedtext', $u->getName() );
$out->addReturnTo( $this->getPageTitle() );
- wfRunHooks( 'AddNewAccount', array( $u, false ) );
+ Hooks::run( 'AddNewAccount', array( $u, false ) );
$u->addNewUserLogEntry( 'create2', $this->mReason );
}
@@ -509,20 +528,8 @@ class LoginForm extends SpecialPage {
return Status::newFatal( 'sorbs_create_account_reason' );
}
- // Normalize the name so that silly things don't cause "invalid username"
- // errors. User::newFromName does some rather strict checking, rejecting
- // e.g. leading/trailing/multiple spaces. But first we need to reject
- // usernames that would be treated as titles with a fragment part.
- if ( strpos( $this->mUsername, '#' ) !== false ) {
- return Status::newFatal( 'noname' );
- }
- $title = Title::makeTitleSafe( NS_USER, $this->mUsername );
- if ( !is_object( $title ) ) {
- return Status::newFatal( 'noname' );
- }
-
# Now create a dummy user ($u) and check if it is valid
- $u = User::newFromName( $title->getText(), 'creatable' );
+ $u = User::newFromName( $this->mUsername, 'creatable' );
if ( !is_object( $u ) ) {
return Status::newFatal( 'noname' );
} elseif ( 0 != $u->idForName() ) {
@@ -563,7 +570,7 @@ class LoginForm extends SpecialPage {
$abortError = '';
$abortStatus = null;
- if ( !wfRunHooks( 'AbortNewAccount', array( $u, &$abortError, &$abortStatus ) ) ) {
+ if ( !Hooks::run( 'AbortNewAccount', array( $u, &$abortError, &$abortStatus ) ) ) {
// Hook point to add extra creation throttles and blocks
wfDebug( "LoginForm::addNewAccountInternal: a hook blocked creation\n" );
if ( $abortStatus === null ) {
@@ -583,7 +590,7 @@ class LoginForm extends SpecialPage {
}
// Hook point to check for exempt from account creation throttle
- if ( !wfRunHooks( 'ExemptFromAccountCreationThrottle', array( $ip ) ) ) {
+ if ( !Hooks::run( 'ExemptFromAccountCreationThrottle', array( $ip ) ) ) {
wfDebug( "LoginForm::exemptFromAccountCreationThrottle: a hook " .
"allowed account creation w/o throttle\n" );
} else {
@@ -706,7 +713,7 @@ class LoginForm extends SpecialPage {
// Give extensions a way to indicate the username has been updated,
// rather than telling the user the account doesn't exist.
- if ( !wfRunHooks( 'LoginUserMigrated', array( $u, &$msg ) ) ) {
+ if ( !Hooks::run( 'LoginUserMigrated', array( $u, &$msg ) ) ) {
$this->mAbortLoginErrorMsg = $msg;
return self::USER_MIGRATED;
}
@@ -730,7 +737,7 @@ class LoginForm extends SpecialPage {
// Give general extensions, such as a captcha, a chance to abort logins
$abort = self::ABORTED;
$msg = null;
- if ( !wfRunHooks( 'AbortLogin', array( $u, $this->mPassword, &$abort, &$msg ) ) ) {
+ if ( !Hooks::run( 'AbortLogin', array( $u, $this->mPassword, &$abort, &$msg ) ) ) {
$this->mAbortLoginErrorMsg = $msg;
return $abort;
@@ -755,7 +762,7 @@ class LoginForm extends SpecialPage {
// As a side-effect, we can authenticate the user's e-mail ad-
// dress if it's not already done, since the temporary password
// was sent via e-mail.
- if ( !$u->isEmailConfirmed() ) {
+ if ( !$u->isEmailConfirmed() && !wfReadOnly() ) {
$u->confirmEmail();
$u->saveSettings();
}
@@ -791,12 +798,12 @@ class LoginForm extends SpecialPage {
if ( $isAutoCreated ) {
// Must be run after $wgUser is set, for correct new user log
- wfRunHooks( 'AuthPluginAutoCreate', array( $u ) );
+ Hooks::run( 'AuthPluginAutoCreate', array( $u ) );
}
$retval = self::SUCCESS;
}
- wfRunHooks( 'LoginAuthenticateAudit', array( $u, $this->mPassword, $retval ) );
+ Hooks::run( 'LoginAuthenticateAudit', array( $u, $this->mPassword, $retval ) );
return $retval;
}
@@ -877,7 +884,7 @@ class LoginForm extends SpecialPage {
}
$abortError = '';
- if ( !wfRunHooks( 'AbortAutoAccount', array( $user, &$abortError ) ) ) {
+ if ( !Hooks::run( 'AbortAutoAccount', array( $user, &$abortError ) ) ) {
// Hook point to add extra creation throttles and blocks
wfDebug( "LoginForm::attemptAutoCreate: a hook blocked creation: $abortError\n" );
$this->mAbortLoginErrorMsg = $abortError;
@@ -906,7 +913,7 @@ class LoginForm extends SpecialPage {
case self::SUCCESS:
# We've verified now, update the real record
$user = $this->getUser();
- $user->invalidateCache();
+ $user->touch();
if ( $user->requiresHTTPS() ) {
$this->mStickHTTPS = true;
@@ -1030,7 +1037,7 @@ class LoginForm extends SpecialPage {
*/
protected function resetLoginForm( Message $msg ) {
// Allow hooks to explain this password reset in more detail
- wfRunHooks( 'LoginPasswordResetMessage', array( &$msg, $this->mUsername ) );
+ Hooks::run( 'LoginPasswordResetMessage', array( &$msg, $this->mUsername ) );
$reset = new SpecialChangePassword();
$derivative = new DerivativeContext( $this->getContext() );
$derivative->setTitle( $reset->getPageTitle() );
@@ -1063,7 +1070,7 @@ class LoginForm extends SpecialPage {
}
$currentUser = $this->getUser();
- wfRunHooks( 'User::mailPasswordInternal', array( &$currentUser, &$ip, &$u ) );
+ Hooks::run( 'User::mailPasswordInternal', array( &$currentUser, &$ip, &$u ) );
$np = $u->randomPassword();
$u->setNewpassword( $np, $throttle );
@@ -1094,7 +1101,7 @@ class LoginForm extends SpecialPage {
# Run any hooks; display injected HTML if any, else redirect
$currentUser = $this->getUser();
$injected_html = '';
- wfRunHooks( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
+ Hooks::run( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
if ( $injected_html !== '' ) {
$this->displaySuccessfulAction( 'success', $this->msg( 'loginsuccesstitle' ),
@@ -1116,14 +1123,14 @@ class LoginForm extends SpecialPage {
$injected_html = '';
$welcome_creation_msg = 'welcomecreation-msg';
- wfRunHooks( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
+ Hooks::run( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
/**
* Let any extensions change what message is shown.
* @see https://www.mediawiki.org/wiki/Manual:Hooks/BeforeWelcomeCreation
* @since 1.18
*/
- wfRunHooks( 'BeforeWelcomeCreation', array( &$welcome_creation_msg, &$injected_html ) );
+ Hooks::run( 'BeforeWelcomeCreation', array( &$welcome_creation_msg, &$injected_html ) );
$this->displaySuccessfulAction(
'signup',
@@ -1233,7 +1240,7 @@ class LoginForm extends SpecialPage {
}
// Allow modification of redirect behavior
- wfRunHooks( 'PostLoginRedirect', array( &$returnTo, &$returnToQuery, &$type ) );
+ Hooks::run( 'PostLoginRedirect', array( &$returnTo, &$returnToQuery, &$type ) );
$returnToTitle = Title::newFromText( $returnTo );
if ( !$returnToTitle ) {
@@ -1262,6 +1269,12 @@ class LoginForm extends SpecialPage {
/**
* @param string $msg
* @param string $msgtype
+ * @throws ErrorPageError
+ * @throws Exception
+ * @throws FatalError
+ * @throws MWException
+ * @throws PermissionsError
+ * @throws ReadOnlyError
* @private
*/
function mainLoginForm( $msg, $msgtype = 'error' ) {
@@ -1325,7 +1338,7 @@ class LoginForm extends SpecialPage {
'mediawiki.special.userlogin.signup.styles'
) );
- $template = new UsercreateTemplate();
+ $template = new UsercreateTemplate( $this->getConfig() );
// Must match number of benefits defined in messages
$template->set( 'benefitCount', 3 );
@@ -1338,7 +1351,7 @@ class LoginForm extends SpecialPage {
'mediawiki.special.userlogin.login.styles'
) );
- $template = new UserloginTemplate();
+ $template = new UserloginTemplate( $this->getConfig() );
$q = 'action=submitlogin&type=login';
$linkq = 'type=signup';
@@ -1420,28 +1433,26 @@ class LoginForm extends SpecialPage {
}
$template->set( 'secureLoginUrl', $this->mSecureLoginUrl );
- // Use loginend-https for HTTPS requests if it's not blank, loginend otherwise
- // Ditto for signupend. New forms use neither.
+ // Use signupend-https for HTTPS requests if it's not blank, signupend otherwise
$usingHTTPS = $this->mRequest->getProtocol() == 'https';
- $loginendHTTPS = $this->msg( 'loginend-https' );
$signupendHTTPS = $this->msg( 'signupend-https' );
- if ( $usingHTTPS && !$loginendHTTPS->isBlank() ) {
- $template->set( 'loginend', $loginendHTTPS->parse() );
- } else {
- $template->set( 'loginend', $this->msg( 'loginend' )->parse() );
- }
if ( $usingHTTPS && !$signupendHTTPS->isBlank() ) {
$template->set( 'signupend', $signupendHTTPS->parse() );
} else {
$template->set( 'signupend', $this->msg( 'signupend' )->parse() );
}
+ // If using HTTPS coming from HTTP, then the 'fromhttp' parameter must be preserved
+ if ( $usingHTTPS ) {
+ $template->set( 'fromhttp', $this->mFromHTTP );
+ }
+
// Give authentication and captcha plugins a chance to modify the form
$wgAuth->modifyUITemplate( $template, $this->mType );
if ( $this->mType == 'signup' ) {
- wfRunHooks( 'UserCreateForm', array( &$template ) );
+ Hooks::run( 'UserCreateForm', array( &$template ) );
} else {
- wfRunHooks( 'UserLoginForm', array( &$template ) );
+ Hooks::run( 'UserLoginForm', array( &$template ) );
}
$out->disallowUserJs(); // just in case...
diff --git a/includes/specials/SpecialUserlogout.php b/includes/specials/SpecialUserlogout.php
index d65ac852..080dc119 100644
--- a/includes/specials/SpecialUserlogout.php
+++ b/includes/specials/SpecialUserlogout.php
@@ -56,7 +56,7 @@ class SpecialUserlogout extends UnlistedSpecialPage {
// Hook.
$injected_html = '';
- wfRunHooks( 'UserLogoutComplete', array( &$user, &$injected_html, $oldName ) );
+ Hooks::run( 'UserLogoutComplete', array( &$user, &$injected_html, $oldName ) );
$out->addHTML( $injected_html );
$out->returnToMain();
diff --git a/includes/specials/SpecialUserrights.php b/includes/specials/SpecialUserrights.php
index cefdad07..758e3c05 100644
--- a/includes/specials/SpecialUserrights.php
+++ b/includes/specials/SpecialUserrights.php
@@ -106,7 +106,7 @@ class UserrightsPage extends SpecialPage {
}
}
- if ( User::getCanonicalName( $this->mTarget ) == $user->getName() ) {
+ if ( User::getCanonicalName( $this->mTarget ) === $user->getName() ) {
$this->isself = true;
}
@@ -135,6 +135,7 @@ class UserrightsPage extends SpecialPage {
$out = $this->getOutput();
$out->addModuleStyles( 'mediawiki.special' );
+ $this->addHelpLink( 'Help:Assigning permissions' );
// show the general form
if ( count( $available['add'] ) || count( $available['remove'] ) ) {
@@ -218,7 +219,7 @@ class UserrightsPage extends SpecialPage {
/**
* Save user groups changes in the database.
*
- * @param User $user
+ * @param User|UserRightsProxy $user
* @param array $add Array of groups to add
* @param array $remove Array of groups to remove
* @param string $reason Reason for group change
@@ -228,7 +229,7 @@ class UserrightsPage extends SpecialPage {
global $wgAuth;
// Validate input set...
- $isself = ( $user->getName() == $this->getUser()->getName() );
+ $isself = $user->getName() == $this->getUser()->getName();
$groups = $user->getGroups();
$changeable = $this->changeableGroups();
$addable = array_merge( $changeable['add'], $isself ? $changeable['add-self'] : array() );
@@ -244,18 +245,22 @@ class UserrightsPage extends SpecialPage {
$oldGroups = $user->getGroups();
$newGroups = $oldGroups;
- // remove then add groups
+ // Remove then add groups
if ( $remove ) {
- $newGroups = array_diff( $newGroups, $remove );
- foreach ( $remove as $group ) {
- $user->removeGroup( $group );
+ foreach ( $remove as $index => $group ) {
+ if ( !$user->removeGroup( $group ) ) {
+ unset($remove[$index]);
+ }
}
+ $newGroups = array_diff( $newGroups, $remove );
}
if ( $add ) {
- $newGroups = array_merge( $newGroups, $add );
- foreach ( $add as $group ) {
- $user->addGroup( $group );
+ foreach ( $add as $index => $group ) {
+ if ( !$user->addGroup( $group ) ) {
+ unset($add[$index]);
+ }
}
+ $newGroups = array_merge( $newGroups, $add );
}
$newGroups = array_unique( $newGroups );
@@ -267,7 +272,7 @@ class UserrightsPage extends SpecialPage {
wfDebug( 'oldGroups: ' . print_r( $oldGroups, true ) . "\n" );
wfDebug( 'newGroups: ' . print_r( $newGroups, true ) . "\n" );
- wfRunHooks( 'UserRights', array( &$user, $add, $remove ) );
+ Hooks::run( 'UserRights', array( &$user, $add, $remove ) );
if ( $newGroups != $oldGroups ) {
$this->addLogEntry( $user, $oldGroups, $newGroups, $reason );
@@ -415,6 +420,8 @@ class UserrightsPage extends SpecialPage {
* Output a form to allow searching for a user
*/
function switchForm() {
+ $this->getOutput()->addModules( 'mediawiki.userSuggest' );
+
$this->getOutput()->addHTML(
Html::openElement(
'form',
@@ -433,7 +440,10 @@ class UserrightsPage extends SpecialPage {
'username',
30,
str_replace( '_', ' ', $this->mTarget ),
- array( 'autofocus' => true )
+ array(
+ 'autofocus' => '',
+ 'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
+ )
) . ' ' .
Xml::submitButton( $this->msg( 'editusergroup' )->text() ) .
Html::closeElement( 'fieldset' ) .
@@ -488,25 +498,32 @@ class UserrightsPage extends SpecialPage {
}
$language = $this->getLanguage();
- $displayedList = $this->msg( 'userrights-groupsmember-type',
- $language->listToText( $list ),
- $language->listToText( $membersList )
- )->plain();
- $displayedAutolist = $this->msg( 'userrights-groupsmember-type',
- $language->listToText( $autoList ),
- $language->listToText( $autoMembersList )
- )->plain();
+ $displayedList = $this->msg( 'userrights-groupsmember-type' )
+ ->rawParams(
+ $language->listToText( $list ),
+ $language->listToText( $membersList )
+ )->escaped();
+ $displayedAutolist = $this->msg( 'userrights-groupsmember-type' )
+ ->rawParams(
+ $language->listToText( $autoList ),
+ $language->listToText( $autoMembersList )
+ )->escaped();
$grouplist = '';
$count = count( $list );
if ( $count > 0 ) {
- $grouplist = $this->msg( 'userrights-groupsmember', $count, $user->getName() )->parse();
+ $grouplist = $this->msg( 'userrights-groupsmember' )
+ ->numParams( $count )
+ ->params( $user->getName() )
+ ->parse();
$grouplist = '<p>' . $grouplist . ' ' . $displayedList . "</p>\n";
}
$count = count( $autoList );
if ( $count > 0 ) {
- $autogrouplistintro = $this->msg( 'userrights-groupsmember-auto', $count, $user->getName() )
+ $autogrouplistintro = $this->msg( 'userrights-groupsmember-auto' )
+ ->numParams( $count )
+ ->params( $user->getName() )
->parse();
$grouplist .= '<p>' . $autogrouplistintro . ' ' . $displayedAutolist . "</p>\n";
}
@@ -664,9 +681,9 @@ class UserrightsPage extends SpecialPage {
$member = User::getGroupMember( $group, $user->getName() );
if ( $checkbox['irreversible'] ) {
- $text = $this->msg( 'userrights-irreversible-marker', $member )->escaped();
+ $text = $this->msg( 'userrights-irreversible-marker', $member )->text();
} else {
- $text = htmlspecialchars( $member );
+ $text = $member;
}
$checkboxHtml = Xml::checkLabel( $text, "wpGroup-" . $group,
"wpGroup-" . $group, $checkbox['set'], $attr );
diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php
index cb3fc118..c1a95939 100644
--- a/includes/specials/SpecialVersion.php
+++ b/includes/specials/SpecialVersion.php
@@ -109,12 +109,7 @@ class SpecialVersion extends SpecialPage {
$file = $this->getExtLicenseFileName( dirname( $extNode['path'] ) );
if ( $file ) {
$wikiText = file_get_contents( $file );
- if ( !isset( $extNode['license-name'] ) ) {
- // If the developer did not explicitly set license-name they probably
- // are unaware that we're now sucking this file in and thus it's probably
- // not wikitext friendly.
- $wikiText = "<pre>$wikiText</pre>";
- }
+ $wikiText = "<pre>$wikiText</pre>";
}
}
@@ -132,6 +127,7 @@ class SpecialVersion extends SpecialPage {
$out->addHtml(
$this->getSkinCredits() .
$this->getExtensionCredits() .
+ $this->getExternalLibraries() .
$this->getParserTags() .
$this->getParserFunctionHooks()
);
@@ -191,8 +187,8 @@ class SpecialVersion extends SpecialPage {
'Alexandre Emsenhuber', 'Siebrand Mazeland', 'Chad Horohoe',
'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed',
'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso',
- 'Timo Tijhof', 'Daniel Kinzler', 'Jeroen De Dauw', $othersLink,
- $translatorsLink
+ 'Timo Tijhof', 'Daniel Kinzler', 'Jeroen De Dauw', 'Brad Jorsch',
+ $othersLink, $translatorsLink
);
return wfMessage( 'version-poweredby-credits', MWTimestamp::getLocalInstance()->format( 'Y' ),
@@ -220,7 +216,7 @@ class SpecialVersion extends SpecialPage {
$software[$dbr->getSoftwareLink()] = $dbr->getServerInfo();
// Allow a hook to add/remove items.
- wfRunHooks( 'SoftwareInfo', array( &$software ) );
+ Hooks::run( 'SoftwareInfo', array( &$software ) );
$out = Xml::element(
'h2',
@@ -251,7 +247,6 @@ class SpecialVersion extends SpecialPage {
*/
public static function getVersion( $flags = '' ) {
global $wgVersion, $IP;
- wfProfileIn( __METHOD__ );
$gitInfo = self::getGitHeadSha1( $IP );
$svnInfo = self::getSvnInfo( $IP );
@@ -275,8 +270,6 @@ class SpecialVersion extends SpecialPage {
)->text();
}
- wfProfileOut( __METHOD__ );
-
return $version;
}
@@ -290,7 +283,6 @@ class SpecialVersion extends SpecialPage {
*/
public static function getVersionLinked() {
global $wgVersion;
- wfProfileIn( __METHOD__ );
$gitVersion = self::getVersionLinkedGit();
if ( $gitVersion ) {
@@ -304,8 +296,6 @@ class SpecialVersion extends SpecialPage {
}
}
- wfProfileOut( __METHOD__ );
-
return $v;
}
@@ -341,7 +331,7 @@ class SpecialVersion extends SpecialPage {
private static function getwgVersionLinked() {
global $wgVersion;
$versionUrl = "";
- if ( wfRunHooks( 'SpecialVersionVersionUrl', array( $wgVersion, &$versionUrl ) ) ) {
+ if ( Hooks::run( 'SpecialVersionVersionUrl', array( $wgVersion, &$versionUrl ) ) ) {
$versionParts = array();
preg_match( "/^(\d+\.\d+)/", $wgVersion, $versionParts );
$versionUrl = "https://www.mediawiki.org/wiki/MediaWiki_{$versionParts[1]}";
@@ -402,7 +392,7 @@ class SpecialVersion extends SpecialPage {
'other' => wfMessage( 'version-other' )->text(),
);
- wfRunHooks( 'ExtensionTypes', array( &self::$extensionTypes ) );
+ Hooks::run( 'ExtensionTypes', array( &self::$extensionTypes ) );
}
return self::$extensionTypes;
@@ -504,6 +494,57 @@ class SpecialVersion extends SpecialPage {
}
/**
+ * Generate an HTML table for external libraries that are installed
+ *
+ * @return string
+ */
+ protected function getExternalLibraries() {
+ global $IP;
+ $path = "$IP/composer.lock";
+ if ( !file_exists( $path ) ) {
+ // Maybe they're using mediawiki/vendor?
+ $path = "$IP/vendor/composer.lock";
+ if ( !file_exists( $path ) ) {
+ return '';
+ }
+ }
+
+ $lock = new ComposerLock( $path );
+ $out = Html::element(
+ 'h2',
+ array( 'id' => 'mw-version-libraries' ),
+ $this->msg( 'version-libraries' )->text()
+ );
+ $out .= Html::openElement(
+ 'table',
+ array( 'class' => 'wikitable plainlinks', 'id' => 'sv-libraries' )
+ );
+ $out .= Html::openElement( 'tr' )
+ . Html::element( 'th', array(), $this->msg( 'version-libraries-library' )->text() )
+ . Html::element( 'th', array(), $this->msg( 'version-libraries-version' )->text() )
+ . Html::closeElement( 'tr' );
+
+ foreach ( $lock->getInstalledDependencies() as $name => $info ) {
+ if ( strpos( $info['type'], 'mediawiki-' ) === 0 ) {
+ // Skip any extensions or skins since they'll be listed
+ // in their proper section
+ continue;
+ }
+ $out .= Html::openElement( 'tr' )
+ . Html::rawElement(
+ 'td',
+ array(),
+ Linker::makeExternalLink( "https://packagist.org/packages/$name", $name )
+ )
+ . Html::element( 'td', array(), $info['version'] )
+ . Html::closeElement( 'tr' );
+ }
+ $out .= Html::closeElement( 'table' );
+
+ return $out;
+ }
+
+ /**
* Obtains a list of installed parser tags and the associated H2 header
*
* @return string HTML output
@@ -516,7 +557,7 @@ class SpecialVersion extends SpecialPage {
if ( count( $tags ) ) {
$out = Html::rawElement(
'h2',
- array( 'class' => 'mw-headline' ),
+ array( 'class' => 'mw-headline plainlinks' ),
Linker::makeExternalLink(
'//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Tag_extensions',
$this->msg( 'version-parser-extensiontags' )->parse(),
@@ -525,8 +566,17 @@ class SpecialVersion extends SpecialPage {
);
array_walk( $tags, function ( &$value ) {
- $value = '&lt;' . htmlspecialchars( $value ) . '&gt;';
+ // Bidirectional isolation improves readability in RTL wikis
+ $value = Html::element(
+ 'bdi',
+ // Prevent < and > from slipping to another line
+ array(
+ 'style' => 'white-space: nowrap;',
+ ),
+ "<$value>"
+ );
} );
+
$out .= $this->listToText( $tags );
} else {
$out = '';
@@ -545,11 +595,15 @@ class SpecialVersion extends SpecialPage {
$fhooks = $wgParser->getFunctionHooks();
if ( count( $fhooks ) ) {
- $out = Html::rawElement( 'h2', array( 'class' => 'mw-headline' ), Linker::makeExternalLink(
- '//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Parser_functions',
- $this->msg( 'version-parser-function-hooks' )->parse(),
- false /* msg()->parse() already escapes */
- ) );
+ $out = Html::rawElement(
+ 'h2',
+ array( 'class' => 'mw-headline plainlinks' ),
+ Linker::makeExternalLink(
+ '//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Parser_functions',
+ $this->msg( 'version-parser-function-hooks' )->parse(),
+ false /* msg()->parse() already escapes */
+ )
+ );
$out .= $this->listToText( $fhooks );
} else {
@@ -680,7 +734,7 @@ class SpecialVersion extends SpecialPage {
list( $vcsVersion, $vcsLink, $vcsDate ) = $cache->get( $memcKey );
if ( !$vcsVersion ) {
- wfDebug( "Getting VCS info for extension $extensionName" );
+ wfDebug( "Getting VCS info for extension {$extension['name']}" );
$gitInfo = new GitInfo( $extensionPath );
$vcsVersion = $gitInfo->getHeadSHA1();
if ( $vcsVersion !== false ) {
@@ -696,7 +750,7 @@ class SpecialVersion extends SpecialPage {
}
$cache->set( $memcKey, array( $vcsVersion, $vcsLink, $vcsDate ), 60 * 60 * 24 );
} else {
- wfDebug( "Pulled VCS info for extension $extensionName from cache" );
+ wfDebug( "Pulled VCS info for extension {$extension['name']} from cache" );
}
}
@@ -739,18 +793,23 @@ class SpecialVersion extends SpecialPage {
// ... and license information; if a license file exists we
// will link to it
$licenseLink = '';
- if ( isset( $extension['license-name'] ) ) {
- $licenseLink = Linker::link(
- $this->getPageTitle( 'License/' . $extensionName ),
- $out->parseInline( $extension['license-name'] ),
- array( 'class' => 'mw-version-ext-license' )
- );
- } elseif ( $this->getExtLicenseFileName( $extensionPath ) ) {
- $licenseLink = Linker::link(
- $this->getPageTitle( 'License/' . $extensionName ),
- $this->msg( 'version-ext-license' ),
- array( 'class' => 'mw-version-ext-license' )
- );
+ if ( isset( $extension['name'] ) ) {
+ $licenseName = null;
+ if ( isset( $extension['license-name'] ) ) {
+ $licenseName = $out->parseInline( $extension['license-name'] );
+ } elseif ( $this->getExtLicenseFileName( $extensionPath ) ) {
+ $licenseName = $this->msg( 'version-ext-license' );
+ }
+ if ( $licenseName !== null ) {
+ $licenseLink = Linker::link(
+ $this->getPageTitle( 'License/' . $extension['name'] ),
+ $licenseName,
+ array(
+ 'class' => 'mw-version-ext-license',
+ 'dir' => 'auto',
+ )
+ );
+ }
}
// ... and generate the description; which can be a parameterized l10n message
@@ -778,12 +837,12 @@ class SpecialVersion extends SpecialPage {
// ... now get the authors for this extension
$authors = isset( $extension['author'] ) ? $extension['author'] : array();
- $authors = $this->listAuthors( $authors, $extensionName, $extensionPath );
+ $authors = $this->listAuthors( $authors, $extension['name'], $extensionPath );
// Finally! Create the table
$html = Html::openElement( 'tr', array(
'class' => 'mw-version-ext',
- 'id' => "mw-version-ext-{$extensionName}"
+ 'id' => "mw-version-ext-{$extension['name']}"
)
);
@@ -793,7 +852,7 @@ class SpecialVersion extends SpecialPage {
$html .= Html::rawElement( 'td', array( 'class' => 'mw-version-ext-description' ), $description );
$html .= Html::rawElement( 'td', array( 'class' => 'mw-version-ext-authors' ), $authors );
- $html .= Html::closeElement( 'td' );
+ $html .= Html::closeElement( 'tr' );
return $html;
}
@@ -916,10 +975,10 @@ class SpecialVersion extends SpecialPage {
if ( $this->getExtAuthorsFileName( $extDir ) ) {
$text = Linker::link(
$this->getPageTitle( "Credits/$extName" ),
- $this->msg( 'version-poweredby-others' )->text()
+ $this->msg( 'version-poweredby-others' )->escaped()
);
} else {
- $text = $this->msg( 'version-poweredby-others' )->text();
+ $text = $this->msg( 'version-poweredby-others' )->escaped();
}
$list[] = $text;
} elseif ( substr( $item, -5 ) == ' ...]' ) {
@@ -935,7 +994,7 @@ class SpecialVersion extends SpecialPage {
if ( !$hasOthers && $this->getExtAuthorsFileName( $extDir ) ) {
$list[] = $text = Linker::link(
$this->getPageTitle( "Credits/$extName" ),
- $this->msg( 'version-poweredby-others' )->text()
+ $this->msg( 'version-poweredby-others' )->escaped()
);
}
@@ -1024,7 +1083,7 @@ class SpecialVersion extends SpecialPage {
* Convert an array or object to a string for display.
*
* @param mixed $list Will convert an array to string if given and return
- * the paramater unaltered otherwise
+ * the parameter unaltered otherwise
*
* @return mixed
*/
@@ -1188,7 +1247,7 @@ class SpecialVersion extends SpecialPage {
$language = $this->getLanguage();
$thAttribures = array(
'dir' => $language->getDir(),
- 'lang' => $language->getCode()
+ 'lang' => $language->getHtmlCode()
);
$out = Html::element(
'h2',
diff --git a/includes/specials/SpecialWantedcategories.php b/includes/specials/SpecialWantedcategories.php
index b8c0bb28..7ddafae4 100644
--- a/includes/specials/SpecialWantedcategories.php
+++ b/includes/specials/SpecialWantedcategories.php
@@ -109,6 +109,7 @@ class WantedCategoriesPage extends WantedQueryPage {
$currentValue = isset( $this->currentCategoryCounts[$result->title] )
? $this->currentCategoryCounts[$result->title]
: 0;
+ $cachedValue = intval( $result->value ); // T76910
// If the category has been created or emptied since the list was refreshed, strike it
if ( $nt->isKnown() || $currentValue === 0 ) {
@@ -116,11 +117,11 @@ class WantedCategoriesPage extends WantedQueryPage {
}
// Show the current number of category entries if it changed
- if ( $currentValue !== $result->value ) {
+ if ( $currentValue !== $cachedValue ) {
$nlinks = $this->msg( 'nmemberschanged' )
- ->numParams( $result->value, $currentValue )->escaped();
+ ->numParams( $cachedValue, $currentValue )->escaped();
} else {
- $nlinks = $this->msg( 'nmembers' )->numParams( $result->value )->escaped();
+ $nlinks = $this->msg( 'nmembers' )->numParams( $cachedValue )->escaped();
}
}
diff --git a/includes/specials/SpecialWantedfiles.php b/includes/specials/SpecialWantedfiles.php
index 937a503c..8a1a6c6c 100644
--- a/includes/specials/SpecialWantedfiles.php
+++ b/includes/specials/SpecialWantedfiles.php
@@ -99,10 +99,10 @@ class WantedFilesPage extends WantedQueryPage {
* Use wfFindFile so we still think file namespace pages without
* files are missing, but valid file redirects and foreign files are ok.
*
- * @return boolean
+ * @return bool
*/
protected function existenceCheck( Title $title ) {
- return (bool) wfFindFile( $title );
+ return (bool)wfFindFile( $title );
}
function getQueryInfo() {
diff --git a/includes/specials/SpecialWantedpages.php b/includes/specials/SpecialWantedpages.php
index 38f1808f..dd4eb0a8 100644
--- a/includes/specials/SpecialWantedpages.php
+++ b/includes/specials/SpecialWantedpages.php
@@ -72,7 +72,10 @@ class WantedPagesPage extends WantedQueryPage {
"pg2.page_namespace != '" . NS_MEDIAWIKI . "'"
),
'options' => array(
- 'HAVING' => "COUNT(*) > $count",
+ 'HAVING' => array(
+ "COUNT(*) > $count",
+ "COUNT(*) > SUM(pg2.page_is_redirect)"
+ ),
'GROUP BY' => array( 'pl_namespace', 'pl_title' )
),
'join_conds' => array(
@@ -86,7 +89,7 @@ class WantedPagesPage extends WantedQueryPage {
)
);
// Replacement for the WantedPages::getSQL hook
- wfRunHooks( 'WantedPages::getQueryInfo', array( &$this, &$query ) );
+ Hooks::run( 'WantedPages::getQueryInfo', array( &$this, &$query ) );
return $query;
}
diff --git a/includes/specials/SpecialWatchlist.php b/includes/specials/SpecialWatchlist.php
index 8f2f86b9..df9d3639 100644
--- a/includes/specials/SpecialWatchlist.php
+++ b/includes/specials/SpecialWatchlist.php
@@ -79,22 +79,16 @@ class SpecialWatchlist extends ChangesListSpecialPage {
}
/**
- * Return an array of subpages beginning with $search that this special page will accept.
+ * Return an array of subpages that this special page will accept.
*
- * @param string $search Prefix to search for
- * @param int $limit Maximum number of results to return
- * @return string[] Matching subpages
+ * @see also SpecialEditWatchlist::getSubpagesForPrefixSearch
+ * @return string[] subpages
*/
- public function prefixSearchSubpages( $search, $limit = 10 ) {
- // See also SpecialEditWatchlist::prefixSearchSubpages
- return self::prefixSearchArray(
- $search,
- $limit,
- array(
- 'clear',
- 'edit',
- 'raw',
- )
+ public function getSubpagesForPrefixSearch() {
+ return array(
+ 'clear',
+ 'edit',
+ 'raw',
);
}
@@ -129,7 +123,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
protected function getCustomFilters() {
if ( $this->customFilters === null ) {
$this->customFilters = parent::getCustomFilters();
- wfRunHooks( 'SpecialWatchlistFilters', array( $this, &$this->customFilters ), '1.23' );
+ Hooks::run( 'SpecialWatchlistFilters', array( $this, &$this->customFilters ), '1.23' );
}
return $this->customFilters;
@@ -207,7 +201,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
} else {
# Top log Ids for a page are not stored
$nonRevisionTypes = array( RC_LOG );
- wfRunHooks( 'SpecialWatchlistGetNonRevisionTypes', array( &$nonRevisionTypes ) );
+ Hooks::run( 'SpecialWatchlistGetNonRevisionTypes', array( &$nonRevisionTypes ) );
if ( $nonRevisionTypes ) {
$conds[] = $dbr->makeList(
array(
@@ -288,9 +282,11 @@ class SpecialWatchlist extends ChangesListSpecialPage {
);
}
- protected function runMainQueryHook( &$tables, &$fields, &$conds, &$query_options, &$join_conds, $opts ) {
+ protected function runMainQueryHook( &$tables, &$fields, &$conds, &$query_options,
+ &$join_conds, $opts
+ ) {
return parent::runMainQueryHook( $tables, $fields, $conds, $query_options, $join_conds, $opts )
- && wfRunHooks(
+ && Hooks::run(
'SpecialWatchlistQuery',
array( &$conds, &$tables, &$join_conds, &$fields, $opts ),
'1.23'
@@ -298,9 +294,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
}
/**
- * Return a DatabaseBase object for reading
+ * Return a IDatabase object for reading
*
- * @return DatabaseBase
+ * @return IDatabase
*/
protected function getDB() {
return wfGetDB( DB_SLAVE, 'watchlist' );
@@ -367,7 +363,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
$updated = false;
}
- if ( $this->getConfig()->get( 'RCShowWatchingUsers' ) && $user->getOption( 'shownumberswatching' ) ) {
+ if ( $this->getConfig()->get( 'RCShowWatchingUsers' )
+ && $user->getOption( 'shownumberswatching' )
+ ) {
$rc->numberofWatchingusers = $dbr->selectField( 'watchlist',
'COUNT(*)',
array(
@@ -430,7 +428,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
$filters[$key] = $params['msg'];
}
// Disable some if needed
- if ( !$user->useNPPatrol() ) {
+ if ( !$user->useRCPatrol() ) {
unset( $filters['hidepatrolled'] );
}
@@ -503,7 +501,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
$form .= $this->msg( 'nowatchlist' )->parse() . "\n";
} else {
$form .= $this->msg( 'watchlist-details' )->numParams( $numItems )->parse() . "\n";
- if ( $this->getConfig()->get( 'EnotifWatchlist' ) && $user->getOption( 'enotifwatchlistpages' ) ) {
+ if ( $this->getConfig()->get( 'EnotifWatchlist' )
+ && $user->getOption( 'enotifwatchlistpages' )
+ ) {
$form .= $this->msg( 'wlheader-enotif' )->parse() . "\n";
}
if ( $showUpdatedMarker ) {
@@ -562,12 +562,10 @@ class SpecialWatchlist extends ChangesListSpecialPage {
protected function daysLink( $d, $options = array() ) {
$options['days'] = $d;
- $message = $d ? $this->getLanguage()->formatNum( $d )
- : $this->msg( 'watchlistall2' )->escaped();
return Linker::linkKnown(
$this->getPageTitle(),
- $message,
+ $this->getLanguage()->formatNum( $d ),
array(),
$options
);
@@ -581,8 +579,11 @@ class SpecialWatchlist extends ChangesListSpecialPage {
* @return string
*/
protected function cutoffLinks( $days, $options = array() ) {
+ global $wgRCMaxAge;
+ $watchlistMaxDays = ceil( $wgRCMaxAge / ( 3600 * 24 ) );
+
$hours = array( 1, 2, 6, 12 );
- $days = array( 1, 3, 7 );
+ $days = array( 1, 3, 7, $watchlistMaxDays );
$i = 0;
foreach ( $hours as $h ) {
$hours[$i++] = $this->hoursLink( $h, $options );
@@ -594,14 +595,13 @@ class SpecialWatchlist extends ChangesListSpecialPage {
return $this->msg( 'wlshowlast' )->rawParams(
$this->getLanguage()->pipeList( $hours ),
- $this->getLanguage()->pipeList( $days ),
- $this->daysLink( 0, $options ) )->parse();
+ $this->getLanguage()->pipeList( $days ) )->parse();
}
/**
* Count the number of items on a user's watchlist
*
- * @param DatabaseBase $dbr A database connection
+ * @param IDatabase $dbr A database connection
* @return int
*/
protected function countItems( $dbr ) {
diff --git a/includes/specials/SpecialWhatlinkshere.php b/includes/specials/SpecialWhatlinkshere.php
index 7dc6da1f..0b3175a6 100644
--- a/includes/specials/SpecialWhatlinkshere.php
+++ b/includes/specials/SpecialWhatlinkshere.php
@@ -58,6 +58,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
$opts->add( 'hidetrans', false );
$opts->add( 'hidelinks', false );
$opts->add( 'hideimages', false );
+ $opts->add( 'invert', false );
$opts->fetchValuesFromRequest( $this->getRequest() );
$opts->validateIntBounds( 'limit', 0, 5000 );
@@ -72,7 +73,9 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
$this->target = Title::newFromURL( $opts->getValue( 'target' ) );
if ( !$this->target ) {
- $out->addHTML( $this->whatlinkshereForm() );
+ if ( !$this->including() ) {
+ $out->addHTML( $this->whatlinkshereForm() );
+ }
return;
}
@@ -125,15 +128,17 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
$useLinkNamespaceDBFields = $this->getConfig()->get( 'UseLinkNamespaceDBFields' );
$namespace = $this->opts->getValue( 'namespace' );
+ $invert = $this->opts->getValue( 'invert' );
+ $nsComparison = ( $invert ? '!= ' : '= ' ) . $dbr->addQuotes( $namespace );
if ( is_int( $namespace ) ) {
if ( $useLinkNamespaceDBFields ) {
- $conds['pagelinks']['pl_from_namespace'] = $namespace;
- $conds['templatelinks']['tl_from_namespace'] = $namespace;
- $conds['imagelinks']['il_from_namespace'] = $namespace;
+ $conds['pagelinks'][] = "pl_from_namespace $nsComparison";
+ $conds['templatelinks'][] = "tl_from_namespace $nsComparison";
+ $conds['imagelinks'][] = "il_from_namespace $nsComparison";
} else {
- $conds['pagelinks']['page_namespace'] = $namespace;
- $conds['templatelinks']['page_namespace'] = $namespace;
- $conds['imagelinks']['page_namespace'] = $namespace;
+ $conds['pagelinks'][] = "page_namespace $nsComparison";
+ $conds['templatelinks'][] = "page_namespace $nsComparison";
+ $conds['imagelinks'][] = "page_namespace $nsComparison";
}
}
@@ -149,7 +154,9 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
$conds['pagelinks'][] = 'rd_from is NOT NULL';
}
- $queryFunc = function ( $dbr, $table, $fromCol ) use ( $conds, $target, $limit, $useLinkNamespaceDBFields ) {
+ $queryFunc = function ( $dbr, $table, $fromCol ) use (
+ $conds, $target, $limit, $useLinkNamespaceDBFields
+ ) {
// Read an extra row as an at-end check
$queryLimit = $limit + 1;
$on = array(
@@ -174,7 +181,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
);
return $dbr->select(
array( 'page', 'temp_backlink_range' => "($subQuery)" ),
- array( 'page_id', 'page_namespace', 'page_title', 'rd_from' ),
+ array( 'page_id', 'page_namespace', 'page_title', 'rd_from', 'page_is_redirect' ),
array(),
__CLASS__ . '::showIndirectLinks',
array( 'ORDER BY' => 'page_id', 'LIMIT' => $queryLimit ),
@@ -275,7 +282,11 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
if ( $row->rd_from && $level < 2 ) {
$out->addHTML( $this->listItem( $row, $nt, $target, true ) );
- $this->showIndirectLinks( $level + 1, $nt, $this->getConfig()->get( 'MaxRedirectLinksRetrieved' ) );
+ $this->showIndirectLinks(
+ $level + 1,
+ $nt,
+ $this->getConfig()->get( 'MaxRedirectLinksRetrieved' )
+ );
$out->addHTML( Xml::closeElement( 'li' ) );
} else {
$out->addHTML( $this->listItem( $row, $nt, $target ) );
@@ -318,7 +329,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
$link = Linker::linkKnown(
$nt,
null,
- array(),
+ $row->page_is_redirect ? array( 'class' => 'mw-redirect' ) : array(),
$query
);
@@ -335,7 +346,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
$props[] = $msgcache['isimage'];
}
- wfRunHooks( 'WhatLinksHereProps', array( $row, $nt, $target, &$props ) );
+ Hooks::run( 'WhatLinksHereProps', array( $row, $nt, $target, &$props ) );
if ( count( $props ) ) {
$propsText = $this->msg( 'parentheses' )
@@ -419,6 +430,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
$target = $this->target ? $this->target->getPrefixedText() : '';
$namespace = $this->opts->consumeValue( 'namespace' );
+ $nsinvert = $this->opts->consumeValue( 'invert' );
# Build up the form
$f = Xml::openElement( 'form', array( 'action' => wfScript() ) );
@@ -431,9 +443,9 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
$f .= Xml::fieldset( $this->msg( 'whatlinkshere' )->text() );
- # Target input
+ # Target input (.mw-searchInput enables suggestions)
$f .= Xml::inputLabel( $this->msg( 'whatlinkshere-page' )->text(), 'target',
- 'mw-whatlinkshere-target', 40, $target );
+ 'mw-whatlinkshere-target', 40, $target, array( 'class' => 'mw-searchInput' ) );
$f .= ' ';
@@ -450,6 +462,15 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
)
);
+ $f .= '&#160;' .
+ Xml::checkLabel(
+ $this->msg( 'invert' )->text(),
+ 'invert',
+ 'nsinvert',
+ $nsinvert,
+ array( 'title' => $this->msg( 'tooltip-whatlinkshere-invert' )->text() )
+ );
+
$f .= ' ';
# Submit
@@ -496,6 +517,24 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
);
}
+ /**
+ * Return an array of subpages beginning with $search that this special page will accept.
+ *
+ * @param string $search Prefix to search for
+ * @param int $limit Maximum number of results to return (usually 10)
+ * @param int $offset Number of results to skip (usually 0)
+ * @return string[] Matching subpages
+ */
+ public function prefixSearchSubpages( $search, $limit, $offset ) {
+ if ( $search === '' ) {
+ return array();
+ }
+ // Autocomplete subpage the same as a normal search
+ $prefixSearcher = new StringPrefixSearch;
+ $result = $prefixSearcher->search( $search, $limit, array(), $offset );
+ return $result;
+ }
+
protected function getGroupName() {
return 'pagetools';
}
diff --git a/includes/templates/NoLocalSettings.mustache b/includes/templates/NoLocalSettings.mustache
new file mode 100644
index 00000000..54579491
--- /dev/null
+++ b/includes/templates/NoLocalSettings.mustache
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+ <head>
+ <meta charset="UTF-8" />
+ <title>MediaWiki {{wgVersion}}</title>
+ <style media="screen">
+ html, body {
+ color: #000;
+ background-color: #fff;
+ font-family: sans-serif;
+ text-align: center;
+ }
+
+ h1 {
+ font-size: 150%;
+ }
+ </style>
+ </head>
+ <body>
+ <img src="{{path}}resources/assets/mediawiki.png" alt="The MediaWiki logo" />
+
+ <h1>MediaWiki {{wgVersion}}</h1>
+ <div class="error">
+ {{#localSettingsExists}}
+ <p>LocalSettings.php not readable.</p>
+ <p>Please correct file permissions and try again.</p>
+ {{/localSettingsExists}}
+ {{^localSettingsExists}}
+ <p>LocalSettings.php not found.</p>
+ {{#installerStarted}}
+ <p>Please <a href="{{path}}mw-config/index.{{ext}}">complete the installation</a> and download LocalSettings.php.</p>
+ {{/installerStarted}}
+ {{^installerStarted}}
+ <p>Please <a href="{{path}}mw-config/index.{{ext}}">set up the wiki</a> first.</p>
+ {{/installerStarted}}
+ {{/localSettingsExists}}
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/includes/templates/NoLocalSettings.php b/includes/templates/NoLocalSettings.php
deleted file mode 100644
index 5b88dfd1..00000000
--- a/includes/templates/NoLocalSettings.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-// @codingStandardsIgnoreFile
-/**
- * Template used when there is no LocalSettings.php file.
- *
- * 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 Templates
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( "NoLocalSettings.php is not a valid MediaWiki entry point\n" );
-}
-
-if ( !isset( $wgVersion ) ) {
- $wgVersion = 'VERSION';
-}
-
-# bug 30219 : can not use pathinfo() on URLs since slashes do not match
-$matches = array();
-$ext = 'php';
-$path = '/';
-foreach ( array_filter( explode( '/', $_SERVER['PHP_SELF'] ) ) as $part ) {
- if ( !preg_match( '/\.(php5?)$/', $part, $matches ) ) {
- $path .= "$part/";
- } else {
- $ext = $matches[1] == 'php5' ? 'php5' : 'php';
- }
-}
-
-# Check to see if the installer is running
-if ( !function_exists( 'session_name' ) ) {
- $installerStarted = false;
-} else {
- session_name( 'mw_installer_session' );
- $oldReporting = error_reporting( E_ALL & ~E_NOTICE );
- $success = session_start();
- error_reporting( $oldReporting );
- $installerStarted = ( $success && isset( $_SESSION['installData'] ) );
-}
-?>
-<!DOCTYPE html>
-<html lang="en" dir="ltr">
- <head>
- <meta charset="UTF-8" />
- <title>MediaWiki <?php echo htmlspecialchars( $wgVersion ) ?></title>
- <style media='screen'>
- html, body {
- color: #000;
- background-color: #fff;
- font-family: sans-serif;
- text-align: center;
- }
-
- h1 {
- font-size: 150%;
- }
- </style>
- </head>
- <body>
- <img src="<?php echo htmlspecialchars( $path ) ?>resources/assets/mediawiki.png" alt='The MediaWiki logo' />
-
- <h1>MediaWiki <?php echo htmlspecialchars( $wgVersion ) ?></h1>
- <div class='error'>
- <?php if ( !file_exists( MW_CONFIG_FILE ) ) { ?>
- <p>LocalSettings.php not found.</p>
- <p>
- <?php
- if ( $installerStarted ) {
- echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\">complete the installation</a> and download LocalSettings.php.";
- } else {
- echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\">set up the wiki</a> first.";
- }
- ?>
- </p>
- <?php } else { ?>
- <p>LocalSettings.php not readable.</p>
- <p>Please correct file permissions and try again.</p>
- <?php } ?>
-
- </div>
- </body>
-</html>
diff --git a/includes/templates/Usercreate.php b/includes/templates/Usercreate.php
index 01da0bd7..f09b6bba 100644
--- a/includes/templates/Usercreate.php
+++ b/includes/templates/Usercreate.php
@@ -53,7 +53,7 @@ class UsercreateTemplate extends BaseTemplate {
<div id="userloginForm">
<form name="userlogin2" id="userlogin2" class="mw-ui-vform" method="post" action="<?php $this->text( 'action' ); ?>">
<section class="mw-form-header">
- <?php $this->html( 'header' ); /* extensions such as ConfirmEdit add form HTML here */ ?>
+ <?php $this->html( 'header' ); ?>
</section>
<!-- This element is used by the mediawiki.special.userlogin.signup.js module. -->
<div
@@ -217,8 +217,10 @@ class UsercreateTemplate extends BaseTemplate {
<?php if ( !empty( $inputItem['value'] ) ) {
echo 'checked="checked"';
} ?>
- ><label for="<?php echo htmlspecialchars( $inputItem['name'] ); ?>"></label>
- </div><?php $this->msgHtml( $inputItem['msg'] ); ?>
+ ><label for="<?php echo htmlspecialchars( $inputItem['name'] ); ?>">
+ <?php $this->msg( $inputItem['msg'] ); ?>
+ </label>
+ </div>
<?php
} else {
// Not a checkbox.
@@ -248,20 +250,25 @@ class UsercreateTemplate extends BaseTemplate {
}
}
- // JS attempts to move the image CAPTCHA below this part of the form,
- // so skip one index.
+ // A separate placeholder for any inserting any extrafields, e.g used by ConfirmEdit extension
+ if ( $this->haveData( 'extrafields' ) ) {
+ echo $this->data['extrafields'];
+ }
+ // skip one index.
$tabIndex++;
?>
<div class="mw-ui-vform-field mw-submit">
<?php
- echo Html::input(
- 'wpCreateaccount',
+ echo Html::submitButton(
$this->getMsg( $this->data['loggedin'] ? 'createacct-another-submit' : 'createacct-submit' ),
- 'submit',
array(
- 'class' => "mw-ui-button mw-ui-big mw-ui-block mw-ui-constructive",
'id' => 'wpCreateaccount',
+ 'name' => 'wpCreateaccount',
'tabindex' => $tabIndex++
+ ),
+ array(
+ 'mw-ui-block',
+ 'mw-ui-constructive',
)
);
?>
diff --git a/includes/templates/Userlogin.php b/includes/templates/Userlogin.php
index 8bba4265..345bb71b 100644
--- a/includes/templates/Userlogin.php
+++ b/includes/templates/Userlogin.php
@@ -70,12 +70,10 @@ class UserloginTemplate extends BaseTemplate {
?>
</label>
<?php
- $extraAttrs = array();
echo Html::input( 'wpName', $this->data['name'], 'text', array(
'class' => 'loginText mw-ui-input',
'id' => 'wpName1',
'tabindex' => '1',
- 'size' => '20',
// 'required' is blacklisted for now in Html.php due to browser issues.
// Keeping here in case that changes.
'required' => true,
@@ -90,14 +88,6 @@ class UserloginTemplate extends BaseTemplate {
<label for='wpPassword1'>
<?php
$this->msg( 'userlogin-yourpassword' );
-
- if ( $this->data['useemail'] && $this->data['canreset'] && $this->data['resetlink'] === true ) {
- echo ' ' . Linker::link(
- SpecialPage::getTitleFor( 'PasswordReset' ),
- $this->getMsg( 'userlogin-resetpassword-link' )->parse(),
- array( 'class' => 'mw-ui-flush-right' )
- );
- }
?>
</label>
<?php
@@ -105,7 +95,6 @@ class UserloginTemplate extends BaseTemplate {
'class' => 'loginPassword mw-ui-input',
'id' => 'wpPassword1',
'tabindex' => '2',
- 'size' => '20',
// Set focus to this field if username is filled in.
'autofocus' => (bool)$this->data['name'],
'placeholder' => $this->getMsg( 'userlogin-yourpassword-ph' )->text()
@@ -148,15 +137,19 @@ class UserloginTemplate extends BaseTemplate {
<div class="mw-ui-vform-field">
<?php
- echo Html::input( 'wpLoginAttempt', $this->getMsg( 'pt-login-button' )->text(), 'submit', array(
+ $attrs = array(
'id' => 'wpLoginAttempt',
+ 'name' => 'wpLoginAttempt',
'tabindex' => '6',
- 'class' => 'mw-ui-button mw-ui-big mw-ui-block mw-ui-constructive'
- ) );
+ );
+ $modifiers = array(
+ 'mw-ui-constructive',
+ );
+ echo Html::submitButton( $this->getMsg( 'pt-login-button' )->text(), $attrs, $modifiers );
?>
</div>
- <div class="mw-ui-vform-field" id="mw-userlogin-help">
+ <div class="mw-ui-vform-field mw-form-related-link-container" id="mw-userlogin-help">
<?php
echo Html::element(
'a',
@@ -169,21 +162,51 @@ class UserloginTemplate extends BaseTemplate {
);
?>
</div>
+ <?php
- <?php if ( $this->haveData( 'createOrLoginHref' ) ) { ?>
- <?php if ( $this->data['loggedin'] ) { ?>
- <div id="mw-createaccount-another">
- <a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7" class="mw-ui-button"><?php $this->msg( 'userlogin-createanother' ); ?></a>
+ if ( $this->data['useemail'] && $this->data['canreset'] && $this->data['resetlink'] === true ) {
+ echo Html::rawElement(
+ 'div',
+ array(
+ 'class' => 'mw-ui-vform-field mw-form-related-link-container',
+ ),
+ Linker::link(
+ SpecialPage::getTitleFor( 'PasswordReset' ),
+ $this->getMsg( 'userlogin-resetpassword-link' )->escaped()
+ )
+ );
+ }
+
+ if ( $this->haveData( 'createOrLoginHref' ) ) {
+ if ( $this->data['loggedin'] ) { ?>
+ <div class="mw-form-related-link-container mw-ui-vform-field">
+ <a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7"><?php $this->msg( 'userlogin-createanother' ); ?></a>
</div>
<?php } else { ?>
- <div id="mw-createaccount-cta">
- <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7" class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
+ <div id="mw-createaccount-cta" class="mw-form-related-link-container mw-ui-vform-field">
+ <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7" class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
</div>
- <?php } ?>
- <?php } ?>
- <?php if ( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
- <?php if ( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
- <?php if ( $this->data['cansecurelogin'] ) {?><input type="hidden" name="wpForceHttps" value="<?php $this->text( 'stickhttps' ); ?>" /><?php } ?>
+ <?php
+ }
+ }
+
+ // Hidden fields
+ $fields = '';
+ if ( $this->haveData( 'uselang' ) ) {
+ $fields .= Html::hidden( 'uselang', $this->data['uselang'] );
+ }
+ if ( $this->haveData( 'token' ) ) {
+ $fields .= Html::hidden( 'wpLoginToken', $this->data['token'] );
+ }
+ if ( $this->data['cansecurelogin'] ) {
+ $fields .= Html::hidden( 'wpForceHttps', $this->data['stickhttps'] );
+ }
+ if ( $this->data['cansecurelogin'] && $this->haveData( 'fromhttp' ) ) {
+ $fields .= Html::hidden( 'wpFromhttp', $this->data['fromhttp'] );
+ }
+ echo $fields;
+
+ ?>
</form>
</div>
</div>
diff --git a/includes/title/ForeignTitle.php b/includes/title/ForeignTitle.php
new file mode 100644
index 00000000..ed96d17c
--- /dev/null
+++ b/includes/title/ForeignTitle.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * A structure to hold the title of a page on a foreign MediaWiki installation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author This, that and the other
+ */
+
+/**
+ * A simple, immutable structure to hold the title of a page on a foreign
+ * MediaWiki installation.
+ */
+class ForeignTitle {
+ /**
+ * @var int|null
+ * Null if we don't know the namespace ID (e.g. interwiki links)
+ */
+ protected $namespaceId;
+ /** @var string */
+ protected $namespaceName;
+ /** @var string */
+ protected $pageName;
+
+ /**
+ * Creates a new ForeignTitle object.
+ *
+ * @param int|null $namespaceId Null if the namespace ID is unknown (e.g.
+ * interwiki links)
+ * @param string $namespaceName
+ * @param string $pageName
+ */
+ public function __construct( $namespaceId, $namespaceName, $pageName ) {
+ if ( is_null( $namespaceId ) ) {
+ $this->namespaceId = null;
+ } else {
+ $this->namespaceId = intval( $namespaceId );
+ }
+ $this->namespaceName = str_replace( ' ', '_', $namespaceName );
+ $this->pageName = str_replace( ' ', '_', $pageName );
+ }
+
+ /**
+ * Do we know the namespace ID of the page on the foreign wiki?
+ * @return bool
+ */
+ public function isNamespaceIdKnown() {
+ return !is_null( $this->namespaceId );
+ }
+
+ /**
+ * @return int
+ * @throws MWException If isNamespaceIdKnown() is false, it does not make
+ * sense to call this function.
+ */
+ public function getNamespaceId() {
+ if ( is_null( $this->namespaceId ) ) {
+ throw new MWException(
+ "Attempted to call getNamespaceId when the namespace ID is not known" );
+ }
+ return $this->namespaceId;
+ }
+
+ /** @return string */
+ public function getNamespaceName() {
+ return $this->namespaceName;
+ }
+
+ /** @return string */
+ public function getText() {
+ return $this->pageName;
+ }
+
+ /** @return string */
+ public function getFullText() {
+ $result = '';
+ if ( $this->namespaceName ) {
+ $result .= $this->namespaceName . ':';
+ }
+ $result .= $this->pageName;
+ return $result;
+ }
+
+ /**
+ * Returns a string representation of the title, for logging. This is purely
+ * informative and must not be used programmatically. Use the appropriate
+ * ImportTitleFactory to generate the correct string representation for a
+ * given use.
+ *
+ * @return string
+ */
+ public function __toString() {
+ $name = '';
+ if ( $this->isNamespaceIdKnown() ) {
+ $name .= '{ns' . $this->namespaceId . '}';
+ } else {
+ $name .= '{ns??}';
+ }
+ $name .= $this->namespaceName . ':' . $this->pageName;
+
+ return $name;
+ }
+}
diff --git a/includes/title/ForeignTitleFactory.php b/includes/title/ForeignTitleFactory.php
new file mode 100644
index 00000000..427afdf3
--- /dev/null
+++ b/includes/title/ForeignTitleFactory.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @license GPL 2+
+ */
+
+/**
+ * A parser that translates page titles into ForeignTitle objects.
+ */
+interface ForeignTitleFactory {
+ /**
+ * Creates a ForeignTitle object based on the page title, and optionally the
+ * namespace ID, of a page on a foreign wiki. These values could be, for
+ * example, the <title> and <ns> attributes found in an XML dump.
+ *
+ * @param string $title The page title
+ * @param int|null $ns The namespace ID, or null if this data is not available
+ * @return ForeignTitle
+ */
+ public function createForeignTitle( $title, $ns = null );
+}
diff --git a/includes/title/ImportTitleFactory.php b/includes/title/ImportTitleFactory.php
new file mode 100644
index 00000000..629616d8
--- /dev/null
+++ b/includes/title/ImportTitleFactory.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @license GPL 2+
+ */
+
+/**
+ * Represents an object that can convert page titles on a foreign wiki
+ * (ForeignTitle objects) into page titles on the local wiki (Title objects).
+ */
+interface ImportTitleFactory {
+ /**
+ * Determines which local title best corresponds to the given foreign title.
+ * If such a title can't be found or would be locally invalid, null is
+ * returned.
+ *
+ * @param ForeignTitle $foreignTitle The ForeignTitle to convert
+ * @return Title|null
+ */
+ public function createTitleFromForeignTitle( ForeignTitle $foreignTitle );
+}
diff --git a/includes/title/MalformedTitleException.php b/includes/title/MalformedTitleException.php
index a8a5d754..a9e58b3e 100644
--- a/includes/title/MalformedTitleException.php
+++ b/includes/title/MalformedTitleException.php
@@ -27,6 +27,7 @@
*
* @license GPL 2+
* @author Daniel Kinzler
+ * @since 1.23
*/
class MalformedTitleException extends Exception {
}
diff --git a/includes/title/MediaWikiPageLinkRenderer.php b/includes/title/MediaWikiPageLinkRenderer.php
index f46cb5e3..9ee48419 100644
--- a/includes/title/MediaWikiPageLinkRenderer.php
+++ b/includes/title/MediaWikiPageLinkRenderer.php
@@ -26,6 +26,7 @@
* A service for generating links from page titles.
*
* @see https://www.mediawiki.org/wiki/Requests_for_comment/TitleValue
+ * @since 1.23
*/
class MediaWikiPageLinkRenderer implements PageLinkRenderer {
/**
diff --git a/includes/title/MediaWikiTitleCodec.php b/includes/title/MediaWikiTitleCodec.php
index 6ca0799c..20034b74 100644
--- a/includes/title/MediaWikiTitleCodec.php
+++ b/includes/title/MediaWikiTitleCodec.php
@@ -31,6 +31,7 @@
* via parseTitle() or from a (semi)trusted source, such as the database.
*
* @see https://www.mediawiki.org/wiki/Requests_for_comment/TitleValue
+ * @since 1.23
*/
class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
/**
@@ -229,7 +230,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
);
$dbkey = trim( $dbkey, '_' );
- if ( strpos( $dbkey, UTF8_REPLACEMENT ) !== false ) {
+ if ( strpos( $dbkey, UtfNormal\Constants::UTF8_REPLACEMENT ) !== false ) {
# Contained illegal UTF-8 sequences or forbidden Unicode chars.
throw new MalformedTitleException( 'Bad UTF-8 sequences found in title: ' . $text );
}
@@ -322,7 +323,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
}
# Reject illegal characters.
- $rxTc = Title::getTitleInvalidRegex();
+ $rxTc = self::getTitleInvalidRegex();
if ( preg_match( $rxTc, $dbkey ) ) {
throw new MalformedTitleException( 'Illegal characters found in title: ' . $text );
}
@@ -397,4 +398,33 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
return $parts;
}
+
+ /**
+ * Returns a simple regex that will match on characters and sequences invalid in titles.
+ * Note that this doesn't pick up many things that could be wrong with titles, but that
+ * replacing this regex with something valid will make many titles valid.
+ * Previously Title::getTitleInvalidRegex()
+ *
+ * @return string Regex string
+ * @since 1.25
+ */
+ public static function getTitleInvalidRegex() {
+ static $rxTc = false;
+ if ( !$rxTc ) {
+ # Matching titles will be held as illegal.
+ $rxTc = '/' .
+ # Any character not allowed is forbidden...
+ '[^' . Title::legalChars() . ']' .
+ # URL percent encoding sequences interfere with the ability
+ # to round-trip titles -- you can't link to them consistently.
+ '|%[0-9A-Fa-f]{2}' .
+ # XML/HTML character references produce similar issues.
+ '|&[A-Za-z0-9\x80-\xff]+;' .
+ '|&#[0-9]+;' .
+ '|&#x[0-9A-Fa-f]+;' .
+ '/S';
+ }
+
+ return $rxTc;
+ }
}
diff --git a/includes/title/NaiveForeignTitleFactory.php b/includes/title/NaiveForeignTitleFactory.php
new file mode 100644
index 00000000..6c8bcc04
--- /dev/null
+++ b/includes/title/NaiveForeignTitleFactory.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @license GPL 2+
+ */
+
+/**
+ * A parser that translates page titles on a foreign wiki into ForeignTitle
+ * objects, with no knowledge of the namespace setup on the foreign site.
+ */
+class NaiveForeignTitleFactory implements ForeignTitleFactory {
+ /**
+ * Creates a ForeignTitle object based on the page title, and optionally the
+ * namespace ID, of a page on a foreign wiki. These values could be, for
+ * example, the <title> and <ns> attributes found in an XML dump.
+ *
+ * Although exported XML dumps have contained a map of namespace IDs to names
+ * since MW 1.5, the importer used to completely ignore the <siteinfo> tag
+ * before MW 1.25. It is therefore possible that custom XML dumps (i.e. not
+ * generated by Special:Export) have been created without this metadata.
+ * As a result, this code falls back to using namespace data for the local
+ * wiki (similar to buggy pre-1.25 behaviour) if $ns is not supplied.
+ *
+ * @param string $title The page title
+ * @param int|null $ns The namespace ID, or null if this data is not available
+ * @return ForeignTitle
+ */
+ public function createForeignTitle( $title, $ns = null ) {
+ $pieces = explode( ':', $title, 2 );
+
+ global $wgContLang;
+
+ // Can we assume that the part of the page title before the colon is a
+ // namespace name?
+ //
+ // XML export schema version 0.5 and earlier (MW 1.18 and earlier) does not
+ // contain a <ns> tag, so we need to be able to handle that case.
+ //
+ // If we know the namespace ID, we assume a non-zero namespace ID means
+ // the ':' sets off a valid namespace name. If we don't know the namespace
+ // ID, we fall back to using the local wiki's namespace names to resolve
+ // this -- better than nothing, and mimics the old crappy behavior
+ $isNamespacePartValid = is_null( $ns ) ?
+ ( $wgContLang->getNsIndex( $pieces[0] ) !== false ) :
+ $ns != 0;
+
+ if ( count( $pieces ) === 2 && $isNamespacePartValid ) {
+ list( $namespaceName, $pageName ) = $pieces;
+ } else {
+ $namespaceName = '';
+ $pageName = $title;
+ }
+
+ return new ForeignTitle( $ns, $namespaceName, $pageName );
+ }
+}
diff --git a/includes/title/NaiveImportTitleFactory.php b/includes/title/NaiveImportTitleFactory.php
new file mode 100644
index 00000000..43c662e7
--- /dev/null
+++ b/includes/title/NaiveImportTitleFactory.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @license GPL 2+
+ */
+
+/**
+ * A class to convert page titles on a foreign wiki (ForeignTitle objects) into
+ * page titles on the local wiki (Title objects), using a default namespace
+ * mapping.
+ *
+ * For built-in namespaces (0 <= ID < 100), we try to find a local namespace
+ * with the same namespace ID as the foreign page. If no such namespace exists,
+ * or the namespace ID is unknown or > 100, we look for a local namespace with
+ * a matching namespace name. If that can't be found, we dump the page in the
+ * main namespace as a last resort.
+ */
+class NaiveImportTitleFactory implements ImportTitleFactory {
+ /**
+ * Determines which local title best corresponds to the given foreign title.
+ * If such a title can't be found or would be locally invalid, null is
+ * returned.
+ *
+ * @param ForeignTitle $foreignTitle The ForeignTitle to convert
+ * @return Title|null
+ */
+ public function createTitleFromForeignTitle( ForeignTitle $foreignTitle ) {
+ global $wgContLang;
+
+ if ( $foreignTitle->isNamespaceIdKnown() ) {
+ $foreignNs = $foreignTitle->getNamespaceId();
+
+ // For built-in namespaces (0 <= ID < 100), we try to find a local NS with
+ // the same namespace ID
+ if ( $foreignNs < 100 && MWNamespace::exists( $foreignNs ) ) {
+ return Title::makeTitleSafe( $foreignNs, $foreignTitle->getText() );
+ }
+ }
+
+ // Do we have a local namespace by the same name as the foreign
+ // namespace?
+ $targetNs = $wgContLang->getNsIndex( $foreignTitle->getNamespaceName() );
+ if ( $targetNs !== false ) {
+ return Title::makeTitleSafe( $targetNs, $foreignTitle->getText() );
+ }
+
+ // Otherwise, just fall back to main namespace
+ return Title::makeTitleSafe( 0, $foreignTitle->getFullText() );
+ }
+}
diff --git a/includes/title/NamespaceAwareForeignTitleFactory.php b/includes/title/NamespaceAwareForeignTitleFactory.php
new file mode 100644
index 00000000..bf97e2cd
--- /dev/null
+++ b/includes/title/NamespaceAwareForeignTitleFactory.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @license GPL 2+
+ */
+
+/**
+ * A parser that translates page titles on a foreign wiki into ForeignTitle
+ * objects, using information about the namespace setup on the foreign site.
+ */
+class NamespaceAwareForeignTitleFactory implements ForeignTitleFactory {
+ /**
+ * @var array
+ */
+ protected $foreignNamespaces;
+ /**
+ * @var array
+ */
+ private $foreignNamespacesFlipped;
+
+ /**
+ * Normalizes an array name for $foreignNamespacesFlipped.
+ * @param string $name
+ * @return string
+ */
+ private function normalizeNamespaceName( $name ) {
+ return strtolower( str_replace( ' ', '_', $name ) );
+ }
+
+ /**
+ * @param array|null $foreignNamespaces An array 'id' => 'name' which contains
+ * the complete namespace setup of the foreign wiki. Such data could be
+ * obtained from siteinfo/namespaces in an XML dump file, or by an action API
+ * query such as api.php?action=query&meta=siteinfo&siprop=namespaces. If
+ * this data is unavailable, use NaiveForeignTitleFactory instead.
+ */
+ public function __construct( $foreignNamespaces ) {
+ $this->foreignNamespaces = $foreignNamespaces;
+ if ( !is_null( $foreignNamespaces ) ) {
+ $this->foreignNamespacesFlipped = array();
+ foreach ( $foreignNamespaces as $id => $name ) {
+ $newKey = self::normalizeNamespaceName( $name );
+ $this->foreignNamespacesFlipped[$newKey] = $id;
+ }
+ }
+ }
+
+ /**
+ * Creates a ForeignTitle object based on the page title, and optionally the
+ * namespace ID, of a page on a foreign wiki. These values could be, for
+ * example, the <title> and <ns> attributes found in an XML dump.
+ *
+ * @param string $title The page title
+ * @param int|null $ns The namespace ID, or null if this data is not available
+ * @return ForeignTitle
+ */
+ public function createForeignTitle( $title, $ns = null ) {
+ // Export schema version 0.5 and earlier (MW 1.18 and earlier) does not
+ // contain a <ns> tag, so we need to be able to handle that case.
+ if ( is_null( $ns ) ) {
+ return self::parseTitleNoNs( $title );
+ } else {
+ return self::parseTitleWithNs( $title, $ns );
+ }
+ }
+
+ /**
+ * Helper function to parse the title when the namespace ID is not specified.
+ *
+ * @param string $title
+ * @return ForeignTitle
+ */
+ protected function parseTitleNoNs( $title ) {
+ $pieces = explode( ':', $title, 2 );
+ $key = self::normalizeNamespaceName( $pieces[0] );
+
+ // Does the part before the colon match a known namespace? Check the
+ // foreign namespaces
+ $isNamespacePartValid = isset( $this->foreignNamespacesFlipped[$key] );
+
+ if ( count( $pieces ) === 2 && $isNamespacePartValid ) {
+ list( $namespaceName, $pageName ) = $pieces;
+ $ns = $this->foreignNamespacesFlipped[$key];
+ } else {
+ $namespaceName = '';
+ $pageName = $title;
+ $ns = 0;
+ }
+
+ return new ForeignTitle( $ns, $namespaceName, $pageName );
+ }
+
+ /**
+ * Helper function to parse the title when the namespace value is known.
+ *
+ * @param string $title
+ * @param int $ns
+ * @return ForeignTitle
+ */
+ protected function parseTitleWithNs( $title, $ns ) {
+ $pieces = explode( ':', $title, 2 );
+
+ if ( isset( $this->foreignNamespaces[$ns] ) ) {
+ $namespaceName = $this->foreignNamespaces[$ns];
+ } else {
+ $namespaceName = $ns == '0' ? '' : $pieces[0];
+ }
+
+ // We assume that the portion of the page title before the colon is the
+ // namespace name, except in the case of namespace 0
+ if ( $ns != '0' ) {
+ $pageName = $pieces[1];
+ } else {
+ $pageName = $title;
+ }
+
+ return new ForeignTitle( $ns, $namespaceName, $pageName );
+ }
+}
diff --git a/includes/title/NamespaceImportTitleFactory.php b/includes/title/NamespaceImportTitleFactory.php
new file mode 100644
index 00000000..0c1d0c40
--- /dev/null
+++ b/includes/title/NamespaceImportTitleFactory.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @license GPL 2+
+ */
+
+/**
+ * A class to convert page titles on a foreign wiki (ForeignTitle objects) into
+ * page titles on the local wiki (Title objects), placing all pages in a fixed
+ * local namespace.
+ */
+class NamespaceImportTitleFactory implements ImportTitleFactory {
+ /** @var int */
+ protected $ns;
+
+ /**
+ * @param int $ns The namespace to use for all pages
+ */
+ public function __construct( $ns ) {
+ if ( !MWNamespace::exists( $ns ) ) {
+ throw new MWException( "Namespace $ns doesn't exist on this wiki" );
+ }
+ $this->ns = $ns;
+ }
+
+ /**
+ * Determines which local title best corresponds to the given foreign title.
+ * If such a title can't be found or would be locally invalid, null is
+ * returned.
+ *
+ * @param ForeignTitle $foreignTitle The ForeignTitle to convert
+ * @return Title|null
+ */
+ public function createTitleFromForeignTitle( ForeignTitle $foreignTitle ) {
+ return Title::makeTitleSafe( $this->ns, $foreignTitle->getText() );
+ }
+}
diff --git a/includes/title/PageLinkRenderer.php b/includes/title/PageLinkRenderer.php
index fb1096e0..ca91f583 100644
--- a/includes/title/PageLinkRenderer.php
+++ b/includes/title/PageLinkRenderer.php
@@ -29,6 +29,7 @@
* URLs, and how links are encoded in a given output format.
*
* @see https://www.mediawiki.org/wiki/Requests_for_comment/TitleValue
+ * @since 1.23
*/
interface PageLinkRenderer {
/**
diff --git a/includes/title/SubpageImportTitleFactory.php b/includes/title/SubpageImportTitleFactory.php
new file mode 100644
index 00000000..b0be7afa
--- /dev/null
+++ b/includes/title/SubpageImportTitleFactory.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @license GPL 2+
+ */
+
+/**
+ * A class to convert page titles on a foreign wiki (ForeignTitle objects) into
+ * page titles on the local wiki (Title objects), placing all pages as subpages
+ * of a given root page.
+ */
+class SubpageImportTitleFactory implements ImportTitleFactory {
+ /** @var Title */
+ protected $rootPage;
+
+ /**
+ * @param Title $rootPage The root page under which all pages should be
+ * created
+ */
+ public function __construct( Title $rootPage ) {
+ if ( !MWNamespace::hasSubpages( $rootPage->getNamespace() ) ) {
+ throw new MWException( "The root page you specified, $rootPage, is in a " .
+ "namespace where subpages are not allowed" );
+ }
+ $this->rootPage = $rootPage;
+ }
+
+ /**
+ * Determines which local title best corresponds to the given foreign title.
+ * If such a title can't be found or would be locally invalid, null is
+ * returned.
+ *
+ * @param ForeignTitle $foreignTitle The ForeignTitle to convert
+ * @return Title|null
+ */
+ public function createTitleFromForeignTitle( ForeignTitle $foreignTitle ) {
+ return Title::newFromText( $this->rootPage->getPrefixedDBkey() . '/' .
+ $foreignTitle->getFullText() );
+ }
+}
diff --git a/includes/title/TitleFormatter.php b/includes/title/TitleFormatter.php
index 7c71ef5e..aad83769 100644
--- a/includes/title/TitleFormatter.php
+++ b/includes/title/TitleFormatter.php
@@ -29,6 +29,7 @@
* forms to be used in the database, in urls, in wikitext, etc.
*
* @see https://www.mediawiki.org/wiki/Requests_for_comment/TitleValue
+ * @since 1.23
*/
interface TitleFormatter {
/**
diff --git a/includes/title/TitleParser.php b/includes/title/TitleParser.php
index 0635ee86..381b1d09 100644
--- a/includes/title/TitleParser.php
+++ b/includes/title/TitleParser.php
@@ -29,6 +29,7 @@
* forms to be used in the database, in urls, in wikitext, etc.
*
* @see https://www.mediawiki.org/wiki/Requests_for_comment/TitleValue
+ * @since 1.23
*/
interface TitleParser {
/**
diff --git a/includes/title/TitleValue.php b/includes/title/TitleValue.php
index 402247c2..5cac3470 100644
--- a/includes/title/TitleValue.php
+++ b/includes/title/TitleValue.php
@@ -32,6 +32,7 @@
* It does not represent a link, and does not support interwiki prefixes etc.
*
* @see https://www.mediawiki.org/wiki/Requests_for_comment/TitleValue
+ * @since 1.23
*/
class TitleValue {
/**
diff --git a/includes/upload/UploadBase.php b/includes/upload/UploadBase.php
index 14959c26..6da8250b 100644
--- a/includes/upload/UploadBase.php
+++ b/includes/upload/UploadBase.php
@@ -69,8 +69,6 @@ abstract class UploadBase {
const WINDOWS_NONASCII_FILENAME = 13;
const FILENAME_TOO_LONG = 14;
- const SESSION_STATUS_KEY = 'wsUploadStatusData';
-
/**
* @param int $error
* @return string
@@ -152,7 +150,7 @@ abstract class UploadBase {
// Give hooks the chance to handle this request
$className = null;
- wfRunHooks( 'UploadCreateFromRequest', array( $type, &$className ) );
+ Hooks::run( 'UploadCreateFromRequest', array( $type, &$className ) );
if ( is_null( $className ) ) {
$className = 'UploadFrom' . $type;
wfDebug( __METHOD__ . ": class name: $className\n" );
@@ -263,7 +261,6 @@ abstract class UploadBase {
* @return string|bool The real path if it was a virtual URL Returns false on failure
*/
function getRealPath( $srcPath ) {
- wfProfileIn( __METHOD__ );
$repo = RepoGroup::singleton()->getLocalRepo();
if ( $repo->isVirtualUrl( $srcPath ) ) {
/** @todo Just make uploads work with storage paths UploadFromStash
@@ -277,7 +274,6 @@ abstract class UploadBase {
} else {
$path = $srcPath;
}
- wfProfileOut( __METHOD__ );
return $path;
}
@@ -287,13 +283,11 @@ abstract class UploadBase {
* @return mixed Const self::OK or else an array with error information
*/
public function verifyUpload() {
- wfProfileIn( __METHOD__ );
/**
* If there was no filename or a zero size given, give up quick.
*/
if ( $this->isEmptyFile() ) {
- wfProfileOut( __METHOD__ );
return array( 'status' => self::EMPTY_FILE );
}
@@ -303,7 +297,6 @@ abstract class UploadBase {
*/
$maxSize = self::getMaxUploadSize( $this->getSourceType() );
if ( $this->mFileSize > $maxSize ) {
- wfProfileOut( __METHOD__ );
return array(
'status' => self::FILE_TOO_LARGE,
@@ -318,7 +311,6 @@ abstract class UploadBase {
*/
$verification = $this->verifyFile();
if ( $verification !== true ) {
- wfProfileOut( __METHOD__ );
return array(
'status' => self::VERIFICATION_ERROR,
@@ -331,22 +323,18 @@ abstract class UploadBase {
*/
$result = $this->validateName();
if ( $result !== true ) {
- wfProfileOut( __METHOD__ );
return $result;
}
$error = '';
- if ( !wfRunHooks( 'UploadVerification',
+ if ( !Hooks::run( 'UploadVerification',
array( $this->mDestName, $this->mTempPath, &$error ) )
) {
- wfProfileOut( __METHOD__ );
return array( 'status' => self::HOOK_ABORTED, 'error' => $error );
}
- wfProfileOut( __METHOD__ );
-
return array( 'status' => self::OK );
}
@@ -388,12 +376,10 @@ abstract class UploadBase {
*/
protected function verifyMimeType( $mime ) {
global $wgVerifyMimeType;
- wfProfileIn( __METHOD__ );
if ( $wgVerifyMimeType ) {
wfDebug( "mime: <$mime> extension: <{$this->mFinalExtension}>\n" );
global $wgMimeTypeBlacklist;
if ( $this->checkFileExtension( $mime, $wgMimeTypeBlacklist ) ) {
- wfProfileOut( __METHOD__ );
return array( 'filetype-badmime', $mime );
}
@@ -408,15 +394,12 @@ abstract class UploadBase {
$ieTypes = $magic->getIEMimeTypes( $this->mTempPath, $chunk, $extMime );
foreach ( $ieTypes as $ieType ) {
if ( $this->checkFileExtension( $ieType, $wgMimeTypeBlacklist ) ) {
- wfProfileOut( __METHOD__ );
return array( 'filetype-bad-ie-mime', $ieType );
}
}
}
- wfProfileOut( __METHOD__ );
-
return true;
}
@@ -426,12 +409,10 @@ abstract class UploadBase {
* @return mixed True of the file is verified, array otherwise.
*/
protected function verifyFile() {
- global $wgVerifyMimeType;
- wfProfileIn( __METHOD__ );
+ global $wgVerifyMimeType, $wgDisableUploadScriptChecks;
$status = $this->verifyPartialFile();
if ( $status !== true ) {
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -442,32 +423,39 @@ abstract class UploadBase {
if ( $wgVerifyMimeType ) {
# XXX: Missing extension will be caught by validateName() via getTitle()
if ( $this->mFinalExtension != '' && !$this->verifyExtension( $mime, $this->mFinalExtension ) ) {
- wfProfileOut( __METHOD__ );
return array( 'filetype-mime-mismatch', $this->mFinalExtension, $mime );
}
}
+ # check for htmlish code and javascript
+ if ( !$wgDisableUploadScriptChecks ) {
+ if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
+ $svgStatus = $this->detectScriptInSvg( $this->mTempPath, false );
+ if ( $svgStatus !== false ) {
+
+ return $svgStatus;
+ }
+ }
+ }
+
$handler = MediaHandler::getHandler( $mime );
if ( $handler ) {
$handlerStatus = $handler->verifyUpload( $this->mTempPath );
if ( !$handlerStatus->isOK() ) {
$errors = $handlerStatus->getErrorsArray();
- wfProfileOut( __METHOD__ );
return reset( $errors );
}
}
- wfRunHooks( 'UploadVerifyFile', array( $this, $mime, &$status ) );
+ Hooks::run( 'UploadVerifyFile', array( $this, $mime, &$status ) );
if ( $status !== true ) {
- wfProfileOut( __METHOD__ );
return $status;
}
wfDebug( __METHOD__ . ": all clear; passing.\n" );
- wfProfileOut( __METHOD__ );
return true;
}
@@ -482,7 +470,6 @@ abstract class UploadBase {
*/
protected function verifyPartialFile() {
global $wgAllowJavaUploads, $wgDisableUploadScriptChecks;
- wfProfileIn( __METHOD__ );
# getTitle() sets some internal parameters like $this->mFinalExtension
$this->getTitle();
@@ -493,7 +480,6 @@ abstract class UploadBase {
$mime = $this->mFileProps['file-mime'];
$status = $this->verifyMimeType( $mime );
if ( $status !== true ) {
- wfProfileOut( __METHOD__ );
return $status;
}
@@ -501,14 +487,12 @@ abstract class UploadBase {
# check for htmlish code and javascript
if ( !$wgDisableUploadScriptChecks ) {
if ( self::detectScript( $this->mTempPath, $mime, $this->mFinalExtension ) ) {
- wfProfileOut( __METHOD__ );
return array( 'uploadscripted' );
}
if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
- $svgStatus = $this->detectScriptInSvg( $this->mTempPath );
+ $svgStatus = $this->detectScriptInSvg( $this->mTempPath, true );
if ( $svgStatus !== false ) {
- wfProfileOut( __METHOD__ );
return $svgStatus;
}
@@ -525,13 +509,11 @@ abstract class UploadBase {
$errors = $zipStatus->getErrorsArray();
$error = reset( $errors );
if ( $error[0] !== 'zip-wrong-format' ) {
- wfProfileOut( __METHOD__ );
return $error;
}
}
if ( $this->mJavaDetected ) {
- wfProfileOut( __METHOD__ );
return array( 'uploadjava' );
}
@@ -540,13 +522,10 @@ abstract class UploadBase {
# Scan the uploaded file for viruses
$virus = $this->detectVirus( $this->mTempPath );
if ( $virus ) {
- wfProfileOut( __METHOD__ );
return array( 'uploadvirus', $virus );
}
- wfProfileOut( __METHOD__ );
-
return true;
}
@@ -639,11 +618,11 @@ abstract class UploadBase {
*/
public function checkWarnings() {
global $wgLang;
- wfProfileIn( __METHOD__ );
$warnings = array();
$localFile = $this->getLocalFile();
+ $localFile->load( File::READ_LATEST );
$filename = $localFile->getName();
/**
@@ -699,17 +678,15 @@ abstract class UploadBase {
}
// Check dupes against archives
- $archivedImage = new ArchivedFile( null, 0, "{$hash}.{$this->mFinalExtension}" );
- if ( $archivedImage->getID() > 0 ) {
- if ( $archivedImage->userCan( File::DELETED_FILE ) ) {
- $warnings['duplicate-archive'] = $archivedImage->getName();
+ $archivedFile = new ArchivedFile( null, 0, '', $hash );
+ if ( $archivedFile->getID() > 0 ) {
+ if ( $archivedFile->userCan( File::DELETED_FILE ) ) {
+ $warnings['duplicate-archive'] = $archivedFile->getName();
} else {
$warnings['duplicate-archive'] = '';
}
}
- wfProfileOut( __METHOD__ );
-
return $warnings;
}
@@ -725,7 +702,7 @@ abstract class UploadBase {
* @return Status Indicating the whether the upload succeeded.
*/
public function performUpload( $comment, $pageText, $watch, $user ) {
- wfProfileIn( __METHOD__ );
+ $this->getLocalFile()->load( File::READ_LATEST );
$status = $this->getLocalFile()->upload(
$this->mTempPath,
@@ -745,15 +722,44 @@ abstract class UploadBase {
WatchedItem::IGNORE_USER_RIGHTS
);
}
- wfRunHooks( 'UploadComplete', array( &$this ) );
- }
+ Hooks::run( 'UploadComplete', array( &$this ) );
- wfProfileOut( __METHOD__ );
+ $this->postProcessUpload();
+ }
return $status;
}
/**
+ * Perform extra steps after a successful upload.
+ *
+ * @since 1.25
+ */
+ public function postProcessUpload() {
+ global $wgUploadThumbnailRenderMap;
+
+ $jobs = array();
+
+ $sizes = $wgUploadThumbnailRenderMap;
+ rsort( $sizes );
+
+ $file = $this->getLocalFile();
+
+ foreach ( $sizes as $size ) {
+ if ( $file->isVectorized()
+ || $file->getWidth() > $size ) {
+ $jobs[] = new ThumbnailRenderJob( $file->getTitle(), array(
+ 'transformParams' => array( 'width' => $size ),
+ ) );
+ }
+ }
+
+ if ( $jobs ) {
+ JobQueueGroup::singleton()->push( $jobs );
+ }
+ }
+
+ /**
* Returns the title of the file to be uploaded. Sets mTitleError in case
* the name was illegal.
*
@@ -911,14 +917,11 @@ abstract class UploadBase {
*/
public function stashFile( User $user = null ) {
// was stashSessionFile
- wfProfileIn( __METHOD__ );
$stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $user );
$file = $stash->stashFile( $this->mTempPath, $this->getSourceType() );
$this->mLocalFile = $file;
- wfProfileOut( __METHOD__ );
-
return $file;
}
@@ -1058,7 +1061,6 @@ abstract class UploadBase {
*/
public static function detectScript( $file, $mime, $extension ) {
global $wgAllowTitlesInSVG;
- wfProfileIn( __METHOD__ );
# ugly hack: for text files, always look at the entire file.
# For binary field, just check the first K.
@@ -1074,7 +1076,6 @@ abstract class UploadBase {
$chunk = strtolower( $chunk );
if ( !$chunk ) {
- wfProfileOut( __METHOD__ );
return false;
}
@@ -1099,7 +1100,6 @@ abstract class UploadBase {
# check for HTML doctype
if ( preg_match( "/<!DOCTYPE *X?HTML/i", $chunk ) ) {
- wfProfileOut( __METHOD__ );
return true;
}
@@ -1108,7 +1108,6 @@ abstract class UploadBase {
// PHP/expat will interpret the given encoding in the xml declaration (bug 47304)
if ( $extension == 'svg' || strpos( $mime, 'image/svg' ) === 0 ) {
if ( self::checkXMLEncodingMissmatch( $file ) ) {
- wfProfileOut( __METHOD__ );
return true;
}
@@ -1147,7 +1146,6 @@ abstract class UploadBase {
foreach ( $tags as $tag ) {
if ( false !== strpos( $chunk, $tag ) ) {
wfDebug( __METHOD__ . ": found something that may make it be mistaken for html: $tag\n" );
- wfProfileOut( __METHOD__ );
return true;
}
@@ -1163,7 +1161,6 @@ abstract class UploadBase {
# look for script-types
if ( preg_match( '!type\s*=\s*[\'"]?\s*(?:\w*/)?(?:ecma|java)!sim', $chunk ) ) {
wfDebug( __METHOD__ . ": found script types\n" );
- wfProfileOut( __METHOD__ );
return true;
}
@@ -1171,7 +1168,6 @@ abstract class UploadBase {
# look for html-style script-urls
if ( preg_match( '!(?:href|src|data)\s*=\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) ) {
wfDebug( __METHOD__ . ": found html-style script urls\n" );
- wfProfileOut( __METHOD__ );
return true;
}
@@ -1179,13 +1175,11 @@ abstract class UploadBase {
# look for css-style script-urls
if ( preg_match( '!url\s*\(\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) ) {
wfDebug( __METHOD__ . ": found css-style script urls\n" );
- wfProfileOut( __METHOD__ );
return true;
}
wfDebug( __METHOD__ . ": no scripts found\n" );
- wfProfileOut( __METHOD__ );
return false;
}
@@ -1252,9 +1246,10 @@ abstract class UploadBase {
/**
* @param string $filename
+ * @param bool $partial
* @return mixed False of the file is verified (does not contain scripts), array otherwise.
*/
- protected function detectScriptInSvg( $filename ) {
+ protected function detectScriptInSvg( $filename, $partial ) {
$this->mSVGNSError = false;
$check = new XmlTypeCheck(
$filename,
@@ -1264,7 +1259,8 @@ abstract class UploadBase {
);
if ( $check->wellFormed !== true ) {
// Invalid xml (bug 58553)
- return array( 'uploadinvalidxml' );
+ // But only when non-partial (bug 65724)
+ return $partial ? false : array( 'uploadinvalidxml' );
} elseif ( $check->filterMatch ) {
if ( $this->mSVGNSError ) {
return array( 'uploadscriptednamespace', $this->mSVGNSError );
@@ -1602,11 +1598,9 @@ abstract class UploadBase {
*/
public static function detectVirus( $file ) {
global $wgAntivirus, $wgAntivirusSetup, $wgAntivirusRequired, $wgOut;
- wfProfileIn( __METHOD__ );
if ( !$wgAntivirus ) {
wfDebug( __METHOD__ . ": virus scanner disabled\n" );
- wfProfileOut( __METHOD__ );
return null;
}
@@ -1615,7 +1609,6 @@ abstract class UploadBase {
wfDebug( __METHOD__ . ": unknown virus scanner: $wgAntivirus\n" );
$wgOut->wrapWikiMsg( "<div class=\"error\">\n$1\n</div>",
array( 'virus-badscanner', $wgAntivirus ) );
- wfProfileOut( __METHOD__ );
return wfMessage( 'virus-unknownscanner' )->text() . " $wgAntivirus";
}
@@ -1689,8 +1682,6 @@ abstract class UploadBase {
wfDebug( __METHOD__ . ": FOUND VIRUS! scanner feedback: $output \n" );
}
- wfProfileOut( __METHOD__ );
-
return $output;
}
@@ -1705,6 +1696,7 @@ abstract class UploadBase {
private function checkOverwrite( $user ) {
// First check whether the local file can be overwritten
$file = $this->getLocalFile();
+ $file->load( File::READ_LATEST );
if ( $file->exists() ) {
if ( !self::userCanReUpload( $user, $file ) ) {
return array( 'fileexists-forbidden', $file->getName() );
@@ -1716,7 +1708,7 @@ abstract class UploadBase {
/* Check shared conflicts: if the local file does not exist, but
* wfFindFile finds a file, it exists in a shared repository.
*/
- $file = wfFindFile( $this->getTitle() );
+ $file = wfFindFile( $this->getTitle(), array( 'latest' => true ) );
if ( $file && !$user->isAllowed( 'reupload-shared' ) ) {
return array( 'fileexists-shared-forbidden', $file->getName() );
}
@@ -1745,6 +1737,8 @@ abstract class UploadBase {
return false;
}
+ $img->load( File::READ_LATEST );
+
return $user->getId() == $img->getUser( 'id' );
}
@@ -1950,29 +1944,38 @@ abstract class UploadBase {
}
/**
- * Get the current status of a chunked upload (used for polling).
- * The status will be read from the *current* user session.
+ * Get the current status of a chunked upload (used for polling)
+ *
+ * The value will be read from cache.
+ *
+ * @param User $user
* @param string $statusKey
* @return Status[]|bool
*/
- public static function getSessionStatus( $statusKey ) {
- return isset( $_SESSION[self::SESSION_STATUS_KEY][$statusKey] )
- ? $_SESSION[self::SESSION_STATUS_KEY][$statusKey]
- : false;
+ public static function getSessionStatus( User $user, $statusKey ) {
+ $key = wfMemcKey( 'uploadstatus', $user->getId() ?: md5( $user->getName() ), $statusKey );
+
+ return wfGetCache( CACHE_ANYTHING )->get( $key );
}
/**
- * Set the current status of a chunked upload (used for polling).
- * The status will be stored in the *current* user session.
+ * Set the current status of a chunked upload (used for polling)
+ *
+ * The value will be set in cache for 1 day
+ *
+ * @param User $user
* @param string $statusKey
* @param array|bool $value
* @return void
*/
- public static function setSessionStatus( $statusKey, $value ) {
+ public static function setSessionStatus( User $user, $statusKey, $value ) {
+ $key = wfMemcKey( 'uploadstatus', $user->getId() ?: md5( $user->getName() ), $statusKey );
+
+ $cache = wfGetCache( CACHE_ANYTHING );
if ( $value === false ) {
- unset( $_SESSION[self::SESSION_STATUS_KEY][$statusKey] );
+ $cache->delete( $key );
} else {
- $_SESSION[self::SESSION_STATUS_KEY][$statusKey] = $value;
+ $cache->set( $key, $value, 86400 );
}
}
}
diff --git a/includes/upload/UploadFromChunks.php b/includes/upload/UploadFromChunks.php
index 14993023..cc9f5c85 100644
--- a/includes/upload/UploadFromChunks.php
+++ b/includes/upload/UploadFromChunks.php
@@ -77,7 +77,7 @@ class UploadFromChunks extends UploadFromFile {
$this->verifyChunk();
// Create a local stash target
- $this->mLocalFile = parent::stashFile();
+ $this->mLocalFile = parent::stashFile( $user );
// Update the initial file offset (based on file size)
$this->mOffset = $this->mLocalFile->getSize();
$this->mFileKey = $this->mLocalFile->getFileKey();
@@ -171,20 +171,6 @@ class UploadFromChunks extends UploadFromFile {
}
/**
- * Perform the upload, then remove the temp copy afterward
- * @param string $comment
- * @param string $pageText
- * @param bool $watch
- * @param User $user
- * @return Status
- */
- public function performUpload( $comment, $pageText, $watch, $user ) {
- $rv = parent::performUpload( $comment, $pageText, $watch, $user );
-
- return $rv;
- }
-
- /**
* Returns the virtual chunk location:
* @param int $index
* @return string
@@ -303,10 +289,10 @@ class UploadFromChunks extends UploadFromFile {
}
/**
- * Gets the current offset in fromt the stashedupload table
+ * Get the offset at which the next uploaded chunk will be appended to
* @return int Current byte offset of the chunk file set
*/
- private function getOffset() {
+ public function getOffset() {
if ( $this->mOffset !== null ) {
return $this->mOffset;
}
diff --git a/includes/upload/UploadFromUrl.php b/includes/upload/UploadFromUrl.php
index b6056401..fc59ace5 100644
--- a/includes/upload/UploadFromUrl.php
+++ b/includes/upload/UploadFromUrl.php
@@ -118,7 +118,7 @@ class UploadFromUrl extends UploadBase {
public static function isAllowedUrl( $url ) {
if ( !isset( self::$allowedUrls[$url] ) ) {
$allowed = true;
- wfRunHooks( 'IsUploadAllowedFromUrl', array( $url, &$allowed ) );
+ Hooks::run( 'IsUploadAllowedFromUrl', array( $url, &$allowed ) );
self::$allowedUrls[$url] = $allowed;
}
@@ -231,12 +231,18 @@ class UploadFromUrl extends UploadBase {
* @return int Number of bytes handled
*/
public function saveTempFileChunk( $req, $buffer ) {
+ wfDebugLog( 'fileupload', 'Received chunk of ' . strlen( $buffer ) . ' bytes' );
$nbytes = fwrite( $this->mTmpHandle, $buffer );
if ( $nbytes == strlen( $buffer ) ) {
$this->mFileSize += $nbytes;
} else {
// Well... that's not good!
+ wfDebugLog(
+ 'fileupload',
+ 'Short write ' . $this->nbytes . '/' . strlen( $buffer ) .
+ ' bytes, aborting with ' . $this->mFileSize . ' uploaded so far'
+ );
fclose( $this->mTmpHandle );
$this->mTmpHandle = false;
}
@@ -262,6 +268,7 @@ class UploadFromUrl extends UploadBase {
if ( !$this->mTmpHandle ) {
return Status::newFatal( 'tmp-create-error' );
}
+ wfDebugLog( 'fileupload', 'Temporary file created "' . $this->mTempPath . '"' );
$this->mRemoveTempFile = true;
$this->mFileSize = 0;
@@ -275,7 +282,12 @@ class UploadFromUrl extends UploadBase {
if ( $wgCopyUploadTimeout && !isset( $options['timeout'] ) ) {
$options['timeout'] = $wgCopyUploadTimeout;
}
- $req = MWHttpRequest::factory( $this->mUrl, $options );
+ wfDebugLog(
+ 'fileupload',
+ 'Starting download from "' . $this->mUrl . '" ' .
+ '<' . implode( ',', array_keys( array_filter( $options ) ) ) . '>'
+ );
+ $req = MWHttpRequest::factory( $this->mUrl, $options, __METHOD__ );
$req->setCallback( array( $this, 'saveTempFileChunk' ) );
$status = $req->execute();
@@ -288,8 +300,14 @@ class UploadFromUrl extends UploadBase {
return Status::newFatal( 'tmp-write-error' );
}
- if ( !$status->isOk() ) {
- return $status;
+ wfDebugLog( 'fileupload', $status );
+ if ( $status->isOk() ) {
+ wfDebugLog( 'fileupload', 'Download by URL completed successfuly.' );
+ } else {
+ wfDebugLog(
+ 'fileupload',
+ 'Download by URL completed with HTTP status ' . $req->getStatus()
+ );
}
return $status;
diff --git a/includes/upload/UploadStash.php b/includes/upload/UploadStash.php
index 7d80b448..c07665a0 100644
--- a/includes/upload/UploadStash.php
+++ b/includes/upload/UploadStash.php
@@ -151,6 +151,7 @@ class UploadStash {
if ( !$this->files[$key]->exists() ) {
wfDebug( __METHOD__ . " tried to get file at $key, but it doesn't exist\n" );
+ // @todo Is this not an UploadStashFileNotFoundException case?
throw new UploadStashBadPathException( "path doesn't exist" );
}
@@ -726,9 +727,6 @@ class UploadStashFile extends UnregisteredLocalFile {
class UploadStashException extends MWException {
}
-class UploadStashNotAvailableException extends UploadStashException {
-}
-
class UploadStashFileNotFoundException extends UploadStashException {
}
diff --git a/includes/utils/AutoloadGenerator.php b/includes/utils/AutoloadGenerator.php
new file mode 100644
index 00000000..9cf8cab5
--- /dev/null
+++ b/includes/utils/AutoloadGenerator.php
@@ -0,0 +1,296 @@
+<?php
+
+/**
+ * Accepts a list of files and directories to search for
+ * php files and generates $wgAutoloadLocalClasses or $wgAutoloadClasses
+ * lines for all detected classes. These lines are written out
+ * to an autoload.php file in the projects provided basedir.
+ *
+ * Usage:
+ *
+ * $gen = new AutoloadGenerator( __DIR__ );
+ * $gen->readDir( __DIR__ . '/includes' );
+ * $gen->readFile( __DIR__ . '/foo.php' )
+ * $gen->generateAutoload();
+ */
+class AutoloadGenerator {
+ /**
+ * @var string Root path of the project being scanned for classes
+ */
+ protected $basepath;
+
+ /**
+ * @var ClassCollector Helper class extracts class names from php files
+ */
+ protected $collector;
+
+ /**
+ * @var array Map of file shortpath to list of FQCN detected within file
+ */
+ protected $classes = array();
+
+ /**
+ * @var string The global variable to write output to
+ */
+ protected $variableName = 'wgAutoloadClasses';
+
+ /**
+ * @var array Map of FQCN to relative path(from self::$basepath)
+ */
+ protected $overrides = array();
+
+ /**
+ * @param string $basepath Root path of the project being scanned for classes
+ * @param array|string $flags
+ *
+ * local - If this flag is set $wgAutoloadLocalClasses will be build instead
+ * of $wgAutoloadClasses
+ */
+ public function __construct( $basepath, $flags = array() ) {
+ if ( !is_array( $flags ) ) {
+ $flags = array( $flags );
+ }
+ $this->basepath = self::normalizePathSeparator( realpath( $basepath ) );
+ $this->collector = new ClassCollector;
+ if ( in_array( 'local', $flags ) ) {
+ $this->variableName = 'wgAutoloadLocalClasses';
+ }
+ }
+
+ /**
+ * Force a class to be autoloaded from a specific path, regardless of where
+ * or if it was detected.
+ *
+ * @param string $fqcn FQCN to force the location of
+ * @param string $inputPath Full path to the file containing the class
+ * @throws Exception
+ */
+ public function forceClassPath( $fqcn, $inputPath ) {
+ $path = self::normalizePathSeparator( realpath( $inputPath ) );
+ if ( !$path ) {
+ throw new \Exception( "Invalid path: $inputPath" );
+ }
+ $len = strlen( $this->basepath );
+ if ( substr( $path, 0, $len ) !== $this->basepath ) {
+ throw new \Exception( "Path is not within basepath: $inputPath" );
+ }
+ $shortpath = substr( $path, $len );
+ $this->overrides[$fqcn] = $shortpath;
+ }
+
+ /**
+ * @param string $inputPath Path to a php file to find classes within
+ * @throws Exception
+ */
+ public function readFile( $inputPath ) {
+ // NOTE: do NOT expand $inputPath using realpath(). It is perfectly
+ // reasonable for LocalSettings.php and similiar files to be symlinks
+ // to files that are outside of $this->basepath.
+ $inputPath = self::normalizePathSeparator( $inputPath );
+ $len = strlen( $this->basepath );
+ if ( substr( $inputPath, 0, $len ) !== $this->basepath ) {
+ throw new \Exception( "Path is not within basepath: $inputPath" );
+ }
+ $result = $this->collector->getClasses(
+ file_get_contents( $inputPath )
+ );
+ if ( $result ) {
+ $shortpath = substr( $inputPath, $len );
+ $this->classes[$shortpath] = $result;
+ }
+ }
+
+ /**
+ * @param string $dir Path to a directory to recursively search
+ * for php files with either .php or .inc extensions
+ */
+ public function readDir( $dir ) {
+ $it = new RecursiveDirectoryIterator(
+ self::normalizePathSeparator( realpath( $dir ) ) );
+ $it = new RecursiveIteratorIterator( $it );
+
+ foreach ( $it as $path => $file ) {
+ $ext = pathinfo( $path, PATHINFO_EXTENSION );
+ // some older files in mw use .inc
+ if ( $ext === 'php' || $ext === 'inc' ) {
+ $this->readFile( $path );
+ }
+ }
+ }
+
+ /**
+ * Write out all known classes to autoload.php in
+ * the provided basedir
+ *
+ * @param string $commandName Value used in file comment to direct
+ * developers towards the appropriate way to update the autoload.
+ */
+ public function generateAutoload( $commandName = 'AutoloadGenerator' ) {
+ $content = array();
+
+ // We need to generate a line each rather than exporting the
+ // full array so __DIR__ can be prepended to all the paths
+ $format = "%s => __DIR__ . %s,";
+ foreach ( $this->classes as $path => $contained ) {
+ $exportedPath = var_export( $path, true );
+ foreach ( $contained as $fqcn ) {
+ $content[$fqcn] = sprintf(
+ $format,
+ var_export( $fqcn, true ),
+ $exportedPath
+ );
+ }
+ }
+
+ foreach ( $this->overrides as $fqcn => $path ) {
+ $content[$fqcn] = sprintf(
+ $format,
+ var_export( $fqcn, true ),
+ var_export( $path, true )
+ );
+ }
+
+ // sort for stable output
+ ksort( $content );
+
+ // extensions using this generator are appending to the existing
+ // autoload.
+ if ( $this->variableName === 'wgAutoloadClasses' ) {
+ $op = '+=';
+ } else {
+ $op = '=';
+ }
+
+ $output = implode( "\n\t", $content );
+ file_put_contents(
+ $this->basepath . '/autoload.php',
+ <<<EOD
+<?php
+// This file is generated by $commandName, do not adjust manually
+// @codingStandardsIgnoreFile
+global \${$this->variableName};
+
+\${$this->variableName} {$op} array(
+ {$output}
+);
+
+EOD
+ );
+ }
+
+ /**
+ * Ensure that Unix-style path separators ("/") are used in the path.
+ *
+ * @param string $path
+ * @return string
+ */
+ protected static function normalizePathSeparator( $path ) {
+ return str_replace( '\\', '/', $path );
+ }
+}
+
+/**
+ * Reads PHP code and returns the FQCN of every class defined within it.
+ */
+class ClassCollector {
+
+ /**
+ * @var string Current namespace
+ */
+ protected $namespace = '';
+
+ /**
+ * @var array List of FQCN detected in this pass
+ */
+ protected $classes;
+
+ /**
+ * @var array Token from token_get_all() that started an expect sequence
+ */
+ protected $startToken;
+
+ /**
+ * @var array List of tokens that are members of the current expect sequence
+ */
+ protected $tokens;
+
+ /**
+ * @var string $code PHP code (including <?php) to detect class names from
+ * @return array List of FQCN detected within the tokens
+ */
+ public function getClasses( $code ) {
+ $this->namespace = '';
+ $this->classes = array();
+ $this->startToken = null;
+ $this->tokens = array();
+
+ foreach ( token_get_all( $code ) as $token ) {
+ if ( $this->startToken === null ) {
+ $this->tryBeginExpect( $token );
+ } else {
+ $this->tryEndExpect( $token );
+ }
+ }
+
+ return $this->classes;
+ }
+
+ /**
+ * Determine if $token begins the next expect sequence.
+ *
+ * @param array $token
+ */
+ protected function tryBeginExpect( $token ) {
+ if ( is_string( $token ) ) {
+ return;
+ }
+ switch ( $token[0] ) {
+ case T_NAMESPACE:
+ case T_CLASS:
+ case T_INTERFACE:
+ $this->startToken = $token;
+ }
+ }
+
+ /**
+ * Accepts the next token in an expect sequence
+ *
+ * @param array
+ */
+ protected function tryEndExpect( $token ) {
+ switch ( $this->startToken[0] ) {
+ case T_NAMESPACE:
+ if ( $token === ';' || $token === '{' ) {
+ $this->namespace = $this->implodeTokens() . '\\';
+ } else {
+ $this->tokens[] = $token;
+ }
+ break;
+
+ case T_CLASS:
+ case T_INTERFACE:
+ $this->tokens[] = $token;
+ if ( is_array( $token ) && $token[0] === T_STRING ) {
+ $this->classes[] = $this->namespace . $this->implodeTokens();
+ }
+ }
+ }
+
+ /**
+ * Returns the string representation of the tokens within the
+ * current expect sequence and resets the sequence.
+ *
+ * @return string
+ */
+ protected function implodeTokens() {
+ $content = array();
+ foreach ( $this->tokens as $token ) {
+ $content[] = is_string( $token ) ? $token : $token[1];
+ }
+
+ $this->tokens = array();
+ $this->startToken = null;
+
+ return trim( implode( '', $content ), " \n\t" );
+ }
+}
diff --git a/includes/utils/Cdb.php b/includes/utils/Cdb.php
deleted file mode 100644
index 3ceb620f..00000000
--- a/includes/utils/Cdb.php
+++ /dev/null
@@ -1,163 +0,0 @@
-<?php
-/**
- * Native CDB file reader and writer.
- *
- * 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
- */
-
-/**
- * Read from a CDB file.
- * Native and pure PHP implementations are provided.
- * http://cr.yp.to/cdb.html
- */
-abstract class CdbReader {
- /**
- * The file handle
- */
- protected $handle;
-
- /**
- * Open a file and return a subclass instance
- *
- * @param string $fileName
- *
- * @return CdbReader
- */
- public static function open( $fileName ) {
- return self::haveExtension() ?
- new CdbReaderDBA( $fileName ) :
- new CdbReaderPHP( $fileName );
- }
-
- /**
- * Returns true if the native extension is available
- *
- * @return bool
- */
- public static function haveExtension() {
- if ( !function_exists( 'dba_handlers' ) ) {
- return false;
- }
- $handlers = dba_handlers();
- if ( !in_array( 'cdb', $handlers ) || !in_array( 'cdb_make', $handlers ) ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Create the object and open the file
- *
- * @param string $fileName
- */
- abstract public function __construct( $fileName );
-
- /**
- * Close the file. Optional, you can just let the variable go out of scope.
- */
- abstract public function close();
-
- /**
- * Get a value with a given key. Only string values are supported.
- *
- * @param string $key
- */
- abstract public function get( $key );
-}
-
-/**
- * Write to a CDB file.
- * Native and pure PHP implementations are provided.
- */
-abstract class CdbWriter {
- /**
- * The file handle
- */
- protected $handle;
-
- /**
- * File we'll be writing to when we're done
- * @var string
- */
- protected $realFileName;
-
- /**
- * File we write to temporarily until we're done
- * @var string
- */
- protected $tmpFileName;
-
- /**
- * Open a writer and return a subclass instance.
- * The user must have write access to the directory, for temporary file creation.
- *
- * @param string $fileName
- *
- * @return CdbWriterDBA|CdbWriterPHP
- */
- public static function open( $fileName ) {
- return CdbReader::haveExtension() ?
- new CdbWriterDBA( $fileName ) :
- new CdbWriterPHP( $fileName );
- }
-
- /**
- * Create the object and open the file
- *
- * @param string $fileName
- */
- abstract public function __construct( $fileName );
-
- /**
- * Set a key to a given value. The value will be converted to string.
- * @param string $key
- * @param string $value
- */
- abstract public function set( $key, $value );
-
- /**
- * Close the writer object. You should call this function before the object
- * goes out of scope, to write out the final hashtables.
- */
- abstract public function close();
-
- /**
- * If the object goes out of scope, close it for sanity
- */
- public function __destruct() {
- if ( isset( $this->handle ) ) {
- $this->close();
- }
- }
-
- /**
- * Are we running on Windows?
- * @return bool
- */
- protected function isWindows() {
- return substr( php_uname(), 0, 7 ) == 'Windows';
- }
-}
-
-/**
- * Exception for Cdb errors.
- * This explicitly doesn't subclass MWException to encourage reuse.
- */
-class CdbException extends Exception {
-}
diff --git a/includes/utils/CdbDBA.php b/includes/utils/CdbDBA.php
deleted file mode 100644
index efcaf21f..00000000
--- a/includes/utils/CdbDBA.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-/**
- * DBA-based CDB reader/writer
- *
- * 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
- */
-
-/**
- * Reader class which uses the DBA extension
- */
-class CdbReaderDBA extends CdbReader {
- public function __construct( $fileName ) {
- $this->handle = dba_open( $fileName, 'r-', 'cdb' );
- if ( !$this->handle ) {
- throw new CdbException( 'Unable to open CDB file "' . $fileName . '"' );
- }
- }
-
- public function close() {
- if ( isset( $this->handle ) ) {
- dba_close( $this->handle );
- }
- unset( $this->handle );
- }
-
- public function get( $key ) {
- return dba_fetch( $key, $this->handle );
- }
-}
-
-/**
- * Writer class which uses the DBA extension
- */
-class CdbWriterDBA extends CdbWriter {
- public function __construct( $fileName ) {
- $this->realFileName = $fileName;
- $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
- $this->handle = dba_open( $this->tmpFileName, 'n', 'cdb_make' );
- if ( !$this->handle ) {
- throw new CdbException( 'Unable to open CDB file for write "' . $fileName . '"' );
- }
- }
-
- public function set( $key, $value ) {
- return dba_insert( $key, $value, $this->handle );
- }
-
- public function close() {
- if ( isset( $this->handle ) ) {
- dba_close( $this->handle );
- }
- if ( $this->isWindows() ) {
- unlink( $this->realFileName );
- }
- if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
- throw new CdbException( 'Unable to move the new CDB file into place.' );
- }
- unset( $this->handle );
- }
-}
diff --git a/includes/utils/CdbPHP.php b/includes/utils/CdbPHP.php
deleted file mode 100644
index 19d747a7..00000000
--- a/includes/utils/CdbPHP.php
+++ /dev/null
@@ -1,494 +0,0 @@
-<?php
-/**
- * This is a port of D.J. Bernstein's CDB to PHP. It's based on the copy that
- * appears in PHP 5.3. Changes are:
- * * Error returns replaced with exceptions
- * * Exception thrown if sizes or offsets are between 2GB and 4GB
- * * Some variables renamed
- *
- * 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
- */
-
-/**
- * Common functions for readers and writers
- */
-class CdbFunctions {
- /**
- * Take a modulo of a signed integer as if it were an unsigned integer.
- * $b must be less than 0x40000000 and greater than 0
- *
- * @param int $a
- * @param int $b
- *
- * @return int
- */
- public static function unsignedMod( $a, $b ) {
- if ( $a & 0x80000000 ) {
- $m = ( $a & 0x7fffffff ) % $b + 2 * ( 0x40000000 % $b );
-
- return $m % $b;
- } else {
- return $a % $b;
- }
- }
-
- /**
- * Shift a signed integer right as if it were unsigned
- * @param int $a
- * @param int $b
- * @return int
- */
- public static function unsignedShiftRight( $a, $b ) {
- if ( $b == 0 ) {
- return $a;
- }
- if ( $a & 0x80000000 ) {
- return ( ( $a & 0x7fffffff ) >> $b ) | ( 0x40000000 >> ( $b - 1 ) );
- } else {
- return $a >> $b;
- }
- }
-
- /**
- * The CDB hash function.
- *
- * @param string $s
- *
- * @return int
- */
- public static function hash( $s ) {
- $h = 5381;
- $len = strlen( $s );
- for ( $i = 0; $i < $len; $i++ ) {
- $h5 = ( $h << 5 ) & 0xffffffff;
- // Do a 32-bit sum
- // Inlined here for speed
- $sum = ( $h & 0x3fffffff ) + ( $h5 & 0x3fffffff );
- $h =
- (
- ( $sum & 0x40000000 ? 1 : 0 )
- + ( $h & 0x80000000 ? 2 : 0 )
- + ( $h & 0x40000000 ? 1 : 0 )
- + ( $h5 & 0x80000000 ? 2 : 0 )
- + ( $h5 & 0x40000000 ? 1 : 0 )
- ) << 30
- | ( $sum & 0x3fffffff );
- $h ^= ord( $s[$i] );
- $h &= 0xffffffff;
- }
-
- return $h;
- }
-}
-
-/**
- * CDB reader class
- */
-class CdbReaderPHP extends CdbReader {
- /** The filename */
- protected $fileName;
-
- /* number of hash slots searched under this key */
- protected $loop;
-
- /* initialized if loop is nonzero */
- protected $khash;
-
- /* initialized if loop is nonzero */
- protected $kpos;
-
- /* initialized if loop is nonzero */
- protected $hpos;
-
- /* initialized if loop is nonzero */
- protected $hslots;
-
- /* initialized if findNext() returns true */
- protected $dpos;
-
- /* initialized if cdb_findnext() returns 1 */
- protected $dlen;
-
- /**
- * @param string $fileName
- * @throws CdbException
- */
- public function __construct( $fileName ) {
- $this->fileName = $fileName;
- $this->handle = fopen( $fileName, 'rb' );
- if ( !$this->handle ) {
- throw new CdbException( 'Unable to open CDB file "' . $this->fileName . '".' );
- }
- $this->findStart();
- }
-
- public function close() {
- if ( isset( $this->handle ) ) {
- fclose( $this->handle );
- }
- unset( $this->handle );
- }
-
- /**
- * @param mixed $key
- * @return bool|string
- */
- public function get( $key ) {
- // strval is required
- if ( $this->find( strval( $key ) ) ) {
- return $this->read( $this->dlen, $this->dpos );
- } else {
- return false;
- }
- }
-
- /**
- * @param string $key
- * @param int $pos
- * @return bool
- */
- protected function match( $key, $pos ) {
- $buf = $this->read( strlen( $key ), $pos );
-
- return $buf === $key;
- }
-
- protected function findStart() {
- $this->loop = 0;
- }
-
- /**
- * @throws CdbException
- * @param int $length
- * @param int $pos
- * @return string
- */
- protected function read( $length, $pos ) {
- if ( fseek( $this->handle, $pos ) == -1 ) {
- // This can easily happen if the internal pointers are incorrect
- throw new CdbException(
- 'Seek failed, file "' . $this->fileName . '" may be corrupted.' );
- }
-
- if ( $length == 0 ) {
- return '';
- }
-
- $buf = fread( $this->handle, $length );
- if ( $buf === false || strlen( $buf ) !== $length ) {
- throw new CdbException(
- 'Read from CDB file failed, file "' . $this->fileName . '" may be corrupted.' );
- }
-
- return $buf;
- }
-
- /**
- * Unpack an unsigned integer and throw an exception if it needs more than 31 bits
- * @param string $s
- * @throws CdbException
- * @return mixed
- */
- protected function unpack31( $s ) {
- $data = unpack( 'V', $s );
- if ( $data[1] > 0x7fffffff ) {
- throw new CdbException(
- 'Error in CDB file "' . $this->fileName . '", integer too big.' );
- }
-
- return $data[1];
- }
-
- /**
- * Unpack a 32-bit signed integer
- * @param string $s
- * @return int
- */
- protected function unpackSigned( $s ) {
- $data = unpack( 'va/vb', $s );
-
- return $data['a'] | ( $data['b'] << 16 );
- }
-
- /**
- * @param string $key
- * @return bool
- */
- protected function findNext( $key ) {
- if ( !$this->loop ) {
- $u = CdbFunctions::hash( $key );
- $buf = $this->read( 8, ( $u << 3 ) & 2047 );
- $this->hslots = $this->unpack31( substr( $buf, 4 ) );
- if ( !$this->hslots ) {
- return false;
- }
- $this->hpos = $this->unpack31( substr( $buf, 0, 4 ) );
- $this->khash = $u;
- $u = CdbFunctions::unsignedShiftRight( $u, 8 );
- $u = CdbFunctions::unsignedMod( $u, $this->hslots );
- $u <<= 3;
- $this->kpos = $this->hpos + $u;
- }
-
- while ( $this->loop < $this->hslots ) {
- $buf = $this->read( 8, $this->kpos );
- $pos = $this->unpack31( substr( $buf, 4 ) );
- if ( !$pos ) {
- return false;
- }
- $this->loop += 1;
- $this->kpos += 8;
- if ( $this->kpos == $this->hpos + ( $this->hslots << 3 ) ) {
- $this->kpos = $this->hpos;
- }
- $u = $this->unpackSigned( substr( $buf, 0, 4 ) );
- if ( $u === $this->khash ) {
- $buf = $this->read( 8, $pos );
- $keyLen = $this->unpack31( substr( $buf, 0, 4 ) );
- if ( $keyLen == strlen( $key ) && $this->match( $key, $pos + 8 ) ) {
- // Found
- $this->dlen = $this->unpack31( substr( $buf, 4 ) );
- $this->dpos = $pos + 8 + $keyLen;
-
- return true;
- }
- }
- }
-
- return false;
- }
-
- /**
- * @param mixed $key
- * @return bool
- */
- protected function find( $key ) {
- $this->findStart();
-
- return $this->findNext( $key );
- }
-}
-
-/**
- * CDB writer class
- */
-class CdbWriterPHP extends CdbWriter {
- protected $hplist;
-
- protected $numentries;
-
- protected $pos;
-
- /**
- * @param string $fileName
- */
- public function __construct( $fileName ) {
- $this->realFileName = $fileName;
- $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
- $this->handle = fopen( $this->tmpFileName, 'wb' );
- if ( !$this->handle ) {
- $this->throwException(
- 'Unable to open CDB file "' . $this->tmpFileName . '" for write.' );
- }
- $this->hplist = array();
- $this->numentries = 0;
- $this->pos = 2048; // leaving space for the pointer array, 256 * 8
- if ( fseek( $this->handle, $this->pos ) == -1 ) {
- $this->throwException( 'fseek failed in file "' . $this->tmpFileName . '".' );
- }
- }
-
- /**
- * @param string $key
- * @param string $value
- */
- public function set( $key, $value ) {
- if ( strval( $key ) === '' ) {
- // DBA cross-check hack
- return;
- }
- $this->addbegin( strlen( $key ), strlen( $value ) );
- $this->write( $key );
- $this->write( $value );
- $this->addend( strlen( $key ), strlen( $value ), CdbFunctions::hash( $key ) );
- }
-
- /**
- * @throws CdbException
- */
- public function close() {
- $this->finish();
- if ( isset( $this->handle ) ) {
- fclose( $this->handle );
- }
- if ( $this->isWindows() && file_exists( $this->realFileName ) ) {
- unlink( $this->realFileName );
- }
- if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
- $this->throwException( 'Unable to move the new CDB file into place.' );
- }
- unset( $this->handle );
- }
-
- /**
- * @throws CdbException
- * @param string $buf
- */
- protected function write( $buf ) {
- $len = fwrite( $this->handle, $buf );
- if ( $len !== strlen( $buf ) ) {
- $this->throwException( 'Error writing to CDB file "' . $this->tmpFileName . '".' );
- }
- }
-
- /**
- * @throws CdbException
- * @param int $len
- */
- protected function posplus( $len ) {
- $newpos = $this->pos + $len;
- if ( $newpos > 0x7fffffff ) {
- $this->throwException(
- 'A value in the CDB file "' . $this->tmpFileName . '" is too large.' );
- }
- $this->pos = $newpos;
- }
-
- /**
- * @param int $keylen
- * @param int $datalen
- * @param int $h
- */
- protected function addend( $keylen, $datalen, $h ) {
- $this->hplist[] = array(
- 'h' => $h,
- 'p' => $this->pos
- );
-
- $this->numentries++;
- $this->posplus( 8 );
- $this->posplus( $keylen );
- $this->posplus( $datalen );
- }
-
- /**
- * @throws CdbException
- * @param int $keylen
- * @param int $datalen
- */
- protected function addbegin( $keylen, $datalen ) {
- if ( $keylen > 0x7fffffff ) {
- $this->throwException( 'Key length too long in file "' . $this->tmpFileName . '".' );
- }
- if ( $datalen > 0x7fffffff ) {
- $this->throwException( 'Data length too long in file "' . $this->tmpFileName . '".' );
- }
- $buf = pack( 'VV', $keylen, $datalen );
- $this->write( $buf );
- }
-
- /**
- * @throws CdbException
- */
- protected function finish() {
- // Hack for DBA cross-check
- $this->hplist = array_reverse( $this->hplist );
-
- // Calculate the number of items that will be in each hashtable
- $counts = array_fill( 0, 256, 0 );
- foreach ( $this->hplist as $item ) {
- ++$counts[255 & $item['h']];
- }
-
- // Fill in $starts with the *end* indexes
- $starts = array();
- $pos = 0;
- for ( $i = 0; $i < 256; ++$i ) {
- $pos += $counts[$i];
- $starts[$i] = $pos;
- }
-
- // Excessively clever and indulgent code to simultaneously fill $packedTables
- // with the packed hashtables, and adjust the elements of $starts
- // to actually point to the starts instead of the ends.
- $packedTables = array_fill( 0, $this->numentries, false );
- foreach ( $this->hplist as $item ) {
- $packedTables[--$starts[255 & $item['h']]] = $item;
- }
-
- $final = '';
- for ( $i = 0; $i < 256; ++$i ) {
- $count = $counts[$i];
-
- // The size of the hashtable will be double the item count.
- // The rest of the slots will be empty.
- $len = $count + $count;
- $final .= pack( 'VV', $this->pos, $len );
-
- $hashtable = array();
- for ( $u = 0; $u < $len; ++$u ) {
- $hashtable[$u] = array( 'h' => 0, 'p' => 0 );
- }
-
- // Fill the hashtable, using the next empty slot if the hashed slot
- // is taken.
- for ( $u = 0; $u < $count; ++$u ) {
- $hp = $packedTables[$starts[$i] + $u];
- $where = CdbFunctions::unsignedMod(
- CdbFunctions::unsignedShiftRight( $hp['h'], 8 ), $len );
- while ( $hashtable[$where]['p'] ) {
- if ( ++$where == $len ) {
- $where = 0;
- }
- }
- $hashtable[$where] = $hp;
- }
-
- // Write the hashtable
- for ( $u = 0; $u < $len; ++$u ) {
- $buf = pack( 'vvV',
- $hashtable[$u]['h'] & 0xffff,
- CdbFunctions::unsignedShiftRight( $hashtable[$u]['h'], 16 ),
- $hashtable[$u]['p'] );
- $this->write( $buf );
- $this->posplus( 8 );
- }
- }
-
- // Write the pointer array at the start of the file
- rewind( $this->handle );
- if ( ftell( $this->handle ) != 0 ) {
- $this->throwException( 'Error rewinding to start of file "' . $this->tmpFileName . '".' );
- }
- $this->write( $final );
- }
-
- /**
- * Clean up the temp file and throw an exception
- *
- * @param string $msg
- * @throws CdbException
- */
- protected function throwException( $msg ) {
- if ( $this->handle ) {
- fclose( $this->handle );
- unlink( $this->tmpFileName );
- }
- throw new CdbException( $msg );
- }
-}
diff --git a/includes/utils/IP.php b/includes/utils/IP.php
index 0e2db8cc..4441236d 100644
--- a/includes/utils/IP.php
+++ b/includes/utils/IP.php
@@ -629,6 +629,25 @@ class IP {
}
/**
+ * Determines if an IP address is a list of CIDR a.b.c.d/n ranges.
+ *
+ * @since 1.25
+ *
+ * @param string $ip the IP to check
+ * @param array $ranges the IP ranges, each element a range
+ *
+ * @return bool true if the specified adress belongs to the specified range; otherwise, false.
+ */
+ public static function isInRanges( $ip, $ranges ) {
+ foreach ( $ranges as $range ) {
+ if ( self::isInRange( $ip, $range ) ) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* Convert some unusual representations of IPv4 addresses to their
* canonical dotted quad representation.
*
@@ -698,7 +717,7 @@ class IP {
*/
public static function isTrustedProxy( $ip ) {
$trusted = self::isConfiguredProxy( $ip );
- wfRunHooks( 'IsTrustedProxy', array( &$ip, &$trusted ) );
+ Hooks::run( 'IsTrustedProxy', array( &$ip, &$trusted ) );
return $trusted;
}
@@ -712,7 +731,6 @@ class IP {
public static function isConfiguredProxy( $ip ) {
global $wgSquidServers, $wgSquidServersNoPurge;
- wfProfileIn( __METHOD__ );
// Quick check of known singular proxy servers
$trusted = in_array( $ip, $wgSquidServers );
@@ -723,7 +741,6 @@ class IP {
}
$trusted = self::$proxyIpSet->match( $ip );
}
- wfProfileOut( __METHOD__ );
return $trusted;
}
diff --git a/includes/utils/MWCryptHKDF.php b/includes/utils/MWCryptHKDF.php
index cc136793..950dd846 100644
--- a/includes/utils/MWCryptHKDF.php
+++ b/includes/utils/MWCryptHKDF.php
@@ -103,6 +103,7 @@ class MWCryptHKDF {
* @param string $algorithm Name of hashing algorithm
* @param BagOStuff $cache
* @param string|array $context Context to mix into HKDF context
+ * @throws MWException
*/
public function __construct( $secretKeyMaterial, $algorithm, $cache, $context ) {
if ( strlen( $secretKeyMaterial ) < 16 ) {
@@ -157,6 +158,7 @@ class MWCryptHKDF {
/**
* Return a singleton instance, based on the global configs.
* @return HKDF
+ * @throws MWException
*/
protected static function singleton() {
global $wgHKDFAlgorithm, $wgHKDFSecret, $wgSecretKey;
@@ -271,14 +273,15 @@ class MWCryptHKDF {
*
* @param string $hash Hashing Algorithm
* @param string $prk A pseudorandom key of at least HashLen octets
- * (usually, the output from the extract step)
+ * (usually, the output from the extract step)
* @param string $info Optional context and application specific information
- * (can be a zero-length string)
+ * (can be a zero-length string)
* @param int $bytes Length of output keying material in bytes
- * (<= 255*HashLen)
+ * (<= 255*HashLen)
* @param string &$lastK Set by this function to the last block of the expansion.
- * In MediaWiki, this is used to seed future Extractions.
+ * In MediaWiki, this is used to seed future Extractions.
* @return string Cryptographically secure random string $bytes long
+ * @throws MWException
*/
private static function HKDFExpand( $hash, $prk, $info, $bytes, &$lastK = '' ) {
$hashLen = MWCryptHKDF::$hashLength[$hash];
diff --git a/includes/utils/MWCryptRand.php b/includes/utils/MWCryptRand.php
index b602f78e..e6c0e784 100644
--- a/includes/utils/MWCryptRand.php
+++ b/includes/utils/MWCryptRand.php
@@ -294,7 +294,6 @@ class MWCryptRand {
* @see self::generate()
*/
public function realGenerate( $bytes, $forceStrong = false ) {
- wfProfileIn( __METHOD__ );
wfDebug( __METHOD__ . ": Generating cryptographic random bytes for " .
wfGetAllCallers( 5 ) . "\n" );
@@ -314,7 +313,6 @@ class MWCryptRand {
// entropy so this is also preferable to just trying to read urandom because it may work
// on Windows systems as well.
if ( function_exists( 'mcrypt_create_iv' ) ) {
- wfProfileIn( __METHOD__ . '-mcrypt' );
$rem = $bytes - strlen( $buffer );
$iv = mcrypt_create_iv( $rem, MCRYPT_DEV_URANDOM );
if ( $iv === false ) {
@@ -324,7 +322,6 @@ class MWCryptRand {
wfDebug( __METHOD__ . ": mcrypt_create_iv generated " . strlen( $iv ) .
" bytes of randomness.\n" );
}
- wfProfileOut( __METHOD__ . '-mcrypt' );
}
}
@@ -337,7 +334,6 @@ class MWCryptRand {
if ( function_exists( 'openssl_random_pseudo_bytes' )
&& ( !wfIsWindows() || version_compare( PHP_VERSION, '5.3.4', '>=' ) )
) {
- wfProfileIn( __METHOD__ . '-openssl' );
$rem = $bytes - strlen( $buffer );
$openssl_bytes = openssl_random_pseudo_bytes( $rem, $openssl_strong );
if ( $openssl_bytes === false ) {
@@ -353,7 +349,6 @@ class MWCryptRand {
// using it use it's say on whether the randomness is strong
$this->strong = !!$openssl_strong;
}
- wfProfileOut( __METHOD__ . '-openssl' );
}
}
@@ -361,7 +356,6 @@ class MWCryptRand {
if ( strlen( $buffer ) < $bytes &&
( function_exists( 'stream_set_read_buffer' ) || $forceStrong )
) {
- wfProfileIn( __METHOD__ . '-fopen-urandom' );
$rem = $bytes - strlen( $buffer );
if ( !function_exists( 'stream_set_read_buffer' ) && $forceStrong ) {
wfDebug( __METHOD__ . ": Was forced to read from /dev/urandom " .
@@ -400,7 +394,6 @@ class MWCryptRand {
} else {
wfDebug( __METHOD__ . ": /dev/urandom could not be opened.\n" );
}
- wfProfileOut( __METHOD__ . '-fopen-urandom' );
}
// If we cannot use or generate enough data from a secure source
@@ -414,12 +407,10 @@ class MWCryptRand {
": Falling back to using a pseudo random state to generate randomness.\n" );
}
while ( strlen( $buffer ) < $bytes ) {
- wfProfileIn( __METHOD__ . '-fallback' );
$buffer .= $this->hmac( $this->randomState(), mt_rand() );
// This code is never really cryptographically strong, if we use it
// at all, then set strong to false.
$this->strong = false;
- wfProfileOut( __METHOD__ . '-fallback' );
}
// Once the buffer has been filled up with enough random data to fulfill
@@ -431,8 +422,6 @@ class MWCryptRand {
wfDebug( __METHOD__ . ": " . strlen( $buffer ) .
" bytes of randomness leftover in the buffer.\n" );
- wfProfileOut( __METHOD__ );
-
return $generated;
}
diff --git a/includes/utils/MWFunction.php b/includes/utils/MWFunction.php
index 3a0492dc..fa7eebe8 100644
--- a/includes/utils/MWFunction.php
+++ b/includes/utils/MWFunction.php
@@ -23,41 +23,18 @@
class MWFunction {
/**
- * @deprecated since 1.22; use call_user_func()
- * @param callable $callback
- * @return mixed
- */
- public static function call( $callback ) {
- wfDeprecated( __METHOD__, '1.22' );
- $args = func_get_args();
-
- return call_user_func_array( 'call_user_func', $args );
- }
-
- /**
- * @deprecated since 1.22; use call_user_func_array()
- * @param callable $callback
- * @param array $argsarams
- * @return mixed
- */
- public static function callArray( $callback, $argsarams ) {
- wfDeprecated( __METHOD__, '1.22' );
-
- return call_user_func_array( $callback, $argsarams );
- }
-
- /**
* @param string $class
* @param array $args
* @return object
+ * @deprecated 1.25 Use ObjectFactory::getObjectFromSpec() instead
*/
public static function newObj( $class, $args = array() ) {
- if ( !count( $args ) ) {
- return new $class;
- }
-
- $ref = new ReflectionClass( $class );
+ wfDeprecated( __METHOD__, '1.25' );
- return $ref->newInstanceArgs( $args );
+ return ObjectFactory::getObjectFromSpec( array(
+ 'class' => $class,
+ 'args' => $args,
+ 'closure_expansion' => false,
+ ) );
}
}
diff --git a/includes/utils/StringUtils.php b/includes/utils/StringUtils.php
deleted file mode 100644
index 86f45122..00000000
--- a/includes/utils/StringUtils.php
+++ /dev/null
@@ -1,612 +0,0 @@
-<?php
-/**
- * Methods to play with strings.
- *
- * 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
- */
-
-/**
- * A collection of static methods to play with strings.
- */
-class StringUtils {
- /**
- * Test whether a string is valid UTF-8.
- *
- * The function check for invalid byte sequences, overlong encoding but
- * not for different normalisations.
- *
- * This relies internally on the mbstring function mb_check_encoding()
- * hardcoded to check against UTF-8. Whenever the function is not available
- * we fallback to a pure PHP implementation. Setting $disableMbstring to
- * true will skip the use of mb_check_encoding, this is mostly intended for
- * unit testing our internal implementation.
- *
- * @since 1.21
- * @note In MediaWiki 1.21, this function did not provide proper UTF-8 validation.
- * In particular, the pure PHP code path did not in fact check for overlong forms.
- * Beware of this when backporting code to that version of MediaWiki.
- *
- * @param string $value String to check
- * @param bool $disableMbstring Whether to use the pure PHP
- * implementation instead of trying mb_check_encoding. Intended for unit
- * testing. Default: false
- *
- * @return bool Whether the given $value is a valid UTF-8 encoded string
- */
- static function isUtf8( $value, $disableMbstring = false ) {
- $value = (string)$value;
-
- // If the mbstring extension is loaded, use it. However, before PHP 5.4, values above
- // U+10FFFF are incorrectly allowed, so we have to check for them separately.
- if ( !$disableMbstring && function_exists( 'mb_check_encoding' ) ) {
- static $newPHP;
- if ( $newPHP === null ) {
- $newPHP = !mb_check_encoding( "\xf4\x90\x80\x80", 'UTF-8' );
- }
-
- return mb_check_encoding( $value, 'UTF-8' ) &&
- ( $newPHP || preg_match( "/\xf4[\x90-\xbf]|[\xf5-\xff]/S", $value ) === 0 );
- }
-
- if ( preg_match( "/[\x80-\xff]/S", $value ) === 0 ) {
- // String contains only ASCII characters, has to be valid
- return true;
- }
-
- // PCRE implements repetition using recursion; to avoid a stack overflow (and segfault)
- // for large input, we check for invalid sequences (<= 5 bytes) rather than valid
- // sequences, which can be as long as the input string is. Multiple short regexes are
- // used rather than a single long regex for performance.
- static $regexes;
- if ( $regexes === null ) {
- $cont = "[\x80-\xbf]";
- $after = "(?!$cont)"; // "(?:[^\x80-\xbf]|$)" would work here
- $regexes = array(
- // Continuation byte at the start
- "/^$cont/",
-
- // ASCII byte followed by a continuation byte
- "/[\\x00-\x7f]$cont/S",
-
- // Illegal byte
- "/[\xc0\xc1\xf5-\xff]/S",
-
- // Invalid 2-byte sequence, or valid one then an extra continuation byte
- "/[\xc2-\xdf](?!$cont$after)/S",
-
- // Invalid 3-byte sequence, or valid one then an extra continuation byte
- "/\xe0(?![\xa0-\xbf]$cont$after)/",
- "/[\xe1-\xec\xee\xef](?!$cont{2}$after)/S",
- "/\xed(?![\x80-\x9f]$cont$after)/",
-
- // Invalid 4-byte sequence, or valid one then an extra continuation byte
- "/\xf0(?![\x90-\xbf]$cont{2}$after)/",
- "/[\xf1-\xf3](?!$cont{3}$after)/S",
- "/\xf4(?![\x80-\x8f]$cont{2}$after)/",
- );
- }
-
- foreach ( $regexes as $regex ) {
- if ( preg_match( $regex, $value ) !== 0 ) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Perform an operation equivalent to
- *
- * preg_replace( "!$startDelim(.*?)$endDelim!", $replace, $subject );
- *
- * except that it's worst-case O(N) instead of O(N^2)
- *
- * Compared to delimiterReplace(), this implementation is fast but memory-
- * hungry and inflexible. The memory requirements are such that I don't
- * recommend using it on anything but guaranteed small chunks of text.
- *
- * @param string $startDelim
- * @param string $endDelim
- * @param string $replace
- * @param string $subject
- *
- * @return string
- */
- static function hungryDelimiterReplace( $startDelim, $endDelim, $replace, $subject ) {
- $segments = explode( $startDelim, $subject );
- $output = array_shift( $segments );
- foreach ( $segments as $s ) {
- $endDelimPos = strpos( $s, $endDelim );
- if ( $endDelimPos === false ) {
- $output .= $startDelim . $s;
- } else {
- $output .= $replace . substr( $s, $endDelimPos + strlen( $endDelim ) );
- }
- }
-
- return $output;
- }
-
- /**
- * Perform an operation equivalent to
- *
- * preg_replace_callback( "!$startDelim(.*)$endDelim!s$flags", $callback, $subject )
- *
- * This implementation is slower than hungryDelimiterReplace but uses far less
- * memory. The delimiters are literal strings, not regular expressions.
- *
- * If the start delimiter ends with an initial substring of the end delimiter,
- * e.g. in the case of C-style comments, the behavior differs from the model
- * regex. In this implementation, the end must share no characters with the
- * start, so e.g. /*\/ is not considered to be both the start and end of a
- * comment. /*\/xy/*\/ is considered to be a single comment with contents /xy/.
- *
- * @param string $startDelim Start delimiter
- * @param string $endDelim End delimiter
- * @param callable $callback Function to call on each match
- * @param string $subject
- * @param string $flags Regular expression flags
- * @throws MWException
- * @return string
- */
- static function delimiterReplaceCallback( $startDelim, $endDelim, $callback,
- $subject, $flags = ''
- ) {
- $inputPos = 0;
- $outputPos = 0;
- $output = '';
- $foundStart = false;
- $encStart = preg_quote( $startDelim, '!' );
- $encEnd = preg_quote( $endDelim, '!' );
- $strcmp = strpos( $flags, 'i' ) === false ? 'strcmp' : 'strcasecmp';
- $endLength = strlen( $endDelim );
- $m = array();
-
- while ( $inputPos < strlen( $subject ) &&
- preg_match( "!($encStart)|($encEnd)!S$flags", $subject, $m, PREG_OFFSET_CAPTURE, $inputPos )
- ) {
- $tokenOffset = $m[0][1];
- if ( $m[1][0] != '' ) {
- if ( $foundStart &&
- $strcmp( $endDelim, substr( $subject, $tokenOffset, $endLength ) ) == 0
- ) {
- # An end match is present at the same location
- $tokenType = 'end';
- $tokenLength = $endLength;
- } else {
- $tokenType = 'start';
- $tokenLength = strlen( $m[0][0] );
- }
- } elseif ( $m[2][0] != '' ) {
- $tokenType = 'end';
- $tokenLength = strlen( $m[0][0] );
- } else {
- throw new MWException( 'Invalid delimiter given to ' . __METHOD__ );
- }
-
- if ( $tokenType == 'start' ) {
- # Only move the start position if we haven't already found a start
- # This means that START START END matches outer pair
- if ( !$foundStart ) {
- # Found start
- $inputPos = $tokenOffset + $tokenLength;
- # Write out the non-matching section
- $output .= substr( $subject, $outputPos, $tokenOffset - $outputPos );
- $outputPos = $tokenOffset;
- $contentPos = $inputPos;
- $foundStart = true;
- } else {
- # Move the input position past the *first character* of START,
- # to protect against missing END when it overlaps with START
- $inputPos = $tokenOffset + 1;
- }
- } elseif ( $tokenType == 'end' ) {
- if ( $foundStart ) {
- # Found match
- $output .= call_user_func( $callback, array(
- substr( $subject, $outputPos, $tokenOffset + $tokenLength - $outputPos ),
- substr( $subject, $contentPos, $tokenOffset - $contentPos )
- ) );
- $foundStart = false;
- } else {
- # Non-matching end, write it out
- $output .= substr( $subject, $inputPos, $tokenOffset + $tokenLength - $outputPos );
- }
- $inputPos = $outputPos = $tokenOffset + $tokenLength;
- } else {
- throw new MWException( 'Invalid delimiter given to ' . __METHOD__ );
- }
- }
- if ( $outputPos < strlen( $subject ) ) {
- $output .= substr( $subject, $outputPos );
- }
-
- return $output;
- }
-
- /**
- * Perform an operation equivalent to
- *
- * preg_replace( "!$startDelim(.*)$endDelim!$flags", $replace, $subject )
- *
- * @param string $startDelim Start delimiter regular expression
- * @param string $endDelim End delimiter regular expression
- * @param string $replace Replacement string. May contain $1, which will be
- * replaced by the text between the delimiters
- * @param string $subject String to search
- * @param string $flags Regular expression flags
- * @return string The string with the matches replaced
- */
- static function delimiterReplace( $startDelim, $endDelim, $replace, $subject, $flags = '' ) {
- $replacer = new RegexlikeReplacer( $replace );
-
- return self::delimiterReplaceCallback( $startDelim, $endDelim,
- $replacer->cb(), $subject, $flags );
- }
-
- /**
- * More or less "markup-safe" explode()
- * Ignores any instances of the separator inside <...>
- * @param string $separator
- * @param string $text
- * @return array
- */
- static function explodeMarkup( $separator, $text ) {
- $placeholder = "\x00";
-
- // Remove placeholder instances
- $text = str_replace( $placeholder, '', $text );
-
- // Replace instances of the separator inside HTML-like tags with the placeholder
- $replacer = new DoubleReplacer( $separator, $placeholder );
- $cleaned = StringUtils::delimiterReplaceCallback( '<', '>', $replacer->cb(), $text );
-
- // Explode, then put the replaced separators back in
- $items = explode( $separator, $cleaned );
- foreach ( $items as $i => $str ) {
- $items[$i] = str_replace( $placeholder, $separator, $str );
- }
-
- return $items;
- }
-
- /**
- * Escape a string to make it suitable for inclusion in a preg_replace()
- * replacement parameter.
- *
- * @param string $string
- * @return string
- */
- static function escapeRegexReplacement( $string ) {
- $string = str_replace( '\\', '\\\\', $string );
- $string = str_replace( '$', '\\$', $string );
-
- return $string;
- }
-
- /**
- * Workalike for explode() with limited memory usage.
- * Returns an Iterator
- * @param string $separator
- * @param string $subject
- * @return ArrayIterator|ExplodeIterator
- */
- static function explode( $separator, $subject ) {
- if ( substr_count( $subject, $separator ) > 1000 ) {
- return new ExplodeIterator( $separator, $subject );
- } else {
- return new ArrayIterator( explode( $separator, $subject ) );
- }
- }
-}
-
-/**
- * Base class for "replacers", objects used in preg_replace_callback() and
- * StringUtils::delimiterReplaceCallback()
- */
-class Replacer {
- /**
- * @return array
- */
- function cb() {
- return array( &$this, 'replace' );
- }
-}
-
-/**
- * Class to replace regex matches with a string similar to that used in preg_replace()
- */
-class RegexlikeReplacer extends Replacer {
- private $r;
-
- /**
- * @param string $r
- */
- function __construct( $r ) {
- $this->r = $r;
- }
-
- /**
- * @param array $matches
- * @return string
- */
- function replace( $matches ) {
- $pairs = array();
- foreach ( $matches as $i => $match ) {
- $pairs["\$$i"] = $match;
- }
-
- return strtr( $this->r, $pairs );
- }
-}
-
-/**
- * Class to perform secondary replacement within each replacement string
- */
-class DoubleReplacer extends Replacer {
- /**
- * @param mixed $from
- * @param mixed $to
- * @param int $index
- */
- function __construct( $from, $to, $index = 0 ) {
- $this->from = $from;
- $this->to = $to;
- $this->index = $index;
- }
-
- /**
- * @param array $matches
- * @return mixed
- */
- function replace( $matches ) {
- return str_replace( $this->from, $this->to, $matches[$this->index] );
- }
-}
-
-/**
- * Class to perform replacement based on a simple hashtable lookup
- */
-class HashtableReplacer extends Replacer {
- private $table, $index;
-
- /**
- * @param array $table
- * @param int $index
- */
- function __construct( $table, $index = 0 ) {
- $this->table = $table;
- $this->index = $index;
- }
-
- /**
- * @param array $matches
- * @return mixed
- */
- function replace( $matches ) {
- return $this->table[$matches[$this->index]];
- }
-}
-
-/**
- * Replacement array for FSS with fallback to strtr()
- * Supports lazy initialisation of FSS resource
- */
-class ReplacementArray {
- private $data = false;
- private $fss = false;
-
- /**
- * Create an object with the specified replacement array
- * The array should have the same form as the replacement array for strtr()
- * @param array $data
- */
- function __construct( $data = array() ) {
- $this->data = $data;
- }
-
- /**
- * @return array
- */
- function __sleep() {
- return array( 'data' );
- }
-
- function __wakeup() {
- $this->fss = false;
- }
-
- /**
- * Set the whole replacement array at once
- * @param array $data
- */
- function setArray( $data ) {
- $this->data = $data;
- $this->fss = false;
- }
-
- /**
- * @return array|bool
- */
- function getArray() {
- return $this->data;
- }
-
- /**
- * Set an element of the replacement array
- * @param string $from
- * @param string $to
- */
- function setPair( $from, $to ) {
- $this->data[$from] = $to;
- $this->fss = false;
- }
-
- /**
- * @param array $data
- */
- function mergeArray( $data ) {
- $this->data = array_merge( $this->data, $data );
- $this->fss = false;
- }
-
- /**
- * @param ReplacementArray $other
- */
- function merge( $other ) {
- $this->data = array_merge( $this->data, $other->data );
- $this->fss = false;
- }
-
- /**
- * @param string $from
- */
- function removePair( $from ) {
- unset( $this->data[$from] );
- $this->fss = false;
- }
-
- /**
- * @param array $data
- */
- function removeArray( $data ) {
- foreach ( $data as $from => $to ) {
- $this->removePair( $from );
- }
- $this->fss = false;
- }
-
- /**
- * @param string $subject
- * @return string
- */
- function replace( $subject ) {
- if ( function_exists( 'fss_prep_replace' ) ) {
- wfProfileIn( __METHOD__ . '-fss' );
- if ( $this->fss === false ) {
- $this->fss = fss_prep_replace( $this->data );
- }
- $result = fss_exec_replace( $this->fss, $subject );
- wfProfileOut( __METHOD__ . '-fss' );
- } else {
- wfProfileIn( __METHOD__ . '-strtr' );
- $result = strtr( $subject, $this->data );
- wfProfileOut( __METHOD__ . '-strtr' );
- }
-
- return $result;
- }
-}
-
-/**
- * An iterator which works exactly like:
- *
- * foreach ( explode( $delim, $s ) as $element ) {
- * ...
- * }
- *
- * Except it doesn't use 193 byte per element
- */
-class ExplodeIterator implements Iterator {
- // The subject string
- private $subject, $subjectLength;
-
- // The delimiter
- private $delim, $delimLength;
-
- // The position of the start of the line
- private $curPos;
-
- // The position after the end of the next delimiter
- private $endPos;
-
- // The current token
- private $current;
-
- /**
- * Construct a DelimIterator
- * @param string $delim
- * @param string $subject
- */
- function __construct( $delim, $subject ) {
- $this->subject = $subject;
- $this->delim = $delim;
-
- // Micro-optimisation (theoretical)
- $this->subjectLength = strlen( $subject );
- $this->delimLength = strlen( $delim );
-
- $this->rewind();
- }
-
- function rewind() {
- $this->curPos = 0;
- $this->endPos = strpos( $this->subject, $this->delim );
- $this->refreshCurrent();
- }
-
- function refreshCurrent() {
- if ( $this->curPos === false ) {
- $this->current = false;
- } elseif ( $this->curPos >= $this->subjectLength ) {
- $this->current = '';
- } elseif ( $this->endPos === false ) {
- $this->current = substr( $this->subject, $this->curPos );
- } else {
- $this->current = substr( $this->subject, $this->curPos, $this->endPos - $this->curPos );
- }
- }
-
- function current() {
- return $this->current;
- }
-
- /**
- * @return int|bool Current position or boolean false if invalid
- */
- function key() {
- return $this->curPos;
- }
-
- /**
- * @return string
- */
- function next() {
- if ( $this->endPos === false ) {
- $this->curPos = false;
- } else {
- $this->curPos = $this->endPos + $this->delimLength;
- if ( $this->curPos >= $this->subjectLength ) {
- $this->endPos = false;
- } else {
- $this->endPos = strpos( $this->subject, $this->delim, $this->curPos );
- }
- }
- $this->refreshCurrent();
-
- return $this->current;
- }
-
- /**
- * @return bool
- */
- function valid() {
- return $this->curPos !== false;
- }
-}
diff --git a/includes/utils/UIDGenerator.php b/includes/utils/UIDGenerator.php
index 5346afa6..92415877 100644
--- a/includes/utils/UIDGenerator.php
+++ b/includes/utils/UIDGenerator.php
@@ -119,6 +119,7 @@ class UIDGenerator {
/**
* @param array $info (UIDGenerator::millitime(), counter, clock sequence)
* @return string 88 bits
+ * @throws MWException
*/
protected function getTimestampedID88( array $info ) {
list( $time, $counter ) = $info;
@@ -163,6 +164,7 @@ class UIDGenerator {
/**
* @param array $info (UIDGenerator::millitime(), counter, clock sequence)
* @return string 128 bits
+ * @throws MWException
*/
protected function getTimestampedID128( array $info ) {
list( $time, $counter, $clkSeq ) = $info;
@@ -260,6 +262,7 @@ class UIDGenerator {
* @param int $count Number of IDs to return (1 to 10000)
* @param int $flags (supports UIDGenerator::QUICK_VOLATILE)
* @return array Ordered list of float integer values
+ * @throws MWException
*/
protected function getSequentialPerNodeIDs( $bucket, $bits, $count, $flags ) {
if ( $count <= 0 ) {
@@ -278,7 +281,7 @@ class UIDGenerator {
if ( ( $flags & self::QUICK_VOLATILE ) && PHP_SAPI !== 'cli' ) {
try {
$cache = ObjectCache::newAccelerator( array() );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
// not supported
}
}
@@ -436,6 +439,7 @@ class UIDGenerator {
/**
* @param array $time Result of UIDGenerator::millitime()
* @return string 46 MSBs of "milliseconds since epoch" in binary (rolls over in 4201)
+ * @throws MWException
*/
protected function millisecondsSinceEpochBinary( array $time ) {
list( $sec, $msec ) = $time;
diff --git a/includes/utils/ZipDirectoryReader.php b/includes/utils/ZipDirectoryReader.php
index bc849766..86960aa1 100644
--- a/includes/utils/ZipDirectoryReader.php
+++ b/includes/utils/ZipDirectoryReader.php
@@ -186,6 +186,7 @@ class ZipDirectoryReader {
* Throw an error, and log a debug message
* @param mixed $code
* @param string $debugMessage
+ * @throws ZipDirectoryReaderError
*/
function error( $code, $debugMessage ) {
wfDebug( __CLASS__ . ": Fatal error: $debugMessage\n" );
diff --git a/index.php b/index.php
index b35967b3..67bd0c9a 100644
--- a/index.php
+++ b/index.php
@@ -30,15 +30,10 @@
* @file
*/
-# Bail on old versions of PHP. Pretty much every other file in the codebase
-# has structures (try/catch, foo()->bar(), etc etc) which throw parse errors in
-# PHP 4. Setup.php and ObjectCache.php have structures invalid in PHP 5.0 and
-# 5.1, respectively.
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
- // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
- require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
- wfPHPVersionError( 'index.php' );
-}
+// Bail on old versions of PHP, or if composer has not been run yet to install
+// dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
+require_once dirname( __FILE__ ) . '/includes/PHPVersionCheck.php';
+wfEntryPointCheck( 'index.php' );
require __DIR__ . '/includes/WebStart.php';
diff --git a/index.php5 b/index.php5
index b2ffe508..2a65c713 100644
--- a/index.php5
+++ b/index.php5
@@ -21,4 +21,6 @@
* @file
*/
+define( 'MW_ENTRY_PHP5', true );
+
require './index.php';
diff --git a/jsduck.json b/jsduck.json
index ef92fa12..ae723e9e 100644
--- a/jsduck.json
+++ b/jsduck.json
@@ -2,12 +2,12 @@
"--title": "MediaWiki core - Documentation",
"--categories": "maintenance/jsduck/categories.json",
"--eg-iframe": "maintenance/jsduck/eg-iframe.html",
- "--tags": "maintenance/jsduck/CustomTags.rb",
+ "--tags": "maintenance/jsduck/custom_tags.rb",
"--warnings": ["-nodoc(class,public)"],
"--builtin-classes": true,
"--processes": "0",
"--warnings-exit-nonzero": true,
- "--external": "HTMLElement,HTMLDocument,Window,File",
+ "--external": "HTMLElement,HTMLDocument,Window,File,MouseEvent,KeyboardEvent",
"--output": "docs/js",
"--": [
"maintenance/jsduck/external.js",
@@ -15,8 +15,10 @@
"resources/src/mediawiki.action",
"resources/src/mediawiki.api",
"resources/src/mediawiki.language",
+ "resources/src/mediawiki.messagePoster",
"resources/src/mediawiki.page",
"resources/src/mediawiki.special",
+ "resources/src/mediawiki.toolbar",
"resources/src/jquery/jquery.accessKeyLabel.js",
"resources/src/jquery/jquery.arrowSteps.js",
"resources/src/jquery/jquery.autoEllipsis.js",
@@ -24,7 +26,6 @@
"resources/src/jquery/jquery.byteLength.js",
"resources/src/jquery/jquery.byteLimit.js",
"resources/src/jquery/jquery.checkboxShiftClick.js",
- "resources/src/jquery/jquery.client.js",
"resources/src/jquery/jquery.colorUtil.js",
"resources/src/jquery/jquery.confirmable.js",
"resources/src/jquery/jquery.footHovzer.js",
@@ -33,7 +34,9 @@
"resources/src/jquery/jquery.localize.js",
"resources/src/jquery/jquery.makeCollapsible.js",
"resources/src/jquery/jquery.spinner.js",
+ "resources/src/jquery/jquery.suggestions.js",
"resources/src/jquery/jquery.tabIndex.js",
+ "resources/lib/jquery.client/jquery.client.js",
"resources/lib/oojs",
"resources/lib/oojs-ui"
]
diff --git a/languages/ConverterRule.php b/languages/ConverterRule.php
index a5e960f9..e6625c1a 100644
--- a/languages/ConverterRule.php
+++ b/languages/ConverterRule.php
@@ -445,10 +445,11 @@ class ConverterRule {
}
/**
- * @todo FIXME: code this function :)
+ * Checks if there are conversion rules.
+ * @return bool
*/
public function hasRules() {
- // TODO:
+ return $this->mRules !== '';
}
/**
diff --git a/languages/Language.php b/languages/Language.php
index ad198c35..07d47ed6 100644
--- a/languages/Language.php
+++ b/languages/Language.php
@@ -144,6 +144,12 @@ class Language {
static private $fallbackLanguageCache = array();
/**
+ * Cache for language names
+ * @var MapCacheLRU|null
+ */
+ static private $languageNameCache;
+
+ /**
* Get a cached or new language object for a given language code
* @param string $code
* @return Language
@@ -312,7 +318,7 @@ class Language {
// see bugs 37564, 37587, 36938
$cache[$code] =
strcspn( $code, ":/\\\000&<>'\"" ) === strlen( $code )
- && !preg_match( Title::getTitleInvalidRegex(), $code );
+ && !preg_match( MediaWikiTitleCodec::getTitleInvalidRegex(), $code );
return $cache[$code];
}
@@ -494,7 +500,7 @@ class Language {
# Re-order by namespace ID number...
ksort( $this->namespaceNames );
- wfRunHooks( 'LanguageGetNamespaces', array( &$this->namespaceNames ) );
+ Hooks::run( 'LanguageGetNamespaces', array( &$this->namespaceNames ) );
}
return $this->namespaceNames;
@@ -581,7 +587,7 @@ class Language {
global $wgExtraGenderNamespaces;
$ns = $wgExtraGenderNamespaces +
- self::$dataCache->getItem( $this->mCode, 'namespaceGenderAliases' );
+ (array)self::$dataCache->getItem( $this->mCode, 'namespaceGenderAliases' );
return isset( $ns[$index][$gender] ) ? $ns[$index][$gender] : $this->getNsText( $index );
}
@@ -848,6 +854,31 @@ class Language {
* @since 1.20
*/
public static function fetchLanguageNames( $inLanguage = null, $include = 'mw' ) {
+ $cacheKey = $inLanguage === null ? 'null' : $inLanguage;
+ $cacheKey .= ":$include";
+ if ( self::$languageNameCache === null ) {
+ self::$languageNameCache = new MapCacheLRU( 20 );
+ }
+ if ( self::$languageNameCache->has( $cacheKey ) ) {
+ $ret = self::$languageNameCache->get( $cacheKey );
+ } else {
+ $ret = self::fetchLanguageNamesUncached( $inLanguage, $include );
+ self::$languageNameCache->set( $cacheKey, $ret );
+ }
+ return $ret;
+ }
+
+ /**
+ * Uncached helper for fetchLanguageNames
+ * @param null|string $inLanguage Code of language in which to return the names
+ * Use null for autonyms (native names)
+ * @param string $include One of:
+ * 'all' all available languages
+ * 'mw' only if the language is defined in MediaWiki or wgExtraLanguageNames (default)
+ * 'mwfile' only if the language is in 'mw' *and* has a message file
+ * @return array Language code => language name
+ */
+ private static function fetchLanguageNamesUncached( $inLanguage = null, $include = 'mw' ) {
global $wgExtraLanguageNames;
static $coreLanguageNames;
@@ -865,7 +896,7 @@ class Language {
if ( $inLanguage ) {
# TODO: also include when $inLanguage is null, when this code is more efficient
- wfRunHooks( 'LanguageGetTranslatedLanguageNames', array( &$names, $inLanguage ) );
+ Hooks::run( 'LanguageGetTranslatedLanguageNames', array( &$names, $inLanguage ) );
}
$mwNames = $wgExtraLanguageNames + $coreLanguageNames;
@@ -878,6 +909,7 @@ class Language {
}
if ( $include === 'all' ) {
+ ksort( $names );
return $names;
}
@@ -899,9 +931,11 @@ class Language {
}
}
+ ksort( $namesMwFile );
return $namesMwFile;
}
+ ksort( $returnMw );
# 'mw' option; default if it's not one of the other two options (all/mwfile)
return $returnMw;
}
@@ -926,7 +960,17 @@ class Language {
* @return string
*/
function getMessageFromDB( $msg ) {
- return wfMessage( $msg )->inLanguage( $this )->text();
+ return $this->msg( $msg )->text();
+ }
+
+ /**
+ * Get message object in this language. Only for use inside this class.
+ *
+ * @param string $msg Message name
+ * @return Message
+ */
+ protected function msg( $msg ) {
+ return wfMessage( $msg )->inLanguage( $this );
}
/**
@@ -1210,7 +1254,9 @@ class Language {
break;
case 'D':
$usedDay = true;
- $s .= $this->getWeekdayAbbreviation( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1 );
+ $s .= $this->getWeekdayAbbreviation(
+ Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1
+ );
break;
case 'j':
$usedDay = true;
@@ -1239,7 +1285,9 @@ class Language {
break;
case 'l':
$usedDay = true;
- $s .= $this->getWeekdayName( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1 );
+ $s .= $this->getWeekdayName(
+ Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'w' ) + 1
+ );
break;
case 'F':
$usedMonth = true;
@@ -1486,43 +1534,72 @@ class Language {
} elseif ( $usedHour ) {
$ttl = 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
} elseif ( $usedAMPM ) {
- $ttl = 43200 - ( substr( $ts, 8, 2 ) % 12 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
- } elseif ( $usedDay || $usedHebrewMonth || $usedIranianMonth || $usedHijriMonth || $usedHebrewYear || $usedIranianYear || $usedHijriYear || $usedTennoYear ) {
- // @todo Someone who understands the non-Gregorian calendars should write proper logic for them
- // so that they don't need purged every day.
- $ttl = 86400 - substr( $ts, 8, 2 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+ $ttl = 43200 - ( substr( $ts, 8, 2 ) % 12 ) * 3600 -
+ substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+ } elseif (
+ $usedDay ||
+ $usedHebrewMonth ||
+ $usedIranianMonth ||
+ $usedHijriMonth ||
+ $usedHebrewYear ||
+ $usedIranianYear ||
+ $usedHijriYear ||
+ $usedTennoYear
+ ) {
+ // @todo Someone who understands the non-Gregorian calendars
+ // should write proper logic for them so that they don't need purged every day.
+ $ttl = 86400 - substr( $ts, 8, 2 ) * 3600 -
+ substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
} else {
$possibleTtls = array();
- $timeRemainingInDay = 86400 - substr( $ts, 8, 2 ) * 3600 - substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
+ $timeRemainingInDay = 86400 - substr( $ts, 8, 2 ) * 3600 -
+ substr( $ts, 10, 2 ) * 60 - substr( $ts, 12, 2 );
if ( $usedWeek ) {
- $possibleTtls[] = ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 + $timeRemainingInDay;
+ $possibleTtls[] =
+ ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 +
+ $timeRemainingInDay;
} elseif ( $usedISOYear ) {
// December 28th falls on the last ISO week of the year, every year.
// The last ISO week of a year can be 52 or 53.
- $lastWeekOfISOYear = DateTime::createFromFormat( 'Ymd', substr( $ts, 0, 4 ) . '1228', $zone ?: new DateTimeZone( 'UTC' ) )->format( 'W' );
+ $lastWeekOfISOYear = DateTime::createFromFormat(
+ 'Ymd',
+ substr( $ts, 0, 4 ) . '1228',
+ $zone ?: new DateTimeZone( 'UTC' )
+ )->format( 'W' );
$currentISOWeek = Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'W' );
$weeksRemaining = $lastWeekOfISOYear - $currentISOWeek;
- $timeRemainingInWeek = ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400 + $timeRemainingInDay;
+ $timeRemainingInWeek =
+ ( 7 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'N' ) ) * 86400
+ + $timeRemainingInDay;
$possibleTtls[] = $weeksRemaining * 604800 + $timeRemainingInWeek;
}
if ( $usedMonth ) {
- $possibleTtls[] = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 't' ) - substr( $ts, 6, 2 ) ) * 86400 + $timeRemainingInDay;
+ $possibleTtls[] =
+ ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 't' ) -
+ substr( $ts, 6, 2 ) ) * 86400
+ + $timeRemainingInDay;
} elseif ( $usedYear ) {
- $possibleTtls[] = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+ $possibleTtls[] =
+ ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 -
+ Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+ $timeRemainingInDay;
} elseif ( $usedIsLeapYear ) {
$year = substr( $ts, 0, 4 );
- $timeRemainingInYear = ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 - Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+ $timeRemainingInYear =
+ ( Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'L' ) + 364 -
+ Language::dateTimeObjFormat( $dateTimeObj, $ts, $zone, 'z' ) ) * 86400
+ $timeRemainingInDay;
$mod = $year % 4;
if ( $mod || ( !( $year % 100 ) && $year % 400 ) ) {
// this isn't a leap year. see when the next one starts
$nextCandidate = $year - $mod + 4;
if ( $nextCandidate % 100 || !( $nextCandidate % 400 ) ) {
- $possibleTtls[] = ( $nextCandidate - $year - 1 ) * 365 * 86400 + $timeRemainingInYear;
+ $possibleTtls[] = ( $nextCandidate - $year - 1 ) * 365 * 86400 +
+ $timeRemainingInYear;
} else {
- $possibleTtls[] = ( $nextCandidate - $year + 3 ) * 365 * 86400 + $timeRemainingInYear;
+ $possibleTtls[] = ( $nextCandidate - $year + 3 ) * 365 * 86400 +
+ $timeRemainingInYear;
}
} else {
// this is a leap year, so the next year isn't
@@ -2868,7 +2945,7 @@ class Language {
}
// Break down Hangul syllables to grab the first jamo
- $code = utf8ToCodepoint( $matches[1] );
+ $code = UtfNormal\Utils::utf8ToCodepoint( $matches[1] );
if ( $code < 0xac00 || 0xd7a4 <= $code ) {
return $matches[1];
} elseif ( $code < 0xb098 ) {
@@ -2960,7 +3037,7 @@ class Language {
*/
function normalize( $s ) {
global $wgAllUnicodeFixes;
- $s = UtfNormal::cleanUp( $s );
+ $s = UtfNormal\Validator::cleanUp( $s );
if ( $wgAllUnicodeFixes ) {
$s = $this->transformUsingPairFile( 'normalize-ar.ser', $s );
$s = $this->transformUsingPairFile( 'normalize-ml.ser', $s );
@@ -3128,9 +3205,7 @@ class Language {
return;
}
$this->mMagicHookDone = true;
- wfProfileIn( 'LanguageGetMagic' );
- wfRunHooks( 'LanguageGetMagic', array( &$this->mMagicExtensions, $this->getCode() ) );
- wfProfileOut( 'LanguageGetMagic' );
+ Hooks::run( 'LanguageGetMagic', array( &$this->mMagicExtensions, $this->getCode() ) );
}
/**
@@ -3176,7 +3251,7 @@ class Language {
/**
* Get special page names, as an associative array
- * case folded alias => real name
+ * canonical name => array of valid names, including aliases
* @return array
*/
function getSpecialPageAliases() {
@@ -3185,7 +3260,7 @@ class Language {
// Initialise array
$this->mExtendedSpecialPageAliases =
self::$dataCache->getItem( $this->mCode, 'specialPageAliases' );
- wfRunHooks( 'LanguageGetSpecialPageAliases',
+ Hooks::run( 'LanguageGetSpecialPageAliases',
array( &$this->mExtendedSpecialPageAliases, $this->getCode() ) );
}
@@ -3312,7 +3387,7 @@ class Language {
// the string does not have any number part. Eg: .12345
return $sign . $groupedNumber;
}
- $start = $end = strlen( $integerPart[0] );
+ $start = $end = ($integerPart) ? strlen( $integerPart[0] ) : 0;
while ( $start > 0 ) {
$match = $matches[0][$numMatches - 1];
$matchLen = strlen( $match );
@@ -3370,10 +3445,10 @@ class Language {
return '';
}
if ( $m > 0 ) {
- $and = $this->getMessageFromDB( 'and' );
- $space = $this->getMessageFromDB( 'word-separator' );
+ $and = $this->msg( 'and' )->escaped();
+ $space = $this->msg( 'word-separator' )->escaped();
if ( $m > 1 ) {
- $comma = $this->getMessageFromDB( 'comma-separator' );
+ $comma = $this->msg( 'comma-separator' )->escaped();
}
}
$s = $l[$m];
@@ -3853,13 +3928,9 @@ class Language {
}
}
- // Since usually only infinite or indefinite is only on list, so try
- // equivalents if still here.
- $indefs = array( 'infinite', 'infinity', 'indefinite' );
- if ( in_array( $str, $indefs ) ) {
- foreach ( $indefs as $val ) {
- $show = array_search( $val, $duration, true );
- if ( $show !== false ) {
+ if ( wfIsInfinity( $str ) ) {
+ foreach ( $duration as $show => $value ) {
+ if ( wfIsInfinity( $value ) ) {
return htmlspecialchars( trim( $show ) );
}
}
@@ -4228,7 +4299,7 @@ class Language {
public static function getMessagesFileName( $code ) {
global $IP;
$file = self::getFileName( "$IP/languages/messages/Messages", $code, '.php' );
- wfRunHooks( 'Language::getMessagesFileName', array( $code, &$file ) );
+ Hooks::run( 'Language::getMessagesFileName', array( $code, &$file ) );
return $file;
}
@@ -4399,7 +4470,6 @@ class Language {
return array( $wikiUpperChars, $wikiLowerChars );
}
- wfProfileIn( __METHOD__ );
$arr = wfGetPrecompiledData( 'Utf8Case.ser' );
if ( $arr === false ) {
throw new MWException(
@@ -4407,7 +4477,6 @@ class Language {
}
$wikiUpperChars = $arr['wikiUpperChars'];
$wikiLowerChars = $arr['wikiLowerChars'];
- wfProfileOut( __METHOD__ );
return array( $wikiUpperChars, $wikiLowerChars );
}
@@ -4607,17 +4676,22 @@ class Language {
* Make a list item, used by various special pages
*
* @param string $page Page link
- * @param string $details Text between brackets
+ * @param string $details HTML safe text between brackets
* @param bool $oppositedm Add the direction mark opposite to your
* language, to display text properly
- * @return string
+ * @return HTML escaped string
*/
function specialList( $page, $details, $oppositedm = true ) {
- $dirmark = ( $oppositedm ? $this->getDirMark( true ) : '' ) .
- $this->getDirMark();
- $details = $details ? $dirmark . $this->getMessageFromDB( 'word-separator' ) .
- wfMessage( 'parentheses' )->rawParams( $details )->inLanguage( $this )->escaped() : '';
- return $page . $details;
+ if ( !$details ) {
+ return $page;
+ }
+
+ $dirmark = ( $oppositedm ? $this->getDirMark( true ) : '' ) . $this->getDirMark();
+ return
+ $page .
+ $dirmark .
+ $this->msg( 'word-separator' )->escaped() .
+ $this->msg( 'parentheses' )->rawParams( $details )->escaped();
}
/**
diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php
index eae77fb4..844888ee 100644
--- a/languages/LanguageConverter.php
+++ b/languages/LanguageConverter.php
@@ -336,20 +336,17 @@ class LanguageConverter {
* @return string The converted text
*/
public function autoConvert( $text, $toVariant = false ) {
- wfProfileIn( __METHOD__ );
$this->loadTables();
if ( !$toVariant ) {
$toVariant = $this->getPreferredVariant();
if ( !$toVariant ) {
- wfProfileOut( __METHOD__ );
return $text;
}
}
if ( $this->guessVariant( $text, $toVariant ) ) {
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -446,7 +443,6 @@ class LanguageConverter {
$literalIter->next();
}
- wfProfileOut( __METHOD__ );
return $output;
}
@@ -460,14 +456,12 @@ class LanguageConverter {
* @return string Translated text
*/
public function translate( $text, $variant ) {
- wfProfileIn( __METHOD__ );
// If $text is empty or only includes spaces, do nothing
// Otherwise translate it
if ( trim( $text ) ) {
$this->loadTables();
$text = $this->mTables[$variant]->replace( $text );
}
- wfProfileOut( __METHOD__ );
return $text;
}
@@ -478,7 +472,6 @@ class LanguageConverter {
* @return array Variant => converted text
*/
public function autoConvertToAllVariants( $text ) {
- wfProfileIn( __METHOD__ );
$this->loadTables();
$ret = array();
@@ -486,7 +479,6 @@ class LanguageConverter {
$ret[$variant] = $this->translate( $text, $variant );
}
- wfProfileOut( __METHOD__ );
return $ret;
}
@@ -850,18 +842,18 @@ class LanguageConverter {
* @param bool $fromCache Load from memcached? Defaults to true.
*/
function loadTables( $fromCache = true ) {
- global $wgLangConvMemc;
+ global $wgLanguageConverterCacheType;
if ( $this->mTablesLoaded ) {
return;
}
- wfProfileIn( __METHOD__ );
$this->mTablesLoaded = true;
$this->mTables = false;
+ $cache = ObjectCache::getInstance( $wgLanguageConverterCacheType );
if ( $fromCache ) {
wfProfileIn( __METHOD__ . '-cache' );
- $this->mTables = $wgLangConvMemc->get( $this->mCacheKey );
+ $this->mTables = $cache->get( $this->mCacheKey );
wfProfileOut( __METHOD__ . '-cache' );
}
if ( !$this->mTables || !array_key_exists( self::CACHE_VERSION_KEY, $this->mTables ) ) {
@@ -878,10 +870,9 @@ class LanguageConverter {
$this->postLoadTables();
$this->mTables[self::CACHE_VERSION_KEY] = true;
- $wgLangConvMemc->set( $this->mCacheKey, $this->mTables, 43200 );
+ $cache->set( $this->mCacheKey, $this->mTables, 43200 );
wfProfileOut( __METHOD__ . '-recache' );
}
- wfProfileOut( __METHOD__ );
}
/**
diff --git a/languages/Names.php b/languages/Names.php
index 90046765..6c9aa8b7 100644
--- a/languages/Names.php
+++ b/languages/Names.php
@@ -41,6 +41,7 @@
'aa' => 'Qafár af', # Afar
'ab' => 'Аҧсшәа', # Abkhaz
'ace' => 'Acèh', # Aceh
+ 'aeb' => 'تونسي', # Tunisian Arabic
'af' => 'Afrikaans', # Afrikaans
'ak' => 'Akan', # Akan
'aln' => 'Gegë', # Gheg Albanian
@@ -59,6 +60,7 @@
'ast' => 'asturianu', # Asturian
'av' => 'авар', # Avar
'avk' => 'Kotava', # Kotava
+ 'awa' => 'अवधी', # Awadhi
'ay' => 'Aymar aru', # Aymara
'az' => 'azərbaycanca', # Azerbaijani
'azb' => 'تورکجه', # South Azerbaijani
@@ -73,6 +75,7 @@
'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E", # Belarusian in Taraskievica orthography
'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E", # (be-tarask compat)
'bg' => 'български', # Bulgarian
+ 'bgn' => 'بلوچی رخشانی', # Western Balochi
'bh' => 'भोजपुरी', # Bihari macro language. Falls back to Bhojpuri (bho)
'bho' => 'भोजपुरी', # Bhojpuri
'bi' => 'Bislama', # Bislama
@@ -85,6 +88,7 @@
'br' => 'brezhoneg', # Breton
'brh' => 'Bráhuí', # Brahui
'bs' => 'bosanski', # Bosnian
+ 'bto' => 'Iriga Bicolano', # Rinconada Bikol
'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Buginese
'bxr' => 'буряад', # Buryat (Russia)
'ca' => 'català', # Catalan
@@ -322,11 +326,11 @@
'rmy' => 'Romani', # Vlax Romany
'rn' => 'Kirundi', # Rundi/Kirundi/Urundi
'ro' => 'română', # Romanian
- 'roa-rup' => 'Armãneashce', # Aromanian (deprecated code, 'rup' exists in ISO 693-3)
+ 'roa-rup' => 'armãneashti', # Aromanian (deprecated code, 'rup' exists in ISO 693-3)
'roa-tara' => 'tarandíne', # Tarantino
'ru' => 'русский', # Russian
'rue' => 'русиньскый', # Rusyn
- 'rup' => 'Armãneashce', # Aromanian
+ 'rup' => 'armãneashti', # Aromanian
'ruq' => 'Vlăheşte', # Megleno-Romanian (multiple scripts - defaults to Latin)
'ruq-cyrl' => 'Влахесте', # Megleno-Romanian (Cyrillic script)
# 'ruq-grek' => 'Βλαεστε', # Megleno-Romanian (Greek script)
@@ -342,6 +346,7 @@
'sdc' => 'Sassaresu', # Sassarese
'se' => 'sámegiella', # Northern Sami
'sei' => 'Cmique Itom', # Seri
+ 'ses' => 'Koyraboro Senni', # Koyraboro Senni
'sg' => 'Sängö', # Sango/Sangho
'sgs' => 'žemaitėška', # Samogitian
'sh' => 'srpskohrvatski / српскохрватски', # Serbocroatian
@@ -402,7 +407,9 @@
'ug-latn' => 'Uyghurche', # Uyghur (Latin script)
'uk' => 'українська', # Ukrainian
'ur' => 'اردو', # Urdu
- 'uz' => 'oʻzbekcha', # Uzbek
+ 'uz' => "oʻzbekcha/ўзбекча", # Uzbek (multiple scripts - defaults to Latin)
+ 'uz-cyrl' => "ўзбекча", # Uzbek Cyrillic
+ 'uz-latn' => "oʻzbekcha", # Uzbek Latin (default)
've' => 'Tshivenda', # Venda
'vec' => 'vèneto', # Venetian
'vep' => 'vepsän kel’', # Veps
diff --git a/languages/classes/LanguageBe_tarask.php b/languages/classes/LanguageBe_tarask.php
index ac593801..56faa4ac 100644
--- a/languages/classes/LanguageBe_tarask.php
+++ b/languages/classes/LanguageBe_tarask.php
@@ -44,7 +44,6 @@ class LanguageBe_tarask extends Language {
* @return string
*/
function normalizeForSearch( $string ) {
- wfProfileIn( __METHOD__ );
# MySQL fulltext index doesn't grok utf-8, so we
# need to fold cases and convert to hex
@@ -54,7 +53,6 @@ class LanguageBe_tarask extends Language {
$s = parent::normalizeForSearch( $s );
- wfProfileOut( __METHOD__ );
return $s;
}
diff --git a/languages/classes/LanguageJa.php b/languages/classes/LanguageJa.php
index 043b1554..bf3e167d 100644
--- a/languages/classes/LanguageJa.php
+++ b/languages/classes/LanguageJa.php
@@ -51,7 +51,7 @@ class LanguageJa extends Language {
/**
* Italic is not appropriate for Japanese script
- * Unfortunately most browsers do not recognise this, and render <em> as italic
+ * Unfortunately most browsers do not recognise this, and render `<em>` as italic
*
* @param string $text
* @return string
diff --git a/languages/classes/LanguageKk.php b/languages/classes/LanguageKk.php
index 1a098180..b8af885d 100644
--- a/languages/classes/LanguageKk.php
+++ b/languages/classes/LanguageKk.php
@@ -279,27 +279,22 @@ class KkConverter extends LanguageConverter {
* @return string
*/
function translate( $text, $toVariant ) {
- global $wgLanguageCode;
$text = parent::translate( $text, $toVariant );
switch ( $toVariant ) {
case 'kk-cyrl':
case 'kk-kz':
$letters = KK_L_UC . KK_L_LC . 'ʺʹ#0123456789';
- $wgLanguageCode = 'kk';
break;
case 'kk-latn':
case 'kk-tr':
$letters = KK_C_UC . KK_C_LC . '№0123456789';
- $wgLanguageCode = 'kk-Latn';
break;
case 'kk-arab':
case 'kk-cn':
$letters = KK_C_UC . KK_C_LC . /*KK_L_UC.KK_L_LC.'ʺʹ'.*/',;\?%\*№0123456789';
- $wgLanguageCode = 'kk-Arab';
break;
default:
- $wgLanguageCode = 'kk';
return $text;
}
// disable conversion variables like $1, $2...
@@ -459,7 +454,6 @@ class LanguageKk extends LanguageKk_cyrl {
* @return string
*/
function convertGrammar( $word, $case ) {
- wfProfileIn( __METHOD__ );
$variant = $this->getPreferredVariant();
switch ( $variant ) {
@@ -478,7 +472,6 @@ class LanguageKk extends LanguageKk_cyrl {
$word = parent::convertGrammarKk_cyrl( $word, $case );
}
- wfProfileOut( __METHOD__ );
return $word;
}
}
diff --git a/languages/classes/LanguageQqx.php b/languages/classes/LanguageQqx.php
index 1ee398de..353b59a3 100644
--- a/languages/classes/LanguageQqx.php
+++ b/languages/classes/LanguageQqx.php
@@ -26,7 +26,7 @@
* This does not affect untranslated messages.
*
* NOTE: It returns a valid title, because there are some poorly written
- * extentions that assume the contents of some messages are valid.
+ * extensions that assume the contents of some messages are valid.
*
* @ingroup Language
*/
diff --git a/languages/classes/LanguageYue.php b/languages/classes/LanguageYue.php
index 3293cc64..d5f3e760 100644
--- a/languages/classes/LanguageYue.php
+++ b/languages/classes/LanguageYue.php
@@ -54,14 +54,12 @@ class LanguageYue extends Language {
* @return string
*/
function normalizeForSearch( $string ) {
- wfProfileIn( __METHOD__ );
// Double-width roman characters
$s = self::convertDoubleWidth( $string );
$s = trim( $s );
$s = parent::normalizeForSearch( $s );
- wfProfileOut( __METHOD__ );
return $s;
}
}
diff --git a/languages/classes/LanguageZh.php b/languages/classes/LanguageZh.php
index 67f8769b..0f47c38b 100644
--- a/languages/classes/LanguageZh.php
+++ b/languages/classes/LanguageZh.php
@@ -67,23 +67,35 @@ class ZhConverter extends LanguageConverter {
$this->mTables = array(
'zh-hans' => new ReplacementArray( $zh2Hans ),
'zh-hant' => new ReplacementArray( $zh2Hant ),
- 'zh-cn' => new ReplacementArray( array_merge( $zh2Hans, $zh2CN ) ),
- 'zh-hk' => new ReplacementArray( array_merge( $zh2Hant, $zh2HK ) ),
- 'zh-mo' => new ReplacementArray( array_merge( $zh2Hant, $zh2HK ) ),
- 'zh-my' => new ReplacementArray( array_merge( $zh2Hans, $zh2SG ) ),
- 'zh-sg' => new ReplacementArray( array_merge( $zh2Hans, $zh2SG ) ),
- 'zh-tw' => new ReplacementArray( array_merge( $zh2Hant, $zh2TW ) ),
+ 'zh-cn' => new ReplacementArray( $zh2CN ),
+ 'zh-hk' => new ReplacementArray( $zh2HK ),
+ 'zh-mo' => new ReplacementArray( $zh2HK ),
+ 'zh-my' => new ReplacementArray( $zh2CN ),
+ 'zh-sg' => new ReplacementArray( $zh2CN ),
+ 'zh-tw' => new ReplacementArray( $zh2TW ),
'zh' => new ReplacementArray
);
}
function postLoadTables() {
- $this->mTables['zh-cn']->merge( $this->mTables['zh-hans'] );
- $this->mTables['zh-hk']->merge( $this->mTables['zh-hant'] );
- $this->mTables['zh-mo']->merge( $this->mTables['zh-hant'] );
- $this->mTables['zh-my']->merge( $this->mTables['zh-hans'] );
- $this->mTables['zh-sg']->merge( $this->mTables['zh-hans'] );
- $this->mTables['zh-tw']->merge( $this->mTables['zh-hant'] );
+ $this->mTables['zh-cn']->setArray(
+ $this->mTables['zh-cn']->getArray() + $this->mTables['zh-hans']->getArray()
+ );
+ $this->mTables['zh-hk']->setArray(
+ $this->mTables['zh-hk']->getArray() + $this->mTables['zh-hant']->getArray()
+ );
+ $this->mTables['zh-mo']->setArray(
+ $this->mTables['zh-mo']->getArray() + $this->mTables['zh-hant']->getArray()
+ );
+ $this->mTables['zh-my']->setArray(
+ $this->mTables['zh-my']->getArray() + $this->mTables['zh-hans']->getArray()
+ );
+ $this->mTables['zh-sg']->setArray(
+ $this->mTables['zh-sg']->getArray() + $this->mTables['zh-hans']->getArray()
+ );
+ $this->mTables['zh-tw']->setArray(
+ $this->mTables['zh-tw']->getArray() + $this->mTables['zh-hant']->getArray()
+ );
}
/**
@@ -170,7 +182,6 @@ class LanguageZh extends LanguageZh_hans {
* @return string
*/
function normalizeForSearch( $string, $autoVariant = 'zh-hans' ) {
- wfProfileIn( __METHOD__ );
// always convert to zh-hans before indexing. it should be
// better to use zh-hans for search, since conversion from
@@ -179,7 +190,6 @@ class LanguageZh extends LanguageZh_hans {
$s = $this->mConverter->autoConvert( $string, $autoVariant );
// LanguageZh_hans::normalizeForSearch
$s = parent::normalizeForSearch( $s );
- wfProfileOut( __METHOD__ );
return $s;
}
diff --git a/languages/classes/LanguageZh_hans.php b/languages/classes/LanguageZh_hans.php
index 6483d90b..75a05fde 100644
--- a/languages/classes/LanguageZh_hans.php
+++ b/languages/classes/LanguageZh_hans.php
@@ -56,14 +56,12 @@ class LanguageZh_hans extends Language {
* @return string
*/
function normalizeForSearch( $s ) {
- wfProfileIn( __METHOD__ );
// Double-width roman characters
$s = parent::normalizeForSearch( $s );
$s = trim( $s );
$s = $this->segmentByWord( $s );
- wfProfileOut( __METHOD__ );
return $s;
}
diff --git a/languages/data/plurals-mediawiki.xml b/languages/data/plurals-mediawiki.xml
index aafc393b..1ed6a518 100644
--- a/languages/data/plurals-mediawiki.xml
+++ b/languages/data/plurals-mediawiki.xml
@@ -2,14 +2,6 @@
<!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
<supplementalData>
<plurals>
- <!-- Lower Sorbian (Dolnoserbski) and Upper Sorbian (Hornjoserbsce). Not present in CLDR -->
- <pluralRules locales="dsb hsb">
- <pluralRule count="one">n % 100 = 1 @integer 1, 101, 201, 301, …</pluralRule>
- <pluralRule count="two">n % 100 = 2 @integer 2, 102, 202, 302, …</pluralRule>
- <pluralRule count="few">n % 100 = 3..4 @integer 3~4, 103~104, …</pluralRule>
- <pluralRule count="other"> @integer 5, 6, 7, 8, 9, 10, 105, 206, 307, …</pluralRule>
- </pluralRules>
-
<!-- Belarusian in Taraškievica orthography (Беларуская тарашкевіца). Copied from "be" -->
<pluralRules locales="be-tarask">
<pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
diff --git a/languages/data/plurals.xml b/languages/data/plurals.xml
index fd4eaf6b..e364f1bb 100644
--- a/languages/data/plurals.xml
+++ b/languages/data/plurals.xml
@@ -6,71 +6,148 @@ CLDR data files are interpreted according to the LDML specification (http://unic
For terms of use, see http://www.unicode.org/copyright.html
-->
<supplementalData>
- <version number="$Revision: 9369 $"/>
- <generation date="$Date: 2013-09-14 01:26:08 +0530 (ശ, 14 സെപ് 2013) $"/>
+ <version number="$Revision: 10807 $"/>
+ <generation date="$Date: 2014-08-14 14:43:27 -0500 (Thu, 14 Aug 2014) $"/>
<plurals type="cardinal">
<!-- For a canonicalized list, use GeneratedPluralSamples -->
- <!-- if locale is known to have no plurals, there are no rules -->
- <pluralRules locales="ar">
- <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
- <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
- <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
- <pluralRule count="few">n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …</pluralRule>
- <pluralRule count="many">n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule>
- <pluralRule count="other"> @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+
+ <!-- 1: other -->
+
+ <pluralRules locales="bm bo dz id ig ii in ja jbo jv jw kde kea km ko lkt lo ms my nqo root sah ses sg th to vi wo yo zh">
+ <pluralRule count="other"> @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
- <pluralRules locales="he iw">
+
+ <!-- 2: one,other -->
+
+ <pluralRules locales="am bn fa gu hi kn mr zu">
+ <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
+ <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="ff fr hy kab">
+ <pluralRule count="one">i = 0,1 @integer 0, 1 @decimal 0.0~1.5</pluralRule>
+ <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="ast ca de en et fi fy gl it ji nl sv sw ur yi">
<pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
- <pluralRule count="two">i = 2 and v = 0 @integer 2</pluralRule>
- <pluralRule count="many">v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
- <pluralRule count="other"> @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
- <pluralRules locales="af asa ast az bem bez bg brx cgg chr ckb dv ee el eo es eu fo fur fy gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts uz ve vo vun wae xh xog">
- <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
- <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRules locales="si">
+ <pluralRule count="one">n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000</pluralRule>
+ <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
<pluralRules locales="ak bh guw ln mg nso pa ti wa">
<pluralRule count="one">n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000</pluralRule>
<pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
- <pluralRules locales="ff fr hy kab">
- <pluralRule count="one">i = 0,1 @integer 0, 1 @decimal 0.0~1.5</pluralRule>
- <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRules locales="tzm">
+ <pluralRule count="one">n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0</pluralRule>
+ <pluralRule count="other"> @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="pt">
+ <pluralRule count="one">n = 0..2 and n != 2 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000</pluralRule>
+ <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="af asa az bem bez bg brx cgg chr ckb dv ee el eo es eu fo fur gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts ug uz ve vo vun wae xh xog">
+ <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+ <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="pt_PT">
+ <pluralRule count="one">n = 1 and v = 0 @integer 1</pluralRule>
+ <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="da">
+ <pluralRule count="one">n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6</pluralRule>
+ <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="is">
+ <pluralRule count="one">t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …</pluralRule>
+ <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="mk">
+ <pluralRule count="one">v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
+ <pluralRule count="other"> @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="fil tl">
+ <pluralRule count="one">v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRule count="other"> @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …</pluralRule>
</pluralRules>
- <pluralRules locales="lv">
+
+ <!-- 3: zero,one,other -->
+
+ <pluralRules locales="lv prg">
<pluralRule count="zero">n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
<pluralRule count="one">n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
<pluralRule count="other"> @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …</pluralRule>
</pluralRules>
+ <pluralRules locales="lag">
+ <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+ <pluralRule count="one">i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6</pluralRule>
+ <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="ksh">
+ <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+ <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+ <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+
+ <!-- 3: one,two,other -->
+
<pluralRules locales="iu kw naq se sma smi smj smn sms">
<pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
<pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
<pluralRule count="other"> @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
- <pluralRules locales="ga">
- <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
- <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
- <pluralRule count="few">n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000</pluralRule>
- <pluralRule count="many">n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000</pluralRule>
- <pluralRule count="other"> @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+
+ <!-- 3: one,few,other -->
+
+ <pluralRules locales="shi">
+ <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
+ <pluralRule count="few">n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00</pluralRule>
+ <pluralRule count="other"> @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
<pluralRules locales="mo ro">
<pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
<pluralRule count="few">v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
<pluralRule count="other"> @integer 20~35, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
</pluralRules>
- <pluralRules locales="lt">
- <pluralRule count="one">n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
- <pluralRule count="few">n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …</pluralRule>
- <pluralRule count="many">f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
- <pluralRule count="other"> @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRules locales="bs hr sh sr">
+ <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
+ <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …</pluralRule>
+ <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
- <pluralRules locales="be">
- <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
- <pluralRule count="few">n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …</pluralRule>
- <pluralRule count="many">n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- <pluralRule count="other"> @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
+
+ <!-- 4: one,two,few,other -->
+
+ <pluralRules locales="gd">
+ <pluralRule count="one">n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000</pluralRule>
+ <pluralRule count="two">n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000</pluralRule>
+ <pluralRule count="few">n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00</pluralRule>
+ <pluralRule count="other"> @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="sl">
+ <pluralRule count="one">v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …</pluralRule>
+ <pluralRule count="two">v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …</pluralRule>
+ <pluralRule count="few">v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="dsb hsb">
+ <pluralRule count="one">v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
+ <pluralRule count="two">v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …</pluralRule>
+ <pluralRule count="few">v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …</pluralRule>
+ <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ </pluralRules>
+
+ <!-- 4: one,two,many,other -->
+
+ <pluralRules locales="he iw">
+ <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
+ <pluralRule count="two">i = 2 and v = 0 @integer 2</pluralRule>
+ <pluralRule count="many">v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+ <pluralRule count="other"> @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
+
+ <!-- 4: one,few,many,other -->
+
<pluralRules locales="cs sk">
<pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
<pluralRule count="few">i = 2..4 and v = 0 @integer 2~4</pluralRule>
@@ -83,11 +160,17 @@ For terms of use, see http://www.unicode.org/copyright.html
<pluralRule count="many">v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
<pluralRule count="other"> @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
- <pluralRules locales="sl">
- <pluralRule count="one">v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …</pluralRule>
- <pluralRule count="two">v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …</pluralRule>
- <pluralRule count="few">v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+ <pluralRules locales="be">
+ <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
+ <pluralRule count="few">n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …</pluralRule>
+ <pluralRule count="many">n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRule count="other"> @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
+ </pluralRules>
+ <pluralRules locales="lt">
+ <pluralRule count="one">n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule>
+ <pluralRule count="few">n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …</pluralRule>
+ <pluralRule count="many">f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule>
+ <pluralRule count="other"> @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
<pluralRules locales="mt">
<pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
@@ -95,28 +178,15 @@ For terms of use, see http://www.unicode.org/copyright.html
<pluralRule count="many">n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule>
<pluralRule count="other"> @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
- <pluralRules locales="mk">
- <pluralRule count="one">v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
- <pluralRule count="other"> @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="cy">
- <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
- <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
- <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
- <pluralRule count="few">n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000</pluralRule>
- <pluralRule count="many">n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000</pluralRule>
- <pluralRule count="other"> @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="lag">
- <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
- <pluralRule count="one">i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6</pluralRule>
- <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="shi">
- <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
- <pluralRule count="few">n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00</pluralRule>
- <pluralRule count="other"> @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRules locales="ru uk">
+ <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule>
+ <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …</pluralRule>
+ <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
+ <pluralRule count="other"> @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
+
+ <!-- 5: one,two,few,many,other -->
+
<pluralRules locales="br">
<pluralRule count="one">n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …</pluralRule>
<pluralRule count="two">n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …</pluralRule>
@@ -124,77 +194,38 @@ For terms of use, see http://www.unicode.org/copyright.html
<pluralRule count="many">n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …</pluralRule>
<pluralRule count="other"> @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …</pluralRule>
</pluralRules>
- <pluralRules locales="ksh">
- <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+ <pluralRules locales="ga">
<pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
- <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="tzm">
- <pluralRule count="one">n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0</pluralRule>
- <pluralRule count="other"> @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
+ <pluralRule count="few">n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000</pluralRule>
+ <pluralRule count="many">n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000</pluralRule>
+ <pluralRule count="other"> @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
<pluralRules locales="gv">
- <pluralRule count="one">n % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 1.0, 11.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 101.0, 1001.0, …</pluralRule>
- <pluralRule count="two">n % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, … @decimal 2.0, 12.0, 22.0, 32.0, 42.0, 52.0, 62.0, 72.0, 102.0, 1002.0, …</pluralRule>
- <pluralRule count="few">n % 100 = 0,20,40,60 @integer 0, 20, 40, 60, 100, 120, 140, 160, 1000, 10000, 100000, 1000000, … @decimal 0.0, 20.0, 40.0, 60.0, 100.0, 120.0, 140.0, 160.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- <pluralRule count="other"> @integer 3~10, 13~19, 23, 103, 1003, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.1, 1000.1, …</pluralRule>
- </pluralRules>
- <pluralRules locales="gd">
- <pluralRule count="one">n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000</pluralRule>
- <pluralRule count="two">n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000</pluralRule>
- <pluralRule count="few">n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00</pluralRule>
- <pluralRule count="other"> @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="bm bo dz id ig ii in ja jbo jv jw kde kea km ko lkt lo ms my nqo sah ses sg th to vi wo yo zh">
- <pluralRule count="other"> @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="fil tl">
- <pluralRule count="one">i = 0..1 and v = 0 @integer 0, 1</pluralRule>
- <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="ca de en et fi gl it ji nl sv sw ur yi">
- <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule>
- <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="pt">
- <pluralRule count="one">i = 1 and v = 0 or i = 0 and t = 1 @integer 1 @decimal 0.1, 0.01, 0.10, 0.001, 0.010, 0.100, 0.0001, 0.0010, 0.0100, 0.1000</pluralRule>
- <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="da">
- <pluralRule count="one">n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6</pluralRule>
- <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="pt_PT">
- <pluralRule count="one">n = 1 and v = 0 @integer 1</pluralRule>
- <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="am bn fa gu hi kn mr zu">
- <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule>
- <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="is">
- <pluralRule count="one">t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …</pluralRule>
- <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="si">
- <pluralRule count="one">n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000</pluralRule>
- <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
- </pluralRules>
- <pluralRules locales="bs hr sh sr">
- <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule>
- <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …</pluralRule>
- <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRule count="one">v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …</pluralRule>
+ <pluralRule count="two">v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …</pluralRule>
+ <pluralRule count="few">v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …</pluralRule>
+ <pluralRule count="many">v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRule count="other"> @integer 3~10, 13~19, 23, 103, 1003, …</pluralRule>
</pluralRules>
- <pluralRules locales="ru">
- <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule>
- <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
- <pluralRule count="other"> @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+
+ <!-- 6: zero,one,two,few,many,other -->
+
+ <pluralRules locales="ar">
+ <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+ <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+ <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
+ <pluralRule count="few">n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …</pluralRule>
+ <pluralRule count="many">n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule>
+ <pluralRule count="other"> @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
- <pluralRules locales="uk">
- <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule>
- <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …</pluralRule>
- <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule>
- <pluralRule count="other"> @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
+ <pluralRules locales="cy">
+ <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule>
+ <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule>
+ <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule>
+ <pluralRule count="few">n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000</pluralRule>
+ <pluralRule count="many">n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000</pluralRule>
+ <pluralRule count="other"> @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule>
</pluralRules>
</plurals>
</supplementalData>
diff --git a/languages/i18n/ab.json b/languages/i18n/ab.json
index aae2255e..41f35565 100644
--- a/languages/i18n/ab.json
+++ b/languages/i18n/ab.json
@@ -1,158 +1,149 @@
{
- "@metadata": {
- "authors": [
- "Comp1089",
- "Mzhiba",
- "Temuri rajavi",
- "ОйЛ"
- ]
- },
- "sunday": "амҽыш",
- "monday": "ашәахь",
- "tuesday": "аҩаш",
- "wednesday": "ахаш",
- "thursday": "аҧшьаш",
- "friday": "ахәуаш",
- "saturday": "асабш",
- "january": "ажьырныҳәа",
- "february": "жәабран",
- "march": "хәажәкыр",
- "april": "мшаҧы",
- "may_long": "лаҵара",
- "june": "рашәара",
- "july": "ҧхынгәы",
- "august": "нанҳәа",
- "september": "цәыббра",
- "october": "жьҭаара",
- "november": "абҵара",
- "december": "ҧхынҷкәын",
- "january-gen": "ажьырныҳәа",
- "february-gen": "жәабран",
- "march-gen": "хәажәкыра",
- "april-gen": "мшаҧы",
- "may-gen": "лаҵара",
- "june-gen": "рашәара",
- "july-gen": "ҧхынгәы",
- "august-gen": "нанҳәа",
- "september-gen": "цәыббра",
- "october-gen": "жьҭаара",
- "november-gen": "абҵара",
- "december-gen": "ҧхынҷкәын",
- "jan": "ажь",
- "feb": "жәа",
- "mar": "хәа",
- "apr": "мша",
- "may": "лаҵ",
- "jun": "раш",
- "jul": "ҧхг",
- "aug": "нан",
- "sep": "цәы",
- "oct": "жьҭ",
- "nov": "абҵ",
- "dec": "ҧхҷ",
- "pagecategories": "{{PLURAL:$1|1=Акатегориа|Акатегориақәа}}",
- "article": "Адаҟьа",
- "mytalk": "Сахцәажәара",
- "navigation": "Анавигациа",
- "qbfind": "Аҧшаара",
- "qbedit": "Ариашара",
- "qbpageoptions": "Ари адаҟьа",
- "vector-action-move": "Ахьӡ аҧсахра",
- "vector-view-create": "Арҿиара",
- "vector-view-edit": "Ариашамҭа",
- "vector-view-history": "Аҭоурых",
- "vector-view-view": "Аҧхьара",
- "vector-view-viewsource": "Ахәаҧшра",
- "help": "Ацхыраара",
- "search": "Аҧшаара",
- "searchbutton": "Аҧшаара",
- "searcharticle": "Адаҟьа",
- "history": "Аҭоурых",
- "history_short": "Аҭоурых",
- "printableversion": "Акьыҧхьразы аверсиа",
- "permalink": "Еисымшатәи ахьарҧш",
- "edit": "Ариашамҭа",
- "create": "Арҿиара",
- "create-this-page": "Ариашара ари адаҟьа",
- "newpage": "Адаҟьа Ҿыц",
- "talkpagelinktext": "Ахцәажәара",
- "specialpage": "Цастәи адаҟьа",
- "talk": "Ахцәажәара",
- "toolbox": "Амаҵыругақәа",
- "otherlanguages": "Абызшәақәа",
- "lastmodifiedat": "Ацыхәтәантәи аҧсахрақәа абри адаҟьа аҟны: $2, $1.",
- "jumptonavigation": "Анавигациа",
- "jumptosearch": "Аҧшаара",
- "aboutsite": "{{SITENAME}} иазкны",
- "currentevents": "Ииасуа ахҭысқәа",
- "mainpage": "Ихадоу Адаҟьа",
- "mainpage-description": "Ихадоу адаҟьа",
- "privacy": "Аконфиденциалтә аполитика",
- "privacypage": "Project: Аконфиденциалтә аполитика",
- "youhavenewmessages": "Уара $1 уауит ($2).",
- "editsection": "ариашамҭа",
- "editold": "ариашара",
- "editlink": "ариашара",
- "nstab-main": "Адаҟьа",
- "nstab-user": "Алахәыла",
- "nstab-special": "Цастәи адаҟьа",
- "nstab-image": "Афаил",
- "nstab-template": "Ашаблон",
- "nstab-help": "Ацхыраара",
- "nstab-category": "Акатегориа",
- "viewsource": "Ахәаҧшра",
- "login": "Урдырра",
- "nav-login-createaccount": "Урдырра / Арегистрациара",
- "userlogin": "Урдырра/Арегистрациара",
- "logout": "Асеанс дәылҵра",
- "userlogout": "Асеанс дәылҵра",
- "loginlanguagelabel": "Абызшәа: $1",
- "summary": "Описание изменений:",
- "savearticle": "Адаҟьа ахьчара",
- "editing": "Ариашамҭа: $1",
- "searchresults-title": "Аҧшаара «$1»",
- "preferences": "Архиарақәа",
- "mypreferences": "Архиарақәа",
- "searchresultshead": "Аҧшаара",
- "uid": "Алахәыла ID:",
- "yourlanguage": "Абызшәа:",
- "prefs-signature": "Анапынҵамҭа",
- "group-user": "Алахәылацәа",
- "group-user-member": "{{GENDER:$1|алахәыла}}",
- "grouppage-sysop": "{{ns:project}}:Администраторцәа",
- "recentchanges": "Арҽеира ҿыцқәа",
- "recentchanges-legend-newpage": "$1 — адаҟьа ҿыц",
- "newpageletter": "Ҿ",
- "recentchangeslinked": "Еимадоу ариашарақәа",
- "recentchangeslinked-feed": "Еимадоу ариашарақәа",
- "recentchangeslinked-toolbox": "Еимадоу ариашарақәа",
- "upload": "Афаил аҭагалара",
- "filehist-user": "Алахәыла",
- "randompage": "Машәырлатәи аҩымҭа",
- "brokenredirects-edit": "ариашамҭа",
- "newpages-username": "Алахәыла:",
- "move": "Ахьӡ аҧсахра",
- "movethispage": "Ахьӡ аҧсахра ари адаҟьа",
- "specialloguserlabel": "Алахәыла:",
- "alphaindexline": "$1 ... $2",
- "linksearch-ok": "Аҧшаара",
- "watchlist": "Ашклаҧшра асна",
- "mywatchlist": "Ашклаҧшра асна",
- "restriction-edit": "Ариашамҭа",
- "mycontris": "Салагала",
- "contribsub2": "Алагала $1 ($2)",
- "sp-contributions-talk": "ахцәажәара",
- "sp-contributions-submit": "Аҧшаара",
- "whatlinkshere": "Арахьтәи ахьарҧшқәа",
- "whatlinkshere-page": "Адаҟьа:",
- "contribslink": "алагала",
- "movearticle": "Ахьӡ аҧсахра:",
- "allmessages-language": "Абызшәа:",
- "ilsubmit": "Аҧшаара",
- "watchlistall2": "зегьы",
- "namespacesall": "зегьы",
- "monthsall": "зегьы",
- "fileduplicatesearch-submit": "Аҧшаара",
- "specialpages": "Цастәи адаҟьақәа",
- "specialpages-group-login": "Урдырра / Арегистрациара"
+ "@metadata": {
+ "authors": [
+ "Comp1089",
+ "Mzhiba",
+ "Temuri rajavi",
+ "ОйЛ"
+ ]
+ },
+ "sunday": "амҽыш",
+ "monday": "ашәахь",
+ "tuesday": "аҩаш",
+ "wednesday": "ахаш",
+ "thursday": "аҧшьаш",
+ "friday": "ахәуаш",
+ "saturday": "асабш",
+ "january": "ажьырныҳәа",
+ "february": "жәабран",
+ "march": "хәажәкыр",
+ "april": "мшаҧы",
+ "may_long": "лаҵара",
+ "june": "рашәара",
+ "july": "ҧхынгәы",
+ "august": "нанҳәа",
+ "september": "цәыббра",
+ "october": "жьҭаара",
+ "november": "абҵара",
+ "december": "ҧхынҷкәын",
+ "january-gen": "ажьырныҳәа",
+ "february-gen": "жәабран",
+ "march-gen": "хәажәкыра",
+ "april-gen": "мшаҧы",
+ "may-gen": "лаҵара",
+ "june-gen": "рашәара",
+ "july-gen": "ҧхынгәы",
+ "august-gen": "нанҳәа",
+ "september-gen": "цәыббра",
+ "october-gen": "жьҭаара",
+ "november-gen": "абҵара",
+ "december-gen": "ҧхынҷкәын",
+ "jan": "ажь",
+ "feb": "жәа",
+ "mar": "хәа",
+ "apr": "мша",
+ "may": "лаҵ",
+ "jun": "раш",
+ "jul": "ҧхг",
+ "aug": "нан",
+ "sep": "цәы",
+ "oct": "жьҭ",
+ "nov": "абҵ",
+ "dec": "ҧхҷ",
+ "pagecategories": "{{PLURAL:$1|1=Акатегориа|Акатегориақәа}}",
+ "article": "Адаҟьа",
+ "mytalk": "Сахцәажәара",
+ "navigation": "Анавигациа",
+ "qbfind": "Аҧшаара",
+ "qbedit": "Ариашара",
+ "qbpageoptions": "Ари адаҟьа",
+ "help": "Ацхыраара",
+ "search": "Аҧшаара",
+ "searchbutton": "Аҧшаара",
+ "searcharticle": "Адаҟьа",
+ "history": "Аҭоурых",
+ "history_short": "Аҭоурых",
+ "printableversion": "Акьыҧхьразы аверсиа",
+ "permalink": "Еисымшатәи ахьарҧш",
+ "edit": "Ариашамҭа",
+ "create": "Арҿиара",
+ "create-this-page": "Ариашара ари адаҟьа",
+ "newpage": "Адаҟьа Ҿыц",
+ "talkpagelinktext": "Ахцәажәара",
+ "specialpage": "Цастәи адаҟьа",
+ "talk": "Ахцәажәара",
+ "toolbox": "Амаҵыругақәа",
+ "otherlanguages": "Абызшәақәа",
+ "lastmodifiedat": "Ацыхәтәантәи аҧсахрақәа абри адаҟьа аҟны: $2, $1.",
+ "jumptonavigation": "Анавигациа",
+ "jumptosearch": "Аҧшаара",
+ "aboutsite": "{{SITENAME}} иазкны",
+ "currentevents": "Ииасуа ахҭысқәа",
+ "mainpage": "Ихадоу Адаҟьа",
+ "mainpage-description": "Ихадоу адаҟьа",
+ "privacy": "Аконфиденциалтә аполитика",
+ "privacypage": "Project: Аконфиденциалтә аполитика",
+ "youhavenewmessages": "Уара $1 уауит ($2).",
+ "editsection": "ариашамҭа",
+ "editold": "ариашара",
+ "editlink": "ариашара",
+ "nstab-main": "Адаҟьа",
+ "nstab-user": "Алахәыла",
+ "nstab-special": "Цастәи адаҟьа",
+ "nstab-image": "Афаил",
+ "nstab-template": "Ашаблон",
+ "nstab-help": "Ацхыраара",
+ "nstab-category": "Акатегориа",
+ "viewsource": "Ахәаҧшра",
+ "login": "Урдырра",
+ "nav-login-createaccount": "Урдырра / Арегистрациара",
+ "userlogin": "Урдырра/Арегистрациара",
+ "logout": "Асеанс дәылҵра",
+ "userlogout": "Асеанс дәылҵра",
+ "loginlanguagelabel": "Абызшәа: $1",
+ "summary": "Описание изменений:",
+ "savearticle": "Адаҟьа ахьчара",
+ "editing": "Ариашамҭа: $1",
+ "searchresults-title": "Аҧшаара «$1»",
+ "preferences": "Архиарақәа",
+ "mypreferences": "Архиарақәа",
+ "searchresultshead": "Аҧшаара",
+ "yourlanguage": "Абызшәа:",
+ "prefs-signature": "Анапынҵамҭа",
+ "group-user": "Алахәылацәа",
+ "group-user-member": "{{GENDER:$1|алахәыла}}",
+ "grouppage-sysop": "{{ns:project}}:Администраторцәа",
+ "recentchanges": "Арҽеира ҿыцқәа",
+ "recentchanges-legend-newpage": "$1 — адаҟьа ҿыц",
+ "newpageletter": "Ҿ",
+ "recentchangeslinked": "Еимадоу ариашарақәа",
+ "recentchangeslinked-feed": "Еимадоу ариашарақәа",
+ "recentchangeslinked-toolbox": "Еимадоу ариашарақәа",
+ "upload": "Афаил аҭагалара",
+ "filehist-user": "Алахәыла",
+ "randompage": "Машәырлатәи аҩымҭа",
+ "brokenredirects-edit": "ариашамҭа",
+ "newpages-username": "Алахәыла:",
+ "move": "Ахьӡ аҧсахра",
+ "movethispage": "Ахьӡ аҧсахра ари адаҟьа",
+ "specialloguserlabel": "Алахәыла:",
+ "linksearch-ok": "Аҧшаара",
+ "watchlist": "Ашклаҧшра асна",
+ "mywatchlist": "Ашклаҧшра асна",
+ "restriction-edit": "Ариашамҭа",
+ "mycontris": "Салагала",
+ "contribsub2": "Алагала $1 ($2)",
+ "sp-contributions-talk": "ахцәажәара",
+ "sp-contributions-submit": "Аҧшаара",
+ "whatlinkshere": "Арахьтәи ахьарҧшқәа",
+ "whatlinkshere-page": "Адаҟьа:",
+ "contribslink": "алагала",
+ "movearticle": "Ахьӡ аҧсахра:",
+ "allmessages-language": "Абызшәа:",
+ "ilsubmit": "Аҧшаара",
+ "namespacesall": "зегьы",
+ "monthsall": "зегьы",
+ "fileduplicatesearch-submit": "Аҧшаара",
+ "specialpages": "Цастәи адаҟьақәа",
+ "specialpages-group-login": "Урдырра / Арегистрациара"
}
diff --git a/languages/i18n/ace.json b/languages/i18n/ace.json
index f9e54ae2..6ef231de 100644
--- a/languages/i18n/ace.json
+++ b/languages/i18n/ace.json
@@ -468,14 +468,12 @@
"passwordreset-emailtitle": "Teuneurang nan ureueng ngui bak {{SITENAME}}",
"passwordreset-emailelement": "Nan ureuëng ngui: $1\nLageuëm rahsia sijamong: $2",
"changeemail": "Gantoe alamat surat-e",
- "changeemail-header": "Gantoe alamat surat-e",
"changeemail-no-info": "Droeneuh suwah neutamöng mangat jeuet neu'eu laman nyoe",
"changeemail-oldemail": "Alamat surat-e jinoe:",
"changeemail-newemail": "Alamat surat-e barô:",
"changeemail-none": "(hana)",
"changeemail-password": "Lageuem rahsia {{SITENAME}} droeneuh:",
"changeemail-submit": "Gantoe surat-e",
- "changeemail-cancel": "Peubateue",
"bold_sample": "Rakam teubai",
"bold_tip": "Haraih teubai",
"italic_sample": "Rakam singèt naseukah nyoë",
@@ -637,7 +635,6 @@
"search-interwiki-more": "(lom)",
"searchrelated": "meusambat",
"searchall": "ban dum",
- "showingresultsheader": "{{PLURAL:$5|Hase '''$1''' nibak '''$3'''|Hase '''$1 - $2''' nibak '''$3'''}} keu '''$4'''",
"search-nonefound": "Hana hasé nyang paih lagèë neulakèë",
"powersearch-legend": "Mita lanjut",
"powersearch-ns": "Mita bak ruweuëng nan:",
@@ -745,6 +742,7 @@
"right-movefile": "Pinah beureukaih",
"right-upload": "Peutamöng beureukaih",
"right-upload_by_url": "Peutamöng beureukaih nibak URL",
+ "right-writeapi": "Meungui API teumuléh",
"right-delete": "Sampôh laman",
"right-bigdelete": "Sampôh laman ngön ban dum riwayatjih",
"right-browsearchive": "Mita laman nyang geusampôh",
@@ -756,6 +754,7 @@
"action-move": "Peupinah laman nyoë",
"nchanges": "$1 {{PLURAL:$1|neuubah}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|yôh seunaweuë seuneulheuëh kön}}",
+ "enhancedrc-history": "riwayat",
"recentchanges": "Neuubah barô",
"recentchanges-legend": "Peuniléh neuubah barô",
"recentchanges-summary": "Di yup nyoë nakeuh neuubah barô nyang na bak Wikipèdia nyoë.\nHareutoë: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = laman barô, '''u''' = neuandam ubeut, '''b''' = neuandam bot, (± ''bit'') = jeumeulah asoë meutamah/meukureuëng, → = neuandam bideuëng, ← = mohtasa otomatis.\n----",
@@ -765,14 +764,21 @@
"recentchanges-label-minor": "Nyoe neuandam ubeut",
"recentchanges-label-bot": "Neuandam nyoe geupubuet le bot",
"recentchanges-label-unpatrolled": "Neuandam nyoe goh lom geukalon",
+ "recentchanges-legend-heading": "'''Hareutoë:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (eu cit [[Special:NewPages|dapeuta laman barô]])",
"rcnotefrom": "Di yup nyoë nakeuh neuubah yôh <strong>$2</strong> (geupeudeuh trôh ‘an <strong>$1</strong> neuubah).",
"rclistfrom": "Peudeuih neuubah barô yôh $3 $2 kön",
"rcshowhideminor": "$1 andam bacut",
+ "rcshowhideminor-hide": "Peusom",
"rcshowhidebots": "$1 bot",
+ "rcshowhidebots-show": "Peuleumah",
"rcshowhideliu": "$1 ureuëng ngui tamöng",
+ "rcshowhideliu-hide": "Peusom",
"rcshowhideanons": "$1 ureuëng ngui hana nan",
+ "rcshowhideanons-hide": "Peusom",
"rcshowhidepatr": "$1 andam teurunda",
"rcshowhidemine": "$1 atra lôn andam",
+ "rcshowhidemine-hide": "Peusom",
"rclinks": "Peudeuih $1 neuubah barô lam $2 uroë nyoë<br />$3",
"diff": "bida",
"hist": "riwayat",
@@ -860,6 +866,7 @@
"sharedupload": "Beureukah nyoë dari $1 ngön kadang geunguy lé buët-buët la’én.",
"sharedupload-desc-here": "Beureukaih nyoe nejih nibak $1 ngon kadang geunguy le proyek-proyek la'en.\nTeuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
"uploadnewversion-linktext": "Peulöt seunalén nyang leubèh barô nibak beureukah nyoë.",
+ "upload-disallowed-here": "Droëneuh h'an jeuët neutimpa beureukaih nyoë",
"mimesearch": "Mita MIME",
"listredirects": "Dapeuta peuninah",
"unusedtemplates": "Templat nyang hana geungui",
@@ -880,7 +887,6 @@
"uncategorizedtemplates": "Seunaleuëk hana kawan",
"unusedcategories": "Kawan hana geungui",
"unusedimages": "Beureukaih hana geungui",
- "popularpages": "Laman jithèë",
"wantedcategories": "Kawan geuh'eut",
"wantedpages": "Laman geuh‘eut",
"wantedpages-badtitle": "Nan hana sah lam kawan hasé: $1",
@@ -907,7 +913,6 @@
"pager-older-n": "{{PLURAL:$1|1 leubèh awai|$1 leubèh awai}}",
"booksources": "Nè kitab",
"booksources-search-legend": "Mita bak nè kitab",
- "booksources-go": "Mita",
"specialloguserlabel": "Ureuëng ngui:",
"speciallogtitlelabel": "Sasaran (nan atawa ureuëng ngui):",
"log": "Log",
@@ -978,7 +983,7 @@
"watchthispage": "Kalön ôn nyoë",
"unwatch": "Bateuë kalön",
"watchlist-details": "{{PLURAL:$1|$1 ôn|$1 ôn}} geukalön, hana kira ôn peugah haba.",
- "wlshowlast": "Peudeuh $1 jeum $2 uroë $3 seuneulheuëh",
+ "wlshowlast": "Peudeuh $1 jeum $2 uroë seuneulheuëh",
"watchlist-options": "Peuniléh dapeuta kalön",
"watching": "Kalön...",
"unwatching": "Hana kalön...",
@@ -1097,6 +1102,7 @@
"tooltip-pt-mycontris": "Dapeuta beuneuri Droëneuh",
"tooltip-pt-login": "Droëneuh geupadan keu tamong log, bah pih nyan hana geupeuwajéb.",
"tooltip-pt-logout": "Teubiët",
+ "tooltip-pt-createaccount": "Droëneuh geupadan keu neupeugöt saboh akun ngön neutamöng; bah pih nyan hana wajéb",
"tooltip-ca-talk": "Marit laman asoë",
"tooltip-ca-edit": "Droëneuh jeuët neuandam laman nyoë. Neungui tumbôi eu dilèë sigoh neukeubah.",
"tooltip-ca-addsection": "Puphôn beunagi barô",
@@ -1146,6 +1152,7 @@
"tooltip-undo": "Peuriwang geunantoë nyoë ngön peuhah plôk neu’andam ngön cara eu dilèë. Choë jeuët geupeutamah bak plôk ehtisa.",
"tooltip-summary": "Pasoë éhtisa paneuk",
"interlanguage-link-title": "$1 – $2",
+ "simpleantispam-label": "Paréksa anti-spam.\n<strong>BÈK</strong> neupasoë!",
"pageinfo-toolboxlink": "Teuneurang laman",
"previousdiff": "← Bida awai",
"nextdiff": "Geunantoë lheuëh nyan →",
@@ -1153,6 +1160,9 @@
"file-nohires": "Hana resolusi nyang leubèh manyang.",
"svg-long-desc": "Beureukah SVG, nominal $1 x $2 piksel, rayek beureukah: $3",
"show-big-image": "Beureukaih aseuli",
+ "show-big-image-preview": "Seunipat seuneudeuh awai: $1",
+ "show-big-image-other": "{{PLURAL:$2|Resolusi}} la'én: $1.",
+ "show-big-image-size": "$1 × $2 piksel",
"newimages": "Beureukah barô",
"ilsubmit": "Mita",
"bad_image_list": "Beuntukjih lagèë di miyub nyoë:\n\nCit buté dapeuta (baréh nyang geupeuphôn ngon tanda *) nyang geukira. Hubông phôn bak saboh baréh beukeuh hubông u beureukaih nyang brôk.\nHubông-hubông lheuëh nyan bak baréh nyang saban geukira sibagoë keucuali, nakeuh teunuléh nyang jeuët peuleumah beureukaih nyan.",
@@ -1161,7 +1171,8 @@
"metadata-expand": "Peuleumah tapeusili teunamah",
"metadata-collapse": "Peusom tapeusili teunamah",
"metadata-fields": "Bideuëng mètadata gamba nyang na lam peusan nyoë keuneuk geupasoë bak tampilan halaman gamba 'oh watèë tabel mètadata geutôp.\nData nyang la'én eunteuk teupeusom keudroë.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "ban dum",
+ "exif-xresolution": "Resolusi linteuëng",
+ "exif-yresolution": "Rèsolusi buju",
"namespacesall": "ban dum",
"monthsall": "ban dum",
"recreate": "Peugöt ulang",
@@ -1199,6 +1210,7 @@
"tags": "Tag neuubah nyang sah",
"tag-filter": "Saréng [[Special:Tags|tag]]:",
"tag-filter-submit": "Saréng",
+ "logentry-newusers-create": "$1 {{GENDER:$2|geupeugöt}} akun ureuëng ngui",
"searchsuggest-search": "Mita",
"duration-seconds": "{{PLURAL:$1|deutik}}",
"duration-minutes": "{{PLURAL:$1|minèt}}",
diff --git a/languages/i18n/aeb.json b/languages/i18n/aeb.json
index 32b7b8c5..c535e517 100644
--- a/languages/i18n/aeb.json
+++ b/languages/i18n/aeb.json
@@ -6,32 +6,33 @@
"Kuwaity26",
"Malekbr",
"아라",
- "Aħmedbaɛl"
+ "Aħmedbaɛl",
+ "GeekEmad"
]
},
- "tog-underline": "ضع خطا تحت الوصلات:",
- "tog-hideminor": "أخف التعديلات الطفيفة في أحدث التغييرات",
- "tog-hidepatrolled": "أخف التعديلات المراجعة في أحدث التغييرات",
- "tog-newpageshidepatrolled": "أخف الصفحات المراجعة من قائمة الصفحات الجديدة",
- "tog-extendwatchlist": "مدد قائمة المراقبة لعرض كل التغييرات، وليس الأحدث فقط",
+ "tog-underline": "Ħotʾ stʾar taħt errabtʾa:",
+ "tog-hideminor": "Khabbi ettabdilàt essʾgħàr m ettabdilàt lekhrànìn",
+ "tog-hidepatrolled": "Khabbi ettabdilàt elmagħsous għlihom m ettabdilàt lekhrànìn",
+ "tog-newpageshidepatrolled": "Khabbi elpàjàt elmagħsous għlihom m ellista mtagħ elpàjàt ejjdida",
+ "tog-extendwatchlist": "Wassegħ ellista mtagħ elgħassa bech twarri ettabdilàt elkoll, w mouch lekhrànìn kahaw",
"tog-usenewrc": ")جمّع التعديلات حسب الصفحة في أحدث التغييرات وقائمة المراقبة (يتطلب جافاسكربت",
- "tog-numberheadings": "رقم العناوين تلقائيا",
+ "tog-numberheadings": "Nwàmer otomatik l ettitrouàt mtagħ esseksyon",
"tog-showtoolbar": "أظهر شريط التحرير (يتطلب جافاسكربت)",
"tog-editondblclick": "عدل الصفحات عند الضغط المزدوج (جافاسكربت)",
"tog-editsectiononrightclick": "فعل تعديل الأقسام بواسطة كبسة الفأرة اليمين على عناوين الأقسام (جافاسكريبت)",
- "tog-watchcreations": "أضف الصفحات التي أنشئها والملفات التي أرفعها إلى قائمة مراقبتي.",
- "tog-watchdefault": "أضف الصفحات والملفات التي أعدلها إلى قائمة مراقبتي",
- "tog-watchmoves": "أضف الصفحات والملفات التي أنقلها إلى قائمة مراقبتي",
- "tog-watchdeletion": "أضف الصفحات والملفات التي أحذفها إلى قائمة مراقبتي",
- "tog-minordefault": "علم كل التعديلات طفيفة افتراضيا",
- "tog-previewontop": "أظهر العرض المسبق قبل صندوق التحرير",
- "tog-previewonfirst": "أظهر معاينة مع أول تعديل",
- "tog-enotifwatchlistpages": "أرسل لي رسالة إلكترونية عندما تُغيّر صفحة أو ملف في قائمة مراقبتي",
- "tog-enotifusertalkpages": "أرسل لي رسالة إلكترونية عندما تعدل صفحة نقاشي",
- "tog-enotifminoredits": "أرسل لي رسالة إلكترونية عن التعديلات الطفيفة للصفحات والملفات أيضا",
- "tog-enotifrevealaddr": "أظهر عنوان بريدي الإلكتروني في رسائل الإخطار",
- "tog-shownumberswatching": "اعرض عدد المستخدمين المراقبين",
- "tog-oldsig": "التوقيع الحالي:",
+ "tog-watchcreations": "Zid elpàjàt elli għmalt'hom w elfichyéàt elli tʾallagħt'hom l ellista mtagħ elgħassa mtagħi",
+ "tog-watchdefault": "Zid elpàjàt w elfichyéàt elli nbaddelhom l ellista mtagħ elgħassa mtagħi",
+ "tog-watchmoves": "Zid elpàjàt w elfichyéàt elli nhezzhom, l ellista mtagħ elgħassa mtagħi",
+ "tog-watchdeletion": "Zid elpàjàt w elfichyéàt elli nnaħħihom l ellista mtagħ elgħassa mtagħi",
+ "tog-minordefault": "Marki ettabdilàt essʾghàr elkoll par défo",
+ "tog-previewontop": "Warri tʾalla għla chsʾàr qbal ħokket ettabdil",
+ "tog-previewonfirst": "Warri tʾalla għla chsʾàr f ettabdila lawlàniya",
+ "tog-enotifwatchlistpages": "Abgħethli mail waqtelli pàj wella fichyé m ellista mtagħ elgħassa mtagħi tbaddel",
+ "tog-enotifusertalkpages": "Abgħethli mail watelli elpàj mtagħ leħdith mtagħi tetbaddel",
+ "tog-enotifminoredits": "Abgħethli mail zàda għattabdilàt essʾghàr mtagħ elpàjàt w elfichyéàt",
+ "tog-enotifrevealaddr": "Warri ladrisa mail mtagħi f elmailàt mtagħ ennotifikasyon",
+ "tog-shownumberswatching": "Warri għdad lutilizateuràt elgħassàsa",
+ "tog-oldsig": "Ettosʾħàħa elmawjouda:",
"tog-fancysig": "عامل التوقيع كنص ويكي (بدون وصلة أوتوماتيكية)",
"tog-uselivepreview": "استخدم الاستعراض السريع (جافاسكريبت) (تجريبي)",
"tog-forceeditsummary": "نبهني عند إدخال ملخص تعديل فارغ",
@@ -45,8 +46,8 @@
"tog-diffonly": "لا تعرض محتوى الصفحة أسفل الفروقات",
"tog-showhiddencats": "أظهر التصنيفات المخفية",
"tog-norollbackdiff": "أزل الفرق بعد القيام باسترجاع",
- "underline-always": "دائما",
- "underline-never": "أبدا",
+ "underline-always": "Dima",
+ "underline-never": "Jemla",
"underline-default": "تبعا لإعدادات المتصفح",
"editfont-style": "نمط خط منطقة التحرير:",
"editfont-default": "تبعا لإعدادات المتصفح",
@@ -124,96 +125,96 @@
"article": "صفحة محتوى",
"newwindow": "(تفتح في نافذة جديدة)",
"cancel": "ifsa5",
- "moredotdotdot": "المزيد...",
+ "moredotdotdot": "Akther...",
"mypage": "صفحتي",
"mytalk": "نقاشي",
- "anontalk": "النقاش لعنوان الأيبي هذا",
- "navigation": "Navigui",
- "and": "&#32;و",
- "qbfind": "جد",
- "qbbrowse": "ara",
- "qbedit": "modifi el page (baddelha)",
- "qbpageoptions": "هذه الصفحة",
- "qbmyoptions": "صفحاتي",
- "faq": "الأسئلة الأكثر تكرارا",
- "faqpage": "Project:أسئلة متكررة",
- "actions": "Aεmel",
- "namespaces": "El espaces de noms",
- "variants": "Anweε",
- "errorpagetitle": "ghalath",
- "returnto": "ارجع إلى $1.",
- "tagline": "Fima ykhoss {{SITENAME}}",
- "help": "Mouεawna",
+ "anontalk": "Tħaddeth mgħa ladrisa IP hadhi",
+ "navigation": "Ħawwes",
+ "and": "&#32;w",
+ "qbfind": "Lawwej",
+ "qbbrowse": "Navigi",
+ "qbedit": "Baddel",
+ "qbpageoptions": "Elpàj hadhi",
+ "qbmyoptions": "Pàjàti",
+ "faq": "FAQ",
+ "faqpage": "Project:FAQ",
+ "actions": "Aksyonàt",
+ "namespaces": "Blàsʾàt làsàmi",
+ "variants": "Tanwigħàt",
+ "errorpagetitle": "Għaltʾa",
+ "returnto": "Arjagħ l $1.",
+ "tagline": "Men {{SITENAME}}",
+ "help": "Mgħàwna",
"search": "Lawwej",
"searchbutton": "Lawwej",
- "go": "اذهب",
- "searcharticle": "اذهب",
- "history": "teri5 el milaf",
- "history_short": "Historique",
- "updatedmarker": "تم تحديثها منذ زيارتي الأخيرة",
- "printableversion": "Copie bech tetetbaε",
- "permalink": "Lien deyem",
- "print": "itthba3",
- "view": "عرض",
+ "go": "Emchi",
+ "searcharticle": "Lawwej",
+ "history": "Listorik mtagħ elpàj",
+ "history_short": "Listorik",
+ "updatedmarker": "tbaddlet melli jit àkher marra",
+ "printableversion": "Kopi bech tatʾbaħħa",
+ "permalink": "Rabtʾa għla tʾoul",
+ "print": "Atʾbagħ",
+ "view": "Aqra",
"edit": "Baddel",
- "create": "أنشئ",
- "editthispage": "modifi hal page",
- "create-this-page": "أنشئ هذه الصفحة",
- "delete": "احذف",
- "deletethispage": "احذف هذه الصفحة",
- "undelete_short": "استرجاع {{PLURAL:$1|تعديل واحد|تعديلين|$1 تعديلات|$1 تعديل|$1 تعديلا}}",
- "viewdeleted_short": "عرض {{PLURAL:$1|تعديل محذوف|$1 تعديلات محذوفة}}",
- "protect": "احم",
- "protect_change": "غير",
- "protectthispage": "احم هذه الصفحة",
- "unprotect": "غير الحماية",
- "unprotectthispage": "غير حماية هذه الصفحة",
- "newpage": "صفحات جديدة",
- "talkpage": "ناقش هذه الصفحة",
+ "create": "Agħmel",
+ "editthispage": "Baddel f elpàj hadhi",
+ "create-this-page": "Agħmel elpàj hadhi",
+ "delete": "Afsakh",
+ "deletethispage": "Afsakh elpàj hadhi",
+ "undelete_short": "Rajjagħ{{PLURAL:$1|tabdila waħda|$1 tabdila}}",
+ "viewdeleted_short": "Warri {{PLURAL:$1|tabdila waħda mafsoukha|$1 tabdila mafsoukha}}",
+ "protect": "Ħàmi",
+ "protect_change": "baddel",
+ "protectthispage": "Ħàmi għal pàj hadhi",
+ "unprotect": "Baddel elħimàya",
+ "unprotectthispage": "Baddel elħimàya mtagħ elpàj hadhi",
+ "newpage": "Pàj jdida",
+ "talkpage": "Tħaddeth għal pàj hadhi",
"talkpagelinktext": "Ħdith",
- "specialpage": "صفحة خاصة",
- "personaltools": "Outils mteεek",
- "articlepage": "عرض صفحة المحتوى",
+ "specialpage": "Sʾafħa spesyàl",
+ "personaltools": "Magħounek",
+ "articlepage": "Warri elpàj mtagħ elkontenu",
"talk": "Ħdith",
- "views": "Affichages",
- "toolbox": "Outils",
- "userpage": "عرض صفحة المستخدم",
- "projectpage": "عرض صفحة المشروع",
- "imagepage": "عرض صفحة الملف",
- "mediawikipage": "عرض صفحة الرسالة",
- "templatepage": "عرض صفحة القالب",
- "viewhelppage": "عرض صفحة المساعدة",
- "categorypage": "عرض صفحة التصنيف",
- "viewtalkpage": "عرض النقاش",
- "otherlanguages": "Bloughat okhra",
- "redirectedfrom": "(تم التحويل من $1)",
- "redirectpagesub": "صفحة تحويل",
- "lastmodifiedat": "Ekher tabdil elhassafħa nhar $2, mεa $1.",
- "viewcount": "{{PLURAL:$1|لم تعرض هذه الصفحة أبدا|تم عرض هذه الصفحة مرة واحدة|تم عرض هذه الصفحة مرتين|تم عرض هذه الصفحة $1 مرات|تم عرض هذه الصفحة $1 مرة}}.",
- "protectedpage": "صفحة محمية",
- "jumpto": "Emchi el:",
- "jumptonavigation": "Navigation",
+ "views": "Mandhʾer",
+ "toolbox": "Magħoun",
+ "userpage": "Chour elpàj mtagħ lutilizateur",
+ "projectpage": "Chouf elpàj mtagħ leprojé",
+ "imagepage": "Chouf elpàj mtagħ elfichyé",
+ "mediawikipage": "Chouf elpàj mtagħ elmessàj",
+ "templatepage": "Chouf elpàj mtagħ elmodàl",
+ "viewhelppage": "Chouf elpàj mtagħ lemgħàwna",
+ "categorypage": "Chouf elpàj mtagħ elkatégori",
+ "viewtalkpage": "Chouf leħdith",
+ "otherlanguages": "B loughat okhra",
+ "redirectedfrom": "(Tħawwelt men $1)",
+ "redirectpagesub": "Pàj mtagħ taħwil",
+ "lastmodifiedat": "Elpàj hadhi tbaddlet àkher marra nhàr $1, mgħa $2.",
+ "viewcount": "Elpàj hadhi dakhloulha {{PLURAL:$1|marra waħda|$1 marra}}.",
+ "protectedpage": "Pàj protéjé",
+ "jumpto": "Emchi l:",
+ "jumptonavigation": "Ħawwes",
"jumptosearch": "Lawwej",
- "view-pool-error": "عذرا، الخوادم منهكة حاليا.\nيحاول مستخدمون كثر الوصول إلى هذه الصفحة.\nمن فضلك انتظر قليلا قبل أن تحاول الوصول إلى هذه الصفحة مجددا.\n\n$1",
- "pool-timeout": "انتهاء الانتظار للقفل",
- "pool-queuefull": "طابور الاقتراع ملئ",
- "pool-errorunknown": "خطأ غير معروف",
- "aboutsite": "Fima ykhoss {{SITENAME}}",
- "aboutpage": "Project:Fima ykhoss",
+ "view-pool-error": "Pardon, esserveuràt tàgħba tawwa.\nBarcha għbàd yħebbou ychoufou nafs elpàj.\nYgħaychek estanna chway qbal ma tjarreb bech todkhel l elpàj hadhi marra okhra.\n\n\n$1",
+ "pool-timeout": "Waqt esstennya wfa",
+ "pool-queuefull": "Essʾaf mgħabbi",
+ "pool-errorunknown": "Ghaltʾa ma nagħrfouhàch",
+ "aboutsite": "Fima ykhosʾ {{SITENAME}}",
+ "aboutpage": "Project:Fima ykhosʾ",
"copyright": "المحتوى متوفر تحت $1.",
- "copyrightpage": "{{ns:project}}:حقوق النسخ",
- "currentevents": "Laħdeth mtaε tawa",
- "currentevents-url": "Project:Laħdeth mtaε tawa",
- "disclaimers": "Ɛadam mas'ouliya",
- "disclaimerpage": "Project:Ɛadam mas'ouliya bsifa εamma",
- "edithelp": "مساعدة التحرير",
- "mainpage": "Elpage principale",
- "mainpage-description": "Elpage principale",
- "policy-url": "Project:سياسة",
- "portal": "Mojtamaε",
- "portal-url": "Project:Mojtamaε",
- "privacy": "Syeset elconfidentialité",
- "privacypage": "Project:Syeset elconfidentialité",
+ "copyrightpage": "{{ns:project}}:Copyrights",
+ "currentevents": "Elli sʾàyer tawwa",
+ "currentevents-url": "Project:Elli sʾàyer tawwa",
+ "disclaimers": "Tambihàt",
+ "disclaimerpage": "Project:Tambihàt għàmma",
+ "edithelp": "Mgħàwna f elktiba",
+ "mainpage": "Elpàj Lawlàniya",
+ "mainpage-description": "Elpàj Lawlàniya",
+ "policy-url": "Project:Elpolitik",
+ "portal": "Dakhlet elmojtamagħ",
+ "portal-url": "Project:Mojtamagħ",
+ "privacy": "Elpolitik mtagħ elkonfidonsyalité",
+ "privacypage": "Project:Elpolitik mtagħ elkonfidonsyalité",
"badaccess": "خطأ في السماح",
"badaccess-group0": "ليس من المسموح لك تنفيذ الفعل الذي طلبته.",
"badaccess-groups": "الفعل الذي طلبته مقصور على المستخدمين في {{PLURAL:$2||مجموعة|واحدة من مجموعتي|واحدة من مجموعات}}: $1.",
@@ -223,19 +224,19 @@
"retrievedfrom": "Tekhdhet men \"$1\"",
"youhavenewmessages": "توجد لديك $1 ($2).",
"youhavenewmessagesmulti": "لديك رسائل جديدة على $1",
- "editsection": "Baddel essafħa",
+ "editsection": "Baddel essʾafħa",
"editold": "Baddel",
- "viewsourceold": "اعرض المصدر",
- "editlink": "modifi el page (baddelha)",
+ "viewsourceold": "Warri essours",
+ "editlink": "baddel",
"viewsourcelink": "Warri essource",
"editsectionhint": "Baddel essection: $1",
"toc": "Contenu",
- "showtoc": "اعرض",
- "hidetoc": "أخف",
- "collapsible-collapse": "اطو",
- "collapsible-expand": "وسع",
- "thisisdeleted": "أأعرض أو أسترجع $1؟",
- "viewdeleted": "أأعرض $1؟",
+ "showtoc": "Warri",
+ "hidetoc": "Khabbi",
+ "collapsible-collapse": "Tʾabbes",
+ "collapsible-expand": "Wassegħ",
+ "thisisdeleted": "Warri wella rajjagħ $1؟",
+ "viewdeleted": "Warri $1؟",
"restorelink": "{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديلا محذوفا}}",
"feedlinks": "التغذية:",
"feed-invalid": "نوع اشتراك التلقيم غير صحيح.",
@@ -247,13 +248,13 @@
"red-link-title": "$1 (Essafħa mouch mawjouda)",
"sort-descending": "ترتيب تنازلي",
"sort-ascending": "ترتيب تصاعدي",
- "nstab-main": "Safħa",
+ "nstab-main": "Sʾafħa",
"nstab-user": "صفحة مستخدم",
"nstab-media": "صفحة وسيط",
- "nstab-special": "Safħa spéciale",
+ "nstab-special": "Sʾafħa spesyàl",
"nstab-project": "صفحة مشروع",
"nstab-image": "Fichier",
- "nstab-mediawiki": "رسالة",
+ "nstab-mediawiki": "Messàj",
"nstab-template": "قالب",
"nstab-help": "صفحة مساعدة",
"nstab-category": "تصنيف",
@@ -410,14 +411,12 @@
"passwordreset-emailsent-capture": "أرسل بريد إلكتروني تذكيري وهو معروض بالأسفل.",
"passwordreset-emailerror-capture": "ولّد بريد إلكتروني تذكيري وهو معروض بالأسفل لكن فشل إرساله للمستخدم: $1",
"changeemail": "تغيير عنوان البريد الإلكتروني",
- "changeemail-header": "تغيير عنوان البريد الإلكتروني للحساب",
"changeemail-text": "أكمل هذا النموذج لتغيير عنوان البريد الإلكتروني. سوف تحتاج إلى إدخال كلمة السر الخاصة بك لتأكيد هذا التغيير.",
"changeemail-no-info": "يجب تسجيل الدخول للوصول إلى هذه الصفحة مباشرة.",
"changeemail-oldemail": "عنوان البريد الإلكتروني الحالي:",
"changeemail-newemail": "عنوان البريد الإلكتروني الجديد:",
"changeemail-none": "(لا شيء)",
"changeemail-submit": "غيّر البريد الإلكتروني",
- "changeemail-cancel": "ifsa5",
"bold_sample": "نص غليظ",
"bold_tip": "نص غليظ",
"italic_sample": "نص مائل",
@@ -656,7 +655,6 @@
"mergehistory-same-destination": "صفحتا المصدر والهدف لا يمكن أن تكونا نفس الشيء",
"mergehistory-reason": "السبب:",
"mergelog": "سجل الدمج",
- "pagemerge-logentry": "دمج [[$1]] إلى [[$2]] (المراجعات حتى $3)",
"revertmerge": "إلغاء الدمج",
"mergelogpagetext": "بالأسفل قائمة بأحدث عمليات الدمج لتاريخ صفحة ما إلى أخرى.",
"history-title": " «$1»: تاريخ المراجعة",
@@ -668,8 +666,8 @@
"showhideselectedversions": "أظهر/أخف المراجعات المختارة",
"editundo": "Rajjaε",
"diff-multi-manyusers": "({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)",
- "searchresults": "Elrésultats mtaε elrecherche",
- "searchresults-title": "Elrésultats mtaε elrecherche εla \"$1\"",
+ "searchresults": "Errézultʾa mtagħ ettalwij",
+ "searchresults-title": "Errézultʾa mtagħ ettalwij għla \"$1\"",
"prevn": "{{PLURAL:$1|$1}} السابقة",
"nextn": "{{PLURAL:$1|$1}} التالية",
"prevn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة",
@@ -693,7 +691,6 @@
"search-suggest": "هل كنت تقصد: $1",
"searchrelated": "مرتبطة",
"searchall": "Elkol",
- "showingresultsheader": "{{PLURAL:$5|النتيجة '''$1''' من'''$3'''|النتائج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
"search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
"mypreferences": "تفضيلاتي",
"youremail": "البريد:",
@@ -755,7 +752,7 @@
"linkstoimage": "{{PLURAL:$1||الصفحة التالية تصل|الصفحتان التاليتان تصلان|ال$1 صفحات التالية تصل|ال$1 صفحة التالية تصل}} إلى هذا الملف:",
"nolinkstoimage": "لا توجد صفحات تصل لهذا الملف.",
"sharedupload-desc-here": "هذا الملف من $1 ويمكن استخدامه بواسطة المشاريع الأخرى.\nالوصف على [$2 صفحة وصف الملف] هناك معروض بالأسفل.",
- "randompage": "Safħa elli tji",
+ "randompage": "Sʾafħa elli tji",
"statistics": "إحصاءات",
"nbytes": "{{PLURAL:Octet weħed|Zouz octets|$1 octets|$1 en octet}}",
"nmembers": "{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوا|$1 عضو}}",
@@ -767,7 +764,6 @@
"pager-older-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
"booksources": "مصادر كتاب",
"booksources-search-legend": "البحث عن مصادر الكتب",
- "booksources-go": "اذهب",
"log": "سجلات",
"allpages": "kol ess'afa7at",
"allarticles": "kol ess'afa7at",
@@ -782,7 +778,7 @@
"watch": "راقب",
"unwatch": "أوقف المراقبة",
"watchlist-details": "{{PLURAL:$1||صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}} في قائمة مراقبتك، بدون عد صفحات النقاش.",
- "wlshowlast": "عرض آخر $1 ساعات $2 أيام $3",
+ "wlshowlast": "عرض آخر $1 ساعات $2 أيام",
"watchlist-options": "خيارات قائمة المراقبة",
"actioncomplete": "انتهاء العملية",
"actionfailed": "الفعل فشل",
@@ -853,7 +849,7 @@
"tooltip-ca-talk": "Discussion εal contenu mtaε essafħa",
"tooltip-ca-edit": "Tannjem tbaddel essafħa hedhi. Aman enzel εal bouton mtaε elvue el msabqa qbal matsajjel.",
"tooltip-ca-addsection": "ابدأ قسما جديدا",
- "tooltip-ca-viewsource": "El safħa protégée.\nTnajjem tchouf essource mteεha.",
+ "tooltip-ca-viewsource": "Essʾafħa protéjé.\nTnajjem tchouf essours mtaħħa.",
"tooltip-ca-history": "Copiet qdom mtaε essafħa hedhi",
"tooltip-ca-protect": "احم هذه الصفحة",
"tooltip-ca-delete": "احذف هذه الصفحة",
@@ -869,7 +865,7 @@
"tooltip-n-portal": "Ɛ'almachrouε, chnowa tnajem taεmel, win talqa elli ħajtek bih",
"tooltip-n-currentevents": " Alqa information εla aham laħdeth mtaε tawa",
"tooltip-n-recentchanges": "Lista mtaε ajad ettabdilat f'elwiki",
- "tooltip-n-randompage": "Ħell safħa elli tji",
+ "tooltip-n-randompage": "Ħell sʾafħa elli tji",
"tooltip-n-help": "Mouεawna",
"tooltip-t-whatlinkshere": "Lista mtaε safħat elwiki elkol elli twassel elhouni",
"tooltip-t-recentchangeslinked": "Aham ettabldilet f'essafħat elli ywaslou l'essafħa hedhi",
@@ -906,7 +902,6 @@
"metadata": "بيانات ميتا",
"metadata-help": "هذا الملف يحتوي على معلومات إضافية، غالبا ما تكون أضيفت من قبل الكاميرا الرقمية أو الماسح الضوئي المستخدم في إنشاء الملف.\nإذا كان الملف قد عدل عن حالته الأصلية، فبعض التفاصيل قد لا تعبر عن الملف المعدل.",
"metadata-fields": "حقول معطيات الميتا الموجودة في هذه الرسالة سوف تعرض في صفحة الصورة عندما يكون جدول معطيات الميتا مضغوطا.\nالحقول الأخرى ستكون مخفية افتراضيا.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "الكل",
"namespacesall": "الكل",
"monthsall": "الكل",
"watchlistedit-clear-explain": "Elɛanawin lkol bech yetnaħaw mel'lista mteɛek",
diff --git a/languages/i18n/af.json b/languages/i18n/af.json
index 3db54fb8..e9547e93 100644
--- a/languages/i18n/af.json
+++ b/languages/i18n/af.json
@@ -19,7 +19,8 @@
"Spacebirdy",
"Xethron",
"පසිඳු කාවින්ද",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Onderstreep skakels.",
@@ -46,7 +47,7 @@
"tog-shownumberswatching": "Wys die aantal gebruikers wat dophou",
"tog-oldsig": "Bestaande handtekening:",
"tog-fancysig": "Doodgewone handtekening (sonder outomatiese skakel)",
- "tog-uselivepreview": "Gebruik lewendige voorskou (JavaScript) (eksperimenteel)",
+ "tog-uselivepreview": "Gebruik lewendige voorskou",
"tog-forceeditsummary": "Let my daarop as ek nie 'n opsomming van my wysiging gee nie",
"tog-watchlisthideown": "Versteek my wysigings in dophoulys",
"tog-watchlisthidebots": "Versteek robotwysigings in dophoulys",
@@ -221,6 +222,7 @@
"otherlanguages": "Ander tale",
"redirectedfrom": "(Aangestuur vanaf $1)",
"redirectpagesub": "Aanstuurblad",
+ "redirectto": "Aanstuur na:",
"lastmodifiedat": "Die bladsy is laas op $1 om $2 bygewerk.",
"viewcount": "Hierdie bladsy is al {{PLURAL:$1|keer|$1 kere}} aangevra.",
"protectedpage": "Beskermde bladsy",
@@ -273,6 +275,9 @@
"hidetoc": "versteek",
"collapsible-collapse": "Vou toe",
"collapsible-expand": "Vou oop",
+ "confirmable-confirm": "Is {{GENDER:$1|u}} seker?",
+ "confirmable-yes": "Ja",
+ "confirmable-no": "Nee",
"thisisdeleted": "Wys of herstel $1?",
"viewdeleted": "Bekyk $1?",
"restorelink": "{{PLURAL:$1|die geskrapte wysiging|$1 geskrapte wysigings}}",
@@ -507,7 +512,6 @@
"passwordreset-emailsent-capture": "'n E-pos vir die herstel van 'n wagwoord is gestuur. Dit word hieronder vertoon.",
"passwordreset-emailerror-capture": "'n E-pos vir die herstel van 'n wagwoord is saamgestel. Dit word hieronder vertoon. Die uitstuur daarvan na die {{GENDER:$2|gebruiker}} het egter gefaal: $1",
"changeemail": "Wysig E-posadres",
- "changeemail-header": "Wysig rekening se e-posadres",
"changeemail-text": "Voltooi die vorm om u e-posadres te verander. U sal u wagwoord moet insleutel om die verandering te bevestig.",
"changeemail-no-info": "U moet aangemeld wees om regstreeks toegang tot die bladsy te kry.",
"changeemail-oldemail": "Huidige e-posadres:",
@@ -515,7 +519,6 @@
"changeemail-none": "(geen)",
"changeemail-password": "U wagwoord vir {{SITENAME}}:",
"changeemail-submit": "Wysig E-posadres",
- "changeemail-cancel": "Kanselleer",
"resettokens-token-label": "$1 (huidige waarde: $2)",
"bold_sample": "Vetgedrukte teks",
"bold_tip": "Vetdruk",
@@ -642,6 +645,8 @@
"content-model-text": "eenvoudige teks",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Leë objek",
+ "duplicate-args-category": "Bladsye met dubbele sjabloonparameters",
"expensive-parserfunction-warning": "Waarskuwing: Die bladsy gebruik te veel duur ontlederfunksies.\n\nDaar is {{PLURAL:$1|$1 funksie|$1 funksies}}, terwyl die bladsy minder as $2 moet hê.",
"expensive-parserfunction-category": "Bladsye wat te veel duur ontlederfunkies gebruik",
"post-expand-template-inclusion-warning": "'''Waarskuwing:''' Die maksimum toelaatbare grootte vir die insluiting van sjablone is oorskry.\nSommige van die sjablone sal nie ingesluit word nie.",
@@ -721,8 +726,8 @@
"revdelete-hide-text": "Steek hersiening teks weg",
"revdelete-hide-image": "Steek lêer inhoud weg",
"revdelete-hide-name": "Steek aksie en teiken weg",
- "revdelete-hide-comment": "Versteek wysigopsomming",
- "revdelete-hide-user": "Steek redigeerder se gebruikersnaam/IP weg",
+ "revdelete-hide-comment": "Wysigingsopsomming",
+ "revdelete-hide-user": "Gebruikersnaam of IP-adres van die gebruiker",
"revdelete-hide-restricted": "Onderdruk data van administrateurs asook andere",
"revdelete-radio-same": "(moenie verander nie)",
"revdelete-radio-set": "Versteek",
@@ -773,7 +778,6 @@
"mergehistory-same-destination": "Die oorsprong en bestemming kan nie dieselfde wees nie",
"mergehistory-reason": "Rede:",
"mergelog": "Versmeltingslogboek",
- "pagemerge-logentry": "versmelt [[$1]] met [[$2]] (weergawes tot en met $3)",
"revertmerge": "Samesmelting ongedaan maak",
"mergelogpagetext": "Hieronder is 'n lys van die mees onlangse versmeltings van een bladsy se geskiedenis na 'n ander.",
"history-title": "$1: weergawegeskiedenis",
@@ -812,6 +816,8 @@
"search-result-category-size": "{{PLURAL:$1|1 kategorielid|$1 kategorielede}} ({{PLURAL:$2|1 subkategorie|$2 subkategorieë}}, {{PLURAL:$3|1 lêer|$3 lêers}})",
"search-redirect": "(aanstuur $1)",
"search-section": "(afdeling $1)",
+ "search-category": "(kategorie $1)",
+ "search-file-match": "(stem ooreen met die inhoud van die leêr)",
"search-suggest": "Het u $1 bedoel?",
"search-interwiki-caption": "Susterprojekte",
"search-interwiki-default": "Resultate van $1:",
@@ -820,7 +826,6 @@
"searchrelated": "verwante",
"searchall": "alle",
"showingresults": "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} vanaf #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultate '''$1 - $2''' van '''$3'''}} vir '''$4'''",
"search-nonefound": "Daar is geen resultate vir u soekopdrag nie.",
"powersearch-legend": "Gevorderde soektog",
"powersearch-ns": "Soek in naamruimtes:",
@@ -1309,6 +1314,7 @@
"license": "Lisensiëring:",
"license-header": "Lisensiëring",
"nolicense": "Niks gekies nie",
+ "licenses-edit": "Wysig lisensie-opsies",
"license-nopreview": "(Voorskou nie beskikbaar)",
"upload_source_url": " ('n geldige, publiek toeganklike URL)",
"upload_source_file": " ('n lêer op u rekenaar)",
@@ -1324,6 +1330,7 @@
"listfiles_size": "Grootte",
"listfiles_description": "Beskrywing",
"listfiles_count": "Weergawes",
+ "listfiles-show-all": "Sluit ou weergawes van beelde in",
"listfiles-latestversion": "Huidige weergawe",
"listfiles-latestversion-yes": "Ja",
"listfiles-latestversion-no": "Nee",
@@ -1400,14 +1407,12 @@
"randomincategory": "Lukrake bladsy in die kategorie",
"randomincategory-invalidcategory": "\"$1\" is nie 'n geldige kategorienaam nie.",
"randomincategory-nopages": "Daar is geen bladsye in kategorie [[:Category:$1|$1]].",
- "randomincategory-selectcategory": "Kry 'n lukrake bladsy uit hierdie kategorie: $1 $2.",
- "randomincategory-selectcategory-submit": "Gaan",
+ "randomincategory-category": "Kategorie:",
"randomredirect": "Lukrake aanstuur",
"randomredirect-nopages": "Daar is geen aansture in naamruimte \"$1\" nie.",
"statistics": "Statistieke",
"statistics-header-pages": "Bladsystatistiek",
"statistics-header-edits": "Wysigingstatistiek",
- "statistics-header-views": "Wys statistieke",
"statistics-header-users": "Gebruikerstatistiek",
"statistics-header-hooks": "Ander statistieke",
"statistics-articles": "Inhoudelike bladsye",
@@ -1416,13 +1421,9 @@
"statistics-files": "Opgelaaide lêers",
"statistics-edits": "Wysigings sedert {{SITENAME}} begin is",
"statistics-edits-average": "Gemiddelde wysigings per bladsy",
- "statistics-views-total": "Totale aantal bladsye vertoon",
- "statistics-views-total-desc": "Die wys van nie-bestaande bladsye en spesiale bladsye is nie ingesluit nie",
- "statistics-views-peredit": "Bladsye besigtig per wysiging",
"statistics-users": "Geregistreerde [[Special:ListUsers|gebruikers]]",
"statistics-users-active": "Aktiewe gebruikers",
"statistics-users-active-desc": "Gebruikers wat in die afgelope {{PLURAL:$1|dag|$1 dae}} 'n handeling uitgevoer het",
- "statistics-mostpopular": "Mees bekykte bladsye",
"pageswithprop": "Blaaie met 'n bladsy-eienskap",
"pageswithprop-legend": "Blaaie met 'n bladsy-eienskap",
"pageswithprop-text": "Hierdie bladsy lys blaaie met 'n bepaalde blady-eienskap.",
@@ -1461,7 +1462,6 @@
"uncategorizedtemplates": "Ongekategoriseerde sjablone",
"unusedcategories": "Ongebruikte kategorieë",
"unusedimages": "Ongebruikte lêers",
- "popularpages": "Gewilde bladsye",
"wantedcategories": "Gesoekte kategorieë",
"wantedpages": "Gesoekte bladsye",
"wantedpages-badtitle": "Ongeldige bladsynaam in resultate: $1",
@@ -1518,7 +1518,7 @@
"querypage-disabled": "Hierdie spesiale bladsy is afgeskakel om werkverrigting te verbeter (bediener is oorlaai).",
"booksources": "Boekbronne",
"booksources-search-legend": "Soek vir boekbronne",
- "booksources-go": "Soek",
+ "booksources-search": "Soek",
"booksources-text": "Hieronder is 'n lys van webtuistes wat nuwe en gebruikte boeke verkoop, en dalk meer inligting oor die boeke waarna u soek kan bevat:",
"booksources-invalid-isbn": "Die ingevoerde ISBN-kode blyk asof dit ongeldig is; maak asseblief seker dat u dit sonder fout oorgekopiëer het vanaf die oorspronklike bron.",
"specialloguserlabel": "Uitvoerende gebruiker:",
@@ -1641,7 +1641,7 @@
"wlheader-enotif": "E-pos kennisgewings is aangeskakel.",
"wlheader-showupdated": "Bladsye wat verander is sedert u hulle laas besoek het word in '''vetdruk''' uitgewys.",
"wlnote": "Hier volg die laaste {{PLURAL:$1|verandering|'''$1''' veranderings}} binne die laaste {{PLURAL:$2|uur|'''$2''' ure}}, soos vanaf $3 om $4.",
- "wlshowlast": "Wys afgelope $1 ure, $2 dae of $3",
+ "wlshowlast": "Wys afgelope $1 ure, $2 dae of",
"watchlist-options": "Opsies vir dophoulys",
"watching": "Plaas op dophoulys...",
"unwatching": "Verwyder van dophoulys...",
@@ -1688,7 +1688,6 @@
"delete-toobig": "Die bladsy het 'n lang wysigingsgeskiedenis, meer as $1 {{PLURAL:$1|weergawe|weergawes}}.\nVerwydering van die soort blaaie is beperk om ontwrigting van {{SITENAME}} te voorkom.",
"delete-warning-toobig": "Hierdie bladsy het 'n lang wysigingsgeskiedenis; meer as $1 {{PLURAL:$1|wysiging|wysigings}}.\nDeur weg te doen met hierdie bladsy mag dalk die werking van {{SITENAME}} versteur;\nTree asseblief versigtig op.",
"rollback": "Rol veranderinge terug",
- "rollback_short": "Rol terug",
"rollbacklink": "Rol terug",
"rollbacklinkcount": "rol {{PLURAL:$1|een wysiging|$1 wysigings}} terug",
"rollbacklinkcount-morethan": "rol meer as {{PLURAL:$1|een wysiging|$1 wysigings}} terug",
@@ -1845,7 +1844,7 @@
"autoblockid": "Outomatiese blokkade #$1",
"block": "Blok gebruiker",
"unblock": "Deblokkeer gebruiker",
- "blockip": "Blokkeer gebruiker",
+ "blockip": "Blokkeer {{GENDER:$1|gebruiker}}",
"blockip-legend": "Blokkeer gebruiker of IP-adres",
"blockiptext": "Gebruik die vorm hier onder om skryftoegang vir 'n gebruiker of IP-adres in te trek.\nDit mag slegs as beskerming teen vandalisme en in ooreenstemming met die [[{{MediaWiki:Policy-url}}|beleid]] gedoen word.\nVul 'n spesifieke rede hier onder in (haal byvoorbeeld spesifieke bladsye wat gevandaliseer is, aan).",
"ipaddressorusername": "IP-adres of gebruikersnaam:",
@@ -1873,7 +1872,7 @@
"ipb-unblock-addr": "Deblokkeer $1",
"ipb-unblock": "Deblokkeer 'n gebruiker of IP-adres",
"ipb-blocklist": "Wys bestaande blokkades",
- "ipb-blocklist-contribs": "Bydraes van $1",
+ "ipb-blocklist-contribs": "Bydraes van {{GENDER:$1|$1}}",
"unblockip": "Maak IP-adres oop",
"unblockiptext": "Gebruik die vorm hier onder om skryftoegang te herstel vir 'n voorheen geblokkeerde IP-adres.",
"ipusubmit": "Hef blokkade op",
@@ -2062,7 +2061,8 @@
"import": "Voer bladsye in",
"importinterwiki": "Transwiki-importeer",
"import-interwiki-text": "Kies 'n wiki en bladsynaam om te importeer.\nWeergawe- en outeursinligting word sodoende bewaar.\nAlle transwiki-laaie word opgeteken in die [[Special:Log/import|invoer-logboek]].",
- "import-interwiki-source": "Bronwiki/bladsy:",
+ "import-interwiki-sourcewiki": "Bronwiki:",
+ "import-interwiki-sourcepage": "Bronbladsy:",
"import-interwiki-history": "Kopieer ook volledige geskiedenis van hierdie bladsy",
"import-interwiki-templates": "Sluit alle sjablone in",
"import-interwiki-submit": "Importeer",
@@ -2103,18 +2103,14 @@
"import-rootpage-nosubpage": "Die naamruimte \"$1\" van die basisblad laat nie subblaaie toe nie.",
"importlogpage": "Invoer logboek",
"importlogpagetext": "Administratiewe invoere van bladsye met geskiedenis van ander wiki's.",
- "import-logentry-upload": "[[$1]] ingevoer deur 'n lêer op te laai",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|weergawe|weergawes}}",
- "import-logentry-interwiki": "importeer $1 via transwiki",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|weergawe|weergawes}} vanaf $2",
"javascripttest": "JavaScript toetsing",
- "javascripttest-title": "Voer toetse uit vir $1",
"javascripttest-pagetext-noframework": "Hierdie bladsy is gereserveer vir die uitvoer van JavaScript-toetse.",
"javascripttest-pagetext-unknownframework": "Onbekende toetsraamwerk \"$1\".",
"javascripttest-pagetext-frameworks": "Kies een van die volgende toetsraamwerke: $1",
"javascripttest-pagetext-skins": "Kies 'n omslag waarmee die toets uitgevoer moet word:",
"javascripttest-qunit-intro": "Sien die [$1 toetsdokumentasie] op mediawiki.org.",
- "javascripttest-qunit-heading": "QUnit toetssuite vir MediaWiki JavaScript",
"tooltip-pt-userpage": "My gebruikerbladsy",
"tooltip-pt-anonuserpage": "Die gebruikersbladsy vir die IP-adres waaronder u wysigings aanbring",
"tooltip-pt-mytalk": "My besprekingsbladsy",
@@ -2215,7 +2211,6 @@
"pageinfo-robot-policy": "Status vir soekenjins",
"pageinfo-robot-index": "Toegestaan",
"pageinfo-robot-noindex": "Nie toegestaan",
- "pageinfo-views": "Aantal kere gewys",
"pageinfo-watchers": "Aantal dophouers",
"pageinfo-few-watchers": "Minder as {{PLURAL:$1|dophouer|$1 dophouers}}",
"pageinfo-redirects-name": "Aantal aansture na die bladsy",
@@ -2295,6 +2290,7 @@
"newimages-summary": "Die spesiale bladsy wys die nuutste lêers wat na die wiki opgelaai is.",
"newimages-legend": "Filter",
"newimages-label": "Lêernaam (of deel daarvan):",
+ "newimages-showbots": "Wys robotte se oplaaie",
"noimages": "Niks te sien nie.",
"ilsubmit": "Soek",
"bydate": "volgens datum",
@@ -2663,7 +2659,6 @@
"exif-urgency-low": "Laag ( $1 )",
"exif-urgency-high": "Hoog ($1)",
"exif-urgency-other": "Gebruiker-gedefinieerde prioriteit ($1)",
- "watchlistall2": "alles",
"namespacesall": "alle",
"monthsall": "alle",
"confirmemail": "Bevestig e-posadres",
@@ -2699,6 +2694,7 @@
"confirm-watch-top": "Voeg hierdie bladsy by u dophoulys?",
"confirm-unwatch-button": "OK",
"confirm-unwatch-top": "Verwyder hierdie bladsy van u dophoulys?",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← vorige bladsy",
"imgmultipagenext": "volgende bladsy →",
"imgmultigo": "Laat waai!",
@@ -2747,11 +2743,10 @@
"watchlisttools-edit": "Bekyk en wysig dophoulys",
"watchlisttools-raw": "Wysig bronkode",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|kontak]])",
- "unknown_extension_tag": "Onbekende etiket \"$1\"",
"duplicate-defaultsort": "Waarskuwing: Die standaardsortering \"$2\" kry voorrang voor die sortering \"$1\".",
"version": "Weergawe",
"version-extensions": "Uitbreidings geïnstalleer",
- "version-skins": "Omslae",
+ "version-skins": "Geïnstalleerde omslae",
"version-specialpages": "Spesiale bladsye",
"version-parserhooks": "Ontlederhoeke",
"version-variables": "Veranderlikes",
@@ -2763,7 +2758,7 @@
"version-parser-function-hooks": "Ontleder-funksiehoeke",
"version-hook-name": "Hoek naam",
"version-hook-subscribedby": "Gebruik deur",
- "version-version": "(Weergawe $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[geen naam]",
"version-license": "MediaWiki se lisensie",
"version-ext-license": "Lisensie",
@@ -2786,7 +2781,9 @@
"version-entrypoints": "URL's vir ingange",
"version-entrypoints-header-entrypoint": "Ingang",
"version-entrypoints-header-url": "URL",
- "redirect": "Aanstuur volgens lêer, gebruiker of weergawenommer",
+ "version-libraries-library": "Biblioteek",
+ "version-libraries-version": "Weergawe",
+ "redirect": "Aanstuur volgens lêer, gebruiker, bladsy of weergawenommer",
"redirect-legend": "Aanstuur na 'n lêer of bladsy",
"redirect-summary": "Hierdie spesiale bladsy stuur aan na 'n lêer (as 'n lêernaam verskaf word), 'n bladsy (as 'n weergawe-nommer verskaf word) of 'n gebruikersblad (as 'n gebruiker-ID verskaf word).",
"redirect-submit": "OK",
@@ -2821,6 +2818,7 @@
"specialpages-group-wiki": "Data en hulpmiddels",
"specialpages-group-redirects": "Aanstuur gewone bladsye",
"specialpages-group-spam": "Spam-hulpmiddels",
+ "specialpages-group-developer": "Developer Tools",
"blankpage": "Leë bladsy",
"intentionallyblankpage": "Die bladsy is bewustelik leeg gelaat",
"external_image_whitelist": " #Laat hierdie reël onveranderd<pre>\n#Plaas reguliere ekspressiefragmente (slegs die deel tussen //) hieronder\n#Hierdie word vergelyk met die URL's van eksterne (warm-geskakelde) beelde\n#Die wat oplyn word as beelde vertoon, andersins word slegs 'n skakel na die beeld gewys\n#Reëls wat met \"#\" begin word as opmerkings hanteer\n#Hierdie lys is nie gevoelig vir hoofletters nie.\n\n#Plaas alle reguliere expressiefragmente bo hierdie reël. Laat hierdie reël onveranderd</pre>",
@@ -2906,20 +2904,24 @@
"logentry-rights-rights": "$1 {{GENDER:$2|het}} groepslidmaatskap vir $3 van $4 na $5 gewysig",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|het}} groepslidmaatskap vir $3 gewysig",
"logentry-rights-autopromote": "$1 {{GENDER:$2|is}} outomaties van $4 na $5 gepromoveerd",
+ "logentry-upload-upload": "$1 het $3 {{GENDER:$2|opgelaai}}",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|het}} 'n nuwe weergawe van $3 opgelaai",
+ "logentry-upload-revert": "$1 het $3 {{GENDER:$2|opgelaai}}",
"rightsnone": "(geen)",
+ "revdelete-summary": "redigeringsopsomming",
+ "feedback-adding": "U terugvoer word op die bladsy geplaas...",
+ "feedback-bugcheck": "Gaaf! Kontroleer of dit nie dalk een van die [$1 bekende foute] is nie.",
+ "feedback-bugnew": "Ek het gekontroleer. Rapporteer 'n nuwe fout.",
"feedback-bugornote": "As u reg is om 'n tegniese probleem in detail te beskryf, [$1 rapporteer 'n fout].\nAnders kan u die eenvoudige vorm hieronder gebruik. U kommentaar sal by die bladsy \"[$3 $2]\", saam met u gebruikersnaam en die webblaaier wat u gebruik gevoeg word.",
- "feedback-subject": "Onderwerp:",
- "feedback-message": "Boodskap:",
"feedback-cancel": "Kanselleer",
- "feedback-submit": "Stuur terugvoer",
- "feedback-adding": "U terugvoer word op die bladsy geplaas...",
+ "feedback-close": "Gedoen",
"feedback-error1": "Fout: onbekende resultaat van die API",
"feedback-error2": "Fout: Wysiging het gefaal",
"feedback-error3": "Fout: Geen reaksie van API",
+ "feedback-message": "Boodskap:",
+ "feedback-subject": "Onderwerp:",
+ "feedback-submit": "Dien in",
"feedback-thanks": "Dankie! U terugvoer is op die bladsy \"[$2 $1]\" geplaas.",
- "feedback-close": "Gedoen",
- "feedback-bugcheck": "Gaaf! Kontroleer of dit nie dalk een van die [$1 bekende foute] is nie.",
- "feedback-bugnew": "Ek het gekontroleer. Rapporteer 'n nuwe fout.",
"searchsuggest-search": "Soek",
"searchsuggest-containing": "bevat...",
"api-error-badaccess-groups": "U word nie toegelaat om lêers te laai op hierdie wiki.",
@@ -2998,5 +3000,42 @@
"expand_templates_preview": "Voorskou",
"pagelang-name": "Bladsy",
"pagelang-language": "Taal",
- "pagelang-select-lang": "Kies taal"
+ "pagelang-use-default": "Gebruik standaard taal",
+ "pagelang-select-lang": "Kies taal",
+ "right-pagelang": "Wysig die taal van die bladsy",
+ "log-name-pagelang": "Logboek van taalwysigings",
+ "log-description-pagelang": "Hierdie is 'n logboek van wysigings van die taal van bladsye.",
+ "logentry-pagelang-pagelang": "$1 wysig die taal van bladsy '$3' van $4 na $5.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 greep|$1 grepe}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-tipe",
+ "mediastatistics-table-extensions": "Moontlike uitbreidings",
+ "mediastatistics-table-count": "Aantal lêers",
+ "mediastatistics-table-totalbytes": "Totale grootte",
+ "mediastatistics-header-unknown": "Onbekend",
+ "mediastatistics-header-audio": "Oudio",
+ "mediastatistics-header-video": "Video's",
+ "mediastatistics-header-office": "Kantoorlêers",
+ "mediastatistics-header-text": "Tekslêers",
+ "mediastatistics-header-executable": "Uitvoerbare lêers",
+ "mediastatistics-header-archive": "Gekompakteerde lêers",
+ "json-error-syntax": "Sintaksfout",
+ "special-characters-group-latin": "Latyns",
+ "special-characters-group-latinextended": "Latyns uitgebreid",
+ "special-characters-group-ipa": "IFA",
+ "special-characters-group-symbols": "Simbole",
+ "special-characters-group-greek": "Grieks",
+ "special-characters-group-cyrillic": "Cyrillies",
+ "special-characters-group-arabic": "Arabies",
+ "special-characters-group-arabicextended": "Arabies uitgebrei",
+ "special-characters-group-persian": "Persiese",
+ "special-characters-group-hebrew": "Hebreeus",
+ "special-characters-group-bangla": "Bengaals",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/ak.json b/languages/i18n/ak.json
index 3d3cfad9..cc09e7d6 100644
--- a/languages/i18n/ak.json
+++ b/languages/i18n/ak.json
@@ -1,66 +1,66 @@
{
- "@metadata": {
- "authors": [
- "Kasahorow",
- "Natsubee",
- "Paa.kwesi",
- "Riches4christ"
- ]
- },
- "tog-underline": "Twa lenk nyina ase:",
- "tog-hideminor": "Suma nsesae a wɔakɔ so a wɔnnkyɛree koraa",
- "tog-hidepatrolled": "Suma nsesae a wɔapatrole wɔn ndansa yi ara",
- "tog-newpageshidepatrolled": "Suma nkrataafa a wɔapatrole wɔn fi krataafa-foforo lest no so",
- "tog-extendwatchlist": "San list-nhwɛso no mu ama wo ehu nsesae nyinara a wɔakɔ so",
- "tog-usenewrc": "Fa ndansa nsesae a woetu mpon fa di dwuma (wo hia JavaScript)",
- "tog-numberheadings": "Ma ti-nsɛm no ara ankasa mma wɔn ho nɔmba",
- "tog-showtoolbar": "Kyerɛ tulbaa a wɔde yɛ nsesa (wo hia JavaScript)",
- "tog-editondblclick": "Sesa nkrataafa sɛ womia klik mpɛn mienu a (wo hia JavaScript)",
- "sunday": "Kwasiada",
- "monday": "Ɛdwoada",
- "tuesday": "Ɛbenada",
- "wednesday": "Wukuada",
- "thursday": "Yawoada",
- "friday": "Efiada",
- "saturday": "Memeneda",
- "january": "Ɔpɛpɔn",
- "february": "Ɔgyefuo",
- "march": "Ɔbenem",
- "april": "Oforisuo",
- "may_long": "Kɔtonimma",
- "june": "Ayɛwohomumu",
- "july": "Kutawonsa",
- "august": "Ɔsannaa",
- "september": "Ɛbɔ",
- "october": "Ahinime",
- "november": "Obubuo",
- "december": "Ɔpenimma",
- "listingcontinuesabbrev": "toa so",
- "search": "Hwehwɛ",
- "searchbutton": "Hwehwɛ",
- "go": "Kɔ",
- "searcharticle": "Kɔ",
- "history": "Krataafa abakɔsɛm",
- "history_short": "Abakɔsɛm",
- "talkpagelinktext": "Kasa",
- "talk": "Nkɔmbɔ",
- "jumptosearch": "hwehwɛ",
- "aboutsite": "Fa {{SITENAME}} ho",
- "mainpage": "Krataafa Titiriw",
- "editsection": "sesa",
- "editsectionhint": "Sesa sɛkhyɛn: $1",
- "red-link-title": "$1 (krataafa nni hɔ)",
- "nstab-main": "kratafa",
- "login": "Bra mu",
- "nav-login-createaccount": "Bra mu / yɛ akawnt",
- "userlogin": "Bra mu / yɛ akawnt",
- "logout": "Pue",
- "userlogout": "Pue",
- "notloggedin": "Mmbaa mu",
- "nologin": "Wo nni akawnt anaa? $1.",
- "searchresultshead": "Hwehwɛ",
- "hist": "abakɔsɛm",
- "watch": "Hwɛ",
- "sp-contributions-talk": "Kasa",
- "contribslink": "ntoboa"
+ "@metadata": {
+ "authors": [
+ "Kasahorow",
+ "Natsubee",
+ "Paa.kwesi",
+ "Riches4christ"
+ ]
+ },
+ "tog-underline": "Twa lenk nyina ase:",
+ "tog-hideminor": "Suma nsesae a wɔakɔ so a wɔnnkyɛree koraa",
+ "tog-hidepatrolled": "Suma nsesae a wɔapatrole wɔn ndansa yi ara",
+ "tog-newpageshidepatrolled": "Suma nkrataafa a wɔapatrole wɔn fi krataafa-foforo lest no so",
+ "tog-extendwatchlist": "San list-nhwɛso no mu ama wo ehu nsesae nyinara a wɔakɔ so",
+ "tog-usenewrc": "Fa ndansa nsesae a woetu mpon fa di dwuma (wo hia JavaScript)",
+ "tog-numberheadings": "Ma ti-nsɛm no ara ankasa mma wɔn ho nɔmba",
+ "tog-showtoolbar": "Kyerɛ tulbaa a wɔde yɛ nsesa (wo hia JavaScript)",
+ "tog-editondblclick": "Sesa nkrataafa sɛ womia klik mpɛn mienu a (wo hia JavaScript)",
+ "sunday": "Kwasiada",
+ "monday": "Ɛdwoada",
+ "tuesday": "Ɛbenada",
+ "wednesday": "Wukuada",
+ "thursday": "Yawoada",
+ "friday": "Efiada",
+ "saturday": "Memeneda",
+ "january": "Ɔpɛpɔn",
+ "february": "Ɔgyefuo",
+ "march": "Ɔbenem",
+ "april": "Oforisuo",
+ "may_long": "Kɔtonimma",
+ "june": "Ayɛwohomumu",
+ "july": "Kutawonsa",
+ "august": "Ɔsannaa",
+ "september": "Ɛbɔ",
+ "october": "Ahinime",
+ "november": "Obubuo",
+ "december": "Ɔpenimma",
+ "listingcontinuesabbrev": "toa so",
+ "search": "Hwehwɛ",
+ "searchbutton": "Hwehwɛ",
+ "go": "Kɔ",
+ "searcharticle": "Kɔ",
+ "history": "Krataafa abakɔsɛm",
+ "history_short": "Abakɔsɛm",
+ "talkpagelinktext": "Kasa",
+ "talk": "Nkɔmbɔ",
+ "jumptosearch": "hwehwɛ",
+ "aboutsite": "Fa {{SITENAME}} ho",
+ "mainpage": "Krataafa Titiriw",
+ "editsection": "sesa",
+ "editsectionhint": "Sesa sɛkhyɛn: $1",
+ "red-link-title": "$1 (krataafa nni hɔ)",
+ "nstab-main": "kratafa",
+ "login": "Bra mu",
+ "nav-login-createaccount": "Bra mu / yɛ akawnt",
+ "userlogin": "Bra mu / yɛ akawnt",
+ "logout": "Pue",
+ "userlogout": "Pue",
+ "notloggedin": "Mmbaa mu",
+ "nologin": "Wo nni akawnt anaa? $1.",
+ "searchresultshead": "Hwehwɛ",
+ "hist": "abakɔsɛm",
+ "watch": "Hwɛ",
+ "sp-contributions-talk": "Kasa",
+ "contribslink": "ntoboa"
}
diff --git a/languages/i18n/aln.json b/languages/i18n/aln.json
index 6399f447..4ed68bc2 100644
--- a/languages/i18n/aln.json
+++ b/languages/i18n/aln.json
@@ -558,7 +558,6 @@
"mergehistory-comment": "U bashkua [[:$1]] në [[:$2]]: $3",
"mergehistory-same-destination": "Burimi dhe faqja e përcaktimit nuk mund të jenë të njëjta",
"mergelog": "Regjistri i bashkimeve",
- "pagemerge-logentry": "u bashkua [[$1]] në [[$2]] (versione deri më $3)",
"revertmerge": "Çkape",
"mergelogpagetext": "Më poshtë jepet një listë e bashkimeve së fundmi nga historiku i një faqeje në historikun e një faqeje tjetër.",
"history-title": "Historiku i redaktimeve për \"$1\"",
@@ -597,7 +596,6 @@
"searchrelated": "të ngjajshme",
"searchall": "tâna",
"showingresults": "Mâ poshtë {{PLURAL:$1|tregohet '''1''' rezultat|tregohen '''$1''' rezultate}} që nisin me #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Rezultati '''$1''' prej '''$3'''|Rezultatet '''$1 - $2''' prej '''$3'''}} për '''$4'''",
"search-nonefound": "Nuk ka rezultate që përputhen me kërkesën.",
"powersearch-legend": "Kërkimi i detajshëm",
"powersearch-ns": "Kërkimi në hapësina:",
@@ -847,7 +845,6 @@
"pager-older-n": "{{PLURAL:$1|mâ e vjetër 1|mâ të vjetra $1}}",
"booksources": "Burime librash",
"booksources-search-legend": "Kërkim në burime librash",
- "booksources-go": "Shko",
"log": "Regjistrat",
"allpages": "Tâna faqet",
"prevpage": "Faqja paraprake ($1)",
@@ -867,7 +864,7 @@
"watchthispage": "Mbikëqyr këtë faqe",
"unwatch": "Çmbikqyre",
"watchlist-details": "{{PLURAL:$1|$1 faqe|$1 faqe}} në listën tuej të mbikëqyrjes, pa i numrue faqet e diskutimit.",
- "wlshowlast": "Trego $1 orët $2 ditët $3 e fundit",
+ "wlshowlast": "Trego $1 orët $2 ditët e fundit",
"watchlist-options": "Opcionet e listës së mbikëqyrjes",
"watching": "Tuj mbikqyrë...",
"unwatching": "Tuj çmbikqyrë...",
@@ -1048,7 +1045,6 @@
"metadata-expand": "Tregoji detajet",
"metadata-collapse": "Mshefi detajet",
"metadata-fields": "Fushat EXIF metadata që listohen në këtë mesazh do të përfshihen në faqen e figurës kur palohet tabela e metadatave.\nTjerat kanë me mbetë të mshefuna.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "krejt",
"namespacesall": "krejt",
"monthsall": "krejt",
"watchlisttools-view": "Shihi ndryshimet përkatëse",
@@ -1058,6 +1054,7 @@
"revdelete-restricted": "u vendosën kufizime për administruesit",
"revdelete-unrestricted": "u hoqën kufizimet për administruesit",
"rightsnone": "(asgjë)",
+ "revdelete-summary": "përmbledhja redaktimit",
"searchsuggest-search": "Kërkim",
"searchsuggest-containing": "përmban ..."
}
diff --git a/languages/i18n/am.json b/languages/i18n/am.json
index 59808fca..0a96eef7 100644
--- a/languages/i18n/am.json
+++ b/languages/i18n/am.json
@@ -415,7 +415,6 @@
"passwordreset-emailsent-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል።",
"passwordreset-emailerror-capture": "የማስታወሻ ኢ-ሜል ተልኳል፤ ከዚህም ታች ይታያል፤ ነገር ግን ወደ ተጠቃሚው ለመላክ ስንል አልተከናወነም፡",
"changeemail": "ኢ-ሜል አድራሻዎን ለመቀይር",
- "changeemail-header": "የአባልነትዎን ኢ-ሜል አድራሻ ለመቀይር",
"changeemail-text": "ኢ-ሜል አድራሻዎን ለመቀይር ይህን ማመልከቻ ጨርስ። ለውጡን ለማረጋገጥ፣ መግቢያ ቃልዎን ማስገባት አስፈላጊ ነው።",
"changeemail-no-info": "ይህንን ገጽ በቀጥታ ለማግኘት አስቀድሞ መግባት ያስፈልጋል።",
"changeemail-oldemail": "የቆየው ኢ-ሜል አድራሻዎ፦",
@@ -423,7 +422,6 @@
"changeemail-none": "(የለም)",
"changeemail-password": "የ{{SITENAME}} መግቢያ ቃልዎ፦",
"changeemail-submit": "አድራሻዎን ለመቀይር",
- "changeemail-cancel": "ይቅር",
"bold_sample": "ጉልህ ፊደላት",
"bold_tip": "በጉልህ ፊደላት ይጻፍ",
"italic_sample": "ያንጋደደ ፊደላት",
@@ -607,7 +605,6 @@
"mergehistory-same-destination": "መነሻና መድረሻ ገጾች አንድላይ ሊሆኑ አይቻልም",
"mergehistory-reason": "ምክንያቱ፦",
"mergelog": "የመዋሐድ መዝገብ",
- "pagemerge-logentry": "[[$1]]ን ወደ [[$2]] አዋሐደ (እትሞች እስከ $3 ድረስ)",
"revertmerge": "መዋሐዱን ለመገልበጥ",
"mergelogpagetext": "የአንድ ገጽ ታሪክ ወደ ሌላው ሲዋሐድ ከዚህ ታች ያለው ዝርዝር ያሳያል።",
"history-title": "የ«$1» እትሞች ታሪክ",
@@ -649,7 +646,6 @@
"searchrelated": "የተዛመደ",
"searchall": "ሁሉ",
"showingresults": "ከ ቁ.#<b>$2</b> ጀምሮ እስከ <b>$1</b> ውጤቶች ድረስ ከዚህ በታች ይታያሉ።",
- "showingresultsheader": "{{PLURAL:$5|ከ'''$3''' ውጤት ውስጥ '''$1'''|ከ'''$3''' ውጤቶች ውስጥ ከ'''$1''' እስከ '''$2'''}} ለ'''$4'''",
"search-nonefound": "ለጥያቄው ምንም የሚስማማ ውጤት አልተገኘም።",
"powersearch-legend": "ተጨማሪ ፍለጋ",
"powersearch-ns": "በነዚሁ ክፍለ-ዊኪዎች ይፈልግ:",
@@ -1044,7 +1040,6 @@
"statistics-users": "አባልነት የገቡ [[Special:ListUsers|ተጠቃሚዎች]]",
"statistics-users-active": "ተግባራዊ ተጠቃሚዎች",
"statistics-users-active-desc": "ባለፈው {{PLURAL:$1|ቀን|$1 ቀን}} ማንኛውንም ድርጊት የሠሩት ተጠቃሚዎች",
- "statistics-mostpopular": "ከሁሉ የታዩት ገጾች",
"doubleredirects": "ድርብ መምሪያ መንገዶች",
"doubleredirectstext": "ይህ ድርብ መምሪያ መንገዶች ይዘርዘራል።\n\nድርብ መምሪያ መንገድ ካለ ወደ መጨረሻ መያያዣ እንዲሄድ ቢስተካከል ይሻላል።",
"double-redirect-fixed-move": "[[$1]] ተዛውራልና አሁን ለ[[$2]] መምሪያ መንገድ ነው።",
@@ -1075,7 +1070,6 @@
"uncategorizedtemplates": "ያልተመደቡ መለጠፊያዎች",
"unusedcategories": "ባዶ መደቦች",
"unusedimages": "ያልተያያዙ ፋይሎች",
- "popularpages": "የሚወደዱ ገጾች",
"wantedcategories": "ቀይ መያያዣዎች የበዙላቸው መደቦች",
"wantedpages": "ቀይ መያያዣዎች የበዙላቸው አርእስቶች",
"wantedfiles": "የተፈለጉ ፋይሎች",
@@ -1115,7 +1109,6 @@
"booksources": "የመጻሕፍት ቤቶችና ሸጪዎች",
"booksources-search-legend": "የመጽሐፍ ቦታ ፍለጋ",
"booksources-isbn": "የመጽሐፉ ISBN #:",
- "booksources-go": "ይሂድ",
"booksources-text": "ከዚህ ታች ያሉት ውጭ መያያዦች መጻሕፍት ይሸጣሉ፤ ስለ ተፈለጉት መጻሕፍት ተጨማሪ መረጃ እዚያ እንደሚገኝ ይሆናል።",
"specialloguserlabel": "ብዕር ስም፡",
"speciallogtitlelabel": "አርዕስት፡",
@@ -1203,7 +1196,7 @@
"wlheader-enotif": "የ-ኢሜል ማስታወቂያ እንዲሠራ ተደርጓል።",
"wlheader-showupdated": "መጨረሻ ከጎበኟቸው ጀምሮ የተቀየሩት ገጾች በ'''ጉልህ ፊደላት''' ይታያሉ",
"wlnote": "ባለፉት <b>$2</b> ሰዓቶች የተደረጉት $1 መጨረሻ ለውጦች እታች ይገኛሉ።",
- "wlshowlast": "ያለፉት $1 ሰዓት፤ $2 ቀን፤ $3 ይታዩ።",
+ "wlshowlast": "ያለፉት $1 ሰዓት፤ $2 ቀን፤ ይታዩ።",
"watchlist-options": "የዝርዝሩ ምርጫዎች",
"watching": "እየተጨመረ ነው...",
"unwatching": "እየተወገደ ነው...",
@@ -1237,7 +1230,6 @@
"deletereason-dropdown": "*ተራ የማጥፋት ምክንያቶች\n** በአቅራቢው ጥያቄ\n** ማብዛቱ ያልተፈቀደለት ጽሑፍ\n** ተንኮል",
"delete-edit-reasonlist": "'ተራ የማጥፋት ምክንያቶች' ለማዘጋጀት",
"rollback": "ለውጦቹ ይገልበጡ",
- "rollback_short": "ይመለስ",
"rollbacklink": "ROLLBACK ይመለስ",
"rollbackfailed": "መገልበጡ አልተከናወነም",
"cantrollback": "ለውጡን መገልበጥ አይቻልም፦ አቅራቢው ብቻ ስላዘጋጁት ነው።",
@@ -1849,7 +1841,6 @@
"exif-iimcategory-spo": "ስፖርት",
"exif-iimcategory-war": "ጦርነት፣ ግጭት ወይም ሁከት",
"exif-urgency-high": "ከፍተኛ ($1)",
- "watchlistall2": "ሁሉ",
"namespacesall": "ሁሉ (all)",
"monthsall": "ሁሉ",
"confirmemail": "ኢ-ሜልዎን ለማረጋገጥ",
@@ -1907,7 +1898,6 @@
"watchlisttools-view": "የምከታተላቸው ለውጦች",
"watchlisttools-edit": "ዝርዝሩን ለማስተካከል",
"watchlisttools-raw": "የዝርዝሩ ጥሬ ኮድ",
- "unknown_extension_tag": "ያልታወቀ የቅጥያ ምልክት «$1»",
"version": "ዝርያ",
"version-extensions": "የተሳኩ ቅጥያዎች",
"version-specialpages": "ልዩ ገጾች",
@@ -1919,7 +1909,7 @@
"version-parser-function-hooks": "የዘርዛሪ ተግባር ሜጦዎች",
"version-hook-name": "የሜንጦ ስም",
"version-hook-subscribedby": "የተጨመረበት",
- "version-version": "(ዝርያ $1)",
+ "version-version": "($1)",
"version-license": "ፈቃድ",
"version-software": "የተሳካ ሶፍትዌር",
"version-software-product": "ሶፍትዌር",
@@ -1948,6 +1938,7 @@
"htmlform-selectorother-other": "ሌላ",
"logentry-delete-delete": "$1 ገጹን $3 አጠፋ",
"rightsnone": "(የለም)",
+ "revdelete-summary": "ማጠቃለያ",
"feedback-cancel": "ይቅር",
"searchsuggest-search": "ፈልግ",
"searchsuggest-containing": "በመጣጥፎች ይዘት ለመፈልግ...",
diff --git a/languages/i18n/an.json b/languages/i18n/an.json
index bc943291..56586417 100644
--- a/languages/i18n/an.json
+++ b/languages/i18n/an.json
@@ -10,7 +10,8 @@
"Urhixidur",
"Willtron",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Subrayar os vinclos:",
@@ -416,14 +417,12 @@
"passwordreset-emailsent-capture": "Se le ha ninviau un recordatorio por correu electronico, que s'amuestra contino.",
"passwordreset-emailerror-capture": "S'ha chenerau un recordatorio por correu electronico, que s'amuestra contino, pero o ninvío ta l'usuario ha fallau: $1",
"changeemail": "Cambiar l'adreza de correu-e",
- "changeemail-header": "Cambiar l'adreza de correu-e d'a cuenta",
"changeemail-text": "Replene iste formulario ta cambiar a suya adreza de correu electronico. Habrá d'introducir a clau ta confirmar iste cambeo.",
"changeemail-no-info": "Debe identificar-se como usuario ta poder acceder dreitament ta ista pachina.",
"changeemail-oldemail": "Adreza de correu-e actual:",
"changeemail-newemail": "No bi ha garra adreza de correu electronico",
"changeemail-none": "(garra)",
"changeemail-submit": "Cambiar adreza de correu-e",
- "changeemail-cancel": "Cancelar",
"bold_sample": "Texto en negreta",
"bold_tip": "Texto en negreta",
"italic_sample": "Texto en cursiva",
@@ -658,7 +657,6 @@
"mergehistory-same-destination": "As pachinas d'orichen y destín han d'estar diferents",
"mergehistory-reason": "Razón:",
"mergelog": "Rechistro d'unions",
- "pagemerge-logentry": "s'ha fusionato [[$1]] con [[$2]] (revisions dica o $3)",
"revertmerge": "Desfer a fusión",
"mergelogpagetext": "Contino s'amuestra una lista d'as pachinas más recients que os suyos historials s'han fusionato con o d'atra pachina.",
"history-title": "Historial de versions de \"$1\"",
@@ -701,7 +699,6 @@
"searchrelated": "relacionato",
"searchall": "totz",
"showingresults": "Contino se bi {{PLURAL:$1|amuestra '''1''' resultau|amuestran '''$1''' resultaus}} prencipiando por o numero '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Resultau '''$1''' de '''$3'''|Resultaus '''$1-$2''' de '''$3'''}} ta '''$4'''",
"search-nonefound": "No s'ha trobato garra resultau que cumpla os criterios.",
"powersearch-legend": "Busca abanzata",
"powersearch-ns": "Mirar en os espacios de nombres:",
@@ -1229,7 +1226,6 @@
"statistics": "Estatisticas",
"statistics-header-pages": "Estatisticas de pachinas",
"statistics-header-edits": "Estatisticas d'edicions",
- "statistics-header-views": "Estatisticas de vesitas",
"statistics-header-users": "Estatisticas d'usuarios",
"statistics-header-hooks": "Atras estatisticas",
"statistics-articles": "Pachinas de contenito",
@@ -1238,13 +1234,9 @@
"statistics-files": "Fichers cargatos",
"statistics-edits": "Edicions en pachinas dende que se debantó {{SITENAME}}",
"statistics-edits-average": "Meya d'edicions por pachina",
- "statistics-views-total": "Total de vesitas",
- "statistics-views-total-desc": "No s'inclui as vesitas a pachinas inexistents ni a pachinas especials",
- "statistics-views-peredit": "Vesitas por edición",
"statistics-users": "[[Special:ListUsers|Usuarios]] rechistratos",
"statistics-users-active": "Usuarios activos",
"statistics-users-active-desc": "Usuarios que han feito qualsiquier acción en {{PLURAL:$1|o zaguer día|os zaguers $1 días}}",
- "statistics-mostpopular": "Pachinas más vistas",
"doubleredirects": "Reendreceras dobles",
"doubleredirectstext": "En ista pachina s'amuestran as pachinas que son reendreceras enta atras pachinas reendrezatas.\nCada ringlera contién o vinclo t'a primer y segunda reendreceras, y tamién o destino d'a segunda reendrecera, que ye a ormino a pachina obchectivo \"reyal\" a la que a primer pachina habría d'endrezar.",
"double-redirect-fixed-move": "S'ha tresladau [[$1]], agora ye una endrecera ta [[$2]]",
@@ -1276,7 +1268,6 @@
"uncategorizedtemplates": "Plantillas sin categorizar",
"unusedcategories": "Categorías sin emplegar",
"unusedimages": "Imachens sin uso",
- "popularpages": "Pachinas populars",
"wantedcategories": "Categorías requiestas",
"wantedpages": "Pachinas requiestas",
"wantedpages-badtitle": "Títol no conforme en o conchunto de resultaus: $1",
@@ -1324,7 +1315,6 @@
"querypage-disabled": "Ista pachina especial ye desactivata por motivos de rendimiento.",
"booksources": "Fuents de libros",
"booksources-search-legend": "Mirar fuents de libros",
- "booksources-go": "Ir-ie",
"booksources-text": "Contino ye una lista de vinclos ta atros puestos an que venden libros nuevos y usatos, talment bi haiga más información sobre os libros que ye mirando.",
"booksources-invalid-isbn": "O numero d'ISBN dato pareix que no ye conforme; comprebe si no bi ha garra error en copiar d'a fuent orichinal.",
"specialloguserlabel": "Fedor:",
@@ -1434,7 +1424,7 @@
"wlheader-enotif": "A notificación por correu electronico ye activata",
"wlheader-showupdated": "Las pachinas cambiadas dende a suya zaguer vesita s'amuestran en '''negreta'''",
"wlnote": "Contino se i {{PLURAL:$1|amuestra o solo cambeo|amuestran os zaguers '''$1''' cambeos}} feitos en {{PLURAL:$2|a zaguer hora|as zagueras '''$2''' horas}}, o $3 a las $4.",
- "wlshowlast": "Amostrar as zagueras $1 horas, $2 días u $3",
+ "wlshowlast": "Amostrar as zagueras $1 horas, $2 días u",
"watchlist-options": "Opcions d'a lista de seguimiento",
"watching": "Cosirando...",
"unwatching": "Deixar de cosirar...",
@@ -1471,7 +1461,6 @@
"delete-toobig": "Ista pachina tiene un historial d'edicions prou largo, con mas de $1 {{PLURAL:$1|versión|versions}}. S'ha restrinchito o borrau d'ista mena de pachinas ta aprevenir d'a corrompición accidental de {{SITENAME}}.",
"delete-warning-toobig": "Ista pachina tiene un historial d'edición prou largo, con más de $1 {{PLURAL:$1|versión|versions}}. Si la borra podría corromper as operacions d'a base de datos de {{SITENAME}}; contine con cuenta.",
"rollback": "Revertir edicions",
- "rollback_short": "Revertir",
"rollbacklink": "revertir",
"rollbackfailed": "No s'ha puesto revertir",
"cantrollback": "No se pueden revertir as edicions; o zaguer colaborador ye o solo autor d'iste articlo.",
@@ -1835,7 +1824,6 @@
"import": "Importar pachinas",
"importinterwiki": "Importación interwiki",
"import-interwiki-text": "Trigue un wiki y un títol de pachina ta importar.\nAs calendatas d'as versions y os nombres d'os editors se preservarán.\nTodas as importacions interwiki se rechistran en o [[Special:Log/import|rechistro d'importacions]].",
- "import-interwiki-source": "Wiki/pachina fuent:",
"import-interwiki-history": "Copiar todas as versions de l'historial d'ista pachina",
"import-interwiki-templates": "Incluir-ie todas as las plantillas",
"import-interwiki-submit": "Importar",
@@ -1871,18 +1859,14 @@
"import-error-invalid": "A pachina \"$1\" no s'ha importau porque o suyo nombre ye invalido.",
"importlogpage": "Rechistro d'importacions",
"importlogpagetext": "Importacions almenistrativas de pachinas con historial dende atros wikis.",
- "import-logentry-upload": "importata [[$1]] cargando un fichero",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|versión|versions}}",
- "import-logentry-interwiki": "Importata $1 entre wikis",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versión|versions}} dende $2",
"javascripttest": "Prebatinas de JavaScript",
- "javascripttest-title": "Fendo as prebas de $1",
"javascripttest-pagetext-noframework": "Ista pachina ye reservada ta fer as prebas de JavaScrip.",
"javascripttest-pagetext-unknownframework": "Bastida de prebas \"$1\" desconoixida.",
"javascripttest-pagetext-frameworks": "Por favor, trigue una d'as siguients bastidas de prebas: $1",
"javascripttest-pagetext-skins": "Trigue una apariencia ta fer as prebas con ella:",
"javascripttest-qunit-intro": "Mire-se [$1 a documentación de prebatinas] en mediawiki.org",
- "javascripttest-qunit-heading": "Suite de prebas MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "A suya pachina d'usuario",
"tooltip-pt-anonuserpage": "A pachina d'usuario de l'adreza IP dende a que ye editando",
"tooltip-pt-mytalk": "A suya pachina de descusión",
@@ -1980,7 +1964,6 @@
"simpleantispam-label": "Preba anti-spam.\n'''NO''' replene esto!",
"pageinfo-title": "Información ta «$1»",
"pageinfo-header-edits": "Edicions",
- "pageinfo-views": "Numero de vistas",
"pageinfo-watchers": "Numero d'usuarios que la cosiran",
"pageinfo-edits": "Numero d'edicions",
"pageinfo-authors": "Numero d'autors diferents",
@@ -2381,7 +2364,6 @@
"exif-urgency-low": "Baixo ($1)",
"exif-urgency-high": "Alto ($1)",
"exif-urgency-other": "Prioridat definida por l'usuario ($1)",
- "watchlistall2": "totz",
"namespacesall": "totz",
"monthsall": "totz",
"confirmemail": "Confirmar adreza de correu-e",
@@ -2454,7 +2436,6 @@
"watchlisttools-edit": "Veyer y editar a lista de seguimiento",
"watchlisttools-raw": "Editar a lista de seguimiento en formato texto",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discusión]])",
- "unknown_extension_tag": "Etiqueta d'estensión \"$1\" esconoixita",
"duplicate-defaultsort": "Pare cuenta: A clau d'ordenación por defecto «$2» anula l'anterior clau d'ordenación por defecto «$1».",
"version": "Versión",
"version-extensions": "Estensions instalatas",
@@ -2470,7 +2451,7 @@
"version-parser-function-hooks": "Grifios d'as funcions d'o parseyador",
"version-hook-name": "Nombre d'o grifio",
"version-hook-subscribedby": "Suscrito por",
- "version-version": "(Versión $1)",
+ "version-version": "($1)",
"version-license": "Licencia",
"version-poweredby-credits": "Iste wiki funciona gracias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "atros",
@@ -2572,19 +2553,20 @@
"logentry-newusers-create2": "$1 creyó una cuenta d'usuario $3",
"logentry-newusers-autocreate": "S'ha creyau automaticament a cuenta $1",
"rightsnone": "(garra)",
+ "revdelete-summary": "editar resumen",
+ "feedback-adding": "Adhibindo comentarios ta la pachina...",
+ "feedback-bugcheck": "Perfecto! Comprebe nomás que no sía un [$1 fallo conoixiu].",
+ "feedback-bugnew": "L'he comprebau. Informar d'un nuevo fallo.",
"feedback-bugornote": "Si creye que puede describir en detalle un problema tecnico, [$1 informe d'un bug] por favor.\n\nSi no, puet usar o siguient formulario. O suyo comentario será adhibiu a la pachina [$3 $2], de conchunta con o suyo nombre d'usuario y o navegador que fa servir.",
- "feedback-subject": "Afer:",
- "feedback-message": "Mensache:",
"feedback-cancel": "Cancelar",
- "feedback-submit": "Ninviar comentarios",
- "feedback-adding": "Adhibindo comentarios ta la pachina...",
+ "feedback-close": "Feito",
"feedback-error1": "Error: No se reconoixe o resultau de l'API",
"feedback-error2": "Error: Ha fallato a edición",
"feedback-error3": "Error: No i hai respuesta de l'API",
+ "feedback-message": "Mensache:",
+ "feedback-subject": "Afer:",
+ "feedback-submit": "Ninviar",
"feedback-thanks": "Gracias! O suyo comentario s'ha publicau en a pachina [$2 $1].",
- "feedback-close": "Feito",
- "feedback-bugcheck": "Perfecto! Comprebe nomás que no sía un [$1 fallo conoixiu].",
- "feedback-bugnew": "L'he comprebau. Informar d'un nuevo fallo.",
"searchsuggest-search": "Mirar",
"searchsuggest-containing": "que contién...",
"api-error-badaccess-groups": "No puetz cargar fichers en iste wiki.",
@@ -2633,5 +2615,22 @@
"expand_templates_ok": "Confirmar",
"expand_templates_remove_comments": "Sacar comentarios",
"expand_templates_generate_xml": "Amostrar l'árbol de parseyo XML",
- "expand_templates_preview": "Previsualización"
+ "expand_templates_preview": "Previsualización",
+ "special-characters-group-latin": "Latín",
+ "special-characters-group-latinextended": "Latín enamplau",
+ "special-characters-group-ipa": "AFI(IPA)",
+ "special-characters-group-symbols": "Símbols",
+ "special-characters-group-greek": "Griego",
+ "special-characters-group-cyrillic": "Cirilico",
+ "special-characters-group-arabic": "Arabico",
+ "special-characters-group-arabicextended": "Arabigo extendiu",
+ "special-characters-group-persian": "Persa",
+ "special-characters-group-hebrew": "Hebreu",
+ "special-characters-group-bangla": "Bengalí",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Cingalés",
+ "special-characters-group-gujarati": "Gujaratí",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Laosiano",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/ang.json b/languages/i18n/ang.json
index c3bcbf62..9221af9b 100644
--- a/languages/i18n/ang.json
+++ b/languages/i18n/ang.json
@@ -11,7 +11,8 @@
"Spacebirdy",
"Tsepelcory",
"Wōdenhelm",
- "아라"
+ "아라",
+ "Dpk"
]
},
"tog-underline": "Mearc under hlencan:",
@@ -29,8 +30,8 @@
"tog-watchmoves": "Ēacnian mīn behealdungtæl mid trametum and ymelum þā ic wege.",
"tog-watchdeletion": "Ēacnian mīn behealdungæl mid trametum and ymelum þā ic forlēose.",
"tog-minordefault": "Mearcian ealla adihtunga lytela tō gewunan",
- "tog-previewontop": "Īwan fōrebysene ofer adihtunge mearce",
- "tog-previewonfirst": "Īwan fōrebysene on forman adihtunge",
+ "tog-previewontop": "Īwan forebysene ofer adihtunge mearce",
+ "tog-previewonfirst": "Īwan forebysene on forman adihtunge",
"tog-enotifwatchlistpages": "Sendan mē spearcǣrend þǣr tramet oþþe ymele on mīnum behealdungtæle sīe andwended.",
"tog-enotifusertalkpages": "Sendan mē spearcǣrend þǣr mīnes brūcendtrametes mōtung sī andwended",
"tog-enotifminoredits": "Sendan mē spearcǣrend þǣr trametas oþþe ymelan sīen efne lyt andwended.",
@@ -38,7 +39,7 @@
"tog-shownumberswatching": "Īwan þæt rīm behealdendra brūcenda",
"tog-oldsig": "Genge selfmearc:",
"tog-fancysig": "Dōn selfmearce tō wikitexte (lēas ǣr gedōnes hlencan)",
- "tog-uselivepreview": "Notian rihte īwde fōrebysene (on costnunge)",
+ "tog-uselivepreview": "Notian rihte īwedre forebysene",
"tog-forceeditsummary": "Cȳðan mē þǣr ic ne wrīte adihtunge sceortnesse",
"tog-watchlisthideown": "Hȳdan mīna adihtunga wiþ þæt behealdungtæl",
"tog-watchlisthidebots": "Hȳdan searuþrǣla adihtunga wiþ þæt behealdungtæl",
@@ -63,14 +64,14 @@
"sunday": "Sunnandæg",
"monday": "Mōnandæg",
"tuesday": "Tīwesdæg",
- "wednesday": "Wēdnesdæg",
+ "wednesday": "Wōdnesdæg",
"thursday": "Þunresdæg",
"friday": "Frigedæg",
"saturday": "Sæterndæg",
"sun": "Sun",
"mon": "Mōn",
"tue": "Tīw",
- "wed": "Wēd",
+ "wed": "Wōd",
"thu": "Þun",
"fri": "Fri",
"sat": "Sæt",
@@ -160,6 +161,7 @@
"actions": "Fremmunga",
"namespaces": "Namstedas",
"variants": "Missenlīcnessa",
+ "navigation-heading": "Sōcne getæl",
"errorpagetitle": "Wōh",
"returnto": "Gān eft tō $1",
"tagline": "Fram {{SITENAME}}",
@@ -175,12 +177,15 @@
"permalink": "Fæst hlenca",
"print": "Ūtmǣlan",
"view": "Sihþ",
+ "view-foreign": "Sihþ on $1",
"edit": "Adihtan",
"create": "Scieppan",
+ "create-local": "Besettan stōwlice gemearcunge",
"editthispage": "Adihtan þisne tramet",
"create-this-page": "Scieppan þisne tramet",
"delete": "Forlēosan",
"deletethispage": "Forlēosan þisne tramet",
+ "undeletethispage": "Undōn þā forlēosunge þisses trametes",
"undelete_short": "Scieppan {{PLURAL:$1|āne adihtunge|$1 adihtunga}} eft",
"viewdeleted_short": "Sēon {{PLURAL:$1|āne forlorene adihtunge|$1 forlorenra adihtunga}}",
"protect": "Beorgan",
@@ -208,6 +213,7 @@
"otherlanguages": "On ōðrum sprǣcum",
"redirectedfrom": "(Edlǣded fram $1)",
"redirectpagesub": "Edlǣdunge tramet",
+ "redirectto": "Edlǣdan tō:",
"lastmodifiedat": "Man nīwanost wende þisne tramet on þǣre $2 tīde þæs $1.",
"viewcount": "Þes tramet wæs gesawen {{PLURAL:$1|āne|$1 mǣla}}.",
"protectedpage": "Geborgen tramet",
@@ -243,6 +249,7 @@
"youhavenewmessagesfromusers": "Þū hafast $1 fram {{PLURAL:$3|ōðrum brūcende|$3 brūcenda}} ($2).",
"youhavenewmessagesmanyusers": "Þū hafast $1 fram manigum brūcendum ($2).",
"newmessageslinkplural": "{{PLURAL:$1|nīwe ǣrendgewrit|999=nīwra ǣrendgewrita}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|nīwost andwendung|999=nīwostra andwendunga}}",
"youhavenewmessagesmulti": "Þū hæfst nīwu ǣrendu on $1",
"editsection": "adihtan",
"editold": "adihtan",
@@ -253,6 +260,11 @@
"toc": "Innung",
"showtoc": "īwan",
"hidetoc": "hȳdan",
+ "collapsible-collapse": "Lytlian",
+ "collapsible-expand": "Brǣdan",
+ "confirmable-confirm": "Ƿilt þū þis ƿitodlīce dōn?",
+ "confirmable-yes": "Gēa",
+ "confirmable-no": "Nese",
"thisisdeleted": "Sēon oþþe nīwian $1?",
"viewdeleted": "Sēon $1 lā?",
"restorelink": "{{PLURAL:$1|ān forloren ādihtung|$1 forlorenra adihtunga}}",
@@ -282,19 +294,36 @@
"nospecialpagetext": "<strong>Þū hafast abiden ungenges syndriges trametes.</strong>\n\nGetæl gengra syndrigra trameta cann man findan be [[Special:SpecialPages|þǣm syndrigra trameta getæle]].",
"error": "Wōh",
"databaseerror": "Cȳþþuhordes wōh",
+ "databaseerror-error": "Wōg: $1",
"laggedslavemode": "'''Warnung:''' Wēnunga næbbe se tramet nīwlīca nīwunga.",
+ "readonly": "Ġifhord locen",
"enterlockreason": "Wrīt race þǣre forwiernunge and apinsunge þæs tīman on þǣm bēo sēo forwiernung forlǣten",
"missingarticle-rev": "(nīwung#: $1)",
"internalerror": "Inweard wōh",
"internalerror_info": "Inweard wōh: $1",
+ "filecopyerror": "Nē cūðe biwrītan þā ymelan \"$1\" tō \"$2\".",
"filerenameerror": "Ne cūðe ednemnan ymelan \"$1\" tō \"$2\".",
+ "filedeleteerror": "Ne cūðe forlēosan þā ymelan \"$1\".",
"filenotfound": "Ne cūðe findan ymelan \"$1\".",
"formerror": "Wōh: ne cūðe cȳþþugewrit forþsendan.",
"badarticleerror": "Þēos dǣd ne cann bēon gefremed on þissum tramete.",
+ "cannotdelete-title": "Ne cann forlēosan þone tramet \"$1\"",
"badtitle": "Nā genge titul",
+ "querypage-no-updates": "Ednīwunga for þissum tramete ne sindon nū gelīfeda. \nCȳþþu hēr ne biþ hraðe ednīwod.",
"viewsource": "Sēon fruman",
"viewsource-title": "Fruman for $1 sēon",
+ "protectedpagetext": "Þes tramet wæs geborgen tō wyrnenne ōðerre adihtunge oþþe ōðra dǣda.",
+ "viewsourcetext": "Þū canst sēon and biwrītan þone fruman þisses trametes:",
+ "viewyourtext": "Þū canst sēon and biwrītan þone fruman <strong>þīnra adihtunga</strong> tō þissum tramete:",
"cascadeprotected": "Þes trament wæs geborgen wiþ adihtunge, for þǣm þe hē is befangen in þissum {{PLURAL:$1|tramente, þe is| tramentum, þe sind}} geborgen settum wyrcende þǣm cyre \"cascading\": $2",
+ "namespaceprotected": "Þū nafast lēafe tō adihtenne trametas in þǣm <strong>$1</strong> namstede.",
+ "customcssprotected": "Þū nafast lēafe tō adihtenne þisne CSS tramet for þȳ hē behealdeþ ōðres brūcendes āgna gesetednessa.",
+ "customjsprotected": "Þū nafast lēafe tō adihtenne þisne JavaScript tramet for þām hē behealdeþ ōðres hādes āgna gesetednessa.",
+ "mycustomcssprotected": "Þū nafast lēafe tō adihtenne þisne CSS tramet.",
+ "mycustomjsprotected": "Þū nafast lēafe tō adihtenne þisne JavaScript tramet.",
+ "myprivateinfoprotected": "Þū nafast lēafe tō adihtenne þīne āgnan cȳþþu.",
+ "mypreferencesprotected": "Þū nafast lēafe tō adihtenne þīna foreberunga.",
+ "ns-specialprotected": "Syndrige trametas ne cunnon wesan adihted.",
"exception-nologin": "Ne inloggod",
"virus-badscanner": "Yfel gesetedness: Uncūþ wyrmsēcend: <em>$1</em>",
"virus-unknownscanner": "uncūþ andgund:",
@@ -346,11 +375,18 @@
"acct_creation_throttle_hit": "Nēosiende tō þissum wici, þe þīnne IP-Stōwe brȳcþ, hæfþ gesett {{PLURAL:$1|1 hordcleofan|$1 hordcleofan}} in þǣm læsten dæge. Þu ne canst settan ǣnige māran. Þǣrfram ne cunnon Nēosiende, þe þisne IP-Stōwe brȳcþ, settan ǣnige hordcleofan māran on þisse handhwīle.",
"accountcreated": "Scōp reccinge",
"loginlanguagelabel": "Sprǣc: $1",
+ "pt-login": "Inmeldian",
+ "pt-login-button": "Inmeldian",
+ "pt-createaccount": "Ūtmeldian",
+ "pt-userlogout": "Ūtmeldian",
+ "changepassword": "Andwendan þafungword",
"oldpassword": "Eald þafungword:",
"newpassword": "Nīwe þafungword:",
"retypenew": "Wrīt nīwe þafungword eft:",
"resetpass-submit-loggedin": "Andwendan þafungword",
"resetpass-submit-cancel": "Undōn",
+ "passwordreset": "Settan þafungword eft",
+ "passwordreset-legend": "Settan þafungword eft",
"passwordreset-username": "Brūcendnama:",
"bold_sample": "Þicce traht",
"bold_tip": "Þicce traht",
@@ -375,10 +411,10 @@
"minoredit": "Þēos is lytel adihtung",
"watchthis": "Behealdan þisne tramet",
"savearticle": "Hordian tramet",
- "preview": "Fōrebysen",
- "showpreview": "Īwan fōrebysene",
+ "preview": "Forebysen",
+ "showpreview": "Īwan forebysene",
"showdiff": "Īwan andwendunga",
- "summary-preview": "Scortnesse fōrebysen:",
+ "summary-preview": "Scortnesse forebysen:",
"blockednoreason": "nān racu gifen",
"whitelistedittext": "Þū scealt $1 to adihtenne trametas.",
"nosuchsectiontitle": "Ne cann dǣl findan",
@@ -390,11 +426,12 @@
"newarticle": "(Nīwe)",
"newarticletext": "Þū hæfst hlencan tō tramete þe nū gīet ne stent gefolgod.\nTō scieppene þone tramet, onginn tō wrītenne in þǣre mearce þe is beneoþan (seoh þone [$1 helpes tramet] ymb mā cȳþþu).\nGif þū hider be misfēnge cōme, cnoca þīnes webbsēcendes '''on bæc''' cnæpp.",
"usercssyoucanpreview": "'''Rǣd:''' Brūc þone \"{{int:Forescēaƿian}}\" cnæpp tō costnienne þīne nīwan css/js wrītunge ǣr hit sīe hordod.",
- "userjsyoucanpreview": "'''Rǣd:''' Brūc þone 'Īwan fōrebysene' cnæpp tō costienne þīnre nīwan JavaScrip fadunge ǣr þū hordie.",
+ "userjsyoucanpreview": "'''Rǣd:''' Brūc þone \"{{int:showpreview}}\" cnæpp tō costienne þīnre nīwan JavaScrip fadunge ǣr þū hordie.",
"updated": "(Ednīwed)",
"note": "'''Gewritincel:'''",
- "previewnote": "'''Beþenc þe þis is gīet efne fōrebysen.'''\nÞīna andwendunga gīet ne sind hordoda!",
+ "previewnote": "<strong>Beþenc þe þis is gīet efne forebysen.</strong>\nÞīna andwendunga gīet ne sind hordoda!",
"editing": "Adihtende $1",
+ "creating": "Scipþ nū $1",
"editingsection": "Adihtende $1 (dǣl)",
"editingcomment": "Adihtende $1 (nīwe dǣl)",
"editconflict": "Adihtunge wiþdǣd: $1",
@@ -403,7 +440,7 @@
"yourdiff": "Fǣgnessa",
"copyrightwarning2": "Bidde behielde þæt man mæg ealla forðunga tō {{SITENAME}}\nādihtan, hweorfan, oþþe forniman.\nGif þū ne wille man þīn gewrit ādihtan unmildheorte, þonne hīe hēr ne forþsendan.<br />\nÞū behǣtst ēac þæt þū selfa þis write, oþþe efenlǣhtest of sumre\nfolclicum āgnunge oþþe gelīcum frēom horde (sēo $1 for āscungum).\n'''Ne forþsend efenlǣhtscielded weorc būtan þafunge!'''",
"templatesused": "{{PLURAL:$1|Þēos bysen is|Þās bysena sind}} gebrocen on þissum tramete:",
- "templatesusedpreview": "{{PLURAL:$1|Þēos bysen is|Þās bysena sind}} gebrocen on þisre fōrebysene:",
+ "templatesusedpreview": "{{PLURAL:$1|Þēos bysen is|Þās bysena sind}} gebrocen on þisre forebysene:",
"template-protected": "(geborgen)",
"template-semiprotected": "(sāmborgen)",
"hiddencategories": "Þes tramet is gesibb {{PLURAL:$1|1 gehȳdedum flocce|$1 gehȳdedra flocca}}:",
@@ -411,6 +448,7 @@
"permissionserrors": "Þafunge wōh",
"permissionserrorstext-withaction": "Þū ne hæfst þafunge tō $2, for {{PLURAL:$1|þisre race|þissum racum}}:",
"recreate-moveddeleted-warn": "'''Warnung: Þū edsciepst tramet þe wæs ǣr forloren.'''\n\nÞu sceoldest smēagan, hwæðer hit gerādlīc sīe, forþ tō gānne mid þǣre adihtunge þisses trametes.\nÞæt forlēosunge and wegunge ealdhord þisses trametes is hēr geīeht for behēfnesse:",
+ "moveddeleted-notice": "Þes tramet wæs forloren.\nÞæt forlēosunge and wǣgunge stǣr þæs trametes is geīwed hēr.",
"viewpagelogs": "Sēon þisses trametes ealdhold",
"nohistory": "Nis nān adihtunge stǣr for þissum tramete.",
"currentrev-asof": "Nīwost fadung on þǣre $3. tīde þæs $2.",
@@ -421,6 +459,8 @@
"cur": "nū",
"next": "nīehst",
"last": "ǣr",
+ "page_first": "ǣrost",
+ "page_last": "ǣrra",
"history-fieldset-title": "Sēcan stǣr",
"histfirst": "ieldeste",
"histlast": "nīwoste",
@@ -448,6 +488,7 @@
"mergehistory-reason": "Racu:",
"revertmerge": "Settan þā geānlǣcinge on bæc",
"history-title": "Ednīwunga stǣr for \"$1\"",
+ "difference-title": "Fǣgness betweox fadungum \"$1\"",
"lineno": "$1. līne:",
"compareselectedversions": "Bemetan gecorena ednīwunga",
"editundo": "undōn",
@@ -461,8 +502,10 @@
"searchprofile-articles": "Innunge trametas",
"searchprofile-images": "Missenendebyrdness",
"searchprofile-everything": "Gehwæt",
+ "searchprofile-advanced": "Manigfeald",
"searchprofile-articles-tooltip": "Sēcan in $1",
"searchprofile-images-tooltip": "Sēcan ymelan",
+ "searchprofile-everything-tooltip": "Sēcan geond ealla innunga (ēac mōtungum)",
"search-result-size": "$1 ({{PLURAL:$2|1 word|$2 worda}})",
"search-redirect": "(edlǣded fram \"$1\")",
"search-section": "(dǣl $1)",
@@ -473,13 +516,14 @@
"searchrelated": "gesibb",
"searchall": "eall",
"showingresults": "Īewan under oþ <b>$1</b> tōhīgunga onginnenda mid #<b>$2</b>.",
+ "search-nonefound": "Ne cūðe findan þæt þū woldest.",
"powersearch-legend": "Manigfeald sēcung",
"powersearch-ns": "Sēcan in namstedum:",
"search-external": "Ūtanweard sōcn",
- "preferences": "Fōreberunga",
- "mypreferences": "Mīna fōreberunga",
+ "preferences": "Foreberunga",
+ "mypreferences": "Foreberunga",
"prefs-skin": "Scynn",
- "skin-preview": "Fōrebysen",
+ "skin-preview": "Forebysen",
"prefs-rc": "Nīwa andwendunga",
"prefs-watchlist": "Wæccgetæl",
"saveprefs": "Hordian",
@@ -487,7 +531,7 @@
"columns": "Sȳla:",
"searchresultshead": "Sōcn",
"recentchangescount": "Hū mæniga adihtunga to īwenne gewunelīce:",
- "savedprefs": "Þīna fōreberunga wurdon gehordod.",
+ "savedprefs": "Þīna foreberunga wurdon gehordod.",
"timezonelegend": "Tīdgeard",
"servertime": "Þegntōles tīd is nū:",
"default": "gewunelic",
@@ -522,20 +566,32 @@
"rightslog": "Brūcenda riht cranic",
"action-edit": "adihtan þisne tramet",
"nchanges": "$1 {{PLURAL:$1|andwendung|andwendunga}}",
+ "enhancedrc-history": "stǣr",
"recentchanges": "Nīwa andwendunga",
"recentchanges-legend": "Nīwra andwendunga cyras",
+ "recentchanges-summary": "Sēon þā nīwostan andwendunga þisses wiki on þissum tramete",
"recentchanges-feed-description": "Īwan þā nīwostan andwendunga þæs wiki mid þissum strēame",
"recentchanges-label-newpage": "Þēos adihtung scōp nīwne tramet",
"recentchanges-label-minor": "Þēos is lytel adihtung",
"recentchanges-label-bot": "Searuþrǣl fremede þās adihtunge",
+ "recentchanges-label-plusminus": "Þæs trametes micelness wæs andwended þȳs rīme grēatbitena",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (seoh ēac [[Special:NewPages|getæl nīwra trameta]])",
"rcnotefrom": "Niðer sind þā andwendunga fram <strong>$2</strong> (mǣst īweþ <strong>$1</strong>).",
"rclistfrom": "Īwan nīwa andwendunga fram $3 $2 and siþþan",
"rcshowhideminor": "$1 lytela adihtunga",
+ "rcshowhideminor-show": "Īwan",
+ "rcshowhideminor-hide": "Hȳdan",
"rcshowhidebots": "$1 searuþrǣlas",
+ "rcshowhidebots-show": "Īwan",
+ "rcshowhidebots-hide": "Hȳdan",
"rcshowhideliu": "$1 brūcendas on nambēc",
+ "rcshowhideliu-hide": "Hȳdan",
"rcshowhideanons": "$1 uncūðe brūcendas",
+ "rcshowhideanons-show": "Īwan",
+ "rcshowhideanons-hide": "Hȳdan",
"rcshowhidemine": "$1 mīna adihtunga",
+ "rcshowhidemine-show": "Īwan",
+ "rcshowhidemine-hide": "Hȳdan",
"rclinks": "Īwan þā nīwostan $1 andwendunga in þissum nīehstum $2 daga<br />$3",
"diff": "scēad",
"hist": "stǣr",
@@ -570,7 +626,7 @@
"license": "Lēaf:",
"license-header": "Lēaf:",
"nolicense": "Nān is gecoren",
- "license-nopreview": "(Fōrebysen nis gearu)",
+ "license-nopreview": "(Forebysen nis gearu)",
"listfiles-summary": "Þes syndriga tramet īweþ ealla forþ gehladena ymelan.",
"listfiles_search_for": "Sēcan missenendebyrdnesse naman:",
"imgfile": "ymele",
@@ -602,7 +658,9 @@
"morelinkstoimage": "Sēon [[Special:WhatLinksHere/$1|mā hlencan]] tō þisre ymelan.",
"duplicatesoffile": "{{PLURAL:$1|Sēol folgiende ymele is gelīcnes|Þā folgiendan ymelan sind gelīcnessa}} þisse ymelan (seoh [[Special:FileDuplicateSearch/$2|mā cȳþþe ymbe þis]]):",
"sharedupload": "Þēos ymele is fram $1 and man mæg hīe brūcan on ōðrum weorcum.",
+ "sharedupload-desc-here": "Þēos ymele is fram $1 and cann wesan gebrocen fram ōðrum weorcum. Sēo amearcung on hire [$2 tramete ymelan amearcunge] þǣr is hēr geīwed.",
"uploadnewversion-linktext": "Hladan nīwe fadunge þisse ymelan forþ",
+ "upload-disallowed-here": "Þū ne canst wrītan ofer þisse ymelan.",
"filerevert-legend": "Settan ymelan on bæc",
"filedelete-submit": "Forlēosan",
"unusedtemplateswlh": "ōðre hlencan",
@@ -611,7 +669,6 @@
"statistics-articles": "Innunge trametas",
"statistics-pages": "Trametas",
"statistics-users-active": "Hwate brūcendas",
- "statistics-mostpopular": "Gesawenoste trametas",
"doubleredirects": "Twifealda edlǣdunga",
"brokenredirects": "Gebrocena edlǣdunga",
"brokenredirectstext": "Þā folgiendan edlǣdunga gāþ tō æfweardum trametum.",
@@ -626,7 +683,6 @@
"specialpage-empty": "Nis þǣr nāht þe āh cȳðan þes tramet.",
"lonelypages": "Ealdorlēase trametas",
"unusedimages": "Īdela ymelan",
- "popularpages": "Folclīce trametas",
"wantedcategories": "Gewilnode floccas",
"wantedpages": "Gewilnode trametas",
"mostlinked": "Trametas mid þǣm mǣstan rīme hlencena",
@@ -645,7 +701,7 @@
"pager-older-n": "{{PLURAL:$1|ieldre 1|ieldran $1}}",
"booksources": "Bōcfruman",
"booksources-search-legend": "Sēcan bōcfruman",
- "booksources-go": "Gān",
+ "booksources-search": "Sēcan",
"booksources-text": "Niðer is getæl hlencena tō ōðrum webstedum þe cīpaþ nīwa and gebrocena bēc, and wēninga hæbben ēac mā cȳþþu ymbe bēc þe þu sēcst:",
"specialloguserlabel": "Gelǣstende brūcend:",
"speciallogtitlelabel": "Ende (trametes titul oþþe brūcendes nama):",
@@ -689,7 +745,7 @@
"unwatchthispage": "Ablinnan behealdunge",
"watchlist-details": "{{PLURAL:$1|Þǣr is $1 tramet|Þǣr sind $1 trameta}} on þīnum behealdunggetæle, nā sunderlīce arīmedum mōtunga trametum.",
"wlnote": "Niðer {{PLURAL:$1|is sēo nīwoste andwendung|sind þā nīwostan '''$1''' andwendunga}} in {{PLURAL:$2|þǣre latostan tīde|þǣm latostan '''$2''' tīda}}, fram: $3, $4.",
- "wlshowlast": "Īwan þā nīwostan $1 tīda $2 daga $3",
+ "wlshowlast": "Īwan þā nīwostan $1 tīda $2 daga",
"watchlist-options": "Behealdungtæles cyras",
"watching": "Behealdende...",
"unwatching": "Ablinnende behealdunge...",
@@ -702,14 +758,13 @@
"deletepage": "Forlēosan tramet",
"excontent": "innung wæs: \"$1\"",
"excontentauthor": "innung wæs: '$1' (and se āna forðiend wæs \"[[Special:Contributions/$2|$2]]\")",
- "historywarning": "'''Warnung''': Se tramet þe þū wilt forlēosan hafaþ stǣr mid nēan $1 {{PLURAL:$1|fadunge|fadunga}}:",
+ "historywarning": "<strong>Warnung:</strong> Se tramet þe þū wilt forlēosan hafaþ stǣr mid $1 {{PLURAL:$1|fadunge|fadunga}}:",
"actioncomplete": "Dǣd is fulfyled",
"dellogpage": "Forlēosunge ealdhord",
"deletionlog": "forlēosunge ealdhord",
"deletecomment": "Racu:",
"deleteotherreason": "Ōðra/nīehst racu:",
"deletereasonotherlist": "Ōðru racu",
- "rollback_short": "Settan on bæc",
"rollbacklink": "settan on bæc",
"rollbackfailed": "Bæcsettung tōsǣlde",
"editcomment": "Þǣre adihtunge se cwide wæs: \"''$1''\".",
@@ -773,7 +828,7 @@
"whatlinkshere-hidetrans": "$1 bysene nytta",
"whatlinkshere-hidelinks": "$1 hlencan",
"whatlinkshere-filters": "Sifan",
- "blockip": "Fortȳnan brūcend",
+ "blockip": "Fortȳnan {{GENDER:$1|brūcend|brūcicgan}}",
"ipbreason": "Racu:",
"ipbreason-dropdown": "*Gemǣna fortȳnungraca\n** Insettung falsre cȳþþe\n** Animung innunge of trametum\n** Spammlice hlencab tō ūtweardum webbstedum\n** Insettung gedofes oþþe dwolunge in trametas\n** Hwōpende gebǣru oþþe tirgung\n** Miswendung manigra reccinga\n** Uncwēme brūcendnama",
"ipbsubmit": "Fortȳnan þisne brūcend",
@@ -819,11 +874,12 @@
"import-noarticle": "Nān tramet tō inbringenne!",
"tooltip-pt-userpage": "Þīn brūcendtramet",
"tooltip-pt-mytalk": "Þīn mōtung",
- "tooltip-pt-preferences": "Þīna fōreberunga",
+ "tooltip-pt-preferences": "Þīna foreberunga",
"tooltip-pt-watchlist": "Getæl trameta þā behieltst þū ymbe andwendunga",
"tooltip-pt-mycontris": "Getæl þīnra forðunga",
"tooltip-pt-login": "Man þē byldeþ to inmeldienne; þēah, þis nis abeden",
"tooltip-pt-logout": "Ūtmeldian",
+ "tooltip-pt-createaccount": "Þū āhst wyrcan grīman tō brūcenne, ac þū ne þearft þæt dōn.",
"tooltip-ca-talk": "Mōtung ymbe þone innunge tramet",
"tooltip-ca-edit": "Þū meaht þisne tramet adihtan. Brūc lā þone fōrebysene cnæpp ǣr þū hordie.",
"tooltip-ca-addsection": "Beginnan nīwne dǣl",
@@ -870,10 +926,12 @@
"tooltip-compareselectedversions": "Sēon þā gescēad betweonan þǣm twǣm gecorenum fadungum þisses trametes",
"tooltip-watch": "Ēacnian þīn behealdungtæl mid þissum tramete",
"tooltip-undo": "\"Undōn\" undēþ þās adihtunge and openaþ þǣre adihtunge bysene tō fōrebysene. Man cann secgan race on þǣre sceortnesse.",
+ "tooltip-summary": "Wrītan sceorte gemearcunge",
"anonymous": "{{PLURAL:$1|uncūþ brūcend|uncūðra brūcenda}} of {{SITENAME}}",
"siteuser": "{{SITENAME}}n brūcend $1",
"others": "ōðru",
"anonusers": "{{SITENAME}} {{PLURAL:$2|uncūþ brūcend|uncūðra brūcenda}} $1",
+ "pageinfo-toolboxlink": "Trametes cȳþþu",
"previousdiff": "← Ieldre adihtung",
"nextdiff": "Nīwre adihtung →",
"imagemaxsize": "Mǣst biliðes micelness:<br />''(for ymelena amearcunga trametum)''",
@@ -882,6 +940,9 @@
"file-nohires": "Þǣr nis nǣnig māre micelness.",
"svg-long-desc": "SVG ymele, rihte $1 × $2 pixela, ymelan micelness: $3",
"show-big-image": "Frumlicu ymele",
+ "show-big-image-preview": "Micelness þisre forebysene: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Ōðru biliðes micelness|Ōðra biliða micelnessa}}: $1.",
+ "show-big-image-size": "$1 be $2 dotta",
"imagelisttext": "Niðer is getæl '''$1''' {{PLURAL:$1|ymelan|ymelena}}, endebyrded on $2.",
"noimages": "Nāht tō sēonne.",
"ilsubmit": "Sēcan",
@@ -892,10 +953,20 @@
"exif-imagewidth": "Wīdnes",
"exif-imagelength": "Hīehþ",
"exif-compression": "Ȝeþryccungmōd",
+ "exif-orientation": "Gebīgedness",
"exif-ycbcrpositioning": "Y and C gesetednes",
+ "exif-xresolution": "Wīdnesse micelness",
+ "exif-yresolution": "Hēahþu micelness",
+ "exif-datetime": "Tælmearc and tīd þǣre ymelan andwendunge",
"exif-imagedescription": "Biliðes nama",
+ "exif-make": "Biliðfōndes wyrhta",
+ "exif-model": "Biliþfōndes fadung",
+ "exif-software": "Weorcwrithyrst þe wæs gebrocen",
"exif-artist": "Fruma",
+ "exif-colorspace": "Bleohmearc",
"exif-usercomment": "Brūcendes trahtnunga",
+ "exif-datetimeoriginal": "Tælmearc and tīd þǣre wyrcunge þǣre cȳþþu",
+ "exif-datetimedigitized": "Tælmearc and tīd þǣre awendunge tō spearctellenda ymelan",
"exif-exposuretime": "Blicestīd",
"exif-brightnessvalue": "APEX beorhtness",
"exif-lightsource": "Lēohtfruma",
@@ -908,6 +979,7 @@
"exif-gpsmeasuremode": "Mētungmōd",
"exif-gpsimgdirection": "Rihtung þæs biliðes",
"exif-compression-1": "Unȝeþrycced",
+ "exif-orientation-1": "Gewunelic",
"exif-meteringmode-0": "Uncūþ",
"exif-meteringmode-1": "Geþēawisc",
"exif-meteringmode-6": "Sām",
@@ -931,7 +1003,6 @@
"exif-gpslongitude-e": "Ēast lengu",
"exif-gpslongitude-w": "West lengu",
"exif-gpsdirection-t": "Sōþ rihtung",
- "watchlistall2": "eall",
"namespacesall": "eall",
"monthsall": "eall",
"confirmemail_body": "Hwilchwega, gewēne þu of IP stōwe $1, hæfþ in namanbēc gestt ǣnne hordcleofan\n\"$2\" mid þissum e-ǣrendes naman on {{SITENAME}}n.\n\nTō āsēðenne þæt þes hordcleofa tō þē gebyraþ and tō openienne\ne-ǣrenda hwilcnessa on {{SITENAME}}n, opena þisne bend in þīnum webbscēawere:\n\n$3\n\nGif þis is *nā* þū, ne folga þisne bend.\n\n$5\n\nÞēos āsēðungrūn forealdaþ æt $4.",
@@ -957,7 +1028,7 @@
"version-other": "Ōðer",
"version-hooks": "Anglas",
"version-hook-name": "Angelnama",
- "version-version": "($1. fadung)",
+ "version-version": "($1)",
"fileduplicatesearch-filename": "Ymelan nama:",
"fileduplicatesearch-submit": "Sēcan",
"specialpages": "Syndrige trametas",
@@ -967,5 +1038,9 @@
"tags-edit": "adihtan",
"htmlform-submit": "Forþsendan",
"htmlform-reset": "Undōn andwendunga",
- "htmlform-selectorother-other": "Ōðer"
+ "htmlform-selectorother-other": "Ōðer",
+ "logentry-delete-delete": "$1 {{GENDER:$2|forlēas}} tramet $3",
+ "logentry-newusers-create": "Brūcendes grīma $1 wæs {{GENDER:$2|geworht}}",
+ "revdelete-summary": "ādihtscortnes",
+ "searchsuggest-search": "Sēcan"
}
diff --git a/languages/i18n/anp.json b/languages/i18n/anp.json
index 66d7617a..1ecde6a8 100644
--- a/languages/i18n/anp.json
+++ b/languages/i18n/anp.json
@@ -290,7 +290,6 @@
"pager-older-n": "{{PLURAL:$1|पुराना 1|पुरानॊ सीनी $1}}",
"booksources": "पुस्तक स्रोत",
"booksources-search-legend": "पुस्तक स्रोत खोजॊ",
- "booksources-go": "जा",
"log": "लॉग सूची",
"allpages": "सब्भे पन्ना",
"prevpage": "पिछला पन्ना ($1)",
@@ -309,7 +308,7 @@
"watchthispage": "ई पन्ना ध्यानसूची में डालॊ",
"unwatch": "ध्यान हटाबॊ",
"watchlist-details": "वार्ता पन्ना केरॊ अलावा {{PLURAL:$1|$1 पन्ना|$1 पन्ने}} आपने के ध्यानसूची मॆं छै.",
- "wlshowlast": "पिछला $1 घंटा $2 दिन $3 देखॊ",
+ "wlshowlast": "पिछला $1 घंटा $2 दिन देखॊ",
"watchlist-options": "ध्यानसूची विकल्प",
"watching": "ध्यान दय रहलॊ छै...",
"unwatching": "ध्यान हटाय रहलॊ छियै...",
@@ -496,7 +495,6 @@
"metadata-expand": "अतिरिक्त जानकारी दिखाबॊ",
"metadata-collapse": "विस्तारित जानकारी छुपाबॊ",
"metadata-fields": "इ सूची मॆं देलॊ गेलॊ जानकारी फ़ाईल केरॊ नीचे मेटाडाटा जानकारी मॆं हमेशा दिखतै.\nबचलॊ जानकारी हमेशा छुपलॊ रहतै\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "सब्भे",
"namespacesall": "सब्भे",
"monthsall": "सब्भे",
"watchlisttools-view": "प्रासंगिक बदलाव देखॊ",
diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json
index 72049553..0cb3df83 100644
--- a/languages/i18n/ar.json
+++ b/languages/i18n/ar.json
@@ -45,7 +45,13 @@
"아라",
"Test Create account",
"Kuwaity26",
- "Calak"
+ "Calak",
+ "Omda4wady",
+ "Bibas",
+ "Khaled",
+ "Emara",
+ "Macofe",
+ "Yahya Sakhnini"
]
},
"tog-underline": "سطر تحت الوصلات:",
@@ -73,7 +79,7 @@
"tog-shownumberswatching": "اعرض عدد المستخدمين المراقبين",
"tog-oldsig": "التوقيع الحالي:",
"tog-fancysig": "وضع الوصلة يدويا واستعمال نص الويكي",
- "tog-uselivepreview": "استعمال المعاينة المباشرة (تجريبي)",
+ "tog-uselivepreview": "استعمال المعاينة المباشرة",
"tog-forceeditsummary": "نبهني عند عدم إدخال ملخص تعديل",
"tog-watchlisthideown": "أخف تعديلاتي من قائمة المراقبة",
"tog-watchlisthidebots": "أخف تعديلات البوتات من قائمة المراقبة",
@@ -248,6 +254,7 @@
"otherlanguages": "بلغات أخرى",
"redirectedfrom": "(بالتحويل من $1)",
"redirectpagesub": "صفحة تحويل",
+ "redirectto": "تحويل إلى",
"lastmodifiedat": "آخر تعديل لهذه الصفحة كان يوم $1 الساعة $2.",
"viewcount": "{{PLURAL:$1|لم تعرض هذه الصفحة أبدا|تم عرض هذه الصفحة مرة واحدة|تم عرض هذه الصفحة مرتين|تم عرض هذه الصفحة $1 مرات|تم عرض هذه الصفحة $1 مرة}}.",
"protectedpage": "صفحة محمية",
@@ -260,6 +267,7 @@
"pool-queuefull": "الطابور ملآن",
"pool-errorunknown": "خطأ غير معروف",
"pool-servererror": "خدمة العداد غير متاحة ( $1 ).",
+ "poolcounter-usage-error": "خطأ الاستخدام: $1",
"aboutsite": "عن {{SITENAME}}",
"aboutpage": "Project:عن",
"copyright": "المحتوى منشور وفق $1 إن لم يرد خلاف ذلك.",
@@ -269,6 +277,7 @@
"disclaimers": "إخلاء مسؤولية",
"disclaimerpage": "Project:إخلاء مسؤولية عام",
"edithelp": "مساعدة التحرير",
+ "helppage-top-gethelp": "مساعدة",
"mainpage": "الصفحة الرئيسية",
"mainpage-description": "الصفحة الرئيسية",
"policy-url": "Project:سياسة",
@@ -353,6 +362,8 @@
"filerenameerror": "تعذّر تغيير اسم الملف \"$1\" إلى \"$2\".",
"filedeleteerror": "تعذّر حذف الملف \"$1\".",
"directorycreateerror": "تعذّر إنشاء الدليل \"$1\".",
+ "directoryreadonlyerror": "المجلد «$1» للقراءة فقط.",
+ "directorynotreadableerror": "المجلد «$1» لا يمكن قراءته.",
"filenotfound": "تعذّر إيجاد الملف \"$1\".",
"unexpected": "قيمة غير متوقعة: \"$1\"=\"$2\".",
"formerror": "عطل: تعذّر إيداع الاستمارة",
@@ -364,7 +375,7 @@
"badtitle": "عنوان سيء",
"badtitletext": "عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الرابط بين اللغات أو بين المشاريع خاطئ.\nربما يحوي محارف لا تصلح للاستخدام في العناوين.",
"perfcached": "البيانات التالية مخبأة و قد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مخبّأة|مخبّأتان|مخبّأة}}.",
- "perfcachedts": "البيانات التالية مخبّأة وكان آخر تحديث لها في $1. {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}} على الأكثر {{PLURAL:$4||مخبّأة|مخبّأتان|مخبّأة}}.",
+ "perfcachedts": "البيانات التالية مخزنة، وكان آخر تحديث لها في $1. العدد الأقصى للنتائج المخزنة هو {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}}.",
"querypage-no-updates": "تحديثات هذه الصفحة معطلة حاليا.\nالبيانات هنا لن يتم تحديثها حاليا.",
"viewsource": "اعرض المصدر",
"viewsource-title": "استعرض مصدر $1",
@@ -375,6 +386,7 @@
"viewyourtext": "يمكنك استعراض و نسخ مصدر ''' تعديلاتك ''' في هذه الصفحة:",
"protectedinterface": "توفر هذه الصفحة نص الواجهة للبرنامج على هذا الويكي، وهي محمية لمنع سوء أستخدامها.\nلإضافة أو تغيير الترجمات لجميع مشاريع الويكي، رجاءً أستخدم [//translatewiki.net/ translatewiki.net]، مشروع الترجمة الخاص بميدياويكي.",
"editinginterface": "<strong>تنبيه:</strong> تعديل هذه الصفحة سيحفظ في هذا الويكي فقط. لتعميم التعديل على جميع مشاريع ميدياويكي، عدلها في [//translatewiki.net/ مشروع ترجمة الويكي].",
+ "translateinterface": "من أجل إضافة أو تعديل ترجمات في كل مشاريع الويكي يرجى استخدم [//translatewiki.net/ translatewiki.net]، مشروع ميدياويكي لترجمة الواجهة.",
"cascadeprotected": "تمت حماية هذه الصفحة من التعديل لأنها مدمجة في {{PLURAL:$1||الصفحة التالية، والتي|الصفحتين التاليتين، واللتين|الصفحات التالية، والتي}} تم استعمال خاصية \"حماية الصفحات المدمجة\" {{PLURAL:$1||بها|بهما|بها}}:\n$2",
"namespaceprotected": "لا تمتلك الصلاحية لتعديل الصفحات في نطاق '''$1'''.",
"customcssprotected": "أنت لا تمتلك السماح لتعديل صفحة الCSS هذه، لأنها تحتوي على الإعدادات الشخصية لمستخدم آخر.",
@@ -431,6 +443,8 @@
"userlogin-resetlink": "نسيت تفاصيل الدخول؟",
"userlogin-resetpassword-link": "نسيت كلمة مرورك؟",
"userlogin-helplink2": "المساعدة في الدخول",
+ "userlogin-loggedin": "أنت {{GENDER:$1|مسجل|مسجلة}} الدخول مسبقًا باسم $1. {{GENDER:$1|استخدم|استخدمي}} النموذج بالأسفل لتسجيل الدخول بحساب آخر.",
+ "userlogin-createanother": "إنشاء حساب آخر",
"createacct-emailrequired": "عنوان البريد الإلكتروني",
"createacct-emailoptional": "البريد الإلكتروني (اختياري)",
"createacct-email-ph": "أدخل عنوان بريدك الإلكتروني",
@@ -492,6 +506,7 @@
"createaccount-text": "شخص ما أنشأ حسابا لعنوان بريدك الإلكتروني في {{SITENAME}} ($4) بالاسم \"$2\"، كلمة السر \"$3\".\nينبغي عليك تسجيل الدخول وتغيير كلمة السر الخاصة بك الآن.\n\nيمكنك تجاهل هذه الرسالة، لو تم إنشاء هذا الحساب بالخطأ.",
"login-throttled": "لقد قمت بمحاولات دخول كثيرة جدا مؤخرا.\nمن فضلك انتظر $1 قبل المحاولة مرة أخرى.",
"login-abort-generic": "لم ينجح ولوجك - تم إجهاضه",
+ "login-migrated-generic": "تم تهجير حسابك، ولم يعد اسم المستخدم الخاص بك موجوداً على هذه الويكي",
"loginlanguagelabel": "اللغة: $1",
"suspicious-userlogout": "رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.",
"createacct-another-realname-tip": "الاسم الحقيقي اختياري.\nإذا اخترت توفيره فسيستخدم لنسبة عمل المستخدم إليه.",
@@ -588,6 +603,7 @@
"anoneditwarning": "'''تحذير:''' لم تقم بالدخول.\nسيسجل عنوان الآيبي خاصتك في تاريخ هذه الصفحة.",
"anonpreviewwarning": "''أنت غير مسجل الدخول. الحفظ سيسجل عنوان الأيبي الخاص بك في تاريخ هذه الصفحة.''",
"missingsummary": "'''تنبيه:''' لم تقم بكتابة ملخص للتعديل.\nإذا قمت بضغط حفظ الصفحة مرة أخرى، فيتم حفظ تعديلك بدون ملخص.",
+ "selfredirect": "<strong>تحذير:</strong> أنت تقوم بتحويل الصفحة إلى نفسها.\nربما حددت الهدف الخطأ للتحويلة أو أنك تقوم بتحرير الصفحة الخطأ.\n\nإذا نقرت على «{{int:savearticle}}» مرة أخرى، سيتم إنشاء التحويلة رغم الخطأ.",
"missingcommenttext": "من فضلك أدخل تعليقا في الأسفل.",
"missingcommentheader": "'''تنبيه:''' لم تقم بوضع موضوع/عنوان لهذا التعليق.\nإذا قمت بالضغط على \"{{int:savearticle}}\" مجددا، سيتم حفظ تعليقك بدون عنوان.",
"summary-preview": "معاينة الملخص:",
@@ -686,6 +702,10 @@
"content-model-text": "نص عادي",
"content-model-javascript": "جافاسكربت",
"content-model-css": "CSS",
+ "content-json-empty-object": "غرض فارغ",
+ "content-json-empty-array": "مصفوفة فارغة",
+ "duplicate-args-category": "صفحات تستعمل قالبا ببيانات مكررة",
+ "duplicate-args-category-desc": "تحوي هذه الصفحة استدعاءات قالب تستخدم متغيرات مزدوجة مثل <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> أو <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''تحذير:''' هذه الصفحة تحتوي على استدعاءات دالة محلل كثيرة مكلفة.\n\nينبغي أن تكون أقل من {{PLURAL:$2||استدعاء واحد|استدعاءين|$2 استدعاءات|$2 استدعاء}}، يوجد الآن {{PLURAL:$1|استدعاء واحد|استدعاءان|$2 استدعاءات|$2 استدعاء}}.",
"expensive-parserfunction-category": "تجاوزات الدوال المكلفة",
"post-expand-template-inclusion-warning": "'''تحذير:''' حجم تضمين القالب كبير جدا.\nبعض القوالب لن تضمن.",
@@ -740,7 +760,7 @@
"history-feed-empty": "الصفحة المطلوبة غير موجودة.\nمن المحتمل أن تكون هذه الصفحة قد حذفت من الويكي، أو نقلت.\nحاول [[Special:Search|البحث في الويكي]] عن صفحات جديدة ذات صلة.",
"rev-deleted-comment": "(أزيل ملخص التعديل)",
"rev-deleted-user": "(اسم المستخدم تمت إزالته)",
- "rev-deleted-event": "(فعل السجل تمت إزالته)",
+ "rev-deleted-event": "(محيت تفاصيل السجل)",
"rev-deleted-user-contribs": "[اسم المستخدم أو عنوان الأيبي تمت إزالته - التعديل مخفي من المساهمات]",
"rev-deleted-text-permission": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
"rev-suppressed-text-permission": "هذه النسخة قد <strong>أخفيت</strong> ([{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} تفاصيل].)",
@@ -763,14 +783,18 @@
"revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
"revdelete-show-file-submit": "نعم",
"revdelete-selected-text": "{{PLURAL:$1|نسخة مختارة|نسخ مختارة}} ل[[:$2]]:",
+ "revdelete-selected-file": "{{PLURAL:$1|النسخة المختارة من الملف|النسخ المختارة من الملف}} لـ [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:",
+ "revdelete-text-text": "المراجعات المحذوفة ستظل تظهر في تاريخ الصفحة، ولكن أجزاءا من محتواها سيكون محجوبا عن الجميع.",
+ "revdelete-text-file": "ستبقى نسخ الملف المحذوفة تظهر في تاريخ الملف، ولكن جزءاً من مضمونها لن تكون متاحة للعموم.",
+ "logdelete-text": "ستبقى أحداث السجل المحذوفة تظهر في السجلات، لكن جزءاً من مضمونها لن يتاح للعموم.",
"revdelete-text-others": "سيتمكن الإداريون الآخرون على {{SITENAME}} من الوصول إلى المحتوى المخفي وإلغاء حذفه مجددا من خلال ذات الواجهة ما لم تطبق قيود إضافية.",
"revdelete-confirm": "الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.\nمن فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
"revdelete-suppress-text": "ينبغي للإخفاء أن يستخدم '''فقط''' في الحالات التالية:\n* معلومات يحتمل أن تكون تشهيرية\n* معلومات شخصية غير ملائمة\n*: ''عناوين المنازل وأرقام الهواتف وأرقام الهويات الوطنية إلى آخره.''",
"revdelete-legend": "وضع ضوابط رؤية",
"revdelete-hide-text": "نص المراجعة",
"revdelete-hide-image": "أخف محتوى الملف",
- "revdelete-hide-name": "أخف الفعل والهدف",
+ "revdelete-hide-name": "أخف الهدف والمعيار",
"revdelete-hide-comment": "ملخص التعديل",
"revdelete-hide-user": "اسم المستخدم/عنوان الآيبي",
"revdelete-hide-restricted": "أخف البيانات عن الإداريين إضافة إلى الآخرين",
@@ -814,6 +838,7 @@
"mergehistory-empty": "لا مراجعات يمكن دمجها.",
"mergehistory-success": "$3 {{PLURAL:$3|مراجعة|مراجعة}} من [[:$1]] تم دمجها بنجاح في [[:$2]].",
"mergehistory-fail": "غير قادر على عمل دمج التاريخ، من فضلك أعد التحقق من محددات الصفحة والزمن.",
+ "mergehistory-fail-toobig": "لا يمكن إجراء دمج التاريخ بسبب تجاوز حدود عدد المراجعات المنقولة {{PLURAL:$1|المراجعة الواحدة|المراجعتين|$1 مراجعات|$1 مراجعة}}.",
"mergehistory-no-source": "الصفحة المصدر $1 غير موجودة.",
"mergehistory-no-destination": "الصفحة الهدف $1 غير موجودة.",
"mergehistory-invalid-source": "الصفحة المصدر يجب أن تكون عنوانا صحيحا.",
@@ -823,7 +848,6 @@
"mergehistory-same-destination": "صفحتا المصدر والهدف لا يمكن أن تكونا نفس الشيء",
"mergehistory-reason": "السبب:",
"mergelog": "سجل الدمج",
- "pagemerge-logentry": "دمج [[$1]] إلى [[$2]] (المراجعات حتى $3)",
"revertmerge": "إلغاء الدمج",
"mergelogpagetext": "بالأسفل قائمة بأحدث عمليات الدمج لتاريخ صفحة ما إلى أخرى.",
"history-title": "تاريخ \"$1\"",
@@ -835,8 +859,8 @@
"showhideselectedversions": "أظهر/أخف المراجعات المختارة",
"editundo": "رجوع",
"diff-empty": "(لا فرق)",
- "diff-multi-sameuser": "({{PLURAL:$1|مراجعة متوسطة واحدة|$1 مراجعات متوسطة}} بواسطة نفس المستخدم غير معروضة)",
- "diff-multi-otherusers": "({{PLURAL:$1|مراجعة متوسطة واحدة|$1 مراجعات متوسطة}} بواسطة {{PLURAL:$2|مستخدم واحد آخر|$2 مستخدما}} غير معروضة)",
+ "diff-multi-sameuser": "({{PLURAL:$1|لا مراجعات متوسطة|مراجعة متوسطة واحدة|مراجعتان متوسطتان|$1 مراجعات متوسطة|$1 مراجعة متوسطة}} بواسطة نفس المستخدم غير {{PLURAL:$1|معروضة|معروضة|معروضتين|معروضة}})",
+ "diff-multi-otherusers": "({{PLURAL:$1|لا مراجعات|مراجعة متوسطة واحدة|مراجعتان متوسطتان|$1 مراجعات متوسطة|$1 مراجعة متوسطة}} بواسطة {{PLURAL:$2|ولا مستخدم|مستخدم واحد آخر|مستخدمين اثنين آخرين|$2 مستخدمين|$2 مستخدماً|$2 مستخدم}} غير {{PLURAL:$1|معروضة|معروضة|معروضتين|معروضة}})",
"diff-multi-manyusers": "({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)",
"difference-missing-revision": "{{PLURAL:$2|مراجعة واحدة|$2 مراجعات}} لهذا الفرق ($1) {{PLURAL:$2|لم|لم}} يتم إيجادها.\n\nهذا يحدث عادة عن طريق اتباع وصلة فرق قديمة لصفحة تم حذفها.\nالتفاصيل يمكن إيجادها في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
"searchresults": "نتائج البحث",
@@ -846,6 +870,7 @@
"notextmatches": "لم يتم إيجاد أي نص مطابق",
"prevn": "{{PLURAL:$1|$1}} السابقة",
"nextn": "{{PLURAL:$1|$1}} التالية",
+ "next-page": "الصفحة التالية",
"prevn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} سابقة",
"nextn-title": "$1 {{PLURAL:$1|نتيجة|نتيجة}} تالية",
"shown-title": "عرض $1 {{PLURAL:$1|نتيجة|نتيجة}} لكل صفحة",
@@ -864,6 +889,7 @@
"search-result-category-size": "{{PLURAL:$1|لا أعضاء|عضو واحد|عضوان|$1 أعضاء|$1 عضوًا|$1 عضو}} ({{PLURAL:$2|لا تصانيف فرعية|تصنيف فرعي واحد|تصنيفان فرعيان|$2 تصنيفات فرعية|$2 تصنيفًا فرعيًا|$2 تصنيف فرعي}} و{{PLURAL:$3|لا ملفات|ملف واحد|ملفان|$3 ملفات|$3 ملفًا|$3 ملف}})",
"search-redirect": "(تحويلة $1)",
"search-section": "(قسم $1)",
+ "search-category": "(التصنيف $1)",
"search-file-match": "(يطابق محتوى الملف)",
"search-suggest": "أتقصد: $1",
"search-interwiki-caption": "المشاريع الشقيقة",
@@ -874,6 +900,7 @@
"searchall": "الكل",
"showingresults": "معروض بالأسفل {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} بدءا من رقم '''$2'''.",
"showingresultsinrange": "بالأسفل {{PLURAL:$1|نتيجة واحدة|<strong>$1</strong> نتائج|<strong>$1</strong> نتيجة}} في النطاق من <strong>$2</strong> إلى <strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|النتائج <strong>$1</strong> من <strong>$3</strong>|النتائج <strong>$1 - $2</strong> من أصل <strong>$3</strong>}}",
"search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
"powersearch-legend": "بحث متقدم",
"powersearch-ns": "بحث في النطاقات:",
@@ -896,6 +923,11 @@
"prefs-personal": "ملف المستخدم",
"prefs-rc": "أحدث التغييرات",
"prefs-watchlist": "قائمة المراقبة",
+ "prefs-editwatchlist": "تعديل قائمة المراقبة",
+ "prefs-editwatchlist-label": "عدل قائمة مراقبتك:",
+ "prefs-editwatchlist-edit": "أعرض وأحذف عناوين من قائمة مراقبتك",
+ "prefs-editwatchlist-raw": "عدل قائمة المراقبة الخام",
+ "prefs-editwatchlist-clear": "امسح قائمة المراقبة",
"prefs-watchlist-days": "عدد الأيام للعرض في قائمة المراقبة:",
"prefs-watchlist-days-max": "الحد الأقصى {{PLURAL:$1|أقل من يوم|يوم واحد|يومان|$1 أيام|$1 يوما|$1 يوم}}",
"prefs-watchlist-edits": "عدد التعديلات التي تعرض في قائمة المراقبة الموسعة:",
@@ -986,6 +1018,7 @@
"prefs-tokenwatchlist": "مفتاح",
"prefs-diffs": "فروقات",
"prefs-help-prefershttps": "سيتم تفعيل هذا التفضيل عند ولوجوك في المرة القادمة.",
+ "prefswarning-warning": "لقد أجريت تعديلات على تفضيلاتك، ولم تُحفَظ بعد.\nإذا غادرت هذه الصفحة دون أن تنقر على «$1» لن يتم تحديث تفضيلاتك.",
"prefs-tabs-navigation-hint": "تلميح: يمكنك استخدام مفتاحي السهمين الأيمن والأيسر للتنقل بين الألسنة في قائمة الألسنة.",
"email-address-validity-valid": "يبدو أن عنوان البريد الإلكتروني صالح",
"email-address-validity-invalid": "أدخل عنوان بريد إلكتروني صالح",
@@ -1060,6 +1093,7 @@
"right-browsearchive": "البحث في الصفحات المحذوفة",
"right-undelete": "استرجاع صفحة",
"right-suppressrevision": "مراجعة واسترجاع المراجعات المخفية عن مديري النظام",
+ "right-viewsuppressed": "أعرض المراجعات المخفية بواسطة أي مستخدم",
"right-suppressionlog": "رؤية السجلات السرية",
"right-block": "منع المستخدمين الآخرين من التعديل",
"right-blockemail": "منع مستخدم من إرسال بريد إلكتروني",
@@ -1070,6 +1104,7 @@
"right-protect": "تغيير مستويات الحماية وتعديل الصفحات المحمية",
"right-editprotected": "تعديل الصفحات التي حمايتها \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "تعديل الصفحات التي حمايتها \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "عدل طريقة محتوى صفحة",
"right-editinterface": "تعديل واجهة المستخدم",
"right-editusercssjs": "تعديل ملفات CSS و JS للمستخدمين الآخرين",
"right-editusercss": "تعديل ملفات CSS للمستخدمين الآخرين",
@@ -1142,6 +1177,7 @@
"action-viewmywatchlist": "مشاهدة قائمة مراقبتك",
"action-viewmyprivateinfo": "مشاهدة معلوماتك الخاصة",
"action-editmyprivateinfo": "تعديل معلوماتك الخاصة",
+ "action-editcontentmodel": "عدل عدل طريقة محتوى صفحة",
"nchanges": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|منذ الزيارة الأخيرة}}",
"enhancedrc-history": "تاريخ",
@@ -1211,9 +1247,9 @@
"uploaderror": "خطأ في الرفع",
"upload-recreate-warning": "'''تحذير: سبق حذف أو نقل ملف بهذا الاسم.'''\n\nسجلا الحذف والنقل لهذه الصفحة معروضان هنا للتيسير:",
"uploadtext": "استخدم الاستمارة بالأسفل لرفع الملفات.\nلرؤية أو البحث في الملفات المرفوعة سابقا، راجع [[Special:FileList|قائمة الملفات المرفوعة]]، عمليات الرفع (وإعادة الرفع) مسجلة في [[Special:Log/upload|سجل الرفع]] وعمليات الحذف في [[Special:Log/delete|سجل الحذف]].\n\nلإدراج صورة في صفحة، استخدم الوصلات في الصيغ التالية:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' لاستخدام النسخة الكاملة لملف\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|نص بديل]]</nowiki></code>''' لاستخدام صورة عرضها 200 بكسل في صندوق في الجانب الأيسر مع 'نص بديل' كوصف\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' للوصل للملف مباشرة بدون عرض الملف.",
- "upload-permitted": "أنواع الملفات المسموحة: $1.",
- "upload-preferred": "أنواع الملفات المفضلة: $1.",
- "upload-prohibited": "أنواع الملفات الممنوعة: $1.",
+ "upload-permitted": "أنواع الملفات المسموحة {{PLURAL:$2|type|types}}: $1.",
+ "upload-preferred": "أنواع الملفات المفضلة {{PLURAL:$2|type|types}}: $1.",
+ "upload-prohibited": "أنواع الملفات الممنوعة {{PLURAL:$2|type|types}}: $1.",
"uploadlogpage": "سجل الرفع",
"uploadlogpagetext": "في الأسفل قائمة بأحدث عمليات رفع الملفات.\nانظر [[Special:NewFiles|معرض الملفات الجديدة]] لعرض بصري أكثر",
"filename": "اسم الملف",
@@ -1456,6 +1492,8 @@
"unwatchedpages": "صفحات غير مراقبة",
"listredirects": "عرض التحويلات",
"listduplicatedfiles": "قائمة الملفات مع المكررات",
+ "listduplicatedfiles-summary": "هذه قائمة بملفات أحدث نسخة منها تكرر أحدث نسخة من ملف آخر. لا تشمل القائمة إلا الملفات المحلية.",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]] مكرر في [[$3|{{PLURAL:$2||مكان آخر واحد|مكانين آخرين اثنين|$2 أماكن أخرى|$2 مكاناً آخر|$2مكان آخر}}]].",
"unusedtemplates": "قوالب غير مستخدمة",
"unusedtemplatestext": "هذه الصفحة تعرض كل الصفحات في نطاق {{ns:template}} غير المضمنة في صفحة أخرى.\nتذكر بأن تتحقق من الوصلات الأخرى للقوالب قبل حذفها.",
"unusedtemplateswlh": "وصلات أخرى",
@@ -1464,12 +1502,13 @@
"randomincategory": "صفحة عشوائية في التصنيف",
"randomincategory-invalidcategory": "\"$1\" ليس اسم تصنيف صالح.",
"randomincategory-nopages": "لا توجد صفحات في التصنيف [[:Category:$1|$1]].",
+ "randomincategory-category": "التصنيف:",
+ "randomincategory-legend": "صفحة عشوائية في التصنيف",
"randomredirect": "تحويلة عشوائية",
"randomredirect-nopages": "لا توجد تحويلات في النطاق \"$1\".",
"statistics": "إحصاءات",
"statistics-header-pages": "إحصاءات الصفحات",
"statistics-header-edits": "إحصاءات التعديلات",
- "statistics-header-views": "إحصاءات المشاهدة",
"statistics-header-users": "إحصاءات المستخدمين",
"statistics-header-hooks": "إحصاءات أخرى",
"statistics-articles": "صفحات المحتوى",
@@ -1478,13 +1517,9 @@
"statistics-files": "الملفات المرفوعة",
"statistics-edits": "تعديلات الصفحات منذ تنصيب {{SITENAME}}",
"statistics-edits-average": "متوسط التعديلات لكل صفحة",
- "statistics-views-total": "إجمالي المشاهدات",
- "statistics-views-total-desc": "مشاهدات الصفحات غير الموجودة والصفحات الخاصة غير مشمولة.",
- "statistics-views-peredit": "المشاهدات لكل تعديل",
"statistics-users": "[[Special:ListUsers|مستخدمون]] مسجلون",
"statistics-users-active": "مستخدمون نشطون",
"statistics-users-active-desc": "المستخدمون الذين قاموا بفعل في آخر {{PLURAL:$1||يوم|يومين|$1 أيام|$1 يوماً|$1 يوم}}",
- "statistics-mostpopular": "أكثر الصفحات مشاهدة",
"pageswithprop": "صفحات مع خاصية الصفحة",
"pageswithprop-legend": "صفحات مع خاصية الصفحة",
"pageswithprop-text": "تسرد هذه الصفحة الصفحات التي تستخدم خاصية صفحة معينة.",
@@ -1525,13 +1560,14 @@
"uncategorizedtemplates": "قوالب غير مصنفة",
"unusedcategories": "تصنيفات غير مستخدمة",
"unusedimages": "ملفات غير مستخدمة",
- "popularpages": "صفحات مشهورة",
"wantedcategories": "تصنيفات مطلوبة",
"wantedpages": "صفحات مطلوبة",
"wantedpages-badtitle": "عنوان غير صحيح في مجموعة النتائج: $1",
"wantedfiles": "ملفات مطلوبة",
"wantedfiletext-cat": "الملفات التالية مستعملة ولكن لا وجود لها. يمكن سرد ملفات من مستودعات خارجية بالرغم من وجودها. سيتم <del>محو</del> أي أيجابيات كاذبة. بالإضافة، أي صفحات تتضمن الملفات الغير موجودة تم سردها في [[:$1]].",
+ "wantedfiletext-cat-noforeign": "الملفات التالية مستخدمة لكنها غير موجودة. عدا ذلك، تسرد الصفحات التي تستخدم ملفات غير موجودة في [[:$1]].",
"wantedfiletext-nocat": "الملفات التالية مستعملة ولكن غير متوفرة. يمكن سرد ملفات من مستودعات خارجية بالرغم من وجودها. سيتم <del>محو</del> أي أيجابيات كاذبة.",
+ "wantedfiletext-nocat-noforeign": "الملفات التالية مستخدمة لكنها غير موجودة.",
"wantedtemplates": "قوالب مطلوبة",
"mostlinked": "أكثر الصفحات وصلا",
"mostlinkedcategories": "أكثر التصنيفات ارتباطا",
@@ -1585,10 +1621,12 @@
"pager-older-n": "{{PLURAL:$1|أقدم 1|أقدم $1}}",
"suppress": "أوفرسايت",
"querypage-disabled": "تم تعطيل هذه الصفحة الخاصة لأسباب تتعلق بالأداء.",
+ "apihelp": "مساعدة API",
+ "apihelp-no-such-module": "الوحدة \"$1\" غير موجودة.",
"booksources": "مصادر كتاب",
"booksources-search-legend": "البحث عن مصادر الكتب",
"booksources-isbn": "ردمك:",
- "booksources-go": "اذهب",
+ "booksources-search": "بحث",
"booksources-text": "توجد أدناه قائمة بوصلات لمواقع أخرى تبيع الكتب الجديدة والمستعملة، أيضا يمكنك أن تحصل على معلومات إضافية عن الكتب التي تبحث عنها من هناك:",
"booksources-invalid-isbn": "رقم ISBN المعطى لا يبدو صحيحا؛ تحقق من أخطاء النسخ من المصدر الأصلي.",
"specialloguserlabel": "المؤدي:",
@@ -1598,7 +1636,7 @@
"alllogstext": "عرض شامل لكل السجلات المتوفرة في {{SITENAME}}.\nباستطاعتك جعل القائمة أكثر تحديداً، وذلك باختيار نوع السجل واسم المستخدم (حساس لحالة الحروف)، أو الصفحة المتأثرة (أيضاً حساس لحالة الحروف).",
"logempty": "لا توجد مدخلات مطابقة في السجل.",
"log-title-wildcard": "ابحث عن عناوين تبدأ بهذا النص",
- "showhideselectedlogentries": "إطهار/إخفاء سجلات الدخول المختارة",
+ "showhideselectedlogentries": "غير رؤية مدخلات السجل المختارة",
"allpages": "كل الصفحات",
"nextpage": "الصفحة التالية ($1)",
"prevpage": "الصفحة السابقة ($1)",
@@ -1657,6 +1695,7 @@
"listgrouprights-removegroup-self-all": "يمكنه إزالة كل المجموعات من حسابه الخاص",
"listgrouprights-namespaceprotection-header": "قيود النطاق",
"listgrouprights-namespaceprotection-namespace": "النطاق",
+ "listgrouprights-namespaceprotection-restrictedto": "الصلاحيات التي تسمح للمستخدم بالتعديل",
"trackingcategories": "تصانيف التتبع",
"trackingcategories-summary": "تسرد هذه الصفحة تصانيف التتبع التي ينشئها برنامج ميدياويكي. يمكن تغيير أسمائها بتغيير رسائل النظام في نطاق {{ns:8}}.",
"trackingcategories-msg": "تصانيف التتبع",
@@ -1723,7 +1762,7 @@
"wlheader-enotif": "الإخطار بالبريد الإلكتروني مُفعّل.",
"wlheader-showupdated": "الصفحات التي تم تحريرها بعد مطالعتك إياها آخر مرة عناوينها بالخط '''الغليظ'''",
"wlnote": "بالأسفل {{PLURAL:$1|لا توجد تغييرات|التغيير الأخير|آخر تغييرين|آخر '''$1''' تغييرات|آخر '''$1''' تغييرا|آخر '''$1''' تغيير}} في {{PLURAL:$2||'''الساعة''' الماضية|'''الساعتين''' الماضيتين|ال'''$2''' ساعات الماضية|ال'''$2''' ساعة الماضية}} وفقاً ل$3، $4.",
- "wlshowlast": "عرض آخر $1 ساعات $2 أيام $3",
+ "wlshowlast": "عرض آخر $1 ساعات $2 يوما",
"watchlist-options": "خيارات قائمة المراقبة",
"watching": "يراقب...",
"unwatching": "إزالة المراقبة...",
@@ -1769,9 +1808,9 @@
"delete-edit-reasonlist": "عدل أسباب الحذف",
"delete-toobig": "لهذه الصفحة تاريخ تعديل طويل، أكثر من {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}}.\nقُيّد محذف مثل هذه الصفحات لمنع الاضطراب المفاجئة في {{SITENAME}}.",
"delete-warning-toobig": "لهذه الصفحة تاريخ تعديل طويل، أكثر من {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}}.\nقد يؤدي حذفها إلى اضطراب عمليات قاعدة البيانات في {{SITENAME}}؛\nاستمر مع الحذر.",
+ "deleteprotected": "لا يمكنك حذف هذه الصفحة لأنها محمية.",
"deleting-backlinks-warning": "[[Special:WhatLinksHere/{{FULLPAGENAME}}|تتصل صفحات أخرى]] بالصفحة التي تريد حذفها.",
"rollback": "استرجاع التعديلات",
- "rollback_short": "استرجع",
"rollbacklink": "استرجع",
"rollbacklinkcount": "استرجع {{PLURAL:$1|لا تعديلات|تعديلا واحدا|تعديلين|$1 تعديلات|$1 تعديلاً|تعديل}}",
"rollbacklinkcount-morethan": "استرجاع أكثر من {{PLURAL:$1||تعديل|تعديلين|$1 تعديلات|$1 تعديلاً|$1 تعديل}}",
@@ -1821,6 +1860,7 @@
"protect-othertime": "وقت آخر:",
"protect-othertime-op": "وقت آخر",
"protect-existing-expiry": "تاريخ الانتهاء الموجود: $3، $2",
+ "protect-existing-expiry-infinity": "زمن الانتهاء الموجود: لانهائي",
"protect-otherreason": "سبب آخر/إضافي:",
"protect-otherreason-op": "سبب آخر",
"protect-dropdown": "*أسباب الحماية الشائعة\n** تخريب شديد\n** سبام شديد\n** حرب تحرير معرقلة للعمل المنتج\n** صفحة زوارها كثيرون",
@@ -1880,6 +1920,7 @@
"namespace": "النطاق:",
"invert": "اعكس الاختيار",
"tooltip-invert": "علم على هذا الصندوق لإخفاء التغييرات للصفحات في النطاق المختار (والنطاق المصاحب لو معلم عليها)",
+ "tooltip-whatlinkshere-invert": "قم بتعليم هذا الخيار لإخفاء الروابط من الصفحات التي تم تعليم نطاقاتها.",
"namespace_association": "النطاق المقترن",
"tooltip-namespace_association": "علم على هذا الصندوق لتضمين نطاق النقاش أو الموضوع المصاحب للنطاق المختار",
"blanknamespace": "(رئيسي)",
@@ -1896,6 +1937,7 @@
"sp-contributions-newbies-sub": "للحسابات الجديدة",
"sp-contributions-newbies-title": "مساهمات المستخدم للحسابات الجديدة",
"sp-contributions-blocklog": "سجل المنع",
+ "sp-contributions-suppresslog": "مساهمات المستخدم المحذوفة",
"sp-contributions-deleted": "مساهمات المستخدم المحذوفة",
"sp-contributions-uploads": "مرفوعات",
"sp-contributions-logs": "سجلات",
@@ -1919,7 +1961,7 @@
"isimage": "وصلة ملف",
"whatlinkshere-prev": "{{PLURAL:$1|السابق|ال$1 السابقة}}",
"whatlinkshere-next": "{{PLURAL:$1|القادمة|ال$1 القادمة}}",
- "whatlinkshere-links": "← وصلات",
+ "whatlinkshere-links": "وصلات",
"whatlinkshere-hideredirs": "$1 التحويلات",
"whatlinkshere-hidetrans": "$1 التضمينات",
"whatlinkshere-hidelinks": "$1 الوصلات",
@@ -1964,6 +2006,7 @@
"unblocked": "[[User:$1|$1]] تم رفع المنع عنه",
"unblocked-range": "تم إلغاء منع $1",
"unblocked-id": "منع $1 تم رفعه",
+ "unblocked-ip": "تم رفع المنع عن [[Special:Contributions/$1|$1]].",
"blocklist": "المستخدمون الممنوعون",
"ipblocklist": "المستخدمون الممنوعون",
"ipblocklist-legend": "إيجاد مستخدم ممنوع",
@@ -2143,14 +2186,17 @@
"thumbnail-temp-create": "تعذر إنشاء ملف الصورة المصغرة المؤقت",
"thumbnail-dest-create": "تعذر حفظ الصورة المصغرة للوجهة",
"thumbnail_invalid_params": "محددات التصغير غير صحيحة",
+ "thumbnail_toobigimagearea": "ملف أبعداه أكبر من $1",
"thumbnail_dest_directory": "غير قادر على إنشاء المجلد الهدف",
"thumbnail_image-type": "نوع الصورة غير مدعوم",
"thumbnail_gd-library": "ضبط مكتبة GD غير مكتمل: دالة مفقودة $1",
"thumbnail_image-missing": "الملف يبدو أنه مفقود: $1",
"thumbnail_image-failure-limit": "هناك الكثير من المحاولات الفاشلة مؤخراً ($1 أو أكثر) لتَصْيير هذه الصورة المصغرة. الرجاء المحاولة مرة أخرى لاحقاً.",
"import": "استيراد صفحات",
- "importinterwiki": "استيراد ترانسويكي",
+ "importinterwiki": "استورد من ويكي أخرى",
"import-interwiki-text": "اختر ويكي وعنوان الصفحة للاستيراد.\nتواريخ المراجعات وأسماء المحررين سيتم حفظها.\nكل أفعال الاستيراد عبر الويكي يتم تسجيلها في [[Special:Log/import|سجل الاستيراد]].",
+ "import-interwiki-sourcewiki": "الويكي المصدر:",
+ "import-interwiki-sourcepage": "الصفحة المصدر:",
"import-interwiki-history": "انسخ كل نسخ التاريخ لهذه الصفحة",
"import-interwiki-templates": "ضمن كل القوالب",
"import-interwiki-submit": "استيراد",
@@ -2192,18 +2238,15 @@
"import-rootpage-nosubpage": "إن النطاق \"$1\" لصفحة الجذر لا يسمح بصفحات فرعية.",
"importlogpage": "سجل الاستيراد",
"importlogpagetext": "عمليات الاستيراد الإدارية للصفحات مع تاريخ التعديل من ويكيات أخرى.",
- "import-logentry-upload": "استورد [[$1]] بواسطة رفع ملف",
"import-logentry-upload-detail": "{{PLURAL:$1|لا مراجعات|مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}}",
- "import-logentry-interwiki": "استورد عبر الويكي $1",
- "import-logentry-interwiki-detail": "{{PLURAL:$1||مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}} من $2",
+ "import-logentry-interwiki-detail": "تم استيراد {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}} من $2",
"javascripttest": "اختبار جافاسكربت",
- "javascripttest-title": "تشغيل أختبارات $1",
"javascripttest-pagetext-noframework": "هذه الصفحة محجوزة لإجراء أختبارات الجافا سكريبت.",
"javascripttest-pagetext-unknownframework": "إطار اختبار غير معروف \"$1\".",
+ "javascripttest-pagetext-unknownaction": "فعل غير معروف \"$1\".",
"javascripttest-pagetext-frameworks": "الرجاء اختيار أحد أطر الاختبارات التالية: $1",
"javascripttest-pagetext-skins": "قم باختيار الواجهة لإجراء الإحتبارات بها:",
"javascripttest-qunit-intro": "راجع [$1 وثيقة الاختبار] على mediawiki.org.",
- "javascripttest-qunit-heading": "جناح اختبار MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "صفحة المستخدم الخاصة بك",
"tooltip-pt-anonuserpage": "صفحة المستخدم للأيبي الذي تقوم بالتحرير من خلاله",
"tooltip-pt-mytalk": "صفحة نقاشك",
@@ -2213,6 +2256,7 @@
"tooltip-pt-mycontris": "قائمة مساهماتك",
"tooltip-pt-login": "يفضل أن تسجل الدخول، لكنه ليس إلزاميا.",
"tooltip-pt-logout": "تسجيل الخروج",
+ "tooltip-pt-createaccount": "نشجعك على عمل حساب وتسجيل دخولك; لكنه غير ضروري على اي حال",
"tooltip-ca-talk": "نقاش عن صفحة المحتوى",
"tooltip-ca-edit": "يمكنك تعديل هذه الصفحة.\nمن فضلك استخدم زر العرض المسبق قبل الحفظ.",
"tooltip-ca-addsection": "ابدأ قسما جديدا",
@@ -2242,6 +2286,7 @@
"tooltip-feed-atom": "تلقيم أتوم لهذه الصفحة",
"tooltip-t-contributions": "رؤية قائمة مساهمات هذا المستخدم",
"tooltip-t-emailuser": "أرسل رسالة لهذا المستخدم",
+ "tooltip-t-info": "المزيد من المعلومات عن هذه الصفحة",
"tooltip-t-upload": "ارفع ملفات",
"tooltip-t-specialpages": "قائمة بكل الصفحات الخاصة",
"tooltip-t-print": "نسخة للطباعة لهذه الصفحة",
@@ -2315,7 +2360,6 @@
"pageinfo-robot-policy": "فهرسة الروبوتات",
"pageinfo-robot-index": "مسموحة",
"pageinfo-robot-noindex": "غير مسموحة",
- "pageinfo-views": "عدد المشاهدات",
"pageinfo-watchers": "عدد المراقبين",
"pageinfo-few-watchers": "أقل من {{PLURAL:$1||مراقب واحد|مراقبين اثنين|$1 مراقبين|$1 مراقباً|$1 مراقب}}",
"pageinfo-redirects-name": "عدد التحويلات إلى هذه الصفحة",
@@ -2794,7 +2838,6 @@
"exif-urgency-low": "منخفض ( $1 )",
"exif-urgency-high": "عالي ( $1 )",
"exif-urgency-other": "الأولوية محددة من قبل المستخدم ($1)",
- "watchlistall2": "الكل",
"namespacesall": "الكل",
"monthsall": "الكل",
"confirmemail": "تأكيد عنوان البريد الإلكتروني",
@@ -2855,6 +2898,7 @@
"autosumm-replace": "استبدال الصفحة ب'$1'",
"autoredircomment": "تحويل إلى [[$1]]",
"autosumm-new": "أنشأ الصفحة ب'$1'",
+ "autosumm-newblank": "أنشأ صفحة فارغة",
"size-bytes": "$1 بايت",
"size-kilobytes": "$1 كيلوبايت",
"size-megabytes": "$1 ميجابايت",
@@ -2954,11 +2998,12 @@
"hebrew-calendar-m12-gen": "أيلول",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|نقاش]])",
"timezone-utc": "ت ع م",
- "unknown_extension_tag": "وسم امتداد غير معروف \"$1\"",
"duplicate-defaultsort": "'''تحذير:''' مفتاح الترتيب الافتراضي \"$2\" يتجاوز مفتاح الترتيب الافتراضي السابق \"$1\".",
+ "duplicate-displaytitle": "<strong>تحذير:</strong> أعرض عنوان \"$2\" تجاهل العنوان المعروض سابقا \"$1\".",
+ "invalid-indicator-name": "<strong>خطأ:</strong> لا يجوز أن تبقى خاصية <code>name</code> لمؤشرات وضع الصفحة فارغةً.",
"version": "نسخة",
"version-extensions": "الامتدادات المثبتة",
- "version-skins": "واجهات",
+ "version-skins": "الواجهات المنصبة",
"version-specialpages": "صفحات خاصة",
"version-parserhooks": "خطاطيف المحلل",
"version-variables": "المتغيرات",
@@ -2971,7 +3016,7 @@
"version-parser-function-hooks": "خطاطيف دالة المحلل",
"version-hook-name": "اسم الخطاف",
"version-hook-subscribedby": "يستخدم بواسطة",
- "version-version": "(نسخة $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[لا اسم]",
"version-svn-revision": "ن$1",
"version-license": "ترخيص ميدياويكي",
@@ -2999,6 +3044,9 @@
"version-entrypoints-header-url": "المسار",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath مسار المقالات]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath مسار السكريبت]",
+ "version-libraries": "مكتبات مثبته",
+ "version-libraries-library": "المكتبة",
+ "version-libraries-version": "الإصدارة",
"redirect": "تحويل حسب رقم الملف أو رقم المستخدم أو رقم الصفحة أو رقم مراجعة",
"redirect-legend": "تحويل إلى ملف أو صفحة",
"redirect-summary": "هذه الصفحة الخاصة تحوّل إلى ملف (باسمه) أو صفحة (برقم إحدى مراجعاتها) أو إلى صفحة مستخدم (برقمه التعريفي). الاستخدام [[{{#Special:Redirect}}/file/Example.jpg]] أو [[{{#Special:Redirect}}/revision/328429]] أو [[{{#Special:Redirect}}/user/101]].",
@@ -3034,6 +3082,7 @@
"specialpages-group-wiki": "البيانات والأدوات",
"specialpages-group-redirects": "صفحات خاصة تحول",
"specialpages-group-spam": "أدوات السبام",
+ "specialpages-group-developer": "أدوات المطورين",
"blankpage": "صفحة فارغة",
"intentionallyblankpage": "هذه الصفحة تركت فارغة عن قصد",
"external_image_whitelist": " #<pre>اترك هذا السطر تماما كما هو\n#ضع منثورات التعبيرات المنتظمة (فقط الجزء الذي يذهب بين //) بالأسفل\n#هذه ستتم مطابقتها مع مسارات الصور الخرجية (الموصولة بشكل مباشر)\n#هذه التي تطابق سيتم عرضها كصور، غير ذلك فقط وصلة إلى الصورة سيتم عرضها\n#السطور التي تبدأ ب# تتم معاملتها كتعليقات\n#هذا لا يتأثر بحالة الحروف\n\n#ضع كل منثورات التعبيرات المنتظمة فوق هذا السطر. اترك هذا السطر تماما كما هو</pre>",
@@ -3046,12 +3095,18 @@
"tags-tag": "اسم الوسم",
"tags-display-header": "الظهور في قوائم التغييرات",
"tags-description-header": "وصف كامل للمعنى",
+ "tags-source-header": "المصدر",
"tags-active-header": "نشط؟",
"tags-hitcount-header": "تغييرات موسومة",
"tags-active-yes": "نعم",
"tags-active-no": "لا",
"tags-edit": "عدل",
+ "tags-delete": "احذف",
+ "tags-activate": "نشط",
"tags-hitcount": "{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}",
+ "tags-create-tag-name": "اسم الوسم:",
+ "tags-create-reason": "السبب:",
+ "tags-create-submit": "أنشئ",
"comparepages": "قارن صفحات",
"compare-page1": "صفحة 1",
"compare-page2": "صفحة 2",
@@ -3063,8 +3118,8 @@
"compare-revision-not-exists": "المراجعة التي حددتها غير موجودة.",
"dberr-problems": "عذرا! هذا الموقع يعاني من صعوبات تقنية.",
"dberr-again": "جرب الانتظار بضع دقائق وإعادة التحميل.",
- "dberr-info": "(غير قادر على الاتصال بخادوم قاعدة البيانات: $1)",
- "dberr-info-hidden": "(لا يمكن الإتصال بخادم قاعدة البيانات)",
+ "dberr-info": "(لا يمكن الوصول إلى خادوم قاعدة البيانات: $1)",
+ "dberr-info-hidden": "(لا يمكن الاتصال بخادم قاعدة البيانات)",
"dberr-usegoogle": "يمكنك محاولة البحث من خلال جوجل في الوقت الحاضر.",
"dberr-outofdate": "لاحظ أن فهارسهم لمحتوانا ربما تكون غير محدثة.",
"dberr-cachederror": "التالي نسخة مخزنة من الصفحة المطلوبة، وربما لا تكون محدثة.",
@@ -3105,6 +3160,9 @@
"revdelete-uname-unhid": "اسم المستخدم غير مخفي",
"revdelete-restricted": "طبق الضوابط لمديري النظام",
"revdelete-unrestricted": "أزال الضوابط لمديري النظام",
+ "logentry-block-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
+ "logentry-suppress-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
+ "logentry-merge-merge": "{{GENDER:$2|دمج|دمجت}} $1 $3 إلى $4 (المراجعات حتى $5).",
"logentry-move-move": "{{GENDER:$2|نقل|نقلت}} $1 صفحة $3 إلى $4",
"logentry-move-move-noredirect": "{{GENDER:$2|نقل|نقلت}} $1 صفحة $3 إلى $4 دون ترك تحويلة",
"logentry-move-move_redir": "{{GENDER:$2|نقل|نقلت}} $1 صفحة $3 إلى $4 على تحويلة",
@@ -3119,20 +3177,24 @@
"logentry-rights-rights": "{{GENDER:$2|غيّر|غيّرت}} $1 عضوية $3 من $4 إلى $5",
"logentry-rights-rights-legacy": "{{GENDER:$2|غيّر|غيّرت}} $1 عضوية $3",
"logentry-rights-autopromote": "تمت تلقائيا ترقية {{GENDER:$2|المستخدم|المستخدمة}} $1 من $4 إلى $5",
+ "logentry-upload-upload": " {{GENDER:$2|رفع|رفعت}} $1 $3",
+ "logentry-upload-overwrite": "{{GENDER:$2|رفع|رفعت}} $1 نسخة جديدة من $3",
+ "logentry-upload-revert": "{{GENDER:$2|رفع|رفعت}} $1 $3",
"rightsnone": "(لا شيء)",
+ "revdelete-summary": "ملخص التعديل",
+ "feedback-adding": "إضافة تعليقات إلى الصفحة...",
+ "feedback-bugcheck": "رائع! تحقق من أن هذه ليست إحدى [$1 العلل المعروفة].",
+ "feedback-bugnew": "لقد تحققت. بلّغ عن علة جديدة.",
"feedback-bugornote": "إن كنت مستعدا لشرح مشكلة تقنية بالتفصيل، رجاءا [$1 قدم تقريرا بالخلل].\nبخلاف ذلك، يمكنك أستخدام الطريقة الأسهل أسفله، سيتم إضافة تعليقك للصفحة \"[$3 $2]\"، بالإضافة إلى اسم المستخدم و نوع المتصفح الذي تستخدمه حاليا.",
- "feedback-subject": "الموضوع:",
- "feedback-message": "الرسالة:",
"feedback-cancel": "إلغاء",
- "feedback-submit": "أرسل الملاحظات",
- "feedback-adding": "إضافة تعليقات إلى الصفحة...",
+ "feedback-close": "تم",
"feedback-error1": "خطأ: لا يمكن التعرف عليها من API",
"feedback-error2": "خطأ: فشل في تحرير",
"feedback-error3": "خطأ : لا توجد استجابة من API",
+ "feedback-message": "الرسالة:",
+ "feedback-subject": "الموضوع:",
+ "feedback-submit": "إرسال",
"feedback-thanks": "شكرا! أُرسلت ملاحظاتك لصفحة \"[$2 $1]\".",
- "feedback-close": "تم",
- "feedback-bugcheck": "رائع! تحقق من أن هذه ليست إحدى [$1 العلل المعروفة].",
- "feedback-bugnew": "لقد تحققت. بلّغ عن علة جديدة.",
"searchsuggest-search": "بحث",
"searchsuggest-containing": "يحتوي...",
"api-error-badaccess-groups": "لا يسمح لك بتحميل الملفات إلى هذه الويكي.",
@@ -3168,6 +3230,11 @@
"api-error-stashfailed": "خطأ داخلي: فشل الملقم في تخزين الملفات المؤقتة.",
"api-error-publishfailed": "خطأ داخلي: لم ينجح الخادوم في نشر ملف مؤقت",
"api-error-stasherror": "حدث خطأ أثناء رفع الملف لتخزينه.",
+ "api-error-stashedfilenotfound": "لم يعثر على الملف المحجوب عند محاولة رفعه من الحجب.",
+ "api-error-stashfilestorage": "حدث خطأ أثناء رفع الملف لتخزينه.",
+ "api-error-stashnotloggedin": "يجب عليك تسجيل الدخول لحفظ الملفات في مرفوعاتك.",
+ "api-error-stashwrongowner": "الملف الذي كنت تحاول الوصول اليه في مخبوائتك ليس لك.",
+ "api-error-stashnosuchfilekey": "الملف الذي كنت تحاول الوصول اليه في مخبوائتك غير موجود.",
"api-error-timeout": "لم يستجب الملقم في الوقت المتوقع.",
"api-error-unclassified": "حدث خطأ غير معروف",
"api-error-unknown-code": "خطأ غير معروف : \" $1 \"",
@@ -3219,5 +3286,57 @@
"pagelang-select-lang": "اختر اللغة",
"right-pagelang": "تغيير لغة الصفحة",
"action-pagelang": "تغيير لغة الصفحة",
- "log-name-pagelang": "تغيير سجل الصفحة"
+ "log-name-pagelang": "تغيير سجل الصفحة",
+ "log-description-pagelang": "هذا سجل تغيرات في صفحة اللغات.",
+ "logentry-pagelang-pagelang": " {{GENDER:$2|غيّر|غيّرت}} $1 لغة الصفحة «$3» من $4 إلى $5.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (مفعل)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''معطل''')",
+ "mediastatistics": "إحصاءات الميديا",
+ "mediastatistics-summary": "إحصاءات عن أنماط الملفات المرفوعة، وتشمل أحدث نسخة من الملف فقط، حيث تستبعد النسخ القديمة أو المحذوفة من الملفات.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|بايت واحد|بايتان اثنان|$1 بايتات|$1 بايتاً|$1 بايت}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "نوع MIME",
+ "mediastatistics-table-extensions": "الامتدادات الممكنة",
+ "mediastatistics-table-count": "عدد الملفات",
+ "mediastatistics-table-totalbytes": "الحجم المدمج",
+ "mediastatistics-header-unknown": "غير معروف",
+ "mediastatistics-header-bitmap": "صور Bitmap",
+ "mediastatistics-header-drawing": "رسم (صور متجهية)",
+ "mediastatistics-header-audio": "صوت",
+ "mediastatistics-header-video": "مقاطع الفيديو",
+ "mediastatistics-header-multimedia": "ريتش ميديا",
+ "mediastatistics-header-office": "مكتب",
+ "mediastatistics-header-text": "نصي",
+ "mediastatistics-header-executable": "تنفيذية",
+ "mediastatistics-header-archive": "صيغ مضغوطة",
+ "json-warn-trailing-comma": "تمت إزالة {{PLURAL:$1|فاصلة انتهائية واحدة|فاصلتين انتهائيتين|$1 فاصلات انتهائية|$1 فاصلة انتهائية}} من JSON",
+ "json-error-unknown": "وقعت مشكلة مع JSON. رسالة الخطأ: $1",
+ "json-error-ctrl-char": "خطأ في محرف التحكم، ربما نتيجة سوء ترميزه.",
+ "json-error-syntax": "خطأ صياغة",
+ "json-error-utf8": "خطأ في تشكيل محارف UTF-8، ربما نتيجة سوء ترميزها.",
+ "json-error-recursion": "يوجد قيد الترميز إشارة مرجعية حلقية أو أكثر",
+ "json-error-inf-or-nan": "قيد الترميز قيمة أو أكثر من نمط NAN أو INF",
+ "json-error-unsupported-type": "نمط قيمة لا يمكن تشفيره قد أعطي",
+ "headline-anchor-title": "وصلة لهذا القسم",
+ "special-characters-group-latin": "لاتينية",
+ "special-characters-group-latinextended": "لاتينية موسعة",
+ "special-characters-group-ipa": "صوتية دولية",
+ "special-characters-group-symbols": "رموز",
+ "special-characters-group-greek": "يونانية",
+ "special-characters-group-cyrillic": "كيريلية",
+ "special-characters-group-arabic": "عربية",
+ "special-characters-group-arabicextended": "عربية موسعة",
+ "special-characters-group-persian": "فارسية",
+ "special-characters-group-hebrew": "عبرية",
+ "special-characters-group-bangla": "بنغالية",
+ "special-characters-group-tamil": "تاميلية",
+ "special-characters-group-telugu": "تيلوجية",
+ "special-characters-group-sinhala": "سنهالية",
+ "special-characters-group-gujarati": "غجراتية",
+ "special-characters-group-devanagari": "ديوناكرية",
+ "special-characters-group-thai": "تايلندية",
+ "special-characters-group-lao": "لاوية",
+ "special-characters-group-khmer": "خميرية",
+ "special-characters-title-endash": "واصلة قصيرة",
+ "special-characters-title-emdash": "واصلة طويلة",
+ "special-characters-title-minus": "علامة الطرح"
}
diff --git a/languages/i18n/arc.json b/languages/i18n/arc.json
index 1a86697b..befb4b2c 100644
--- a/languages/i18n/arc.json
+++ b/languages/i18n/arc.json
@@ -436,7 +436,6 @@
"mergehistory-comment": "ܚܒܛ [[:$1]] ܒ [[:$2]]: $3",
"mergehistory-reason": "ܥܠܬܐ:",
"mergelog": "ܣܓܠܐ ܕܚܒܛܐ",
- "pagemerge-logentry": "ܚܒܛ [[$1]] ܒ [[$2]] (ܬܢܝܬ̈ܐ ܥܕܡܐ ܠ $3)",
"revertmerge": "ܒܛܘܠ ܚܒܛܐ",
"history-title": "\"$1\": ܬܫܥܝܬܐ ܕܬܢܝܬܐ",
"difference-title": "«$1»: ܦܘܪܫܐ ܒܝܢܝ ܬܢܝܬ̈ܐ",
@@ -477,7 +476,6 @@
"searchrelated": "ܐܚܝܢܝ̈ܐ",
"searchall": "ܟܠ",
"showingresults": "ܚܘܘܝܐ ܠܬܚܬ {{PLURAL:$1|'''1''' ܦܠܛܐ|'''$1''' ܦܠܛ̈ܐ}} ܫܪܐ ܡܢ ܡܢܝܢܐ '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|ܦܠܛܐ '''$1''' ܡܢ '''$3'''|ܦܠܛ̈ܐ '''$1 - $2''' ܡܢ '''$3'''}} ܠ'''$4'''",
"search-nonefound": "ܠܝܬ ܦܠܛ̈ܐ ܐܘܝܢ̈ܐ ܠܗܢܐ ܒܨܝܐ.",
"powersearch-legend": "ܒܨܝܐ ܡܬܩܕܡܢܐ",
"powersearch-ns": "ܒܨܝ ܒܚܩܠܬ̈ܐ:",
@@ -757,18 +755,14 @@
"statistics": "ܚܒܝܫܘܬ ܡܢܝܢܐ",
"statistics-header-pages": "ܚܒܝܫܘܬ ܡܢܝܢ̈ܐ ܕܦܐܬܐ",
"statistics-header-edits": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ",
- "statistics-header-views": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܚܙܝܐ",
"statistics-header-users": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܕܡܦܠܚܢܐ",
"statistics-header-hooks": "ܚܒܝܫܘܬ ܡܢܝܢܐ ܐܚܪܢܐ",
"statistics-articles": "ܦܐܬܬ̈ܐ ܕܚܒܝܫܬ̈ܐ",
"statistics-pages": "ܦܐܬܬ̈ܐ",
"statistics-edits": "ܫܘܚܠܦ̈ܐ ܕܦܐܬܬ̈ܐ ܡܢ ܫܘܪܝܐ ܕ {{SITENAME}}",
"statistics-edits-average": "ܡܨܥܐ ܕܫܘܚܠܦ̈ܐ ܠܟܠ ܦܐܬܐ",
- "statistics-views-total": "ܣܘܝܟܐ ܕܚܙܝܐ",
- "statistics-views-peredit": "ܚܘܘܝ̈ܐ ܠܟܠ ܫܘܚܠܦܐ",
"statistics-users": "[[Special:ListUsers|ܡܦܠܚܢ̈ܐ]] ܡܣܓܠ̈ܐ",
"statistics-users-active": "ܡܦܠܚܢ̈ܐ ܙܪ̄ܝܙܐ",
- "statistics-mostpopular": "ܦܐܬܬ̈ܐ ܚܙܝ̈ܐ ܝܬܝܪ ܡܢ ܟܠ",
"pageswithprop": "ܦܐܬܬ̈ܐ ܥܡ ܕܝܠܝܬܐ ܕܦܐܬܐ",
"pageswithprop-legend": "ܦܐܬܬ̈ܐ ܥܡ ܕܝܠܝܬܐ ܕܦܐܬܐ",
"pageswithprop-prop": "ܫܡܐ ܕܕܝܠܝܬܐ",
@@ -798,7 +792,6 @@
"uncategorizedtemplates": "ܩܠܒ̈ܐ ܠܐ ܣܕܝܪ̈ܐ",
"unusedcategories": "ܣܕܪ̈ܐ ܠܐ ܦܠܝܚ̈ܐ",
"unusedimages": "ܠܦܦ̈ܐ ܠܐ ܦܠܝܚ̈ܐ",
- "popularpages": "ܦܐܬܬ̈ܐ ܡܫܡܗܬ̈ܐ",
"wantedcategories": "ܣܕܪ̈ܐ ܒܥܝ̈ܐ",
"wantedpages": "ܦܐܬܬ̈ܐ ܣܢܝܩܬ̈ܐ",
"wantedfiles": "ܠܦܦ̈ܐ ܣܢܝܩ̈ܐ",
@@ -836,7 +829,6 @@
"suppress": "ܚܝܘܪܐ",
"booksources": "ܙܠ",
"booksources-search-legend": "ܒܨܝ ܥܠ ܡܒܘܥ̈ܐ ܕܟܬܒ̈ܐ",
- "booksources-go": "ܙܠ",
"specialloguserlabel": "ܡܦܩܢܐ:",
"speciallogtitlelabel": "ܢܘܦܐ (ܟܘܢܝܐ ܐܘ ܡܦܠܚܢܐ):",
"log": "ܣܓܠ̈ܐ",
@@ -925,7 +917,7 @@
"watchlist-details": "{{PLURAL:$1|$1 ܦܐܬܐ|$1 ܦܐܬܬ̈ܐ}} ܒܪ̈ܗܝܬܟ, ܫܒܘܩ ܡܢ ܦܐܬܬ̈ܐ ܕܡܡܠܠܐ.",
"wlheader-showupdated": "ܦܐܬܬ̈ܐ ܕܐܫܬܚܠܦܢ ܡܢ ܒܬܪ ܣܘܥܪܢܐ ܐܚܪܝܐ ܠܗܝܢ ܡܬܓܠܚܢ ܒܣܪܛܐ '''ܚܠܝܡܐ'''",
"wlnote": "ܠܬܚܬ {{PLURAL:$1|ܫܘܚܠܦܐ ܐܚܪܝܐ| '''$1''' ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ}} {{PLURAL:$2|ܒܫܥܬܐ ܐܚܪܝܬܐ|'''$2''' ܒܫܥܬ̈ܐ ܐܚܪ̈ܝܬܐ}}, ܠܦܘܬ $3, $4.",
- "wlshowlast": "ܚܘܝ $1 ܫܥܬ̈ܐ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ $3",
+ "wlshowlast": "ܚܘܝ $1 ܫܥܬ̈ܐ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ",
"watchlist-options": "ܨܒܝܢܝܘܬ̈ܐ ܕܪ̈ܗܝܬܐ",
"watching": "ܪܗܝܐ...",
"unwatching": "ܠܚܝ ܪܗܝܐ...",
@@ -1196,7 +1188,6 @@
"pageinfo-robot-policy": "ܫܘܘܕܥܐ ܒܝܕ ܪ̈ܘܒܘܛܐ",
"pageinfo-robot-index": "ܡܬܦܣܣܢܐ",
"pageinfo-robot-noindex": "ܠܐ ܡܬܦܣܣܢܐ",
- "pageinfo-views": "ܡܢܝܢܐ ܕܚܙܝܬ̈ܐ",
"pageinfo-watchers": "ܡܢܝܢܐ ܕܪ̈ܗܝܐ",
"pageinfo-redirects-name": "ܡܢܝܢܐ ܕܨܘܝܒ̈ܐ ܠܦܐܬܐ ܗܕܐ",
"pageinfo-subpages-name": "ܦܐܬܬ̈ܐ ܦܪ̈ܥܝܐ ܕܦܐܬܐ ܗܕܐ",
@@ -1290,7 +1281,6 @@
"exif-gpsdirection-t": "ܨܘܒܐ ܬܪܝܨܐ",
"exif-gpsdirection-m": "ܨܘܒܐ ܡܓܢܛܝܣܝܐ",
"exif-dc-contributor": "ܫܘܬܦܢ̈ܐ",
- "watchlistall2": "ܟܠ",
"namespacesall": "ܟܠ",
"monthsall": "ܟܠ",
"confirmemail": "ܫܪܪ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ",
@@ -1330,7 +1320,7 @@
"version": "ܨܚܚܐ",
"version-specialpages": "ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ",
"version-other": "ܐܚܪܢܐ",
- "version-version": "(ܨܚܚܐ $1)",
+ "version-version": "($1)",
"version-poweredby-others": "ܐܚܪ̈ܢܐ",
"version-software-version": "ܨܚܚܐ",
"fileduplicatesearch": "ܒܨܝ ܥܠ ܠܦܦ̈ܐ ܥܦܝܦ̈ܐ",
@@ -1384,9 +1374,10 @@
"logentry-newusers-create2": "ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $3 {{GENDER:$2|ܐܬܬܟܝܢ}} ܒܝܕ $1",
"logentry-newusers-autocreate": "ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 {{GENDER:$2|ܐܬܬܣܝܡ}} ܝܬܐܝܬ",
"rightsnone": "(ܠܐ ܡܕܡ)",
- "feedback-subject": "ܡܠܘܐܐ:",
- "feedback-message": "ܐܓܪܬܐ:",
+ "revdelete-summary": "ܫܚܠܦ ܦܣܝܩܬ̈ܐ",
"feedback-cancel": "ܒܛܘܠ",
+ "feedback-message": "ܐܓܪܬܐ:",
+ "feedback-subject": "ܡܠܘܐܐ:",
"searchsuggest-search": "ܒܨܝ",
"searchsuggest-containing": "ܬܚܒܘܫ...",
"expandtemplates": "ܐܪܘܚ ܩܠܒ̈ܐ",
diff --git a/languages/i18n/arn.json b/languages/i18n/arn.json
index 4eb0a960..5e55cf65 100644
--- a/languages/i18n/arn.json
+++ b/languages/i18n/arn.json
@@ -330,7 +330,6 @@
"search-interwiki-more": "(Doy)",
"searchrelated": "koneltuyelelu",
"searchall": "kom",
- "showingresultsheader": "{{PLURAL:$5|'''$1''' ñi tripalu '''$3''' mew|'''$1-$2''' ñi tripalu '''$3''' mew}} '''$4''' ngealu",
"search-nonefound": "Tripalu dungu falilay chumngechi kintuael.",
"mypreferences": "Dullin",
"prefs-edits": "Rakin Wirin:",
@@ -463,7 +462,6 @@
"pager-older-n": "{{PLURAL: Rupachi $1}}",
"booksources": "Lifüru ñi chew küpan",
"booksources-search-legend": "Kintun lifüru ñi chew küpan",
- "booksources-go": "Amun",
"specialloguserlabel": "Kellufe:",
"speciallogtitlelabel": "Chew ñi amuael (Üy):",
"log": "Wirintukun",
@@ -489,7 +487,7 @@
"unwatchthispage": "Llaytuwelan",
"notanarticle": "Trokiñdungu wülngiñ nu",
"watchlist-details": "{{PLURAL:$1|$1 wülngiñ}} tami llaytun wif mew. Inantukulay nütramkawün ñi wülngiñ.",
- "wlshowlast": "Pengelün kalekünun rupalu $1 ora, $2 antü $3",
+ "wlshowlast": "Pengelün kalekünun rupalu $1 ora, $2 antü",
"watchlist-options": "Llaytun wif ñi dullin",
"watching": "Llaytumekey...",
"unwatching": "Llaytumekewelay...",
@@ -663,7 +661,6 @@
"exif-contrast-2": "Yafü",
"exif-sharpness-2": "Yafü",
"exif-subjectdistancerange-0": "Kimnoelchi",
- "watchlistall2": "kom",
"namespacesall": "kom",
"monthsall": "(kom)",
"confirm_purge_button": "Feley may",
diff --git a/languages/i18n/arq.json b/languages/i18n/arq.json
index c5e815bd..61b96d4b 100644
--- a/languages/i18n/arq.json
+++ b/languages/i18n/arq.json
@@ -13,7 +13,7 @@
"tog-newpageshidepatrolled": "خبي الباجات المعسوسه اللي في ليستت الباجات الجدد",
"tog-extendwatchlist": "دلّي الليستة تاع التتباع باش تورّي كامل التبديلات، ماشي برك غير التوالا",
"tog-usenewrc": "جمّع الـتبدالات بل صفحة فل تبدالات الـجديدة و الـليستة تاع الـعسّة",
- "tog-numberheadings": "رقم اليا عناوين السكسيو",
+ "tog-numberheadings": "رقّم العلاون تاع القسيمات",
"tog-showtoolbar": "بيّن البارّة تاع دوزان‘ الكتبة",
"tog-editondblclick": "آكتيفي التبدال تاع الباجات بل زوج ضركات تاع الفارة",
"tog-editsectiononrightclick": "آكتيفي التبدال تاع السكسيوّات بل ضريك بل ليمنة على العلاوين نتاعهم",
@@ -21,6 +21,7 @@
"tog-watchdefault": "زيد الـصفحات و الـفيشيّات اللي نبدّلها فل قايمة تاع الـتتباع تاعي",
"tog-watchmoves": "زيد الـصفحات و الـفيشيات اللي نحوّلها فل قايمة تاع الـتباع تاعي",
"tog-watchdeletion": "زيد الـصفحات اللي نفصيها فل قايمة تاع التتباع تاعي",
+ "tog-watchrollback": "بيّن فل ليستة تاع المتابعة تاعي، الصفحات الّي كنت أنا سترجعتها.",
"tog-minordefault": "ماركي كل التبديلات بلي راهي خفيفه",
"tog-previewontop": "ورّي نضرة قبليّة تاع واش يصرا، فوق الجيهة تاع التبدال",
"tog-previewonfirst": "بين شوفه-قبليه مع اول تبديله",
@@ -31,7 +32,7 @@
"tog-shownumberswatching": "بين شحال كاين من مستعمل يتبع الباجه",
"tog-oldsig": "خطّ‘لـيدّ اللي كاين",
"tog-fancysig": "اعتبر التوقيع كي كتيبه ويكي (بلا وصيله توماتيك)",
- "tog-uselivepreview": "استعمل الـنضرة الـقبلانيّة الحيّة (عفسة تجرابيّة، تخلّيك تشوف التبدال الّي يصرا فل وقت الّي تكون تكتب)",
+ "tog-uselivepreview": "استعمل الشوفة الخفيفة",
"tog-forceeditsummary": "نبّهني كي تندخل كاش صفحة خاوية",
"tog-watchlisthideown": "خبّي الـتبدالات تاوعي فل ليستة تاع الـتتباع",
"tog-watchlisthidebots": "خبّي الـتبدالات تاع الـروبويات فل ليستة تاع التتباع تاعي",
@@ -73,10 +74,10 @@
"april": "أفريل",
"may_long": "ماي",
"june": "جوان",
- "july": "جويليي",
+ "july": "جويليا",
"august": "أوت",
"september": "سبتمبر",
- "october": "أكتوبر",
+ "october": "أوكتوبر",
"november": "نوفمبر",
"december": "ديسمبر",
"january-gen": "جانفي",
@@ -97,9 +98,9 @@
"apr": "أفريل",
"may": "ماي",
"jun": "جوان",
- "jul": "جويليي",
+ "jul": "جويليا",
"aug": "أوت",
- "sep": "سيبتمبر",
+ "sep": "سبتمبر",
"oct": "أوكتوبر",
"nov": "نوفمبر",
"dec": "ديسمبر",
@@ -152,7 +153,7 @@
"faqpage": "Project:سؤالات متكرره",
"actions": "أفعال",
"namespaces": "بلاصه تع أسموات",
- "variants": "متغيرات",
+ "variants": "تنويعات",
"navigation-heading": "القايمة تاع الـتبحار",
"errorpagetitle": "غلطه",
"returnto": "ولي إلى $1.",
@@ -190,11 +191,11 @@
"talkpage": "قرعَج على هاد الباجة",
"talkpagelinktext": "ناقش",
"specialpage": "باجة خوصوصيّة",
- "personaltools": "ادوالت شخصيه",
+ "personaltools": "دوزان شخصيه",
"articlepage": "شوف الباجة تاع المحتاوا",
"talk": "مناقشه",
- "views": "شوفات",
- "toolbox": "صندوق تاع الدوزان",
+ "views": "استبيان",
+ "toolbox": "دوزان",
"userpage": "شوف الباجة تاع المستعملي",
"projectpage": "شوف الباجة تاع البروجي",
"imagepage": "شوف الباجة تاع الفيشي",
@@ -206,18 +207,20 @@
"otherlanguages": "بلوغات وحد اوخره",
"redirectedfrom": "(محول من $1)",
"redirectpagesub": "باجة تاع التحوال",
+ "redirectto": "حوّل لـ:",
"lastmodifiedat": "هاد الباجه راهي تبدّلت نهار الـ $1, على الـساعة $2.",
"viewcount": "هاد الباجة نشافت {{PLURAL:$1|خطرة وحدة|$1 خطرة}}.",
"protectedpage": "باجة محضيّة",
"jumpto": "اقفز ل:",
- "jumptonavigation": "تجوال",
- "jumptosearch": "تفتاش",
+ "jumptonavigation": "تبحار",
+ "jumptosearch": "فتّش",
"view-pool-error": "اعدرونا، السربايات راهم مغبّنين ف هاد الوقيتة.\nبزّاف المستعمليّين راهم باغيين يشوفو هاد الباجة.\nاصبرو شي وقيتة قبل ما تحاولو تلحقو لها عاود.\n\n$1",
"generic-pool-error": "اعدرونا، السربايات راهم مغبّنين ف هاد الوقيتة.\nبزّاف المستعمليّين راهم باغيين يشوفو هاد الباجة.\nاصبرو شي وقيتة قبل ما تحاولو تلحقو لها عاود.",
"pool-timeout": "المهلة تاع المقارعة راهي فاتت",
"pool-queuefull": "السنسلة تاع المقارعة راهي عامرة",
"pool-errorunknown": "خلطة ماشي معروفة",
"pool-servererror": "السربيس تاع العدّان راه حابس ( $1 ).",
+ "poolcounter-usage-error": "غلطة تاع ستُعمال: $1",
"aboutsite": "على{{SITENAME}}",
"aboutpage": "Project:على",
"copyright": "المحتاوا راه تحت النسخة $1 تاع الليسانس، غير يلا كان مكتوب حاجاخرة.",
@@ -227,10 +230,11 @@
"disclaimers": "تنبيهات",
"disclaimerpage": "Project:التحذيرات العامه",
"edithelp": "معونة",
- "mainpage": "الباجة اللولانيّة",
- "mainpage-description": "الباجة اللوله",
+ "helppage-top-gethelp": "معاونة",
+ "mainpage": "الپاجة اللولانيّة",
+ "mainpage-description": "الپاجة اللولانيّة",
"policy-url": "Project:المقاون",
- "portal": "المجتمع",
+ "portal": "بورطاي المجتمع",
"portal-url": "Project:بورطاي المجتمع",
"privacy": "السياسة تاع الخصوصيات (الدين الضيّق)",
"privacypage": "Project:خصوصيه",
@@ -258,6 +262,9 @@
"hidetoc": "خبّي",
"collapsible-collapse": "خبّي",
"collapsible-expand": "ورّي",
+ "confirmable-confirm": "آش يلا راك مأكّد{{GENDER:$1||ة}}؟",
+ "confirmable-yes": "إيه",
+ "confirmable-no": "لا",
"thisisdeleted": "راك باغي تشوف ولا ترجّع $1؟",
"viewdeleted": "شوف $1؟",
"restorelink": "{{PLURAL:$1|تبدال واحد مفاصي|$1 تبدالات مفاصيين|$1 تبدال مفاصي}}",
@@ -302,10 +309,13 @@
"readonly_lag": "الدخيرة تاع الخبرات راهي مقفولة بيدما السربايات التوناويّة يلحقو التوخار الّي عندهم معا السرباي اللولاني",
"internalerror": "غلطة دخلانيّة",
"internalerror_info": "غلطة دخلانيّة: $1",
+ "internalerror-fatal-exception": "غلطة واعرة من الطبَع \"$1\"",
"filecopyerror": "ما قدرش تنساخ الفيشي \"$1\" لل \"$2\"",
"filerenameerror": "ما قدرش تبدال السميّة تاع الفيشي \"$1\" لل \"$2\".",
"filedeleteerror": "ما قدرش تمحيتٰ الفيشي \"$1\".",
"directorycreateerror": "ما قدرش خلقان الدفتار \"$1\".",
+ "directoryreadonlyerror": "الزمّام «$1» راه لل قراية برك (ما ينجمش يكون مبدّل).",
+ "directorynotreadableerror": "الزمّام «$1» ما راهش واجد لل قراية.",
"filenotfound": "ما قدرش مصيبتٰ الفيشي \"$1\".",
"unexpected": "قيمة ما شي مستنية : \"$1\"=\"$2\".",
"formerror": "غلطة: ما قدرش ترسال الستيمارة",
@@ -317,23 +327,68 @@
"badtitle": "عنوان عيان",
"badtitletext": "عنوان الباجه المطلوب إما ماشي صحيح والا فارغ، وبالاك الوصيل بين اللغات والا بين البروجيات ماشي صحيح.\nبالاك فيه حروف ما تصلحش باس يستعملوها فالعناوين.",
"perfcached": "الموطايات هادي راهي مخبّية و بالاك تاني يكون فات عليها الوقت. {{PLURAL:$1||ناتج واحد|زوج نواتج|$1 نواتج|$1 ناتج}} على الكتَر {{PLURAL:$1||مخبّي|مخبّيين}}.",
+ "perfcachedts": "المعلومات هادو راهم مخبّيين، و تعاودو فل $1. يلا كتّر {{PLURAL:$4|ناتج واحد راه|$4 نواتج راهم}} واجدين فل خبّاي.",
+ "querypage-no-updates": "المعاودات تاع هاد الصفحة راهم معطّلين.\nالمعلومات هادي ما راهيش مرجّعة لل حاضر.",
"viewsource": "شوف الاصل",
+ "viewsource-title": "شوف المصدر تاع $1",
+ "actionthrottled": "الفعل راه محبّس",
+ "actionthrottledtext": "باش نحرزو من السبام، ما يمكنش تدير هاد الفعل بزّاف المرات في مدّة تاع وقت قصير، و راك ضركا فتّ هذا الحد.\nمن فضلك عاود سيّي منّا على شي دقايق.",
+ "protectedpagetext": "هاد الصفحة راهي تنحضات باش ما تتبدّلش ولا شي حاجاخرة.",
+ "viewsourcetext": "تنجم تشوف ولا تنسّح المصدر تاع هاد الصفحة:",
+ "viewyourtext": "تنجم تشوف و تنسّخ المصدر تاع <strong>التبدالات تاعك</strong> ف هاد الصفحة:",
+ "protectedinterface": "هاد الباجة توفّر لك وريشة (interface) تاع كتابة مديورة لل صوفتوار الّي ف هاد الويكي، و راهي مأمّنة باش تنحضا من الضرارات.\nباش تزيد ولا تبدّل طرجمات ل كامل الويكيّات، من فضلك استعمل [//translatewiki.net/ translatewiki.net] المشروع ميدياويكي تاع التبلادات.",
+ "editinginterface": "<strong>ردّ بالك:</strong>راك تبدّل صفحة الّمديورة باش تصنع النصّ تاع الواجهة تاع اللوجيسيال. التبدالات على هاد الصفحة غادي يوتّرو على الشكَل تاع الواجهة حتا عند المستعمليين لخرين.",
+ "translateinterface": "باش تزيد ولا تبدّل الطرجمات ل كامل الويكيّات، استعمل [//translatewiki.net/ translatewiki.net]، المشروع تاع التبلاد تاع الميديويكي.",
+ "exception-nologin": "ماشي مسجّل الدخول",
"yourname": "اسم المستخدم:",
+ "userlogin-yourname": "سميّة تاع المستعملي",
+ "userlogin-yourname-ph": "دخّل السميّة تاع المستعملي تاعك",
"yourpassword": "كلمة السر:",
+ "userlogin-yourpassword": "كلمت` السرّ",
+ "userlogin-yourpassword-ph": "دخّل كلمت` السرّ تاعك",
+ "createacct-yourpassword-ph": "دخّل كلمت` سرّ",
"yourpasswordagain": "عاود كتبت كلمت السر:",
+ "createacct-yourpasswordagain": "أكّد كلمت` السرّ",
+ "createacct-yourpasswordagain-ph": "عاود دخّل كلمت` السرّ",
"remembermypassword": "اتفكر الدخول تاعي ب هاذ النافيكاتور (ب مدّة حدها{{PLURAL:$1||يوم واحد|يومين|$1 إيّام|$1 يوم}})",
+ "userlogin-remembermypassword": "خلّيني مسجّل داخل",
"login": "كونكسيون",
"nav-login-createaccount": "تسجل/ اصنع حساب",
"userlogin": "تسجل/ اصنع حساب",
+ "userloginnocreate": "مسجّل الدخول",
+ "logout": "مسجّل الخروج",
"userlogout": "سجل خروج",
+ "userlogin-noaccount": "ما عندك حساب؟",
+ "userlogin-joinproject": "انضم لـ {{SITENAME}}",
"nologin": "ما عندكش حساب مسجل؟ '''$1'''.",
"nologinlink": "اصنع حساب",
"createaccount": "اصنع حساب",
"gotaccount": "عندك حساب مسجل؟ '''$1'''.",
"gotaccountlink": "كونكسيون",
"userlogin-resetlink": "نسيت تفاصيل الدخول؟",
+ "userlogin-resetpassword-link": "راك ناسي كلمت` السرّ؟",
+ "userlogin-helplink2": "معاونة ف تسجال الدخول",
+ "createacct-emailrequired": "علوان تاع إيمال",
+ "createacct-emailoptional": "علوان ليمال (ماشي مسيّف)",
+ "createacct-email-ph": "دخّل علوان` ليمال تاعك",
+ "createacct-another-email-ph": "دخّل علوان تاع إيمال",
+ "createaccountreason": "سبّة:",
+ "createacct-reason": "سبّة",
+ "createacct-captcha": "تحقق أمني",
+ "createacct-imgcaptcha-ph": "دخّل النصّ الّي راك تشوفهُ لفوق",
+ "createacct-submit": "اصنع حسابك",
+ "createacct-benefit-heading": "{{SITENAME}} مخلوق من عند شي ناس غير كيفك.",
+ "createacct-benefit-body1": "{{PLURAL:$1|تحرير|تحريرات}}",
+ "createacct-benefit-body2": "$1 {{PLURAL:$1|صفحة|صفحات}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|مساهم|مساهمين}} توالا",
"mailmypassword": "أرسل لي كلمة سر جديده",
"loginlanguagelabel": "اللوغه: $1",
+ "pt-login": "دخله",
+ "pt-login-button": "دخول",
+ "pt-createaccount": "اصنع حساب",
+ "pt-userlogout": "خروج",
+ "passwordreset": "صفّي كلمت` السرّ",
+ "passwordreset-legend": "استرجع كلمت` السرّ",
"bold_sample": "كتيبة غليظه",
"bold_tip": "كتيبة غليظه",
"italic_sample": "كتبة مايلة",
@@ -357,13 +412,15 @@
"preview": "شوفه-قبلي",
"showpreview": "بين معاينة",
"showdiff": "عرض التبديلات",
- "anoneditwarning": "'''توله:''' راك ما دخلتش.\nغادي يتسجل لادراس آيبي نتاعك في تاريخ هذه الباجه.",
+ "anoneditwarning": "'''توليهة:''' راك ما دخلتش بل حساب تاعك.\nيلا تدير شي تبدال، غادي تتسجّل لادريسة آيبي تاعك فل متراخ تاع هاد الصفحة و تكون باينة ل كلّ واحد. يلا [$1 تتكونيكتا]</strong> ولا <strong>[$2 تخلق حساب]</strong>، التبدالات تاعك غادي يبانو تحت السميّة تاع المستعملي تاعك، و كاين تاني مزيّات وحدخرين.",
+ "loginreqlink": "اتكونيكتا",
"newarticle": "(جديد)",
"newarticletext": "راك تبعت وصيلة لباجه لم ما تخدمتش بعد.\nباش تصنع هاذ الباجه ابدا الكتبه فالصندوق التحت (شوف في [$1 زياده باجه المساعده] لمعلومات).\nإذا كانت زيارتك لهاذ الباجه غلطه، ادرك على بوطون''ولى'' في نافيقاتور الإنترنت نتاعك.",
- "noarticletext": "لحد الساعه ما كانش حتى نص في هاذ الباجه.\nتقدرو [[Special:Search/{{PAGENAME}}|ترميو تفتيشه على هاذ العنوان]] فالباجات لخرين,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} فتش فالعمليات المربوطه]\nو إلا[{{fullurl:{{FULLPAGENAME}}|action=edit}} أصنع هاذ الباجه]</span>.",
+ "noarticletext": "حتا لضركا، ما كاين حتا نصّ ف هاذ الپاجه.\nتقدرو [[Special:Search/{{PAGENAME}}ترميو تفتيشه على هاذ العلوان]] فل پاجات لخرين,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} فتش فل عمليات المربوطة]\n ولا[{{fullurl:{{FULLPAGENAME}}|action=edit}} اصنع هاذ الپاجه]</span>.",
"noarticletext-nopermission": "لحد الساعه ما كانش حتى نص في هاذ الباجه.\nتقدرو [[Special:Search/{{PAGENAME}}|ترميو تفتيشه على هاذ العنوان]] فالباجات لخرين,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} فتش فالعمليات المربوطه]\nو إلا[{{fullurl:{{FULLPAGENAME}}|action=edit}} أصنع هاذ الباجه]</span>.",
"previewnote": "'''ما تنساش هذي معاينه قبليه.'''\nلدوك التبديلات دياولك ما تسجلوش!",
"editing": "تحرير $1",
+ "creating": "خليق $1",
"editingsection": "كتيبه $1 (قسم)",
"templatesused": "{{PLURAL:$1||القالب المستعمل|القوالب المستعمله}} في هذه الباجه:",
"template-protected": "(محميه)",
@@ -379,7 +436,7 @@
"viewpagelogs": "بين العمليات على هاذ الباحه",
"currentrev-asof": "نسخة ضركانية بل تاريخ تاع $1",
"revisionasof": "معاودة تاع الـ $1",
- "revision-info": "مراجعه $1 بواسطت $2",
+ "revision-info": "مراجعة تاع $1 من عند {{GENDER:$6|$2}}$7",
"previousrevision": "← نسخة اللوله",
"nextrevision": "فرسيون جايه←",
"currentrevisionlink": "المراجعه الحاليه",
@@ -395,9 +452,11 @@
"revdel-restore": "غير كيف راهي تبان",
"revertmerge": "فرق",
"history-title": " «$1»: تاريخ المراجعات",
+ "difference-title": "فروقات بين التبدالات تاع \"$1\"",
"lineno": "سطر$1:",
"compareselectedversions": "كومباري بين نسختين مخيرين",
"editundo": "نحي",
+ "diff-multi-sameuser": "({{PLURAL:$1|تبديلة متوسّطة وحدة|$1 تبديلات متوسّطين}} ماشي {{PLURAL:$1|مورّية|$1 مورّيين}} من عند نفس المستعملي)",
"searchresults": "نتاج تاع التفتيشة",
"searchresults-title": "ريزيلته تاع التحواس \"$1\"",
"prevn": "{{PLURAL:$1|précédente|$1 اللولانيين}}",
@@ -407,7 +466,7 @@
"shown-title": "آفيشي $1 {{PLURAL:$1|نتيجة}} فل صفحة",
"viewprevnext": "شوف($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "'''كاين باجه اسمها « [[:$1]] » في هاذ الويكي'''",
- "searchmenu-new": "'''أصنع الباجه « [[:$1|$1]] » في هذ الويكي !'''",
+ "searchmenu-new": "'''أصنع الباجة \"[[:$1]]\" في هذ الويكي !'''\n{{PLURAL:$2|0=|شوف تاني الصفحة الّي صبتها ف`التفتاش..|شوف تاني النواتج تاع التفتاش.}}",
"searchprofile-articles": "باجه تع محتوى",
"searchprofile-images": "ميلتيميديا",
"searchprofile-everything": "كلش",
@@ -423,31 +482,46 @@
"search-suggest": "كنت باغي تقول: $1",
"searchrelated": "مرتابطه",
"searchall": "ألكل",
- "showingresultsheader": "{{PLURAL:$5|نتيجه'''$1'''|نتايج'''$1–$2'''}} تع'''$3''' لـ'''$4'''",
+ "search-showingresults": "{{PLURAL:$4|النتيج <strong>$1</strong> تاع <strong>$3</strong>|النتايج <strong>$1 - $2</strong> من أصل <strong>$3</strong>}}",
"search-nonefound": "ما كانش نتائج تطابق المسقسية.",
"mypreferences": "إختيارات",
"youremail": "البريه الالكترونيه:",
"yourrealname": "الاسم الحقاني:",
"prefs-help-email": "لادريس نتع البريه الإلكترونيه بالخاطر، ولكن هي لازمه في حال نسيت كلمت السر نتاعك.",
"prefs-help-email-others": "تقدر تاني تخلي لوخرين يتاصلو بيك في باجت نقاشك ولا في وصيله في باجت مستخدم نتاعك, اذا ارسلك واحد ما يبانش لادريس نتاعك , حتى اذ رديت عليه باش يبان لادريس نتاعك.",
+ "right-writeapi": "استعمل API للكتابه نتاع الويكي",
"newuserlogpage": "ريجيستر صنعة حسابات المستخدمين",
"action-edit": "عدل هاذ الباجه",
"nchanges": "$1 تبديله{{PLURAL:$1||s}}",
+ "enhancedrc-history": "تاريخ",
"recentchanges": "تبديلات توالا",
"recentchanges-legend": "ابسيون التبديلات التواله",
+ "recentchanges-summary": "اجبر التبدالات اللواخر الّي صراو ف هاد الصفحة.",
"recentchanges-feed-description": "تبع التبديلات الجدد للويكي في هاذ التيار .",
"recentchanges-label-newpage": " هاذ التبديل صنع باجه جديده",
"recentchanges-label-minor": "هاذا تبديل صغير",
"recentchanges-label-bot": "هاذ التبديل ندار بروبو",
"recentchanges-label-unpatrolled": "ما تراجعتش هاذ التبديله للآن",
+ "recentchanges-label-plusminus": "الحجَم تاع الصفحة راه تبدّل ب هاد العدّة تاع البايتات",
+ "recentchanges-legend-heading": "'''تفسار:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (شوف تاني [[Special:NewPages|ليستة تاع صفحات جديدة]])",
"rcnotefrom": "هاهي التبديلات من'''$2''' (ل'''$1''' معروضه).",
"rclistfrom": "بين التبديلات البديه من $3 $2",
"rcshowhideminor": "$1 التبديلات الصغير",
+ "rcshowhideminor-show": "ورّي",
+ "rcshowhideminor-hide": "خبّي",
"rcshowhidebots": "$1 البوتات",
+ "rcshowhidebots-show": "ورّي",
+ "rcshowhidebots-hide": "خبّي",
"rcshowhideliu": "$1 المستخدمين المسجلين",
+ "rcshowhideliu-hide": "خبّي",
"rcshowhideanons": "$1 المستخدمين المجهولين",
+ "rcshowhideanons-show": "ورّي",
+ "rcshowhideanons-hide": "خبّي",
"rcshowhidepatr": "$1 التبديلات المعسوسه",
"rcshowhidemine": "$1 تبديلات نتاعي",
+ "rcshowhidemine-show": "ورّي",
+ "rcshowhidemine-hide": "خبّي",
"rclinks": "بين آخر $1 تبديل في آخر $2 يوم<br />$3",
"diff": "إختلاف",
"hist": "تاريخ",
@@ -456,6 +530,7 @@
"minoreditletter": "ط",
"newpageletter": "ج‌",
"boteditletter": "ب",
+ "rc-change-size-new": "$1 {{PLURAL:$1|octet|octets}} مورا التبدال",
"rc-enhanced-expand": "بين التفاصيل (يلزمها جافاسكريبت)",
"rc-enhanced-hide": "خبي التفاصيل",
"recentchangeslinked": "تبديلات مربوطه",
@@ -469,6 +544,7 @@
"filedesc": "ملخص",
"license": "ترخيص:",
"license-header": "ترخيص:",
+ "imgfile": "فيشي",
"file-anchor-link": "ملف",
"filehist": "تاريخ الفيشيي",
"filehist-help": "ادرك على وقت و تاريخ/باش تشوف الملف كما بان في هاذ الوقت.",
@@ -484,6 +560,7 @@
"linkstoimage": "{{PLURAL:$1|الباجة توصل|ال$1 باجات يوصلو}} لهاذ الملف :",
"nolinkstoimage": "ما كانش باجات موصوله لهاذ الفيشي.",
"sharedupload-desc-here": "هاذ الملف جاي من $1. يمكن يكون مستعمل من بروجيات وحد أخرين.\nالتوصيف نتاعو في [$2 باجت الصفات] محطوطه هنا لتحت.",
+ "upload-disallowed-here": "ما تنحمش تعدّل هاد التصويرة",
"randompage": "باجة على الزهر",
"statistics": "إحصاويّات",
"nbytes": "{{PLURAL:$1|بايت 1|$1 بايت}}",
@@ -496,7 +573,7 @@
"pager-older-n": "{{PLURAL:$1|قديم بزاف 1|قديم بزاف $1}}",
"booksources": "مصادر كتاب",
"booksources-search-legend": "حوس ما بين مصادر الكتب",
- "booksources-go": "اذهب",
+ "booksources-search": "فتّش",
"log": "ريجيسترات العمليات",
"allpages": "قاع الباجات",
"allarticles": "قاع الباجات",
@@ -511,18 +588,22 @@
"watch": "تبع",
"unwatch": "ما تزيدش تعس",
"watchlist-details": "{{PLURAL:$1||باجه وحده|زوج باجات|$1 باجات|$1 باجه }} في ليستت مراقبتك، بلا ما تعد باجات النقاش.",
- "wlshowlast": "بين آخر $1 سوايع $2 يامات$3",
+ "wlshowlast": "بين آخر $1 سوايع $2 يامات",
"watchlist-options": "ابسيون ليستت المراقبه",
"actioncomplete": "العمليه اندارت",
"actionfailed": "العمليه فشلت",
"dellogpage": "ريجيستر محو الباجات",
"rollbacklink": "ولي",
+ "rollbacklinkcount": "رجّع {{PLURAL:$1|تعديل واحد|$1 تعديلات}}",
"protectlogpage": "ريجيستر الحمايه",
"protectedarticle": "راه حمى \"[[$1]]\"",
"undeletelink": "شوف/رجع",
"undeleteviewlink": "شوف",
"namespace": "بلاصه تع أسموات",
"invert": "اعكس التخيار",
+ "tooltip-invert": "علّم هاد المقّبسة باش تخبّي التبدالات تاع الصفحات الّي فيها وسَع` التسمية (و وسَع التسمية المربوط يلا كاين)",
+ "namespace_association": "وسَع التسمية المربوط",
+ "tooltip-namespace_association": "علّم على هاد المقيبسة باش تدخّل تاني المهادرة ولا وسَع التسمية تاع الموضوع المربوط معا وسَع التسمية المسيليكسيوني",
"blanknamespace": "أساسي",
"contributions": "مساهمات {{GENDER:$1|المستخدم|المستخدمه}}",
"contributions-title": "مساهمات {{GENDER:$1|المستخدم|المستخدمه}} $1",
@@ -540,7 +621,7 @@
"sp-contributions-username": "عنوان أيبي والال اسم مستخدم:",
"sp-contributions-toponly": "ما تورّي غير المشاركات التوالا تاع المقالات",
"sp-contributions-submit": "تفتاش",
- "whatlinkshere": "واش يوصل هنا",
+ "whatlinkshere": "واش واصل هنا",
"whatlinkshere-title": "الباجات اللي تقين في \"$1\"",
"whatlinkshere-page": "الباجه:",
"linkshere": "هاذ الباجات يوصلو إلى '''[[:$1]]''':",
@@ -577,10 +658,11 @@
"tooltip-pt-preferences": "وش خيرت",
"tooltip-pt-watchlist": "ليستت الباجات الي راك أتبع تبديلاتهم",
"tooltip-pt-mycontris": "ليسته نتع مساهماتك",
- "tooltip-pt-login": "مادابيك تسجل الدخول تاعك، بصّح ماشي ملزوم عليك",
+ "tooltip-pt-login": "مادابيك تسجل دخلتك ، لكن ماشي لازم",
"tooltip-pt-logout": "سجل خروج",
- "tooltip-ca-talk": "تقرعيج على باجتٰ المحتاوا",
- "tooltip-ca-edit": "تنجم تحرر هاذ الباجه ،ماذابيك تستعمل قفله المراجعه قبل ما تحفظ",
+ "tooltip-pt-createaccount": "ننصح باش تصنع حساب و تسجل دخلتك ; على كل حال ماهوش ضروري",
+ "tooltip-ca-talk": "مناقشه على هاد باجت المحتوا",
+ "tooltip-ca-edit": "تقدر تبدل هاذ الباجه ،ماذابيك تستعمل قفله المراجعه قبل ما تسجل",
"tooltip-ca-addsection": "ابدأ طرف جديد",
"tooltip-ca-viewsource": "هاذ الباجه محميه. و شنو تقدرو تشوفو الأصلي نتاعها",
"tooltip-ca-history": "المراجعات التوالا تاع الباجة (معا المساهمين تاوعها)",
@@ -590,17 +672,17 @@
"tooltip-ca-watch": "زيد هذ الباجة لل ليستة تاعك تاع التتباع",
"tooltip-ca-unwatch": "اقلع هاد الباجة منل ليستة تاعك تاع التتباع",
"tooltip-search": " فتّش في {{SITENAME}}",
- "tooltip-search-go": "روح الباجه عندها نفس الآسم إذا كانت كاينه",
+ "tooltip-search-go": "روح لباجه عندها ذاك الآسم نفسو إذا كانت",
"tooltip-search-fulltext": "فتّش على باجه بهاد الكتبة",
- "tooltip-p-logo": "روح للباجه اللولانيّه",
- "tooltip-n-mainpage": "زور الباجه اللوله",
- "tooltip-n-mainpage-description": "زور الباجه لوله",
- "tooltip-n-portal": "على الپروجي،واش تنجم تدير، وين تصيب واش تحتاج",
+ "tooltip-p-logo": "زور الپاجة اللولانيّة",
+ "tooltip-n-mainpage": "زور الپاجة اللولانيّة",
+ "tooltip-n-mainpage-description": "زور الپاجة اللولانيّة",
+ "tooltip-n-portal": "على الپروجي،واش تقدر تدير، وين تصيب واش تحتاج",
"tooltip-n-currentevents": "صيب خبارات مستّرين على الصوالح الّي راهم يصراو ضركا",
- "tooltip-n-recentchanges": "الليستة تاع التبديلات التوالا فل ويكي",
+ "tooltip-n-recentchanges": "الليستة تاع التبديلات الجديدة فل ويكي",
"tooltip-n-randompage": "طلّع باجه على الزهر",
"tooltip-n-help": "بلاصة المعونة",
- "tooltip-t-whatlinkshere": "ليستة تاع كاع الباجات تاع المحتاوا الي توصّل لهنا",
+ "tooltip-t-whatlinkshere": "ليستة تاع كامل باجات المحتاوا الواصله هنا",
"tooltip-t-recentchangeslinked": "ليستة تاع التبديلات التوالا تاع الباجات الّي عندهم رباط معا هادي",
"tooltip-feed-atom": "سيلان آتوم تاع هاد الباجة",
"tooltip-t-contributions": "شوفان ليسته مساهمات هاذا المستخدم",
@@ -625,24 +707,47 @@
"tooltip-rollback": "\"نحّي\" : ب ضركة وحدة تآنيلي التبديلة ولا التبديلات تاع المساهم التالي",
"tooltip-undo": "\"نحّي\" فاصي هاد الـمعاودة و حلّ تاقة تاع تبدال بشوفه قبلانيّه. تخلّي باش ترجع لل معاوده التاليه و تزيد الـسبّة علاش فل قابسه تاع الـحويصله.",
"tooltip-summary": "دخل تلخيص صغير",
+ "simpleantispam-label": "مسيّة ضدّ السبام.\nما تعمّرش هادا!",
+ "pageinfo-toolboxlink": "معلومات على هاد الباجه",
"previousdiff": "→ التعديل الي قبل",
"nextdiff": "التبديل الجاي ←",
"file-info-size": "$1 × $2 بكسل حجم الملف: $3، نوع MIME: $4",
"file-nohires": "ما كانش دقه اكثر من هاك",
"svg-long-desc": "فيشيي SVG، أبعاده $1 × $2 بكسل، تاي الفيشي : $3",
- "show-big-image": "تصويرة دقة عالية",
+ "show-big-image": "الملف الأصلي",
+ "show-big-image-preview": "حجم هذه المعاينه: $1.",
+ "show-big-image-other": "{{PLURAL:$2||التدقاقة|التدقاقات}}: $1.",
+ "show-big-image-size": "$1 × $2 بكسل",
"bad_image_list": "الفورمة راهي كيما واش يتبع:\nما كاين غير السطور الّي باديين بل *، الّي يكونو معدودين\nالـوصيل الـلوّل تاع سطر لازم كون تاع تصويرة ضايعة.\nكامل الوصيلات لخرين الّي فل سطر، يكونو معدودين كلّي تتنيّات، بل متال باجات وين الـتصويرة تنجم تبان.",
"metadata": "بايان ميتا",
"metadata-help": "هذا الملف راه فيه خبيرات زايدين، بالاك تكون انزادت من عند صواره نيميريك ولا سكانر مين صنع الملف.\nالأصلي، شي تفاصيل بالاك ما تعبرش على الملف المعدل.",
"metadata-fields": "الحقول تاع الميتا معطيّات تاع تصاور الّي يكونو ف هاد البريّة غادي ينحطّو فل باجة تاع التوصاف تاع التصويرة منين يكون الجدول تاع الميتاالمعطيات مطوي.\nالحقول لخرة يكونو مخبيين بارديفو.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "لكل",
+ "exif-orientation": "توجاه",
+ "exif-xresolution": "التدقاق الأوفوقي",
+ "exif-yresolution": "التدقاق العامودي",
+ "exif-datetime": "تاريخ و وقت تاع تبدال الفيشي",
+ "exif-make": "الصانع تاع الجهاز",
+ "exif-model": "الطبّع تاع الجهاز",
+ "exif-software": "البريمجات الّي مستعملة",
+ "exif-exifversion": "نسخة Exif",
+ "exif-colorspace": "موساع تاع اللوان",
+ "exif-datetimeoriginal": "التاريخ و الوقت تاع تولاد المعلومات",
+ "exif-datetimedigitized": "التاريخ تاع التنمريل (numérisation)",
+ "exif-orientation-1": "عادي",
"namespacesall": "لكل",
"monthsall": "لكل",
"watchlisttools-view": "اعرض التبديلات المرتابطه",
"watchlisttools-edit": "اعرض قائمه المراقبه و عدلها",
"watchlisttools-raw": "موديفي ليستت التبيعه الخام",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|تقرعيج]])",
"duplicate-defaultsort": "'''توليه:''' مفتاح التستيف الافتراضي \"$2\" ديباسا مفتاح التستيف الافتراضي التالي\"$1\".",
"specialpages": "الباجات الخصوصيه",
"external_image_whitelist": " #<pre>خلى هاذ السطر كيما راه\n#حط منثورات التعبيرات المنتظمة (برك الجزء الي يروح بين //) بالتحت\n#هاذ يكون مطابقتها مع مسارات التصاوير البرانيه (الموصولة بصفه مباشره)\n#هاذي الي تشبهغادي تنعرض كتصاور، خلاف هذا برك وصيلة للتصويرة غادي تنعرض\n#السطور اللي تبدأا ب# تعتبر تعليقات\n#هذا لا يتأثر بحالة الحروف\n\n#حط كامل منثورات التعبيرات المنتظمة فوق هذا السطر. خلي هاذ السطر سواسوا كيما هو</pre>",
- "tag-filter": "صفاية[[Special:Tags|الوشام]]:"
+ "tag-filter": "صفاية[[Special:Tags|الوشام]]:",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||وسم|وسمان|وسوم}}]]: $2)",
+ "logentry-delete-delete": "$1 {{GENDER:$2| راه محا|راهي محات}}الصفحة $3",
+ "logentry-move-move": "{{GENDER:$2|نقّل|نقّلت}} $1 الصفحة $3 لـ $4",
+ "logentry-newusers-create": "راه تفتح حساب {{GENDER:$2|المستخدم|المستخدمه}} $1",
+ "logentry-upload-upload": " {{GENDER:$2|نزّل|نزّلت}} $1 $3",
+ "searchsuggest-search": "تفتاش"
}
diff --git a/languages/i18n/ary.json b/languages/i18n/ary.json
index 770e2618..79e12cc3 100644
--- a/languages/i18n/ary.json
+++ b/languages/i18n/ary.json
@@ -401,13 +401,11 @@
"passwordreset-emailelement": "smiṫ l-mosṫĥdim: $1\nklmṫ s-srr l-mo'qaṫa: $2",
"passwordreset-emailsent": "ṫsift email liṫ-ṫdkir.",
"changeemail": "bddel ĝonwan l-email",
- "changeemail-header": "bddel ĝonwan l-email dl-ḫisab",
"changeemail-no-info": "ĥaṣṣ tkon daĥol baĥ tqdr twṣl l-had ṣfḫa niċan.",
"changeemail-oldemail": "ĝonwan l-email l-ḫali:",
"changeemail-newemail": "ĝonwan dial l-email jdid:",
"changeemail-none": "(walo)",
"changeemail-submit": "bddel l-email",
- "changeemail-cancel": "lġi",
"bold_sample": "Kṫaba ġliḍa",
"bold_tip": "Kṫaba ġliḍa",
"italic_sample": "Kṫaba mayla",
@@ -606,7 +604,6 @@
"mergehistory-same-destination": "ma ymkn-ċ tkon ṣ-ṣfḫa l-mosṫhdafa hia l-mṣḍṛ braso",
"mergehistory-reason": "sabab:",
"mergelog": "sjl damj",
- "pagemerge-logentry": "[[$1]] ṫdmjaṫ f-[[$2]] (morajaĝaṫ ĝṫṫa l-$3)",
"revertmerge": "Ḫiyyed ṫ-ṫeĥlat.",
"history-title": "Ṫ-Ṫariĥ dyal lé-vérsyon dyal \"$1\"",
"difference-multipage": "(l-fṛq bin ṣ-ṣfaḫi)",
@@ -648,7 +645,6 @@
"searchrelated": "mortabita",
"searchall": "kolċi",
"showingresults": "mbyyena l-ṫḫṫ ḫṫṫa l-{{PLURAL:$3|'''1''' n-naṫija|'''$3''' d-nnaṫa'ij}} badya mn rqm '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|n-naṫija '''$1''' mn '''$3'''|n-naṫa'ij '''$1 - $2''' mn '''$3'''}} l-'''$4'''",
"search-nonefound": "ḫṫṫa naṫija ma bḫal ḫad t-talab.",
"powersearch-legend": "Ṫeqlab ṣĝib",
"powersearch-ns": "Qelleb fe maḫel s-smiyyaṫ",
@@ -1044,17 +1040,13 @@
"statistics": "Staṫisṫik",
"statistics-header-pages": "ihsa'at sfahi",
"statistics-header-edits": "ihsa'at taadilat",
- "statistics-header-views": "ihsa'at lmochahada",
"statistics-header-users": "ihsa'at lmstkhdimin",
"statistics-header-hooks": "ihsa'at khra",
"statistics-articles": "sfht mohtawa",
"statistics-pages": "ṣfaḫi",
"statistics-files": "Ṣifet ci fiċyé",
"statistics-edits-average": "otawassit taadilat lkol sfha",
- "statistics-views-total": "chof total",
- "statistics-views-peredit": "l-moċahadaĝ l-koll ṫĝdil",
"statistics-users-active": "mostakhdimon nachtin",
- "statistics-mostpopular": "aktar sfahi mochahada",
"doubleredirects": "ṫḫwila mḍoḅla",
"double-redirect-fixed-move": "[[$1]] ṫnqlaṫ.\ndaba ka ṫḫwwal l-[[$2]].",
"double-redirect-fixed-maintenance": "iṣlaḫ ṫḫwil mḍobl mon [[$1]] l-[[$2]].",
@@ -1080,7 +1072,6 @@
"uncategorizedtemplates": "qwalb mamsnfinch",
"unusedcategories": "tsnifat mabqatch mstaamla",
"unusedimages": "milfat mamstkhdmach",
- "popularpages": "sfahi mchhora",
"wantedcategories": "tsnifat mtloba",
"wantedpages": "sfahi mtloba",
"wantedpages-badtitle": "ĝonwan ma ṣḫiḫ-ċ f-mjmoĝṫ n-naṫa'ij: $1",
@@ -1120,7 +1111,6 @@
"booksources": "Ĝyon l-kṫab",
"booksources-search-legend": "Qelleb ĝla l-kṫoba",
"booksources-isbn": "ISBN:",
- "booksources-go": "Sir",
"specialloguserlabel": "Mosṫeĥdim:",
"speciallogtitlelabel": "l'adresse:",
"log": "sijillaṫ",
@@ -1211,7 +1201,7 @@
"watchlist-details": "{{PLURAL:$1|ṣefḫa weḫda|$1 de ṣ-ṣefḫaṫ}} kaynin fe l-lista dyal s-suivi dyalṫek, bla ma nḫesbo ṣ-ṣefḫaṫ dyal n-niqaċ.",
"wlheader-enotif": "l-iĝlam bl-email mtloq.",
"wlheader-showupdated": "ṣ-ṣfaḫi lli ṫġyyeraṫ mn aĥir ẓiyaṛa ṫaĝk mkṫoba b-ĥatt '''ġliḍ'''",
- "wlshowlast": "Werri l-$1 de s-swayeĝ o l-$2 iyam l-leĥĥrin, ola werri $3",
+ "wlshowlast": "Werri l-$1 de s-swayeĝ o l-$2 iyam l-leĥĥrin, ola werri",
"watchlist-options": "Lé-Opsyon de l-lista dyal s-suivi",
"watching": "Kayraqeb...",
"unwatching": "Nihayaṫ 's-suivi...",
@@ -1240,7 +1230,6 @@
"deletereasonotherlist": "Sabab weḫdaĥor",
"delete-edit-reasonlist": "ĝddel asbab l-ḫdf",
"rollback": "tjjea taadilat",
- "rollback_short": "Rjeĝ l-lor",
"rollbacklink": "Rjeĝ l-lor",
"rollbackfailed": "rjoaa mankhch",
"editcomment": "molĥĥaṣ ṫ-ṫĝdil kan: \"''$1''\".",
@@ -1491,7 +1480,6 @@
"thumbnail_image-missing": "milef naqṣ: $1",
"import": "Éxporté ċi ṣefḫaṫ",
"importinterwiki": "sṫirad t-transwiki",
- "import-interwiki-source": "wiki/ṣfḫṫ l-ṃṣḍṛ:",
"import-interwiki-submit": "importé",
"import-upload-filename": "smiyt lfichier:",
"import-comment": "taĜelleq:",
@@ -1565,7 +1553,6 @@
"spambot_username": "tandif spam mediawiki",
"pageinfo-title": "mĝlomaṫ l-\"$1\"",
"pageinfo-header-edits": "ṫĝdilaṫ",
- "pageinfo-views": "ĝadad l-moċahadaṫ",
"pageinfo-watchers": "ĝadad l-moraqibin",
"pageinfo-edits": "ĝadad ṫ-ṫĝdilaṫ",
"pageinfo-authors": "ĝadad l-mo'llifin l-mĥṫalfin",
@@ -1855,7 +1842,6 @@
"exif-urgency-low": "mnĥafḍa ($1)",
"exif-urgency-high": "ĝalia ($1)",
"exif-urgency-other": "l-awlawiyya lli ḫddadha l-mosṫĥdim ($1)",
- "watchlistall2": "kolċi",
"namespacesall": "kolċi",
"monthsall": "kolhom",
"confirmemail": "konfirmasyon dyal l'email",
@@ -1909,7 +1895,6 @@
"watchlisttools-view": "Lista dyal s-suivi",
"watchlisttools-edit": "Ċof o ĝeddel l-lista dyal s-suivi",
"watchlisttools-raw": "Ṣayeb l-lista dyal s-suivi",
- "unknown_extension_tag": "tag mṫidad ma mĝrof-ċ \"$1\"",
"duplicate-defaultsort": "'''ṫḫdir:''' saroṫ ṫrṫib fṫiṛaḍi \"$2\" faṫ saroṫ ṫrṫib fṫiṛaḍi \"$1\".",
"version": "Noskha",
"version-extensions": "limtidadat lmotabbata",
@@ -1925,7 +1910,7 @@
"version-parser-function-hooks": "khtatif dyal dalat lmohllil",
"version-hook-name": "smiyt lkhttaf",
"version-hook-subscribedby": "kaytstaml mn taraf",
- "version-version": "(Noskha $1)",
+ "version-version": "($1)",
"version-license": "rokhssa",
"version-poweredby-others": "khrin",
"version-software": "lbarnamaj li m'anstalli",
@@ -1992,5 +1977,6 @@
"sqlite-no-fts": "$1 imkaniyat lbaht f nass kaml",
"revdelete-restricted": "tḅḅq ḍ-ḍawaḅit ll-idariyyin",
"revdelete-unrestricted": "ḫyyd ḍ-ḍawaḅit ll-idariyyin",
- "rightsnone": "(walo)"
+ "rightsnone": "(walo)",
+ "revdelete-summary": "molkhass taadil"
}
diff --git a/languages/i18n/arz.json b/languages/i18n/arz.json
index 6f52b4a8..adf0eed6 100644
--- a/languages/i18n/arz.json
+++ b/languages/i18n/arz.json
@@ -644,7 +644,6 @@
"mergehistory-same-destination": "صفحتا المصدر والهدف لا يمكن أن تكونا نفس الشىء",
"mergehistory-reason": "السبب:",
"mergelog": "سجل الدمج",
- "pagemerge-logentry": "دمج [[$1]] لـ [[$2]] (النسخ حتى $3)",
"revertmerge": "استرجاع الدمج",
"mergelogpagetext": "فى تحت لستة بأحدث عمليات الدمج لتاريخ صفحة فى التانية.",
"history-title": " «$1»: تاريخ التعديل",
@@ -687,7 +686,6 @@
"searchrelated": "مرتبطه",
"searchall": "الكل",
"showingresults": "القائمة دى بتعرض {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} من أول رقم '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|النتيجه '''$1''' من'''$3'''|النتايج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
"search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
"powersearch-legend": "تدوير متقدم",
"powersearch-ns": "تدوير فى اسم المساحه:",
@@ -1141,7 +1139,6 @@
"statistics": "احصائيات",
"statistics-header-pages": "إحصاءات الصفحات",
"statistics-header-edits": "إحصاءات التعديلات",
- "statistics-header-views": "إحصاءات المشاهدة",
"statistics-header-users": "الاحصاءات بتاعة اليوزر",
"statistics-header-hooks": "احصائيات تانيه",
"statistics-articles": "صفحات المحتوى",
@@ -1150,12 +1147,9 @@
"statistics-files": "الملفات المتحملة",
"statistics-edits": "تعديلات الصفحات من بداية {{SITENAME}}",
"statistics-edits-average": "متوسط التعديلات لكل صفحة",
- "statistics-views-total": "إجمالى المشاهدات",
- "statistics-views-peredit": "المشاهدات لكل تعديل",
"statistics-users": "[[Special:ListUsers|يوزرز]] مسجلين",
"statistics-users-active": "يوزرز نشطين",
"statistics-users-active-desc": "اليوزرز اللى نفذو عمليه فى الـ {{PLURAL:$1|يوم|$1 ايام}} اللى فاتو",
- "statistics-mostpopular": "اكتر صفحات اتشافت",
"doubleredirects": "تحويلات مزدوجه",
"doubleredirectstext": "الصفحة دى فيها لستة الصفحات اللى فيها تحويلة لصفحة تانية فيها تحويلة.\nكل سطر فى اللستة دى فيه لينك للتحويلة الأولانية والتانية و كمان للصفحة بتاعة التحويلة التانية و اللى غالبا هى الصفحة الاصلية اللى المفروض التحويلة الاولانية توصل ليها.\n<del>Crossed out</del> اتحلت.",
"double-redirect-fixed-move": "[[$1]] اتنقلت، هى دلوقتى تحويله ل [[$2]]",
@@ -1184,7 +1178,6 @@
"uncategorizedtemplates": "قوالب مش متصنفه",
"unusedcategories": "تصانيف مش مستعمله",
"unusedimages": "صور مش مستعمله",
- "popularpages": "صفحات مشهورة",
"wantedcategories": "تصانيف مطلوبه",
"wantedpages": "صفحات مطلوبه",
"wantedpages-badtitle": "عنوان مش صحيح فى مجموعة النتايج: $1",
@@ -1228,7 +1221,6 @@
"suppress": "أوفرسايت",
"booksources": "مصادر من كتب",
"booksources-search-legend": "التدوير على مصادر الكتب",
- "booksources-go": "روح",
"booksources-text": "فى تحت لستة بوصلات لمواقع تانية بتبيع الكتب الجديدة والمستعملة، كمان ممكن تلاقى معلومات إضافية عن الكتب اللى يتدور عليها :",
"booksources-invalid-isbn": "رقم الـ ISBN اللى كتبته شكله مش صحيح؛ اتإكد من الغلطات بتاعة النسخ من المصدر الاصلى.",
"specialloguserlabel": "اليوزر:",
@@ -1328,7 +1320,7 @@
"wlheader-enotif": "*خاصية الاعلام بالايميل متفعلة",
"wlheader-showupdated": "الصفحات اللى اتغيرت بعد زيارتك ليها اخر مرة معروضة بالخط '''العريض'''",
"wlnote": "تحت فى {{PLURAL:$1|آخر تغيير|آخر '''$1''' تغيير}} فى آخر {{PLURAL:$2|ساعه|'''$2''' ساعه}}، من الوقت $3، $4.",
- "wlshowlast": "عرض اخر $1 ساعات $2 ايام $3",
+ "wlshowlast": "عرض اخر $1 ساعات $2 ايام",
"watchlist-options": "اختيارات قايمة المراقبة",
"watching": "بيراقب...",
"unwatching": "بيبطل مراقبه...",
@@ -1364,7 +1356,6 @@
"delete-toobig": "الصفحه دى ليها تاريخ تعديل كبير، أكتر من $1 {{PLURAL:$1|مراجعة|مراجعة}}.\nمسح الصفحات اللى زى دى تم تحديده لمنع الاضطراب العرضى فى {{SITENAME}}.",
"delete-warning-toobig": "الصفحة دى ليها تاريخ تعديل كبير، أكتر من $1 {{PLURAL:$1|مراجعة|مراجعة}}.\nممكن مسحها يعمل اضطراب فى عمليات قاعدة البيانات فى {{SITENAME}}؛\nاستمر بس خد بالك.",
"rollback": "إرجع فى التعديلات",
- "rollback_short": "إرجع لـ ورا",
"rollbacklink": "ترجيع",
"rollbackfailed": "الترجيع ما نفعش",
"cantrollback": "ماقدرناش نرجع فى التعديل؛ آخر مساهم هوه الوحيد اللى ساهم فى الصفحة دي.",
@@ -1687,7 +1678,6 @@
"import": "استيراد صفحات",
"importinterwiki": "استيراد ترانسويكي",
"import-interwiki-text": "اختار الويكى و عنوان الصفحة اللى عاوز تستوردها.\nتواريخ التعديلات و اسامى المحررين ح يتحافظ عليها.\nكل عمليات الاستيراد للترانسويكى بتتسجل فى [[Special:Log/import|سجل الاستيراد]].",
- "import-interwiki-source": "مصدر ويكي/صفحه:",
"import-interwiki-history": "انسخ كل نسخ التاريخ للصفحة دي",
"import-interwiki-templates": "اشمل كل القوالب",
"import-interwiki-submit": "استيراد",
@@ -2087,7 +2077,6 @@
"exif-gpsspeed-n": "عقد",
"exif-gpsdirection-t": "الاتجاه الحقيقي",
"exif-gpsdirection-m": "الاتجاه المغناطيسي",
- "watchlistall2": "الكل",
"namespacesall": "الكل",
"monthsall": "الكل",
"confirmemail": "اعمل تأكيد للأيميل بتاعك",
@@ -2210,7 +2199,6 @@
"hebrew-calendar-m11-gen": "آب",
"hebrew-calendar-m12-gen": "أيلول",
"timezone-utc": "يو تى سى",
- "unknown_extension_tag": "تاج بتاع امتداد مش معروف \"$1\"",
"duplicate-defaultsort": "تحزير: زرار الترتيب الاوتوماتيكي\"$2\" بيوقف زرار الترتيب الاوتوماتيكي\"$1\" القديم.",
"version": "نسخة",
"version-extensions": "الامتدادات المتثبتة",
@@ -2224,7 +2212,7 @@
"version-parser-function-hooks": "خطاطيف دالة المحلل",
"version-hook-name": "اسم الخطاف",
"version-hook-subscribedby": "اشتراك باسم",
- "version-version": "(نسخه $1)",
+ "version-version": "($1)",
"version-license": "الترخيص",
"version-software": "السوفتوير المتستاب",
"version-software-product": "المنتج",
@@ -2251,6 +2239,7 @@
"specialpages-group-wiki": "بيانات وأدوات الويكى",
"specialpages-group-redirects": "صفحات التحويل الخاصه",
"specialpages-group-spam": "أدوات السبام",
+ "specialpages-group-developer": "أدوات المطورين",
"blankpage": "صفحة فاضية",
"intentionallyblankpage": "الصفحة دى متسابة فاضية بالقصد",
"external_image_whitelist": " # سيب السطر دا زى ما هو كدا<pre>\n#حط حتت التعبيرات المنتظمه (بس الجزء اللى بيروح بين //) تحت\n# ح يحصل تطابق بينهم و بين ال URLs بتاع الصور الخارجيه (هوت لينك)\n#اذا حصل تطابق ح يتعرضو ك صور ، و اذا ما حصلش ف ح تظهر بس لينك للصوره\n#السطور اللى بتبتدى بـ # بتتعامل كأنها تعليقات\n#دا ما بيتأثرش بحالة الحروف\n\n#حط كل حتت الريجيكس فوق . سيب السطر دا زى ما هو كدا</pre>",
@@ -2286,6 +2275,7 @@
"revdelete-restricted": "طبق التعليمات على السيسوبات",
"revdelete-unrestricted": "شيل الضوابط من على السيسوبات",
"rightsnone": "(فاضى)",
+ "revdelete-summary": "ملخص التعديل",
"searchsuggest-search": "تدوير",
"searchsuggest-containing": "جوّاه...",
"expandtemplates": "تكبير القوالب",
diff --git a/languages/i18n/as.json b/languages/i18n/as.json
index 208723e1..6d86b3fb 100644
--- a/languages/i18n/as.json
+++ b/languages/i18n/as.json
@@ -14,7 +14,10 @@
"Reedy",
"Simbu123",
"Urhixidur",
- "아라"
+ "아라",
+ "Aftabuzzaman",
+ "Macofe",
+ "IKHazarika"
]
},
"tog-underline": "সংযোগসমূহ অধোৰেখিত কৰক:",
@@ -41,7 +44,7 @@
"tog-shownumberswatching": "লক্ষ্য কৰি থকা সদস্য সমূহৰ সংখ্যা দেখুৱাওক",
"tog-oldsig": "বৰ্তমানৰ স্বাক্ষৰ:",
"tog-fancysig": "স্বাক্ষৰ ৱিকিটেক্সট হিচাপে ব্যৱহাৰ কৰক (স্বয়ংক্ৰিয় সংযোগ অবিহনে)",
- "tog-uselivepreview": "সম্পাদনাৰ লগে লগে খচৰা দেখুৱাওক (পৰীক্ষামূলক)",
+ "tog-uselivepreview": "তাৎক্ষণিক প্ৰাক্‌দৰ্শন ব্যৱহাৰ কৰক",
"tog-forceeditsummary": "সম্পাদনাৰ সাৰাংশ নিদিলে মোক জনাব",
"tog-watchlisthideown": "মোৰ লক্ষ্য-তালিকাত মোৰ সম্পাদনা নেদেখুৱাব",
"tog-watchlisthidebots": "মোৰ লক্ষ্য-তালিকাত ব'টে কৰা সম্পাদনা নেদেখুৱাব",
@@ -216,6 +219,7 @@
"otherlanguages": "আন ভাষাসমূহত",
"redirectedfrom": "($1ৰ পৰা পুনঃনিৰ্দেশিত)",
"redirectpagesub": "পুনঃনিৰ্দেশিত পৃষ্ঠা",
+ "redirectto": "পুনঃনিৰ্দেশ কৰা হৈছে:",
"lastmodifiedat": "এই পৃষ্ঠাটো শেষবাৰৰ কাৰণে $1 তাৰিখে $2 বজাত সলনি কৰা হৈছিল।",
"viewcount": "এই পৃষ্ঠাটো {{PLURAL:$1|এবাৰ|$1 বাৰ}} চোৱা হৈছে।",
"protectedpage": "সুৰক্ষিত পৃষ্ঠা",
@@ -228,6 +232,7 @@
"pool-queuefull": "পুল কিউ (pool queue) পূৰ্ণ",
"pool-errorunknown": "অপৰিচিত ত্ৰুটি",
"pool-servererror": "পুল কাউণ্টাৰ সেৱা উপলব্ধ নহয় ($1)।",
+ "poolcounter-usage-error": "ব্যৱহাৰ ত্ৰুটি: $1",
"aboutsite": "{{SITENAME}}ৰ বিষয়ে",
"aboutpage": "Project:ইতিবৃত্ত",
"copyright": "আন একো উল্লেখ নাথাকিলে এই বিষয়বস্তু $1 ৰ আওতাত উপলব্ধ।",
@@ -268,6 +273,7 @@
"hidetoc": "দেখুৱাব নালাগে",
"collapsible-collapse": "সংকোচন",
"collapsible-expand": "বহলাওক",
+ "confirmable-confirm": "{{GENDER:$1|আপুনি}} নিশ্চিতনে?",
"confirmable-yes": "হয়",
"confirmable-no": "নহয়",
"thisisdeleted": "$1 চাওক বা সলনি কৰক?",
@@ -339,7 +345,8 @@
"viewsourcetext": "আপুনি এই পৃষ্ঠাটোৰ উৎস চাব আৰু নকল কৰিব পাৰে",
"viewyourtext": "আপুনি '''আপোনাৰ সম্পাদনাসমূহ'''ৰ উৎস চাব আৰু এই পৃষ্ঠালৈ নকল কৰিব পাৰে:",
"protectedinterface": "এই পৃষ্ঠাই ৱিকি ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা প্ৰদান কৰে আৰু ইয়াক সুৰক্ষিত কৰি ৰখা হৈছে।\nসকলো ৱিকিৰ বাবে অনুবাদ যোগ কৰিবলৈ বা সলাবলৈ অনুগ্ৰহ কৰি মিডিয়াৱিকি স্থানীয়কৰণ প্ৰকল্প [//translatewiki.net/ translatewiki.net] ব্যৱহাৰ কৰক।",
- "editinginterface": "'''সাৱধানবাণী:''' আপুনি যিখন পৃষ্ঠা সম্পাদনা কৰিছে সেইখন এই ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা দিবলৈ ব্যৱহাৰ হয়।\nএই পৃষ্ঠাৰ সাল-সলনিয়ে আন ব্যৱহাৰকাৰীৰ বাবে ইণ্টাৰফে’চত প্ৰভাৱ পেলাব।\nসকলো ৱিকিৰ বাবে অনুবাদৰ বাবে অনুগ্ৰহ কৰি মিডিয়াৱিকি স্থানীয়কৰণ প্ৰকল্প [//translatewiki.net/ translatewiki.net] ব্যৱহাৰ কৰক ।",
+ "editinginterface": "<strong>সাৱধানবাণী:</strong> আপুনি সম্পাদনা কৰি থকা পৃষ্ঠাটো এই ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা দিবলৈ ব্যৱহাৰ হয়।\nএই পৃষ্ঠাৰ সাল-সলনিয়ে এই ৱিকিত আন ব্যৱহাৰকাৰীৰ বাবে ইণ্টাৰফে’চত প্ৰভাৱ পেলাব।",
+ "translateinterface": "সকলো ৱিকিৰ বাবে অনুবাদ যোগ বা সালসলনি কৰিবৰ বাবে অনুগ্ৰহ কৰি মিডিয়াৱিকি স্থানীয়কৰণ প্ৰকল্প //translatewiki.net/ translatewiki.net] ব্যৱহাৰ কৰক।",
"cascadeprotected": "এই পৃষ্ঠাটো সম্পাদনাৰ পৰা সুৰক্ষিত কাৰণ এই {{PLURAL:$1|পৃষ্ঠা, যিটো|পৃষ্ঠা, যিবোৰ}} \"প্ৰপাতাকাৰ\" (cascading) বিকল্পৰ সহযোগত সুৰক্ষিত কৰা হৈছে: \n$2",
"namespaceprotected": "আপোনাৰ '''$1''' নামস্থানৰ পৃষ্ঠাসমূহ সম্পাদনা কৰাৰ অধিকাৰ নাই।",
"customcssprotected": "এই CSS পৃষ্ঠা সম্পাদনা কৰাৰ অধিকাৰ আপোনাৰ নাই, কাৰণ ইয়াত আন সদস্যৰ ব্যক্তিগত পছন্দসমূহত আছে ।",
@@ -396,6 +403,8 @@
"userlogin-resetlink": "আপোনাৰ প্ৰৱেশ তথ্য পাহৰিছে?",
"userlogin-resetpassword-link": "আপোনাৰ গুপ্তশব্দ পাহৰিছে?",
"userlogin-helplink2": "প্ৰৱেশ সংক্ৰান্তীয় সাহায্য",
+ "userlogin-loggedin": "আপুনি ইতিমধ্যে {{GENDER:$1|$1}} হিচাপে প্ৰৱেশ কৰিছে। তলৰ আন সদস্যৰূপে প্ৰৱেশ কৰিবলৈ তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰক।",
+ "userlogin-createanother": "আন এটা একাউণ্ট সৃষ্টি কৰক",
"createacct-emailrequired": "ই-মেইল ঠিকনা",
"createacct-emailoptional": "ই-মেইল ঠিকনা (বৈকল্পিক)",
"createacct-email-ph": "আপোনাৰ ই-মেইল ঠিকনা লিখক",
@@ -457,6 +466,7 @@
"createaccount-text": "আপোনাৰ ই-মেইল ঠিকনাৰ কাৰণে {{SITENAME}} ($4)ত \"$2\" নামৰ কোনোবাই, \"$3\" গুপ্তশব্দ দি সদস্যভুক্তি কৰিছে। অনুগ্ৰহ কৰি আপুনি প্ৰৱেশ কৰক আৰু গুপ্তশব্দটো সলনি কৰক।\n\nযদি এইয়া ভুলতে হৈছে, তেনেহলে আপুনি এই বাৰ্তাটো অবজ্ঞা কৰিব পাৰে ।",
"login-throttled": "আপুনি স‍ম্প্ৰতি অজস্ৰবাৰ লগ্‌-ইনৰ প্ৰয়াস কৰিছে ।\nঅনুগ্ৰহ কৰি $1 সময়ৰ পিছত আকৌ চেষ্টা কৰক ।",
"login-abort-generic": "আপোনাৰ প্ৰৱেশ অসফল হৈছে- বাতিল কৰা হ’ল",
+ "login-migrated-generic": "আপোনাৰ একাউণ্ট স্থানান্তৰিত কৰা হৈছে, আৰু আপোনাৰ ব্যৱহাৰকাৰী নাম এই ৱিকিত বৰ্তমান নাই।",
"loginlanguagelabel": "ভাষা: $1",
"suspicious-userlogout": "আপোনাৰ প্ৰস্থানৰ অনুৰোধ বাতিল কৰা হৈছে কাৰণ হয়তো আপোনাৰ ব্ৰাউজাৰ অসম্পূৰ্ণ নতুবা পূৰ্বৱতী তথ্য পঠিয়াইছে ।",
"createacct-another-realname-tip": "প্ৰকৃত নাম দিয়াটো বৈকল্পিক।\nআপুনি নামটো দিলে সেইটো আপোনাৰ বৰঙণিসমূহৰ বাবে স্বীকৃতি প্ৰদানত ব্যৱহাৰ কৰা হ'ব।",
@@ -507,7 +517,6 @@
"passwordreset-emailsent-capture": "এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে, এইখন তলত দেখা পাব।",
"passwordreset-emailerror-capture": "এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল সৃষ্টি কৰা হ'ল, কিন্তু {{GENDER:$2|সদস্যজনলৈ}} পঠিয়াব পৰা নগ'ল। সেইখন তলত দেখুওৱা হৈছে: $1",
"changeemail": "ই-মেইল ঠিকনা সলনি কৰক",
- "changeemail-header": "একাউণ্টৰ ই-মেইল ঠিকনা সলনি কৰক",
"changeemail-text": "আপোনাৰ ই-মেইল ঠিকনা সলাবলৈ এই প্ৰপত্ৰখন পূৰাওক । এই সালসলনি নিশ্চিত কৰিবলৈ আপোনাৰ গুপ্তশব্দ দিব লাগিব ।",
"changeemail-no-info": "এই পৃষ্ঠাটোত প্ৰৱেশাধিকাৰ পাবলৈ আপুনি লগ্‌ ইন কৰিব লাগিব।",
"changeemail-oldemail": "বৰ্তমানৰ ই-মেইল ঠিকনা:",
@@ -515,7 +524,6 @@
"changeemail-none": "(নাই)",
"changeemail-password": "আপোনাৰ {{SITENAME}} গুপ্তশব্দ:",
"changeemail-submit": "ই-মেইল ঠিকনা সলনি কৰক",
- "changeemail-cancel": "বাতিল কৰক",
"changeemail-throttled": "আপুনি স‍ম্প্ৰতি অজস্ৰবাৰ লগ্‌-ইনৰ প্ৰয়াস কৰিছে।\nঅনুগ্ৰহ কৰি $1 সময়ৰ পিছত আকৌ চেষ্টা কৰক।",
"resettokens": "ট'কেন ৰিছে'ট কৰক",
"resettokens-text": "আপোনাৰ একাউণ্টৰ সৈতে জড়িত কিছুমান ব্যক্তিগত তথ্য চাবলৈ আপুনি ট'কেন ৰিছে'ট কৰিব পাৰে।\n\nআপুনি দুৰ্ঘটনাবশতঃ আন কাৰোবাক সেই ট'কেন দিলে বা আপোনাৰ একাউণ্টৰ বিসংগতি হ'লে আপুনি এনে কৰাটো উচিত।",
@@ -551,9 +559,10 @@
"showpreview": "খচৰা চাওক",
"showdiff": "সালসলনিবোৰ দেখুৱাওক",
"blankarticle": "<strong>Warning:</strong>আপুনি সৃষ্টি কৰি থকা পৃষ্ঠাটো খালি।\nযদি আপুনি \"{{int:savearticle}}\" বুটামটোত আকৌ ক্লিক কৰে তেন্তে বিষয়বস্তু অবিহনেই পৃষ্ঠাটো সৃষ্টি হ'ব।",
- "anoneditwarning": "<span style=\"color:red;\">'''সাৱধান:''' আপুনি প্ৰৱেশ কৰা নাই ।</span> \nএই পৃষ্ঠাৰ ইতিহাসত আপোনাৰ আই পি ঠিকনা সংৰক্ষিত কৰা হ'ব।",
+ "anoneditwarning": "<strong>সতৰ্কবাণী:</strong> আপুনি প্ৰৱেশ কৰা নাই। আপুনি কোনো সম্পাদনা কৰিলে আপোনাৰ আই পি ঠিকনা মুকলিকৈ দৃশ্যমান হ'ব। যদি আপুনি <strong>[$1 লগ্‌ ইন]</strong> বা <strong>[$2 এটা একাউণ্ট সৃষ্টি কৰে]</strong>, তেন্তে আন সুবিধা পোৱাৰ লগতে আপোনাৰ সম্পাদনাসমূহ আপোনাৰ ব্যৱহাৰকাৰী নামত সংৰক্ষিত হ'ব।",
"anonpreviewwarning": "''আপুনি প্ৰৱেশ কৰা নাই। আপোনাৰ সম্পাদনা সাঁচিলে আপোনাৰ আই-পি ঠিকনা এই পৃষ্ঠাৰ ইতিহাসত সংৰক্ষিত হ'ব।\"",
"missingsummary": "'''স্মাৰক:''' আপুনি সম্পাদনা সাৰাংশ দিয়া নাই।\nআপুনি আৰু এবাৰ সংৰক্ষণৰ বাবে ক্লিক কৰিলে সাৰাংশৰ অবিহনে সংৰক্ষিত হব।",
+ "selfredirect": "<strong>সতৰ্কবাণী:</strong> আপুনি একেটা নামলৈকে এই পৃষ্ঠাটো পুনঃনিৰ্দেশ কৰিব বিচাৰিছে। আপুনি হয়তো পুনঃনিৰ্দেশৰ বাবে ভুল লক্ষ্য নিৰ্ধাৰণ কৰিছে, বা ভুল পৃষ্ঠা সম্পাদনা কৰিছে।\nআপুনি আকৌ \"{{int:savearticle}}\" ক্লিক কৰিলে পুনঃনিৰ্দেশটো সৃষ্টি হ'ব।",
"missingcommenttext": "অনুগ্ৰহ কৰি তলত মন্তব্য এটা দিয়ক।",
"missingcommentheader": "'''স্মাৰক:''' আপুনি এই মন্তব্যটোত শিৰোনামা দিয়া নাই।\nযদি আকৌ এবাৰ যদি \"{{int:savearticle}}\" টিপে, তেনেহলে সম্পাদনা শিৰোনামা অবিহনে সংৰক্ষিত হব।",
"summary-preview": "সাৰাংশৰ খচৰা:",
@@ -704,7 +713,7 @@
"history-feed-empty": "অনুৰোধ কৰা পৃষ্ঠাৰ কোনো অস্বিত্ব নাই।\nহয়তো ইয়াক বিলোপ কৰা হৈছে অথবা ইয়াৰ নাম সলনি কৰা হৈছে।\n[[Special:Search|সন্ধান]] ব্যৱহাৰ কৰি প্ৰাসংগিক পৃষ্ঠাসমূহ চাওক।",
"rev-deleted-comment": "(সম্পাদনা সাৰাংশ আঁতৰোৱা হ'ল)",
"rev-deleted-user": "(সদস্যনাম আঁতৰোৱা হ’ল)",
- "rev-deleted-event": "(অভিলেখ কাৰ্য আঁতৰোৱা হ'ল)",
+ "rev-deleted-event": "(ল'গ সবিশেষ আঁতৰোৱা হ'ল)",
"rev-deleted-user-contribs": "[সদস্যনাম বা আই-পি ঠিকনা আঁতৰোৱা হ'ল - সম্পাদনা বৰঙনিসমূহৰ পৰা আঁৰ কৰা হৈছে]",
"rev-deleted-text-permission": "পৃষ্ঠাৰ এই সংশোধনটি '''বিলোপ''' কৰা হ'ল ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অবলুপ্তি অভিলেখত]",
"rev-deleted-text-unhide": "পৃষ্ঠাখনৰ এই সংশোধনটো '''বিলোপ''' কৰা হৈছে | \nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অৱলুপ্তি অভিলেখত]।\nআপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।",
@@ -784,7 +793,6 @@
"mergehistory-same-destination": "উৎস আৰু গন্তব্য পৃষ্ঠা একে হ'ব নোৱাৰে",
"mergehistory-reason": "কাৰণ:",
"mergelog": "অভিলেখ একত্ৰীকৰণ",
- "pagemerge-logentry": "[[$1]] [[$2]]-ত মিলোৱা হ'ল (সংশোধনসমূহ $3-লৈ)",
"revertmerge": "একত্ৰীকৰণ বাতিল কৰক",
"mergelogpagetext": "এটা পৃষ্ঠাৰ ইতিহাস আন এখনৰ লগত কৰা একত্ৰীকৰণৰ সকলোতকৈ শেহতীয়া তালিকা তলত দিয়া হ’ল ।",
"history-title": "\"$1\" ৰ সংশোধনৰ ইতিহাস",
@@ -796,7 +804,7 @@
"showhideselectedversions": "নিৰ্বাচিত সংশোধনসমূহ দেখুৱাওক/আঁৰ কৰক",
"editundo": "পূৰ্ববত কৰক",
"diff-empty": "(কোনো পাৰ্থক্য নাই)",
- "diff-multi-sameuser": "একেজন সদস্যই কৰা ({{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1টা মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই",
+ "diff-multi-sameuser": "একেজন সদস্যই কৰা ({{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1 মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই)",
"diff-multi-otherusers": "{{PLURAL:$2|আন এজন সদস্যই|$2জন সদস্যই}} কৰা ({{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1টা মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই।",
"diff-multi-manyusers": "({{PLURAL:$2|এজনতকৈ|$2-জনতকৈ}} অধিক সদস্যৰ দ্বাৰা {{PLURAL:$1|এটা মধ্যৱৰ্তী সংশোধন|$1-টা মধ্যৱৰ্তী সংশোধন}} দেখুওৱা হোৱা নাই)",
"difference-missing-revision": "{{PLURAL:$2|এটা সংস্কৰণ|$2 সংস্কৰণসমূহৰ}} সংশোধনৰ পাৰ্থক্য ($1) {{PLURAL:$2| পোৱা নগ’ল}}।\n\n\nসাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন অভিলেখ] চালে অধিক তথ্য পাব।",
@@ -834,6 +842,7 @@
"searchrelated": "সম্পৰ্কিত",
"searchall": "সকলো",
"showingresults": "তলত #'''$2'''ৰ পৰা {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফল}} দেখুওৱা হৈছে।",
+ "search-showingresults": "{{PLURAL:$4|<strong>$3</strong>-ৰ <strong>$1</strong>টো ফলাফল|<strong>$3</strong>-ৰ <strong>$1 - $2</strong>টো ফলাফল}}",
"search-nonefound": "এই অনুসন্ধানৰ কোনো ফলাফল নাই ।",
"powersearch-legend": "শক্তিশালী সন্ধান",
"powersearch-ns": "নামস্থানবোৰত সন্ধান:",
@@ -1425,7 +1434,6 @@
"statistics": "পৰিসংখ্যা",
"statistics-header-pages": "পৃষ্ঠা পৰিসংখ্যা",
"statistics-header-edits": "পৰিসংখ্যা সম্পাদনা কৰক",
- "statistics-header-views": "পৰিসংখ্যা দেখুৱাওক",
"statistics-header-users": "ব্যৱহাৰকাৰীৰ পৰিসংখ্যা",
"statistics-header-hooks": "অন্য পৰিসংখ্যা",
"statistics-articles": "বিষয়বস্তুৰ পৃষ্ঠা",
@@ -1434,13 +1442,9 @@
"statistics-files": "আপল’ড কৰা ফাইলসমূহ",
"statistics-edits": "{{SITENAME}} স্থাপন কৰাৰেপৰা পৃষ্ঠা সম্পাদনাসমূহ",
"statistics-edits-average": "প্ৰতি পৃষ্ঠাৰ গড় সম্পাদনা",
- "statistics-views-total": "সৰ্বমুঠ প্ৰদৰ্শন",
- "statistics-views-total-desc": "অস্তিত্বহীন পৃষ্ঠা আৰু বিশেষ পৃষ্ঠাসমূহৰ দৰ্শন ইয়াত ভুক্ত নহয়",
- "statistics-views-peredit": "সম্পাদনা প্ৰতি দৰ্শন",
"statistics-users": "পঞ্জীভূত [[Special:ListUsers|সদস্যসমূহ]]",
"statistics-users-active": "সক্ৰিয় সদস্য",
"statistics-users-active-desc": "শেষ {{PLURAL:$1|দিনত|$1 দিনত}} কোনো কাম কৰা সদস্যসমূহ",
- "statistics-mostpopular": "সৰ্বোচ্চ দৰ্শন কৰা পৃষ্ঠাসমূহ",
"pageswithprop": "পৃষ্ঠা উপাদান সম্বলিত পৃষ্ঠাসমূহ",
"pageswithprop-legend": "পৃষ্ঠা উপাদান সম্বলিত পৃষ্ঠাসমূহ",
"pageswithprop-text": "বিশেষ পৃষ্ঠা উপাদান ব্যৱহাৰ কৰা পৃষ্ঠাসমূহ ইয়াত তালিকাভুক্ত কৰা হৈছে।",
@@ -1480,7 +1484,6 @@
"uncategorizedtemplates": "অশ্ৰেণীকৃত সাঁচসমূহ",
"unusedcategories": "অব্যৱহৃত শ্ৰেণীসমূহ",
"unusedimages": "অব্যৱহৃত ফাইলসমূহ",
- "popularpages": "জনপ্ৰিয় পৃষ্ঠাসমূহ",
"wantedcategories": "কাম্য শ্ৰেণীসমূহ",
"wantedpages": "কাম্য পৃষ্ঠাসমূহ",
"wantedpages-badtitle": "ফলাফল তালিকাত অবৈধ শিৰোনামা: $1",
@@ -1539,7 +1542,7 @@
"querypage-disabled": "কাৰ্য্যগত কাৰণত এই বিশেষ পৃষ্ঠাটো নিষ্ক্ৰিয় কৰা হৈছে।",
"booksources": "গ্ৰন্থৰ উৎস সমূহ",
"booksources-search-legend": "গ্ৰন্থ উৎস অনুসন্ধান",
- "booksources-go": "যাওক",
+ "booksources-search": "সন্ধান",
"booksources-text": "নতুন আৰু পুৰণি কিতাপ বেচা চাইটসমূহৰ সংযোগ তলত দিয়া হৈছে, তাত আপুনি বিচৰা কিতাপসমূহৰ বিষয়ে অধিক তথ্যও পাব পাৰে:",
"booksources-invalid-isbn": "আপুনি দিয়া ISBN সম্ভৱতঃ অবৈধ; মূল উৎসৰ পৰা তুলি লওঁতে হ’ব পৰা ভুলৰ বাবে পৰীক্ষা কৰক ।",
"specialloguserlabel": "প্ৰদৰ্শনকাৰী:",
@@ -1662,7 +1665,7 @@
"wlheader-enotif": "ইমেইল জাননী সক্ৰিয় কৰা হৈছে।",
"wlheader-showupdated": "আপোনাৰ শেষ পৰিদৰ্শনৰ পিছত সলনি হোৱা পৃষ্ঠাসমূহ '''গাঢ়''' আখৰত দেখুওৱা হৈছে।",
"wlnote": "তলত {{PLURAL:$1| হ'ল সৰ্বশেষ পৰিৱৰ্তন|হ'ল সৰ্বশেষ '''$1''' পৰিৱৰ্তনসমূহ}} সৰ্বশেষ {{PLURAL:$2|ঘন্টা|'''$2''' ঘন্টা}}, $3, $4 -ৰ হিচাপে।",
- "wlshowlast": "যোৱা $1 ঘণ্টা $2 দিন $3 চাওক",
+ "wlshowlast": "যোৱা $1 ঘণ্টা $2 দিন চাওক",
"watchlist-options": "লক্ষ্য-তালিকা পছন্দসমূহ",
"watching": "চকু দিয়া হৈছে.....",
"unwatching": "আঁতৰোৱা হৈ আছে.....",
@@ -1709,7 +1712,6 @@
"delete-toobig": "এই পৃষ্ঠাটোৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\n{{SITENAME}}ৰ আকস্মিক ক্ষতি ৰোধ কৰিবলৈ এনে পৃষ্ঠাৰ ইতিহাস বিলোপ কৰাত সীমাবদ্ধতা আৰোপ কৰা হৈছে ।",
"delete-warning-toobig": "এই পৃষ্ঠাখনৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\nইয়াক বিলোপ কৰিলে {{SITENAME}} ৰ তথ্যভঁৰালৰ কাৰ্য্যকাৰীতাত সমস্যা হ’ব পাৰে;\nসাৱধানেৰে আগ বাঢ়ক ।",
"rollback": "সম্পাদনা পূৰ্ববৎ কৰক",
- "rollback_short": "পূৰ্ববৎ কৰক",
"rollbacklink": "পূৰ্ববৎ কৰক",
"rollbacklinkcount": "$1 {{PLURAL:$1|সম্পাদনা|সম্পাদনাসমূহ}} পূৰ্বৱত কৰক",
"rollbacklinkcount-morethan": "$1 {{PLURAL:$1|সম্পাদনা|সম্পাদনাসমূহ}} পূৰ্বৱত কৰক",
@@ -1992,6 +1994,8 @@
"movenotallowedfile": "নথিখন স্থানান্তৰ কৰিবলৈ আপোনাৰ অনুমতি নাই ।",
"cant-move-user-page": "সদস্য পৃষ্ঠা স্থানান্তৰ কৰিবলৈ আপুনাৰ অনুমতি নাই (উপ-পৃষ্ঠাৰ বাহিৰে)।",
"cant-move-to-user-page": "সদস্যপৃষ্ঠালৈ কোনো পৃষ্ঠা স্থানান্তৰ কৰাৰ অনুমতি আপোনাৰ নাই (কেৱল সদস্য উপপৃষ্ঠাৰ বাহিৰে ) ।",
+ "cant-move-category-page": "শ্ৰেণী পৃষ্ঠা স্থানান্তৰ কৰিবলৈ আপোনাৰ অনুমতি নাই।",
+ "cant-move-to-category-page": "কোনো পৃষ্ঠাক শ্ৰেণী পৃষ্ঠালৈ স্থানান্তৰ কৰিবৰ বাবে আপোনাৰ অনুমতি নাই।",
"newtitle": "নতুন শিৰোনামালৈ:",
"move-watch": "এই পৃষ্ঠাটো লক্ষ্য কৰক",
"movepagebtn": "পৃষ্ঠাটো স্থানান্তৰ কৰক",
@@ -2123,18 +2127,14 @@
"import-rootpage-nosubpage": "মূল পৃষ্ঠাৰ \"$1\" নামস্থানে উপপৃষ্ঠা অনুমোদন নকৰে।",
"importlogpage": "আমদানিৰ অভিলেখ",
"importlogpagetext": "আন ৱিকিৰ পৰা সম্পাদনা ইতিহাসসহ প্ৰশাসনীয় পৃষ্ঠা আমদানি।",
- "import-logentry-upload": "নথি আপল'ডৰ মাধ্যমেৰে [[$1]] আমদানি কৰা হ'ল",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|টা সংশোধন|টা সংশোধন}}",
- "import-logentry-interwiki": "আন্তঃৱিকি-স্থানান্তৰিত $1",
"import-logentry-interwiki-detail": "$2ৱে কৰা $1 {{PLURAL:$1|টা সংশোধন|টা সংশোধন}}",
"javascripttest": "জাভাস্ক্ৰিপ্ট পৰীক্ষা।",
- "javascripttest-title": "$1 পৰীক্ষাসমূহ চলোৱা হৈছে",
"javascripttest-pagetext-noframework": "এই পৃষ্ঠাটো জাভাস্ক্ৰিপ্ট পৰীক্ষা চলোৱাৰ বাবে সংৰক্ষিত।",
"javascripttest-pagetext-unknownframework": "অজ্ঞাত সম্পৰীক্ষা ফ্ৰেমৱৰ্ক \"$1\"।",
"javascripttest-pagetext-frameworks": "অনুগ্ৰহ কৰি তলৰ যিকোনো এটা সম্পৰীক্ষা ফ্ৰেমৱৰ্ক বাছনি কৰক: $1",
"javascripttest-pagetext-skins": "পৰীক্ষা কৰিবলৈ আৱৰণ এখন বাছনি কৰক:",
"javascripttest-qunit-intro": "mediawiki.org-ত [$1 পৰীক্ষা নথিকৰণ] চাওক।",
- "javascripttest-qunit-heading": "মিডিয়াৱিকি জাভাস্ক্ৰিপ্ট QUnit পৰীক্ষা চুট",
"tooltip-pt-userpage": "আপোনাৰ সদস্য পৃষ্ঠা",
"tooltip-pt-anonuserpage": "যি আই.পি. ঠিকনাৰ পৰা আপুনি সম্পাদনা কৰিছে তাৰ সদস্য পৃষ্ঠা",
"tooltip-pt-mytalk": "আপোনাৰ আলোচনা পৃষ্ঠা",
@@ -2144,6 +2144,7 @@
"tooltip-pt-mycontris": "আপোনাৰ বৰঙণিৰ তালিকা",
"tooltip-pt-login": "বাধ্যতামূলক নহ'লেও প্ৰৱেশ কৰাটো বাঞ্চনীয়",
"tooltip-pt-logout": "প্ৰস্থান",
+ "tooltip-pt-createaccount": "আপোনাক এটা একাউণ্ট সৃষ্টি কৰি প্ৰৱেশ কৰিবলৈ অনুৰোধ জনোৱা হৈছে, কিন্তু এয়া বাধ্যতামূলক নহয়",
"tooltip-ca-talk": "সংশ্লিষ্ট প্ৰবন্ধ সম্পৰ্কীয় আলোচনা",
"tooltip-ca-edit": "আপুনি এই পৃষ্ঠাটো সালসলনি কৰিব পাৰে, অনুগ্ৰহ কৰি সালসলনি সাচী থোৱাৰ আগতে খচৰা চাই লব",
"tooltip-ca-addsection": "নতুন অনুচ্ছেদ আৰম্ভ কৰক",
@@ -2173,6 +2174,7 @@
"tooltip-feed-atom": "এই পৃষ্ঠাৰ বাবে এটম ভুক্তি",
"tooltip-t-contributions": "এই সদস্যজনৰ অৰিহনাসমূহৰ সূচী চাওক",
"tooltip-t-emailuser": "এই সদস্যজনলৈ ই-মেইল পঠাওক",
+ "tooltip-t-info": "এই পৃষ্ঠাৰ বিষয়ে অধিক তথ্য",
"tooltip-t-upload": "ফাইল আপল'ডৰ বাবে",
"tooltip-t-specialpages": "বিশেষ পৃষ্ঠাসমূহৰ সূচী",
"tooltip-t-print": "এই পৃষ্ঠাৰ ছপা উপযোগী সংস্কৰণ",
@@ -2234,7 +2236,6 @@
"pageinfo-robot-policy": "ৰ'ব'টৰ জৰিয়তে ইন্‌ডেক্সিং কৰা হৈছে",
"pageinfo-robot-index": "অনুমোদিত",
"pageinfo-robot-noindex": "অনুমোদন অগ্ৰাহ্য",
- "pageinfo-views": "দৰ্শনৰ সংখ্যা",
"pageinfo-watchers": "পৃষ্ঠা নিৰীক্ষকৰ সংখ্যা",
"pageinfo-few-watchers": "$1 {{PLURAL:$1|তকৈ কম নিৰীক্ষক}}",
"pageinfo-redirects-name": "এই পৃষ্ঠালৈ থকা পুনৰ্নিৰ্দেশৰ সংখ্যা",
@@ -2314,6 +2315,7 @@
"newimages-summary": "এই বিশেষ পৃষ্ঠাটোত শেহতীয়াকৈ আপল'ড কৰা ফাইলসমূহ দেখিব।",
"newimages-legend": "ছেকনী",
"newimages-label": "নথিৰ নাম (বা তাৰ এটা অংশ)",
+ "newimages-showbots": "ব'টৰ আপল'ড দেখুৱাওক",
"noimages": "চাবলৈ একো নাই ।",
"ilsubmit": "সন্ধান কৰক",
"bydate": "তাৰিখ অনুযায়ী",
@@ -2682,7 +2684,6 @@
"exif-urgency-low": "নিম্ন ($1)",
"exif-urgency-high": "উচ্চ ($1)",
"exif-urgency-other": "ব্যৱহাৰকাৰী-বিৱৰিত প্ৰাথমিকতা ($1)",
- "watchlistall2": "সকলো",
"namespacesall": "সকলোবোৰ",
"monthsall": "সকলো",
"confirmemail": "ই-মেইল ঠিকনা নিশ্চিত কৰক",
@@ -2765,7 +2766,6 @@
"watchlisttools-edit": "লক্ষ্য-তালিকা চাওক আৰু সম্পাদনা কৰক",
"watchlisttools-raw": "অশোধিত লক্ষ্য-তালিকা সম্পাদনা কৰক",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
- "unknown_extension_tag": "অজ্ঞাত এক্সটেনচন টেগ \"$1\"",
"duplicate-defaultsort": "'''সাৱধান!''' পূৰ্বনিৰ্ধাৰিত ক্ৰমসূচক \"$2\"-এ আগৰ ক্ৰমসূচক \"$1\"ক বিস্থাপিত কৰিছে।",
"version": "সংস্কৰণ",
"version-extensions": "ইন্‌ষ্টল কৰা এক্সটেনচনসমূহ",
@@ -2781,7 +2781,7 @@
"version-parser-function-hooks": "পাৰ্চাৰ ফাংচন হুকসমূহ",
"version-hook-name": "হুক নাম",
"version-hook-subscribedby": "চাবস্ক্ৰাইব কৰিছে",
- "version-version": "(সংস্কৰণ $1)",
+ "version-version": "($1)",
"version-license": "অনুজ্ঞাপত্ৰ",
"version-ext-license": "অনুজ্ঞাপত্ৰ",
"version-ext-colheader-name": "এক্সটেন্‌চন",
@@ -2921,20 +2921,22 @@
"logentry-rights-rights": "$1ৰ গোট সদস্যপদ $3ৰ পৰা $4লৈ $5 লৈ সলনি কৰা হ'ল",
"logentry-rights-rights-legacy": "$1-ৰ গোট সদস্যপদ $3-লৈ সলনি কৰা হ'ল",
"logentry-rights-autopromote": "$1ক $4ৰ পৰা $5লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত কৰা হ’ল",
+ "logentry-upload-upload": "$1 $3 {{GENDER:$2|আপল'ড কৰা হ'ল}}",
"rightsnone": "(নাই)",
+ "revdelete-summary": "সম্পাদনাৰ সাৰমৰ্ম",
+ "feedback-adding": "পৃষ্ঠাত প্ৰতিক্ৰিয়া যোগ কৰা হৈছে...",
+ "feedback-bugcheck": "অতি উত্তম! কেৱল পৰীক্ষা কৰক যে ই ইতিমধ্যে [$1 জ্ঞাত বাগসমূহ]ৰ এটা নহয়।",
+ "feedback-bugnew": "মই পৰীক্ষা কৰিলো। এটা নতুন বাগ সংবাদন কৰক",
"feedback-bugornote": "যদি আপুনি এটা কাৰিকৰী সমস্যাৰ বিৱৰণ দিবলৈ প্ৰস্তুত, অনুগ্ৰহ কৰি [$1 এটা বাগ ৰিপ'ৰ্ট কৰক]।\nনহ'লে আপুনি তলৰ সহজ ফৰ্ম ব্যৱহাৰ কৰিব পাৰিব। আপোনাৰ মন্তব্য আপোনাৰ সদস্যনাম আৰু আপুনি ব্যৱহাৰ কৰা ব্ৰাউজাৰৰ সৈতে \"[$3 $2]\" -পৃষ্ঠাত যোগ কৰা হ'ব।",
- "feedback-subject": "বিষয়:",
- "feedback-message": "বাৰ্তা:",
"feedback-cancel": "বাতিল কৰক",
- "feedback-submit": "প্ৰতিক্ৰিয়া জমা কৰক",
- "feedback-adding": "পৃষ্ঠাত প্ৰতিক্ৰিয়া যোগ কৰা হৈছে...",
+ "feedback-close": "কৰা হ’ল",
"feedback-error1": "ত্ৰুটি: এ.পি.আই.ৰ অজ্ঞাত ফলাফল",
"feedback-error2": "ত্ৰুটি: সম্পাদনা বিফল হৈছে",
"feedback-error3": "ত্ৰুটি: এ.পি.আই.ৰ কোনো সঁহাৰি নাই",
+ "feedback-message": "বাৰ্তা:",
+ "feedback-subject": "বিষয়:",
+ "feedback-submit": "দাখিল কৰক",
"feedback-thanks": "ধন্যবাদ ! আপোনাৰ প্ৰতিক্ৰিয়া \"[$2 $1]\" পৃষ্ঠাত প্ৰকাশ কৰা হৈছে।",
- "feedback-close": "কৰা হ’ল",
- "feedback-bugcheck": "অতি উত্তম! কেৱল পৰীক্ষা কৰক যে ই ইতিমধ্যে [$1 জ্ঞাত বাগসমূহ]ৰ এটা নহয়।",
- "feedback-bugnew": "মই পৰীক্ষা কৰিলো। এটা নতুন বাগ সংবাদন কৰক",
"searchsuggest-search": "সন্ধান কৰক",
"searchsuggest-containing": "যি আছে...",
"api-error-badaccess-groups": "এই ৱিকিত ফাইল আপল'ড কৰিবলৈ আপোনাৰ অনুমতি নাই।",
@@ -2990,7 +2992,7 @@
"expandtemplates": "সাঁচবোৰ বহলাওক",
"expand_templates_input": "পাঠ্য ভৰাওক",
"expand_templates_output": "ফলাফল",
- "expand_templates_ok": "ওকে",
+ "expand_templates_ok": "ঠিক আছে",
"expand_templates_remove_comments": "মন্তব্য গু়চাওক",
"expand_templates_preview": "খচৰা",
"pagelanguage": "পৃষ্ঠাৰ ভাষা নিৰ্বাচক",
@@ -3000,5 +3002,27 @@
"pagelang-select-lang": "ভাষা নিৰ্বাচন কৰক",
"right-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক",
"action-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক",
- "log-name-pagelang": "ভাষা পৰিৱৰ্তন ল'গ"
+ "log-name-pagelang": "ভাষা পৰিৱৰ্তন ল'গ",
+ "special-characters-group-latin": "লেটিন",
+ "special-characters-group-latinextended": "সম্প্ৰসাৰিত লেটিন",
+ "special-characters-group-ipa": "আইপিএ (IPA)",
+ "special-characters-group-symbols": "চিহ্নসমূহ",
+ "special-characters-group-greek": "গ্ৰীক",
+ "special-characters-group-cyrillic": "ছিৰিলিক",
+ "special-characters-group-arabic": "আৰবীক",
+ "special-characters-group-arabicextended": "সম্প্ৰসাৰিত আৰবীক",
+ "special-characters-group-persian": "ফাৰ্ছী",
+ "special-characters-group-hebrew": "হিব্ৰু",
+ "special-characters-group-bangla": "বাংলা",
+ "special-characters-group-tamil": "তামিল",
+ "special-characters-group-telugu": "তেলেগু",
+ "special-characters-group-sinhala": "সিংহলী",
+ "special-characters-group-gujarati": "গুজৰাটী",
+ "special-characters-group-devanagari": "দেবনাগৰী",
+ "special-characters-group-thai": "থাই",
+ "special-characters-group-lao": "লাও",
+ "special-characters-group-khmer": "খেমাৰ",
+ "special-characters-title-endash": "en দেছ্‌",
+ "special-characters-title-emdash": "em দেছ‌",
+ "special-characters-title-minus": "বিয়োগ চিন"
}
diff --git a/languages/i18n/ast.json b/languages/i18n/ast.json
index 2fe57e00..1b0c0899 100644
--- a/languages/i18n/ast.json
+++ b/languages/i18n/ast.json
@@ -10,7 +10,8 @@
"Xuacu",
"לערי ריינהארט",
"아라",
- "Fitoschido"
+ "Fitoschido",
+ "Macofe"
]
},
"tog-underline": "Sorrayar enllaces:",
@@ -38,7 +39,7 @@
"tog-shownumberswatching": "Amosar el númberu d'usuarios que tán vixilando la páxina",
"tog-oldsig": "Firma esistente:",
"tog-fancysig": "Tratar la firma como testu wiki (ensin enllaz automáticu)",
- "tog-uselivepreview": "Usar vista previa en tiempu real (experimental)",
+ "tog-uselivepreview": "Usar vista previa en tiempu real",
"tog-forceeditsummary": "Avisame cuando grabe col resume d'edición en blanco",
"tog-watchlisthideown": "Anubrir les mios ediciones na llista de siguimientu",
"tog-watchlisthidebots": "Anubrir les ediciones de bots na llista de siguimientu",
@@ -213,6 +214,7 @@
"otherlanguages": "N'otres llingües",
"redirectedfrom": "(Redirixío dende $1)",
"redirectpagesub": "Páxina de redireición",
+ "redirectto": "Redirixe a:",
"lastmodifiedat": "L'últimu cambiu d'esta páxina foi el $1, a les $2.",
"viewcount": "Esta páxina visitóse {{PLURAL:$1|una vegada|$1 vegaes}}.",
"protectedpage": "Páxina protexida",
@@ -225,6 +227,7 @@
"pool-queuefull": "La cola de trabayu ta enllena",
"pool-errorunknown": "Fallu desconocíu",
"pool-servererror": "El serviciu de contador de recursos compartíos nun ta disponible ($1).",
+ "poolcounter-usage-error": "Error d'usu: $1",
"aboutsite": "Tocante a {{SITENAME}}",
"aboutpage": "Project:Tocante a",
"copyright": "El conteníu ta disponible baxo los términos de la $1 si nun s'indica otra cosa.",
@@ -312,10 +315,13 @@
"readonly_lag": "La base de datos candóse automáticamente mentes los sirvidores de la base de datos esclava se sincronicen cola maestra",
"internalerror": "Fallu internu",
"internalerror_info": "Fallu internu: $1",
+ "internalerror-fatal-exception": "Escepción fatal de tipu «$1»",
"filecopyerror": "Nun se pudo copiar el ficheru «$1» como «$2».",
"filerenameerror": "Nun se pudo renomar el ficheru «$1» como «$2».",
"filedeleteerror": "Nun se pudo desaniciar el ficheru «$1».",
"directorycreateerror": "Nun se pudo crear el direutoriu «$1».",
+ "directoryreadonlyerror": "El direutoriu «$1» ye de sólo llectura.",
+ "directorynotreadableerror": "El direutoriu \"$1\" nun ye lleíble.",
"filenotfound": "Nun pudo atopase'l ficheru «$1».",
"unexpected": "Valor inesperáu: «$1»=«$2».",
"formerror": "Fallu: Nun se pudo unviar el formulariu.",
@@ -337,7 +343,8 @@
"viewsourcetext": "Pues ver y copiar la fonte d'esta páxina:",
"viewyourtext": "Pues ver y copiar la fonte de '''les tos ediciones''' d'esta páxina:",
"protectedinterface": "Esta páxina proporciona'l testu de la interfaz del software d'esta wiki, y ta candada pa torgar abusos.\nP'amestar o cambiar les traducciones de toles wikis, por favor usa [//translatewiki.net/translatewiki.net], el proyeutu de llocalización de MediaWiki.",
- "editinginterface": "'''Avisu:''' Tas editando una páxina que s'usa pa proporcionar el testu d'interfaz del programa.\nLos cambeos nesta páxina van afeutar l'apariencia de la interfaz pa otros usuarios d'esta wiki.\nP'amestar o camudar traducciones pa toles wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyeutu de traducción de MediaWiki.",
+ "editinginterface": "<strong>Avisu:</strong> Tas editando una páxina que s'usa pa proporcionar el testu de la interfaz del programa.\nLos cambeos nesta páxina afeutarán al aspeutu de la interfaz pa otros usuarios d'esta wiki.",
+ "translateinterface": "P'amestar o camudar les traducciones pa toles wikis, usa [//translatewiki.net/ translatewiki.net], el proyeutu de traducción de MediaWiki.",
"cascadeprotected": "Esta páxina ta protexida d'ediciones porque ta inxerta {{PLURAL:$1|na siguiente páxina, protexida|nes siguientes páxines, protexíes}} cola opción «en cascada» activada:\n$2",
"namespaceprotected": "Nun tienes permisu pa editar páxines nel espaciu de nomes '''$1'''.",
"customcssprotected": "Nun tienes permisu pa editar esta páxina CSS porque contién preferencies personales d'otru usuariu.",
@@ -394,6 +401,8 @@
"userlogin-resetlink": "¿Escaeció los datos d'accesu?",
"userlogin-resetpassword-link": "¿Escaeció la contraseña?",
"userlogin-helplink2": "Ayuda del aniciu de sesión",
+ "userlogin-loggedin": "Yá anició sesión como {{GENDER:$1|$1}}.\nUtilice'l formulariu de más abaxo p'aniciar sesión como otru usuariu.",
+ "userlogin-createanother": "Crear otra cuenta",
"createacct-emailrequired": "Direición de corréu electrónicu",
"createacct-emailoptional": "Direición de corréu electrónicu (opcional)",
"createacct-email-ph": "Escriba la so direición de corréu electrónicu",
@@ -455,6 +464,7 @@
"createaccount-text": "Daquién creó una cuenta cola to direición de corréu electrónicu en {{SITENAME}} ($4) col nome «$2», y cola contraseña «$3».\nAgora tendríes d'aniciar sesión y camudar la contraseña.\n\nPues escaecer esti mensaxe si esta cuenta creóse por error.",
"login-throttled": "Ficisti demasiaos intentos d'aniciu de sesión recientes.\nPor favor espera $1 enantes d'intentalo otra vuelta.",
"login-abort-generic": "Falló la identificación - Encaboxao",
+ "login-migrated-generic": "La to cuenta migróse ya'l to nome d'usuariu yá nun esiste nesta wiki.",
"loginlanguagelabel": "Llingua: $1",
"suspicious-userlogout": "La to solicitú de zarrar sesión refugose porque paez qu'unvióla un restolador frañíu o un proxy de caché.",
"createacct-another-realname-tip": "El nome real ye opcional.\nSi decide conseñalu, va usase p'atribuir el trabayu al usuariu.",
@@ -506,7 +516,6 @@
"passwordreset-emailsent-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo.",
"passwordreset-emailerror-capture": "Unvióse un corréu electrónicu pa reaniciar la contraseña, que s'amuesa abaxo, pero falló l'unviu {{GENDER:$2|al usuariu|a la usuaria}}: $1",
"changeemail": "Camudar la direición de corréu electrónicu",
- "changeemail-header": "Camudar la direición de corréu electrónicu de la cuenta",
"changeemail-text": "Rellena esti formulariu pa camudar la to direición de corréu electrónicu. Tendrás d'escribir la contraseña pa confirmar esti cambéu.",
"changeemail-no-info": "Tien d'aniciar sesión pa entrar direutamente a esta páxina.",
"changeemail-oldemail": "Direición de corréu electrónicu actual:",
@@ -514,7 +523,6 @@
"changeemail-none": "(nengún)",
"changeemail-password": "La to contraseña en {{SITENAME}}:",
"changeemail-submit": "Camudar el corréu electrónicu",
- "changeemail-cancel": "Encaboxar",
"changeemail-throttled": "Ficisti demasiaos intentos d'aniciu de sesión.\nPor favor espera $1 enantes d'intentalo otra vuelta.",
"resettokens": "Reaniciar los pases",
"resettokens-text": "Equí pue reaniciar los pases que permiten l'accesu a ciertos datos privaos asociaos cola so cuenta.\n\nTendría de facelo si los compartió con alguién de mou accidental o si la so cuenta quedó comprometida.",
@@ -552,9 +560,10 @@
"showpreview": "Amosar previsualización",
"showdiff": "Amosar cambeos",
"blankarticle": "<strong>Atención:</strong> La páxina que tas a piques de crear ta balera.\nSi vuelves a facer click en «{{int:savearticle}}», crearáse la páxina ensin conteníu dengún.",
- "anoneditwarning": "<strong>Avisu:</strong> Nun anició sesión.\nLa direición IP quedará grabada nel historial d'edición d'esta páxina.",
+ "anoneditwarning": "<strong>Avisu:</strong> Nun aniciasti sesión. La direición IP sedrá visible en público si faes dalguna edición. Si <strong>[$1 anicies sesión]</strong> o <strong>[$2 crees una cuenta]</strong>, les ediciones atribuiránse al to nome d'usuariu, xunto con otros beneficios.",
"anonpreviewwarning": "''Nun aniciasti sesión. Al guardar quedará rexistrada la to direición IP nel historial d'edición d'esta páxina.''",
"missingsummary": "'''Recordatoriu:''' Nun conseñasti un resume d'edición.\nSi calques nuevamente \"{{int:savearticle}}\", la to edición guardaráse ensin nengún resume.",
+ "selfredirect": "<strong>Atención:</strong> Tas redirixendo esta páxina a ella mesma.\nSeique conseñaras un oxetivu enquivocáu pa la redireición, o que teas editando una páxina enquivocada. Si vuelves a facer clic en «{{int:savearticle}}», crearáse la redireición de toles maneres.",
"missingcommenttext": "Por favor, escribi un comentariu abaxo.",
"missingcommentheader": "'''Recordatoriu:''' Nun conseñasti un asuntu/titular pa esti comentariu.\nSi calques nuevamente \"{{int:savearticle}}\", la to edición guardaráse ensin dengún.",
"summary-preview": "Vista previa del resume:",
@@ -653,6 +662,10 @@
"content-model-text": "testu simple",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Oxetu baleru",
+ "content-json-empty-array": "Matriz balera",
+ "duplicate-args-category": "Páxines con argumentos duplicaos nes llamaes a plantíes",
+ "duplicate-args-category-desc": "La páxina contién llamaes a plantíes qu'usen argumentos duplicaos, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Avisu:''' Esta páxina contién demasiaes llamaes costoses a funciones d'análisis sintáuticu.\n\nHabría tener menos de $2 {{PLURAL:$2|llamada|llamaes}}, y agora tien $1 {{PLURAL:$1|llamada|llamaes}}.",
"expensive-parserfunction-category": "Páxines con demasiaes llamaes costoses a funciones analítiques",
"post-expand-template-inclusion-warning": "'''Avisu:''' El tamañu de les plantíes incluyíes ye demasiao grande.\nDelles plantíes nun se van incluir.",
@@ -707,7 +720,7 @@
"history-feed-empty": "La páxina solicitada nun esiste.\nSeique fuera desaniciada de la wiki, o renomada.\nPrueba a [[Special:Search|buscar na wiki]] otres páxines nueves.",
"rev-deleted-comment": "(resume d'edición desaniciáu)",
"rev-deleted-user": "(nome d'usuariu desaniciáu)",
- "rev-deleted-event": "(aición del rexistru desaniciada)",
+ "rev-deleted-event": "(detalles del rexistru desaniciaos)",
"rev-deleted-user-contribs": "[nome d'usuariu o direición IP desaniciáu - ediciones anubríes en contribuciones]",
"rev-deleted-text-permission": "Esta revisión de la páxina se '''desanició'''.\nLos detalles s'alcuentren nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistru de desanicios].",
"rev-suppressed-text-permission": "Esta revisión de la páxina <strong>suprimióse</strong>.\nLos detalles s'alcuentren nel [{{fullurl:{{#Special:Log}}/supress|page={{FULLPAGENAMEE}}}} rexistru de supresiones].",
@@ -741,7 +754,7 @@
"revdelete-legend": "Establecer torgues de visibilidá",
"revdelete-hide-text": "Testu de la revisión",
"revdelete-hide-image": "Tapecer el conteníu del ficheru",
- "revdelete-hide-name": "Tapecer aición y oxetivu",
+ "revdelete-hide-name": "Tapecer el destín y los parámetros",
"revdelete-hide-comment": "Resume d'edición",
"revdelete-hide-user": "Nome del editor/Direición IP",
"revdelete-hide-restricted": "Desaniciar datos de los alministradores y d'otros",
@@ -795,7 +808,6 @@
"mergehistory-same-destination": "Les páxines d'orixe y destín nun puen ser la mesma",
"mergehistory-reason": "Motivu:",
"mergelog": "Rexistru de fusiones",
- "pagemerge-logentry": "[[$1]] foi fusionada en [[$2]] (hasta la revisión $3)",
"revertmerge": "Dixebrar",
"mergelogpagetext": "Abaxo amuésase una llista de les fusiones más recientes d'un historial de páxina con otru.",
"history-title": "Historial de revisiones de «$1»",
@@ -836,6 +848,7 @@
"search-result-category-size": "{{PLURAL:$1|1 miembru|$1 miembros}} ({{PLURAL:$2|1 subcategoría|$2 subcategories}}, {{PLURAL:$3|1 ficheru|$3 ficheros}})",
"search-redirect": "(redireición de $1)",
"search-section": "(seición $1)",
+ "search-category": "(categoría $1)",
"search-file-match": "(casa col conteníu del ficheru)",
"search-suggest": "Quixisti dicir: $1",
"search-interwiki-caption": "Proyeutos hermanos",
@@ -846,7 +859,7 @@
"searchall": "toos",
"showingresults": "Abaxo {{PLURAL:$1|amuésase '''un''' resultáu|amuésense '''$1''' resultaos}}, entamando col #'''$2'''.",
"showingresultsinrange": "Más abaxo s'{{PLURAL:$1|amuesa|amuesen}} fasta {{PLURAL:$1|<strong>1</strong> resultáu|<strong>$1</strong> resultaos}} nel rangu ente #<strong>$2</strong> y #<strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5|Resultáu '''$1''' de '''$3'''|Resultaos '''$1 - $2''' de '''$3'''}} pa '''$4'''",
+ "search-showingresults": "{{PLURAL:$4|Resultáu <strong>$1</strong> de <strong>$3</strong>|Resultaos <strong>$1 - $2</strong> de <strong>$3</strong>}}",
"search-nonefound": "Nun hebo resultaos que casaren cola consulta.",
"powersearch-legend": "Busca avanzada",
"powersearch-ns": "Buscar nos espacios de nome:",
@@ -869,6 +882,11 @@
"prefs-personal": "Perfil del usuariu",
"prefs-rc": "Cambios recientes",
"prefs-watchlist": "Llista de siguimientu",
+ "prefs-editwatchlist": "Editar la llista de siguimientu",
+ "prefs-editwatchlist-label": "Editar les entraes de la to llista de siguimientu:",
+ "prefs-editwatchlist-edit": "Ver y desaniciar los títulos de la to llista de siguimientu",
+ "prefs-editwatchlist-raw": "Editar la llista de siguimientu (ensin formatu)",
+ "prefs-editwatchlist-clear": "Llimpiar la to llista de siguimientu",
"prefs-watchlist-days": "Númberu de díes qu'amosar na llista de siguimientu:",
"prefs-watchlist-days-max": "Máximo $1 {{PLURAL:$1|día|díes}}",
"prefs-watchlist-edits": "Númberu máximu d'ediciones qu'amosar na llista de siguimientu espandida:",
@@ -938,7 +956,7 @@
"gender-female": "Ella edita páxines wiki",
"prefs-help-gender": "Configurar esta preferencia ye opcional. El software usa esti valor pa dirixise a ti y pa mentate a terceros col xéneru gramatical correchu.\nEsta información sedrá pública.",
"email": "Corréu",
- "prefs-help-realname": "El nome real ye opcional y si decides conseñalu va ser usáu p'atribuyite'l to trabayu.",
+ "prefs-help-realname": "El nome real ye opcional.\nSi se da, pue usase pa date reconocimientu pol to trabayu.",
"prefs-help-email": "La direición de corréu ye opcional, pero ye necesaria pa unviate una conseña nueva si escaeces la tuya.",
"prefs-help-email-others": "Tamién pues escoyer permitir qu'otres persones contauten contigo pela to páxina d'usuariu o la d'alderique ensin necesidá de revelar la to identidá.",
"prefs-help-email-required": "Necesítase una direición de corréu electrónicu.",
@@ -959,6 +977,7 @@
"prefs-tokenwatchlist": "Pase",
"prefs-diffs": "Diferencies",
"prefs-help-prefershttps": "Esta preferencia aplicaráse nel siguiente aniciu de sesión.",
+ "prefswarning-warning": "Ficisti cambios nes tos preferencies qu'inda nun se guardaron.\nSi abandones esta páxina ensin calcar \"$1\" les preferencies nun s'anovarán.",
"prefs-tabs-navigation-hint": "Gabitu: pue usar les tecles de flecha izquierda y drecha pa navegar peles llingüetes de la llista.",
"email-address-validity-valid": "La direición de corréu paez válida",
"email-address-validity-invalid": "Escribi una direición de corréu válida",
@@ -1044,6 +1063,7 @@
"right-protect": "Camudar los niveles de proteición y editar páxines protexíes en cascada",
"right-editprotected": "Editar les páxines protexíes como \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Editar les páxines protexíes como \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Editar el modelu de conteníu d'una páxina",
"right-editinterface": "Editar la interfaz d'usuariu",
"right-editusercssjs": "Editar los archivos CSS y JS d'otros usuarios",
"right-editusercss": "Editar los archivos CSS d'otros usuarios",
@@ -1071,6 +1091,7 @@
"right-override-export-depth": "Esportar páxines, incluyendo páxines enllazaes fasta una fondura de 5",
"right-sendemail": "Unviar corréu a otros usuarios",
"right-passwordreset": "Ver los correos de reestablecimientu de conseña",
+ "right-managechangetags": "Crear y desaniciar [[Special:Tags|etiquetes]] dende la base de datos",
"newuserlogpage": "Rexistru de creación d'usuarios",
"newuserlogpagetext": "Esti ye un rexistru de creación d'usuarios.",
"rightslog": "Rexistru de perfil d'usuariu",
@@ -1116,6 +1137,8 @@
"action-viewmywatchlist": "ver la llista de vixilancia propia",
"action-viewmyprivateinfo": "ver la so información privada",
"action-editmyprivateinfo": "editar la so información privada",
+ "action-editcontentmodel": "editar el modelu de conteníu d'una páxina",
+ "action-managechangetags": "crear y desaniciar etiquetes dende la base de datos",
"nchanges": "{{PLURAL:$1|un cambiu|$1 cambios}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dende la última visita}}",
"enhancedrc-history": "historial",
@@ -1186,9 +1209,9 @@
"uploaderror": "Error de xubida",
"upload-recreate-warning": "'''Avisu: Se desanició o treslladó un ficheru con esi nome.'''\n\nEquí s'ufre'l rexistru de desaniciu y treslláu d'esta páxina por comodidá:",
"uploadtext": "Usa'l formulariu de más abaxo pa xubir ficheros.\nPa ver o buscar ficheros xubíos previamente, vete a la [[Special:FileList|llista de ficheros xubíos]]. Les (re)xubíes tamién queden conseñaes nel [[Special:Log/upload|rexistru de xubíes]], y los desanicios nel [[Special:Log/delete|rexistru de desanicios]].\n\nPa incluir un ficheru nuna páxina, usa un enllaz con ún de los siguientes formatos:\n*<strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheru.jpg]]</nowiki></code></strong> pa usar la versión completa del ficheru\n*<strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheru.png|200px|thumb|left|testu alternativu]]</nowiki></code></strong> pa usar una versión de 200 píxeles d'anchu nun cuadru nel marxe izquierdu con «testu alternativu» como descripción\n*<strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Ficheru.ogg]]</nowiki></code></strong> pa enllazar al ficheru direutamente ensin amosalu",
- "upload-permitted": "Menes d'archivu permitíes: $1.",
- "upload-preferred": "Menes d'archivu preferíes: $1.",
- "upload-prohibited": "Menes d'archivu prohibíes: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tipu de ficheru permitíu|Tipos de ficheros permitíos}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipu de ficheru preferíu|Tipos de ficheros preferíos}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipu de ficheru torgáu|Tipos de ficheros torgaos}}: $1.",
"uploadlogpage": "Rexistru de xubíes",
"uploadlogpagetext": "Abaxo amuésase una llista de les xubíes d'archivos más recientes.\nMira la [[Special:NewFiles|galería d'archivos nuevos]] pa una güeyada más visual.",
"filename": "Nome del ficheru",
@@ -1447,7 +1470,6 @@
"statistics": "Estadístiques",
"statistics-header-pages": "Estadístiques de páxines",
"statistics-header-edits": "Estadístiques d'ediciones",
- "statistics-header-views": "Estadístiques de visites",
"statistics-header-users": "Estadístiques d'usuariu",
"statistics-header-hooks": "Otres estadístiques",
"statistics-articles": "Páxines de conteníu",
@@ -1456,13 +1478,9 @@
"statistics-files": "Archivos xubíos",
"statistics-edits": "Ediciones de páxines dende qu'entamó {{SITENAME}}",
"statistics-edits-average": "Media d'ediciones por páxina",
- "statistics-views-total": "Visites totales",
- "statistics-views-total-desc": "Nun s'incluyen les visites a les páxines inesistentes y especiales",
- "statistics-views-peredit": "Visites por edición",
"statistics-users": "[[Special:ListUsers|Usuarios]] rexistraos",
"statistics-users-active": "Usuarios activos",
"statistics-users-active-desc": "Usuarios que realizaron una aición {{PLURAL:$1|nel caberu día|nos caberos $1 díes}}",
- "statistics-mostpopular": "Páxines más vistes",
"pageswithprop": "Páxines con una propiedá de páxina",
"pageswithprop-legend": "Páxines con una propiedá de páxina",
"pageswithprop-text": "Esta páxina llista les páxines qu'usen una propiedá de páxina determinada.",
@@ -1503,9 +1521,9 @@
"uncategorizedtemplates": "Plantíes non categorizaes",
"unusedcategories": "Categoríes non usaes",
"unusedimages": "Imáxenes non usaes",
- "popularpages": "Páxines populares",
"wantedcategories": "Categoríes buscaes",
"wantedpages": "Páxines buscaes",
+ "wantedpages-summary": "Llista de páxines inesistentes con más enllaces a elles, escluyendo les páxines que sólo tienen redireiciones qu'enllacen con elles. Pa ver la llista de páxines inesistentes que tienen redireiciones qu'enllacen con elles, ver [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Títulu inválidu nel conxuntu de resultaos: $1",
"wantedfiles": "Archivos buscaos",
"wantedfiletext-cat": "Los ficheros siguientes tan usándose, pero nun esisten. Ye posible qu'apaezan ficheros de repositorios esternos ensin qu'esistan. Cualesquier falsu positivu tará <del>tacháu</del>. Amás, les páxines qu'inxerten ficheros que nun esisten apaecen na llista de [[:$1]].",
@@ -1565,9 +1583,11 @@
"pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
"suppress": "Güeyador",
"querypage-disabled": "Esta páxina especial ta desactivada por razones de rindimientu.",
+ "apihelp": "Ayuda de la API",
+ "apihelp-no-such-module": "Nun s'alcuentra'l módulu «$1».",
"booksources": "Fontes de llibros",
"booksources-search-legend": "Busca de fontes de llibros",
- "booksources-go": "Dir",
+ "booksources-search": "Buscar",
"booksources-text": "Esta ye una llista d'enllaces a otros sitios que vienden llibros nuevos y usaos, y que puen tener más información sobre los llibros que ta buscando:",
"booksources-invalid-isbn": "El códigu ISBN que puxisti nun paez que valga; mira que te vien copiáu de la fonte orixinal.",
"specialloguserlabel": "Fecho por:",
@@ -1703,7 +1723,7 @@
"wlheader-enotif": "La notificación per corréu electrónicu ta activada.",
"wlheader-showupdated": "Les páxines que camudaron dende que les visitasti anteriormente amuesense en '''negrina'''",
"wlnote": "Abaxo {{PLURAL:$1|tá'l caberu cambiu|tan los caberos <strong>$1</strong> cambios}} {{PLURAL:$2|na cabera hora|nes caberes <strong>$2</strong> hores}}, a día $3, a les $4.",
- "wlshowlast": "Amosar les últimes $1 hores $2 díes $3",
+ "wlshowlast": "Amosar les últimes $1 hores, los últimos $2 díes",
"watchlist-options": "Opciones de la llista de siguimientu",
"watching": "Vixilando...",
"unwatching": "Dexando de vixilar...",
@@ -1752,7 +1772,6 @@
"deleteprotected": "Nun pues desaniciar esta páxina porque ta protexida.",
"deleting-backlinks-warning": "'''Avisu:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que ta a piques de desaniciar.",
"rollback": "Revertir ediciones",
- "rollback_short": "Revertir",
"rollbacklink": "revertir",
"rollbacklinkcount": "revertir $1 {{PLURAL:$1|edición|ediciones}}",
"rollbacklinkcount-morethan": "revertir más de $1 {{PLURAL:$1|edición|ediciones}}",
@@ -1802,6 +1821,7 @@
"protect-othertime": "Otru periodu:",
"protect-othertime-op": "otru periodu",
"protect-existing-expiry": "Caducidá actual: $2, $3",
+ "protect-existing-expiry-infinity": "Tiempu de caducidá esistente: infinitu",
"protect-otherreason": "Motivu distintu/adicional:",
"protect-otherreason-op": "Otru motivu",
"protect-dropdown": "*Motivos comunes de proteición\n** Vandalismu escomanáu\n** Spamming escesivu\n** Guerra d'ediciones contraproducente\n** Páxina de tráficu altu",
@@ -1861,6 +1881,7 @@
"namespace": "Espaciu de nomes:",
"invert": "Invertir seleición",
"tooltip-invert": "Marca esta caxella p'anubrir los cambios de les páxines pertenecientes al espaciu de nomes seleicionáu (y al espaciu de nomes asociáu si se marcó)",
+ "tooltip-whatlinkshere-invert": "Marca esta caxella pa tapecer los enllaces de páxines que tean nel espaciu de nomes seleicionáu.",
"namespace_association": "Espaciu de nome asociáu",
"tooltip-namespace_association": "Marca esta caxella p'amestar tamién l'espaciu de nombres d'alderique o asuntu asociaos col espaciu de nomes seleicionáu",
"blanknamespace": "(Principal)",
@@ -1891,7 +1912,7 @@
"sp-contributions-newonly": "Amosar namái les ediciones que son creaciones de páxines",
"sp-contributions-submit": "Buscar",
"whatlinkshere": "Lo qu'enllaza equí",
- "whatlinkshere-title": "Páxines qu'enllacien a \"$1\"",
+ "whatlinkshere-title": "Páxines qu’enllacien a «$1»",
"whatlinkshere-page": "Páxina:",
"linkshere": "Les páxines siguientes enllacien a '''[[:$1]]''':",
"nolinkshere": "Nenguna páxina enllaza a '''[[:$1]]'''.",
@@ -1946,6 +1967,7 @@
"unblocked": "[[User:$1|$1]] desbloquióse.",
"unblocked-range": "$1 se desbloquió",
"unblocked-id": "Desaniciose'l bloquéu $1.",
+ "unblocked-ip": "Desbloquióse a [[Special:Contributions/$1|$1]].",
"blocklist": "Usuarios bloquiaos",
"ipblocklist": "Usuarios bloquiaos",
"ipblocklist-legend": "Atopar un usuariu bloquiáu",
@@ -2124,14 +2146,15 @@
"thumbnail-temp-create": "Nun se pudo crear el ficheru temporal de miniatura",
"thumbnail-dest-create": "Nun se pudo guardar la miniatura nel destín",
"thumbnail_invalid_params": "Parámetros de miniatura non válidos",
+ "thumbnail_toobigimagearea": "Ficheru con dimensiones mayores que $1",
"thumbnail_dest_directory": "Nun se pue crear el direutoriu de destín",
"thumbnail_image-type": "Triba d'imaxe ensin sofitu",
"thumbnail_gd-library": "Configuración incompleta de la biblioteca GD: falta la función $1",
"thumbnail_image-missing": "Paez que falta'l ficheru: $1",
"thumbnail_image-failure-limit": "Hebo demasiaos intentos recientes que fallaron ($1 o más) al representar esta miniatura. Vuelva a intentalo más sero.",
"import": "Importar páxines",
- "importinterwiki": "Importación treswiki",
- "import-interwiki-text": "Seleiciona una wiki y un títulu de páxina pa importar.\nLes feches de revisión y los nomes de los editores caltendránse.\nToles aiciones d'importación treswiki queden rexistraes nel [[Special:Log/import|rexistru d'importaciones]].",
+ "importinterwiki": "Importar d'otra wiki",
+ "import-interwiki-text": "Seleiciona una wiki y un títulu de páxina pa importar.\nVan caltenese les feches de revisión y los nomes de los editores.\nToles importaciones d'otres wikis queden rexistraes nel [[Special:Log/import|rexistru d'importaciones]].",
"import-interwiki-sourcewiki": "Wiki d'orixe:",
"import-interwiki-sourcepage": "Páxina d'orixe:",
"import-interwiki-history": "Copiar toles versiones d'historial d'esta páxina",
@@ -2151,7 +2174,7 @@
"importcantopen": "Nun se pudo abrir el ficheru d'importación",
"importbadinterwiki": "Enllaz interwiki incorreutu",
"importsuccess": "¡Importación finalizada!",
- "importnosources": "Nun se definió l'orixe de la importación treswiki y les xubíes direutes del historial tán deshabilitaes.",
+ "importnosources": "Nun se definieron wikis de onde importar y les xubíes direutes del historial tán desactivaes.",
"importnofile": "Nun se xubió nengún archivu d'importación.",
"importuploaderrorsize": "Falló la xubida del archivu d'importación. L'archivu ye más grande que'l tamañu permitíu de xubida.",
"importuploaderrorpartial": "Falló la xubida del archivu d'importación. L'archivu xubióse solo parcialmente.",
@@ -2180,13 +2203,12 @@
"import-logentry-interwiki": "treswikificada $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importaes}} dende $2",
"javascripttest": "Prueba de JavaScript",
- "javascripttest-title": "Executando pruebes de $1",
"javascripttest-pagetext-noframework": "Esta páxina ta acutada pa executar pruebes de javascript.",
"javascripttest-pagetext-unknownframework": "L'entornu de pruebes «$1» ye desconocíu.",
+ "javascripttest-pagetext-unknownaction": "Aición desconocida «$1».",
"javascripttest-pagetext-frameworks": "Escueyi un de los siguientes entornos de pruebes: $1",
"javascripttest-pagetext-skins": "Escueyi una apariencia pa executar les pruebes:",
"javascripttest-qunit-intro": "Ver la [$1 documentación de les pruebes] en mediawiki.org.",
- "javascripttest-qunit-heading": "Conxuntu de pruebes JavaScript QUnit de MediaWiki",
"tooltip-pt-userpage": "La to páxina d'usuariu",
"tooltip-pt-anonuserpage": "La páxina d'usuariu de la IP cola que tas editando",
"tooltip-pt-mytalk": "La to páxina d'alderique",
@@ -2196,6 +2218,7 @@
"tooltip-pt-mycontris": "Llista de les tos collaboraciones",
"tooltip-pt-login": "T'encamentamos que t'identifiques, anque nun ye obligatorio",
"tooltip-pt-logout": "Salir",
+ "tooltip-pt-createaccount": "Encamentámoste que crees una cuenta y qu'anicies sesión; sicasí, nun ye obligatorio",
"tooltip-ca-talk": "Alderique tocante al conteníu de la páxina",
"tooltip-ca-edit": "Pues editar esta páxina. Por favor usa'l botón de vista previa enantes de guardar los cambios.",
"tooltip-ca-addsection": "Emprima una seición nueva",
@@ -2225,6 +2248,7 @@
"tooltip-feed-atom": "Canal Atom pa esta páxina",
"tooltip-t-contributions": "Llista de collaboraciones d'esti usuariu",
"tooltip-t-emailuser": "Unvia un corréu a esti usuariu",
+ "tooltip-t-info": "Más información sobro esta páxina",
"tooltip-t-upload": "Xubir ficheros",
"tooltip-t-specialpages": "Llista de toles páxines especiales",
"tooltip-t-print": "Versión imprentable d'esta páxina",
@@ -2299,7 +2323,6 @@
"pageinfo-robot-policy": "Indexación por robots",
"pageinfo-robot-index": "Permitío",
"pageinfo-robot-noindex": "Torgao",
- "pageinfo-views": "Númberu de visites",
"pageinfo-watchers": "Númberu de vixilantes de la páxina",
"pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vixilante|vixilantes}}",
"pageinfo-redirects-name": "Númberu de redireiciones a esta páxina",
@@ -2751,7 +2774,6 @@
"exif-urgency-low": "Baxa ($1)",
"exif-urgency-high": "Alta ($1)",
"exif-urgency-other": "Prioridá definía pol usuariu ($1)",
- "watchlistall2": "too",
"namespacesall": "toos",
"monthsall": "toos",
"confirmemail": "Confirmar direición de corréu",
@@ -2839,9 +2861,9 @@
"watchlisttools-edit": "Ver y editar la llista de siguimientu",
"watchlisttools-raw": "Editar la llista de siguimientu (ensin formatu)",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|alderique]])",
- "unknown_extension_tag": "Etiqueta d'estensión \"$1\" desconocida",
"duplicate-defaultsort": "Avisu: La clave d'ordenación predeterminada \"$2\" anula la clave d'ordenación anterior \"$1\".",
"duplicate-displaytitle": "<strong>Avisu:</strong> El títulu a amosar \"$2\" anula el títulu anterior \"$1\".",
+ "invalid-indicator-name": "<strong>Error:</strong> L'atributu <code>name</code> de los indicadores d'estáu de la páxina nun pue tar baleru.",
"version": "Versión",
"version-extensions": "Estensiones instalaes",
"version-skins": "Temes instalaos",
@@ -2856,7 +2878,7 @@
"version-parser-function-hooks": "Hooks de les funciones d'análisis sintáuticu",
"version-hook-name": "Nome del hook",
"version-hook-subscribedby": "Suscritu por",
- "version-version": "(Versión $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[ensin nome]",
"version-license": "Llicencia de MediaWiki",
"version-ext-license": "Llicencia",
@@ -2881,6 +2903,9 @@
"version-entrypoints": "URLs del puntu d'entrada",
"version-entrypoints-header-entrypoint": "Puntu d'entrada",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Biblioteques instalaes",
+ "version-libraries-library": "Biblioteca",
+ "version-libraries-version": "Versión",
"redirect": "Redireición por ficheru, usuariu, páxina o ID de revisión",
"redirect-legend": "Redirixir a un ficheru o una páxina",
"redirect-summary": "Esta páxina especial redirixe a un ficheru (dando'l so nome), una páxina (dando una ID de revisión o de páxina) o una páxina d'usuariu (dando un númberu d'ID d'usuariu). Usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
@@ -2916,6 +2941,7 @@
"specialpages-group-wiki": "Datos y ferramientes",
"specialpages-group-redirects": "Páxines especiales de redireición",
"specialpages-group-spam": "Ferramientes pa spam",
+ "specialpages-group-developer": "Ferramientes pa desendolcadores",
"blankpage": "Páxina en blanco",
"intentionallyblankpage": "Esta páxina ta en blanco arrémente",
"external_image_whitelist": "#Dexa esta llinia exautamente como ta<pre>\n#Pon los fragmentos d'espresiones regulares (namái la parte que va ente les //) debaxo\n#Esto va ser comprobao coles URLs d'imáxenes esternes (hotlinked)\n#Les que concuayen se van amosar como imáxenes; si nun concuayen, namái se va amosar un enllaz a la imaxe\n#Les llinies qu'emprimen con # se traten como comentarios\n#Esto nun ye sensible a la capitalización\n\n#Pon tolos fragmentos regex enantes d'esta llinia. Dexa esta llinia exautamente como ta</pre>",
@@ -2928,12 +2954,46 @@
"tags-tag": "Nome d'etiqueta",
"tags-display-header": "Aspeutu nes llistes de cambios",
"tags-description-header": "Descripción completa del significáu",
+ "tags-source-header": "Fonte",
"tags-active-header": "¿Activu?",
"tags-hitcount-header": "Cambios etiquetaos",
+ "tags-actions-header": "Aiciones",
"tags-active-yes": "Sí",
"tags-active-no": "Non",
+ "tags-source-extension": "Definida por una estensión",
+ "tags-source-manual": "Aplicada a mano polos usuarios y bots",
+ "tags-source-none": "Yá nun s'usa",
"tags-edit": "editar",
+ "tags-delete": "desaniciar",
+ "tags-activate": "activar",
+ "tags-deactivate": "desactivar",
"tags-hitcount": "$1 {{PLURAL:$1|cambiu|cambios}}",
+ "tags-manage-no-permission": "Nun tienes permisu p'alministrar etiquetes de cambiu.",
+ "tags-create-heading": "Crear una etiqueta nueva",
+ "tags-create-explanation": "De mou predetermináu, les etiquetes nueves que se creen tarán disponibles pa que les usen los usuarios y bots.",
+ "tags-create-tag-name": "Nome de la etiqueta:",
+ "tags-create-reason": "Motivu:",
+ "tags-create-submit": "Crear",
+ "tags-create-no-name": "Tienes d'especificar un nome d'etiqueta.",
+ "tags-create-invalid-chars": "Los nomes d'etiqueta nun tienen de contener comes (<code>,</code>) o barres (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Los nomes d'etiqueta nun puen contener caráuteres que nun puedan usase nos títulos de páxina",
+ "tags-create-already-exists": "La etiqueta «$1» yá esiste.",
+ "tags-create-warnings-above": "{{PLURAL:$2|Alcontróse'l siguiente avisu|Alcontráronse los siguientes avisos}} al intentar crear la etiqueta «$1»:",
+ "tags-create-warnings-below": "¿Quies siguir creando de la etiqueta?",
+ "tags-delete-title": "Desaniciar etiqueta",
+ "tags-delete-explanation-initial": "Tas a piques de desaniciar la etiqueta «$1» de la base de datos.",
+ "tags-delete-explanation-in-use": "Desaniciaráse de {{PLURAL:$2|la revisión o entrada|les $2 revisiones y/o entraes}} del rexistru a {{PLURAL:$2|la|les}} que s'aplica actualmente.",
+ "tags-delete-explanation-warning": "Esta aición ye <strong>irreversible</strong> y <strong>nun podrán desfacela</strong> siquiera los alministradores de la base de datos. Confirma qu'esta ye la etiqueta que quies desaniciar.",
+ "tags-delete-explanation-active": "<strong>La etiqueta «$1» sigue activa y siguirá aplicándose nel futuru.</strong> Pa que dexe d'asoceder, vete al llugar(es) onde ta configurada la aplicación d'esta etiqueta y desactívala allí.",
+ "tags-delete-reason": "Motivu:",
+ "tags-delete-submit": "Desaniciar esta etiqueta de mou irreversible",
+ "tags-delete-not-allowed": "Les etiquetes definíes por una estensión nun puen desaniciase mentanto la estensión nun lo permita específicamente.",
+ "tags-delete-not-found": "La etiqueta «$1» nun esiste.",
+ "tags-activate-reason": "Motivu:",
+ "tags-activate-submit": "Activar",
+ "tags-deactivate-title": "Desactivar etiqueta",
+ "tags-deactivate-reason": "Motivu:",
+ "tags-deactivate-submit": "Desactivar",
"comparepages": "Comparar páxines",
"compare-page1": "Páxina 1",
"compare-page2": "Páxina 2",
@@ -2945,8 +3005,8 @@
"compare-revision-not-exists": "La revisión que conseñasti nun esiste.",
"dberr-problems": "¡Sentímoslo! Esti sitiu ta esperimentando dificultaes téuniques.",
"dberr-again": "Tenta esperar dellos minutos y recargar.",
- "dberr-info": "(Nun se pue contautar cola base de datos del sirvidor: $1)",
- "dberr-info-hidden": "(Nun se pue comunicar col sirvidor de base de datos)",
+ "dberr-info": "(Nun se pue entrar na base de datos: $1)",
+ "dberr-info-hidden": "(Nun se pue entrar na 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.",
@@ -2987,6 +3047,8 @@
"revdelete-uname-unhid": "nome d'usuariu non anubríu",
"revdelete-restricted": "aplicaes les restricciones a los alministradores",
"revdelete-unrestricted": "eliminaes les restricciones a los alministradores",
+ "logentry-block-block": "$1 {{GENDER:$2|bloquió}} a {{GENDER:$4|$3}} con un tiempu de duración de $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|desbloquió a}} {{GENDER:$4|$3}}",
"logentry-move-move": "$1 {{GENDER:$2|treslladó}} la páxina \"$3\" a \"$4\"",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|treslladó}} la páxina \"$3\" a \"$4\" ensin dexar una redireición",
"logentry-move-move_redir": "$1 {{GENDER:$2|treslladó}} la páxina \"$3\" a \"$4\" sobre una redireición",
@@ -3005,19 +3067,20 @@
"logentry-upload-overwrite": "$1 {{GENDER:$2|xubió}} una versión nueva de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|xubió}} $3",
"rightsnone": "(nengún)",
+ "revdelete-summary": "editar resume",
+ "feedback-adding": "Amestando el comentariu a la páxina...",
+ "feedback-bugcheck": "¡Perfeuto! Comprueba que nun tea yá ente los [$1 fallos conocíos].",
+ "feedback-bugnew": "Yá lo comprobé. Informar d'esti fallu nuevu",
"feedback-bugornote": "Si tas preparáu pa describir un problema técnicu en detalle, [$1 informa del fallu].\nD'otra miente, pues usar el formulariu cenciellu d'abaxo. El to comentariu apaecerá na páxina \"[$3 $2]\" xunto col to nome d'usuariu y el restolador qu'uses.",
- "feedback-subject": "Asuntu:",
- "feedback-message": "Mensaxe:",
"feedback-cancel": "Encaboxar",
- "feedback-submit": "Unviar comentarios",
- "feedback-adding": "Amestando el comentariu a la páxina...",
+ "feedback-close": "Fecho",
"feedback-error1": "Fallu: Resultáu de la API non reconocíu",
"feedback-error2": "Fallu: Falló la edición",
"feedback-error3": "Fallu: Ensin respuesta de la API",
+ "feedback-message": "Mensaxe:",
+ "feedback-subject": "Asuntu:",
+ "feedback-submit": "Unviar",
"feedback-thanks": "¡Gracies! La to opinión s'espublizó na páxina «[$2 $1]».",
- "feedback-close": "Fecho",
- "feedback-bugcheck": "¡Perfeuto! Comprueba que nun tea yá ente los [$1 fallos conocíos].",
- "feedback-bugnew": "Yá lo comprobé. Informar d'esti fallu nuevu",
"searchsuggest-search": "Buscar",
"searchsuggest-containing": "que contién...",
"api-error-badaccess-groups": "Nun tienes permisu pa xubir ficheros a esta wiki.",
@@ -3107,8 +3170,36 @@
"log-name-pagelang": "Rexistru de cambios de llingua",
"log-description-pagelang": "Esti ye un rexistru de los cambios de llingua de les páxines.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} la llingua de la páxina $3 del $4 al $5.",
- "default-skin-not-found": "¡Coime! L'aspeutu predetermináu pa la to wiki (<code>$wgDefaultSkin</code>), <code>$1</code> nun ta disponible.\n\nLa to instalación paez qu'incluye los siguientes aspeutos. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activalos y escoyer el predetermináu.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code>skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar les llinies siguientes en <code>LocalSettings.php</code> p'activar tolos aspeutos instalaos actualmente:\n\n<pre>$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
- "default-skin-not-found-no-skins": "¡Coime! L'aspeutu predetermináu pa la to wiki (<code>$wgDefaultSkin</code>), <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code>skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
+ "default-skin-not-found": "¡Vaya! L'aspeutu predetermináu pa la to wiki, definíu en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nLa instalación paez qu'incluye los siguientes aspeutos. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activalos y escoyer el predetermináu.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o direutamente'l códigu fonte usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar les llinies siguientes en <code>LocalSettings.php</code> p'activar tolos aspeutos instalaos actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
+ "default-skin-not-found-no-skins": "L'aspeutu predetermináu pa la to wiki, definíu en <code>$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando unu de los direutorios <code>mediawiki/skins/*</code> via git nel direutoriu <code dir=\"ltr\">skins/</code> de la to instalación de MediaWiki.\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activáu)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactiváu''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactiváu''')",
+ "mediastatistics": "Estadístiques de multimedia",
+ "mediastatistics-summary": "Estadístiques sobro los tipos de ficheros xubíos. Esto sólo incluye la versión más nueva d'un ficheru. Escluyense les versiones antigües o desaniciaes de los ficheros.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tipu MIME",
+ "mediastatistics-table-extensions": "Estensiones posibles",
+ "mediastatistics-table-count": "Númberu de ficheros",
+ "mediastatistics-table-totalbytes": "Tamañu combináu",
+ "mediastatistics-header-unknown": "Desconocíu",
+ "mediastatistics-header-bitmap": "Imaxes de mapa de bits",
+ "mediastatistics-header-drawing": "Dibuxos (imaxes vectoriales)",
+ "mediastatistics-header-audio": "Soníu",
+ "mediastatistics-header-video": "Videos",
+ "mediastatistics-header-multimedia": "Multimedia enriquecida",
+ "mediastatistics-header-office": "Oficina",
+ "mediastatistics-header-text": "Testual",
+ "mediastatistics-header-executable": "Executables",
+ "mediastatistics-header-archive": "Formatos comprimíos",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|coma al final desanicióse|comes al final desaniciáronse}} de JSON",
+ "json-error-unknown": "Hebo un problema col JSON. Error: $1",
+ "json-error-depth": "Pasóse de la fondura máxima de la pila",
+ "json-error-state-mismatch": "JSON inválidu o incorreutu",
+ "json-error-ctrl-char": "Error de caráuter de control, seique codificáu incorreutamente",
+ "json-error-syntax": "Error de sintaxis",
+ "json-error-utf8": "Carauteres UTF-8 con errores de formatu, seique codificaos incorreutamente",
+ "json-error-recursion": "Una o más referencies recursives nel valor a codificar",
+ "json-error-inf-or-nan": "Unu o más valores NAN (númberu nun conseñáu) o INF (infinitu) nel valor a codificar",
+ "json-error-unsupported-type": "Diose un valor d'un tipu que nun pue codificase",
+ "headline-anchor-title": "Enllaz a esta sección"
}
diff --git a/languages/i18n/av.json b/languages/i18n/av.json
index 249d6a1f..2bacf2ad 100644
--- a/languages/i18n/av.json
+++ b/languages/i18n/av.json
@@ -1,79 +1,316 @@
{
- "@metadata": {
- "authors": [
- "Amikeco",
- "Amire80",
- "MF-Warburg",
- "MONARCH79",
- "Phoebe",
- "Умар"
- ]
- },
- "sunday": "ГьатӀан",
- "monday": "Итни",
- "tuesday": "Талат",
- "wednesday": "АрбагӀ",
- "thursday": "Хамиз",
- "friday": "Рузман",
- "saturday": "Шаммат",
- "mytalk": "Дур бахlс",
- "and": "&#32;ва",
- "vector-view-edit": "Хисизабизе",
- "errorpagetitle": "Гъалатl",
- "help": "Кумек",
- "history": "Хиса-басазул тарих",
- "printableversion": "КутӀизе версия",
- "permalink": "Кидаго букӀунеб рехсей",
- "edit": "Хисизабе",
- "talkpage": "Гьумералда тlасан бахlс",
- "talk": "Бахlс",
- "toolbox": "Алатал",
- "userpage": "ГӀахьалчиясул гьумер",
- "otherlanguages": "Цойги мацӀазда",
- "currentevents": "Жакъасел лъугьа-бахъинал",
- "mainpage": "БетӀераб гьумер",
- "mainpage-description": "БетӀераб гьумер",
- "portal": "Майдан",
- "portal-url": "Project:Майдан",
- "editsection": "хисизабизе",
- "nstab-help": "Кумек",
- "error": "Гъалатl",
- "internalerror": "Жанисеб гъалатl",
- "viewsource": "Код бихьи",
- "userlogin": "ЦIар бице",
- "userlogout": "Къватlиве лъугьине",
- "savearticle": "Хъвай-хъвай цӀунизе",
- "preferences": "Рекъезаби",
- "localtime": "Бакlалъул заман",
- "userrights-user-editname": "ГӀахьалчиясул цӀар хъвай:",
- "recentchanges": "ЦӀиял хиса-басал",
- "rcshowhideminor": "$1 гӀиси-микъинал хиса-басал",
- "rcshowhidebots": "$1 бот",
- "rcshowhideliu": "$1 цӀар рагьарал гӀахьалчагӀи",
- "rcshowhideanons": "$1 цӀаргьечӀ",
- "rcshowhidemine": "$1 дир хиса-басал",
- "diff": "батӀалъи",
- "hide": "Бахчизе",
- "show": "Бихьизабизе",
- "minoreditletter": "гӀ.-м.",
- "newpageletter": "ЦӀ",
- "recentchangeslinked": "Рухьарал хиса-басиял",
- "recentchangeslinked-feed": "Рухьарал хиса-басиял",
- "recentchangeslinked-toolbox": "Рухьарал хиса-басиял",
- "uploadnologin": "Дуца цӀар бицун гьечӀо",
- "randompage": "Цебе ккараб гьумер",
- "shortpages": "Къокъал макъалаби",
- "longpages": "Кlудиял гьумерал",
- "listusers": "Гlахьалчагlазул сияхl",
- "specialloguserlabel": "ГӀахьалчи:",
- "allarticles": "Киналго макъалаби",
- "watchlist": "Дур халгьабиялъул сияхl",
- "watch": "хал гьабизе",
- "contributions": "ГӀахьалчиясул хӀалтӀи",
- "mycontris": "Дур гlахьаллъи",
- "whatlinkshere": "Рехсей гьанибе",
- "move-page-legend": "Гьумералъул цlар хисизе",
- "movearticle": "Гьумералъул цӀар хисизе",
- "movepagebtn": "Гьумералъул цlар хисизе",
- "specialpages": "Хассал гьумерал"
+ "@metadata": {
+ "authors": [
+ "Amikeco",
+ "Amire80",
+ "MF-Warburg",
+ "MONARCH79",
+ "Phoebe",
+ "Умар",
+ "Gazimagomedov",
+ "Kaganer",
+ "Аль-Гимравий"
+ ]
+ },
+ "tog-underline": "Линкал гъоркьмухъизе",
+ "tog-hideminor": "ЧIахIиял хиса-басиязул сияхIалда дагьа-макъал хиса-басиял рахчизе",
+ "tog-showtoolbar": "Хиса-басиял гьарулеб мехалда тIасияб алатазул панель бихьизабизе",
+ "tog-editondblclick": "КIиго щелчоказдалъун гьемералъул хиса-баси гьабизе",
+ "tog-oldsig": "Гьанжесеб гъулбас",
+ "underline-always": "Кидаго",
+ "underline-never": "Киданиги",
+ "sunday": "ГьатӀан",
+ "monday": "Итни",
+ "tuesday": "Талат",
+ "wednesday": "АрбагӀ",
+ "thursday": "Хамиз",
+ "friday": "Рузман",
+ "saturday": "Шаммат",
+ "sun": "ГьатI",
+ "mon": "Итн",
+ "tue": "Тал",
+ "wed": "Арб",
+ "thu": "Хам",
+ "fri": "Руз",
+ "sat": "Шам",
+ "january": "Январ",
+ "february": "Феврал",
+ "march": "Март",
+ "april": "Апрел",
+ "may_long": "Май",
+ "june": "Июн",
+ "july": "Июл",
+ "august": "Август",
+ "september": "Сентябр",
+ "october": "Октябр",
+ "november": "Ноябр",
+ "december": "Декабр",
+ "january-gen": "Январ",
+ "february-gen": "Феврал",
+ "march-gen": "Март",
+ "april-gen": "Апрел",
+ "may-gen": "Май",
+ "june-gen": "Июн",
+ "july-gen": "Июл",
+ "august-gen": "Август",
+ "september-gen": "Сентябр",
+ "october-gen": "Октябр",
+ "november-gen": "Ноябр",
+ "december-gen": "Декабр",
+ "jan": "Янв",
+ "feb": "Фев",
+ "mar": "Мар",
+ "apr": "Апр",
+ "may": "Май",
+ "jun": "Июн",
+ "jul": "Июл",
+ "aug": "Авг",
+ "sep": "Сен",
+ "oct": "Окт",
+ "nov": "Ноя",
+ "dec": "Дек",
+ "january-date": "Январ $1",
+ "february-date": "Феврал $1",
+ "march-date": "Март $1",
+ "april-date": "Апрел $1",
+ "may-date": "Май $1",
+ "june-date": "Июн $1",
+ "july-date": "Июл $1",
+ "august-date": "Август $1",
+ "september-date": "Сентябр $1",
+ "october-date": "Октябр $1",
+ "november-date": "Ноябр $1",
+ "december-date": "Декабр $1",
+ "pagecategories": "{{PLURAL:$1|1=Категория|Категориял}}",
+ "category_header": "Категориялда «$1» гьумер",
+ "subcategories": "Подкатегориял",
+ "category-media-header": "Категориялда «$1» файл",
+ "category-empty": "\"ГьабсагIаталъ гьаб категория чIобого буго.\"",
+ "hidden-categories": "{{PLURAL:$1|1=Бахчараб категория|Рахчарал категориял}}",
+ "hidden-category-category": "Рахчарал категориял",
+ "listingcontinuesabbrev": "(жеги)",
+ "about": "Программаялъул хIакъалъулъ",
+ "cancel": "НахъчIвазе",
+ "moredotdotdot": "Жеги...",
+ "morenotlisted": "Гьаб сияхI цIураб гьечIо",
+ "mypage": "Гьумер",
+ "mytalk": "Бахlс",
+ "navigation": "Навигация",
+ "and": "&#32;ва",
+ "qbfind": "ЦIехезе",
+ "qbbrowse": "Балагьизе",
+ "qbedit": "Хисизабизе",
+ "qbpageoptions": "Гьемералъул рекъезаби",
+ "qbmyoptions": "Дур рекъезаби",
+ "faq": "FAQ",
+ "errorpagetitle": "Гъалатl",
+ "tagline": "{{grammar:genitive|{{SITENAME}}}} сайталдасан материал",
+ "help": "Кумек",
+ "search": "ЦIехезе",
+ "searchbutton": "ЦIехезе",
+ "go": "Ине",
+ "searcharticle": "Ине",
+ "history": "Хиса-басазул тарих",
+ "history_short": "Тарих",
+ "printableversion": "КутӀизе версия",
+ "permalink": "Кидагояб линк",
+ "print": "КIутIизе",
+ "view": "Балагьи",
+ "view-foreign": "$1 сайталда балагьизе",
+ "edit": "Хисизабизе",
+ "create": "Гьабизе",
+ "editthispage": "Гьаб гьубер хисизабизе",
+ "create-this-page": "Гьаб гьаб гьумер гьабизе",
+ "delete": "БацIцIине",
+ "deletethispage": "Гьаб гьумер бацIине",
+ "undeletethispage": "Гьаб гьумер цӀигьабизе",
+ "undelete_short": "{{PLURAL:$1|$1 хиса-баси|1=Хиса-баси}} цӀигьабизе",
+ "viewdeleted_short": "{{PLURAL:$1|$1 бацӀцӀараб хиса-баси|$1 рацӀцӀарал хиса-басиязда|бацӀцӀараб хиса-баси}} балагьизе",
+ "protect": "Хиса-басияздасан цIунизе",
+ "protect_change": "хисизе",
+ "unprotect": "ЦӀуни хисизе",
+ "unprotectthispage": "Гьаб гьумералъул цӀуни хисизабизе",
+ "newpage": "ЦIияб гьумер",
+ "talkpage": "БахӀс",
+ "talkpagelinktext": "Бахlс",
+ "specialpage": "Хъулухъияб гьумер",
+ "personaltools": "Дур алатал",
+ "articlepage": "Балагьизе макъалаялда",
+ "talk": "Бахlс",
+ "views": "Балагьиял",
+ "toolbox": "Алатал",
+ "userpage": "ГӀахьалчиясул гьумер",
+ "imagepage": "Файлалъул гьумер балагьизе",
+ "mediawikipage": "Кагъаталъул гьумер балагьизе",
+ "otherlanguages": "Цоги мацӀазда",
+ "redirectpagesub": "Цоги гьумералда сверизабураб гьумер",
+ "lastmodifiedat": "Ахирисеб нухалъ гьаб гьумералъул хиса-баси гьабуна: $2, $1.",
+ "protectedpage": "ЦӀунараб гьумер",
+ "jumpto": "КӀанцӀизе:",
+ "jumptonavigation": "Навигация",
+ "jumptosearch": "цIехезе",
+ "pool-errorunknown": "Лъалареб гъалатӀ",
+ "aboutsite": "{{grammar:genitive|{{SITENAME}}}} хӀакъалъулъ",
+ "currentevents": "Жакъасел лъугьа-бахъинал",
+ "edithelp": "Хисизабиялъе кумек",
+ "mainpage": "БетӀераб гьумер",
+ "mainpage-description": "БетӀераб гьумер",
+ "policy-url": "Project:КъагӀидаби",
+ "portal": "ЖамагIаталъул портал",
+ "portal-url": "Project:Майдан",
+ "privacy": "Конфиденциальносталъул сиясат",
+ "privacypage": "Project:Конфиденциальносталъул сиясат",
+ "badaccess": "Ихтияразул гъалатӀ",
+ "ok": "OK",
+ "retrievedfrom": "Босараб бакӀ — «$1»",
+ "youhavenewmessages": "Духъе $1 бачӀана ($2).",
+ "youhavenewmessagesmanyusers": "Духъе $1 бачӀана чамалиго гӀахьалчиясухъан ($2).",
+ "newmessageslinkplural": "{{PLURAL:$1|цӀияб кагъат|999=цӀиял кагътал}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|ахирисеб хиса-баси|999=ахирисел хиса-басиял}}",
+ "youhavenewmessagesmulti": "Духъе цӀиял кагътал рачӀана $1",
+ "editsection": "хисизабизе",
+ "editold": "хисизабизе",
+ "viewsourceold": "вики-текст балагьизе",
+ "editlink": "хисизабизе",
+ "viewsourcelink": "вики-текст балагьизе",
+ "editsectionhint": "$1 бутӀа хисизабизе",
+ "toc": "Жаниб бугеб жо",
+ "showtoc": "бихьизабизе",
+ "hidetoc": "бахчизе",
+ "collapsible-collapse": "Кьуризабизе",
+ "collapsible-expand": "Рагьизе",
+ "confirmable-confirm": "{{GENDER:$1|Мун}} унгойищ?",
+ "confirmable-yes": "У",
+ "confirmable-no": "Гуро",
+ "viewdeleted": "$1 балагьизеищ?",
+ "nstab-main": "Гьумер",
+ "nstab-user": "ГIахьалчи",
+ "nstab-media": "Мультимедиа",
+ "nstab-special": "Хъулухъияб гьумер",
+ "nstab-project": "Проект хIакъалъулъ",
+ "nstab-image": "Файл",
+ "nstab-mediawiki": "Кагъат",
+ "nstab-template": "Шаблон",
+ "nstab-help": "Кумек",
+ "nstab-category": "Категория",
+ "error": "Гъалатl",
+ "databaseerror-error": "ГъалатI: $1",
+ "internalerror": "Жанисеб гъалатl",
+ "badtitle": "Бегьулареб цIар",
+ "viewsource": "Вики-текст балагьизе",
+ "viewsource-title": "$1 гьумералъул вики-текст балагьизе",
+ "exception-nologin": "Мун жаниве лъугьун гьечIо",
+ "exception-nologin-text": "Жаниве лъугьине ккола.",
+ "yourname": "ХӀалтӀизабулчиясул цӀар:",
+ "userlogin-yourname": "ХӀалтӀизабулчиясул цӀар",
+ "userlogin-yourname-ph": "Дур аккаунталъул цӀар хъвае",
+ "createacct-another-username-ph": "ГӀахьалчиясул цӀар хъвай",
+ "yourpassword": "Пароль:",
+ "userlogin-yourpassword": "Пароль",
+ "userlogin-yourpassword-ph": "Дур пароль хъвае",
+ "createacct-yourpassword-ph": "Дур пароль хъвае",
+ "yourpasswordagain": "Пароль такрар гьабе:",
+ "userlogin-remembermypassword": "Системалда чӀезе",
+ "yourdomainname": "Дур домен:",
+ "login": "Жаниве лъугьине",
+ "nav-login-createaccount": "Жаниве лъугьине / аккаунт гьабизе",
+ "userlogin": "Жаниве лъугьине / аккаунт гьабизе",
+ "userloginnocreate": "Жаниве лъугьине",
+ "logout": "Къватlиве вачIизе",
+ "userlogout": "Къватlиве лъугьине",
+ "notloggedin": "Мун жаниве лъугьун гьечIо",
+ "userlogin-noaccount": "Дур аккаунт гьечIебищ?",
+ "nologin": "Дур аккаунт гьечIебищ? $1.",
+ "nologinlink": "Аккаунт гьабизе",
+ "createaccount": "Аккаунт гьабизе",
+ "gotaccount": "Дур аккаунт бугиш? $1.",
+ "gotaccountlink": "Жаниве лъугьине",
+ "loginsuccesstitle": "Жаниве лъугьана",
+ "resettokens-tokens": "Токенал:",
+ "media_tip": "Файлалъе линк",
+ "sig_tip": "Дур гъулбас ва гьабсагӀаталъ заман",
+ "summary": "Хиса-басиязул куц:",
+ "subject": "Тема/бетӀер",
+ "minoredit": "Дагьа-макъаб хиса-баси",
+ "watchthis": "Гьаб гьумералда хадуб хал кквезе",
+ "savearticle": "Хъвай-хъвай цӀунизе",
+ "preview": "ЦIебесеб",
+ "showpreview": "Цин балагьизе",
+ "showdiff": "Хисараб жо балагьизе",
+ "updated": "(ЦӀигьабуна)",
+ "note": "<strong>ХӀужа:</strong>",
+ "previewnote": "<strong>КӀочоге, мун гьабсагӀаталъ балагьула вуго макъалаялъул букӀине бугеб куцалъухъ.</strong>\nДуца гьарурал хиса-басиял цӀунун гьечӀо!",
+ "continue-editing": "Жегиги хисизабизе",
+ "editing": "Хисизаби $1",
+ "creating": "Гьабула буго цӀияб гьумер - $1",
+ "editingsection": "$1 (бутӀа) хисизаби",
+ "editingcomment": "$1 (цӀияб бутӀа) хисизаби",
+ "editconflict": "Хисизабиялул дагӀба:",
+ "yourdiff": "БатӀалъи",
+ "template-protected": "(цӀунун буго)",
+ "template-semiprotected": "(цо-цо бакӀал цунун руго)",
+ "next": "хадуб",
+ "last": "цебе",
+ "page_first": "тӀоцебесеб",
+ "page_last": "ахирисеб",
+ "histfirst": "некӀсиял",
+ "histlast": "бищун цӀиял",
+ "historysize": "($1 {{PLURAL:$1|байт|байт|байт}})",
+ "historyempty": "(чӀобого буго)",
+ "history-feed-title": "Хиса-басиязул тарих",
+ "rev-showdeleted": "бихьизабизе",
+ "revdelete-show-file-submit": "У",
+ "revdelete-reasonotherlist": "Цоги гӀила",
+ "mergehistory-reason": "ГӀила:",
+ "editundo": "нахъчIвазе",
+ "diff-empty": "(БатӀалъи гьечӀо)",
+ "preferences": "Рекъезаби",
+ "mypreferences": "Рекъезаби",
+ "localtime": "Бакlалъул заман",
+ "userrights-user-editname": "ГӀахьалчиясул цӀар хъвай:",
+ "recentchanges": "ЦӀиял хиса-басиял",
+ "rcshowhideminor": "$1 гӀиси-микъинал хиса-басиял",
+ "rcshowhideminor-show": "Бихьизабизе",
+ "rcshowhideminor-hide": "Бахчизе",
+ "rcshowhidebots": "$1 ботал",
+ "rcshowhidebots-show": "Бихьизабизе",
+ "rcshowhidebots-hide": "Бахчизе",
+ "rcshowhideliu": "$1 цӀар рагьарал гӀахьалчагӀи",
+ "rcshowhideliu-show": "Бихьизабизе",
+ "rcshowhideliu-hide": "Бахчизе",
+ "rcshowhideanons": "$1 цӀаргьечӀ",
+ "rcshowhideanons-show": "Бихьизабизе",
+ "rcshowhideanons-hide": "Бахчизе",
+ "rcshowhidepatr-show": "Бихьизабизе",
+ "rcshowhidepatr-hide": "Бахчизе",
+ "rcshowhidemine": "$1 дир хиса-басиял",
+ "rcshowhidemine-show": "Бихьизабизе",
+ "rcshowhidemine-hide": "Бахчизе",
+ "diff": "батӀалъи",
+ "hide": "Бахчизе",
+ "show": "Бихьизабизе",
+ "minoreditletter": "гӀ.-м.",
+ "newpageletter": "ЦӀ",
+ "recentchangeslinked": "Рухьарал хиса-басиял",
+ "recentchangeslinked-feed": "Рухьарал хиса-басиял",
+ "recentchangeslinked-toolbox": "Рухьарал хиса-басиял",
+ "upload": "Файл цIазе",
+ "uploadnologin": "Дуца цӀар бицун гьечӀо",
+ "randompage": "Цебе ккараб гьумер",
+ "shortpages": "Къокъал макъалаби",
+ "longpages": "Кlудиял гьумерал",
+ "listusers": "Гlахьалчагlазул сияхl",
+ "newpages": "ЦIиял гьумерал",
+ "specialloguserlabel": "ГӀахьалчи:",
+ "allarticles": "Киналго макъалаби",
+ "watchlist": "Дур халгьабиялъул сияхl",
+ "watch": "Хал кквезе",
+ "contributions": "{{GENDER:$1|ГӀахьалчиясул}} хӀалтӀи",
+ "mycontris": "Дур гlахьаллъи",
+ "whatlinkshere": "Гьанире линкал",
+ "move-page-legend": "Гьумералъул цlар хисизе",
+ "movearticle": "Гьумералъул цӀар хисизе:",
+ "movepagebtn": "Гьумералъул цlар хисизе",
+ "lastmodifiedatby": "Ахирисеб нухалъ гьаб гьумералъул хиса-баси гьабуна: $2, $1. Хисизабуна гьас: $3.",
+ "specialpages": "Хассал гьумерал"
}
diff --git a/languages/i18n/avk.json b/languages/i18n/avk.json
index a8c72d11..40914c00 100644
--- a/languages/i18n/avk.json
+++ b/languages/i18n/avk.json
@@ -359,12 +359,10 @@
"passwordreset-emailtitle": "Pinta va pata dene {{SITENAME}}",
"passwordreset-emailelement": "Favesikyolt : $1\nUgaloraf remravlem : $2",
"changeemail": "Betara va e-mail mane",
- "changeemail-header": "Betara va patafe e-mail mane",
"changeemail-oldemail": "Noelafe e-mail mane",
"changeemail-newemail": "Warzafe e-mail mane",
"changeemail-none": "(mek)",
"changeemail-submit": "Betara va e-mail mane",
- "changeemail-cancel": "Kuidera",
"bold_sample": "Bold krent",
"bold_tip": "Bold krent",
"italic_sample": "Italic krent",
@@ -543,7 +541,6 @@
"mergehistory-same-destination": "Buklita is bugraskaxo vol rotid milafo",
"mergehistory-reason": "Lazava",
"mergelog": "Va \"log\" joara",
- "pagemerge-logentry": "joara va [[$1]] ko [[$2]] (betaks yo kali $3)",
"revertmerge": "Voljoara",
"mergelogpagetext": "Vleveon tir vexala dem tel lonoeltafa joara se va buizvot ko ar.",
"history-title": "Va \"$1\" betarizvot",
@@ -585,7 +582,6 @@
"searchrelated": "skedaf",
"searchall": "kot",
"showingresults": "Vlevefa nedira va {{PLURAL:$1|'''1''' trasiks|'''$1''' trasiks}} dem #'''$2''' toza.",
- "showingresultsheader": "{{PLURAL:$5|Trasiks '''$1''' ke '''$3'''|Trasiks '''$1 - $2''' ke '''$3'''}} icde '''$4'''",
"search-nonefound": "Mek trasiks vas kucilara",
"powersearch-legend": "Aneyapara",
"powersearch-ns": "Aneyara koe yoltxo:",
@@ -912,13 +908,11 @@
"statistics": "Enkopaca yo",
"statistics-header-pages": "Buenkopaceem",
"statistics-header-edits": "Betarenkopaceem",
- "statistics-header-views": "Wirenkopaceem",
"statistics-header-users": "Enkopaca yo va favesik",
"statistics-pages": "Bueem",
"statistics-files": "Kalvajayan iyeltakeem",
"statistics-edits-average": "Mialukafa bubetarota",
"statistics-users-active": "Tegiraf pakesikeem",
- "statistics-mostpopular": "Tel lorupen bueem",
"doubleredirects": "Jontolafa graskara",
"doubleredirectstext": "<b>Attention:</b> cette liste peut contenir des « faux positifs ». Dans ce cas, c'est probablement la page du premier #REDIRECT contient aussi du texte.<br />Chaque ligne contient les liens à la 1re et 2e page de redirection, ainsi que la première ligne de cette dernière, qui donne normalement la « vraie » destination. Le premier #REDIRECT devrait lier vers cette destination.",
"double-redirect-fixed-move": "arrundayan [[$1]], dure graskan kal [[$2]]",
@@ -946,7 +940,6 @@
"uncategorizedtemplates": "Lomiskaf tezeem",
"unusedcategories": "Mefaven lomeem",
"unusedimages": "Avuwikaf ewaveem",
- "popularpages": "Tel lorupen bueem",
"wantedcategories": "Eruna loma",
"wantedpages": "Tel loderun bueem",
"wantedfiles": "Erun iyeltak",
@@ -986,7 +979,6 @@
"suppress": "Rokla",
"booksources": "Vuestes suteks",
"booksources-search-legend": "Aneyara va nevaklita",
- "booksources-go": "Rupera",
"specialloguserlabel": "Favesik:",
"speciallogtitlelabel": "Vergumvelt:",
"log": "\"logs\"",
@@ -1060,7 +1052,7 @@
"wlheader-enotif": "Email walzera tir tegisa.",
"wlheader-showupdated": "Bu betayanu vielu rin ironokon worayal tir '''sulatcalakorafu'''.",
"wlnote": "Vleveon tid tela '''$1''' ironokafa betara mali '''$2''' ironokaf bartiv.",
- "wlshowlast": "Nedira va ironokaf $1 bartiv isu $2 viel isu $3",
+ "wlshowlast": "Nedira va ironokaf $1 bartiv isu $2 viel isu",
"watchlist-options": "Suzdasikiolkeem",
"watching": "Nedis...",
"unwatching": "Menedis...",
@@ -1096,7 +1088,6 @@
"delete-toobig": "Batu bu va izvotap (lo $1 {{PLURAL:$1|betara|betara}}) digir. Ta djira va waltafa empara va {{SITENAME}} sulara va manu bu zo irutar.",
"delete-warning-toobig": "Batu bu va izvotap (lo $1 {{PLURAL:$1|betara|betara}}) digir. Sulara va manu bu va skura ke origak ke {{SITENAME}} rotempar, acum obrason diotel !",
"rollback": "nabildara va betareem",
- "rollback_short": "Nabildara",
"rollbacklink": "nabildara",
"rollbackfailed": "Rodjeyesa nabildara",
"cantrollback": "Impossible de révoquer : dernier auteur est le seul à avoir modifié cet article",
@@ -1327,7 +1318,6 @@
"thumbnail_dest_directory": "Redura va kalbonja tir merotisa",
"import": "Bukoburera",
"importinterwiki": "Transwiki koburera",
- "import-interwiki-source": "Wiki ik bu klita :",
"import-interwiki-history": "Ksudara va kot izvotsiatos ke batu bu",
"import-interwiki-submit": "Koburera",
"import-interwiki-namespace": "Graskarafo yoltxo :",
@@ -1609,7 +1599,6 @@
"exif-gpsspeed-n": "Webokeem",
"exif-gpsdirection-t": "Ageltania",
"exif-gpsdirection-m": "Zatnia",
- "watchlistall2": "kot",
"namespacesall": "koto",
"monthsall": "kot",
"confirmemail": "Va e-mail gruyel",
@@ -1664,7 +1653,6 @@
"watchlisttools-view": "Wira va icdef betakseem",
"watchlisttools-edit": "Wira va suzdasiki isu betara",
"watchlisttools-raw": "Betara va suzdasiki",
- "unknown_extension_tag": "\"$1\" megrupena divatcenafa tcala",
"duplicate-defaultsort": "'''OBRAL !''' \"$2\" omavafa muberamarna va \"$1\" tela abdifa selur.",
"version": "Siatos",
"version-extensions": "Inkeyeni divatcesiki se",
@@ -1677,7 +1665,7 @@
"version-parser-function-hooks": "Exuleraflidemi",
"version-hook-name": "Demiyolt",
"version-hook-subscribedby": "Wimpayan gan",
- "version-version": "(Siatos $1)",
+ "version-version": "($1)",
"version-license": "Sorta",
"version-software": "Inkeyen talpeyot",
"version-software-product": "Warzeks",
@@ -1702,5 +1690,6 @@
"tag-filter": "[[Special:Tags|Tag]] espara:",
"revdelete-restricted": "irutara rewana pu ristusik",
"revdelete-unrestricted": "irutara tiolteyena pu ristusik",
- "rightsnone": "(mek)"
+ "rightsnone": "(mek)",
+ "revdelete-summary": "betara va vildeks"
}
diff --git a/languages/i18n/awa.json b/languages/i18n/awa.json
new file mode 100644
index 00000000..218fa2e3
--- /dev/null
+++ b/languages/i18n/awa.json
@@ -0,0 +1,2956 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "tog-underline": "कड़ि अधोरेखन:",
+ "tog-hideminor": "नँवा बदलावमें छोट बदलाव लुकुआवा जाय",
+ "tog-hidepatrolled": "नँवा बदलावमें परीक्षित बदलाव लुकुआवा जाय",
+ "tog-newpageshidepatrolled": "नवा पन्नन कय सूची में परीक्षित पन्ना लुकुआवा जाय",
+ "tog-extendwatchlist": "खाली हालिए कय नाहीं, बल्कि कुल बदलाव कय देखावे कय लिए ध्यानसूची कय विस्तारित करा जाय",
+ "tog-usenewrc": "नँवा बदलाव में अउर ध्यानसूची बदलाव कय पन्ना अनुसार समूह में बाँटा जाय",
+ "tog-numberheadings": "शीर्षक स्व-क्रमांकित करा जाय",
+ "tog-showtoolbar": "सम्पादन औज़ारपट्टी देखावो",
+ "tog-editondblclick": "दुई क्लिक से पन्ना संपादित करा जाय",
+ "tog-editsectiononrightclick": "अनुभाग शीर्षक पे दायाँ क्लिक कई कय अनुभाग सम्पादित कीन जाय",
+ "tog-watchcreations": "हमार बनावा पन्ना अव हमार अपलोड करल फाइल कय हमरे ध्यानसूची में जोडो",
+ "tog-watchdefault": "हमार सम्पादन करल पन्ना अव फाइल कय ध्यानसूची में जोडो",
+ "tog-watchmoves": "हमरे द्वारा घुसकाइल पन्ना अव फ़ाइल कय हमरे ध्यानसूची में जोडो",
+ "tog-watchdeletion": "हमार हटावल पन्ना अव फाइल कय हमरे ध्यानसूची में जोडो",
+ "tog-watchrollback": "हमार प्रत्यापन्न (रोलबैक) करल पन्ना कय हमरे ध्यानसूची में जोडो।",
+ "tog-minordefault": "हमार कुल सम्पादन छोट बदलाव होय",
+ "tog-previewontop": "सम्पादन बक्सा कय ऊप्पर झलक देखावो",
+ "tog-previewonfirst": "पहिला सम्पादन कय बाद झलक देखावो",
+ "tog-enotifwatchlistpages": "हमरे ध्यानसूची में दर्ज कवनो भी पन्ना अव फ़ाइल में परिवर्तन होय पे हम्मै ई-मेल करो",
+ "tog-enotifusertalkpages": "हमरे बातचीत पन्ना मे बदलाव होय पे हम्मै ई-मेल करो",
+ "tog-enotifminoredits": "छोटे परिवर्तन कय लिए भी हम्म्य ई-मेल पठवो",
+ "tog-enotifrevealaddr": "अधिसूचना ई-मेल में हमार ई-मेल ठाँव देखावो",
+ "tog-shownumberswatching": "ध्यान रख्खय वाले सदस्यन् कय संख्या देखावो",
+ "tog-oldsig": "अभिन कय हस्ताक्षर:",
+ "tog-fancysig": "हस्ताक्षर कय विकिपाठ जैसन मानों (बिना स्वचालित कड़ी कय)",
+ "tog-uselivepreview": "सजिव झलक देखा जाय",
+ "tog-forceeditsummary": "यदि सम्पादन सारांश नाई दिहा है तो हम्मै बतावा जाय",
+ "tog-watchlisthideown": "हमरे ध्यानसूची से हमार करल बदलाव लुकुवाओ",
+ "tog-watchlisthidebots": "हमरे ध्यानसूची से बॉट कय करल परिवर्तन लुकुवाओ",
+ "tog-watchlisthideminor": "हमरे ध्यानसूची से छोट बदलाव लुकुवाओ",
+ "tog-watchlisthideliu": "हमरे ध्यानसूची में ल़ाग इन करल सदस्यन् कय सम्पादन ना देखावा जाय",
+ "tog-watchlisthideanons": "आइ॰पी सदस्यन् कय करल सम्पादन हमरे ध्यानसूची में ना देखाओ",
+ "tog-watchlisthidepatrolled": "परीक्षित सम्पादन हमरे ध्यानसूची में लुकुवाओ",
+ "tog-ccmeonemails": "हमरे द्वारा अउर सदस्यन् कय पठावल् ई-मेल कय प्रति हमहु कय पठओ",
+ "tog-diffonly": "अवतरणन् में अन्तर देखावत समय पुरान अवतरण ना देखाओ",
+ "tog-showhiddencats": "लुकुवावल श्रेणि देखाओ",
+ "tog-norollbackdiff": "सम्पादन वापिस लेवेक बाद अन्तर ना देखाओ",
+ "tog-useeditwarning": "जब हम कवनो सम्पादन पन्ना कय बिना सहेजे बदलाव कय साथे छोड दि तव हम्मै बतावो।",
+ "tog-prefershttps": "लॉगिन करेक बाद हमेशा सुरक्षित कनेक्शन कय प्रयोग करो",
+ "underline-always": "हमेशा",
+ "underline-never": "कब्बो नाई",
+ "underline-default": "देखावट या ब्राउज़र डिफ़ॉल्ट",
+ "editfont-style": "सम्पादन क्षेत्र कय मुद्रलिपि शैली:",
+ "editfont-default": "ब्राउज़र डिफ़ॉल्ट",
+ "editfont-monospace": "एकल स्थल मुद्रलिपि",
+ "editfont-sansserif": "बिना ऩोक वाला मुद्रलिपि",
+ "editfont-serif": "ऩोक वाला मुद्रलिपि",
+ "sunday": "अत्तवार",
+ "monday": "सोम",
+ "tuesday": "मङ्ङर",
+ "wednesday": "बुध",
+ "thursday": "बीफए",
+ "friday": "शुक्क",
+ "saturday": "शनिचर",
+ "sun": "अत्तवार",
+ "mon": "सोम",
+ "tue": "मङ्ङर",
+ "wed": "बुध",
+ "thu": "बीफए",
+ "fri": "शुक्क",
+ "sat": "शनिचर",
+ "january": "जनवरी",
+ "february": "फेब्रुअरी",
+ "march": "मार्च",
+ "april": "अप्रैल",
+ "may_long": "मई",
+ "june": "जून",
+ "july": "जुलाई",
+ "august": "अगस्त",
+ "september": "सेप्टेम्बर",
+ "october": "अक्टूबर",
+ "november": "नोभेम्बर",
+ "december": "डिसेम्बर",
+ "january-gen": "जनवरी",
+ "february-gen": "फेब्रुअरी",
+ "march-gen": "मार्च",
+ "april-gen": "अप्रैल",
+ "may-gen": "मई",
+ "june-gen": "जून",
+ "july-gen": "जुलाई",
+ "august-gen": "अगस्त",
+ "september-gen": "सेप्टेम्बर",
+ "october-gen": "अक्टूबर",
+ "november-gen": "नोभेम्बर",
+ "december-gen": "डिसेम्बर",
+ "jan": "जन॰",
+ "feb": "फेब्रु.",
+ "mar": "मार्च",
+ "apr": "अप्रि.",
+ "may": "मई",
+ "jun": "जुन",
+ "jul": "जुला॰",
+ "aug": "अग॰",
+ "sep": "सित.",
+ "oct": "अक्टु.",
+ "nov": "नोभे.",
+ "dec": "डिसे.",
+ "january-date": "जनवरी $1",
+ "february-date": "फेब्रुअरी $1",
+ "march-date": "मार्च $1",
+ "april-date": "अप्रैल $1",
+ "may-date": "मई $1",
+ "june-date": "जून $1",
+ "july-date": "जुलाई $1",
+ "august-date": "अगस्त $1",
+ "september-date": "सेप्टेम्बर $1",
+ "october-date": "अक्टूबर $1",
+ "november-date": "नोभेम्बर $1",
+ "december-date": "डिसेम्बर $1",
+ "pagecategories": "{{PLURAL:$1|श्रेणी|श्रेणिन्}}",
+ "category_header": "\"$1\" श्रेणी में पन्ना",
+ "subcategories": "उपश्रेणिन्",
+ "category-media-header": "\"$1\" श्रेणी में पन्ना",
+ "category-empty": "''ई श्रेणी में यह समय कवनो पन्ना या मीडिया नाई है।''",
+ "hidden-categories": "{{PLURAL:$1|लुकुवावल श्रेणी|लुकुवावल श्रेणिन् कुल}}",
+ "hidden-category-category": "लुकुवावल श्रेणिन् कुल",
+ "category-subcat-count": "{{PLURAL:$2|इ श्रेणी मा खालि निचे दिहल उपश्रेणीन कुल हँय|इ श्रेणी मा निचे दिहल {{PLURAL:$1|उपश्रेणी|$1 उपश्रेणिन कुल}} हँय, कुल उपश्रेणि $2}}",
+ "category-subcat-count-limited": "ई श्रेणी में निचे दिहल {{PLURAL:$1|उपश्रेणी हँय|$1 उपश्रेणिन कुल हँय}}।",
+ "category-article-count": "{{PLURAL:$2|इ श्रेणी में खालि निचे दिहल पन्ना है।|इ श्रेणी में निचे दिहल{{PLURAL:$1|पन्ना है|$1 पन्ना हैं}}, सब पन्ना $2}}",
+ "category-article-count-limited": "निचे दिहल {{PLURAL:$1|पन्ना|$1 पन्ना}} इ श्रेणी में है।",
+ "category-file-count": "{{PLURAL:$2|इ श्रेणी में खालि निचे दिहल फ़ाइल है।|इ श्रेणी में निचे दिहल {{PLURAL:$1|फ़ाइल|$1 फ़ाइल}} है, सब फ़ाइल $2}}",
+ "category-file-count-limited": "निचे दिहल {{PLURAL:$1|पन्ना|$1 पन्ना}} इ श्रेणी में है।",
+ "listingcontinuesabbrev": "आगे.",
+ "index-category": "सूचीबद्ध पन्ना",
+ "noindex-category": "असूचीबद्ध पन्ना",
+ "broken-file-category": "टूटल फ़ाइल कड़ि वाला पन्ना",
+ "about": "कय बारे में",
+ "article": "लेख",
+ "newwindow": "(नवा विंडो में खुलत अहै)",
+ "cancel": "रद्द करा जाय",
+ "moredotdotdot": "अउर...",
+ "morenotlisted": "ई पूरा सूची नाई होय।",
+ "mypage": "पन्ना",
+ "mytalk": "बातचीत",
+ "anontalk": "ई आइ॰पी कय खरतिन बातचीत",
+ "navigation": "घुमाई",
+ "and": "&#32;अउर",
+ "qbfind": "खोजा जाय",
+ "qbbrowse": "ब्राउज़",
+ "qbedit": "सम्पादन",
+ "qbpageoptions": "ई पन्ना",
+ "qbmyoptions": "हमार पन्ना",
+ "faq": "साधारण सवाल",
+ "faqpage": "Project:ढेर पूछा जाय वाला सवाल",
+ "actions": "काम कुल",
+ "namespaces": "नामस्थान",
+ "variants": "संस्करण",
+ "navigation-heading": "दिक्चालन सूची",
+ "errorpagetitle": "त्रुटि",
+ "returnto": "$1 मे लौटो।",
+ "tagline": "{{SITENAME}} से",
+ "help": "मदद",
+ "search": "खोजा जाय",
+ "searchbutton": "खोजा जाय",
+ "go": "जावा जाय",
+ "searcharticle": "जावा जाय",
+ "history": "पन्ना कय इतिहास",
+ "history_short": "इतिहास",
+ "updatedmarker": "हमरे अन्तिम दाँइ आवे कय बाद कय अपडेट",
+ "printableversion": "छापए लायक संस्करण",
+ "permalink": "स्थायी कड़ी",
+ "print": "प्रिंट करा जाय",
+ "view": "देखा जाय",
+ "view-foreign": "$1 पे देखा जाय",
+ "edit": "सम्पादन",
+ "edit-local": "स्थानीय विवरण सम्पादन",
+ "create": "बनावो",
+ "create-local": "स्थानीय विवरण जोडो",
+ "editthispage": "ई पन्ना कय सम्पादन करा जाय",
+ "create-this-page": "ई पन्ना बनावा जाय",
+ "delete": "मिटावा जाय",
+ "deletethispage": "ई पन्ना मेटावा जाय",
+ "undeletethispage": "ई पन्ना कय पुनर्स्थापित करा जाय।",
+ "undelete_short": "{{PLURAL:$1|एक मेटाई गय}} बदलाव वापिस लाओ",
+ "viewdeleted_short": "देखा जाय {{PLURAL:$1|एक मेटावल सम्पादन|$1 मेटावल सम्पादन}}",
+ "protect": "सुरक्षित करा जाय",
+ "protect_change": "बदला जाय",
+ "protectthispage": "इ पन्ना कय सुरक्षित करा जाय",
+ "unprotect": "असुरक्षित",
+ "unprotectthispage": "ई पन्ना कय सुरक्षा स्तर बदला जाय",
+ "newpage": "नँवा पन्ना",
+ "talkpage": "ई पन्ना कय बारे मे चर्चा करा जाय",
+ "talkpagelinktext": "बातचीत",
+ "specialpage": "विशेष पन्ना",
+ "personaltools": "वैयक्तिक औज़ार",
+ "articlepage": "सामग्री पन्ना देखा जाय",
+ "talk": "चर्चा",
+ "views": "दर्शाव",
+ "toolbox": "औजार कय बक्सा",
+ "userpage": "सदस्य पन्ना देखा जाय",
+ "projectpage": "परियोजना पन्ना देखा जाय",
+ "imagepage": "फ़ाइल पन्ना देखा जाय",
+ "mediawikipage": "सनेशा पन्ना देखा जाय",
+ "templatepage": "साँचा पन्ना देखा जाय",
+ "viewhelppage": "मदद पन्ना देखा जाय",
+ "categorypage": "श्रेणी पन्ना देखा जाय",
+ "viewtalkpage": "चर्चा देखा जाय",
+ "otherlanguages": "दुसर भाषा में",
+ "redirectedfrom": "($1 से पुनर्निर्देशित)",
+ "redirectpagesub": "पुनर्निर्देश पन्ना",
+ "redirectto": "पुनर्निर्देश करा जाय:",
+ "lastmodifiedat": "इ पन्ना कय पिछला बदलाव $1 कय $2 बजे भवा रहा।",
+ "viewcount": "ई पन्ना {{PLURAL:$1|एक|$1}} दाइँ देख़ गा है।",
+ "protectedpage": "सुरक्षित पन्ना",
+ "jumpto": "यहँ जावा जाय:",
+ "jumptonavigation": "घुमाई",
+ "jumptosearch": "खोजा जाय",
+ "view-pool-error": "क्षमा करा जाय, यह समय सर्वर पे ढेर बोझ है।\nबहुत ढेर प्रयोक्ता लोग इ पन्ना कय देखेक प्रयास करत हँय।\nतनी कुछ समय अगोरिकय फिर से इ पन्ना कय देखेक प्रयास करा जाय।\n\n$1",
+ "generic-pool-error": "क्षमा करा जाय, यह समय सर्वर पे ढेर बोझ है।\nबहुत ढेर प्रयोक्ता लोग इ चिज कय देखेक प्रयास करत हँय।\nतनी कुछ समय अगोरिकय फिर से इ चिज कय देखेक प्रयास करा जाय।\n\n$1",
+ "pool-timeout": "तालाबन्दी कय लिए अगोरे कय समय खतम",
+ "pool-queuefull": "पूल पंक्ति भरा है",
+ "pool-errorunknown": "अज्ञात त्रुटि",
+ "pool-servererror": "पूल काउंटर सेवा उपलब्ध नाई है ($1)।",
+ "poolcounter-usage-error": "प्रयोग त्रुटि:$1",
+ "aboutsite": "{{SITENAME}} कय बारे मे",
+ "aboutpage": "Project:परिचय",
+ "copyright": "उपलब्ध चिज $1 कय अधीन है जब तक अलग से उल्लेख नाई कई गा है।",
+ "copyrightpage": "{{ns:project}}:कॉपीराइट",
+ "currentevents": "अभिन कय घटना सब",
+ "currentevents-url": "Project:अभिन कय घटना सब",
+ "disclaimers": "अस्वीकरण",
+ "disclaimerpage": "Project:साधारण अस्वीकरण",
+ "edithelp": "सम्पादन सहायता",
+ "helppage-top-gethelp": "मदद",
+ "mainpage": "प्रधान पन्ना",
+ "mainpage-description": "प्रधान पन्ना",
+ "policy-url": "Project:नीति",
+ "portal": "समाज प्रधानपन्ना",
+ "portal-url": "Project:समाज प्रधानपन्ना",
+ "privacy": "गोपनीयता नीति",
+ "privacypage": "Project:गोपनीयता नीति",
+ "badaccess": "अनुमति त्रुटि",
+ "badaccess-group0": "जवने काम कय चिरौरी आप किहा गा है ओका करेक अनुमति आप कय नाइ है।",
+ "badaccess-groups": "आप जवन काम आजमावा गा है उ खाली {{PLURAL:$2|$1 समूह}} कय सदस्य ही कई सकत हैं।",
+ "versionrequired": "मीडीयाविकी कय $1 अवतरण ज़रूरी है।",
+ "versionrequiredtext": "ई पन्ना प्रयोग करेक के लिये मीडियाविकी का $1 अवतरण ज़रूरी है।\nदेखा जाय [[Special:Version|अवतरण पन्ना]]।",
+ "ok": "ठीक है",
+ "retrievedfrom": "\"$1\" से लई गा है",
+ "youhavenewmessages": "आप कय खरतिन $1 है। ($2)",
+ "youhavenewmessagesfromusers": "आपके खरतिन {{PLURAL:$3|एक दुसर सदस्य|$3 दुसर सदस्य कुल}} कय $1 होय। ($2)",
+ "youhavenewmessagesmanyusers": "आपके खरतिन $1 होय। ($2)",
+ "newmessageslinkplural": "{{PLURAL:$1|एकठु नवाँ सनेशा|999=नवाँ सनेशा}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|पिछला|999=पिछला कुल}} बदलाव",
+ "youhavenewmessagesmulti": "$1 पे आप कय खरतिन नवाँ सनेशा है",
+ "editsection": "सम्पादन",
+ "editold": "सम्पादन",
+ "viewsourceold": "स्रोत देखा जाय",
+ "editlink": "सम्पादन",
+ "viewsourcelink": "स्रोत देखा जाय",
+ "editsectionhint": "अनुभाग सम्पादन: $1",
+ "toc": "विषय सूची",
+ "showtoc": "देखाओ",
+ "hidetoc": "लुकुवाओ",
+ "collapsible-collapse": "छोट करा जाय",
+ "collapsible-expand": "बडा करा जाय",
+ "confirmable-confirm": "का {{GENDER:$1|आप}} निश्चित हव?",
+ "confirmable-yes": "हाँ",
+ "confirmable-no": "नाहीँ",
+ "thisisdeleted": "$1 देखो या वापिस लाओ?",
+ "viewdeleted": "$1 देखाओ?",
+ "restorelink": "{{PLURAL:$1|एक मेटावल|$1 मेटावल}} बदलाव",
+ "feedlinks": "फ़ीड:",
+ "feed-invalid": "गलत सब्स्क्रीप्शन फ़ीड प्रकार",
+ "feed-unavailable": "संघ फ़ीड उपलब्ध नाई है",
+ "site-rss-feed": "$1 कय आर॰एस॰एस फ़ीड",
+ "site-atom-feed": "$1 कय एटम फ़ीड",
+ "page-rss-feed": "\"$1\" आर॰एस॰एस फ़ीड",
+ "page-atom-feed": "\"$1\" एटम फ़ीड",
+ "feed-atom": "एटम फिड",
+ "red-link-title": "$1 (पन्ना मौजूद नाई है)",
+ "sort-descending": "घटे कय क्रम में मिलाओ",
+ "sort-ascending": "बढे कय क्रम में मिलाओ",
+ "nstab-main": "पन्ना",
+ "nstab-user": "सदस्य पन्ना",
+ "nstab-media": "मीडिया पन्ना",
+ "nstab-special": "विशेष पन्ना",
+ "nstab-project": "परियोजना पन्ना",
+ "nstab-image": "फ़ाइल",
+ "nstab-mediawiki": "सनेशा",
+ "nstab-template": "साँचा",
+ "nstab-help": "मदद पन्ना",
+ "nstab-category": "श्रेणी",
+ "nosuchaction": "अईसन कवनो काम नाई है",
+ "nosuchactiontext": "इ यू॰आर॰एल से निर्दिष्ट काम अवैध है।\nआप यू॰आर॰एल गलत लिखा गा है, या कवनो गलत कड़ी कय प्रयोग करा गा है।\nई {{SITENAME}} कय सॉफ़्टवेयर में त्रुटि भी होई सकत है।",
+ "nosuchspecialpage": "अईसन कौनो विशेष पन्ना नाई है",
+ "nospecialpagetext": "<strong>आप अवैध विशेष पन्ना माँगा गा है।</strong>\nवैध विशेष पन्नन कय सूची [[Special:SpecialPages|{{int:specialpages}}]] पे देखी सका जात है।",
+ "error": "त्रुटि",
+ "databaseerror": "डाटाबेस त्रुटि",
+ "databaseerror-text": "डाटाबेस अनुरोध त्रुटि हुई है।\nसंभवतः सॉफ़्टवेयर में गड़बड़ी है।",
+ "databaseerror-textcl": "डाटाबेस अनुरोध त्रुटि होई गवा है।",
+ "databaseerror-query": "अनुरोध: $1",
+ "databaseerror-function": "फ़ंक्शन: $1",
+ "databaseerror-error": "त्रुटि: $1",
+ "laggedslavemode": "'''चेतावनी:''' यह पृष्ठ अद्यतनीत जानकारी-युक्त ना होने की आशंका है।",
+ "readonly": "डाटाबेस लॉक करा है",
+ "enterlockreason": "लॉक करने का कारण दीजिए, साथ ही लॉक खुलने के समय का लगभग आकलन दिजीये।",
+ "readonlytext": "शायद मेंटेनन्स के चलते डाटाबेस नये संपादन और अन्य बदलावों से लॉक किया गया है, जिसके बाद यह सामान्य स्थिति में आ जाना चाहिये।\n\nजिस प्रबंधक ने यह लॉक किया था उसने यह कारण दिया है: $1",
+ "missing-article": "डाटाबेस में $2 के अंदर कहीं भी \"$1\" नहीं मिला।\n\nआम तौर पर हटाए जा चुके पृष्ठ की इतिहास कड़ी का प्रयोग करने पर ऐसा होता है।\n\nअगर ऐसा नहीं है, तो शायद आपने सॉफ़्टवेयर में त्रुटि खोज ली है।\nकृपया यू॰आर॰एल पते समेत किसी [[Special:ListUsers/sysop|प्रबंधक]] को इसका ब्यौरा दें।",
+ "missingarticle-rev": "(अवतरण#: $1)",
+ "missingarticle-diff": "(अंतर: $1, $2)",
+ "readonly_lag": "उपमुख्य डाटाबेस सर्वर मुख्य डाटाबेस सर्वर के बराबर अद्यातानीत होने तक मुख्य डाटाबेस सर्वर लॉक हो गया है।",
+ "internalerror": "आन्तरिक त्रुटि",
+ "internalerror_info": "आन्तरिक त्रुटि: $1",
+ "filecopyerror": "\"$1\" फ़ाइल कय \"$2\" पे प्रतिलिपि नाई बनी पाए।",
+ "filerenameerror": "\"$1\" फ़ाइल कय नावँ बदली कय \"$2\" नाई राखी गय।",
+ "filedeleteerror": "\"$1\" फ़ाइल कय नाइ मेटाई गय।",
+ "directorycreateerror": "\"$1\" डाइरेक्टरी नाई बनी।",
+ "directoryreadonlyerror": "$1 डाइरेक्ट्री खालि पढै वाला होय",
+ "directorynotreadableerror": "डाइरेक्ट्री \"$1\" नाई पढि सका जात अहै",
+ "filenotfound": "\"$1\" फ़ाइल नाई मिला।",
+ "unexpected": "अनपेक्षित मोल: \"$1\"=\"$2\".",
+ "formerror": "त्रुटि: फ़ॉर्म सबमिट नाई भए",
+ "badarticleerror": "यह पन्ना पे ई काम नाई कई सका जात अहै।",
+ "cannotdelete": "\"$1\" पन्ना या फ़ाइल कय नाई हटाय सका जात अहै।\nशायद केहु अउर एका पहिलवे हटाई दिहे है।",
+ "cannotdelete-title": "\"$1\" पन्ना नाई मेटाए सका जात है",
+ "delete-hook-aborted": "हुक द्वारा हटाना बीच में ही छोड़ा गया।\nइसने कोई कारण नहीं बताया।",
+ "no-null-revision": "\"$1\" पृष्ठ के लिए बिना बदलावों का नया अवतरण बनाने में असफल।",
+ "badtitle": "खराब शीर्षक",
+ "badtitletext": "आप कय द्वारा अनुरोधित शीर्षक अयोग्य, ख़ाली या गलत जोड़ान अंतर-भाषीय या अंतर-विकि शीर्षक होय।\nएहमा एक या एक से ढेर अईसन कॅरेक्टर होई सकत हैं जवन शीर्षक में प्रयोग नाई कई सका जात अहै।",
+ "perfcached": "नीचे दिया हुआ डेटा कैशे मेमोरी से लिया हुआ है, अतः हो सकता है कि इसका पूर्ण अद्यतन न हुआ हो। कैशे मेमोरी में अधिकतम {{PLURAL:$1|एक नतीजा|$1 नतीजे}} उपलब्ध हैं।",
+ "perfcachedts": "नीचे दिया हुआ डेटा कैशे मेमोरी से है, और इसका अंतिम अद्यतन $1 को हुआ था। कैशे मेमोरी में अधिकतम {{PLURAL:$4|एक नतीजा|$4 नतीजे}} उपलब्ध हैं।",
+ "querypage-no-updates": "इस पृष्ठ का नवीनीकरण करना मना है। अभी यहाँ के डाटा को ताज़ा नहीं कर सकते।",
+ "viewsource": "स्रोत देखा जाय",
+ "viewsource-title": "$1 कय लिए स्रोत देखा जाय",
+ "actionthrottled": "काम खतम कई दिहा है",
+ "actionthrottledtext": "स्पैम कय रोकेक् लिये, इ काम एतना कम समय में एकठु सीमा से ढेर दाँइ करे कय मिनाही है, अव आप इ सीमा कय पार कई चुका गा है।\nकृपया कुछ समय बाद फिर से प्रयास करा जाय।",
+ "protectedpagetext": "ई पन्ना संपादन अव अउर काम से सुरक्षित किहा है।",
+ "viewsourcetext": "आप इ पन्ना कय स्रोत देखी सका जात है औ ओकर नकल उतार सका जात है:",
+ "viewyourtext": "आप ई पन्ना में ''आपन सम्पादन'' कय स्रोत देखी सका जात है औ ओकर नकल उतार सका जात है:",
+ "protectedinterface": "इ पन्ना विकी कय सॉफ़्टवेयर कय इंटरफ़ेस पाठ देत है,अव एकर गलत प्रयोग से बचावेक लिये सुरक्षित करा है।\nकुल विकिन् कय लिए अनुवाद जोड़य या बदलय कय लिए कृपया मीडियाविकि कय क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] कय प्रयोग करा जाय।",
+ "editinginterface": "<strong>चेतावनी:</strong> आप एकठु अइसन पन्ना कय बदलय जावा जात हैं जवन सॉफ़्टवेयर कय इंटरफ़ेस पाठ देत है।\nइ पन्ना कय बदलय से अउर सदस्यन् कय देखावेवाला इंटरफ़ेस कय शकल सूरत में बदलाव आई जाइ।",
+ "translateinterface": "कुल विकिन् कय ट्रान्सलेशन करय अव बदलय खर्तिन [//translatewiki.net/ ट्रान्शलेटविकि.नेट] कय प्रयोग करा जाय ।",
+ "cascadeprotected": "ई पन्ना सुरक्षित है, काहे से इ निचे दिहा {{PLURAL:$1|पन्ना|पन्नन्}} कय सुरक्षा-सीढ़ी में है:\n$2",
+ "namespaceprotected": "आप कय '''$1''' नामस्थान में रहल पन्नन कय बदलै कय अनुमति नाइ है।",
+ "customcssprotected": "आप कय इ CSS पन्ना कय संपादन करेक अनुमति नाई है, काहे से एहमा अउर सदस्य कय व्यक्तिगत सेटिंग्स शामिल है।",
+ "customjsprotected": "आप कय इ जावास्क्रिप्ट पन्ना कय संपादन करेक अनुमति नाई है, काहे से एहमा अउर सदस्य कय व्यक्तिगत सेटिंग्स शामिल है।",
+ "mycustomcssprotected": "आप कय इ CSS पन्ना कय संपादन करेक अनुमति नाई है ।",
+ "mycustomjsprotected": "आप कय इ जावास्क्रिप्ट पन्ना कय संपादन करेक अधिकार नाई है ।",
+ "myprivateinfoprotected": "आप कय लगे आपन व्यक्तिगत जानकारी बदलेक अनुमति नाई है।",
+ "mypreferencesprotected": "आप कय लगे आपन वरीयता बदलेक अनुमति नाई है।",
+ "ns-specialprotected": "विशेष पन्ना सम्पादित नाई होइहैं।",
+ "titleprotected": "सदस्य [[User:$1|$1]] इ शीर्षक कय पन्ना बनावे से सुरक्षित करे हँय।\nएकरे लिये कारण होय: \"''$2''\"",
+ "filereadonlyerror": "\"$1\" फ़ाइल को बदलने में असक्षम क्योंकि भण्डार \"$2\" इस समय 'केवल पाठन हेतु' (रीड ओनली) है।\n\nजिस प्रबंधक ने ये प्रबंध लगाया है उन्होंने निम्न विवरण प्रदान किया है: \"$3\"।",
+ "invalidtitle-knownnamespace": "\"$2\" नामस्थान अउर \"$3\" नाँव वाला गलत शीर्षक",
+ "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 अउर नाँव \"$2\" वाला गलत शीर्षक",
+ "exception-nologin": "लॉग इन नाइ करे हव",
+ "exception-nologin-text": "इ पन्ना अव काम कय सक्षम करेक लिए कृपया [[Special:Userlogin|लॉग इन]] करा जाय।",
+ "exception-nologin-text-manual": "इ पन्ना अव काम कय सक्षम करेक लिए कृपया $1 करा जाय।",
+ "virus-badscanner": "गलत जमाव: अज्ञात वायरस जाँचक: ''$1''",
+ "virus-scanfailed": "जाँच विफल (कूट $1)",
+ "virus-unknownscanner": "अज्ञात ऐंटीवायरस:",
+ "logouttext": "'''अब आप लॉग आउट कई चुका हव।'''\nध्यान देवा जाय कि जब तक आप आपन ब्राउज़र कैशे खाली नाई करा जाई, कुछ पन्ना अभीनो अईसन देखाय सकते हैं जैसय कि आप अभीनो लॉगिन करे हव।",
+ "welcomeuser": "आप कय स्वागत है, $1!",
+ "welcomecreation-msg": "आप कय खाता बनी गए।\nआपन [[Special:Preferences|{{SITENAME}} वरीयता]] बदलेक ना भूलावा जाइ।",
+ "yourname": "सदस्यनावँ:",
+ "userlogin-yourname": "सदस्यनावँ",
+ "userlogin-yourname-ph": "आपन सदस्यनावँ लिखा जाय",
+ "createacct-another-username-ph": "सदस्यनावँ दिहा जाय",
+ "yourpassword": "गुप्त कुंजी:",
+ "userlogin-yourpassword": "गुप्त कुंजी(पासवर्ड)",
+ "userlogin-yourpassword-ph": "आपन गुप्त कुंजी लिखा जाय",
+ "createacct-yourpassword-ph": "गुप्त कुंजी(पासवर्ड)डारो",
+ "yourpasswordagain": "गुप्त कुंजी एक दाँइ अउर लिखो:",
+ "createacct-yourpasswordagain": "गुप्त कुंजी कय पुष्टि करो",
+ "createacct-yourpasswordagain-ph": "गुप्त कुंजी फिर से लिखो",
+ "remembermypassword": "इ ब्राउज़र पे हमार लॉगिन याद रखो (अधिकतम $1 {{PLURAL:$1|दिन|दिन}} कय लिए)",
+ "userlogin-remembermypassword": "हम्मै लॉग्ड इन रखो",
+ "userlogin-signwithsecure": "सुरक्षित कनेक्शन कय प्रयोग करो",
+ "yourdomainname": "आप कय डोमेन:",
+ "password-change-forbidden": "आप इ विकि पे पासवर्ड नाई बदल सका जात है।",
+ "externaldberror": "या तो प्रमाणिकरण डाटाबेस में त्रुटि होई गवा है या फिर आप कय आपन बहरेक खाता अपडेट करेक अनुमति नाई है।",
+ "login": "लॉग इन",
+ "nav-login-createaccount": "लाग इन / खाता खोला जाय",
+ "userlogin": "लाग इन / खाता खोला जाय",
+ "userloginnocreate": "लॉग इन",
+ "logout": "बहरे निकरा जाय",
+ "userlogout": "बहरे निकरा जाय",
+ "notloggedin": "लॉग इन नाइ करा गा है",
+ "userlogin-noaccount": "खाता नाइ है?",
+ "userlogin-joinproject": "{{SITENAME}} से जुडव",
+ "nologin": "का आप सदस्यता नाई लीहे हव? '''$1'''।",
+ "nologinlink": "नवा खाता बनावा जाय",
+ "createaccount": "खाता बनावा जाय",
+ "gotaccount": "पहिले से आप कय खाता है? '''$1''' करा जाय।",
+ "gotaccountlink": "लॉग इन",
+ "userlogin-resetlink": "आपन प्रवेश जानकारी भूलाई गवा गय?",
+ "userlogin-resetpassword-link": "आपन गुप्त कुंजी भूलाई गवा गय?",
+ "userlogin-helplink2": "लॉग इन करे में सहायता",
+ "userlogin-loggedin": "आप {{GENDER:$1|$1}} कय रूप में पहीलवे से लॉग्ड इन होवा जात है।\nकवनो अउर सदस्य कय रूप में लॉग इन करय खरतिन निचे दिहा फ़ॉर्म कय प्रयोग करा जाय।",
+ "userlogin-createanother": "एकठु अउर खाता खोला जाय",
+ "createacct-emailrequired": "ई-मेल ठाँव",
+ "createacct-emailoptional": "ई-मेल ठाँव (वैकल्पिक)",
+ "createacct-email-ph": "आपन ई-मेल ठाँव लिखा जाय",
+ "createacct-another-email-ph": "ईमेल ठाँव दिहा जाय",
+ "createaccountmail": "एकठु अस्थायी मनलागा (रैंडम) गुप्त कुंजी चुना जाय अउर ओका निर्दिष्ट ई-मेल ठहर पे भेजा जाय",
+ "createacct-realname": "असली नावँ (वैकल्पिक)",
+ "createaccountreason": "कारण:",
+ "createacct-reason": "कारण",
+ "createacct-reason-ph": "आप दुसर खाता काहे बनावा जात है",
+ "createacct-captcha": "सुरक्षा जाँच",
+ "createacct-imgcaptcha-ph": "उपरा वाला पाठ लिखा जाय",
+ "createacct-submit": "आपन खाता बनावा जाय",
+ "createacct-another-submit": "एकठु अउर खाता खोला जाय",
+ "createacct-benefit-heading": "{{SITENAME}} आपय जैसन मनईन बनाए हँय।",
+ "createacct-benefit-body1": "{{PLURAL:$1|सम्पादन}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|पन्ना}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|योगदानकर्ता}}",
+ "badretype": "आप जवन गुप्त कुंजी दिहे हव उ एक दूसरे से नाइ मिलत है। फिर से लिखा जाय।",
+ "userexists": "आप कय दिहल सदस्यनाम पहिले से प्रयोग में है।\nकृपया कवनो दुसर सदस्यनाम चुना जाय।",
+ "loginerror": "लॉग इन त्रुटि",
+ "createacct-error": "खाता बनावेमे त्रुटि",
+ "createaccounterror": "खाता नाइ बनी पाय: $1",
+ "nocookiesnew": "आप कय खाता खोल दिहा गा है, लेकिन आप लॉग नाइ करा गा है।\n{{SITENAME}} पे लॉग इन करेक लिये कुकीज़ कय प्रयोग होत है।\nआप कुकीज़ बन्द करा गा है।\nकृपया अपने ब्राउज़र में कुकीज़ सक्षम करा जाय, औ फिर आपन सदस्यनावँ अव गुप्त कुंजी से लॉग इन करा जाय।",
+ "nocookieslogin": "{{SITENAME}} पे लॉग इन करेक लिये कुकीज़ कय प्रयोग होत है।\nआप कुकीज़ बन्द करा गा है।\nकृपया अपने ब्राउज़र में कुकीज़ सक्षम करा जाय, औ फिर से कोशिस करा जाय।",
+ "nocookiesfornew": "स्रोत कय पुष्टि ना होइ पावे कय कारण इ खाता नाई बनाई गा है। \nसुनिश्चित करा जाय कि आप कय कुकीज़ बन्द है कि नाईं, पन्ना कय फिरसे लोड करा जाय अव फिरसे प्रयास करा जाय।",
+ "noname": "आप सही सदस्यनाम नाइ दिहा गा है।",
+ "loginsuccesstitle": "लॉग इन होइ गवा",
+ "loginsuccess": "'''आप {{SITENAME}} में \"$1\" सदस्यनाम से लॉग इन होई {{GENDER:$1|चुके|चुकी|चुके}} हव।'''",
+ "nosuchuser": "\"$1\" नावँ कय कवनो सदस्य नाइ है।\nसदस्यनावँ में लघु औ दीर्घ अक्षरन् से फ़रक परत है।\nआपन अक्षर जाँचा जाय, या [[Special:UserLogin/signup|नवाँ खाता खोला जाय]]।",
+ "nosuchusershort": "\"$1\" नावँ कय कवनो सदस्य नाई है।\nकृपया आपन शब्द फिरसे जाँचा जाय।",
+ "nouserspecified": "सदस्यनावँ देब जरुरी है।",
+ "login-userblocked": "ई सदस्य प्रतिबन्धित है। सत्रारम्भ कय अनुमति नाई है।",
+ "wrongpassword": "आप जवन कूटशब्द लिखा गा है उ गलत है। कृपया फिरसे प्रयास करा जाय।",
+ "wrongpasswordempty": "गुप्त कुंजी खाली है।\nफिरसे लिखो।",
+ "passwordtooshort": "आप कय गुप्त कुंजी कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षरन्}} कय होएक चाहि।",
+ "password-name-match": "आप कय गुप्त कुंजी आप कय सदस्यनावँ से फरक होएक चाहि।",
+ "password-login-forbidden": "इ सदस्यनाँव अउर गुप्त कुंजी कय उपयोग नाई कै सका जात अहै।",
+ "mailmypassword": "गुप्त कुंजी पुनःस्थापित करा जाय",
+ "passwordremindertitle": "{{SITENAME}} कय लिए नवाँ अस्थाई गुप्त कुंजी",
+ "passwordremindertext": "केहु दुसर (शायद आपय, $1 आइ॰पी ठहर से) {{SITENAME}} ($4) पे इस्तेमाल कय खर्तिन नँवा गुप्त कुंजी मङावा गा है। सदस्य \"$2\" कय खर्तिन एकठु अस्थायी गुप्त कुंजी बनाइ दिहा गा है, अव इ अभीन \"$3\" होय। यदि इ आपय कय मंशा रहा, तव अब आप कय सत्रारंभ करय कय एकठु नँवा गुप्त कुंजी चुनयक् परि।\nआप कय अस्थायी गुप्त कुंजी कय समय {{PLURAL:$5 दिन}} में खतम होई जाइ।\nयदि इ चिरौरी केहु दुसर करे है, या आप आपन पुरान गुप्त कुंजी अब नाइ बदलयक् चाहा जात है काहे से आप कय आपन पुरान गुप्त कुंजी याद आई गा है, तव आप इ संदेश कय अनदेखा कई सका जात है, अव आपन पुरान गुप्त कुंजी कय पहिलेक जैसन इस्तेमाल कई सका जात है।",
+ "noemail": "\"$1\" सदस्य कय लिये कवनो भी ई-मेल पता दर्ज नाइ कई गा है।",
+ "noemailcreate": "आप कय असली ई-मेल ठाँव देक परि।",
+ "passwordsent": "\"$1\" कय ई-मेल ठाँव पे एक नवाँ गुप्त कुंजी भेजि गा है।\nई-मेल पावेक बाद कृपया दुबारा लॉग इन करा जाई।",
+ "blocked-mailpassword": "आप कय आइ॰पी ठाँव कय सम्पादन करे से अवरुद्ध कई गा है, अउर गलत इस्तेमाल रोकेक लिये गुप्त कुंजी फिरसे पावे कय सुविधा इ आइ॰पी पे बंद कई गा है।",
+ "eauthentsent": "दर्ज करल ई-मेल ठहर पे एकठु फुरवासाखी ई-मेल भेज दिहा गा है।\nआप का उ ई-मेल में दिहा निर्देशन् कय अनुसार ई-मेल ठहर कय सत्यापन करेक परि,ओकरे बादय ही हिँया से कवनो दूसर ई-मेल भेज जाई।",
+ "throttled-mailpassword": "पिछला {{PLURAL:$1|एक घंटा|$1 घंटन्}} मे एकठु गुप्त कुंजी स्मरण-पत्र भेजी गा है।\nदुरुपयोग से बचाव कय लिए हर {{PLURAL:$1|एक घंटा|$1 घंटन्}} में एक्कय गुप्त कुंजी स्मरण-पत्र भेजी जात है।",
+ "mailerror": "ई-मेल भेजय में त्रुटि: $1",
+ "acct_creation_throttle_hit": "आप कय आइ॰पी ठहर से आवे वाले मनई लोग पिछला चौबीस घंटन् में इ विकि पे {{PLURAL:$1|एक खाता|$1 खाता}} बनाई चुका हैं, इ समयावधि में ई अधिकतम सीमा होय।\n यह समय इ आइ॰पी कय प्रयोग करय वाले आगंतुक अउर खाता नाइ खोल सकत हैं।",
+ "emailauthenticated": "आप कय ई-मेल ठहर $2 कय $3 बजे सत्यापित कै गय।",
+ "emailnotauthenticated": "आप कय ई-मेल ठहर कय यकिन नाइ भा है।\nनीचे दीहा कवनो भी सुविधा कय लिये आप कय ई-मेल नाई भेजी जाई।",
+ "noemailprefs": "इ सुविधन् कय प्रयोग करेक खर्तिन आपन पसंद में ई-मेल ठहर दिहा जाय।",
+ "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यदि इ खाता गलती से खोला गा है, तव आप इ मैसेज कय अनदेखा कै सका जात है।",
+ "login-throttled": "आप अबहिनय में कयु दाँइ लॉग इन करेक प्रयास किहा गा है।\nफिरसे प्रयास करय से पहीले तनी $1 रुका जाय।",
+ "login-abort-generic": "आप कय लाग-इन असफल रहा - निष्फलित",
+ "login-migrated-generic": "आप कै खाता घुस्काई गय,अब आप कय सदस्य नाँव इ विकि पे नाई अहै ।",
+ "loginlanguagelabel": "भाषा: $1",
+ "suspicious-userlogout": "आप कय लॉग आउट करेक चिरौरी अस्वीकृत कई दिहा गा है काहे से अइसन लागत हय है कि ई कवनो खराब ब्राउज़र या कैश करय वाला प्रॉक्सी से भेजा ग रहा।",
+ "createacct-another-realname-tip": "असली नाँव देब आवश्यक नाई है।\nयदि आप देवा जाई तव एकर प्रयोग सदस्यन् कय योगदान कय लिये श्रेय (attribution) देक लिये कई जाई।",
+ "pt-login": "लॉग इन",
+ "pt-login-button": "लॉग इन",
+ "pt-createaccount": "खाता बनावा जाय",
+ "pt-userlogout": "बहरे निकरा जाय",
+ "php-mail-error-unknown": "PHP कय mail() फ़ंक्शन में अज्ञात त्रुटि होई गवा।",
+ "user-mail-no-addy": "ई-मेल ठहर कय बिना ई-मेल भेजय कय कोशिश कीहा गय।",
+ "user-mail-no-body": "एकठु खाली या बहुत छोट ई-मेल भेजय कय कोशिश कई गा है।",
+ "changepassword": "गुप्त कुंजी बदला जाय",
+ "resetpass_announce": "लॉग इन पुरा करेक लिये आप कय एक नँवा गुप्त कुंजी (पासवर्ड) देक परि।",
+ "resetpass_header": "खाता कय गुप्त कुंजी बदला जाय",
+ "oldpassword": "पुरान गुप्तकुंजी:",
+ "newpassword": "नँवा गुप्तकुंजी:",
+ "retypenew": "गुप्तकुंजी एक दाँइ अउर लिखा जाय:",
+ "resetpass_submit": "गुप्तकुंजी लिखा जाए अव लॉग इन करा जाय",
+ "changepassword-success": "आप कय गुप्तकुंजी बदल़ी गय!",
+ "changepassword-throttled": "आप अबहिनय में कयु दाँइ लॉग इन करेक प्रयास किहा गा है।\nफिरसे प्रयास करय से पहीले तनी $1 रुका जाय।",
+ "resetpass_forbidden": "गुप्तकुंजी नाइ बदल़ सका जात है",
+ "resetpass-no-info": "इ पन्ना कय सीधय प्रयोग करेक लिए आप कय लॉग इन करेक परि।",
+ "resetpass-submit-loggedin": "गुप्तकुंजी बदला जाय",
+ "resetpass-submit-cancel": "रद्द करा जाय",
+ "resetpass-wrong-oldpass": "अवैध अस्थायी या वर्तमान गुप्तकुंजी।\nसंभव है कि या तो आप पहिलवे सफलतापूर्वक आपन कूटशब्द बदल लिहा गा है , या आपन एक नवा अस्थायी गुप्तकुंजी कय अनुरोध किहा गा है।",
+ "resetpass-recycled": "रीसेट करेक लिए नवा पासवर्ड में कृपया आपन वर्तमान पासवर्ड कय अलावा कवनो दुस़र पासवर्ड कय प्रयोग करा जाय।",
+ "resetpass-temp-emailed": "आप एकठु अस्थायी ईमेल करल कोड कय साथे लॉग इन किहा गय।\nलॉग इन पुरा करेक लिए आप कय हिँया एकठु नँवा पासवर्ड सेट करेक परि:",
+ "resetpass-temp-password": "अस्थायी गुप्तकुंजी:",
+ "resetpass-abort-generic": "गुप्तकुंजी में बदलाव कवनो एक्सटेंशन से रुकि गवा है।",
+ "resetpass-expired": "आप कय पासवर्ड कय वैधता अवधि खतम होई चुका है। कृपया लॉग इन करेक लिए एकठु नँवा पासवर्ड सेट करा जाय।",
+ "resetpass-expired-soft": "आप कय पासवर्ड कय वैधता समय होइ गवा है अव ओका रीसेट करेक ज़रूरत है। कृपया एकठु नँवा पासवर्ड चुना जाय, या बाद में रीसेट करेक लिए \"{{int:resetpass-submit-cancel}}\" पे क्लिक करा जाय।",
+ "resetpass-validity-soft": "आप कय पासवर्ड मान्य नाई है: $1 \n\nकृपया अब एक नवा पासवर्ड चुना जाय, या ओका बाद में पुनर्स्थापित करेक लिए \"{{int:resetpass-submit-cancel}}\" पे क्लिक करा जाय।",
+ "passwordreset": "गुप्त कुंजी पुनःस्थापित(रीसेट) करा जाय",
+ "passwordreset-text-one": "आपन गुप्तकुंजी रीसेट करेक लिए ई फ़ॉर्म भरा जाय।",
+ "passwordreset-text-many": "{{PLURAL:$1|ईमेल कय माध्यम से एक अस्थायी पासवर्ड पावेक लिए कवनो एक डिब्बा भरा जाय।}}",
+ "passwordreset-legend": "गुप्तकुंजी पुनःस्थापित(रीसेट) करा जाय",
+ "passwordreset-disabled": "गुप्तकुंजी रीसेट करेक इ विकी अक्षम है।",
+ "passwordreset-emaildisabled": "इ विकि पे ई-मेल सुविधा अक्षम कई दीहा है।",
+ "passwordreset-username": "सदस्यनाँव:",
+ "passwordreset-domain": "डोमेन:",
+ "passwordreset-capture": "परिणामस्वरूप बनावल ई-मेल देखा जाय?",
+ "passwordreset-capture-help": "अगर आप इ चेकबॉक्स कय टिक करा जाइ तव ई-मेल (अस्थायी गुप्तकुंजी कय साथे) आप कय देखाई अव सदस्य कय भी भेजी जाइ।",
+ "passwordreset-email": "ई-मेल ठाँव:",
+ "passwordreset-emailtitle": "{{SITENAME}} पे खाता कय विवरण",
+ "passwordreset-emailtext-ip": "केहु (शायद आप कय, $1 आइ॰पी ठहर से) {{SITENAME}} ($4) पे अपने {{PLURAL:$3|गुप्त कुंजी}} कय रीसेट करेक अनुरोध करे है। इ ई-मेल ठहर से निचे कय{{PLURAL:$3|खाता जोड़ान् है}}:\n\n$2\n\n{{PLURAL:$3|इ}} अस्थायी गुप्त कुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि। आप लॉग इन कई कय एकठु नँवा गुप्त कुंजी अभीनै चुन लुहा जाए। यदि इ अनुरोध केहु अउर करे है, या फिर आप कय आपन गुप्त कुंजी याद आइ गा है, औ आप {{PLURAL:$3|आपन}} गुप्त कुंजी नाइ बदलेक चाहा जात है तव आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कै सका जात है।",
+ "passwordreset-emailtext-user": "{{SITENAME}} ($4) पे सदस्य $1 आपकय {{PLURAL:$3|खाता}} कय गुप्तकुंजी कय रीसेट करेक अनुरोध करे हैं। इ ई-मेल ठहर से इ {{PLURAL:$3|खाता जोडान है}}:\n\n$2\n\n{{PLURAL:$3|ई}} अस्थायी गुप्तकुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि।\nआप लॉग इन कइकै एकठु नँवा गुप्त कुंजी अभीन लै लेक चाहि। यदि इ अनुरोध केहु दुसर करे है, या फिर आप कय आपन गुप्त कुंजी याद आई गा है, अव आप {{PLURAL:$3|आपन}} गुप्तकुंजी नाई बदलेक चाहा जात है, आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कइ सका जात है।",
+ "passwordreset-emailelement": "सदस्यनाँव: $1\nअस्थायी गुप्तकुंजी: $2",
+ "passwordreset-emailsent": "एक गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
+ "passwordreset-emailsent-capture": "नीचे जवन देखावा है ओकर गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
+ "passwordreset-emailerror-capture": "नीचे दिहा गुप्त कुंजी रीसेट ई-मेल पैदा भा रहा, लेकिन ओका {{GENDER:$2|सदस्य}} कय भेजब असफल रहा।\nत्रुटि: $1",
+ "changeemail": "ईमेल ठाँव बदला जाय",
+ "changeemail-text": "अपना ई-मेल पता परिवर्तित करने के लिए इस फ़ॉर्म को पूरा करें। इस बदलाव की पुष्टि करने के लिये आपको अपना कूटशब्द पुनः लिखना पड़ेगा।",
+ "changeemail-no-info": "इ पन्ना कय सीधय प्रयोग करेक लिए आप कय लॉग इन करेक परि।",
+ "changeemail-oldemail": "अबहिन कय ई-मेल ठहर:",
+ "changeemail-newemail": "नँवा ई-मेल ठहर:",
+ "changeemail-none": "(केहु नाँइ)",
+ "changeemail-password": "आप कय {{SITENAME}} गुप्तकुंजी:",
+ "changeemail-submit": "ई-मेल बदला जाय",
+ "changeemail-throttled": "आप अबहिनय में कयु दाँइ लॉग इन करेक प्रयास किहा गा है।\nफिरसे प्रयास करय से पहीले तनी $1 रुका जाय।",
+ "resettokens": "टोकन रीसेट करा जाय",
+ "resettokens-text": "जो टोकन आपके खाते से सम्बद्ध कुछ विशिष्ट व्यक्तिगत जानकारी प्रदान करते हैं, आप उन्हें यहाँ रीसेट कर सकते हैं।\n\nयदि आपने उन्हें गलती से किसी को दिखा दिया है या फिर आपका खाता हैक हो गया है तो आपको इन्हें रीसेट कर देना चाहिए।",
+ "resettokens-no-tokens": "रीसेट करेक लिए कवनो टोकन नाई है।",
+ "resettokens-legend": "टोकन रीसेट करा जाय",
+ "resettokens-tokens": "टोकन:",
+ "resettokens-token-label": "$1 (वर्तमान मूल्य: $2)",
+ "resettokens-watchlist-token": "[[Special:Watchlist|आप कय ध्यानसूची कय पन्नन् में बदलाव]] कय वेब फ़ीड (Atom/RSS)कय नाते टोकन",
+ "resettokens-done": "टोकन रीसेट कई गय।",
+ "resettokens-resetbutton": "चुनल टोकन रीसेट करा जाय",
+ "bold_sample": "मोट लेख",
+ "bold_tip": "मोट लेख",
+ "italic_sample": "तिरछा लेख",
+ "italic_tip": "इटैलिक लेख",
+ "link_sample": "कड़ी शीर्षक",
+ "link_tip": "आंतरिक कड़ी",
+ "extlink_sample": "http://www.example.com कड़ी शीर्षक",
+ "extlink_tip": "बाहरी कड़ी (उपसर्ग http:// जरुर लगावा जाई)",
+ "headline_sample": "शीर्षक लेख",
+ "headline_tip": "द्वितीय-स्तर शीर्षक",
+ "nowiki_sample": "अप्रारूपित लेख यहँ डारा जाय",
+ "nowiki_tip": "विकि प्रारूपण नज़रंदाज़ करा जाय",
+ "image_tip": "एम्बेड करल फ़ाइल",
+ "media_tip": "फ़ाइल कय कड़ी",
+ "sig_tip": "आप कय हस्ताक्षर अव समय",
+ "hr_tip": "सिधा लाइन (कम इस्तेमाल करा जाई)",
+ "summary": "सारांश:",
+ "subject": "विषय/शीर्षक:",
+ "minoredit": "ई छोट सम्पादन होय ।",
+ "watchthis": "ई पन्ना कय ध्यानसुची मे डारा जाय",
+ "savearticle": "पन्ना सहेजा जाय",
+ "preview": "झलक",
+ "showpreview": "झलक देखावा जाय",
+ "showdiff": "बदलाव देखावा जाय",
+ "blankarticle": "<strong>चेतावनी:</strong>आप कय बनावा पन्ना खाली अहै ।\nअगर आप \"{{int:savearticle}}\" दबावा जाई तव,बिना कवनो पाठ कय पन्ना बनि जाई ।",
+ "anoneditwarning": "<strong>चेतावनी:</strong>आप लाग इन नाई करा गा है ।जब आप सम्पादन करा जाई तव आप कय IP address सब कय बिलगाइ। जब आप <strong>[$1 log in]</strong> या <strong>[$2 create an account]</strong> करा जाइ तब आप कय सम्पादन आप कय सदस्यनाँव से जुडी जाई अव आप कय अउर सुविधओ मिली।",
+ "anonpreviewwarning": "''आप लॉग्ड नाई होआ जात है। पन्ना सहेजे पे आप कय आइ॰पी ठाँव इ पन्ना कय इतिहास में दर्ज कइ जाई।''",
+ "missingsummary": "'''ध्यान दिहा जाय:''' आप संपादन सारांश नाइ दिहा गा है।\nअगर आप दुबारा \"{{int:savearticle}}\" पे क्लिक करा जाई तव आप कय संपादन बिना सारांश कय सहेज जाई।",
+ "selfredirect": "<strong>चेतावनी:</strong> आप इ पन्नवा कय इहि से निर्देश करय जावा जात है.\nआप या तव गलत लक्ष्य पे पुनर्निर्देश करा गा है, या तव गलत पन्ना संपादन करा जात है ।\nअगर आप \"{{int:savearticle}}\" पे फिरसे क्लिक करा जाइ तो इ पुनर्निर्देश बनि जाइ ।",
+ "missingcommenttext": "कृपया नीचे टिप्पणी दिहा जाय।",
+ "missingcommentheader": "'''ध्यान दिहा जाय:''' आप इ टिप्पणी कय कवनो शिर्षक नाइ दिहा गा है।\nअगर आप दुबारा \"{{int:savearticle}}\" पे क्लिक करा जाई तव आप कय बदलाव बिना शिर्षक कय सहेज जाई।",
+ "summary-preview": "सारांश कय झलक:",
+ "subject-preview": "विषय/शीर्षक कय झलक:",
+ "blockedtitle": "सदस्य अवरुद्ध है",
+ "blockedtext": "'''आप कय सदस्यनाँव या आइ॰पी ठहर पे रोक लाग है ।'''\n\nरोक $1 लगायँ रहें।\nरोक कय कारण ''$2'' होय \n\n* रोक कय सुरुवात भय: $8\n* रोक खतम होइ: $6\n* रोक इकाई: $7\n\nइ रोक कय बारे में चर्चा करेक लिए आप $1 या कवनो दुसर [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कै सका जात है।\nअगर आप [[Special:Preferences|आपन पसंद]] में वैध ई-मेल पता देवा गा है तब्बै आप 'ई-मेल भेजय' वाला सुविधा कय इस्तेमाल कई सका जात है औ आप कय एकर इस्तेमाल करै कय कवनो रोक नाइ लगावा है।\nआप कय अभीन कय आइ॰पी ठहर $3 होय अव रोक क्रमांक #$5 होय।\nआपन कवनो भी प्रश्न में कृपया इ कुल जानकारी शामिल करा जाइ।",
+ "autoblockedtext": "एक्ठु अउर सदस्य आपय कय आइ॰पी कय प्रयोग करत रहें औ ओन्है $1 रोक लगाए रहें। इही कय नाते आपो कय आइ॰पी ठहर स्वचालित रूप से रुक गा है।\nरोक करय कय कारण होय:\n\n:''$2''\n\n* रोक कय सुरुवात : $8\n* रोक खतम होइ: $6\n* रोकि जाय वाले सदस्य: $7\n\nरोक कय चर्चा करय कय लिए आप $1 या कवनो दुसर [[{{MediaWiki:Grouppage-sysop}}|प्रबंधक]] से संपर्क कै सका जात है।\n\nकृपया ध्यान देवा जाय कि यदि आप कय \"इ सदस्य कय ई-मेल भेजा जाय\" वाला सुविधा कय प्रयोग करय चाहा जात है तव आपकय [[Special:Preferences|पसंद]] में वैध ई-मेल ठहर होएक चाहि औ एकर प्रयोग आपकय खर्तिन खुला होएक चाही।\n\nआपकय मौजूदा आइ॰पी ठहर $3 होय औ अवरोध क्रमांक #$5 होय।\nआप कय कवनो प्रश्न में कृपया ई कुल जानकारी शामिल होएक चाही।",
+ "blockednoreason": "कवनो कारण नाइ दिहा है",
+ "whitelistedittext": "पन्ना संपादन करेक लिये आप कय $1 करेक परि।",
+ "confirmedittext": "संपादन करय से पहिले आपन ई-मेल प्रमाणित करब आवश्यक है।\nकृपया आपन [[Special:Preferences|सदस्य वरीयता]] में जाईकय आपन ई-मेल ठाँव दिहा जाय अव ओका प्रमाणित करा जाय।",
+ "nosuchsectiontitle": "अईसन कवनो अनुभाग शीर्षक नाई है",
+ "nosuchsectiontext": "आप अईसन अनुभाग कय सम्पादन करेक प्रयास करा जात है जवन अस्तित्व में नाई है।\nसंभव है कि जब आप पन्ना पढ़ा जात रहा तब ओका अपने जगह से हिलावा रहा गय या तो हटाई दिहा गा है।",
+ "loginreqtitle": "लॉग इन आवश्यक है",
+ "loginreqlink": "लॉग इन",
+ "loginreqpagetext": "अउर पन्ना देखेक लिये आप कय $1 करब आवश्यक है।",
+ "accmailtitle": "गुप्तकुंजी भेजी गय।",
+ "accmailtext": "[[User talk:$1|$1]] कय लिए एक यंत्र जनित गुप्त कुंजी $2 कय भेज दिहा गा है। लॉगिन करेक बाद एका '''[[Special:ChangePassword|गुप्त कुंजी बदला जाय]]'' वाला पन्नन् पे बदल सका जात है।",
+ "newarticle": "(नँवा)",
+ "newarticletext": "आप अईसन पन्ना पे आवा गा है जवन अभीन तक नाई बनावा है।\nपन्ना बनावेक लिये नीचे कय बौक्स में पाठ लिखा जाय। ढेर जानकारी कय लिये [$1 सहायता पन्ना] देखा जाय।\nअगर आप हिँया गलती से आवा गा हैं तव आपन ब्राउज़र कय बैक ('''back''') बटन पे क्लिक करा जाय।",
+ "anontalkpagetext": "----''ई बातचीत पन्ना उ बेनामी सदस्यन् कय खर्तीन होय जे या तव खाता नाई खोलें है या खाता कय प्रयोग नाइ करत हैं।\nइहिकै नाते वय लोगन कय पहिचान कय खर्तीन हम्मन कय वय लोगन कय आइ॰पी ठहर कय प्रयोग करेक परत है।\nआइ॰पी ठहर कयु सदस्यन् कय एक्कय होइ सकत है।\nयदि आप कवनो बेनामी सदस्य होआ जाय अव आप कय लागत है कि आप कय बारे में अप्रासंगिक टीका टिप्पणी कई गा है तव कृपया [[Special:UserLogin/signup|सदस्यता लिहा जाय]] या [[Special:UserLogin|सत्रारंभ करा जाय]] ताकि अउर बेनामी सदस्यन् में से आप कय अलग से पहिचान सका जाय।''",
+ "noarticletext": "अभीन इ पन्ना पे कवनो सामग्री नाई है।\nआप अउर पन्नन् में [[Special:Search/{{PAGENAME}}|इ शीर्षक कय खोज]] कई सका जात है,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} सम्बन्धित लॉग खोज सका जात है],\nया इस पृष्ठ को [{{fullurl:{{FULLPAGENAME}}|action=edit}} सम्पादित] कर सकते हैं</span>।",
+ "noarticletext-nopermission": "अभीन इ पन्ना पे कवनो चिज नाई है।\nआप अउर पन्नन् में [[Special:Search/{{PAGENAME}}|इ शीर्षक कय खोज]] कई सका जात है,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} से सम्बन्धित लॉग खोज सका जात है] </span>लेकिन आप कय इ पन्ना बनावे कय अनुमति नाई है ।",
+ "missing-revision": "\"{{FULLPAGENAME}}\" पन्ना कय अवतरण #$1 नाई है।\n\nखास कइकै ई एकठु मेटावल पन्ना कय पुरान लिंक पे क्लिक करय से होत है।\nढेर जानकारी कय खर्तिन आप [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] देख सका जात है।",
+ "userpage-userdoesnotexist": "सदस्य खाता \"$1\" पंजीकृत नाई है।\nकृपया जाँच लिहा जाय कि आप ई पन्ना संपादन करय या बनावे चाहा जात है या नाहीं।",
+ "userpage-userdoesnotexist-view": "सदस्य \"$1\" पंजीकृत नाइ है।",
+ "blocked-notice-logextract": "ई सदस्य अभीन अवरोधित है।\nसदंर्भ कय लिए ताज़ातरीन अवरोध लॉग प्रविष्टि नीचा दीहा है:",
+ "clearyourcache": "'''ध्यान दिहा जाय:''' सहेजय कय बाद बदलाव देखयक खर्तिन आप कय आपन ब्राउज़र कय कैश खाली करेक परी सकत है।\n* '''फ़ायरफ़ॉक्स / सफ़ारी:''' ''Reload'' (रीलोड) दबावत समय ''Shift'' (शिफ़्ट) दबावा जाय, या फिर ''Ctrl-F5'' (कंट्रोल-F5) या ''Ctrl-R'' (कंट्रोल-R) दबावा जाय (मैक पे ''⌘-R'')\n* '''गूगल क्रोम:''' ''Ctrl-Shift-R'' (कंट्रोल-शिफ़्ट-R) दबावा जाय (मैक पे ''⌘-Shift-R'')\n* '''इन्टर्नेट एक्सप्लोरर:''' ''Ctrl'' (कंट्रोल) दबाईकय ''Refresh'' (रिफ़्रेश) करा जाय या ''Ctrl-F5'' (कंट्रोल-F5) दबावा जाय\n* '''ऑपेरा:''' ''Tools → Preferences'' (उपकरण → पसंद) में कैश साफ़ करा जाय",
+ "usercssyoucanpreview": "'''टिप''': सहेजय से पहिले आपन नँवा सी॰एस॰एस जाँचय खर्तिन \"{{int:showpreview}}\" बटन कय प्रयोग करा जाय।",
+ "userjsyoucanpreview": "'''टिप''': सहेजय से पहिले आपन नँवा जावास्क्रिप्ट जाँचय खर्तिन \"{{int:showpreview}}\" बटन कय प्रयोग करा जाय।",
+ "usercsspreview": "'''ध्यान दिहा जाय कि आप आपन सी॰एस॰एस कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+ "userjspreview": "'''ध्यान दिहा जाय कि आप आपन जावास्क्रिप्ट कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+ "sitecsspreview": "'''ध्यान दिहा जाय कि आप ई सी॰एस॰एस कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+ "sitejspreview": "'''ध्यान दिहा जाय कि आप ई जावास्क्रिप्ट कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+ "userinvalidcssjstitle": "'''चेतावनी:''' \"$1\" नाव कय कवनो त्वचा नाइ है।\nबदलल .css औ .js पन्नन कय शीर्षक नीचे स्तर कय लिपि (lowercase) कय प्रयोग करत है। उदाहरण: {{ns:user}}:Foo/vector.css नाई की {{ns:user}}:Foo/Vector.css",
+ "updated": "(अपडेट करल)",
+ "note": "'''सूचना:'''",
+ "previewnote": "'''याद रख्खा जाय, ई खाली एक झलक होय।'''\nआप कय बदलाव अभीन तक नाई सहेजा है!",
+ "continue-editing": "संपादन क्षेत्र मे चला जाय",
+ "previewconflict": "ई झलक ऊपरी पाठ सम्पादन क्षेत्र में करल बदलाव देखावत है, औ यदि आप अभीन सहेजा जाई तव इहै पाठ सहेज़ जाइ।",
+ "session_fail_preview": "'''क्षमा करा जाय! सेशन डाटा कय नष्ट होएक कारण आप कय बदलाव नाई सहेज मिला।'''\nकृपया फिरेसे प्रयास करा जाय।\nअगर एकरे बाद़ोमें अइसनय होइ तव कृपया [[Special:UserLogout|लॉग आउट]] कई कय फिरसे लॉग इन करा जाय।",
+ "session_fail_preview_html": "'''क्षमा करा जाय! सेशन डाटा नष्ट होएक नाते आपकय बदलाव नाई सहेजि गय।'''\n\n''काहे से {{SITENAME}} पे raw HTML सक्षम है, जावास्क्रिप्ट हमलन् से बचाव कय खर्तिन झलक नाइ देखाई गा है।''\n\n'''अगर ई आप कय सहि संपादन प्रयास रह, तव कृपया फिरसे प्रयास करा जाय।'''\nअगर एकरे बाद़ोमें अइसनय होइ तव कृपया [[Special:UserLogout|लॉग आउट]] कैकय फिरसे लॉग इन करा जाय।",
+ "token_suffix_mismatch": "'''आप कय करल बदलाव रद्द कै गा है काह से आपकय क्लायंट आपकय संपादन टोकन में दिहा विरामचिन्हन् में बदलाव करे हैं।'''\nलेख कय पाठ में खराबी ना आवे इहि कय नाते आपकय बदलाव रद्द कै गा है।\nअइसन तब्बय होइ सकत है जब आप कवनव खराब वेब-आधारित अनामक प्रौक्सी प्रयोग करा जात होय।",
+ "edit_form_incomplete": "'''सम्पादन फ़ॉर्म कय कुछ हिस्सा सर्वर तक नाइ पहुँच पाए; जाँच लिहा जाय कि आप कय द्वारा करल बदलाव वइसय है कि नाइ, अउर सहेजय कय प्रयास करा जाय।'''",
+ "editing": "$1 सम्पादन",
+ "creating": "$1 बनावा जात है",
+ "editingsection": "$1 सम्पादन करा जात है (अनुभाग)",
+ "editingcomment": "$1 सम्पादन करा जात है (नँवा अनुभाग)",
+ "editconflict": "संपादन अंतर्विरोध: $1",
+ "explainconflict": "आप कय द्वारा सम्पादन शुरू करय कय बाद से कवनो दुसर मनई इ पन्ना में बदलाव करे हैं।\nऊपरी पाठ सम्पादन क्षेत्र में अभिन कय पाठ देखाइ गा है।\nनिचला क्षेत्र में आप कय बदलाव देखाइ गा है।\nआप कय आपन बदलाव अबहिन कय पाठ में अपने से एकट्ठा करेक परि।\nआपके \"{{int:savearticle}}\" पर क्लिक करने पर '''केवल''' ऊपरी क्षेत्र में दिखने वाला पाठ संजोया जायेगा।",
+ "yourtext": "आप कय पाठ",
+ "storedversion": "सहेज़ल अवतरण",
+ "nonunicodebrowser": "'''सावधान: आप कय ब्राउज़र युनिकोड कय स्वीकार नाइ करत है।'''\nआप से बढिया संपादन होएक लिये: ग़ैर-ASCII कैरैक्टर षट्‍पदी कोड (hexadecimal) में देखाइ जाई।",
+ "editingold": "'''चेतावनी: आप इ पन्ना कय पुरान(Out of Date) अवतरण संपादित करा जात है।'''\nअगर आप एका सहेजा जाइ , तव इ अवतरण कय बाद करल कुल बदलाव नष्ट होइ जाइ।",
+ "yourdiff": "अंतर",
+ "copyrightwarning": "कृपया ध्यान दिहा जाय कि {{SITENAME}} मे करल कुल योगदान $2 शर्त कय निचे होंइ (ढेर जानकारी कय लिये $1 देखा जाय)।\nयदि आप आपन योगदान कय लगातार बदलत अव फिर से बटत़ नाइ देखय चाहा जात है तव यँह योगदान ना करा जाय।<br />\nआप इहो भी प्रमाणित करा जात है कि इ आप अपने से लिखा गा है या सार्वजनिक क्षेत्र या कवनो समान मुक्त स्रोत से प्रतिलिपित करा गा है।\n'''कॉपीराइट सुरक्षित काम कय बिना अनुमति कय यहँ ना करा जाय!'''",
+ "copyrightwarning2": "{{SITENAME}} पे करल कवनो भी योगदान अउर सदस्य लोग बदलि या हटाइ सकत हैँ ।\nयदि आप आपन योगदान कय लगातार बदलत अव फिर से बटत़ नाइ देखय चाहा जात है तव यँह योगदान ना करा जाय।<br />\nआप इहो भी प्रमाणित करा जात है कि इ आप अपने से लिखा गा है या सार्वजनिक क्षेत्र या कवनो समान मुक्त स्रोत से प्रतिलिपित करा गा है।\n'''कॉपीराइट सुरक्षित काम कय बिना अनुमति कय यहँ ना करा जाय!'''",
+ "longpageerror": "'''त्रुटि: आप कय दिहा पाठ {{PLURAL:|$1 किलोबाइट|$1 किलोबाइट}} लंमा है, जवन {{PLURAL:|$2 किलोबाइट|$2 किलोबाइट}} कय सीमा से बहरे है।\nएका नाइ सहेज सका जात है।'''",
+ "readonlywarning": "'''सावधान: डाटाबेस कय रख-रखाव कय खत्तिर बंद कै दिहा गा है, इहि कय नाते आप कय बदलाव अभीन नाइ सहेजि सका जात है।\nअगर आप चाहा जाय तव इ चिज कय बाद कय खत्तिर कॉपी-पेस्ट कइकय कवनो टेक्स्ट फ़ाइल में रखि सका जात है।'''\n\nबंद करय वाले प्रबंधक बंद करे कय इ कारण दिहे हैं: $1",
+ "protectedpagewarning": "'''चेतावनी: इ पन्ना कय सुरक्षित कई गा है अव एका खालि प्रबंधक सम्पादित कई सकत हँय।'''\nनँवा लॉग प्रविष्टि संदर्भ कय लिये नीचे दीहा है:",
+ "semiprotectedpagewarning": "<strong>नोट:</strong> ई पन्ना बचावा है इही कय नाते खालि रजिष्टर करल सदस्य एका सम्पादन कई सकत हैं ।\nसंदर्भ कय खर्तिन अन्तिम दाइ कय लाग निचे दिहा है:",
+ "cascadeprotectedwarning": "'''सावधान:''' इ पन्ना निचे दिहा सुरक्षा-सीढ़ी {{PLURAL:$1|पन्ना से|पन्नन् से}} जोडाएक नाते सुरक्षित है, अव खाली प्रबंधक एहमा बदलाव कै सकत हैं:",
+ "titleprotectedwarning": "'''चेतावनी: इ पन्ना सुरक्षित है अव एका बनावेक खत्तिर [[Special:ListGroupRights|विशेष अधिकारन्]] कय आवश्यकता है।'''\nसंदर्भ कय खत्तिर नँवा लॉग प्रविष्टि नीचे दीहा है:",
+ "templatesused": "ई पन्ना में इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
+ "templatesusedpreview": "ई झलक में इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
+ "templatesusedsection": "ई अनुभागमें इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
+ "template-protected": "(सुरक्षित)",
+ "template-semiprotected": "(अर्ध-सुरक्षित)",
+ "hiddencategories": "ई पन्ना निचे दिहा $1 लुकुआवल {{PLURAL:$1|श्रेणी|श्रेणिन्}} में श्रेणीबद्ध है:",
+ "nocreatetext": "{{SITENAME}} पे नँवा पन्ना बनावे कय मिनहा कई गा है।\nआप पीछे जाईकय कवनो वर्तमान पन्ना कय संपादित कई सका जात है, या [[Special:UserLogin|नँवा ख़ाता खोला जाय /अन्दर हला जाय]] ।",
+ "nocreate-loggedin": "आप कय नँवा पन्ना बनावे कय अनुमति नाई है ।",
+ "sectioneditnotsupported-title": "अनुभाग सम्पादन समर्थित नाई है",
+ "sectioneditnotsupported-text": "इ पन्ना पे अनुभाग सम्पादन समर्थित नाई है",
+ "permissionserrors": "अनुमति त्रुटि",
+ "permissionserrorstext": "निचे दिहा {{PLURAL:$1|कारण|कारणन्}} कय नाते आप कय ऐसन करे कय अनुमति नाइ है:",
+ "permissionserrorstext-withaction": "आप कय $2 कय अनुमति नाई है,निचे दिहा {{PLURAL:$1|कारण|कारणन्}} कय नाते से:",
+ "recreate-moveddeleted-warn": "'''चेतावनी: आप एक्ठु अइसन पन्ना बनावे जावा जात है जवन पहिले मेटावा रहा।'''\n\nआप विचार करा जाय कि का इ पन्ना कय संपादन करब उचित रही।\nसुविधा कय लिये इ पन्ना कय हटावे या घुस्कावे कय लॉग इहै है:",
+ "moveddeleted-notice": "ई पन्ना मेटावा है।\nसंदर्भ कय खरतिन पन्ना कय मेटावे औ घुस्कावे कय लॉग नीचे दिहा है।",
+ "log-fulllog": "पूरा लॉग देखा जाय",
+ "edit-hook-aborted": "फंदा से संपादन बीचवे मे छोड दिहा है।\nउ कवनो कारण नाई बताए है।",
+ "edit-gone-missing": "पन्ना अद्यतित(अपडेट) नाई कई सका जात है।\nलागत है एका मेटाई दिहा है।",
+ "edit-conflict": "संपादन अंतर्विरोध",
+ "edit-no-change": "आप कवनो बदलाव नाई करा गा है,इहीकै नाते आप कय इ संपादन कय अनदेखा कै गा है।",
+ "postedit-confirmation-created": "पन्ना बनी गा है।",
+ "postedit-confirmation-restored": "पन्ना पुरान स्थिति पे लाई गय।",
+ "postedit-confirmation-saved": "आप कय सम्पादन सहेजी गय।",
+ "edit-already-exists": "नवा पन्ना नाई बनाई सका जात है।\nई पन्ना पहीलवे से मौजूद है।",
+ "defaultmessagetext": "सनेशा कय डिफ़ॉल्ट पाठ",
+ "content-failed-to-parse": "$1 कय लिए $2 सामग्री कय पार्स करय में विफल, त्रुटि: $3",
+ "invalid-content-data": "अवैध डाटा सामग्री",
+ "content-not-allowed-here": "[[$2]] पन्ना पे \"$1\" सामग्री मिनाही है।",
+ "editwarning-warning": "इ पन्ना से हटे कय बाद आप कय करल बदलाव गायब होइ जाइ।\nयदि आप लॉग इन करा गा है तव आप इ सूचना कय देखाब आपन पसंद कय \"{{int:prefs-editing}}\" भाग में बंद कई सका जात है।",
+ "editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नाई है",
+ "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मॉडल द्वारा समर्थित नाई है।",
+ "content-model-wikitext": "विकिटेक्स्ट",
+ "content-model-text": "सामान्य पाठ",
+ "content-model-javascript": "जावास्क्रिप्ट",
+ "content-json-empty-object": "खाली चिज",
+ "content-json-empty-array": "खाली एरे",
+ "expensive-parserfunction-warning": "'''चेतावनी:''' इ पन्ना पे बहुत ढेर संख्या में कीमती पार्सर फ़ंक्शनों कय प्रयोग कई गा है।\n\nएकर प्रयोग $2 से कम दाइ होएक चाहि, इ समय प्रयोग $1 दाइ कै गा {{PLURAL:$1|है}}।",
+ "expensive-parserfunction-category": "अईसन पन्ना जवन महङा पार्सर फ़ंक्शनन् कय ढेर प्रयोग करत हैं",
+ "post-expand-template-inclusion-warning": "'''चेतावनी:''' साँचा जोडे कय सीमा पार होई चुका है।\nकवनो-कवनो साँचा नाई जुड़ी।",
+ "post-expand-template-inclusion-category": "अईसन पन्ना जवने मे साँचा जोड़े कय सीमा पार होई गवा है",
+ "post-expand-template-argument-warning": "'''चेतावनी:''' इ पन्ना पे कवनो साँचा में कम-से-कम एकठु अइसन प्राचल है जवन बढ़ावे पे बहुत बड़ा होइ जाइ।\nअइसन प्राचलन् कय छोड़ दिहा गा है।",
+ "post-expand-template-argument-category": "अईसन पन्ना जवनेमें प्राचल छोड़ी दिहा है",
+ "parser-template-loop-warning": "साँचा चक्र मिला: [[$1]]",
+ "parser-template-recursion-depth-warning": "साँचा पुनरावर्ती गहराई सीमा पार ($1)",
+ "language-converter-depth-warning": "भाषा कन्वर्टर गहीराई सीमा से बहरे गय ( $1 )",
+ "node-count-exceeded-category": "पन्ना जवनन् में नोड-संख्या सीमा पार कई गा है",
+ "expansion-depth-exceeded-category": "पन्ना जवनेमें विस्तार गहिराई पार कई गा है",
+ "expansion-depth-exceeded-category-desc": "ई पन्ना विस्तार गहराई पार करत है।",
+ "expansion-depth-exceeded-warning": "पन्ना में विस्तार गहराई पार कई गा है",
+ "parser-unstrip-loop-warning": "Unstrip लूप मिला",
+ "parser-unstrip-recursion-limit": "Unstrip पुनरावर्तन सीमा पार कई गय ($1)",
+ "converter-manual-rule-error": "मैन्यूअल भाषा परिवर्तन नियम में त्रुटि",
+ "undo-success": "ई संपादन पहिले जैसन रहा वईसय कई सका जात है ।\nअईसन करेक लिये कृपया निचे लिखल पाठ कय ध्यान से दखीकय बदलाव सहेजा जाय।",
+ "undo-failure": "एकरे बीचे अउर बदलाव होएक कारण ई संपादन पहिले जैसन करब संभव नाई है।",
+ "undo-norev": "ई बदलाव वापिस नाई भय काहे से या तो एका पहीलवे से पलटाई गा है या फिर पन्ना हटाई दिहा है।",
+ "undo-nochange": "अईसन लागत है की ई सम्पादन कय पहिलवे पहिले जैसन कई दीहा है ।",
+ "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|बातचीत]]) कय करल बदलाव $1 कय पहिले जईसन कई गय",
+ "undo-summary-username-hidden": "लुकुआवल सदस्यन् कय करल बदलाव $1 कय पहिले जईसन कई गय",
+ "cantcreateaccounttitle": "खाता नाई खोली सका जात है",
+ "cantcreateaccount-text": "इ आइ॰पी ठहर ('''$1''') कय खाता बनावे कय [[User:$3|$3]] रोक लगाए हैँ।\n\nएकरे लिये $3 ''$2'' कारण दिहे हैं।",
+ "cantcreateaccount-range-text": "'''$1''' कय श्रेणी में आवे वाला आई॰पी ठहर से, जवनेमें आप कय आई॰पी ठहर ('''$4''') शामिल है, नँवा खाता बनावे कय लिए [[User:$3|$3]] अवरोधित कई गा है। \n\n$3 द्वारा दिया गया कारण है: \"$2\"",
+ "viewpagelogs": "इस पन्ना कय लॉग देखा जाय",
+ "nohistory": "इ पन्ना कय कवनो इतिहास नाई है।",
+ "currentrev": "अभिनै कय अवतरण",
+ "currentrev-asof": "$1 कय समय कय अवतरण",
+ "revisionasof": "$1 कय अवतरण",
+ "revision-info": "{{GENDER:$6|$2}} द्वारा परिवर्तित $1 कय अवतरण$7",
+ "previousrevision": "← पुरान अवतरण",
+ "nextrevision": "नँवा अवतरण →",
+ "currentrevisionlink": "अभिनै कय अवतरण",
+ "cur": "अभि",
+ "next": "अगला",
+ "last": "पिछला",
+ "page_first": "पहीला",
+ "page_last": "आखिरी",
+ "histlegend": "अन्तर चयन: अन्तर देखय खत्तिर पुरान अवतरणन् कय आगे दिहा रेडियो बॉक्स पे क्लिक किन जाय अव एण्टर कीन जाय या तव नीचे दिहा बटन पे क्लिक करा जाय<br />\nलिजण्ड: (चालू) = सद्य अवतरण कय बीचे में अन्तर,\n(आखिरी) = पिछले अवतरण के बीच में अन्तर, छो = छोटा बदलाव।",
+ "history-fieldset-title": "इतिहास कय विचरण करा जाय",
+ "history-show-deleted": "सूची में खाली लुकुआवल अवतरण देखा जाय",
+ "histfirst": "सबसे पुरान",
+ "histlast": "सबसे नँवा",
+ "historysize": "($1 {{PLURAL:$1|बाइट}})",
+ "historyempty": "(खाली)",
+ "history-feed-title": "अवतरण इतिहास",
+ "history-feed-description": "विकि मे उपलब्ध इ पन्ना कय अवतरण इतिहास",
+ "history-feed-item-nocomment": "$1 $3 कय $4 बजे",
+ "history-feed-empty": "अनुरोधित करल पन्ना अस्तित्व में नाई है।\nई पन्ना या तो मेटावा है या फिर एकर नाँव बदल दिहा है।\n[[Special:Search|विकि पे खोजा जाय]] कय प्रयोग करा जाय।",
+ "rev-deleted-comment": "(सम्पादन सारांश हटाई गय)",
+ "rev-deleted-user": "(सदस्यनाँव हटाई गय)",
+ "rev-deleted-event": "(लाग जानकारी हटाइ गय)",
+ "rev-deleted-user-contribs": "[सदस्यनाँव या आइ॰पी ठहर लुकुआई गय- सम्पादन योगदान में से लुकुआई गय]",
+ "rev-deleted-text-permission": "ई पन्ना अवतरण हटाई गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
+ "rev-suppressed-text-permission": "ई पन्ना अवतरण लुकुआइ गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
+ "rev-deleted-text-unhide": "ई पन्ना अवतरण हटाई गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।\nयदि आप चाहा जाय तव ई अवतरण कय [$1 देख सका जात है] ।",
+ "rev-suppressed-text-unhide": "ई पन्ना अवतरण लुकुआइ गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} लुकुआवे कय लॉग] में मिली सकत है।\nयदि आप चाहा जाय तव ई अवतरण कय [$1 देख सका जात है] ।",
+ "rev-deleted-text-view": "ई पन्ना कय अवतरण हटाई गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
+ "rev-suppressed-text-view": "ई पन्ना अवतरण लुकुआइ गा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
+ "rev-deleted-no-diff": "आप ई अंतर कय नाइ देख सका जात है काहे से एहमा से एकठु अवतरण '''लुकुआवा है'''।\nविवरण [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
+ "rev-suppressed-no-diff": "आप इ अंतर कय नाई देख सका जात अहै काहे से एहमा से एकठु अवतरण कय '''हटाई दिहा गा है'''।",
+ "rev-deleted-unhide-diff": "इ अंतर में से एकठु अवतरण '''हटावा है'''।\nविवरण [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली।\nयदि आप चाहा जाय तव इ अंतर कय [$1 देख सका जात हैं]।",
+ "rev-suppressed-unhide-diff": "ई अंतर मे से एकठु अवतरण लुकुआवा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} लुकुआवे कय लॉग] में मिली सकत है।\nयदि आप चाहा जाय तव ई अंतर कय [$1 देख सका जात है] ।",
+ "rev-deleted-diff-view": "ई अंतर मे से एकठु अवतरण हटावा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
+ "rev-suppressed-diff-view": "ई अंतर मे से एक्ठु अवतरण लुकुआवा है।\nएकर ढेर जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली सकत है।",
+ "rev-delundel": "देखावा जाय/लुकुआवा जाय",
+ "rev-showdeleted": "देखावा जाय",
+ "revisiondelete": "अवतरण हटावा जाय/पुनर्स्थापित करा जाय",
+ "revdelete-nooldid-title": "अमान्य लक्ष्य अवतरण",
+ "revdelete-nooldid-text": "इस क्रिया को करने के लिये आपने लक्ष्य अवतरण नहीं दिये हैं, या फिर आपने दिया हुआ अवतरण अस्तित्व में नहीं हैं या फिर आप सद्य अवतरण को छुपाने का प्रयत्न कर रहे हैं।",
+ "revdelete-no-file": "निर्दिष्ट फ़ाइल मौजूद नाई है।",
+ "revdelete-show-file-confirm": "का आप सही में फ़ाइल \"<nowiki>$1</nowiki>\" कय $2 कय $3 बजे बना, हटावल अवतरण कय देखय चाहा जात है?",
+ "revdelete-show-file-submit": "हाँ",
+ "revdelete-selected-text": "[[:$2]] {{PLURAL:$1|कय}} चयनित अवतरण:",
+ "revdelete-selected-file": "[[:$2]] {{PLURAL:$1|कय}} चयनित फ़ाइल अवतरण:",
+ "logdelete-selected": "{{PLURAL:$1|चुनल}} लॉग इवेंट:",
+ "revdelete-confirm": "यकिन करावा जाय कि आप इ काम करय चाहा जात है, आप एकर परिणाम समझा जात है, औ आप इ [[{{MediaWiki:Policy-url}}|नीति]] कय अनुसार करा जात है।",
+ "revdelete-suppress-text": "लुकुआवेक प्रयोग <strong>खाली</strong> इ परिस्थितन् में होएक चाहि:\n* संभावित अपमानजनक जानकारी\n* अनुपयुक्त निजी जानकारी\n*: <em>घर कय ठहर या दूरभाष, राष्ट्रीय पहिचान क्रमांक आदि।</em>",
+ "revdelete-legend": "दृश्य प्रतिबंध निश्चित करा जाय",
+ "revdelete-hide-text": "अवरतण पाठ",
+ "revdelete-hide-image": "फ़ाइल कय पाठ लुकुआवा जाय",
+ "revdelete-hide-name": "टार्गेट अव पारामिटर लुकुआवा जाय",
+ "revdelete-hide-comment": "संपादन सारांश",
+ "revdelete-hide-user": "संपादक कय सदस्यनाँव/आइ॰पी॰ ठहर",
+ "revdelete-hide-restricted": "प्रबंधक सहित कुल सदस्यन् से डाटा लुकुआवा जाय",
+ "revdelete-radio-same": "‍‌(ना बदला जाय)",
+ "revdelete-radio-set": "लुकुआवल",
+ "revdelete-radio-unset": "देखात है",
+ "revdelete-suppress": "प्रबंधक सहित कुल सदस्यन् से डाटा लुकुआवा जाय",
+ "revdelete-unsuppress": "पुनर्स्थापित अवतरणन् पे से प्रतिबन्ध हटावा जाय",
+ "revdelete-log": "कारण:",
+ "revdelete-submit": "चयनित {{PLURAL:$1|अवतरण}} पे लागू करा जाय",
+ "revdelete-success": "'''अवतरण दृश्यता सफलतापूर्वक अपडेट कई गय।'''",
+ "revdelete-failure": "'''अवतरण दृश्यता अपडेट नाइ भय:'''\n$1",
+ "logdelete-success": "'''लॉग दृष्यता बदलि गय।'''",
+ "logdelete-failure": "'''लॉग दृश्यता कय जमाव नाई भय:'''\n$1",
+ "revdel-restore": "देखावा जाय/लुकुआवा जाय",
+ "pagehist": "पन्ना कय इतिहास",
+ "deletedhist": "मेटावल इतिहास",
+ "revdelete-hide-current": "$2 कय, $1 बजे वाला मद नाई लुकुवाई गय: ई सबसे ताज़ा अवतरण होय।\nई नाइ लुकुआई सका जात है।",
+ "revdelete-show-no-access": "$1, $2 वाला चिज देखावत समय त्रुटि होइ गवा: इ चिज कय \"प्रतिबंधित\" चिन्हित कई गा है।\nआप यँह तक नाइ पहुँच सका जात है।",
+ "revdelete-modify-no-access": "$1, $2 वाला चिज कय बदलत समय त्रुटि होइ गवा: इ चिज कय \"प्रतिबंधित\" चिन्हित कई गा है।\nआप यँह तक नाइ पहुँच सका जात है।",
+ "revdelete-modify-missing": "मद क्रमांक $1 कय बदलत समय त्रुटि आई गवा: इ डाटाबेस में नाइ है!",
+ "revdelete-no-change": "'''चेतावनी:''' $2, $1 वाले चिज में पहिलवे से ही इ आप कय कहल दृश्यता सेटिङ रहा।",
+ "revdelete-concurrent-change": "$2, $1 वाला चिज कय बदलत समय त्रुटि आई गय: लागत है कि आपकय बदलत समय केहु अउर एहमा बदलाव कई दिहे हैं।\nकृपया लॉग देखा जाय।",
+ "revdelete-only-restricted": "$2, $1 कय तिथि कय आइटम कय लुकुआवे में त्रुटि: आप अउर दृश्यता विकल्प कय चुना जाय बिना प्रबंधक कय नजर से आइटम कय नाइ लुकुआइ सका जात है।",
+ "revdelete-reason-dropdown": "*हटावे कय आम कारण\n** सर्वाधिकार (कॉपीराइट) उल्लंघन\n** अनुचित टिप्पणी या निजी जानकारी\n** अनुचित सदस्यनाँव\n** मानहानिकारक जानकारी",
+ "revdelete-otherreason": "अउर/दुसर कारण:",
+ "revdelete-reasonotherlist": "दुसर कारण",
+ "revdelete-edit-reasonlist": "हटावेक कारण बदला जाय",
+ "revdelete-offender": "अवतरण संपादक:",
+ "suppressionlog": "लुकुआवेक लॉग",
+ "suppressionlogtext": "नीचे प्रबंधकन् से लुकुआवल ब्लॉक औ हटावल पन्नन कय सूची है।\nमौजूदा ब्लॉक अव बैन देखय खर्तीन [[Special:BlockList|ब्लॉक सूची]] देखा जाय।",
+ "mergehistory": "पन्ना कय इतिहास मिलावा जाय",
+ "mergehistory-header": "इ पन्ना एकठु स्रोत पन्ना कय इतिहास कवनो अउर पन्नन में मिलावे खत्तिर होय।\nसुनिश्चित करा जाय कि इ बदलाव पन्ना इतिहास में कन्टिन्य़ुईटी बरकरार राखय।",
+ "mergehistory-box": "दुई पन्नन कय इतिहास मिलावा जाय:",
+ "mergehistory-from": "स्रोत पन्ना:",
+ "mergehistory-into": "लक्ष्य पन्ना:",
+ "mergehistory-list": "मिलावे लायक संपादन इतिहास",
+ "mergehistory-merge": "[[:$1]] कय निचे कय अवतरण [[:$2]] में एकट्ठा कै सका जात है।\nकवनो दिहल समय या ओसे पहिले कय अवतरणन् कय एकट्ठा करेक खत्तिर रेडियो बटन कय प्रयोग करा जाय।\nनैविगेशन कड़िन् कय प्रयोग कय बाद इ कॉलम अपने पुरानी स्थिति पे आइ जाइ।",
+ "mergehistory-go": "मिलावे लायक संपादन देखावा जाय",
+ "mergehistory-submit": "अवतरण मिलावा जाय",
+ "mergehistory-empty": "कवनो भी अवतरण नाई मिलाई सका जात अहै।",
+ "mergehistory-success": "[[:$1]] {{PLURAL:$3|कय}} $3 अवतरण [[:$2]] में एकट्ठा कई {{PLURAL:$3|गय}}।",
+ "mergehistory-fail": "इतिहास एकट्ठा नाई कई सका जात है, कृपया पन्ना औ समय कय फिरसे जाँच करा जाय।",
+ "mergehistory-no-source": "स्रोत पन्ना $1 मौजूद नाई है।",
+ "mergehistory-no-destination": "लक्ष्य पन्ना $1 मौजूद नाई है।",
+ "mergehistory-invalid-source": "स्रोत पन्ना कय शीर्षक वैध होब आवश्यक है।",
+ "mergehistory-invalid-destination": "लक्ष्य पन्ना कय शीर्षक वैध होब आवश्यक है।",
+ "mergehistory-autocomment": "[[:$2]] में [[:$1]] मिलावा जाय",
+ "mergehistory-comment": "[[:$2]] में [[:$1]] मिलाइ गय: $3",
+ "mergehistory-same-destination": "स्रोत अउर लक्ष्य पन्ना एक्कै नाई होई सकत हैं",
+ "mergehistory-reason": "कारण:",
+ "mergelog": "मिलावेक लॉग",
+ "revertmerge": "अलग करा जाअ",
+ "mergelogpagetext": "नीचे उ पन्नन कय सूची है जवने कय इतिहास हालिए में दूसरे पन्ना में मिलाइ ग रहा।",
+ "history-title": "\"$1\" कय अवतरण इतिहास",
+ "difference-title": "\"$1\" कय अवतरण में अंतर",
+ "difference-title-multipage": "\"$1\" अव \"$2\" पन्नन में अंतर",
+ "difference-multipage": "(पन्नन कय बीच अन्तर)",
+ "lineno": "पंक्ति $1:",
+ "compareselectedversions": "चुनल अवतरणन् कय तुलना करा जाय",
+ "showhideselectedversions": "चुनल अवतरण देखावा जाय/लुकुआवा जाय",
+ "editundo": "पहिले जैसन करा जाय",
+ "diff-empty": "(कवनो अंतर नाइ है)",
+ "diff-multi-sameuser": "(इ सदस्य कय {{PLURAL:$1|करल बीच कय एक अवतरण नाई देखाई गय |करल बीच कय कुल $1 अवतरण नाइ देखाइ गय}})",
+ "diff-multi-otherusers": "({{PLURAL:$2|एकठु दुसर सदस्य|$2 सदस्यन्}} कय {{PLURAL:$1|करल बीच कय एकठु अवतरण नाई देखाइ गय|करल बीच कय कुल $1 अवतरण नाइ देखाइ गय}})",
+ "diff-multi-manyusers": "({{PLURAL:$2|एकठु योगदानकर्ता|$2 योगदानकर्तन्}} कय {{PLURAL:$1|करल बीच कय एकठु|करल बीच कय $1}} अवतरण नाई देखाइ गय।)",
+ "difference-missing-revision": "इ अंतर {{PLURAL:$2|कय एकठु अवतरण|कय $2 अवतरण}} ($1) नाइ {{PLURAL:$2|मिला}}।\n\nई आम तौर पे एकठु हटावल पन्ना कय अवतरण में अंतर खोजय पे होत है।ढेर जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली।",
+ "searchresults": "खोज परिणाम",
+ "searchresults-title": "\"$1\" कय खरतीन खोज परिणाम",
+ "titlematches": "पन्ना शीर्षक मिलान",
+ "textmatches": "पन्ना पाठ मिलान",
+ "notextmatches": "कवनो भी पन्ना में ई सामान नाई मिला",
+ "prevn": "पहिलका {{PLURAL:$1|$1}}",
+ "nextn": "अगला {{PLURAL:$1|$1}}",
+ "prevn-title": "{{PLURAL:$1|पहिलका|}} $1 परिणाम",
+ "nextn-title": "{{PLURAL:$1|अगला}} $1 परिणाम",
+ "shown-title": "हर पन्ना पे $1 {{PLURAL:$1|परिणाम}} देखावा जाय",
+ "viewprevnext": "देखा जाय ($1 {{int:pipe-separator}} $2) ($3)",
+ "searchmenu-exists": "'''इ विकि पे \"[[:$1]]\" नाँव कय एकठु पन्ना है'''",
+ "searchmenu-new": "<strong>इ विकि पे \"[[:$1]]\" नाँव कय पन्ना बनावा जाय!</strong>{{PLURAL:$2|0=|आप कय खोज से मिला पन्नओ देखा जाय।|खोज परिणाम भी देखा जाय।}}",
+ "searchprofile-articles": "सामग्री पन्ना",
+ "searchprofile-images": "मल्टीमीडिया",
+ "searchprofile-everything": "कुल चिज",
+ "searchprofile-advanced": "उन्नत",
+ "searchprofile-articles-tooltip": "$1 में खोजा जाय",
+ "searchprofile-images-tooltip": "फ़ाइल खोजा जाय",
+ "searchprofile-everything-tooltip": "(बातचीत पन्नन सहित) सारा सामग्री में खोजा जाय",
+ "searchprofile-advanced-tooltip": "विशेष नामस्थानन् में खोजा जाय",
+ "search-result-size": "$1 ({{PLURAL:$2|$2 शब्द}})",
+ "search-result-category-size": "{{PLURAL:$1|$1 सदस्य}} ({{PLURAL:$2|$2 उपश्रेणी}}, {{PLURAL:$3|$3 सञ्चिका}})",
+ "search-redirect": "($1 से पुनर्निर्देशित)",
+ "search-section": "(अनुभाग $1)",
+ "search-category": "(श्रेणी $1)",
+ "search-file-match": "(फ़ाइल सामग्री से मिलत है)",
+ "search-suggest": "आप कय मतलब ई तव नाई रहा:$1",
+ "search-interwiki-caption": "दुसर परियोजना",
+ "search-interwiki-default": "$1 से परिणाम:",
+ "search-interwiki-more": "(अउर)",
+ "search-relatedarticle": "सम्बंधित",
+ "searchrelated": "सम्बंधित",
+ "searchall": "कुल",
+ "showingresults": "नीचे क्रमांक '''$2''' से सुरु कै कय सबसे ढेर '''$1''' परिणाम {{PLURAL:$1|देखाइ गा है}}।",
+ "search-nonefound": "आप कय खोज से मिलत जुलत कवनो परिणाम नाई मिला।",
+ "powersearch-legend": "उन्नत खोज",
+ "powersearch-ns": "नामस्थानन् में खोजा जाय:",
+ "powersearch-togglelabel": "चुना जाय:",
+ "powersearch-toggleall": "कुल",
+ "powersearch-togglenone": "केहु नाई",
+ "powersearch-remember": "अबसे करय वाले खोजमे हमार पसंद याद रक्खा जाय",
+ "search-external": "बाहरी खोज",
+ "searchdisabled": "{{SITENAME}} पे खोज अक्षम है।\nआप गूगल से खोज कै सका जात है।\nध्यान रक्खा जाय कि वनकय {{SITENAME}} समानन् कय सूची पुरान होइ सकत है।",
+ "search-error": "खोजत समय अईसन त्रुटि उत्पन्न होइ गय: $1",
+ "preferences": "हमार पसंद",
+ "mypreferences": "हमार पसंद",
+ "prefs-edits": "सम्पादन गिन्ती",
+ "prefsnologintext2": "आपन पसंद बदलेक खत्तिर लाग इन करा जाय",
+ "prefs-skin": "स्कीन",
+ "skin-preview": "झलक",
+ "datedefault": "खा़स प्राथमिकता नाँइ है",
+ "prefs-labs": "लैब विशेषता",
+ "prefs-user-pages": "सदस्य पन्ना",
+ "prefs-personal": "सदस्य व्यक्तिरेखा",
+ "prefs-rc": "नँवा बदलाव",
+ "prefs-watchlist": "अवलोकन सुची",
+ "prefs-editwatchlist": "ध्यानसूची संपादन करा जाय",
+ "prefs-editwatchlist-label": "अपने धियान सुचीमा एन्ट्रि सम्पादन कीन जाय",
+ "prefs-editwatchlist-raw": "कच्चा निगरानी सूची सम्पादन करा जाय",
+ "prefs-editwatchlist-clear": "आपन ध्यानसूची साफ करा जाय",
+ "prefs-watchlist-days": "ध्यानसूची में दिखावै कय दिन:",
+ "prefs-watchlist-days-max": "अधिकतम $1 {{PLURAL:$1|दिन}}",
+ "prefs-watchlist-edits": "बढ़ावल ध्यानसूची में देखावे खत्तिर अधिकतम बदलाव:",
+ "prefs-watchlist-edits-max": "अधिकतम संख्या: एक हज़ार",
+ "prefs-watchlist-token": "ध्यानसूची टोकन",
+ "prefs-misc": "अउर",
+ "prefs-resetpass": "गुप्त कुंजी बदला जाय",
+ "prefs-changeemail": "ईमेल ठाँव बदला जाय",
+ "prefs-setemail": "ईमेल ठाँव दिहा जाय",
+ "prefs-email": "ई-मेल वरीयता",
+ "prefs-rendering": "शकलसूरत",
+ "saveprefs": "सहेजा जाय",
+ "restoreprefs": "पहिलकय सेटिङ मिलावा जाय (कुल जगही में)",
+ "prefs-editing": "संपादन",
+ "rows": "कताँर:",
+ "columns": "कॉलम:",
+ "searchresultshead": "खोजा जाय",
+ "stub-threshold": "<a href=\"#\" class=\"stub\">आधार कड़िन्</a> कय सबसे बडा आकार (बाइट):",
+ "stub-threshold-disabled": "अक्षम करा है",
+ "recentchangesdays": "नँवा बदलाव में देखावे कय दिन:",
+ "recentchangesdays-max": "सबसे ढेर $1 {{PLURAL:$1|दिन}}",
+ "recentchangescount": "मूल रूप से केतना संपादन देखावा जाय:",
+ "prefs-help-recentchangescount": "एहमा नँवा बदलाव, पन्ना इतिहास अव लॉग शामिल है।",
+ "prefs-help-watchlist-token2": "ई आपकय ध्यानसूची कय वेब फ़ीड कय गोपनीय कुंजी होय।\nइ जेकरे लगे होइ उहय आपकय ध्यानसूची पढ़ि पाइ,इहिक नाते केहुक साथे ना बांटा जाइ।\n[[Special:ResetTokens|एका रीसेट करय खत्तिर हिँया क्लिक किन जाय]]।",
+ "savedprefs": "आप कय पसंद सहेजि गय ।",
+ "timezonelegend": "समयमंडल:",
+ "localtime": "स्थानीय समय:",
+ "timezoneuseserverdefault": "विकी डिफ़ॉल्ट कय उपयोग कीन जाय ($1)",
+ "timezoneuseoffset": "अउर कौनो(समयांतर निर्दिष्ट करा जाय)",
+ "servertime": "सर्वर कय समय:",
+ "guesstimezone": "ब्राउज़र से भरा जाय",
+ "timezoneregion-africa": "अफ्रिका",
+ "timezoneregion-america": "अमेरिका",
+ "timezoneregion-antarctica": "अंटार्कटिका",
+ "timezoneregion-arctic": "आर्कटिक",
+ "timezoneregion-asia": "एशिया",
+ "timezoneregion-atlantic": "एटलांटिक महासागर",
+ "timezoneregion-australia": "ऑस्ट्रेलिया",
+ "timezoneregion-europe": "यूरोप",
+ "timezoneregion-indian": "हिंद महासागर",
+ "timezoneregion-pacific": "प्रशांत महासागर",
+ "allowemail": "अउर सदस्यन् से ई-मेल सक्षम करा जाय",
+ "prefs-searchoptions": "खोजा जाय",
+ "prefs-namespaces": "नामस्थान",
+ "default": "डिफ़ॉल्ट",
+ "prefs-files": "फ़ाइल",
+ "prefs-custom-css": "खासमखास सी॰एस॰एस",
+ "prefs-custom-js": "खासमखास जावास्क्रिप्ट",
+ "prefs-common-css-js": "कुल स्किन कय लिए साझा सी॰एस॰एस/जावास्क्रिप्ट:",
+ "prefs-reset-intro": "आप इ पन्ना से अपने पसंद कय, साइट कय मूल पसंद कय जइसन बनाय सका जात है।\nएकरे बाद आप वापिस पुरान जगहि पे नाइ आय पावा जाइ।",
+ "prefs-emailconfirm-label": "ईमेल सुनीश्चित करा जाय:",
+ "youremail": "ई-मेल:",
+ "username": "{{GENDER:$1|सदस्यनाँव}}:",
+ "prefs-memberingroups": "निचे दिहा {{PLURAL:$1|समूह|समूहन्}} कय {{GENDER:$2|सदस्य}}:",
+ "prefs-registration": "रजिष्ट्रेसन समय:",
+ "yourrealname": "वास्तविक नाँव:",
+ "yourlanguage": "भाषा",
+ "yourvariant": "सामग्री भाषा संस्करण:",
+ "prefs-help-variant": "आप कय पसंदीदा प्रकार या इमला इ विकि कय अंदर सामग्री पन्नन कय देखावे खत्तिर होय।",
+ "yournick": "नँवा हस्ताक्षर:",
+ "prefs-help-signature": "बातचीत पन्नन पे करल टिप्पणिन् पे \"<nowiki>~~~~</nowiki>\" से हस्ताक्षर करेक परि, इ आप कय हस्ताक्षर अव समय में परिवर्तित होई जाइ।",
+ "badsig": "गलत कच्चा हस्ताक्षर।\nHTML टैग कय जाँच करा जाय।",
+ "badsiglength": "ई हस्ताक्षर बहुत बड़ा है।\nई $1 {{PLURAL:$1|कैरैक्टर}} से ढेर कय नाई होएक चाहि।",
+ "yourgender": "आप अपने आप कय कैसन बतावे चाहा जाइ?",
+ "gender-unknown": "हम कुछ नाई कहय चाहित अहन",
+ "gender-male": "एन सम्पादन करत हँय।",
+ "gender-female": "एन सम्पादन करत अहिन।",
+ "prefs-help-gender": "ई जानकारी देब वैकल्पिक होय।\nई सॉफ़्टवेयर में लिंग कय आधार पे आप कय लिए सही संबोधन कय नाते प्रयुक्त होत है।\nई जानकारी सार्वजनिक होइ।",
+ "email": "ई-मेल",
+ "prefs-help-realname": "असली नाँव कय कवनो जरुरत नाइ है।यकर इस्तेमाल आप कय काम कय बडाइ करय में होइ सकत है ।",
+ "prefs-help-email": "ई-मेल ठहर वैकल्पिक होय, लेकिन यदि आप आपन गुप्तकुंजी भूलाई गवा गय तव एकरे माध्यम से रीसेट कई सका जात है।",
+ "prefs-help-email-others": "आप आपन पहिचान बिना देखाए, अउर सदस्यन् कय अपने सदस्य या बातचीत पन्ना से ,अपने आप से सम्पर्क कराय सका जात है।",
+ "prefs-help-email-required": "ई-मेल ठहर जरुरी है।",
+ "prefs-info": "मूलभूत जानकारी",
+ "prefs-i18n": "अंतर्राष्ट्रीयकरण",
+ "prefs-signature": "हस्ताक्षर",
+ "prefs-dateformat": "तिथि प्रारूप",
+ "prefs-timeoffset": "समयांतर",
+ "prefs-advancedediting": "सामान्य विकल्प",
+ "prefs-editor": "सम्पादक",
+ "prefs-preview": "झलक",
+ "prefs-advancedrc": "उन्नत विकल्प",
+ "prefs-advancedrendering": "उन्नत विकल्प",
+ "prefs-advancedsearchoptions": "उन्नत विकल्प",
+ "prefs-advancedwatchlist": "उन्नत विकल्प",
+ "prefs-displayrc": "प्रदर्शन विकल्प",
+ "prefs-displaywatchlist": "प्रदर्शन विकल्प",
+ "prefs-tokenwatchlist": "टोकन",
+ "prefs-diffs": "अंतर",
+ "prefs-help-prefershttps": "ई प्राथमिकता आप कय अगला लॉगिन मे प्रभावी होई।",
+ "prefswarning-warning": "आप अपने पसंद मा परिवर्तन करा गा है जवन अभिन अतक नाइ सहेजि गा है ।अगर आप \"$1\" कय किल्क किहे बिना इ पन्ना छोडा जाइ तव आप कय पसंद नाइ सहेजी जाइ।",
+ "prefs-tabs-navigation-hint": "सुझाव: आप टैब्स सूची में टैब्स कय बीचे आवे-जाय खत्तीर बाँवा औ दहिना तीर कुंजिन् कय उपयोग कै सका जात है।",
+ "email-address-validity-valid": "ई-मेल ठहर वैध नाइ लागत है",
+ "email-address-validity-invalid": "एकठु वैध ई-मेल ठहर दिहा जाय",
+ "userrights": "सदस्य अधिकार व्यवस्थापन",
+ "userrights-lookup-user": "सदस्य समूहन् कय व्यवस्थापन करा जाय",
+ "userrights-user-editname": "सदस्यनावँ दिहा जाय:",
+ "editusergroup": "सदस्य समूहन् कय संपादन करा जाय",
+ "editinguser": "सदस्य '''[[User:$1|$1]]''' $2 कय अधिकार बदला जाय",
+ "userrights-editusergroup": "सदस्य समूहन् कय संपादन करा जाय",
+ "saveusergroups": "सदस्य समूहन् कय व्यवस्थापन सहेजा जाय",
+ "userrights-groupsmember": "निचे कय {{PLURAL:$1|समूह|समूहन्}} कय सदस्य:",
+ "userrights-groupsmember-auto": "निचे कय {{PLURAL:$1|समूह|समूहन्}} कय अंतर्निहित सदस्य:",
+ "userrights-groups-help": "आप इ सदस्य कय समूह-सदस्यता बदलि सका जात है:\n* बक्सा पे सही कय निशान लागेक माने होय कि सदस्य उ समूह मा है।\n* बक्सा पे सही कय निशान ना लागेक माने होय कि सदस्य उ समूह में नाइ है।\n* एक * कय माने होय कि एक दाइ जोड़ेक बाद उ समूह कय नाइ हटाय सका जात है, औ हटावे कय बाद नाइ जोडि सका जात है।",
+ "userrights-reason": "कारण:",
+ "userrights-no-interwiki": "आप कय अउर विकिन् पे सदस्य अधिकार बदले कय अनुमति नाइ है।",
+ "userrights-nodatabase": "डाटाबेस $1 या तो मौजूद नाइ है या फिर स्थानीय नाइ है।",
+ "userrights-nologin": "सदस्य अधिकार बदलेक खत्तिर प्रबंधक खाता से [[Special:UserLogin|लॉग इन]] करेक परि।",
+ "userrights-notallowed": "आप कय लगे सदस्य अधिकार जोडेक या हटावेक अनुमति नाइ है।",
+ "userrights-changeable-col": "गोल (ग्रुप) जवन आप बदलि सका जात है ।",
+ "userrights-unchangeable-col": "गोल (ग्रुप) जवन आप नाइ बदलि सका जात है ।",
+ "userrights-conflict": "सदस्य अधिकार बदलाव में अंतर्विरोध! कृपया आपन बदलाव जाँचा जाय और फिरसे सुनिश्चित करा जाय।",
+ "userrights-removed-self": "आप सफलतापूर्वक आपन अधिकार हटाए दिहा गए। इहिक नाते अब आप इ पन्ना नाइ देख सका जात है।",
+ "group": "गोल:",
+ "group-user": "सदस्य:",
+ "group-autoconfirmed": "अपने आप बनल सदस्य",
+ "group-bot": "बॉट",
+ "group-sysop": "प्रबंधक",
+ "group-bureaucrat": "प्रशासक",
+ "group-suppress": "ओवरसाईट्स",
+ "group-all": "(कुल)",
+ "group-user-member": "{{GENDER:$1|सदस्य}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|अपने आप बनल सदस्य}}",
+ "group-bot-member": "{{GENDER:$1|बॉट}}",
+ "group-sysop-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-bureaucrat": "{{ns:project}}:प्रशासक",
+ "grouppage-suppress": "{{ns:project}}:कॉपीराइट",
+ "right-read": "पन्ना पढा जाय",
+ "right-edit": "पन्ना सम्पादन करा जाय",
+ "right-createpage": "पन्ना बनावा जाय (जवन चर्चा पन्ना नाई होय)",
+ "right-createtalk": "बातचीत पन्ना बनावा जाय",
+ "right-createaccount": "नँवा सदस्य खाता बनावा जाय",
+ "right-minoredit": "अपने बदलाव कय छोट चिन्हित करा जाय",
+ "right-move": "पन्ना घुसकावा जाय",
+ "right-move-subpages": "पन्ना उपपन्नन सहित घुस्कावा जाय",
+ "right-move-rootuserpages": "मूल सदस्य पन्नन् कय घुस्कावा जाय",
+ "right-move-categorypages": "श्रेणी पन्नन् कय घुसकावा जाय",
+ "right-movefile": "फाइल घुसकावा जाय",
+ "right-suppressredirect": "पन्ना घुस्कावत कय समय पुनर्निर्देश ना छोड़ा जाय",
+ "right-upload": "फ़ाइल अपलोड करा जाय",
+ "right-reupload": "मौजूदा फ़ाईलन् पे फिर से लिखा जाय",
+ "right-reupload-own": "आपन अपलोड करल फ़ाइल पे फिर से लिखा जाय",
+ "right-reupload-shared": "शेअर्ड इमेज भण्डार में मौजूद फ़ाइलन् पे फिर से लिखा जाय",
+ "right-upload_by_url": "यू॰आर॰एल से फ़ाइल अपलोड करा जाय",
+ "right-purge": "पन्ना कय कैश मेमोरी खाली करा जाय",
+ "right-autoconfirmed": "आई॰पी ठहर आधारित रेट लिमिट्स से बेअसर होई जाय",
+ "right-bot": "स्वचलित प्रणाली माना जाय",
+ "right-nominornewtalk": "बातचीत पन्नन पे छोट बदलाव करय पे सदस्यन् कय \"आप कय खत्तिर नँवा सनेशा है\" पट्टी ना देखावा जाय",
+ "right-apihighlimits": "API पुँचताँछ में ऊँच सीमा प्रयोग करा जाय",
+ "right-writeapi": "लेखन ए॰पी॰आई कय प्रयोग करा जाय",
+ "right-delete": "पन्ना मेटावा जाय",
+ "right-bigdelete": "ढेर इतिहास वाले पन्नन् कय हटावा जाय",
+ "right-deletelogentry": "विशिष्ट लॉग प्रविष्टिन् कय लुकुआवा जाय अव देखावा जाय",
+ "right-deleterevision": "पन्नन कय विशिष्ट अवतरण हटावा जाय या पुनर्स्थापित करा जाय",
+ "right-deletedhistory": "हटावल इतिहास सूची, ओकरे साथे मिलय वाला पाठ कय बिना देखा जाय",
+ "right-deletedtext": "हटावल पाठ औ हटावल अवतरणन् कय बीचे अंतर देखा जाय",
+ "right-browsearchive": "हटावल पन्ना खोजा जाय",
+ "right-undelete": "ई पन्ना कय पुनर्स्थापित करा जाय।",
+ "right-viewsuppressed": "कवनो भि सदस्य कय लुकुआवल अवतरण देखा जाय",
+ "right-suppressionlog": "खासगी लॉग देखा जाय",
+ "right-block": "अउर सदस्यन् कय सम्पादन करय से ब्लॉक करा जाय",
+ "right-blockemail": "अउर सदस्यन् कय ईमेल करै से रोका जाय",
+ "right-hideuser": "सदस्यनाँव ब्लॉक करा जाय औ ओका मनईन से लुकुआवा जाय",
+ "right-ipblock-exempt": "आइ॰पी ब्लॉक्स, ऑटो-ब्लॉक्स अव रेंज ब्लॉक्स कय अनदेखा करा जाय",
+ "right-proxyunbannable": "स्वचालित प्रौक्सी ब्लॉक्स कय अनदेखा करा जाय",
+ "right-unblockself": "अपने आप कय अनावरुद्ध करा जाय",
+ "right-protect": "सुरक्षा स्तर बदला जाय अव सीढ़ी-सुरक्षित पन्ना सम्पादन करा जाय",
+ "right-editprotected": "अइसन सुरक्षित पन्नन कय सम्पादन करा जाय जवने कय सम्पादन कय \"{{int:protect-level-sysop}}\"",
+ "right-editsemiprotected": "अइसन पन्नन् कय सम्पादन करा जाय जवने कय सुरक्षा स्तर होय \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "पन्ना कय सामग्री नमुना कय बदला जाय",
+ "right-editinterface": "सॉफ़्टवेयर इंटरफ़ेस सम्पादित करा जाय",
+ "right-editusercssjs": "अउर सदस्यन् कय सी॰एस॰एस अव जावास्क्रिप्ट पन्ना कय सम्पादन करा जाय",
+ "right-editusercss": "अउर सदस्यन् कय सी॰एस॰एस पन्ना सम्पादन करा जाय",
+ "right-edituserjs": "अउर सदस्यन् कय जावास्क्रिप्ट पन्ना कय सम्पादन करा जाय",
+ "right-editmyusercss": "आपन सदस्य स्तर कय सी॰एस॰एस फ़ाइल कय सम्पादन करा जाय",
+ "right-editmyuserjs": "आपन सदस्य स्तर कय जावास्क्रिप्ट फ़ाइल सम्पादन करा जाय",
+ "right-viewmywatchlist": "आपन ध्यानसूची देखा जाय",
+ "right-editmywatchlist": "आपन ध्यानसूची सम्पादन करा जाय। ध्यान दिहा जाय कि कुछ काम इ अधिकार कय बिनव ध्यानसूची में पन्ना जोडिहैं।",
+ "right-viewmyprivateinfo": "आपन व्यक्तिगत डाटा देखा जाय (जैसय ई-मेल ठहर, असली नाँव)",
+ "right-editmyprivateinfo": "आपन व्यक्तिगत डाटा सम्पादन करा जाय (जैसय ई-मेल ठहर, असली नाँव)",
+ "right-editmyoptions": "आपन पसंद सम्पादन करा जाय",
+ "right-rollback": "कवनो पन्ना कय अंतिम दाइ सम्पादन करय वाले सदस्य कय सम्पादन वापिस लिहा जाय",
+ "right-markbotedits": "वापिस लेवे में होए वाला संपादनन् कय बॉट सम्पादन चिन्हित करा जाय",
+ "right-noratelimit": "रेट लिमिट्स से बेअसर होइ जाय",
+ "right-import": "दुसर विकि से पन्ना लावा जाय",
+ "right-importupload": "फ़ाइल अपलोड से पन्ना लावा जाय",
+ "right-patrol": "अउर सदस्यन् कय सम्पादन परीक्षित चिन्हित करा जाय",
+ "right-autopatrol": "अपने सम्पादन कय स्वचालित रूप से परीक्षित चिन्हित करा जाय",
+ "right-patrolmarks": "नँवा बदलाव में परीक्षण चिन्ह देखा जाय",
+ "right-unwatchedpages": "अइसन पन्नन कय सूची देखा जाय जवन केहु कय ध्यानसूची में नाइ है",
+ "right-mergehistory": "पन्ना इतिहास एकट्ठय करा जाय",
+ "right-userrights": "कुल सदस्य अधिकार बदला जाय",
+ "right-userrights-interwiki": "अउर विकिन् पे सदस्य अधिकार बदला जाय",
+ "right-siteadmin": "डाटाबेस कय ताला लगावा जाय या खोला जाय",
+ "right-override-export-depth": "पन्ना निर्यात करा जाय, पाँच स्तर कय गहराई तक जुड़ल पन्ना लइकय",
+ "right-sendemail": "अउर सदस्यन् कय ई-मेल पठवा जाय",
+ "right-passwordreset": "गुप्तकुंजी रीसेट ई-मेल देखा जाय",
+ "newuserlogpage": "सदस्य खाता बनावे कय लॉग",
+ "newuserlogpagetext": "ई सदस्य खाता बनावे कय लॉग होय।",
+ "rightslog": "सदस्य अधिकार लॉग",
+ "rightslogtext": "ई सदस्य अधिकारन् में करल बदलाव कय सूची होय।",
+ "action-read": "इ पन्ना कय पढ़ा जाय",
+ "action-edit": "ई पन्ना कय सम्पादन करा जाय",
+ "action-createpage": "पन्ना बनावा जाय",
+ "action-createtalk": "बातचीत पन्ना बनावा जाय",
+ "action-createaccount": "ई सदस्य खाता बनावा जाय",
+ "action-history": "इ पन्ना कय इतिहास देखेक",
+ "action-minoredit": "ई बदलाव छोट होय",
+ "action-move": "ई पन्ना घुस्कावा जाय",
+ "action-move-subpages": "ई पन्ना अव एकरे उप-पन्ना कय घुस्कावा जाय",
+ "action-move-rootuserpages": "मूल सदस्य पन्नन् कय घुस्कावेक",
+ "action-move-categorypages": "श्रेणी पन्नन् कय घुसकावेक",
+ "action-movefile": "ई पन्ना घुस्कावेक",
+ "action-upload": "इ फ़ाइल कय अपलोड करेक",
+ "action-reupload": "मौजूदा फ़ाईलन् पे फिर से लिखे कय",
+ "action-reupload-shared": "साझा भंडार में इ फ़ाइलन् कय ऊप्पर कुछ अउर डारे कय",
+ "action-upload_by_url": "यू॰आर॰एल से इ फ़ाइल कय चढ़ावे कय",
+ "action-writeapi": "लेखन ए॰पी॰आई कय प्रयोग करे कय",
+ "action-delete": "ई पन्ना मेटावे कय",
+ "action-deleterevision": "इ अवतरण कय हटावे कय",
+ "action-deletedhistory": "इ पन्ना कय मेटावल इतिहास कय देखे कय",
+ "action-browsearchive": "हटावल पन्ना खोजे कय",
+ "action-undelete": "ई पन्ना कय पुनर्स्थापित करे कय",
+ "action-suppressrevision": "इ लुकुआवल अवतरण कय देखे कय अव पुनर्स्थापित करे कय",
+ "action-suppressionlog": "इ निजी लॉग कय देखे कय",
+ "action-block": "ई सदस्य कय सम्पादन करय से ब्लॉक करे कय",
+ "action-protect": "इ पन्ना कय सुरक्षा स्तर बदले कय",
+ "action-rollback": "कवनो पन्ना कय अंतिम सम्पादन करय वाले सदस्यन् कय सम्पादन वापिस लेवे कय",
+ "action-import": "दुसर विकि से पन्ना लावे कय",
+ "action-importupload": "फ़ाइल अपलोड से पन्ना लावे कय",
+ "action-patrol": "अउर सदस्यन् कय सम्पादन परीक्षित चिन्हित करे कय",
+ "action-autopatrol": "आपन सम्पादन स्वचालित रूप से परीक्षित करे कय",
+ "action-unwatchedpages": "अईसन पन्ना जवन केहु कय ध्यानसूची में नाई है कय सूची देखे कय",
+ "action-mergehistory": "पन्ना इतिहास एकट्ठय करे कय",
+ "action-userrights": "कुल सदस्यन कय अधीकार बदले कय",
+ "action-userrights-interwiki": "अउर विकिन् पे सदस्य अधिकार बदले कय",
+ "action-siteadmin": "डाटाबेस कय ताला लगावा जाय या खोला जाय",
+ "action-sendemail": "ईमेल पठवा जाय",
+ "action-editmywatchlist": "ध्यानसूची सम्पादन करा जाय",
+ "action-viewmywatchlist": "आपन ध्यानसूची देखा जाय",
+ "action-viewmyprivateinfo": "आपन व्यक्तिगत जानकारी देखा जाय",
+ "action-editmyprivateinfo": "आपन व्यक्तिगत जानकारी बदला जाय",
+ "action-editcontentmodel": "पन्ना कय सामग्री नमुना कय बदला जाय",
+ "nchanges": "$1 {{PLURAL:$1|बदलाव}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम दाइ देखय कय बाद से}}",
+ "enhancedrc-history": "इतिहास",
+ "recentchanges": "नँवा बदलाव",
+ "recentchanges-legend": "नँवा बदलाव से सम्बंधीत विकल्प",
+ "recentchanges-summary": "इ विकि पे करल नँवा बदलाव इ पन्ना पे देख सका जात अहै।",
+ "recentchanges-noresult": "इ अवधि कय दौरान इ मापदंडन् कय पूरा कईकय कवनो बदलाव नाइ कै गा है।",
+ "recentchanges-feed-description": "इ विकि पे करल नँवा बदलाव इ फिड मे देख सका जात अहै।",
+ "recentchanges-label-newpage": "ई सम्पादन से नँवा पन्ना बना",
+ "recentchanges-label-minor": "ई छोट सम्पादन होय ।",
+ "recentchanges-label-bot": "ई सम्पादन एक्ठु ब़ा़ट करे है",
+ "recentchanges-label-unpatrolled": "ई संपादन अभीन नाइ जाँचि गा है",
+ "recentchanges-label-plusminus": "पन्ना कय आकार इ बाइट संख्या से बदला",
+ "recentchanges-legend-heading": "'''कुंजी:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नवा पन्नन् कय सूची]] कय भी देखा जाय)",
+ "rclistfrom": "$3 $2 से नँवा बदलाव देखावा जाय",
+ "rcshowhideminor": "छोट बदलाव $1",
+ "rcshowhideminor-show": "देखावा जाय",
+ "rcshowhideminor-hide": "लुकुआवा जाय",
+ "rcshowhidebots": "बॉट $1",
+ "rcshowhidebots-show": "देखावा जाय",
+ "rcshowhidebots-hide": "लुकुआवा जाय",
+ "rcshowhideliu": "पंजीकृत सदस्य $1",
+ "rcshowhideliu-show": "देखावा जाय",
+ "rcshowhideliu-hide": "लुकुआवा जाय",
+ "rcshowhideanons": "$1 अज्ञात प्रयोगकर्ता",
+ "rcshowhideanons-show": "देखावा जाय",
+ "rcshowhideanons-hide": "लुकुआवा जाय",
+ "rcshowhidepatr": "परीक्षित सम्पादन $1",
+ "rcshowhidepatr-show": "देखावा जाय",
+ "rcshowhidepatr-hide": "लुकुआवा जाय",
+ "rcshowhidemine": "हमार बदलाव $1",
+ "rcshowhidemine-show": "देखावा जाय",
+ "rcshowhidemine-hide": "लुकुआवा जाय",
+ "rclinks": "पिछला $2 दिन में करल $1 बदलाव देखावा जाय<br />$3",
+ "diff": "अंतर",
+ "hist": "इतिहास",
+ "hide": "लुकुआवा जाय",
+ "show": "देखावा जाय",
+ "minoreditletter": "छो",
+ "newpageletter": "न",
+ "boteditletter": "बॉ",
+ "number_of_watching_users_pageview": "[$1 ध्यान राखय वाले {{PLURAL:$1|सदस्य}}]",
+ "rc_categories": "श्रेणीन् तक सीमीत रक्खा जाय (\"|\" से अलग करा जाय)",
+ "rc_categories_any": "कवनो भी",
+ "rc-change-size-new": "बदलाव कय बाद $1 {{PLURAL:$1|बाइट}}",
+ "newsectionsummary": "/* $1 */ नँवा अनुभाग",
+ "rc-enhanced-expand": "विस्तृत जानकारी देखावा जाय",
+ "rc-enhanced-hide": "विस्तृत जानकारी लुकुआवा जाय",
+ "rc-old-title": "मूल रूप से \"$1\" नाव से बनावा रहा",
+ "recentchangeslinked": "पन्ना से सम्बन्धित बदलाव",
+ "recentchangeslinked-feed": "पन्ना से सम्बन्धित बदलाव",
+ "recentchangeslinked-toolbox": "पन्ना से सम्बन्धित बदलाव",
+ "recentchangeslinked-title": "\"$1\" से जुड़ल बदलाव",
+ "recentchangeslinked-summary": "ई पन्ना कवनो विशिष्ट पन्ना से जोडान पन्नन् (या कवनो श्रेणी में श्रेणीबद्ध पन्नन्) में नँवा बदलाव कय सूची देखावत है।\n[[Special:Watchlist|आप कय ध्यानसूची]] में मौजूद पन्ना '''मोट''' अक्षर में बीलगाई।",
+ "recentchangeslinked-page": "पन्ना कय नाँव:",
+ "recentchangeslinked-to": "इसके बदले में दिये हुए पृष्ठसे जुडे पन्नोंके बदलाव दर्शायें",
+ "upload": "फ़ाइल अपलोड करा जाय",
+ "uploadbtn": "फ़ाइल अपलोड करा जाय",
+ "reuploaddesc": "अपलोड रद्द करा जाय अव फिरसे अपलोड फ़ॉर्म पे जावा जाय",
+ "upload-tryagain": "संशोधित फ़ाइल विवरण भेजा जाय",
+ "uploadnologin": "लाग इन नाई करा गा है",
+ "uploadnologintext": "फाइल अपलोड करेक लिए $1 करब आवश्यक है",
+ "upload_directory_missing": "अपलोड डाइरेक्टरी ($1) मौजूद नाई है, अउर वेबसर्वर एकर निर्माण नाई कई पाय।",
+ "upload_directory_read_only": "अपलोड डाइरेक्टरी ($1) में वेबसर्वर नाइ लिख पावत है।",
+ "uploaderror": "अपलोड त्रुटि",
+ "upload-recreate-warning": "'''चेतावनी: उ नाँव कय फ़ाइल हटाई गय या घुस्काई गा है ।'''\n\nइ पन्ना कय हटावेक औ घुस्कावेक लॉग हिँया सन्दर्भ खत्तीर दिहा है:",
+ "uploadtext": "फ़ाइल अपलोड करेक खत्तीर नीचे कय फ़ॉर्म कय प्रयोग कीन जाय।\n[[Special:FileList|अपलोड करल फ़ाइलन् कय सूची]] से आप पहिले अपलोड करल फ़ाइल कय देख सका जात है औ ओहमा खोज सका जात है। दोबारा अपलोड करल फ़ाइलन् कय [[Special:Log/upload|अपलोड सूची]] में देखा जाय, औ मिटावल फ़ाइलन् कय खत्तिर [[Special:Log/delete|हटावे कय सूची]] देखा जाय।\n\nकवनो पन्ना में फ़ाइल कय प्रयोग करेक लिए नीचे दिहा उदाहरणन् कय अनुसार कड़ि बनावा जाय।\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' फ़ाइल कय पूरा आकार प्रयोग करेक लिये\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' पन्ना में बाँवा ओर फ़ाइल कय 200 पिक्सेल चौड़ा अवतरण \"alt text\" विवरण कय साथे एकठु बक्सा में प्रयोग करेक लिये\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' बिना फ़ाइल कय प्रयोग करे खालि ओकर कड़ी जोडेक लिये",
+ "upload-permitted": "फाइल जवने कय इजाजत है कय {{PLURAL:$2|प्रकार}}: $1.",
+ "upload-preferred": "आप कय मन चाहा फाइल {{PLURAL:$2|प्रकार}}: $1.",
+ "upload-prohibited": "फाइल जवने कय मिनाही है {{PLURAL:$2|प्रकार}}: $1.",
+ "uploadlogpage": "अपलोड लॉग",
+ "uploadlogpagetext": "नीचे हालिए अपलोड करल फ़ाइलन् कय सूची है।\nकृपया अउर द्रैश्यिक विवरण कय खत्तीर [[Special:NewFiles|नँवा फ़ाइलन् कय गैलरी]] देखा जाय।",
+ "filename": "फ़ाइल कय नाँव",
+ "filedesc": "सारांश:",
+ "fileuploadsummary": "सारांश:",
+ "filereuploadsummary": "फ़ाइल में बदलाव:",
+ "filestatus": "कॉपीराइट स्थिति:",
+ "filesource": "स्रोत:",
+ "ignorewarning": "चेतावनि अनदेखा करा जाय अव फ़ाइल अपलोड करा जाय",
+ "ignorewarnings": "कुल चेतावनि कय अनदेखा करा जाय",
+ "minlength1": "फ़ाइल कय नाँव कम-से-कम एक अक्षर कय होएक चाहि।",
+ "illegalfilename": "फ़ाइल कय नाँव \"$1\" में कुछ ऐसन कैरैक्टर हैं जवन पन्ना शीर्षक में प्रतिबंधित है।\nकृपया फ़ाइल कय नाँव बदलि कय अपलोड करेक कोशिश करा जाय।",
+ "filename-toolong": "फ़ाइल नाँव 240 बाइट से ढेर लम्मा नाई होई सकत है।",
+ "badfilename": "फ़ाइल कय नाँव बदल कय \"$1\" कई दिहा है।",
+ "filetype-mime-mismatch": "फाइल एक्सटेंशन \".$1\" फ़ाइल कय खोजेक MIME प्रकार ($2) से मेल नाई खात है।",
+ "filetype-badmime": "\"$1\" प्रकार कय फ़ाइल अपलोड करय कय अनुमति नाई है।",
+ "filetype-bad-ie-mime": "इ फ़ाइल कय अपलोड नाइ कै सका जात है काहे से इंटर्नेट एक्स्प्लोरर एका \"$1\" मानि जवन कि प्रतिबन्धित या संभवतः खतरनाक फ़ाइल प्रकार होय।",
+ "filetype-unwanted-type": "'''\".$1\"''' एकठु अनचाहा फ़ाइल प्रकार होय।\nचाहय वाला फ़ाइल प्रकार {{PLURAL:$3|होय}} $2।",
+ "filetype-banned-type": "'''\".$1\"''' फ़ाइल {{PLURAL:$4|प्रकार|प्रकारन्}} कय अनुमति नाइ है।\nफ़ाइल प्रकार {{PLURAL:$3|जवने कय}} अनुमति है: $2।",
+ "filetype-missing": "इ फ़ाइल कय एक्स्टेंशन नाइ है (उदाहरण \".jpg\")।",
+ "empty-file": "आप कय दीहल फ़ाइल खाली रहा।",
+ "file-too-large": "आप कय दीहल फ़ाइल बहुत बडा रहा।",
+ "filename-tooshort": "फ़ाइल कय नाँव बहुत छोट है।",
+ "filetype-banned": "अइसन फ़ाइल प्रतिबन्धित है।",
+ "verification-error": "इ फ़ाइल सत्यापन में अनुत्तीर्ण रहा।",
+ "hookaborted": "आपके द्वारा प्रयासरत संशोधन किसी एक्स्टेंशन द्वारा निरस्त किया गया।",
+ "illegal-filename": "अइसन फ़ाइल कय इजाजत नाइ है।",
+ "overwrite": "मौजुदा फाइल कय उप्पर नाइ लिखि सका जात अहै ।",
+ "unknown-error": "अज्ञात त्रुटि आइ गय।",
+ "tmp-create-error": "अस्थाई फ़ाइल नाई बनि पाय।",
+ "tmp-write-error": "अस्थायी फ़ाइल कय लिखय में त्रुटि होइ गवा।",
+ "large-file": "फ़ाइल $1 से कम आकार कय होएक चाहि;\nइ फ़ाइल $2 आकार कय है।",
+ "largefileserver": "इ फ़ाइल कय आकार निर्धारित आकार सीमा कय पार है।",
+ "emptyfile": "आप कय अपलोड करल फ़ाइल खाली है।इ फ़ाइल कय नाँव लिखय में गलती होएक कारण होइ सकत है। कृपया जाँचा जाय कि का आप इहय फ़ाइल अपलोड करय चाहा जात है।",
+ "windows-nonascii-filename": "इ विकि विशेष कैरैक्टरन् कय वाले फ़ाइलनाँव नाइ स्वीकार करि।",
+ "filepageexists": "इ फ़ाइल कय लिए विवरण पृष्ठ पहलवे <strong>[[:$1]]</strong> पे बनाइ गा है, लेकिन इ नाँव कय कवनो फ़ाइल अभीन उपस्थित नाइ है। \nआप जवन विवरण दिहा जाइ उ विवरण पन्ना पे नाइ देखाइ। \nआप कय आपन विवरण कय उहाँ डारए कय लिए ओकर हस्त्य सम्पादन करेक परि।\n[[$1|thumb]]",
+ "fileexists-extension": "इ नाँव से मिलत-जुलत नाँव कय एकठु फ़ाइल पहलवे से है: [[$2|thumb]]\n* अपलोड होए वाला फ़ाइल कय नाँव: <strong>[[:$1]]</strong>\n* मौजूदा फ़ाइल कय नावँ: <strong>[[:$2]]</strong>\nशायद आप कवनो विशिष्ट नाँव कय प्रयोग करय चाहा जाइ?",
+ "fileexists-thumbnail-yes": "इ फ़ाइल बड़ा चित्र कय छोटा आकार ''(अंगूठाकार)'' जैसन लागत है। [[$1|thumb]]\n<strong>[[:$1]]</strong> फ़ाइल कय देखा जाय।\nअगर जाँचल फ़ाइल इही आकार कय है तव छोट आकार कय फ़ाइल अपलोड करेक आवश्यकता नाइ है।",
+ "file-thumbnail-no": "इ फ़ाइल कय नाँव <strong>$1</strong> से शुरू होत है।\nइ आकार घटावाल ''(अंगूठाकार)'' होइ सकत है।\nअगर इ चित्र अपने मूल आकार में है तव एका अपलोड करा जाय, नाइ तव फ़ाइल बदला जाय।",
+ "fileexists-forbidden": "इ नाँव कय फ़ाइल पहिलवे से मौजूद है, अउर एकरे जगही अउर नाइ अपलोड कै सका जात है।\nतब्बव यदि आप इ फ़ाइल कय अपलोड करय चाहा जात है, तव कृपया वापस जाइ कय एकरे लिए कवनो अउर नाँव चुना जाय।\n[[File:$1|thumb|center|$1]]",
+ "fileexists-shared-forbidden": "इ नाँव कय फ़ाइल साझा फ़ाइल भंडार में पहिलवे से मौजूद है।\nतब्बो यदि आप इ फ़ाइल कय अपलोड करय चाहा जात है, तव कृपया वापिस जाइ कय एकरे खत्तीर कवनो दुसर नाँव चुना जाय।\n[[File:$1|thumb|center|$1]]",
+ "file-exists-duplicate": "यह फ़ाइल निम्नलिखित {{PLURAL:$1|फ़ाइल|फ़ाइलों}} की प्रति है:",
+ "file-deleted-duplicate": "इसी फ़ाइल ([[:$1]]) से हूबहू मेल खाती एक फ़ाइल पहले हटाई जा चुकी है।\nइसे फिर से अपलोड करने से पहले आपको पुरानी फ़ाइल का हटाने के इतिहास देख लेना चाहिए।",
+ "file-deleted-duplicate-notitle": "इससे पहले इस फ़ाइल के समान एक फ़ाइल को हटाया गया है, और शीर्षक छिपा दिया गया है।\nइसे फिर से अपलोड करने से पहले आप किसी ऐसे व्यक्ति से स्थिति की समीक्षा करने के लिए कहें जिसके पास छिपी फ़ाइल का डाटा देखने की क्षमता है।",
+ "uploadwarning": "अपलोड चेतावनी",
+ "uploadwarning-text": "फ़ाइल विवरण कय मिलाई कय फिर कोशिश करा जाय।",
+ "savefile": "फ़ाइल सहेजा जाय",
+ "uploaddisabled": "अपलोड प्रतिबंधित हैं।",
+ "copyuploaddisabled": "यू॰आर॰एल द्वारा अपलोड अक्षम हैं।",
+ "uploaddisabledtext": "फ़ाइल अपलोड अक्षम हैं।",
+ "php-uploaddisabledtext": "पी॰एच॰पी में फ़ाइल अपलोड बंद है।\nकृपया file_uploads जमाव कय जाँच करा जाय।",
+ "uploadscripted": "इ फ़ाइल में एच॰टी॰एम॰एल या स्क्रिप्ट कोड है, जवन वेब ब्राउज़र गलत पढि सकत है।",
+ "uploadscriptednamespace": "इ एस॰वी॰जी फ़ाइल में अमान्य नामजगह \"$1\" है।",
+ "uploadinvalidxml": "अपलोड करल फ़ाइल कय XML पार्स नाइ होई।",
+ "uploadvirus": "इ फ़ाइल में भाईरस हैं!ढेर जानकारी: $1",
+ "uploadjava": "ई फ़ाइल एकठु ज़िप फ़ाइल होय जवने मे एकठु जावा .class फ़ाइल है।\nजावा फ़ाइलन् कय अपलोड नाई कै सका जात है, काहेसे एकरे कारण सुरक्षा बाधा पार होइ जाई।",
+ "upload-source": "स्रोत फ़ाइल",
+ "sourcefilename": "स्रोत फ़ाइल कय नाँव:",
+ "sourceurl": "स्रोत यू॰आर॰एल:",
+ "destfilename": "लक्ष्य फ़ाइल नाव:",
+ "upload-maxfilesize": "अधिकतम फ़ाइल आकार: $1",
+ "upload-description": "फ़ाइल विवरण",
+ "upload-options": "अपलोड विकल्प",
+ "watchthisupload": "इ फ़ाइल पे ध्यान रक्खा जाय",
+ "filewasdeleted": "इस नाम की एक फ़ाइल पहले भी अपलोड होने के बाद हटाई जा चुकी है।\nफिरसे अपलोड करने से पहले आप $1 को अच्छी तरह से जाँचे।",
+ "filename-bad-prefix": "आप जो फ़ाइल अपलोड कर रहे हैं उसका नाम '''\"$1\"''' से शुरू होता है, जो डिजिटल कैमेरे द्वारा दिया गया नाम है।\nकृपया इस फ़ाइल के लिये कोई दूसरा अधिक जानकारीयुक्त नाम चुनें।",
+ "upload-success-subj": "अपलोड होइ गय",
+ "upload-success-msg": "आप कय [$2] से अपलोड असफल रहा। ई [[:{{ns:file}}:$1]] पे उपलब्ध है",
+ "upload-failure-subj": "अपलोड समस्या",
+ "upload-failure-msg": "[$2] से आप कय अपलोड में एकठु समस्या रहा:\n\n$1",
+ "upload-warning-subj": "अपलोड चेतावनी",
+ "upload-warning-msg": "आप कय [$2] से अपलोड कय साथे एकठु समस्या रहा। आप इ समस्या कय ठीक करेक लिए [[Special:Upload/stash/$1|अपलोड फ़ॉर्म]] पे लौट सका जात है।",
+ "upload-proto-error": "गलत प्रोटोकॉल",
+ "upload-proto-error-text": "रिमोट अपलोड कय लिये यू॰आर॰एल कय नाँव <code>http://</code> या <code>ftp://</code> से शुरू होब आवश्यक है।",
+ "upload-file-error": "आन्तरिक त्रुटि",
+ "upload-file-error-text": "सर्वर पे अस्थायी फ़ाइल बनावत समय आंतरिक त्रुटि आई गय।\nकृपया कवनो [[Special:ListUsers/sysop|प्रबंधक]] से संपर्क करा जाय।",
+ "upload-misc-error": "अज्ञात अपलोड त्रुटि",
+ "upload-misc-error-text": "अपलोड के दौरान कोई अज्ञात त्रुटि आई।\nकृपया यह पुष्टि कर लें कि यू॰आर॰एल वैध है और उस तक पहुँचा जा सकता है, उसके बाद फिर कोशिश करें।\nअगर फिर भी समस्या आती है तो किसी [[Special:ListUsers/sysop|प्रबंधक]] से संपर्क करें।",
+ "upload-too-many-redirects": "इ यू॰आर॰एल में ढेर कुल पुनर्निर्देशन हैं",
+ "upload-http-error": "एकठु एच॰टी॰टी॰पी त्रुटि आई गय: $1",
+ "upload-copy-upload-invalid-domain": "कॉपी अपलोड इ डोमेन से उपलब्ध नाई हैं।",
+ "backend-fail-stream": "फ़ाइल $1 स्ट्रीम नाई होई पाई।",
+ "backend-fail-backup": "फ़ाइल $1 बैकअप नाई होई पाई।",
+ "backend-fail-notexists": "फ़ाइल $1 मौजूद नाई है।",
+ "backend-fail-hashes": "तुलना कय लिए फ़ाइलन् कय हैश नाई मिला।",
+ "backend-fail-notsame": "एकठु ग़ैर-समान फ़ाइल $1 पे पहिलवे से मौजूद है।",
+ "backend-fail-invalidpath": "$1 मान्य भंडारण पथ नाई है।",
+ "backend-fail-delete": "\"$1\" फ़ाइल कय नाइ मेटाई गय।",
+ "backend-fail-describe": "फ़ाइल \"$1\" कय मेटाडाटा नाई बदल मिला।",
+ "backend-fail-alreadyexists": "फ़ाइल $1 पहिलवे से मौजूद है।",
+ "backend-fail-store": "फ़ाइल $1, $2 पे संग्रहीत नाई होई पाए।",
+ "backend-fail-copy": "\"$1\" फ़ाइल कय \"$2\" पे प्रतिलिपि नाई बनी पाए।",
+ "backend-fail-move": "फ़ाइल $1, $2 पे स्थानांतरित नाई होई पाए।",
+ "backend-fail-opentemp": "अस्थाई फ़ाइल खोल नाई खुला।",
+ "backend-fail-writetemp": "अस्थायी फ़ाइल पे लिखब संभव नाई है।",
+ "backend-fail-closetemp": "अस्थाई फ़ाइल बंद नाई होई पाय।",
+ "backend-fail-read": "फ़ाइल $1 नाई पढी मिला।",
+ "backend-fail-create": "फ़ाइल $1 लिखी नाई सका जात है।",
+ "backend-fail-maxsize": "फ़ाइल $1 नाई लिखी सका जात है काहे से ई {{PLURAL:$2|$2 बाईट}} से बड़ा है।",
+ "backend-fail-readonly": "भंडारण बैकेंड \"$1\" इ समय खाली पढ़ सका जात है (रीड-ओन्ली होय)। दिहल कारण रहा: \"$2\"",
+ "backend-fail-synced": "फ़ाइल \"$1\" आतंरिक भंडारण बैकेंड में असंगत स्थिति में है।",
+ "backend-fail-connect": "\"$1\" भंडारण बैकेंड से सम्पर्क स्थापित नाई कई मिला।",
+ "backend-fail-internal": "भंडारण बैकेंड \"$1\" में कवनो अज्ञात त्रुटि पैदा होइ गय।",
+ "backend-fail-contenttype": "\"$1\" मा सहेजै खत्तिर फाइल कय प्रकार नाइ निश्चित कै मिला ।",
+ "backend-fail-batchsize": "भंडारण बैकेंड कय $1 फ़ाइल {{PLURAL:$1|काम}} दिहा गा रहा; सीमा {{PLURAL:$2|$2 काम}} कय है।",
+ "backend-fail-usable": "फ़ाइल \"$1\" कय पर्याप्त अनुमति या अनुपस्थित डायरेक्ट्रीज़/कंटेनरन् कय कारण पढ़ा या लिखा नाइ जाय सकत है।",
+ "filejournal-fail-dbconnect": "भंडारण बैकेंड \"$1\" कय जर्नल डाटाबेस से सम्पर्क नाइ होइ पाय।",
+ "filejournal-fail-dbquery": "भंडारण बैकेंड \"$1\" कय जर्नल डाटाबेस कय अद्यतन नाइ कै मिला ।",
+ "lockmanager-notlocked": "\"$1\" कय अनलॉक नाइ कै मिला,इ बन्द नाइ है।",
+ "lockmanager-fail-closelock": "\"$1\" कय लॉक फ़ाइल बंद नाइ कै सका गय।",
+ "lockmanager-fail-deletelock": "\"$1\" कय लॉक फ़ाइल नाइ मिटाइ सका गय।",
+ "lockmanager-fail-acquirelock": "\"$1\" के लिए लॉक नाइ मिला।",
+ "lockmanager-fail-openlock": "\"$1\" के लिये लॉक फ़ाइल खोली नहीं जा सकी।",
+ "lockmanager-fail-releaselock": "\"$1\" के लिए लॉक हटाया नहीं जा सका।",
+ "lockmanager-fail-db-bucket": "बकेट $1 में आवश्यक संख्या में लॉक डाटाबेसों से सम्पर्क नहीं हो पाया।",
+ "lockmanager-fail-db-release": "डाटाबेस $1 से ताला हटाया नहीं जा सका।",
+ "lockmanager-fail-svr-acquire": "सर्वर $1 पर तालों को प्राप्त नहीं किया जा सका।",
+ "lockmanager-fail-svr-release": "सर्वर $1 से टाला हटाया नहीं जा सका।",
+ "zip-file-open-error": "ज़िप जाँच के लिए फ़ाइल खोलते समय त्रुटि आई।",
+ "zip-wrong-format": "निर्दिष्ट फ़ाइल एक ज़िप फ़ाइल नहीं थी।",
+ "zip-bad": "ज़िप फ़ाइल या तो दूषित है या किसी अन्य कारण से अपठनीय है।\nइसकी ठीक से सुरक्षा जाँच नहीं की जा सकती।",
+ "zip-unsupported": "यह फ़ाइल एक ज़िप फ़ाइल है जो ऐसी ज़िप विशेषताओं का प्रयोग करती है जो मीडियाविकि द्वारा समर्थित नहीं हैं।\nइसकी ठीक से सुरक्षा जाँच नहीं की जा सकती।",
+ "uploadstash": "स्टैश अपलोड करा जाय",
+ "uploadstash-summary": "यह पृष्ठ उन फ़ाइलों के लिए अभिगम उपलब्ध कराता है जो अपलोड की गई हैं ‍‌‍‌(या अपलोड प्रक्रिया में हैं) लेकिन विकी पर अभी भी प्रकाशित नहीं हुई हैं। ये फ़ाइलें अपलोड करने वाले सदस्य को छोड़कर किसी के लिए भी दर्शित नहीं हैं।",
+ "uploadstash-clear": "स्टैश करल फ़ाइल साफ़ करा जाय",
+ "uploadstash-nofiles": "आप कय लगे कवनो स्टैश करल फाइल नाइ है ।",
+ "uploadstash-badtoken": "इ काम असफल रहा ,लागत है आप कय सम्पादन प्रमाणपत्र कय अवधि खतम होइ गवा है ।",
+ "uploadstash-errclear": "फाइल कय साफ करब असफल रहा ।",
+ "uploadstash-refresh": "फाइल कय सुची रिफ्रेश करा जाय ।",
+ "invalid-chunk-offset": "अग्राह्य चंक ऑफ़सेट",
+ "img-auth-accessdenied": "पहुँच अस्वीकार",
+ "img-auth-nopathinfo": "PATH_INFO मौजूद नाइ है।\nआप कय सर्वर मा इ जानकारी भेजय खत्तीर जमाव नाइ है।\nइ सी॰जी॰आई-आधारित होइ सकत है औ img_auth कय स्वीकार नाइ करत है।\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization देखें।",
+ "img-auth-notindir": "अनुरोधित पथ जमावल अपलोड डायरेक्टरी मा नाइ है।",
+ "img-auth-badtitle": "\"$1\" से एकठु वैध शीर्षक बनावे मा असमर्थ।",
+ "img-auth-nologinnWL": "आप लाग इन् नाइ करे हौ औ \"$1\" श्वेतसूची मा नाइ हौ।",
+ "img-auth-nofile": "\"$1\" फाइल नाइ है।",
+ "img-auth-isdir": "आप डायरेक्टरी \"$1\" खोलेक कोशिश करा जात है ।\nखालि फ़ाइल खोली जा सकत है।",
+ "img-auth-streaming": "\"$1\" स्ट्रीम होत है।",
+ "img-auth-public": "img_auth.php निजी विकि से फ़ाइल देवै कय काम करत है।\nइ विकि सार्वजनिक विकि होय।\nउचित सुरक्षा खत्तीर img_auth.php अक्षम है।",
+ "img-auth-noread": "सदस्य कय \"$1\" पढै कय अनुमति नाइ है ।",
+ "http-invalid-url": "अमान्य यू॰आर॰एल: $1",
+ "http-invalid-scheme": "\"$1\" से शुरू होय वाले यू॰आर॰एल स्वीकार्य नाई हैं।",
+ "http-request-error": "एच॰टी॰टी॰पी अनुरोध अज्ञात त्रुटि कय नाते असफल रहा।",
+ "http-read-error": "एच॰टी॰टी॰पी पढ़य में त्रुटि।",
+ "http-timed-out": "एच॰टी॰टी॰पी अनुरोध कय समय खतम (टाइम आउट)",
+ "http-curl-error": "यू॰आर॰एल $1 पावे में त्रुटि",
+ "http-bad-status": "एच॰टी॰टी॰पी अनुरोध कय समय समस्या रहा: $1 $2",
+ "upload-curl-error6": "यू॰आर॰एल तक नाई पहुँच मिला।",
+ "upload-curl-error6-text": "दिहल यू॰आर॰एल तक नाई पहुँचि मिला।\nकृपया एक दाइ फिर से जाँच लिहा जाय कि यू॰आर॰एल सही है औ उ साइट चलत है।",
+ "upload-curl-error28": "अपलोड टाइम‍आउट",
+ "upload-curl-error28-text": "साइट कय जवाब देय मा बहुतय समय लागत है ।कृपया जाचा जाय कि साइट चलत है कि नाही अव फिरसे प्रयास कीन जाय ।आप कम भिड वाले समय प्रयास करय चाहा जाइ।",
+ "license": "लाइसेन्सिंग:",
+ "license-header": "लाइसेन्सिंग",
+ "nolicense": "कवनो नाइ चुना गय",
+ "licenses-edit": "लाइसेंस विकल्प सम्पादन",
+ "license-nopreview": "(झलक उपलब्ध नाइ है)",
+ "upload_source_file": "(आप कय कम्प्युटरसे लिहल फाइल)",
+ "listfiles-delete": "मिटावा जाय",
+ "listfiles-summary": "इ विशेष पन्ना अपलोड करल कुल फ़ाइल देखावत है।",
+ "listfiles_search_for": "मीडिया नाँव कय खर्तिन खोजा जाय:",
+ "imgfile": "फ़ाइल",
+ "listfiles": "फ़ाइल सूची",
+ "listfiles_thumb": "अंगूठाकार",
+ "listfiles_date": "मिती",
+ "listfiles_name": "नाँव",
+ "listfiles_user": "सदस्य",
+ "listfiles_size": "आकार",
+ "listfiles_description": "विवरण",
+ "listfiles_count": "अवतरण",
+ "listfiles-show-all": "एहमा चित्रन् कय पुरान अवतरण है",
+ "listfiles-latestversion": "हालिए कय अवतरण",
+ "listfiles-latestversion-yes": "हाँ",
+ "listfiles-latestversion-no": "नाही",
+ "file-anchor-link": "फाइल",
+ "filehist": "फाइल कय इतिहास",
+ "filehist-help": "मिति/समय मे क्लिक कइकै फाइल उ समय कैसन बिलगात रहा देखा जाय",
+ "filehist-deleteall": "कुल मेटावा जाय",
+ "filehist-deleteone": "मेटावा जाय",
+ "filehist-revert": "पहिले जैसन करा जाय",
+ "filehist-current": "अबहिनै कय",
+ "filehist-datetime": "मिति/समय",
+ "filehist-thumb": "अंगूठाकार प्रारूप",
+ "filehist-thumbtext": "$1 अवतरण कय अंगूठाकार प्रारूप।",
+ "filehist-nothumb": "कवनो अंगूठाकार नाइ है",
+ "filehist-user": "सदस्य",
+ "filehist-dimensions": "आकार",
+ "filehist-filesize": "फ़ाइल कय आकार",
+ "filehist-comment": "टिप्पणी",
+ "imagelinks": "फ़ाइल कय उपयोग",
+ "linkstoimage": "निचे दिहा {{PLURAL:$1|पन्ना}} में इ फ़ाइल कय कड़ि हैं:",
+ "linkstoimage-more": "{{PLURAL:$1|$1}} से ढेर पन्ना एहमा जोडात है।\nनिम्नोक्त सूची फ़ाइल से जुड़य वाले {{PLURAL:$1|$1 पन्ना}} देखावत है।\n[[Special:WhatLinksHere/$2|पूरा सूची]] उपलब्ध है।",
+ "nolinkstoimage": "इ फाइल से कवनो पन्ना नाइ जोडान है ।",
+ "morelinkstoimage": "इ फ़ाइल कय [[Special:WhatLinksHere/$1|अउर कड़ि]] देखा जाय।",
+ "linkstoimage-redirect": "$1(फ़ाइल पुनर्निर्देश) $2",
+ "duplicatesoffile": "निचे दिहा {{PLURAL:$1|फ़ाइल इ फ़ाइल कय प्रतिलिपि होय|$1 फ़ाइल इ फ़ाइल कय प्रतिलिपि होय}} ([[Special:FileDuplicateSearch/$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": "एकठु साझा भंडार",
+ "upload-disallowed-here": "आप इ फाइल कय उप्पर नाइ लिखी सका जात है",
+ "filerevert": "$1 कय पहिले जैसन करा जाय",
+ "filerevert-legend": "फ़ाइल कय पहिले जैसन करा जाय",
+ "filerevert-intro": "आप '''[[Media:$1|$1]]''' कय [$4 $2 कय $3 बजे कय अवतरण] कय पहिले जैसन करा जात है ।",
+ "filerevert-comment": "कारण:",
+ "filerevert-defaultcomment": "$1 कय $2 बजे कय अवतरण कय पहिले जैसन कै गय",
+ "filerevert-submit": "पहिले जैसन करा जाय",
+ "filerevert-success": "'''[[Media:$1|$1]]''' कय [$4 $2 कय $3 बजे कय अवतरण] कय पहिले जैसन कै गा है।",
+ "filerevert-badversion": "दिहल समय से मिलए वाला इ फ़ाइल कय कवनो पुरान अवतरण नाइ है।",
+ "filedelete": "$1 मिटावा जाय",
+ "filedelete-legend": "फ़ाइल मिटावा जाय",
+ "filedelete-intro": "आप फ़ाइल '''[[Media:$1|$1]]''' इतिहास सहित हटावे जावा जात है।",
+ "filedelete-intro-old": "आप '''[[Media:$1|$1]]''' कय [$4 $2 कय $3 बजे कय अवतरण] हटावे जावा जात हैं।",
+ "filedelete-comment": "कारण:",
+ "filedelete-submit": "मिटावा जाय",
+ "filedelete-success": "'''$1''' मेटावा है।",
+ "filedelete-success-old": "'''[[Media:$1|$1]]''' कय $2 कय $3 बजे कय अवतरण हटाई गा है।",
+ "filedelete-nofile": "<strong>$1</strong> नाई है.",
+ "filedelete-nofile-old": "\n'''$1''' का आपकी बताई विशेषताओं वाला संग्रहित अवतरण मौजूद नहीं है।",
+ "filedelete-otherreason": "अउर/दुसर कारण:",
+ "filedelete-reason-otherlist": "दुसर कारण",
+ "filedelete-reason-dropdown": "*हटावे कय साधारण कारण\n** कॉपीराइट उल्लंघन\n** डुप्लिकेट फ़ाइल",
+ "filedelete-edit-reasonlist": "हटावेक कारण बदला जाय",
+ "filedelete-maintenance": "रखरखाव चलत है अव रखरखाव कय दौरान फ़ाइलन् कय हटाइब औ पुनर्स्थापित करब मिनाही है।",
+ "filedelete-maintenance-title": "फ़ाइल नाइ हटाय सका जात है",
+ "mimesearch": "MIME खोज",
+ "mimesearch-summary": "MIME-प्रकारों के अनुसार फ़ाइलें खोजने के लिये इस पृष्ठ का इस्तेमाल किया जा सकता है।\nइनपुट: फ़ाइल का प्रकार/उपप्रकार या प्रकार/*, उदा॰ <code>image/jpeg</code>।",
+ "mimetype": "MIME प्रकार:",
+ "download": "डाउनलोड",
+ "unwatchedpages": "ध्यान ना दिहल पन्ना",
+ "listredirects": "पुनर्निर्देशन कय सूची",
+ "listduplicatedfiles": "डुप्लिकेट वाले फाइल",
+ "listduplicatedfiles-entry": "[[:फाइल:$1|$1]] कय लगे [[$3|{{PLURAL:$2|एक्ठु डुप्लिकेट|$2 डुप्लिकेट}}]].",
+ "unusedtemplates": "अप्रयुक्त साँचा",
+ "unusedtemplatestext": "इस पृष्ठ पर {{ns:template}} नामस्थान वाले वे सभी पृष्ठ इंगित है जो किसी अन्य पृष्ठ में शामिल नहीं हैं।\nइन्हें हटाने के पहले इन साँचों की और कड़ियाँ जाँच लें।",
+ "unusedtemplateswlh": "अउर कड़ि",
+ "randompage": "कवनो एक पन्ना",
+ "randompage-nopages": "ई {{PLURAL:$2|नामस्थान|नामस्थानन्}} मा कवनो फाइल नाइ है: $1।",
+ "randomincategory": "श्रेणी में कवनो एक (रैंडम) पन्ना",
+ "randomincategory-invalidcategory": "\"$1\" एकठु मान्य श्रेणी नाँव नाइ होय।",
+ "randomincategory-nopages": "[[:Category:$1|$1]] श्रेणी में कवनो पन्ना नाई है।",
+ "randomincategory-category": "श्रेणी:",
+ "randomincategory-legend": "श्रेणी में कवनो एक (रैंडम) पन्ना",
+ "randomredirect": "कवनो एक पुनर्निर्देशन पे जावा जाय",
+ "randomredirect-nopages": "नामस्थान \"$1\" में कवनो पुनर्निर्देशन नाइ है।",
+ "statistics": "आँकड़ा:",
+ "statistics-header-pages": "पन्ना कय आँकड़ा",
+ "statistics-header-edits": "संपादन कय आँकड़ा",
+ "statistics-header-users": "सदस्य आँकड़ा",
+ "statistics-header-hooks": "अउर आँकड़ा",
+ "statistics-articles": "सामग्री पन्ना",
+ "statistics-pages": "पन्ना",
+ "statistics-pages-desc": "विकि कय कुल पन्ना,बातचीत पन्ना अव रिडाइरेक्ट लैकय।",
+ "statistics-files": "अपलोड करल फाइल",
+ "statistics-edits": "{{SITENAME}} बनै कय बाद संपादन करल पन्ना",
+ "statistics-edits-average": "प्रति पन्ना औसत संपादन",
+ "statistics-users": "पंजीकृत [[Special:ListUsers|सदस्य]]",
+ "statistics-users-active": "सक्रिय सदस्य",
+ "statistics-users-active-desc": "पिछला {{PLURAL:$1|दिन}} से जवन सदस्य सक्रिय हँय",
+ "pageswithprop": "पन्ना जवनन में पन्ना गुण है",
+ "pageswithprop-legend": "पन्ना जवनन में पन्ना गुण है",
+ "pageswithprop-text": "इ पन्ना पन्नन कय गुण कय उपयोग करय वाले पन्नन कय सुचिबद्ध करत है ।",
+ "pageswithprop-prop": "गुण कय नाँव:",
+ "pageswithprop-submit": "खोजा जाय",
+ "pageswithprop-prophidden-long": "लम्मा पाठ गुण मान लुकुआवा है ($1)",
+ "pageswithprop-prophidden-binary": "बाइनरी पाठ गुण मान लुकुआवा है ($1)",
+ "doubleredirects": "दुईठु पुनर्निर्देश",
+ "doubleredirectstext": "यह पृष्ठ उन पृष्ठों की सूची देता है जो अन्य पुनर्निर्देशित पृष्ठों की ओर पुनर्निर्देशित हैं।\nहर कतार में पहले और दूसरे पुनर्निर्देशन की कड़ियाँ, तथा दूसरे पुनर्निर्देशन का लक्ष्य भी है, आमतौर पर यही \"वास्तविक\" लक्ष्यित पृष्ठ होगा, और पहला पुनर्देशन वास्तव में इसी को लक्ष्यित होना चाहिए।\n<del>काटी गई</del> प्रविष्टियाँ सुलझा दी गई हैं।",
+ "double-redirect-fixed-move": "[[$1]] कय घुस्काइ गय । इ अपने आप अपडेट होइ गवा है अव [[$2]] पे पुनर्निर्देशीत होइ ।",
+ "double-redirect-fixer": "पुनर्निर्देशन मिस्त्री",
+ "brokenredirects": "टूटल पुनर्निर्देशन पन्ना",
+ "brokenredirectstext": "ई कुल पुनर्निर्देश नामौजुद पन्नन मा लैजात हैं :",
+ "brokenredirects-edit": "सम्पादन करा जाय",
+ "brokenredirects-delete": "मेटावा जाय",
+ "withoutinterwiki": "बिना अंतरविकि कड़ि वाले पन्ना",
+ "withoutinterwiki-summary": "इ कुल पन्ना कवनो दुसर अवतरण कय पन्नन् से नाइ जोड़ात हैं ।",
+ "withoutinterwiki-legend": "उपसर्ग",
+ "withoutinterwiki-submit": "देखावा जाय",
+ "fewestrevisions": "सबसे कम अवतरण वाला पन्ना",
+ "nbytes": "$1 {{PLURAL:$1|बाइट|बाइट}}",
+ "ncategories": "{{PLURAL:$1|एक श्रेणी|श्रेणिन्}}",
+ "ninterwikis": "$1 अंतरविकी {{PLURAL:$1|कड़ी}}",
+ "nlinks": "$1 {{PLURAL:$1|कड़ी}}",
+ "nmembers": "$1 {{PLURAL:$1|सदस्य}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|सदस्य}}",
+ "nrevisions": "$1 {{PLURAL:$1|अवतरण}}",
+ "nviews": "{{PLURAL:$1|एक|$1}} दाइ देखि गा है",
+ "nimagelinks": "$1 {{PLURAL:$1|पन्ना|पन्नन्}} पे प्रयुक्त",
+ "ntransclusions": "$1 {{PLURAL:$1|पन्ना|पन्नन}} पे प्रयुक्त",
+ "specialpage-empty": "इ ब्यौरा कय खर्तीन कवनो परिणाम नाई है।",
+ "lonelypages": "एकाकी पन्ना",
+ "lonelypagestext": "निचे दिहा पन्ना से ना तो {{SITENAME}} कय अउर पन्ना जोड़ात है औ ना उ कवनो अउर पन्ना कय भित्तर जोडान है।",
+ "uncategorizedpages": "अश्रेणीकृत पन्ना",
+ "uncategorizedcategories": "अश्रेणीकृत श्रेणि",
+ "uncategorizedimages": "अश्रेणीकृत फ़ाइल",
+ "uncategorizedtemplates": "अश्रेणीकृत साँचा",
+ "unusedcategories": "अप्रयुक्त श्रेणि",
+ "unusedimages": "अप्रयुक्त फ़ाइल",
+ "wantedcategories": "जवन श्रेणि चाहि",
+ "wantedpages": "जवन पन्ना चाहिँ",
+ "wantedpages-badtitle": "परिणामन् में अवैध शीर्षक: $1",
+ "wantedfiles": "जवन फाइल चाहिँ",
+ "wantedfiletext-cat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी। साथ ही, जो पृष्ठ ऐसी फ़ाइलों का प्रयोग करते हैं जो मौजूद नहीं हैं, उनकी सूची [[:$1]] में है।",
+ "wantedfiletext-nocat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी।",
+ "wantedfiletext-nocat-noforeign": "इ कुल फाइल कय इस्तेमाल कै गा है लेकिन मौजुद नाइ है ।",
+ "wantedtemplates": "जवन साँचा चाहिँ",
+ "mostlinked": "सबसे ढेर जोड़ान पन्ना",
+ "mostlinkedcategories": "सबसे ढेर जोड़ान श्रेणि",
+ "mostlinkedtemplates": "सबसे ढेर ट्रांसक्लूड करल पन्ना",
+ "mostcategories": "सबसे ढेर श्रेणि वाले पन्ना",
+ "mostimages": "सबसे ढेर जोड़ान फाइल",
+ "mostinterwikis": "सबसे ढेर अंतरविकी कड़ि वाले पन्ना",
+ "mostrevisions": "सबसे ढेर अवतरण वाला पन्ना",
+ "prefixindex": "उपसर्ग अनुसार पन्ना",
+ "prefixindex-namespace": "उपसर्ग वाले कुल पन्ना ($1 नामस्थान)",
+ "prefixindex-strip": "सूची में उपसर्ग लुकुआवा जाय",
+ "shortpages": "छोट पन्ना",
+ "longpages": "लम्मा पन्ना",
+ "deadendpages": "बंद सिरा पन्ना",
+ "deadendpagestext": "नीचे दिहल पन्ना {{SITENAME}} कय अउर पन्नन् से नाइ जोडान है।",
+ "protectedpages": "सुरक्षित पन्ना",
+ "protectedpages-indef": "खालि अनिश्चितकालीन सुरक्षा",
+ "protectedpages-cascade": "कास्केडिङ सुरक्षा खालि",
+ "protectedpages-noredirect": "पुनर्निदेश लुकुआवा जाय",
+ "protectedpagesempty": "इ पारामिटर मे कवनो सुरक्षित पन्ना नाइ है ।",
+ "protectedpages-timestamp": "समय मोहर",
+ "protectedpages-page": "पन्ना",
+ "protectedpages-expiry": "खतम",
+ "protectedpages-performer": "सुरक्षित करय वाला सदस्य",
+ "protectedpages-params": "सुरक्षा प्राचल",
+ "protectedpages-reason": "कारण",
+ "protectedpages-unknown-timestamp": "अज्ञात",
+ "protectedpages-unknown-performer": "अज्ञात सदस्य",
+ "protectedtitles": "सुरक्षित शीर्षक",
+ "protectedtitles-summary": "इ पन्ना अइसन पन्ना शीर्षकन् कय सूची देत है जवने कय अभीन बनावै से सुरक्षित कई गा है। सुरक्षित पन्नन कय सूची देखेक खर्तिन [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] देखा जाय।",
+ "protectedtitlesempty": "इ नियमन् द्वारा कवनो भी शीर्षक सुरक्षित नाइ है।",
+ "listusers": "सदस्य सूची",
+ "listusers-editsonly": "अइसन सदस्य देखावा जाय जवन संपादन कै चुका हैँ ।",
+ "listusers-creationsort": "बनावै कय तिथि कय आधार पे क्रमांकन करा जाय",
+ "listusers-desc": "घटे कय क्रम मे मिलावा जाय",
+ "usereditcount": "$1 {{PLURAL:$1|सम्पादन}}",
+ "usercreated": "$1 कय $2 बजे बनाइ गय, सदस्यनाँव $3 होय",
+ "newpages": "नँवा पन्ना",
+ "newpages-username": "सदस्यनाँव:",
+ "ancientpages": "सबसे पुरान पन्ना",
+ "move": "घुस्कावा जाय",
+ "movethispage": "ई पन्ना कय नाँव बदला जाय",
+ "unusedcategoriestext": "निचे दिहा श्रेणी पन्ना मौजूद है लेकिन कवनो भी पन्ना या अउर श्रेणि एकर प्रयोग नाँइ करत हैं।",
+ "notargettitle": "लक्ष्य नाइ",
+ "notargettext": "इ काम कय करेक लिये आप लक्ष्य पन्ना या सदस्य नाइ बतावा गा है।",
+ "nopagetitle": "अइसन कवनो लक्ष्य पन्ना नाइ है",
+ "nopagetext": "आप कय द्वारा लक्षित पन्ना मौजूद नाइ है।",
+ "pager-newer-n": "{{PLURAL:$1|नँवा}} $1",
+ "pager-older-n": "{{PLURAL:$1|पुरान}} $1",
+ "suppress": "ओवरसाइट",
+ "querypage-disabled": "प्रदर्शन कारणन् से इ विशेष पन्ना अक्षम कै गा है।",
+ "apihelp": "API सहयोग",
+ "apihelp-no-such-module": "मोड्युल \"$1\" नाइ मिला ।",
+ "booksources": "किताबीन कय स्रोत",
+ "booksources-search-legend": "किताबीन कय स्रोत खोजा जाय",
+ "booksources-search": "खोजा जाय",
+ "booksources-text": "निचँवा पुरान व नँवा किताब बेचय वाले वेबसाइट कय एड्रेस हैं,जवने मा आप कय खोजल किताबिन् कय बारे मे ढेर जानकारी मिलि सकत है :",
+ "booksources-invalid-isbn": "इ ISBN सही नाइ लागत है ,मुल स्रोत से नकल करत कय कवनो गल्ती होइ गा होइ ,जाँचा लीन जाय ।",
+ "specialloguserlabel": "करयवाला:",
+ "speciallogtitlelabel": "प्रयोजन (शीर्षक या सदस्यनाँव):",
+ "log": "लॉग",
+ "all-logs-page": "कुल सार्वजनिक लॉग",
+ "logempty": "लॉग में अइसन कवनो चिज नाइ है।",
+ "log-title-wildcard": "इ पाठ से शुरू होय वाला शीर्षक खोजा जाय",
+ "showhideselectedlogentries": "चुनल लाग प्रविष्टि देखावा जाय/लुकुआवा जाय",
+ "allpages": "कुल पन्ना",
+ "nextpage": "अगला पन्ना ($1)",
+ "prevpage": "पहिलका पन्ना ($1)",
+ "allpagesfrom": "इ अक्षर से शुरु होय वाला पन्ना देखावा जाय:",
+ "allpagesto": "इ अक्षर से खतम होय वाला पन्ना देखावा जाय:",
+ "allarticles": "कुल पन्ना",
+ "allinnamespace": "कुल पन्ना ($1 नामस्थान)",
+ "allpagessubmit": "जावा जाय",
+ "allpagesprefix": "इ उपपद से शुरू होय वाला पन्ना देखावा जाय:",
+ "allpagesbadtitle": "दिहल शीर्षक अयोग्य, ख़ाली या गलत जोड़ान अंतर-भाषीय या अंतर-विकि उपपद रहा।\nएहमा एक या एक से ढेर अईसन कॅरेक्टर होई सकत हैं जवन शीर्षक में प्रयोग नाई कई सका जात अहै।",
+ "allpages-bad-ns": "{{SITENAME}} में \"$1\" नामस्थान नाइ है।",
+ "allpages-hide-redirects": "पुनर्निर्देश लुकुआवा जाय",
+ "cachedspecial-viewing-cached-ttl": "आप इ पन्ना कय कैश करल अवतरण देखा जात है ,जवन $1 पुरान होइ सकत है ।",
+ "cachedspecial-viewing-cached-ts": "आप इ पन्ना कय कैश करल अवतरण देखा जात है ,जवन कि पुरै सही नाइ होइ सकत है ।",
+ "cachedspecial-refresh-now": "हालिए कय देखा जाय ।",
+ "categories": "श्रेणी",
+ "categoriespagetext": "निम्नोक्त {{PLURAL:$1|श्रेणी|श्रेणि}} मा पन्ना या मीडिया है।\nजवन श्रेणिन् कय [[Special:UnusedCategories|अप्रयुक्त श्रेणि]] यहँ नाइ देखाई गा हैं।\n[[Special:WantedCategories|वांछित श्रेणि]] भी देखा जाय।",
+ "categoriesfrom": "इ अक्षर से शुरु होय वाला श्रेणी देखावा जाय:",
+ "special-categories-sort-count": "संख्या कय अनुसार क्रमांकित करा जाय",
+ "special-categories-sort-abc": "वर्णानुक्रम कय अनुसार देखावा जाय",
+ "deletedcontributions": "हटावल सदस्य योगदान",
+ "deletedcontributions-title": "हटावल सदस्य योगदान",
+ "sp-deletedcontributions-contribs": "योगदान",
+ "linksearch": "बाहरी कड़ी खोजा जाय",
+ "linksearch-pat": "खोजय खर्तीन पाठ:",
+ "linksearch-ns": "नामस्थान:",
+ "linksearch-ok": "खोजा जाय",
+ "linksearch-text": "\"*.wikipedia.org\" जैसन वाईल्ड-कार्ड्स प्रयोग कै सका जात है।\nकम-से-कम \".org\" जैसन कवनो top-level डोमेन कय आवश्यकता है।<br />\nस्वीकार्य {{PLURAL:$2|प्रोटोकॉल}}: <code>$1</code> (यदि कवनो प्रोटोकॉल ना दै जाए तव http:// कय प्रयोग कै सका जात है)",
+ "linksearch-line": "$2 में से $1 जोडान है",
+ "linksearch-error": "वाईल्डकार्ड्स होस्टनाम कय खालि शुरू में आइ सकत है।",
+ "listusersfrom": "इ अक्षर से शुरु होय वाले सदस्य देखावा जाय:",
+ "listusers-submit": "देखावा जाय",
+ "listusers-noresult": "कवनो सदस्य नाइ मिला ।",
+ "listusers-blocked": "(अवरोधित)",
+ "activeusers": "सक्रिय सदस्यन् कय सूची",
+ "activeusers-intro": "इ सक्रिय सदस्यन् कय सूची होय जे पिछला $1 {{PLURAL:$1|दिन}} में कुछ काम करें है।",
+ "activeusers-count": "$1 {{PLURAL:$1|काम}} पिछला $3 {{PLURAL:$3|दिन}} में",
+ "activeusers-from": "इ अक्षर से शुरु होय वाले सदस्य देखावा जाय:",
+ "activeusers-hidebots": "बॉट लुकुआवा जाय",
+ "activeusers-hidesysops": "प्रबंधक लुकुआवा जाय",
+ "activeusers-noresult": "कवनो सदस्य नाइ मिलें ।",
+ "listgrouprights": "सदस्य समूह अधिकार",
+ "listgrouprights-summary": "नीचे इ विकि खर्तीन परिभाषित सदस्य समूहन् कय सूची होय, सथवे में हर समूह से जोड़ान अधिकारो है।\nहर अधिकार कय बारे में [[{{MediaWiki:Listgrouprights-helppage}}|ढेर जानकरीओ]] उपलब्ध है।",
+ "listgrouprights-key": "* <span class=\"listgrouprights-granted\">दिहल अधिकार</span>\n* <span class=\"listgrouprights-revoked\">हटावल अधिकार</span>",
+ "listgrouprights-group": "गोल",
+ "listgrouprights-rights": "अधिकार",
+ "listgrouprights-helppage": "Help:गोल अधिकार",
+ "listgrouprights-members": "(सदस्य सूची)",
+ "listgrouprights-addgroup": "{{PLURAL:$2|समूह}} जोड़ा जाय: $1",
+ "listgrouprights-removegroup": "समूह {{PLURAL:$2|हटावा जाय}}: $1",
+ "listgrouprights-addgroup-all": "कुल समूह जोड़ा जाय",
+ "listgrouprights-removegroup-all": "कुल समूह हटावा जाय",
+ "listgrouprights-addgroup-self": "अपने खाता में {{PLURAL:$2|समूह}} जोड़ा जाय: $1",
+ "listgrouprights-removegroup-self": " अपने खाता से {{PLURAL:$2|समूह}} हटावा जाय: $1",
+ "listgrouprights-addgroup-self-all": "अपने खाता में कुल समूह कय शामिल करा जाय",
+ "listgrouprights-removegroup-self-all": "अपने खाता से कुल समूह हटावा जाय",
+ "listgrouprights-namespaceprotection-header": "नामस्थान पाबंदी",
+ "listgrouprights-namespaceprotection-namespace": "नामस्थान",
+ "listgrouprights-namespaceprotection-restrictedto": "अइसन अधिकार जवन संपादन करय देत हैं",
+ "trackingcategories": "ट्रैक करय वाले श्रेणी",
+ "trackingcategories-msg": "ट्रैक करय वाले श्रेणी",
+ "trackingcategories-name": "सनेशा कय नाँव",
+ "trackingcategories-desc": "श्रेणी राखेक क्राइटेरिया",
+ "trackingcategories-nodesc": "कवनो ढेर जानकारी नाइ है ।",
+ "trackingcategories-disabled": "श्रेणी अक्षम करा है",
+ "mailnologin": "कवनो पठवे वाला ठहर नाइ है",
+ "mailnologintext": "अउर सदस्यन् कय इ-मेल पठवे खत्तिर [[Special:UserLogin|लॉग इन]] करब आवश्यक है औ आप कय [[Special:Preferences|पसंद]] में वैध ई-मेल ठहर होब जरुरी है।",
+ "emailuser": "इ सदस्य कय ई-मेल पठवा जाय",
+ "emailuser-title-target": "इ {{GENDER:$1|सदस्य|सदस्या}} कय ई-मेल करा जाय।",
+ "emailuser-title-notarget": "सदस्य कय ई-मेल करा जाय",
+ "emailpage": "सदस्य कय ई-मेल करा जाय",
+ "emailpagetext": "नीचे कय पर्चा से आप इ {{GENDER:$1|सदस्य}} कय ई-मेल भेजि सका जात है।\nआप जवन ठहर [[Special:Preferences|आप कय पसंद]] में दिहा गा है उ इ ई-मेल कय \"भेजय वाले\" कय तौर पे आइ, इही से प्राप्तकर्ता आप कय सीधय जवाब दई सकत हैं।",
+ "defemailsubject": "{{SITENAME}} ई-मेल \"$1\" सदस्य से",
+ "usermaildisabled": "सदस्य ई-मेल अक्षम कै गय",
+ "usermaildisabledtext": "आप इ विकि पे अउर सदस्यन् कय ई-मेल नाइ भेज सका जात है",
+ "noemailtitle": "कवनो ई-मेल एड्रेस नाइ है",
+ "noemailtext": "इ सदस्य वैध ई-मेल ठहर नाइ दिहे हैं।",
+ "nowikiemailtext": "इ सदस्य अउर सदस्यन से इमेल ना पावै कय फैसला करें हँय ।",
+ "emailnotarget": "प्राप्तकर्ता कय लिए अस्तित्वहीन या अमान्य सदस्यनाम।",
+ "emailtarget": "पावै वाले कय सदस्यनाँव भरा जाय",
+ "emailusername": "सदस्यनाँव",
+ "emailusernamesubmit": "भेजो",
+ "email-legend": "कवनो अउर {{SITENAME}} सदस्य कय ई-मेल भेजा जाय",
+ "emailfrom": "प्रेषक:",
+ "emailto": "प्राप्तकर्ता:",
+ "emailsubject": "विषय:",
+ "emailmessage": "सनेशा:",
+ "emailsend": "भेजा जाय",
+ "emailccme": "हमरे इमेल कय प्रतिलिपि(कापी) हमँहु कय भेजा जाय ।",
+ "emailccsubject": "आप कय इमेल कय प्रतिलिपि(कापि) जवन $1 कय भेजि गय:$2",
+ "emailsent": "इमेल पठै गय",
+ "emailsenttext": "आप कय इमेल सनेशा पठै गय ।",
+ "emailuserfooter": "इ ई-मेल {{SITENAME}} कय \"सदस्य ई-मेल\" सुविधा से $1 से $2 कय भेजि गा रहा।",
+ "usermessage-summary": "प्रणाली सन्देश छोडत है।",
+ "usermessage-editor": "सिस्टम दूत",
+ "watchlist": "अवलोकन सुची",
+ "mywatchlist": "अवलोकन सुची",
+ "watchlistfor2": "$1 $2 कय खत्तिर",
+ "nowatchlist": "आप कय धियान सुची मा कवनो पन्ना नाइ है ।",
+ "watchlistanontext": "आपन धियान सुची कय देखय अव सम्पादन करय खत्तीर लाग इन कीन जाय ।",
+ "watchnologin": "लॉग इन नाइ करा गा है",
+ "addwatch": "ध्यानसूची में जोड़ा जाय",
+ "addedwatchtext": "आप कय [[Special:Watchlist|ध्यानसूची]] मा \"[[:$1]]\" पन्ना जोड़ाइ गय।\nभविष्य मा इ पन्ना अव एकर बातचीत पन्ना मा होवै वाला बदलाव आप कय ध्यानसूची मा देखाइ।",
+ "addedwatchtext-short": "\"$1\" कय आप कय धियान सुची मा डारी गय ।",
+ "removewatch": "ध्यानसूची से हटावा जाय",
+ "removedwatchtext": "\"[[:$1]]\" नाँव कय पन्ना कय आपकय [[Special:Watchlist|ध्यानसूची]] से हटाय दिहा गा है।",
+ "removedwatchtext-short": "\"$1\" कय आप कय धियान सुची से निकारि गय ।",
+ "watch": "ध्यान रक्खा जाय",
+ "watchthispage": "इ पन्ना पे ध्यान रक्खा जाय",
+ "unwatch": "ध्यान हटावा जाय",
+ "unwatchthispage": "ध्यानसूची से हटावा जाय",
+ "notanarticle": "सामग्री पन्ना नाइ होय",
+ "notvisiblerev": "पूर्वावलोकन हटाइ गय",
+ "watchlist-details": "बातचीत पन्ना कय अलावा {{PLURAL:$1|$1 पन्ना}} आप कय ध्यानसूची में है।",
+ "wlheader-enotif": "ई-मेल नोटिफ़िकेशन सक्षम है।",
+ "wlheader-showupdated": "पन्ना जवन आपकय द्वारा देखय जाएक बाद बदलि गा है '''बोल्ड''' मे देखाइ।",
+ "wlshowlast": "पिछला $1 घंटा $2 दिन देखा जाय",
+ "watchlist-options": "ध्यानसूची विकल्प",
+ "watching": "ध्यान देत हँय...",
+ "unwatching": "ध्यानसूची से हटत है...",
+ "watcherrortext": "\"$1\" कय खत्तीर आप कय ध्यानसूची सेटिंग बदलत समय त्रुटि होई गवा।",
+ "enotif_reset": "कुल पन्ना कय देखल पन्ना करा जाय",
+ "enotif_impersonal_salutation": "{{SITENAME}} सदस्य",
+ "enotif_subject_deleted": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} हटाए दिहे हैं",
+ "enotif_subject_created": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} बनाए दिहें हैं",
+ "enotif_subject_moved": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} घुस्काय दिहे हैं",
+ "enotif_subject_restored": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} पुनर्स्थापित कै दिहे हैं",
+ "enotif_subject_changed": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} बद़ल दिहे हैं",
+ "enotif_body_intro_deleted": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} $PAGEEDITDATE कय हटाइ दिहें है, देखा जाय $3।",
+ "enotif_body_intro_created": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} $PAGEEDITDATE कय बनाए हैं, वर्तमान अवतरण कय लिए $3 देखा जाय।",
+ "enotif_body_intro_moved": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} $PAGEEDITDATE कय घुस्काए हैं, वर्तमान अवतरण कय लिए $3 देखा जाय।",
+ "enotif_body_intro_restored": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} $PAGEEDITDATE कय पुनर्स्थापित करे हैं, वर्तमान अवतरण कय लिए $3 देखा जाय।",
+ "enotif_body_intro_changed": "{{SITENAME}} पन्ना $1 कय {{gender:$2|$2}} $PAGEEDITDATE कय बदलें हैं, वर्तमान अवतरण कय लिए $3 देखा जाय।",
+ "enotif_lastvisited": "आप कय आखिरी भेंट कय बाद करल बदलाव देखय खर्तीन $1 देखा जाय।",
+ "enotif_lastdiff": "इ बदलाव देखय खत्तिर $1 देखा जाय।",
+ "enotif_anon_editor": "अज्ञात प्रयोगकर्ता $1",
+ "enotif_body": "प्रिय $WATCHINGUSERNAME जी,\n\n$PAGEINTRO $NEWPAGE\n\nसम्पादन सारांश: $PAGESUMMARY $PAGEMINOREDIT\n\nसंपादक से संपर्क करें:\nई-मेल: $PAGEEDITOR_EMAIL\nविकि: $PAGEEDITOR_WIKI\n\nजब तक आप इस पृष्ठ पर लॉगिन कर के फिर से नहीं जाते, तब तक और बदलाव होने पर भी आपको फिर से सूचना नहीं भेजी जाएगी।\nआप चाहें तो अपनी ध्यानसूची में मौजूद सभी पन्नों के लिए सूचना चिन्ह को भी बदल सकते हैं।\n\nआपकी सहायिका, {{SITENAME}} की सूचक प्रणाली\n\n--\nअपनी ई-मेल सूचना के जमाव बदलने के लिये देखें\n{{canonicalurl:{{#special:Preferences}}}}\n\nअपनी ध्यानसूची के जमाव बदलने के लिए देखें\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nइस पृष्ठ को अपनी ध्यानसूची से हटाने के लिये देखें\n$UNWATCHURL\n\nराय देने या अधिक सहायता पाने के लिए:\n$HELPPAGE",
+ "deletepage": "पन्ना मेटावा जाय",
+ "confirm": "सुनिश्चित करा जाय",
+ "excontent": "लेख रहा: '$1'",
+ "excontentauthor": "लिखा रहा: '$1' (औ खाली '[[Special:Contributions/$2|$2]]' कय योगदान रहा।)",
+ "exbeforeblank": "खाली करय से पहिले पाठ रहा: '$1'",
+ "delete-confirm": "\"$1\" मिटावा जाय",
+ "delete-legend": "मेटावा जाय",
+ "confirmdeletetext": "आप एकठु पन्ना कय अव ओकरे कुल अवतरण सहित हटावे जावा जात है।\nजाँच लीन जाय कि आप इ करय चाहा जात है, आप एकरे परिणाम कय जाना जात है, औ आप इ [[{{MediaWiki:Policy-url}}|नीति]] कय अनुसार करा जात है।",
+ "actioncomplete": "काम पुरा होइ गवा",
+ "actionfailed": "काम असफल",
+ "deletedtext": "\"$1\" कय हटाई गा है।\nहालिए में हटावल पन्नन कय सूची खत्तीर $2 देखा जाय।",
+ "dellogpage": "हटावे कय लॉग",
+ "dellogpagetext": "नीचे हालिए में हटावल पन्नन कय सूची है।",
+ "deletionlog": "हटावे कय लॉग",
+ "reverted": "पुरान अवतरण कय पहिले जैसन कै गय",
+ "deletecomment": "कारण:",
+ "deleteotherreason": "अउर/दुसर कारण:",
+ "deletereasonotherlist": "दुसर कारण",
+ "deletereason-dropdown": "*हटावे कय सामान्य कारण\n** स्पैम\n** बर्बरता\n** कॉपीराइट उल्लंघन\n** लेखक कय अनुरोध\n** टूटल अनुप्रेषण",
+ "delete-edit-reasonlist": "हटावे कय कारण संपादित करा जाय",
+ "delete-toobig": "इ पन्ना कय संपादन इतिहास $1 से ढेर {{PLURAL:$1|अवतरण}} होएक नाते से बहुत बड़ा है।\n{{SITENAME}} कय अनपेक्षित रूप से बंद होए से रोकेक लिये ऐसन पन्नन् कय हटावे कय अनुमति नाइ है।",
+ "delete-warning-toobig": "इ पन्ना कय संपादन इतिहास $1 से ढेर {{PLURAL:$1|अवतरण}} होएक नाते से बहुत बड़ा है।\nएका हटावे से {{SITENAME}} कय डाटाबेस कय गतिविधिन् में व्यवधान आइ सकत है;\nकृपया सोच समझ कर आगे बढ़ें।",
+ "deleteprotected": "आप इ पन्ना कय नाइ मिटाइ सका जात है काहे से इ पन्ना सुरक्षित है ।",
+ "deleting-backlinks-warning": "'''चेतावनी:''' जवन पन्ना आप हटावे जावा जात है ओसे [[Special:WhatLinksHere/{{FULLPAGENAME}}|अउर पन्ना]] जुड़त है या ओसे ट्रांसक्लूड करत है।",
+ "rollback": "संपादन वापिस लिहा जाय",
+ "rollbacklink": "वापिस लिहा जाय",
+ "rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादन}} वापिस लिहा जाय",
+ "rollbacklinkcount-morethan": "$1 से ढेर {{PLURAL:$1|सम्पादन}} वापिस लिहा जाय",
+ "rollbackfailed": "वापिस लेब असफल रहा",
+ "cantrollback": "पुरान अवतरण कय पहिले जैसन नाइ कै सका जात है ; इ पन्ना कय आखिरी योगदानकर्ता खालि इ लेख कय लिखे हैं ।",
+ "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|बातचीत]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा किए गए [[:$1]] के पिछले संपादन को वापिस पुरानी स्थिति पर नहीं लाया जा सकता है;\nकिसी और ने इस बीच या तो इस पृष्ठ को फिर से संपादित कर दिया है या पहले ही पृष्ठ पुरानी स्थिति पर लाया जा चुका है।\n\nइस पृष्ठ का अन्तिम संपादन [[User:$3|$3]] ([[User talk:$3|बातचीत]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ने किया है।",
+ "editcomment": "संपादन सारांश रहा: \"''$1''\"।",
+ "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|बातचीत]])से [[User:$1|$1]] कय करल पिछला संशोधन उल्टाई कय पहिले जैसन कै गय",
+ "revertpage-nouser": "(सदस्य नाँव हटाइ गा है) कय संपादन कय हटाइकए {{GENDER:$1|[[User:$1|$1]]}} कय अन्तिम अवतरण कय पहिले जैसन कै गय।",
+ "rollback-success": "$1 कय संपादन हटाइ गय;\n$2 कय संपादित अन्तिम अवतरण कय पुनर्स्थापित कै गय।",
+ "sessionfailure-title": "सत्र विफलता",
+ "sessionfailure": "ऐसा प्रतीत होता है कि आपके लॉगिन सत्र के साथ कोई समस्या है।\nसत्र अपहरण से बचाने के लिए सावधानी के तौर पर आपका यह क्रियाकलाप रद्द कर दिया गया है।\nकृपया पीछे जाएँ और पृष्ठ को पुनः लोड करें, तब दुबारा कोशिश करें।",
+ "protectlogpage": "सुरक्षा लॉग",
+ "protectlogtext": "नीचे पन्ना सुरक्षा कय बदलाव कय सूची है।\nवर्तमान सुरक्षित पन्नन कय सूची कय लिए [[Special:ProtectedPages|सुरक्षित पन्ना कय सूची]] देखा जाय।",
+ "protectedarticle": "\"[[$1]]\" कय सुरक्षित कै गय",
+ "modifiedarticleprotection": "\"[[$1]]\" कय सुरक्षा-स्तर बदलि गय",
+ "unprotectedarticle": "\"[[$1]]\" से सुरक्षा हटाइ गय",
+ "movedarticleprotection": "सुरक्षा स्तर \"[[$2]]\" से बदलि कय \"[[$1]]\" कै गय",
+ "protect-title": "\"$1\" कय सुरक्षा स्तर बदला जाय",
+ "protect-title-notallowed": "\"$1\" कय सुरक्षा स्तर देखा जाय",
+ "prot_1movedto2": "[[$1]] कय नाँव बदलि कय [[$2]] कै गय",
+ "protect-badnamespace-title": "सुरक्षाहीन नामस्थान",
+ "protect-badnamespace-text": "इ नामस्थान मा पन्ना सुरक्षित नाइ कै सका जात है।",
+ "protect-norestrictiontypes-text": "इ पन्ना कय सुरक्षित नाइ कै सका जात है काहे से कवनो सुरक्षा प्रकार नाइ है ।",
+ "protect-norestrictiontypes-title": "सुरक्षाहीन पन्ना",
+ "protect-legend": "सुरक्षा निर्धारित करा जाय",
+ "protectcomment": "कारण :",
+ "protectexpiry": "समाप्ति:",
+ "protect_expiry_invalid": "समाप्ती समय गलत अहै।",
+ "protect_expiry_old": "समाप्ती समय बीत चुका है।",
+ "protect-unchain-permissions": "अउर सुरक्षा विकल्प खोला जाय",
+ "protect-text": "'''$1''' पन्ना कय सुरक्षा-स्तर आप हिँया देख सका जात है औ ओका बदल सका जात है।",
+ "protect-locked-blocked": "आप बाधित होने की स्थिति में सुरक्षा स्थर में परिवर्तन नहीं कर सकते।\nपृष्ठ '''$1''' की वर्तमान स्थिति यह है:",
+ "protect-locked-dblock": "डेटाबेस में सक्रिय लॉक होने की वजह से सुरक्षा स्तर में कोई परिवर्तन नहीं किया जा सकता।\nपृष्ठ '''$1''' की वर्तमान स्थिति यह है:",
+ "protect-locked-access": "आपको इस पृष्ठ का सुरक्षा-स्तर बदलने की अनुमति नहीं है।\n'''$1''' का वर्तमान सुरक्षा-स्तर यह है:",
+ "protect-cascadeon": "यह पृष्ठ अभी सुरक्षित है क्योंकि यह {{PLURAL:$1|इस पृष्ठ की|इन पृष्ठों की}} सुरक्षा-सीढ़ी में है। इस पृष्ठ के सुरक्षा-स्तर में बदलाव से सुरक्षा-सीढ़ी में बदलाव नहीं होगा।",
+ "protect-default": "कुल सदस्यन कय अनुमति दिहा जाय",
+ "protect-fallback": "खालि \"$1\" अधिकार वाले सदस्यन् कय अनुमति दिहा जाय",
+ "protect-level-autoconfirmed": "खालि स्वतः स्थापित सदस्यन् कय अनुमति दिहा जाय",
+ "protect-level-sysop": "खाली प्रबन्धकन् कय अनुमति दिहा जाय",
+ "protect-summary-cascade": "सीढ़ी",
+ "protect-expiring": "समाप्ती $1 (UTC)",
+ "protect-expiring-local": "समाप्ती $1",
+ "protect-expiry-indefinite": "अनिश्चितकालीन",
+ "protect-cascade": "इ पन्ना से जोडान पन्नन् कय सुरक्षित करा जाय (सुरक्षा सीढी)",
+ "protect-cantedit": "आप इ पन्ना कय सुरक्षा स्तर नाई बदलि सका जात अहै काहे से आप कय एकर अनुमति नाइ है ।",
+ "protect-othertime": "कवनो अउर समय:",
+ "protect-othertime-op": "कवनो अउर समय",
+ "protect-existing-expiry": "वर्तमान समय सीमा :$3, $2",
+ "protect-otherreason": "अउर/दुसर कारण:",
+ "protect-otherreason-op": "दुसर कारण",
+ "protect-dropdown": "*सुरक्षा कय आम कारण\n**ढेर बर्बरता \n**ढेर स्पैम\n**अफलदायी सम्पादन युद्ध\n**ढेर खोल जाय वाला पृष्ठ",
+ "protect-edit-reasonlist": "सुरक्षा कय कारण बदला जाय",
+ "protect-expiry-options": "एक घंटा:1 hour,एक दिन:1 day,एक हप्ता:1 week,दुइ हप्ता:2 weeks,एक महीन्ना:1 month,तीन महीन्ना:3 months,छः महीन्ना:6 months,एक साल:1 year,हमेशा खत्तिर:infinite",
+ "restriction-type": "अधिकार:",
+ "restriction-level": "प्रतिबन्ध स्तरः",
+ "minimum-size": "न्यूनतम आकार",
+ "maximum-size": "अधिकतम आकार:",
+ "pagesize": "(बाइट)",
+ "restriction-edit": "सम्पादन करा जाय",
+ "restriction-move": "घुस्कावा जाय",
+ "restriction-create": "बनावा जाय",
+ "restriction-upload": "अपलोड करा जाय",
+ "restriction-level-sysop": "पूर्ण सुरक्षित",
+ "restriction-level-autoconfirmed": "अर्ध-सुरक्षित",
+ "restriction-level-all": "कवनो स्तर",
+ "undelete": "मेटावल पन्ना देखावा जाय",
+ "undeletepage": "हटावल पन्ना देखा जाय औ पुनर्स्थापित करा जाय",
+ "undeletepagetitle": "'''नीचे [[:$1|$1]] कय हटावल अवतरण देखाई गा है।'''",
+ "viewdeletedpage": "मेटावल पन्ना देखावा जाय",
+ "undeletepagetext": "निम्न {{PLURAL:$1|$1 पृष्ठ|$1 पृष्ठों}} को हटा दिया गया है, लेकिन अभी ये लेखागार में हैं और पुनर्स्थापित किये जा सकते हैं।\nलेखागार समय-समय पर साफ किये जाते हैं।",
+ "undelete-fieldset-title": "अवतरण पहिले जैसन करा जाय",
+ "undeleteextrahelp": "पृष्ठ का संपूर्ण इतिहास वापस लाने के लिए सभी बक्सों से सही का निशान हटा दें और '''''{{int:undeletebtn}}''''' पर क्लिक करें।\nचुनिंदा इतिहास को वापस लाने के लिए उन अवतरणों के बगल के बक्सों पर सही का निशान लगाएँ और '''''{{int:undeletebtn}}''''' पर क्लिक करें।",
+ "undeleterevisions": "$1 अवतरण लेखागार में {{PLURAL:$1|है}}",
+ "undeletehistory": "यदि आप पृष्ठ को पुनर्स्थापित करते हैं तो सभी अवतरण इतिहास में पुनर्स्थापित हो जायेंगे।\nहटाने के बाद यदि एक नया पृष्ठ उसी नाम से बनाया गया है तो पुनर्स्थापित अवतरण पिछले इतिहास में दर्शित होंगे।",
+ "undeleterevdel": "यदि पुनर्स्थापन के फलस्वरूप शीर्ष पृष्ठ या फ़ाइल अवतरण आंशिक रूप से मिट सकता है, तो इसे नहीं किया जायेगा।\nऐसी स्थिति में, आपको नवीनतम मिटाए गए अवतरण को बिना सही के निशान लगाये हुए या बिना छुपाये रखना होगा।",
+ "undeletehistorynoadmin": "ई पन्ना हटाई दिहा गा है।\nहटावै कय कारन नीचे सारांश में दिहा है, अउर साथय उ सदस्यन् कय बारे में विस्तार भी दिहा है, जे हटावै से पहिले इ पन्ना कय संपादित करे रहें।\nइ हटावल अवतरण कय पाठ केवल प्रबंधकन् कय लगे है।",
+ "undelete-revision": "$1 ($4 कय $5 बजे $3 बनाइन रहा) कय मेटावल संस्करण:",
+ "undeleterevision-missing": "अमान्य अथवा अनुपस्थित अवतरण।\nया तो आप ग़लत कड़ी प्रयोग कर रहे हैं, या यह अवतरण पुनर्स्थापित किया जा चुका है, अथवा इसे लेखागार से हटा दिया गया है।",
+ "undelete-nodiff": "कवनो पुरान अवतरण नाँइ मिला।",
+ "undeletebtn": "वापस लै आवा जाय",
+ "undeletelink": "देखा जाय/शुरु कय जैसन करा जाय",
+ "undeleteviewlink": "देखा जाय",
+ "undeleteinvert": "चुनाव उल्टा करा जाय",
+ "undeletecomment": "कारण:",
+ "undeletedrevisions": "{{PLURAL:$1|अवतरण पहिले जइसन कै गय}}",
+ "undeletedrevisions-files": "{{PLURAL:$1|1 अवतरण|$1 अवतरण}} औ {{PLURAL:$2|1 फ़ाइल}} पहिले जइसन कै गय",
+ "undeletedfiles": "{{PLURAL:$1|1 फ़ाइल|$1 फ़ाइल}} पहिले जइसन कै गय",
+ "cannotundelete": "पहिले जइसन नाइ कै मिला : $1",
+ "undeletedpage": "'''$1 कय पहिले जइसन कै गए'''\n\nहालिए में हटावल अव पुनर्स्थापित करल पन्नन् कय जानकारी कय खर्तीन [[Special:Log/delete|हटावे कय लॉग]] देखा जाय।",
+ "undelete-header": "हालिए में हटावल पन्ना द़ेखयक खर्तीन [[Special:Log/delete|हटावे कय लॉग]] देखा जाय।",
+ "undelete-search-title": "हटावल पन्ना खोजा जाय",
+ "undelete-search-box": "हटावल पन्ना खोजा जाय",
+ "undelete-search-prefix": "शुरूआती शब्द कय अनुसार पन्ना खोजा जाय:",
+ "undelete-search-submit": "खोजा जाय",
+ "undelete-no-results": "हटावल पन्नन कय लेखागार में मिलत जुलत कवनो पन्ना नाइ मिला।",
+ "undelete-filename-mismatch": "$1 कय फ़ाइल कय हटावल अवतरण पुनर्स्थापित नाइ कै सका जात है: फ़ाइल कय नाँव मिलत जुलत नाइ है ।",
+ "undelete-bad-store-key": "$1 कय फ़ाइल अवतरण पुनर्स्थापित नाइ कै सका जात है: हटावे से पहिले फ़ाइल मौजूद नाइ रहा।",
+ "undelete-cleanup-error": "लेखागार में से अप्रयुक्त फ़ाइल \"$1\" हटावै में त्रुटि।",
+ "undelete-missing-filearchive": "फ़ाइल पुरालेख आई॰डी $1 को पुनर्स्थापित करने में असक्षम हैं, क्योंकि यह डाटाबेस में उपलब्ध नहीं है।\nया ऐसा भी हो सकता है कि इसे पहले से ही पुनर्स्थापित किया जा चुका हो।",
+ "undelete-error": "पन्ना पुनर्स्थापन में त्रुटि",
+ "undelete-error-short": "फ़ाइल पुनर्स्थापन में त्रुटि: $1",
+ "undelete-error-long": "फ़ाइल पुनर्स्थापन में आवल त्रुटि:\n\n$1",
+ "undelete-show-file-confirm": "का आप सहि में फ़ाइल \"<nowiki>$1</nowiki>\" कय $2 कय $3 बजे बनल, हटावल अवतरण कय देखेक चाहा जात है?",
+ "undelete-show-file-submit": "हाँ",
+ "namespace": "नामस्थान:",
+ "invert": "चुनाव उल्टा करा जाय",
+ "tooltip-invert": "चयनित नामस्थान (और संबद्ध नामस्थान यदि जाँच) के भीतर पृष्ठों में किए गए परिवर्तन छुपाने के लिए इस बक्से को चिह्नित करें",
+ "namespace_association": "सम्बद्ध नामस्थान",
+ "tooltip-namespace_association": "भी बात या विषय नाम स्थान चयनित नाम स्थान के साथ जुड़े को शामिल करने के लिए इस बक्से को चिह्नित करें।",
+ "blanknamespace": "(मुख्य)",
+ "contributions": "{{GENDER:$1|सदस्य}} योगदान",
+ "contributions-title": "$1 कय योगदान",
+ "mycontris": "योगदान",
+ "contribsub2": "{{GENDER:$3|$1}} ($2) कय खर्तीन",
+ "contributions-userdoesnotexist": "सदस्य \"$1\" पंजीकृत नाइ है।",
+ "nocontribs": "इन कसौटियों से मिलनेवाले बदलाव मिले नहीं।",
+ "uctop": "(अबहिनै कय)",
+ "month": "इ महिन्नासे (औ पुरान):",
+ "year": "इ सालसे (औ पुरान):",
+ "sp-contributions-newbies": "खालि नँवा सदस्यन् कय योगदान देखावा जाय",
+ "sp-contributions-newbies-sub": "नँवा सदस्यन कय खर्तीन",
+ "sp-contributions-newbies-title": "नँवा सदस्यन् कय योगदान",
+ "sp-contributions-blocklog": "ब्लॉक सूची",
+ "sp-contributions-suppresslog": "हटावल सदस्य योगदान",
+ "sp-contributions-deleted": "हटावल सदस्य योगदान",
+ "sp-contributions-uploads": "अपलोड",
+ "sp-contributions-logs": "लॉग",
+ "sp-contributions-talk": "बातचीत",
+ "sp-contributions-userrights": "सदस्य अधिकार प्रबंधन",
+ "sp-contributions-blocked-notice": "ई सदस्य अभीन अवरोधित है।\nसदंर्भ कय लिए ताज़ातरीन अवरोध लॉग प्रविष्टि नीचे दीहा है:",
+ "sp-contributions-blocked-notice-anon": "ई आईपी ठहर अभीन अवरोधित है।\nसदंर्भ कय लिए ताज़ातरीन अवरोध लॉग प्रविष्टि नीचा दीहा है:",
+ "sp-contributions-search": "योगदान कय खर्तीन खोज",
+ "sp-contributions-username": "आईपी एड्रेस या सदस्यनाँव:",
+ "sp-contributions-toponly": "केवल उन सम्पादनों को दिखाएँ जो नवीनतम संशोधन हैं",
+ "sp-contributions-newonly": "केवल वे सम्पादन दिखाएँ जिनसे पृष्ठ निर्मित हुए हों",
+ "sp-contributions-submit": "खोजा जाय",
+ "whatlinkshere": "हिँया का जोडान अहै",
+ "whatlinkshere-title": "$1 से जोडान पन्ना",
+ "whatlinkshere-page": "पन्ना:",
+ "linkshere": "नीचे दिहा पन्ना '''[[:$1]]''' से जोडान है:",
+ "nolinkshere": "'''[[:$1]]''' से कुछ नाइ जोडान् है।",
+ "nolinkshere-ns": "चुनल नामस्थानसे '''[[:$1]]''' से कवनो पन्ना नाइ जोडान् है।",
+ "isredirect": "पुनर्निर्देशन पन्ना",
+ "istemplate": "मिलावा जाय",
+ "isimage": "फ़ाइल कय कड़ी",
+ "whatlinkshere-prev": "{{PLURAL:$1|पिछला}}",
+ "whatlinkshere-next": "{{PLURAL:$1|अगला}}",
+ "whatlinkshere-links": "← कड़ि",
+ "whatlinkshere-hideredirs": "$1 पुनर्निर्देश",
+ "whatlinkshere-hidetrans": "$1 ट्रान्स्क्ल्युजन्स",
+ "whatlinkshere-hidelinks": "$1 कड़ि",
+ "whatlinkshere-hideimages": "$1 फ़ाइल लिंक",
+ "whatlinkshere-filters": "छनना",
+ "autoblockid": "अपने आप अवरोध #$1",
+ "block": "सदस्य कय अवरोधित करा जाय।",
+ "unblock": "सदस्य कय अवरोध हटावा जाय।",
+ "blockip": "{{GENDER:$1|सदस्य}}",
+ "blockip-legend": "सदस्य कय अवरोधित करा जाय।",
+ "blockiptext": "विशिष्ठ IP पते अथवा सदस्य नाम को लिखने के अधिकार से बाध्य करने के लिए निम्न पत्र का प्रयोग करें।\nयह सिर्फ बर्बरता को रोकने के लिए ही किया जाना चाहिए, और [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार ही करना चाहिए।\nनीचे विशिष्ठ कारण भी लिखें (उदाहरण के लिए, सटीक पृष्ठों को दर्शाते हुए, जिनमें बर्बरता की गई हो)।",
+ "ipaddressorusername": "आईपी एड्रेस या सदस्यनाँव:",
+ "ipbexpiry": "समाप्ति:",
+ "ipbreason": "कारण:",
+ "ipbreason-dropdown": "*अवरोधित करने के साधारण कारण\n** अवैध सदस्यनाम\n** एक से अधिक खातें खोलकर उनका दुरुपयोग करना\n** गलत जानकारी भरना\n** पृष्ठों में कचरा भरना\n** पृष्ठों से सामग्री हटाना‍‍‍‍‍\n** बाहरी जालस्थलों की फ़ालतू कड़ियां देना \n** सदस्यों को तंग करना",
+ "ipb-hardblock": "सत्राराम्भित प्रयोक्ताओं को इस आईपी पते का सम्पादन करने से रोकें",
+ "ipbcreateaccount": "खाते बनावेकै रोका जाय",
+ "ipbemailban": "सदस्य कय ईमेल करै से रोका जाय",
+ "ipbenableautoblock": "इस सदस्यद्वारा इस्तेमाल किया गया आखिरी आईपी एड्रेस और यहां से आगे इस सदस्य द्वारा इस्तेमालमें लाये जाने वाले सभी एड्रेस ब्लॉक करें।",
+ "ipbsubmit": "इ सदस्य कय अउर बदलाव करय से रोका जाय",
+ "ipbother": "अउर समय:",
+ "ipboptions": "दुइ घंटा:2 hours,एक दिन:1 day,तीन दिन:3 days,एक हप्ता:1 week,दुइ हप्ता:2 weeks,एक महीना:1 month,तीन महीना:3 months,छः महीना:6 months,एक साल:1 year,हमेशा कय लिये:infinite",
+ "ipbhidename": "संपादन अव सूचिन् से सदस्य नाँव लुकुआवा जाय",
+ "ipbwatchuser": "इ सदस्य कय सदस्य पन्ना अव बातचीत पन्ना पे नजर रक्खा जाय",
+ "ipb-disableusertalk": "इ सदस्य कय अवरुद्ध होए पे आपन बातचीत पन्ना सम्पादन करै से रोका जाय",
+ "ipb-change-block": "इ सेटिङ कय इस्तेमाल कै कय सदस्य कय अवरोधित करा जाय",
+ "ipb-confirm": "अवरोधण कय पुष्टि करा जाय",
+ "badipaddress": "अमान्य आईपी ठहर।",
+ "blockipsuccesssub": "अवरोधन सफल ।(संपादन करय से रोक दिहा गा है)",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] को ब्लॉक किया जा चुका है।<br />\nब्लॉकों की समीक्षा के लिए [[Special:BlockList|ब्लॉक लॉग]] देखें।",
+ "ipb-blockingself": "आप खुद को अवरोधित कर रहे हैं! क्या आप वाकई ऐसा करना चाहते हैं?",
+ "ipb-edit-dropdown": "ब्लॉक कारण संपादित करा जाय",
+ "ipb-unblock-addr": "$1 कय अनब्लॉक करा जाय",
+ "ipb-unblock": "सदस्य या आईपी एड्रेस कय अनब्लॉक करा जाय",
+ "ipb-blocklist": "सद्य ब्लॉक देखा जाय",
+ "ipb-blocklist-contribs": "{{GENDER:$1|$1}} कय योगदान",
+ "unblockip": "सदस्य कय अवरोध हटावा जाय।",
+ "unblockiptext": "पहले ब्लॉक किये हुए आईपी एड्रेस या सदस्यनाम को अनब्लॉक करने के लिये नीचे दिया गया फार्म भरें।",
+ "ipusubmit": "इ अवरोध हटावा जाय",
+ "unblocked": "[[User:$1|$1]] होइ गा हैं।",
+ "unblocked-range": "$1 अनब्लॉक होइ गा हैं।",
+ "unblocked-id": "अवरोध $1 निकारि दिहा गा है",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] कय ब्लाक कै गय",
+ "blocklist": "अवरोधित उपयोक्ता",
+ "ipblocklist": "अवरोधित आईपी ठहर या सदस्यनाँव",
+ "ipblocklist-legend": "अवरोधित सदस्य कय खोजा जाय",
+ "blocklist-userblocks": "खाता कय अवरोध लुकुआवा जाए",
+ "blocklist-tempblocks": "अस्थाई अवरोध लुकुआवा जाए",
+ "blocklist-addressblocks": "एक्ठु आईपी अवरोध लुकुआवा जाए",
+ "blocklist-rangeblocks": "श्रेणी अवरोध लुकुआवा जाए",
+ "blocklist-timestamp": "समय मोहर",
+ "blocklist-target": "लक्ष्य",
+ "blocklist-expiry": "खतम",
+ "blocklist-by": "प्रशासक अवरुद्ध",
+ "blocklist-params": "अवरोध मापदण्ड",
+ "blocklist-reason": "कारण",
+ "ipblocklist-submit": "खोजा जाय",
+ "ipblocklist-localblock": "स्थानीय अवरोध",
+ "ipblocklist-otherblocks": "अन्य {{PLURAL:$1|ब्लॉक}}",
+ "infiniteblock": "इनफाईनाईट",
+ "expiringblock": "$1 कय $2 बजे समय खतम होत है",
+ "anononlyblock": "केवल बेनाम सदस्य",
+ "noautoblockblock": "स्वत:ब्लाक निस्क्रिय कै गय",
+ "createaccountblock": "खाता बनावै कय रोक लगाए दिहा गा हैं",
+ "emailblock": "ईमेल अवरोधित",
+ "blocklist-nousertalk": "आपन बातचीत पन्ना भी संपादन नाइ कै सकत हैँ ।",
+ "ipblocklist-empty": "ब्लॉक सूची खाली है।",
+ "ipblocklist-no-results": "पूछल आईपी एड्रेस / सदस्यनाँव पे ब्लॉक नाइ है।",
+ "blocklink": "अवरोधित करा जाय",
+ "unblocklink": "अवरोध हटावा जाय",
+ "change-blocklink": "विभाग बदला जाय",
+ "contribslink": "योगदान",
+ "emaillink": "ईमेल पठवा जाय",
+ "autoblocker": "आपका आइ॰पी पता स्वतः अवरुद्ध है, चूँकि इसे हाल ही में \"[[User:$1|$1]]\" द्वारा प्रयोग किया गया है।\n$1 को अवरोधित करने का कारण है: \"$2\"",
+ "blocklogpage": "ब्लॉक सूची",
+ "blocklog-showlog": "इ सदस्य पहिलँहु ब्लाक कै गा हैं । संदर्भ खत्तीर अभिलेख निचे दिहा है ।",
+ "blocklog-showsuppresslog": "इ सदस्य कय पहिलँहु ब्लाक कै गा है ।दबावल लाग संदर्भ खत्तीर दै गा है ।",
+ "blocklogentry": "\"[[$1]]\" कय $2 $3 तक बदलाव करय से रोक दिहा गा है।",
+ "reblock-logentry": "[[$1]] कय अवरोध जमाव बदलि गय, मियाद अब $2 $3 पे खतम होइ",
+ "blocklogtext": "इ सदस्यन् कय ब्लॉक अव अनब्लॉक करेक काम कय लॉग होय।\nअपने से बाधित होवे वाले IP ठहर इ सूची मा उपलब्ध नाइ है।\nवर्तमान में क्रियाशील प्रतिबंध औ ब्लॉक कय सूची कय लिए [[Special:BlockList|ब्लॉक लॉग]] देखा जाय।",
+ "unblocklogentry": "$1 अनवरोधित",
+ "block-log-flags-anononly": "खाली बेनाम सदस्य",
+ "block-log-flags-nocreate": "खाता बनावै से रोक",
+ "block-log-flags-noautoblock": "ऑटोब्लॉक बंद हैं",
+ "block-log-flags-noemail": "ई-मेल अवरुद्ध",
+ "block-log-flags-nousertalk": "आपन बातचीत पन्ना भी संपादन नाइ कै सकत हैँ ।",
+ "block-log-flags-angry-autoblock": "उन्नत स्व-अवरोध लागू",
+ "block-log-flags-hiddenname": "सदस्य नाँव लुकुआवा है",
+ "range_block_disabled": "प्रबंधकन कय अब रेंज ब्लॉक करेक अनुमति नाइ है।",
+ "ipb_expiry_invalid": "अवैध समाप्ति कालावधी।",
+ "ipb_expiry_temp": "छुपायें हुए सदस्यनाम ब्लॉक्स हमेशा के लिये होने चाहिये।",
+ "ipb_hide_invalid": "इस खाते को छिपा नहीं पाए; इस से {{PLURAL:$1|एक सम्पादन किया गया है|$1 सम्पादन किये गये हैं}}।",
+ "ipb_already_blocked": "\"$1\" पहिलवे से ब्लॉक हैं",
+ "ipb-needreblock": "$1 पहले ही अवरोधित है।\nक्या आप अवरोध के जमाव बदलना चाहेंगे?",
+ "ipb-otherblocks-header": "अउर {{PLURAL:$1|ब्लॉक}}",
+ "unblock-hideuser": "आप इस प्रयोक्ता को अनवरोधित नहीं कर सकते, क्योंकि इनका प्रयोक्तानाम छिपा हुआ है।",
+ "ipb_cant_unblock": "समस्या: ब्लॉक ID $1 मिला नहीं। इसे पहले अनब्लॉक कर दिया गया हो सकता हैं।",
+ "ipb_blocked_as_range": "गलती: $1 यह आइपी सीधे बाधित नहीं है और अबाध्य नहीं किया जा सकता।\nफिर भी, $2 प्रकार को बाध्य किया जा सकता है, जिनको अबाध्य किया जा सकता है।",
+ "ip_range_invalid": "गलत आईपी रेंज",
+ "ip_range_toolarge": "/$1 से अधिक बड़े रेञ्ज ब्लॉकों की अनुमति नहीं है।",
+ "proxyblocker": "प्रॉक्सी ब्लॉकर",
+ "proxyblockreason": "आपका IP पता बाधित किया जा चुका है क्योंकि यह एक मुक्त प्रतिनिधि है।\nकृपया आप अपने इंटरनेट सेवा प्रदान करने वाले से या तकनीकी सहायक से सम्पर्क करें अथवा उन्हें इस भयावह सुरक्षा समस्या के बारे में सूचित करें।",
+ "sorbsreason": "{{SITENAME}} द्वारा इस्तेमालमें लाये जाने वाले DNSBL में आपके आईपी एड्रेसको ओपन प्रॉक्सीमें दर्शाया गया हैं।",
+ "sorbs_create_account_reason": "{{SITENAME}} के DNSBL ने आपका आईपी एड्रेस ओपन प्रोक्सी करके सूचित किया हैं। आप खाता खोल नहीं सकतें।",
+ "cant-see-hidden-user": "जिस सदस्य को आप अवरोधित करने की कोशिश कर रहे हैं उसे पहले ही अवरोधित कर के छुपाया जा चुका है।\nचूँकि आपके पास hideuser अधिकार नहीं है, आप इस सदस्य का अवरोधन ना देख सकते हैं और ना ही सम्पादित कर सकते हैं।",
+ "ipbblocked": "आप अन्य प्रयोक्ताओं को अवरोधित या अनवरोधित नहीं कर सकते, क्योंकि आप स्वयं अवरोधित हैं",
+ "ipbnounblockself": "आपको स्वयं को अनवरोधित करने की अनुमति नहीं है",
+ "lockdb": "डाटाबेस लॉक करा जाय",
+ "unlockdb": "डाटाबेस अनलॉक करा जाय",
+ "lockdbtext": "डेटाबेस में ताला लगाने से सभी सदस्य पृष्ठ संपादन, अपनी वरीयताओं में परिवर्तन, अपनी ध्यानसूची में संपादन, और अन्य चीजें जिनके लिए डेटाबेस में परिवर्तन करना होता है, उनसे वंचित हो जायेंगे।\nकृपया यह सुनिश्चित करे की आप यह करना चाहते हैं, और आप अनुरक्षण के पश्चात ताला खोल देंगे।",
+ "unlockdbtext": "डेटाबेस का ताला खोलने से सभी सदस्य पृष्ठ संपादन, अपनी वरीयताओं में परिवर्तन, अपनी ध्यानसूची में संपादन, और अन्य चीजें जिनके लिए डेटाबेस में परिवर्तन करना होता है, की सक्षमता को पुनर्स्थापित कर लेंगे।\nकृपया यह सुनिश्चित करे की आप यह करना चाहते हैं।",
+ "lockconfirm": "जी हां, मुझे सचमुच डाटाबेस को ताला लगाना हैं।",
+ "unlockconfirm": "जी हां, मुझे सचमुच डाटाबेस का ताला खोलना हैं।",
+ "lockbtn": "डाटाबेस लॉक करा जाय",
+ "unlockbtn": "डाटाबेस अनलॉक करा जाय",
+ "locknoconfirm": "आपने कन्फर्मेशन सन्दूकमें क्लिक नहीं किया हैं।",
+ "lockdbsuccesssub": "डाटाबेस लाक सफल",
+ "unlockdbsuccesssub": "डाटाबेस लाक हटाइ गय",
+ "lockdbsuccesstext": "डाटाबेस को ताला लगाया गया हैं।<br />\nआपके द्वारा मेंटेनन्स पूरा होने के बाद [[Special:UnlockDB|ताला खोलना]] याद रखें।",
+ "unlockdbsuccesstext": "डाटाबेसका ताला खोल दिया गया हैं।",
+ "lockfilenotwritable": "डाटाबेस के लॉक फ़ाईलमें लिख नहीं पा रहें हैं।\nडाटाबेस का ताला लगाने या खोलनेके लिये, इस फ़ाईलपर लिखा जाना जरूरी हैं।",
+ "databasenotlocked": "डाटाबेस को ताला नहीं लगाया गया हैं।",
+ "lockedbyandtime": "(से {{GENDER:$1|$1}} पे $2 यँह $3)",
+ "move-page": "$1 कय घुस्कावा जाय",
+ "move-page-legend": "पन्ना घुसकावा जाय",
+ "movepagetext": "निचे दिहा फारम पन्ना कय नाँव बदल दी अव ओकर इतिहास नँवा नाँव से देखाए लागि ।\nपुरान शिर्षक कय नँवा नाँव मे पुनर्निर्देशन कै जाइ।\nमूल शीर्षक की ओर ले जाने वाले पुनार्निर्देशों को आप स्वचालित रूप से बदल सकते हैं।\nयदि आप ऐसा नहीं करते हैं तो कृपया [[Special:DoubleRedirects|दोहरे पुनर्निर्देशन]] या [[Special:BrokenRedirects|टूटे पुनर्निर्देशन]] के लिए ज़रूर जाँच करें।\nकड़ियाँ सही जगह इंगित करती रहें, यह सुनिश्चित करना आपकी ज़िम्मेदारी है।\n\nअगर नये शीर्षक का लेख पहले से है तो स्थानांतरण '''नहीं''' होगा। पर अगर नये शीर्षक वाला लेख कहीं और अनुप्रेषित करता है और साथ ही उसके पुराने संस्करण नहीं हैं तो स्थानांतरण हो जायेगा।\nइसका मतलब कि यदि आपसे गलती हो जाए तो आप वापस पुराने नाम पर इस पृष्ठ का स्थानांतरण कर सकेंगे, और साथ ही आप किसी मौजूदा पृष्ठ के बदले यह स्थानांतरण नहीं कर सकते हैं।\n\n'''चेतावनी!'''\nयदि पृष्ठ काफ़ी लोकप्रिय है तो उसके लिए यह एक बहुत बड़ा व अकस्मात् परिवर्तन हो सकता है;\nआगे बढ़ने से पहले इसका अंजाम अच्छी तरह समझ लें।",
+ "movepagetext-noredirectfixer": "नीचे दिया हुआ पर्चा पृष्ठ का नाम बदल देगा, उसका सारा इतिहास भी नए नाम से दिखना शुरू हो जाएगा।\nपुराना शीर्षक नये नाम को अनुप्रेषित करेगा ।\nमूल शीर्षक की ओर ले जाने वाले अग्रेषणों को आप स्वचालित रूप से बदल सकते हैं।\nयदि आप ऐसा नहीं करते हैं तो कृपया [[Special:DoubleRedirects|दोहरे]] पुनर्निर्देशण या [[Special:BrokenRedirects|टूटे पुनर्निर्देशन]] के लिए ज़रूर जाँच करें।\nकड़ियाँ सही जगह इंगित करती रहें, यह सुनिश्चित करना आपकी जिम्मेदारी है।\n\nअगर नये शीर्षक का लेख पहले से है तो स्थानांतरण '''नहीं''' होगा। पर अगर नये शीर्षक वाला लेख खाली है अथवा कहीं और अनुप्रेषित करता है और साथ ही उसके पुराने संस्करण नहीं हैं तो स्थानांतरण हो जायेगा ।\nइसका मतलब कि यदि आपसे गलती हो जाए तो आप वापस पुराने नाम पर इस पृष्ठ का स्थानांतरण कर सकेंगे, और साथ ही आप किसी मौजूदा पृष्ठ के बदले यह स्थानांतरण नहीं कर सकते हैं।\n\n'''चेतावनी!'''\nयदि पृष्ठ काफ़ी लोकप्रिय है तो उसके लिए यह एक बहुत बड़ा व अकस्मात् परिवर्तन हो सकता है;\nआगे बढ़ने से पहले इसका अंजाम अच्छी तरह समझ लें।\n\n'''सूचना!'''\nस्थानांतरण करनेसे कोई भी महत्वपूर्ण लेख में अनपेक्षित बदलाव हो सकते है ।\nआपसे अनुरोध है कि आप इसके परिणाम जान लें ।",
+ "movepagetalktext": "संबंधित वार्ता पृष्ठ इसके साथ स्थानांतरीत नहीं होगा '''अगर:'''\n* आप पृष्ठ दुसरे नामस्थान में स्थानांतरीत कर रहें है\n* इस नाम का वार्ता पृष्ठ पहलेसे बना हुवा है, या\n* नीचे दिया हुआ चेक बॉक्स आपने निकाल दिया है ।\n\nइन मामलोंमे आपको स्वयं यह पृष्ठ जोडने पड़ सकते है ।",
+ "movearticle": "पन्ना घुसकावा जाय:",
+ "moveuserpage-warning": "<strong>चेतावनी:</strong> आप एकठु सदस्य पन्ना कय नाँव बदलय जावा जात है।तनि ध्यान दिहा जाय कि खालि पन्ना कय नाँव बदल जाइ औ सदस्यनाँव <em>नाई</em> बदलि।",
+ "movenologintext": "लेख स्थानान्तरित करने के लिये आपका [[Special:UserLogin|लॉग इन]] किया होना आवश्यक हैं।",
+ "movenotallowed": "आप कय इ पन्ना घुस्कावे कय अनुमति नाई है ।",
+ "movenotallowedfile": "आप कय फाइल घुस्कावे कय अनुमति नाई है ।",
+ "cant-move-user-page": "आप कय सदस्य पन्ना घुस्कावे कय अनुमति नाई है (उप-पन्ना बादे) ।",
+ "cant-move-to-user-page": "आप कय कवनो पन्नन कय सदस्य पन्ना पय लैजाएक अनुमति नाइ है (सिवाय सदस्य उप पन्नन कय)",
+ "cant-move-category-page": "आप कय श्रेणी पन्ना घुस्कावे कय अनुमति नाई है ।",
+ "cant-move-to-category-page": "आप कय कवनो पन्ना कय श्रेणी पन्ना पे घुस्कावे कय अनुमति नाई है ।",
+ "newtitle": "नवा शिर्षक पे :",
+ "move-watch": "स्रोत पन्ना अव टार्गेट पन्ना पे ध्यान रक्खा जाय",
+ "movepagebtn": "पन्ना घुसकावा जाय",
+ "pagemovedsub": "पन्ना घुस्काइ गय",
+ "movepage-moved": "<strong>\"$1\" कय \"$2\" पे घुस्काइ गय</strong>",
+ "movepage-moved-redirect": "एक्ठु पुनर्निर्देशन बनाइ गय।",
+ "movepage-moved-noredirect": "पुनर्निर्देशन निर्माण दबाइ गय",
+ "articleexists": "इ नाँव कय पन्ना पहिल्वे से मौजुद है या तव आप कवनो गलत नावँ चुना गा है। कवनो दुसर नाँव चुना जाय",
+ "cantmove-titleprotected": "नँवा पन्ना बनावै से रोक होएक नाते आप कय इ जगही कवनो दुसर पन्ना घुस्कावै कय अनुमति नाइ है ।",
+ "movetalk": "सम्बंधित बातचित पन्ना घुस्कावा जाय",
+ "move-subpages": "उप पन्ना घुस्कावा जाय ($1 तक)",
+ "move-talk-subpages": "बातचीत पन्ना कय उप पन्ना भी लई जावा जाय ($1 तक)",
+ "movepage-page-exists": "$1 पन्ना पहिलवे से है अव आप ओहपर फिरसे नाइ लिखि सका जात है ।",
+ "movepage-page-moved": "पन्ना $1 कय $2 पे घुस्काइ गय ।",
+ "movepage-page-unmoved": "पन्ना $1 कय $2 पे नाइ घुस्काइ सका जात है ।",
+ "movepage-max-pages": "$1 की अधिकतम सीमा तक पृष्ठ स्थानांतरित कर {{PLURAL:$1|दिया गया है|दिये गये हैं}}, अब और पृष्ठ अपने-आप स्थानांतरित नहीं होंगे।",
+ "movelogpage": "घुस्कावे कय ल़ाग",
+ "movelogpagetext": "निचे घुस्कावल पन्नन् कय सुची हय",
+ "movesubpage": "{{PLURAL:$1|उप-पन्ना}}",
+ "movesubpagetext": "नीचे $1 {{PLURAL:$1|पृष्ठ दिखाया गया है, जो इस पृष्ठ का उप पृष्ठ है|पृष्ठ दिखाया गया है, जो इस पृष्ठ के उप पृष्ठ हैं}}।",
+ "movenosubpage": "इ पन्ना कय कवनो उप-पन्ना नाइ है ।",
+ "movereason": "कारण:",
+ "revertmove": "पहिले जैसन करा जाय",
+ "delete_and_move": "मिटावा जाय अव घुस्कावा जाय",
+ "delete_and_move_text": "==हटावै कय ज़रूरत==\nलक्ष्य पन्ना \"[[:$1]]\" पहिलवे से मौजूद है।\nनाव बदलय खत्तीर का आप एका हटावै चाहा जात है?",
+ "delete_and_move_confirm": "हाँ,पन्ना कय मिटावा जाय",
+ "delete_and_move_reason": "\"[[$1]]\" से घुस्कावै खत्तीर जगह बनाई गा है",
+ "selfmove": "स्रोत अव गन्तव्य पन्ना कय एक्कय शिर्षक है ;पन्ना कय उहिक उप्पर नाइ घुस्काय सका जात है ।",
+ "immobile-source-namespace": "नामस्थान \"$1\" पे पन्ना नाइ घुस्काय सका जात है",
+ "immobile-target-namespace": "नामस्थान \"$1\" कय भित्तर पन्ना नाइ घुस्काय सका जात है",
+ "immobile-target-namespace-iw": "अंतर विकि कड़ी पन्ना लई जाय खत्तीर उचित लक्ष्य नाइ है।",
+ "immobile-source-page": "ई पन्ना नाइ घुस्की ।",
+ "immobile-target-page": "इ गन्तव्य शिर्षक पय नाइ लैजाय सका जात अहै ।",
+ "imagenocrossnamespace": "फाइल कय बिना-फाइल नेमस्पेस मा नाइ घुस्काय सका जात है",
+ "nonfile-cannot-move-to-file": "बिना-फाइल कय फाइल नेमस्पेस मा नाइ घुस्काय सका जात है ।",
+ "imagetypemismatch": "नँवा फाइल एक्सटेन्सन फाइल कय प्रकार से मेल नाइ खात है",
+ "imageinvalidfilename": "लक्ष्यित फाइल नाँव अवैध है",
+ "fix-double-redirects": "मूल शीर्षक तक जाने वाले सभी पुनर्निर्देशनों को भी बदलें",
+ "move-leave-redirect": "पिछे एक्ठु पुनर्निर्देशन छोडा जाय",
+ "protectedpagemovewarning": "'''चेतावनी: इ पन्ना कय सुरक्षित कई गा है अव एका खालि प्रबंधक घुस्काय सकत हँय।'''\nनँवा लॉग प्रविष्टि संदर्भ कय लिये नीचे दीहा है:",
+ "semiprotectedpagemovewarning": "'''सूचना:''' इ पन्ना सुरक्षित करा है औ खाली पंजीकृत सदस्य एका घुस्काय सकत हैं।\nनँवा लॉग प्रविष्टि संदर्भ खत्तीर नीचे दीहा है:",
+ "move-over-sharedrepo": "== फ़ाइल मौजूद है ==\n[[:$1]] एकठु साझा भंडार पय मौजूद है। इ नाँव पय घुस्कावै से नँवा फ़ाइल साझा फ़ाइल कय ओवरराइड करी।",
+ "file-exists-sharedrepo": "चुनल फाइल नाँव पहिलेवे एकठु साझा भण्डार में प्रयुक्त है।\nकृपया दुसर नाव चुना जाय।",
+ "export": "पन्ना निर्यात करा जाय",
+ "exporttext": "आप विशिष्ठ पृष्ठ के विषय वस्तु और संपादन इतिहास को निर्यात कर सकते हैं अथवा पृष्ठों के समूह को कुछ XML में लपेट सकते हैं।\nयह [[Special:Import|आयात पृष्ठ]] की सहायता से मीडियाविकी का प्रयोग करके दूसरी विकी से आयात किया जा सकता है।\n\nपृष्ठों को निर्यात करने के लिए, नीचे विषय वस्तु संदूक में शीर्षक प्रवेश करें, एक शीर्षक प्रति पंक्ति, और चुने कि आप वर्त्तमान अवतरण के साथ पुराने अवतरण भी चाहते हैं कि नहीं, या पिछले संपादन के बारे में जानकारी के साथ केवल वर्त्तमान अवतरण चाहते हैं।\n\nबाद वाली स्थिति के लिए आप एक सम्पर्क भी प्रयोग कर सकते हैं, उदाहरण के लिए, \"[[{{MediaWiki:Mainpage}}]]\" पृष्ठ के लिए [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।",
+ "exportall": "कुल पन्ना निर्यात करा जाय",
+ "exportcuronly": "पुरा इतिहास नाइ चाहि,खाली नँवा अवतरण करा जाय",
+ "exportnohistory": "----\n'''सूचना:''' इस फॉर्म का इस्तेमाल कर पृष्ठका पूरा इतिहास निर्यात करना परफॉर्मेन्स के चलते रोक दिया गया हैं।",
+ "exportlistauthors": "प्रत्येक पृष्ठ के लिए योगदानकर्ताओं की एक पूरी सूची शामिल करें ।",
+ "export-submit": "निर्यात",
+ "export-addcattext": "श्रेणी से पन्ना डारा जाय :",
+ "export-addcat": "जोडव",
+ "export-addnstext": "नामस्थान से पन्ना डारा जाय :",
+ "export-addns": "जोडा जाय",
+ "export-download": "फ़ाइल रुप में सहेजा जाय",
+ "export-templates": "टेम्प्लेटस भी जोडा जाय",
+ "export-pagelinks": "जिन पन्नों के हवाले यहाँ हैं, उन्हें भी इस गहराई तक शामिल करें:",
+ "allmessages": "व्यवस्था संदेश",
+ "allmessagesname": "नाँव",
+ "allmessagesdefault": "सनेशा कय डिफ़ॉल्ट पाठ",
+ "allmessagescurrent": "वर्तमान पाठ",
+ "allmessagestext": "ये मीडियाविकि नामस्थान में उपलब्ध प्रणाली संदेशों की एक सूची है। यदि आप सामान्य मीडियाविकि क्षेत्रीयकरण में योगदान देना चाहें तो कृपया [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation मीडियाविकि क्षेत्रीयकरण] व [//translatewiki.net translatewiki.net] को देखें।",
+ "allmessagesnotsupportedDB": "इस पृष्ठ का इस्तेमाल नहीं कर सकते क्योंकी '''$wgUseDatabaseMessages''' बंद हैं।",
+ "allmessages-filter-legend": "फिल्टर",
+ "allmessages-filter": "अनुकूलन स्थिति कय आधार पे छाना जाय:",
+ "allmessages-filter-unmodified": "अपरिवर्तित",
+ "allmessages-filter-all": "कुल",
+ "allmessages-filter-modified": "परिवर्तित",
+ "allmessages-prefix": "उपसर्ग कय आधार पे छाना जाय:",
+ "allmessages-language": "भाषा:",
+ "allmessages-filter-submit": "जावा जाय",
+ "allmessages-filter-translate": "अनुवाद करा जाय",
+ "thumbnail-more": "बड़ा करा जाय",
+ "filemissing": "फाईल गायब",
+ "thumbnail_error": "थम्बनेल(thumbnail) बनावै में त्रुटि: $1",
+ "thumbnail_error_remote": "$1 से त्रुटि सन्देश: $2",
+ "djvu_page_error": "DjVu पन्ना रेंज कय बहरे है",
+ "djvu_no_xml": "DjVu फ़ाईल कय खत्तीर XML नाइ मिला",
+ "thumbnail-temp-create": "अस्थायी थम्बनेल फ़ाइल बनावै में असफल",
+ "thumbnail_invalid_params": "अमान्य थम्बनेल पैरामीटर",
+ "thumbnail_toobigimagearea": "$1 से बडा फाइल",
+ "thumbnail_dest_directory": "गन्तव्य निर्देशिका बनावै में असमर्थ",
+ "thumbnail_image-type": "चित्र कय प्रकार समर्थित नाइ है",
+ "thumbnail_gd-library": "अवैध जीडी लाइब्रेरी जमाव: कार्यसमूह $1 मौजूद नहीं है",
+ "thumbnail_image-missing": "लागत है फाइल नामौजूद है: $1",
+ "import": "पन्ना आयात करा जाय",
+ "importinterwiki": "ट्रान्सविकि आयात",
+ "import-interwiki-text": "आयात करने के लिये एक विकि और एक पृष्ठ चुनें।\nअवतरण दिनांक और संपादक नाम ज्यों-के-त्यों रखे जाएँगे।\nसभी ट्रान्सविकि आयात क्रियाएँ [[Special:Log/import|आयात लॉग]] में डाली जाती हैं।",
+ "import-interwiki-sourcewiki": "स्रोत विकि:",
+ "import-interwiki-sourcepage": "स्रोत पन्ना:",
+ "import-interwiki-history": "इस पृष्ठ के सभी इतिहास अवतरण कॉपी करें",
+ "import-interwiki-templates": "कुल साँचा शामिल करा जाय",
+ "import-interwiki-submit": "आयात",
+ "import-interwiki-namespace": "गंतव्य नामस्थान:",
+ "import-interwiki-rootpage": "गंतव्य पृष्ठ उपसर्ग (वैकल्पिक):",
+ "import-upload-filename": "फ़ाइल कय नाँव",
+ "import-comment": "टिप्पणी:",
+ "importtext": "कृपया स्रोत विकि से संचिका निर्यातित करने के लिए [[Special:Export|निर्यात सुविधा]] का इस्तेमाल करें।\nइसे अपने संगणक पर सँजो के यहाँ चढ़ा दें।",
+ "importstart": "पन्ना आयात होत है...",
+ "import-revision-count": "$1 {{PLURAL:$1|अवतरण}}",
+ "importnopages": "आयात करेक कवनो पन्ना नाइ है ।",
+ "imported-log-entries": "आयातित $1 {{PLURAL:$1|लॉग प्रविष्टि|लॉग प्रविष्टियाँ}}.\nजब कभी कोई फाइल आपको import करनी हो",
+ "importfailed": "आयात विफल होइ गवा: <nowiki>$1</nowiki>",
+ "importunknownsource": "अज्ञात आयात स्रोत प्रकार",
+ "importcantopen": "आयात फ़ाइल खोल नाई खुला।",
+ "importbadinterwiki": "अवैध अन्तरविकि कड़ी",
+ "importsuccess": "आयात सफल होइ गवा!",
+ "importnosources": "कोई भी ट्रान्सविकी आयात स्रोत मिले नहीं और प्रत्यक्ष इतिहास अपलोड बन्द कर दिए गए हैं।",
+ "importnofile": "कवनो आयात फाइल नाइ अपलोड करा रहा ।",
+ "importuploaderrorsize": "आयात फ़ाईल अपलोड हुई नहीं। इसका आकार अनुमतिसे ज्यादा हैं।",
+ "importuploaderrorpartial": "आयात फ़ाईल अपलोड हुई नहीं। फ़ाईल आधी अधूरी अपलोड हुई।",
+ "importuploaderrortemp": "आयात फ़ाईल अपलोड हुई नहीं। एक अस्थायी डाइरेक्टरी नहीं मिल रहीं।",
+ "import-parse-failure": "XML आयात पार्स असफल",
+ "import-noarticle": "आयात करेक कवनो पन्ना नाइ है !",
+ "import-nonewrevisions": "कोई अवतरण आयात नहीं किये गये (या तो सभी अवतरण पहले से मौजूद हैं, या त्रुटियों के कारण छोड़े गये)।",
+ "xml-error-string": "$1 पंक्ति $2 मा, कॉलम $3 (बाईट $4): $5",
+ "import-upload": "XML डाटा अपलोड कीन जाय",
+ "import-token-mismatch": "सत्र सामग्री खो गई है। \nकृपया पुनः प्रयास करें।",
+ "import-invalid-interwiki": "इ विकि से आयात नाइ होइ सकत है।",
+ "import-options-wrong": "गलत {{PLURAL:$2|विकल्प}}: <nowiki>$1</nowiki>",
+ "import-rootpage-invalid": "दिहल उपसर्ग पन्ना शीर्षक अमान्य है।",
+ "import-rootpage-nosubpage": "दिए गए उपसर्ग पृष्ठ \"$1\" के नामस्थान में उप-पृष्ठ नहीं बनाए जा सकते।",
+ "importlogpage": "आयात सूची",
+ "importlogpagetext": "अन्य विकियों से प्रबन्धकों द्वारा किए गए सम्पादन इतिहास के साथ होने वाले पृष्ठों का आयात।",
+ "javascripttest": "जावास्क्रिप्ट परीक्षण",
+ "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
+ "javascripttest-pagetext-unknownaction": "अज्ञात काम \"$1\".",
+ "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचों में से एक चुनें: $1",
+ "javascripttest-pagetext-skins": "परीक्षण करने के लिए त्वचा चुनें:",
+ "javascripttest-qunit-intro": "mediawiki.org पे [$1 परीक्षण कय प्रलेखन] देखा जाय।",
+ "tooltip-pt-userpage": "आप कय सदस्य पन्ना",
+ "tooltip-pt-anonuserpage": "आप जिस आईपी से बदलाव कर रहें हैं उसका सदस्य पन्ना निचे है",
+ "tooltip-pt-mytalk": "आप कय बातचित पन्ना",
+ "tooltip-pt-anontalk": "इस आईपी एड्रेससे हुए बदलावों के बारे में वार्ता",
+ "tooltip-pt-preferences": "आप कय पसंद",
+ "tooltip-pt-watchlist": "आप कय ध्यान दिहल पन्नन कय सूची",
+ "tooltip-pt-mycontris": "आप कय योगदान कय सुची",
+ "tooltip-pt-login": "आप कय खाता प्रवेश खत्तिर प्रोत्साहित कै जात है, लेकिन ई अनिवार्य नाई है",
+ "tooltip-pt-logout": "बहरे निकरा जाय",
+ "tooltip-pt-createaccount": "हमारा सुझाव है की आप खाता बनाएँ और लॉगिन करें, परन्तु यह अनिवार्य नहीं है",
+ "tooltip-ca-talk": "सामग्री पन्ना कय बारे में बात-चीत",
+ "tooltip-ca-edit": "आप ई पन्ना कय सम्पादन कै सका जात है। कृपया पन्ना सुरक्षित करय से पहिले पूर्वावलोकन बटन कय इस्तेमाल करा जाय।",
+ "tooltip-ca-addsection": "एक्ठु नँवा खण्ड शुरु करा जाय",
+ "tooltip-ca-viewsource": "इ पन्ना सुरक्षित है । आप एकर स्रोत देख सका जात है ।",
+ "tooltip-ca-history": "ई पन्ना कय पिछला संशोधन",
+ "tooltip-ca-protect": "इ पन्ना कय सुरक्षित करा जाय",
+ "tooltip-ca-unprotect": "ई पन्ना कय सुरक्षा स्तर बदला जाय",
+ "tooltip-ca-delete": "ई पन्ना मेटावा जाय",
+ "tooltip-ca-move": "ई पन्ना कय नाँव बदला जाय",
+ "tooltip-ca-watch": "इ पन्ना कय अपने ध्यानसूची में डारा जाय",
+ "tooltip-ca-unwatch": "इ पन्ना कय अपने ध्यानसूची से हटावा जाय",
+ "tooltip-search": "{{SITENAME}} में खोजा जाय",
+ "tooltip-search-go": "यदि पन्ना मौजूद होई तव उ पन्ना पे चला जाय",
+ "tooltip-search-fulltext": "ई पाठ्य खत्तिर पन्ना खोजा जाय",
+ "tooltip-p-logo": "प्रधान पन्ना",
+ "tooltip-n-mainpage": "प्रधान पन्ना पे जावा जाय",
+ "tooltip-n-mainpage-description": "प्रधान पन्ना पे जावा जाय",
+ "tooltip-n-portal": "परियोजना कय बारे मेँ, आप का कई सका जात अहै, मदद कँहा से लेब",
+ "tooltip-n-currentevents": "हालिए कय घटना कय जमिनी जानकारी लिहा जाय",
+ "tooltip-n-recentchanges": "विकि पे तुरंतय करल बदलाव कय सूची",
+ "tooltip-n-randompage": "कवनो एक पन्ना खोला जाय",
+ "tooltip-n-help": "पता लगावेक जगह",
+ "tooltip-t-whatlinkshere": "हिँया लिंक होवे वाले कुल विकि पन्नन् कय सूची",
+ "tooltip-t-recentchangeslinked": "ई पन्ना से जोडान पन्नवन पे तुरंत करल बदलाव",
+ "tooltip-feed-rss": "इ पन्ना कय आरएसएस फ़ीड",
+ "tooltip-feed-atom": "ई पन्ना कय Atom फ़ीड",
+ "tooltip-t-contributions": "इ सदस्य कय योगदान कय सुची देखा जाय",
+ "tooltip-t-emailuser": "इ सदस्य कय इमेल पठवा जाय",
+ "tooltip-t-info": "इ पन्ना कय बारे मे ढेर जानकारी",
+ "tooltip-t-upload": "फ़ाइल अपलोड करा जाय",
+ "tooltip-t-specialpages": "कुल विशेष पन्नन कय सूची",
+ "tooltip-t-print": "ई पन्ना कय छापय लायक संस्करण",
+ "tooltip-t-permalink": "ई पन्ना कय संसोधन खत्तिर स्थायी लिंक",
+ "tooltip-ca-nstab-main": "सामग्री वाला पन्ना देखा जाय",
+ "tooltip-ca-nstab-user": "सदस्य पन्ना देखा जाय",
+ "tooltip-ca-nstab-media": "मीडिया पन्ना देखा जाय",
+ "tooltip-ca-nstab-special": "इ एक्ठु खास पन्ना होय ,एका आप नाइ बदलि सका जात है",
+ "tooltip-ca-nstab-project": "प्रोजेक्ट पन्ना देखा जाय",
+ "tooltip-ca-nstab-image": "फ़ाइल कय पन्ना देखा जाय",
+ "tooltip-ca-nstab-mediawiki": "प्रणाली सन्देश देखा जाय",
+ "tooltip-ca-nstab-template": "टेम्प्लेट देखा जाय",
+ "tooltip-ca-nstab-help": "सहायता पन्ना पे जावा जाय",
+ "tooltip-ca-nstab-category": "श्रेणी पन्ना देखा जाय",
+ "tooltip-minoredit": "एहपे छोट संपादन कय चिन्हा लगावा जाय",
+ "tooltip-save": "आपन बदलाव सहेजा जाय",
+ "tooltip-preview": "आप कय करल बदलाव कय झलक देखा जाय, सहेजय से पहिले एकर इस्तेमाल करा जाय!",
+ "tooltip-diff": "इ पाठ मे आप कय करल बदलाव देखा जाय",
+ "tooltip-compareselectedversions": "इ पन्ना कय चुनल अवतरणन् में अन्तर देखा जाय।",
+ "tooltip-watch": "इ पन्ना कय अपने ध्यानसूची में डारा जाय",
+ "tooltip-watchlistedit-normal-submit": "पन्ना हटावा जाय",
+ "tooltip-watchlistedit-raw-submit": "ध्यानसूची अपडेट करा जाय",
+ "tooltip-recreate": "यह पृष्ठ पहले हटाया होने के बावजूद फिरसे बनायें",
+ "tooltip-upload": "अपलोड शुरू करा जाय",
+ "tooltip-rollback": "\"वापिस लीं\" ई पन्ना के पिछ्ला योगदाता के बदलाव एकही चटके मे गायब कर देवेला",
+ "tooltip-undo": "\"पुरानी स्थिति पर लाएँ\" इस बदलाव को वापस ले जा के संपादन पर्चे को झलक रीति में दिखलाता है।\nइसके जरिए सारांश में पुरानी स्थिति में लाने का कारण लिखा जा सकता है।",
+ "tooltip-preferences-save": "पसंद सहेजा जाय",
+ "tooltip-summary": "छोट सारांश लिखा जाय",
+ "anonymous": "{{SITENAME}} कय {{PLURAL:$1||}} बेनामी सदस्य",
+ "siteuser": "विकिपीडिया सदस्य $1",
+ "anonuser": "{{SITENAME}} अज्ञात उपयोगकर्ता $1",
+ "lastmodifiedatby": "इ पन्ना कय अन्तिम बदलाव $2, $1 पे $3 करें रहें।",
+ "othercontribs": "$1 कय काम कय अनुसार।",
+ "others": "अउर",
+ "siteusers": "{{SITENAME}} {{PLURAL:$2|सदस्य|सदस्य}} $1",
+ "anonusers": "{{SITENAME}} अनाम {{PLURAL:$2|सदस्य|सदस्य}} $1",
+ "creditspage": "पन्ना श्रेय नामावली",
+ "nocredits": "इस पृष्ठ के लिये क्रेडिट जानकारी नहीं है।",
+ "spamprotectiontitle": "स्पॅम सुरक्षा फिल्टर",
+ "spamprotectiontext": "आप जिस पृष्ठ को सँजोना चाहते थे उसे रद्दी सामग्री की छननी ने अवरोधित किया हुआ है।\nयह संभवतः किसी कर्पसूचित बाहरी स्थल की कड़ी की वजह से हुआ है।",
+ "spamprotectionmatch": "नीचे दिये हुए पाठ को स्पॅम सुरक्षा फिल्टर द्वारा रोका गया था: $1",
+ "spambot_username": "मीडियाविकि स्पॅम स्वच्छता",
+ "spam_reverting": "$1 को कड़ी ना होने वाले पुराने अवतरण को पुनर्स्थापित कर रहें हैं",
+ "spam_blanking": "सभी अवतरणोंमें $1 को कड़ियां हैं, पूरा पाठ निकाल रहें हैं",
+ "spam_deleting": "सभी अवतरणों में $1 की कड़ी थी, हटाया जा रहा है",
+ "simpleantispam-label": "ऐन्टी-स्पैम जाँच।\nइसे <strong>नहीं</strong> भरें!",
+ "pageinfo-title": "\"$1\" कय जानकारी",
+ "pageinfo-not-current": "क्षमा करें, पुराने अवतरणों के लिए यह जानकारी प्रदान करना संभव नहीं है।",
+ "pageinfo-header-basic": "मूल जानकारी",
+ "pageinfo-header-edits": "सम्पादन इतिहास",
+ "pageinfo-header-restrictions": "पन्ना सुरक्षा",
+ "pageinfo-header-properties": "पन्ना जानकारी",
+ "pageinfo-display-title": "प्रदर्शन शिर्षक",
+ "pageinfo-default-sort": "डिफ़ॉल्ट सॉर्ट की",
+ "pageinfo-length": "पन्ना आकार (बाइट्स में)",
+ "pageinfo-article-id": "पन्ना आइ॰डी",
+ "pageinfo-language": "पन्ना सामग्री भाषा",
+ "pageinfo-content-model": "पन्ना सामग्री नमुना",
+ "pageinfo-robot-policy": "सर्च इंजन बॉट से अनुक्रमण",
+ "pageinfo-robot-index": "अनुमतित",
+ "pageinfo-robot-noindex": "अनुमतित नाइ है",
+ "pageinfo-watchers": "पन्ना पे नजर राखय वालें कय गिन्ती",
+ "pageinfo-few-watchers": "$1 से कम ध्यान देवै {{PLURAL:$1|वाला|वाले}}",
+ "pageinfo-redirects-name": "इ पन्ना पे कुल पुनर्निर्देश कय गिन्ती",
+ "pageinfo-subpages-name": "इ पन्ना कय उपपन्ना",
+ "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|पुनर्निर्देश}}; $3 {{PLURAL:$3|ग़ैर-पुनर्निर्देश}})",
+ "pageinfo-firstuser": "पन्ना बनावै वालें",
+ "pageinfo-firsttime": "पन्ना बनावै कय तिथि",
+ "pageinfo-lastuser": "सबसे नँवा संपादक",
+ "pageinfo-lasttime": "सबसे नँवा संपादन कय तिथि",
+ "pageinfo-edits": "कुल सम्पादन गिन्ती",
+ "pageinfo-authors": "लेखकन् कय गिन्ती",
+ "pageinfo-recent-edits": "हालिए कय सम्पादन कय गिन्ती (पिछ्ला $1 में)",
+ "pageinfo-recent-authors": "हालिए कय लेखकन् कय गिन्ती",
+ "pageinfo-magic-words": "जादुई {{PLURAL:$1|शब्द}} ($1)",
+ "pageinfo-hidden-categories": "लुकुआवल {{PLURAL:$1|श्रेणी}} ($1)",
+ "pageinfo-templates": "प्रयुक्त {{PLURAL:$1|साँचा}} ($1)",
+ "pageinfo-transclusions": "$1 {{PLURAL:$1|पन्ना|पन्नन्}} पे ट्रांस्कलूडिड",
+ "pageinfo-toolboxlink": "पन्ना कय जानकारी",
+ "pageinfo-redirectsto": "पुनर्निर्देशन लक्ष्य",
+ "pageinfo-redirectsto-info": "जानकारी",
+ "pageinfo-contentpage": "सामग्री पन्नन मा गिन जात अहै",
+ "pageinfo-contentpage-yes": "हाँ",
+ "pageinfo-protect-cascading-yes": "हाँ",
+ "pageinfo-category-info": "श्रेणी जानकारी",
+ "pageinfo-category-pages": "पन्नन कय सङ्ख्या",
+ "pageinfo-category-subcats": "उपश्रेणिन कय गिन्ती",
+ "pageinfo-category-files": "फाइल कय गिन्ती",
+ "markaspatrolleddiff": "जाँचल चिन्हीत करा जाय",
+ "markaspatrolledtext": "इ पन्ना कय जाँचल चिन्हीत करा जाय",
+ "markedaspatrolled": "जाँचल चिन्हीत करा जाय",
+ "markedaspatrolledtext": "[[:$1]] कय चयनित अवतरण जाँचल चिन्हित कै गय।",
+ "rcpatroldisabled": "नँवा बदलाव कय परीक्षण अक्षम है",
+ "rcpatroldisabledtext": "हाल में हुए बदलावों के परीक्षण की सुविधा अभी अक्षम है।",
+ "markedaspatrollederror": "जाँचल चिन्हित नाइ कै मिला",
+ "markedaspatrollederrortext": "जाँचा हुआ चिन्हित करने के लिये आपको एक अवतरण चुनना होगा।",
+ "markedaspatrollederror-noautopatrol": "आपको अपने बदलाव परीक्षित करने की अनुमति नहीं है।",
+ "markedaspatrollednotify": "$1 पृष्ठ में किया गया ये बदलाव जाँचा हुआ चिन्हित कर दिया गया है।",
+ "markedaspatrollederrornotify": "जाँचा हुआ चिन्हित करना असफल रहा।",
+ "patrol-log-page": "परीक्षण लॉग",
+ "patrol-log-header": "यह परीक्षित अवतरणों की लॉग है।",
+ "log-show-hide-patrol": "परीक्षण लॉग $1",
+ "deletedrevision": "पुरान अवतरण $1 हटाय दिहा गा है",
+ "filedeleteerror-short": "फ़ाईल हटावै मा समस्या: $1",
+ "filedeleteerror-long": "फ़ाइल हटावै में आवा गल्ती:\n\n$1",
+ "filedelete-missing": "फ़ाईल \"$1\" कय नाइ हटाई सका जात है, काहे से इ अस्तित्व मा नाइ है।",
+ "filedelete-old-unregistered": "बतावल \"$1\" अवतरण डाटाबेस मा नाइ मिला ।",
+ "filedelete-current-unregistered": "बतावल \"$1\" फाइल डाटाबेस मा नाइ मिला ।",
+ "filedelete-archive-read-only": "अभिलेख डाइरेक्टरी \"$1\" पे वेबसर्वर लिख नाइ पावत है।",
+ "previousdiff": "← पुरान सम्पादन",
+ "nextdiff": "ताज़ा संपादन →",
+ "mediawarning": "<strong>चेतावनी:</strong> इ फ़ाइल प्रकार मा हानिकारक कोड होइ सकत है।\nसंभव है कि एका चलावै से आप कय सिस्टम हैक होइ जाइ।",
+ "imagemaxsize": "तस्विर आकार सिमा:<br />''(फाइल जानकारी पन्ना खत्तीर )''",
+ "thumbsize": "थम्बनेल आकार:",
+ "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|पन्ना|पन्ना}}",
+ "file-info": "फाइल आकार: $1, MIME प्रकार: $2",
+ "file-info-size": "$1 × $2 पिक्सेल, फाइल आकार: $3, MIME प्रकार: $4",
+ "file-info-size-pages": "$1 × $2 पिक्सेल, फाइल आकार: $3, MIME प्रकार: $4, $5 {{PLURAL:$5|पृष्ठ|पृष्ठ}}",
+ "file-nohires": " उच्च गुणवत्ता रिजोलुशन उपलब्ध नाइ है।",
+ "svg-long-desc": "SVG फ़ाईल, साधारणत: $1 × $2 पीक्सेल्स, फ़ाईल कय आकार: $3",
+ "svg-long-desc-animated": "ऐनिमेटिड एस॰वी॰जी फ़ाइल, $1 × $2 पिक्सेल, फ़ाइल साइज़: $3",
+ "svg-long-error": "अमान्य एस॰वी॰जी फ़ाइल: $1",
+ "show-big-image": "मूल फ़ाइल",
+ "show-big-image-preview": "इ पूर्वावलोकन कय आकार: $1 ।",
+ "show-big-image-other": "अउर {{PLURAL:$2| resolution|resolutions}}: $1 ।",
+ "show-big-image-size": "$1 × $2 पिक्सेल",
+ "file-info-gif-looped": "चक्रित",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|फ्रेम}}",
+ "file-info-png-looped": "चक्रित",
+ "file-info-png-repeat": "$1 {{PLURAL:$1|दाइ}} प्ले होइ चुका है",
+ "file-info-png-frames": "$1 {{PLURAL:$1|फ्रेम}}",
+ "newimages": "नँवा फ़ाईल्स कय गैलरी",
+ "newimages-legend": "छनना",
+ "newimages-label": "फाइल नाँव (या ओकर अंश):",
+ "newimages-showbots": "बाट कय अपलोड देखावा जाय",
+ "noimages": "देखेक खत्तीर कुछ नाइ है",
+ "ilsubmit": "खोजा जाय",
+ "bydate": "मिती कय अनुसार",
+ "sp-newimages-showfrom": "$2, $1 कय बाद कय फ़ाईलें देखावा जाय",
+ "seconds": "{{PLURAL:$1|$1 सेकेन्ड}}",
+ "minutes": "{{PLURAL:$1|$1 मिनेट}}",
+ "hours": "{{PLURAL:$1|$1 घण्टा|$1 घण्टा}}",
+ "days": "{{PLURAL:$1|$1 दिन|$1 दिन}}",
+ "weeks": "{{PLURAL:$1|$1 सप्ताह}}",
+ "months": "{{PLURAL:$1|महीन्ना}}",
+ "years": "{{PLURAL:$1|$1 साल}}",
+ "ago": "$1 पहिले",
+ "just-now": "अबहिनै",
+ "hours-ago": "$1 {{PLURAL:$1|घंटा}} पहिले",
+ "minutes-ago": "$1 {{PLURAL:$1|मिनट}} पहीले",
+ "seconds-ago": "$1 {{PLURAL:$1|सॅकेंड}} पहीले",
+ "monday-at": "सोम कय $1",
+ "tuesday-at": "मङ्ङर कय $1",
+ "wednesday-at": "बुध कय $1",
+ "thursday-at": "बीफए कय $1",
+ "friday-at": "शुक्क कय $1",
+ "saturday-at": "शनीच्चर कय $1",
+ "sunday-at": "अत्तवार कय $1",
+ "yesterday-at": "कल्हीँया",
+ "metadata": "मेटाडाटा",
+ "metadata-expand": "अउर विवरण देखावा जाय",
+ "metadata-collapse": "अउर विवरण लुकुआवा जाय",
+ "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "exif-imagewidth": "चौडाई",
+ "exif-imagelength": "उचाई",
+ "exif-bitspersample": "प्रति घटक बीट्स",
+ "exif-compression": "कम्प्रेशन योजना",
+ "exif-photometricinterpretation": "पिक्सल रचना",
+ "exif-orientation": "अभिविन्यास",
+ "exif-samplesperpixel": "घटक कय संख्या",
+ "exif-planarconfiguration": "डाटा रचना",
+ "exif-ycbcrsubsampling": "Y कय C कय साथे सबसॅम्पलींग अनुमान",
+ "exif-ycbcrpositioning": "Y अव C व्यवस्थापन",
+ "exif-xresolution": "होरिज़ॉंटल रिज़ोल्यूशन",
+ "exif-yresolution": "व्हर्टिकल रिज़ोल्यूशन",
+ "exif-stripoffsets": "चित्र डाटा स्थान",
+ "exif-rowsperstrip": "हर स्ट्रीप मा कतार कय गिन्ती",
+ "exif-stripbytecounts": "कॉम्प्रेस्स्ड स्ट्रीपमें बाईट्स",
+ "exif-jpeginterchangeformat": "अफसेट से JPEG SOI",
+ "exif-jpeginterchangeformatlength": "JPEG डेटा कय बाइट",
+ "exif-whitepoint": "उज्जर बिंदू क्रोमॅटिसिटी",
+ "exif-primarychromaticities": "क्रोमॅटिसिटीज ऑफ प्राईमारिटीज",
+ "exif-ycbcrcoefficients": "कलर स्पेस ट्रान्स्फॉर्मेशन मॅट्रीक्स कोएफिशीयंट्स",
+ "exif-referenceblackwhite": "करीया औ उज्जर संदर्भ मूल्यन कय जोड़ी",
+ "exif-datetime": "फ़ाईल बदलाव दिनांक औ समय",
+ "exif-imagedescription": "चित्र शिर्षक",
+ "exif-make": "क्यामेरा निर्माता",
+ "exif-model": "क्यामरा मोडल",
+ "exif-software": "इस्तेमाल करल सॉफ्टवेयर",
+ "exif-artist": "लेखक",
+ "exif-copyright": "कपीराइट धारक",
+ "exif-exifversion": "Exif संस्करण",
+ "exif-flashpixversion": "सपोर्टेड फ्लॅशपीक्स अवतरण",
+ "exif-colorspace": "रंग स्थान",
+ "exif-componentsconfiguration": "हर घटक कय मतलब",
+ "exif-compressedbitsperpixel": "चित्र कॉम्प्रेशन मोड",
+ "exif-pixelydimension": "छवि चौड़ाई",
+ "exif-pixelxdimension": "छवि ऊँचाई",
+ "exif-usercomment": "सदस्य टिप्पणी",
+ "exif-relatedsoundfile": "संबंधित ध्वनी फ़ाईल",
+ "exif-datetimeoriginal": "डेटा सञ्चालन कय मिति अव समय",
+ "exif-datetimedigitized": "डिजिटाईज़िंग कय दिनांक औ समय",
+ "exif-subsectime": "दिनांकसमय उपसेकंद",
+ "exif-subsectimeoriginal": "मूलदिनांकसमय उपसेकंड",
+ "exif-subsectimedigitized": "दिनांकसमयडिजिटाईज्ड उपसेकेंड",
+ "exif-exposuretime": "एक्स्पोज़र समय",
+ "exif-exposuretime-format": "$1 सेकंड ($2)",
+ "exif-fnumber": "F संख्या",
+ "exif-exposureprogram": "एक्स्पोजर कार्यक्रम",
+ "exif-spectralsensitivity": "वर्णक्रमीय संवेदनशीलता",
+ "exif-isospeedratings": "आईएसओ गति रेटिंग",
+ "exif-shutterspeedvalue": "APEX शटर गती",
+ "exif-aperturevalue": "APEX ऍपर्चर",
+ "exif-brightnessvalue": "APEX चमक",
+ "exif-exposurebiasvalue": "एक्सपोजर पूर्वाग्रह",
+ "exif-maxaperturevalue": "अधिकतम एपर्चर भूमि",
+ "exif-subjectdistance": "सब्जेक्टसे अंतर",
+ "exif-meteringmode": "मीटरींग मोड",
+ "exif-lightsource": "प्रकाश स्रोत",
+ "exif-flash": "फ्लैस",
+ "exif-focallength": "लेंस फोकल लम्बाई",
+ "exif-subjectarea": "विषय क्षेत्र",
+ "exif-flashenergy": "फ्ल्यास ऊर्जा",
+ "exif-focalplanexresolution": "फोकल प्लेन x रिज़ोल्यूशन",
+ "exif-focalplaneyresolution": "फोकल प्लेन Y रिज़ोल्यूशन",
+ "exif-focalplaneresolutionunit": "फोकल प्लेन रिज़ोल्यूशन एकक",
+ "exif-subjectlocation": "सब्जेक्ट कय स्थान",
+ "exif-exposureindex": "एक्स्पोज़र इन्डेक्स",
+ "exif-sensingmethod": "सेन्सींग पद्धती",
+ "exif-filesource": "फ़ाईल स्रोत",
+ "exif-scenetype": "दृश्य प्रकार",
+ "exif-customrendered": "कस्टम इमेज प्रोसेसिंग",
+ "exif-exposuremode": "एक्स्पोज़र मोड",
+ "exif-whitebalance": "श्वेत सन्तुलन",
+ "exif-digitalzoomratio": "डिजिटल झूम अनुमान",
+ "exif-focallengthin35mmfilm": "३५ मी.मी. फ़ील्ममें फोकल लंबाई",
+ "exif-scenecapturetype": "दृश्य पकड़ प्रकार",
+ "exif-gaincontrol": "दृश्य नियन्त्रण",
+ "exif-contrast": "कॉन्ट्रास्ट",
+ "exif-saturation": "सॅचूरेशन",
+ "exif-sharpness": "शार्पनेस",
+ "exif-devicesettingdescription": "उपकरण रचना वर्णन",
+ "exif-subjectdistancerange": "विषय दूरी सीमा",
+ "exif-imageuniqueid": "यूनिक चित्र ID",
+ "exif-gpsversionid": "GPS टॅग अवतरण",
+ "exif-gpslatituderef": "उत्तर या दक्खिन अक्षांश",
+ "exif-gpslatitude": "अक्षांश",
+ "exif-gpslongituderef": "पुरुब या पच्छु रेखांश",
+ "exif-gpslongitude": "रेखांश",
+ "exif-gpsaltituderef": "ऊंचाई संदर्भ",
+ "exif-gpsaltitude": "उँचाई",
+ "exif-gpstimestamp": "GPS समय (एटोमिक क्लॉक)",
+ "exif-gpssatellites": "मापन खत्तिर इस्तेमाल करल सैटेलाईट",
+ "exif-gpsstatus": "रिसिभर अवस्था",
+ "exif-gpsmeasuremode": "माप मोड",
+ "exif-gpsdop": "मेज़रमेंट प्रिसिजन",
+ "exif-gpsspeedref": "गति इकाई",
+ "exif-gpsspeed": "GPS रिसिवर कय गती",
+ "exif-gpstrackref": "मूवमेंट दिशा खत्तीर संदर्भ",
+ "exif-gpstrack": "मूवमेंट डाइरेक्शन",
+ "exif-gpsimgdirectionref": "चित्र कय दिशा कय संदर्भ",
+ "exif-gpsimgdirection": "चित्र कय दिशा",
+ "exif-gpsmapdatum": "जियोडेटिक सर्वे डाटा इस्तेमाल कै गय",
+ "exif-gpsdestlatituderef": "लक्ष्य कय अक्षांश कय संदर्भ",
+ "exif-gpsdestlatitude": "अक्षांश लक्ष्य",
+ "exif-gpsdestlongituderef": "लक्ष्य कय रेखांश कय संदर्भ",
+ "exif-gpsdestlongitude": "लक्ष्य कय रेखांश",
+ "exif-gpsdestbearingref": "लक्ष्य कय बियरींग कय संदर्भ",
+ "exif-gpsdestbearing": "लक्ष्य कय बेअरिंग",
+ "exif-gpsdestdistanceref": "लक्ष्य कय अंतर कय संदर्भ",
+ "exif-gpsdestdistance": "लक्ष्य कय अंतर",
+ "exif-gpsprocessingmethod": "GPS प्रक्रीया पद्धती कय नाँव",
+ "exif-gpsareainformation": "GPS विभाग कय नाम",
+ "exif-gpsdatestamp": "GPS दिनांक",
+ "exif-gpsdifferential": "GPS डिफरन्शियर करेक्शन",
+ "exif-jpegfilecomment": "JPEG फ़ाइल टिप्पणी",
+ "exif-keywords": "कीवर्ड",
+ "exif-worldregioncreated": "दुनिया क्षेत्र जहां इ चित्र लै ग रहा",
+ "exif-countrycreated": "देश जहां इ चित्र लै ग रहा",
+ "exif-countrycodecreated": "तस्विर खिचल देश कय कोड",
+ "exif-provinceorstatecreated": "प्रांत या राज्य जहां इ चित्र लै ग रहा",
+ "exif-citycreated": "शहर जहां इ चित्र लै ग रहा",
+ "exif-worldregiondest": "दुनिया कय क्षेत्र देखाइ गा है",
+ "exif-countrydest": "देश देखाइ गा है",
+ "exif-countrycodedest": "देखावल देश कय कोड",
+ "exif-provinceorstatedest": "देखावल प्रान्त या क्षेत्र",
+ "exif-citydest": "देखावल शहर",
+ "exif-sublocationdest": "देखावल सहर भित्तर कय क्षेत्र",
+ "exif-objectname": "छोट शीर्षक",
+ "exif-specialinstructions": "विशेष निर्देश",
+ "exif-headline": "शीर्षक",
+ "exif-credit": "श्रेय/प्रदायक",
+ "exif-source": "स्रोत",
+ "exif-editstatus": "तस्विर कय सम्पादकीय स्थिती",
+ "exif-urgency": "तात्कालिकता",
+ "exif-fixtureidentifier": "फिक्चर कय नाम",
+ "exif-locationdest": "देखावल जगह",
+ "exif-locationdestcode": "देखावल जगहि कय कोड",
+ "exif-contact": "संपर्क जानकारी",
+ "exif-writer": "लेखक",
+ "exif-languagecode": "भाषा",
+ "exif-iimversion": "आईआईएम संस्करण",
+ "exif-iimcategory": "श्रेणी",
+ "exif-iimsupplementalcategory": "पुरक श्रेणी",
+ "exif-datetimeexpires": "एकरे बाद मा इस्तेमाल ना करा जाइ",
+ "exif-datetimereleased": "पे जारी",
+ "exif-originaltransmissionref": "मूल प्रसारण स्थान कोड",
+ "exif-identifier": "पहचानकर्ता",
+ "exif-lens": "इस्तेमाल करल लेंस",
+ "exif-serialnumber": "कैमरा कय क्रमांक नंबर",
+ "exif-cameraownername": "कैमरा कय मालिक",
+ "exif-label": "लेबल",
+ "exif-datetimemetadata": "मेटा जानकारी अन्तिम सम्पादन करल दिन",
+ "exif-nickname": "छवि कय अनौपचारिक नाँव",
+ "exif-rating": "दर्ज़ा (5 से)",
+ "exif-rightscertificate": "अधिकार प्रबंधन प्रमाण पत्र",
+ "exif-copyrighted": "कॉपीराइट स्थिति",
+ "exif-copyrightowner": "कोपीराईट कय धारक",
+ "exif-usageterms": "उपयोग कय शर्त",
+ "exif-webstatement": "ऑनलाइन कॉपीराइट वक्तव्य",
+ "exif-originaldocumentid": "मूल दस्तावेज़ कय अनन्य पहचान",
+ "exif-licenseurl": "कॉपीराइट लाइसेंस कय लिए यूआरएल",
+ "exif-morepermissionsurl": "वैकल्पिक सूचना लाइसेंस",
+ "exif-attributionurl": "जब इ काम दुबारा इश्तेमाल करा जाइ,तव कृपया लिंक करा जाइ",
+ "exif-preferredattributionname": "जब इ काम दुबारा इश्तेमाल करा जाइ,तव कृपया क्रेडिट दिहा जाइ",
+ "exif-pngfilecomment": "PNG फ़ाइल टिप्पणी",
+ "exif-disclaimer": "शर्त्त",
+ "exif-contentwarning": "सामग्री चेतावनी",
+ "exif-giffilecomment": "GIF फ़ाइल टिप्पणी",
+ "exif-intellectualgenre": "आइटम कय प्रकार",
+ "exif-subjectnewscode": "विषय कोड",
+ "exif-scenecode": "IPTC दृश्य कोड",
+ "exif-event": "चित्रित घटना",
+ "exif-organisationinimage": "चित्रित संगठन",
+ "exif-personinimage": "व्यक्ति चित्रण",
+ "exif-originalimageheight": "छोट करे कय पहिले चित्र कय उचाई",
+ "exif-originalimagewidth": "छोट करे कय पहिले चित्र कय चौडाई",
+ "exif-compression-1": "अनकॉम्प्रेस्स्ड",
+ "exif-compression-2": "CCITT समूह 3 1-Dimensional Modified Huffman संचालन इन्कोडिङ्ग",
+ "exif-compression-3": "CCITT ग्रुप 3 फ़ैक्स एनकोडिंग",
+ "exif-compression-4": "CCITT ग्रुप 4 फ़ैक्स एनकोडिंग",
+ "exif-copyrighted-true": "कॉपीराईट",
+ "exif-copyrighted-false": "कॉपीराइट स्थिति अनिर्दिष्ट",
+ "exif-unknowndate": "अज्ञात तारीख",
+ "exif-orientation-1": "सामान्य",
+ "exif-orientation-2": "हॉरिज़ॉन्टली घुमाइ गय",
+ "exif-orientation-3": "180° घूमाइ गय",
+ "exif-orientation-4": "वर्टिकली घुमाइ गय",
+ "exif-orientation-5": "90° CCW घुमाइ गय औ वर्टिकली बदलि गय",
+ "exif-orientation-6": "90° CCW घुमाइ गय",
+ "exif-orientation-7": "90° CW घुमाइ गय औ वर्टिकली बदलि गय",
+ "exif-orientation-8": "90° CW घुमाइ गय",
+ "exif-planarconfiguration-1": "चंकी फ़रमैट",
+ "exif-planarconfiguration-2": "प्लेनर फ़रमैट",
+ "exif-colorspace-65535": "बिना स्तरिकरण कय",
+ "exif-componentsconfiguration-0": "नाइ है",
+ "exif-exposureprogram-0": "अव्यक्त",
+ "exif-exposureprogram-1": "मैन्युअल",
+ "exif-exposureprogram-2": "सामान्य प्रोग्रॅम",
+ "exif-exposureprogram-3": "ऍपर्चर प्राथमिकता",
+ "exif-exposureprogram-4": "शटर प्राथमिकता",
+ "exif-exposureprogram-5": "क्रियेटीव्ह कार्यक्रम (फ़ील्ड कय डेप्थ कय तरफ बायस्‌ड)",
+ "exif-exposureprogram-6": "ऐक्शन कार्यक्रम (शटर कय गती कय तरफ बायस्‌ड)",
+ "exif-exposureprogram-7": "पोर्ट्रेट मोड (क्लोज़‍अप फ़ोटो कय लिये)",
+ "exif-exposureprogram-8": "लैंडस्केप मोड (बैकग्राउंड कय साथे लैंडस्केप फोटो)",
+ "exif-subjectdistance-value": "$1 मीटर",
+ "exif-meteringmode-0": "अज्ञात",
+ "exif-meteringmode-1": "औसत",
+ "exif-meteringmode-2": "सेंटरवेटेडएवरेज",
+ "exif-meteringmode-3": "स्पॉट",
+ "exif-meteringmode-4": "मल्टीस्पॉट",
+ "exif-meteringmode-5": "ढाँचा",
+ "exif-meteringmode-6": "आंशिक",
+ "exif-meteringmode-255": "अउर",
+ "exif-lightsource-0": "अज्ञात",
+ "exif-lightsource-1": "सूर्यप्रकाश",
+ "exif-lightsource-2": "फ्लूरोसेंट",
+ "exif-lightsource-3": "टंगस्ट्न (इनकॅन्‍डेसेंट प्रकाश)",
+ "exif-lightsource-4": "फ्लॅश",
+ "exif-lightsource-9": "साफ मौसम",
+ "exif-lightsource-10": "बदरी",
+ "exif-lightsource-11": "छाँह",
+ "exif-lightsource-12": "डेलाईट फ्लूरोसेंट (D 5700 – 7100K)",
+ "exif-lightsource-13": "डे व्हाईट फ्लूरोसेंट (N 4600 – 5400K)",
+ "exif-lightsource-14": "कूल व्हाईट फ्लूरोसेंट (W 3900 – 4500K)",
+ "exif-lightsource-15": "व्हाईट फ्लूरोसेंट (WW 3200 – 3700K)",
+ "exif-lightsource-17": "प्रमाण प्रकाश A",
+ "exif-lightsource-18": "प्रमाण प्रकाश B",
+ "exif-lightsource-19": "प्रमाण प्रकाश C",
+ "exif-lightsource-24": "ISO स्टूडीयो टंगस्टन",
+ "exif-lightsource-255": "अउर प्रकाश स्रोत",
+ "exif-flash-fired-0": "फ़्लैश नाइ चला",
+ "exif-flash-fired-1": "फ़्लैश चला",
+ "exif-flash-return-0": "कवनो फ़्लैश वापसी पहिचान सुविधा नाइ",
+ "exif-flash-return-2": "फ़्लैश वापसी कय रोशनी नाइ मिला",
+ "exif-flash-return-3": "फ़्लैश वापसी कय रोशनी मिला",
+ "exif-flash-mode-1": "अत्यावश्यक प्रकाश फाएर",
+ "exif-flash-mode-2": "आवश्यक फ्ल्यास संकुचन",
+ "exif-flash-mode-3": "स्वचालित शैली",
+ "exif-flash-function-1": "कवनो फ़्लैश सुविधा नाइ है",
+ "exif-flash-redeye-1": "लाल-आँख घटाव शैली",
+ "exif-focalplaneresolutionunit-2": "इंच",
+ "exif-sensingmethod-1": "अव्यक्त",
+ "exif-sensingmethod-2": "वन चीप कलर एरीया सेन्सर",
+ "exif-sensingmethod-3": "टू चीप कलर एरीया सेन्सर",
+ "exif-sensingmethod-4": "थ्री चीप कलर एरीया सेन्सर",
+ "exif-sensingmethod-5": "कलर सिक्वेण्शीयल एरीया सेंसर",
+ "exif-sensingmethod-7": "ट्रायलिनीयर सेंसर",
+ "exif-sensingmethod-8": "कलर सिक्वेंशीयल लिनीयर सेन्सर",
+ "exif-filesource-3": "डिजिटल स्टिल कैमरा",
+ "exif-scenetype-1": "सिधै खिचल चित्र",
+ "exif-customrendered-0": "सामान्य प्रक्रिया",
+ "exif-customrendered-1": "व्यक्तिगत प्रक्रिया",
+ "exif-exposuremode-0": "ऑटो एक्स्पोज़र",
+ "exif-exposuremode-1": "मैन्युअल एक्पोज़र",
+ "exif-exposuremode-2": "ऑटो ब्रॅकेट",
+ "exif-whitebalance-0": "ऑटो व्हाईट बैलेन्स",
+ "exif-whitebalance-1": "मॅन्यूअल व्हाईट बॅलेन्स",
+ "exif-scenecapturetype-0": "स्टॅन्डर्ड",
+ "exif-scenecapturetype-1": "लैंडस्केप",
+ "exif-scenecapturetype-2": "पोर्ट्रेट",
+ "exif-scenecapturetype-3": "नाईट सीन",
+ "exif-gaincontrol-0": "बिल्कुल नाइ",
+ "exif-gaincontrol-1": "लो गेन अप",
+ "exif-gaincontrol-2": "हाय गेन अप",
+ "exif-gaincontrol-3": "लो गेन डाउन",
+ "exif-gaincontrol-4": "हाय गेन डाउन",
+ "exif-contrast-0": "सामान्य",
+ "exif-contrast-1": "हल्का",
+ "exif-contrast-2": "गाढा",
+ "exif-saturation-0": "सामान्य",
+ "exif-saturation-1": "निम्न सैचुरेशन",
+ "exif-saturation-2": "उच्च सैचुरेशन",
+ "exif-sharpness-0": "साधारण",
+ "exif-sharpness-1": "नरम",
+ "exif-sharpness-2": "कडा",
+ "exif-subjectdistancerange-0": "अज्ञात",
+ "exif-subjectdistancerange-1": "मैक्रो",
+ "exif-subjectdistancerange-2": "नजदीक से देखा जाय",
+ "exif-subjectdistancerange-3": "लम्मे से देखा जाय",
+ "exif-gpslatitude-n": "उत्तरी अक्षांश",
+ "exif-gpslatitude-s": "दक्खिनी अक्षांश",
+ "exif-gpslongitude-e": "पुरुबी रेखांश",
+ "exif-gpslongitude-w": "पच्छु रेखांश",
+ "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|meter|meters}} समुद्र स्तर से ऊप्पर",
+ "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|meter|meters}} समुद्र स्तर कय नीचे",
+ "exif-gpsstatus-a": "मेज़रमेंट चलत है",
+ "exif-gpsstatus-v": "मेज़रमेंट इन्टरोपरेबिलीटी",
+ "exif-gpsmeasuremode-2": "२-आयामीय मापन",
+ "exif-gpsmeasuremode-3": "३-आयामीय मापन",
+ "exif-gpsspeed-k": "किलोमिटर प्रति घण्टा",
+ "exif-gpsspeed-m": "मील प्रति घंटा",
+ "exif-gpsspeed-n": "नाट्स",
+ "exif-gpsdestdistance-k": "किलोमीटर",
+ "exif-gpsdestdistance-m": "मील",
+ "exif-gpsdestdistance-n": "समुद्री मील",
+ "exif-gpsdop-excellent": "उत्कृष्ट ( $1 )",
+ "exif-gpsdop-good": "निक ($1)",
+ "exif-gpsdop-moderate": "मध्यम ($1)",
+ "exif-gpsdop-fair": "ठिकय ($1)",
+ "exif-gpsdop-poor": "खराब ($1)",
+ "exif-objectcycle-a": "खाली भिन्नही",
+ "exif-objectcycle-p": "खाली सन्झा",
+ "exif-objectcycle-b": "दुनो भिन्नही अव सन्झा",
+ "exif-gpsdirection-t": "असली दिशा",
+ "exif-gpsdirection-m": "चुम्बकिय दिशा",
+ "exif-ycbcrpositioning-1": "केंद्रित",
+ "exif-ycbcrpositioning-2": "को-साइटेड",
+ "exif-dc-contributor": "योगदानकर्ता",
+ "exif-dc-coverage": "मीडिया कय स्थानिक या लौकिक स्कोप",
+ "exif-dc-date": "दिनांक",
+ "exif-dc-publisher": "प्रकाशक",
+ "exif-dc-relation": "सम्बधित मीडिया",
+ "exif-dc-rights": "अधिकार",
+ "exif-dc-source": "मीडिया स्रोत",
+ "exif-dc-type": "मीडिया कय प्रकार",
+ "exif-rating-rejected": "खारिज कै दिहा गय",
+ "exif-isospeedratings-overflow": "६५५३५ से ढेर",
+ "exif-iimcategory-ace": "कला, संस्कृति औ मनोरंजन",
+ "exif-iimcategory-clj": "अपराध औ कानून",
+ "exif-iimcategory-dis": "प्रकोप अव दुर्घटना",
+ "exif-iimcategory-fin": "अर्थव्यवस्था औ व्यापार",
+ "exif-iimcategory-edu": "शिक्षा",
+ "exif-iimcategory-evn": "पर्यावरण",
+ "exif-iimcategory-hth": "स्वास्थ्य",
+ "exif-iimcategory-hum": "मानवी रुचि",
+ "exif-iimcategory-lab": "श्रम",
+ "exif-iimcategory-lif": "जीवन शैली औ अवकाश",
+ "exif-iimcategory-pol": "राजनीति",
+ "exif-iimcategory-rel": "धर्म औ विश्वास",
+ "exif-iimcategory-sci": "विज्ञान औ प्रौद्योगिकी",
+ "exif-iimcategory-soi": "सामाजिक मुद्दा",
+ "exif-iimcategory-spo": "खेल",
+ "exif-iimcategory-war": "युद्ध, संघर्ष औ अशांति",
+ "exif-iimcategory-wea": "मौसम",
+ "exif-urgency-normal": "सामान्य ( $1 )",
+ "exif-urgency-low": "न्यूनतम ($1)",
+ "exif-urgency-high": "उच्चतम ($1)",
+ "exif-urgency-other": "यूज़र-डिफ़ाइंड प्राथमिकता ( $1 )",
+ "namespacesall": "कुल",
+ "monthsall": "कुल",
+ "confirmemail": "आपन ई-मेल ठहर निश्चित करा जाय",
+ "confirmemail_noemail": "आप कय [[Special:Preferences|पसंद]] मा वैध इ-मेल एड्रेस नाइ दिहा है।",
+ "confirmemail_text": "{{SITENAME}} मा इमेल सुविधन कय लाभ उठावे खर्तीन आप कय आपन इमेल ठहर प्रमाणित करेक परि ।कन्फर्मेशन कोड भेजय खत्तीर निचे कय बटन पे क्लिक किन जाय। मेल मा कोड वाला लिन्क है ।उ लिन्क कय आप अपने ब्राउजर मा खोलि कय आपन इमेल ठहर प्रमाणित कै सका जात है ।",
+ "confirmemail_send": "कन्फर्मेशन कोड मेल करा जाय",
+ "confirmemail_sent": "कन्फर्मेशन इ-मेल भेज दिहा गा है।",
+ "confirmemail_oncreate": "आप कय इ-मेल ठहर पे एकठु कन्फर्मेशन कोड भेजा गा है।\nलॉग इन करय खत्तीर एकर आवश्यकता नाइ है, लेकिन इ विकि पे उपलब्ध इ-मेल आधारित सुविधन् कय इस्तेमाल करय खत्तीर इ देब जरूरी है।",
+ "confirmemail_sendfailed": "{{SITENAME}} आप कय कन्फर्मेशन मेल नाइ पठै पाए । आप कय इमेल ठहर मा कवनो गलत अक्षर तव नाइ है ,जाँचा जाय ।\nमेलर कहिस :$1",
+ "confirmemail_invalid": "गलत कन्फर्मेशन कोड।\nकोड रद्द होएक संभावना है।",
+ "confirmemail_needlogin": "आप कय आपन इमेल ठहर प्रमाणित करय खत्तीर $1 करेक परि ।",
+ "confirmemail_success": "आप कय इमेल ठहर प्रमाणित होइ गवा है । अब आप [[Special:UserLogin|लाग इन]] कैकय विकि कय मजा लै सका जात है ।",
+ "confirmemail_loggedin": "आप कय इमेल ठहर प्रमाणित होइ गवा है ।",
+ "confirmemail_subject": "{{SITENAME}} इ-मेल एड्रेस प्रमाणिकरण",
+ "confirmemail_invalidated": "इ-मेल एड्रेस प्रमाणिकरण रद्द कै गय",
+ "invalidateemail": "इ-मेल प्रमाणिकरण रद्द करा जाय",
+ "scarytranscludedisabled": "[आंतरविकि ट्रान्स्क्लुडिंग बंद है]",
+ "scarytranscludefailed": "[$1 कय लिये साँचा नाइ मङाइ मिला]",
+ "scarytranscludefailed-httpstatus": "[$1 कय लिये साँचा नाइ मँगाइ मिला, त्रुटि: HTTP $2]",
+ "scarytranscludetoolong": "[यूआरएल बहुतय लम्मा है]",
+ "deletedwhileediting": "'''Warning''':आप जबसे सम्पादन शुर करा गा है तब से इ पन्ना मिटाइ दिहा है ।",
+ "recreate": "फिरसे बनावा जाय",
+ "confirm_purge_button": "ठीक है",
+ "confirm-purge-top": "पन्ना कय कैश साफ करा जाय ?",
+ "confirm-watch-button": "ठीक है",
+ "confirm-watch-top": "इ पन्ना कय अपने ध्यान सुचि मा डारा जाय",
+ "confirm-unwatch-button": "ठीक है",
+ "confirm-unwatch-top": "इ पन्ना कय अपने ध्यानसूची से हटावा जाय ?",
+ "quotation-marks": "\"$1\"",
+ "imgmultipageprev": "← पिछला पन्ना",
+ "imgmultipagenext": "अगला पन्ना →",
+ "imgmultigo": "जावा जाय",
+ "imgmultigoto": "पन्ना $1 पे जावा जाय",
+ "img-lang-default": "(डिफ़ॉल्ट भाषा)",
+ "img-lang-go": "जावा जाय",
+ "ascending_abbrev": "asc",
+ "descending_abbrev": "desc",
+ "table_pager_next": "अगला पन्ना",
+ "table_pager_prev": "पिछला पन्ना",
+ "table_pager_first": "पहिला पन्ना",
+ "table_pager_last": "आखिरी पन्ना",
+ "table_pager_limit": "एक पन्ना पे $1 आइटम देखावा जाय",
+ "table_pager_limit_label": "आइटम प्रति पन्ना:",
+ "table_pager_limit_submit": "जावा जाय",
+ "table_pager_empty": "रिज़ल्ट नाइ है",
+ "autosumm-blank": "पन्ना कय खाली कै गय",
+ "autosumm-replace": "पन्ना कय '$1' से बदलि जात है।",
+ "autoredircomment": "[[$1]] पे अनुप्रेषित",
+ "autosumm-new": "'$1' कय साथे नँवा पन्ना बनावा गय",
+ "autosumm-newblank": "खाली पन्ना बनावा गय",
+ "watchlistedit-normal-title": "ध्यानसूची बदला जाय",
+ "watchlistedit-normal-legend": "ध्यानसूची से शीर्षक हटावा जाय",
+ "watchlistedit-normal-submit": "शिर्षक हटावा जाय",
+ "watchlistedit-normal-done": "आप कय ध्यानसूचीसे {{PLURAL:$1|1शीर्षक|$1 शीर्षक}} हटाइ गय:",
+ "watchlistedit-raw-title": "कच्चा निगरानी सूची सम्पादन करा जाय",
+ "watchlistedit-raw-legend": "कच्चा निगरानी सूची सम्पादन करा जाय",
+ "watchlistedit-raw-titles": "शीर्षक:",
+ "watchlistedit-raw-submit": "ध्यानसूची अपडेट करा जाय",
+ "watchlistedit-raw-done": "आप कय ध्यान सुची अपडेट होइ गवा है ।",
+ "watchlistedit-raw-added": "{{PLURAL:$1|1शीर्षक|$1 शीर्षक}} बढाइ गय:",
+ "watchlistedit-raw-removed": "{{PLURAL:$1|1शीर्षक|$1 शीर्षक}} हटाइ गय:",
+ "watchlistedit-clear-title": "अवलोकन सूची खाली कै गय",
+ "watchlistedit-clear-legend": "अवलोकन सूची खाली कीन जाय",
+ "watchlistedit-clear-titles": "शिर्षक",
+ "watchlisttools-clear": "अवलोकन सूची खाली कीन जाय",
+ "watchlisttools-view": "आधारित बदलाव देखा जाय",
+ "watchlisttools-edit": "ध्यानसूची देखा जाय अव संपादित कीन जाय",
+ "watchlisttools-raw": "रॉ ध्यानसूची देखा जाय अव संपादित कीन जाय",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|वार्ता]])",
+ "version": "संस्करण",
+ "version-extensions": "इन्स्टॉल करल एक्स्टेंशन",
+ "version-skins": "इन्स्टॉल करल त्वचा",
+ "version-specialpages": "खाश पन्ना",
+ "version-parserhooks": "पार्सर हूक",
+ "version-variables": "चल राशी(variables)",
+ "version-antispam": "स्प्याम रोकथाम",
+ "version-other": "अउर",
+ "version-mediahandlers": "मीडिया संचालक",
+ "version-hooks": "हूक",
+ "version-parser-extensiontags": "पार्सर एक्स्टेंशन टैग",
+ "version-parser-function-hooks": "पार्सर कार्य हूक",
+ "version-hook-name": "हूक नाँव",
+ "version-hook-subscribedby": "ग्राह्यता करय वाले",
+ "version-no-ext-name": "[अज्ञात नाँव]",
+ "version-license": "मीडियाविकि अनुज्ञापत्र",
+ "version-ext-license": "लाइसेंस",
+ "version-ext-colheader-name": "एक्सटेंशन",
+ "version-skin-colheader-name": "स्किन",
+ "version-ext-colheader-version": "संस्करण",
+ "version-ext-colheader-license": "लाइसेंस",
+ "version-ext-colheader-description": "विवरण",
+ "version-ext-colheader-credits": "लेखक",
+ "version-license-title": "$1 के लिए लाइसेंस",
+ "version-credits-title": "$1 कय लिए श्रेय",
+ "version-poweredby-credits": "इ विकि '''[https://www.mediawiki.org/ MediaWiki]''' से संचालित है, कॉपीराइट © 2001 - $1 $2 ।",
+ "version-poweredby-others": "अउर",
+ "version-poweredby-translators": "translatewiki.net अनुवादक",
+ "version-software": "इन्स्टॉल करल प्रणाली",
+ "version-software-product": "प्रोडक्ट",
+ "version-software-version": "संस्करण",
+ "version-entrypoints": "इन्ट्री प्वाइन्ट यु आर एल",
+ "version-entrypoints-header-entrypoint": "इन्ट्री प्वाइन्ट",
+ "version-entrypoints-header-url": "यू॰आर॰एल",
+ "version-libraries": "इन्स्टाल करल लाइब्रेरी",
+ "version-libraries-library": "लाइब्रेरी",
+ "version-libraries-version": "संस्करण",
+ "redirect-submit": "जावा जाय",
+ "redirect-lookup": "ढूँढा जाय:",
+ "redirect-value": "मूल्य:",
+ "redirect-user": "सदस्य आई॰डी",
+ "redirect-page": "पन्ना आइ॰डी",
+ "redirect-revision": "पन्ना अवतरण संख्या",
+ "redirect-file": "फ़ाइल कय नाँव",
+ "redirect-not-exists": "मुल्य नाइ मिला",
+ "fileduplicatesearch": "डुप्लिकेट फाइल खोजा जाय",
+ "fileduplicatesearch-summary": "हैश वैल्यू कय अनुसार डुप्लिकेट फाइल खोजा जाय ।",
+ "fileduplicatesearch-legend": "डुप्लिकेट खोजा जाय",
+ "fileduplicatesearch-filename": "फ़ाइल कय नाँव",
+ "fileduplicatesearch-submit": "खोजा जाय",
+ "fileduplicatesearch-info": "$1 × $2 पिक्सेल<br />फाइल आकार: $3<br />MIME प्रकार: $4",
+ "fileduplicatesearch-result-1": "फ़ाईल \"$1\" मा डुप्लिकेट नाइ है।",
+ "fileduplicatesearch-result-n": "फाइल\"$1\" कय {{PLURAL:$2|1 दुरुस्त डुप्लिकेट|$2 दुरुस्त डुप्लिकेट}} हैं ।",
+ "fileduplicatesearch-noresults": "कवनो \"$1\" फाइल नाइ मिला।",
+ "specialpages": "खाश पन्ना",
+ "specialpages-note-top": "कुंजी",
+ "specialpages-note": "* साधारण विशेष पन्ना।\n* <span class=\"mw-specialpagerestricted\">प्रतिबंधित विशेष पन्ना।</span>",
+ "specialpages-group-maintenance": "अनुरक्षण रिपोर्ट",
+ "specialpages-group-other": "अउर खाश पन्ना",
+ "specialpages-group-login": "लाग इन / खाता खोला जाय",
+ "specialpages-group-changes": "नँवा बदलाव अव लाग",
+ "specialpages-group-media": "मीडिया रिपोर्ट अव अपलोड",
+ "specialpages-group-users": "सदस्य अव अधिकार",
+ "specialpages-group-highuse": "अत्यधिक उपयोगी पन्ना",
+ "specialpages-group-pages": "पन्नन् कय सूची",
+ "specialpages-group-pagetools": "पन्ना औज़ार",
+ "specialpages-group-wiki": "डाटा औ औज़ार",
+ "specialpages-group-redirects": "खाश पन्ना पे लैजात है",
+ "specialpages-group-spam": "स्पैम औज़ार",
+ "specialpages-group-developer": "डेवलपर औजार",
+ "blankpage": "खाली पन्ना",
+ "intentionallyblankpage": "इ पन्ना जानबुझी कय खाली छोडा है ।",
+ "tags": "वैध बदलाव चिप्पि",
+ "tag-filter": "[[Special:Tags|चिप्पी]] छननी:",
+ "tag-filter-submit": "फिल्टर",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग}}]]: $2)",
+ "tags-title": "चिप्पि",
+ "tags-tag": "चिप्पी कय नाँव",
+ "tags-display-header": "बदलाव सूचिन् मा प्रदर्शन",
+ "tags-description-header": "अर्थ कय पूरा वर्णन",
+ "tags-active-header": "सक्रिय?",
+ "tags-hitcount-header": "चिप्पी वाला बदलाव",
+ "tags-active-yes": "हाँ",
+ "tags-active-no": "नाहीँ",
+ "tags-edit": "सम्पादन",
+ "tags-hitcount": "$1 {{PLURAL:$1|बदलाव|बदलाव}}",
+ "comparepages": "पन्ना दाँजा जाय",
+ "compare-page1": "पन्ना १",
+ "compare-page2": "पन्ना २",
+ "compare-rev1": "संशोधन १",
+ "compare-rev2": "संशोधन २",
+ "compare-submit": "दाँजा जाय",
+ "compare-invalid-title": "आप कय दिहा शिर्षक अमान्य है ।",
+ "compare-title-not-exists": "आप कय दिहा शिर्षक नाइ है ।",
+ "compare-revision-not-exists": "आप कय दिहा संशोधन नाइ है ।",
+ "dberr-again": "कुछ मिन रुकि कय फिरसे लोड किन जाय",
+ "dberr-usegoogle": "इही बिंचे आप गूगल से खोज कै सका जात है ।",
+ "htmlform-submit": "जमा कीन जाय",
+ "htmlform-reset": "बदलाव फिरसे उही जगही लावा जाय",
+ "htmlform-selectorother-other": "अउर",
+ "htmlform-no": "नाहीँ",
+ "htmlform-yes": "हाँ",
+ "htmlform-chosen-placeholder": "एक्ठु विकल्प चुना जाय",
+ "htmlform-cloner-create": "अउर जोडा जाय",
+ "htmlform-cloner-delete": "हटावा जाय",
+ "sqlite-has-fts": "$1 पूर्ण पाठ खोज समर्थन कय साथ",
+ "sqlite-no-fts": "$1पूर्ण-पाठ खोज समर्थन कय बिना",
+ "logentry-delete-delete": "$1 ने पृष्ठ $3 {{GENDER:$2|हटा}} दिहा गय",
+ "logentry-delete-restore": "$1 ने पृष्ठ $3 कय {{GENDER:$2|पुनर्स्थापित}} कै गय",
+ "revdelete-content-hid": "सामग्री लुकुआवा है",
+ "revdelete-summary-hid": "सम्पादन सारांश लुकुआवा है",
+ "revdelete-uname-hid": "सदस्य नाँव लुकुआवा है",
+ "revdelete-content-unhid": "सामग्री देखावा है",
+ "revdelete-summary-unhid": "सम्पादन सारांश देखावा है",
+ "revdelete-uname-unhid": "सदस्य नाँव देखावा है",
+ "revdelete-restricted": "प्रबंधक पे प्रतिबंध लागू",
+ "revdelete-unrestricted": "प्रबंधक कय प्रबंधन हटावा जाय",
+ "logentry-move-move": "$1 ने $3 पृष्ठ $4 पर {{GENDER:$2|स्थानांतरित}} कै गय",
+ "rightsnone": "(कउनो नाहीं)",
+ "revdelete-summary": "संपादन सारांश",
+ "feedback-adding": "पृष्ठ पे प्रतिक्रिया जोडत है ...",
+ "feedback-cancel": "रद्द करा जाय",
+ "feedback-close": "होइ गवा",
+ "feedback-error2": "त्रुटि: संपादन विफल रहा है",
+ "feedback-message": "सनेशा:",
+ "feedback-subject": "विषय:",
+ "feedback-submit": "प्रतिक्रिया भेजा जाय",
+ "searchsuggest-search": "खोज",
+ "searchsuggest-containing": "...से युक्त",
+ "api-error-badaccess-groups": "इ विकि मा आप कय फाइल अपलोड करेक अनुमति नाइ है",
+ "api-error-badtoken": "आंतरिक त्रुटि: खराब टोकन।",
+ "api-error-duplicate-popup-title": "डुप्लिकेट {{PLURAL:$1| फ़ाइल | फ़ाइल}}",
+ "api-error-empty-file": "आप कय दीहल फ़ाइल खाली रहा।",
+ "api-error-emptypage": "नँवा अव खाली पन्ना बनावै कय अनुमति नाइ है",
+ "api-error-fileexists-forbidden": "\"$1\" नाँव कय फाइल मौजुद है,एकरे उप्पर नाइ लिखि सका जात है",
+ "api-error-fileexists-shared-forbidden": "\"$1\" नाँव कय फाइल साझा फाइल भण्डार मा पहिलवे से मौजुद है अव एकरे उप्पर नाइ लिखि सका जात है ।",
+ "api-error-file-too-large": "आप कय दीहल फ़ाइल बहुत बडा रहा।",
+ "api-error-filename-tooshort": "फ़ाइल कय नाँव बहुत छोट है।",
+ "api-error-filetype-banned": "अइसन फ़ाइल प्रतिबन्धित है।",
+ "api-error-filetype-missing": "फाईल कय एक्सटेंशन लापता है ।",
+ "api-error-hookaborted": "आपके द्वारा प्रयासरत संशोधन किसी एक्स्टेंशन द्वारा निरस्त किया गया।",
+ "api-error-http": "आंतरिक त्रुटि: सर्वर से कनेक्ट करय में असमर्थ।",
+ "api-error-illegal-filename": "अइसन फ़ाइल कय इजाजत नाइ है।",
+ "api-error-missingparam": "आंतरिक त्रुटि: अनुरोध पे पैरामीटर लापता",
+ "api-error-missingresult": "आन्तरिक त्रुटि: इ प्रतिलिपि सफल निर्धारित नाइ होइ सका",
+ "api-error-mustbeloggedin": "फाइल अपलोड करेक आप कय लाग इन करेक परि",
+ "api-error-mustbeposted": "आंतरिक त्रुटि: HTTP POST अनुरोध कय आवश्यकता है.",
+ "api-error-nomodule": "आंतरिक त्रुटि: कवनो अपलोड मॉड्यूल सेट नाइ है",
+ "api-error-ok-but-empty": "आंतरिक त्रुटि: सर्वर से कवनो जवाब नाइ है।",
+ "api-error-overwrite": "मौजुदा फाइल कय उप्पर नाइ लिखि सका जात अहै ।",
+ "api-error-stashfailed": "आन्तरिक त्रुटि: अस्थाई फाइल राखय मा सर्वर असफल रहा।",
+ "api-error-unclassified": "अज्ञात त्रुटि आइ गवा।",
+ "api-error-unknown-code": "अज्ञात त्रुटि: \"$1\"",
+ "api-error-unknown-error": "आंतरिक त्रुटि: आप कय फ़ाइल अपलोड प्रयास करत समय कुछ गलत होइ गवा रहा।",
+ "api-error-unknown-warning": "अज्ञात चेतावनी: $1",
+ "api-error-unknownerror": "अज्ञात त्रुटि: \"$1\"",
+ "api-error-uploaddisabled": "इ विकि मा अपलोड अक्षम है.",
+ "api-error-verification-error": "इ फाइल दुषित होइ सकत है या गलत एक्टेन्शन अहै ।",
+ "duration-seconds": "$1 {{PLURAL:$1|सॅकेंड}}",
+ "duration-minutes": "$1 {{PLURAL:$1|मिनट}}",
+ "duration-hours": "$1 {{PLURAL:$1|घंटा|घंटा}}",
+ "duration-days": "$1 {{PLURAL:$1|दिन}}",
+ "duration-weeks": "$1 {{PLURAL:$1|सप्ताह}}",
+ "duration-years": "$1 {{PLURAL:$1|साल}}",
+ "duration-decades": "$1 {{PLURAL:$1|दशक}}",
+ "duration-centuries": "$1 {{PLURAL:$1|शताब्दी}}",
+ "duration-millennia": "$1 {{PLURAL:$1|सहस्राब्दी}}",
+ "limitreport-title": "पार्सर प्रोफाइलिङ डाटा",
+ "limitreport-cputime": "सि.पि.यु समय खपत",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|सॅकेंड}}",
+ "limitreport-walltime": "असली समय खपत",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|सॅकेंड}}",
+ "limitreport-postexpandincludesize": "विस्तार उपरांत विकिपाठ आकार",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|बाइट}}",
+ "limitreport-templateargumentsize": "साँचा प्राचल आकार",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|बाइट}}",
+ "limitreport-expansiondepth": "उच्चतम विस्तार गहराई",
+ "limitreport-expensivefunctioncount": "महंगा पार्सर फंक्शन कय संख्या",
+ "expandtemplates": "साँचा विस्तार",
+ "expand_templates_title": "कन्टेक्स्ट शीर्षक, जैसय {{FULLPAGENAME}} आदि कय लिए:",
+ "expand_templates_input": "इनपुट पाठ:",
+ "expand_templates_output": "परिणाम",
+ "expand_templates_xml_output": "XML आउटपुट",
+ "expand_templates_html_output": "रा HTML आउटपुट",
+ "expand_templates_ok": "ठीक है",
+ "expand_templates_remove_comments": "टिप्पणी हटावा जाय",
+ "expand_templates_remove_nowiki": "परिणाम मा <nowiki> टैग हटावा जाय",
+ "expand_templates_generate_xml": "XML कय पार्स (parse) वृक्ष देखावा जाय",
+ "expand_templates_generate_rawhtml": "सुद्ध HTML देखावा जाय",
+ "expand_templates_preview": "झलक",
+ "pagelang-name": "पन्ना",
+ "pagelang-language": "भाषा",
+ "pagelang-use-default": "डिफ़ॉल्ट भाषा इस्तेमाल कीन जाय",
+ "pagelang-select-lang": "भाषा चुना जाय",
+ "right-pagelang": "पन्ना कय भाषा चुना जाय",
+ "action-pagelang": "पन्ना कय भाषा बदला जाय",
+ "log-name-pagelang": "भाषा लाग बदला जाय",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (सक्षम)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''अक्षम''')",
+ "mediastatistics": "मीडिया कय आँकड़ा",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 बाईट}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME प्रकार",
+ "mediastatistics-table-extensions": "संभावित एक्श्टेंशन",
+ "mediastatistics-table-count": "फाइल कय गिन्ती",
+ "mediastatistics-table-totalbytes": "कुल साइज",
+ "mediastatistics-header-unknown": "अज्ञात",
+ "mediastatistics-header-bitmap": "बिटमैप चित्र",
+ "mediastatistics-header-audio": "आडियो",
+ "mediastatistics-header-video": "वीडियो",
+ "mediastatistics-header-office": "आफिस",
+ "mediastatistics-header-text": "शाब्दिक",
+ "json-error-unknown": "JSON से समस्या रहा । गल्ती: $1"
+}
diff --git a/languages/i18n/ay.json b/languages/i18n/ay.json
index e5fa2160..d3b45fa0 100644
--- a/languages/i18n/ay.json
+++ b/languages/i18n/ay.json
@@ -1,197 +1,195 @@
{
- "@metadata": {
- "authors": [
- "Alhen",
- "Diego Grez",
- "Erebedhel",
- "Kanon6917"
- ]
- },
- "tog-underline": "Sipita siqiraña",
- "tog-hideminor": "Jichha jaqukipawina sullka askiptawix imantaña",
- "tog-hidepatrolled": "Jichhnaki jaqukipawina askiptawix unch'ukita imantaña",
- "tog-newpageshidepatrolled": "Machaqa uñstawix waruchatat uñstawix unch'ukita imantaña",
- "tog-extendwatchlist": "Sarayawi jaqukipaw uñachayasuñatakiw unch'ukit waruch aqatatayaña",
- "tog-usenewrc": "Jichhnaki jaqukipawi waliptäta (JavaScript munawiwa)",
- "tog-numberheadings": "Titulun chinu achuraña",
- "tog-showtoolbar": "Turkawit irnaqañ täta tisi uñachayaña (JavaScript munawiwa)",
- "tog-editondblclick": "Uñstawi turkayaña päsuxuqiña (JavaScript munawiwa)",
- "tog-editsectiononrightclick": "(JavaScript munawiwa) titulxat tuqina kupi suxuqiñampi tuqitaki turkawi luräña",
- "tog-rememberpassword": "Akax jasanchirin imt'awija amtaña (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "tog-watchcreations": "Unch'ukit waruchatajana nayaxa uñstawix uñstayawajata yapxataña",
- "tog-watchdefault": "Unch'ukit waruchatajana nayaxa uñstawix turkajata yapxataña",
- "tog-watchmoves": "Unch'ukit waruchatajana nayaxa uñstawix sutiyarajata yapxataña",
- "tog-watchdeletion": "Unch'ukit waruchatajana nayaxa uñstawix phiskhurajata yapxataña",
- "tog-minordefault": "Sullka askiptawpacha chimpuriña",
- "tog-previewontop": "Askiptawit llataxa nayraxa uñtawikar uñachayaña",
- "tog-previewonfirst": "Mayïri askiptawina uñtawikar uñachayaña",
- "tog-enotifwatchlistpages": "Nayaru chaski jalayiriña ukja unch'ukit waruchatana mäuñstawi turkañäna",
- "tog-enotifusertalkpages": "Nayaru chaski jalayiriña ukja tuqisiwit uñstawija turkañäna",
- "tog-enotifminoredits": "Nayaru chaski jalayiriña uñstawina sullka askiptawimpiraki",
- "tog-enotifrevealaddr": "Yatiyawita chaski jalayirinakana chaski jalayirit untjäwija uñachayaña",
- "tog-shownumberswatching": "Qawqha apnaqirinaka uñch'ukiskar uñacht'ayaña",
- "tog-fancysig": "Mayaxta rixt'a (sipitarachayatawisa)",
- "tog-uselivepreview": "Uñtawikach'ukix mirq'iña (JavaScript munawiwa) (yant'awiwaki)",
- "tog-forceeditsummary": "Nayaru yatiyaña ukja ch'usa askiptawit juk'aptayawi apantaskaña",
- "tog-watchlisthideown": "Unch'ukit waruchatana askiptawijax imantaña",
- "tog-watchlisthidebots": "Unch'ukit waruchatana bot-ta askiptawipax imantaña",
- "tog-watchlisthideminor": "Unch'ukit waruchatana sullka askiptawix imantaña",
- "tog-watchlisthideliu": "Unch'ukit waruchatana qillqt'ayasita apnaqirina askiptawipax imantaña",
- "tog-watchlisthideanons": "Unch'ukit waruchatana sutiwisa apnaqirina askiptawipax imantaña",
- "tog-watchlisthidepatrolled": "Unch'ukit waruchatana unch'ukit askiptawix imantaña",
- "tog-ccmeonemails": "Chaski jalayirija nayax yaqhar apayayäta qillqaqawix nayaru apayaña",
- "tog-diffonly": "Manqha diff-nakax uñstawit yati utjawi janiw uñachayaña",
- "tog-showhiddencats": "Imantata patawix uñachayaña",
- "underline-always": "Wiñaya",
- "underline-never": "Janipini",
- "sunday": "tuminku",
- "monday": "lunisa",
- "tuesday": "martisa",
- "wednesday": "mirkulisa",
- "thursday": "juywisa",
- "friday": "wirnisa",
- "saturday": "sawaru",
- "sun": "tum",
- "mon": "lun",
- "tue": "mar",
- "wed": "mir",
- "thu": "juy",
- "fri": "wir",
- "sat": "saw",
- "january": "chichu phaxsi",
- "february": "anata phaxsi",
- "march": "achuqa phaxsi",
- "april": "yapu apthapi phaxsi",
- "may_long": "llamayu phaxsi",
- "june": "juyphi phaxsi",
- "july": "huillka kuti phaxsi",
- "august": "thaya phaxsi",
- "september": "llamp'u phaxsi",
- "october": "taypi sata phaxsi",
- "november": "awti phaxsi",
- "december": "jallu qallta phaxsi",
- "january-gen": "chichu phaxsi",
- "february-gen": "anata phaxsi",
- "march-gen": "achuqa phaxsi",
- "april-gen": "yapu apthapi phaxsi",
- "may-gen": "llamayu phaxsi",
- "june-gen": "juyphi phaxsi",
- "july-gen": "huillka kuti phaxsi",
- "august-gen": "thaya phaxsi",
- "september-gen": "llamp'u phaxsi",
- "october-gen": "taypi sata phaxsi",
- "november-gen": "awti phaxsi",
- "december-gen": "jallu qallta phaxsi",
- "jan": "chi",
- "feb": "ana",
- "mar": "ach",
- "apr": "yap",
- "may": "llam",
- "jun": "juy",
- "jul": "hui",
- "aug": "tha",
- "sep": "llmp",
- "oct": "tay",
- "nov": "awt",
- "dec": "jall",
- "article": "Amtachinu",
- "cancel": "Jan saña",
- "moredotdotdot": "Yapa...",
- "mypage": "Uñstawija",
- "navigation": "Wampuña",
- "and": "&#32;-mpi",
- "qbfind": "Thaqaña",
- "qbbrowse": "Wampuña",
- "qbedit": "Turkaña",
- "qbpageoptions": "Uñstawitaki ajllita",
- "qbmyoptions": "Ajllitanakaja",
- "errorpagetitle": "Pantja",
- "help": "Yanapaña",
- "search": "Thaqaña",
- "searchbutton": "Thaqaña",
- "go": "Saraña",
- "searcharticle": "Saraña",
- "history": "Nayra qillqata",
- "history_short": "Nayra qillqata",
- "edit": "Turkaña",
- "create": "Uñstayaña",
- "editthispage": "Aka uñstawi turkaña",
- "create-this-page": "Aka uñstawi uñstayaña",
- "delete": "Pichaña",
- "deletethispage": "Aka uñstawi phiskhuraña",
- "undelete_short": "{{PLURAL:$1|mayaskiptawi|$1 askiptanakawi}} kutt'ayxaña",
- "protect": "Jark'aña",
- "protect_change": "turkaña",
- "protectthispage": "Aka uñstawi jark'aña",
- "unprotect": "Jark'ch'ukiña",
- "unprotectthispage": "Aka uñstawi jark'ch'ukiña",
- "newpage": "Machaqa uñstawi",
- "talkpage": "Aka uñstawxat tuqisiña",
- "talkpagelinktext": "Kutkatasiña",
- "specialpage": "Ajalla Uñstawi",
- "talk": "Tuqisiwi",
- "otherlanguages": "Yaqha arunaka",
- "protectedpage": "Uñstawi jark'ata",
- "jumptonavigation": "wampuña",
- "jumptosearch": "thaqaña",
- "currentevents": "Jichha pacha",
- "currentevents-url": "Project:Jichha pacha",
- "mainpage": "Nayriri Uñstawi",
- "mainpage-description": "Nayriri Uñstawi",
- "portal": "Jayma punku",
- "portal-url": "Project:Jayma punku",
- "editsection": "turkaña",
- "editold": "turkaña",
- "editlink": "trukaña",
- "toc": "Utjirinaka",
- "showtoc": "uñachayaña",
- "site-rss-feed": "$1 RSS jalsuri",
- "site-atom-feed": "$1 Atom jalsuri",
- "page-rss-feed": "\"$1\" RSS jalsuri",
- "page-atom-feed": "\"$1\" Atom jalsuri",
- "nstab-main": "Amtachinu",
- "nstab-user": "Apnaqiri",
- "nstab-image": "Q'ipi",
- "nstab-help": "Yanapaña",
- "nstab-category": "Patawi",
- "error": "Pantja",
- "login": "Qillqt'ayasiña",
- "userlogin": "Qillqt'ayasiña",
- "logout": "Mistuña",
- "userlogout": "Mistuña",
- "loginlanguagelabel": "Aru: $1",
- "summary": "Juk’aptayäwi:",
- "subject": "Yatsuwi/titulu:",
- "minoredit": "Akax janiw taqpachäkiti",
- "yourdiff": "Jalaqtatanaka",
- "preferences": "Amtajarjama",
- "prefs-rc": "Jichha kutikiptatanaka",
- "yourlanguage": "Aru:",
- "email": "Chaski jalayiri",
- "recentchanges": "Jichha kutikiptatanaka",
- "show": "uñachayaña",
- "fileuploadsummary": "Uñt’ayawi:",
- "license": "Iyawsawi:",
- "license-header": "Iyawsawi:",
- "listfiles_date": "Uru jakhu",
- "listfiles_user": "Apnaqiri",
- "listfiles_description": "Uñt’ayawi",
- "file-anchor-link": "Q'ipi",
- "filehist-user": "Apnaqiri",
- "move": "Qillqaraña",
- "booksources-go": "Saraña",
- "specialloguserlabel": "Apnaqiri:",
- "speciallogtitlelabel": "Titulu:",
- "listusers-submit": "Uñachayaña",
- "watch": "Uñjaña",
- "restriction-move": "Qillqaraña",
- "undelete-search-submit": "Thaqaña",
- "sp-contributions-talk": "Kutkatasiña",
- "sp-contributions-submit": "Thaqaña",
- "ipblocklist-submit": "Thaqaña",
- "tooltip-p-logo": "Nayriri Uñstawi",
- "others": "yaqha",
- "confirm_purge_button": "Iyawa saña",
- "imgmultigo": "¡Saraña!",
- "table_pager_limit_submit": "Saraña"
+ "@metadata": {
+ "authors": [
+ "Alhen",
+ "Diego Grez",
+ "Erebedhel",
+ "Kanon6917"
+ ]
+ },
+ "tog-underline": "Sipita siqiraña",
+ "tog-hideminor": "Jichha jaqukipawina sullka askiptawix imantaña",
+ "tog-hidepatrolled": "Jichhnaki jaqukipawina askiptawix unch'ukita imantaña",
+ "tog-newpageshidepatrolled": "Machaqa uñstawix waruchatat uñstawix unch'ukita imantaña",
+ "tog-extendwatchlist": "Sarayawi jaqukipaw uñachayasuñatakiw unch'ukit waruch aqatatayaña",
+ "tog-usenewrc": "Jichhnaki jaqukipawi waliptäta (JavaScript munawiwa)",
+ "tog-numberheadings": "Titulun chinu achuraña",
+ "tog-showtoolbar": "Turkawit irnaqañ täta tisi uñachayaña (JavaScript munawiwa)",
+ "tog-editondblclick": "Uñstawi turkayaña päsuxuqiña (JavaScript munawiwa)",
+ "tog-editsectiononrightclick": "(JavaScript munawiwa) titulxat tuqina kupi suxuqiñampi tuqitaki turkawi luräña",
+ "tog-watchcreations": "Unch'ukit waruchatajana nayaxa uñstawix uñstayawajata yapxataña",
+ "tog-watchdefault": "Unch'ukit waruchatajana nayaxa uñstawix turkajata yapxataña",
+ "tog-watchmoves": "Unch'ukit waruchatajana nayaxa uñstawix sutiyarajata yapxataña",
+ "tog-watchdeletion": "Unch'ukit waruchatajana nayaxa uñstawix phiskhurajata yapxataña",
+ "tog-minordefault": "Sullka askiptawpacha chimpuriña",
+ "tog-previewontop": "Askiptawit llataxa nayraxa uñtawikar uñachayaña",
+ "tog-previewonfirst": "Mayïri askiptawina uñtawikar uñachayaña",
+ "tog-enotifwatchlistpages": "Nayaru chaski jalayiriña ukja unch'ukit waruchatana mäuñstawi turkañäna",
+ "tog-enotifusertalkpages": "Nayaru chaski jalayiriña ukja tuqisiwit uñstawija turkañäna",
+ "tog-enotifminoredits": "Nayaru chaski jalayiriña uñstawina sullka askiptawimpiraki",
+ "tog-enotifrevealaddr": "Yatiyawita chaski jalayirinakana chaski jalayirit untjäwija uñachayaña",
+ "tog-shownumberswatching": "Qawqha apnaqirinaka uñch'ukiskar uñacht'ayaña",
+ "tog-fancysig": "Mayaxta rixt'a (sipitarachayatawisa)",
+ "tog-uselivepreview": "Uñtawikach'ukix mirq'iña (JavaScript munawiwa) (yant'awiwaki)",
+ "tog-forceeditsummary": "Nayaru yatiyaña ukja ch'usa askiptawit juk'aptayawi apantaskaña",
+ "tog-watchlisthideown": "Unch'ukit waruchatana askiptawijax imantaña",
+ "tog-watchlisthidebots": "Unch'ukit waruchatana bot-ta askiptawipax imantaña",
+ "tog-watchlisthideminor": "Unch'ukit waruchatana sullka askiptawix imantaña",
+ "tog-watchlisthideliu": "Unch'ukit waruchatana qillqt'ayasita apnaqirina askiptawipax imantaña",
+ "tog-watchlisthideanons": "Unch'ukit waruchatana sutiwisa apnaqirina askiptawipax imantaña",
+ "tog-watchlisthidepatrolled": "Unch'ukit waruchatana unch'ukit askiptawix imantaña",
+ "tog-ccmeonemails": "Chaski jalayirija nayax yaqhar apayayäta qillqaqawix nayaru apayaña",
+ "tog-diffonly": "Manqha diff-nakax uñstawit yati utjawi janiw uñachayaña",
+ "tog-showhiddencats": "Imantata patawix uñachayaña",
+ "underline-always": "Wiñaya",
+ "underline-never": "Janipini",
+ "sunday": "tuminku",
+ "monday": "lunisa",
+ "tuesday": "martisa",
+ "wednesday": "mirkulisa",
+ "thursday": "juywisa",
+ "friday": "wirnisa",
+ "saturday": "sawaru",
+ "sun": "tum",
+ "mon": "lun",
+ "tue": "mar",
+ "wed": "mir",
+ "thu": "juy",
+ "fri": "wir",
+ "sat": "saw",
+ "january": "chichu phaxsi",
+ "february": "anata phaxsi",
+ "march": "achuqa phaxsi",
+ "april": "yapu apthapi phaxsi",
+ "may_long": "llamayu phaxsi",
+ "june": "juyphi phaxsi",
+ "july": "huillka kuti phaxsi",
+ "august": "thaya phaxsi",
+ "september": "llamp'u phaxsi",
+ "october": "taypi sata phaxsi",
+ "november": "awti phaxsi",
+ "december": "jallu qallta phaxsi",
+ "january-gen": "chichu phaxsi",
+ "february-gen": "anata phaxsi",
+ "march-gen": "achuqa phaxsi",
+ "april-gen": "yapu apthapi phaxsi",
+ "may-gen": "llamayu phaxsi",
+ "june-gen": "juyphi phaxsi",
+ "july-gen": "huillka kuti phaxsi",
+ "august-gen": "thaya phaxsi",
+ "september-gen": "llamp'u phaxsi",
+ "october-gen": "taypi sata phaxsi",
+ "november-gen": "awti phaxsi",
+ "december-gen": "jallu qallta phaxsi",
+ "jan": "chi",
+ "feb": "ana",
+ "mar": "ach",
+ "apr": "yap",
+ "may": "llam",
+ "jun": "juy",
+ "jul": "hui",
+ "aug": "tha",
+ "sep": "llmp",
+ "oct": "tay",
+ "nov": "awt",
+ "dec": "jall",
+ "article": "Amtachinu",
+ "cancel": "Jan saña",
+ "moredotdotdot": "Yapa...",
+ "mypage": "Uñstawija",
+ "navigation": "Wampuña",
+ "and": "&#32;-mpi",
+ "qbfind": "Thaqaña",
+ "qbbrowse": "Wampuña",
+ "qbedit": "Turkaña",
+ "qbpageoptions": "Uñstawitaki ajllita",
+ "qbmyoptions": "Ajllitanakaja",
+ "errorpagetitle": "Pantja",
+ "help": "Yanapaña",
+ "search": "Thaqaña",
+ "searchbutton": "Thaqaña",
+ "go": "Saraña",
+ "searcharticle": "Saraña",
+ "history": "Nayra qillqata",
+ "history_short": "Nayra qillqata",
+ "edit": "Turkaña",
+ "create": "Uñstayaña",
+ "editthispage": "Aka uñstawi turkaña",
+ "create-this-page": "Aka uñstawi uñstayaña",
+ "delete": "Pichaña",
+ "deletethispage": "Aka uñstawi phiskhuraña",
+ "undelete_short": "{{PLURAL:$1|mayaskiptawi|$1 askiptanakawi}} kutt'ayxaña",
+ "protect": "Jark'aña",
+ "protect_change": "turkaña",
+ "protectthispage": "Aka uñstawi jark'aña",
+ "unprotect": "Jark'ch'ukiña",
+ "unprotectthispage": "Aka uñstawi jark'ch'ukiña",
+ "newpage": "Machaqa uñstawi",
+ "talkpage": "Aka uñstawxat tuqisiña",
+ "talkpagelinktext": "Kutkatasiña",
+ "specialpage": "Ajalla Uñstawi",
+ "talk": "Tuqisiwi",
+ "otherlanguages": "Yaqha arunaka",
+ "protectedpage": "Uñstawi jark'ata",
+ "jumptonavigation": "wampuña",
+ "jumptosearch": "thaqaña",
+ "currentevents": "Jichha pacha",
+ "currentevents-url": "Project:Jichha pacha",
+ "mainpage": "Nayriri Uñstawi",
+ "mainpage-description": "Nayriri Uñstawi",
+ "portal": "Jayma punku",
+ "portal-url": "Project:Jayma punku",
+ "editsection": "turkaña",
+ "editold": "turkaña",
+ "editlink": "trukaña",
+ "toc": "Utjirinaka",
+ "showtoc": "uñachayaña",
+ "site-rss-feed": "$1 RSS jalsuri",
+ "site-atom-feed": "$1 Atom jalsuri",
+ "page-rss-feed": "\"$1\" RSS jalsuri",
+ "page-atom-feed": "\"$1\" Atom jalsuri",
+ "nstab-main": "Amtachinu",
+ "nstab-user": "Apnaqiri",
+ "nstab-image": "Q'ipi",
+ "nstab-help": "Yanapaña",
+ "nstab-category": "Patawi",
+ "error": "Pantja",
+ "login": "Qillqt'ayasiña",
+ "userlogin": "Qillqt'ayasiña",
+ "logout": "Mistuña",
+ "userlogout": "Mistuña",
+ "loginlanguagelabel": "Aru: $1",
+ "summary": "Juk’aptayäwi:",
+ "subject": "Yatsuwi/titulu:",
+ "minoredit": "Akax janiw taqpachäkiti",
+ "yourdiff": "Jalaqtatanaka",
+ "preferences": "Amtajarjama",
+ "prefs-rc": "Jichha kutikiptatanaka",
+ "yourlanguage": "Aru:",
+ "email": "Chaski jalayiri",
+ "recentchanges": "Jichha kutikiptatanaka",
+ "show": "uñachayaña",
+ "fileuploadsummary": "Uñt’ayawi:",
+ "license": "Iyawsawi:",
+ "license-header": "Iyawsawi:",
+ "listfiles_date": "Uru jakhu",
+ "listfiles_user": "Apnaqiri",
+ "listfiles_description": "Uñt’ayawi",
+ "file-anchor-link": "Q'ipi",
+ "filehist-user": "Apnaqiri",
+ "move": "Qillqaraña",
+ "specialloguserlabel": "Apnaqiri:",
+ "speciallogtitlelabel": "Titulu:",
+ "listusers-submit": "Uñachayaña",
+ "watch": "Uñjaña",
+ "restriction-move": "Qillqaraña",
+ "undelete-search-submit": "Thaqaña",
+ "sp-contributions-talk": "Kutkatasiña",
+ "sp-contributions-submit": "Thaqaña",
+ "ipblocklist-submit": "Thaqaña",
+ "tooltip-p-logo": "Nayriri Uñstawi",
+ "others": "yaqha",
+ "confirm_purge_button": "Iyawa saña",
+ "imgmultigo": "¡Saraña!",
+ "table_pager_limit_submit": "Saraña"
}
diff --git a/languages/i18n/az.json b/languages/i18n/az.json
index 1a429a73..dcc2dbc8 100644
--- a/languages/i18n/az.json
+++ b/languages/i18n/az.json
@@ -30,20 +30,20 @@
]
},
"tog-underline": "Keçidlərin altını xətlə:",
- "tog-hideminor": "Son dəyişikliklərdə kiçik redaktələri gizlə",
- "tog-hidepatrolled": "Yoxlanılmış redaktələri son dəyişikliklərdə göstərmə",
- "tog-newpageshidepatrolled": "Yoxlanılmış səhifələri yeni səhifə siyahısında göstərmə",
- "tog-extendwatchlist": "Təkmil izləmə siyahısı",
- "tog-usenewrc": "Son dəyişikliklərin təkmil versiyası (JavaScript)",
- "tog-numberheadings": "Başlıqların avto-nömrələnməsi",
- "tog-showtoolbar": "Redaktə zamanı alətlər qutusunu göstər (JavaScript)",
- "tog-editondblclick": "Səhifələri iki kliklə redaktə etməyə başla (JavaScript)",
- "tog-editsectiononrightclick": "Bölmələrin redaktəsini başlıqların üzərində sağ klik etməklə mümkün et (JavaScript)",
- "tog-watchcreations": "Yaratdığım səhifələri izlədiyim səhifələrə əlavə et",
- "tog-watchdefault": "Redaktə etdiyim səhifələri izlədiyim səhifələrə əlavə et",
- "tog-watchmoves": "Adlarını dəyişdiyim səhifələri izlədiyim səhifələrə əlavə et",
- "tog-watchdeletion": "Sildiyim səhifələri izlədiyim səhifələrə əlavə et",
- "tog-minordefault": "Default olaraq bütün redaktələri kiçik redaktə kimi nişanla",
+ "tog-hideminor": "Son dəyişikliklər siyahısında kiçik redaktələri gizlə",
+ "tog-hidepatrolled": "Son dəyişikliklər siyahısında yoxlanılmış redaktələri gizlə",
+ "tog-newpageshidepatrolled": "Yeni səhifələr siyahısında yoxlanılmış səhifələri gizlə",
+ "tog-extendwatchlist": "Yalnız son dəyişiklikləri yox, bütün dəyişiklikləri göstərmək üçün izləmə siyahısını genişlət",
+ "tog-usenewrc": "Son dəyişikliklərdəki və izləmə siyahısındakı dəyişiklikləri qruplaşdır",
+ "tog-numberheadings": "Başlıqları avtomatik nömrələ",
+ "tog-showtoolbar": "Redaktə zamanı üstdəki alətlər qutusunu göstər",
+ "tog-editondblclick": "Səhifələri iki kliklə redaktə et",
+ "tog-editsectiononrightclick": "Bölmə başlığı üzərində siçanın sağ düyməsini klikləməklə bölmələri redaktə et",
+ "tog-watchcreations": "Yaratdığım səhifələri və yüklədiyim faylları izlədiyim səhifələrə əlavə et",
+ "tog-watchdefault": "Redaktə etdiyim səhifələri və faylları izlədiyim səhifələrə əlavə et",
+ "tog-watchmoves": "Adlarını dəyişdiyim səhifələri və faylları izlədiyim səhifələrə əlavə et",
+ "tog-watchdeletion": "Sildiyim səhifələri və faylları izlədiyim səhifələrə əlavə et",
+ "tog-minordefault": "Standart olaraq bütün redaktələri kiçik redaktə kimi nişanla",
"tog-previewontop": "Sınaq göstərişi yazma sahəsindən əvvəl göstər",
"tog-previewonfirst": "İlkin redaktədə sınaq göstərişi",
"tog-enotifwatchlistpages": "İzləmə siyahısında olan məqalə redaktə olunsa, mənə e-məktub göndər",
@@ -51,9 +51,9 @@
"tog-enotifminoredits": "Səhifələrdə kiçik dəyişikliklər olsa belə, mənə e-məktub göndər",
"tog-enotifrevealaddr": "Xəbərdarlıq e-məktublarında mənim e-poçt ünvanımı göstər",
"tog-shownumberswatching": "İzləyən istifadəçilərin sayını göstər",
- "tog-oldsig": "Hazırkı imza:",
+ "tog-oldsig": "İndiki imza:",
"tog-fancysig": "Vikimətn şəklində imza (avtomatik keçid yaratmadan)",
- "tog-uselivepreview": "Canlı sınaq baxışı xüsusiyyətindən istifadə et (JavaScript tələb edir, sınaq mərhələsindədir)",
+ "tog-uselivepreview": "Canlı sınaq baxışını istifadə et",
"tog-forceeditsummary": "Qısa məzmunu boş saxladıqda mənə bildir",
"tog-watchlisthideown": "Mənim redaktələrimi izləmə siyahısında gizlət",
"tog-watchlisthidebots": "Bot redaktələrini izləmə siyahısında gizlət",
@@ -191,8 +191,11 @@
"permalink": "Daimi bağlantı",
"print": "Çap",
"view": "Görünüş",
+ "view-foreign": "$1 üzərindən baxış",
"edit": "Redaktə",
+ "edit-local": "Lokal izahı redaktə et",
"create": "Yarat",
+ "create-local": "Lokal izah əlavə et",
"editthispage": "Bu səhifəni redaktə et",
"create-this-page": "Bu səhifəni yarat",
"delete": "Sil",
@@ -225,6 +228,7 @@
"otherlanguages": "Başqa dillərdə",
"redirectedfrom": "($1 səhifəsindən yönləndirilmişdir)",
"redirectpagesub": "Yönləndirmə səhifəsi",
+ "redirectto": "İstiqamətləndirilir:",
"lastmodifiedat": "Bu səhifə sonuncu dəfə $2, $1 tarixində redaktə edilib.",
"viewcount": "Bu səhifəyə $1 {{PLURAL:$1|dəfə}} müraciət olunub.",
"protectedpage": "Mühafizəli səhifə",
@@ -277,6 +281,8 @@
"hidetoc": "gizlə",
"collapsible-collapse": "Gizlə",
"collapsible-expand": "Göstər",
+ "confirmable-yes": "Bəli",
+ "confirmable-no": "Xeyr",
"thisisdeleted": "$1 bax və ya bərpa et?",
"viewdeleted": "$1 göstərilsin?",
"restorelink": "{{PLURAL:$1|bir silinmiş redaktəyə|$1 silinmiş redaktəyə}}",
@@ -348,14 +354,14 @@
"viewsourcetext": "Siz bu səhifənin məzmununu görə və köçürə bilərsiniz:",
"viewyourtext": "Bu səhifəyə '''etdiyiniz dəyişikliklərin''' mənbəyini görüntüləyib köçürə bilərsiniz:",
"protectedinterface": "Bu səhifədə proqram təminatı üçün sistem məlumatları var və sui-istifadənin qarşısını almaq üçün mühafizə olunmalıdır.",
- "editinginterface": "'''Diqqət!''' Siz proqram təminatı interfeysinin mətn olan səhifəsini redaktə edirsiniz.\nOnun dəyişdirilməsi digər istifadəçilərin interfeysinin xarici görünüşünə təsir göstərir.\nTərcümə üçün daha yaxşı olar ki, MediaWiki-nin lokallaşması üçün olan [//translatewiki.net/wiki/Main_Page?setlang=az translatewiki.net] layihəsindən istifadə edəsiniz.",
+ "editinginterface": "<strong>Diqqət:</strong> Siz proqram təminatı üçün interfeys mətni olan səhifəni redaktə edirsiniz.\nOnun dəyişdirilməsi digər istifadəçilərin interfeysinin xarici görünüşünə təsir göstərəcək.",
"cascadeprotected": "Səhifə mühafizə olunub, çünki o kaskad mühafizə olunan {{PLURAL:$1|növbəti səhifəyə|növbəti səhifələrə}} qoşulub:\n$2",
"namespaceprotected": "Sizin adlarında $1 olan məqalələrdə redaktə etməyə icazəniz yoxdur.",
"customcssprotected": "Bu səhifəni redaktə etmə izniniz yoxdur, çünki bu səhifə başqa bir istifadəçinin fərdi parametrlərinə sahibdir.",
"customjsprotected": "Bu Java Script səhifəsini redaktə etmə izniniz yoxdur, çünki bu səhifə başqa bir istifadəçinin fərdi parametrlərinə sahibdir.",
- "mycustomcssprotected": "Bu CSS ssəhifəsini redaktə etmə izniniz yoxdur.",
- "mycustomjsprotected": "Bu JavaScript səhifəsini redaktə etmə izniniz yoxdur.",
- "myprivateinfoprotected": "Sizin özəl məlumatlarınızı redaktə etmə izniniz yoxdur.",
+ "mycustomcssprotected": "Bu CSS ssəhifəsini redaktə etmək səlahiyyətiniz yoxdur.",
+ "mycustomjsprotected": "Bu JavaScript səhifəsini redaktə etmək səlahiyyətiniz yoxdur.",
+ "myprivateinfoprotected": "Sizin şəxsi məlumatlarınızı redaktə etmək səlahiyyətiniz yoxdur.",
"mypreferencesprotected": "Seçimlərinizi redaktə etmək üçün izniniz yoxdur.",
"ns-specialprotected": "Xüsusi səhifələr redaktə oluna bilməz.",
"titleprotected": "Bu adda səhifənin yaradılması istifadəçi [[User:$1|$1]] tərəfindən qadağan edilmişdir.\nGöstərilən səbəb: \"''$2''\".",
@@ -363,12 +369,12 @@
"invalidtitle-knownnamespace": "\"$2\" sahə adı üçün \"$3\" mətni keçərsiz bir başlıq",
"invalidtitle-unknownnamespace": "Naməlum $1 ad sahəsi miqdarı və keçərsiz \"$2\" başlıq",
"exception-nologin": "Giriş edilməmişdir",
- "exception-nologin-text": "Bu səhifəyə daxi olmaq üçün [[Special:Userlogin|özünüzü təqdim]], edin.",
+ "exception-nologin-text": "Bu səhifəyə daxil olmaq və ya fəaliyyəti icra etmək üçün özünüzü sistemə təqdim edin.",
"exception-nologin-text-manual": " bu səhifəyə və ya hərəkətə daxil olmaq üçün $1 lazımdır.",
"virus-badscanner": "Düzgün olmayan konfiqurasiya: naməlum ''$1'' virus yoxlayanı",
"virus-scanfailed": "Yoxlama başa çatmadı (kod $1)",
"virus-unknownscanner": "naməlum antivirus",
- "logouttext": "'''Sistemdən çıxdınız.'''\n\nSiz {{SITENAME}} saytını anonim olaraq istifadə etməyə davam edə bilər və ya eyni, yaxud başqa istifadəçi adı ilə <span class='plainlinks'>[$1 yenidən daxil ola]</span> bilərsiniz. Veb-brauzerin keş yaddaşını təmizləyənədək bəzi səhifələr hələ də sistemdə imişsiniz kimi görünə bilər.",
+ "logouttext": "<strong>Sistemdən çıxdınız.</strong>\n\nVeb-brauzerin keş yaddaşını təmizləyənədək bəzi səhifələr hələ də sistemdəymişsiniz kimi görünə bilər.",
"welcomeuser": "Xoş gəldin $1!",
"welcomecreation-msg": "Hesabınız yaradıldı.\n[[Special:Preferences|{{SITENAME}} nizamlamalarınızı]] dəyişdirməyi unutmayın.",
"yourname": "İstifadəçi adı",
@@ -385,33 +391,34 @@
"remembermypassword": "Məni bu kompyuterdə xatırla (maksimum $1 {{PLURAL:$1|gün|gün}})",
"userlogin-remembermypassword": "Sistemdə qal",
"userlogin-signwithsecure": "Etibarlı bağlantıdan istifadə edin",
- "yourdomainname": "Sizin domain",
+ "yourdomainname": "Sizin domeniniz:",
"password-change-forbidden": "Bu vikidə parolunuzu dəyişdirə bilməzsiniz.",
"externaldberror": "Verilənlər bazasının doğruluğunu yoxlamada xəta baş verib və yaxud sizin xarici istifadəçi qeydiyyatını yeniləmək hüququnuz yoxdur.",
"login": "Daxil ol",
"nav-login-createaccount": "Daxil ol / hesab yarat",
- "userlogin": "Daxil ol və ya istifadəçi yarat",
+ "userlogin": "Daxil ol və ya qeydiyyatdan keç",
"userloginnocreate": "Daxil ol",
"logout": "Çıxış",
"userlogout": "Çıxış",
"notloggedin": "Daxil olmamısınız",
"userlogin-noaccount": "İstifadəçi hesabınız yoxdur?",
- "userlogin-joinproject": "{{SITENAME}} qoşulun",
+ "userlogin-joinproject": "{{SITENAME}} layihəsinə qoşulun",
"nologin": "İstifadəçi hesabınız yoxdur? $1.",
- "nologinlink": "Hesab yaradın",
- "createaccount": "Hesab aç",
+ "nologinlink": "Hesab yarat",
+ "createaccount": "Hesab yarat",
"gotaccount": "İstifadəçi hesabınız varmı? '''$1'''.",
"gotaccountlink": "Daxil olun",
"userlogin-resetlink": "Daxilolma məlumatlarınızı unutmusunuz?",
- "userlogin-resetpassword-link": "Parolu unutdunuzmu?",
- "userlogin-loggedin": "Siz artıq {{GENDER:$1|$1}} kimi daxil olmusunuz.\nAşağıdakı formadan istifadə edərək, bağqa bir istifadəçi kimi daxil ola bilərsiniz.",
+ "userlogin-resetpassword-link": "Parolunuzu unutmusunuz?",
+ "userlogin-helplink2": "Qeydiyyat barədə köməklik",
+ "userlogin-loggedin": "Siz artıq {{GENDER:$1|$1}} kimi daxil olmusunuz.\nAşağıdakı formadan istifadə edərək, başqa bir istifadəçi kimi daxil ola bilərsiniz.",
"userlogin-createanother": "Başqa bir istifadəçi hesabı yarat",
"createacct-emailrequired": "E-poçt ünvanı",
- "createacct-emailoptional": "E-poçt ünvanı (istəyə bağlı)",
+ "createacct-emailoptional": "E-poçt ünvanı (məcburi deyil)",
"createacct-email-ph": "E-poçt ünvanınızı daxil edin",
"createacct-another-email-ph": "E-poçt ünvanını daxil edin",
"createaccountmail": "Müvəqqəti təsadüfi bir paroldan istifadə edə bilər və bu parolu göstərilən e-poçt ünvanına göndərə bilərsiniz",
- "createacct-realname": "Gərçək adı (istəyə bağlı)",
+ "createacct-realname": "Əsl adınız (məcburi deyil)",
"createaccountreason": "Səbəb:",
"createacct-reason": "Səbəb",
"createacct-reason-ph": "Niyə başqa bir hesab yaradırsınız",
@@ -463,16 +470,17 @@
"cannotchangeemail": "Hesabın e-poçt ünvanı bu wiki üzərindən dəyişdirilə bilməz.",
"emaildisabled": "Bu saytdan e-poçt göndərə bilməzsiniz.",
"accountcreated": "Hesab yaradıldı",
- "accountcreatedtext": "$1 üçün istifadəçi hesabı yaradıldı.",
+ "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) üçün istifadəçi hesabı yaradıldı.",
"createaccount-title": "{{SITENAME}} hesabın yaradılması",
"createaccount-text": "Biriləri {{SITENAME}} saytında ($4) sizin e-poçt ünvanınızdan istifadə edərək, parolu \"$3\" olan, \"$2\" adlı bir hesab yaratdı.\n\nSayta daxil olmalı və parolunuzu dəyişdirməlisiniz.\n\nƏgər istifadəçi hesabını səhvən yaratmısınızsa, bu mesajı gözardı edə bilərsiniz.",
- "login-throttled": "Sistemə daxil olmaq üçün həddən artıq cəhd etmisiniz.\nYeni cəhd etməzdən əvvəl bir qədər gözləyin.",
+ "login-throttled": "Sistemə daxil olmaq üçün həddən artıq cəhd etmisiniz.\nYeni cəhd etməzdən əvvəl $1 gözləyin.",
"login-abort-generic": "Giriş uğursuz alındı - Rədd",
"loginlanguagelabel": "Dil: $1",
"suspicious-userlogout": "Sizin çıxış üçün cəhdiniz uğursuz alındı. Bu, brouzerin yaxud proksi-keşləmənin düzgün işləməməsindən qaynaqlanır.",
"createacct-another-realname-tip": "Gərçək adınız istəyə bağlıdır.\nƏgər gərçək adınızı göstərsəniz, çalışmalarınıza müraciət etmək üçün istifadə ediləcəkdir.",
"pt-login": "Daxil ol",
- "pt-createaccount": "Akkaunt yarat",
+ "pt-login-button": "Daxil ol",
+ "pt-createaccount": "Hesab yarat",
"pt-userlogout": "Çıxış",
"php-mail-error-unknown": "PHP-nin mail() funksiyasında naməlum xəta",
"user-mail-no-addy": "Bir e-poçt ünvanı olmadan e-poçt göndərməyə çalışdı.",
@@ -506,11 +514,10 @@
"passwordreset-emailelement": "İstifadəçi adı: $1\nMüvəqqəti parol: $2",
"passwordreset-emailsent": "Xəbərdarlıq məktubu e-maillə göndərildi.",
"changeemail": "E-məktub ünvanını dəyiş",
- "changeemail-oldemail": "Hazırki e-poçt ünvanı:",
+ "changeemail-oldemail": "Hazırkı e-poçt ünvanı:",
"changeemail-newemail": "Yeni e-poçt ünvanı:",
"changeemail-none": "(yoxdur)",
"changeemail-submit": "E-poçtu dəyiş",
- "changeemail-cancel": "İmtina",
"bold_sample": "Qalın mətn",
"bold_tip": "Qalın mətn",
"italic_sample": "Kursiv mətn",
@@ -537,7 +544,7 @@
"preview": "Sınaq görüntüsü",
"showpreview": "Sınaq göstərişi",
"showdiff": "Dəyişiklikləri göstər",
- "anoneditwarning": "'''DİQQƏT!''' Siz özünüzü sistemə təqdim etməmisiniz. Sizin IP ünvanınız bu səhifənin tarixçəsinə qeyd olunacaq.",
+ "anoneditwarning": "<strong>Diqqət:</strong> Siz sistemə daxil olmamısınız. Hər hansı dəyişiklik etsəniz, sizin IP-ünvanınız hamıya görünəcək. Əgər <strong>[$1 daxil olsanız]</strong> və ya <strong>[$2 hesab yaratsanız]</strong>, redaktələriniz sizin istifadəçi adınıza yazılacaq və digər üstünlüklər də qazanacaqsınız.",
"anonpreviewwarning": "Sistemə daxil olmamısınız. \"Səhifəni qeyd et\" düyməsini bassanız IP ünvanınız səhifənin tarixçəsində qeyd olunacaq.",
"missingsummary": "'''Xatırlatma.''' Siz dəyişikliklərin qısa şərhini verməmisiniz. \"Səhifəni qeyd et\" düyməsinə təkrar basandan sonra sizin dəyişiklikləriniz şərhsiz qeyd olunacaq.",
"missingcommenttext": "Zəhmət olmasa, aşağıda şərhinizi yazın.",
@@ -610,6 +617,9 @@
"edit-no-change": "Sizin redaktələr qeydə alınmamışdır. Belə ki, mətndə heç bir düzəliş edilməmişdir.",
"postedit-confirmation-saved": "Redaktəniz qeyd edildi.",
"edit-already-exists": "Yeni səhifəni yaratmaq mümkün deyil.\nBelə ki, bu adda səhifə artıq mövcuddur.",
+ "content-not-allowed-here": "\"$1\" tərkibi [[$2]] səhifəsi üçün icazə verilmir.",
+ "content-model-wikitext": "vikimətn",
+ "content-model-text": "adi mətn",
"content-model-javascript": "JavaScript",
"expensive-parserfunction-category": "Kifayət qədər böyük sayda genişresurslu funksiyaların müraciət olunduğu səhifələr",
"post-expand-template-inclusion-warning": "'''DİQQƏT!''' Daxil edilən şablonların həcmi həddindən artıq böyükdür.\nBəzi şablonlar əlavə olunmayacaq.",
@@ -629,7 +639,7 @@
"currentrev": "Hal-hazırkı versiya",
"currentrev-asof": "Səhifəsinin $1 tarixinə olan son halı",
"revisionasof": "$1 versiyası",
- "revision-info": "$2 tərəfindən yaradılmış $1 tarixli dəyişiklik",
+ "revision-info": "$2$7 tərəfindən edilmiş $1 tarixli dəyişiklik",
"previousrevision": "←Əvvəlki versiya",
"nextrevision": "Sonrakı versiya→",
"currentrevisionlink": "Hal-hazırkı versiya",
@@ -651,7 +661,7 @@
"history-feed-empty": "Axtardığınız səhifə mövcud deyil.\nÇox guman ki, bu səhifə silinib və ya onun adı dəyişdirilib.\nVikidə buna bənzər səhifələri [[Special:Search|axtarmağa]] cəhd edin.",
"rev-deleted-comment": "(şərhlər silindi)",
"rev-deleted-user": "(İstifadəçi adı silindi)",
- "rev-deleted-event": "(qeyd silindi)",
+ "rev-deleted-event": "(qeydiyyat detalları silindi)",
"rev-deleted-user-contribs": "[istifadəçi adı və ya IP ünvanı silindi - dəyişiklik fəaliyyətlərdən çıxarıldı]",
"rev-deleted-text-permission": "Səhifənin bu versiyası''' silinib'''.\nMümkündür ki, bunun səbəbi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silmə qeydlərində] göstərilmişdir.",
"rev-suppressed-text-unhide": "Səhifənin bu versiyası''' silinib'''.\nMümkündür ki, bunun səbəbi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silmə qeydlərində] göstərilmişdir.\nSiz idarəçi olduğunuza görə silinən [$1 bu versiyanı] nəzərdən keçirə bilərsiniz.",
@@ -667,11 +677,11 @@
"revdelete-show-file-submit": "Bəli",
"logdelete-selected": "Jurnalın {{PLURAL:$1|seçilmiş qeydi|seçilmiş qeydləri}}:",
"revdelete-legend": "Məhdudiyyətləri müəyyənləşdir:",
- "revdelete-hide-text": "Səhifənin bu versiyasının mətnini gizlə",
+ "revdelete-hide-text": "Dəyişikliyin mətni",
"revdelete-hide-image": "Faylın məzmununu gizlə",
- "revdelete-hide-name": "Hərəkəti və məqsədi gizləmək",
- "revdelete-hide-comment": "Dəyişikliklərin şərhini gizlə",
- "revdelete-hide-user": "Redaktə müəllifinin istifadəçi adını/IP ünvanını gizlə",
+ "revdelete-hide-name": "Məqsədi və parametrləri gizlə",
+ "revdelete-hide-comment": "Dəyişikliklərin təsviri",
+ "revdelete-hide-user": "Redaktə müəllifinin istifadəçi adı/IP-ünvanı",
"revdelete-hide-restricted": "Məlumatları idarəçilərdən də gizlə",
"revdelete-radio-same": "(dəyişdirmə)",
"revdelete-radio-set": "Gizli",
@@ -687,7 +697,7 @@
"revdel-restore": "Görünüşü dəyiş",
"pagehist": "Səhifənin tarixçəsi",
"deletedhist": "Silmə qeydləri",
- "revdelete-reason-dropdown": "*Ümumi silmə səbəbləri\n** Müəllif hüquqları pozuntusu\n** Uyğunsuz şəxsi məlumat",
+ "revdelete-reason-dropdown": "*Əsas silmə səbəbləri\n** Müəllif hüquqları pozuntusu\n** Uyğun olmayan şəxsi məlumat\n** Uyğun olmayan istifadəçi adı\n** Potensial böhtan xarakterli məlumat",
"revdelete-otherreason": "Digər/əlavə səbəb:",
"revdelete-reasonotherlist": "Digər səbəb",
"revdelete-edit-reasonlist": "Silmə səbəblərini redaktə et",
@@ -711,7 +721,6 @@
"mergehistory-same-destination": "Mənbə və hədəf səhifələri eyni ola bilməz",
"mergehistory-reason": "Səbəb:",
"mergelog": "Birləşdirmə qeydi",
- "pagemerge-logentry": "[[$1]] [[$2]]-yə birləşdirildi ($3-ə qədər)",
"revertmerge": "Ayır",
"history-title": "\"$1\" səhifəsinin tarixçəsi",
"difference-title": "\"$1\" səhifəsinin versiyaları arasındakı fərqlər",
@@ -720,6 +729,7 @@
"compareselectedversions": "Seçilən versiyaları müqayisə et",
"showhideselectedversions": "Seçilən versiyaları göstər/gizlə",
"editundo": "əvvəlki halına qaytar",
+ "diff-multi-sameuser": "(Eyni istifadəçi tərəfindən edilmiş {{PLURAL:$1|bir dəyişiklik|$1 bir neçə dəyişiklik}} göstərilmir)",
"diff-multi-manyusers": "({{PLURAL:$2|Bir istifadəçi|$2 istifadəçi}} tərəfindən edilən {{PLURAL:$1|bir ara redaktə|$1 ara redaktə}} göstərilmir)",
"difference-missing-revision": "Səhifənin {{PLURAL:$2|bu versiyasının|$2 versiyalarının}} müqayisəsi ($1) tapılmadı.\nBu xəta adətən, köhnəlmiş səhifələrin müqayisə versiyalarından keçid edildikdə baş verir.\nDaha ətraflı məlumat üçün [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silmə qeydlərinə] baxın.",
"searchresults": "Axtarış nəticələri",
@@ -749,13 +759,12 @@
"search-section": "(bölmə $1)",
"search-suggest": "Bəlkə, bunu nəzərdə tuturdunuz: $1",
"search-interwiki-caption": "Qardaş layihələr",
- "search-interwiki-default": "$1 nəticə:",
+ "search-interwiki-default": "$1 nəticələri:",
"search-interwiki-more": "(yenə)",
"search-relatedarticle": "əlaqədar",
"searchrelated": "əlaqəli",
"searchall": "bütün",
"showingresults": "Aşağıda #'''$2''' ilə başlayan {{PLURAL:$1|'''$1'''-ə qədər}} nəticə göstərilib.",
- "showingresultsheader": "'''$4''' üçün {{PLURAL:$5|'''$3'''-dən '''$1''' nəticə|'''$3'''-dən '''$1 - $2''' nəticə}}",
"search-nonefound": "Sorğunuza uyğun nəticə tapılmadı.",
"powersearch-legend": "Təkmil axtarış",
"powersearch-ns": "Ad aralığında axtar:",
@@ -814,7 +823,7 @@
"timezoneregion-indian": "Hind Okeanı",
"timezoneregion-pacific": "Sakit Okean",
"allowemail": "Digər istifadəçilər mənə e-məktub göndərə bilər",
- "prefs-searchoptions": "Axtarış kriteriyaları",
+ "prefs-searchoptions": "Axtar",
"prefs-namespaces": "Adlar fəzası",
"default": "boş",
"prefs-files": "Fayllar",
@@ -823,8 +832,8 @@
"prefs-common-css-js": "Bütün skinlər üçün ümumi CSS/JavaScript:",
"prefs-emailconfirm-label": "E-poçtun təsdiqlənməsi:",
"youremail": "E-məktub:",
- "username": "İstifadəçi adı:",
- "prefs-memberingroups": "Üzvü olduğu {{PLURAL:$1|qrup|qrup}}:",
+ "username": "{{GENDER:$1|İstifadəçi adı}}:",
+ "prefs-memberingroups": "{{GENDER:$2|Üzv}} olduğu {{PLURAL:$1|qrup}}:",
"prefs-memberingroups-type": "$1",
"prefs-registration": "Qeydiyyat vaxtı:",
"prefs-registration-date-time": "$1",
@@ -834,12 +843,12 @@
"yournick": "Ləqəb:",
"badsig": "Səhv xam imza.\nHTML kodu yoxla.",
"badsiglength": "İmzanız çox uzundur. İmza $1 {{PLURAL:$1|simvoldan|simvoldan}} uzun olmamalıdır.",
- "yourgender": "Cins:",
- "gender-unknown": "göstərmə",
- "gender-male": "kişi",
- "gender-female": "qadın",
+ "yourgender": "Hansı təsvir sizə daha uyğundur?",
+ "gender-unknown": "Bildirmək istəmirəm",
+ "gender-male": "Bu kişi istifadəçi viki-səhifələri redaktə edir",
+ "gender-female": "Bu qadın istifadəçi viki-səhifələri redaktə edir",
"email": "E-məktub",
- "prefs-help-realname": "Həqiqi adınızı daxil etmək məcburi deyil.\nBu seçimi etdiyiniz halda, adınız redaktələrinizə görə müəlliflik hüququnuzun tanınması üçün istifadə ediləcək.",
+ "prefs-help-realname": "Həqiqi adınızı daxil etmək məcburi deyil.\nDaxil etsəniz, adınız redaktələrinizin müəllifliyinin təyin edilməsi üçün istifadə edilə bilər.",
"prefs-help-email": "E-poçt ünvanınızı daxil etmək məcburi deyil.\nBu, parolunuzu unutduğunuz halda, sizə yeni parol göndərməyə imkan verir.",
"prefs-help-email-others": "Həmçinin, istifadəçi və ya müzakirə səhifənizdəki link vasitəsilə başqa istifadəçilərin sizinlə əlaqə yaratmasını seçə bilərsiniz. Bu halda sizin e-poçt ünvanınız heç kimə görünməyəcək.",
"prefs-help-email-required": "Elektron ünvan tələb olunur.",
@@ -848,7 +857,7 @@
"prefs-signature": "İmza",
"prefs-dateformat": "Tarix formatı",
"prefs-timeoffset": "Saat qurşağının fərqi",
- "prefs-advancedediting": "Ətraflı variantlar",
+ "prefs-advancedediting": "Ümumi parametrlər",
"prefs-advancedrc": "Ətraflı variantlar",
"prefs-advancedrendering": "Ətraflı variantlar",
"prefs-advancedsearchoptions": "Ətraflı variantlar",
@@ -871,7 +880,7 @@
"userrights-no-interwiki": "Sizə başqa vikilayihələrdəki istifadəçilərin statusunu dəyişməyə icazə verilməyib",
"userrights-nodatabase": "$1 verilənlər bazası ya mövcud deyil, ya da lokal deyil.",
"userrights-nologin": "Siz istifadəçilərin hüquqlarını dəyişmək üçün sistemə idarəçi olaraq [[Special:UserLogin|daxil olmalısınız]].",
- "userrights-notallowed": "Sizin istifadəçi hesabınıza digər istifadəçilərə hüquqlar vermək və ya almağa icazə verilməyib.",
+ "userrights-notallowed": "Sizin digər istifadəçilərə hüquqlar vermək və ya almaq icazəniz yoxdur.",
"userrights-changeable-col": "Dəyişdirə bildiyiniz qruplar",
"userrights-unchangeable-col": "Dəyişdirə bilmədiyiniz qruplar",
"userrights-irreversible-marker": "$1*",
@@ -902,7 +911,7 @@
"right-createaccount": "Yeni istifadəçi hesabları açmaq",
"right-minoredit": "Redaktələri kiçik redaktə kimi nişanlamaq",
"right-move": "Səhifənin adını dəyişdir",
- "right-move-subpages": "Səhifənin adının onların alt səhifələrin adı ilə dəyişdirilməsi",
+ "right-move-subpages": "Səhifələrin adını onların alt səhifələrinin adları ilə birlikdə dəyişdir",
"right-move-rootuserpages": "əsas istifadəçi səhifələrinin adını dəyişmək",
"right-movefile": "Faylın adını dəyişdir",
"right-suppressredirect": "Səhifənin adını dəyişən zaman kohnə addan istiqamətlənmə yaradıla bilinmir",
@@ -911,14 +920,14 @@
"right-reupload-own": "Mövcud faylın yeni versiyasının həmin istifadəçi tərəfindən yüklənməsi",
"right-reupload-shared": "ümumi anbarda olan faylın adının lokal adla dəyişdirilməsi",
"right-upload_by_url": "URL-dən fayl yüklə",
- "right-autoconfirmed": "Yarım mühafizə edilmiş səhifənin redaktəsi",
+ "right-autoconfirmed": "IP-ünvana görə sürət məhdudiyyəti yoxdur",
"right-bot": "Avtomatik proses hesab edilir",
"right-apihighlimits": "API sorğularında yüksək həddən istifadə et",
"right-writeapi": "Redaktələrdən zamanı API-dən (İnterfeys proqramlaşdıran proqram) istifadə",
"right-delete": "Səhifələrin silinməsi",
"right-bigdelete": "Uzun tarixçəsi olan səhifələrin silinməsi",
"right-deleterevision": "səhifənin konkret versiyasının silinməsi və bərpası",
- "right-deletedhistory": "silinmiş mətnə daxil olmadan silinmiş səhifələrin tarixçələrinə baxma",
+ "right-deletedhistory": "Silinmiş mətni görmədən silinmiş səhifələrin tarixçələrinə baxmaq",
"right-browsearchive": "Silinmiş səhifələri axtar",
"right-undelete": "Silinmiş səhifələrin bərpası",
"right-suppressrevision": "Səhifələrin gizli versiyalarına bax, gizlə və göstər",
@@ -928,9 +937,9 @@
"right-hideuser": "İstifadəçi adına qadağa qoy və adın görünməsinin qarşısını al",
"right-ipblock-exempt": "IP bloklanmalarını, avtobloklanmalarını və diapazon bloklanmalarını keç",
"right-proxyunbannable": "Proksilərin avtomatik bloklanmalarını keç",
- "right-unblockself": "Özünün blokunun qaldırılması",
- "right-protect": "Mühafizə səviyyəsi dəyiş və mühafizə altında olan səhifəni redaktə et",
- "right-editprotected": "Mühafizə olunmuş səhifələri redaktə (kaskad mühafizə daxil olmaqla)",
+ "right-unblockself": "Öz blokunuzun açılması",
+ "right-protect": "Mühafizə səviyyəsinin dəyişilməsi və kaskad mühafizə olunan səhifələrin redaktə edilməsi",
+ "right-editprotected": "\"{{int:protect-level-sysop}}\" mühafizə səviyyəsinə malik səhifələrin redaktə edilməsi",
"right-editinterface": "İstifadəçi interfeysini dəyişmək",
"right-editusercssjs": "Digər istifadəçilərin CSS və JavaScript fayllarını redaktə",
"right-editusercss": "Digər istifadəçilərin CSS faylını redaktə",
@@ -956,7 +965,7 @@
"action-edit": "bu səhifəni redaktə etmək",
"action-createpage": "səhifələrin yaradılması",
"action-createtalk": "müzakirə səhifələrinin yaradılması",
- "action-createaccount": "bu istifadəçi hesabının yaradılması",
+ "action-createaccount": "bu istifadəçi hesabını yaratmaq",
"action-minoredit": "bunu kiçik redaktə kimi nişanla",
"action-move": "bu səhifənin adını dəyişmək",
"action-move-subpages": "bu səhifənin və onun altsəhifələrinin adını dəyişmək",
@@ -968,12 +977,12 @@
"action-writeapi": "API yazıdan istifadə",
"action-delete": "bu səhifəni sil",
"action-deleterevision": "bu yoxlamaı ləğv et",
- "action-deletedhistory": "səhifənin silinmə tarixinə bax",
+ "action-deletedhistory": "səhifənin silinmə tarixinə baxmaq",
"action-browsearchive": "Silinmiş səhifələri axtar",
"action-undelete": "bu səhifəni silmə",
"action-suppressrevision": "bu gizli redaktəyə bax və bərpa et",
"action-suppressionlog": "xüsusi gündəliyə baxış",
- "action-block": "istifadəçinin redaktə etməsini əngəlləmək",
+ "action-block": "bu istifadəçinin redaktə etməsinə qadağa qoymaq",
"action-protect": "bu səhifənin mühafizə səviyyəsini dəyişmək",
"action-import": "başqa vikidən səhifələrin idxalı",
"action-importupload": "fayl yükləmə vasitəsilə səhifələrin idxalı",
@@ -986,6 +995,7 @@
"action-siteadmin": "Məlumatlar bazasının bloklanması və blokun götürülməsi",
"action-sendemail": "e-məktub göndər",
"nchanges": "$1 {{PLURAL:$1|dəyişiklik|dəyişiklik}}",
+ "enhancedrc-history": "tarixçə",
"recentchanges": "Son dəyişikliklər",
"recentchanges-legend": "Son dəyişiklik seçimləri",
"recentchanges-summary": "'''Ən son dəyişiklikləri bu səhifədən izləyin:'''",
@@ -995,15 +1005,25 @@
"recentchanges-label-bot": "Bu redaktə bot tərəfindən edilmişdir",
"recentchanges-label-unpatrolled": "Bu redaktə hələ nəzərdən keçirilməmişdir",
"recentchanges-label-plusminus": "Səhifənin ölçüsü bayt miqdarı ilə təyin edilir",
- "recentchanges-legend-newpage": "$1 - yeni səhifə",
+ "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (həmçinin bax: [[Special:NewPages|yeni səhifələrin siyahısı]])",
"rcnotefrom": "Aşağıda <strong>$2</strong>-dən bu yana olan dəyişikliklər göstərilib (<strong>$1</strong>-dən çox olmayaraq).",
"rclistfrom": "$3 $2 vaxtından başlayaraq yeni dəyişiklikləri göstər",
"rcshowhideminor": "Kiçik redaktələri $1",
+ "rcshowhideminor-show": "Göstər",
+ "rcshowhideminor-hide": "Gizlət",
"rcshowhidebots": "Botları $1",
+ "rcshowhidebots-show": "Göstər",
+ "rcshowhidebots-hide": "Gizlət",
"rcshowhideliu": "Qeydiyyatlı istifadəçiləri $1",
+ "rcshowhideliu-hide": "Gizlət",
"rcshowhideanons": "Anonim istifadəçiləri $1",
+ "rcshowhideanons-show": "Göstər",
+ "rcshowhideanons-hide": "Gizlət",
"rcshowhidepatr": "Yoxlanılmış redaktələri $1",
"rcshowhidemine": "Mənim redaktələrimi $1",
+ "rcshowhidemine-show": "Göstər",
+ "rcshowhidemine-hide": "Gizlət",
"rclinks": "Son $2 gün ərzindəki son $1 dəyişikliyi göstər <br />$3",
"diff": "fərq",
"hist": "tarixçə",
@@ -1102,7 +1122,7 @@
"backend-fail-delete": "\"$1\" faylı sililmədi.",
"backend-fail-copy": "\"$1\" faylı \"$2\" faylına kopyalanmır.",
"backend-fail-read": "\"$1\" faylı oxunmadı.",
- "backend-fail-create": "\"$1\" faylı yaranmadı.",
+ "backend-fail-create": "\"$1\" faylı yazıla bilmədi.",
"uploadstash": "Gizli yükləmə",
"uploadstash-clear": "Müvəqqəti faylları təmizlə",
"uploadstash-refresh": "Fayl siyahısını yenilə",
@@ -1120,8 +1140,8 @@
"license": "Lisenziya",
"license-header": "Lisenziya",
"nolicense": "Heç biri seçilməmişdir",
- "upload_source_url": " (keçərli, hər kəsin daxil ola biləcəyi bir URL)",
- "upload_source_file": " (kompyuterinizdəki bir fayl)",
+ "upload_source_url": "(siz düzgün, hər kəsin daxil ola biləcəyi URL seçdiniz)",
+ "upload_source_file": "(siz kompüterinizdəki faylı seçdiniz)",
"listfiles_search_for": "Media adı üçün axtar:",
"imgfile": "fayl",
"listfiles": "Fayl siyahısı",
@@ -1159,6 +1179,7 @@
"shared-repo-from": "$1-dən",
"shared-repo": "ümumi fayl anbarı",
"shared-repo-name-wikimediacommons": "Wikimedia Commons",
+ "upload-disallowed-here": "Siz bu faylı yenidən yükləyə bilməzsiniz.",
"filerevert": "$1 faylını əvvəlki vəziyyətinə qaytar",
"filerevert-legend": "Faylı əvvəlki vəziyyətinə qaytar",
"filerevert-comment": "Səbəb:",
@@ -1191,7 +1212,6 @@
"statistics": "Statistika",
"statistics-header-pages": "Səhifə statistikası",
"statistics-header-edits": "Redaktə statistikası",
- "statistics-header-views": "Statistikaya bax",
"statistics-header-users": "İstifadəçi statistika",
"statistics-header-hooks": "Digər statistikalar",
"statistics-articles": "Məqalələr",
@@ -1200,16 +1220,12 @@
"statistics-files": "Yüklənmiş fayllar",
"statistics-edits": "{{SITENAME}} yaranandan bəri edilən səhifə dəyişiklikləri",
"statistics-edits-average": "Hər səhifədəki orta hesabla dəyişiklik",
- "statistics-views-total": "Cəmi göstərmə",
- "statistics-views-total-desc": "Mövcud olmayan və xüsusi səhifələrin göstərilmələri daxil edilməmişdir.",
- "statistics-views-peredit": "Redaktə başına göstərmə",
"statistics-users": "Qeydiyyatdan keçmiş [[Special:ListUsers|istifadəçilər]]",
"statistics-users-active": "Aktiv istifadəçilər",
"statistics-users-active-desc": "Son {{PLURAL:$1|gün|$1 gündə}} iş görən istifadəçilər",
- "statistics-mostpopular": "Ən çox baxılan səhifələr",
"doubleredirects": "İkiqat istiqamətləndirmələr",
- "double-redirect-fixed-move": "[[$1]] dəyişdirilib.\nHazırda [[$2]]-yə istiqamətlənib.",
- "double-redirect-fixed-maintenance": "[[$1]]-dən [[$2]]-yə ikiqat istiqamətlənmə düzəldilir.",
+ "double-redirect-fixed-move": "[[$1]] səhifəsinin yeri dəyişdirilib.\nO avtomatik yenilənib və [[$2]] səhifəsinə yönləndirilib.",
+ "double-redirect-fixed-maintenance": "[[$1]] səhifəsindən [[$2]] səhifəsinə ikiqat yönləndirmə avtomatik düzəldilir.",
"double-redirect-fixer": "Yönləndirmə səhvdir",
"brokenredirects": "Xətalı istiqamətləndirmə",
"brokenredirectstext": "Aşağıdakı istiqamətləndirmələr mövcud olmayan səhifələrə keçid verir:",
@@ -1235,7 +1251,6 @@
"uncategorizedtemplates": "Kateqoriyasız şablonlar",
"unusedcategories": "İstifadə edilməmiş kateqoriyalar",
"unusedimages": "İstifadə edilməmiş fayllar",
- "popularpages": "Məşhur səhifələr",
"wantedcategories": "Təlabat olunan kateqoriyalar",
"wantedpages": "Tələb olunan səhifələr",
"wantedpages-badtitle": "Müraciət zamantı yanlış başlıq: $1",
@@ -1243,7 +1258,7 @@
"wantedtemplates": "Tələb olunan şablonlar",
"mostlinked": "Ən çox keçidlənən səhifələr",
"mostlinkedcategories": "Ən çox məqaləsi olan kateqoriyalar",
- "mostlinkedtemplates": "Ən çox istifadə olunan şablonlar",
+ "mostlinkedtemplates": "Ən çox istifadə olunan səhifələr",
"mostcategories": "Kateqoriyası ən çox olan məqalələr",
"mostimages": "Ən çox istifadə edilmiş şəkillər",
"mostrevisions": "Ən çox nəzərdən keçirilmiş (versiyalı) məqalələr",
@@ -1275,11 +1290,11 @@
"booksources": "Kitab mənbələri",
"booksources-search-legend": "Kitab mənbələri axtar",
"booksources-isbn": "ISBN:",
- "booksources-go": "Seç",
+ "booksources-search": "Axtar",
"booksources-text": "Aşağıda yeni və işlənmiş kitablar satan xarici keçidlərdə siz axtardığınız kitab haqqında əlavə məlumat ala bilərsiz:",
"specialloguserlabel": "İcraçı:",
"speciallogtitlelabel": "Məqsəd (başlıq və ya istifadəçi):",
- "log": "Loglar",
+ "log": "Qeydlər",
"all-logs-page": "Bütün ictimai qeydlər",
"alllogstext": "{{SITENAME}} üçün bütün mövcud qeydlərin birgə göstərişi.\nQeyd növü, istifadəçi adı və ya təsir edilmiş səhifəni seçməklə daha spesifik ola bilərsiniz.",
"logempty": "Jurnalda uyğun qeyd tapılmadı.",
@@ -1308,15 +1323,15 @@
"linksearch-line": "$2-dən $1 keçid verilib",
"listusers-submit": "Göstər",
"listusers-noresult": "İstifadəçi tapılmadı.",
- "listusers-blocked": "(bloklandı)",
+ "listusers-blocked": "(bloklanıb)",
"activeusers": "Aktiv istifadəçilərin siyahısı",
- "activeusers-count": "$1 {{PLURAL:$1|edit|redaktə}} son {{PLURAL:$3|day|$3 gün}}",
+ "activeusers-count": "Son {{PLURAL:$3|gündə|$3 gündə}} $1 {{PLURAL:$1|redaktə|redaktə}}",
"activeusers-hidebots": "Botları gizlə",
"activeusers-hidesysops": "İdarəçiləri gizlə",
"activeusers-noresult": "İstifadəçi tapılmadı.",
"listgrouprights": "İstifadəçi qruplarının hüquqları",
"listgrouprights-summary": "Bu vikidə olan istifadəçi siyahıları və onların hüquqları aşağıda göstərilmişdir.\nFərdi hüquqlar haqqında əlavə məlumatı [[{{MediaWiki:Listgrouprights-helppage}}]] səhifəsində tapa bilərsiniz",
- "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Verilmiş hüquqlar</span>\n* <span class=\"listgrouprights-revoked\">Ləğv edilmiş hüquqlar</span>",
+ "listgrouprights-key": "İzah:\n* <span class=\"listgrouprights-granted\">Verilmiş hüquqlar</span>\n* <span class=\"listgrouprights-revoked\">Geri alınmış hüquqlar</span>",
"listgrouprights-group": "Qrup",
"listgrouprights-rights": "Hüquqlar",
"listgrouprights-helppage": "Help:Qrup hüquqları",
@@ -1358,7 +1373,7 @@
"mywatchlist": "İzləmə siyahısı",
"watchlistfor2": "$1 $2 üçün",
"nowatchlist": "İzləmə siyahınız böşdur.",
- "watchlistanontext": "Lütfən, izlədiyiniz səhifələri görmək və ya redaktə etmək üçün $1.",
+ "watchlistanontext": "Lütfən, izlədiyiniz səhifələri görmək və ya redaktə etmək üçün sistemə daxil olun.",
"watchnologin": "Daxil olmamısınız",
"addwatch": "İzləmə siyahısına əlavə et",
"addedwatchtext": "\"[[:$1]]\" səhifəsi [[Special:Watchlist|izlədiyiniz səhifələr]] siyahısına əlavə edildi. Bu səhifədə və əlaqəli müzakirə səhifəsindəki bütün dəyişikliklər orada göstəriləcək və səhifə asanlıqla seçiləbilmək üçün [[Special:RecentChanges|son dəyişikliklərdə]] qalın şriftlərlə görünəcəkdir. <p> Səhifəni izləmə siyahınızdan çıxarmaq üçün yan lövhədəki \"izləmə\" düyməsinə vurun.",
@@ -1374,7 +1389,7 @@
"wlheader-enotif": " E-məktubla bildiriş aktivdir.",
"wlheader-showupdated": "Son ziyarətinizdən sonra edilən dəyişikliklər '''qalın şriftlərlə''' göstərilmişdir.",
"wlnote": "Aşağıdakı {{PLURAL:$1|'''$1''' dəyişiklik|'''$1''' dəyişiklik}} son {{PLURAL:$2|saatda|'''$2''' saatda}} edilmişdir.",
- "wlshowlast": "Bunları göstər: son $1 saatı $2 günü $3",
+ "wlshowlast": "Bunları göstər: son $1 saatı $2 günü",
"watchlist-options": "İzləmə siyahısının nizamlamaları",
"watching": "İzlənilir...",
"unwatching": "İzlənilmir...",
@@ -1408,7 +1423,6 @@
"deletereason-dropdown": "*Əsas silmə səbəbi\n** Müəllif istəyi\n** Müəllif hüququ pozuntusu\n** Vandalizm",
"delete-edit-reasonlist": "Silmə səbəblərinin redaktəsi",
"rollback": "əvvəlki halına qaytar",
- "rollback_short": "əvvəlki halına qaytar",
"rollbacklink": "əvvəlki halına qaytar",
"rollbacklinkcount": "$1 {{PLURAL:$1|dəyişikliyi|dəyişikliyi}} geri qaytar",
"rollbackfailed": "Geri qaytarma uğursuzdur",
@@ -1437,7 +1451,7 @@
"protect-default": "Bütün istifadəçilərə icazə ver",
"protect-fallback": "\"$1\" icazəsi tələb olunur",
"protect-level-autoconfirmed": "Yeni və anonim istifadəçiləri blokla",
- "protect-level-sysop": "Yalnız idarəçilər",
+ "protect-level-sysop": "Yalnız idarəçilərə icazə verilir",
"protect-summary-cascade": "kaskad mühafizə",
"protect-expiring": "$1 (UTC)- tarixində vaxtı bitir",
"protect-expiring-local": "$1-də bitir",
@@ -1478,7 +1492,7 @@
"undeletedrevisions": "Cəmi {{PLURAL:$1|1 redaktə|$1 redaktə}} geri qaytarıldı.",
"undeletedrevisions-files": "{{PLURAL:$1|1 versiya|$1 versiya}} və {{PLURAL:$2|1 fayl|$2 fayl}} bərpa edildi",
"undeletedfiles": "{{PLURAL:$1|1 fayl|$1 fayl}} bərpa olundu",
- "cannotundelete": "Bərpaetmə xətası. Başqa istifadəçi sizdən əvvəl səhifəni bərpa edib.",
+ "cannotundelete": "Bərpaetmə xətası:\n$1",
"undeletedpage": "'''$1 bərpa edildi'''\n\nMəqalələrin bərpa edilməsi və silinməsi haqqında son dəyişiklikləri nəzərdən keçirmək üçün [[Special:Log/delete|silmə qeydlərinə]] baxın.",
"undelete-header": "Son silinmiş səhifələrə baxmaq üçün [[Special:Log/delete|silmə qeydlərinə]] bax.",
"undelete-search-title": "Silinmiş səhifələri axtar",
@@ -1497,6 +1511,7 @@
"undelete-show-file-submit": "Bəli",
"namespace": "Adlar fəzası:",
"invert": "Seçilən xaricindəkiləri",
+ "tooltip-invert": "Seçilmiş ad fəzasında (və ya göstərilmiş uyğunluqlarda olan adlar) olan səhifələrdəki dəyişiklikləri gizlətmək üçün bura işarə edin",
"namespace_association": "Əlaqəli ad sahəsi",
"blanknamespace": "(Ana)",
"contributions": "{{GENDER:$1|İstifadəçinin}} fəaliyyəti",
@@ -1510,11 +1525,11 @@
"sp-contributions-newbies": "Ancaq yeni istifadəçilərin fəaliyyətlərini göstər",
"sp-contributions-newbies-sub": "Yeni istifadəçilər üçün",
"sp-contributions-newbies-title": "Yeni hesablar üçün istifadəçi fəaliyyətləri",
- "sp-contributions-blocklog": "Bloklama qeydləri",
+ "sp-contributions-blocklog": "bloklama qeydləri",
"sp-contributions-deleted": "silinmiş istifadəçi fəaliyyətləri",
"sp-contributions-uploads": "yüklənənlər",
- "sp-contributions-logs": "Loqlar",
- "sp-contributions-talk": "Müzakirə",
+ "sp-contributions-logs": "qeydlər",
+ "sp-contributions-talk": "müzakirə",
"sp-contributions-userrights": "istifadəçi hüquqları idarəsi",
"sp-contributions-blocked-notice": "Bu istifadəçi hal-hazırda bloklanmışdır.\nBloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:",
"sp-contributions-blocked-notice-anon": "Bu IP-ünvan hal-hazırda bloklanmışdır.\nBloklama qeydlərinin sonuncusu aşağıda göstərilmişdir:",
@@ -1543,7 +1558,7 @@
"autoblockid": "Avtoblok #$1",
"block": "İstifadəçini blokla",
"unblock": "İstifadəçinin blokunu götür",
- "blockip": "İstifadəçini blokla",
+ "blockip": "{{GENDER:$1|İstifadəçini}} blokla",
"blockip-legend": "İstifadəçinin bloklanması",
"ipaddressorusername": "IP-ünvanı və ya istifadəçi adı",
"ipbexpiry": "Bitmə müddəti:",
@@ -1555,19 +1570,19 @@
"ipboptions": "2 saat:2 hours,1 gün:1 day,3 gün:3 days,1 həftə:1 week,2 həftə:2 weeks,1 ay:1 month,3 ay:3 months,6 ay:6 months,1 il:1 year,müddətsiz:infinite",
"ipbhidename": "İstifadəçi adını redaktələrdə və siyahılarda gizlət",
"ipbwatchuser": "Bu istifadəçinin müzakirə və istifadəçi səhifəsini izlə",
- "ipb-disableusertalk": "Bu istifadəçi bloklu olarkən öz müzakirə səhifəsində redaktə etməsini əngəllə",
+ "ipb-disableusertalk": "Bu istifadəçi bloklu olarkən öz müzakirə səhifəsində redaktə etməsinə qadağa qoy",
"ipb-change-block": "Bu səbəblərlə istifadəçini yenidən blokla",
"ipb-confirm": "Bloku təsdiqlə",
"badipaddress": "Səhv IP",
- "blockipsuccesssub": "bloklandı",
- "blockipsuccesstext": "[[Special:Contributions/$1| $1]]bloklanıb..<br />\nBax [[Special:BlockList|IP blok siyahısı]] bloklanmış IP-lər.",
+ "blockipsuccesssub": "Bloklandı",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bloklanıb.<br />\nBlokları yoxlamaq üçün [[Special:BlockList|bloklama siyahısına]] baxın.",
"ipb-blockingself": "Özünü bloklayacaqsınız.! Bunu etmək istədiyinizdən əminsinizmi?",
"ipb-confirmhideuser": "İstifadəçini bloklamaq və redaktə siyahısından onun adını silmək üzərəsiniz. Bunu etmək istədiyinizdən əminsinizmi?",
"ipb-edit-dropdown": "Bloklama səbəblərini redaktə et",
"ipb-unblock-addr": "$1 üzərindəki blok götürüldü",
"ipb-unblock": "Bloku götür",
"ipb-blocklist": "Mövcud blokları göstər",
- "ipb-blocklist-contribs": "$1 istifadəçi fəaliyyətləri",
+ "ipb-blocklist-contribs": "{{GENDER:$1|$1}} istifadəçi hesabının fəaliyyətləri",
"unblockip": "İstifadəçinin blokunu götür",
"unblockiptext": "Əvvəlcədən bloklanmış bir IP ünvanına və ya istifadəçi adına yazma geri vermek için aşağıdakı formadan istifadə edin.",
"ipusubmit": "Bu bloku götür",
@@ -1610,7 +1625,7 @@
"blocklog-showsuppresslog": "Bu istifadəçi daha əvvəl bloklanmışdır. Bloklama gündəliyi referans üçün aşağıda göstərilib:",
"blocklogentry": "tərəfindən [[$1]] bloklandı, blok müddəti: $2 $3",
"reblock-logentry": "[[$1]] üçün bloklama parametrlərini, başa çatma tarixi $2 $3 olmaqla, dəyişdirdi",
- "blocklogtext": "İstifadəçilərin bloklanması və blokun götürülməsi siyahısı.\nAvtomatik bloklanmış IP-ünvanlar burada göstərilmir.\nHal-hazırkı [[Special:BlockList|qadağaların və bloklamaların siyahısı]]na bax.",
+ "blocklogtext": "İstifadəçilərin bloklanması və blokun götürülməsi siyahısı.\nAvtomatik bloklanmış IP-ünvanlar burada göstərilmir.\nHazırkı [[Special:BlockList|qadağaların və bloklamaların siyahısına bax]].",
"unblocklogentry": "$1 üzərindəki blok götürüldü",
"block-log-flags-anononly": "yalnız qeydiyyatsız istifadəçilər",
"block-log-flags-nocreate": "yeni hesab yaratma bloklanıb",
@@ -1622,7 +1637,7 @@
"range_block_disabled": "İdarəçilərə diapazonu bloklamaq qadağandır.",
"ipb_expiry_invalid": "Bitmə vaxtı səhvdir",
"ipb_expiry_temp": "Gizli istifadəçi adı bloklamaları müddətsiz olmalıdır.",
- "ipb_hide_invalid": "İstifadəçi hesabınln gizlədilməsi qeyri-mümkündür; həddən çox redaktəsi var.",
+ "ipb_hide_invalid": "Bu istifadəçi hesabının gizlədilməsi mümkün deyil, onun töhfəsi {{PLURAL:$1|bir redaktədən|$1 redaktədən}} çoxdur.",
"ipb_already_blocked": "\"$1\" artıq bloklanıb",
"ipb-needreblock": "$1 artıq bloklanıb.\nBloklama şərtlərini dəyişmək istəyirsiniz?",
"ipb-otherblocks-header": "Başqa {{PLURAL:$1|bloklama|bloklamalar}}",
@@ -1644,7 +1659,7 @@
"lockedbyandtime": "(by {{GENDER:$1|$1}} on $2 at $3)",
"move-page": "Dəyişdir $1",
"move-page-legend": "Səhifənin adını dəyiş",
- "movepagetext": "Aşağıdakı formadan istifədə etmə səhifənin adını, bütün tarixçəsini də köçürməklə yeni başlığa dəyişəcək.\nƏvvəlki başlıq yeni başlığa istiqamətləndirmə səhifəsinə çevriləcək.\nKöhnə səhifəyə keçidləri avtomatik olaraq dəyişə bilərsiniz.\nBu seçimi etmədiyiniz halda, [[Special:DoubleRedirects|təkrarlanan]] və ya [[Special:BrokenRedirects|qırıq istiqamətləndirmələri]] yoxlamağı yaddan çıxarmayın.\nKeçidlərin lazımi yerə istiqamətləndirilməsini təmin etmək sizin məsuliyyətinizdədir.\n\nNəzərə alın ki, hədəf başlığı altında bir səhifə mövcuddursa yerdəyişmə '''baş tutmayacaq'''. Buna həmin səhifənin boş olması və ya istiqamətləndirmə səhifəsi olması və keçmişdə redaktə edilməməsi halları istisnadır. Bu o deməkdir ki, səhvən adını dəyişdiyiniz səhifələri geri qaytara bilər, bununla yanaşı artıq mövcud olan səhifənin üzərinə başqa səhifə yaza bilməzsiniz.\n\n'''XƏBƏRDARLIQ!'''\nBu yerdəyişmə populiyar səhifə üçün əsaslı və gözlənilməz ola bilər, ona görə də bu dəyişikliyi yerinə yetirməzdən əvvəl, bunun mümkün nəticələrini başa düşdüyünüzdən əmin olun.",
+ "movepagetext": "Aşağıdakı formadan istifədə etməklə səhifənin adını və bütün tarixçəsini yeni başlığa dəyişəcəksiniz.\nƏvvəlki başlıq yeni başlığa yönləndirmə səhifəsinə çevriləcək.\nKöhnə səhifəyə keçidləri avtomatik olaraq dəyişə bilərsiniz.\nBunu etməsəniz, zəhmət olmasa, [[Special:DoubleRedirects|təkrarlanan]] və ya [[Special:BrokenRedirects|qırılmış istiqamətləndirmələri]] yoxlamağı unutmayın.\nKeçidlərin lazımi yerə istiqamətləndirilməsini təmin etmək sizin məsuliyyətinizdədir.\n\nNəzərə alın ki, hədəflədiyiniz adda bir səhifə artıq mövcuddursa, addəyişmə <strong>baş tutmayacaq</strong>. Lakin həmin səhifənin boş olması, istiqamətləndirmə səhifəsi olması və redaktə tarixçəsinin olmaması halları istisnadır. Bu o deməkdir ki, səhvən adını dəyişdiyiniz səhifələri geri qaytara bilər, amma artıq mövcud olan səhifənin üzərinə başqa səhifə yaza bilməzsiniz.\n\n<strong>XƏBƏRDARLIQ!</strong>\nPopulyar səhifələrin adlarının dəyişdirilməsi əsaslı və gözlənilməz nəticələrə səbəb ola bilər. Ona görə də bu dəyişikliyi yerinə yetirməzdən əvvəl, bunun mümkün nəticələrini başa düşdüyünüzdən əmin olun.",
"movepagetalktext": "Uyğun müzakirə səhifəsi avtomatik hərəkət edəcək '''əgər:'''\n* boş olmayan müzakirə səhifəsi yeni adla artıq mövcuddursa, və ya\n* Siz bayrağı aşağıdan götürsəniz.\n\nHəmin hallarda , ehtiyac yaranarsa siz səhifələri əllə birləşdirmək məcburiyyətində qalacaqsınız",
"movearticle": "Səhifənin adını dəyişdir",
"movenotallowed": "Siz səhifələrin adını dəyişə bilməzsiniz.",
@@ -1660,11 +1675,12 @@
"articleexists": "Bu adda səhifə artıq mövcuddur və ya sizin seçdiyiniz ad uyğun deyil.\nZəhmət olmasa başqa ad seçin.",
"movetalk": "Bu səhifənin müzakirə səhifəsinin də adını dəyişdir.",
"move-subpages": "Yarımsəhifələri köçür ($1-ə qədər)",
- "move-talk-subpages": "Müzakirə səhifələrinin alt səhifələrini köçür ($1-ə qədər)",
+ "move-talk-subpages": "Müzakirə səhifəsinin alt səhifələrinin adını dəyiş ($1-ə qədər)",
"movepage-page-moved": "$1 səhifəsi $2 səhifəsinə köçürülüb.",
"movepage-page-unmoved": "$1 səhifəsi $2 səhifəsinə köçürülə bilinmir.",
"movelogpage": "Yerdəyişmə qeydləri",
- "movesubpage": "{{PLURAL:$1|alt səhifə}}",
+ "movesubpage": "{{PLURAL:$1|Alt səhifə|Alt səhifələr}}",
+ "movesubpagetext": "Bu səhifənin aşağıda göstərilən $1 {{PLURAL:$1|alt səhifəsi|alt səhifəsi}} var.",
"movenosubpage": "Bu səhifənin altsəhifəsi yoxdur.",
"movereason": "Səbəb:",
"revertmove": "Əvvəlki vəziyyətinə",
@@ -1678,6 +1694,7 @@
"immobile-target-namespace-iw": "İntervikilər səhifə adının dəyişməsi üçün əsas ola bilməz.",
"immobile-source-page": "Bu səhifənin adı dəyişdirilə bilməz.",
"immobile-target-page": "Bu hədəf başlığına daşınmır.",
+ "bad-target-model": "İstənilən hədəf fərqli bir məzmun modeli istifadə edir. $1 modelindən $2 modelinə çevrilmir.",
"imageinvalidfilename": "Seçilmiş fayl adı keçərsizdir.",
"protectedpagemovewarning": "'''Xəbərdarlıq:''' Bu səhifə mühafizə edildiyi üçün onun adını yalnız idarəçilər dəyişə bilərlər.",
"export": "Səhifələri ixrac et",
@@ -1725,13 +1742,12 @@
"import-upload": "XML-veriləni yüklə",
"import-token-mismatch": "Seans məlumatlarının itirilməsi. Lütfən, yenidən cəhd edin.",
"import-invalid-interwiki": "Göstərilən vikidən köçürmək mümkün deyil",
- "import-error-edit": "\"$1\" səhifəsi idxal edilə bilinmir, çünki onu dəyişmək səlahiyyətiniz yoxdur.",
- "import-error-create": "\"$1\" səhifəsi açılmır, çünki onu yaratmaq səlahiyyətiniz yoxdur.",
+ "import-error-edit": "\"$1\" səhifəsi idxal edilmədi, çünki sizin onu dəyişmək səlahiyyətiniz yoxdur.",
+ "import-error-create": "\"$1\" səhifəsi idxal edilmədi, çünki sizin onu yaratmaq səlahiyyətiniz yoxdur.",
"importlogpage": "Çıxarılma gündəliyi",
"importlogpagetext": "Səhifələrin idarəçilər tərəfindən digər vikilərdən dəyişiklik tarixçəsi ilə birlikdə köçürülməsi",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision|dəyişiklik}}",
- "import-logentry-interwiki": "vikilərarası idxal $1",
- "import-logentry-interwiki-detail": "$2-dən $1 {{PLURAL:$1|dəyişiklik|dəyişikliklər}}",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|dəyişiklik|dəyişiklik}} idxal edildi.",
+ "import-logentry-interwiki-detail": "$2 vikidən $1 {{PLURAL:$1|dəyişiklik|dəyişiklik}} idxal edildi",
"tooltip-pt-userpage": "İstifadəçi səhifəniz",
"tooltip-pt-anonuserpage": "The user page for the ip you",
"tooltip-pt-mytalk": "Danışıq səhifəm",
@@ -1818,23 +1834,42 @@
"creditspage": "Səhifə kreditleri",
"spamprotectiontitle": "Spam qoruma süzgəci",
"spambot_username": "MediaViki spam təmizləməsi",
+ "simpleantispam-label": "Anti-spam yoxlanılması.\nBuranı <strong>DOLDURMAYIN</strong>!",
"pageinfo-title": "\"$1\" üçün məlumat",
"pageinfo-header-basic": "Əsas məlumatlar",
- "pageinfo-header-edits": "Redaktələr",
+ "pageinfo-header-edits": "Redaktə tarixçəsi",
"pageinfo-header-restrictions": "Səhifə mühafizəsi",
"pageinfo-header-properties": "Səhifə xüsusiyyətləri",
- "pageinfo-views": "Göstərmə səhifəsi",
- "pageinfo-watchers": "Baxış sayı",
+ "pageinfo-display-title": "Göstərilən başlıq",
+ "pageinfo-default-sort": "Susmaya görə çeşidləmə açarı",
+ "pageinfo-length": "Səhifənin ölçüsü (baytla)",
+ "pageinfo-article-id": "Səhifə ID-si",
+ "pageinfo-language": "Səhifənin dili",
+ "pageinfo-content-model": "Səhifə məzmunu modeli",
+ "pageinfo-robot-policy": "Robotlar tərəfindən indeksləşmə",
+ "pageinfo-robot-index": "İcazə verilir",
+ "pageinfo-robot-noindex": "İcazə verilmədi",
+ "pageinfo-watchers": "Səhifəyə baxışların sayı",
+ "pageinfo-few-watchers": "$1 {{PLURAL:$1|izləyicidən|izləyicilərdən}} az",
"pageinfo-firstuser": "Səhifəni yaradan",
"pageinfo-firsttime": "Səhifənin yaranma tarixi",
"pageinfo-lastuser": "Sonuncu redaktor",
"pageinfo-lasttime": "Sonuncu redaktənin tarixi",
- "pageinfo-edits": "Redaktələrin sayı",
- "pageinfo-authors": "Fərqli müəlliflərin sayı",
+ "pageinfo-edits": "Redaktələrin ümumi sayı",
+ "pageinfo-authors": "Fərqli müəlliflərin ümumi sayı",
+ "pageinfo-recent-edits": "Sonuncu redaktə sayı ($1 ərzində)",
+ "pageinfo-recent-authors": "Sonuncu əhəmiyyətli dəyişiklik etmiş müəlliflər",
+ "pageinfo-magic-words": "Sehrli {{PLURAL:$1|1=söz|sözlər}} ($1)",
+ "pageinfo-templates": "{{PLURAL:$1|Şablon|Şablonlar}} ($1)",
"pageinfo-toolboxlink": "Əsas məlumatlar",
"pageinfo-redirectsto": "İstiqamətləndirmə",
"pageinfo-redirectsto-info": "məlumat",
+ "pageinfo-contentpage": "Məzmunlu səhifə kimi sayılır",
"pageinfo-contentpage-yes": "Bəli",
+ "pageinfo-protect-cascading": "Kaskad mühafizə burada qoşulub",
+ "pageinfo-category-pages": "Səhifələrin sayı",
+ "pageinfo-category-subcats": "Altkateqoriyaların sayı",
+ "pageinfo-category-files": "Faylların sayı",
"markaspatrolleddiff": "Yoxlanıldı",
"markaspatrolledtext": "Səhifəni patrullanmış kimi işarələ",
"markedaspatrolled": "Yoxlanıldı",
@@ -1932,6 +1967,8 @@
"exif-pixelydimension": "Şəkilin eni",
"exif-pixelxdimension": "Şəkilin hündürlüyü",
"exif-usercomment": "İstifadəçi şərhi",
+ "exif-datetimeoriginal": "Orijinal tarix və vaxt",
+ "exif-datetimedigitized": "Tarix və vaxt rəqəmləşdirilir",
"exif-exposuretime-format": "$1 saniyə ($2)",
"exif-fnumber": "F nömrəsi",
"exif-exposureprogram": "Ekspozisiya proqramı",
@@ -2035,7 +2072,7 @@
"exif-personinimage": "Təsvir edilmiş şəxs",
"exif-compression-1": "Sıxılmış",
"exif-copyrighted-true": "Müəlliflik hüququ ilə qorunur",
- "exif-copyrighted-false": "İctimai istifadə",
+ "exif-copyrighted-false": "Müəlliflik hüququ göstərilməyib",
"exif-unknowndate": "Naməlum tarix",
"exif-orientation-1": "Normal",
"exif-orientation-2": "Üfüqi çevrilib",
@@ -2179,7 +2216,6 @@
"exif-urgency-low": "Aşağı ($1)",
"exif-urgency-high": "Yüksək ($1)",
"exif-urgency-other": "İstifadəçi tərəfindən müəyyən olunmuş birincilik ($1)",
- "watchlistall2": "hamısını",
"namespacesall": "hamısı",
"monthsall": "hamısı",
"confirmemail": "E-məktubunu təsdiq et",
@@ -2229,14 +2265,15 @@
"watchlistedit-raw-done": "İzləmə səhifələriniz qeyd olundu.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 title was|$1 başlıq}} əlavə edildi:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 title was|$1 başlıq}} çıxarıldı:",
+ "watchlisttools-clear": "İzləmə siyahısını təmizlə",
"watchlisttools-view": "Siyahıdakı səhifələrdə edilən dəyişikliklər",
"watchlisttools-edit": "İzlədiyim səhifələri göstər və redaktə et",
"watchlisttools-raw": "Adi mətn kimi redaktə et",
- "unknown_extension_tag": "\"$1\" Naməlum ayırma teqi",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|müzakirə]])",
"duplicate-defaultsort": "<strong>Diqqət:</strong> Susmaya görə \"$2\" çeşidləmə açarı susmaya görə əvvəlki \"$1\" çeşidləmə açarını inkar edir.",
"version": "Versiya",
"version-extensions": "NIzamlanmış genişlənmələr",
- "version-skins": "Üzlük",
+ "version-skins": "Yüklənmiş üzlüklər",
"version-specialpages": "Xüsusi səhifələr",
"version-parserhooks": "Parser hooks",
"version-variables": "Dəyişkənlər",
@@ -2245,8 +2282,8 @@
"version-hooks": "Çəngəllər",
"version-hook-name": "Çəngəlin adı",
"version-hook-subscribedby": "Abunə olan",
- "version-version": "(Versiya $1)",
- "version-license": "Lisenziya",
+ "version-version": "($1)",
+ "version-license": "MediaViki lisenziyası",
"version-ext-license": "Lisenziya",
"version-ext-colheader-version": "Versiya",
"version-ext-colheader-license": "Lisenziya",
@@ -2266,14 +2303,14 @@
"specialpages": "Xüsusi səhifələr",
"specialpages-group-maintenance": "Cari məruzələr",
"specialpages-group-other": "Digər xüsusi səhifələr",
- "specialpages-group-login": "Daxil ol/ hesab yarat",
+ "specialpages-group-login": "Daxil ol / hesab yarat",
"specialpages-group-changes": "Son dəyişikliklər və qeydlər",
"specialpages-group-media": "Media məruzələri və yükləmələr",
"specialpages-group-users": "İstifadəçilər və hüquqlar",
"specialpages-group-highuse": "Ən çox istifadə edilən səhifələr",
"specialpages-group-pages": "Səhifələrin siyahıları",
"specialpages-group-pagetools": "Səhifə alətləri",
- "specialpages-group-wiki": "Viki məlumatları və alətləri",
+ "specialpages-group-wiki": "Məlumatlar və alətlər",
"specialpages-group-redirects": "Xüsusi istiqamətləndirmə səhifələri",
"specialpages-group-spam": "Spam alətləri",
"blankpage": "Boş səhifə",
@@ -2298,7 +2335,7 @@
"compare-rev2": "Dəyişiklik 2",
"compare-submit": "Qarşılaşdır",
"dberr-problems": "Üzr istəyirik! Bu saytda texniki problemlər var.",
- "dberr-info": "($1: Məlumat bazası ilə əlaqə yoxdur)",
+ "dberr-info": "(Məlumat bazası ilə əlaqə yoxdur: $1)",
"htmlform-invalid-input": "Girişinizin bir qismilə əlaqədəar problemlər var",
"htmlform-select-badoption": "İşarə etdiyiniz xüsus keçərli deyil.",
"htmlform-int-invalid": "Göstərdiyiniz ifadə tam ədəd deyil.",
@@ -2311,7 +2348,8 @@
"htmlform-selectorother-other": "Digər",
"sqlite-has-fts": "$1 tam mətn axtarma ilə",
"sqlite-no-fts": "$1 tam mətn axtarma olmadan",
- "logentry-suppress-delete": "$1 suppressed page $3",
+ "logentry-delete-delete": "$1 $3 səhifəsini {{GENDER:$2|sildi}}",
+ "logentry-suppress-delete": "$1 $3 səhifəsini {{GENDER:$2|gizlətdi}}",
"revdelete-content-hid": "gizli mətn",
"revdelete-summary-hid": "gizli tarixçə",
"revdelete-uname-hid": " gizli istifadəçi adı",
@@ -2322,17 +2360,19 @@
"revdelete-unrestricted": "idarəçilər üçün götürülmüş məhdudiyyətlər",
"logentry-move-move": "$1 $3 səhifəsinin adını $4 olaraq {{GENDER:$1|dəyişdi|dəyişdi}}.",
"logentry-move-move_redir": "$1 $3 səhifəsinin adını yönləndirmənin əksinə dəyişərək, $4 {{GENDER:$2|adlandırdı}}",
- "logentry-newusers-newusers": "$1istifadəçi hesabını yaratdı",
- "logentry-newusers-create": "$1 istifadəçi hesabı yaratdı",
- "logentry-newusers-create2": "$1 $3 üçün istifadəçi hesabı yaratdı",
- "logentry-newusers-autocreate": "$1 hesabı avtomatik yaradıldı",
+ "logentry-newusers-newusers": "$1 istifadəçi hesabı yaradıldı",
+ "logentry-newusers-create": "$1 istifadəçi hesabı yaradıldı",
+ "logentry-newusers-create2": "$3 istifadəçi hesabı $1 tərəfindən yaradıldı",
+ "logentry-newusers-autocreate": "$1 istifadəçi hesabı avtomatik yaradıldı",
+ "logentry-upload-upload": "$1 $3 faylını {{GENDER:$2|yüklədi}}.",
"rightsnone": "(yoxdur)",
- "feedback-subject": "Mövzu:",
- "feedback-message": "Mesaj:",
+ "revdelete-summary": "redaktə xülasəsi",
+ "feedback-bugnew": "Mən yoxladım. Yeni xəta barədə xəbər ver",
"feedback-cancel": "İmtina",
- "feedback-error2": "Xəta: Redaktə qeydə alınmadı",
"feedback-close": "Oldu",
- "feedback-bugnew": "Mən yoxladım. Yeni xəta barədə xəbər ver",
+ "feedback-error2": "Xəta: Redaktə qeydə alınmadı",
+ "feedback-message": "Mesaj:",
+ "feedback-subject": "Mövzu:",
"searchsuggest-search": "Axtar",
"api-error-filename-tooshort": "Fayl adı qısadır.",
"api-error-filetype-banned": "Bu tip fayllar qadağandır.",
@@ -2350,6 +2390,24 @@
"duration-decades": "$1 {{PLURAL:$1|onillik|onillik}}",
"duration-centuries": "$1 {{PLURAL:$1|əsr|əsr}}",
"duration-millennia": "$1 {{PLURAL:$1|minillik|minillik}}",
+ "limitreport-cputime": "CPU vaxt istifadəsi",
+ "limitreport-walltime": "Real vaxt istifadəsi",
"expand_templates_output": "Nəticə",
- "expand_templates_ok": "OK"
+ "expand_templates_ok": "OK",
+ "special-characters-group-latin": "Latın",
+ "special-characters-group-latinextended": "Latın genişləndirilmiş",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simvollar",
+ "special-characters-group-greek": "Yunan",
+ "special-characters-group-cyrillic": "Kiril",
+ "special-characters-group-arabic": "Ərəb",
+ "special-characters-group-persian": "Fars",
+ "special-characters-group-hebrew": "İvrit",
+ "special-characters-group-bangla": "Benqal",
+ "special-characters-group-telugu": "Teluqu",
+ "special-characters-group-sinhala": "Sinqal",
+ "special-characters-group-gujarati": "Qucarat",
+ "special-characters-group-thai": "Tay",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/azb.json b/languages/i18n/azb.json
index e72d9412..40a7b4cd 100644
--- a/languages/i18n/azb.json
+++ b/languages/i18n/azb.json
@@ -11,7 +11,10 @@
"Mousa",
"Shirayuki",
"Microchip08",
- "아라"
+ "아라",
+ "Koroğlu",
+ "Baloch Afghanistan",
+ "Macofe"
]
},
"tog-underline": "باغلانتیلارین آلتینی خطله:",
@@ -28,6 +31,7 @@
"tog-watchdefault": "دَییشدیردیگیم صحیفه‌‌لری و فايل‌لاری، گؤزله‌دیکلریمه آرتیر",
"tog-watchmoves": "داشیدیغیم صحیفه‌‌لری و فايل‌لاری گؤزله‌دیکلریمه آرتیر",
"tog-watchdeletion": "سیلدیگیم صحیفه‌‌لری و فايل‌لاری گؤزله‌دیکلریمه آرتیر",
+ "tog-watchrollback": "قایتاریلمیش صفحه لری ایزلدیکلریمه آرتیر",
"tog-minordefault": "وارساییلان اوْلاراق، بۆتون دَییشدیر‌مه‌لری کیچیک کیمی نیشانلا",
"tog-previewontop": "اؤن‌گؤستریشی، يازماق قۇتوسوندان قاباق گؤستر",
"tog-previewonfirst": "ایلک دَییشدیرمه‌ده اؤن‌گؤستریشی گؤستر",
@@ -145,7 +149,7 @@
"cancel": "وازگئچ",
"moredotdotdot": "داها...",
"morenotlisted": "بۇ لیست کامل دئییل.",
- "mypage": "صحیفه",
+ "mypage": "صفحه",
"mytalk": "دانیشیق",
"anontalk": "بو آی‌پی آدرسینه دانیشیق",
"navigation": "دوْلانماق",
@@ -153,8 +157,8 @@
"qbfind": "تاپ",
"qbbrowse": "گؤزدن گئچیرت",
"qbedit": "دَییشدیر",
- "qbpageoptions": "بۇ صحیفه‌‌",
- "qbmyoptions": "صحیفه‌‌لریم",
+ "qbpageoptions": "بۇ صفحه‌‌",
+ "qbmyoptions": "صفحه‌‌لریم",
"faq": "چوْخ سوْروشولان سوْال‌لار",
"faqpage": "Project:چوْخ سوْروشولان سوْال‌لار",
"actions": "چالیشمالار",
@@ -169,15 +173,18 @@
"searchbutton": "آختار",
"go": "گئت",
"searcharticle": "گئت",
- "history": "صحیفه‌‌نین گئچمیشی",
+ "history": "صفحه‌‌نین گئچمیشی",
"history_short": "گئچمیش",
"updatedmarker": "سوْن باخیشیمدان سوْنرا یئنی‌لنیب‌دیر",
"printableversion": "یازدیریرا بیلن نۆسخه",
"permalink": "قالان باغلانتی",
"print": "یازدیر",
"view": "باخ",
+ "view-foreign": "$1 گور",
"edit": "دَییشدیر",
+ "edit-local": "یئرلی آچیقلامالاری دَییشدیر",
"create": "یارات",
+ "create-local": "یئرلی آچیقلاما آرتیر",
"editthispage": "بۇ صحیفه‌‌نی دَییشدیر",
"create-this-page": "بۇ صحیفه‌‌نی يارات",
"delete": "سیل",
@@ -193,7 +200,7 @@
"newpage": "يئنی صحیفه‌‌",
"talkpage": "بۇ صحیفه‌نی دانیش",
"talkpagelinktext": "دانیشیق",
- "specialpage": "اؤزل صحیفه",
+ "specialpage": "اؤزل صفحه",
"personaltools": "شخصی آراجلار",
"articlepage": "ایچری‌لی صحیفه‌یه باخ",
"talk": "دانیشیق",
@@ -210,6 +217,7 @@
"otherlanguages": "آیری دیل‌لرده",
"redirectedfrom": "($1-دن يوْل‌لاندیریلمیش)",
"redirectpagesub": "یوْل‌لاندیرما صحیفه‌سی",
+ "redirectto": "مسیزپرین دَییشیب:",
"lastmodifiedat": "بۇ صحیفه‌‌ سوْن دفعه‌‌ $1، $2 چاغیندا دَییشیلمیشدیر.",
"viewcount": "بۇ صحیفه {{PLURAL:$1|بیر|$1}} دفعه گؤرولوبدور.",
"protectedpage": "قوْرونموش صحیفه",
@@ -220,6 +228,8 @@
"pool-timeout": "قیفیلا دؤزماغین واختی بیتیردی",
"pool-queuefull": "مخزن صفی دوْلودور",
"pool-errorunknown": "بیلینمه‌ین خطا",
+ "pool-servererror": "پول سنتر سئرویسی الده دئییل ( $1 ).",
+ "poolcounter-usage-error": "$1:ایشلتمک خطاسی",
"aboutsite": "{{SITENAME}} حاقیندا",
"aboutpage": "Project:حاقیندا",
"copyright": "ایچینده‌کیلر $1 لیسانسی احاطه‌سینده‌دیلر.",
@@ -229,8 +239,8 @@
"disclaimers": "رد ائتمک",
"disclaimerpage": "Project:عمومی رد ائتمک",
"edithelp": "ديَیشتیرمک یاردیمی",
- "mainpage": "آنا صحیفه",
- "mainpage-description": "آنا صحیفه",
+ "mainpage": "آنا صفحه",
+ "mainpage-description": "آنا صفحه",
"policy-url": "Project:قایدالار",
"portal": "توْپلوم پوْرتالی",
"portal-url": "Project:توْپلوم پوْرتالی",
@@ -260,6 +270,8 @@
"hidetoc": "گیزلت",
"collapsible-collapse": "ییغیشلات",
"collapsible-expand": "گئنیشلت",
+ "confirmable-yes": "هن",
+ "confirmable-no": "یوْخ",
"thisisdeleted": "$1-نا باخ یا اوْنو قایتار؟",
"viewdeleted": "$1 گؤستریلسین؟",
"restorelink": "{{PLURAL:$1|بیر|$1}} سیلینمیش دَییشیکلیک",
@@ -273,8 +285,8 @@
"red-link-title": "$1 (صحیفه یوْخدور)",
"sort-descending": "آزالان سیرالاماق",
"sort-ascending": "چوْخالان سیرالاماق",
- "nstab-main": "صحیفه",
- "nstab-user": "ایستیفاده‌چی صحیفه‌سی",
+ "nstab-main": "صفحه",
+ "nstab-user": "ایشلدن صفحه‌سی",
"nstab-media": "مئدیا صحیفه‌سی",
"nstab-special": "اؤزل صحیفه",
"nstab-project": "پروژه صحیفه‌سی",
@@ -289,6 +301,11 @@
"nospecialpagetext": "<strong>سیز بیر یانلیش اؤزل صحیفه ایسته‌میسینیز.</strong>\n\nدۆزگون اؤزل صحیفه‌لرین لیستینی [[Special:SpecialPages|{{int:specialpages}}]]-ده گؤره بیلرسینیز.",
"error": "خطا",
"databaseerror": "دِیتابِیس خطاسی",
+ "databaseerror-text": "داده پایگاهیندا موشکول اوز وئریب. \nبو اولا بیلر گوستره نرم افزار دا ایراد وار.",
+ "databaseerror-textcl": "داده پایگاهیندا بیر سورغو خطاسی اوز وئریب",
+ "databaseerror-query": "سورغو: $1",
+ "databaseerror-function": "تابع: $1",
+ "databaseerror-error": "خطا: $1",
"laggedslavemode": "'''دیقت:''' یارپاق‌دا، سون دَییشیکلیکلرین اولماماسی ایمکانی وار.",
"readonly": "دیتابیس باغلانیب",
"enterlockreason": "باغلاما نَدَن‌لیگی و آچیلماغین تخمینی واختینی یازین",
@@ -303,6 +320,8 @@
"filerenameerror": "«$1» فایلین آدی «$2»-نا دَییشدیریلنمه‌دی.",
"filedeleteerror": "«$1» فایلی سیلیننمه‌دی.",
"directorycreateerror": "«$1» دایرکتوری‌سی سیلیننمه‌دی.",
+ "directoryreadonlyerror": "دایرکتوری \"$1\" تکجه اوخومالی دیر.",
+ "directorynotreadableerror": "دایرکتوری \"$1\" اوخونمالی دئییل.",
"filenotfound": "«$1» فایلی تاپیلانمادی.",
"unexpected": "گؤزلنیلمه‌ین دَیَر: «$1»=«$2»",
"formerror": "خطا: فورم یوللانانمادی.",
@@ -310,6 +329,7 @@
"cannotdelete": "«$1» فایل یا یارپاغی سیلیننمه‌دی.\nاولا بیلر اونو اؤنجه‌دن باشقا بیر اشلدن سیلمیش اولا.",
"cannotdelete-title": "«$1» یارپاغی سیلیننمیر",
"delete-hook-aborted": "سیمک، چنگل‌له یاری‌دا قالدی.\nاو هئچ بیر ایضاح وئرمه‌دی.",
+ "no-null-revision": "\"$1\" صحیفه‌سی اوچون یئنی بوش بیر نوسخه یارادیلا بیلمه‌دی",
"badtitle": "پیس باشلیق",
"badtitletext": "آختاریلان صحیفه‌‌ آدی سهودیر و يا بوْشدور، يا دا دۆزگون اوْلمايان دیللر‌آراسی، ياخود ویکیلرآراسی کئچید ایستیفاده ائدیلیب. \nباشلیقلاردا ایستیفاده ائدیلمه‌سی قاداغان اوْلونان بیر و يا داها چوْخ سیمووْل ایستیفاده ائدیلمیش اوْلا بیلر.",
"perfcached": "بو بیلگی، کَش اولوب‌دور و اولا بیلر گونجل اولماسین. چوخو {{PLURAL:$1|بیر نتیجه|$1 نتیجه}} کَش‌ده‌دیر.",
@@ -323,7 +343,8 @@
"viewsourcetext": "سیز بو صحیفه‌نین مزمونونو گؤره و کؤچوره بیلرسینیز:",
"viewyourtext": "'''اؤز دَییشیکلیکلرینیز''' ین کودونو گؤروب و بو صحیفه‌یه کوپی ائده بیلرسینیز:",
"protectedinterface": "بو صحیفه‌ده پروقرام تأمیناتی اوچون سیستئم بیلگی‌لری وار و سوی-ایستیفاده‌نین قارشی‌سینی آلماق اوچون محافظه اولونما‌لی‌دیر.",
- "editinginterface": "'''دیقت:''' سیز بیر یازیلیم آرا-اوزونه یازی تعمین ائدن صحیفه‌نی دَییشدیرمک‌ده‌سینیز.\nبو صحیفه‌نی دَییشدیرمک، بو ویکی‌نی ایستیفاده ائدن باشقا ایستیفاده‌چیلرین گؤرونوشونو دَییشه‌جک‌دیر.\nچئویرمه‌لری بوتون ویکی‌لره آرتیریب یوخسا دَییشدیرمک اوچون لوطفاً [//translatewiki.net/ translatewiki.net]، مئدیاویکی‌نین یئرلیلشدیرمه پروژه‌سیندن ایستیفاده ائدین.",
+ "editinginterface": "<strong>دیقت:</strong> سیز بیر یازیلیم آرا-اوزونه یازی تعمین ائدن صحیفه‌نی دَییشدیرمک‌ده‌سینیز.\nبو صحیفه‌نی دَییشدیرمک، بو ویکی‌نی ایستیفاده ائدن باشقا ایستیفاده‌چیلرین گؤرونوشونو دَییشه‌جک‌دیر.",
+ "translateinterface": "ترجومه و یا اونون دَییشدیرمک هامی ویکی لر اوچون [//translatewiki.net/ translatewiki.net]،مدیا ویکی نین یئرلری ائتمک پروژه سیندن ایستفاده ائدین",
"cascadeprotected": "بو صحیفه دَییشیکلیکلر قاباغیندا قورونوب‌دور، چونکو بو آشاغیداکی، آبشاری {{PLURAL:$1|سئچمه‌سی|سئچمه‌لری}} سئچیلن، قورونان {{PLURAL:$1|صحیفه|صحیفه‌لر}} ایچینده‌دیر:\n$2",
"namespaceprotected": "سیز '''$1''' آدفضاسینداکی صحیفه‌لرین دَییشمه‌سینه ایجازه‌نیز یوخدور.",
"customcssprotected": "سیز بو CSS صفحه‌سینین دَییشمه‌سینه ایجازه‌نیز یوخدور نییه کی اون‌دا باشقا ایشلدنین شخصی تنظیملری واردیر.",
@@ -338,16 +359,18 @@
"invalidtitle-knownnamespace": "«$2» آدآلان‌لی و «$3» یازی‌لی یانلیش باشلیق",
"invalidtitle-unknownnamespace": "تانینمامیش $1 نومره‌لی آدآلان و «$2» یازی‌لی یانلیش باشلیق",
"exception-nologin": "گیریش ائتمه‌میسینیز",
- "exception-nologin-text": "بو یارپاق یا ایشی گؤرمگه، بو ویکی‌یه گیرمه‌لیسینیز.",
+ "exception-nologin-text": "بو صحیفه‌یه داخیل اولماق و یا فعالیتی ایجرا ائتمک اوچون اؤزونوزو سیستئمه گیریش ائدین.",
+ "exception-nologin-text-manual": " بو صحیفه‌یه و یا حرکته داخیل اولماق اوچون $1 لازیم‌دیر.",
"virus-badscanner": "پیس تنظیملر: تانینمامیش ویروس یوخلایان: ''$1''",
"virus-scanfailed": "یوخلاماق باشا چاتمادی (کود $1)",
"virus-unknownscanner": "تانینمامیش آنتی‌ویروس:",
- "logouttext": "'''سیز ایندی سیستِم‌دن چیخدینیز.'''\n\nسیز {{SITENAME}}-ی تانینمامیش اولاراق ایشلده بیلرسینیز، یوخسا همن ایستیفاده‌چی آدی یا باشقا ایستیفاده‌چی آدی ایله <span class='plainlinks'>[$1یئنی‌دن گیریش]</span> ائده بیلرسینیز.\nبونا دیقت ائدین کی بعضی صحیفه‌لر، کَش-ینیزی سیلمه‌میشه کیمی، هله ده سیزین گیریش ائتدیگینیز کیمی گؤستریله‌جکلر.",
+ "logouttext": "<strong>سیز ایندی سیستِم‌دن چیخدینیز.</strong>\n\nسیز {{SITENAME}}-ی تانینمامیش اولاراق ایشلده بیلرسینیز، یوخسا همن ایستیفاده‌چی آدی یا باشقا ایستیفاده‌چی آدی ایله <span class='plainlinks'>[$1یئنی‌دن گیریش]</span> ائده بیلرسینیز.\nبونا دیقت ائدین کی بعضی صحیفه‌لر، کَش-ینیزی سیلمه‌میش کیمی، هله ده سیزین گیریش ائتدیگینیز کیمی گؤستریله‌جکلر.",
"welcomeuser": "خوش گلمیسینیز، $1!",
"welcomecreation-msg": "حسابینیز آچیلدی.\n[[Special:Preferences|{{SITENAME}}ترجیحلر]] دییشدیرمیی اونوتمایین.",
"yourname": "ایستیفاده‌چی آدی:",
"userlogin-yourname": "ایستیفاده‌چی آدی",
"userlogin-yourname-ph": "ایستیفاده‌چی آدینیزی دَییشدیرین",
+ "createacct-another-username-ph": "ایستیفاده‌چی آدینیزی داخیل ائدین",
"yourpassword": "رمز:",
"userlogin-yourpassword": "رمز",
"userlogin-yourpassword-ph": "رمزینیزی داخیل ائدین",
@@ -376,10 +399,14 @@
"gotaccount": "اؤنجه‌دن حسابینیز وارمی؟ $1.",
"gotaccountlink": "گیریش",
"userlogin-resetlink": "گیریش بیلگیلرینیزی اونوتموسونوز؟",
- "userlogin-resetpassword-link": "رمزینیزی صیفیرلایین",
+ "userlogin-resetpassword-link": "رمزینیزی اونوتموسوز مو؟",
+ "userlogin-helplink2": "یاردیم ایله گیریش",
+ "userlogin-loggedin": "سیر حال حاضیردا {{GENDER:$1|$1}} عونوانیندا گیریش ائدیب سیز.\nآشاغیداکی فورمودان بیر آیری ایشلدن عونوانیندا گیریش اوچون ایشلدین.",
+ "userlogin-createanother": "بیر باشقا حساب یارات",
"createacct-emailrequired": "ایمیل آدرسی",
"createacct-emailoptional": "ایمیل آدرسی (ایستگه باغلی)",
"createacct-email-ph": "ایمیل آدرسینیزی داخیل ائدین",
+ "createacct-another-email-ph": "ایمیل آدرسینیزی داخیل ائدین",
"createaccountmail": "بیر گئچیجی راست‌گله رمز ایشلت و اونو آشاغیدا بللندیرن ایمیل آدرسینه گؤندر",
"createacct-realname": "دوغرو آد (ایستگه باغلی)",
"createaccountreason": "نَدَن‌لیک:",
@@ -388,6 +415,7 @@
"createacct-captcha": "امنیت یوخلاماسی",
"createacct-imgcaptcha-ph": "اوست‌ده‌کی گؤردوگونوز یازی‌نی داخیل ائدین",
"createacct-submit": "حسابینیزی یارادین",
+ "createacct-another-submit": "بیر باشقا حساب یارات",
"createacct-benefit-heading": "{{SITENAME}} سیزین کیمی آدام‌لارین الی ایله یارانیب‌دیر.",
"createacct-benefit-body1": "{{PLURAL:$1|دَییشیکلیک}}",
"createacct-benefit-body2": "{{PLURAL:$1|صحیفه}}",
@@ -434,10 +462,12 @@
"accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|دانیشیق]]) ایستیفاده‌چی حسابی یارادیلیب‌دیر.",
"createaccount-title": "{{SITENAME}} اوچون حساب یارادیلماسی",
"createaccount-text": "بیر کس، سیزین ایمیل آدرسینیزه {{SITENAME}} ($4) سایتیندا «$2» آدی و «$3» رمزی ایله بیر حساب آچیب‌دیر. سیز گرک گیریش ائدیب و رمزینیزی ایندی دَییشدیره‌سیز.\n\nبو حساب یانلیش دوزلیب‌سه، بو مئساژا محل قویمایابیلرسیز.",
- "login-throttled": "سیزین چوخ گیریش چالیشماغینیز اولوب‌دور.\nلوطفاً یئنی‌دن چالیشماق‌دان اؤنجه بیر آز دؤزون.",
+ "login-throttled": "سیزین چوخ گیریش چالیشماغینیز اولوب‌دور.\nلوطفاً یئنی‌دن چالیشماق‌دان اؤنجه بیر آز $1 دؤزون.",
"login-abort-generic": "سیزین گیریشینیز باشاری‌سیز اولدو - دایاندیریلدی",
+ "login-migrated-generic": "ایستفادچی حسابینیز آختاریلمیش دیر و آدینیز داها بو ویکی ده یوخدور",
"loginlanguagelabel": "دیل: $1",
"suspicious-userlogout": "سیزین چیخیش ایستگینیز رد اولوندو. بو، براوزرین یا پروکسی-کَشلمه‌سینین دوزگون ایشله‌مه‌مه‌سین‌دن قایناق‌لانیر.",
+ "createacct-another-realname-tip": "اصلی آد ایستگینیزه باغلی‌دیر.\nاگر اونو وئرماغی سئچسز، سیزین ایشلرینیزی سیزه مونتسب ائدن‌ده، بو اصلی آد ایشلنه‌جک‌دیر.",
"pt-login": "گیریش ائت",
"pt-login-button": "گیریش ائت",
"pt-createaccount": "حساب یارات",
@@ -459,6 +489,7 @@
"resetpass-submit-loggedin": "رمزی دَییشدیر",
"resetpass-submit-cancel": "لغو ائت",
"resetpass-wrong-oldpass": "یانلیش گئچیجی یا ایندیکی رمز.\nاولا بیلر سیز باشاریلیق‌لا رمزینیزی دَییشمیسینیز یوخسا یئنی گئچرلی رمز ایسته‌میسینیز.",
+ "resetpass-recycled": "لوطفا گیریش رمزینیزی ایندیکی اولمایان بیر ایری گیریش رمزینه دَییشین",
"resetpass-temp-password": "گئچیجی رمز:",
"resetpass-abort-generic": "رمز دَییشدیرمک، بیر اوزانتی ایله یاریدا کسیلیب‌دیر.",
"passwordreset": "رمزی یئنی‌له",
@@ -480,7 +511,6 @@
"passwordreset-emailsent-capture": "آشاغیدا گؤستریلن کیمی بیر رمز یئنیله‌مه ایمیلی گؤندریلیب‌دیر.",
"passwordreset-emailerror-capture": "آشاغیدا گؤستریلن کیمی بیر رمز یئنیله‌مه ایمیلی یارادیلیب‌دیر، اما {{GENDER:$2ایستیفاده‌چی}}‌یه گؤندرمگی باشاریلی اولمادی: $1",
"changeemail": "ایمیل آدرسینی دَییشدیر",
- "changeemail-header": "حساب ایمیل آدرسینی دَییشدیر",
"changeemail-text": "ایمیل آدرسینیزی دَییشمک اوچون بو فورمو دولدورون. بو دَییشیگی دوغرولاماق اوچون رمزینیزی وئرمه‌لیسینیز.",
"changeemail-no-info": "بو صحیفه‌نی دوغرو گؤردوگونوز اوچون سیستمه گیرمه‌لیسینیز.",
"changeemail-oldemail": "ایندیکی ایمیل آدرس:",
@@ -488,7 +518,6 @@
"changeemail-none": "(هئچ)",
"changeemail-password": "سیزین {{SITENAME}} رمزینیز:",
"changeemail-submit": "ایمیلی دَییشدیر",
- "changeemail-cancel": "لغو",
"bold_sample": "قالین یازی",
"bold_tip": "قالین یازی",
"italic_sample": "اَیری یازی",
@@ -513,7 +542,7 @@
"preview": "اؤن‌گؤستریش",
"showpreview": "سیناق گؤستریش",
"showdiff": "دَییشیکلیکلری گؤستر",
- "anoneditwarning": "'''دیقت:''' سیز سیستئمه گیرمه‌میسینیز. سیزین آی‌پی آدرسینیز بو صفحه‌نین دییشیک تاریخچه‌سین‌ده یازیلاجاق‌دیر.",
+ "anoneditwarning": "<strong>دیقت:</strong> سیز سیستئمه گیرمه‌میسینیز. سیزین آی‌پی آدرسینیز بو صفحه‌نین دییشیک تاریخچه‌سین‌ده یازیلب و گورسنجک.هر دَییشدیرمه ائتسز.<strong>[$1 گیریش ائتسز]</strong> یا <strong>[$2 بیر ایشلدن حسابی آچاسیز]</strong>, دَییشدیرمه لرینیز سیزین ایشلدن حساب آدینیزا نیسبت وئریلجک و آرتیق مزیت لرله.",
"anonpreviewwarning": "''سیستمه گیرمه‌میسینیز. قئید ائتمک‌له، سیزین آی‌پی آدرسینیز بو صحیفه‌نین گئچمیشین‌ده ثبت اولوناجاقدیر.''",
"missingsummary": "'''یادا سالما:''' سیز بیر دَییشیکلیک قیساسی یازمامیسینیز. «{{int:savearticle}}» دویمه‌سینی تیک‌لاسازسا، دَییشیکلیگینیز، قیسا شرح‌سیز اولاراق قئید اولوناجاق.",
"missingcommenttext": "لوطفاً آشاغی‌دا بیر یوروم یازین.",
@@ -532,7 +561,7 @@
"loginreqlink": "گیریش",
"loginreqpagetext": "باشقا صحیفه‌لری گؤرمک اوچون گرک $1.",
"accmailtitle": "رمز گؤندریلدی",
- "accmailtext": "[[User talk:$1|$1]] اوچون بیر راست‌گله رمز یارادیلیب و $2-ه گؤندریلدی.\n\nبو یئنی حسابین رمزی، گیرندن سونرا ''[[Special:ChangePassword|رمز دَییشدیرمه]]'' صحیفه‌سیندن دَییشیله بیلر.",
+ "accmailtext": "[[User talk:$1|$1]] اوچون بیر راست‌گله رمز یارادیلیب و $2-ه گؤندریلدی.\n\nبو یئنی حسابین رمزی، گیرندن سونرا <em>[[Special:ChangePassword|رمز دَییشدیرمه]]</em> صحیفه‌سیندن دَییشیله بیلر.",
"newarticle": "(یئنی)",
"newarticletext": "مؤوجود اوْلمايان صحیفه‌‌يه اوْلان کئچیدی ایزله‌دینیز. \nآشاغیداکی ساحه‌‌يه مظمونونو يازاراق بۇ صحیفه‌‌نی '''سیز''' يارادا بیلرسینیز. (علاوه‌‌ معلومات اۆچون [$1 کؤمک صحیفه‌‌سینه] باخین). اگر بۇ صحیفه‌‌يه سهون گلمیسینیزسه ساده‌جه اوْلاراق براوزئرین '''گئری''' دۆيمه‌سینه وۇرون.",
"anontalkpagetext": "''بو صحیفه قئیدیات‌دان کئچممیش و یا داخیل اولمامیش آنونیم ایستیفادچییه عایید موذاکیره صحیفه‌سی‌دیر.\nاونا گؤره بو ایستیفادچینی رقم‌لردن عبارت ایپ اونوانی ایله معین ائتمک مجبوریتیندییک.\nبئله ایپ اونوان بیر نئچه فرد طرفین‌دن ایستیفاده‌ده اولا بیلر.\nاگر سیز آنونیم ایستیفادچیسینیزسه و بو مئساژین سیزه عایید اولمادیغینی دوشونورسونوزسه، اوندا [[Special:UserLogin/signup|قئیدیات‌دان کئچین]] و یا [[Special:UserLogin|داخی اولون]].''",
@@ -598,13 +627,14 @@
"edit-gone-missing": "صحیفنی یئنی لمک مومکون دئییل.\nچوخ گومان کی، صحیفه سیلینمیش‌دیر.",
"edit-conflict": "سیزله برابر دییشدیرمه",
"edit-no-change": "سیزین دییشدیر قئیده آلینمامیش‌دیر. بئله کی، متنده هئچ بیر دییشدیر ائدیلممیش‌دیر.",
+ "postedit-confirmation-created": "به صفحه یارانیب‌دیر.",
"postedit-confirmation-saved": "سیزین دَییشدیرمه‌نیز قئید اولونوب‌دور.",
"edit-already-exists": "یئنی صحیفنی یاراتماق مومکون دئییل.\nبئله کی، بو آددا صحیفه آرتیق مؤوجوددور.",
"defaultmessagetext": "دفالت دانیشیق متنی",
"content-failed-to-parse": "تجزیه محتوای $2 مدل اوچون $1: $3 موفقیت اله گلمه دی",
"invalid-content-data": "اعتبارسیز مضمون معلوماتی",
"content-not-allowed-here": "\"$1\" مقاله‌سینه، [[$2]] صحیفه‌سینده ایجازه وئریلممیش دیر.",
- "editwarning-warning": "بو صحیفه‌نی ترک ائتمک، دَییشدیرمه‌لرینیزی الدن وئرمگه سبب اولا بیلر. اگر گیریش ائتمیسینیز بو ایخطاری، ترجیحلرینیزین «دَییشدیرمک» بؤلوموندن، ایشدن سالا بیلرسینیز.",
+ "editwarning-warning": "بو صحیفه‌نی ترک ائتمک، دَییشدیرمه‌لرینیزی الدن وئرمگه سبب اولا بیلر. اگر گیریش ائتمیسینیز بو ایخطاری، ترجیحلرینیزین «دَییشدیرمک» بؤلوموندن، \"{{int:prefs-editing}}\"ایشدن سالا بیلرسینیز.",
"content-model-wikitext": "ویکی‌یازی",
"content-model-text": "ساده یازی",
"content-model-javascript": "جاوااسکریپت",
@@ -637,7 +667,7 @@
"currentrev": "سون نوسخه",
"currentrev-asof": "$1 تاریخینه کیمی سون حال",
"revisionasof": "$1 نوسخه‌سی",
- "revision-info": "$1-ده $2-له یارادیلمیش نوسخه",
+ "revision-info": "$1- یارادیلمیش نوسخه{{GENDER:$6|$2}}$7 الیله",
"previousrevision": "اونجه‌کی وئرسیيا",
"nextrevision": "داها یئنی نوسخه ←",
"currentrevisionlink": "سون نوسخه",
@@ -682,7 +712,7 @@
"revdelete-show-file-submit": "بلی",
"logdelete-selected": "'ژورنالین {{PLURAL:$1|سئچیلمیش قئیدی|سئچیلمیش قئیدلری}}:'",
"revdelete-confirm": "خاهیش ائدیریک، بونو ائتمک ایستدیگینیزی، نتیجه‌لرینی آنلادیغینیزی، و بونو [[{{MediaWiki:Policy-url}}| پرینسیپ‌لره]] گؤره ائدیر اولدوغونوزو تسدیق ائدین.",
- "revdelete-suppress-text": "ساخلاما 'یالنیز آشاغی‌داکی حال‌لار اوچون ایستیفاده ائدیلمه‌لی‌دیر:\n* اویگون‌سوز فردی معلومات\n*:' ائو اونوان‌لاری و تئلئفون نؤمره‌لری، سوسیال تهلوکه‌سیزلیک نؤمره‌لری، و س.'",
+ "revdelete-suppress-text": "ساخلاما <strong>یالنیز</strong> آشاغی‌داکی حال‌لار اوچون ایستیفاده ائدیلمه‌لی‌دیر:\n* اویگون‌سوز فردی معلومات\n*:<em> ائو اونوان‌لاری و تئلئفون نؤمره‌لری، سوسیال تهلوکه‌سیزلیک نؤمره‌لری، و س.</em>",
"revdelete-legend": "گؤرونوش محدودیتلری قوی:",
"revdelete-hide-text": "صحیفه‌‌نین بو وئرسیياسی‌نین متنینی گیزله",
"revdelete-hide-image": "فایلین ایچینده‌کیلرینی گیزلت",
@@ -691,8 +721,8 @@
"revdelete-hide-user": "دَییشدیرن یازارین ایستیفاده‌چی آدینی/آی‌پی اونوانینی گیزله",
"revdelete-hide-restricted": "بیلگی‌لری ایدارچی‌لردن ده گیزله",
"revdelete-radio-same": "(ديَیشدیرمه)",
- "revdelete-radio-set": "بلی",
- "revdelete-radio-unset": "یوخ",
+ "revdelete-radio-set": "گیزلی",
+ "revdelete-radio-unset": "گؤرونن",
"revdelete-suppress": "بیلگی‌لری ایداره‌چیلردن ده گیزله",
"revdelete-unsuppress": "برپا اولونان وئرسیا‌لار اوزرین‌دن محدودیت‌لری قال‌دیر",
"revdelete-log": "ندن:",
@@ -739,7 +769,6 @@
"mergehistory-same-destination": "قایناق و مقصد صحیفه‌لر، بیر اولانمازلار",
"mergehistory-reason": "ندن",
"mergelog": "بیرلشدیرمه سیاهی‌سی",
- "pagemerge-logentry": "[[$1]]، [[$2]] ایله بیرلشدیریلدی (نوسخه‌لر $3-ه قدر)",
"revertmerge": "آيیر",
"mergelogpagetext": "آشاغدی‌دا، ان سون صحیفه بیرلشدیریلمه‌لری گؤستریلیر.",
"history-title": "«$1»-ین گئچمیشی",
@@ -764,7 +793,7 @@
"shown-title": "هر صحیفه‌ده {{PLURAL:$1|بیر|$1}} نتیجه گؤستر",
"viewprevnext": "گؤستر ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''بو ویکی‌ده «[[:$1]]» آدلی صحیفه واردیر.'''",
- "searchmenu-new": "'''بو ویکی‌ده «[[:$1]]» صحیفه‌‌سینی يارات!'''",
+ "searchmenu-new": "<strong>بو ویکی‌ده «[[:$1]]» صحیفه‌‌سینی يارات!</strong> {{PLURAL:$2|0=|هابئله تاپیلمیش صفحه نی آختاریشینیزلا گورون.|هابئله تاپیلمیش آختاریشین نتیجه سین گورون.}}",
"searchprofile-articles": "مقاله‌لر",
"searchprofile-images": "مولتی‌مئدیا",
"searchprofile-everything": "هرشئی",
@@ -785,7 +814,7 @@
"searchrelated": "ایلگیلی",
"searchall": "بوتون",
"showingresults": "آشاغیدا نومره '''$2'''-دن باشلایان {{PLURAL:$1|'''بیر'''|'''$1'''}} سونوجا قدر گؤستریلیر.",
- "showingresultsheader": "'''$4''' اوچون {{PLURAL:$5|'''$3'''-دن '''$1''' نتیجه|'''$3'''-دن '''$1-$2''' نتیجه}}",
+ "search-showingresults": "{{PLURAL:$4|نتیجه لر <strong>$1</strong> از <strong>$3</strong>|نتیجه لر<strong>$1 - $2</strong> از <strong>$3</strong>}}",
"search-nonefound": "سیزین سورونوزا اویغون نتیجه تاپیلمادی.",
"powersearch-legend": "گلیشمیش آختاریش",
"powersearch-ns": "آدفضالاریندا آختار",
@@ -806,6 +835,7 @@
"prefs-personal": "ایستیفاده‌چی پروفایلی",
"prefs-rc": "سون دَییشیکلیکلر",
"prefs-watchlist": "ایزله‌دیکلر",
+ "prefs-editwatchlist": "ایزله‌دیگیم صحیفه‌‌لری دَییشدیر",
"prefs-watchlist-days": "ایزله‌دیکلرده گؤستریلن گونلر",
"prefs-watchlist-days-max": "چوخو {{PLURAL:$1|بیر|$1}} گون",
"prefs-watchlist-edits": "گنیشلنمیش ایزله‌مه‌لرده گؤستریلن دَییشیکلیکلرین چوخو:",
@@ -818,7 +848,7 @@
"prefs-email": "ایمیل ترجیحلری",
"prefs-rendering": "گؤرونوش",
"saveprefs": "قئید ائت",
- "restoreprefs": "بوتون ایلک ترجیحلری قایتار",
+ "restoreprefs": "بوتون ایلک ترجیح‌لری قایتار",
"prefs-editing": "دَییشدیرمک‌ده",
"rows": "سطرلر:",
"columns": "سوتونلار",
@@ -870,8 +900,8 @@
"badsiglength": "ایمضانیز چوخ اوزون‌دور.\nاو گرک {{PLURAL:$1|بیر|$1}} حرف‌دن اوزون اولمایا.",
"yourgender": "جینس:",
"gender-unknown": "بیلیندیرمه‌میش",
- "gender-male": "آقا",
- "gender-female": "خانیم",
+ "gender-male": "کیشی",
+ "gender-female": "قادین",
"prefs-help-gender": "ایستگه یاغلی: یازیلیم‌لا، دوزگون جنسیته ایلگی‌لی آدرس وئرمک اوچون ایشنیر.\nبو بیلگی، عمومی اولاجاق‌دیر.",
"email": "ایمیل",
"prefs-help-realname": "اصلی آد ایستگه باغلی‌دیر.\nاگر اونو وئرماغی سئچسز، سیزین ایشلرینیزی سیزه مونتسب ائدن‌ده، بو اصلی آد ایشلنه‌جک‌دیر.",
@@ -883,7 +913,7 @@
"prefs-signature": "ایمضا",
"prefs-dateformat": "تاریخ فورمتی",
"prefs-timeoffset": "ساعات قورشاغینین فرقی",
- "prefs-advancedediting": "عمومی",
+ "prefs-advancedediting": "گنل تنظیم‌لر",
"prefs-editor": "دَییشدیرن",
"prefs-preview": "اؤن‌گؤستریش",
"prefs-advancedrc": "گلیشمیش سئچَنکلر",
@@ -1056,6 +1086,7 @@
"recentchanges-label-minor": "بو بیر کیچیک دَییشدیرمه‌دیر",
"recentchanges-label-bot": "بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر",
"recentchanges-label-unpatrolled": "بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر",
+ "recentchanges-label-plusminus": "صحیفه‌نین اؤلچوسو بایت میقداری ایله تعیین ائدیلیر",
"recentchanges-legend-heading": "'''ایختیصارلار:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هم‌ده [[Special:NewPages|یئنی صحیفه‌لرین لیستینه]] باخین)",
"rcnotefrom": "آشاغیدا '''$2'''-دن ('''$1'''-ه قدر) ديَیشیکلیکلر گلیبلر.",
@@ -1273,6 +1304,7 @@
"license-nopreview": "(اؤن‌گؤستریش یوخدور)",
"upload_source_url": "(بیر گئچرلی و عموم گؤره بیلن اینترنت آدرسی)",
"upload_source_file": "(بیلگی‌سایارینیزدا بیر فایل)",
+ "listfiles-delete": "سیل",
"listfiles-summary": "بۇ اؤزل صحیفه، بۆتون یۆکله‌نیلن فایل‌لاری گؤستریر.",
"listfiles_search_for": "مئدیا آدی اوچون آختار:",
"imgfile": "فایل",
@@ -1362,14 +1394,13 @@
"randomincategory": "بؤلمه‌ده راست‌گله صحیفه",
"randomincategory-invalidcategory": "«$1» بیر گئچرلی بؤلمه آدی دئییل.",
"randomincategory-nopages": "[[:Category:$1|$1]] بؤلمه‌سین‌ده، هئچ صحیفه یوخدور.",
- "randomincategory-selectcategory": "بؤلمه‌دن آلیناجاق راست‌گله صحیفه: $1 $2.",
- "randomincategory-selectcategory-submit": "گئت",
+ "randomincategory-category": "بؤلمه:",
+ "randomincategory-legend": "بؤلمه‌ده راست‌گله صفحه",
"randomredirect": "راست‌گله یول‌لاندیرما",
"randomredirect-nopages": "«$1» آدفضاسیندا هئچ بیر یول‌لاندیرما یوخدور.",
"statistics": "آمارلار",
"statistics-header-pages": "صحیفه آمارلاری",
"statistics-header-edits": "دَییشمه آمارلاری",
- "statistics-header-views": "باخما آمارلاری",
"statistics-header-users": "ایستیفاده‌چی آمارلاری",
"statistics-header-hooks": "باشقا آمارلار",
"statistics-articles": "مقاله‌لر",
@@ -1378,13 +1409,9 @@
"statistics-files": "یوکلنمیش فایل‌لار",
"statistics-edits": "{{SITENAME}} یولا دوشندن بَری صحیفه دَییشیکلیکلری",
"statistics-edits-average": "هر صحیفه‌ده اورتا دَییشیکلیک سایی",
- "statistics-views-total": "گؤرونوشلر جمعی",
- "statistics-views-total-desc": "اولمایان صحیفه‌لر و اؤزل صحیفه‌لره گؤرونوشلر، داخیل ائدیلمه‌ییب‌دیر",
- "statistics-views-peredit": "دَییشیکلیگه گؤرونوشلر",
"statistics-users": "یازیلمیش [[Special:ListUsers|ایستیفاده‌چیلر]]",
"statistics-users-active": "چالیشقان ایستیفاده‌چیلر",
"statistics-users-active-desc": "سون {{PLURAL:$1|بیر|$1}} گون‌ده بیر ایش گؤرن ایستیفاده‌چیلر",
- "statistics-mostpopular": "ان چوخ گؤرونموش صحیفه‌لر",
"pageswithprop": "صحیفه اؤزل‌لیگی اولان صحیفه‌لر",
"pageswithprop-legend": "صحیفه اؤزل‌لیگی اولان صحیفه‌لر",
"pageswithprop-text": "بو صحیفه‌ده، بیر خاص صحیفه اؤزل‌لیگی ایشلدن صحیفه‌لرین لیستی واردیر.",
@@ -1425,7 +1452,6 @@
"uncategorizedtemplates": "بؤلمه‌سیز شابلون‌لار",
"unusedcategories": "ایستیفاده ائدیلمه‌میش بؤلمه‌لر",
"unusedimages": "ایشلنمه‌میش فایل‌لار",
- "popularpages": "سئویلن صحیفه‌لر",
"wantedcategories": "یسته نن بؤلمه‌لر",
"wantedpages": "ایسته‌نیلن صحیفه‌لر",
"wantedpages-badtitle": "مراجعت زامانتی يانلیش باشلیق: $1",
@@ -1487,7 +1513,7 @@
"querypage-disabled": "پِرفورمانس اوچون بو اؤزل صحیفه باغلانیب‌دیر.",
"booksources": "کیتاب قایناقلاری",
"booksources-search-legend": "کیتاب قایناقلارین آختار",
- "booksources-go": "گئت",
+ "booksources-search": "آختار",
"booksources-text": "آشاغیدا یئنی و ایشلنمیش کیتاب‌لار ساتان خاریجی کئچیدلرده سیز آختاردیغینیز کیتاب حاقیندا علاوه معلومات آلا بیلرسیز:",
"booksources-invalid-isbn": "وئریلن ISBN اعتبارسیز کیمی گؤرونور؛ اورجینال قایناق‌دان کوپیالاما اشکالار اوچون نظارت ائدین.",
"specialloguserlabel": "ایجراچی",
@@ -1611,7 +1637,7 @@
"wlheader-enotif": "ایمیل ایله بیلدیریش آچیلیب‌دیر.",
"wlheader-showupdated": "سون گؤروشونوزدن سونرا ائدیلن دییشیکلیکلر '''قالین''' گؤستریلیبدیلر.",
"wlnote": "آشاغیداکی {{PLURAL:$1|'''$1''' ديَیشیک‌لیک|'''$1'''ديَیشیک‌لیک}} سون {{PLURAL:$2|ساعتدا|'''$2''' ساعتدا}} ائدیلمیشدیر.$3، $4",
- "wlshowlast": "سون $1 ساعات $2 گون گؤستر $3",
+ "wlshowlast": "سون $1 ساعات $2 گون گؤستر",
"watchlist-options": "ایزله‌دیکلر سئچمه‌لری",
"watching": "ایزله‌نیلیر...",
"unwatching": "ایزله‌مه...",
@@ -1658,7 +1684,6 @@
"delete-toobig": "بو صحیفه، $1 {{PLURAL:$1 | دنه دییشیک‌لیک | دنه دییشیک‌لیک}} ایله چوخ اوزون بیر کئچمیشه مالیک‌دیر.\nبئله صحیفه‌لرین سیلینمه‌سی، {{SITENAME}} سایتینی پوزماماق اوچون مهدودلاشدیریلماقدا‌دیر.",
"delete-warning-toobig": "بو صحیفه‌‌نین بؤيوک بیر ديَیشیکلیک کئچمیشی وار، $1 {{PLURAL:$1|نسخه| نسخه}} اوزرینده. \nبونو سیلمک {{SITENAME}} عملیاتلارینی مخدل‌ائده‌بیلیر؛ \nدیقتله داوام ائدین.",
"rollback": "اوولکی نوسخه لر",
- "rollback_short": "اوولکی حالینا قایتار",
"rollbacklink": "گئری‌دؤندر",
"rollbacklinkcount": "گیتیرلمه $1 {{PLURAL:$1|دییشمک |دییشمک}} دییشدیرمه",
"rollbacklinkcount-morethan": "گیتیرلمه آرتیق $1 {{PLURAL:$1|دییشمک |دییشمک}} دییشدیرمه",
@@ -1813,7 +1838,7 @@
"autoblockid": "اوتوماتیک باغلانما #$1",
"block": "ایستیفادچینی باغلاما",
"unblock": "ایستیفاده‌چی‌نین باغلانماسین گؤتور",
- "blockip": "ایستیفاده چی نی باغلا",
+ "blockip": " {{GENDER:$1|ایشلدن}}ی باغلا",
"blockip-legend": "ایستیفادچی نی باغلا",
"blockiptext": "آشاغی‌داکی فورمو ایستیفاده ائده‌رک مویین بیر ایپنین و یا قئیدیات‌دان کئچمیش ایستیفاده‌چی‌نین دییشیک‌لیک ائتمه‌سینی مانعه تؤره‌ده بیلرسینیز. بو یالنیز واندالیزمی قارشی‌سینی آلماق اوچون و [[{{MediaWiki:Policy-url}}|قایدا‌لارا]] اویغون اولا‌راق ائدیلمه‌لی. آشاغییا موتلق قاداغا ایله علاقه‌دار بیر شرح یازین. (نومونه:-بو-صحیفه‌لرده واندالیزم ائتمیش‌دیر).",
"ipaddressorusername": "آی-پی عونوانی و یا ایستیفاده‌چی آدی",
@@ -2030,7 +2055,7 @@
"import": "صحیفه‌لری ایدخال ائت",
"importinterwiki": "ویکیلر اراسی چیخارما",
"import-interwiki-text": "ایچه کؤچورمک اوچون بیر wiki و صحیفه باش‌لیغی سئچین.\nرئویزیون تاریخ‌لری و یازارلارین آدلاری قورونا‌جاق.\nبوتون ویکیلئراراسی ایچه کؤچورمه حرکت‌لری [[Special:Log/import|ایچه کؤچورمه گوندلیگینده]] یازیلماقدا‌دیر.",
- "import-interwiki-source": "قایناق ویکی/صحیفه:",
+ "import-interwiki-sourcepage": "قایناق صفحه:",
"import-interwiki-history": "صحیفه‌نین دییشمه تاریخچه‌لری‌نین هامی‌سینی کؤچور",
"import-interwiki-templates": "بوتون شابلون‌لارلا بیرلیکده",
"import-interwiki-submit": "ایچری توکمه اولسون",
@@ -2071,18 +2096,14 @@
"import-rootpage-nosubpage": "آد فضا سی \"$1\" آنا باسئ ٔآلت صحیفه اوچون اجازه وئرمیر.",
"importlogpage": "چیخاریلما گونده‌لیگی",
"importlogpagetext": "باشقا ویکیلردن، دَییشیکلیک گئچمیشلریله بیرلیک‌ده گتیریلمیش صحیفه‌لر.",
- "import-logentry-upload": "[[$1]]-ی فایل یوکله‌مکله گتیردی",
"import-logentry-upload-detail": "{{PLURAL:$1|بیر|$1}} نوسخه",
- "import-logentry-interwiki": "$1-ی ویکی‌آراسی ائتدی",
"import-logentry-interwiki-detail": "$2-دن {{PLURAL:$1|بیر|$1}} نوسخه",
"javascripttest": "جاوااسکریپت تِستی",
- "javascripttest-title": "$1 تِستلری ایشله‌دیلیر",
"javascripttest-pagetext-noframework": "بو صحیفه، جاوااسکریپت تِستلرینی ایشلدمگه ساخلانیلیب‌دیر.",
"javascripttest-pagetext-unknownframework": "تانینمامیش تِست ائتمه سیستِمی «$1».",
"javascripttest-pagetext-frameworks": "لوطفاً بو تِست ائتمه سیستِملرین بیرینی سئچین: $1",
"javascripttest-pagetext-skins": "تِستلرین ایجرا ائتمک اوچون بیر قابیق سئچین:",
"javascripttest-qunit-intro": "mediawiki.org-دا [$1 تِست ائتمه سندلندیرمه‌لری]نه باخین.",
- "javascripttest-qunit-heading": "مئدیاویکی جاوااسکریپت QUnit تِست مجموعه‌سی",
"tooltip-pt-userpage": "ایستیفاده‌چی صفحه‌نیز",
"tooltip-pt-anonuserpage": "سیز او آی‌پی آدرسیله دَییشیکلیک ائتدیگینیز ایستیفاده‌چی صحیفه‌سی",
"tooltip-pt-mytalk": "دانیشیق صحیفه‌نیز",
@@ -2092,6 +2113,7 @@
"tooltip-pt-mycontris": "سیزین چالیشمالارینیزین لیستی",
"tooltip-pt-login": "گیریش ائتمه‌یینیز توصیه اولونور؛ اما گرکلی دئییل",
"tooltip-pt-logout": "چیخیش",
+ "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده سیز،آنجاق حساب یارتماق اختیاری دیر.",
"tooltip-ca-talk": "ایچینده‌کیلره گؤره دانیشیق",
"tooltip-ca-edit": "سیز بو صحیفه‌نی دَییشدیره بیلرسینیز. لوطفاً قئید ائتمه‌دن اونجه اؤن‌گؤستریش دویگه‌سینی ایشلدین",
"tooltip-ca-addsection": "یئنی بؤلوم یارات",
@@ -2107,9 +2129,9 @@
"tooltip-search": "{{SITENAME}}-دا آختار",
"tooltip-search-go": "اولورسا بو آددا بیر صحیفه‌یه گئت",
"tooltip-search-fulltext": "بو یازی اولان صحیفه‌لری آختار",
- "tooltip-p-logo": "آنا صحیفه‌یه باخ",
+ "tooltip-p-logo": "آنا صفحه‌یه باخ",
"tooltip-n-mainpage": "آنا صحیفه‌‌یه باخین",
- "tooltip-n-mainpage-description": "آنا صحیفه‌یه باخین",
+ "tooltip-n-mainpage-description": "آنا صفحه‌یه باخ",
"tooltip-n-portal": "پروژه‌ یه گؤره، سیز نه ایش گوره بیلرسیز، هاردا نه‌لری تاپا بیلرسیز",
"tooltip-n-currentevents": "ایندیکی اولایلارا ایلگیلی بیلگیلر تاپ",
"tooltip-n-recentchanges": "بو ویکی‌ده سون دَییشیکلرین لیستی",
@@ -2166,6 +2188,7 @@
"spam_reverting": "$1-ه باغلانتیسی اولمایان سون نوسخه‌یه قایتاریلیر",
"spam_blanking": "$1-ه باغلانتیلاری اولان بوتون نوسخه‌لر، بوشادیلیر",
"spam_deleting": "$1-ه باغلانتیلاری اولان بوتون نوسخه‌لر، سیلینیر",
+ "simpleantispam-label": "ضید هرز یازما بررسلیغی.\nبو قیسمتی'''دولدورمایین'''!",
"pageinfo-title": "«$1» اوچون بیلگیلر",
"pageinfo-not-current": "تأسفله بو بیلگیلری اسکی نوسخه‌لره وئرمک اولانماز بیر ایش‌دیر.",
"pageinfo-header-basic": "اساس معلومات‌لار",
@@ -2180,7 +2203,6 @@
"pageinfo-robot-policy": "آختاریش سیستمین دورومو",
"pageinfo-robot-index": "سییاهه آلینیشی",
"pageinfo-robot-noindex": "ایندِکسله‌نه بیلمز",
- "pageinfo-views": "گؤسترمه صحیفه‌سی",
"pageinfo-watchers": "صحیفه‌نین تاماشا‌چی سایی",
"pageinfo-few-watchers": "$1-دن آز {{PLURAL:$1|ایزله‌ین}}",
"pageinfo-redirects-name": "بو صحیفه‌یه یول‌لاندیرمالار",
@@ -2244,7 +2266,7 @@
"svg-long-desc": "SVG فایلی، $1 × $2 پیکسئل، فایلین اؤلچوسو: $3",
"svg-long-desc-animated": "فایل اس‌وی‌جی حرکت ائدن، ابعادی <span dir=\"ltr\">$1 × $2</span> پیکسل، فایل اولچوسو: $3",
"svg-long-error": "اعتبارسیز سوگ فایل: $1",
- "show-big-image": "یوکسک کیفیتلی",
+ "show-big-image": "فایلین اصلی",
"show-big-image-preview": "سیناق گؤستریشی اؤلچوسو: $1.",
"show-big-image-other": "دیگر {{PLURAL:$2|نتیج|نتیجه‌لر}}: $1.",
"show-big-image-size": "$1 × $2 پیکسئل",
@@ -2628,7 +2650,6 @@
"exif-urgency-low": "آز ($1)",
"exif-urgency-high": "چوخ($1)",
"exif-urgency-other": "ایستیفاده‌چی طرفین‌دن مویین اولونموش بیرینجی‌لیک ($1)",
- "watchlistall2": "بوتون",
"namespacesall": "بوتون",
"monthsall": "بوتون",
"confirmemail": "ایمیل-پوست اونوانینی تصدیق ائت",
@@ -2699,15 +2720,15 @@
"watchlistedit-raw-done": "ایزله‌دیکلرینیز گونجل‌لندی.",
"watchlistedit-raw-added": "{{PLURAL:$1|بیر|$1}} باشلیق آرلیریلدی:",
"watchlistedit-raw-removed": "{{PLURAL:$1|بیر|$1}} باشلیق چیخاریلدی:",
+ "watchlistedit-clear-titles": "باشلیق‌لار:",
"watchlisttools-view": "ایلگیلی دَییشیکلیکلره باخین",
"watchlisttools-edit": "ایزله‌دیکلره باخ و اونلاری دَییشدیر",
"watchlisttools-raw": "چیی ایزله‌دیکلری دَییشدیر",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|دانیشیق]])",
- "unknown_extension_tag": "تانینمامیش گنیشلندیرمه اِتیکِتی «$1»",
"duplicate-defaultsort": "'''دیقت:''' احتیمال ائدیلن «$2» دفالت آچاری، قاباقکی «$1» دفالت آچارینی گئچرسیز ائدیر.",
"version": "نوسخه‌",
"version-extensions": "قورولموش گنیشلندیرمه‌لر",
- "version-skins": "قابیقلار",
+ "version-skins": "یوکلنمیش قابیق‌لار",
"version-specialpages": "اؤزل صحیفه‌لر",
"version-parserhooks": "آیریشدیران چنگل‌لری",
"version-variables": "دَییشینلر",
@@ -2719,9 +2740,15 @@
"version-parser-function-hooks": "آیریشدیران فونکسیا چنگل‌لری",
"version-hook-name": "چنگه‌لین آدی",
"version-hook-subscribedby": "طرفیندن گیریش‌‌میش",
- "version-version": "(نسخه $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[آد سیز]",
"version-license": "مِدیاویکی لیسانسی",
"version-ext-license": "لیسانس",
+ "version-skin-colheader-name": "قابیق",
+ "version-ext-colheader-version": "سۆروم",
+ "version-ext-colheader-license": "لیسانس",
+ "version-ext-colheader-description": "آچیقلاما",
+ "version-ext-colheader-credits": "یازیچی‌لار",
"version-poweredby-credits": "بو wیکی ' ''[https://www.mediawiki.org/ مئدیاwیکی]'ع' پروقرامی ایستیفاده ائدیله‌رک يارادیلمیشدیر، یاازارلار © 2001-$1 $2.",
"version-poweredby-others": "آیریلار",
"version-credits-summary": "بو ایستفاده چیلر دییشدیر لرینه گوره [[Special:Version|مئدیاویکی]] تانیش ائدیرم.",
@@ -2811,6 +2838,8 @@
"htmlform-no": "یوخ",
"htmlform-yes": "بلی",
"htmlform-chosen-placeholder": "بیر سئچمه سئچین",
+ "htmlform-cloner-create": "چوْخراق آرتیر",
+ "htmlform-cloner-delete": "سیل",
"sqlite-has-fts": "$1 بوتون یازی آختارما دستگی‌له",
"sqlite-no-fts": "$1 بوتون یازی آختارماماق‌لا",
"logentry-delete-delete": "$1، $3 صحیفه‌سینی {{GENDER:$2|سیلدی}}",
@@ -2846,20 +2875,21 @@
"logentry-rights-rights": "$1، $3-ین قروپ عوضولوگونو $4-دن $5-ه {{GENDER:$2|دَییشدیردی}}",
"logentry-rights-rights-legacy": "$1، $3-ین قروپ عوضولوگونو {{GENDER:$2|دَییشدیردی}}",
"logentry-rights-autopromote": "$1-ین مقامی اوتوماتیک $4-دن $5-ه {{GENDER:$2|آرتیریلدی}}",
+ "logentry-upload-upload": "$1 $3 را {{GENDER:$2|یوکلندیردی}}",
"rightsnone": "(هئچ)",
+ "feedback-adding": "صحیفه‌یه گئری-بیلدیریم آرتیریلیر...",
+ "feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
+ "feedback-bugnew": "یوخلادیم. یئنی بیر خطا گؤندر",
"feedback-bugornote": "بیر تکنیکی خطانی شرح وئرمگه آماده اولساز، لوطفاً [$1 بیر باگ بیلدیرین].\nاو اولماسا، بو آشاغیداکی ساده فورم‌دان ایستیفاده ائده بیلرسینیز. سیزین باخیشینیز، ایستیفاده‌چی آدینیزلا، «[$3 $2]» صحیفه‌سینه آرتیریلاجاق‌دیر.",
- "feedback-subject": "قونو:",
- "feedback-message": "مئساژ:",
"feedback-cancel": "لغو ائت",
- "feedback-submit": "گئری-بیلدیریمی یول‌لا",
- "feedback-adding": "صحیفه‌یه گئری-بیلدیریم آرتیریلیر...",
+ "feedback-close": "اولدو",
"feedback-error1": "خطا: API-دان تانینمامیش نتیجه",
"feedback-error2": "خطا: دَییشدیرمه باشاری‌سیز اولدو",
"feedback-error3": "خطا: API-دان جاواب گلمه‌دی",
+ "feedback-message": "مئساژ:",
+ "feedback-subject": "قونو:",
+ "feedback-submit": "گؤندر",
"feedback-thanks": "تشکورلر! سیزین گئری-بیلدیریمینیز «[$2 $1]» صحیفه‌سینه گؤندریلدی.",
- "feedback-close": "اولدو",
- "feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
- "feedback-bugnew": "یوخلادیم. یئنی بیر خطا گؤندر",
"searchsuggest-search": "آختار",
"searchsuggest-containing": "ساخلانیلیر...",
"api-error-badaccess-groups": "سیزین بو ویکی‌یه فایل یوکله‌مک ایجازه‌نیز یوخدور.",
@@ -2912,6 +2942,40 @@
"duration-centuries": "{{PLURAL:$1|بیر|$1}} یوز-ایل",
"duration-millennia": "{{PLURAL:$1|بیر|$1}} مین‌ایل",
"rotate-comment": "عکس $1 {{PLURAL:$1|درجه}} ساعات عقربه‌لری ایستیقامتینده فیرلاندیریلب‌دیر",
+ "expand_templates_output": "سوْنوج",
+ "expand_templates_ok": "اوْلسون",
+ "expand_templates_remove_comments": "باخیش‌لاری سیل",
"expand_templates_generate_rawhtml": "چیی اچ‌تی‌ام‌ال گؤستر",
- "expand_templates_preview": "اؤن‌گؤستریش"
+ "expand_templates_preview": "اؤن‌گؤستریش",
+ "pagelang-name": "صفحه",
+ "pagelang-language": "دیل",
+ "pagelang-select-lang": "دیل سئچمه‌سی",
+ "mediastatistics-table-count": "فایل‌لارین سایی",
+ "mediastatistics-header-unknown": "بیلینمه‌ین",
+ "mediastatistics-header-bitmap": "بیت‌مپ گؤرونتولر",
+ "mediastatistics-header-audio": "سس",
+ "mediastatistics-header-video": "ویدیولار",
+ "mediastatistics-header-office": "دفتر",
+ "special-characters-group-latin": "لاتین",
+ "special-characters-group-latinextended": "لاتین گئنیشلندیریلمیش",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "سیمبول لار",
+ "special-characters-group-greek": "یونانی",
+ "special-characters-group-cyrillic": "کیریل",
+ "special-characters-group-arabic": "عربجه",
+ "special-characters-group-arabicextended": "گئنیشلندیریلمیش عربجه",
+ "special-characters-group-persian": "فارسجا",
+ "special-characters-group-hebrew": "عبرجه",
+ "special-characters-group-bangla": "بنگالجه",
+ "special-characters-group-tamil": "تامیلجه",
+ "special-characters-group-telugu": "تالوگوجه",
+ "special-characters-group-sinhala": "سینهالجه",
+ "special-characters-group-gujarati": "گجراتجه",
+ "special-characters-group-devanagari": "دیواناگرى",
+ "special-characters-group-thai": "تایلندجه",
+ "special-characters-group-lao": "لائو",
+ "special-characters-group-khmer": "خمر",
+ "special-characters-title-endash": "آرالیق خطی دی",
+ "special-characters-title-emdash": "آرالیق خطی چکیلیب",
+ "special-characters-title-minus": "منفی علامتی"
}
diff --git a/languages/i18n/ba.json b/languages/i18n/ba.json
index b92e7b6d..a7482099 100644
--- a/languages/i18n/ba.json
+++ b/languages/i18n/ba.json
@@ -303,7 +303,7 @@
"readonly": "Мәғлүмәттәр базаһы бикләнгән",
"enterlockreason": "Ябылыу сәбәбен һәм ваҡытын белдерегеҙ.",
"readonlytext": "Яңы мәҡәләләр өҫтәү һәм мәғлүмәттәр базаһындағы башҡа үҙгәртеүҙәр хәҙер ябылған. Был планлы хеҙмәтләндереү сәбәпле булыуы мөмкин, аҙаҡтан нормаль хәлгә ҡайтасаҡ.\n\nЯбыусы хаким ҡалдырған аңлатма:\n$1",
- "missing-article": "Мәғлүмәттәр базаһында «$1» $2 битенең һоралған тексты табылманы.\n\nБыл, ғәҙәттә, иҫкергән һылтанма буйынса юйылған биттең үҙгәртеү тарихына күскәндә килеп сыға.\n\nӘгәр хатаның сәбәбе ул булмаһа, тимәк һеҙ программала хата тапҡанһығыҙ.\nБыл турала зинһар URL-ды күрһәтеп, [[Special:ListUsers/sysop|хәкимгә]] белдерегеҙ.",
+ "missing-article": "Мәғлүмәттәр базаһында «$1» $2 битенең һоралған тексты табылманы.\n\nБыл, ғәҙәттә, иҫкергән һылтанма буйынса юйылған биттең үҙгәртеү тарихына күскәндә килеп сыға.\n\nӘгәр хатаның сәбәбе ул булмаһа, тимәк һеҙ программала хата тапҡанһығыҙ.\nБыл турала зинһар URL-ды күрһәтеп, [[Special:ListUsers/sysop|хакимгә]] белдерегеҙ.",
"missingarticle-rev": "(версия № $1)",
"missingarticle-diff": "(айырма: $1, $2)",
"readonly_lag": "Өҫтәмә сервер төп сервер менән синхронлашҡанға тиклем мәғлүмәттәр базаһы автоматик рәүештә үҙгәрештәргә ҡаршы ябылған.",
@@ -406,7 +406,7 @@
"createacct-another-submit": "Тағы бер иҫәп яҙмаһын булдырырға",
"createacct-benefit-heading": "{{SITENAME}} һеҙҙең кеүек үк кешеләр тарафынан булдырылған",
"createacct-benefit-body1": "{{PLURAL:$1|үҙгәртеү}}",
- "createacct-benefit-body2": "{{PLURAL:$1|мәҡәлә|мәҡәләнең|мәҡәлә}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|мәҡәлә|мәҡәлә|мәҡәләнең}}",
"createacct-benefit-body3": "һуңғы ваҡытта {{PLURAL:$1|ҡатнашыусы}}",
"badretype": "Һеҙ кереткән серһүҙҙәр тап килмәй.",
"userexists": "Керетелгән исем ҡулланыла инде.\nЗинһар, башҡа исем һайлағыҙ.",
@@ -496,7 +496,6 @@
"passwordreset-emailsent-capture": "Серһүҙҙе ташлау тураһындағы мәғлүмәт менән электрон хат ебәрелде, уның тексы түбәндә бирелә:",
"passwordreset-emailerror-capture": "Серһүҙҙе ташлау тураһында хәбәр итеүсе электрон хат булдырылғайны, ләкин уны {{GENDER:$2|kullanıcıya}} түбәндәге сәбәп арҡаһында ебәреп булманы: $1",
"changeemail": "Электрон почта адресын үҙгәртергә",
- "changeemail-header": "Электрон почта адресын үҙгәртеү",
"changeemail-text": "Электрон почта адресығыҙҙы үҙгәртеү өсөн түбәндәге форманы тултырығыҙ. Үҙгәртеүҙәрҙе раҫлау өсөн серһүҙегеҙҙе керетеү кәрәк буласаҡ.",
"changeemail-no-info": "Был биткә туранан ирешеү өсөн һеҙгә системала танылыу кәрәк.",
"changeemail-oldemail": "Хәҙерге электрон почта адресы:",
@@ -504,7 +503,6 @@
"changeemail-none": "(юҡ)",
"changeemail-password": "{{SITENAME}} прокты өсөн серһүҙегеҙ:",
"changeemail-submit": "Адресты үҙгәртергә",
- "changeemail-cancel": "Кире алырға",
"resettokens": "Токендарҙы ташларға",
"resettokens-text": "Иҫәп яҙмағыҙ менән бәйләнгән ҡайһы бер шәхси мәғлүмәттәрегеҙгә инеүгә юл асыусы токендарҙы ташлай алаһығыҙ.\n\nЯңылыштан уларҙы берәйһе менән уртаҡлашҡан йәки аккаунтығыҙ ваттырылған осраҡта быны эшләү мотлаҡ.",
"resettokens-no-tokens": "Ташлар өсөн токендар юҡ.",
@@ -764,7 +762,6 @@
"mergehistory-same-destination": "Сығанаҡ һәм маҡсат бит бер иш булырға тейеш түгел",
"mergehistory-reason": "Сәбәп:",
"mergelog": "Берләштереүҙәр яҙмаһы",
- "pagemerge-logentry": "[[$1]] менән [[$2]] берлештерелде ($3 тиклемге версиялар)",
"revertmerge": "Бүлергә",
"mergelogpagetext": "Түбәндә һуңғы биттәр үҙгәртеү тарихтарын берләштереүҙәр исемлеге килтерелгән.",
"history-title": "$1 битенең үҙгәртеү тарихы",
@@ -811,7 +808,6 @@
"searchrelated": "ҡағылышлы",
"searchall": "барыһы",
"showingresults": "Түбәндә №&nbsp;<strong>$2</strong> һөҙөмтәнән башлап <strong>$1</strong> {{PLURAL:$1|һөҙөмтә}} күрһәтелгән.",
- "showingresultsheader": "'''$4''' өсөн '''$3''' һөҙөмтәнән {{PLURAL:$5|1='''$1''' һөҙөмтә|'''$1 - $2''' арауығындағы һөҙөмтәләр}}",
"search-nonefound": "Был һорауға яуап биреүсе һөҙөмтәләр табылманы.",
"powersearch-legend": "Киңәйтелгән эҙләү",
"powersearch-ns": "Исем аралыҡтарында эҙләү:",
@@ -953,14 +949,14 @@
"group-user-member": "{{GENDER:$1|ҡулланыусы}}",
"group-autoconfirmed-member": "{{GENDER:$1|Автоматик раҫланған ҡулланыусы}}",
"group-bot-member": "{{GENDER:$1|бот}}",
- "group-sysop-member": "{{GENDER:$1|администратор}}",
+ "group-sysop-member": "{{GENDER:$1|хаким}}",
"group-bureaucrat-member": "{{GENDER:$1|бей}}",
"group-suppress-member": "{{GENDER:$1|күҙәтеүсе}}",
- "grouppage-user": "{{ns:project}}:Ҡулланыусылар",
- "grouppage-autoconfirmed": "{{ns:project}}:Автоматик раҫланған ҡулланыусылар",
+ "grouppage-user": "{{ns:project}}:Ҡатнашыусылар",
+ "grouppage-autoconfirmed": "{{ns:project}}:Автоматик раҫланған ҡатнашыусылар",
"grouppage-bot": "{{ns:project}}:Боттар",
- "grouppage-sysop": "{{ns:project}}:Хәкимдәр",
- "grouppage-bureaucrat": "{{ns:project}}:Бюрократтар",
+ "grouppage-sysop": "{{ns:project}}:Хакимдәр",
+ "grouppage-bureaucrat": "{{ns:project}}:Бейҙәр",
"grouppage-suppress": "{{ns:project}}:Тикшереүселәр",
"right-read": "Биттәрҙе ҡарау",
"right-edit": "Биттәрҙә мөхәррирләү",
@@ -1204,9 +1200,9 @@
"upload-proto-error": "Протокол дөрөҫ түгел",
"upload-proto-error-text": "Алыҫтан тейәү өсөн <code>http://</code> йәки <code>ftp://</code> менән башланған адрес кәрәк.",
"upload-file-error": "Эске хата",
- "upload-file-error-text": "Серверҙа ваҡытлы файл булдырған ваҡытта эске хата сыҡты.\nЗинһар, [[Special:ListUsers/sysop|хәкимгә]] мөрәжәғәт итегеҙ.",
+ "upload-file-error-text": "Серверҙа ваҡытлы файл булдырған ваҡытта эске хата сыҡты.\nЗинһар, [[Special:ListUsers/sysop|хакимгә]] мөрәжәғәт итегеҙ.",
"upload-misc-error": "Билдәһеҙ тейәү хатаһы",
- "upload-misc-error-text": "Файл тейәгәндә билдәһеҙ хата килеп сыҡты.\nЗинһар, URL адрестың дөрөҫлөгөн тикшерегеҙ һәм яңынан ҡабатлап ҡарағыҙ.\nӘгәр хата шул килеш ҡалһа, [[Special:ListUsers/sysop|хәкимгә]] мөрәжәғәт итегеҙ.",
+ "upload-misc-error-text": "Файл тейәгәндә билдәһеҙ хата килеп сыҡты.\nЗинһар, URL адрестың дөрөҫлөгөн тикшерегеҙ һәм яңынан ҡабатлап ҡарағыҙ.\nӘгәр хата шул килеш ҡалһа, [[Special:ListUsers/sysop|хакимгә]] мөрәжәғәт итегеҙ.",
"upload-too-many-redirects": "URL бигерәк күп йүнәлтмәләр яһай.",
"upload-http-error": "HTTP хата килеп сыҡты: $1",
"upload-copy-upload-invalid-domain": "Был доменға ҡараған сайттарҙан файл күсереү асыҡ түгел",
@@ -1372,14 +1368,11 @@
"randomincategory": "Категориялағы осраҡлы бит",
"randomincategory-invalidcategory": "$1 тигән категория юҡ.",
"randomincategory-nopages": "[[:Category:$1|$1]] категорияһында биттәр юҡ.",
- "randomincategory-selectcategory": "$1 $2 категорияһынан осраҡлы биткә күсергә.",
- "randomincategory-selectcategory-submit": "Күсергә",
"randomredirect": "Осраҡлы биткә күсеү",
"randomredirect-nopages": "\"$1\" исемдәр арауығында йүнәлтеүҙәр юҡ.",
"statistics": "Статистика",
"statistics-header-pages": "Бит статистикаһы",
"statistics-header-edits": "Мөхәррирләү статистикаһы",
- "statistics-header-views": "Ҡарау статистикаһы",
"statistics-header-users": "Ҡулланыусы статистикаһы",
"statistics-header-hooks": "Башҡа статистика",
"statistics-articles": "Мәҡәләләр",
@@ -1388,13 +1381,9 @@
"statistics-files": "Рәсем йәки тауыш эстәлекле күсереп яҙылған файлдар",
"statistics-edits": "{{SITENAME}} проекты булдырылған ваҡыттан башлап үҙгәртеүҙәр һаны",
"statistics-edits-average": "Уртаса бер биткә тура килгән төҙәтеүҙәр һаны",
- "statistics-views-total": "Ҡарап сығыуҙар",
- "statistics-views-total-desc": "Булмаған биттәрҙе һәм махсус биттәрҙе ҡарап сығыуҙарҙы үҙ эсенә алмай",
- "statistics-views-peredit": "Бер үҙгәртеүгә ҡарап сығыуҙар",
"statistics-users": "Теркәлгән [[Special:ListUsers|ҡатнашыусылар]]",
"statistics-users-active": "Әүҙем ҡатнашыусылар",
"statistics-users-active-desc": "Һуңғы {{PLURAL:$1|1=көндә|$1 көндә}} ниндәйҙер эшмәкәрлек башҡарған ҡатнашыусылар",
- "statistics-mostpopular": "Иң күп ҡаралған биттәр",
"pageswithprop": "Үҙенсәлектәре ҡайтанан билдәләнгән биттәр",
"pageswithprop-legend": "Үҙенсәлектәре ҡайтанан билдәләнгән биттәр",
"pageswithprop-text": "Бында айырым үҙенсәлектәре ҡулдан яңыртып билдәләнгән биттәр һанала.",
@@ -1434,7 +1423,6 @@
"uncategorizedtemplates": "Категорияланмаған ҡалыптар",
"unusedcategories": "Ҡулланылмаған категориялар",
"unusedimages": "Ҡулланылмаған файлдар",
- "popularpages": "Популяр биттәр",
"wantedcategories": "Кәрәкле категориялар",
"wantedpages": "Кәрәкле биттәр",
"wantedpages-badtitle": "Һорау һөҙөмтәләрендә дөрөҫ булмаған исем: $1",
@@ -1485,7 +1473,6 @@
"querypage-disabled": "Был махсус бит һөҙөмтәлелекте арттырыу өсөн ябылған.",
"booksources": "Китап сығанаҡтары",
"booksources-search-legend": "Китап сығанаҡтарын эҙлә",
- "booksources-go": "Эҙлә",
"booksources-text": "Түбәндәге исемлектә — китаптар һатыу менән шөғөлләнеүсе сайттарға һәм китапханаларҙың эҙләү системаларына һылтанмалар, һәм уларҙа һеҙ эҙләгән китаптар тураһында өҫтәмә мәғлүмәт булыуы мөмкин.",
"booksources-invalid-isbn": "Күрһәтелгән ISBN номерҙа хата булырға тейеш. Зинһар, номерҙы сығанаҡтан дөрөҫ күсереүегеҙҙе тикшерегеҙ.",
"specialloguserlabel": "Башҡарыусы:",
@@ -1602,7 +1589,7 @@
"wlheader-enotif": "Электрон почта аша белдереү индерелгән.",
"wlheader-showupdated": "Һеҙҙең аҙаҡҡы кереүегеҙҙән һуң үҙгәргән биттәр '''ҡалын''' шрифт менән күрһәтелгән.",
"wlnote": "Түбәндә $3 $4 ваҡытына тиклем аҙаҡҡы {{PLURAL:$2|1=сәғәт|'''$2''' сәғәт}} эсендә эшләнгән {{PLURAL:$1|1=үҙгәртеү|'''$1''' үҙгәртеү}} күрһәтелгән.",
- "wlshowlast": "Һуңғы $1 сәғәт $2 көн өсөн күрһәт $3",
+ "wlshowlast": "Һуңғы $1 сәғәт $2 көн өсөн күрһәт",
"watchlist-options": "Күҙәтеү исемлеге көйләүҙәре",
"watching": "Күҙәтеү исемлегенә өҫтәү...",
"unwatching": "Күҙәтеү исемлегенән сығарыу...",
@@ -1649,7 +1636,6 @@
"delete-toobig": "Был биттең үҙгәртеүҙәр тарихы бик оҙон, $1 {{PLURAL:$1|өлгөнән}} күберәк.\n{{SITENAME}} проектының эшмәкәрлеге боҙолмауы маҡсатында бындай биттәрҙе юйыу тыйылған.",
"delete-warning-toobig": "Был биттең үҙгәртеүҙәр тарихы бик оҙон, $1 {{PLURAL:$1|өлгөнән}} күберәк.\nБитте юйыу {{SITENAME}} проектының эшмәкәрлеге боҙолоуына килтереүе мөмкин, һаҡлыҡ менән эш итегеҙ.",
"rollback": "Үҙгәртеүҙәрҙе кире ҡайтарырға",
- "rollback_short": "Кире ҡайтарырға",
"rollbacklink": "кире",
"rollbacklinkcount": "$1 {{PLURAL:$1|1=төҙәтеүҙе|төҙәтеүҙе}} кире алырға",
"rollbacklinkcount-morethan": "$1 {{PLURAL:$1|1=төҙәтеүҙән|төҙәтеүҙән}} күберәк кире алырға",
@@ -1761,26 +1747,26 @@
"namespace_association": "Бәйле арауыҡ",
"tooltip-namespace_association": "Һайланған исемдәр арауығы менән бәйле әңгәмә(йәки тема) исем арауыҡтарын ҡушыр өсөн был билдәне ҡуйығыҙ.",
"blanknamespace": "(Төп)",
- "contributions": "{{GENDER:$1|Ҡатнашыусы}} өлөшө",
- "contributions-title": "$1 исемле ҡулланыусының кереткән өлөшө",
- "mycontris": "Өлөш",
- "contribsub2": "{{GENDER:$3|$1}} өлөшө ($2)",
+ "contributions": "{{GENDER:$1|Ҡатнашыусы}} башҡарған эш",
+ "contributions-title": "$1 исемле ҡатнашыусы башҡарған эш",
+ "mycontris": "Башҡарған эштәр",
+ "contribsub2": "{{GENDER:$3|$1}} башҡарған эше ($2)",
"nocontribs": "Күрһәтелгән шарттарға яуап биргән үҙгәртеүҙәр табылманы.",
"uctop": "(ағымдағы)",
"month": "Айҙан башлап (һәм элегерәк):",
"year": "Йылдан башлап (һәм элегерәк):",
- "sp-contributions-newbies": "Яңы иҫәп яҙмалары кереткән өлөштө генә күрһәтергә",
+ "sp-contributions-newbies": "Яңы иҫәп яҙмалары башҡарған эште генә күрһәтергә",
"sp-contributions-newbies-sub": "Яңы иҫәп яҙмалары өсөн",
- "sp-contributions-newbies-title": "Яңы иҫәп яҙмалары өсөн ҡатнашыусы өлөшө",
+ "sp-contributions-newbies-title": "Яңы теркәлгән ҡатнашыусылар башҡарған эш",
"sp-contributions-blocklog": "блоклау яҙмалары",
- "sp-contributions-deleted": "ҡулланыусының юйылған өлөшө",
+ "sp-contributions-deleted": "юйылған үҙгәртеүҙәр",
"sp-contributions-uploads": "тейәүҙәр",
"sp-contributions-logs": "журналдар",
"sp-contributions-talk": "фекерләшеү",
"sp-contributions-userrights": "ҡатнашыусы хоҡуҡтарын идаралау",
"sp-contributions-blocked-notice": "Әлеге ваҡытта был ҡатнашыусы бикле.\nТүбәндә бикләү яҙмаларынан һуңғы ҡатнашыусыны бикләү яҙмаһы килтерелгән:",
"sp-contributions-blocked-notice-anon": "Әлеге ваҡытта был IP адрес бикле.\nТүбәндә бикләү яҙмаларынан һуңғы адресты бикләү яҙмаһы килтерелгән:",
- "sp-contributions-search": "Өлөштәрҙе эҙләү",
+ "sp-contributions-search": "Башҡарған эште эҙләү",
"sp-contributions-username": "Ҡулланыусының IP-адресы йәки исеме:",
"sp-contributions-toponly": "Һуңғы өлгөләрҙе генә күрһәтергә",
"sp-contributions-submit": "Эҙлә",
@@ -2020,7 +2006,6 @@
"import": "Биттәрҙе тейәү",
"importinterwiki": "Вики проекттар-ара индереү",
"import-interwiki-text": "Вики проектты һәм тейәлә торған биттең исемен күрһәтегеҙ.\nҮҙгәртеү ваҡыттары һәм автор исемдәре һаҡланасаҡ.\nБөтә вики проекттары-ара тейәүҙәр [[Special:Log/import|тейәү яҙмалары журналында]] теркәлә.",
- "import-interwiki-source": "Сығанаҡ вики проект/бит:",
"import-interwiki-history": "Был биттең бөтә үҙгәртеү тарихын яҙҙырырға",
"import-interwiki-templates": "Бөтә ҡалыптарҙы индерергә",
"import-interwiki-submit": "Тейәргә",
@@ -2066,13 +2051,11 @@
"import-logentry-interwiki": "$1 битен вики проекттары-ара тейәгән",
"import-logentry-interwiki-detail": "$2 өлгөнән $1 {{PLURAL:$1|1=өлгө|өлгө}}",
"javascripttest": "\nJavaScript тикшереү",
- "javascripttest-title": "$1 тикшеренеү үткәрелә",
"javascripttest-pagetext-noframework": "Был бит JavaScript тикшеренеүҙәре үткәреү өсөн резервланған.",
"javascripttest-pagetext-unknownframework": "Билдәһеҙ тикшеренеүҙәр мөхитнамәһе \"$1\".",
"javascripttest-pagetext-frameworks": "Зинһар өсөн киләһе тикшеренеүҙәр мөхитнамәһенең береһен һайлап алығыҙ: $1",
"javascripttest-pagetext-skins": "Һынауҙы башлау өсөн тышса һыйлағыҙ.",
"javascripttest-qunit-intro": "mediawiki.org адресы буйынса ҡарағыҙ [$1 тест үткәреү документацияһы].",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit өсөн һынауҙар йыйлмаһы.",
"tooltip-pt-userpage": "Ҡулланыусы битегеҙ",
"tooltip-pt-anonuserpage": "IP адресығыҙ өсөн ҡатнашыусы бите",
"tooltip-pt-mytalk": "Фекерләшеү битегеҙ",
@@ -2171,7 +2154,6 @@
"pageinfo-robot-policy": "Эҙләү роботтары тарафынан индексацияланыу",
"pageinfo-robot-index": "Рөхсәт ителгән",
"pageinfo-robot-noindex": "Рөхсәт ителмәй",
- "pageinfo-views": "Ҡарау һаны",
"pageinfo-watchers": "Битте күҙәтеүселәр һаны",
"pageinfo-few-watchers": "Күп тигәндә $1 {{PLURAL:$1|күҙәтеүсе}}",
"pageinfo-redirects-name": "Был биткә йүнәлтеүҙәр һаны",
@@ -2619,7 +2601,6 @@
"exif-urgency-low": "Түбән ($1)",
"exif-urgency-high": "Юғары ($1)",
"exif-urgency-other": "Ҡулланыусы билдәләгән өҫтөнлөк ($1)",
- "watchlistall2": "бөтә",
"namespacesall": "бөтә",
"monthsall": "бөтә",
"confirmemail": "Электрон почта адресын раҫлау",
@@ -2692,7 +2673,6 @@
"watchlisttools-edit": "Күҙәтеү исемлеген ҡарарға/төҙәтергә",
"watchlisttools-raw": "Текст һымаҡ үҙгәртеү",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|әңгәмә]])",
- "unknown_extension_tag": "Билдәһеҙ \"$1\" киңәйтеү тегы",
"duplicate-defaultsort": "'''Иҫкәртеү:''' \"$2\" ғәҙәттәге тәпртипкә килтереү асҡысы элекке \"$1\" ғәҙәттәге тәртипкә килтереү асҡысын үҙгәртә.",
"version": "MediaWiki өлгөһө",
"version-extensions": "Ҡуйылған киңәйтеүҙәр",
@@ -2708,7 +2688,7 @@
"version-parser-function-hooks": "Уҡыу ҡоралдары функцияларын эләктереп алыусылар",
"version-hook-name": "Эләктереп алыусы исеме",
"version-hook-subscribedby": "Яҙҙырылған",
- "version-version": "($1 өлгөһө)",
+ "version-version": "($1)",
"version-license": "Рөхсәтнамә",
"version-poweredby-credits": "Был вики проект '''[https://www.mediawiki.org/ MediaWiki]''' нигеҙендә эшләй, copyright © 2001-$1 $2.",
"version-poweredby-others": "башҡалар",
@@ -2754,6 +2734,7 @@
"specialpages-group-wiki": "Мәғлүмәттәр һәм ҡоралдар",
"specialpages-group-redirects": "Йүнәлтеүсе махсус биттәр",
"specialpages-group-spam": "Спамға ҡаршы ҡоралдар",
+ "specialpages-group-developer": "Программист ҡоралдары",
"blankpage": "Буш бит",
"intentionallyblankpage": "Был бит аңлы рәүештә буш ҡалдырылған.",
"external_image_whitelist": "#Был юлды нисек бар, шулай ҡалдырығыҙ<pre>\n#Бында регуляр аңлатма өлөштәрен ҡуйығыҙ(// араһында булған өлөштәрен)\n#Улар тышҡы рәсемдәрҙең URL адрестары менән сағыштырыласаҡ.\n#Яраҡлылары рәсем рәүешендә күрһәтеләсәк, ҡалғандары рәсемгә һылтанма рәүешендә күрһәтеләсәк.\n# # менән башланған юлдар иҫкәрмә тип иҫәпләнә.\n#Юлдар ҙур/бәләкәй хәрефкә һиҙгер\n\n# Регуляр аңлатма өлөштәрен ошо юл өҫтөнә ҡуйығыҙ. Был юлды нисек бар, шулай ҡалдырығыҙ.</pre>",
@@ -2837,19 +2818,20 @@
"logentry-rights-rights-legacy": "$1 $3 өсөн төркөмдәрҙәге ағзалыҡты {{GENDER:$2|үҙгәртте}}",
"logentry-rights-autopromote": "$1 {{GENDER:$2|}} автоматик рәүештә {{GENDER:$2|}} $4 урынына $5 ителде.",
"rightsnone": "(юҡ)",
+ "revdelete-summary": "үҙгәртеүҙәр тасуирламаһы",
+ "feedback-adding": "Биткә кире белдереү өҫтәлә",
+ "feedback-bugcheck": "Шәп! Тик [$1 билдәле хаталар] исемлегендә оҡшаш белдереүҙең булмауына иғтибар итегеҙ.",
+ "feedback-bugnew": "Тикшерҙем. Яңы хата тураһында белдерергә",
"feedback-bugornote": "Әгәр Һеҙ техник проблеманы ентекле рәүештә аңлатырға теләһәгеҙ, зинһар, [$1 хата тураһында белдерегеҙ].\nБашҡа осраҡта, ошо ябай форманы ҡуллана алаһығыҙ. Комментарийығыҙ «[$3 $2]» битенә ҡулланыусы исемегеҙ һәм браузер мәғлүмәте менән өҫтәләсәк.",
- "feedback-subject": "Тема:",
- "feedback-message": "Хәбәр:",
"feedback-cancel": "Кире алырға",
- "feedback-submit": "Кире белдереү ебәрергә",
- "feedback-adding": "Биткә кире белдереү өҫтәлә",
+ "feedback-close": "Әҙер",
"feedback-error1": "Хата: API-нан беленмәгән хата",
"feedback-error2": "Хата: Мөхәррирләү хатаһы",
"feedback-error3": "Хата: API-нан яуап юҡ",
+ "feedback-message": "Хәбәр:",
+ "feedback-subject": "Тема:",
+ "feedback-submit": "Кире белдереү ебәрергә",
"feedback-thanks": "Рәхмәт! Һеҙҙең фекерегеҙ «[$2 $1]» битенә өҫтәлде.",
- "feedback-close": "Әҙер",
- "feedback-bugcheck": "Шәп! Тик [$1 билдәле хаталар] исемлегендә оҡшаш белдереүҙең булмауына иғтибар итегеҙ.",
- "feedback-bugnew": "Тикшерҙем. Яңы хата тураһында белдерергә",
"searchsuggest-search": "Эҙләү",
"searchsuggest-containing": "эстәлегендә...",
"api-error-badaccess-groups": "Һеҙгә был викиға файлдар күсереү рөхсәт ителмәй",
@@ -2896,7 +2878,7 @@
"duration-minutes": "$1 {{PLURAL:$1|1=минут|минут}}",
"duration-hours": "$1 {{PLURAL:$1|1=сәғәт|сәғәт}}",
"duration-days": "$1 {{PLURAL:$1|1=көн|көн}}",
- "duration-weeks": "$1 {{PLURAL:$1|аҙна|аҙна|аҙналар}}",
+ "duration-weeks": "$1 {{PLURAL:$1|аҙна|аҙналар|аҙна}}",
"duration-years": "$1 {{PLURAL:$1|1=йыл|йылдар}}",
"duration-decades": "$1 {{PLURAL:$1|1=ун көнлөк|ун көнлөктәр}}",
"duration-centuries": "$1 {{PLURAL:$1|1=быуат|быуаттар}}",
diff --git a/languages/i18n/bar.json b/languages/i18n/bar.json
index 4ebcf4a9..8bfc90e8 100644
--- a/languages/i18n/bar.json
+++ b/languages/i18n/bar.json
@@ -511,7 +511,6 @@
"search-interwiki-more": "(mea)",
"searchrelated": "vawandt",
"searchall": "olle",
- "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' vo '''$3'''|Ergebniss '''$1–$2''' vo '''$3'''}} fia '''$4'''",
"search-nonefound": "Fia dei Suachofrog gibts koa Ergebnis",
"powersearch-legend": "Daweiterde Suach",
"powersearch-ns": "Suach in Nåmensraim:",
@@ -577,11 +576,15 @@
"rcnotefrom": "Untn san de Endarunga seit '''$2''' (bis za '''$1''' Ozoagn).",
"rclistfrom": "Nua Endarunga seit $3 $2 zoagn",
"rcshowhideminor": "Kloane Endarunga $1",
+ "rcshowhideminor-hide": "Ausblendn",
"rcshowhidebots": "Bots $1",
"rcshowhideliu": "Eigloggte Nutza $1",
+ "rcshowhideliu-hide": "Ausblendn",
"rcshowhideanons": "Anonyme Nutza $1",
+ "rcshowhideanons-hide": "Ausblendn",
"rcshowhidepatr": "Kontrolliade Endarunga $1",
"rcshowhidemine": "Meine Beidreg $1",
+ "rcshowhidemine-hide": "Ausblendn",
"rclinks": "De letztn Endarunga vo de letztn $2 Dog zoagn<br />$3",
"diff": "Untaschied",
"hist": "Versiona",
@@ -698,8 +701,6 @@
"statistics-files": "Aufféglooderne Daatein",
"statistics-edits": "Seitenbeorweitungen",
"statistics-edits-average": "Beorweitungen pró Seiten im Durchschnit",
- "statistics-views-total": "Seitenaufruaff gsåmmt",
- "statistics-mostpopular": "Dé am moastbsuachten Seiten",
"doubleredirects": "Doppede Weidaloatunga",
"doubleredirectstext": "Af dea Seitn stengan Weidaloatunga, de wo af Weidaloatunga zoang.\n\nA <del>duachgstrichane</del> Eidrog is scho repariad worn.",
"double-redirect-fixed-maintenance": "Doppede Weidaloatunga vo [[$1]] af [[$2]] mid oana Aktion reparian.",
@@ -723,7 +724,6 @@
"uncategorizedtemplates": "Néd kategorisirde Vurlong",
"unusedcategories": "Néd bnutzde Kategorien",
"unusedimages": "Néd bnutzde Daatein",
- "popularpages": "Dé bliabtersten Seiten",
"wantedcategories": "Bnutzde, ower néd åglégte Kategorien",
"wantedpages": "Gwynschde Seiten",
"wantedpages-badtitle": "Ungütiger Titel im Ergeewnis: $1",
@@ -755,7 +755,6 @@
"pager-older-n": "{{PLURAL:$1|vorheriga|vorherign $1}}",
"booksources": "ISBN-Suach",
"booksources-search-legend": "Suach noch Bezugsquejn fia Biacha",
- "booksources-go": "Suach",
"log": "Logbiacha",
"all-logs-page": "Olle effmtlichen Logbiacher",
"alllogstext": "Des is de kombinierte Anzeige vo alle in {{SITENAME}} gführten Logbiacha. Die Ausgabe ko durch de Auswahl vom Logbuchtyp, vom Benutzer oder vom Seitntitel eigschränkt wern.",
@@ -835,7 +834,7 @@
"wlheader-enotif": "Da E-Mail-Benoochrichtigungsdeanst is aktivierd.",
"wlheader-showupdated": "Seiten mid noh néd gseengne Änderrungen wern '''fett''' dorgstöd.",
"wlnote": "Es {{PLURAL:$1|fóigt d' létzde Änderrung|fóing d' létzden '''$1''' Änderrungen}} voh da/dé {{PLURAL:$2|Stund| '''$2''' Stunden}}. Staund: $3, $4 Uar.",
- "wlshowlast": "Zoag dé Änderrungen voh dé létzden $1 Stunden, $2 Dog óder $3 (in dé létzden 30 Dog).",
+ "wlshowlast": "Zoag dé Änderrungen voh dé létzden $1 Stunden, $2 Dog óder (in dé létzden 30 Dog).",
"watchlist-options": "Mei Beobochta: Optiona",
"watching": "Beówochten ...",
"unwatching": "Néd Beówochten",
@@ -1127,7 +1126,6 @@
"metadata-fields": "De foigandn Fejda vo de EXIF-Metadaten, wo im MediaWiki-Systemtext ogebm san, wean auf Buidbschriebseitn mid eikloppta Metadatentabejn ozoagt.\nWeidane wean standardmassi ned ozoagt.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-gpsspeed": "Gschwindigkeid vom GPS-Empfänger",
"exif-componentsconfiguration-0": "Gibts néd",
- "watchlistall2": "olle",
"namespacesall": "olle",
"monthsall": "olle",
"confirmemail": "E-Post-Adressn bestäting (Authentifiziarung)",
@@ -1165,7 +1163,6 @@
"watchlisttools-edit": "normal beorbatn",
"watchlisttools-raw": "Im Roh-Listnformat beorbatn",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussión]])",
- "unknown_extension_tag": "Unbekaunnter Extension-Tag „$1“",
"duplicate-defaultsort": "Obocht: Da Sortiasschlossl \"$2\" ibaschreibt in friaan Schlissl \"$1\".",
"version": "Versión",
"version-extensions": "Installierde Daweiterrungen",
@@ -1181,7 +1178,7 @@
"version-parser-function-hooks": "Parserfunkziónen",
"version-hook-name": "Schnidstönnaum",
"version-hook-subscribedby": "Aufruaff voh",
- "version-version": "(Versión $1)",
+ "version-version": "($1)",
"version-license": "Lizenz",
"version-poweredby-credits": "Dé Nétzseiten braucht '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
"version-poweredby-others": "åndre",
@@ -1240,6 +1237,7 @@
"htmlform-selectorother-other": "Åndre",
"logentry-move-move_redir": "$1 hod de Seitn $3 af $4 {{GENDER:$2|verschom}} und hod dabei a Weidaloatung ibaschriem",
"logentry-move-move_redir-noredirect": "$1 hod de Seitn $3 af $4 {{GENDER:$2|verschom}} und dabei a Weidaloatung ibaschriem, ohne a neiche ozlegn",
+ "revdelete-summary": "Zåmmfossungskommentar",
"searchsuggest-search": "Suach",
"searchsuggest-containing": "Voitextsuach noch ..."
}
diff --git a/languages/i18n/bbc-latn.json b/languages/i18n/bbc-latn.json
index 829e636e..6ecfcb3f 100644
--- a/languages/i18n/bbc-latn.json
+++ b/languages/i18n/bbc-latn.json
@@ -246,7 +246,6 @@
"passwordreset-username": "Goar pamangke",
"passwordreset-domain": "Domain:",
"changeemail-none": "(Ndada)",
- "changeemail-cancel": "Sundati",
"bold_sample": "Surat tobal",
"bold_tip": "Surat na hapal",
"italic_sample": "Guratan Italic",
@@ -331,7 +330,6 @@
"search-suggest": "On do ra maksudmu: $1",
"searchrelated": "marpandomuan",
"searchall": "sude",
- "showingresultsheader": "{{PLURAL:$5|Hasil '''$1''' sian '''$3'''|Hasil '''$1 - $2''' sian '''$3'''}} tu '''$4'''",
"search-nonefound": "Ndang adong hasil na suman tu pangidoan",
"powersearch-toggleall": "Sude",
"powersearch-togglenone": "Ndang adong",
@@ -403,7 +401,6 @@
"move": "Paorot",
"pager-newer-n": "{{PLURAL:$1|na imbaru|na imbaru $1}}",
"pager-older-n": "{{PLURAL:$1|na leleng|$1 na lumeleng}}",
- "booksources-go": "Torushon",
"log": "Angka log",
"allpages": "Sude alaman",
"allarticles": "Sude alaman",
@@ -419,7 +416,7 @@
"watchlistfor2": "Laho tu $1 $2",
"watch": "Parrohahon",
"unwatch": "Sundat mamarrohahon",
- "wlshowlast": "Pataridahon $1 jom $2 ari $3 na parpudi",
+ "wlshowlast": "Pataridahon $1 jom $2 ari na parpudi",
"actioncomplete": "Sae ulaon",
"actionfailed": "Ulaon sundat",
"dellogpage": "Log pasesaan",
@@ -535,7 +532,6 @@
"metadata-fields": "Angka bidang metadata gombar na dipajojor di bagasan tona on naeng dipamasuk di hataridaan ni alaman gombar tingki tabel metadata dipametmet. Data na asing gabe dibunihon songon naung ditontuhon.\n * make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "Bolak",
"exif-imagelength": "Timbo",
- "watchlistall2": "Sasude",
"namespacesall": "sude",
"monthsall": "Sasude",
"watchlisttools-edit": "Pataridahon jala patota daftar siparrohahonon",
diff --git a/languages/i18n/bcc.json b/languages/i18n/bcc.json
index 08c0ddea..9f056214 100644
--- a/languages/i18n/bcc.json
+++ b/languages/i18n/bcc.json
@@ -10,7 +10,8 @@
"아라",
"RigiMahnoor",
"Oldstoneage",
- "Baloch Afghanistan"
+ "Baloch Afghanistan",
+ "Mjbmr"
]
},
"tog-underline": ":لینکانآ خط کش",
@@ -27,6 +28,7 @@
"tog-watchdefault": "منی اصلاح کتگین فایل و پیجانء چارگ لیستء توکا هوار کن",
"tog-watchmoves": "منی سُرینتگین فایل و پیجانء چارگ لیستء توکا هوار کن",
"tog-watchdeletion": "منی حذف کتگین فایل و پیجانء چارگ لیستء توکا هوار بکن",
+ "tog-watchrollback": "آ دیمانی آڈ کورتین که آوانا برگردان کورته اون په منی پیگیری لیستی هاتیرا",
"tog-minordefault": "په طور پیش فرض کل اصلاحات آ په داب جزی مشخص کن",
"tog-previewontop": "بازبین پیش دار پیش چه جعبه اصلاح",
"tog-previewonfirst": "ته اولین اصلاح بازبینی پیش دار",
@@ -59,68 +61,68 @@
"editfont-monospace": "فۆنت گۆن مالومێن پاسلگ",
"editfont-sansserif": "بئ گۆشگێن فۆنت",
"editfont-serif": "گۆشه دارێن فۆنت",
- "sunday": "یک شنبه",
- "monday": "دوشنبه",
- "tuesday": "سی شنبه",
- "wednesday": "چارشنبه",
- "thursday": "پنچ شنبه",
- "friday": "آدینگ",
- "saturday": "شنبه",
- "sun": "ی.شنبه",
- "mon": "د.شنبه",
- "tue": "س.شنبه",
- "wed": "چ.شنبه",
- "thu": "پ.شنبه",
- "fri": "آدینگ",
- "sat": "شنبه",
- "january": "ژانویه",
- "february": "فوریه",
- "march": "مارس",
+ "sunday": "یک شمبی",
+ "monday": "دوشمبی",
+ "tuesday": "سئه شمبی",
+ "wednesday": "چارشمبی",
+ "thursday": "پنچ شمبی",
+ "friday": "آدینگ ٬جوما",
+ "saturday": "شمبی",
+ "sun": "یک شمی",
+ "mon": "دو شمبی",
+ "tue": "سئه شمبی",
+ "wed": "چار شمبی",
+ "thu": "پنچ شمبی",
+ "fri": "آدینگ٬ جوما",
+ "sat": "شمبی",
+ "january": "جنوری",
+ "february": "پیبروری",
+ "march": "مارچ",
"april": "آپریل",
"may_long": "می",
"june": "جون",
"july": "جولای",
"august": "آگوست",
- "september": "سپتامبر",
- "october": "اکتبر",
- "november": "نومبر",
+ "september": "سپٹامبر",
+ "october": "اکتوبر",
+ "november": "نوامبر",
"december": "دسمبر",
- "january-gen": "ژانویه",
- "february-gen": "فوریه",
- "march-gen": "مارس",
+ "january-gen": "جنوری",
+ "february-gen": "پیبروری",
+ "march-gen": "مارچ",
"april-gen": "آپریل",
"may-gen": "می",
"june-gen": "جون",
"july-gen": "جولای",
"august-gen": "آگوست",
- "september-gen": "سپتمبر",
- "october-gen": "اکتبر",
- "november-gen": "نومبر",
+ "september-gen": "سپٹامبر",
+ "october-gen": "اکتوبر",
+ "november-gen": "نوامبر",
"december-gen": "دسمبر",
- "jan": "جن",
- "feb": "فب",
- "mar": "ما",
- "apr": "آپر",
+ "jan": "جنوری",
+ "feb": "پیبروری",
+ "mar": "مارچ",
+ "apr": "آپریل",
"may": "می",
"jun": "جون",
- "jul": "جول",
- "aug": "آگ",
- "sep": "سپت",
- "oct": "اکت",
- "nov": "نو",
- "dec": "دس",
- "january-date": "جانری، بهارگاه $1",
- "february-date": "فبراری، اۆستپان $1",
+ "jul": "جولای",
+ "aug": "آگوست",
+ "sep": "سپٹ\tامبر",
+ "oct": "اکتوبر",
+ "nov": "نوامبر",
+ "dec": "دسمبر",
+ "january-date": "جنوری، بهارگاه $1",
+ "february-date": "پیبروری، اۆستپان $1",
"march-date": "مارچ، مۆلمان $1",
"april-date": "اپریل، کرا $1",
"may-date": "مئ، سۆچکان $1",
"june-date": "جون، جلکان $1",
- "july-date": "جولئ، سهێل $1",
- "august-date": "اگست، ساچان $1",
- "september-date": "سپتمبر، تۆمشان $1",
+ "july-date": "جولای، سهێل $1",
+ "august-date": "اگوست، ساچان $1",
+ "september-date": "سپٹامبر، تۆمشان $1",
"october-date": "اکتۆبر، سارتان $1",
- "november-date": "نومبر، گۆپشان $1",
- "december-date": "دسمبر، تاکشان $1",
+ "november-date": "نوامبر، گۆپشان $1",
+ "december-date": "دسمبر، تۆمشان $1",
"pagecategories": "{{PLURAL:$1|دسته|دسته جات}}",
"category_header": "صفحات ته دسته \"$1\"",
"subcategories": "زیردسته جات",
@@ -142,18 +144,18 @@
"article": "محتوا صفحه",
"newwindow": "(ته نوکین پنچره ی پچ کن)",
"cancel": "کنسل",
- "moredotdotdot": "گیشتر...",
+ "moredotdotdot": "گیشتیر...",
"morenotlisted": "ائ لیست پکا نه انت",
- "mypage": "تاک",
+ "mypage": "دیم یا تاک",
"mytalk": "گپ",
"anontalk": "گپ کن گون ای آی پی",
"navigation": "گردگ",
"and": "&#32;و",
- "qbfind": "درگیزگ",
+ "qbfind": "ودی کورتین",
"qbbrowse": "بروز",
- "qbedit": "اصلاح",
- "qbpageoptions": "صفحه",
- "qbmyoptions": "منی صفحات",
+ "qbedit": "ایڈیٹ",
+ "qbpageoptions": "ای دیم",
+ "qbmyoptions": "منی دیمان",
"faq": "ب.ج.س",
"faqpage": "Project:ب.ج.س",
"actions": "کاران",
@@ -161,57 +163,58 @@
"variants": "گوشگان",
"navigation-heading": "منوء ناویگ",
"errorpagetitle": "حطا",
- "returnto": "تررگ به $1.",
- "tagline": "چه {{SITENAME}}",
- "help": "کمک",
+ "returnto": "شوتین بی $1.",
+ "tagline": "شه {{SITENAME}}",
+ "help": "کومک",
"search": "گردگ",
"searchbutton": "گردگ",
- "go": "برو",
- "searcharticle": "برو",
- "history": "تاریح صفحه",
- "history_short": "تاریح",
+ "go": "برا",
+ "searcharticle": "برا",
+ "history": "دیمی تاریخ",
+ "history_short": "دپتر",
"updatedmarker": "په روچ بیتگین چه منی اهری اهری چارگ",
"printableversion": "نسخه چهاپی",
"permalink": "دایمی لینک",
"print": "چهاپ",
- "view": "چارگ",
- "view-foreign": "بچار مان $1",
- "edit": "اصلاح",
- "edit-local": "لوکال دسکریپشنء اصلاح کن",
- "create": "شرکتن",
- "create-local": "لوکال دسکریپشنء هوار کن",
- "editthispage": "ای صفحه اصلاح کن",
- "create-this-page": "ای صفحه شرکتن کن",
- "delete": "حذف",
- "deletethispage": "ای صفحه حذف کن",
- "undeletethispage": "ائ تاکء دلیت مکن",
- "undelete_short": "حذف مکن {{PLURAL:$1|one edit|$1 edits}}",
- "viewdeleted_short": "چارگ {{باز،زیاتیگ:$1|یکین حذف بوتگین اصلاح|$1 اصلاح کتگانء حذف بکن}}",
- "protect": "حفاظت",
- "protect_change": "عوض کن",
- "protectthispage": "ای صفحه حفاظت کن",
+ "view": "دیستین",
+ "view-foreign": "بگیند بی $1",
+ "edit": "ایڈیٹ",
+ "edit-local": "لوکال دسکریپشنء ایڈیٹ کورتین",
+ "create": "جوڑ کورتین",
+ "create-local": "لوکال دسکریپشنء اڈ کورتین",
+ "editthispage": "ای دیما ایڈیٹ کورتین",
+ "create-this-page": "ای دیمی جوڑ کورتین",
+ "delete": "پاک کورتین",
+ "deletethispage": "ای دیمی پاک کورتین",
+ "undeletethispage": "ای دیما پاک مکن",
+ "undelete_short": "پاک مکن {{PLURAL:$1|one edit|$1 edits}}",
+ "viewdeleted_short": "نمایش داتین {{PLURAL:$1|یک پاک بوتینوکین ای\tڈیٹی |$1 پاک بوتینوکین ای\tڈیٹ}}",
+ "protect": "ساتیتین",
+ "protect_change": "بدل کورتین",
+ "protectthispage": "ای دیما بسات",
"unprotect": "پروتکشنء ٹگل بدئ",
"unprotectthispage": "ائ تاکء پروتکشنء ٹگل بدئ",
- "newpage": "نوکین صفحه",
- "talkpage": "ای صفحه بحث کن",
+ "newpage": "نوکین دیم",
+ "talkpage": "ای دیما بحث کن",
"talkpagelinktext": "گپ کن",
- "specialpage": "حاصین صفحه",
+ "specialpage": "هاسین دیم",
"personaltools": "شخصی وسایل",
"articlepage": "محتوا صفحه به گند",
- "talk": "بحث",
+ "talk": "گپ",
"views": "چارگان",
"toolbox": "ابزار",
"userpage": "به گند صفحه کاربر",
"projectpage": "به گند صفحه",
- "imagepage": "به چار فایل صفحه ءَ",
- "mediawikipage": "به گند صفحه کوله",
- "templatepage": "به گند صفحه تمپلت آ",
- "viewhelppage": "به گند صفحه کمک آ",
- "categorypage": "به گند صفحه دسته آ",
+ "imagepage": "بگیند پایلی دیما",
+ "mediawikipage": "بگیند پیامی دیما",
+ "templatepage": "بگیند تیملیتی دیما",
+ "viewhelppage": "بگیند کومکی دیما",
+ "categorypage": "بگیند کتیگوریی دیما",
"viewtalkpage": "به گند بحث آ",
- "otherlanguages": "ته دگر زبان",
+ "otherlanguages": "بی دگه زبانانی تا",
"redirectedfrom": "(غیر مستقیم بوتگ چه $1)",
"redirectpagesub": "صفحه غیر مستقیم",
+ "redirectto": "مسیری ٹگل داتین بی:",
"lastmodifiedat": " $2, $1.ای صفحه اهری تغییر دهگ بیته",
"viewcount": "ای صفحه دسترسی بیتگ {{PLURAL:$1|بار|$1رند}}.",
"protectedpage": "صفحه محافظتی",
@@ -233,8 +236,8 @@
"disclaimers": "بی میاری گیان",
"disclaimerpage": "Project:عمومی بی میاریگان",
"edithelp": "کمک اصلاح",
- "mainpage": "صفحه اصلی",
- "mainpage-description": "صفحه اصلی",
+ "mainpage": "بُنیادی دیم",
+ "mainpage-description": "بُنیادی دیم",
"policy-url": "Project:سیاست",
"portal": "پرتال انجمن",
"portal-url": "Project:پرتال انجمن",
@@ -253,16 +256,16 @@
"newmessageslinkplural": "{{PLURAL:$1|نوکین کله|999=نوکین کله هان}}",
"newmessagesdifflinkplural": "$1 {{PLURAL:$1|ٹگل داتن|پهکین ٹگل}}",
"youhavenewmessagesmulti": "شما را نوکین کوله یان هست ته $1",
- "editsection": "اصلاح",
- "editold": "اصلاح",
+ "editsection": "ایڈیٹ",
+ "editold": "ایڈیٹ",
"viewsourceold": "به گند منبع ا",
- "editlink": "اصلاح",
+ "editlink": "ایڈیٹ",
"viewsourcelink": "چارگ منبع",
"editsectionhint": ": $1اصلاح انتخاب",
"toc": "محتوا",
"showtoc": "پیش دار",
- "hidetoc": "پناه کن",
- "collapsible-collapse": "چیر داتن",
+ "hidetoc": "چیهر داتین",
+ "collapsible-collapse": "چیهر داتین",
"collapsible-expand": "تچک کتن",
"confirmable-confirm": "آیا {{GENDER:$1|شما}} مطمعین ویت?",
"confirmable-yes": "هان",
@@ -279,19 +282,19 @@
"page-atom-feed": "منبع \"$1\" Atom",
"feed-atom": "اتم",
"feed-rss": "ار اس اس",
- "red-link-title": "$1 (هنگت نیستن)",
+ "red-link-title": "$1 (ای دیم وجود نداریت)",
"sort-descending": "نزولی نز آرتن",
"sort-ascending": "صعودی نز آرتن",
- "nstab-main": "صفحه",
- "nstab-user": "صفحه کاربر",
- "nstab-media": "صفحه مدیا",
- "nstab-special": "حاصین صفحات",
- "nstab-project": "صفحه پروژه",
- "nstab-image": "فایل",
+ "nstab-main": "دیم یا تاک",
+ "nstab-user": "کار زوروکی دیم",
+ "nstab-media": "میڈیای دیم",
+ "nstab-special": "هاسین تاکدیم",
+ "nstab-project": "پروژه یی تاکدیم",
+ "nstab-image": "پایل",
"nstab-mediawiki": "کوله",
- "nstab-template": "تمپلت",
- "nstab-help": "صفحه کمک",
- "nstab-category": "دسته",
+ "nstab-template": "تراشوان",
+ "nstab-help": "رهنمایی تاکدیم",
+ "nstab-category": "تهر",
"nosuchaction": "نی چشین عمل",
"nosuchactiontext": "ای کاری که گون اای یو ار ال مشخص بیتت نامشخص انت.\nشما بلکین یو‌ارال شر ننوشتت یا رند چه هرابیت لینکی اتکگیت\nشی بلکین یک خطایی ته برنامه سایت {{SITENAME}} پیش داریت.",
"nosuchspecialpage": "نی چشین حاصین صفحه",
@@ -353,7 +356,7 @@
"invalidtitle-knownnamespace": "نامهتبرین عنوان گون نامء جاگاه «$2» ءُ تکست «$3»",
"invalidtitle-unknownnamespace": "نامهتبرین نام گون ناشناسین نامء جاگاه نمبر $1 ءُ تکست «$2»",
"exception-nologin": "مان نبیتگ ات",
- "exception-nologin-text": "دزبندی انت سیستمء تها [[Special:Userlogin|مان بئیت]] تانکه بتوان ات ائ تاکء بگند ات.",
+ "exception-nologin-text": "مهربانی بکنیت بی سامانه یی [[Special:Userlogin|لوگین بیبیت]] تا که بتوانیت بی ای دیما دسترسی داشته به ئیت.",
"exception-nologin-text-manual": "دزبندی انت $1 تانکه شمارء پر ائ تاک یانکه اکشنء دزرس ببیت انت.",
"virus-badscanner": "تنظیم بد: ناشناسین اسکنر ویروس: ''$1''",
"virus-scanfailed": "اسکن پروش وارت(کد $1)",
@@ -361,8 +364,8 @@
"logouttext": "''' شما انیگء در شُت ات'''\nبزان که تانکه شمئی بروزرء چیرداتگین هافظه پهک مبیت، لهتئ چه تاکان ممکن انت رندا هم هنچوش پیش دارگ ببنت که انگار شما لاگین کتگ ات.",
"welcomeuser": "وشاتک ات $1!",
"welcomecreation-msg": "انیگء شمئی اکانت اڈ بیتگ انت.\nمشموش ات که وتی [[Special:Preferences|ترجیحات {{SITENAME}}]] رء ٹگل دئیت.",
- "yourname": "نام کاربری",
- "userlogin-yourname": "اکانتء نام",
+ "yourname": "کار زوروکی نام:",
+ "userlogin-yourname": "کار زوروکی نام",
"userlogin-yourname-ph": "وتی یوزرنامء بلک ات",
"createacct-another-username-ph": "وتی یوزرنامء بلک ات",
"yourpassword": "کلمه رمز",
@@ -382,13 +385,13 @@
"nav-login-createaccount": "ورود/شرکتن حساب",
"userlogin": "ورود/شرکتن حساب",
"userloginnocreate": "لاگین",
- "logout": "در بیگ",
- "userlogout": "در بیگ",
+ "logout": "در بوتین",
+ "userlogout": "در بوتین",
"notloggedin": "وارد نهت",
"userlogin-noaccount": "شما رء اکانت نه انت؟",
"userlogin-joinproject": "مان {{SITENAME}} ناملکی بکن ات!",
"nologin": "حسابء نیستن؟ '''$1'''.",
- "nologinlink": "شرکتن یک حساب",
+ "nologinlink": "یک حسابی جوڑ کورتین",
"createaccount": "حساب شرکن",
"gotaccount": "یک حساب الان هست؟'''$1'''.",
"gotaccountlink": "ورود",
@@ -403,6 +406,8 @@
"createacct-another-email-ph": "ایمیلء ادرسء بلک ات",
"createaccountmail": "کارمرز چه وتکارین موقتین پسورد ءُ رندا آئی دیم داتن پر مالومین ایمیل",
"createacct-realname": "شمئی اصلیگین نام (ایهتیاری)",
+ "createaccountreason": "دلیل:",
+ "createacct-reason": "دلیل:",
"createacct-reason-ph": "پرچا شما ادگر نوکین اکانتء اڈ کن ات",
"createacct-captcha": "سکیوریتی چک",
"createacct-imgcaptcha-ph": "برزین سیاهگء ادان بلک ات",
@@ -456,6 +461,7 @@
"createaccount-text": "یکی یک حساب په شمی آدرس ایمیل ته {{SITENAME}} گون نام ($4) \"$2\"، گون کلمه رمز \"$3\" شرکتت.\nشما بایدن وارد بیت و وتی کلمه رمز الان عوض کنیت.\n\nشما شاید ای پیام شموشیت اگه ای ای حساب گون حطا شر بوتت.",
"login-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
"login-abort-generic": "شمئی لاگینء پکا نبیت - Aborted",
+ "login-migrated-generic": "شمی کاربرین حساب منتکل بوته ، و شمی کاربری نام دیگه ای ویکی تا وجود نداریت .",
"loginlanguagelabel": "زبان: $1",
"suspicious-userlogout": "شمئی لوٹ پر در شتن چه سیستمء رد بوت پرچا که چوش که پیداگ انت ائ لوٹ چه هرابین بروزر یانکه پراکسیء راهیگ بیتگ انت.",
"createacct-another-realname-tip": "اصلیگین نام ایهتیاری انت.\nاگان آئرا بلک ات رهشونء درگتء پر شمئی سیاهگان چه اصلیگین نام کارمرز بیت انت.",
@@ -494,7 +500,7 @@
"passwordreset-legend": "نوکین پسوردء بلوٹ",
"passwordreset-disabled": "پسوردء واتر کتن مان ائ ویکیء نافعال بیتگ انت.",
"passwordreset-emaildisabled": "ایمیلء حالتان مان ائ ویکیء نافعال بیتگ انت.",
- "passwordreset-username": "یوزرنام:",
+ "passwordreset-username": "کار زوروکی نام:",
"passwordreset-domain": "دامین:",
"passwordreset-capture": "آسریگین ایمیل پیش دارگ بیت؟",
"passwordreset-capture-help": "اگان ائ گزینگ رء نشانیگ بهل ات، یک ایمیلء (گون موکتین پسوردء) شما رء پیش دارگ بیت ءُ هنچوش پر کاربرء راهیگ بیت انت.",
@@ -507,7 +513,6 @@
"passwordreset-emailsent-capture": "یک ایمیلء پر پسورد واترء واسته که جهلیگء پیش دارگ بیت، راهیگ بیتگ انت.",
"passwordreset-emailerror-capture": "واترین ایمیل، که جهلیگء پیش دارگ بیت، اڈ بوت، بلئی آئی راهیگ پر {{GENDER:$2|کاربر}} پکا نبوت: $1",
"changeemail": "ایمیل ادرسء ٹگل بدئ",
- "changeemail-header": "وتی اکانتء ایمیل ادرسء ٹگل بدئ",
"changeemail-text": "ائ فرمء پکا کن ات تانکه شمئی ایمیلء ٹگل به بیت. پریشی که ائ تغییرء تایید کن ات ضرور انت وتی پسوردء بلک ات.",
"changeemail-no-info": "پر یکپارگین دزرسی مان ائ تاکء پیکن لاگین کن ات.",
"changeemail-oldemail": "انیگین ایمیل ادرس:",
@@ -515,7 +520,6 @@
"changeemail-none": "هج کجام",
"changeemail-password": " {{SITENAME}} شمئی پسورد:",
"changeemail-submit": "ایمیلء ٹگل بدئ",
- "changeemail-cancel": "کنسیل",
"changeemail-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
"resettokens": "پجاروکان(tokens)ی واتر",
"resettokens-text": "شما توان ات پجاروکان(tokens) که دزرسیء اجازت پر شمئی وتیگین دیتا همگرنچ گون شمئی اکانتء دینت، واتر بکن ات.\nهما درگتء ائ کار بیت کنت که نامالومین شهسء شمئی اکانتء لاگین کتگ انت.",
@@ -546,11 +550,12 @@
"subject": "موضوع/سرخط:",
"minoredit": "ای شی یک هوردین اصلاحیت",
"watchthis": "ای صفحه بچار",
- "savearticle": "صفحه ذخیره کن",
- "preview": "بازبین",
+ "savearticle": "تاکدیمِ ذخیره کورتین",
+ "preview": "دیستین",
"showpreview": "بازبین پیش دار",
"showdiff": "تغییرات پیش دار",
- "anoneditwarning": "'''هوژاری:''' شما وارد نه بیتگیت.\nشمی آی پی ته تاریح اصلاح ای صفحه ثبت بیت.",
+ "blankarticle": "<strong>هشتار:</strong> شما بی یک هالی دیمی جوڑ\t کورتینا ئالاتا ویت.\nاگه \"{{int:savearticle}}\" ها پدا کلیک کنیت، بدون مئتواین دیمی جوڑ\tا بیت .",
+ "anoneditwarning": "<strong>هشتار:</strong> شما لوگین نه بوته ایت . شمی آی پی نشانی په موچان دیستینی وڑ\tا بیت اگه هر \tٹگلی جوڑ\t بداریت . اگه <strong>[$1 لوگین بئیت]</strong> یا <strong>[$2 یک کاربرین حسابی جوڑ بکنیت]</strong>، شمی ایڈیت بی شمی کاربرین نام نسبت داته آ بینت، لوڑ گون دیگرین مزایایان .",
"anonpreviewwarning": "''شما مان سیستمء لاگین نکتگ. ذخیره کتنء حالت شمئی آی‌پیء نشانیگ مان ائ پیجء هاپزگ سبت بیت انت.''",
"missingsummary": "'''یادآوری:''' شما یک خلاصه چه اصلاح وارد نه کرت.\nاگر دگه کلیک کنیت ذخیره آ، شمی اصلاح به بی آی ذخیره بنت.",
"missingcommenttext": "لطفا یک نظری وارد کنیت جهل آ",
@@ -636,7 +641,7 @@
"edit-gone-missing": "نه تونیت صفحهء په روچی کنت.\nچوش که جاه کیت آیی حذف بوتگت.",
"edit-conflict": "جنگ اصلاحی",
"edit-no-change": "شمی اصلاح نادید گرگ بوت، په چی که هچ تغییری په متن دهگ نه بوت.",
- "postedit-confirmation-created": "تاک اڈ بوت.",
+ "postedit-confirmation-created": "تاکدیم جوڑ بوت.",
"postedit-confirmation-restored": "تاک واتر بوت.",
"postedit-confirmation-saved": "شمئی ادیت ذخیرگ بوت.",
"edit-already-exists": "نه تونیت یک نوکین صفحه ای شر کنت.\nهنو شی هستن.",
@@ -651,6 +656,7 @@
"content-model-text": "سادگین سیاهگ",
"content-model-javascript": "جاوا اسکریپٹ",
"content-model-css": "سی اس اس",
+ "duplicate-args-category": "آ دیمان که گٹ زورته بوته انت گون تکرارین دلیلان بی تماس تیمپلیتی تا",
"expensive-parserfunction-warning": "هوژاری: ای صفحه شامل بازگین توار عملگر تجریه کنوک سنگیننت.\nآیی بایدن کمتر چه $2{{PLURAL:$2|توار|توار}}, داشته بیت ادان هنو $1 هست.",
"expensive-parserfunction-category": " صفحات گونبازگین توار عملگر تجریه کنوک",
"post-expand-template-inclusion-warning": "هوژاری: اندازه شامل تمپلت باز مزننت.\nلهتی تمپلتان هور نه بینت.",
@@ -661,10 +667,10 @@
"parser-template-recursion-depth-warning": "محدودیت عمق تررگ رد بوت ($1)",
"language-converter-depth-warning": "چه محدودیت عمق زبانانی کارمرز گؤست ات ($1)",
"node-count-exceeded-category": "پیج انی که گیش چه مکسیمم تعداد گره بیتگ انت",
- "node-count-exceeded-category-desc": "کتگوری پر پیج انی که مان آهان ساب کنوگ برزتر شتگ انت.",
- "node-count-exceeded-warning": "پیج چه مکسیمم تعداد گره گیش شُت",
+ "node-count-exceeded-category-desc": "ای دیم شه ئادین ئالا گیشتیر مشکل داریت .",
+ "node-count-exceeded-warning": "دیم شه مکسیمم اندازه ها گیشتیر گره شُت",
"expansion-depth-exceeded-category": "پیج انی که چه مکسیمم تچک کتنء امک (عمق) گیش شتگ انت",
- "expansion-depth-exceeded-category-desc": "کتگری پر پیج انی که مان آهان تچک کتنء امک(عمق) گیش شتگ انت.",
+ "expansion-depth-exceeded-category-desc": "کتگوری په دیمان که آوانی تا پرش بوتینی جولی گیشتیر شُته گنت.",
"expansion-depth-exceeded-warning": "پیج چه مکسیمم تچک کتنء امک(عمق) گیش شُت",
"parser-unstrip-loop-warning": "حلقهء unstrip ودی بوت",
"parser-unstrip-recursion-limit": "چه مکسیمم ارجاع مان دستور unstrip گیش شُت ات($1)",
@@ -708,6 +714,7 @@
"rev-deleted-event": "(کار آمار زورگ بیتت)",
"rev-deleted-user-contribs": "[یوزرنام یانکه یانکه آی پی ادرس هزپ بیتگ انت - ویرایش چیرداتگین مان هواربیتگان]",
"rev-deleted-text-permission": "ائ ویرایش چه ائ پیج '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ] موجوت بیت انت.",
+ "rev-suppressed-text-permission": "ای ایڈیٹ شه ای دیما '''ڈیلیٹ بوته '''.\nشما توانیت آیرا بگیندیت ؛ ممکن اینت که آیی مربوتین مئلومات بی [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ڈیلیٹی سیاه چالگی] تا موجود بیت.",
"rev-deleted-text-unhide": "ائ ویرایش چه ائ پیج '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ] موجوت بیت انت.\nشما هنچوش اگان بلوٹ ات توان ات [$1 ائ نسخگء بچار ات].",
"rev-suppressed-text-unhide": "ائ ویرایش چه ائ پیج '''دیم داشت''' بوت.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} دیم داشتانی سیاهگ]. موجوت بیت انت.\nشما هنچوش اگان بلوٹ ات توان ات [$1 ائ نسخگء بچار ات].",
"rev-deleted-text-view": "ائ ویرایش چه ائ پیج '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ]. موجوت بیت انت.",
@@ -792,7 +799,6 @@
"mergehistory-same-destination": "صفحهٔ مبدأ و مقصد نمی‌تواند یکی باشد",
"mergehistory-reason": "دلیل:",
"mergelog": "آمار چن وبند",
- "pagemerge-logentry": "چن و بند بوت [[$1]] په [[$2]] (بازبینی ان تا$3)",
"revertmerge": "بی چن وبند",
"mergelogpagetext": "جهلء یک لیست چه نوکترین چن وبندان یکی تاریح صفحه په دگری هست.",
"history-title": "$1: ویرایش انی دپتر",
@@ -833,6 +839,7 @@
"search-result-category-size": "{{PLURAL:$1|یک عضو|$1 عضو}} ({{PLURAL:$2|یک جهلرده|$2 جهلرده}}، {{PLURAL:$3|یک فایل|$3 فایل}})",
"search-redirect": "(غیر مستقیم $1 )",
"search-section": "(بخش $1 )",
+ "search-category": "(تهر $1)",
"search-file-match": "(فایلء محتواء همجندی)",
"search-suggest": "شما را منظور ات: $1",
"search-interwiki-caption": "پروژه آن گوهار",
@@ -843,7 +850,7 @@
"searchall": "کل",
"showingresults": "جهل پیش دارگنت تا {{PLURAL:$1|'''1'''نتیجه|'''$1''' نتایج}} شروع بنت گون #'''$2'''.",
"showingresultsinrange": "پیش دارگ مان جهلء تان {{PLURAL:$1|<strong>1</strong> نتیجگ|<strong>$1</strong> نتیجگ}} in range #<strong>$2</strong> تان #<strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5|نتیجه '''$1''' چه '''$3'''|نتایج '''$1 - $2''' چه '''$3'''}} په '''$4'''",
+ "search-showingresults": "{{PLURAL:$4|نتایج <strong>$1</strong> شه <strong>$3</strong>|نتایج <strong>$1 - $2</strong> شه <strong>$3</strong>}}",
"search-nonefound": "نتیجه هم دپ په درخواست نیست",
"powersearch-legend": "گردگ پیشرفته",
"powersearch-ns": "گردگ ته نام فضا آن",
@@ -857,7 +864,7 @@
"preferences": "ترجیحات",
"mypreferences": "ترجیحات",
"prefs-edits": "تعداد اصلاحات:",
- "prefsnologintext2": "دزبندی انت $1 پر ترجیحاتء تنظیم کتن.",
+ "prefsnologintext2": "منتوارون شمی که په ٹگل داتین تنزیماتانی هاتبرا لوگین بئیت .",
"prefs-skin": "پوست",
"skin-preview": "بازین",
"datedefault": "هچ ترجیح",
@@ -916,7 +923,7 @@
"prefs-custom-js": "رسمی جی‌اس",
"prefs-common-css-js": "یک پیمین سی‌اس‌اس/جاوااسکریپٹ پر پهکین اسکین:",
"prefs-reset-intro": "شما توانت چه ای صفحه په واترینگ تنظیمات وت په پیش‌فرض استفاده کنیت. ای کار بازگشت‌ناپذیر انت.",
- "prefs-emailconfirm-label": "تایید کتن پست الکترونیک:",
+ "prefs-emailconfirm-label": "تایید کتن ایمیل:",
"youremail": "ایمیل:",
"username": "{{GENDER:$1|یوزرنام}}:",
"prefs-memberingroups": "{{GENDER:$2|عضو}} {{PLURAL:$1|گروپ|گروپ}}:",
@@ -925,14 +932,14 @@
"yourlanguage": "زبان:",
"yourvariant": "زبان محتواء گؤشگ:",
"prefs-help-variant": "شمئی درچتگین گؤشگ پر تاکانی محتواء پیش دارگ مان ائ ویکی.",
- "yournick": "امضا:",
+ "yournick": "نوکین دسنام:",
"prefs-help-signature": "نبشتگین کامنت ان مان ترانء تاک پیکن گون «<nowiki>~~~~</nowiki>» ایمزا به بنت؛ ائ نشانیگ گون وتکارین حالت پر شمئی ایمزا و وهدستامپء کنورتء بیت انت.",
"badsig": "نامعتبرین حامین امضا تگان HTML چک کن",
"badsiglength": "شمل امضا باز مزنتت.\nآی بایدن $1 {{PLURAL:$1|کارکاتر|کاراکتران}} مزن تر مبیت",
"yourgender": "لوٹ ات که چونکا توصیف به بیت؟",
"gender-unknown": "ترجیحء دیان که نامالوم به بیت",
- "gender-male": "مردین",
- "gender-female": "جنین",
+ "gender-male": "مردین زاگ",
+ "gender-female": "جنین زاگ",
"prefs-help-gender": "ائ تنظیمء کارمرز کتن ایهتیاری انت.\nسفتور چه ائ انداجگ پر درستین اشارگ پر شمئی اکانت گون زبانء گرامرء بهر زیر ات.\nائ اطلاهات عام انت.",
"email": "ایمیل",
"prefs-help-realname": "راستین نام اهتیاریتن. اگه شما یکی انتخاب کنیت شی په شمی کارء نشان هلگ په روت.",
@@ -941,9 +948,9 @@
"prefs-help-email-required": "آدرس ایمیل نیازنت.",
"prefs-info": "اولگین اطلاعات",
"prefs-i18n": "بین المللی کتن",
- "prefs-signature": "امضا",
+ "prefs-signature": "دسنام",
"prefs-dateformat": "تاریح داب",
- "prefs-timeoffset": "وهد بنگیج",
+ "prefs-timeoffset": "بنگیج بوتینِ وهد",
"prefs-advancedediting": "عمومی تنظیمات",
"prefs-editor": "اصلاح کنوک",
"prefs-preview": "پیشچارگ",
@@ -956,6 +963,7 @@
"prefs-tokenwatchlist": "نشانگ",
"prefs-diffs": "پرک",
"prefs-help-prefershttps": "ائ ترجیحء تاثیر رند چه شمئی رندی لاگینء کارمرز بیت انت.",
+ "prefswarning-warning": "شمی ٹگل داتینوکین ترجیئات تا انون زاپاس نه بوته انت .\nاگه ای دیم بدون شه کلیک کورتینا بی «$1» ایلا بیت شمی ترجیئات زاپاسا نه بیینت .",
"prefs-tabs-navigation-hint": "بزان: شما توان ات چه چپی و راستی پیشداروکین بٹن ان پر حرکت زبانگ انی توکا مان زبانگانی لیست کارمرز بکن ات.",
"email-address-validity-valid": "شمئی ایمیل ادرس پر درستی پیداگ انت",
"email-address-validity-invalid": "مهتبرین ایمیل ادرسء بلک ات",
@@ -1004,7 +1012,7 @@
"right-createtalk": "شرکتن صفحات بحث",
"right-createaccount": "شرکتن نوکین حسابان کاربری",
"right-minoredit": "نشان کن اصلاحات په داب هوردین",
- "right-move": "جاه په جاه کن صفحات",
+ "right-move": "جاه بی جاه کن تاکدیمانا",
"right-move-subpages": "جاه په جاه کن صفحات گون زیرصفحاتش",
"right-move-rootuserpages": "جاه په جاه کتن صفحات کاربری اصلی",
"right-move-categorypages": "انتقال مان کتگوریء پیج ان",
@@ -1021,7 +1029,7 @@
"right-nominornewtalk": "نداشتن هوردین اصلاح ته صفحات بحث یک نوکین کوله یانی پیش داریت",
"right-apihighlimits": "استفاده کن چه بالاترین محدویتان ته جوستان API",
"right-writeapi": "استفاده چه نوشتن API",
- "right-delete": "حذف صفحات",
+ "right-delete": "تاکدیمانِ پاک کورتین",
"right-bigdelete": "حذف صفحات گون درازین تاریح",
"right-deletelogentry": "هزپ و واتر چه خاصین مدخل چه سیاهه",
"right-deleterevision": "حذف و حذف نه کتن مخصوصین بازبینی آن صفحات",
@@ -1030,6 +1038,7 @@
"right-browsearchive": "گردگ صفحات حذفی",
"right-undelete": "حذف مکن یک صفحه ایء",
"right-suppressrevision": "بازبینی و ترینگ بازبینی آن پناهین چه مدیران سیستم",
+ "right-viewsuppressed": "دیستین آ نسهه هانی که شه کار زوروکان چیهر داته بوته انت",
"right-suppressionlog": "به گند خصوصی آماران",
"right-block": "دگ کابران چه اصلاح محدود کن",
"right-blockemail": "یک کاربری چه ایمیل دیم دهگ منع کن",
@@ -1127,7 +1136,7 @@
"recentchanges-label-plusminus": "تاکء سایز همگرنچ گون ائ بایت انی انداجگ ٹگل وارتگ انت",
"recentchanges-legend-heading": "'''اختصاران:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هنچوش پر [[Special:NewPages|نوکین تاکانء فهرست]] بچار ات)",
- "rcnotefrom": "جهلیگء تغییرات چه <strong>$2</strong> (تان <strong>$1</strong> پیش دارگ بیتگ انت).",
+ "rcnotefrom": "بی جهلگا ٹگلان شه <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داته بوته انت|نشان داته بوته انت}}).",
"rclistfrom": "پیش دار نوکین تغییراتآ چه $3 $2",
"rcshowhideminor": "$1 هوردین تغییرات",
"rcshowhideminor-show": "پیش دارگ",
@@ -1168,17 +1177,18 @@
"recentchangeslinked-toolbox": "مربوطین تغییرات",
"recentchangeslinked-title": "تغییراتی مربوط په \"$1\"",
"recentchangeslinked-summary": "شی یک لیستی چه تغییراتی هستنت که نوکی اعمال بوتگنت په صفحاتی که چه یک صفحه خاصی لینک بوته( یا په اعضای یک خاصین دسته).\nصفحات ته [[Special:Watchlist| شمی لیست چارگ]] '''' پررنگنت''''",
- "recentchangeslinked-page": "صفحه نام:",
+ "recentchangeslinked-page": "تاکدیمِ نام:",
"recentchangeslinked-to": "پیش دار تغییرات په صفحاتی که لینک بوتگنت به جاه داتگین صفحه",
"upload": "آپلود کتن فایل",
"uploadbtn": "آپلود فایل",
"reuploaddesc": "کنسل آپلودء و ترر په فرم آپلود",
"upload-tryagain": "فایلء ٹگا وارتگین توضیحاتء راهیگ بکن ات",
"uploadnologin": "وارد نهیت",
- "uploadnologintext": "شما بایدن [[Special:UserLogin|واردبیت]] په آپلود کتن فایل.",
+ "uploadnologintext": "په اپلوڈ\t کورتین پایلی هاتیرا باید $1.",
"upload_directory_missing": "مسیر آپلود ($1) گارنت و گون وب سرور شر گنگ نه بیت.",
"upload_directory_read_only": "مسیر آپلود ($1) قابل نوشتن گون وب سرور نهنت.",
"uploaderror": "حطا آپلود",
+ "upload-recreate-warning": "'''هشتار: پایلی بی ناما ڈ\tیلیت یا اینتیکال بوته .'''\n\nپه آسانی هاتیرا، ڈ\tیلیتی چالگ و انتیکالی دیم بی جهلگا آته :",
"uploadtext": "چه جهلگین فرم په آپلود فایلان استفاده کنت.\nپه دیستن یا گشتن پیشگین آپلودی فایلان برو [[Special:FileList|لیست فایلان آپلودی]], آپلودان و حذفیات هنچو هستن ته [[Special:Log/upload|آمار آپلود]].\n\nپه وارد کتن فایل ته یک صفحه ای، چه لینک ته فرم استفاده کن\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' په استفاده چه نسخه کامل فایل\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' په استفاده چه ۲۰۰ پیکسل پهنات ته یک جعبه ته چپ\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' په مسیری لینک دهگ په فایل بی پیش دارگ فایل",
"upload-permitted": "مجازین نوع فایل: $1.",
"upload-preferred": "ترجیحی نوع فایل: $1.",
@@ -1195,12 +1205,19 @@
"ignorewarnings": "هردابین هوژاری شموش",
"minlength1": "نام فایل باید یک حرفی حداقل بیت",
"illegalfilename": "نام فایل \"$1\" شامل کاراکترانی انت که مجاز نهنت ته ای عناوین صفحه.\nلطفا نام فایل بدل کنیت و دگه آپلود آزمایش کنیت.",
+ "filename-toolong": "پایلی نام نباید شه ۲۴۰ بایتا تچکتیر بیت .",
"badfilename": "نام فایل عوض بوتت په \"$1\".",
+ "filetype-mime-mismatch": "پایلی پدوند «$1.‎» گون آیی MIME رکما ($2) متابیکت نداریت.",
"filetype-badmime": "فایلان نوع مایم \"$1\" مجاز په آپلود بیگ نهنت.",
"filetype-bad-ie-mime": "نه تونیت ای فایلءَ آپلود کنیت په چی که اینترنت ایکسپلورر آییءَ په دا ب \"$1\" جاه کاریت که شی غیرمجازین نوع فایلینت و حطرناک انت.",
"filetype-unwanted-type": "'''\".$1\"' یک نه لوٹتگین نوع فایل انت. انواع فایل ترجیحی $2 انت.\nنوع ترجیحی {{PLURAL:$3|نوع فایلنت|انواع فایلان انت}} $2.",
"filetype-banned-type": "'''\".$1\"''' یک نوع مجازی ان فایلی نهنت. مجازین {{PLURAL:$3|نوع فایل|انواع فایلان}} $2.",
"filetype-missing": " (په داب \".jpg\").فایل هچ بندی نیست",
+ "empty-file": "پایلی که دیم داتیت هالی اینت.",
+ "file-too-large": "پایلی که دیم داته ایت باز ٹو اینت .",
+ "filename-tooshort": "پایلی نام بی شه اندازهگا گونڈ اینت.",
+ "filetype-banned": "ای رکمی پایل اجازه نداریت.",
+ "verification-error": "پایل شه تائید تستا در نه بوت.",
"large-file": "توصیه بیت که فایلان مزنتر چه $1 مبنت;\nای فایل $2 انت.",
"largefileserver": "ای فایل مزنتر چه حدی انت که سرور تنظیم بوتت په اجازه دهگ.",
"emptyfile": "فایلی که شما آپلود کتت هالیک انت. شاید شی په خاطر اشتباه نه نام فایل بیت.\nلطفا کتنرل کنیت که آیا واقعا شما لوٹیت ای فایلء آپلود کنیت.",
@@ -1216,18 +1233,31 @@
"uploadwarning": "هوژاری آپلود",
"savefile": "ذخیره فایل",
"uploaddisabled": "آپ.د غبر فعال انت",
+ "copyuploaddisabled": "بارگذاری از طریق نشانی اینترنتی غیرفعال است.",
"uploaddisabledtext": "آپلود فایل غیر فعال انت.",
"php-uploaddisabledtext": "آپلود کتن فایل ته پی‌اچ‌پی فعال نهنت. تنظیم file_uploads کنترل کنیت.",
"uploadscripted": "ای فایل شامل کد HTML یا اسکریپت انت که شاید گون وب بروزر اشتباهی وانگ بیت.",
+ "uploadscriptednamespace": "این پوشه اس‌وی‌جی شامل فضای نام غیرقانونی '$1' است",
+ "uploadinvalidxml": "XML در پروندهٔ بارگذاری‌شده نمی‌تواند تجزیه شود.",
"uploadvirus": "فایل یک ویروسی داریتن! جزییات: $1",
+ "uploadjava": "این پرونده یک پرونده زیپ است که حاوی پرونده‌ای از نوع ‎‎.class جاوا است.\nبارگذاری پرونده‌های جاوا مجاز نیست، چرا که ممکن است اجازه دور زدن محدودیت‌های امنیتی را بدهند.",
+ "upload-source": "پرونده منبع",
"sourcefilename": "منبع نام فایل:",
+ "sourceurl": "نشانی منبع:",
"destfilename": "مقصد نام فایل",
"upload-maxfilesize": "آهرین هد اندازه فایل : $1",
+ "upload-description": "توضیحات پرونده",
+ "upload-options": "گزینه‌های بارگذاری",
"watchthisupload": "ای فایل بچار",
"filewasdeleted": "یک فایلی گو ای نام پیشتر آپلود بوتت و رندا حذف بوت.\nشما بایدن کنترل کنیت $1 پیش چه شی که دگه آپلود کنیت.",
"filename-bad-prefix": "نام فایلی که آپلود بیت شروع بیت گون '''\"$1\"''', که یک نام بی توضیحی هنچکا اتوماتیکی گون دوربین دیجیتال دهگ بوتت.\nلطفا یک تشریحی ترین نامی په وتی فایل بزرویت.",
"filename-prefix-blacklist": "#<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a prefix for typical file names assigned automatically by digital cameras\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobil phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- leave this line exactly as it is -->",
"upload-success-subj": "آپلود موفق",
+ "upload-success-msg": "بارگذاری شما از [$2] موفق بود. این پرونده در اینجا قابل دسترسی است: [[:{{ns:file}}:$1]]",
+ "upload-failure-subj": "مشکل در بارگذاری",
+ "upload-failure-msg": "مشکلی در بارگذاری شما از [$2] وجود داشت:\n\n$1",
+ "upload-warning-subj": "هشدار بارگذاری",
+ "upload-warning-msg": "فرم بارگذاری مشکلی داشت [$2]. شما می‌توانید به [[Special:Upload/stash/$1|فرم بارگذاری]] بازگردید تا این اشکال را رفع کنید.",
"upload-proto-error": "اشتباه پروتوکل",
"upload-proto-error-text": "آپلود دراین نیاز په URL آنی داریت که شروع بیت گون <code>http://</code> یا <code>ftp://</code>.",
"upload-file-error": "حطا درونی",
@@ -1236,26 +1266,100 @@
"upload-misc-error-text": "یک ناشناسین حطا وهد آپلود کتن پیش آتک.\nلطفا تایید کنیت که URL معتبرانت و دسترسی بیت و دگه سعی کنیت.\nاگر مشکل ادامه داشت، گون [[Special:ListUsers/sysop|مدیر]]ء تماس گریت.",
"upload-too-many-redirects": "ای لینک بازگین غیرمستقیم ی هستن",
"upload-http-error": "یک ارور اچ‌تی‌تی‌پی پیش آتک : $1",
+ "upload-copy-upload-invalid-domain": "بارگذاری کپی پرونده‌ها از این دامنه امکان‌پذیر نیست.",
+ "backend-fail-stream": "نمی‌توان پروندهٔ $1 را ارسال کرد.",
+ "backend-fail-backup": "نمی‌توان نسخهٔ پشتیبان برای پروندهٔ $1 ایجاد کرد.",
+ "backend-fail-notexists": "ای $1 پایل وجود نداریت.",
+ "backend-fail-hashes": "دریافت هش‌های پرونده برای مقایسه ناموفق بود.",
+ "backend-fail-notsame": "پروندهٔ غیریکسانی در $1 وجود دارد.",
+ "backend-fail-invalidpath": "$1 مسیر ذخیره‌سازی معتبری نیست.",
+ "backend-fail-delete": "شما نتوانیت ای $1 پایلا پاک کنیت.",
+ "backend-fail-describe": "نمی‌توان فرادادهٔ پروندهٔ «$1» را تغییر داد.",
+ "backend-fail-alreadyexists": "ای پایل $1 شه دیما وجود داشت.",
+ "backend-fail-store": "شما نتوانیت ای $1 پایلابی $2 تاذخیره بکنیت.",
+ "backend-fail-copy": "نمی‌توان پروندهٔ $1 را به $2 کپی کرد.",
+ "backend-fail-move": "نمی‌توان پروندهٔ $1 را به $2 منتقل کرد.",
+ "backend-fail-opentemp": "نمی‌توان پروندهٔ موقتی را باز کرد.",
+ "backend-fail-writetemp": "امکان نوشتن بر روی پروندهٔ موقتی وجود ندارد.",
+ "backend-fail-closetemp": "نمی‌توان پروندهٔ موقتی را بست.",
+ "backend-fail-read": "نمی‌توان پروندهٔ $1 را خواند.",
+ "backend-fail-create": "نمی‌توان بر روی پروندهٔ $1 اطلاعات نوشت.",
+ "backend-fail-maxsize": "نمی‌توان بر روی پروندهٔ $1 اطلاعات نوشت چون بزرگتر از {{PLURAL:$2|یک بایت|$2 بایت}} است.",
+ "backend-fail-readonly": "پشتیبان «$1» درحال حاضر در وضیت فقط خواندنی است. دلیل ارائه شده چنین است: «$2»",
+ "backend-fail-synced": "پرونده «$1» در پشتیبان‌های ذخیره داخلی در وضعیتی ناپایدار قرار دارد",
+ "backend-fail-connect": "ارتباط با پشیبان ذخیره «$1» برقرار نشد.",
+ "backend-fail-internal": "خطایی نامعلوم در پشتیبان ذخیره «$1» رخ داد.",
+ "backend-fail-contenttype": "تعیین نوع محتوای پایل په ذخیره بی «$1» ناموفق ات.",
+ "backend-fail-batchsize": "دسته‌ای مشتمل بر $1 {{PLURAL:$1|عملکرد|عملکرد}} پرونده به پشتیبان ذخیره داده شد؛ حداکثر مجاز $2 {{PLURAL:$2|عملکرد|عملکرد}} است.",
+ "backend-fail-usable": "امکان خواندن یا نوشتن پروندهٔ $1 وجود نداشت چرا که سطح دسترسی کافی نیست یا شاخه/محفظهٔ مورد نظر وجود ندارد.",
+ "filejournal-fail-dbconnect": "امکان وصل شدن به پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.",
+ "filejournal-fail-dbquery": "امکان به روز کردن پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.",
+ "lockmanager-notlocked": "نمی‌توان قفل «$1» را گشود؛ چون قفل نشده‌است.",
+ "lockmanager-fail-closelock": "امکان بستن پرونده قفل شده \"$1\" وجود ندارد.",
+ "lockmanager-fail-deletelock": "امکان حذف پرونده قفل شده \"$1\" وجود ندارد.",
+ "lockmanager-fail-acquirelock": "نمی‌توان قفل «$1» را کسب کرد.",
+ "lockmanager-fail-openlock": "امکان باز کردن پرونده قفل شده \"$1\" وجود ندارد.",
+ "lockmanager-fail-releaselock": "نمی‌توان قفل «$1» را گشود.",
+ "lockmanager-fail-db-bucket": "امکان ارتباط با تعداد کافی پایگاه داده قفل‌ها در محفظه $1 وجود نداشت.",
+ "lockmanager-fail-db-release": "بازکردن قفل‌های پایگاه دادهٔ $1 ممکن نیست.",
+ "lockmanager-fail-svr-acquire": "امکان گرفتن قفل‌های سرور $1 وجود ندارد.",
+ "lockmanager-fail-svr-release": "امکان باز کردن قفل‌های سرور $1 وجود ندارد.",
+ "zip-file-open-error": "در هنگام باز کردن پرونده زیپ برای بررسی محتوای آن خطایی رخ داد.",
+ "zip-wrong-format": "پرونده مشخص شده یک پرونده زیپ نیست.",
+ "zip-bad": "پرونده زیپ خراب یا غیر قابل خواندن است.\nنمی‌توان محتوای آن را از نظر امنیت به درستی بررسی کرد.",
+ "zip-unsupported": "پرونده زیپ از ویژگی‌هایی استفاده می‌کند که توسط مدیاویکی پشتیبانی نمی‌شوند.\nنمی‌توان محتوای آن را از نظر امنیت به درستی بررسی کرد.",
+ "uploadstash": "اپلوڈی سٹاش",
+ "uploadstash-summary": "این صفحه دسترسی به پرونده‌هایی که بارگذاری شده‌اند (یا در حال بارگذاری هستند) اما هنوز در ویکی منتشر نشده‌اند را فراهم می‌کند. این پرونده‌ها توسط هیچ کاربری به جز کسی که آن‌ها را بارگذاری کرده قابل دیدن نیستند.",
+ "uploadstash-clear": "پاک‌کردن پرونده‌های انبارشده",
+ "uploadstash-nofiles": "شما هیچ پروندهٔ انبارشده‌ای ندارید.",
+ "uploadstash-badtoken": "انجام این اقدام ناموفق بود، احتمالاً به این دلیل که اعتبار ویرایش شما به اتمام رسیده است. دوباره امتحان کنید.",
+ "uploadstash-errclear": "پاک‌کردن پرونده‌ها ناموفق بود.",
+ "uploadstash-refresh": "تازه‌کردن فهرست پرونده‌ها",
+ "invalid-chunk-offset": "جابجایی نامعتبر قطعه",
+ "img-auth-accessdenied": "منع دسترسی",
+ "img-auth-nopathinfo": "PATH_INFO موجود نیست.\nسرور شما برای ردکردن این مقدار تنظیم نشده‌است.\nممکن است مبتنی بر سی‌جی‌آی باشد و از img_auth پشتیبانی نکند.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization را ببینید.",
+ "img-auth-notindir": "مسیر درخواست شده در شاخهٔ بارگذاری تنظیم‌شده قرار ندارد.",
+ "img-auth-badtitle": "امکان ایجاد یک عنوان مجاز از «$1» وجود ندارد.",
+ "img-auth-nologinnWL": "شما به سامانه وارد نشده‌اید و «$1» در فهرست سفید قرار ندارد.",
+ "img-auth-nofile": "پایلی «$1» وجود نداریت.",
+ "img-auth-isdir": "شما تلاش کرده‌اید به شاخهٔ «$1» دسترسی پیدا کنید.\nتنها دسترسی به پرونده مجاز است.",
+ "img-auth-streaming": "در حال جاری ساختن «$1».",
+ "img-auth-public": "عملکرد img_auth.php برونداد پرونده‌ها از یک ویکی خصوصی است.\nاین ویکی به عنوان یک ویکی عمومی تنظیم شده‌است.\nبرای امنیت بهینه، img_auth.php غیرفعال است.",
+ "img-auth-noread": "کاربر دسترسی خواندن «$1» را ندارد.",
+ "http-invalid-url": "نشانی نامعتبر: $1",
+ "http-invalid-scheme": "نشانی‌های اینترنتی با طرح «$1» پشتیبانی نمی‌شوند.",
+ "http-request-error": "درخواست اچ‌تی‌تی‌پی به علت خطایی ناشناخته، ناموفق بود.",
+ "http-read-error": "خطای خواندن اچ‌تی‌تی‌پی.",
+ "http-timed-out": "مهلت درخواست اچ‌تی‌تی‌پی به سر رسید.",
+ "http-curl-error": "خطا در آوردن نشانی اینترنتی: $1",
+ "http-bad-status": "در حین درخواست اچ‌تی‌تی‌پی خطایی رخ داد: $1 $2",
"upload-curl-error6": "نه تونیت په URL برسیت",
"upload-curl-error6-text": "داتگین URL دسترسی نه بیت.\nلطفا دگه کنترل کنیت که URL درستنت و سایت په راه انت.",
"upload-curl-error28": "وهد آپلود هلت",
"upload-curl-error28-text": "سایت باز وهدی بورت په جواب دهگء.\nلطفا کنترل کنیت که سایت روشننت، کمی صبر کنیت و دگه سعی کنیت.\nشاید شما یک وهد حلوت تری کوشش کنیت.",
"license": "لیسانس کنت:",
- "license-header": "لیسانس کنت:",
+ "license-header": "اجازه‌نامه",
"nolicense": "هچ یک انتخاب نه بوتت",
+ "licenses-edit": "گزینه‌های مجوز ویرایش",
"license-nopreview": "(بازبین موجود نهنت)",
- "upload_source_url": "(یک متعبرین، عمومی دسترسی انت URL)",
- "upload_source_file": "(یک فایل ته شمی کامپیوتر)",
- "listfiles-summary": "ای حاصین صفحه کل آپلودی فایلانء پیش داریت.\nبه طور پیش فرض اهری فایل آپلودی ته بالاد لیست پیش دارگ بیت.\nیک کلیکی بالاد ستون ترتیب عوض کنت.",
+ "upload_source_url": "(شما یک پرونده انتخاب از یک URL معتبر و دسترس عموم انتخاب کردید)",
+ "upload_source_file": "(پرونده‌ای از رایانهٔ شما انتخاب شده‌است)",
+ "listfiles-delete": "پاک کورتین",
+ "listfiles-summary": "این صفحهٔ ویژه تمام پرونده‌های بارگذاری‌شده را نمایش می‌دهد.",
"listfiles_search_for": "گردگ په مدیا:",
"imgfile": "فایل",
"listfiles": "لیست فایل",
+ "listfiles_thumb": "نائونی",
"listfiles_date": "تاریح",
"listfiles_name": "نام",
"listfiles_user": "کاربر",
"listfiles_size": "اندازه",
"listfiles_description": "توضیح",
"listfiles_count": "نسخ",
+ "listfiles-show-all": "شامل نسخه‌های قدیمی عکس‌ها",
+ "listfiles-latestversion": "انونین ویرژن",
+ "listfiles-latestversion-yes": "هان",
+ "listfiles-latestversion-no": "نه",
"file-anchor-link": "فایل",
"filehist": "تاریح فایل",
"filehist-help": "اور تاریح/زمان کلیک کنیت دان فایلا په داب هما تاریح بگندیت",
@@ -1271,24 +1375,28 @@
"filehist-dimensions": "جنبه یان",
"filehist-filesize": "اندازه فایل",
"filehist-comment": "نظر",
- "imagelinks": "لینک فایل",
+ "imagelinks": "پایلی په کار کیپتین",
"linkstoimage": "جهلیگین {{PLURAL:$1|صفحه |$1 صفحات لینک}} پی ای فایل",
"linkstoimage-more": "گیشتر چه $1 {{PLURAL:$1|صفحه لینکان|صفحات لینک}} پی ای فایل.\nجهلگین لیست {{PLURAL:$1|اولین لینک صفحه|اولین $1 لینکان صفحه ی}} پی ای فایل فقط پیش داریت.\nیک [[Special:WhatLinksHere/$2|لیست کامل]] موجودنت.",
"nolinkstoimage": "هچ صفحه ای نیست که به ای فایل لینک بوت.",
"morelinkstoimage": "View [[Special:WhatLinksHere/$1|گیشتر لینکان]]به ای فایل",
+ "linkstoimage-redirect": "$1 (تغییرمسیر پرونده) $2",
"duplicatesoffile": "جهلیگین {{PLURAL:$1|فایل یک کپی انت|$2 فایلان کپی انت}} چه هی فایل ([[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 صفحهٔ توضیحاتش] در آنجا ویرایش کنید.",
"filepage-nofile": "هچ فایلی گون ای نام نیستن",
"filepage-nofile-link": "هی فایلی گوپن ای نام نیستن، بله شما تونیت [آی ءَ $1 بار کنیت]",
"uploadnewversion-linktext": "یک نوکین نسخه ای چه ای فایل آپلود کن",
- "shared-repo-from": "چه $1",
+ "shared-repo-from": "شه $1",
"shared-repo": "هورین مخزن",
+ "upload-disallowed-here": "متأسفانه شما نمی‌توانید این پرونده را بازنویس کنید.",
"filerevert": "ترین $1",
"filerevert-legend": "ترینگ فایل",
"filerevert-intro": " شما په ترینگء '''[[Media:$1|$1]]''' په [$4 نسخه ای په داب چه $3, $2].",
- "filerevert-comment": "نظر:",
+ "filerevert-comment": "دلیل:",
"filerevert-defaultcomment": "تررت په نسخه په داب $2, $1",
"filerevert-submit": "تررگ",
"filerevert-success": "''[[Media:$1|$1]]''' بدل بوتت په [$4 نسخه په داب چه $3, $2].",
@@ -1307,39 +1415,54 @@
"filedelete-reason-otherlist": "دگ دلیل",
"filedelete-reason-dropdown": "*متداول این دلایل حذف\n** نقص حق کپی\n** فایل کپی",
"filedelete-edit-reasonlist": "اصلاح دلایل حذف",
+ "filedelete-maintenance": "حذف و احیای پرونده‌ها در مدت نگهداری به طور موقت غیرفعال است.",
+ "filedelete-maintenance-title": "نمی‌تواند پرونده را حذف کند",
"mimesearch": "گردگ په مایم",
- "mimesearch-summary": "ای صفحه فیلتر کتن فایلان په اساس نوع مایم اش فعال کنت.\nورودی:متحوانوع/زیرنوع،مثل<code>image/jpeg</code>.",
+ "mimesearch-summary": "با کمک این صفحه شما می‌توانید پرونده‌هایی که یک نوع MIME به خصوص دارند را پیدا کنید.\nورودی: به صورت contenttype/subtype یا contenttype/*&lrm;، نظیر <code>image/jpeg</code>.",
"mimetype": "نوع مایم:",
"download": "آیرگیزگ",
"unwatchedpages": "نه چارتگین صفحات",
"listredirects": "لیست غیر مستقیمان",
+ "listduplicatedfiles": "فهرست همهٔ پرونده‌ها به‌همراه تکراری‌ها",
+ "listduplicatedfiles-summary": "این فهرست پرونده‌هایی با نسخه‌های اخیر این پرونده تکراری است که نسخه‌های اخبر سایر پرونده‌ها است. فقط پرونده‌های محلی در نظر گرفته شده‌اند.",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]][[$3|{{PLURAL:$2|یک تکرار|$2 تکرار}}]] دارد.",
"unusedtemplates": "تمپلتان بی استفاده",
"unusedtemplatestext": "ای صفحه لیست کن کل صفحات ته {{ns:template}} نام فضا که ته دگه صفحه نهنت.\nمه شموش تا کنترل کنیت په دگه لینکان ته تمپلتان پیش چه حذف کتن آیان.",
"unusedtemplateswlh": "دگر لینکان",
"randompage": "تصادفی صفحه",
- "randompage-nopages": "\"$1\" هچ صفحه ای ته ای نام فضا نیست.",
+ "randompage-nopages": "هیچ صفحه‌ای در این {{PLURAL:$2|فضای نام|فضاهای نام}} موجود نیست: $1.",
+ "randomincategory": "بی اهتیارین تاکدیم بی تهرِ تا",
+ "randomincategory-invalidcategory": "«$1» نامی معتبر برای یک ردهٔ نیست.",
+ "randomincategory-nopages": "هیچ تاکدیمی بی ای تهرِ تا [[:Category:$1|$1]] وجود نداریت.",
+ "randomincategory-category": "تهر:",
+ "randomincategory-legend": "بی اهتیارین تاکدیم بی تهرِ تا",
"randomredirect": "تصادفی غیر مستقیم",
"randomredirect-nopages": "\"$1\"هچ غیر مستقیمی ته ای نام فضا نیست.",
"statistics": "آمار",
"statistics-header-pages": "صفحه ی آمار",
"statistics-header-edits": "اصلاح آمار",
- "statistics-header-views": "چارگ آمار",
"statistics-header-users": "آمار کاربر",
+ "statistics-header-hooks": "دیگرین آمار",
"statistics-articles": "صفحات محتوا",
- "statistics-pages": "صفحات",
+ "statistics-pages": "تاکدیمان",
"statistics-pages-desc": "کل صفحات ته ویکی په داب صفحات بحث ،غیر مستقیمان و دگه چیز.",
"statistics-files": "آپلود بیتگین فایلان",
"statistics-edits": "اصلاح صفحات چه وهدی که {{SITENAME}} شر بوتت",
"statistics-edits-average": "میانگین اصلاحات ته هر صفحه ای",
- "statistics-views-total": "چارگان کل",
- "statistics-views-peredit": "چارگ ته هر اصلاح",
"statistics-users": "ثبت نامی [[Special:ListUsers|users]]",
"statistics-users-active": "فعالین کاربر",
"statistics-users-active-desc": "کاربرانی که ته پیشگین {{PLURAL:$1|روچ|$1 روچان}} کاری اش کتت",
- "statistics-mostpopular": "باز چار تگین صفحات",
+ "pageswithprop": "آ تاکدیمان که بی تاکدیمی رکما انت",
+ "pageswithprop-legend": "آ تاکدیمان که بی تاکدیمی رکما انت",
+ "pageswithprop-text": "این صفحه فهرستی است از صفحه‌هایی که از یک خاصیت صفحهٔ خاص استفاده می‌کنند.",
+ "pageswithprop-prop": "هاسیئتی نام:",
+ "pageswithprop-submit": "برا",
+ "pageswithprop-prophidden-long": "جزییات مخفی متن طولانی ($1)",
+ "pageswithprop-prophidden-binary": "جزییات مقدار مخفی باینری ($1)",
"doubleredirects": "دوبل غیر مستقیم",
"doubleredirectstext": "ای صفحه لیست کنت صفحاتی که غیر مستقیم رونت په دگه صفحات. هر ردیف شامل لینکانی انت به اولی و دومی غیر مستقیم، و هدف دومی غیر مستقیم، که معمولا استفاده بیت \"real\" صفحه هدف، که بایدن اولی غیر مستقیم پیش داریت.",
"double-redirect-fixed-move": "[[$1]] انتقال دهگ بوتت، و الان تغییر مسیری په [[$2]] انت",
+ "double-redirect-fixed-maintenance": "رفع خودکار تغییرمسیر دوتایی از [[$1]] به [[$2]] در روند نگهداری.",
"double-redirect-fixer": "تعمیرکنوک غیر مستقیم",
"brokenredirects": "پروشتگین غیر مستقیمان",
"brokenredirectstext": "جهلیگین غیر مستقیم لینک بوتگن په صفحات نیستن:",
@@ -1352,10 +1475,14 @@
"fewestrevisions": "صفحات گون کمترین بازبینی",
"nbytes": "$1 {{PLURAL:$1|بایت|بایت}}",
"ncategories": "$1 {{PLURAL:$1|دسته|دسته جات}}",
+ "ninterwikis": "$1 {{PLURAL:$1|میان‌ویکی|میان‌ویکی}}",
"nlinks": "$1 {{PLURAL:$1|link|لینک}}",
"nmembers": "$1 {{PLURAL:$1|member|اعضا}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2| عضو|عضو}}",
"nrevisions": "$1 {{PLURAL:$1|بازبینی|بازبینی ان}}",
"nviews": "$1 {{PLURAL:$1|دیستن|دیستن}}",
+ "nimagelinks": "$1 × $2, $3 {{PLURAL:$3|صفحه|صفحات}}",
+ "ntransclusions": "بی $1 {{PLURAL:$1|تاکدیم|تاکدیم}} استپاده بوته",
"specialpage-empty": "په ای گزارش هچ نتیجه ای نیست ان.",
"lonelypages": "صفحات یتیم",
"lonelypagestext": "جهلیگین صفحات چه دگه صفحات لینک یا داهل نه بوتگنت ته {{SITENAME}}.",
@@ -1365,11 +1492,11 @@
"uncategorizedtemplates": "تمپلتان بی دسته",
"unusedcategories": "بی استفاده این دسته جات",
"unusedimages": "بی استفاده این فایلان",
- "popularpages": "مردمی صفحات",
"wantedcategories": "لوٹتگین دسته جات",
"wantedpages": "لوٹتگین صفحات",
"wantedpages-badtitle": "عنوان غیر مجازین ته جمع نتایج: $1",
"wantedfiles": "لوٹتگین فایلان",
+ "wantedfiletext-cat": "پرونده‌های زیر استفاده می‌شوند اما موجود نیستند. همچنین ممکن است پرونده‌های مخازن خارجی با وجود موجود بودن در اینجا فهرست شوند. هرگونه رتبه مثبت کاذب <del>خط خواهد خورد.</del> علاوه بر این، صفحاتی که پرونده‌هایی ناموجود را در خود جای داده‌اند در [[:$1]] فهرست شده‌اند.",
"wantedtemplates": "لوٹتگین تمپلت",
"mostlinked": "صفحاتی که گیشنر لینک دیگ بیتگنت",
"mostlinkedcategories": "دسته جاتی که گیشتر لینک دیگ بیتگنت",
@@ -1386,7 +1513,11 @@
"protectedpages-indef": "فقط محافظت نامحدود",
"protectedpages-cascade": "محافظتان آبشاری فقط",
"protectedpagesempty": "هچ صفحه ای گون ای پارامترآن",
+ "protectedpages-page": "تاکدیم",
+ "protectedpages-unknown-timestamp": "ناشناس",
+ "protectedpages-unknown-performer": "نا زانتین کار زوروک",
"protectedtitles": "عناوین محافظتی",
+ "protectedtitles-summary": "این صفحه فهرست صفحات موجود است که در حال حاضر محافظت از ساخت شده‌اند. برای فهرست عنوان‌هایی که محافظت از ویرایش شده‌اند، به [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] مراجعه کنید.",
"protectedtitlesempty": "هچ عنوانی هنو گو ای پارامتران محافظت نهنت.",
"listusers": "لیست کاربر",
"listusers-editsonly": "فقط کاربرانی که اصلاحاتش هست پیش بدار",
@@ -1410,10 +1541,10 @@
"booksources": "منابع کتاب",
"booksources-search-legend": "گردگ په منابع کتاب",
"booksources-isbn": "شابک:",
- "booksources-go": "برو",
+ "booksources-search": "گردگ",
"booksources-text": "چهلا یک لیستی چه لینکان په دگه سایتان هست که نوکین یا مستعمل این کتاب بها کنند و شما شاید گیشترین اطلاعات آی کتابانی باره که پرش گردیت در گیزیت:",
"booksources-invalid-isbn": "داتگین شماره کتاب چوش که جاه کیت درست نهنت, خطایانءِ بچار چه اصلی جاگاه کپی کن",
- "specialloguserlabel": "کاربر:",
+ "specialloguserlabel": "گوشینده:",
"speciallogtitlelabel": "عنوان:",
"log": "ورودان",
"all-logs-page": "کل ورودان",
@@ -1427,11 +1558,11 @@
"allpagesto": "پیش بدار صفحاتی که هلنت گون:",
"allarticles": "کل صفحات",
"allinnamespace": "کل صفحات($1 نام فضا)",
- "allpagessubmit": "برو",
+ "allpagessubmit": "برا",
"allpagesprefix": "صفحات پیش دار گون پیشوند:",
"allpagesbadtitle": "داتگین عنوان صفحه نامعتبر انت یا یک پیشوند بین ویکی یا یبن زبانی سحتی هستت.\nشاید شامل یک یا گیشتر کاراکتر بیت که ته عنوانین استفاده نه بیت.",
"allpages-bad-ns": "{{SITENAME}} فضانامی نیست \"$1\".",
- "categories": "دسته یان",
+ "categories": "تهرئان",
"categoriespagetext": "جهلیگین {{PLURAL:$1|دسته شامل|دسته جات شامل}} صفحات یا مدیا انت\n[[Special:UnusedCategories|دسته جات بی استفاده]] ادان پیشدارگ نه بنت.\n هنچوش بچار[[Special:WantedCategories|لوٹتگین دسته]].",
"categoriesfrom": "پیشدار دسته جات که شروع بنت گون:",
"special-categories-sort-count": "ترتیب په اساس شمار",
@@ -1478,9 +1609,11 @@
"noemailtitle": "هچ آدرس ایمیل",
"noemailtext": "ای کاربر یک آدرس ایمیل معتبری مشخص نه کتت.",
"nowikiemailtext": "ای کاربر نه لوٹیت چه دگه کاربران ایمیل بگیرت.",
+ "emailusername": "کار زوروکی نام:",
+ "emailusernamesubmit": "دیم دی",
"email-legend": "یک ایمیلی په دگه کاربر {{SITENAME}} دیم دی",
- "emailfrom": ":چه",
- "emailto": "به:",
+ "emailfrom": "شه:",
+ "emailto": "بی:",
"emailsubject": "موضوع:",
"emailmessage": "کوله:",
"emailsend": "دیم دی",
@@ -1488,7 +1621,7 @@
"emailccsubject": "کپی چه شمی کوله په $1: $2",
"emailsent": "ایمیل دیم دهگ بوت",
"emailsenttext": "شمی کوله ایمیل دیم دهگ بوت.",
- "emailuserfooter": "این نامه الکترونیکی گون استفاده چه ویژگی «پست الکترونیکی به کاربر» {{SITENAME}} گون $1 په $2 دیم دهگ بوتت.",
+ "emailuserfooter": "این ایمیل گون استفاده چه ویژگی «ایمیل کاربر» {{SITENAME}} گون $1 په $2 دیم دهگ بوتت.",
"watchlist": "منی لیست چارگ",
"mywatchlist": "منی لیست چارگ",
"nowatchlist": "شما را هچ چیزی ته وتی لیست چارگ نیست.",
@@ -1497,7 +1630,7 @@
"addedwatchtext": "صفحه \"[[:$1]]\" په شمی [[Special:Watchlist|watchlist]] هور بیت.\nدیمگی تغییرات په ای صفحه و آیاء صفحه گپ ادان لیست بنت، و صفحه پررنگ جاه کیت ته [[Special:RecentChanges|لیست نوکیت تغییرات]] په راحتر کتن شی که آی زورگ بیت.",
"removedwatchtext": "صفحه\"[[:$1]]\" چه [[Special:Watchlist|شمی لیست چارگ]]. دربیت.",
"watch": "به چار",
- "watchthispage": "ای صفحه ی بچار",
+ "watchthispage": "ای تاکدیما بگیند",
"unwatch": "نه چارگ",
"unwatchthispage": "چارگ بند کن",
"notanarticle": "یک صفحه محتوا نهت",
@@ -1506,7 +1639,7 @@
"wlheader-enotif": "اخطار ایمیل فعالنت.",
"wlheader-showupdated": "صفحات که عوض بوتگنت چه شمی آهری چارتن '''پررنگ''' پیش دراگ بنت.",
"wlnote": "جهلء {{PLURAL:$1|آهرین تغییر هست|آهرین هست'''$1''' تغییرات}} ته آهرین {{PLURAL:$2|ساعت|'''$2''' ساعات}}.",
- "wlshowlast": "پیش دار آهرین $1 ساعات $2 روچان $3",
+ "wlshowlast": "پیش دار آهرین $1 ساعات $2 روچان",
"watchlist-options": "گزینه یان لیست چارگ",
"watching": "چارگ بین",
"unwatching": "نه چارگ بیت",
@@ -1518,7 +1651,7 @@
"enotif_body": "آزیزین $WATCHINGUSERNAME،\n\nصفحه {{SITENAME}} $PAGETITLE بوتت $CHANGEDORCREATED ته $PAGEEDITDATE گون $PAGEEDITOR، بچار $PAGETITLE_URL په هنوکین نسخه.\n\n$NEWPAGE\n\nخلاصهء اصلاح کنوک:$PAGESUMMARY $PAGEMINOREDIT\n\nتماس گر گون اصلاح کنوک:\nایمیل:$PAGEEDITOR_EMAIL\nویکی: $PAGEEDITOR_WIKI\n\nدگه گیشترین اخطار په تغییرات دگه دیم دهگ نه بوت مگر شی که شما ای صفحه بچاریت.\nشما تونیت هنچوش نشانآن اخطارء ته وتی لیست چارگ په کلی چارتگین صفحات تنظیم کنیت.\n\nشمی دوستین سیستم اخطار {{SITENAME}}\n\n--\nپه عوض کتن تنظیمات وتی لیست چارگ،به چار\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nنظرات و گیشترین کمک:\n$HELPPAGE",
"created": "شربوتت",
"changed": "عوض بوت.",
- "deletepage": "حذف صفحه",
+ "deletepage": "تاکدیمِ پاک کورتین",
"confirm": "تایید",
"excontent": "محتوا هستنت: '$1'",
"excontentauthor": "محتوا ات: '$1' (و فقط شرکت کنندگان انت '[[Special:Contributions/$2|$2]]')",
@@ -1542,7 +1675,6 @@
"delete-toobig": "صفحهء یک مزنین تاریح اصلاحی هست گیشتر چه $1 {{PLURAL:$1|بازبینی|بازبینی}}.\nحذف چوشین صفحات په خاظر جلو گر چه ناگهانی اتفاق ته سایت {{SITENAME}} ممنوع بوتت.",
"delete-warning-toobig": "ای صفحه مزنین تاریح اصلاح هست، گیش چه $1 {{PLURAL:$1|بازبینی|بازبینی}}.\nحذف آی شاید کار دیتابیس {{SITENAME}} قطع کنت؛\nگون اخطار پیش روت.",
"rollback": "پشت ترگ اصلاحات",
- "rollback_short": "پشتررگ",
"rollbacklink": "عقب ترگ",
"rollbackfailed": "پشتررگ پروشت",
"cantrollback": "نه تونیت اصلاح برگردینیت؛\nآهری شرکت کننده فقط نویسوک ای صفحه انت.",
@@ -1637,7 +1769,7 @@
"undelete-show-file-submit": "بله",
"namespace": "فاصله نام",
"invert": "برگردینگ انتخاب",
- "blanknamespace": "(اصلی)",
+ "blanknamespace": "(بُنیادی)",
"contributions": "مشارکتان کاربر",
"contributions-title": "مشارکتان کاربر په $1",
"mycontris": "می مشارکتان",
@@ -1816,7 +1948,7 @@
"exportcuronly": "فقط شامل هنوکین بازبینی، نه تاریح کامل",
"exportnohistory": "----\n'''توجه:''' گردگ تاریح کامل صفحات چه طریق ای فرم په خاطر دلایل اجرایی غیر فعال بوتت.",
"export-submit": "درگیزگ",
- "export-addcattext": "چه دسته صفحات اضافه کن:",
+ "export-addcattext": "تاکدیمانِ اڈ کورتین شه تهر آ :",
"export-addcat": "اضافه کن",
"export-addnstext": "صفحاتی چه نام‌فضا هورکن:",
"export-addns": "هورکن",
@@ -1836,7 +1968,7 @@
"allmessages-filter-modified": "عوض بیتگ",
"allmessages-prefix": "فیلتر گون پیشوند:",
"allmessages-language": "زبان:",
- "allmessages-filter-submit": "برو",
+ "allmessages-filter-submit": "برا",
"thumbnail-more": "مزن",
"filemissing": "فایل گارنت",
"thumbnail_error": "خطا ته شرکتن هوردوکین$1",
@@ -1879,9 +2011,7 @@
"import-invalid-interwiki": "چه مشخص بیتگین ویکی وارد کنگ نبیتن",
"importlogpage": "ورودان وارد کن",
"importlogpagetext": "ورود مدیریتی صفحات گون تاریح صلاح چه دگه ویکی آن.",
- "import-logentry-upload": "وارد بوت [[$1]] گون فایل آپلود بوتگین",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|بازبینی|بازبینی ان}}",
- "import-logentry-interwiki": "بین ویکی بوت $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|بازبینی|بازبینی ان}} چه $2",
"tooltip-pt-userpage": "شمی صفحات",
"tooltip-pt-anonuserpage": "صفحه کاربر په آی پی که شما هنو اصلاح کنیت په داب",
@@ -1906,8 +2036,8 @@
"tooltip-search": "گردگ {{SITENAME}}",
"tooltip-search-go": "برو به یک صفحه گون همی نامی اگر که هستن",
"tooltip-search-fulltext": "گرد صفحات په ای متن",
- "tooltip-p-logo": "صفحه اصلی",
- "tooltip-n-mainpage": "صفحه اصلی بچار",
+ "tooltip-p-logo": "دیستین بُنیادی دیمی",
+ "tooltip-n-mainpage": "دیستین بُنیادی دیمی",
"tooltip-n-mainpage-description": "دیستن صفحه اصلی",
"tooltip-n-portal": "پروژه ی باره: هرچی که شما تونیت انجام دهیت، جاهی که چیزانا درگیزیت",
"tooltip-n-currentevents": "در گیزگ اطلاعات پیش زمینه ته هنوکین رویدادآن",
@@ -1961,6 +2091,8 @@
"spam_reverting": "عوض کتن په آهری نسحه که شامل لینکان می بیت په $1",
"spam_blanking": "کل بازبینی آن شامل لینکان په $1, بوتت هالیکی",
"simpleantispam-label": "کنترل ضد اسپم.\nای شیء پر ''مکن''",
+ "pageinfo-firstuser": "تاکدیمی جوڑ کنوک",
+ "pageinfo-category-info": "تهرِ مئلومات",
"markaspatrolleddiff": "نشان کن په داب نظارت بوتگین",
"markaspatrolledtext": "ای صفحه نشان کن په داب نظارت بوتگین",
"markedaspatrolled": "نشاننت په داب نظارتی",
@@ -2003,6 +2135,18 @@
"seconds-abbrev": "$1س",
"minutes-abbrev": "$1م",
"hours-abbrev": "$1ه",
+ "just-now": "همی انون",
+ "hours-ago": "$1 سائت دیمتیرا",
+ "minutes-ago": "$1 دکیکه دیمتیرا",
+ "seconds-ago": "$1 {{PLURAL:$1|سانیه|سانیه}} دیمتیرا",
+ "monday-at": "دوشمبی $1",
+ "tuesday-at": "سئه شمبی $1",
+ "wednesday-at": "چارشمبی $1",
+ "thursday-at": "پنج‌شمبی $1",
+ "friday-at": "جوما",
+ "saturday-at": "شمبی",
+ "sunday-at": "یک‌شمبی $1",
+ "yesterday-at": "زئ بی $1",
"bad_image_list": "فرمت په داب جهلیگی انت:\n\nفقط ایتمان لیست چارگ بنت(خطانی که گون * شروع بنت).\nاولین لینک ته یک خط باید یک لینکی په یک بدین فایلی بیت.\nهر لینکی که کیت ته هما خط اسنثتا بینت.",
"variantname-zh-hans": "هانس",
"variantname-zh-hant": "هانت",
@@ -2031,7 +2175,7 @@
"metadata-help": "ای فایل شامل مزیدین اطلاعاتنیت، شاید چه یک دوربین یا اسکنر په شرکتن و دیجیتالی کتن هور بیتت.\nاگه فایل چه اولیگین حالتی تغییر داته بوته شاید لهتی کل جزییات شر پیش مداریت.",
"metadata-expand": "پیش دار گیشترین جزییات",
"metadata-collapse": "پناه کن مزیدین جزییاتا",
- "metadata-fields": "EXIF متادیتا فیلدان لسیت بوتگن ته ای کوله شامل بینت تع عکس صفحه پیش داریت وهخهدی کهجدول متادیتا is هراب بیت.\nدگران پناه بنت په طور پیش فرض.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-fields": "EXIF متادیتا فیلدان لسیت بوتگن ته ای کوله شامل بینت تع اکس صفحه پیش داریت وهخهدی کهجدول متادیتا is هراب بیت.\nدگران پناه بنت په طور پیش فرض.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "پهنات",
"exif-imagelength": "بلندی",
"exif-bitspersample": "بیت ته جز",
@@ -2146,6 +2290,14 @@
"exif-gpsareainformation": "نام منطقه جی پی اس",
"exif-gpsdatestamp": "تاریح جی پی اس",
"exif-gpsdifferential": "اصلاح متفاوت جی پی اس",
+ "exif-countrydest": "نشان داته بوته گین ملک",
+ "exif-countrycodedest": "نشان داته بوته گین ملکِ کود",
+ "exif-provinceorstatedest": "نشان داته بوته گین ولایت یا ایالت",
+ "exif-citydest": "نشان داته بوته گین شار",
+ "exif-sublocationdest": "نشان داته بوته گین مئل",
+ "exif-writer": "نویسوک",
+ "exif-languagecode": "زبان",
+ "exif-iimcategory": "تهر",
"exif-compression-1": "کمپرس نه بوتت",
"exif-compression-6": "جیی پی ای جی",
"exif-photometricinterpretation-2": "آی جی بی",
@@ -2275,7 +2427,6 @@
"exif-gpsdestdistance-n": "دریایی مایل",
"exif-gpsdirection-t": "جهت درست",
"exif-gpsdirection-m": "مسیر آهن ربایی",
- "watchlistall2": "کل",
"namespacesall": "کل",
"monthsall": "کل",
"confirmemail": "آدرس ایمیل تایید کن",
@@ -2308,7 +2459,7 @@
"colon-separator": ":&#32;",
"imgmultipageprev": "← پیشگین صفحه",
"imgmultipagenext": "صفحه بعدی →",
- "imgmultigo": "برو!",
+ "imgmultigo": "برا!",
"imgmultigoto": "برو به صفحه $1",
"ascending_abbrev": "بالادی",
"descending_abbrev": "جهلادی",
@@ -2317,7 +2468,7 @@
"table_pager_first": "اولی صفحه",
"table_pager_last": "اهری صفحه",
"table_pager_limit": "پیش دار $1 ایتم ته هر صفحه",
- "table_pager_limit_submit": "برو",
+ "table_pager_limit_submit": "برا",
"table_pager_empty": "بی نتیجه",
"autosumm-blank": "هالیکین صفحه",
"autosumm-replace": "جاه په جاه کتن صفحه گون '$1'",
@@ -2385,7 +2536,6 @@
"hebrew-calendar-m10-gen": "تموز",
"hebrew-calendar-m11-gen": "آو",
"hebrew-calendar-m12-gen": "الول",
- "unknown_extension_tag": "ناشناس برجسب الحاق \"$1\"",
"duplicate-defaultsort": "هژاری: ترتیب پیش فرض «$2» ترتیب پیش فرض پیشگین «$1» را باطل کنت.",
"version": "نسخة",
"version-extensions": "نصب بوتگیت الحاق آن",
@@ -2399,11 +2549,12 @@
"version-parser-function-hooks": "عمل گر تجزیه کنوک گیر کت",
"version-hook-name": "نام گیر",
"version-hook-subscribedby": "اشتراک بیت گون",
- "version-version": "(نسخه $1)",
+ "version-version": "($1)",
"version-license": "لیسانس",
"version-software": "نصبین برنامه",
"version-software-product": "محصول",
"version-software-version": "نسخه",
+ "redirect-submit": "برا",
"fileduplicatesearch": "گردگ په کپی فایلان",
"fileduplicatesearch-summary": "گردگ په کپی فایلان په اساس درهمین ارزش.",
"fileduplicatesearch-legend": "گردگ په کپی",
@@ -2426,6 +2577,7 @@
"specialpages-group-wiki": "وسایل و دیتا وی کی",
"specialpages-group-redirects": "غیر مستقیم بیگنت صفحات حاصین",
"specialpages-group-spam": "وسایل اسپم",
+ "specialpages-group-developer": "وسایل پیشبروک",
"blankpage": "هالیکین صفحه",
"intentionallyblankpage": "ای صفحه عمدا هالیک هلگ بوتت و په محک زتن ویا دگه چیز.",
"external_image_whitelist": " #ای خطء هنچوش که هستن بلیت<pre>\n#اصطلاحات منظمء جهل بلیت (قسمتان باید بین شی بیاینت //) جهلء\n#شی گون یو ار ال درای لینک عکسان هم دپ بیت\n#ایانی که هم دپ بنت په داب عکس پیش دارگ بنت وگرنه فقط یک لینکی په عکس پیشداریت\n#خطوطی که گون # شروع بنت په داب نظر جاه کاینت\n\n#کل بخشان رجکسء بالادء ای خظ بل. ای خط هنچوش که هست بلی</pre>",
@@ -2458,8 +2610,10 @@
"revdelete-restricted": "محدودیت آن په مدیران سیستم بوت",
"revdelete-unrestricted": "به زور چه مدیران سیستم محدودیتان",
"rightsnone": "(هچ یک)",
+ "revdelete-summary": "خلاصه اصلاح",
+ "limitreport-templateargumentsize": "تراشوانِ ارگومینت اندازه",
"expandtemplates": "پچ کن تمپلیت آنء",
- "expand_templates_intro": "ای صفحه حاص لهتی متنء گریت و کل تمپلتان ته آییء برگشتی مزنش کنت.\nآیی هنچوش عمگر تجزیه کنوکء مزن کنت په داب\n<nowiki>{{</nowiki>#language:…}}, و متغییرانی په داب\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash; در حقیقت هر چیزی که ته دو براکتن.\nآیی ای کارء گون توار کنگ تجزیه کنوک مناسب چه مدیا وی کی وت انجام دنت.",
+ "expand_templates_intro": "ای تاک حاص لهتی متنء گریت و کل تمپلتان ته آییء برگشتی مزنش کنت.\nآیی هنچوش عمگر تجزیه کنوکء مزن کنت په داب\n<nowiki>{{</nowiki>#language:…}}, و متغییرانی په داب\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash; در حقیقت هر چیزی که ته دو براکتن.\nآیی ای کارء گون توار کنگ تجزیه کنوک مناسب چه مدیا وی کی وت انجام دنت.",
"expand_templates_title": "عنوان متن په {{FULLPAGENAME}} و دگه.:",
"expand_templates_input": "ورودی متن",
"expand_templates_output": "نتیجه",
@@ -2469,5 +2623,21 @@
"expand_templates_generate_xml": "پیش دار درچک تجزیه XMLء",
"expand_templates_preview": "بازبین",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (پعال)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر پعال''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر پعال''')",
+ "special-characters-group-latin": "لاتین",
+ "special-characters-group-greek": "یونانی",
+ "special-characters-group-cyrillic": "سیریلیک",
+ "special-characters-group-arabic": "ئربی",
+ "special-characters-group-arabicextended": "پیشرپته ئربی",
+ "special-characters-group-persian": "پارسی",
+ "special-characters-group-hebrew": "ئبری",
+ "special-characters-group-bangla": "بنگالی",
+ "special-characters-group-tamil": "تامیلی",
+ "special-characters-group-telugu": "تالوگو",
+ "special-characters-group-sinhala": "سینهالی",
+ "special-characters-group-gujarati": "گجراتی",
+ "special-characters-group-devanagari": "دیواناگرى",
+ "special-characters-group-thai": "تایلندی",
+ "special-characters-group-lao": "لائو",
+ "special-characters-group-khmer": "خمر"
}
diff --git a/languages/i18n/bcl.json b/languages/i18n/bcl.json
index bbfc3bb4..e5a69d91 100644
--- a/languages/i18n/bcl.json
+++ b/languages/i18n/bcl.json
@@ -8,7 +8,8 @@
"Shirayuki",
"Steven*fung",
"Urhixidur",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Linyahan an kilyawan:",
@@ -35,7 +36,7 @@
"tog-shownumberswatching": "Ihayag an numero kan nagbabantay na mga parágamit",
"tog-oldsig": "Tugmadong pirma",
"tog-fancysig": "Trataron an pirma na wiki-teksto (mayo nin awtomatikong kilyaw)",
- "tog-uselivepreview": "Gamíta an buhay na patànaw (eksperimental)",
+ "tog-uselivepreview": "Gamíton an buhay na patànaw",
"tog-forceeditsummary": "Ibunyaw sako kun maglalaog sa blangkong kalanyang nin paghirá",
"tog-watchlisthideown": "Tagóa an sakong mga pagliwat gikan sa bantay-listahan",
"tog-watchlisthidebots": "Tagóa an bot na mga pagliwat gikan sa bantay-listahan",
@@ -166,8 +167,8 @@
"searchbutton": "Maghanap",
"go": "Dumani",
"searcharticle": "Lakaw",
- "history": "Uusipon kan pahina",
- "history_short": "Uusipon",
+ "history": "Historiya nin pahina",
+ "history_short": "Historiya",
"updatedmarker": "dinagdagan poon kan sakong huring pagbisita",
"printableversion": "Nalilimbag na bersyon",
"permalink": "Permanenteng kilyawan",
@@ -183,8 +184,8 @@
"delete": "Puraon",
"deletethispage": "Puraon ining pahina",
"undeletethispage": "Balikon sa pagkapura ining pahina",
- "undelete_short": "Bawion an {{PLURAL:$1|sarong pagliwat|$1 mga pagliwat}}",
- "viewdeleted_short": "Hilingon {{PLURAL:$1|sarong pinara na pagliwat|$1 mga pinara na pagliwat}}",
+ "undelete_short": "Dae puraon an {{PLURAL:$1|sarong pagliwat|$1 mga pagliwat}}",
+ "viewdeleted_short": "Hilingon {{PLURAL:$1|sarong pinura na pagliwat|$1 mga pinura na pagliwat}}",
"protect": "Protektari",
"protect_change": "Ribayan",
"protectthispage": "Protektaran ining pahina",
@@ -391,6 +392,8 @@
"userlogin-resetlink": "Nakalingaw ka sa panlaog mong detalye?",
"userlogin-resetpassword-link": "Nalingawan mo an saimong pasa-taramon?",
"userlogin-helplink2": "Katabangan sa paglalaog",
+ "userlogin-loggedin": "Ika nakalaog na tabi bilang si {{GENDER:$1|$1}}.\nGamita an porma sa ibaba sa paglaog bilang ibang paragamit.",
+ "userlogin-createanother": "Magmukna nin ibang panindog",
"createacct-emailrequired": "Estada kan e-surat",
"createacct-emailoptional": "E-surat na estada (opsyonal)",
"createacct-email-ph": "Pakikaag an saimong e-surat na estada",
@@ -774,7 +777,6 @@
"mergehistory-same-destination": "Gikanan asin destinasyong mga pahina dae puwedeng magkapareho",
"mergehistory-reason": "Rason:",
"mergelog": "Talaan kan pagtiripon",
- "pagemerge-logentry": "pinagtiripon [[$1]] na magin [[$2]] (mga pagbabago sagkod sa $3)",
"revertmerge": "Suruwayón",
"mergelogpagetext": "Sa ibaba yaon an sarong listahan kan pinakahuring mga pagtitiripon kan sarong pahinang historiya sagkod sa iba pa.",
"history-title": "Pagbabagong historiya kan \"$1\"",
@@ -1405,7 +1407,6 @@
"statistics": "Mga Estadistiko",
"statistics-header-pages": "Estadistikong pahina",
"statistics-header-edits": "Estadistiko nin pagliwat",
- "statistics-header-views": "Estadistiko nin pagmansay",
"statistics-header-users": "Mga estadistiko nin parágamit",
"statistics-header-hooks": "Iba pang estadistiko",
"statistics-articles": "Laman na mga pahina",
@@ -1414,13 +1415,9 @@
"statistics-files": "Pinagkargang mga sagunson",
"statistics-edits": "Mga pagliwat sa pahina magpoon pa na an {{SITENAME}} pinagmukna.",
"statistics-edits-average": "Katahaw kan mga pagliliwat sa kada pahina",
- "statistics-views-total": "Mga Kamansayan sa kabilogan",
- "statistics-views-total-desc": "Mga kamansayan sa dae pa eksistidong mga pahina asin espesyal na mga pahina bakong kabali",
- "statistics-views-peredit": "Mga kamansayan kada pagliwat",
"statistics-users": "Rehistrado [[Special:ListUsers|users]]",
"statistics-users-active": "Mga Aktibong Paragamit",
"statistics-users-active-desc": "Mga paragamit na may ginibong aksyon sa nakaaging {{PLURAL:$1|aldaw|$1 mga aldaw}}",
- "statistics-mostpopular": "mga pinaka pighiling na pahina",
"pageswithprop": "Mga pahina na igwang pahina nin kagrugaring",
"pageswithprop-legend": "Mga pahina na igwang pahina nin kagrugaring",
"pageswithprop-text": "Ining mahina naglilista kan mga pahina na minagamit nin partikular na pahina nin kagrugaring.",
@@ -1461,7 +1458,6 @@
"uncategorizedtemplates": "Mga templatong mayong kategorya",
"unusedcategories": "Dai gamit na mga kategorya",
"unusedimages": "Mga dokumentong dai nagamit",
- "popularpages": "Mga popular na páhina",
"wantedcategories": "Mga hinahanap na kategorya",
"wantedpages": "Mga hinahanap na pahina",
"wantedpages-badtitle": "Imbalidong titulo sa resultang kinaag: $1",
@@ -1512,7 +1508,6 @@
"querypage-disabled": "Ining espesyal na pahina pinagpundo nin huli sa kaggibohang mga rason.",
"booksources": "Mga Ginikanan kan libro",
"booksources-search-legend": "Maghanap para sa mga ginikanang libro",
- "booksources-go": "Dumanán",
"booksources-text": "Mahihiling sa babâ an lista kan mga takod sa ibang ''site'' na nagbenbenta nin mga bâgo asin nagamit nang libro, asin pwede ser na igwa pang mga ibang impormasyon manonongod sa mga librong pighahanap mo:",
"booksources-invalid-isbn": "An pinagtaong ISBN dae minaluwas na balido; paki-tsek tabi nin mga sala sa pagkopya gikan sa orihinal na piggikanan.",
"specialloguserlabel": "Paragibo:",
@@ -1629,7 +1624,7 @@
"wlheader-enotif": "E-surat na paisi pinagpaandar na.",
"wlheader-showupdated": "Mga pahina na pinagriliwat poon kaidtong huri kang nagbisita sainda ipinapatanaw na '''mahîbog'''",
"wlnote": "Sa ibaba an {{PLURAL:$1|huring pagbabago|mga huring '''$1''' pagbabago}} sa nakaaging {{PLURAL:$2|oras|'''$2''' mga oras}}, magpoon pa kan $3, $4.",
- "wlshowlast": "Ipahilíng an nakaaging $1 na mga oras mga $2 na aldaw $3",
+ "wlshowlast": "Ipahilíng an nakaaging $1 na mga oras mga $2 na aldaw",
"watchlist-options": "Bantay-listahan na mga pagpipilian",
"watching": "Pigbabantayan...",
"unwatching": "Dai pigbabantayan...",
@@ -1677,7 +1672,6 @@
"delete-warning-toobig": "Ining pahina igwa nin dakulaong historiya sa pagliwat, minasobrang $1 {{PLURAL:$1|rebisyon|mga rebisyon}}.\nAn pagpupura kaini mapuwedeng makapag-antala sa mga operasyon kan datos-sarayan kan {{SITENAME}}; magpadagos tabi na igwang pag-iingat.",
"deleting-backlinks-warning": "'''Patanid:''' An ibang mga pahina nakatakod sa pahina na muya mong pagpupuraon.",
"rollback": "Mga paghihira na pabalík",
- "rollback_short": "pabalík",
"rollbacklink": "pabalikwaton",
"rollbacklinkcount": "ibalik $1 {{PLURAL:$1|pagliwat|mga pagliwat}}",
"rollbacklinkcount-morethan": "ibalik an sobrang $1 {{PLURAL:$1|pagliwat|mga pagliwat}}",
@@ -2090,18 +2084,14 @@
"import-rootpage-nosubpage": "Espasyong-ngaran \"$1\" kan ugat na pahina dae minatugot nin pan-irarom na mga pahina.",
"importlogpage": "Usip nin pagpalaog",
"importlogpagetext": "Administratibong mga importadong pahina na igwang historiya nin pagliliwat gikan sa ibang wikis.",
- "import-logentry-upload": "pigpadara an [[$1]] kan pagkarga nin ''file''",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|rebisyon|mga rebisyon}}",
- "import-logentry-interwiki": "na-transwiki an $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebisyon|mga rebisyon}} gikan sa $2",
"javascripttest": "Testing sa JavaScript",
- "javascripttest-title": "Pinapadalagan na $1 na mga pagtesting",
"javascripttest-pagetext-noframework": "An pahinang ini reserbado para sa pagpapadalagan kan mga pagtesting sa JavaScript.",
"javascripttest-pagetext-unknownframework": "Bakong bistadong modelo para sa pagtesting kan \"$1\".",
"javascripttest-pagetext-frameworks": "Pakipili tabi nin saro sa minasunod na mga modelo sa pagtesting: $1",
"javascripttest-pagetext-skins": "Magpili nin sarong kublit tanganing padalaganon an mga pagtesting sa:",
"javascripttest-qunit-intro": "Hilngon [$1 dokumentasyon sa pagtesting] sa mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit kuwarto nin pagtesting",
"tooltip-pt-userpage": "An saimong paragamit na pahina",
"tooltip-pt-anonuserpage": "An páhina nin páragamit para sa ip na pighihira mo bilang",
"tooltip-pt-mytalk": "An saimong pahina sa olayan",
@@ -2204,7 +2194,6 @@
"pageinfo-robot-policy": "Pinaghuhukdo sa paagi nin mga robot",
"pageinfo-robot-index": "Pinagtutugotan",
"pageinfo-robot-noindex": "Dae pinagtutugotan",
- "pageinfo-views": "Numero kan mga patanaw",
"pageinfo-watchers": "Numero kan parabantay nin pahina",
"pageinfo-few-watchers": "Kadikiton kesa $1{{PLURAL:$1|parabantay|mga parabantay}}",
"pageinfo-redirects-name": "Numero kan mga palikwat kaining pahina",
@@ -2652,7 +2641,6 @@
"exif-urgency-low": "Hababaon ($1)",
"exif-urgency-high": "Halangkawon ($1)",
"exif-urgency-other": "Prayoridad na pakahulugan nin paragamit ($1)",
- "watchlistall2": "gabos",
"namespacesall": "gabós",
"monthsall": "gabos",
"confirmemail": "Kompirmaron an ''e''-surat",
@@ -2728,7 +2716,6 @@
"watchlisttools-edit": "Tanawon asin liwaton an bantay-listahan",
"watchlisttools-raw": "Liwaton an hilaw na bantay-listahan",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|olay]])",
- "unknown_extension_tag": "Bakong bistadong ekstensyon nin pagmarka \"$1\"",
"duplicate-defaultsort": "'''Patanid tabi:''' An susing panugmad kan salansan na \"$2\" minasalimbaw sa dating susing panugmad kan salansan na \"$1\".",
"version": "Bersyon",
"version-extensions": "Instaladong mga ekstensyon",
@@ -2744,7 +2731,7 @@
"version-parser-function-hooks": "Mga panpunksyong pangawil kan Parser",
"version-hook-name": "Ngaran kan pangawil",
"version-hook-subscribedby": "Pinaghaguhot ni",
- "version-version": "(Bersyon na $1)",
+ "version-version": "($1)",
"version-license": "Lisensiya kan MediaWiki",
"version-ext-license": "Lisensiya",
"version-ext-colheader-name": "Ekstensyon",
@@ -2800,6 +2787,7 @@
"specialpages-group-wiki": "Datos asin mga palindô",
"specialpages-group-redirects": "Panukdo sa espesyal na mga pahina",
"specialpages-group-spam": "Pan-spam na mga kagamitan",
+ "specialpages-group-developer": "Mga kagamitan nin Paragibo",
"blankpage": "Blangkong pahina",
"intentionallyblankpage": "Pigtuyong blangko an pahinang ini",
"external_image_whitelist": "#Bayai ining linya eksaktong siring man sana kaini<pre>\n#Magkaag nin regular na mga panambitong parasa (idto sanang parte na minauyon sa tahaw kan //) na yaon sa ibaba\n#An mga ini paglalangkapon kaiba an mga kilyawan kan panluwas (hotlinked) na mga imahe\n#Idtong nagkaralangkap ipagpapahiling bilang mga imahe, o baya an sarong sugpon sana pasiring sa imahe an ipagpapahiling\n#Mga linya na nagpopoon sa # pagtatrataron bilang mga komento\n#Ini baya bakong sensitibo sa tipahan\n\n#Ikaag an gabos na parasang regex sa ibabaw kaining linya. Bayai ining linya eksaktong siring man sana kaini.</pre>",
@@ -2883,19 +2871,19 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|nagliwat}} kan pangrupong pagkamiyembro para sa $3",
"logentry-rights-autopromote": "$1 awtomatikong {{GENDER:$2|pinagpalangkaw}} gikan sa $4 pasiring sa $5",
"rightsnone": "(mayô)",
+ "feedback-adding": "Idugang an balik-simbag sa pahina...",
+ "feedback-bugcheck": "Marhay! I-tsek sana baya na ini bakong saro sa mga [$1 bistadong kuto].",
+ "feedback-bugnew": "Pig-tsek ko. Pakireport kan sarong baguhong kuto",
"feedback-bugornote": "Kun ika andam na iladawan an sarong teknikal na problema na igwang detalye tabi [$1 ipaaram an kuto].\nKun bako man, ika makakagamit nin sayon na porma sa ibaba. An saimong komento idudugang sa pahina \"[$3 $2]\", kaiba an saimong paragamit na ngaran.",
- "feedback-subject": "Subheto",
- "feedback-message": "An Mensahe:",
"feedback-cancel": "Kanselaron",
- "feedback-submit": "Isumite an balik-simbag",
- "feedback-adding": "Idugang an balik-simbag sa pahina...",
+ "feedback-close": "Nagibo na",
"feedback-error1": "Kasalaan: Bakong bistadong resulta gikan sa API",
"feedback-error2": "Kasalaan: An pagliwat nagpalya",
"feedback-error3": "Kasalaan: Mayong kasimbagan gikan sa API",
+ "feedback-message": "An Mensahe:",
+ "feedback-subject": "Subheto",
+ "feedback-submit": "Isumite",
"feedback-thanks": "Salamat! An saimong balik-simbag pinagposte sa pahina \"[$2 $1]\".",
- "feedback-close": "Nagibo na",
- "feedback-bugcheck": "Marhay! I-tsek sana baya na ini bakong saro sa mga [$1 bistadong kuto].",
- "feedback-bugnew": "Pig-tsek ko. Pakireport kan sarong baguhong kuto",
"searchsuggest-search": "Hanapa baya",
"searchsuggest-containing": "may laog na...",
"api-error-badaccess-groups": "Ika daeng permiso na magkarga nin mga sagunson sa wiking ini.",
diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json
index fbf020b7..b3418a17 100644
--- a/languages/i18n/be-tarask.json
+++ b/languages/i18n/be-tarask.json
@@ -42,7 +42,7 @@
"tog-shownumberswatching": "Паказваць колькасьць назіральнікаў",
"tog-oldsig": "Цяперашні подпіс:",
"tog-fancysig": "Апрацоўваць подпіс як вікітэкст (без аўтаматычнай спасылкі)",
- "tog-uselivepreview": "Выкарыстоўваць хуткі папярэдні прагляд (экспэрымэнтальна)",
+ "tog-uselivepreview": "Выкарыстоўваць хуткі папярэдні прагляд",
"tog-forceeditsummary": "Папярэджваць пра адсутнасьць кароткага апісаньня зьменаў",
"tog-watchlisthideown": "Хаваць мае праўкі ў сьпісе назіраньня",
"tog-watchlisthidebots": "Хаваць праўкі робатаў у сьпісе назіраньня",
@@ -230,6 +230,7 @@
"pool-queuefull": "Чарга запытаў поўная",
"pool-errorunknown": "Невядомая памылка",
"pool-servererror": "Служба лічыльніка пулу недаступная ($1).",
+ "poolcounter-usage-error": "Памылка выкарыстаньня: $1",
"aboutsite": "Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}",
"aboutpage": "Project:Пра {{GRAMMAR:вінавальны|{{SITENAME}}}}",
"copyright": "Зьмест даступны на ўмовах $1, калі не пазначана іншае.",
@@ -239,6 +240,7 @@
"disclaimers": "Адмова ад адказнасьці",
"disclaimerpage": "Project:Адмова ад адказнасьці",
"edithelp": "Дапамога ў рэдагаваньні",
+ "helppage-top-gethelp": "Дапамога",
"mainpage": "Галоўная старонка",
"mainpage-description": "Галоўная старонка",
"policy-url": "Project:Правілы",
@@ -255,7 +257,7 @@
"pagetitle": "$1 — {{SITENAME}}",
"retrievedfrom": "Атрымана з «$1»",
"youhavenewmessages": "Вы атрымалі $1 ($2).",
- "youhavenewmessagesfromusers": "{{PLURAL:$4|Вы}} атрымалі $1 ад {{PLURAL:$3|1=іншага ўдзельніка|$3 удзельнікаў}} ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Вы}} атрымалі $1 ад $3 {{PLURAL:$3|удзельніка|удзельнікаў}} ($2).",
"youhavenewmessagesmanyusers": "Вы атрымалі $1 ад некалькіх удзельнікаў ($2).",
"newmessageslinkplural": "{{PLURAL:$1|1=новае паведамленьне|999=новыя паведамленьні}}",
"newmessagesdifflinkplural": "{{PLURAL:$1|1=апошняя зьмена|999=апошнія зьмены}}",
@@ -289,7 +291,7 @@
"sort-ascending": "Сартаваць па ўзрастаньні",
"nstab-main": "Старонка",
"nstab-user": "Старонка {{GENDER:{{BASEPAGENAME}}|ўдзельніка|ўдзельніцы}}",
- "nstab-media": "Мэдыя",
+ "nstab-media": "Мультымэдыя",
"nstab-special": "Спэцыяльная старонка",
"nstab-project": "Старонка праекту",
"nstab-image": "Файл",
@@ -298,17 +300,17 @@
"nstab-help": "Старонка дапамогі",
"nstab-category": "Катэгорыя",
"nosuchaction": "Няма такога дзеяньня",
- "nosuchactiontext": "Дзеяньне, пазначанае ў URL, зьяўляецца няслушным.\nМагчыма, вы ўвялі няслушны URL або перайшлі па няслушнай спасылцы.\nГэта можа быць і памылкай у апраграмаваньні {{GRAMMAR:родны|{{SITENAME}}}}.",
+ "nosuchactiontext": "Дзеяньне, пазначанае ў URL, зьяўляецца няслушным.\nМагчыма, вы ўвялі няслушны URL або перайшлі па няслушнай спасылцы.\nГэта можа быць і памылкай у праграмным забесьпячэньні {{GRAMMAR:родны|{{SITENAME}}}}.",
"nosuchspecialpage": "Такой спэцыяльнай старонкі не існуе",
"nospecialpagetext": "<strong>Спэцыяльная старонка, да якой Вы зьвярнуліся, не існуе.</strong>\n\nСьпіс дзейных спэцыяльных старонак можна знайсьці на [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Памылка",
"databaseerror": "Памылка базы зьвестак",
- "databaseerror-text": "Пры запыце базы зьвестак узьнікла памылка.\nГэта можа сьведчыць пра няспраўнасьць апраграмаваньня.",
+ "databaseerror-text": "Пры запыце базы зьвестак узьнікла памылка.\nГэта можа сьведчыць пра памылку ў праграмным забесьпячэньні.",
"databaseerror-textcl": "Узьнікла памылка запыту базы зьвестак.",
"databaseerror-query": "Запыт: $1",
"databaseerror-function": "Функцыя: $1",
"databaseerror-error": "Памылка: $1",
- "laggedslavemode": "'''Увага:''' старонка можа ня ўтрымліваць апошніх зьменаў.",
+ "laggedslavemode": "<strong>Увага:</strong> старонка можа ня ўтрымліваць апошнія зьмены.",
"readonly": "База зьвестак заблякаваная",
"enterlockreason": "Пазначце прычыну блякаваньня і заплянаваны час разблякаваньня",
"readonlytext": "База зьвестак заблякаваная для дадаваньня новых старонак і іншых зьменаў, верагодна з прычыны тэхнічнага абслугоўваньня, пасьля якога будзе адноўлена звычайная праца.\n\nАдміністратар, які заблякаваў базу зьвестак, пакінуў наступнае тлумачэньне: $1",
@@ -318,13 +320,16 @@
"readonly_lag": "База зьвестак была аўтаматычна заблякаваная да выкананьня рэплікацыі галоўнай базы зьвестак з другаснымі",
"internalerror": "Унутраная памылка",
"internalerror_info": "Унутраная памылка: $1",
+ "internalerror-fatal-exception": "Фатальнае выключэньне тыпу «$1»",
"filecopyerror": "Немагчыма cкапіяваць файл «$1» у «$2».",
"filerenameerror": "Немагчыма перайменаваць файл «$1» у «$2».",
"filedeleteerror": "Немагчыма выдаліць файл «$1».",
- "directorycreateerror": "Немагчыма стварыць дырэкторыю «$1».",
+ "directorycreateerror": "Немагчыма стварыць каталёг «$1».",
+ "directoryreadonlyerror": "Тэчка «$1» толькі для чытаньня.",
+ "directorynotreadableerror": "Тэчка «$1» не чытаецца.",
"filenotfound": "Немагчыма знайсьці файл «$1».",
"unexpected": "Нечаканае значэньне: «$1»=«$2».",
- "formerror": "Памылка: не атрымалася адаслаць зьвесткі формы",
+ "formerror": "Памылка: не атрымалася адаслаць зьвесткі формы.",
"badarticleerror": "Гэтае дзеяньне немагчыма выканаць на гэтай старонцы.",
"cannotdelete": "Немагчыма выдаліць старонку альбо файл «$1». Магчыма, яна ўжо выдаленая кімсьці іншым.",
"cannotdelete-title": "Немагчыма выдаліць старонку «$1»",
@@ -339,13 +344,14 @@
"viewsource-title": "Прагляд крыніцы для $1",
"actionthrottled": "Дзеяньне прытрыманае",
"actionthrottledtext": "У межах барацьбы са спамам Вы абмежаваныя ў надта частым выкананьні гэтага дзеяньня за кароткі прамежак часу, і Вы перавысілі гэтае абмежаваньне. Калі ласка, паспрабуйце яшчэ раз празь некалькі хвілінаў.",
- "protectedpagetext": "Гэтая старонка была абароненая для перадухіленьня зьменаў ці іншых дзеяньняў.",
+ "protectedpagetext": "Гэтая старонка была абароненая для прадухіленьня зьменаў ці іншых дзеяньняў.",
"viewsourcetext": "Вы можаце праглядаць і капіяваць крынічны тэкст гэтай старонкі:",
- "viewyourtext": "Вы можаце праглядзець і скапіяваць крынічны тэкст '''вашых рэдагаваньняў''' на гэтую старонку:",
+ "viewyourtext": "Вы можаце праглядзець і скапіяваць крынічны тэкст <strong>вашых рэдагаваньняў</strong> на гэтай старонцы:",
"protectedinterface": "Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена. Каб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/ translatewiki.net], праект для перакладу MediaWiki.",
- "editinginterface": "'''Увага:''' Вы рэдагуеце старонку, якая ўтрымлівае сыстэмнае паведамленьне MediaWiki.\nЯе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.\nКаб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/wiki/Main_Page?setlang=be-tarask translatewiki.net] — праект для лякалізацыі MediaWiki.",
+ "editinginterface": "<strong>Увага:</strong> Вы рэдагуеце старонку, якая ўтрымлівае тэкст інтэрфэйсу праграмнага забесьпячэньня.\nЯе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.",
+ "translateinterface": "Каб дадаць ці зьмяніць пераклады для ўсіх вікі, калі ласка, крыстаецеся [//translatewiki.net/ translatewiki.net], лякалізацыйным праектам MediaWiki.",
"cascadeprotected": "Гэтая старонка абароненая ад рэдагаваньня, таму што яна ўключаная ў {{PLURAL:$1|1=наступную старонку, якая была абароненая|наступныя старонкі, якія былі абароненыя}} з актывізаванай опцыяй «каскаднай абароны»:\n$2",
- "namespaceprotected": "Вы ня маеце правоў на рэдагаваньне старонак у прасторы назваў '''$1'''.",
+ "namespaceprotected": "Вы ня маеце правоў на рэдагаваньне старонак у прасторы назваў <strong>$1</strong>.",
"customcssprotected": "Вы ня маеце правоў на рэдагаваньне гэтай CSS-старонкі, таму што яна ўтрымлівае пэрсанальныя налады іншага ўдзельніка.",
"customjsprotected": "Вы ня маеце правоў на рэдагаваньне гэтай старонкі JavaScript, таму што яна ўтрымлівае пэрсанальныя налады іншага ўдзельніка.",
"mycustomcssprotected": "Вы ня маеце дазволу рэдагаваць гэтую CSS-старонку.",
@@ -353,19 +359,19 @@
"myprivateinfoprotected": "Вы ня маеце дазволу на зьмяненьне ўласных прыватных зьвестак.",
"mypreferencesprotected": "Вы ня маеце дазволу на зьмяненьне сваіх наладаў.",
"ns-specialprotected": "Немагчыма рэдагаваць спэцыяльныя старонкі.",
- "titleprotected": "Стварэньне старонкі з такой назвай было забароненае ўдзельнікам [[User:$1|$1]].\nПрычына забароны: ''$2''.",
- "filereadonlyerror": "Немагчыма зьмяніць файл «$1», бо файлавае сховішча «$2» знаходзіцца ў рэжыме толькі для чытаньня\n\nАдміністратар, які абмежаваў доступ, пазначыў прычыну: «$3».",
- "invalidtitle-knownnamespace": "Няслушная назва ў прасторы «$2»: «$3»",
- "invalidtitle-unknownnamespace": "Няслушная назва ў невядомай прасторы $1: «$2»",
+ "titleprotected": "Стварэньне старонкі з такой назвай было забароненае {{GENDER:$1|ўдзельнікам|ўдзельніцай}} [[User:$1|$1]].\nПрычына забароны: «<em>$2</em>».",
+ "filereadonlyerror": "Немагчыма зьмяніць файл «$1», бо файлавае сховішча «$2» знаходзіцца ў рэжыме толькі для чытаньня.\n\nАдміністратар, які абмежаваў доступ, пазначыў прычыну: «$3».",
+ "invalidtitle-knownnamespace": "Няслушны загаловак з прасторай назваў «$2» і тэкстам «$3»",
+ "invalidtitle-unknownnamespace": "Няслушны загаловак зь невядомым нумарам прасторы назваў $1 і тэкстам «$2»",
"exception-nologin": "Вы не ўвайшлі ў сыстэму",
"exception-nologin-text": "Неабходна ўвайсьці, каб атрымаць доступ да гэтай старонкі або дзеяньня.",
"exception-nologin-text-manual": "Неабходна $1, каб мець доступ да гэтай старонкі або дзеяньня.",
- "virus-badscanner": "Няслушная канфігурацыя: невядомы антывірусны сканэр: ''$1''",
+ "virus-badscanner": "Няслушная канфігурацыя: невядомы антывірусны сканэр: <em>$1</em>",
"virus-scanfailed": "памылка сканаваньня (код $1)",
"virus-unknownscanner": "невядомы антывірус:",
- "logouttext": "'''Вы выйшлі з сыстэмы.'''\n\nНекаторыя старонкі могуць яшчэ паказваць, нібы вы ў сыстэме. Каб гэтага пазьбегнуць, трэба ачысьціць кэш браўзэра.",
+ "logouttext": "<strong>Вы выйшлі з сыстэмы.</strong>\n\nНекаторыя старонкі могуць яшчэ паказваць, нібы вы ў сыстэме. Каб гэтага пазьбегнуць, трэба ачысьціць кэш браўзэра.",
"welcomeuser": "Вітаем, $1!",
- "welcomecreation-msg": "Ваш рахунак быў створаны.\nНе забудзьцеся зьмяніць Вашыя [[Special:Preferences|налады ў {{GRAMMAR:месны|{{SITENAME}}}}]].",
+ "welcomecreation-msg": "Ваш рахунак быў створаны.\nВы можаце зьмяніць Вашыя [[Special:Preferences|налады ў {{GRAMMAR:месны|{{SITENAME}}}}]], калі пажадаеце.",
"yourname": "Імя ўдзельніка:",
"userlogin-yourname": "Імя ўдзельніка",
"userlogin-yourname-ph": "Увядзіце вашае імя ўдзельніка",
@@ -385,7 +391,7 @@
"externaldberror": "Адбылася памылка аўтэнтыфікацыі з дапамогай вонкавай базы зьвестак, ці Вам не дазволена абнаўляць свой рахунак.",
"login": "Увайсьці",
"nav-login-createaccount": "Уваход / стварэньне рахунку",
- "userlogin": "Увайсьці ў сыстэму",
+ "userlogin": "Увайсьці ў сыстэму / стварыць рахунак",
"userloginnocreate": "Увайсьці",
"logout": "Выйсьці",
"userlogout": "Выйсьці",
@@ -400,11 +406,13 @@
"userlogin-resetlink": "Забыліся на зьвесткі для ўваходу?",
"userlogin-resetpassword-link": "Забылі пароль?",
"userlogin-helplink2": "Дапамога з уваходам у сыстэму",
- "createacct-emailrequired": "E-mail адрас",
- "createacct-emailoptional": "E-mail адрас (неабавязкова)",
- "createacct-email-ph": "Увядзіце ваш e-mail адрас",
- "createacct-another-email-ph": "Увядзіце адрас e-mail",
- "createaccountmail": "Стварыць часовы адвольны пароль і даслаць яго на e-mail адрас, пазначаны ніжэй",
+ "userlogin-loggedin": "Вы ўжо ўвайшлі як {{GENDER:$1|$1}}.\nДля ўваходу пад іншым удзельнікам скарыстайцеся формай унізе.",
+ "userlogin-createanother": "Стварыць іншы рахунак",
+ "createacct-emailrequired": "Адрас электроннай пошты",
+ "createacct-emailoptional": "Адрас электроннай пошты (неабавязкова)",
+ "createacct-email-ph": "Увядзіце ваш адрас электроннай пошты",
+ "createacct-another-email-ph": "Увядзіце адрас электроннай пошты",
+ "createaccountmail": "Стварыць часовы адвольны пароль і даслаць яго на пазначаны адрас электроннай пошты",
"createacct-realname": "Сапраўднае імя (неабавязкова)",
"createaccountreason": "Прычына:",
"createacct-reason": "Прычына",
@@ -416,18 +424,18 @@
"createacct-benefit-heading": "{{SITENAME}} створаная людзьмі, такімі як вы.",
"createacct-benefit-body1": "{{PLURAL:$1|праўка|праўкі|правак}}",
"createacct-benefit-body2": "{{PLURAL:$1|старонка|старонкі|старонак}}",
- "createacct-benefit-body3": "{{PLURAL:$1|удзельнік|удзельніка|удзельнікаў}} за апошні час",
+ "createacct-benefit-body3": "{{PLURAL:$1|удзельнік|удзельнікі|удзельнікаў}} за апошні час",
"badretype": "Уведзеныя Вамі паролі не супадаюць.",
"userexists": "Уведзенае Вамі імя ўдзельніка ўжо выкарыстоўваецца кімсьці іншым. \nКалі ласка, выберыце іншае імя.",
"loginerror": "Памылка ўваходу",
"createacct-error": "Памылка стварэньня рахунку",
"createaccounterror": "Немагчыма стварыць рахунак: $1",
- "nocookiesnew": "Рахунак быў створаны, але ў сыстэму Вы не ўвайшлі.\n{{SITENAME}} выкарыстоўвае cookie для ўваходу ў сыстэму.\nУ Вашым браўзэры cookies адключаныя.\nКалі ласка, дазвольце іх, а потым ўвайдзіце з новым іменем удзельніка і паролем.",
- "nocookieslogin": "{{SITENAME}} выкарыстоўвае cookie для ўваходу ў сыстэму.\nУ Вашым браўзэры cookie адключаныя.\nКалі ласка, уключыце іх і паспрабуйце яшчэ раз.",
- "nocookiesfornew": "Рахунак удзельніка ня быў створаны, таму што мы не змаглі пацьвердзіць яго крыніцу. \nУпэўніце, што ў Вас уключаныя закладкі (cookies), перазагрузіце гэтую старонку і паспрабуйце зноў.",
+ "nocookiesnew": "Рахунак быў створаны, але ў сыстэму Вы не ўвайшлі.\n{{SITENAME}} выкарыстоўвае файлы-кукі для ўваходу ў сыстэму.\nУ Вашым браўзэры файлы-кукі адключаныя.\nКалі ласка, дазвольце іх, а потым ўвайдзіце з новым іменем удзельніка і паролем.",
+ "nocookieslogin": "{{SITENAME}} выкарыстоўвае файлы-кукі для ўваходу ў сыстэму.\nУ Вашым браўзэры файлы-кукі адключаныя.\nКалі ласка, уключыце іх і паспрабуйце яшчэ раз.",
+ "nocookiesfornew": "Рахунак удзельніка ня быў створаны, таму што мы не змаглі пацьвердзіць яго крыніцу. \nУпэўніцеся, што ў Вас уключаныя файлы-кукі, перазагрузіце гэтую старонку і паспрабуйце зноў.",
"noname": "Вы пазначылі няслушнае імя ўдзельніка.",
"loginsuccesstitle": "Пасьпяховы ўваход у сыстэму",
- "loginsuccess": "'''Цяпер Вы ўвайшлі ў {{GRAMMAR:вінавальны|{{SITENAME}}}} як «$1».'''",
+ "loginsuccess": "<strong>Цяпер Вы ўвайшлі ў {{GRAMMAR:вінавальны|{{SITENAME}}}} як «$1».</strong>",
"nosuchuser": "Удзельніка «$1» не існуе.\nВялікія і малыя літары адрозьніваюцца ў імёнах удзельнікаў.\nПраверце напісаньне альбо [[Special:UserLogin/signup|стварыце новы рахунак]].",
"nosuchusershort": "Удзельніка зь іменем «$1» не існуе. Праверце напісаньне.",
"nouserspecified": "Вы мусіце пазначыць імя ўдзельніка.",
@@ -435,8 +443,9 @@
"wrongpassword": "Уведзены няслушны пароль. Калі ласка, паспрабуйце яшчэ раз.",
"wrongpasswordempty": "Быў уведзены пусты пароль. Калі ласка, паспрабуйце яшчэ раз.",
"passwordtooshort": "Паролі павінны ўтрымліваць ня менш за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
+ "passwordtoolong": "Паролі ня могуць быць даўжэй за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
"password-name-match": "Ваш пароль павінен адрозьнівацца ад Вашага імя ўдзельніка.",
- "password-login-forbidden": "Выкарыстаньне гэтага імя ўдзельніка і пароля было забароненае.",
+ "password-login-forbidden": "Выкарыстаньне гэтага імя ўдзельніка і паролю было забароненае.",
"mailmypassword": "Скінуць пароль",
"passwordremindertitle": "Новы часовы пароль для {{GRAMMAR:родны|{{SITENAME}}}}",
"passwordremindertext": "Нехта (магчыма Вы, з IP-адрасу $1) запытаў нас даслаць новы пароль для {{GRAMMAR:родны|{{SITENAME}}}} ($4). Для ўдзельніка «$2» быў створаны часовы пароль і ён цяпер «$3». Калі гэта была Вашая ініцыятыва, Вам трэба ўвайсьці ў сыстэму і адразу зьмяніць пароль. Тэрмін дзеяньня Вашага часовага паролю — $5 {{PLURAL:$5|дзень|дні|дзён}}.\n\nКалі гэты запыт адправіў нехта іншы, альбо Вы ўзгадалі свой пароль і ўжо не жадаеце яго зьмяніць, Вы можаце праігнараваць гэты ліст і працягваць карыстацца старым паролем.",
@@ -559,10 +568,12 @@
"anoneditwarning": "<strong>Папярэджаньне</strong>: вы не ўвайшлі ў сыстэму. Ваш IP-адрас будзе бачны ўсім, калі вы адрэдагуеце старонку. Калі вы <strong>[$1 ўвойдзеце]</strong> або <strong>[$2 створыце рахунак]</strong>, вашыя рэдагаваньні будуць зьвязаныя з вашым імем карыстальніка, а таксама вам будуць даступныя дадатковыя перавагі.",
"anonpreviewwarning": "''Вы не ўвайшлі ў сыстэму. Падчас захаваньня Ваш IP-адрас будзе дададзены ў гісторыю рэдагаваньняў старонкі.''",
"missingsummary": "'''Напамін:''' Вы не пазначылі кароткае апісаньне зьменаў.\nКалі Вы націсьніце кнопку «Запісаць» яшчэ раз, Вашае рэдагаваньне будзе запісанае без апісаньня.",
+ "selfredirect": "<strong>Папярэджаньне:</strong> вы перанакіроўваеце старонку саму на сябе.\nМагчыма, вы пазначылі няслушную старонку для перанакіраваньня або вы рэдагуеце ня тую старонку.\nКалі вы націсьніце «{{int:savearticle}}» яшчэ раз, перанакіраваньне будзе створанае.",
"missingcommenttext": "Калі ласка, увядзіце камэнтар ніжэй.",
"missingcommentheader": "'''Напамін:''' Вы не пазначылі загаловак камэнтара.\nКалі Вы націсьніце кнопку «{{int:savearticle}}» яшчэ раз, Ваш камэнтар захаваецца бяз тэмы.",
"summary-preview": "Папярэдні прагляд апісаньня:",
"subject-preview": "Папярэдні прагляд загалоўку:",
+ "previewerrortext": "Адбылася памылка пры спробе папярэдняга прагляду вашых зьменаў.",
"blockedtitle": "Удзельнік заблякаваны",
"blockedtext": "'''Ваш рахунак ўдзельніка ці IP-адрас быў заблякаваны.'''\n\nБлякаваньне выканаў $1.\nПрычына гэтага: ''$2''.\n\n* Пачатак блякаваньня: $8\n* Сканчэньне блякаваньня: $6\n* Быў заблякаваны: $7\n\nВы можаце скантактавацца з $1 ці адным зь іншых [[{{MediaWiki:Grouppage-sysop}}|адміністратараў]], каб абмеркаваць блякаваньне. Заўважце, што Вы ня зможаце ўжыць магчымасьць «даслаць ліст па электроннай пошце», пакуль не пазначыце сапраўдны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], і калі гэта Вам не было забаронена.\nВаш IP-адрас — $3, ідэнтыфікатар блякаваньня — #$5.\nКалі ласка, улучайце ўсю вышэйпададзеную інфармацыю ва ўсе запыты, што Вы будзеце рабіць.",
"autoblockedtext": "Ваш IP-адрас быў аўтаматычна заблякаваны, таму што ён ужываўся іншым удзельнікам, які быў заблякаваны $1.\nПрычына гэтага:\n\n:''$2''\n\n* Блякаваньне пачалося: $8\n* Блякаваньне скончыцца: $6\n* Быў заблякаваны: $7\n\nВы можаце скантактавацца з $1 ці з адным зь іншых [[{{MediaWiki:Grouppage-sysop}}|адміністратараў]], каб абмеркаваць блякаваньне.\n\nЗаўважце, што Вы ня зможаце ужываць магчымасьць «даслаць ліст праз электронную пошту», пакуль ня будзе пазначаны дзейны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах удзельніка]], і калі гэта Вам не было забаронена.\n\nВаш цяперашні IP-адрас — $3, ідэнтыфікатар блякаваньня — #$5.\nКалі ласка, улучайце ўсю вышэйпададзеную інфармацыю ва ўсе запыты, што Вы будзеце рабіць.",
@@ -656,6 +667,10 @@
"content-model-text": "просты тэкст",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Пусты аб’ект",
+ "content-json-empty-array": "Пусты масіў",
+ "duplicate-args-category": "Старонкі, на якіх у шаблёнах выкарыстоўваюцца парамэтры-дублікаты",
+ "duplicate-args-category-desc": "Старонкі, якія ўтрымліваюць шаблёны з парамэтрамі-дублікатамі, напрыклад, <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> або <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Папярэджаньне: гэтая старонка ўтрымлівае зашмат працаёмістых зваротаў да функцыяў парсэра.\n\nПавінна быць ня болей за $2 {{PLURAL:$2|зварот|звароты|зваротаў}}, а цяпер ўтрымліваецца {{PLURAL:$1|$1 зварот|$1 звароты|$1 зваротаў}}.",
"expensive-parserfunction-category": "Старонкі, якія ўтрымліваюць зашмат працаёмістых зваротаў да функцыяў парсэра",
"post-expand-template-inclusion-warning": "Папярэджаньне: Памер уключаемых шаблёнаў занадта вялікі.\nНекаторыя шаблёны ня будуць уключаныя.",
@@ -710,7 +725,7 @@
"history-feed-empty": "Запатрабаванай старонкі не існуе.\nМагчыма, яна была выдаленая альбо яе перанесьлі.\nПаспрабуйце [[Special:Search|пашукаць]] падобныя старонкі.",
"rev-deleted-comment": "(апісаньне зьменаў выдаленае)",
"rev-deleted-user": "(імя ўдзельніка выдаленае)",
- "rev-deleted-event": "(запіс з журнала падзеяў выдалены)",
+ "rev-deleted-event": "(падрабязнасьці выдаленыя з журнала падзеяў)",
"rev-deleted-user-contribs": "[імя ўдзельніка альбо IP-адрас выдалены — рэдагаваньне схаванае з унёску]",
"rev-deleted-text-permission": "Гэтая вэрсія старонкі была '''выдаленая'''.\nМагчыма, падрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
"rev-suppressed-text-permission": "Гэтая вэрсія старонкі была <strong>схаваная</strong>.\nПадрабязнасьці могуць быць знойдзеныя ў [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} журнале хаваньняў].",
@@ -744,7 +759,7 @@
"revdelete-legend": "Усталяваць абмежаваньні бачнасьці",
"revdelete-hide-text": "Тэкст вэрсіі",
"revdelete-hide-image": "Схаваць зьмест файла",
- "revdelete-hide-name": "Схаваць дзеяньне і мэту",
+ "revdelete-hide-name": "Схаваць мэту і парамэтры",
"revdelete-hide-comment": "Апісаньне зьменаў",
"revdelete-hide-user": "Імя ўдзельніка/IP-адрас",
"revdelete-hide-restricted": "Ужываць гэтыя абмежаваньні таксама і для адміністратараў",
@@ -798,7 +813,6 @@
"mergehistory-same-destination": "Крынічная і мэтавая старонкі ня могуць супадаць",
"mergehistory-reason": "Прычына:",
"mergelog": "Журнал аб’яднаньняў",
- "pagemerge-logentry": "аб’яднаная [[$1]] ў [[$2]] (гісторыя рэдагаваньняў да $3)",
"revertmerge": "Разьяднаць",
"mergelogpagetext": "Ніжэй знаходзіцца сьпіс апошніх аб'яднаньняў гісторыяў старонак.",
"history-title": "$1 — гісторыя зьменаў",
@@ -821,6 +835,8 @@
"notextmatches": "Супадзеньні ў тэкстах старонак ня знойдзеныя",
"prevn": "{{PLURAL:$1|папярэдняя|папярэднія|папярэднія}} $1",
"nextn": "{{PLURAL:$1|наступная|наступныя|наступныя}} $1",
+ "prev-page": "папярэдняя старонка",
+ "next-page": "наступная старонка",
"prevn-title": "{{PLURAL:$1|Папярэдні $1 вынік|Папярэднія $1 вынікі|Папярэднія $1 вынікаў}}",
"nextn-title": "{{PLURAL:$1|Наступны $1 вынік|Наступныя $1 вынікі|Наступныя $1 вынікаў}}",
"shown-title": "Паказваць $1 {{PLURAL:$1|вынік|вынікі|вынікаў}} на старонцы",
@@ -839,6 +855,7 @@
"search-result-category-size": "$1 {{PLURAL:$1|элемэнт|элемэнты|элемэнтаў}} ($2 {{PLURAL:$2|падкатэгорыя|падкатэгорыі|падкатэгорыяў}}, $3 {{PLURAL:|файл|файлы|файлаў}})",
"search-redirect": "(перанакіраваньне $1)",
"search-section": "(сэкцыя $1)",
+ "search-category": "(катэгорыя $1)",
"search-file-match": "(супадае зь зьмесьцівам файла)",
"search-suggest": "Магчыма, вы мелі на ўвазе: $1",
"search-interwiki-caption": "Сумежныя праекты",
@@ -872,6 +889,11 @@
"prefs-personal": "Асабістыя зьвесткі",
"prefs-rc": "Апошнія зьмены",
"prefs-watchlist": "Сьпіс назіраньня",
+ "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-watchlist-edits": "Колькасьць рэдагаваньняў для паказу ў пашыраным сьпісе назіраньня:",
@@ -941,7 +963,7 @@
"gender-female": "Яна рэдагуе вікістаронкі",
"prefs-help-gender": "Вызначаць гэта неабавязкова.\nАпраграмаваньне выкарыстоўвае гэтае значэньне толькі для граматычна карэктнага звароту да вас.\nГэтая інфармацыя будзе агульнадаступнай.",
"email": "Электронная пошта",
- "prefs-help-realname": "Сапраўднае імя паведамляць неабавязкова.\nКалі Вы яго пазначыце, яно будзе выкарыстоўвацца для пазначэньня Вашай працы.",
+ "prefs-help-realname": "Сапраўднае імя паведамляць неабавязковае.\nКалі Вы яго пазначыце, яно можа быць выкарыстанае для пазначэньня Вашай працы.",
"prefs-help-email": "Адрас электроннай пошты неабавязковы, але ён дае магчымасьць даслаць Вам пароль, калі Вы забылі яго.",
"prefs-help-email-others": "Вы можаце таксама дазволіць іншым удзельнікам кантактаваць з Вамі праз Вашую асабістую старонку гутарак безь неабходнасьці раскрыцьця адрасу электроннай пошты.",
"prefs-help-email-required": "Патрабуецца адрас электроннай пошты.",
@@ -1048,6 +1070,7 @@
"right-protect": "зьмена ўзроўню абароны старонак і рэдагаваньне каскадна абароненых старонак",
"right-editprotected": "рэдагаваньне старонак, абароненых у рэжыме «{{int:protect-level-sysop}}»",
"right-editsemiprotected": "рэдагаваньне старонак, абароненых у рэжыме «{{int:protect-level-autoconfirmed}}»",
+ "right-editcontentmodel": "рэдагаваньне мадэлі зьместу старонкі",
"right-editinterface": "рэдагаваньне інтэрфэйса карыстальніка",
"right-editusercssjs": "рэдагаваньне CSS і JS файлаў іншых удзельнікаў",
"right-editusercss": "рэдагаваньне CSS файлаў іншых удзельнікаў",
@@ -1075,6 +1098,7 @@
"right-override-export-depth": "экспартаваньне старонак, уключаючы зьвязаныя старонкі з глыбінёй да 5",
"right-sendemail": "адпраўка электронных лістоў іншым удзельнікам",
"right-passwordreset": "прагляд электронных лістоў з ачысткай паролю",
+ "right-managechangetags": "ствараць і выдаляць [[Special:Tags|меткі]] з базы зьвестак",
"newuserlogpage": "Журнал стварэньня рахункаў",
"newuserlogpagetext": "Гэта журнал стварэньня рахункаў удзельнікаў і ўдзельніц.",
"rightslog": "Журнал правоў удзельнікаў",
@@ -1120,6 +1144,8 @@
"action-viewmywatchlist": "праглядаць ваш сьпіс назіраньня",
"action-viewmyprivateinfo": "прагляд вашых прыватных зьвестак",
"action-editmyprivateinfo": "рэдагаваньне вашых прыватных зьвестак",
+ "action-editcontentmodel": "рэдагаваньне мадэлі зьместу старонкі",
+ "action-managechangetags": "стварэньне і выдаленьне метак з базы зьвестак",
"nchanges": "$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|з апошняга візыту}}",
"enhancedrc-history": "гісторыя",
@@ -1166,7 +1192,7 @@
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}]",
"rc_categories": "Абмежаваць катэгорыямі (разьдзяляйце знакам «|»)",
"rc_categories_any": "Усе",
- "rc-change-size-new": "$1 {{PLURAL:$1|байт|байта|байтаў}} пасьля зьмены",
+ "rc-change-size-new": "$1 {{PLURAL:$1|байт|байты|байтаў}} пасьля зьмены",
"newsectionsummary": "/* $1 */ новая сэкцыя",
"rc-enhanced-expand": "Паказаць падрабязнасьці",
"rc-enhanced-hide": "Схаваць падрабязнасьці",
@@ -1189,9 +1215,9 @@
"uploaderror": "Памылка загрузкі",
"upload-recreate-warning": "'''Увага: файл з такой назвай быў выдалены альбо перанесены.'''\n\nЖурнал выдаленьняў і пераносаў гэтай старонкі для зручнасьці пададзены тут:",
"uploadtext": "Ужывайце форму ніжэй для загрузкі файлаў.\nКаб паглядзець ці адшукаць раней загружаныя файлы, глядзіце [[Special:FileList|сьпіс загружаных файлаў]], загрузкі таксама запісваюцца ў [[Special:Log/upload|журнал загрузак]], а выдаленьні — у [[Special:Log/delete|журнал выдаленьняў]].\n\nКаб улучыць файл у старонку, ужывайце адзін з наступных варыянтаў:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' для поўнай вэрсіі файла\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|Подпіс да выявы]]</nowiki></code>''' для выявы шырынёй 200 піксэляў у рамцы і тэкстам «Подпіс да выявы» ў якасьці подпісу\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' для простай спасылкі на файл безь яго адлюстраваньня.",
- "upload-permitted": "Дазволеныя тыпы файлаў: $1.",
- "upload-preferred": "Пажаданыя тыпы файлаў: $1.",
- "upload-prohibited": "Забароненыя тыпы файлаў: $1.",
+ "upload-permitted": "{{PLURAL:$2|Дазволены тып|Дазволеныя тыпы}} файлаў: $1.",
+ "upload-preferred": "{{PLURAL:$2|Пажаданы тып|Пажаданыя тыпы}} файлаў: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Забаронены тып|Забароненыя тыпы}} файлаў: $1.",
"uploadlogpage": "Журнал загрузак",
"uploadlogpagetext": "Сьпіс апошніх загружаных файлаў.",
"filename": "Назва файла",
@@ -1449,7 +1475,6 @@
"statistics": "Статыстыка",
"statistics-header-pages": "Статыстыка старонак",
"statistics-header-edits": "Статыстыка рэдагаваньняў",
- "statistics-header-views": "Статыстыка праглядаў",
"statistics-header-users": "Статыстыка ўдзелу",
"statistics-header-hooks": "Іншая статыстыка",
"statistics-articles": "Колькасьць старонак са зьместам",
@@ -1458,13 +1483,9 @@
"statistics-files": "Колькасьць загружаных файлаў",
"statistics-edits": "Агульная колькасьць рэдагаваньняў",
"statistics-edits-average": "Сярэдняя колькасьць рэдагаваньняў на старонку",
- "statistics-views-total": "Агульная колькасьць праглядаў",
- "statistics-views-total-desc": "Прагляды неіснуючых старонак і спэцыяльных старонак не ўлічаныя",
- "statistics-views-peredit": "Колькасьць праглядаў на рэдагаваньне",
"statistics-users": "[[Special:ListUsers|Зарэгістраваныя ўдзельнікі]]",
"statistics-users-active": "Актыўныя ўдзельнікі",
"statistics-users-active-desc": "Удзельнікі, якія выканалі нейкае дзеяньне цягам {{PLURAL:$1|апошняга $1 дня|апошніх $1 дзён|апошніх $1 дзён}}",
- "statistics-mostpopular": "Найпапулярнейшыя старонкі",
"pageswithprop": "Старонкі з уласьцівасьцямі старонак",
"pageswithprop-legend": "Старонкі з уласьцівасьцямі старонак",
"pageswithprop-text": "На гэтай старонцы адлюстроўваюцца старонкі, якія ўжываюць пэўныя ўласьцівасьці старонак",
@@ -1505,9 +1526,9 @@
"uncategorizedtemplates": "Некатэгарызаваныя шаблёны",
"unusedcategories": "Катэгорыі, якія не выкарыстоўваюцца",
"unusedimages": "Файлы, якія не выкарыстоўваюцца",
- "popularpages": "Папулярныя старонкі",
"wantedcategories": "Запатрабаваныя катэгорыі",
"wantedpages": "Запатрабаваныя старонкі",
+ "wantedpages-summary": "Сьпіс няісных старонак з найбольшай колькасьцю спасылак на іх, за выключэньнем старонак, на якія спасылаюцца толькі старонкі-перанакіраваньні. Дзеля сьпісу няісных старонак, на якія спасылаюцца перанакіраваньні, глядзіце [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Няслушная назва сярод вынікаў: $1",
"wantedfiles": "Запатрабаваныя файлы",
"wantedfiletext-cat": "Наступныя файлы выкарыстоўваюцца, але іх няма. Файлы са зьнешніх сховішчаў могуць знаходзіцца ў сьпісе без уліку іх існаваньня. Любыя такія няслушныя ўваходжаньні будуць <del>выкрасьленыя</del>. Дадаткова, старонкі, якія ўбудоўваюць неіснуючыя файлы прыведзеныя на [[:$1]].",
@@ -1567,10 +1588,12 @@
"pager-older-n": "$1 {{PLURAL:$1|старэйшая|старэйшыя|старэйшых}}",
"suppress": "Рэвізаваць",
"querypage-disabled": "Гэта спэцыяльная старонка адключаная для падвышэньня прадукцыйнасьці",
+ "apihelp": "Даведка API",
+ "apihelp-no-such-module": "Модуль «$1» ня знойдзены.",
"booksources": "Пошук кніг",
"booksources-search-legend": "Пошук кніг",
"booksources-isbn": "ISBN:",
- "booksources-go": "Паказаць",
+ "booksources-search": "Шукаць",
"booksources-text": "Ніжэй знаходзіцца сьпіс спасылак на іншыя сайты, якія прадаюць новыя і патрыманыя кнігі, і могуць таксама мець інфармацыю пра кнігі, якія Вы шукаеце:",
"booksources-invalid-isbn": "Пададзены няслушны ISBN; праверце, магчыма ўзьніклі памылкі пры пераносе нумару з арыгінальнай крыніцы.",
"specialloguserlabel": "Выканаўца:",
@@ -1706,7 +1729,7 @@
"wlheader-enotif": "Апавяшчэньне па e-mail уключанае.",
"wlheader-showupdated": "Старонкі, зьмененыя з часу вашага апошняга візыту, вылучаныя '''тоўстым''' шрыфтам.",
"wlnote": "Ніжэй {{PLURAL:$1|паказаная <strong>$1</strong> апошняя зьмена|паказаныя <strong>$1</strong> апошнія зьмены|паказаныя <strong>$1</strong> апошніх зьменаў}} за <strong>$2</strong> {{PLURAL:$2|гадзіну|гадзіны|гадзінаў}}, па стане на $4 $3.",
- "wlshowlast": "Паказаць: за апошнія $1 гадзінаў, $2 дзён, $3",
+ "wlshowlast": "Паказаць за апошнія $1 гадзінаў, $2 дзён",
"watchlist-options": "Налады сьпісу назіраньня",
"watching": "Дадаецца ў сьпіс назіраньня…",
"unwatching": "Выдаляецца са сьпісу назіраньня…",
@@ -1755,7 +1778,6 @@
"deleteprotected": "Вы ня можаце выдаліць гэтую старонку, таму што яна абароненая.",
"deleting-backlinks-warning": "'''Увага:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|іншыя старонкі]] ўключаюць або спасылаюцца на старонку, якую вы зьбіраецеся выдаліць.",
"rollback": "Адкаціць рэдагаваньні",
- "rollback_short": "Адкат",
"rollbacklink": "адкат",
"rollbacklinkcount": "адкаціць $1 {{PLURAL:$1|рэдагаваньне|рэдагаваньні|рэдагаваньняў}}",
"rollbacklinkcount-morethan": "адкаціць больш за $1 {{PLURAL:$1|рэдагаваньне|рэдагаваньні|рэдагаваньняў}}",
@@ -1865,6 +1887,7 @@
"namespace": "Прастора назваў:",
"invert": "Адваротны выбар",
"tooltip-invert": "Пазначце гэтае поле каб схаваць зьмены ў старонках з выбранай прасторы назваў (і зьвязнай прасторы назваў, калі пазначана)",
+ "tooltip-whatlinkshere-invert": "Адзначце гэтае поле, каб схаваць спасылкі з старонак у вызначанай прасторы назваў",
"namespace_association": "Зьвязаная прастора назваў",
"tooltip-namespace_association": "Пазначце гэтае поле каб уключыць простору назваў абмеркаваньняў (альбо прадметную), зьвязаных з выбранай прасторай назваў",
"blanknamespace": "(Асноўная)",
@@ -2129,13 +2152,14 @@
"thumbnail-temp-create": "Немагчыма стварыць часовы файл мініятуры",
"thumbnail-dest-create": "Немагчыма захаваць мініятуру ў месцы прызначэньня",
"thumbnail_invalid_params": "Няслушныя парамэтры мініятуры",
+ "thumbnail_toobigimagearea": "Файл з памерамі большымі, чым $1",
"thumbnail_dest_directory": "Немагчыма стварыць мэтавую дырэкторыю",
"thumbnail_image-type": "Тып выявы не падтрымліваецца",
"thumbnail_gd-library": "Няпоўная канфігурацыя бібліятэкі GD: няма функцыі $1",
"thumbnail_image-missing": "Верагодна няма файла $1",
"thumbnail_image-failure-limit": "Было зроблена зашмат няўдалых спробаў ($1 ці болей) сфармаваць гэтую мініятуру. Калі ласка, паспрабуйце пазьней.",
"import": "Імпартаваць старонкі",
- "importinterwiki": "Імпартаваньне зь іншых вікі",
+ "importinterwiki": "Імпартаваньне зь іншай вікі",
"import-interwiki-text": "Абярыце вікі і назву старонкі для імпартаваньня.\nДаты зьменаў і імёны аўтараў будуць захаваныя.\nУсе дзеяньні імпартаваньня паміж вікі запісваюцца ў [[Special:Log/import|журнал імпартаваньняў]].",
"import-interwiki-sourcewiki": "Крынічная вікі:",
"import-interwiki-sourcepage": "Крынічная старонка:",
@@ -2156,7 +2180,7 @@
"importcantopen": "Немагчыма адкрыць файл імпарту",
"importbadinterwiki": "Няслушная спасылка на іншую моўную вэрсію",
"importsuccess": "Імпартаваньне скончанае!",
- "importnosources": "Крыніцы імпарту паміж вікі не былі вызначаныя і наўпроставая загрузка гісторыі адключаная.",
+ "importnosources": "Вікі для імпарту не былі вызначаныя і наўпроставая загрузка гісторыі адключаная.",
"importnofile": "Файл для імпартаваньня ня быў загружаны.",
"importuploaderrorsize": "Не атрымалася загрузіць файл імпартаваньня.\nПамер файла болей за дазволены для загрузкі.",
"importuploaderrorpartial": "Не атрымалася загрузіць файл імпартаваньня.\nЁн быў загружаны толькі часткова.",
@@ -2180,18 +2204,15 @@
"import-rootpage-nosubpage": "Падстаронкі ў прасторы назваў «$1» карнявой старонкі не дазволеныя.",
"importlogpage": "Журнал імпартаваньняў",
"importlogpagetext": "Імпартаваньне адміністратарамі старонак з гісторыяй зьменаў зь іншых вікі.",
- "import-logentry-upload": "імпартавана [[$1]] праз загрузку файла",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|вэрсія імпартаваная|вэрсіі імпартаваныя|вэрсіяў імпартаваныя}}",
- "import-logentry-interwiki": "імпартавана зь іншай вікі $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|вэрсія імпартаваная|вэрсіі імпартаваныя|вэрсіяў імпартаваныя}} з $2",
"javascripttest": "Тэставаньне JavaScript",
- "javascripttest-title": "Праводзіцца тэставаньне $1",
"javascripttest-pagetext-noframework": "Гэтая старонка трымаецца для правядзеньня тэстаў JavaScript.",
"javascripttest-pagetext-unknownframework": "Невядомая бібліятэка тэставаньня «$1».",
+ "javascripttest-pagetext-unknownaction": "Невядомае дзеяньне «$1».",
"javascripttest-pagetext-frameworks": "Калі ласка, выберыце адну з прапанаваных бібліятэка тэставаньня: $1",
"javascripttest-pagetext-skins": "Выберыце афармленьне для тэставаньня:",
"javascripttest-qunit-intro": "Глядзіце [$1 дакумэнтацыю па тэставаньні] на mediawiki.org.",
- "javascripttest-qunit-heading": "Набор QUnit-тэстаў для MediaWiki JavaScript",
"tooltip-pt-userpage": "Вашая ўласная старонка",
"tooltip-pt-anonuserpage": "Старонка ўдзельніка для IP-адрасу, зь якога Вы рэдагуеце",
"tooltip-pt-mytalk": "Ваша старонка гутарак",
@@ -2201,6 +2222,7 @@
"tooltip-pt-mycontris": "Ваш унёсак",
"tooltip-pt-login": "Вас запрашаюць увайсьці, хаця гэта і неабавязкова.",
"tooltip-pt-logout": "Выйсьці",
+ "tooltip-pt-createaccount": "Мы прапануем вам стварыць рахунак і ўвайсьці, але гэта не абавязкова",
"tooltip-ca-talk": "Абмеркаваньне зьместу старонкі",
"tooltip-ca-edit": "Вы можаце рэдагаваць гэтую старонку. Калі ласка, ужывайце кнопку прагляду перад захаваньнем.",
"tooltip-ca-addsection": "Пачаць новую сэкцыю",
@@ -2230,6 +2252,7 @@
"tooltip-feed-atom": "Atom-стужка для гэтай старонкі",
"tooltip-t-contributions": "Паказаць унёсак гэтага удзельніка/гэтай удзельніцы",
"tooltip-t-emailuser": "Даслаць ліст гэтаму ўдзельніку/гэтай удзельніцы па электроннай пошце",
+ "tooltip-t-info": "Болей інфармацыі пра гэтую старонку",
"tooltip-t-upload": "Загрузіць файл",
"tooltip-t-specialpages": "Сьпіс усіх спэцыяльных старонак",
"tooltip-t-print": "Вэрсія гэтай старонкі для друку",
@@ -2292,7 +2315,6 @@
"pageinfo-robot-policy": "Індэксацыя пашукавікамі",
"pageinfo-robot-index": "Дазволеная",
"pageinfo-robot-noindex": "Не дазволеная",
- "pageinfo-views": "Колькасьць праглядаў",
"pageinfo-watchers": "Колькасьць назіральнікаў і назіральніц",
"pageinfo-few-watchers": "Менш за $1 {{PLURAL:$1|назіральніка|назіральнікі|назіральнікаў}}",
"pageinfo-redirects-name": "Перанакіраваньняў на гэтую старонку",
@@ -2748,7 +2770,6 @@
"exif-urgency-low": "Нізкая ($1)",
"exif-urgency-high": "Высокая ($1)",
"exif-urgency-other": "Прыярытэт вызначаны карыстальнікам ($1)",
- "watchlistall2": "усё",
"namespacesall": "усе",
"monthsall": "усе",
"confirmemail": "Пацьвердзіць адрас электроннай пошты",
@@ -2846,9 +2867,9 @@
"watchlisttools-raw": "Рэдагаваць як тэкст",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|гутаркі]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "Невядомы тэг пашырэньня «$1»",
"duplicate-defaultsort": "Папярэджаньне: Ключ сартыроўкі па змоўчваньні «$2» замяняе папярэдні ключ сартыроўкі па змоўчваньні «$1».",
"duplicate-displaytitle": "<strong>Папярэджаньне:</strong> назва для адлюстраваньня «$2» перапісвае ранейшую назву для адлюстраваньня «$1».",
+ "invalid-indicator-name": "<strong>Памылка:</strong> атрыбут <code>name</code> індыкатараў статусу старонкі ня мусіць быць пустым.",
"version": "Вэрсія",
"version-extensions": "Усталяваныя пашырэньні",
"version-skins": "Усталяваныя тэмы афармленьня",
@@ -2864,7 +2885,7 @@
"version-parser-function-hooks": "Перахопнікі функцыяў парсэра",
"version-hook-name": "Назва працэдуры-перахопніка",
"version-hook-subscribedby": "Падпісаны на",
- "version-version": "(Вэрсія $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[бяз назвы]",
"version-svn-revision": "(r$2)",
"version-license": "Ліцэнзія MediaWiki",
@@ -2892,6 +2913,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Шлях да артыкула]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Пуць да скрыпту]",
+ "version-libraries": "Усталяваныя бібліятэкі",
+ "version-libraries-library": "Бібліятэка",
+ "version-libraries-version": "Вэрсія",
"redirect": "Перанакіраваньне да файла, удзельніка, старонкі або вэрсіі старонкі",
"redirect-legend": "Перанакіраваньне да файла або старонкі",
"redirect-summary": "Гэтая спэцыяльная старонка перанакіруе да файла (паводле імя файла), старонкі (паводле нумару вэрсіі або старонкі) або старонкі ўдзельніка (паводле нумару ўдзельніка). Ужываньне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] або [[{{#Special:Redirect}}/user/101]].",
@@ -2927,6 +2951,7 @@
"specialpages-group-wiki": "Зьвесткі і прылады",
"specialpages-group-redirects": "Спэцыяльныя старонкі-перанакіраваньні",
"specialpages-group-spam": "Інструмэнты для барацьбы са спамам",
+ "specialpages-group-developer": "Інструмэнты распрацоўшчыка",
"blankpage": "Пустая старонка",
"intentionallyblankpage": "Гэтая старонка наўмысна пакінутая пустой",
"external_image_whitelist": " #Пакіньце гэты радок такім, які ён ёсьць<pre>\n#Зьмясьціце часткі рэгулярных выразаў (толькі частку якая знаходзіцца паміж //) ніжэй\n#Яны будуць суаднесеныя з URL-адрасамі вонкавых выяваў\n#Тыя, якія будуць пасаваць будуць паказвацца як выявы, астатнія толькі як спасылкі\n#Радкі, пазначаныя #, лічыцца камэнтарамі\n#Рэгістар сымбаляў ня ўлічваецца\n\n#Зьмясьціце ўсе часткі рэгулярных выразаў над гэтым радком. Сам радок пакіньце ў такім жа выглядзе</pre>",
@@ -2939,12 +2964,29 @@
"tags-tag": "Назва тэга",
"tags-display-header": "Новыя запісы ў сьпісе зьменаў",
"tags-description-header": "Поўнае апісаньне значэньня",
+ "tags-source-header": "Крыніца",
"tags-active-header": "Актыўны?",
"tags-hitcount-header": "Пазначаныя зьмены",
+ "tags-actions-header": "Дзеяньні",
"tags-active-yes": "Так",
"tags-active-no": "Не",
+ "tags-source-extension": "Вызначаецца пашырэньнем",
+ "tags-source-manual": "Ставіцца ўручную ўдзельнікамі і робатамі",
+ "tags-source-none": "Больш не выкарыстоўваецца",
"tags-edit": "рэдагаваць",
+ "tags-delete": "выдаліць",
+ "tags-activate": "актываваць",
+ "tags-deactivate": "адключыць",
"tags-hitcount": "$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}",
+ "tags-manage-no-permission": "Вы ня маеце правоў на зьмену метак.",
+ "tags-create-heading": "Стварэньне новай меткі",
+ "tags-create-explanation": "Па змоўчаньні, наваствораныя меткі будуць даступныя для выкарыстаньня ўдзельнікамі і робатамі.",
+ "tags-create-tag-name": "Назва меткі:",
+ "tags-create-reason": "Прычына:",
+ "tags-create-submit": "Стварыць",
+ "tags-create-no-name": "Вы мусіце пазначыць назву меткі.",
+ "tags-create-invalid-chars": "Назвы метак ня мусяць утрымліваць коскі (<code>,</code>) або сымбалі касых рысаў (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Назвы метак ня мусяць утрымліваць сымбалі, якія нельга ўжываць у назвах старонак.",
"comparepages": "Параўнаньне старонак",
"compare-page1": "Старонка 1",
"compare-page2": "Старонка 2",
@@ -2956,8 +2998,8 @@
"compare-revision-not-exists": "Пазначаная вэрсія не існуе.",
"dberr-problems": "Прабачце! На гэтым сайце ўзьніклі тэхнічныя цяжкасьці.",
"dberr-again": "Паспрабуйце пачакаць некалькі хвілінаў і абнавіць.",
- "dberr-info": "(Немагчыма злучыцца з сэрвэрам базы зьвестак: $1)",
- "dberr-info-hidden": "(немагчыма злучыцца з сэрвэрам базы зьвестак)",
+ "dberr-info": "(Немагчыма злучыцца з базай зьвестак: $1)",
+ "dberr-info-hidden": "(Няма доступу да базы зьвестак)",
"dberr-usegoogle": "Вы можаце пакуль паспрабаваць пашукаць праз Google.",
"dberr-outofdate": "Увага, індэксы нашага зьместу могуць быць састарэлымі.",
"dberr-cachederror": "Наступная старонка была загружана з кэшу і можа быць састарэлай.",
@@ -2998,6 +3040,7 @@
"revdelete-uname-unhid": "імя ўдзельніка адкрытае",
"revdelete-restricted": "ужыць абмежаваньні для адміністратараў",
"revdelete-unrestricted": "зьнятыя абмежаваньні для адміністратараў",
+ "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 паўзьверх перанакіраваньня",
@@ -3016,19 +3059,20 @@
"logentry-upload-overwrite": "$1 {{GENDER:$2|загрузіў|загрузіла}} новую вэрсію $3",
"logentry-upload-revert": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3",
"rightsnone": "(няма)",
+ "revdelete-summary": "кароткае апісаньне зьменаў",
+ "feedback-adding": "Даданьне водгуку на старонку…",
+ "feedback-bugcheck": "Выдатна! Толькі праверце, магчыма гэтыя памылкі ўжо [$1 вядомыя].",
+ "feedback-bugnew": "Я праверыў. Гэта новая памылка",
"feedback-bugornote": "Калі Вы гатовы падрабязна апісаць тэхнічную праблему, калі ласка [$1 паведаміце пра памылку]. \nУ адваротным выпадку, Вы можаце выкарыстоўваць простую форму пададзеную ніжэй. Ваш камэнтар будзе дададзены на старонку «[$3 $2]», разам з Вашым іменем удзельніка і выкарыстоўваемым браўзэрам.",
- "feedback-subject": "Тэма:",
- "feedback-message": "Паведамленьне:",
"feedback-cancel": "Скасаваць",
- "feedback-submit": "Даслаць водгук",
- "feedback-adding": "Даданьне водгуку на старонку…",
+ "feedback-close": "Выканана",
"feedback-error1": "Памылка: невядомы вынік з API",
"feedback-error2": "Памылка рэдагаваньня",
"feedback-error3": "Памылка: няма адказу ад API",
+ "feedback-message": "Паведамленьне:",
+ "feedback-subject": "Тэма:",
+ "feedback-submit": "Даслаць",
"feedback-thanks": "Дзякуй! Ваш водгук быў разьмешчаны на старонцы «[$2 $1]».",
- "feedback-close": "Выканана",
- "feedback-bugcheck": "Выдатна! Толькі праверце, магчыма гэтыя памылкі ўжо [$1 вядомыя].",
- "feedback-bugnew": "Я праверыў. Гэта новая памылка",
"searchsuggest-search": "Пошук",
"searchsuggest-containing": "утрымлівае...",
"api-error-badaccess-groups": "У Вас няма дазволу загружаць файлы ў гэтую вікі.",
@@ -3064,6 +3108,13 @@
"api-error-stashfailed": "Унутраная памылка: сэрвэр ня змог захаваць часовы файл.",
"api-error-publishfailed": "Унутраная памылка: сэрвэр ня змог захаваць часловы файл.",
"api-error-stasherror": "Падчас загрузкі файла ў сховішча адбылася памылка.",
+ "api-error-stashedfilenotfound": "Схаваны файл ня быў знойдзены пры спробе загрузіць яго з схованкі.",
+ "api-error-stashpathinvalid": "Шлях, дзе павінен быў знаходзіцца схаваны файл, апынуўся няслушным.",
+ "api-error-stashfilestorage": "Адбылася памылка пры захаваньні файла ў схованку.",
+ "api-error-stashzerolength": "Сэрвэр ня змог схаваць файл, бо ён мае нулявы памер.",
+ "api-error-stashnotloggedin": "Вы мусіце ўвайсьці ў сыстэму, каб захоўваць файлы ў схованку загрузкі.",
+ "api-error-stashwrongowner": "Файл, да якога вы спрабуеце атрымаць доступ у схованцы, не належыць вам.",
+ "api-error-stashnosuchfilekey": "Ключ файла, да якога вы спрабуеце атрымаць доступ у схованцы, не існуе.",
"api-error-timeout": "Сэрвэр не адказаў у чаканы тэрмін.",
"api-error-unclassified": "Узьнікла невядомая памылка",
"api-error-unknown-code": "Невядомая памылка: «$1».",
@@ -3108,6 +3159,8 @@
"expand_templates_generate_xml": "Паказаць дрэва аналізу XML",
"expand_templates_generate_rawhtml": "Паказаць HTML",
"expand_templates_preview": "Папярэдні прагляд",
+ "expand_templates_preview_fail_html": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і адбылася страта зьвестак сэсіі, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, паспрабуйце яшчэ раз.</strong>\nКалі гэта не спрацуе, паспрабуйце [[Special:UserLogout|выйсьці]] і ўвайсьці яшчэ раз.",
+ "expand_templates_preview_fail_html_anon": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і вы не ўвайшлі ў сыстэму, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, [[Special:UserLogin|увайдзіце ў сыстэму]] і паспрабуйце яшчэ раз.</strong>",
"pagelanguage": "Выбар мовы старонкі",
"pagelang-name": "Старонка",
"pagelang-language": "Мова",
@@ -3118,8 +3171,58 @@
"log-name-pagelang": "Журнал зьменаў мовы",
"log-description-pagelang": "Гэта журнал зьменаў мовы старонак.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} мову старонкі $3 з $4 на $5.",
- "default-skin-not-found": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code dir=\"ltr\">$wgDefaultSkin</code> як <code>$1</code> недаступная.\n\nВашае ўсталяваньне, падобна, уключае наступныя тэмы афармленьня. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.\n\n$2\n\n; Калі вы толькі што ўсталявалі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's каталёгу тэмаў]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code dir=\"ltr\">skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki вэрсіі 1.24 і навейшыя больш не падключаюць тэмы афармленьня аўтаматычна (глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя:Аўтаматычнае выяўленьне тэмаў афармленьня]). Вы можаце дадаць наступныя радкі ў <code>LocalSettings.php</code>, каб падключыць усе ўсталяваныя тэмы афармленьня:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Калі вы толькі што зьмянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы тэмаў афармленьня на наяўнасьць памылак.",
- "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 dir=\"ltr\">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": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code dir=\"ltr\">$wgDefaultSkin</code> як <code>$1</code> недаступная.\n\nВашае ўсталяваньне, падобна, уключае наступныя тэмы афармленьня. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.\n\n$2\n\n; Калі вы толькі што ўсталявалі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins каталёгу тэмаў mediawiki.org]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Спампуйце tarball-усталёўнікі для асобных тэмаў з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Зрабіце клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталёг <code dir=\"ltr\">skins/</code> вашай усталёўкі MediaWiki.\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki вэрсіі 1.24 і навейшыя больш не падключаюць тэмы афармленьня аўтаматычна (глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя:Аўтаматычнае выяўленьне тэмаў афармленьня]). Вы можаце дадаць наступныя радкі ў <code>LocalSettings.php</code>, каб падключыць усе ўсталяваныя тэмы афармленьня:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Калі вы толькі што зьмянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы тэмаў афармленьня на наяўнасьць памылак.",
+ "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 dir=\"ltr\">skins/</code> зь яго.\n:* Спампуйце tarball-усталёўнікі для асобны тэмаў афармленьня з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\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 ('''адключана''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''адключана''')",
+ "mediastatistics": "Статыстыка мэдыяфайлаў",
+ "mediastatistics-summary": "Статыстыка тыпаў загружаных файлаў. Яна ўключае толькі актуальныя вэрсіі файлаў. Старыя і выдаленыя вэрсіі ня ўлічваюцца.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 байт|$1 байты|$1 байтаў}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-тып",
+ "mediastatistics-table-extensions": "Магчымыя пашырэньні",
+ "mediastatistics-table-count": "Колькасьць файлаў",
+ "mediastatistics-table-totalbytes": "Агульны памер",
+ "mediastatistics-header-unknown": "Невядомыя",
+ "mediastatistics-header-bitmap": "Растравыя выявы",
+ "mediastatistics-header-drawing": "Рысункі (вэктарныя выявы)",
+ "mediastatistics-header-audio": "Гук",
+ "mediastatistics-header-video": "Відэа",
+ "mediastatistics-header-multimedia": "Зьмяшанае мультымэдыя",
+ "mediastatistics-header-office": "Офіс",
+ "mediastatistics-header-text": "Тэкст",
+ "mediastatistics-header-executable": "Выконваныя файлы",
+ "mediastatistics-header-archive": "Сьціснутыя фарматы",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|залішняя коска ў канцы была выдаленая|залішнія коскі ў канцы былі выдаленыя|залішніх косак у канцы былі выдаленыя}} з JSON",
+ "json-error-unknown": "Узьнікла праблема з JSON. Памылка: $1",
+ "json-error-depth": "Перавышаная максымальная глыбіня стэку",
+ "json-error-state-mismatch": "Недазволены або няслушна сфармаваны JSON",
+ "json-error-ctrl-char": "Памылка кантрольнага сымбалю, магчыма, няслушнае кадаваньне",
+ "json-error-syntax": "Сынтаксычная памылка",
+ "json-error-utf8": "Некарэктныя сымбалі UTF-8, магчыма, няслушнае кадаваньне",
+ "json-error-recursion": "Значэньне, якое трэба закадаваць, утрымлівае адну ці некалькі рэкурсіўных спасылак",
+ "json-error-inf-or-nan": "У значэньні, якое трэба закадаваць, прысутнічаюць адно ці болей NAN- або INF-значэньняў",
+ "json-error-unsupported-type": "Было пададзенае значэньне тыпу, які ня можа быць закадаваны",
+ "headline-anchor-title": "Спасылка на гэты разьдзел",
+ "special-characters-group-latin": "Лацінскія",
+ "special-characters-group-latinextended": "Лацінскія дадатковыя",
+ "special-characters-group-ipa": "МФА (IPA)",
+ "special-characters-group-symbols": "Сымбалі",
+ "special-characters-group-greek": "Грэцкія",
+ "special-characters-group-cyrillic": "Кірылічныя",
+ "special-characters-group-arabic": "Арабскія",
+ "special-characters-group-arabicextended": "Арабскія пашыраныя",
+ "special-characters-group-persian": "Пэрсыдзкія",
+ "special-characters-group-hebrew": "Іўрыт",
+ "special-characters-group-bangla": "Бэнгальскія",
+ "special-characters-group-tamil": "Тамільскія",
+ "special-characters-group-telugu": "Тэлугу",
+ "special-characters-group-sinhala": "Сынгальскія",
+ "special-characters-group-gujarati": "Гуджараці",
+ "special-characters-group-devanagari": "Дэванагары",
+ "special-characters-group-thai": "Тайскія",
+ "special-characters-group-lao": "Лаоскія",
+ "special-characters-group-khmer": "Кхмэрскія",
+ "special-characters-title-endash": "кароткі працяжнік",
+ "special-characters-title-emdash": "доўгі працяжнік",
+ "special-characters-title-minus": "мінус"
}
diff --git a/languages/i18n/be.json b/languages/i18n/be.json
index 7f9c4bcd..836a20c6 100644
--- a/languages/i18n/be.json
+++ b/languages/i18n/be.json
@@ -247,6 +247,7 @@
"disclaimers": "Адмова ад адказнасці",
"disclaimerpage": "Project:Агульная адмова ад адказнасці",
"edithelp": "Даведка рэдактарскага акна",
+ "helppage-top-gethelp": "Даведка",
"mainpage": "Галоўная старонка",
"mainpage-description": "Першая старонка",
"policy-url": "Project:Арганізацыйная палітыка",
@@ -299,7 +300,7 @@
"nstab-user": "Старонка",
"nstab-media": "Мультымедыя",
"nstab-special": "Адмысловая старонка",
- "nstab-project": "Старонка праекту",
+ "nstab-project": "Старонка праекта",
"nstab-image": "Файл",
"nstab-mediawiki": "Паведамленне",
"nstab-template": "Шаблон",
@@ -408,6 +409,8 @@
"userlogin-resetlink": "Забыліся даныя для ўваходу?",
"userlogin-resetpassword-link": "Забылі пароль?",
"userlogin-helplink2": "Даведка па прадстаўленні сістэме",
+ "userlogin-loggedin": "Вы ўжо ўвайшлі ў сістэму як {{GENDER:$1|$1}}.\nСкарыстайцеся формай ніжэй, каб прадставіцца сістэме як іншы ўдзельнік.",
+ "userlogin-createanother": "Стварыць яшчэ адзін уліковы запіс",
"createacct-emailrequired": "Адрас электроннай пошты",
"createacct-emailoptional": "Адрас электроннай пошты (неабавязкова)",
"createacct-email-ph": "Увядзіце ваш адрас электроннай пошты",
@@ -513,7 +516,7 @@
"passwordreset-email": "Адрас электроннай пошты:",
"passwordreset-emailtitle": "Інфармацыя пра рахунак на сайце {{SITENAME}}",
"passwordreset-emailtext-ip": "Нехта (магчыма вы, з IP-адрасу $1) запытаў скід вашага пароля ў праекце {{SITENAME}} ($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя ўліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|адзін дзень|$5 дні|$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і абраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягнуць выкарыстоўваць свой стары пароль.",
- "passwordreset-emailtext-user": "Удзельнік $1 з праекту {{SITENAME}} запытаў скід вашага пароля ў праекце {{SITENAME}}\n($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя уліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|$5 дзень |$5 дні |$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і абраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягваць выкарыстоўваць свой стары пароль.",
+ "passwordreset-emailtext-user": "Удзельнік $1 з праекта {{SITENAME}} запытаў скід вашага пароля ў праекце {{SITENAME}}\n($4).\n{{PLURAL:$3|Наступны ўліковы запіс звязаны|Наступныя уліковыя запісы звязаны}} з гэтым адрасам электроннай пошты:\n\n$2\n\n{{PLURAL:$3|Гэты часовы пароль будзе|Гэтыя часовыя паролі будуць}} дзейнічаць {{PLURAL:$5|$5 дзень |$5 дні |$5 дзён}}.\nВы павінны зараз увайсці ў сістэму і выбраць новы пароль. Калі вы не рабілі гэтага запыту, ці ўспомнілі свой зыходны пароль і не жадаеце яго мяняць, вы можаце праігнараваць гэтае паведамленне і працягваць выкарыстоўваць свой стары пароль.",
"passwordreset-emailelement": "Імя ўдзельніка: $1\nЧасовы пароль: $2",
"passwordreset-emailsent": "Па электроннай пошце быў адпраўлены ліст пра скід пароля.",
"passwordreset-emailsent-capture": "Ніжэй прыведзены адпраўлены ліст пра скід пароля.",
@@ -805,7 +808,6 @@
"mergehistory-same-destination": "Нельга, каб выток і мэта былі аднолькавымі",
"mergehistory-reason": "Прычына:",
"mergelog": "Журнал аб'яднанняў",
- "pagemerge-logentry": "аб'яднана [[$1]] у склад [[$2]] (версіі перад? і лучна з $3)",
"revertmerge": "Адкаціць аб'яднанне",
"mergelogpagetext": "Ніжэй паказаны пералік самых нядаўніх аб'яднанняў гісторый старонак.",
"history-title": "Гісторыя версій \"$1\"",
@@ -1453,7 +1455,6 @@
"statistics": "Статыстыка",
"statistics-header-pages": "Статыстыка старонак",
"statistics-header-edits": "Статыстыка правак",
- "statistics-header-views": "Статыстыка паказаў",
"statistics-header-users": "Статыстыка ўдзельніка",
"statistics-header-hooks": "Іншыя статыстыкі",
"statistics-articles": "Змястоўныя старонкі",
@@ -1462,13 +1463,9 @@
"statistics-files": "Укладзеныя файлы",
"statistics-edits": "Праўкі старонак ад часу інсталяцыі {{SITENAME}}",
"statistics-edits-average": "Колькасць правак на 1 старонку",
- "statistics-views-total": "Усе паказы",
- "statistics-views-total-desc": "Не ўлічваюцца прагляды неіснуючых і адмысловых старонак.",
- "statistics-views-peredit": "Колькасць паказаў на 1 праўку",
"statistics-users": "Registered [[Special:ListUsers|users]]",
"statistics-users-active": "Актыўныя ўдзельнікі",
"statistics-users-active-desc": "Удзельнікі, якія хоць нешта зрабілі за апошн{{PLURAL:$1|і дзень|ія $1 дзён}}",
- "statistics-mostpopular": "Самыя папулярныя старонкі",
"pageswithprop": "Старонкі з уласцівасцю старонкі",
"pageswithprop-legend": "Старонкі з пэўнай уласцівасцю",
"pageswithprop-text": "На гэтай старонцы пералічаны старонкі, якія выкарыстоўваюць пэўную уласцівасць.",
@@ -1509,7 +1506,6 @@
"uncategorizedtemplates": "Шаблоны без катэгорый",
"unusedcategories": "Катэгорыі без складнікаў",
"unusedimages": "Файлы, якія не выкарыстаны",
- "popularpages": "Папулярныя старонкі",
"wantedcategories": "Вельмі патрэбныя катэгорыі",
"wantedpages": "Вельмі патрэбныя старонкі",
"wantedpages-badtitle": "Недапушчальная назва ў выніках: $1",
@@ -1573,7 +1569,6 @@
"querypage-disabled": "Гэта адмысловая старонка адключана для павышэння прадукцыйнасці.",
"booksources": "Кнігі",
"booksources-search-legend": "Знайсці, дзе купіць кнігі",
- "booksources-go": "Пошук",
"booksources-text": "Ніжэй паказаны пералік спасылак на іншыя сеціўныя пляцоўкі, якія прадаюць новыя і б/у кнігі, і, магчыма, маюць больш звестак пра кнігі, якіх вы шукаеце:",
"booksources-invalid-isbn": "Гэты ISBN не выглядае правільным; праверце правільнасць капіравання з арыгіналу.",
"specialloguserlabel": "Выканаўца:",
@@ -1709,7 +1704,7 @@
"wlheader-enotif": "Працуе апавяшчанне праз эл.пошту.",
"wlheader-showupdated": "Старонкі, якія былі зменены пасля вашага апошняга наведвання, паказаны <strong>абрысам шрыфту</strong>.",
"wlnote": "Ніжэй {{PLURAL:$1|паказана апошняя <strong>$1</strong> змена|паказаны апошнія <strong>$1</strong> змены|паказаны апошнія <strong>$1</strong> змен}} за {{PLURAL:$2|апошнюю|апошнія|апошнія}} <strong>$2</strong> {{PLURAL:$2|гадзіну|гадзіны|гадзін}}, на момант часу $3 $4.",
- "wlshowlast": "Паказваць апошнія $1 гадз. $2 дзён $3",
+ "wlshowlast": "Паказваць апошнія $1 гадз. $2 дзён",
"watchlist-options": "Магчымасці назірання",
"watching": "Дапісваецца ў спіс назірання...",
"unwatching": "Спыняем назіранне...",
@@ -1758,7 +1753,6 @@
"deleteprotected": "Вы не можаце сцерці гэтую старонку, таму што яна ахоўваецца.",
"deleting-backlinks-warning": "'''Увага:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Іншыя старонкі]] спасылаюцца на ці ўключаюць старонку, якую вы збіраецеся сцерці.",
"rollback": "Адкаціць праўкі",
- "rollback_short": "Адкат",
"rollbacklink": "адкат",
"rollbacklinkcount": "адкаціць $1 {{PLURAL:$1|праўку|праўкі|правак}}",
"rollbacklinkcount-morethan": "адкаціць больш за $1 {{PLURAL:$1|праўку|праўкі|правак}}",
@@ -1877,8 +1871,8 @@
"contributions-userdoesnotexist": "Уліковы запіс удзельніка \"$1\" не зарэгістраваны.",
"nocontribs": "Не знойдзена змен, адпаведных зададзеным параметрам.",
"uctop": "(апошн.)",
- "month": "Ад месяцу (і раней):",
- "year": "Ад году (і раней):",
+ "month": "Ад месяца (і раней):",
+ "year": "Ад года (і раней):",
"sp-contributions-newbies": "Паказваць толькі ўклады з новых рахункаў",
"sp-contributions-newbies-sub": "З новых рахункаў",
"sp-contributions-newbies-title": "Уклады ўдзельнікаў з новых рахункаў",
@@ -2181,18 +2175,14 @@
"import-rootpage-nosubpage": "У прастора назваў \"$1\" каранёвай старонкі падстаронкі не дазволены.",
"importlogpage": "Журнал імпартаванняў",
"importlogpagetext": "Адміністрацыйныя імпартаванні старонак з іншых вікі, разам з гісторыямі правак.",
- "import-logentry-upload": "імпартавана [[$1]] праз файлавы ўклад",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|версія|версіі|версій}} імпартавана",
- "import-logentry-interwiki": "транс-вікавана $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|версія|версіі|версій}} імпартавана з $2",
"javascripttest": "JavaScript-тэсты",
- "javascripttest-title": "Праводзіцца тэставанне $1",
"javascripttest-pagetext-noframework": "Гэта старонка зарэзервавана для запуску тэстаў JavaScript",
"javascripttest-pagetext-unknownframework": "Невядомая бібліятэка тэставання «$1».",
"javascripttest-pagetext-frameworks": "Калі ласка, выберыце адну з прапанаваных бібліятэк тэставання: $1",
"javascripttest-pagetext-skins": "Выберыце афармленне для тэставання:",
"javascripttest-qunit-intro": "Глядзіце [$1 дакументацыю па тэставанні] на mediawiki.org.",
- "javascripttest-qunit-heading": "Набор QUnit-тэстаў для MediaWiki JavaScript",
"tooltip-pt-userpage": "Ваша ўласная старонка",
"tooltip-pt-anonuserpage": "Старонка ўдзельніка для таго IP, з якога вы зараз працуеце",
"tooltip-pt-mytalk": "Ваша старонка размоў",
@@ -2294,7 +2284,6 @@
"pageinfo-robot-policy": "Індэксаванне робатамі",
"pageinfo-robot-index": "Дазволена",
"pageinfo-robot-noindex": "Не дазволена",
- "pageinfo-views": "Колькасць праглядаў",
"pageinfo-watchers": "Колькасць назіральнікаў старонкі",
"pageinfo-few-watchers": "Менш чым $1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}",
"pageinfo-redirects-name": "Колькасць перасылак на гэту старонку",
@@ -2390,7 +2379,7 @@
"just-now": "толькі што",
"hours-ago": "$1 {{PLURAL:$1|гадзіну|гадзіны|гадзін}} таму",
"minutes-ago": "$1 {{PLURAL:$1|мінуту|мінуты|мінут}} таму",
- "seconds-ago": "$1 {{PLURAL:$1|секунду|секунды|секундаў}} таму",
+ "seconds-ago": "$1 {{PLURAL:$1|секунду|секунды|секунд}} назад",
"monday-at": "У панядзелак а $1",
"tuesday-at": "У аўторак а $1",
"wednesday-at": "У сераду а $1",
@@ -2744,7 +2733,6 @@
"exif-urgency-low": "Нізкая ($1)",
"exif-urgency-high": "Высокая ($1)",
"exif-urgency-other": "Вызначаны карыстальнікам прыярытэт ($1)",
- "watchlistall2": "усе",
"namespacesall": "усе",
"monthsall": "усе",
"confirmemail": "Пацвердзіць адрас эл.пошты",
@@ -2832,7 +2820,6 @@
"watchlisttools-edit": "Паказаць спіс назірання",
"watchlisttools-raw": "Паказаць нефарматаваны спіс назірання",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|размовы]])",
- "unknown_extension_tag": "Невядомая метка пашырэння \"$1\"",
"duplicate-defaultsort": "Увага: прадвызначаная клавіша ўпарадкавання \"$2\" замяніла ранейшую такую клавішу \"$1\".",
"duplicate-displaytitle": "<strong>Папярэджанне:</strong> Паказаная назва \"$2\" перасягае ранейшую назву \"$1\".",
"version": "Версія",
@@ -2849,7 +2836,7 @@
"version-parser-function-hooks": "Хукі функцый парсера",
"version-hook-name": "Назва хука",
"version-hook-subscribedby": "Сюды падпісаныя",
- "version-version": "(Версія $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[без назвы]",
"version-license": "Ліцэнзія MediaWiki",
"version-ext-license": "Ліцэнзія",
@@ -2998,19 +2985,20 @@
"logentry-upload-overwrite": "$1 {{GENDER:$2|уклаў|уклала}} новую версію $3",
"logentry-upload-revert": "$1 {{GENDER:$2|уклаў|уклала}} $3",
"rightsnone": "(няма)",
+ "revdelete-summary": "тлумачэнне праўкі",
+ "feedback-adding": "Даданне водгуку на старонку…",
+ "feedback-bugcheck": "Выдатна! Толькі праверце, што ў спісе [$1 вядомых памылак] яе няма падобнага запісу.",
+ "feedback-bugnew": "Я праверыў. Паведаміць пра новую памылку",
"feedback-bugornote": "Калі вы гатовыя падрабязна апісаць тэхнічную праблему, калі ласка, [$1 паведаміце пра памылку].\nУ адваротным выпадку вы можаце выкарыстоўваць гэтую простую форму. Ваш каментар будзе дададзены на старонку «[$3 $2]» разам з вашым імем удзельніка і выкарыстоўваемым браўзерам.",
- "feedback-subject": "Тэма:",
- "feedback-message": "Паведамленне",
"feedback-cancel": "Адмена",
- "feedback-submit": "Даслаць водгук",
- "feedback-adding": "Даданне водгуку на старонку…",
+ "feedback-close": "Зроблена.",
"feedback-error1": "Памылка. Невядомы вынік з API",
"feedback-error2": "Памылка. Збой праўкі",
"feedback-error3": "Памылка. Няма адказу ад API",
+ "feedback-message": "Паведамленне",
+ "feedback-subject": "Тэма:",
+ "feedback-submit": "Даслаць водгук",
"feedback-thanks": "Дзякуй! Ваш водгук размешчаны на старонцы «[$2 $1]».",
- "feedback-close": "Зроблена.",
- "feedback-bugcheck": "Выдатна! Толькі праверце, што ў спісе [$1 вядомых памылак] яе няма падобнага запісу.",
- "feedback-bugnew": "Я праверыў. Паведаміць пра новую памылку",
"searchsuggest-search": "Знайсці",
"searchsuggest-containing": "змяшчае...",
"api-error-badaccess-groups": "У Вас няма дазволу загружаць файлы ў гэтую вікі.",
@@ -3054,7 +3042,7 @@
"api-error-unknownerror": "Невядомая памылка: «$1».",
"api-error-uploaddisabled": "Загрузка ў гэтую вікі адключаная.",
"api-error-verification-error": "Гэты файл можа быць пашкоджаны, ці мае няслушны канчатак назвы.",
- "duration-seconds": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
+ "duration-seconds": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
"duration-minutes": "$1 {{PLURAL:$1|мінута|мінуты|мінут}}",
"duration-hours": "$1 {{PLURAL:$1|гадзіна|гадзіны|гадзін}}",
"duration-days": "$1 {{PLURAL:$1|дзень|дні|дзён}}",
@@ -3066,9 +3054,9 @@
"rotate-comment": "Выява павернута на $1 {{PLURAL:$1|градус|градусы|градусаў}} па гадзіннікавай стрэлцы",
"limitreport-title": "Звесткі прафілявання парсера:",
"limitreport-cputime": "Выкарыстанне часу ЦП",
- "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
"limitreport-walltime": "Выкарыстанне рэальнага часу",
- "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секундаў}}",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
"limitreport-ppvisitednodes": "Колькасць вузлоў, наведаных прэпрацэсарам",
"limitreport-ppgeneratednodes": "Колькасць вузлоў, створаных прэпрацэсарам",
"limitreport-postexpandincludesize": "Памер уключэнняў па разгортванні",
@@ -3103,5 +3091,27 @@
"default-skin-not-found": "Упс! Прадвызначаная вокладка для вашай вікі (<code>$wgDefaultSkin</code>), <code>$1</code>, недаступна.\n\nВыглядае на тое, што ваша інсталяцыя ўключае наступныя вокладкі. Гл. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя: Устаноўка вокладак] дзеля інфармацыі па ўключэнні і выбару прадвызначанай вокладкі.\n\n$2\n\n; Калі вы толькі што ўстанавілі MediaWiki:\n: Магчыма, вы ўстанавілі з git, ці наўпрост з зыходнага коду, выкарыстаўшы іншы метад. Гэта нармальна. Паспрабуйце ўстанавіць некалькі вокладак з [https://www.mediawiki.org/wiki/Category:All_skins каталога вокладак mediawiki.org], такім чынам:\n:* Узяўшы [https://www.mediawiki.org/wiki/Download tarball-інсталятар], які ўтрымлівае некалькі вокладак і прыставак. Вы можаце скапіяваць і ўставіць каталог <code>skins/</code> з яго.\n:* Зрабіўшы клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталог <code>skins/</code> вашай інсталяцыі MediaWiki.\n: Калі вы распрацоўшчык MediaWiki, гэта не павінна ўплываць на ваша git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki 1.24 і навейшыя больш не падключаюць вокладкі аўтаматычна (гл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя: Аўтавызначэнне вокладак]). Вы можаце ўставіць наступныя радкі ў <code>LocalSettings.php</code>, каб падключыць усе ўстаноўленыя вокладкі:\n\n<pre>$3</pre>\n\n; Калі вы толькі што змянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы вокладак на прадмет памылак.",
"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 ('''выключана''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''выключана''')",
+ "special-characters-group-latin": "Лацінскія",
+ "special-characters-group-latinextended": "Лацінскія дадатковыя",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Сімвалы",
+ "special-characters-group-greek": "Грэчаскія",
+ "special-characters-group-cyrillic": "Кірылічныя",
+ "special-characters-group-arabic": "Арабскія",
+ "special-characters-group-arabicextended": "Арабскія дадатковыя",
+ "special-characters-group-persian": "Персідскія",
+ "special-characters-group-hebrew": "Іўрыт",
+ "special-characters-group-bangla": "Бенгальскія",
+ "special-characters-group-tamil": "Тамільскія",
+ "special-characters-group-telugu": "Целугу",
+ "special-characters-group-sinhala": "Сінгальскія",
+ "special-characters-group-gujarati": "Гуджараці",
+ "special-characters-group-devanagari": "Дэванагары",
+ "special-characters-group-thai": "Тайскія",
+ "special-characters-group-lao": "Лаоскія",
+ "special-characters-group-khmer": "Кхмерскія",
+ "special-characters-title-endash": "кароткі працяжнік",
+ "special-characters-title-emdash": "доўгі працяжнік",
+ "special-characters-title-minus": "мінус"
}
diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json
index 24333f02..b51ddbfd 100644
--- a/languages/i18n/bg.json
+++ b/languages/i18n/bg.json
@@ -22,17 +22,22 @@
"לערי ריינהארט",
"아라",
"Gazimagomedov",
- "StanProg"
+ "StanProg",
+ "Bjankuloski06",
+ "Vodnokon4e",
+ "ShadeOfGrey",
+ "PetaRZ",
+ "Macofe"
]
},
"tog-underline": "Подчертаване на препратките:",
"tog-hideminor": "Скриване на малки редакции в последните промени",
"tog-hidepatrolled": "Скриване на патрулираните редакции от списъка с последните промени",
"tog-newpageshidepatrolled": "Скриване на патрулираните редакции от списъка на новите страници",
- "tog-extendwatchlist": "Разширяване на списъка, така че да показва всички промени, не само най-скорошните",
- "tog-usenewrc": "Групиране по страници на промените и списъка за наблюдение",
- "tog-numberheadings": "Номериране на заглавията",
- "tog-showtoolbar": "Показване на инструментите за редактиране",
+ "tog-extendwatchlist": "Разширяване на списъка за наблюдение, така че показва всички промени, не само последните",
+ "tog-usenewrc": "Групиране на промени по страниците на последните промени и списъка за наблюдение",
+ "tog-numberheadings": "Автоматично номериране на заглавията",
+ "tog-showtoolbar": "Показване на лентата с инструменти за редактиране",
"tog-editondblclick": "Редактиране на страниците чрез двойно щракване",
"tog-editsectiononrightclick": "Възможност за редактиране на раздел при щракване с десния бутон върху заглавието му",
"tog-watchcreations": "Добавяне на създадените от мен страници и качените от мен файлове към списъка ми за наблюдение",
@@ -45,12 +50,12 @@
"tog-previewonfirst": "Показване на предварителен преглед при първа редакция",
"tog-enotifwatchlistpages": "Уведомяване по е-пощата при промяна на страница или файл от списъка ми за наблюдение",
"tog-enotifusertalkpages": "Уведомяване по е-пощата при промяна на беседата ми",
- "tog-enotifminoredits": "Уведомяване по е-пощата даже при малки промени на страници или файлове",
+ "tog-enotifminoredits": "Уведомяване по е-пощата при малки промени на страници или файлове",
"tog-enotifrevealaddr": "Показване на електронния ми адрес в известяващите писма",
"tog-shownumberswatching": "Показване на броя на потребителите, наблюдаващи дадена страница",
"tog-oldsig": "Текущ подпис:",
"tog-fancysig": "Без превръщане на подписа в препратка към потребителската страница",
- "tog-uselivepreview": "Използване на бърз предварителен преглед (експериментално)",
+ "tog-uselivepreview": "Използване на бърз предварителен преглед",
"tog-forceeditsummary": "Предупреждаване при празно поле за резюме на редакцията",
"tog-watchlisthideown": "Скриване на моите редакции в списъка ми за наблюдение",
"tog-watchlisthidebots": "Скриване на редакциите на ботове в списъка ми за наблюдение",
@@ -67,7 +72,7 @@
"underline-always": "Винаги",
"underline-never": "Никога",
"underline-default": "Според настройките на облика или браузъра",
- "editfont-style": "Стил на шрифта в кутията за редактиране",
+ "editfont-style": "Стил на шрифта в кутията за редактиране:",
"editfont-default": "По подразбиране за браузъра",
"editfont-monospace": "Равноширок шрифт",
"editfont-sansserif": "Безсерифен шрифт",
@@ -225,7 +230,8 @@
"otherlanguages": "На други езици",
"redirectedfrom": "(пренасочване от $1)",
"redirectpagesub": "Пренасочваща страница",
- "lastmodifiedat": "Последна промяна на страницата: $2, $1.",
+ "redirectto": "Пренасочване към:",
+ "lastmodifiedat": "Последна промяна на страницата: в $2, на $1.",
"viewcount": "Страницата е била преглеждана {{PLURAL:$1|един път|$1 пъти}}.",
"protectedpage": "Защитена страница",
"jumpto": "Направо към:",
@@ -242,25 +248,25 @@
"copyrightpage": "{{ns:project}}:Авторски права",
"currentevents": "Текущи събития",
"currentevents-url": "Project:Текущи събития",
- "disclaimers": "Условия за ползване",
- "disclaimerpage": "Project:Условия за ползване",
+ "disclaimers": "Предупреждение",
+ "disclaimerpage": "Project:Предупреждение",
"edithelp": "Помощ при редактиране",
"mainpage": "Начална страница",
"mainpage-description": "Начална страница",
"policy-url": "Project:Политика",
"portal": "Портал за общността",
- "portal-url": "Project:Портал",
+ "portal-url": "Проект:Портал на общността",
"privacy": "Защита на личните данни",
- "privacypage": "Project:Защита на личните данни",
+ "privacypage": "Проект:Защита на личните данни",
"badaccess": "Грешка при достъп",
- "badaccess-group0": "Нямате права да извършите исканото действие",
- "badaccess-groups": "Исканото действие могат да изпълнят само потребители от {{PLURAL:$2|група|някоя от следните групи:}} $1.",
+ "badaccess-group0": "Нямате права да извършите исканото действие.",
+ "badaccess-groups": "Исканото действие могат да изпълнят само потребители от {{PLURAL:$2|групата|някоя от следните групи:}} $1.",
"versionrequired": "Изисква се версия $1 на МедияУики",
- "versionrequiredtext": "Използването на тази страница изисква версия $1 на софтуера МедияУики. Вижте [[Special:Version|текущата използвана версия]].",
+ "versionrequiredtext": "Използването на тази страница изисква версия $1 на софтуера МедияУики. Вижте [[Special:Version|текущата версия]].",
"ok": "Добре",
"pagetitle": "$1 — {{SITENAME}}",
"retrievedfrom": "Взето от „$1“.",
- "youhavenewmessages": "Имате $1 ($2).",
+ "youhavenewmessages": "{{PLURAL:$3|Имате}} $1 ($2).",
"youhavenewmessagesfromusers": "Имате $1 от {{PLURAL:$3|друг потребител|$3 потребители}} ($2).",
"youhavenewmessagesmanyusers": "Имате $1 от много потребители ($2).",
"newmessageslinkplural": "{{PLURAL:$1|ново съобщение|999=нови съобщения}}",
@@ -328,10 +334,12 @@
"filerenameerror": "Файлът „$1“ не можа да бъде преименуван на „$2“.",
"filedeleteerror": "Файлът „$1“ не можа да бъде изтрит.",
"directorycreateerror": "Невъзможно е да бъде създадена директория „$1“.",
+ "directoryreadonlyerror": "Директория \"$1\" е само за четене.",
+ "directorynotreadableerror": "Директория \"$1\" не може да бъде четена.",
"filenotfound": "Файлът „$1“ не беше намерен.",
"unexpected": "Неочаквана стойност: „$1“=„$2“.",
"formerror": "Възникна грешка при изпращане на формуляра",
- "badarticleerror": "Действието не може да се изпълни върху страницата.",
+ "badarticleerror": "Действието не може да бъде изпълнено на тази страница.",
"cannotdelete": "Указаната страница или файл \"$1\" не можа да бъде изтрит(а). Възможно е вече да е бил(а) изтрит(а) от някой друг.",
"cannotdelete-title": "Страницата „$1“ не може да бъде изтрита",
"delete-hook-aborted": "Изтриването беше прекъснато от кука.\nНе беше посочена причина за това.",
@@ -349,11 +357,12 @@
"viewsourcetext": "Можете да разгледате и да копирате кодa на страницата:",
"viewyourtext": "Можете да прегледате и копирате изходния код на '''вашите редакции''' на тази страница:",
"protectedinterface": "Тази страница съдържа текст, нужен за работата на системата. Тя е защитена против редактиране, за да се предотвратят възможни злоупотреби.\nЗа извършване на промяна за всички уикита, посетете [//translatewiki.net/ translatewiki.net], проектът за локализация на MediaWiki.",
- "editinginterface": "'''Внимание:''' Редактирате страница, която се използва за интерфейса на софтуера. Промяната й ще повлияе на външния вид на уикито.\nЗа превеждане, обмислете използването на [//translatewiki.net/ translatewiki.net], проектът за локализиране на MediaWiki.",
+ "editinginterface": "<strong>Внимание:</strong> Редактирате страница, която се използва за текстовия интерфейс на софтуера. Промяната й ще повлияе на външния вид на уикито.",
+ "translateinterface": "За да добавите или промените преводи за всички уикита, моля, използвайте [//translatewiki.net/ translatewiki.net], локализиращия проект на МедияУики.",
"cascadeprotected": "Тази страница е защитена против редактиране, защото е включена в {{PLURAL:$1|следната страница, която от своя страна има|следните страници, които от своя страна имат}} каскадна защита:\n$2",
"namespaceprotected": "Нямате права за редактиране на страници в именно пространство '''$1'''.",
"customcssprotected": "Нямате права за редактиране на тази CSS страница, защото тя съдържа чужди потребителски настройки.",
- "customjsprotected": "Нямате права за редактиране на тази Джаваскрипт страница, защото тя съдържа чужди потребителски настройки.",
+ "customjsprotected": "Нямате права за редактиране на тази JavaScript страница, защото тя съдържа чужди потребителски настройки.",
"mycustomcssprotected": "Нямате права за редактиране на тази CSS страница.",
"mycustomjsprotected": "Нямате права за редактиране на тази JavaScript страница.",
"myprivateinfoprotected": "Нямате права да редактирате личната си информация.",
@@ -363,7 +372,7 @@
"filereadonlyerror": "Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.\n\nАдминистраторът, който го е заключил, е посочил следната причина: „$3“.",
"invalidtitle-knownnamespace": "Невалидно заглавие с именно пространство $2\" и текст \"$3\"",
"invalidtitle-unknownnamespace": "Невалидно заглавие с неразпознато именно пространство номер $1 и текст „$2“",
- "exception-nologin": "Не сте влезли",
+ "exception-nologin": "Не сте влезли в системата",
"exception-nologin-text": "За достъп до избраното действие или страница е необходимо влизане в системата.",
"exception-nologin-text-manual": "За достъп до избраното действие или страница е необходимо $1 в системата.",
"virus-badscanner": "Лоша конфигурация: непознат скенер за вируси: ''$1''",
@@ -395,7 +404,7 @@
"userloginnocreate": "Влизане",
"logout": "Излизане",
"userlogout": "Излизане",
- "notloggedin": "Не сте влезли",
+ "notloggedin": "Не сте влезли в системата",
"userlogin-noaccount": "Нямате сметка?",
"userlogin-joinproject": "Присъединяване към {{SITENAME}}",
"nologin": "Нямате потребителско име? $1.",
@@ -406,6 +415,8 @@
"userlogin-resetlink": "Забравени данни за влизане в системата?",
"userlogin-resetpassword-link": "Забравена парола?",
"userlogin-helplink2": "Помощ за влизане",
+ "userlogin-loggedin": "Вече сте влезли в системата като {{GENDER:$1|$1}}.\nЧрез формуляра по-долу можете да влезете като друг потребител.",
+ "userlogin-createanother": "Създаване на друга сметка",
"createacct-emailrequired": "Адрес за електронна поща",
"createacct-emailoptional": "Адрес за електронна поща (незадължително)",
"createacct-email-ph": "Въведете Вашия адрес за електронна поща",
@@ -437,7 +448,7 @@
"nosuchuser": "Не съществува потребител с име „$1“.\nПотребителските имена са чувствителни на малки и главни букви.\nПроверете изписването или [[Special:UserLogin/signup|създайте нова сметка]].",
"nosuchusershort": "Не съществува потребител с името „$1“. Проверете изписването.",
"nouserspecified": "Необходимо е да се посочи потребителско име.",
- "login-userblocked": "Този потребител е блокиран. Не се позволява влизане.",
+ "login-userblocked": "Този потребител е блокиран. Влизането в системата не е позволено.",
"wrongpassword": "Въведената парола е невалидна. Опитайте отново.",
"wrongpasswordempty": "Въведената парола е празна. Опитайте отново.",
"passwordtooshort": "Необходимо е паролата да съдържа поне {{PLURAL:$1|1 знак|$1 знака}}.",
@@ -449,7 +460,7 @@
"noemail": "Няма записана електронна поща за потребителя „$1“.",
"noemailcreate": "Необходимо е да въведете валиден адрес за е-поща",
"passwordsent": "Нова парола беше изпратена на електронната поща на „$1“.\nСлед като я получите, влезте отново.",
- "blocked-mailpassword": "Редактирането от вашия IP-адрес е забранено, затова не ви е позволено да използвате възможността за възстановяване на загубена парола.",
+ "blocked-mailpassword": "Редактирането от вашия IP-адрес е забранено, затова не ви е позволено да използвате възможността за възстановяване на парола.",
"eauthentsent": "Писмото за потвърждение е изпратено на посочения адрес. В него са описани действията, които трябва да се извършат, за да потвърдите, че този адрес за електронна поща действително е ваш.",
"throttled-mailpassword": "Функцията за напомняне на паролата е използвана през {{PLURAL:$1|последния един час|последните $1 часа}}.\nЗа предотвратяване на злоупотреби е разрешено да се изпраща не повече от едно напомняне в рамките на {{PLURAL:$1|един час|$1 часа}}.",
"mailerror": "Грешка при изпращане на писмо: $1",
@@ -467,6 +478,7 @@
"createaccount-text": "Някой е създал сметка за $2 в {{SITENAME}} ($4) и е посочил този адрес за електронна поща. Паролата за „$2“ е „$3“. Необходимо е да влезете в системата и да смените паролата си.\n\nМожете да пренебрегнете това съобщение, ако сметката е създадена по грешка.",
"login-throttled": "Направили сте твърде много опити да въведете паролата за тази сметка.\nНеобходимо е да изчакате $1 преди да опитате отново.",
"login-abort-generic": "Влизането беше неуспешно - Прекратено",
+ "login-migrated-generic": "Вашата сметка е бил преместена и потребителското Ви име вече не съществува в това уики.",
"loginlanguagelabel": "Език: $1",
"suspicious-userlogout": "Заявката ви за излизане от системата беше отхвърлена, тъй като изглежда е била изпратена погрешка от браузъра или кеширащото прокси.",
"createacct-another-realname-tip": "Истинското име е незадължително.\nВ случай, че бъде избрабо да се попълни, ще бъде използвано за да му се приписват приносите в уикито.",
@@ -483,7 +495,7 @@
"resetpass_header": "Промяна на парола",
"oldpassword": "Стара парола:",
"newpassword": "Нова парола:",
- "retypenew": "Нова парола повторно:",
+ "retypenew": "Повтори новата парола:",
"resetpass_submit": "Избиране на парола и влизане",
"changepassword-success": "Паролата ви беше променена успешно!",
"changepassword-throttled": "Направили сте твърде много опити да въведете паролата за тази сметка.\nНеобходимо е да изчакате $1 преди да опитате отново.",
@@ -493,15 +505,18 @@
"resetpass-submit-cancel": "Отказ",
"resetpass-wrong-oldpass": "Невалидна временна или текуща парола.\nВъзможно е вече успешно да сте сменили паролата си или да сте поискали нова временна парола.",
"resetpass-recycled": "Моля, променете паролата си с такава, различна от текущата.",
+ "resetpass-temp-emailed": "Вие сте влезли в системата с помощта на временен код, който е изпратен чрез електронна поща.\nЗа да завършите влизането в системата, трябва да въведете нова парола тук:",
"resetpass-temp-password": "Временна парола:",
"resetpass-abort-generic": "Промяната на паролата беше прекъсната от използвано разширение.",
"resetpass-expired": "Срокът на валидност на паролата е изтекъл. Изберете нова парола за влизане.",
+ "resetpass-expired-soft": "Вашата парола е изтекла и трябва да бъде променена. Моля, въведете нова парола сега или натиснете бутона \"{{int:resetpass-submit-cancel}}\" за да я промените по-късно.",
+ "resetpass-validity-soft": "Моля, въведете нова парола сега или натиснете бутона \"{{int:resetpass-submit-cancel}}\" за да я промените по-късно.",
"passwordreset": "Възстановяване на парола",
"passwordreset-text-one": "Попълването на формуляра ще доведе до възстановяване на паролата.",
- "passwordreset-text-many": "{{PLURAL:$1|За възстановяване на паролата е необходимо да се попълни едно от полетата.}}",
+ "passwordreset-text-many": "{{PLURAL:$1|За получаване на временна парола по електронна поща е необходимо да попълните едно от полетата.}}",
"passwordreset-legend": "Възстановяване на парола",
"passwordreset-disabled": "Възстановяването на паролата е изключено в това уики.",
- "passwordreset-emaildisabled": "Функционалността за електронна поща е изключена в това уики.",
+ "passwordreset-emaildisabled": "Функцията за електронна поща е изключена в това уики.",
"passwordreset-username": "Потребителско име:",
"passwordreset-domain": "Домейн:",
"passwordreset-capture": "Преглеждане на електронното писмо?",
@@ -511,11 +526,10 @@
"passwordreset-emailtext-ip": "Някой (вероятно вие, от IP адрес $1) поиска възстановяване на паролата за сметката в {{SITENAME}} ($4). За {{PLURAL:$3|следната сметка|следните сметки}}\nе посочен този адрес за електронна поща:\n\n$2\n\n{{PLURAL:$3|Тази временна парола ще бъде активна|Тези временни пароли ще бъдат активни}} {{PLURAL:$5|един ден|$5 дни}}.\nСега би трябвало да влезете в системата и да си изберете нова парола. Ако заявката е направена от друг или пък сте си спомнили паролата и не искате да я променяте, можете да пренебрегнете това съобщение и да продължите да използвате старата си парола.",
"passwordreset-emailtext-user": "Потребител $1 от {{SITENAME}} поиска възстановяване на паролата за сметката в {{SITENAME}}\n($4). За {{PLURAL:$3|следната сметка|следните сметки}} е посочен този адрес за електронна поща:\n\n$2\n\n{{PLURAL:$3|Тази временна парола ще бъде активна|Тези временни пароли ще бъдат активни}} {{PLURAL:$5|един ден|$5 дни}}.\nСега би трябвало да влезете в системата и да изберете нова парола. Ако заявката е направена \nот друг или пък сте си спомнили паролата и не искате да я променяте, можете да пренебрегнете \nтова съобщение и да продължите да използвате старата си парола.",
"passwordreset-emailelement": "Потребителско име: $1\nВременна парола: $2",
- "passwordreset-emailsent": "На електронната поща беше испратено писмо за възстановяване на паролата.",
+ "passwordreset-emailsent": "На електронната поща беше изпратено писмо за възстановяване на паролата.",
"passwordreset-emailsent-capture": "По-долу е показано електронното писмо за възстановяване на паролата, което беше изпратено.",
"passwordreset-emailerror-capture": "По-долу е показано създадено електронно писмо за възстановяване на паролата, което не беше изпратено на {{GENDER:$2|потребителя}}: $1",
"changeemail": "Промяна на адреса за е-поща",
- "changeemail-header": "Промяна на адреса за е-поща на сметката",
"changeemail-text": "Попълването на този формуляр ще промени адреса за електронна поща. Необходимо е да се въведе и паролата, за да се потвърди промяната.",
"changeemail-no-info": "За да достъпвате тази страница директно, необходимо е да влезете в системата.",
"changeemail-oldemail": "Текущ адрес за е-поща:",
@@ -523,7 +537,7 @@
"changeemail-none": "(няма)",
"changeemail-password": "Парола за {{SITENAME}}:",
"changeemail-submit": "Промяна на е-пощата",
- "changeemail-cancel": "Отказване",
+ "changeemail-throttled": "Направили сте твърде много опити за влизане в системата. \nМоля, изчакайте $1 преди следващия опит.",
"resettokens": "Изчистване на маркерите",
"resettokens-no-tokens": "Няма маркери за изчистване.",
"resettokens-legend": "Изчистване на маркерите",
@@ -597,7 +611,7 @@
"userinvalidcssjstitle": "'''Внимание:''' Не съществува облик „$1“. Необходимо е да се знае, че имената на потребителските ви страници за CSS и Джаваскрипт трябва да се състоят от малки букви, например: „{{ns:user}}:Иван/vector.css“ (а не „{{ns:user}}:Иван/Vector.css“).",
"updated": "(обновена)",
"note": "'''Забележка:'''",
- "previewnote": "'''Важно е да се помни, че това е само предварителен преглед. Промените все още не са съхранени!'''",
+ "previewnote": "<strong>Обърнете внимание, че това е само предварителен преглед.</strong>\nПромените все още не са съхранени!",
"continue-editing": "Продължаване към полето за редактиране",
"previewconflict": "Този предварителен преглед отразява текста в горната текстова кутия така, както би се показал, ако съхраните.",
"session_fail_preview": "'''За съжаление редакцията ви не успя да бъде обработена поради загуба на данните за текущата сесия. Опитайте отново. Ако все още не работи, опитайте да [[Special:UserLogout|излезете]] и да влезете отново.'''",
@@ -622,7 +636,7 @@
"protectedpagewarning": "'''Внимание: Страницата е защитена и само потребители със статут на администратори могат да я редактират.'''\nЗа справка по-долу е показан последният запис от дневниците.",
"semiprotectedpagewarning": "'''Забележка:''' Тази страница е защитена и само регистрирани потребители могат да я редактират.\nЗа справка по-долу е показан последният запис от дневниците.",
"cascadeprotectedwarning": "'''Внимание:''' Страницата е защитена, като само потребители с администраторски права могат да я редактират. Тя е включена в {{PLURAL:$1|следната страница|следните страници}} с каскадна защита:",
- "titleprotectedwarning": "'''Внимание: Тази страница е защитена и са необходими [[Special:ListGroupRights|специално права]], за да бъде създадена.'''\nЗа справка по-долу е показан последният запис от дневниците.",
+ "titleprotectedwarning": "'''Внимание: Тази страница е защитена и са необходими [[Special:ListGroupRights|специални права]], за да бъде създадена.'''\nЗа справка по-долу е показан последният запис от дневниците.",
"templatesused": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} на страницата:",
"templatesusedpreview": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} в предварителния преглед:",
"templatesusedsection": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} в този раздел:",
@@ -642,7 +656,7 @@
"log-fulllog": "Преглеждане на пълния дневник",
"edit-hook-aborted": "Редакцията беше прекъсната от кука.\nНе беше посочена причина за това.",
"edit-gone-missing": "Страницата не можа да се обнови.\nВероятно междувременно е била изтрита.",
- "edit-conflict": "Редакционен конфликт.",
+ "edit-conflict": "Различна редакция",
"edit-no-change": "Редакцията ви беше пренебрегната, защото не съдържа промени по текста.",
"postedit-confirmation-created": "Страницата е създадена.",
"postedit-confirmation-restored": "Страницата е възстановена.",
@@ -652,27 +666,34 @@
"content-failed-to-parse": "Неуспех при анализиране на съдържанието от тип $2 за модела $1: $3",
"invalid-content-data": "Невалидни данни за съдържание",
"content-not-allowed-here": "\nНа страницата [[$2]] не е позволено използването на $1",
- "editwarning-warning": "Ако излезете от тази страница, може да загубите всички незапазени промени, които сте направили. \nАко сте влезли в системата, можете да изключите това предупреждение през меню \"Редактиране\" във вашите лични настройки.",
+ "editwarning-warning": "Ако излезете от тази страница, може да загубите всички несъхранени промени, които сте направили. \nАко сте влезли в системата, можете да изключите това предупреждение чрез менюто \"Редактиране\" в личните ви настройки.",
"editpage-notsupportedcontentformat-title": "Форматът на съдържанието не се поддържа",
"content-model-wikitext": "уикитекст",
"content-model-text": "обикновен текст",
"content-model-javascript": "Джаваскрипт",
"content-model-css": "CSS",
+ "duplicate-args-category": "Страници, които използват повтарящи се аргументи в повикванията на шаблона",
+ "duplicate-args-category-desc": "Страницата съдържа шаблонни повиквания, които използват повтарящи се аргументи, като например <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Внимание: Тази страница прекалено много пъти използва ресурсоемки парсерни функции.\n\nВ момента има {{PLURAL:$1|$1 обръщение|$1 обръщения}} към такива функции, а трябва да {{PLURAL:$1|е|са}} по-малко от $2.",
"expensive-parserfunction-category": "Страници, които прекалено много пъти използват ресурсоемки парсерни функции",
"post-expand-template-inclusion-warning": "Внимание: Размерът за включване на този шаблон е твърде голям.\nНякои шаблони няма да бъдат включени.",
"post-expand-template-inclusion-category": "Страници, съдържащи шаблони с превишени размери на включеното съдържание",
- "post-expand-template-argument-warning": "Внимание: Тази страница съдържа поне един параметър на шаблон, който има твърде голям размер при разгръщане. Тези параметри бяха пропуснати.",
- "post-expand-template-argument-category": "Страници, съдържащи шаблони с пропуснати параметри",
+ "post-expand-template-argument-warning": "Внимание: Тази страница съдържа поне един аргумент на шаблон, който има твърде голям размер при разгръщане. Тези аргументи бяха пропуснати.",
+ "post-expand-template-argument-category": "Страници, съдържащи шаблони с пропуснати аргументи",
"parser-template-loop-warning": "Открито зацикляне на шаблон: [[$1]]",
"parser-template-recursion-depth-warning": "Надвишен лимит на дълбочината при шаблонна рекурсия ($1)",
"language-converter-depth-warning": "Надвишени са възможностите за автоматичен превод ($1)",
"node-count-exceeded-category": "Страници, където е превишен възел-граф",
"node-count-exceeded-category-desc": "Страницата превишава максималния възел-граф.",
"node-count-exceeded-warning": "Страница превиши броя на възлите",
+ "expansion-depth-exceeded-category": "Страници, в които е превишена дълбочината на разгръщане",
+ "expansion-depth-exceeded-category-desc": "Страницата превишава максимално допустимата дълбочина на разгръщане.",
+ "expansion-depth-exceeded-warning": "Страницата е превишила разрешената дълбочина на разгръщане",
+ "parser-unstrip-loop-warning": "Открито е ''unstrip'' зацикляне",
+ "parser-unstrip-recursion-limit": "''Unstrip'' лимита на рекурсия превишава ($1)",
"undo-success": "Редакцията може да бъде върната. Прегледайте долното сравнение и се уверете, че наистина искате да го направите. След това съхранете страницата, за да извършите връщането.",
"undo-failure": "Редакцията не може да бъде върната поради конфликтни междинни редакции.",
- "undo-norev": "Редакцията не може да бъде върната тъй като не съществува или е била изтрита.",
+ "undo-norev": "Редакцията не може да бъде върната, тъй като не съществува или е била изтрита.",
"undo-summary": "Премахната редакция $1 на [[Special:Contributions/$2|$2]] ([[User talk:$2|беседа]])",
"cantcreateaccounttitle": "Невъзможно е да бъде създадена потребителска сметка.",
"cantcreateaccount-text": "[[User:$3|Потребител:$3]] е блокирал(а) създаването на сметки от този IP-адрес ('''$1''').\n\nПричината, изложена от $3, е ''$2''",
@@ -682,9 +703,9 @@
"currentrev-asof": "Текуща версия към $1",
"revisionasof": "Версия от $1",
"revision-info": "Версия от $1 на {{GENDER:$6|$2}}$7",
- "previousrevision": "←По-стара версия",
- "nextrevision": "По-нова версия→",
- "currentrevisionlink": "преглед на текущата версия",
+ "previousrevision": "← По-стара версия",
+ "nextrevision": "По-нова версия →",
+ "currentrevisionlink": "Преглед на текущата версия",
"cur": "тек",
"next": "след",
"last": "пред",
@@ -730,7 +751,7 @@
"revdelete-legend": "Задаване на ограничения:",
"revdelete-hide-text": "Текст на версията",
"revdelete-hide-image": "Скриване на файловото съдържание",
- "revdelete-hide-name": "Скриване на действието и целта",
+ "revdelete-hide-name": "Скриване на цели и параметри",
"revdelete-hide-comment": "Скриване на резюмето",
"revdelete-hide-user": "Потребителско име/IP адрес на редактора",
"revdelete-hide-restricted": "Прилагане на тези ограничения и за администраторите",
@@ -745,7 +766,7 @@
"revdelete-failure": "'''Видимостта на редакцията не може да бъде обновена:'''\n$1",
"logdelete-success": "Видимостта на събитието беше променена.",
"logdelete-failure": "'''Видимостта на дневника не може да бъде променяна:'''\n$1",
- "revdel-restore": "Промяна на видимостта",
+ "revdel-restore": "промяна на видимостта",
"pagehist": "История на страницата",
"deletedhist": "Изтрита история",
"revdelete-hide-current": "Грешка при скриване на елемента от $2, $1: представлява текущата версия.\nТя не може да бъде скрита.",
@@ -783,7 +804,6 @@
"mergehistory-same-destination": "Изходната и целевата страница не могат да съвпадат",
"mergehistory-reason": "Причина:",
"mergelog": "Дневник на сливанията",
- "pagemerge-logentry": "обедини [[$1]] с [[$2]] (до редакция $3)",
"revertmerge": "Разделяне",
"mergelogpagetext": "Страницата съдържа списък с последните сливания на редакционни истории.",
"history-title": "Преглед на историята на „$1“",
@@ -795,7 +815,9 @@
"showhideselectedversions": "Показване/скриване на избрани версии",
"editundo": "връщане",
"diff-empty": "(Няма разлика)",
- "diff-multi-manyusers": "({{PLURAL:$1|Не е показана една междинна версия|Не са показани $1 междинни версии}} от повече от $2 {{PLURAL:$2|потребител|потребителя}})",
+ "diff-multi-sameuser": "({{PLURAL:$1|Не е показана една междинна версия|Не са показани $1 междинни версии}} от същия потребител)",
+ "diff-multi-otherusers": "({{PLURAL:$1|Не е показана една междинна версия|Не са показани $1 междинни версии}} от {{PLURAL:$2|друг потребител|{{PLURAL:$2|2=двама|3=трима|4=четирима|$2}} потребители}})",
+ "diff-multi-manyusers": "({{PLURAL:$1|Не е показана една междинна версия|Не са показани $1 междинни версии}} от повече от {{PLURAL:$2|един потребител|$2 потребители}})",
"difference-missing-revision": "{{PLURAL:$2|Не беше открита|Не бяха открити}} {{PLURAL:$2|една версия|$2 версии}} от тази разликова препратка ($1).\n\nТова обикновено се случва, когато е последвана остаряларазликова препратка на страница,коятоебила изтрита.\nПовече подробности могат да бъдат открити в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневника на изтриванията].",
"searchresults": "Резултати от търсенето",
"searchresults-title": "Резултати от търсенето за „$1“",
@@ -822,6 +844,7 @@
"search-result-category-size": "{{PLURAL:$1|1 член|$1 члена}} ({{PLURAL:$2|1 подкатегория|$2 подкатегории}}, {{PLURAL:$3|1 файл|$3 файла}})",
"search-redirect": "(пренасочване $1)",
"search-section": "(раздел $1)",
+ "search-category": "(категория $1)",
"search-suggest": "Вероятно имахте предвид: $1",
"search-interwiki-caption": "Сродни проекти",
"search-interwiki-default": "Резултати от $1:",
@@ -836,15 +859,16 @@
"powersearch-togglelabel": "Избор:",
"powersearch-toggleall": "Всички",
"powersearch-togglenone": "Никои",
+ "powersearch-remember": "Запомняне на избора за бъдещи търсения",
"search-external": "Външно търсене",
"searchdisabled": "Търсенето в {{SITENAME}} е временно изключено. Междувременно можете да търсите чрез Google. Обърнете внимание, че съхранените при тях страници най-вероятно са остарели.",
"search-error": "Възникна грешка при търсене: $1",
"preferences": "Настройки",
"mypreferences": "Настройки",
"prefs-edits": "Брой редакции:",
- "prefsnologintext2": "За да промените настройките си е необходимо да влезете в систеата.",
+ "prefsnologintext2": "За да промените настройките си е необходимо да влезете в системата.",
"prefs-skin": "Облик",
- "skin-preview": "предварителен преглед",
+ "skin-preview": "Предварителен преглед",
"datedefault": "Без предпочитание",
"prefs-labs": "Функционалности на Labs",
"prefs-user-pages": "Потребителски страници",
@@ -980,18 +1004,18 @@
"grouppage-suppress": "{{ns:project}}:Ревизори",
"right-read": "четене на страници",
"right-edit": "редактиране на страници",
- "right-createpage": "създаване на страници (които не са беседи)",
- "right-createtalk": "създаване на дискусионни страници",
- "right-createaccount": "създаване на нови потребителски сметки",
- "right-minoredit": "отбелязване като малка промяна",
- "right-move": "преместване на страници",
- "right-move-subpages": "преместване на страници и техните подстраници",
+ "right-createpage": "Създаване на страници (които не са беседи)",
+ "right-createtalk": "Създаване на дискусионни страници",
+ "right-createaccount": "Създаване на нови потребителски сметки",
+ "right-minoredit": "Отбелязване като малка промяна",
+ "right-move": "Преместване на страници",
+ "right-move-subpages": "Преместване на страници и техните подстраници",
"right-move-rootuserpages": "Преместване на основни потребителски страници",
"right-move-categorypages": "Преместване на категорийни страници",
"right-movefile": "Преместване на файлове",
"right-suppressredirect": "без създаване на пренасочване от старото име при преместване на страница",
- "right-upload": "качване на файлове",
- "right-reupload": "презаписване на съществуващ файл",
+ "right-upload": "Качване на файлове",
+ "right-reupload": "Презаписване на съществуващ файл",
"right-reupload-own": "Презаписване на съществуващ файл, качен от същия потребител",
"right-reupload-shared": "Предефиниране на едноименните файлове от общото мултимедийно хранилище с локални",
"right-upload_by_url": "качване на файл от URL адрес",
@@ -1097,11 +1121,11 @@
"recentchanges": "Последни промени",
"recentchanges-legend": "Настройки на списъка с последни промени",
"recentchanges-summary": "Проследяване на последните промени в {{SITENAME}}.\n\nЛегенда: '''тек''' = разлика на текущата версия,\n'''ист''' = история на версиите",
- "recentchanges-noresult": "Не бяха намерени промени за дадения период, които отговарят на критериите.",
+ "recentchanges-noresult": "За дадения период не бяха намерени промени, които да отговарят на критериите.",
"recentchanges-feed-description": "Проследяване на последните промени в {{SITENAME}}.",
"recentchanges-label-newpage": "Нова страница",
"recentchanges-label-minor": "Това е малка промяна",
- "recentchanges-label-bot": "Тази редакция е извършена от робот",
+ "recentchanges-label-bot": "Тази редакция е извършена от бот",
"recentchanges-label-unpatrolled": "Тази редакция все още не е проверена",
"recentchanges-label-plusminus": "Размерът на страницата е променен с този брой байтове",
"recentchanges-legend-heading": "'''Легенда:'''",
@@ -1382,7 +1406,6 @@
"statistics": "Статистика",
"statistics-header-pages": "Статистики за страницата",
"statistics-header-edits": "Статистики за редакциите",
- "statistics-header-views": "Преглеждане на статистиките",
"statistics-header-users": "Потребители",
"statistics-header-hooks": "Други статистики",
"statistics-articles": "Съдържателни страници",
@@ -1391,13 +1414,9 @@
"statistics-files": "Качени файлове",
"statistics-edits": "Брой редакции по страници от началото на {{SITENAME}}",
"statistics-edits-average": "Средно редакции на страница",
- "statistics-views-total": "Общо прегледи",
- "statistics-views-total-desc": "Не са включени прегледите на несъществуващи и специални страници",
- "statistics-views-peredit": "Прегледи на редакция",
"statistics-users": "Регистрирани [[Special:ListUsers|потребители]]",
"statistics-users-active": "Активни потребители",
"statistics-users-active-desc": "Потребители, направили редакция през {{PLURAL:$1|последния ден|последните $1 дни}}",
- "statistics-mostpopular": "Най-преглеждани страници",
"pageswithprop-prop": "Име на свойството:",
"pageswithprop-submit": "Отваряне",
"doubleredirects": "Двойни пренасочвания",
@@ -1432,7 +1451,6 @@
"uncategorizedtemplates": "Некатегоризирани шаблони",
"unusedcategories": "Неизползвани категории",
"unusedimages": "Неизползвани файлове",
- "popularpages": "Най-посещавани страници",
"wantedcategories": "Желани категории",
"wantedpages": "Желани страници",
"wantedpages-badtitle": "Невалидно заглавие в резултатното множество: $1",
@@ -1448,6 +1466,7 @@
"mostrevisions": "Страници с най-много версии",
"prefixindex": "Всички страници с представка",
"prefixindex-namespace": "Всички страници с представка (именно пространство $1)",
+ "prefixindex-strip": "Скриване на представката в списъка с резултати",
"shortpages": "Кратки страници",
"longpages": "Дълги страници",
"deadendpages": "Задънени страници",
@@ -1490,7 +1509,7 @@
"querypage-disabled": "Тази специална страница е изключена, защото затруднява производителността на уикито.",
"booksources": "Източници на книги",
"booksources-search-legend": "Търсене на информация за книга",
- "booksources-go": "Отваряне",
+ "booksources-search": "Търсене",
"booksources-text": "По-долу е списъкът от връзки към други сайтове, продаващи нови и използвани книги или имащи повече информация за книгите, които търсите:",
"booksources-invalid-isbn": "Предоставеният ISBN изглежда е невалиден; проверете за грешки и копирайте от оригиналния източник.",
"specialloguserlabel": "Изпълнител:",
@@ -1500,6 +1519,7 @@
"alllogstext": "Смесено показване на записи от всички налични дневници в {{SITENAME}}.\nМожете да ограничите прегледа, като изберете вид на дневника, потребителско име или определена страница.",
"logempty": "Дневникът не съдържа записи, отговарящи на избрания критерий.",
"log-title-wildcard": "Търсене на заглавия, започващи със",
+ "showhideselectedlogentries": "Промяна на видимостта на избраните записи",
"allpages": "Всички страници",
"nextpage": "Следваща страница ($1)",
"prevpage": "Предходна страница ($1)",
@@ -1614,7 +1634,7 @@
"wlheader-enotif": "Известяването по е-поща е включено.",
"wlheader-showupdated": "Страниците, които са били променени след последния път, когато сте ги посетили, са показани в '''получер'''.",
"wlnote": "{{PLURAL:$1|Показана е последната промяна|Показани са последните '''$1''' промени}} през {{PLURAL:$2|последния час|последните '''$2''' часа}}.",
- "wlshowlast": "Показване на последните $1 часа $2 дни $3",
+ "wlshowlast": "Показване на последните $1 часа $2 дни",
"watchlist-options": "Опции на списъка за наблюдение",
"watching": "Наблюдение…",
"unwatching": "Спиране на наблюдение…",
@@ -1657,8 +1677,8 @@
"delete-edit-reasonlist": "Редактиране на причините за изтриване",
"delete-toobig": "Тази страница има голяма редакционна история с над $1 {{PLURAL:$1|версия|версии}}. Изтриването на такива страници е ограничено, за да се предотвратят евентуални поражения на {{SITENAME}}.",
"delete-warning-toobig": "Тази страница има голяма редакционна история с над $1 {{PLURAL:$1|версия|версии}}. Възможно е изтриването да наруши някои операции в базата данни на {{SITENAME}}; необходимо е особено внимание при продължаване на действието.",
+ "deleteprotected": "Не можете да изтриете страницата, защото е защитена.",
"rollback": "Отмяна на промените",
- "rollback_short": "Отмяна",
"rollbacklink": "отмяна",
"rollbacklinkcount": "отмяна на $1 {{PLURAL:$1|редакция|редакции}}",
"rollbacklinkcount-morethan": "отмяна на повече от $1 {{PLURAL:$1|редакция|редакции}}",
@@ -1884,7 +1904,7 @@
"blocklog-showlog": "Потребителят е бил блокиран в миналото.\nЗа справка по-долу е дадено извлечение от дневника на блокиранията:",
"blocklog-showsuppresslog": "Потребителят е бил блокиран и прикриван в миналото.\nЗа справка по-долу е дадено извлечение от дневника на прикриванията:",
"blocklogentry": "блокира [[$1]] със срок на изтичане $2 $3",
- "reblock-logentry": "промени параметрите на блокирането на [[$1]] със срок на изтричане $2 $3",
+ "reblock-logentry": "промени параметрите на блокирането на [[$1]] със срок на изтичане $2 $3",
"blocklogtext": "Тази страница съдържа дневник на блокиранията и отблокиранията.\nАвтоматично блокираните IP-адреси не са показани.\nВижте [[Special:BlockList|списъка на блокираните IP-адреси]] за текущото състояние на блокиранията.",
"unblocklogentry": "отблокира $1",
"block-log-flags-anononly": "само анонимни потребители",
@@ -1936,6 +1956,7 @@
"movepagetalktext": "Ако съществува, съответната дискусионна страница ще бъде преместена автоматично заедно с нея, '''освен ако:'''\n* не местите страницата от едно именно пространство в друго,\n* вече съществува непразна дискусионна страница с това име или\n* не сте отметнали долната кутийка.\n\nВ тези случаи, ако желаете, ще е необходимо да преместите страницата ръчно.",
"movearticle": "Преместване на страница:",
"moveuserpage-warning": "'''Внимание:''' Предприели сте опит да преместите потребителска страница. Забележете, че от преместването на страницата '''няма''' да последва преименуване на потребителя.",
+ "movecategorypage-warning": "<strong>Внимание:</strong> На път сте да преместите категорийна страница. Моля, обърнете внимание, че ще бъде преместена само страницата на категорията. <em>Никоя</em> от страниците в старата категория <em>няма</em> да бъде прекатегоризирана.",
"movenologintext": "Необходимо е да [[Special:UserLogin|влезете]], за да може да премествате страници.",
"movenotallowed": "Нямате права за преместване на страници.",
"movenotallowedfile": "Нямате права да премествате файлове.",
@@ -2066,9 +2087,7 @@
"import-rootpage-nosubpage": "Именното пространство „$1“ на основната страница не позволява създаването на подстраници.",
"importlogpage": "Дневник на внасянията",
"importlogpagetext": "Административни внасяния на страници с редакционна история от други уикита.",
- "import-logentry-upload": "[[$1]] беше внесена от файл",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|версия беше внесена|версии бяха внесени}}",
- "import-logentry-interwiki": "$1 беше внесена от друго уики",
"import-logentry-interwiki-detail": "{{PLURAL:$1|една версия|$1 версии}} на $2 бяха внесени",
"javascripttest": "Тестване на JavaScript",
"javascripttest-pagetext-noframework": "Тази страница е запазена за изпълнение на Джаваскрипт тестове.",
@@ -2173,7 +2192,6 @@
"pageinfo-robot-policy": "Индексиране от роботи",
"pageinfo-robot-index": "Позволено",
"pageinfo-robot-noindex": "Непозволено",
- "pageinfo-views": "Брой прегледи",
"pageinfo-watchers": "Брой наблюдаващи страницата",
"pageinfo-few-watchers": "Под $1 {{PLURAL:$1|наблюдаващ|наблюдаващи}}",
"pageinfo-redirects-name": "Брой пренасочвания към тази страница",
@@ -2436,7 +2454,7 @@
"exif-originalimageheight": "Височина на изображението преди намаляването",
"exif-originalimagewidth": "Ширина на изображението преди намаляването",
"exif-compression-1": "Некомпресиран",
- "exif-copyrighted-true": "С авторски права",
+ "exif-copyrighted-true": "Заштитено со авторски права",
"exif-copyrighted-false": "Статута на авторските права не е указан",
"exif-unknowndate": "Неизвестна дата",
"exif-orientation-1": "Нормално",
@@ -2586,7 +2604,6 @@
"exif-urgency-low": "Ниска ($1)",
"exif-urgency-high": "Висока ($1)",
"exif-urgency-other": "Зададен от потребителя приоритет ($1)",
- "watchlistall2": "всички",
"namespacesall": "Всички",
"monthsall": "всички",
"confirmemail": "Потвърждаване на адрес за електронна поща",
@@ -2659,12 +2676,12 @@
"watchlistedit-raw-removed": "{{PLURAL:$1|Една страница беше премахната|$1 страници бяха премахнати}}:",
"watchlistedit-clear-legend": "Изчистване на списъка за наблюдение",
"watchlistedit-clear-submit": "Изчистване на списъка за наблюдение (Необратимо!)",
+ "watchlistedit-clear-done": "Списъкът за наблюдение беше изчистен.",
"watchlisttools-clear": "Изчистване на списъка за наблюдение",
"watchlisttools-view": "Преглед на списъка за наблюдение",
"watchlisttools-edit": "Преглед и редактиране на списъка за наблюдение",
"watchlisttools-raw": "Редактиране на необработения списък за наблюдение",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|беседа]])",
- "unknown_extension_tag": "Непознат етикет на разширение „$1“",
"duplicate-defaultsort": "Внимание: Ключът за сортиране по подразбиране „$2“ отменя по-ранния ключ „$1“.",
"version": "Версия",
"version-extensions": "Инсталирани разширения",
@@ -2680,7 +2697,7 @@
"version-parser-function-hooks": "Куки в парсерни функции",
"version-hook-name": "Име на куката",
"version-hook-subscribedby": "Ползвана от",
- "version-version": "(Версия $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[без име]",
"version-license": "Лиценз на МедияУики",
"version-ext-license": "Лиценз",
@@ -2691,7 +2708,7 @@
"version-ext-colheader-description": "Описание",
"version-ext-colheader-credits": "Автори",
"version-license-title": "Лиценз за $1",
- "version-poweredby-credits": "Това уики се задвиждва от '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+ "version-poweredby-credits": "Това уики работи по софтуера на <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
"version-poweredby-others": "други",
"version-poweredby-translators": "преводачи в translatewiki.net",
"version-credits-summary": "Бихме искали да изкажем признателност на следните хора за техните приноси към [[Special:Version|MediaWiki]].",
@@ -2703,6 +2720,7 @@
"version-entrypoints-header-entrypoint": "Входна точка",
"version-entrypoints-header-url": "Адрес",
"redirect-submit": "Отваряне",
+ "redirect-value": "Стойност:",
"redirect-user": "Потребителски номер",
"redirect-page": "Номер на страницата",
"redirect-revision": "Версия на страницата",
@@ -2732,6 +2750,7 @@
"specialpages-group-wiki": "Данни и инструменти",
"specialpages-group-redirects": "Пренасочващи специални страници",
"specialpages-group-spam": "Инструменти против спам",
+ "specialpages-group-developer": "Инструменти за разработчици",
"blankpage": "Празна страница",
"intentionallyblankpage": "Тази страница умишлено е оставена празна",
"external_image_whitelist": " #Оставете този ред така, както го виждате. <pre>\n#Поставете долу фрагменти от регулярни изрази (само частта между //).\n#Тези фрагменти ще се съпоставят с интернет адресите на външните (hotlinked) картинки.\n#Картинките, чиито адреси отговарят на вписаните регулярни изрази, ще се визуализират, за останалите ще се появява само връзка.\n#Редовете, започващи с # се възприемат като коментари.\n#Командите са чувствителни на малки и главни букви.\n\n#Слагайте всички фрагменти от регулярни изрази НАД този ред. Оставете този ред така, както го виждате. </pre>",
@@ -2795,7 +2814,7 @@
"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 (върху пренасочване)",
- "logentry-move-move_redir-noredirect": "$1 {GENDER:$2|премести}} върху пренасочване $3 като $4 без пренасочване",
+ "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|премести}} върху пренасочване $3 като $4 без пренасочване",
"logentry-patrol-patrol": "$1 {{GENDER:$2|отбеляза}} като патрулирана версия $4 на страницата „$3“",
"logentry-patrol-patrol-auto": "$1 автоматично {{GENDER:$2|отбеляза}} като патрулирана версия $4 на страницата $3",
"logentry-newusers-newusers": "Потребителската сметка $1 беше {{GENDER:$2|създадена}}",
@@ -2807,19 +2826,20 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|промени}} потребителската група на $3",
"logentry-rights-autopromote": "$1 е автоматично {{GENDER:$2|повишен|повишена}} от $4 до $5",
"rightsnone": "(никакви)",
+ "revdelete-summary": "резюме",
+ "feedback-adding": "Добавяне на коментар към страницата...",
+ "feedback-bugcheck": "Страхотно! Само проверете дали това не сред вече [$1 докладваните грешки].",
+ "feedback-bugnew": "Проверих. Докладвай за нова грешка",
"feedback-bugornote": "Ако сте готови подробно да опишете технически проблем, моля [$1 докладвайте го тук].\nВ противен случай, можете да използвате лесния формуляр по-долу. Коментарът ви ще бъде добавен към страницата \"[$3 $2]\", наред с вашето потребителско име.",
- "feedback-subject": "Тема:",
- "feedback-message": "Съобщение:",
"feedback-cancel": "Отказване",
- "feedback-submit": "Оставяне на коментар",
- "feedback-adding": "Добавяне на коментар към страницата...",
+ "feedback-close": "Готово",
"feedback-error1": "Грешка: Неразпознат резултат от API",
"feedback-error2": "Грешка: Неуспешна редакция",
"feedback-error3": "Грешка: Няма отговор от API",
+ "feedback-message": "Съобщение:",
+ "feedback-subject": "Тема:",
+ "feedback-submit": "Изпращане",
"feedback-thanks": "Благодарности! Вашата обратна информация е публикувана на страницата „[$2 $1]“.",
- "feedback-close": "Готово",
- "feedback-bugcheck": "Страхотно! Само проверете дали това не сред вече [$1 докладваните грешки].",
- "feedback-bugnew": "Проверих. Докладвай за нова грешка",
"searchsuggest-search": "Търсене",
"api-error-badaccess-groups": "Нямате необходимите права, за да качвате файлове в това уики.",
"api-error-badtoken": "Вътрешна грешка: неправилен маркер.",
@@ -2895,5 +2915,32 @@
"action-pagelang": "промяна езика на страницата",
"log-name-pagelang": "Дневник на езиковите промени",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''изключено''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''изключено''')",
+ "mediastatistics": "Медия статистики",
+ "mediastatistics-table-mimetype": "MIME тип",
+ "mediastatistics-header-audio": "Аудио",
+ "mediastatistics-header-video": "Видео",
+ "json-error-syntax": "Синтактична грешка",
+ "special-characters-group-latin": "Латиница",
+ "special-characters-group-latinextended": "Латиница – разширена",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Символи",
+ "special-characters-group-greek": "Гръцки",
+ "special-characters-group-cyrillic": "Кирилица",
+ "special-characters-group-arabic": "Арабски",
+ "special-characters-group-arabicextended": "Разширен арабски",
+ "special-characters-group-persian": "персийски",
+ "special-characters-group-hebrew": "Иврит",
+ "special-characters-group-bangla": "Бенгалски",
+ "special-characters-group-tamil": "Тамилски",
+ "special-characters-group-telugu": "Телугу",
+ "special-characters-group-sinhala": "Синхалски",
+ "special-characters-group-gujarati": "Гуджарати",
+ "special-characters-group-devanagari": "Деванагари",
+ "special-characters-group-thai": "тайландски",
+ "special-characters-group-lao": "Лао",
+ "special-characters-group-khmer": "кхмерски",
+ "special-characters-title-endash": "средно тире",
+ "special-characters-title-emdash": "дълго тире",
+ "special-characters-title-minus": "знак минус"
}
diff --git a/languages/i18n/bgn.json b/languages/i18n/bgn.json
new file mode 100644
index 00000000..e473177f
--- /dev/null
+++ b/languages/i18n/bgn.json
@@ -0,0 +1,2771 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan",
+ "Ibrahim khashrowdi"
+ ]
+ },
+ "tog-underline": "لینکانی جهلگا خط کشیتین",
+ "tog-hideminor": "کمین تغیرات شه آخیرین تغیراتانی لڑلیستا چیهر داته بئینت",
+ "tog-hidepatrolled": "گشت وارته گین ایڈ\tیٹان شه آخیرین ایڈ\tیٹانی لڑلیستا چیهر داته بئینت",
+ "tog-newpageshidepatrolled": "گشت وارته ئین تاکدیمان شه نی نوکین تاکدیمانی لڑ لیستا زیان بیئنت",
+ "tog-extendwatchlist": "پراخ کورتین واچلیستی لڑلیست په موچین تغیراتان،نه فقط آخرینان",
+ "tog-usenewrc": "گروپ بندی تغیراتانئ بی اساسئ تاکدیمانئ اخیر ئین تغیران و واچلیستئ لڑ لیستا",
+ "tog-numberheadings": "ئنوانانئ اتوماتیکین شماره گذاری",
+ "tog-showtoolbar": "نشان داتین ایڈیٹی نوارئ",
+ "tog-editondblclick": "تاکدیمانی ایڈیٹ کورتین گو دو کلیک ئا",
+ "tog-editsectiononrightclick": "پئال کورتین بخشانی ایڈیٹی گو راست کلیکا بی ئنوانی سرا",
+ "tog-watchcreations": "تاکدیمان که من جوڑ ئه کنین یا فایلان که بُرز ( ڈ\tانلوڈ\t) ئه کنین بی نئ واچلیست ئا اضافه بیئنت",
+ "tog-watchdefault": "تاکدیمان و فایلان که من ایڈ\tیٹ ئه کنین بی نئ واچلیست ئا اضافه بیئنت",
+ "tog-watchmoves": "تاکدیمان و فایلان که من جابجا ئه کنین بی نئ واچلیست ئا اضافه بیئنت",
+ "tog-watchdeletion": "تاکدیمان و فایلان که من ڈ\tیلیٹ ئه کنین بی نئ واچلیست ئا اضافه بیئنت",
+ "tog-watchrollback": "تاکدیمان که من بیر گردینته ئون بی نئ واچلیست ئا اضافه بیئنت",
+ "tog-minordefault": "مارک یا ئلامت جتین موچین ایڈ\tیٹانی بی جزئی رقما",
+ "tog-previewontop": "پیش نمایش دیم شه ایڈ\tیٹ باکس ئه نشان داته بیئت",
+ "tog-previewonfirst": "پیش نمایش اولین ایڈ\tیٹئ وختا نشان داته بیئت",
+ "tog-enotifwatchlistpages": "اگه شه نئ واچلیستا گوجام تاکدیم یا فایل ایڈ\tیٹ ئه بیئت په من ایمیل دیم داته بیئت",
+ "tog-enotifusertalkpages": "اگه شه نئ کار زوروکین تاکدیم ( یوزیر تاک) ایڈ\tیٹ ئه بیئت په من ایمیل دیم داته بیئت",
+ "tog-enotifminoredits": "په گوُنڈین ایڈ\tیٹان تاکدیمانی یا فایلان خاتیرا په من ایمیل دیم داته بیئت",
+ "tog-enotifrevealaddr": "نی ایمیل ادرس بی ایمیلئ ناٹیپیشن ئانی تا نشان داته بیئت",
+ "tog-shownumberswatching": "دیستوکین کارزورکانی اندازه نشان داته بیئت",
+ "tog-oldsig": "انونین امضاء:",
+ "tog-fancysig": "امضا باید بی ویکی‌متنئ رکما بی نظر گیپته بیئت (بدون شه اتوماتیکین لینکی درج کورتینا)",
+ "tog-uselivepreview": "استفاده شه زنده ئین پیش نمایش ئا",
+ "tog-forceeditsummary": "وختی که من ئنوانئ خلاصه ئا نیوشته نه کورته اون په گوشته بیئت",
+ "tog-watchlisthideown": "نی ایڈیٹ شه واچلیستی تا چیهر بیئنت",
+ "tog-watchlisthidebots": "رباتئ ایڈیٹ شه واچلیستی تا چیهر بیئنت",
+ "tog-watchlisthideminor": "کم ئین ایڈیٹ شه واچلیستی تا چیهر بیئنت",
+ "tog-watchlisthideliu": "لوگین بوته ئین کار زوروکانی ایڈیٹ شه نی واچلیست چیهر بیئنت",
+ "tog-watchlisthideanons": "نا دروستي ئین کار زوروکانی ایڈیٹ شه نی واچلیست چیهر بیئنت",
+ "tog-watchlisthidepatrolled": "گشت وارته ئین ایڈیٹ شه واچلیستی تا چیهر بیئنت",
+ "tog-ccmeonemails": "په من یک کاپی شه آ ایمیلان که من په دیگران دیم ئه دهین ، دیم داته بیئت",
+ "tog-diffonly": "جهلگی تاکدیمی محتوا تفاوت نشان داته مه بئینت",
+ "tog-showhiddencats": "چیهرین تهرئانه نشان دهی",
+ "tog-norollbackdiff": "بئد شه بیئرگردینتینا تفاوت نشان داته مه بیئت",
+ "tog-useeditwarning": "در بوتینی وختا شه ایڈ\tیٹی دیما اگر نی ایڈ\tیٹ تا هنگه ذخیره نه بوتتن ، په من هشدار دیم داته بیئت",
+ "tog-prefershttps": "بی داخل بوتینی وختا باید موچین وختا شه امنین اتصال ئا استفاده بیئت",
+ "underline-always": "موچین وختا",
+ "underline-never": "هیچ وخت",
+ "underline-default": "پیش فرضین پوسته یا بروزیر",
+ "editfont-style": "ایڈ\tیٹی جئبه ئی قلمی سبک:",
+ "editfont-default": "پیش فرضین بروزیر",
+ "editfont-monospace": "گو ثابیتین اندزه ئی قلم ئا",
+ "editfont-sansserif": "قلم بی شه گوشه ئا",
+ "editfont-serif": "گوشه دارین قلم",
+ "sunday": "یکشمی",
+ "monday": "دوشمی",
+ "tuesday": "سه شمی",
+ "wednesday": "چار شمی",
+ "thursday": "پنچشمی",
+ "friday": "جوما",
+ "saturday": "شمی",
+ "sun": "یکشمی",
+ "mon": "دوشمی",
+ "tue": "سه شمی",
+ "wed": "چار شمی",
+ "thu": "پنچشمی",
+ "fri": "جوما",
+ "sat": "شمی",
+ "january": "جنوری",
+ "february": "فیبروری",
+ "march": "مارچ",
+ "april": "اپریل",
+ "may_long": "می",
+ "june": "جون",
+ "july": "جولای",
+ "august": "اگوست",
+ "september": "سیپٹمبر",
+ "october": "اکتوبر",
+ "november": "نوامبر",
+ "december": "ڈ\tسمبر",
+ "january-gen": "جنوری",
+ "february-gen": "فیبروری",
+ "march-gen": "مارچ",
+ "april-gen": "اپریل",
+ "may-gen": "می",
+ "june-gen": "جون",
+ "july-gen": "جولای",
+ "august-gen": "اگوست",
+ "september-gen": "سیپٹمبر",
+ "october-gen": "اکتوبر",
+ "november-gen": "نوامبر",
+ "december-gen": "ڈ\tسمبر",
+ "jan": "جنوری",
+ "feb": "فیبروری",
+ "mar": "مارچ",
+ "apr": "اپریل",
+ "may": "می",
+ "jun": "جون",
+ "jul": "جولای",
+ "aug": "اگوست",
+ "sep": "سیپٹمبر",
+ "oct": "اکتوبر",
+ "nov": "نوامبر",
+ "dec": "ڈ\tسمبر",
+ "january-date": "$1 جنوری",
+ "february-date": "$1 فیبروری",
+ "march-date": "$1 مارچ",
+ "april-date": "$1 اپریل",
+ "may-date": "$1 می",
+ "june-date": "$1 جون",
+ "july-date": "$1 جولای",
+ "august-date": "$1 اگوست",
+ "september-date": "$1 سیپٹ\tمبر",
+ "october-date": "$1 اکتوبر",
+ "november-date": "$1 نوامبر",
+ "december-date": "$1 ڈ\tسمبر",
+ "pagecategories": "{{PLURAL:$1|تهر|تهرئان}}",
+ "category_header": "تهرِ تاکدیمان «$1»",
+ "subcategories": "گونڈ\t تهرئان",
+ "category-media-header": "میڈ\tیا بی تهری تا «$1»",
+ "category-empty": "<em>ای تهر بی انون وختا هیچ تاکدیمئ یا میڈ\tیاین دیمی نه اینت.</em>",
+ "hidden-categories": "{{PLURAL:$1|چیهرین تهر|چیهرین تهرئان}}",
+ "hidden-category-category": "چیهرین تهرئان",
+ "category-subcat-count": "{{PLURAL:$2|ای تهر تانا جئلگین مطالبانا داریت.|{{PLURAL:$1|ای گوُنڈ\t تهر|ای $1 گوُنڈ\t تهر}} بی ای تهر ئی تا {{PLURAL:$1|داریت|دارنت}}؛ بی ای تهر تا مجموئان $2 گوُنڈ\t تهر انت.}}",
+ "category-subcat-count-limited": "ای تهر شامل شه جهلگین{{PLURAL:$1|یک|$1}} گونڈ\tتهر ئه انت .",
+ "category-article-count": "{{PLURAL:$2|ای تهر فقط جهلگی همی یکین تاکدیمانا داریت.|{{PLURAL:$1|ای تاکدیم|ای $1 تاکدیم}} بی ای تهرئ تا قرار {{PLURAL:$1|داریت|دارنت}}؛ ای تهر موچاموچ $2 تاکدیم داریت.}}",
+ "category-article-count-limited": "{{PLURAL:$1|جهلگی تاکدیم|$1 جهلگی تاکدیمان}} بی انونین تهرئ تا قرار دارنت.",
+ "category-file-count": "{{PLURAL:$2|ای تهر تانا ای جهلگین فایلا داریت .|{{PLURAL:$1|ای فایل|ای $1 فایل}} بی ای تهرئ تا جاه {{PLURAL:$1|داریت|دارنت}}؛ ای تهر تا موچاموچ $2 فایل انت.}}",
+ "category-file-count-limited": "{{PLURAL:$1|جهلگین فایل|$1 جهلگین فایلان}} بی انونین تهرئ تا قرار دارنت.",
+ "listingcontinuesabbrev": "(ادامه)",
+ "index-category": "آ تاکدیمان که دیسته بوته گنت",
+ "noindex-category": "آ تاکدیمان که دیسته نه بوته گنت",
+ "broken-file-category": "تاکدیمان گو خرابین لینکان بی فایلا",
+ "about": "بی باره ها",
+ "article": "محتوائین تاکدیم",
+ "newwindow": "(نوکین دَروازگی تا پاچ بیئت)",
+ "cancel": "کنسیل",
+ "moredotdotdot": "گیشتیر...",
+ "morenotlisted": "ای لڑ\t لیست کامل نه اینت.",
+ "mypage": "تاکدیم",
+ "mytalk": "گپ",
+ "anontalk": "ای آی پی نشانی ئی باره ئا گپ",
+ "navigation": "ناوبری",
+ "and": "&#32;و",
+ "qbfind": "ودی کورتین",
+ "qbbrowse": "مرور",
+ "qbedit": "ایڈیٹ",
+ "qbpageoptions": "ای تاکدیم",
+ "qbmyoptions": "نئ تاکدیمان",
+ "faq": "متداولین سوالان",
+ "faqpage": "Project:متداولین سوالان",
+ "actions": "عملکردهان",
+ "namespaces": "نامانی فضاهان",
+ "variants": "لهجه ئان",
+ "navigation-heading": "ناوبری مینو",
+ "errorpagetitle": "خطا",
+ "returnto": "بیئرگشت بئ $1.",
+ "tagline": "شه {{SITENAME}}",
+ "help": "کومک",
+ "search": "گشتین",
+ "searchbutton": "گشتین",
+ "go": "برا",
+ "searcharticle": "برا",
+ "history": "تاکدیمی تاریخچه",
+ "history_short": "تاریخچه",
+ "updatedmarker": "نئ آخرین آپڈیٹا نشان داتین",
+ "printableversion": "چاپ وڑی ویرژن",
+ "permalink": "ثابتین لبنک",
+ "print": "چاپ",
+ "view": "نمایش",
+ "view-foreign": "دیستین بی $1",
+ "edit": "ایڈیٹ",
+ "edit-local": "محل و جای توضیئانی ایڈ\tیٹ کورتین",
+ "create": "جوڑ\t کورتین",
+ "create-local": "محل و جای توضیئانی اضافه کورتین",
+ "editthispage": "ایڈ\tیٹ کورتین ای تاکدیمئ",
+ "create-this-page": "جوڑ کورتین ای تاکدیمئ",
+ "delete": "پاک کورتین",
+ "deletethispage": "پاک کورتین ای تاکدیمئ",
+ "undeletethispage": "بی جاه آورتین ای تاکدیمئ",
+ "undelete_short": "بی جاه آورتین {{PLURAL:$1|یک ایڈیٹ|$1 ایڈیٹ}}",
+ "viewdeleted_short": "نشان داتین {{PLURAL:$1|یکین ڈ\tیلیٹ بوتگین ایڈ\tیٹئ |$1 ڈ\tیلیٹ بوتگین ایڈ\tیٹئ}}",
+ "protect": "ساتیتئن",
+ "protect_change": "تغیر",
+ "protectthispage": "ای تاکدیمئ قُلپ کورتین",
+ "unprotect": "قُلپئ ٹگل داتین",
+ "unprotectthispage": "ای تاکدیمی قُلپئ ٹگل داتین",
+ "newpage": "نوکین تاکدیم",
+ "talkpage": "ای تاکدیم باره ئا هبر و گپ",
+ "talkpagelinktext": "گپ",
+ "specialpage": "خاصین تاکدیم",
+ "personaltools": "شخصین وسایل",
+ "articlepage": "تاکدیمی محتوائانی نمایش",
+ "talk": "هبر و گپ",
+ "views": "دیستینین",
+ "toolbox": "وسایللان",
+ "userpage": "کارزوروکین تاکدیمی دیستین",
+ "projectpage": "پروژه ئی تاکدیمی دیستین",
+ "imagepage": "فایلی تاکدیما نشان داتین",
+ "mediawikipage": "پیامی تاکدیما نشان داتین",
+ "templatepage": "تراشوانئ تاکدیما نشان داتین",
+ "viewhelppage": "کومکی تاکدیما نشان داتین",
+ "categorypage": "دیستین تهری تاکدیمی",
+ "viewtalkpage": "گپ تاکدیمی نشان داتین",
+ "otherlanguages": "بی دیگه زبانانی تا",
+ "redirectedfrom": "(تغییرمسیر داتین شه $1)",
+ "redirectpagesub": "تاکدیمی تغییرمسیر داتین",
+ "redirectto": "تغییر مسیر بی:",
+ "lastmodifiedat": "ای تاکدیم آخرین‌ وارا بی $1 سائت $2 تا تغییر بوته.",
+ "viewcount": "شه ای تاکدیما کسی {{PLURAL:$1|یکوار|$1ور}} دیدن کورته.",
+ "protectedpage": "قُلپ بوتگین تاکدیم",
+ "jumpto": "جوپ کورتین بی:",
+ "jumptonavigation": "ناوبری",
+ "jumptosearch": "گشتین",
+ "view-pool-error": "متاسفانه موچین سرویس بی انونین وختا باز مشغول انت.\nبازین شه کار گیروکان لوٹنت که ای تاکدیما بگیندنت. \nمهربانی بکنیت دیم شه ایشی که پدا په ای تاکدیمی دیستینا کوشش بکنیت یک کمی صبر بکنیت.\n\n$1",
+ "generic-pool-error": "متاسفانه موچین سرویس بی انونین وختا باز مشغول انت.\nبازین شه کار گیروکان لوتنت که ای تاکدیما بگیندنت. \nمهربانی بکنیت دیم شه ایشی که پدا په ای تاکدیمی دیستینا کوشش بکنیت یک کمی صبر بکنیت.",
+ "pool-timeout": "تمام بوتین انتظارمهلتئ په قُلپ کورتینئ خاتیرا",
+ "pool-queuefull": "مخزن ئی صف پر اینت",
+ "pool-errorunknown": "ناشناخته ئین خطا",
+ "pool-servererror": "پول سنتر سرویس بی دسترس ئا نه اینت ( $1 ).",
+ "poolcounter-usage-error": "خطا استفاده شه: $1",
+ "aboutsite": "بی بارها {{SITENAME}}",
+ "aboutpage": "Project:بی بارها",
+ "copyright": "محتوایات بی $1 اجازه نامه ئا هستنت مگه ای که آی خلاف ئا ذکر بوته بیئنت .",
+ "copyrightpage": "{{ns:project}}:کاپی رایت یا باز کورتینی حق",
+ "currentevents": "انونین واقئات",
+ "currentevents-url": "Project:انونین واقئاتان",
+ "disclaimers": "تکذیب‌ نامه‌هان",
+ "disclaimerpage": "Project:ئمومی ئین تکذیب‌ نامه",
+ "edithelp": "کومک په ایدیت ئی خاتیرا",
+ "helppage-top-gethelp": "کومک",
+ "mainpage": "بُنیادی تاکدیم",
+ "mainpage-description": "بُنیادی تاکدیم",
+ "policy-url": "Project:سیاست‌ئان",
+ "portal": "کار زوروکانئ داخل بوتین",
+ "portal-url": "Project:کار زوروکانئ داخل بوتین",
+ "privacy": "سیاست محرمانگی",
+ "privacypage": "Project:سیاست محرمانگی",
+ "badaccess": "دسترسی ئی خطا",
+ "badaccess-group0": "شما اجازه په ای ئملی اجرائا که درخواست کورته ئیت نداریت.",
+ "badaccess-groups": "ای ئملی که شما درخواست کورته ئیت مخصوص بی {{PLURAL:$2|ای گروپ|ای گروپ ئان}} شه کار زوروکان اینت: $1.",
+ "versionrequired": "نخسه $1 شه میڈ\tیا ویکی ئی نرم افزار ئا لازم اینت",
+ "versionrequiredtext": "په ای تاکدیمی دیستینی خاتیرا بی نخسه ئی $1 تا شه میڈ\tیا ویکی ئی نرم افزار ئا ضرورت اینت .\nبی [[Special:Version|ای تاکدیما]] برویت.",
+ "ok": "قبول داشتین",
+ "retrievedfrom": "گیپته بوته شه «$1»",
+ "youhavenewmessages": "$1 داریت ($2).",
+ "youhavenewmessagesfromusers": "شما شه {{PLURAL:$3|یک دیگه کار زوروکئ|$3 کار زوروک}} $1 داریت ($2).",
+ "youhavenewmessagesmanyusers": "شما شه تعدادی کار زوروک $1 داریت ($2).",
+ "newmessageslinkplural": "{{PLURAL:$1|نوکین پیام|999=نوکین پیامان}}",
+ "newmessagesdifflinkplural": "{{formatnum:$1}} {{PLURAL:$1|ٹگل|999=ٹگل}} اخیر",
+ "youhavenewmessagesmulti": "نوکین پیام بی $1 تاداریت.",
+ "editsection": "ایڈیٹ",
+ "editold": "ایڈیٹ",
+ "viewsourceold": "نشان داتین مبدائی",
+ "editlink": "ایڈیٹ",
+ "viewsourcelink": "نشان داتین مبدائی",
+ "editsectionhint": "ایدیت کورتین : $1 بخشی",
+ "toc": "محتویات",
+ "showtoc": "نشان داتین",
+ "hidetoc": "چیهر داتین",
+ "collapsible-collapse": "بستین",
+ "collapsible-expand": "پراخ کورتین",
+ "confirmable-confirm": "{{GENDER:$1|شما}} مطمئن هستیت؟",
+ "confirmable-yes": "هان",
+ "confirmable-no": "نه",
+ "thisisdeleted": "نشان داتین یا جوڑ\t کورتین $1 ئی؟",
+ "viewdeleted": "نشان داتین $1؟",
+ "restorelink": "{{PLURAL:$1|یک|$1}} ڈ\tیلیٹ بوتگینئ ایڈ\tیٹ",
+ "feedlinks": "حبر وان:",
+ "feed-invalid": "هبر وانی وراک ئی قیسم جواز نداریت.",
+ "feed-unavailable": "هبر وانی وراک ئان بی دسترس نه انت",
+ "site-rss-feed": "آراس‌اس وراک په $1",
+ "site-atom-feed": "اتومئ وراک په $1",
+ "page-rss-feed": "آراس‌اس وراک په \"$1\"",
+ "page-atom-feed": "اتومي وراک په «$1»",
+ "red-link-title": "$1 ( دیم موجود نه اینت)",
+ "sort-descending": "نزولین ترتیب کورتین",
+ "sort-ascending": "صعودی ترتیب کورتین",
+ "nstab-main": "تاکدیم",
+ "nstab-user": "کار زوروکی تاکدیم",
+ "nstab-media": "میڈ\tیای تاکدیم",
+ "nstab-special": "خاصین تاکدیم",
+ "nstab-project": "پروژه ئی تاکدیم",
+ "nstab-image": "فایل",
+ "nstab-mediawiki": "پیام",
+ "nstab-template": "تراشوان",
+ "nstab-help": "کومکین تاکدیم",
+ "nstab-category": "تهر",
+ "nosuchaction": "ایرنگین ئملی وجود نداریت",
+ "nosuchactiontext": "ای ئملی که شما مشخص کورته ئیت بی انترنیتئین ادرسی تا جواز نداریت .\nممکن اینت که انترنتین ادرسا جوان وارد نه کورته ئیت یا مشکل والا ئین لینک ئیا وارد کوره ئیت .\nیا امکان داریت که شه نرم افزاری که شما بی{{SITENAME}} تا استفاده کورته ئیت مشکل داشته بیئت.",
+ "nosuchspecialpage": "ای رقمین ویژه ئین تاکدیمی موجود نه اینت",
+ "nospecialpagetext": "<strong>شما په یک نامجازین تاکدیمی خاتیرا درخواست کورته ئیت.</strong>\n\nمجازین تاکدیمانی لڑ لیست بی [[Special:SpecialPages|{{int:specialpages}}]] تا وجود داریت.",
+ "error": "خطا",
+ "databaseerror": "مئلوماتین بانکئ خطا",
+ "databaseerror-text": "مشکلی بی مئلوماتین بانکی تا رخ داته. \nای ممکن اینت شه مشکلا بی نرم افزاری تا بیئت .",
+ "databaseerror-textcl": "مشکلی بی مئلوماتین بانکی تا رخ داته.",
+ "databaseerror-query": "پرس‌وجو: $1",
+ "databaseerror-function": "تابع: $1",
+ "databaseerror-error": "خطا: $1",
+ "laggedslavemode": "'''هشدار:''' امکان داریت که تاکدیم آخرین اپدیت ئا شامل مه بیئت .",
+ "readonly": "مئلوماتئ بانک قُلپ بوت",
+ "enterlockreason": "یک دلیلی په قُلپ کورتینا بیاریت، که آیی تا نشان داته بوته بیئت که چی وختی قُلپ پاچه ئه بیئت",
+ "readonlytext": "انون مئلوماتئ بانک په تغیراتان و جوڑ\t کورتینئ تاکدیمانیا قُلپ بوته؛ای حالت احتمالآ په خاتیری تئمیراتان است و پدا شه آیی وضیئت بی حالت اول ئا بیئر ئه گردید.\n\nمدیری که آیرا قُلپ کورته وتی توضیئاتانا پیش کورته است : $1",
+ "missing-article": "مئلوماتین بانک تاکدیمی متنا گو «$1» $2 ئی ناما که باید ودي کورتین ، ودي کورته نه توانت.\n\nاین مشکل معمولاً وختی ئه کیت که شما یک کهنگین لینک ئی و یا پاک بوتگین تاکدیمیا پدا بگردیت.\n\nیا دیگه شاید بی سافٹ ایر تا مشکل بیئت.\nمهربانی بکنیت ای مشکلا گو انترنتی ئین ادرسئ گوشتینا بی یکی شه [[Special:ListUsers/sysop|مدیرئان]] راپور دهیت.",
+ "missingarticle-rev": "(شمارهٔ نسخه: $1)",
+ "missingarticle-diff": "(تفاوت: $1، $2)",
+ "readonly_lag": "مئلوماتین بانک بی انونین وختا اتوماتیکین رکما قُلپ بوته تا که پشتوانی ئی و بُنیادی ئین نخسه گو وت هماهنگ بیئنت",
+ "internalerror": "داخلین خطا",
+ "internalerror_info": "داخلین خطا: $1",
+ "internalerror-fatal-exception": "خرابکارین استسنائین نمونه \"$1\"",
+ "filecopyerror": "نه شه فایل «$1» بی «$2» کاپی بیئت.",
+ "filerenameerror": "نه شه فایل «$1» بی «$2» تغیر نام بیئت.",
+ "filedeleteerror": "نه بوت فایل «$1» پاک بیئت.",
+ "directorycreateerror": "نه بوت مسیر $1 ئا جوڑ کورت.",
+ "directoryreadonlyerror": "دایرکتوری \"$1\" فقط وانتینئ اینت.",
+ "directorynotreadableerror": "دایرکتوری \"$1\" وانتینئ نه اینت.",
+ "filenotfound": "فایل «$1» ودی نه بوت.",
+ "unexpected": "غیرمنتظرئین اندازه: «$1»=«$2».",
+ "formerror": "خطا: نه توانن فرم ئا دیم دی ین.",
+ "badarticleerror": "نه توانن ای ئملا په ای تاکدیما انجام دی ین .",
+ "cannotdelete": "«$1» ئی تاکدیم یا اکسئ پاک کورتینی امکان نه اینت .\nممکن اینت دیمتیرا دیگه کسی آیرا پاک کورته بیئت.",
+ "cannotdelete-title": "نه توانیت که «$1» ئی تاکدیما ئا پاک کنیت",
+ "delete-hook-aborted": "پاک بوتین شه قلاب ئی نیمگاه لغو بوت.\nبی ای باره ئا هیچ توضیحی داته نه بوته.",
+ "no-null-revision": "پوچ ئین نخسه ئی جوڑ کورتینئ امکان په «$1» ئی تاکدیما موجود نه اینت",
+ "badtitle": "خرابین ئنوان",
+ "badtitletext": "شمی درخواستین ئنوان نا موتبر،خالی،یا میان زبانین یا میان ویکی ئین ئنوان و یا شه خرابین لینکی ات.\nممکن اینت که یک یا چینکه نویسگ داشته بیئت که نتوانن آوانا بی ئنوانی تا استفاده کنن.",
+ "perfcached": "همراهی کنوکین دیتا شه نهانی ئین حافظهٔ ئا فراخوانی بوته و ممکن اینت کاملاً اپڈیٹ نه بوته. حداکثر {{PLURAL:$1|یک نتیجه| $1 نتیجه}} بي نهانی ئین حافظهٔ تا دسترس ئی وڈ اینت.",
+ "perfcachedts": "همرای کنوکین دیتا شه نهانی ئین حافظه ئا فرخوانی بوته و آخرین وار بئ $1 ئی تا اپڈیٹ بوته. حداکثر {{PLURAL:$4|یک نتیجه|$4 نتیجه}} بئ نهانی ئین حافظه تا دسترس ئی وڈ اینت.",
+ "querypage-no-updates": "ای تاکدیمی اپڈیٹ کورتین انون غیر فئال بوته.\nای تاکدیمی مئلومات ممکن اینت که نوک نه بوته انت.",
+ "viewsource": "نشان داتین مبدائی",
+ "viewsource-title": "مبدا ئی نشان داتین په $1",
+ "actionthrottled": "شمی ئملی دیم گیپته بوت",
+ "actionthrottledtext": "په دیمگیری شه اسپم شینک بوتینی خاتیرا، په شما اجازه نه اینت که ایرنگین ئملی ئا چینکه وار بی یک کمین وختی تا انجام دهیت.\nمهربانی بکنیت پد شه چینکه دقیقه ئا کوشش بکنیت.",
+ "protectedpagetext": "ای تاکدیم په دیمگیری شه ایڈیٹ و یا دیگرین فئالیئتان قُلپ بوته.",
+ "viewsourcetext": "شما ئه توانیت ای تاکدیمی مبدائا بگیندیت و یا کاپی بکنیت:",
+ "viewyourtext": "شما ئه تونیت که '''وتئ ایڈیٹانی''' منشاء ئا بی ای تاکدیمی تا بگیندیت و کاپی بکنیت:",
+ "protectedinterface": "ای تاکدیم یک متنی ئا ارایه ئه کنت که ای ویکی ئی تا یک سافٹ ایرئ په واسط بی کار زوروکانی مانجینا اینت و په دیمگیری ئا شه خرابکاری ئی خاتیرا قُلپ بوته.\nپه اضافه کورتین یا تغیر داتین ترجمه په موچین ویکی ئان ، مهربانی بکنیت شه [//translatewiki.net/ translatewiki.net]، میڈیا ویکی ئی محلی کورتینی پروژه ئا ، استفاده بکنیت.",
+ "editinginterface": "<strong>هشدار:</strong> تاکدیمی که ایڈیٹ ئه کنیت متنی ئا شامل ئه بیئت که بی ای کار زوروکئ واسط ئی سافت ایر تا به کار گیپته بوته.\nای تاکدیمی تغییر منجر بئ کار زوروکئ واسط ئی ظاهر ئین تغیر ای سافت ایر په دیگه کار زوروکان ئه بیئت.",
+ "translateinterface": "په اضافه کورتین یا تغیر داتین ترجمه ئی په موچین ویکی ئان،مهربانی بکنیت شه [//translatewiki.net/ translatewiki.net]، مییڈیا ویکی محلی کورتینی پروژه ئا، استفاده بکنیت.",
+ "cascadeprotected": "ای تاکدیم بئ ایڈیٹتانی مقابلا قُلپ بوته چونکه بی جهلگین قُلپ بوته ئین {{PLURAL:$1|تاکدیم|تاکدیمانئ}} تا بئ {{PLURAL:$1|آوان|آوانئ}} تا «آپشاری» ئی گزینه انتخاب بوته:\n$2",
+ "namespaceprotected": "شما '''$1''' ئی تاکدیمانئ فضای نامئ ایڈیٹ کورتین ئی اجازه ئا نداریت.",
+ "customcssprotected": "شما ای سی اس اس ئی تاکدیمئ ایڈیٹ ئی اجازه ئا نداریت، په خاتیریکه ایشی تا یک کار زوروکئ شخصی ئین تنظیمات هستنت.",
+ "customjsprotected": "شما ای جاوااسکریپت ئی تاکدیمئ ایڈیٹ ئی اجازه ئا نداریت، په خاتیریکه ایشی تا یک کار زوروکئ شخصی ئین تنظیمات هستنت.",
+ "mycustomcssprotected": "شما ای سی اس اس ئی تاکدیمی ایڈیٹ ئی اجازه ئه نداریت.",
+ "mycustomjsprotected": "شما ای جاوااسکریپت ئی ایڈیٹ ئی اجازه ئه نداریت.",
+ "myprivateinfoprotected": "شما په وتئ شخصین مئلوماتانئ ایڈیٹ ئی اجازه ئه نداریت.",
+ "mypreferencesprotected": "شما په وتئ تنظیماتانئ ایڈیٹ ئی خاتیرا اجازه نداریت.",
+ "ns-specialprotected": "خاصین تاکدیم موچ غیر پئال انت.",
+ "titleprotected": "ای ئنوان شه [[User:$1|$1]] نیمگا په جوڑ کورتینئ مقابلا قُلپ بوته.\nوتئ دلیل ئا پیش کورته ایش اینت : «''$2''».",
+ "filereadonlyerror": "«$1» ئی فایلئ تغیر داتین ممکن نه اینت چون ه «$2» ئی فایلي مخزن فقط بی وانتینی ئین حالت ئی تا قرار داریت.\n\nمدیری که آیرا قُلپ کورته ایرنگ توضیح داته: «$3».",
+ "invalidtitle-knownnamespace": "نا موتبرین ئنوان گو نامئ فضای «$2» و متن ئی «$3»",
+ "invalidtitle-unknownnamespace": "ناموتبرین ئنوان گو نا زاتین نامئ فضای شماره $1 و متن ئی «$2»",
+ "exception-nologin": "لاگین نه بوته ئیت",
+ "exception-nologin-text": "مهربانی بئ [[Special:Userlogin|تا داخل بیئت]] تا بتوانیت بئ ای تاکدیما دسترسی داشته بئیت.",
+ "exception-nologin-text-manual": "مهربانئ بکنیت $1 تا بتوانیت بئ ای تاکدیم یا عمل ئا دسترسی داشته بئیت .",
+ "virus-badscanner": "بدین پیکربندی: نازانتین ویروس ئی سکن کورتین: ''$1''",
+ "virus-scanfailed": "ناکامین سکن (کود $1)",
+ "virus-unknownscanner": "نامئلومین انتی ویروس:",
+ "logouttext": "'''انون شما ثبت دَر بوتین کورته ئیت.'''\nتوجه داشته بئیت که وتي بروزیر ئی چیهرین حافظهٔ ئا پاک مه کنیت، بعضی شه دیمان ممکن اینت که بئ یک رقم ئی نشان داته بیئنت که بگوشی ته آوانی تا داخل بوته ئی.",
+ "welcomeuser": "وش آتیت $1!",
+ "welcomecreation-msg": "شمی کار زوروکین حساب جوڑ بوت.\nبی هوش مکنیت که وتئ [[Special:Preferences|تنظیماتان ئا {{SITENAME}}]] تغیر بدهیت.",
+ "yourname": "کار زوروکین نام:",
+ "userlogin-yourname": "کار زوروکین نام",
+ "userlogin-yourname-ph": "وتئ کار زوروکین ناما داخل بکنیت",
+ "createacct-another-username-ph": "کار زوروکین ناما داخل بکنیت",
+ "yourpassword": "چیهر گال یا پاسورد:",
+ "userlogin-yourpassword": "چیهر گال یا پاسورد",
+ "userlogin-yourpassword-ph": "وتئ پاسوردا داخل بکنیت",
+ "createacct-yourpassword-ph": "پاسوردا داخل بکنیت",
+ "yourpasswordagain": "پاسوردی تکرار کورتین",
+ "createacct-yourpasswordagain": "پاسوردا تایید کورتین",
+ "createacct-yourpasswordagain-ph": "پاسوردا پدا داخل کورتین دومین وارا",
+ "remembermypassword": "پاسورد یا چیهرگال ئا (تا حداکثر $1 {{PLURAL:$1|روچ|روچ}}) بئ ای بروزیري تا بسات",
+ "userlogin-remembermypassword": "نا داخل بوتگ بسات",
+ "userlogin-signwithsecure": "شه امنیت ئا استفاده بکنیت",
+ "yourdomainname": "شمی دامنهٔ:",
+ "password-change-forbidden": "شما ئا نه توانیت که بی ای ویکی تا پاسوردا تغیر بدهیت",
+ "externaldberror": "بئ مئلوماتین بانکی تا یک اوتوماتیکین خطا ئی رخ داته و یا ایکه شما وتئ خارجی ئین حسابئ شما اپڈیٹ کورتینی ئی اجازه ئا نداریت.",
+ "login": "داخل بوتین",
+ "nav-login-createaccount": "داخل بوتین / کار زوروکین حسابي جوڑ کورتین",
+ "userlogin": "داخل بوتین / کار زوروکین حسابي جوڑ کورتین",
+ "userloginnocreate": "داخل بوتین",
+ "logout": "در بوتین",
+ "userlogout": "در بوتین",
+ "notloggedin": "لاگین نه بوته ئیت",
+ "userlogin-noaccount": "شما کار زوروکین حسابئ نداریت؟",
+ "userlogin-joinproject": "بی {{SITENAME}} تا نام‌نویسی کنیت!",
+ "nologin": "شما کار زوروکین حسابئ نداریت ؟ $1.",
+ "nologinlink": "یک نوکین کار زوروکین حسابئ جوڑ کنیت",
+ "createaccount": "نوکین کار زوروکین حسابئ جوڑ کورتین",
+ "gotaccount": "شما کار زوروکین حسابئ داریت ؟ $1.",
+ "gotaccountlink": "داخل بوتین",
+ "userlogin-resetlink": "وتئ داخل بوتینئ مئلوماتان شه هوشا بورته ئیت؟",
+ "userlogin-resetpassword-link": "شمی پاسورد شه شمی دهوشا شُوته؟",
+ "userlogin-helplink2": "کومک گو داخل بوتینا",
+ "userlogin-loggedin": "شما انون بی ئنوان {{GENDER:$1|$1}} داخل بوته ئیت .\nشه جهلگین فورما په داخل بوتینا بی ئنوان دیگرین کار زوروکا استفاده بکنیت .",
+ "userlogin-createanother": "دیگرین کار زوروکین حسابئ جوڑ کورتین",
+ "createacct-emailrequired": "ایمیل ادرس",
+ "createacct-emailoptional": "ایمیل ادرس (اختیاری)",
+ "createacct-email-ph": "وتئ ایمیل ادرسا داخل بکنیت",
+ "createacct-another-email-ph": "ایمیل ادرسی داخل کورتین",
+ "createaccountmail": "استفاده شه تصادفین پاسوردا و آیی دیم داتین بی مشخصین ایمیل ادرسیا",
+ "createacct-realname": "واقئین نام (اختیاری)",
+ "createaccountreason": "دلیل:",
+ "createacct-reason": "دلیل",
+ "createacct-reason-ph": "پچی شما لوٹیت که دیگرین کار زوروکین حساب جوڑ کنیت؟",
+ "createacct-captcha": "امنیتئ چیک کورتین",
+ "createacct-imgcaptcha-ph": "په بُرزه گین اکسا کی گیندیت متنی داخل کنیت",
+ "createacct-submit": "وتئ کار زوروکین حسابا جوڑ کنیت",
+ "createacct-another-submit": "دیگرین کار زوروکین حسابئ جوڑ کورتین",
+ "createacct-benefit-heading": "ای {{SITENAME}} چو شمیا همیرنگین مردمانی واسطه ئا جوڑ بوته",
+ "createacct-benefit-body1": "{{PLURAL:$1|ایڈیٹ}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|تاکدیم}}",
+ "createacct-benefit-body3": "آخیرین {{PLURAL:$1|شریکان}}",
+ "badretype": "پاسوردانا که شما داخل کورته ئیت یکرنگ نه انت.",
+ "userexists": "ای کار زوروکین ناما که شما داخل کورته ئیت دیمتیرا استفاده بوته.\nمهربانی بکنیت یک دیگه نامئ بیلیئت .",
+ "loginerror": "خطا بی داخل بوتینی تا",
+ "createacct-error": "کار زوروکین حسابئ جوڑ کورتینی خطا",
+ "createaccounterror": "ای حسابئ جوڑ کورتین امکان نداریت: $1",
+ "nocookiesnew": "کارزوروکی هیساب جۆڑ بوت، اما تا انون لوگین نه بوته ایت.\n{{SITENAME}} په کارزوروکانی لوگین بوتین ئا شه کوکی ئا ایستیپاده ئا کننت.\nشما کوکی ئانه شه کار پرینته ایت.\nمهربانی بکنیت کوکی ئانه په کار بگیریت، و پدا گۆ وتی نۆکین کارزوروکی ناما و چیهرگال ئا لوگین به ایت.",
+ "nocookieslogin": "{{SITENAME}} په کارزوروکانی لوگین بوتینا شه کوکی ئان ایستیپاده ئه کننت.\nشما کوکی ئانه شه کار پرینته ایت.\nمهربانی بکنیت کوکی ئانه په کار بگریت و پدا کوشش بکنیت.",
+ "nocookiesfornew": "کارزوروکی هیساب جۆڑ نه بوت، په خاتیریکه نتوانتن آیی منبه ئا تایید بکنن.\nموتمه ئین به یت که کوکی په ئال انت، آ وختا شه سری ن\tۆک بارگیری بکینت و پدا امتیهان بکنیت .",
+ "noname": "شما یک موتبرین کار زوروکی ئین نامی ئا مشخص نه کورته ئیت.",
+ "loginsuccesstitle": "کامیابین لوگین",
+ "loginsuccess": "'''شما انون گو «$1» ئی نا بی {{SITENAME}} ئی تا داخل بوته ایت.'''",
+ "nosuchuser": "کار زوروکئ گۆ «$1» ئی ناما موجود نه اینت.\nکار زورکئ نام گۆ گۆنڈی یا توُهی ئا هوروپ ئان هساس اینت.\nنامی املا ئا بگنیدیت، یا [[Special:UserLogin/signup|یک نوکین کار زورکی هسابئ جۆڑ بکنیت]].",
+ "nosuchusershort": "هیچ کار زوروکئ بی نامئ ''$1'' ئا وجود نداریت.\nوتئ املا ئا چیک بکنیت.",
+ "nouserspecified": "باید یک کار زوروکئ نام مشخص بکنیت.",
+ "login-userblocked": "ای کار زوروک بلاک بوته، په داخل بوتینا اجازه نه اینت.",
+ "wrongpassword": "ای پاسورد یا چیهر گالا که داخل کورته ایت صحیح نه اینت.\nمهربانی بکنیت، پدا امتحان بکینت.",
+ "wrongpasswordempty": "ای پاسورد یا چیهر گالا که داخل کورته ایت ، خالی اینت.\nمهربانی پدا کوشش بکنیت.",
+ "passwordtooshort": "پاسورد باید کم شه کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته بیئت.",
+ "passwordtoolong": "پاسورد نه باید گیشتیر شه {{PLURAL:$1|۱ حرف|$1 حرفا}} داشته بیئت.",
+ "password-name-match": "شمی چیهرگال یا پاسورد باید شه شمی کار زورکی ئین ناما فرق داشته بیئت.",
+ "password-login-forbidden": "استفاده شه ای کار زوروکی ناما و شه ای چیهرگالا اجازه نه اینت.",
+ "mailmypassword": "پاک کورتین پاسوردئ",
+ "passwordremindertitle": "نوکین موقتی ئین چیهرگال یا پاسورد په {{SITENAME}}",
+ "noemail": "هیچ ایمیل ادرسئ په «$1» کار زوروکا ثبت نه بوته.",
+ "noemailcreate": "باید یک موتبرین ایمیل ادرسئ داخل بکنیت",
+ "passwordsent": "نوکین چیهرگال بئ سبت بوته ئین ایمیل ادرس ئا په «$1» ئا دیم داته بوت.\nمهربانی بکنیت شه آیی گیپتین ئا پد لوگین به ییت.",
+ "mailerror": "خطا بی ایمیلی داتینی تا: $1",
+ "emailauthenticated": "شمی ایمیلی ادرس بی $2 سائت $3 تا تصدیق ئه بیئت.",
+ "emailnotauthenticated": "شمی ایمیلئ ادرس تا انون قبول نه بوته.\nایمیل په هیچ یک شه ویژه گی ئان دیم داته ئه نه بیئت.",
+ "noemailprefs": "په ای قابلیت ئانی دیمبورتینا یک ایمیل ادرسئ مشخص بکنیت.",
+ "emailconfirmlink": "وتئ ایمیل ادرسی تائید کورتین",
+ "cannotchangeemail": "شمی حسابئ ایمیلئ تغیر داتین بی ای ویکی ئی تا تغیری وڈ نه اینت.",
+ "emaildisabled": "ای ویبسایت ایمیل ئا دیم داته ئه نه کنت.",
+ "accountcreated": "کار زوروکین حساب جوڑ بوت",
+ "accountcreatedtext": "کار زوروکئ حساب په [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|هبر و گپ]]) جوڑ بوته.",
+ "createaccount-title": "کار زوروکئ حساب جوڑ کورتین بی {{SITENAME}}",
+ "createaccount-text": "یک نفری په شمی ایمیلا یک کار زوروکین حسابئ بی {{SITENAME}} تا گو «$2» ناما جوڑ کورته ($4)، که آیی پاسورد ایش اینت : $3\nشما باید همی انون وتئ حسابئ تا داخل بئیت و وتئ پاسوردا تغیر بدهیت .\n\nاگه ای حساب اشتباهی جوڑ بوته ، ای پیام ئا نادیستگ بگیریت.",
+ "login-abort-generic": "شمی لوگین ناکام ات - ساکت بوت",
+ "login-migrated-generic": "شمی کار زوروکین نام انتقال بوته، و شمی کار زوروکین نام دیگه بی ای ویکی ئی تا وجود نداریت.",
+ "loginlanguagelabel": "زبان: $1",
+ "suspicious-userlogout": "شمی ریکویست په دربوتینی خاتیرا رد بوت، بی خاتیریکه بی نظر ئه رسیئت که ای درخواست شه خراب و یا پروکسی ئین بروزیرئ نیمگا دیم داته بوته.",
+ "createacct-another-realname-tip": "واقئین نام اختیاری اینت.\nاگه آیی را بنویسیت شه شما بی قدردانی ئی وختا شه شمی واقئین ناما استفاده بیئت",
+ "pt-login": "داخل بوتین",
+ "pt-login-button": "داخل بوتین",
+ "pt-createaccount": "کار زوروکین حسابئ جوڑ کورتین",
+ "pt-userlogout": "در بوتین",
+ "php-mail-error-unknown": "نا زانتین خطابی تابع mail()‎ پی‌اچ‌پی",
+ "user-mail-no-addy": "کوشش په دیم داتین یک خط بی شه گوجام ایمیل ادرسئ ئا.",
+ "user-mail-no-body": "کوشش په دیم داتین ئا یک گونڈین یا خالی ئین ایمیل ئی ئا.",
+ "changepassword": "پاسوردی تغیر داتین",
+ "resetpass_announce": "شما باید په لوگین ئی الاسی ئا، نۆکین چیهرگالی ئی تنظیم بکنیت.",
+ "resetpass_header": "پاسوردئ تغیر داتین",
+ "oldpassword": "دیمئ پاسورد:",
+ "newpassword": "نوکین پاسورد:",
+ "retypenew": "نوکین پاسوردا پدا داخل کورتین",
+ "resetpass_submit": "پاسوردی تنظیم و داخل بوتین",
+ "changepassword-success": "شمی پاسوردئ تغیر کامیاب بوت و پاسورد تغیر کورت",
+ "changepassword-throttled": "شما بیخی باز وار په لوگین بوتینا کوشش کورته ایت.\nمهربانئ بکنیت دیم شه آیی که پدا کوشش بکنیت $1 صبر کنیت.",
+ "resetpass_forbidden": "نه توانیت که پاسوردا تغیر بدهیت",
+ "resetpass-no-info": "په ای تاکدیمی دسترسی ئی خاتیرا داخل بئیت.",
+ "resetpass-submit-loggedin": "پاسوردی تغیر داتین",
+ "resetpass-submit-cancel": "کنسیل",
+ "resetpass-recycled": "مهربانی بکینت دیگه پاسورد یا چیهرگالی غیر شه انونین چیهرگال ئا تنظیم بکنیت.",
+ "resetpass-temp-emailed": "شما گۆ یک موقتین ایمیل بوته ئین کود ئا لوگین بوته ئیت.\nپه لوگین ئی الاسی ئا شما باید نوکین چیهرگالی ایدا داخل بکنیت:",
+ "resetpass-temp-password": "موقیئتین پاسورد:",
+ "resetpass-abort-generic": "چیهرگالی ٹگل شه یک توسئ ئه گری نیمگا شه کار پرینته بوت.",
+ "resetpass-expired": "شمی چیهرگالی ئی وخت الاس بوته. مهربانی په لوگین بوتینا نۆکین چیهرگالی تنظیم بکنیت.",
+ "passwordreset": "پاک کورتین پاسوردئ",
+ "passwordreset-text-one": "په پدا نادینتین ایمیلی پاسوردی خاتیرا ای فرم ئا پر کنیت.",
+ "passwordreset-text-many": "{{PLURAL:$1|په موقتی ئین چیهرگال ئی گیپتین شه ایمیلئ راه ئا، یکی شه زمینه‌هان ئا پر کنیت.}}",
+ "passwordreset-legend": "پاک کورتین پاسوردئ",
+ "passwordreset-disabled": "ای ویکی ئی تا پاسورد یا چیهرگالی پدا بیئر گردینتین غیر پئال اینت.",
+ "passwordreset-emaildisabled": "ایمیلی گزینه بی ای یکی ئی تا پئال نه ونت.",
+ "passwordreset-username": "کار زوروکین نام:",
+ "passwordreset-domain": "دامنه:",
+ "passwordreset-capture": "ایمیلی آخیر نشان داته بیئت؟",
+ "passwordreset-capture-help": "اگه ای گزینه ئا بگیندیت ، ایمیل (گو موقتین پاسوردا) بی شما نشان داته ئه بیئت و په کار زوروکا هم دیم داته ئه بیئت.",
+ "passwordreset-email": "ایمیل ادرس:",
+ "passwordreset-emailtitle": "حسابئ مئلومات بی {{SITENAME}}",
+ "passwordreset-emailelement": "کار زوروکئ نام: $1\nموقت ئین چیهرگال: $2",
+ "passwordreset-emailsent": "یک ایمیل په چیهر گالئ پاک بوتین خاتیرا دیم داته بوت.",
+ "passwordreset-emailsent-capture": "یک ایمیلئ په بیئرگردینتین ئا پاسوردئ خاتیرا، دیم داته بوت.",
+ "changeemail": "ایمیل ادرسی تغیر داتین",
+ "changeemail-no-info": "په ای تاکدیمی دسترسی ئی خاتیرا داخل بئیت.",
+ "changeemail-oldemail": "انونین ایمیل ادرس:",
+ "changeemail-newemail": "نوکین ایمیل ادرس:",
+ "changeemail-none": "(هیچ)",
+ "changeemail-password": "شمی {{SITENAME}} ئی پاسورد یا چیهرگال:",
+ "changeemail-submit": "ایمیل ادرسی تغیر",
+ "changeemail-throttled": "شما بیخی باز وار په لوگین بوتینا کوشش کورته ایت.\nمهربانئ بکنیت دیم شه آیی که پدا کوشش بکنیت $1 صبر کنیت.",
+ "resettokens": "بیئر گردینتین نشانگ ئانی",
+ "resettokens-no-tokens": "هیچ نشانگ ئی په ریست کورتین ئا وجود نداریت.",
+ "resettokens-legend": "بیئر گردینتین نشانگ ئانی",
+ "resettokens-tokens": "نشانگان:",
+ "resettokens-token-label": "$1 (انونین اندازه گ: $2)",
+ "resettokens-done": "بیئر گردینتین نشانگ ئان.",
+ "resettokens-resetbutton": "نشانی بوته ئین وسایلانی بیئرگردینتین.",
+ "bold_sample": "پر رنگین متن",
+ "bold_tip": "پر رنگین متن",
+ "italic_sample": "مورب متن",
+ "italic_tip": "مورب متن",
+ "link_sample": "خرابین ئنوان",
+ "link_tip": "داخلین لینک",
+ "extlink_sample": "http://www.example.com خرابین ئنوان",
+ "extlink_tip": "لینک په ڈنا (دیموند http://‎ ئا شه هوشا مه به ریت)",
+ "headline_sample": "متنئ سر ئنوان",
+ "headline_tip": "ئنوان سطح ۲",
+ "nowiki_sample": "ایدا چوکاٹ بندی نه بوته ئین متن ئه داخل کنیت",
+ "nowiki_tip": "نادیده گیپتین ویکی ئی چوکاٹ بندیا",
+ "image_tip": "متنی تئ اکس",
+ "media_tip": "فایل لینک",
+ "sig_tip": "شمی دستنام گو وختئ مهرئا",
+ "hr_tip": "افقی ئین خط (په مصرفئ کم کورتینا استفاده بیئت)",
+ "summary": "خلاصه:",
+ "subject": "موضو/ئنوان:",
+ "minoredit": "ای یک گونڈین ایڈیٹئ است",
+ "watchthis": "دیستین ای تاکدیمی",
+ "savearticle": "ای تاکدیم ذخیره بیئت",
+ "preview": "دیم دیست",
+ "showpreview": "دیم دیست",
+ "showdiff": "تغیراتانئ نشان داتین",
+ "blankarticle": "<strong>هشدار:</strong> شما انون یک خالین تاکدیمی جوڑ کورتینی حالا وَیت .\nاگر «{{int:savearticle}}» ئا پدا کلیک کنیت، یک تاکدیمی بدون شه محتوائا جوڑ ئه بیئت.",
+ "anoneditwarning": "<strong>هشدار:</strong> شما داخل نه بوته ئیت. شمی آی‌پی نشانگ ئا موچی ئه تواننت بگیندنت اگر شما هر تغیری بیاریت . اگر <strong>[$1 داخل بئیت]</strong> یا <strong>[$2 یک کار زوروکین حساب جوڑ بکنیت]</strong>، شمی ایڈیٹ\t بی شمی کار زوروکین ناما شینک ئه بیئنت و گون گو دیگرین مزایان .",
+ "anonpreviewwarning": "<em>شما لوگین نه بوته ئیت. ذخیره کورتین باعث ئه بیئت که شمی آی پی ادرس بی ای تاکدیمی تاریخچه ئی تا ثبت بیئت.</em>",
+ "missingcommenttext": "مهربانی بکنیت جهلگا توضیح دهیت.",
+ "summary-preview": "دیم دیست ئی خلاصه:",
+ "subject-preview": "موضو ئی دیم دیست/ئنوان:",
+ "blockedtitle": "کار زوروک بسته بوته",
+ "blockednoreason": "دلیلی مشخص نه بوته",
+ "whitelistedittext": "په مقاله ئانی ایڈیٹ ئا باید $1.",
+ "nosuchsectiontitle": "ایرنگی بخشئ ودئ نه بوت",
+ "loginreqtitle": "لوگین بوتین ضروری اینت",
+ "loginreqlink": "داخل بوتین",
+ "loginreqpagetext": "په دیگه تاکدیمانئ دیستینا باید $1.",
+ "accmailtitle": "پاسورد دیم داته بوت.",
+ "newarticle": "(نوکین)",
+ "noarticletext": "ای تاکدیم همی انون هیچ متنئ نداریت .\nشما ئه توانیت که بئ دیگه تاکدیمانئ [[Special:Search/{{PAGENAME}}|ای تاکدیمی ئنوانا بگردیت]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} مربوطین سیاه چال ئا هم بگردیت ]،\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} ای تاکدیما ایڈیٹ بکنیت]</span>.",
+ "noarticletext-nopermission": "ای تاکدیم همی انون هیچ متنی نداریت.\nشما ئه توانیت که دیگه تاکدیمانئ تا [[Special:Search/{{PAGENAME}}|ای ئنوانئ پدا بگردیت ]]،\nیا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} مرتبطین سیاه چال ئانئ پدا بگردیت ]</span> ولی شما په ای تاکدیمئ جوڑ کورتینا اجازه نداریت.",
+ "missing-revision": "#$1 ئی ایڈیٹ شه «{{FULLPAGENAME}}» ئی تاکدیما موجود نه اینت.\n\nمعمولاً بئ اثر لینک بئ تاریخچهٔ ئا اپڈیٹ نه بوته و تاکدیم پاک بوته.\nتوانیت ایدت مئلومات بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال ئی] تا بگیندیت.",
+ "userpage-userdoesnotexist": "«<nowiki>$1</nowiki>» ئی کار زوروکین حساب راجستر نه بوته.\nمهربانی بکنیت مطمائین بئیت که لوٹیت ای تاکدیما جوڑ یا ایڈیٹ بکنیت.",
+ "userpage-userdoesnotexist-view": "«$1» ئی کار زوروکین حساب راجستر نه بوته.",
+ "blocked-notice-logextract": "ای کار زوروکئ دسترسی بی انونین وختا بسته بوته.\nآخرین مورد شه دسترسی ئی سیستین به جهلگا آته:",
+ "clearyourcache": "<strong>نکته:</strong> پد شه تغیراتان شاید په دیستینا ضرورت بیئت که بروزیزی نهانی ئین حافظه ئا پاک بکنیت.\n*<strong>په فایرفاکس / سافاری:</strong> خاتیرا <em>Shift</em> کیلی ئانه بساتیت و <em>Reload</em> دکمه ئی سرا کلیک بکینت، یا <em>Ctrl-F5</em> کیلی ئانه یا <em>Ctrl-R</em> ئا یکجا پرینچیت (بئ اپل مکینتاش ئی کامپیوتراني تا <em>⌘-R</em>) کیلی ئانه\n*<strong>گوگل کروم:</strong> خاتیرا <em>Ctrl+Shift+R</em> کیلی ئانه گو وت یکجا پرینچیت (بئ اپل مکینتاش ئی کامپیوتراني تا <em>⌘-Shift-R</em>) کیلی ئانه\n*<strong>اینترنت اکسپلورر:</strong> خاتیرا <em>Ctrl</em> کیلی ئانه بساتیت و بئ <em>Refresh</em> دکمه یا کوچکئ سرا کلیک بکینت، <em>Ctrl-F5</em> ئی کیلی ئانه گو وت یکجا پرینچیت\n*<strong>اپرا:</strong> بروزیری نهانی ئین حافظهٔ ئا شه <em>Tools &rarr; Preferences</em> ئی مینوی طریقه پاک بکینت",
+ "usercssyoucanpreview": "'''نکته:''' پد شه وتئ سی‌اس‌اس ئی فایلی ذخیره کورتینا، گو '''{{int:showpreview}}''' ئی دکمه ئا آیرا امتحان بکنیت .",
+ "userjsyoucanpreview": "'''نکته:''' پد شه وتئ جاوااسکریپت ئی ذخیره کورتینا،گو '''{{int:showpreview}}''' ئی دکمه ئا آیرا امتحان بکنیت.",
+ "usercsspreview": "'''شه هوشا بورته ایت که شما فقط وتئ کار زوروکئ سی اس اس ئی دیم دیست ئا گیندیت.'''\n'''ای سی‌اس‌اس تا انون ذخیره نه بوته!'''",
+ "sitecsspreview": "'''شه هوشا مه بَریت که شما فقط وتئ کار زوروکئ سی اس اس ئی دیم دیست ئا گیندیت.'''\n'''ای سی‌اس‌اس تا انون ذخیره نه بوته!'''",
+ "sitejspreview": "'''شه هوشا مه بَریت که شما فقط جاوااسکریپت ئی دیم دیست ئا گیندیت.'''\n'''ای جاوااسکریپت تا انون ذخیره نه بوته!'''",
+ "updated": "(نوک بوته ئین)",
+ "note": "'''نکته:'''",
+ "previewnote": "'''بئ هوش ئا داشته بیئت که ای په قت دیم اینت.'''\nشمی تغیرات تا انون زه خیره نه بوته انت!",
+ "continue-editing": "شوتین بی ایڈ\tیٹ\tی نیمگا",
+ "editing": "بی ایڈ\tیٹ\t کورتینی حالا $1",
+ "creating": "بی جوڑ کورتینی حالا $1",
+ "editingsection": "بئ $1 ئی ایڈیٹ کورتینئ حالا (بخش)",
+ "editingcomment": "بئ $1 ئی ایڈیٹ کورتینئ حالا (نوکین بخش)",
+ "editconflict": "هجومین ایڈیٹ: $1",
+ "yourtext": "شمی متن",
+ "storedversion": "ذخیره بوته ئین نخسه",
+ "yourdiff": "تفاوت‌هان",
+ "templatesused": "{{PLURAL:$1|تراشوان|تراشوانان}} استفاده بوته انت بی ای تاکدیمئ تا:",
+ "templatesusedpreview": "ای دیم دیست ئی تا استفاده بوته ئین {{PLURAL:$1|تراشوان|تراشوانان}} :",
+ "templatesusedsection": "ای بخش ئی تا استفاده بوته ئین {{PLURAL:$1|تراشوان|تراشوانان}} :",
+ "template-protected": "(قُلپ بوته)",
+ "template-semiprotected": "(نیمه‌ گ قُلپ بوته)",
+ "hiddencategories": "ای تاکدیم بی {{PLURAL:$1|یک چیهرین تهر|$1 چیهرین تهر}} تا قرار داریت:",
+ "nocreate-loggedin": "شما نوکین دیم ئی جۆڑ کورتین ئی اجازه ئا نداریت.",
+ "sectioneditnotsupported-title": "بخش ئانی ایڈیٹ پشتیوانی ئه نه بیئنت",
+ "sectioneditnotsupported-text": "ای تاکدیم شه بخشانی ایڈیٹ ئا پُشتوانی ئه نه کنت.",
+ "permissionserrors": "دسترسی ئی خطا",
+ "permissionserrorstext": "شما ای کارئ اجازه ئا په ای {{PLURAL:$1|دلیلا|دلیلان}} نداریت:",
+ "permissionserrorstext-withaction": "شما اجازهٔ $2 ئا بی ای {{PLURAL:$1|دلیلا|دلیلان}} نداریت:",
+ "recreate-moveddeleted-warn": "<strong>هشدار: شما یک تاکدیمی ئا جوڑ\t ئه کنیت که دیمتیرا پاک کورته بوته.</strong>\n\nبی نظر داشته بئیت که آیا ایڈ\tیٹ ای تاکدیمی جوانین کاری است یانه.\nای تاکدیمی پاک بوتینئ و انتقالئ کورم ئا جهلگا توانیت بگیندیت:",
+ "moveddeleted-notice": "ای تاکدیم پاک بوته.\nای تاکدیمی پاک بوتینئ و انتقالئ کورم ئا جهلگا توانیت بگیندیت.",
+ "log-fulllog": "دیستین کامیلین کورمئ",
+ "edit-hook-aborted": "ایڈیٹ شه قلاب ئی نیمگاه لغو بوت.\nبی ای باره ئا هیچ توضیحی داته نه بوته.",
+ "edit-gone-missing": "اپڈیٹ ئی امکان وجود نداریت.\nبی نظر ئه رسیت که تاکدیم پاک بوته.",
+ "edit-conflict": "هجومئ ایڈیٹ\t.",
+ "edit-no-change": "شمی ایڈیٹ مهم گیپته نه بوته، بی خاتیریکه متنئ تا هیچ تغیرئ داته نه بوتتت.",
+ "postedit-confirmation-created": "ای تاکدیم جوڑ بوته.",
+ "postedit-confirmation-restored": "ای تاکدیم بیئرگردینته بوته.",
+ "postedit-confirmation-saved": "شمی ایڈ\tیٹ ذخیره بوت.",
+ "edit-already-exists": "نوکین تاکدیمئ جوڑ کورتین امکان نه داریت.\nای تاکدیم شه دیما وجود داشتت.",
+ "defaultmessagetext": "پیامی پیش فرضین متن",
+ "content-failed-to-parse": "$2 مهتوایی تجزیه کار نه کورت په $1 مدل ئا: $3",
+ "invalid-content-data": "ناموتبرین دیتایی کانتکت",
+ "content-not-allowed-here": "«$1» ئی محتوا بئ [[$2]] ئی دیمی تا جایز نه اینت",
+ "editwarning-warning": "شه ای دیما دَر بوتین ممکن اینت که هر آنچه که شما بوجود آورته ئیت آوانا شه دست ب دهیت.\nاگر شما سایٹ ئی داخل بوته ئیت، توانیت که ای هشدار ئا بئ تنزیماتانی «{{int:prefs-editing}}» ئی بخشی تا بند کنیت .",
+ "editpage-notsupportedcontentformat-title": "پشتیوانی نه بوته ئین دیتا کانتکت ئی فورمت کورتین",
+ "editpage-notsupportedcontentformat-text": "$1 ئی مهتوائین پورمت گۆ $2 ئی مهتوائین مدل ئا پُشتیوانی نه بوته انت.",
+ "content-model-wikitext": "ویکی‌متن",
+ "content-model-text": "ساده گین متن",
+ "content-model-javascript": "جاوااسکریپت",
+ "content-json-empty-object": "خالین چیز",
+ "content-json-empty-array": "خالین صف",
+ "duplicate-args-category": "تاکدیمان گو تکرارین آرگومینتان بی تراشونئ لوٹیتنا",
+ "duplicate-args-category-desc": "تاکدیمان که تکرارین آرگومینت دارنت ، چو <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> یا <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+ "expensive-parserfunction-warning": "'''هشدار:''' ای تاکدیم باز تجزیه گرین فراخوانئ دستور داریت .\n\nآوانئ اندازه گ باید کمتر شه $2 {{PLURAL:$2|لوٹیتین|لوٹیتین}} ئا بیئت، و اینک {{PLURAL:$1|$1 لوٹیتین|$1 لوٹیتین}} اینت.",
+ "expensive-parserfunction-category": "تاکدیمان که باز سکین تجزیه گرین فراخوانئ دستور دارنت",
+ "post-expand-template-inclusion-warning": "هشدار: تراشوان بی شه اندزه ئا ٹوو اینت.\nبرخی شه تراشوانان شاید شامل مه بیئنت.",
+ "post-expand-template-inclusion-category": "آ تاکدیمان که آوانئ تا تراشوانانئ اندزه گ شه حد ئا گیشتیر اینت.",
+ "post-expand-template-argument-warning": "'''هشدار:''' ای تاکدیم یک تراشوانئ پارامیتر اینت که شه اندازه ئا ٹوو.\nای پارامیتران نادیسته گیپته بوتنت.",
+ "post-expand-template-argument-category": "تاکدیمان که حاوی تراشوانان گو پارامیتران نادیده گیپته بوته انت",
+ "parser-template-loop-warning": "حلقه بی تراشوان ئا تا ودی نه بوت: [[$1]]",
+ "parser-template-recursion-depth-warning": "تراشوانئ بیئرگشتی عمق رد بوت ($1)",
+ "language-converter-depth-warning": "مبدل زبانی ئی محدودیت عمق رد بوت ($1)",
+ "node-count-exceeded-category": "تاکدیمان که شه حداکثر گروپ ئا تجاوز کورته انت",
+ "node-count-exceeded-category-desc": "ای تاکدیم شه حداکثر پرابلمان گیشتیر بوته",
+ "node-count-exceeded-warning": "تاکدیم شه حداکثر گرینان گیشتیر بوته",
+ "expansion-depth-exceeded-category": "تاکدیمان که شه حداکثر بسط داتین عمق ئا تجاوز کورته انت",
+ "expansion-depth-exceeded-category-desc": "تاکدیم که که آیی پراخئ جُهلئ شه اندازه گ ئا گیشتیر بوته.",
+ "expansion-depth-exceeded-warning": "تاکدیم شه حداکثر بسط داتین عمق ئا تجاوز کورت",
+ "parser-unstrip-loop-warning": "حلقه بی دستور unstrip ئی تا ودی نه بوت",
+ "parser-unstrip-recursion-limit": "شه حداکثر ارجاع بئ دستور unstrip ئی تا تجاوز بوت ($1)",
+ "converter-manual-rule-error": "خطا بئ زانئ دستی ئین بدل کورتینی قوانین ئی تا",
+ "undo-success": "ای ایڈیٹ ئا توانیت شه بین بَریت.\nمهربانی بکنیت جهلگی فرق ئا بگنیدیت و قبول بکنیت که آ چیزی است که شما ئه لوٹیت انجام دهیت،پدا جهلگئ تغیراتانا ذخیره بکنیت تا که ایڈیٹ ئی شه بین بورتینئ کار الاس بکنیت.",
+ "undo-failure": "ایڈیٹ ئا نتوانتیت شه بین بَریت، بی خاتیرئ بعضی تعرض ئان یا میانئ ئین ایڈیٹان.",
+ "undo-norev": "ای ایڈیٹ ئا نتوانتیت شه بین بَریت بخاتیریکه یا اصلان وجود نداریت یا که پاک بوته.",
+ "undo-nochange": "بئ نظر ئه رسیئت که ایڈیٹ بیئرگردینته بوته.",
+ "undo-summary": " $1 ئی ایڈیٹ شه [[Special:Contributions/$2|$2]] ([[User talk:$2|حبر و گپ]]) نیمگا شه بَیْن بورته بوت",
+ "undo-summary-username-hidden": " $1 نخسه ئی شه بین بورتین بی یک کار زوروکئ دستا چیهر بوته",
+ "cantcreateaccounttitle": "نه توانیت حسابئ پاچ کنیت",
+ "cantcreateaccount-text": "کار زوروکئ هیساب ئی جۆڑ کورتین ئی هه ق گۆ ای آی‌پی ('''$1''') ادرس ئا، شه [[User:$3|$3]] نیمگا گیپته بوته.\n\nشه $3 ئی نیمگا دلیل ایرنگ بیان بوته: $2",
+ "viewpagelogs": "ای تاکدیمئ سیاه چال ئی دیستین",
+ "nohistory": "ای تاکدیم ایڈیٹ ئی تاریخچه نداریت.",
+ "currentrev": "انونین نخسه یی نشان داتین",
+ "currentrev-asof": "انونین نسخه تا $1",
+ "revisionasof": "نسخهٔ $1",
+ "revision-info": "تاریخ $1 نسخه بی واسطه {{GENDER:$6|$2}}$7",
+ "previousrevision": "→ قدیمین نخسه",
+ "nextrevision": "نوکین نخسه ←",
+ "currentrevisionlink": "انونین نخسه یی نشان داتین",
+ "cur": "فعلی",
+ "next": "بعدی",
+ "last": "دیمتیرین",
+ "page_first": "اولین",
+ "page_last": "آخیرین",
+ "history-fieldset-title": "تاریخچه ئی مرور کورتین",
+ "history-show-deleted": "فقط پاک بوته ئین",
+ "histfirst": "کهنگتیرین",
+ "histlast": "نوکتیرین",
+ "historysize": "({{PLURAL:$1|۱ بایٹ|$1 بایٹ}})",
+ "historyempty": "(خالی)",
+ "history-feed-title": "ایڈ\tیٹانئ دپتر یا تاریخچه گ",
+ "history-feed-description": "ای تاکدیمی ایڈیٹ ئی تاریخچه بئ ویکی ئی تا",
+ "history-feed-item-nocomment": "$1 بی $2",
+ "history-feed-empty": "لۆٹیته بوته ئین دیم موجود نه اینت.\nممکن اینت که شه ویکی ئی تا پاک بوته بیئت یا که نامی تغیر بوته.\nنوکین تاکدیمانا په مربوتین موریدان بئ ای ویکی ئی تا [[Special:Search|بگردیت]].",
+ "rev-deleted-comment": "(ایڈیٹ ئی خلاصه پاک بوت)",
+ "rev-deleted-user": "(کار زوروکین نام پاک بوت)",
+ "rev-deleted-event": "(سیاه چال ئی جزئیات پاک بوته انت)",
+ "rev-deleted-user-contribs": "[کار زوروکئ نام یا آی پی ادرس پاک بوته - چیهر بوته ئین ایڈیٹ بئ مشارکتانئ تا]",
+ "rev-deleted-text-permission": "ای ایڈیٹ شه ای تاکدیما '''پاک بوته'''.\nممکن اینت آیی باره ها مئلومات بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال] ئی تا موجود بیئت.",
+ "rev-suppressed-text-permission": "ای ایڈیٹ شه ای تاکدیما '''پاک بوته'''.\nشما توانیت آیرا بگیندیت؛ ممکن اینت آی باره ئا مئلومات بئ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال] ئی تا موجود بیئت.",
+ "rev-deleted-text-unhide": "ای دستکاری شه ای دیما '''پاک بوته'''.\nممکن اینت که آیی مربوتین مه لوماتانا بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئانی سیاهه] ئی تا موجود به ینت.\nشما اگه لوتیته به ییت توانیت که [ای نخسه ئی $1 ئا بگیندیت ].",
+ "rev-deleted-text-view": "ای ایڈیٹ شه ای تاکدیما '''پاک بوته'''.\nشما توانیت آیرا بگیندیت؛ ممکن اینت آیی مربوتین مئلوماتانا بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال ] تا ودئ بکنیت.",
+ "rev-delundel": "نمایش/نهفتن",
+ "rev-showdeleted": "نشان داتین",
+ "revisiondelete": "پاک کورتین/نخسه ئی پدا جۆڑ کورتین",
+ "revdelete-nooldid-title": "هدف ئی نامجازین نخسه",
+ "revdelete-no-file": "مشخص بوته ئین فایل موجود نه اینت.",
+ "revdelete-show-file-confirm": "آیا شما مطمئن وێت که لوٹیت یک پاک بوته ئین نخسه شه فایل \"<nowiki>$1</nowiki>\" مورخ $2 سائت $3 ئا بگیندیت؟",
+ "revdelete-show-file-submit": "هان",
+ "revdelete-selected-text": "{{PLURAL:$1|انتخاب بوته ئین نخسه هان|انتخابین نخسه هان}} [[:$2]]:",
+ "revdelete-selected-file": "{{PLURAL:$1|انتخاب بوته ئین نخسه|انتخابین نخسه}} [[:$2]]:",
+ "logdelete-selected": "شه سیاه چال ئا {{PLURAL:$1|مورد|مورد هان}} انتخاب بوته:",
+ "revdelete-text-others": "دیگه مدیرهان تا انون هم ئه تواننت که چیهرین محتواهانه بگیندینت و شه همی راه ئا تواننت پاک بوته ئین مواردانا بیئرگردیننت، مگر ای که دیگه محدودیت ئی آته بیئت.",
+ "revdelete-legend": "پیدای ئین محدودیت ئانی تنظیم",
+ "revdelete-hide-text": "نخسه ئی متن",
+ "revdelete-hide-image": "فایلی محتویاتانئ چیهرداتین",
+ "revdelete-hide-name": "چیهر داتین متغیر هانی و هدف",
+ "revdelete-hide-comment": "ایڈیٹانی خلاصه",
+ "revdelete-hide-user": "کار زوروکئ نام/آی‌پی ادرس",
+ "revdelete-hide-restricted": "مئلوماتئ سرکوب په مدیران گو دیگران لۆڑ",
+ "revdelete-radio-same": "(بی شه تغیر ئا)",
+ "revdelete-radio-set": "چیهر داتین",
+ "revdelete-radio-unset": "نمایان",
+ "revdelete-suppress": "مدیرانئ دسترسی په دتا ئا چو دیگه کار زوروکان بسته بیئت.",
+ "revdelete-unsuppress": "محدودیتانئ پاک بوتین بئ پدا دیستین ئی تا ترمیم بوته",
+ "revdelete-log": "دلیل:",
+ "revdelete-submit": "اعمال بئ {{PLURAL:$1|نخسه|نخسه هان}} ئی سرا انتخاب بوته",
+ "revdelete-success": "'''نخسه ئی ودی بوتین گو کامیابیا اپڈیٹ بوت.'''",
+ "revdelete-failure": "'''نخسه ئی ودی بوتینئ اپڈیٹ بوتن امکان وجود نداریت :'''\n$1",
+ "logdelete-success": "<strong>لوگین ئی قابلیت دیست گو کامیابیا انجام بوت.</strong>",
+ "logdelete-failure": "'''لوگین ئی قابلیت دیست تنظیم ئه نه بیئنت:'''\n$1",
+ "revdel-restore": "نمایش/نهفتن",
+ "pagehist": "تاکدیمی تاریخچه",
+ "deletedhist": "پاک بوتگینانی تاریخچه",
+ "revdelete-no-change": "'''هشدار:''' $2 تاریخ ئی و سائت $1 مورد شه دیما پیدائین ریکویست ئی تنظیمات ئا داشت.",
+ "revdelete-otherreason": "دیگرین دلیل/اضافی:",
+ "revdelete-reasonotherlist": "دیگرین دلیل",
+ "revdelete-edit-reasonlist": "پاک بوتینئ دلیلانئ ایڈیٹ",
+ "revdelete-offender": "نخسه ئی نویسوک:",
+ "suppressionlog": "سیاه چالئ نادینتین",
+ "mergehistory": "تاکدیمانئ تاریخچه ئی ادغام",
+ "mergehistory-box": "دو تاکدیمئ نخسه ئانی ادغام:",
+ "mergehistory-from": "تاکدیمئ منشا:",
+ "mergehistory-into": "تاکدیمئ مخصد:",
+ "mergehistory-list": "قابل ادغامئ تاریخچه",
+ "mergehistory-go": "قابل ادغامئ تاریخچه ئی نشان داتین",
+ "mergehistory-submit": "نخسه ئانی ادغام",
+ "mergehistory-empty": "هیچ یک شه نخسه ئان ادغامی ئی وڈ نه ونت.",
+ "mergehistory-success": "$3 ئی نخسه شه [[:$1]] ئا گو کامیابیا بی [[:$2]] تا ادغام {{PLURAL:$3|بوت}}.",
+ "mergehistory-fail": "تاریخچه ئی ادغام ممکن نه اینت، مهربانی بکنیت تاکدیمئ گزینه ئانه و وختا بگیندیت.",
+ "mergehistory-no-source": " $1 منشائی تاکدیم موجود نه اینت.",
+ "mergehistory-no-destination": "$1 مخصدی تاکدیم موجود نه اینت .",
+ "mergehistory-invalid-source": "منشائی تاکدیم باید یک موتبرین ئنوان ئی داشته بیئت.",
+ "mergehistory-invalid-destination": "مخصدئ تاکدیم باید یک موتبرین ئنوان داشته بیئت",
+ "mergehistory-autocomment": "[[:$1]] ئا بی [[:$2]] ادغام کورت",
+ "mergehistory-comment": "[[:$1]] ئا بی [[:$2]] ادغام کورت: $3",
+ "mergehistory-same-destination": "منشاء و مخصد ئی تاکدیمان نه تواننت که یک رقم بیئنت",
+ "mergehistory-reason": "دلیل:",
+ "mergelog": "سیاههٔ ادغام",
+ "revertmerge": "ادغام ئی بیئرگشتینتین",
+ "history-title": "$1: ایڈیٹانی تاریخچه",
+ "difference-title": "$1: نخسه ئانی مانجینا فرق",
+ "difference-title-multipage": "$1 و $2:تاکدیمانئ مانجینی فرق",
+ "difference-multipage": "(تاکدیمانی مانجینا فرق)",
+ "lineno": "سطر $1:",
+ "compareselectedversions": "انتخاب بوته ئین نخسه ئانی مقایسه",
+ "showhideselectedversions": "انتخاب بوته ئین نخسه ئانی پدیداری تغیر",
+ "editundo": "خنثی‌ کورتین",
+ "diff-empty": "(بدون تفاوت)",
+ "diff-multi-sameuser": "(ای کار زوروکئ {{PLURAL:$1|یک میانی نخسه|$1 میانی نخسه}}ِ نمایش داته بوته)",
+ "searchresults": "گشتین ئی نتیجه",
+ "searchresults-title": "گشتینئ نتایج په «$1»",
+ "titlematches": "مقاله ئی ئنوانئ یکی کورتین",
+ "textmatches": "مقاله ئی متنئ یکی کورتین",
+ "notextmatches": "هیچ یک شه مقاله ئانی متن مطابقت ندارنت",
+ "prevn": "{{PLURAL:$1|$1}}دیمتیری",
+ "nextn": "{{PLURAL:$1|$1}}پدتیری",
+ "prevn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} دیمی",
+ "nextn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} پدئ",
+ "shown-title": "نشان داتین $1 ئی {{PLURAL:$1|نتیجه|نتیجه}} بی هر تاکدیمی تا",
+ "viewprevnext": "نشان داتین ($1 {{int:pipe-separator}} $2) ($3)",
+ "searchmenu-exists": "'''تاکدیمئ گو «[[:$1]]» ئی ئنوانا بی ای ویکی تا وجود داریت .'''",
+ "searchmenu-new": "<strong> «[[:$1]]» ئی تاکدیما بی ای ویکی تا جوڑ بکنیت!</strong> {{PLURAL:$2|0=همچنان آ تاکدیما کی گو وتئ گشتینا ودئ کورته ایت، بگیندیت.|و همچنان وتئ گشتینئ ودئ بوته ئین نتیجه ئانا بگیندیت.}}",
+ "searchprofile-articles": "تاکدیمانی محتوا",
+ "searchprofile-images": "چینکه رسانه ئی",
+ "searchprofile-everything": "موچی چیز",
+ "searchprofile-advanced": "پیشرفته",
+ "searchprofile-articles-tooltip": "گشتین بی $1",
+ "searchprofile-images-tooltip": "گشتین په فایلان",
+ "searchprofile-everything-tooltip": "گشتین په موچین محتوا ئان (شاملئ گپ ئی تاکدیمان)",
+ "searchprofile-advanced-tooltip": "گشتین بی فضای نام دلخواه",
+ "search-result-size": "$1 ({{PLURAL:$2|یک کلیمه|$2 کلیمه}})",
+ "search-redirect": "(تغییرمسیر $1)",
+ "search-section": "(بخش $1)",
+ "search-category": "(تهر $1)",
+ "search-file-match": "(فایلی محتوایی یکرنگی)",
+ "search-suggest": "آیا شمی منظور ایش ات: $1",
+ "search-interwiki-caption": "گوارین پروژه ئان",
+ "search-interwiki-default": "نتایج شه $1 :",
+ "search-interwiki-more": "(گیشتیر)",
+ "search-relatedarticle": "مرتبط",
+ "searchrelated": "مرتبط",
+ "searchall": "موچ",
+ "showingresults": "نشان داتین حداکثر {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} بی جهلگا، شرو شه شماره ئی '''$2'''.",
+ "showingresultsinrange": "نمایش بی جهلگا {{PLURAL:$1|<strong>1</strong> نتیجه|<strong>$1</strong> نتیجه}} بی محدودهٔ ئی #<strong>$2</strong> تا #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|نتیجه ئان <strong>$1</strong> شه <strong>$3</strong>|نتیجه ئان <strong>$1 - $2</strong> شه <strong>$3</strong>}}",
+ "search-nonefound": "نتیجه په چیزی که شما لوٹیته تیت بی دست نه یات.",
+ "powersearch-legend": "پیشرفته ئین گشتین",
+ "powersearch-ns": "گشتین بی نامئ فضائان:",
+ "powersearch-togglelabel": "چیک کورتین:",
+ "powersearch-toggleall": "موچ",
+ "powersearch-togglenone": "هیچ‌گوجام",
+ "powersearch-remember": "اتنخاب په دیگرین گشتین ئان بی خاتیر داشته بئیت",
+ "search-external": "خارجی ئین گشتین",
+ "searchdisabled": "گشتین بی {{SITENAME}} ئی تا فعال نه اینت.\nموقتاً توانیت شه Google ئی گردگ ئا استفاده کنیت.\nتوجه کنیت که بدست آته ئین نتایج شه گردگا بی آ ممکینین طریقه ئا مه بیئنت.",
+ "search-error": "یک خطایی بی گردگئ وختا رخ داته : $1",
+ "preferences": "تنظیمات",
+ "mypreferences": "تنظیمات",
+ "prefs-edits": "ایڈ\tیٹانی اندازه گ:",
+ "prefsnologintext2": "مهربانی بکنیت په وتئ تنظیماتانی ٹگل داتینا خاتیرا لوگین بئیت.",
+ "prefs-skin": "پوست",
+ "skin-preview": "دیم دیست",
+ "datedefault": "بی شه تنظیماتا",
+ "prefs-labs": "آزمایشی ئین ویژگی ئان",
+ "prefs-user-pages": "کار زوروکی تاکدیمان",
+ "prefs-personal": "کار زوروکی پروفایل",
+ "prefs-rc": "آخیرین تغیراتان",
+ "prefs-watchlist": "واچلیست",
+ "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-watchlist-edits": "شمی ایڈیٹانئ اندازه گ بئ واچلیست ئي تا پراخ بوته:",
+ "prefs-watchlist-edits-max": "حداکثر اندازه گ: ۱۰۰۰",
+ "prefs-watchlist-token": "واچلیستئ کوڈ:",
+ "prefs-misc": "متفرقه",
+ "prefs-resetpass": "پاسوردی تغیر داتین",
+ "prefs-changeemail": "ایمیل ادرسی تغیر داتین",
+ "prefs-setemail": "ایمیل ادرسی تنظیم کورتین",
+ "prefs-email": "ایملی آپشن ئان",
+ "prefs-rendering": "نمایشی تاکدیم",
+ "saveprefs": "ذخیره",
+ "restoreprefs": "بیر گردینتین موچین تنظیمان بی اولی ئین رقما",
+ "prefs-editing": "ایڈیٹ کورتین",
+ "rows": "تعداد سطرها:",
+ "columns": "تعداد ستون‌ها:",
+ "searchresultshead": "گشتین",
+ "stub-threshold": "ایڈیٹانئ لینک <a href=\"#\" class=\"stub\">ناقص</a> (بایٹ):",
+ "stub-threshold-disabled": "غیرفعال",
+ "recentchangesdays": "روچانی اندازه گ بئ آخیر ئین تغیراتانئ تا نشان داته بوته انت:",
+ "recentchangesdays-max": "حداکثر $1 {{PLURAL:$1|روچ}}",
+ "recentchangescount": "پیش پرزین نشان داته بوته ئین ایڈیٹ ئانی اندازه گ:",
+ "prefs-help-recentchangescount": "ای شامیل آخیرئین تغیرانی،تاکدیمانی تاریخچه ئی و سیاهه ئانی است.",
+ "savedprefs": "شمی تنظیمات ذخیره بوتنت.",
+ "timezonelegend": "منطقهٔ زمانی:",
+ "localtime": "محلی ئن وخت:",
+ "timezoneuseserverdefault": "استفاده شه پیش‌فرض ئین ویکی ($1)",
+ "timezoneuseoffset": "دیگر (اختلاف ئا مشخص کنیت)",
+ "servertime": "سرور ئی وخت:",
+ "guesstimezone": "شه بروزیر ئه گیپته بیئت",
+ "timezoneregion-africa": "آفریقا",
+ "timezoneregion-america": "آمریکا",
+ "timezoneregion-antarctica": "جنوبی ئین قطب",
+ "timezoneregion-arctic": "قطب شمالی",
+ "timezoneregion-asia": "آسیا",
+ "timezoneregion-atlantic": "بحر اتلانتیک",
+ "timezoneregion-australia": "استرالیا",
+ "timezoneregion-europe": "اروپا",
+ "timezoneregion-indian": "بحر هند",
+ "timezoneregion-pacific": "بحر آرام",
+ "allowemail": "آتین ایملئ شه دیگه کار زوروکان",
+ "prefs-searchoptions": "گشتین",
+ "prefs-namespaces": "نامانی فضاهان",
+ "default": "پیش‌فرض",
+ "prefs-files": "فایل ئان",
+ "prefs-custom-css": "سی‌اس‌اس شخصی",
+ "prefs-custom-js": "شخصی ئین جاوااسکریپت",
+ "prefs-common-css-js": "سی‌اس‌اس/جاوااسکریپت مشترک په موچین پوسته‌ئان:",
+ "prefs-emailconfirm-label": "ایمیلئ تائید کورتین:",
+ "youremail": "ایمیل:",
+ "username": "{{GENDER:$1|کار زوروکئ نام}}:",
+ "prefs-memberingroups": "{{GENDER:$2|عضو}} {{PLURAL:$1|گروپ|گروپ}}:",
+ "prefs-registration": "راجیسترئ وخت",
+ "yourrealname": "واقیئین نام:",
+ "yourlanguage": "زبان:",
+ "yourvariant": "گوشتین محتوائی زبانی:",
+ "yournick": "نوکین دستنام:",
+ "prefs-help-signature": "نیوشته بوته ئین نظرئان باید بی گپ و حبر ئی تاکدیمئ تا گو «<nowiki>~~~~</nowiki>» ئا دستنام یا امضا بیئنت ؛ ای علامت بی اوتوماتیکین رقما بی شمی دستنام یا امضا آ و تاریخ آ بدل ئه بیت.",
+ "badsig": "حامگین یا خرابین دستنام یا امضا.\nمهربانی بکنیت اچ‌تی‌ام‌ال ئا بگیندیت.",
+ "badsiglength": "شمی دستنام شه اندازه ئا مزن و تچک اینت.\nدستنام باید کمتر شه $1 {{PLURAL:$1|نویسه}} ئا طول داشته بیئت.",
+ "yourgender": "لوٹیت که شما را چون بزاننت؟",
+ "gender-unknown": "لوٹین که هیچ ئی مه گوشین",
+ "gender-male": "مردینزاگ",
+ "gender-female": "جنینزاگ",
+ "email": "ایمیل",
+ "prefs-help-realname": "واقئین نام اختیاری اینت.\nاگه وتئ واقئین ناما بنوسیت ممکن اینت شه شمی کار و خدمتان ئی نام گیپتینی وختا شه شمی واقئین ناما استفاده بیئت.",
+ "prefs-help-email-required": "ایمیل ادرس ضروری اینت.",
+ "prefs-info": "بُنادین مئلومات",
+ "prefs-i18n": "بین المللی کورتین",
+ "prefs-signature": "دست خط",
+ "prefs-dateformat": "تاریخ فورمت",
+ "prefs-timeoffset": "وختی فاصله",
+ "prefs-advancedediting": "ئمومین تنظیمات",
+ "prefs-editor": "ایڈیٹور",
+ "prefs-preview": "دیم دیست",
+ "prefs-advancedrc": "پیشرفته ئین کیلی ئان",
+ "prefs-advancedrendering": "پیشرفته ئین کیلی ئان",
+ "prefs-advancedsearchoptions": "پیشرفته ئین کیلی ئان",
+ "prefs-advancedwatchlist": "پیشرفته ئین کیلی ئان",
+ "prefs-displayrc": "نمایش ئین کیلی ئان",
+ "prefs-displaywatchlist": "نمایش ئین کیلی ئان",
+ "prefs-tokenwatchlist": "نشانه گ",
+ "prefs-diffs": "تفاوت‌ئان",
+ "prefs-help-prefershttps": "ای تنظیمی تاثیر پد شه لوگین بوتینا بی شما اعمال ئه بیئت.",
+ "prefswarning-warning": "شمی تغیرات بی تنظیماتانی تا تا انون ذخیره نه بوته انت.\nاگه ای تاکدیما بي شه کلیک کورتین به «$1» ئا بیلیئت شمی تنظیمات ذخیره ئه نه بیئنت.",
+ "email-address-validity-valid": "شمی ایمیلئ ادرس موتبر بی نظر ئه رسیت",
+ "email-address-validity-invalid": "موتبرین ایمیل ادرسی داخل بکنیت",
+ "userrights": "کار گیروکی اختیارانی مدیریت",
+ "userrights-lookup-user": "کار گیروکی گروپانی مدیریت",
+ "userrights-user-editname": "کار زوروکین ناما داخل بکنیت:",
+ "editusergroup": "کار زوروکی گروپانی ایڈیٹ",
+ "editinguser": "کار زوروکئ اختیارانی تغییر '''[[User:$1|$1]]''' $2",
+ "userrights-editusergroup": "کار زوروکی گروپانی ایڈیٹ",
+ "saveusergroups": "کار زوروکی گروپانی ثبت کورتین",
+ "userrights-groupsmember": "عضو:",
+ "userrights-groupsmember-auto": "ضمنی ئین عضو:",
+ "userrights-reason": "دلیل:",
+ "userrights-no-interwiki": "شما دیگه ویکی هانی کار زوروکانئ اختیارانی تغیر داتینی اجازه ئا نداریت.",
+ "userrights-nodatabase": " $1 مئلوماتئ بانک وجود نداریت یا محلی نه اینت.",
+ "userrights-nologin": "شما باید گو یک مدیرئی [[Special:UserLogin|کار زوروکین حسابا لوگین بیئیت]] تا که بتوانیت دیگه کار زوروکانئ اختیارانا تعین بکنیت.",
+ "userrights-notallowed": "شما په کار زوروکئ حقوق ئی پاک کورتین یا افاضه کورتینی اجازه ئه نداریت.",
+ "userrights-changeable-col": "ئا گروپان که شما توانیت آوانا ٹگل بدهیت",
+ "userrights-unchangeable-col": "ئا گروپان که شما نتوانیت آوانا ٹگل بدهیت",
+ "userrights-conflict": "حمله بئ کار زوروکئ حقان! مهربانی بکنیت بگیندیت و تغیرانا تائید بکنیت.",
+ "userrights-removed-self": "شما وتئ دسترسی ئانه سیستیت. انون شما دیگه بئ ای تاکدیما دسترسی نداریت.",
+ "group": "گروپ:",
+ "group-user": "کار زوروکان",
+ "group-autoconfirmed": "تائید بُوته ئین کار زوروکان",
+ "group-bot": "ربات‌هان",
+ "group-sysop": "مدیر ئان",
+ "group-bureaucrat": "دیوان‌سالار ئان",
+ "group-suppress": "گیندوک ئان",
+ "group-all": "(موچ)",
+ "group-user-member": "{{GENDER:$1|کار زوروک}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|تائید بَوته ئین کار زوروک}}",
+ "group-bot-member": "ربات",
+ "group-sysop-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-bureaucrat": "{{ns:project}}:دیوان‌سالار ئان",
+ "grouppage-suppress": "{{ns:project}}:نظارت",
+ "right-read": "وانتین تاکدیمی",
+ "right-edit": "ایڈ\tیٹ کورتین تاکدیمی",
+ "right-createpage": "تاکدیمی جوڑ\t کورتین (بی غیر گپ ئین موردی تاکدیمان )",
+ "right-createtalk": "گپ ئی تاکدیمی جوڑ\t کورتین",
+ "right-createaccount": "کار زوروکئ حسابئ جوڑ\t کورتین",
+ "right-minoredit": "نشانی کورتین ایڈیٹانی بئ ئنوان کم ئین",
+ "right-move": "تاکدیمی انتقال",
+ "right-move-subpages": "تاکدیمانئ انتقال گو آوان گونڈدیم ئان",
+ "right-move-rootuserpages": "کار زوروکین سرشاخه ئین تاکدیمانئ انتقال",
+ "right-move-categorypages": "تهر تاکدیمئ انتکال",
+ "right-movefile": "فایلی انتقال",
+ "right-suppressredirect": "تاکدیمئ انتقال بیدون شه دیمین نامی تغیرمسیر ئی جوڑ کورتین",
+ "right-upload": "فایلی بُرز کورتین",
+ "right-reupload": "پدا نیویشتین موجودین فایلئ",
+ "right-reupload-own": "آ فایلی پدا بُرز کورتین که دیمتیرا هم شه هما کار زوروکی نیمگا یک وار بُرز بوتت",
+ "right-reupload-shared": "مشترکین فایلانئ محلی ئین باطل کورتین",
+ "right-upload_by_url": "یک فایلئ بُرز کورتین یا اپلوڈ شه اینٹرنٹ ئا",
+ "right-purge": "میانگیرین تاکدیمی پاک کورتین بی شه تائیدی تاکدیمی دیستینا",
+ "right-autoconfirmed": "شه آی پی ئی محدودیت تیزی ئا محور تاسیر ئه نه گیت",
+ "right-bot": "تلقی بوته بئ ئنوان اوتوماتیکین پروسه ئا",
+ "right-nominornewtalk": "گپ و حبر ئی تاکدیمانی گونڈ ایڈیٹ ، بئ رکمی که نوکین پیام ئا جار مه جنت",
+ "right-apihighlimits": "بُرز تیرین سقف استفاده شه API",
+ "right-writeapi": "استفاده شه نیویشتینی API",
+ "right-delete": "تاکدیمی پاک کورتین",
+ "right-bigdelete": "ٹوهین تاریخچه والا ئین تاکدیمانئ پاک کورتین",
+ "right-deletelogentry": "پاک کورتین و پداجۆڑ کورتین خاصین دروچه شه سیاهه ئان",
+ "right-deleterevision": "پاک کورتین و پدا جۆڑ کورتین خاصین نخسه ئان شه تاکدیما",
+ "right-deletedhistory": "شه تاریخچه ئا پاک بوته ئین مواریدانی دیستین، بیدون شه آوانی متنی دستینا",
+ "right-deletedtext": "دیستین پاک بوته ئین متن ئان و تغیر ئان پاک بوته ئین نخسه ئانی مانجینا",
+ "right-browsearchive": "گشتین په پاک بوته ئین تاکدیمان",
+ "right-undelete": "بی جاه آورتین تاکدیمانئ",
+ "right-suppressrevision": "دیستین و پداجۆڑ کورتین آ ایڈیٹانی که شه کار زوروکان چیهر داته بوته انت",
+ "right-viewsuppressed": "آ نخسه هانی دیستین که شه کار زوروکان چیهر داته بوته انت",
+ "right-suppressionlog": "دیستین شخصین سیاه چال ئانی",
+ "right-block": "دیگه کار زوروکانئ بلاک کورتین شه ایڈیٹ ئان",
+ "right-blockemail": "دیگه کار زوروکانئ بلاک کورتین شه ایمیل ئی دیم داتین ئا",
+ "right-hideuser": "کار زوروکئ بلاک کورتین و چیهر داتین شه عمومی ئی دیدا",
+ "right-ipblock-exempt": "تاسیر نه گیپتین شه آی پی ئین بلاک ئی ، وتکارین یا پاسیله ئین بلاکان",
+ "right-proxyunbannable": "تاسیر نه گیپتین شه وتکارین پروکسی ئی بلاک بوتین ئان",
+ "right-unblockself": "وتي دسترسی ئی پاچ کورتین",
+ "right-protect": "قُلپ بوته تاکدیمانئ قلپی میزانی تغیر داتین و آوانی ایڈیٹ کورتین",
+ "right-editprotected": "ایڈیٹ کورتین قُلپ بوته ئین تاکدیمانی بئ ئنوانئ «{{int:protect-level-sysop}}»",
+ "right-editsemiprotected": "ایڈیٹ کورتین قُلپ بوته ئین تاکدیمانی بئ ئنوانی \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "یک تاکدیمی محتوایی مدل یی ایڈیٹ کورتین",
+ "right-editinterface": "ای\tڈیٹ کورتین کار زوروکانئ رابطه",
+ "right-editusercssjs": "ایڈیٹ کورتین دیگه کار زوروکانئ CSS و JS ئی تاکدیمانئ",
+ "right-editusercss": "ایڈیٹ کورتین دیگه کار زوروکانئ CSS ئی تاکدیمانئ",
+ "right-edituserjs": "ایڈیٹ کورتین دیگه کار زوروکانئ JS ئی تاکدیمانئ",
+ "right-editmyusercss": "وتئ سی‌اس‌اس کار زوروکئ فایلانا ایڈیٹ بکینت",
+ "right-editmyuserjs": "وتئ جاوااسکریپت کار زوروکي فایلانا ایڈیٹ بکنیت",
+ "right-viewmywatchlist": "وتئ واچلیست ئا بگیندیت",
+ "right-viewmyprivateinfo": "وتي خصوصین دیتا ئه بگیندیت (چو ایمیل و واقئین ناما)",
+ "right-editmyprivateinfo": "وتي حصوثین دیتا ئه ایڈیٹ بکنیت (چو ایمیل و واقئین ناما)",
+ "right-editmyoptions": "وتئ تنظیماتانا ایڈیٹ بکنیت",
+ "right-rollback": "عاجل ئین بیئرگردینتین آخیر ئین کار زوروکئ ایڈیٹانئ که ای تاکدیما ایڈیٹ کورته",
+ "right-markbotedits": "ای بیئرگردینته بوته ئین ایڈیٹانی علامت جتین بئ ئنوانئ رباتئ ایڈیٹا",
+ "right-noratelimit": "تاثیر نه گیپتین شه سرعتئ محدودیت ئا",
+ "right-import": "تاکدیمئ داخل کورتین شه دیگه ویکی ئا",
+ "right-importupload": "تاکدیمئ داخل کورتین شه فایلئ اپلوڈ کورتین ئا",
+ "right-patrol": "دیگرانئ ایڈیٹانی مارک جتین",
+ "right-autopatrol": "اوتوماتیکین مارک وارتین ایڈیٹ ئانی",
+ "right-patrolmarks": "آخیرئین گشت وارته ئین برچسپ ئی دیستین",
+ "right-unwatchedpages": "دیستین آ دیمانی لیستی که پدگیری ئه نه بیئنت",
+ "right-mergehistory": "تاکدیمانی تاریخچه ئی ادغام کورتین",
+ "right-userrights": "ایڈیٹ کورتین کار زوروکئ موچین اختیارانئ",
+ "right-userrights-interwiki": "دیگه ویکی ئی کار زوروکانئ اختیارانی ایڈیٹ کورتین",
+ "right-siteadmin": "مئلومات ئین بانکئ قُلپ و یا پاچ کورتین",
+ "right-sendemail": "دیم داتین ایمل په دیگه کار زوروکان",
+ "right-passwordreset": "پاسوردی نوک تنظیم کورتینی ایمیل",
+ "right-managechangetags": "[[Special:Tags|برچسپ ئانی]] جۆڑ و پاک کورتین مه لوماتین بانکا",
+ "newuserlogpage": "کار زوروکئ جوڑ کورتینی سیاه چال",
+ "newuserlogpagetext": "ای سیاه چال شه نوکین کار زوروکئ ناما جوڑ بوته.",
+ "rightslog": "کار زوروکی اختیارانئ سیاه چال",
+ "rightslogtext": "ای سیاه چال کار زوروکئ تغیراتانی اینت.",
+ "action-read": "وانتین ای تاکدیمئ",
+ "action-edit": "ایڈ\tیٹ کورتین ای تاکدیمئ",
+ "action-createpage": "تاکدیم جوڑ کورتین",
+ "action-createtalk": "گپ ئی تاکدیمانی جوڑ\t کورتین",
+ "action-createaccount": "ای کار زوروکئ حسابئ جوڑ\t کورتین",
+ "action-history": "ای تاکدیمی تاریخچه ئی دیستین",
+ "action-minoredit": "ای ایڈیٹ ئی نشانی کورتین بئ ئنوانئ کم ئین",
+ "action-move": "ای تاکدیمی انتقال",
+ "action-move-subpages": "ای تاکدیمئ و آیی گونڈدیمانی انتقال",
+ "action-move-rootuserpages": "کار زوروکین سرشاخه ئین تاکدیمانئ انتقال",
+ "action-move-categorypages": "تهر تاکدیمئ انتکال",
+ "action-movefile": "ای فایلی انتقال داتین",
+ "action-upload": "ای فایلی اپلود یا بُرز کورتین",
+ "action-reupload": "ای موجودین فایلئ سرا نیویشتین",
+ "action-reupload-shared": "ای فایل ئی باطل کورتین شه یک مشترکین مخزن ئا",
+ "action-upload_by_url": "ای فایلئ بُرز کورتین شه یک انترنتین ادرسا",
+ "action-writeapi": "استفاده شه نیویشتینی API",
+ "action-delete": "پاک کورتین ای تاکدیمئ",
+ "action-deleterevision": "ای نخسه یی پاک کورتین",
+ "action-deletedhistory": "ای تاکدیمی پاک بوتینئ تاریخچه ئی دیستین",
+ "action-browsearchive": "گشتین په پاک بوته ئین تاکدیمان",
+ "action-undelete": "بی جاه آورتین ای تاکدیمئ",
+ "action-suppressrevision": "بی جاه آورتین و دیستین پاک بوته ئین ایڈیٹانئ",
+ "action-suppressionlog": "ای خصوصین سیاه چالی دیستین",
+ "action-block": "ای کار زوروکئ دسترسی ئی قطع کورتین شه ایڈیٹ ئا",
+ "action-protect": "ای تاکدیمی ساتیتینئ رکم",
+ "action-rollback": "عاجل ئین بیئرگردینتین آخیر ئین کار زوروکئ ایڈیٹانئ که ای تاکدیما ایڈیٹ کورته",
+ "action-import": "تاکدیمئ داخل کورتین شه دیگه ویکی ئا",
+ "action-importupload": "تاکدیمئ داخل کورتین شه فایلئ اپلوڈ کورتین ئا",
+ "action-patrol": "دیگرانئ ایڈیٹانی مارک جتین",
+ "action-autopatrol": "وتئ ایڈیٹانئ نشاني کورتین",
+ "action-unwatchedpages": "دیسته نه بوته ئین تاکدیمانئ دیستین",
+ "action-mergehistory": "ای تاکدیمی تاریخچه ئی ادغام",
+ "action-userrights": "ایڈیٹ کورتین کار زوروکئ موچین اختیارانئ",
+ "action-userrights-interwiki": "یک دیگه ویکی ئی کار زوروکانئ اختیارانی ایڈیٹ کورتین",
+ "action-siteadmin": "مئلومات ئین بانکئ قُلپ و یا پاچ کورتین",
+ "action-sendemail": "ایمیلی دیم داتین",
+ "action-editmywatchlist": "وتئ واچلیستا ایڈیٹ بکنت",
+ "action-viewmywatchlist": "وتئ واچلیست ئا بگیندیت",
+ "action-viewmyprivateinfo": "وتئ خصوصین مئلوماتانا بگیندیت",
+ "action-editmyprivateinfo": "وتئ خصوصین مئلوماتانا ایڈیٹ بکنیت",
+ "action-editcontentmodel": "یک تاکدیمی محتوائین مدل ئی ایڈیٹ کورتین",
+ "action-managechangetags": "تگ ئانی جۆڑ و پاک کورتین شه مه لوماتین بانکا",
+ "nchanges": "$1 {{PLURAL:$1|ٹگل|ٹگل}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|شه اخر ئین دیستینا}}",
+ "enhancedrc-history": "تاریخچه",
+ "recentchanges": "آخیرین تغیراتان",
+ "recentchanges-legend": "آخیر ئین تغیراتانئ آپشن",
+ "recentchanges-summary": "ویکی ئی آخیر ئین تغیرانا بئ تاکدیمی تا بچاریت.",
+ "recentchanges-noresult": "هیچ تغیری بئ تعین بوته ئین دوره ئی تا گۆ ای معیاران هموانی نداشت.",
+ "recentchanges-feed-description": "ای ویکی ئی آخیر ئین تغیرانا بئ ای وارگ ئی تا بچاریت.",
+ "recentchanges-label-newpage": "ای ایڈیٹ نوکین تاکدیمی ئا جوڑ کورت",
+ "recentchanges-label-minor": "ای یک گونڈین ایڈیٹئ است",
+ "recentchanges-label-bot": "ای ایڈیٹا یک ربات ئی کورته",
+ "recentchanges-label-unpatrolled": "ای ایڈیٹ تا انون گشت وارته نه بوته",
+ "recentchanges-label-plusminus": "تاکدیمئ حجم بئ ای اندازگ بایٹ ئا تغیر کورته",
+ "recentchanges-legend-heading": "'''اختصارئان:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همیرنگ بی [[Special:NewPages|نوکین تاکدیمانئ لڑ لیست]] ئا سیل بکنیت)",
+ "rcnotefrom": "بئ جهلگا تغیرات شه <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داته بوته|نشان داته انت}}).",
+ "rclistfrom": "نوکین تغیراتانئ نشان داتین شرو شه $3 $2",
+ "rcshowhideminor": "$1 ئی کمین ایڈیٹان",
+ "rcshowhideminor-show": "نشان داتین",
+ "rcshowhideminor-hide": "چیهر داتین",
+ "rcshowhidebots": "$1 ربات‌هان",
+ "rcshowhidebots-show": "نشان داتین",
+ "rcshowhidebots-hide": "چیهر داتین",
+ "rcshowhideliu": "$1 راجستر بوته ئین کار زوروکان",
+ "rcshowhideliu-show": "نشان داتین",
+ "rcshowhideliu-hide": "چیهر داتین",
+ "rcshowhideanons": "$1 نادروستئ ئین کار زوروکان",
+ "rcshowhideanons-show": "نشان داتین",
+ "rcshowhideanons-hide": "چیهر داتین",
+ "rcshowhidepatr": "$1 گشت وارته ئین ایڈیٹ ئان",
+ "rcshowhidepatr-show": "نشان داتین",
+ "rcshowhidepatr-hide": "چیهر داتین",
+ "rcshowhidemine": "$1 نی ایڈیٹان",
+ "rcshowhidemine-show": "نشان داتین",
+ "rcshowhidemine-hide": "چیهر داتین",
+ "rclinks": "نشان داتین $1 آخیر ئین تغییر بئ $2 اخیرین روچا<br />$3",
+ "diff": "تفاوت",
+ "hist": "تاریخچه",
+ "hide": "چیهر داتین",
+ "show": "نشان داتین",
+ "minoreditletter": "جز",
+ "newpageletter": "نوک",
+ "boteditletter": "ر",
+ "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کار زوروک}} دیستینوک]",
+ "rc_categories": "ای تهرهانی حد ئا (گۆ «|» ئا جیتا کنیت)",
+ "rc_categories_any": "هر گوجام",
+ "rc-change-size-new": "$1 {{PLURAL:$1|بایٹ}} پد شه تغیرا",
+ "newsectionsummary": "/* $1 */ نوکین بخش",
+ "rc-enhanced-expand": "جزئیات ئی نشان داتین",
+ "rc-enhanced-hide": "جزئیات ئی چیهر داتین",
+ "rc-old-title": "جوڑ بوته گو بُنیادی ئنوانا «$1»",
+ "recentchangeslinked": "مربوتین تغیراتان",
+ "recentchangeslinked-feed": "مربوتین تغیراتان",
+ "recentchangeslinked-toolbox": "مربوتین تغیراتان",
+ "recentchangeslinked-title": "مربوتین تغیراتان گو $1",
+ "recentchangeslinked-page": "تاکدیم نام:",
+ "recentchangeslinked-to": "نشان داتین تاکدیماني تغیرات که گۆ ای تاکدیما لینک دارنت",
+ "upload": "فایلی بُرز کورتین",
+ "uploadbtn": "فایلی بُرز کورتین",
+ "reuploaddesc": "بُرز کورتیني کنسیل و بیئرگشت په بُرز کورتیني فرما",
+ "upload-tryagain": "فایلئ تغیر ئی شرح ئی دیم داتین",
+ "uploadnologin": "لوگین نه بوته بی",
+ "uploadnologintext": "په فایلي بُرز کورتینا باید $1.",
+ "upload_directory_missing": "($1) ئی بُرز کنۆکین شاخه موجود نه اینت و جۆڑ بوتینئ وڑ نه اینت .",
+ "upload_directory_read_only": "($1) بُرز کنۆکین شاخه شه ویت سرور نیمگا نیویشتین ئی وڑ نه اینت.",
+ "uploaderror": "خطا بی اپلودی تا",
+ "upload-recreate-warning": "'''هشدار:فایلی گۆ\t ای ناما یا پاک بوته یا دیگه جای جابجا بوته.'''\n\nپه آسانی خاتیرا، ای تاکدیمی پاک بوتین و جابجایی سیاهه بئ جهلگا آته:",
+ "uploadtext": "شه جهلگین فرما په نوکین فایلانئ بُرز کورتینا استفاده بکنیت.\nپه آ فایلان که دیمتیرا بُرز کورته بوته انت بئ [[Special:FileList|فایلانئ لڑ لیست]] ئی تا برَۆیت. شه سري نوکین بُرز کورتین بئ [[Special:Log/upload|بُرز کنۆکین کۆرم]] و پاک کورتین فایلانئ بئ [[Special:Log/delete|deletion log]] ئی تا راجستر ئه بیئنت.\n\nپد شه آیی که یک فایلئ ئا بُرز کورتیت، بئ ای سه رقم توانیت آیرا بئ تاکدیمانئ تا استفاده بکنیت:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' په فایلئ کامیلین نخسه ئی استفاده کورتینی خاتیرا\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' په استفاده کورتین شه یک ۲۰۰ پیکسیل ئین نخسه شه فایل بی یک بکس ئی تا بئ چپ ئین نیمگا یک متن که آیی تا alt text بئ ئنوان شرح استفاده بوته\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' په جۆڑ کورتین یک یک مستقیمین لینک بئ فایلا بی شه آیی که فایل نشان داته بیئت",
+ "upload-permitted": "مجاز ئین فایل ئی {{PLURAL:$2|نوع|انواع}}: $1.",
+ "upload-preferred": "ترجیح داته بوته ئین فایل ئی {{PLURAL:$2|نوع|انواع}} : $1.",
+ "upload-prohibited": "نا مجاز ئین فایل ئی {{PLURAL:$2|نوع|انواع}}: $1.",
+ "uploadlogpage": "بُرز کورتینئ سیاه چاله",
+ "uploadlogpagetext": "جهلگی لڑلیست آخیرین لڑلیست شه بُرز بوته ئین فایلان اینت.\nپه دیدارین مرواریدا [[Special:NewFiles|نوکین فایلانی نگارخانه]] ئا بگیندیت.",
+ "filename": "فایلئ نام",
+ "filedesc": "خلاصه",
+ "fileuploadsummary": "خلاصه:",
+ "filereuploadsummary": "فایلی تغیرات:",
+ "filestatus": "کاپی رایٹ ئی وضیعت",
+ "filesource": "منبع:",
+ "ignorewarning": "چشم چیهرداتین شه هشدارا و ذخیره کورتین فایلئ.",
+ "ignorewarnings": "چم پوشی شه موچین هشداران",
+ "minlength1": "فایلئ نام باید کم شه کم یک حرف بیئت.",
+ "filename-toolong": "پائیل نام نه باید شه ۲۴۰ بایت ئا تچکتیر بیئت.",
+ "badfilename": "پائیل نام بئ «$1» ئا تغییر کورت.",
+ "filetype-missing": "ای فایل پدوندی (مثلاً «‎.jpg») نداریت.",
+ "empty-file": "فایلی که دیم داته بوت خالی ات.",
+ "file-too-large": "فایلی که دیم داتیت بئ حد ٹوو ات.",
+ "filename-tooshort": "فایلی نام بئ شه اندازگ ئا گۆنڈ ات.",
+ "filetype-banned": "ایرنگین فایل ئی اجازه نه اینت.",
+ "verification-error": "فایل شه تائید ئی امتحانا در نه بوت.",
+ "hookaborted": "تغیر که شما لۆٹیت جۆڑ کنیت شه یک جنگک یی نیمگا بند بوت.",
+ "illegal-filename": "فایل ئی نام غیرمجاز اینت.",
+ "overwrite": "یک موجودین فایلی سرا نیویشتین ئی اجازه نه اینت.",
+ "unknown-error": "یک نا زانتین خطائی رخ دات.",
+ "tmp-create-error": "موقتین فایلی جۆڑ کورتین ممکن نه اینت.",
+ "tmp-write-error": "خطا بئ موقتین فایلی نیویشتینا.",
+ "windows-nonascii-filename": "ای ویکی پایل ئی ناما گۆ خاسین نۆیسگ ئان پُشتیوانی ئه نه کنت.",
+ "fileexists": "پایل ئی گۆ ای ناما شه دیما موجود اینت، اگه موتمئین {{GENDER:|نه ۆیت}} که لوٹیت ای پایل ئا تغیر ب دهیت، مهربانی بکنیت <strong>[[:$1]]</strong> ئا بگیندیت.\n[[$1|thumb]]",
+ "uploadwarning": "بُرز کورتینئ هشدار",
+ "savefile": "فایلی ذخیره کورتین",
+ "uploaddisabled": "بُرز کورتین غیر پئال اینت.",
+ "copyuploaddisabled": "بُرز کورتین شه اینترنیتی ادرسا غیرفعال اینت.",
+ "uploaddisabledtext": "فایل ئی بُرز کورتین غیر فعال اینت.",
+ "uploadscriptednamespace": "این اس‌وی‌جی ئی پوشه شامل غیرقانونی ئین '$1' ئی پزای نام ئا اینت",
+ "uploadinvalidxml": "XML بئ بُرز بوته ئین پایل تا نتوانت تجزیه بیئت.",
+ "uploadvirus": "ای پایل ویروس داریت!\nگیشتیرین مه لومات : $1",
+ "upload-source": "فایلی منشا",
+ "sourcefilename": "منشائی فایلی نام:",
+ "sourceurl": "منشائی ادرس:",
+ "destfilename": "فایلئ مخصدی نام:",
+ "upload-maxfilesize": "فایلی حداکثر اندازه گ: $1",
+ "upload-description": "فایلی توضیحات",
+ "upload-options": "بُرز کورتین یا آپلوڈئ اپشن",
+ "watchthisupload": "دیستین ای فایلی",
+ "upload-success-subj": "بُرز کورتین یا آپلوڈ گو کامیابی ئا انجام بوت",
+ "upload-success-msg": "شمی بُرز کورتین شه [$2] ئا کامیاب ات. توانیت که ای پایل ئا ایدا : [[:{{ns:file}}:$1]] بگیندیت",
+ "upload-failure-subj": "بُرز کنوکی پرابلم",
+ "upload-failure-msg": "یک مشکل بئ بُرز کورتینا شه [$2] ئا وجود داشت:\n\n$1",
+ "upload-warning-subj": "بُرز کورتینئ هشدار",
+ "upload-proto-error": "نادروستین پروتوکول",
+ "upload-proto-error-text": "بُرز کورتین شه دوردستا به ادرس ئان که گو <code dir=ltr>http://</code> یا <code dir=ltr>ftp://</code> ئی شرو بیئنت ضرورت داریت .",
+ "upload-file-error": "داخلین خطا",
+ "upload-misc-error": "نامئلومین خطا بی بُرزکورتینئ تا",
+ "upload-too-many-redirects": "انترنیتی ادرس به شه اندازه ئا تغیرمسیر داریت",
+ "upload-http-error": "یک اچ‌تی‌تی‌پی خطا رخ داته: $1",
+ "upload-copy-upload-invalid-domain": "بُرز بوته فایلانی کاپی کورتین شه ای ڈومین ئا امکان نداریت.",
+ "backend-fail-stream": "نه توانن $1 ئی فایلا دیم دهین.",
+ "backend-fail-backup": "نتنوانن پُشتوانی نخسه یی په $1 فایلا جۆڑ کنن.",
+ "backend-fail-notexists": " $1 ئی فایل وجود نداریت.",
+ "backend-fail-hashes": "پایل ئانی هیش ئانی گیپتین په موقایسه ئا ناکام ات.",
+ "backend-fail-notsame": "غیر یکرنگی فایل بئ $1 ئی تا وجود نداریت.",
+ "backend-fail-invalidpath": "$1 ئی ذخیره کنۆکی مسیر موتبر نه اینت.",
+ "backend-fail-delete": "نه توان که $1 ئی فایل پاک کورت.",
+ "backend-fail-describe": "نه توان که «$1» ئی فایلی میتادیتا ئا تغییر دات.",
+ "backend-fail-alreadyexists": "$1 ئی فایل شه دیما وجود داشت.",
+ "backend-fail-store": "نه توان که $1 ئی فایلا بئ $2 ئی تا ذخیره کورت.",
+ "backend-fail-copy": "نه توانن که $1 ئی فایلا به $2 کاپی کنن.",
+ "backend-fail-move": "نه توانن که $1 ئی فایلا به $2 انتقال دئین.",
+ "backend-fail-opentemp": "نه توان که موقتین فایلا پاچ کورت.",
+ "backend-fail-writetemp": "نیویشتین بی موقتین فایلئ سرا امکان نه داریت.",
+ "backend-fail-closetemp": "نه توان که موقتین فایلا ئا بست.",
+ "backend-fail-read": "$1 ئی فایلا نه توان وانت.",
+ "backend-fail-create": "نه توانن بئ $1 ئی فایلی سرا مئلومات نیویشته کنن.",
+ "backend-fail-maxsize": "نه توان که $1 ئی فایلی سرا مئلومات نیویشته کورت چون که شه {{PLURAL:$2|یک بایٹ ئا|$2 بایٹ ئا}} ٹوو اینت.",
+ "backend-fail-readonly": "«$1» پُشتوانی انون په قت بی وانتین ئی هالا اینت . پیش بوته ئین دلیل ایرنگ گوشته بوته: «$2»",
+ "backend-fail-connect": "ارتباط گۆ «$1» ئی ذخیره ئی پُشتیوانا برقرار نه بوت.",
+ "backend-fail-internal": "نامئلومین خطایی بئ «$1» ئی ذخیره پُشتیوانی تا رخ دات.",
+ "lockmanager-notlocked": "نه توان که «$1» ئی قُلپا پاچ کورت؛ چون که قُلپ نه بوته.",
+ "lockmanager-fail-closelock": "\"$1\" ئی قُلپ بوته ئین فایلی بستین امکان نه داریت.",
+ "lockmanager-fail-deletelock": "\"$1\" ئی قُلپ بوته ئین فایلی پاک کورتین،امکان نداریت.",
+ "lockmanager-fail-acquirelock": "نه توانیت «$1» ئی قُلپ ئا کسب کنیت.",
+ "lockmanager-fail-openlock": "\"$1\" ئی قُلپ بوته ئین فایلی پاچ کورتین امکان نه داریت.",
+ "lockmanager-fail-releaselock": "نه توانیت «$1» ئی قُلپ ئا پاچ کنیت.",
+ "lockmanager-fail-db-release": "$1 ئی مئلوماتی بانکی قُلپئ پاچ کورتین امکان نه داریت.",
+ "lockmanager-fail-svr-acquire": "$1 ئی سرور ئی قُلپانی گیپتین امکان نه داریت.",
+ "lockmanager-fail-svr-release": "$1 ئی سرور ئی قُلپانی پاچ کورتین ئی امکان نه اینت.",
+ "zip-file-open-error": "بئ زیپ ئی فایلی پاچ کورتینی وختا، په آیی محتوایی دیستینی خاتیرا، یک خطا ئی رخ دات.",
+ "zip-wrong-format": "مشخص بوته ئین فایل، زیپ ئی یک فایلی نه اینت.",
+ "uploadstash": "بُرز کورتین انبار ئی",
+ "uploadstash-clear": "پاک کورتین انبارشده ئین فایلانئ",
+ "uploadstash-nofiles": "شما هیچ انبارشده ئین فایلئ نداریت.",
+ "uploadstash-errclear": "فایلانئ پاک کورتین ناکام ات.",
+ "uploadstash-refresh": "فایلانئ لڑلیستئ نوک کورتین",
+ "invalid-chunk-offset": "قطعه ئی ناموتبرین جابجايی",
+ "img-auth-accessdenied": "دسترسی ئی منشا",
+ "img-auth-badtitle": "یک مجازین ئینوانی جۆڑ کورتین ئی امکان شه «$1» ئا وجود نداریت.",
+ "img-auth-nologinnWL": "شما لوگین نه بوته ایت و بئ «$1» ئی سپیتین لیست ئی تا وێت.",
+ "img-auth-nofile": "«$1» ئی فایل موجود نه اینت.",
+ "img-auth-isdir": "شما کوشش کورته ئیت که بئ «$1» ئی شاخه ئا دسترسی ودی بکنیت.\nتانا په فایل ئا دسترسی جایز اینت.",
+ "img-auth-streaming": "بئ حال جاری کورتینی «$1» ئا.",
+ "img-auth-noread": "کار زوروک «$1» ئی وانتین ئی دسترسی ئا نداریت.",
+ "http-invalid-url": "انترنیتی ادرس ناموتبر اینت: $1",
+ "http-invalid-scheme": "انترنیتی ئین نخسه گۆ «$1» ئی پیشنهادا پُشتیوانی ئه نه بیئنت.",
+ "http-request-error": "اچ‌تی‌تی‌پی ئی ریکویست گۆ نامئلومین خطائا، ناکام ات.",
+ "http-read-error": "اچ‌تی‌تی‌پی ئی وانتینئ خطا.",
+ "http-timed-out": "اچ‌تی‌تی‌پی ئی ریکویست ئی وخت الاس بوت.",
+ "http-curl-error": "خطا بئ انترنیتی ادرسی آورتینی تا: $1",
+ "http-bad-status": "بئ اچ‌تی‌تی‌پی ئی ریکویست ئی وختا خطایی رخ دات: $1 $2",
+ "upload-curl-error6": "په انترنیتی ئین ادرس ئا دسترسی ممکن نه بوت",
+ "upload-curl-error6-text": "انترنیتی ئین ادرس که شما لوٹیته ئیت قابل دسترس نه اینت.\nمهربانی بکنیت آیی جۆانئ سرا وترا متمئین بکنیت و پدا کوشش بکنیت.",
+ "upload-curl-error28": "بُرز کورتین ئی وخت الاس بوت",
+ "license": "اجازه‌نامه:",
+ "license-header": "اجازه‌نامه",
+ "nolicense": "هیچگوجام انتخاب نه بوته",
+ "licenses-edit": "ایڈیٹ ئی مجوزین آپشن ئان",
+ "license-nopreview": "(دیم دیست ئی وجود نداریت)",
+ "upload_source_url": "(شما شه یک موتبرین و جۆانین URL ئا فایل ئی انتخاب کورته ایت، که موچانی دسترس ئا توانت بیئت)",
+ "upload_source_file": "(شمی انتخابی ئین فایل شه شمی کامپیوتیرا)",
+ "listfiles-delete": "پاک کورتین",
+ "listfiles-summary": "ای خاصین تاکدیم موچین بُرز بوته ئین فایلانه نشان ئه دنت.",
+ "listfiles_search_for": "گشتین په میڈیا نام ئا:",
+ "imgfile": "فایل",
+ "listfiles": "فایل لیست",
+ "listfiles_thumb": "ناحُننک",
+ "listfiles_date": "تاریخ",
+ "listfiles_name": "نام",
+ "listfiles_user": "کار زوروک",
+ "listfiles_size": "اندازه",
+ "listfiles_description": "توضیح",
+ "listfiles_count": "نخسه ئان",
+ "listfiles-show-all": "اکسانی قدیمین نخسه ئان",
+ "listfiles-latestversion": "انونین نخسه( ویرژن )",
+ "listfiles-latestversion-yes": "هان",
+ "listfiles-latestversion-no": "نه",
+ "file-anchor-link": "فایل",
+ "filehist": "فایلی تاریخچه",
+ "filehist-help": "تاریخ/وخت ئانی سرا کلیک کنیت تا آ وختی مربوتین نخسه ئانه بگیندیت.",
+ "filehist-deleteall": "موچانی پاک کورتین",
+ "filehist-deleteone": "پاک کورتین",
+ "filehist-revert": "بیرگردینتین",
+ "filehist-current": "انونین نسخه",
+ "filehist-datetime": "تاریخ/ساعت",
+ "filehist-thumb": "ناحُننک",
+ "filehist-thumbtext": "ناحُنین اکس شه مورخ $1 ئی نخسه ئا",
+ "filehist-nothumb": "بی ناحُننک",
+ "filehist-user": "کار زوروک",
+ "filehist-dimensions": "ابعاد",
+ "filehist-filesize": "فایلی اندازه",
+ "filehist-comment": "کومنیت",
+ "imagelinks": "بی کار گیپتین فایلئ",
+ "linkstoimage": "{{PLURAL:$1|تاکدیم|تاکدیمان}} جهلگین بی اکسا لینک {{PLURAL:$1|داریت|دارنت}}:",
+ "linkstoimage-more": "گیشتیر شه $1 تاکدیم گۆ ای فایلا لینک {{PLURAL:$1|داریت|دارنت}}.\nجهلگی لڑ تانا {{PLURAL:$1|اولین لینک|اولین $1 لینک}} گۆ ای دیما نشان ئا دنت.\n[[Special:WhatLinksHere/$2|کامیلین لیست]] هم موجود اینت.",
+ "nolinkstoimage": "ای فایل بئ هیچ تاکدیمی تا بئ کار گیپته نه بوته.",
+ "morelinkstoimage": "ای فایلئ [[Special:WhatLinksHere/$1|دیگرین لینکانا]] بگیندیت.",
+ "linkstoimage-redirect": "$1 (فایلی تغیرمسیر) $2",
+ "duplicatesoffile": "جهلگی{{PLURAL:$1|فایل|فایلان}} تکرارین نخسه شه ای فایلا {{PLURAL:$1|است|هستنت}} ([[Special:FileDuplicateSearch/$2|گیشتیرین مئلومات]]):",
+ "sharedupload-desc-here": "ای فایل بئ $1 ئی تا قرار داریت و ممکن اینت که بئ دیگه پروژه‌هانئ تا هم استفاده بیئت.\nموجودین شرح بئ [$2 فایلی دیمی شرح بئ آ جای تا]، جهلگا نشان داته بوته.",
+ "filepage-nofile": "فایلی گۆ ای ناما موجود نه اینت.",
+ "filepage-nofile-link": "فایلی گۆ ای ناما موجود نه اینت، اما شما ئه توانیت آیرا [$1 بُرز کنیت].",
+ "uploadnewversion-linktext": "نوکین نخسه ئی بُرز کورتین شه فایلا",
+ "shared-repo-from": "شه $1",
+ "shared-repo": "یک مشترکین مخزن",
+ "upload-disallowed-here": "شما نه توانیت ای فایلا بازنویسی بکنیت.",
+ "filerevert": "بیئرگردینتین $1",
+ "filerevert-legend": "بیئرگردینتین فایلی",
+ "filerevert-intro": "شما بی حالی بیئرگردینتینا '''[[Media:$1|$1]]''' بی [$4 نخسه تاریخ $2 سائت $3] هستیت.",
+ "filerevert-comment": "دلیل:",
+ "filerevert-defaultcomment": "بیئرگردینتین بئ $1 ئی نخسه ئا سائت $2",
+ "filerevert-submit": "بیئرگشت",
+ "filerevert-success": "<strong>[[Media:$1|$1]]</strong> بی [$4 نخسه ئی بی تاریخی $2 سائت $3] ئا بیئرگشتینته بوت.",
+ "filerevert-badversion": "قدیمیتیرین نخسه شه ای فایلا موجود نه اینت.",
+ "filedelete": "پاک کورتین $1",
+ "filedelete-legend": "فایلی پاک کورتین",
+ "filedelete-intro-old": "شما بئ حال پاک کورتین نخسه ئی '''[[Media:$1|$1]]''' مورخ [$4 $2 سائت $3] هستیت.",
+ "filedelete-comment": "دلیل:",
+ "filedelete-submit": "پاک کورتین",
+ "filedelete-success": "'''$1''' پاک بوت.",
+ "filedelete-success-old": "نخسه '''[[Media:$1|$1]]''' مورخ $2 سائت $3 پاک بوت.",
+ "filedelete-nofile": "'''$1''' موجود نه اینت.",
+ "filedelete-nofile-old": "ارشیف بوته ئین نخسه شه '''$1''' گۆ داته بوته ئین مشخصاتان، موجود نه اینت.",
+ "filedelete-otherreason": "دیگرین دلیل/اضافی:",
+ "filedelete-reason-otherlist": "دیگرین دلیل",
+ "filedelete-reason-dropdown": "*پاک بوتین ئی مشترکین دلیلان\n** کاپی رایٹ پُروشه گ\n** تکرارین پایل",
+ "filedelete-edit-reasonlist": "پاک بوتینئ دلیلانئ ایڈیٹ",
+ "filedelete-maintenance-title": "نه توانیت فایلا پاک بکنیت",
+ "mimesearch": "گشتین بی اساس MIME",
+ "mimetype": "MIME ئی رکم:",
+ "download": "ائیر کورتین",
+ "unwatchedpages": "دیسته نه یوته ئین تاکدیمان",
+ "listredirects": "تغیرمسیر ئی تاکدیمانی لڑ",
+ "listduplicatedfiles": "موچین فایل ئانی لڑ ، لۆڑ گۆ تکراری ئان",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]][[$3|{{PLURAL:$2|یک تکرار|$2 تکرار}}]] داریت.",
+ "unusedtemplates": "استفاده نه بوته ئین تراشوانان",
+ "unusedtemplateswlh": "دیگه لینک ئان",
+ "randompage": "تصادفی مقاله",
+ "randomincategory": "تصادفین تاکدیم بئ تهر ئی تا",
+ "randomincategory-invalidcategory": "«$1» یک موتبرین نامئ په تهر ئان نه اینت.",
+ "randomincategory-nopages": "هیچ تاکدیمی بئ [[:Category:$1|$1]] ئی تهری تا موجود نه اینت.",
+ "randomincategory-category": "تهر:",
+ "randomincategory-legend": "تصادفین تاکدیم بئ تهرئی تا",
+ "randomredirect": "تغییرمسیر تصادفی",
+ "randomredirect-nopages": "هیج تغیر مسیر بئ «$1» ئی نامی فضای تا موجود نه اینت.",
+ "statistics": "ارقام",
+ "statistics-header-pages": "ای تاکدیمئ ارقام",
+ "statistics-header-edits": "ایڈیٹانی ارقام",
+ "statistics-header-users": "کار زوروکانئ ارقام",
+ "statistics-header-hooks": "دیگرین ارقام",
+ "statistics-articles": "تاکدیمانی محتوا",
+ "statistics-pages": "تاکدیمان",
+ "statistics-pages-desc": "ای ویکی ئی موچین تاکدیمان ٬ هبر و گپ ئی تاکدیمان ٬ و تغیر مسیر و دیگرین",
+ "statistics-files": "بُرز بوته ئین فایلان",
+ "statistics-edits": "تاکدیمانی ایڈیٹ شه وخت که {{SITENAME}} جۆڑ بوته انت",
+ "statistics-edits-average": "متوسطین ایڈیٹ شه هر یکین تاکدیما",
+ "statistics-users": "راجستر بوته ئین [[Special:ListUsers|کار زوروکان]]",
+ "statistics-users-active": "پئال ئین کار زوروکان",
+ "statistics-users-active-desc": "آ کار زوروکان که بئ {{PLURAL:$1|رۆچ|$1 رۆچ}} دیما پئالیت شه وت نشان داته انت",
+ "pageswithprop": "تاکدیم گۆ تاکدیمانئ خاصیتا",
+ "pageswithprop-legend": "تاکدیم گۆ تاکدیمانئ خاصیتا",
+ "pageswithprop-prop": "خاصیت ئی نام:",
+ "pageswithprop-submit": "برا",
+ "pageswithprop-prophidden-long": "($1) ئی تچکین متنی چیهرین جزییات",
+ "pageswithprop-prophidden-binary": "($1) ئی باینری چیهرین اندازگ ئی جزییات",
+ "doubleredirects": "دوتائین تغیرمسیرئان",
+ "double-redirect-fixer": "تغیرمسیرئانی تئمیرکار",
+ "brokenredirects": "خرابین تغیرمسیر",
+ "brokenredirectstext": "جهلگین تغییرمسیرئان بئ یک ناموجودین دیمی لینک دارنت:",
+ "brokenredirects-edit": "ایڈیٹ",
+ "brokenredirects-delete": "پاک کورتین",
+ "withoutinterwiki": "تاکدیمان بی شه زبانئ لینک ئان",
+ "withoutinterwiki-legend": "دیموند",
+ "withoutinterwiki-submit": "نشان داتین",
+ "fewestrevisions": "مقاله ئان گۆ کم ئین ایڈیٹ ئی اندازگ ئا",
+ "nbytes": "$1 {{PLURAL:$1|بایٹ|بایٹ}}",
+ "ncategories": "$1 {{PLURAL:$1|تهر|تهرئان}}",
+ "ninterwikis": "$1 {{PLURAL:$1|میان‌ویکی|میان‌ویکی}}",
+ "nlinks": "$1 {{PLURAL:$1|لینک|لینک}}",
+ "nmembers": "$1 {{PLURAL:$1|عضو|عضو}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2| عضو|عضو}}",
+ "nrevisions": "$1 {{PLURAL:$1|نخسه|نخسه}}",
+ "nviews": "$1 {{PLURAL:$1|دیست|دیست}}",
+ "nimagelinks": "استفاده بوته بی $1 {{PLURAL:$1|تاکدیم|تاکدیم}} ئی تا",
+ "ntransclusions": "استفاده بوته بی $1 {{PLURAL:$1|تاکدیم|تاکدیم}} ئی تا",
+ "specialpage-empty": "نتیجه په راپور ئا موجود نه اینت.",
+ "lonelypages": "آتیمین تاکدیمان",
+ "uncategorizedpages": "تاکدیمان که کتیگوری بندی نه بوته انت",
+ "uncategorizedcategories": "تهرهان که کتیگوری بندی نه بوته انت",
+ "uncategorizedimages": "کتیگوری بندی نه بوته ئین فایلان",
+ "uncategorizedtemplates": "کتیگوری بندی نه بوته ئین تراشوانان",
+ "unusedcategories": "استفاده نه بوته ئین تهرهان",
+ "unusedimages": "استفاده نه بوته ئین فایلان",
+ "wantedcategories": "ضرورتین تهرهان",
+ "wantedpages": "ضرورتین تاکدیمان",
+ "wantedpages-badtitle": "نامجازین ئنوانی بی مجموعه نتایج: $1",
+ "wantedfiles": "ضرورتین فایلان",
+ "wantedfiletext-nocat-noforeign": "جهلگین پایل ایستیپاده ئه به ینت مگه موجود نه انت.",
+ "wantedtemplates": "ضرورتین تراشوانان",
+ "mostlinked": "تاکدیمان که گیشتیر شه دیگران بئ آوان لینک داته بوته",
+ "mostlinkedcategories": "تهرهان که گیشتیر شه دیگران بئ آوان لینک داته بوته",
+ "mostlinkedtemplates": "تاکدیمان که گیشتیر ترانسکلوڈ بوته انت",
+ "mostcategories": "تاکدیمان گۆ بازین تهرهان",
+ "mostimages": "فایلان که گیشتیر شه دیگران بئ آوان لینک داته بوته",
+ "mostinterwikis": "تاکدیمان گۆ بازین میان ویکی هان",
+ "mostrevisions": "تاگدیمان گۆ بازێن نخسه ئان",
+ "prefixindex": "موچین تاکدیمان گۆ پدوندی",
+ "prefixindex-namespace": "موچین تاکدیمان گۆ ($1 ئی پزایی ناما)",
+ "prefixindex-strip": "دیموندین نوار بئ لیست ئی تا",
+ "shortpages": "گونڈ\tین تاکدیمان",
+ "longpages": "تچکین تاکدیمان",
+ "deadendpages": "بن بستین تاکدیمان",
+ "deadendpagestext": "جهلگین تاکدیمان گۆ هیچگوجام تاکدیما بئ {{SITENAME}} ئی تا لینک نه دارنت.",
+ "protectedpages": "قُلپ بوتگین تاکدیمان",
+ "protectedpages-indef": "فقط بی پایانین قُلپ ئان",
+ "protectedpages-cascade": "په قت آبشارین قُلپ هان",
+ "protectedpages-noredirect": "تغیرمسیرانی چیهرداتین",
+ "protectedpagesempty": "بئ انونین وختا هیچ دیمی قُلپ نه بوته.",
+ "protectedpages-timestamp": "وختی برچسپ",
+ "protectedpages-page": "تاکدیم",
+ "protectedpages-expiry": "الاسی وخت",
+ "protectedpages-performer": "قُلپ کنۆوکین کار زوروک",
+ "protectedpages-params": "قُلپ بوته ئین پارامیتران",
+ "protectedpages-reason": "دلیل",
+ "protectedpages-unknown-timestamp": "نامئلوم",
+ "protectedpages-unknown-performer": "نادروستئ ئین کار زوروک",
+ "protectedtitles": "قُلپ بوته ئین ئنوانان",
+ "protectedtitles-summary": "ای تاکدیم ، لیست ئی شه آ تاکدیمان اینت که شه جۆڑ کورتین ئا قُلپ بوته انت. په قُلپ بوته ئین ئنوانانی لیستا که شه ایڈیٹ ئا ساتیته بوته انت، بئ ایدا [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] برویت.",
+ "protectedtitlesempty": "بئ انونین وختا هیچ ئنوانی قُلپ نه بوته گۆ ای پارامیترا.",
+ "listusers": "کار زوروکانئ لڑلیست",
+ "listusers-editsonly": "فقط آ کار زوروکان که ایڈیٹ کورته انت نشان ب دئ",
+ "listusers-creationsort": "مرتب کورتین بئ اساس جۆڑ کورتینی تاریخا",
+ "listusers-desc": "نزولی ترتیب",
+ "usereditcount": "$1 {{PLURAL:$1|ایڈیٹ|ایڈیٹ}}",
+ "usercreated": "{{GENDER:$3|جوڑ بوته}} بئ تاریخ $1 بئ سائت $2",
+ "newpages": "نوکین تاکدیم",
+ "newpages-username": "کار زوروکین نام:",
+ "ancientpages": "کهنگین تاکدیمان",
+ "move": "انتقال",
+ "movethispage": "ای تاکدیمی انتقال",
+ "notargettitle": "بی شه هدفا",
+ "nopagetitle": "ایرنگی تاکدیمئ وجود نداریت",
+ "pager-newer-n": "{{PLURAL:$1|یک نوکتیرین مورد|$1 نوکتیرین مورد}}",
+ "pager-older-n": "{{PLURAL:$1|یک دیمتیرین مورد|$1 دیمتیرین مورد}}",
+ "suppress": "گیندوک ئان",
+ "apihelp": "API کومک",
+ "apihelp-no-such-module": "موڈیل \" $1 \" ودی نه بوت.",
+ "booksources": "کتابئ منبه ئان",
+ "booksources-search-legend": "په کتایئ منابی ئان خاتیرا گشتین",
+ "booksources-search": "گشتین",
+ "specialloguserlabel": "مجری:",
+ "speciallogtitlelabel": "هدف (ئنوان یا کار زوروک):",
+ "log": "سیاهه‌ها",
+ "all-logs-page": "عمومین موچین سیاه چال هان",
+ "logempty": "شمی منطبقین آیتم بی سیاه چالئ تا ودی نه بوت.",
+ "log-title-wildcard": "آ تاکدیمیانی پدا بگرد که آوانی ئنوان که گۆ ای ئبارت ئا شرو ئه بیئت",
+ "allpages": "موچین تاکدیمان",
+ "nextpage": "بعدین تاکدیم ($1)",
+ "prevpage": "دیمی تاکدیم ($1)",
+ "allpagesfrom": "تاکدیمانئ نشان داتین شرو شه:",
+ "allpagesto": "تاکدیمانئ نشان داتین الاسئ گو:",
+ "allarticles": "موچین تاکدیمان",
+ "allinnamespace": "موچین تاکدیمان ($1 نامی فضا)",
+ "allpagessubmit": "برا",
+ "allpagesprefix": "تاکدیمانی نمایش گۆ دیمۆندا:",
+ "allpagesbadtitle": "شمی درخواستین ئنوان ناموتبر،خالی،یا میان زبانین یا میان ویکی ئین ئنوان و یا شه خرابین لینکی است.\nممکن اینت که یک یا چینکه نویسگ داشته بیئت که نتوانن آوانا بئ تاکدیمانی ئنوانانی تا استیپاده کنن.",
+ "allpages-bad-ns": "{{SITENAME}} ، «$1» ئی نامی فضا ئا نداریت.",
+ "allpages-hide-redirects": "تغیرمسیرانی چیهرداتین",
+ "cachedspecial-refresh-now": "دیستین آخرین ئانی.",
+ "categories": "تهرئان",
+ "categoriesfrom": "تهرهانئ نشان داتین شرو شه:",
+ "special-categories-sort-count": "ترتیت کورتین بئ اساس اندازگ",
+ "special-categories-sort-abc": "ترتیب کورتین سیاهگانی",
+ "deletedcontributions": "پاک بوته ئین مشارکتانی",
+ "deletedcontributions-title": "پاک بوته ئین مشارکتانی",
+ "sp-deletedcontributions-contribs": "مشارکت ئان",
+ "linksearch": "گشتین په ڈنئ لینکا",
+ "linksearch-pat": "گشتین په نمونه ئا:",
+ "linksearch-ns": "نامی فضا:",
+ "linksearch-ok": "گشتین",
+ "linksearch-line": "$1 شه $2 ئا لینک داریت",
+ "linksearch-error": "نشانگ فقط بئ انترنیتی میزبانی اولی نامی تا تواننت استفاده بیئنت.",
+ "listusersfrom": "نمایش داتین کار زوروکان شرو شه:",
+ "listusers-submit": "نشان داتین",
+ "listusers-noresult": "هیچ کار زوروکئ ودی نه بوت.",
+ "listusers-blocked": "(بلاک بوته)",
+ "activeusers": "پئالین کار زوروکانئ لڑ لیست",
+ "activeusers-intro": "جهلگا یک لڑئ شه کار زوروکان ئه گیندیت که بئ $1 {{PLURAL:$1|روچ|روچ}} دیمتیرا پئالیت داشته انت.",
+ "activeusers-count": "$1 {{PLURAL:$1|پئالیت|پئالیت}} بئ {{PLURAL:$3|رۆچ|$3 رۆچ}} اخیرا",
+ "activeusers-from": "نمایش داتین کار زوروکان شرو شه:",
+ "activeusers-hidebots": "رباتانی چیهر داتین",
+ "activeusers-hidesysops": "مدیرانئ چیهرداتین",
+ "activeusers-noresult": "هیچ کار زوروکئ ودی نه بوت.",
+ "listgrouprights": "کار زوروکین گروپانئ اختیاران",
+ "listgrouprights-key": "* <span class=\"listgrouprights-granted\">داته بوته ئین اختیاران</span>\n* <span class=\"listgrouprights-revoked\">کیپته بوته ئین اختیاران</span>",
+ "listgrouprights-group": "گروپ",
+ "listgrouprights-rights": "حقوق",
+ "listgrouprights-helppage": "Help:گروپانئ حقوق",
+ "listgrouprights-members": "(اعضائانی لڑلیست)",
+ "listgrouprights-addgroup": "توانیت ای {{PLURAL:$2|گروپ|گروپ ئان}} ئا اضافه بکینت: $1",
+ "listgrouprights-removegroup": "توانیت ای {{PLURAL:$2|گروپ|گروپ ئان}} ئه پاک بکنیت: $1",
+ "listgrouprights-addgroup-all": "توانیت موچین گروپانا اضافه بکنیت",
+ "listgrouprights-removegroup-all": "توانیت موچین گروپانا پاک بکنیت",
+ "listgrouprights-addgroup-self": "توانیت وتئ حسابا بی ای {{PLURAL:$2|گروپ|گروپان}} ئی تا اضافه بکنیت: $1",
+ "listgrouprights-removegroup-self": "توانیت وتئ حسابا شه ای {{PLURAL:$2|گروپ|گروپان}} پاک بکنیت: $1",
+ "listgrouprights-addgroup-self-all": "توانیت وتئ حسابا بی موچین گروپان اضافه بکینت",
+ "listgrouprights-removegroup-self-all": "توانیت وتئ حسابا شه موچین گروپان پاک بکنیت",
+ "listgrouprights-namespaceprotection-header": "فضای نام ئی محدودیت",
+ "listgrouprights-namespaceprotection-namespace": "نامی فضا",
+ "listgrouprights-namespaceprotection-restrictedto": "مجازین هه قوق (هان) په دستکاری ئا",
+ "trackingcategories": "ردیابی کنۆکین تهرهان",
+ "trackingcategories-msg": "ردیابئ تهر",
+ "trackingcategories-name": "پیامی نام",
+ "trackingcategories-desc": "تهرئ کنجایش ئی معیاران",
+ "trackingcategories-nodesc": "هیچ توضیحی موجود نه اینت.",
+ "trackingcategories-disabled": "تهر غیر پئال بوته",
+ "mailnologin": "ادرسئ شه دیم دهۆک ئا موجود نه اینت",
+ "emailuser": "ای کار زوروکئ ایمیل",
+ "emailuser-title-target": "ایمیل په {{GENDER:$1|کار زوروکا}}",
+ "emailuser-title-notarget": "کار زوروکی ایمیل",
+ "emailpage": "کار زوروکی ایمیل",
+ "defemailsubject": "{{SITENAME}} ایمیل شه کار زوروکئ نیمگا «$1»",
+ "usermaildisabled": "کار زوروکئ ایمیل غیر پئال اینت",
+ "usermaildisabledtext": "شما نه توانیت ای ویکی تا په دیگه رین کارزوروکان ایمیل دیم دهیت.",
+ "noemailtitle": "ایمیل ئی ادرس موجود نه اینت",
+ "noemailtext": "ای کار زوروک موتبرین ایمیل ئی مشخص نه کورته.",
+ "nowikiemailtext": "ای کار زوروک انتخاب کورته که شه دیگه کار زوروکان په آیی ایمیل مه آینت.",
+ "emailnotarget": "کار زورکین نام موجود نه اینت یا ناموتبر په گیرنده ئا.",
+ "emailtarget": "گیرنده ئی کار زوروکین ناما وارد بکنیت",
+ "emailusername": "کار زوروکین نام:",
+ "emailusernamesubmit": "ثبت کورتین",
+ "email-legend": "یک ایمیلی داتین په دیگرین {{SITENAME}} کار زوروکا",
+ "emailfrom": "شه:",
+ "emailto": "بی:",
+ "emailsubject": "ئنوان:",
+ "emailmessage": "پیام:",
+ "emailsend": "دیم دئ",
+ "emailccme": "پیامی رونیویشت ئا په من دیم دی.",
+ "emailccsubject": "شمی پیامی رونیویشت په $1: $2",
+ "emailsent": "ایمیل دیم دئ",
+ "emailsenttext": "شمی ایمیل پیام دیم داته بوت",
+ "usermessage-summary": "سیستم یی پیامی ایشتین.",
+ "usermessage-editor": "سیستم یی پیام رسان",
+ "watchlist": "واچلیست",
+ "mywatchlist": "واچلیست",
+ "watchlistfor2": "په $1 $2",
+ "nowatchlist": "شمی واچلیست ئی تا هیچ موردی نه اینت.",
+ "watchlistanontext": "په وتي واچلیستئ دستین و ایڈیٹ ئی خاتیرا شه $1 ئا استفاده بکنیت.",
+ "watchnologin": "داخل نه بوته ئیت",
+ "addwatch": "افاضه کورتین بئ واچلیستا",
+ "addedwatchtext-short": "\" $1 \" ئی دیم بئ شمی واچلیست ئا ایزاپه بوته.",
+ "removewatch": "پاک کورتین شه واچلیستا",
+ "removedwatchtext": "«[[:$1]]» دیم شه [[Special:Watchlist|شمی واچلیستا]] زورته بوت.",
+ "removedwatchtext-short": "\"$1\" ئی دیم شه شمی واچلیستا پاک بوته.",
+ "watch": "دیستین",
+ "watchthispage": "دیستین ای تاکدیمی",
+ "unwatch": "اوشتارین تین دیستینی",
+ "unwatchthispage": "اوشتارینتین چارگ ئی",
+ "notanarticle": "تاکدیم محتوایی نه اینت",
+ "notvisiblerev": "آخرین نخسه شه دیگه کار زوروکئ نیمگا پاک بوته.",
+ "wlheader-enotif": "ایمیل ئی ناتیپشن پئال اینت.",
+ "wlheader-showupdated": "تاکدیمان که شه شمی آخیرین دیستینا پد تغیر بوته انت '''پررنگ''' نشان داته بیئنت.",
+ "wlnote": "بئ جهلگا {{PLURAL:$1|تغییری|<strong>$1</strong> تغییری}} که بئ {{PLURAL:$2|سائت|<strong>$2</strong> سائت}} دیمتیرا انجام بوته موجود اینت، آخیرین بازیابی تاریخ: $3، $4",
+ "wlshowlast": "نشان داتین آخیرئین $1 سائت $2 روچئ",
+ "watchlist-options": "واچلیستئ آپشن",
+ "watching": "بئ دیستینئ حالا...",
+ "unwatching": "دیستینئ اوشتارینتین...",
+ "watcherrortext": "مشکل بئ شمی واچلیستئ تنظماتانی بدل کورتینی وختا په «$1» ئا رخ دات.",
+ "enotif_reset": "نشان گذاری کورتین موچین تاکدیمانی گۆ دیسته بوته ئین ئنوانا",
+ "enotif_impersonal_salutation": "کار زوروک {{SITENAME}}",
+ "enotif_subject_deleted": "{{SITENAME}} تاکدیم $1 شه {{gender:$2|$2}} نیمگا پاک بوت.",
+ "enotif_subject_created": "{{SITENAME}} تاکدیم $1 شه {{gender:$2|$2}} نیمگا جوڑ بوته.",
+ "enotif_subject_moved": "{{SITENAME}} تاکدیم $1 شه {{gender:$2|$2}} نیمگاانتقال بوت.",
+ "enotif_subject_restored": "{{SITENAME}} تاکدیم $1 شه {{gender:$2|$2}} نیمگا نوک بوت.",
+ "enotif_subject_changed": "{{SITENAME}} تاکدیم $1 شه {{gender:$2|$2}} نیمگا تغیر بوت.",
+ "enotif_body_intro_deleted": "$1 تاکدیم {{SITENAME}} $PAGEEDITDATE بی تاریخی شه{{gender:$2|$2}} نیمگا پاک بُوت ، $3 ئا بگیندیت .",
+ "enotif_body_intro_created": "{{SITENAME}} $1 ئی تاکدیم بئ تاریخ $PAGEEDITDATE شه {{gender:$2|$2}} ئی نیمگا جۆڑ بوت، $3 ئا په انونین نخسه ئا بگیندیت.",
+ "enotif_body_intro_moved": "{{SITENAME}} $1 ئی تاکدیم بئ تاریخ $PAGEEDITDATE شه {{gender:$2|$2}} ئی نیمگا انتقال بوت، $3 ئا په انونین نخسه ئا بگیندیت.",
+ "enotif_body_intro_restored": "{{SITENAME}} $1 تاکدیم بئ تاریخ $PAGEEDITDATE شه {{gender:$2|$2}} ئی نیمگا پدا جۆڑ بوت، $3 ئا په انونین نخسه ئا بگیندیت.",
+ "enotif_body_intro_changed": "{{SITENAME}} $1 ئی تاکدیم بئ تاریخ $PAGEEDITDATE شه {{gender:$2|$2}} ئی نیمگا تغیر داته بوت، $3 ئا په انونین نخسه ئا بگیندیت.",
+ "enotif_lastvisited": "په موچین تغیران شه آخیرئین واری که سر جته ئیت ایدا $1 بگنیت.",
+ "enotif_lastdiff": "په ای تغیری دیستینا $1 ئا بگیندیت.",
+ "enotif_anon_editor": "$1 نا دروستی ئین کار زوروک",
+ "enotif_body": "$WATCHINGUSERNAME گرامی،\n\n$PAGEINTRO $NEWPAGE\n\n\nایڈیٹ کنۆکێ توضیحات: $PAGESUMMARY $PAGEMINOREDIT\n\nتماس گۆ ایڈیٹ کنۆکا:\nایمیل: $PAGEEDITOR_EMAIL\nویکی: $PAGEEDITOR_WIKI\n\nتا وختی که بئ ای دیما سر نه جته ئیت ، بئ شمی احتمالی ئین فعالیتی گیشتیرین بوتین ئی سورتا، تا وختی که گۆ وتئ کار زوروکین حسابا بی سایت تا وێت ، شما جار دیم داته ئه نه بیێت.\nشما همچنین توانتیت وتئ چاریێتین لیست ئی تا موچین بیراکانه سیپر کنیت و هم توانیت آوانا پدا بیئرگردی نیت.\n\nشمی دوستدارۆک، {{SITENAME}} ئی نوتیپیشن ئی سیستم\n\n--\nپه ای ایمیل ئی مئلومات رسانی ئی تنظیماتانی تغیری خاتیرا بئ {{canonicalurl:{{#special:EditWatchlist}}}} ئی تا برۆیت.\n\nپه وتئ واچلیستی تنظماتانی تغیر بئ {{canonicalurl:{{#special:EditWatchlist}}}} ئی تا برۆیت\n\nپه دیمی پاک کورتین ئی خاتیرا شه وتئ واچلیستا بئ $UNWATCHURL ئی تا برۆیت.\n\nپه گیشتیرین کومک ئی خاتیرا:\n$HELPPAGE",
+ "deletepage": "تاکدیمی پاک کورتین",
+ "confirm": "تأیید کورتین",
+ "excontent": "تاکدیمی محتوا ایش ات: «$1»",
+ "excontentauthor": "تاکدیمی محتوا ایش ات: «$1» (و تانا مشارکت کنۆک «[[Special:Contributions/$2|$2]]» ات)",
+ "exbeforeblank": "تاکدیمی محتوا دیم شه خالی کورتینا ایش ات: «$1»",
+ "delete-confirm": "پاک کورتین «$1»",
+ "delete-legend": "پاک کورتین",
+ "historywarning": "<strong>هشدار:</strong> تاکدیمی ئا که پاک ئه کنیت تاریخچه داریت گۆ $1 {{PLURAL:$1|پدا دیسته بوتین|پدا دیسته بوتین ئان}} اینت:",
+ "actioncomplete": "کار بوت",
+ "actionfailed": "کار نه بوت",
+ "deletedtext": "«$1» پاک بوت.\nپه آخیرین پاک بوتینین سابقه ئا بئ $2 ئی تا مراجعه بکنیت.",
+ "dellogpage": "سیاه چال ئی پاک کورتین",
+ "dellogpagetext": "جهلگین لڑلیست شه آخیرین پاک بوته ئین ئانی لڑا اینت.\nموچین ئانی نشان داته بته ئین وخت خادم وخت (گرینویچ ئی وخت) انت.",
+ "deletionlog": "سیاه چال ئی پاک کورتین",
+ "reverted": "بی دیمتیرین نخسه ئا بیئرگردینته بوت",
+ "deletecomment": "دلیل:",
+ "deleteotherreason": "دیگرین دلیل/اضافی:",
+ "deletereasonotherlist": "دیگرین دلیل",
+ "deletereason-dropdown": "*پاک بوتینئ متدوالین دلیل\n** سپم\n** خرابکاری\n** کاپی رایت ئی نقض\n** کار زوروکئ خواهش\n** پروشته ئین تغیر میسر",
+ "delete-edit-reasonlist": "پاک بوتینئ دلیلانئ ایڈیٹ",
+ "deleteprotected": "شما نه توانیت که ای تاکدیما پاک کنیت چون که شه آیی محافظت بوته.",
+ "deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|دیگرین تاکدیم]] هستنت که گۆ ای تاکدیما که شما ئه لوٹیت آیرا پاک بکنیت لینک بوته انت.",
+ "rollback": "ایڈیٹئ بیئرگردینتین",
+ "rollbacklink": "بیجا آورتین",
+ "rollbacklinkcount": "بیئرگردینتین $1 {{PLURAL:$1|ایڈیٹ|ایڈیٹ هانئ}}",
+ "rollbacklinkcount-morethan": "بیئرگردینتین گیشتیر شه $1 ایڈیٹا",
+ "rollbackfailed": "بیئرگردینته نه بوت",
+ "cantrollback": "نه توانیت که ایڈیٹ ئا بیئرگردینیت؛\nآخرین مشارکت‌کنۆک ای مقاله ئی تانائین مولف اینت.",
+ "editcomment": "ایڈیٹ ئی خلاصه ایش ات: «''$1''».",
+ "rollback-success": "$1 ئی ایڈیٹ بیئرگردینته بوتنت؛\nتاکدیم بئ اخیرین ایڈیٹ شه $2 ئا بیئرگردینته بوت.",
+ "sessionfailure-title": "کار زوروکئ نشست ئی خطا",
+ "protectlogpage": "سیاهگئ قُلپ",
+ "protectedarticle": "«[[$1]]» ئا قُلپ کورت",
+ "modifiedarticleprotection": "«[[$1]]» قُلپ ئی وزيیتا گردینت",
+ "unprotectedarticle": "«[[$1]]» ئی تاکدیمئ قُلپ يا پاچ کورت",
+ "movedarticleprotection": "قُلپ ئی تنظیماتاشه «[[$2]]» ئا بئ «[[$1]]» ئا جابجا کورت",
+ "protect-title": "«$1» ئی قُلپ ئی وزئتئ گردینتین",
+ "protect-title-notallowed": "\" $1 \" ئی قُلپ ئی سطح دیستین",
+ "prot_1movedto2": "[[$1]] بئ [[$2]] ئا جابجا بوت",
+ "protect-badnamespace-title": "نام فضا بی شه قُلپا",
+ "protect-badnamespace-text": "ای فضای نامی تا موجودین تاکدیمان نه توانن قُلپ کنن.",
+ "protect-norestrictiontypes-title": "غیر قابل قُلپ ئین تاکدیم",
+ "protect-legend": "قُلپ کورتین ئی تائیدی",
+ "protectcomment": "دلیل:",
+ "protectexpiry": "الاسی وخت:",
+ "protect_expiry_invalid": "الاسی وخت صحیح نه اینت.",
+ "protect_expiry_old": "الاسی وخت بئ دیما.",
+ "protect-unchain-permissions": "قُلپی دیگرین بخشانی پاچ کورتین",
+ "protect-default": "اجازه داتین بئ موچین کار زوروکان",
+ "protect-fallback": "فقط بئ آ کار زوروکان که بئ «$1» ئا دسترسی دارنت، اجازه داته ئه بیئت",
+ "protect-level-autoconfirmed": "تانا اجازه په تائید بوته ئین کار زوروکان",
+ "protect-level-sysop": "فقط مدیر هان",
+ "protect-summary-cascade": "آپشاری",
+ "protect-expiring": "پوره بوتین ئی وخت $1 (UTC)",
+ "protect-expiring-local": "پوره بوته ئین $1",
+ "protect-expiry-indefinite": "بی‌پایان",
+ "protect-cantedit": "شما ئه نه توانیت ای تاکدیمی قُلپئ وضیعتا تغیر بدهیت، چون که شما آیی ایڈیٹ ئی اجازه ئا نداریت.",
+ "protect-othertime": "دیگه وخت:",
+ "protect-othertime-op": "دیگه وخت",
+ "protect-existing-expiry": "موجودین انقضای وخت: $2، $3",
+ "protect-existing-expiry-infinity": "موجودین انقضای وخت: بی‌نهایت",
+ "protect-otherreason": "دیگرین دلیل/اضافی:",
+ "protect-otherreason-op": "دیگرین دلیل",
+ "protect-edit-reasonlist": "قُلپی دلیلانی ایڈیٹ کورتین",
+ "protect-expiry-options": "۱ سائت:1 hour,۱ روچ:1 day,۱ هپتگ:1 week,۲ هپتگ:2 weeks,۱ ماه:1 month,۳ ماه:3 months,۶ ماه:6 months,۱ سال:1 year,بی‌پایان:infinite",
+ "restriction-type": "دسترسی:",
+ "restriction-level": "محدودیت ئی سطح:",
+ "minimum-size": "حداقل اندازه",
+ "maximum-size": "حداکثر اندازه:",
+ "pagesize": "(بایٹ)",
+ "restriction-edit": "ایڈیٹ",
+ "restriction-move": "انتقال",
+ "restriction-create": "جوڑ\t کورتین",
+ "restriction-upload": "بُرز کورتین",
+ "restriction-level-sysop": "کاملآ قُلپ بوته",
+ "restriction-level-autoconfirmed": "نیمه‌ گ قُلپ بوته",
+ "restriction-level-all": "هر سطحی",
+ "undelete": "پاک بوته ئین تاکدیمانی دیستین",
+ "undeletepage": "پاک بوته ئین تاکدیمانی دیستین و پدا جۆڑ کورتین",
+ "undeletepagetitle": "'''آن چه که دیمتیرا کاینت شامل شه [[:$1|$1]] ئی پاک بوته ئین نخسه ئان انت'''.",
+ "viewdeletedpage": "پاک بوته ئین تاکدیمانی دیستین",
+ "undelete-fieldset-title": "نخسه ئانی پدا جۆڑ کورتین",
+ "undeleterevisions": "$1 آرشیف {{PLURAL:$1|بوته|بوته انت}}",
+ "undelete-revision": "$1 ئی پاک بوته ئین نخسه (بئ تاریخ $4 سائت $5) شه $3 ئی نیمگا:",
+ "undelete-nodiff": "قدیمیتیرین نخسه ئی ودئ نه بوت.",
+ "undeletebtn": "احیا",
+ "undeletelink": "نمایش/احیا",
+ "undeleteviewlink": "دیستین",
+ "undeleteinvert": "انتخاب سرچپی بیئت",
+ "undeletecomment": "دلیل:",
+ "undeletedrevisions": "$1 ئی نخسه احیا {{PLURAL:$1|بوت}}",
+ "undeletedrevisions-files": "$1 نخسه و $2 فایل پداجۆڑ {{PLURAL:$1|بوت|بوتنت}}.",
+ "undeletedfiles": "$1 ئی فایل پدا جۆڑ {{PLURAL:$1|بوت|بوتنت}}.",
+ "cannotundelete": "پدا جۆڑ کورتین ناکام ات:\n$1",
+ "undeletedpage": "'''$1 پدا جۆڑ بوت'''\n\nپه پاک بوته ئین و پدا جۆڑ بوته ئین سیاهه ئی خاتیرا بئ [[Special:Log/delete|پاک بوته ئین ئانی سیاهه]] ئی تا برۆیت.",
+ "undelete-header": "په آ دیما که بئ ای آخیرا پاک بوته انت بئ [[Special:Log/delete|پاک بوته ئین ئانی سیاهه]] ئا بگیندیت.",
+ "undelete-search-title": "گشتین په پاک بوته ئین تاکدیمان",
+ "undelete-search-box": "گشتین په پاک بوته ئین تاکدیمان",
+ "undelete-search-prefix": "نشان داتین تاکدیمانی شرو شه:",
+ "undelete-search-submit": "گشتین",
+ "undelete-no-results": "هیچ مطابقت ئی تاکدیمی بئ پاک بوته ئین ئانی آرشیف ئی تا ودئ نه بوت.",
+ "undelete-cleanup-error": "خطا بئ «$1» پاک بوتین ئانی تاریخچه ئی تا استفاده نه بوته.",
+ "undelete-error": "خطا تاکدیم غیر قابل پاک کورتین اینت",
+ "undelete-error-short": "خطا پدا جۆڑ کورتین بئ فایل: $1",
+ "undelete-error-long": "بی پدا جۆڑ کورتین ئی وختا خطا رخ دات:\n\n$1",
+ "undelete-show-file-confirm": "آیا شما مطمئن وێت که لوٹیت یک پاک بوته ئین نخسه شه فایل \"<nowiki>$1</nowiki>\" مورخ $2 سائت $3 ئا بگیندیت؟",
+ "undelete-show-file-submit": "هان",
+ "namespace": "نامی فضا:",
+ "invert": "انتخاب سرچپی بیئت",
+ "namespace_association": "Associated namespace",
+ "blanknamespace": "(بُنیادی)",
+ "contributions": "{{GENDER:$1|کار زوروک}} ئی شراکت ئان",
+ "contributions-title": "$1 ئی کار زوروکئ شراکت ئان",
+ "mycontris": "شراکت ئان",
+ "contribsub2": "په {{GENDER:$3|$1}} ($2)",
+ "contributions-userdoesnotexist": "«$1» ئی کار زوروکین حساب راجستر نه بوته.",
+ "nocontribs": "هیچ تغیری گۆ ای مشخصات ئان ودێ نه بوت",
+ "uctop": "(انونین نخسه)",
+ "month": "بی ای ماه ئی تا (و دیمتیر شه آیی):",
+ "year": "بی ای سال ئی تا (و دیمتیر شه آیی):",
+ "sp-contributions-newbies": "فقط نوکین مشارکتان نشان داته بیئنت",
+ "sp-contributions-newbies-sub": "په نوک کاران",
+ "sp-contributions-newbies-title": "په نوک کارین حسابانی خاتیرا کار زوروکئ شراکت ئان",
+ "sp-contributions-blocklog": "بلاک بوته ئین ئانی سیاهه",
+ "sp-contributions-suppresslog": "کار زوروکئ کومک اوشتاته انت",
+ "sp-contributions-deleted": "کار زوروکئ پاک بوئین شراکت ئان",
+ "sp-contributions-uploads": "بُرز بوته هان",
+ "sp-contributions-logs": "سیاهه‌ها",
+ "sp-contributions-talk": "گپ",
+ "sp-contributions-userrights": "کار گیروکی اختیارانی مدیریت",
+ "sp-contributions-blocked-notice": "ای کار زوروکئ دسترسی بی انونین وختا بسته بوته.\nآخرین مورد شه دسترسی ئی سیستین به جهلگا آته:",
+ "sp-contributions-blocked-notice-anon": "ای کار زوروکئ دسترسی بی انونین وختا بسته بوته.\nآخرین مورد شه دسترسی ئی سیستین به جهلگا آته:",
+ "sp-contributions-search": "گشتین په شراکتان",
+ "sp-contributions-username": "آی‌پی ادرس یا کار زوروکئ نام:",
+ "sp-contributions-toponly": "فقط آخیرین نخسه ئانی ایڈیٹ نشان داته بئنت",
+ "sp-contributions-newonly": "فقط نشان داتین آ ایڈیٹانی که دیمی جۆڑ کورتینی هستنت",
+ "sp-contributions-submit": "گشتین",
+ "whatlinkshere": "لینک بئ ای تاکدیما",
+ "whatlinkshere-title": "تاکدیمان که گو «$1» لینک دارنت",
+ "whatlinkshere-page": "تاکدیم:",
+ "linkshere": "جهلگین دیم بئ '''[[:$1]]''' ئا لینک داریت:",
+ "nolinkshere": "هیچ دیمی بئ '''[[:$1]]''' ئا لینک نه داریت.",
+ "nolinkshere-ns": "هیچ دیمی شه انتخاب بوته ئین نامی فضائان بئ '''[[:$1]]''' ئا لینک نداریت.",
+ "isredirect": "تاکدیمی تغییرمسیر داتین",
+ "istemplate": "تراگنجانش‌هان",
+ "isimage": "فایل لینک",
+ "whatlinkshere-prev": "{{PLURAL:$1|دیمئ|$1 دیمئ مورد}}",
+ "whatlinkshere-next": "{{PLURAL:$1|پدئ|$1 پدئ مورد}}",
+ "whatlinkshere-links": "→ لینک",
+ "whatlinkshere-hideredirs": "$1 تغییرمسیر",
+ "whatlinkshere-hidetrans": "$1 تراگنجانش‌هان",
+ "whatlinkshere-hidelinks": "$1 لینک",
+ "whatlinkshere-hideimages": "$1 فایلی لینکان",
+ "whatlinkshere-filters": "فیلتر ئان",
+ "autoblockid": "#$1 ئی اوتو بلاک",
+ "block": "کار زوروکئ بلاک کورتین",
+ "unblock": "کار زوروکئ انبلاک یا پاچ کورتین",
+ "blockip": "{{GENDER:$1|کار زورکئ}} بستین",
+ "blockip-legend": "کار زوروکئ بلاک کورتین",
+ "ipaddressorusername": "آی‌پی ادرس یا کار زوروکئ نام:",
+ "ipbexpiry": "الاسی وخت:",
+ "ipbreason": "دلیل:",
+ "ipb-hardblock": "دیمگیری شه ایڈیٹ کورتین ئا کار زوروکانئ که شه آی پی نیمگا راجستر بوته انت",
+ "ipbcreateaccount": "دیمگیری شه حسابئ جوڑ کورتینا",
+ "ipbemailban": "دیمگیری شه ایمیلی دیم داتینا",
+ "ipbsubmit": "ای کار زوروک بسته بیئت",
+ "ipbother": "دیگه وخت:",
+ "ipboptions": "۲ سائت:2 hours,۱ روچ:1 day,۳ روچ:3 days,۱ هپتگ:1 week,۲ هپتگ:2 weeks,۱ ماه:1 month,۳ ماه:3 months,۶ ماه:6 months,۱ سال:1 year,بی‌پایان:infinite",
+ "ipbhidename": "چیهرداتین کار زوروکئ ناما شه ایڈیٹان و لیستا",
+ "ipbwatchuser": "ای کار زوروکئ ، کارزوروکین و حبر وگپ ئی دیمانی دیستین",
+ "ipb-disableusertalk": "دیمگیری کورتین شه ایڈیٹ کورتین ئا گپ و حبر ئی تاکدیمئ شه کار زوروکئ جیندئ نیمگا وختی که آ بلاک اینت",
+ "ipb-change-block": "کار زوروکئ پدا بلاک کورتین گۆ ای تنظیماتان",
+ "ipb-confirm": "بستینئ تائید کورتین",
+ "badipaddress": "آی‌پی نامجازین ادرس",
+ "blockipsuccesssub": "بستین گو کامیابیا انجام بوت",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] بسته بوت.<br />\nپه بلاک یا بسته بوته ئین نانی خاتیرا [[Special:BlockList|ای جاه]] ئا بگیندیت.",
+ "ipb-blockingself": "شما وترا بئ بلاک کورتین ئی حالا هستیت! آیا شما موتمئین هستیت که لۆٹیت ایرنگین کاری بکنیت؟",
+ "ipb-edit-dropdown": "بلاک ئی دلیلانی ایڈیٹ کورتین",
+ "ipb-unblock-addr": " $1 پاچ کورتین",
+ "ipb-unblock": "کار زوروکئ یا آی پی ادرس ئی بلاک ئی پاچ کورتین",
+ "ipb-blocklist": "موجودین بلاک ئی دیستین",
+ "ipb-blocklist-contribs": "مشارکتان په {{GENDER:$1|$1}}",
+ "unblockip": "کار زوروکئ انبلاک یا پاچ کورتین",
+ "ipusubmit": "ای بلاک ئی پاک کورتین",
+ "unblocked": "[[User:$1|$1]] ئی دسترسی پدا پئال بوت",
+ "unblocked-range": "$1 پاچ بوت",
+ "unblocked-id": "بلاک شماره $1 الاس بوت",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] انبلاک بوت.",
+ "blocklist": "بلاک بوته ئین کار زوروکان",
+ "ipblocklist": "بلاک بوته ئین کار زوروکان",
+ "ipblocklist-legend": "گشتین په بلاک بوته ئین کار زوروکا",
+ "blocklist-userblocks": "چیهرداتین بسته بوتین ئانی حسابئ",
+ "blocklist-tempblocks": "موقتین بستینانی چیهرداتین",
+ "blocklist-addressblocks": "چیهرداتین یک آی پی بسته بوته ئین",
+ "blocklist-rangeblocks": "رینج ئی بلاک هانئ چیهرداتین",
+ "blocklist-timestamp": "وختی برچسپ",
+ "blocklist-target": "هدف",
+ "blocklist-expiry": "الاسی وخت",
+ "blocklist-by": "بلاک کورتین ئی مدیر",
+ "blocklist-params": "بلاک ئی پارامیتران",
+ "blocklist-reason": "دلیل",
+ "ipblocklist-submit": "گشتین",
+ "ipblocklist-localblock": "محلین دسترسی ئی بستین",
+ "ipblocklist-otherblocks": "دیگرین {{PLURAL:$1|بستین‌هان|بستین‌هان}}",
+ "infiniteblock": "بی‌پایان",
+ "expiringblock": "بئ $1 سائت $2 ئا الاس ئه بێت",
+ "anononlyblock": "فقط زیان نامین کار زوروکان",
+ "noautoblockblock": "اوتوماتیکبلاک غیرفعال اینت",
+ "createaccountblock": "حسابئ جوڑ کورتینئ قابلیت غیر پئال بوت",
+ "emailblock": "ایمیل بسته بوته",
+ "blocklist-nousertalk": "وتئ گپ ئی تاکدیما نتوان ایڈیٹ کورت",
+ "ipblocklist-empty": "بسته بوته ئین ئانی لیست خالی اینت.",
+ "blocklink": "بلاک یا بستین",
+ "unblocklink": "پاچ یا انبلاک بێت",
+ "change-blocklink": "بلاک ئی تغیرداتین",
+ "contribslink": "مشارکت ئان",
+ "emaillink": "ایمیلی دیم داتین",
+ "blocklogpage": "کورمئ بستین",
+ "blocklogentry": "«[[$1]]» ئا تا $2 بست $3",
+ "unblocklogentry": "$1 ئا پاچ کورت",
+ "block-log-flags-anononly": "فقط زیان نامین کار زوروکان",
+ "block-log-flags-nocreate": "حسابئ جوڑ کورتینئ قابلیت غیر پئال بوت",
+ "block-log-flags-noautoblock": "اوتوماتیکبلاک غیرفعال اینت",
+ "block-log-flags-noemail": "ایمیل بسته بوته",
+ "block-log-flags-nousertalk": "وتئ گپ ئی تاکدیما نتوان ایڈیٹ کورت",
+ "block-log-flags-angry-autoblock": "پیشرفته ئین اتوماتیکین بلاک فعال بوت",
+ "block-log-flags-hiddenname": "چیهرین کار زوروکئ نام",
+ "ipb_expiry_invalid": "الاسی وخت صحیح نه اینت.",
+ "ipb_expiry_temp": "چیهرین کارزوروکانی دسترسی قه تی کورتین یا بلاک باید همیشگی بیئت .",
+ "ipb_hide_invalid": "ای هیساب ئی سرکوب کورتین امکان نداریت; ای گیشتیر شه {{PLURAL:$1|یک ایڈیٹ|$1 ایڈیٹان}} داریت.",
+ "ipb_already_blocked": "«$1» همی انون بسته بوته",
+ "ipb-needreblock": " $1 ئی دسترسی شه دیما بسته بسته بوته . آیا لوٹیت که آیی تنزیماتان تغیر ب دهیت؟",
+ "ipb-otherblocks-header": "دیگرین {{PLURAL:$1|بلاک|بلاک ئان}}",
+ "unblock-hideuser": "په ای خاتیرا که ای کار زوروکی هیساب چیهرداته بوته شما ئه نه توانیت آیرا پاچ بکنیت.",
+ "ipb_cant_unblock": "خه تا: $1 ئی بلاک آی ڈی ودی نه بوت . ممکن اینت که دیمتیرا پاچ بوته بیت.",
+ "ip_range_invalid": "ناموتبرین آی پی ئی رینج",
+ "ip_range_toolarge": "بلاک کورتین ئی رینج ٹوُتیر شه /$1 ئا مجاز نه اینت.",
+ "proxyblocker": "پروکسی ئی بلاک کنۆک",
+ "ipbnounblockself": "شما په وتی آنبلاک یا پاچ کورتین ئا اجازه نه داریت.",
+ "lockdb": "مئلوماتئ بانکی قُلپ کورتین",
+ "unlockdb": "مئلوماتئ بانکی قُلپئ پروشتێن",
+ "lockconfirm": "هان، من جدآن لوٹین که مئلومانئ بانکا قُلپ کنین.",
+ "unlockconfirm": "هان، من جدآن لوٹین که مئلوماتئ بانکی قُلپا پاچ کنین.",
+ "lockbtn": "مئلوماتئ بانکی قُلپ کورتین",
+ "unlockbtn": "مئلوماتئ بانکی قُلپئ پروشتێن",
+ "locknoconfirm": "شما بئ تائیدی جئبه ئی تا چیک مه جنیت",
+ "lockdbsuccesssub": "مئلوماتئ بانک قُلپ بوت",
+ "unlockdbsuccesssub": "مئلوماتئ بانکئ قُلپ پاچ بوت",
+ "lockdbsuccesstext": "مئلوماتئ بانک قُلپ بوت.\n<br />شه هوشا مه برێیت که پد شه الاس بوتینا قُلپا پاچ بکنیت.",
+ "unlockdbsuccesstext": "مئلوماتئ بانکی قُلپ پاچ بوت.",
+ "databasenotlocked": "مئلوماتئ بانک قُلپ نه اینت.",
+ "lockedbyandtime": "(بواسطه $1 ئا بئ $2 سائت $3)",
+ "move-page": "انتقال $1",
+ "move-page-legend": "تاکدیمی انتقال",
+ "movearticle": "تاکدیمی انتقال:",
+ "movenotallowed": "شما په تاکدیمانی جابجا کورتین ئی اجازه ئا نداریت.",
+ "movenotallowedfile": "شما په پایل ئانی جابجا کورتین ئی اجازه ئا نداریت.",
+ "cant-move-category-page": "شما په تهرئانی تاکدیمانی جابجا کورتین ئا اجازه نداریت.",
+ "cant-move-to-category-page": "شما په تهری یک دیم په دیگه دیمی جابیجا کورتینا اجازه نداریت.",
+ "newtitle": "گۆ نوکین ئنوانا:",
+ "move-watch": "دیستین مخسد و زهی دیمانی",
+ "movepagebtn": "تاکدیمی انتقال",
+ "pagemovedsub": "جابجایی گۆ کامیابیا بوت",
+ "movepage-moved": "'''«$1» بئ «$2» انتقال بوت'''",
+ "movepage-moved-redirect": "یک تغیرمسیر جۆڑ بوت.",
+ "movepage-moved-noredirect": "شه تغیرمسیر ئا دیمگیری بوت.",
+ "articleexists": "یک دیمی گۆ ای ناما شه دیما موجود اینت، یا نامی که شما انتخاب کورته ایت موتبر نه اینت.\nمهربانی بکنیت دیگه نامی انتخاب بکنیت.",
+ "movetalk": "حبر و گپ ئی دیم جابجا بیئت",
+ "move-subpages": "گۆنڈ دیمانی انتقال (تا $1 دیم)",
+ "move-talk-subpages": "حبر وگپ ئی گۆنڈ دیمانی انتقال (تا $1 دیما)",
+ "movepage-page-exists": "$1 ئی تاکدیم شه دیما موجود اینت ، نه توان که آیرا بئ اوتوماتیکین رقما جایگیر بکنت.",
+ "movepage-page-moved": "$1 ئی دیم بئ $2 ئا انتکا بوت.",
+ "movepage-page-unmoved": "$1 ئی دیما نتوان که بئ $2 ئا جابجا کورت.",
+ "movelogpage": "انتقال ئی سیاهه",
+ "movelogpagetext": "بئ جهلگا لیستی شه انتقال ئی دیمانی آته.",
+ "movesubpage": "{{PLURAL:$1|گۆنڈدیم|گۆنڈدیم هان}}",
+ "movenosubpage": "ای تاکدیم هیچ گۆنڈدیم ئی نداریت.",
+ "movereason": "دلیل:",
+ "revertmove": "بیرگردینتین",
+ "delete_and_move": "پاک کورتین یا جابیجا",
+ "delete_and_move_confirm": "هان،تاکدیم پاک بیئت",
+ "delete_and_move_reason": "پاک کورتین «[[$1]]» جابجایی امکانا",
+ "immobile-source-page": "ای دیم جابیجا ئه نه بیئت.",
+ "immobile-target-page": "انتقال ئی امکان په ای ئنوانا موجود نه اینت.",
+ "move-leave-redirect": "بئ جا ایشتین یک تغیری مسیر ئی",
+ "export": "ڈن کورتین تاکدیمانئ",
+ "exportall": "ڈن کورتین موچین تاکدیمانئ",
+ "exportcuronly": "فقط انونین نخسه شامل بیئت، نه موچین تاریخچه",
+ "export-submit": "دَر کورتین",
+ "export-addcattext": "افاضه کورتین تاکدیمان شه تهر ئا:",
+ "export-addcat": "اڈ\tڈ\t کورتین",
+ "export-addnstext": "تاکدیمانی ایزاپه کورتین شه نامی فصای:",
+ "export-addns": "اڈ\tڈ\t کورتین",
+ "export-download": "ذخیره کورتین بئ فایلئ رقما",
+ "export-templates": "شامل بوتین تراشوانانئ",
+ "export-pagelinks": "شامل بوتین لینک بوته ئین تاکدیمان تا ای جُهلی ئا:",
+ "allmessages": "سیستم ئی پیام",
+ "allmessagesname": "نام",
+ "allmessagesdefault": "پیامی پیش فرضین متن",
+ "allmessagescurrent": "پیامی انونین متن",
+ "allmessages-filter-legend": "فیلتر",
+ "allmessages-filter": "فیلترکورتین بئ اساس ئی شخصی کورتین ئی وزیئتا:",
+ "allmessages-filter-unmodified": "تغیر نه کورته",
+ "allmessages-filter-all": "موچ",
+ "allmessages-filter-modified": "تغیر نه کورته",
+ "allmessages-prefix": "فیلتر کورتین بئ اساس پدوند:",
+ "allmessages-language": "زبان:",
+ "allmessages-filter-submit": "برا",
+ "allmessages-filter-translate": "ترجمه",
+ "thumbnail-more": "ٹُوه کورتین",
+ "filemissing": "فایل وجود نداریت",
+ "thumbnail_error": "خطا بئ ناحُنی ئی جۆڑ کورتین ئی وختا: $1",
+ "thumbnail_error_remote": "خطای پیام $1 :\n$2",
+ "djvu_page_error": "DjVu دیم خارج مجازین محدوده ئا",
+ "djvu_no_xml": "XML ئی فایلی ودی کورتین ئی امکان په DjVu ئی استفاده کورتین ئا وجود نداشت.",
+ "thumbnail-temp-create": "نتوان که موقتین ناحُنی ئین فایلی جۆڑ کورت",
+ "thumbnail-dest-create": "نه توان که ناحُنی ئین اکس ئا بئ وتي مخصد ئی جاه تا ذخیره کورت",
+ "thumbnail_image-missing": "بی نظر ئه رسیت فایل زیان بوته: $1",
+ "import": "تاکدیمانێ بێ تێ کورتین",
+ "importinterwiki": "بي تئ رییتین ترانس ویکی ئی",
+ "import-interwiki-sourcewiki": "ویکی زێ منشا:",
+ "import-interwiki-sourcepage": "تاکدیمئ منشا:",
+ "import-interwiki-history": "ای تاکدیمی موچین تاریخچه ئی نخسه انتقال داته بوتنت",
+ "import-interwiki-templates": "موچین تراشوانانا شامل بیئت",
+ "import-interwiki-submit": "بێ تێ کورتین",
+ "import-interwiki-namespace": "نامی فضای مخصد:",
+ "import-interwiki-rootpage": "مخصدی دیمی ریشگ (اختیاری):",
+ "import-upload-filename": "فایلئ نام:",
+ "import-comment": "کومنیت:",
+ "importstart": "تاکدیمانی بي تئ ریتینی حالا...",
+ "import-revision-count": "$1 {{PLURAL:$1|نخسه|نخسه}}",
+ "importnopages": "هیچ تاکدیمی په ایمپورت ئا نه اینت.",
+ "importfailed": "ایمپورت شکست وارت: <nowiki>$1</nowiki>",
+ "importunknownsource": "بُنریچی ئی رقم مئلوم نه اینت",
+ "importbadinterwiki": "بدئین انتیرویکی ئی لینک",
+ "importsuccess": "بي تی ریتین یا ایمپورت بوت!",
+ "import-upload": "اکس ام ال ئی دیتای بُرز کورتین",
+ "importlogpage": "ایمپورت لوگ",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} وارد بوته",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} داخل بوته شه $2",
+ "javascripttest": "جاوا اسکریپتی آزمایش",
+ "javascripttest-pagetext-noframework": "ای تاکدیم په جاوا اسکریپتی آزمایشی خاتیرا ایشته بوته.",
+ "javascripttest-pagetext-unknownaction": "نازانتین اکشن \"$1\".",
+ "javascripttest-pagetext-skins": "پوسته‌ای ئا په آزمایشانی اجرا ئا انتخاب کنیت:",
+ "javascripttest-qunit-intro": "[$1 آزمایشی مشتندانا] بئ mediawiki.org تا بگیندیت.",
+ "tooltip-pt-userpage": "شمی کار زوروکئ تاکدیم",
+ "tooltip-pt-mytalk": "شمی هبر و گپئ تاکدیم",
+ "tooltip-pt-preferences": "نئ تنظیمات",
+ "tooltip-pt-watchlist": "آ دیمانی لیست که شما آوانی تغیرانا پدگیری ئا کنیت",
+ "tooltip-pt-mycontris": "شمی شراکت ئانی لیست",
+ "tooltip-pt-login": "توصیه ئه کنن که بئ سایٹ ئی تا داخل بئیت. اگرچه که ای کار په جبر و زور نه اینت",
+ "tooltip-pt-logout": "در بوتین",
+ "tooltip-pt-createaccount": "شه شما ئه لوٹن که په وت یک کار زوروکئ حساب ئی جۆڑ بکنیت و بئ سایٹ ئی تا داخل بئیت؛هرچینکه که ای کار جبری نه اینت",
+ "tooltip-ca-talk": "ای دیمی محتوا ئانی باره ئا حبر و گپ",
+ "tooltip-ca-edit": "شما ئا توانیت که ای دیما ایڈیٹ بکنیت. مهربانی بکنیت دیم شه ایشی که ای دیما ذخیره بکنیت، شه دیم دیست ئا استفاده بکنیت.",
+ "tooltip-ca-addsection": "نوکین بخشی جۆڑ بکنیت",
+ "tooltip-ca-viewsource": "ای تاکدیم قُلپ بوته.\nفقط توانیت که آیی زي و منشائا بگیندیت",
+ "tooltip-ca-history": "ای تاکدیمی دیمین نخسه ئان",
+ "tooltip-ca-protect": "ای تاکدیمئ قُلپ کورتین",
+ "tooltip-ca-unprotect": "ای تاکدیمی قُلپئ ٹگل داتین",
+ "tooltip-ca-delete": "پاک کورتین ای تاکدیمئ",
+ "tooltip-ca-undelete": "بیئرگردینتین ڈیلیٹ بوته ئین تاکدیمی نسخه ئانی",
+ "tooltip-ca-move": "ای تاکدیمی انتقال",
+ "tooltip-ca-watch": "اضافه کورتین ای تاکدیمی بی نی واچلیستی تا",
+ "tooltip-ca-unwatch": "ڈیلیٹ کورتین ای تاکدیمی شه نی واچلیستی لڑ لیستا",
+ "tooltip-search": "گشتین بی {{SITENAME}}",
+ "tooltip-search-go": "اگه امکان داشته بیئت تاکدیمی تا گو ای ناما برا",
+ "tooltip-search-fulltext": "گشتین په ای کلمه ئی خاتیرا بی تاکدیمانی تا",
+ "tooltip-p-logo": "بُنیاد ئین تاکدیمی دیستین",
+ "tooltip-n-mainpage": "بُنیاد ئین تاکدیمی دیستین",
+ "tooltip-n-mainpage-description": "بُنیاد ئین تاکدیمی دیستین",
+ "tooltip-n-portal": "بی پروژه ئی موریدا٬ آنچه که توانیت انجام دهیت و ای که چی چیزی ئا شه گوجا ودی بکنیت",
+ "tooltip-n-currentevents": "پدزمینه ئین مئلوماتئ بدست آورتین شه انونین رویداد ئان",
+ "tooltip-n-recentchanges": "ویکی ئی آخیرین تغیرايانی لڑ لیست",
+ "tooltip-n-randompage": "یک تصادفی ئین دیمی آورتین",
+ "tooltip-n-help": "جای په ودی کورتین ئا",
+ "tooltip-t-whatlinkshere": "موچین تاکدیمانی لڑ لیست که گۆ ای دیما لینک وارته انت",
+ "tooltip-t-recentchangeslinked": "تاکدیمانئ آخیرین تغیران که ای دیم گۆ آوان لینک داریت",
+ "tooltip-feed-atom": "اتم ئی حبرنامه په ای دیما",
+ "tooltip-t-contributions": "ای کار زوروکئ شراکتانی لڑ لیست",
+ "tooltip-t-emailuser": "په ای کار زوروکا ایمیل ئی دیم داتین",
+ "tooltip-t-info": "ای دیمی باره ئا گیشتیرین مئلومات",
+ "tooltip-t-upload": "فایلی بُرز کورتین",
+ "tooltip-t-specialpages": "لیستئ شه موچین خاصین تاکدیمانی",
+ "tooltip-t-print": "ای دیمی چاپ ئی وڑ ئین نخسه",
+ "tooltip-t-permalink": "شه تاکدیما ثابت ئین لینک په ای نخسه ئا",
+ "tooltip-ca-nstab-main": "تاکدیمێ محتویاتێ دیستین",
+ "tooltip-ca-nstab-user": "کارزوروکین تاکدیمی دیستین",
+ "tooltip-ca-nstab-media": "میدیایی تاکدیمێ دیستین",
+ "tooltip-ca-nstab-special": "ای یک خاصین تاکدیمی است٬ شما ئه توانیت که ای تاکدیما ایڈیٹ بکنیت",
+ "tooltip-ca-nstab-project": "پروژه ئی تاکدیمی دیستین",
+ "tooltip-ca-nstab-image": "دیستین فایلی تاکدیمی",
+ "tooltip-ca-nstab-mediawiki": "سیستم ئی پیامانی دیستین",
+ "tooltip-ca-nstab-template": "دیستین تراشوانئ",
+ "tooltip-ca-nstab-help": "دیستین کومکی تاکدیمئ",
+ "tooltip-ca-nstab-category": "دیستین تهری تاکدیمی",
+ "tooltip-minoredit": "ای ایڈیٹ ئا گۆنڈ ایڈیٹ نشانگ کن",
+ "tooltip-save": "وتئ تغیرانا ذخیره بکنیت",
+ "tooltip-preview": "شمی تغیرانی دیم دیست، مهربانی بکنیت دیما شه تاکدیمی ذخیره کورتینا شه ای کیلی ئا استفاده بکنیت.",
+ "tooltip-diff": "شمی تغیرانی نمایش که شما بئ متن ئی تا داته ایت.",
+ "tooltip-watchlistedit-normal-submit": "ئنوانانی پاک کورتین",
+ "tooltip-watchlistedit-raw-submit": "واچلیست ئی اپڈیٹ",
+ "tooltip-recreate": "پداجۆڑ کورتین تاکدیمی نه دیستین ایشیرا که ای تاکدیم دیما پاک بوته",
+ "tooltip-upload": "بُرز کورتینی شرو",
+ "tooltip-rollback": "«بیئرگردینتین» ای دیمی آخیرئین ایڈیٹ کنۆک ئی ایڈیٹ(هان) گۆ یک کلیک ئا.",
+ "tooltip-preferences-save": "تنظیماتانی ذخیره کورتین",
+ "tooltip-summary": "خلاصه ئا داخل بکنیت",
+ "anonymous": "زیان نامین {{PLURAL:$1|کار زوروک|کار زوروکان}} شه {{SITENAME}}",
+ "siteuser": "$1، کار زوروک {{SITENAME}}",
+ "anonuser": "$1 نا دروست ئین کار زوروک {{SITENAME}}",
+ "lastmodifiedatby": "ای تاکدیم آخرین وارا بی $2، $1 بی $3 دستا تغییر داته بوته.",
+ "othercontribs": "بئ اساس اثر ئی شه $1 ئا",
+ "others": "دیگران",
+ "siteusers": "$1، {{PLURAL:$2|کار زوروک|کار زوروکان}} {{SITENAME}}",
+ "anonusers": " {{SITENAME}} نادروست ئین {{PLURAL:$2|کار زوروک|کار زوروکان}} $1",
+ "creditspage": "ای تاکدیمی کریدیت ئان",
+ "nocredits": "ای تاکدیمی جۆڑ کنۆک ئی مئلومات موجود نه انت.",
+ "spamprotectiontitle": "سپم ئانی فیلترینگ",
+ "spambot_username": "میدیا ویکی ئی تمیزکاری شه سپم هان",
+ "spam_reverting": "بیئرگردینتین آخیرین نخسه ئی که بئ $1 ئا لینک نداریت.",
+ "spam_deleting": "موچین نخسه ئان که گۆ\t $1 ئا لینک انتت، بئ پاک کورتین حالا",
+ "simpleantispam-label": "انتی-سپم ئی چیک .\nای قسمت ئا پُر '''مه کنیت'''!",
+ "pageinfo-title": "مئلومات په «$1» ئا",
+ "pageinfo-header-basic": "بُنادین مئلومات",
+ "pageinfo-header-edits": "تاریخچه ئی ایڈیٹ",
+ "pageinfo-header-restrictions": "ساتیتین تاکدیمئ",
+ "pageinfo-header-properties": "تاکدیمی خاص ئین ئان",
+ "pageinfo-display-title": "ئنوان ئی نشان داتین",
+ "pageinfo-default-sort": "پیش فرضین مرتب کنوکین کیلی",
+ "pageinfo-length": "تاکدیمی حجم (بایٹ)",
+ "pageinfo-article-id": "تاکدیمی آی دی",
+ "pageinfo-language": "تاکدیمی محتوایی زبان",
+ "pageinfo-content-model": "تاکدیمی محتوایی جۆڑیشت",
+ "pageinfo-robot-policy": "لڑلیست کورتین شه رباتانی نیمگا",
+ "pageinfo-robot-index": "مجاز",
+ "pageinfo-robot-noindex": "نامجاز",
+ "pageinfo-watchers": "تاکدیمی دیدار کنۆکانی اندازگ",
+ "pageinfo-few-watchers": "کمتیر شه $1 {{PLURAL:$1| دیدار|دیدار}}",
+ "pageinfo-redirects-name": "تغیرمسیرانی اندازگ په ای تاکدیما",
+ "pageinfo-subpages-name": "ای گۆنڈ دیم ئی تاکدیمانی اندازه گ",
+ "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|تغییرمسیر|تغییرمسیر}}; $3 {{PLURAL:$3|غیرتغییرمسیر|غیرتغییرمسیر}})",
+ "pageinfo-firstuser": "ای تاکدیمئ جوڑ کنوک",
+ "pageinfo-firsttime": "ای تاکدیمئ جوڑ کورتینی وخت",
+ "pageinfo-lastuser": "آخرین ایڈیٹ کنوک",
+ "pageinfo-lasttime": "آخرین ایڈیٹئ تاریخ",
+ "pageinfo-edits": "موچین ایڈیٹانئ اندازه گ",
+ "pageinfo-authors": "موچین نویسوکانئ اندازه گ",
+ "pageinfo-recent-edits": "آخیرئین ایڈیٹانی اندازگ (بئ $1 دیما)",
+ "pageinfo-recent-authors": "یکی ئین آخیرین نویسوکان اندازگ",
+ "pageinfo-magic-words": "{{PLURAL:$1|حرف|حروف}} جادویی ($1)",
+ "pageinfo-hidden-categories": "چیهرین {{PLURAL:$1| تهر|تهر هان}} ( $1 )",
+ "pageinfo-templates": "{{PLURAL:$1|تراشوان|تراشوان}} استفاده‌ بوته ($1)",
+ "pageinfo-transclusions": "{{PLURAL:$1|تاکدیم|تاکدیمان}} ترانسکلوڈ بوتگ بئ ($1) تا",
+ "pageinfo-toolboxlink": "تاکدیمئ مئلومات",
+ "pageinfo-redirectsto": "تغییر مسیر بی",
+ "pageinfo-redirectsto-info": "مئلومات",
+ "pageinfo-contentpage": "هیساب بوته بئ ئنوان مهتوائین دیمی",
+ "pageinfo-contentpage-yes": "هان",
+ "pageinfo-protect-cascading-yes": "هان",
+ "pageinfo-category-info": "تهری مئلومات",
+ "pageinfo-category-pages": "تاکدیمانی نمبر",
+ "pageinfo-category-subcats": "گۆنڈ تهرئانی اندازه گ",
+ "pageinfo-category-files": "فایلانی اندازگ",
+ "markaspatrolleddiff": "گشت وارته ئین ئانی برچسپ جتین",
+ "markaspatrolledtext": "بئ دیما گشت وارته ئین ئی برچسپ بجن",
+ "markedaspatrolled": "گشت وارته ئی برچسپ جته بوت",
+ "markedaspatrolledtext": "بئ انتخاب بوته ئین نخسه شه [[:$1]] ئا گشت وارته ئین مارک جه ته بوت.",
+ "rcpatroldisabled": "آخیرئین تغیرائانی مارک جه تین غیرپئال اینت",
+ "markedaspatrollederror": "گشت وارته ئی برچسپ جته نه بوت",
+ "markedaspatrollederrortext": "یک نخسه ئی را نشانی بکنیت تا مارک بۆارت.",
+ "markedaspatrollederror-noautopatrol": "شما توانیت وتي تغیرائانه مارک بجنیت.",
+ "markedaspatrollednotify": "ای تغیر بئ $1 سرا مارک وارت.",
+ "markedaspatrollederrornotify": "گشت وارته ئی برچسپ جتین ناکام ات.",
+ "patrol-log-page": "گشتئ سیاه چال",
+ "patrol-log-header": "ای سیاهه شه گشت وارته ئین ایڈیٹ ئان است.",
+ "log-show-hide-patrol": "$1 گشت جنوکین سیاهه",
+ "deletedrevision": "$1 قدیمی پاک بوته ئین نخسه ئی است",
+ "filedeleteerror-short": "خطا بئ فایلی پاک کورتین: $1",
+ "filedeleteerror-long": "بی پدا پاک کورتین ئی وختا خطا رخ دات:\n\n$1",
+ "previousdiff": "→دیمتیرین ئی فرق",
+ "nextdiff": "نۆکتیرین ئی فرق ←",
+ "mediawarning": "'''هشدار''': ای فایل ممکن اینت که شه خراب ئین کودئان داشته بئیت .\nگۆ آوانی اجرا کورتین ئا ممکن اینت که بئ شمی کمپیوترا تاوان برسیت.",
+ "thumbsize": "ناهُنی ئین بند ئی اندازه گ:",
+ "widthheightpage": "$1×$2، $3 {{PLURAL:$3|تاکدیم|تاکدیم}}",
+ "file-info": "فایلئ اندازه گ: $1، نوع MIME $2",
+ "file-info-size": "<span dir=\"ltr\">$1 × $2</span> پیکسل، فایلئ اندازه گ: $3، نوع MIME فایلئ: $4",
+ "file-info-size-pages": "<span style=\"direction:ltr\">$1 × $2</span> نقطه، فایلئ حجم: $3، نوع MIME فایل: $4، $5 تاکدیم",
+ "file-nohires": "گیشتیرین تفکیک پذیری بئ دسترس ئا نه اینت.",
+ "svg-long-desc": "اس‌وی‌جی ئی فایل، گۆ\t ابئاد <span dir=\"ltr\">$1 × $2</span> پیکسل، فایل اندازه گ: $3",
+ "svg-long-error": "SVG ئی فایل ناجایز اینت: $1",
+ "show-big-image": "اورجینال ئین فایل",
+ "show-big-image-preview": "ای دیم دیست ئی اندازه گ: $1.",
+ "show-big-image-other": "دیگرین {{PLURAL:$2|کیفیت|کیفیت‌هان}}: $1.",
+ "show-big-image-size": "<span dir=\"ltr\">$1 × $2</span> پیکسل",
+ "file-info-gif-looped": "چرخش‌دار",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|قاب|قاب}}",
+ "file-info-png-looped": "چرخش‌دار",
+ "file-info-png-repeat": "$1 {{PLURAL:$1|وار|وار}} پخش بوت",
+ "file-info-png-frames": "$1 {{PLURAL:$1|قاب|قاب}}",
+ "newimages": "نوکین فایلانی البوم",
+ "newimages-summary": "ای تاکدیم خاص په آخیرئین فایلان اینت که بُرز بوته انت.",
+ "newimages-legend": "فیلتر",
+ "newimages-label": "فایلی نام (یا قسمتی شه آیی):",
+ "newimages-showbots": "نشان داتین بُرز بوته ئین گۆ روبات ئا",
+ "noimages": "چیزی په دیستینا نه اینت.",
+ "ilsubmit": "گشتین",
+ "bydate": "شه تاریخی رُوگا",
+ "sp-newimages-showfrom": "نشان‌داتین نۆکین اکسانی شه $2، $1 بئ بعد",
+ "seconds": "{{PLURAL:$1|$1ثانیه| $1 ثانیه}}",
+ "minutes": "{{PLURAL:$1|دقیقه|دقیقه}}",
+ "hours": "{{PLURAL:$1|سائت|سائت}}",
+ "days": "{{PLURAL:$1|روچ|روچ}}",
+ "weeks": "{{PLURAL:$1|$1 هپتگ|$1 هپتگ ئان}}",
+ "months": "{{PLURAL:$1|$1 ماه|}}",
+ "years": "{{PLURAL:$1|$1 سال|$1 سال ئان}}",
+ "ago": "$1دیما",
+ "just-now": "همی انون",
+ "hours-ago": "$1 سائت دیما",
+ "minutes-ago": "$1 دقیقه دیما",
+ "seconds-ago": "$1 {{PLURAL:$1|ثانیه|ثانیه}} دیما",
+ "monday-at": "دوشنبی $1",
+ "tuesday-at": "سه‌شنبی $1",
+ "wednesday-at": "چهارشنبی $1",
+ "thursday-at": "پنج‌شنبی $1",
+ "friday-at": "جوما $1",
+ "saturday-at": "بی شنبی $1",
+ "sunday-at": "یک‌شنبی $1",
+ "yesterday-at": "زئ بی $1",
+ "metadata": "فرادیتا",
+ "metadata-expand": "تپسیلی ئین مالوماتی نشان داتین",
+ "metadata-collapse": "تپسیلی ئین مالوماتی چیهرداتین",
+ "metadata-fields": "ای پیامی تا اکس ئی میتادیتا نشان داته بوته و وختی که میتادیتا ئی لیست جم بیئت هم نشان داته ئه بیئت . دیگه موارید تانا وختی نشان داته ئه بیئنت که جدول پاچ بیئت.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "exif-imagewidth": "گوور، عرض",
+ "exif-imagelength": "تَچکي",
+ "exif-bitspersample": "نقطه بئ هر جز ئی تا",
+ "exif-compression": "پرینچیتینوکین شیما",
+ "exif-photometricinterpretation": "ٹیک ئانی ترکیب",
+ "exif-orientation": "نیمگ ، جهت",
+ "exif-samplesperpixel": "اجزائانی اندازه گ",
+ "exif-planarconfiguration": "دیتا ئی آرایش",
+ "exif-ycbcrsubsampling": "جه هل نمونگ نسبت Y بئ C",
+ "exif-ycbcrpositioning": "Y و C موقیعتان",
+ "exif-xresolution": "افقی ئین تفکیک پذیری",
+ "exif-yresolution": "عمودین تفکیک پذیری",
+ "exif-stripoffsets": "اکس ئی دیتای جاگه",
+ "exif-rowsperstrip": "ردیپ هانی اندازگ بئ هر نواری تا",
+ "exif-stripbytecounts": "بایت بئ هر پریننچیته بوته ئین نواری تا",
+ "exif-jpeginterchangeformat": "جابه‌جایی نسبت بئ JPEG SOI",
+ "exif-jpeginterchangeformatlength": "بایٹ JPEG ئی دیتایی",
+ "exif-whitepoint": "سپیتین ٹیکئ رنگینی",
+ "exif-primarychromaticities": "اولویتانی رنگیری",
+ "exif-ycbcrcoefficients": "ماتریس ئی زرایب تبدیل رنگین په زایی",
+ "exif-referenceblackwhite": "سیاه و سپیتین مرجه ئانی اندازهگ",
+ "exif-datetime": "فایلی تغیر ئی وخت و تاریخ",
+ "exif-imagedescription": "اکسئ ئنوان",
+ "exif-make": "کامره ئی جۆڑ کنۆکین شرکت",
+ "exif-model": "کامره ئی موڈیل",
+ "exif-software": "استفاده بوته ئین ساپٹ ایر",
+ "exif-artist": "اکس گيروک/هنرمند",
+ "exif-copyright": "کاپی رایٹ ئی واوُند",
+ "exif-exifversion": "exif ئی نخسه",
+ "exif-flashpixversion": "Flashpix ئی پُشتیوانی بوته ئین نخسه",
+ "exif-colorspace": "رنگانئ فضا",
+ "exif-componentsconfiguration": "هریک شه مووله په ئانی مانا",
+ "exif-compressedbitsperpixel": "اکس ئی پشرده ئی هالت",
+ "exif-pixelydimension": "اکسئ گۆر",
+ "exif-pixelxdimension": "اکسئ بُرزی",
+ "exif-usercomment": "کار زوروکئ توضیحات",
+ "exif-relatedsoundfile": "مربوتین توارین پایل",
+ "exif-datetimeoriginal": "دیتائانی ودئ بوتین ئی تاریخ و وخت",
+ "exif-datetimedigitized": "دیجیتالی بوتین ئی وخت و تاریخ",
+ "exif-subsectime": "تاریخ و وختی کسر سانیه",
+ "exif-subsectimeoriginal": "اسلی ین وختی کسر سانیه",
+ "exif-subsectimedigitized": "دیجیتالین وختی کسر سانیه",
+ "exif-exposuretime": "نوردهگی وخت",
+ "exif-exposuretime-format": "$1 ثانیه ($2)",
+ "exif-fnumber": "اف ئی نمبر",
+ "exif-exposureprogram": "نوردهئ پروگرام",
+ "exif-spectralsensitivity": "طیفئ ئین حساسیت",
+ "exif-isospeedratings": "ایزو ئی سرعت ئی درجه بندی",
+ "exif-shutterspeedvalue": "شاتر ئی آپکس ئی سرعت",
+ "exif-aperturevalue": "دیافراگم آپکس ئی اندازه گ",
+ "exif-brightnessvalue": "آپکس روشنائی",
+ "exif-exposurebiasvalue": "نوردهئ خطا",
+ "exif-maxaperturevalue": "ڈگاری پراخی هد اکسه ر",
+ "exif-subjectdistance": "سوژه ئی فاصله",
+ "exif-meteringmode": "روشنایی سنجیش هالت",
+ "exif-lightsource": "نور ئی منشا",
+ "exif-flash": "پلاش",
+ "exif-focallength": "ئدسی ئی کانونین پاسیله",
+ "exif-subjectarea": "جسم ئی مساحت",
+ "exif-flashenergy": "پلاش ئی قدرت",
+ "exif-focalplanexresolution": "تفکیک‌پذیری X کانونی دیم",
+ "exif-focalplaneyresolution": "تفکیک‌پذیری Y کانونین دیم",
+ "exif-focalplaneresolutionunit": "کانونی دیمی تپکیک زورتین ئی واهید",
+ "exif-subjectlocation": "سوژه ئی مکان",
+ "exif-exposureindex": "نوردهگی شاخس",
+ "exif-sensingmethod": "هسگری روش",
+ "exif-filesource": "فایلئ منشا",
+ "exif-scenetype": "سه هنه ئی ره کم",
+ "exif-customrendered": "سه پاریشی ئی اکس ئی زوهور",
+ "exif-exposuremode": "نوردهگی هالت",
+ "exif-whitebalance": "سپیت ئین رنگی ته هادول (white balance)",
+ "exif-digitalzoomratio": "دیجیتالین نه زیننکی ئی نیسبت",
+ "exif-focallengthin35mmfilm": "کانونین پاسیله په ۳۵ میلی میترین پیلم ئا",
+ "exif-scenecapturetype": "سکن ئی کاپی تور ئی ره قم",
+ "exif-gaincontrol": "سه هنه ئی تنزیم",
+ "exif-contrast": "کنتراست",
+ "exif-saturation": "رنگئ بَزئ",
+ "exif-sharpness": "وضوح",
+ "exif-devicesettingdescription": "دستگاه ئی تنظیماتانی شرح",
+ "exif-subjectdistancerange": "سوژه پاسیله مهدوده",
+ "exif-imageuniqueid": "اکس ئی یونیک ئین آی ڈی",
+ "exif-gpsversionid": "جی‌پی‌اس ئی نخسه برچسپ",
+ "exif-gpslatituderef": "جوگراپیایین گۆور شمالی یا جنوبی",
+ "exif-gpslatitude": "جوگرافیایی ئین گۆر",
+ "exif-gpslongituderef": "جوگراپیایین تچکی روچ درات یا روچ کپت",
+ "exif-gpslongitude": "جوگرافیایی ئین تچکی",
+ "exif-gpsaltituderef": "ارتقائی مرجئهی ٹیک",
+ "exif-gpsaltitude": "بُرزئ",
+ "exif-gpstimestamp": "جی‌پی‌اس ئی وخت (اتمی ئین سائت)",
+ "exif-gpssatellites": "ایستیپاده بوته ئین ماهواره په اندازه گیری ئا",
+ "exif-gpsstatus": "گیرۆکی وزی ئت",
+ "exif-gpsmeasuremode": "اندازه گیری هالت",
+ "exif-gpsdop": "اندازه گیری ئی د قت",
+ "exif-gpsspeedref": "سورئت ئی یونی\tٹ",
+ "exif-gpsspeed": "جی پی اس ئی گیروکی سور ئه ت",
+ "exif-gpstrackref": "مرجه په هه رکت ئی نیمگا",
+ "exif-gpstrack": "هه رکت ئی نیمگ",
+ "exif-gpsimgdirectionref": "مرجه په اکس ئی نیمگا",
+ "exif-gpsimgdirection": "اکس ئی نیمه گ",
+ "exif-gpsmapdatum": "جیودیستک ئی نخشه برداری ئی مه لومات",
+ "exif-gpsdestlatituderef": "مرجه ئی په جوگراپیایین گۆور مخسدا",
+ "exif-gpsdestlatitude": "جوگراپیایی مخسدی گۆور",
+ "exif-gpsdestlongituderef": "مرجه ئی په جوگراپیایین تچکی مخسدا",
+ "exif-gpsdestlongitude": "مخسه د ئی جوغراپیائی تچکی",
+ "exif-gpsdestbearingref": "مرجه ئی په مخسدی نیمگا",
+ "exif-gpsdestbearing": "مخسدی نیمگ",
+ "exif-gpsdestdistanceref": "مرجه په پاسیله تا مخسدا",
+ "exif-gpsdestdistance": "پاسیله تا مخسه د ئا",
+ "exif-gpsprocessingmethod": "GPS ئی پروسیس ئی میتود ئی نام",
+ "exif-gpsareainformation": "جی‌پی‌اس ئی ناحیه ئی نام",
+ "exif-gpsdatestamp": "جی پی اس ئی تاریخ",
+ "exif-gpsdifferential": "جی‌پی‌اس کمی ئی تسهی کورتین",
+ "exif-jpegfilecomment": "JPEG ئی فایل ئی توزی ئات",
+ "exif-keywords": "کیبورد",
+ "exif-worldregioncreated": "منتیکه شه جهانا که اکس آدا گیپته بوته",
+ "exif-countrycreated": "ملکی نام که اکس آدا گیپته بوته",
+ "exif-countrycodecreated": "ملکی کود که اکس آدا گیپته بوته",
+ "exif-provinceorstatecreated": "ولایت یا ایالت که اکس آد گیپته بوته",
+ "exif-citycreated": "شاری که اکس آدا گیپته بوته",
+ "exif-sublocationcreated": "شاری یک بخش که اکس آدا گیپته بوته",
+ "exif-worldregiondest": "جهانئ منطقه نشان داته بوته",
+ "exif-countrydest": "مُلک نشان داته بوته",
+ "exif-countrycodedest": "مُلکی کود نشان داته بوته",
+ "exif-provinceorstatedest": "ولایت یا ایالت نشان داته بوته",
+ "exif-citydest": "شار نشان داته بوته",
+ "exif-sublocationdest": "شاری یک بخش نشان داته بوته",
+ "exif-objectname": "گۆنڈین ئینوان",
+ "exif-specialinstructions": "خاسین دستورئان",
+ "exif-headline": "ئنوان",
+ "exif-credit": "امتیاز يی واوند/پیش داروک",
+ "exif-source": "منشا",
+ "exif-editstatus": "اکسی تهریریه ئین وزی ئت",
+ "exif-urgency": "پوریت",
+ "exif-fixtureidentifier": "نشریه ئی ستون ئی نام",
+ "exif-locationdest": "اکس بوته ئین مئل",
+ "exif-locationdestcode": "اکس بوته ئین مئلی کود",
+ "exif-objectcycle": "ای روچی وخت که ای می\tڈیا په آیی بی نه زر گیپته بوته",
+ "exif-contact": "ته ماس ئی مه لومات",
+ "exif-writer": "نویسوک",
+ "exif-languagecode": "زبان",
+ "exif-iimversion": "IIM ئی نخسه",
+ "exif-iimcategory": "تهر",
+ "exif-iimsupplementalcategory": "تکمیلین تهر ئان",
+ "exif-datetimeexpires": "ایستیپاده شه تاریخ ئا",
+ "exif-datetimereleased": "منتشر بوته بی",
+ "exif-originaltransmissionref": "اسلی ئین مئل ئی جابجایی کود",
+ "exif-identifier": "شناسگ",
+ "exif-lens": "استفاده بوته ئین لینز",
+ "exif-serialnumber": "کامره ئی سریال نمبر",
+ "exif-cameraownername": "کامره ئی واوُند",
+ "exif-label": "برچسب",
+ "exif-datetimemetadata": "دی\tٹائی آخیرئین تغیرات",
+ "exif-nickname": "اکس ئی غیررسمی ئین نام",
+ "exif-rating": "امتیاز (شه 5)",
+ "exif-rightscertificate": "هه قوق ئی مدیریت ئی سه ر تیپی کی\tٹ",
+ "exif-copyrighted": "کاپی رایٹ ئی وزیئت",
+ "exif-copyrightowner": "کاپی رایٹ ئی واوُند",
+ "exif-usageterms": "استفاده ئی شرایط",
+ "exif-webstatement": "آنلاین کاپی رایت ئی جار",
+ "exif-originaldocumentid": "یونیک آی ڈی شه اسلین سندئان",
+ "exif-licenseurl": "انترنتی ادرس په کاپی رایٹی جواز ئا",
+ "exif-morepermissionsurl": "جایگزین ئین مالوماتانی جواز ئان",
+ "exif-attributionurl": "پدا ایستیپاده ئی وختا، مهربانی بکنیت لینک به دهیت په",
+ "exif-preferredattributionname": "پدا ایستیپاده ئی وختا، مهربانی بکنیت ائتیبار به دهیت په",
+ "exif-pngfilecomment": "PNG ئی فایلی شرح",
+ "exif-disclaimer": "تکذیب‌نامه",
+ "exif-contentwarning": "محتوایی هشدار",
+ "exif-giffilecomment": "GIF ئی فایلی شرح",
+ "exif-intellectualgenre": "مورید ئی رقم",
+ "exif-subjectnewscode": "موضو ئی کود",
+ "exif-scenecode": "IPTC سکن ئی کوڈ",
+ "exif-event": "هالت ئی که بئ اکس ئی تا نشان داته بوته",
+ "exif-organisationinimage": "نشان داته بوته ئین سازمان",
+ "exif-personinimage": "نشان داته بوته ئین شخس",
+ "exif-originalimageheight": "اکس ئی بُرزی دیم شه بوریتین ئا",
+ "exif-originalimagewidth": "اکس ئی گوور دیم شه بوریتین ئا",
+ "exif-compression-1": "غیرپشورده",
+ "exif-compression-3": "سی‌سی‌آی‌تی‌تی ئی نمبرئانی ۳ گروپ کودگذاری کورتین",
+ "exif-compression-4": "سی‌سی‌آی‌تی‌تی ئی نمبرئانی ۴ گروپ کودگذاری کورتین",
+ "exif-copyrighted-true": "کاپی رایت بوت",
+ "exif-copyrighted-false": "کاپی رایٹ ئی وزی ئت ته ئین نه بوته",
+ "exif-unknowndate": "نامئلومین تاریخ",
+ "exif-orientation-1": "نورمال",
+ "exif-orientation-2": "اوپۆکی ئین پۆشت و دیم بوته ئین",
+ "exif-orientation-3": "۱۸۰ درجه چرخ وارته",
+ "exif-orientation-4": "ئۆمودی ئین پۆشت و دیم بوته ئین",
+ "exif-orientation-8": "۹۰° سائتگرد چاوارته",
+ "exif-planarconfiguration-1": "په زورین قالب",
+ "exif-planarconfiguration-2": "دو دیمین پورمت",
+ "exif-colorspace-65535": "تنزیم نه بوته",
+ "exif-componentsconfiguration-0": "وجود نداریت",
+ "exif-exposureprogram-0": "تئریپ نه بوته",
+ "exif-exposureprogram-1": "دستی",
+ "exif-exposureprogram-2": "عادی ئین پروگرام",
+ "exif-exposureprogram-3": "دیاپراگم ئی اولویت",
+ "exif-exposureprogram-4": "شاتر ئی اولویت",
+ "exif-subjectdistance-value": "$1 متر",
+ "exif-meteringmode-0": "نامئلوم",
+ "exif-meteringmode-1": "میانگین",
+ "exif-meteringmode-2": "میانگین گو سنگین ئین مرکزا",
+ "exif-meteringmode-3": "یک ٹیکی",
+ "exif-meteringmode-4": "چینکه ٹیکئ",
+ "exif-meteringmode-5": "طرح‌والا",
+ "exif-meteringmode-6": "کم ئین",
+ "exif-meteringmode-255": "دیگرین",
+ "exif-lightsource-0": "نامئلوم",
+ "exif-lightsource-1": "روچی روشنائی",
+ "exif-lightsource-2": "فلورسانت",
+ "exif-lightsource-3": "تنگستن (نور بی گرمی ئا)",
+ "exif-lightsource-4": "پلاش",
+ "exif-lightsource-9": "جوانین هوا",
+ "exif-lightsource-10": "جمری ئین آسمان",
+ "exif-lightsource-11": "سیاهیگ",
+ "exif-lightsource-12": "ماهتاپئ بی روچئ تا (D 5700 – 7100K)",
+ "exif-lightsource-13": "سپیتین ماهتاپئ بئ روچئ تا (N 4600 – 5400K)",
+ "exif-lightsource-14": "سپیتین ماهتاپئ سرد (W 3900 – 4500K)",
+ "exif-lightsource-15": "سپیتین ماهتاپئ (WW 3200 – 3700K)",
+ "exif-lightsource-17": "A سٹاندارتین نور",
+ "exif-lightsource-18": "B سٹاندارتین نور",
+ "exif-lightsource-19": "C سٹاندارتین نور",
+ "exif-lightsource-24": "ISO ئی کارخانه ئي تنگستن ئی لامپ",
+ "exif-lightsource-255": "نور ئی دیگه منشا ئان",
+ "exif-flash-fired-0": "پلاش جته نه بوت",
+ "exif-flash-fired-1": "گو پلاش جتینا",
+ "exif-flash-return-2": "انئی کاسین روشنایی ودی نه بوت",
+ "exif-flash-return-3": "انئی کاسین روشنایی ودی نه بوت",
+ "exif-flash-mode-1": "اجبارین پلاش جتین",
+ "exif-flash-mode-2": "دیمگیری شه اجبارین پلاش جتین ئا",
+ "exif-flash-mode-3": "اوتوماتیکین هاله ت",
+ "exif-flash-function-1": "پلاش ئی ئملکرد نه داریت",
+ "exif-flash-redeye-1": "چمانی سۆر ئی زیان کورتین",
+ "exif-focalplaneresolutionunit-2": "اینچ",
+ "exif-sensingmethod-1": "ته ریپ نه بوته",
+ "exif-sensingmethod-2": "نائیه ئی رنگین سنسور یک تراشه ئین",
+ "exif-sensingmethod-3": "نائیه ئی رنگین سنسور دو تراشه ئین",
+ "exif-sensingmethod-4": "نائیه ئی رنگین سنسور سه تراشه ئین",
+ "exif-sensingmethod-5": "نائیه ئی رنگین سنسور ترتیب",
+ "exif-filesource-3": "اکاسی دیجیتالین کامره",
+ "exif-scenetype-1": "اکس دیم په دیم اکاسی بوته",
+ "exif-customrendered-0": "عادین ظهور",
+ "exif-customrendered-1": "سفارشین ظهور",
+ "exif-exposuremode-0": "اوتوماتیکین نوردهی",
+ "exif-exposuremode-1": "دستئ نور دهی",
+ "exif-exposuremode-2": "Auto bracket",
+ "exif-whitebalance-0": "سپیت ئین رنگی ته هادل ئی اوتوماتیکین تنزیم (white balance)",
+ "exif-whitebalance-1": "سپیت ئین رنگی ته هادل ئی دستی ئین تنزیم (white balance)",
+ "exif-scenecapturetype-0": "سٹاندارت",
+ "exif-scenecapturetype-1": "چم چران",
+ "exif-scenecapturetype-2": "پرتره",
+ "exif-scenecapturetype-3": "شپئ چم گیند",
+ "exif-gaincontrol-0": "هیچ‌گوجام",
+ "exif-gaincontrol-1": "دریاپتی هدی آقلین باز کورتین",
+ "exif-gaincontrol-2": "دریاپتی هدی آکسرین باز کورتین",
+ "exif-gaincontrol-3": "هه دی آقل گیپتی نوکی کم کورتین",
+ "exif-gaincontrol-4": "هه دی اکسر گیپتی نوکی کم کورتین",
+ "exif-contrast-0": "نورمال",
+ "exif-contrast-1": "نرم",
+ "exif-contrast-2": "سک",
+ "exif-saturation-0": "نورمال",
+ "exif-saturation-1": "کم ئین اشباع",
+ "exif-saturation-2": "بازین اشباع",
+ "exif-sharpness-0": "ساددگ",
+ "exif-sharpness-1": "نرم",
+ "exif-sharpness-2": "سک",
+ "exif-subjectdistancerange-0": "نامئلوم",
+ "exif-subjectdistancerange-1": "ماکرو",
+ "exif-subjectdistancerange-2": "نزینک گیند",
+ "exif-subjectdistancerange-3": "دور گیند",
+ "exif-gpslatitude-n": "جوگراپیایی شمالی گ\tۆور",
+ "exif-gpslatitude-s": "جوگراپیایی جنوبی گ\tۆور",
+ "exif-gpslongitude-e": "جوگراپیایی روچ درات ئی تچکی",
+ "exif-gpslongitude-w": "جوگراپیایی روچ کپت ئی تچکی",
+ "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|میتر|میتر}} بُرزتیر شه دریابی روگا",
+ "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|میتر|میتر}} جهلتیر شه دریابی روگا",
+ "exif-gpsstatus-a": "بی اندازه گیری هالا",
+ "exif-gpsstatus-v": "اندازه گ ئی موقایسه گیری",
+ "exif-gpsmeasuremode-2": "دو بوئدین اندازه گیری",
+ "exif-gpsmeasuremode-3": "۳ بوئدین اندازه گیری",
+ "exif-gpsspeed-k": "کیلومیتر بئ سائت تا",
+ "exif-gpsspeed-m": "مایل بئ سائت",
+ "exif-gpsspeed-n": "گرین",
+ "exif-gpsdestdistance-k": "کیلومتر",
+ "exif-gpsdestdistance-m": "مایل",
+ "exif-gpsdestdistance-n": "دریا ئین مایل",
+ "exif-gpsdop-excellent": "باز جووان ($1)",
+ "exif-gpsdop-good": "زبر ($1)",
+ "exif-gpsdop-moderate": "متوسط ($1)",
+ "exif-gpsdop-fair": "نه باز جووان ($1)",
+ "exif-gpsdop-poor": "ضعیف ($1)",
+ "exif-objectcycle-a": "تانا سوب",
+ "exif-objectcycle-p": "تانا دیگرونواشام",
+ "exif-objectcycle-b": "سوب و نواشام",
+ "exif-gpsdirection-t": "جوانین نیمگ",
+ "exif-gpsdirection-m": "آهنربائین نیمگ",
+ "exif-ycbcrpositioning-1": "مانجین بوتگ",
+ "exif-ycbcrpositioning-2": "اشتراکی",
+ "exif-dc-contributor": "شراکت کنۆک ئان",
+ "exif-dc-date": "تاریخ(ئان)",
+ "exif-dc-publisher": "ناشر",
+ "exif-dc-relation": "مربوتین میڈیاهان",
+ "exif-dc-rights": "حقوق",
+ "exif-dc-source": "بُنزهی ئین میڈیا",
+ "exif-dc-type": "میڈیایی رقم",
+ "exif-rating-rejected": "رد بوته ئین",
+ "exif-isospeedratings-overflow": "مزنتیر شه ۶۵۵۳۵",
+ "exif-iimcategory-ace": "هنر، فرهنگ و سرگرمی",
+ "exif-iimcategory-clj": "جنایت و قانون",
+ "exif-iimcategory-dis": "به لا و پیش آمدئان",
+ "exif-iimcategory-fin": "اقتصاد و تجارت",
+ "exif-iimcategory-edu": "یادگیپتین",
+ "exif-iimcategory-evn": "محیط زیست",
+ "exif-iimcategory-hth": "سلامت",
+ "exif-iimcategory-hum": "بشر ئی علاقه",
+ "exif-iimcategory-lab": "کار",
+ "exif-iimcategory-lif": "زنده گی ره قم و بیکاری وختان",
+ "exif-iimcategory-pol": "سیاست",
+ "exif-iimcategory-rel": "مذهب و باور",
+ "exif-iimcategory-sci": "علم و تخنیک",
+ "exif-iimcategory-soi": "اجتمائین مسائل",
+ "exif-iimcategory-spo": "سپورت",
+ "exif-iimcategory-war": "جنگ ، لٹ و کوٹ و ناآرامی",
+ "exif-iimcategory-wea": "آپ و هوا",
+ "exif-urgency-normal": "ئادی ($1)",
+ "exif-urgency-low": "کم ($1)",
+ "exif-urgency-high": "باز ($1)",
+ "exif-urgency-other": "تاریپ بوته ئین اولویت شه ($1) کارزوروک ئی نیمه گا",
+ "namespacesall": "موچ",
+ "monthsall": "موچ",
+ "confirmemail": "ایمیل ادرسی تائید کورتین",
+ "confirmemail_noemail": "شما بئ وتی [[Special:Preferences|کارزوروکی تنزیماتئ ]] دیمی تا موته برین ایمیل ادرس ئی وارد نه کورته ایت.",
+ "confirmemail_send": "پُست‌کورتینن یک تاییدی کود ئی",
+ "confirmemail_sent": "یک تاییدین ایمیل ئی دیم داته بوت.",
+ "confirmemail_needlogin": "په وتي ایمیل ئی تائید بوتین ئا خاتیرا په $1 ئا زه رورت داریت.",
+ "confirmemail_success": "شمی ایمیل ادرس تائید بوته.\n\nهمی انون توانیت که [[Special:UserLogin|سایٹ تا داخل به ئیت]] و شه ویکی ئا لیزت به ریت.",
+ "confirmemail_loggedin": "شمی ایمیل ادرس انون تائید بوت.",
+ "confirmemail_subject": "شمی ایمیل ادرس ئی تأییدی {{SITENAME}}",
+ "confirmemail_body": "یک نپر، احتمالاً که شما وت ، شه $1 ئی آی پی ادرس ئا یک کار زوروکئ حساب گۆ «$2» ئی ناما بئ ای ایمیل ادرس ئی تا بئ {{SITENAME}} ئی تا جۆڑ کورته است.\n\nپه تأیید کورتین ایشی که ای حساب واقئاً بئ شما مربوت اینت و هم پئال کورتین {{SITENAME}} ایمیلی امکاناتانی خاتیرا ، جهلگی لینک ئا بئ وتي بروزیر ئی تا پاچ بکنیت:\n\n$3\n\nاگر شما ای کار زوروکین حساب ئا راجستر *نه کورته ئیت*، مهربانی بکنیت جهلگی لینک \nئی پدا بگیرێت تا که ای ایمیل ادرس ئی تایید بند بێت:\n\n$5\n\nای تاییدی ئی کوڈ بئ تاریخ $4 ئا شه بین ئه رۆت.\n</div>",
+ "confirmemail_body_changed": "یک نپر، احتمالاً که شما وت ، شه $1 ئی آی پی ادرس ئا یک کار زوروکئ حساب گۆ «$2» ئی ناما بئ ای ایمیل ادرس ئی تا بئ {{SITENAME}} ئی تا تغیر داته است.\n\nپه تأیید کورتین ایشی که ای حساب واقئاً بئ شما مربوت اینت و هم پئال کورتین {{SITENAME}} ایمیلی امکاناتانی خاتیرا ، جهلگی لینک ئا بئ وتي بروزیر ئی تا پاچ بکنیت:\n\n$3\n\nاگر شما ای کار زوروکین حساب ئا راجستر *نه کورته ئیت*، مهربانی بکنیت جهلگی لینک \nئی پدا بگیرێت تا که ای ایمیل ادرس ئی تایید بند بێت:\n\n$5\n\nای تاییدی ئی کوڈ بئ تاریخ $4 ئا شه بین ئه رۆت.",
+ "confirmemail_body_set": "یک نپر، احتمالاً که شما وت ، شه $1 ئی آی پی ادرس ئا یک کار زوروکئ حساب گۆ «$2» ئی ناما بئ ای ایمیل ادرس ئی تا بئ {{SITENAME}} نشانی ئا تغیر دات.\n\nپه تأیید کورتین ایشی که ای حساب واقئاً بئ شما مربوت اینت و هم پئال کورتین {{SITENAME}} ایمیلی امکاناتانی خاتیرا ، جهلگی لینک ئا بئ وتي بروزیر ئی تا پاچ بکنیت:\n\n$3\n\nاگر شما ای کار زوروکین حساب ئا راجستر *نه کورته ئیت*، مهربانی بکنیت جهلگی لینک \nئی پدا بگیرێت تا که ای ایمیل ادرس ئی تایید بند بێت:\n\n$5\n\nای تاییدی ئی کوڈ بئ تاریخ $4 ئا شه بین ئه رۆت.",
+ "confirmemail_invalidated": "ایمیل ادرس ئی تاییدی لگ بوت",
+ "invalidateemail": "ایمیل ادرس ئی لگ کورتین",
+ "scarytranscludedisabled": "[ترانسکلۆدینگ میان ویکی ئی په ئال نه اینت]",
+ "scarytranscludetoolong": "[انترنتی ئین ادرس (URL) شه اندازه ئا تچکتیر ات]",
+ "deletedwhileediting": "'''هشدار''': ای دیم پدا شه آیی که شما آیی ایڈیٹ ئا شرو کورته ئیت، پاک بوته!",
+ "confirmrecreate": "کار زوروک [[User:$1|$1]] ([[User talk:$1|گپ و هبر]]) ای مه قاله ئا پد شه آیی که شوما بئ آیی ایڈی\tٹ کورتین ئا شورو کورتیت ای دلیل ئا پاک کورت :\n: ''$2''\nمهربانی بکنیت تائید بکنیت که شوما ئه لو\tٹیت ای مه قاله ئا پدا جۆڑ بکنیت .",
+ "confirmrecreate-noreason": "کار زوروک [[User:$1|$1]] ([[User talk:$1|گپ و هبر]]) ای دیما پد شه شمئ ایڈی\tٹ ئی شرو ئا پاک کورت. مهربانی بکنیت تائید بکنیت که لو\tٹیت ای دیما پدا جۆڑ بکنیت.",
+ "recreate": "پدا جۆڑ کورتین",
+ "confirm_purge_button": "قبول داشتین",
+ "confirm-purge-top": "ای دیمی چیهرین هاپیزه ئی پاک کورتین ئا تائید ئه کنیت؟",
+ "confirm-watch-button": "قبول داشتین",
+ "confirm-watch-top": "ای دیم بئ شمی دیدارلیست ئا ایزاپه بیئت؟",
+ "confirm-unwatch-button": "قبول داشتین",
+ "confirm-unwatch-top": "ای دیم شه شمئ دیدارلیست ئا پاک بیئت؟",
+ "quotation-marks": "\"$1\"",
+ "imgmultipageprev": "&rarr; دیمتیری تاکدیم",
+ "imgmultipagenext": "بئدین تاکدیم &larr;",
+ "imgmultigo": "برا!",
+ "imgmultigoto": "شوتین بی $1 تاکدیمی تا",
+ "img-lang-default": "(پیش‌فرض ئین زبان)",
+ "img-lang-info": "ارایه کورتین ای اکسی بی $1 . $2",
+ "img-lang-go": "برا",
+ "ascending_abbrev": "صعودی",
+ "descending_abbrev": "نزولی",
+ "table_pager_next": "دیگرین تاکدیم",
+ "table_pager_prev": "دیمتیرین تاکدیم",
+ "table_pager_first": "اولین تاکدیم",
+ "table_pager_last": "آخرین تاکدیم",
+ "table_pager_limit": "$1 ئی نشان داتین بئ هر دیمئ تا",
+ "table_pager_limit_label": "مواریدئانی اندازه گ بی هر دیمی تا :",
+ "table_pager_limit_submit": "برا",
+ "table_pager_empty": "هیچ نتیجه",
+ "autosumm-blank": "تاکدیما خالی کورت",
+ "autosumm-replace": "تاکدیمی جابجایی گۆ '$1'",
+ "autoredircomment": "جهت یی تغیر بئ [[$1]]",
+ "autosumm-new": "نوکین دیمی گۆ «$1» ئا جۆڑ کورت",
+ "autosumm-newblank": "خالی ئین دیمی جۆڑ بوت",
+ "watchlistedit-normal-title": "دیدارلیست ئی ایڈیٹ کورتین",
+ "watchlistedit-normal-legend": "ئینوانانی پاک کورتین شه دیدارلیست ئا",
+ "watchlistedit-normal-submit": "ئنوانانی پاک کورتین",
+ "watchlistedit-normal-done": "$1 ئینوان شه شمی دیدارلیست ئا پاک {{PLURAL:$1|بوت|بوتنت}}:",
+ "watchlistedit-raw-title": "واچلیستئ آمگین لیستانی ایڈیٹ",
+ "watchlistedit-raw-legend": "واچلیستئ آمگین لیستانی ایڈیٹ",
+ "watchlistedit-raw-titles": "ئنوانان:",
+ "watchlistedit-raw-submit": "واچلیست ئی اپڈیٹ",
+ "watchlistedit-raw-done": "شمی دیدارلیست اپڈیٹ بوت.",
+ "watchlistedit-raw-added": "$1 ئی ئنوان بئ دیدارلیست ئا ایزاپه {{PLURAL:$1|بوت|بوتنت}}:",
+ "watchlistedit-raw-removed": "$1 ئی ئنوان پاک {{PLURAL:$1|بوت|بوتنت}}:",
+ "watchlistedit-clear-title": "دیدارلیست پاک بوته",
+ "watchlistedit-clear-legend": "دیدارلیست ئی پاک کورتین",
+ "watchlistedit-clear-explain": "موچین ئناوین شه شمی دیدارلیست ئا پاک ئه بئنت",
+ "watchlistedit-clear-titles": "ئنوانان:",
+ "watchlistedit-clear-submit": "دیداری ئانی پاک کورتین (ای دائم اینت!)",
+ "watchlistedit-clear-done": "شمی دیدارلیست پاک بوت.",
+ "watchlistedit-clear-removed": "$1 ئی ئنوان پاک {{PLURAL:$1|بوت|بوتنت}}:",
+ "watchlistedit-too-many": "بازین دیم ایدا په نمایش ئی خاتیرا موجود انت.",
+ "watchlisttools-clear": "دیدارلیست ئی پاک کورتین",
+ "watchlisttools-view": "مربوتین تغیرانی دیستین",
+ "watchlisttools-edit": "دیدارلیست ئی دیستین و ایڈیٹ کورتین",
+ "watchlisttools-raw": "واچلیستئ آمگین لیستانی ایڈیٹ",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گپ و حبر]])",
+ "version": "نخسه",
+ "version-extensions": "لچیته گین اپزونه ئان",
+ "version-skins": "نصب بوته ئین پوسته ئانی",
+ "version-specialpages": "خاصین تاکدیمان",
+ "version-parserhooks": "تجزیه گرین چنگک ئان",
+ "version-variables": "موته غیرئان",
+ "version-antispam": "دیمگیری شه سپم ئان",
+ "version-other": "دیگرین",
+ "version-mediahandlers": "می\tڈیایی بئ دست گیروک ئان",
+ "version-hooks": "چنگک ئان",
+ "version-parser-extensiontags": "ایزاپه کنوکین تجزیه گر ئی برچسپ",
+ "version-parser-function-hooks": "ئه مل کنوکین تجزیه گرین چنگک",
+ "version-hook-name": "چنگک ئی نام",
+ "version-hook-subscribedby": "داخل بوته گ\tۆ",
+ "version-no-ext-name": "[بی نام]",
+ "version-license": "میڈیاویکی ئی اجازه نامه",
+ "version-ext-license": "اجازه نامه ئان",
+ "version-ext-colheader-name": "پراخئ ئان",
+ "version-skin-colheader-name": "پوست",
+ "version-ext-colheader-version": "نخسه",
+ "version-ext-colheader-license": "اجازه نامه ئان",
+ "version-ext-colheader-description": "توضیح",
+ "version-ext-colheader-credits": "مؤلفان",
+ "version-license-title": "مجوز په $1",
+ "version-license-not-found": "ای سند ئی شه جواز ئی مالومات ئا په ای پراخ کن\tۆک ئا ودی نه بوت.",
+ "version-credits-title": "کریدیت په $1",
+ "version-credits-not-found": "ای کریدیت ئی شه جواز ئی مالومات ئا په ای پراخ کن\tۆک ئا ودی نه بوت.",
+ "version-poweredby-credits": "ای ویکی شه '''[https://www.mediawiki.org/ میڈیا ویکی]''' ئی نیمگا پُشتیوانی ئه بیئت، موچین حقوق محفوظ انت © 2001-$1 $2.",
+ "version-poweredby-others": "دیگران",
+ "version-poweredby-translators": "translatewiki.net مترجم ئان",
+ "version-credits-summary": "جهلگین کس ئانه په خاتیرایڈی\tٹ بئ [[Special:Version|میڈیاویکی]] تا ماریپی ئه کنن.",
+ "version-software": "لچیته ئین نخسه هان",
+ "version-software-product": "محصول",
+ "version-software-version": "نخسه",
+ "version-entrypoints": "ورود ئی مئل ئی انترنتی ادرس",
+ "version-entrypoints-header-entrypoint": "داخل بوتین ئی ٹیک",
+ "version-entrypoints-header-url": "انترننئ ئین ادرس",
+ "version-libraries": "نصب بوته ئین کتابخانه",
+ "version-libraries-library": "کتابجاه",
+ "version-libraries-version": "نخسه",
+ "redirect-legend": "جابجا په یک پایل یا دیم ئی",
+ "redirect-submit": "برا",
+ "redirect-lookup": "گشتین:",
+ "redirect-value": "اندازه گ:",
+ "redirect-user": "کار زوروکی آی ڈی",
+ "redirect-page": "تاکدیمی آی ڈی",
+ "redirect-revision": "تاکدیمی نخسه",
+ "redirect-file": "فایلئ نام",
+ "redirect-not-exists": "اندازه گ ودی نه بوت",
+ "fileduplicatesearch": "گشتین په تکرارین فایلان",
+ "fileduplicatesearch-summary": "گشتین په تکرارین پایلان بي اساس آوانی درهم بوته اندازه گ ئا سورت ئه گیت.",
+ "fileduplicatesearch-legend": "گشتین په تکرارین موریدان",
+ "fileduplicatesearch-filename": "فایلئ نام:",
+ "fileduplicatesearch-submit": "گشتین",
+ "fileduplicatesearch-info": "<span dir=\"ltr\">$1 × $2</span> پیکسل<br />فایلئ اندازه گ: $3<br />نوع MIME: $4",
+ "fileduplicatesearch-result-1": "«$1» ئی فایل تکرارین مورید نداریت.",
+ "fileduplicatesearch-result-n": " «$1» ئی فایل یک {{PLURAL:$2|تکراری موردئ|$2 تکرارئ مورئ}} داریت.",
+ "fileduplicatesearch-noresults": "فایلئ گو «$1» ئی ناما ودئ نه بوت.",
+ "specialpages": "خاصین تاکدیمان",
+ "specialpages-note-top": "شرح علائم",
+ "specialpages-note": "* عادی ئین خاصین تاکدیمان.\n* <span class=\"mw-specialpagerestricted\">خاصین تاکدیمان محدود بوته انت.</span>",
+ "specialpages-group-maintenance": "ساتیتینئ راپور",
+ "specialpages-group-other": "دیگه خاصین تاکدیمان",
+ "specialpages-group-login": "داخل بوتین / حسابي جوڑ کورتین",
+ "specialpages-group-changes": "آخیرئین تغیرئان و سیاهه ئان",
+ "specialpages-group-media": "میڈیایی بُرز کورتینوکین راپور",
+ "specialpages-group-users": "کار زوروکان و آوانی حقوق",
+ "specialpages-group-highuse": "باز گیندوکین دیمان",
+ "specialpages-group-pages": "تاکدیمانی لڑ\t لیست",
+ "specialpages-group-pagetools": "تاکدیمانئ وسایلان",
+ "specialpages-group-wiki": "دتا و وسایلان",
+ "specialpages-group-redirects": "مسیر ئی تغیری خاسین تاکدیمان",
+ "specialpages-group-spam": "سپم ئی وسایلان",
+ "specialpages-group-developer": "توسه ئه دهوکین وسایلان",
+ "blankpage": "خالی ئین دیم",
+ "intentionallyblankpage": "این دیم بئ قصدین رقما خالی ایشته بوته.",
+ "tags": "مجازین تغیرانئ برچسپ",
+ "tag-filter": "[[Special:Tags|برچسپ هاني]] فیلتر:",
+ "tag-filter-submit": "فیلتر",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسپ|برچسپ هان}}]]: $2)",
+ "tags-title": "برچسپ هان",
+ "tags-tag": "برچسپئ نام",
+ "tags-display-header": "نشان داتین بئ تعیراتانی لیست ئي تا",
+ "tags-description-header": "مانا ئی کامیلین ت\tۆزی",
+ "tags-source-header": "بُن زهی",
+ "tags-active-header": "پئال؟",
+ "tags-hitcount-header": "تغیرئانی برچسپ",
+ "tags-actions-header": "عملکردهان",
+ "tags-active-yes": "هان",
+ "tags-active-no": "نه",
+ "tags-source-extension": "تاریپ بوته بئ ایزاپه کن\tۆکین پایه ئا",
+ "tags-source-manual": "شه ربات ئانی یا کارزوروکانی نیمه گا دستی آسمال بوته",
+ "tags-source-none": "دیگه ایستیپاده ئه به بیت",
+ "tags-edit": "ایڈیٹ",
+ "tags-delete": "پاک کورتین",
+ "tags-activate": "پئال کورتین",
+ "tags-deactivate": "غیرپئال کورتین",
+ "tags-hitcount": "$1 {{PLURAL:$1|ٹگل|ٹگل}}",
+ "tags-manage-no-permission": "شما په مدیریت ئی تگ ئی تغیرا اجازه نداریت.",
+ "tags-create-heading": "نوکین برچسپ ئی ج\tۆر کورتین",
+ "tags-create-tag-name": "برچسپئ نام:",
+ "tags-create-reason": "دلیل:",
+ "tags-create-submit": "جوڑ\t کورتین",
+ "tags-create-no-name": "شما تگی نام باید مشخس بکنیت.",
+ "tags-create-invalid-chars": "تگ‌ئانی نام نباید که کامه (<code>,</code>) یا مورب خت (<code>/</code>) داشته بیئنت.",
+ "tags-create-already-exists": "\"$1\" ئی تگ همی انون موجود اینت.",
+ "tags-create-warnings-above": "\"$1\" ئی تگی جۆڑ کورتینی وختا جهگی {{PLURAL:$2|هشدار|هشدارئان}} آته انت:",
+ "tags-create-warnings-below": "آیا لوٹیت که تگ ئی جۆڑ کورتین ئا ایدامه دهیت؟",
+ "tags-delete-title": "تگ ئی پاک کورتین",
+ "tags-delete-explanation-initial": "شما بئ هالی پاک کورتینا «$1» ئی تگی شه مالوماتی بانکا هستیت.",
+ "tags-delete-reason": "دلیل:",
+ "tags-delete-submit": "ای تگ ئا غیرقابیل بیئرگشت پاک کن",
+ "tags-delete-not-found": "«$1» ئی تگ وجود نداریت.",
+ "tags-delete-too-many-uses": "\"$1\" ئی تگ گشتیر شه $2 {{PLURAL:$2|نخسه|نخسه ئانی}} سرا ایئمال بوته و نتوان که آیرا پاک کورت.",
+ "tags-delete-warnings-after-delete": "برچسب \"$1\" ئی تگ پاک بوت ، مه گه گۆ جهلگین {{PLURAL:$2|خه تا|خه تا ئان}} گۆن ات:",
+ "tags-activate-title": "تگ ئی په ئال کورتین",
+ "tags-activate-question": "شما بئ هالی په هال کورتین «$1» ئی تگ ویت.",
+ "tags-activate-reason": "دلیل:",
+ "tags-activate-not-allowed": "«$1» ئی تگی په هال کورتین ممکن نه اینت.",
+ "tags-activate-not-found": "«$1» ئی تگ وجود نداریت.",
+ "tags-activate-submit": "پئال کورتین",
+ "tags-deactivate-title": "تگ ئی غیر په ئال کورتین",
+ "tags-deactivate-question": "شما بئ هالی غیر په هال کورتین «$1» ئی تگ ویت.",
+ "tags-deactivate-reason": "دلیل:",
+ "tags-deactivate-not-allowed": "«$1» ئی تگی غیر په هال کورتین ممکن نه اینت.",
+ "tags-deactivate-submit": "غیرپئال کورتین",
+ "comparepages": "تاکدیمانئ مقایسه",
+ "compare-page1": "تاکدیم ۱",
+ "compare-page2": "تاکدیم ۲",
+ "compare-rev1": "نخسه ۱",
+ "compare-rev2": "نخسه ۲",
+ "compare-submit": "مقایسه",
+ "compare-invalid-title": "ته ئین بوته ئین ئینوان ناموتبر اینت.",
+ "compare-title-not-exists": "مشخص بوته ئین ئینوان موجود نه اینت.",
+ "compare-revision-not-exists": "مشخس بوته پیلتر موجود نه اینت.",
+ "dberr-problems": "ئوزر لوٹن! ای سایٹ شه تخنیکی ئین مشکل ئان رنج ئه وارت.",
+ "dberr-again": "چینکه دقیقه سبر کنیت و پدا ای دیما بارگیری بکینت.",
+ "htmlform-float-invalid": "اندازه ئی که داخل کورته یک ئدد ئی نه ئینت.",
+ "htmlform-int-toolow": "اندازه ئی که داخل کورته ئیت کمتیر شه $1 ئا است.",
+ "htmlform-int-toohigh": "اندازه ئی که داخل کورته ئیت گیشتیر شه $1 ئا اینت.",
+ "htmlform-required": "ای اندازه گ ضرورت اینت",
+ "htmlform-submit": "ثبت کورتین",
+ "htmlform-reset": "تغیرانئ خنثا کورتین",
+ "htmlform-selectorother-other": "دیگرین",
+ "htmlform-no": "نه",
+ "htmlform-yes": "هان",
+ "htmlform-chosen-placeholder": "یک گذینه ئی انتخاب بکنیت",
+ "htmlform-cloner-create": "گیشتیر اضافه کورتین",
+ "htmlform-cloner-delete": "پاک کورتین",
+ "htmlform-cloner-required": "حداقل ضرورت انداره گ.",
+ "sqlite-has-fts": "$1 گۆ پُشتیوانی شه گشتین ئا بئ کامیلین متن ئی تا",
+ "sqlite-no-fts": "$1 بدون پُشتیوانی شه گشتین ئا بئ کاملین متن ئی تا",
+ "logentry-delete-delete": "$1 ، $3 تاکدیما {{GENDER:$2|پاک کورت}}",
+ "logentry-delete-restore": "$1 ، $3 ئی تاکدیما {{GENDER:$2|پدا جۆڑ کورت}}",
+ "logentry-delete-event": "$1 پیدایی {{PLURAL:$5|یک مورد سیاه چال|$5 مورد سیاه چال}} ئا بئ $3 {{GENDER:$2|تا تغیر دات}}: $4",
+ "logentry-delete-revision": "$1 پیدایی {{PLURAL:$5|یک نخسه|$5 نخسه}} تاکدیم $3 ئا {{GENDER:$2|تغییر دات}}: $4",
+ "logentry-suppress-delete": "$1 $3 ئی تاکدیما {{GENDER:$2| سرکوب کورت}}",
+ "logentry-suppress-event": "$1 پیدایی {{PLURAL:$5|یک مورد سیاه چال|$5 مورد سیاه چال}} ئا بئ $3 {{GENDER:$2|تا چیهر دات}}: $4",
+ "logentry-suppress-revision": "$1 پیدایی {{PLURAL:$5|یک نخسه|$5 نخسه}} تاکدیم $3 ئا چیهراکائی {{GENDER:$2|تغییر دات}}: $4",
+ "revdelete-content-hid": "محتوائانه چیهر کورت",
+ "revdelete-summary-hid": "ایڈیٹ ئی خلاصه ئا چیهر کورت",
+ "revdelete-uname-hid": "چیهرین کار زوروکئ نام",
+ "revdelete-content-unhid": "محتوائانه سر درا کورت",
+ "revdelete-summary-unhid": "ایڈیٹ ئی خلاصه ئا دررا کورت",
+ "revdelete-uname-unhid": "کار زوروکئ ناما سر درا کورت",
+ "revdelete-restricted": "مدیر ئانه محدود کورت",
+ "revdelete-unrestricted": "مدیرئانی محدودیت ئا پروشت",
+ "logentry-merge-merge": "$1 $3 را بئ $4 {{GENDER:$2| ادغام کورت}} (نخسه تا $5)",
+ "logentry-move-move": "$1، $3 ئی تاکدیما بئ $4 {{GENDER:$2|جابجا کورت}}",
+ "logentry-newusers-newusers": "$1 ئی کار زوروکئ حساب {{GENDER:$2|جۆڑ بوت}}",
+ "logentry-newusers-create": "$1 ئی کار زوروکئ حساب {{GENDER:$2|جۆڑ بوت}}",
+ "logentry-newusers-create2": "$3 ئی کار زوروکئ حساب شه $1 ئی نیمگا {{GENDER:$2|جۆڑ بوت}}",
+ "logentry-newusers-byemail": "$3 ئی کار زوروکئ حساب شه $1 ئی نیمگا {{GENDER:$2|جۆڑ بوت}} و چیهرگال یا پاسورد گو ایمیلا دیم داته بوت",
+ "logentry-newusers-autocreate": "$1 ئی حساب بئ اتوماتیکین رکما {{GENDER:$2|جۆڑ بوت}}",
+ "logentry-rights-rights": "$1 ، $3 ئی عضویتا شه $4 ئی گروپا بئ $5 {{GENDER:$2|تغییر دات}}",
+ "logentry-rights-rights-legacy": "$1 عضویتئ گروپا بئ $3 ئا {{GENDER:$2|تغییر دات}}",
+ "logentry-rights-autopromote": "$1 بئ اوتوماتیکین رکما وتر شه $4 بئ $5 {{GENDER:$2|ارتقاء دات}}",
+ "logentry-upload-upload": "$1 $3 ئا {{GENDER:$2|بُرز کورت}}",
+ "logentry-upload-overwrite": "$1 نوکین نخسه ئی شه $3 ئا {{GENDER:$2|بُرز کورت}}",
+ "logentry-upload-revert": "$1 {{GENDER:$2|بُرز کورت}} $3 ئا",
+ "log-name-managetags": "تگ ئی تاریخچه ئی مدیریت",
+ "logentry-managetags-create": "$1 تگ «$4» ئا {{GENDER:$2|ج\tۆڑ کورت}}",
+ "rightsnone": "(هیچ)",
+ "revdelete-summary": "ایڈیتی خاصه",
+ "feedback-back": "بیئرگشت",
+ "feedback-bugnew": "دیستونئ . نوکین مشکل ئی راپور دیئ",
+ "feedback-cancel": "کنسیل",
+ "feedback-close": "کار بوت",
+ "feedback-external-bug-report-button": "یک تخنیکی ئین کاری پایل",
+ "feedback-dialog-title": "یک پیڈبک ئی دیم داتین",
+ "feedback-error-title": "خطا",
+ "feedback-error2": "خطا: پروشت بئ ایڈیٹ ئی تا",
+ "feedback-message": "پیام:",
+ "feedback-subject": "ئنوان:",
+ "feedback-submit": "ثبت کورتین",
+ "feedback-thanks": "منتوارن! شمی فیدبک بئ «[$1 $2]» ئی دیمی تا ثبت بوت.",
+ "feedback-thanks-title": "منتوارن!",
+ "feedback-useragent": "کارزوروکی آگینت:",
+ "searchsuggest-search": "گشتین",
+ "searchsuggest-containing": "شامیلین دیمان...",
+ "api-error-badaccess-groups": "شما اجازه په پایلی ئی بُرز کورتین ئا بئ ای ویکی ای تا نداریت.",
+ "api-error-badtoken": "داخیلی ئین خه تا: امنیتی ئین کوڈ سه ئی نه اینت (Bad token).",
+ "api-error-duplicate-popup-title": "تکرارین {{PLURAL:$1|فایل|فایلان}}",
+ "api-error-empty-file": "فایلی که دیم داته بوت خالی ات.",
+ "api-error-emptypage": "خالی ئین دیمانی جۆڑ کورتین جایز نه اینت.",
+ "api-error-file-too-large": "فایلی که دیم داتیت بئ حد ٹوو ات.",
+ "api-error-filename-tooshort": "فایلی نام بئ شه اندازگ ئا گۆنڈ ات.",
+ "api-error-filetype-banned": "ایرنگین فایل ئی اجازه نه اینت.",
+ "api-error-filetype-missing": "فایل ئی نام فرمت نه داریت.",
+ "api-error-hookaborted": "تغیر که شما لۆٹیت جۆڑ کنیت شه یک جنگک یی نیمگا بند بوت.",
+ "api-error-http": "داخلین خطا:وصل بوتین بئ سرویس ئا ممکن نه اینت.",
+ "api-error-illegal-filename": "فایل ئی نام غیرمجاز اینت.",
+ "api-error-invalid-file-key": "داخلین خطا: فایل نام بئ موقت ئین حافظه ئی تا موجود نه اینت.",
+ "api-error-missingparam": "داخلین خطا: ناموجودین پارامیترئان بئ ریکویست ئی تا.",
+ "api-error-mustbeloggedin": "په فایلی بُرز کورتینا، شما باید بئ سایٹ ئی تا داخل بئیت.",
+ "api-error-mustbeposted": "داخلین خطا: ریکویست باید شه POST HTTP ئی روش ئا دیم داته بیئت.",
+ "api-error-unclassified": "یک نا زانتین خطائی رخ دات.",
+ "api-error-unknown-code": "نازانتین خطای: \" $1 \"",
+ "api-error-unknown-warning": "نادروستئ ئین ایختار: $1",
+ "api-error-unknownerror": "نادروستئ ئین خه تا: «$1».",
+ "api-error-uploaddisabled": "پایلانی بُرز کورتین بئ ای ویکی تا غیر په هال اینت.",
+ "duration-seconds": "$1 ثانیه",
+ "duration-minutes": "$1 دقیقه",
+ "duration-hours": "$1 سائت",
+ "duration-days": "$1 روچ",
+ "duration-weeks": "$1 هپتگ",
+ "duration-years": "$1 سال",
+ "duration-decades": "$1 دههگ",
+ "duration-centuries": "$1 قرن",
+ "duration-millennia": "{{PLURAL:$1|هزار سال |$1 هزار سال}}",
+ "limitreport-title": "پروپایل ئی دیتا ئی تجزیه گر:",
+ "limitreport-cputime": "سی‌پی‌یو ئی مسرپ وخت",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|سانیه|سانیه ئان}}",
+ "limitreport-walltime": "واقئین مصرفئ مدت",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه}}",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بایٹ|بایٹ}}",
+ "limitreport-templateargumentsize": "ارگومان ئی تراشوانی اندازگ",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بایٹ|بایٹ}}",
+ "limitreport-expansiondepth": "گیشتیرین پراخی جُهلی",
+ "expandtemplates": "تراشوانی اکسپاند کورتین",
+ "expand_templates_title": "موضوع ئی ئنوان، په {{FULLPAGENAME}} ئا و غیره:",
+ "expand_templates_input": "ورودین متن:",
+ "expand_templates_output": "نتیجه",
+ "expand_templates_xml_output": "خروجی XML",
+ "expand_templates_html_output": "اچ‌تی‌ام‌ال حامگین خروجی",
+ "expand_templates_ok": "قبول داشتین",
+ "expand_templates_remove_comments": "ملاحظاتانئ پاک کورتین",
+ "expand_templates_remove_nowiki": "خنثی کورتین <nowiki> تگ هانی بئ نتیجه ئی",
+ "expand_templates_generate_xml": "XML تجزیه ئی درختی نشان داتین",
+ "expand_templates_generate_rawhtml": "حامیگین اچ تی ام ال ئی نشان داتین",
+ "expand_templates_preview": "دیم دیست",
+ "pagelanguage": "زبانی انتخابی دیم",
+ "pagelang-name": "تاکدیم",
+ "pagelang-language": "زبان",
+ "pagelang-use-default": "استفاده کورتین شه پیش فرض ئین زبانا",
+ "pagelang-select-lang": "زبانی انتخاب",
+ "right-pagelang": "زبانی تاکدیم ئی تغیر",
+ "action-pagelang": "دیمی زبان ئی تغیر",
+ "log-name-pagelang": "لوگ ئی زبان تغیرداتین",
+ "log-description-pagelang": "ای سیاهه زبانانی تغیراتانی دیم اینت.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (په ئال)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر په ئال''')",
+ "mediastatistics": "میڈیایی سرجم",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایٹ}} ($2؛ $3٪)",
+ "mediastatistics-table-mimetype": "مایم ئی رکم",
+ "mediastatistics-table-extensions": "موته ئمیلین اپزونه ئان",
+ "mediastatistics-table-count": "فایلانی اندازگ",
+ "mediastatistics-table-totalbytes": "ترکیبین حجم",
+ "mediastatistics-header-unknown": "نامئلوم",
+ "mediastatistics-header-bitmap": "بیت مپ ئی اکسان",
+ "mediastatistics-header-drawing": "طراحی‌هان (اکس برداری ئان)",
+ "mediastatistics-header-audio": "توار",
+ "mediastatistics-header-video": "ویدیوئان",
+ "mediastatistics-header-multimedia": "غنی ئین میڈ\tیا ئان",
+ "mediastatistics-header-office": "آفیس",
+ "mediastatistics-header-text": "متنی",
+ "mediastatistics-header-executable": "اجرایی",
+ "mediastatistics-header-archive": "پشورده ئین پورمت ئان",
+ "json-warn-trailing-comma": "$1 ئی کاما بئ اخیرا شه جی‌سن ئا {{PLURAL:$1|پاک بوت}}.",
+ "json-error-unknown": "مشکلی گو جی‌سن ات. خطا: $1",
+ "json-error-state-mismatch": "جن سن جووان نه اینت یا ناقض اینت",
+ "json-error-syntax": "نحوی ئین خطا",
+ "json-error-inf-or-nan": "INF یا NAN ئی مقادیر یک یا گیشتیر بی مقداری که کدگذاری ئا بیئنت",
+ "json-error-unsupported-type": "یک اندازه که نتوانت کد گذاری بیئت داته بوته",
+ "headline-anchor-title": "لینک بئ ای قیسمت ئا"
+}
diff --git a/languages/i18n/bho.json b/languages/i18n/bho.json
index 77814750..c79c7233 100644
--- a/languages/i18n/bho.json
+++ b/languages/i18n/bho.json
@@ -4,7 +4,8 @@
"Anshumangupta21",
"Ganesh",
"Nepaboy",
- "Rajivkurjee"
+ "Rajivkurjee",
+ "SatyamMishra"
]
},
"tog-underline": "लिंक के नीचे रेखा",
@@ -12,7 +13,7 @@
"tog-hidepatrolled": "हाल के परिवर्तन में मामूली संपादन छुपाईं",
"tog-newpageshidepatrolled": "नयका पृष्ठ के सूची में से जाँचल पृष्क के छुपाँई",
"tog-extendwatchlist": "मात्र हाल के परिवर्तन ही नाही,बल्कि सब परिवर्तन के देखावे खातिर ध्यान सूची के विस्तारित करीं",
- "tog-usenewrc": "तुरंत भईल परिवर्तन में आ ध्यानसूची में भईल परिवर्तनन के पन्ना अनुसार समूह में बांटी",
+ "tog-usenewrc": "तुरंत भइल परिवर्तन में आ ध्यानसूची में भइल परिवर्तनन के पन्ना अनुसार समूह में बांटी",
"tog-numberheadings": "स्वयं-सांख्यिकी शिर्षक",
"tog-showtoolbar": "सम्पादन औजारपट्टी के दिखावल जाव",
"tog-editondblclick": "दुई क्लिक पर पन्ना संपादन करीं",
@@ -31,7 +32,7 @@
"tog-shownumberswatching": "ध्यान रखे वालन सदस्यन के देखावल जाव",
"tog-oldsig": "वर्तमान हस्ताक्षर:",
"tog-fancysig": "हस्ताक्षर के विकी पाठ के रुप में उपयोग करीं (बिना स्वचालित कड़ी के)",
- "tog-uselivepreview": "लाइव पुर्वालोकन के प्रयोग करीं (प्रयोगात्मक)",
+ "tog-uselivepreview": "लाइव पुर्वालोकन के प्रयोग करीं",
"tog-forceeditsummary": "यदि सम्पादन सारांश ना दिहल होखे त हमके सूचित करब",
"tog-watchlisthideown": "हमार ध्यान दिहल पन्ना के सूची से हमरा खातिर परिवर्तन छिपाईं",
"tog-watchlisthidebots": "हमार ध्यान सूची से बोट द्वारा करल गईल परिवर्तन के छिपाईं",
@@ -206,6 +207,7 @@
"otherlanguages": "अन्य भाषा में",
"redirectedfrom": "($1 द्वारा पुन: निर्देशित)",
"redirectpagesub": "पुन: निर्देशित पन्ना",
+ "redirectto": "पुनः निर्देशित:",
"lastmodifiedat": "$1 के $2 पर ई पन्ना पर अन्तिम बार परिवर्तन भईल।",
"viewcount": "ई पन्ना {{PLURAL:$1|एक|$1}} बार देखल गईल बा।",
"protectedpage": "सुरक्षित पन्ना",
@@ -227,6 +229,7 @@
"disclaimers": "अस्विकरण",
"disclaimerpage": "Project:सामान्य अस्विकरण",
"edithelp": "मदद सम्पादन",
+ "helppage-top-gethelp": "मदद",
"mainpage": "मुख्य पन्ना",
"mainpage-description": "मुख्य पन्ना",
"policy-url": "Project:नीति",
@@ -249,9 +252,9 @@
"youhavenewmessagesmulti": "रउआ लगे $1 पर नया सन्देश बा",
"editsection": "सम्पादन",
"editold": "सम्पादन",
- "viewsourceold": "स्त्रोत देखीं",
+ "viewsourceold": "स्रोत देखीं",
"editlink": "सम्पादन",
- "viewsourcelink": "स्त्रोत देखीं",
+ "viewsourcelink": "स्रोत देखीं",
"editsectionhint": "सम्पादन खण्ड: $1",
"toc": "सामग्री",
"showtoc": "देखाईं",
@@ -321,15 +324,15 @@
"perfcached": "नीचे दिहल गइल डेटा कैशे मेमोरी से लिहल गइल बा, अतः हो सकता बा कि इ के पूर्ण अद्यतन ना भइल होखे। कैशे मेमोरी में अधिकतम {{PLURAL:$1|एक नतीजा|$1 नतीजं}} उपलब्ध बाड़े।",
"perfcachedts": "नीचे दिहल गइल डेटा कैशे मेमोरी से बा, आ एकर अंतिम अपडेट $1 के भइल रहल। कैश मेमोरी में अधिकतम {{PLURAL:$4|एक नतीजा|$4 नतीजां}} उपलब्ध बा।",
"querypage-no-updates": "इ पृष्ठ के अपडेट करल अयोग्य बा। अभी अहिजा के डाटा के ताज़ा नइखे करल जा सकत।",
- "viewsource": "स्त्रोत देखीं",
+ "viewsource": "स्रोत देखीं",
"viewsource-title": "$1 के स्रोत देखीं",
"actionthrottled": "कार्य समाप्त कर दिहल गइल बा",
"actionthrottledtext": "स्पैम के रोकथाम खातिर, इ क्रिया एतना कम समय में एक सीमा से अधिक बार करे के मना बा, आ रउआ इ सीमा के पार कर चुकल बानी।\nकृपया कुछ समय बाद पुन: यत्न करीं।",
"protectedpagetext": "इ पन्ना संपादन आ अन्य कार्यं से बचाव खातिर सुरक्षित कर दिहल गइल बा।",
- "viewsourcetext": "रउआ इ पन्ना के स्त्रोत देख सकत बानी आ एकर नकल उतार सकत बानी:",
+ "viewsourcetext": "रउआ एह पन्ना के स्रोत देख सकत बानी आ एकर नकल उतार सकत बानी:",
"viewyourtext": "रउआ इ पन्ना में ''आपन सम्पादन'' के स्रोत देख सकत बानी आ ओकर नकल उतार सकत बानी:",
"protectedinterface": "इ पन्ना इ विकी के सॉफ़्टवेयर के इंटरफ़ेस पाठ्य के देवेला, आ इ के गलत प्रयोग से बचावे खातिर सुरक्षित कर दिहल गइल बा।\nसभन विकियन खातिर अनुवाद जोड़े या बदले खातिर कृपया मीडियाविकि के क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] के प्रयोग करीं।",
- "editinginterface": "'''चेतावनी:''' रउआ एगो अइसन पन्ना के बदल रहल बानी जउन सॉफ़्टवेयर के इंटरफ़ेस पाठ्य प्रदान करेला।\nइ पन्ना के बदलला से अन्य सदस्यन के प्रदर्शित इंटरफ़ेस के शक्ल-सूरत में बदलाव आइ।\nसभे विकियन के खातिर अनुवाद बदले या जोड़े खातिर कृपया मीडियाविकि के क्षेत्रीयकरण परियोजना [//translatewiki.net/wiki/Main_Page?setlang=hi translatewiki.net] के प्रयोग करीं।",
+ "editinginterface": "<strong>चेतावनी:</strong> आप एगो अइसन पन्ना के बदल बदल रहल बानी जवन सॉफ़्टवेयर के इंटरफ़ेस पाठ प्रदान करेला। इ पृष्ठ के बदले से अन्य सदस्यवन के प्रदर्शित इंटरफ़ेस के शक्लोसूरत में बदलाव आई।",
"cascadeprotected": "इ पन्ना पर सम्पादन करे के अधिकार खत्म कर दिहल गइल बा काहे कि इ निम्न में शामिल बा {{PLURAL:$1|पन्ना, जउन|पन्नां, जउन}} \"व्यापक\" विकल्प के चालू कइला के साथ सुरक्षित कर दिहल गइल बा:\n$2",
"namespaceprotected": "रउआ के '''$1''' नामस्थान के पन्नं में सम्पादन करे के अधिकार नइखे दिहल गइल।",
"customcssprotected": "रउआ के इ CSS पन्ना के संपादित करे के अनुमति नइखे, काहे कि इ में अन्य सदस्यं के व्यक्तिगत सेटिंग्स समाविष्ट बा।",
@@ -344,7 +347,7 @@
"invalidtitle-knownnamespace": "\"$2\" नामस्थान आ \"$3\" पाठ्य वाला गलत शीर्षक",
"invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आ नाम \"$2\" वाला गलत शीर्षक",
"exception-nologin": "खाता में प्रवेश नईखीं भईल",
- "exception-nologin-text": "इ पन्ना अथवा कार्य के सक्षम करे खातिर कृपया [[Special:Userlogin|लॉग इन]] करीं।",
+ "exception-nologin-text": "इ पन्ना अथवा कार्य के सक्षम करे खातिर कृपया प्रवेश करीं।",
"exception-nologin-text-manual": "इ पन्ना अथवा कार्य के सक्षम करे खातिर कृपया $1 करीं।",
"virus-badscanner": "गलत जमाव: अज्ञात वायरस जाँचक: ''$1''",
"virus-scanfailed": "जाँच विफल (कोड $1)",
@@ -499,7 +502,6 @@
"passwordreset-emailsent-capture": "नीचे दिखावल गईल गुप्तशब्द पुनर्स्थापना ई-मेल भेज दिहल गईल बा।",
"passwordreset-emailerror-capture": "नीचे दिखावल गईल गुप्तशब्द पुनर्स्थापना ई-मेल उत्पन्न करल गईल रहल, परंतु उ के {{GENDER:$2|सदस्य}} के भेजे के क्रिया असफल रहल।\nत्रुटि: $1",
"changeemail": "ई-मेल पता बदलीं",
- "changeemail-header": "खाता के ई-मेल पता बदलीं",
"changeemail-text": "आपन ई-मेल पता बदले खातिर इ फॉर्म के भरीं। इ बदलाव के पुष्टे करे खातिर रउआ आपन गुप्तशब्द पुनः लिखे के पड़ी।",
"changeemail-no-info": "इ पन्ना के सिधे प्रयोग करे खातिर रउआ पहिले खाता में प्रवेश करे के पड़ी।",
"changeemail-oldemail": "वर्तमान ई-मेल पता:",
@@ -507,7 +509,6 @@
"changeemail-none": "(कउनो नाहीं)",
"changeemail-password": "राउर {{SITENAME}} गुप्तशब्द:",
"changeemail-submit": "ई-मेल बदलीं",
- "changeemail-cancel": "रद्द करीं",
"changeemail-throttled": "रउआ हाले में कईयन बार खाता में प्रवेश करे के कोशिश कर चुकल बानी।\nकृपया $1 प्रतिक्षा करला के बाद फिर से प्रयास करब।",
"resettokens": "टोकन रीसेट करीं",
"resettokens-text": "जौन टोकन राउर खाता से सम्बद्ध कुछ विशिष्ट व्यक्तिगत जानकारी प्रदान करेला, आप उ के अहिजा रीसेट कर सकत बानी।\n\nयदि रउआ ई के गलती से केहू के दिखा देले बानी या फिर राउर खाता हैक हो गईल बा त रउआ ई के रीसेट कर देवे के चाहीं।",
@@ -537,7 +538,7 @@
"preview": "पूर्वावलोकन",
"showpreview": "पूर्वावलोकन देखाईं",
"showdiff": "परिवर्तन देखाईं",
- "anoneditwarning": "'''चेतावनी:''' रउआ आपन खाता में प्रवेश नईखीं कईले। ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज कईल जाई।",
+ "anoneditwarning": "<strong>चेतावनी:</strong> रउआ आपन खाता में प्रवेश नईखीं कईले। यदि रउआ कवनो बदलाव करत बानी त राउर आईपी पता खुलेआम दिखाई दी। यदि रउआ <strong>[$1 लॉग इन]</strong> या <strong>[$2 नया खाता बनायेब]</strong> त, अन्य सुविधावन के साथ राउर सम्पादन के श्रेय राउर सदस्यनाम पर चल जाई।",
"anonpreviewwarning": "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
"missingsummary": "'''स्मरणपत्र:'''रउआ एगो सारांश के सम्पादन नईखीं प्रदान कईले। अगर रउआ \"फिर से सुरक्षित करीं\" पर क्लिक करेब, त राउर सम्पादन बिना एगो सारांश के सुरक्षित हो जाई।",
"missingcommenttext": "कृपया निचे एगो टिप्पणी करीं।",
@@ -574,11 +575,15 @@
"template-protected": "(संरक्षित)",
"template-semiprotected": "(अर्ध-सुरक्षित)",
"nocreate-loggedin": "नया पन्ना बनावे रउआ अधिकार नइखे।",
+ "sectioneditnotsupported-title": "अनुभाग सम्पादन समर्थित नइखे",
+ "sectioneditnotsupported-text": "इ पन्ना पर अनुभाग सम्पादन समर्थित नइखे",
"permissionserrors": "अनुमति त्रुटी",
+ "permissionserrorstext": "निम्नलिखित {{PLURAL:$1|कारण|कारणन}} के चलते आपके अइसन करे के अनुमति नइखे:",
"log-fulllog": "पूरा लॉग देखीं",
"edit-conflict": "संपादन अंतर्विरोध",
"postedit-confirmation-created": "पन्ना बना दिहल गईल।",
"postedit-confirmation-saved": "राउर सम्पादन सुरक्षित कर दिहल गईल।",
+ "defaultmessagetext": "संदेश के डिफ़ॉल्ट पाठ्य",
"invalid-content-data": "अवैध डाटा सामग्री",
"content-model-wikitext": "विकीपाठ्य",
"content-model-text": "सामान्य पाठ",
@@ -587,7 +592,7 @@
"post-expand-template-inclusion-category": "अइसन पृष्ठ जे पर साँचा जोडे के सीमा पार हो गइल बा",
"cantcreateaccounttitle": "खाता खुल नईखे सकत",
"revisionasof": "$1 के रुप में संशोधन",
- "revision-info": "$2 में से $1 के रुप में संशोधन",
+ "revision-info": "{{GENDER:$6|$2}}$7 के द्वारा $1 के संशोधन",
"previousrevision": "← पुरान संशोधन",
"nextrevision": "नया संशोधन →",
"currentrevisionlink": "हाल के संशोधन",
@@ -609,19 +614,19 @@
"history-feed-empty": "अनुरोध करल गईल पन्ना उपलब्ध नईखे। हो सकत बा उ के विकि पर से मिटा दिहल गईल होखे, आ चाहे उ के नाम बदल देवल गईल होखे।\nप्रासंगिक पन्ना के [[Special:Search|विकि पर खोजे के]] कोशिश करत रहीं।",
"rev-deleted-comment": "(सम्पादन सारांश हटावल गईल)",
"rev-deleted-user": "(प्रयोगकर्ता के नाम मिटा दिहल गईल बा)",
- "rev-deleted-event": "(लॉग कार्रवाई मिटा दिहल गईल बा)",
+ "rev-deleted-event": "(लॉग विवरण हटा दिहल गईल बा)",
"rev-deleted-user-contribs": "[प्रयोगकर्ता नाम आ चाहे आइ पी पता हटा दिहल गईल बा - योगदान से सम्पादन छुप गईल बा]",
"rev-deleted-text-permission": "ई पन्ना के संशोधन '''मिटा'''' दिहल गईल बा।\nमेटावल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} डिलेशन लॉग] में मिली।",
"rev-delundel": "दिखाईं/छुपाईं",
"rev-showdeleted": "देखाईं",
"revdelete-show-file-submit": "जी",
- "revdelete-hide-text": "संशोधन पाठ्य छुपाँईं",
+ "revdelete-hide-text": "संशोधन पाठ्य",
"revdelete-hide-image": "फाइल के सामग्री छुपाँईं",
- "revdelete-hide-comment": "सम्पादित सारांश छुपाँईं",
- "revdelete-hide-user": "सम्पादक के सदस्यनाम/आइ॰पी छुपाँईं",
+ "revdelete-hide-comment": "सारांश सम्पादन",
+ "revdelete-hide-user": "सम्पादक के सदस्यनाम/आइ॰पी पता",
"revdelete-radio-same": "(मत बदलीं)",
- "revdelete-radio-set": "जी",
- "revdelete-radio-unset": "ना",
+ "revdelete-radio-set": "छुपल",
+ "revdelete-radio-unset": "दृश्यमान",
"revdelete-log": "कारण:",
"revdel-restore": "दूश्यता बदलीं",
"pagehist": "पन्ना के इतिहास",
@@ -630,10 +635,10 @@
"revdelete-reasonotherlist": "अन्य कारण",
"revdelete-edit-reasonlist": "हटावे के कारण बदलीं",
"revdelete-offender": "संशोधन सम्पादक:",
- "mergehistory-from": "स्त्रोत पन्ना:",
+ "mergehistory-from": "स्रोत पन्ना:",
"mergehistory-reason": "कारण:",
"revertmerge": "अलग करीं",
- "mergelogpagetext": "एक पन्ना इतिहास के दुसर पन्ना इतिहास में तुरंत विलय भईल एगो सूची नीचे दिहल बा।",
+ "mergelogpagetext": "एक पन्ना इतिहास के दुसर पन्ना इतिहास में तुरंत विलय भइले के एगो सूची नीचे दिहल बा।",
"history-title": "''$1'' के संशोधन इतिहास",
"lineno": "पंक्ति $1:",
"compareselectedversions": "चुनल गईल संशोधन में अन्तर देखीं",
@@ -646,12 +651,14 @@
"notextmatches": "पन्ना के पाठ्य नईखे मिलत",
"prevn": "पिछला {{PLURAL:$1|$1}}",
"nextn": "अगला {{PLURAL:$1|$1}}",
+ "prev-page": "पिछलका पन्ना",
+ "next-page": "अगला पन्ना",
"prevn-title": "पिछला $1 {{PLURAL:$1|परिणाम}}",
"nextn-title": "अगला $1 {{PLURAL:$1|परिणाम}}",
"shown-title": "दिखाईं $1 {{PLURAL:$1|परिणाम}}",
"viewprevnext": "देखीं ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''इ विकि पर ''[[:$1]]'' नाम से एगो पन्ना उपलब्ध बा'''",
- "searchmenu-new": "'''इ विकि पर ''[[:$1]]'' नाम से पन्ना बनाईं'''",
+ "searchmenu-new": "<strong> ई विकि पर \"[[:$1]]\" नाम के पन्ना बनाईं !</strong> {{PLURAL:$2|0=|आपके खोज से मिलल पन्ना भी देखीं|खोज परिणाम भी देखीं।}}",
"searchprofile-articles": "सामग्री पन्ना",
"searchprofile-images": "मल्टिमीडिया",
"searchprofile-everything": "सब कुछ",
@@ -665,7 +672,7 @@
"search-section": "(खंड $1)",
"search-suggest": "का राउर मतलब बा: $1",
"search-interwiki-caption": "भ्रातृ परियोजना",
- "search-interwiki-default": "$1 के परिणाम:",
+ "search-interwiki-default": "$1 से परिणाम:",
"search-interwiki-more": "(अउर)",
"search-relatedarticle": "संबंधित",
"searchrelated": "संबंधित",
@@ -681,11 +688,13 @@
"preferences": "वरीयता",
"mypreferences": "राउर पसन्द",
"prefs-edits": "सम्पादन संख्या",
+ "prefsnologintext2": "आपन वरीयता में बदलाव लावे खातिर प्रवेश करीं।",
"prefs-skin": "त्वचा",
"skin-preview": "पूर्वावलोकन",
+ "datedefault": "वरीयता नईखे",
"prefs-user-pages": "सदस्य पन्ना",
"prefs-personal": "सदस्य प्रोफाईल",
- "prefs-rc": "तुरंत भईल परिवर्तन",
+ "prefs-rc": "तुरंत भइल परिवर्तन",
"saveprefs": "सुरक्षित करीं",
"prefs-editing": "संपादन",
"searchresultshead": "खोज",
@@ -707,7 +716,7 @@
"prefs-preview": "पूर्वावलोकन",
"action-move": "ई पन्ना के स्थांतरण करीं",
"action-delete": "ई पन्ना के मिटाईं",
- "recentchanges": "तुरंत भईल परिवर्तन",
+ "recentchanges": "तुरंत भइल परिवर्तन",
"recentchanges-legend": "हाल के परिवर्तन संबंधी विकल्प",
"recentchanges-label-newpage": "ई सम्पादन से एगो नवका पृष्ठ तैयार हो गइल बा",
"recentchanges-label-minor": "ई एगो छोटा सम्पाद बा",
@@ -723,6 +732,7 @@
"newpageletter": "न",
"boteditletter": "बो",
"number_of_watching_users_pageview": "[$1 देखल जा रहल बा {{PLURAL:$1|प्रयोगकर्ता|प्रयोगकर्ता}}]",
+ "rc-change-size-new": "$1 {{PLURAL:$1|बाइट|बाइट सब}} बदलाव के बाद",
"recentchangeslinked": "सम्बन्धित बदलाव",
"recentchangeslinked-feed": "सम्बन्धित बदलाव",
"recentchangeslinked-toolbox": "सम्बन्धित बदलाव",
@@ -732,6 +742,7 @@
"fileuploadsummary": "सारांश:",
"filesource": "स्रोत:",
"unknown-error": "अज्ञात त्रुटि उत्पन्न हो गईल बा।",
+ "license-header": "लाईसेंसिंग",
"file-anchor-link": "फ़ाइल",
"filehist": "पन्ना के इतिहास",
"filehist-deleteall": "सब मिटाईं",
@@ -769,7 +780,7 @@
"newpages": "नवका पन्ना",
"move": "स्थान्तरण",
"movethispage": "ई पन्ना के स्थांतरण करीं",
- "booksources": "किताबी स्त्रोत",
+ "booksources": "किताबी स्रोत",
"allarticles": "सभी पन्ना",
"allpagessubmit": "जाईं",
"allpagesprefix": "उपसर्ग के साथे पन्ना प्रदर्शन:",
@@ -791,7 +802,7 @@
"contributions-title": " $1 खातिर प्रयोगकर्ता योगदान",
"mycontris": "राउर योगदान के सूची",
"nocontribs": "ई मानदंड से मिलत जुलत कौनो बदलाव ना मिलल।",
- "uctop": "(शीर्ष)",
+ "uctop": "(हाल के)",
"month": "महिना से (आ उ से पहिले):",
"year": "साल से (आ उ से पहिले):",
"sp-contributions-newbies": "खाली नया खाता के योगदान देखीं।",
@@ -815,10 +826,11 @@
"whatlinkshere-next": "{{PLURAL:$1|अगला|अगला $1}}",
"whatlinkshere-links": "← लिंक",
"whatlinkshere-hideredirs": "$1 पुन: निर्देशित",
+ "whatlinkshere-hidetrans": "$1 ट्रान्स्क्ल्युजन्स",
"whatlinkshere-hidelinks": "$1 लिंक",
"whatlinkshere-hideimages": "$1 फ़ाइल लिंक",
"whatlinkshere-filters": "फिल्टर",
- "blockip": "प्रतिबंधित प्रयोगकर्ता",
+ "blockip": "{{GENDER:$1|सदस्य}} अवरोधित करीं",
"ipboptions": "२ घंटे:2 hours,१ दिन:1 day,३ दिन:3 days,१ हफ्ता:1 week,२ हफ्ते:2 weeks,१ महिना:1 month,३ महिने:3 months,६ महिने:6 months,१ साल:1 year,हमेशा खातिर:infinite",
"blocklink": "निष्क्रिय",
"unblocklink": "ताला खोलीं",
@@ -837,13 +849,14 @@
"tooltip-pt-mycontris": "राउर योगदान के सूची",
"tooltip-pt-login": "रउआ के खाता प्रवेश खातिर प्रोत्साहित करल जा रहल बा, बाकि ई अनिवार्य नईखे",
"tooltip-pt-logout": "खाता से बाहर",
+ "tooltip-pt-createaccount": "हमनी के सुझाव बा की आप खाता बनाईं आ प्रवेश करीं, परन्तु ई अनिवार्य नईखे",
"tooltip-ca-talk": "सामग्री पन्ना के बारे में बात-चीत",
"tooltip-ca-edit": "रउआ ई पन्ना के सम्पादन कर सकत बानी। कृपया पन्ना सुरक्षित करे से पहिले पूर्वावलोकन बटन के इस्तेमाल करीं।",
"tooltip-ca-addsection": "एगो नया खण्ड शुरु करीं",
"tooltip-ca-viewsource": "इ पन्ना के संरक्षित कर दिहल गईल बा। रऊआ एकर मूल देख सकत बानी।",
"tooltip-ca-history": "ई पन्ना के पिछला संशोधन",
"tooltip-ca-protect": "इ पन्ना के संरक्षित करीं।",
- "tooltip-ca-unprotect": "इ पन्ना के संरक्षण हटाईं।",
+ "tooltip-ca-unprotect": "ई पन्ना के सुरक्षा बदलीं।",
"tooltip-ca-delete": "ई पन्ना मिटाईं",
"tooltip-ca-move": "ई पन्ना के स्थांतरण करीं",
"tooltip-ca-watch": "इ पन्ना के आपन ध्यानसूची में डालीं",
@@ -861,11 +874,13 @@
"tooltip-t-whatlinkshere": "अहिजा लिंक होखे वाला सब विकि पन्ना के सूची",
"tooltip-t-recentchangeslinked": "ई पन्ना से जुड़ल पन्नवन पर तुरंत भईल परिवर्तन",
"tooltip-feed-atom": "ई पन्ना खातिर अणु फ़ीड",
+ "tooltip-t-contributions": "इ सदस्य के योगदान के सूची",
"tooltip-t-upload": "फाईल लादीं (अपलोड )",
"tooltip-t-specialpages": "ख़ाश पन्नवन के सूची",
"tooltip-t-print": "ई पन्ना के छापे लायक संस्करण।",
"tooltip-t-permalink": "ई पन्ना के संसोधन खातिर स्थायी लिंक।",
"tooltip-ca-nstab-main": "सामग्री पन्ना देखीं",
+ "tooltip-ca-nstab-user": "प्रयोगकर्ता पन्ना देखीं",
"tooltip-ca-nstab-special": "ई एगो ख़ाश पन्ना ह, रउआ ई पन्ना के सम्पादन नईखीं कर सकत",
"tooltip-ca-nstab-image": "संचिका के पन्ना देखीं",
"tooltip-ca-nstab-template": "टेम्प्लेट देखीं",
@@ -874,9 +889,11 @@
"tooltip-preview": "आपन द्वारा कियल गइल बदलाव के देखीं, संजोये से पहले ईका इस्तेमाल करीं!",
"tooltip-rollback": "\"वापिस लीं\" ई पन्ना के पिछ्ला योगदाता के बदलाव एकही चटके मे गायब कर देवेला",
"tooltip-summary": "एगो संक्षिप्त सारांश दर्ज करीं",
+ "pageinfo-toolboxlink": "जानकारी पन्ना",
"file-nohires": " उच्च गुणवत्ता उपलब्ध नईखे।",
"svg-long-desc": "एस वी जी फाईल, नॉमिनल्ली $1 x $2 पिक्सल्स, फाईल के आकार $3",
- "show-big-image": "पुरा गुणवत्ता",
+ "show-big-image": "मूल फाईल",
+ "show-big-image-size": "$1 × $2 पिक्सल",
"file-info-gif-looped": "लूप्ड",
"file-info-gif-frames": "$1 {{PLURAL:$1|फ्रेम}}",
"file-info-png-looped": "लूप्ड",
@@ -897,11 +914,20 @@
"exif-yresolution": "लम्बवत समाधान",
"exif-stripoffsets": "चित्र डेटा के स्थिती",
"exif-jpeginterchangeformatlength": "JPEG डेटा के बाइट",
+ "exif-make": "कैमेरा उत्पादक",
+ "exif-model": "कैमेरा मॉडेल",
+ "exif-software": "प्रयोग करल गईल सॉफ्टवेयर",
+ "exif-datetimeoriginal": "डाटा बनावे के दिनांक अउर समय",
+ "exif-orientation-1": "सामान्य",
"namespacesall": "सब",
"monthsall": "सब",
"confirmemail": "इ-मेल पता कन्फर्म करीं",
"version-no-ext-name": "[अज्ञात नाम]",
"specialpages": "ख़ाश पन्ना",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग|टैग कुल}}]]: $2)",
+ "logentry-delete-delete": "$1 द्वारा पन्ना $3 {{GENDER:$2|हटा}} दिहल गईल",
"revdelete-restricted": "प्रबंधक पर प्रतिबंध लागू",
- "revdelete-unrestricted": "प्रबंधक पर से प्रतिबंध समाप्त"
+ "revdelete-unrestricted": "प्रबंधक पर से प्रतिबंध समाप्त",
+ "revdelete-summary": "सारांश संपादन",
+ "searchsuggest-search": "खोजीं"
}
diff --git a/languages/i18n/bi.json b/languages/i18n/bi.json
index 7e1934c0..6a6d53a1 100644
--- a/languages/i18n/bi.json
+++ b/languages/i18n/bi.json
@@ -1,111 +1,106 @@
{
- "@metadata": {
- "authors": [
- "Iketsi",
- "Sotiale",
- "Ushanka"
- ]
- },
- "underline-always": "Oltaem",
- "underline-never": "Neva",
- "sunday": "Sande",
- "monday": "Mande",
- "tuesday": "Tusde",
- "wednesday": "Wenesde",
- "thursday": "Tosde",
- "friday": "Fraede",
- "saturday": "Sarede",
- "sun": "San",
- "mon": "Man",
- "tue": "Tu",
- "wed": "Wen",
- "thu": "To",
- "fri": "Frae",
- "sat": "Sar",
- "january": "Januware",
- "february": "Februari",
- "march": "Maj",
- "april": "Epril",
- "may_long": "Mei",
- "june": "Jun",
- "july": "Julae",
- "august": "Ogis",
- "september": "Septemba",
- "october": "Oktoba",
- "november": "Novemba",
- "december": "Desemba",
- "january-gen": "Januware",
- "february-gen": "Februari",
- "march-gen": "Maj",
- "april-gen": "Epril",
- "may-gen": "Mei",
- "june-gen": "Jun",
- "july-gen": "Julae",
- "august-gen": "Ogis",
- "september-gen": "Septemba",
- "october-gen": "Oktoba",
- "november-gen": "Novemba",
- "december-gen": "Desemba",
- "mar": "Maj",
- "apr": "Epr",
- "may": "Mei",
- "aug": "Ogis",
- "oct": "Okt",
- "dec": "Des",
- "mypage": "Pej blong mi",
- "mytalk": "Tingting blong mi",
- "and": "&#32;mo",
- "qbedit": "Jenisim hem",
- "qbpageoptions": "Pej ia",
- "qbmyoptions": "Ol pej blong mi",
- "vector-action-move": "Muv",
- "vector-view-history": "Lukluk histri",
- "vector-view-view": "Rid",
- "search": "Faenem samting",
- "history": "Pej histri",
- "history_short": "Histri",
- "edit": "Jenisim hem",
- "newpage": "Mekem niu pej",
- "talkpagelinktext": "Toktok",
- "specialpage": "Spesel Pej",
- "talk": "Tingting",
- "mainpage": "Nambawan Pej",
- "mainpage-description": "Nambawan Pej",
- "portal": "Haus blong toktok‎",
- "portal-url": "Project:Haus blong toktok‎",
- "retrievedfrom": "Kam long \"$1\"",
- "editsection": "jenisim hem",
- "editold": "jenisim hem",
- "red-link-title": "$1 (pej i no stap)",
- "nstab-main": "Atikel",
- "nstab-special": "Spesel pej",
- "nstab-project": "Projek pej",
- "minoredit": "Mi bin mekem wan smol jenis",
- "servertime": "Taem blong server",
- "recentchanges": "Niu jenis",
- "listfiles_name": "Nem",
- "shortpages": "Ol smol pej",
- "longpages": "Ol big pej",
- "newpages": "Ol niu pej",
- "allarticles": "Olgeta atikel",
- "emailfrom": "Kam long",
- "emailto": "Go long:",
- "year": "Yia:",
- "sp-contributions-talk": "toktok",
- "move-page-legend": "Muvum pej",
- "movearticle": "Muvum pej:",
- "allmessagesname": "Nem",
- "tooltip-pt-mytalk": "Pej blong tingting blong mi",
- "tooltip-p-logo": "Nambawan Pej",
- "tooltip-n-mainpage": "Go long Nambawan Pej",
- "tooltip-minoredit": "Em i stap wan smol jenis",
- "showhidebots": "($1 bot)",
- "exif-imagedescription": "Nem blong pikta",
- "exif-exposuretime-format": "$1 sek. ($2)",
- "watchlistall2": "olgeta",
- "namespacesall": "olgeta",
- "monthsall": "olgeta",
- "table_pager_first": "Nambawan pej",
- "autosumm-new": "Niu pej: $1",
- "specialpages": "Spesel pej"
+ "@metadata": {
+ "authors": [
+ "Iketsi",
+ "Sotiale",
+ "Ushanka"
+ ]
+ },
+ "underline-always": "Oltaem",
+ "underline-never": "Neva",
+ "sunday": "Sande",
+ "monday": "Mande",
+ "tuesday": "Tusde",
+ "wednesday": "Wenesde",
+ "thursday": "Tosde",
+ "friday": "Fraede",
+ "saturday": "Sarede",
+ "sun": "San",
+ "mon": "Man",
+ "tue": "Tu",
+ "wed": "Wen",
+ "thu": "To",
+ "fri": "Frae",
+ "sat": "Sar",
+ "january": "Januware",
+ "february": "Februari",
+ "march": "Maj",
+ "april": "Epril",
+ "may_long": "Mei",
+ "june": "Jun",
+ "july": "Julae",
+ "august": "Ogis",
+ "september": "Septemba",
+ "october": "Oktoba",
+ "november": "Novemba",
+ "december": "Desemba",
+ "january-gen": "Januware",
+ "february-gen": "Februari",
+ "march-gen": "Maj",
+ "april-gen": "Epril",
+ "may-gen": "Mei",
+ "june-gen": "Jun",
+ "july-gen": "Julae",
+ "august-gen": "Ogis",
+ "september-gen": "Septemba",
+ "october-gen": "Oktoba",
+ "november-gen": "Novemba",
+ "december-gen": "Desemba",
+ "mar": "Maj",
+ "apr": "Epr",
+ "may": "Mei",
+ "aug": "Ogis",
+ "oct": "Okt",
+ "dec": "Des",
+ "mypage": "Pej blong mi",
+ "mytalk": "Tingting blong mi",
+ "and": "&#32;mo",
+ "qbedit": "Jenisim hem",
+ "qbpageoptions": "Pej ia",
+ "qbmyoptions": "Ol pej blong mi",
+ "search": "Faenem samting",
+ "history": "Pej histri",
+ "history_short": "Histri",
+ "edit": "Jenisim hem",
+ "newpage": "Mekem niu pej",
+ "talkpagelinktext": "Toktok",
+ "specialpage": "Spesel Pej",
+ "talk": "Tingting",
+ "mainpage": "Nambawan Pej",
+ "mainpage-description": "Nambawan Pej",
+ "portal": "Haus blong toktok‎",
+ "portal-url": "Project:Haus blong toktok‎",
+ "retrievedfrom": "Kam long \"$1\"",
+ "editsection": "jenisim hem",
+ "editold": "jenisim hem",
+ "red-link-title": "$1 (pej i no stap)",
+ "nstab-main": "Atikel",
+ "nstab-special": "Spesel pej",
+ "nstab-project": "Projek pej",
+ "minoredit": "Mi bin mekem wan smol jenis",
+ "servertime": "Taem blong server",
+ "recentchanges": "Niu jenis",
+ "listfiles_name": "Nem",
+ "shortpages": "Ol smol pej",
+ "longpages": "Ol big pej",
+ "newpages": "Ol niu pej",
+ "allarticles": "Olgeta atikel",
+ "emailfrom": "Kam long",
+ "emailto": "Go long:",
+ "year": "Yia:",
+ "sp-contributions-talk": "toktok",
+ "move-page-legend": "Muvum pej",
+ "movearticle": "Muvum pej:",
+ "allmessagesname": "Nem",
+ "tooltip-pt-mytalk": "Pej blong tingting blong mi",
+ "tooltip-p-logo": "Nambawan Pej",
+ "tooltip-n-mainpage": "Go long Nambawan Pej",
+ "tooltip-minoredit": "Em i stap wan smol jenis",
+ "exif-imagedescription": "Nem blong pikta",
+ "exif-exposuretime-format": "$1 sek. ($2)",
+ "namespacesall": "olgeta",
+ "monthsall": "olgeta",
+ "table_pager_first": "Nambawan pej",
+ "autosumm-new": "Niu pej: $1",
+ "specialpages": "Spesel pej"
}
diff --git a/languages/i18n/bjn.json b/languages/i18n/bjn.json
index 328fcd26..cffaf52a 100644
--- a/languages/i18n/bjn.json
+++ b/languages/i18n/bjn.json
@@ -6,7 +6,8 @@
"J Subhi",
"Kaganer",
"Riemogerz",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Garisi di bawah tautan",
@@ -422,7 +423,6 @@
"passwordreset-emailsent-capture": "Sabuting suril pangingat sudah dikirim, nangkaya ditampaiakan di bawah.",
"passwordreset-emailerror-capture": "Suril paugingat, nang ditampaikan di bawah, hudah dihasilakan, tagal gagal mangirimakannya ka pamakai: $1",
"changeemail": "Ganti alamat suril",
- "changeemail-header": "Ganti akun alamat suril",
"changeemail-text": "Manuntungakan purmulir ngini hagan mangganti alamat suril Pian. Pian akan parlu mamasukakan katasunduk Pian hagan mayakinakan paubahan ngini.",
"changeemail-no-info": "Pian musti babuat log hagan babuat ka tungkaran ngini langsung.",
"changeemail-oldemail": "Alamat suril wayah ni:",
@@ -430,7 +430,6 @@
"changeemail-none": "(kadada)",
"changeemail-password": "Sandi {{SITENAME}} Pian:",
"changeemail-submit": "Ganti suril",
- "changeemail-cancel": "Walangi",
"bold_sample": "Naskah kandal",
"bold_tip": "Naskah kandal",
"italic_sample": "Naskah hiring",
@@ -675,7 +674,6 @@
"mergehistory-same-destination": "Tungkaran-tungkaran asal mula wan tatuju kada kawa sama",
"mergehistory-reason": "Alasan:",
"mergelog": "Log panggabungan",
- "pagemerge-logentry": "Sudah digabungakan [[$1]] ka dalam [[$2]] (ralatan-ralatan sampai $3)",
"revertmerge": "Walang panggabungan",
"mergelogpagetext": "Di bawah adalah daptar nang paling hanyar panggabungan matan sabuah tungkaran halam ka dalam nang lain.",
"history-title": "Ralatan halam matan ''$1''",
@@ -718,7 +716,6 @@
"searchrelated": "bakulaan",
"searchall": "samunyaan",
"showingresults": "Di bawah ngini ditampaiakan hingga {{PLURAL:$1|'''1''' kulihan|'''$1''' kukulihan}}, dimulai matan #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Kulihan '''$1''' matan '''$3'''|Kukulihan '''$1 - $2''' matan '''$3'''}} gasan '''$4'''",
"search-nonefound": "Kadada kulihan nang pas awan parmintaan.",
"powersearch-legend": "Panggagaian mahir",
"powersearch-ns": "Manggagai di ngaran kamar:",
@@ -1240,7 +1237,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Statistik tungkaran",
"statistics-header-edits": "Statistik babakan",
- "statistics-header-views": "Statistik panampaian",
"statistics-header-users": "Statistik pamuruk",
"statistics-header-hooks": "Statistik lainnya",
"statistics-articles": "Tungkaran isi",
@@ -1249,13 +1245,9 @@
"statistics-files": "Barakas nang dihunggahakan",
"statistics-edits": "Jumlah babakan tumatan {{SITENAME}} dimulai",
"statistics-edits-average": "Rata-rata babakan par tungkaran",
- "statistics-views-total": "Jumlah panampaian tungkaran",
- "statistics-views-total-desc": "Tilik ka tutungkaran nang kadada wan tungkaran istimiwa kada tamasuk",
- "statistics-views-peredit": "Titiringan par babakan",
"statistics-users": "Jumlah [[Special:ListUsers|pamuruk tadaptar]]",
"statistics-users-active": "Jumlah pamuruk aktip",
"statistics-users-active-desc": "Pamuruk nang sudah malakukan suatu aksi dalam {{PLURAL:$1|sahari|$1 hari}} tauncit.",
- "statistics-mostpopular": "Tungkaran nang paling banyak ditampaiakan",
"doubleredirects": "Paugahan ganda",
"doubleredirectstext": "Tungkaran ngini mandaptar tutungkaran nang maugah ka tutungkaran ugahan lain.\nTiap baris mangandung tautan ka ugahan panambaian wan kadua, sasarannya adalah ugahn kadua, nang biasanya tungkaran sasaran \"sabujurnya\", nang ugahan partama tuju.\nMasukan nang <del>Disilangi</del> sudah dibaiki.",
"double-redirect-fixed-move": "[[$1]] sudah dipindahakan.\nNgini wayah ini sudah diugahakan ka [[$2]].",
@@ -1288,7 +1280,6 @@
"uncategorizedtemplates": "Citakan nang kada batumbung",
"unusedcategories": "Tutumbung kada tapuruk",
"unusedimages": "Barakas nang kada tapakai",
- "popularpages": "Tutungkaran popular",
"wantedcategories": "Tutumbung naang dihandaki",
"wantedpages": "Tutungkaran nang dihandaki",
"wantedpages-badtitle": "Judul kada sah dalam setelan kulihan: $1",
@@ -1336,7 +1327,6 @@
"querypage-disabled": "Tungkaran istimiwa ngini dikada-kawakan gasan alasan ginawi.",
"booksources": "Buku bamula",
"booksources-search-legend": "Gagai gasan buku asal mula",
- "booksources-go": "Tulak ka",
"booksources-text": "Di bawah adalah sabuah daptar tautan ka situs lain nang manjual bubuku hanyar wan bakas, wan jua baisi panjalasan labih pasal bubuku nang Pian ugai:",
"booksources-invalid-isbn": "ISBN nang dibari mancungul kada sah; pariksa kalua-ai tasalah marekap matan asal-mula aslinya.",
"specialloguserlabel": "Pamakai:",
@@ -1449,7 +1439,7 @@
"wlheader-enotif": "Suril pamadahan dipajahi.",
"wlheader-showupdated": "Tutungkaran nang ba-ubah tumatan ilangan tauncit Pian ditampaiakan dalam '''hurup kandal'''",
"wlnote": "Di bawah naya adalah {{PLURAL:$1|paubahan|'''$1''' paubahan}} tauncit dalam '''$2''' jam tauncit, par $3, $4.",
- "wlshowlast": "Tampaiakan $1 jam $2 hari pahabisan $3",
+ "wlshowlast": "Tampaiakan $1 jam $2 hari pahabisan",
"watchlist-options": "Pilihan daptar itihan",
"watching": "Maitihi...",
"unwatching": "Kada jadi maitihi...",
@@ -1496,7 +1486,6 @@
"delete-toobig": "Tungkaran ngini baisi sabuting sajarah pambabakan nang panjang, labih pada $1 {{PLURAL:$1|ralatan|raralatan}}.\nPahapusan tutungkaran kaini dibatasi hagan mancagah parakaian bakajutan di {{SITENAME}}.",
"delete-warning-toobig": "Tungkaran ngini baisi halam babakan ganal, labih pada $1 {{PLURAL:$1|ralatan|raralatan}}.\nMahapus ngini kawa mangaruhi databasis oparasi {{SITENAME}};\njalanakan awan ba-a-awas.",
"rollback": "Gulung bulik babakan",
- "rollback_short": "Gulung-bulik",
"rollbacklink": "bulikakan",
"rollbackfailed": "Guling-bulik luput",
"cantrollback": "Kada kawa mambalikakan babakan;\npanyumbang tauncit adalah asa-asanya panulis tungkaran ngini.",
@@ -1863,7 +1852,6 @@
"import": "Pamasuk tungkaran",
"importinterwiki": "Impur transwiki",
"import-interwiki-text": "Pilihi sabuting wiki wan judul tungkaran hagan di-impor.\nTanggal raralatan wan ngaran pambabak akan di partahanakan.\nSamunyaan gawi impur transwiki akan dicatat pada [[Special:Log/import|log impur]].",
- "import-interwiki-source": "Wiki/tungkaran asal mula:",
"import-interwiki-history": "Salin sabarataan halam raralatan gasan tungkaran ngini",
"import-interwiki-templates": "Tamasuk samunyaan cicitakan",
"import-interwiki-submit": "Impur",
@@ -1897,9 +1885,7 @@
"import-error-create": "Tungkaran \"$1\" kada diumpur karana Pian kada bulih maulah ngini.",
"importlogpage": "Log impur",
"importlogpagetext": "Impur administratip matan tutungkaran awan babakan halam matan wiwiki lain.",
- "import-logentry-upload": "[[$1]] diimpur lung hunggah barakas",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|ralatan|raralatan}}",
- "import-logentry-interwiki": "ditranswiki $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ralatan|raralatan}} matan $2",
"javascripttest": "Mantis JavaScript",
"javascripttest-pagetext-skins": "Pilih kulit nang cagar Pian cubai:",
@@ -2000,7 +1986,6 @@
"pageinfo-robot-policy": "Status masin panggagai",
"pageinfo-robot-index": "Kawa diindeks",
"pageinfo-robot-noindex": "Kada kawa diindeks",
- "pageinfo-views": "Rikinan titiringan",
"pageinfo-watchers": "Jumlah pa-itih tungkaran",
"pageinfo-few-watchers": "Kurang matan $1 {{PLURAL:$1|pa-ilang}}",
"pageinfo-redirects-name": "Paugahan ka tungkaran ngini",
@@ -2429,7 +2414,6 @@
"exif-urgency-low": "Randah ($1)",
"exif-urgency-high": "Pancau ($1)",
"exif-urgency-other": "Ganti-suai utamaan ($1)",
- "watchlistall2": "samunyaan",
"namespacesall": "samunyaan",
"monthsall": "samunyaan",
"confirmemail": "Yakinakan alamat suril",
@@ -2501,7 +2485,6 @@
"watchlisttools-edit": "Tiringi wan babak daptar itihan",
"watchlisttools-raw": "Babak daptar itihan mantah",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|pandir]])",
- "unknown_extension_tag": "Tag ekstensi kada dipinandui \"$1\"",
"duplicate-defaultsort": "Paringatan: Sunduk pangurutan baku \"$2\" mangabaikan sunduk pangurutan baku \"$1\" sabalumnya.",
"version": "Virsi",
"version-extensions": "Ekstensi tapasang",
@@ -2517,7 +2500,7 @@
"version-parser-function-hooks": "Kait pungsi parser",
"version-hook-name": "Ngaran kait",
"version-hook-subscribedby": "Dilanggani ulih",
- "version-version": "(Pirsi $1)",
+ "version-version": "($1)",
"version-license": "Lisansi",
"version-poweredby-credits": "Wiki ngini disukung ulih '''[https://www.mediawiki.org/ MediaWiki]''', hak salin © 2001-$1 $2.",
"version-poweredby-others": "lainnya",
@@ -2621,19 +2604,20 @@
"logentry-newusers-create2": "$1 ma-ulah sabuting akun pamakai $3",
"logentry-newusers-autocreate": "Akun $1 utumatis diulah",
"rightsnone": "(kadada)",
+ "revdelete-summary": "Kasimpulan babakan",
+ "feedback-adding": "Manambahi kitihanbalik ka tungkaran...",
+ "feedback-bugcheck": "Harat! hanyar dipariksa bahwasa ngini lainan salah asa [$1 bug nang dipinandui].",
+ "feedback-bugnew": "Ulun mamariksa. Malapurakan sabuah bug hanyar",
"feedback-bugornote": "Pabila Pian siap manjalasakan sabuah masalah taknik rinci muhun [lapurakan sabuah bug $1].\nSalain ngitu, Pian kawa mamuruk prmulir nyaman di bawah ngini. Kumintar Pian akan ditambahi ka si tungkaran \"[$3 $2]\", baimbai awan ngaran-pamuruk Pian wan panjalajah nagn Pian puruk.",
- "feedback-subject": "Parihal:",
- "feedback-message": "Pasan:",
"feedback-cancel": "Walangi",
- "feedback-submit": "Kirimi Kitihanbalik",
- "feedback-adding": "Manambahi kitihanbalik ka tungkaran...",
+ "feedback-close": "Sudah",
"feedback-error1": "Kasalahan: kulihan matan API kada-dipinandui",
"feedback-error2": "Kasalahan: Babakan gagal",
"feedback-error3": "Kasalahan: Kadada tanggapan matan API",
+ "feedback-message": "Pasan:",
+ "feedback-subject": "Parihal:",
+ "feedback-submit": "Kirim",
"feedback-thanks": "Tarimakasih! jitihanbalik Pian sudah dipusakan ka si tungkaran \"[$2 $1]\".",
- "feedback-close": "Sudah",
- "feedback-bugcheck": "Harat! hanyar dipariksa bahwasa ngini lainan salah asa [$1 bug nang dipinandui].",
- "feedback-bugnew": "Ulun mamariksa. Malapurakan sabuah bug hanyar",
"searchsuggest-search": "Gagai",
"searchsuggest-containing": "isian ...",
"api-error-missingresult": "Kasalahan intarnal: kada kawa manantuakan napakah panyalinan tuntung.",
@@ -2651,5 +2635,20 @@
"api-error-unknown-warning": "Paringatan kada dipinandui: \"$1\".",
"api-error-unknownerror": "Kasalahan kada dipinandui: \"$1\".",
"api-error-uploaddisabled": "Paunggahan dinunaktipakan di wiki naya.",
- "api-error-verification-error": "Barakas naya kira-kira rusak atawa baisi ikstinsi nang salah."
+ "api-error-verification-error": "Barakas naya kira-kira rusak atawa baisi ikstinsi nang salah.",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simbul",
+ "special-characters-group-greek": "Yunani",
+ "special-characters-group-cyrillic": "Sirilik",
+ "special-characters-group-arabic": "Arab",
+ "special-characters-group-persian": "Parsia",
+ "special-characters-group-hebrew": "Ibrani",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/bm.json b/languages/i18n/bm.json
index 072e7ab3..1725aa7d 100644
--- a/languages/i18n/bm.json
+++ b/languages/i18n/bm.json
@@ -1,84 +1,183 @@
{
- "@metadata": {
- "authors": [
- "Guaka",
- "לערי ריינהארט"
- ]
- },
- "tog-hideminor": "Yɛlɛmaliw kura fitini dogo",
- "sunday": "karidon",
- "monday": "ntɛnɛdon",
- "tuesday": "taratadon",
- "wednesday": "arabadon",
- "thursday": "alamisadon",
- "friday": "jumadon",
- "saturday": "sibiridon",
- "august": "uti",
- "aug": "uti",
- "category_header": "Nyɛw cogoya kɔnɔ: \"$1\"",
- "article": "Nyɛ",
- "mypage": "N'ka nyɛ",
- "mytalk": "N'ka baronyɛ",
- "and": "&#32;ani",
- "qbfind": "Nyini",
- "qbedit": "Yɛlɛma",
- "help": "Dɛmɛ",
- "search": "Nyini",
- "searchbutton": "Nyini",
- "go": "Taa",
- "searcharticle": "Taa",
- "history": "Nyɛka tariku",
- "history_short": "Tariku",
- "edit": "yɛlɛma",
- "editthispage": "Nyɛ nin yɛlɛma",
- "newpage": "Nyɛ kura",
- "specialpage": "Nyɛ kɛrɛnkɛrɛnnen",
- "talk": "Sɔsɔli",
- "toolbox": "Minanw",
- "userpage": "Utilisateur ka nyɛ",
- "imagepage": "Janin ka nyɛ",
- "otherlanguages": "Kanw wɛrɛ",
- "jumptosearch": "Nyini",
- "currentevents": "Kunnafoni",
- "currentevents-url": "Project:Kunnafoni",
- "disclaimers": "Kangari",
- "edithelp": "Dɛmɛ",
- "mainpage": "Nyɛ fɔlɔ",
- "mainpage-description": "Nyɛ fɔlɔ",
- "portal": "Jamaje",
- "editsection": "yɛlɛma",
- "hidetoc": "dogo",
- "nstab-main": "Nyɛ",
- "nstab-image": "Janin",
- "nstab-help": "Dɛmɛ",
- "nstab-category": "Cogoya",
- "minoredit": "Yɛlɛma fitini.",
- "watchthis": "Nyɛ tulomajɔ",
- "newarticle": "(Kura)",
- "editing": "$1 ka yɛlɛmali",
- "editingsection": "$1 ka yɛlɛmali (section)",
- "editingcomment": "$1 ka yɛlɛmali (baro)",
- "preferences": "Fisayali",
- "prefs-skin": "Apparence",
- "hide": "dogo",
- "file-anchor-link": "Janin",
- "randompage": "Nyɛ min man ni ja",
- "popularpages": "Nyɛw les plus consultées",
- "newpages": "Nyɛw kura",
- "ancientpages": "Nyɛw les plus anciens",
- "move": "telun",
- "movethispage": "Nyɛ telun",
- "allpages": "Nyɛw bɛɛ",
- "categories": "Nyɛ ka cogoyaw",
- "linksearch-ok": "Nyini",
- "watch": "Tulomajɔ",
- "watchthispage": "Nyɛ tulomajɔ",
- "mycontris": "N'ka contributions",
- "lockconfirm": "Awɔ, je confirme que je souhaite verrouiller la base de données.",
- "move-page-legend": "Nyɛ telun",
- "movearticle": "Nyɛ telun",
- "movepagebtn": "Nyɛ telun",
- "others": "wɛrɛ",
- "ilsubmit": "Nyini",
- "specialpages": "Nyɛw kɛrɛnkɛrɛnnen"
+ "@metadata": {
+ "authors": [
+ "Guaka",
+ "לערי ריינהארט",
+ "Amadouyoro.thiam"
+ ]
+ },
+ "tog-hideminor": "Yɛlɛmaliw kura fitini dogo",
+ "tog-hidepatrolled": "Yɛlɛmaliw kura fitini dogo",
+ "underline-always": "Donko don",
+ "underline-never": "Abada",
+ "sunday": "karidon",
+ "monday": "ntɛnɛdon",
+ "tuesday": "taratadon",
+ "wednesday": "arabadon",
+ "thursday": "alamisadon",
+ "friday": "jumadon",
+ "saturday": "sibiridon",
+ "sun": "Kar",
+ "mon": "Ntɛ",
+ "tue": "Tar",
+ "wed": "Ara",
+ "thu": "Ala",
+ "fri": "Jum",
+ "sat": "sib",
+ "january": "Zanwuyekalo",
+ "february": "Fewuruyekalo",
+ "march": "Marisikalo",
+ "april": "Awirilikalo",
+ "may_long": "Mɛkalo",
+ "june": "Zuwɛnkalo",
+ "july": "Zuluyekalo",
+ "august": "uti",
+ "september": "Sɛtanburukalo",
+ "october": "Ɔkutɔburukalo",
+ "november": "Nowanburukalo",
+ "december": "Desanburukalo",
+ "january-gen": "Zanwuyekalo",
+ "february-gen": "Fewuruyekalo",
+ "march-gen": "Marisikalo",
+ "april-gen": "Awirilikalo",
+ "may-gen": "Mɛkalo",
+ "june-gen": "Zuwɛnkalo",
+ "july-gen": "Zuluyekalo",
+ "august-gen": "Uti",
+ "september-gen": "Sɛtanburukalo",
+ "october-gen": "Ɔkutɔburukalo",
+ "november-gen": "Nowanburukalo",
+ "december-gen": "Desanburukalo",
+ "jan": "Zan",
+ "feb": "Few",
+ "mar": "Mar",
+ "apr": "Awi",
+ "may": "Mɛ",
+ "jun": "Zuw",
+ "jul": "Zul",
+ "aug": "uti",
+ "sep": "Sɛt",
+ "oct": "Ɔku",
+ "nov": "Now",
+ "dec": "Des",
+ "january-date": "Zanwuyekalo $1",
+ "february-date": "Fewuruyekalo $1",
+ "march-date": "Marisikalo $1",
+ "april-date": "Awirilikalo $1",
+ "may-date": "Mɛkalo $1",
+ "june-date": "Zuwɛnkalo $1",
+ "july-date": "Zuluyekalo $1",
+ "august-date": "Utikalo $1",
+ "september-date": "Sɛtanburukalo $1",
+ "october-date": "Ɔkutɔburukalo $1",
+ "november-date": "Nowanburukalo $1",
+ "december-date": "Desanburukalo $1",
+ "category_header": "Nyɛw cogoya kɔnɔ: \"$1\"",
+ "article": "Nyɛ",
+ "cancel": "A bali",
+ "moredotdotdot": "Wɛrɛ",
+ "morenotlisted": "Ni nyɛ té sé ka sôrô",
+ "mypage": "Nyɛ",
+ "mytalk": "N'ka baronyɛ",
+ "navigation": "Nawigation",
+ "and": "&#32;ani",
+ "qbfind": "Nyini",
+ "qbbrowse": "A ɲini",
+ "qbedit": "Yɛlɛma",
+ "qbpageoptions": "Ni nyɛ",
+ "qbmyoptions": "Ne ka nyɛ",
+ "actions": "Kèw",
+ "errorpagetitle": "Fili",
+ "returnto": "Ka seguin $1 la",
+ "tagline": "Ka bô {{SITITƆGƆ}}",
+ "help": "Dɛmɛ",
+ "search": "Nyini",
+ "searchbutton": "Nyini",
+ "go": "Taa",
+ "searcharticle": "Taa",
+ "history": "Nyɛka tariku",
+ "history_short": "Tariku",
+ "updatedmarker": "A yailai mara kabri ne ka nali laban",
+ "print": "A kɛ papiye kan",
+ "view": "Ayé",
+ "view-foreign": "Yé $1",
+ "edit": "yɛlɛma",
+ "edit-local": "KounafƆni yailai ma",
+ "create": "Da",
+ "create-local": "Kounafɔni fara a kan",
+ "editthispage": "Nyɛ nin yɛlɛma",
+ "create-this-page": "Da ni nyɛ",
+ "delete": "A la tounou",
+ "deletethispage": "Ni nyɛ latounou",
+ "undeletethispage": "Ni nyɛ ka latounouni bô a man",
+ "protect": "Kôlôchi",
+ "protect_change": "Yailaima",
+ "protectthispage": "Ni nyɛ kôlôchi",
+ "unprotect": "Kôlôchili yailaima",
+ "unprotectthispage": "Ni nyɛ ka kôlôchili yailaima",
+ "newpage": "Nyɛ kura",
+ "talkpage": "Baro ni nyɛ kan",
+ "talkpagelinktext": "N'ka baronyɛ",
+ "specialpage": "Nyɛ kɛrɛnkɛrɛnnen",
+ "personaltools": "Ne ka minɛnw",
+ "articlepage": "Nyɛ kònòna finw yé",
+ "talk": "Sɔsɔli",
+ "views": "Yéw",
+ "toolbox": "Minanw",
+ "userpage": "Utilisateur ka nyɛ",
+ "imagepage": "Janin ka nyɛ",
+ "viewhelppage": "Dɛmɛn ka nyɛ",
+ "viewtalkpage": "Baro yé",
+ "otherlanguages": "Kanw wɛrɛ",
+ "jumptonavigation": "Nawigation",
+ "jumptosearch": "Nyini",
+ "pool-timeout": "Makônôni kouma tèmènan",
+ "pool-errorunknown": "Fili",
+ "aboutsite": "Ka bô {{SITITƆGƆ}}",
+ "currentevents": "Kunnafoni",
+ "currentevents-url": "Project:Kunnafoni",
+ "disclaimers": "Kangari",
+ "edithelp": "Dɛmɛ",
+ "mainpage": "Nyɛ fɔlɔ",
+ "mainpage-description": "Nyɛ fɔlɔ",
+ "portal": "Jamaje",
+ "ok": "O bɛ bɛn",
+ "editsection": "yɛlɛma",
+ "editold": "yɛlɛma",
+ "viewsourceold": "A bôyôrô yé",
+ "editlink": "yɛlɛma",
+ "viewsourcelink": "A bôyôrô yé",
+ "hidetoc": "dogo",
+ "nstab-main": "Nyɛ",
+ "nstab-image": "Janin",
+ "nstab-help": "Dɛmɛ",
+ "nstab-category": "Cogoya",
+ "minoredit": "Yɛlɛma fitini.",
+ "watchthis": "Nyɛ tulomajɔ",
+ "newarticle": "(Kura)",
+ "editing": "$1 ka yɛlɛmali",
+ "editingsection": "$1 ka yɛlɛmali (section)",
+ "editingcomment": "$1 ka yɛlɛmali (baro)",
+ "preferences": "Fisayali",
+ "prefs-skin": "Apparence",
+ "hide": "dogo",
+ "file-anchor-link": "Janin",
+ "randompage": "Nyɛ min man ni ja",
+ "newpages": "Nyɛw kura",
+ "ancientpages": "Nyɛw les plus anciens",
+ "move": "telun",
+ "movethispage": "Nyɛ telun",
+ "allpages": "Nyɛw bɛɛ",
+ "categories": "Nyɛ ka cogoyaw",
+ "linksearch-ok": "Nyini",
+ "watch": "Tulomajɔ",
+ "watchthispage": "Nyɛ tulomajɔ",
+ "mycontris": "N'ka contributions",
+ "lockconfirm": "Awɔ, je confirme que je souhaite verrouiller la base de données.",
+ "move-page-legend": "Nyɛ telun",
+ "movearticle": "Nyɛ telun",
+ "movepagebtn": "Nyɛ telun",
+ "others": "wɛrɛ",
+ "ilsubmit": "Nyini",
+ "specialpages": "Nyɛw kɛrɛnkɛrɛnnen"
}
diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json
index c9b91bd3..5e079d3d 100644
--- a/languages/i18n/bn.json
+++ b/languages/i18n/bn.json
@@ -21,7 +21,10 @@
"Usarker",
"Wikitanvir",
"Zaheen",
- "לערי ריינהארט"
+ "לערי ריינהארט",
+ "Aftabuzzaman",
+ "Wikisagnik",
+ "Aashaa"
]
},
"tog-underline": "সংযোগগুলির নিচে দাগ দেখানো হোক:",
@@ -42,14 +45,14 @@
"tog-minordefault": "শুরুতেই সব সম্পাদনাকে অনুল্লেখ্য বলে চিহ্নিত করা হোক",
"tog-previewontop": "সম্পাদনা বাক্সের আগে প্রাকদর্শন দেখানো হোক",
"tog-previewonfirst": "প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক",
- "tog-enotifwatchlistpages": "আমার নজর তালিকায় আছে এমন পাতা অথবা ফাইলে পরিবর্তন হলে তা জানিয়ে আমাকে ই-মেইল করো",
+ "tog-enotifwatchlistpages": "আমার নজর তালিকায় আছে এমন পাতা অথবা ফাইলে পরিবর্তন হলে আমাকে ই-মেইল করো",
"tog-enotifusertalkpages": "আমার ব্যবহারকারী আলোচনা পাতার পরিবর্তন হলে আমাকে ই-মেইল করা হোক",
"tog-enotifminoredits": "পাতা এবং ফাইলগুলোতে অনুল্লেখ্য সম্পাদনার জন্যও আমাকে ই-মেইল করা হোক",
"tog-enotifrevealaddr": "বিজ্ঞপ্তি মেইলে আমার ই-মেইল ঠিকানা প্রকাশ করা হোক",
"tog-shownumberswatching": "নজরদারী করছে, এমন ব্যবহারকারীর সংখ্যা দেখানো হোক",
"tog-oldsig": "বর্তমান স্বাক্ষর:",
"tog-fancysig": "স্বাক্ষরকে উইকিটেক্সট হিসেবে মনে করুন (কোন সয়ংক্রিয় লিঙ্ক ছাড়া)",
- "tog-uselivepreview": "তাৎক্ষণিক প্রাকদর্শনের ক্ষমতা চালু করা হোক (পরীক্ষামূলক)",
+ "tog-uselivepreview": "তাৎক্ষণিক প্রাকদর্শন ব্যবহার করো",
"tog-forceeditsummary": "খালি সম্পাদনা সারাংশ প্রবেশ করানোর সময় আমাকে জানানো হোক",
"tog-watchlisthideown": "আমার সম্পাদনাগুলি আমার নজরতালিকায় না দেখানো হোক",
"tog-watchlisthidebots": "বটের করা সম্পাদনাগুলি নজরতালিকায় না দেখানো হোক",
@@ -156,7 +159,7 @@
"cancel": "বাতিল",
"moredotdotdot": "আরও...",
"morenotlisted": "এটি একটি অসম্পূর্ণ তালিকা।",
- "mypage": "আমার পাতা",
+ "mypage": " পাতা",
"mytalk": "আলোচনা",
"anontalk": "এই বেনামী ব্যবহারকারীর আলাপের পাতা",
"navigation": "পরিভ্রমণ",
@@ -166,7 +169,7 @@
"qbedit": "সম্পাদনা",
"qbpageoptions": "এই পাতা",
"qbmyoptions": "আমার পাতাসমূহ",
- "faq": "সম্ভাব্য প্রশ্নসমূহ",
+ "faq": "প্রাজিপ্র",
"faqpage": "Project:প্রাজিপ্র",
"actions": "কার্যক্রম",
"namespaces": "নামস্থান",
@@ -187,12 +190,12 @@
"permalink": "স্থায়ী সংযোগ",
"print": "মুদ্রণ",
"view": "দেখাও",
- "view-foreign": "$1ে দেখুন",
+ "view-foreign": "$1-এ দেখুন",
"edit": "সম্পাদনা",
"edit-local": "স্থানীয় বিবরণ সম্পাদনা করুন",
"create": "তৈরি",
"create-local": "স্থানীয় বিবরণ যোগ করুন",
- "editthispage": "সম্পাদনা করুন",
+ "editthispage": "পাতাটি সম্পাদনা করুন",
"create-this-page": "পাতাটি তৈরি করো",
"delete": "অপসারণ",
"deletethispage": "এই পাতাটি মুছে ফেলুন",
@@ -201,7 +204,7 @@
"viewdeleted_short": "{{PLURAL:$1| টি অপসারিত সম্পাদনা|$1 টি অপসারিত সম্পাদনা}} দেখাও",
"protect": "সুরক্ষা",
"protect_change": "পরিবর্তন করুন",
- "protectthispage": "সংরক্ষণ করুন",
+ "protectthispage": "এই পাতাকে সুরক্ষিত করো",
"unprotect": "সুরক্ষা পরিবর্তন",
"unprotectthispage": "এই পাতার সুরক্ষা পরিবর্তন করুন",
"newpage": "নতুন পাতা",
@@ -209,7 +212,7 @@
"talkpagelinktext": "আলোচনা",
"specialpage": "বিশেষ পাতা",
"personaltools": "নিজস্ব সরঞ্জামসমূহ",
- "articlepage": "নিবন্ধ দেখুন",
+ "articlepage": "বিষয়বস্তু পাতাটি দেখুন",
"talk": "আলোচনা",
"views": "দৃষ্টিকোণ",
"toolbox": "সরঞ্জাম",
@@ -222,8 +225,9 @@
"categorypage": "বিষয়শ্রেণীর পাতাটি দেখুন",
"viewtalkpage": "আলোচনা দেখুন",
"otherlanguages": "অন্যান্য ভাষাসমূহ",
- "redirectedfrom": "($1 থেকে ঘুরে এসেছে)",
+ "redirectedfrom": "($1 থেকে পুনর্নির্দেশিত)",
"redirectpagesub": "পুনর্নির্দেশ পাতা",
+ "redirectto": "পুননির্দেশিত হয়েছে:",
"lastmodifiedat": "এ পাতায় শেষ পরিবর্তন হয়েছিল $2টার সময়, $1 তারিখে।",
"viewcount": "এ পাতাটি {{PLURAL:$1|বার|$1 বার}} দেখা হয়েছে।",
"protectedpage": "সুরক্ষিত পাতা",
@@ -236,6 +240,7 @@
"pool-queuefull": "পুলের লাইন পূর্ণ",
"pool-errorunknown": "অজানা ত্রুটি",
"pool-servererror": "পুল কাউন্টার সার্ভিস নিষ্ক্রিয় ($1)।",
+ "poolcounter-usage-error": "ব্যবহারের ত্রুটি: $1",
"aboutsite": "{{SITENAME}} বৃত্তান্ত",
"aboutpage": "Project:বৃত্তান্ত",
"copyright": "বিষয়বস্তু $1-এর আওতায় প্রকাশিত যদি না অন্য কিছু নির্ধারিত থাকে।",
@@ -245,6 +250,7 @@
"disclaimers": "দাবিত্যাগ",
"disclaimerpage": "Project:সাধারণ দাবিত্যাগ",
"edithelp": "সম্পাদনা সহায়িকা",
+ "helppage-top-gethelp": "সাহায্য",
"mainpage": "প্রধান পাতা",
"mainpage-description": "প্রধান পাতা",
"policy-url": "Project:নীতিমালা",
@@ -270,7 +276,7 @@
"viewsourceold": "উৎস দেখাও",
"editlink": "সম্পাদনা",
"viewsourcelink": "উৎস দেখুন",
- "editsectionhint": "পরিচ্ছেদ সম্পাদনা: $1",
+ "editsectionhint": "অনুচ্ছেদ সম্পাদনা: $1",
"toc": "পরিচ্ছেদসমূহ",
"showtoc": "দেখাও",
"hidetoc": "আড়ালে রাখো",
@@ -324,6 +330,7 @@
"readonly_lag": "ডাটাবেজ স্বয়ংক্রিয়ভাবে বন্ধ করে দেয়া হয়েছে, যাতে অধীন ডাটাবেজ সার্ভারগুলি প্রধান ডাটাবেজ সার্ভারের অবস্থায় আসতে পারে।",
"internalerror": "আভ্যন্তরীণ ত্রুটি",
"internalerror_info": "আভ্যন্তরীণ ত্রুটি: $1",
+ "internalerror-fatal-exception": "\"$1\" ধরনের মারাত্মক ব্যতিক্রম",
"filecopyerror": "\"$1\" থেকে \"$2\" ফাইল কপি করা যায়নি",
"filerenameerror": "\"$1\" ফাইলটির নাম বদলে \"$2\" করা সম্ভব হচ্ছে না।",
"filedeleteerror": "\"$1\" ফাইলটি মুছে ফেলা সম্ভব হচ্ছে না।",
@@ -349,7 +356,8 @@
"viewsourcetext": "এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন:",
"viewyourtext": "আপনি ' ' ' আপনার সম্পাদনা ' ' ' এই পাতায় দেখতে এবং কপি করতে পারেন:",
"protectedinterface": "এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
- "editinginterface": "'''সতর্কীকরণ:''' আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
+ "editinginterface": "<strong>সতর্কীকরণ:</strong> আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।",
+ "translateinterface": "সকল উইকির জন্য অনুবাদ যোগ বা পরিবর্তন করতে, দয়া করে [//translatewiki.net/ translatewiki.net], মিডিয়াউইকি স্থানীয়করণ প্রকল্প ব্যবহার করুন।",
"cascadeprotected": "এই পাতাটি সম্পাদনা থেকে সুরক্ষিত, কারণ পাতাটি নিচের {{PLURAL:$1|টি পাতার|টি পাতার}} অন্তর্গত, যে পাতা(গুলি) \"প্রপাতাকার\" (cascading) বৈশিষ্ট্য সহযোগে সুরক্ষিত করা হয়েছে:\n$2",
"namespaceprotected": "'''$1''' নামস্থানে কোন পাতা আপনার সম্পাদনা করার অনুমতি নেই।",
"customcssprotected": "আপনার এই সিএসএস পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।",
@@ -406,6 +414,8 @@
"userlogin-resetlink": "আপনার লগইনের বিস্তারিত তথ্যাদি ভুলে গেছেন?",
"userlogin-resetpassword-link": "পাসওয়ার্ড ভুলে গেছেন?",
"userlogin-helplink2": "লগইন সংক্রান্ত সাহায্য",
+ "userlogin-loggedin": "আপনি বর্তমানে {{GENDER:$1|$1}} হিসাবে লগইন আছেন।\nঅন্য ব্যবহারকারী নামে লগইন করতে চাইলে নিচের ফর্মটি ব্যবহার করুন।",
+ "userlogin-createanother": "আরেকটি অ্যাকাউন্ট তৈরি করুন",
"createacct-emailrequired": "ইমেইল ঠিকানা",
"createacct-emailoptional": "ইমেইল ঠিকানা (ঐচ্ছিক)",
"createacct-email-ph": "আপনার ইমেইল ঠিকানা যোগ করুন",
@@ -440,7 +450,7 @@
"login-userblocked": "এই ব্যবহারকারীকে বাধা দেওয়া হয়েছে। লগ-ইন সম্ভব নয়।",
"wrongpassword": "আপনি ভুল পাসওয়ার্ড ব্যবহার করেছেন। অনুগ্রহ করে আবার চেষ্টা করুন।",
"wrongpasswordempty": "পাসওয়ার্ড প্রবেশের ঘরটি খালি ছিল। দয়া করে আবার চেষ্টা করুন।",
- "passwordtooshort": "পাসওয়ার্ড অবশ্যই {{PLURAL:$1|১ অক্ষরের|$1 অক্ষরের}} হতে হবে।",
+ "passwordtooshort": "পাসওয়ার্ড কমপক্ষে {{PLURAL:$1|১ অক্ষরের|$1 অক্ষরের}} হতে হবে।",
"password-name-match": "আপনার পাসওয়ার্ড আপনার ব্যবহারকারী নাম থেকে আলাদা হতে হবে।",
"password-login-forbidden": "এই ব্যবহারকারীর নাম এবং পাসওয়ার্ডটি ব্যবহার নিষিদ্ধ করা হয়েছে।",
"mailmypassword": "পাসওয়ার্ড রিসেট",
@@ -467,6 +477,7 @@
"createaccount-text": "কেউ $2-এর জন্য {{SITENAME}}-এ একটি অ্যাকাউন্ট সৃষ্টি করেছেন ($4)। \"$2\"-এর জন্য পাসওয়ার্ড হল \"$3\"। আপনার এখন অ্যাকাউন্টে প্রবেশ করে পাসওয়ার্ড পরিবর্তন করা উচিত।\n\nযদি ভুল করে অ্যাকাউন্টটি সৃষ্টি হয়ে থাকে, তাহলে এই বার্তাটি উপেক্ষা করুন।",
"login-throttled": "আপনি সাম্প্রতিক সময়ে পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন।\nপুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।",
"login-abort-generic": "আপনার লগইন সফল ছিলো না - বাতিল করা হয়েছে",
+ "login-migrated-generic": "আপনার অ্যাকাউন্ট স্থানান্তরিত করা হয়েছে, এবং আপনার ব্যবহারকারী নাম আর এই উইকিতে বিদ্যমান নয়।",
"loginlanguagelabel": "ভাষা: $1",
"suspicious-userlogout": "আপনার প্রস্থানের অনুরোধ বাতিল হয়েছে কারণ অনুমিত যে আপনার ব্রাউজার অসম্পূর্ণ অথবা পূবর্বতী তথ্য প্রেরণ করেছে।",
"createacct-another-realname-tip": "আসল নাম ঐচ্ছিক।\nআপনি যদি তা দিতে চান, তাহলে তা ব্যবহারকারীকে তাদের কাজের জন্য স্বীকৃতিদানে ব্যবহার করা হবে।",
@@ -568,6 +579,7 @@
"missingcommentheader": "'''খেয়াল করুন:''' আপনি এই মন্তব্যের জন্য কোন বিষয়/শিরোনাম দেননি। সংরক্ষণ বোতামে ক্লিক করলে, আপনার এই সম্পাদনা কোন বিষয়/শিরোনাম ছাড়াই সংরক্ষিত হবে।",
"summary-preview": "সারাংশ প্রাকদর্শন:",
"subject-preview": "বিষয়/শিরোনাম প্রাকদর্শন:",
+ "previewerrortext": "আপনার পরিবর্তনগুলি প্রাকদর্শন করার চেষ্টা করার সময় একটি ত্রুটি ঘটেছে।",
"blockedtitle": "ব্যবহারকারীকে বাধা দেয়া হয়েছে",
"blockedtext": "আপনার ব্যবহারকারী নাম বা আইপি ঠিকানার ঊপর নিষেধাজ্ঞা আরোপিত হয়েছে।\n\n$1 নিষেধাজ্ঞা আরোপ করেছেন। নিষেধের কারণ হিসেবে বলা হয়েছে:''$2''।\n\n* নিষেধাজ্ঞা শুরুর সময়:$8\n* নিষেধাজ্ঞা উঠিয়ে নেয়ার সময়: $6\n* যার উপর নিষেধাজ্ঞা আরোপ করা হয়েছে: $7\n\nআপনি $1 অথবা [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকদের]] কারও সাথে এই নিষেধাজ্ঞা সংক্রান্ত বিষয়ে আলোচনা করতে পারেন।\n\nআপনি '(ব্যবহারকারীকে) ইমেইল করুন' ফিচারটি ব্যবহার করতে পারবেন না। তবে [[Special:Preferences|আপনার পছন্দ তালিকাতে]] যদি একটি বৈধ ই-মেইল ঠিকানা নির্দিষ্ট করা হয়ে থাকে এবং ফিচারটি ব্যবহারে যদি আপনাকে বাধা না দেওয়া হয়ে থাকে, তবে আপনি ফিচারটি ব্যবহার করতে পারবেন।\n\nআপনার বর্তমান আইপি ঠিকানা $3, এবং আপনার নিষেধাজ্ঞা নং হল #$5।\n\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
"autoblockedtext": "আপনার আইপি ঠিকানাকে স্বয়ংক্রিয়ভাবে বাধা দেয়া হয়েছে কারণ একই আইপি ঠিকানার আরেকজন ব্যবহারকারী ব্যবহার করছেন যাকে $1 দ্বারা বাধা দেওয়া হয়েছে।\nবাধাদানের যে কারণ দেয়া হয়েছে:\n\n:''$2''\n\n* বাধা শুরুর সময়: $8\n* বাধা শেষের সময়: $6\n* যাকে বাধা দেওয়ার চেষ্টা করা হয়েছে: $7\n\nআপনি $1-এর সাথে কিংবা অন্য যেকোন [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকের]] সাথে যোগাযোগ করে বাধার ব্যাপারটি আলোচনা করতে পারেন।\n\nলক্ষ্য করুন, যদি আপনি \"এই ব্যবহারকারীকে ই-মেইল করুন\" ফিচারটি ব্যবহার করতে চান, তবে আপনার [[Special:Preferences|পছন্দ]] অপশনে একটি বৈধ ইমেইল ঠিকানা দিতে হবে এবং আপনার সেটি ব্যবহারে কোন বাধা থাকতে পারবে না।\n\nআপনার বর্তমান IP ঠিকানা হচ্ছে $3, এবং যা বাধা দানের আইডি হল $5।\nযেকোন প্রশ্ন করার সময় উপরের সকল তথ্য উল্লেখ করুন।",
@@ -577,7 +589,7 @@
"nosuchsectiontitle": "অনুচ্ছেদ পাওয়া যায়নি",
"nosuchsectiontext": "আপনি এমন একটি অনুচ্ছেদ সম্পাদনার চেষ্টা করেছেন, যার কোন অস্তিত্ব নেই।\nযখন এই পাতাটি দেখার চেষ্টা করছে, তখন হয়তো এটি সরিয়ে অথবা অপসারণ করা হয়েছে।",
"loginreqtitle": "লগ-ইন প্রয়োজন",
- "loginreqlink": "লগ-ইন",
+ "loginreqlink": "প্রবেশ",
"loginreqpagetext": "অন্যান্য পাতা দেখতে হলে আপনাকে অবশ্যই $1 হতে হবে।",
"accmailtitle": "পাসওয়ার্ড পাঠানো হয়েছে",
"accmailtext": "[[User talk:$1|$1]] এর জন্য দৈব ভাবে উৎপন্ন শব্দ চাবি $2 এ পাঠানো হয়েছে।\nলগ-ইন করার পর ''[[Special:ChangePassword|পাসওয়ার্ড পরিবর্তন]]'' পাতা থেকে এটি পরিবর্তন করা যাব।",
@@ -662,6 +674,10 @@
"content-model-text": "সাধারণ লেখা",
"content-model-javascript": "জাভাস্ক্রিপ্ট",
"content-model-css": "সিএসএস",
+ "content-json-empty-object": "খালি অবজেক্ট",
+ "content-json-empty-array": "খালি অ্যারে",
+ "duplicate-args-category": "টেমপ্লেট আহ্বানে সদৃশ আর্গুমেন্ট ব্যবহার করা পাতা",
+ "duplicate-args-category-desc": "এই পাতায় টেমপ্লেট আহ্বান উপস্থিত রয়েছে যা সদৃশ আর্গুমেন্ট ব্যবহার করেছে, যেমন <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> বা <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>।",
"expensive-parserfunction-warning": "'''সতর্ক হোন:''' এই পাতাটি অনেক বেশি পরিমাণে এক্সপেনসিভ পার্সার ফাংশন কল রয়েছে।\n\nএটি $2-এর চেয়ে কম পরিমাণ {{PLURAL:$2|কল|কল}} থাকা উচিত, যেখানে মোট কলের সংখ্যা {{PLURAL:$1|বর্তমানে $1|বর্তমানে $1}}।",
"expensive-parserfunction-category": "অনেক বেশি পরিমাণে এক্সপেনসিভ পার্সার ফাংশন কল থাকা পাতাসমূহ",
"post-expand-template-inclusion-warning": "'''সতর্ক হোন:''' টেমপ্লেটের ইনক্লুড আকার অনেক বেশি।\nকিছু টেমপ্লেট সংযুক্ত করা নাও যেতে পারে।",
@@ -716,7 +732,7 @@
"history-feed-empty": "অনুরোধকৃত পাতাটির কোন অস্তিত্ব নেই।\nহয়ত পাতাটি উইকি থেকে মুছে ফেলা হয়েছে, কিংবা নতুন নামকরণ করা হয়েছে।\nপ্রাসঙ্গিক নতুন পাতাগুলির জন্য [[Special:Search|উইকি অনুসন্ধানের]] চেষ্টা করুন।",
"rev-deleted-comment": "(সম্পাদনা সারাংশ অপসারিত)",
"rev-deleted-user": "(ব্যবহারকারীর নাম সরিয়ে নেওয়া হয়েছে)",
- "rev-deleted-event": "(লগ অ্যাকশন সরানো হয়েছে)",
+ "rev-deleted-event": "(লগ তথ্য সরানো হয়েছে)",
"rev-deleted-user-contribs": "ব্যবহারকারীর নাম অথবা আইপি ঠিকানা অপসারিত হয়েছে - অবদান থেকে সম্পাদনা আড়াল করা হয়েছে",
"rev-deleted-text-permission": "পাতার এই সংস্করণটি '''অপসারিত''' হয়েছে।\nবিস্তারিত কারণ এর [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] পাওয়া যেতে পারে।",
"rev-suppressed-text-permission": "পাতার সংশোধনটি <strong>গোপন</strong> করা হয়েছে।\nবিস্তারিত বিবরণ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} গোপনকার্যের লগে] থাকতে পারে।",
@@ -730,7 +746,7 @@
"rev-suppressed-unhide-diff": "তুলনা করা হয়েছে এমন সংস্করণগুলোর কোনো একটি '''অপসারিত''' হয়েছে।\nবিস্তারিত কারণ এর [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] পাওয়া যেতে পারে।\nআপনি ইচ্ছা পোষণ করলে [$1 এই সংস্করণটি দেখতে পারেন]।",
"rev-deleted-diff-view": "তুলনা করা হয়েছে এমন সংস্করণগুলোর কোনো একটি '''অপসারণ''' করা হয়েছে।\nআপনি এটি দেখতে পারেন; এ সংক্রাস্ত বিস্তারিত বিবরণ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} অবলুপ্তি লগে] থাকতে পারে।",
"rev-suppressed-diff-view": "তুলনা করা হয়েছে এমন সংস্করণগুলোর কোনো একটি '''অপসারণ''' করা হয়েছে।\nআপনি এটি দেখতে পারেন; এ সংক্রাস্ত বিস্তারিত বিবরণ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} অবলুপ্তি লগে] থাকতে পারে।",
- "rev-delundel": "দেখাও/আড়াল করো",
+ "rev-delundel": "দৃশ্যমানতা পরিবর্তন করো",
"rev-showdeleted": "দেখাও",
"revisiondelete": "অবলুপ্ত/পুনঃস্থাপন সংশোধনসমূহ",
"revdelete-nooldid-title": "বেঠিক লক্ষ্য সংশোধন",
@@ -749,7 +765,7 @@
"revdelete-legend": "দৃষ্টিপাত সীমাবদ্ধ করো",
"revdelete-hide-text": "সংস্করণের লেখা",
"revdelete-hide-image": "ফাইলের বিষয়বস্তু আড়াল করো",
- "revdelete-hide-name": "কাজ এবং লক্ষ্য আড়াল করো",
+ "revdelete-hide-name": "লক্ষ্য ও প্যারামিটার আড়াল করো",
"revdelete-hide-comment": "সম্পাদনা সারাংশ",
"revdelete-hide-user": "সম্পাদকে ব্যবহারকারীর নাম/আইপি",
"revdelete-hide-restricted": "প্রশাসকবৃন্দ এবং অন্যদের ক্ষেত্রে এই ডাটা রোধ করো",
@@ -761,7 +777,7 @@
"revdelete-log": "কারণ:",
"revdelete-submit": "নির্বাচিত {{PLURAL:$1|সংশোধনে|সংশোধসমূহে}} প্রয়োগ করো",
"revdelete-success": "'''সংশোধন দৃশ্যমানতা সফলভাবে হালনাগাদ করা হয়েছে।'''",
- "revdelete-failure": "'''রিভিশন ভিজিবিলিটি আপডেট সম্ভব নয়:'''\n$1",
+ "revdelete-failure": "<strong>সংশোধনের দৃশ্যমানতা হালনাগাদ করা যায়নি:</strong>\n$1",
"logdelete-success": "'''ঘটনা দৃশ্যমানতা সফলভাবে স্থাপন করা হয়েছে।'''",
"logdelete-failure": "'''লগ-এর দৃশ্যমানতা নির্ধারণ সম্ভব হচ্ছে না:'''\n$1",
"revdel-restore": "দৃশ্যমানতা পরিবর্তন করো",
@@ -802,7 +818,6 @@
"mergehistory-same-destination": "উৎস এবং গন্তব্য পাতা একই হতে পারবে না",
"mergehistory-reason": "কারণ:",
"mergelog": "একত্রীকরণ লগ",
- "pagemerge-logentry": "[[$1]]-কে [[$2]]-এ একত্র করা হয়েছে ($3 পর্যন্ত সংশোধনগুলিসহ)",
"revertmerge": "একত্রীকরণ বাতিল",
"mergelogpagetext": "নিচে সবচেয়ে সাম্প্রতিক ঘটা এক পাতার ইতিহাসের সাথে অন্য পাতার ইতিহাসের একত্রীকরণের একটি তালিকা দেওয়া হল।",
"history-title": "\"$1\" এর সংশোধনের ইতিহাস",
@@ -814,6 +829,8 @@
"showhideselectedversions": "নির্বাচিত সংশোধনগুলো দেখাও/লুকাও",
"editundo": "পূর্বাবস্থায় আনো",
"diff-empty": "(কোন পার্থক্য নেই)",
+ "diff-multi-sameuser": "(একই ব্যবহারকারী দ্বারা সম্পাদিত {{PLURAL:$1|একটি মধ্যবর্তী সংশোধন|$1টি মধ্যবর্তী সংশোধন}} দেখানো হচ্ছে না)",
+ "diff-multi-otherusers": "({{PLURAL:$2|একজন|$2 জন}} ব্যবহারকারী দ্বারা সম্পাদিত {{PLURAL:$1|একটি|$1টি}} মধ্যবর্তী সংশোধন দেখানো হচ্ছে না)",
"diff-multi-manyusers": "($2 জন {{PLURAL:$2|ব্যবহারাকারীর}} সম্পাদিত {{PLURAL:$1|একটি সাম্প্রতিক সংস্করণ|$1 টি সাম্প্রতিক সংস্করণ}} প্রদর্শিত হচ্ছে না)",
"difference-missing-revision": "$1 পার্থক্যের {{PLURAL:$2|একটি সংস্করণ|$2টি সংস্করণসমূহ}} খুজে পাওয়া যাচ্ছে না।\n\nসাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাস পাতার লিংক ওপেন করার কারণে এটি হতে পারে। \n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] বিস্তারিত তথ্য জানা যাবে।",
"searchresults": "অনুসন্ধানের ফলাফল",
@@ -824,8 +841,8 @@
"prevn": "পূর্ববর্তী {{PLURAL:$1|$1}}টি",
"nextn": "পরবর্তী {{PLURAL:$1|$1}}টি",
"prevn-title": "পূর্ববর্তী $1 {{PLURAL:$1|ফলাফল|ফলাফলসমূহ}}",
- "nextn-title": "পরবর্তী $1 {{PLURAL:$1|ফলাফল|ফলাফলসমূহ}}",
- "shown-title": "প্রতি পাতায় $1 {{PLURAL:$1|ফলাফল|ফলাফলসমূহ}} দেখাও",
+ "nextn-title": "পরবর্তী $1টি {{PLURAL:$1|ফলাফল}}",
+ "shown-title": "প্রতি পাতায় $1টি {{PLURAL:$1|ফলাফল}} দেখাও",
"viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) দেখানো হোক।",
"searchmenu-exists": "'''এই উইকিতে \"[[:$1]]\" নামে একটি পাতা রয়েছে'''",
"searchmenu-new": "<strong>\"[[:$1]]\" পাতাটি এই উইকিতে তৈরি করুন!</strong> {{PLURAL:$2|0=|এছাড়া আপনার অনুসন্ধানের সাথে পাওয়া পাতা দেখুন।|এছাড়া অনুসন্ধানে পাওয়া ফলাফলগুলি দেখুন।}}",
@@ -841,6 +858,7 @@
"search-result-category-size": "{{PLURAL:$1 |১টি সদস্য |$1টি সদস্য}} ({{PLURAL:$2 |১টি উপবিষয়শ্রেণী|$2টি উপবিষয়শ্রেণী}}, {{PLURAL:$3 |১টি ফাইল |$3টি ফাইল}})",
"search-redirect": "(পুনর্নিদেশনা $1)",
"search-section": "(অনুচ্ছেদ $1)",
+ "search-category": "(বিষয়শ্রেণী $1)",
"search-file-match": "(নথির বিষয়বস্তু মিলে যায়)",
"search-suggest": "আপনি সম্ভবত বুঝাতে চাইছেন: $1",
"search-interwiki-caption": "সহপ্রকল্পসমূহ",
@@ -874,6 +892,11 @@
"prefs-personal": "ব্যবহারকারীর বৃত্তান্ত",
"prefs-rc": "সাম্প্রতিক পরিবর্তনসমূহ",
"prefs-watchlist": "নজরতালিকা",
+ "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-watchlist-edits": "সম্প্রসারিত নজর তালিকায় সর্বোচ্চ সংখ্যার পরিবর্তন দেখানোর জন্য:",
@@ -886,7 +909,7 @@
"prefs-email": "ই-মেইল অপশন",
"prefs-rendering": "অবয়ব",
"saveprefs": "সংরক্ষণ",
- "restoreprefs": "সকল পূর্বনির্ধারিত সেটিং ফিরিয়ে আনো (সকল সেকশনে)",
+ "restoreprefs": "সকল পূর্বনির্ধারিত সেটিং ফিরিয়ে আনো (সকল অনুচ্ছেদে)",
"prefs-editing": "সম্পাদনা",
"rows": "সারি:",
"columns": "কলাম:",
@@ -943,7 +966,7 @@
"gender-female": "তিনি (মহিলা) উইকি পাতা সম্পাদনা করেন",
"prefs-help-gender": "সেটিংসের এই পরিবর্তন ঐচ্ছিক।\nসফটওয়্যারে মাধ্যমে লিঙ্গ অনুযায়ী সম্বধনের ক্ষেত্রে এটি ব্যবহৃত হয়।\nএই তথ্য সকলের জন্য উন্মুক্ত থাকেবে।",
"email": "ই-মেইল",
- "prefs-help-realname": "আসল নাম দেওয়া অনাবশ্যক। যদি আসল নাম দেন, তবে আপনার কাজের স্বীকৃতি দানে তা ব্যবহার করা হবে।",
+ "prefs-help-realname": "আসল নাম দেওয়া অনাবশ্যক।\nযদি আসল নাম দেন, তবে আপনার কাজের স্বীকৃতি দানে তা ব্যবহার করা হবে।",
"prefs-help-email": "ইমেইল ঠিকানা ঐচ্ছিক, তবে পাসওয়ার্ড ভুলে গেলে নতুন করে পাসওয়ার্ড নিতে এটির প্রয়োজন হবে।",
"prefs-help-email-others": "আপনি আপনার পরিচয় প্রকাশ না করেও আপনার ব্যবহারকারী অথবা আলাপ পাতাটির মাধ্যমে অন্যদেরকে আপনার সাথে যোগাযোগ করতে দিতে পারেন।",
"prefs-help-email-required": "ই-মেইল ঠিকানা আবশ্যক।",
@@ -1076,6 +1099,7 @@
"right-override-export-depth": "৫ম স্তর পর্যন্ত সংযুক্তিসহ একটি পাতা রপ্তানী করুন",
"right-sendemail": "অন্য ব্যবহারকারীকে ইমেইল পাঠান",
"right-passwordreset": "পাসওয়ার্ড রিসেট ইমেইল দেখুন",
+ "right-managechangetags": "ডাটাবেস থেকে [[Special:Tags|ট্যাগ]] তৈরি ও অপসারণ করুন",
"newuserlogpage": "ব্যবহারকারী সৃষ্টির লগ",
"newuserlogpagetext": "এটি নতুন ব্যবহারকারী সৃষ্টির লগ",
"rightslog": "ব্যবহারকারীর অধিকার লগ",
@@ -1094,7 +1118,7 @@
"action-movefile": "এই ফাইলটি সরিয়ে ফেলুন",
"action-upload": "এই ফাইল আপলোড করো",
"action-reupload": "বিদ্যমান ফাইল প্রতিস্থাপন করো",
- "action-reupload-shared": "শেয়ার্ড রিপোজিটরীতে এই ফাইলটি আপডেট করুন",
+ "action-reupload-shared": "শেয়ার্ড রিপোজিটরীতে এই ফাইলটি হালনাগাদ করুন",
"action-upload_by_url": "কোন ইউআরএল থেকে ফাইলটি আপলোড করো",
"action-writeapi": "রাইট এপিআই ব্যবহার করুন",
"action-delete": "পাতাটি মুছে ফেলো",
@@ -1121,8 +1145,9 @@
"action-viewmywatchlist": "আপনার নজরতালিকা দেখুন",
"action-viewmyprivateinfo": "আপনার ব্যক্তিগত তথ্য দেখুন",
"action-editmyprivateinfo": "আপনার ব্যক্তিগত তথ্য সম্পাদনা করুন",
- "nchanges": "$1 {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}",
- "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|সর্বশেষ প্রদর্শনের পর}}",
+ "action-managechangetags": "ডাটাবেস থেকে ট্যাগ তৈরি ও অপসারণ করুন",
+ "nchanges": "$1টি {{PLURAL:$1|পরিবর্তন}}",
+ "enhancedrc-since-last-visit": "{{PLURAL:$1|সর্বশেষ প্রদর্শনের পর}} $1টি",
"enhancedrc-history": "ইতিহাস",
"recentchanges": "সাম্প্রতিক পরিবর্তনসমূহ",
"recentchanges-legend": "সাম্প্রতিক পরিবর্তনের পছন্দসমূহ",
@@ -1191,9 +1216,9 @@
"uploaderror": "আপলোড এ সমস্যা হয়েছে",
"upload-recreate-warning": "'''সতর্কতা: এই নামের ফাইলটি অপসারণ অথবা স্থানান্তর করা হয়েছে।'''\n\nকাজের সুবিধার জন্য অপসারণ এবং স্থানান্তর লগ এখানে দেখানো হল:",
"uploadtext": "ফাইল আপলোড করতে নিচের ফরমটি ব্যবহার করুন।</br>\nপূর্বে আপলোড করা ফাইল দেখতে বা অনুসন্ধানে [[Special:FileList|পূর্বে আপলোড করা ফাইলের তালিকা]] দেখুন। (পুনঃ)আপলোড করা ফাইল এর নাম [[Special:Log/upload|আপলোড লগে]] যোগ হয়, অপসারিত ফাইলের নাম [[Special:Log/delete|অপসারণ লগে]] রয়েছে।\n\nকোনো নিবন্ধে ছবি যোগ করতে হলে নিচের উদাহরণ অনুযায়ী সংযোগ দিন:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''',\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' অথবা\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''",
- "upload-permitted": "যেসব ফাইলের ধরন অনুমোদিত: $1।",
- "upload-preferred": "যেসব ফাইলের ধরন পছন্দনীয়: $1।",
- "upload-prohibited": "যেসব ফাইলের ধরন নিষিদ্ধ: $1।",
+ "upload-permitted": "অনুমোদিত ফাইলের {{PLURAL:$2|ধরন}}: $1।",
+ "upload-preferred": "পছন্দনীয় ফাইলের {{PLURAL:$2|ধরন}}: $1।",
+ "upload-prohibited": "নিষিদ্ধ ফাইলের {{PLURAL:$2|ধরন}}: $1।",
"uploadlogpage": "আপলোড লগ",
"uploadlogpagetext": "নিচে সম্প্রতিক আপলোডকৃত ফাইলের তালিকা রয়েছে।\nসংক্ষেপচিত্র সহ দেখতে [[Special:NewFiles|নতুন ফাইলের গ্যালারি]] দেখুন।",
"filename": "ফাইলের নাম",
@@ -1247,6 +1272,7 @@
"php-uploaddisabledtext": "পিএইপি -এ ফাইল আপলোড নিস্ক্রিয় রয়েছে।\nঅনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।",
"uploadscripted": "এই ফাইলে এমন HTML বা স্ক্রিপ্ট কোড আছে যা একটি ওয়েব ব্রাউজার ভুল বুঝতে পারে।",
"uploadscriptednamespace": "এই SVG ফাইলে অবৈধ নামস্থান \"$1\" রয়েছে",
+ "uploadinvalidxml": "আপলোডকৃত ফাইলে XML পার্স করা যাবে না।",
"uploadvirus": "এই ফাইলটিতে ভাইরাস আছে! ব্যাখ্যা: $1",
"uploadjava": "এটি একটি ZIP ফরম্যাটের ফাইল, যেখানে একটি জাভা .class ফরম্যাটের ফাইল রয়েছে।\nজাভা ফাইল আপলোডের কোনো অনুমতি নেই, কারণ এই ধরনের ফাইল সিস্টেমে নিরাপত্তা ত্রুটি তৈরী করতে পারে।",
"upload-source": "উৎস ফাইল",
@@ -1300,7 +1326,7 @@
"backend-fail-batchsize": "স্টোরেজ ব্যকএন্ডে $1টি {{PLURAL:$1|অপারেশনের|অপারেশনগুলোর}} কমান্ড দেয়া হয়েছে; সর্বোচ্চ সীমা হল $2টি {{PLURAL:$1|অপারেশ}}।",
"backend-fail-usable": "\"$1\" ফাইলটিতে লেখা অথবা ফাইলটি পড়া যাচ্ছে না, কারণ সঠিক অনুমতি নেই অথবা ডিরেক্টরীটি নেই।",
"filejournal-fail-dbconnect": "\"$1\" স্টোরেজ ব্যাকেন্ডের জার্নাল ডাটাবেজের সাথে যুক্ত হওয়া যাচ্ছে না।",
- "filejournal-fail-dbquery": "\"$1\" স্টোরেজ ব্যাকেন্ডের জার্নাল ডাটাবেজ আপডেট করা যাচ্ছে না।",
+ "filejournal-fail-dbquery": "\"$1\" স্টোরেজ ব্যাকেন্ডের জার্নাল ডাটাবেজ হালনাগাদ করা যাচ্ছে না।",
"lockmanager-notlocked": "\"$1\" আনলক করা যাচ্ছে না; এটি লক করা রয়েছে।",
"lockmanager-fail-closelock": "\"$1\" ফাইলটি লক করা তাই বন্ধ করা যাচ্ছে না।",
"lockmanager-fail-deletelock": "\"$1\" লক করা ফাইলটি অপসারণ সম্ভব নয়।",
@@ -1434,7 +1460,7 @@
"listduplicatedfiles": "সদৃশ ফাইলের তালিকা",
"listduplicatedfiles-summary": "এটি ফাইলসমূহের একটি তালিকা যেখানে একটি ফাইলের সাম্প্রতিকতম সংস্করণ অন্য আরেকটি ফাইলের সাম্প্রতিকতম সংস্করণের প্রতিলিপি। শুধু স্থানীয় ফাইল বিবেচনা করা হয়েছে।",
"listduplicatedfiles-entry": "[[:File:$1|$1]]-এর [[$3|{{PLURAL:$2|একটি প্রতিলিপি|$2টি প্রতিলিপি}}]] রয়েছে।",
- "unusedtemplates": "অব্যবহৃত টেমপ্লেটগুলি",
+ "unusedtemplates": "অব্যবহৃত টেমপ্লেটসমূহ",
"unusedtemplatestext": "{{ns:template}} নামস্থানের যে সমস্ত পাতা অন্য কোন পাতায় অন্তর্ভুক্ত নয়, তাদের সবগুলির তালিকা এই পাতায় দেওয়া হল। টেমপ্লেটগুলি মুছে ফেলার আগে পরীক্ষা করে দেখুন অন্য কোথাও থেকে এগুলিতে সংযোগ আছে কি না।",
"unusedtemplateswlh": "অন্যান্য সংযোগগুলি",
"randompage": "অজানা যেকোনো পাতা",
@@ -1449,7 +1475,6 @@
"statistics": "পরিসংখ্যান",
"statistics-header-pages": "পাতার পরিসংখ্যান",
"statistics-header-edits": "সম্পাদনার পরিসংখ্যান",
- "statistics-header-views": "প্রদর্শনের পরিসংখ্যান",
"statistics-header-users": "ব্যবহারকারীর পরিসংখ্যান",
"statistics-header-hooks": "অন্য পরিসংখ্যান",
"statistics-articles": "বিষয়বস্তুর পাতা",
@@ -1458,13 +1483,9 @@
"statistics-files": "আপলোডকৃত ফাইল",
"statistics-edits": "{{SITENAME}} চালু করার পর থেকে পাতার সম্পাদনাসমূহ",
"statistics-edits-average": "প্রতি পাতার গড় সম্পাদনা",
- "statistics-views-total": "সর্বোমোট প্রদর্শন",
- "statistics-views-total-desc": "অপসারিত হয়েছে এবং বিশেষ পাতার প্রদর্শন এখানে যোগ করা হয়নি",
- "statistics-views-peredit": "প্রতি সম্পাদনায় পরিদর্শন",
"statistics-users": "নিবন্ধিত [[Special:ListUsers|ব্যবহারকারী]]",
"statistics-users-active": "সক্রিয় ব্যবহারকারী",
"statistics-users-active-desc": "ব্যবহারকারী যারা বিগত {{PLURAL:$1|দিনে|$1 দিনে}} একটি কাজ করেছেন।",
- "statistics-mostpopular": "সবচেয়ে বেশী বার দেখা পাতাসমূহ",
"pageswithprop": "পাতার উপাদান সম্বলিত পৃষ্ঠাসমূহ",
"pageswithprop-legend": "পাতার উপাদান সম্বলিত পৃষ্ঠাসমূহ",
"pageswithprop-text": "একটি নির্দিষ্ট পাতার বৈশিষ্ট রয়েছে এমন পাতাসমূহের তালিকা।",
@@ -1472,7 +1493,7 @@
"pageswithprop-submit": "চলো",
"pageswithprop-prophidden-long": "দীর্ঘ প্রোপার্টি টেক্সটগুলো লুকানো রয়েছে ($1)",
"pageswithprop-prophidden-binary": "বাইনারি প্রোপার্টি টেক্সটগুলো লুকানো রয়েছে ($1)",
- "doubleredirects": "দুইবার করা পুনর্নির্দেশনাগুলি",
+ "doubleredirects": "দুইবার করা পুনর্নির্দেশনাসমূহ",
"doubleredirectstext": "এই পাতায় এমন পাতাগুলোর তালিকা আছে, যেগুলো অন্য কোন পুনর্নির্দেশনা পাতায় পুনর্নির্দেশিত হয়েছে। প্রতিটি সারিতে প্রথম ও দ্বিতীয় পুনর্নির্দেশনার জন্য সংযোগ আছে এবং দ্বিতীয় পুনর্নির্দেশনাটির লক্ষ্য সংযোগটিও দেওয়া আছে। এই লক্ষ্য সংযোগটিই সাধারণত \"আসল\" লক্ষ্য পাতা, যেটিতে প্রথম পুনর্নির্দেশনাটি থেকে সংযোগ থাকা উচিত।\n<del>কেটে দেওয়া</del> ভুক্তিগুলো ঠিক করা হয়েছে।",
"double-redirect-fixed-move": "[[$1]] সরিয়ে নেওয়া হয়েছে।\nএটি স্বয়ংক্রিয়ভাবে হালনাগাদ হয়েছে এবং এটি এখন [[$2]] এ পুনঃনির্দেশিত হয়েছে।",
"double-redirect-fixed-maintenance": "রক্ষণাবেক্ষণ কাজ হিসাবে [[$1]] থেকে [[$2]] এর দ্বিপুনঃর্নিদেশ স্বয়ংক্রিয়ভাবে সংশোধন করা হয়েছে।",
@@ -1505,14 +1526,14 @@
"uncategorizedtemplates": "যেসব টেমপ্লেটের বিষয়শ্রেণী নেই",
"unusedcategories": "অব্যবহৃত বিষয়শ্রেণীসমূহ",
"unusedimages": "অব্যবহৃত ফাইলসমূহ",
- "popularpages": "জনপ্রিয় পাতাসমূহ",
"wantedcategories": "বাঞ্ছনীয় বিষয়শ্রেণীগুলি",
"wantedpages": "বাঞ্ছনীয় পাতাগুলি",
"wantedpages-badtitle": "ফলাফলে ভুল শিরনাম: $1",
- "wantedfiles": "আবশ্যিক ফাইলগুলো",
+ "wantedfiles": "আবশ্যিক ফাইলসমূহ",
"wantedfiletext-cat": "নিচের ফাইলগুলো ব্যবহৃত হচ্ছে কিন্তু এগুলো অপসারিত হয়েছে। অন্যান্য রিপোজিটরী থেকে ব্যবহৃত ফাইলগুলো এভাবে প্রদর্শিত হতে পারে। এই ধরনের কোন ফাইল খুজে পেলে <del>অপসারণ করুন</del>। এছাড়া অপসারিত হয়েছে এমন ছবির সংযোগ রয়েছে এমন পাতাসমূহের লিংক পাওয়া যাবে এখানে [[:$1]]।",
"wantedfiletext-nocat": "নিচের ফাইলগুলো ব্যবহৃত হচ্ছে কিন্তু এগুলো অপসারিত হয়েছে। অন্যান্য রিপোজিটরী থেকে ব্যবহৃত ফাইলগুলো এভাবে প্রদর্শিত হতে পারে। এই ধরনের ভূলগুলো শিঘ্রই <del>অপসারিত হবে</del>।",
- "wantedtemplates": "আবশ্যিক টেম্পলেটগুলো",
+ "wantedfiletext-nocat-noforeign": "নিম্নলিখিত ফাইলসমূহ ব্যবহৃত হয়েছে কিন্তু এর অস্তিত্ব নেই।",
+ "wantedtemplates": "আবশ্যিক টেমপ্লেটসমূহ",
"mostlinked": "যেসব পাতার প্রতি সবচেয়ে বেশি সংযোগ আছে",
"mostlinkedcategories": "যেসব বিষয়শ্রেণীর প্রতি সবচেয়ে বেশি সংযোগ আছে",
"mostlinkedtemplates": "সবচেয়ে বেশি অন্তর্ভুক্ত পাতা",
@@ -1564,10 +1585,12 @@
"pager-older-n": "{{PLURAL:$1|আরও পুরনো ১টি|আরও পুরনো $1টি}}",
"suppress": "ওভারসাইট",
"querypage-disabled": "কারিগরি কারণে এই বিশেষ পাতাটি আপাতত বন্ধ রয়েছে।",
+ "apihelp": "এপিআই সাহায্য",
+ "apihelp-no-such-module": "মডিউল \"$1\" পাওয়া যায়নি।",
"booksources": "বইয়ের উৎস",
"booksources-search-legend": "বইয়ের উৎসের জন্য অনুসন্ধান করা হোক",
"booksources-isbn": "আইএসবিএন:",
- "booksources-go": "চলো",
+ "booksources-search": "অনুসন্ধান",
"booksources-text": "নতুন ও পুরাতন ব্যবহৃত বই বিক্রি করে, এমন কতগুলি সাইটের সংযোগের তালিকা নিচে দেওয়া হল, যে সাইটগুলিতে আপনার অনুসন্ধানকৃত বইগুলির উপর আরও তথ্য থাকতে পারে:",
"booksources-invalid-isbn": "উল্লেখিত ISBN সঠিক নয়; অনুগ্রহ করে মূল উৎস থেকে আবার পরীক্ষা করুন।",
"specialloguserlabel": "সম্পাদক:",
@@ -1620,7 +1643,7 @@
"activeusers-hidesysops": "প্রশাসক লুকাও",
"activeusers-noresult": "কোনো ব্যবহারকারী পাওয়া যায়নি।",
"listgrouprights": "দলগত ব্যবহারকারী অধিকার",
- "listgrouprights-summary": "এই উইকির ব্যবহারকারীদের একটি গ্রুপগুলোর তালিকা দেখানো হচ্ছে, সাথে গ্রুপের কার্যপরিধিও উল্লেখ করা হয়েছে।\nনির্দিষ্ট গ্রুপের কার্যপরিধি সম্পর্কে জানতে দেখুন [[{{MediaWiki:Listgrouprights-helppage}}|additional information]]।",
+ "listgrouprights-summary": "এই উইকির ব্যবহারকারীদের একটি গ্রুপগুলোর তালিকা দেখানো হচ্ছে, সাথে গ্রুপের কার্যপরিধিও উল্লেখ করা হয়েছে।\nনির্দিষ্ট গ্রুপের কার্যপরিধি সম্পর্কে জানতে [[{{MediaWiki:Listgrouprights-helppage}}|অতিরিক্ত তথ্য]] দেখুন।",
"listgrouprights-key": "লিজেন্ড:\n* <span class=\"listgrouprights-granted\">অনুমোদিত অধিকার</span>\n* <span class=\"listgrouprights-revoked\">বাধাপ্রাপ্ত অধিকার</span>",
"listgrouprights-group": "দল",
"listgrouprights-rights": "অধিকারসমূহ",
@@ -1694,7 +1717,7 @@
"wlheader-enotif": "ইমেল বিজ্ঞপ্তি সক্রিয় করা আছে।",
"wlheader-showupdated": "আপনার শেষ আগমনের পর থেকে যেসব পাতায় পরিবর্তন হয়েছে সেগুলি '''গাঢ়''' করে দেখানো হয়েছে।",
"wlnote": "নিচে $3, $4 তারিখ থেকে বিগত {{PLURAL:$2|১ ঘন্টায়|<strong>$2</strong> ঘন্টায়}} সংঘটিত {{PLURAL:$1|শেষ ১টি পরিবর্তন|শেষ <strong>$1টি</strong> পরিবর্তন}} দেখানো হল।",
- "wlshowlast": "দেখাও সর্বশেষ $1 ঘণ্টা $2 দিন $3",
+ "wlshowlast": "সর্বশেষ $1 ঘণ্টা $2 দিনে দেখাও",
"watchlist-options": "নজর তালিকা পছন্দসমূহ",
"watching": "নজর রাখা হচ্ছে...",
"unwatching": "নজর তুলে নেওয়া হচ্ছে...",
@@ -1710,11 +1733,11 @@
"enotif_body_intro_created": "{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে তৈরী করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।",
"enotif_body_intro_moved": "{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে স্থানান্তর করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।",
"enotif_body_intro_restored": "{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE আগের অবস্থায় ফিরিয়ে এনেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।",
- "enotif_body_intro_changed": "{{SITENAME}} এর $1 পাতাটি {{gender:$2|$2}} $PAGEEDITDATE তারিখে পরিবর্তন করেছেন, বর্তমান সংস্করণ দেখুন এখানে $3।",
+ "enotif_body_intro_changed": "{{SITENAME}} এর $1 পাতাটি $PAGEEDITDATE তারিখে $2 কর্তৃক {{GENDER:$2|পরিবর্তিত}} হয়েছে, বর্তমান সংস্করণের দেখুন $3।",
"enotif_lastvisited": "আপনার শেষ আগমনের পরে সংঘটিত সমস্ত পরিবর্তনের জন্য $1 দেখুন।",
"enotif_lastdiff": "এই পরিবর্তনটি দেখার জন্য $1 দেখুন।",
"enotif_anon_editor": "বেনামী ব্যবহারকারী $1",
- "enotif_body": "প্রিয় $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nসম্পাদকের সারাংশ: $PAGESUMMARY $PAGEMINOREDIT\n\nসম্পাদকের সাথে যোগাযোগের উপায়:\nইমেইল: $PAGEEDITOR_EMAIL\nউইকি: $PAGEEDITOR_WIKI\n\nপাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি লগ ইন করার সময় এই পাতায় ব্রাউজ করবেন। এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।\n\n{{SITENAME}} নোটিফিকেশন\n\n--\nইমেইল নোটিফিকেশন সেটিং পরিবর্তনের জন্য দেখুন\n{{canonicalurl:{{#special:Preferences}}}}\n\nআপনার নজরতালিকা সেটিংস পরিবর্তন করতে চাইলে দেখুন, \n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nনজরতালিকা থেকে কোন পাতা অপসারণ করতে চাইলে এখানে যান:\n$UNWATCHURL\n\nপ্রতিক্রিয়া জানাতে ও আরও সহযোগিতার জন্য:\n$HELPPAGE",
+ "enotif_body": "প্রিয় $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nসম্পাদকের সারাংশ: $PAGESUMMARY $PAGEMINOREDIT\n\nসম্পাদকের সাথে যোগাযোগের উপায়:\nইমেইল: $PAGEEDITOR_EMAIL\nউইকি: $PAGEEDITOR_WIKI\n\nপাতাটির পরবর্তী পরিবর্তনগুলো জন্য আর কোন বিজ্ঞপ্তি পাঠানো হবে না, যতক্ষণ না আপনি লগ ইন করার সময় এই পাতায় ব্রাউজ করবেন। এছাড়া আপনি আপনার নজরতালিকায় রাখা সবগুলি পাতা জন্য বিজ্ঞপ্তি ফ্ল্যাগ শুরুর অবস্থায় ফিরিয়ে নিতে পারেন।\n\nআপনার বন্ধুত্বপূর্ণ {{SITENAME}} বিজ্ঞপ্তি সিস্টেম\n\n--\nইমেইল বিজ্ঞপ্তি সেটিং পরিবর্তনের জন্য দেখুন\n{{canonicalurl:{{#special:Preferences}}}}\n\nআপনার নজরতালিকা সেটিংস পরিবর্তন করতে চাইলে দেখুন, \n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nনজরতালিকা থেকে কোন পাতা অপসারণ করতে চাইলে এখানে যান:\n$UNWATCHURL\n\nপ্রতিক্রিয়া জানাতে ও আরও সহযোগিতার জন্য:\n$HELPPAGE",
"created": "তৈরী হয়েছিল",
"changed": "পরিবর্তিত",
"deletepage": "পাতাটি মুছে ফেলা হোক",
@@ -1743,7 +1766,6 @@
"deleteprotected": "আপনি এই পাতাটি মুছে ফেলতে পারবেন না কারণ এটি সুরক্ষিত করা হয়েছে।",
"deleting-backlinks-warning": "'''সতর্কীকরণ:''' আপনি যেটি মুছে ফেলতে যাচ্ছেন তা [[Special:WhatLinksHere/{{FULLPAGENAME}}|অন্যান্য পাতাসমূহে]] সংযুক্ত অথবা অন্তর্ভুক্ত রয়েছে।",
"rollback": "সম্পাদনা ফিরিয়ে নিন",
- "rollback_short": "ফিরিয়ে নিন",
"rollbacklink": "পুনর্বহাল",
"rollbacklinkcount": "$1টি {{PLURAL:$1|সম্পাদনা}} রোলব্যাক করুন",
"rollbacklinkcount-morethan": "$1টির বেশি {{PLURAL:$1|সম্পাদনা|সম্পাদনাগুলো}} রোলব্যাক করুন",
@@ -1793,6 +1815,7 @@
"protect-othertime": "অন্য সময়:",
"protect-othertime-op": "অন্য সময়",
"protect-existing-expiry": "বিদ্যমান মেয়াদউত্তীর্ণের সময়: $3, $2",
+ "protect-existing-expiry-infinity": "বিদ্যমান মেয়াদ উত্তীর্নের সময়: অসীম",
"protect-otherreason": "অন্যান্য/অতিরিক্ত কারণ:",
"protect-otherreason-op": "অন্য কারণ",
"protect-dropdown": "*সুরক্ষার প্রচলিত কারণ\n** অতিরিক্ত ধ্বংসপ্রবণতা\n** অতিরিক্ত অর্থহীন বিষয়বস্তু প্রবেশ করানো\n** পাল্টা-গঠনমূলক সম্পাদনা যুদ্ধ\n** বেশি মাত্রায় প্রদর্শনকৃত পাতা",
@@ -1894,7 +1917,7 @@
"whatlinkshere-next": "{{PLURAL:$1|পরবর্তী|পরবর্তী $1টি}}",
"whatlinkshere-links": "← সংযোগগুলি",
"whatlinkshere-hideredirs": "পুননির্দেশনা $1",
- "whatlinkshere-hidetrans": "$1 ট্রান্সক্লুশন",
+ "whatlinkshere-hidetrans": "ট্রান্সক্লুশন $1",
"whatlinkshere-hidelinks": "সংযোগ $1",
"whatlinkshere-hideimages": "$1 ফাইল সংযোগ",
"whatlinkshere-filters": "ছাকনী",
@@ -1937,6 +1960,7 @@
"unblocked": "[[User:$1|$1]]-এর উপর বাধা তুলে নেওয়া হয়েছে",
"unblocked-range": "$1 -এর থেকে বাধা সরিয়ে নেওয়া হয়েছে",
"unblocked-id": "$1 বাধাটি তুলে নেওয়া হয়েছে",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] কে অবরোধমুক্ত করা হয়েছে।",
"blocklist": "বাধাপ্রাপ্ত ব্যবহারকারী",
"ipblocklist": "বাধাপ্রাপ্ত ব্যবহারকারী",
"ipblocklist-legend": "বাধা দেওয়া কোন ব্যবহারকারীকে অনুসন্ধান করুন",
@@ -1947,7 +1971,7 @@
"blocklist-timestamp": "সময়বার্তা",
"blocklist-target": "লক্ষ্য",
"blocklist-expiry": "মেয়াদোত্তীর্ণ হবে",
- "blocklist-by": "প্রশাসককে বাধাপ্রদান",
+ "blocklist-by": "বাধাপ্রদানকারী প্রশাসক",
"blocklist-params": "বাধাদানের প্যারামিটার",
"blocklist-reason": "কারণ",
"ipblocklist-submit": "অনুসন্ধান",
@@ -1971,7 +1995,7 @@
"blocklogpage": "বাধা দানের লগ",
"blocklog-showlog": "এই ব্যবহারকারীকে পূর্বেও বাধা প্রদান করা হয়েছিলো।\nতথ্যসূত্র হিসেবে তাই পূর্বের বাধাদানের লগটি নিচে প্রদর্শন করা হচ্ছে:",
"blocklog-showsuppresslog": "এই ব্যবহারকারীকে পূর্বেও বাধা প্রদান ও লুকানো হয়েছিলো।\nতথ্যসূত্র হিসেবে তাই পূর্বের অপসারণ লগটি নিচে প্রদর্শন করা হচ্ছে:",
- "blocklogentry": "[[$1]]এর উপর $2 $3 মেয়াদের জন্য নিষেধাজ্ঞা আরোপিত হয়েছে।",
+ "blocklogentry": "[[$1]] কে $2 মেয়াদের জন্য বাধাদান করেছেন $3",
"reblock-logentry": "[[$1]] এর ব্লক সেটিং পরিবর্তন করা হয়েছে যেটি শেষ হবে $2 $3 সময়ে",
"blocklogtext": "এটি ব্যবহারকারীদেরকে বাধা দানের বা বাধা তুলে নেওয়ার লগ।\nস্বয়ংক্রিয়ভাবে বাধাদানকৃত আইপি ঠিকানাগুলি এখানে তালিকাবদ্ধ করা হয়নি।\nবর্তমানে সক্রিয় নিষিদ্ধকরণ ও বাধাদানের তালিকার জন্য [[Special:BlockList| বাধাদান তালিকা]] দেখুন।",
"unblocklogentry": "$1-এর উপর বাধা তুলে নেয়া হয়েছে",
@@ -2119,8 +2143,8 @@
"thumbnail_gd-library": "অসম্পূর্ণ জিডি লাইব্রেরী কনফিগারেশন: $1 ফাংশন নেই",
"thumbnail_image-missing": "ফাইলটি খুজে পাওয়া যাচ্ছে না: $1",
"import": "পাতা আমদানি",
- "importinterwiki": "আন্তঃউইকি আমদানি",
- "import-interwiki-text": "আমদানির জন্য একটি উইকি ও পাতার শিরোনাম নির্বাচন করুন।\nসংশোধনের তারিখগুলি এবং সম্পাদকদের নামগুলি সংরক্ষণ করা হবে।\nসমস্ত আন্তঃউইকি আমদানিগুলি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
+ "importinterwiki": "অন্য উইকি থেকে আমদানী",
+ "import-interwiki-text": "আমদানির জন্য একটি উইকি ও পাতার শিরোনাম নির্বাচন করুন।\nসংশোধনের তারিখগুলি এবং সম্পাদকদের নামগুলি সংরক্ষণ করা হবে।\nঅন্যান্য উইকি থেকে সমস্ত আমদানি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
"import-interwiki-sourcewiki": "উত্স উইকি:",
"import-interwiki-sourcepage": "উৎস পাতা:",
"import-interwiki-history": "এই পাতার সমস্ত ইতিহাসের সংস্করণের অনুলিপি করা হোক",
@@ -2163,18 +2187,15 @@
"import-rootpage-nosubpage": "মূল পাতার \"$1\" নামস্থানে উপপাতা তৈরী অনুমোদিত নয়।",
"importlogpage": "আমদানি লগ",
"importlogpagetext": "প্রশাসক কর্তৃক অন্যান্য উইকি থেকে সম্পাদনা ইতিহাসসহ পাতা আমদানি।",
- "import-logentry-upload": "ফাইল আপলোডের মাধ্যমে [[$1]] আমদানি করা হয়েছে",
"import-logentry-upload-detail": "$1টি {{PLURAL:$1|সংশোধন}} আমদানি করা হয়েছে",
- "import-logentry-interwiki": "$1 উইকি-স্থানান্তরিত",
"import-logentry-interwiki-detail": "$2-এর থেকে $1টি {{PLURAL:$1|সংশোধন}} করা হয়েছে",
"javascripttest": "জাভাস্ক্রিপ্ট পরীক্ষা",
- "javascripttest-title": "$1 পরীক্ষা চলছে",
"javascripttest-pagetext-noframework": "এই পাতাটি জাভাস্ক্রিপ্ট পরীক্ষার জন্য সংরক্ষিত।",
"javascripttest-pagetext-unknownframework": "পরীক্ষার অজানা ফ্রেমওয়ার্ক \"$1\"।",
+ "javascripttest-pagetext-unknownaction": "অজানা কার্য \"$1\"।",
"javascripttest-pagetext-frameworks": "অনুগ্রহ করে নিচের কোনো একটি ফ্রেমওয়ার্ক নির্ধারণ করুন: $1",
"javascripttest-pagetext-skins": "পরীক্ষার জন্য একটি স্কীন নির্ধারণ করুন:",
"javascripttest-qunit-intro": "mediawiki.org থেকে [$1 পরীক্ষার ডলুমেন্টেশন] দেখুন।",
- "javascripttest-qunit-heading": "মিডিয়াউইকি জাভাস্ক্রিপ্ট কিউইউনিট টেস্ট স্যুট",
"tooltip-pt-userpage": "আপনার ব্যবহারকারী পাতা",
"tooltip-pt-anonuserpage": "যে আইপি ঠিকানা থেকে আপনি সম্পাদনা করছেন, তার ব্যবহারকারী পাতা",
"tooltip-pt-mytalk": "আপনার আলাপের পাতা",
@@ -2182,19 +2203,20 @@
"tooltip-pt-preferences": "আমার পছন্দ",
"tooltip-pt-watchlist": "যে পাতাগুলির পরিবর্তন আপনি নজরে রেখেছেন, তাদের তালিকা",
"tooltip-pt-mycontris": "আপনার অবদানগুলোর তালিকা",
- "tooltip-pt-login": "আপনার লগ-ইন করাটা বাঞ্চনীয়, কিন্তু তা বাধ্যতামূলক নয়।",
+ "tooltip-pt-login": "আপনার প্রবেশ করাটা বাঞ্চনীয়, কিন্তু তা বাধ্যতামূলক নয়।",
"tooltip-pt-logout": "প্রস্থান",
+ "tooltip-pt-createaccount": "আপনাকে একটি অ্যাকাউন্ট তৈরি করে প্রবেশ করার পরামর্শ দেওয়া হচ্ছে; তবে এটা বাধ্যতামূলক নয়",
"tooltip-ca-talk": "বিষয়বস্তু পাতা সম্পর্কে আলোচনা",
"tooltip-ca-edit": "আপনি এই পাতা সম্পাদনা করতে পারেন। অনুগ্রহ করে সংরক্ষণের আগে প্রাকদর্শন করুন।",
- "tooltip-ca-addsection": "নতুন অনুচ্ছেদ শুরু করুন।",
+ "tooltip-ca-addsection": "নতুন অনুচ্ছেদ শুরু করুন",
"tooltip-ca-viewsource": "এই পাতাটি সুরক্ষিত। আপনি পাতাটির উৎস দেখতে পারেন।",
"tooltip-ca-history": "এই পাতার পুরনো সংস্করণগুলি",
"tooltip-ca-protect": "এই পাতাকে সুরক্ষিত করো",
"tooltip-ca-unprotect": "এই পাতার সুরক্ষা পরিবর্তন করো",
"tooltip-ca-delete": "পাতাটি মুছে ফেলো",
"tooltip-ca-undelete": "পাতাটি মুছে ফেলার আগে যে সম্পাদনাগুলি করা হয়েছিল, সেগুলি উদ্ধার করা হোক।",
- "tooltip-ca-move": "পাতাটি সরিয়ে ফেলুন",
- "tooltip-ca-watch": "এই পাতাটি আপনার নজরতালিকায় যোগ করো",
+ "tooltip-ca-move": "পাতাটি স্থানান্তর করুন",
+ "tooltip-ca-watch": "এই পাতাটি আপনার নজরতালিকায় যোগ করুন",
"tooltip-ca-unwatch": "এই পাতাটি আপনার নজরতালিকা থেকে সরিয়ে ফেলুন",
"tooltip-search": "{{SITENAME}} অনুসন্ধান",
"tooltip-search-go": "যদি থাকে, তবে ঠিক এই নামের পাতায় চলো",
@@ -2213,6 +2235,7 @@
"tooltip-feed-atom": "এই পাতার জন্য অ্যাটম ফিড",
"tooltip-t-contributions": "এই ব্যবহারকারীর অবদানগুলির তালিকা দেখুন",
"tooltip-t-emailuser": "এই ব্যবহারকারীকে একটি ই-মেইল পাঠান",
+ "tooltip-t-info": "এই পাতা সম্পর্কে আরো তথ্য",
"tooltip-t-upload": "ফাইল আপলোড করুন",
"tooltip-t-specialpages": "সব বিশেষ পাতার তালিকা",
"tooltip-t-print": "এ পাতার ছাপানোর উপযোগী সংস্করণ",
@@ -2242,6 +2265,7 @@
"tooltip-preferences-save": "পছন্দ সংরক্ষণ",
"tooltip-summary": "একটি সংক্ষিপ্ত সারাংশ দিন",
"interlanguage-link-title": "$1 - $2",
+ "common.css": "/* এখানে সিএসএস নিবেশিত করা হলে তা সব স্কিনে প্রয়োগ করা হবে */",
"anonymous": "{{SITENAME}} এর বেনামী {{PLURAL:$1|ব্যবহারকারী|ব্যবহারকারীবৃন্দ}}",
"siteuser": "{{SITENAME}} ব্যবহারকারী $1",
"anonuser": "{{SITENAME}} বেনামী ব্যবহারকারী $1",
@@ -2275,7 +2299,6 @@
"pageinfo-robot-policy": "রোবটের মাধ্যমে ইন্ডেক্স করা হচ্ছে",
"pageinfo-robot-index": "অনুমোদিত",
"pageinfo-robot-noindex": "অনুনমোদিন",
- "pageinfo-views": "পরিদর্শন সংখ্যা",
"pageinfo-watchers": "পাতাটি প্রদর্শনের সংখ্যা",
"pageinfo-few-watchers": "$1 জন {{PLURAL:$1|নজরকারীও}} কম",
"pageinfo-redirects-name": "এই পাতায় পুননির্দেশনাসমূহের সংখ্যা",
@@ -2340,7 +2363,7 @@
"svg-long-desc-animated": "এনিমেটেড এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3",
"svg-long-error": "অবৈধ SVG ফাইল: $1",
"show-big-image": "মূল ফাইল",
- "show-big-image-preview": "এই প্রিভিউ-এর আকার: $1।",
+ "show-big-image-preview": "এই প্রাকদর্শনের আকার: $1।",
"show-big-image-other": "অন্যান্য {{PLURAL:$2|আকার|আকারসমূহ}}: $1।",
"show-big-image-size": "$1 × $2 পিক্সেল",
"file-info-gif-looped": "লুপকৃত",
@@ -2411,7 +2434,7 @@
"exif-datetime": "ফাইল পরিবর্তনের তারিখ ও সময়",
"exif-imagedescription": "ছবির শিরোনাম",
"exif-make": "ক্যামেরার তৈরিকারক",
- "exif-model": "ক্যামেরা মডেল",
+ "exif-model": "ক্যামেরার মডেল",
"exif-software": "ব্যবহৃত সফটওয়্যার",
"exif-artist": "স্রষ্টা",
"exif-copyright": "কপিরাইট ধারক",
@@ -2454,7 +2477,7 @@
"exif-subjectlocation": "বিষয়বস্তুর অবস্থান",
"exif-exposureindex": "আলোকসম্পাত সূচক",
"exif-sensingmethod": "সংবেদন পদ্ধতি",
- "exif-filesource": "ফাইল সোর্স",
+ "exif-filesource": "ফাইলের উৎস",
"exif-scenetype": "দৃশ্যের ধরন",
"exif-customrendered": "পছন্দমাফিক ছবি প্রক্রিয়াকরণ",
"exif-exposuremode": "আলোকসম্পাত মোড",
@@ -2726,7 +2749,6 @@
"exif-urgency-low": "নিম্ন ($1)",
"exif-urgency-high": "উচ্চ ($1)",
"exif-urgency-other": "ব্যবহারকারী নির্ধারিত অগ্রাধিকার ক্রম ($1)",
- "watchlistall2": "সবগুলো",
"namespacesall": "সমস্ত",
"monthsall": "সমস্ত",
"confirmemail": "ই-মেইলের ঠিকানা নিশ্চিত করুন",
@@ -2762,6 +2784,7 @@
"confirm-watch-top": "এই পাতাটি আপনার নজরতালিকায় যুক্ত করা হবে?",
"confirm-unwatch-button": "ঠিক আছে",
"confirm-unwatch-top": "এই পাতাটি আপনার নজরতালিকা থেকে সরিয়ে ফেলতে ইচ্ছুক?",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← পূর্ববর্তী পাতা",
"imgmultipagenext": "পরবর্তী পাতা →",
"imgmultigo": "চলো!",
@@ -2782,7 +2805,7 @@
"autosumm-blank": "পাতা খালি করা হয়েছে",
"autosumm-replace": "পাতাকে '$1' দিয়ে প্রতিস্থাপিত করা হল",
"autoredircomment": "[[$1]]-এ পুনর্নির্দেশ করা হল",
- "autosumm-new": "$1 দিয়ে তৈরি পাতা",
+ "autosumm-new": "\"$1\" দিয়ে পাতা তৈরি",
"autosumm-newblank": "খালি পাতা তৈরি হয়েছে",
"size-bytes": "$1 বাইট",
"size-kilobytes": "$1 কিলোবাইট",
@@ -2850,7 +2873,6 @@
"hebrew-calendar-m12": "এলুল",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|আলাপ]])",
"timezone-utc": "ইউটিসি",
- "unknown_extension_tag": "অজানা এক্সটেনশন ট্যাগ \"$1\"",
"duplicate-defaultsort": "' ' ' সাবধান: ' ' ' ডিফল্ট সাজানোর কীঃ \"$2\" পূর্বে ডিফল্ট সাজানোর কীঃ \"$1\" কে অগ্রাহ্য করে।",
"version": "সংস্করণ",
"version-extensions": "ইন্সটলকৃত এক্সটেনশনসমূহ",
@@ -2866,7 +2888,7 @@
"version-parser-function-hooks": "পার্সার ফাংশন হুক",
"version-hook-name": "হুকের নাম",
"version-hook-subscribedby": "সাবস্ক্রাইব করেছেন",
- "version-version": "(সংস্করণ $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[নাম নেই]",
"version-license": "মিডিয়াউইকি লাইসেন্স",
"version-ext-license": "লাইসেন্স",
@@ -2891,6 +2913,9 @@
"version-entrypoints": "শুরুর ইউআরএল",
"version-entrypoints-header-entrypoint": "শুরু",
"version-entrypoints-header-url": "ইউআরএল",
+ "version-libraries": "ইনস্টল লাইব্রেরি",
+ "version-libraries-library": "লাইব্রেরী",
+ "version-libraries-version": "সংস্করণ",
"redirect": "পাতা, ফাইল, ব্যবহারকরী, অথবা সংশোধন আইডি দ্বারা পুনঃনির্দেশ করা হয়েছে",
"redirect-legend": "একটি ফাইল অথবা পাতায় পুনঃনির্দেশ করা হয়েছে",
"redirect-summary": "এই বিশেষ পাতাটি একটি ফাইলে (ফাইলের নাম), একটি পাতায় (সংস্করণ আইডি বা পাতা আইডি), অথবা একটি ব্যবহারকরী পাতায় (সংখ্যায় লেখা ব্যবহারকারী আইডি) পুনঃনির্দেশিত হয়েছে। ব্যবহার: [[{{#Special:Redirect}}/file/উদাহরণ.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], অথবা [[{{#Special:Redirect}}/user/101]]।",
@@ -2902,7 +2927,7 @@
"redirect-revision": "পাতা সংস্করণ",
"redirect-file": "ফাইলের নাম",
"redirect-not-exists": "মান পাওয়া যায়নি",
- "fileduplicatesearch": "ডুপ্লিকেট ফাইলের জন্য অনুসন্ধান",
+ "fileduplicatesearch": "সদৃশ ফাইলের জন্য অনুসন্ধান",
"fileduplicatesearch-summary": "হ্যাশ ভ্যালুর ওর ভিত্তি করে একই ছবিগুলো খুঁজুন।",
"fileduplicatesearch-legend": "অনুলিপির জন্য অনুসন্ধান",
"fileduplicatesearch-filename": "ফাইলনাম:",
@@ -2926,6 +2951,7 @@
"specialpages-group-wiki": "উপাত্ত এবং সরঞ্জামসমূহ",
"specialpages-group-redirects": "বিশেষ পাতাগুলি পুনর্নির্দেশ করা হচ্ছে",
"specialpages-group-spam": "স্প্যামরোধী হাতিয়ার",
+ "specialpages-group-developer": "ডেভলপারের সরঞ্জাম",
"blankpage": "খালি পাতা",
"intentionallyblankpage": "এই পাতাটি ইচ্ছা করে খালি রাখা হয়েছে",
"external_image_whitelist": " #এই লাইন ঠিক যেমন আছে<প্রাক> তেমন রাখুন<pre>\n #রেগুলার এক্সপ্রেশনের টুকরা নীচে (শুধুমাত্র অংশ / / মধ্যে যে যায়) বসান\n#এইগুলি এক্সটার্নাল (hotlinked) ইমেজের URL-এর সাথে মেলানো হবে\n#যেগুলি মিলবে, সেগুলি চিত্র হিসাবে প্রদর্শিত হবে, অন্যথায় শুধুমাত্র ইমেজ লিঙ্ক প্রদর্শিত হবে\n#যে লাইনের প্রারম্ভে # আছে সেই লাইনগুলি মন্তব্যসমূহ হিসাবে ব্যবহার করা হয়\n#এটি কেস-অসংবেদী\n\n#এই রেখার উপরের regex টুকরা বসান. এই লাইন ঠিক যেমন আছে তেমন রাখুন</pre>",
@@ -2938,12 +2964,32 @@
"tags-tag": "ট্যাগ নাম",
"tags-display-header": "পরিনর্তন পাতার বৈশিষ্ট",
"tags-description-header": "অর্থের পূর্ণ বণনা",
+ "tags-source-header": "উৎস",
"tags-active-header": "সক্রিয়?",
"tags-hitcount-header": "ট্যাগকৃত পরিবর্সতনমূহ",
+ "tags-actions-header": "কার্যসমূহ",
"tags-active-yes": "হ্যাঁ",
"tags-active-no": "না",
+ "tags-source-none": "আর ব্যবহার করা হচ্ছে না",
"tags-edit": "সম্পাদনা",
- "tags-hitcount": "$1 {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}",
+ "tags-delete": "অপসারণ",
+ "tags-activate": "সক্রিয়",
+ "tags-deactivate": "নিষ্ক্রিয়",
+ "tags-hitcount": "$1টি {{PLURAL:$1|পরিবর্তন}}",
+ "tags-manage-no-permission": "আপনার ট্যাগ পরিবর্তন পরিচালনা করার অনুমতি নেই।",
+ "tags-create-heading": "নতুন ট্যাগ তৈরি করুন",
+ "tags-create-tag-name": "ট্যাগের নাম:",
+ "tags-create-reason": "কারণ:",
+ "tags-create-submit": "তৈরি করুন",
+ "tags-delete-title": "ট্যাগ অপসারণ",
+ "tags-delete-reason": "কারণ:",
+ "tags-delete-submit": "অপরিবর্তনীয় এই ট্যাগ অপসারন করো",
+ "tags-activate-title": "সক্রিয় ট্যাগ",
+ "tags-activate-reason": "কারণ:",
+ "tags-activate-submit": "চালু",
+ "tags-deactivate-title": "নিষ্ক্রিয় ট্যাগ",
+ "tags-deactivate-reason": "কারণ:",
+ "tags-deactivate-submit": "নিষ্ক্রিয়",
"comparepages": "পাতার তুলনা",
"compare-page1": "পাতা ১",
"compare-page2": "পাতা ২",
@@ -2955,8 +3001,8 @@
"compare-revision-not-exists": "আপনার কাঙ্ক্ষিত সংস্করণটি নেই।",
"dberr-problems": " দুঃখিত! এই সাইটটি বর্তমানে কারীগরী অসুবিধার মুখোমুখি হয়েছে।",
"dberr-again": "কয়েক মিনিট পর পুনরায় পরিদর্শনের চেষ্টা করুন।",
- "dberr-info": "(ডেটাবেজ সার্ভার $1-এর সাথে যোগাযোগ করা সম্ভব হয়নি)",
- "dberr-info-hidden": "(ডাটাবেজ সার্ভারের সাথে সংযোগ দেয়া সম্ভব হচ্ছে না)",
+ "dberr-info": "(ডেটাবেজ প্রবেশ করা সম্ভব হয়নি: $1)",
+ "dberr-info-hidden": "(ডেটাবেজ প্রবেশ করা সম্ভব হয়নি)",
"dberr-usegoogle": "এই পরিস্থিতিতে আপনি গুগলের মাধ্যমে অনুসন্ধান করার চেষ্টা করতে পারেন।",
"dberr-outofdate": "খেয়াল করুন যে, আমাদের বিষয়বস্তু সম্পর্কিত তাদের সূচি মেয়াদ উত্তীর্ণ হতে পারে।",
"dberr-cachederror": "এটি অনুরোধকৃত পাতার ক্যাশে লিপি, যা হালনাগাতকৃত নাও হতে পারে।",
@@ -2980,15 +3026,15 @@
"sqlite-no-fts": "$1 বাদে পূর্ণ টেক্সট সার্চ সমর্থন",
"logentry-delete-delete": "$1 কর্তৃক $3 পাতাটি অপসারিত হয়েছে",
"logentry-delete-restore": "$1 কর্তৃক $3 পাতাটি {{GENDER:$2|ফিরিয়ে আনা}} হয়েছে",
- "logentry-delete-event": "$1 {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহের}} ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
- "logentry-delete-revision": "$1 {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহের}} ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
- "logentry-delete-event-legacy": "$1 $3টায় লগ ইভেন্টসমূহের ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন",
- "logentry-delete-revision-legacy": "$1 $3টায় সংস্করণসমূহের ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন",
+ "logentry-delete-event": "$1 {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহের}} দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
+ "logentry-delete-revision": "$1 {{PLURAL:$5|একটি সংস্করণের|$5টি সংস্করণের}} দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
+ "logentry-delete-event-legacy": "$1 $3টায় লগ ইভেন্টসমূহের দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন",
+ "logentry-delete-revision-legacy": "$1 $3টায় সংস্করণসমূহের দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন",
"logentry-suppress-delete": "$1 কর্তৃক $3 পাতাটি {{GENDER:$2|ফিরিয়ে আনা}} হয়েছে",
- "logentry-suppress-event": "$1 গোপনে {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহের}} ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
- "logentry-suppress-revision": "$1 গোপনে {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহের}} ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
- "logentry-suppress-event-legacy": "$1 গোপনে $3টায় লগ ইভেন্টসমূহের ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন",
- "logentry-suppress-revision-legacy": "$1 গোপনে $3টায় সংস্করণসমূহের ভিজিবিলিটি {{GENDER:$2|পরিবর্তন}} করেছেন",
+ "logentry-suppress-event": "$1 গোপনে {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহের}} দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
+ "logentry-suppress-revision": "$1 গোপনে {{PLURAL:$5|একটি সংস্করণের|$5টি সংস্করণের}} দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
+ "logentry-suppress-event-legacy": "$1 গোপনে $3টায় লগ ইভেন্টসমূহের দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন",
+ "logentry-suppress-revision-legacy": "$1 গোপনে $3টায় সংস্করণসমূহের দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন",
"revdelete-content-hid": "বিষয়বস্তু লুকায়িত",
"revdelete-summary-hid": "সম্পাদনা সারাংশ লুকায়িত",
"revdelete-uname-hid": "ব্যবহারকারী নাম লুকায়িত",
@@ -2997,6 +3043,8 @@
"revdelete-uname-unhid": "ব্যবহারকারী নাম প্রদর্শিত",
"revdelete-restricted": "এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে প্রয়োগ করো",
"revdelete-unrestricted": "এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে তুলে নাও",
+ "logentry-block-block": "$1 {{GENDER:$4|$3}} কে $5 মেয়াদের জন্য {{GENDER:$2|বাধাদান}} করেছেন $6",
+ "logentry-block-unblock": "$1 {{GENDER:$4|$3}}-এর উপর থেকে বাধা তুলে {{GENDER:$2|নিয়েছেন}}",
"logentry-move-move": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন",
"logentry-move-move-noredirect": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
"logentry-move-move_redir": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার মাধ্যমে {{GENDER:$2|স্থানান্তর}} করেছেন",
@@ -3004,7 +3052,7 @@
"logentry-patrol-patrol": "$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
"logentry-patrol-patrol-auto": "$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
"logentry-newusers-newusers": "$1 ব্যবহারকারী অ্যাকাউন্টটি {{GENDER:$2|তৈরি করা}} হয়েছে",
- "logentry-newusers-create": "$1 অ্যাকাউন্টটি {{GENDER:$2|তৈরী করা}} হয়েছে",
+ "logentry-newusers-create": "ব্যবহারকারী অ্যাকাউন্ট $1 {{GENDER:$2|তৈরী করা}} হয়েছে",
"logentry-newusers-create2": "$1 ব্যবহারকারী $3 নামের অ্যাকাউন্টটি {{GENDER:$2|তৈরী}} করেছেন",
"logentry-newusers-byemail": "$1, $3 ব্যবহারকরী অ্যাকাউন্টটি {{GENDER:$2|তৈরী করেছেন}} এবং পাসওয়ার্ড ইমেইলের মাধ্যমে পাঠানো হয়েছে",
"logentry-newusers-autocreate": "$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে {{GENDER:$2|তৈরি}} হয়েছে",
@@ -3014,20 +3062,28 @@
"logentry-upload-upload": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
"logentry-upload-overwrite": "$1 $3-এর একটি নতুন সংস্করণ {{GENDER:$2|আপলোড করেছেন}}",
"logentry-upload-revert": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
+ "log-name-managetags": "ট্যাগ ব্যবস্থাপনা লগ",
"rightsnone": "(কিছু নাই)",
+ "revdelete-summary": "সম্পাদনা সারাংশ",
+ "feedback-adding": "পাতায় প্রতিক্রিয়া যোগ হচ্ছে...",
+ "feedback-back": "পিছনে",
+ "feedback-bugcheck": "উত্তম! যাচাই করুন যে এই [$1 জানা বাগের] কোন একটি কিনা।",
+ "feedback-bugnew": "আমি যাচাই করেছি। নতুন বাগ নিবন্ধন করুন।",
"feedback-bugornote": "কারিগরী ত্রুটির বিস্তারিত বর্ণনা জানতে [$1 বাগ রিপোর্ট করুন]।\nঅথবা নিচের এই সরল ফর্মটি ব্যবহার করতে পারেন। \"[$3 $2]\" পাতায় আপনার ব্যবহারকারী নাম সহ মন্তব্যটি প্রকাশিত হবে।",
- "feedback-subject": "বিষয়:",
- "feedback-message": "বার্তা:",
"feedback-cancel": "বাতিল",
- "feedback-submit": "প্রতিক্রিয়া জমা",
- "feedback-adding": "পাতায় প্রতিক্রিয়া যোগ হচ্ছে...",
+ "feedback-close": "সম্পন্ন",
+ "feedback-external-bug-report-button": "প্রযুক্তিগত কাজ ফাইল করুন",
+ "feedback-dialog-title": "প্রতিক্রিয়া জমা দিন",
+ "feedback-error-title": "ত্রুটি",
"feedback-error1": "ত্রুটি: এপিআই হতে অজানা ফলাফল এসেছে",
"feedback-error2": "ত্রুটি: সম্পাদনা ব্যর্থ",
"feedback-error3": "ত্রুটি: এপিআই হতে কোন সাড়া নেই",
+ "feedback-message": "বার্তা:",
+ "feedback-subject": "বিষয়:",
+ "feedback-submit": "জমা দাও",
"feedback-thanks": "ধন্যবাদ! আপনার প্রতিক্রিয়া \"[$2 $1]\" পাতায় পোস্ট করা হয়েছে।",
- "feedback-close": "সম্পন্ন",
- "feedback-bugcheck": "উত্তম! যাচাই করুন যে এই [$1 জানা বাগের] কোন একটি কিনা।",
- "feedback-bugnew": "আমি যাচাই করেছি। নতুন বাগ নিবন্ধন করুন।",
+ "feedback-thanks-title": "আপনাকে ধন্যবাদ!",
+ "feedback-useragent": "ব্যবহারকারী এজেন্ট:",
"searchsuggest-search": "অনুসন্ধান",
"searchsuggest-containing": "যা আছে...",
"api-error-badaccess-groups": "আপনার এই উইকিতে ফাইল আপলোডের অনুমতি নেই।",
@@ -3118,5 +3174,47 @@
"log-description-pagelang": "এটি পাতার ভাষা পরিবর্তনের লগ।",
"logentry-pagelang-pagelang": "$1 পাতার ভাষা $3 এর জন্য $4 থেকে $5 এ {{GENDER:$2|পরিবর্তন}} করেছেন।",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (সক্রিয় করা)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''নিষ্ক্রিয় করা''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''নিষ্ক্রিয় করা''')",
+ "mediastatistics": "মিডিয়া পরিসংখ্যান",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 বাইট}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME ধরন",
+ "mediastatistics-table-extensions": "সম্ভাব্য এক্সটেনশন",
+ "mediastatistics-table-count": "ফাইলের সংখ্যা",
+ "mediastatistics-table-totalbytes": "সম্মিলিত আকার",
+ "mediastatistics-header-unknown": "অজানা",
+ "mediastatistics-header-bitmap": "বিটম্যাপ চিত্র",
+ "mediastatistics-header-drawing": "অংকন (ভেক্টর চিত্র)",
+ "mediastatistics-header-audio": "অডিও",
+ "mediastatistics-header-video": "ভিডিও",
+ "mediastatistics-header-office": "অফিস",
+ "mediastatistics-header-archive": "সংকুচিত বিন্যাস",
+ "json-error-unknown": "JSON-এ একটি সমস্যা রয়েছে। ত্রুটি: $1",
+ "json-error-state-mismatch": "অকার্যকর বা ত্রুটিপূর্ণ JSON",
+ "json-error-ctrl-char": "অক্ষর নিয়ন্ত্রণ ত্রুটি, সম্ভবত ভুল এনকোডকৃত",
+ "json-error-syntax": "সিনট্যাক্স ত্রুটি",
+ "json-error-utf8": "ত্রুটিপূর্ণ ইউটিএফ-৮ অক্ষর, সম্ভবত ভুল এনকোডকৃত",
+ "json-error-unsupported-type": "এনকোড করা যাবে না এমন একটি মানের ধরন দেয়া হয়েছে",
+ "headline-anchor-title": "এই অনুচ্ছেদে সংযোগ",
+ "special-characters-group-latin": "লাতিন",
+ "special-characters-group-latinextended": "সম্প্রসারিত লাতিন",
+ "special-characters-group-ipa": "আইপিএ (IPA)",
+ "special-characters-group-symbols": "চিহ্নসমূহ",
+ "special-characters-group-greek": "গ্রিক",
+ "special-characters-group-cyrillic": "সিরিলিক",
+ "special-characters-group-arabic": "আরবি",
+ "special-characters-group-arabicextended": "সম্প্রসারিত আরবি",
+ "special-characters-group-persian": "ফারসি",
+ "special-characters-group-hebrew": "হিব্রু",
+ "special-characters-group-bangla": "বাংলা",
+ "special-characters-group-tamil": "তামিল",
+ "special-characters-group-telugu": "তেলেগু",
+ "special-characters-group-sinhala": "সিংহলী",
+ "special-characters-group-gujarati": "গুজরাটি",
+ "special-characters-group-devanagari": "দেবনাগরী",
+ "special-characters-group-thai": "থাই",
+ "special-characters-group-lao": "লাও",
+ "special-characters-group-khmer": "খেমার",
+ "special-characters-title-endash": "en ড্যাশ",
+ "special-characters-title-emdash": "em ড্যাশ",
+ "special-characters-title-minus": "বিয়োগ চিহ্ন"
}
diff --git a/languages/i18n/bo.json b/languages/i18n/bo.json
index 434232eb..2ff0ef46 100644
--- a/languages/i18n/bo.json
+++ b/languages/i18n/bo.json
@@ -370,7 +370,6 @@
"changeemail-newemail": "དྲ་འཕྲིན་ཁ་བྱང་གསར་བ།",
"changeemail-none": "(སྟོང་པ།)",
"changeemail-submit": "དྲ་འཕྲིན་བརྗེ་བ།",
- "changeemail-cancel": "རྩིས་མེད་ཐོངས།",
"bold_sample": "ཡིག་གཟུགས་སྦོམ་པོ།",
"bold_tip": "ཡིག་གཟུགས་སྦོམ་པོ།",
"italic_sample": "ཡིག་གཟུགས་གསེག་མ།",
@@ -484,7 +483,6 @@
"search-relatedarticle": "འབྲེལ་ཡོད།",
"searchrelated": "འབྲེལ་ཡོད།",
"searchall": "ཚང་མ།",
- "showingresultsheader": "{{PLURAL:$5|གྲུབ་འབྲས་ <strong>$1</strong> ཡི་<strong>$3</strong>གྲབ་འབྲས། <strong>$1 - $2</strong> ཡི་ <strong>$3</strong>}} ཆེད་དུ་ <strong>$4</strong>",
"search-nonefound": "ཁྱེད་ཀྱི་འདྲི་ཞིབ་དང་མཐུན་པའི་ལན་མི་འདུག་",
"powersearch-legend": "ཞིབ་ཏུ་འཚོལ་བ།",
"powersearch-ns": "མིང་གནས་ནང་འཚོལ་བ།",
@@ -649,7 +647,6 @@
"pager-older-n": "{{PLURAL:$1|རྙིང་པ་1|རྙིང་པ་$1}}",
"booksources": "དཔེ་ཆའི་ཁུངས།",
"booksources-search-legend": "དེབ་ཁུངས་འཚོལ་བ།",
- "booksources-go": "སོང་།",
"log": "པོད་ཁུག",
"allpages": "དྲ་ངོས་ཡོངས།",
"prevpage": "ཤོག་ངོས་གོང་མ་ ($1)",
@@ -667,7 +664,7 @@
"watchthispage": "དྲ་ངོས་འདི་ལ་གཟིགས།",
"unwatch": "མི་བལྟ་བ།",
"unwatchthispage": "བལྟ་བ་མཚམས་འཇོག",
- "wlshowlast": "འདས་བའི་དུས་ཚོད་ $1 ནང་ཚུན་ ཉིན་མ་ $2 ནང་ཚུན་ $3 སྟོན།",
+ "wlshowlast": "འདས་བའི་དུས་ཚོད་ $1 ནང་ཚུན་ ཉིན་མ་ $2 ནང་ཚུན་ སྟོན།",
"watchlist-options": "ལྟ་ཐོའི་འདེམས་ཚན།",
"watching": "ལྟ་ཐོར་འཇུག་བཞིན་པ་་་",
"unwatching": "ལྟ་ཐོ་ལས་འདོར་བཞིན་པ་་་",
@@ -806,7 +803,6 @@
"metadata": "རྒྱུ་གཞི་གྲངས།",
"metadata-help": "ཡིག་ཆ་འདིར་ཆ་འཕྲིན་གཞན་དག་པ་ཁ་ཅིག་འདུག། ཕལ་ཆེར་གྲངས་འཛིན་དཔར་ཆས་འམ་འབེབས་ཆས་ལས་གྲངས་འཛིན་ཡོང་ཆེད་བཟོས་པ་ཡིན། \nགལ་སྲིད་ཡིག་ཆ་འདིར་འགྱུར་བ་གཏོང་གནང་ན། དེ་སྔོན་གྱི་ལྟར་ཞིབས་ཚག་སྟོན་མི་ཐུབ།",
"metadata-fields": "དཔར་རིས་ཀྱི་ནང་དོན་འདིར་ཡོད་པ་རྣམས་ནང་དོན་ཞིབ་ཕྲའི་སྐབས་སྟོན་རྒྱུ་ཡིན། དེ་མིན་རྣམས་རང་འགུལ་གྱི་འབས་ཞོགས་རྒྱུ་ཡིན།\n* བཟོ་སྐྲུན།\n* དབྱབས་གཟུགས།",
- "watchlistall2": "ཚང་མ།",
"namespacesall": "ཡོངས་རྫོགས།",
"monthsall": "ཡོངས་རྫོགས།",
"imgmultigo": "སོང་།!",
@@ -816,5 +812,6 @@
"watchlisttools-raw": "ལྟ་ཐོའི་གོ་རིམ་བཅོས་སྒྲིག",
"specialpages": "ཆེད་ལས་ཤོག་ངོས།",
"tag-filter": "འདེམས་འཚག། [[Special:Tags|Tag]]",
- "rightsnone": "(སྟོང་པ།)"
+ "rightsnone": "(སྟོང་པ།)",
+ "revdelete-summary": "བསྡུས་དོན་བཟོ་བཅོས།"
}
diff --git a/languages/i18n/bpy.json b/languages/i18n/bpy.json
index 3da23778..f14b841f 100644
--- a/languages/i18n/bpy.json
+++ b/languages/i18n/bpy.json
@@ -385,12 +385,10 @@
"passwordreset-username": "আতাকুরার নাংহান:",
"passwordreset-domain": "ডমেইন:",
"changeemail": "ই-মেইল ঠিকানাহান সিলকর",
- "changeemail-header": "অ্যাকাউন্টর ই-মেইল ঠিকানাহান সিলকর",
"changeemail-text": "ইমেইল ঠিকানাহান সিরকরানি মনেইলে ফরম এহান পুরন কর। সিলপা এহান লেপকরতে তর খন্তাচাবিগ দেনা লাগতই।",
"changeemail-no-info": "পাতা এহানাত হমিতে গেলেগা তি যেসারেউ লগইন করানি লাগতই।",
"changeemail-none": "(নেই)",
"changeemail-submit": "ই-মেইল সিলকর",
- "changeemail-cancel": "বাতিল করেদে",
"bold_sample": "গাঢ়পা ৱাহি",
"bold_tip": "গাঢ়পা ৱাহি",
"italic_sample": "ইটালিক মেয়েক",
@@ -560,7 +558,6 @@
"mergehistory-same-destination": "উৎস বারো যিতইগা পাতা মান্না ইয়া নুৱারব",
"mergehistory-reason": "কারণ:",
"mergelog": "সুপকরানির লগ",
- "pagemerge-logentry": "[[$1]]-রে [[$2]]-র লগে তিলকরিসি ($3 পেয়া পতাসি অতান)",
"revertmerge": "মিলাপ নাকরি",
"mergelogpagetext": "তলে হাদি এহানর পাতার ইতিহাসর লগে আরাক পাতার ইতিহাস তিলকরিসি অতার লাতঙগ দেনা ইল।",
"history-title": "\"$1\"-র পতানির ইতিহাসহান",
@@ -600,7 +597,6 @@
"search-relatedarticle": "সাকেই আসে",
"searchrelated": "সাকেই আসে",
"searchall": "হাব্বি",
- "showingresultsheader": "'''$4''' র কা {{PLURAL:$5|ফলহান '''$3''' র '''$1'''|ফলহানি '''$3''' র মা '''$1 - $2'''}}",
"search-nonefound": "তি বিসারার অহানর লগে মান্নাপাতা নাপারাঙ।",
"powersearch-legend": "উন্নত বিসারানি",
"powersearch-ns": "নেমস্পেসর মা বিসারা:",
@@ -787,7 +783,6 @@
"statistics": "হিসাবহান",
"statistics-header-pages": "পাতার পরিসংখ্যান",
"statistics-header-edits": "পতানির পরিসংখ্যান",
- "statistics-header-views": "চাসিতার পরিসংখ্যান",
"statistics-header-users": "আতাকুরার পরিসংখ্যান",
"statistics-header-hooks": "আরআর পরিসংখ্যান",
"statistics-articles": "পাতার কন্টেনহানি",
@@ -835,7 +830,6 @@
"pager-older-n": "{{PLURAL:$1|আরাকউ পুরানা ১হান|আরাকউ পুরানা $1হান}}",
"booksources": "লেরিকর উৎসহান",
"booksources-search-legend": "লেরিকরর উৎসহান বিসারা",
- "booksources-go": "হাত",
"specialloguserlabel": "আতাকুরাগ:",
"speciallogtitlelabel": "চিঙনাঙ:",
"log": "লগ",
@@ -883,7 +877,7 @@
"unwatch": "তালাবি নেই",
"unwatchthispage": "তালাবি এরাদেনা",
"watchlist-details": "{{PLURAL:$1|$1 পাতা|$1 পাতাহানি}} তর তালাবিত আসে, য়্যারির পাতা ধরানি নাসে।",
- "wlshowlast": "গেলগা $1 ঘন্টা $2 দিনর $3 দেখাদে",
+ "wlshowlast": "গেলগা $1 ঘন্টা $2 দিনর দেখাদে",
"watchlist-options": "তালাবিত আসে পাতার পছনহানি",
"watching": "চা...",
"unwatching": "নাউচা...",
@@ -1120,7 +1114,6 @@
"metadata-collapse": "সালকরিসি পৌ ঝিপা",
"metadata-fields": "এরে পৌ এহান তিলসে ছবি মেটাপৌ অতা ছবির পাতাত দেখাদেনা ইতই, যেপাগা হেলপা উপাত্ত সারণি অতা জিপানি ইতই। হের ক্ষেত্রহানি স্বাভাবিক অবস্থাত জিপিয়া থাইতই।\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-gpsspeed-n": "গাথিগি",
- "watchlistall2": "হাব্বি",
"namespacesall": "হাব্বি",
"monthsall": "হাব্বি",
"confirmemail": "ই-মেইল ঠিকানাহান লেপকর",
@@ -1154,7 +1147,7 @@
"version-specialpages": "বিশেষ পাতাহানি",
"version-other": "হের",
"version-hooks": "কসিগি",
- "version-version": "(সংস্করণ $1)",
+ "version-version": "($1)",
"version-license": "লাইসেন্স",
"version-software": "ইনস্টলঅসে সফটওয়্যার",
"version-software-product": "পণ্য",
@@ -1193,6 +1186,7 @@
"revdelete-restricted": "ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি ফলা",
"revdelete-unrestricted": "ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি নেইকর",
"rightsnone": "(নেই)",
+ "revdelete-summary": "সারাংশ পতানি",
"searchsuggest-search": "বিসারা",
"searchsuggest-containing": "আসেতা..."
}
diff --git a/languages/i18n/bqi.json b/languages/i18n/bqi.json
index 02035152..8537087c 100644
--- a/languages/i18n/bqi.json
+++ b/languages/i18n/bqi.json
@@ -405,7 +405,7 @@
"watchthispage": "پیگیری ای صفحه",
"unwatch": "پيگري نبيڎه",
"watchlist-details": "{{PLURAL:$1|$1 صفحه|$1 صفحات}} درلیست پیگیری ایسا, صفحات صحبت حساب نیبوه.",
- "wlshowlast": "نمایش آخرین $1 ساعت $2 روز $3",
+ "wlshowlast": "نمایش آخرین $1 ساعت $2 روز",
"watching": "مئن حالت پي جوري",
"unwatching": "درحالت عدم پیگیری...",
"deletepage": "حذف صفحه",
@@ -551,7 +551,6 @@
"metadata-expand": "نشودادن جزئیات تفصیلی",
"metadata-collapse": "قایم کردن جزئیات تفصیلی",
"metadata-fields": "فراداده EXIF نشو داده وابیده در این پیام وقتی جدول فراداده‌های تصویر جمع وابیده بوه هم نمایش داده ابوه.\nبقیه موارد فقط وقتی نشوداده ابوه که جدول یادشده واز بوه.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "همه",
"namespacesall": "همه",
"monthsall": "همه ماهها",
"watchlisttools-view": "نشودادن تغییرات مربوطه",
diff --git a/languages/i18n/br.json b/languages/i18n/br.json
index c528646c..569dbef4 100644
--- a/languages/i18n/br.json
+++ b/languages/i18n/br.json
@@ -15,7 +15,8 @@
"Y-M D",
"לערי ריינהארט",
"아라",
- "Pymouss"
+ "Pymouss",
+ "Macofe"
]
},
"tog-underline": "Liammoù islinennet",
@@ -238,6 +239,7 @@
"disclaimers": "Kemennoù",
"disclaimerpage": "Project:Kemenn hollek",
"edithelp": "Skoazell",
+ "helppage-top-gethelp": "Skoazell",
"mainpage": "Degemer",
"mainpage-description": "Degemer",
"policy-url": "Project:Reolennoù",
@@ -397,6 +399,8 @@
"userlogin-resetlink": "Ha disoñjet eo bet ho titouroù kevreañ ganeoc'h ?",
"userlogin-resetpassword-link": "Ankouaet ho ker-tremen ganeoc'h ?",
"userlogin-helplink2": "Skoazell evit kevreañ",
+ "userlogin-loggedin": "Kevreet oc'h dija evel {{GENDER:$1|$1}}.\nImplijit ar furmskrid amañ dindan evit kevreañ evel un implijer all.",
+ "userlogin-createanother": "Krouiñ ur gont all",
"createacct-emailrequired": "Chomlec'h postel",
"createacct-emailoptional": "Chomlec'h postel (diret)",
"createacct-email-ph": "Skrivit ho chomlec'h postel",
@@ -484,6 +488,7 @@
"resetpass-submit-cancel": "Nullañ",
"resetpass-wrong-oldpass": "Direizh eo ar ger-tremen a-vremañ pe da c'hortoz.",
"resetpass-recycled": "Ret eo d'ho ker-tremen nevez bezañ disheñvel diouzh ho ker-tremen a vremañ.",
+ "resetpass-temp-emailed": "Kevreet e oac'h bet gant ur c'hod dibad kaset deoc'h dre bostel.\nEvit echuiñ kevreañ e rankit lakaat ur ger-tremen nevez amañ :",
"resetpass-temp-password": "Ger-tremen da c'hortoz :",
"resetpass-abort-generic": "Nullet eo bet kemm ar ger-tremen gant un astenn.",
"resetpass-expired": "Deuet eo ho ker-tremen d'e dermen. Lakait ur ger-tremen nevez, mar plij, evit kevreañ.",
@@ -506,7 +511,6 @@
"passwordreset-emailsent-capture": "Ur postel evit aderaouekaat ho ker-tremen, evel diskouezet amañ dindan, zo bet kaset.",
"passwordreset-emailerror-capture": "Kaset ez eus bet ur postel degas da soñj evel m'emañ diskouezet amañ dindan met c'hwitet eo bet ar gasadenn d'an {{GENDER:$2|implijer|implijerez}} : $1",
"changeemail": "Kemmañ ar chomlec'h postel",
- "changeemail-header": "Kemmañ chomlec'h postel ar gont",
"changeemail-text": "Leugnit ar furmskrid-mañ da cheñch ho chomlec'h postel. Ret e vo deoc'h merkañ ho ker-tremen evit kadarnaat ar c'hemm-se.",
"changeemail-no-info": "Ret eo deoc'h bezañ kevreet a-benn mont d'ar bajenn-se war-eeun.",
"changeemail-oldemail": "Chomlec'h postel a-vremañ :",
@@ -514,7 +518,6 @@
"changeemail-none": "(hini ebet)",
"changeemail-password": "Ho ker-tremen war {{SITENAME}}:",
"changeemail-submit": "Cheñch chomlec'h postel",
- "changeemail-cancel": "Nullañ",
"changeemail-throttled": "Betek re hoc'h heus klasket kevreañ en aner.\nGortozit $1, mar plij, a-raok esaeañ en-dro.",
"resettokens": "Adderaouekaat ar jedoueroù",
"resettokens-no-tokens": "N'eus jedouer ebet da adderaouekaat.",
@@ -549,7 +552,7 @@
"preview": "Rakwelet",
"showpreview": "Rakwelet",
"showdiff": "Diskouez ar c'hemmoù",
- "anoneditwarning": "'''Diwallit :''' N'oc'h ket kevreet. \nHo chomlec'h IP eo a vo enrollet war istor kemmoù ar bajenn-mañ.",
+ "anoneditwarning": "</strong>Diwallit :</strong> N'oc'h ket kevreet.\nGallout a raio an holl dud gwelet ho chomlec'h IP ma rit kemmoù. Ma <strong>[$1kevreit]</strong>pe<strong>[$2 krouit ur gont]</strong>, e vo deroet ho kemmoù d'hoc'h anv-implijer, e-touez spletoù all.",
"anonpreviewwarning": "''N'oc'h ket kevreet. Enrollañ a lakao war-wel ho chomlec'h IP e istor kemmoù ar bajenn.''",
"missingsummary": "'''Taolit evezh:''' N'hoc'h eus ket lakaet tamm testenn diverrañ ebet evit ho kemmoù. Mar klikit war enrollañ en-dro, e vo enrollet ho testenn evel m'emañ hepmuiken.",
"missingcommenttext": "Skrivit hoc'h evezhiadenn a-is.",
@@ -649,6 +652,7 @@
"content-model-text": "testenn blaen",
"content-model-javascript": "Javascript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Elfenn goullo",
"expensive-parserfunction-warning": "Diwallit : Re a c'halvoù koustus e-keñver an arc'hwelioù parser zo gant ar bajenn-mañ.\n\nDleout a rafe bezañ nebeutoc'h eget $2 {{PLURAL:$2|galv|galv}}, ha {{PLURAL:$1|$1 galv|$1 galv}} zo.",
"expensive-parserfunction-category": "Pagjennoù enno re a c'halvoù koustus e-keñver an arc'hwelioù parser.",
"post-expand-template-inclusion-warning": "Diwallit : re a batromoù zo war ar bajenn-mañ.\nLod anezho a vo lakaet a-gostez.",
@@ -662,6 +666,7 @@
"node-count-exceeded-category-desc": "Mont a ra ar bajenn-mañ en tu all da gont uhelañ ar skoulmoù.",
"node-count-exceeded-warning": "Pajenn hag a ya en tu all d'an niver a skoulmoù",
"expansion-depth-exceeded-category": "Pajennoù m'eur aet dreist d'an donder astenn",
+ "expansion-depth-exceeded-category-desc": "En tu all d'an donder astenn brasañ emañ ar bajenn.",
"expansion-depth-exceeded-warning": "Pajenn a ya dreist d'an donder astenn",
"parser-unstrip-loop-warning": "Detektet ez eus bet ul lagadenn n'haller ket divontañ",
"parser-unstrip-recursion-limit": "Aet dreist d'ar vevenn rekurziñ n'haller ket divontañ : $1",
@@ -723,6 +728,9 @@
"revdelete-show-file-confirm": "Ha sur oc'h e fell deoc'h gwelet stumm diverket ar restr \"<nowiki>$1</nowiki>\" deiziataet eus an $2 da $3?",
"revdelete-show-file-submit": "Ya",
"logdelete-selected": "{{PLURAL:$1|Darvoud eus ar marilh diuzet}} :",
+ "revdelete-text-file": "Dalc'het e vo da welet stummoù restroù dilamet en istor ar restr, nemet ne c'hallo ket an dud mont da welet un darn anezho.",
+ "logdelete-text": "Gwelet e vo c'hoazh dilamadennoù er marilhoù, nemet ne c'hallo ket an dud mont da welet un darn anezho.",
+ "revdelete-text-others": "Ar verourien a c'hallo c'hoazh mont da welet petra zo e-barzh, hag eilpennañ an dilamadenn, nemet ha reolennoù strishoc'h ouzhpenn a vefe.",
"revdelete-confirm": "Kadarnait eo mat an dra-se a fell deoc'h ober, e komprenit mat ar pezh a empleg, hag en grit en ur zoujañ d'ar [[{{MediaWiki:Policy-url}}|reolennoù]].",
"revdelete-suppress-text": "Ne zlefe an dilemel bezañ implijet <strong>nemet</strong> abalamour d'an abegoù da-heul :\n* Titouroù personel dizere\n*: <em>chomlec'hioù, niverennoù pellgomz pe surentez sokial personel, hag all.</em>",
"revdelete-legend": "Lakaat strishadurioù gwelet",
@@ -772,6 +780,7 @@
"mergehistory-empty": "N'haller ket kendeuziñ stumm ebet.",
"mergehistory-success": "Kendeuzet ez eus bet $3 {{PLURAL:$3|stumm|stumm}} eus [[:$1]] e [[:$2]].",
"mergehistory-fail": "Dibosupl kendeuziñ an istorioù. Gwiriit ar bajenn hag arventennoù an deiziadoù.",
+ "mergehistory-fail-toobig": "Ne c'haller ket kendeuziñ an istorioù o vezañ ma vefe mont en tu all d'ar harzh a $1 reizhadenn da zilec'hiañ.",
"mergehistory-no-source": "N'eus ket eus ar bajenn orin $1.",
"mergehistory-no-destination": "N'eus ket eus ar bajenn dal $1.",
"mergehistory-invalid-source": "Ret eo da anv ar bajenn orin bezañ reizh.",
@@ -781,7 +790,6 @@
"mergehistory-same-destination": "N'hall ket ar pajennoù kein hag ar pajennoù tal bezañ an hevelep re",
"mergehistory-reason": "Abeg :",
"mergelog": "Marilh ar c'hendeuzadennoù",
- "pagemerge-logentry": "kendeuzet [[$1]] gant [[$2]] (stummoù betek an $3)",
"revertmerge": "Nullañ ar c'hendeuziñ",
"mergelogpagetext": "Setu aze roll kendeuzadennoù diwezhañ un eil pajenn istor gant eben.",
"history-title": "Istor stummoù disheñvel \"$1\"",
@@ -822,6 +830,7 @@
"search-result-category-size": "{{PLURAL:$1|1|$1}} ezel ({{PLURAL:$2|1|$2}} is-rummad, {{PLURAL:$3|1|$3}} restr)",
"search-redirect": "(adkas $1)",
"search-section": "(rann $1)",
+ "search-category": "(rummad $1)",
"search-file-match": "(klotañ a ra gant endalc'had ar restr)",
"search-suggest": "N'hoc'h eus ket soñjet kentoc'h e : $1",
"search-interwiki-caption": "Raktresoù kar",
@@ -831,6 +840,8 @@
"searchrelated": "disoc'hoù kar",
"searchall": "An holl",
"showingresults": "Diskouez betek {{PLURAL:$1|'''1''' disoc'h|'''$1''' disoc'h}} o kregiñ gant #'''$2'''.",
+ "showingresultsinrange": "O tiskouez amañ dindan betek {{PLURAL:$1|<strong>1</strong> disoc'h|<strong>$1</strong> a zisoc'hoù}} etre #<strong>$2</strong> ha #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Disoc'h <strong>$1</strong> of <strong>$3</strong>|a zisoc'hoù <strong>$1 - $2</strong> diwar <strong>$3</strong>}}",
"search-nonefound": "An enklask-mañ ne zisoc'h war netra.",
"powersearch-legend": "Klask araokaet",
"powersearch-ns": "Klask en esaouennoù anv :",
@@ -853,6 +864,9 @@
"prefs-personal": "Titouroù personel",
"prefs-rc": "Kemmoù diwezhañ",
"prefs-watchlist": "Roll evezhiañ",
+ "prefs-editwatchlist": "Kemmañ ar roll evezhiañ",
+ "prefs-editwatchlist-raw": "Kemmañ ar roll evezhiañ (mod diginkl)",
+ "prefs-editwatchlist-clear": "Diverkañ ho roll evezhiañ",
"prefs-watchlist-days": "Niver a zevezhioù da ziskouez er rollad evezhiañ :",
"prefs-watchlist-days-max": "D'ar muiañ $1 {{PLURAL:$1|deiz|deiz}}",
"prefs-watchlist-edits": "Niver a gemmoù da ziskouez er roll evezhiañ astennet :",
@@ -876,6 +890,7 @@
"recentchangesdays-max": "D'ar muiañ $1 {{PLURAL:$1|deiz|deiz}}",
"recentchangescount": "Niver a gemmoù da ziskouez dre ziouer",
"prefs-help-recentchangescount": "Kemer a ra an dra-mañ e kont ar c'hemmoù diwezhañ, istor ar pajennoù hag ar marilhoù.",
+ "prefs-help-watchlist-token2": "Homañ zo an alc'hwez kuzh d'ho roll-evezhiañ davit boued war ar web. Forzh piv a anavez anezhañ a c'hall lenn ho roll-evezhiañ, setu na lavarit grit diwar e benn. M'ho pez ezhomm, e c'hallit [[Special:ResetTokens|assevel anezhañ]].",
"savedprefs": "Enrollet eo bet ar penndibaboù.",
"timezonelegend": "Takad eur :",
"localtime": "Eur lec'hel :",
@@ -962,6 +977,7 @@
"userrights-notallowed": "N'oc'h ket aotreet da ouzhpennañ na da lemel gwirioù an implijerien.",
"userrights-changeable-col": "Ar strolladoù a c'hallit cheñch",
"userrights-unchangeable-col": "Ar strolladoù n'hallit ket cheñch",
+ "userrights-conflict": "Bec'h zo abalamour da gemmoù e gwirioù an implijerien. Adwelit an traoù, mar plij, ha kadarnait ho kemmoù.",
"userrights-removed-self": "Lamet ho peus ho kwirioù deoc'h-c'hwi. Dre se ne c'hallit ket ken mont d'ar bajenn-mañ.",
"group": "Strollad :",
"group-user": "Implijerien",
@@ -992,6 +1008,7 @@
"right-move": "Adenvel pajennoù",
"right-move-subpages": "Dilec'hiañ ar pajennoù gant o ispajennoù",
"right-move-rootuserpages": "Adenvel pajennoù diazez an implijer",
+ "right-move-categorypages": "Dilec'hiañ pajennoù rummad",
"right-movefile": "Dilec'hiañ ar restroù",
"right-suppressredirect": "Chom hep sevel un adkas adalek ar bajenn gozh en ur adenvel ar bajenn",
"right-upload": "Enporzhiañ restroù",
@@ -1064,6 +1081,7 @@
"action-move": "dilec'hiañ ar bajenn-mañ",
"action-move-subpages": "dilec'hiañ ar bajenn-mañ hag an ispajennoù anezhi",
"action-move-rootuserpages": "dilec'hiañ pajennoù an implijer diazez.",
+ "action-move-categorypages": "dilec'hiañ pajennoù rummad",
"action-movefile": "Adenvel ar restr-mañ",
"action-upload": "enporzhiañ ar restr-mañ",
"action-reupload": "frikañ ar restr-mañ",
@@ -1318,11 +1336,11 @@
"upload-curl-error28": "Aet dreist d'an termen",
"upload-curl-error28-text": "Re bell eo bet al lec'hienn o respont. Gwiriit mat emañ al lec'hienn enlinenn, gortozit ur pennadig ha klaskit en-dro. Mat e vo deoc'h adklask d'ur mare dibresoc'h marteze ivez.",
"license": "Aotre-implijout :",
- "license-header": "Aotre implijout",
+ "license-header": "Aotre-implijout",
"nolicense": "Hini ebet diuzet",
"licenses-edit": "Aozañ dibarzhioù an aotre-implijout",
"license-nopreview": "(Dibosupl rakwelet)",
- "upload_source_url": " (Un URL reizh a c'hall bezañ tizhet gant an holl)",
+ "upload_source_url": " (ar restr ho peus dibabet diwar un URL reizh hag a c'hall bezañ tizhet gant an holl)",
"upload_source_file": " (ar restr ho peus dibabet en hoc'h urzhiataer)",
"listfiles-delete": "dilemel",
"listfiles-summary": "Diskouez a ra ar bajenn dibar-mañ an holl restroù bet ezporzhiet.",
@@ -1419,7 +1437,6 @@
"statistics": "Stadegoù",
"statistics-header-pages": "Stadegoù ar pajennoù",
"statistics-header-edits": "Stadegoù ar c'hemmoù",
- "statistics-header-views": "Stadegoù ar selladennoù",
"statistics-header-users": "Stadegoù implijer",
"statistics-header-hooks": "Stadegoù all",
"statistics-articles": "Pajennoù endalc'had",
@@ -1428,13 +1445,9 @@
"statistics-files": "Restroù enporzhiet",
"statistics-edits": "Kemmoù war ar pajennoù abaoe krouidigezh {{SITENAME}}",
"statistics-edits-average": "Keidenn ar c'hemmoù dre bajenn",
- "statistics-views-total": "Hollad ar selladennoù",
- "statistics-views-total-desc": "N'haller ket mont war ar pajennoù n'eus ket anezho pe war ar pajennoù dibar.",
- "statistics-views-peredit": "Keidenn gweladenniñ dre gemmoù",
"statistics-users": "[[Special:ListUsers|Implijerien]] enrollet",
"statistics-users-active": "Implijerien oberiant",
"statistics-users-active-desc": "Implijerien o deus degaset da nebeutañ ur c'hemm {{PLURAL:$1|an deiz paseet|e-kerzh an $1 deiz diwezhañ}}",
- "statistics-mostpopular": "Pajennoù muiañ sellet",
"pageswithprop": "Pajennoù gant ur perzh pajenn",
"pageswithprop-legend": "Pajennoù gant ur perzh pajenn",
"pageswithprop-prop": "Anv ar perzh :",
@@ -1442,7 +1455,7 @@
"pageswithprop-prophidden-long": "talvoud perzh testenn hir kuzhet ($1)",
"doubleredirects": "Adkasoù doubl",
"doubleredirectstext": "Rollañ a ra ar bajenn-mañ ar pajennoù a adkas da bajennoù adkas all.\nWar bep linenn ez eus liammoù war-du pajennoù an adkas kentañ hag en eil adkas, hag ivez war-du pajenn-dal an eil adkas zo sañset bezañ ar pal \"gwirion\" a zlefe an adkas kentañ kas di.\nDiskoulmet eo bet an enmontoù <del>barrennet</del>.",
- "double-redirect-fixed-move": "Adanvet eo bet [[$1]], adkaset eo war-du [[$2]] bremañ",
+ "double-redirect-fixed-move": "Dilec'hiet eo [[$1]].\nHizivaet eo bet ent emgefre ha bremañ ez adkas da [[$2]].",
"double-redirect-fixed-maintenance": "O reizhañ ent emgefre an adkas doubl adalek [[$1]] war-zu [[$2]] en un trevell trezalc'h.",
"double-redirect-fixer": "Reizher adkasoù",
"brokenredirects": "Adkasoù torret",
@@ -1473,7 +1486,6 @@
"uncategorizedtemplates": "Patromoù hep rummad",
"unusedcategories": "Rummadoù dizimplij",
"unusedimages": "Skeudennoù en o-unan",
- "popularpages": "Pajennoù sellet ar muiañ",
"wantedcategories": "Rummadoù goulennet a vank",
"wantedpages": "Pajennoù goulennet ar muiañ",
"wantedpages-badtitle": "Titl direizh er strollad disoc'hoù : $1",
@@ -1533,10 +1545,11 @@
"pager-older-n": "{{PLURAL:$1|1 koshoc'h|$1 koshoc'h}}",
"suppress": "Dindan evezh",
"querypage-disabled": "Diweredekaet eo bet ar bajenn dibar-mañ evit aesaat d'ar reizhiad un tammig.",
+ "apihelp-no-such-module": "N'eo ket bet kavet ar vodulenn \"$1\".",
"booksources": "Oberennoù dave",
"booksources-search-legend": "Klask en oberennoù dave",
"booksources-isbn": "ISBN :",
- "booksources-go": "Kadarnaat",
+ "booksources-search": "Klask",
"booksources-text": "Ur roll liammoù a gas da lec'hiennoù all ma werzher levrioù kozh ha nevez a gavot a-is; marteze e kavot eno titouroù pelloc'h war al levrioù a glaskit :",
"booksources-invalid-isbn": "Evit doare n'eo ket reizh an ISBN merket; gwiriit ha n'oc'h ket faziet en ur eilañ adal ar vammenn orin.",
"specialloguserlabel": "Implijer :",
@@ -1663,7 +1676,7 @@
"wlheader-enotif": "Gweredekaet eo ar c'has posteloù.",
"wlheader-showupdated": "E '''tev''' emañ merket ar pajennoù bet kemmet abaoe ar wezh ziwezhañ hoc'h eus sellet outo",
"wlnote": "Setu aze {{PLURAL:$1|ar c'hemm diwezhañ|ar '''$1''' kemm diwezhañ}} c'hoarvezet e-kerzh an {{PLURAL:$2|eurvezh|'''$2''' eurvezh}} diwezhañ, d'an $3 da $4.",
- "wlshowlast": "Diskouez an $1 eurvezh $2 devezh diwezhañ $3",
+ "wlshowlast": "Diskouez an $1 eurvezh $2 devezh diwezhañ",
"watchlist-options": "Dibarzhioù ar roll evezhiañ",
"watching": "Heuliet...",
"unwatching": "Paouez da evezhiañ...",
@@ -1711,7 +1724,6 @@
"delete-warning-toobig": "Bras eo istor ar bajenn-mañ, ouzhpenn {{PLURAL:$1|stumm|stumm}} zo.\nDiverkañ anezhi a c'hallo degas reuz war mont en-dro diaz titouroù {{SITENAME}};\ntaolit evezh bras.",
"deleteprotected": "Ne c'hallit ket dilemel ar bajenn-mañ rak gwarezet eo bet.",
"rollback": "disteuler ar c'hemmoù",
- "rollback_short": "Disteuler",
"rollbacklink": "disteuler",
"rollbacklinkcount": "disteurel $1 {{PLURAL:$1|kemm}}",
"rollbacklinkcount-morethan": "disteurel ouzhpenn $1 {{PLURAL:$1|kemm}}",
@@ -1905,6 +1917,7 @@
"unblocked": "Distanket eo bet [[User:$1|$1]]",
"unblocked-range": "Distanket eo bet $1",
"unblocked-id": "Distanket eo bet $1",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] zo bet distanket.",
"blocklist": "Implijerien stanket",
"ipblocklist": "Implijerien stanket",
"ipblocklist-legend": "Kavout un implijer stanket",
@@ -2128,18 +2141,14 @@
"import-rootpage-nosubpage": "Esaouenn anvioù \"$1\" eus ar bennpajenn ne aotre ket an ispajennoù.",
"importlogpage": "Log an enporzhiadennoù",
"importlogpagetext": "Enporzhiadennoù melestradurel eus pajennoù adal wikioù all gant istor ar c'hemmadennoù degaset enno.",
- "import-logentry-upload": "en/he deus enporzhiet (pellgarget) [[$1]]",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet",
- "import-logentry-interwiki": "treuzwikiet $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet eus $2",
"javascripttest": "Amprouadenn JavaScript",
- "javascripttest-title": "Emeur o seveniñ $1 amprouadenn",
"javascripttest-pagetext-noframework": "Miret eo ar bajenn-mañ evit amprouiñ JavaScript.",
"javascripttest-pagetext-unknownframework": "Framm amprouiñ \"$1\" dianav.",
"javascripttest-pagetext-frameworks": "Diuzit unan eus ar frammoù amprouiñ da-heul : $1",
"javascripttest-pagetext-skins": "Diuzit ar gwiskadur da vezañ implijet evit an amprouadennoù :",
"javascripttest-qunit-intro": "Sellet ouzh [$1 an teulioù amprouiñ] e mediawiki.org.",
- "javascripttest-qunit-heading": "Heuliad amprouadennoù QUnit eus JavaScript war MediaWiki",
"tooltip-pt-userpage": "Ho pajenn implijer",
"tooltip-pt-anonuserpage": "Ar bajenn implijer evit ar c'homlec'h IP implijet ganeoc'h",
"tooltip-pt-mytalk": "Ho pajenn gaozeal",
@@ -2149,6 +2158,7 @@
"tooltip-pt-mycontris": "Roll ho tegasadennoù",
"tooltip-pt-login": "Daoust ma n'eo ket ret, ec'h aliomp deoc'h kevreañ",
"tooltip-pt-logout": "Digevreañ",
+ "tooltip-pt-createaccount": "Erbedet eo deoc'h krouiñ ur gont ha kevreañ ; n'eo ket ret koulskoude.",
"tooltip-ca-talk": "Kaozeadennoù diwar-benn ar pennad",
"tooltip-ca-edit": "Gallout a rit kemmañ ar bajenn-mañ. Implijit ar stokell Rakwelet a-raok enrollañ, mar plij.",
"tooltip-ca-addsection": "Kregiñ gant ur rann nevez.",
@@ -2247,7 +2257,6 @@
"pageinfo-robot-policy": "Menegeriñ gant robotoù",
"pageinfo-robot-index": "Aotreet",
"pageinfo-robot-noindex": "Diaotreet",
- "pageinfo-views": "Niver a weladennoù",
"pageinfo-watchers": "Niver a dud o heuliañ",
"pageinfo-few-watchers": "Nebeutoc'h eget $1 {{PLURAL:$1|lenner}}",
"pageinfo-redirects-name": "Niver a adkasoù war-zu ar bajenn-mañ",
@@ -2692,7 +2701,6 @@
"exif-urgency-low": "Izel ($1)",
"exif-urgency-high": "Uhel ($1)",
"exif-urgency-other": "Priorelezh termenet gant an aozer ($1)",
- "watchlistall2": "pep tra",
"namespacesall": "pep tra",
"monthsall": "an holl",
"confirmemail": "Kadarnaat ar chomlec'h postel",
@@ -2794,7 +2802,6 @@
"iranian-calendar-m11": "11vet miz Jalāli",
"iranian-calendar-m12": "12vet miz Jalāli",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|kaozeal]])",
- "unknown_extension_tag": "Balizenn astenn \"$1\" dianav",
"duplicate-defaultsort": "Diwallit : Frikañ a ra an alc'hwez dre ziouer \"$2\" an hini a oa a-raok \"$1\".",
"version": "Stumm",
"version-extensions": "Astennoù staliet",
@@ -2866,6 +2873,7 @@
"specialpages-group-wiki": "Roadennoù ar wiki hag ostilhoù",
"specialpages-group-redirects": "Adkas ar pajennoù dibar",
"specialpages-group-spam": "Ostilh enepstrob",
+ "specialpages-group-developer": "Ostilhoù diorren",
"blankpage": "Pajenn c'houllo",
"intentionallyblankpage": "A-ratozh e leusker gwenn ar bajenn-mañ",
"external_image_whitelist": " #Lezel al linenn-mañ tre evel m'emañ<pre>\n#Merkañ an tammoù bommoù reoliek (ar rann zo etre ar // nemetken) a-is\n#Klotañ a raint gant URLoù ar skeudennoù diavaez (gourliammet)\n#En em ziskwel evel skeudennoù a raio ar re a glot, evit ar re all e vo diskwelet ul liamm war-du ar skeudenn nemetken\n#Sellet e vo ouzh a linennoù a grog gant # evel ouzh notennoù\n#Kizidik eo ar roll-mañ ouzh an diforc'h etre lizherennoù bihan ha lizherennoù bras\n\n#Merkit holl rannoù ar bommoù reoliek a-us d'al linenn-mañ. Lezit al linenn ziwezhañ-mañ tre evel m'emañ</pre>",
@@ -2953,19 +2961,20 @@
"logentry-upload-overwrite": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet ur stumm nevez eus $3",
"logentry-upload-revert": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet $3",
"rightsnone": "(netra)",
+ "revdelete-summary": "diverradenn eus ar c'hemmoù",
+ "feedback-adding": "Oc'h ouzhpennañ ho soñj war ar bajenn...",
+ "feedback-bugcheck": "Eus ar c'hentañ ! Gwiriit mat n'emañ ket e-touez an [$1 draen diskoachet c'hoazh].",
+ "feedback-bugnew": "Gwiriet em eus. Kemenn un draen nevez",
"feedback-bugornote": "Ma'z oc'h prest da zeskrivañ ur gudenn deknikel dre ar munud e c'hallit [$1 kemenn un draen].\nA-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc'h evezhiadenn d'ar bajenn \"[$3 $2]\", a-gevret gant hoc'h anv implijer hag anv ar merdeer a rit gantañ.",
- "feedback-subject": "Danvez :",
- "feedback-message": "Kemennadenn :",
"feedback-cancel": "Nullañ",
- "feedback-submit": "Kas ho soñj",
- "feedback-adding": "Oc'h ouzhpennañ ho soñj war ar bajenn...",
+ "feedback-close": "Graet",
"feedback-error1": "Fazi : disoc'h dianav a-berzh an API",
"feedback-error2": "Fazi : N'eus ket bet gallet degemer ar c'hemmoù",
"feedback-error3": "Fazi : respont ebet a-berzh an API",
+ "feedback-message": "Kemennadenn :",
+ "feedback-subject": "Danvez :",
+ "feedback-submit": "Kas",
"feedback-thanks": "Ho trugarekaat ! Postet eo bet hoc'h evezhiadenn d'ar bajenn \"[$2 $1]\".",
- "feedback-close": "Graet",
- "feedback-bugcheck": "Eus ar c'hentañ ! Gwiriit mat n'emañ ket e-touez an [$1 draen diskoachet c'hoazh].",
- "feedback-bugnew": "Gwiriet em eus. Kemenn un draen nevez",
"searchsuggest-search": "Klask",
"searchsuggest-containing": "ennañ...",
"api-error-badaccess-groups": "N'oc'h ket aotreet da enporzhiañ restroù war ar wiki-mañ.",
@@ -3054,5 +3063,44 @@
"log-description-pagelang": "Hemañ zo ur marilh eus ar c'hemmoù e pajenn ar yezhoù.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|en deus|he deus}} cheñchet yezh ar bajenn evit $3 eus $4 da $5.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gweredekaet)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''diweredekaet''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''diweredekaet''')",
+ "mediastatistics": "Stadegoù ar media",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 okted|$1 a oktedoù}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Seurt MIME",
+ "mediastatistics-table-extensions": "Astennoù hag a c'haller lakaat",
+ "mediastatistics-table-count": "Niver a restroù",
+ "mediastatistics-table-totalbytes": "Ment kenstrollet",
+ "mediastatistics-header-unknown": "Dianav",
+ "mediastatistics-header-bitmap": "Skeudennom bitmap",
+ "mediastatistics-header-drawing": "Tresadennoù (skeudennoù vektorel)",
+ "mediastatistics-header-audio": "Kleved",
+ "mediastatistics-header-video": "Videoioù",
+ "mediastatistics-header-office": "Burev",
+ "mediastatistics-header-text": "Testenn",
+ "mediastatistics-header-archive": "Furmadoù gwasket",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgulenn|a virgulennoù}} dibenn zo bet lamet eus JSON",
+ "json-error-unknown": "Ur gudenn a oa gant ar JSON. Fazi : $1",
+ "json-error-depth": "Aet eur en tu all da zonder brasañ an torn",
+ "json-error-state-mismatch": "JSON direizh pe stummet fall",
+ "json-error-syntax": "Fazi ereadur",
+ "json-error-utf8": "Arouezennoù UTF-8 stummet fall, enkodet en un doare direizh marteze",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Latin astennet",
+ "special-characters-group-ipa": "LFE (IPA)",
+ "special-characters-group-symbols": "Arouezennoù",
+ "special-characters-group-greek": "Gresianek",
+ "special-characters-group-cyrillic": "Kirillek",
+ "special-characters-group-arabic": "Arabeg",
+ "special-characters-group-arabicextended": "Arabeg astennet",
+ "special-characters-group-persian": "Perseg",
+ "special-characters-group-hebrew": "Hebraek",
+ "special-characters-group-bangla": "Banglaek",
+ "special-characters-group-tamil": "Tamileg",
+ "special-characters-group-telugu": "Telougou",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Laoseg",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/brh.json b/languages/i18n/brh.json
index d7ada3ac..bac1f155 100644
--- a/languages/i18n/brh.json
+++ b/languages/i18n/brh.json
@@ -308,7 +308,6 @@
"pager-older-n": "{{PLURAL:$1|mutkuná 1|mutkuná $1}}",
"booksources": "Kitábí bumpad",
"booksources-search-legend": "Kitábí bumpad átekin paŧŧpol",
- "booksources-go": "Ráím",
"log": "Lekav",
"allpages": "Ģuŧŧ panna ģák",
"prevpage": "Mustko panna ($1)",
@@ -327,7 +326,7 @@
"watchthispage": "Dá panna ná xiálí mar",
"unwatch": "Bexiál mar",
"watchlist-details": "Ná xiálí rid aŧí {{PLURAL:$1|$1 panna se|$1 panna o}}, ítgap panna ģák hisáb aŧí affas.",
- "wlshowlast": "Guđđíko $1 ganŧa $2 de $3 e nişán et",
+ "wlshowlast": "Guđđíko $1 ganŧa $2 de e nişán et",
"watchlist-options": "Xiálírid gicenk",
"watching": "Xiálí manning...",
"unwatching": "Bexiál manning...",
@@ -461,7 +460,6 @@
"nextdiff": "Púskuná radbadal",
"metadata-expand": "Vaddíko hál e nişán et",
"metadata-collapse": "Vaddíko hál e đakka",
- "watchlistall2": "ģuŧŧ",
"namespacesall": "ģuŧŧ",
"monthsall": "ģuŧŧ",
"watchlisttools-view": "Đek kunoká radbadal áke ur",
diff --git a/languages/i18n/bs.json b/languages/i18n/bs.json
index d7857c3b..086f06a5 100644
--- a/languages/i18n/bs.json
+++ b/languages/i18n/bs.json
@@ -18,7 +18,8 @@
"Smooth O",
"לערי ריינהארט",
"아라",
- "Milicevic01"
+ "Milicevic01",
+ "Macofe"
]
},
"tog-underline": "Podvuci veze:",
@@ -35,6 +36,7 @@
"tog-watchdefault": "Dodaj stranice i datoteke koje uređujem na moj spisak praćenih članaka",
"tog-watchmoves": "Dodaj stranice i datoteke koje pomjerim na moj spisak praćenih članaka",
"tog-watchdeletion": "Dodaj stranice i datoteke koje izbrišem na moj spisak praćenih članaka",
+ "tog-watchrollback": "Sve stranice za koje sam izvršio povrat izmjena stavi na spisak praćenja",
"tog-minordefault": "Označi sve izmjene malim isprva",
"tog-previewontop": "Prikaži pretpregled prije polja za izmjenu a ne poslije",
"tog-previewonfirst": "Prikaži izgled pri prvoj izmjeni",
@@ -45,7 +47,7 @@
"tog-shownumberswatching": "Prikaži broj korisnika koji prate",
"tog-oldsig": "Postojeći potpis:",
"tog-fancysig": "Smatraj potpis kao wikitekst (bez automatskog linka)",
- "tog-uselivepreview": "Koristite pregled uživo (eksperimentalno)",
+ "tog-uselivepreview": "Koristite pregled uživo",
"tog-forceeditsummary": "Opomeni me pri unosu praznog sažetka",
"tog-watchlisthideown": "Sakrij moje izmjene sa spiska praćenih članaka",
"tog-watchlisthidebots": "Sakrij izmjene botova sa spiska praćenih članaka",
@@ -131,11 +133,11 @@
"december-date": "$1. decembar",
"pagecategories": "{{PLURAL:$1|Kategorija|Kategorije}}",
"category_header": "Članci u kategoriji \"$1\"",
- "subcategories": "Potkategorije",
+ "subcategories": "Podkategorije",
"category-media-header": "Datoteke u kategoriji \"$1\"",
"category-empty": "''Ova kategorija trenutno ne sadrži članke ni medije.''",
"hidden-categories": "{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}}",
- "hidden-category-category": "Sakrivene kategorije",
+ "hidden-category-category": "Skrivene kategorije",
"category-subcat-count": "{{PLURAL:$2|Ova kategorija ima sljedeću podkategoriju.|Ova kategorija ima {{PLURAL:$1|sljedeću podkategoriju|sljedeće $1 podkategorije|sljedećih $1 podkategorija}}, od $2 ukupno.}}",
"category-subcat-count-limited": "Ova kategorija sadrži {{PLURAL:$1|slijedeću $1 podkategoriju|slijedeće $1 podkategorije|slijedećih $1 podkategorija}}.",
"category-article-count": "{{PLURAL:$2|U ovoj kategoriji nalazi se $1 članak.|{{PLURAL:$1|Prikazan je $1 članak|Prikazana su $1 članka|Prikazano je $1 članaka}} od ukupno $2 u ovoj kategoriji.}}",
@@ -220,6 +222,7 @@
"otherlanguages": "Na drugim jezicima",
"redirectedfrom": "(Preusmjereno sa $1)",
"redirectpagesub": "Preusmjeri stranicu",
+ "redirectto": "Preusmjerenje na:",
"lastmodifiedat": "Ova stranica je posljednji put izmijenjena $2, $1",
"viewcount": "Ovoj stranici je pristupljeno {{PLURAL:$1|$1 put|$1 puta}}.",
"protectedpage": "Zaštićena stranica",
@@ -231,6 +234,8 @@
"pool-timeout": "Zaustavi čekanje na zaključavanje",
"pool-queuefull": "Red na pool je prenapunjen",
"pool-errorunknown": "Nepoznata greška",
+ "pool-servererror": "Usluga brojača poola nije dostupna ($1).",
+ "poolcounter-usage-error": "Greška pri upotrebi: $1",
"aboutsite": "O {{GRAMMAR:dativ|{{SITENAME}}}}",
"aboutpage": "Project:O_projektu_{{SITENAME}}",
"copyright": "Sadržaj je dostupan pod licencom $1 osim ako je navedeno drugačije.",
@@ -322,6 +327,8 @@
"filerenameerror": "Ne može se promjeniti ime datoteke \"$1\" u \"$2\".",
"filedeleteerror": "Ne može se izbrisati datoteka \"$1\".",
"directorycreateerror": "Nije moguće napraviti direktorijum \"$1\".",
+ "directoryreadonlyerror": "Direktorij \"$1\" je samo za čitanje.",
+ "directorynotreadableerror": "Direktorij \"$1\" nije čitljiv.",
"filenotfound": "Ne može se naći datoteka \"$1\".",
"unexpected": "Neočekivana vrijednost: \"$1\"=\"$2\".",
"formerror": "Greška: ne može se poslati upitnik",
@@ -329,6 +336,7 @@
"cannotdelete": "Ne može se obrisati stranica ili datoteka \"$1\".\nMoguće je da ju je neko već obrisao.",
"cannotdelete-title": "Ne mogu izbrisati stranicu \"$1\"",
"delete-hook-aborted": "Brisanje je prekinuo softverski priključak.\nNije ponuđeno nikakvo objašnjenje.",
+ "no-null-revision": "Ne mogu napraviti novu ništavnu reviziju za stranicu \"$1\"",
"badtitle": "Loš naslov",
"badtitletext": "Zahtjevani naslov stranice je bio neispravan, prazan ili neispravno povezan međujezički ili interviki naslov.",
"perfcached": "Slijedeći podaci su keširani i možda neće biti u potpunosti ažurirani. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata}}.",
@@ -342,7 +350,8 @@
"viewsourcetext": "Možete vidjeti i kopirati izvorni tekst ove stranice:",
"viewyourtext": "Možete da pogledate i kopirate izvor '''vaših izmjena''' na ovoj stranici:",
"protectedinterface": "Ova stranica sadrži tekst korisničkog okruženja za softver na ovom wikiju i zaštićena je radi sprečavanja zloupotrebe.\nDa biste dodali ili izmjenili prijevode svih wikija, posjetite [//translatewiki.net/ translatewiki.net], projekat za lokalizaciju Mediawikija.",
- "editinginterface": "'''Upozorenje:''' Mijenjate stranicu koja sadrži aktivan tekst programa.\nPromjene na ovoj stranici dovode i do promjena za druge korisnike ovog wikija.\nZa dodavanje ili promjene prijevoda svih wikija, molimo Vas koristite [//translatewiki.net/ translatewiki.net], projekt prijevoda za MediaWiki.",
+ "editinginterface": "<strong>Upozorenje:</strong> Mijenjate stranicu koja sadrži aktivan tekst programa.\nPromjene na ovoj stranici dovode i do promjena za druge korisnike ovog wikija.\nZa dodavanje ili promjene prijevoda za sve wikije, molimo Vas koristite [//translatewiki.net/ translatewiki.net], projekt prijevoda za MediaWiki.",
+ "translateinterface": "Za dodavanje ili promjenu prijevoda za sve wikije koristite [//translatewiki.net/ translatewiki.net], projekt za lokalizaciju MediaWikija.",
"cascadeprotected": "Uređivanje ove stranice je zabranjeno jer sadrži {{PLURAL:$1|stranicu zaštićenu|stranice zaštićene}} od uređivanja iz razloga:\n$2",
"namespaceprotected": "Vi nemate dozvulu da mijenjate stranicu '''$1'''.",
"customcssprotected": "Nemate dozvolu za mijenjanje ove CSS stranice jer sadrži osobne postavke nekog drugog korisnika.",
@@ -353,6 +362,7 @@
"mypreferencesprotected": "Nemate dozvolu da uređujete svoje postavke.",
"ns-specialprotected": "Specijalne stranice se ne mogu uređivati.",
"titleprotected": "Naslov stranice je zaštićen od postavljanja od strane korisnika [[User:$1|$1]].\nIz razloga \"''$2''\".",
+ "filereadonlyerror": "Ne mogu promijeniti datoteku \"$1\" jer je skladište datoteka \"$2\" zaključano samo za čitanje.\n\nAdministrator koji ga je zaključao naveo je ovo objašnjenje: \"$3\".",
"invalidtitle-knownnamespace": "Neispravan naslov s imenskim prostorom \"$2\" i tekstom \"$3\"",
"invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom \"$2\"",
"exception-nologin": "Niste prijavljeni",
@@ -398,6 +408,8 @@
"userlogin-resetlink": "Zaboravili ste detalje vaše prijave?",
"userlogin-resetpassword-link": "Zaboravili ste lozinku?",
"userlogin-helplink2": "Pomoć pri prijavljivanju",
+ "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nKoristite donji obrazac da biste se prijavili kao drugi korisnik.",
+ "userlogin-createanother": "Napravi još jedan račun",
"createacct-emailrequired": "Adresa e-pošte",
"createacct-emailoptional": "Adresa e-pošte (opcionalno)",
"createacct-email-ph": "Unesite Vašu adresu e-pоšte",
@@ -411,13 +423,14 @@
"createacct-imgcaptcha-ph": "Unesite tekst koji vidite iznad",
"createacct-submit": "Napravite svoj korisnički račun",
"createacct-another-submit": "Napravi još jedan korisnički račun",
- "createacct-benefit-heading": "{{SITENAME}} je napravljen od strane ljudi kao što ste Vi.",
+ "createacct-benefit-heading": "{{SITENAME}} je napravljena od strane ljudi kao što ste Vi.",
"createacct-benefit-body1": "{{PLURAL:$1|izmjena|izmjene}}",
"createacct-benefit-body2": "{{PLURAL:$1|stranica|stranice|stranica}}",
- "createacct-benefit-body3": "nedavni {{PLURAL:$1|doprinosa}}",
+ "createacct-benefit-body3": "nedavnih {{PLURAL:$1|doprinosa}}",
"badretype": "Šifre koje ste unijeli se ne poklapaju.",
"userexists": "Korisničko ime koje ste unijeli je već u upotrebi.\nMolimo Vas da izaberete drugo ime.",
"loginerror": "Greška pri prijavljivanju",
+ "createacct-error": "Došlo je do greške pri otvaranju naloga",
"createaccounterror": "Ne može se napraviti račun: $1",
"nocookiesnew": "Korisnički nalog je napravljen, ali niste prijavljeni. {{SITENAME}} koristi kolačiće (''cookies'') da bi se korisnici prijavili. Vi ste onemogućili kolačiće na Vašem računaru. Molimo Vas da ih omogućite, a onda se prijavite sa svojim novim korisničkim imenom i šifrom.",
"nocookieslogin": "{{SITENAME}} koristi kolačiće (''cookies'') da bi se korisnici prijavili. Vi ste onemogućili kolačiće na Vašem kompjuteru. Molimo Vas da ih omogućite i da pokušate ponovo sa prijavom.",
@@ -455,9 +468,10 @@
"accountcreated": "Korisnički račun je napravljen",
"accountcreatedtext": "Korisnički račun za [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|razgovor]]) je napravljen.",
"createaccount-title": "Pravljenje korisničkog računa za {{SITENAME}}",
- "createaccount-text": "Neko je napravio korisnički račun za vašu e-mail adresu na {{SITENAME}} ($4) sa imenom \"$2\", i sa šifrom \"$3\".\nTrebali biste se prijaviti i promjeniti šifru.\n\nMožete ignorisati ovu poruku, ako je korisnički račun napravljen greškom.",
+ "createaccount-text": "Neko je napravio korisnički račun za vašu e-mail adresu na {{SITENAME}} ($4) sa imenom \"$2\", i sa šifrom \"$3\".\nTrebali biste se prijaviti i promijeniti šifru.\n\nMožete ignorisati ovu poruku, ako je korisnički račun napravljen greškom.",
"login-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
"login-abort-generic": "Vaša prijava nije bila uspješna – Prekinuto",
+ "login-migrated-generic": "Vaš račun je premješten, a vaše korisničko ime više ne postoji na ovoj wiki.",
"loginlanguagelabel": "Jezik: $1",
"suspicious-userlogout": "Vaš zahtjev za odjavu je odbijen jer je poslan preko pokvarenog preglednika ili keširanog proksija.",
"createacct-another-realname-tip": "Pravo ime nije obavezno.\nAko izaberete da date ime, biće korišteno za pripisivanje za vaš rad.",
@@ -469,7 +483,7 @@
"user-mail-no-addy": "Pokušaj slanja e-maila bez navedene e-mail adrese.",
"user-mail-no-body": "Pokušano slanje e-poruke s praznim ili nerazumno kratkim sadržajem.",
"changepassword": "Promijeni lozinku",
- "resetpass_announce": "Prijavili ste se sa privremenim kodom koji ste dobili na e-mail.\nDa biste završili prijavu, morate unijeti novu šifru ovdje:",
+ "resetpass_announce": "Da biste završili prijavu, morate postaviti novu šifru.",
"resetpass_text": "<!-- Unesi tekst ovdje -->",
"resetpass_header": "Obnovi šifru za račun",
"oldpassword": "Stara šifra:",
@@ -488,6 +502,8 @@
"resetpass-temp-password": "Privremena šifra:",
"resetpass-abort-generic": "Promjenu šifre/lozinke je prekinula ekstenzija.",
"resetpass-expired": "Vaša lozinka je istekla. Postavite novu lozinku da biste se prijavili.",
+ "resetpass-expired-soft": "Vaša šifra je istekla i mora se resetirati. Molimo odaberite sada novu šifru ili kliknite \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.",
+ "resetpass-validity-soft": "Vaša šifra nije valjana: $1\n\nMolimo odaberite novu šifru ili kliknite \"{{int:resetpass-submit-cancel}}\" da je resetirate kasnije.",
"passwordreset": "Poništavanje šifre",
"passwordreset-text-one": "Ispunite ovaj obrazac da biste resetovali Vašu šifru/lozinku.",
"passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku putem e-pošte.}}",
@@ -514,7 +530,16 @@
"changeemail-none": "(ništa)",
"changeemail-password": "Tvoja šifra/lozinka za {{SITENAME}}:",
"changeemail-submit": "Promijeni e-mail",
+ "changeemail-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
+ "resettokens": "Resetovanje žetona",
+ "resettokens-text": "Možete ponovno postaviti tokene koji će vam omogućiti pristup određenim privatnim podacima povezanim sa vašim računom ovdje.\n\nTrebali bi to učiniti ako ih mimo volje podijelite s nekim ili ako je vaš račun ugrožen.",
+ "resettokens-no-tokens": "Nema žetona za resetovanje.",
+ "resettokens-legend": "Resetovanje žetona",
+ "resettokens-tokens": "Žetoni:",
"resettokens-token-label": "$1 (trenutna vrijednost: $2)",
+ "resettokens-watchlist-token": "Token za web niz (Atom/RSS) [[Special:Watchlist|promjena na stranicama sa vašeg spiska praćenja]]",
+ "resettokens-done": "Žetoni su resetovani",
+ "resettokens-resetbutton": "Resetuj izabrane žetone",
"bold_sample": "Podebljan tekst",
"bold_tip": "Podebljan tekst",
"italic_sample": "Kurzivan tekst",
@@ -541,9 +566,11 @@
"preview": "Pregled stranice",
"showpreview": "Prikaži izgled",
"showdiff": "Prikaži izmjene",
- "anoneditwarning": "'''Upozorenje:''' Niste prijavljeni. \nVaša IP adresa će biti zabilježena u historiji ove stranice.",
+ "blankarticle": "<strong>Upozorenje:</strong> Napravili ste praznu stranicu.\nAko ponovno kliknete \"{{int:savearticle}}\", napravit ćete praznu stranicu bez sadržaja.",
+ "anoneditwarning": "<strong>Upozorenje:</strong> Niste prijavljeni. \nVaša IP adresa će biti javno vidljiva ako napravite neku izmjenu. Ako se <strong>[$1 prijavite]</strong> ili <strong>[$2 napravite račun]</strong>, vaše izmjene će biti pripisane vašem korisničkom imenu, zajedno sa drugim pogodnostima.",
"anonpreviewwarning": "''Niste prijavljeni. Nakon spremanja izmjena vaša IP adresa će biti zapisana u historiji uređivanja ove stranice.''",
"missingsummary": "'''Napomena:''' Niste unijeli sažetak izmjene.\nAko kliknete na Sačuvaj, Vaša izmjena će biti sačuvana bez sažetka.",
+ "selfredirect": "<strong>Upozorenje:</strong> Preusmjerili ste stranicu na samu sebe.\nMožda ste naveli pogrešan cilj preusmjeravanja ili ste uređivali pogrešnu stranicu.\nAko ponovno kliknete \"{{int:savearticle}}\", ipak će nastati preusmjerenje.",
"missingcommenttext": "Molimo unesite komentar ispod.",
"missingcommentheader": "'''Podsjetnik:''' Niste napisali temu/naslov za ovaj komentar.\nAko ponovo kliknete na ''{{int:savearticle}}'', Vaše izmjene će biti spašene bez teme/naslova.",
"summary-preview": "Pregled sažetka:",
@@ -628,17 +655,24 @@
"edit-conflict": "Sukob izmjena.",
"edit-no-change": "Vaša izmjena je ignorirana, jer nije bilo promjena teksta stranice.",
"postedit-confirmation-created": "Stranica je napravljena.",
+ "postedit-confirmation-restored": "Stranica je vraćena.",
"postedit-confirmation-saved": "Vaša izmjena je sačuvana.",
"edit-already-exists": "Stranica nije mogla biti kreirana.\nIzgleda da već postoji.",
"defaultmessagetext": "Uobičajeni tekst poruke",
+ "content-failed-to-parse": "Neuspjeh u parsiranju $2 sadržaja za $1 model: $3",
"invalid-content-data": "Nevaljani podaci sadržaja",
"content-not-allowed-here": "Sadržaj napisan u obliku \"$1\" nije dozvoljen na stranici [[$2]]",
"editwarning-warning": "Napuštanje ove stranice može dovesti do gubitka svih promjena koje ste načinili.\nAko ste prijavljeni, možete isključiti ovo upozorenje u Sekciji za \"{{int:prefs-editing}}\" vaših opcija.",
"editpage-notsupportedcontentformat-title": "Format sadržaja nije podržan",
+ "editpage-notsupportedcontentformat-text": "Format sadržaja $1 nije podržan za model sadržaja $2.",
"content-model-wikitext": "wikitekst",
"content-model-text": "obični tekst",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Prazan objekat",
+ "content-json-empty-array": "Prazan niz",
+ "duplicate-args-category": "Stranice sa istim argumentima kod poziva šablona",
+ "duplicate-args-category-desc": "Stranica sadrži pozive šablona koji koriste argumente dvojnike, kao što su <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ili <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše poziva opterećujućih parserskih funkcija.\n\nTrebalo bi imati manje od $2 {{PLURAL:$2|poziv|poziva}}, a sad ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
"expensive-parserfunction-category": "Stranice sa previše poziva parserskih funkcija",
"post-expand-template-inclusion-warning": "Pažnja: Šablon koji je uključen je prevelik.\nNeki šabloni neće biti uključeni.",
@@ -649,8 +683,10 @@
"parser-template-recursion-depth-warning": "Dubina uključivanja šablona prekoračena ($1)",
"language-converter-depth-warning": "Prekoračena granica dubine jezičkog pretvarača ($1)",
"node-count-exceeded-category": "Stranice sa prekoračenim brojem čvorova",
- "node-count-exceeded-warning": "Stranice koje imaju prevelik broj čvorova",
+ "node-count-exceeded-category-desc": "Stranica je prešla najviši broj čvorova.",
+ "node-count-exceeded-warning": "Stranice koje su prekoračile broj čvorova",
"expansion-depth-exceeded-category": "Stranice koje su prekoračile dubinu proširenja",
+ "expansion-depth-exceeded-category-desc": "Stranica je prešla najveću dubinu proširenja.",
"expansion-depth-exceeded-warning": "Stranice koje su prekoračile dubinu proširenja",
"parser-unstrip-loop-warning": "Pronađena petlja",
"parser-unstrip-recursion-limit": "Prekoračeno ograničenje rekurzije ($1)",
@@ -658,16 +694,18 @@
"undo-success": "Izmjena se može vratiti.\nMolimo da provjerite usporedbu ispod da budete sigurni da to želite učiniti, a zatim spremite promjene da bi ste završili vraćanje izmjene.",
"undo-failure": "Izmjene se ne mogu vratiti zbog konflikta sa izmjenama u međuvremenu.",
"undo-norev": "Izmjena se ne može vratiti jer ne postoji ranija ili je obrisana.",
+ "undo-nochange": "Izgleda da je izmjena već vraćena.",
"undo-summary": "Vraćena izmjena $1 [[Special:Contributions/$2|korisnika $2]] ([[User talk:$2|razgovor]])",
"undo-summary-username-hidden": "Poništi izmjenu $1 od skrivenog korisnika",
"cantcreateaccounttitle": "Nije moguće napraviti korisnički račun",
"cantcreateaccount-text": "Pravljenje korisničkog računa sa ove IP adrese ('''$1''') je blokirano od strane [[User:$3|$3]].\n\nRazlog koji je naveo $3 je ''$2''",
+ "cantcreateaccount-range-text": "Pravljenje računa sa IP adresa u rasponu '''$1''', koji uključuje i vašu IP adresu ('''$4'''), je blokirao korisnik [[User:$3|$3]].\n\nNavedeni razlog korisnika $3 je ''$2''",
"viewpagelogs": "Pogledaj protokol ove stranice",
"nohistory": "Ne postoji historija izmjena za ovu stranicu.",
"currentrev": "Trenutna revizija",
"currentrev-asof": "Trenutna revizija na dan $1",
"revisionasof": "Revizija od $1",
- "revision-info": "Izmjena od $1 korisnika $2",
+ "revision-info": "Izmjena od $1 od {{GENDER:$6|$2}}$7",
"previousrevision": "←Starije izmjene",
"nextrevision": "Novija izmjena →",
"currentrevisionlink": "Trenutna verzija",
@@ -692,6 +730,7 @@
"rev-deleted-event": "(stavka zapisa obrisana)",
"rev-deleted-user-contribs": "[korisničko ime ili IP adresa uklonjeni - izmjena sakrivena u spisku doprinosa]",
"rev-deleted-text-permission": "Revizija ove stranice je '''obrisana'''.\nDetalje možete vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisu brisanja].",
+ "rev-suppressed-text-permission": "Revizija ove stranice je <strong>prekrivena</strong>.\nDetalji se mogu naći u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} zapisniku prekrivanja].",
"rev-deleted-text-unhide": "Revizija ove stranice je '''obrisana'''.\nDetalje o tome može se vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku brisanja].\nVi je i dalje možete [$1 vidjeti ovu reviziju] ako želite da nastavite.",
"rev-suppressed-text-unhide": "Ova revizija stranice je '''uklonjena'''.\nMožete pogledati detalje u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} zapisu uklanjanja].\nVi je i dalje možete [$1 vidjeti ovu reviziju] ako želite.",
"rev-deleted-text-view": "Revizija ove stranice je '''obrisana'''.\nVi je možete vidjeti; detalji o tome se mogu vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisu brisanja].",
@@ -710,14 +749,20 @@
"revdelete-no-file": "Navedena datoteka ne postoji.",
"revdelete-show-file-confirm": "Da li ste sigurni da želite pogledati obrisanu reviziju datoteke \"<nowiki>$1</nowiki>\" od $2 u $3?",
"revdelete-show-file-submit": "Da",
+ "revdelete-selected-text": "{{PLURAL:$1|Odabrana revizija|Odabrane revizije}} od [[:$2]]:",
+ "revdelete-selected-file": "{{PLURAL:$1|Odabrana vezija datoteke|Odabrane verzije datoteke}} [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Označena stavka zapisa|Označene stavke zapisa}}:",
+ "revdelete-text-text": "Obrisane revizije i dalje su prikazane u historiji stranice, ali dijelovi njihovog sadržaja neće biti dostupni javnosti.",
+ "revdelete-text-file": "Obrisane verzije datoteke i dalje su prikazane u historiji datoteke, ali dijelovi njihovog sadržaja nisu dostupni javnosti.",
+ "logdelete-text": "Obrisani događaji zapisnika i dalje se pojavljuju u zapisniku, ali dijelovi njihovih sadržaja nisu dostupni javnosti.",
+ "revdelete-text-others": "Drugi administratori će i dalje moći pristupiti sakrivenom sadržaju i vratiti ga, bez obzira na postavljena dodatna ograničenja.",
"revdelete-confirm": "Molimo potvrdite da namjeravate ovo učiniti, da razumijete posljedice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
- "revdelete-suppress-text": "Ograničenja bi trebala biti korištena '''samo''' u slijedećim slučajevima:\n* Osjetljive korisničke informacije\n*: ''kućne adrese, brojevi telefona, brojevi bankovnih kartica itd.''",
+ "revdelete-suppress-text": "Ograničenja bi trebala biti korištena <strong>samo</strong> u sijedećim slučajevima:\n* Potencijalni klevetnički podaci\n* Osjetljive korisničke informacije\n*: <em>kućne adrese, brojevi telefona, brojevi bankovnih kartica itd.</em>",
"revdelete-legend": "Postavi ograničenja vidljivosti",
"revdelete-hide-text": "Tekst revizije",
"revdelete-hide-image": "Sakrij sadržaj datoteke",
- "revdelete-hide-name": "Sakrij akciju i cilj",
- "revdelete-hide-comment": "Sakrij izmjene komentara",
+ "revdelete-hide-name": "Sakrij cilj i parametre",
+ "revdelete-hide-comment": "Uredi sažetak",
"revdelete-hide-user": "Korisničko ime urednika/IP",
"revdelete-hide-restricted": "Ograniči podatke za administratore kao i za druge korisnike",
"revdelete-radio-same": "(ne mijenjaj)",
@@ -760,6 +805,7 @@
"mergehistory-empty": "Nema revizija za spajanje.",
"mergehistory-success": "$3 {{PLURAL:$3|revizija|revizije|revizija}} stranice [[:$1]] uspješno spojeno u [[:$2]].",
"mergehistory-fail": "Ne može se izvršiti spajanje historije, molimo provjerite opet stranicu i parametre vremena.",
+ "mergehistory-fail-toobig": "Ne može se izvršiti spajanje historije jer će se više premjestiti više od ograničenja od $1 {{PLURAL:$1|revizije|revizija}}.",
"mergehistory-no-source": "Izvorna stranica $1 ne postoji.",
"mergehistory-no-destination": "Odredišna stranica $1 ne postoji.",
"mergehistory-invalid-source": "Izvorna stranica mora imati validan naslov.",
@@ -769,7 +815,6 @@
"mergehistory-same-destination": "Izvorne i odredišne stranice ne mogu biti iste",
"mergehistory-reason": "Razlog:",
"mergelog": "Zapis spajanja",
- "pagemerge-logentry": "spojeno [[$1]] u [[$2]] (sve do $3 revizije)",
"revertmerge": "Vrati spajanje",
"mergelogpagetext": "Ispod je spisak nedavnih spajanja historija stranica.",
"history-title": "Historija revizija \"$1\"",
@@ -781,6 +826,7 @@
"showhideselectedversions": "Pokaži/sakrij odabrane verzije",
"editundo": "ukloni ovu izmjenu",
"diff-empty": "(Nema razlike)",
+ "diff-multi-sameuser": "({{PLURAL:$1|Nije prikazana jedna međurevizija|Nisu prikazane $1 međurevizije}} istog korisnika)",
"diff-multi-manyusers": "({{PLURAL:$1|Jedna međurevizija|$1 međurevizije|$1 međurevizija}} od više od $2 {{PLURAL:$2|korisnika|korisnika}} {{PLURAL:$1|nije prikazana|nisu prikazane}})",
"difference-missing-revision": "{{PLURAL:$2|Jedna izmjena|$2 izmjene}} od ove razlike ($1) ne {{PLURAL:$2|postoji|postoje}}.\n\nOvo se obično dešava kada pratite zastarjelu vezu na stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokol brisanja].",
"searchresults": "Rezultati pretrage",
@@ -808,6 +854,8 @@
"search-result-category-size": "{{PLURAL:$1|1 član|$1 člana|$1 članova}} ({{PLURAL:$2|1 podkategorija|$2 podkategorije|$2 podkategorija}}, {{PLURAL:$3|1 datoteka|$3 datoteke|$3 datoteka}})",
"search-redirect": "(preusmjeravanje $1)",
"search-section": "(sekcija $1)",
+ "search-category": "(kategorija $1)",
+ "search-file-match": "(podudara se sadržaj datoteke)",
"search-suggest": "Da li ste mislili: $1",
"search-interwiki-caption": "Srodni projekti",
"search-interwiki-default": "$1 rezultati:",
@@ -836,6 +884,7 @@
"prefs-personal": "Korisnički podaci",
"prefs-rc": "Podešavanja nedavnih izmjena",
"prefs-watchlist": "Moji praćeni članci",
+ "prefs-editwatchlist": "Uredi spisak praćenja",
"prefs-watchlist-days": "Broj dana za prikaz u spisku praćenja:",
"prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|dan|dana}}",
"prefs-watchlist-edits": "Najveći broj izmjena za prikaz u proširenom spisku praćenja:",
@@ -848,7 +897,7 @@
"prefs-email": "E-mail opcije",
"prefs-rendering": "Izgled",
"saveprefs": "Sačuvaj",
- "restoreprefs": "Vrati sve pretpostavljene postavke",
+ "restoreprefs": "Vrati sve pretpostavljene postavke (u svim sekcijama)",
"prefs-editing": "Veličine tekstualnog polja",
"rows": "Redova",
"columns": "Kolona",
@@ -902,9 +951,9 @@
"gender-unknown": "Ne previše detaljno",
"gender-male": "On uređuje wiki stranice",
"gender-female": "Ona uređuje wiki stranice",
- "prefs-help-gender": "Optionalno: koristi se za ispravke gramatičkog roda u porukama softvera. Ova informacija će biti javna.",
+ "prefs-help-gender": "Postavljanje ovih podešavanja je optionalno: Softver koristi ove vrijednosti za vaše naslovljanje i ispravke gramatičkog roda u porukama softvera. Ova informacija bit će javna.",
"email": "E-mail",
- "prefs-help-realname": "Pravo ime nije obavezno.\nAko izaberete da date ime, biće korišteno za pripisivanje za vaš rad.",
+ "prefs-help-realname": "Pravo ime nije obavezno.\nAko izaberete da date ime, biće korišteno za pripisivanje vašem radu.",
"prefs-help-email": "E-mail adresa je opcionalna, ali je potrebna jer omogućava da Vam se pošalje nova šifra u slučaju da je izgubite ili zaboravite.",
"prefs-help-email-others": "Također možete da odaberete da vas drugi kontaktiraju putem vaše korisničke stranice ili stranice za razgovor bez otkrivanja vašeg identiteta.",
"prefs-help-email-required": "Neophodno je navesti e-mail adresu.",
@@ -922,6 +971,7 @@
"prefs-advancedwatchlist": "Napredne opcije",
"prefs-displayrc": "Postavke izgleda",
"prefs-displaywatchlist": "Postavke izgleda",
+ "prefs-tokenwatchlist": "Žeton",
"prefs-diffs": "Razlike",
"prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sljedećoj prijavi.",
"email-address-validity-valid": "Izgleda valjano",
@@ -974,6 +1024,7 @@
"right-move": "Preusmjeravanje stranica",
"right-move-subpages": "Preusmjeravanje stranica sa svim podstranicama",
"right-move-rootuserpages": "Premještanje stranica osnovnih korisnika",
+ "right-move-categorypages": "Pomakni stranice kategorije",
"right-movefile": "Premještanje datoteka",
"right-suppressredirect": "Ne pravi preusmjeravanje sa starog imena pri preusmjeravanju stranica",
"right-upload": "Postavljanje datoteka",
@@ -982,7 +1033,7 @@
"right-reupload-shared": "Postavljanje novih lokalnih verzija datoteka identičnih onima u zajedničkoj ostavi",
"right-upload_by_url": "Postavljanje datoteke sa URL adrese",
"right-purge": "Osvježavanje keša za stranice bez konfirmacije",
- "right-autoconfirmed": "Uređivanje poluzaštićenih stranica",
+ "right-autoconfirmed": "Bez ograničavanja stavki za IP adrese",
"right-bot": "Postavljen kao automatski proces",
"right-nominornewtalk": "Male izmjene na stranici za razgovor ne uzrokuju prikazivanje oznake ''nova poruka'' na stranici za razgovor",
"right-apihighlimits": "Korištenje viših ograničenja u API upitima",
@@ -995,7 +1046,7 @@
"right-deletedtext": "Pregled obrisanog teksta i izmjena između obrisanih revizija",
"right-browsearchive": "Pretraživanje obrisanih stranica",
"right-undelete": "Vraćanje obrisanih stranica",
- "right-suppressrevision": "Pregled i povratak revizija sakrivenih od administratora",
+ "right-suppressrevision": "Pregled, sakrivanje i povratak određenih revizija stranice od svih korisnika",
"right-suppressionlog": "Gledanje privatnih zapisa",
"right-block": "Blokiranje uređivanja drugih korisnika",
"right-blockemail": "Blokiranje korisnika da šalje e-mail",
@@ -1045,6 +1096,7 @@
"action-move": "pomjerite ovu stranicu",
"action-move-subpages": "pomjerite ovu stranicu, i njene podstranice",
"action-move-rootuserpages": "pomjerite stranice osnovnog korisnika",
+ "action-move-categorypages": "pomakni stranice kategorije",
"action-movefile": "pomjeri ovu datoteku",
"action-upload": "postavljate ovu datoteku",
"action-reupload": "stavite novu verziju postojeće datoteke",
@@ -1061,8 +1113,8 @@
"action-block": "blokirate uređivanje ovog korisnika",
"action-protect": "promijeniti nivo zaštite za ovu stranicu",
"action-rollback": "brzo vraćanje izmjena zadnjeg korisnika koji je uređivao određenu stranicu",
- "action-import": "uvozite ovu stranicu iz druge wiki",
- "action-importupload": "uvezete ovu stranicu putem postavljanja datoteke",
+ "action-import": "uvozite stranice iz druge wiki",
+ "action-importupload": "uvoz stranica putem postavljanja datoteke",
"action-patrol": "označite izmjene drugih kao patrolirane",
"action-autopatrol": "da Vaše izmjene budu označene kao patrolirane",
"action-unwatchedpages": "pregledate spisak nepraćenih stranica",
@@ -1089,7 +1141,7 @@
"recentchanges-label-plusminus": "Veličina stranice promijenila se za ovoliko bajtova",
"recentchanges-legend-heading": "'''Legenda:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (također pogledajte [[Special:NewPages|spisak novih stranica]])",
- "rcnotefrom": "Ispod su izmjene od <strong>$2</strong> (do <strong>$1</strong> prikazano).",
+ "rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od <strong>$3, $4</strong> (do <strong>$1</strong> prikazano).",
"rclistfrom": "Prikaži nove izmjene počev od $3 $2",
"rcshowhideminor": "$1 male izmjene",
"rcshowhideminor-show": "Pokaži",
@@ -1181,9 +1233,9 @@
"largefileserver": "Ova datoteka je veća nego što server dopušta.",
"emptyfile": "Datoteka koju ste poslali je prazna. Ovo je moguće zbog greške u imenu datoteke. Molimo Vas da provjerite da li stvarno želite da pošaljete ovu datoteku.",
"windows-nonascii-filename": "Ova wiki ne podržava imena datoteka sa posebnim znacima.",
- "fileexists": "Datoteka sa ovim imenom već postoji.\nMolimo Vas da provjerite <strong>[[:$1]]</strong> ako niste sigurni da li želite da je promjenite.\n[[$1|thumb]]",
+ "fileexists": "Datoteka sa ovim imenom već postoji, molimo Vas provjerite <strong>[[:$1]]</strong> ako {{GENDER:|niste}} sigurni da je želite promjeniti.\n[[$1|thumb]]",
"filepageexists": "Opis stranice za ovu datoteku je već napravljen ovdje <strong>[[:$1]]</strong>, ali datoteka sa ovim nazivom trenutno ne postoji.\nSažetak koji ste naveli neće se pojaviti na stranici opisa.\nDa bi se Vaš opis ovdje našao, potrebno je da ga ručno uredite.\n[[$1|thumb]]",
- "fileexists-extension": "Datoteka sa sličnim nazivom postoji: [[$2|thumb]]\n* Naziv datoteke koja se postavlja: <strong>[[:$1]]</strong>\n* Naziv postojeće datoteke: <strong>[[:$2]]</strong>\nMolimo Vas da izaberete drugačiji naziv.",
+ "fileexists-extension": "Datoteka sa sličnim nazivom postoji: [[$2|thumb]]\n* Naziv datoteke koja se postavlja: <strong>[[:$1]]</strong>\n* Naziv postojeće datoteke: <strong>[[:$2]]</strong>\nDa li možda želite koristiti drugačiji naziv?",
"fileexists-thumbnail-yes": "Izgleda da je datoteka slika smanjene veličine ''(\"thumbnail\")''. [[$1|thumb]]\nMolimo provjerite datoteku <strong>[[:$1]]</strong>.\nAko je provjerena datoteka ista slika originalne veličine, nije potrebno postavljati dodatnu sliku.",
"file-thumbnail-no": "Naziv datoteke počinje sa <strong>$1</strong>.\nIzgleda da se radi o smanjenoj slici ''(\"thumbnail\")''.\nAko imate ovu sliku u punoj rezoluciji, postavite nju; ili promijenite naslov ove datoteke.",
"fileexists-forbidden": "Datoteka s ovim imenom već postoji i ne može biti prepisana.\nAko i dalje želite postaviti ovu datoteku, molimo Vas da se vratite i pošaljete ovu datoteku pod novim imenom. [[File:$1|thumb|center|$1]]",
@@ -1270,11 +1322,11 @@
"invalid-chunk-offset": "Neispravna polazna tačka",
"img-auth-accessdenied": "Pristup onemogućen",
"img-auth-nopathinfo": "Nedostaje PATH_INFO.\nVaš server nije postavljen da daje ovu informaciju.\nMožda je zasnovan na CGI koji ne podržava img_auth.\nPogledajte https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
- "img-auth-notindir": "Zahtjevana putanje nije u direktorijumu podešenom za postavljanje.",
+ "img-auth-notindir": "Zahtjevana putanja nije u direktoriju podešenom za postavljanje.",
"img-auth-badtitle": "Ne mogu napraviti valjani naslov iz \"$1\".",
"img-auth-nologinnWL": "Niste prijavljeni i \"$1\" nije na spisku dozvoljenih.",
"img-auth-nofile": "Datoteka \"$1\" ne postoji.",
- "img-auth-isdir": "Pokušavate pristupiti direktorijumu \"$1\".\nDozvoljen je samo pristup datotekama.",
+ "img-auth-isdir": "Pokušavate pristupiti direktoriju \"$1\".\nDozvoljen je samo pristup datotekama.",
"img-auth-streaming": "Tok \"$1\".",
"img-auth-public": "Funkcija img_auth.php služi za izlaz datoteka sa privatnih wikija.\nOva wiki je postavljena kao javna wiki.\nZa optimalnu sigurnost, img_auth.php je onemogućena.",
"img-auth-noread": "Korisnik nema pristup za čitanje \"$1\".",
@@ -1293,8 +1345,8 @@
"license-header": "Licenciranje",
"nolicense": "Ništa nije odabrano",
"license-nopreview": "(Pregled nije dostupan)",
- "upload_source_url": " (validni, javno dostupni URL)",
- "upload_source_file": " (datoteka na Vašem računaru)",
+ "upload_source_url": "(vaša izabrana datoteka od validnih, javno dostupnih URL-a)",
+ "upload_source_file": "(vaša odabrana datoteka sa Vašeg računara)",
"listfiles-delete": "obriši",
"listfiles-summary": "Ova posebna stranica prikazuje sve postavljene datoteke.",
"listfiles_search_for": "Traži medije po imenu:",
@@ -1368,7 +1420,7 @@
"filedelete-maintenance": "Brisanje i povratak datoteka je privremeno onemogućen tokom održavanja.",
"filedelete-maintenance-title": "Ne mogu da obrišem datoteku",
"mimesearch": "MIME pretraga",
- "mimesearch-summary": "Ova stranica omogućava filtriranje datoteka prema njihovoj MIME vrsti.\nUlazni podaci: vrstasadržaja/subvrsta, npr. <code>image/jpeg</code>.",
+ "mimesearch-summary": "Ova stranica omogućava filtriranje datoteka prema njihovoj MIME vrsti.\nUlazni podaci: vrstasadržaja/subvrsta ili vrstasadržaja/*, npr. <code>image/jpeg</code>.",
"mimetype": "MIME tip:",
"download": "učitaj",
"unwatchedpages": "Nepraćene stranice",
@@ -1379,6 +1431,7 @@
"randompage": "Slučajna stranica",
"randompage-nopages": "Nema stranica u {{PLURAL:$2|slijedećem imenskom prostoru|slijedećim imenskim prostorima}}: \"$1\".",
"randomincategory": "Slučajna stranica u kategoriji",
+ "randomincategory-invalidcategory": "\"$1\" nije valjano ime kategorije.",
"randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
"randomincategory-category": "Kategorija:",
"randomincategory-legend": "Slučajna stranica u kategoriji",
@@ -1387,7 +1440,6 @@
"statistics": "Statistike",
"statistics-header-pages": "Statistike stranice",
"statistics-header-edits": "Statistike izmjena",
- "statistics-header-views": "Statistike pregleda",
"statistics-header-users": "Statistike korisnika",
"statistics-header-hooks": "Ostale statistike",
"statistics-articles": "Stranice sadržaja",
@@ -1396,19 +1448,15 @@
"statistics-files": "Broj postavljenih datoteka",
"statistics-edits": "Broj izmjena od kako je instalirana {{SITENAME}}",
"statistics-edits-average": "Prosječno izmjena po stranici",
- "statistics-views-total": "Ukupno pregleda",
- "statistics-views-total-desc": "Pregledi nepostojećih stranica i posebnih stranica nisu uključeni",
- "statistics-views-peredit": "Pogleda po izmjeni",
"statistics-users": "Registrovani [[Special:ListUsers|korisnici]]",
"statistics-users-active": "Aktivni korisnici",
"statistics-users-active-desc": "Korisnici koji su izvršili akciju u toku {{PLURAL:$1|posljednjeg dana|posljednja $1 dana|posljednjih $1 dana}}",
- "statistics-mostpopular": "Najviše pregledane stranice",
"pageswithprop-prop": "Naziv svojstva:",
"pageswithprop-submit": "Idi",
"doubleredirects": "Dvostruka preusmjerenja",
"doubleredirectstext": "Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja.\nSvaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju teksta drugog preusmjerenja, što obično daje \"pravi\" ciljni članak, na koji bi prvo preusmjerenje i trebalo da pokazuje.\n<del>Precrtane</del> stavke su riješene.",
- "double-redirect-fixed-move": "[[$1]] je premješten, sada je preusmjerenje na [[$2]]",
- "double-redirect-fixed-maintenance": "Ispravljanje dvostrukih preusmjerenja sa [[$1]] na [[$2]].",
+ "double-redirect-fixed-move": "[[$1]] je premješten.\nAutomatski je ažuriran i sada preusmjerava na [[$2]].",
+ "double-redirect-fixed-maintenance": "Automatsko ospravljanje dvostrukih preusmjerenja sa [[$1]] na [[$2]] je posao održavanja.",
"double-redirect-fixer": "Popravljač preusmjerenja",
"brokenredirects": "Pokvarena preusmjerenja",
"brokenredirectstext": "Slijedeća preusmjerenja vode na nepostojeće stranice:",
@@ -1437,7 +1485,6 @@
"uncategorizedtemplates": "Šabloni bez kategorije",
"unusedcategories": "Neiskorištene kategorije",
"unusedimages": "Neupotrebljene slike",
- "popularpages": "Popularne stranice",
"wantedcategories": "Tražene kategorije",
"wantedpages": "Tražene stranice",
"wantedpages-badtitle": "Nevaljan naslov u setu rezultata: $1",
@@ -1447,7 +1494,7 @@
"wantedtemplates": "Potrebni šabloni",
"mostlinked": "Članci sa najviše linkova",
"mostlinkedcategories": "Kategorije sa najviše linkova",
- "mostlinkedtemplates": "Najviše upotrebljavani šabloni",
+ "mostlinkedtemplates": "Najviše uključene stranice",
"mostcategories": "Članci sa najviše kategorija",
"mostimages": "Najviše linkovane slike",
"mostrevisions": "Članci sa najviše izmjena",
@@ -1462,16 +1509,21 @@
"protectedpages-cascade": "Samo prenosive zaštite",
"protectedpages-noredirect": "Sakrij preusmjerenja",
"protectedpagesempty": "Trenutno nijedna stranica nije zaštićena ovim parametrima.",
+ "protectedpages-timestamp": "Vremenska oznaka",
"protectedpages-page": "Stranica",
"protectedpages-expiry": "Istječe",
+ "protectedpages-performer": "Zaštita korisnika",
+ "protectedpages-params": "Parametri zaštite",
"protectedpages-reason": "Razlog",
"protectedpages-unknown-timestamp": "Nepoznato",
"protectedpages-unknown-performer": "Nepoznati korisnik",
"protectedtitles": "Zaštićeni naslovi",
+ "protectedtitles-summary": "Na ovoj stranici se nalazi spisak trenutno zaštićenih naslova. Za spisak trenutno zaštićenih stranica vidi [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
"protectedtitlesempty": "Nijedan naslov članka trenutno nije zaštićen ovim parametrima.",
"listusers": "Spisak korisnika",
"listusers-editsonly": "Pokaži samo korisnike koji su uređivali",
"listusers-creationsort": "Sortiraj po datumu pravljenja",
+ "listusers-desc": "Sortiraj u opadajućem redoslijedu",
"usereditcount": "$1 {{PLURAL:$1|izmjena|izmjene}}",
"usercreated": "{{GENDER:$3|Napravio|Napravila}} dana $1 u $2",
"newpages": "Nove stranice",
@@ -1489,9 +1541,11 @@
"pager-older-n": "{{PLURAL:$1|starija 1|starije $1}}",
"suppress": "Nazdor",
"querypage-disabled": "Ova posebna stranica je onemogućena jer smanjuje performanse.",
+ "apihelp": "API pomoć",
+ "apihelp-no-such-module": "Modul \"$1\" nije pronađen.",
"booksources": "Štampani izvori",
"booksources-search-legend": "Traži književne izvore",
- "booksources-go": "Idi",
+ "booksources-search": "Traži",
"booksources-text": "Ispod se nalazi spisak vanjskih linkova na ostale stranice koje prodaju nove ili korištene knjige kao i stranice koje mogu da imaju važnije podatke o knjigama koje tražite:",
"booksources-invalid-isbn": "Navedeni ISBN broj nije validan; molimo da provjerite da li je došlo do greške pri kopiranju iz prvobitnog izvora.",
"specialloguserlabel": "Izvršilac:",
@@ -1558,8 +1612,15 @@
"listgrouprights-removegroup-self": "Može ukloniti {{PLURAL:$2|grupu|grupe|grupa}} sa svog računa: $1",
"listgrouprights-addgroup-self-all": "Može dodati sve grupe na svoj račun",
"listgrouprights-removegroup-self-all": "Može ukloniti sve grupe sa svog računa",
+ "listgrouprights-namespaceprotection-header": "Ograničenja imenskog prostora",
"listgrouprights-namespaceprotection-namespace": "Imenski prostor",
+ "listgrouprights-namespaceprotection-restrictedto": "Prava kojima se dozvoljava korisniku da uređuje",
+ "trackingcategories": "Praćenje kategorija",
+ "trackingcategories-msg": "Praćenje kategorije",
+ "trackingcategories-name": "Ime poruke",
+ "trackingcategories-desc": "Kriterij uključenja kategorije",
"trackingcategories-nodesc": "Opis nije dostupan.",
+ "trackingcategories-disabled": "Kategorija je onemogućena",
"mailnologin": "Nema adrese za slanje",
"mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]]\nda biste slali e-poštu drugim korisnicima.",
"emailuser": "Pošalji e-poštu ovom korisniku",
@@ -1594,7 +1655,7 @@
"mywatchlist": "Praćeni članci",
"watchlistfor2": "Za $1 $2",
"nowatchlist": "Nemate ništa na svom spisku praćenih članaka.",
- "watchlistanontext": "Molimo da $1 da možete vidjeti ili urediti stavke na Vašem spisku praćenja.",
+ "watchlistanontext": "Molimo logujte se da vidite ili uredite stavke na Vašem spisku praćenja.",
"watchnologin": "Niste prijavljeni",
"addwatch": "Dodaj na spisak praćenja",
"addedwatchtext": "Stranica \"[[:$1]]\" je dodata vašem [[Special:Watchlist|spisku praćenih članaka]]. \nBuduće promjene ove stranice i njoj pridružene stranice za razgovor će biti navedene ovde.",
@@ -1606,11 +1667,11 @@
"unwatchthispage": "Ukinite praćenje",
"notanarticle": "Nije članak",
"notvisiblerev": "Revizija je obrisana",
- "watchlist-details": "{{PLURAL:$1|$1 stranica praćena|$1 stranice praćene|$1 stranica praćeno}} ne računajući stranice za razgovor.",
+ "watchlist-details": "{{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica }} na vašem spisku praćenja, ne računajući posebno stranice za razgovor.",
"wlheader-enotif": "Obavještavanje e-poštom je omogućeno.",
"wlheader-showupdated": "Stranice koje su izmijenjene od kad ste ih posljednji put posjetili su prikazane '''podebljanim slovima'''",
- "wlnote": "Ispod je {{PLURAL:$1|najskorija izmjena|'''$1''' najskorije izmjene|'''$1''' najskorijih izmjena}} načinjenih {{PLURAL:$2|posljednjeg sata|u posljednjih '''$2''' sata|u posljednjih '''$2''' sati}}, od $3, $4.",
- "wlshowlast": "Prikaži posljednjih $1 sati $2 dana $3",
+ "wlnote": "Ispod {{PLURAL:$1|je najskorija izmjena|su <strong>$1</strong> najskorije izmjene|<strong>$1</strong> najskorijih izmjena}} načinjenih {{PLURAL:$2|posljednjeg sata|u posljednjih <strong>$2</strong> sata|u posljednjih <strong>$2</strong> sati}}, od $3, $4.",
+ "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
"watchlist-options": "Opcije spiska praćenja",
"watching": "Pratim...",
"unwatching": "Ne pratim...",
@@ -1630,7 +1691,7 @@
"enotif_lastvisited": "Pogledajte $1 za sve izmjene od vaše posljednje posjete.",
"enotif_lastdiff": "Vidi $1 da pregledate ovu promjenu.",
"enotif_anon_editor": "anonimni korisnik $1",
- "enotif_body": "Poštovani $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSažetak urednika: $PAGESUMMARY $PAGEMINOREDIT\n\nKontaktirajte urednika:\ne-pošta: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNeće biti drugih obavještenja u slučaju daljnjih izmjena osima ako posjetite stranicu. Također možete poništiti oznake obavijesti za sve praćene stranice koje imate na vašem spisku praćenja.\n\nVaš prijateljski {{SITENAME}} sistem obavještavanja\n\n--\nZa promjenu vaših postavki e-mail obavijesti, posjetite\n{{canonicalurl:{{#special:Preferences}}}}\n\nZa promjenu postavki vašeg praćenja, posjetite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nDa obrišete stranicu sa vašeg spiska praćenja, posjetite\n$UNWATCHURL\n\nPovratne informacije i daljnja pomoć:\n$HELPPAGE",
+ "enotif_body": "Poštovani $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSažetak urednika: $PAGESUMMARY $PAGEMINOREDIT\n\nKontaktirajte urednika:\ne-pošta: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNeće biti drugih obavještenja u slučaju daljnjih izmjena osim ako prijavljeni ponovno posjetite stranicu. Također možete poništiti oznake obavijesti za sve praćene stranice koje imate na vašem spisku praćenja.\n\nVaš prijateljski {{SITENAME}} sistem obavještavanja\n\n--\nZa promjenu vaših postavki email obavijesti, posjetite\n{{canonicalurl:{{#special:Preferences}}}}\n\nZa promjenu postavki vašeg praćenja, posjetite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nDa obrišete stranicu sa vašeg spiska praćenja, posjetite\n$UNWATCHURL\n\nPovratne informacije i daljnja pomoć:\n$HELPPAGE",
"created": "napravljena",
"changed": "promijenjena",
"deletepage": "Obrišite stranicu",
@@ -1640,7 +1701,7 @@
"exbeforeblank": "sadržaj prije brisanja je bio: '$1'",
"delete-confirm": "Brisanje \"$1\"",
"delete-legend": "Obriši",
- "historywarning": "'''Upozorenje''': Stranica koju želite da obrišete ima historiju sa otprilike $1 {{PLURAL:$1|revizijom|revizije|revizija}}:",
+ "historywarning": "<strong>Upozorenje</strong>: Stranica koju želite da obrišete ima historiju sa otprilike $1 {{PLURAL:$1|revizijom|revizije|revizija}}:",
"confirmdeletetext": "Brisanjem ćete obrisati stranicu ili sliku zajedno sa historijom iz baze podataka, ali će se iste moći vratiti kasnije.\nMolim potvrdite svoju namjeru, da razumijete posljedice i da ovo radite u skladu sa [[{{MediaWiki:Policy-url}}|pravilima]].",
"actioncomplete": "Akcija završena",
"actionfailed": "Akcija nije uspjela",
@@ -1652,12 +1713,11 @@
"deletecomment": "Razlog:",
"deleteotherreason": "Ostali/dodatni razlozi:",
"deletereasonotherlist": "Ostali razlozi",
- "deletereason-dropdown": "*Uobičajeni razlozi brisanja\n** Zahtjev autora\n** Kršenje autorskih prava\n** Vandalizam",
+ "deletereason-dropdown": "*Uobičajeni razlozi brisanja\n** Spam\n** Vandalizam\n** Kršenje autorskih prava\n** Zahtjev autora\n** Pokvareno preusmjerenje",
"delete-edit-reasonlist": "Uredi razloge brisanja",
"delete-toobig": "Ova stranica ima veliku historiju promjena, preko $1 {{PLURAL:$1|revizije|revizija}}.\nBrisanje takvih stranica nije dopušteno da bi se spriječilo slučajno preopterećenje servera na kojem je {{SITENAME}}.",
"delete-warning-toobig": "Ova stranica ima veliku historiju izmjena, preko $1 {{PLURAL:$1|izmjene|izmjena}}.\nNjeno brisanje može dovesti do opterećenja operacione baze na {{SITENAME}};\nnastavite s oprezom.",
"rollback": "Vrati izmjene",
- "rollback_short": "Vrati",
"rollbacklink": "vrati",
"rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}",
"rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}",
@@ -1693,7 +1753,7 @@
"protect-locked-blocked": "Ne možete promijeniti nivo zaštite dok ste blokirani.\nOvo su trenutne postavke za stranicu '''$1''':",
"protect-locked-dblock": "Nivoi zaštite se ne mogu mijenjati jer je aktivna baza podataka zaključana.\nTrenutna postavka za stranicu '''$1''' je:",
"protect-locked-access": "Nemate ovlasti za mijenjanje stepena zaštite.\nSlijede trenutne postavke stranice '''$1''':",
- "protect-cascadeon": "Ova stranica je tenutno zaštićena jer je uključena u {{PLURAL:$1|stranicu, koja ima|stranice, koje imaju|stranice, koje imaju}} uključenu prenosnu zaštitu.\nMožete promijeniti stepen zaštite ove stranice, ali to neće uticati na prenosnu zaštitu.",
+ "protect-cascadeon": "Ova stranica je trenutno zaštićena jer je uključena u {{PLURAL:$1|stranicu, koja ima|stranice, koje imaju|stranice, koje imaju}} uključenu prenosnu zaštitu.\nPromijene stepena zaštite ove stranice neće uticati na prenosnu zaštitu.",
"protect-default": "Dopusti svim korisnicima",
"protect-fallback": "Dozvolite samo korisnicima sa \"$1\" ovlastima/privilegijama",
"protect-level-autoconfirmed": "Dopustite samo automatski potvrđenim korisnicima",
@@ -1840,7 +1900,7 @@
"ipb-unblock-addr": "Deblokiraj $1",
"ipb-unblock": "Deblokiraj korisničko ime ili IP adresu",
"ipb-blocklist": "Vidi postojeće blokade",
- "ipb-blocklist-contribs": "Doprinosi za $1",
+ "ipb-blocklist-contribs": "Doprinosi za {{GENDER:$1|$1}}",
"unblockip": "Odblokiraj korisnika",
"unblockiptext": "Upotrebite donji upitnik da bi ste vratili\npravo pisanja ranije blokiranoj IP adresi\nili korisničkom imenu.",
"ipusubmit": "Ukloni ovu blokadu",
@@ -1895,7 +1955,7 @@
"range_block_disabled": "Administratorska mogućnost da blokira grupe je isključena.",
"ipb_expiry_invalid": "Pogrešno vrijeme trajanja.",
"ipb_expiry_temp": "Sakrivene blokade korisničkih imena moraju biti stalne.",
- "ipb_hide_invalid": "Ne može se onemogućiti ovaj račun; možda ima isuviše izmjena.",
+ "ipb_hide_invalid": "Ne može se onemogućiti ovaj račun; on ima više od {{PLURAL:$1|jedne izmjene|$1 izmjena}}.",
"ipb_already_blocked": "\"$1\" je već blokiran",
"ipb-needreblock": "$1 je već blokiran. Da li želite promijeniti postavke?",
"ipb-otherblocks-header": "Ostale {{PLURAL:$1|blokada|blokade}}",
@@ -2051,7 +2111,7 @@
"importuploaderrortemp": "Postavljanje uvozne datoteke nije uspjelo.\nNedostaje privremeni folder.",
"import-parse-failure": "Greška pri parsiranju XML uvoza",
"import-noarticle": "Nema stranica za uvoz!",
- "import-nonewrevisions": "Sve revizije su prethodno uvežene.",
+ "import-nonewrevisions": "Nijedna revizija nije uvezena (ili su sve već prisutne ili su preskočene zbog greške).",
"xml-error-string": "$1 na liniji $2, kolona $3 (bajt $4): $5",
"import-upload": "Postavljanje XML podataka",
"import-token-mismatch": "Izgubljeni podaci sesije. Molimo pokušajte ponovno.",
@@ -2060,24 +2120,20 @@
"import-error-create": "Stranica \"$1\" nije uvezena jer vam nije dozvoljeno da je napravite.",
"import-error-interwiki": "Stranica \"$1\" nije uvezena jer je njen naziv rezerviran za vanjsko povezivanje (interwiki).",
"import-error-special": "Stranica \"$1\" nije uvezena jer pripada posebnom imenskom prostoru koje ne prihvata stranice.",
- "import-error-invalid": "Stranica \"$1\" nije uvezena jer je njen naziv neispravan.",
+ "import-error-invalid": "Stranica \"$1\" nije uvezena jer je naziv pod kojim treba biti uvezena nije valjan na ovoj wiki.",
"import-options-wrong": "{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "Navedena osnovna stranica ima neispravan naslov.",
"import-rootpage-nosubpage": "Imenski prostor \"$1\" osnovne stranice ne dozvoljava podstranice.",
"importlogpage": "Zapisnik uvoza",
"importlogpagetext": "Administrativni uvozi stranica sa historijom izmjena sa drugih wikija.",
- "import-logentry-upload": "uvezena stranica [[$1]] putem postavljanja datoteke",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizija|revizije|revizija}}",
- "import-logentry-interwiki": "uveženo (''transwikied'') $1",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revizija|revizije|revizija}} od $2",
+ "import-logentry-upload-detail": "{{PLURAL:$1|Uvezena jedna revizija|Uvezene $1 revizije|Uvezeno $1 revizija}}",
+ "import-logentry-interwiki-detail": "{{PLURAL:$1|Uvezena $1 revizija|Uvezene $1 revizije|Uvezeno $1 revizija}} od $2",
"javascripttest": "Testiranje JavaScript-e",
- "javascripttest-title": "Pokretanje $1 testova",
"javascripttest-pagetext-noframework": "Ova stranica je određena za pokretanje JavaScript testova.",
"javascripttest-pagetext-unknownframework": "Nepoznat radni okvir testiranja\"$1\".",
"javascripttest-pagetext-frameworks": "Molimo Vas izaberite jednu od sljedećih testnih okvira: $1",
"javascripttest-pagetext-skins": "Izaberite s kojom temom želite da pokrenete probu:",
"javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit testni alati",
"tooltip-pt-userpage": "Vaša korisnička stranica",
"tooltip-pt-anonuserpage": "Korisnička stranica za ip koju Vi uređujete kao",
"tooltip-pt-mytalk": "Vaša stranica za razgovor",
@@ -2116,6 +2172,7 @@
"tooltip-feed-atom": "Atom za ovu stranicu",
"tooltip-t-contributions": "Pogledajte spisak doprinosa ovog korisnika",
"tooltip-t-emailuser": "Pošaljite pismo ovom korisniku",
+ "tooltip-t-info": "Više informacija o ovoj stranici",
"tooltip-t-upload": "Postavi slike i druge medije",
"tooltip-t-specialpages": "Spisak svih posebnih stranica",
"tooltip-t-print": "Verzija ove stranice za štampanje",
@@ -2164,7 +2221,7 @@
"spam_reverting": "Vraćanje na posljednju verziju koja ne sadrži linkove ka $1",
"spam_blanking": "Sve revizije koje sadrže linkove ka $1, očisti",
"spam_deleting": "Sve revizije koje sadrže linkove na $1, brišem",
- "simpleantispam-label": "Provjera protiv spama.\n'''NE''' popunjavaj ovo!",
+ "simpleantispam-label": "Provjera protiv spama.\n<strong>NE</strong> popunjavajte ovo!",
"pageinfo-title": "Informacije za \"$1\"",
"pageinfo-not-current": "Nažalost, nemoguće je dati ove informacije za starije revizije.",
"pageinfo-header-basic": "Osnovne informacije",
@@ -2180,7 +2237,6 @@
"pageinfo-robot-policy": "Indeksiranje od strane robota",
"pageinfo-robot-index": "Dozvoljeno",
"pageinfo-robot-noindex": "Nije dozvoljeno",
- "pageinfo-views": "Broj pogleda",
"pageinfo-watchers": "Broj pratitelja stranice",
"pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
"pageinfo-redirects-name": "Broj preusmjeravanja na ovu stranicu",
@@ -2258,6 +2314,7 @@
"newimages-summary": "Ova specijalna stranica prikazuje posljednje postavljene datoteke.",
"newimages-legend": "Filter",
"newimages-label": "Ime datoteke (ili dio imena):",
+ "newimages-showbots": "Pokaži datoteke koje su poslali botovi",
"noimages": "Ništa za prikazati.",
"ilsubmit": "Traži",
"bydate": "po datumu",
@@ -2630,7 +2687,6 @@
"exif-urgency-low": "Nisko ( $1 )",
"exif-urgency-high": "Visoko ($1)",
"exif-urgency-other": "Korisnički određen prioritet ($1)",
- "watchlistall2": "sve",
"namespacesall": "sve",
"monthsall": "sve",
"confirmemail": "Potvrdite adresu e-pošte",
@@ -2667,10 +2723,13 @@
"confirm-watch-top": "Dodajte ovu stranu na Vaš spisak praćenih članaka",
"confirm-unwatch-button": "U redu",
"confirm-unwatch-top": "Izbrišite ovu stranu sa Vašeg spiska praćenih članaka",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← prethodna stranica",
"imgmultipagenext": "slijedeća stranica →",
"imgmultigo": "Idi!",
"imgmultigoto": "Idi na stranicu $1",
+ "img-lang-default": "(podrazumijevani jezik)",
+ "img-lang-info": "Prikaži ovu sliku u $1. $2",
"img-lang-go": "Idi",
"ascending_abbrev": "rast",
"descending_abbrev": "opad",
@@ -2686,6 +2745,7 @@
"autosumm-replace": "Zamjena stranice sa '$1'",
"autoredircomment": "Preusmjereno na [[$1]]",
"autosumm-new": "Napravljena stranica sa '$1'",
+ "autosumm-newblank": "Napravljena prazna stranica",
"size-bytes": "$1 B",
"size-kilobytes": "$1 KB",
"size-megabytes": "$1 MB",
@@ -2705,6 +2765,13 @@
"watchlistedit-raw-done": "Vaš spisak praćenja je ažuriran.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 naslov je dodan|$1 naslova su dodana|$1 naslova je dodano}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova je uklonjeno}}:",
+ "watchlistedit-clear-title": "Očišćen spisak nadgledanja",
+ "watchlistedit-clear-legend": "Očisti spisak nadgledanja",
+ "watchlistedit-clear-explain": "Svi naslovi će biti uklonjeni iz vašeg spiska nadgledanja",
+ "watchlistedit-clear-titles": "Naslovi:",
+ "watchlistedit-clear-submit": "Isprazni spisak nadgledanja (Ovo je trajno!)",
+ "watchlistedit-clear-done": "Vaš spisak praćenja je očišćen.",
+ "watchlisttools-clear": "Očisti spisak nadgledanja",
"watchlisttools-view": "Pregled promjena praćenih stranica",
"watchlisttools-edit": "Pogledaj i uredi listu praćenih članaka.",
"watchlisttools-raw": "Uređivanje praćenih stranica u okviru praćenja.",
@@ -2762,11 +2829,10 @@
"hebrew-calendar-m12-gen": "Elul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|razgovor]])",
"timezone-utc": "KSV",
- "unknown_extension_tag": "Nepoznata oznaka ekstenzije \"$1\"",
"duplicate-defaultsort": "Upozorenje: Postavljeni ključ sortiranja \"$2\" zamjenjuje raniji ključ \"$1\".",
"version": "Verzija",
"version-extensions": "Instalirana proširenja (ekstenzije)",
- "version-skins": "Kože",
+ "version-skins": "Instalirane kože",
"version-specialpages": "Posebne stranice",
"version-parserhooks": "Kuke parsera",
"version-variables": "Promjenjive",
@@ -2778,9 +2844,12 @@
"version-parser-function-hooks": "Kuke parserske funkcije",
"version-hook-name": "Naziv kuke",
"version-hook-subscribedby": "Pretplaćeno od",
- "version-version": "(Verzija $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[nema imena]",
"version-license": "Licenca",
"version-ext-license": "Licenca",
+ "version-ext-colheader-name": "Proširenje",
+ "version-skin-colheader-name": "Izgled",
"version-ext-colheader-version": "Verzija",
"version-ext-colheader-license": "Licenca",
"version-ext-colheader-description": "Opis",
@@ -2827,6 +2896,7 @@
"specialpages-group-wiki": "Podaci i alati",
"specialpages-group-redirects": "Preusmjeravanje posebnih stranica",
"specialpages-group-spam": "Alati za spam",
+ "specialpages-group-developer": "Razvojni alati",
"blankpage": "Prazna stranica",
"intentionallyblankpage": "Ova stranica je namjerno ostavljena prazna",
"external_image_whitelist": " #Ostavite ovu liniju onakva kakva je<pre>\n#Stavite obične fragmente opisa (samo dio koji ide između //) ispod\n#Ovi će biti spojeni sa URLovima sa vanjskih (eksternih) slika\n#One koji se spoje biće prikazane kao slike, u suprotnom će se prikazati samo link\n#Linije koje počinju sa # se tretiraju kao komentari\n#Ovo ne razlikuje velika i mala slova\n\n#Stavite sve regex fragmente iznad ove linije. Ostavite ovu liniju onakvu kakva je</pre>",
@@ -2874,6 +2944,7 @@
"htmlform-yes": "Da",
"htmlform-chosen-placeholder": "Izaberite opciju",
"htmlform-cloner-create": "Dodaj još",
+ "htmlform-cloner-delete": "Ukloni",
"sqlite-has-fts": "$1 sa podrškom pretrage cijelog teksta",
"sqlite-no-fts": "$1 bez podrške pretrage cijelog teksta",
"logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
@@ -2910,19 +2981,20 @@
"logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3",
"logentry-rights-autopromote": "$1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5",
"rightsnone": "(nema)",
+ "revdelete-summary": "sažetak",
+ "feedback-adding": "Dodajem povratne informacije na stranicu...",
+ "feedback-bugcheck": "Odlično! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
+ "feedback-bugnew": "Provjereno. Prijavi novu grešku",
"feedback-bugornote": "Ako ste spremni detaljno opisati tehnički problem, molimo [$1 prijavite \"bug\" (grešku)].\nInače, možete ispuniti jednostavan obrazac ispod. Vaš komentar bit će dodan na stranicu \"[$3 $2]\" zajedno s Vašim korisničkim imenom.",
- "feedback-subject": "Tema:",
- "feedback-message": "Poruka:",
"feedback-cancel": "Odustani",
- "feedback-submit": "Pošalji povratnu informaciju",
- "feedback-adding": "Dodajem povratne informacije na stranicu...",
+ "feedback-close": "Završeno",
"feedback-error1": "Greška: Neprepoznati rezultat od API",
"feedback-error2": "Greška: Uređivanje nije uspjelo",
"feedback-error3": "Greška: Nema odgovora od API",
+ "feedback-message": "Poruka:",
+ "feedback-subject": "Tema:",
+ "feedback-submit": "Pošalji",
"feedback-thanks": "Hvala! Vaša povratna informacija je postavljena na stranicu „[$2 $1]“.",
- "feedback-close": "Završeno",
- "feedback-bugcheck": "Odlično! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
- "feedback-bugnew": "Provjereno. Prijavi novu grešku",
"searchsuggest-search": "Traži",
"searchsuggest-containing": "sadrži...",
"api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
@@ -2975,9 +3047,12 @@
"duration-centuries": "$1 {{PLURAL:$1|vijek|vijeka|vijekova}}",
"duration-millennia": "$1 {{PLURAL:$1|milenij|milenija}}",
"rotate-comment": "Slika rotirana za $1 {{PLURAL:$1|stepen|stepeni}} u smjeru kazaljke na satu",
+ "limitreport-cputime": "Vrijeme korištenja CPU",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
+ "limitreport-walltime": "Korištenje u realnom vremenu",
"limitreport-walltime-value": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
"expandtemplates": "Proširi šablone",
- "expand_templates_intro": "Ova posebna stranica uzima neki tekst i proširuje sve šablone u njemu rekurzivno.\nOna također proširuje parserske funkcije poput\n<nowiki>{{</nowiki>#language:…}} i varijable poput\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash;u principu gotovo sve između dvostrukih zagrada.\nOvo se uradi putem poziva relevantnog parserskog nivoa iz same MediaWiki.",
+ "expand_templates_intro": "Ova posebna stranica uzima neki tekst i proširuje sve šablone u njemu rekurzivno.\nOna također proširuje parserske funkcije poput\n<code><nowiki>{{</nowiki>#language:…}}</code> i varijable poput\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. U principu proširuje gotovo sve između dvostrukih zagrada.",
"expand_templates_title": "Naslov konteksta, za {{FULLPAGENAME}} itd.:",
"expand_templates_input": "Tekst unosa:",
"expand_templates_output": "Rezultat",
@@ -2986,8 +3061,36 @@
"expand_templates_remove_comments": "Ukloni komentare",
"expand_templates_remove_nowiki": "Onemogući oznake <nowiki> u rezultatima",
"expand_templates_generate_xml": "Prikaži XML stablo parsera",
+ "expand_templates_generate_rawhtml": "Pokaži izvorni HTML",
"expand_templates_preview": "Pregled",
"pagelang-name": "Stranica",
"pagelang-language": "Jezik",
- "pagelang-select-lang": "Izaberi jezik"
+ "pagelang-select-lang": "Izaberi jezik",
+ "mediastatistics-table-count": "Broj datoteka",
+ "mediastatistics-header-unknown": "Nepoznato",
+ "mediastatistics-header-drawing": "Crteži (vektorske slike)",
+ "mediastatistics-header-audio": "Zvuk",
+ "mediastatistics-header-video": "Videa",
+ "mediastatistics-header-multimedia": "Rich media",
+ "mediastatistics-header-office": "Kancelarija",
+ "mediastatistics-header-text": "Tekstualno",
+ "mediastatistics-header-executable": "Izvršni",
+ "mediastatistics-header-archive": "Kompresovani formati",
+ "json-error-syntax": "Sintaksna greška",
+ "special-characters-group-latin": "Latinica",
+ "special-characters-group-latinextended": "Prošireni latinski",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simboli",
+ "special-characters-group-greek": "Grčki",
+ "special-characters-group-cyrillic": "Ćirilica",
+ "special-characters-group-arabic": "Arapski",
+ "special-characters-group-persian": "Perzijski",
+ "special-characters-group-hebrew": "Hebrejski",
+ "special-characters-group-bangla": "Bangladeški",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-thai": "Tajlandski",
+ "special-characters-group-lao": "Laoški",
+ "special-characters-group-khmer": "Kmerski"
}
diff --git a/languages/i18n/bto.json b/languages/i18n/bto.json
index f706e7a2..474a1439 100644
--- a/languages/i18n/bto.json
+++ b/languages/i18n/bto.json
@@ -460,7 +460,6 @@
"randomincategory-category": "Kategorya:",
"statistics": "Estadistika",
"statistics-pages": "Mga pahina",
- "statistics-views-total": "Ngamin na mga silung",
"brokenredirects-edit": "balyowan",
"brokenredirects-delete": "puraon",
"withoutinterwiki-submit": "Ipabayad",
@@ -497,7 +496,7 @@
"emailccme": "Padarhi ako sa kopya ku kanakong mensahe",
"emailsenttext": "A kanimong email naipadara na.",
"watchlistfor2": "Para sa $1 $2",
- "wlshowlast": "Ipabayad a huring $1 mga oras $2 mga aldow $3",
+ "wlshowlast": "Ipabayad a huring $1 mga oras $2 mga aldow",
"delete-confirm": "Puraon a $1",
"deleteotherreason": "Iba/rugang na rason:",
"protect-otherreason": "Iba/rugang na rason:",
@@ -557,7 +556,6 @@
"exif-countrycodedest": "Koda para sa ipinababayad na nasyon",
"exif-citydest": "Ipinababayad na syudad",
"exif-gaincontrol-0": "Uda",
- "watchlistall2": "ngamin",
"monthsall": "ngamin",
"confirm-watch-top": "Muya mong irugang ading pahina sa kanimong binabantayan?",
"table_pager_limit": "Ipabayad a $1 na items kada pahina",
diff --git a/languages/i18n/bug.json b/languages/i18n/bug.json
index b615e24e..2d525341 100644
--- a/languages/i18n/bug.json
+++ b/languages/i18n/bug.json
@@ -1,331 +1,319 @@
{
- "@metadata": {
- "authors": [
- "Ezagren",
- "Kurniasan",
- "Zaidpjd (on bug.wikipedia.org)"
- ]
- },
- "sunday": "Āha'",
- "monday": "Asenéŋ",
- "tuesday": "Salasa",
- "wednesday": "Araba",
- "thursday": "Kamisi'",
- "friday": "Jumā",
- "saturday": "Sattu",
- "sun": "Āha",
- "mon": "Ase",
- "tue": "Sal",
- "wed": "Ara",
- "thu": "Kam",
- "fri": "Jum",
- "sat": "Sat",
- "january": "Januari",
- "february": "Fébruari",
- "march": "Maré'",
- "april": "April",
- "may_long": "Méi",
- "june": "Juni",
- "july": "Juli",
- "august": "Ogoso'",
- "september": "September",
- "october": "Oktober",
- "november": "November",
- "december": "Désémber",
- "january-gen": "Januari",
- "february-gen": "Fébruari",
- "march-gen": "Maré'",
- "april-gen": "April",
- "may-gen": "Méi",
- "june-gen": "Juni",
- "july-gen": "Juli",
- "august-gen": "Ogoso'",
- "september-gen": "September",
- "october-gen": "Oktober",
- "november-gen": "November",
- "december-gen": "Désémber",
- "category_header": "Leppa rilaleŋ kategori \"$1\"",
- "subcategories": "Subkategori",
- "about": "Atajangeng",
- "article": "Lontara",
- "cancel": "Rusa",
- "mypage": "Leppana iya'",
- "mytalk": "Bicarana iyya",
- "anontalk": "Bicarana IP édé",
- "navigation": "Navigasi",
- "and": "&#32;na",
- "qbfind": "Assapparang",
- "qbbrowse": "Berowoso",
- "qbedit": "Padécéŋ",
- "qbpageoptions": "Édé leppa",
- "qbmyoptions": "Leppana iya'",
- "faq": "FAQ",
- "faqpage": "Project:FAQ",
- "vector-action-move": "Paléccé'",
- "vector-view-create": "Ebbu",
- "vector-view-edit": "Padéccéng",
- "vector-view-view": "Baca",
- "vector-view-viewsource": "Ita sumber",
- "errorpagetitle": "Asalaŋ",
- "returnto": "Lisu ri $1.",
- "tagline": "Polé {{SITENAME}}",
- "help": "Paŋinriŋ",
- "search": "Assapparaŋ",
- "searchbutton": "Sappa",
- "go": "Lao",
- "searcharticle": "Lao",
- "history": "Versi riolo leppaë",
- "history_short": "versi riolo",
- "permalink": "Pranala permanen",
- "edit": "Padécéŋ",
- "create": "Ebbu",
- "editthispage": "Padécéŋiki iyé leppa",
- "create-this-page": "Ebbuiki leppa iyé",
- "delete": "Peddé",
- "deletethispage": "Peddé iyé leppa",
- "protect": "Accalinruŋi",
- "protect_change": "pinra",
- "protectthispage": "Accalinruŋi leppa iyyé",
- "unprotect": "Téccalinruŋi",
- "newpage": "Leppa baru",
- "talkpage": "Bicara iyé leppa",
- "talkpagelinktext": "Bicara",
- "specialpage": "Leppa spésiala",
- "personaltools": "Tool sialé-alé",
- "articlepage": "Ita lontara",
- "talk": "Bicara",
- "toolbox": "Toolbox",
- "userpage": "Ita leppa papaké",
- "projectpage": "Ita leppa proyék",
- "imagepage": "Ita leppa rapaŋ",
- "mediawikipage": "Ita leppa méséje",
- "templatepage": "Ita leppa templata",
- "viewhelppage": "Ita leppa panginriŋ",
- "categorypage": "Ita leppa kategori",
- "viewtalkpage": "Ita leppa bicara",
- "redirectedfrom": "(Riredirect polé $1)",
- "redirectpagesub": "Leppa redirect",
- "jumpto": "Luppe lao:",
- "jumptosearch": "sappa",
- "aboutsite": "Tentang {{SITENAME}}",
- "currentevents": "Accanjingeŋ kokkoro",
- "currentevents-url": "Project:Accanjingeŋ kokkoro",
- "disclaimers": "Diseklaima",
- "edithelp": "Paŋinriŋ mapadécéŋ",
- "mainpage": "Leppa Indoë",
- "mainpage-description": "Leppa Indoë",
- "portal": "Portal komunitas",
- "editsection": "padécéŋ",
- "editold": "padécéŋ",
- "viewsourceold": "ita sumber",
- "editlink": "padécéŋ",
- "viewsourcelink": "ita sumber",
- "editsectionhint": "Padécéŋ kajuru: $1",
- "nstab-main": "Leppa",
- "nstab-user": "Leppa papaké",
- "nstab-media": "Leppa média",
- "nstab-special": "Leppa spésiala",
- "nstab-project": "Proyek",
- "nstab-image": "Rapang",
- "nstab-mediawiki": "Pappaseŋ",
- "nstab-template": "Templata",
- "nstab-help": "Paŋinriŋ",
- "nstab-category": "Kategori",
- "nosuchspecialpage": "Iyaro leppa spésiala dé'na eŋka",
- "error": "Éro",
- "databaseerror": "Éro databése",
- "readonly": "Databése rikonci",
- "missingarticle-diff": "(Beda: $1, $2)",
- "internalerror": "Éro internal",
- "internalerror_info": "Éro internal: $1",
- "badtitle": "Judul dek essa",
- "viewsource": "Ita sumber",
- "virus-unknownscanner": "Antivirus dé' riisseŋ:",
- "yourname": "Aseŋ papaké:",
- "yourpassword": "Adacili:",
- "login": "log attama",
- "nav-login-createaccount": "Log attama / ebbu akun",
- "userlogin": "Log attama / ebbu akun",
- "logout": "Log essu",
- "userlogout": "Log essu",
- "notloggedin": "Déppa log attama",
- "nologin": "Dé' gaga akaun? '''$1'''.",
- "nologinlink": "Ebbu akun",
- "createaccount": "Ebbu akun",
- "gotaccount": "Purani eŋka akun? '''$1'''.",
- "gotaccountlink": "Log attama",
- "loginerror": "Éro log attama",
- "mailmypassword": "E-mail adacili baru",
- "oldpassword": "Pasewodo matoa:",
- "bold_tip": "Teks maumpek",
- "italic_tip": "Teks Italik",
- "extlink_tip": "Link risaliweŋ (jangan lupa awalan http:// )",
- "savearticle": "Taro leppa",
- "preview": "Pribiu",
- "showpreview": "Ita pribiu",
- "showlivepreview": "Pribiu live",
- "showdiff": "Mita perubahan",
- "summary-preview": "Pribiu summary:",
- "blockedtitle": "Papaké riblok",
- "accmailtitle": "Ada sandi ni riantarak.",
- "accmailtext": "Ada sandi \"$1\" riantarak ri $2.",
- "anontalkpagetext": "----''Ini adalah halaman diskusi untuk pengguna anonim yang belum membuat rekening atau tidak menggunakannya. Karena tidak membuat rekening, kami terpaksa memakai alamat IP untuk mengenalinya. Alamat IP seperti ini dapat dipakai oleh beberapa pengguna yang berbeda. Jika Anda adalah pengguna anonim dan merasa mendapatkan komentar-komentar yang tidak berkaitan dengan anda, kami anjurkan untuk [[Special:UserLogin|membuat rekening atau masuk log]] untuk menghindari kerancuan dengan pengguna anonim lain.''",
- "editing": "Mapadécéŋ $1",
- "previousrevision": "←Revisi riolo",
- "currentrevisionlink": "Revisi tannapa",
- "page_first": "séuwani",
- "histfirst": "Poŋ loa",
- "histlast": "Poŋ nappa",
- "historysize": "($1 {{PLURAL:$1|bita|bita}})",
- "historyempty": "(kapa)",
- "history-feed-item-nocomment": "$1 ri $2",
- "rev-deleted-comment": "(komentar ripeddé)",
- "rev-deleted-user": "(ripeddéni aseŋna papakeë)",
- "rev-deleted-event": "(log gau ripeddéni)",
- "rev-delundel": "pakitaï/tapo'",
- "revdelete-selected": "'''{{PLURAL:$2|Revisi|Revisi-revisi}} ripiléna [[$1]]ë:'''",
- "logdelete-selected": "'''{{PLURAL:$1|Log|Log-log}} ripilé:'''",
- "revdelete-hide-text": "Tapoïki text revisië",
- "revdelete-hide-comment": "Tapo komentar mapadecéŋ",
- "revdelete-hide-user": "Tapo aseŋ papakéna/IPna papadéceŋë",
- "revdelete-log": "Saba:",
- "editundo": "undo",
- "viewprevnext": "Ita ($1 {{int:pipe-separator}} $2) ($3)",
- "search-result-size": "$1 ({{PLURAL:$2|1 ada|$2 ada}})",
- "search-redirect": "(redirect $1)",
- "mypreferences": "Bérékkeŋeŋna iyya",
- "prefs-watchlist": "Watchlist",
- "prefs-misc": "Misc",
- "saveprefs": "Taro",
- "prefs-editing": "Mapadécéŋ",
- "searchresultshead": "Masappa",
- "youremail": "E-mail:",
- "username": "Aseŋ papaké:",
- "uid": "ID papaké:",
- "email": "E-mail",
- "group-sysop": "Puŋgawa",
- "group-all": "(sininna)",
- "group-user-member": "{{GENDER:$1|Pappaké}}",
- "group-sysop-member": "Puŋgawa",
- "grouppage-user": "{{ns:project}}:Pappaké",
- "grouppage-sysop": "{{ns:project}}:Puŋgawa",
- "right-read": "Mabbaca leppa",
- "right-edit": "Mappadécéŋi leppa",
- "recentchanges": "Pappakinra tanappa",
- "rcshowhidebots": "$1 bot",
- "rcshowhideliu": "$1 papaké mattama' log",
- "rcshowhideanons": "$1 papaké anon",
- "diff": "beda",
- "hide": "Tapok",
- "minoreditletter": "k",
- "newpageletter": "B",
- "boteditletter": "b",
- "recentchangeslinked": "Pappakapinra terkait",
- "recentchangeslinked-feed": "Pappakapinra terkait",
- "recentchangeslinked-toolbox": "Pappakapinra terkait",
- "upload": "Lureng berkas",
- "uploadbtn": "Lureng berkas",
- "listfiles_name": "Aseŋ",
- "file-anchor-link": "Rapang",
- "filehist-user": "Papaké",
- "filehist-dimensions": "Dimensi",
- "imagelinks": "Liŋke",
- "filedelete": "Mapeddé $1",
- "filedelete-legend": "Mapeddé berkas",
- "filedelete-intro": "Iko purani mapeddé '''[[Media:$1|$1]]'''.",
- "filedelete-submit": "Peddé",
- "filedelete-success": "'''$1''' purani ripeddé.",
- "filedelete-success-old": "Berkas '''[[Media:$1|$1]]''' versi $3, $2 purani ripeddé.",
- "filedelete-nofile": "'''$1''' dé'na eŋka.",
- "mimesearch": "Assapparaŋ MIME",
- "mimetype": "Tipe MIME:",
- "download": "unduh",
- "randompage": "Leppa random",
- "randompage-nopages": "Degaga leppa rilaleŋ iyyé namespaceë.",
- "statistics-articles": "Leppa liseë",
- "statistics-pages": "Leppaë",
- "statistics-files": "File-file nalise menré",
- "ancientpages": "Leppa talloa",
- "move": "Paleccé",
- "movethispage": "Paleccé leppa iyyé",
- "specialloguserlabel": "Papaké:",
- "log": "Log",
- "all-logs-page": "Maneŋ log",
- "allpages": "Maneng halamang",
- "alphaindexline": "$1 ri $2",
- "allpagesfrom": "Mappaitang halamang-halamang rimulai:",
- "allarticles": "Sininna leppa",
- "allinnamespace": "Maneŋ leppa (namespace $1)",
- "allpagessubmit": "Lanre",
- "allpagesprefix": "Mappaitang halamang-halamang éngkalinga awang:",
- "categories": "Maneŋ kategori",
- "addedwatchtext": "Halamang \"[[:$1]]\" ni ritamba ri ida [[Special:Watchlist|watchlist]].\nHalamang bicara éréngé gabungan halamang bicara pada wettu depan didaftarkan koe,\néréngé halamang akan wessi '''umpek''' ri [[Special:RecentChanges|daftar pinra tanappa]] barak lebih lemmak ita.\n\nApak ida ronnak mappedde halamang édé ri daftar jagaan, klik \"Mangedda jaga\" pada kolom ri sedde.",
- "watch": "Ampi",
- "unwatch": "Tenriampi",
- "actioncomplete": "Proses makkapo",
- "dellogpage": "Log peddé-peddé",
- "prot_1movedto2": "[[$1]] ésuk ri [[$2]]",
- "blanknamespace": "(Utama)",
- "sp-contributions-talk": "Bicara",
- "whatlinkshere": "Pranala ri leppa iyéwé",
- "whatlinkshere-page": "Leppa:",
- "whatlinkshere-links": "← liŋke",
- "ipblocklist-submit": "Sappa",
- "blocklink": "blok",
- "contribslink": "kontrib",
- "articleexists": "Leppa béla ida pile ni ujuk, a dek essa.\nSilakan pile aseng laing.",
- "movelogpage": "Log leccé",
- "movereason": "Saba:",
- "delete_and_move": "Peddé nappa paleccé",
- "delete_and_move_text": "==Mapeddé riperelu==\nLeppa destinasi \"[[:$1]]\" purani eŋka.\nEloko peddéï supaya weddiŋi mapalecé?",
- "delete_and_move_confirm": "Iyé', peddé iyaro leppa",
- "delete_and_move_reason": "Ripeddé supaya weddiŋi mapalecé",
- "immobile-source-namespace": "Leppa-leppa rilaleŋna namespace \"$1\"ë de'na ullé ripaleccé",
- "immobile-source-page": "Iyyedé leppaë de'na ullé ripaleccé.",
- "allmessages": "Maneng pappaseng",
- "allmessagesname": "Aseng",
- "allmessagesdefault": "Teks totok",
- "allmessagescurrent": "Teks kokkoro",
- "tooltip-pt-userpage": "Leppa papaké iya'",
- "tooltip-pt-mytalk": "Leppa bicara iya'",
- "tooltip-pt-preferences": "Preferencena iya'",
- "tooltip-pt-logout": "Log maessu",
- "tooltip-ca-talk": "Pabicarana iyé leppa",
- "tooltip-ca-move": "Paléccé leppa édé",
- "tooltip-search": "Sappa ri {{SITENAME}}",
- "tooltip-search-go": "Lao ri leppa aseŋna pappada iyyé rekko eŋkaï",
- "tooltip-n-mainpage": "Lao ri Leppa Indoë",
- "tooltip-ca-nstab-special": "Iyanaéwé séuwa leppa spésiala', dé'na idi' ullé padécéŋiki",
- "anonymous": "Pabbuak anonim {{SITENAME}}",
- "imagemaxsize": "Gangkai rapang pada keterangan rapang ri halamang hingga:",
- "ilsubmit": "Sappa",
- "watchlistall2": "maneŋ",
- "namespacesall": "maneŋ",
- "monthsall": "maneŋ",
- "imgmultigo": "Lao!",
- "imgmultigoto": "Lao ri leppa $1",
- "ascending_abbrev": "énré",
- "descending_abbrev": "no",
- "table_pager_first": "Leppa séuwani",
- "table_pager_limit_submit": "Lao",
- "autosumm-replace": "Masullé leppaë lao '$1'",
- "autosumm-new": "Leppa baru: '$1'",
- "size-bytes": "$1 B",
- "size-kilobytes": "$1 KB",
- "size-megabytes": "$1 MB",
- "size-gigabytes": "$1 GB",
- "livepreview-loading": "Mallise…",
- "livepreview-ready": "Mallise… Sokkuni!",
- "version-specialpages": "Leppa spésiala",
- "specialpages": "Leppa spésiala",
- "specialpages-note": "* Leppa spésiala normal\n* <strong class=\"mw-specialpagerestricted\">Leppa spésiala terbatas</strong>",
- "specialpages-group-other": "Leppa spésiala laiŋë",
- "specialpages-group-login": "Log attama / mendaftar",
- "specialpages-group-changes": "Pinrana tanappaë sibawa logeë",
- "specialpages-group-users": "Papaké sibawa hak-hak",
- "specialpages-group-pages": "Sininna leppaë",
- "specialpages-group-pagetools": "Tool leppaë",
- "specialpages-group-wiki": "Data sibawa tool wiki",
- "specialpages-group-spam": "Tool spam",
- "blankpage": "Leppa kosoŋë"
+ "@metadata": {
+ "authors": [
+ "Ezagren",
+ "Kurniasan",
+ "Zaidpjd (on bug.wikipedia.org)"
+ ]
+ },
+ "sunday": "Āha'",
+ "monday": "Asenéŋ",
+ "tuesday": "Salasa",
+ "wednesday": "Araba",
+ "thursday": "Kamisi'",
+ "friday": "Jumā",
+ "saturday": "Sattu",
+ "sun": "Āha",
+ "mon": "Ase",
+ "tue": "Sal",
+ "wed": "Ara",
+ "thu": "Kam",
+ "fri": "Jum",
+ "sat": "Sat",
+ "january": "Januari",
+ "february": "Fébruari",
+ "march": "Maré'",
+ "april": "April",
+ "may_long": "Méi",
+ "june": "Juni",
+ "july": "Juli",
+ "august": "Ogoso'",
+ "september": "September",
+ "october": "Oktober",
+ "november": "November",
+ "december": "Désémber",
+ "january-gen": "Januari",
+ "february-gen": "Fébruari",
+ "march-gen": "Maré'",
+ "april-gen": "April",
+ "may-gen": "Méi",
+ "june-gen": "Juni",
+ "july-gen": "Juli",
+ "august-gen": "Ogoso'",
+ "september-gen": "September",
+ "october-gen": "Oktober",
+ "november-gen": "November",
+ "december-gen": "Désémber",
+ "category_header": "Leppa rilaleŋ kategori \"$1\"",
+ "subcategories": "Subkategori",
+ "about": "Atajangeng",
+ "article": "Lontara",
+ "cancel": "Rusa",
+ "mypage": "Leppana iya'",
+ "mytalk": "Bicarana iyya",
+ "anontalk": "Bicarana IP édé",
+ "navigation": "Navigasi",
+ "and": "&#32;na",
+ "qbfind": "Assapparang",
+ "qbbrowse": "Berowoso",
+ "qbedit": "Padécéŋ",
+ "qbpageoptions": "Édé leppa",
+ "qbmyoptions": "Leppana iya'",
+ "faq": "FAQ",
+ "faqpage": "Project:FAQ",
+ "errorpagetitle": "Asalaŋ",
+ "returnto": "Lisu ri $1.",
+ "tagline": "Polé {{SITENAME}}",
+ "help": "Paŋinriŋ",
+ "search": "Assapparaŋ",
+ "searchbutton": "Sappa",
+ "go": "Lao",
+ "searcharticle": "Lao",
+ "history": "Versi riolo leppaë",
+ "history_short": "versi riolo",
+ "permalink": "Pranala permanen",
+ "edit": "Padécéŋ",
+ "create": "Ebbu",
+ "editthispage": "Padécéŋiki iyé leppa",
+ "create-this-page": "Ebbuiki leppa iyé",
+ "delete": "Peddé",
+ "deletethispage": "Peddé iyé leppa",
+ "protect": "Accalinruŋi",
+ "protect_change": "pinra",
+ "protectthispage": "Accalinruŋi leppa iyyé",
+ "unprotect": "Téccalinruŋi",
+ "newpage": "Leppa baru",
+ "talkpage": "Bicara iyé leppa",
+ "talkpagelinktext": "Bicara",
+ "specialpage": "Leppa spésiala",
+ "personaltools": "Tool sialé-alé",
+ "articlepage": "Ita lontara",
+ "talk": "Bicara",
+ "toolbox": "Toolbox",
+ "userpage": "Ita leppa papaké",
+ "projectpage": "Ita leppa proyék",
+ "imagepage": "Ita leppa rapaŋ",
+ "mediawikipage": "Ita leppa méséje",
+ "templatepage": "Ita leppa templata",
+ "viewhelppage": "Ita leppa panginriŋ",
+ "categorypage": "Ita leppa kategori",
+ "viewtalkpage": "Ita leppa bicara",
+ "redirectedfrom": "(Riredirect polé $1)",
+ "redirectpagesub": "Leppa redirect",
+ "jumpto": "Luppe lao:",
+ "jumptosearch": "sappa",
+ "aboutsite": "Tentang {{SITENAME}}",
+ "currentevents": "Accanjingeŋ kokkoro",
+ "currentevents-url": "Project:Accanjingeŋ kokkoro",
+ "disclaimers": "Diseklaima",
+ "edithelp": "Paŋinriŋ mapadécéŋ",
+ "mainpage": "Leppa Indoë",
+ "mainpage-description": "Leppa Indoë",
+ "portal": "Portal komunitas",
+ "editsection": "padécéŋ",
+ "editold": "padécéŋ",
+ "viewsourceold": "ita sumber",
+ "editlink": "padécéŋ",
+ "viewsourcelink": "ita sumber",
+ "editsectionhint": "Padécéŋ kajuru: $1",
+ "nstab-main": "Leppa",
+ "nstab-user": "Leppa papaké",
+ "nstab-media": "Leppa média",
+ "nstab-special": "Leppa spésiala",
+ "nstab-project": "Proyek",
+ "nstab-image": "Rapang",
+ "nstab-mediawiki": "Pappaseŋ",
+ "nstab-template": "Templata",
+ "nstab-help": "Paŋinriŋ",
+ "nstab-category": "Kategori",
+ "nosuchspecialpage": "Iyaro leppa spésiala dé'na eŋka",
+ "error": "Éro",
+ "databaseerror": "Éro databése",
+ "readonly": "Databése rikonci",
+ "missingarticle-diff": "(Beda: $1, $2)",
+ "internalerror": "Éro internal",
+ "internalerror_info": "Éro internal: $1",
+ "badtitle": "Judul dek essa",
+ "viewsource": "Ita sumber",
+ "virus-unknownscanner": "Antivirus dé' riisseŋ:",
+ "yourname": "Aseŋ papaké:",
+ "yourpassword": "Adacili:",
+ "login": "log attama",
+ "nav-login-createaccount": "Log attama / ebbu akun",
+ "userlogin": "Log attama / ebbu akun",
+ "logout": "Log essu",
+ "userlogout": "Log essu",
+ "notloggedin": "Déppa log attama",
+ "nologin": "Dé' gaga akaun? '''$1'''.",
+ "nologinlink": "Ebbu akun",
+ "createaccount": "Ebbu akun",
+ "gotaccount": "Purani eŋka akun? '''$1'''.",
+ "gotaccountlink": "Log attama",
+ "loginerror": "Éro log attama",
+ "mailmypassword": "E-mail adacili baru",
+ "oldpassword": "Pasewodo matoa:",
+ "bold_tip": "Teks maumpek",
+ "italic_tip": "Teks Italik",
+ "extlink_tip": "Link risaliweŋ (jangan lupa awalan http:// )",
+ "savearticle": "Taro leppa",
+ "preview": "Pribiu",
+ "showpreview": "Ita pribiu",
+ "showdiff": "Mita perubahan",
+ "summary-preview": "Pribiu summary:",
+ "blockedtitle": "Papaké riblok",
+ "accmailtitle": "Ada sandi ni riantarak.",
+ "accmailtext": "Ada sandi \"$1\" riantarak ri $2.",
+ "anontalkpagetext": "----''Ini adalah halaman diskusi untuk pengguna anonim yang belum membuat rekening atau tidak menggunakannya. Karena tidak membuat rekening, kami terpaksa memakai alamat IP untuk mengenalinya. Alamat IP seperti ini dapat dipakai oleh beberapa pengguna yang berbeda. Jika Anda adalah pengguna anonim dan merasa mendapatkan komentar-komentar yang tidak berkaitan dengan anda, kami anjurkan untuk [[Special:UserLogin|membuat rekening atau masuk log]] untuk menghindari kerancuan dengan pengguna anonim lain.''",
+ "editing": "Mapadécéŋ $1",
+ "previousrevision": "←Revisi riolo",
+ "currentrevisionlink": "Revisi tannapa",
+ "page_first": "séuwani",
+ "histfirst": "Poŋ loa",
+ "histlast": "Poŋ nappa",
+ "historysize": "($1 {{PLURAL:$1|bita|bita}})",
+ "historyempty": "(kapa)",
+ "history-feed-item-nocomment": "$1 ri $2",
+ "rev-deleted-comment": "(komentar ripeddé)",
+ "rev-deleted-user": "(ripeddéni aseŋna papakeë)",
+ "rev-deleted-event": "(log gau ripeddéni)",
+ "rev-delundel": "pakitaï/tapo'",
+ "logdelete-selected": "{{PLURAL:$1|Log|Log-log}} ripilé:",
+ "revdelete-hide-text": "Tapoïki text revisië",
+ "revdelete-hide-comment": "Tapo komentar mapadecéŋ",
+ "revdelete-hide-user": "Tapo aseŋ papakéna/IPna papadéceŋë",
+ "revdelete-log": "Saba:",
+ "editundo": "undo",
+ "viewprevnext": "Ita ($1 {{int:pipe-separator}} $2) ($3)",
+ "search-result-size": "$1 ({{PLURAL:$2|1 ada|$2 ada}})",
+ "search-redirect": "(redirect $1)",
+ "mypreferences": "Bérékkeŋeŋna iyya",
+ "prefs-watchlist": "Watchlist",
+ "prefs-misc": "Misc",
+ "saveprefs": "Taro",
+ "prefs-editing": "Mapadécéŋ",
+ "searchresultshead": "Masappa",
+ "youremail": "E-mail:",
+ "username": "Aseŋ papaké:",
+ "email": "E-mail",
+ "group-sysop": "Puŋgawa",
+ "group-all": "(sininna)",
+ "group-user-member": "{{GENDER:$1|Pappaké}}",
+ "group-sysop-member": "Puŋgawa",
+ "grouppage-user": "{{ns:project}}:Pappaké",
+ "grouppage-sysop": "{{ns:project}}:Puŋgawa",
+ "right-read": "Mabbaca leppa",
+ "right-edit": "Mappadécéŋi leppa",
+ "recentchanges": "Pappakinra tanappa",
+ "rcshowhidebots": "$1 bot",
+ "rcshowhideliu": "$1 papaké mattama' log",
+ "rcshowhideanons": "$1 papaké anon",
+ "diff": "beda",
+ "hide": "Tapok",
+ "minoreditletter": "k",
+ "newpageletter": "B",
+ "boteditletter": "b",
+ "recentchangeslinked": "Pappakapinra terkait",
+ "recentchangeslinked-feed": "Pappakapinra terkait",
+ "recentchangeslinked-toolbox": "Pappakapinra terkait",
+ "upload": "Lureng berkas",
+ "uploadbtn": "Lureng berkas",
+ "listfiles_name": "Aseŋ",
+ "file-anchor-link": "Rapang",
+ "filehist-user": "Papaké",
+ "filehist-dimensions": "Dimensi",
+ "imagelinks": "Liŋke",
+ "filedelete": "Mapeddé $1",
+ "filedelete-legend": "Mapeddé berkas",
+ "filedelete-intro": "Iko purani mapeddé '''[[Media:$1|$1]]'''.",
+ "filedelete-submit": "Peddé",
+ "filedelete-success": "'''$1''' purani ripeddé.",
+ "filedelete-success-old": "Berkas '''[[Media:$1|$1]]''' versi $3, $2 purani ripeddé.",
+ "filedelete-nofile": "'''$1''' dé'na eŋka.",
+ "mimesearch": "Assapparaŋ MIME",
+ "mimetype": "Tipe MIME:",
+ "download": "unduh",
+ "randompage": "Leppa random",
+ "randompage-nopages": "Degaga leppa rilaleŋ iyyé namespaceë.",
+ "statistics-articles": "Leppa liseë",
+ "statistics-pages": "Leppaë",
+ "statistics-files": "File-file nalise menré",
+ "ancientpages": "Leppa talloa",
+ "move": "Paleccé",
+ "movethispage": "Paleccé leppa iyyé",
+ "specialloguserlabel": "Papaké:",
+ "log": "Log",
+ "all-logs-page": "Maneŋ log",
+ "allpages": "Maneng halamang",
+ "allpagesfrom": "Mappaitang halamang-halamang rimulai:",
+ "allarticles": "Sininna leppa",
+ "allinnamespace": "Maneŋ leppa (namespace $1)",
+ "allpagessubmit": "Lanre",
+ "allpagesprefix": "Mappaitang halamang-halamang éngkalinga awang:",
+ "categories": "Maneŋ kategori",
+ "addedwatchtext": "Halamang \"[[:$1]]\" ni ritamba ri ida [[Special:Watchlist|watchlist]].\nHalamang bicara éréngé gabungan halamang bicara pada wettu depan didaftarkan koe,\néréngé halamang akan wessi '''umpek''' ri [[Special:RecentChanges|daftar pinra tanappa]] barak lebih lemmak ita.\n\nApak ida ronnak mappedde halamang édé ri daftar jagaan, klik \"Mangedda jaga\" pada kolom ri sedde.",
+ "watch": "Ampi",
+ "unwatch": "Tenriampi",
+ "actioncomplete": "Proses makkapo",
+ "dellogpage": "Log peddé-peddé",
+ "prot_1movedto2": "[[$1]] ésuk ri [[$2]]",
+ "blanknamespace": "(Utama)",
+ "sp-contributions-talk": "Bicara",
+ "whatlinkshere": "Pranala ri leppa iyéwé",
+ "whatlinkshere-page": "Leppa:",
+ "whatlinkshere-links": "← liŋke",
+ "ipblocklist-submit": "Sappa",
+ "blocklink": "blok",
+ "contribslink": "kontrib",
+ "articleexists": "Leppa béla ida pile ni ujuk, a dek essa.\nSilakan pile aseng laing.",
+ "movelogpage": "Log leccé",
+ "movereason": "Saba:",
+ "delete_and_move": "Peddé nappa paleccé",
+ "delete_and_move_text": "==Mapeddé riperelu==\nLeppa destinasi \"[[:$1]]\" purani eŋka.\nEloko peddéï supaya weddiŋi mapalecé?",
+ "delete_and_move_confirm": "Iyé', peddé iyaro leppa",
+ "delete_and_move_reason": "Ripeddé supaya weddiŋi mapalecé",
+ "immobile-source-namespace": "Leppa-leppa rilaleŋna namespace \"$1\"ë de'na ullé ripaleccé",
+ "immobile-source-page": "Iyyedé leppaë de'na ullé ripaleccé.",
+ "allmessages": "Maneng pappaseng",
+ "allmessagesname": "Aseng",
+ "allmessagesdefault": "Teks totok",
+ "allmessagescurrent": "Teks kokkoro",
+ "tooltip-pt-userpage": "Leppa papaké iya'",
+ "tooltip-pt-mytalk": "Leppa bicara iya'",
+ "tooltip-pt-preferences": "Preferencena iya'",
+ "tooltip-pt-logout": "Log maessu",
+ "tooltip-ca-talk": "Pabicarana iyé leppa",
+ "tooltip-ca-move": "Paléccé leppa édé",
+ "tooltip-search": "Sappa ri {{SITENAME}}",
+ "tooltip-search-go": "Lao ri leppa aseŋna pappada iyyé rekko eŋkaï",
+ "tooltip-n-mainpage": "Lao ri Leppa Indoë",
+ "tooltip-ca-nstab-special": "Iyanaéwé séuwa leppa spésiala', dé'na idi' ullé padécéŋiki",
+ "anonymous": "Pabbuak anonim {{SITENAME}}",
+ "imagemaxsize": "Gangkai rapang pada keterangan rapang ri halamang hingga:",
+ "ilsubmit": "Sappa",
+ "namespacesall": "maneŋ",
+ "monthsall": "maneŋ",
+ "imgmultigo": "Lao!",
+ "imgmultigoto": "Lao ri leppa $1",
+ "ascending_abbrev": "énré",
+ "descending_abbrev": "no",
+ "table_pager_first": "Leppa séuwani",
+ "table_pager_limit_submit": "Lao",
+ "autosumm-replace": "Masullé leppaë lao '$1'",
+ "autosumm-new": "Leppa baru: '$1'",
+ "size-bytes": "$1 B",
+ "size-kilobytes": "$1 KB",
+ "size-megabytes": "$1 MB",
+ "size-gigabytes": "$1 GB",
+ "version-specialpages": "Leppa spésiala",
+ "specialpages": "Leppa spésiala",
+ "specialpages-note": "* Leppa spésiala normal\n* <strong class=\"mw-specialpagerestricted\">Leppa spésiala terbatas</strong>",
+ "specialpages-group-other": "Leppa spésiala laiŋë",
+ "specialpages-group-login": "Log attama / mendaftar",
+ "specialpages-group-changes": "Pinrana tanappaë sibawa logeë",
+ "specialpages-group-users": "Papaké sibawa hak-hak",
+ "specialpages-group-pages": "Sininna leppaë",
+ "specialpages-group-pagetools": "Tool leppaë",
+ "specialpages-group-wiki": "Data sibawa tool wiki",
+ "specialpages-group-spam": "Tool spam",
+ "blankpage": "Leppa kosoŋë"
}
diff --git a/languages/i18n/bxr.json b/languages/i18n/bxr.json
index 65888a7e..f036e886 100644
--- a/languages/i18n/bxr.json
+++ b/languages/i18n/bxr.json
@@ -1,279 +1,288 @@
{
- "@metadata": {
- "authors": [
- "Amire80",
- "Bjargal",
- "Elvonudinium",
- "Korol Bumi",
- "Soul Train",
- "Губин Михаил",
- "ОйЛ"
- ]
- },
- "tog-underline": "Холбооһо доогуурнь зураха:",
- "tog-watchcreations": "Минии үүдхэһэн хуудаһа болон ашаалһан файлыем хинаха жагсаалтада оруула",
- "tog-watchdefault": "Минии заһаһан хуудаһа болон файлыем хинаха жагсаалтада оруула",
- "tog-watchmoves": "Минии зөөһэн хуудаһа болон файлыем хинаха жагсаалтада оруула",
- "tog-watchdeletion": "Минии усадхаһан хуудаһа болон файлыем хинаха жагсаалтада оруула",
- "tog-minordefault": "Бүхы заһабариие бага зэргын гэжэ үгэгдэмэлөөр тэмдэглэ",
- "tog-previewontop": "Уридшалан харахые заһабарилха талбарай урда үзүүлэ",
- "tog-previewonfirst": "Уридшалан харахые эхилжэ заһаха үедэ үзүүлэ",
- "underline-always": "хододоол",
- "underline-never": "хэзээшье",
- "sunday": "Няма",
- "monday": "Дабаа",
- "tuesday": "Мягмар",
- "wednesday": "Һагба",
- "thursday": "Пүрбэ",
- "friday": "Баасан",
- "saturday": "Бямба",
- "sun": "Ня",
- "mon": "Да",
- "tue": "Мя",
- "wed": "Һа",
- "thu": "Пү",
- "fri": "Ба",
- "sat": "Бя",
- "january": "Нэгэдүгээр һара",
- "february": "Хоёрдугаар һара",
- "march": "Гурбадугаар һара",
- "april": "Дүрбэдүгээр һара",
- "may_long": "Табадугаар һара",
- "june": "Зургадугаар һара",
- "july": "Долодугаар һара",
- "august": "Наймадугаар һара",
- "september": "Юһэдүгээр һара",
- "october": "Арбадугаар һара",
- "november": "Арбаннэгэдүгээр һара",
- "december": "Арбанхоёрдугаар һара",
- "january-gen": "Нэгэдүгээр һарын",
- "february-gen": "Хоёрдугаар һарын",
- "march-gen": "Гурбадугаар һарын",
- "april-gen": "Дүрбэдүгээр һарын",
- "may-gen": "Табадугаар һарын",
- "june-gen": "Зургадугаар һарын",
- "july-gen": "Долодугаар һарын",
- "august-gen": "Наймадугаар һарын",
- "september-gen": "Юһэдүгээр һарын",
- "october-gen": "Арбадугаар һарын",
- "november-gen": "Арбаннэгэдүгээр һарын",
- "december-gen": "Арбанхоёрдугаар һарын",
- "jan": "1 һара",
- "feb": "2 һара",
- "mar": "3 һара",
- "apr": "4 һара",
- "may": "5 һара",
- "jun": "6 һара",
- "jul": "7 һара",
- "aug": "8 һара",
- "sep": "9 һара",
- "oct": "10 һара",
- "nov": "11 һара",
- "dec": "12 һара",
- "january-date": "1 һарын $1",
- "february-date": "2 һарын $1",
- "march-date": "3 һарын $1",
- "april-date": "4 һарын $1",
- "may-date": "5 һарын $1",
- "june-date": "6 һарын $1",
- "july-date": "7 һарын $1",
- "august-date": "8 һарын $1",
- "september-date": "9 һарын $1",
- "october-date": "10 һарын $1",
- "november-date": "11 һарын $1",
- "december-date": "12 һарын $1",
- "category_header": "\"$1\" категориин үгүүлэлнүүд",
- "cancel": "Болихо",
- "moredotdotdot": "Үшөө...",
- "morenotlisted": "Энэ жагсаалта дүүргэһэнгүй.",
- "mypage": "Хуудаһан",
- "mytalk": "Хэлэлсэл",
- "anontalk": "Энэ IP адресаарнь хэлэхэ",
- "navigation": "Залуурдалга",
- "and": "&#32;ба",
- "qbfind": "Хайха",
- "qbedit": "Заһабарилха",
- "vector-action-addsection": "Һэдэб нэмэхэ",
- "vector-action-delete": "Усадхаха",
- "vector-view-create": "Үүдхэхэ",
- "vector-view-edit": "Заһабарилха",
- "vector-view-history": "Түүхые хараха",
- "vector-view-view": "Уншаха",
- "vector-view-viewsource": "эшэ үндэһэндэнь хандаха",
- "actions": "γйлэ",
- "variants": "Хубилбари",
- "navigation-heading": "Тамаралгын меню",
- "errorpagetitle": "Алдуу",
- "tagline": "{{SITENAME}} сайтһаа мэдээлэл",
- "help": "Туһаламжа",
- "search": "Хайха",
- "searchbutton": "Хайлта",
- "go": "Ябаха",
- "searcharticle": "Ябаха",
- "history": "Хуудаһанай түүхэ",
- "history_short": "Түүхэ",
- "printableversion": "Хэблэхэ хубилбари",
- "permalink": "Үргэлжын холбооһон",
- "print": "Хэблэхэ",
- "view": "Харуулха",
- "edit": "Заһабарилха",
- "create": "Үүдхэхэ",
- "delete": "Усадхаха",
- "protect": "Хамгаалха",
- "protect_change": "Хубилалга",
- "newpage": "Шэнэ хуудаһан",
- "talkpage": "Тус хуудаһа хэлэлсэхэ",
- "talkpagelinktext": "Хэлэлсэхэ",
- "specialpage": "Тусхай хуудаһан",
- "personaltools": "Хубиин хэрэгсэлнүүд",
- "postcomment": "Шэнэ бүлэг",
- "talk": "Хэлэлсэхэ",
- "views": "Үзэһэн",
- "toolbox": "Багажа зэбсэг",
- "projectpage": "Түлэблэлгын хуудаһые хараха",
- "otherlanguages": "Бусад хэлээр",
- "jumpto": "Шууд ошохо:",
- "jumptonavigation": "тамаралга",
- "jumptosearch": "хайха",
- "pool-errorunknown": "Танигдаагүй алдуу",
- "aboutsite": "{{SITENAME}} тухай",
- "aboutpage": "Project:Түлэблэлгын тухай",
- "currentevents": "Мүнөө боложо байгаа үйлэ ябадал",
- "currentevents-url": "Project:Һонин мэдээн",
- "disclaimers": "Татагалзалнууд",
- "disclaimerpage": "Project:Ниитэ татагалзал",
- "mainpage": "Нюур хуудаһан",
- "mainpage-description": "Нюур хуудаһан",
- "portal": "Хурал",
- "portal-url": "Project:Хурал",
- "privacy": "Хубиин мэдээлэлэй талаар баримталал",
- "privacypage": "Project:Хубиин мэдээлэлэй талаар баримталал",
- "ok": "За",
- "retrievedfrom": "\"$1\" холбооһоо абагдаһан",
- "editsection": "заһабарилха",
- "editold": "заһабарилха",
- "viewsourceold": "эшэ үндэһэндэнь хандаха",
- "editlink": "заһабарилха",
- "viewsourcelink": "эшэ үндэһэндэнь хандаха",
- "editsectionhint": "$1 гэһэн бүлэг заһаха",
- "toc": "Агуулга",
- "showtoc": "харуулха",
- "hidetoc": "нюуха",
- "collapsible-collapse": "Нюуха",
- "collapsible-expand": "Дэлгээхэ",
- "site-atom-feed": "$1 Атом фиид",
- "red-link-title": "$1 (хуудаһан үгы байна)",
- "nstab-main": "Хуудаһан",
- "nstab-user": "Хэрэглэгшын хуудаһан",
- "nstab-media": "Медиагай хуудаһан",
- "nstab-special": "Тусхай хуудаһан",
- "nstab-project": "Түлэблэлгын хуудаһан",
- "nstab-image": "Файл",
- "nstab-mediawiki": "Бэшэг",
- "nstab-template": "Загбар",
- "nstab-help": "Туһаламжын хуудаһан",
- "nstab-category": "Категори",
- "error": "Алдуу",
- "internalerror": "Доторой алдуу",
- "internalerror_info": "Доторой алдуу: $1",
- "welcomeuser": "Морилжо хайрлыт, $1!",
- "welcomecreation-msg": "Танай данса үүдхэһэн байна.\nТа танай {{SITENAME}} [[Special:Preferences|preferences]]-ые өөршэлхэ боломжотойт.",
- "yourname": "Хэрэглэгшын нэрэ:",
- "userlogin-yourname": "Хэрэглэгшын нэрэ:",
- "userlogin-yourname-ph": "Танай хэрэглэгшын нэрые оруулагты",
- "createacct-another-username-ph": "Хэрэглэгшын нэрые оруулагты",
- "yourpassword": "Нюуса үгэ:",
- "login": "Нэбтэрхэ",
- "nav-login-createaccount": "Нэбтэрхэ / данса үүдхэхэ",
- "userlogin": "Нэбтэрхэ / данса үүдхэхэ",
- "logout": "Гараха",
- "userlogout": "Гараха",
- "createaccount": "Данса үүдхэхэ",
- "gotaccountlink": "Нэбтэрхэ",
- "loginlanguagelabel": "Хэлэн: $1",
- "savearticle": "Хуудаһые хадагалха",
- "showpreview": "Уридшалан хараха",
- "showdiff": "Хубилалтые харуул",
- "newarticle": "(Шэнэ)",
- "template-protected": "(хамгаалалтатай)",
- "permissionserrorstext-withaction": "Та доро тодорхойлһон $1 ушар шалтагаанһаа боложо, $2 эрхэгүйт.",
- "rev-delundel": "харуулха/нюуха",
- "revdel-restore": "харагдасыень хубилгаха",
- "editundo": "болюулха",
- "searchmenu-new": "'''Энэ викидэ \"[[:$1]]\" гэһэн хуудаһа үүсхэхэ!''' Мүн олдоһон ондоо хуудаһа харагты.\"",
- "searchprofile-articles": "Агуулгын хуудаһанууд",
- "searchprofile-images-tooltip": "Файл хайха",
- "search-result-size": "$1 (ниитэ $2 үгэ�)",
- "mypreferences": "Тааруулга",
- "prefs-datetime": "Огноо ба саг",
- "youremail": "Сахим шуудан:",
- "yourrealname": "Бодото нэрэ:",
- "yourlanguage": "Хэлэн:",
- "yourgender": "Хүйһыетнай хэн гэжэ заабал болохоб?",
- "gender-male": "Эрэ хүн",
- "action-edit": "энэ хуудаһа заһабарилха",
- "recentchanges": "Һүүлшын хубилалта",
- "diff": "илгаа",
- "hist": "түүхэ",
- "hide": "Нюуха",
- "recentchangeslinked": "Холбогдохо хубилалта",
- "recentchangeslinked-toolbox": "Холбогдохо хубилалта",
- "upload": "Файл ашаалха",
- "license-header": "Лицензи",
- "file-anchor-link": "Файл",
- "filehist": "Файлын түүхэ",
- "filehist-datetime": "Огноо/Саг",
- "filehist-user": "Хэрэглэгшэ",
- "randompage": "Һанамсаргүй хуудаһан",
- "statistics": "Тоо бүридхэл",
- "nbytes": "$1 {{PLURAL:$1|байт|байтууд}}",
- "newpages": "Шэнэ хуудаһанууд",
- "ancientpages": "Хуушарһан хуудаһан",
- "move": "Шэлжүүлхэ",
- "log": "Логнууд",
- "allpages": "Бүхы хуудаһан",
- "allarticles": "Бүхы хуудаһан",
- "categories": "Категоринууд",
- "mywatchlist": "Ажаглаха зүйл",
- "watch": "Ажаглаха",
- "undeletelink": "хараха/һэргээхэ",
- "blanknamespace": "(Гол)",
- "mycontris": "Минии оруулһан зүйл",
- "sp-contributions-talk": "Хэлэлсэл",
- "whatlinkshere": "Эндэ холбогдоһон хуудаһанууд",
- "whatlinkshere-page": "Хуудаһан:",
- "block": "Блок",
- "change-blocklink": "багса хубилгаха",
- "contribslink": "γйлэ",
- "revertmove": "һэргээхэ",
- "allmessages": "Бүхы зурбас",
- "allmessagesname": "Нэрэ",
- "allmessages-language": "Хэлэн:",
- "thumbnail-more": "Томоруулха",
- "tooltip-pt-login": "Бидэ та нэбтэрхые хүсэнэбди; гэбэшье, та заататай байна.",
- "tooltip-pt-logout": "Гараха",
- "tooltip-ca-talk": "Агуулгын хуудаһанай хэлэлсэл",
- "tooltip-ca-edit": "Та энэ хуудаһа заһабарилжа боломжотой. \"Уридшалан үзэлхэ\" гэһэн тобшые хэрэглээрэй.",
- "tooltip-ca-addsection": "Шэнэ хэһэг эхилүүлхэ",
- "tooltip-ca-history": "Энэ хуудаһанай үмэнэхи заһабаринууд",
- "tooltip-ca-delete": "энэ хуудаһые усадхаха",
- "tooltip-search": "{{SITENAME}} сайтһаа бэдэрхэ",
- "tooltip-search-fulltext": "Хуудаһанһаа бэдэрхэ бэшэбэри",
- "tooltip-p-logo": "Нюур хуудаһанда ошохо",
- "tooltip-n-mainpage": "Нюур хуудаһанда ошохо",
- "tooltip-n-mainpage-description": "Нюур хуудаһанда ошохо",
- "tooltip-n-portal": "Түһэл, өөрын оруулалта, туһалбари тухай мэдээлэл",
- "tooltip-n-currentevents": "Мүнөө боложо байгаа үйлэ ябадал тухай һониниие дуулаха",
- "tooltip-n-recentchanges": "Тус Викиин һүүлшын хубилалтанууд",
- "tooltip-n-randompage": "Гэнтын хуудаһые нээхэ",
- "tooltip-n-help": "Туһалалсалгые олохо газар",
- "tooltip-t-whatlinkshere": "Эндэ холбогдоһон хуудаһануудай жагсаалта",
- "tooltip-t-recentchangeslinked": "Энэ хуудаһаһаа холбоогдоһон хуудаһуудай шэнэ хубилалтууд",
- "tooltip-feed-atom": "Тус хуудаһанай Атом фиид",
- "tooltip-t-upload": "Файл ашаалха",
- "tooltip-t-specialpages": "Бүхы тусхай хуудаһанай жагсаалта",
- "tooltip-t-print": "Энэ хуудаһанай хэблэхэ хубилбари",
- "tooltip-ca-nstab-main": "Үгүүлэлэй хуудаһые үзэхэ",
- "exif-languagecode": "Хэлэн",
- "specialpages": "Тусхай хуудаһан"
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Bjargal",
+ "Elvonudinium",
+ "Korol Bumi",
+ "Soul Train",
+ "Губин Михаил",
+ "ОйЛ"
+ ]
+ },
+ "tog-underline": "Холбооһо доогуурнь зураха:",
+ "tog-watchcreations": "Минии үүдхэһэн хуудаһа болон ашаалһан файлыем хинаха жагсаалтада оруула",
+ "tog-watchdefault": "Минии заһаһан хуудаһа болон файлыем хинаха жагсаалтада оруула",
+ "tog-watchmoves": "Минии зөөһэн хуудаһа болон файлыем хинаха жагсаалтада оруула",
+ "tog-watchdeletion": "Минии усадхаһан хуудаһа болон файлыем хинаха жагсаалтада оруула",
+ "tog-minordefault": "Бүхы заһабариие бага зэргын гэжэ үгэгдэмэлөөр тэмдэглэ",
+ "tog-previewontop": "Уридшалан харахые заһабарилха талбарай урда үзүүлэ",
+ "tog-previewonfirst": "Уридшалан харахые эхилжэ заһаха үедэ үзүүлэ",
+ "underline-always": "хододоол",
+ "underline-never": "хэзээшье",
+ "sunday": "Няма",
+ "monday": "Дабаа",
+ "tuesday": "Мягмар",
+ "wednesday": "Һагба",
+ "thursday": "Пүрбэ",
+ "friday": "Баасан",
+ "saturday": "Бямба",
+ "sun": "Ня",
+ "mon": "Да",
+ "tue": "Мя",
+ "wed": "Һа",
+ "thu": "Пү",
+ "fri": "Ба",
+ "sat": "Бя",
+ "january": "Нэгэдүгээр һара",
+ "february": "Хоёрдугаар һара",
+ "march": "Гурбадугаар һара",
+ "april": "Дүрбэдүгээр һара",
+ "may_long": "Табадугаар һара",
+ "june": "Зургадугаар һара",
+ "july": "Долодугаар һара",
+ "august": "Наймадугаар һара",
+ "september": "Юһэдүгээр һара",
+ "october": "Арбадугаар һара",
+ "november": "Арбаннэгэдүгээр һара",
+ "december": "Арбанхоёрдугаар һара",
+ "january-gen": "Нэгэдүгээр һарын",
+ "february-gen": "Хоёрдугаар һарын",
+ "march-gen": "Гурбадугаар һарын",
+ "april-gen": "Дүрбэдүгээр һарын",
+ "may-gen": "Табадугаар һарын",
+ "june-gen": "Зургадугаар һарын",
+ "july-gen": "Долодугаар һарын",
+ "august-gen": "Наймадугаар һарын",
+ "september-gen": "Юһэдүгээр һарын",
+ "october-gen": "Арбадугаар һарын",
+ "november-gen": "Арбаннэгэдүгээр һарын",
+ "december-gen": "Арбанхоёрдугаар һарын",
+ "jan": "1 һара",
+ "feb": "2 һара",
+ "mar": "3 һара",
+ "apr": "4 һара",
+ "may": "5 һара",
+ "jun": "6 һара",
+ "jul": "7 һара",
+ "aug": "8 һара",
+ "sep": "9 һара",
+ "oct": "10 һара",
+ "nov": "11 һара",
+ "dec": "12 һара",
+ "january-date": "1 һарын $1",
+ "february-date": "2 һарын $1",
+ "march-date": "3 һарын $1",
+ "april-date": "4 һарын $1",
+ "may-date": "5 һарын $1",
+ "june-date": "6 һарын $1",
+ "july-date": "7 һарын $1",
+ "august-date": "8 һарын $1",
+ "september-date": "9 һарын $1",
+ "october-date": "10 һарын $1",
+ "november-date": "11 һарын $1",
+ "december-date": "12 һарын $1",
+ "pagecategories": "{{PLURAL:$1|Анги}}",
+ "category_header": "\"$1\" ангиин үгүүлэлнүүд",
+ "hidden-categories": "{{PLURAL:$1|Нюуса анги}}",
+ "cancel": "Болихо",
+ "moredotdotdot": "Үшөө...",
+ "morenotlisted": "Энэ жагсаалта дүүргэһэнгүй.",
+ "mypage": "Хуудаһан",
+ "mytalk": "Хэлэлсэл",
+ "anontalk": "Энэ IP адресаарнь хэлэхэ",
+ "navigation": "Залуурдалга",
+ "and": "&#32;ба",
+ "qbfind": "Хайха",
+ "qbedit": "Заһабарилха",
+ "actions": "γйлэ",
+ "variants": "Хубилбари",
+ "navigation-heading": "Тамаралгын меню",
+ "errorpagetitle": "Алдуу",
+ "tagline": "{{SITENAME}} сайтһаа мэдээлэл",
+ "help": "Туһаламжа",
+ "search": "Хайха",
+ "searchbutton": "Хайлта",
+ "go": "Ябаха",
+ "searcharticle": "Ябаха",
+ "history": "Хуудаһанай түүхэ",
+ "history_short": "Түүхэ",
+ "printableversion": "Хэблэхэ хубилбари",
+ "permalink": "Үргэлжын холбооһон",
+ "print": "Хэблэхэ",
+ "view": "Харуулха",
+ "edit": "Заһабарилха",
+ "create": "Үүдхэхэ",
+ "delete": "Усадхаха",
+ "protect": "Хамгаалха",
+ "protect_change": "Хубилалга",
+ "newpage": "Шэнэ хуудаһан",
+ "talkpage": "Тус хуудаһа хэлэлсэхэ",
+ "talkpagelinktext": "Хэлэлсэхэ",
+ "specialpage": "Тусхай хуудаһан",
+ "personaltools": "Хубиин хэрэгсэлнүүд",
+ "talk": "Хэлэлсэхэ",
+ "views": "Үзэһэн",
+ "toolbox": "Багажа зэбсэг",
+ "projectpage": "Түлэблигэй хуудаһые хараха",
+ "otherlanguages": "Бусад хэлээр",
+ "lastmodifiedat": "Энэ хуудаһанай эгээн һүүлшын хубилалга: $2, $1.",
+ "jumpto": "Шууд ошохо:",
+ "jumptonavigation": "тамаралга",
+ "jumptosearch": "хайха",
+ "pool-errorunknown": "Танигдаагүй алдуу",
+ "aboutsite": "{{SITENAME}} тухай",
+ "aboutpage": "Project:Түлэблиг тухай",
+ "currentevents": "Мүнөө боложо байгаа үйлэ ябадал",
+ "currentevents-url": "Project:Һонин мэдээн",
+ "disclaimers": "Татагалзалнууд",
+ "disclaimerpage": "Project:Ниитэ татагалзал",
+ "mainpage": "Нюур хуудаһан",
+ "mainpage-description": "Нюур хуудаһан",
+ "portal": "Хурал",
+ "portal-url": "Project:Хурал",
+ "privacy": "Хубиин мэдээлэлэй талаар баримталал",
+ "privacypage": "Project:Хубиин мэдээлэлэй талаар баримталал",
+ "ok": "За",
+ "retrievedfrom": "\"$1\" холбооһоо абагдаһан",
+ "editsection": "заһабарилха",
+ "editold": "заһабарилха",
+ "viewsourceold": "эшэ үндэһэндэнь хандаха",
+ "editlink": "заһабарилха",
+ "viewsourcelink": "эшэ үндэһэндэнь хандаха",
+ "editsectionhint": "$1 гэһэн бүлэг заһаха",
+ "toc": "Агуулга",
+ "showtoc": "харуулха",
+ "hidetoc": "нюуха",
+ "collapsible-collapse": "Нюуха",
+ "collapsible-expand": "Дэлгээхэ",
+ "site-atom-feed": "$1 Атом фиид",
+ "red-link-title": "$1 (хуудаһан үгы байна)",
+ "nstab-main": "Хуудаһан",
+ "nstab-user": "Хэрэглэгшын хуудаһан",
+ "nstab-media": "Медиагай хуудаһан",
+ "nstab-special": "Тусхай хуудаһан",
+ "nstab-project": "Түлэблигэй хуудаһан",
+ "nstab-image": "Файл",
+ "nstab-mediawiki": "Бэшэг",
+ "nstab-template": "Загбар",
+ "nstab-help": "Туһаламжын хуудаһан",
+ "nstab-category": "Анги",
+ "error": "Алдуу",
+ "internalerror": "Доторой алдуу",
+ "internalerror_info": "Доторой алдуу: $1",
+ "welcomeuser": "Морилжо хайрлыт, $1!",
+ "welcomecreation-msg": "Танай данса үүдхэһэн байна.\nТа танай {{SITENAME}} [[Special:Preferences|preferences]]-ые өөршэлхэ боломжотойт.",
+ "yourname": "Хэрэглэгшын нэрэ:",
+ "userlogin-yourname": "Хэрэглэгшын нэрэ:",
+ "userlogin-yourname-ph": "Танай хэрэглэгшын нэрые оруулагты",
+ "createacct-another-username-ph": "Хэрэглэгшын нэрые оруулагты",
+ "yourpassword": "Нюуса үгэ:",
+ "login": "Нэбтэрхэ",
+ "nav-login-createaccount": "Нэбтэрхэ / данса үүдхэхэ",
+ "userlogin": "Нэбтэрхэ / данса үүдхэхэ",
+ "logout": "Гараха",
+ "userlogout": "Гараха",
+ "createaccount": "Данса үүдхэхэ",
+ "gotaccountlink": "Нэбтэрхэ",
+ "loginlanguagelabel": "Хэлэн: $1",
+ "pt-userlogout": "Гараха",
+ "watchthis": "Энэ хуудаһые хинаха",
+ "savearticle": "Хуудаһые хадагалха",
+ "showpreview": "Уридшалан хараха",
+ "showdiff": "Хубилалтые харуул",
+ "newarticle": "(Шэнэ)",
+ "editing": "«$1» гэһэн хуудаһые заһабарилжа байна",
+ "creating": "«$1» хуудаһые үүсхэжэ байна",
+ "editingsection": "«$1» гэһэн хуудаһанай бүлэгые заһабарилжа байна",
+ "template-protected": "(хамгаалалтатай)",
+ "permissionserrorstext-withaction": "Та доро тодорхойлһон $1 ушар шалтагаанһаа боложо, $2 эрхэгүйт.",
+ "rev-delundel": "харуулха/нюуха",
+ "revdel-restore": "харагдасыень хубилгаха",
+ "history-title": "«$1» гэһэн хуудаһанай хинаһан түүхэ",
+ "editundo": "болюулха",
+ "searchmenu-new": "<strong>Энэ викидэ \"[[:$1]]\" гэһэн хуудаһые үүсхэхэ!</strong> {{PLURAL:$2|0=|Мүн олдоһон хуудаһые харагты.|Мүн хайлтын дүные харагты.}}",
+ "searchprofile-articles": "Агуулгын хуудаһанууд",
+ "searchprofile-images-tooltip": "Файл хайха",
+ "search-result-size": "$1 (ниитэ $2 үгэ�)",
+ "search-interwiki-more": "(үшөө)",
+ "search-nonefound": "Хайлтада таараһан үрэ дүн олдоһонгүй.",
+ "mypreferences": "Тааруулга",
+ "youremail": "Сахим шуудан:",
+ "yourrealname": "Бодото нэрэ:",
+ "yourlanguage": "Хэлэн:",
+ "yourgender": "Хүйһыетнай хэн гэжэ заабал болохоб?",
+ "gender-male": "Эрэ хүн",
+ "right-move": "Хуудаһануудые зөөхэ",
+ "right-move-rootuserpages": "Хэрэглэгшын үндэһэн хуудаһануудые зөөхэ",
+ "action-edit": "энэ хуудаһа заһабарилха",
+ "action-move": "хуудаһые зөөхэ",
+ "recentchanges": "Һүүлшын хубилалта",
+ "diff": "илгаа",
+ "hist": "түүхэ",
+ "hide": "Нюуха",
+ "recentchangeslinked": "Холбогдохо хубилалта",
+ "recentchangeslinked-toolbox": "Холбогдохо хубилалта",
+ "upload": "Файл ашаалха",
+ "license-header": "Лицензи",
+ "file-anchor-link": "Файл",
+ "filehist": "Файлын түүхэ",
+ "filehist-datetime": "Огноо/Саг",
+ "filehist-user": "Хэрэглэгшэ",
+ "randompage": "Һанамсаргүй хуудаһан",
+ "statistics": "Тоо бүридхэл",
+ "nbytes": "$1 {{PLURAL:$1|байт|байтууд}}",
+ "newpages": "Шэнэ хуудаһанууд",
+ "ancientpages": "Хуушарһан хуудаһан",
+ "move": "Зөөхэ",
+ "log": "Логнууд",
+ "allpages": "Бүхы хуудаһан",
+ "allarticles": "Бүхы хуудаһан",
+ "categories": "Анги",
+ "mywatchlist": "Ажаглаха зүйл",
+ "watch": "Ажаглаха",
+ "watchthispage": "Энэ хуудаһые хинаха",
+ "undeletelink": "хараха/һэргээхэ",
+ "blanknamespace": "(Гол)",
+ "mycontris": "Минии оруулһан зүйл",
+ "sp-contributions-talk": "Хэлэлсэл",
+ "whatlinkshere": "Эндэ холбогдоһон хуудаһанууд",
+ "whatlinkshere-page": "Хуудаһан:",
+ "block": "Блок",
+ "change-blocklink": "багса хубилгаха",
+ "contribslink": "γйлэ",
+ "move-page": "«$1» хуудаһые зөөхэ",
+ "move-watch": "Энэ хуудаһые хинаха",
+ "revertmove": "һэргээхэ",
+ "allmessages": "Бүхы зурбас",
+ "allmessagesname": "Нэрэ",
+ "allmessages-language": "Хэлэн:",
+ "thumbnail-more": "Томоруулха",
+ "tooltip-pt-login": "Бидэ та нэбтэрхые хүсэнэбди; гэбэшье, та заататай байна.",
+ "tooltip-pt-logout": "Гараха",
+ "tooltip-ca-talk": "Агуулгын хуудаһанай хэлэлсэл",
+ "tooltip-ca-edit": "Та энэ хуудаһа заһабарилжа боломжотой. \"Уридшалан үзэлхэ\" гэһэн тобшые хэрэглээрэй.",
+ "tooltip-ca-addsection": "Шэнэ хэһэг эхилүүлхэ",
+ "tooltip-ca-history": "Энэ хуудаһанай үмэнэхи заһабаринууд",
+ "tooltip-ca-delete": "энэ хуудаһые усадхаха",
+ "tooltip-search": "{{SITENAME}} сайтһаа бэдэрхэ",
+ "tooltip-search-fulltext": "Хуудаһанһаа бэдэрхэ бэшэбэри",
+ "tooltip-p-logo": "Нюур хуудаһада ошохо",
+ "tooltip-n-mainpage": "Нюур хуудаһада ошохо",
+ "tooltip-n-mainpage-description": "Нюур хуудаһада ошохо",
+ "tooltip-n-portal": "Түһэл, өөрын оруулалта, туһалбари тухай мэдээлэл",
+ "tooltip-n-currentevents": "Мүнөө боложо байгаа үйлэ ябадал тухай һониниие дуулаха",
+ "tooltip-n-recentchanges": "Тус Викиин һүүлшын хубилалтанууд",
+ "tooltip-n-randompage": "Гэнтын хуудаһые нээхэ",
+ "tooltip-n-help": "Туһалалсалгые олохо газар",
+ "tooltip-t-whatlinkshere": "Эндэ холбогдоһон хуудаһануудай жагсаалта",
+ "tooltip-t-recentchangeslinked": "Энэ хуудаһаһаа холбоогдоһон хуудаһуудай шэнэ хубилалтууд",
+ "tooltip-feed-atom": "Тус хуудаһанай Атом фиид",
+ "tooltip-t-upload": "Файл ашаалха",
+ "tooltip-t-specialpages": "Бүхы тусхай хуудаһанай жагсаалта",
+ "tooltip-t-print": "Энэ хуудаһанай хэблэхэ хубилбари",
+ "tooltip-ca-nstab-main": "Үгүүлэлэй хуудаһые үзэхэ",
+ "exif-languagecode": "Хэлэн",
+ "exif-iimcategory": "Анги",
+ "specialpages": "Тусхай хуудаһан"
}
diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json
index 3108a771..0d5f6fb2 100644
--- a/languages/i18n/ca.json
+++ b/languages/i18n/ca.json
@@ -42,7 +42,12 @@
"לערי ריינהארט",
"아라",
"Calak",
- "F3RaN"
+ "F3RaN",
+ "ESM",
+ "Loupeter",
+ "Macofe",
+ "Gerardduenas",
+ "Medol"
]
},
"tog-underline": "Subratlla els enllaços:",
@@ -70,7 +75,7 @@
"tog-shownumberswatching": "Mostra el nombre d'usuaris que hi vigilen",
"tog-oldsig": "Signatura actual:",
"tog-fancysig": "Tractar la signatura com a text wiki (sense enllaç automàtic)",
- "tog-uselivepreview": "Utilitza la previsualització automàtica (cal JavaScript) (experimental)",
+ "tog-uselivepreview": "Utilitza la previsualització automàtica",
"tog-forceeditsummary": "Avisa'm en deixar el resum de la modificació en blanc",
"tog-watchlisthideown": "Amaga les meues edicions de la llista de seguiment",
"tog-watchlisthidebots": "Amaga de la llista de seguiment les edicions fetes per usuaris bots",
@@ -78,7 +83,7 @@
"tog-watchlisthideliu": "Amaga a la llista les edicions d'usuaris registrats",
"tog-watchlisthideanons": "Amaga a la llista les edicions d'usuaris anònims",
"tog-watchlisthidepatrolled": "Amaga edicions patrullades de la llista de seguiment",
- "tog-ccmeonemails": "Envia'm còpia dels missatges que enviï als altres usuaris",
+ "tog-ccmeonemails": "Envia’m còpies dels missatges que enviï als altres usuaris",
"tog-diffonly": "Amaga el contingut de la pàgina davall de la taula de diferències",
"tog-showhiddencats": "Mostra les categories ocultes",
"tog-norollbackdiff": "Omet la pàgina de diferències després de realitzar una reversió",
@@ -118,9 +123,9 @@
"october": "octubre",
"november": "novembre",
"december": "desembre",
- "january-gen": "de gener",
- "february-gen": "de febrer",
- "march-gen": "de març",
+ "january-gen": "gener",
+ "february-gen": "febrer",
+ "march-gen": "març",
"april-gen": "d'abril",
"may-gen": "de maig",
"june-gen": "de juny",
@@ -129,7 +134,7 @@
"september-gen": "de setembre",
"october-gen": "d'octubre",
"november-gen": "de novembre",
- "december-gen": "de desembre",
+ "december-gen": "desembre",
"jan": "gen",
"feb": "feb",
"mar": "març",
@@ -259,6 +264,7 @@
"pool-queuefull": "La cua de treball és plena",
"pool-errorunknown": "Error desconegut",
"pool-servererror": "El servei de recompte de la reserva no és disponible ($1).",
+ "poolcounter-usage-error": "Error d'ús: $1",
"aboutsite": "Quant al projecte {{SITENAME}}",
"aboutpage": "Project:Quant a",
"copyright": "El contingut està disponible sota la llicència $1 si no s'indica el contrari.",
@@ -267,7 +273,8 @@
"currentevents-url": "Project:Actualitat",
"disclaimers": "Avís general",
"disclaimerpage": "Project:Avís general",
- "edithelp": "Ajuda",
+ "edithelp": "Ajuda per a l'edició",
+ "helppage-top-gethelp": "Ajuda",
"mainpage": "Pàgina principal",
"mainpage-description": "Pàgina principal",
"policy-url": "Project:Polítiques",
@@ -281,6 +288,9 @@
"versionrequired": "Cal la versió $1 del MediaWiki",
"versionrequiredtext": "Cal la versió $1 del MediaWiki per a utilitzar aquesta pàgina. Vegeu [[Special:Version]]",
"ok": "D’acord",
+ "pagetitle": "$1 - {{SITENAME}}",
+ "pagetitle-view-mainpage": "{{SITENAME}}",
+ "backlinksubtitle": "← $1",
"retrievedfrom": "Obtingut de «$1»",
"youhavenewmessages": "Tens $1 ($2).",
"youhavenewmessagesfromusers": "Tens $1 {{PLURAL:$3|d'un altre usuari|de $3 usuaris}} ($2).",
@@ -312,6 +322,8 @@
"site-atom-feed": "Canal Atom $1",
"page-rss-feed": "«$1» RSS Feed",
"page-atom-feed": "Canal Atom «$1»",
+ "feed-atom": "Atom",
+ "feed-rss": "RSS",
"red-link-title": "$1 (encara no existeix)",
"sort-descending": "Ordena descendentment",
"sort-ascending": "Ordena ascendentment",
@@ -346,10 +358,13 @@
"readonly_lag": "La base de dades s'ha bloquejat automàticament mentre els servidors esclaus se sincronitzen amb el mestre",
"internalerror": "Error intern",
"internalerror_info": "Error intern: $1",
+ "internalerror-fatal-exception": "Excepció fatal del tipus «$1»",
"filecopyerror": "No s'ha pogut copiar el fitxer «$1» com «$2».",
"filerenameerror": "No s'ha pogut reanomenar el fitxer «$1» com «$2».",
"filedeleteerror": "No s'ha pogut eliminar el fitxer «$1».",
"directorycreateerror": "No s'ha pogut crear el directori «$1».",
+ "directoryreadonlyerror": "El directori \"$1\" és de només lectura.",
+ "directorynotreadableerror": "El directori \"$1\" no és llegible",
"filenotfound": "No s'ha pogut trobar el fitxer «$1».",
"unexpected": "S'ha trobat un valor imprevist: «$1»=«$2».",
"formerror": "Error: no s'ha pogut enviar les dades del formulari",
@@ -371,7 +386,8 @@
"viewsourcetext": "Podeu visualitzar i copiar el codi font d’aquesta pàgina:",
"viewyourtext": "Vostè pot veure i copiar la font de ' ' les modificacions ' ' d'aquesta pàgina:",
"protectedinterface": "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.\nPer afegir o canviar les traduccions per a tots els wikis, feu servir [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
- "editinginterface": "'''Avís:''' Esteu editant una pàgina que conté cadenes de text per a la interfície d'aquest programari. Tingueu en compte que els canvis que es fan a aquesta pàgina afecten a l'aparença de la interfície d'altres usuaris. Per afegir o modificar traduccions a totes les wikis, plantegeu-vos utilitzar la [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
+ "editinginterface": "'''Avís:''' esteu editant una pàgina que s'utilitza per proporcionar text d'interfície per al programari. Els canvis que es facin a la pàgina afectaran l'aparença de la interfície d'altres usuaris del wiki.",
+ "translateinterface": "Per afegir o canviar traduccions per a tots els wikis, utilitzeu [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
"cascadeprotected": "Aquesta pàgina està protegida i no es pot modificar perquè està inclosa en {{PLURAL:$1|la següent pàgina, que té|les següents pàgines, que tenen}} activada l'opció de «protecció en cascada»:\n$2",
"namespaceprotected": "No teniu permís per a modificar pàgines en l'espai de noms '''$1'''.",
"customcssprotected": "No teniu permisos per editar la pàgina CSS perquè conté els paràmetres personals d'un altre usuari.",
@@ -428,6 +444,8 @@
"userlogin-resetlink": "Heu oblidat les vostres dades d'accés?",
"userlogin-resetpassword-link": "Heu oblidat la contrasenya?",
"userlogin-helplink2": "Ajuda amb el registre",
+ "userlogin-loggedin": "Heu iniciat una sessió com {{GENDER:$1|$1}}.\nFeu servir el formulari de sota per iniciar la sessió com un altre usuari.",
+ "userlogin-createanother": "Crea un altre compte",
"createacct-emailrequired": "Adreça de correu electrònic",
"createacct-emailoptional": "Adreça de correu electrònic (opcional)",
"createacct-email-ph": "Introduïu la vostra adreça de correu electrònic",
@@ -453,6 +471,7 @@
"nocookiesnew": "S'ha creat el compte d'usuari, però no esteu enregistrat. El projecte {{SITENAME}} usa galetes per enregistrar els usuaris. Si us plau activeu-les, per a poder enregistrar-vos amb el vostre nom d'usuari i la clau.",
"nocookieslogin": "El programari {{SITENAME}} utilitza galetes per enregistrar usuaris. Teniu les galetes desactivades. Activeu-les i torneu a provar.",
"nocookiesfornew": "No s'ha creat el compte d'usuari, ja que no es podia confirmar el seu origen.\nVerifiqueu que teniu habilitades les galetes al vostre navegador, torneu a carregar aquesta pàgina i intenteu-lo de nou.",
+ "nocookiesforlogin": "{{int:nocookieslogin}}",
"noname": "No heu especificat un nom vàlid d'usuari.",
"loginsuccesstitle": "S'ha iniciat la sessió amb èxit",
"loginsuccess": "Heu iniciat la sessió a {{SITENAME}} com a «$1».",
@@ -495,7 +514,7 @@
"createacct-another-realname-tip": "El nom real és opcional.\nSi decidiu proporcionar-lo, s'utilitzarà per a reconèixer a l'usuari el seu treball.",
"pt-login": "Inicia la sessió",
"pt-login-button": "Inicia sessió",
- "pt-createaccount": "Crea un compte",
+ "pt-createaccount": "Creeu un compte",
"pt-userlogout": "Finalitza la sessió",
"php-mail-error-unknown": "Error desconegut en la funció mail() de PHP",
"user-mail-no-addy": "S'ha intentat enviar un missatge de correu electrònic sense adreça.",
@@ -544,7 +563,7 @@
"changeemail-text": "Completeu el següent formulari per canviar la vostra adreça de correu electrònic. Haureu d'introduir la contrasenya per confirmar el canvi.",
"changeemail-no-info": "Heu d'entrar en un compte d'usuari per accedir directament a aquesta pàgina.",
"changeemail-oldemail": "Adreça de correu electrònic actual:",
- "changeemail-newemail": "Nova adreça de correu electrònic:",
+ "changeemail-newemail": "Adreça electrònica nova:",
"changeemail-none": "(cap)",
"changeemail-password": "La vostra contrasenya a {{SITENAME}}:",
"changeemail-submit": "Canvia de correu electrònic",
@@ -588,10 +607,12 @@
"anoneditwarning": "<strong>Avís</strong>: No heu iniciat cap sessió. Per tant, la vostra adreça IP serà visible públicament si feu qualsevol modificació. Si <strong>[$1 inicieu una sessió]</strong> o <strong>[$2 creeu un compte]</strong>, les vostres edicions s'atribuiran al vostre nom d'usuari, juntament amb altres beneficis.",
"anonpreviewwarning": "''No us heu identificat amb un compte d'usuari. La vostra adreça IP quedarà registrada a l'historial d'aquesta pàgina.''",
"missingsummary": "'''Recordatori''': Heu deixat en blanc el resum de l'edició. Si torneu a clicar al botó de desar, l'edició es guardarà sense resum.",
+ "selfredirect": "<strong>Avís:</strong> Esteu redirigint la pàgina a si mateixa.\nPodeu haver especificat un objectiu erroni per a la redirecció, o potser esteu modificant una pàgina incorrecta.\nSi feu clic a «{{int:savearticle}}» una vegada més, la redirecció es crearà de totes maneres.",
"missingcommenttext": "Introduïu un comentari a continuació.",
"missingcommentheader": "'''Recordatori:''' No heu proporcionat un assumpte/encapçalament per al comentari. Si cliqueu de nou al botó \"{{int:savearticle}}\", la vostra contribució se desarà sense cap.",
"summary-preview": "Previsualització del resum:",
"subject-preview": "Previsualització de tema/capçalera:",
+ "previewerrortext": "S'ha produït un error quan es provava de previsualitzar els canvis.",
"blockedtitle": "L'usuari està blocat",
"blockedtext": "'''S'ha procedit al blocatge del vostre compte d'usuari o la vostra adreça IP.'''\n\nEl blocatge l'ha dut a terme l'usuari $1.\nEl motiu donat és ''$2''.\n\n* Inici del blocatge: $8\n* Final del blocatge: $6\n* Compte blocat: $7\n\nPodeu contactar amb $1 o un dels [[{{MediaWiki:Grouppage-sysop}}|administradors]] per a discutir-ho.\n\nTingueu en compte que no podeu fer servir el formulari d'enviament de missatges de correu electrònic a cap usuari, a menys que tingueu una adreça de correu vàlida registrada a les vostres [[Special:Preferences|preferències d'usuari]] i no ho tingueu tampoc blocat.\n\nLa vostra adreça IP actual és $3, i el número d'identificació del blocatge és #$5.\nSi us plau, incloeu aquestes dades en totes les consultes que feu.",
"autoblockedtext": "La vostra adreça IP ha estat blocada automàticament perquè va ser usada per un usuari actualment bloquejat. Aquest usuari va ser blocat per l'{{GENDER:$1|administrador|administradora}} $1. El motiu donat per al bloqueig ha estat:\n\n:''$2''\n\n* Inici del bloqueig: $8\n* Final del bloqueig: $6\n* Usuari bloquejat: $7\n\nPodeu contactar l'usuari $1 o algun altre dels [[{{MediaWiki:Grouppage-sysop}}|administradors]] per a discutir el bloqueig.\n\nRecordeu que per a poder usar l'opció «Envia un missatge de correu electrònic a aquest usuari» haureu d'haver validat una adreça de correu electrònic a les vostres [[Special:Preferences|preferències]].\n\nEl número d'identificació de la vostra adreça IP és $3, i l'ID del bloqueig és #$5. Si us plau, incloeu aquestes dades en totes les consultes que feu.",
@@ -601,7 +622,7 @@
"nosuchsectiontitle": "No es pot trobar la secció",
"nosuchsectiontext": "Heu intentat editar una secció que no existeix.\nPotser s'ha mogut o eliminat mentre estàveu veient la pàgina.",
"loginreqtitle": "Cal que inicieu una sessió",
- "loginreqlink": "inicia una sessió",
+ "loginreqlink": "inicia la sessió",
"loginreqpagetext": "Cal que seguiu l'enllaç «$1» per a visualitzar altres pàgines.",
"accmailtitle": "S'ha enviat una contrasenya.",
"accmailtext": "S'ha enviat una contrasenya aleatòria a $2 per a {{GENDER:$1|l'usuari|la usuària}} [[User talk:$1|$1]].\n\nLa contrasenya per aquest nou compte pot ser canviada a la pàgina de ''[[Special:ChangePassword|canvi de contrasenya]]'' un cop connectat.",
@@ -657,6 +678,7 @@
"template-semiprotected": "(semiprotegida)",
"hiddencategories": "Aquesta pàgina forma part de {{PLURAL:$1|la següent categoria oculta|les següents categories ocultes}}:",
"edittools": "<!-- Es mostrarà als formularis d'edició i de càrrega el text que hi haja després d'aquesta línia. -->",
+ "edittools-upload": "-",
"nocreatetext": "El projecte {{SITENAME}} ha restringit la possibilitat de crear noves pàgines.\nPodeu modificar les planes ja existents o bé [[Special:UserLogin|entrar en un compte d'usuari]].",
"nocreate-loggedin": "No teniu permisos per a crear pàgines noves.",
"sectioneditnotsupported-title": "Edició de la secció no suportada",
@@ -686,6 +708,10 @@
"content-model-text": "text net",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Objecte buit",
+ "content-json-empty-array": "Matriu buida",
+ "duplicate-args-category": "Pàgines amb arguments duplicats en utilització de plantilles",
+ "duplicate-args-category-desc": "La pàgina conté crides a plantilles que fan servir duplicats d'arguments, com ara <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Atenció: Aquesta pàgina conté massa crides a funcions parserfunction complexes.\n\nActualment n'hi ha {{PLURAL:$1|$1|$1}} i, com a molt, {{PLURAL:$2|hauria|haurien}} de ser $2.",
"expensive-parserfunction-category": "Pàgines amb massa crides de parser function",
"post-expand-template-inclusion-warning": "Avís: La mida d'inclusió de la plantilla és massa gran.\nNo s'inclouran algunes plantilles.",
@@ -717,7 +743,7 @@
"nohistory": "No hi ha un historial de revisions per a aquesta pàgina.",
"currentrev": "Revisió actual",
"currentrev-asof": "Revisió de $1",
- "revisionasof": "Revisió de $1",
+ "revisionasof": "Revisió del $1",
"revision-info": "La revisió el $1 per {{GENDER:$6|$2}}$7",
"previousrevision": "←Versió més antiga",
"nextrevision": "Versió més nova→",
@@ -740,7 +766,7 @@
"history-feed-empty": "La pàgina demanada no existeix.\nPotser s'ha suprimit o reanomenat.\nIntenteu [[Special:Search|cercar al mateix wiki]] per a noves pàgines rellevants.",
"rev-deleted-comment": "(resum d'edició eliminat)",
"rev-deleted-user": "(s'ha suprimit el nom d'usuari)",
- "rev-deleted-event": "(s'ha suprimit el registre d'accions)",
+ "rev-deleted-event": "(s'han suprimit els detalls del registre)",
"rev-deleted-user-contribs": "[nom d'usuari o adreça IP esborrada - modificació ocultada de les contribucions]",
"rev-deleted-text-permission": "S'ha '''suprimit''' aquesta versió de la pàgina.\nVegeu-ne més detalls al [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre de supressions].",
"rev-suppressed-text-permission": "S'ha '''suprimit''' aquesta versió de la pàgina.\nVegeu-ne més detalls al [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registre de supressions].",
@@ -774,7 +800,7 @@
"revdelete-legend": "Defineix restriccions en la visibilitat",
"revdelete-hide-text": "Text de la revisió",
"revdelete-hide-image": "Amaga el contingut del fitxer",
- "revdelete-hide-name": "Acció d'amagar i objectiu",
+ "revdelete-hide-name": "Amaga objectiu i paràmetres",
"revdelete-hide-comment": "Resum de modificacions",
"revdelete-hide-user": "Nom d'usuari / adreça IP de l'editor",
"revdelete-hide-restricted": "Suprimir les dades als administradors així com a la resta.",
@@ -827,8 +853,8 @@
"mergehistory-comment": "[[:$1]] fusionat en [[:$2]]: $3",
"mergehistory-same-destination": "Les pàgines d'origen i de destinació no poden ser la mateixa",
"mergehistory-reason": "Motiu:",
+ "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "Registre de fusions",
- "pagemerge-logentry": "s'ha fusionat [[$1]] en [[$2]] (revisions fins a $3)",
"revertmerge": "Desfusiona",
"mergelogpagetext": "A sota hi ha una llista de les fusions més recents d'una pàgina d'historial en una altra.",
"history-title": "«$1»: Historial de revisions",
@@ -845,16 +871,18 @@
"diff-multi-manyusers": "({{PLURAL:$1|Hi ha una revisió intermèdia|Hi ha $1 revisions intermèdies}} sense mostrar fetes per més {{PLURAL:$2|d'un usuari|de $2 usuaris}})",
"difference-missing-revision": "{{PLURAL:$2|Una revisió|$2 revisions}} d'aquesta diferència ($1) no {{PLURAL:$2|s'ha|s'han}} trobat.\n\nAixò passa generalment en seguir un enllaç obsolet de diferències a una pàgina que s'ha suprimit.\nEs pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre de supressions].",
"searchresults": "Resultats de la cerca",
- "searchresults-title": "Resultats de la recerca de «$1»",
+ "searchresults-title": "Resultats de la cerca de «$1»",
"titlematches": "Coincidències de títol de la pàgina",
"textmatches": "Coincidències de text de pàgina",
"notextmatches": "No hi ha cap coincidència de text de pàgina",
"prevn": "anteriors {{PLURAL:$1|$1}}",
"nextn": "següents {{PLURAL:$1|$1}}",
+ "prev-page": "pàgina anterior",
+ "next-page": "pàgina següent",
"prevn-title": "$1 {{PLURAL:$1|resultat|resultats}} anteriors",
"nextn-title": "$1 {{PLURAL:$1|resultat|resultats}} següents",
"shown-title": "Mostra $1 {{PLURAL:$1|resultat|resultats}} per pàgina",
- "viewprevnext": "Vés a ($1 {{int:pipe-separator}} $2) ($3).",
+ "viewprevnext": "Mostra ($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "'''Hi ha una pàgina anomenada «[[:$1]]» en aquest wiki'''",
"searchmenu-new": "<strong>Crea la pàgina «[[:$1]]» en aquest wiki!</strong> {{PLURAL:$2|0=|Vegeu també la pàgina trobada amb la cerca.|Vegeu també els resultats de cerca trobats.}}",
"searchprofile-articles": "Pàgines de contingut",
@@ -864,11 +892,12 @@
"searchprofile-articles-tooltip": "Cerca a $1",
"searchprofile-images-tooltip": "Cerca fitxers",
"searchprofile-everything-tooltip": "Cerca tot tipus de contingut (s'hi inclouen pàgines de discussió)",
- "searchprofile-advanced-tooltip": "Cerca als espais de noms predefinits",
+ "searchprofile-advanced-tooltip": "Cerca als espais de noms personalitzats",
"search-result-size": "$1 ({{PLURAL:$2|1 paraula|$2 paraules}})",
"search-result-category-size": "{{PLURAL:$1|1 membre|$1 membres}} ({{PLURAL:$2|1 subcategoria|$2 subcategories}}, {{PLURAL:$3|1 fitxer|$3 fitxers}})",
"search-redirect": "(redirigit des de $1)",
"search-section": "(secció $1)",
+ "search-category": "(categoria $1)",
"search-file-match": "(coincideix amb el contingut del fitxer)",
"search-suggest": "Volíeu dir: $1",
"search-interwiki-caption": "Projectes germans",
@@ -902,6 +931,11 @@
"prefs-personal": "Perfil d'usuari",
"prefs-rc": "Canvis recents",
"prefs-watchlist": "Llista de seguiment",
+ "prefs-editwatchlist": "Edita la llista de seguiment",
+ "prefs-editwatchlist-label": "Editeu les entrades de la vostra llista de seguiment:",
+ "prefs-editwatchlist-edit": "Mostra i suprimeix títols de la llista de seguiment",
+ "prefs-editwatchlist-raw": "Edita la llista de seguiment crua",
+ "prefs-editwatchlist-clear": "Neteja la llista de seguiment",
"prefs-watchlist-days": "Nombre de dies per mostrar en la llista de seguiment:",
"prefs-watchlist-days-max": "Màxim $1 {{PLURAL:$1|dia|dies}}",
"prefs-watchlist-edits": "Nombre de modificacions a mostrar en una llista estesa de seguiment:",
@@ -920,7 +954,7 @@
"columns": "Columnes",
"searchresultshead": "Preferències de la cerca",
"stub-threshold": "Límit per a formatar l'enllaç com <a href=\"#\" class=\"stub\">esborrany</a> (en octets):",
- "stub-threshold-disabled": "Deshabilitat",
+ "stub-threshold-disabled": "Inhabilitat",
"recentchangesdays": "Dies a mostrar en els canvis recents:",
"recentchangesdays-max": "(màxim $1 {{PLURAL:$1|dia|dies}})",
"recentchangescount": "Nombre d'edicions a mostrar per defecte:",
@@ -956,7 +990,9 @@
"youremail": "Correu electrònic:",
"username": "{{GENDER:$1|Nom d'usuari}}:",
"prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|del grup|dels grups}}:",
+ "prefs-memberingroups-type": "$1",
"prefs-registration": "Hora de registre:",
+ "prefs-registration-date-time": "$1",
"yourrealname": "Nom real*:",
"yourlanguage": "Idioma:",
"yourvariant": "Variant lingüística:",
@@ -971,7 +1007,7 @@
"gender-female": "Femení",
"prefs-help-gender": "Opcional: s'usa perquè el programari se us adreci amb missatges amb el gènere adient. Aquesta informació serà pública.",
"email": "Correu electrònic",
- "prefs-help-realname": "<nowiki>*</nowiki> Nom real (opcional): si escolliu donar aquesta informació es utilitzarà per a donar-vos l’atribució de la vostra feina.",
+ "prefs-help-realname": "El nom real és opcional.\nSi escolliu donar aquesta informació, s'utilitzarà per a donar-vos l'atribució del vostre treball.",
"prefs-help-email": "L'adreça electrònica és opcional, però permet l'enviament d'una nova contrasenya en cas que oblideu l'actual.",
"prefs-help-email-others": "També podeu optar per deixar que els altres contactin amb vós a través de la pàgina personal de discussió, sense necessitat de desvetllar la vostra identitat.",
"prefs-help-email-required": "Cal una adreça de correu electrònic.",
@@ -992,10 +1028,11 @@
"prefs-tokenwatchlist": "Testimoni",
"prefs-diffs": "Difs",
"prefs-help-prefershttps": "Aquesta preferència tindrà efecte quan inicieu una nova sessió.",
+ "prefswarning-warning": "Heu fet canvis a les preferències que encara no s'han desat.\nSi abandoneu la pàgina sense fer clic a «$1», les preferències no s'actualitzaran.",
"prefs-tabs-navigation-hint": "Consell: Podeu utilitzar les tecles de cursor de dreta i esquerra per a navegar entre les pestanyes.",
"email-address-validity-valid": "L'adreça de correu electrònic sembla vàlida",
"email-address-validity-invalid": "Escriviu una adreça vàlida de correu electrònic",
- "userrights": "Gestió dels permisos d'usuari",
+ "userrights": "Gestió dels permisos d’usuari",
"userrights-lookup-user": "Gestiona els grups d'usuari",
"userrights-user-editname": "Introduïu un nom d'usuari:",
"editusergroup": "Edita els grups d'usuaris",
@@ -1004,6 +1041,7 @@
"saveusergroups": "Desa els grups d'usuari",
"userrights-groupsmember": "Membre de:",
"userrights-groupsmember-auto": "Membre implícit de:",
+ "userrights-groupsmember-type": "$1",
"userrights-groups-help": "Podeu modificar els grups als quals pertany {{GENDER:$1|aquest usuari|aquesta usuària}}.\n* Una casella marcada significa que {{GENDER:$1|l’usuari|la usuària}} pertany a aquest grup.\n* Una casella no marcada significa que {{GENDER:$1|l’usuari|la usuària}} no pertany a aquest grup.\n* Un asterisc (*) indica que no {{GENDER:$1|el|la}} podreu treure del grup una vegada l'hàgiu afegit o viceversa.",
"userrights-reason": "Motiu:",
"userrights-no-interwiki": "No teniu permisos per a editar els permisos d'usuari d'altres wikis.",
@@ -1012,6 +1050,7 @@
"userrights-notallowed": "No teniu autorització per concedir o retirar permisos d'usuari.",
"userrights-changeable-col": "Grups que podeu canviar",
"userrights-unchangeable-col": "Grups que no podeu canviar",
+ "userrights-irreversible-marker": "$1*",
"userrights-conflict": "Conflicte de canvis dels permisos d'usuari. Reviseu i confirmeu els canvis.",
"userrights-removed-self": "Heu suprimit els propis permisos correctament. Per tant, ja no podreu tornar a accedir a aquesta pàgina.",
"group": "Grup:",
@@ -1077,6 +1116,7 @@
"right-protect": "Canviar el nivell de protecció i modificar pàgines protegides",
"right-editprotected": "Modificar pàgines protegides (sense protecció de cascada)",
"right-editsemiprotected": "Edita les pàgines protegides com «{{int:protect-level-autoconfirmed}}»",
+ "right-editcontentmodel": "Editar el model de contingut d'una pàgina",
"right-editinterface": "Editar la interfície d'usuari",
"right-editusercssjs": "Editar els fitxers de configuració CSS i JS d'altres usuaris",
"right-editusercss": "Editar els fitxers de configuració CSS d'altres usuaris",
@@ -1104,7 +1144,8 @@
"right-override-export-depth": "Exportar pàgines incloent aquelles enllaçades fins a una fondària de 5",
"right-sendemail": "Enviar missatges de correu electrònic a altres usuaris",
"right-passwordreset": "Veure les soŀlicituds de restabliment de contrasenya per correu electrònic",
- "newuserlogpage": "Registre de creació de l'usuari",
+ "right-managechangetags": "Crear i suprimir [[Special:Tags|etiquetes]] des de la base de dades",
+ "newuserlogpage": "Registre de creació d'usuaris",
"newuserlogpagetext": "Aquest és un registre de creació de nous usuaris.",
"rightslog": "Registre dels permisos d'usuari",
"rightslogtext": "Aquest és un registre de canvis dels permisos d'usuari.",
@@ -1149,15 +1190,17 @@
"action-viewmywatchlist": "mostra la llista de seguiment",
"action-viewmyprivateinfo": "mostra la informació personal",
"action-editmyprivateinfo": "edita la informació personal",
+ "action-editcontentmodel": "editar el model de contingut d'una pàgina",
+ "action-managechangetags": "crear i suprimir etiquetes de la base de dades",
"nchanges": "$1 {{PLURAL:$1|canvi|canvis}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|des de la darrera visita}}",
"enhancedrc-history": "historial",
"recentchanges": "Canvis recents",
"recentchanges-legend": "Opcions de canvis recents",
- "recentchanges-summary": "Seguiu els canvis recents del projecte {{SITENAME}} en aquesta pàgina.",
+ "recentchanges-summary": "Seguiu els canvis més recents del wiki en aquesta pàgina.",
"recentchanges-noresult": "Cap canvi corresponent a aquests criteris en el període indicat.",
"recentchanges-feed-description": "Segueix en aquest canal els canvis més recents del wiki.",
- "recentchanges-label-newpage": "Aquesta modificació inicià una pàgina",
+ "recentchanges-label-newpage": "Aquesta modificació creà una pàgina",
"recentchanges-label-minor": "Aquesta és una modificació menor",
"recentchanges-label-bot": "Aquesta modificació fou feta per un bot",
"recentchanges-label-unpatrolled": "Aquesta modificació encara no s'ha patrullat",
@@ -1166,7 +1209,7 @@
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vegeu també la [[Special:NewPages|llista de pàgines noves]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "A sota hi ha {{PLURAL:$5|el canvi|els canvis}} a partir de <strong>$3, $4</strong> (fins a <strong>$1</strong>).",
- "rclistfrom": "Mostra els canvis nous des de $3 $2",
+ "rclistfrom": "Mostra els canvis nous des de $3, $2",
"rcshowhideminor": "$1 edicions menors",
"rcshowhideminor-show": "Mostra",
"rcshowhideminor-hide": "Amaga",
@@ -1193,22 +1236,24 @@
"minoreditletter": "m",
"newpageletter": "N",
"boteditletter": "b",
+ "unpatrolledletter": "!",
"number_of_watching_users_pageview": "[{{PLURAL:$1|Un usuari vigila|$1 usuaris vigilen}} aquesta pàgina]",
"rc_categories": "Limita a les categories (separades amb \"|\")",
"rc_categories_any": "Qualsevol",
+ "rc-change-size": "$1",
"rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} després del canvi",
"newsectionsummary": "/* $1 */ secció nova",
"rc-enhanced-expand": "Mostra detalls",
"rc-enhanced-hide": "Amagar detalls",
"rc-old-title": "originàriament creada com «$1»",
- "recentchangeslinked": "Seguiment d'enllaços",
+ "recentchangeslinked": "Canvis relacionats",
"recentchangeslinked-feed": "Canvis relacionats",
- "recentchangeslinked-toolbox": "Seguiment d'enllaços",
+ "recentchangeslinked-toolbox": "Canvis relacionats",
"recentchangeslinked-title": "Canvis relacionats amb «$1»",
- "recentchangeslinked-summary": "A continuació trobareu una llista dels canvis recents a les pàgines enllaçades des de la pàgina donada (o entre els membres d'una categoria especificada).\nLes pàgines de la vostra [[Special:Watchlist|llista de seguiment]] apareixen en '''negreta'''.",
+ "recentchangeslinked-summary": "Aquesta llista reflecteix els canvis recents a les pàgines enllaçades des d'una pàgina concreta (o als membres d'una categoria concreta).\nLes pàgines de la vostra [[Special:Watchlist|llista de seguiment]] apareixen en <strong>negreta</strong>.",
"recentchangeslinked-page": "Nom de la pàgina:",
"recentchangeslinked-to": "Mostra els canvis de les pàgines enllaçades amb la pàgina donada",
- "upload": "Carrega",
+ "upload": "Carregueu un fitxer",
"uploadbtn": "Carrega un fitxer",
"reuploaddesc": "Torna al formulari per apujar.",
"upload-tryagain": "Envia la descripció del fitxer modificat",
@@ -1406,16 +1451,16 @@
"filehist-current": "actual",
"filehist-datetime": "Data/hora",
"filehist-thumb": "Miniatura",
- "filehist-thumbtext": "Miniatura per a la versió de $1",
+ "filehist-thumbtext": "Miniatura per a la versió del $1",
"filehist-nothumb": "Sense miniatura",
"filehist-user": "Usuari",
"filehist-dimensions": "Dimensions",
"filehist-filesize": "Mida del fitxer",
"filehist-comment": "Comentari",
"imagelinks": "Ús del fitxer",
- "linkstoimage": "{{PLURAL:$1|La següent pàgina enllaça|Les següents pàgines enllacen}} a aquesta imatge:",
+ "linkstoimage": "{{PLURAL:$1|La pàgina següent enllaça|Les $1 pàgines següents enllacen}} a aquest fitxer:",
"linkstoimage-more": "Hi ha més de $1 {{PLURAL:$1|pàgina que enllaça|pàgines que enllaçen}} a aquest fitxer.\nLa següent llista només mostra {{PLURAL:$1|la primera d'elles|les primeres $1 d'aquestes pàgines}}.\nPodeu consultar la [[Special:WhatLinksHere/$2|llista completa]].",
- "nolinkstoimage": "No hi ha pàgines que enllacin aquesta imatge.",
+ "nolinkstoimage": "No hi ha pàgines que enllacin a aquesta imatge.",
"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]]):",
@@ -1429,7 +1474,8 @@
"uploadnewversion-linktext": "Carrega una nova versió d'aquest fitxer",
"shared-repo-from": "des de $1",
"shared-repo": "un repositori compartit",
- "upload-disallowed-here": "No pot sobreescriure aquest fitxer.",
+ "shared-repo-name-wikimediacommons": "Wikimedia Commons",
+ "upload-disallowed-here": "No podeu sobreescriure aquest fitxer.",
"filerevert": "Reverteix $1",
"filerevert-legend": "Reverteix el fitxer",
"filerevert-intro": "Esteu revertint '''[[Media:$1|$1]]''' a la [$4 versió de $3, $2].",
@@ -1478,7 +1524,6 @@
"statistics": "Estadístiques",
"statistics-header-pages": "Estadístiques de pàgines",
"statistics-header-edits": "Estadístiques d'edicions",
- "statistics-header-views": "Visualitza estadístiques",
"statistics-header-users": "Estadístiques d'usuari",
"statistics-header-hooks": "Altres estadístiques",
"statistics-articles": "Pàgines de contingut",
@@ -1487,13 +1532,9 @@
"statistics-files": "Fitxers carregats",
"statistics-edits": "Edicions en pàgines des que el projecte {{SITENAME}} fou instal·lat",
"statistics-edits-average": "Edicions per pàgina de mitjana",
- "statistics-views-total": "Visualitzacions totals",
- "statistics-views-total-desc": "No hom inclou l'accès a pàgines inexistents o pàgines especials",
- "statistics-views-peredit": "Visualitzacions per modificació",
"statistics-users": "[[Special:ListUsers|Usuaris]] registrats",
"statistics-users-active": "Usuaris actius",
"statistics-users-active-desc": "Usuaris que han dut a terme alguna acció en {{PLURAL:$1|l'últim dia|els últims $1 dies}}",
- "statistics-mostpopular": "Pàgines més visualitzades",
"pageswithprop": "Pàgines amb una propietat de pàgina",
"pageswithprop-legend": "Pàgines amb una propietat de pàgina",
"pageswithprop-text": "Aquesta pàgina llista les pàgines que utilitzen una propietat de pàgina en particular.",
@@ -1519,7 +1560,7 @@
"ncategories": "$1 {{PLURAL:$1|categoria|categories}}",
"ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
"nlinks": "$1 {{PLURAL:$1|enllaç|enllaços}}",
- "nmembers": "$1 {{PLURAL:$1|membre|membres}}",
+ "nmembers": "$1 {{PLURAL:$1|element|elements}}",
"nmemberschanged": "$1 → $2 {{PLURAL:$2|element|elements}}",
"nrevisions": "$1 {{PLURAL:$1|revisió|revisions}}",
"nviews": "$1 {{PLURAL:$1|visita|visites}}",
@@ -1534,7 +1575,6 @@
"uncategorizedtemplates": "Plantilles sense categoria",
"unusedcategories": "Categories sense cap ús",
"unusedimages": "Fitxers no utilitzats",
- "popularpages": "Pàgines populars",
"wantedcategories": "Categories demanades",
"wantedpages": "Pàgines demanades",
"wantedpages-badtitle": "Títol invàlid al conjunt de resultats: $1",
@@ -1596,9 +1636,12 @@
"pager-older-n": "{{PLURAL:$1|anterior|$1 anteriors}}",
"suppress": "Oversight",
"querypage-disabled": "Aquesta pàgina especial està desactivada per a no perjudicar el rendiment.",
+ "apihelp": "Ajuda de l'API",
+ "apihelp-no-such-module": "No s'ha trobat el mòdul \"$1\".",
"booksources": "Obres de referència",
"booksources-search-legend": "Cerca fonts de llibres",
- "booksources-go": "Vés-hi",
+ "booksources-isbn": "ISBN:",
+ "booksources-search": "Cerca",
"booksources-text": "A sota hi ha una llista d'enllaços d'altres llocs que venen llibres nous i de segona mà, i també podrien tenir més informació dels llibres que esteu cercant:",
"booksources-invalid-isbn": "El codi ISBN donat no és vàlid. Comproveu si l'heu copiat correctament.",
"specialloguserlabel": "Realitzador:",
@@ -1615,7 +1658,7 @@
"allpagesfrom": "Mostra les pàgines que comencin per:",
"allpagesto": "Mostra pàgines que acabin en:",
"allarticles": "Totes les pàgines",
- "allinnamespace": "Totes les pàgines (de l'espai de noms $1)",
+ "allinnamespace": "Totes les pàgines (de l’espai de noms $1)",
"allpagessubmit": "Vés-hi",
"allpagesprefix": "Mostra les pàgines amb prefix:",
"allpagesbadtitle": "El títol de la pàgina que heu inserit no és vàlid o conté un prefix d'enllaç amb un altre projecte. També pot passar que contingui un o més caràcters que no es puguin fer servir en títols de pàgina.",
@@ -1657,6 +1700,8 @@
"listgrouprights-rights": "Drets",
"listgrouprights-helppage": "Help:Drets del grup",
"listgrouprights-members": "(llista de membres)",
+ "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": "Pot afegir {{PLURAL:$2|grup|grups}}: $1",
"listgrouprights-removegroup": "Treu membres {{PLURAL:$2|grup|grups}}: $1",
"listgrouprights-addgroup-all": "Poder afegir tots els grups",
@@ -1705,7 +1750,7 @@
"emailsubject": "Assumpte:",
"emailmessage": "Missatge:",
"emailsend": "Envia",
- "emailccme": "Envia'm una còpia del meu missatge.",
+ "emailccme": "Envia’m una còpia del meu missatge.",
"emailccsubject": "Còpia del vostre missatge a $1: $2",
"emailsent": "Correu electrònic enviat",
"emailsenttext": "S'ha enviat el vostre correu electrònic.",
@@ -1734,7 +1779,7 @@
"wlheader-enotif": "La notificació per correu electrònic està habilitada.",
"wlheader-showupdated": "Les pàgines que s'han canviat des de la vostra darrera visita es mostren en '''negreta'''.",
"wlnote": "A sota hi ha {{PLURAL:$1|el darrer canvi|els darrers <strong>$1</strong> canvis}} en {{PLURAL:$2|la darrera hora|les <strong>$2</strong> darreres hores}}, a $4 del $3.",
- "wlshowlast": "<small>- Mostra les darreres $1 hores, els darrers $2 dies o $3</small>",
+ "wlshowlast": "Mostra les darreres $1 hores, els darrers $2 dies",
"watchlist-options": "Opcions de la llista de seguiment",
"watching": "S'està vigilant...",
"unwatching": "S'està desatenent...",
@@ -1751,7 +1796,7 @@
"enotif_body_intro_moved": "La pàgina $1 de {{SITENAME}} ha estat reanomenada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.",
"enotif_body_intro_restored": "La pàgina $1 de {{SITENAME}} ha estat restaurada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.",
"enotif_body_intro_changed": "La pàgina $1 de {{SITENAME}} ha estat canviada el $PAGEEDITDATE per {{gender:$2|$2}}. Aneu a $3 per veure la revisió actual.",
- "enotif_lastvisited": "Vegeu $1 per a tots els canvis que s'han fet d'ença de la vostra darrera visita.",
+ "enotif_lastvisited": "Vegeu $1 per a tots els canvis que s'han fet d'ençà de la vostra darrera visita.",
"enotif_lastdiff": "Consulteu $1 per a visualitzar aquest canvi.",
"enotif_anon_editor": "usuari anònim $1",
"enotif_body": "Benvolgut/uda $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nResum de l'editor: $PAGESUMMARY $PAGEMINOREDIT\n\nContacteu amb l'editor:\ncorreu: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNo rebreu més notificacions en cas de més activitat a menys que visiteu aquesta pàgina havent iniciat sessió.\nTambé podeu canviar el mode de notificació de les pàgines que vigileu en la vostra llista de seguiment.\n\nEl servei de notificacions del projecte {{SITENAME}}\n\n--\nPer a canviar les opcions de notificació per correu electrònic aneu a\n{{canonicalurl:{{#special:Preferences}}}}\n\nPer a canviar les opcions de la vostra llista de seguiment aneu a\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPer eliminar la pàgina de la vostra llista de seguiment aneu a\n$UNWATCHURL\n\nSuggeriments i ajuda:\n$HELPPAGE",
@@ -1783,7 +1828,6 @@
"deleteprotected": "No podeu eliminar la pàgina perquè ha estat protegida.",
"deleting-backlinks-warning": "'''Avís:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Altres pàgines]] enllacen o transclouen de la pàgina que esteu a punt de suprimir.",
"rollback": "Reverteix edicions",
- "rollback_short": "Revoca",
"rollbacklink": "Reverteix",
"rollbacklinkcount": "reverteix $1 {{PLURAL:$1|edició|edicions}}",
"rollbacklinkcount-morethan": "reverteix més de $1 {{PLURAL:$1|edició|edicions}}",
@@ -1824,6 +1868,7 @@
"protect-fallback": "Permetre només a usuaris amb permisos de \"$1\"",
"protect-level-autoconfirmed": "Permetre només usuaris autoconfirmats",
"protect-level-sysop": "Permetre només administradors",
+ "protect-summary-desc": "[$1=$2] ($3)",
"protect-summary-cascade": "en cascada",
"protect-expiring": "expira el dia $1 (UTC)",
"protect-expiring-local": "caduca el $1",
@@ -1833,6 +1878,7 @@
"protect-othertime": "Un altre termini:",
"protect-othertime-op": "un altre termini",
"protect-existing-expiry": "Data d'expiració existent: $2 a les $3",
+ "protect-existing-expiry-infinity": "Temps d'expiració existent: infinit",
"protect-otherreason": "Motiu diferent o addicional:",
"protect-otherreason-op": "Altres motius",
"protect-dropdown": "*Motius comuns de protecció\n** Vandalisme excessiu\n** Spam excessiu\n** Guerra d'edicions improductiva\n** Pàgina amb alt trànsit",
@@ -1889,18 +1935,20 @@
"undelete-error-long": "S'han produït errors en revertir la supressió del fitxer:\n\n$1",
"undelete-show-file-confirm": "Segur que voleu veure la revisió esborrada del fitxer «<nowiki>$1</nowiki>» corresponent a les $3 del $2?",
"undelete-show-file-submit": "Sí",
+ "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
"namespace": "Espai de noms:",
"invert": "Inverteix la selecció",
"tooltip-invert": "Marqueu aquesta casella per ocultar els canvis a les pàgines de l'espai de noms seleccionat (i l'espai de noms associat si està activat)",
+ "tooltip-whatlinkshere-invert": "Marca aquest requadre per amagar els enllaços de pàgines en l'espai de noms seleccionat.",
"namespace_association": "Espai de noms associat",
"tooltip-namespace_association": "Marqueu aquesta casella per incloure l'espai de noms de discussió o de no discussió associat a l'espai de noms seleccionat",
"blanknamespace": "(Principal)",
- "contributions": "Contribucions de {{GENDER:$1|l'usuari|la usuària}}",
+ "contributions": "Contribucions de {{GENDER:$1|l’usuari|la usuària}}",
"contributions-title": "Contribucions de l'usuari $1",
"mycontris": "Contribucions",
"contribsub2": "Per a {{GENDER:$3|$1}} ($2)",
"contributions-userdoesnotexist": "El compte d'usuari «$1» no està registrat.",
- "nocontribs": "No s'ha trobat canvis que encaixessin amb aquests criteris.",
+ "nocontribs": "No s’ha trobat cap canvi que encaixessi amb aquests criteris.",
"uctop": "(actual)",
"month": "Mes (i anteriors):",
"year": "Any (i anteriors):",
@@ -1928,7 +1976,7 @@
"nolinkshere": "Cap pàgina no enllaça amb '''[[:$1]]'''.",
"nolinkshere-ns": "No s'enllaça cap pàgina a '''[[:$1]]''' en l'espai de noms triat.",
"isredirect": "pàgina redirigida",
- "istemplate": "inclosa",
+ "istemplate": "inclusió",
"isimage": "enllaç a fitxer",
"whatlinkshere-prev": "{{PLURAL:$1|anterior|anteriors $1}}",
"whatlinkshere-next": "{{PLURAL:$1|següent|següents $1}}",
@@ -1963,8 +2011,8 @@
"badipaddress": "L'adreça IP no té el format correcte.",
"blockipsuccesssub": "S'ha blocat amb èxit",
"blockipsuccesstext": "S'ha {{GENDER:$1|blocat|blocada}} [[Special:Contributions/$1|$1]] .<br />\nVegeu la [[Special:BlockList|llista de bloqueigs]] per revisar-los.",
- "ipb-blockingself": "Esteu a punt de blocar-vos a vós mateix! Esteu segurs de voler-ho fer?",
- "ipb-confirmhideuser": "Esteu a punt de bloquejar un usuari que està marcat amb l'opció «amaga l'usuari». Això suprimirà el seu nom a totes les llistes i registres. Esteu segurs de voler-ho fer?",
+ "ipb-blockingself": "Esteu a punt de blocar el vostre propi compte! Esteu segur de voler-ho fer?",
+ "ipb-confirmhideuser": "Esteu a punt de blocar un usuari amb l'opció d'amagar el seu nom. Això suprimirà el seu nom a totes les llistes i registres. Esteu segur de voler-ho fer?",
"ipb-confirmaction": "Si esteu segur que voleu fer-ho, marqueu el camp «{{int:ipb-confirm}}» a la part inferior.",
"ipb-edit-dropdown": "Edita les raons per a blocar",
"ipb-unblock-addr": "Desbloca $1",
@@ -2003,7 +2051,7 @@
"blocklist-nousertalk": "no podeu modificar la pàgina de discussió pròpia",
"ipblocklist-empty": "La llista de bloqueigs està buida.",
"ipblocklist-no-results": "L'adreça IP o nom d'usuari soŀlicitat no està bloquejat.",
- "blocklink": "bloca",
+ "blocklink": "bloqueja",
"unblocklink": "desbloca",
"change-blocklink": "canvia el blocatge",
"contribslink": "contribucions",
@@ -2102,7 +2150,7 @@
"delete_and_move_confirm": "Sí, esborra la pàgina",
"delete_and_move_reason": "S'ha eliminat per a permetre el reanomenament de \" [[$1]] \"",
"selfmove": "Els títols d'origen i de destinació coincideixen: no és possible de reanomenar una pàgina a si mateixa.",
- "immobile-source-namespace": "No es poden moure pàgines de l'espai de noms \"$1\"",
+ "immobile-source-namespace": "No es poden moure les pàgines de l’espai de noms «$1»",
"immobile-target-namespace": "No es poden moure pàgines cap a l'espai de noms \"$1\"",
"immobile-target-namespace-iw": "No es poden moure pàgines a l'enllaç interwiki",
"immobile-source-page": "Aquesta pàgina no es pot moure.",
@@ -2127,7 +2175,7 @@
"export-submit": "Exporta",
"export-addcattext": "Afegeix pàgines de la categoria:",
"export-addcat": "Afegeix",
- "export-addnstext": "Afegeix pàgines de l'espai de noms:",
+ "export-addnstext": "Afegeix pàgines de l’espai de noms:",
"export-addns": "Afegir",
"export-download": "Ofereix desar com a fitxer",
"export-templates": "Inclou les plantilles",
@@ -2156,14 +2204,15 @@
"thumbnail-temp-create": "No s'ha pogut creat el fitxer de miniatura temporal",
"thumbnail-dest-create": "No es pot desar la miniatura a la destinació",
"thumbnail_invalid_params": "Els paràmetres de les miniatures no són vàlids",
+ "thumbnail_toobigimagearea": "Fitxer amb dimensions més gran que $1",
"thumbnail_dest_directory": "No s'ha pogut crear el directori de destinació",
"thumbnail_image-type": "Tipus d'imatge no contemplat",
"thumbnail_gd-library": "Configuració de la biblioteca GD incompleta: falta la funció $1",
"thumbnail_image-missing": "Sembla que falta el fitxer: $1",
"thumbnail_image-failure-limit": "Hi ha hagut massa intents fallits recents ($1 o més) per dibuixar aquesta miniatura.\nTorneu-ho a provar més endavant.",
"import": "Importació de pàgines",
- "importinterwiki": "Importa interwiki",
- "import-interwiki-text": "Trieu un web basat en wiki i un títol de pàgina per a importar.\nEs conservaran les dates de les versions i els noms dels editors.\nTotes les accions d'importació interwiki es conserven al [[Special:Log/import|registre d'importacions]].",
+ "importinterwiki": "Importa d'un altre wiki",
+ "import-interwiki-text": "Seleccioneu un wiki i un títol de pàgina per importar.\nEs conservaran les dates de les revisions i els noms dels editors.\nTotes les importacions d'altres wikis s'emmagatzemen al [[Special:Log/import|registre d'importacions]].",
"import-interwiki-sourcewiki": "Wiki d'origen:",
"import-interwiki-sourcepage": "Pàgina d'origen:",
"import-interwiki-history": "Copia totes les versions de l'historial d'aquesta pàgina",
@@ -2207,18 +2256,15 @@
"import-rootpage-nosubpage": "L'espai de noms \"$1\" de la pàgina arrel no permet subpàgines.",
"importlogpage": "Registre d'importació",
"importlogpagetext": "Importacions administratives de pàgines amb l'historial des d'altres wikis.",
- "import-logentry-upload": "ha importat [[$1]] per càrrega de fitxers",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|revisió|revisions}} importades",
- "import-logentry-interwiki": "s'ha importat $1 via interwiki",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisió|revisions}} importades de $2",
"javascripttest": "Proves de JavaScript",
- "javascripttest-title": "S'estan executant $1 proves",
"javascripttest-pagetext-noframework": "Es reserva la pàgina per a l'execució de tests amb JavaScript.",
"javascripttest-pagetext-unknownframework": "L'entorn de proves «$1» és desconegut.",
+ "javascripttest-pagetext-unknownaction": "Acció desconeguda «$1».",
"javascripttest-pagetext-frameworks": "Trieu un dels següents entorns de prova: $1",
"javascripttest-pagetext-skins": "Trieu un tema on executar-hi els tests:",
"javascripttest-qunit-intro": "Consulteu la [documentació de tests de $1] a mediawiki.org.",
- "javascripttest-qunit-heading": "Entorn de proves JavaScript QUnit per al MediaWiki",
"tooltip-pt-userpage": "La vostra pàgina d'usuari",
"tooltip-pt-anonuserpage": "La pàgina d'usuari per la ip que utilitzeu",
"tooltip-pt-mytalk": "La vostra pàgina de discussió.",
@@ -2228,40 +2274,42 @@
"tooltip-pt-mycontris": "Llista de les vostres contribucions.",
"tooltip-pt-login": "Us animem a registrar-vos, però no és obligatori",
"tooltip-pt-logout": "Finalitza la sessió d'usuari",
+ "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu sessió, encara que no és obligatori",
"tooltip-ca-talk": "Discussió sobre el contingut d'aquesta pàgina",
- "tooltip-ca-edit": "Podeu modificar aquesta pàgina. Si us plau, previsualitzeu-la abans de desar.",
+ "tooltip-ca-edit": "Podeu modificar aquesta pàgina. Si us plau, previsualitzeu-la abans de desar-la",
"tooltip-ca-addsection": "Comença una nova secció",
- "tooltip-ca-viewsource": "Aquesta pàgina està protegida. Podeu veure el seu codi font.",
- "tooltip-ca-history": "Versions antigues d'aquesta pàgina.",
+ "tooltip-ca-viewsource": "Aquesta pàgina està protegida.\nPodeu veure'n el codi font.",
+ "tooltip-ca-history": "Versions antigues d'aquesta pàgina",
"tooltip-ca-protect": "Protegeix aquesta pàgina.",
"tooltip-ca-unprotect": "Desprotegeix aquesta pàgina",
"tooltip-ca-delete": "Elimina aquesta pàgina",
"tooltip-ca-undelete": "Restaura les edicions fetes a aquesta pàgina abans de que fos esborrada.",
"tooltip-ca-move": "Reanomena aquesta pàgina",
- "tooltip-ca-watch": "Afegiu aquesta pàgina a la vostra llista de seguiment.",
+ "tooltip-ca-watch": "Afegiu aquesta pàgina a la vostra llista de seguiment",
"tooltip-ca-unwatch": "Suprimiu aquesta pàgina de la vostra llista de seguiment",
"tooltip-search": "Cerca a {{SITENAME}}",
"tooltip-search-go": "Vés a una pàgina amb aquest nom exacte si existeix",
"tooltip-search-fulltext": "Cerca aquest text a les pàgines",
"tooltip-p-logo": "Visiteu la pàgina principal",
- "tooltip-n-mainpage": "Visiteu la pàgina principal.",
+ "tooltip-n-mainpage": "Visiteu la pàgina principal",
"tooltip-n-mainpage-description": "Vegeu la pàgina principal",
"tooltip-n-portal": "Sobre el projecte, què podeu fer, on podeu trobar coses",
- "tooltip-n-currentevents": "Per trobar informació general sobre l'actualitat.",
+ "tooltip-n-currentevents": "Per trobar informació general sobre l'actualitat",
"tooltip-n-recentchanges": "Llista de canvis recents al wiki",
"tooltip-n-randompage": "Pàgina a l'atzar",
"tooltip-n-help": "El lloc per saber més coses",
"tooltip-t-whatlinkshere": "Llista de totes les pàgines wiki que enllacen aquí",
- "tooltip-t-recentchangeslinked": "Canvis recents a pàgines que enllacen amb aquesta pàgina.",
+ "tooltip-t-recentchangeslinked": "Canvis recents a pàgines enllaçades des d'aquesta pàgina",
"tooltip-feed-rss": "Canal RSS d'aquesta pàgina",
"tooltip-feed-atom": "Canal Atom d'aquesta pàgina",
- "tooltip-t-contributions": "Vegeu la llista de contribucions d'aquest usuari.",
+ "tooltip-t-contributions": "Llista de contribucions d'aquest usuari",
"tooltip-t-emailuser": "Envia un correu en aquest usuari.",
- "tooltip-t-upload": "Càrrega d'imatges o altres fitxers.",
- "tooltip-t-specialpages": "Llista de totes les pàgines especials.",
+ "tooltip-t-info": "Més informació sobre aquesta pàgina",
+ "tooltip-t-upload": "Carregueu fitxers",
+ "tooltip-t-specialpages": "Llista de totes les pàgines especials",
"tooltip-t-print": "Versió per a impressió d'aquesta pàgina",
"tooltip-t-permalink": "Enllaç permanent a aquesta versió de la pàgina",
- "tooltip-ca-nstab-main": "Vegeu el contingut de la pàgina.",
+ "tooltip-ca-nstab-main": "Vegeu el contingut de la pàgina",
"tooltip-ca-nstab-user": "Vegeu la pàgina d'usuari",
"tooltip-ca-nstab-media": "Vegeu la pàgina de l'element multimèdia",
"tooltip-ca-nstab-special": "Aquesta és una pàgina especial, no podeu modificar-la",
@@ -2272,7 +2320,7 @@
"tooltip-ca-nstab-help": "Vegeu la pàgina d'ajuda",
"tooltip-ca-nstab-category": "Vegeu la pàgina de la categoria",
"tooltip-minoredit": "Marca-ho com una modificació menor",
- "tooltip-save": "Desa els vostres canvis",
+ "tooltip-save": "Deseu els canvis",
"tooltip-preview": "Reviseu els vostres canvis, feu-ho abans de desar res!",
"tooltip-diff": "Mostra quins canvis heu fet al text",
"tooltip-compareselectedversions": "Vegeu les diferències entre les dues versions seleccionades d'aquesta pàgina.",
@@ -2287,7 +2335,19 @@
"tooltip-summary": "Afegiu un breu resum",
"interlanguage-link-title": "$1 - $2",
"common.css": "/* Editeu aquest fitxer per personalitzar totes les aparences per al lloc sencer */",
+ "print.css": "/* El CSS d'aquí afectarà la sortida impresa */",
+ "noscript.css": "/* El CSS d'aquí afectarà els usuaris que tinguin el JavaScript desactivat */",
+ "group-autoconfirmed.css": "/* El CSS d'aquí només afectarà els usuaris autoconfirmats */",
+ "group-user.css": "/* El CSS d'aquí només afectarà els usuaris registrats */",
+ "group-bot.css": "/* El CSS d'aquí només afectarà els bots */",
+ "group-sysop.css": "/* El CSS d'aquí només afectarà els sysops */",
+ "group-bureaucrat.css": "/* El CSS d'aquí només afectarà els buròcrates */",
"common.js": "/* Es carregarà per a tots els usuaris, i per a qualsevol pàgina, el codi JavaScript que hi haja després d'aquesta línia. */",
+ "group-autoconfirmed.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als usuaris autoconfirmats */",
+ "group-user.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als usuaris rgistrats */",
+ "group-bot.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als bots */",
+ "group-sysop.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als sysops */",
+ "group-bureaucrat.js": "/* Qualsevol JavaScript d'aquí es carregarà només per als buròcrates */",
"anonymous": "Usuari{{PLURAL:$1| anònim|s anònims}} del projecte {{SITENAME}}",
"siteuser": "{{GENDER:$2|l'usuari|la usuària}} $1 del projecte {{SITENAME}}",
"anonuser": "$1, usuari anònim de {{SITENAME}}",
@@ -2305,7 +2365,7 @@
"spam_reverting": "Es reverteix a la darrera versió que no conté enllaços a $1",
"spam_blanking": "Totes les revisions contenien enllaços $1, s'està deixant en blanc",
"spam_deleting": "S'estan suprimint totes les revisions que contenien enllaços a $1",
- "simpleantispam-label": "Comprovació antispam.\n'''NO''' ho ompliu!",
+ "simpleantispam-label": "Comprovació antispam.\n<strong>NO</strong> ho ompliu!",
"pageinfo-title": "Informació de «$1»",
"pageinfo-not-current": "Només es pot visualitzar la informació de la revisió actual.",
"pageinfo-header-basic": "Informació bàsica",
@@ -2321,10 +2381,10 @@
"pageinfo-robot-policy": "Indexació per robots",
"pageinfo-robot-index": "Permès",
"pageinfo-robot-noindex": "No permès",
- "pageinfo-views": "Número de visites",
"pageinfo-watchers": "Número d'usuaris que vigilen la pàgina",
"pageinfo-few-watchers": "Menys de $1 {{PLURAL:$1|observador|observadors}}",
"pageinfo-redirects-name": "Nombre de redireccions a aquesta pàgina",
+ "pageinfo-redirects-value": "$1",
"pageinfo-subpages-name": "Subpàgines d'aquesta pàgina",
"pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirecció|redireccions}}; $3 {{PLURAL:$3|no redireció|no redireccions}})",
"pageinfo-firstuser": "Creador de la pàgina",
@@ -2377,6 +2437,7 @@
"mediawarning": "'''Advertència''': 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)''",
"thumbsize": "Mida de la miniatura:",
+ "widthheight": "$1 × $2",
"widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pàgina|pàgines}}",
"file-info": "mida: $1, tipus MIME: $2",
"file-info-size": "$1 × $2 píxels, mida del fitxer: $3, tipus MIME: $4",
@@ -2406,7 +2467,11 @@
"ilsubmit": "Cerca",
"bydate": "per data",
"sp-newimages-showfrom": "Mostra fitxers nous des del $1 a les $2",
+ "video-dims": "$1, $2 × $3",
+ "seconds-abbrev": "$1 s",
"minutes-abbrev": "$1 min",
+ "hours-abbrev": "$1 h",
+ "days-abbrev": "$1 d",
"seconds": "{{PLURAL:$1|$1 segon|$1 segons}}",
"minutes": "{{PLURAL:$1|$1 minut|$1 minuts}}",
"hours": "{{PLURAL:$1|$1 hora|$1 hores}}",
@@ -2428,11 +2493,26 @@
"sunday-at": "Diumenge a les $1",
"yesterday-at": "Ahir a les $1",
"bad_image_list": "El format ha de ser el següent:\n\nNomés els elements de llista (les línies que comencin amb un *) es prenen en consideració. El primer enllaç de cada línia ha de ser el d'un fitxer dolent.\nLa resta d'enllaços de la línia són les excepcions, és a dir, les pàgines on s'hi pot encabir el fitxer.",
+ "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-sr-ec": "sr-ec",
+ "variantname-shi-latn": "shi-Latn",
+ "variantname-shi": "shi",
+ "variantname-uz": "uz",
+ "variantname-uz-latn": "uz-Latn",
+ "variantname-uz-cyrl": "uz-Cyrl",
"metadata": "Metadades",
"metadata-help": "Aquest fitxer conté informació addicional, probablement afegida per la càmera digital o l'escàner utilitzat per a crear-lo o digitalitzar-lo. Si s'ha modificat posteriorment, alguns detalls poden no reflectir les dades reals del fitxer modificat.",
"metadata-expand": "Mostra els detalls estesos",
"metadata-collapse": "Amaga els detalls estesos",
"metadata-fields": "Els camps de metadades de la imatge llistats en aquest missatge s'inclouran en la pàgina de descripció de la imatge fins i tot quan la taula estigui plegada. La resta estaran ocults però es podran desplegar.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-langitem": "<strong>$2:</strong> $1",
+ "metadata-langitem-default": "$1",
"exif-imagewidth": "Amplada",
"exif-imagelength": "Alçada",
"exif-bitspersample": "Octets per component",
@@ -2478,6 +2558,7 @@
"exif-exposuretime": "Temps d'exposició",
"exif-exposuretime-format": "$1 s ($2)",
"exif-fnumber": "Obertura del diafragma",
+ "exif-fnumber-format": "f/$1",
"exif-exposureprogram": "Programa d'exposició",
"exif-spectralsensitivity": "Sensibilitat espectral",
"exif-isospeedratings": "Sensibilitat ISO",
@@ -2491,6 +2572,7 @@
"exif-lightsource": "Font de llum",
"exif-flash": "Flaix",
"exif-focallength": "Longitud focal de la lent",
+ "exif-focallength-format": "$1 mm",
"exif-subjectarea": "Enquadre del subjecte",
"exif-flashenergy": "Energia del flaix",
"exif-focalplanexresolution": "Resolució X del pla focal",
@@ -2613,6 +2695,7 @@
"exif-compression-2": "Codificació CCITT Grup 3 longitud monodimensional de Huffman modificat",
"exif-compression-3": "Codificació de fax CCITT grup 3",
"exif-compression-4": "Codificació de fax CCITT grup 4",
+ "exif-compression-6": "JPEG (antic)",
"exif-copyrighted-true": "Sotmesa a drets d'autor",
"exif-copyrighted-false": "No s'ha definit l'estat de copyright",
"exif-unknowndate": "Data desconeguda",
@@ -2773,7 +2856,6 @@
"exif-urgency-low": "Baixa ($1)",
"exif-urgency-high": "Alta ($1)",
"exif-urgency-other": "Prioritat definida per l'usuari ($1)",
- "watchlistall2": "totes",
"namespacesall": "tots",
"monthsall": "tots",
"confirmemail": "Confirma l'adreça de correu electrònic",
@@ -2826,7 +2908,7 @@
"table_pager_limit": "Mostra $1 elements per pàgina",
"table_pager_limit_label": "Ítems per pàgina:",
"table_pager_limit_submit": "Vés-hi",
- "table_pager_empty": "Sense resultats",
+ "table_pager_empty": "No hi ha resultats",
"autosumm-blank": "Pàgina blanquejada",
"autosumm-replace": "Contingut canviat per «$1».",
"autoredircomment": "Redirecció a [[$1]]",
@@ -2860,9 +2942,9 @@
"watchlisttools-edit": "Visualitza i edita la llista de seguiment",
"watchlisttools-raw": "Edita la llista de seguiment sense format",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussió]])",
- "unknown_extension_tag": "Etiqueta d'extensió desconeguda «$1»",
"duplicate-defaultsort": "Atenció: La clau d'ordenació per defecte \"$2\" invalida l'anterior clau \"$1\".",
"duplicate-displaytitle": "<strong>Avís:</strong> El títol a mostrar «$2» sobreescriu l'anterior títol a mostrar «$1».",
+ "invalid-indicator-name": "<strong>Error:</strong> No pot estar buit l'atribut <code>name</code> dels indicadors d'estat de la pàgina.",
"version": "Versió",
"version-extensions": "Extensions instaŀlades",
"version-skins": "Temes instal·lats",
@@ -2877,7 +2959,7 @@
"version-parser-function-hooks": "Lligams funcionals de l'analitzador",
"version-hook-name": "Nom del lligam",
"version-hook-subscribedby": "Subscrit per",
- "version-version": "(Versió $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[sense nom]",
"version-license": "Llicència del MediaWiki",
"version-ext-license": "Llicència",
@@ -2902,6 +2984,9 @@
"version-entrypoints": "URL de punts d'entrada",
"version-entrypoints-header-entrypoint": "Punt d'entrada",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Biblioteques instal·lades",
+ "version-libraries-library": "Biblioteca",
+ "version-libraries-version": "Versió",
"redirect": "Redirigeix per fitxer, usuari, pàgina o ID de la revisió",
"redirect-legend": "Redirigeix a un fitxer o a una pàgina",
"redirect-summary": "Aquesta pàgina especial redirigeix a un fitxer (donat el nom del fitxer), una pàgina (donats un ID de la revisió o un ID de pàgina), o a una pàgina d'usuari (donat un ID numèric d'usuari). Ús: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
@@ -2931,12 +3016,13 @@
"specialpages-group-changes": "Canvis recents i registres",
"specialpages-group-media": "Informes multimèdia i càrregues",
"specialpages-group-users": "Usuaris i drets",
- "specialpages-group-highuse": "Pàgines d'alt ús",
+ "specialpages-group-highuse": "Pàgines d’ús elevat",
"specialpages-group-pages": "Llistes de pàgines",
- "specialpages-group-pagetools": "Pàgines d'eines",
+ "specialpages-group-pagetools": "Eines per a les pàgines",
"specialpages-group-wiki": "Dades i eines",
"specialpages-group-redirects": "Pàgines especials de redirecció",
"specialpages-group-spam": "Eines de spam",
+ "specialpages-group-developer": "Eines de desenvolupador",
"blankpage": "Pàgina en blanc",
"intentionallyblankpage": "Pàgina intencionadament en blanc",
"external_image_whitelist": " #Deixeu aquesta línia exactament igual com està<pre>\n#Poseu fragments d'expressions regulars (regexps) (només la part entre els //) a sota\n#Aquests fragments es correspondran amb les URL d'imatges externes\n#Se'n mostraran com a imatges si coincideixen, i sinó es mostraran com a enllaços\n#Les línies que comencen amb un # es tracten com a comentaris\n#S'hi distingeixen majúscules i minúscules\n\n#Poseu tots els fragments regex al damunt d'aquesta línia. Deixeu aquesta línia exactament com està</pre>",
@@ -2949,12 +3035,48 @@
"tags-tag": "Nom de l'etiqueta",
"tags-display-header": "Aparença de la llista de canvis",
"tags-description-header": "Descripció completa del significat",
+ "tags-source-header": "Font",
"tags-active-header": "Actiu?",
"tags-hitcount-header": "Canvis etiquetats",
+ "tags-actions-header": "Accions",
"tags-active-yes": "Sí",
"tags-active-no": "No",
+ "tags-source-extension": "Definit per una extensió",
+ "tags-source-manual": "Aplicat manualment per usuaris i bots",
+ "tags-source-none": "Ja no està en ús",
"tags-edit": "modifica",
+ "tags-delete": "suprimeix",
+ "tags-activate": "activa",
+ "tags-deactivate": "desactiva",
"tags-hitcount": "$1 {{PLURAL:$1|canvi|canvis}}",
+ "tags-manage-no-permission": "No teniu permisos per administrar etiquetes de canvi",
+ "tags-create-heading": "Crea una nova etiqueta",
+ "tags-create-explanation": "Per defecte, les etiquetes acabades de crear estaran disponibles per usuaris i bots",
+ "tags-create-tag-name": "Nom de l'etiqueta:",
+ "tags-create-reason": "Motiu:",
+ "tags-create-submit": "Crea",
+ "tags-create-no-name": "Heu d'especificar un nom d'etiqueta.",
+ "tags-create-invalid-chars": "Els noms d'etiqueta no han de contenir comes (<code>,</code>) o barres (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Els noms d'etiqueta no poden contenir caracters que no es poden usar en els títols de pàgina",
+ "tags-create-already-exists": "L'etiqueta \"$1\" ja existeix.",
+ "tags-create-warnings-below": "Voleu continuar creant l'etiqueta?",
+ "tags-delete-title": "Elimina l'etiqueta",
+ "tags-delete-explanation-initial": "Esteu a punt d'eliminar l'etiqueta «$1» de la base de dades.",
+ "tags-delete-reason": "Motiu:",
+ "tags-delete-submit": "Suprimeix irreversiblement aquesta etiqueta",
+ "tags-delete-not-found": "L'etiqueta «$1» no existeix.",
+ "tags-delete-too-many-uses": "L'etiqueta «$1» s'aplica a més {{PLURAL:$2|d'$2 revisió|de $2 revisions}} i, per tant, no pot eliminar-se.",
+ "tags-activate-title": "Activa l'etiqueta",
+ "tags-activate-question": "Esteu a punt d'activar l'etiqueta «$1».",
+ "tags-activate-reason": "Motiu:",
+ "tags-activate-not-allowed": "No és possible activar l'etiqueta «$1».",
+ "tags-activate-not-found": "L'etiqueta «$1» no existeix.",
+ "tags-activate-submit": "Activa",
+ "tags-deactivate-title": "Desactiva l'etiqueta",
+ "tags-deactivate-question": "Esteu a punt de desactivar l'etiqueta «$1».",
+ "tags-deactivate-reason": "Motiu:",
+ "tags-deactivate-not-allowed": "No és possible desactivar l'etiqueta «$1».",
+ "tags-deactivate-submit": "Desactiva",
"comparepages": "Comparar pàgines",
"compare-page1": "Pàgina 1",
"compare-page2": "Pàgina 2",
@@ -2966,8 +3088,8 @@
"compare-revision-not-exists": "La revisió que heu especificat no existeix.",
"dberr-problems": "Ho sentim. Aquest lloc web està experimentant dificultats tècniques.",
"dberr-again": "Intenteu esperar uns minuts i tornar a carregar.",
- "dberr-info": "(No es pot contactar amb el servidor de dades: $1)",
- "dberr-info-hidden": "(No es pot contactar amb el servidor de la base de dades)",
+ "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.",
@@ -2989,7 +3111,7 @@
"htmlform-cloner-required": "Cal com a mínim un valor.",
"sqlite-has-fts": "$1, amb suport de búsqueda de text íntegre",
"sqlite-no-fts": "$1, sense supor de búsqueda de text íntegre",
- "logentry-delete-delete": "$1 ha esborrat $3",
+ "logentry-delete-delete": "$1 {{GENDER:$2|ha esborrat}} la pàgina $3",
"logentry-delete-restore": "$1 ha restaurat $3",
"logentry-delete-event": "$1 {{GENDER:$2|ha canviat}} la visibilitat {{PLURAL:$5|d'un esdeveniment al registre|de $5 esdeveniments al registre}} de $3: $4",
"logentry-delete-revision": "$1 {{GENDER:$2|ha canviat}} la visibilitat {{PLURAL:$5|d'una revisió|de $5 revisions}} a la pàgina $3: $4",
@@ -3008,6 +3130,10 @@
"revdelete-uname-unhid": "ha revelat un nom d'usuari que era ocult",
"revdelete-restricted": "ha aplicat restriccions als administradors",
"revdelete-unrestricted": "ha tret les restriccions als administradors",
+ "logentry-block-unblock": "$1 {{GENDER:$2|va desblocar}} {{GENDER:$4|$3}}",
+ "logentry-import-upload": "$1 {{GENDER:$2|va importar}} $3 a través de càrrega de fitxer",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|va importar}} $3 d'un altre wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|ha fusionat}} $3 en $4 (revisions fins a $5)",
"logentry-move-move": "$1 ha mogut $3 a $4",
"logentry-move-move-noredirect": "$1 ha mogut $3 a $4 sense deixar una redirecció",
"logentry-move-move_redir": "$1 ha mogut $3 a $4 sobre una redirecció",
@@ -3025,20 +3151,30 @@
"logentry-upload-upload": "$1 {{GENDER:$2|ha carregat}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|ha carregat}} una nova versió de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|ha carregat}} $3",
+ "log-name-managetags": "Registre de gestió d'etiquetes",
+ "logentry-managetags-create": "$1 {{GENDER:$2|va crear}} l'etiqueta «$4»",
"rightsnone": "(cap)",
+ "revdelete-summary": "el resum d'edició",
+ "feedback-adding": "S'està afegint el comentari a la pàgina...",
+ "feedback-back": "Enrere",
+ "feedback-bugcheck": "Fantàstic! Comproveu que no sigui un dels [$1 problemes ja coneguts].",
+ "feedback-bugnew": "Ja ho he comprovat. Informeu d'un nou problema",
"feedback-bugornote": "Si podeu descriure un problema tècnic en detall, [$1 informeu-ne].\nAltrament, podeu fer servir un senzill formulari a continuació. El vostre comentari s'afegirà a la pàgina «[$3 $2]», juntament amb el vostre nom d'usuari i el navegador que esteu emprant.",
- "feedback-subject": "Assumpte:",
- "feedback-message": "Missatge:",
"feedback-cancel": "Canceŀla",
- "feedback-submit": "Envieu la vostra opinió",
- "feedback-adding": "S'està afegint el comentari a la pàgina...",
+ "feedback-close": "Fet",
+ "feedback-external-bug-report-button": "Arxiva una tasca tècnica",
+ "feedback-dialog-title": "Envia el comentari",
+ "feedback-dialog-intro": "Podeu utilitzar el senzill formulari de sota per a trametre la vostra opinió. El comentari s'afegirà a la pàgina «$1» juntament amb el vostre nom d'usuari.",
+ "feedback-error-title": "Error",
"feedback-error1": "Error: Resultat de l'API no reconegut",
"feedback-error2": "Error: Edició fallida",
"feedback-error3": "Error: No hi ha resposta de l'API",
+ "feedback-message": "Missatge:",
+ "feedback-subject": "Assumpte:",
+ "feedback-submit": "Envia",
"feedback-thanks": "Gràcies! S'ha publicat la vostra opinió a la pàgina «[$2 $1]».",
- "feedback-close": "Fet",
- "feedback-bugcheck": "Fantàstic! Comproveu que no sigui un dels [$1 problemes ja coneguts].",
- "feedback-bugnew": "Ja ho he comprovat. Informeu d'un nou problema",
+ "feedback-thanks-title": "Gràcies!",
+ "feedback-useragent": "Agent d'usuari:",
"searchsuggest-search": "Cerca",
"searchsuggest-containing": "que conté ...",
"api-error-badaccess-groups": "No teniu permís per a carregar fitxers en aquest wiki.",
@@ -3074,6 +3210,13 @@
"api-error-stashfailed": "Error intern: el servidor no ha pogut emmagatzemar fitxers temporals.",
"api-error-publishfailed": "Error intern: el servidor no ha pogut publicar el fitxer temporal.",
"api-error-stasherror": "S'ha produït un error en carregar el fitxer al dipòsit.",
+ "api-error-stashedfilenotfound": "No s'ha trobat el fitxer de l'espai temporal quan es provava de carregar-lo d'allà.",
+ "api-error-stashpathinvalid": "El camí on s'havia trobar el fitxer de l'espai temporal no és vàlid.",
+ "api-error-stashfilestorage": "S'ha produït un error en emmagatzemar el fitxer en l'espai temporal.",
+ "api-error-stashzerolength": "El servidor no ha pogut desar el fitxer a l'espai temporal perquè tenia longitud zero.",
+ "api-error-stashnotloggedin": "Cal haver iniciat una sessió per desar fitxers en l'espai temporal de càrrega.",
+ "api-error-stashwrongowner": "El fitxer que provàveu d'accedir en l'espai temporal no us pertany.",
+ "api-error-stashnosuchfilekey": "La clau de fitxer que provàveu d'accedir en l'espai temporal no existeix.",
"api-error-timeout": "El servidor no ha respost en el temps esperat.",
"api-error-unclassified": "S'ha produït un error desconegut",
"api-error-unknown-code": "Error desconegut: «$1»",
@@ -3118,6 +3261,8 @@
"expand_templates_generate_xml": "Mostra l'arbre XML",
"expand_templates_generate_rawhtml": "Mostra l'HTML sense filtrar",
"expand_templates_preview": "Previsualitza",
+ "expand_templates_preview_fail_html": "<em>Atès que {{SITENAME}} té HTML cru i hi ha hagut una pèrdua de dades de la sessió, s'ha amagat la vista prèvia com a mesura de precaució contra atacs en JavaScript.</em>\n\n<strong>Si això és un intent de previsualització legítim, torneu-ho a provar.</strong>\nSi encara no funciona, intenteu [[Special:UserLogout|finalitzar la sessió]] i iniciar-la de nou.",
+ "expand_templates_preview_fail_html_anon": "<em>Atès que {{SITENAME}} té l'HTML cru habilitat i no heu iniciat una sessió, s'ha amagat la previsualització com a prevenció d'atacs en JavaScript.</em>\n\n<strong>Si això és un intent de previsualització legítim, [[Special:UserLogin|inicieu una sessió]] i torneu-ho a provar.</strong>",
"pagelanguage": "Selector de l'idioma de les pàgines",
"pagelang-name": "Pàgina",
"pagelang-language": "Idioma",
@@ -3128,6 +3273,58 @@
"log-name-pagelang": "Canvia el registre de llengua",
"log-description-pagelang": "Aquest és un registre dels canvis en les llengües de les pàgines.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha canviat}} la llengua de la pàgina per a $3 de $4 a $5.",
+ "default-skin-not-found": "Òndia! L'aparença per defecte per al wiki, definit en <code dir=\"ltr\">$wgDefaultSkin</code> com <code>$1</code>, no està disponible.\n\nLa vostra instal·lació sembla que inclou les següents aparences. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Configuració d'aparences] per a la informació de com habilitar-les i triar-ne el valor per defecte.\n\n$2\n\n; Si heu acabat d'instal·lar MediaWiki:\n: Probablement l'instal·làveu des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Intenteu instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org], per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador tarball], que ve amb diverses aparences i ampliacions. Podeu copiar i enganxar el directori <code>skins/</code> des d'aquí.\n: * Clonar un dels repositoris <code>mediawiki/skins/*</code> a través de git en el directori <code dir=\"ltr\">skins/</code> de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre dipòsit git si sou un desenvolupador de MediaWiki.\n\n; Si només heu actualitzat MediaWiki:\n: Per MediaWiki 1.24 i posteriors ja no permet aparences instal·lades automàticament (consulteu [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Aparences autodiscovery]). Podeu enganxar les línies següents en <code>LocalSettings.php</code> per permetre totes les aparences instal·lades actualment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si només heu modificat <code>LocalSettings.php</code>:\n: Reviseu els noms de l'aparença per errors tipogràfics.",
+ "default-skin-not-found-no-skins": "Òndia! L'aparença per defecte per al wiki, definit en <code>$wgDefaultSkin</code> com <code>$1</code>, no està disponible.\n\nNo teniu cap aparença instal·lada.\n\n\n; Si heu acabat d'instal·lar o actualitzar MediaWiki:\n: Probablement l'heu instal·lat des de git, o directament des del codi font utilitzant algun altre mètode. Això és l'esperat. Per MediaWiki 1.24 i posteriors ja no s'inclouen aparences en el repositori principal. Proveu d'instal·lar algunes aparences des del [https://www.mediawiki.org/wiki/Category:All_skins directori d'aparences de mediawiki.org], per:\n: * Descarregar l'[https://www.mediawiki.org/wiki/Download instal·lador tarball], que ve amb diverses aparences i ampliacions. Podeu copiar i enganxar el directori <code>skins/</code> des d'aquí.\n: * Clonar un dels repositoris <code>mediawiki/skins/*</code> a través de git en el directori <code dir=\"ltr\">skins/</code> de la vostra instal·lació de MediaWiki.\n: Fent això no s'hauria d'interferir amb el vostre dipòsit git si sou un desenvolupador de MediaWiki. Consulteu [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: configuració de l'aparença] per informació de com permetre aparences i triar-ne per defecte.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (habilitat)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inhabilitat''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inhabilitat''')",
+ "mediastatistics": "Estadístiques dels multimèdia",
+ "mediastatistics-summary": "Les estadístiques sobre els tipus de fitxers pujats. Això només inclou la versió més recent d'un fitxer. S'exclouen les versions antigues o eliminades dels fitxers.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tipus MIME",
+ "mediastatistics-table-extensions": "Extensions possibles",
+ "mediastatistics-table-count": "Nombre de fitxers",
+ "mediastatistics-table-totalbytes": "Mida combinada",
+ "mediastatistics-header-unknown": "Desconegut",
+ "mediastatistics-header-bitmap": "Imatges de mapa de bits",
+ "mediastatistics-header-drawing": "Dibuixos (imatges vectorials)",
+ "mediastatistics-header-audio": "Àudio",
+ "mediastatistics-header-video": "Vídeos",
+ "mediastatistics-header-multimedia": "Multimèdia enriquida",
+ "mediastatistics-header-office": "Oficina",
+ "mediastatistics-header-text": "Textual",
+ "mediastatistics-header-executable": "Executables",
+ "mediastatistics-header-archive": "Formats comprimits",
+ "json-warn-trailing-comma": "$1 al final {{PLURAL:$1|coma ha estat eliminada|comes han estat eliminades}} de JSON",
+ "json-error-unknown": "S'ha produït un error amb el JSON. Error: $1",
+ "json-error-depth": "S'ha superat la profunditat màxima de pila",
+ "json-error-state-mismatch": "JSON incorrecte o no vàlid",
+ "json-error-ctrl-char": "Error de caràcter de control, possiblement incorrectament codificat",
+ "json-error-syntax": "Error de sintaxi",
+ "json-error-utf8": "Caràcters UTF-8 amb errors de format, probablement mal codificats",
+ "json-error-recursion": "Una o més referències recursives en el valor per ser codificat",
+ "json-error-inf-or-nan": "Un o més valors NAN (número no assignat) o INF (infinit) en el valor per ser codificat",
+ "json-error-unsupported-type": "S'ha donat un valor d'un tipus que no pot ser codificat",
+ "headline-anchor-title": "Enllaç a aquesta secció",
+ "special-characters-group-latin": "Llatí",
+ "special-characters-group-latinextended": "Llatí ampliat",
+ "special-characters-group-ipa": "AFI",
+ "special-characters-group-symbols": "Símbols",
+ "special-characters-group-greek": "Grec",
+ "special-characters-group-cyrillic": "Ciríŀlic",
+ "special-characters-group-arabic": "Aràbic",
+ "special-characters-group-arabicextended": "Aràbic estès",
+ "special-characters-group-persian": "Persa",
+ "special-characters-group-hebrew": "Hebreu",
+ "special-characters-group-bangla": "Bengalí",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Tailandès",
+ "special-characters-group-lao": "Laosià",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "guió curt",
+ "special-characters-title-emdash": "guió llarg",
+ "special-characters-title-minus": "signe menys"
}
diff --git a/languages/i18n/cbk-zam.json b/languages/i18n/cbk-zam.json
index e6b9022f..1ce81c65 100644
--- a/languages/i18n/cbk-zam.json
+++ b/languages/i18n/cbk-zam.json
@@ -1,85 +1,85 @@
{
- "@metadata": {
- "authors": [
- "Weekeejames"
- ]
- },
- "january": "Enero",
- "february": "Febrero",
- "march": "Marzo",
- "april": "Abril",
- "may_long": "Mayo",
- "june": "Junio",
- "july": "Julio",
- "august": "Agosto",
- "september": "Septiembre",
- "october": "Octubre",
- "november": "Noviembre",
- "december": "Diciembre",
- "april-gen": "Abril",
- "august-gen": "Agosto",
- "december-gen": "Diciembre",
- "apr": "Abr",
- "aug": "Ago",
- "dec": "Dic",
- "category_header": "Maga articulo na categoria \"$1\"",
- "about": "Acerca de",
- "article": "El laman del pagina",
- "tagline": "Estava na {{SITENAME}}",
- "help": "Ayuda",
- "search": "Busqueda",
- "searchbutton": "Busca",
- "searcharticle": "Anda",
- "history_short": "Historia",
- "printableversion": "El version que puede imprenta",
- "edit": "Revisa",
- "delete": "Bora",
- "talkpagelinktext": "Cuento",
- "personaltools": "Maga herramientas personal",
- "articlepage": "Mira con el laman del pagina",
- "views": "Maga vista",
- "categorypage": "Mira con el pagina de categoria",
- "otherlanguages": "na otro maga lenguaje",
- "lastmodifiedat": "Ya modifica con este pagina por ultimo vez en hora $2 del $1.",
- "aboutsite": "Acerca de {{SITENAME}}",
- "aboutpage": "Project:Acerca de",
- "copyright": "Obtenible el maga texto de este Wikipedia bajo los terminos y maga condicion del <i>$1</i>.",
- "copyrightpage": "{{ns:project}}:Maga derecho del autor",
- "currentevents": "Maga sucesos actual",
- "currentevents-url": "Project:Maga sucesos actual",
- "disclaimers": "Maga aviso legal",
- "disclaimerpage": "Project:El maga limitacion general de maga responsabilidad",
- "mainpage": "El Primero Pagina",
- "mainpage-description": "El Primero Pagina",
- "portal": "Portal del Comunidad",
- "privacy": "Policia na proteccion del maga informacion",
- "privacypage": "Project:Policia na proteccion del maga informacion",
- "retrievedfrom": "Obtenido de \"$1\"",
- "editsectionhint": "Revisa el seccion: $1",
- "site-rss-feed": "$1 Informacion de RSS",
- "site-atom-feed": "$1 Informacion de Atom",
- "red-link-title": "$1 (jendeh ta existi el pagina)",
- "acct_creation_throttle_hit": "Ya crea ya {{PLURAL:$1|un cuenta registro|$1 maga cuenta registro}} el maga visita de este wiki usando el de uste direccion de IP en el ultimo dia. Entonces, ya sobra ya na maximo numero que ta puede permiti el sistema para crea cuenta. Por causa de este razon, no puede mas crea nuevo cuenta usando el de uste direccion de IP este maga tiempo.",
- "accountcreated": "El cuenta registro del usuario es creando",
- "accountcreatedtext": "Creao ya el cuenta registro por usuario $1.",
- "changepassword": "Cambia con el contraseña",
- "blockedtitle": "El usuario es prohibido o bloqueado",
- "accmailtitle": "Enviao ya el contraseña.",
- "accmailtext": "El contraseña que el sistema ya escogi automatico por usuario [[User talk:$1|$1]] enviado ya a $2.\n\nEl contraseña de este nuevo cuenta puede cambia na pagina ''[[Special:ChangePassword|cambia el contraseña]]'' despues el autenticacion.",
- "search-result-size": "$1 ({{PLURAL:$2|1 palabra|$2 maga palabra}})",
- "recentchanges": "Maga Reciente Cambio",
- "randompage": "Pagina Escujido Automatico",
- "allarticles": "Todo maga articulo",
- "categories": "Maga categoria",
- "categoriespagetext": "El maga siguiente {{PLURAL:$1|categoria tiene|categoria tiene}} maga pagina o medio de comunicacion.\n\nEl maga [[Special:UnusedCategories|categoria sin usando]] jendeh ta abuya aqui.\n\nPor favor mira tambien el maga [[Special:WantedCategories|categoria requeridas]].",
- "watch": "Vicia",
- "created": "creao",
- "changed": "cambiao",
- "actioncomplete": "Completo el accion",
- "contributions": "Maga contribuciones del usuario",
- "blockip": "Usuario prohibido",
- "blockipsuccesssub": "El prohibicion es confirmado con exito",
- "contribslink": "Maga contribuciones",
- "tooltip-search": "Busca na {{SITENAME}}",
- "tooltip-n-mainpage": "Visita na Primero Pagina"
+ "@metadata": {
+ "authors": [
+ "Weekeejames"
+ ]
+ },
+ "january": "Enero",
+ "february": "Febrero",
+ "march": "Marzo",
+ "april": "Abril",
+ "may_long": "Mayo",
+ "june": "Junio",
+ "july": "Julio",
+ "august": "Agosto",
+ "september": "Septiembre",
+ "october": "Octubre",
+ "november": "Noviembre",
+ "december": "Diciembre",
+ "april-gen": "Abril",
+ "august-gen": "Agosto",
+ "december-gen": "Diciembre",
+ "apr": "Abr",
+ "aug": "Ago",
+ "dec": "Dic",
+ "category_header": "Maga articulo na categoria \"$1\"",
+ "about": "Acerca de",
+ "article": "El laman del pagina",
+ "tagline": "Estava na {{SITENAME}}",
+ "help": "Ayuda",
+ "search": "Busqueda",
+ "searchbutton": "Busca",
+ "searcharticle": "Anda",
+ "history_short": "Historia",
+ "printableversion": "El version que puede imprenta",
+ "edit": "Revisa",
+ "delete": "Bora",
+ "talkpagelinktext": "Cuento",
+ "personaltools": "Maga herramientas personal",
+ "articlepage": "Mira con el laman del pagina",
+ "views": "Maga vista",
+ "categorypage": "Mira con el pagina de categoria",
+ "otherlanguages": "na otro maga lenguaje",
+ "lastmodifiedat": "Ya modifica con este pagina por ultimo vez en hora $2 del $1.",
+ "aboutsite": "Acerca de {{SITENAME}}",
+ "aboutpage": "Project:Acerca de",
+ "copyright": "Obtenible el maga texto de este Wikipedia bajo los terminos y maga condicion del <i>$1</i>.",
+ "copyrightpage": "{{ns:project}}:Maga derecho del autor",
+ "currentevents": "Maga sucesos actual",
+ "currentevents-url": "Project:Maga sucesos actual",
+ "disclaimers": "Maga aviso legal",
+ "disclaimerpage": "Project:El maga limitacion general de maga responsabilidad",
+ "mainpage": "El Primero Pagina",
+ "mainpage-description": "El Primero Pagina",
+ "portal": "Portal del Comunidad",
+ "privacy": "Policia na proteccion del maga informacion",
+ "privacypage": "Project:Policia na proteccion del maga informacion",
+ "retrievedfrom": "Obtenido de \"$1\"",
+ "editsectionhint": "Revisa el seccion: $1",
+ "site-rss-feed": "$1 Informacion de RSS",
+ "site-atom-feed": "$1 Informacion de Atom",
+ "red-link-title": "$1 (jendeh ta existi el pagina)",
+ "acct_creation_throttle_hit": "Ya crea ya {{PLURAL:$1|un cuenta registro|$1 maga cuenta registro}} el maga visita de este wiki usando el de uste direccion de IP en el ultimo dia. Entonces, ya sobra ya na maximo numero que ta puede permiti el sistema para crea cuenta. Por causa de este razon, no puede mas crea nuevo cuenta usando el de uste direccion de IP este maga tiempo.",
+ "accountcreated": "El cuenta registro del usuario es creando",
+ "accountcreatedtext": "Creao ya el cuenta registro por usuario $1.",
+ "changepassword": "Cambia con el contraseña",
+ "blockedtitle": "El usuario es prohibido o bloqueado",
+ "accmailtitle": "Enviao ya el contraseña.",
+ "accmailtext": "El contraseña que el sistema ya escogi automatico por usuario [[User talk:$1|$1]] enviado ya a $2.\n\nEl contraseña de este nuevo cuenta puede cambia na pagina ''[[Special:ChangePassword|cambia el contraseña]]'' despues el autenticacion.",
+ "search-result-size": "$1 ({{PLURAL:$2|1 palabra|$2 maga palabra}})",
+ "recentchanges": "Maga Reciente Cambio",
+ "randompage": "Pagina Escujido Automatico",
+ "allarticles": "Todo maga articulo",
+ "categories": "Maga categoria",
+ "categoriespagetext": "El maga siguiente {{PLURAL:$1|categoria tiene|categoria tiene}} maga pagina o medio de comunicacion.\n\nEl maga [[Special:UnusedCategories|categoria sin usando]] jendeh ta abuya aqui.\n\nPor favor mira tambien el maga [[Special:WantedCategories|categoria requeridas]].",
+ "watch": "Vicia",
+ "created": "creao",
+ "changed": "cambiao",
+ "actioncomplete": "Completo el accion",
+ "contributions": "Maga contribuciones del usuario",
+ "blockip": "Usuario prohibido",
+ "blockipsuccesssub": "El prohibicion es confirmado con exito",
+ "contribslink": "Maga contribuciones",
+ "tooltip-search": "Busca na {{SITENAME}}",
+ "tooltip-n-mainpage": "Visita na Primero Pagina"
}
diff --git a/languages/i18n/cdo.json b/languages/i18n/cdo.json
index 2dd4f9d3..25333f24 100644
--- a/languages/i18n/cdo.json
+++ b/languages/i18n/cdo.json
@@ -13,9 +13,11 @@
]
},
"tog-underline": "下劃綫鏈接",
- "tog-hideminor": "藏起最近改變其過要修改",
- "tog-hidepatrolled": "藏起最近改變其巡邏修改",
+ "tog-hideminor": "囥起最近改變其過幼修改",
+ "tog-hidepatrolled": "囥起最近改變其巡邏修改",
+ "tog-newpageshidepatrolled": "共巡邏視頁趁新建頁列表𡅏囥起去",
"tog-extendwatchlist": "敆擴展監視單單臺中顯示所有其更改,伓啻最近其更改",
+ "tog-usenewrc": "按頁顯示最近修改共監視列表臺中其群組改變",
"tog-numberheadings": "自動編號其標題",
"tog-showtoolbar": "顯示編輯工具欄",
"tog-editondblclick": "雙擊就修改頁面",
@@ -24,28 +26,31 @@
"tog-watchdefault": "添加我編輯其頁面共文件遘我其監視單",
"tog-watchmoves": "添加我移動其頁面共文件遘我其監視單",
"tog-watchdeletion": "添加我刪掉其頁面共文件遘我其監視單",
- "tog-minordefault": "默認共所有其編輯都當作過要修改",
+ "tog-watchrollback": "敆我其監視列表臺中添加我做過回滚其頁面",
+ "tog-minordefault": "默認共所有其編輯都當作過幼修改",
"tog-previewontop": "敆編輯框以前顯示預覽",
"tog-previewonfirst": "敆頭蜀回編輯時候看預覽",
"tog-enotifwatchlistpages": "我其監視單有變時候,發電子郵件乞我",
"tog-enotifusertalkpages": "我其討論頁有變時候,發電子郵件乞我",
- "tog-enotifminoredits": "即使是過要編輯,也著發電子郵件乞我",
+ "tog-enotifminoredits": "就㑚講是過幼編輯,也着發電子郵件乞我",
+ "tog-enotifrevealaddr": "敆通知郵件臺中顯示我其電子郵件地址",
"tog-shownumberswatching": "顯示監視用戶其數量",
"tog-oldsig": "存在其簽名",
"tog-fancysig": "共簽名當成維基文本(無自動鏈接)",
- "tog-uselivepreview": "使即時預覽(敆𡅏實驗)",
+ "tog-uselivepreview": "使即時預覽",
"tog-forceeditsummary": "提醒我行遘蜀萆空白其編輯總結",
- "tog-watchlisthideown": "趁監視單𡅏藏起我其修改",
- "tog-watchlisthidebots": "藏起監視單其機器人其修改",
- "tog-watchlisthideminor": "藏起監視單其過要修改",
- "tog-watchlisthideliu": "共已經躒底其用戶其編輯趁監視單𡅏藏起咯",
- "tog-watchlisthideanons": "共匿名其用戶其編輯趁監視單𡅏藏起咯",
- "tog-watchlisthidepatrolled": "共巡查其編輯趁監視單𡅏藏起咯",
+ "tog-watchlisthideown": "趁監視單𡅏囥起我其修改",
+ "tog-watchlisthidebots": "囥起監視單其機器人其修改",
+ "tog-watchlisthideminor": "囥起監視單其過幼修改",
+ "tog-watchlisthideliu": "共已經登錄其用戶其編輯趁監視單𡅏囥起咯",
+ "tog-watchlisthideanons": "共匿名其用戶其編輯趁監視單𡅏囥起咯",
+ "tog-watchlisthidepatrolled": "共巡查其編輯趁監視單𡅏囥起咯",
"tog-ccmeonemails": "共我發乞其他用戶其電子郵件其備份發乞我。",
"tog-diffonly": "伓使敆下底其顯示𣍐蜀様其地方顯示頁面內容",
"tog-showhiddencats": "㪗藏類別",
"tog-norollbackdiff": "敆回滾其時候,無叕𣍐蜀様其地方",
"tog-useeditwarning": "我編輯頁面其時候離開,起動警告我蜀下",
+ "tog-prefershttps": "登錄以後全程使用安全連接",
"underline-always": "直頭",
"underline-never": "頭𡅏無",
"underline-default": "皮膚或者瀏覽器默認其",
@@ -121,8 +126,8 @@
"subcategories": "子類別",
"category-media-header": "「$1」類別下底其媒體",
"category-empty": "''茲類別下底現在無文章也無媒體。''",
- "hidden-categories": "{{PLURAL:$1}}乞藏起其類別",
- "hidden-category-category": "已經藏起其類別",
+ "hidden-categories": "{{PLURAL:$1}}乞囥起其類別",
+ "hidden-category-category": "已經囥起其類別",
"category-subcat-count": "{{PLURAL:$2|茲萆分類僅包括下底蜀萆子分類|茲分類有 {{PLURAL:$1|子分類|$1 萆子分類}},總計 $2 萆。}}",
"category-subcat-count-limited": "茲蜀萆類別下底有子類別{{PLURAL:$1}}",
"category-article-count": "{{PLURAL:$2|茲蜀萆類別儷有下底蜀頁。|共總有$2頁,下底其茲$1頁敆茲蜀萆類別𡅏。}}",
@@ -143,7 +148,7 @@
"mytalk": "我其討論",
"anontalk": "茲隻IP其討論頁",
"navigation": "引導",
- "and": "&#32;and",
+ "and": "&#32;共",
"qbfind": "討",
"qbbrowse": "覷蜀覷",
"qbedit": "修改",
@@ -170,8 +175,11 @@
"permalink": "永久鏈接",
"print": "拍印",
"view": "覷蜀覷",
+ "view-foreign": "敆$1𡅏看",
"edit": "修改",
+ "edit-local": "編輯當地描述",
"create": "創建",
+ "create-local": "添加當地描述",
"editthispage": "修改茲頁",
"create-this-page": "創建茲蜀頁",
"delete": "刪除",
@@ -188,11 +196,11 @@
"talkpage": "討論茲頁",
"talkpagelinktext": "討論",
"specialpage": "特殊頁",
- "personaltools": "個人其家私",
+ "personaltools": "個人其傢私花",
"articlepage": "覷蜀覷內容頁面",
"talk": "討論",
"views": "覷蜀覷",
- "toolbox": "家私",
+ "toolbox": "傢私花",
"userpage": "覷蜀覷用戶頁面",
"projectpage": "看工程頁",
"imagepage": "覷蜀覷文件頁面",
@@ -202,8 +210,9 @@
"categorypage": "看分類頁",
"viewtalkpage": "看討論",
"otherlanguages": "其它其語言",
- "redirectedfrom": "(由$1重定向過來)",
+ "redirectedfrom": "(趁$1重定向過來)",
"redirectpagesub": "重定向頁",
+ "redirectto": "重定向遘",
"lastmodifiedat": "茲蜀頁是着$1 $2其辰候最後修改其。",
"viewcount": "茲蜀頁已經乞訪問$1回了。{{PLURAL:$1}}",
"protectedpage": "保護頁",
@@ -211,12 +220,13 @@
"jumptonavigation": "引導:",
"jumptosearch": "尋討",
"view-pool-error": "對不住,服務器茲蜀萆時候已弳過載了。\n過価用戶敆𡅏覷茲蜀頁。\n起動等仂久再來覷茲蜀頁。\n\n$1",
+ "generic-pool-error": "對不住,現刻時服務器過載了。\n實在過価用戶敆𡅏訪問茲蜀萆資源。\n起動汝等蜀刻再訪問茲蜀萆資源。",
"pool-timeout": "等待鎖定其時間遘了",
"pool-queuefull": "隊列池已經滿了",
"pool-errorunknown": "𣍐八什乇鄭咯",
"aboutsite": "關於{{SITENAME}}",
"aboutpage": "Project:關於",
- "copyright": "內容敆$1下底會使獲得。",
+ "copyright": "內容會使敆$1下底會使獲得遘,若無會給出其它提示。",
"copyrightpage": "{{ns:project}}:版權",
"currentevents": "大樹下",
"currentevents-url": "Project:大樹下",
@@ -232,7 +242,7 @@
"privacypage": "Project:隱私政策",
"badaccess": "權限錯誤",
"badaccess-group0": "汝𣍐使做汝要求其茲蜀萆動作。",
- "badaccess-groups": "汝要求其動作著$2底裏用戶才會做其:$1{{PLURAL:$1}}",
+ "badaccess-groups": "汝要求其動作着$2裏勢用戶乍會做其:$1{{PLURAL:$1}}",
"versionrequired": "需要版本$1其MediaWiki",
"versionrequiredtext": "需要MediaWiki其版本$1來使茲蜀頁。\n覷[[Special:Version|版本頁面]]。",
"ok": "好",
@@ -240,8 +250,8 @@
"youhavenewmessages": "汝有$1($2)。",
"youhavenewmessagesfromusers": "汝有趁$3用戶($2)來其$1萆信息{{PLURAL:$3}}",
"youhavenewmessagesmanyusers": "汝有趁雅価用戶($2)其$1信息",
- "newmessageslinkplural": "$1條新其信息{{PLURAL:$1}}",
- "newmessagesdifflinkplural": "最後其改變{{PLURAL:$1}}",
+ "newmessageslinkplural": "{{PLURAL:$1|蜀條新其消息|999=新其消息}}",
+ "newmessagesdifflinkplural": "最後{{PLURAL:$1|回改變|999=回改變}}",
"youhavenewmessagesmulti": "汝有趁$1來其新信息",
"editsection": "修改",
"editold": "修改",
@@ -251,9 +261,12 @@
"editsectionhint": "修改段:$1",
"toc": "目錄",
"showtoc": "顯示",
- "hidetoc": "藏起",
+ "hidetoc": "囥起",
"collapsible-collapse": "隱",
"collapsible-expand": "現",
+ "confirmable-confirm": "汝會確定𣍐?",
+ "confirmable-yes": "是",
+ "confirmable-no": "伓是",
"thisisdeleted": "卜看或者恢復$1?",
"viewdeleted": "看$1?",
"restorelink": "$1萆乞刪掉其修改{{PLURAL:$1}}",
@@ -283,51 +296,69 @@
"nospecialpagetext": "<strong>汝請求蜀萆𣍐合法其特殊頁面。</strong>\n\n合法其特殊頁面清單會使敆[[Special:SpecialPages|{{int:特殊頁面}}]]頁面討著",
"error": "鄭咯",
"databaseerror": "數據庫有綻",
+ "databaseerror-text": "數據庫查詢發生錯誤。\n嚽可能是軟件底裡其程序缺陷。",
+ "databaseerror-textcl": "數據庫查詢發生錯誤。",
+ "databaseerror-query": "查詢語句:$1",
+ "databaseerror-function": "函數名:$1",
+ "databaseerror-error": "錯誤信息:$1",
"laggedslavemode": "'''警告:'''頁面可能無最近其更新。",
"readonly": "數據庫乞鎖起咯",
- "readonlytext": "Só-gé̤ṳ-kó cī-buàng ké̤ṳk nè̤ng sō̤ kī lāu, mâ̤-sāi siā sĭng dèu-mĕ̤k hĕ̤k có̤ siŭ-gāi, ô kō̤-nèng sê ôi-lāu nĭk-siòng mì-hô, cĭ-hâiu cêu â̤ ciáng-siòng.\n\nSō̤ kī só-gé̤ṳ-kó gì guāng-lī-uòng cūng-kuāng gāi-sék: $1",
+ "enterlockreason": "拍底汝鎖定數據庫其原因,包括汝估計其釋放鎖其時間",
+ "readonlytext": "數據庫茲滿乞儂鎖定了,𣍐使寫新條目或者做修改。有可能是日常維護,之後就會正常。\n\n\n鎖起數據庫其管理員總款解釋:$1",
+ "missing-article": "數據庫未討遘本身應當著討遘其名叫\"$1\"其頁面$2其文本。\n\n嚽可能是下底其過時其diff或者已經删除其歴史鏈接造成其。\n\n如果伓是茲兩種情況,汝可能發現著蜀萆服務器其缺陷。\n起動汝共茲蜀萆缺陷匯報乞[[Special:ListUsers/sysop|管理員]],附上網址。",
+ "missingarticle-rev": "(版本#:$1)",
"missingarticle-diff": "(比並:$1、$2)",
+ "readonly_lag": "從數據庫跟上主數據庫其辰候,數據庫已經自動鎖定",
"internalerror": "內部錯誤",
"internalerror_info": "內部錯誤:$1",
"filecopyerror": "𣍐使趁「$1」𡅏複製文件遘「$2」。",
"filerenameerror": "𣍐使共「$1」其名字改去「$2」。",
"filedeleteerror": "𣍐使刪掉文件「$1」。",
"directorycreateerror": "𣍐使刪掉目錄「$1」。",
+ "directoryreadonlyerror": "目錄$1是只讀目錄。",
+ "directorynotreadableerror": "目錄$1是禁讀目錄。",
"filenotfound": "討𣍐著文件「$1」。",
"unexpected": "伓是卜挃其值:「$1」=「$2」。",
"formerror": "賺:𣍐使提交表單。",
+ "badarticleerror": "不允許敆茲蜀萆做茲蜀種行為。",
"cannotdelete": "無能耐刪掉頁面或者文件「$1」。\n可能茲已經共別儂刪掉咯了。",
"cannotdelete-title": "無辦法刪掉頁面「$1」",
"delete-hook-aborted": "刪除乞鉤子拍斷咯。\n無給出解釋。",
+ "no-null-revision": "𣍐使敆頁面$1𡅏新建空操作。",
"badtitle": "獃其標題",
"perfcached": "下底其數據乞緩存固加可能伓是最新其。{{PLURAL:$1|$1條結果}}會敆緩存臺中討著。",
"perfcachedts": "下底其數據已經緩存過了,最後更新遘$1。{{PLURAL:$4|$4條結果}}會敆緩存臺中討著。",
- "querypage-no-updates": "茲蜀頁其更新乞禁止了。\n數據租塊現刻時𣍐更新了。",
+ "querypage-no-updates": "茲蜀頁其更新乞禁止了。\n數據嚽塊現刻時𣍐更新了。",
"viewsource": "看源代碼",
"viewsource-title": "覷蜀覷$1其源代碼",
"actionthrottled": "行動乞取消咯",
"protectedpagetext": "茲頁已經乞保護起咯,𣍐使修改或者其它行動。",
"viewsourcetext": "汝會使看共複製茲蜀頁其源代碼:",
"viewyourtext": "汝會使覷蜀覷或者複製茲頁'''汝其修改'''其源代碼:",
- "editinginterface": "'''警告:'''汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。\n如果卜想修改維基其翻譯,起動遘MediaWiki本地化計劃[//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]。",
+ "editinginterface": "<strong>警告:</strong>汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。",
+ "cascadeprotected": "茲蜀頁受保護,𣍐使編辑,因為茲蜀頁包含敆下底{{PLURAL:$1|頁|頁}}開起“級聯”選項其受保護頁面底裡。\n$2",
"namespaceprotected": "汝𣍐使修改敆'''$1'''命名空間其頁面。",
"customcssprotected": "汝𣍐使修改茲蜀萆CSS頁面,因為伊有別蜀隻用戶其設定。",
"customjsprotected": "汝𣍐使修改茲蜀萆JavaScript頁面,因為伊有別蜀隻用戶其設定。",
"mycustomcssprotected": "汝𣍐使修改茲蜀萆CSS頁面。",
"mycustomjsprotected": "汝𣍐使修改茲蜀萆JavaScript頁面。",
+ "myprivateinfoprotected": "汝無權限编輯汝其私人信息。",
+ "mypreferencesprotected": "汝無權限編輯偏好。",
"ns-specialprotected": "𣍐使修改特殊頁面。",
"titleprotected": "茲蜀萆標題共[[User:$1|$1]]保護其咯。\n原因是「''$2''」。",
- "exception-nologin": "未躒底其",
- "exception-nologin-text": "茲蜀頁其行動卜挃汝躒底茲蜀萆維基百科。",
+ "exception-nologin": "未登錄",
+ "exception-nologin-text": "起動汝登錄以後再訪問茲蜀頁,或者做茲蜀萆操作。",
+ "exception-nologin-text-manual": "起動汝$1,以後才會使訪問茲蜀頁,或者做茲蜀萆行為。",
"virus-badscanner": "獃其配置:𣍐八其病毒掃描器:''$1''",
"virus-scanfailed": "掃描失敗(代碼$1)",
"virus-unknownscanner": "𣍐八其反病毒:",
- "logouttext": "'''汝現在躒出了。'''\n\n汝會使使無名方式繼續覷{{SITENAME}},或者汝會使蜀様或者𣍐蜀様其用戶<span class='plainlinks'>[$1 再躒底其]</span>。\n注意有其頁面可能繼續顯示真像汝應經躒底其了,除開汝清理汝其瀏覽器緩存。",
+ "logouttext": "<strong>汝現在退出了。</strong>\n\n注意有其頁面可能繼續顯示真像汝已經登錄了,除開汝清理瀏覽器緩存。",
"welcomeuser": "歡迎,$1!",
"welcomecreation-msg": "汝其賬戶已經開好了。\n伓嗵𣍐記改蜀改汝其[[Special:Preferences|{{SITENAME}}設定]]。",
"yourname": "用戶名:",
"userlogin-yourname": "用戶名",
"userlogin-yourname-ph": "輸底汝其用戶名",
+ "createacct-another-username-ph": "輸底汝其用戶名",
"yourpassword": "密碼:",
"userlogin-yourpassword": "密碼",
"userlogin-yourpassword-ph": "輸底汝其密碼",
@@ -335,32 +366,35 @@
"yourpasswordagain": "重新拍囇密碼:",
"createacct-yourpasswordagain": "確定密碼",
"createacct-yourpasswordagain-ph": "再輸入蜀回密碼",
- "remembermypassword": "共我敆茲蜀萆瀏覽器其躒底記錄記定幾日(最価$1日){{PLURAL:$1}}",
- "userlogin-remembermypassword": "保持我躒底其",
+ "remembermypassword": "共我敆茲蜀萆瀏覽器其登錄記錄記定幾日(最価$1日){{PLURAL:$1}}",
+ "userlogin-remembermypassword": "保持我登錄其",
"userlogin-signwithsecure": "使安全其連接",
"yourdomainname": "汝其域名:",
"password-change-forbidden": "汝𣍐使敆茲蜀萆維基百科𡅏修改密碼。",
"externaldberror": "可能是驗證數據庫綻咯,或者是汝𣍐使升級汝其外部賬戶。",
- "login": "躒底",
- "nav-login-createaccount": "躒底/開賬戶",
- "userlogin": "躒底/開賬戶",
- "userloginnocreate": "躒底",
- "logout": "躒出",
- "userlogout": "躒出",
- "notloggedin": "未躒底",
+ "login": "登錄",
+ "nav-login-createaccount": "登錄/開賬戶",
+ "userlogin": "登錄/開賬戶",
+ "userloginnocreate": "登錄",
+ "logout": "退出",
+ "userlogout": "退出",
+ "notloggedin": "未登錄",
"userlogin-noaccount": "汝無賬戶?",
"userlogin-joinproject": "共{{SITENAME}}加底其",
"nologin": "汝無賬戶?$1",
"nologinlink": "開蜀隻賬戶",
"createaccount": "開賬戶",
"gotaccount": "已經有賬戶了?'''$1'''。",
- "gotaccountlink": "躒底",
- "userlogin-resetlink": "躒底其資料𣍐記咯?",
+ "gotaccountlink": "登錄",
+ "userlogin-resetlink": "登錄其資料𣍐記咯?",
"userlogin-resetpassword-link": "密码𣍐記?",
- "userlogin-helplink2": "對手汝躒底",
+ "userlogin-helplink2": "對手汝登錄",
+ "userlogin-loggedin": "汝已經使$1登錄過了。\n卜想使其他用戶登錄,請使下底其表格來登錄。",
+ "userlogin-createanother": "新建另外蜀萆賬號",
"createacct-emailrequired": "電子郵件地址",
"createacct-emailoptional": "電子郵件地址(愛寫就寫)",
"createacct-email-ph": "輸底汝其電子郵件地址",
+ "createacct-another-email-ph": "輸底電子郵件地址",
"createaccountmail": "使臨時其隨機密碼,共伊送遘指定其電子郵件地址",
"createacct-realname": "實際其名字(愛寫就寫)",
"createaccountreason": "原因:",
@@ -369,22 +403,25 @@
"createacct-captcha": "安全檢查",
"createacct-imgcaptcha-ph": "輸底汝敆懸頂看見其文字",
"createacct-submit": "開賬戶",
+ "createacct-another-submit": "新建另外蜀萆賬號",
"createacct-benefit-heading": "{{SITENAME}}是共汝蜀様其儂做其。",
"createacct-benefit-body1": "{{PLURAL:$1|修改}}",
"createacct-benefit-body2": "{{PLURAL:$1|頁面}}",
"createacct-benefit-body3": "最近其{{PLURAL:$1|貢獻者}}",
"badretype": "汝輸底其密碼𣍐蜀様。",
"userexists": "用戶名已經乞別人使去了。\n起動另外再起蜀萆名字。",
- "loginerror": "躒底有鄭",
+ "loginerror": "登錄有鄭",
"createacct-error": "賬戶開出毛病咯",
"createaccounterror": "無能獃開賬戶:$1",
+ "nocookiesnew": "用戶賬號已經創建好了,但是汝未登錄。\n{{SITENAME}}使cookie來記錄已經登錄其用戶。\n但是汝禁用了cookie。\n起動汝開啟cookie,然後再使汝其新用戶共密碼來登錄。",
+ "nocookieslogin": "{{SITENAME}}使cookies來記錄已經登錄其用戶。\n但是汝禁用了cookie。\n起動汝開起cookie,然後再試蜀試。",
"noname": "汝未指定蜀萆合法其用戶名。",
- "loginsuccesstitle": "躒底成功",
- "loginsuccess": "'''汝現在已經「$1」其成功躒底{{SITENAME}}了。'''",
+ "loginsuccesstitle": "登錄成功",
+ "loginsuccess": "'''汝現在已經「$1」其成功登錄{{SITENAME}}了。'''",
"nosuchuser": "無總款其用戶名「$1」。\n用户名是大小写敏感其。\n检查汝其拼写,或者覷蜀覷[[Special:UserLogin/signup|開新賬戶]]。",
"nosuchusershort": "無總款其用戶名「$1」。\n檢查汝其拼寫。",
"nouserspecified": "汝著指定蜀萆用戶名。",
- "login-userblocked": "茲隻用戶已經乞封鎖去了。躒底是𣍐允許其。",
+ "login-userblocked": "茲隻用戶已經乞封鎖去了。登錄是𣍐允許其。",
"wrongpassword": "密碼鄭咯。\n起動再查蜀下。",
"wrongpasswordempty": "未輸入密碼。\n請再查蜀下。",
"passwordtooshort": "密碼著設最少{{PLURAL:$1|$1萆字符}}。",
@@ -392,26 +429,31 @@
"password-login-forbidden": "茲蜀萆用戶名共密碼應經乞禁止去了。",
"mailmypassword": "重新設置密碼",
"passwordremindertitle": "{{SITENAME}}其新其臨時密碼",
- "passwordsent": "新密碼已經寄遘「$1」註冊其電子郵件地址了。\n收遘後,請再躒底蜀頭部。",
+ "passwordsent": "新密碼已經寄遘「$1」註冊其電子郵件地址了。\n收遘後,請再登錄蜀頭部。",
"mailerror": "發電子郵件有賺:$1",
"acct_creation_throttle_hit": "使汝其IP訪問茲蜀萆維基百科訪問者其已經敆最後蜀日創建{{PLURAL:$1|$1萆賬戶}}去了。茲蜀段時間最価若允許創建茲滿価萆賬戶。故此講使茲蜀萆IP訪問其儂敆現刻時𣍐使再開賬戶了。",
- "emailauthenticated": "汝其電子郵件地址已經敆$2$3驗證過了。",
+ "emailauthenticated": "汝其電子郵件地址已經敆$2$3確定過了。",
+ "emailnotauthenticated": "汝其電子郵件固未確定過。\n下底其所有特性都𣍐發電子郵件乞汝。",
"emailconfirmlink": "確認汝其電子郵件地址",
"emaildisabled": "茲萆站點𣍐使發電子郵件。",
"accountcreated": "賬戶創建了",
"accountcreatedtext": "[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|talk]])用戶已經創建。",
"createaccount-title": "{{SITENAME}}其開賬戶",
- "login-abort-generic": "汝其躒底𣍐成功——放棄去了",
+ "login-abort-generic": "汝其登錄𣍐成功——放棄去了",
"loginlanguagelabel": "語言:$1",
+ "pt-login": "登錄",
+ "pt-login-button": "登錄",
+ "pt-createaccount": "開新賬號",
+ "pt-userlogout": "退出",
"php-mail-error-unknown": "PHP其mail()函數,𣍐八什乇賺去。",
"changepassword": "改變密碼",
"resetpass_header": "改變賬戶其密碼",
"oldpassword": "舊密碼:",
"newpassword": "新密碼:",
"retypenew": "確認密碼:",
- "resetpass_submit": "設置密碼再躒底",
+ "resetpass_submit": "設置密碼再登錄",
"resetpass_forbidden": "密碼改𣍐來",
- "resetpass-no-info": "汝著躒底乍會使直接看茲蜀頁。",
+ "resetpass-no-info": "汝著登錄乍會使直接看茲蜀頁。",
"resetpass-submit-loggedin": "修改密碼",
"resetpass-submit-cancel": "取消",
"resetpass-temp-password": "臨時密碼:",
@@ -424,13 +466,11 @@
"passwordreset-emailsent": "蜀萆密碼重置其電子郵件已經發出去了。",
"passwordreset-emailsent-capture": "蜀萆密碼重置其電子郵件已經發出去了,顯示敆下底。",
"changeemail": "修改電子郵件地址",
- "changeemail-header": "修改賬戶電子郵件地址",
"changeemail-oldemail": "現刻時其電子郵件地址:",
"changeemail-newemail": "新其電子郵件地址:",
"changeemail-none": "(無)",
"changeemail-password": "汝其{{SITENAME}}密碼:",
"changeemail-submit": "修改電子郵件地址",
- "changeemail-cancel": "取消",
"bold_sample": "粗體文字",
"bold_tip": "粗體文字",
"italic_sample": "敧其文字",
@@ -450,28 +490,30 @@
"hr_tip": "水平線(廮𡅏保護使其)",
"summary": "總結:",
"subject": "主題/標題:",
- "minoredit": "過要修改",
+ "minoredit": "過幼修改",
"watchthis": "監視茲頁",
"savearticle": "保存茲頁",
"preview": "預覽",
"showpreview": "顯示預覽",
"showdiff": "看改變其部分",
- "anoneditwarning": "'''警告:'''汝未躒底。\n汝起IP地址會乞記錄敆茲頁面修改歷史底裏。",
+ "anoneditwarning": "<strong>警告:</strong>汝未登錄。\n如果汝做修改,汝其IP地址會敆編輯歷史底裡公開。如果你<strong>[$1登錄]</strong>或者<strong>[$2註册新賬號]</strong>,汝其修改記錄會顯示汝其用戶名,固有其它其好處。",
+ "anonpreviewwarning": "<em>汝未登錄。如果汝保存茲蜀頁其修改,汝其IP地址會記錄敆茲蜀頁其編輯歴史臺中。</em>",
"missingcommenttext": "起動敆下底輸底蜀條評論。",
"summary-preview": "總結預覽:",
"blockedtitle": "用戶乞封鎖了",
"blockednoreason": "無掏出原因",
"whitelistedittext": "汝必須$1乍會使修改頁面。",
- "loginreqtitle": "需要躒底",
- "loginreqlink": "躒底",
- "loginreqpagetext": "著$1才會使看其它頁面。",
+ "loginreqtitle": "需要登錄",
+ "loginreqlink": "登錄",
+ "loginreqpagetext": "起動汝$1以後再看其它頁面。",
"accmailtitle": "密碼寄出了",
- "accmailtext": "共[[User talk:$1|$1]]用戶其臨時產生其密碼已經發$2了。\n\n茲蜀萆新其賬戶其密碼會使敆用戶躒底以後著''[[Special:ChangePassword|改密碼]]''頁面𡅏改變。",
+ "accmailtext": "共[[User talk:$1|$1]]用戶隨機生成其密碼已經發遘$2了。汝登錄以後會使敆[[Special:ChangePassword|修改密碼]]頁面修改茲蜀萆密碼。",
"newarticle": "(新)",
"newarticletext": "汝已經跟鏈接跟遘無存在其頁面了。\n卜想創建頁面,敆下底其框框𡅏拍字(覷蜀覷[$1 幫助頁面]有無更更価其幫助)。\n如果汝是無注意來遘茲蜀萆頁面,篤囇汝其瀏覽器上其「返回」按鈕。",
- "anontalkpagetext": "''茲是未躒底其用戶討論頁面。''\n故此儂家著使數字IP來確定伊。\n總款其IP地址會乞雅価用戶共享。\n如果蜀隻未躒底其用戶見覺無關係其評論指向汝,起動[[Special:UserLogin/signup|開賬戶]]或者[[Special:UserLogin|躒底]]來避免以後共其它未躒底其用戶混蜀堆。",
+ "anontalkpagetext": "<em>茲是未登錄其用戶討論頁面。</em>\n故此儂家著使數字IP來確定伊。\n總款其IP地址會乞雅価用戶共享。\n如果蜀隻未登錄其用戶見覺無關係其評論指向汝,起動[[Special:UserLogin/signup|開賬戶]]或者[[Special:UserLogin|登錄]]來避免以後共其它未登錄其用戶混蜀堆。",
"noarticletext": "現在敆茲蜀頁𡅏無文字。汝會使敆其它其頁面𡅏[[Special:Search/{{PAGENAME}}|討蜀討茲蜀萆標題]],<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 討相關其記錄],或者[{{fullurl:{{FULLPAGENAME}}|action=edit}}編輯茲蜀頁]</span>。",
"clearyourcache": "'''注意:'''保存以後,汝可能固著刷新汝其瀏覽器緩存來看遘變化。\n* '''火狐/Safari:'''擪下''Shift''篤蜀篤''重新載入'',或者擪蜀擪''Ctrl+F5''或者''Ctrl+R'' (''⌘-R''敆Mac懸頂)\n* '''Google Chrome:'''擪''Ctrl+Shift+R''(敆Mac𡅏使''⌘-Shift-R'')\n* '''Internet Explorer:'''擪''Ctrl''其時候篤蜀篤''刷新'',或者擪''Ctrl+F5''\n* '''Opera:'''敆''工具→首選項''𡅏清除緩存",
+ "note": "<strong>注意:</strong>",
"previewnote": "'''記定茲若是蜀萆預覽。'''\n汝其改變固𡅏未保存!",
"continue-editing": "行去編輯區",
"editing": "修改 $1",
@@ -486,12 +528,17 @@
"readonlywarning": "'''警告:數據庫已經乞鎖定來保養去了,故此汝現刻時𣍐使保存汝其編輯。'''\n汝可能希望複製再粘貼汝其文字遘蜀萆文本文件𡅏,再共伊保存起咯。\n\n鎖定伊其管理員給出茲蜀萆解釋:$1",
"protectedpagewarning": "''警告:茲蜀頁已經乞保護起去了,故此囇有管理員權力其用戶乍會使修改伊。'''\n最新其日誌已經敆下底提供來做參考:",
"semiprotectedpagewarning": "'''注意:''' 茲蜀頁已經乞保護起去了,故此囇有註冊其用戶乍會使修改伊。\n最新其日誌已經敆下底提供來做參考:",
- "templatesused": "{{PLURAL:$1}}茲頁底裏使其模板:",
+ "templatesused": "{{PLURAL:$1}}茲頁裏勢使其模板:",
"templatesusedpreview": "茲萆預覽使其{{PLURAL:$1|模板}}:",
"templatesusedsection": "茲蜀段使其{{PLURAL:$1|模板}}:",
"template-protected": "(保護)",
"template-semiprotected": "(半保護)",
- "recreate-moveddeleted-warn": "'''注意:汝重新創建其茲蜀頁面以前已經乞刪掉了。'''\n\n汝著考慮蜀下到底是伓是合適繼續去編輯茲蜀頁。茲蜀頁其刪除記錄共移動記錄都敆嚽塊共汝看:",
+ "recreate-moveddeleted-warn": "'''注意:汝敆𡅏重新創建舊底已經乞刪唻其頁面。'''\n\n汝應該考慮蜀下繼續去編輯茲蜀頁到底是伓是合適其。茲蜀頁其刪除記錄共移動記錄都敆嚽塊:",
+ "edit-conflict": "編輯衝突",
+ "content-model-wikitext": "維基文本",
+ "content-model-text": "純文本",
+ "content-model-javascript": "JavaScript",
+ "content-model-css": "CSS",
"undo-summary": "取消[[Special:Contributions/$2|$2]]([[User talk:$2|Tō̤-lâung]])其$1修改",
"cantcreateaccounttitle": "無能獃開賬戶",
"viewpagelogs": "看茲頁其歷史",
@@ -506,10 +553,10 @@
"last": "前",
"page_first": "頭",
"page_last": "尾",
- "histlegend": "差別揀選:選擇卜比並其版本,再擪「回車」('''Enter''')或者擪底底其'''比並揀選版本'''。<br />\n說明:(伶)=共第一新其版本比並,(前)=共前蜀版本比並,~=過要修改。",
+ "histlegend": "差別揀選:選擇卜比並其版本,再擪「回車」('''Enter''')或者擪底底其'''比並揀選版本'''。<br />\n說明:(伶)=共第一新其版本比並,(前)=共前蜀版本比並,~=過幼修改。",
"history-fieldset-title": "瀏覽歷史",
"history-show-deleted": "囇刪掉去",
- "histfirst": "最旧",
+ "histfirst": "最舊",
"histlast": "最遲",
"historysize": "({{PLURAL:$1|$1字節}})",
"history-feed-title": "修改歷史",
@@ -607,12 +654,12 @@
"recentchanges": "這般其改變",
"recentchanges-summary": "敆維基茲頁跟蹤這般其改變。",
"recentchanges-label-newpage": "茲蜀萆修改創建新其蜀頁",
- "recentchanges-label-minor": "茲是蜀萆過要修改",
+ "recentchanges-label-minor": "嚽是蜀萆過幼修改",
"recentchanges-label-bot": "茲蜀萆修改是機器人做其",
"rclistfrom": "顯示由$3 $2開始其新其改變",
- "rcshowhideminor": "$1過要修改",
+ "rcshowhideminor": "$1過幼修改",
"rcshowhidebots": "$1機器人",
- "rcshowhideliu": "$1躒底用戶",
+ "rcshowhideliu": "$1已註冊其用戶",
"rcshowhideanons": "$1無名用戶",
"rcshowhidemine": "$1我其修改",
"rclinks": "顯示$2日以內產生其$1回改變<br />$3",
@@ -623,7 +670,7 @@
"minoreditletter": "~",
"newpageletter": "!",
"boteditletter": "^",
- "rc-enhanced-hide": "藏起細節",
+ "rc-enhanced-hide": "囥起細節",
"recentchangeslinked": "相關其改變",
"recentchangeslinked-feed": "相關其改變",
"recentchangeslinked-toolbox": "相關其改變",
@@ -631,7 +678,7 @@
"upload": "上傳文件",
"uploadbtn": "上傳文件",
"reuploaddesc": "取消上傳,轉去上傳頁面",
- "uploadnologin": "未躒底",
+ "uploadnologin": "未登錄",
"uploadnologintext": "汝著$1才會使上傳文件。",
"uploaderror": "上傳有鄭",
"uploadlogpage": "上傳日誌",
@@ -642,7 +689,7 @@
"filesource": "來源:",
"ignorewarning": "無視警告保存文件",
"ignorewarnings": "無視警告",
- "fileexists": "名字蜀樣其文件已經存在去了。如果汝𣍐確定汝是伓是卜想刪掉伊,起動檢查蜀下<strong>[[:$1]]</strong>。\n[[$1|thumb]]",
+ "fileexists": "名字蜀樣其文件已經存在去了。如果{{GENDER:|汝}}𣍐確定汝是伓是卜想刪掉伊,起動檢查蜀下<strong>[[:$1]]</strong>。\n[[$1|thumb]]",
"uploadwarning": "上傳警告",
"savefile": "保存文件",
"uploadvirus": "茲文件有病毒!\n細底:$1",
@@ -703,13 +750,12 @@
"movethispage": "移動茲頁",
"booksources": "書源",
"booksources-search-legend": "尋討書源",
- "booksources-go": "去",
"booksources-text": "下底是鏈接遘其它賣新書共舊書其站點其單單,固加可能有更多關於汝敆𡅏看其茲本書其信息:",
"specialloguserlabel": "表演者:",
"speciallogtitlelabel": "目標(稱呼或者用戶):",
"log": "日誌",
"alllogstext": "所有會使趁{{SITENAME}}獲得其日誌其都合併顯示。\n汝會使使揀選日誌類型、用戶名(大小寫敏感),或者受影響其頁面(大小寫敏感)其方法來縮小視角。",
- "logempty": "日誌底裏討要𣍐著項目",
+ "logempty": "日誌裏勢討要𣍐着項目",
"allpages": "所有頁面",
"nextpage": "下蜀頁($1)",
"prevpage": "前蜀頁($1)",
@@ -718,10 +764,10 @@
"allinnamespace": "所有頁面($1命名空間)",
"allpagessubmit": "去",
"allpagesprefix": "按頭部顯示頁面:",
- "allpagesbadtitle": "給出其頁面其標題是𣍐合法其,或者有蜀萆跨語言或跨維基其前綴。伊可能包括蜀萆或者価萆𣍐使廮標題底裏其字符。",
+ "allpagesbadtitle": "給出其頁面其標題是𣍐合法其,或者有蜀萆跨語言或跨維基其前綴。伊可能包括蜀萆或者価萆𣍐使廮標題裏勢其字符。",
"categories": "類別",
- "deletedcontributions": "乞刪掉其用戶貢獻",
- "deletedcontributions-title": "乞刪掉其用戶貢獻",
+ "deletedcontributions": "乞刪唻其用戶貢獻",
+ "deletedcontributions-title": "乞刪唻其用戶貢獻",
"linksearch-ok": "尋討",
"linksearch-line": "$1是趁$2𡅏鏈接過其",
"emailuser": "寄電子郵件乞茲隻用戶",
@@ -739,7 +785,7 @@
"watchlist": "我其監視單",
"mywatchlist": "我其監視單",
"nowatchlist": "汝其監視單𡅏無項目。",
- "watchnologin": "未躒底",
+ "watchnologin": "未登錄",
"addedwatchtext": "頁面「[[:$1]]」已經加遘汝其[[Special:Watchlist|監視單]]。以後敆茲蜀頁其改變共伊關聯其討論頁都會列敆嚽塊。",
"removewatch": "趁汝其監視單臺中移去",
"removedwatchtext": "頁面「[[:$1]]」已經趁[[Special:Watchlist|汝其監視單]]移去了。",
@@ -747,8 +793,8 @@
"watchthispage": "監視茲頁",
"unwatch": "伓使監視",
"unwatchthispage": "停止監視",
- "watchlist-details": "{{PLURAL:$1}}$1頁敆汝其監視單𡅏,無算討論頁。",
- "wlshowlast": "顯示最$1點鐘$2日$3",
+ "watchlist-details": "{{PLURAL:$1|$1頁|$1頁}}敆汝其監視單𡅏,無單獨算討論頁。",
+ "wlshowlast": "顯示最$1點鐘$2日",
"watchlist-options": "監視單選項",
"watching": "監視...",
"deletepage": "刪頁",
@@ -756,7 +802,7 @@
"excontent": "乇是:「$1」",
"excontentauthor": "乇是:「$1」(並且作者囇有「[[Special:Contributions/$2|$2]]」)",
"exbeforeblank": "空白以前其乇是:「$1」",
- "historywarning": "'''警告:'''汝卜想刪掉其頁面有蜀段大概$1隻{{PLURAL:$1|版本}}其它歷史:",
+ "historywarning": "<strong>警告:</strong>汝卜想刪掉其頁面有$1隻{{PLURAL:$1|版本|版本}}其蜀段歷史:",
"confirmdeletetext": "汝準備全隻頁面共文章連伊敆蜀塊其歷史全部刪掉。\n請汝確認:汝當真卜想總款做,汝瞭解總款做其後果,並且汝總款做事符合[[{{MediaWiki:Policy-url}}]]其。",
"actioncomplete": "行動成功",
"actionfailed": "操作失敗",
@@ -766,7 +812,6 @@
"deletionlog": "刪除日誌",
"deletecomment": "原因:",
"rollback": "在修改轉去",
- "rollback_short": "轉",
"rollbacklink": "轉",
"rollbackfailed": "轉𣍐去",
"cantrollback": "𣍐使恢復修改;最後其貢獻者是茲蜀頁其唯一其作者。",
@@ -812,14 +857,14 @@
"sp-contributions-newbies": "囇顯示新開賬戶其貢獻",
"sp-contributions-newbies-sub": "才來其",
"sp-contributions-blocklog": "封鎖日誌",
- "sp-contributions-deleted": "開除來其用戶貢獻",
+ "sp-contributions-deleted": "乞刪唻其用戶貢獻",
"sp-contributions-uploads": "上傳",
"sp-contributions-logs": "日誌",
"sp-contributions-talk": "討論",
"sp-contributions-search": "尋討貢獻",
"sp-contributions-username": "IP地址或者用戶名:",
"sp-contributions-submit": "尋討",
- "whatlinkshere": "甚乇鏈遘租塊",
+ "whatlinkshere": "甚乇鏈遘嚽塊",
"whatlinkshere-title": "鏈接遘$1其頁面",
"whatlinkshere-page": "頁面:",
"linkshere": "下底其頁面鏈接遘'''[[:$1]]''':",
@@ -833,7 +878,7 @@
"whatlinkshere-hidelinks": "$1鏈接",
"whatlinkshere-hideimages": "$1 文件鏈接",
"whatlinkshere-filters": "過濾器",
- "blockip": "封鎖用戶",
+ "blockip": "封鎖{{GENDER:$1|用戶}}",
"blockiptext": "使下底其表單來封鎖趁指定IP地址或者用戶名其寫入訪問。茲囇使廮𡅏防止破壞,固加著符合[[{{MediaWiki:Policy-url}}|政策]]。敆下底填底指定其原因(比如講:引用乞破壞其頁面)。",
"ipaddressorusername": "IP地址或者用戶名:",
"ipbexpiry": "過期:",
@@ -880,7 +925,7 @@
"movepagetext": "使下底其表單來重新共茲蜀頁起蜀萆名字,移動伊所有其歷史遘伊其新名字。\n舊其標題會變成新其標題其重定向頁。\n汝會使自動更新重定向許蜀點遘原底其標題。\n如果伊結果伓是總款咯,許汝著檢查[[Special:DoubleRedirects|雙重重定向]]或者[[Special:BrokenRedirects|獃其重定向]]。\n汝著為鏈接會使繼續鏈遘伊應該跳轉其地方負責任。\n\n注意如果許塊已經有蜀頁去了,噲頁面就'''𣍐'''移過了,除開許囇是蜀萆重定向固加無舊底其修改歷史。\n茲其意思就是講如果汝名字起賺了,汝會使共茲蜀萆頁面重新起伊原底其名字,但是𣍐使覆蓋已經存在其頁面。\n\n'''警告!'''\n茲可能會對一般頁面造成過大其固加無辦法預見遘其改變;\n起動汝著敆做之前會意總款做其後果。",
"movepagetalktext": "相關其討論頁會自動共伊移遘'''無挃''':\n* 汝其新其用戶名已經有蜀頁有內容其討論頁,或者\n* 汝取消下底其框框。\n\n若總款,汝會使自家移動或者是合併頁面。",
"movearticle": "移動頁面",
- "movenologintext": "著[[Special:UserLogin|躒底]]才會使移動頁面。",
+ "movenologintext": "著[[Special:UserLogin|登錄]]才會使移動頁面。",
"newtitle": "遘新題目:",
"move-watch": "監視茲頁",
"movepagebtn": "移動頁面",
@@ -903,8 +948,8 @@
"tooltip-pt-preferences": "汝其設定",
"tooltip-pt-watchlist": "汝監視其頁面有改過其單單",
"tooltip-pt-mycontris": "汝其貢獻其單單",
- "tooltip-pt-login": "希望汝躒底其;當然,無逼汝總款做。",
- "tooltip-pt-logout": "躒出",
+ "tooltip-pt-login": "希望汝登錄其;當然,無逼汝總款做。",
+ "tooltip-pt-logout": "退出",
"tooltip-ca-talk": "茲蜀頁其討論",
"tooltip-ca-edit": "汝會使修改茲蜀頁。起動敆保存以前使預覽按鈕",
"tooltip-ca-addsection": "開始蜀萆新其部分",
@@ -922,7 +967,7 @@
"tooltip-n-mainpage-description": "覷蜀覷頭頁",
"tooltip-n-recentchanges": "維基百科最近其改變其單單",
"tooltip-n-randompage": "隨便罔看",
- "tooltip-t-whatlinkshere": "鏈遘租塊其所有維基頁面其單單",
+ "tooltip-t-whatlinkshere": "鏈遘嚽塊其所有維基頁面其單單",
"tooltip-t-recentchangeslinked": "鏈遘茲頁其頁面其最近修改",
"tooltip-t-contributions": "茲蜀用戶其貢獻單單",
"tooltip-t-emailuser": "共茲蜀隻用戶發電子郵件",
@@ -936,7 +981,7 @@
"tooltip-ca-nstab-project": "看工程頁",
"tooltip-ca-nstab-image": "看文件頁",
"tooltip-ca-nstab-template": "覷蜀覷模板",
- "tooltip-minoredit": "共茲標記成過要修改",
+ "tooltip-minoredit": "共茲標記成過幼修改",
"tooltip-save": "保存汝其改變 [alt-s]",
"tooltip-preview": "預覽汝其改變,起動敆汝保存以前使茲。",
"tooltip-watch": "共茲蜀頁加遘汝其監視單[alt-w]",
@@ -953,7 +998,6 @@
"exif-meteringmode-0": "𣍐八",
"exif-lightsource-0": "𣍐八",
"exif-subjectdistancerange-0": "𣍐八",
- "watchlistall2": "所有",
"namespacesall": "所有",
"monthsall": "囫圇年",
"confirmemail": "確定電子郵件地址",
@@ -961,7 +1005,7 @@
"confirmemail_needlogin": "汝著$1來確定汝其電子郵件地址。",
"confirmemail_loggedin": "汝其電子郵件地址現在已經確定去了。",
"confirmemail_body": "有人(可能是汝)敆IP地址$1𡅏已經使茲蜀萆電子郵件地址來註冊蜀萆賬戶「$2」去了。\n\n卜想確認茲蜀萆賬戶當真是汝其,固加敆{{SITENAME}}激活電子郵件特點,許敆汝其瀏覽器𡅏拍開茲蜀萆鏈接:\n\n$3\n\n如果汝*無*註冊茲賬戶,單擊茲蜀萆鏈接來取消電子郵件確認:\n\n$5\n\n茲蜀萆確認代碼會敆$4時候過期。",
- "deletedwhileediting": "'''警告:'''茲蜀頁已經敆汝編輯以前刪掉去了!",
+ "deletedwhileediting": "<strong>警告:</strong>茲蜀頁敆汝編輯以前已經乞刪唻了!",
"recreate": "重新開",
"confirm_purge_button": "好",
"imgmultipageprev": "← 前蜀頁",
diff --git a/languages/i18n/ce.json b/languages/i18n/ce.json
index 9923dd44..fa759e2d 100644
--- a/languages/i18n/ce.json
+++ b/languages/i18n/ce.json
@@ -18,7 +18,7 @@
"tog-extendwatchlist": "Шорбина тӀехьажарна могӀам, ша беригге а хийцамаш чубогӀуш, тӀехьаббина боцурш а",
"tog-usenewrc": "Лелабе дика могӀам керла чу хийцамашна (оьшу JavaScript)",
"tog-numberheadings": "Ша шех хlитто терахь корташна",
- "tog-showtoolbar": "Гайта лакхара гӀирсан дакъа нисйеш аттон оц тадар чохь (JavaScript)",
+ "tog-showtoolbar": "Гайта лакхара гӀирсийн панель тадарш дечу хенахь",
"tog-editondblclick": "Нисъе агӀонаш шозза тӀетаӀийча (JavaScript)",
"tog-editsectiononrightclick": "Нисде дакъа шозза бакъехьар дахка тӀетаӀийча оцу кортан (JavaScript)",
"tog-watchcreations": "ТӀетоха ас кхоьллина агӀонаш тергаме могӀам чу",
@@ -35,15 +35,15 @@
"tog-enotifrevealaddr": "Гайта сан зlе оцу хаамаш барехь",
"tog-shownumberswatching": "Гайта декъашхойн терахь, агӀо латийна болу шай тергаме могӀанан юкъа",
"tog-oldsig": "Карара куьгтаӀорна:",
- "tog-fancysig": "Шен вики-къастаман куьгтаӀдар (ша шех хьажораг йоцуш)",
+ "tog-fancysig": "Шен вики-къастаман куьгтаӀдар (ша шех хьажорг йоцуш)",
"tog-uselivepreview": "Лелайа чехка хьалха хьажа (JavaScript, муха ю хьажарна)",
"tog-forceeditsummary": "Дага даийта, нагахь нисйарх лаьцна чохь язйина яцахь",
- "tog-watchlisthideown": "Къайлаяха ас нисйинарш оцу тергаме могӀам чура",
- "tog-watchlisthidebots": "Къайладаха шаболх бечо нисдинарш оцу тергаме могӀам чура",
- "tog-watchlisthideminor": "Къайладаха кегийра нисдарш оцу тергаме могӀам чура",
- "tog-watchlisthideliu": "Къайладаха бовзийтина болу декъашхойн нисдарш оцу тергаме могӀам чура",
- "tog-watchlisthideanons": "Къайладаха къайлаха болу декъашхойн нисдарш оцу тергаме могӀам чура",
- "tog-watchlisthidepatrolled": "Къайладаха хьаьжина долу нисдарш оцу тергаме могӀам чура",
+ "tog-watchlisthideown": "Къайлаяха ас нисйинарш тергаме могӀам чура",
+ "tog-watchlisthidebots": "Къайладаха тергаме могӀам чура ботан нисдинарш",
+ "tog-watchlisthideminor": "Къайладаха кегийра нисдарш тергаме могӀам чура",
+ "tog-watchlisthideliu": "Къайладаха бовзийтина болу декъашхойн нисдарш тергаме могӀам чура",
+ "tog-watchlisthideanons": "Къайладаха къайлаха болу декъашхойн нисдарш тергаме могӀам чура",
+ "tog-watchlisthidepatrolled": "Къайладаха хьаьжина долу нисдарш тергаме могӀам чура",
"tog-ccmeonemails": "Дlадахьийта суна исанна кехат, аса дохьуьйтуш долу кхечу декъашхошна.",
"tog-diffonly": "Ма гайта агlон чулацам шина башхонца цхьатерра йолуш",
"tog-showhiddencats": "Гайта къайлаха йолу категореш",
@@ -59,12 +59,12 @@
"editfont-sansserif": "Аьтта доцу шрифт",
"editfont-serif": "Аьтта долу шрифт",
"sunday": "кӀиран де",
- "monday": "Оршот",
- "tuesday": "Шинара",
- "wednesday": "Кхаара",
- "thursday": "Еара",
- "friday": "ПӀераска",
- "saturday": "Шот",
+ "monday": "оршот",
+ "tuesday": "шинара",
+ "wednesday": "кхаара",
+ "thursday": "еара",
+ "friday": "пӀераска",
+ "saturday": "шот",
"sun": "КӀи",
"mon": "Ор",
"tue": "Ши",
@@ -148,7 +148,7 @@
"anontalk": "Дийцаре хӀокху IP-адресна",
"navigation": "Навигаци",
"and": "&#32;а",
- "qbfind": "Лаха",
+ "qbfind": "Лахар",
"qbbrowse": "Хьажар",
"qbedit": "Нисъе",
"qbpageoptions": "Агlо нисйар",
@@ -163,15 +163,15 @@
"returnto": "ЮхагӀо оцу агӀоне $1.",
"tagline": "Гlирс хlокхуьна бу {{grammar:genitive|{{SITENAME}}}}",
"help": "ГӀо",
- "search": "Лаха",
- "searchbutton": "Лаха",
+ "search": "Лахар",
+ "searchbutton": "Лахар",
"go": "Дехьа гӀо",
"searcharticle": "Дехьа гӀо",
"history": "Истори",
"history_short": "Истори",
"updatedmarker": "Керла яккхина сона гинчултӀаьхьа",
"printableversion": "Зорба туху верси",
- "permalink": "Даиман йолу хьажораг",
+ "permalink": "Даиман йолу хьажорг",
"print": "Зорба тоха",
"view": "Хьажа",
"view-foreign": "Сайтехь $1 хьажа",
@@ -217,22 +217,24 @@
"protectedpage": "ГӀароллийца йолу агӀо",
"jumpto": "Дехьа гӀо:",
"jumptonavigation": "Навигаци",
- "jumptosearch": "лаха",
+ "jumptosearch": "Лахар",
"view-pool-error": "Бехк цабиллар доьха, хӀинц сервераш йоьттина ю.\nКаьчна дуккха дехарш хӀокху агӀонтӀе хьажарца.\nДехар до, собардеш а юха хьажа хӀокху агӀонтӀе жим тӀаьхьо.\n\n$1",
"generic-pool-error": "Бехк цабиллар доьха, хӀинц сервер йоьттина ю.\nКаьчна дуккха дехарш хӀокху агӀонтӀе хьажарца.\nДехар до, собардеш а юха хьажа хӀокху агӀонтӀе жим тӀаьхьо.",
"pool-timeout": "Блоктоха еза хан тӀех йаьлла",
"pool-queuefull": "Дехаршан чоь юьззина ю",
"pool-errorunknown": "Дойзаш доцу гӀалат",
"pool-servererror": "Пулан ларар тӀекхочучехь дац ($1).",
+ "poolcounter-usage-error": "Лелочун гӀалат: $1",
"aboutsite": "{{grammar:genitive|{{SITENAME}}}} лаьцна",
"aboutpage": "Project:Цуьнах лаьцна",
- "copyright": "Чулацам лело мега $1 лицензица (кхениг билгалйина яцахь).",
+ "copyright": "Чулацам лело мега $1 лицензица (кхиниг билгалйина яцахь).",
"copyrightpage": "{{ns:project}}:Авторан бакъонаш",
"currentevents": "ХӀинцалера хилларш",
"currentevents-url": "Project:ХӀинцалера хилларш",
"disclaimers": "Бехк тӀецалацар",
"disclaimerpage": "Project:Бехк тӀецалацар",
"edithelp": "ГӀо оцу тадарна",
+ "helppage-top-gethelp": "ГӀо",
"mainpage": "Коьрта агӀо",
"mainpage-description": "Коьрта агӀо",
"policy-url": "Project:Бакъо",
@@ -269,10 +271,10 @@
"confirmable-confirm": "Лаьий {{GENDER:$1|хьуна}}?",
"confirmable-yes": "ХӀаъ",
"confirmable-no": "ХӀахӀа",
- "thisisdeleted": "Хьажа я меттахӀоттайé $1?",
+ "thisisdeleted": "Хьажа я меттахӀоттае $1?",
"viewdeleted": "Хьожий $1?",
"restorelink": "{{PLURAL:$1|1=$1 дӀадаьккхина нийсдар|$1 дӀадяхна нийсдарш}}",
- "feedlinks": "Оцу хатlаьхь:",
+ "feedlinks": "Тайпанехь:",
"feed-invalid": "Тайпан нийсадоцу талол оцу куьгтаlорна.",
"feed-unavailable": "Хаитарца йолу асанаш тlекхочучехь яц",
"site-rss-feed": "$1 — RSS-аса",
@@ -297,7 +299,7 @@
"nosuchaction": "Ишта дийриг дац",
"nosuchactiontext": "ДӀаязйина URL нийса яц.\nURL язъеш гӀалат даьлла хила мега.\nИза кхин {{SITENAME}} пороектехь гӀалат хила мега.",
"nosuchspecialpage": "Иштта белхан агӀо яц",
- "nospecialpagetext": "<strong>Иштта белхан агӀо яц.</strong>\n\nБелхан агӀонашан могӀам: [[Special:SpecialPages|{{int:specialpages}}]].",
+ "nospecialpagetext": "<strong>Иштта белхан агӀо яц.</strong>\n\nБелхан агӀонийн могӀам: [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "ГӀалат",
"databaseerror": "ГӀалат хаамийн бухера",
"databaseerror-text": "Хаамийн базан гӀалат даьлла.\nИза хила мега программин гӀалат.",
@@ -309,7 +311,7 @@
"readonly": "Блоктоьхна дӀайаздар хаамийн бухе",
"enterlockreason": "Билгалде блоктохаран бахьна а и чекх йолу хан а.",
"readonlytext": "АгӀонаш тӀетохар а кхин хийцамаш барна а блоктоьхна:\nБлокоьхначо биттина хаам: $1.",
- "missing-article": "ХӀокху чохь кароезаш йолу хьан дехарца йозан агӀонаш цакарийна «$1» $2.\n\nИштнарг наггахь хуьлу хьажораг дӀаяьккхина елахь я хийцам бина тиша хьажорагца дехьа гӀо гӀоьртича.\n\nНагахьсан гӀулкх цуьнах доьзна дацахь, хьуна карийна гӀирс латточехь гӀалат.\nДехар до, хаам бе оцуьнах [[Special:ListUsers/sysop|куьйгалхога]], гойтуш URL.",
+ "missing-article": "ХӀокху чохь кароезаш йолу хьан дехарца йозан агӀонаш цакарийна «$1» $2.\n\nИштнарг наггахь хуьлу хьажорг дӀаяьккхина елахь я хийцам бина тиша хьажоргца дехьа гӀо гӀоьртича.\n\nНагахьсан гӀулкх цуьнах доьзна дацахь, хьуна карийна гӀирс латточехь гӀалат.\nДехар до, хаам бе оцуьнах [[Special:ListUsers/sysop|куьйгалхога]], гойтуш URL.",
"missingarticle-rev": "(верси № $1)",
"missingarticle-diff": "(башхалла: $1, $2)",
"readonly_lag": "Хаамашан базина цхьана хан блоктоьхна, хаамашан базан сервераш нисялца.",
@@ -319,6 +321,8 @@
"filerenameerror": "Файлан «$1» цӀе хийца «$2» йиш яц.",
"filedeleteerror": "ДӀаяккха цатарло файл «$1».",
"directorycreateerror": "Йиш яц директори «$1» кхолла.",
+ "directoryreadonlyerror": "ХӀара «$1» еша бен луш дац.",
+ "directorynotreadableerror": "ХӀара «$1» еша луш дац.",
"filenotfound": "Файл «$1» каро йиш яц.",
"unexpected": "БIегIийла йоцу маьIна: «$1»=«$2».",
"formerror": "ГӀалат: йиш яц хӀара формаш дӀакхачо",
@@ -329,7 +333,7 @@
"no-null-revision": "«$1» агӀона нисдар дан цаделира",
"badtitle": "Цамегаш йолу цӀе",
"badtitletext": "Дехарца йолу агӀонан цӀе нийса яц, йаьсса ю, хила мега нийса ца хӀоттийна меттаюкъар йа юкъарвики цӀе. Хила мега, цӀарца цамагош йолу символаш.",
- "perfcached": "Лахара хаам схьаэца кэша чура цундела тӀехьарлаьра хийцамаш гойтуш бац. Кэша чохь латтаё оцул $1 кӀезиг {{PLURAL:$1|1=дӀаяздар|дӀаяздарш}}.",
+ "perfcached": "Лахара хаам схьаэца кэша чура цундела тӀаьххьарлера хийцамаш гойтуш бац. Кэша чохь латтайо оцул $1 кӀезиг {{PLURAL:$1|дӀаяздар}}.",
"perfcachedts": "Лахара хаам схьаэца кэша чура иза тӀаьхьара карла ялла $1. Кэша чохь латта до оцул $4 кӀезиг {{PLURAL:$4|1=дӀаяздар|дӀаяздарш}}.",
"querypage-no-updates": "ХӀинца хӀара агӀо карлаякхар дӀадайина ду.\nКхузахь гайтина болу хаамаш карла боккхур бац.",
"viewsource": "Хьажар",
@@ -339,8 +343,9 @@
"protectedpagetext": "ХӀара агӀо дӀакъоьвлина ю тадарш ца дайта.",
"viewsourcetext": "Хьоьга далундерг хьажар а дезахь хlокху агlон чура йоза хьаэцар:",
"viewyourtext": "Хьан йиш ю '''хьой нисдинчу''' дӀадолалун йозе хьажа а цуна копи ян а:",
- "protectedinterface": "ХӀара схьгайтарна гӀирса хаамаш латтош йолу агӀо ю. Куьйгалхошна бен иза хийца цало.",
- "editinginterface": "'''Тергам бе:''' Ахьа таеш ю интерфейсан йоза долу агӀо програмин латторан.\nЦуна бина хийцам хьокху википедин кхечу декъашхошна гур бу.\nХьокху хаамийн гочдар тӀетоха я хийца лела йе сайт MediaWiki [//translatewiki.net/ translatewiki.net].",
+ "protectedinterface": "ХӀокху агӀона чохь интерфейсан программа латторан хаам бу. Зулам ца дайта цуна хийцам бан куьйгалхошна бен цало.\nХӀокху хааман гоч тӀетоха я хийца лелае локализацин сайт MediaWiki [//translatewiki.net/ translatewiki.net]",
+ "editinginterface": "<strong>Тергам бе:</strong> Ахьа таеш ю интерфейсан йоза долу агӀо программин латторан.\nЦуна бина хийцам хьокху Википедин кхечу декъашхошна гур бу.",
+ "translateinterface": "ХӀокху хааман гоч тӀетоха я хийца дехар до лелае локализацин сайт MediaWiki [//translatewiki.net/ translatewiki.net].",
"cascadeprotected": "АгӀо хийцам ца байта гӀоралла дина ю {{PLURAL:$1|хӀокху агӀона|хӀокху агӀонийн}} юкъа йогӀуш хилар бахьнехь:\n$2",
"namespaceprotected": "ХӀан бакъо яц анна цӀераш чохь тадарш да «$1».",
"customcssprotected": "Хьан бакъо яц хӀара CSS-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.",
@@ -397,6 +402,8 @@
"userlogin-resetlink": "Чуволу/йолу хаам биц бела?",
"userlogin-resetpassword-link": "Пароль кхоссар?",
"userlogin-helplink2": "Системин чудахаран гӀодар",
+ "userlogin-loggedin": "Хьо {{GENDER:$1|$1}} цӀарца чохь ву/ю.\nЛахара форманца кхин цӀарца чугӀо.",
+ "userlogin-createanother": "Кхолла декъашхочун кхин дӀаяздар",
"createacct-emailrequired": "Электронан почтан адрес",
"createacct-emailoptional": "Электронан почтан адрес (ца яздича мега)",
"createacct-email-ph": "ДӀаязде электронан почтан адрес",
@@ -414,7 +421,7 @@
"createacct-benefit-body1": "{{PLURAL:$1|нисдар|нисдарш}}",
"createacct-benefit-body2": "{{PLURAL:$1|яззам|яззамаш}}",
"createacct-benefit-body3": "{{PLURAL:$1|декъашхо|декъашхой}} тӀаьхьарчу хенахь",
- "badretype": "Ахьа язъен ишарш цхьатера яц",
+ "badretype": "Ахьа язъен паролаш цхьатерра яц",
"userexists": "Ахьа язъен декъашхочун цӀе йолуш ю, дехар до кхин цӀе харжар.",
"loginerror": "ГӀалат ду декъашхо вовзарехь/йовзарехь",
"createacct-error": "ДӀаяздар кхуллуш гӀалат ду",
@@ -532,9 +539,9 @@
"italic_sample": "Сеттан до йоза",
"italic_tip": "Сеттан до йоза",
"link_sample": "Хьажориган коьрта могlа",
- "link_tip": "Чоьхьа хьажораг",
- "extlink_sample": "http://www.example.com хьажораг корта",
- "extlink_tip": "Арахьара хьажораг (йиц ма йе хӀотталушерг http://)",
+ "link_tip": "Чоьхьа хьажорг",
+ "extlink_sample": "http://www.example.com хьажорг корта",
+ "extlink_tip": "Арахьара хьажорг (йиц ма йе хӀотталушерг http://)",
"headline_sample": "Йозан корта",
"headline_tip": "Корта 2-гlа локхаллийца",
"nowiki_sample": "Чудиллийша кхузе барамхlоттонза йоза.",
@@ -542,17 +549,17 @@
"image_sample": "Example.jpg",
"image_tip": "Чохь йолу файл",
"media_sample": "Example.ogg",
- "media_tip": "Хьажораг медиа-файлан тӀе",
+ "media_tip": "Хьажорг медиа-файлан тӀе",
"sig_tip": "Хьан куьгтаlор аъ хlоттина хан",
"hr_tip": "Ана сиз (сих сиха ма леладайша)",
"summary": "Хийцамех лаьцна:",
- "subject": "Дlахьедар/коьрта могlа:",
+ "subject": "ДӀахьедар/коьрта могӀа:",
"minoredit": "Жим хийцам",
"watchthis": "Латайе хӀара агӀо тергаме могӀанан юкъахь",
- "savearticle": "Дlайазъé агlо",
- "preview": "Хьалха муха ю хьажа",
- "showpreview": "Хьалха муха ю хьажар",
- "showdiff": "Хlоттина болу хийцам",
+ "savearticle": "АгӀо дӀаязъяр",
+ "preview": "Хьалха хьажар",
+ "showpreview": "Хьалха хьажар",
+ "showdiff": "Бина хийцамашка хьажар",
"blankarticle": "<strong>ДӀахьедар:</strong> Ахьа кхуллуш йолу агӀо еса ю.\nЮху кнопка «{{int:savearticle}}» тӀетаӀаяхь, агӀо цхьа чулацам боцуш кхуллур ю.",
"anoneditwarning": "'''Тергам бе''': Ахьа хьай цӀарца тадарш деш дац. Хьан IP-адрес дӀаяздина хира ду хӀокху агӀон истори чу.",
"anonpreviewwarning": "''Системин чу цагӀахь хьан IP-адрес агӀона истори чу дӀаяз лур ду.''",
@@ -580,7 +587,7 @@
"missing-revision": "АгӀона «{{FULLPAGENAME}}» верси $1 яц.\n\nИшта хуьйла ширелла дӀаяьккхина агӀонан хьажораган дихьа делча.\nМа-дара хила мега [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дӀайаьхарш йолу тептар] чохь.",
"userpage-userdoesnotexist": "Ишта декъашхочун дӀаяздар «<nowiki>$1</nowiki>» хӀинца дац. Хьажа билгал, хьуна бакъалла лаьий кхолла я хийцам ба хӀокху агӀон.",
"userpage-userdoesnotexist-view": "«$1» ишта декъашхочун дӀаяздар дац.",
- "blocked-notice-logextract": "ХӀара декъашхочун дӀаяздар блоктоьхна ду.\nЛахахь гойту блоктохарийн тептар чура тӀаьхьарлера дӀаяздар:",
+ "blocked-notice-logextract": "ХӀара декъашхочун дӀаяздар блоктоьхна ду.\nЛахахь гойту блоктохарийн тептар чура тӀаьххьарлера дӀаяздар:",
"clearyourcache": "'''Билгалдаккхар.''' Ӏалашйинчул тӀехьа хийцамаш га браузеран кэш цӀанъян езаш хила мега.\n* '''Firefox / Safari:''' ''Shift'' цӀе йолу пиллиг лаьцна битна, гӀирсийн панелан тӀера тӀетаӀе ''Карлаяккха'' я ''Ctrl-F5'' я ''Ctrl-R'' (''⌘-R'' Mac тӀехь)\n* '''Google Chrome:''' ТӀетаӀе ''Ctrl-Shift-R'' (''⌘-Shift-R'' Mac тӀехь)\n* '''Internet Explorer:''' ''Ctrl'' лаьцна йитан, тӀетаӀе ''Карлаяккха'' я тӀетаӀе ''Ctrl-F5''\n* '''Opera:''' Кэш цӀанъяр харжа меню ''Инструменты → Настройки'' чохь",
"usercssyoucanpreview": "'''ДӀаалар.''' ТӀетаӀае кнопка «{{int:showpreview}}», хьажа хьай керла CSS-файл Ӏалаш яле.",
"userjsyoucanpreview": "'''ДӀаалар.''' ТӀетаӀае кнопка «{{int:showpreview}}», хьажа хьай керла JS-файл Ӏалаш яле.",
@@ -592,7 +599,7 @@
"note": "'''Билгалдаккхар:'''",
"previewnote": "'''ХӀара хьлха хьажар ду, йоза хӀинца язданза ду!'''",
"continue-editing": "Кхин дӀа тадар",
- "session_fail_preview": "Сервер лара ца йира ахьа бина хийцамаш дӀаязба. Кхиъ цкъа а гӀортахь.\nНагахь санна хӀара гӀалат юха а далахь, [[Special:UserLogout|сеанс дӀа а къоьвлин]], юха а системин чувала/яла хьажа.",
+ "session_fail_preview": "Сервер лара ца йира ахьа бина хийцамаш дӀаязба. Кхиъ цкъа а гӀортахь.\nНагахь санна хӀара гӀалат юха а далахь, [[Special:UserLogout|сеанс дӀа а къоьвлин]], юха а системин чугӀо.",
"edit_form_incomplete": "'''Цхьайолу тадаран формаш серверан тӀекхаьчча яц. Тидаме хьажа хьай нисдарш доьхна дуй, ТӀакха южу гӀорта.'''",
"editing": "Тадар: $1",
"creating": "АгӀо кхоллар «$1»",
@@ -606,7 +613,7 @@
"yourdiff": "Башхаллаш",
"copyrightwarning": "Тергаме хьажа, массо яззаман чутухуш долу йозан хийцам хьажарехь бу, арахоьцушсанна оцу бакъойалар хьоляхь $2 (хьаж. $1).\nНагахь хьо лууш вацахь хьай йозанаш маьрша даржа а кхечаьрга хийцам байта, мадаха уьш кху чу.<br />\nИшта чlагlо йой ахьа, айхьа далош долучуьн хьо куьг да ву аьлла, йа хьаэцна цхьан\nхьостера, хийцам ба а дlаса даржада а чулацам болуш.<br />\n'''МАТОХИЙШ БАКЪО ЙОЦУ ГlИРСАШ КХУ ЧУ, КУЬГ ДЕ БАКЪО ЛАР ЙЕШ ЙОЛУ!'''",
"readonlywarning": "'''ДӀАХЬЕДО. ГӀирса бух блоктоьхна оьшуш долучу хьаштан, цундера хӀинц хьоьга дӀа ца йазло хийцам.\nХила мега, ахьа Ӏалаш дан дезаш хьайн йоза, юха тӀаьхьо леладан иза йоза.'''\n\nКуьйгалхочо блоктоьхна гӀирса бух, цо битина кхетош хӀара хаам: $1",
- "protectedpagewarning": "'''Дlахьедар. Хlара агlо гlаролла дина ю хийцам цабайта, иза хийца йа нисйа а бакъо йолуш адаманкуьйгалла лелош болу декъашхой бе бац.'''\nЛахахьа гойту хаамаш тlаьхьара бина болу хийцамна тептар чура:",
+ "protectedpagewarning": "'''ДӀахьедар. ХӀара агӀо гӀаролла дина ю хийцам цабайта, иза хийца йа нисйа а бакъо йолуш куьйгалла лелош болу декъашхой бе бац.'''\nЛахахьа гойту хаамаш тӀаьхьара бина болу хийцамна тептар чура:",
"semiprotectedpagewarning": "'''ДӀахьедо.''' ХӀара агӀо гӀаролла йина ю; дӀабазбиначу декъашхошка бе цӀе хийцалуш яц.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
"cascadeprotectedwarning": "<div id=\"cascadeprotectedwarning\" style=\"border:1px solid #ee0; padding:10px; background:#ffa; margin-bottom:1em\">[[file:Padlock.svg|left|25px|ДовгӀа|link=]]\nХӀара агӀо тада бакъо йолуш [[Project:Куьйгалхой|куьйгалхой]] бу, хӀунда аьлча и агӀо латийна кхечу агӀонашца хӀоттделлачу гӀаролле:</div>",
"templatesused": "{{PLURAL:$1|1=Кеп, лелош ю|Кепаш, лелош ю}} хӀокху агӀон башхонца:",
@@ -642,6 +649,7 @@
"content-model-text": "цхьалхе йоза",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "duplicate-args-category": "Кепийн кхайкхамашкахь аргументаш юх-юха лелош йолу агӀонаш",
"expensive-parserfunction-warning": "'''Тидам бе!''' Ресурсийн функцийн дехарш сов даьлла агӀонаш .\n\nДукху хилла ца деза {{PLURAL:$2|$2 дехар|$2 дехарш|1=цхьана дехар}}, хӀинца $1 {{PLURAL:$1|дехар}} ду.",
"expensive-parserfunction-category": "Ресурсийн функцийн дехарш сов даьлла агӀонаш",
"post-expand-template-inclusion-warning": "ДӀахьедар: юкъа тоьхна кепашан жамӀан барам тӀех бокха бу. Цхьайолу кепаш юкъа тухур яц.",
@@ -656,13 +664,15 @@
"parser-unstrip-loop-warning": "ДӀачӀагӀанца pre карина",
"undo-success": "Нисйинарг а тlе цалаца мега. Дехар до, хьажа цхьатерра йуй башхо, тешна хила, баккъалла иза хийцам буйте хьуна безарг, тlакха тlе таlайе «дlайазйе агlо», хийцам хlотта ба.",
"undo-failure": "Юккъера хийцамаш бахьнехь нисдар юхадаккха йиш яц.",
+ "undo-norev": "Нисдар юхадаккха цало, иза доцу делла я дӀаяьккхина дела.",
+ "undo-nochange": "Нисдар хьалхо юхадяьккхиначух тера ду.",
"undo-summary": "Юхадаьккхина {{GENDER:$2|декъашхочун}} [[Special:Contributions/$2|$2]] ([[User talk:$2|дийц.]]) нисдар $1",
"undo-summary-username-hidden": "Юхадаьккхина декъашхочун нисдарш $1, цунна цӀе дӀахьулйина",
"cantcreateaccounttitle": "Декъашхочун дӀаяздар кхолла йиш яц",
"viewpagelogs": "Гайта хlокху агlонан тептар",
"nohistory": "ХӀокху агӀона хийцамаш бина хила бац.",
"currentrev": "Карара верси",
- "currentrev-asof": "Карара верси оцу $1",
+ "currentrev-asof": "Карара верси $1",
"revisionasof": "Верси $1",
"revision-info": "Верси $1; {{GENDER:$6|$2}}$7",
"previousrevision": "← Хьалха йоьдург",
@@ -673,13 +683,13 @@
"last": "хьалх.",
"page_first": "хьалхара",
"page_last": "тlаьххьара",
- "histlegend": "Кхетор: (хӀинцалера.) — йолучу башхон къастам; (хьалх.) — хьалхлерачу башхон къастам; '''ж''' — жимо бозалца болу хийцам.",
+ "histlegend": "Кхетор: (хӀинцалера.) — йолучу башхон къастам; (хьалх.) — хьалхалерчу башхон къастам; '''ж''' — жимо бозалца болу хийцам.",
"history-fieldset-title": "АгӀона хийцамаш",
"history-show-deleted": "ДӀаяхинарш",
"histfirst": "ширниш",
"histlast": "хьалхарниш",
"historysize": "($1 {{PLURAL:$1|байт}})",
- "historyempty": "(йаьсса)",
+ "historyempty": "(еса)",
"history-feed-title": "Хийцаман истори",
"history-feed-description": "Википедин чохь хӀокху агӀона хийцаман истори",
"history-feed-item-nocomment": "$1 оцу $2",
@@ -737,7 +747,7 @@
"revdelete-otherreason": "Кхин бахьна/тӀетохар:",
"revdelete-reasonotherlist": "Кхин бахьна",
"revdelete-edit-reasonlist": "Бахьанин могӀам нисбар",
- "revdelete-offender": "АгӀона версен автор:",
+ "revdelete-offender": "АгӀона версин автор:",
"suppressionlog": "Хьулдаран тептар",
"mergehistory": "Нисдарин истори цхьаьнатохар",
"mergehistory-box": "Шин агӀона нисдарин истори цхьаьнатохар:",
@@ -757,7 +767,6 @@
"mergehistory-comment": "Дехьа яьккхина [[:$1]] [[:$2]] чу: $3",
"mergehistory-reason": "Бахьна:",
"mergelog": "Цхьаьнатохаршан тептар",
- "pagemerge-logentry": "цхьаьнатоьхна [[$1]] а [[$2]] а ($3 кхаччалц)",
"revertmerge": "Йекъа",
"mergelogpagetext": "Лахахь гойту тӀеххьара вовшахтоьхна агӀонийн могӀам.",
"history-title": "$1 — хийцаман истори",
@@ -765,18 +774,18 @@
"difference-title-multipage": "АгӀонийн башхалла «$1» а «$2» а",
"difference-multipage": "(АгӀонийн башхалла)",
"lineno": "МогӀа $1:",
- "compareselectedversions": "Хаьржина версеш муха ю хьажа",
+ "compareselectedversions": "Хаьржина версешка хьажар",
"showhideselectedversions": "Гайта/къайлаяха хаьржина башхонаш",
"editundo": "цаоьшу",
"diff-empty": "(башхалла яц)",
"diff-multi-sameuser": "(ца {{PLURAL:$1|гайтина юккъера цхьа верси|гайтина юккъера цхьа версеш}} оьцу декъашхочун)",
"diff-multi-otherusers": "(ца {{PLURAL:$1|гайтина юккъера верси|гайтина юккъера версеш}} {{PLURAL:$2|кхин цхьан декъашхочун|$2 декъашхойн}})",
"diff-multi-manyusers": "({{PLURAL:$1|гайтина яц $1 юккъера верси, йина|не показаны $1 юккъера версеш, йина}} {{PLURAL:$2|$2 декъашхочо|$2 декъашхоша}})",
- "searchresults": "Лахарна хилам",
- "searchresults-title": "Лаха «$1»",
+ "searchresults": "Карийнарш",
+ "searchresults-title": "Лахар «$1»",
"titlematches": "АгӀонийн цӀераш цхьаьнанисялар",
"textmatches": "АгӀонийн йоза цхьаьнанисдалар",
- "notextmatches": "АгӀонаш чура йозанашца цхьатера йогlуш яц",
+ "notextmatches": "АгӀонаш чура йозанашца цхьатерра йогӀуш яц",
"prevn": "хьалхарнаш {{PLURAL:$1|$1}}",
"nextn": "тӀаьхьйогӀурш {{PLURAL:$1|$1}}",
"prevn-title": "{{PLURAL:$1|1=Хьалхара $1 дӀаяздар|Хьалхара $1 дӀаяздарш}}",
@@ -789,40 +798,41 @@
"searchprofile-images": "Мультимедиа",
"searchprofile-everything": "Массанхьа",
"searchprofile-advanced": "Шуьйра",
- "searchprofile-articles-tooltip": "Лаха оцу $1",
+ "searchprofile-articles-tooltip": "$1 чохь лахар",
"searchprofile-images-tooltip": "Файлаш лахар",
- "searchprofile-everything-tooltip": "Лаха массо агlонашкахь (дийцаре агlонашцани)",
- "searchprofile-advanced-tooltip": "Лаха дехарца хlокху ана цlерашкахь",
+ "searchprofile-everything-tooltip": "Массо агӀонашкахь лахар (дийцаре агӀонашца)",
+ "searchprofile-advanced-tooltip": "Дехарца йолу цӀерийн анашкахь лахар",
"search-result-size": "$1 ({{PLURAL:$2|$2 дош|$2 дешнаш}})",
"search-result-category-size": "$1 {{PLURAL:$1|юкъаяр}} ($2 {{PLURAL:$2|1=бухара категори|бухара категореш}}, $3 {{PLURAL:$3|1=файл|файлаш}}).",
"search-redirect": "(дlасахьажийна $1)",
"search-section": "(дакъа $1)",
+ "search-category": "(категори $1)",
"search-file-match": "(файлан чулацаме тера хилар)",
"search-suggest": "Хила мега ахьа лоьхарг: $1",
"search-interwiki-caption": "Гергара проекташ",
- "search-interwiki-default": "$1 хилам.:",
+ "search-interwiki-default": "$1 хилам:",
"search-interwiki-more": "(кхин)",
"search-relatedarticle": "ХӀоттаделларг",
"searchrelated": "хlоттаделларг",
"searchall": "массо",
- "showingresults": "Лахахьа {{PLURAL:$1|гойта|гойту|гойту}} <strong>$1</strong> {{PLURAL:$1|хилам|хиламаш|хиламаш}}, дlаболало кху № <strong>$2</strong>.",
+ "showingresults": "Лахахьа {{PLURAL:$1|гойту}} <strong>$1</strong> {{PLURAL:$1|хилам}}, дӀаболало кху № <strong>$2</strong>.",
"showingresultsinrange": "Лахахь гайтина {{PLURAL:$1|<strong>1</strong> хилам}} диапазонехь <strong>$2</strong> тӀера <strong>$3</strong> кхаччалц.",
- "search-showingresults": "{{PLURAL:$4|Хилам <strong>$1</strong> <strong>$3</strong> нах}}",
+ "search-showingresults": "{{PLURAL:$4|Карийна <strong>$1</strong> — цхьаъ агӀо|И дош карийна <strong>$3</strong> агӀонашкахь, царех гойту $2 агӀо}}",
"search-nonefound": "Дехаре терра цхьа хӀума ца карийна.",
- "powersearch-legend": "Шуьро лахар",
- "powersearch-ns": "ЦӀерийн меттигашкахь лахар:",
+ "powersearch-legend": "Шуьйра лахар",
+ "powersearch-ns": "ЦӀерийн анашкахь лахар:",
"powersearch-togglelabel": "Билгалдан:",
"powersearch-toggleall": "Массо",
"powersearch-togglenone": "ХӀумма цаоьшу",
"powersearch-remember": "Дагахь дита хаьржинарг кхечу хенахь лаха",
"search-external": "Арахула лахар",
"search-error": "Лохуш гӀалат даьлла: $1",
- "preferences": "ГӀирс нисбан",
- "mypreferences": "ГӀирс нисбан",
+ "preferences": "Нисдаран гӀирс",
+ "mypreferences": "Нисдаран гӀирс",
"prefs-edits": "Нисдарийн дукхалла:",
- "prefsnologintext2": "Оьшу $1, гӀирс дӀанисбан.",
+ "prefsnologintext2": "Дехар до, гӀирс дӀанисбан язъяр.",
"prefs-skin": "Кечяран тема",
- "skin-preview": "Хьалха муха ю хьажа",
+ "skin-preview": "Хьалха хьажар",
"datedefault": "Iад йитарца",
"prefs-labs": "Муха ю хьажарна таронаш",
"prefs-user-pages": "Декъашхочун агӀо",
@@ -845,13 +855,13 @@
"prefs-editing": "Тадар",
"rows": "МогӀанаш:",
"columns": "БӀогӀамаш:",
- "searchresultshead": "Лаха",
+ "searchresultshead": "Лахар",
"stub-threshold": "Кеч яран доза <a href=\"#\" class=\"stub\">коьртамогӀамна хьажоргаш</a> (байташках):",
"stub-threshold-disabled": "ДӀадайина",
"recentchangesdays": "Керла нисдар гайта динахь:",
"recentchangesdays-max": "Къезиг $1 {{PLURAL:$1|дена}}",
"recentchangescount": "Iад йитарца гойтуш долу нисдарийн дукхалла",
- "prefs-help-recentchangescount": "Гойту керла нисдарш, агӀонашан истори, тептарш.",
+ "prefs-help-recentchangescount": "Гойту керла нисдарш, агӀонийн истори, тептарш.",
"prefs-help-watchlist-token2": "Иза хьан тергаме могӀан къайла догӀа ду.\nМуьлха и хуучунна йиш ю хьан тергаме могӀам беша, цундела ма хаийта иза кхечаьрга. [[Special:ResetTokens|ТӀетаӀа йе кхуза и хьайга кхосса лууш делахь]].",
"savedprefs": "Хьан гӀирс Ӏалашбина.",
"timezonelegend": "Сахьтан аса:",
@@ -871,7 +881,7 @@
"timezoneregion-indian": "Индин океан",
"timezoneregion-pacific": "Тийна океан",
"allowemail": "Магийта декъашхошна хьайга электрони почтехула кехат кхехьийта",
- "prefs-searchoptions": "Лаха",
+ "prefs-searchoptions": "Лахар",
"prefs-namespaces": "ЦӀерийн ана",
"default": "Iад йитарца",
"prefs-files": "Файлаш",
@@ -890,8 +900,8 @@
"yournick": "Керла куьгтаӀор:",
"prefs-help-signature": "Дийцаре агӀонаш чохь къуьгтаӀо деза символшца «<nowiki>~~~~</nowiki>», цара гойтур ду хьан къуьгтаӀор а хан а.",
"badsiglength": "ТӀех деха куьг.\nКуьйган $1 {{PLURAL:$1|символ}} дукха хила цамега.",
- "yourgender": "Ву/Йу:",
- "gender-unknown": "хlоттийна яц",
+ "yourgender": "Стен-боьршалла",
+ "gender-unknown": "хӀоттийна яц",
"gender-male": "борша",
"gender-female": "сте",
"prefs-help-gender": "ТӀехь доцург: и хаам лелош бу цхьайолу хаамаш чохь декъашхочун пол гучуйоккхуш.\nИ хаам массарна гуш хир бу.",
@@ -906,7 +916,7 @@
"prefs-timeoffset": "Хенан гӀирс",
"prefs-advancedediting": "Юкъара параметреш",
"prefs-editor": "Тадар",
- "prefs-preview": "Хьалха муха ю хьажар",
+ "prefs-preview": "Хьалха хьажар",
"prefs-advancedrc": "Кхин гӀирс нисбар",
"prefs-advancedrendering": "Кхин гӀирс нисбар",
"prefs-advancedsearchoptions": "Кхин гӀирс нисбар",
@@ -916,9 +926,10 @@
"prefs-tokenwatchlist": "Токен",
"prefs-diffs": "Башхон верси",
"prefs-help-prefershttps": "И хийцам болх байта юхугӀо системин чу.",
+ "prefs-tabs-navigation-hint": "Хьехам: Шу йиш ю аьрру а, аьтту а цхьамзан пиллигаш лелаян цхьана юкъадиллинарг тӀера вукхун тӀе долуш.",
"email-address-validity-valid": "Го нийса",
- "userrights": "Декъашхочун бакъона урхалладар",
- "userrights-lookup-user": "Декъашхошан бакъонашан урхалладар",
+ "userrights": "Декъашхочун бакъонашна урхалладар",
+ "userrights-lookup-user": "Декъашхойн бакъонашна урхалладар",
"userrights-user-editname": "Язъе цӀе:",
"editusergroup": "Хийца декъашхочун бакъо",
"editinguser": "Хийца декъашхочуьна бакъо '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
@@ -954,13 +965,13 @@
"grouppage-bureaucrat": "{{ns:project}}:Бюрократаш",
"grouppage-suppress": "{{ns:project}}:Ревизораш",
"right-read": "агӀонашка хьажар",
- "right-edit": "агӀонаш нийсе",
+ "right-edit": "агӀонаш нисъяр",
"right-createpage": "АгӀонаш кхоллар (дийцарш дац)",
"right-createtalk": "Дийцаре агӀонаш кхоллар",
"right-createaccount": "декъашхошна керла дӀаяздарш кхоллар",
"right-minoredit": "«къезиг хийцам» аьлла билгало хӀоттор",
"right-move": "АгӀонийн цӀераш хийцар",
- "right-move-subpages": "АгӀонашан цӀераш хийцар цера бухара агӀонашцан",
+ "right-move-subpages": "АгӀонийн цӀераш хийцар цера бухара агӀонашцан",
"right-move-rootuserpages": "декъашхочун ораман агӀонийн цӀераш хийцар",
"right-move-categorypages": "Категорийн агӀонийн цӀераш хийцар",
"right-movefile": "Файлийн цӀе хийцар",
@@ -1011,9 +1022,9 @@
"right-noratelimit": "чехкалин доза дац",
"right-import": "кхечу википедешкара агӀонаш импорт ян",
"right-importupload": "файлаш чуяхарца агӀонаш импорт ян",
- "right-patrol": "нисдарш хьаьжна сана билгалдар",
- "right-autopatrol": "нисдарш хьаьжна сана автоматически билгалдан",
- "right-patrolmarks": "керла нисдарийн хьаьжна билгалонашка хьажар",
+ "right-patrol": "нисдарш хьаьжжина сана билгалдар",
+ "right-autopatrol": "нисдарш хьаьжжина сана автоматически билгалдан",
+ "right-patrolmarks": "керла нисдарийн хьаьжжина билгалонашка хьажар",
"right-unwatchedpages": "тергамехь йоцу агӀонийн могӀане хьажар",
"right-mergehistory": "агӀонаш вовшахтохар",
"right-userrights": "декъашхойн массо бакъонаш хийцар",
@@ -1022,6 +1033,7 @@
"right-override-export-depth": "агӀонаш экспорт ян, 5 кхаччалц къорга агӀонаш цхьан",
"right-sendemail": "кхечу декъашхошка электронан хаамаш кхехьийта",
"right-passwordreset": "пароль хийцарца электроннан хаамашка хьажар",
+ "right-managechangetags": "Хаамийн базан чохь [[Special:Tags|билгалонаш]] кхолла а дӀаяха а",
"newuserlogpage": "Декъашхой дӀабазбина тептар",
"newuserlogpagetext": "Дукху хан йоцуш дӀабазбелла декъашхойн могӀам",
"rightslog": "Декъашхочун бакъона тéптар",
@@ -1054,8 +1066,8 @@
"action-rollback": "билгала агӀона тӀехьарчу декъашхочо дина нисдарш сиха юхадахар",
"action-import": "кхечу википедешкара агӀонаш импорт ян",
"action-importupload": "файлаш чуяхарца агӀонаш импорт ян",
- "action-patrol": "кхечера нисдарш хьаьжна сана билгалдар",
- "action-autopatrol": "шен нисдарш хьаьжна сана билгалдар",
+ "action-patrol": "кхечера нисдарш хьаьжжина сана билгалдар",
+ "action-autopatrol": "шен нисдарш хьаьжжина сана билгалдар",
"action-unwatchedpages": "тергамехь йоцу агӀонийн могӀане хьажар",
"action-mergehistory": "хӀокху агӀона хийцаман истори вовшахтохар",
"action-userrights": "декъашхойн массо бакъонаш хийцар",
@@ -1066,23 +1078,24 @@
"action-viewmywatchlist": "шен тергаме могӀане хьажар",
"action-viewmyprivateinfo": "хьан долара хааме хьажар",
"action-editmyprivateinfo": "хьан долара хаам табар",
+ "action-managechangetags": "хаамийн базан чохь билгалонаш кхоллар а дӀаяхар а",
"nchanges": "$1 {{PLURAL:$1|хийцам|хийцамаш}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|тӀеххьара чудаларца}}",
"enhancedrc-history": "истори",
"recentchanges": "Керла нисдарш",
- "recentchanges-legend": "Керла нисдарш гар нисдар",
- "recentchanges-summary": "Лахахь гайтина хене хьаьжна Википедин агӀонашкахь тӀаьхьара бина хийцамаш",
+ "recentchanges-legend": "Керла нисдаршка хьажар тадар",
+ "recentchanges-summary": "Лахахь гайтина хене хьаьжжина Википедин агӀонашкахь тӀаьхьара бина хийцамаш",
"recentchanges-noresult": "Билгал йинчу хенахь цхьа хийцамаш бина бац.",
"recentchanges-feed-description": "Тергам бе тlаьхьара вики хийцаман хlокху ларца.",
"recentchanges-label-newpage": "Оцу нисдарца кхоьллина керла агӀо.",
"recentchanges-label-minor": "Хlара нисдинарг къастийна жимо долушсан",
- "recentchanges-label-bot": "ХӀара нисдар шаболх бечо дина",
+ "recentchanges-label-bot": "ХӀара нисдар бото дина",
"recentchanges-label-unpatrolled": "ХӀара нисдар хӀинца цхьано патрулировать дина дац",
"recentchanges-label-plusminus": "байташкахь барам хийцар",
"recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа кхин [[Special:NewPages|керла агӀонийн могӀа]])",
"rcnotefrom": "Лахахь гайтина тӀера <strong>$2</strong> (хийцамаш <strong>$1</strong> кӀезиг).",
- "rclistfrom": "Гайта хийцам $3 $2 хан",
+ "rclistfrom": "Гайта хийцам {{CURRENTYEAR}} шаран {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTTIME}} бина болу",
"rcshowhideminor": "$1 кегийра нисдарш",
"rcshowhideminor-show": "Гайта",
"rcshowhideminor-hide": "Къайладаха",
@@ -1101,7 +1114,7 @@
"rcshowhidemine": "$1 айхьа нисдинарш",
"rcshowhidemine-show": "Гайта",
"rcshowhidemine-hide": "Къайладаха",
- "rclinks": "Гайта тӀаьхьара $1 хийцамаш $2 ден<br />$3",
+ "rclinks": "Гайта тӀаьххьарлерачу $2 дийнахь бина болу $1 хийцамаш\n<br />$3",
"diff": "башхалла",
"hist": "истори",
"hide": "Къайлаяккха",
@@ -1121,9 +1134,9 @@
"recentchangeslinked-feed": "Кхуьнца долу нисдарш",
"recentchangeslinked-toolbox": "Кхуьнца долу нисдарш",
"recentchangeslinked-title": "Кхуьнца долу нисдарш $1",
- "recentchangeslinked-summary": "ХӀара хийцам биначу агӀонашан могӀам бу, тӀетовжар долуш хьагучу агӀон (йа хьагойтуш йолучу категорена).\nАгӀонаш юькъайогӀуш йолу хьан [[Special:Watchlist|тергаме могӀам чохь]] '''къастийна ю'''.",
+ "recentchangeslinked-summary": "ХӀара хийцам биначу агӀонийн могӀам бу, тӀетовжар долуш хьагучу агӀон (я хьагойтуш йолучу категорена).\nАгӀонаш юькъа йогӀуш йолу хьан [[Special:Watchlist|тергаме могӀам чохь]] '''къастийна ю'''.",
"recentchangeslinked-page": "АгӀон цӀе:",
- "recentchangeslinked-to": "Кхечу агӀор, гайта хийцамаш агӀонашца, хӀоттийначу агӀонтӀе хьажораг йолуш",
+ "recentchangeslinked-to": "Кхечу агӀор, гайта хийцамаш агӀонашца, хӀоттийначу агӀонтӀе хьажорг йолуш",
"upload": "Файл чуяккхар",
"uploadbtn": "Файл чуяккхар",
"reuploaddesc": "Юху гӀо файл чуйоккху агӀоне",
@@ -1132,7 +1145,7 @@
"uploadnologintext": "Серверан чу файлаш яха хьо $1.",
"uploaderror": "Файл чуяккхаран гӀалат",
"upload-recreate-warning": "'''Тегам бе: иштта цӀе йолу файл дӀаяьккхина я цӀе хийцина.'''\n\nЛахахьа гойтуш ю хӀокху агӀона тептар:",
- "uploadtext": "Лелайе хӀара агӀо сервер чу файлаш йохуш.\nХьалхо чуяьхна файлаш хьажа, [[Special:FileList|кхузахь]]. Кхин чуяьхна файлаш дӀаязло [[Special:Log/upload|чуяхаран тептар чохь]], дӀаяьхна файлаш каро йиш ю [[Special:Log/delete|кхузахь]].\n\nФайл агӀона чуйилла лелабе лахара могӀанаш:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' файла Файлан юьззина верси чуйиллуш;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|цунахь лаьцна хаам]]</nowiki></code>''' 200 пиксель барамехь файл чуйилар бухахь цунахь лаьцна могӀа а болуш;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' файлан тӀе хьажораг хӀотайо файл агӀонгахь ца гуш.",
+ "uploadtext": "Лелайе хӀара агӀо сервер чу файлаш йохуш.\nХьалхо чуяьхна файлаш хьажа, [[Special:FileList|кхузахь]]. Кхин чуяьхна файлаш дӀаязло [[Special:Log/upload|чуяхаран тептар чохь]], дӀаяьхна файлаш каро йиш ю [[Special:Log/delete|кхузахь]].\n\nФайл агӀона чуйилла лелабе лахара могӀанаш:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' файла Файлан юьззина верси чуйиллуш;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|цунахь лаьцна хаам]]</nowiki></code>''' 200 пиксель барамехь файл чуйилар бухахь цунахь лаьцна могӀа а болуш;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' файлан тӀе хьажорг хӀотайо файл агӀонгахь ца гуш.",
"upload-permitted": "Магийна файлийн тайпанаш: $1.",
"upload-preferred": "Магийна файлийн тайпанаш: $1.",
"upload-prohibited": "Магийна доцу файлийн тайпанаш: $1.",
@@ -1169,13 +1182,13 @@
"fileexists-forbidden": "Иштта цӀе йолу файл йолуш ю цундела тӀехула дӀаязян йиш яц.\nТӀаккха а хьара файл чуяккха лууш делахь, дехар до, юха а гӀой файлан цӀе хийца а яй чуяккха файл. [[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "ХӀара файл лахарчу {{PLURAL:$1|1=файлан|файлийн}} дубликат ю:",
"file-deleted-duplicate": "Иштта файл ([[:$1]]) хӀинцале дӀаяьккхина хилла. Дехар до, юху файл чуяккхале файл дӀаяккхаран историга хьажа.",
- "uploadwarning": "Дlахьедар",
+ "uploadwarning": "ДӀахьедар",
"uploadwarning-text": "Дехар до, лахара файлах лаьцнарг хийца а дай юху а гӀорта файл чуяккха.",
"savefile": "ДӀаязъе файл",
"uploaddisabled": "Чуяккхар магийна дац",
"copyuploaddisabled": "URL тӀера чуяккхар дӀадайина ду.",
"uploaddisabledtext": "Файлаш чуяхар дӀадайина ду.",
- "uploadscriptednamespace": "ХӀокху SVG-файлан цӀерийн меттиг нийса яц '$1'",
+ "uploadscriptednamespace": "ХӀокху SVG-файлан цӀерийн ана нийса яц '$1'",
"upload-source": "ДIайолалун файл",
"sourcefilename": "ДIайолалун файл:",
"sourceurl": "Хьостан URL-адрес:",
@@ -1239,7 +1252,7 @@
"license-header": "Бакъойалар",
"nolicense": "Яц",
"licenses-edit": "Лицензин параметраш хийца",
- "license-nopreview": "(Хьалха муха ю хьажа цало)",
+ "license-nopreview": "(Хьалха хьажа цало)",
"upload_source_url": "(ахьа хаьржина нийса, массо тӀекхочу интернет-адрес)",
"upload_source_file": "(файл хьан компьютер чохь ю)",
"listfiles-delete": "дӀаяккха",
@@ -1267,7 +1280,7 @@
"filehist-current": "карара",
"filehist-datetime": "Терахь/Хан",
"filehist-thumb": "Жима",
- "filehist-thumbtext": "Жимо башхо оцу $1",
+ "filehist-thumbtext": "Жимо верси $1",
"filehist-nothumb": "Миниатюра яц",
"filehist-user": "Декъашхо",
"filehist-dimensions": "Файлан барам",
@@ -1301,7 +1314,7 @@
"filedelete-intro-old": "<span class=\"plainlinks\">Ахьа дӀайоккхуш ю верси '''[[Media:$1|$1]]''' цу [$4 $3, $2].</span>",
"filedelete-comment": "Бахьна:",
"filedelete-submit": "ДӀаяккха",
- "filedelete-success": "$1 дӀаяккхи.",
+ "filedelete-success": "$1 дӀаяьккхи.",
"filedelete-success-old": "Верси '''[[Media:$1|$1]]''' цу $3 $2 дӀаяьккхина.",
"filedelete-nofile": "'''$1''' яц.",
"filedelete-otherreason": "Кхин бахьна:",
@@ -1313,9 +1326,10 @@
"mimesearch-summary": "ХӀокху агӀоно йиш хуьлуьйту MIME-тайпан файлаш харжа. Яздеш долу формат: чулацаман тайп/бухара тайп, масала <code>image/jpeg</code>.",
"mimetype": "MIME-тайп:",
"download": "чуяккха",
- "unwatchedpages": "Цхьамо тергам ца беш йолу агӀонаш",
+ "unwatchedpages": "Цхьам терго цайо агӀонаш",
"listredirects": "ДIасахьажоран могIам",
"listduplicatedfiles": "Файлийн могӀам дубликатшца",
+ "listduplicatedfiles-summary": "ХӀара файлийн могӀам бу, кхузахь тӀехьарчу файлан верси цхьайолу тӀехьарчу файлийн версийн дубликат лоруш ю. Локальни файлаш бен лоруш яц.",
"listduplicatedfiles-entry": "Файлан [[:File:$1|$1]] — [[$3|{{PLURAL:$2|дубликат ю}}]].",
"unusedtemplates": "Лелош йоцу кепаш",
"unusedtemplatestext": "Кхузахь дагар йина «{{ns:template}}» цӀерийн меттиган агӀонаш, кхечу агӀонийн юкъа тоьхна йоцу.\nДиц ма делахь хьажа кеп агӀонашкахь лелош юй.",
@@ -1328,9 +1342,8 @@
"randomredirect": "Цахууш нисделла дIасахьажор",
"randomredirect-nopages": "«$1» цӀерийн меттиган чохь дӀасахьажораш яц.",
"statistics": "Статистика",
- "statistics-header-pages": "АгӀонийн жамӀ",
+ "statistics-header-pages": "АгӀонийн статистика",
"statistics-header-edits": "Нисдарийн статистика",
- "statistics-header-views": "Хьажаран статистика",
"statistics-header-users": "Декъашхойн статистика",
"statistics-header-hooks": "Кхин статистика",
"statistics-articles": "Яззамаш",
@@ -1339,18 +1352,14 @@
"statistics-files": "Чуяьхна файлаш",
"statistics-edits": "Нисдаран дукхалла {{grammar:genitive|{{SITENAME}}}} дlа йолайаларца",
"statistics-edits-average": "АгӀонан нисдарийн юкъара дукхалла",
- "statistics-views-total": "Массо хьажарш",
- "statistics-views-total-desc": "Ма лара дӀаяьхна а белхан а агӀонашка хьажар",
- "statistics-views-peredit": "Нисдаре хьажарш",
"statistics-users": "[[ВП:ДӀаязбаллар|ДӀаязбелларш]] берриге декъашхой чохь болу [[Special:ListUsers|(могӀам)]]",
"statistics-users-active": "Жигара декъашхой",
"statistics-users-active-desc": "Декъашхой, муьлха цхьа хӀум дина болу, кху {{PLURAL:$1|1=тӀаьххьара $1 динахь|тӀаьххьара $1 дийнахь}}",
- "statistics-mostpopular": "Дукху хьоьжу агӀонаш",
"pageswithprop": "АгӀонаш цхьадолу къастамашца",
"pageswithprop-legend": "АгӀонаш цхьадолу къастамашца",
"pageswithprop-text": "Кхузахь гойтуш ю агӀонаш цхьадолу къастамаш куьйга юху билгал даьхнарш.",
"pageswithprop-prop": "Къастаман цӀе:",
- "pageswithprop-submit": "Лаха",
+ "pageswithprop-submit": "Каро",
"pageswithprop-prophidden-long": "деха йозан хӀуман маьӀна хьулйина ($1)",
"pageswithprop-prophidden-binary": "шалха маьӀна долу хӀума хьулйина ($1)",
"doubleredirects": "Шалха дIасахьажийнарш",
@@ -1364,11 +1373,12 @@
"brokenredirects-delete": "дӀаяккха",
"withoutinterwiki": "Юкъарвики-хьажоргаш йоцу агӀонаш",
"withoutinterwiki-summary": "Лахара агӀонийн юкъарвики-хьажоргаш яц:",
+ "withoutinterwiki-legend": "ТӀетоьхна элпаш",
"withoutinterwiki-submit": "Гайта",
"fewestrevisions": "ЧӀогӀа кӀезиг версеш йолу агӀонаш",
"nbytes": "$1 {{PLURAL:$1|байт}}",
"ncategories": "$1 {{PLURAL:$1|категори|категореш}}",
- "ninterwikis": "$1 {{PLURAL:$1|1=юкъарвики-хьажораг|юкъарвики-хьажоргаш}}",
+ "ninterwikis": "$1 {{PLURAL:$1|1=юкъарвики-хьажорг|юкъарвики-хьажоргаш}}",
"nlinks": "$1 {{PLURAL:$1|хьажорг}}",
"nmembers": "$1 {{PLURAL:$1|хӀума|хӀумнаш}}",
"nmemberschanged": "$1 → $2 {{PLURAL:$2|хӀума|хӀумнаш}}",
@@ -1383,9 +1393,8 @@
"uncategorizedcategories": "Категореш йоцу категореш",
"uncategorizedimages": "Категореш йоцу файлаш",
"uncategorizedtemplates": "Категореш йоцу кепаш",
- "unusedcategories": "Йаьсса категореш",
+ "unusedcategories": "Еса категореш",
"unusedimages": "Лелош йоцу файлаш",
- "popularpages": "ГӀараяьлла агӀонаш",
"wantedcategories": "Оьшуш йолу категореш",
"wantedpages": "Оьшуш йолу агӀонаш",
"wantedfiles": "Оьшуш йолу файлаш",
@@ -1400,7 +1409,7 @@
"mostinterwikis": "Дуккха юкъарвики хьажоргаш тӀе тоьхна йолу агӀонаш",
"mostrevisions": "Сих сиха нисйина йолу агӀонаш",
"prefixindex": "Хьалха агӀонийн цӀераш хӀотто еза",
- "prefixindex-namespace": "Хьалха агӀонашан цӀераш хӀотто еза («{{ns:$1}}»)",
+ "prefixindex-namespace": "Хьалха агӀонийн цӀераш хӀотто еза («{{ns:$1}}»)",
"prefixindex-strip": "Хиламийн могӀам чура префикс къайлаяккха",
"shortpages": "Боца яззамаш",
"longpages": "Беха яззамаш",
@@ -1418,18 +1427,18 @@
"protectedpages-unknown-timestamp": "Хууш дац",
"protectedpages-unknown-performer": "Хууш доцу декъашхо",
"protectedtitles": "ГIаролла дина цIераш",
- "listusers": "Декъашхой могӀам",
+ "listusers": "Декъашхойн могӀам",
"listusers-editsonly": "Цхаъ мукъане а хийцам бина декъашхой гайта",
- "listusers-creationsort": "Кхоьллина хене хьаьжна нисъяр",
- "listusers-desc": "Харжа къезиг хиларца",
+ "listusers-creationsort": "Кхоьллина хене хьаьжжина нисъяр",
+ "listusers-desc": "Харжа кӀезиг хиларца",
"usereditcount": "$1 {{PLURAL:$1|нисдар|нисдарш}}",
"usercreated": "{{GENDER:$3|дӀавазвелла|дӀаязелла}} $1 $2",
"newpages": "Керла агӀонаш",
"newpages-username": "Декъашхо:",
- "ancientpages": "ТӀехьара терахьца тадар дина яззамаш",
+ "ancientpages": "ТӀаьххьарлерачу хенаца нисбина яззамаш",
"move": "ЦӀе хийца",
"movethispage": "ХӀокху агӀон цӀе хийца",
- "unusedimagestext": "Дехар до, тидаме эца, кхин йолу дуьнана машан-меттигаш а лелош хила мега нийсса йогӀу хьажораг (URL) хӀокху хӀуман, хӀокху могӀаме йогӀуш ялахь яцахь а иза хила мега жигара лелош.",
+ "unusedimagestext": "Лахара файлаш цхьана агӀонгахь лелош яц.\nДехар до, тидаме бе, кхин йолу веб-сайташ а лелош хила мега нийсса йогӀу хьажорг (URL), хӀокху могӀаме йогӀуш ялахь а иза хила мега жигара лелош.",
"unusedcategoriestext": "ХӀокху категорешан чохь агӀонаш я кхин категореш яц.",
"notargettitle": "Ӏалашо билгал йина яц",
"notargettext": "И кхочушдан ахьа билгал йина яц Ӏалашонан агӀо я декъашхо.",
@@ -1438,9 +1447,12 @@
"pager-newer-n": "{{PLURAL:$1|алсамо керла 1|алсамо керланаш $1}}",
"pager-older-n": "{{PLURAL:$1|алсамо шира 1|алсамо ширниш $1}}",
"suppress": "Хьулдар",
+ "apihelp": "API гӀо",
+ "apihelp-no-such-module": "Модуль «$1» цакарий.",
"booksources": "Жайнан хьосташ",
"booksources-search-legend": "Жайнех лаьцна хаам лахар",
- "booksources-go": "Лаха",
+ "booksources-search": "Лахар",
+ "booksources-text": "ХӀокху агӀонгахь гул бина сайтийн тӀе хьажоргийн могӀам оцу чохь шуна жайнах лаьцна хаам каро мега. И ю интернет-туьканаш а категорийн библиотекийн категорешкахь лахаран система а.",
"specialloguserlabel": "Декъашхо:",
"speciallogtitlelabel": "Ӏалашо (цӀе я декъашхо):",
"log": "Тéптарш",
@@ -1453,7 +1465,7 @@
"nextpage": "Тlаьхьа йогlу агlо ($1)",
"prevpage": "Хьалхалера агlо ($1)",
"allpagesfrom": "Гучé яха агӀонаш, йолалуш йолу оцу:",
- "allpagesto": "Арайахар сацадé оцу:",
+ "allpagesto": "Араяхар сацадé тӀе:",
"allarticles": "Массо агӀонаш",
"allinnamespace": "Массо агӀонаш оцу цӀерийн анахь «$1»",
"allpagessubmit": "Кхочушдé",
@@ -1465,23 +1477,23 @@
"cachedspecial-refresh-now": "Хьажа тӀехьарчу версега.",
"categories": "Категореш",
"categoriespagetext": "{{PLURAL:$1|1=Лахара категореш чохь ю|Лахара категореш чохь ю}} агӀонаш я медиа-файлаш.\nКхузахь гойтуш яц [[Special:UnusedCategories|лелош йоцу категореш]].\nКхин дӀа [[Special:WantedCategories| хийла еза категореш]].",
- "categoriesfrom": "Гучé яха категореш, оцу:",
+ "categoriesfrom": "Гучé яха категореш, тӀера:",
"special-categories-sort-count": "нисъе дукхаллица",
"special-categories-sort-abc": "нисъе абатца",
"deletedcontributions": "Декъашхочун дӀабяккхина къинхьегам",
"deletedcontributions-title": "ДӀабаьккхина къинхьегам",
"sp-deletedcontributions-contribs": "къинхьегам",
- "linksearch": "Арахьара хьажораг",
- "linksearch-pat": "Лаха кеп:",
+ "linksearch": "Арахьара хьажорг",
+ "linksearch-pat": "Лехарна кеп:",
"linksearch-ns": "ЦӀерийн ана:",
- "linksearch-ok": "Лаха",
+ "linksearch-ok": "Лахар",
"linksearch-text": "Лело мега хӀоттош йолу символаш, масала, <code>*.wikipedia.org</code>.\nЛакхара даржан домен мукъа хила еза , масала<code>*.org</code><br />\nЛовш йолу {{PLURAL:$2|1=протокол|протоколаш}}: <code>$1</code> (Iад йитарца http://, протокол бакъалла язъен яцахь).",
- "linksearch-line": "$2 — хьажораг кху $1",
+ "linksearch-line": "$2 — хьажорг кху $1",
"listusersfrom": "Гучé баха декъашхой, болалуш болу тӀера:",
"listusers-submit": "Гайта",
"listusers-noresult": "Декъашхой цакарий.",
"listusers-blocked": "(блоктоьхна)",
- "activeusers": "Жигар декъашхой могӀам",
+ "activeusers": "Жигара декъашхойн могӀам",
"activeusers-intro": "Лахахь гойтуш бу {{PLURAL:$1|1=тӀаьхьара $1 динахь|тӀаьхьара $1 деношкахь}} хийцамаш бина декъашхой.",
"activeusers-count": "{{PLURAL:$3|1=тӀаьхьарчу $3 динахь|тӀаьхьара $3 деношкахь}} $1 {{PLURAL:$1|1=нисдар|нисдарш}} дина",
"activeusers-from": "Гучé баха декъашхой, болалуш болу тӀера:",
@@ -1556,12 +1568,12 @@
"watchlist-details": "Хьан тергаме могӀанца $1 {{PLURAL:$1|агӀо}} ю, дийцаре агӀонаш йоцуш.",
"wlheader-enotif": "Электронан почте хаамаш байтар латина ду.",
"wlheader-showupdated": "Хийцам бина агӀонаш '''Ӏаьржа''' шрифтцан билгальяха ю.",
- "wlnote": "Лахахьа {{PLURAL:$1|тlаьхьа богlу $1 хийцам|тlаьхьа богlу $1 хийцамаш|тlаьхьа богlу $1 хийцамаш}} хlокху {{PLURAL:$2|тlаьхьар|тlаьхьара|тlаьхьара}} <strong>$2</strong> {{PLURAL:$2|сохьт|сохьатехь|сохьташкахь}}.",
- "wlshowlast": "Гайта тӀаьххьара $1 сахьт $2 де $3",
+ "wlnote": "Лахахьа {{PLURAL:$1|тӀаьхьабогӀу $1 хийцам|тӀаьхьабогӀу $1 хийцамаш}} хӀокху {{PLURAL:$2|тӀаьхьар}} <strong>$2</strong> {{PLURAL:$2|сахьтехь}}.",
+ "wlshowlast": "Гайта тӀаьххьара $1 сахьт $2 де",
"watchlist-options": "Тергаме могlаман гlирс нисбар",
"watching": "Тергаме мlогаман юкъаяккха…",
"unwatching": "Тергаме могӀанан чура дӀаяккхар…",
- "enotif_reset": "Билгалъе ерриге агӀонаш хьаьжна санна",
+ "enotif_reset": "Билгалъе ерриге агӀонаш хьаьжжина санна",
"enotif_impersonal_salutation": "Декъашхо {{grammar:genitive|{{SITENAME}}}}",
"enotif_subject_deleted": "Проектан «{{SITENAME}}» агӀо «$1» {{gender:$2|декъашхочо}} $2 дӀаяьккхина",
"enotif_subject_created": "Проектан «{{SITENAME}}» агӀо «$1» {{gender:$2|декъашхочо}} $2 кхоьллина",
@@ -1591,7 +1603,7 @@
"actionfailed": "Кхочушъ дина дац",
"deletedtext": "«$1» дӀаяьккхина яра.\nХьажа. $2 хьажарна оцу тӀаьхьара дӀаяхначара могӀаме.",
"dellogpage": "ДӀадаьхнарш долу тéптар",
- "dellogpagetext": "Лахахь гойтуш ду дӀадахаршан тептар.",
+ "dellogpagetext": "Лахахь гойтуш ю тӀаьххьара дӀаяьхнарш.",
"deletionlog": "дӀадаьхнарш долу тéптар",
"deletecomment": "Бахьна:",
"deleteotherreason": "Кхин бахьна/тӀетохар:",
@@ -1600,16 +1612,15 @@
"delete-edit-reasonlist": "Бахьанин могӀам нисбар",
"deleting-backlinks-warning": "'''ДӀахьедар:''' Ахьа дӀайоккхуш йолчун тӀе товжийна [[Special:WhatLinksHere/{{FULLPAGENAME}}|кхин агӀонаш]] ю.",
"rollback": "Юхабаккха хийцам",
- "rollback_short": "Юхаяккхар",
"rollbacklink": "юхаяккха",
"rollbacklinkcount": "юхадаккха $1 {{PLURAL:$1|1=нисдар|нисдарш}}",
"rollbacklinkcount-morethan": "Юхадаккха $1 дукха {{PLURAL:$1|нисдар|нисдарш|нисдарш}}",
"rollbackfailed": "Юхайоккхуш гӀалат ду",
"alreadyrolled": "ТӀехьара [[User:$2|$2]] ([[User talk:$2|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) декъашхочо «[[:$1]]» агӀона бина хийцамаш юхабаха цатарло,\nхӀинцале цхъаъ кхиъна хийцамаш юхабаха я агӀо тая.\n\nХийцамаш бинарг [[User:$3|$3]] ([[User talk:$3|дийцаре]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"editcomment": "Хийцамаш барна гайтина бахьна: ''$1''.",
- "revertpage": "Нисдарш [[Special:Contributions/$2|$2]] ([[User talk:$2|дийцаре]]) юха даьхна башхаллийн [[User:$1|$1]]",
- "revertpage-nouser": "Нисдарш (декъашхочун цӀе хьулйина) юхадаьхина башхаллин {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Юхадаьхна $1; нисдарш, $2 версен.",
+ "revertpage": "Нисдарш [[Special:Contributions/$2|$2]] ([[User talk:$2|дийцаре]]) юха даьхна версин [[User:$1|$1]]",
+ "revertpage-nouser": "Нисдарш (декъашхочун цӀе хьулйина) юхадаьхина версин {{GENDER:$1|[[User:$1|$1]]}}",
+ "rollback-success": "Юхадаьхна $1; нисдарш, $2 версин.",
"sessionfailure-title": "Сеансан гӀалат",
"sessionfailure": "Карара белхан сеансан гӀалат деллачух тера ду;\nиза дешдерг сацийна «сеанс долаерзийтта».\nДехар до, тӀетаӀе «ЮхугӀо» кнопка, кхин агӀо карлаяккха.",
"protectlogpage": "Гlаролли тептар",
@@ -1621,7 +1632,7 @@
"protect-title": "ГӀоралла хӀоттор: «$1»",
"protect-title-notallowed": "ГӀораллин бараме хьажар «$1»",
"prot_1movedto2": "«[[$1]]» цӀе хийцина → «[[$2]]»",
- "protect-badnamespace-title": "ГӀораладан цалуш йолу цӀерийн меттиг",
+ "protect-badnamespace-title": "ГӀораладан цалуш йолу цӀерийн ана",
"protect-badnamespace-text": "ХӀокху цӀерийн меттигехь йолу агӀонашна гӀараладан цало.",
"protect-norestrictiontypes-title": "ГӀараладан цалуш йолу агӀо",
"protect-legend": "Бакъде гӀоралла дар",
@@ -1646,6 +1657,7 @@
"protect-othertime": "Кхин хан:",
"protect-othertime-op": "кхин хан",
"protect-existing-expiry": "Карара чекхйолу хан: $2, $3",
+ "protect-existing-expiry-infinity": "Карара чекхйолу хан: чаккхе йоцу",
"protect-otherreason": "Кхин бахьна/тӀетохар:",
"protect-otherreason-op": "Кхин бахьна",
"protect-dropdown": "* ГӀоралла дарна баьхьаш \n** сих-сиха зулам дар \n** дуккха спам хилар\n** нисдарийн тӀом \n** гӀараялл агӀо",
@@ -1679,7 +1691,7 @@
"undeleteviewlink": "хьажа",
"undeleteinvert": "Къастае массо",
"undeletecomment": "Бахьна:",
- "undeletedrevisions": "{{PLURAL:$1|меттахӀоттайина}} $1 {{PLURAL:$1|хийцам}}",
+ "undeletedrevisions": "{{PLURAL:$1|меттахӀоьттина}} $1 {{PLURAL:$1|хийцам}}",
"undeletedrevisions-files": "меттахӀоьттина $1 {{PLURAL:$1|верси}} а $2 {{PLURAL:$2|файл}} а",
"undeletedfiles": "$1 {{PLURAL:$1|файл меттахӀоттайина|файлаш меттахӀоттайина}}",
"cannotundelete": "ГӀалат меттахӀоттайина:\n$1",
@@ -1688,7 +1700,7 @@
"undelete-search-title": "ДӀаяхна агӀонаш лахар",
"undelete-search-box": "ДӀаяхна агӀонаш лахар",
"undelete-search-prefix": "Гайта агӀонаш йолалуш йолу тӀера:",
- "undelete-search-submit": "Лаха",
+ "undelete-search-submit": "Лахар",
"undelete-no-results": "Архив чохь йогӀуш агӀонаш цакарий.",
"undelete-error": "АгӀо меттахӀоттаяран гӀалат",
"undelete-error-short": "Файл меттахӀоттаяран гӀалат: $1",
@@ -1696,9 +1708,9 @@
"undelete-show-file-submit": "ХӀаъ",
"namespace": "Цlерийн ана:",
"invert": "Хаьржинарг къайлаяккха",
- "tooltip-invert": "ХӀоттае хӀара билгало, хаьржинчу цӀерийн меттиган агӀонашан хийцамаш къайлабаха (кхин дихкина цӀерийн меттигаш, гайтина елахь)",
- "namespace_association": "Йихкина меттиг",
- "tooltip-namespace_association": "ХӀоттае хӀара билгало, иштта дийцарийн (я кхин) цӀерийн меттиг юкъахь хилийта",
+ "tooltip-invert": "ХӀоттае хӀара билгало, хаьржинчу цӀерийн анан агӀонийн хийцамаш къайлабаха (кхин дихкина цӀерийн анаш, гайтина елахь)",
+ "namespace_association": "Йихкина ана",
+ "tooltip-namespace_association": "ХӀоттае хӀара билгало, иштта дийцарийн (я кхин) цӀерийн ана юкъахь хилийта",
"blanknamespace": "(Коьрта)",
"contributions": "{{GENDER:$1|Декъашхочун}} къинхьегам",
"contributions-title": "{{GENDER:$1|Декъашхочун}} къинхьегам $1",
@@ -1718,23 +1730,23 @@
"sp-contributions-uploads": "Файлаш",
"sp-contributions-logs": "тéптарш",
"sp-contributions-talk": "дийцаре",
- "sp-contributions-userrights": "декъашхочун бакъона урхалладар",
- "sp-contributions-blocked-notice": "ХӀара декъашхочун дӀаяздар блоктоьхна ду.\nЛахахь гойту блоктохарийн тептар чура тӀаьхьарлера дӀаяздар:",
- "sp-contributions-blocked-notice-anon": "ХӀара IP-адрес хӀинца блоктоьхна ду.\nЛахахь гойту блоктохарийн тептар чура тӀаьхьарлера дӀаяздар:",
+ "sp-contributions-userrights": "декъашхочун бакъонашна урхалладар",
+ "sp-contributions-blocked-notice": "ХӀара декъашхочун дӀаяздар блоктоьхна ду.\nЛахахь гойту блоктохарийн тептар чура тӀаьххьарлера дӀаяздар:",
+ "sp-contributions-blocked-notice-anon": "ХӀара IP-адрес хӀинца блоктоьхна ду.\nЛахахь гойту блоктохарийн тептар чура тӀаьххьарлера дӀаяздар:",
"sp-contributions-search": "Къинхьегам лахар",
"sp-contributions-username": "IP-адрес я декъашхочун цӀе:",
"sp-contributions-toponly": "ТӀаьхьара бина хийцамаш гайта",
"sp-contributions-newonly": "АгӀонаш кхоллар бен ма гайта",
- "sp-contributions-submit": "Лаха",
+ "sp-contributions-submit": "Лахар",
"whatlinkshere": "Хьажоргаш кхузе",
"whatlinkshere-title": "«$1» тӀе хьажоргаш йолу агӀонаш",
"whatlinkshere-page": "Агlо:",
- "linkshere": "ТӀаьхьайогӀу агӀонаш оцу '''[[:$1]]''': хьажорагца ю",
+ "linkshere": "ТӀаьхьайогӀу агӀонаш оцу '''[[:$1]]''': хьажоргца ю",
"nolinkshere": "ХӀокху '''[[:$1]]''' агӀона тӀе кхечу агӀонашкахь хьажоргаш яц.",
"nolinkshere-ns": "Хаьржинчу анахь яц '''[[:$1]]''' цӀе йолу агӀонаш",
"isredirect": "агӀо-дӀасахьажорг",
"istemplate": "юкъаялийнарш",
- "isimage": "Файлан хьажораг",
+ "isimage": "Файлан хьажорг",
"whatlinkshere-prev": "{{PLURAL:$1|1=хьалхайодарг|хьалхайодарш}} $1",
"whatlinkshere-next": "{{PLURAL:$1|тӀаьхьайогӀург|тӀаьхьайогӀурш}} $1",
"whatlinkshere-links": "← хьажоргаш",
@@ -1767,7 +1779,7 @@
"ipb-confirm": "Бакъде блоктохар",
"badipaddress": "Магийна доцу IP адрес",
"blockipsuccesssub": "Блоктохар чакхдели",
- "blockipsuccesstext": "[[Special:Contributions/$1|«$1»]] {{GENDER:$1|блоктоьхна}}.<br />\nХьажа. [[Special:BlockList|блоктоьхна IP-адресийнн могӀам]].",
+ "blockipsuccesstext": "[[Special:Contributions/$1|«$1»]] {{GENDER:$1|блоктоьхна}}.<br />\nХьажа. [[Special:BlockList|блоктоьхна IP-адресийн могӀам]].",
"ipb-blockingself": "Хьо хьайна блоктоха гӀерта! Лаьий хьона и кхочушдан?",
"ipb-edit-dropdown": "Бахьанин могӀам нисбар",
"ipb-unblock-addr": "ДӀаякхаблок $1",
@@ -1793,7 +1805,7 @@
"blocklist-by": "Цунна блоктоьхана куьйгалхо",
"blocklist-params": "Блоктохаран параметраш",
"blocklist-reason": "Бахьна:",
- "ipblocklist-submit": "Лаха",
+ "ipblocklist-submit": "Лахар",
"ipblocklist-localblock": "Локальни блоктохар",
"ipblocklist-otherblocks": "{{PLURAL:$1|Кхин блоктохар|Кхин блоктохарш}}",
"infiniteblock": "хан чаккхе йоцуш",
@@ -1839,12 +1851,13 @@
"locknoconfirm": "Ахьа бакъдеш йолу меттиге билгало йилина яц.",
"lockdbsuccesssub": "Хаамийн базан блоктоьхна",
"unlockdbsuccesssub": "Хаамийн базан тӀера блокдӀаяьккхина",
+ "lockedbyandtime": "($1 $2 $3)",
"move-page": "$1 — цӀе хийцар",
"move-page-legend": "ЦӀe хийца яр",
- "movepagetext": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажораг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
- "movepagetext-noredirectfixer": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажораг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажораг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хилларгчунтӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
+ "movepagetext": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажорг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажорг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хиллачун тӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
+ "movepagetext-noredirectfixer": "Бухахь йолу форманца агӀон цӀе хийцало. Цул совнах цуьна хийцаман тептар кхоьчу метте доккха. Хьалхалера цӀарахь хиръю керла кхоьллина агӀонан хьажорг.\n\nХьовсалаш [[Special:DoubleRedirects|шалха]] а [[Special:BrokenRedirects|йохна хьажоргаш]] юй техь аьлла.\n\nШу жоьпехь ду хьажоргаш нийса некъ гойтуш хиларан.\n\nТидам бе хьалхалера агӀон цӀе ‘’’хийцалур яц’’’ иштта цӀе йолу агӀо йолуш елахь. Юкъардаккхар: йолуш йолу агӀо кхоьчухьа хьажорг елахь, я еса елахь а, цуьна хийцаме истори яцахь а.\n\nИ бохург ду шун агӀонан цӀе юха а хьалха хиллачун тӀе хийца йиш ю, амма йолуш йолу агӀо дӀаяккха йиш яц.\n\n'''ДӀАХЬЕДАР!'''\n\nЦӀе хийцар бахьнехь гӀаръяьлла агӀонашна дукха дагахь боцу хийцамаш хила тарло. Цундела цӀе хийцале шеш хила тарлучу тӀехьонашах кхета аьлла тешна хила.",
"movepagetalktext": "ТӀе хӀоьттина йолу дийцаре агӀо ишта цӀе хийцина хира ю, '''цхьа йолу ханчохь, маца:'''\n\n*Йаьсса йоцу дийцаре агӀо йолуш ю оцу цӀарца йа\n*Ахьа къастаман харжам цабиняхь а къастам хӀотточехь.\n\nИшта чу ханчохь, ахьа дехьа яккха йезар ю йа куьйга хӀоттайар, нагахь иза хьашт йалахь.",
- "movearticle": "ЦӀе хийца хӀокху агӀон",
+ "movearticle": "ЦӀе хийца агӀон",
"moveuserpage-warning": "'''Тергам бе.''' Хьо декъашхочун агӀона цӀе хийца гӀерта. Дехар до, тергам бе, декъашхочун агӀона цӀе бен хийца лур яц, декъашхочун дӀаяздаран цӀе хийца лур яц.",
"movecategorypage-warning": "<strong>ДӀахьедар:</strong> Хьо категорин агӀон цӀе хийца гӀерта. Дехар до, терго йе, хӀокху агӀона бен цӀе хуьйцур яц, шира чу категори чура массо агӀонаш керла категори чу йохур <em>яц</em>.",
"movenologintext": "АгӀона цӀе хийца [[Special:UserLogin|системин чугӀо]].",
@@ -1852,6 +1865,8 @@
"movenotallowedfile": "Хьан файлийн цӀераш хийца бакъо яц.",
"cant-move-user-page": "Хьан бакъо яц декъашхойн коьрта агӀонийн цӀераш хийца.",
"cant-move-to-user-page": "Хьан бакъо яц агӀона цӀе декъашхочун агӀон тӀе хийца (бухара агӀон тӀе хийца мега).",
+ "cant-move-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
+ "cant-move-to-category-page": "Хьан категорийн цӀераш хийца бакъо яц.",
"newtitle": "Керла цӀе",
"move-watch": "Латайé хӀара агӀо тергаме могӀанан юкъахь",
"movepagebtn": "АгӀон цӀе хийца",
@@ -1862,7 +1877,7 @@
"articleexists": "ХӀарасанна цӀе йолу агӀо йолуш ю йа ахьа гойтуш йолу цӀе магош яц.\nДехар до, харжа кхин цӀе.",
"movetalk": "Цуьнца йогӀуш йолу дийцаре агӀон цӀе хийцар",
"move-subpages": "ЦӀераш хийца бухара агӀонийн ($1 кхаччалц)",
- "move-talk-subpages": "ЦӀе хийца бухара агӀонаши а агӀонашан дийцаре а ($1 кхаччалц)",
+ "move-talk-subpages": "ЦӀе хийца бухара агӀонийн а агӀонийн дийцаре а ($1 кхаччалц)",
"movepage-page-exists": "Агӏо $1 йолуш ю цундела и ша юху дӏаязъян йиш яц.",
"movepage-page-moved": "АгӀона $1 цӀе хийцина → $2.",
"movelogpage": "ЦӀераш хийцаран тептар",
@@ -1887,7 +1902,7 @@
"protectedpagemovewarning": "'''ДӀахьедар.''' ХӀара агӀо гӀаролла йина ю; цӀе хийца я нисйа а бакъо йолуш куьйгалхой бе бац.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
"semiprotectedpagemovewarning": "'''ДӀахьедо.''' ХӀара агӀо гӀаролла йина ю; дӀабазбиначу декъашхошка бе цӀе хийцалуш яц.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
"export": "АгӀонаш араяхар",
- "exporttext": "Шуьга далур ду кхечу меттера чудахарш, йоза а хийцаме тептарш билгалла йолу агӀонаш йа гулдина йолу агӀонаш хӀокх XML барамца, юха тӀяхьа чура [[Special:Import|хьаэцалурдолш]] кхечу вики-хьалхен, болх беш йолу хlокху MediaWiki гlирсаца.\n\nКхечу меттера яззамаш чуйаха, чуязйе цӀе тадечу метте, цӀхьа могӀан цӀе могӀаршкахь, юха харжа лаьи шуна Кхечу меттер чуйаха массо яззамашна истори хийцамбарш йа тӀяхьаралера яззамна башхо.\n\nШуьга кхи даландерг, лелаеш йолу меттиг къастаман машан хьажораг кхечу меттер чудаха тӀаьхьарлерачу башхон яззамаш. Масала оцу яззамна [[{{MediaWiki:Mainpage}}]] хӀара хира ю хьажораг [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].",
+ "exporttext": "Шуьга далур ду кхечу меттера чудахарш, йоза а хийцаме тептарш билгалла йолу агӀонаш я гулдина йолу агӀонаш хӀокху XML барамца, юха тӀаьхьа чура [[Special:Import|хьаэцалурдолш]] кхечу вики-хьалхен, болх беш йолу хӀокху MediaWiki гӀирсаца.\n\nКхечу меттера яззамаш чуяха, чу язъе цӀе тадечу метте, цхьа могӀан цӀе могӀаршкахь, юха харжа лаьий шуна кхечу меттигера чуяха массо яззамашна истори хийцамбарш я тӀаьххьарлера яззаман верси.\n\nШуьга кхи далундерг, лелаеш йолу адресан хьажорг кхечу меттера чудаха тӀаьххьарлерачу версин яззамаш. Масала оцу яззаман [[{{MediaWiki:Mainpage}}]] хӀара хира ю хьажорг [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].",
"exportall": "Массо агӀонаш экспорт ян",
"exportcuronly": "Карара верси бен юкъа ма тоха, юзийна хьалхалерра истори йоцуш",
"export-submit": "Экспорт ян",
@@ -1896,7 +1911,7 @@
"export-addns": "ТӀетоха",
"export-download": "Кховда де файл сана Ӏалашдан",
"export-templates": "Латадé кепаш",
- "allmessages": "Гlирса хаамаш",
+ "allmessages": "ГӀирса хаамаш",
"allmessagesname": "Хаам",
"allmessagesdefault": "Ӏад дитарца йоза",
"allmessagescurrent": "Карарчу хенан йоза",
@@ -1923,7 +1938,7 @@
"import-interwiki-history": "ХӀокху агӀона ерриг хийцаман истори копи ян",
"import-interwiki-templates": "Юкъайихка массо кепаш",
"import-interwiki-submit": "Импорт ян",
- "import-interwiki-namespace": "Коьрта цӀерийн меттиг:",
+ "import-interwiki-namespace": "Коьрта цӀерийн ана:",
"import-interwiki-rootpage": "Коьрта агӀо (тӀехь дац):",
"import-upload-filename": "Файлан цӀе:",
"import-comment": "Билгалдаккхар:",
@@ -1953,17 +1968,16 @@
"importlogpage": "Импортан тептар",
"importlogpagetext": "Куьйгалхоша агӀонаш импорт яр царна бина хийцамашца кхечу википедеш чура.",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|верси импорт йина|версеш импорт йина}}",
- "import-logentry-interwiki": "«$1» — викиюкъара импорт",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|верси импорт йина|версеш импорт йина}} $2 чура",
"javascripttest": "JavaScript хьажар",
- "javascripttest-title": "$1 хьожуш бу",
"tooltip-pt-userpage": "Декъашхочуьна агlо",
"tooltip-pt-mytalk": "Сан дийцаре агlо",
"tooltip-pt-preferences": "Хьан гlирс нисбар",
"tooltip-pt-watchlist": "Ахьа тергам бо агӀонийн хийцаман могӀам",
"tooltip-pt-mycontris": "Хьан нисдаран могӀам",
- "tooltip-pt-login": "Хlокху гlирса чохь дlавазвала/яла мега, амма иза тlедожош дац.",
+ "tooltip-pt-login": "Кхузахь дӀаяздар кхолла мега, амма иза тӀедожийна дац.",
"tooltip-pt-logout": "Дlадерзадо болх бар",
+ "tooltip-pt-createaccount": "Шу йиш ю дӀаяздар кхоьллина системин чудаха, амма иза тӀедожийна дац.",
"tooltip-ca-talk": "Дийцаре агlон чулацам",
"tooltip-ca-edit": "Хlара агlо хийцалур ю. Лелайе, дехар до, хьалххьажар айхьа чутохале lалашан",
"tooltip-ca-addsection": "Кхолла керла дакъа",
@@ -1995,7 +2009,7 @@
"tooltip-t-upload": "Чуйаха файлаш",
"tooltip-t-specialpages": "Белха агӀонанийн могӀам",
"tooltip-t-print": "Хlокху агlонна зорба туху башхо",
- "tooltip-t-permalink": "Даима йолу хьажораг хӀокху башха агӀонна",
+ "tooltip-t-permalink": "Даима йолу хьажорг хӀокху башха агӀонна",
"tooltip-ca-nstab-main": "Яззамна чулацам",
"tooltip-ca-nstab-user": "ХӀора декъашхочун долахь йолу агӀо ю",
"tooltip-ca-nstab-media": "Медиа-файл",
@@ -2007,10 +2021,10 @@
"tooltip-ca-nstab-help": "ГӀоьна агӀо",
"tooltip-ca-nstab-category": "Категорешан агӀо",
"tooltip-minoredit": "Къастам бé хӀокху хийцамна кӀеззиг болуш санна",
- "tooltip-save": "Хьан хийцамаш lалашбой",
- "tooltip-preview": "Дехар до, агlо lалаш йарал хьалха хьажа муха йу яз!",
+ "tooltip-save": "Хьан хийцамаш Ӏалашбой",
+ "tooltip-preview": "Дехар до, агӀо Ӏалаш ярал хьалха хьажа муха ю из!",
"tooltip-diff": "Гайта долуш долу йозанах бина болу хийцам.",
- "tooltip-compareselectedversions": "Хlокху шина хаьржина агlона башхо муха ю хьажа.",
+ "tooltip-compareselectedversions": "ХӀокху агӀона шина хаьржина версийн башхалле хьажар.",
"tooltip-watch": "ТӀетоха хӀара агӀо сан тергаме могӀанан юкъа",
"tooltip-watchlistedit-normal-submit": "Билгалйина цӀераш дӀаяха",
"tooltip-watchlistedit-raw-submit": "Тергаме могӀам карлабаккха",
@@ -2035,7 +2049,7 @@
"creditspage": "Баркаллаш",
"nocredits": "Бац декъашхойн могӀам хӀокху яззамца",
"spamprotectiontitle": "Совбиларна литтар",
- "spamprotectiontext": "Хьо дӀаязъян гӀерта агӀо спам-литтаро дӀакъоьвлина.\nЦуна бахьна хила там бу агӀона чохь зулам литтаран чутоьхна йолу хьажораг хилар.",
+ "spamprotectiontext": "Хьо дӀаязъян гӀерта агӀо спам-литтаро дӀакъоьвлина.\nЦуна бахьна хила там бу агӀона чохь зулам литтаран чутоьхна йолу хьажорг хилар.",
"spambot_username": "Спам дӀацӀаняр",
"pageinfo-title": "Хаамаш цу «$1»",
"pageinfo-not-current": "Шира версийн оьцу хааме хьажа таро яц.",
@@ -2052,7 +2066,6 @@
"pageinfo-robot-policy": "Лахарийн системийн индексаци",
"pageinfo-robot-index": "Магийна",
"pageinfo-robot-noindex": "Магийна дац",
- "pageinfo-views": "Хьажаран дукхалла",
"pageinfo-watchers": "Хьоьжучера дукхалла",
"pageinfo-few-watchers": "{{PLURAL:$1|ТӀаьхьадогӀучерал}} $1 кӀезиг",
"pageinfo-redirects-name": "ХӀокху агӀон тӀе йолу дӀассахьажорийн дукхалла",
@@ -2083,14 +2096,14 @@
"pageinfo-category-subcats": "Бухара категорийн дукхалла",
"pageinfo-category-files": "Файлийн дукхалла",
"markaspatrolleddiff": "Билгалйе теллина санна",
- "markaspatrolledtext": "Билгала йе хӀара агӀо хьаьжна сана",
+ "markaspatrolledtext": "Билгалъе хӀара агӀо хьаьжжина сана",
"markedaspatrolled": "ДӀадахка теллина санна хилар",
"markedaspatrolledtext": "Хаьржина [[:$1]] агӀона верси къобалйина сана билгалйина.",
"rcpatroldisabled": "ТӀехьара бина хийцамаш къобалбан магийна дац",
"rcpatroldisabledtext": "ТӀехьара бина хийцамаш къобалбар хӀинца дӀадайина ду.",
"markedaspatrollederror": "теллина сана билгалъян цало",
"markedaspatrollednotify": "АгӀо «$1» пайдане хилар билгалдина",
- "markedaspatrollederrornotify": "Хийцамаш хьаьжна сана билгал бан цабелира.",
+ "markedaspatrollederrornotify": "Хийцамаш хьаьжжина сана билгал бан цабелира.",
"patrol-log-page": "ТӀехьажаран тептар",
"patrol-log-header": "Хьажжина версеш йолу тептар.",
"log-show-hide-patrol": "$1 тӀехьажаран тептар",
@@ -2103,14 +2116,14 @@
"nextdiff": "Тlяхьа догlа нисдинарг →",
"imagemaxsize": "Суьртан бараман доза тохар:<br />''(Файла агӀона куц дийцар)''",
"thumbsize": "Жима дина суьртан барам:",
- "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|агlо|агlонаш|агlонаш}}",
+ "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|агӀо}}",
"file-info": "файлан барам: $1, MIME-тайп: $2",
"file-info-size": "$1 × $2 пиксель, файлан барам: $3, MIME-тайп: $4",
"file-info-size-pages": "$1 × $2 пиксель, файлан барам: $3, MIME-тайп: $4, $5 {{PLURAL:$5|1=агӀо|агӀонаш}}",
"file-nohires": "Кхи йоккха гlоле башхо яц.",
"svg-long-desc": "SVG-файл, лартӀахь ю $1 × $2 пиксель, файлан барам: $3",
"svg-long-desc-animated": "Анимироват йина SVG-файл, номиналан $1 × $2 пиксель, файлан барам: $3",
- "show-big-image": "Сурт цlанал лаккхара бакъонца",
+ "show-big-image": "Оригиналан файл",
"show-big-image-preview": "Барам хьажале: $1.",
"show-big-image-other": "{{PLURAL:$2|1=Кхин шоралла|Кхин шоралла}}: $1.",
"show-big-image-size": "$1 × $2 пиксель",
@@ -2124,7 +2137,7 @@
"newimages-legend": "Литтар",
"newimages-showbots": "Гайта боташ чуяьхна файлаш",
"noimages": "Суьрташ дац.",
- "ilsubmit": "Лаха",
+ "ilsubmit": "Лахар",
"bydate": "терахьашца",
"sp-newimages-showfrom": "Гайта керла файлаш $2, $1 тӀера дуьйна",
"seconds-abbrev": "$1 оцу",
@@ -2150,7 +2163,7 @@
"saturday-at": "шот дийнахь $1",
"sunday-at": "кӀиранан дийнахь $1",
"yesterday-at": "селхана $1 даьлча",
- "bad_image_list": "Барам хила беза ишта:\n\nЛораш хира ю могӀамяхь йолу хӀумнаш (могӀийн, йола луш йолу символ тӀира *).\nДуьххьаралера хьажораг магӀарши хила беза хьажораг кху цамагдо сурт дуьлаче.\nТӀяхьа йогӀуш йолу хьажораг оцу могӀарехь хира ю магóш, билгалла аьлча яззамаш долуче, сурт хьаллаточехь.",
+ "bad_image_list": "Барам хила беза ишта:\n\nЛораш хира ю могӀамяхь йолу хӀумнаш (могӀийн, йола луш йолу символ тӀира *).\nДуьххьаралера хьажорг магӀанийн хила беза хьажорг кху цамагдо сурт дуьлаче.\nТӀяхьа йогӀуш йолу хьажорг оцу могӀарехь хира ю магóш, билгалла аьлча яззамаш долуче, сурт хьаллаточехь.",
"metadata": "Метахаамаш",
"metadata-help": "ХӀокху файлаца кхин тӀе хаам бу, даиман чуйоккхуш йолу терахьца чоьнашца йа тӀейоккхучуьнца. Нагахь файлан тӀаьхьа хийцам биняхь, тӀаккха цӀхьаболу барам цӀхьаьна ца ба мега хӀинцалера суьртаца.",
"metadata-expand": "Гайта кхин тlе болу хаам",
@@ -2381,7 +2394,6 @@
"exif-urgency-low": "Лахара ($1)",
"exif-urgency-high": "Лакхара ($1)",
"exif-urgency-other": "Декъашхочо билгалйина приоритет ($1)",
- "watchlistall2": "массо",
"namespacesall": "массо",
"monthsall": "массо",
"confirmemail": "Электронан почтан адрес бакъдар",
@@ -2395,12 +2407,16 @@
"confirm-unwatch-button": "ХӀаъ",
"confirm-unwatch-top": "ДӀаяккха хӀара агӀо хьай тергаме могӀанан юкъар?",
"comma-separator": ",&#32;",
+ "quotation-marks": "«$1»",
"imgmultipageprev": "← хьалхара агlо",
"imgmultipagenext": "тlаьхьара агlо →",
"imgmultigo": "ДехьагӀо!",
"imgmultigoto": "АгӀончу $1 гӀо",
"img-lang-default": "(Ӏад битарца болу мотт)",
+ "img-lang-info": "Гайта хӀара сурт $1 $2 маттахь",
"img-lang-go": "Кхочушдé",
+ "ascending_abbrev": "гар",
+ "descending_abbrev": "йина",
"table_pager_next": "Тlаьхьа йогlу агlо",
"table_pager_prev": "Хьалха йоьду агlо",
"table_pager_first": "Дуьххьаралера агlо",
@@ -2414,6 +2430,8 @@
"autoredircomment": "[[$1]] тӀе хьажийна",
"autosumm-new": "Керла агlо: «$1»",
"autosumm-newblank": "Кхоьллина еса агӀо",
+ "lag-warn-normal": "{{PLURAL:$1|$1 Секунд}} хьалха бина хийцамаш хӀокху могӀамехь гуш ца хилла мега.",
+ "lag-warn-high": "Сервераш синхронизаци еш тӀехьайисарна, {{PLURAL:$1|$1 секунд}} хьалха бина хийцамаш хӀокху могӀамехь гуш ца хилла мега.",
"watchlistedit-normal-title": "Тергаме могӀанийн хийцамаш",
"watchlistedit-normal-legend": "Тергаме могӀам юкъар дӀаяккхар",
"watchlistedit-normal-explain": "Лахахь гойту хьан тергаме могӀамехь йолу агӀонаш.\nДӀаяздарш дӀадаха билгалде уьш такха тӀетаӀе кнопка «{{int:Watchlistedit-normal-submit}}».\nКхин хьа йиш ю [[Special:EditWatchlist/raw|йозан кепар могӀом нисба ]].",
@@ -2424,6 +2442,7 @@
"watchlistedit-raw-explain": "Лахахь гойтуш ю хьа тергаме могӀанийн юкъахь йолу агӀонаш. Хьан йиш ю могӀан хийцам ба, оьцу чура цӀераш тӀетухуш а дӀайохкуш а.\nХийцамаш бина баьлчи тӀетаӀе кнопка «{{int:Watchlistedit-raw-submit}}».\nХьа кхин йиш ю [[Special:EditWatchlist|лело стандартни тадар]].",
"watchlistedit-raw-titles": "ДӀаяздарш:",
"watchlistedit-raw-submit": "МогӀам Ӏалашбар",
+ "watchlistedit-raw-done": "Хьан тергаман могӀам Ӏалашбина",
"watchlistedit-raw-added": "{{PLURAL:$1|ТӀетоьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|ДӀаяьккхина|ДӀаяьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
"watchlistedit-clear-title": "Тергаман могӀам дӀацӀанбар",
@@ -2452,7 +2471,7 @@
"version-parser-function-hooks": "Cинтаксисан къасторан функци схьалоцурш",
"version-hook-name": "Схьалуьцачун цӀе",
"version-hook-subscribedby": "ДӀабазбелла тӀе",
- "version-version": "(Верси $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[цӀе йоцуш]",
"version-license": "MediaWiki Лицензи",
"version-ext-license": "Лицензи",
@@ -2473,28 +2492,30 @@
"version-software-version": "Верси",
"version-entrypoints": "ЧугӀо адресин тӀадамаш",
"version-entrypoints-header-entrypoint": "Яздаран тӀадам",
+ "version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath АгӀона тӀе некъ]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Скриптан тӀе некъ]",
"redirect": "Декъашхочун файлан тӀера дӀасхьажор",
"redirect-legend": "Файлан я агӀона тӀера дӀасхьажор",
"redirect-summary": "ХӀара агӀо лело йиш ю файлан я агӀона тӀера дӀасхьажош.",
"redirect-submit": "Дехьа гӀо",
- "redirect-lookup": "Лаха:",
+ "redirect-lookup": "Лахар:",
"redirect-value": "МаьӀна:",
"redirect-user": "Декъашхочун ID",
"redirect-page": "АгӀона ID",
"redirect-revision": "АгӀона верси",
"redirect-file": "Файлан цӀе",
"redirect-not-exists": "МаьӀна цакарий",
- "fileduplicatesearch": "Лаха цхьатера йолу файлаш",
- "fileduplicatesearch-summary": "Лаха цхьатера йолу файлаш хэш-кодаца.",
- "fileduplicatesearch-legend": "Цхьатера ерш лахар",
+ "fileduplicatesearch": "Лаха цхьатерра йолу файлаш",
+ "fileduplicatesearch-summary": "Хэш-кодаца цхьатерра файлаш лахар.",
+ "fileduplicatesearch-legend": "Цхьатерра ерш лахар",
"fileduplicatesearch-filename": "Файлан цӀе:",
- "fileduplicatesearch-submit": "Лаха",
+ "fileduplicatesearch-submit": "Лахар",
"fileduplicatesearch-info": "$1 × $2 пиксель<br />Файлан барам: $3<br />MIME-тайп: $4",
"fileduplicatesearch-result-1": "«$1» файлах тера хӀума яц.",
"fileduplicatesearch-noresults": "ЦӀе «$1» йолуш файл цакарий.",
"specialpages": "Леррина агӀонаш",
+ "specialpages-note-top": "Легенда",
"specialpages-note": "* Гуттарлера белха агlонаш.\n* <strong class=\"mw-specialpagerestricted\">Кlеззиг таронаш йолу леррина агlонаш.</strong>",
"specialpages-group-maintenance": "Жамlаш гlирса хьашташ кхочушдар",
"specialpages-group-other": "Кхин белхан агӀонаш",
@@ -2504,7 +2525,7 @@
"specialpages-group-users": "Декъашхой а бакъонаш",
"specialpages-group-highuse": "Уггаре дукха лелайо агӀонаш",
"specialpages-group-pages": "АгӀонийн могӀанаш",
- "specialpages-group-pagetools": "ГӀирсаш оцу агӀонашан",
+ "specialpages-group-pagetools": "ГӀирсаш оцу агӀонийн",
"specialpages-group-wiki": "Хаамаш а гӀирсаш а",
"specialpages-group-redirects": "ДӀасахьажош йолу белхан агӀонаш",
"specialpages-group-spam": "Спаман дуьхьала гӀирсаш",
@@ -2518,18 +2539,45 @@
"tags-tag": "Билгалона цӀе",
"tags-display-header": "МогӀам чохь хийцамаш гар",
"tags-description-header": "МаьӀнан дуьззина сурт хӀоттор",
+ "tags-source-header": "Хьост",
"tags-active-header": "Жигара?",
"tags-hitcount-header": "Къастам бина нисдарш",
+ "tags-actions-header": "Дийраш",
"tags-active-yes": "ХӀаъ",
"tags-active-no": "ХӀахӀа",
+ "tags-source-extension": "Билгалйо шоралица",
+ "tags-source-none": "Кхий лелош яц",
"tags-edit": "нисъе",
+ "tags-delete": "дӀаяккха",
+ "tags-activate": "активациян",
+ "tags-deactivate": "дӀаяйа",
"tags-hitcount": "$1 {{PLURAL:$1|хийцам|хийцамаш}}",
- "comparepages": "АгӀонаш муха ю хьажар",
+ "tags-create-heading": "Кхолла керла билгало",
+ "tags-create-explanation": "Юха кхоьллина билгалонаш декъашхошна а боташна а Ӏад йтарца тӀекхочуш хира ю.",
+ "tags-create-tag-name": "Билгалонна цӀе:",
+ "tags-create-reason": "Бахьна:",
+ "tags-create-submit": "Кхолла",
+ "tags-create-no-name": "Ахьа билгалонан цӀе язъян езаш.",
+ "tags-create-already-exists": "«$1» билгало яц.",
+ "tags-create-warnings-below": "Лаьий хьуна билгало кхоллар чекхдакха?",
+ "tags-delete-title": "ДӀаяккха билгало",
+ "tags-delete-explanation-initial": "Хьо гӀерта «$1» базан чура билгало дӀаяккха.",
+ "tags-delete-reason": "Бахьна:",
+ "tags-activate-title": "Билгалона активациян",
+ "tags-activate-question": "Хьо гӀерта «$1» билгалонан активациян.",
+ "tags-activate-reason": "Бахьна:",
+ "tags-activate-not-allowed": "«$1» билгалонан активациян цало.",
+ "tags-activate-not-found": "«$1» билгало яц.",
+ "tags-activate-submit": "Активациян",
+ "tags-deactivate-title": "ДӀаяйа билгало",
+ "tags-deactivate-reason": "Бахьна:",
+ "tags-deactivate-submit": "ДӀаяйа",
+ "comparepages": "АгӀонаш юстар",
"compare-page1": "Дуьххьаралера агӀо",
"compare-page2": "ШолгӀа агӀо",
"compare-rev1": "Дуьххьаралера верси",
"compare-rev2": "ШолгӀа верси",
- "compare-submit": "Муха ю хьажа",
+ "compare-submit": "Юста",
"compare-invalid-title": "Ахьа язйина йолу цӀе ца магайо.",
"compare-title-not-exists": "Иштта цӀе яц.",
"compare-revision-not-exists": "Иштта версеш яц.",
@@ -2572,6 +2620,10 @@
"revdelete-uname-unhid": "декъашхочун цӀе гуча яьккхина",
"revdelete-restricted": "куьйгалхойн доза туху",
"revdelete-unrestricted": "куьйгалхойн доза тохар дӀаяьккхина",
+ "logentry-block-block": "$1 {{GENDER:$2|блоктоьхна}} {{GENDER:$4|$3}} $5 $6 хан чекхйолу",
+ "logentry-block-unblock": "$1 {{GENDER:$2|блокдаяьккхина}} {{GENDER:$4|$3}}",
+ "logentry-suppress-block": "$1 {{GENDER:$2|блоктоьхна}} {{GENDER:$4|$3}} $5 $6 хан чекхйолу",
+ "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 дӀасахьажоран тӀохул",
@@ -2589,15 +2641,21 @@
"logentry-upload-upload": "$1 {{GENDER:$2|чуяьккхина}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|чуяьккхина}} керла верси $3",
"logentry-upload-revert": "$1 {{GENDER:$2|чуяьккхина}} $3",
+ "log-name-managetags": "Билгалонашан урхалладаран тептар",
+ "logentry-managetags-create": "$1 {{GENDER:$2|Кхоьллина}} билгало «$4»",
"rightsnone": "(яц)",
+ "revdelete-summary": "хийцамах лаьцна",
+ "feedback-adding": "АгӀона хетарг тӀетохар...",
+ "feedback-back": "ЮхагӀо",
"feedback-bugornote": "Хьайн техникин халонах лаьцна яздан хӀума делахь, дехар до, [$1 хаам бе тхоьга].\nДацахь хьан йиш ю хӀокху атта кепаца «[$3 $2]» агӀонг къамел тӀетоха хьан декъашхочун цӀарца, кхин лелош йолу браузер билгал еш.",
- "feedback-subject": "Къамел:",
- "feedback-message": "Хаам:",
"feedback-cancel": "Цаоьшу",
- "feedback-submit": "Дахьийта хетарг",
- "feedback-adding": "АгӀона хетарг тӀетохар...",
"feedback-close": "Кийчча ю",
- "searchsuggest-search": "Лаха",
+ "feedback-error-title": "ГӀалат",
+ "feedback-message": "Хаам:",
+ "feedback-subject": "Къамел:",
+ "feedback-submit": "Дахьийта",
+ "feedback-thanks-title": "Баркалла!",
+ "searchsuggest-search": "Лахар",
"searchsuggest-containing": "чуьраниг…",
"api-error-duplicate": "Иштта чулацам болу {{PLURAL:$1|1=[$2 кхин файл]|[$2 кхин файлаш]}} йолуш ю",
"api-error-duplicate-popup-title": "{{PLURAL:$1|1=Файлан|Файлийн}} дубликат.",
@@ -2633,7 +2691,7 @@
"limitreport-cputime-value": "$1 {{PLURAL:$1|секунд}}",
"limitreport-walltime": "Йодуш йолу хенахь лелор",
"limitreport-walltime-value": "$1 секунд",
- "limitreport-ppvisitednodes": "Препроцессор хьаьжна шадин дукхалла",
+ "limitreport-ppvisitednodes": "Препроцессор хьаьжжина шадин дукхалла",
"limitreport-ppgeneratednodes": "Препроцессорс сгенерировать бина шадин дукхалла",
"limitreport-postexpandincludesize": "Схьаяьстина юккъерчаран барам",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байт}}",
@@ -2653,7 +2711,7 @@
"expand_templates_remove_nowiki": "ДӀайоху тегаш <nowiki> хилча",
"expand_templates_generate_xml": "Гойту дитта цу XML",
"expand_templates_generate_rawhtml": "Гайта HTML",
- "expand_templates_preview": "Хьалха муха ю хьажа",
+ "expand_templates_preview": "Хьалха хьажар",
"pagelanguage": "АгӀона мотт харжар",
"pagelang-name": "АгӀо",
"pagelang-language": "Мотт",
@@ -2665,5 +2723,47 @@
"log-description-pagelang": "ХӀара агӀонашкахь мотт хийцаран тептар ду.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|хийцина}} агӀона мотт $3 $4 → $5.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (латина)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''дӀаяйина''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''дӀаяйина''')",
+ "mediastatistics": "Медиа-статистика",
+ "mediastatistics-summary": "Чуяьхна файлийн тайпанийн статистикин хаамаш. Кху чохь тӀаьххьара чуяьхна файлийн версеш бен яц. Шираниш я дӀаяхнарш лоруш яц.",
+ "mediastatistics-nbytes": "$1 {{PLURAL:$1|байт}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-тайп",
+ "mediastatistics-table-extensions": "Хила мега шордарш",
+ "mediastatistics-table-count": "Файлийн дукхалла",
+ "mediastatistics-table-totalbytes": "Юкъара барам",
+ "mediastatistics-header-unknown": "Хууш доцурш",
+ "mediastatistics-header-bitmap": "Басаршца долу сурт",
+ "mediastatistics-header-drawing": "Сурт (векторийн сурташ)",
+ "mediastatistics-header-audio": "Аудио",
+ "mediastatistics-header-video": "Видео",
+ "mediastatistics-header-multimedia": "Къамел-медиа",
+ "mediastatistics-header-office": "Офисийн",
+ "mediastatistics-header-text": "Йозанан",
+ "mediastatistics-header-executable": "Кхочушдийриш",
+ "mediastatistics-header-archive": "Архиваш",
+ "json-error-unknown": "JSON бала бу. ГӀалат: $1",
+ "json-error-syntax": "Синтаксин гӀалат",
+ "headline-anchor-title": "ХӀокху дакъан тӀе хьажорг",
+ "special-characters-group-latin": "Латинан",
+ "special-characters-group-latinextended": "Латинан алсам",
+ "special-characters-group-ipa": "ДАЭ (IPA)",
+ "special-characters-group-symbols": "Символаш",
+ "special-characters-group-greek": "Грекийн",
+ "special-characters-group-cyrillic": "Кирилан",
+ "special-characters-group-arabic": "Ӏарбийн",
+ "special-characters-group-arabicextended": "Iаьрбийн шординарш",
+ "special-characters-group-persian": "Пхьарсхойн",
+ "special-characters-group-hebrew": "Жуьгтийн",
+ "special-characters-group-bangla": "Бангалойн",
+ "special-characters-group-tamil": "Тамилхойн",
+ "special-characters-group-telugu": "Телугойн",
+ "special-characters-group-sinhala": "Синхалойн",
+ "special-characters-group-gujarati": "Гужаратойн",
+ "special-characters-group-devanagari": "Деванагари",
+ "special-characters-group-thai": "Тайхойн",
+ "special-characters-group-lao": "Лаохойн",
+ "special-characters-group-khmer": "Кхимерхойн",
+ "special-characters-title-endash": "юкъар сиз",
+ "special-characters-title-emdash": "деха сиз",
+ "special-characters-title-minus": "хьаьрк минус"
}
diff --git a/languages/i18n/ceb.json b/languages/i18n/ceb.json
index 84c6ea28..427275b7 100644
--- a/languages/i18n/ceb.json
+++ b/languages/i18n/ceb.json
@@ -485,7 +485,6 @@
"search-interwiki-caption": "Mga kaubang proyekto",
"search-interwiki-default": "$1 ka mga resulta:",
"search-interwiki-more": "(dugang pa)",
- "showingresultsheader": "{{PLURAL:$5|Resulta '''$1''' sa '''$3'''|Mga resulta '''$1 - $2''' of '''$3'''}} sa '''$4'''",
"search-nonefound": "Walay mga resulta nga nag-match sa gipangita.",
"powersearch-legend": "Abansadong pagpangita",
"powersearch-ns": "Pangitaa sa mga ngalang espasyo:",
@@ -654,7 +653,6 @@
"pager-older-n": "{{PLURAL:$1|mas daan1|mas daan $1}}",
"booksources": "Mga reperensiyang libro",
"booksources-search-legend": "Pangitaa ang mga reperensiyang libro",
- "booksources-go": "Sige",
"log": "Mga log",
"allpages": "Tanang panid",
"prevpage": "Miaging panid ($1)",
@@ -677,7 +675,7 @@
"watchthispage": "Bantayi kining panid",
"unwatch": "Pasagdi",
"watchlist-details": "{{PLURAL:$1|$1 ka panid|$1 ka mga panid}} ang imong gibantayan, way labot ang mga panid sa hisgot.",
- "wlshowlast": "Ipakita ang miaging $1 ka oras $2 ka mga adlaw $3",
+ "wlshowlast": "Ipakita ang miaging $1 ka oras $2 ka mga adlaw",
"watchlist-options": "Mga opsyon sa akong gibantayan",
"watching": "Gibantayan...",
"unwatching": "Gipasagdan...",
@@ -833,7 +831,6 @@
"metadata-expand": "Ipakita ang mas daghang detalye",
"metadata-collapse": "Tagoa ang mga ekstended nga detalye",
"metadata-fields": "Ang XIF metadata fields nga nakatala niining mensahe iapil sa display sa panid sa imahen kon gi-collapse ang metadata table.\nAng uban default nga nakatago.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "tanan",
"namespacesall": "tanan",
"monthsall": "tanan",
"watchlisttools-view": "Tan-awa ang may kalabotan nga mga pag-usab",
@@ -842,5 +839,6 @@
"specialpages": "Espesyal nga mga panid",
"revdelete-restricted": "mga na-aplay nga restriksyon sa mga tagdumala",
"revdelete-unrestricted": "gitangtang ang mga restriksyon alang sa mga tagdumala",
- "rightsnone": "(wala)"
+ "rightsnone": "(wala)",
+ "revdelete-summary": "mubong sugid sa pag-usab"
}
diff --git a/languages/i18n/ch.json b/languages/i18n/ch.json
index 6a2eddc9..9e309af9 100644
--- a/languages/i18n/ch.json
+++ b/languages/i18n/ch.json
@@ -436,7 +436,6 @@
"mergehistory-autocomment": "Mana'daña [[:$1]] yan [[:$2]]",
"mergehistory-comment": "Mana'daña [[:$1]] yan [[:$2]]: $3",
"mergelog": "Log i manmana'daña",
- "pagemerge-logentry": "ha na'daña [[$1]] yan [[$2]] (ribision asta $3)",
"revertmerge": "Sipåra",
"mergelogpagetext": "Guåha gi sampapa' un listan i manmana'daña siha ni historian påhina gi halacha.",
"history-title": "Historian tinilaika nu \"$1\"",
@@ -559,7 +558,6 @@
"unusedtemplates": "Plantiyas siha ti ma'usa",
"randompage": "Maseha håfa na påhina",
"randomredirect": "Muna'dirihi maseha manu guatu",
- "statistics-mostpopular": "Påhina siha ni mas ma'atan",
"doubleredirects": "Mandoble na inachetton ma'dirihi siha",
"brokenredirects": "Manmayulang na muna'dirihi siha",
"brokenredirects-edit": "tulaika",
@@ -593,7 +591,6 @@
"move": "Kånya",
"movethispage": "Kånya i påhina",
"booksources": "I source i lepblo",
- "booksources-go": "Hånao",
"specialloguserlabel": "Muna'sesetbi:",
"speciallogtitlelabel": "Titulo:",
"log": "Logs",
@@ -619,7 +616,7 @@
"watchthispage": "Pulan este na påhina",
"unwatch": "Basta mapulan",
"watchlist-details": "{{PLURAL:$1|$1 påhina|$1 na påhina siha}} un pupulan, sin i påhinan kombetsasion siha.",
- "wlshowlast": "Na'annok $1 na ora yan $2 na diha siha gi halacha $3",
+ "wlshowlast": "Na'annok $1 na ora yan $2 na diha siha gi halacha",
"watching": "Mamulan...",
"unwatching": "Pumapara mamulan...",
"deletepage": "Na'suha i påhina",
@@ -760,7 +757,6 @@
"metadata": "Metadata",
"metadata-expand": "Na'annok todu i infotmasion-ña",
"metadata-collapse": "Na'atok patte i infotmasion-ña",
- "watchlistall2": "todu",
"namespacesall": "todu",
"monthsall": "todu",
"imgmultigo": "Hånao!",
@@ -771,5 +767,6 @@
"version": "Tinilaika",
"version-specialpages": "Manespesiat na påhina",
"fileduplicatesearch-submit": "Aligao",
- "specialpages": "Manespesiat na påhina"
+ "specialpages": "Manespesiat na påhina",
+ "revdelete-summary": "tulaika i sumaria"
}
diff --git a/languages/i18n/chr.json b/languages/i18n/chr.json
index 09cbddd2..4d49563b 100644
--- a/languages/i18n/chr.json
+++ b/languages/i18n/chr.json
@@ -1,74 +1,74 @@
{
- "@metadata": {
- "authors": [
- "Etse (on chr.wikipedia.org)",
- "Gmaxwell (on chr.wikipedia.org)",
- "Malafaya",
- "Maximillion Pegasus",
- "Srtxg (on chr.wikipedia.org)"
- ]
- },
- "january": "ᏚᏃᎸᏔᏂ",
- "february": "ᎧᎦᎵ",
- "march": "ᎠᏄᏱ",
- "april": "ᎧᏩᏂ",
- "may_long": "ᎠᎾᎠᎬᏘ",
- "june": "ᏕᎭᎷᏱ",
- "july": "ᎫᏰᏉᏂ",
- "august": "ᎦᎶᏂᎢ",
- "september": "ᏚᎵᎢᏍᏗ",
- "october": "ᏚᏂᏅᏗ",
- "november": "ᏄᏓᏕᏆ",
- "december": "ᎥᏍᎩᎦ",
- "jan": "ᏚᏃᎸ",
- "feb": "ᎧᎦᎵ",
- "mar": "ᎠᏄᏱ",
- "apr": "ᎧᏩᏂ",
- "may": "ᎠᎾᎠ",
- "jun": "ᏕᎭᎷ",
- "jul": "ᎫᏰᏉ",
- "aug": "ᎦᎶᏂ",
- "sep": "ᏚᎵᎢ",
- "oct": "ᏚᏂᏅ",
- "nov": "ᏄᏓᏕ",
- "dec": "ᎥᏍᎩ",
- "about": "ᎬᏩᏚᏫᏛ",
- "article": "ᎤᏓᏡᎬ",
- "navigation": "ᎠᏂᎩᏍᏗ ᏥᏳ",
- "help": "ᎠᎵᏍᏕᎸᏗ",
- "search": "ᎠᏯᏍᏗ",
- "searchbutton": "ᎠᏯᏍᏗ",
- "go": "ᎮᎦ",
- "history": "ᏆᏥ ᎧᏃᎮᏍᎩ",
- "history_short": "ᎧᏃᎮᏍᎩ",
- "printableversion": "ᎦᎴᏯᏛ ᏅᎬᎪᏔᏅᎯ",
- "permalink": "ᏂᎪᎯᎸ ᏕᎬᏔᏛ",
- "talkpagelinktext": "ᎧᏃᎮᎸᏗ",
- "talk": "ᎧᏃᎮᎸᏗ",
- "toolbox": "ᎪᎱᏍᏗ ᎬᏔᏂᏓᏍᏗ ᎧᏁᏌᎢ",
- "otherlanguages": "ᎭᏫᎾᏗᏢ ᏐᎢ ᏗᎦᏬᏂᎯᏍᏗ",
- "jumptosearch": "ᎡᏗt",
- "aboutpage": "Project:ᎬᏩᏚᏫᏛ",
- "currentevents": "ᏗᏤᎢ",
- "mainpage": "ᎤᎵᎮᎵᏍᏗ",
- "mainpage-description": "ᎤᎵᎮᎵᏍᏗ",
- "portal": "ᎾᎥ ᏄᎾᏓᎸ ᎠᏍᏚᎢᏍᏗ",
- "nstab-main": "ᎤᏓᏡᎬ",
- "nstab-category": "ᏗᎦᎪᏗ",
- "viewsource": "DᎢᎧᏃᏗᎢ DᎢᏓᎴᎲᏍᎬ",
- "revdelete-radio-set": "ᎥᎥ",
- "editundo": "IᎬᎾᏕᏍᏗ",
- "searchresultshead": "ᎠᏯᏍᏗ",
- "recentchanges": "ᎾᏞᎬ ᏗᎦᏁᏟᏴᏍᏗ",
- "recentchangeslinked": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
- "recentchangeslinked-feed": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
- "recentchangeslinked-toolbox": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
- "upload": "ᎦᎸᎳᏗᏢ ᎠᎧᎵᎢ ᎠᏝᎥᎢ",
- "randompage": "ᎤᏍᏆᏂᎪᏗ ᎤᏆᏓᏛ",
- "watch": "WᎠᏥ",
- "actioncomplete": "ᎠᏍᏆᏙᏅᎯ",
- "sp-contributions-talk": "ᎧᏃᎮᎸᏗ",
- "whatlinkshere": "ᎦᏙ ᎤᏍᏗ ᏗᏕᎬᏔᏛ ᎠᎭᏂ",
- "ilsubmit": "ᎠᏯᏍᏗ",
- "specialpages": "ᎤᏤᎵᏛ ᏚᏆᏓᏛ"
+ "@metadata": {
+ "authors": [
+ "Etse (on chr.wikipedia.org)",
+ "Gmaxwell (on chr.wikipedia.org)",
+ "Malafaya",
+ "Maximillion Pegasus",
+ "Srtxg (on chr.wikipedia.org)"
+ ]
+ },
+ "january": "ᏚᏃᎸᏔᏂ",
+ "february": "ᎧᎦᎵ",
+ "march": "ᎠᏄᏱ",
+ "april": "ᎧᏩᏂ",
+ "may_long": "ᎠᎾᎠᎬᏘ",
+ "june": "ᏕᎭᎷᏱ",
+ "july": "ᎫᏰᏉᏂ",
+ "august": "ᎦᎶᏂᎢ",
+ "september": "ᏚᎵᎢᏍᏗ",
+ "october": "ᏚᏂᏅᏗ",
+ "november": "ᏄᏓᏕᏆ",
+ "december": "ᎥᏍᎩᎦ",
+ "jan": "ᏚᏃᎸ",
+ "feb": "ᎧᎦᎵ",
+ "mar": "ᎠᏄᏱ",
+ "apr": "ᎧᏩᏂ",
+ "may": "ᎠᎾᎠ",
+ "jun": "ᏕᎭᎷ",
+ "jul": "ᎫᏰᏉ",
+ "aug": "ᎦᎶᏂ",
+ "sep": "ᏚᎵᎢ",
+ "oct": "ᏚᏂᏅ",
+ "nov": "ᏄᏓᏕ",
+ "dec": "ᎥᏍᎩ",
+ "about": "ᎬᏩᏚᏫᏛ",
+ "article": "ᎤᏓᏡᎬ",
+ "navigation": "ᎠᏂᎩᏍᏗ ᏥᏳ",
+ "help": "ᎠᎵᏍᏕᎸᏗ",
+ "search": "ᎠᏯᏍᏗ",
+ "searchbutton": "ᎠᏯᏍᏗ",
+ "go": "ᎮᎦ",
+ "history": "ᏆᏥ ᎧᏃᎮᏍᎩ",
+ "history_short": "ᎧᏃᎮᏍᎩ",
+ "printableversion": "ᎦᎴᏯᏛ ᏅᎬᎪᏔᏅᎯ",
+ "permalink": "ᏂᎪᎯᎸ ᏕᎬᏔᏛ",
+ "talkpagelinktext": "ᎧᏃᎮᎸᏗ",
+ "talk": "ᎧᏃᎮᎸᏗ",
+ "toolbox": "ᎪᎱᏍᏗ ᎬᏔᏂᏓᏍᏗ ᎧᏁᏌᎢ",
+ "otherlanguages": "ᎭᏫᎾᏗᏢ ᏐᎢ ᏗᎦᏬᏂᎯᏍᏗ",
+ "jumptosearch": "ᎡᏗt",
+ "aboutpage": "Project:ᎬᏩᏚᏫᏛ",
+ "currentevents": "ᏗᏤᎢ",
+ "mainpage": "ᎤᎵᎮᎵᏍᏗ",
+ "mainpage-description": "ᎤᎵᎮᎵᏍᏗ",
+ "portal": "ᎾᎥ ᏄᎾᏓᎸ ᎠᏍᏚᎢᏍᏗ",
+ "nstab-main": "ᎤᏓᏡᎬ",
+ "nstab-category": "ᏗᎦᎪᏗ",
+ "viewsource": "DᎢᎧᏃᏗᎢ DᎢᏓᎴᎲᏍᎬ",
+ "revdelete-radio-set": "ᎥᎥ",
+ "editundo": "IᎬᎾᏕᏍᏗ",
+ "searchresultshead": "ᎠᏯᏍᏗ",
+ "recentchanges": "ᎾᏞᎬ ᏗᎦᏁᏟᏴᏍᏗ",
+ "recentchangeslinked": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
+ "recentchangeslinked-feed": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
+ "recentchangeslinked-toolbox": "ᎪᎱᏍᏗ ᎠᎾᏓᏛᏂ ᏗᎦᏁᏟᏴᏍᏗ",
+ "upload": "ᎦᎸᎳᏗᏢ ᎠᎧᎵᎢ ᎠᏝᎥᎢ",
+ "randompage": "ᎤᏍᏆᏂᎪᏗ ᎤᏆᏓᏛ",
+ "watch": "WᎠᏥ",
+ "actioncomplete": "ᎠᏍᏆᏙᏅᎯ",
+ "sp-contributions-talk": "ᎧᏃᎮᎸᏗ",
+ "whatlinkshere": "ᎦᏙ ᎤᏍᏗ ᏗᏕᎬᏔᏛ ᎠᎭᏂ",
+ "ilsubmit": "ᎠᏯᏍᏗ",
+ "specialpages": "ᎤᏤᎵᏛ ᏚᏆᏓᏛ"
}
diff --git a/languages/i18n/ckb.json b/languages/i18n/ckb.json
index 141ad096..2eecb5c0 100644
--- a/languages/i18n/ckb.json
+++ b/languages/i18n/ckb.json
@@ -14,7 +14,8 @@
"رزگار",
"아라",
"Serwan",
- "Ebraminio"
+ "Ebraminio",
+ "Macofe"
]
},
"tog-underline": "ھێڵ ھێنان بەژێر بەستەرەکان:",
@@ -41,7 +42,7 @@
"tog-shownumberswatching": "ژمارەی بەکارھێنەرە چاودێرەکان نیشان بدە",
"tog-oldsig": "واژووی ئێستا:",
"tog-fancysig": "وەکوو ویکیدەق واژووەکە لەبەر چاو بگرە (بێ بەستەرێکی خۆگەڕ)",
- "tog-uselivepreview": "لە پێشبینینی زیندوو کەڵک وەربگرە (تاقیکاری‌)",
+ "tog-uselivepreview": "پێشبینینی زیندوو بە کار بھێنە",
"tog-forceeditsummary": "ئەگەر کورتەی دەستکاریم نەنووسی پێم بڵێ",
"tog-watchlisthideown": "دەستکارییەکانم بشارەوە لە پێرستی چاودێری",
"tog-watchlisthidebots": "دەستکارییەکانی بات بشارەوە لە لیستی چاودێری",
@@ -214,6 +215,7 @@
"otherlanguages": "بە زمانەکانی تر",
"redirectedfrom": "(ڕەوانەکراوە لە $1ەوە)",
"redirectpagesub": "پەڕەی ڕەوانەکەر",
+ "redirectto": "ڕەوانەکردن بۆ:",
"lastmodifiedat": "ئەم پەڕەیە دواجار لە $2ی $1 نوێ کراوەتەوە.",
"viewcount": "ئەم پەڕەیە {{PLURAL:$1|یەکجار|$1 جار}} بینراوە.",
"protectedpage": "پەڕەی پارێزراو",
@@ -235,8 +237,8 @@
"mainpage": "دەستپێک",
"mainpage-description": "دەستپێک",
"policy-url": "Project: سیاسەت",
- "portal": "دەروازەی بەکارھێنەران",
- "portal-url": "Project: دەروازەی بەکارھێنەران",
+ "portal": "دەروازەی کۆمەڵگا",
+ "portal-url": "Project:دەروازەی کۆمەڵگا",
"privacy": "سیاسەتی تایبەتێتی",
"privacypage": "Project:پاراستنی زانیارییەکان",
"badaccess": "ھەڵە لە بە دەست ھێنان",
@@ -266,6 +268,7 @@
"hidetoc": "بیشارەوە",
"collapsible-collapse": "کۆی بکەوە",
"collapsible-expand": "بڵاوی بکەوە",
+ "confirmable-confirm": "{{GENDER:$1|دڵنیای}}؟",
"confirmable-yes": "بەڵێ",
"confirmable-no": "نا",
"thisisdeleted": "$1 نیشان بدە یا بھێنەوە؟",
@@ -335,7 +338,7 @@
"viewsourcetext": "دەتوانی سەرچاوەی ئەم پەڕە ببینی و کۆپیی بکەی:",
"viewyourtext": "دەتوانی ژێدەری '''دەستکارییەکەت''' لەم پەڕەیەدا ببینی و کۆپی بکەی:",
"protectedinterface": "ئەم پەڕەیە دەقی ڕواڵەتی نەرمامێری ئەم ویکییە نیشان دەدات و بۆ بەرگری لە خراپکاری پارێزراوە.\nبۆ زیادکردن یان گۆڕینی وەرگێڕانەکان بۆ ھەموو ویکییەکان، تکایە لە [//translatewiki.net/ translatewiki.net]، پرۆژەی ناوچەیی کردنی میدیاویکی کەڵک وەربگرە.",
- "editinginterface": "'''ئاگاداری:''' تۆ خەریکی دەستکاریی پەڕەیەکی کە بۆ دابینکردنی دەقی ڕواڵەتی نەرمامێر بە کار دەھێنرێت.\nگۆڕانکاریی ئەم پەڕەیە کاریگەر دەبێت لە سەر ڕواڵەتی پەڕەکانی بەکارھێنەرانی تر لەم ویکییەدا.\nبۆ زیادکردن یان گۆڕینی وەرگێڕانەکان بۆ ھەموو ویکییەکان، تکایە لە [//translatewiki.net/ translatewiki.net]، پرۆژەی ناوچەیی کردنی میدیاویکی کەڵک وەربگرە.",
+ "editinginterface": "<strong>ھۆشیار بە:</strong> خەریکی دەستکاریی پەڕەیەک دەکەیت کە بۆ دابینکردنی دەقی ڕووکاری نەرمامێر بەکاردێت.\nگۆڕانکارییەکانی لەم پەڕەیەدا کاریگەر دەبێت لە سەر ڕواڵەتی پەڕەکانی بەکارھێنەرانی تر لەم ویکییەدا.",
"cascadeprotected": "ئەم لاپەڕە پارێزراوە لە دەستکاریی، چونکا خراوەتە سەر ڕیزی ئەم {{PLURAL:$1|لاپەڕانه‌، کە}} که‌ به‌ هه‌ڵکردنی بژارده‌ی داڕژان هه‌ڵکراوه‌:\n$2",
"namespaceprotected": "تۆ ناتوانی لاپەڕەکانی ناو نەیمسپەیسی '''$1''' بگۆڕی.",
"customcssprotected": "دەسەڵاتی دەستکارییکردنی ئەم پەڕەی CSS ـەت نییە چوونکە ڕێکخستنەکانی کەسێکی تر لەخۆ دەگرێت.",
@@ -349,7 +352,7 @@
"invalidtitle-knownnamespace": "سەردێڕی نادروست بە بۆشایی ناوی «$2» و دەقی «$3»",
"invalidtitle-unknownnamespace": "سەردێڕی هەڵە لەگەڵ ناوەبۆشایی نەناسراوی ژمارە $1 و دەقی \"$2\"",
"exception-nologin": "لەژوورەوە نیت",
- "exception-nologin-text": "تکایە [[Special:Userlogin|بچۆ ژوورەوە]] تا بتوانیت بچیتە نێو ئەم پەڕەیە یان ئەم کردەیە ئەنجام بدەیت.",
+ "exception-nologin-text": "تکایە بچۆ ژوورەوە تا بتوانی دەستت بەم پەڕەیە یان کردەوەیە ڕابگات.",
"exception-nologin-text-manual": "تکایە $1 تا بتوانیت بچیتە نێو ئەم پەڕەیە یان ئەم کردەیە ئەنجام بدەیت.",
"virus-badscanner": "پێکەربەندیی نابەجێ: ڤایرس سکەنێری نەناسراو: ''$1''",
"virus-scanfailed": "سکەن ئەنجام نەدرا(کۆد $1)",
@@ -391,6 +394,8 @@
"userlogin-resetlink": "وردەکارییەکانی چوونەژوورەوەتت لە بیر کردووە؟",
"userlogin-resetpassword-link": "تێپەڕوشەکەت بیر کردووە؟",
"userlogin-helplink2": "یارمەتی بۆ چوونەژوورەوە",
+ "userlogin-loggedin": "تۆ ھەر ئێستا بە ناوی {{GENDER:$1|$1}} چوویتە ژوورەوە.\nفۆرمی ژێرەوە بەکاربھێنە بۆ چوونەژوورەوە وەک بەکارھێنەرێکی تر.",
+ "userlogin-createanother": "ھەژمارێکی تر دروست بکە",
"createacct-emailrequired": "ناونیشانی ئیمەیل",
"createacct-emailoptional": "ناونیشانی ئیمەیل (دڵخوازانە)",
"createacct-email-ph": "ناونیشانی ئیمەیلەکەت بنووسە",
@@ -450,14 +455,14 @@
"accountcreatedtext": "هەژماری بەکارهێنەری [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|لێدوان]]) دروست کراوە.",
"createaccount-title": "درووست‌کردنی هەژمارە بۆ {{SITENAME}}",
"createaccount-text": "کەسێک هەژمارەیەکی بۆ ئی‌مێڵ ئەدرەسەکی تۆ لەسەر {{SITENAME}} ($4) بەناوی \"$2\"، بە وشەی نهێنی \"$3\".\nئێستا دەبێ بڕۆیتە ژوورەوە و وشەی نهێنی بگۆڕیت.\n\nئەگەر ئەو هەژمارە بە هەڵە درووست‌کراوە، ئەم برووسکە لە بەرچاو مەگرە.",
- "login-throttled": "ژمارەیەکی زۆر هەوڵت داوە بۆ چوونە ژوورەوە.\nتکایە پێش هەوڵی دووبارە، نەختێک بوەستە.",
+ "login-throttled": "زۆر زۆر ھەوڵت داوە بۆ چوونە ژوورەوە.\nتکایە $1 بوەستە پێش ھەوڵی دووبارە.",
"loginlanguagelabel": "زمان: $1",
"pt-login": "بچۆ ژوورەوە",
"pt-login-button": "بچۆ ژوورەوە",
"pt-createaccount": "ھەژمار دروست بکە",
"pt-userlogout": "بچۆ دەرەوە",
"changepassword": "تێپەڕوشە بگۆڕە",
- "resetpass_announce": "بە کۆدی کاتیی ئیمەیل‌کراو ھاتوویتە ژوورەوە.\nبۆ دوایی ھاتنی چوونە ژوورەوە، ئەشێ تێپەڕوشەیەکی نوێ ھەڵبژێری لێرە:",
+ "resetpass_announce": "بۆ کۆتایی چوونە ژوورەوە، دەبێت تێپەڕوشەیەکی نوێ دابنێیت.",
"resetpass_text": "<!-- تێپه‌ڕه‌وشه‌ی هه‌ژماره‌كه‌ سفر بكه‌ره‌وه‌ -->",
"resetpass_header": "گۆڕینی تێپەڕوشەی ھەژمار",
"oldpassword": "تێپەڕوشەی پێشو:",
@@ -666,15 +671,20 @@
"rev-delundel": "نیشان بدە/بشارەوە",
"rev-showdeleted": "نیشان بدە",
"revisiondelete": "سڕینەوە/ھێنانەوەی پێداچوونەوەکان",
- "revdelete-nooldid-title": "مەبەستی پێداچوونەوەی نادیار",
- "revdelete-nooldid-text": "پێداچوەنەوەی مەبەستت ڕاچاو نەکردە بۆ ئەنجامی ئەم فەنکشێنە یان ئەو پێداچوونەوەی ڕاچاوت کردە بوونی نیە، یا خەریکی هەوڵی داشاردنی پێداچوونەوهی ئێستا‌ ئەدەی.",
+ "revdelete-nooldid-title": "پێداچوونەوەی مەبەستی نادروست",
+ "revdelete-nooldid-text": "پێداچوەنەوە(کان)ی مەبەستت بۆ جێبەجێکردنی ئەم کارە دەستنیشان نەکردووە یان پێداچوونەوەی دەستنیشان‌کراو بوونی نییە، یان خەریکی هەوڵی شاردنەوەی پێداچوونەوەی ھەنووکەیی دەدەیت.",
"revdelete-no-file": "ئەو پەڕگەی ڕاچاوت کردووە بوونی نیە.",
"revdelete-show-file-confirm": "ئایا دڵنیایت دەتەوێ پێداچوونەوەی سڕاوەی پەڕگەی \"<nowiki>$1</nowiki>\" لە $2، لە $3دا ببیینی؟",
"revdelete-show-file-submit": "بەڵێ",
+ "revdelete-selected-text": "{{PLURAL:$1|پێداچوونەوەی ھەڵبژێردراوی|پێداچوونەوە ھەڵبژێردراوەکانی}} [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|لۆگی ڕووداوەی هەڵبژێراو|لۆگی ڕووداوە هەڵبژێراوەکان}}:",
- "revdelete-confirm": "تکایە بەڵێن بدە کە دەتەوێ ئەوە بکەی و لە ئەنجامەکانی ئەوە ئاگاداریت و بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] ئەنجامی ئەدەی.",
+ "revdelete-text-text": "پێداچوونە سڕاوەکان ھێشتا لە مێژووی پەڕەدا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
+ "revdelete-text-file": "وەشانە سڕاوەکانی پەڕگە ھێشتا لە مێژووی پەڕگەدا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
+ "logdelete-text": "ڕووداوە سڕاوەکانی لۆگ ھێشتا لە لۆگەکاندا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
+ "revdelete-text-others": "بەڕێوەبەرانی تر ھێشتا دەتوانن ناوەرۆکی شاردراو ببینن و بیھێننەوە، مەگەر سنووردارکردنی تر ڕێک بخرێت.",
+ "revdelete-confirm": "تکایە پشتڕاست بکەوە دەتەوێ ئەمە بکەیت و لە ئاکامەکەی ئاگاداریت و ئەمە بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] دەکەیت.",
"revdelete-suppress-text": "بەرگری دەبێ '''تەنها''' بۆ ئەم بابەتانە بەکاربهێندرێت:<br />\n* سووکایەتیکردن بە کەسایەتییەک<br />\n* بڵاوکردنەوەی زانیاریی تاکەکەسی نەگونجاو<br />\n*: '' ناونیشانی ماڵ یا ژمارە تەلەفۆن و وەک ئەمانە.''<br />",
- "revdelete-legend": "سنووردارکردنی دەرکەوتن",
+ "revdelete-legend": "ڕێکخستنی سنووردارکردنی دیاریکردن",
"revdelete-hide-text": "دەقی پێداچوونەوە",
"revdelete-hide-image": "ناوەڕۆکی پەڕگە بشارەوە",
"revdelete-hide-name": "داشاردنی مەبەست و کردەوە",
@@ -687,7 +697,7 @@
"revdelete-suppress": "بەرگری دراوە لە بەڕێوبەران هەر وەک ئەوانی دیکە",
"revdelete-unsuppress": "لابردنی بەربەستەکان لە سەر پێداچوونەوە گەڕێندراوەکان",
"revdelete-log": "هۆکار:",
- "revdelete-submit": "خستنەکار بۆ سەر پێداچوونەوە {{PLURAL:$1|ھەڵبژێردراوەکە|ھەڵبژێردراوەکان}}",
+ "revdelete-submit": "بەکاربەرە بۆ سەر {{PLURAL:$1|پێداچوونەوەی ھەڵبژێردراو|پێداچوونەوە ھەڵبژێردراوەکان}}",
"revdelete-success": "'''چۆنیەتی بیندرانی پێداچوونەوە بە سەرکەوتوویی نوێکراوە.'''",
"revdelete-failure": "'''ناکرێ دەرکەوتنی پێداچوونەوە نوێبکرێتەوە:'''\n$1",
"logdelete-success": "'''بیندرانی لۆگ‌ بە سەرکەوتوویی داندرا.'''",
@@ -730,7 +740,6 @@
"mergehistory-same-destination": "پەڕەی سەرچاوە و مەبەست نابێ یەک بن.",
"mergehistory-reason": "هۆکار:",
"mergelog": "لۆگی کردنەیەک",
- "pagemerge-logentry": "[[$1]]ی لەگەڵ [[$2]] کردە یەک (پێداچوونەوەکان ھەتا $3)",
"revertmerge": "ھەڵوەشاندنەوەی کردنەیەک",
"mergelogpagetext": "لە خوارەوە دوایین مێژووی‌لاپەڕە خستنە سەر لاپەڕەیەکی‌تر، دەبینی.",
"history-title": "مێژووی پێداچوونەوەکانی «$1»",
@@ -739,8 +748,9 @@
"difference-multipage": "(جیاوازی نێوان پەڕەکان)",
"lineno": "ھێڵی $1:",
"compareselectedversions": "پیاچوونەوە ھەڵبژێردراوەکان ھەڵسەنگێنە",
- "showhideselectedversions": "پیاچوونەوە ھەڵبژێردراوەکان نیشانبدە/بشارەوە",
+ "showhideselectedversions": "دیاریکردنی پێداچوونەوە ھەڵبژێردراوەکان بگۆڕە",
"editundo": "پووچەڵکردنەوە",
+ "diff-empty": "(بەبێ جیاوازی)",
"searchresults": "ئاکامەکانی گەڕان",
"searchresults-title": "ئاکامەکانی گەڕان بۆ «$1»",
"titlematches": "سەردێڕی پەڕە پێی ئەخوا",
@@ -766,14 +776,16 @@
"search-result-category-size": "{{PLURAL:$1|١ ئەندام|$1 ئەندام}} ({{PLURAL:$2|١ ژێرپۆل|$2 ژێرپۆل}}, {{PLURAL:$3|١ پەڕگە|$3 پەڕگە}})",
"search-redirect": "(ڕەوانەکەر $1)",
"search-section": "(بەشی $1)",
+ "search-category": "(پۆلی $1)",
"search-suggest": "ئایا مەبەستت ئەمە بوو: $1",
"search-interwiki-caption": "پرۆژە خوشکەکان",
- "search-interwiki-default": "$1 ئەنجام:",
+ "search-interwiki-default": "ئاکام لە $1:",
"search-interwiki-more": "(زیاتر)",
"search-relatedarticle": "پەیوەست",
"searchrelated": "پەیوەست",
"searchall": "ھەموو",
"showingresults": "لە خوارەوە {{PLURAL:$1|'''یەک''' ئەنجام|'''$1''' ئەنجام}} نیشان دراوە، بە دەست پێ کردن لە ژمارەی '''$2'''ەوە.",
+ "search-showingresults": "{{PLURAL:$4|ئاکامی <strong>$1</strong> لە <strong>$3</strong>|ئاکامەکانی <strong>$1 - $2</strong> لە <strong>$3</strong>}}",
"search-nonefound": "ھیچ ئاکامێک کە بە داواکارییەکەت بخوا نەدۆزرایەوە.",
"powersearch-legend": "گەڕانی پێشکەوتوو",
"powersearch-ns": "گەڕان لە بۆشاییی ناوەکانی:",
@@ -861,7 +873,7 @@
"gender-female": "ژن",
"prefs-help-gender": "دڵخواز: بۆ بانگ کردنی دروست بە دەستی نەرمامێر.\nئەم زانیارییە گشتی ئەبێ.",
"email": "ئیمەیل",
- "prefs-help-realname": "ناوی ڕاستی دڵخوازە.\nئەگەر پێت خۆش بێت بیدەی، زۆرتر ڕاتدەکێشێت بۆ کارەکانت.",
+ "prefs-help-realname": "ناوی ڕاستەقینە دڵخوازە.\nئەگەر بنووسرێت، لەوانەیە بۆ ئاماژەدان بەرھەمەکەت بە کار بھێنرێت.",
"prefs-help-email": "دانانی ناونیشانی ئیمەیل دڵخوازانەیە، بەڵام ئەگەر تێپەڕوشەکەت لەیادکرد، بۆ نوێ‌کردنەوەی تێپەڕوشە پێویست دەبێت.",
"prefs-help-email-others": "ھەروەھا دەتوانی ھەڵبژێری کە بەکارھێنەرانی دیکە لە ڕێگەی پەڕەی بەکارھێنەرییەکەت یان لێدوانەکەت بێ ئاشکراکردنی کەسایەتیت پێوەندیت لەگەڵ بگرن.",
"prefs-help-email-required": "ناونیشانی ئیمەیل پێویستە.",
@@ -897,7 +909,7 @@
"userrights-no-interwiki": "دەسەڵاتی گۆڕینی مافەکانی بەکارهێنەر لە ویکی‌یەکانی دیکەت نیە.",
"userrights-nodatabase": "بنکەدراوی $1 بوونی نیە یا لەم شوێنە نیە.",
"userrights-nologin": "بۆ دانانی مافەکانی بەکارهێنەر دەبێ بە هەژماری بەڕێوبەری [[Special:UserLogin|بچیتە ژووروە]].",
- "userrights-notallowed": "ھەژمارەکەی تۆ دەسەڵاتی دانان یان لابردنی مافەکانی بەکارھێنەری نییە.",
+ "userrights-notallowed": "تۆ دەسەڵاتی دانان یان لابردنی مافەکانی بەکارھێنەرانت نییە.",
"userrights-changeable-col": "ئەو گرووپانەی دەتوانی بیگۆڕی",
"userrights-unchangeable-col": "ئەو گرووپانەی ناتوانی بیگۆڕی",
"group": "گرووپ:",
@@ -951,7 +963,7 @@
"right-deletedtext": "دیتنی دەقە سڕاوەکان و گۆڕانکارییەکانی نێوان پێداچوونەوە سڕاوەکان",
"right-browsearchive": "گەڕانی پەڕە سڕاوەکان",
"right-undelete": "ھێنانەوەی پەڕەیەک",
- "right-suppressrevision": "بەسەرداچوونەوە و ھێنانەوەی پێداچوونەوە شاردراوەکان لە بەڕێوبەران",
+ "right-suppressrevision": "بینین، شاردنەوە و ھێنانەوەی پێداچوونەوە تایبەتەکانی پەڕەکان لە لایەن ھەر بەکارھێنەرێکەوە",
"right-suppressionlog": "دیتنی لۆگە نھێنییەکان",
"right-block": "بەربەستنی بەکارھێنەرانی تر لە دەستکاریکردن",
"right-blockemail": "بەربەستنی بەکارھێنەرێک لە ناردنی ئیمەیل",
@@ -989,6 +1001,7 @@
"right-override-export-depth": "هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێ‌دراو تا قووڵایی 5 لەخۆ بگرێت",
"right-sendemail": "ناردنی ئیمەیل بۆ بەکارھێنەرانی تر",
"right-passwordreset": "دیتنی ئیمەیلەکانی ڕێکخستنەوەی تێپەڕوشە",
+ "right-managechangetags": "دروستکردن و سڕینەوەی [[Special:Tags|تاگەکان]] لە بنکەدراوە",
"newuserlogpage": "لۆگی دروستکردنی بەکارھێنەر",
"newuserlogpagetext": "ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.",
"rightslog": "لۆگی مافەکانی بەکارھێنەر",
@@ -1045,7 +1058,7 @@
"recentchanges-legend-heading": "'''کورتکراوەکان:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ھەروەھا بڕوانە [[Special:NewPages|پێرستی پەڕە نوێکان]])",
"recentchanges-legend-plusminus": "(''±۱٢٣'')",
- "rcnotefrom": "ژێرەوە گۆڕانکارییەکانە لە <strong>$2</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).",
+ "rcnotefrom": "ژێرەوە {{PLURAL:$5|گۆڕانکارییەکەیە|گۆڕانکارییەکانە}} لە strong>$3، $4</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).",
"rclistfrom": "گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $3 $2",
"rcshowhideminor": "دەستکارییە بچووکەکان $1",
"rcshowhideminor-show": "نیشان بدە",
@@ -1061,6 +1074,7 @@
"rcshowhideanons-hide": "بشارەوە",
"rcshowhidepatr": "گۆرانکارییە پاس دراوەکان $1",
"rcshowhidepatr-show": "نیشان بدە",
+ "rcshowhidepatr-hide": "بیشارەوە",
"rcshowhidemine": "دەستکارییەکانم $1",
"rcshowhidemine-show": "نیشان بدە",
"rcshowhidemine-hide": "بشارەوە",
@@ -1191,7 +1205,7 @@
"nolicense": "ھیچ ھەڵنەبژێردراوە",
"license-nopreview": "(پێشبینین ئامادەی کەڵک وەرگرتن نییە)",
"upload_source_url": " (URLـی بەکار، بۆ دەست‌پێگەیشتنی گشتی)",
- "upload_source_file": " (پەڕگەیەک لەسەر کۆمپیوتەرەکەت)",
+ "upload_source_file": "(پەڕگەی ھەڵبژێرراوت لەسەر کۆمپیوتەرەکەت)",
"listfiles-delete": "بیسڕەوە",
"listfiles-summary": "ئەم پەڕە تایبەتە ھەموو پەڕگە بارکراوەکان نیشان دەدات.",
"listfiles_search_for": "بگەڕێ بۆ ناوی میدیای:",
@@ -1275,7 +1289,6 @@
"statistics": "ئامارەکان",
"statistics-header-pages": "ئامارەکانی پەڕەکان",
"statistics-header-edits": "ئامارەکانی گۆڕانکارییەکان",
- "statistics-header-views": "ئامارەکانی سەردانەکان",
"statistics-header-users": "ئامارەکانی بەکارھێنەران",
"statistics-header-hooks": "ئامارەکانی دیکە",
"statistics-articles": "پەڕە بە ناوەڕۆکەکان",
@@ -1284,12 +1297,9 @@
"statistics-files": "پەڕگە بارکراوەکان",
"statistics-edits": "دەستکارییەکانی پەڕەکان لە کاتی دامەزراندنی {{SITENAME}}",
"statistics-edits-average": "ناونجیی دەستکارییەکان بۆ ھەر پەڕە",
- "statistics-views-total": "دیتنی هەموو",
- "statistics-views-peredit": "دیتنی هەر دەستکارییەک",
"statistics-users": "[[Special:ListUsers|بەکارھێنەر]]ە تۆمارکراوەکان",
"statistics-users-active": "ئەندامە چالاکەکان",
"statistics-users-active-desc": "ئەو بەکارھێنەرانەی لە {{PLURAL:$1|ڕۆژ|$1 ڕۆژ}}ی ڕابردوودا کردەوەیەکیان بەڕێوە بردووە",
- "statistics-mostpopular": "زۆرترین لاپەڕە بینراوەکان",
"pageswithprop": "پەڕەکان بە تایبەتمەندیی پەڕە",
"pageswithprop-legend": "پەڕەکان بە تایبەتمەندیی پەڕە",
"pageswithprop-text": "ئەم پەڕەیە ئەو پەڕانەی تایبەتمەندییەکی پەرەیەکی دیاریکراو بەکاردەھێنن پێرست دەکا.",
@@ -1324,7 +1334,6 @@
"uncategorizedtemplates": "داڕێژە پۆلێن نەکراوەکان",
"unusedcategories": "پۆلە بەکارنەھێنراوەکان",
"unusedimages": "پەڕگە بەکارنەھاتووەکان",
- "popularpages": "پەڕە مەحبووبەکان",
"wantedcategories": "پۆلە داواکراوەکان",
"wantedpages": "پەڕە داواکراوەکان",
"wantedpages-badtitle": "سەردێڕی نەگونجاو لە سەرجەمی ئەنجامەکان: $1",
@@ -1378,7 +1387,6 @@
"suppress": "چاودێری",
"booksources": "سەرچاوەکانی کتێب",
"booksources-search-legend": "بۆ سەرچاوەی کتێب بگەڕێ",
- "booksources-go": "بڕۆ",
"booksources-text": "لە خوارەوە لیستێک لە بەستەر بۆ ماڵپەڕهایەک کە کتێبی نوێ و بەکارهێنراو دەفرۆشێت و لەوانەیە لەوێ زانیاریی زیاترت دەست‌کەوێت سەبارەت بەو کتێبانەی لە دووی دەگەڕیت:",
"booksources-invalid-isbn": "ISBN دراو لەوە ناچی بەکار بێت، سەرنج بدە لە کاتی کۆپی کردن لە سەرچاوە تووشی هەڵە نوبوبێت.",
"specialloguserlabel": "بەجێھێنەر:",
@@ -1388,7 +1396,7 @@
"alllogstext": "نیشاندانی تێکڕای هەموو لۆگە بەردەستەکانی {{SITENAME}}.\nدەتوانی بە ھەڵبژاردنی جۆرە لۆگێک، ناوی بەکارھێنەرەکە (ھەستیار بە گەورە و بچووکی پیتەکان) یان پەڕە کارتێکراوەکە (ھەستیار بە گەورە و بچووکی پیتەکان)\nبینینەکە سنووردار بکەیتەوە.",
"logempty": "هیچ بابەتێکی هاوتا لە لۆگەکاندا نەدۆزرایەوە.",
"log-title-wildcard": "گەڕانی ئەو سەرناوانە بەم دەقەوە دەست پێدەکەن",
- "showhideselectedlogentries": "بابەتەکانی ھەڵبژێردراوی لۆگ نیشان بدە/بشارەوە",
+ "showhideselectedlogentries": "دیاریکردنی بابەتە ھەڵبژێردراوەکانی لۆگ بگۆڕە",
"allpages": "ھەموو پەڕەکان",
"nextpage": "پەڕەی پاشەوە ($1)",
"prevpage": "پەڕەی پێشەوە ($1)",
@@ -1401,6 +1409,7 @@
"allpagesbadtitle": "سەردێڕی لاپەڕە گونجاو نەبوو یان پێشگڕێکی بەینی‌زمانی یان بەینی‌ویکی هەبوو.\nلەوانەیە یەک یان زیاتر پیتی نەگونجاو بۆ سەردێڕی لەخۆ گرتبێ.",
"allpages-bad-ns": "{{SITENAME}} ناوبۆشایی نیە \"$1\".",
"allpages-hide-redirects": "ڕەوانەکەرەکان بشارەوە",
+ "cachedspecial-viewing-cached-ttl": "خەریکیت وەشانێکی حەشارکراوی ئەم پەڕەیە دەبینی کە دەتوانێت ھی $1 لەمەوبەر بێت.",
"cachedspecial-refresh-now": "دواترین پیشانبدە",
"categories": "پۆلەكان",
"categoriespagetext": "ئەم {{PLURAL:$1|پۆلە پەڕە یان پەڕگەی|پۆلانە پەڕە یان پەڕگەیان}} لەخۆگرتە.\n[[Special:UnusedCategories|پۆلە بەکارنەھێنراوەکان]] لێرەدا نیشان نەدراون.\n[[Special:WantedCategories|پۆلە خوازراوەکان]]یش ببینە.",
@@ -1493,9 +1502,9 @@
"notvisiblerev": "پیاچوونەوە سڕاوەتەوە",
"watchlist-details": "{{PLURAL:$1|$1 پەڕە|$1 پەڕە}} لە لیستی چاودێریەکەتدایە، بێجگە پەڕەکانی لێدوان.",
"wlheader-enotif": "ئاگاداری بە ئیمەیل چالاکە.",
- "wlheader-showupdated": "‏ئەو پەڕانە کە لە پاش دواین سەردانت دەستکاری کراون بە '''ئەستوور''' نیشان دراون",
- "wlnote": "خوارەوە {{PLURAL:$1|دوایین گۆڕانکارییە|دوایین '''$1''' گۆڕانکارییە}} لە دوایین {{PLURAL:$2|کاتژمێر|'''$2''' کاتژمێر}}دا ھەتا $4 لە $3.",
- "wlshowlast": "دوایین $1 کاتژمێر $2 ڕۆژی $3 نیشان بدە",
+ "wlheader-showupdated": "‏ئەو پەڕانە کە لە پاش دوایین سەردانت دەستکاری کراون بە <strong>ئەستوور</strong> نیشان دراون.",
+ "wlnote": "خوارەوە {{PLURAL:$1|دوایین گۆڕانکارییە|دوایین <strong>$1</strong> گۆڕانکارییە}} لە دوایین {{PLURAL:$2|کاتژمێر|<strong>$2</strong> کاتژمێر}}دا ھەتا $4ی $3.",
+ "wlshowlast": "دوایین $1 کاتژمێری $2 ڕۆژ نیشان بدە",
"watchlist-options": "ھەڵبژاردەکانی لیستی چاودێری",
"watching": "چاودێری...",
"unwatching": "لابردنی چاودێری...",
@@ -1524,7 +1533,7 @@
"exbeforeblank": "ناوەرۆک بەر لە واڵاکردنەوە ئەمە بوو: «$1»",
"delete-confirm": "سڕینەوەی «$1»",
"delete-legend": "بیسڕەوە",
- "historywarning": "'''وشیار بە:''' پەڕەیەک کە دەتەوێ بیسڕیتەوە مێژوویەکی ھەیە بە نزیکەی $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}وە:",
+ "historywarning": "<strong>ھۆشیار بە:</strong> پەڕەیەک کە خەریکیت دەیسڕیتەوە مێژوویەکی ھەیە بە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}وە:",
"confirmdeletetext": "تۆ خەریکی پەڕەیەک بە ھەموو مێژووەکەیەوە دەسڕیتەو.\nتکایە پشتڕاستی بکەوە کە دەتەوێت ئەم کارە بکەی، لە ئاکامەکەی تێدەگەی، و ئەم کارە بە پێی [[{{MediaWiki:Policy-url}}|سیاسەتنامە]] ئەنجام دەدەی.",
"actioncomplete": "کردەوە بە ئاکام گەییشت",
"actionfailed": "کردارەکە سەرنەکەوت",
@@ -1536,13 +1545,12 @@
"deletecomment": "ھۆکار:",
"deleteotherreason": "ھۆکاری تر/زیاتر:",
"deletereasonotherlist": "ھۆکاری تر",
- "deletereason-dropdown": "* ھۆکاری سڕینەوە\n** داواکاریی نووسەر\n** تێکدانی مافی لەبەرگرتنەوە\n** خراپکاری",
+ "deletereason-dropdown": "* ھۆکارە باوەکانی سڕینەوە\n** سپام\n** خراپکاری\n** پێشێلکردنی مافی لەبەرگرتنەوە\n** داخوازی دانەر\n** ڕەوانەکەری شکاو",
"delete-edit-reasonlist": "دەستکاری کردنی ھۆکارەکانی سڕینەوە",
"delete-toobig": "ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}.\nبۆ بەرگری لە خراپ‌بوونی چاوەڕوان نەکراوی {{SITENAME}}، سڕینەوەی لاپەڕەی وا بەربەست‌کراوە.",
"delete-warning-toobig": "ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}.\nسڕینەوی ئەوە لە وانەیە کارەکانی بنکەدراوی {{SITENAME}} تووشی کێشە بکات؛\nدوورنواڕانە جێ‌بەجێی بکە.",
"deleting-backlinks-warning": "'''ھۆشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|پەڕەکانی تر]] بەم پەڕەیەی دەتەوێ بیسڕییەوە بەستەر دراوە.",
"rollback": "گەڕاندنەوەی دەستکارییەکان",
- "rollback_short": "گەڕاندنەوە",
"rollbacklink": "گەڕاندنەوە",
"rollbacklinkcount": "گەڕاندنەوەی $1 {{PLURAL:$1|دەستکاری}}",
"rollbacklinkcount-morethan": "گەڕاندنەوەی زۆرتر لە $1 {{PLURAL:$1|دەستکاری}}",
@@ -1601,7 +1609,7 @@
"restriction-move": "گواستنەوە",
"restriction-create": "دروستکردن",
"restriction-upload": "بارکردن",
- "restriction-level-sysop": "تەواو پارێزراو",
+ "restriction-level-sysop": "تەواوپارێزراو",
"restriction-level-autoconfirmed": "نیوەپارێزراو",
"restriction-level-all": "هەر ئاستێک",
"undelete": "پەڕە سڕاوەکان ببینە",
@@ -1670,7 +1678,7 @@
"whatlinkshere": "بەسراوەکان بە ئێرەوە",
"whatlinkshere-title": "ئەو پەڕانەی بەستەریان ھەیە بۆ «$1»",
"whatlinkshere-page": "پەڕە:",
- "linkshere": "ئەم پەڕانە بەستەریان ھەیە بۆ '''[[:$1]]''':",
+ "linkshere": "پەڕەکانی ژێرەوە بەستەر دراون بۆ <strong>[[:$1]]</strong>:",
"nolinkshere": "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]'''.",
"nolinkshere-ns": "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]''' لە بۆشایی‌ناوی هەڵبژێردراو.",
"isredirect": "پەڕەی ڕەوانەکەر",
@@ -1686,7 +1694,7 @@
"whatlinkshere-filters": "پاڵێوکەکان",
"block": "بەربەستنی بەکارھێنەر",
"unblock": "لە بەربەست‌دەرهێنانی بەکارهێنەر",
- "blockip": "بەربەستنی بەکارھێنەر",
+ "blockip": "بەربەستنی {{GENDER:$1|بەکارھێنەر}}",
"blockip-legend": "بەربەست‌کردنی بەکارهێنەر",
"blockiptext": "لەم فۆرمەی خوارەوە دەتوانی بۆ بەربەست‌کردنی دەست‌پێ‌گەیشتنی نووسین لە ناونیشانێکی ئای‌پی تایبەت یا ناوی بەکارهێنەریەک، کەڵک وەرگریت.\nئەمە تەنها دەبێ بۆ بەرگری لە خراپکاری بەکاربێت و ڕێکەوتنی هەبێ دەگەڵ [[{{MediaWiki:Policy-url}}|سیاسەتەکان]].\nلە خوارەوە هۆکارێک بە ڕوونی بنووسە (بۆ نموونە بە وردی ئەو لاپەڕانە و خراپکاری تێدا کراوە وەک، وەک بەڵگە، بنووسە).",
"ipaddressorusername": "ناونیشانی ئایپی یان ناوی‌ بەکارھێنەر:",
@@ -1711,7 +1719,7 @@
"ipb-unblock-addr": "لە بەربەست‌دەرهێنانی $1",
"ipb-unblock": "لە بەربەست‌دەرهێنانی ناوی بەکارهێنەریەک یا ناونیشانێکی ئای‌پی",
"ipb-blocklist": "دیتنی ئەو بەربەستانەی وا هەیە",
- "ipb-blocklist-contribs": "بەشدارییەکانی $1",
+ "ipb-blocklist-contribs": "بەشدارییەکانی {{GENDER:$1|$1}}",
"unblockip": "لە بەربەست‌دەرهێنانی بەکارهێنەر",
"unblockiptext": "بۆ گەڕاندنەوەی دەست‌پی‌گەیشتنی نووسین بۆ ئەو دوایین ئای‌پی یان بەکارهێنەری بەربەست کراوە، لەو فۆرمەی خوارەوە کەڵک وەرگرە.",
"ipusubmit": "لابردنی ئەم بەربەستە",
@@ -1911,17 +1919,15 @@
"import-upload": "بارکردنی دراوەی XML",
"import-token-mismatch": "لەدەستدانی دراوەکانی کۆڕ.\nتکایە دیسان تاقی بکەوە.",
"import-invalid-interwiki": "لە ویکی‌ دیاریکراو ھاوردن ناکرێ.",
- "import-error-edit": "پەڕەی «$1» ھاوردە ناکرێ، چون ناتوانی ئەم پەڕەیە دەستکاری بکەی.",
- "import-error-create": "پەڕەی «$1» ھاوردە ناکرێ، چون ناتوانی ئەم پەڕەیە دروست بکەی.",
- "import-error-interwiki": "پەڕەی «$1» ھاوردە ناکرێ چون ناوەکەی بۆ بەستەری دەرەکیی (interwiki) گیراوەتەوە.",
- "import-error-special": "پەڕەی «$1» ھاوردە ناکرێ چون لە بۆشاییی ناوی نەگونجاودایە.",
+ "import-error-edit": "پەڕەی «$1» ھاوردە نەکرا، چون ناتوانی ئەم پەڕەیە دەستکاری بکەی.",
+ "import-error-create": "پەڕەی «$1» ھاوردە نەکرا، چون ناتوانی ئەم پەڕەیە دروست بکەی.",
+ "import-error-interwiki": "پەڕەی «$1» ھاوردە نەکرا چون ناوەکەی بۆ بەستەری دەرەکیی (interwiki) گیراوەتەوە.",
+ "import-error-special": "پەڕەی «$1» ھاوردە نەکرا چون لە بۆشاییی ناوی نەگونجاودایە.",
"import-error-invalid": "پەڕەی «$1» ھاوردە ناکرێ چون ناوەکەی نادروستە.",
"importlogpage": "لۆگی ھاوردن",
"importlogpagetext": "ھاوردنی پەڕەکان لەگەڵ مێژووی دەستکاری لە ویکییەکانی ترەوە.",
- "import-logentry-upload": "[[$1]]ی بە بارکردنی پەڕگە ھاورد",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|پێداچوونەوە}}",
- "import-logentry-interwiki": "$1ی ناوویکی کرد",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} لە $2",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} ھاوردە کرا",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|پێداچوونەوە}} لە $2 ھاوردە کرا",
"javascripttest": "تاقیکردنەوەی جاڤاسکریپت",
"tooltip-pt-userpage": "پەڕەی بەکارھێنەرییەکەت",
"tooltip-pt-anonuserpage": "پەڕەی بەکارھێنەری بۆ ئای‌پی یەکە کە بەناویەوە خەریکی دەستکاری کردنی",
@@ -2018,7 +2024,6 @@
"pageinfo-robot-policy": "پێرستکردن بە بۆتەکان",
"pageinfo-robot-index": "ڕێ پێدراو",
"pageinfo-robot-noindex": "ڕێ پێنەدراوه",
- "pageinfo-views": "ژمارەی بینینەکان",
"pageinfo-watchers": "ژمارەی چاودێرانی پەڕە",
"pageinfo-few-watchers": "کەمتر لە $1 {{PLURAL:$1|چاودێر}}",
"pageinfo-redirects-name": "ژمارەی ڕەوانەکەرەکان بۆ ئەم پەڕەیە",
@@ -2055,9 +2060,9 @@
"markedaspatrollederror-noautopatrol": "ناتوانی گۆڕانکارییەکانی خۆت وەک پاس دراو نیشان بکەی.",
"markedaspatrollednotify": "ئەم گۆڕانکارییە لەسەر $1 وەک پاس دراو نیشان کرا.",
"markedaspatrollederrornotify": "نیشانکردن وەک پاس دراو سەرکەوتوو نەبوو.",
- "patrol-log-page": "لۆگی پاسدەری",
+ "patrol-log-page": "لۆگی پاسدان",
"patrol-log-header": "ئەمە لۆگێکی پێداچوونەوە پاس دراوەکانە.",
- "log-show-hide-patrol": "لۆگی پاسدەری $1",
+ "log-show-hide-patrol": "لۆگی پاسدان $1",
"deletedrevision": "پێداچوونەوەی کۆنی سڕاوە $1",
"filedeleteerror-short": "هەڵە لە سڕینەوەی پەڕگە: $1",
"filedeleteerror-long": "کاتی سڕینەوەی ئەم پەڕگەی ڕووبەڕووی کێشە بووینەوە:\n\n$1",
@@ -2184,7 +2189,7 @@
"exif-subjectnewscode-value": "$2 ($1)",
"exif-compression-1": "نەپەستێنراو",
"exif-copyrighted-true": "خاوەنی مافی بڵاوکردنەوە",
- "exif-copyrighted-false": "پاوانی گشتی",
+ "exif-copyrighted-false": "ڕەوشی مافی لەبەرگرتنەوە دیاری نەکراوە",
"exif-unknowndate": "ڕێکەوتی نەزانراو",
"exif-orientation-1": "ئاسایی",
"exif-orientation-2": "ئاسۆیی هەڵگێڕدراوەتەوە",
@@ -2300,7 +2305,6 @@
"exif-urgency-normal": "ئاسایی ($1)",
"exif-urgency-low": "کەم ($1)",
"exif-urgency-high": "زۆر ($1)",
- "watchlistall2": "ھەموو",
"namespacesall": "ھەموو",
"monthsall": "ھەموو",
"confirmemail": "بڕواپێکردنی ناونیشانی ئیمەیل",
@@ -2351,6 +2355,7 @@
"autosumm-replace": "«$1»ی لە جێی ناوەرۆک دانا",
"autoredircomment": "ڕەوانە کرا بۆ [[$1]]",
"autosumm-new": "پەڕەی دروست کرد بە «$1»ەوە",
+ "autosumm-newblank": "پەڕەی واڵای دروست کرد",
"size-bytes": "$1 بایت",
"size-kilobytes": "$1 کیلۆبایت",
"size-megabytes": "$1 مێگابایت",
@@ -2403,11 +2408,10 @@
"hebrew-calendar-m7-gen": "نیسان",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|لێدوان]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "تاگی درێژکراوەی نەناسراو \"$1\"",
"duplicate-defaultsort": "'''ئاگاداری''' کلیلی پۆلێنکردنی \"$2'' چووەتە شوێنی کلیلی پۆلێنکردنی \"$1\"",
"version": "وەشان",
"version-extensions": "پێوەکراوە دامەزراوەکان",
- "version-skins": "پێستەکان",
+ "version-skins": "پێستە دامەزراوەکان",
"version-specialpages": "پەڕە تایبەتەکان",
"version-parserhooks": "قولاپە لێککەرەکان",
"version-variables": "گۆڕاوەکان",
@@ -2418,7 +2422,7 @@
"version-parser-function-hooks": "Parser function hooks",
"version-hook-name": "ناوی قولاپ",
"version-hook-subscribedby": "بەشداربوو لە لایەن",
- "version-version": "(وەشانی $1)",
+ "version-version": "($1)",
"version-license": "مۆڵەتنامە",
"version-ext-colheader-version": "وەشان",
"version-ext-colheader-description": "وەسف",
@@ -2528,11 +2532,12 @@
"logentry-upload-upload": "$1 $3ی {{GENDER:$2|بار کرد}}",
"logentry-upload-overwrite": "$1 وەشانێکی نوێی $3ی {{GENDER:$2|بار کرد}}",
"rightsnone": "(ھیچ)",
- "feedback-subject": "بابەت:",
- "feedback-message": "پەیام:",
+ "revdelete-summary": "پوختەی دەستکاری",
"feedback-cancel": "ھەڵیوەشێنەوە",
- "feedback-submit": "تێبینییەکان بنێرە",
"feedback-close": "کرا",
+ "feedback-message": "پەیام:",
+ "feedback-subject": "بابەت:",
+ "feedback-submit": "ناردن",
"searchsuggest-search": "گەڕان",
"searchsuggest-containing": "بە لەبەرگرتنەوەی ...",
"api-error-empty-file": "ئەو پەڕگەیە کە ناردووتە واڵا بوو.",
@@ -2553,5 +2558,37 @@
"duration-decades": "$1 {{PLURAL:$1|دەیە|دەیە}}",
"duration-centuries": "$1 {{PLURAL:$1|سەدە|سەدە}}",
"duration-millennia": "$1 {{PLURAL:$1|ھەزارە|ھەزارە}}",
- "expand_templates_ok": "باشە"
+ "expand_templates_output": "ئاکام",
+ "expand_templates_ok": "باشە",
+ "expand_templates_preview": "پێشبینین",
+ "pagelang-name": "پەڕە",
+ "pagelang-language": "زمان",
+ "pagelang-select-lang": "زمان ھەڵبژێرە",
+ "right-pagelang": "زمانی پەڕە بگۆڕە",
+ "action-pagelang": "زمانی پەڕەکە بگۆڕە",
+ "mediastatistics": "ئامارەکانی میدیا",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایت|$1 بایت}} ($2؛ $3%)",
+ "mediastatistics-table-mimetype": "جۆری MIME",
+ "mediastatistics-table-count": "ژمارەی پەڕگەکان",
+ "mediastatistics-header-unknown": "نەزانراو",
+ "mediastatistics-header-bitmap": "وێنەی Bitmap",
+ "mediastatistics-header-audio": "دەنگ",
+ "mediastatistics-header-video": "ڤیدیۆکان",
+ "json-error-syntax": "ھەڵەی ئیملایی",
+ "special-characters-group-latin": "لاتینی",
+ "special-characters-group-latinextended": "لاتینیی پەرەپێدراو",
+ "special-characters-group-ipa": "ئای پی ئەی",
+ "special-characters-group-symbols": "ھێماکان",
+ "special-characters-group-greek": "یۆنانی",
+ "special-characters-group-cyrillic": "کیریلی",
+ "special-characters-group-arabic": "عەرەبی",
+ "special-characters-group-arabicextended": "عەرەبیی پەرەپێدراو",
+ "special-characters-group-persian": "فارسی",
+ "special-characters-group-hebrew": "عیبری",
+ "special-characters-group-bangla": "بەنگالی",
+ "special-characters-group-telugu": "تێلوگو",
+ "special-characters-group-sinhala": "سینھالا",
+ "special-characters-group-gujarati": "گوجەراتی",
+ "special-characters-group-thai": "تایلەندی",
+ "special-characters-group-khmer": "خمێری"
}
diff --git a/languages/i18n/co.json b/languages/i18n/co.json
index 01fe0c05..69e8949a 100644
--- a/languages/i18n/co.json
+++ b/languages/i18n/co.json
@@ -217,7 +217,6 @@
"loginlanguagelabel": "Lingua: $1",
"retypenew": "Scrive torna a nova parulla secreta:",
"resetpass-submit-cancel": "Cancillà",
- "changeemail-cancel": "Cancillà",
"bold_sample": "Grassettu",
"bold_tip": "Grassettu",
"italic_sample": "Italicu",
@@ -299,7 +298,6 @@
"search-section": "(sezzione $1)",
"search-suggest": "Forse vulii dì",
"searchrelated": "currilati",
- "showingresultsheader": "{{PLURAL:$5|Risultatu '''$1''' di '''$3'''|Risultati '''$1 - $2''' di '''$3'''}} per '''$4'''",
"search-nonefound": "A ricerca ùn hà micca datu risultati.",
"powersearch-ns": "Circà in u spaziu di nomi",
"preferences": "Preferenze",
@@ -391,7 +389,6 @@
"ncategories": "$1 {{PLURAL:$1|categuria|categurie}}",
"nmembers": "$1 {{PLURAL:$1|elementu|elementi}}",
"specialpage-empty": "Issa pagina hè biota.",
- "popularpages": "Pagine populare",
"prefixindex": "Indice di e pagine per lettere iniziale",
"shortpages": "Pagine corte",
"longpages": "Pagine longhe",
@@ -403,7 +400,6 @@
"pager-newer-n": "{{PLURAL:$1|1 più ricente|$1 più ricenti}}",
"pager-older-n": "{{PLURAL:$1|1 menu ricente|$1 menu ricenti}}",
"booksources": "Libri di fonti",
- "booksources-go": "Andà",
"specialloguserlabel": "Utilizatore:",
"speciallogtitlelabel": "Titulu:",
"log": "Righjistramenti",
@@ -433,7 +429,7 @@
"watchlistfor2": "Per $1 ($2)",
"watch": "Suvità",
"unwatch": "Ùn suvità micca",
- "wlshowlast": "Mustrà l'ultime $1 ore $2 ghjorni $3",
+ "wlshowlast": "Mustrà l'ultime $1 ore $2 ghjorni",
"enotif_reset": "Marcà tutte e pagine visitate",
"created": "creatu",
"changed": "cambiatu",
@@ -587,7 +583,6 @@
"exif-scenecapturetype-2": "Ritrattu",
"exif-contrast-0": "Nurmale",
"exif-saturation-0": "Nurmale",
- "watchlistall2": "tutte",
"monthsall": "tutti",
"confirm_purge_button": "D'accordu",
"table_pager_next": "Pagina seguente",
diff --git a/languages/i18n/cps.json b/languages/i18n/cps.json
index a878acd2..4d4784cf 100644
--- a/languages/i18n/cps.json
+++ b/languages/i18n/cps.json
@@ -438,7 +438,6 @@
"search-interwiki-default": "$1 mga resulta:",
"search-interwiki-more": "(mas damu pa)",
"searchall": "tanan",
- "showingresultsheader": "{{PLURAL:$5|Resulta nga '''$1''' sang '''$3'''|Mga resulta nga '''$1 - $2''' sang '''$3'''}} para sa '''$4'''",
"search-nonefound": "Wala sang mga resulta nga nagatugma sa pamangkot/pagpamangkot.",
"powersearch-legend": "Abanse nga pagpangita",
"powersearch-ns": "Magpangita sa mga espasyo sang pangalan:",
@@ -510,7 +509,6 @@
"pager-older-n": "{{PLURAL:$1|mas daan nga 1|mas daan nga $1}}",
"booksources": "Mga makuhaan nga libro",
"booksources-search-legend": "Magpangita sa makuha-an nga mga libro",
- "booksources-go": "Padayon",
"log": "Mga Listahan",
"allpages": "Tanan nga pahina",
"prevpage": "Antes nga pahina ($1)",
@@ -530,7 +528,7 @@
"watchthispage": "Bantayan ang mini nga pahina",
"unwatch": "Di pagbantayan",
"watchlist-details": "{{PLURAL:$1|$1 ka pahina|$1 ka mga pahina}} sa imo listahan sang ginabantayan, wala madala ang mga pahina sang istoryahanay.",
- "wlshowlast": "Ipakita ang nagligad nga $1 ka mga oras $2 ka mga adlaw $3",
+ "wlshowlast": "Ipakita ang nagligad nga $1 ka mga oras $2 ka mga adlaw",
"watchlist-options": "Pililian para sa listahan sang mga ginabantayan",
"watching": "Ginabantayan...",
"unwatching": "Wala ginabantayan...",
@@ -686,7 +684,6 @@
"metadata-expand": "Ipakita ang mga dugang nga detalye",
"metadata-collapse": "Itago ang mga dugang nga detalye",
"metadata-fields": "Ang mga lugar sang EXIF metadata nga nalista sa mini nga mensahe pagadal-on sa mga laragway nga ginapakita sa pahina kung maguba ang tabla sang metadata.\nAng iban ay pagataguon sang default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "tanan",
"namespacesall": "tanan",
"monthsall": "tanan",
"watchlisttools-view": "Tan-awon ang mga kapareho nga ginbag-o",
diff --git a/languages/i18n/crh-cyrl.json b/languages/i18n/crh-cyrl.json
index bc241703..c8828d11 100644
--- a/languages/i18n/crh-cyrl.json
+++ b/languages/i18n/crh-cyrl.json
@@ -44,6 +44,7 @@
"tog-diffonly": "Тенъештирме саифелеринде саифенинъ эсас мундериджесини косьтерме",
"tog-showhiddencats": "Гизли категорияларны косьтер",
"tog-norollbackdiff": "Кери къайтарув япылгъан сонъ версиялар арасындаки фаркъны косьтерме",
+ "tog-prefershttps": "Системагъа кирген сонъ эр вакъыт телюкесиз багълама къулланылсын",
"underline-always": "Даима",
"underline-never": "Асла",
"underline-default": "Браузер сазламалары къулланылсын",
@@ -200,7 +201,7 @@
"pool-errorunknown": "Билинмеген хата",
"aboutsite": "{{SITENAME}} акъкъында",
"aboutpage": "Project:Акъкъында",
- "copyright": "Малюмат $1 бинаэн кечилип ола.",
+ "copyright": "Башкъасы бильдирильмесе, малюмат $1 лицензиясынен бериле.",
"copyrightpage": "{{ns:project}}:Муэллифлик акълары",
"currentevents": "Шимдики вакъиалар",
"currentevents-url": "Project:Агъымдаки вакъиалар",
@@ -293,7 +294,7 @@
"perfcached": "Ашагъыдаки малюмат кэштен алынды ве эскирген ола билир! Кэште энъ чокъ {{PLURAL:$1|1=бир нетидже|$1 нетидже}} сакъланып тура.",
"perfcachedts": "Ашагъыдаки малюмат кэштен алынды, кэшнинъ сонъки янъартылгъан вакъты: $1. Кэште энъ чокъ {{PLURAL:$1|1=бир нетидже|$1 нетидже}} сакъланып тура.",
"querypage-no-updates": "Бу саифени денъиштирмеге шимди изин ёкъ. Бу малюмат аман янъартылмайджакъ.",
- "viewsource": "менба кодуны косьтер",
+ "viewsource": "Менба кодуны косьтер",
"viewsource-title": "$1 саифесининъ менба коду",
"actionthrottled": "Арекет токъталды",
"actionthrottledtext": "Спамгъа къаршы куреш себебинден бу арекетни аз вакъыт ичинде чокъ кере текрарлап оламайсынъыз. Мумкюн олгъан къарардан зияде арекет яптынъыз. Бир къач дакъкъадан сонъ текрарлап бакъынъыз.",
@@ -308,12 +309,25 @@
"virus-badscanner": "Янълыш сазлама. Билинмеген вирус сканери: ''$1''",
"virus-scanfailed": "скан этюв мувафакъиетсиз (код $1)",
"virus-unknownscanner": "билинмеген антивирус:",
- "logouttext": "'''Отурымны къапаттынъыз.'''\n\nШимди {{SITENAME}} сайтыны аноним оларакъ къулланып оласынъыз, я да янъыдан <span class='plainlinks'>[$1 отурым ачып]</span> оласынъыз (истер айны къулланыджы адынен, истер башкъа бир къулланыджы адынен). Web браузеринъиз кэшини темизлегендже базы саифелер санки аля даа отурымынъыз ачыкъ экен киби корюнип олур.",
+ "logouttext": "<strong>Системадан чыкътынъыз.</strong>\n\nБраузеринъиз кешини темизлегендже базы саифелер системадан аля даа чыкъмагъансынъыз киби корюнип олур.",
+ "welcomeuser": "Хош кельдинъиз, $1!",
+ "welcomecreation-msg": "Эсап язынъыз яратылды.\nИстесенъиз, [[Special:Preferences|{{SITENAME}} сазламаларынъызны]] денъиштире билесинъиз.",
"yourname": "Къулланыджы адынъыз",
+ "userlogin-yourname": "Къулланынджы ады",
+ "userlogin-yourname-ph": "Къулланыджы адынъызны язынъыз",
+ "createacct-another-username-ph": "Къулланыджы адынъызны язынъыз",
"yourpassword": "Паролинъиз",
+ "userlogin-yourpassword": "Пароль",
+ "userlogin-yourpassword-ph": "Паролинъизни язынъыз",
+ "createacct-yourpassword-ph": "Парольни язынъыз",
"yourpasswordagain": "Парольни бир даа язынъыз:",
+ "createacct-yourpasswordagain": "Парольни тасдыкълав",
+ "createacct-yourpasswordagain-ph": "Парольни бир даа язынъыз",
"remembermypassword": "Киришимни бу компьютерде хатырла (энъ чокъ $1 {{PLURAL:$1|1=кунь|кунь}} ичюн)",
+ "userlogin-remembermypassword": "Системада къалайым",
+ "userlogin-signwithsecure": "Телюкесиз багълама къулланылсын",
"yourdomainname": "Домен адынъыз",
+ "password-change-forbidden": "Бу викиде паролинъизни денъиштирип оламайсынъыз",
"externaldberror": "Сайткъа киргенде бир хата олды. Бу тыш эсабынъызны денъиштирмек акъкъынъыз олмагъанындан себеп мейдангъа келип ола.",
"login": "Кириш",
"nav-login-createaccount": "Кириш / Къайд олув",
@@ -321,18 +335,36 @@
"userloginnocreate": "Кириш",
"logout": "Чыкъыш",
"userlogout": "Чыкъыш",
- "notloggedin": "Отурым ачмадынъыз.",
+ "notloggedin": "Системагъа кирмединъиз.",
+ "userlogin-noaccount": "Аккаунтынъыз ёкъмы?",
+ "userlogin-joinproject": "{{SITENAME}} лейхасына къошулынъыз",
"nologin": "Даа эсап ачмадынъызмы? '''$1'''.",
"nologinlink": "Къайд ол",
- "createaccount": "Янъы эсап ач",
- "gotaccount": "Даа эвель эсап ачкъан эдинъизми? '''$1'''.",
- "gotaccountlink": "Отурым ачынъыз",
+ "createaccount": "Къайд олув",
+ "gotaccount": "Даа эвель сайтта къайд олгъан эдинъизми? '''$1'''.",
+ "gotaccountlink": "Системагъа киринъиз",
"userlogin-resetlink": "Кириш малюматыны унуттынъызмы?",
- "createaccountmail": "e-mail вастасынен",
+ "createacct-emailrequired": "E-mail adresi",
+ "createacct-emailoptional": "E-mail адреси (меджбурий дегиль)",
+ "createacct-email-ph": "E-mail адресинъизни язынъыз",
+ "createacct-another-email-ph": "E-mail адресинъизни язынъыз",
+ "createaccountmail": "Автоматик оларакъ мейдангъа кетирильген мувакъкъат бир пароль къуллана билир ве бу парольни бильдирильген e-mail адресине ёллай билирсинъиз",
+ "createacct-realname": "Акъикъий адынъыз (меджбурий дегиль)",
"createaccountreason": "Себеп:",
+ "createacct-reason": "Себеп",
+ "createacct-reason-ph": "Башкъа бир эсап язысы неден себеп яратасынъыз",
+ "createacct-captcha": "Телюкесизлик контроли",
+ "createacct-imgcaptcha-ph": "Юкъарыда корьген метнинъизни язынъыз",
+ "createacct-submit": "Эсап язынъызны яратынъыз",
+ "createacct-another-submit": "Башкъа бир эсап язысы яратынъыз",
+ "createacct-benefit-heading": "{{SITENAME}} сизинъ киби адамлар тарафындан языла.",
+ "createacct-benefit-body1": "денъиштирме",
+ "createacct-benefit-body2": "{{PLURAL:$1|саифе|саифе}}",
+ "createacct-benefit-body3": "сонъки вакъытларда {{PLURAL:$1|иссесини къошкъан къулланыджы|иссесини къошкъан къулланыджы}}",
"badretype": "Кирсеткен пароллеринъиз айны дегиль.",
"userexists": "Кирсеткен къулланыджы адынъыз энди къулланыла.\nЛютфен, башкъа бир къулланыджы ады сайланъыз.",
"loginerror": "Отурым ачма хатасы",
+ "createacct-error": "Эсап язысыны яратув хатасы",
"createaccounterror": "Эсап яратылып оламай: $1",
"nocookiesnew": "Къулланыджы эсабы ачылгъан, факъат танытылмагъан. {{SITENAME}} къулланыджыларны танытмакъ ичюн «cookies»ни къуллана. Сизде бу функция къапалы вазиеттедир. «Cookies» функциясыны ишлетип текрар янъы адынъыз ве паролинъизнен тырышып бакъыныз.",
"nocookieslogin": "{{SITENAME}} «cookies»ни къуллана. Сизде бу функция къапалы вазиеттедир. «Cookies» функциясыны ишлетип текрар тырышып бакъынъыз.",
@@ -348,7 +380,7 @@
"passwordtooshort": "Паролинъизде энъ аз {{PLURAL:$1|1=1|$1}} ишарет олмалы.",
"password-name-match": "Паролинъиз къулланыджы адынъыздан фаркълы олмалы.",
"password-login-forbidden": "Бу къулланыджы ады ве парольни къулланмакъ ясакътыр.",
- "mailmypassword": "Янъы пароль йибер",
+ "mailmypassword": "Парольни сыфырла",
"passwordremindertitle": "{{grammar:genitive|{{SITENAME}}}} къулланыджынынъ пароль хатырлатувы",
"passwordremindertext": "Бирев (бельки де бу сизсинъиз, $1 IP адресинден) {{SITENAME}} сайты ичюн ($4) янъы къулланыджы паролини истеди.\n$2 къулланыджысына вакътынджа <code>$3</code> пароли яратылды. Эгер бу керчектен де сизинъ истегинъиз олгъан олса, отурым ачып янъы бир пароль яратманъыз керектир. Мувакъкъат паролинъизнинъ муддети {{PLURAL:$5|1=1 кунь|$5 кунь}} ичинде доладжакъ.\n\nЭгер де янъы пароль талап этмеген олсанъыз я да эски паролинъизни хатырлап энди оны денъиштирмеге истемесенъиз, бу мектюпни дикъкъаткъа алмайып эски паролинъизни къулланмагъа девам этип оласынъыз.",
"noemail": "$1 адлы къулланыджы ичюн e-mail бильдирильмеди.",
@@ -371,6 +403,10 @@
"login-throttled": "Якъын заманда пек чокъ кере кирмеге тырыштынъыз.\nЛютфен, къайта кирмезден эвель бираз бекленъиз.",
"loginlanguagelabel": "Тиль: $1",
"suspicious-userlogout": "Чыкъыш истегенинъиз ред этильди, чюнки бозукъ бир браузер я да кэшлейиджи прокси тарафындан ёллангъан киби корюне.",
+ "pt-login": "Кириш",
+ "pt-login-button": "Кириш",
+ "pt-createaccount": "Къайд олув",
+ "pt-userlogout": "Чыкъыш",
"changepassword": "Пароль денъиштир",
"resetpass_announce": "Мувакъкъат код вастасынен кирдинъиз. Киришни тамамламакъ ичюн янъы парольни мында къоюнъыз:",
"resetpass_header": "Эсапнынъ паролини денъиштир",
@@ -452,7 +488,8 @@
"session_fail_preview": "''' Сервер сиз япкъан денъиштирмелерни сессия идентификаторы джоюлгъаны себебинден сакълап оламады.\nБу вакътынджа проблемадыр. Лютфен, текрар сакълап бакъынъыз.\nБундан да сонъ олып чыкъмаса, малюмат локаль файлгъа сакъланъыз да браузеринъизни бир къапатып ачынъыз.'''",
"session_fail_preview_html": "'''Афу этинъиз! HTML сессиянынъ малюматлары гъайып олгъаны себебинден сизинъ денъиштирмелеринъизни къабул этмеге имкян ёкътыр.'''",
"token_suffix_mismatch": "'''Сизинъ программанъызнынъ озь тюрлендирюв пенджересинде пунктуация ишаретлерини догъру ишлемегени ичюн япкъан денъиштирмелеринъиз къабул олунмады. Денъиштирмелер саифе метнининъ корюниши бозулмасын деп лягъу этильди.\nБунынъ киби проблемалар хаталы аноним web-проксилер къулланувдан чыкъып ола.'''",
- "editing": "\"$1\" саифесини денъиштиреятасыз",
+ "editing": "«$1» саифесини денъиштиреятасыз",
+ "creating": "«$1» саифесини яратув",
"editingsection": "\"$1\" саифесинде болюк денъиштиреятасыз",
"editingcomment": "$1 саифесини денъиштиреятасыз (янъы болюк)",
"editconflict": "Денъиштирмелер чатышмасы: $1",
@@ -490,6 +527,8 @@
"edit-gone-missing": "Саифе янъартылып оламай.\nБельки о ёкъ этильгендир.",
"edit-conflict": "Денъиштирмелер чатышмасы.",
"edit-no-change": "Япкъан денъиштирменъиз сакъланмагъан, чюнки метинде бир тюрлю денъиштирильме япылмады.",
+ "postedit-confirmation-created": "Саифе яратылды.",
+ "postedit-confirmation-saved": "Япкъан денъиштирменъиз сакъланды.",
"edit-already-exists": "Янъы саифени яратмакъ мумкюн дегиль.\nО энди бар.",
"undo-success": "Денъиштирме лягъу этилип ола. Лютфен, мына бу денъиштирмелерни япмагъа истегенинъизден эмин олмакъ ичюн версиялар тенъештирилювини козьден кечирип денъиштирмелерни сакъламакъ ичюн «Саифени сакъла» дёгмесине басынъыз.",
"undo-failure": "Арадаки денъиштирмелер бир-бирине келишикли олмагъаны ичюн денъиштирме лягъу этилип оламай.",
@@ -500,7 +539,7 @@
"viewpagelogs": "Бу саифенинъ журналларыны косьтер",
"nohistory": "Бу саифенинъ кечмиш версиясы ёкъ.",
"currentrev": "Шимдики версия",
- "currentrev-asof": "$1 тарихында сонъки кере денъиштирильген саифенинъ шимдики алы",
+ "currentrev-asof": "$1 тарихындан башлап саифенинъ шимдики алы",
"revisionasof": "Саифенинъ $1 тарихындаки алы",
"revision-info": "Саифенинъ $2 тарафындан язылгъан $1 тарихындаки алы",
"previousrevision": "← Эвельки алы",
@@ -585,6 +624,7 @@
"preferences": "Сазламалар",
"mypreferences": "Сазламалар",
"prefs-edits": "Денъиштирмелер сайысы:",
+ "prefsnologintext2": "Сазламаларынъызны денъиштирмек ичюн лютфен системагъа киринъиз.",
"prefs-skin": "Ресимлеме",
"skin-preview": "Бакъып чыкъув",
"datedefault": "Стандарт",
@@ -708,8 +748,10 @@
"recentchanges-label-minor": "Бу, кичик бир денъиштирме",
"recentchanges-label-bot": "Бу бир ботнынъ япкъан денъиштирмеси",
"recentchanges-label-unpatrolled": "Бу денъиштирме аля даа тешкерильмеген",
+ "recentchanges-label-plusminus": "Байт эсабынен саифе буюклигининъ денъиштирильмеси",
+ "recentchanges-legend-heading": "'''Ишаретлер:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|янъы саифелер джедвелине]] де бакъынъыз)",
- "rcnotefrom": "'''$2''' тарихындан итибарен япылгъан денъиштирмелер ашагъыдадыр (энъ чокъ '''$1''' дане саифе косьтериле).",
+ "rcnotefrom": "<strong>$3, $4</strong> тарихындан башлап япылгъан {{PLURAL:$5|денъиштирме|денъиштирмелер}} ашагъыдадыр (энъ чокъ <strong>$1</strong> дане саифе косьтериле).",
"rclistfrom": "$3 $2 тарихындан берли япылгъан денъиштирмелерни косьтер",
"rcshowhideminor": "кичик денъиштирмелерни $1",
"rcshowhideminor-show": "косьтер",
@@ -717,7 +759,7 @@
"rcshowhidebots": "ботларны $1",
"rcshowhidebots-show": "косьтер",
"rcshowhidebots-hide": "гизле",
- "rcshowhideliu": "Къайдлы къулланыджыларны $1",
+ "rcshowhideliu": "къайдлы къулланыджыларны $1",
"rcshowhideliu-show": "косьтер",
"rcshowhideliu-hide": "гизле",
"rcshowhideanons": "аноним къулланыджыларны $1",
@@ -740,6 +782,7 @@
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|1=къулланыджы|къулланыджы}} козете]",
"rc_categories": "Тек категориялардан («|» иле айырыла)",
"rc_categories_any": "Эр анги",
+ "rc-change-size-new": "Денъиштирильген сонъ $1 {{PLURAL:$1|байт|байт}}",
"newsectionsummary": "/* $1 */ янъы болюк",
"rc-enhanced-expand": "Тафсилятыны косьтер",
"rc-enhanced-hide": "Тафсилятыны гизле",
@@ -755,7 +798,7 @@
"reuploaddesc": "Юклеме формасына кери къайт.",
"upload-tryagain": "Денъиштирильген файл тарифини ёлла",
"uploadnologin": "Отурым ачмадынъыз",
- "uploadnologintext": "Файл юклеп олмакъ ичюн [[Special:UserLogin|отурым ачмакъ]] керексинъиз.",
+ "uploadnologintext": "Файл юклеп олмакъ ичюн лютфен $1.",
"upload_directory_missing": "Юклемелер ичюн директория ($1) мевджут дегиль ве веб-сервер тарафындан япылып оламай.",
"upload_directory_read_only": "Web серверининъ ($1) джузьданына файллар сакъламагъа акълары ёкътыр.",
"uploaderror": "Юклеме хатасы",
@@ -873,13 +916,11 @@
"statistics": "Статистика",
"statistics-header-pages": "Саифе статистикасы",
"statistics-header-edits": "Денъиштирюв статистикасы",
- "statistics-header-views": "Козьден кечирме статистикасы",
"statistics-header-users": "Къулланыджы статистикасы",
"statistics-header-hooks": "Дигер статистика",
- "statistics-mostpopular": "Энъ сыкъ бакъылгъан саифелер",
"doubleredirects": "Ёлламагъа олгъан ёлламалар",
"doubleredirectstext": "Бу саифеде дигер ёллама саифелерине ёлланма олгъан саифелери косьтериле.\nЭр сатырда биринджи ве экинджи ёлламагъа багълантылар да, экинджи ёлламанынъ макъсат саифеси (адетиндже о биринджи ёлламанынъ керекли макъсады ола) да бар.\n<del>Устю сызылгъан</del> меселелер энди чезильген.",
- "double-redirect-fixed-move": "[[$1]] авуштырылды, шимди [[$2]] саифесине ёллап тура.",
+ "double-redirect-fixed-move": "[[$1]] авуштырылды. О, автоматик оларакъ янъартылып шимди [[$2]] саифесине ёнетип тура.",
"brokenredirects": "Бар олмагъан саифеге япылгъан ёлламалар",
"brokenredirectstext": "Ашагъыдаки ёлламалар бар олмагъан саифелерге багъланты берелер:",
"brokenredirects-edit": "денъиштир",
@@ -903,7 +944,6 @@
"uncategorizedtemplates": "Эр анги бир категорияда олмагъан шаблонлар",
"unusedcategories": "Къулланылмагъан категориялар",
"unusedimages": "Къулланылмагъан ресимлер",
- "popularpages": "Популяр саифелер",
"wantedcategories": "Истенильген категориялар",
"wantedpages": "Истенильген саифелер",
"wantedfiles": "Истенильген файллар",
@@ -932,7 +972,7 @@
"pager-older-n": "{{PLURAL:$1|1=даа эски 1|даа эски $1}}",
"booksources": "Китаплар менбасы",
"booksources-search-legend": "Китаплар менбасыны къыдырув",
- "booksources-go": "Къыдыр",
+ "booksources-search": "Къыдыр",
"specialloguserlabel": "Къулланыджы:",
"speciallogtitlelabel": "Серлева:",
"log": "Журналлар",
@@ -980,7 +1020,8 @@
"emailsenttext": "Сизинъ e-mail беянатынъыз ёлланды",
"emailuserfooter": "Бу мектюп $1 тарафындан $2 къулланыджысына, {{SITENAME}} сайтындаки \"Къулланыджыгъа e-mail ёлла\" функциясынен ёллангъан.",
"watchlist": "Козетюв джедвели",
- "mywatchlist": "Козетюв джедвелим",
+ "mywatchlist": "Козетюв джедвели",
+ "watchlistfor2": "$1 ичюн $2",
"nowatchlist": "Сизинъ козетюв джедвелинъиз боштыр.",
"watchlistanontext": "Козетюв джедвелини бакъмакъ я да денъиштирмек ичюн $1 борджлусынъыз.",
"watchnologin": "Отурым ачмакъ керек",
@@ -995,12 +1036,14 @@
"wlheader-enotif": "E-mail иле хабер берюв ачылды.",
"wlheader-showupdated": "Сонъки зияретинъизден сонъ денъиштирильген саифелер '''къалын арифлернен''' косьтерильди.",
"wlnote": "Ашагъыда саат $3, $4 ичюн сонъки {{PLURAL:$2|1=саат|'''$2''' саат}} ичинде япылгъан сонъки {{PLURAL:$1|1=денъиштирме|'''$1''' денъиштирме}} косьтериле.",
- "wlshowlast": "Сонъки $1 саат ичюн, $2 кунь ичюн я да $3 косьтер",
+ "wlshowlast": "Сонъки $1 саат ичюн, $2 кунь ичюн я да косьтер",
"watchlist-options": "Козетюв джедвели сазламалары",
"watching": "Козетюв джедвелине кирсетильмекте...",
"unwatching": "Козетюв джедвелинден ёкъ этильмекте...",
"enotif_reset": "Джумле саифелерни бакъылгъан оларакъ ишаретле",
"enotif_impersonal_salutation": "{{SITENAME}} къулланыджысы",
+ "enotif_subject_moved": "{{SITENAME}} лейхасынынъ $1 адлы саифесининъ ады, $2 тарафындан {{GENDER:$2|денъиштирильди}}.",
+ "enotif_body_intro_moved": "{{SITENAME}} лейхасынынъ $1 адлы саифесининъ ады $PAGEEDITDATE тарихында $2 тарафындан {{GENDER:$2|денъиштирильди}}. Шимдики алыны мында коре билесинъиз: $3.",
"enotif_lastvisited": "Сонъки зияретинъизден берли япылгъан денъиштирмелерни корьмек ичюн $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Бильдирюв сазламаларыны денъиштирмек ичюн:\n{{canonicalurl:{{#special:Preferences}}}}\n\nКозетюв джедвели сазламаларыны денъиштирмек ичюн:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nСаифени козетюв джедвелинден чыкъармакъ ичюн:\n$UNWATCHURL\n\nЯрдым ве теклифлер ичюн:\n$HELPPAGE",
@@ -1026,7 +1069,6 @@
"deleteotherreason": "Дигер/илявели себеп:",
"deletereasonotherlist": "Дигер себеп",
"rollback": "Денъиштирмелерни кери ал",
- "rollback_short": "кери ал",
"rollbacklink": "эски алына кетир",
"rollbackfailed": "кери алув мувафакъиетсиз",
"cantrollback": "Денъиштирмелер кери алынамай, саифени сонъки денъиштирген киши онынъ тек бир муэллифидир",
@@ -1037,7 +1079,7 @@
"protectedarticle": "\"[[$1]]\" къорчалав алтына алынды",
"modifiedarticleprotection": "«[[$1]]» ичюн къорчалав севиеси денъиштирильди",
"unprotectedarticle": "\"[[$1]]\" саифесинден къорчалав чыкъарлыды",
- "prot_1movedto2": "\"[[$1]]\" саифесининъ ады \"[[$2]]\" оларакъ денъиштирильди",
+ "prot_1movedto2": "[[$1]] саифесининъ ады [[$2]] деп денъиштирильди",
"protect-legend": "Къорчалавны тасдыкъла",
"protectcomment": "Себеп:",
"protectexpiry": "Битиш тарихы:",
@@ -1072,8 +1114,10 @@
"undeletecomment": "Себеп:",
"undeletedrevisions": "Топлам {{PLURAL:$1|1=1 къайд|$1 къайд}} кери кетирильди.",
"undelete-header": "Кеченлерде ёкъ этильген саифелерни корьмек ичюн [[Special:Log/delete|ёкъ этюв журналына]] бакъынъыз.",
+ "undelete-search-submit": "Къыдыр",
"namespace": "Исим фезасы:",
"invert": "Сайлангъан тышындакилерни сайла",
+ "namespace_association": "Багълы исим фезасы",
"blanknamespace": "(Эсас)",
"contributions": "{{GENDER:$1|Къулланыджынынъ}} исселери",
"contributions-title": "$1 къулланыджысынынъ исселери",
@@ -1090,6 +1134,8 @@
"sp-contributions-userrights": "къулланыджы акъларыны идаре этюв",
"sp-contributions-search": "Исселерни къыдырув",
"sp-contributions-username": "IP адреси я да къулланыджы ады:",
+ "sp-contributions-toponly": "Тек сонъки версиясы олгъан денъиштирмелерни косьтер",
+ "sp-contributions-newonly": "Тек янъы саифе яраткъан денъиштирмелерни косьтер",
"sp-contributions-submit": "Къыдыр",
"whatlinkshere": "Бу саифеге багълантылар",
"whatlinkshere-title": "$1 саифесине багъланты олгъан саифелер",
@@ -1122,6 +1168,7 @@
"unblockip": "Къулланыджынынъ блок этмесини чыкъар",
"ipusubmit": "Бу блок этмени чыкъар",
"ipblocklist": "Блок этильген къулланыджылар ве IP адреслери",
+ "ipblocklist-submit": "Къыдыр",
"infiniteblock": "муддетсиз",
"expiringblock": "$1 $2 тарихында битеджек",
"blocklink": "блок эт",
@@ -1142,9 +1189,10 @@
"lockbtn": "Малюмат базасы килитли",
"move-page": "$1 саифесининъ адыны денъиштиреятасыз",
"move-page-legend": "Саифенинъ адыны денъиштирюв",
- "movepagetext": "Ашагъыдаки форма къулланылып саифенинъ ады денъиштирилир. Бунынънен берабер денъиштирмелер журналы да янъы адгъа авуштырылыр.\nЭски ады янъы адына ёллама олур. Эски серлевагъа ёллама саифелерни автоматик оларакъ янъартып оласынъыз. Бу арекетни автоматик япмагъа истемесенъиз, бутюн [[Special:DoubleRedirects|чифт]] ве [[Special:BrokenRedirects|йыртыкъ]] ёллама саифелерини озюнъиз тюзетмеге меджбур олурсынъыз. Багълантылар эндиден берли догъру чалышмасындан эмин олмалысынъыз.\n\nЯнъы адда бир саифе энди бар олса, ад денъиштирилюви '''япылмайджакъ''', анджакъ бар олгъан саифе ёллама я да бош олса ад денъиштирилюви мумкюн оладжакъ. Бу демек ки, саифенинъ адыны янълыштан денъиштирген олсанъыз деминки адыны кери къайтарып оласынъыз, амма бар олгъан саифени тесадюфен ёкъ этамайсынъыз.\n\n'''ТЕНБИ!'''\nАд денъиштирилюви популяр саифелер ичюн буюк ве бекленмеген денъишмелерге себеп ола билир. Лютфен, денъиштирме япмаздан эвель ола биледжеклерни козь огюне алынъыз.",
+ "movepagetext": "Ашагъыдаки форма къулланылып саифенинъ ады денъиштирилир. Бунынънен берабер денъиштирмелер журналы да янъы адгъа авуштырылыр.\nЭски ады янъы адына ёнетме олур. Эски серлевагъа ёнетип тургъан саифелерни автоматик оларакъ янъартып оласынъыз. Бу арекетни автоматик япмагъа истемесенъиз, бутюн [[Special:DoubleRedirects|чифт]] ве [[Special:BrokenRedirects|йыртыкъ]] ёнетме саифелерини озюнъиз тешкермеге меджбур олурсынъыз. Багълантылар эндиден берли догъру чалышмасындан эмин олмалысынъыз.\n\nЯнъы адда бир саифе энди бар олса, ад денъиштирилюви <strong>япылмайджакъ</strong>, анджакъ бар олгъан саифе ёнетме я да бош олса ад денъиштирилюви мумкюн оладжакъ. Бу демек ки, саифенинъ адыны янълыштан денъиштирген олсанъыз деминки адыны кери къайтарып оласынъыз, амма бар олгъан саифени тесадюфен ёкъ этамайсынъыз.\n\n<strong>ТЕНБИ!</strong>\nАд денъиштирилюви популяр саифелер ичюн буюк ве бекленмеген денъишмелерге себеп ола билир. Лютфен, денъиштирме япмаздан эвель ола биледжеклерни козь огюне алынъыз.",
"movepagetalktext": "Къошулгъан музакере саифесининъ де (бар олса)\nады автоматик тарзда денъиштириледжек. '''Мустесналар:'''\n\n* Айны бу адда бош олмагъан бир музакере саифеси энди бар;\n* Ашагъыдаки бошлукъкъа ишарет къоймадынъыз.\n\nБойле алларда, керек олса, саифелерни къолнен ташымагъа я да бирлештирмеге меджбур олурсынъыз.",
"movearticle": "Эски ад",
+ "movecategorypage-warning": "<strong>Ихтар:</strong> Бир категория саифесининъ адыны денъиштирмек узьресинъиз. Лютфен, ялынъыз категория саифесининъ кочюриледжегини ве эски категорияда ер алгъан саифелернинъ янъы категориягъа авотматик оларакъ <em>авуштырылмайджагъыны</em> унутманъыз.",
"movenologintext": "Саифенинъ адыны денъиштирип олмакъ ичюн [[Special:UserLogin|отурым ачынъыз]].",
"movenotallowed": "Саифелер адларыны денъиштирмеге изининъиз ёкъ.",
"newtitle": "Янъы ад",
@@ -1160,7 +1208,7 @@
"move-subpages": "Алт саифелернинъ адларыны да денъиштир ($1 саифеге къадар)",
"move-talk-subpages": "Muzakere saifesi alt saifeleriniñ adlarını da deñiştir ($1 saifege qadar)",
"movepage-page-exists": "$1 саифеси энди бар, ве автоматик оларакъ янъыдан язылып оламаз.",
- "movepage-page-moved": "$1 саифесининъ ады $2 оларакъ денъиштирильди.",
+ "movepage-page-moved": "$1 саифесининъ ады $2 деп денъиштирильди.",
"movepage-page-unmoved": "$1 саифесининъ ады $2 оларакъ денъиштирилип оламай.",
"movelogpage": "Ад денъиштирильмелери журналы",
"movelogpagetext": "Ашагъыда булунгъан джедвель ады денъиштирильген саифелерни косьтере",
@@ -1183,6 +1231,8 @@
"allmessagesdefault": "Оригиналь метин",
"allmessagescurrent": "Шимди къулланылгъан метин",
"allmessagestext": "Ишбу джедвель MediaWiki-де мевджут олгъан бутюн система беянатларынынъ джедвелидир.\nMediaWiki интерфейсининъ чешит тиллерге терджиме этювде иштирак этмеге истесенъиз [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] ве [//translatewiki.net translatewiki.net] саифелерине зиярет этинъиз.",
+ "allmessages-filter-legend": "Сюзгюч",
+ "allmessages-language": "Тиль:",
"thumbnail-more": "Буют",
"filemissing": "Файл тапылмады",
"thumbnail_error": "Кичик ресим (thumbnail) яратылгъанда бир хата чыкъты: $1",
@@ -1198,7 +1248,7 @@
"tooltip-pt-watchlist": "Козетювге алгъан саифелеринъиз",
"tooltip-pt-mycontris": "Къошкъан исселеринъизнинъ джедвели",
"tooltip-pt-login": "Отурым ачманъыз тевсие олуныр амма меджбур дегильсинъиз.",
- "tooltip-pt-logout": "Системадан чыкъув",
+ "tooltip-pt-logout": "Чыкъыш",
"tooltip-ca-talk": "Саифедеки малюматнен багълы музакере",
"tooltip-ca-edit": "Бу саифени денъиштирип оласынъыз. Сакъламаздан эвель бакъып чыкъмагъа унутманъыз.",
"tooltip-ca-addsection": "Янъы болюкни ачув",
@@ -1268,6 +1318,7 @@
"spambot_username": "Спамдан темизлев",
"spam_reverting": "$1 сайтына багълантысы олмагъан сонъки версиягъа кери кетирюв",
"spam_blanking": "Бар олгъан версияларда $1 сайтына багълантылар бар, темизлев",
+ "pageinfo-language": "Саифе ичиндекисининъ тили",
"patrol-log-page": "Тешкерюв журналы",
"log-show-hide-patrol": "Тешкерюв журналыны $1",
"deletedrevision": "$1 сайылы эски версия ёкъ этильди.",
@@ -1328,6 +1379,7 @@
"exif-gpsaltitude": "Юксеклик",
"exif-gpstimestamp": "GPS сааты (атом сааты)",
"exif-gpssatellites": "Ольчемек ичюн къуллангъаны спутниклер",
+ "exif-languagecode": "Тиль",
"exif-compression-1": "Сыкъыштырылмагъан",
"exif-orientation-3": "180° айландырылгъан",
"exif-exposureprogram-1": "Эльнен",
@@ -1347,7 +1399,6 @@
"exif-scenecapturetype-3": "Гедже съёмкасы",
"exif-subjectdistancerange-0": "Билинмей",
"exif-subjectdistancerange-1": "Макро",
- "watchlistall2": "эписини",
"namespacesall": "Эписи",
"monthsall": "Эписи",
"confirmemail": "E-mail адресини тасдыкъла",
@@ -1420,7 +1471,7 @@
"specialpages": "Махсус саифелер",
"specialpages-group-maintenance": "Бакъым эсабатлары",
"specialpages-group-other": "Дигер махсус саифелер",
- "specialpages-group-login": "Кириш / Къайд олув",
+ "specialpages-group-login": "Кириш / къайд олув",
"specialpages-group-changes": "Сонъки денъишикликлер ве журналлар",
"specialpages-group-media": "Файл эсабатлары ве юклеме",
"specialpages-group-users": "Къулланыджылар ве акълары",
@@ -1432,6 +1483,16 @@
"specialpages-group-spam": "Спамгъа къаршы алетлер",
"blankpage": "Бош саифе",
"intentionallyblankpage": "Бу саифе аселет бош къалдырылгъан",
+ "tag-filter": "[[Special:Tags|Бельги]] сюзгючи:",
+ "tag-filter-submit": "Сюз",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Бельги|Бельгилер}}]]: $2)",
+ "tags-title": "Бельгилер",
"htmlform-reset": "Денъишикликлерни кери ал",
- "searchsuggest-containing": "ичинде бу олгъан..."
+ "logentry-move-move": "$1 адлы къуланыджы $3 саифесининъ адыны $4 деп {{GENDER:$2|денъиштирильди}}.",
+ "logentry-move-move-noredirect": "$1 адлы къулланыджы $3 саифесининъ адыны ёнетме къалдырмайып $4 деп {{GENDER:$2|денъиштирди}}",
+ "logentry-move-move_redir": "$1, $3 саифесининъ адыны ёнетме узеринден $4 деп {{GENDER:$2|денъиштирди}}",
+ "logentry-move-move_redir-noredirect": "$1 адлы къулланыджы $3 саифесининъ адыны ёнетме узеринден янъы бир ёнетме къалдырмайып $4 деп {{GENDER:$2|денъиштирди}}",
+ "searchsuggest-search": "Къыдыр",
+ "searchsuggest-containing": "ичинде бу олгъан...",
+ "pagelang-language": "Тиль"
}
diff --git a/languages/i18n/crh-latn.json b/languages/i18n/crh-latn.json
index 1e100573..47e30ddf 100644
--- a/languages/i18n/crh-latn.json
+++ b/languages/i18n/crh-latn.json
@@ -43,6 +43,7 @@
"tog-diffonly": "Teñeştirme saifelerinde saifeniñ esas mündericesini kösterme",
"tog-showhiddencats": "Gizli kategoriyalarnı köster",
"tog-norollbackdiff": "Keri qaytaruv yapılğan soñ versiyalar arasındaki farqnı kösterme",
+ "tog-prefershttps": "Sistemağa kirgen soñ er vaqıt telükesiz bağlama qullanılsın",
"underline-always": "Daima",
"underline-never": "Asla",
"underline-default": "Brauzer sazlamaları qullanılsın",
@@ -200,7 +201,7 @@
"pool-errorunknown": "Bilinmegen hata",
"aboutsite": "{{SITENAME}} aqqında",
"aboutpage": "Project:Aqqında",
- "copyright": "Malümat $1 binaen keçilip ola.",
+ "copyright": "Başqası bildirilmese, malümat $1 litsenziyasınen berile.",
"copyrightpage": "{{ns:project}}:Müelliflik aqları",
"currentevents": "Şimdiki vaqialar",
"currentevents-url": "Project:Ağımdaki vaqialar",
@@ -293,7 +294,7 @@
"perfcached": "Aşağıdaki malümat keşten alındı ve eskirgen ola bilir! Keşte eñ çoq {{PLURAL:$1|bir netice|$1 netice}} saqlanıp tura.",
"perfcachedts": "Aşağıdaki malümat keşten alındı, keşniñ soñki yañartılğan vaqtı: $1. Keşte eñ çoq {{PLURAL:$1|bir netice|$1 netice}} saqlanıp tura.",
"querypage-no-updates": "Bu saifeni deñiştirmege şimdi izin yoq. Bu malümat aman yañartılmaycaq.",
- "viewsource": "menba kodunı köster",
+ "viewsource": "Menba kodunı köster",
"viewsource-title": "$1 saifesiniñ menba kodu",
"actionthrottled": "Areket toqtaldı",
"actionthrottledtext": "Spamğa qarşı küreş sebebinden bu areketni az vaqıt içinde çoq kere tekrarlap olamaysıñız. Mümkün olğan qarardan ziyade areket yaptıñız. Bir qaç daqqadan soñ tekrarlap baqıñız.",
@@ -308,12 +309,25 @@
"virus-badscanner": "Yañlış sazlama. Bilinmegen virus skaneri: ''$1''",
"virus-scanfailed": "skan etüv muvafaqiyetsiz (kod $1)",
"virus-unknownscanner": "bilinmegen antivirus:",
- "logouttext": "'''Oturımnı qapattıñız.'''\n\nŞimdi {{SITENAME}} saytını anonim olaraq qullanıp olasıñız, ya da yañıdan <span class='plainlinks'>[$1 oturım açıp]</span> olasıñız (ister aynı qullanıcı adınen, ister başqa bir qullanıcı adınen). Web brauzeriñiz keşini temizlegence bazı saifeler sanki alâ daa oturımıñız açıq eken kibi körünip olur.",
+ "logouttext": "<strong>Sistemadan çıqtıñız.</strong>\n\nBrauzeriñiz keşini temizlegence bazı saifeler sistemadan alâ daa çıqmağansıñız kibi körünip olur.",
+ "welcomeuser": "Hoş keldiñiz, $1!",
+ "welcomecreation-msg": "Esap yazıñız yaratıldı.\nİsteseñiz, [[Special:Preferences|{{SITENAME}} sazlamalarıñıznı]] deñiştire bilesiñiz.",
"yourname": "Qullanıcı adıñız",
+ "userlogin-yourname": "Qullanıncı adı",
+ "userlogin-yourname-ph": "Qullanıcı adıñıznı yazıñız",
+ "createacct-another-username-ph": "Qullanıcı adıñıznı yazıñız",
"yourpassword": "Paroliñiz",
+ "userlogin-yourpassword": "Parol",
+ "userlogin-yourpassword-ph": "Paroliñizni yazıñız",
+ "createacct-yourpassword-ph": "Parolni yazıñız",
"yourpasswordagain": "Parolni bir daa yazıñız:",
+ "createacct-yourpasswordagain": "Parolni tasdıqlav",
+ "createacct-yourpasswordagain-ph": "Parolni bir daa yazıñız",
"remembermypassword": "Kirişimni bu kompyuterde hatırla (eñ çoq $1 {{PLURAL:$1|kün|kün}} içün)",
+ "userlogin-remembermypassword": "Sistemada qalayım",
+ "userlogin-signwithsecure": "Telükesiz bağlama qullanılsın",
"yourdomainname": "Domen adıñız",
+ "password-change-forbidden": "Bu vikide paroliñizni deñiştirip olamaysıñız",
"externaldberror": "Saytqa kirgende bir hata oldı. Bu tış esabıñıznı deñiştirmek aqqıñız olmağanından sebep meydanğa kelip ola.",
"login": "Kiriş",
"nav-login-createaccount": "Kiriş / Qayd oluv",
@@ -321,18 +335,36 @@
"userloginnocreate": "Kiriş",
"logout": "Çıqış",
"userlogout": "Çıqış",
- "notloggedin": "Oturım açmadıñız.",
+ "notloggedin": "Sistemağa kirmediñiz.",
+ "userlogin-noaccount": "Akkauntıñız yoqmı?",
+ "userlogin-joinproject": "{{SITENAME}} leyhasına qoşulıñız",
"nologin": "Daa esap açmadıñızmı? '''$1'''.",
"nologinlink": "Qayd ol",
- "createaccount": "Yañı esap aç",
- "gotaccount": "Daa evel esap açqan ediñizmi? '''$1'''.",
- "gotaccountlink": "Oturım açıñız",
+ "createaccount": "Qayd oluv",
+ "gotaccount": "Daa evel saytta qayd olğan ediñizmi? '''$1'''.",
+ "gotaccountlink": "Sistemağa kiriñiz",
"userlogin-resetlink": "Kiriş malümatını unuttıñızmı?",
- "createaccountmail": "e-mail vastasınen",
+ "createacct-emailrequired": "E-mail adresi",
+ "createacct-emailoptional": "E-mail adresi (mecburiy degil)",
+ "createacct-email-ph": "E-mail adresiñizni yazıñız",
+ "createacct-another-email-ph": "E-mail adresiñizni yazıñız",
+ "createaccountmail": "Avtomatik olaraq meydanğa ketirilgen muvaqqat bir parol qullana bilir ve bu parolni bildirilgen e-mail adresine yollay bilirsiñiz",
+ "createacct-realname": "Aqiqiy adıñız (mecburiy degil)",
"createaccountreason": "Sebep:",
+ "createacct-reason": "Sebep",
+ "createacct-reason-ph": "Başqa bir esap yazısı neden sebep yaratasıñız",
+ "createacct-captcha": "Telükesizlik kontroli",
+ "createacct-imgcaptcha-ph": "Yuqarıda körgen metniñizni yazıñız",
+ "createacct-submit": "Esap yazıñıznı yaratıñız",
+ "createacct-another-submit": "Başqa bir esap yazısı yaratıñız",
+ "createacct-benefit-heading": "{{SITENAME}} siziñ kibi adamlar tarafından yazıla.",
+ "createacct-benefit-body1": "{{PLURAL:$1|deñiştirme|deñiştirme}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|saife|saife}}",
+ "createacct-benefit-body3": "soñki vaqıtlarda {{PLURAL:$1|issesini qoşqan qullanıcı|issesini qoşqan qullanıcı}}",
"badretype": "Kirsetken parolleriñiz aynı degil.",
"userexists": "Kirsetken qullanıcı adıñız endi qullanıla.\nLütfen, başqa bir qullanıcı adı saylañız.",
"loginerror": "Oturım açma hatası",
+ "createacct-error": "Esap yazısını yaratuv hatası",
"createaccounterror": "Esap yaratılıp olamay: $1",
"nocookiesnew": "Qullanıcı esabı açılğan, faqat tanıtılmağan. {{SITENAME}} qullanıcılarnı tanıtmaq içün \"cookies\"ni qullana. Sizde bu funktsiya qapalı vaziyettedir. \"Cookies\" funktsiyasını işletip tekrar yañı adıñız ve paroliñiznen tırışıp baqınız.",
"nocookieslogin": "{{SITENAME}} \"cookies\"ni qullana. Sizde bu funktsiya qapalı vaziyettedir. \"Cookies\" funktsiyasını işletip tekrar tırışıp baqıñız.",
@@ -348,7 +380,7 @@
"passwordtooshort": "Paroliñizde eñ az {{PLURAL:$1|1|$1}} işaret olmalı.",
"password-name-match": "Paroliñiz qullanıcı adıñızdan farqlı olmalı.",
"password-login-forbidden": "Bu qullanıcı adı ve parolni qullanmaq yasaqtır.",
- "mailmypassword": "Yañı parol yiber",
+ "mailmypassword": "Parolni sıfırla",
"passwordremindertitle": "{{grammar:genitive|{{SITENAME}}}} qullanıcınıñ parol hatırlatuvı",
"passwordremindertext": "Birev (belki de bu sizsiñiz, $1 IP adresinden) {{SITENAME}} saytı içün ($4) yañı qullanıcı parolini istedi.\n$2 qullanıcısına vaqtınca <code>$3</code> paroli yaratıldı. Eger bu kerçekten de siziñ istegiñiz olğan olsa, oturım açıp yañı bir parol yaratmañız kerektir. Muvaqqat paroliñizniñ müddeti {{PLURAL:$5|1 kün|$5 kün}} içinde dolacaq.\n\nEger de yañı parol talap etmegen olsañız ya da eski paroliñizni hatırlap endi onı deñiştirmege istemeseñiz, bu mektüpni diqqatqa almayıp eski paroliñizni qullanmağa devam etip olasıñız.",
"noemail": "$1 adlı qullanıcı içün e-mail bildirilmedi.",
@@ -371,6 +403,10 @@
"login-throttled": "Yaqın zamanda pek çoq kere kirmege tırıştıñız.\nLütfen, qayta kirmezden evel biraz bekleñiz.",
"loginlanguagelabel": "Til: $1",
"suspicious-userlogout": "Çıqış istegeniñiz red etildi, çünki bozuq bir brauzer ya da keşleyici proksi tarafından yollanğan kibi körüne.",
+ "pt-login": "Kiriş",
+ "pt-login-button": "Kiriş",
+ "pt-createaccount": "Qayd oluv",
+ "pt-userlogout": "Çıqış",
"changepassword": "Parol deñiştir",
"resetpass_announce": "Muvaqqat kod vastasınen kirdiñiz. Kirişni tamamlamaq içün yañı parolni mında qoyuñız:",
"resetpass_header": "Esapnıñ parolini deñiştir",
@@ -452,7 +488,8 @@
"session_fail_preview": "''' Server siz yapqan deñiştirmelerni sessiya identifikatorı\ncoyulğanı sebebinden saqlap olamadı. Bu vaqtınca problemadır. Lütfen, tekrar saqlap baqıñız.\nBundan da soñ olıp çıqmasa, malümat lokal faylğa saqlañız da brauzeriñizni bir qapatıp\naçıñız.'''",
"session_fail_preview_html": "'''Afu etiñiz! HTML sessiyanıñ malümatları ğayıp olğanı sebebinden siziñ deñiştirmeleriñizni qabul etmege imkân yoqtır.'''",
"token_suffix_mismatch": "'''Siziñ programmañıznıñ öz türlendirüv penceresinde punktuatsiya işaretlerini doğru işlemegeni içün yapqan deñiştirmeleriñiz qabul olunmadı. Deñiştirmeler saife metniniñ körünişi bozulmasın dep lâğu etildi.\nBunıñ kibi problemalar hatalı anonim web-proksiler qullanuvdan çıqıp ola.'''",
- "editing": "\"$1\" saifesini deñiştireyatasız",
+ "editing": "“$1” saifesini deñiştireyatasız",
+ "creating": "“$1” saifesini yaratuv",
"editingsection": "\"$1\" saifesinde bölük deñiştireyatasız",
"editingcomment": "$1 saifesini deñiştireyatasız (yañı bölük)",
"editconflict": "Deñiştirmeler çatışması: $1",
@@ -490,6 +527,8 @@
"edit-gone-missing": "Saife yañartılıp olamay.\nBelki o yoq etilgendir.",
"edit-conflict": "Deñiştirmeler çatışması.",
"edit-no-change": "Yapqan deñiştirmeñiz saqlanmağan, çünki metinde bir türlü deñiştirilme yapılmadı.",
+ "postedit-confirmation-created": "Saife yaratıldı.",
+ "postedit-confirmation-saved": "Yapqan deñiştirmeñiz saqlandı.",
"edit-already-exists": "Yañı saifeni yaratmaq mümkün degil.\nO endi bar.",
"undo-success": "Deñiştirme lâğu etile bile. Lütfen, mına bu deñiştirmelerni yapmağa istegeniñizden emin olmaq içün versiyalar teñeştirilüvini közden keçirip deñiştirmelerni saqlamaq içün \"Saifeni saqla\" dögmesine basıñız.",
"undo-failure": "Aradaki deñiştirmeler bir-birine kelişikli olmağanı içün deñiştirme lâğu etilip olamay.",
@@ -500,7 +539,7 @@
"viewpagelogs": "Bu saifeniñ jurnallarını köster",
"nohistory": "Bu saifeniñ keçmiş versiyası yoq.",
"currentrev": "Şimdiki versiya",
- "currentrev-asof": "$1 tarihında soñki kere deñiştirilgen saifeniñ şimdiki alı",
+ "currentrev-asof": "$1 tarihından başlap saifeniñ şimdiki alı",
"revisionasof": "Saifeniñ $1 tarihındaki alı",
"revision-info": "Saifeniñ $2 tarafından yazılğan $1 tarihındaki alı",
"previousrevision": "← Evelki alı",
@@ -585,6 +624,7 @@
"preferences": "Sazlamalar",
"mypreferences": "Sazlamalar",
"prefs-edits": "Deñiştirmeler sayısı:",
+ "prefsnologintext2": "Sazlamalarıñıznı deñiştirmek içün lütfen sistemağa kiriñiz.",
"prefs-skin": "Resimleme",
"skin-preview": "Baqıp çıquv",
"datedefault": "Standart",
@@ -708,8 +748,10 @@
"recentchanges-label-minor": "Bu, kiçik bir deñiştirme",
"recentchanges-label-bot": "Bu bir botnıñ yapqan deñiştirmesi",
"recentchanges-label-unpatrolled": "Bu deñiştirme alâ daa teşkerilmegen",
+ "recentchanges-label-plusminus": "Bayt esabınen saife büyükliginiñ deñiştirilmesi",
+ "recentchanges-legend-heading": "'''İşaretler:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|yañı saifeler cedveline]] de baqıñız)",
- "rcnotefrom": "'''$2''' tarihından itibaren yapılğan deñiştirmeler aşağıdadır (eñ çоq '''$1''' dane saife kösterile).",
+ "rcnotefrom": "<strong>$3, $4</strong> tarihından başlap yapılğan {{PLURAL:$5|deñiştirme|deñiştirmeler}} aşağıdadır (eñ çоq <strong>$1</strong> dane saife kösterile).",
"rclistfrom": "$3 $2 tarihından berli yapılğan deñiştirmelerni köster",
"rcshowhideminor": "kiçik deñiştirmelerni $1",
"rcshowhideminor-show": "köster",
@@ -717,7 +759,7 @@
"rcshowhidebots": "botlarnı $1",
"rcshowhidebots-show": "köster",
"rcshowhidebots-hide": "gizle",
- "rcshowhideliu": "Qaydlı qullanıcılarnı $1",
+ "rcshowhideliu": "qaydlı qullanıcılarnı $1",
"rcshowhideliu-show": "köster",
"rcshowhideliu-hide": "gizle",
"rcshowhideanons": "anonim qullanıcılarnı $1",
@@ -740,6 +782,7 @@
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|qullanıcı|qullanıcı}} közete]",
"rc_categories": "Tek kategoriyalardan (\"|\" ile ayırıla)",
"rc_categories_any": "Er angi",
+ "rc-change-size-new": "Deñiştirilgen soñ $1 {{PLURAL:$1|bayt|bayt}}",
"newsectionsummary": "/* $1 */ yañı bölük",
"rc-enhanced-expand": "Tafsilâtını köster",
"rc-enhanced-hide": "Tafsilâtını gizle",
@@ -755,7 +798,7 @@
"reuploaddesc": "Yükleme formasına keri qayt.",
"upload-tryagain": "Deñiştirilgen fayl tarifini yolla",
"uploadnologin": "Oturım açmadıñız",
- "uploadnologintext": "Fayl yüklep olmaq içün [[Special:UserLogin|oturım açmaq]] kereksiñiz.",
+ "uploadnologintext": "Fayl yüklep olmaq içün lütfen $1.",
"upload_directory_missing": "Yüklemeler içün direktoriya ($1) mevcut degil ve veb-server tarafından yapılıp olamay.",
"upload_directory_read_only": "Web serverniñ ($1) cüzdanına fayllar saqlamağa aqları yoqtır.",
"uploaderror": "Yükleme hatası",
@@ -873,13 +916,11 @@
"statistics": "Statistika",
"statistics-header-pages": "Saife statistikası",
"statistics-header-edits": "Deñiştirüv statistikası",
- "statistics-header-views": "Közden keçirme statistikası",
"statistics-header-users": "Qullanıcı statistikası",
"statistics-header-hooks": "Diger statistika",
- "statistics-mostpopular": "Eñ sıq baqılğan saifeler",
"doubleredirects": "Yollamağa olğan yollamalar",
"doubleredirectstext": "Bu saifede diger yollama saifelerine yollanma olğan saifeleri kösterile.\nEr satırda birinci ve ekinci yollamağa bağlantılar da, ekinci yollamanıñ maqsat saifesi (adetince o birinci yollamanıñ kerekli maqsadı ola) da bar.\n<del>Üstü sızılğan</del> meseleler endi çezilgen.",
- "double-redirect-fixed-move": "[[$1]] avuştırıldı, şimdi [[$2]] saifesine yollap tura.",
+ "double-redirect-fixed-move": "[[$1]] avuştırıldı. O, avtomatik olaraq yañartılıp şimdi [[$2]] saifesine yönetip tura.",
"brokenredirects": "Bar olmağan saifege yapılğan yollamalar",
"brokenredirectstext": "Aşağıdaki yollamalar bar olmağan saifelerge bağlantı bereler:",
"brokenredirects-edit": "deñiştir",
@@ -903,7 +944,6 @@
"uncategorizedtemplates": "Er angi bir kategoriyada olmağan şablonlar",
"unusedcategories": "Qullanılmağan kategoriyalar",
"unusedimages": "Qullanılmağan resimler",
- "popularpages": "Populâr saifeler",
"wantedcategories": "İstenilgen kategoriyalar",
"wantedpages": "İstenilgen saifeler",
"wantedfiles": "İstenilgen fayllar",
@@ -932,7 +972,7 @@
"pager-older-n": "{{PLURAL:$1|daa eski 1|daa eski $1}}",
"booksources": "Kitaplar menbası",
"booksources-search-legend": "Kitaplar menbasını qıdıruv",
- "booksources-go": "Qıdır",
+ "booksources-search": "Qıdır",
"specialloguserlabel": "Qullanıcı:",
"speciallogtitlelabel": "Serleva:",
"log": "Jurnallar",
@@ -980,7 +1020,8 @@
"emailsenttext": "Siziñ e-mail beyanatıñız yollandı",
"emailuserfooter": "Bu mektüp $1 tarafından $2 qullanıcısına, {{SITENAME}} saytındaki \"Qullanıcığa e-mail yolla\" funktsiyasınen yollanğan.",
"watchlist": "Közetüv cedveli",
- "mywatchlist": "Közetüv cedvelim",
+ "mywatchlist": "Közetüv cedveli",
+ "watchlistfor2": "$1 içün $2",
"nowatchlist": "Siziñ közetüv cedveliñiz boştır.",
"watchlistanontext": "Közetüv cedvelini baqmaq ya da deñiştirmek içün $1 borclusıñız.",
"watchnologin": "Oturım açmaq kerek",
@@ -995,12 +1036,14 @@
"wlheader-enotif": "E-mail ile haber berüv açıldı.",
"wlheader-showupdated": "Soñki ziyaretiñizden soñ deñiştirilgen saifeler '''qalın ariflernen''' kösterildi.",
"wlnote": "Aşağıda saat $3, $4 içün soñki {{PLURAL:$2|saat|'''$2''' saat}} içinde yapılğan soñki {{PLURAL:$1|deñiştirme|'''$1''' deñiştirme}} kösterile.",
- "wlshowlast": "Soñki $1 saat içün, $2 kün içün ya da $3 köster",
+ "wlshowlast": "Soñki $1 saat içün, $2 kün içün ya da köster",
"watchlist-options": "Közetüv cedveli sazlamaları",
"watching": "Közetüv cedveline kirsetilmekte...",
"unwatching": "Közetüv cedvelinden yoq etilmekte...",
"enotif_reset": "Cümle saifelerni baqılğan olaraq işaretle",
"enotif_impersonal_salutation": "{{SITENAME}} qullanıcısı",
+ "enotif_subject_moved": "{{SITENAME}} leyhasınıñ $1 adlı saifesiniñ adı, $2 tarafından {{GENDER:$2|deñiştirildi}}.",
+ "enotif_body_intro_moved": "{{SITENAME}} leyhasınıñ $1 adlı saifesiniñ adı $PAGEEDITDATE tarihında $2 tarafından {{GENDER:$2|deñiştirildi}}. Şimdiki alını mında köre bilesiñiz: $3.",
"enotif_lastvisited": "Soñki ziyaretiñizden berli yapılğan deñiştirmelerni körmek içün $1 baqıñız.",
"enotif_anon_editor": "adsız (anonim) qullanıcı $1",
"enotif_body": "Sayğılı $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nDeñiştirmeniñ qısqa tarifi: $PAGESUMMARY $PAGEMINOREDIT\n\nSaifeni deñiştirgen qullanıcınen bağlanmaq içün:\ne-mail adresi: $PAGEEDITOR_EMAIL\nviki saifesi: $PAGEEDITOR_WIKI\n\nBu saifeni ziyaret etmeseñiz, birev onı bir daa deñiştirse de, iç bir tenbi beyanatı yollanmaycaq. Közetüv cedveliñizdeki bütün saifeler içün tenbi sazlamalarını deñiştire bilesiñiz.\n\n{{SITENAME}} bildirüv sisteması\n\n--\n\nBildirüv sazlamalarını deñiştirmek içün:\n{{canonicalurl:{{#special:Preferences}}}}\n\nKözetüv cedveli sazlamalarını deñiştirmek içün:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nSaifeni közetüv cedvelinden çıqarmaq içün:\n$UNWATCHURL\n\nYardım ve teklifler içün:\n$HELPPAGE",
@@ -1026,7 +1069,6 @@
"deleteotherreason": "Diger/ilâveli sebep:",
"deletereasonotherlist": "Diger sebep",
"rollback": "Deñiştirmelerni keri al",
- "rollback_short": "keri al",
"rollbacklink": "eski alına ketir",
"rollbackfailed": "keri aluv muvafaqiyetsiz",
"cantrollback": "Deñiştirmeler keri alınamay, saifeni soñki deñiştirgen kişi onıñ tek bir müellifidir",
@@ -1037,7 +1079,7 @@
"protectedarticle": "\"[[$1]]\" qorçalav altına alındı",
"modifiedarticleprotection": "\"[[$1]]\" içün qorçalav seviyesi deñiştirildi",
"unprotectedarticle": "\"[[$1]]\" saifesinden qorçalav çıqarlıdı",
- "prot_1movedto2": "\"[[$1]]\" saifesiniñ adı \"[[$2]]\" olaraq deñiştirildi",
+ "prot_1movedto2": "[[$1]] saifesiniñ adı [[$2]] dep deñiştirildi",
"protect-legend": "Qorçalavnı tasdıqla",
"protectcomment": "Sebep:",
"protectexpiry": "Bitiş tarihı:",
@@ -1072,8 +1114,10 @@
"undeletecomment": "Sebep:",
"undeletedrevisions": "Toplam {{PLURAL:$1|1 qayd|$1 qayd}} keri ketirildi.",
"undelete-header": "Keçenlerde yoq etilgen saifelerni körmek içün [[Special:Log/delete|yoq etüv jurnalına]] baqıñız.",
+ "undelete-search-submit": "Qıdır",
"namespace": "İsim fezası:",
"invert": "Saylanğan tışındakilerni sayla",
+ "namespace_association": "Bağlı isim fezası",
"blanknamespace": "(Esas)",
"contributions": "{{GENDER:$1|Qullanıcınıñ}} isseleri",
"contributions-title": "$1 qullanıcısınıñ isseleri",
@@ -1090,6 +1134,8 @@
"sp-contributions-userrights": "qullanıcı aqlarını idare etüv",
"sp-contributions-search": "İsselerni qıdıruv",
"sp-contributions-username": "IP adresi ya da qullanıcı adı:",
+ "sp-contributions-toponly": "Tek soñki versiyası olğan deñiştirmelerni köster",
+ "sp-contributions-newonly": "Tek yañı saife yaratqan deñiştirmelerni köster",
"sp-contributions-submit": "Qıdır",
"whatlinkshere": "Bu saifege bağlantılar",
"whatlinkshere-title": "$1 saifesine bağlantı bergen saifeler",
@@ -1122,6 +1168,7 @@
"unblockip": "Qullanıcınıñ blok etmesini çıqar",
"ipusubmit": "Bu blok etmeni çıqar",
"ipblocklist": "Blok etilgen qullanıcılar ve IP adresleri",
+ "ipblocklist-submit": "Qıdır",
"infiniteblock": "müddetsiz",
"expiringblock": "$1 $2 tarihında bitecek",
"blocklink": "blok et",
@@ -1142,9 +1189,10 @@
"lockbtn": "Malümat bazası kilitli",
"move-page": "$1 saifesiniñ adını deñiştireyatasız",
"move-page-legend": "Saifeniñ adını deñiştirüv",
- "movepagetext": "Aşağıdaki forma qullanılıp saifeniñ adı deñiştirilir. Bunıñnen beraber deñiştirmeler jurnalı da yañı adğa avuştırılır.\nEski adı yañı adına yollama olur. Eski serlevağa yollama saifelerni avtomatik olaraq yañartıp olasıñız. Bu areketni avtomatik yapmağa istemeseñiz, bütün [[Special:DoubleRedirects|çift]] ve [[Special:BrokenRedirects|yırtıq]] yollama saifelerini özüñiz tüzetmege mecbur olursıñız. Bağlantılar endiden berli doğru çalışmasından emin olmalısıñız.\n\nYañı adda bir saife endi bar olsa, ad deñiştirilüvi '''yapılmaycaq''', ancaq bar olğan saife yollama ya da boş olsa ad deñiştirilüvi mümkün olacaq. Bu demek ki, saifeniñ adını yañlıştan deñiştirgen olsañız deminki adını keri qaytarıp olasıñız, amma bar olğan saifeni tesadüfen yoq etamaysıñız.\n\n'''TENBİ!'''\nAd deñiştirilüvi populâr saifeler içün büyük ve beklenmegen deñişmelerge sebep ola bilir. Lütfen, deñiştirme yapmazdan evel ola bileceklerni köz ögüne alıñız.",
+ "movepagetext": "Aşağıdaki forma qullanılıp saifeniñ adı deñiştirilir. Bunıñnen beraber deñiştirmeler jurnalı da yañı adğa avuştırılır.\nEski adı yañı adına yönetme olur. Eski serlevağa yönetip turğan saifelerni avtomatik olaraq yañartıp olasıñız. Bu areketni avtomatik yapmağa istemeseñiz, bütün [[Special:DoubleRedirects|çift]] ve [[Special:BrokenRedirects|yırtıq]] yönetme saifelerini özüñiz teşkermege mecbur olursıñız. Bağlantılar endiden berli doğru çalışmasından emin olmalısıñız.\n\nYañı adda bir saife endi bar olsa, ad deñiştirilüvi <strong>yapılmaycaq</strong>, ancaq bar olğan saife yönetme ya da boş olsa ad deñiştirilüvi mümkün olacaq. Bu demek ki, saifeniñ adını yañlıştan deñiştirgen olsañız deminki adını keri qaytarıp olasıñız, amma bar olğan saifeni tesadüfen yoq etamaysıñız.\n\n<strong>TENBİ!</strong>\nAd deñiştirilüvi populâr saifeler içün büyük ve beklenmegen deñişmelerge sebep ola bilir. Lütfen, deñiştirme yapmazdan evel ola bileceklerni köz ögüne alıñız.",
"movepagetalktext": "Qoşulğan muzakere saifesiniñ de (bar olsa) adı avtomatik tarzda deñiştirilecek. '''Müstesnalar:'''\n\n*Aynı bu isimde boş olmağan bir muzakere saifesi endi bar;\n*Aşağıdaki boşluqqa işaret qoymadıñız.\n\nBöyle allarda, kerek olsa, saifelerni qolnen taşımağa ya da birleştirmege mecbur olursıñız.",
"movearticle": "Eski ad",
+ "movecategorypage-warning": "<strong>İhtar:</strong> Bir kategoriya saifesiniñ adını deñiştirmek üzresiñiz. Lütfen, yalıñız kategoriya saifesiniñ köçürilecegini ve eski kategoriyada yer alğan saifelerniñ yañı kategoriyağa avotmatik olaraq <em>avuştırılmaycağını</em> unutmañız.",
"movenologintext": "Saifeniñ adını deñiştirip olmaq içün [[Special:UserLogin|oturım açıñız]].",
"movenotallowed": "Saifeler adlarını deñiştirmege iziniñiz yoq.",
"newtitle": "Yañı ad",
@@ -1160,7 +1208,7 @@
"move-subpages": "Alt saifelerniñ adlarını da deñiştir ($1 saifege qadar)",
"move-talk-subpages": "Muzakere saifesi alt saifeleriniñ adlarını da deñiştir ($1 saifege qadar)",
"movepage-page-exists": "$1 saifesi endi bar, ve avtomatik olaraq yañıdan yazılıp olamaz.",
- "movepage-page-moved": "$1 saifesiniñ adı $2 olaraq deñiştirildi.",
+ "movepage-page-moved": "$1 saifesiniñ adı $2 dep deñiştirildi.",
"movepage-page-unmoved": "$1 saifesiniñ adı $2 olaraq deñiştirilip olamay.",
"movelogpage": "Ad deñiştirilmeleri jurnalı",
"movelogpagetext": "Aşağıda bulunğan cedvel adı deñiştirilgen saifelerni köstere",
@@ -1183,6 +1231,8 @@
"allmessagesdefault": "Original metin",
"allmessagescurrent": "Şimdi qullanılğan metin",
"allmessagestext": "İşbu cedvel MediaWikide mevcut olğan bütün sistema beyanatlarınıñ cedvelidir.\nMediaWiki interfeysiniñ çeşit tillerge tercime etüvde iştirak etmege isteseñiz [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] ve [//translatewiki.net translatewiki.net] saifelerine ziyaret etiñiz.",
+ "allmessages-filter-legend": "Süzgüç",
+ "allmessages-language": "Til:",
"thumbnail-more": "Büyüt",
"filemissing": "Fayl tapılmadı",
"thumbnail_error": "Kiçik resim (thumbnail) yaratılğanda bir hata çıqtı: $1",
@@ -1198,7 +1248,7 @@
"tooltip-pt-watchlist": "Közetüvge alğan saifeleriñiz",
"tooltip-pt-mycontris": "Qoşqan isseleriñizniñ cedveli",
"tooltip-pt-login": "Oturım açmañız tevsiye olunır amma mecbur degilsiñiz.",
- "tooltip-pt-logout": "Sistemadan çıquv",
+ "tooltip-pt-logout": "Çıqış",
"tooltip-ca-talk": "Saifedeki malümatnen bağlı muzakere",
"tooltip-ca-edit": "Bu saifeni deñiştirip olasıñız. Saqlamazdan evel baqıp çıqmağa unutmañız.",
"tooltip-ca-addsection": "Yañı bölükni açuv",
@@ -1268,6 +1318,7 @@
"spambot_username": "Spamdan temizlev",
"spam_reverting": "$1 saytına bağlantısı olmağan soñki versiyağa keri ketirüv",
"spam_blanking": "Bar olğan versiyalarda $1 saytına bağlantılar bar, temizlev",
+ "pageinfo-language": "Saife içindekisiniñ tili",
"patrol-log-page": "Teşkerüv jurnalı",
"log-show-hide-patrol": "Teşkerüv jurnalını $1",
"deletedrevision": "$1 sayılı eski versiya yoq etildi.",
@@ -1328,6 +1379,7 @@
"exif-gpsaltitude": "Yükseklik",
"exif-gpstimestamp": "GPS saatı (atom saatı)",
"exif-gpssatellites": "Ölçemek içün qullanğanı sputnikler",
+ "exif-languagecode": "Til",
"exif-compression-1": "Sıqıştırılmağan",
"exif-orientation-3": "180° aylandırılğan",
"exif-exposureprogram-1": "Elnen",
@@ -1347,7 +1399,6 @@
"exif-scenecapturetype-3": "Gece syomkası",
"exif-subjectdistancerange-0": "Bilinmey",
"exif-subjectdistancerange-1": "Makro",
- "watchlistall2": "episini",
"namespacesall": "Episi",
"monthsall": "Episi",
"confirmemail": "E-mail adresini tasdıqla",
@@ -1420,7 +1471,7 @@
"specialpages": "Mahsus saifeler",
"specialpages-group-maintenance": "Baqım esabatları",
"specialpages-group-other": "Diger mahsus saifeler",
- "specialpages-group-login": "Kiriş / Qayd oluv",
+ "specialpages-group-login": "Kiriş / qayd oluv",
"specialpages-group-changes": "Soñki deñişiklikler ve jurnallar",
"specialpages-group-media": "Fayl esabatları ve yükleme",
"specialpages-group-users": "Qullanıcılar ve aqları",
@@ -1432,8 +1483,18 @@
"specialpages-group-spam": "Spamğa qarşı aletler",
"blankpage": "Boş saife",
"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)",
+ "tags-title": "Belgiler",
"comparepages": "Saifelerni teñeştirüv",
"compare-submit": "Teñeştir",
"htmlform-reset": "Deñişikliklerni keri al",
- "searchsuggest-containing": "içinde bu olğan..."
+ "logentry-move-move": "$1 adlı qulanıcı $3 saifesiniñ adını $4 dep {{GENDER:$2|deñiştirildi}}.",
+ "logentry-move-move-noredirect": "$1 adlı qullanıcı $3 saifesiniñ adını yönetme qaldırmayıp $4 dep {{GENDER:$2|deñiştirdi}}",
+ "logentry-move-move_redir": "$1, $3 saifesiniñ adını yönetme üzerinden $4 dep {{GENDER:$2|deñiştirdi}}",
+ "logentry-move-move_redir-noredirect": "$1 adlı qullanıcı $3 saifesiniñ adını yönetme üzerinden yañı bir yönetme qaldırmayıp $4 dep {{GENDER:$2|deñiştirdi}}",
+ "searchsuggest-search": "Qıdır",
+ "searchsuggest-containing": "içinde bu olğan...",
+ "pagelang-language": "Til"
}
diff --git a/languages/i18n/cs.json b/languages/i18n/cs.json
index 8a27aaaf..1fbc5b05 100644
--- a/languages/i18n/cs.json
+++ b/languages/i18n/cs.json
@@ -25,7 +25,9 @@
"Utar",
"Vks",
"YjM",
- "לערי ריינהארט"
+ "לערי ריינהארט",
+ "Cvanca",
+ "Macofe"
]
},
"tog-underline": "Podtrhávat odkazy:",
@@ -53,7 +55,7 @@
"tog-shownumberswatching": "Zobrazovat počet sledujících uživatelů",
"tog-oldsig": "Stávající podpis:",
"tog-fancysig": "Používat v podpisu wikitext (bez automatického odkazu)",
- "tog-uselivepreview": "Používat rychlý náhled (experimentální)",
+ "tog-uselivepreview": "Používat rychlý náhled",
"tog-forceeditsummary": "Upozornit, když nevyplním shrnutí editace",
"tog-watchlisthideown": "Na seznamu sledovaných stránek skrýt moje editace",
"tog-watchlisthidebots": "Na seznamu sledovaných stránek skrýt editace botů",
@@ -137,7 +139,7 @@
"october-date": "$1. října",
"november-date": "$1. listopadu",
"december-date": "$1. prosince",
- "pagecategories": "{{PLURAL:$1|Kategorie|Kategorie|Kategorie}}",
+ "pagecategories": "{{PLURAL:$1|Kategorie}}",
"category_header": "Stránky v kategorii „$1“",
"subcategories": "Podkategorie",
"category-media-header": "Soubory v kategorii „$1“",
@@ -241,6 +243,7 @@
"pool-queuefull": "Fronta ve fondu je plná",
"pool-errorunknown": "Neznámá chyba",
"pool-servererror": "Služba řídící přístup k serverům není dostupná ($1).",
+ "poolcounter-usage-error": "Chyba užití: $1",
"aboutsite": "O&nbsp;{{grammar:6sg|{{SITENAME}}}}",
"aboutpage": "Project:{{SITENAME}}",
"copyright": "Obsah je dostupný pod $1, pokud není uvedeno jinak.",
@@ -250,6 +253,7 @@
"disclaimers": "Vyloučení odpovědnosti",
"disclaimerpage": "Project:Vyloučení odpovědnosti",
"edithelp": "Pomoc při editování",
+ "helppage-top-gethelp": "Nápověda",
"mainpage": "Hlavní strana",
"mainpage-description": "Hlavní strana",
"policy-url": "Project:Pravidla",
@@ -290,7 +294,7 @@
"restorelink": "{{PLURAL:$1|smazanou editaci|$1 smazané editace|$1 smazaných editací}}",
"feedlinks": "Kanály:",
"feed-invalid": "Neplatný typ kanálu.",
- "feed-unavailable": "Kanály nejsou dostupné.",
+ "feed-unavailable": "Kanály nejsou dostupné",
"site-rss-feed": "RSS kanál {{grammar:2sg|$1}}.",
"site-atom-feed": "Atom kanál {{grammar:2sg|$1}}.",
"page-rss-feed": "RSS kanál stránky „$1“",
@@ -309,7 +313,7 @@
"nstab-help": "Nápověda",
"nstab-category": "Kategorie",
"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 klikli na chybný odkaz.\nMůže se ale jednat také o chybu {{GRAMMAR:2sg|{{SITENAME}}}}.",
+ "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",
"nospecialpagetext": "<strong>Zadali jste neplatnou speciální stránku.</strong>\n\nZkuste se podívat na [[Special:SpecialPages|seznam všech existujících speciálních stránek]].",
"error": "Chyba",
@@ -319,20 +323,23 @@
"databaseerror-query": "Dotaz: $1",
"databaseerror-function": "Funkce: $1",
"databaseerror-error": "Chyba: $1",
- "laggedslavemode": "Upozornění: Stránka nemusí být zcela aktuální.",
+ "laggedslavemode": "<strong>Upozornění:</strong> Stránka nemusí být aktuální.",
"readonly": "Databáze je uzamčena",
- "enterlockreason": "Udejte důvod zamčení, včetně odhadu, za jak dlouho dojde k odemčení.",
+ "enterlockreason": "Udejte důvod zamčení, včetně odhadu, za jak dlouho dojde k odemčení",
"readonlytext": "Databáze je nyní uzamčena, takže nelze ukládat nové doplňky a změny. Důvodem je pravděpodobně pravidelná údržba, po které se vše vrátí do normálního stavu.\n\nSprávce serveru, který databázi zamkl, poskytl toto zdůvodnění: $1",
- "missing-article": "V databázi nebyl nalezen požadovaný text stránky „$1“ $2.\n\nToto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na rozdíl verzí nebo historickou verzi stránky, jež byla smazána.\n\nNení-li toto váš případ, možná jste nalezli chybu v softwaru. Prosíme, ohlaste to [[Special:ListUsers/sysop|správcům]] spolu s URL této stránky.",
+ "missing-article": "V databázi nebyl nalezen požadovaný text stránky „$1“ $2.\n\nToto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na rozdíl verzí nebo historickou verzi stránky, jež byla smazána.\n\nNení-li toto váš případ, možná jste nalezli chybu v softwaru.\nProsíme, ohlaste to [[Special:ListUsers/sysop|správcům]] spolu s URL této stránky.",
"missingarticle-rev": "(číslo revize: $1)",
"missingarticle-diff": "(Rozdíl: $1, $2)",
"readonly_lag": "Databáze byla automaticky dočasně uzamčena kvůli zpoždění ostatních databázových serverů oproti hlavnímu",
"internalerror": "Vnitřní chyba",
"internalerror_info": "Vnitřní chyba: $1",
+ "internalerror-fatal-exception": "Kritická výjimka typu „$1“",
"filecopyerror": "Nebylo možné zkopírovat soubor „$1“ na „$2“.",
"filerenameerror": "Nebylo možné přejmenovat soubor „$1“ na „$2“.",
"filedeleteerror": "Nebylo možné smazat soubor „$1“.",
"directorycreateerror": "Nelze vytvořit adresář „$1“.",
+ "directoryreadonlyerror": "Adresář „$1“ je pouze pro čtení.",
+ "directorynotreadableerror": "Adresář „$1“ nelze číst.",
"filenotfound": "Nebylo možné najít soubor „$1“.",
"unexpected": "Neočekávaná hodnota: \"$1\"=\"$2\".",
"formerror": "Chyba: nebylo možné odeslat formulář",
@@ -349,12 +356,13 @@
"viewsource": "Zobrazit zdroj",
"viewsource-title": "Zobrazení zdroje stránky $1",
"actionthrottled": "Akce byla pozastavena",
- "actionthrottledtext": "Vzhledem k protispamovým opatřením nemůžete požadovanou akci provádět příliš častokrát v krátké době. Zkuste to znovu za několik minut.",
+ "actionthrottledtext": "Vzhledem k protispamovým opatřením nemůžete požadovanou akci provádět příliš častokrát v krátké době.\nZkuste to znovu za několik minut.",
"protectedpagetext": "Tato stránka byla zamčena, aby se předešlo jejímu editování.",
"viewsourcetext": "Můžete si prohlédnout a zkopírovat zdrojový kód této stránky:",
- "viewyourtext": "Můžete si prohlédnout a zkopírovat zdrojový kód '''vašich změn''' této stránky:",
+ "viewyourtext": "Můžete si prohlédnout a zkopírovat zdrojový kód <strong>vašich změn</strong> této stránky:",
"protectedinterface": "Tato stránka obsahuje text softwarového rozhraní a je zamčena kvůli prevenci zneužití.\nPro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
- "editinginterface": "'''Upozornění:''' Editujete stránku, která definuje texty rozhraní.\nZměny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům této wiki.\nPro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
+ "editinginterface": "<strong>Upozornění:</strong> Editujete stránku, která definuje texty rozhraní.\nZměny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům této wiki.",
+ "translateinterface": "Pro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
"cascadeprotected": "Tato stránka je zamčena, neboť je vložena do {{PLURAL:$1|následující stránky, zamčené|následujících stránek, zamčených|následujících stránek, zamčených}} kaskádovým zámkem:\n$2",
"namespaceprotected": "Nemáte povoleno editovat stránky ve jmenném prostoru '''$1'''.",
"customcssprotected": "Nemáte povoleno editovat tuto stránku s CSS, protože obsahuje osobní nastavení jiného uživatele.",
@@ -364,8 +372,8 @@
"myprivateinfoprotected": "Nemáte oprávnění měnit své soukromé údaje.",
"mypreferencesprotected": "Nemáte oprávnění změnit svá nastavení.",
"ns-specialprotected": "Stránky ve jmenném prostoru {{ns:special}} nelze editovat.",
- "titleprotected": "Stránku s tímto názvem nelze založit, protože název zamknul uživatel [[User:$1|$1]] s odůvodněním: ''$2''.",
- "filereadonlyerror": "Nelze změnit soubor „$1“, protože úložiště souborů „$2“ je momentálně pouze pro čtení.\n\nSprávce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „''$3''“.",
+ "titleprotected": "Stránku s tímto názvem nelze založit, protože název zamknul uživatel [[User:$1|$1]] s odůvodněním <em>$2</em>.",
+ "filereadonlyerror": "Nelze změnit soubor „$1“, protože úložiště souborů „$2“ je pouze pro čtení.\n\nSprávce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „$3“.",
"invalidtitle-knownnamespace": "Neplatný název se jmenným prostorem „$2“ a textem „$3“",
"invalidtitle-unknownnamespace": "Neplatný název s neznámým číslem jmenného prostoru $1 a textem „$2“",
"exception-nologin": "Nejste přihlášen(a)",
@@ -374,7 +382,7 @@
"virus-badscanner": "Špatná konfigurace: neznámý antivirový program: ''$1''",
"virus-scanfailed": "prověřování selhalo (kód $1)",
"virus-unknownscanner": "neznámý antivirus:",
- "logouttext": "'''Nyní jste odhlášeni.'''\n\nUvědomte si, že některé stránky se mohou i nadále zobrazovat, jako byste byli dosud přihlášeni, dokud nevymažete cache prohlížeče.",
+ "logouttext": "<strong>Nyní jste odhlášeni.</strong>\n\nNěkteré stránky se mohou i nadále zobrazovat, jako byste byli dosud přihlášeni, dokud nevymažete cache prohlížeče.",
"welcomeuser": "Vítejte, uživateli $1!",
"welcomecreation-msg": "Váš účet byl vytvořen.\nNezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SITENAME}}}}]].",
"yourname": "Uživatelské jméno:",
@@ -406,11 +414,13 @@
"nologin": "Dosud nemáte účet? $1.",
"nologinlink": "Zaregistrujte se",
"createaccount": "Vytvořit účet",
- "gotaccount": "Už jste registrováni? '''$1'''.",
+ "gotaccount": "Už jste registrováni? $1.",
"gotaccountlink": "Přihlaste se",
"userlogin-resetlink": "Zapomněli jste přihlašovací údaje?",
"userlogin-resetpassword-link": "Zapomněli jste heslo?",
"userlogin-helplink2": "Nápověda k přihlašování",
+ "userlogin-loggedin": "Již jste {{GENDER:$1|přihlášen|přihlášena}} jako $1.\nPomocí formuláře níže se můžete přihlásit jako jiný uživatel.",
+ "userlogin-createanother": "Vytvořit jiný účet",
"createacct-emailrequired": "E-mailová adresa",
"createacct-emailoptional": "E-mailová adresa (nepovinné)",
"createacct-email-ph": "Zadejte svou e-mailovou adresu",
@@ -436,9 +446,9 @@
"nocookiesnew": "Uživatelský účet byl vytvořen, ale nejste přihlášeni. {{SITENAME}} používá cookies k přihlášení uživatelů. Vy máte cookies vypnuty. Prosím, zapněte je a poté se přihlaste svým novým uživatelským jménem a heslem.",
"nocookieslogin": "{{SITENAME}} používá cookies k přihlášení uživatelů. Vy máte cookies vypnuty. Prosím zapněte je a zkuste znovu.",
"nocookiesfornew": "Uživatelský účet nebyl založen, neboť jsme nebyli schopni potvrdit jeho původ.\nUjistěte se, že máte povoleny cookies, obnovte tuto stránku a zkuste to znovu.",
- "noname": "Musíte uvést jméno svého účtu.",
+ "noname": "{{GENDER:|Nezadal|Nezadala|Nezadali}} jste platné uživatelské jméno.",
"loginsuccesstitle": "Přihlášení bylo úspěšné",
- "loginsuccess": "Nyní jste přihlášen na {{grammar:6sg|{{SITENAME}}}} jako uživatel „$1“.",
+ "loginsuccess": "<strong>Nyní jste na {{grammar:6sg|{{SITENAME}}}} {{GENDER:$1|přihlášen jako uživatel|přihlášena jako uživatelka}} „$1“.</strong>",
"nosuchuser": "Neexistuje uživatel se jménem „$1“. U uživatelských jmen se rozlišují malá/velká písmena. Zkontrolujte zápis, nebo si [[Special:UserLogin/signup|vytvořte nový účet]].",
"nosuchusershort": "Neexistuje uživatel se jménem „$1“. Zkontrolujte zápis.",
"nouserspecified": "Musíte zadat uživatelské jméno.",
@@ -446,6 +456,7 @@
"wrongpassword": "Bylo zadáno nesprávné heslo.\nZkuste to znovu.",
"wrongpasswordempty": "Bylo zadáno prázdné heslo. Zkuste to znovu.",
"passwordtooshort": "Heslo musí být dlouhé nejméně $1 {{PLURAL:$1|znak|znaky|znaků}}.",
+ "passwordtoolong": "Hesla nemohou být delší než {{PLURAL:$1|1 znak|$1 znaky|$1 znaků}}.",
"password-name-match": "Vaše heslo nesmí být stejné jako uživatelské jméno.",
"password-login-forbidden": "Použití tohoto uživatelského jména a hesla bylo zakázáno.",
"mailmypassword": "Poslat nové heslo",
@@ -458,7 +469,7 @@
"eauthentsent": "Na zadanou adresu byl zaslán potvrzovací e-mail.\nŽádné další zprávy vám však na tuto adresu nebudou odeslány, dokud podle instrukcí v e-mailu nepotvrdíte, že tato adresa skutečně patří vám.",
"throttled-mailpassword": "Během {{PLURAL:$1|poslední hodiny|posledních $1 hodin}} již bylo heslo jednou zasláno.\nKvůli prevenci zneužívání lze heslo zaslat jen jednou za $1 {{PLURAL:$1|hodinu|hodiny|hodin}}.",
"mailerror": "Chyba při zasílání e-mailu: $1",
- "acct_creation_throttle_hit": "Uživatelé používající vaši IP adresu už dnes vytvořili $1 {{PLURAL:$1|účet|účty|účtů}}, což je dovolené maximum. Proto není v tuto chvíli dovoleno z této IP adresy zakládat další účty.",
+ "acct_creation_throttle_hit": "Uživatelé používající vaši IP adresu už dnes vytvořili $1 {{PLURAL:$1|účet|účty|účtů}}, což je dovolené maximum.\nProto není v tuto chvíli dovoleno z této IP adresy zakládat další účty.",
"emailauthenticated": "Vaše e-mailová adresa byla ověřena $2 v $3.",
"emailnotauthenticated": "Vaše e-mailová adresa dosud nebyla ověřena.\nU následujících funkcí nebudou zasílány žádné e-maily.",
"noemailprefs": "Pro zprovoznění následujících možností musíte zadat svou e-mailovou adresu.",
@@ -499,7 +510,7 @@
"resetpass-submit-cancel": "Storno",
"resetpass-wrong-oldpass": "Nesprávné dočasné nebo aktuální heslo.\nMožná jste si již úspěšně heslo změnili, nebo jste si vyžádali nové dočasné heslo.",
"resetpass-recycled": "Jako nové heslo si prosím nastavte něco jiného než stávající heslo.",
- "resetpass-temp-emailed": "Přihlašujete se dočasným heslem, zaslaným e-mailem.\nAbyste dokončili přihlášení, nastavte si zde nové heslo:",
+ "resetpass-temp-emailed": "Přihlašujete se pomocí dočasného hesla, které bylo zasláno e-mailem.\nAbyste dokončili přihlášení, nastavte si nové heslo:",
"resetpass-temp-password": "Dočasné heslo:",
"resetpass-abort-generic": "Změna hesla byla zablokována rozšířením.",
"resetpass-expired": "Platnost vašeho hesla vypršela. Pro přihlášení si nastavte nové heslo.",
@@ -517,7 +528,7 @@
"passwordreset-capture-help": "Pokud zaškrtnete toto políčko, bude e-mail (s dočasným heslem) kromě zaslání uživateli zobrazen i vám.",
"passwordreset-email": "E-mailová adresa:",
"passwordreset-emailtitle": "Informace k účtu na {{grammar:6sg|{{SITENAME}}}}",
- "passwordreset-emailtext-ip": "Někdo (patrně vy, z IP adresy $1) zažádal na {{grammar:6sg|{{SITENAME}}}} ($4) o nastavení nového hesla k vašemu účtu. K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:\n\n$2\n\n{{PLURAL:$3|Toto dočasné heslo|Tato dočasná hesla}} vyprší {{PLURAL:$5|za jeden den|za $5 dny|za $5 dnů}}.\nNyní byste se měl(a) přihlásit a zvolit si nové heslo. Pokud tento požadavek\nposlal někdo jiný nebo jste si na své staré heslo vzpomněl(a), a nechcete ho\ntedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.",
+ "passwordreset-emailtext-ip": "Někdo (patrně vy, z IP adresy $1) zažádal na {{grammar:6sg|{{SITENAME}}}} ($4) o nastavení nového hesla k vašemu účtu. K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:\n\n$2\n\n{{PLURAL:$3|Toto dočasné heslo|Tato dočasná hesla}} vyprší za {{PLURAL:$5|jeden den|$5 dny|$5 dnů}}.\nNyní byste se měli přihlásit a zvolit si nové heslo. Pokud tento požadavek poslal někdo jiný nebo jste si na své staré heslo vzpomněli, a nechcete ho tedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.",
"passwordreset-emailtext-user": "{{gender:$1|Uživatel|Uživatelka}} $1 na {{grammar:6sg|{{SITENAME}}}} {{gender:$1|zažádal|zažádala}} na {{grammar:6sg|{{SITENAME}}}} ($4) o nastavení nového hesla k vašemu\núčtu. K této adrese {{PLURAL:$3|je přiřazen následující účet|jsou přiřazeny následující účty}}:\n\n$2\n\n{{PLURAL:$3|Toto dočasné heslo|Tato dočasná hesla}} vyprší {{PLURAL:$5|za jeden den|za $5 dny|za $5 dnů}}.\nNyní byste se měl(a) přihlásit a zvolit si nové heslo. Pokud tento požadavek\nposlal někdo jiný nebo jste si na své staré heslo vzpomněl(a), a nechcete ho\ntedy změnit, můžete tuto zprávu ignorovat a nadále používat původní heslo.",
"passwordreset-emailelement": "Uživatelské jméno: $1\nDočasné heslo: $2",
"passwordreset-emailsent": "E-mail pro získání nového hesla byl odeslán.",
@@ -568,61 +579,63 @@
"showpreview": "Ukázat náhled",
"showdiff": "Ukázat změny",
"blankarticle": "<strong>Upozornění:</strong> Stránka, kterou se chystáte založit, je prázdná. Pokud ještě jednou kliknete na „{{int:savearticle}}“, bude založena zcela bez obsahu.",
- "anoneditwarning": "'''Varování:''' Nejste přihlášen(a). Pokud uložíte jakoukoli editaci, bude vaše IP adresa zveřejněna v historii této stránky. Pokud se <strong>[$1 přihlásíte]</strong> nebo si <strong>[$2 vytvoříte účet]</strong>, budou vaše editace připsány vašemu uživatelskému jménu a získáte i další výhody.",
- "anonpreviewwarning": "''Nejste přihlášen(a). Uložením zveřejníte svou IP adresu v historii této stránky.''",
- "missingsummary": "'''Připomenutí:''' Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na Uložit změny, bude vaše editace zapsána bez shrnutí.",
+ "anoneditwarning": "<strong>Varování:</strong> Nejste přihlášen(a). Pokud uložíte jakoukoli editaci, bude vaše IP adresa zveřejněna v historii této stránky. Pokud se <strong>[$1 přihlásíte]</strong> nebo si <strong>[$2 vytvoříte účet]</strong>, budou vaše editace připsány vašemu uživatelskému jménu a získáte i další výhody.",
+ "anonpreviewwarning": "<em>Nejste přihlášen(a). Uložením zveřejníte svou IP adresu v historii této stránky.</em>",
+ "missingsummary": "<strong>Připomenutí:</strong> Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na „{{int:savearticle}}“, bude vaše editace zapsána bez shrnutí.",
+ "selfredirect": "<strong>Upozornění:</strong> Pokoušíte se tuto stránku přesměrovat na sebe samu.\nMožná jste zadali chybný cíl přesměrování, nebo editujete špatnou stránku.\nPokud ještě jednou kliknete na „{{int:savearticle}}“, bude i přesto přesměrování vytvořeno.",
"missingcommenttext": "Zadejte komentář",
- "missingcommentheader": "'''Připomenutí:''' Nezadali jste předmět/nadpis pro tento komentář.\nPokud ještě jednou kliknete na „{{int:savearticle}}“, bude vaše editace zapsána i bez toho.",
+ "missingcommentheader": "<strong>Připomenutí:</strong> Nezadali jste předmět/nadpis pro tento komentář.\nPokud ještě jednou kliknete na „{{int:savearticle}}“, bude vaše editace uložena bez něj.",
"summary-preview": "Náhled shrnutí:",
"subject-preview": "Náhled předmětu/nadpisu:",
+ "previewerrortext": "Při pokusu o zobrazení náhledu vašich změn došlo k chybě.",
"blockedtitle": "Uživatel zablokován",
- "blockedtext": "'''Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.'''\n\nZablokování provedl{{GENDER:$4||a}} $1.\nUdaným důvodem bylo ''$2''.\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 nabídku „Poslat e-mail“, 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:''$2''\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 „Poslat e-mail tomuto uživateli“ nemůžete použít, pokud nemáte ve svém [[Special:Preferences|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.",
+ "blockedtext": "<strong>Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.<strong>\n\nZablokování provedl{{GENDER:$4||a}} $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 nabídku „Poslat e-mail“, 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 „Poslat e-mail tomuto uživateli“ 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.",
"blockednoreason": "důvod nebyl zadán",
"whitelistedittext": "Pro editaci se musíte $1.",
- "confirmedittext": "Pro editaci stránek je vyžadováno potvrzení vaší e-mailové adresy. Na stránce [[Special:Preferences|nastavení]] zadejte a nechte potvrdit svou e-mailovou adresu.",
+ "confirmedittext": "Pro editaci stránek je vyžadováno potvrzení vaší e-mailové adresy.\nNa stránce [[Special:Preferences|nastavení]] zadejte a nechte potvrdit svou e-mailovou adresu.",
"nosuchsectiontitle": "Sekce nenalezena",
"nosuchsectiontext": "Pokoušíte se editovat neexistující sekci.\nMožná byla přesunuta či smazána, zatímco jste si stránku {{GENDER:|prohlížel|prohlížela|prohlíželi}}.",
"loginreqtitle": "Vyžadováno přihlášení",
"loginreqlink": "přihlásit",
"loginreqpagetext": "K prohlížení jiných stránek se musíte $1.",
- "accmailtitle": "Heslo odesláno.",
+ "accmailtitle": "Heslo odesláno",
"accmailtext": "Náhodně vygenerované heslo pro uživatele [[User talk:$1|$1]] bylo odesláno na $2. Po přihlášení ho bude možno změnit na [[Special:ChangePassword|stránce pro změnu hesla]].",
"newarticle": "(Nový)",
"newarticletext": "Následovali jste odkaz na stránku, která dosud neexistuje.\nPokud ji chcete vytvořit, začněte psát do rámečku níže (více informací najdete v [$1 nápovědě]).\nPokud jste zde omylem, stiskněte ve svém prohlížeči tlačítko <strong>Zpět</strong>.",
- "anontalkpagetext": "----''Toto je diskusní stránka anonymního uživatele, který si dosud nevytvořil účet nebo ho nepoužívá. K&nbsp;jeho identifikaci proto musíme používat číselnou IP adresu. Takovou IP adresu může sdílet několik uživatelů. Pokud jste anonymní uživatel a&nbsp;máte za to, že jsou vám adresovány irelevantní komentáře, prosíme, [[Special:UserLogin/signup|vytvořte si účet]] nebo [[Special:UserLogin|se přihlaste]], vyhnete se tím budoucí záměně s&nbsp;jinými anonymními uživateli.''",
+ "anontalkpagetext": "----\n<em>Toto je diskusní stránka anonymního uživatele, který si dosud nevytvořil účet nebo ho nepoužívá.</em>\nK&nbsp;jeho identifikaci proto musíme používat číselnou IP adresu. Takovou IP adresu může sdílet několik uživatelů. Pokud jste anonymní uživatel a&nbsp;máte za to, že jsou vám adresovány irelevantní komentáře, prosíme, [[Special:UserLogin/signup|vytvořte si účet]] nebo [[Special:UserLogin|se přihlaste]], vyhnete se tím budoucí záměně s&nbsp;jinými anonymními uživateli.",
"noarticletext": "Tato stránka zatím neobsahuje žádný text.\nMůžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} prohlédnout si příslušné protokolovací záznamy] nebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} tuto stránku založit]</span>.",
"noarticletext-nopermission": "Tato stránka zatím neobsahuje žádný text.\nMůžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách nebo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} si prohlédnout příslušné protokolovací záznamy]</span>, ale na založení této stránky nemáte oprávnění.",
"missing-revision": "Revize #$1 stránky s názvem „{{FULLPAGENAME}}“ neexistuje.\n\nToto je obvykle způsobeno tím, že jste následovali zastaralý odkaz na historickou verzi stránky, jež byla smazána.\nPodrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} knize smazaných stránek].",
- "userpage-userdoesnotexist": "Uživatelský účet „<nowiki>$1</nowiki>“ není zaregistrován. Zkontrolujte, zda skutečně chcete vytvořit či editovat tuto stránku.",
+ "userpage-userdoesnotexist": "Uživatelský účet „$1“ není zaregistrován.\nZkontrolujte, zda skutečně chcete tuto stránku vytvořit či editovat.",
"userpage-userdoesnotexist-view": "Uživatelský účet „$1“ není zaregistrován.",
"blocked-notice-logextract": "Tento uživatel je momentálně zablokován.\nZde je pro přehled zobrazen nejnovější záznam z knihy zablokování:",
- "clearyourcache": "'''Poznámka:''' Po uložení musíte smazat cache vašeho prohlížeče, jinak změny neuvidíte.\n* '''Firefox / Safari:''' Při kliknutí na ''Aktualizovat'' držte ''Shift'' nebo stiskněte ''Ctrl-F5'' nebo ''Ctrl-R'' (na Macu ''⌘-R'').\n* '''Google Chrome:''' Stiskněte ''Ctrl-Shift-R'' (na Macu ''⌘-Shift-R'').\n* '''Internet Explorer:''' Při kliknutí na ''Aktualizovat'' držte ''Ctrl'' nebo stiskněte ''Ctrl-F5''.\n* '''Opera:''' Smažte obsah cache v menu ''Nástroje → Nastavení''.",
- "usercssyoucanpreview": "'''Tip:''' Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového CSS před uložením.",
- "userjsyoucanpreview": "'''Tip:''' Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového JavaScriptu před uložením.",
- "usercsspreview": "'''Pamatujte, že si prohlížíte jen náhled vašeho uživatelského CSS.'''\n'''Zatím nebylo uloženo!'''",
- "userjspreview": "'''Pamatujte, že testujete a prohlížíte pouze náhled vašeho uživatelského JavaScriptu, dosud nebyl uložen!'''",
- "sitecsspreview": "'''Pamatujte, že si prohlížíte jen náhled tohoto CSS.'''\n'''Zatím nebylo uloženo!'''",
- "sitejspreview": "'''Pamatujte, že testujete a prohlížíte pouze náhled tohoto JavaScriptu.'''\n'''Dosud nebyl uložen!'''",
- "userinvalidcssjstitle": "'''Varování:''' Vzhled „$1“ neexistuje. Nezapomeňte, že uživatelské .css a .js soubory používají malá písmena, např. {{ns:user}}:{{BASEPAGENAME}}/vector.css, nikoli {{ns:user}}:{{BASEPAGENAME}}/Vector.css.",
+ "clearyourcache": "<strong>Poznámka:</strong> Po uložení musíte smazat cache vašeho prohlížeče, jinak změny neuvidíte.\n* <strong>Firefox / Safari:</strong> Při kliknutí na <em>Aktualizovat</em> držte <em>Shift</em> nebo stiskněte <em>Ctrl-F5</em> nebo <em>Ctrl-R</em> (na Macu <em>⌘-R</em>)\n* <strong>Google Chrome:</strong> Stiskněte <em>Ctrl-Shift-R</em> (na Macu <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer:</strong> Při kliknutí na <em>Aktualizovat</em> držte <em>Ctrl</em> nebo stiskněte <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Smažte obsah cache v menu <em>Nástroje → Nastavení</em>",
+ "usercssyoucanpreview": "<strong>Tip:</strong> Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového CSS před uložením.",
+ "userjsyoucanpreview": "<strong>Tip:</strong> Použijte tlačítko „{{int:showpreview}}“ k testování vašeho nového JavaScriptu před uložením.",
+ "usercsspreview": "<strong>Pamatujte, že si prohlížíte jen náhled vašeho uživatelského CSS, jelikož dosud nebyl uložen!</strong>",
+ "userjspreview": "<strong>Pamatujte, že testujete a prohlížíte pouze náhled vašeho uživatelského JavaScriptu, jelikož dosud nebyl uložen!</strong>'",
+ "sitecsspreview": "<strong>Pamatujte, že si prohlížíte jen náhled tohoto CSS, jelikož dosud nebylo uloženo!</strong>",
+ "sitejspreview": "<strong>Pamatujte, že testujete a prohlížíte pouze náhled tohoto JavaScriptu, jelikož dosud nebyl uložen!</strong>",
+ "userinvalidcssjstitle": "<strong>Varování:</strong> Vzhled „$1“ neexistuje. Nezapomeňte, že uživatelské .css a .js soubory používají malá písmena, např. {{ns:user}}:{{BASEPAGENAME}}/vector.css, nikoli {{ns:user}}:{{BASEPAGENAME}}/Vector.css.",
"updated": "(Změna uložena)",
- "note": "'''Poznámka:'''&nbsp;",
- "previewnote": "'''Pamatujte, že toto je pouze náhled.'''\nZměny zatím nebyly uloženy!",
+ "note": "<strong>Poznámka:</strong>",
+ "previewnote": "<strong>Pamatujte, že toto je pouze náhled.</strong>\nZměny dosud nebyly uloženy!",
"continue-editing": "Přejít k editačnímu poli",
"previewconflict": "Tento náhled ukazuje text tak, jak bude vypadat po uložení stránky.",
- "session_fail_preview": "'''Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.\nZkuste to prosím znovu.\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.'''",
- "session_fail_preview_html": "'''Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.'''\n\n''Jelikož má {{SITENAME}} zapnuto používání neomezeného HTML, náhled se kvůli prevenci proti útokům JavaScriptem nezobrazuje.''\n\n'''Pokud jde o zamýšlenou editaci, zkuste to prosím znovu. Pokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.'''",
- "token_suffix_mismatch": "'''Vaše editace byla odmítnuta, protože Váš prohlížeč komolí některé znaky v editovaném textu.\nEditace byla odmítnuta, aby se zabránilo poškození textu stránky.\nToto se někdy může někdy stát, používáte-li chybující webový anonymizér.'''",
- "edit_form_incomplete": "'''Část editačního formuláře nedorazila na server; překontrolujte úplnost změn a zkuste to znovu.'''",
+ "session_fail_preview": "<strong>Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.</strong>\nZkuste to prosím znovu.\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.",
+ "session_fail_preview_html": "<strong>Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.</strong>\n\n<em>Jelikož má {{SITENAME}} zapnuto používání neomezeného HTML, náhled se kvůli prevenci proti útokům JavaScriptem nezobrazuje.</em>\n\n<strong>Pokud jde o zamýšlenou editaci, zkuste to prosím znovu.</strong>\nPokud se tento problém bude opakovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.",
+ "token_suffix_mismatch": "<strong>Vaše editace byla odmítnuta, protože Váš prohlížeč komolí některé znaky v editovaném textu.</strong>\nEditace byla odmítnuta, aby se zabránilo poškození textu stránky.\nToto se někdy může stát, používáte-li chybující webový anonymizér.",
+ "edit_form_incomplete": "<strong>Část editačního formuláře nedorazila na server; překontrolujte úplnost změn a zkuste to znovu.</strong>",
"editing": "Editace stránky $1",
"creating": "Vytváření $1",
"editingsection": "Editace stránky $1 (část)",
"editingcomment": "Editace stránky $1 (nová sekce)",
"editconflict": "Editační konflikt: $1",
- "explainconflict": "Někdo změnil stránku po započetí vaší editace.\nVýše vidíte aktuální text stránky.\nVaše změny jsou uvedeny dole.\nMusíte sloučit své změny se stávajícím textem.\n'''Pouze''' výše uvedený text zůstane uchován po kliknutí na „{{int:savearticle}}“.",
+ "explainconflict": "Někdo změnil stránku po započetí vaší editace.\nVýše vidíte aktuální text stránky.\nVaše změny jsou uvedeny dole.\nMusíte sloučit své změny se stávajícím textem.\n<strong>Pouze</strong> výše uvedený text zůstane uchován po kliknutí na „{{int:savearticle}}“.",
"yourtext": "Váš text",
"storedversion": "Uložená verze",
- "nonunicodebrowser": "'''UPOZORNĚNÍ: Váš prohlížeč není schopen pracovat se znaky Unicode. Abyste mohli tuto stránku bezpečně editovat, je použita pomůcka: všechny znaky mimo ASCII jsou zobrazeny v hexadecimálních kódech.'''",
+ "nonunicodebrowser": "<strong>UPOZORNĚNÍ: Váš prohlížeč není schopen pracovat se znaky Unicode.</strong>\nAbyste mohli tuto stránku bezpečně editovat, je použita pomůcka: všechny znaky mimo ASCII jsou v editačním poli zobrazeny v hexadecimálních kódech.",
"editingold": "'''VAROVÁNÍ: Nyní editujete zastaralou verzi této stránky. Když ji uložíte, všechny pozdější změny se ztratí.'''",
"yourdiff": "Rozdíly",
"copyrightwarning": "Všechny příspěvky do {{grammar:2sg|{{SITENAME}}}} jsou zveřejňovány podle $2 (podrobnosti najdete na $1).\nPokud si nepřejete, aby váš text byl nemilosrdně upravován a volně šířen, pak ho do {{grammar:2sg|{{SITENAME}}}} neukládejte.<br />\nUložením příspěvku se zavazujete, že je vaším dílem nebo je zkopírován ze zdrojů, které nejsou chráněny autorským právem (tzv. <em>public domain</em>).\n'''NEVKLÁDEJTE DÍLA CHRÁNĚNÁ AUTORSKÝM PRÁVEM BEZ DOVOLENÍ!'''",
@@ -669,6 +682,10 @@
"content-model-text": "čistý text",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Prázdný objekt",
+ "content-json-empty-array": "Prázdné pole",
+ "duplicate-args-category": "Stránky s duplicitními argumenty ve voláních šablon",
+ "duplicate-args-category-desc": "Stránka obsahuje volání šablony, které používá duplicitní argumenty, např. <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> nebo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Varování:''' Tato stránka obsahuje příliš mnoho volání výkonnostně náročných funkcí syntaktického analyzátoru.\n\nPovolený limit je $2, v současné chvíli však {{PLURAL:$1|zde jedno volání je|zde jsou $1 volání|zde je $1 volání}}.",
"expensive-parserfunction-category": "Stránky s příliš mnoho voláními náročných funkcí syntaktického analyzátoru",
"post-expand-template-inclusion-warning": "Varování: Objem vkládaných šablon je příliš velký.\nNěkteré šablony nebudou vloženy.",
@@ -723,7 +740,7 @@
"history-feed-empty": "Požadovaná stránka neexistuje.\nMohla být smazána či přejmenována.\nZkuste [[Special:Search|hledání]].",
"rev-deleted-comment": "(shrnutí editace odstraněno)",
"rev-deleted-user": "(uživatelské jméno odstraněno)",
- "rev-deleted-event": "(záznam odstraněn)",
+ "rev-deleted-event": "(podrobnosti odstraněny)",
"rev-deleted-user-contribs": "[uživatelské jméno nebo IP adresa odstraněny – editace v příspěvcích skryta]",
"rev-deleted-text-permission": "Tato revize byla '''smazána'''.\nPodrobnosti mohou být uvedeny v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} knize smazaných stránek].",
"rev-suppressed-text-permission": "Tato revize byla <strong>utajena</strong>. Podrobnosti jsou uvedeny v [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} knize utajení].",
@@ -757,7 +774,7 @@
"revdelete-legend": "Nastavit omezení viditelnosti",
"revdelete-hide-text": "Text revize",
"revdelete-hide-image": "Skrýt obsah souboru",
- "revdelete-hide-name": "Skrýt událost a cíl",
+ "revdelete-hide-name": "Skrýt cíl a parametry",
"revdelete-hide-comment": "Shrnutí editace",
"revdelete-hide-user": "Uživatelské jméno / IP adresa",
"revdelete-hide-restricted": "Utajit data i před správci",
@@ -811,7 +828,6 @@
"mergehistory-same-destination": "Zdrojová a cílová stránka se nemůžou shodovat",
"mergehistory-reason": "Důvod:",
"mergelog": "Kniha slučování",
- "pagemerge-logentry": "slučuje stránku [[$1]] se stránkou [[$2]] (verze do $3)",
"revertmerge": "Zrušit sloučení",
"mergelogpagetext": "Níže je seznam nejnovějších sloučení historie jedné stránky s jinou.",
"history-title": "Historie verzí stránky „$1“",
@@ -831,9 +847,11 @@
"searchresults-title": "Výsledky hledání „$1“",
"titlematches": "Stránky s odpovídajícím názvem",
"textmatches": "Stránky s odpovídajícím textem",
- "notextmatches": "Žádné stránky textem neodpovídají.",
+ "notextmatches": "Žádná stránka s tímto textem nebyla nalezena",
"prevn": "$1 {{PLURAL:$1|předchozí|předchozí|předchozích}}",
"nextn": "$1 {{PLURAL:$1|následující|následující|následujících}}",
+ "prev-page": "předchozí stránka",
+ "next-page": "další stránka",
"prevn-title": "{{PLURAL:$1|Předchozí výsledek|Předchozí $1 výsledky|Předchozích $1 výsledků}}",
"nextn-title": "{{PLURAL:$1|Následující výsledek|Následující $1 výsledky|Následujících $1 výsledků}}",
"shown-title": "Zobrazit $1 {{PLURAL:$1|výsledek|výsledky|výsledků}} na stránku",
@@ -852,6 +870,7 @@
"search-result-category-size": "{{PLURAL:$1|1 položka|$1 položky|$1 položek}} ({{PLURAL:$2|1 podkategorie|$2 podkategorie|$2 podkategorií}}, {{PLURAL:$3|1 soubor|$3 soubory|$3 souborů}})",
"search-redirect": "(přesměrování $1)",
"search-section": "(část $1)",
+ "search-category": "(kategorie $1)",
"search-file-match": "(odpovídá obsahu souboru)",
"search-suggest": "Mysleli jste: $1",
"search-interwiki-caption": "Sesterské projekty",
@@ -885,6 +904,11 @@
"prefs-personal": "Údaje o uživateli",
"prefs-rc": "Poslední změny",
"prefs-watchlist": "Sledované stránky",
+ "prefs-editwatchlist": "Editovat seznam sledovaných stránek",
+ "prefs-editwatchlist-label": "Editovat položky vašeho seznamu sledovaných stránek:",
+ "prefs-editwatchlist-edit": "Zobrazit a odebrat položky vašeho seznamu sledovaných stránek",
+ "prefs-editwatchlist-raw": "Editovat textový soubor sledovaných stránek",
+ "prefs-editwatchlist-clear": "Vyprázdnit seznam sledovaných stránek",
"prefs-watchlist-days": "Počet dní zobrazených ve sledovaných stránkách:",
"prefs-watchlist-days-max": "Maximálně $1 {{PLURAL:$1|den|dny|dní}}",
"prefs-watchlist-edits": "Počet editací zobrazených ve zdokonalených sledovaných stránkách:",
@@ -954,7 +978,7 @@
"gender-female": "Ona upravila článek.",
"prefs-help-gender": "Toto nastavení je nepovinné.\nSoftware ho používá pro volbu gramatického rodu, když vás oslovuje nebo vás zmiňuje.\nTato informace je veřejná.",
"email": "E-mail",
- "prefs-help-realname": "Skutečné jméno je nepovinné.\nPokud se ho rozhodnete uvést, bude použito pro označení autorství vaší práce.",
+ "prefs-help-realname": "Skutečné jméno je nepovinné.\nPokud ho uvedete, může být použito pro označení autorství vaší práce.",
"prefs-help-email": "Uvedení e-mailu není povinné, ale umožní zaslání nového hesla v případě, že své heslo zapomenete.",
"prefs-help-email-others": "Také můžete dovolit ostatním uživatelům vás prostřednictvím uživatelské stránky kontaktovat.\nVaše adresa v takovém případě není prozrazena.",
"prefs-help-email-required": "Je vyžadována e-mailová adresa.",
@@ -1061,6 +1085,7 @@
"right-protect": "Měnění úrovně zámku a editace kaskádově zamčených stránek",
"right-editprotected": "Editace stránek zamčených na „{{int:protect-level-sysop}}“",
"right-editsemiprotected": "Editace stránek zamčených na „{{int:protect-level-autoconfirmed}}“",
+ "right-editcontentmodel": "Editace modelu obsahu stránky",
"right-editinterface": "Editace zpráv uživatelského rozhraní",
"right-editusercssjs": "Editace CSS a JS souborů jiných uživatelů",
"right-editusercss": "Editace CSS souborů jiných uživatelů",
@@ -1088,6 +1113,7 @@
"right-override-export-depth": "Exportovat stránky včetně odkazovaných stránek až do hloubky 5",
"right-sendemail": "Odesílání e-mailů ostatním uživatelům",
"right-passwordreset": "Prohlížení e-mailů pro znovunastavení hesla",
+ "right-managechangetags": "Vytváření [[Special:Tags|značek]] a jejich mazání z databáze",
"newuserlogpage": "Kniha nových uživatelů",
"newuserlogpagetext": "Toto je záznam nově zaregistrovaných uživatelů.",
"rightslog": "Kniha práv uživatelů",
@@ -1133,6 +1159,8 @@
"action-viewmywatchlist": "prohlížet vlastní seznam sledovaných stránek",
"action-viewmyprivateinfo": "prohlížet si své soukromé údaje",
"action-editmyprivateinfo": "změnit své soukromé údaje",
+ "action-editcontentmodel": "editovat model obsahu stránky",
+ "action-managechangetags": "vytvářet a mazat značky z databáze",
"nchanges": "$1 {{PLURAL:$1|změna|změny|změn}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od poslední návštěvy}}",
"enhancedrc-history": "historie",
@@ -1203,9 +1231,9 @@
"uploaderror": "Při načítání došlo k chybě",
"upload-recreate-warning": "'''Upozornění: Soubor pod tímto názvem byl dříve smazán či přejmenován.'''\n\nZde je pro přehled zobrazen soupis mazání a přesunů této stránky:",
"uploadtext": "Níže uvedený formulář slouží k načtení souborů. Již načtené soubory si můžete prohlížet a hledat pomocí [[Special:FileList|seznamu načtených souborů]], každé načtení se také zaznamenává do [[Special:Log/upload|knihy nahrávek]], smazání jsou v [[Special:Log/delete|knize smazaných stránek]].\n\nPro vložení obrázku do stránky použijte jeden z následujících způsobů zápisu:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Soubor.jpg]]</nowiki></code>''' do stránky vloží celý obrázek,\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Soubor.png|thumb|left|Popisek]]</nowiki></code>''' vloží náhled v rámečku zarovnaném na levý okraj, s popiskem „Popisek“,\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Soubor.ogg]]</nowiki></code>''' vloží přímý odkaz na soubor, aniž by se ten na stránce zobrazoval.",
- "upload-permitted": "Povolené formáty souborů: $1.",
- "upload-preferred": "Upřednostňované formáty souborů: $1.",
- "upload-prohibited": "Zakázané formáty souborů: $1.",
+ "upload-permitted": "{{PLURAL:$2|Povolený formát|Povolené formáty}} souborů: $1.",
+ "upload-preferred": "{{PLURAL:$2|Upřednostňovaný formát|Upřednostňované formáty}} souborů: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Zakázaný formát|Zakázané formáty}} souborů: $1.",
"uploadlogpage": "Kniha nahrávek",
"uploadlogpagetext": "Níže najdete seznam nejnovějších souborů.",
"filename": "Soubor",
@@ -1464,7 +1492,6 @@
"statistics": "Statistika",
"statistics-header-pages": "Statistika stránek",
"statistics-header-edits": "Statistika editací",
- "statistics-header-views": "Statistika zobrazení",
"statistics-header-users": "O uživatelích",
"statistics-header-hooks": "Další statistiky",
"statistics-articles": "Obsahové stránky",
@@ -1473,13 +1500,9 @@
"statistics-files": "Načtené soubory",
"statistics-edits": "Počet editací od založení wiki",
"statistics-edits-average": "Průměrný počet editací na stránku",
- "statistics-views-total": "Celkový počet zobrazení",
- "statistics-views-total-desc": "Zobrazení neexistujících a speciálních stránek se nepočítají",
- "statistics-views-peredit": "Počet zobrazení na editaci",
"statistics-users": "Registrovaní [[Special:ListUsers|uživatelé]]",
"statistics-users-active": "Aktivní uživatelé",
"statistics-users-active-desc": "Uživatelé, kteří v {{PLURAL:$1|posledním dni|posledních $1 dnech}} provedli nějakou operaci",
- "statistics-mostpopular": "Nejčtenější stránky",
"pageswithprop": "Stránky s vlastností",
"pageswithprop-legend": "Stránky s vlastností",
"pageswithprop-text": "Tato stránka obsahuje seznam stránek, které používají zadanou vlastnost stránky.",
@@ -1520,9 +1543,9 @@
"uncategorizedtemplates": "Nekategorizované šablony",
"unusedcategories": "Nepoužívané kategorie",
"unusedimages": "Nepoužívané soubory",
- "popularpages": "Nejnavštěvovanější stránky",
"wantedcategories": "Chybějící kategorie",
"wantedpages": "Chybějící stránky",
+ "wantedpages-summary": "Seznam neexistujících stránek, na které vede nejvíce odkazů, kromě stránek, na které odkazují jen přesměrování. Pro seznam neexistujících stránek, na které odkazují přesměrování, vizte stránku [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Výsledky obsahují neplatný název: $1",
"wantedfiles": "Chybějící soubory",
"wantedfiletext-cat": "Následující soubory se používají, ale neexistují. Soubory ze vzdálených úložišť zde mohou být uvedeny, přestože existují. Taková falešná pozitiva budou zobrazena <del>přeškrtnutě</del>. Stránky, které vkládají neexistující soubory, jsou navíc uvedeny v [[:$1]].",
@@ -1582,9 +1605,11 @@
"pager-older-n": "{{PLURAL:$1|1 starší|$1 starší|$1 starších}}",
"suppress": "Dozor",
"querypage-disabled": "Tato speciální stránka je z výkonnostních důvodů vypnuta.",
+ "apihelp": "Nápověda k API",
+ "apihelp-no-such-module": "Modul „$1“ nebyl nalezen.",
"booksources": "Zdroje knih",
"booksources-search-legend": "Vyhledat knižní zdroje",
- "booksources-go": "Vyhledat",
+ "booksources-search": "Hledat",
"booksources-text": "Níže je seznam odkazů na servery prodávající knihy, nebo které mohou mít další informace o knihách, které hledáte.",
"booksources-invalid-isbn": "Zadané ISBN se zdá být neplatné. Zkontrolujte jej s originálním zdrojem.",
"specialloguserlabel": "Původce:",
@@ -1641,7 +1666,7 @@
"listgrouprights-key": "Legenda:\n* <span class=\"listgrouprights-granted\">Udělená práva</span>\n* <span class=\"listgrouprights-revoked\">Odebraná práva</span>",
"listgrouprights-group": "Skupina",
"listgrouprights-rights": "Práva",
- "listgrouprights-helppage": "Help:Práva skupiny",
+ "listgrouprights-helppage": "Help:Práva uživatelských skupin",
"listgrouprights-members": "(seznam členů)",
"listgrouprights-addgroup": "Přidávání uživatelů do {{PLURAL:$2|skupiny|skupin}} $1",
"listgrouprights-removegroup": "Vyřazování uživatelů ze {{PLURAL:$2|skupiny|skupin}} $1",
@@ -1662,7 +1687,7 @@
"noindex-category-desc": "Stránka není indexována roboty, protože obsahuje kouzelné slovo <code><nowiki>__NOINDEX__</nowiki></code> a je ve jmenném prostoru, ve kterém je tento příznak dovolen.",
"index-category-desc": "Stránka obsahuje kouzelné slovo <code><nowiki>__INDEX__</nowiki></code> (a je ve jmenném prostoru, ve kterém je tento příznak dovolen), takže je indexována roboty, přestože by normálně nebyla.",
"post-expand-template-inclusion-category-desc": "Stránka je po rozbalení všech šablon větší než <code>$wgMaxArticleSize</code>, takže některé šablony rozbaleny nebyly.",
- "post-expand-template-argument-category-desc": "Stránka je po rozbalení argumentu šablony (něco v trojitých závorkách, např. <code>{{{Foo}}})</code> větší než <code>$wgMaxArticleSize</code>.",
+ "post-expand-template-argument-category-desc": "Stránka je po rozbalení argumentu šablony (něco v trojitých závorkách, např. <code>{{{Foo}}}</code>) větší než <code>$wgMaxArticleSize</code>.",
"expensive-parserfunction-category-desc": "Stránka používá příliš mnoho náročných funkcí syntaktického analyzátoru (jako <code>#ifexist</code>). Vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
"broken-file-category-desc": "Stránka obsahuje nefunkční odkaz na soubor (odkaz pro vložení souboru, který neexistuje).",
"hidden-category-category-desc": "Kategorie ve svém textu obsahuje <code><nowiki>__HIDDENCAT__</nowiki></code>, což způsobuje, že se na stránkách implicitně nezobrazuje v rámečku odkazů na kategorie.",
@@ -1695,7 +1720,7 @@
"emailccsubject": "Kopie Vaší zprávy pro uživatele $1: $2",
"emailsent": "E-mail odeslán",
"emailsenttext": "Váš e-mail byl odeslán.",
- "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „Poslat e-mail“; odeslal ho uživatel $1 uživateli $2",
+ "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „{{int:emailpage}}“; {{GENDER:$1|odeslal ho uživatel|odeslala ho uživatelka}} $1 {{GENDER:$2|uživateli|uživatelce}} $2.",
"usermessage-summary": "Doručena zpráva od systému.",
"usermessage-editor": "Systémový poslíček",
"watchlist": "Sledované stránky",
@@ -1720,7 +1745,7 @@
"wlheader-enotif": "Upozorňování e-mailem je zapnuto.",
"wlheader-showupdated": "Stránky, které se změnily od vaší poslední návštěvy, jsou zobrazeny '''tučně'''.",
"wlnote": "Níže {{PLURAL:$1|je poslední změna|jsou poslední <strong>$1</strong> změny|je posledních <strong>$1</strong> změn}} za {{PLURAL:$2|poslední hodinu|poslední <strong>$2</strong> hodiny|posledních <strong>$2</strong> hodin}} do $4, $3.",
- "wlshowlast": "Ukázat posledních $1 hodin $2 dnů $3",
+ "wlshowlast": "Ukázat posledních $1 hodin $2 dnů",
"watchlist-options": "Možnosti sledovaných stránek",
"watching": "Přidávám na seznam sledovaných stránek…",
"unwatching": "Odebírám ze seznamu sledovaných stránek…",
@@ -1769,7 +1794,6 @@
"deleteprotected": "Tuto stránku nemůžete smazat, protože je zamčena.",
"deleting-backlinks-warning": "'''Upozornění:''' Stránka, kterou se chystáte smazat, je [[Special:WhatLinksHere/{{FULLPAGENAME}}|na jiných stránkách]] odkazována nebo je do nich vložena.",
"rollback": "Vrátit zpět editace",
- "rollback_short": "Vrátit zpět",
"rollbacklink": "vrácení zpět",
"rollbacklinkcount": "vrácení $1 {{PLURAL:$1|editace|editací}} zpět",
"rollbacklinkcount-morethan": "vrácení více než $1 {{PLURAL:$1|editace|editací}} zpět",
@@ -1879,6 +1903,7 @@
"namespace": "Jmenný prostor:",
"invert": "Obrátit výběr",
"tooltip-invert": "Zaškrtnutím tohoto políčka skryjete změny stránek ve zvoleném jmenném prostoru (a souvisejícím jmenném prostoru, pokud je zaškrtnuto)",
+ "tooltip-whatlinkshere-invert": "Zaškrtnutím tohoto políčka skryjete odkazy ze stránek ve zvoleném jmenném prostoru.",
"namespace_association": "Související jmenný prostor",
"tooltip-namespace_association": "Zaškrtnutím tohoto políčka zahrnete i diskusní či obsahový jmenný prostor příslušný k vybranému jmennému prostoru",
"blanknamespace": "(Hlavní)",
@@ -2070,7 +2095,7 @@
"movepage-moved-noredirect": "Přesměrování nebylo vytvořeno.",
"articleexists": "Takto nazvaná stránka již existuje, nebo Vámi zvolený název je neplatný. Zvolte jiný název.",
"cantmove-titleprotected": "Stránku nelze přesunout na zadané místo, protože název je uzamčen proti vytváření",
- "movetalk": "Přesunout příslušnou diskusní stránku",
+ "movetalk": "Přesunout související diskusní stránku",
"move-subpages": "Přesunout i podstránky (maximálně $1)",
"move-talk-subpages": "Přesunout i podstránky diskusní stránky (maximálně $1)",
"movepage-page-exists": "Stránka $1 již existuje a nemůže být automaticky přepsána.",
@@ -2143,14 +2168,15 @@
"thumbnail-temp-create": "Dočasný soubor náhledu nelze vytvořit.",
"thumbnail-dest-create": "Náhled nelze uložit na dané místo.",
"thumbnail_invalid_params": "Neplatný parametr náhledu",
+ "thumbnail_toobigimagearea": "Soubor s rozměry většími než $1",
"thumbnail_dest_directory": "Nelze vytvořit cílový adresář",
"thumbnail_image-type": "Nepodporovaný typ obrázku",
"thumbnail_gd-library": "Neúplná konfigurace knihovny GD: chybí funkce $1",
"thumbnail_image-missing": "Soubor patrně chybí: $1",
"thumbnail_image-failure-limit": "V poslední době došlo k příliš mnoha neúspěšným pokusům (nejméně $1) o vytvoření tohoto náhledu. Zkuste to později.",
"import": "Import stránek",
- "importinterwiki": "Import mezi wiki",
- "import-interwiki-text": "Pro import zvolte zdrojovou wiki a název stránky. Data revizí a jména autorů budou zachována. Všechny importy se zaznamenávají do [[Special:Log/import|knihy importů]].",
+ "importinterwiki": "Import z jiné wiki",
+ "import-interwiki-text": "Zvolte zdrojovou wiki a název stránky, která se má importovat.\nZachovají se data revizí a jména autorů.\nVšechny importy z jiných wiki se zaznamenávají do [[Special:Log/import|knihy importů]].",
"import-interwiki-sourcewiki": "Zdrojová wiki:",
"import-interwiki-sourcepage": "Zdrojová stránka:",
"import-interwiki-history": "Zkopírovat všechny historické verze této stránky",
@@ -2170,7 +2196,7 @@
"importcantopen": "Nepodařilo se otevřít importní soubor",
"importbadinterwiki": "Neplatný interwiki odkaz",
"importsuccess": "Import skončil!",
- "importnosources": "Nebyly definovány žádné zdroje pro import mezi wiki a přímé načítání historie je vypnuto.",
+ "importnosources": "Nebyly definovány žádné wiki, ze kterých by šlo importovat, a přímé načítání historie je vypnuto.",
"importnofile": "Nebyl načten importní soubor.",
"importuploaderrorsize": "Nepodařilo se načíst importní soubor. Soubor je větší než povolená velikost.",
"importuploaderrorpartial": "Nepodařilo se načíst importní soubor. Soubor byl načten jen částečně.",
@@ -2186,7 +2212,7 @@
"import-error-create": "Stránka „$1“ se nenaimportovala, protože nemáte oprávnění ji založit.",
"import-error-interwiki": "Stránka „$1“ se nenaimportovala, protože její název je vyhrazen pro externí odkazy (interwiki).",
"import-error-special": "Stránka „$1“ se nenaimportovala, protože patří do speciálního jmenného prostoru, ve kterém stránky být nemohou.",
- "import-error-invalid": "Stránka „$1“ se nenaimportovala, protože název, do kterého by se naimportovala, je na této wiki nepoužitelný.",
+ "import-error-invalid": "Stránka „$1“ se nenaimportovala, protože název, pod kterým by se naimportovala, je na této wiki nepoužitelný.",
"import-error-unserialize": "Nepodařilo se deserializovat revizi $2 stránky „$1“. Revize měla používat model obsahu $3 serializovaný jako $4.",
"import-error-bad-location": "Revizi $2 používající obsahový model $3 nelze uložit na \"$1\" na této wiki, neboť tento model není na této stránce podporován.",
"import-options-wrong": "{{PLURAL:$2|Chybná volba|Chybné volby}}: <nowiki>$1</nowiki>",
@@ -2194,18 +2220,15 @@
"import-rootpage-nosubpage": "Ve jmenném prostoru „$1“ kořenové stránky nejsou dovoleny podstránky.",
"importlogpage": "Kniha importů",
"importlogpagetext": "Na této stránce se zobrazují správcovské importy stránek včetně historie editací z jiných wiki.",
- "import-logentry-upload": "naimportoval [[$1]] načtením souboru",
"import-logentry-upload-detail": "{{PLURAL:$1|naimportována $1 revize|naimportovány $1 revize|naimportováno $1 revizí}}",
- "import-logentry-interwiki": "přenesl $1",
"import-logentry-interwiki-detail": "{{PLURAL:$1|naimportována $1 revize|naimportovány $1 revize|naimportováno $1 revizí}} z $2",
"javascripttest": "Testování JavaScriptu",
- "javascripttest-title": "Spouštějí se testy v $1",
"javascripttest-pagetext-noframework": "Tato stránka je vyhrazena pro spouštění testů JavaScriptu.",
"javascripttest-pagetext-unknownframework": "Neznámá testovací knihovna „$1“.",
+ "javascripttest-pagetext-unknownaction": "Neznámá akce „$1“.",
"javascripttest-pagetext-frameworks": "Zvolte jednu z následujících testovacích knihoven: $1",
"javascripttest-pagetext-skins": "Zvolte vzhled, pod kterým se mají testy spustit:",
"javascripttest-qunit-intro": "Vizte [$1 dokumentaci testování] na mediawiki.org",
- "javascripttest-qunit-heading": "Sada testů JavaScriptu v MediaWiki pomocí QUnit",
"tooltip-pt-userpage": "Vaše uživatelská stránka",
"tooltip-pt-anonuserpage": "Uživatelská stránka pro IP adresu, ze které editujete",
"tooltip-pt-mytalk": "Vaše diskusní stránka",
@@ -2215,6 +2238,7 @@
"tooltip-pt-mycontris": "Seznam vašich příspěvků",
"tooltip-pt-login": "Doporučujeme vám přihlásit se, ovšem není to povinné.",
"tooltip-pt-logout": "Odhlásit se",
+ "tooltip-pt-createaccount": "Doporučujeme vytvořit si účet a přihlásit se, není to však povinné",
"tooltip-ca-talk": "Diskuse ke stránce",
"tooltip-ca-edit": "Tuto stránku můžete editovat. Prosíme použijte tlačítko Ukázat náhled před uložením.",
"tooltip-ca-addsection": "Začít novou sekci",
@@ -2244,6 +2268,7 @@
"tooltip-feed-atom": "Atom kanál pro tuto stránku",
"tooltip-t-contributions": "Prohlédnout si seznam příspěvků tohoto uživatele",
"tooltip-t-emailuser": "Poslat e-mail tomuto uživateli",
+ "tooltip-t-info": "Více informací o této stránce",
"tooltip-t-upload": "Nahrát obrázky či jiná multimédia",
"tooltip-t-specialpages": "Seznam všech speciálních stránek",
"tooltip-t-print": "Tato stránka v podobě vhodné k tisku",
@@ -2320,7 +2345,6 @@
"pageinfo-robot-policy": "Indexování roboty",
"pageinfo-robot-index": "Dovoleno",
"pageinfo-robot-noindex": "Zakázáno",
- "pageinfo-views": "Počet zobrazení",
"pageinfo-watchers": "Počet sledujících",
"pageinfo-few-watchers": "Méně než $1 {{PLURAL:$1|sledující|sledující|sledujících}}",
"pageinfo-redirects-name": "Počet přesměrování na tuto stránku",
@@ -2770,7 +2794,6 @@
"exif-urgency-low": "Nízká ($1)",
"exif-urgency-high": "Vysoká ($1)",
"exif-urgency-other": "Uživatelsky definovaná ($1)",
- "watchlistall2": "všechny",
"namespacesall": "všechny",
"monthsall": "všechny",
"confirmemail": "Potvrzení e-mailové adresy",
@@ -2909,9 +2932,9 @@
"hebrew-calendar-m11-gen": "avu",
"hebrew-calendar-m12-gen": "elulu",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskuse]])",
- "unknown_extension_tag": "Neznámá značka rozšíření: „$1“",
"duplicate-defaultsort": "Upozornění: Implicitní klíč řazení (DEFAULTSORTKEY) „$2“ přepisuje dříve nastavenou hodnotu „$1“.",
"duplicate-displaytitle": "<strong>Upozornění:</strong> Předchozí zobrazovaný název „$1“ je nahrazen zobrazovaným názvem „$2“.",
+ "invalid-indicator-name": "<strong>Chyba:</strong> Atribut <code>name</code> indikátoru stavu stránky nesmí být prázdný.",
"version": "Verze",
"version-extensions": "Nainstalovaná rozšíření",
"version-skins": "Nainstalované vzhledy",
@@ -2953,6 +2976,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Cesta k článkům]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Cesta ke skriptům]",
+ "version-libraries": "Nainstalované knihovny",
+ "version-libraries-library": "Knihovna",
+ "version-libraries-version": "Verze",
"redirect": "Přesměrování podle souboru, uživatele, stránky nebo ID revize",
"redirect-legend": "Přesměrování na soubor či stránku",
"redirect-summary": "Tato speciální stránka přesměrovává na soubor (podle názvu), stránku (podle ID stránky nebo revize) nebo uživatele (podle číselného uživatelského ID). Použití: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] nebo [[{{#Special:Redirect}}/user/101]].",
@@ -2988,6 +3014,7 @@
"specialpages-group-wiki": "Nástroje a data",
"specialpages-group-redirects": "Přesměrovávací speciální stránky",
"specialpages-group-spam": "Protispamové nástroje",
+ "specialpages-group-developer": "Vývojářské nástroje",
"blankpage": "Prázdná stránka",
"intentionallyblankpage": "Tato stránka je úmyslně prázdná. Používá se na měření výkonnosti atd.",
"external_image_whitelist": " #Tuto řádku ponechte beze změny.<pre>\n#Níže uveďte fragmenty regulárních výrazů (pouze část mezi //).\n#Tyto výrazy se aplikují na URL vkládaných externích obrázků.\n#Ty, které vyhoví, se zobrazí jako obrázek; ostatní pouze jako externí odkaz.\n#Řádky začínající znakem # se považují za komentáře.\n#Na velikosti písmen nezáleží.\n\n#Všechny regulární výrazy uveďte nad touto řádkou. Tuto řádku ponechte beze změny.</pre>",
@@ -3000,12 +3027,54 @@
"tags-tag": "Název značky",
"tags-display-header": "Zobrazení na seznamech změn",
"tags-description-header": "Úplný popis významu",
+ "tags-source-header": "Zdroj",
"tags-active-header": "Aktivní?",
"tags-hitcount-header": "Označené změny",
+ "tags-actions-header": "Akce",
"tags-active-yes": "Ano",
"tags-active-no": "Ne",
+ "tags-source-extension": "Definována rozšířením",
+ "tags-source-manual": "Přidávána ručně uživateli a boty",
+ "tags-source-none": "Už nepoužívána",
"tags-edit": "editovat",
+ "tags-delete": "smazat",
+ "tags-activate": "aktivovat",
+ "tags-deactivate": "deaktivovat",
"tags-hitcount": "$1 {{PLURAL:$1|změna|změny|změn}}",
+ "tags-manage-no-permission": "Nemáte oprávnění spravovat značky pro změny.",
+ "tags-create-heading": "Vytvořit novou značku",
+ "tags-create-explanation": "Nově vytvořené značky jsou implicitně k dispozici uživatelům a botům.",
+ "tags-create-tag-name": "Název značky:",
+ "tags-create-reason": "Důvod:",
+ "tags-create-submit": "Vytvořit",
+ "tags-create-no-name": "Musíte uvést název značky.",
+ "tags-create-invalid-chars": "Názvy značek nesmí obsahovat čárky (<code>,</code>) ani dopředná lomítka (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Názvy značek nesmí obsahovat znaky, které nelze používat v názvech stránek.",
+ "tags-create-already-exists": "Značka „$1“ již existuje.",
+ "tags-create-warnings-above": "Při pokusu o vytvoření značky „$1“ {{PLURAL:$1|bylo zjištěno|byla zjištěna}} následující varování:",
+ "tags-create-warnings-below": "Chcete i přesto značku vytvořit?",
+ "tags-delete-title": "Smazat značku",
+ "tags-delete-explanation-initial": "Chystáte se smazat značku „$1“ z databáze.",
+ "tags-delete-explanation-in-use": "Bude odstraněna z {{PLURAL:$2|$2 revize nebo protokolovacího záznamu|$2 revizí nebo protokolovacích záznamů}}, kde je momentálně přiřazena.",
+ "tags-delete-explanation-warning": "Tato akce je <strong>nevratná</strong> a <strong>nelze ji vrátit</strong>, ani databázovými správci. Ujistěte se, že toto je značka, kterou chcete smazat.",
+ "tags-delete-explanation-active": "<strong>Značka „$1“ je stále aktivní a bude se i nadále přidávat.</strong> Abyste tomu zabránili, přejděte na místo či místa, kde se značka používá, a vypněte ji tam.",
+ "tags-delete-reason": "Důvod:",
+ "tags-delete-submit": "Nevratně smazat tuto značku",
+ "tags-delete-not-allowed": "Značky definované rozšířeními nelze smazat, leda by to příslušné rozšíření výslovně umožnilo.",
+ "tags-delete-not-found": "Značka „$1“ neexistuje.",
+ "tags-delete-too-many-uses": "Značkou „$1“ {{PLURAL:$2|je označena více než $2 revize|jsou označeny více než $2 revize|je označeno více než $2 revizí}}, což znamená, že ji nelze smazat.",
+ "tags-delete-warnings-after-delete": "Značka „$1“ byla úspěšně smazána, ale {{PLURAL:$1|bylo zjištěno|byla zjištěna}} následující varování:",
+ "tags-activate-title": "Aktivovat značku",
+ "tags-activate-question": "Chystáte se aktivovat značku „$1“.",
+ "tags-activate-reason": "Důvod:",
+ "tags-activate-not-allowed": "Značku „$1“ nelze aktivovat.",
+ "tags-activate-not-found": "Značka „$1“ neexistuje.",
+ "tags-activate-submit": "Aktivovat",
+ "tags-deactivate-title": "Deaktivovat značku",
+ "tags-deactivate-question": "Chystáte se deaktivovat značku „$1“.",
+ "tags-deactivate-reason": "Důvod:",
+ "tags-deactivate-not-allowed": "Značku „$1“ nelze deaktivovat.",
+ "tags-deactivate-submit": "Deaktivovat",
"comparepages": "Porovnání stránek",
"compare-page1": "Stránka 1",
"compare-page2": "Stránka 2",
@@ -3017,8 +3086,8 @@
"compare-revision-not-exists": "Zadaná revize neexistuje.",
"dberr-problems": "Promiňte! Tento server má v tuto chvíli technické problémy.",
"dberr-again": "Zkuste několik minut počkat a poté znovu načíst stránku.",
- "dberr-info": "(Nelze navázat spojení s databázovým serverem: $1)",
- "dberr-info-hidden": "(Nelze navázat spojení s databázovým serverem)",
+ "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í.",
@@ -3059,6 +3128,14 @@
"revdelete-uname-unhid": "odkryto uživatelské jméno",
"revdelete-restricted": "omezení správců použito",
"revdelete-unrestricted": "omezení správců odstraněno",
+ "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-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",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|naimportoval|naimportovala}} $3 z jiné wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|sloučil|sloučila}} stránku $3 do $4 (revize po $5)",
"logentry-move-move": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 bez založení přesměrování",
"logentry-move-move_redir": "$1 {{GENDER:$2|přesunul|přesunula}} stránku $3 na $4 s výměnou přesměrování",
@@ -3076,20 +3153,35 @@
"logentry-upload-upload": "$1 {{GENDER:$2|načetl|načetla}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|načetl|načetla}} novou verzi $3",
"logentry-upload-revert": "$1 {{GENDER:$2|načetl|načetla}} $3",
+ "log-name-managetags": "Kniha správy značek",
+ "log-description-managetags": "Tato stránka obsahuje seznam správcovských úkonů týkajících se [[Special:Tags|značek]]. Protokol obsahuje pouze akce, které provedl ručně správce; značky může vytvářet či mazat přímo software wiki, aniž by v tomto protokolu vznikl záznam.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|vytvořil|vytvořila}} značku „$4“",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|smazal|smazala}} značku „$4“ (odstraněna z $5 {{PLURAL:$5|revize nebo protokolovacího záznamu|revizí nebo protokolovacích záznamů}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|aktivoval|aktivovala}} značku „$4“ pro uživatele a boty",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|deaktivoval|deaktivovala}} značku „$4“ pro uživatele a boty",
"rightsnone": "(žádné)",
+ "revdelete-summary": "shrnutí editace",
+ "feedback-adding": "Komentář se přidává na stránku…",
+ "feedback-back": "Zpět",
+ "feedback-bugcheck": "Skvělé! Jen zkontrolujte, zda se nejedná o jednu z [$1 už známých chyb].",
+ "feedback-bugnew": "Zkontroloval(a) jsem to. Chci ohlásit novou chybu.",
"feedback-bugornote": "Pokud dokážete podrobně popsat technický problém, můžete [$1 nahlásit chybu].\nJinak můžete využít jednoduchý formulář níže. Váš komentář bude přidán na stránku „[$3 $2]“ spolu s vaším uživatelským jménem a informací o tom, jaký prohlížeč používáte.",
- "feedback-subject": "Předmět:",
- "feedback-message": "Zpráva:",
"feedback-cancel": "Storno",
- "feedback-submit": "Odeslat komentář",
- "feedback-adding": "Komentář se přidává na stránku…",
+ "feedback-close": "Hotovo",
+ "feedback-external-bug-report-button": "Založit technický úkol",
+ "feedback-dialog-title": "Odeslat názor",
+ "feedback-dialog-intro": "Pomocí níže zobrazeného jednoduchého formuláře můžete odeslat svůj názor. Váš komentář se spolu s vaším uživatelským jménem přidá na stránku „$1“.",
+ "feedback-error-title": "Chyba",
"feedback-error1": "Chyba: Nerozpoznaný výsledek z API",
"feedback-error2": "Chyba: Editace se nezdařila",
"feedback-error3": "Chyba: API nevrátilo žádnou odpověď",
+ "feedback-message": "Zpráva:",
+ "feedback-subject": "Předmět:",
+ "feedback-submit": "Odeslat",
+ "feedback-terms": "Jsem srozuměn s tím, že informace o mém uživatelském agentu zahrnují informace o přesné verzi mého prohlížeče a operačního systému a budou zveřejněny u mého komentáře.",
"feedback-thanks": "Děkujeme! Váš komentář byl přidán na stránku „[$2 $1]“.",
- "feedback-close": "Hotovo",
- "feedback-bugcheck": "Skvělé! Jen zkontrolujte, zda se nejedná o jednu z [$1 už známých chyb].",
- "feedback-bugnew": "Zkontroloval(a) jsem to. Chci ohlásit novou chybu.",
+ "feedback-thanks-title": "Děkujeme!",
+ "feedback-useragent": "Uživatelský agent:",
"searchsuggest-search": "Hledat",
"searchsuggest-containing": "obsahující…",
"api-error-badaccess-groups": "Nemáte povoleno nahrávat soubory na tuto wiki.",
@@ -3125,6 +3217,13 @@
"api-error-stashfailed": "Vnitřní chyba: Serveru se nepodařilo uložit dočasný soubor.",
"api-error-publishfailed": "Vnitřní chyba: Serveru se nepodařilo zveřejnit dočasný soubor.",
"api-error-stasherror": "Při načítání souboru do skrýše došlo k chybě.",
+ "api-error-stashedfilenotfound": "Při pokusu o načtení souboru ze skrýše nebyl uložený soubor nalezen.",
+ "api-error-stashpathinvalid": "Cesta, na které měl být soubor uložen ve skrýši, je neplatná.",
+ "api-error-stashfilestorage": "Při ukládání souboru do skrýše došlo k chybě.",
+ "api-error-stashzerolength": "Server nemohl soubor uložit do skrýše, protože má nulovou délku.",
+ "api-error-stashnotloggedin": "Pro ukládání souboru do skrýše musíte být přihlášeni.",
+ "api-error-stashwrongowner": "Soubor, ke kterému se ve skrýši pokoušíte přistoupit, vám nepatří.",
+ "api-error-stashnosuchfilekey": "Klíč souboru, ke kterému se ve skrýši pokoušíte přistoupit, neexistuje.",
"api-error-timeout": "Server neodpověděl v očekávaném čase.",
"api-error-unclassified": "Došlo k neznámé chybě.",
"api-error-unknown-code": "Neznámá chyba: „$1“.",
@@ -3169,6 +3268,8 @@
"expand_templates_generate_xml": "Zobrazit syntaktický strom v XML",
"expand_templates_generate_rawhtml": "Zobrazit surové HTML",
"expand_templates_preview": "Náhled",
+ "expand_templates_preview_fail_html": "<em>Protože {{SITENAME}} má povolené syrové HTML a došlo ke ztrátě dat sezení, je náhled skryt kvůli ochraně před JavaScriptovými útoky.</em>\n\n<strong>Pokud to byl legitimní pokus o náhled, zkuste to znovu.</strong>\nPokud to stále nebude fungovat, zkuste se [[Special:UserLogout|odhlásit]] a znovu přihlásit.",
+ "expand_templates_preview_fail_html_anon": "<em>Protože {{SITENAME}} má povolené syrové HTML a vy nejste přihlášeni, je náhled skryt kvůli ochraně před JavaScriptovými útoky.</em>\n\n<strong>Pokud to byl legitimní pokus o náhled, [[Special:UserLogin|přihlaste se]] a zkuste to znovu.</strong>",
"pagelanguage": "Volba jazyka stránky",
"pagelang-name": "Stránka",
"pagelang-language": "Jazyk",
@@ -3179,8 +3280,59 @@
"log-name-pagelang": "Kniha změn jazyků",
"log-description-pagelang": "Toto je protokol změn jazyků stránek.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|změnil|změnila}} jazyk stránky $3 z $4 na $5.",
- "default-skin-not-found": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nVaše instalace zřejmě obsahuje následující vzhledy. Informace o tom, jak je povolit a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].\n\n$2\n\n; Pokud jste právě nainstalovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalace v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code dir=\"ltr\">skins/</code>, nebo\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code>skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář.\n\n; Pokud jste právě aktualizovali MediaWiki:\n: MediaWiki 1.24 a novější již automaticky nepovolují nainstalované vzhledy (vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_autodiscovery/cs Manual:Skin autodiscovery]). Pro povolení všech právě nainstalovaných vzhledů vlepte následující řádky do <code>LocalSettings.php</code>:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Pokud jste právě upravili <code>LocalSettings.php</code>:\n: Překontrolujte případné překlepy v názvech vzhledů.",
- "default-skin-not-found-no-skins": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nNemáte nainstalovány žádné vzhledy.\n\n; Pokud jste právě nainstalovali nebo aktualizovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. MediaWiki 1.24 a novější již v hlavním repozitáři neobsahují žádné vzhledy. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalace v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code>skins/</code>, nebo\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code dir=\"ltr\">skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář. Informace o tom, jak povolit vzhledy a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].",
+ "default-skin-not-found": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nVaše instalace zřejmě obsahuje následující vzhledy. Informace o tom, jak je povolit a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].\n\n$2\n\n; Pokud jste právě nainstalovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalaci v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code dir=\"ltr\">skins/</code>.\n:* Nebo si můžete stáhnout tarbally jednotlivých vzhledů z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code>skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář.\n\n; Pokud jste právě aktualizovali MediaWiki:\n: MediaWiki 1.24 a novější již automaticky nepovolují nainstalované vzhledy (vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_autodiscovery/cs Manual:Skin autodiscovery]). Pro povolení všech právě nainstalovaných vzhledů vlepte následující řádky do <code>LocalSettings.php</code>:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Pokud jste právě upravili <code>LocalSettings.php</code>:\n: Překontrolujte případné překlepy v názvech vzhledů.",
+ "default-skin-not-found-no-skins": "Jejda! Výchozí vzhled vaší wiki, definovaný ve <code dir=\"ltr\">$wgDefaultSkin</code> jako <code>$1</code>, není dostupný.\n\nNemáte nainstalovány žádné vzhledy.\n\n; Pokud jste právě nainstalovali nebo aktualizovali MediaWiki:\n: Zřejmě jste instalovali z gitu nebo nějakým jiným způsobem přímo ze zdrojového kódu. Tak to má fungovat. MediaWiki 1.24 a novější již v hlavním repozitáři neobsahují žádné vzhledy. Zkuste nainstalovat některé vzhledy ze [https://www.mediawiki.org/wiki/Category:All_skins seznamu vzhledů na mediawiki.org] buď:\n:* Můžete si stáhnout [https://www.mediawiki.org/wiki/Download/cs instalaci v tarballu], která zahrnuje několik vzhledů a rozšíření, a vykopírovat si z ní adresář <code>skins/</code>.\n:* Nebo si můžete stáhnout tarbally jednotlivých vzhledů z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Nebo si můžete gitem naklonovat jeden z repozitářů <code>mediawiki/skins/*</code> do adresáře <code dir=\"ltr\">skins/</code> ve vaší instalaci MediaWiki.\n: Pokud jste vývojářem MediaWiki, nemělo by to nijak narušit váš gitový repozitář. Informace o tom, jak povolit vzhledy a vybrat výchozí, najdete na stránce [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration/cs Manual:Skin configuration].",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (povolený)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')",
+ "mediastatistics": "Statistika souborů",
+ "mediastatistics-summary": "Statistika o typech načtených souborů. Zahrnuje vždy jen nejnovější verzi souboru. Staré nebo smazané verze se nezapočítávají.",
+ "mediastatistics-nfiles": "$1 ($2 %)",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajty|$1 bajtů}} ($2; $3 %)",
+ "mediastatistics-table-mimetype": "MIME typ",
+ "mediastatistics-table-extensions": "Možné přípony",
+ "mediastatistics-table-count": "Počet souborů",
+ "mediastatistics-table-totalbytes": "Celková velikost",
+ "mediastatistics-header-unknown": "Neznámé",
+ "mediastatistics-header-bitmap": "Rastrové obrázky",
+ "mediastatistics-header-drawing": "Kresby (vektorové obrázky)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Videa",
+ "mediastatistics-header-multimedia": "Multimédia",
+ "mediastatistics-header-office": "Kancelářské soubory",
+ "mediastatistics-header-text": "Text",
+ "mediastatistics-header-executable": "Spustitelné soubory",
+ "mediastatistics-header-archive": "Komprimované formáty",
+ "json-warn-trailing-comma": "Z JSONu {{PLURAL:$1|byla odstraněna 1 koncová čárka|byly odstraněny $1 koncové čárky|bylo odstraněno $1 koncových čárek}}",
+ "json-error-unknown": "Došlo k potížím s JSONem. Chyba: $1",
+ "json-error-depth": "Byla překročena maximální hloubka zásobníku",
+ "json-error-state-mismatch": "Neplatný nebo poškozený JSON",
+ "json-error-ctrl-char": "Chybný řídicí znak, možná nesprávné kódování",
+ "json-error-syntax": "Syntaktická chyba",
+ "json-error-utf8": "Poškozené znaky UTF-8, možná nesprávné kódování",
+ "json-error-recursion": "Jeden či více rekurzivních odkazů v kódované hodnotě",
+ "json-error-inf-or-nan": "Jedna či více hodnot NAN nebo INF v kódované hodnotě",
+ "json-error-unsupported-type": "Dodána hodnota nekódovatelného typu",
+ "headline-anchor-title": "Odkaz na tuto sekci",
+ "special-characters-group-latin": "Latinka",
+ "special-characters-group-latinextended": "Rozšíření latinky",
+ "special-characters-group-ipa": "Mezinárodní fonetická abeceda (IPA)",
+ "special-characters-group-symbols": "Symboly",
+ "special-characters-group-greek": "Řecká abeceda",
+ "special-characters-group-cyrillic": "Cyrilice",
+ "special-characters-group-arabic": "Arabské písmo",
+ "special-characters-group-arabicextended": "Rozšíření arabštiny",
+ "special-characters-group-persian": "Perština",
+ "special-characters-group-hebrew": "Hebrejské písmo",
+ "special-characters-group-bangla": "Bengálské písmo",
+ "special-characters-group-tamil": "Tamilština",
+ "special-characters-group-telugu": "Telugské písmo",
+ "special-characters-group-sinhala": "Sinhálské písmo",
+ "special-characters-group-gujarati": "Gudžarátské písmo",
+ "special-characters-group-devanagari": "Dévanágarí",
+ "special-characters-group-thai": "Thajština",
+ "special-characters-group-lao": "Laoština",
+ "special-characters-group-khmer": "Khmerština",
+ "special-characters-title-endash": "krátká pomlčka",
+ "special-characters-title-emdash": "dlouhá pomlčka",
+ "special-characters-title-minus": "znaménko minus"
}
diff --git a/languages/i18n/csb.json b/languages/i18n/csb.json
index 7049f9a6..aca1e808 100644
--- a/languages/i18n/csb.json
+++ b/languages/i18n/csb.json
@@ -599,7 +599,6 @@
"uncategorizedtemplates": "Szablónë bez kategòrëji",
"unusedcategories": "Pùsté kategòrëje",
"unusedimages": "Nie wëzwëskóné òbrôzczi",
- "popularpages": "Nôwidzalszé starnë",
"wantedpages": "Nônótniészé starnë",
"prefixindex": "Wszëtczé starnë ò prefiksu",
"shortpages": "Nôkrótszé starnë",
@@ -616,7 +615,6 @@
"pager-older-n": "{{PLURAL:$1|1 stôrszi|$1 stôrszé|$1 stôrszich}}",
"booksources": "Ksążczi",
"booksources-search-legend": "Szëkba za wëdowiédzą ò ksążkach",
- "booksources-go": "Biéj",
"specialloguserlabel": "Brëkòwnik:",
"speciallogtitlelabel": "Titel:",
"log": "Lodżi",
@@ -656,7 +654,7 @@
"watchlist-details": "Ùzérôsz {{PLURAL:$1|$1 artikel|$1 artikle/-ów}}, nie rechùjąc diskùsëjów.",
"wlheader-showupdated": "Artiklë jakczé òsta zmienioné òd Twòji slédny wizytë są wëapratnioné '''pògrëbieniém'''",
"wlnote": "Niżi môsz wëskrzënioné {{PLURAL:$1|slédną zmianã|'''$1''' slédnëch zmianów}} zrobioné òb {{PLURAL:$2|gòdzënã|'''$2''' gòdzënë/gòdzënów}}.",
- "wlshowlast": "Wëskrzëni zjinaczi z $1 gòdzënów $2 dni $3",
+ "wlshowlast": "Wëskrzëni zjinaczi z $1 gòdzënów $2 dni",
"watchlist-options": "Òptacëje ùzérónych",
"watching": "Ùzéróm...",
"unwatching": "Ju ni ùzéróm...",
@@ -865,7 +863,6 @@
"exif-source": "Zdrój",
"exif-languagecode": "Jãzëk",
"exif-iimcategory-spo": "Szpòrt",
- "watchlistall2": "wszëtczé",
"namespacesall": "wszëtczé",
"monthsall": "wszëtczé",
"confirmemail_loggedin": "Twòjô adresa e-mail òsta pòcwierdzona.",
@@ -878,5 +875,6 @@
"version": "Wersëjô",
"specialpages": "Specjalné starnë",
"revdelete-restricted": "nastôwi ògrańczenia dlô sprôwników",
- "revdelete-unrestricted": "rëmôj ògrańczenia dlô sprôwników"
+ "revdelete-unrestricted": "rëmôj ògrańczenia dlô sprôwników",
+ "revdelete-summary": "òpisënk zjinaczi"
}
diff --git a/languages/i18n/cu.json b/languages/i18n/cu.json
index f5e4590d..144fcbe5 100644
--- a/languages/i18n/cu.json
+++ b/languages/i18n/cu.json
@@ -5,7 +5,8 @@
"Omnipaedista",
"Svetko",
"Wolliger Mensch",
- "ОйЛ"
+ "ОйЛ",
+ "아라"
]
},
"tog-oldsig": "нꙑнѣшьн҄ь аѵтографъ :",
@@ -97,6 +98,7 @@
"faqpage": "Project:Чѧстꙑ въпроси",
"actions": "дѣиства",
"namespaces": "имєнъ просторꙑ",
+ "navigation-heading": "плаваниѥ",
"errorpagetitle": "блаꙁна",
"tagline": "{{grammar:genitive|{{SITENAME}}}} страница",
"help": "помощь",
@@ -196,6 +198,7 @@
"userloginnocreate": "въниди",
"logout": "ис̾ходъ",
"userlogout": "ис̾ходъ",
+ "userlogin-noaccount": "мѣсто ти нѣстъ ли ?",
"nologin": "мѣсто ти нѣстъ ли ? $1",
"nologinlink": "съꙁижди си мѣсто",
"createaccount": "съꙁижди си мѣсто",
@@ -215,6 +218,9 @@
"accountcreated": "мѣсто сътворєно ѥстъ",
"accountcreatedtext": "польꙃєватєльско мѣсто [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|бєсѣда]]) сътворєно бѣ",
"loginlanguagelabel": "ѩꙁꙑкъ : $1",
+ "pt-login": "въниди",
+ "pt-login-button": "въниди",
+ "pt-createaccount": "съꙁижди си мѣсто",
"pt-userlogout": "ис̾ходъ",
"changepassword": "таина словєсє иꙁмѣнѥниѥ",
"resetpass_header": "таина слова иꙁмѣнѥниѥ",
@@ -254,6 +260,7 @@
"template-protected": "(ꙁабранєно ѥстъ)",
"template-semiprotected": "(чѧстьно ꙁабранѥно)",
"hiddencategories": "сꙗ страница въ {{PLURAL:$1|1 съкрꙑтѣи катигорїи|$1 съкрꙑтѣхъ катигорїѩ}} сѧ авлꙗѥтъ :",
+ "moveddeleted-notice": "сꙗ страница поничьжєна ѥстъ ⁙\nпоничьжєниꙗ и прѣимєнованиꙗ їстории си страницѧ нижѣ видѣти можєши",
"postedit-confirmation-saved": "твоꙗ мѣна съхранѥна ѥстъ",
"viewpagelogs": "си страницѧ їсторїѩ",
"cur": "нꙑ҃н",
@@ -359,6 +366,7 @@
"rightslog": "чинодатєльства їсторїꙗ",
"action-edit": "си страницѧ исправлєниѥ",
"nchanges": "$1 {{PLURAL:$1|мѣна|мѣнꙑ|мѣнъ}}",
+ "enhancedrc-history": "їсторїꙗ",
"recentchanges": "послѣдьнѩ мѣнꙑ",
"recentchanges-legend": "послѣдьн҄ь мѣнъ строи",
"recentchanges-summary": "с҄ьдє послѣдьнѩ мѣнꙑ сѥѩ викиопꙑтьствованиꙗ видѣти можєши",
@@ -366,10 +374,19 @@
"recentchanges-label-minor": "малаꙗ мѣна",
"recentchanges-label-bot": "сѭ мѣноу аѵтоматъ сътворилъ",
"rcshowhideminor": "$1 малꙑ мѣнꙑ",
+ "rcshowhideminor-show": "каꙁаниѥ",
+ "rcshowhideminor-hide": "съкрꙑтиѥ",
"rcshowhidebots": "$1 аѵтоматъ",
+ "rcshowhidebots-show": "каꙁаниѥ",
+ "rcshowhidebots-hide": "съкрꙑтиѥ",
"rcshowhideliu": "$1 польꙃєватєлъ · ѩжє съꙁижьдє сѥ мѣсто · мѣнꙑ",
+ "rcshowhideliu-hide": "съкрꙑтиѥ",
"rcshowhideanons": "$1 анѡнѷмьнъ польꙃєватєлъ мѣнꙑ",
+ "rcshowhideanons-show": "каꙁаниѥ",
+ "rcshowhideanons-hide": "съкрꙑтиѥ",
"rcshowhidemine": "$1 моꙗ мѣнꙑ",
+ "rcshowhidemine-show": "каꙁаниѥ",
+ "rcshowhidemine-hide": "съкрꙑтиѥ",
"rclinks": "$1 послѣдьн҄ь мѣнъ · ѩжє $2 послѣдьни дьни створѥнꙑ сѫтъ · каꙁаниѥ<br />$3",
"diff": "ра҃ꙁн",
"hist": "їс҃т",
@@ -378,6 +395,7 @@
"minoreditletter": "м҃л",
"newpageletter": "н҃в",
"boteditletter": "а҃ѵ",
+ "rc-change-size-new": "$1 {{PLURAL:$1|баитъ|баита|баитъ}} послѣди мѣнꙑ",
"rc-old-title": "напрьва страница створѥна ꙗко ⁖ $1 ⁖",
"recentchangeslinked": "съвѧꙁанꙑ страницѧ",
"recentchangeslinked-feed": "съвѧꙁанꙑ страницѧ",
@@ -449,7 +467,7 @@
"movethispage": "си страницѧ прѣимєнованиѥ",
"pager-newer-n": "{{PLURAL:$1|нова 1|новꙑ $1|новъ $1}}",
"pager-older-n": "{{PLURAL:$1|давьнꙗ 1|давьни $1|давьн҄ь $1}}",
- "booksources-go": "прѣиди",
+ "booksources-search": "исканиѥ",
"specialloguserlabel": "испльнитєл҄ь :",
"speciallogtitlelabel": "страницѧ или польꙃєватєлꙗ имѧ :",
"log": "їсторїѩ",
@@ -538,7 +556,7 @@
"whatlinkshere-hidelinks": "$1 съвѧꙁи",
"whatlinkshere-filters": "ситꙑ",
"block": "ꙁагради польꙃєватєл҄ь",
- "blockip": "ꙁагради польꙃєватєл҄ь",
+ "blockip": "ꙁагради {{GENDER:$1|польꙃєватєл҄ь}}",
"blockip-legend": "ꙁагради польꙃєватєл҄ь",
"ipaddressorusername": "IP число или польꙃєватєлꙗ имѧ :",
"ipbreason": "какъ съмꙑслъ :",
@@ -633,7 +651,6 @@
"exif-iimcategory-rel": "вѣра",
"exif-iimcategory-sci": "оучєниѥ и тєхнологїꙗ",
"exif-iimcategory-spo": "аѳлитїка",
- "watchlistall2": "вьсꙗ",
"namespacesall": "вьсꙗ",
"monthsall": "вьсѩ",
"unit-pixel": "п҃ѯ",
@@ -645,7 +662,7 @@
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|бєсѣда]])",
"version": "MediaWiki обраꙁъ",
"version-specialpages": "нарочьнꙑ страницѧ",
- "version-version": "(обраꙁъ $1)",
+ "version-version": "($1)",
"version-license": "MediaWiki прощєниѥ",
"version-software-version": "обраꙁъ",
"redirect-submit": "прѣиди",
@@ -661,7 +678,20 @@
"logentry-move-move": "$1 {{GENDER:$2|нарєчє}} страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|нарєчє}} страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖ бєꙁ прѣнаправлєниꙗ сътворѥниꙗ",
"logentry-newusers-create": "польꙃєватєльско мѣсто ⁖ $1 ⁖ {{GENDER:$2|сътворѥно}} ѥстъ",
+ "logentry-upload-upload": "$1 {{GENDER:$2|положишє}} $3",
+ "revdelete-summary": "мѣнꙑ опьсаниѥ",
"searchsuggest-search": "исканиѥ",
"searchsuggest-containing": "сѥ дрьжащи···",
- "api-error-unknownerror": "нєвѣдома блаꙁна : ⁖ $1 ⁖"
+ "api-error-unknownerror": "нєвѣдома блаꙁна : ⁖ $1 ⁖",
+ "special-characters-group-latin": "латиньска аꙁъбоукꙑ",
+ "special-characters-group-latinextended": "латиньскꙑ аꙁъбоукьвє доложєниѥ",
+ "special-characters-group-ipa": "М҃ФА",
+ "special-characters-group-symbols": "сѷмволи",
+ "special-characters-group-greek": "грьчьска аꙁъбоукꙑ",
+ "special-characters-group-cyrillic": "климєнтовица / гражданьска аꙁъбоукꙑ",
+ "special-characters-group-arabic": "аравьска аꙁъбоукꙑ",
+ "special-characters-group-hebrew": "єврєиска аꙁъбоукꙑ",
+ "special-characters-group-bangla": "бангальска аꙁъбоукꙑ",
+ "special-characters-group-telugu": "тєлоужьска аꙁъбоукꙑ",
+ "special-characters-group-sinhala": "синхальска аꙁъбоукꙑ"
}
diff --git a/languages/i18n/cv.json b/languages/i18n/cv.json
index 7ac4c5d8..5a78f748 100644
--- a/languages/i18n/cv.json
+++ b/languages/i18n/cv.json
@@ -8,7 +8,8 @@
"Salam",
"Александр Сигачёв",
"Блокнот",
- "아라"
+ "아라",
+ "Chuvash2014"
]
},
"tog-underline": "Ссылкăсене аялтан туртса палармалла:",
@@ -44,13 +45,13 @@
"underline-always": "Яланах",
"underline-never": "Нихăçан та",
"underline-default": "Браузер ĕнерлевĕсене усă курмалла",
- "sunday": "вырсарникун",
+ "sunday": "Вырсарникун",
"monday": "Тунтикун",
"tuesday": "Ытларикун",
"wednesday": "Юнкун",
"thursday": "Кĕçнерникун",
"friday": "Эрнекун",
- "saturday": "шăматкун",
+ "saturday": "Шăматкун",
"sun": "Вр",
"mon": "Тн",
"tue": "Ыт",
@@ -58,48 +59,48 @@
"thu": "Кç",
"fri": "Эрн",
"sat": "Шм",
- "january": "кăрлач",
- "february": "нарăс",
- "march": "пуш",
- "april": "ака",
- "may_long": "çу",
- "june": "çĕртме",
- "july": "утă",
- "august": "çурла",
- "september": "авăн",
- "october": "юпа",
- "november": "чӳк",
- "december": "раштав",
- "january-gen": "кăрлач уйăхĕн",
- "february-gen": "нарăс уйăхĕн",
- "march-gen": "пуш уйăхĕн",
- "april-gen": "ака уйăхĕн",
- "may-gen": "çу уйăхĕн",
- "june-gen": "çĕртме уйăхĕн",
- "july-gen": "утă уйăхĕн",
- "august-gen": "çурла уйăхĕн",
- "september-gen": "авăн уйăхĕн",
- "october-gen": "юпа уйăхĕн",
- "november-gen": "чӳк уйăхĕн",
- "december-gen": "раштав уйăхĕн",
- "jan": "кăр",
- "feb": "нар",
- "mar": "пуш",
- "apr": "ака",
- "may": "çу",
- "jun": "çĕр",
- "jul": "утă",
- "aug": "çур",
- "sep": "авн",
- "oct": "юпа",
- "nov": "чӳк",
- "dec": "раш",
- "pagecategories": "{{PLURAL:$1|1=Категори|Категорисем}}",
- "category_header": "«$1» категорири статьясем",
+ "january": "Кăрлач",
+ "february": "Нарăс",
+ "march": "Пуш",
+ "april": "Ака",
+ "may_long": "Çу",
+ "june": "Çĕртме",
+ "july": "Утă",
+ "august": "Çурла",
+ "september": "Авăн",
+ "october": "Юпа",
+ "november": "Чӳк",
+ "december": "Раштав",
+ "january-gen": "Кăрлач уйăхĕн",
+ "february-gen": "Нарăс уйăхĕн",
+ "march-gen": "Пуш уйăхĕн",
+ "april-gen": "Ака уйăхĕн",
+ "may-gen": "Çу уйăхĕн",
+ "june-gen": "Çĕртме уйăхĕн",
+ "july-gen": "Утă уйăхĕн",
+ "august-gen": "Çурла уйăхĕн",
+ "september-gen": "Авăн уйăхĕн",
+ "october-gen": "Юпа уйăхĕн",
+ "november-gen": "Чӳк уйăхĕн",
+ "december-gen": "Раштав уйăхĕн",
+ "jan": "Кăр",
+ "feb": "Нар",
+ "mar": "Пуш",
+ "apr": "Ака",
+ "may": "Çу",
+ "jun": "Çĕр",
+ "jul": "Утă",
+ "aug": "Çур",
+ "sep": "Авн",
+ "oct": "Юпа",
+ "nov": "Чӳк",
+ "dec": "Раш",
+ "pagecategories": "{{PLURAL:$1|Категори|Категорисем}}",
+ "category_header": "\"$1\" категоринчи статьясем",
"subcategories": "Подкатегорисем",
- "category-media-header": "«$1» категорири файлсем",
+ "category-media-header": "\"$1\" категоринчи файлсем",
"category-empty": "''Хальхи вăхăтра ку категори пушă.''",
- "hidden-categories": "{{PLURAL:$1|1=Пытарнă категори|Пытарнă категорисем}}",
+ "hidden-categories": "{{PLURAL:$1|Пытарнă категори|Пытарнă категорисем}}",
"hidden-category-category": "Пытарнă категорисем",
"category-subcat-count": "{{PLURAL:$2|Ку категоринче çак айри категори пур.|$2-ран(-рен,-тан,-тен) {{PLURAL:$1|$1 айри категорине кăтартнă|$1 айри категорине кăтартнă|$1 айри категорине кăтартнă}}.}}",
"category-subcat-count-limited": "Ку категоринче {{PLURAL:$1|$1 айри категори|$1 айри категори|$1 айри категори}}.",
@@ -113,33 +114,35 @@
"newwindow": "(çĕнĕ чӳречере)",
"cancel": "Пăрахăçла",
"moredotdotdot": "Малалла…",
- "mypage": "Ман страница",
+ "mypage": "Страница",
"mytalk": "Сӳтсе явни",
"anontalk": "Çак IP-адреса сӳтсе явни",
"navigation": "Меню",
"and": "&#32;тата",
- "qbfind": "Шырав",
- "qbbrowse": "Курăм",
+ "qbfind": "Шырани",
+ "qbbrowse": "Пăх",
"qbedit": "Тӳрлет",
"qbpageoptions": "Страница ĕнерлевĕсем",
"qbmyoptions": "Сирĕн ĕнĕрлевсем",
"faq": "ЫйХу",
"faqpage": "Project:ЫйХу",
+ "variants": "Вариантсем",
"errorpagetitle": "Йăнăш",
"returnto": "$1 страницăна таврăн.",
"tagline": "{{GRAMMAR:genitive|{{SITENAME}}}}ри материал",
"help": "Пулăшу",
- "search": "Шырасси",
- "searchbutton": "Шырасси",
+ "search": "Шырамалли",
+ "searchbutton": "Шырамалли",
"go": "Куç",
"searcharticle": "Куç",
- "history": "Истори",
+ "history": "Страницин историйĕ",
"history_short": "Истори",
"updatedmarker": "эпĕ юлашки хут кĕнĕ хыççăн çĕнелнĕ",
"printableversion": "Пичетлемелли верси",
"permalink": "Яланхи вырăн",
"print": "Пичетле",
- "edit": "Тӳрлетӳ",
+ "view": "Пăх",
+ "edit": "Тӳрлет",
"create": "Çĕннине ту",
"editthispage": "Страницăна тӳрлетесси",
"create-this-page": "Ку страницăна хатĕрле",
@@ -162,12 +165,12 @@
"toolbox": "Хатĕрсем",
"userpage": "Хутшăнакан страницине пăх",
"projectpage": "Проект страницине пăх",
- "imagepage": "Ӳкерчĕк страницине пăх",
+ "imagepage": "Файл страницине пăх",
"mediawikipage": "Пĕлтерӳ страницине кăтарт",
"templatepage": "Шаблонăн страницине пăх",
"viewhelppage": "Справка страницине пăх",
"categorypage": "Категори страницине пăх",
- "viewtalkpage": "Сӳтсе явнине тишкер",
+ "viewtalkpage": "Сӳтсе явнине пăх",
"otherlanguages": "Урăх чĕлхесем",
"redirectedfrom": "($1 çинчен куçарнă)",
"redirectpagesub": "Куçаракан страница",
@@ -175,8 +178,8 @@
"viewcount": "Ку страницăна $1 хут пăхнă.",
"protectedpage": "Хӳтĕленĕ статья",
"jumpto": "Куçас:",
- "jumptonavigation": "çӳрев",
- "jumptosearch": "Шырав",
+ "jumptonavigation": "навигаци",
+ "jumptosearch": "шырамалли",
"aboutsite": "{{SITENAME}} çинчен",
"aboutpage": "Project:çинчен",
"copyright": "Ку ăшлăх $1 килĕшӳллĕн сарăлать.",
@@ -186,7 +189,7 @@
"disclaimers": "Яваплăха тивĕçтерменни",
"disclaimerpage": "Project:Яваплăха тивĕçтерменни",
"edithelp": "Улшăнусене кĕртме пулăшакан пулăшу",
- "mainpage": "Тĕп страница",
+ "mainpage": "Тĕп страницă",
"mainpage-description": "Тĕп страницă",
"policy-url": "Project:Йĕркесем",
"portal": "Портал",
@@ -204,11 +207,12 @@
"youhavenewmessagesmulti": "$1-та çĕнĕ пĕлтерӳсем пур.",
"editsection": "тӳрлет",
"editold": "тӳрлет",
- "viewsourceold": "пуçламăш текста пăх",
+ "viewsourceold": "кодне пăх",
"editlink": "тӳрлет",
+ "viewsourcelink": "кодне пăх",
"editsectionhint": "$1 пайне тӳрлет",
"toc": "Тупмалли",
- "showtoc": "кăтарт",
+ "showtoc": "кăтартмалла",
"hidetoc": "кӑтартмалла мар",
"thisisdeleted": "$1 пăхса каялла тавăрмалла-и?",
"viewdeleted": "$1 пăхар-и?",
@@ -221,7 +225,7 @@
"page-rss-feed": "«$1» - RSS хăю",
"page-atom-feed": "«$1» - Atom хăю",
"red-link-title": "$1 (хальлĕхе çырман)",
- "nstab-main": "Статья",
+ "nstab-main": "Страницă",
"nstab-user": "Хутшăнакан страници",
"nstab-media": "Мультимеди",
"nstab-special": "Ятарлă страницă",
@@ -229,14 +233,15 @@
"nstab-image": "Файл",
"nstab-mediawiki": "Пĕлтерӳ",
"nstab-template": "Шаблон",
- "nstab-help": "пулăшу",
+ "nstab-help": "Пулăшу",
"nstab-category": "Категори",
"nosuchaction": "Ку ĕçе тăваймастпăр",
"nosuchactiontext": "URLта çырнă хушăва вики скрипчĕ ăнланмасть",
- "nosuchspecialpage": "Вăл ятлă ятарлă страница çук",
+ "nosuchspecialpage": "Ун пек страница çук",
"nospecialpagetext": "Эсир ыйтакан ятарлă страница çук. [[Special:SpecialPages|Ятарлă страницăсен списокне]] пăхăр.",
"error": "Йăнăш",
"databaseerror": "Пĕлĕм пуххин йăнăшĕ",
+ "databaseerror-function": "$1: функци",
"laggedslavemode": "Асăрхăр! Страница çинче юлашки улшăнусене кăтартмасăр пултарнă.",
"readonly": "Пĕлĕм пуххине çырассине чарса хунă",
"enterlockreason": "Чарнин сăлтавне тата палăртнă вăхăта кăтартăр.",
@@ -261,7 +266,8 @@
"perfcached": "Ку даннăйсене кэшран илнĕ, çавна май унта юлашки улшăнусем палăрмасăр пултараççĕ. A maximum of {{PLURAL:$1|1=one result is|$1 results are}} available in the cache.",
"perfcachedts": "Ку даннăйсене кэшран илнĕ, юлашки хут вăл $1 вăхăтра çĕнелнĕ. A maximum of {{PLURAL:$4|1=one result is|$4 results are}} available in the cache.",
"querypage-no-updates": "Ку страницăна хальхи вăхăтра улăштарма чарнă. Ку даннăйсене хальхи вăхăтра çĕнетме май çук.",
- "viewsource": "Курăм",
+ "viewsource": "Кодне пăхни",
+ "viewsource-title": "$1 кодне пăхни",
"actionthrottled": "Хăвăртлăха чакарнă",
"actionthrottledtext": "Спампа кĕрешнине пула ку ĕçе пĕчĕк вăхăт хушшинче ытла нумай тума чарнă. Темиçе минутран тепре туса пăхма пултаратăр.",
"protectedpagetext": "Ку страницăна тӳрлетме май çук, хӳтĕленĕ.",
@@ -270,27 +276,34 @@
"namespaceprotected": "Сирĕн «$1» ят уçлăхĕнчи статьясене тӳрлетмелли май çук..",
"ns-specialprotected": "«{{ns:special}}» ят уçлăхĕнчи страницăсене эсир тӳрлетейместĕр.",
"titleprotected": "Ку ятлă страницăна хатĕрлессине [[Хутшăнакан:$1|$1]] хутшăнакан чарса хунă.\nÇак сăлтава кăтартнă: ''$2''.",
+ "exception-nologin": "Кĕмен",
"virus-badscanner": "Ĕнерлев йăнăшĕ. Вирус сканерĕ паллă мар: ''$1''",
"virus-scanfailed": "скенерланă чухнехи йăнăш (код $1)",
"virus-unknownscanner": "паллă мар антивирус:",
"logouttext": "Эсир палласа илмен хутшăнакан евĕр ĕçлетĕр.\nСайт сире ятпа мар, IP-адрес урлă пĕлет.\nЭсир анонимла, е малтанхи евĕрлĕ çĕнĕ сеанс уçса, е урăх ятпа ĕçлеме пултаратăр.\nХăш-пĕр страницăсем эсир сайта кĕнĕ пек курăнма пултараççĕ, ăна тӳрлетмешкĕн браузер кэшне çĕнетĕр.",
- "yourname": "Сирĕн ят",
+ "yourname": "Усă куракан ят:",
+ "userlogin-yourname": "Усă куракан ят",
"yourpassword": "Вăрттăн сăмах:",
"yourpasswordagain": "Вăрттăн сăмах тепре çырăр:",
"remembermypassword": "Ку компьютер çинче мана астуса хăвармалла (for a maximum of $1 {{PLURAL:$1|1=day|days}})",
"yourdomainname": "Сирĕн домен",
- "login": "Сайта кĕр",
+ "login": "Кĕрĕр",
"nav-login-createaccount": "Сайта кĕр / регистрацилен",
- "userlogin": "Сайта кĕр",
- "logout": "Сайтран тухас",
- "userlogout": "Сайтран тух",
+ "userlogin": "Кĕр / аккаунт ту",
+ "userloginnocreate": "Кĕмелли",
+ "logout": "Сеансне пĕтерни",
+ "userlogout": "Тухрăр",
"notloggedin": "Эсир сайта кĕмен",
- "nologin": "Эсир халĕ те регистрациленмен-и? '''$1'''.",
+ "nologin": "Аккаунт çук-и? $1.",
"nologinlink": "Çĕнĕ хутшăнакана регистрацилесси",
- "createaccount": "Çĕнĕ хутшăнакана регистрацилесси",
- "gotaccount": "Эсир регистрациленсе-и? '''$1'''.",
- "gotaccountlink": "Сайта кĕр",
+ "createaccount": "Аккаунт ту",
+ "gotaccount": "Аккаунт пур-и? $1.",
+ "gotaccountlink": "Кĕрĕр",
"createaccountmail": "эл. почта тăрăх",
+ "createacct-realname": "Чăн-чăн ят (пулсан)",
+ "createacct-submit": "Аккаунт ту",
+ "createacct-benefit-body1": "{{PLURAL:$1|тӳрлетни|тӳрлетнисем}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|страница|страницасем}}",
"badretype": "Эсир кăтартнă парольсем пĕр пек мар.",
"userexists": "Эсир усă курас теекен ята йышăннă. Тархасшăн, урăх ят суйласа илĕр.",
"loginerror": "Хутшăнакана палласа илеймерĕмĕр",
@@ -315,14 +328,21 @@
"accountcreatedtext": "Хутшăнакансем шутне $1 ятлă çĕнĕ хутшăнакана кĕртрĕмĕр.",
"createaccount-title": "{{SITENAME}}: хутшăнакана хушасси",
"loginlanguagelabel": "Чĕлхе: $1",
+ "pt-login": "Кĕмелли",
+ "pt-login-button": "Кĕр",
+ "pt-createaccount": "Аккаунт тумалли",
+ "pt-userlogout": "Тухмалли",
"changepassword": "Пароле улăштар",
- "resetpass_header": "Пароле пăрахăçла",
- "oldpassword": "Кивě пароль",
- "newpassword": "Çěнě пароль",
+ "resetpass_header": "Паролне улăштар",
+ "oldpassword": "Кивĕ пароль:",
+ "newpassword": "Çĕнĕ пароль:",
"resetpass_submit": "Вăрттăн сăмаха лартса сайта кĕр",
"resetpass_forbidden": "Вăрттăн сăмаха улăштарма май çук",
"resetpass-submit-cancel": "Пăрахăçла",
"resetpass-temp-password": "Вăхăтлăх вăрттăн сăмах:",
+ "passwordreset-username": "Усă куракан ят:",
+ "passwordreset-domain": "Домен:",
+ "changeemail-none": "(çук)",
"bold_sample": "Çурмахулăм текст",
"bold_tip": "Çурмахулăм текст",
"italic_sample": "Тайлăк текст",
@@ -339,13 +359,13 @@
"media_tip": "Медиа-файл çине каçă",
"sig_tip": "Сирĕн алă пусни тата вăхăт",
"hr_tip": "Горизонтальлĕ йĕр (сахалтарах усă курăр)",
- "summary": "Улшăнусен ăнлантарăвĕ:",
+ "summary": "Улăштарнисене ăнлантарни:",
"subject": "Тема:",
"minoredit": "Пĕчĕк улшăну",
"watchthis": "Ку страницăна сăна",
"savearticle": "Страницăна çырса хур",
"preview": "Епле курăнĕ",
- "showpreview": "Малтанлăхи курăну",
+ "showpreview": "Маларах пăхни",
"showdiff": "Кĕртнĕ улшăнусем",
"anoneditwarning": "'''Асăрхăр''': Эсир сайта хăвăр çинчен пĕлтермен, çавăнпа та ку страницăна улăштарнин журналне сирĕн IP-адреса çырса хума тивĕ.",
"missingcommenttext": "Аяларах, тархасшăн, хăвар пĕлтерĕве çырăр.",
@@ -355,7 +375,7 @@
"blockedtext": "'''Ку аккаунта е IP-адреса ĕçлеме чарнă.'''\n\n$1 администратор ĕçлеме чарнă. Сăлтавĕ çакă: ''«$2»''.\n\n* Чарнă вăхăт: $8\n* Çак вăхăтчен чарнă: $6\n* Çакна чарнă: $7\n\n$1 хутшăнакан патне, е ытти [[{{MediaWiki:Grouppage-sysop}}|администраторсем]] патне эсир çыру ярса меншĕн ĕçлеме чарнине сӳтсе явма пултаратăр.\n\nАсăрхар: [[Special:Preferences|хăвăрăн ĕнерлевсенче]] эл. почта адресне çирĕплетмен пулсан, е сайта кĕмен пулсан — администратор патне çыру яраймастăр. Администратор сире çыру яма чарнă пулсан — ку хутĕнче те çыру яраймăр.\n\nСирĕн IP-адрес — $3, чару идентификаторĕ — #$5. Çырусенче, тархасшăн, вĕсене пĕлтерĕр.",
"blockednoreason": "сăлтавне пĕлтермен",
"loginreqtitle": "Сайта кĕмелле",
- "loginreqlink": "сайта кĕр",
+ "loginreqlink": "кĕр",
"loginreqpagetext": "Ытти страницăсене курмашкăн сирĕн $1.",
"accmailtitle": "Пароле леçрĕмĕр.",
"accmailtext": "$1 вăрттăн сăмахне кунта леçрĕмĕр: $2.",
@@ -368,6 +388,7 @@
"previewnote": "'''Ку страницăна халлĕхе çырса хуман.'''\nЭсир ку страница мĕнле пулассине кăна куратăр!",
"previewconflict": "Çӳлти чӳречере эсир халĕ çырса хурсан текст епле курăннине куратăр.",
"editing": "$1 тӳрлетни",
+ "creating": "$1 туни",
"editingsection": "$1 тӳрлетни (статья пайĕ)",
"editingcomment": "$1 тӳрлетни (кӗске анлантарӑвӗ)",
"editconflict": "Тӳрлетнĕ вăхăтра тавлашу тухрĕ: $1",
@@ -377,7 +398,7 @@
"copyrightwarning": "Эсир кĕртнĕ, е улăштарнă пур статьясен тексчĕсем $2 ($1 пăхăр) лизензине пăхăнаççĕ. Енчен те эсир кĕртнĕ текста пурте усă курма, тӳрлетсе улăштарма пултарнипе килĕшместĕр пулсан кунта ăна ан кĕртĕр. <br /> Çавăн пекех эсир кĕртнĕ текстăн е авторĕ, е ăна ирĕклĕ усă курма юракан çăлкуçсенчен илнине çирĕплететĕр. <br /> '''АВТОР ПРАВИСЕМПЕ ХӲТĔЛЕНĔ МАТЕРИАЛСЕНЕ АН КĔРТĔР!'''",
"protectedpagewarning": "'''АСĂРХАТТАРНИ: ку страницăна улшăнусем кĕртессинчен хӳтĕленĕ, ăна тӳрлетме администраторсем кăна пултараççĕ.'''",
"titleprotectedwarning": "'''Асăрхаттару. Ку страницăпа ĕçлеме чарнă, ăна хăш-пĕр хутшăнакан кăна хатерлеме пултарать.'''",
- "templatesused": "Ку страница çинче усă курнă шаблонсем:",
+ "templatesused": "Ку страницă çинче усă курнă {{PLURAL:$1|шаблон|шаблонсем}}:",
"templatesusedpreview": "Пăхакан страница çинче усă курнă шаблонсем:",
"templatesusedsection": "Ку пайра усă курнă шаблонсем:",
"template-protected": "(сыхланă)",
@@ -400,11 +421,12 @@
"last": "малт.",
"page_first": "пĕрремĕш",
"page_last": "юлашки",
- "histfirst": "Пĕрремĕш",
- "histlast": "Юлашки",
- "historysize": "$1 байт",
+ "history-fieldset-title": "Историне пăх",
+ "histfirst": "киввисем",
+ "histlast": "çĕннисем",
+ "historysize": "({{PLURAL:$1|1 байт|$1 байт}})",
"historyempty": "(пушă)",
- "history-feed-title": "Тӳрлетӳсен историйĕ",
+ "history-feed-title": "Улăшăнусен историйĕ",
"history-feed-description": "Ку страницăна викире улаштарнин историйĕ",
"rev-deleted-comment": "(комментарине кăларса пăрахнă)",
"rev-deleted-user": "(автор ятне хуратнă)",
@@ -415,24 +437,35 @@
"revdelete-hide-text": "Страницăн çак верси текстне пытар",
"revdelete-hide-comment": "Комментарине пытар",
"revdelete-hide-user": "Автор ятне пытар",
+ "revdelete-radio-set": "Пытарнă",
+ "revdelete-radio-unset": "Курăнакан",
"revdelete-success": "Версин курăмлăхне улăштартăмăр.",
"pagehist": "Страница историйĕ",
"deletedhist": "Кăларса пăрахнисен историйĕ",
"suppressionlog": "Пытару журналĕ",
+ "history-title": "\"$1\" улшăннисен историйĕ",
"lineno": "$1-мĕш йĕрке:",
"editundo": "пăрахăçла",
- "searchresults": "Тупрăмăр",
+ "searchresults": "Шыранă результачĕсем",
"textmatches": "Статьясенчи текст пĕрпеклĕхĕ",
- "prevn": "малтанхи {{PLURAL:$1|$1}}",
- "nextn": "малалли {{PLURAL:$1|$1}}",
- "search-result-size": "$1 ({{PLURAL:$2|1=1 сăмах|$2 сăмах}})",
- "showingresults": "Аяларах эсир <b>#$2</b> пуçласа кăтартнă <b>$1</b> йĕркене куратăр.",
- "showingresultsheader": "{{PLURAL:$5|1=Результат '''$1''' '''$3''' хушшинчен|Результатсем'''$1 - $2''' '''$3''' хушшинчен}} '''$4''' валли",
+ "prevn": "унчченхи {{PLURAL:$1|$1}}",
+ "nextn": "урăххисем {{PLURAL:$1|$1}}",
+ "viewprevnext": "Пăх ($1 {{int:pipe-separator}} $2) ($3)",
+ "searchprofile-articles-tooltip": "$1 -ре шырани",
+ "searchprofile-images-tooltip": "Файăлсене шырани",
+ "search-result-size": "$1 ({{PLURAL:$2|1 сăмах|$2 сăмах}})",
+ "search-category": "(категори $1)",
+ "search-interwiki-caption": "Тăван проектсем",
+ "search-relatedarticle": "Çыхăнă",
+ "searchrelated": "çыхăнă",
+ "showingresults": "Аяларах эсир <strong>$2</strong> пуçласа кăтартнă <strong>$1</strong> йĕркене куратăр.",
"powersearch-legend": "Анлă шырав",
+ "powersearch-togglenone": "Нимĕнте",
+ "search-external": "Тулти шырамалли",
"preferences": "Ĕнерлевсем",
"mypreferences": "Ĕнерлев",
"prefs-edits": "Тӳрлетӳсен шучĕ:",
- "prefs-skin": "Ерешленӳ",
+ "prefs-skin": "Тир",
"skin-preview": "Малтанхи курăну",
"datedefault": "Палăртман чухнехи",
"prefs-rc": "Юлашки улшăнусен страници",
@@ -442,17 +475,26 @@
"prefs-editing": "Тӳрлетни",
"rows": "Йěркесем",
"columns": "Юпасем:",
- "searchresultshead": "Шыраса тупрăмăр",
+ "searchresultshead": "Шырамалли",
"recentchangesdays": "Çак кунсен хушшинчи юлашки улшăнусене кăтартмалла:",
"recentchangescount": "Списокра çакăн чухлĕ тӳрлетӳ кăтартмалла:",
"savedprefs": "Сирĕн ĕнерлевсене сыхласа хăвартăмăр",
"timezonelegend": "Сехет поясĕ",
"localtime": "Вырăнти вăхăт",
"servertime": "Сервер вăхăчě",
+ "timezoneregion-africa": "Африка",
+ "timezoneregion-america": "Америка",
+ "timezoneregion-antarctica": "Антарктика",
+ "timezoneregion-arctic": "Арктика",
+ "timezoneregion-asia": "Ази",
+ "timezoneregion-australia": "Австрали",
+ "timezoneregion-europe": "Европа",
+ "prefs-searchoptions": "Шырамалли",
"prefs-files": "Файлсем",
"youremail": "Электронлă почта:",
- "username": "Хутшăнакан ячĕ:",
- "yourrealname": "Сирĕн чăн ят (*)",
+ "username": "{{GENDER:$1|Усă куракан ят}}:",
+ "prefs-registration": "Регистрацин вăхăтчĕ:",
+ "yourrealname": "Чăн-чăн ят:",
"yourlanguage": "Интерфейс чĕлхи:",
"yourvariant": "Чĕлхе варианчĕ",
"yournick": "Сирĕн ят (алă пусма усă курăнĕ):",
@@ -461,6 +503,7 @@
"email": "Эл. почта",
"prefs-help-email": "Электронлă почта (вăл кирлисем шутне кĕмест пулин те) ытти хутшăнакансене сирĕнпе ун урлă çыхăнма май парать. Çыхăну тытнă вăхăтра ыттисем сирĕн адреса пĕлеймеççĕ.",
"prefs-help-email-required": "Электронлă почтăн адресне кăтартмалла.",
+ "prefs-editor": "Редактор",
"userrights": "Хутшăнакансен прависемпе ĕçлесси",
"userrights-lookup-user": "Хутшăнакансен ушкăнĕсемпе ĕçлесси",
"userrights-user-editname": "Хутшăнакан ятне кăтартăр:",
@@ -470,39 +513,45 @@
"userrights-groupsmember": "Çак ушкăнсене кĕрет:",
"userrights-reason": "Сăлтавĕ",
"group": "Ушкăн:",
+ "group-user": "Хутшăнакансем",
"group-autoconfirmed": "Автоподтверждённые участники",
"group-bot": "Ботсем",
"group-sysop": "Администраторсем",
"group-bureaucrat": "Бюрократсем",
- "group-suppress": "Ревизоры",
+ "group-suppress": "Тĕрĕслекенсем",
"group-all": "(пурте)",
+ "group-user-member": "{{GENDER:$1|хутшăнакан}}",
"group-autoconfirmed-member": "автоподтверждённый участник",
- "group-bot-member": "бот",
- "group-sysop-member": "администратор",
- "group-bureaucrat-member": "бюрократ",
- "group-suppress-member": "Ревизор",
+ "group-bot-member": "{{GENDER:$1|бот}}",
+ "group-sysop-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-bureaucrat": "{{ns:project}}:Бюрократсем",
- "grouppage-suppress": "{{ns:project}}:Ревизоры",
+ "grouppage-suppress": "{{ns:project}}:Тĕрĕслекенсем",
"rightslogtext": "Ку пользовательсен прависене улăштарниссен журналě",
+ "enhancedrc-history": "истори",
"recentchanges": "Улшăнусем",
"recentchanges-legend": "Çĕнĕ улшăнусен ĕнерлевĕ",
"recentchanges-label-bot": "Ку улшăнăва бот тунă",
"recentchanges-legend-newpage": "$1 — çĕнĕ страница",
+ "recentchanges-legend-plusminus": "(<em>±123</em>)",
"rclistfrom": "Юлашки улшăнусене $3 $2 вăхăтран пуçласа кăтартнă",
- "rcshowhideminor": "пĕчĕк тӳрлетӳсене $1",
+ "rcshowhideminor": "пĕчĕк тӳрлетнисене $1",
"rcshowhidebots": "ботсене $1",
- "rcshowhideliu": "сайта кĕнĕскерсене $1",
+ "rcshowhidebots-show": "Кăтарт",
+ "rcshowhideliu": "сайта кĕнисене $1",
"rcshowhideanons": "ячĕсене палăртманскерсене $1",
"rcshowhidepatr": "тĕрĕсленĕ тӳрлетӳсене $1",
- "rcshowhidemine": "хăвăн тӳрлетӳсене $1",
+ "rcshowhidemine": "хăвăн тӳрлетнисене $1",
"rclinks": "Юлашки $2 кун хушшинче тунă $1 улшăнусене кăтартмалла<br />$3",
"diff": "танл.",
- "hist": "истори",
- "hide": "кăтартмалла мар",
- "show": "кăтартмалла",
+ "hist": "ист",
+ "hide": "Кăтартмалла мар",
+ "show": "Кăтартмалла",
"minoreditletter": "п",
"newpageletter": "Ç",
"rc_categories_any": "Кашни",
@@ -510,7 +559,7 @@
"recentchangeslinked": "Çыхăннă улшăнусем",
"recentchangeslinked-feed": "Çыхăннă улшăнусем",
"recentchangeslinked-toolbox": "Çыхăннă улшăнусем",
- "recentchangeslinked-page": "Страница ячĕ:",
+ "recentchangeslinked-page": "Страницă ячĕ:",
"upload": "Файла кĕртесси",
"uploadbtn": "Файла кĕрт",
"uploadnologin": "Эсир сайта кĕмен.",
@@ -518,8 +567,9 @@
"uploaderror": "Файла кĕртне чухне йăнăш пулчĕ",
"uploadlogpage": "Файлсене кĕртнине кăтартакан журнал",
"uploadlogpagetext": "Аяларах эсир юлашкинчен кĕртнĕ файлсене куратăр.\nПур çĕрте те сервер вăхăтне (Гринвич тăрăх, UTC) кăтартнă.",
+ "filename": "Файл ячĕ",
"filedesc": "Кĕскен ăнлантарни",
- "fileuploadsummary": "Кĕске ăнлантару:",
+ "fileuploadsummary": "Кĕскен ăнлантарни:",
"filestatus": "Усă курмалли майсем",
"filesource": "Çăлкуç",
"ignorewarning": "Асăрхаттарусене пăхмасăр файла çав-çавах çырса хумалла.",
@@ -546,6 +596,7 @@
"upload_source_file": " (сирĕн компьютер çинчи файл)",
"listfiles-summary": "Ку ятарлă страницăра эсир пур кĕртнĕ файлсене куратăр.\nНумай пулмасть кĕртнисем çулте вырнаçнă.\nЮпа тăррине пуссан йĕркелӳ майĕ улшăнĕ.",
"listfiles_search_for": "Ӳкерчĕк ячĕ тăрăх шырани:",
+ "imgfile": "файл",
"listfiles": "Ӳкерчěксен списокě",
"listfiles_name": "Файл ячĕ",
"listfiles_user": "Хутшăнакан",
@@ -580,19 +631,20 @@
"unusedtemplatestext": "Ку страница çинче страницăсенче усă курман «Шаблон» ятлă ятсен уçлăхне шутне кĕрекен страницăсене куратăр.",
"unusedtemplateswlh": "ытти каçăсем",
"randompage": "Ăнсăртран илнě страницă",
+ "randomincategory-category": "Категори:",
"randomredirect": "Ăнсăртран илнĕ куçару",
"statistics": "Статистика",
"statistics-header-users": "Хутшăнакансен статистики",
- "statistics-mostpopular": "Чи нумай пăхакан страницăсем",
"doubleredirects": "Икĕ хут куçаракансем",
"brokenredirects": "Татăк куçару страницисем",
"brokenredirectstext": "Ку куçару страницисем çук страницăна куçараççĕ:",
"brokenredirects-edit": "тӳрлет",
"brokenredirects-delete": "кăларса пăрах",
"fewestrevisions": "Сахал тӳрлетнĕ статьясем",
- "nbytes": "$1 {{PLURAL:$1|1=байт|байт}}",
+ "nbytes": "$1 {{PLURAL:$1|байт|байтсем}}",
+ "ncategories": "$1 {{PLURAL:$1|категори|категорисем}}",
"nlinks": "$1 {{PLURAL:$1|1=каçă|каçă}}",
- "nviews": "$1 хут пăхнă",
+ "nviews": "$1 {{PLURAL:$1|пăхни|пăхнисем}}",
"specialpage-empty": "Ку страница пушă",
"lonelypages": "Тăлăх страницăсем",
"uncategorizedpages": "Каталогсăр страницăсем",
@@ -623,25 +675,29 @@
"movethispage": "Ку страницăн ятне улăштар",
"unusedcategoriestext": "Çак категори страницисем çинче ытти категорисемпе статьясем çук.",
"notargettitle": "Тĕллевне кăтартман",
+ "pager-newer-n": "{{PLURAL:$1|çĕнĕреххисене 1|$1 çĕнĕреххисене}}",
+ "pager-older-n": "{{PLURAL:$1|кивĕреххисене 1|$1 кивĕреххисене}}",
"booksources": "Кĕнекесен çăлкуçĕсем",
- "booksources-go": "Шыра",
+ "booksources-search": "Туп",
"specialloguserlabel": "Хутшăнакан:",
- "log": "Журналсем",
- "all-logs-page": "Журналсем",
- "allpages": "Пěтěм страницăсем",
- "nextpage": "Тепěр страницă ($1)",
- "prevpage": "Малтанхи страница ($1)",
+ "log": "Логсем",
+ "all-logs-page": "Пĕтĕм логсем",
+ "allpages": "Пĕтĕм страницăсем",
+ "nextpage": "Тепĕр страницă ($1)",
+ "prevpage": "Унчченхи страницă ($1)",
"allarticles": "Пĕтĕм статьясем",
"allinnamespace": "Пĕтĕм статьясем («$1» ят уçлăхĕ)",
"allpagessubmit": "Ту",
"allpagesprefix": "Çак йĕрекесенчен пуçланакансен страницăсене шыра:",
"allpagesbadtitle": "Страницăн ячĕ тĕрĕс мар. Ятĕнче е интервики, е чĕлхе префиксĕ е усă курма юраман символсем пур.",
"allpages-bad-ns": "{{SITENAME}}-ра «$1» ят уçлăхĕ çук.",
+ "cachedspecial-refresh-now": "Юлашкине пăх.",
"categories": "Категорисем",
"categoriespagetext": "Викинче çак категорисем пур.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
"special-categories-sort-count": "шучĕ тăрăх йĕркеле",
"special-categories-sort-abc": "алфавит тăрăх йĕркеле",
"deletedcontributions": "Тулашран тунă ӳсĕм",
+ "linksearch-ok": "Шырамалли",
"listusers-submit": "Кăтарт",
"listusers-noresult": "Хутшăнакансем тупăнмарĕç.",
"listgrouprights-group": "Ушкăн",
@@ -649,6 +705,7 @@
"emailuser": "Хутшăнакана çыру яр... (Письмо участнику)",
"noemailtitle": "Электронлă почта адресĕ çук",
"noemailtext": "Ку хутшăнакан электронлă адресне кăтартман е ытти хутшăнакансенчен çыру илесшĕн мар.",
+ "emailusername": "Хутшăнаканăн ячĕ:",
"emailfrom": "Камран",
"emailto": "Кам патне",
"emailsubject": "Çыру теми",
@@ -657,7 +714,8 @@
"emailsent": "Çырăва леçрĕмĕр",
"emailsenttext": "Сирĕн электронлă çырăва леçрĕмĕр.",
"watchlist": "Пăхса тăракан страницăсем ят-йышĕ",
- "mywatchlist": "Ман сăнав ят-йышĕ",
+ "mywatchlist": "Сăнаса тăракан списокĕ",
+ "watchlistfor2": "$1 валли $2",
"nowatchlist": "Эсир пăхса тăракан страницăсен списокĕ пушă.",
"watchnologin": "Системăна хăвăр ята каламалла",
"addedwatchtext": "«[[:$1]]» страницăна сирĕн [[Special:Watchlist|сăнав списока]] хушрăмăр. Малашне [[Special:RecentChanges|юлашки улшăнусене кăтартакан страницăра]] унпа çыхăннă улшăнусене хылăм шрифтпа курăнĕç.\nЕнчен те сирĕн ку страницăна сăнас кăмăл пĕтсен, «ан сăна» пускăч çине пусăр.",
@@ -670,6 +728,7 @@
"watching": "Сăнамаллисем шутне хушасси…",
"unwatching": "Сăнав ят-йышĕнчен кăларса пăрахасси…",
"enotif_reset": "Пур страницăсене те пăхнă пек палăрт",
+ "enotif_impersonal_salutation": "{{SITENAME}} хутшăнакан",
"enotif_anon_editor": "$1 анонимлă хутшăнакан",
"created": "хатĕрленĕ",
"changed": "улăштарнă",
@@ -685,7 +744,6 @@
"reverted": "Малтанхи версине тавăрнă",
"deletecomment": "Сăлтавĕ",
"rollback": "Тÿрлетÿсене каялла куçарасси",
- "rollback_short": "Каялла куçарасси",
"rollbacklink": "каялла тавăр",
"rollbackfailed": "Каялла куçарнă çухна йăнăш тухнă",
"protectlogpage": "Хӳтĕлев журналĕ",
@@ -696,7 +754,9 @@
"protectcomment": "Сăлтавĕ",
"protectexpiry": "Пĕтет:",
"protect-level-autoconfirmed": "Статьяна çĕнĕрен регистрациленнĕ, е пачах та регистрациленменнисенчен хӳтĕле",
- "protect-level-sysop": "Администраторсем çеç",
+ "protect-level-sysop": "Администраторсене кăна юрать",
+ "pagesize": "(байт)",
+ "restriction-edit": "Тӳрлет",
"undelete": "Кăларса пăрахнă страницăсене пăх",
"viewdeletedpage": "Кăларса пăрахнă страницăсене пăх",
"undeleterevisions": "Архивра пурĕ $1 верси",
@@ -706,21 +766,29 @@
"undelete-search-box": "Кăларса пăрахнă страницăсен хушшинчи шырав",
"undelete-search-submit": "Шыра",
"blanknamespace": "(Тĕп)",
- "contributions": "Хутшăнакан ӳсĕмĕ",
- "mycontris": "Манăн ӳсĕм",
- "contribsub2": "$1 ӳсĕмĕ ($2)",
+ "contributions": "{{GENDER:$1|Усă куракан}} ӳсĕмĕсем",
+ "contributions-title": "Усă куракан $1 хушни",
+ "mycontris": "Ӳсĕм",
+ "contribsub2": "{{GENDER:$3|$1}} валли ($2)",
"uctop": " (пуçламăш)",
+ "month": "Уйăхран (тата маларах):",
+ "year": "Çултан (тата маларах):",
"sp-contributions-blocklog": "Чарса лартнисен журналĕ",
- "sp-contributions-talk": "Сӳтсе яв",
+ "sp-contributions-logs": "логсем",
+ "sp-contributions-talk": "сӳтсе яв",
"sp-contributions-userrights": "Хутшăнакансен прависемпе ĕçлесси",
"sp-contributions-search": "Тӳпе шыравĕ",
- "sp-contributions-submit": "Шырас",
+ "sp-contributions-username": "IP адрес е усă куракан ят:",
+ "sp-contributions-submit": "Шыра",
"whatlinkshere": "Кунта килекен каçăсем",
"linkshere": "Çак страницăсем '''[[:$1]]''' çине илсе килеççĕ:",
"nolinkshere": "'''[[:$1]]''' страница çине ытти страницăсенчен килме пулмасть.",
+ "whatlinkshere-prev": "{{PLURAL:$1|унчченхи|унчченхи $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|урăххи|урăххисем $1}}",
"whatlinkshere-links": "← каçăсем",
"whatlinkshere-filters": "Аласем",
"blockip": "Хăтшăнакана ĕçлеме чар",
+ "ipaddressorusername": "IP адрес е усă куракан ят:",
"ipbreason": "Сăлтавĕ",
"ipbother": "Урăх вăхăт:",
"ipboptions": "2 сехет:2 hours,1 кун:1 day,3 кун:3 days,1 эрне:1 week,2 эрне:2 weeks,1 уйăх:1 month,3 уйăх:3 months,6 уйăх:6 months,1 çул:1 year,яванлăха:infinite",
@@ -757,10 +825,12 @@
"export": "Статьясен экспорчĕ",
"export-submit": "Экспортла",
"export-addcat": "Хуш",
+ "export-addns": "Хуш",
"export-templates": "Шаблонсене ĕçлеттер",
"allmessages": "Система пĕлтерĕвĕсем",
"allmessagesname": "Пĕлтерӳ",
"allmessagescurrent": "Хальхи текст",
+ "allmessages-filter-translate": "Куçар",
"thumbnail-more": "Пысăклатмалли",
"filemissing": "Файл тупăнмарĕ",
"thumbnail_error": "Пĕчĕк ӳкерчĕке тăваймарăмăр: $1",
@@ -769,16 +839,16 @@
"importinterwiki": "Вики хушшинчи импорт",
"import-interwiki-submit": "Импортирла",
"import-interwiki-namespace": "Страницăсене çак ят уçлăхне вырнаçтар:",
+ "import-upload-filename": "Файл ячĕ:",
"importnopages": "Импортламалли страницăсем çук.",
"importnofile": "Импортламалли файла тиемен",
"import-noarticle": "Импортламалли страница çук!",
"importlogpage": "Импорт журналĕ",
- "import-logentry-upload": "«[[$1]]» — файлтан импортла",
"tooltip-pt-userpage": "Сирĕн хутшăнакан страници",
"tooltip-pt-mytalk": "Сирĕн канашлу страници",
"tooltip-pt-preferences": "Сирĕн ĕнерлевсем",
"tooltip-pt-watchlist": "Эсир пăхакан страницисем",
- "tooltip-pt-logout": "Сайтран тух",
+ "tooltip-pt-logout": "Сеансне пĕтер",
"tooltip-ca-talk": "Статьяна сӳтсе явасси",
"tooltip-ca-edit": "Эсир ку страницӑна тӳрлетме пултаратӑр. Тархасшӑн ҫырса хӑваричен страницӑ мӗнле пулассине пӑхӑр.",
"tooltip-ca-addsection": "Çĕнĕ пай ту",
@@ -788,12 +858,12 @@
"tooltip-ca-move": "Страницӑна урӑх ҫӗре куҫарасси",
"tooltip-ca-watch": "Ку страницӑ хыҫҫӑн сӑнама пуҫласси",
"tooltip-ca-unwatch": "Ку страницӑ хыҫҫӑн урӑх сӑнамалла мар",
- "tooltip-search": "Шырав",
+ "tooltip-search": "Шырав {{SITENAME}}",
"tooltip-p-logo": "Тӗп страницӑ",
"tooltip-feed-atom": "Ку страницăн Atom куçару",
"tooltip-ca-nstab-image": "Файлăн страници",
"tooltip-ca-nstab-template": "Шаблонăн страници",
- "tooltip-ca-nstab-category": "Категори страницине уç",
+ "tooltip-ca-nstab-category": "Категорин страницине пăхни",
"tooltip-save": "Тӳрлетӳсене астуса хăвармалла",
"tooltip-watch": "Çак страницăна пăхса тăмаллисем шутне хуш",
"tooltip-summary": "Кĕскĕн ăнлантарса парăр",
@@ -803,6 +873,9 @@
"others": "ыттисем",
"creditspage": "Пархатарлăх",
"spambot_username": "MediaWiki спамран тасатни",
+ "pageinfo-title": "\"$1\" çинчен",
+ "pageinfo-toolboxlink": "Страници çинчен",
+ "pageinfo-category-info": "Категори çинчен",
"markaspatrolleddiff": "Тĕрĕсленĕ тесе палăрт",
"markaspatrolledtext": "Ку статьяна тĕрĕсленĕ тесе палăртмалла",
"markedaspatrolled": "Тĕрĕсленĕ пек палăртнă",
@@ -825,15 +898,19 @@
"exif-lightsource-0": "Паллă мар",
"exif-scenecapturetype-0": "Стандартлă",
"exif-gpsspeed-k": "км/сех",
- "watchlistall2": "пурте",
"namespacesall": "пурте",
"confirmemail_sent": "Çирĕплетмелли ыйтуллă çырăва ятăмăр.",
"confirmemail_success": "Сирĕн электронлă почтăн адресне çирĕплентĕ.",
"confirmemail_loggedin": "Сирĕн электронлă почтăн адресне çирĕплетрĕмĕр.",
- "scarytranscludefailed": "[Шел те, $1 шаблонпа усă кураймарăмăр]",
- "scarytranscludetoolong": "[Питĕ шел, URL ытла вăрăм]",
+ "scarytranscludefailed": "[Шаблонпа çыхăнни йăнăшнă $1]",
+ "scarytranscludetoolong": "[Ытлаши вăрăм URL]",
"deletedwhileediting": "Асăрхăр: эсир тӳрлетнĕ вăхăтра ку страницăна кăларса парахнă!",
"recreate": "Çĕнĕрен пуçла",
+ "confirm_purge_button": "OK",
+ "confirm-watch-button": "OK",
+ "confirm-unwatch-button": "OK",
+ "pipe-separator": "&#32;|&#32;",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← малтанхи страница",
"imgmultipagenext": "тепĕр страница →",
"imgmultigo": "Куç!",
@@ -847,9 +924,9 @@
"autosumm-blank": "Статьяна тĕппипех кăларса пăрахнă",
"autosumm-replace": "Страницăн ăшлăхне «$1» çине улăштарнă",
"autoredircomment": "[[$1]] çине куçарни",
- "autosumm-new": "Çĕнни: $1",
+ "autosumm-new": "Çĕнĕ страница \"$1\"",
"watchlisttools-view": "Ку тӳрлетӳпе çыхăннăскерсем",
- "version": "MediaWiki версийĕ",
+ "version": "Верси",
"fileduplicatesearch": "Пĕр пек файлсен шыравĕ",
"fileduplicatesearch-legend": "Дубликатсен шыравĕ",
"fileduplicatesearch-filename": "Файл ячĕ:",
@@ -862,5 +939,13 @@
"specialpages-group-media": "Медиа-материалсемпе тултарăшсем",
"specialpages-group-users": "Хутшăнакансем тата правасем",
"specialpages-group-highuse": "Нумай усă куракан страницăсем",
- "rightsnone": "(çук)"
+ "htmlform-selectorother-other": "Урăххи",
+ "htmlform-no": "Çук",
+ "rightsnone": "(çук)",
+ "feedback-back": "Каялла",
+ "searchsuggest-search": "Шырамалли",
+ "pagelang-select-lang": "Чĕлхе суйлăр",
+ "mediastatistics-header-audio": "Аудио",
+ "mediastatistics-header-video": "Видеосем",
+ "special-characters-group-symbols": "Символсем"
}
diff --git a/languages/i18n/cy.json b/languages/i18n/cy.json
index 3a0a6ab8..d4c32c84 100644
--- a/languages/i18n/cy.json
+++ b/languages/i18n/cy.json
@@ -12,7 +12,8 @@
"Urhixidur",
"Xxglennxx",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Tanlinellu cysylltiadau:",
@@ -39,7 +40,7 @@
"tog-shownumberswatching": "Dangos y nifer o ddefnyddwyr sy'n gwylio",
"tog-oldsig": "Y llofnod cyfredol:",
"tog-fancysig": "Trin y llofnod fel testun wici (heb gyswllt wici awtomatig)",
- "tog-uselivepreview": "Defnyddio rhagolwg byw (arbrofol)",
+ "tog-uselivepreview": "Defnyddio rhagolwg byw",
"tog-forceeditsummary": "Tynnu fy sylw pan adawaf flwch crynodeb golygu yn wag",
"tog-watchlisthideown": "Cuddio fy ngolygiadau fy hunan yn fy rhestr wylio",
"tog-watchlisthidebots": "Cuddio golygiadau bot yn fy rhestr wylio",
@@ -214,6 +215,7 @@
"otherlanguages": "Ieithoedd eraill",
"redirectedfrom": "(Ailgyfeiriad oddi wrth $1)",
"redirectpagesub": "Tudalen ailgyfeirio",
+ "redirectto": "Ailgyfeirio i:",
"lastmodifiedat": "Newidiwyd y dudalen hon ddiwethaf $2, $1.",
"viewcount": "{{PLURAL:$1|Ni chafwyd dim|Cafwyd $1|Cafwyd $1|Cafwyd $1|Cafwyd $1|Cafwyd $1}} ymweliad â'r dudalen hon.",
"protectedpage": "Tudalen a ddiogelwyd",
@@ -221,9 +223,11 @@
"jumptonavigation": "llywio",
"jumptosearch": "chwilio",
"view-pool-error": "Ymddiheurwn, mae gormod o waith gan y gweinyddion ar hyn o bryd.\nMae gormod o ddefnyddwyr am weld y dudalen hon ar unwaith.\nArhoswch ychydig cyn ceisio mynd at y dudalen hon eto.\n\n$1",
+ "generic-pool-error": "Drapia, mae'r gweinyddion dan gryn bwysau ar hyn o bryd.\nMae gormod o ddefnyddwyr yn ceisio gwneud yr un peth!\nDaliwch eich gafael am chydig funudau cyn mynd ati i geisio eto.",
"pool-timeout": "Cafwyd goroedi wrth aros am y clo",
"pool-queuefull": "Mae cwt y gronfa brosesu yn llawn",
"pool-errorunknown": "Gwall anhysbys",
+ "poolcounter-usage-error": "Gwall defnydd: $1",
"aboutsite": "Ynglŷn â {{SITENAME}}",
"aboutpage": "Project:Amdanom",
"copyright": "Rhoddir y cynnwys ar gael ar delerau'r drwydded $1, heblaw ei fod wedi nodi'n wahanol.",
@@ -264,6 +268,9 @@
"hidetoc": "cuddio",
"collapsible-collapse": "Crebacher",
"collapsible-expand": "Ehanger",
+ "confirmable-confirm": "Wyt ti'n siwr?",
+ "confirmable-yes": "Ydw",
+ "confirmable-no": "Nac ydw",
"thisisdeleted": "Ydych chi am ddangos, neu ddad-ddileu $1?",
"viewdeleted": "Gweld $1?",
"restorelink": "$1 {{PLURAL:$1|golygiad sydd wedi'i ddileu|golygiad sydd wedi'i ddileu|olygiad sydd wedi'u dileu|golygiad sydd wedi'u dileu|golygiad sydd wedi'u dileu|golygiad sydd wedi'u dileu}}",
@@ -333,7 +340,8 @@
"viewsourcetext": "Cewch weld a chopïo côd y dudalen:",
"viewyourtext": "Cewch weld a copïo ffynhonnell ''eich golygiadau'' i'r dudalen hon:",
"protectedinterface": "Testun ar gyfer rhyngwyneb y wici yw cynnwys y dudalen hon. Clowyd y dudalen er mwyn ei diogeli. Os am gyfieithu'r neges neu ei newid ym mhob wici yn hytrach nag yn hwn yn unig, defnyddiwch [//translatewiki.net/ translatewiki.net], y prosiect MediaWiki sy'n hyrwyddo'r gwaith cyfieithu.",
- "editinginterface": "'''Dalier sylw:''' Rydych yn golygu tudalen sy'n rhan o destun rhyngwyneb y meddalwedd. Bydd newidiadau i'r dudalen hon yn effeithio ar y rhyngwyneb a ddefnyddir ar y wici hwn yn unig. Os am gyfieithu'r neges rhagosodedig a ddefnyddir ar bob wici, ystyriwch ddefnyddio [//translatewiki.net/ translatewiki.net], sef y prosiect MediaWiki sy'n hyrwyddo creu rhyngwyneb amlieithog ar wicïau.",
+ "editinginterface": "<strong>Dalier sylw:</strong> Rydych yn golygu tudalen sy'n rhan o destun rhyngwyneb y meddalwedd. Bydd newidiadau i'r dudalen hon yn effeithio ar y rhyngwyneb a ddefnyddir ar y wici hwn yn unig.",
+ "translateinterface": "I ychwanegu neu newid y cyfieithiad ar gyfer pob wici, defnyddiwch [//translatewiki.net/ translatewiki.net], sef prosiect lleol MediaWiki.",
"cascadeprotected": "Diogelwyd y dudalen hon rhag ei newid, oherwydd ei bod wedi ei chynnwys yn y {{PLURAL:$1|dudalen ganlynol|dudalen ganlynol|tudalennau canlynol|tudalennau canlynol|tudalennau canlynol|tudalennau canlynol}}, a {{PLURAL:$1|honno yn ei thro wedi ei|honno yn ei thro wedi ei|rheiny yn eu tro wedi eu|rheiny yn eu tro wedi eu|rheiny yn eu tro wedi eu|rheiny yn eu tro wedi eu}} diogelu, a'r dewisiad 'sgydol' ynghynn:\n$2",
"namespaceprotected": "Nid oes caniatâd gennych i olygu tudalennau yn y parth '''$1'''.",
"customcssprotected": "Nid oes caniatâd ganddoch i olygu'r dudalen CSS hon oherwydd bod gosodiadau personol defnyddiwr arall arno.",
@@ -348,7 +356,7 @@
"invalidtitle-knownnamespace": "Teitl annilys o'r enw \"$3\" yn y parth \"$2\"",
"invalidtitle-unknownnamespace": "Teitl annilys ag iddi'r rhif parth anhysbys $1 a'r enw \"$2\"",
"exception-nologin": "Nid ydych wedi mewngofnodi",
- "exception-nologin-text": "[[Special:Userlogin|Mewngofnodwch]] er mwyn gweld y dudalen neu gyflawni'r weithred.",
+ "exception-nologin-text": "Mewngofnodwch er mwyn gweld y dudalen neu gyflawni'r weithred.",
"exception-nologin-text-manual": "Mae angen $1 er mwyn gweld y dudalen neu gyflawni'r weithred.",
"virus-badscanner": "Cyfluniad gwael: sganiwr firysau anhysbys: ''$1''",
"virus-scanfailed": "methodd y sgan (côd $1)",
@@ -453,6 +461,7 @@
"createaccount-text": "Creodd rhywun gyfrif o'r enw $2 ar {{SITENAME}} ($4) ar gyfer y cyfeiriad e-bost hwn. \"$3\" yw'r cyfrinair ar gyfer \"$2\". Dylech fewngofnodi a newid eich cyfrinair yn syth.\n\nRhydd ichi anwybyddu'r neges hon os mai camgymeriad oedd creu'r cyfrif.",
"login-throttled": "Rydych wedi ceisio mewngofnodi gormod o weithiau ar ben ei gilydd.\nOedwch $1 cyn mentro eto.",
"login-abort-generic": "Ni lwyddodd y mewngofnodi - Rhoddwyd y gorau iddo",
+ "login-migrated-generic": "Trosglwyddwyd eich cyfrif ac nid yw eich enw defnyddiwr bellach yn bodoli ar y wici hwn.",
"loginlanguagelabel": "Iaith: $1",
"suspicious-userlogout": "Gwrthodwyd eich cais i allgofnodi oherwydd ei fod yn ymddangos mai gweinydd wedi torri neu ddirprwy gelc a anfonodd y cais.",
"createacct-another-realname-tip": "Gallwch ddewis roi eich enw go iawn.\nOs y gwnewch, fe gaiff yr enw go iawn ei defnyddio wrth dadogi'ch gwaith.",
@@ -483,6 +492,7 @@
"resetpass-abort-generic": "Mae estyniad wedi atal newid y cyfrinair.",
"resetpass-expired": "Mae oes eich cyfrinair wedi dod i ben. Gosodwch gyfrinair newydd i fewngofnodi.",
"resetpass-expired-soft": "Mae eich cyfrinair wedi dod i ben ac mae'n rhaid ei ailosod. Dewisiwch gyfrinair newydd sbon nawr, neu cliciwch \"{{int:resetpass-submit-cancel}}\" a'i ailosod rywdro eto.",
+ "resetpass-validity-soft": "Nid yw eich cyfrinair $1 yn dal ddilys.\n\nDewisiwch gyfrinair newydd nawr, neu gliciwch \"{{int:resetpass-submit-cancel}}\" i'w ailosod yn nes ymlaen.",
"passwordreset": "Ailosod cyfrinair",
"passwordreset-text-one": "Cwblhewch y ffurflen hon er mwyn ailosod eich cyfrinair.",
"passwordreset-text-many": "{{PLURAL:$1|Llanwch un o'r blychau er mwyn derbyn cyfrinair dros dro mewn ebost.}}",
@@ -502,7 +512,6 @@
"passwordreset-emailsent-capture": "Anfonwyd e-bost i ailosod cyfrinair, ac fe'i ddangosir isod.",
"passwordreset-emailerror-capture": "Lluniwyd e-bost i ailosod cyfrinair fel ag a welir isod, ond ni lwyddwyd i'w anfon at y {{GENDER:$2|defnyddiwr}}: $1",
"changeemail": "Newid y cyfeiriad e-bost",
- "changeemail-header": "Newid cyfeiriad e-bost y cyfrif",
"changeemail-text": "Cwblhewch y ffurflen hon i newid eich cyfeiriad e-bost. Bydd angen i chi roi eich cyfrinair i gadarnhau hyn o newid.",
"changeemail-no-info": "Ni allwch fynd at y dudalen hon heblaw eich bod wedi mewngofnodi.",
"changeemail-oldemail": "Y cyfeiriad e-bost presennol:",
@@ -510,7 +519,6 @@
"changeemail-none": "(dim)",
"changeemail-password": "Eich cyfrinair ar {{SITENAME}}:",
"changeemail-submit": "Newidier y cyfeiriad e-bost",
- "changeemail-cancel": "Diddymer",
"changeemail-throttled": "'Da chi wedi trio mewngofnodi gormod o weithiau.\nDaliwch eich gafael am $1 cyn ceisio eto.",
"resettokens": "Ailosod tocynnau",
"resettokens-text": "Gallwch ailosod tocynnau sy'n galluogi mynediad at rai manylion preifat sydd ynghlwm wrth y cyfrif yma.\n\nDylech wneud hyn os wnaethoch rannu'r manylion hyn gyda rhywun ar ddamwain neu os oes problem wedi codi gyda diogelwch eich cyfrif.",
@@ -547,9 +555,11 @@
"preview": "Rhagolwg",
"showpreview": "Dangos rhagolwg",
"showdiff": "Dangos newidiadau",
- "anoneditwarning": "'''Dalier sylw''': Nid ydych wedi mewngofnodi. Fe fydd eich cyfeiriad IP yn ymddangos ar hanes golygu'r dudalen hon. Gallwch ddewis cuddio'ch cyfeiriad IP drwy greu cyfrif (a mewngofnodi) cyn golygu.",
+ "blankarticle": "<strong>Gan bwyll:</strong> Mae'r dudalen rydych yn ei chreu'n wag. Os cliciwch \"{{int:savearticle}}\" eto, yna caiff y dudalen ei chreu heb unrhyw gynnwys ynddi.",
+ "anoneditwarning": "<strong>Dalier sylw</strong>: Nid ydych wedi mewngofnodi. Fe fydd eich cyfeiriad IP yn ymddangos ar hanes golygu'r dudalen hon. Gallwch ddewis cuddio'ch cyfeiriad IP drwy greu cyfrif (a mewngofnodi) cyn golygu.",
"anonpreviewwarning": "''Nid ydych wedi mewngofnodi. Os y cadwch eich newidiadau caiff eich cyfeiriad IP ei gofnodi yn hanes golygu'r dudalen hon.''",
"missingsummary": "'''Sylwer:''' Nid ydych wedi gosod nodyn yn y blwch 'Crynodeb'.\nOs y pwyswch eto ar 'Cadw'r dudalen' caiff y golygiad ei gadw heb nodyn.",
+ "selfredirect": "<strong>Gofal:</strong> Rydych yn ailgyfeirio'r dudalen hon ati hi ei hun! Gwirwch yr hyn rydych yn ceisio'i wneud. Os cliciwch \"{{int:savearticle}}\" eto yna caiff y dudalen ailgyfeirio (wallus!) ei chreu beth bynnag.",
"missingcommenttext": "Rhowch eich sylwadau isod.",
"missingcommentheader": "'''Nodyn:''' Nid ydych wedi cynnig unrhywbeth yn y blwch 'Pwnc/Pennawd:'. Os y cliciwch \"{{int:savearticle}}\" eto fe gedwir y golygiad heb bennawd.",
"summary-preview": "Rhagolwg o'r crynodeb:",
@@ -632,6 +642,8 @@
"edit-gone-missing": "Ni ellid diweddaru'r dudalen.\nYmddengys iddi gael ei dileu.",
"edit-conflict": "Cyd-ddigwyddiad golygu.",
"edit-no-change": "Anwybyddwyd eich golygiad, gan na newidiwyd y testun.",
+ "postedit-confirmation-created": "Crewyd y dudalen.",
+ "postedit-confirmation-restored": "Adferwyd y dudalen.",
"postedit-confirmation-saved": "Rhoddwyd eich golygiad ar gadw.",
"edit-already-exists": "Ni ellid creu tudalen newydd.\nMae ar gael yn barod.",
"defaultmessagetext": "Y testun rhagosodedig",
@@ -645,6 +657,10 @@
"content-model-text": "testun plaen",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Dim gwrthrych",
+ "content-json-empty-array": "Rhesi gwag",
+ "duplicate-args-category": "Tudalennau gyda meysydd deublyg yn y Nodion",
+ "duplicate-args-category-desc": "Mae'r dudalen hon yn cynnwys meysydd yn y Nodion, ddwy waith e.e. <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> neu <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Rhybudd:''' Mae gormod o alwadau ar ffwythiannau dosrannu sy'n dreth ar adnoddau yn y dudalen hon.\n\nDylai fod llai na $2 {{PLURAL:$2|galwad|alwad|alwad|galwad}} yn y dudalen, ond ar hyn o bryd mae $1 {{PLURAL:$1|galwad|alwad|alwad|galwad}} ynddi.",
"expensive-parserfunction-category": "Tudalennau a gormod o alwadau ar ffwythiannau dosrannu sy'n dreth ar adnoddau",
"post-expand-template-inclusion-warning": "'''Rhybudd:''' Mae maint y nodiadau ar ôl eu chwyddo yn rhy fawr.\nNi chaiff rhai nodiadau eu cynnwys.",
@@ -655,8 +671,10 @@
"parser-template-recursion-depth-warning": "Wedi mynd dros ben y terfyn ar ddyfnder dychweliad nodiadau ($1)",
"language-converter-depth-warning": "Wedi mynd tu hwnt i'r terfyn dyfnder ($1) ar y cyfnewidydd iaith.",
"node-count-exceeded-category": "Tudalennau lle mae nifer y nodau yn ormod",
+ "node-count-exceeded-category-desc": "Rydych wedi mynd dros y mwyafswm a ganiateir.",
"node-count-exceeded-warning": "Mae nifer y nodau yn y dudalen yn ormod",
"expansion-depth-exceeded-category": "Tudalennau â dyfnder ehangu tu hwnt i'r terfyn",
+ "expansion-depth-exceeded-category-desc": "Mae'r dudalen yn rhy fawr!",
"expansion-depth-exceeded-warning": "Mae dyfnder ehangu'r dudalen y tu hwnt i'r terfyn",
"parser-unstrip-loop-warning": "Wedi darganfod dolen dad-blicio (unstrip loop)",
"parser-unstrip-recursion-limit": "Wedi mynd dros ben y terfyn ar ddychweliad dad-blicio (unstrip recursion) ($1)",
@@ -675,7 +693,7 @@
"currentrev": "Diwygiad cyfoes",
"currentrev-asof": "Y diwygiad cyfredol, am $1",
"revisionasof": "Diwygiad $1",
- "revision-info": "Y fersiwn a roddwyd ar gadw am $1 gan $2",
+ "revision-info": "Fersiwn a roddwyd ar gadw am $1 gan $2",
"previousrevision": "← At y diwygiad blaenorol",
"nextrevision": "At y diwygiad dilynol →",
"currentrevisionlink": "Y diwygiad cyfoes",
@@ -697,9 +715,10 @@
"history-feed-empty": "Nid yw'r dudalen a ofynwyd amdani'n bod.\nGall fod iddi gael ei dileu neu ei hailenwi.\nGallwch [[Special:Search|chwilio'r]] wici am dudalennau eraill perthnasol.",
"rev-deleted-comment": "(dilëwyd crynodeb y golygiad)",
"rev-deleted-user": "(enw defnyddiwr wedi ei ddiddymu)",
- "rev-deleted-event": "(tynnwyd gweithred y lòg)",
+ "rev-deleted-event": "(tynnwyd manylion y lòg)",
"rev-deleted-user-contribs": "[tynnwyd enw defnyddiwr neu gyfeiriad IP i ffwrdd - ni ddangosir y golygiad ar y rhestr gyfraniadau]",
"rev-deleted-text-permission": "'''Dilëwyd''' y diwygiad hwn o'r dudalen.\nMae manylion ar gael yn y [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} lòg dileuon].",
+ "rev-suppressed-text-permission": "Mae'r drafft yma wedi'i <strong>atal</strong>.\nCeir rhagor o fanylion yn y [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log atal].",
"rev-deleted-text-unhide": "Cafodd y diwygiad hwn o'r dudalen ei '''ddileu'''.\nGweler cofnod y dileu ar y [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} lòg dileu].\nOnd gallwch chi [$1 weld y diwygiad] o hyd os y mynnwch.",
"rev-suppressed-text-unhide": "Mae’r diwygiad hwn o’r dudalen wedi cael ei '''guddio'''.\nCewch weld y manylion ar y [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} lòg cuddio].\nCewch dal [$1 weld y golygiad] os y mynwch.",
"rev-deleted-text-view": "'''Dilëwyd''' y diwygiad hwn o'r dudalen.\nGallwch ei weld; mae manylion ar gael yn y [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} lòg dileuon].",
@@ -721,12 +740,16 @@
"revdelete-selected-text": "Dewisiwyd y {{PLURAL:$1|diwygiad|diwygiad|diwygiadau}} canlynol o [[:$2]]:",
"revdelete-selected-file": "Dewiswyd y {{PLURAL:$1|diwygiad|diwygiad|diwygiadau}} canlynol o'r ffeil [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Digwyddiad|Digwyddiad|Digwyddiadau}} a ddewiswyd o'r lòg:",
+ "revdelete-text-text": "Bydd y golygiadau a ddilewyd yn dal i ymddangos yn hanes y dudalen, ond ni fydd y cyhoedd yn medru gweld rhannau ohonynt.",
+ "revdelete-text-file": "Bydd fersiynau gwahanol o'r ffeiliau'n dal i ymddangos yn hanes y dudalen, ond ni fydd y cyhoedd yn medru gweld rhannau ohonynt.",
+ "logdelete-text": "Bydd y log o weithrdoedd a ddilewyd yn dal i ymddangos yn y logs, ond ni fydd y cyhoedd yn medru gweld rhannau ohonynt.",
+ "revdelete-text-others": "Bydd gweinyddwyr eraill yn parhau i weld y manylion a guddiwyd a'u hailalw, oni bai eich bod yn gosod cyfyngiadau ychwanegol.",
"revdelete-confirm": "Byddwch gystal â chadarnhau eich bod yn bwriadu gwneud hyn, eich bod yn deall yr effaith a gaiff, a'ch bod yn ei wneud yn ôl y [[{{MediaWiki:Policy-url}}|y polisi]].",
"revdelete-suppress-text": "'''Dim ond''' yn yr achosion sy'n dilyn y dylech fentro cuddio gwybodaeth:\n* Gwybodaeth a all fod yn enllib\n* Gwybodaeth bersonol anaddas\n*: ''cyfeiriad cartref, rhif ffôn, rhif yswiriant cenedlaethol, ayb.''",
"revdelete-legend": "Gosod cyfyngiadau ar y gallu i weld",
"revdelete-hide-text": "Testun y diwygiad",
"revdelete-hide-image": "Cuddio cynnwys y ffeil",
- "revdelete-hide-name": "Cuddio'r weithred a'r targed",
+ "revdelete-hide-name": "Cuddio'r targed a'r paramedr",
"revdelete-hide-comment": "Sylw golygu",
"revdelete-hide-user": "Enw defnyddiwr/IP y golygydd",
"revdelete-hide-restricted": "Gosod y cyfyngiadau gweld data ar weinyddwyr yn ogystal ag eraill",
@@ -779,7 +802,6 @@
"mergehistory-same-destination": "Ni all y tudalen gwreiddiol a'r cyrchfan fod yr un enw",
"mergehistory-reason": "Rheswm:",
"mergelog": "Lòg cyfuno",
- "pagemerge-logentry": "llyncwyd [[$1]] gan [[$2]] (golygiadau hyd at $3)",
"revertmerge": "Daduno",
"mergelogpagetext": "Fe ddilyn rhestr o'r achosion diweddaraf o hanes tudalen yn cael ei gyfuno a hanes tudalen arall.",
"history-title": "$1: hanes golygu",
@@ -820,6 +842,7 @@
"search-result-category-size": "{{PLURAL:$1|$1 aelod}} ({{PLURAL:$2|$2 is-gategori}}, {{PLURAL:$3|$3 ffeil}})",
"search-redirect": "(ailgyfeiriad $1)",
"search-section": "(adran $1)",
+ "search-category": "(categori $1)",
"search-file-match": "(yn cyfateb i gynnwys y ffeil)",
"search-suggest": "Ai am hyn y chwiliwch: $1",
"search-interwiki-caption": "Chwaer-brosiectau",
@@ -830,20 +853,21 @@
"searchall": "oll",
"showingresults": "Yn dangos $1 {{PLURAL:$1|canlyniad|canlyniad|ganlyniad|chanlyniad|chanlyniad|canlyniad}} isod gan ddechrau gyda rhif '''$2'''.",
"showingresultsinrange": "Yn dangos hyd at {{PLURAL:$1||<strong>1</strong> canlyniad|<strong>$1</strong> ganlyniad|$1 o ganlyniadau}} isod yn yr ystod #<strong>$2</strong> i #<strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5||Canlyniad '''$1''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''|Canlyniadau '''$1 - $2''' o blith '''$3'''}} ar gyfer '''$4'''",
+ "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Canlyniadau: <strong>$1 - $2</strong> o <strong>$3</strong>}}",
"search-nonefound": "Ni chafwyd dim canlyniadau i'r ymholiad.",
"powersearch-legend": "Chwiliad uwch",
"powersearch-ns": "Chwilio yn y parthau:",
"powersearch-togglelabel": "Dewis:",
"powersearch-toggleall": "Oll",
"powersearch-togglenone": "Dim un",
+ "powersearch-remember": "Cofio'r dewis ar gyfer archwiliadau'r dyfodol",
"search-external": "Chwiliad allanol",
"searchdisabled": "Mae'r teclyn chwilio ar {{SITENAME}} wedi'i analluogi dros dro.\nYn y cyfamser gallwch chwilio drwy Google.\nCofiwch y gall mynegeion Google o gynnwys {{SITENAME}} fod ar ei hôl hi.",
"search-error": "Cafwyd gwall wrth chwilio: $1",
"preferences": "Dewisiadau",
"mypreferences": "Dewisiadau",
"prefs-edits": "Nifer y golygiadau:",
- "prefsnologintext2": "Mae angen $1 er mwyn gosod eich dewisiadau personol.",
+ "prefsnologintext2": "Mewngofnodwch er mwyn newid eich dewisiadau.",
"prefs-skin": "Gwedd",
"skin-preview": "Rhagolwg",
"datedefault": "Dim dewisiad",
@@ -921,7 +945,7 @@
"gender-female": "Mae hi'n golygu tudalennau wici",
"prefs-help-gender": "Nid oes rhaid llanw'r dewis yma. \nMae'r meddalwedd yn defnyddio hwn i gyfeirio atoch ac i'ch cyfarch yn ôl eich rhyw.\nMae'r wybodaeth hon ar gael i'r cyhoedd.",
"email": "E-bost",
- "prefs-help-realname": "* Enw iawn (dewisol): Os ydych yn dewis ei roi, fe fydd yn cael ei ddefnyddio er mwyn rhoi cydnabyddiaeth i chi am eich gwaith.",
+ "prefs-help-realname": "* Enw iawn yn ddewisol.\nOs ydych yn dewis ei roi, fe fydd yn cael ei ddefnyddio er mwyn rhoi cydnabyddiaeth i chi am eich gwaith.",
"prefs-help-email": "Os ydych yn dewis gosod eich cyfeiriad e-bost yna gallwn anfon cyfrinair newydd atoch os aiff yr un gwreiddiol yn angof gennych.",
"prefs-help-email-others": "Gallwch hefyd adael i eraill anfon e-bost atoch trwy'r cyswllt ar eich tudalen defnyddiwr neu eich tudalen sgwrs, heb ddatguddio'ch manylion personol.",
"prefs-help-email-required": "Cyfeiriad e-bost yn angenrheidiol.",
@@ -942,6 +966,7 @@
"prefs-tokenwatchlist": "Tocyn",
"prefs-diffs": "Cymharu golygiadau ('gwahan')",
"prefs-help-prefershttps": "Bydd y dewis yma'n cael ei roi ar waith y tro nesaf i chi fewngofnodi.",
+ "prefswarning-warning": "Rydych wedi newid eich Dewisiadau, ac nid ydynt eto wedi'u cadw.\nOs gadewch y dudalen hon heb glicio \"$1\" yna fe gollwch y newidiadau hyn.",
"prefs-tabs-navigation-hint": "Awgrym: Gallwch ddefnyddio'r allweddellau sy'n saethau i'r chwith neu i'r dde i lywio rhwng y tabiau ar restr y tabiau.",
"email-address-validity-valid": "Y cyfeiriad e-bost yn ymddangos yn un dilys",
"email-address-validity-invalid": "Rhowch gyfeiriad e-bost dilys",
@@ -993,6 +1018,7 @@
"right-move": "Symud tudalennau",
"right-move-subpages": "Symud tudalennau gyda'u his-dudalennau",
"right-move-rootuserpages": "Symud prif dudalennau defnyddwyr",
+ "right-move-categorypages": "Symud tudalennau categori",
"right-movefile": "Symud ffeiliau",
"right-suppressredirect": "Peidio â chreu ailgyfeiriad o'r hen enw wrth symud tudalen",
"right-upload": "Uwchlwytho ffeiliau",
@@ -1014,7 +1040,8 @@
"right-deletedtext": "Gweld ysgrifen sydd wedi ei ddileu a newidiadau rhwng fersiynau ar ôl eu dileu",
"right-browsearchive": "Chwilio drwy tudalennau dilëedig",
"right-undelete": "Adfer tudalen dilëedig",
- "right-suppressrevision": "Adolygu ac adfer diwygiadau sydd wedi eu cuddio rhag gweinyddwyr",
+ "right-suppressrevision": "Gweld, cuddio a datguddio adolygiadau arbennig o dudalennau, o olwg pob defnyddiwr.",
+ "right-viewsuppressed": "Gweld adolygiadau sydd wedi eu cuddio",
"right-suppressionlog": "Gweld logiau preifat",
"right-block": "Atal defnyddwyr eraill rhag golygu",
"right-blockemail": "Atal defnyddiwr rhag anfon e-bost",
@@ -1066,6 +1093,7 @@
"action-move": "symud y dudalen",
"action-move-subpages": "symud y dudalen a'i is-dudalennau",
"action-move-rootuserpages": "symud prif dudalennau defnyddwyr",
+ "action-move-categorypages": "symud y tudalennau categori",
"action-movefile": "symud y ffeil hon",
"action-upload": "uwchlwytho'r ffeil",
"action-reupload": "trosysgrifo ffeil sydd eisoes ar gael",
@@ -1112,7 +1140,7 @@
"recentchanges-legend-heading": "'''Allwedd:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gweler hefyd [[Special:NewPages|restr y tudalennau newydd]])",
"recentchanges-legend-plusminus": "(''±123'')",
- "rcnotefrom": "Isod rhestrir pob newid er <strong>'''$2'''</strong> (ymddengys hyd at <strong>'''$1'''</strong> ohonynt).",
+ "rcnotefrom": "Isod rhestrir pob newid er <strong>$3, $4</strong> (ymddengys <strong>$1</strong> ohonynt).",
"rclistfrom": "Dangos newidiadau newydd, gan ddechrau ers $3 $2",
"rcshowhideminor": "$1 golygiadau bychain",
"rcshowhideminor-show": "Dangoser",
@@ -1206,7 +1234,7 @@
"windows-nonascii-filename": "Nid yw'r wici hwn yn cynnal enwau ffeiliau sy'n cynnwys nodau arbennig.",
"fileexists": "Mae ffeil gyda'r enw hwn eisoes yn bodoli; gwiriwch <strong>[[:$1]]</strong> os nad ydych yn sicr bod angen ei newid.\n[[$1|thumb]]",
"filepageexists": "Mae tudalen ddisgrifiad ar gyfer y ffeil hon eisoes ar gael ar <strong>[[:$1]]</strong>, ond nid oes ffeil o'r enw hwn ar gael ar hyn o bryd.\nNi fydd crynodeb a osodir wrth uwchlwytho yn ymddangos ar y dudalen ddisgrifiad.\nEr mwyn gwneud i'r crynodeb ymddangos yno, bydd raid i chi olygu'r dudalen ddisgrifiad yn unswydd.\n[[$1|thumb]]",
- "fileexists-extension": "Mae ffeil ag enw tebyg eisoes yn bod: [[$2|thumb]]\n* Enw'r ffeil ar fin ei uwchlwytho: <strong>[[:$1]]</strong>\n* Enw'r ffeil sydd eisoes yn bod: <strong>[[:$2]]</strong>\nDewiswch enw arall os gwelwch yn dda.",
+ "fileexists-extension": "Mae ffeil ag enw tebyg eisoes yn bod: [[$2|thumb]]\n* Enw'r ffeil ar fin ei uwchlwytho: <strong>[[:$1]]</strong>\n* Enw'r ffeil sydd eisoes yn bod: <strong>[[:$2]]</strong>\nYdych chi am ddewis enw mwy manwl?",
"fileexists-thumbnail-yes": "Ymddengys bod delwedd wedi ei leihau ''(bawd)'' ar y ffeil. [[$1|thumb]]\nCymharwch gyda'r ffeil <strong>[[:$1]]</strong>.\nOs mai'r un un llun ar ei lawn faint sydd ar yr ail ffeil yna does dim angen uwchlwytho llun ychwanegol o faint bawd.",
"file-thumbnail-no": "Mae <strong>$1</strong> ar ddechrau enw'r ffeil.\nMae'n ymddangos felly bod y ddelwedd wedi ei leihau ''(maint bawd)''.\nOs yw'r ddelwedd ar ei lawn faint gallwch barhau i'w uwchlwytho. Os na, newidiwch enw'r ffeil, os gwelwch yn dda.",
"fileexists-forbidden": "Mae ffeil gyda'r enw hwn eisoes ar gael, ac ni ellir ei throsysgrifo.\nOs ydych am uwchlwytho'ch ffeil, ewch nôl ac uwchlwythwch hi ac enw newydd arni.\n[[File:$1|thumb|center|$1]]",
@@ -1324,9 +1352,11 @@
"license": "Trwyddedu:",
"license-header": "Trwyddedu",
"nolicense": "Heb ddewis trwydded",
+ "licenses-edit": "Golygu deisiadau twryddedu",
"license-nopreview": "(Dim rhagolwg ar gael)",
- "upload_source_url": " (URL dilys, ar gael i'r cyhoedd)",
- "upload_source_file": " (ffeil ar eich cyfrifiadur)",
+ "upload_source_url": "(y ffeil rydych wedi'i dewis o URL cyhoeddus)",
+ "upload_source_file": "(y ffeil rydych wedi'i dewis o'ch cyfrifiadur)",
+ "listfiles-delete": "dileu",
"listfiles-summary": "Rhestr yr holl ffeiliau sydd wedi eu huwchlwytho sydd ar y dudalen hon.",
"listfiles_search_for": "Chwilio am enw'r ddelwedd:",
"imgfile": "ffeil",
@@ -1401,12 +1431,14 @@
"filedelete-maintenance": "Mae'r gallu i ddileu ffeiliau a'u hadfer wedi ei anallogi tra bod gwaith cynnal wrthi.",
"filedelete-maintenance-title": "Ni ellir dileu'r ffeil",
"mimesearch": "Chwiliad MIME",
- "mimesearch-summary": "Fe allwch ddefnyddio'r dudalen hon i hidlo'r ffeiliau yn ôl eu math MIME.\nMewnbwn: contenttype/subtype, e.e. <code>image/jpeg</code>.",
+ "mimesearch-summary": "Fe allwch ddefnyddio'r dudalen hon i hidlo'r ffeiliau yn ôl eu math MIME.\nMewnbwn: contenttype/subtype neu contenttype/*, e.e. <code>image/jpeg</code>.",
"mimetype": "Ffurf MIME:",
"download": "islwytho",
"unwatchedpages": "Tudalennau sydd â neb yn eu gwylio",
"listredirects": "Rhestru'r ail-gyfeiriadau",
"listduplicatedfiles": "Rhestr y ffeiliau sydd wedi eu dyblygu",
+ "listduplicatedfiles-summary": "Dim ond ffeiliau lleol a gaiff eu hystyried.",
+ "listduplicatedfiles-entry": "Mae [[:File:$1|$1]] yn ddeublyg.",
"unusedtemplates": "Nodiadau heb eu defnyddio",
"unusedtemplatestext": "Dyma restr o'r holl dudalennau yn y parth {{ns:template}} nad ydynt wedi eu cynnwys yn unrhyw dudalen arall.\nCofiwch chwilio am gysylltiadau eraill at nodyn a'u hystyried cyn ei ddileu.",
"unusedtemplateswlh": "cysylltiadau eraill",
@@ -1415,14 +1447,13 @@
"randomincategory": "Tudalen ar hap o blith tudalennau'r categori",
"randomincategory-invalidcategory": "Nid yw \"$1\" yn enw dilys i gategori.",
"randomincategory-nopages": "Nid oes unrhyw dudalennau yn y categori [[:Category:$1]].",
- "randomincategory-selectcategory": "Nôl tudalen ar hap o'r categori: $1 $2.",
- "randomincategory-selectcategory-submit": "Gwneler",
+ "randomincategory-category": "Categori:",
+ "randomincategory-legend": "Tudalen ar hap o blith tudalennau'r categori",
"randomredirect": "Tudalen ailgyfeirio ar hap",
"randomredirect-nopages": "Does dim tudalennau ailgyfeirio yn y parth \"$1\".",
"statistics": "Ystadegau",
"statistics-header-pages": "Ystadegau tudalennau",
"statistics-header-edits": "Ystadegau golygiadau",
- "statistics-header-views": "Ystadegau ymweliadau",
"statistics-header-users": "Ystadegau defnyddwyr",
"statistics-header-hooks": "Ystadegau eraill",
"statistics-articles": "Tudalennau pwnc",
@@ -1431,13 +1462,9 @@
"statistics-files": "Ffeiliau wedi eu huwchlwytho",
"statistics-edits": "Golygiadau ers y dechrau ar {{SITENAME}}",
"statistics-edits-average": "Golygiadau'r dudalen, ar gyfartaledd",
- "statistics-views-total": "Cyfanswm yr ymweliadau",
- "statistics-views-total-desc": "Ni chynhwysir ymweliadau â thudalennau nad ydynt yn bod na thudalennau arbennig",
- "statistics-views-peredit": "Ymweliadau wrth y golygiad:",
"statistics-users": "[[Special:ListUsers|Defnyddwyr]] cofrestredig",
"statistics-users-active": "Defnyddwyr gweithgar",
"statistics-users-active-desc": "Defnyddwyr sydd wedi gweithredu unwaith neu ragor yn ystod y {{PLURAL:$1||diwrnod|deuddydd|tridiau|$1 diwrnod|$1 diwrnod}} diwethaf",
- "statistics-mostpopular": "Tudalennau sy'n derbyn ymweliad amlaf",
"pageswithprop": "Tudalennau a chanddynt nodwedd arbennig",
"pageswithprop-legend": "Tudalennau a chanddynt nodwedd arbennig",
"pageswithprop-text": "Mae'r dudalen hon yn rhestru tudalennau sydd yn defnyddio nodwedd arbennig yn y dudalen.",
@@ -1478,13 +1505,14 @@
"uncategorizedtemplates": "Nodiadau heb eu categoreiddio",
"unusedcategories": "Categorïau gwag",
"unusedimages": "Lluniau na ddefnyddiwyd eto",
- "popularpages": "Erthyglau poblogaidd",
"wantedcategories": "Categorïau sydd eu hangen",
"wantedpages": "Erthyglau sydd eu hangen",
"wantedpages-badtitle": "Mae teitl annilys ymhlith y canlyniadau, sef: $1",
"wantedfiles": "Ffeiliau sydd eu hangen",
"wantedfiletext-cat": "Mae'r ffeiliau canlynol yn cael eu defnyddio er nad ydynt ar gael. Hwyrach bod ffeiliau o storfeydd allanol hefyd ar y rhestr, serch eu bod ar gael. Bydd y rhain, sydd wedi eu cynnwys yma yn anghywir, yn ymddangos a <del>llinell drwyddynt</del>. Hefyd, mae rhestr o dudalennau sydd a ffeiliau nad ydynt ar gael arnynt draw ar [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Mae'r ffeiliau canlynol yn cael eu defnyddio ond nid ydynt yn bodoli. Yn ychwanegol i hyn, mae tudalen sy'n embedio ffeiliau nad ydynt yn bodoli yn cael eu rhestru yn [[:$1]].",
"wantedfiletext-nocat": "Mae'r ffeiliau canlynol yn cael eu defnyddio er nad ydynt ar gael. Hwyrach bod ffeiliau o storfeydd allanol hefyd ar y rhestr, serch eu bod ar gael. Bydd y rhain, sydd wedi eu cynnwys yma yn anghywir, yn ymddangos a <del>llinell drwyddynt</del>.",
+ "wantedfiletext-nocat-noforeign": "Mae'r ffeiliau canlynol yn cael eu defnyddio ond nid ydynt yn bodoli.",
"wantedtemplates": "Nodiadau sydd eu hangen",
"mostlinked": "Tudalennau yn nhrefn nifer y cysylltiadau iddynt",
"mostlinkedcategories": "Categorïau yn nhrefn nifer eu haelodau",
@@ -1502,6 +1530,7 @@
"deadendpagestext": "Nid oes cysylltiad yn arwain at dudalen arall oddi wrth yr un o'r tudalennau isod.",
"protectedpages": "Tudalennau wedi eu diogelu",
"protectedpages-indef": "A ddiogelwyd yn ddi-derfyn yn unig",
+ "protectedpages-summary": "Mae'r dudalen hon yn rhestru tudalennau sydd wedi'u gwarchod. Am restr o'r teitlau sydd wedi'u gwarchod ers eu creu, gweler see [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
"protectedpages-cascade": "A sgydol-ddiogelwyd yn unig",
"protectedpages-noredirect": "Cuddio ailgyfeiriadau",
"protectedpagesempty": "Does dim tudalennau wedi eu diogelu gyda'r paramedrau hyn.",
@@ -1536,9 +1565,11 @@
"pager-older-n": "{{PLURAL:$1|y $1 cynharach|yr $1 cynharach|y $1 cynharach|y $1 cynharach|y $1 cynharach|y $1 cynharach}}",
"suppress": "Goruchwylio",
"querypage-disabled": "Analluogwyd y dudalen arbennig hon er mwyn osgoi iddi andwyo perfformiad y wefan.",
+ "apihelp": "Cymorth API",
+ "apihelp-no-such-module": "Ni chafwyd hyd i fodiwl \"$1\".",
"booksources": "Ffynonellau llyfrau",
"booksources-search-legend": "Chwilier am lyfrau",
- "booksources-go": "Mynd",
+ "booksources-search": "Chwilio",
"booksources-text": "Mae'r rhestr isod yn cynnwys cysylltiadau i wefannau sy'n gwerthu llyfrau newydd a rhai ail-law. Mae rhai o'r gwefannau hefyd yn cynnig gwybodaeth pellach am y llyfrau hyn:",
"booksources-invalid-isbn": "Ymddengys nad yw'r rhif ISBN hwn yn ddilys; efallai y cafwyd gwall wrth drosglwyddo'r rhif.",
"specialloguserlabel": "Gwneuthurwr:",
@@ -1605,9 +1636,17 @@
"listgrouprights-removegroup-self": "Yn gallu tynnu {{PLURAL:$2|grŵp}} oddi ar eich cyfrif eich hunan: $1",
"listgrouprights-addgroup-self-all": "Yn gallu ychwanegu'r holl grwpiau at eich cyfrif eich hunan",
"listgrouprights-removegroup-self-all": "Yn gallu tynnu'r holl grwpiau oddi ar eich cyfrif eich hunan",
+ "listgrouprights-namespaceprotection-header": "Cyfyngiadau parth",
"listgrouprights-namespaceprotection-namespace": "Parth",
"listgrouprights-namespaceprotection-restrictedto": "Gallu(oedd) yn caniatau i'r defnyddiwr olygu",
+ "trackingcategories": "Categoriau tracio",
+ "trackingcategories-summary": "Mae'r dudalen hon yn rhestru categoriau tracio sy'n cael eu creu'n otomatig gan feddalwedd MediaWiki. Gellir newid eu henwau drwy addasu'r negeseuon ym mharthenw {{ns:8}}.",
+ "trackingcategories-msg": "Categori tracio",
"trackingcategories-name": "Enw'r neges",
+ "trackingcategories-desc": "Meincnodau derbyn categori",
+ "noindex-category-desc": "ni chaiff y dudalen ymweliad gan robot gan ei bod yn cynnwys y gair lledrith <code><nowiki>__NOINDEX__</nowiki></code> ynddi.",
+ "post-expand-template-inclusion-category-desc": "Mae maint y dudalen yn fwy na <code>$wgMaxArticleSize</code> wedi cynnyddu'r Nodion, felly ni chynyddwyd rhai Nodion.",
+ "broken-file-category-desc": "Mae'r dudalen yn cynnwys cyswllt sydd wedi'i dorri (dolen i ffeil nad yw'n bod).",
"trackingcategories-nodesc": "Dim disgrifiad ar gael.",
"trackingcategories-disabled": "Categorïau yr analluogwyd",
"mailnologin": "Does dim cyfeiriad i'w anfon iddo",
@@ -1644,12 +1683,14 @@
"mywatchlist": "Rhestr wylio",
"watchlistfor2": "Yn ôl gofyn $1 $2",
"nowatchlist": "Mae eich rhestr wylio'n wag.",
- "watchlistanontext": "Rhaid $1 er mwyn gweld neu ddiwygio'ch rhestr wylio.",
+ "watchlistanontext": "Rhaid mewngofnodi er mwyn gweld neu olygu'r rhestr wylio.",
"watchnologin": "Nid ydych wedi mewngofnodi",
"addwatch": "Ychwanegu at y rhestr wylio",
"addedwatchtext": "Mae'r dudalen \"[[:$1|$1]]\" wedi cael ei hychwanegu at eich [[Special:Watchlist|rhestr wylio]].\nPan fydd y dudalen hon, neu ei thudalen sgwrs, yn newid, fe fyddant yn ymddangos ar y rhestr honno.",
+ "addedwatchtext-short": "Mae'r dudalen \"$1\" wedi'i hychwanegu i'ch rhestr wylio.",
"removewatch": "Tynnu oddi ar eich rhestr wylio",
"removedwatchtext": "Mae'r dudalen \"[[:$1]]\" wedi'i thynnu oddi ar [[Special:Watchlist|eich rhestr wylio]].",
+ "removedwatchtext-short": "Mae'r dudalen \"$1\" wedi'i thynnu o'ch tudalen wylio.",
"watch": "Gwylio",
"watchthispage": "Gwylier y dudalen hon",
"unwatch": "Stopio gwylio",
@@ -1659,8 +1700,8 @@
"watchlist-details": "{{PLURAL:$1|Nid oes dim tudalennau|Mae $1 dudalen|Mae $1 dudalen|Mae $1 tudalen|Mae $1 thudalen|Mae $1 o dudalennau}} ar eich rhestr wylio, heb gynnwys tudalennau sgwrs ar wahan.",
"wlheader-enotif": "Galluogwyd hysbysiadau trwy e-bost.",
"wlheader-showupdated": "Mae tudalennau sydd wedi newid ers i chi eu gweld ddiwethaf wedi'u '''hamlygu'''.",
- "wlnote": "{{PLURAL:$1|Ni fu unrhyw newid|Isod mae'r '''$1''' newid diweddaraf|Isod mae'r '''$1''' newid diweddaraf|Isod mae'r '''$1''' newid diweddaraf|Isod mae'r '''$1''' newid diweddaraf|Isod mae'r '''$1''' newid diweddaraf}} yn ystod {{PLURAL:$2||yr awr|y ddwyawr|y teirawr|y \"$2\" awr|y(r) \"$2\" awr}} ddiwethaf, fel ag yr oedd am $4, $3.",
- "wlshowlast": "Dangoser newidiadau'r $1 awr ddiwethaf neu'r $2 {{PLURAL:$2|diwrnod|diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}} diwethaf neu'r $3 newidiadau.",
+ "wlnote": "Isod, {{PLURAL:$1|yw'r golygiad diweddaraf |yw'r golygiadau diweddaraf <strong>$1</strong> changes}} yn y {{PLURAL:$2|hour|<strong>$2</strong> awr}}, fel ag y mae ar $3, $4.",
+ "wlshowlast": "Dangoser newidiadau'r $1 awr ddiwethaf neu'r $2 {{PLURAL:$2|diwrnod|diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}} diwethaf neu'r newidiadau.",
"watchlist-options": "Dewisiadau ar gyfer y rhestr wylio",
"watching": "Wrthi'n ychwanegu...",
"unwatching": "Wrthi'n tynnu...",
@@ -1690,7 +1731,7 @@
"exbeforeblank": "y cynnwys cyn blancio oedd: '$1'",
"delete-confirm": "Dileu \"$1\"",
"delete-legend": "Dileu",
- "historywarning": "'''Rhybudd:''' bu tua $1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad|golygiad|o olygiadau}} yn hanes y dudalen rydych ar fin ei dileu:",
+ "historywarning": "<strong>Rhybudd:</strong> bu tua $1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad|golygiad|o olygiadau}} yn hanes y dudalen rydych ar fin ei dileu:",
"confirmdeletetext": "Rydych chi ar fin dileu tudalen neu ddelwedd, ynghŷd â'i hanes, o'r data-bas, a hynny'n barhaol.\nOs gwelwch yn dda, cadarnhewch eich bod chi wir yn bwriadu gwneud hyn, eich bod yn deall y canlyniadau, ac yn ei wneud yn ôl [[{{MediaWiki:Policy-url}}|polisïau {{SITENAME}}]].",
"actioncomplete": "Wedi cwblhau'r weithred",
"actionfailed": "Methodd y weithred",
@@ -1706,9 +1747,9 @@
"delete-edit-reasonlist": "Golygu rhestr y rhesymau dros ddileu",
"delete-toobig": "Cafwyd dros $1 {{PLURAL:$1|o olygiadau}} i'r dudalen hon.\nCyfyngwyd ar y gallu i ddileu tudalennau sydd wedi eu golygu cymaint â hyn, er mwyn osgoi amharu ar weithrediad databas {{SITENAME}} yn ddamweiniol.",
"delete-warning-toobig": "Cafwyd dros $1 {{PLURAL:$1|o olygiadau}} i'r dudalen hon.\nGallai dileu tudalen, gyda hanes golygu cymaint â hyn iddi, beri dryswch i weithrediadau'r databas ar {{SITENAME}}; ewch ati'n ofalus.",
+ "deleteprotected": "Ni allwch ddileu'r dudalen hon gan ei bod wedi'i chloi.",
"deleting-backlinks-warning": "'''Rhybudd:''' Mae [[Special:WhatLinksHere/{{FULLPAGENAME}}|tudalennau eraill]] yn cysylltu i'r dudalen yr ydych ar fin ei dileu, neu'n trawsgynnwys y dudalen hon.",
"rollback": "Gwrthdroi golygiadau",
- "rollback_short": "Gwrthdroi",
"rollbacklink": "gwrthdröer",
"rollbacklinkcount": "gwrthdröer $1 {{PLURAL:$1||golygiad|olygiad|golygiad}}",
"rollbacklinkcount-morethan": "gwrthdröer mwy na $1 {{PLURAL:$1||golygiad|olygiad|golygiad}}",
@@ -1758,6 +1799,7 @@
"protect-othertime": "Cyfnod arall:",
"protect-othertime-op": "cyfnod arall",
"protect-existing-expiry": "Ar hyn o bryd daw'r gwarchod i ben am: $3, $2",
+ "protect-existing-expiry-infinity": "Diwedd amser: tragwyddoldeb",
"protect-otherreason": "Rheswm arall:",
"protect-otherreason-op": "Rheswm arall",
"protect-dropdown": "*Rhesymau cyffredin dros ddiogelu\n** Fandaliaeth yn rhemp\n** Sbam yn rhemp\n** Ymrafael golygu gwrthgynhyrchiol\n** Tudalen aml ei defnydd",
@@ -1833,6 +1875,7 @@
"sp-contributions-newbies-sub": "Ar gyfer cyfrifon newydd",
"sp-contributions-newbies-title": "Cyfraniadau defnyddwyr ar gyfer cyfrifon newydd",
"sp-contributions-blocklog": "lòg blocio",
+ "sp-contributions-suppresslog": "atal cyfraniadau'r defnyddiwr",
"sp-contributions-deleted": "cyfraniadau defnyddiwr dileedig",
"sp-contributions-uploads": "uwchlwythiadau",
"sp-contributions-logs": "logiau",
@@ -1865,7 +1908,7 @@
"autoblockid": "Awtoflocio #$1",
"block": "Rhwystro defnyddiwr",
"unblock": "Dad-rwystro defnyddiwr",
- "blockip": "Rhwystro'r defnyddiwr",
+ "blockip": "Rhwystro'r {{GENDER:$1|defnyddiwr}}",
"blockip-legend": "Rhwystro'r defnyddiwr",
"blockiptext": "Defnyddiwch y ffurflen hon i rwystro cyfeiriad IP neu ddefnyddiwr rhag ysgrifennu i'r gronfa ddata. \nDylech chi ddim ond gwneud hyn er mwyn rhwystro fandaliaeth, a chan ddilyn [[{{MediaWiki:Policy-url}}|polisi'r wici]]. \nRhowch reswm dros rwystro'r defnyddiwr (er enghraifft, dywedwch pa dudalen(au) a fandaleiddiwyd).",
"ipaddressorusername": "Cyfeiriad IP neu enw defnyddiwr:",
@@ -1894,13 +1937,14 @@
"ipb-unblock-addr": "Dadflocio $1",
"ipb-unblock": "Dadflocio enw defnyddiwr neu gyfeiriad IP",
"ipb-blocklist": "Dangos y blociau cyfredol",
- "ipb-blocklist-contribs": "Cyfraniadau $1",
+ "ipb-blocklist-contribs": "Cyfraniadau {{GENDER:$1|$1}}",
"unblockip": "Dadflocio defnyddiwr",
"unblockiptext": "Defnyddiwch y ffurflen isod i ail-alluogi golygiadau gan ddefnyddiwr neu o gyfeiriad IP a fu gynt wedi'i flocio.",
"ipusubmit": "Tynnu'r rhwystr hwn",
"unblocked": "Mae [[User:$1|$1]] wedi cael ei ddad-flocio",
"unblocked-range": "Dadrwystrir $1",
"unblocked-id": "Tynnwyd rhwystr $1",
+ "unblocked-ip": "Mae [[Special:Contributions/$1|$1]] wedi ei atal.",
"blocklist": "Defnyddwyr a rwystrwyd",
"ipblocklist": "Defnyddwyr a rwystrwyd",
"ipblocklist-legend": "Dod o hyd i ddefnyddiwr a rwystrwyd",
@@ -1989,11 +2033,14 @@
"movepagetalktext": "Bydd y dudalen sgwrs yn symud gyda'r dudalen hon '''onibai:'''\n*bod tudalen sgwrs wrth yr enw newydd yn bodoli'n barod\n*bod y blwch isod heb ei farcio.\n\nOs felly, gallwch symud y dudalen sgwrs neu ei gyfuno ar ôl symud y dudalen ei hun.",
"movearticle": "Symud y dudalen:",
"moveuserpage-warning": "'''Sylwer:''' Yr ydych ar fin symud tudalen defnyddiwr. Sylwch mai'r dudalen yn unig a gaiff ei symud ac ''na fydd'' y defnyddiwr yn cael ei ail-enwi.",
+ "movecategorypage-warning": "<strong>Rhybudd:</strong> Rydych ar fin dileu categori. Sylwch mai dim ond y dudalen a gaiff ei symud, a bydd y tudalennau o fewn yr hen gategori yn aros fel ag yr oeddent.",
"movenologintext": "Mae'n rhaid bod yn ddefnyddiwr cofrestredig a'ch bod wedi [[Special:UserLogin|mewngofnodi]] cyn medru symud tudalen.",
"movenotallowed": "Nid oes caniatâd gennych i symud tudalennau.",
"movenotallowedfile": "Nid yw'r gallu ganddoch i symud ffeiliau.",
"cant-move-user-page": "Nid yw'r gallu ganddoch i symud tudalennau defnyddwyr (heblaw am isdudalennau).",
"cant-move-to-user-page": "Nid yw'r gallu ganddoch i symud tudalen i dudalen defnyddiwr (heblaw am i isdudalen defnyddiwr).",
+ "cant-move-category-page": "Nid oes gennych yr hawl i symud categoriau.",
+ "cant-move-to-category-page": "Nid oes gennych yr hawl i droi tudalen yn gategori.",
"newtitle": "I'r teitl newydd:",
"move-watch": "Gwylier y dudalen hon",
"movepagebtn": "Symud y dudalen",
@@ -2076,6 +2123,7 @@
"thumbnail-temp-create": "Wedi methu gwneud ffeil mân-lun dros dro",
"thumbnail-dest-create": "Wedi methu rhoi'r mân-lun ar gadw yn y man y gofynwyd iddo fod",
"thumbnail_invalid_params": "Paramedrau maint mân-lun annilys",
+ "thumbnail_toobigimagearea": "Ffeil a'i mhaint yn fwy na $1",
"thumbnail_dest_directory": "Methwyd â chreu'r cyfeiriadur cyrchfan",
"thumbnail_image-type": "Nid yw'r math hwn o ddelwedd yn cael ei gynnal",
"thumbnail_gd-library": "Mae ffurfwedd y llyfrgell GD yn anghyflawn: y ffwythiant $1 yn eisiau",
@@ -2084,7 +2132,8 @@
"import": "Mewnforio tudalennau",
"importinterwiki": "Mewnforiad traws-wici",
"import-interwiki-text": "Dewiswch wici a thudalen i'w mewnforio.\nFe gedwir dyddiadau ac enwau'r golygwyr ar gyfer y diwygiadau i'r dudalen.\nMae cofnod o bob weithred o fewnforio i'w gweld ar y [[Special:Log/import|lòg mewnforio]].",
- "import-interwiki-source": "Wici/tudalen y gwreiddiol:",
+ "import-interwiki-sourcewiki": "Ffynhonnell y wici:",
+ "import-interwiki-sourcepage": "Ffynhonnell (tud.)",
"import-interwiki-history": "Copïer yr holl fersiynau yn hanes y dudalen hon",
"import-interwiki-templates": "Cynhwyser pob nodyn",
"import-interwiki-submit": "Mewnforio",
@@ -2115,28 +2164,26 @@
"import-token-mismatch": "Collwyd data'r sesiwn. Ceisiwch eto.",
"import-invalid-interwiki": "Ni ellir uwchlwytho o'r wici dewisedig.",
"import-error-edit": "Ni fewnforiwyd y dudalen \"$1\" oherwydd nad yw'r gallu i'w golygu gennych.",
- "import-error-create": "Ni fewnforiwyd y dudalen \"$1\" oherwydd nad yw'r gallu i'w chreu gennych.",
+ "import-error-create": "Ni fewnforiwyd y dudalen \"$1\" oherwydd nad yw'r hawl i'w chreu gennych.",
"import-error-interwiki": "Ni fewnforwyd y dudalen \"$1\" oherwydd bod yr enw arni wedi ei neilltuo at ddiben cysylltu'n allanol (rhyngwici).",
"import-error-special": "Ni fewnforiwyd y dudalen \"$1\" oherwydd ei bod yn perthyn i barth arbennig lle nad oes tudalennau i'w cael.",
"import-error-invalid": "Ni fewnforwyd y dudalen \"$1\" oherwydd bod yr enw arni yn annilys.",
"import-error-unserialize": "Ni allwyd ddad-gyfresu'r diwygiad $2 o'r dudalen '$1'. Adroddwyd bod y diwygiad yn defnyddio'r model cynnwys $3, wedi ei gyfresu fel $4.",
+ "import-error-bad-location": "Ni ellir storio golygiad $2 ar y wici hwn, gan nad yw'r model hwnnw ($3) yn cael ei gynnal ar y dudalen.",
"import-options-wrong": "{{PLURAL:$2|Dewis|Dewis|Dewisiadau}} annilys: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "Mae teitl y dudalen wraidd a roddir yn annilys.",
"import-rootpage-nosubpage": "Nid yw'r parth \"$1\", sef parth y brif dudalen y mewnforir iddi, yn caniatau is-dudalennau.",
"importlogpage": "Lòg mewnforio",
"importlogpagetext": "Cofnodion mewnforio tudalennau ynghyd â'u hanes golygu oddi ar wicïau eraill, gan weinyddwyr.",
- "import-logentry-upload": "wedi mewnforio [[$1]] trwy uwchlwytho ffeil",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}}",
- "import-logentry-interwiki": "wedi symud $1 (traws-wici)",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}} o $2",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}} wedi'i fewnforio",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}} wedi'i fewnforio o $2",
"javascripttest": "Profi JavaScript",
- "javascripttest-title": "Yn cynnal profion $1",
"javascripttest-pagetext-noframework": "Neilltuwyd y dudalen hon at gynnal profion JavaScript.",
"javascripttest-pagetext-unknownframework": "Ni nabyddwyd y fframwaith profi \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Gweithred dienw \"$1\"",
"javascripttest-pagetext-frameworks": "Dewiswch un o'r fframweithiau profi canlynol: $1",
"javascripttest-pagetext-skins": "Dewiswch wedd i gynnal profion arni:",
"javascripttest-qunit-intro": "Gweler y [$1 wybodaeth am y profion] ar mediawiki.org.",
- "javascripttest-qunit-heading": "Cyfres brofi MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "Eich tudalen defnyddiwr",
"tooltip-pt-anonuserpage": "Y tudalen defnyddiwr ar gyfer y cyfeiriad IP yr ydych yn ei ddefnyddio wrth olygu",
"tooltip-pt-mytalk": "Eich tudalen sgwrs",
@@ -2146,6 +2193,7 @@
"tooltip-pt-mycontris": "Rhestr eich cyfraniadau yn nhrefn amser",
"tooltip-pt-login": "Fe'ch anogir i fewngofnodi, er nad oes rhaid gwneud.",
"tooltip-pt-logout": "Allgofnodi",
+ "tooltip-pt-createaccount": "Rydym yn argymell eich bod yn creu cyfri ac yn menwgofnodi. Fodd bynnag, dydy hyn ddim yn orfodol",
"tooltip-ca-talk": "Sgwrsio am y dudalen",
"tooltip-ca-edit": "Gallwch olygu'r dudalen hon. Da o beth fyddai defnyddio'r botwm 'Dangos rhagolwg' cyn rhoi ar gadw.",
"tooltip-ca-addsection": "Ychwanegu adran newydd",
@@ -2175,6 +2223,7 @@
"tooltip-feed-atom": "Porthiant atom ar gyfer y dudalen hon",
"tooltip-t-contributions": "Gwelwch restr o gyfraniadau'r defnyddiwr hwn",
"tooltip-t-emailuser": "Anfonwch e-bost at y defnyddiwr hwn",
+ "tooltip-t-info": "Mwy o wybodaeth am y dudalen hon",
"tooltip-t-upload": "Uwchlwythwch ffeil delwedd, sain, fideo, ayb",
"tooltip-t-specialpages": "Rhestr o'r holl dudalennau arbennig",
"tooltip-t-print": "Cynhyrchwch fersiwn o'r dudalen yn barod at ei hargraffu",
@@ -2237,7 +2286,6 @@
"pageinfo-robot-policy": "Rhestrwyd gan robot",
"pageinfo-robot-index": "Caniateir",
"pageinfo-robot-noindex": "Gwrthodedig",
- "pageinfo-views": "Nifer yr ymweliadau",
"pageinfo-watchers": "Nifer gwylwyr y dudalen",
"pageinfo-few-watchers": "Llai na $1 {{PLURAL:$1|gwyliwr|gwyliwr|wyliwr|gwyliwr|o wylwyr}}",
"pageinfo-redirects-name": "Nifer yr ailgyfeiriadau i'r dudalen hon",
@@ -2317,6 +2365,7 @@
"newimages-summary": "Mae'r dudalen arbennig hon yn dangos y ffeiliau a uwchlwythwyd yn ddiweddar.",
"newimages-legend": "Hidlo",
"newimages-label": "Enw'r ffeil (neu ran ohono):",
+ "newimages-showbots": "Dangoswch uwchlwythiadau'r botiaid",
"noimages": "Does dim byd i'w weld.",
"ilsubmit": "Chwilio",
"bydate": "yn ôl dyddiad",
@@ -2688,7 +2737,6 @@
"exif-urgency-low": "Isel ($1)",
"exif-urgency-high": "Uchel ($1)",
"exif-urgency-other": "Blaenoriaeth yn ôl y defnyddiwr ($1)",
- "watchlistall2": "holl",
"namespacesall": "pob un",
"monthsall": "pob mis",
"confirmemail": "Cadarnhau'r cyfeiriad e-bost",
@@ -2746,6 +2794,7 @@
"autosumm-replace": "Gwacawyd y dudalen a gosod y canlynol yn ei le: '$1'",
"autoredircomment": "Yn ailgyfeirio at [[$1]]",
"autosumm-new": "Crëwyd tudalen newydd yn dechrau gyda '$1'",
+ "autosumm-newblank": "Rydych wedi creu tudalen wag",
"lag-warn-normal": "Hwyrach na ddangosir isod y newidiadau a ddigwyddodd o fewn y $1 {{PLURAL:$1|eiliad|eiliad|eiliad|eiliad|eiliad|eiliad}} ddiwethaf.",
"lag-warn-high": "Mae gweinydd y data-bas ar ei hôl hi: efallai nad ymddengys newidiadau o fewn y $1 {{PLURAL:$1|eiliad|eiliad|eiliad|eiliad|eiliad|eiliad}} ddiwethaf ar y rhestr.",
"watchlistedit-normal-title": "Golygu'r rhestr wylio",
@@ -2761,15 +2810,25 @@
"watchlistedit-raw-done": "Diweddarwyd eich rhestr wylio.",
"watchlistedit-raw-added": "Ychwanegwyd {{PLURAL:$1|1 teitl|$1 teitl|$1 deitl|$1 theitl|$1 theitl|$1 o deitlau}}:",
"watchlistedit-raw-removed": "Tynnwyd {{PLURAL:$1|1 teitl|$1 teitl|$1 deitl|$1 theitl|$1 theitl|$1 o deitlau}}:",
+ "watchlistedit-clear-title": "Cliriwyd y rhestr wylio",
+ "watchlistedit-clear-legend": "Clirier y rhestr wylio",
+ "watchlistedit-clear-explain": "Bydd holl deitlau eich rhestr wylio'n cael eu tynnu oddi yno",
+ "watchlistedit-clear-titles": "Teitlau:",
+ "watchlistedit-clear-submit": "Clrio'r rhestr wylio (Mae hyn yn barhaol!)",
+ "watchlistedit-clear-done": "Cliriwyd eich rhestr wylio.",
+ "watchlistedit-clear-removed": "Cliriwyd {{PLURAL:$1|1 title was|$1 teitl}}:",
+ "watchlistedit-too-many": "Mae na ormod o dudalennau i'w harddangos yma.",
+ "watchlisttools-clear": "Clirier y rhestr wylio",
"watchlisttools-view": "Gweld newidiadau perthnasol",
"watchlisttools-edit": "Gweld a golygu'r rhestr wylio",
"watchlisttools-raw": "Golygu'r rhestr wylio syml",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|sgwrs]])",
- "unknown_extension_tag": "Tag estyniad anhysbys \"$1\"",
"duplicate-defaultsort": "Rhybudd: Mae'r allwedd trefnu diofyn \"$2\" yn gwrthwneud yr allwedd trefnu diofyn blaenorol \"$1\".",
+ "duplicate-displaytitle": "<strong>Gofal:</strong> Mae arddangos \"$2\" yn clirio'r arddangosiadau cynharach \"$1\".",
+ "invalid-indicator-name": "<strong>Gan bwyll:</strong> Ni ddylid gadael y man nodi statws <code>name</code> yn wag.",
"version": "Fersiwn",
"version-extensions": "Estyniadau gosodedig",
- "version-skins": "Gweddau",
+ "version-skins": "Gweddau a osodwyd",
"version-specialpages": "Tudalennau arbennig",
"version-parserhooks": "Bachau dosrannydd",
"version-variables": "Newidynnau",
@@ -2781,10 +2840,12 @@
"version-parser-function-hooks": "Bachau ffwythiant dosrannu",
"version-hook-name": "Enw'r bachyn",
"version-hook-subscribedby": "Tanysgrifwyd gan",
- "version-version": "(Fersiwn $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[dim enw]",
"version-license": "Trwydded MediaWiki",
"version-ext-license": "Trwydded",
"version-ext-colheader-name": "Estyniad",
+ "version-skin-colheader-name": "Croen",
"version-ext-colheader-version": "Fersiwn",
"version-ext-colheader-license": "Trwydded",
"version-ext-colheader-description": "Disgrifiad",
@@ -2804,6 +2865,9 @@
"version-entrypoints": "URLs y mannau cyflwyno",
"version-entrypoints-header-entrypoint": "Man cyflwyno",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "llyfrgelloedd a osodwyd ar eich cyfer",
+ "version-libraries-library": "Llyfrgell",
+ "version-libraries-version": "Fersiwn",
"redirect": "Ailgyfeirio yn ôl enw ffeil, defnyddiwr, tudalen neu ID y diwygiad",
"redirect-legend": "Ailgyfeirio i ffeil neu dudalen",
"redirect-summary": "Mae'r dudalen arbennig hon yn ailgyfeirio at ffeil (o roi enw'r ffeil), at dudalen (o roi ID rhyw ddiwygiad o'r dudalen neu ID y dudalen), neu at dudalen defnyddiwr (o roi rhif ID y defnyddiwr).\nDefnydd: \n[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], neu [[{{#Special:Redirect}}/user/101]].",
@@ -2839,6 +2903,7 @@
"specialpages-group-wiki": "Data ac offer",
"specialpages-group-redirects": "Tudalennau arbennig ailgyfeirio",
"specialpages-group-spam": "Offer sbam",
+ "specialpages-group-developer": "Arfau ar gyfer y Datblygwr",
"blankpage": "Tudalen wag",
"intentionallyblankpage": "Gadawyd y dudalen hon yn wag o fwriad",
"external_image_whitelist": " #Leave this line exactly as it is<pre>\n#Gosodwch ddarnau o ymadroddion rheolaidd (y rhan sy'n cael ei osod rhwng y //) isod\n#Caiff y rhain eu cysefeillio gyda URL y delweddau allanol (a chyswllt poeth atynt)\n#Dangosir y rhai sy'n cysefeillio fel delweddau; dangosir cyswllt at y ddelwedd yn unig ar gyfer y lleill\n#Caiff y llinellau sy'n dechrau gyda # eu trin fel sylwadau\n#Nid yw'n gwahaniaethu rhwng llythrennau mawr a bach\n\n#Put all regex fragments above this line. Leave this line exactly as it is</pre>",
@@ -2868,8 +2933,8 @@
"compare-revision-not-exists": "Nid yw'r diwygiad a enwyd ar gael.",
"dberr-problems": "Mae'n ddrwg gennym! Mae'r wefan hon yn dioddef anawsterau technegol.",
"dberr-again": "Oedwch am ychydig funudau cyn ceisio ail-lwytho.",
- "dberr-info": "(Ni ellir cysylltu â gweinydd y bas data: $1)",
- "dberr-info-hidden": "(Ni ellir cysylltu â gweinydd y gronfa ddata)",
+ "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.",
@@ -2888,6 +2953,7 @@
"htmlform-chosen-placeholder": "Dewiswch opsiwn",
"htmlform-cloner-create": "Ychwaneger rhes",
"htmlform-cloner-delete": "Tynner i ffwrdd",
+ "htmlform-cloner-required": "Mae angen o leiaf un peth!",
"sqlite-has-fts": "$1 gyda chymorth chwilio yr holl destun",
"sqlite-no-fts": "$1 heb gymorth chwiliad yr holl destun",
"logentry-delete-delete": "Dileodd $1 y dudalen $3",
@@ -2909,6 +2975,7 @@
"revdelete-uname-unhid": "datguddiwyd yr enw defnyddiwr",
"revdelete-restricted": "cyfyngwyd ar allu gweinyddwyr i weld",
"revdelete-unrestricted": "tynnwyd y cyfyngiadau ar allu gweinyddwyr i weld",
+ "logentry-merge-merge": "Mae $1 {{GENDER:$2|wedi cyfuno}} $3 i fewn i $4 (golygiadau hyd at $5)",
"logentry-move-move": "Symudodd $1 y dudalen $3 i $4",
"logentry-move-move-noredirect": "Symudodd $1 y dudalen $3 i $4 heb adael dolen ailgyfeirio",
"logentry-move-move_redir": "{{GENDER:$2|Symudwyd}} y dudalen $3 i $4 gan $1 dros y ddolen ailgyfeirio",
@@ -2923,20 +2990,24 @@
"logentry-rights-rights": "{{GENDER:$2|Newidiodd}} $1 y grwpiau y mae $3 yn aelod ohonynt o $4 i $5",
"logentry-rights-rights-legacy": "{{GENDER:$2|Newidiodd}} $1 y grwpiau y mae $3 yn aelod ohonynt",
"logentry-rights-autopromote": "{{GENDER:$2|Dyrchafwyd}} $1 yn awtomatig o $4 i $5",
+ "logentry-upload-upload": "Mae $1 {{GENDER:$2|wedi uwchlwytho}} $3",
+ "logentry-upload-overwrite": "Mae $1 {{GENDER:$2|wedi uwchlwytho}} fersiwn newydd o $3",
+ "logentry-upload-revert": "Mae $1 {{GENDER:$2|wedi uwchlwytho}} $3",
"rightsnone": "(dim)",
+ "revdelete-summary": "crynodeb golygu",
+ "feedback-adding": "Wrthi'n ychwanegu adborth i'r dudalen...",
+ "feedback-bugcheck": "Iawn! Gwnewch yn siwr yn gyntaf nag ydy hwn yn un o'r [$1 bygiau hysbys].",
+ "feedback-bugnew": "Edrychais ar y bygiau hysbys. Mae byg newydd gennyf i'w adrodd",
"feedback-bugornote": "Os ydych yn barod i ddisgrifio problem technegol yn fanwl gallwch [$1 gyflwyno adroddiad am y bỳg]. Fel arall, gallwch ddefnyddio'r ffurflen syml isod. Fe roddir eich sylwadau ar y dudalen \"[$3 $2]\", ynghyd â'ch enw defnyddiwr ac enw'r gweinydd sydd ar waith gennych.",
- "feedback-subject": "Gwrthrych:",
- "feedback-message": "Neges:",
"feedback-cancel": "Diddymer",
- "feedback-submit": "Cyflwyner yr Adborth",
- "feedback-adding": "Wrthi'n ychwanegu adborth i'r dudalen...",
+ "feedback-close": "Yn barod",
"feedback-error1": "Gwall: Canlyniad anhysbys o'r API",
"feedback-error2": "Gwall: Methodd y golygu",
"feedback-error3": "Gwall: Dim ymateb gan yr API",
+ "feedback-message": "Neges:",
+ "feedback-subject": "Gwrthrych:",
+ "feedback-submit": "Cyflwyner",
"feedback-thanks": "Diolch! Gosodwyd eich adborth ar y dudalen \"[$2 $1]\".",
- "feedback-close": "Yn barod",
- "feedback-bugcheck": "Iawn! Gwnewch yn siwr yn gyntaf nag ydy hwn yn un o'r [$1 bygiau hysbys].",
- "feedback-bugnew": "Edrychais ar y bygiau hysbys. Mae byg newydd gennyf i'w adrodd",
"searchsuggest-search": "Chwilio",
"searchsuggest-containing": "yn cynnwys...",
"api-error-badaccess-groups": "Nid oes caniatad gennych i uwchlwytho ffeiliau ar y wici hwn.",
@@ -2972,6 +3043,13 @@
"api-error-stashfailed": "Gwall mewnol: methodd y gweinydd â rhoi'r ffeil dros dro ar gadw.",
"api-error-publishfailed": "Gwall mewnol: methodd y gweinydd â chyhoeddi'r ffeil dros dro.",
"api-error-stasherror": "Cafwyd gwall wrth uwchlwytho'r ffeil i'w gelcio.",
+ "api-error-stashedfilenotfound": "Methwyd a dod o hyd i'r ffeil a gadwyd pan ymdrechwyd i'w uwchlwytho.",
+ "api-error-stashpathinvalid": "Roedd y llwybr i'r ffeil a gadwyd yn wallus.",
+ "api-error-stashfilestorage": "Cafwyd gwall wrth geisio cadw'r ffeil.",
+ "api-error-stashzerolength": "Methodd ein gweinydda chadw'r ffeil, oherwydd nad oedd yn bodoli.",
+ "api-error-stashnotloggedin": "Mae;n hanfodol eich bod wedi mewngofnodi cyn y medrwch gadw ffeiliau.",
+ "api-error-stashwrongowner": "Nid eich heiddo chi mo'r ffeil y ceisiwch ei drin.",
+ "api-error-stashnosuchfilekey": "Dydy'r ffeil rydych yn ceisio'i gael yn y cuddfan celc ddim yn bodoli.",
"api-error-timeout": "Ni chafwyd ymateb gan y gweinydd mewn da bryd.",
"api-error-unclassified": "Cafwyd gwall anhysbys",
"api-error-unknown-code": "Gwall anhysbys: \"$1\"",
@@ -3014,5 +3092,62 @@
"expand_templates_remove_nowiki": "Cuddio'r tagiau <nowiki> wrth ehangu",
"expand_templates_generate_xml": "Dangos y goeden dosrannu XML",
"expand_templates_generate_rawhtml": "Dangos HTML crai",
- "expand_templates_preview": "Rhagolwg"
+ "expand_templates_preview": "Rhagolwg",
+ "pagelanguage": "Dewis iaith y dudalen",
+ "pagelang-name": "Tudalen",
+ "pagelang-language": "Iaith",
+ "pagelang-use-default": "Defnyddier yr iaith arferol",
+ "pagelang-select-lang": "Dewis iaith",
+ "right-pagelang": "Newidiwch iaith y dudalen",
+ "action-pagelang": "newidiwch iaith y dudalen",
+ "log-name-pagelang": "Newidiwch iaith y log",
+ "log-description-pagelang": "Dyma log o newidiadau yn nhudalen yr ieithoedd",
+ "logentry-pagelang-pagelang": "Newidiodd $1 {{GENDER:$2}} iaith ydudalen am $3 o $4 i $5.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (galluogi)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''diffoddwyd''')",
+ "mediastatistics": "Ystadegau cyfryngau",
+ "mediastatistics-summary": "Ystadegau am fathau o ffeiliau a uwchlwythwyd. Mae hyn yn cynnwys y fersiynau diweddaraf o'r ffeil yn unig.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 beit|$1 beit}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Math o MIME",
+ "mediastatistics-table-extensions": "Estyniadau posibl",
+ "mediastatistics-table-count": "Nifer o ffeiliau",
+ "mediastatistics-table-totalbytes": "Cyfanswm eu maint",
+ "mediastatistics-header-unknown": "Anhysbys",
+ "mediastatistics-header-bitmap": "Delweddau Bitmap",
+ "mediastatistics-header-drawing": "Lluniau fector",
+ "mediastatistics-header-audio": "Sain",
+ "mediastatistics-header-video": "Fideos",
+ "mediastatistics-header-multimedia": "Cyfryngau cyfoethog",
+ "mediastatistics-header-office": "Office",
+ "mediastatistics-header-text": "Testun",
+ "mediastatistics-header-executable": "Gweithredadwy",
+ "mediastatistics-header-archive": "Fformat wedi'i gywasgu",
+ "json-warn-trailing-comma": "Tynnwyd $1 {{PLURAL:$1|coma}} o JSON",
+ "json-error-unknown": "Roedd gwall gyda JSON. Gwall: $1",
+ "json-error-depth": "Aethpwyd dros y dyfnder mwyaf a ganiateir",
+ "json-error-state-mismatch": "JSON gwallus neu annilys",
+ "json-error-syntax": "Gwall mewn cystrawen",
+ "json-error-utf8": "Llythrennau UTF-8 gwallus, o boib gan godio anghywir",
+ "special-characters-group-latin": "Lladin",
+ "special-characters-group-latinextended": "Lladin estynedig",
+ "special-characters-group-ipa": "Yr wyddor phonetig rhyngwladol (IPA)",
+ "special-characters-group-symbols": "Symbolau",
+ "special-characters-group-greek": "Groeg",
+ "special-characters-group-cyrillic": "Cyrilig",
+ "special-characters-group-arabic": "Arabeg",
+ "special-characters-group-arabicextended": "Arabeg estynedig",
+ "special-characters-group-persian": "Perseg",
+ "special-characters-group-hebrew": "Hebraeg",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-tamil": "Tamileg",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gwjarati",
+ "special-characters-group-devanagari": "Defanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Laoseg",
+ "special-characters-group-khmer": "Chmereg",
+ "special-characters-title-endash": "heiffen en",
+ "special-characters-title-emdash": "heiffen em",
+ "special-characters-title-minus": "arwydd minws"
}
diff --git a/languages/i18n/da.json b/languages/i18n/da.json
index 7b34475c..6f3ab077 100644
--- a/languages/i18n/da.json
+++ b/languages/i18n/da.json
@@ -47,7 +47,9 @@
"Tjernobyl",
"Urhixidur",
"아라",
- "Thomsen"
+ "Thomsen",
+ "Knud Winckelmann",
+ "Macofe"
]
},
"tog-underline": "Understreg henvisninger:",
@@ -64,6 +66,7 @@
"tog-watchdefault": "Tilføj sider og filer, jeg redigerer, til min overvågningsliste",
"tog-watchmoves": "Tilføj sider og filer, jeg flytter, til min overvågningsliste",
"tog-watchdeletion": "Tilføj sider og filer, jeg sletter, til min overvågningsliste",
+ "tog-watchrollback": "Tilføj sider, hvor jeg har udført en tilbagerulning til min overvågningsliste",
"tog-minordefault": "Markér som standard alle redigeringer som mindre",
"tog-previewontop": "Vis forhåndsvisning over redigeringsboksen",
"tog-previewonfirst": "Vis forhåndsvisning ved første redigering",
@@ -74,7 +77,7 @@
"tog-shownumberswatching": "Vis antal brugere, der overvåger",
"tog-oldsig": "Nuværende signatur:",
"tog-fancysig": "Behandl signatur som wikitekst uden automatisk henvisning",
- "tog-uselivepreview": "Brug automatisk forhåndsvisning (er på forsøgsstadiet)",
+ "tog-uselivepreview": "Benyt løbende forhåndsvisning",
"tog-forceeditsummary": "Advar mig hvis jeg ikke udfylder beskrivelsesfeltet",
"tog-watchlisthideown": "Skjul egne ændringer i overvågningslisten",
"tog-watchlisthidebots": "Skjul ændringer fra bots i overvågningslisten",
@@ -249,6 +252,7 @@
"otherlanguages": "Andre sprog",
"redirectedfrom": "(Omdirigeret fra $1)",
"redirectpagesub": "Omdirigeringsside",
+ "redirectto": "Omdiriger til:",
"lastmodifiedat": "Denne side blev senest ændret $1 kl. $2.",
"viewcount": "Siden er vist {{PLURAL:$1|en gang|$1 gange}}.",
"protectedpage": "Beskyttet side",
@@ -268,6 +272,7 @@
"disclaimers": "Forbehold",
"disclaimerpage": "Project:Generelle forbehold",
"edithelp": "Hjælp til redigering",
+ "helppage-top-gethelp": "Hjælp",
"mainpage": "Forside",
"mainpage-description": "Forside",
"policy-url": "Project:Politik",
@@ -313,7 +318,7 @@
"page-rss-feed": "\"$1\" RSS-feed",
"page-atom-feed": "\"$1\" Atom-feed",
"red-link-title": "$1 (siden er ikke skrevet endnu)",
- "sort-descending": "Sorter aftagende",
+ "sort-descending": "Sorter faldende",
"sort-ascending": "Sorter stigende",
"nstab-main": "Side",
"nstab-user": "Brugerside",
@@ -428,6 +433,8 @@
"userlogin-resetlink": "Har du glemt dine login oplysninger?",
"userlogin-resetpassword-link": "Glemt din adgangskode?",
"userlogin-helplink2": "Hjælp med at logge på",
+ "userlogin-loggedin": "Du er allerede logget på som {{GENDER:$1|$1}}.\nBrug formularen nedenfor til at logge på som en anden bruger.",
+ "userlogin-createanother": "Opret en anden konto",
"createacct-emailrequired": "E-mailadresse",
"createacct-emailoptional": "E-mailadresse (valgfri)",
"createacct-email-ph": "Indtast din e-mailadresse",
@@ -514,11 +521,11 @@
"resetpass-submit-loggedin": "Skift adgangskode",
"resetpass-submit-cancel": "Annuller",
"resetpass-wrong-oldpass": "Ugyldig midlertidig eller gældende adgangskode.\nDu har muligvis allerede skiftet din adgangskode eller anmodet om en ny midlertidig kode.",
- "resetpass-recycled": "Vær venlig at ændre dit kodeord til et andet end dit nuværende kodeord.",
- "resetpass-temp-emailed": "Du loggede på med en midlertidig kode tilsendt på e-mail.\nFor at afslutte indlogning, skal du oprette et nyt kodeord:",
+ "resetpass-recycled": "Vær venlig at ændre din adgangskode til noget andet end din nuværende adgangskode.",
+ "resetpass-temp-emailed": "Du loggede på med en midlertidig kode tilsendt på e-mail.\nFor at afslutte indlogning, skal du oprette en nyt adgangskode:",
"resetpass-temp-password": "Midlertidig adgangskode",
"resetpass-abort-generic": "Ændring af adgangskode er blevet afbrudt af en udvidelse",
- "resetpass-expired": "Dit kodeord er udløbet. Vær venlig at ændre det til et nyt.",
+ "resetpass-expired": "Din adgangskode er udløbet. Angiv en ny adgangskode for at logge på.",
"resetpass-expired-soft": "Din adgangskode er udløbet og skal ændres. Vær venlig at ændre den nu, eller tryk \"{{int:resetpass-submit-cancel}}\" for at ændre den senere.",
"resetpass-validity-soft": "Din adgangskode er ikke gyldig: $1 \n\nVær venlig at ændre den nu, eller tryk \"{{int:resetpass-submit-cancel}}\" for at ændre den senere.",
"passwordreset": "Nulstil adgangskode",
@@ -540,7 +547,6 @@
"passwordreset-emailsent-capture": "En e-mail om nulstilling af adgangskode, som vist nedenfor, er blevet sendt.",
"passwordreset-emailerror-capture": "En mail om nulstilling af adgangskode, som vist nedenfor, blev genereret, men det lykkedes ikke at sende den til {{GENDER:$2|bruger}}: $1",
"changeemail": "Ændre e-mailadresse",
- "changeemail-header": "Ændre kontoens e-mailadresse",
"changeemail-text": "Udfyld denne formular for at ændre din e-mailadresse. Du skal indtaste din adgangskode for at bekræfte denne ændring.",
"changeemail-no-info": "Du skal være logget på for at komme direkte til denne side.",
"changeemail-oldemail": "Nuværende e-mailadresse:",
@@ -548,7 +554,6 @@
"changeemail-none": "(ingen)",
"changeemail-password": "Din adgangskode til {{SITENAME}}:",
"changeemail-submit": "Ændre e-mail",
- "changeemail-cancel": "Afbryd",
"changeemail-throttled": "Du har forsøgt at logge på for mange gange.\nVent venligst $1, før du prøver igen.",
"resettokens": "Nulstil nøgler",
"resettokens-text": "Du kan nulstille nøgler, som giver adgang til visse private data i forbindelse med din konto her.\n\nDu bør gøre det, hvis du ved et uheld deler dem med nogen, eller hvis din konto er blevet kompromitteret.",
@@ -687,6 +692,8 @@
"content-model-text": "almindelig tekst",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Tomt objekt",
+ "content-json-empty-array": "Tomt array",
"expensive-parserfunction-warning": "Advarsel: Der er for mange beregningstunge oversætter-funktionskald på denne side.\n\nDer bør være færre end {{PLURAL:$2|$2 kald}}, lige nu er der {{PLURAL:$1|$1 kald}}.",
"expensive-parserfunction-category": "Sider med for mange beregningstunge oversætter-funktioner",
"post-expand-template-inclusion-warning": "Advarsel: Der er tilføjet for mange skabeloner til denne side, så nogle af dem bliver ikke vist..",
@@ -740,7 +747,7 @@
"history-feed-empty": "Den ønskede side findes ikke. Måske er den slettet eller flyttet. [[Special:Search|Gennemsøg]] {{SITENAME}} efter passende nye sider.",
"rev-deleted-comment": "(redigeringsbeskrivelsen er fjernet)",
"rev-deleted-user": "(brugernavn fjernet)",
- "rev-deleted-event": "(loghandling fjernet)",
+ "rev-deleted-event": "(logdetaljer fjernet)",
"rev-deleted-user-contribs": "[brugernavn eller IP-adresse er fjernet - redigeringer er skjult fra bidragene]",
"rev-deleted-text-permission": "Denne version af siden er blevet '''slettet'''.\nDer er måske flere detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
"rev-deleted-text-unhide": "Denne version af siden er '''slettet'''.\nDer er måske flere detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletningsloggen].\nDu kan du stadig [$1 se versionen], hvis du ønsker at fortsætte.",
@@ -762,6 +769,8 @@
"revdelete-show-file-confirm": "Er du sikker på, at du vil vise en slettet version af filen \"<nowiki>$1</nowiki>\" fra den $2, klokken $3?",
"revdelete-show-file-submit": "Ja",
"logdelete-selected": "{{PLURAL:$1|Valgt logindførsel|Valgte logindførsler}}:",
+ "revdelete-text-text": "Slettede versioner vil stadig fremgå af sidehistorikken, men dele af indholdet vil ikke være offentlig tilgængeligt.",
+ "revdelete-text-others": "Andre administratorer vil fortsat have adgang til det skjulte indhold og have mulighed for at genskabe det, med mindre andre begrænsninger er sat.",
"revdelete-confirm": "Vær venlig at bekræfte at du vil gøre dette, at du forstår konsekvenserne, og at du gør det i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].",
"revdelete-suppress-text": "Der bør '''kun''' skjules i de følgende tilfælde:\n* Potentielt injurierende oplysninger\n* Upassende personlige oplysninger\n*: ''hjemmeadresser og -telefonnumre, CPR-numre og lign.''",
"revdelete-legend": "Fastlægge begrænsninger for versionerne:",
@@ -769,7 +778,7 @@
"revdelete-hide-image": "Skjul filindhold",
"revdelete-hide-name": "Skjul handling og mål",
"revdelete-hide-comment": "Redigeringssammendrag",
- "revdelete-hide-user": "Brugerens brugernavn/IP-adrsse",
+ "revdelete-hide-user": "Brugerens brugernavn/IP-adresse",
"revdelete-hide-restricted": "Skjul også informationen for administratorer",
"revdelete-radio-same": "(ingen ændring)",
"revdelete-radio-set": "Skjult",
@@ -820,7 +829,6 @@
"mergehistory-same-destination": "Kilde- og målside kan ikke være den samme",
"mergehistory-reason": "Begrundelse:",
"mergelog": "Sammenfletningslog",
- "pagemerge-logentry": "flettede [[$1]] ind i [[$2]] (revisioner indtil $3)",
"revertmerge": "Gendan sammenfletning",
"mergelogpagetext": "Nedenfor vises en liste med de nyeste sammenfletninger af en sides historik i en anden.",
"history-title": "$1: Versionshistorik",
@@ -861,6 +869,8 @@
"search-result-category-size": "{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})",
"search-redirect": "(omdirigering $1)",
"search-section": "(afsnit $1)",
+ "search-category": "(kategorien $1)",
+ "search-file-match": "(svarer til filens indhold)",
"search-suggest": "Mente du: $1",
"search-interwiki-caption": "Søsterprojekter",
"search-interwiki-default": "Resultater fra $1:",
@@ -869,7 +879,6 @@
"searchrelated": "relateret",
"searchall": "alle",
"showingresults": "Nedenfor vises <b>$1</b> {{PLURAL:$1|resultat|resultater}} startende med nummer <b>$2</b>.",
- "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' af '''$3'''|Resultat '''$1 - $2''' af '''$3'''}} for '''$4'''",
"search-nonefound": "Søgningen gav ingen resultater.",
"powersearch-legend": "Avanceret søgning",
"powersearch-ns": "Søg i navnerummene:",
@@ -891,6 +900,9 @@
"prefs-personal": "Brugerdata",
"prefs-rc": "Seneste ændringer",
"prefs-watchlist": "Overvågningsliste",
+ "prefs-editwatchlist": "Rediger overvågningsliste",
+ "prefs-editwatchlist-raw": "Rediger rå overvågningsliste",
+ "prefs-editwatchlist-clear": "Ryd din overvågningsliste",
"prefs-watchlist-days": "Antal dage der skal vises i overvågningslisten:",
"prefs-watchlist-days-max": "Højst $1 {{PLURAL:$1|dag|dage}}",
"prefs-watchlist-edits": "Antal redigeringer der vises i udvidet overvågningsliste:",
@@ -1209,9 +1221,9 @@
"uploaderror": "Fejl under oplægning af fil",
"upload-recreate-warning": "'''Advarsel: En fil med det navn, er blevet slettet eller flyttet.'''\n\nSletnings- og flytnings-loggen for denne side leveres her for nemheds skyld:",
"uploadtext": "Brug formularen herunder til at lægge filer op.\nGå til [[Special:FileList|listen over filer]] for at se eller søge i eksisterende filer. (Gen-)oplægnigner logges i [[Special:Log/upload|oplægningsloggen]], sletninger i [[Special:Log/delete|sletteloggen]].\n\nBrug en henvisning af en de følgende typer for at bruge en fil på en side:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}:Filnavn.jpg<nowiki>]]</nowiki></code>''' for at bruge den fulde version af et bilede\n*'''<code><nowiki>[[</nowiki>{{ns:file}}:Filnavn.png|200px|thumb|left|Alternativ tekst<nowiki>]]</nowiki></code>''' for at bruge billedet med en bredde på 200&nbsp;pixel i en ramme til venstre med \"Alternativ tekst\" som beskrivelse\n*'''<code><nowiki>[[</nowiki>{{ns:media}}:Filnavn.ogg<nowiki>]]</nowiki></code>''' for at henvise direkte til filen uden at vise den",
- "upload-permitted": "Tilladte filtyper: $1.",
- "upload-preferred": "Foretrukne filtyper: $1.",
- "upload-prohibited": "Uønskede filtyper: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tilladt filtype:|Tilladte filtyper:}} $1.",
+ "upload-preferred": "{{PLURAL:$2|Foretrukken filtype:|Foretrukne filtyper:}} $1.",
+ "upload-prohibited": "{{PLURAL:$2|Uønsket filtype:|Uønskede filtyper:}} $1.",
"uploadlogpage": "Oplægningslog",
"uploadlogpagetext": "Herunder vises de senest oplagte filer. Alle de viste tider er serverens tid.",
"filename": "Filnavn",
@@ -1451,7 +1463,7 @@
"download": "DownloadHerunterladen",
"unwatchedpages": "Ikke overvågede sider",
"listredirects": "Henvisningsliste",
- "unusedtemplates": "Ikke brugte skabeloner",
+ "unusedtemplates": "Ubrugte skabeloner",
"unusedtemplatestext": "Her opremses alle sider i {{ns:template}}-navnerummet, der ikke er inkluderet på andre sider.\nHusk at kontrollere for andre henvisninger til skabelonerne før de slettes.",
"unusedtemplateswlh": "andre henvisninger",
"randompage": "Tilfældig side",
@@ -1460,12 +1472,12 @@
"randomincategory-invalidcategory": "\"$1\" er ikke et gyldigt kategorinavn.",
"randomincategory-nopages": "Der er ingen sider i [[:Category:$1]].",
"randomincategory-category": "Kategori:",
+ "randomincategory-legend": "Tilfældig side i en given kategori",
"randomredirect": "Tilfældige henvisninger",
"randomredirect-nopages": "Der er ingen omdirigeringer i navnerummet $1.",
"statistics": "Statistik",
"statistics-header-pages": "Sidestatistik",
"statistics-header-edits": "Redigeringsstatistik",
- "statistics-header-views": "Statistik over sidevisninger",
"statistics-header-users": "Statistik om brugere på {{SITENAME}}",
"statistics-header-hooks": "Anden statistik",
"statistics-articles": "Indholdssider",
@@ -1474,13 +1486,9 @@
"statistics-files": "Oplagte filer",
"statistics-edits": "Redigeringer siden {{SITENAME}} blev oprettet",
"statistics-edits-average": "Gennemsnitligt antal redigeringer per side",
- "statistics-views-total": "Visninger i alt",
- "statistics-views-total-desc": "Visninger på ikke-eksisterende sider og special sider er ikke inkluderet",
- "statistics-views-peredit": "Visninger per redigering",
"statistics-users": "Registrerede [[Special:ListUsers|brugere]]",
"statistics-users-active": "Aktive brugere",
"statistics-users-active-desc": "Brugere som har udført handlinger i {{PLURAL:$1|det sidste døgn|de sidste $1 dage}}",
- "statistics-mostpopular": "Mest besøgte sider",
"pageswithprop": "Sider med en sideegenskab",
"pageswithprop-legend": "Sider med en sideegenskab",
"pageswithprop-text": "Denne side viser en liste over sider, der har en bestemt sideegenskab.",
@@ -1515,13 +1523,12 @@
"specialpage-empty": "Der er ingen resultater at vise.",
"lonelypages": "Forældreløse sider",
"lonelypagestext": "Følgende sider er ikke henvist til eller inkluderet på andre sider på {{SITENAME}}:",
- "uncategorizedpages": "Ukategoriserede sider",
- "uncategorizedcategories": "Ukategoriserede kategorier",
- "uncategorizedimages": "Ikke kategoriserede filer",
+ "uncategorizedpages": "Ikke-kategoriserede sider",
+ "uncategorizedcategories": "Ikke kategoriserede kategorier",
+ "uncategorizedimages": "Ikke-kategoriserede filer",
"uncategorizedtemplates": "Ikke kategoriserede skabeloner",
"unusedcategories": "Ubrugte kategorier",
"unusedimages": "Ubrugte filer",
- "popularpages": "Populære sider",
"wantedcategories": "Ønskede kategorier",
"wantedpages": "Ønskede sider",
"wantedpages-badtitle": "Ugyldig titel i resultaterne: $1",
@@ -1583,7 +1590,7 @@
"querypage-disabled": "Denne specialside er deaktiveret af hensyn til ydeevnen.",
"booksources": "Bogkilder",
"booksources-search-legend": "Søgning efter bøger",
- "booksources-go": "Søg",
+ "booksources-search": "Søg",
"booksources-text": "Dette er en liste med henvisninger til Internetsider, som sælger nye og brugte bøger. Der kan der også findes yderligere informationer om bøgerne. {{SITENAME}} er ikke forbundet med nogen af dem.",
"booksources-invalid-isbn": "Det angivne ISBN-nummer ser forkert ud. Tjek med kilden om det er skrevet korrekt.",
"specialloguserlabel": "Udført af:",
@@ -1653,15 +1660,19 @@
"listgrouprights-namespaceprotection-header": "Navnerumsbegrænsninger",
"listgrouprights-namespaceprotection-namespace": "Navnerum",
"listgrouprights-namespaceprotection-restrictedto": "Rettighed(er) der giver brugeren mulighed for at redigere",
+ "trackingcategories": "Sporingskategorier",
+ "trackingcategories-msg": "Sporingskategori",
"trackingcategories-desc": "Optagelseskriterier for kategori",
"noindex-category-desc": "Siden indekseres ikke af robotter, fordi den indeholder det magiske ord <code><nowiki>__NOINDEX__</nowiki></code> og er i et navnerum, hvor dette flag er tilladt.",
"index-category-desc": "Siden indeholder <code><nowiki>__INDEX__</nowiki></code> (og er i et navnerum, hvor dette flag er tilladt), og bliver derfor indekseret af robotter, hvor den normalt ikke ville blive det.",
+ "trackingcategories-nodesc": "Ingen beskrivelse tilgængelig.",
+ "trackingcategories-disabled": "Kategorien er deaktiveret",
"mailnologin": "Du er ikke logget på",
"mailnologintext": "Du skal være [[Special:UserLogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.",
"emailuser": "E-mail til denne bruger",
"emailuser-title-target": "Send e-mail til denne {{GENDER:$1|bruger}}",
"emailuser-title-notarget": "Send e-mail til en bruger",
- "emailpage": "E-mail bruger",
+ "emailpage": "E-mail til bruger",
"emailpagetext": "Du kan bruge formularen nedenfor til at sende en e-mail til denne {{GENDER:$1|bruger}}.\nDen e-mailadresse, du har angivet i [[Special:Preferences|dine indstillinger]], vil dukke op i \"fra\"-feltet på e-mailen, så modtageren kan svare dig.",
"defemailsubject": "{{SITENAME}}-e-mail fra brugeren \"$1\"",
"usermaildisabled": "Bruger-e-mail deaktiveret",
@@ -1680,7 +1691,7 @@
"emailmessage": "Besked:",
"emailsend": "Send",
"emailccme": "Send en kopi af denne e-mail til mig",
- "emailccsubject": "Kopi sendes til $1: $2",
+ "emailccsubject": "Kopi af din besked til $1: $2",
"emailsent": "E-mail sendt",
"emailsenttext": "Din e-mail er blevet sendt.",
"emailuserfooter": "Denne e-mail er sendt af $1 til $2 ved hjælp af funktionen \"E-mail til denne bruger\" på {{SITENAME}}.",
@@ -1708,7 +1719,7 @@
"wlheader-enotif": "E-mail-underretning er slået til.",
"wlheader-showupdated": "Sider, der er ændret siden dit sidste besøg, er vist med '''fed skrift'''.",
"wlnote": "Nedenfor ses {{PLURAL:$1|den seneste ændring|de seneste <strong>$1</strong> ændringer}} i {{PLURAL:$2|den sidste time|de sidste <strong>$2</strong> timer}} op til den $3 kl. $4.",
- "wlshowlast": "Vis de seneste $1 timer $2 dage $3",
+ "wlshowlast": "Vis de seneste $1 timer $2 dage",
"watchlist-options": "Indstillinger for overvågningslisten",
"watching": "Tilføjer overvågning …",
"unwatching": "Fjerner overvågning …",
@@ -1757,7 +1768,6 @@
"deleteprotected": "Du kan ikke slette denne side, fordi den er beskyttet.",
"deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] linker til eller inkluderer den side, du er ved at slette.",
"rollback": "Fjern redigeringer",
- "rollback_short": "Fjern redigering",
"rollbacklink": "rul tilbage",
"rollbacklinkcount": "tilbagefør $1 {{PLURAL:$1|redigering|redigeringer}}",
"rollbacklinkcount-morethan": "tilbagefør mere end $1 {{PLURAL:$1|redigering|redigeringer}}",
@@ -1807,6 +1817,7 @@
"protect-othertime": "Anden tid:",
"protect-othertime-op": "anden tid",
"protect-existing-expiry": "Nugældende udløbstid: $2 $3",
+ "protect-existing-expiry-infinity": "Eksisterende udløbstid: uendelig",
"protect-otherreason": "Anden/uddybende årsag:",
"protect-otherreason-op": "Anden årsag",
"protect-dropdown": "* Almindelge besyttelsesårsager\n** Gentagen hærværk\n** Gentagen spam\n** Redigeringskrig\n** Side med mange besøgende",
@@ -2174,18 +2185,14 @@
"import-rootpage-nosubpage": "Navnerummet \"$1\" tillader ikke undersider af rodsiderne.",
"importlogpage": "Importlog",
"importlogpagetext": "Administrativ import af sider med versionshistorik fra andre Wikis.",
- "import-logentry-upload": "[[$1]] blev importeret",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versioner}} importeret",
- "import-logentry-interwiki": "$1 blev importeret (Transwiki)",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importeret fra $2",
"javascripttest": "Test af JavaScript",
- "javascripttest-title": "Kører $1 test",
"javascripttest-pagetext-noframework": "Denne side er reserveret til at teste JavaScript.",
"javascripttest-pagetext-unknownframework": "Ukendt testmiljø \"$1\".",
"javascripttest-pagetext-frameworks": "Vælg venligst en af de følgende testmiljøer: $1",
"javascripttest-pagetext-skins": "Vælg et udseende, som testene skal køres med:",
"javascripttest-qunit-intro": "Se [$1 testdokumentationen] på mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit testsuite",
"tooltip-pt-userpage": "Din brugerside",
"tooltip-pt-anonuserpage": "Brugersiden for den ip-adresse du redigerer som",
"tooltip-pt-mytalk": "Din diskussionsside",
@@ -2195,6 +2202,7 @@
"tooltip-pt-mycontris": "Liste over dine bidrag",
"tooltip-pt-login": "Du opfordres til at logge på, men det er ikke obligatorisk.",
"tooltip-pt-logout": "Log af",
+ "tooltip-pt-createaccount": "Du opfordres til at oprette en konto og logge på, men det er ikke obligatorisk",
"tooltip-ca-talk": "Diskussion om indholdet på siden",
"tooltip-ca-edit": "Du kan redigere denne side. Brug venligst forhåndsvisning før du gemmer.",
"tooltip-ca-addsection": "Start et nyt afsnit",
@@ -2224,6 +2232,7 @@
"tooltip-feed-atom": "Atom-feed for denne side",
"tooltip-t-contributions": "Se denne brugers bidrag",
"tooltip-t-emailuser": "Send en e-mail til denne bruger",
+ "tooltip-t-info": "Yderligere oplysninger om denne side",
"tooltip-t-upload": "Upload et billede eller anden mediafil",
"tooltip-t-specialpages": "Liste over alle specialsider",
"tooltip-t-print": "Printervenlig udgave af denne side",
@@ -2287,7 +2296,6 @@
"pageinfo-robot-policy": "Indeksering af robotter",
"pageinfo-robot-index": "Tilladt",
"pageinfo-robot-noindex": "Ikke tilladt",
- "pageinfo-views": "Antal visninger",
"pageinfo-watchers": "Antal brugere, der overvåger siden",
"pageinfo-few-watchers": "Overvåget af færre end $1 {{PLURAL:$1|bruger|brugere}}",
"pageinfo-redirects-name": "Antal omdirigeringer til denne side",
@@ -2738,7 +2746,6 @@
"exif-urgency-low": "Lav ($1)",
"exif-urgency-high": "Høj ($1)",
"exif-urgency-other": "Bruger-defineret prioritet ($1)",
- "watchlistall2": "alle",
"namespacesall": "alle",
"monthsall": "alle",
"confirmemail": "Bekræft e-mailadresse",
@@ -2823,11 +2830,10 @@
"watchlisttools-edit": "Rediger overvågningsliste",
"watchlisttools-raw": "Rediger rå overvågningsliste",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskussion]])",
- "unknown_extension_tag": "Ukendt tag \"$1\"",
"duplicate-defaultsort": "Advarsel: Standardsorteringsnøglen \"$2\" tilsidesætter den tidligere sorteringsnøgle \"$1\".",
"version": "Information om MediaWiki",
"version-extensions": "Installerede udvidelser",
- "version-skins": "Udseender",
+ "version-skins": "Installerede udseender",
"version-specialpages": "Specialsider",
"version-parserhooks": "Parserfunktioner",
"version-variables": "Variabler",
@@ -2839,10 +2845,13 @@
"version-parser-function-hooks": "Parserfunktioner",
"version-hook-name": "Navn",
"version-hook-subscribedby": "Brugt af",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[intet navn]",
"version-license": "MediaWiki Licens",
"version-ext-license": "Licens",
"version-ext-colheader-name": "Udvidelse",
+ "version-skin-colheader-name": "Udseende",
+ "version-ext-colheader-version": "Version",
"version-ext-colheader-license": "Licens",
"version-ext-colheader-description": "Beskrivelse",
"version-ext-colheader-credits": "Forfattere",
@@ -2859,6 +2868,9 @@
"version-entrypoints": "URL-adresser til indgangspunkter",
"version-entrypoints-header-entrypoint": "Indgangspunkt",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Installerede biblioteker",
+ "version-libraries-library": "Bibliotek",
+ "version-libraries-version": "Version",
"redirect": "Omdirigering pga. fil, bruger-, side- eller udgave-ID",
"redirect-legend": "Omstilling til en fil eller en side",
"redirect-summary": "Denne specialside omdirigerer til en fil (hvis filnavnet er angivet), en side (hvis udgave ID'et eller side ID'et er angivet) eller en brugerside (hvis et numerisk brugernummer er angivet). Eksempler på brug: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]] eller [[{{#Special:Redirect}}/user/101]].",
@@ -2894,6 +2906,7 @@
"specialpages-group-wiki": "Data og værktøjer",
"specialpages-group-redirects": "Specialsider der viderestiller",
"specialpages-group-spam": "Spamværktøjer",
+ "specialpages-group-developer": "Udviklerværktøjer",
"blankpage": "Blank side",
"intentionallyblankpage": "Denne side er bevidst uden indhold.",
"external_image_whitelist": " #Lad denne linje være som den er<pre>\n#Skriv dele af regulære uttryk (delen som er mellem //) nedenfor\n#Disse vil tjekkes mod URL'er for eksterne billeder\n#De som matcher, vil blive vist som billeder. Øvrige vil kun blive vist som henvisninger til billedet\n#Linjer som begynder med # behandles som kommentarer\n#Der skelnes ikke mellem store og små bogstaver\n\n#Skriv alle delene af regulære udtryk over denne linje. Lad denne linje være som den er</pre>",
@@ -2905,11 +2918,16 @@
"tags-tag": "Tagnavn",
"tags-display-header": "Udseende på ændringslister",
"tags-description-header": "Beskrivelse af betydning",
+ "tags-source-header": "Kilde",
"tags-active-header": "Aktivt?",
"tags-hitcount-header": "Taggede ændringer",
+ "tags-actions-header": "Handlinger",
"tags-active-yes": "Ja",
"tags-active-no": "Nej",
"tags-edit": "redigér",
+ "tags-delete": "slet",
+ "tags-activate": "aktiver",
+ "tags-deactivate": "deaktiver",
"tags-hitcount": "{{PLURAL:$1|en ændring|$1 ændringer}}",
"comparepages": "Sammenlign sider",
"compare-page1": "Side 1",
@@ -2940,6 +2958,9 @@
"htmlform-no": "Nej",
"htmlform-yes": "Ja",
"htmlform-chosen-placeholder": "Vælg en mulighed",
+ "htmlform-cloner-create": "Tilføj flere",
+ "htmlform-cloner-delete": "Fjern",
+ "htmlform-cloner-required": "Der kræves mindst en værdi.",
"sqlite-has-fts": "$1 med fuld-tekst søgnings support",
"sqlite-no-fts": "$1 uden fuld-tekst søgnings support",
"logentry-delete-delete": "$1 {{GENDER:$2|slettede}} siden $3",
@@ -2961,6 +2982,9 @@
"revdelete-uname-unhid": "brugernavnet er ikke længere skjult",
"revdelete-restricted": "tilføjede begrænsninger for administratorer",
"revdelete-unrestricted": "fjernede begrænsninger for administratorer",
+ "logentry-block-block": "$1 {{GENDER:$2|blokerede}} {{GENDER:$4|$3}} med en udløbstid på $5 $6",
+ "logentry-block-reblock": "$1 {{GENDER:$2|ændrede}} blokeringsindstillinger for {{GENDER:$4|$3}} med en udløbstid på $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|ændrede}} blokeringsindstillinger for {{GENDER:$4|$3}} med en udløbstid på $5 $6",
"logentry-move-move": "$1 {{GENDER:$2|flyttede}} siden $3 til $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|flyttede}} siden $3 til $4 uden at efterlade en omdirigering",
"logentry-move-move_redir": "$1 {{GENDER:$2|flyttede}} siden $3 til $4 hen over en omdirigering",
@@ -2975,20 +2999,24 @@
"logentry-rights-rights": "$1 {{GENDER:$2|ændrede}} gruppemedlemskabet for $3 fra $4 til $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|ændrede}} gruppemedlemskabet for $3",
"logentry-rights-autopromote": "$1 blev automatisk {{GENDER:$2|forfremmet}} fra $4 til $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|lagde}} $3 op",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|lagde}} en ny udgave af $3 op",
+ "logentry-upload-revert": "$1 {{GENDER:$2|lagde}} $3 op",
"rightsnone": "(-)",
+ "revdelete-summary": "redigeringsbeskrivelse",
+ "feedback-adding": "Tilføjer kommentar til side...",
+ "feedback-bugcheck": "Skønt! Men tjek venligst, at det ikke er en af de [$1 kendte fejl].",
+ "feedback-bugnew": "Jeg har kontrolleret. Rapporter en ny fejl.",
"feedback-bugornote": "Hvis du er klar til at beskrive et teknisk problem i detaljer, bedes du [$1 rapportere en fejl].\nEllers kan du bruge den enkle formular nedenfor. Din kommentar vil blive tilføjet siden \"[$3 $2]\" sammen med dit brugernavn og den browser, du anvender.",
- "feedback-subject": "Emne:",
- "feedback-message": "Besked:",
"feedback-cancel": "Afbryd",
- "feedback-submit": "Send kommentar",
- "feedback-adding": "Tilføjer kommentar til side...",
+ "feedback-close": "Færdig",
"feedback-error1": "Fejl: Ukendt resultat fra API",
"feedback-error2": "Fejl: Redigering mislykkedes",
"feedback-error3": "Fejl: Intet svar fra API",
+ "feedback-message": "Besked:",
+ "feedback-subject": "Emne:",
+ "feedback-submit": "Send",
"feedback-thanks": "Tak! Dine tilbagemeldinger er blevet noteret på siden \"[$2 $1]\".",
- "feedback-close": "Færdig",
- "feedback-bugcheck": "Skønt! Men tjek venligst, at det ikke er en af de [$1 kendte fejl].",
- "feedback-bugnew": "Jeg har kontrolleret. Rapporter en ny fejl.",
"searchsuggest-search": "Søg",
"searchsuggest-containing": "indeholder...",
"api-error-badaccess-groups": "Du har ikke tilladelse til at overføre filer til denne wiki.",
@@ -3070,5 +3098,37 @@
"pagelang-language": "Sprog",
"pagelang-use-default": "Brug standardsprog",
"pagelang-select-lang": "Vælg sprog",
- "right-pagelang": "Ændre sidesproget"
+ "right-pagelang": "Ændre sidesproget",
+ "mediastatistics": "Mediestatistik",
+ "mediastatistics-table-count": "Antal filer",
+ "mediastatistics-table-totalbytes": "Samlet størrelse",
+ "mediastatistics-header-unknown": "Ukendt",
+ "mediastatistics-header-audio": "Lyd",
+ "mediastatistics-header-video": "Videoer",
+ "mediastatistics-header-text": "Tekstformat",
+ "mediastatistics-header-executable": "Kørbare filer",
+ "mediastatistics-header-archive": "Komprimerede formater",
+ "json-error-syntax": "Syntaksfejl",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Udvidet latin",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symboler",
+ "special-characters-group-greek": "Græsk",
+ "special-characters-group-cyrillic": "Kyrillisk",
+ "special-characters-group-arabic": "Arabisk",
+ "special-characters-group-arabicextended": "Udvidet arabisk",
+ "special-characters-group-persian": "Persisk",
+ "special-characters-group-hebrew": "Hebraisk",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tamilsk",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalesisk",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Laotisk",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "tankestreg",
+ "special-characters-title-emdash": "lang tankestreg",
+ "special-characters-title-minus": "minustegn"
}
diff --git a/languages/i18n/de-ch.json b/languages/i18n/de-ch.json
index e04af3be..29a9b07d 100644
--- a/languages/i18n/de-ch.json
+++ b/languages/i18n/de-ch.json
@@ -1,294 +1,295 @@
{
- "@metadata": {
- "authors": [
- "Filzstift",
- "Geitost",
- "Ianusius",
- "Kghbln",
- "MichaelFrey",
- "SVG",
- "The Evil IP address",
- "Umherirrender"
- ]
- },
- "tog-hideminor": "Kleine Änderungen in den «Letzten Änderungen» ausblenden",
- "tog-hidepatrolled": "Kontrollierte Änderungen in den «Letzten Änderungen» ausblenden",
- "tog-newpageshidepatrolled": "Kontrollierte Seiten bei den «Neuen Seiten» ausblenden",
- "tog-usenewrc": "Seitenbezogene Gruppierung in den «Letzten Änderungen» und auf der Beobachtungsliste",
- "tog-minordefault": "Eigene Änderungen standardmässig als minim markieren",
- "category_header": "Seiten in der Kategorie «$1»",
- "category-media-header": "Medien in der Kategorie «$1»",
- "badaccess-groups": "Diese Aktion ist auf Benutzer beschränkt, die {{PLURAL:$2|der Gruppe|einer der Gruppen}} «$1» angehören.",
- "retrievedfrom": "Von «$1»",
- "site-atom-feed": "Atom-Feed für «$1»",
- "page-rss-feed": "RSS-Feed für «$1»",
- "page-atom-feed": "Atom-Feed für «$1»",
- "missing-article": "Der Text von «$1» $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht zutrifft, hast du eventuell einen Fehler in der Software gefunden. Bitte melde dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.",
- "fileappenderrorread": "«$1» konnte während des Hinzufügens nicht gelesen werden.",
- "fileappenderror": "Konnte «$1» nicht an «$2» anhängen.",
- "filecopyerror": "Die Datei «$1» konnte nicht nach «$2» kopiert werden.",
- "filerenameerror": "Die Datei «$1» konnte nicht nach «$2» umbenannt werden.",
- "filedeleteerror": "Die Datei «$1» konnte nicht gelöscht werden.",
- "directorycreateerror": "Das Verzeichnis «$1» konnte nicht angelegt werden.",
- "filenotfound": "Die Datei «$1» wurde nicht gefunden.",
- "fileexistserror": "In die Datei «$1» konnte nicht geschrieben werden, da die Datei bereits vorhanden ist.",
- "unexpected": "Unerwarteter Wert: «$1» = «$2»",
- "cannotdelete": "Die Seite oder Datei «$1» kann nicht gelöscht werden.\nMöglicherweise wurde sie bereits von jemand anderem gelöscht.",
- "cannotdelete-title": "Seite «$1» kann nicht gelöscht werden",
- "actionthrottledtext": "Im Rahmen einer Anti-Spam-Massnahme oder aufgrund eines Missbrauchsfilters kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze hast du überschritten.\nBitte versuche es in ein paar Minuten erneut.",
- "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
- "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung ''«$2»'' eingerichtet.",
- "filereadonlyerror": "Die Datei «$1» kann nicht verändert werden, da auf das Dateirepositorium «$2» nur Lesezugriff möglich ist.\n\nDer Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: «$3».",
- "loginsuccess": "Du bist jetzt als «$1» bei {{SITENAME}} angemeldet.",
- "nosuchuser": "Der Benutzername «$1» existiert nicht.\nÜberprüfe die Schreibweise (Gross-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melde dich als neuer Benutzer an]].",
- "nosuchusershort": "Der Benutzername «$1» ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
- "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer «$2» lautet nun: $3\n\nFalls du dies wirklich gewünscht hast, solltest du dich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignoriere dieses E-Mail, falls du es nicht selbst angefordert hast. Das alte Passwort bleibt weiterhin gültig.",
- "noemail": "{{GENDER:$1|Benutzer|Benutzerin|Benutzer}} «$1» hat keine E-Mail-Adresse angegeben.",
- "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer «$1» gesandt.\nBitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt weiterhin gültig.",
- "eauthentsent": "Ein Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor ein E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolge die Hinweise im Bestätigungs-E-Mail.",
- "throttled-mailpassword": "Es wurde innerhalb der letzten {{PLURAL:$1|Stunde|$1 Stunden}} bereits ein Passwortzurücksetzungs-E-Mail angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur {{PLURAL:$1|einmal pro Stunde|alle $1 Stunden}} ein Passwortzurücksetzungs-E-Mail angefordert werden.",
- "mailerror": "Fehler beim Senden des E-Mails: $1",
- "createaccount-text": "Es wurde für dich ein Benutzerkonto «$2» auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für «$2» ist «$3». Du solltest dich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.",
- "user-mail-no-addy": "Versuchte ein E-Mail ohne Angabe einer E-Mail-Adresse zu versenden",
- "user-mail-no-body": "Es wurde versucht, ein E-Mail mit einem leeren oder zu kurzen Textkörper zu versenden.",
- "resetpass_announce": "Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschliessen, musst du jetzt ein neues Passwort wählen.",
- "passwordreset-emailsent": "Ein Passwortzurücksetzungs-E-Mail wurde versandt.",
- "passwordreset-emailsent-capture": "Ein Passwortzurücksetzungs-E-Mail wurde versandt, das unten angezeigt wird.",
- "passwordreset-emailerror-capture": "Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an {{GENDER:$2|den Benutzer|die Benutzerin}} gescheitert: $1",
- "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
- "missingcommentheader": "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
- "blockedtext": "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde von $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nDu kannst die «E-Mail an diesen Benutzer»-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\nDeine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
- "autoblockedtext": "Deine IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nDu kannst die «E-Mail an diesen Benutzer»-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\n\nDeine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
- "confirmedittext": "Du musst deine E-Mail-Adresse erst bestätigen, bevor du Bearbeitungen durchführen kannst. Bitte ergänze und bestätige dein E-Mail in den [[Special:Preferences|Einstellungen]].",
- "accmailtext": "Ein zufällig generiertes Passwort für [[User talk:$1|$1]] wurde an $2 versandt. Es kann auf der Seite ''[[Special:ChangePassword|Passwort ändern]]'' nach der Anmeldung geändert werden.",
- "userpage-userdoesnotexist": "Das Benutzerkonto «<nowiki>$1</nowiki>» ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
- "userpage-userdoesnotexist-view": "Das Benutzerkonto «$1» ist nicht vorhanden.",
- "clearyourcache": "'''Hinweis:''' Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Ctrl+F5'' oder ''Ctrl+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Ctrl+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Ctrl+F5'' drücken oder ''Ctrl'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
- "usercssyoucanpreview": "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues CSS vor dem Speichern zu testen.",
- "userjsyoucanpreview": "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues JavaScript vor dem Speichern zu testen.",
- "userinvalidcssjstitle": "'''Achtung:''' Die Benutzeroberfläche «$1» existiert nicht. Bedenke, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
- "editing": "Bearbeiten von «$1»",
- "creating": "Erstellen von «$1»",
- "editingsection": "Bearbeiten von «$1» (Abschnitt)",
- "editingcomment": "Bearbeiten von «$1» (Neuer Abschnitt)",
- "explainconflict": "Jemand anders hat diese Seite geändert, nachdem du angefangen hast sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält deine Änderungen.\nBitte füge deine Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn du auf «{{int:savearticle}}» klickst.",
- "copyrightwarning": "'''Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nDu gibst uns hiermit deine Zusage, dass du den Text '''selbst verfasst''' hast, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der «$2» stehen (siehe $1 für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf «Seite speichern».</i>",
- "longpageerror": "'''Fehler: Der Text, den du zu speichern versuchst, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobytes}} gross. Dies ist grösser als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobytes}}.'''\nEr kann nicht gespeichert werden.",
- "post-expand-template-inclusion-warning": "Warnung: Die Grösse eingebundener Vorlagen ist zu gross, einige Vorlagen können nicht eingebunden werden.",
- "post-expand-template-inclusion-category": "Seiten, in denen die maximale Grösse eingebundener Vorlagen überschritten ist",
- "post-expand-template-argument-warning": "'''Warnung:''' Diese Seite enthält mindestens einen Parameter in einer Vorlage, der expandiert zu gross ist. Diese Parameter werden ignoriert.",
- "histlegend": "Zur Anzeige der Änderungen einfach die zu vergleichenden Versionen auswählen und die Schaltfläche «{{int:compareselectedversions}}» klicken.<br />\n* ({{int:cur}}) = Unterschied zur aktuellen Version, ({{int:last}}) = Unterschied zur vorherigen Version\n* Uhrzeit/Datum = Version zu dieser Zeit, Benutzername/IP-Adresse des Bearbeiters, {{int:minoreditletter}} = Kleine Änderung",
- "revdelete-show-file-confirm": "Bist du sicher, dass du die gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2 um $3 Uhr ansehen willst?",
- "revdelete-show-no-access": "Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
- "revdelete-modify-no-access": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
- "mergehistory-merge": "Die folgenden Versionen von «[[:$1]]» können nach «[[:$2]]» übertragen werden. Markiere die Version, bis zu der (einschliesslich) die Versionen übertragen werden sollen. Bitte beachte, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.",
- "mergehistory-success": "{{PLURAL:$3|1 Version|$3 Versionen}} von «[[:$1]]» erfolgreich nach «[[:$2]]» vereinigt.",
- "mergehistory-no-source": "Ursprungsseite «$1» ist nicht vorhanden.",
- "mergehistory-no-destination": "Zielseite «$1» ist nicht vorhanden.",
- "mergehistory-autocomment": "«[[:$1]]» vereinigt nach «[[:$2]]»",
- "mergehistory-comment": "«[[:$1]]» vereinigt nach «[[:$2]]»: $3",
- "history-title": "$1: Versionsgeschichte",
- "searchresults-title": "Suchergebnisse für «$1»",
- "toomanymatches": "Die Anzahl der Suchergebnisse ist zu gross, bitte versuche eine andere Abfrage.",
- "searchmenu-exists": "'''Es gibt eine Seite, die den Namen «[[:$1]]» hat.'''",
- "searchmenu-new": "'''Erstelle die Seite «[[:$1]]» in diesem Wiki.'''",
- "search-redirect": "(Weiterleitung von «$1»)",
- "search-suggest": "Meintest du «$1»?",
- "prefs-watchlist-days": "Anzahl der Tage, die die Beobachtungsliste standardmässig umfassen soll:",
- "recentchangesdays": "Anzahl der Tage, die die Liste der «Letzten Änderungen» standardmässig umfassen soll:",
- "recentchangescount": "Anzahl der standardmässig angezeigten Bearbeitungen:",
- "defaultns": "In diesen Namensräumen soll standardmässig gesucht werden:",
- "prefs-help-signature": "Beiträge auf Diskussionsseiten sollten mit «<nowiki>~~~~</nowiki>» signiert werden, was dann in die Signatur mit Zeitstempel umgewandelt wird.",
- "right-createpage": "Seiten erstellen (ausser Diskussionsseiten)",
- "right-nominornewtalk": "Kleine Bearbeitungen an Diskussionsseiten führen zu keiner «Neue Nachrichten»-Anzeige",
- "right-bigdelete": "Seiten mit grosser Versionsgeschichte löschen",
- "right-override-export-depth": "Exportiere Seiten einschliesslich verlinkter Seiten bis zu einer Tiefe von 5",
- "right-passwordreset": "Passwort eines Benutzers zurücksetzen und das dazu verschickte E-Mail einsehen",
- "recentchanges-label-plusminus": "Die Änderung der Seitengrösse in Bytes",
- "rc_categories": "Nur Seiten aus den Kategorien (getrennt mit «|»):",
- "rc-old-title": "ursprünglich erstellt als «$1»",
- "recentchangeslinked-title": "Änderungen an Seiten, die von «$1» verlinkt sind",
- "uploadtext": "Benutze dieses Formular, um neue Dateien hochzuladen.\n\nGehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit «Alternativer Text» als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
- "illegalfilename": "Der Dateiname «$1» enthält mindestens ein nicht erlaubtes Zeichen. Bitte benenne die Datei um und versuche, sie erneut hochzuladen.",
- "filename-toolong": "Dateinamen dürfen nicht grösser als 240 Byte sein.",
- "badfilename": "Der Dateiname wurde in «$1» geändert.",
- "filetype-mime-mismatch": "Dateierweiterung «.$1» stimmt nicht mit dem MIME-Typ ($2) überein.",
- "filetype-badmime": "Dateien mit dem MIME-Typ «$1» dürfen nicht hochgeladen werden.",
- "filetype-bad-ie-mime": "Diese Datei kann nicht hochgeladen werden, da der Internet Explorer sie als «$1» erkennt, welcher ein nicht erlaubter potentiell gefährlicher Dateityp ist.",
- "filetype-unwanted-type": "'''«.$1»''' ist ein unerwünschtes Dateiformat. Erlaubt {{PLURAL:$3|ist das Dateiformat|sind die Dateiformate}}: $2.",
- "filetype-banned-type": "'''«.$1»''' {{PLURAL:$4|ist ein nicht erlaubter Dateityp|sind nicht erlaubte Dateitypen}}.\n{{PLURAL:$3|Erlaubter Dateityp ist|Erlaubte Dateitypen sind}} $2.",
- "filetype-missing": "Die hochzuladende Datei hat keine Erweiterung (z. B. «.jpg»).",
- "file-too-large": "Die hochgeladene Datei war zu gross.",
- "large-file": "Die Dateigrösse sollte nach Möglichkeit $1 nicht überschreiten. Diese Datei ist $2 gross.",
- "largefileserver": "Die Datei ist grösser als die vom Server eingestellte Maximalgrösse.",
- "fileexists-extension": "Eine Datei mit ähnlichem Namen existiert bereits: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der vorhandenen Datei: <strong>[[:$2]]</strong>\nNur die Dateiendung unterscheidet sich in Gross-/Kleinschreibung. Bitte prüfe, ob die Dateien inhaltlich identisch sind.",
- "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Grösse ''(thumbnail)'' zu handeln. [[$1|thumb]]\nBitte prüfe die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgrösse handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
- "file-thumbnail-no": "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Grösse ''(thumbnail)'' hin.\nBitte prüfe, ob du das Bild in voller Auflösung vorliegen hast und lade dieses unter dem Originalnamen hoch.",
- "uploadedimage": "lud «[[$1]]» hoch",
- "overwroteimage": "lud eine neue Version von «[[$1]]» hoch",
- "upload-maxfilesize": "Maximale Dateigrösse: $1",
- "filename-bad-prefix": "Der Dateiname beginnt mit '''«$1»'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.\nBitte gib der Datei einen Namen, der den Inhalt besser beschreibt.",
- "upload-unknown-size": "Unbekannte Grösse",
- "backend-fail-maxsize": "Die Datei $1 konnte nicht gespeichert werden, da sie grösser als {{PLURAL:$2|ein Byte|$2 Bytes}} ist.",
- "backend-fail-readonly": "Das Speicher-Backend «$1» befindet sich derzeit im Lesemodus. Der angegebene Grund lautet: «$2»",
- "backend-fail-synced": "Die Datei «$1» befindet sich, innerhalb des internen Speicher-Backends, in einem inkonsistenten Zustand.",
- "backend-fail-connect": "Es konnte keine Verbindung zum Speicher-Backend «$1» hergestellt werden.",
- "backend-fail-internal": "Im Speicher-Backend «$1» ist ein unbekannter Fehler aufgetreten.",
- "backend-fail-contenttype": "Der Inhaltstyp, der im Pfad «$1» zu speichernden Datei, konnte nicht bestimmt werden.",
- "backend-fail-usable": "Die Datei «$1» konnte entweder aufgrund eines nicht vorhandenen Verzeichnisses oder wegen unzureichender Berechtigungen weder abgerufen noch gespeichert werden.",
- "filejournal-fail-dbconnect": "Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends «$1» hergestellt werden.",
- "filejournal-fail-dbquery": "Die Journaldatenbank des Speicher-Backends «$1» konnte nicht aktualisiert werden.",
- "lockmanager-notlocked": "«$1» konnte nicht entsperrt werden, da keine Sperrung besteht.",
- "lockmanager-fail-closelock": "Die Sperrdatei für «$1» konnte nicht geschlossen werden.",
- "lockmanager-fail-deletelock": "Die Sperrdatei für «$1» konnte nicht gelöscht werden.",
- "lockmanager-fail-acquirelock": "Die Sperre für «$1» konnte nicht abgerufen werden.",
- "lockmanager-fail-openlock": "Die Sperrdatei für «$1» konnte nicht geöffnet werden.",
- "lockmanager-fail-releaselock": "Die Sperre für «$1» konnte nicht freigegeben werden.",
- "zip-bad": "Die Datei ist beschädigt oder eine aus anderweitigen Gründen nicht lesbare ZIP-Datei.\nSie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.",
- "zip-unsupported": "Diese ZIP-Datei verfügt über Komprimierungseigenschaften, die nicht von MediaWiki unterstützt werden.\nSie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.",
- "img-auth-badtitle": "Aus «$1» kann kein gültiger Titel erstellt werden.",
- "img-auth-nologinnWL": "Du bist nicht angemeldet und «$1» ist nicht in der weissen Liste.",
- "img-auth-nofile": "Datei «$1» existiert nicht.",
- "img-auth-isdir": "Du versuchst, auf ein Verzeichnis «$1» zuzugreifen.\nNur Dateizugriff ist erlaubt.",
- "img-auth-streaming": "Lade «$1».",
- "img-auth-noread": "Benutzer hat keine Berechtigung, «$1» zu lesen.",
- "http-invalid-scheme": "URLs mit dem Schema «$1» werden nicht unterstützt",
- "listfiles-summary": "Diese Spezialseite listet alle hochgeladenen Dateien auf.",
- "listfiles_size": "Grösse",
- "filehist-dimensions": "Masse",
- "filehist-filesize": "Dateigrösse",
- "filerevert": "Zurücksetzen von «$1»",
- "filedelete": "Lösche «$1»",
- "filedelete-intro": "Du löschst die Datei '''«[[Media:$1|$1]]»''' inklusive ihrer Versionsgeschichte.",
- "filedelete-intro-old": "Du löschst von der Datei '''«[[Media:$1|$1]]»''' die [$4 Version vom $2, $3 Uhr].",
- "filedelete-success": "'''«$1»''' wurde gelöscht.",
- "filedelete-success-old": "Von der Datei '''«[[Media:$1|$1]]»''' wurde die Version vom $2, $3 Uhr gelöscht.",
- "filedelete-nofile": "'''«$1»''' ist nicht vorhanden.",
- "filedelete-nofile-old": "Es gibt von '''«$1»''' keine archivierte Version mit den angegebenen Attributen.",
- "randompage-nopages": "Es sind keine Seiten {{PLURAL:$2|im folgenden Namensraum|in den folgenden Namensräumen}} enthalten: «$1»",
- "randomredirect-nopages": "Im Namensraum «$1» sind keine Weiterleitungen vorhanden.",
- "alllogstext": "Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.\nDie Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden (Gross-/Kleinschreibung muss beachtet werden).",
- "allpages-bad-ns": "Der Namensraum «$1» ist in {{SITENAME}} nicht vorhanden.",
- "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.ch</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. «*.org». angegeben werden. <br />{{PLURAL:$2|Unterstütztes Protokoll|Unterstützte Protokolle}}: <code>$1</code> (Standard ist http, falls kein Protokoll angegeben ist.)",
- "emailpagetext": "Du kannst {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular ein E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} dir direkt antworten kann.",
- "defemailsubject": "{{SITENAME}} - E-Mail von Benutzer «$1»",
- "emailnotarget": "Nicht vorhandener oder ungültiger Benutzername für den Empfang eines E-Mails.",
- "emailccme": "Sende eine Kopie des E-Mails an mich",
- "emailsenttext": "Dein E-Mail wurde verschickt.",
- "emailuserfooter": "Dieses E-Mail wurde von {{SITENAME}}-Benutzer «$1» an «$2» gesendet.",
- "addedwatchtext": "Die Seite «[[:$1]]» wurde zu deiner [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\nSpätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werden dort gelistet.",
- "removedwatchtext": "Die Seite «[[:$1]]» wurde von deiner [[Special:Watchlist|Beobachtungsliste]] entfernt.",
- "iteminvalidname": "Problem mit dem Eintrag «$1», ungültiger Name.",
- "watcherrortext": "Beim Ändern der Beobachtungslisteneinstellungen für «$1» ist ein Fehler aufgetreten.",
- "excontent": "Inhalt war: «$1»",
- "excontentauthor": "Inhalt war: «$1» (einziger Bearbeiter: [[Special:Contributions/$2|$2]])",
- "exbeforeblank": "Inhalt vor dem Leeren der Seite: «$1»",
- "delete-confirm": "Löschen von «$1»",
- "deletedtext": "«$1» wurde gelöscht. Im $2 findest du eine Liste der letzten Löschungen.",
- "editcomment": "Die Änderungszusammenfassung lautet: ''«$1»''.",
- "protectedarticle": "schützte «[[$1]]»",
- "modifiedarticleprotection": "änderte den Schutz von «[[$1]]»",
- "unprotectedarticle": "hob den Schutz von «[[$1]]» auf",
- "movedarticleprotection": "übertrug den Seitenschutz von «[[$2]]» auf «[[$1]]»",
- "protect-title": "Schutz ändern von «$1»",
- "protect-title-notallowed": "Schutz ansehen von «$1»",
- "protect-text": "Hier kannst du den Schutzstatus der Seite «$1» einsehen und ändern.",
- "protect-locked-blocked": "Du kannst den Seitenschutz nicht ändern, da dein Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
- "protect-locked-dblock": "Die Datenbank ist gesperrt, der Seitenschutz kann daher nicht geändert werden. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
- "protect-locked-access": "Dein Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen der Seite '''«$1»:'''",
- "protect-fallback": "Nur Benutzern mit der «$1»-Berechtigung erlauben.",
- "minimum-size": "Mindestgrösse",
- "maximum-size": "Maximalgrösse:",
- "undeleteextrahelp": "* Um die Seite mitsamt aller Versionen wiederherzustellen, wähle keine Version aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».\n* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wähle die betreffenden Versionen einzeln aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».",
- "undeletedpage": "'''«$1»''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] findest du eine Übersicht der gelöschten und wiederhergestellten Seiten.",
- "undelete-cleanup-error": "Fehler beim Löschen der unbenutzten Archiv-Version «$1».",
- "undelete-show-file-confirm": "Bist du sicher, dass du eine gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2, $3 Uhr sehen willst?",
- "contributions-title": "Benutzerbeiträge von «$1»",
- "whatlinkshere-title": "Seiten, die auf «$1» verlinken",
- "linkshere": "Die folgenden Seiten verlinken auf '''«[[:$1]]»''':",
- "nolinkshere": "Keine Seite verlinkt auf '''«[[:$1]]»'''.",
- "nolinkshere-ns": "Keine Seite verlinkt auf '''«[[:$1]]»''' im gewählten Namensraum.",
- "ipb-confirmhideuser": "Du bist gerade dabei, einen Benutzer im Modus «Benutzer verstecken» zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?",
- "ipb-unblock-addr": "«$1» freigeben",
- "ipb-blocklist-contribs": "Benutzerbeiträge von «$1»",
- "autoblocker": "Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt. Grund der Benutzersperre: «$2».",
- "blocklogentry": "sperrte «[[$1]]» für den Zeitraum: $2 $3",
- "reblock-logentry": "änderte die Sperre von «[[$1]]» für den Zeitraum: $2 $3",
- "unblocklogentry": "hob die Sperre von «$1» auf",
- "ipb_already_blocked": "«$1» wurde bereits gesperrt.",
- "ipb-needreblock": "«$1» ist bereits gesperrt. Möchtest du die Sperrparameter ändern?",
- "ip_range_toolarge": "Adressbereiche, die grösser als /$1 sind, sind nicht erlaubt.",
- "cant-see-hidden-user": "Der Benutzer, den du versuchst zu sperren, wurde bereits gesperrt und verborgen. Da du das «hideuser»-Recht nicht hast, kannst du die Benutzersperre nicht sehen und nicht bearbeiten.",
- "move-page": "Verschieben von «$1»",
- "movepage-moved": "'''Die Seite «$1» wurde nach «$2» verschoben.'''",
- "movepage-page-exists": "Die Seite «$1» ist bereits vorhanden und kann nicht automatisch überschrieben werden.",
- "movepage-page-moved": "Die Seite «$1» wurde nach «$2» verschoben.",
- "movepage-page-unmoved": "Die Seite «$1» konnte nicht nach «$2» verschoben werden.",
- "delete_and_move_text": "== Löschung erforderlich ==\n\nDie Seite «[[:$1]]» existiert bereits. Möchtest du diese löschen, um die Seite verschieben zu können?",
- "delete_and_move_reason": "gelöscht, um Platz für die Verschiebung von «[[$1]]» zu machen",
- "immobile-source-namespace": "Seiten des «$1»-Namensraums können nicht verschoben werden",
- "immobile-target-namespace": "Seiten können nicht in den «$1»-Namensraum verschoben werden",
- "thumbnail-more": "vergrössern",
- "djvu_page_error": "DjVu-Seite ausserhalb des Seitenbereichs",
- "import-interwiki-templates": "Alle Vorlagen einschliessen",
- "importuploaderrorsize": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei ist grösser als die maximal erlaubte Dateigrösse.",
- "import-error-edit": "Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu bearbeiten.",
- "import-error-create": "Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu erstellen.",
- "import-error-interwiki": "Die Seite «$1» wurde nicht importiert, da deren Name für externe Links (Interwiki) reserviert ist.",
- "import-error-special": "Die Seite «$1» wurde nicht importiert, da sie zu einem besonderen Namensraum gehört, in dem keine Seiten möglich sind.",
- "import-error-invalid": "Seite «$1» wurde nicht importiert, da deren Name ungültig ist.",
- "import-logentry-upload": "importierte «[[$1]]» von einer Datei",
- "import-logentry-interwiki": "importierte «$1» (Transwiki)",
- "javascripttest-pagetext-unknownframework": "Unbekanntes Framework «$1».",
- "tooltip-t-emailuser": "Ein E-Mail an diesen Benutzer senden",
- "pageinfo-title": "Informationen zu «$1»",
- "markedaspatrollederror": "Markierung als «kontrolliert» nicht möglich.",
- "filedelete-missing": "Die Datei «$1» kann nicht gelöscht werden, da sie nicht vorhanden ist.",
- "filedelete-old-unregistered": "Die angegebene Datei-Version «$1» ist nicht in der Datenbank vorhanden.",
- "filedelete-current-unregistered": "Die angegebene Datei «$1» ist nicht in der Datenbank vorhanden.",
- "filedelete-archive-read-only": "Das Archiv-Verzeichnis «$1» ist für den Webserver nicht beschreibbar.",
- "imagemaxsize": "Maximale Bildgrösse:<br />''(für Dateibeschreibungsseiten)''",
- "thumbsize": "Standardgrösse der Vorschaubilder:",
- "file-info": "Dateigrösse: $1, MIME-Typ: $2",
- "file-info-size": "$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4",
- "file-info-size-pages": "$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Seite| Seiten}}",
- "svg-long-desc": "SVG-Datei, Basisgrösse: $1 × $2 Pixel, Dateigrösse: $3",
- "show-big-image-preview": "Grösse dieser Vorschau: $1.",
- "metadata-fields": "Die folgenden Felder der EXIF-Metadaten, die in diesem MediaWiki-Systemtext angegeben sind, werden auf Bildbeschreibungsseiten mit eingeklappter Metadatentabelle angezeigt.\nWeitere werden standardmässig nicht angezeigt.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "exif-jpeginterchangeformatlength": "Grösse der JPEG-Daten in Bytes",
- "exif-referenceblackwhite": "Schwarz/Weiss-Referenzpunkte",
- "exif-maxaperturevalue": "Grösste Blende",
- "exif-whitebalance": "Weissabgleich",
- "exif-gpsdop": "Masspräzision",
- "exif-lightsource-13": "Tagesweiss fluoreszierend (N 4600–5400 K)",
- "exif-lightsource-14": "Kaltweiss fluoreszierend (W 3900–4500 K)",
- "exif-lightsource-15": "Weiss fluoreszierend (WW 3200–3700 K)",
- "exif-isospeedratings-overflow": "Grösser als 65535",
- "confirmemail_text": "{{SITENAME}} erfordert, dass du deine E-Mail-Adresse bestätigst (authentifizierst), bevor du die erweiterten E-Mail-Funktionen benutzen kannst. Klicke bitte auf die unten stehende, mit «Bestätigungscode zuschicken» beschriftete Schaltfläche, damit ein automatisch erstelltes E-Mail an die angegebene Adresse geschickt wird. Dieses E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem du diese Webseite in deinem Webbrowser öffnest, bestätigst du, dass die angegebene E-Mail-Adresse korrekt und gültig ist.",
- "confirmemail_pending": "Es wurde dir bereits ein Bestätigungscode per E-Mail zugeschickt.\nWenn du dein Benutzerkonto erst vor kurzem erstellt hast, warte bitte noch ein paar Minuten auf das E-Mail, bevor du einen neuen Code anforderst.",
- "confirmemail_sent": "Das Bestätigungs-E-Mail wurde verschickt.",
- "confirmemail_sendfailed": "{{SITENAME}} konnte das Bestätigungs-E-Mail nicht an dich versenden.\nBitte prüfe die E-Mail-Adresse auf ungültige Zeichen.\n\nRückmeldung des Mailservers: $1",
- "confirmemail_body": "Hallo,\n\njemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat das Benutzerkonto «$2» bei {{SITENAME}} registriert.\n\nUm die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,\ndass dieses Benutzerkonto wirklich zu deiner E-Mail-Adresse und damit zu dir gehört, öffne bitte folgenden Link in deinem Browser:\n\n$3\n\nWenn du das genannte Benutzerkonto *nicht* registriert hast, folge diesem Link, um den Bestätigungsprozess abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.",
- "confirmemail_body_changed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat die E-Mail-Adresse des Benutzerkontos «$2» zu dieser Adresse bei {{SITENAME}} geändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich dir gehört,\nund um die E-Mail-Features bei {{SITENAME}} zu reaktivieren, öffne diesen Link in deinem Browser:\n\n$3\n\nFalls das Konto *nicht* dir gehört, folge diesem Link,\num die E-Mail-Bestätigung abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
- "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat die E-Mail-Adresse des Benutzerkontos «$2» auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu dir gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} wieder zu aktivieren, öffne bitte den folgenden Link in deinem Browser:\n\n$3\n\nFalls das Konto *nicht* zu dir gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
- "autosumm-replace": "Der Seiteninhalt wurde durch einen anderen Text ersetzt: «$1»",
- "autosumm-new": "Die Seite wurde neu angelegt: «$1»",
- "livepreview-error": "Verbindung nicht möglich: $1 «$2». Bitte die normale Vorschau benutzen.",
- "watchlistedit-normal-explain": "Dies sind die Einträge deiner Beobachtungsliste. Um Einträge zu entfernen, markiere die Kästchen neben den Einträgen und klicke am Ende der Seite auf «{{int:Watchlistedit-normal-submit}}». Du kannst deine Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
- "watchlistedit-raw-explain": "Dies sind die Einträge deiner Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.\nPro Zeile ist ein Eintrag erlaubt. Sobald du fertig bist, klicke auf «{{int:Watchlistedit-raw-submit}}».\nDu kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.",
- "unknown_extension_tag": "Unbekanntes Parsertag «$1»",
- "duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel «$2» überschreibt den vorher verwendeten Schlüssel «$1».",
- "version-license-info": "MediaWiki ist freie Software, d. h. sie kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nMediaWiki wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings OHNE JEGLICHE GARANTIE und sogar ohne die implizierte Garantie einer MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License''] sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [//www.gnu.org/licenses/old-licenses/gpl-2.0.html online gelesen] werden.",
- "fileduplicatesearch-info": "$1 × $2 Pixel<br />Dateigrösse: $3<br />MIME-Typ: $4",
- "fileduplicatesearch-result-1": "Die Datei «$1» hat keine identischen Duplikate.",
- "fileduplicatesearch-result-n": "Die Datei «$1» hat {{PLURAL:$2|ein identisches Duplikat|$2 identische Duplikate}}.",
- "fileduplicatesearch-noresults": "Es wurde keine Datei namens «$1» gefunden.",
- "external_image_whitelist": " #Diese Zeile nicht verändern.<pre>\n#Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.\n#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.\n#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.\n#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.\n#Es wird nicht zwischen Gross- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.</pre>",
- "feedback-bugornote": "Sofern Du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].\nAnderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kommentar wird, zusammen mit deinem Benutzernamen und der Version des von Dir verwendeten Webbrowsers sowie Betriebssystems, auf der Seite «[$3 $2]» hinzugefügt.",
- "feedback-thanks": "Vielen Dank. Deine Rückmeldung wurde auf der Seite «[$2 $1]» gespeichert.",
- "api-error-file-too-large": "Die hochgeladene Datei war zu gross.",
- "api-error-hookaborted": "Die von dir vorgesehene Anpassung kann nicht durchgeführt werden (Unterbruch durch eine Programmschnittstelle).",
- "api-error-unknown-code": "Unbekannter Fehler: «$1»",
- "api-error-unknown-warning": "Unbekannte Warnung: «$1»",
- "api-error-unknownerror": "Unbekannter Fehler: «$1»"
+ "@metadata": {
+ "authors": [
+ "Filzstift",
+ "Geitost",
+ "Ianusius",
+ "Kghbln",
+ "MichaelFrey",
+ "SVG",
+ "The Evil IP address",
+ "Umherirrender",
+ "Das Schäfchen"
+ ]
+ },
+ "tog-hideminor": "Kleine Änderungen in den «Letzten Änderungen» ausblenden",
+ "tog-hidepatrolled": "Kontrollierte Änderungen in den «Letzten Änderungen» ausblenden",
+ "tog-newpageshidepatrolled": "Kontrollierte Seiten bei den «Neuen Seiten» ausblenden",
+ "tog-usenewrc": "Seitenbezogene Gruppierung in den «Letzten Änderungen» und auf der Beobachtungsliste",
+ "tog-minordefault": "Eigene Änderungen standardmässig als minim markieren",
+ "category_header": "Seiten in der Kategorie «$1»",
+ "category-media-header": "Medien in der Kategorie «$1»",
+ "badaccess-groups": "Diese Aktion ist auf Benutzer beschränkt, die {{PLURAL:$2|der Gruppe|einer der Gruppen}} «$1» angehören.",
+ "retrievedfrom": "Von «$1»",
+ "site-atom-feed": "Atom-Feed für «$1»",
+ "page-rss-feed": "RSS-Feed für «$1»",
+ "page-atom-feed": "Atom-Feed für «$1»",
+ "missing-article": "Der Text von «$1» $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht zutrifft, hast du eventuell einen Fehler in der Software gefunden. Bitte melde dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.",
+ "filecopyerror": "Die Datei «$1» konnte nicht nach «$2» kopiert werden.",
+ "filerenameerror": "Die Datei «$1» konnte nicht nach «$2» umbenannt werden.",
+ "filedeleteerror": "Die Datei «$1» konnte nicht gelöscht werden.",
+ "directorycreateerror": "Das Verzeichnis «$1» konnte nicht angelegt werden.",
+ "filenotfound": "Die Datei «$1» wurde nicht gefunden.",
+ "unexpected": "Unerwarteter Wert: «$1» = «$2»",
+ "cannotdelete": "Die Seite oder Datei «$1» kann nicht gelöscht werden.\nMöglicherweise wurde sie bereits von jemand anderem gelöscht.",
+ "cannotdelete-title": "Seite «$1» kann nicht gelöscht werden",
+ "actionthrottledtext": "Im Rahmen einer Anti-Spam-Massnahme oder aufgrund eines Missbrauchsfilters kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze hast du überschritten.\nBitte versuche es in ein paar Minuten erneut.",
+ "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+ "titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung ''«$2»'' eingerichtet.",
+ "filereadonlyerror": "Die Datei «$1» kann nicht verändert werden, da auf das Dateirepositorium «$2» nur Lesezugriff möglich ist.\n\nDer Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: «$3».",
+ "createacct-realname": "Richtiger Name (optional)",
+ "loginsuccess": "Du bist jetzt als «$1» bei {{SITENAME}} angemeldet.",
+ "nosuchuser": "Der Benutzername «$1» existiert nicht.\nÜberprüfe die Schreibweise (Gross-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melde dich als neuer Benutzer an]].",
+ "nosuchusershort": "Der Benutzername «$1» ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
+ "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer «$2» lautet nun: $3\n\nFalls du dies wirklich gewünscht hast, solltest du dich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignoriere dieses E-Mail, falls du es nicht selbst angefordert hast. Das alte Passwort bleibt weiterhin gültig.",
+ "noemail": "{{GENDER:$1|Benutzer|Benutzerin|Benutzer}} «$1» hat keine E-Mail-Adresse angegeben.",
+ "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer «$1» gesandt.\nBitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt weiterhin gültig.",
+ "eauthentsent": "Ein Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor ein E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolge die Hinweise im Bestätigungs-E-Mail.",
+ "throttled-mailpassword": "Es wurde innerhalb der letzten {{PLURAL:$1|Stunde|$1 Stunden}} bereits ein Passwortzurücksetzungs-E-Mail angefordert. Um einen Missbrauch der Funktion zu verhindern, kann nur {{PLURAL:$1|einmal pro Stunde|alle $1 Stunden}} ein Passwortzurücksetzungs-E-Mail angefordert werden.",
+ "mailerror": "Fehler beim Senden des E-Mails: $1",
+ "createaccount-text": "Es wurde für dich ein Benutzerkonto «$2» auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für «$2» ist «$3». Du solltest dich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.",
+ "createacct-another-realname-tip": "Der richtige Name ist optional.\nWenn du ihn angibst, wird er für die Zuordnung der Beiträge verwendet.",
+ "user-mail-no-addy": "Versuchte, ein E-Mail ohne Angabe einer E-Mail-Adresse zu versenden",
+ "user-mail-no-body": "Es wurde versucht, ein E-Mail mit einem leeren oder zu kurzen Textkörper zu versenden.",
+ "resetpass_announce": "Um die Anmeldung abzuschliessen, musst du ein neues Passwort festlegen.",
+ "passwordreset-emailsent": "Ein Passwortzurücksetzungs-E-Mail wurde versandt.",
+ "passwordreset-emailsent-capture": "Ein Passwortzurücksetzungs-E-Mail wurde versandt, das unten angezeigt wird.",
+ "passwordreset-emailerror-capture": "Die unten angezeigte Passwortzurücksetzungs-E-Mail wurde generiert, allerdings ist der Versand an {{GENDER:$2|den Benutzer|die Benutzerin}} gescheitert: $1",
+ "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
+ "missingcommentheader": "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf «{{int:savearticle}}» klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
+ "blockedtext": "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde von $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nDu kannst die «E-Mail an diesen Benutzer»-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\nDeine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
+ "autoblockedtext": "Deine IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nDu kannst die «E-Mail an diesen Benutzer»-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\n\nDeine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
+ "confirmedittext": "Du musst deine E-Mail-Adresse erst bestätigen, bevor du Bearbeitungen durchführen kannst. Bitte ergänze und bestätige dein E-Mail in den [[Special:Preferences|Einstellungen]].",
+ "accmailtext": "Ein zufällig generiertes Passwort für [[User talk:$1|$1]] wurde an $2 versandt. Es kann auf der Seite ''[[Special:ChangePassword|Passwort ändern]]'' nach der Anmeldung geändert werden.",
+ "userpage-userdoesnotexist": "Das Benutzerkonto «<nowiki>$1</nowiki>» ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
+ "userpage-userdoesnotexist-view": "Das Benutzerkonto «$1» ist nicht vorhanden.",
+ "clearyourcache": "'''Hinweis:''' Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Ctrl+F5'' oder ''Ctrl+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Ctrl+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Ctrl+F5'' drücken oder ''Ctrl'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
+ "usercssyoucanpreview": "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues CSS vor dem Speichern zu testen.",
+ "userjsyoucanpreview": "'''Tipp:''' Benutze den «{{int:showpreview}}»-Button, um dein neues JavaScript vor dem Speichern zu testen.",
+ "userinvalidcssjstitle": "'''Achtung:''' Die Benutzeroberfläche «$1» existiert nicht. Bedenke, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
+ "editing": "Bearbeiten von «$1»",
+ "creating": "Erstellen von «$1»",
+ "editingsection": "Bearbeiten von «$1» (Abschnitt)",
+ "editingcomment": "Bearbeiten von «$1» (Neuer Abschnitt)",
+ "explainconflict": "Jemand anders hat diese Seite geändert, nachdem du angefangen hast, sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält deine Änderungen.\nBitte füge deine Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn du auf «{{int:savearticle}}» klickst.",
+ "copyrightwarning": "'''Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nDu gibst uns hiermit deine Zusage, dass du den Text '''selbst verfasst''' hast, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der «$2» stehen (siehe $1 für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf «Seite speichern».</i>",
+ "longpageerror": "'''Fehler: Der Text, den du zu speichern versuchst, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobytes}} gross. Dies ist grösser als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobytes}}.'''\nEr kann nicht gespeichert werden.",
+ "post-expand-template-inclusion-warning": "Warnung: Die Grösse eingebundener Vorlagen ist zu gross, einige Vorlagen können nicht eingebunden werden.",
+ "post-expand-template-inclusion-category": "Seiten, in denen die maximale Grösse eingebundener Vorlagen überschritten ist",
+ "post-expand-template-argument-warning": "'''Warnung:''' Diese Seite enthält mindestens einen Parameter in einer Vorlage, der expandiert zu gross ist. Diese Parameter werden ignoriert.",
+ "histlegend": "Zur Anzeige der Änderungen einfach die zu vergleichenden Versionen auswählen und die Schaltfläche «{{int:compareselectedversions}}» klicken.<br />\n* ({{int:cur}}) = Unterschied zur aktuellen Version, ({{int:last}}) = Unterschied zur vorherigen Version\n* Uhrzeit/Datum = Version zu dieser Zeit, Benutzername/IP-Adresse des Bearbeiters, {{int:minoreditletter}} = Kleine Änderung",
+ "revdelete-show-file-confirm": "Bist du sicher, dass du die gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2 um $3 Uhr ansehen willst?",
+ "revdelete-show-no-access": "Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
+ "revdelete-modify-no-access": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als «eingeschränkt» markiert.\nDu hast darauf keinen Zugriff.",
+ "mergehistory-merge": "Die folgenden Versionen von «[[:$1]]» können nach «[[:$2]]» übertragen werden. Markiere die Version, bis zu der (einschliesslich) die Versionen übertragen werden sollen. Bitte beachte, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.",
+ "mergehistory-success": "{{PLURAL:$3|1 Version|$3 Versionen}} von «[[:$1]]» erfolgreich nach «[[:$2]]» vereinigt.",
+ "mergehistory-no-source": "Ursprungsseite «$1» ist nicht vorhanden.",
+ "mergehistory-no-destination": "Zielseite «$1» ist nicht vorhanden.",
+ "mergehistory-autocomment": "«[[:$1]]» vereinigt nach «[[:$2]]»",
+ "mergehistory-comment": "«[[:$1]]» vereinigt nach «[[:$2]]»: $3",
+ "history-title": "$1: Versionsgeschichte",
+ "searchresults-title": "Suchergebnisse für «$1»",
+ "searchmenu-exists": "'''Es gibt eine Seite, die den Namen «[[:$1]]» hat.'''",
+ "searchmenu-new": "<strong>Erstelle die Seite «[[:$1]]» in diesem Wiki.</strong> {{PLURAL:$2|0=|Siehe auch die über deine Suche gefundene Seite.|Siehe auch die gefundenen Suchergebnisse.}}",
+ "search-redirect": "(Weiterleitung von «$1»)",
+ "search-suggest": "Meintest du «$1»?",
+ "prefs-watchlist-days": "Anzahl der Tage, die die Beobachtungsliste standardmässig umfassen soll:",
+ "prefs-watchlist-edits-max": "Maximal 1'000 Einträge",
+ "recentchangesdays": "Anzahl der Tage, die die Liste der «Letzten Änderungen» standardmässig umfassen soll:",
+ "recentchangescount": "Anzahl der standardmässig angezeigten Bearbeitungen:",
+ "yourrealname": "Richtiger Name:",
+ "prefs-help-signature": "Beiträge auf Diskussionsseiten sollten mit «<nowiki>~~~~</nowiki>» signiert werden, was dann in die Signatur mit Zeitstempel umgewandelt wird.",
+ "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann dein richtiger Name deinen Beiträgen zugeordnet werden.",
+ "right-createpage": "Seiten erstellen (ausser Diskussionsseiten)",
+ "right-nominornewtalk": "Kleine Bearbeitungen an Diskussionsseiten führen zu keiner «Neue Nachrichten»-Anzeige",
+ "right-bigdelete": "Seiten mit grosser Versionsgeschichte löschen",
+ "right-viewmyprivateinfo": "Eigene private Daten ansehen (beispielsweise E-Mail-Adresse, richtiger Name)",
+ "right-editmyprivateinfo": "Eigene private Daten bearbeiten (beispielsweise E-Mail-Adresse, richtiger Name)",
+ "right-override-export-depth": "Exportiere Seiten einschliesslich verlinkter Seiten bis zu einer Tiefe von 5",
+ "right-passwordreset": "Passwort eines Benutzers zurücksetzen und das dazu verschickte E-Mail einsehen",
+ "recentchanges-label-plusminus": "Die Änderung der Seitengrösse in Bytes",
+ "rc_categories": "Nur Seiten aus den Kategorien (getrennt mit «|»):",
+ "rc-old-title": "ursprünglich erstellt als «$1»",
+ "recentchangeslinked-title": "Änderungen an Seiten, die von «$1» verlinkt sind",
+ "uploadtext": "Benutze dieses Formular, um neue Dateien hochzuladen.\n\nGehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit «Alternativer Text» als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
+ "illegalfilename": "Der Dateiname «$1» enthält mindestens ein nicht erlaubtes Zeichen. Bitte benenne die Datei um und versuche, sie erneut hochzuladen.",
+ "filename-toolong": "Dateinamen dürfen nicht grösser als 240 Byte sein.",
+ "badfilename": "Der Dateiname wurde in «$1» geändert.",
+ "filetype-mime-mismatch": "Dateierweiterung «.$1» stimmt nicht mit dem MIME-Typ ($2) überein.",
+ "filetype-badmime": "Dateien mit dem MIME-Typ «$1» dürfen nicht hochgeladen werden.",
+ "filetype-bad-ie-mime": "Diese Datei kann nicht hochgeladen werden, da der Internet Explorer sie als «$1» erkennt, welcher ein nicht erlaubter potentiell gefährlicher Dateityp ist.",
+ "filetype-unwanted-type": "'''«.$1»''' ist ein unerwünschtes Dateiformat. Erlaubt {{PLURAL:$3|ist das Dateiformat|sind die Dateiformate}}: $2.",
+ "filetype-banned-type": "'''«.$1»''' {{PLURAL:$4|ist ein nicht erlaubter Dateityp|sind nicht erlaubte Dateitypen}}.\n{{PLURAL:$3|Erlaubter Dateityp ist|Erlaubte Dateitypen sind}} $2.",
+ "filetype-missing": "Die hochzuladende Datei hat keine Erweiterung (z. B. «.jpg»).",
+ "file-too-large": "Die hochgeladene Datei war zu gross.",
+ "large-file": "Die Dateigrösse sollte nach Möglichkeit $1 nicht überschreiten. Diese Datei ist $2 gross.",
+ "largefileserver": "Die Datei ist grösser als die vom Server eingestellte Maximalgrösse.",
+ "fileexists-extension": "Eine Datei mit ähnlichem Namen existiert bereits: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der vorhandenen Datei: <strong>[[:$2]]</strong>\nNur die Dateiendung unterscheidet sich in Gross-/Kleinschreibung. Bitte prüfe, ob die Dateien inhaltlich identisch sind.",
+ "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Grösse ''(thumbnail)'' zu handeln. [[$1|thumb]]\nBitte prüfe die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgrösse handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
+ "file-thumbnail-no": "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Grösse ''(thumbnail)'' hin.\nBitte prüfe, ob du das Bild in voller Auflösung vorliegen hast und lade dieses unter dem Originalnamen hoch.",
+ "upload-maxfilesize": "Maximale Dateigrösse: $1",
+ "filename-bad-prefix": "Der Dateiname beginnt mit '''«$1»'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.\nBitte gib der Datei einen Namen, der den Inhalt besser beschreibt.",
+ "backend-fail-maxsize": "Die Datei $1 konnte nicht gespeichert werden, da sie grösser als {{PLURAL:$2|ein Byte|$2 Bytes}} ist.",
+ "backend-fail-readonly": "Das Speicher-Backend «$1» befindet sich derzeit im Lesemodus. Der angegebene Grund lautet: «$2»",
+ "backend-fail-synced": "Die Datei «$1» befindet sich, innerhalb des internen Speicher-Backends, in einem inkonsistenten Zustand.",
+ "backend-fail-connect": "Es konnte keine Verbindung zum Speicher-Backend «$1» hergestellt werden.",
+ "backend-fail-internal": "Im Speicher-Backend «$1» ist ein unbekannter Fehler aufgetreten.",
+ "backend-fail-contenttype": "Der Inhaltstyp, der im Pfad «$1» zu speichernden Datei, konnte nicht bestimmt werden.",
+ "backend-fail-usable": "Die Datei «$1» konnte entweder aufgrund eines nicht vorhandenen Verzeichnisses oder wegen unzureichender Berechtigungen weder abgerufen noch gespeichert werden.",
+ "filejournal-fail-dbconnect": "Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends «$1» hergestellt werden.",
+ "filejournal-fail-dbquery": "Die Journaldatenbank des Speicher-Backends «$1» konnte nicht aktualisiert werden.",
+ "lockmanager-notlocked": "«$1» konnte nicht entsperrt werden, da keine Sperrung besteht.",
+ "lockmanager-fail-closelock": "Die Sperrdatei für «$1» konnte nicht geschlossen werden.",
+ "lockmanager-fail-deletelock": "Die Sperrdatei für «$1» konnte nicht gelöscht werden.",
+ "lockmanager-fail-acquirelock": "Die Sperre für «$1» konnte nicht abgerufen werden.",
+ "lockmanager-fail-openlock": "Die Sperrdatei für «$1» konnte nicht geöffnet werden.",
+ "lockmanager-fail-releaselock": "Die Sperre für «$1» konnte nicht freigegeben werden.",
+ "zip-bad": "Die Datei ist beschädigt oder eine aus anderweitigen Gründen nicht lesbare ZIP-Datei.\nSie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.",
+ "zip-unsupported": "Diese ZIP-Datei verfügt über Komprimierungseigenschaften, die nicht von MediaWiki unterstützt werden.\nSie kann daher keiner ordnungsgemässen Sicherheitsüberprüfung unterzogen werden.",
+ "img-auth-badtitle": "Aus «$1» kann kein gültiger Titel erstellt werden.",
+ "img-auth-nologinnWL": "Du bist nicht angemeldet und «$1» ist nicht in der weissen Liste.",
+ "img-auth-nofile": "Datei «$1» existiert nicht.",
+ "img-auth-isdir": "Du versuchst, auf ein Verzeichnis «$1» zuzugreifen.\nNur Dateizugriff ist erlaubt.",
+ "img-auth-streaming": "Lade «$1».",
+ "img-auth-noread": "Benutzer hat keine Berechtigung, «$1» zu lesen.",
+ "http-invalid-scheme": "URLs mit dem Schema «$1» werden nicht unterstützt",
+ "listfiles-summary": "Diese Spezialseite listet alle hochgeladenen Dateien auf.",
+ "listfiles_size": "Grösse",
+ "filehist-dimensions": "Masse",
+ "filehist-filesize": "Dateigrösse",
+ "filerevert": "Zurücksetzen von «$1»",
+ "filedelete": "Lösche «$1»",
+ "filedelete-intro": "Du löschst die Datei '''«[[Media:$1|$1]]»''' inklusive ihrer Versionsgeschichte.",
+ "filedelete-intro-old": "Du löschst von der Datei '''«[[Media:$1|$1]]»''' die [$4 Version vom $2, $3 Uhr].",
+ "filedelete-success": "'''«$1»''' wurde gelöscht.",
+ "filedelete-success-old": "Von der Datei '''«[[Media:$1|$1]]»''' wurde die Version vom $2, $3 Uhr gelöscht.",
+ "filedelete-nofile": "'''«$1»''' ist nicht vorhanden.",
+ "filedelete-nofile-old": "Es gibt von '''«$1»''' keine archivierte Version mit den angegebenen Attributen.",
+ "randompage-nopages": "Es sind keine Seiten {{PLURAL:$2|im folgenden Namensraum|in den folgenden Namensräumen}} enthalten: «$1»",
+ "randomredirect-nopages": "Im Namensraum «$1» sind keine Weiterleitungen vorhanden.",
+ "alllogstext": "Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.\nDie Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden (Gross-/Kleinschreibung muss beachtet werden).",
+ "allpages-bad-ns": "Der Namensraum «$1» ist in {{SITENAME}} nicht vorhanden.",
+ "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.ch</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. «*.org». angegeben werden. <br />{{PLURAL:$2|Unterstütztes Protokoll|Unterstützte Protokolle}}: <code>$1</code> (Standard ist http, falls kein Protokoll angegeben ist.)",
+ "post-expand-template-inclusion-category-desc": "Nach dem Expandieren aller Vorlagen ist die Seitengrösse grösser als <code>$wgMaxArticleSize</code>, sodass einige Vorlagen nicht expandiert werden.",
+ "post-expand-template-argument-category-desc": "Nach dem Expandieren eines Vorlagenargumentes (etwas in dreifach geschweiften Klammern, z.&nbsp;B. <code>{{{Foo}}})</code> ist die Seite grösser als <code>$wgMaxArticleSize</code>.",
+ "hidden-category-category-desc": "Dies ist eine Kategorie mit <code><nowiki>__HIDDENCAT__</nowiki></code>, die standardmässig nicht auf Seiten im Kategorienbereich angezeigt wird.",
+ "emailpagetext": "Du kannst {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular ein E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} dir direkt antworten kann.",
+ "defemailsubject": "{{SITENAME}} - E-Mail von Benutzer «$1»",
+ "emailnotarget": "Nicht vorhandener oder ungültiger Benutzername für den Empfang eines E-Mails.",
+ "emailccme": "Sende eine Kopie des E-Mails an mich",
+ "emailsenttext": "Dein E-Mail wurde verschickt.",
+ "emailuserfooter": "Dieses E-Mail wurde von {{SITENAME}}-Benutzer «$1» an «$2» gesendet.",
+ "addedwatchtext": "Die Seite «[[:$1]]» wurde zu deiner [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\nSpätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werden dort gelistet.",
+ "removedwatchtext": "Die Seite «[[:$1]]» wurde von deiner [[Special:Watchlist|Beobachtungsliste]] entfernt.",
+ "watcherrortext": "Beim Ändern der Beobachtungslisteneinstellungen für «$1» ist ein Fehler aufgetreten.",
+ "excontent": "Inhalt war: «$1»",
+ "excontentauthor": "Inhalt war: «$1» (einziger Bearbeiter: [[Special:Contributions/$2|$2]])",
+ "exbeforeblank": "Inhalt vor dem Leeren der Seite: «$1»",
+ "delete-confirm": "Löschen von «$1»",
+ "deletedtext": "«$1» wurde gelöscht. Im $2 findest du eine Liste der letzten Löschungen.",
+ "editcomment": "Die Änderungszusammenfassung lautet: ''«$1»''.",
+ "protectedarticle": "schützte «[[$1]]»",
+ "modifiedarticleprotection": "änderte den Schutz von «[[$1]]»",
+ "unprotectedarticle": "hob den Schutz von «[[$1]]» auf",
+ "movedarticleprotection": "übertrug den Seitenschutz von «[[$2]]» auf «[[$1]]»",
+ "protect-title": "Schutz ändern von «$1»",
+ "protect-title-notallowed": "Schutz ansehen von «$1»",
+ "protect-text": "Hier kannst du den Schutzstatus der Seite «$1» einsehen und ändern.",
+ "protect-locked-blocked": "Du kannst den Seitenschutz nicht ändern, da dein Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
+ "protect-locked-dblock": "Die Datenbank ist gesperrt, der Seitenschutz kann daher nicht geändert werden. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''«$1»:'''",
+ "protect-locked-access": "Dein Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen der Seite '''«$1»:'''",
+ "protect-fallback": "Nur Benutzern mit der «$1»-Berechtigung erlauben.",
+ "minimum-size": "Mindestgrösse",
+ "maximum-size": "Maximalgrösse:",
+ "undeleteextrahelp": "* Um die Seite mitsamt aller Versionen wiederherzustellen, wähle keine Version aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».\n* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wähle die betreffenden Versionen einzeln aus, gib eine Begründung an und klicke dann auf «{{int:undeletebtn}}».",
+ "undeletedpage": "'''«$1»''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] findest du eine Übersicht der gelöschten und wiederhergestellten Seiten.",
+ "undelete-cleanup-error": "Fehler beim Löschen der unbenutzten Archiv-Version «$1».",
+ "undelete-show-file-confirm": "Bist du sicher, dass du eine gelöschte Version der Datei «<nowiki>$1</nowiki>» vom $2, $3 Uhr sehen willst?",
+ "contributions-title": "Benutzerbeiträge von «$1»",
+ "whatlinkshere-title": "Seiten, die auf «$1» verlinken",
+ "linkshere": "Die folgenden Seiten verlinken auf '''«[[:$1]]»''':",
+ "nolinkshere": "Keine Seite verlinkt auf '''«[[:$1]]»'''.",
+ "nolinkshere-ns": "Keine Seite verlinkt auf '''«[[:$1]]»''' im gewählten Namensraum.",
+ "ipb-confirmhideuser": "Du bist gerade dabei, einen Benutzer im Modus «Benutzer verstecken» zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?",
+ "ipb-unblock-addr": "«$1» freigeben",
+ "ipb-blocklist-contribs": "Benutzerbeiträge von «$1»",
+ "autoblocker": "Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt.\nGrund der Benutzersperre: «$2»",
+ "blocklogentry": "sperrte «[[$1]]» für den Zeitraum: $2 $3",
+ "reblock-logentry": "änderte die Sperre von «[[$1]]» für den Zeitraum: $2 $3",
+ "unblocklogentry": "hob die Sperre von «$1» auf",
+ "ipb_already_blocked": "«$1» wurde bereits gesperrt.",
+ "ipb-needreblock": "«$1» ist bereits gesperrt. Möchtest du die Sperrparameter ändern?",
+ "ip_range_toolarge": "Adressbereiche, die grösser als /$1 sind, sind nicht erlaubt.",
+ "cant-see-hidden-user": "Der Benutzer, den du versuchst zu sperren, wurde bereits gesperrt und verborgen. Da du das «hideuser»-Recht nicht hast, kannst du die Benutzersperre nicht sehen und nicht bearbeiten.",
+ "move-page": "Verschieben von «$1»",
+ "movepage-moved": "'''Die Seite «$1» wurde nach «$2» verschoben.'''",
+ "movepage-page-exists": "Die Seite «$1» ist bereits vorhanden und kann nicht automatisch überschrieben werden.",
+ "movepage-page-moved": "Die Seite «$1» wurde nach «$2» verschoben.",
+ "movepage-page-unmoved": "Die Seite «$1» konnte nicht nach «$2» verschoben werden.",
+ "delete_and_move_text": "== Löschung erforderlich ==\n\nDie Seite «[[:$1]]» existiert bereits. Möchtest du diese löschen, um die Seite verschieben zu können?",
+ "delete_and_move_reason": "gelöscht, um Platz für die Verschiebung von «[[$1]]» zu machen",
+ "immobile-source-namespace": "Seiten des «$1»-Namensraums können nicht verschoben werden",
+ "immobile-target-namespace": "Seiten können nicht in den «$1»-Namensraum verschoben werden",
+ "thumbnail-more": "vergrössern",
+ "djvu_page_error": "DjVu-Seite ausserhalb des Seitenbereichs",
+ "import-interwiki-templates": "Alle Vorlagen einschliessen",
+ "importuploaderrorsize": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei ist grösser als die maximal erlaubte Dateigrösse.",
+ "import-error-edit": "Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu bearbeiten.",
+ "import-error-create": "Die Seite «$1» wurde nicht importiert, da du nicht berechtigt bist, sie zu erstellen.",
+ "import-error-interwiki": "Die Seite «$1» wurde nicht importiert, da deren Name für externe Links (Interwiki) reserviert ist.",
+ "import-error-special": "Die Seite «$1» wurde nicht importiert, da sie zu einem besonderen Namensraum gehört, in dem keine Seiten möglich sind.",
+ "import-error-invalid": "Seite «$1» wurde nicht importiert, da deren Name ungültig ist.",
+ "import-logentry-upload": "importierte «[[$1]]» von einer Datei",
+ "import-logentry-interwiki": "importierte «$1» (Transwiki)",
+ "javascripttest-pagetext-unknownframework": "Unbekanntes Framework «$1».",
+ "tooltip-t-emailuser": "Ein E-Mail an diesen Benutzer senden",
+ "pageinfo-title": "Informationen zu «$1»",
+ "markedaspatrollederror": "Markierung als «kontrolliert» nicht möglich.",
+ "filedelete-missing": "Die Datei «$1» kann nicht gelöscht werden, da sie nicht vorhanden ist.",
+ "filedelete-old-unregistered": "Die angegebene Datei-Version «$1» ist nicht in der Datenbank vorhanden.",
+ "filedelete-current-unregistered": "Die angegebene Datei «$1» ist nicht in der Datenbank vorhanden.",
+ "filedelete-archive-read-only": "Das Archiv-Verzeichnis «$1» ist für den Webserver nicht beschreibbar.",
+ "imagemaxsize": "Maximale Bildgrösse:<br />''(für Dateibeschreibungsseiten)''",
+ "thumbsize": "Standardgrösse der Vorschaubilder:",
+ "file-info": "Dateigrösse: $1, MIME-Typ: $2",
+ "file-info-size": "$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4",
+ "file-info-size-pages": "$1 × $2 Pixel, Dateigrösse: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Seite| Seiten}}",
+ "svg-long-desc": "SVG-Datei, Basisgrösse: $1 × $2 Pixel, Dateigrösse: $3",
+ "show-big-image-preview": "Grösse dieser Vorschau: $1.",
+ "metadata-fields": "Die folgenden Felder der EXIF-Metadaten, die in diesem MediaWiki-Systemtext angegeben sind, werden auf Bildbeschreibungsseiten mit eingeklappter Metadatentabelle angezeigt.\nWeitere werden standardmässig nicht angezeigt.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "exif-jpeginterchangeformatlength": "Grösse der JPEG-Daten in Bytes",
+ "exif-referenceblackwhite": "Schwarz/Weiss-Referenzpunkte",
+ "exif-maxaperturevalue": "Grösste Blende",
+ "exif-whitebalance": "Weissabgleich",
+ "exif-gpsdop": "Masspräzision",
+ "exif-lightsource-13": "Tagesweiss fluoreszierend (N 4600–5400 K)",
+ "exif-lightsource-14": "Kaltweiss fluoreszierend (W 3900–4500 K)",
+ "exif-lightsource-15": "Weiss fluoreszierend (WW 3200–3700 K)",
+ "exif-isospeedratings-overflow": "Grösser als 65535",
+ "confirmemail_text": "{{SITENAME}} erfordert, dass du deine E-Mail-Adresse bestätigst (authentifizierst), bevor du die erweiterten E-Mail-Funktionen benutzen kannst. Klicke bitte auf die unten stehende, mit «Bestätigungscode zuschicken» beschriftete Schaltfläche, damit ein automatisch erstelltes E-Mail an die angegebene Adresse geschickt wird. Dieses E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem du diese Webseite in deinem Webbrowser öffnest, bestätigst du, dass die angegebene E-Mail-Adresse korrekt und gültig ist.",
+ "confirmemail_pending": "Es wurde dir bereits ein Bestätigungscode per E-Mail zugeschickt.\nWenn du dein Benutzerkonto erst vor kurzem erstellt hast, warte bitte noch ein paar Minuten auf das E-Mail, bevor du einen neuen Code anforderst.",
+ "confirmemail_sent": "Das Bestätigungs-E-Mail wurde verschickt.",
+ "confirmemail_sendfailed": "{{SITENAME}} konnte das Bestätigungs-E-Mail nicht an dich versenden.\nBitte prüfe die E-Mail-Adresse auf ungültige Zeichen.\n\nRückmeldung des Mailservers: $1",
+ "confirmemail_body": "Hallo,\n\njemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat das Benutzerkonto «$2» bei {{SITENAME}} registriert.\n\nUm die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,\ndass dieses Benutzerkonto wirklich zu deiner E-Mail-Adresse und damit zu dir gehört, öffne bitte folgenden Link in deinem Browser:\n\n$3\n\nWenn du das genannte Benutzerkonto *nicht* registriert hast, folge diesem Link, um den Bestätigungsprozess abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.",
+ "confirmemail_body_changed": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat die E-Mail-Adresse des Benutzerkontos «$2» zu dieser Adresse bei {{SITENAME}} geändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich dir gehört,\nund um die E-Mail-Features bei {{SITENAME}} zu reaktivieren, öffne diesen Link in deinem Browser:\n\n$3\n\nFalls das Konto *nicht* dir gehört, folge diesem Link,\num die E-Mail-Bestätigung abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
+ "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst,\nhat die E-Mail-Adresse des Benutzerkontos «$2» auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu dir gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} wieder zu aktivieren, öffne bitte den folgenden Link in deinem Browser:\n\n$3\n\nFalls das Konto *nicht* zu dir gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
+ "autosumm-replace": "Der Seiteninhalt wurde durch einen anderen Text ersetzt: «$1»",
+ "autosumm-new": "Die Seite wurde neu angelegt: «$1»",
+ "watchlistedit-normal-explain": "Dies sind die Einträge deiner Beobachtungsliste. Um Einträge zu entfernen, markiere die Kästchen neben den Einträgen und klicke am Ende der Seite auf «{{int:Watchlistedit-normal-submit}}». Du kannst deine Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
+ "watchlistedit-raw-explain": "Dies sind die Einträge deiner Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.\nPro Zeile ist ein Eintrag erlaubt. Sobald du fertig bist, klicke auf «{{int:Watchlistedit-raw-submit}}».\nDu kannst auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.",
+ "unknown_extension_tag": "Unbekanntes Parsertag «$1»",
+ "duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel «$2» überschreibt den vorher verwendeten Schlüssel «$1».",
+ "version-license-info": "MediaWiki ist freie Software, d. h. sie kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nMediaWiki wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings OHNE JEGLICHE GARANTIE und sogar ohne die implizierte Garantie einer MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie der ''GNU General Public License''] sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [//www.gnu.org/licenses/old-licenses/gpl-2.0.html online gelesen] werden.",
+ "fileduplicatesearch-info": "$1 × $2 Pixel<br />Dateigrösse: $3<br />MIME-Typ: $4",
+ "fileduplicatesearch-result-1": "Die Datei «$1» hat keine identischen Duplikate.",
+ "fileduplicatesearch-result-n": "Die Datei «$1» hat {{PLURAL:$2|ein identisches Duplikat|$2 identische Duplikate}}.",
+ "fileduplicatesearch-noresults": "Es wurde keine Datei namens «$1» gefunden.",
+ "external_image_whitelist": " #Diese Zeile nicht verändern.<pre>\n#Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.\n#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.\n#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.\n#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.\n#Es wird nicht zwischen Gross- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.</pre>",
+ "feedback-bugornote": "Sofern Du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].\nAnderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kommentar wird, zusammen mit deinem Benutzernamen und der Version des von Dir verwendeten Webbrowsers sowie Betriebssystems, auf der Seite «[$3 $2]» hinzugefügt.",
+ "feedback-thanks": "Vielen Dank. Deine Rückmeldung wurde auf der Seite «[$2 $1]» gespeichert.",
+ "api-error-file-too-large": "Die hochgeladene Datei war zu gross.",
+ "api-error-hookaborted": "Die von dir vorgesehene Anpassung kann nicht durchgeführt werden (Unterbruch durch eine Programmschnittstelle).",
+ "api-error-unknown-code": "Unbekannter Fehler: «$1»",
+ "api-error-unknown-warning": "Unbekannte Warnung: «$1»",
+ "api-error-unknownerror": "Unbekannter Fehler: «$1»"
}
diff --git a/languages/i18n/de-formal.json b/languages/i18n/de-formal.json
index 4248cbe8..6314a700 100644
--- a/languages/i18n/de-formal.json
+++ b/languages/i18n/de-formal.json
@@ -1,316 +1,327 @@
{
- "@metadata": {
- "authors": [
- "*Surak*",
- "ChrisiPK",
- "Das Schäfchen",
- "Filzstift",
- "Geitost",
- "Imre",
- "Jimmy Collins <jimmy.collins@web.de>",
- "Kghbln",
- "Leithian",
- "Merlissimo",
- "MichaelFrey",
- "Michawiki",
- "Pill",
- "Raimond Spekking (Raymond) <raimond.spekking@gmail.com> since January 2007",
- "SVG",
- "Se4598",
- "The Evil IP address",
- "Tim Bartel (avatar) <wikipedia@computerkultur.org> formal addressing",
- "Tischbeinahe",
- "Umherirrender",
- "Urhixidur"
- ]
- },
- "tog-enotifrevealaddr": "Ihre E-Mail-Adresse in Benachrichtigungs-E-Mails anzeigen",
- "view-pool-error": "Entschuldigung, die Server sind im Moment überlastet.\nZu viele Benutzer versuchen, diese Seite zu besuchen.\nBitte warten Sie einige Minuten, bevor Sie es noch einmal versuchen.\n\n$1",
- "badaccess-group0": "Sie haben nicht die erforderlichen Benutzerrechte für diese Aktion.",
- "youhavenewmessages": "Sie haben $1 ($2).",
- "youhavenewmessagesmulti": "Sie haben neue Nachrichten: $1",
- "enterlockreason": "Bitte geben Sie einen Grund ein, warum die Datenbank gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung",
- "readonlytext": "Die Datenbank ist vorübergehend für Neueinträge und Änderungen gesperrt. Bitte versuchen Sie es später noch einmal.\n\nGrund der Sperrung: $1",
- "missing-article": "Der Text von „$1“ $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht der Fall ist, haben Sie eventuell einen Fehler in der Software gefunden. Bitte melden Sie dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.",
- "actionthrottledtext": "Im Rahmen einer Anti-Spam-Maßnahme kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze haben Sie überschritten.\nBitte versuchen Sie es in ein paar Minuten erneut.",
- "viewsourcetext": "Sie können den Quelltext dieser Seite betrachten und kopieren:",
- "viewyourtext": "Sie können den Quelltext '''Ihrer Bearbeitung''' dieser Seite betrachten und kopieren:",
- "protectedinterface": "Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.\nNutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
- "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
- "namespaceprotected": "Sie haben nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
- "customcssprotected": "Sie haben nicht die Berechtigung diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.",
- "customjsprotected": "Sie haben nicht die Berechtigung, diese JavaScript enthaltende Seite zu bearbeiten, da es sich hierbei um die persönlichen Einstellungen eines anderen Benutzers handelt.",
- "exception-nologin-text": "Sie müssen sich [[Special:Userlogin|anmelden]], um auf diese Seite oder Aktion zugreifen zu können.",
- "logouttext": "'''Sie sind nun abgemeldet.'''\n\nBeachten Sie, dass einige Seiten noch anzeigen können, dass Sie angemeldet sind, solange Sie nicht Ihren Browsercache geleert haben.",
- "welcomecreation-msg": "Ihr Benutzerkonto wurde erstellt.\nVergessen Sie nicht, Ihre [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.",
- "yourdomainname": "Ihre Domain:",
- "password-change-forbidden": "Sie können auf diesem Wiki keine Passwörter ändern.",
- "externaldberror": "Entweder es liegt ein Fehler bei der externen Authentifizierung vor oder Sie dürfen Ihr externes Benutzerkonto nicht aktualisieren.",
- "nologin": "Sie haben kein Benutzerkonto? $1.",
- "gotaccount": "Haben Sie bereits ein Benutzerkonto? '''$1'''.",
- "userlogin-loggedin": "Sie sind bereits als {{GENDER:$1|$1}} angemeldet.\nBenutzen Sie das unten stehende Formular, um sich unter einem anderen Benutzernamen anzumelden.",
- "userexists": "Dieser Benutzername ist schon vergeben.\nBitte wählen Sie einen anderen.",
- "nocookiesnew": "Der Benutzerzugang wurde erstellt, aber Sie sind nicht angemeldet.\n{{SITENAME}} benötigt für diese Funktion Cookies, bitte aktivieren Sie diese und melden sich dann mit Ihrem neuen Benutzernamen und dem zugehörigen Passwort an.",
- "nocookieslogin": "{{SITENAME}} benutzt Cookies zur Anmeldung der Benutzer.\nSie haben Cookies deaktiviert, bitte aktivieren Sie diese und versuchen Sie es erneut.",
- "noname": "Sie müssen einen gültigen Benutzernamen angeben.",
- "loginsuccess": "Sie sind jetzt als „$1“ bei {{SITENAME}} angemeldet.",
- "nosuchuser": "Der Benutzername „$1“ existiert nicht.\nÜberprüfen Sie die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melden Sie sich als neuer Benutzer an]].",
- "nosuchusershort": "Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfen Sie die Schreibweise.",
- "nouserspecified": "Bitte geben Sie einen Benutzernamen an.",
- "wrongpassword": "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
- "wrongpasswordempty": "Es wurde kein Passwort eingegeben. Bitte versuchen Sie es erneut.",
- "password-name-match": "Ihr Passwort muss sich von Ihrem Benutzernamen unterscheiden.",
- "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer „$2“ lautet nun: $3\n\nFalls Sie dies wirklich gewünscht haben, sollten Sie sich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignorieren Sie diese E-Mail, falls Sie sie nicht selbst angefordert haben. Das alte Passwort bleibt weiterhin gültig.",
- "noemailcreate": "Sie müssen eine gültige E-Mail-Adresse angeben",
- "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.\nBitte melden Sie sich damit an, sobald sie es erhalten haben. Das alte Passwort bleibt weiterhin gültig.",
- "blocked-mailpassword": "Die von Ihnen verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.",
- "eauthentsent": "Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor eine E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolgen Sie die Hinweise in der Bestätigungs-E-Mail.",
- "acct_creation_throttle_hit": "Besucher dieses Wikis, die Ihre IP-Adresse verwenden, haben innerhalb des letzten Tages {{PLURAL:$1|1 Benutzerkonto|$1 Benutzerkonten}} erstellt, was die maximal erlaubte Anzahl in dieser Zeitperiode ist.\n\nBesucher, die diese IP-Adresse verwenden, können momentan keine Benutzerkonten mehr erstellen.",
- "emailauthenticated": "Ihre E-Mail-Adresse wurde am $2 um $3 Uhr bestätigt.",
- "emailnotauthenticated": "Ihre E-Mail-Adresse ist noch nicht bestätigt. Die folgenden E-Mail-Funktionen stehen erst nach erfolgreicher Bestätigung zur Verfügung.",
- "noemailprefs": "Geben Sie eine E-Mail-Adresse in den Einstellungen an, damit die nachfolgenden Funktionen zur Verfügung stehen.",
- "invalidemailaddress": "Die E-Mail-Adresse wird nicht akzeptiert, weil sie ein ungültiges Format (eventuell ungültige Zeichen) zu haben scheint. Bitte geben Sie eine korrekte Adresse ein oder leeren Sie das Feld.",
- "createaccount-text": "Es wurde für Sie ein Benutzerkonto „$2“ auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für „$2“ ist „$3“. Sie sollten sich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, können Sie diese Nachricht ignorieren.",
- "login-throttled": "Sie haben zu oft versucht, sich anzumelden.\nBitte warten Sie $1, bevor Sie es erneut probieren.",
- "resetpass_announce": "Anmeldung mit dem per E-Mail zugesandten Code. Um die Anmeldung abzuschließen, müssen Sie jetzt ein neues Passwort wählen.",
- "resetpass_text": "<!-- Ergänzen Sie den Text hier -->",
- "changepassword-success": "Ihr Passwort wurde erfolgreich geändert.",
- "resetpass-no-info": "Sie müssen sich anmelden, um auf diese Seite direkt zuzugreifen.",
- "resetpass-wrong-oldpass": "Ungültiges temporäres oder aktuelles Passwort.\nMöglicherweise haben Sie Ihr Passwort bereits erfolgreich geändert oder ein neues temporäres Passwort beantragt.",
- "passwordreset-capture-help": "Wenn Sie dieses Kästchen ankreuzen, wird die E-Mail-Nachricht mit dem temporären Passwort sowohl Ihnen angezeigt als auch dem Benutzer zugesandt.",
- "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat eine Zurücksetzung Ihres\nPassworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}}\nmit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nSie sollten sich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese\nAnfrage getätigt hat oder Sie sich wieder an Ihr ursprüngliches Passwort erinnern können und es nicht länger\nändern möchten, können Sie diese Nachricht ignorieren und weiterhin Ihr altes\nPasswort benutzen.",
- "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hat eine Zurücksetzung Ihres Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Sie sollten sich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder Sie sich wieder an Ihr ursprüngliches Passwort erinnern können und es nicht ändern möchten, können Sie diese Nachricht ignorieren und weiterhin Ihr altes Passwort benutzen.",
- "changeemail-text": "Füllen Sie dieses Formular vollständig aus, um Ihre E-Mail-Adresse zu ändern. Sie müssen Ihr Passwort angeben, um diese Änderung zu bestätigen.",
- "changeemail-no-info": "Sie müssen angemeldet sein, um direkt auf diese Seite zugreifen zu können.",
- "sig_tip": "Ihre Signatur mit Zeitstempel",
- "anoneditwarning": "Sie bearbeiten diese Seite unangemeldet. Wenn Sie sie abspeichern, wird Ihre aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
- "missingsummary": "'''Hinweis:''' Sie haben keine Zusammenfassung angegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Änderung ohne Zusammenfassung übernommen.",
- "missingcommenttext": "Ihr Abschnitt enthält keinen Text.",
- "missingcommentheader": "'''Achtung:''' Sie haben kein Betreff/Überschrift eingegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.",
- "blockedtext": "'''Ihr Benutzername oder Ihre IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde vom Administrator $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nSie könnten $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\nIhre aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
- "autoblockedtext": "Ihre IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nSie können $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\n\nIhre aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
- "whitelistedittext": "Sie müssen sich $1, um Seiten bearbeiten zu können.",
- "confirmedittext": "Sie müssen Ihre E-Mail-Adresse erst bestätigen, bevor Sie Bearbeitungen vornehmen können. Bitte ergänzen und bestätigen Sie Ihre E-Mail in den [[Special:Preferences|Einstellungen]].",
- "nosuchsectiontext": "Sie haben versucht, einen Abschnitt zu bearbeiten, der nicht existiert.\nVermutlich wurde er verschoben oder gelöscht, nachdem Sie die Seite aufgerufen haben.",
- "loginreqpagetext": "Sie müssen sich $1, um Seiten lesen zu können.",
- "newarticletext": "Sie sind einem Link zu einer Seite gefolgt, die nicht vorhanden ist.\nUm diese Seite anzulegen, tragen Sie Ihren Text in das untenstehende Bearbeitungsfeld ein (weitere Informationen auf der [[{{MediaWiki:Helppage}}|Hilfeseite]]).\nSofern Sie fälschlicherweise hier sind, klicken Sie auf die Schaltfläche '''Zurück''' Ihres Browsers.",
- "anontalkpagetext": "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn Sie mit den Kommentaren auf dieser Seite nichts anfangen können, richten sie sich vermutlich an einen früheren Inhaber Ihrer IP-Adresse und Sie können sie ignorieren. Sie können sich auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder sich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
- "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nSie können diesen Titel auf den anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]],\n<span class=\"plainlinks\">in den zugehörigen [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbüchern suchen] oder diese Seite [{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>.",
- "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text.\nSie können ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>. Sie sind allerdings nicht berechtigt diese Seite zu erstellen.",
- "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfen Sie, ob Sie diese Seite wirklich erstellen/bearbeiten möchten.",
- "clearyourcache": "'''Hinweis:''' Leeren Sie nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Strg+F5'' oder ''Strg+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Strg+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Strg+F5'' drücken oder ''Strg'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
- "usercssyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues CSS vor dem Speichern zu testen.",
- "userjsyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues JavaScript vor dem Speichern zu testen.",
- "usercsspreview": "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-CSS betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
- "userjspreview": "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-JavaScript betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
- "sitecsspreview": "'''Beachten Sie, dass Sie nur eine Vorschau dieses CSS betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
- "sitejspreview": "'''Beachten Sie, dass Sie nur eine Vorschau dieses JavaScript betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
- "userinvalidcssjstitle": "'''Achtung:''' Die Benutzeroberfläche „$1“ existiert nicht. Bedenken Sie, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
- "previewconflict": "Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder. So wird die Seite aussehen, wenn Sie jetzt speichern.",
- "session_fail_preview": "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.\nBitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.\nSollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
- "session_fail_preview_html": "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.'''\n\n''Da in {{SITENAME}} das Speichern von reinem HTML aktiviert ist, wurde die Vorschau ausgeblendet, um JavaScript-Attacken vorzubeugen.''\n\n'''Bitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.\nSollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
- "token_suffix_mismatch": "'''Ihre Bearbeitung wurde zurückgewiesen, da Ihr Browser Zeichen im Bearbeiten-Token verstümmelt hat.\nEine Speicherung kann den Seiteninhalt zerstören. Dies geschieht bisweilen durch die Benutzung eines anonymen Proxy-Dienstes, der fehlerhaft arbeitet.'''",
- "edit_form_incomplete": "'''Der Inhalt des Bearbeitungsformulars hat den Server nicht vollständig erreicht. Bitte prüfen Sie Ihre Bearbeitungen auf Vollständigkeit und versuchen Sie es erneut.'''",
- "explainconflict": "Jemand anders hat diese Seite geändert, nachdem Sie angefangen haben, sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält Ihre Änderungen.\nBitte fügen Sie Ihre Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn Sie auf „{{int:savearticle}}“ klicken.",
- "yourtext": "Ihr Text",
- "nonunicodebrowser": "'''Achtung: Ihr Browser kann Unicode-Zeichen nicht richtig verarbeiten.''' Es wird eine Hilfsroutine eingesetzt, um Ihnen zu erlauben, Seiten sicher zu bearbeiten: Nicht-ASCII-Zeichen werden dabei im Bearbeitungsfenster als hexadezimale Codes angezeigt.",
- "editingold": "'''Achtung: Sie bearbeiten eine alte Version dieser Seite. Sofern Sie sie speichern, werden alle neueren Versionen überschrieben.'''",
- "copyrightwarning": "'''Bitte kopieren Sie keine Webseiten, die nicht Ihre eigenen sind, benutzen Sie keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nSie geben uns hiermit Ihre Zusage, dass Sie den Text '''selbst verfasst''' haben, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weisen Sie bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachten Sie, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Einzelheiten). Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann klicken Sie nicht auf „Seite speichern“.</i>",
- "copyrightwarning2": "Bitte beachten Sie, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.\nReichen Sie keine Texte ein, falls Sie nicht wollen, dass diese ohne Einschränkung geändert werden können.\n\nSie bestätigen hiermit auch, dass Sie diese Texte selbst geschrieben haben oder diese von einer gemeinfreien Quelle kopiert haben\n(weitere Einzelheiten unter $1). '''ÜBERTRAGEN SIE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
- "longpageerror": "'''Fehler: Der Text, den Sie zu speichern versuchen, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobyte}} groß. Dies ist größer als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobyte}}.'''\nEr kann nicht gespeichert werden.",
- "readonlywarning": "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass Ihre Änderungen derzeit nicht gespeichert werden können.\nSichern Sie den Text bitte lokal auf Ihrem Computer und versuchen Sie zu einem späteren Zeitpunkt, die Änderungen zu übertragen.'''\n\nGrund für die Sperre: $1",
- "nocreatetext": "Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Sie können bestehende Seiten ändern oder sich [[Special:UserLogin|anmelden]].",
- "nocreate-loggedin": "Sie haben nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.",
- "permissionserrorstext": "Sie sind nicht berechtigt, die Aktion auszuführen. {{PLURAL:$1|Grund|Gründe}}:",
- "permissionserrorstext-withaction": "Sie sind nicht berechtigt, $2.\n{{PLURAL:$1|Grund|Gründe}}:",
- "recreate-moveddeleted-warn": "'''Achtung: Sie erstellen eine Seite, die bereits früher gelöscht wurde.'''\n\nBitte prüfen Sie sorgfältig, ob die erneute Seitenerstellung den Richtlinien entspricht.\nZu Ihrer Information folgt das Lösch- und Verschiebungs-Logbuch mit der Begründung für die vorhergehende Löschung:",
- "edit-no-change": "Ihre Bearbeitung wurde ignoriert, da keine Änderung an dem Text vorgenomme wurde.",
- "postedit-confirmation": "Ihre Bearbeitung wurde gespeichert.",
- "editwarning-warning": "Das Verlassen dieser Seite kann dazu führen, dass Ihre Änderungen verloren gehen.\nWenn Sie angemeldet sind, können Sie das Anzeigen dieser Warnung im „Bearbeiten“-Bereich Ihrer Einstellungen abschalten.",
- "undo-success": "Die Bearbeitung kann rückgängig gemacht werden.\nBitte prüfen Sie den Vergleich unten, um sicherzustellen, dass Sie dies tun möchten, und speichern Sie dann unten Ihre Änderungen, um die Bearbeitung rückgängig zu machen.",
- "history-feed-empty": "Die angeforderte Seite existiert nicht. Vielleicht wurde sie gelöscht oder verschoben. [[Special:Search|Durchsuchen Sie]] {{SITENAME}} nach passenden neuen Seiten.",
- "rev-deleted-text-unhide": "Diese Version wurde '''gelöscht'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].\nSie können [$1 diese Version einsehen], sofern Sie möchten.",
- "rev-suppressed-text-unhide": "Diese Version wurde '''unterdrückt'''.\nNähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].\nSie können [$1 diese Version einsehen], sofern Sie möchten.",
- "rev-deleted-text-view": "Diese Version wurde '''gelöscht'''.\nSie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
- "rev-suppressed-text-view": "Diese Version wurde '''unterdrückt'''.\nSie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
- "rev-deleted-no-diff": "Sie können diesen Unterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.\nDetails stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
- "rev-suppressed-no-diff": "Sie können diesen Versionsunterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.",
- "rev-deleted-unhide-diff": "Eine der Versionen dieses Versionsunterschieds wurde '''gelöscht'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].\nSie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
- "rev-suppressed-unhide-diff": "Eine der Versionen dieses Versionsunterschieds wurde '''unterdrückt'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].\nSie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
- "rev-deleted-diff-view": "Eine Version dieses Versionsunterschieds wurde '''gelöscht'''.\nSie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
- "rev-suppressed-diff-view": "Eine der Versionen dieses Versionsunterschiedes wurde '''unterdrückt'''.\nSie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
- "revdelete-nooldid-text": "Sie haben entweder keine Version angegeben, auf die diese Aktion ausgeführt werden soll, die gewählte Version ist nicht vorhanden oder Sie versuchen, die aktuelle Version zu entfernen.",
- "revdelete-show-file-confirm": "Sind Sie sicher, dass Sie die gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2 um $3 Uhr ansehen wollen?",
- "revdelete-confirm": "Bitte bestätigen Sie, dass Sie beabsichtigen, dies zu tun, die Konsequenzen verstehen und es in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] tun.",
- "revdelete-show-no-access": "Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.\nSie haben darauf keinen Zugriff.",
- "revdelete-modify-no-access": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.\nSie haben darauf keinen Zugriff.",
- "revdelete-concurrent-change": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Es scheint, als ob der Status von jemandem geändert wurde, bevor Sie vorhatten, ihn zu bearbeiten.\nBitte prüfen Sie die Logbücher.",
- "revdelete-only-restricted": "Fehler beim Verstecken des Eintrags vom $1, $2 Uhr: Sie können keinen Eintrag vor Administratoren verstecken, ohne eine der anderen Ansichtsoptionen gewählt zu haben.",
- "mergehistory-header": "Mit dieser Spezialseite können Sie die Versionsgeschichte einer Ursprungsseite mit der Versionsgeschichte einer Zielseite vereinen.\nStellen Sie sicher, dass die Versionsgeschichte einer Seite historisch korrekt ist.",
- "mergehistory-merge": "Die folgenden Versionen von „[[:$1]]“ können nach „[[:$2]]“ übertragen werden. Markieren Sie die Version, bis zu der (einschließlich) die Versionen übertragen werden sollen. Bitte beachten Sie, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.",
- "mergehistory-fail": "Versionsvereinigung nicht möglich, bitte prüfen Sie die Seite und die Zeitangaben.",
- "toomanymatches": "Die Anzahl der Suchergebnisse ist zu groß, bitte versuchen Sie eine andere Abfrage.",
- "searchmenu-new": "'''Erstellen Sie die Seite „[[:$1]]“ in diesem Wiki.'''",
- "search-suggest": "Meinten Sie „$1“?",
- "search-nonefound": "Für Ihre Suchanfrage wurden keine Ergebnisse gefunden.",
- "searchdisabled": "Die {{SITENAME}} Suche wurde deaktiviert. Sie können unterdessen mit Google suchen. Bitte bedenken Sie, dass der Suchindex von {{SITENAME}} veraltet sein kann.",
- "prefsnologintext2": "Sie müssen sich $1, um Ihre Benutzereinstellungen festzulegen.",
- "prefs-help-watchlist-token2": "Dies ist der geheime Schlüssel zum Webfeed Ihrer Beobachtungsliste.\nJeder, der ihn kennt, kann Ihre Beobachtungsliste lesen. Teilen Sie ihn deshalb nicht.\n[[Special:ResetTokens|Klicken Sie hier, wenn Sie ihn zurücksetzen müssen]].",
- "savedprefs": "Ihre Einstellungen wurden gespeichert.",
- "prefs-reset-intro": "Sie können diese Seite verwenden, um die Einstellungen auf die Standards zurückzusetzen.\nDies kann nicht mehr rückgängig gemacht werden.",
- "yourgender": "Welches Geschlecht haben Sie?",
- "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um Sie anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
- "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann Ihr bürgerlicher Name Ihren Beiträgen zugeordnet werden.",
- "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern Sie Ihr Passwort vergessen haben.",
- "prefs-help-email-others": "Mit anderen Benutzern können Sie auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass Sie Ihre Identität offenlegen müssen.",
- "userrights-groups-help": "Sie können die Gruppenzugehörigkeit dieses Benutzers ändern:\n* Ein markiertes Kästchen bedeutet, dass der Benutzer Mitglied dieser Gruppe ist.\n* Ein nichtmarkiertes Kästchen bedeutet, dass der Benutzer nicht Mitglied dieser Gruppe ist.\n* Ein * bedeutet, dass Sie das Benutzerrecht nach Erteilung nicht wieder zurücknehmen können (oder umgekehrt).",
- "userrights-no-interwiki": "Sie haben nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.",
- "userrights-nologin": "Sie müssen sich mit einem Administrator-Benutzerkonto [[Special:UserLogin|anmelden]], um Benutzerrechte zu ändern.",
- "userrights-notallowed": "Sie verfügen nicht über die erforderlichen Berechtigungen, um Benutzerrechte vergeben oder entziehen zu können.",
- "userrights-changeable-col": "Gruppenzugehörigkeit, die Sie ändern dürfen",
- "userrights-unchangeable-col": "Gruppenzugehörigkeit, die Sie nicht ändern dürfen",
- "recentchanges-summary": "Auf dieser Seite können Sie die letzten Änderungen in diesem Wiki nachverfolgen.",
- "recentchanges-feed-description": "Verfolgen Sie mit diesem Feed die letzten Änderungen in {{SITENAME}}.",
- "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. bei Kategorien an den Mitgliedern dieser Kategorie).\nSeiten auf Ihrer [[Special:Watchlist|Beobachtungsliste]] sind '''fett''' dargestellt.",
- "uploadnologintext": "Sie müssen sich $1 um Dateien hochladen zu können.",
- "uploadtext": "Benutzen Sie dieses Formular, um neue Dateien hochzuladen.\n\nGehen Sie zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutzen Sie einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit „Alternativer Text“ als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
- "illegalfilename": "Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benennen Sie die Datei um und versuchen Sie, sie erneut hochzuladen.",
- "empty-file": "Die von Ihnen übertragene Datei hat keinen Inhalt.",
- "emptyfile": "Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrollieren Sie, ob Sie die Datei wirklich hochladen wollen.",
- "fileexists": "Eine Datei dieses Namens ist bereits vorhanden. Bitte prüfen Sie <strong>[[:$1]]</strong>, sofern Sie sich nicht sicher sind, ob Sie sie ändern möchten.\n[[$1|thumb]]",
- "filepageexists": "Eine Beschreibungsseite wurde bereits als <strong>[[:$1]]</strong> erstellt, es ist aber keine Datei mit diesem Namen vorhanden.\nDie eingegebene Beschreibung wird nicht auf die Beschreibungsseite übernommen.\nDie Beschreibungsseite müssen Sie nach dem Hochladen der Datei noch manuell bearbeiten.\n[[$1|thumb]]",
- "fileexists-extension": "Eine Datei ähnlichen Namens ist bereits vorhanden: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der vorhandenen Datei: <strong>[[:$2]]</strong>\nBitte wählen Sie einen anderen Namen.",
- "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Größe ''(Minitatur)'' zu handeln. [[$1|thumb]]\nBitte prüfen Sie die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
- "file-thumbnail-no": "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Größe ''(Miniatur)'' hin.\nBitte prüfen Sie, ob Sie das Bild in voller Auflösung vorliegen haben und laden dieses unter dem Originalnamen hoch.",
- "fileexists-forbidden": "Unter diesem Namen existiert bereits eine Datei und sie kann nicht überschrieben werden. Bitte gehen Sie zurück und laden Sie die Datei unter einem anderen Namen hoch. [[File:$1|thumb|center|$1]]",
- "fileexists-shared-forbidden": "Unter diesem Namen existiert bereits eine Datei im zentralen Medienarchiv.\nWenn Sie diese Datei trotzdem hochladen möchten, gehen Sie bitte zurück und ändern den Namen.\n[[File:$1|thumb|center|$1]]",
- "file-deleted-duplicate": "Eine mit dieser identische Datei ([[:$1]]) wurde früher gelöscht. Sehen Sie das Lösch-Logbuch ein, bevor Sie sie hochladen.",
- "uploadwarning-text": "Bitte ändern Sie unten die Dateibeschreibung und versuchen Sie es erneut.",
- "uploadfromurl-queued": "Ihr Upload befindet sich nun in der Warteschlange.",
- "php-uploaddisabledtext": "Das Hochladen von Dateien wurde in PHP deaktiviert.\nBitte überprüfen Sie die <code>file_uploads</code>-Einstellung.",
- "filewasdeleted": "Eine Datei mit diesem Namen wurde schon einmal hochgeladen und zwischenzeitlich wieder gelöscht. Bitte prüfen Sie zuerst den Eintrag im $1, bevor Sie die Datei wirklich speichern.",
- "filename-bad-prefix": "Der Dateiname beginnt mit '''„$1“'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.\nBitte geben Sie der Datei einen Namen, der den Inhalt besser beschreibt.",
- "upload-file-error-text": "Bei der Erstellung einer temporären Datei auf dem Server ist ein interner Fehler aufgetreten.\nBitte informieren Sie einen [[Special:ListUsers/sysop|Administrator]].",
- "upload-misc-error-text": "Beim Hochladen ist ein unbekannter Fehler aufgetreten.\nPrüfen Sie die URL auf Fehler, den Online-Status der Seite und versuchen es erneut.\nWenn das Problem weiter besteht, informieren Sie einen [[Special:ListUsers/sysop|Administrator]].",
- "uploadstash-badtoken": "Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil Ihre Sitzungsdaten abgelaufen sind. Bitte versuchen Sie es erneut.",
- "img-auth-nopathinfo": "PATH_INFO fehlt.\nIhr Server ist nicht dafür eingerichtet, diese Information weiterzugeben.\nSie könnte CGI-gestützt sein und kann daher img_auth nicht ermöglichen.\nSiehe auch http://www.mediawiki.org/wiki/Manual:Image_Authorization.",
- "img-auth-nologinnWL": "Sie sind nicht angemeldet und „$1“ ist nicht in der weißen Liste.",
- "img-auth-isdir": "Sie versuchen, auf ein Verzeichnis „$1“ zuzugreifen.\nNur Dateizugriff ist erlaubt.",
- "upload-curl-error6-text": "Die angegebene URL ist nicht erreichbar. Prüfen Sie sowohl die URL auf Fehler als auch den Online-Status der Seite.",
- "upload-curl-error28-text": "Die Seite braucht zu lange, um zu antworten. Prüfen Sie, ob die Seite online ist, warten Sie einen kurzen Moment und versuchen Sie es dann erneut. Es kann sinnvoll sein, es zu einem anderen Zeitpunkt erneut zu versuchen.",
- "upload_source_file": " (eine Datei auf Ihrem Computer)",
- "filehist-help": "Klicken Sie auf einen Zeitpunkt, um diese Version zu laden.",
- "sharedupload-desc-edit": "Diese Datei stammt aus $1 und kann auf anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
- "sharedupload-desc-create": "Diese Datei stammt aus $1 und kann von anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
- "filepage-nofile-link": "Es ist keine Datei dieses Namens vorhanden. Sie können jedoch [$1 diese Datei hochladen].",
- "filerevert-intro": "Sie setzen die Datei '''[[Media:$1|$1]]''' auf die [$4 Version vom $2, $3 Uhr] zurück.",
- "filedelete-intro": "Sie löschen die Datei '''„[[Media:$1|$1]]“''' inklusive ihrer Versionsgeschichte.",
- "filedelete-intro-old": "Sie löschen von der Datei '''„[[Media:$1|$1]]“''' die [$4 Version vom $2, $3 Uhr].",
- "unusedtemplatestext": "Diese Seite listet alle Seiten im {{ns:template}}-Namensraum auf, die nicht in anderen Seiten eingebunden sind.\nÜberprüfen Sie andere Links zu den Vorlagen, bevor Sie diese löschen.",
- "unusedimagestext": "Bitte beachten Sie, dass andere Webseiten eine Datei mit einer direkten URL verlinken können. Sie könnte daher hier aufgelistet sein, obwohl sie in aktiver Verwendung ist.",
- "notargettext": "Sie haben nicht angegeben, auf welche Seite diese Funktion angewendet werden soll.",
- "booksources-invalid-isbn": "Vermutlich ist die ISBN ungültig.\nBitte prüfen Sie, ob sie korrekt von der Quelle übertragen wurde.",
- "cachedspecial-viewing-cached-ttl": "Sie sehen die gecachte Version dieser Seite, die bis zu $1 alt sein kann.",
- "cachedspecial-viewing-cached-ts": "Sie sehen die gecachte Version dieser Seite, die möglicherweise nicht aktuell ist.",
- "mailnologintext": "Sie müssen [[Special:UserLogin|angemeldet sein]] und eine bestätigte E-Mail-Adresse in Ihren [[Special:Preferences|Einstellungen]] eingetragen haben, um anderen Benutzern E-Mails schicken zu können.",
- "emailpagetext": "Sie können {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular eine E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus Ihren [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} Ihnen direkt antworten kann.",
- "emailccsubject": "Kopie Ihrer Nachricht an $1: $2",
- "emailsenttext": "Ihre E-Mail wurde verschickt.",
- "nowatchlist": "Es befinden sich keine Einträge auf Ihrer Beobachtungsliste.",
- "watchlistanontext": "Sie müssen sich $1, um Ihre Beobachtungsliste sehen oder Einträge auf ihr bearbeiten zu können.",
- "watchnologin": "Sie sind nicht angemeldet",
- "watchnologintext": "Sie müssen [[Special:UserLogin|angemeldet]] sein, um Ihre Beobachtungsliste bearbeiten zu können.",
- "addedwatchtext": "Die Seite „[[:$1]]“ wurde zu Ihrer [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\n\nSpätere Änderungen an dieser Seite und der dazugehörigen Diskussionsseite werden dort gelistet.",
- "removedwatchtext": "Die Seite „[[:$1]]“ wurde von Ihrer [[Special:Watchlist|Beobachtungsliste]] entfernt.",
- "watchlist-details": "Sie beobachten {{PLURAL:$1|1 Seite|$1 Seiten}}.",
- "watchlistcontains": "Ihre Beobachtungsliste enthält $1 {{PLURAL:$1|Seite|Seiten}}.",
- "enotif_body": "Hallo $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nZusammenfassung des Bearbeiters: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt zum Bearbeiter:\nE-Mail: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nBei weiterer Aktivität auf der Seite werden Ihnen so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis Sie die Seite wieder angemeldet besucht haben.\nAuf Ihrer Beobachtungsliste können Sie alle Benachrichtigungsmarkierungen zusammen zurücksetzen.\n\nIhr freundliches {{SITENAME}}-Benachrichtigungssystem\n\n--\nUm die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuchen Sie {{canonicalurl:{{#special:Preferences}}}}.\n\nUm die Einstellungen Ihrer Beobachtungsliste anzupassen, besuchen Sie {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nUm diese Seite von Ihrer Beobachtungsliste zu entfernen, besuchen Sie $UNWATCHURL.\n\nRückmeldungen und weitere Hilfe: {{canonicalurl:{{MediaWiki:Helppage}}}}",
- "historywarning": "'''Achtung:''' Die Seite, die Sie löschen möchten, hat eine Versionsgeschichte mit etwa $1 {{PLURAL:$1|Version|Versionen}}:",
- "confirmdeletetext": "Sie sind dabei, eine Seite mit allen zugehörigen älteren Versionen zu löschen. Bitte bestätigen Sie, dass Sie sich der Konsequenzen bewusst sind, und dass Sie in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] handeln.",
- "deletedtext": "„$1“ wurde gelöscht. Im $2 finden Sie eine Liste der letzten Löschungen.",
- "sessionfailure": "Es gab ein Problem bei der Übertragung Ihrer Benutzerdaten.\nDiese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung Ihrer Änderungen zu einem anderen Benutzer zu verhindern.\nBitte gehen Sie zurück zur vorherigen Seite, laden Sie sie erneut und versuchen Sie, den Vorgang erneut auszuführen.",
- "protect-text": "Hier können Sie den Schutzstatus der Seite „$1“ einsehen und ändern.",
- "protect-locked-blocked": "Sie können den Seitenschutz nicht ändern, da Ihr Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''„$1“:'''",
- "protect-locked-access": "Ihr Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen für die Seite '''„$1“:'''",
- "protect-cantedit": "Sie können die Sperre dieser Seite nicht ändern, da Sie keine Berechtigung zum Bearbeiten der Seite haben.",
- "undeleteextrahelp": "* Um die Seite mitsamt aller Versionen wiederherzustellen, wählen Sie keine Version aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.\n* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wählen Sie die betreffenden Versionen einzeln aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.",
- "undeletehistory": "Wenn Sie diese Seite wiederherstellen, werden auch alle alten Versionen wiederhergestellt.\nWenn seit der Löschung eine neue Seite gleichen Namens erstellt wurde, werden die wiederhergestellten Versionen chronologisch in die Versionsgeschichte eingeordnet.",
- "undeleterevdel": "Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält.\nIn diesem Fall darf die aktuellste Version nicht markiert werden oder ihr Status muss auf den einer normalen Version geändert werden.\nVersionen von Dateien, auf die Sie keinen Zugriff haben, werden nicht wiederhergestellt.",
- "undeletedpage": "'''$1''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] finden Sie eine Übersicht der gelöschten und wiederhergestellten Seiten.",
- "undelete-show-file-confirm": "Sind Sie sicher, dass Sie eine gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2, $3 Uhr sehen wollen?",
- "tooltip-namespace_association": "Dieses Auswahlfeld anklicken, um den Ihrer Auswahl zugehörigen Diskussionsnamensraum, oder im umgekehrten Fall, den zugehörigen Namensraum, mit einzubeziehen",
- "blockiptext": "Mit diesem Formular sperren Sie eine IP-Adresse oder einen Benutzernamen, so dass von dort keine Änderungen mehr vorgenommen werden können.\nDies sollte nur erfolgen, um Vandalismus zu verhindern und in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]].\nBitte geben Sie den Grund für die Sperre an.",
- "ipb-blockingself": "Sie sind gerade dabei, sich selbst zu sperren! Möchten Sie das wirklich tun?",
- "ipb-confirmhideuser": "Sie sind gerade dabei, einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchten Sie das wirklich tun?",
- "unblockiptext": "Mit diesem Formular können Sie eine IP-Adresse oder einen Benutzer freigeben.",
- "autoblocker": "Automatische Sperre, da Sie eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzen. Grund der Benutzersperre: „$2“.",
- "ipb-needreblock": "„$1“ ist bereits gesperrt. Möchten Sie die Sperrparameter ändern?",
- "proxyblockreason": "Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Internet-Provider oder Ihre Systemadministratoren und informieren Sie sie über dieses mögliche Sicherheitsproblem.",
- "cant-see-hidden-user": "Der Benutzer, den Sie versuchen zu sperren, wurde bereits gesperrt und verborgen. Da Sie das „hideuser“-Recht nicht haben, können Sie die Benutzersperre nicht sehen und nicht bearbeiten.",
- "ipbblocked": "Sie können keine anderen Benutzer sperren oder entsperren, da Sie selbst gesperrt sind",
- "ipbnounblockself": "Sie haben nicht die Berechtigung, sich selbst zu entsperren",
- "locknoconfirm": "Sie haben das Bestätigungsfeld nicht markiert.",
- "lockdbsuccesstext": "Die {{SITENAME}}-Datenbank wurde gesperrt.<br />Bitte geben Sie die Datenbank [[Special:UnlockDB|wieder frei]], sobald die Wartung abgeschlossen ist.",
- "movepagetext": "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.\nDer alte Titel wird danach zum neuen weiterleiten.\nSie können Weiterleitungen, die auf den Originaltitel verlinken, automatisch korrigieren lassen.\nStellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfen.\nSie sind dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, letztere ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie einen Fehler gemacht haben. Sie können hingegen keine existierende Seite überschreiben.\n\n'''Warnung!'''\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nSie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.",
- "movepagetext-noredirectfixer": "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.\nDer alte Titel wird danach zum neuen weiterleiten.\nStellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfen.\nSie sind dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie einen Fehler gemacht haben. Sie können hingegen keine existierende Seite überschreiben.\n\n'''Warnung!'''\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nSie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.",
- "movepagetalktext": "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:'''\n*Es existiert bereits eine Diskussionsseite mit diesem Namen, oder\n*Sie wählen die unten stehende Option ab.\n\nIn diesen Fällen müssen Sie, falls gewünscht, den Inhalt der Seite von Hand verschieben oder zusammenführen.\n\nBitte den '''neuen''' Titel unter '''Ziel''' eintragen, darunter die Umbenennung bitte '''begründen.'''",
- "moveuserpage-warning": "'''Warnung:''' Sie sind dabei, eine Benutzerseite zu verschieben. Bitte bedenken Sie, dass dadurch nur die Benutzerseite verschoben, '''nicht''' aber der Benutzer umbenannt wird.",
- "movenologintext": "Sie müssen ein registrierter Benutzer und [[Special:UserLogin|angemeldet]] sein, um eine Seite zu verschieben.",
- "movenotallowed": "Sie haben nicht die erforderliche Berechtigung, um Seiten verschieben zu können.",
- "movenotallowedfile": "Sie haben nicht die erforderliche Berechtigung, um Dateien verschieben zu können.",
- "cant-move-user-page": "Sie haben nicht die erforderliche Berechtigung, Benutzerhauptseiten verschieben zu können.",
- "cant-move-to-user-page": "Sie haben nicht die Berechtigung, Seiten auf eine Benutzerseite zu verschieben (mit Ausnahme von Benutzerunterseiten).",
- "articleexists": "Unter diesem Namen existiert bereits eine Seite. Bitte wählen Sie einen anderen Namen.",
- "delete_and_move_text": "== Löschung erforderlich ==\n\nDie Seite „[[:$1]]“ existiert bereits. Möchten Sie diese löschen, um die Seite verschieben zu können?",
- "file-exists-sharedrepo": "Der gewählte Dateiname wird bereits in einem gemeinsam genutzten Repositorium verwendet.\nBitte wählen Sie einen anderen Namen.",
- "exporttext": "Mit dieser Spezialseite können Sie den Text inklusive der Versionsgeschichte einzelner Seiten in eine XML-Datei exportieren.\nDie Datei kann in ein anderes MediaWiki-Wiki über die [[Special:Import|Importfunktion]] eingespielt werden.\n\nTragen Sie den oder die entsprechenden Seitentitel in das folgende Textfeld ein (pro Zeile jeweils nur eine Seite).\n\nAlternativ ist der Export auch mit der Syntax [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] möglich, beispielsweise für die [[{{MediaWiki:Mainpage}}]].",
- "allmessagestext": "Dies ist eine Liste der MediaWiki-Systemtexte.\nBitte besuchen Sie die Seiten [https://www.mediawiki.org/wiki/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], sofern Sie sich an der Lokalisierung von MediaWiki beteiligen möchten.",
- "import-interwiki-text": "Wählen Sie ein Wiki und eine Seite zum Importieren aus.\nDie Versionsdaten und Benutzernamen bleiben dabei erhalten.\nAlle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] protokolliert.",
- "import-token-mismatch": "Verlust der Sessiondaten. Bitte versuchen Sie es erneut.",
- "import-error-edit": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu bearbeiten.",
- "import-error-create": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu erstellen.",
- "javascripttest-pagetext-frameworks": "Bitte wählen Sie eine der folgenden Prüfumgebungen aus: $1",
- "javascripttest-pagetext-skins": "Wählen Sie eine Benutzeroberfläche zur Durchführung der Tests aus:",
- "tooltip-pt-userpage": "Ihre Benutzerseite",
- "tooltip-pt-anonuserpage": "Benutzerseite der IP-Adresse, von der aus Sie Änderungen durchführen",
- "tooltip-pt-mytalk": "Ihre Diskussionsseite",
- "tooltip-pt-mycontris": "Liste Ihrer Beiträge",
- "tooltip-n-mainpage": "Besuchen Sie die Hauptseite",
- "tooltip-n-mainpage-description": "Besuchen Sie die Hauptseite",
- "tooltip-n-portal": "Über das Projekt, was Sie tun können, wo was zu finden ist",
- "tooltip-watch": "Diese Seite zu Ihrer Beobachtungsliste hinzufügen",
- "tooltip-summary": "Geben Sie eine kurze Zusammenfassung ein.",
- "notacceptable": "Der Wiki-Server kann die Daten nicht für Ihr Ausgabegerät aufbereiten.",
- "spamprotectiontext": "Der Text, die Sie speichern wollen, wurde vom Spamschutzfilter blockiert.\nDas liegt wahrscheinlich an einem Link auf eine externe Seite.",
- "markedaspatrollederrortext": "Sie müssen eine Seitenänderung auswählen.",
- "mediawarning": "'''Warnung:''' Dieser Dateityp kann böswilligen Programmcode enthalten.\nDurch das Herunterladen und Öffnen der Datei kann Ihr Computer beschädigt werden.",
- "confirmemail_noemail": "Sie haben keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|persönlichen Einstellungen]] eingetragen.",
- "confirmemail_text": "{{SITENAME}} erfordert, dass Sie Ihre E-Mail-Adresse bestätigen (authentifizieren), bevor Sie die erweiterten E-Mail-Funktionen benutzen können. Klicken Sie bitte auf die unten stehende, mit „Bestätigungscode zuschicken“ beschriftete Schaltfläche, damit eine automatisch erstellte E-Mail an die angegebene Adresse geschickt wird. Diese E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem Sie diese Webseite in Ihrem Webbrowser öffnen, bestätigen Sie, dass die angegebene E-Mail-Adresse korrekt und gültig ist.",
- "confirmemail_pending": "Es wurde Ihnen bereits ein Bestätigungscode per E-Mail zugeschickt.\nWenn Sie Ihr Benutzerkonto erst vor kurzem erstellt haben, warten Sie bitte noch ein paar Minuten auf die E-Mail, bevor Sie einen neuen Code anfordern.",
- "confirmemail_oncreate": "Ein Bestätigungs-Code wurde an Ihre E-Mail-Adresse gesandt. Dieser Code wird für die Anmeldung nicht benötigt, jedoch wird er zur Aktivierung der E-Mail-Funktionen innerhalb des Wikis gebraucht.",
- "confirmemail_sendfailed": "{{SITENAME}} konnte die Bestätigungs-E-Mail nicht an Sie versenden.\nBitte prüfen Sie die E-Mail-Adresse auf ungültige Zeichen.\n\nRückmeldung des Mailservers: $1",
- "confirmemail_invalid": "Ungültiger Bestätigungscode. Möglicherweise ist der Bestätigungszeitraum verstrichen. Versuchen Sie bitte, die Bestätigung zu wiederholen.",
- "confirmemail_needlogin": "Sie müssen sich $1, um Ihre E-Mail-Adresse zu bestätigen.",
- "confirmemail_success": "Ihre E-Mail-Adresse wurde erfolgreich bestätigt. Sie können sich jetzt [[Special:UserLogin|anmelden]].",
- "confirmemail_loggedin": "Ihre E-Mail-Adresse wurde erfolgreich bestätigt.",
- "confirmemail_body": "Hallo,\n\njemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat das Benutzerkonto „$2“ bei {{SITENAME}} registriert.\n\nUm die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,\ndass dieses Benutzerkonto wirklich zu Ihrer E-Mail-Adresse und damit zu Ihnen gehört, öffnen Sie bitte folgenden Link in Ihrem Browser:\n\n$3\n\nWenn Sie das genannte Benutzerkonto *nicht* registriert haben, folgen Sie diesem Link, um den Bestätigungsprozess abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.",
- "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst,\nhat die E-Mail-Adresse des Benutzerkontos „$2“ auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihnen gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} zu aktivieren, öffnen Sie bitte den folgenden Link in Ihrem Browser:\n\n$3\n\nFalls das Konto *nicht* zu Ihnen gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
- "deletedwhileediting": "Achtung: Diese Seite wurde gelöscht, nachdem Sie angefangen haben sie zu bearbeiten!\nIm [{{fullurl:{{#special:Log}}|type=delete&page={{FULLPAGENAMEE}}}} Lösch-Logbuch] finden Sie den Grund für die Löschung.\nWenn Sie die Seite speichern, wird sie neu angelegt.",
- "confirmrecreate": "Benutzer [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten. Die Begründung lautete:\n: ''$2''\nBitte bestätigen Sie, dass Sie diese Seite wirklich neu erstellen möchten.",
- "livepreview-failed": "Die Vorschau kann nicht sofort angezeigt werden!\nBitte nutzen Sie die reguläre Vorschau.",
- "watchlistedit-numitems": "Ihre Beobachtungsliste enthält {{PLURAL:$1|einen Eintrag|$1 Einträge}}. Die Diskussionsseiten wurden dabei nicht mitgezählt.",
- "watchlistedit-noitems": "Ihre Beobachtungsliste ist leer.",
- "watchlistedit-normal-explain": "Dies sind die Einträge Ihrer Beobachtungsliste. Um Einträge zu entfernen, markieren Sie die Kästchen neben den Einträgen und klicken Sie am Ende der Seite auf „{{int:Watchlistedit-normal-submit}}“. Sie können Ihre Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
- "watchlistedit-normal-done": "{{PLURAL:$1|Ein Eintrag wurde|$1 Einträge wurden}} von Ihrer Beobachtungsliste entfernt:",
- "watchlistedit-raw-explain": "Dies sind die Einträge Ihrer Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.\nPro Zeile ist ein Eintrag erlaubt.\nSobald Sie fertig sind, klicken Sie auf „{{int:Watchlistedit-raw-submit}}“.\nSie können auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.",
- "watchlistedit-raw-done": "Ihre Beobachtungsliste wurde gespeichert.",
- "dberr-again": "Warten Sie einige Minuten und versuchen Sie dann neu zuladen.",
- "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-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-thanks": "Vielen Dank. Ihre Rückmeldung wurde auf der Seite „[$2 $1]“ gespeichert.",
- "feedback-bugcheck": "Super! Bitte überprüfen Sie noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.",
- "api-error-badaccess-groups": "Sie haben nicht die Berechtigung Dateien in dieses Wiki hochzuladen.",
- "api-error-hookaborted": "Die von Ihnen vorgesehene Anpassung kann nicht durchgeführt werden (Unterbrechung durch eine Programmschnittstelle).",
- "api-error-mustbeloggedin": "Um Dateien hochladen zu können, müssen Sie angemeldet sein."
+ "@metadata": {
+ "authors": [
+ "*Surak*",
+ "ChrisiPK",
+ "Das Schäfchen",
+ "Filzstift",
+ "Geitost",
+ "Imre",
+ "Jimmy Collins <jimmy.collins@web.de>",
+ "Kghbln",
+ "Leithian",
+ "Merlissimo",
+ "MichaelFrey",
+ "Michawiki",
+ "Pill",
+ "Raimond Spekking (Raymond) <raimond.spekking@gmail.com> since January 2007",
+ "SVG",
+ "Se4598",
+ "The Evil IP address",
+ "Tim Bartel (avatar) <wikipedia@computerkultur.org> formal addressing",
+ "Tischbeinahe",
+ "Umherirrender",
+ "Urhixidur"
+ ]
+ },
+ "tog-enotifrevealaddr": "Ihre E-Mail-Adresse in Benachrichtigungs-E-Mails anzeigen",
+ "view-pool-error": "Entschuldigung, die Server sind im Moment überlastet.\nZu viele Benutzer versuchen, diese Seite zu besuchen.\nBitte warten Sie einige Minuten, bevor Sie es noch einmal versuchen.\n\n$1",
+ "badaccess-group0": "Sie haben nicht die erforderlichen Benutzerrechte für diese Aktion.",
+ "youhavenewmessages": "Sie haben $1 ($2).",
+ "youhavenewmessagesmulti": "Sie haben neue Nachrichten: $1",
+ "enterlockreason": "Bitte geben Sie einen Grund ein, warum die Datenbank gesperrt werden soll und eine Abschätzung über die Dauer der Sperrung",
+ "readonlytext": "Die Datenbank ist vorübergehend für Neueinträge und Änderungen gesperrt. Bitte versuchen Sie es später noch einmal.\n\nGrund der Sperrung: $1",
+ "missing-article": "Der Text von „$1“ $2 wurde nicht in der Datenbank gefunden.\n\nDie Seite ist möglicherweise gelöscht oder verschoben worden.\n\nFalls dies nicht der Fall ist, haben Sie eventuell einen Fehler in der Software gefunden. Bitte melden Sie dies einem [[Special:ListUsers/sysop|Administrator]] unter Nennung der URL.",
+ "actionthrottledtext": "Im Rahmen einer Anti-Spam-Maßnahme kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze haben Sie überschritten.\nBitte versuchen Sie es in ein paar Minuten erneut.",
+ "viewsourcetext": "Sie können den Quelltext dieser Seite betrachten und kopieren:",
+ "viewyourtext": "Sie können den Quelltext '''Ihrer Bearbeitung''' dieser Seite betrachten und kopieren:",
+ "protectedinterface": "Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.\nNutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+ "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutzen Sie bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+ "namespaceprotected": "Sie haben nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
+ "customcssprotected": "Sie haben nicht die Berechtigung, diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.",
+ "customjsprotected": "Sie haben nicht die Berechtigung, diese JavaScript enthaltende Seite zu bearbeiten, da es sich hierbei um die persönlichen Einstellungen eines anderen Benutzers handelt.",
+ "mycustomjsprotected": "Sie haben keine Berechtigung, diese JavaScript-Seite zu bearbeiten.",
+ "myprivateinfoprotected": "Sie haben keine Berechtigung, Ihre privaten Informationen zu bearbeiten.",
+ "mypreferencesprotected": "Sie haben keine Berechtigung, Ihre Einstellungen zu bearbeiten.",
+ "exception-nologin-text": "Sie müssen sich [[Special:Userlogin|anmelden]], um auf diese Seite oder Aktion zugreifen zu können.",
+ "exception-nologin-text-manual": "Sie müssen sich $1, um auf diese Seite oder Aktion zugreifen zu können.",
+ "logouttext": "'''Sie sind nun abgemeldet.'''\n\nBeachten Sie, dass einige Seiten noch anzeigen können, dass Sie angemeldet sind, solange Sie nicht Ihren Browsercache geleert haben.",
+ "welcomecreation-msg": "Ihr Benutzerkonto wurde erstellt.\nVergessen Sie nicht, Ihre [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.",
+ "userlogin-yourname-ph": "Geben Sie Ihren Benutzernamen ein",
+ "userlogin-yourpassword-ph": "Geben Sie Ihr Passwort ein",
+ "createacct-yourpassword-ph": "Geben Sie Ihr Passwort ein",
+ "createacct-yourpasswordagain-ph": "Geben Sie das Passwort erneut ein",
+ "yourdomainname": "Ihre Domain:",
+ "password-change-forbidden": "Sie können auf diesem Wiki keine Passwörter ändern.",
+ "externaldberror": "Entweder liegt ein Fehler bei der externen Authentifizierung vor oder Sie dürfen Ihr externes Benutzerkonto nicht aktualisieren.",
+ "userlogin-noaccount": "Sie haben noch kein Benutzerkonto?",
+ "nologin": "Sie haben kein Benutzerkonto? $1.",
+ "gotaccount": "Haben Sie bereits ein Benutzerkonto? '''$1'''.",
+ "userlogin-loggedin": "Sie sind bereits als {{GENDER:$1|$1}} angemeldet.\nBenutzen Sie das unten stehende Formular, um sich unter einem anderen Benutzernamen anzumelden.",
+ "createacct-email-ph": "Geben Sie Ihre E-Mail-Adresse ein",
+ "createacct-reason-ph": "Warum erstellen Sie ein anderes Benutzerkonto?",
+ "createacct-imgcaptcha-ph": "Geben Sie den Text ein, den Sie oben sehen.",
+ "createacct-benefit-heading": "{{SITENAME}} wird von Menschen wie Ihnen geschaffen.",
+ "userexists": "Dieser Benutzername ist schon vergeben.\nBitte wählen Sie einen anderen.",
+ "nocookiesnew": "Der Benutzerzugang wurde erstellt, aber Sie sind nicht angemeldet.\n{{SITENAME}} benötigt für diese Funktion Cookies, bitte aktivieren Sie diese und melden sich dann mit Ihrem neuen Benutzernamen und dem zugehörigen Passwort an.",
+ "nocookieslogin": "{{SITENAME}} benutzt Cookies zur Anmeldung der Benutzer.\nSie haben Cookies deaktiviert, bitte aktivieren Sie diese und versuchen Sie es erneut.",
+ "nocookiesfornew": "Das Benutzerkonto wurde nicht erstellt, da die Datenherkunft nicht ermittelt werden konnte.\nBitte stellen Sie sicher, dass Sie Cookies aktiviert haben. Laden Sie diese Seite danach erneut und versuchen Sie es noch einmal.",
+ "noname": "Sie müssen einen gültigen Benutzernamen angeben.",
+ "loginsuccess": "Sie sind jetzt als „$1“ bei {{SITENAME}} angemeldet.",
+ "nosuchuser": "Der Benutzername „$1“ existiert nicht.\nÜberprüfen Sie die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melden Sie sich als neuer Benutzer an]].",
+ "nosuchusershort": "Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfen Sie die Schreibweise.",
+ "nouserspecified": "Bitte geben Sie einen Benutzernamen an.",
+ "wrongpassword": "Das Passwort ist falsch. Bitte versuchen Sie es erneut.",
+ "wrongpasswordempty": "Es wurde kein Passwort eingegeben. Bitte versuchen Sie es erneut.",
+ "password-name-match": "Ihr Passwort muss sich von Ihrem Benutzernamen unterscheiden.",
+ "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer „$2“ lautet nun: $3\n\nFalls Sie dies wirklich gewünscht haben, sollten Sie sich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignorieren Sie diese E-Mail, falls Sie sie nicht selbst angefordert haben. Das alte Passwort bleibt weiterhin gültig.",
+ "noemailcreate": "Sie müssen eine gültige E-Mail-Adresse angeben",
+ "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.\nBitte melden Sie sich damit an, sobald sie es erhalten haben. Das alte Passwort bleibt weiterhin gültig.",
+ "blocked-mailpassword": "Die von Ihnen verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.",
+ "eauthentsent": "Eine Bestätigungs-E-Mail wurde an die angegebene Adresse verschickt.\n\nBevor eine E-Mail von anderen Benutzern über die E-Mail-Funktion empfangen werden kann, muss die Adresse und ihre tatsächliche Zugehörigkeit zu diesem Benutzerkonto erst bestätigt werden. Bitte befolgen Sie die Hinweise in der Bestätigungs-E-Mail.",
+ "acct_creation_throttle_hit": "Besucher dieses Wikis, die Ihre IP-Adresse verwenden, haben innerhalb des letzten Tages {{PLURAL:$1|1 Benutzerkonto|$1 Benutzerkonten}} erstellt, was die maximal erlaubte Anzahl in dieser Zeitperiode ist.\n\nBesucher, die diese IP-Adresse verwenden, können momentan keine Benutzerkonten mehr erstellen.",
+ "emailauthenticated": "Ihre E-Mail-Adresse wurde am $2 um $3 Uhr bestätigt.",
+ "emailnotauthenticated": "Ihre E-Mail-Adresse ist noch nicht bestätigt. Die folgenden E-Mail-Funktionen stehen erst nach erfolgreicher Bestätigung zur Verfügung.",
+ "noemailprefs": "Geben Sie eine E-Mail-Adresse in den Einstellungen an, damit die nachfolgenden Funktionen zur Verfügung stehen.",
+ "invalidemailaddress": "Die E-Mail-Adresse wird nicht akzeptiert, weil sie ein ungültiges Format (eventuell ungültige Zeichen) zu haben scheint. Bitte geben Sie eine korrekte Adresse ein oder leeren Sie das Feld.",
+ "createaccount-text": "Es wurde für Sie ein Benutzerkonto „$2“ auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für „$2“ ist „$3“. Sie sollten sich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, können Sie diese Nachricht ignorieren.",
+ "login-throttled": "Sie haben zu oft versucht, sich anzumelden.\nBitte warten Sie $1, bevor Sie es erneut probieren.",
+ "login-abort-generic": "Ihre Anmeldung war nicht erfolgreich – Abgebrochen",
+ "suspicious-userlogout": "Ihre Abmeldeanfrage wurde verweigert, da sie vermutlich von einem defekten Browser oder einem Cache-Proxy gesendet wurde.",
+ "createacct-another-realname-tip": "Der bürgerliche Name ist optional.\nWenn Sie ihn angeben, wird er für die Zuordnung der Beiträge verwendet.",
+ "resetpass_announce": "Um die Anmeldung abzuschließen, müssen Sie ein neues Passwort festlegen.",
+ "resetpass_text": "<!-- Ergänzen Sie den Text hier -->",
+ "changepassword-success": "Ihr Passwort wurde erfolgreich geändert.",
+ "resetpass-no-info": "Sie müssen sich anmelden, um auf diese Seite direkt zuzugreifen.",
+ "resetpass-wrong-oldpass": "Ungültiges temporäres oder aktuelles Passwort.\nMöglicherweise haben Sie Ihr Passwort bereits erfolgreich geändert oder ein neues temporäres Passwort beantragt.",
+ "passwordreset-capture-help": "Wenn Sie dieses Kästchen ankreuzen, wird die E-Mail-Nachricht mit dem temporären Passwort sowohl Ihnen angezeigt als auch dem Benutzer zugesandt.",
+ "passwordreset-emailtext-ip": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat eine Zurücksetzung Ihres\nPassworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}}\nmit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab.\nSie sollten sich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese\nAnfrage getätigt hat oder Sie sich wieder an Ihr ursprüngliches Passwort erinnern können und es nicht länger\nändern möchten, können Sie diese Nachricht ignorieren und weiterhin Ihr altes\nPasswort benutzen.",
+ "passwordreset-emailtext-user": "Benutzer $1 bei {{SITENAME}} hat eine Zurücksetzung Ihres Passworts bei {{SITENAME}} angefordert ($4). {{PLURAL:$3|Das folgende Benutzerkonto ist|Die folgenden Benutzerkonten sind}} mit dieser E-Mail-Adresse verknüpft:\n\n$2\n\n{{PLURAL:$3|Dieses temporäre Passwort läuft|Diese temporären Passwörter laufen}} innerhalb von {{PLURAL:$5|einem Tag|$5 Tagen}} ab. Sie sollten sich anmelden und ein neues Passwort vergeben. Falls jemand anderes diese Anfrage getätigt hat oder Sie sich wieder an Ihr ursprüngliches Passwort erinnern können und es nicht ändern möchten, können Sie diese Nachricht ignorieren und weiterhin Ihr altes Passwort benutzen.",
+ "changeemail-text": "Füllen Sie dieses Formular vollständig aus, um Ihre E-Mail-Adresse zu ändern. Sie müssen Ihr Passwort angeben, um diese Änderung zu bestätigen.",
+ "changeemail-no-info": "Sie müssen angemeldet sein, um direkt auf diese Seite zugreifen zu können.",
+ "resettokens-text": "Sie können Tokens zurücksetzen, welche Ihnen den Zugriff auf bestimmte private Daten ermöglichen, die mit Ihrem Benutzerkonto hier verknüpft sind.\n\nSie sollten dies nur machen, wenn Sie die Tokens versehentlich mit jemandem geteilt haben oder Ihr Konto gefährdet ist.",
+ "sig_tip": "Ihre Signatur mit Zeitstempel",
+ "anoneditwarning": "Sie bearbeiten diese Seite unangemeldet. Wenn Sie sie abspeichern, wird Ihre aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
+ "missingsummary": "'''Hinweis:''' Sie haben keine Zusammenfassung angegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Änderung ohne Zusammenfassung übernommen.",
+ "missingcommenttext": "Ihr Abschnitt enthält keinen Text.",
+ "missingcommentheader": "'''Achtung:''' Sie haben kein Betreff/Überschrift eingegeben. Wenn Sie erneut auf „{{int:savearticle}}“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.",
+ "blockedtext": "'''Ihr Benutzername oder Ihre IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde vom Administrator $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nSie könnten $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\nIhre aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
+ "autoblockedtext": "Ihre IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nSie können $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\n\nIhre aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
+ "whitelistedittext": "Sie müssen sich $1, um Seiten bearbeiten zu können.",
+ "confirmedittext": "Sie müssen Ihre E-Mail-Adresse erst bestätigen, bevor Sie Bearbeitungen vornehmen können. Bitte ergänzen und bestätigen Sie Ihre E-Mail in den [[Special:Preferences|Einstellungen]].",
+ "nosuchsectiontext": "Sie haben versucht, einen Abschnitt zu bearbeiten, der nicht existiert.\nVermutlich wurde er verschoben oder gelöscht, nachdem Sie die Seite aufgerufen haben.",
+ "loginreqpagetext": "Sie müssen sich $1, um Seiten lesen zu können.",
+ "newarticletext": "Sie sind einem Link zu einer Seite gefolgt, die nicht vorhanden ist.\nUm diese Seite anzulegen, tragen Sie Ihren Text in das untenstehende Bearbeitungsfeld ein (weitere Informationen auf der [$1 Hilfeseite]).\nSofern Sie fälschlicherweise hier sind, klicken Sie auf die Schaltfläche '''Zurück''' Ihres Browsers.",
+ "anontalkpagetext": "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn Sie mit den Kommentaren auf dieser Seite nichts anfangen können, richten sie sich vermutlich an einen früheren Inhaber Ihrer IP-Adresse und Sie können sie ignorieren. Sie können sich auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder sich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
+ "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nSie können diesen Titel auf den anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]],\n<span class=\"plainlinks\">in den zugehörigen [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbüchern suchen] oder diese Seite [{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>.",
+ "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text.\nSie können ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>. Sie sind allerdings nicht berechtigt diese Seite zu erstellen.",
+ "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfen Sie, ob Sie diese Seite wirklich erstellen/bearbeiten möchten.",
+ "clearyourcache": "'''Hinweis:''' Leeren Sie nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Strg+F5'' oder ''Strg+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Strg+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Strg+F5'' drücken oder ''Strg'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
+ "usercssyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues CSS vor dem Speichern zu testen.",
+ "userjsyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues JavaScript vor dem Speichern zu testen.",
+ "usercsspreview": "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-CSS betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
+ "userjspreview": "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-JavaScript betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
+ "sitecsspreview": "'''Beachten Sie, dass Sie nur eine Vorschau dieses CSS betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
+ "sitejspreview": "'''Beachten Sie, dass Sie nur eine Vorschau dieses JavaScript betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
+ "userinvalidcssjstitle": "'''Achtung:''' Die Benutzeroberfläche „$1“ existiert nicht. Bedenken Sie, dass benutzerspezifische .css- und .js-Seiten mit einem Kleinbuchstaben anfangen müssen, also beispielsweise ''{{ns:user}}:Mustermann/vector.css'' an Stelle von ''{{ns:user}}:Mustermann/Vector.css''.",
+ "previewconflict": "Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder. So wird die Seite aussehen, wenn Sie jetzt speichern.",
+ "session_fail_preview": "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.\nBitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.\nSollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
+ "session_fail_preview_html": "'''Ihre Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.'''\n\n''Da in {{SITENAME}} das Speichern von reinem HTML aktiviert ist, wurde die Vorschau ausgeblendet, um JavaScript-Attacken vorzubeugen.''\n\n'''Bitte versuchen Sie es erneut, indem Sie unter der folgenden Textvorschau nochmals auf „Seite speichern“ klicken.\nSollte das Problem bestehen bleiben, [[Special:UserLogout|melden Sie sich ab]] und danach wieder an.'''",
+ "token_suffix_mismatch": "'''Ihre Bearbeitung wurde zurückgewiesen, da Ihr Browser Zeichen im Bearbeiten-Token verstümmelt hat.\nEine Speicherung kann den Seiteninhalt zerstören. Dies geschieht bisweilen durch die Benutzung eines anonymen Proxy-Dienstes, der fehlerhaft arbeitet.'''",
+ "edit_form_incomplete": "'''Der Inhalt des Bearbeitungsformulars hat den Server nicht vollständig erreicht. Bitte prüfen Sie Ihre Bearbeitungen auf Vollständigkeit und versuchen Sie es erneut.'''",
+ "explainconflict": "Jemand anders hat diese Seite geändert, nachdem Sie angefangen haben, sie zu bearbeiten.\nDas obere Textfeld enthält den aktuellen Bearbeitungsstand der Seite.\nDas untere Textfeld enthält Ihre Änderungen.\nBitte fügen Sie Ihre Änderungen in das obere Textfeld ein.\n'''Nur''' der Inhalt des oberen Textfeldes wird gespeichert, wenn Sie auf „{{int:savearticle}}“ klicken.",
+ "yourtext": "Ihr Text",
+ "nonunicodebrowser": "'''Achtung: Ihr Browser kann Unicode-Zeichen nicht richtig verarbeiten.''' Es wird eine Hilfsroutine eingesetzt, um Ihnen zu erlauben, Seiten sicher zu bearbeiten: Nicht-ASCII-Zeichen werden dabei im Bearbeitungsfenster als hexadezimale Codes angezeigt.",
+ "editingold": "'''Achtung: Sie bearbeiten eine alte Version dieser Seite. Sofern Sie sie speichern, werden alle neueren Versionen überschrieben.'''",
+ "copyrightwarning": "'''Bitte kopieren Sie keine Webseiten, die nicht Ihre eigenen sind, benutzen Sie keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />\nSie geben uns hiermit Ihre Zusage, dass Sie den Text '''selbst verfasst''' haben, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weisen Sie bitte auf der Diskussionsseite darauf hin.\n<i>Bitte beachten Sie, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Einzelheiten). Falls Sie nicht möchten, dass Ihre Arbeit hier von anderen verändert und verbreitet wird, dann klicken Sie nicht auf „Seite speichern“.</i>",
+ "copyrightwarning2": "Bitte beachten Sie, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.\nReichen Sie keine Texte ein, falls Sie nicht wollen, dass diese ohne Einschränkung geändert werden können.\n\nSie bestätigen hiermit auch, dass Sie diese Texte selbst geschrieben haben oder diese von einer gemeinfreien Quelle kopiert haben\n(weitere Einzelheiten unter $1). '''ÜBERTRAGEN SIE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
+ "longpageerror": "'''Fehler: Der Text, den Sie zu speichern versuchen, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobyte}} groß. Dies ist größer als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobyte}}.'''\nEr kann nicht gespeichert werden.",
+ "readonlywarning": "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass Ihre Änderungen derzeit nicht gespeichert werden können.\nSichern Sie den Text bitte lokal auf Ihrem Computer und versuchen Sie zu einem späteren Zeitpunkt, die Änderungen zu übertragen.'''\n\nGrund für die Sperre: $1",
+ "nocreatetext": "Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Sie können bestehende Seiten ändern oder sich [[Special:UserLogin|anmelden]].",
+ "nocreate-loggedin": "Sie haben nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.",
+ "permissionserrorstext": "Sie sind nicht berechtigt, die Aktion auszuführen. {{PLURAL:$1|Grund|Gründe}}:",
+ "permissionserrorstext-withaction": "Sie sind nicht berechtigt, $2.\n{{PLURAL:$1|Grund|Gründe}}:",
+ "recreate-moveddeleted-warn": "'''Achtung: Sie erstellen eine Seite, die bereits früher gelöscht wurde.'''\n\nBitte prüfen Sie sorgfältig, ob die erneute Seitenerstellung den Richtlinien entspricht.\nZu Ihrer Information folgt das Lösch- und Verschiebungs-Logbuch mit der Begründung für die vorhergehende Löschung:",
+ "edit-no-change": "Ihre Bearbeitung wurde ignoriert, da keine Änderung an dem Text vorgenomme wurde.",
+ "postedit-confirmation-saved": "Ihre Bearbeitung wurde gespeichert.",
+ "editwarning-warning": "Das Verlassen dieser Seite kann dazu führen, dass Ihre Änderungen verloren gehen.\nWenn Sie angemeldet sind, können Sie das Anzeigen dieser Warnung im „{{int:prefs-editing}}“-Bereich Ihrer Einstellungen abschalten.",
+ "undo-success": "Die Bearbeitung kann rückgängig gemacht werden.\nBitte prüfen Sie den Vergleich unten, um sicherzustellen, dass Sie dies tun möchten, und speichern Sie dann unten Ihre Änderungen, um die Bearbeitung rückgängig zu machen.",
+ "history-feed-empty": "Die angeforderte Seite existiert nicht. Vielleicht wurde sie gelöscht oder verschoben. [[Special:Search|Durchsuchen Sie]] {{SITENAME}} nach passenden neuen Seiten.",
+ "rev-deleted-text-unhide": "Diese Version wurde '''gelöscht'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].\nSie können [$1 diese Version einsehen], sofern Sie möchten.",
+ "rev-suppressed-text-unhide": "Diese Version wurde '''unterdrückt'''.\nNähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].\nSie können [$1 diese Version einsehen], sofern Sie möchten.",
+ "rev-deleted-text-view": "Diese Version wurde '''gelöscht'''.\nSie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
+ "rev-suppressed-text-view": "Diese Version wurde '''unterdrückt'''.\nSie können sie einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
+ "rev-deleted-no-diff": "Sie können diesen Unterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.\nDetails stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
+ "rev-suppressed-no-diff": "Sie können diesen Versionsunterschied nicht betrachten, da eine der Versionen '''gelöscht''' wurde.",
+ "rev-deleted-unhide-diff": "Eine der Versionen dieses Versionsunterschieds wurde '''gelöscht'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].\nSie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
+ "rev-suppressed-unhide-diff": "Eine der Versionen dieses Versionsunterschieds wurde '''unterdrückt'''.\nNähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].\nSie können [$1 diesen Versionsunterschied einsehen], sofern Sie möchten.",
+ "rev-deleted-diff-view": "Eine Version dieses Versionsunterschieds wurde '''gelöscht'''.\nSie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
+ "rev-suppressed-diff-view": "Eine der Versionen dieses Versionsunterschiedes wurde '''unterdrückt'''.\nSie können diesen Versionsunterschied einsehen, sofern Sie möchten. Nähere Angaben stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückungs-Logbuch].",
+ "revdelete-nooldid-text": "Sie haben entweder keine Version angegeben, auf die diese Aktion ausgeführt werden soll, die gewählte Version ist nicht vorhanden oder Sie versuchen, die aktuelle Version zu entfernen.",
+ "revdelete-show-file-confirm": "Sind Sie sicher, dass Sie die gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2 um $3 Uhr ansehen wollen?",
+ "revdelete-confirm": "Bitte bestätigen Sie, dass Sie beabsichtigen, dies zu tun, die Konsequenzen verstehen und es in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] tun.",
+ "revdelete-show-no-access": "Fehler beim Anzeigen des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.\nSie haben darauf keinen Zugriff.",
+ "revdelete-modify-no-access": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Dieser Eintrag wurde als „eingeschränkt“ markiert.\nSie haben darauf keinen Zugriff.",
+ "revdelete-concurrent-change": "Fehler beim Bearbeiten des Eintrags vom $1, $2 Uhr: Es scheint, als ob der Status von jemandem geändert wurde, bevor Sie vorhatten, ihn zu bearbeiten.\nBitte prüfen Sie die Logbücher.",
+ "revdelete-only-restricted": "Fehler beim Verstecken des Eintrags vom $1, $2 Uhr: Sie können keinen Eintrag vor Administratoren verstecken, ohne eine der anderen Ansichtsoptionen gewählt zu haben.",
+ "mergehistory-header": "Mit dieser Spezialseite können Sie die Versionsgeschichte einer Ursprungsseite mit der Versionsgeschichte einer Zielseite vereinen.\nStellen Sie sicher, dass die Versionsgeschichte einer Seite historisch korrekt ist.",
+ "mergehistory-merge": "Die folgenden Versionen von „[[:$1]]“ können nach „[[:$2]]“ übertragen werden. Markieren Sie die Version, bis zu der (einschließlich) die Versionen übertragen werden sollen. Bitte beachten Sie, dass die Nutzung der Navigationslinks die Auswahl zurücksetzt.",
+ "mergehistory-fail": "Versionsvereinigung nicht möglich, bitte prüfen Sie die Seite und die Zeitangaben.",
+ "searchmenu-new": "<strong>Erstellen Sie die Seite „[[:$1]]“ in diesem Wiki.</strong> {{PLURAL:$2|0=|Siehe auch die über Ihre Suche gefundene Seite.|Siehe auch die gefundenen Suchergebnisse.}}",
+ "search-suggest": "Meinten Sie „$1“?",
+ "search-nonefound": "Für Ihre Suchanfrage wurden keine Ergebnisse gefunden.",
+ "searchdisabled": "Die {{SITENAME}} Suche wurde deaktiviert. Sie können unterdessen mit Google suchen. Bitte bedenken Sie, dass der Suchindex von {{SITENAME}} veraltet sein kann.",
+ "prefsnologintext2": "Sie müssen sich $1, um Ihre Benutzereinstellungen festzulegen.",
+ "prefs-help-watchlist-token2": "Dies ist der geheime Schlüssel zum Webfeed Ihrer Beobachtungsliste.\nJeder, der ihn kennt, kann Ihre Beobachtungsliste lesen. Teilen Sie ihn deshalb nicht Anderen mit.\nSofern notwendig, [[Special:ResetTokens|können Sie ihn zurücksetzen]].",
+ "savedprefs": "Ihre Einstellungen wurden gespeichert.",
+ "prefs-reset-intro": "Sie können diese Seite verwenden, um die Einstellungen auf die Standards zurückzusetzen.\nDies kann nicht mehr rückgängig gemacht werden.",
+ "yourgender": "Welches Geschlecht haben Sie?",
+ "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um Sie anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
+ "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann Ihr bürgerlicher Name Ihren Beiträgen zugeordnet werden.",
+ "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern Sie Ihr Passwort vergessen haben.",
+ "prefs-help-email-others": "Mit anderen Benutzern können Sie auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass Sie Ihre Identität offenlegen müssen.",
+ "prefs-help-prefershttps": "Diese Einstellung wird bei Ihrer nächsten Anmeldung wirksam.",
+ "userrights-groups-help": "Sie können die Gruppenzugehörigkeit dieses Benutzers ändern:\n* Ein markiertes Kästchen bedeutet, dass der Benutzer Mitglied dieser Gruppe ist.\n* Ein nichtmarkiertes Kästchen bedeutet, dass der Benutzer nicht Mitglied dieser Gruppe ist.\n* Ein * bedeutet, dass Sie das Benutzerrecht nach Erteilung nicht wieder zurücknehmen können (oder umgekehrt).",
+ "userrights-no-interwiki": "Sie haben nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.",
+ "userrights-nologin": "Sie müssen sich mit einem Administrator-Benutzerkonto [[Special:UserLogin|anmelden]], um Benutzerrechte zu ändern.",
+ "userrights-notallowed": "Sie verfügen nicht über die erforderlichen Berechtigungen, um Benutzerrechte vergeben oder entziehen zu können.",
+ "userrights-changeable-col": "Gruppenzugehörigkeit, die Sie ändern dürfen",
+ "userrights-unchangeable-col": "Gruppenzugehörigkeit, die Sie nicht ändern dürfen",
+ "recentchanges-summary": "Auf dieser Seite können Sie die letzten Änderungen in diesem Wiki nachverfolgen.",
+ "recentchanges-feed-description": "Verfolgen Sie mit diesem Feed die letzten Änderungen in {{SITENAME}}.",
+ "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. bei Kategorien an den Mitgliedern dieser Kategorie).\nSeiten auf Ihrer [[Special:Watchlist|Beobachtungsliste]] sind '''fett''' dargestellt.",
+ "uploadnologintext": "Sie müssen sich $1 um Dateien hochladen zu können.",
+ "uploadtext": "Benutzen Sie dieses Formular, um neue Dateien hochzuladen.\n\nGehen Sie zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutzen Sie einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit „Alternativer Text“ als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
+ "illegalfilename": "Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benennen Sie die Datei um und versuchen Sie, sie erneut hochzuladen.",
+ "empty-file": "Die von Ihnen übertragene Datei hat keinen Inhalt.",
+ "emptyfile": "Die hochgeladene Datei ist leer. Der Grund kann ein Tippfehler im Dateinamen sein. Bitte kontrollieren Sie, ob Sie die Datei wirklich hochladen wollen.",
+ "fileexists": "Eine Datei dieses Namens ist bereits vorhanden. Bitte prüfen Sie <strong>[[:$1]]</strong>, sofern Sie sich nicht sicher sind, ob Sie sie ändern möchten.\n[[$1|thumb]]",
+ "filepageexists": "Eine Beschreibungsseite wurde bereits als <strong>[[:$1]]</strong> erstellt, es ist aber keine Datei mit diesem Namen vorhanden.\nDie eingegebene Beschreibung wird nicht auf die Beschreibungsseite übernommen.\nDie Beschreibungsseite müssen Sie nach dem Hochladen der Datei noch manuell bearbeiten.\n[[$1|thumb]]",
+ "fileexists-extension": "Eine Datei ähnlichen Namens ist bereits vorhanden: [[$2|thumb]]\n* Name der hochzuladenden Datei: <strong>[[:$1]]</strong>\n* Name der vorhandenen Datei: <strong>[[:$2]]</strong>\nBitte wählen Sie einen anderen Namen.",
+ "fileexists-thumbnail-yes": "Bei der Datei scheint es sich um ein Bild verringerter Größe ''(Minitatur)'' zu handeln. [[$1|thumb]]\nBitte prüfen Sie die Datei <strong>[[:$1]]</strong>.\nWenn es sich um das Bild in Originalgröße handelt, so braucht kein separates Vorschaubild hochgeladen zu werden.",
+ "file-thumbnail-no": "Der Dateiname beginnt mit <strong>$1</strong>. Dies deutet auf ein Bild verringerter Größe ''(Miniatur)'' hin.\nBitte prüfen Sie, ob Sie das Bild in voller Auflösung vorliegen haben und laden dieses unter dem Originalnamen hoch.",
+ "fileexists-forbidden": "Unter diesem Namen existiert bereits eine Datei und sie kann nicht überschrieben werden. Bitte gehen Sie zurück und laden Sie die Datei unter einem anderen Namen hoch. [[File:$1|thumb|center|$1]]",
+ "fileexists-shared-forbidden": "Unter diesem Namen existiert bereits eine Datei im zentralen Medienarchiv.\nWenn Sie diese Datei trotzdem hochladen möchten, gehen Sie bitte zurück und ändern den Namen.\n[[File:$1|thumb|center|$1]]",
+ "file-deleted-duplicate": "Eine mit dieser identische Datei ([[:$1]]) wurde früher gelöscht. Sehen Sie das Lösch-Logbuch ein, bevor Sie sie hochladen.",
+ "uploadwarning-text": "Bitte ändern Sie unten die Dateibeschreibung und versuchen Sie es erneut.",
+ "php-uploaddisabledtext": "Das Hochladen von Dateien wurde in PHP deaktiviert.\nBitte überprüfen Sie die <code>file_uploads</code>-Einstellung.",
+ "filewasdeleted": "Eine Datei mit diesem Namen wurde schon einmal hochgeladen und zwischenzeitlich wieder gelöscht. Bitte prüfen Sie zuerst den Eintrag im $1, bevor Sie die Datei wirklich speichern.",
+ "filename-bad-prefix": "Der Dateiname beginnt mit '''„$1“'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.\nBitte geben Sie der Datei einen Namen, der den Inhalt besser beschreibt.",
+ "upload-file-error-text": "Bei der Erstellung einer temporären Datei auf dem Server ist ein interner Fehler aufgetreten.\nBitte informieren Sie einen [[Special:ListUsers/sysop|Administrator]].",
+ "upload-misc-error-text": "Beim Hochladen ist ein unbekannter Fehler aufgetreten.\nPrüfen Sie die URL auf Fehler, den Online-Status der Seite und versuchen es erneut.\nWenn das Problem weiter besteht, informieren Sie einen [[Special:ListUsers/sysop|Administrator]].",
+ "uploadstash-badtoken": "Das Entfernen der vorab gespeicherten Dateien war erfolglos, vielleicht weil Ihre Sitzungsdaten abgelaufen sind. Bitte versuchen Sie es erneut.",
+ "img-auth-nopathinfo": "PATH_INFO fehlt.\nIhr Server ist nicht dafür eingerichtet, diese Information weiterzugeben.\nSie könnte CGI-gestützt sein und kann daher img_auth nicht ermöglichen.\nSiehe auch http://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+ "img-auth-nologinnWL": "Sie sind nicht angemeldet und „$1“ ist nicht in der weißen Liste.",
+ "img-auth-isdir": "Sie versuchen, auf ein Verzeichnis „$1“ zuzugreifen.\nNur Dateizugriff ist erlaubt.",
+ "upload-curl-error6-text": "Die angegebene URL ist nicht erreichbar. Prüfen Sie sowohl die URL auf Fehler als auch den Online-Status der Seite.",
+ "upload-curl-error28-text": "Die Seite braucht zu lange, um zu antworten. Prüfen Sie, ob die Seite online ist, warten Sie einen kurzen Moment und versuchen Sie es dann erneut. Es kann sinnvoll sein, es zu einem anderen Zeitpunkt erneut zu versuchen.",
+ "upload_source_file": " (eine Datei auf Ihrem Computer)",
+ "filehist-help": "Klicken Sie auf einen Zeitpunkt, um diese Version zu laden.",
+ "sharedupload-desc-edit": "Diese Datei stammt aus $1 und kann auf anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
+ "sharedupload-desc-create": "Diese Datei stammt aus $1 und kann von anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
+ "filepage-nofile-link": "Es ist keine Datei dieses Namens vorhanden. Sie können jedoch [$1 diese Datei hochladen].",
+ "filerevert-intro": "Sie setzen die Datei '''[[Media:$1|$1]]''' auf die [$4 Version vom $2, $3 Uhr] zurück.",
+ "filedelete-intro": "Sie löschen die Datei '''„[[Media:$1|$1]]“''' inklusive ihrer Versionsgeschichte.",
+ "filedelete-intro-old": "Sie löschen von der Datei '''„[[Media:$1|$1]]“''' die [$4 Version vom $2, $3 Uhr].",
+ "unusedtemplatestext": "Diese Seite listet alle Seiten im {{ns:template}}-Namensraum auf, die nicht in anderen Seiten eingebunden sind.\nÜberprüfen Sie andere Links zu den Vorlagen, bevor Sie diese löschen.",
+ "unusedimagestext": "Bitte beachten Sie, dass andere Webseiten eine Datei mit einer direkten URL verlinken können. Sie könnte daher hier aufgelistet sein, obwohl sie in aktiver Verwendung ist.",
+ "notargettext": "Sie haben nicht angegeben, auf welche Seite diese Funktion angewendet werden soll.",
+ "booksources-invalid-isbn": "Vermutlich ist die ISBN ungültig.\nBitte prüfen Sie, ob sie korrekt von der Quelle übertragen wurde.",
+ "cachedspecial-viewing-cached-ttl": "Sie sehen die gecachte Version dieser Seite, die bis zu $1 alt sein kann.",
+ "cachedspecial-viewing-cached-ts": "Sie sehen die gecachte Version dieser Seite, die möglicherweise nicht aktuell ist.",
+ "mailnologintext": "Sie müssen [[Special:UserLogin|angemeldet sein]] und eine bestätigte E-Mail-Adresse in Ihren [[Special:Preferences|Einstellungen]] eingetragen haben, um anderen Benutzern E-Mails schicken zu können.",
+ "emailpagetext": "Sie können {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular eine E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus Ihren [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} Ihnen direkt antworten kann.",
+ "emailccsubject": "Kopie Ihrer Nachricht an $1: $2",
+ "emailsenttext": "Ihre E-Mail wurde verschickt.",
+ "nowatchlist": "Es befinden sich keine Einträge auf Ihrer Beobachtungsliste.",
+ "watchlistanontext": "Sie müssen sich $1, um Ihre Beobachtungsliste sehen oder Einträge auf ihr bearbeiten zu können.",
+ "watchnologin": "Sie sind nicht angemeldet",
+ "addedwatchtext": "Die Seite „[[:$1]]“ wurde zu Ihrer [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\n\nSpätere Änderungen an dieser Seite und der dazugehörigen Diskussionsseite werden dort gelistet.",
+ "removedwatchtext": "Die Seite „[[:$1]]“ wurde von Ihrer [[Special:Watchlist|Beobachtungsliste]] entfernt.",
+ "watchlist-details": "Sie beobachten {{PLURAL:$1|1 Seite|$1 Seiten}}.",
+ "enotif_body": "Hallo $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nZusammenfassung des Bearbeiters: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt zum Bearbeiter:\nE-Mail: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nBei weiterer Aktivität auf der Seite werden Ihnen so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis Sie die Seite wieder angemeldet besucht haben.\nAuf Ihrer Beobachtungsliste können Sie alle Benachrichtigungsmarkierungen zusammen zurücksetzen.\n\nIhr freundliches {{SITENAME}}-Benachrichtigungssystem\n\n--\nUm die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuchen Sie {{canonicalurl:{{#special:Preferences}}}}.\n\nUm die Einstellungen Ihrer Beobachtungsliste anzupassen, besuchen Sie {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nUm diese Seite von Ihrer Beobachtungsliste zu entfernen, besuchen Sie $UNWATCHURL.\n\nRückmeldungen und weitere Hilfe: $HELPPAGE",
+ "historywarning": "'''Achtung:''' Die Seite, die Sie löschen möchten, hat eine Versionsgeschichte mit etwa $1 {{PLURAL:$1|Version|Versionen}}:",
+ "confirmdeletetext": "Sie sind dabei, eine Seite mit allen zugehörigen älteren Versionen zu löschen. Bitte bestätigen Sie, dass Sie sich der Konsequenzen bewusst sind, und dass Sie in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] handeln.",
+ "deletedtext": "„$1“ wurde gelöscht. Im $2 finden Sie eine Liste der letzten Löschungen.",
+ "sessionfailure": "Es gab ein Problem bei der Übertragung Ihrer Benutzerdaten.\nDiese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung Ihrer Änderungen zu einem anderen Benutzer zu verhindern.\nBitte gehen Sie zurück zur vorherigen Seite, laden Sie sie erneut und versuchen Sie, den Vorgang erneut auszuführen.",
+ "protect-text": "Hier können Sie den Schutzstatus der Seite „$1“ einsehen und ändern.",
+ "protect-locked-blocked": "Sie können den Seitenschutz nicht ändern, da Ihr Benutzerkonto gesperrt ist. Hier sind die aktuellen Seitenschutz-Einstellungen der Seite '''„$1“:'''",
+ "protect-locked-access": "Ihr Benutzerkonto verfügt nicht über die notwendigen Rechte zur Änderung des Seitenschutzes. Hier sind die aktuellen Seitenschutzeinstellungen für die Seite '''„$1“:'''",
+ "protect-cantedit": "Sie können die Sperre dieser Seite nicht ändern, da Sie keine Berechtigung zum Bearbeiten der Seite haben.",
+ "undeleteextrahelp": "* Um die Seite mitsamt aller Versionen wiederherzustellen, wählen Sie keine Version aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.\n* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wählen Sie die betreffenden Versionen einzeln aus, geben eine Begründung an und klicken dann auf „{{int:undeletebtn}}“.",
+ "undeletehistory": "Wenn Sie diese Seite wiederherstellen, werden auch alle alten Versionen wiederhergestellt.\nWenn seit der Löschung eine neue Seite gleichen Namens erstellt wurde, werden die wiederhergestellten Versionen chronologisch in die Versionsgeschichte eingeordnet.",
+ "undeleterevdel": "Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält.\nIn diesem Fall darf die aktuellste Version nicht markiert werden oder ihr Status muss auf den einer normalen Version geändert werden.\nVersionen von Dateien, auf die Sie keinen Zugriff haben, werden nicht wiederhergestellt.",
+ "undeletedpage": "'''$1''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] finden Sie eine Übersicht der gelöschten und wiederhergestellten Seiten.",
+ "undelete-show-file-confirm": "Sind Sie sicher, dass Sie eine gelöschte Version der Datei „<nowiki>$1</nowiki>“ vom $2, $3 Uhr sehen wollen?",
+ "tooltip-namespace_association": "Dieses Auswahlfeld anklicken, um den Ihrer Auswahl zugehörigen Diskussionsnamensraum, oder im umgekehrten Fall, den zugehörigen Namensraum, mit einzubeziehen",
+ "blockiptext": "Mit diesem Formular sperren Sie eine IP-Adresse oder einen Benutzernamen, so dass von dort keine Änderungen mehr vorgenommen werden können.\nDies sollte nur erfolgen, um Vandalismus zu verhindern und in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]].\nBitte geben Sie den Grund für die Sperre an.",
+ "ipb-blockingself": "Sie sind gerade dabei, sich selbst zu sperren! Möchten Sie das wirklich tun?",
+ "ipb-confirmhideuser": "Sie sind gerade dabei, einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchten Sie das wirklich tun?",
+ "unblockiptext": "Mit diesem Formular können Sie eine IP-Adresse oder einen Benutzer freigeben.",
+ "autoblocker": "Automatische Sperre, da Sie eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzen. Der bei der Sperren von „$1“ angegebene Grund lautet: „$2“.",
+ "ipb-needreblock": "„$1“ ist bereits gesperrt. Möchten Sie die Sperrparameter ändern?",
+ "proxyblockreason": "Ihre IP-Adresse wurde gesperrt, da sie ein offener Proxy ist. Bitte kontaktieren Sie Ihren Internet-Provider oder Ihre Systemadministratoren und informieren Sie sie über dieses mögliche Sicherheitsproblem.",
+ "cant-see-hidden-user": "Der Benutzer, den Sie versuchen zu sperren, wurde bereits gesperrt und verborgen. Da Sie das „hideuser“-Recht nicht haben, können Sie die Benutzersperre nicht sehen und nicht bearbeiten.",
+ "ipbblocked": "Sie können keine anderen Benutzer sperren oder entsperren, da Sie selbst gesperrt sind",
+ "ipbnounblockself": "Sie haben nicht die Berechtigung, sich selbst zu entsperren",
+ "locknoconfirm": "Sie haben das Bestätigungsfeld nicht markiert.",
+ "lockdbsuccesstext": "Die {{SITENAME}}-Datenbank wurde gesperrt.<br />Bitte geben Sie die Datenbank [[Special:UnlockDB|wieder frei]], sobald die Wartung abgeschlossen ist.",
+ "movepagetext": "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.\nDer alte Titel wird danach zum neuen weiterleiten.\nSie können Weiterleitungen, die auf den Originaltitel verlinken, automatisch korrigieren lassen.\nStellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfen.\nSie sind dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, letztere ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie einen Fehler gemacht haben. Sie können hingegen keine existierende Seite überschreiben.\n\n'''Warnung!'''\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nSie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.",
+ "movepagetext-noredirectfixer": "Mit untenstehendem Formular können Sie eine Seite umbenennen, indem Sie sie mitsamt allen Versionen auf einen neuen Titel verschieben.\nDer alte Titel wird danach zum neuen weiterleiten.\nStellen Sie sicher, dass Sie im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfen.\nSie sind dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird '''nicht''' verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass Sie die Umbenennung rückgängig machen können, sofern Sie einen Fehler gemacht haben. Sie können hingegen keine existierende Seite überschreiben.\n\n'''Warnung!'''\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nSie sollten daher die Konsequenzen verstanden haben, bevor Sie jetzt fortfahren.",
+ "movepagetalktext": "Die dazugehörige Diskussionsseite wird, sofern vorhanden, mitverschoben, '''es sei denn:'''\n*Es existiert bereits eine Diskussionsseite mit diesem Namen, oder\n*Sie wählen die unten stehende Option ab.\n\nIn diesen Fällen müssen Sie, falls gewünscht, den Inhalt der Seite von Hand verschieben oder zusammenführen.\n\nBitte den '''neuen''' Titel unter '''Ziel''' eintragen, darunter die Umbenennung bitte '''begründen.'''",
+ "moveuserpage-warning": "'''Warnung:''' Sie sind dabei, eine Benutzerseite zu verschieben. Bitte bedenken Sie, dass dadurch nur die Benutzerseite verschoben, '''nicht''' aber der Benutzer umbenannt wird.",
+ "movenologintext": "Sie müssen ein registrierter Benutzer und [[Special:UserLogin|angemeldet]] sein, um eine Seite zu verschieben.",
+ "movenotallowed": "Sie haben nicht die erforderliche Berechtigung, um Seiten verschieben zu können.",
+ "movenotallowedfile": "Sie haben nicht die erforderliche Berechtigung, um Dateien verschieben zu können.",
+ "cant-move-user-page": "Sie haben nicht die erforderliche Berechtigung, Benutzerhauptseiten verschieben zu können.",
+ "cant-move-to-user-page": "Sie haben nicht die Berechtigung, Seiten auf eine Benutzerseite zu verschieben (mit Ausnahme von Benutzerunterseiten).",
+ "articleexists": "Unter diesem Namen existiert bereits eine Seite. Bitte wählen Sie einen anderen Namen.",
+ "delete_and_move_text": "== Löschung erforderlich ==\n\nDie Seite „[[:$1]]“ existiert bereits. Möchten Sie diese löschen, um die Seite verschieben zu können?",
+ "file-exists-sharedrepo": "Der gewählte Dateiname wird bereits in einem gemeinsam genutzten Repositorium verwendet.\nBitte wählen Sie einen anderen Namen.",
+ "exporttext": "Mit dieser Spezialseite können Sie den Text inklusive der Versionsgeschichte einzelner Seiten in eine XML-Datei exportieren.\nDie Datei kann in ein anderes MediaWiki-Wiki über die [[Special:Import|Importfunktion]] eingespielt werden.\n\nTragen Sie den oder die entsprechenden Seitentitel in das folgende Textfeld ein (pro Zeile jeweils nur eine Seite).\n\nAlternativ ist der Export auch mit der Syntax [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] möglich, beispielsweise für die [[{{MediaWiki:Mainpage}}]].",
+ "allmessagestext": "Dies ist eine Liste der MediaWiki-Systemtexte.\nBitte besuchen Sie die Seiten [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki-Lokalisierung] und [//translatewiki.net translatewiki.net], sofern Sie sich an der Lokalisierung von MediaWiki beteiligen möchten.",
+ "import-interwiki-text": "Wählen Sie ein Wiki und eine Seite zum Importieren aus.\nDie Versionsdaten und Benutzernamen bleiben dabei erhalten.\nAlle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] protokolliert.",
+ "import-token-mismatch": "Verlust der Sessiondaten. Bitte versuchen Sie es erneut.",
+ "import-error-edit": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu bearbeiten.",
+ "import-error-create": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu erstellen.",
+ "javascripttest-pagetext-frameworks": "Bitte wählen Sie eine der folgenden Prüfumgebungen aus: $1",
+ "javascripttest-pagetext-skins": "Wählen Sie eine Benutzeroberfläche zur Durchführung der Tests aus:",
+ "tooltip-pt-userpage": "Ihre Benutzerseite",
+ "tooltip-pt-anonuserpage": "Benutzerseite der IP-Adresse, von der aus Sie Änderungen durchführen",
+ "tooltip-pt-mytalk": "Ihre Diskussionsseite",
+ "tooltip-pt-mycontris": "Liste Ihrer Beiträge",
+ "tooltip-n-mainpage": "Besuchen Sie die Hauptseite",
+ "tooltip-n-mainpage-description": "Besuchen Sie die Hauptseite",
+ "tooltip-n-portal": "Über das Projekt, was Sie tun können, wo was zu finden ist",
+ "tooltip-watch": "Diese Seite zu Ihrer Beobachtungsliste hinzufügen",
+ "tooltip-summary": "Geben Sie eine kurze Zusammenfassung ein.",
+ "spamprotectiontext": "Der Text, die Sie speichern wollen, wurde vom Spamschutzfilter blockiert.\nDas liegt wahrscheinlich an einem Link auf eine externe Seite.",
+ "markedaspatrollederrortext": "Sie müssen eine Seitenänderung auswählen.",
+ "mediawarning": "'''Warnung:''' Dieser Dateityp kann böswilligen Programmcode enthalten.\nDurch das Herunterladen und Öffnen der Datei kann Ihr Computer beschädigt werden.",
+ "confirmemail_noemail": "Sie haben keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|persönlichen Einstellungen]] eingetragen.",
+ "confirmemail_text": "{{SITENAME}} erfordert, dass Sie Ihre E-Mail-Adresse bestätigen (authentifizieren), bevor Sie die erweiterten E-Mail-Funktionen benutzen können. Klicken Sie bitte auf die unten stehende, mit „Bestätigungscode zuschicken“ beschriftete Schaltfläche, damit eine automatisch erstellte E-Mail an die angegebene Adresse geschickt wird. Diese E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem Sie diese Webseite in Ihrem Webbrowser öffnen, bestätigen Sie, dass die angegebene E-Mail-Adresse korrekt und gültig ist.",
+ "confirmemail_pending": "Es wurde Ihnen bereits ein Bestätigungscode per E-Mail zugeschickt.\nWenn Sie Ihr Benutzerkonto erst vor kurzem erstellt haben, warten Sie bitte noch ein paar Minuten auf die E-Mail, bevor Sie einen neuen Code anfordern.",
+ "confirmemail_oncreate": "Ein Bestätigungs-Code wurde an Ihre E-Mail-Adresse gesandt. Dieser Code wird für die Anmeldung nicht benötigt, jedoch wird er zur Aktivierung der E-Mail-Funktionen innerhalb des Wikis gebraucht.",
+ "confirmemail_sendfailed": "{{SITENAME}} konnte die Bestätigungs-E-Mail nicht an Sie versenden.\nBitte prüfen Sie die E-Mail-Adresse auf ungültige Zeichen.\n\nRückmeldung des Mailservers: $1",
+ "confirmemail_invalid": "Ungültiger Bestätigungscode. Möglicherweise ist der Bestätigungszeitraum verstrichen. Versuchen Sie bitte, die Bestätigung zu wiederholen.",
+ "confirmemail_needlogin": "Sie müssen sich $1, um Ihre E-Mail-Adresse zu bestätigen.",
+ "confirmemail_success": "Ihre E-Mail-Adresse wurde erfolgreich bestätigt. Sie können sich jetzt [[Special:UserLogin|anmelden]].",
+ "confirmemail_loggedin": "Ihre E-Mail-Adresse wurde erfolgreich bestätigt.",
+ "confirmemail_body": "Hallo,\n\njemand mit der IP-Adresse $1, wahrscheinlich Sie selbst, hat das Benutzerkonto „$2“ bei {{SITENAME}} registriert.\n\nUm die E-Mail-Funktionen von {{SITENAME}} (wieder) zu aktivieren und um zu bestätigen,\ndass dieses Benutzerkonto wirklich zu Ihrer E-Mail-Adresse und damit zu Ihnen gehört, öffnen Sie bitte folgenden Link in Ihrem Browser:\n\n$3\n\nWenn Sie das genannte Benutzerkonto *nicht* registriert haben, folgen Sie diesem Link, um den Bestätigungsprozess abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis zum $6, $7 Uhr.",
+ "confirmemail_body_set": "Jemand mit der IP-Adresse $1, wahrscheinlich Sie selbst,\nhat die E-Mail-Adresse des Benutzerkontos „$2“ auf {{SITENAME}} zu dieser E-Mail-Adresse abgeändert.\n\nUm zu bestätigen, dass dieses Benutzerkonto wirklich zu Ihnen gehört\nund um die E-Mail-Funktionen auf {{SITENAME}} zu aktivieren, öffnen Sie bitte den folgenden Link in Ihrem Browser:\n\n$3\n\nFalls das Konto *nicht* zu Ihnen gehört, bitte den nachfolgenden Link öffnen,\num die Bestätigung der E-Mail-Adresse abzubrechen:\n\n$5\n\nDieser Bestätigungscode ist gültig bis $4.",
+ "deletedwhileediting": "Achtung: Diese Seite wurde gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten!\nIm [{{fullurl:{{#special:Log}}|type=delete&page={{FULLPAGENAMEE}}}} Lösch-Logbuch] finden Sie den Grund für die Löschung.\nWenn Sie die Seite speichern, wird sie neu angelegt.",
+ "confirmrecreate": "Benutzer [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem Sie angefangen haben, sie zu bearbeiten. Die Begründung lautete:\n: ''$2''\nBitte bestätigen Sie, dass Sie diese Seite wirklich neu erstellen möchten.",
+ "watchlistedit-normal-explain": "Dies sind die Einträge Ihrer Beobachtungsliste. Um Einträge zu entfernen, markieren Sie die Kästchen neben den Einträgen und klicken Sie am Ende der Seite auf „{{int:Watchlistedit-normal-submit}}“. Sie können Ihre Beobachtungsliste auch im [[Special:EditWatchlist/raw|Listenformat bearbeiten]].",
+ "watchlistedit-normal-done": "{{PLURAL:$1|Ein Eintrag wurde|$1 Einträge wurden}} von Ihrer Beobachtungsliste entfernt:",
+ "watchlistedit-raw-explain": "Dies sind die Einträge Ihrer Beobachtungsliste im Listenformat. Die Einträge können zeilenweise gelöscht oder hinzugefügt werden.\nPro Zeile ist ein Eintrag erlaubt.\nSobald Sie fertig sind, klicken Sie auf „{{int:Watchlistedit-raw-submit}}“.\nSie können auch die [[Special:EditWatchlist|Standardseite]] zum Bearbeiten benutzen.",
+ "watchlistedit-raw-done": "Ihre Beobachtungsliste wurde gespeichert.",
+ "dberr-again": "Warten Sie einige Minuten und versuchen Sie dann neu zuladen.",
+ "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-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-thanks": "Vielen Dank. Ihre Rückmeldung wurde auf der Seite „[$2 $1]“ gespeichert.",
+ "feedback-bugcheck": "Super! Bitte überprüfen Sie noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.",
+ "api-error-badaccess-groups": "Sie haben nicht die Berechtigung Dateien in dieses Wiki hochzuladen.",
+ "api-error-hookaborted": "Die von Ihnen vorgesehene Anpassung kann nicht durchgeführt werden (Unterbrechung durch eine Programmschnittstelle).",
+ "api-error-mustbeloggedin": "Um Dateien hochladen zu können, müssen Sie angemeldet sein."
}
diff --git a/languages/i18n/de.json b/languages/i18n/de.json
index 1410b6c2..98a8f550 100644
--- a/languages/i18n/de.json
+++ b/languages/i18n/de.json
@@ -82,7 +82,7 @@
"tog-hideminor": "Kleine Änderungen in den „Letzten Änderungen“ ausblenden",
"tog-hidepatrolled": "Kontrollierte Änderungen in den „Letzten Änderungen“ ausblenden",
"tog-newpageshidepatrolled": "Kontrollierte Seiten bei den „Neuen Seiten“ ausblenden",
- "tog-extendwatchlist": "Beobachtungsliste erweitern, um statt nur der letzten Änderung alle Änderungen anzuzeigen.",
+ "tog-extendwatchlist": "Alle, und nicht nur die aktuellsten Änderungen in der Beobachtungsliste anzeigen",
"tog-usenewrc": "Änderungen auf „Letzte Änderungen“ und der Beobachtungsliste nach Seite gruppieren",
"tog-numberheadings": "Überschriften automatisch nummerieren",
"tog-showtoolbar": "Bearbeiten-Werkzeugleiste anzeigen",
@@ -92,10 +92,10 @@
"tog-watchdefault": "Selbst geänderte Seiten und Dateien automatisch beobachten",
"tog-watchmoves": "Selbst verschobene Seiten und Dateien automatisch beobachten",
"tog-watchdeletion": "Selbst gelöschte Seiten und Dateien automatisch beobachten",
- "tog-watchrollback": "Seiten, bei denen ich eine Zurücksetzung durchgeführt habe, der Beobachtungsliste hinzufügen.",
+ "tog-watchrollback": "Seiten, bei denen ich eine Zurücksetzung durchgeführt habe, automatisch beobachten",
"tog-minordefault": "Eigene Änderungen standardmäßig als geringfügig markieren",
"tog-previewontop": "Vorschau oberhalb des Bearbeitungsfensters anzeigen",
- "tog-previewonfirst": "Beim ersten Bearbeiten immer die Vorschau anzeigen",
+ "tog-previewonfirst": "Vorschau beim ersten Bearbeiten immer anzeigen",
"tog-enotifwatchlistpages": "Bei Änderungen an beobachteten Seiten oder Dateien E-Mails senden",
"tog-enotifusertalkpages": "Bei Änderungen an meiner Benutzer-Diskussionsseite E-Mails senden",
"tog-enotifminoredits": "Auch bei kleinen Änderungen an Seiten und Dateien E-Mails senden",
@@ -103,7 +103,7 @@
"tog-shownumberswatching": "Anzahl der beobachtenden Benutzer anzeigen",
"tog-oldsig": "Vorhandene Signatur:",
"tog-fancysig": "Signatur als Wikitext behandeln (ohne automatische Verlinkung)",
- "tog-uselivepreview": "Vorschau sofort anzeigen (experimentell)",
+ "tog-uselivepreview": "Vorschau sofort anzeigen",
"tog-forceeditsummary": "Warnen, sofern beim Speichern die Zusammenfassung fehlt",
"tog-watchlisthideown": "Eigene Bearbeitungen in der Beobachtungsliste ausblenden",
"tog-watchlisthidebots": "Bearbeitungen durch Bots in der Beobachtungsliste ausblenden",
@@ -113,7 +113,7 @@
"tog-watchlisthidepatrolled": "Kontrollierte Änderungen in der Beobachtungsliste ausblenden",
"tog-ccmeonemails": "Schicke mir Kopien der E-Mails, die ich anderen Benutzern sende",
"tog-diffonly": "Beim Versionsvergleich nur die Unterschiede und nicht die vollständige Seite anzeigen",
- "tog-showhiddencats": "Anzeige versteckter Kategorien",
+ "tog-showhiddencats": "Versteckte Kategorien anzeigen",
"tog-norollbackdiff": "Unterschied nach dem Zurücksetzen unterdrücken",
"tog-useeditwarning": "Warnen, sofern eine zur Bearbeitung geöffnete Seite verlassen wird, die nicht gespeicherte Änderungen enthält",
"tog-prefershttps": "Wenn angemeldet, immer eine sichere Verbindung benutzen.",
@@ -291,6 +291,7 @@
"pool-queuefull": "Poolwarteschlange ist voll",
"pool-errorunknown": "Unbekannter Fehler",
"pool-servererror": "Der Poolzählerdienst ist nicht verfügbar ($1).",
+ "poolcounter-usage-error": "Verwendungsfehler: $1",
"aboutsite": "Über {{SITENAME}}",
"aboutpage": "Project:Über_{{SITENAME}}",
"copyright": "Der Inhalt ist verfügbar unter der Lizenz $1, sofern nicht anders angegeben.",
@@ -300,6 +301,7 @@
"disclaimers": "Impressum",
"disclaimerpage": "Project:Impressum",
"edithelp": "Bearbeitungshilfe",
+ "helppage-top-gethelp": "Hilfe",
"mainpage": "Hauptseite",
"mainpage-description": "Hauptseite",
"policy-url": "Project:Richtlinien",
@@ -379,10 +381,13 @@
"readonly_lag": "Die Datenbank wurde automatisch für Schreibzugriffe gesperrt, damit sich die verteilten Datenbankserver (slaves) mit dem Hauptdatenbankserver (master) abgleichen können.",
"internalerror": "Interner Fehler",
"internalerror_info": "Interner Fehler: $1",
+ "internalerror-fatal-exception": "Fataler Ausnahmefehler des Typs „$1“",
"filecopyerror": "Die Datei „$1“ konnte nicht nach „$2“ kopiert werden.",
"filerenameerror": "Die Datei „$1“ konnte nicht nach „$2“ umbenannt werden.",
"filedeleteerror": "Die Datei „$1“ konnte nicht gelöscht werden.",
"directorycreateerror": "Das Verzeichnis „$1“ konnte nicht angelegt werden.",
+ "directoryreadonlyerror": "Das Wörterbuch „$1“ ist schreibgeschützt.",
+ "directorynotreadableerror": "Das Wörterbuch „$1“ ist nicht lesbar.",
"filenotfound": "Die Datei „$1“ wurde nicht gefunden.",
"unexpected": "Unerwarteter Wert: „$1“ = „$2“",
"formerror": "Fehler: Die Eingaben konnten nicht verarbeitet werden.",
@@ -404,7 +409,8 @@
"viewsourcetext": "Du kannst den Quelltext dieser Seite betrachten und kopieren:",
"viewyourtext": "Du kannst den Quelltext '''deiner Bearbeitung''' dieser Seite betrachten und kopieren:",
"protectedinterface": "Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
- "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+ "editinginterface": "<strong>Warnung:</strong> Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.",
+ "translateinterface": "Um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern, verwende bitte [//translatewiki.net/ translatewiki.net], das MediaWiki-Lokalisierungsprojekt.",
"cascadeprotected": "Diese Seite ist zur Bearbeitung gesperrt. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:\n$2",
"namespaceprotected": "Du hast nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
"customcssprotected": "Du hast nicht die Berechtigung, diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.",
@@ -412,7 +418,7 @@
"mycustomcssprotected": "Du hast keine Berechtigung, diese CSS-Seite zu bearbeiten.",
"mycustomjsprotected": "Du hast keine Berechtigung, diese JavaScript-Seite zu bearbeiten.",
"myprivateinfoprotected": "Du hast keine Berechtigung, deine privaten Informationen zu bearbeiten.",
- "mypreferencesprotected": "Du hast keine Berechtigung, deine Einstellungen zu bearbeiten.",
+ "mypreferencesprotected": "Du bist nicht berechtigt, deine Einstellungen zu ändern.",
"ns-specialprotected": "Spezialseiten können nicht bearbeitet werden.",
"titleprotected": "Eine Seite mit diesem Namen kann nicht angelegt werden.\nDie Sperre wurde durch [[User:$1|$1]] mit der Begründung „<em>$2</em>“ eingerichtet.",
"filereadonlyerror": "Die Datei „$1“ kann nicht verändert werden, da auf das Dateirepositorium „$2“ nur Lesezugriff möglich ist.\n\nDer Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: „$3“.",
@@ -461,6 +467,8 @@
"userlogin-resetlink": "Die Anmeldedaten vergessen?",
"userlogin-resetpassword-link": "Passwort vergessen?",
"userlogin-helplink2": "Hilfe beim Anmelden",
+ "userlogin-loggedin": "Du bist bereits als {{GENDER:$1|$1}} angemeldet.\nBenutze das unten stehende Formular, um dich unter einem anderen Benutzernamen anzumelden.",
+ "userlogin-createanother": "Ein weiteres Benutzerkonto erstellen",
"createacct-emailrequired": "E-Mail-Adresse",
"createacct-emailoptional": "E-Mail-Adresse (optional)",
"createacct-email-ph": "Gib deine E-Mail-Adresse ein",
@@ -496,6 +504,7 @@
"wrongpassword": "Das Passwort ist falsch. Bitte versuche es erneut.",
"wrongpasswordempty": "Es wurde kein Passwort eingegeben. Bitte versuche es erneut.",
"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.",
"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",
@@ -618,13 +627,15 @@
"showpreview": "Vorschau zeigen",
"showdiff": "Änderungen zeigen",
"blankarticle": "<strong>Warnung:</strong> Die Seite, die du erstellst, ist leer.\nWenn du erneut auf „{{int:savearticle}}“ klickst, wird die Seite ohne Inhalt erstellt.",
- "anoneditwarning": "<strong>Warnung:</strong> Du bist nicht angemeldet. Deine IP-Adresse wird öffentlich sichtbar, falls du Bearbeitungen durchführst. Wenn du dich <strong>[$1 anmeldest]</strong> oder <strong>[$2 ein Benutzerkonto erstellst]</strong>, werden deine Bearbeitungen zusammen mit anderen Beiträgen deinem Benutzernamen zugeordnet.",
+ "anoneditwarning": "<strong>Warnung:</strong> Du bist nicht angemeldet. Deine IP-Adresse wird öffentlich sichtbar, falls du Bearbeitungen durchführst. Sofern du dich <strong>[$1 anmeldest]</strong> oder <strong>[$2 ein Benutzerkonto erstellst]</strong>, werden deine Bearbeitungen zusammen mit anderen Beiträgen deinem Benutzernamen zugeordnet.",
"anonpreviewwarning": "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''",
"missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
+ "selfredirect": "<strong>Warnung:</strong> Du leitest auf diese Seite selbst weiter.\nDu hast vermutlich das falsche Weiterleitungsziel angegeben oder du bearbeitest die falsche Seite.\nWenn du erneut auf „{{int:savearticle}}“ klickst, wird die Weiterleitung dennoch erstellt.",
"missingcommenttext": "Dein Abschnitt enthält keinen Text.",
"missingcommentheader": "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
"summary-preview": "Vorschau der Zusammenfassungszeile:",
"subject-preview": "Vorschau der Zusammenfassungszeile:",
+ "previewerrortext": "Beim Versuch, eine Vorschau deiner Änderungen anzuzeigen, ist ein Fehler aufgetreten.",
"blockedtitle": "Benutzer ist gesperrt",
"blockedtext": "'''Dein Benutzername oder deine IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde vom Administrator $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nDu kannst die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\nDeine aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
"autoblockedtext": "Deine IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nDu kannst $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nDu kannst die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in deinen [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für dich gesperrt wurde.\n\nDeine aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte füge alle Informationen jeder Anfrage hinzu, die du stellst.",
@@ -642,7 +653,7 @@
"newarticletext": "Du bist einem Link zu einer Seite gefolgt, die nicht vorhanden ist.\nUm diese Seite anzulegen, trage deinen Text in das untenstehende Bearbeitungsfeld ein (weitere Informationen auf der [$1 Hilfeseite]).\nSofern du fälschlicherweise hier bist, klicke auf die Schaltfläche '''Zurück''' deines Browsers.",
"anontalkpagetext": "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn du mit den Kommentaren auf dieser Seite nichts anfangen kannst, richten sie sich vermutlich an einen früheren Inhaber deiner IP-Adresse und du kannst sie ignorieren. Du kannst dir auch ein [[Special:UserLogin/signup|Benutzerkonto erstellen]] oder dich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
"noarticletext": "Diese Seite enthält momentan noch keinen Text.\nDu kannst sie <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>,\nihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]\noder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten]</span>.",
- "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text, du bist auch nicht berechtigt diese Seite zu erstellen.\nDu kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>",
+ "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text und du bist auch nicht dazu berechtigt, diese Seite zu erstellen.\nDu kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>",
"missing-revision": "Die Version $1 der Seite namens „{{FULLPAGENAME}}“ ist nicht vorhanden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] einsehbar.",
"userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
"userpage-userdoesnotexist-view": "Das Benutzerkonto „$1“ ist nicht vorhanden.",
@@ -688,7 +699,7 @@
"templatesusedsection": "{{PLURAL:$1|Die folgende Vorlage wird|Folgende Vorlagen werden}} in diesem Abschnitt verwendet:",
"template-protected": "(schreibgeschützt)",
"template-semiprotected": "(schreibgeschützt für unangemeldete und neue Benutzer)",
- "hiddencategories": "Diese Seite ist Mitglied von {{PLURAL:$1|1 versteckter Kategorie|$1 versteckten Kategorien}}:",
+ "hiddencategories": "Diese Seite ist in {{PLURAL:$1|1 versteckter Kategorie|$1 versteckten Kategorien}} enthalten:",
"edittools": "<!-- Dieser Text wird unter dem „Bearbeiten“-Formular sowie dem „Hochladen“-Formular angezeigt. -->",
"nocreatetext": "Auf {{SITENAME}} wurde das Erstellen neuer Seiten eingeschränkt. Du kannst bestehende Seiten ändern oder dich [[Special:UserLogin|anmelden]].",
"nocreate-loggedin": "Du hast nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.",
@@ -719,6 +730,10 @@
"content-model-text": "Klartext",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Leeres Objekt",
+ "content-json-empty-array": "Leeres Array",
+ "duplicate-args-category": "Seiten, die doppelte Argumente in Vorlagenaufrufen verwenden",
+ "duplicate-args-category-desc": "Die Seite enthält Vorlagenaufrufe, die Duplikate von Argumenten verwenden, wie <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> oder <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Achtung:''' Diese Seite enthält zu viele Aufrufe aufwändiger Parserfunktionen.\n\nSie darf nicht mehr als $2 {{PLURAL:$2|Aufruf|Aufrufe}} haben, es {{PLURAL:$1|ist aktuell $1 Aufruf|sind aktuell $1 Aufrufe}}.",
"expensive-parserfunction-category": "Seiten, die aufwändige Parserfunktionen zu oft aufrufen",
"post-expand-template-inclusion-warning": "Warnung: Die Größe eingebundener Vorlagen ist zu groß, einige Vorlagen können nicht eingebunden werden.",
@@ -773,7 +788,7 @@
"history-feed-empty": "Die angeforderte Seite existiert nicht. Vielleicht wurde sie gelöscht oder verschoben. [[Special:Search|Durchsuche]] {{SITENAME}} nach passenden neuen Seiten.",
"rev-deleted-comment": "(Zusammenfassung entfernt)",
"rev-deleted-user": "(Benutzername entfernt)",
- "rev-deleted-event": "(Logbuchaktion entfernt)",
+ "rev-deleted-event": "(Logbucheinzelheiten entfernt)",
"rev-deleted-user-contribs": "[Benutzername oder IP-Adresse entfernt – Bearbeitung aus Beiträgen versteckt]",
"rev-deleted-text-permission": "Diese Version wurde '''gelöscht'''.\nNähere Angaben zum Löschvorgang sowie eine Begründung stehen im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch].",
"rev-suppressed-text-permission": "Diese Seitenversion wurde <strong>unterdrückt</strong>.\nEinzelheiten können im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Oversight-Logbuch] gefunden werden.",
@@ -807,7 +822,7 @@
"revdelete-legend": "Setzen der Sichtbarkeitseinschränkungen",
"revdelete-hide-text": "Text der Version",
"revdelete-hide-image": "Dateiinhalt verstecken",
- "revdelete-hide-name": "Logbuchaktion und Ziel verstecken",
+ "revdelete-hide-name": "Ziel und Parameter verstecken",
"revdelete-hide-comment": "Bearbeitungszusammenfassung",
"revdelete-hide-user": "Benutzername/IP-Adresse des Bearbeiters",
"revdelete-hide-restricted": "Daten sowohl vor Administratoren als auch anderen Benutzern unterdrücken",
@@ -861,7 +876,6 @@
"mergehistory-same-destination": "Ausgangs- und Zielseite dürfen nicht identisch sein",
"mergehistory-reason": "Grund:",
"mergelog": "Vereinigungs-Logbuch",
- "pagemerge-logentry": "vereinigte [[$1]] in [[$2]] (Versionen bis $3)",
"revertmerge": "Vereinigung rückgängig machen",
"mergelogpagetext": "Dies ist das Logbuch der vereinigten Versionsgeschichten.",
"history-title": "$1: Versionsgeschichte",
@@ -874,7 +888,7 @@
"editundo": "rückgängig machen",
"diff-empty": "(kein Unterschied)",
"diff-multi-sameuser": "({{PLURAL:$1|Eine dazwischenliegende Version desselben Benutzers wird|$1 dazwischenliegende Versionen desselben Benutzers werden}} nicht angezeigt)",
- "diff-multi-otherusers": "({{PLURAL:$1|Eine dazwischenliegende Version|$1 dazwischenliegende Versionen}} von {{PLURAL:$2|einem anderen Benutzer|$2 Benutzern}} werden nicht angezeigt)",
+ "diff-multi-otherusers": "({{PLURAL:$1|Eine dazwischenliegende Version|$1 dazwischenliegende Versionen}} von {{PLURAL:$2|einem anderen Benutzer|$2 Benutzern}} {{PLURAL:$1|wird|werden}} nicht angezeigt)",
"diff-multi-manyusers": "({{PLURAL:$1|$1 dazwischenliegende Versionen}} von mehr als {{PLURAL:$2|$2 Benutzern}}, die nicht angezeigt werden)",
"difference-missing-revision": "{{PLURAL:$2|Eine Version|$2 Versionen}} dieser Unterschiedsanzeige ($1) {{PLURAL:$2|wurde|wurden}} nicht gefunden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] vorhanden.",
"searchresults": "Suchergebnisse",
@@ -884,6 +898,8 @@
"notextmatches": "Keine Übereinstimmungen mit Inhalten",
"prevn": "{{PLURAL:$1|vorheriger|vorherige $1}}",
"nextn": "{{PLURAL:$1|nächster|nächste $1}}",
+ "prev-page": "vorherige Seite",
+ "next-page": "nächste Seite",
"prevn-title": "{{PLURAL:$1|Vorheriges Ergebnis|Vorherige $1 Ergebnisse}}",
"nextn-title": "{{PLURAL:$1|Folgendes Ergebnis|Folgende $1 Ergebnisse}}",
"shown-title": "Zeige $1 {{PLURAL:$1|Ergebnis|Ergebnisse}} pro Seite",
@@ -902,6 +918,7 @@
"search-result-category-size": "{{PLURAL:$1|1 Seite|$1 Seiten}} ({{PLURAL:$2|1 Unterkategorie|$2 Unterkategorien}}, {{PLURAL:$3|1 Datei|$3 Dateien}})",
"search-redirect": "(Weiterleitung von „$1“)",
"search-section": "(Abschnitt $1)",
+ "search-category": "(Kategorie $1)",
"search-file-match": "(treffende Dateiinhalte)",
"search-suggest": "Meintest du „$1“?",
"search-interwiki-caption": "Schwesterprojekte",
@@ -935,6 +952,11 @@
"prefs-personal": "Benutzerdaten",
"prefs-rc": "Letzte Änderungen",
"prefs-watchlist": "Beobachtungsliste",
+ "prefs-editwatchlist": "Beobachtungsliste bearbeiten",
+ "prefs-editwatchlist-label": "Einträge auf deiner Beobachtungsliste bearbeiten:",
+ "prefs-editwatchlist-edit": "Titel auf deiner Beobachtungsliste ansehen und entfernen",
+ "prefs-editwatchlist-raw": "Rohe Beobachtungsliste bearbeiten",
+ "prefs-editwatchlist-clear": "Deine Beobachtungsliste leeren",
"prefs-watchlist-days": "Maximale Anzahl der einbezogenen Tage:",
"prefs-watchlist-days-max": "Maximal {{PLURAL:$1|ein Tag|$1 Tage}}",
"prefs-watchlist-edits": "Maximale Anzahl der angezeigten Einträge:",
@@ -1006,7 +1028,7 @@
"gender-female": "Ich bin weiblich",
"prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
"email": "E-Mail",
- "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann dein bürgerlicher Name deinen Beiträgen zugeordnet werden.",
+ "prefs-help-realname": "Der bürgerliche Name ist optional.\nFalls angegeben, kann er verwendet werden, um dir eine Zuordnung für deine Beiträge zu geben.",
"prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern du dein Passwort vergessen hast.",
"prefs-help-email-others": "Mit anderen Benutzern kannst du auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass du deine Identität offenlegen musst.",
"prefs-help-email-required": "Es wird eine gültige E-Mail-Adresse benötigt.",
@@ -1031,7 +1053,7 @@
"prefs-tabs-navigation-hint": "Tipp: Du kannst die linke und rechte Pfeiltasten benutzen, um zwischen den Registerkarten in der Reiterliste zu navigieren.",
"email-address-validity-valid": "Diese E-Mail-Adresse scheint gültig zu sein.",
"email-address-validity-invalid": "Eine gültige E-Mail-Adresse ist erforderlich.",
- "userrights": "Benutzerrechteverwaltung",
+ "userrights": "Benutzerrechte verwalten",
"userrights-lookup-user": "Gruppenzugehörigkeit verwalten",
"userrights-user-editname": "Benutzername:",
"editusergroup": "Benutzerrechte bearbeiten",
@@ -1093,7 +1115,7 @@
"right-bot": "Behandlung als automatischer Prozess",
"right-nominornewtalk": "Kleine Bearbeitungen an Diskussionsseiten führen zu keiner „Neue Nachrichten“-Anzeige",
"right-apihighlimits": "Höhere Limits in API-Abfragen",
- "right-writeapi": "Benutzung der writeAPI",
+ "right-writeapi": "Benutzung der API mit Schreibzugriff",
"right-delete": "Seiten löschen",
"right-bigdelete": "Seiten mit großer Versionsgeschichte löschen",
"right-deletelogentry": "Einzelne Logbuch-Einträge löschen und wiederherstellen",
@@ -1114,6 +1136,7 @@
"right-protect": "Seitenschutzstatus ändern und kaskadengeschützte Seiten bearbeiten",
"right-editprotected": "Seiten bearbeiten, die als „{{int:protect-level-sysop}}“ geschützt sind",
"right-editsemiprotected": "Seiten bearbeiten, die als „{{int:protect-level-autoconfirmed}}“ geschützt sind",
+ "right-editcontentmodel": "Das Inhaltsmodell einer Seite bearbeiten",
"right-editinterface": "Benutzeroberfläche bearbeiten",
"right-editusercssjs": "Fremde CSS- und JavaScript-Dateien bearbeiten",
"right-editusercss": "Fremde CSS-Dateien bearbeiten",
@@ -1141,6 +1164,7 @@
"right-override-export-depth": "Exportiere Seiten einschließlich verlinkter Seiten bis zu einer Tiefe von 5",
"right-sendemail": "E-Mails an andere Benutzer senden",
"right-passwordreset": "Passwort eines Benutzers zurücksetzen und die dazu verschickte E-Mail einsehen",
+ "right-managechangetags": "[[Special:Tags|Markierungen]] erstellen und aus der Datenbank löschen",
"newuserlogpage": "Neuanmeldungs-Logbuch",
"newuserlogpagetext": "Dies ist ein Logbuch der neu erstellten Benutzerkonten.",
"rightslog": "Rechte-Logbuch",
@@ -1186,6 +1210,8 @@
"action-viewmywatchlist": "deine Beobachtungsliste anzusehen",
"action-viewmyprivateinfo": "deine privaten Informationen einzusehen",
"action-editmyprivateinfo": "deine privaten Informationen zu bearbeiten",
+ "action-editcontentmodel": "das Inhaltsmodell einer Seite zu bearbeiten",
+ "action-managechangetags": "Markierungen zu erstellen und aus der Datenbank zu löschen",
"nchanges": "$1 {{PLURAL:$1|Änderung|Änderungen}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|seit dem letzten Besuch}}",
"enhancedrc-history": "Versionsgeschichte",
@@ -1243,9 +1269,9 @@
"recentchangeslinked-feed": "Änderungen an verlinkten Seiten",
"recentchangeslinked-toolbox": "Änderungen an verlinkten Seiten",
"recentchangeslinked-title": "Änderungen an Seiten, die von „$1“ verlinkt sind",
- "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. bei Kategorien an den Mitgliedern dieser Kategorie). Seiten auf deiner [[Special:Watchlist|Beobachtungsliste]] sind '''fett''' dargestellt.",
+ "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. an in dieser Kategorie enthaltenen Kategorien). Seiten auf deiner [[Special:Watchlist|Beobachtungsliste]] sind <strong>fett</strong> dargestellt.",
"recentchangeslinked-page": "Seite:",
- "recentchangeslinked-to": "Zeige nur Änderungen auf Seiten, die auf diese Seite verlinken",
+ "recentchangeslinked-to": "Zeige nur Änderungen an Seiten, die auf diese Seite verlinken",
"upload": "Datei hochladen",
"uploadbtn": "Datei hochladen",
"reuploaddesc": "Abbrechen und zurück zur Hochladen-Seite",
@@ -1257,9 +1283,9 @@
"uploaderror": "Fehler beim Hochladen",
"upload-recreate-warning": "'''Achtung: Eine Datei dieses Namens wurde bereits gelöscht oder verschoben.'''\n\nEs folgt ein Auszug aus dem Lösch- und Verschiebungs-Logbuch dieser Datei.",
"uploadtext": "Benutze dieses Formular, um neue Dateien hochzuladen.\n\nGehe zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutze einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit „Alternativer Text“ als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
- "upload-permitted": "Erlaubte Dateitypen: $1.",
- "upload-preferred": "Bevorzugte Dateitypen: $1.",
- "upload-prohibited": "Nicht erlaubte Dateitypen: $1.",
+ "upload-permitted": "{{PLURAL:$2|Erlaubter Dateityp|Erlaubte Dateitypen}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Bevorzugter Dateityp|Bevorzugte Dateitypen}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Nicht erlaubter Dateityp|Nicht erlaubte Dateitypen}}: $1.",
"uploadlogpage": "Datei-Logbuch",
"uploadlogpagetext": "Dies ist das Logbuch der hochgeladenen Dateien, siehe auch die [[Special:NewFiles|Galerie neuer Dateien]] für einen visuellen Überblick.",
"filename": "Dateiname",
@@ -1454,7 +1480,7 @@
"imagelinks": "Dateiverwendung",
"linkstoimage": "Die {{PLURAL:$1|folgende Seite verwendet|folgenden $1 Seiten verwenden}} diese Datei:",
"linkstoimage-more": "Mehr als {{PLURAL:$1|eine Seite verlinkt|$1 Seiten verlinken}} auf diese Datei.\nDie folgende Liste zeigt nur {{PLURAL:$1|den ersten Link|die ersten $1 Links}} auf diese Datei.\nEine [[Special:WhatLinksHere/$2|vollständige Liste]] ist verfügbar.",
- "nolinkstoimage": "Keine Seite benutzt diese Datei.",
+ "nolinkstoimage": "Diese Datei wird auf keiner Seite verwendet.",
"morelinkstoimage": "[[Special:WhatLinksHere/$1|Weitere Links]] auf diese Datei.",
"linkstoimage-redirect": "$1 (Dateiweiterleitung) $2",
"duplicatesoffile": "Die {{PLURAL:$1|folgende Datei ist ein Duplikat|folgenden $1 Dateien sind Duplikate}} dieser Datei ([[Special:FileDuplicateSearch/$2|weitere Details]]):",
@@ -1518,7 +1544,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Seitenstatistik",
"statistics-header-edits": "Bearbeitungsstatistik",
- "statistics-header-views": "Seitenaufrufstatistik",
"statistics-header-users": "Benutzerstatistik",
"statistics-header-hooks": "Andere Statistiken",
"statistics-articles": "Inhaltsseiten",
@@ -1527,13 +1552,9 @@
"statistics-files": "Hochgeladene Dateien",
"statistics-edits": "Seitenbearbeitungen",
"statistics-edits-average": "Bearbeitungen pro Seite im Durchschnitt",
- "statistics-views-total": "Seitenaufrufe gesamt",
- "statistics-views-total-desc": "Aufrufe nicht vorhandener Seiten und von Spezialseiten werden nicht berücksichtigt.",
- "statistics-views-peredit": "Seitenaufrufe pro Bearbeitung",
"statistics-users": "Registrierte [[Special:ListUsers|Benutzer]]",
"statistics-users-active": "Aktive Benutzer",
"statistics-users-active-desc": "Benutzer mit Bearbeitungen {{PLURAL:$1|während der letzten 24 Stunden|während der vergangenen $1 Tage}}",
- "statistics-mostpopular": "Meistbesuchte Seiten",
"pageswithprop": "Seiten mit einer Seiteneigenschaft",
"pageswithprop-legend": "Seiten mit einer Seiteneigenschaft",
"pageswithprop-text": "Diese Spezialseite listet Seiten auf, die eine bestimmte Seiteneigenschaft verwenden.",
@@ -1560,7 +1581,7 @@
"ninterwikis": "{{PLURAL:$1|Ein Interwikilink|$1 Interwikilinks}}",
"nlinks": "{{PLURAL:$1|1 Link|$1 Links}}",
"nmembers": "{{PLURAL:$1|1 Eintrag|$1 Einträge}}",
- "nmemberschanged": "$1 → {{PLURAL:$2|Ein Mitglied|$2 Mitglieder}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|Mitglied|Mitglieder}}",
"nrevisions": "{{PLURAL:$1|1 Bearbeitung|$1 Bearbeitungen}}",
"nviews": "{{PLURAL:$1|1 Abfrage|$1 Abfragen}}",
"nimagelinks": "Verwendet auf {{PLURAL:$1|einer Seite|$1 Seiten}}",
@@ -1574,9 +1595,9 @@
"uncategorizedtemplates": "Nicht kategorisierte Vorlagen",
"unusedcategories": "Verwaiste Kategorien",
"unusedimages": "Verwaiste Dateien",
- "popularpages": "Beliebteste Seiten",
"wantedcategories": "Gewünschte Kategorien",
"wantedpages": "Gewünschte Seiten",
+ "wantedpages-summary": "Liste nicht vorhandener Seiten mit den meisten Links auf diese Seiten, ausschließlich solche, die nur Weiterleitungen haben. Für eine Liste nicht vorhandener Seiten mit Weiterleitungen, siehe [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Ungültiger Titel im Ergebnis: $1",
"wantedfiles": "Gewünschte Dateien",
"wantedfiletext-cat": "Die folgenden Dateien werden verwendet, sind jedoch nicht vorhanden. Vorhandene Dateien aus fremden Repositorien können dennoch hier aufgelistet sein und werden <del>durchgestrichen</del> dargestellt. Zusätzlich werden Seiten, die nicht vorhandene Dateien enthalten, in die [[:$1]] eingeordnet.",
@@ -1636,9 +1657,11 @@
"pager-older-n": "{{PLURAL:$1|vorheriger|vorherige $1}}",
"suppress": "Oversight",
"querypage-disabled": "Diese Spezialseite wurde aus Gründen der Leistungserhaltung deaktiviert.",
+ "apihelp": "API-Hilfe",
+ "apihelp-no-such-module": "Modul „$1“ nicht gefunden.",
"booksources": "ISBN-Suche",
"booksources-search-legend": "Suche nach Bezugsquellen für Bücher",
- "booksources-go": "Suchen",
+ "booksources-search": "Suchen",
"booksources-text": "Dies ist eine Liste mit Links zu Internetseiten, die neue und gebrauchte Bücher verkaufen. Dort kann es auch weitere Informationen über die Bücher geben. {{SITENAME}} ist mit keinem dieser Anbieter geschäftlich verbunden.",
"booksources-invalid-isbn": "Vermutlich ist die ISBN ungültig.\nBitte prüfe, ob sie korrekt von der Quelle übertragen wurde.",
"specialloguserlabel": "Ausführender Benutzer:",
@@ -1749,7 +1772,7 @@
"emailccsubject": "Kopie deiner Nachricht an $1: $2",
"emailsent": "E-Mail verschickt",
"emailsenttext": "Deine E-Mail wurde verschickt.",
- "emailuserfooter": "Diese E-Mail wurde von {{SITENAME}}-Benutzer „$1“ an „$2“ gesendet.",
+ "emailuserfooter": "Diese E-Mail wurde von „$1“ an „$2“ durch die Funktion „{{int:emailpage}}“ bei {{SITENAME}} gesendet.",
"usermessage-summary": "Systemnachricht gespeichert.",
"usermessage-editor": "System-Messenger",
"usermessage-template": "MediaWiki:Benutzernachricht",
@@ -1775,7 +1798,7 @@
"wlheader-enotif": "Der E-Mail-Benachrichtigungsdienst ist aktiviert.",
"wlheader-showupdated": "Seiten mit noch nicht gesehenen Änderungen werden '''fett''' dargestellt.",
"wlnote": "Es {{PLURAL:$1|folgt die letzte Änderung|folgen die letzten <strong>$1</strong> Änderungen}} der letzten {{PLURAL:$2|Stunde|<strong>$2</strong> Stunden}}. Stand: $3, $4 Uhr.",
- "wlshowlast": "Zeige die Änderungen der letzten $1 Stunden, $2 Tage oder $3.",
+ "wlshowlast": "Zeige die Änderungen der letzten $1 Stunden, $2 Tage.",
"watchlist-options": "Anzeigeoptionen",
"watching": "Beobachten …",
"unwatching": "Nicht mehr beobachten …",
@@ -1822,9 +1845,8 @@
"delete-toobig": "Diese Seite hat mit mehr als $1 {{PLURAL:$1|Version|Versionen}} eine sehr lange Versionsgeschichte. Das Löschen solcher Seiten wurde eingeschränkt, um eine versehentliche Überlastung der Server zu verhindern.",
"delete-warning-toobig": "Diese Seite hat mit mehr als $1 {{PLURAL:$1|Version|Versionen}} eine sehr lange Versionsgeschichte. Das Löschen kann zu Störungen im Datenbankbetrieb führen.",
"deleteprotected": "Du kannst diese Seite nicht löschen, da sie geschützt wurde.",
- "deleting-backlinks-warning": "'''Warnung:''' Es verweisen noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere Seiten]] auf die zu löschende Seite oder diese Seite ist noch woanders eingebunden.",
+ "deleting-backlinks-warning": "'''Warnung:''' Es verweisen noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere Seiten]] auf diese zu löschende Seite oder sie ist noch an anderer Stelle eingebunden.",
"rollback": "Zurücksetzen der Änderungen",
- "rollback_short": "Zurücksetzen",
"rollbacklink": "Zurücksetzen",
"rollbacklinkcount": "{{PLURAL:$1|Eine Version|$1 Versionen}} zurücksetzen",
"rollbacklinkcount-morethan": "Mehr als {{PLURAL:$1|eine Version|$1 Versionen}} zurücksetzen",
@@ -1934,6 +1956,7 @@
"namespace": "Namensraum:",
"invert": "Auswahl umkehren",
"tooltip-invert": "Dieses Auswahlfeld anklicken, um Änderungen im gewählten Namensraum und, sofern ausgewählt, dem entsprechenden zugehörigen Namensraum auszublenden",
+ "tooltip-whatlinkshere-invert": "Markiere dieses Kontrollkästchen, um Links von Seiten innerhalb des ausgewählten Namensraums auszublenden.",
"namespace_association": "Zugehöriger Namensraum",
"tooltip-namespace_association": "Dieses Auswahlfeld anklicken, um den deiner Auswahl zugehörigen Diskussionsnamensraum, oder im umgekehrten Fall, den zugehörigen Namensraum, mit einzubeziehen",
"blanknamespace": "(Seiten)",
@@ -1955,7 +1978,7 @@
"sp-contributions-uploads": "Hochgeladene Dateien",
"sp-contributions-logs": "Logbücher",
"sp-contributions-talk": "Diskussion",
- "sp-contributions-userrights": "Benutzerrechteverwaltung",
+ "sp-contributions-userrights": "Benutzerrechte­verwaltung",
"sp-contributions-blocked-notice": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist derzeit gesperrt. Es folgt der aktuelle Eintrag aus dem Benutzersperr-Logbuch:",
"sp-contributions-blocked-notice-anon": "Diese IP-Adresse ist zurzeit gesperrt.\nZur Information folgt der aktuelle Auszug aus dem Sperr-Logbuch:",
"sp-contributions-search": "Suche nach Benutzerbeiträgen",
@@ -1966,7 +1989,7 @@
"whatlinkshere": "Links auf diese Seite",
"whatlinkshere-title": "Seiten, die auf „$1“ verlinken",
"whatlinkshere-page": "Seite:",
- "linkshere": "Die folgenden Seiten verlinken auf '''„[[:$1]]“''':",
+ "linkshere": "Die folgenden Seiten verlinken auf <strong>[[:$1]]</strong>:",
"nolinkshere": "Keine Seite verlinkt auf '''„[[:$1]]“'''.",
"nolinkshere-ns": "Keine Seite verlinkt auf '''„[[:$1]]“''' im gewählten Namensraum.",
"isredirect": "Weiterleitungsseite",
@@ -1999,7 +2022,7 @@
"ipboptions": "2 Stunden:2 hours,1 Tag:1 day,3 Tage:3 days,1 Woche:1 week,2 Wochen:2 weeks,1 Monat:1 month,3 Monate:3 months,6 Monate:6 months,1 Jahr:1 year,unbeschränkt:infinite",
"ipbhidename": "Benutzername in Bearbeitungen und Listen verstecken",
"ipbwatchuser": "Benutzer(diskussions)seite beobachten",
- "ipb-disableusertalk": "Diesen Benutzer daran hindern seine eigene Diskussionsseite zu bearbeiten, solange er gesperrt ist",
+ "ipb-disableusertalk": "Diesen Benutzer daran hindern, seine eigene Diskussionsseite zu bearbeiten, solange er gesperrt ist",
"ipb-change-block": "Sperre mit diesen Sperrparametern erneuern",
"ipb-confirm": "Sperrung bestätigen",
"badipaddress": "Die IP-Adresse hat ein falsches Format.",
@@ -2007,7 +2030,7 @@
"blockipsuccesstext": "Der Benutzer / die IP-Adresse [[Special:Contributions/$1|$1]] wurde gesperrt.<br />\nZur Aufhebung der Sperre siehe die [[Special:BlockList|Liste aller aktiven Sperren]].",
"ipb-blockingself": "Du bist gerade dabei, dich selbst zu sperren! Möchtest du das wirklich tun?",
"ipb-confirmhideuser": "Du bist gerade dabei, einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?",
- "ipb-confirmaction": "Wenn du dir sicher bist, dass du dies wirklich tun möchtest, überprüfe bitte unten das Feld „{{int:ipb-confirm}}“.",
+ "ipb-confirmaction": "Wenn du dir sicher bist, dass du dies wirklich tun möchtest, kreuze bitte unten das Feld „{{int:ipb-confirm}}“ an.",
"ipb-edit-dropdown": "Sperrgründe bearbeiten",
"ipb-unblock-addr": "„$1“ freigeben",
"ipb-unblock": "IP-Adresse/Benutzer freigeben",
@@ -2198,14 +2221,15 @@
"thumbnail-temp-create": "Die Datei für die temporäre Miniaturansicht konnte nicht erstellt werden",
"thumbnail-dest-create": "Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden",
"thumbnail_invalid_params": "Ungültige Thumbnail-Parameter",
+ "thumbnail_toobigimagearea": "Datei mit Abmessungen größer als $1",
"thumbnail_dest_directory": "Zielverzeichnis kann nicht erstellt werden.",
"thumbnail_image-type": "Bildtyp nicht unterstützt",
"thumbnail_gd-library": "Unvollständige Konfiguration der GD-Bibliothek: Fehlende Funktion $1",
"thumbnail_image-missing": "Datei scheint fehlend zu sein: $1",
"thumbnail_image-failure-limit": "Es wurden in letzter Zeit zu viele Versuche ($1 oder mehr) unternommen, dieses Vorschaubild zu rendern. Bitte versuche es später erneut.",
"import": "Seiten importieren",
- "importinterwiki": "Transwiki-Import",
- "import-interwiki-text": "Wähle ein Wiki und eine Seite zum Importieren aus.\nDie Versionsdaten und Benutzernamen bleiben dabei erhalten.\nAlle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] protokolliert.",
+ "importinterwiki": "Von einem anderen Wiki importieren",
+ "import-interwiki-text": "Wähle ein Wiki und eine Seite zum Importieren aus.\nDie Versionsdaten und Benutzernamen bleiben dabei erhalten.\nAlle Importe von anderen Wikis werden im [[Special:Log/import|Import-Logbuch]] protokolliert.",
"import-interwiki-sourcewiki": "Quellwiki:",
"import-interwiki-sourcepage": "Quellseite:",
"import-interwiki-history": "Alle Versionen dieser Seite importieren",
@@ -2219,13 +2243,13 @@
"importstart": "Importiere Seite …",
"import-revision-count": "– {{PLURAL:$1|1 Version|$1 Versionen}}",
"importnopages": "Keine Seite zum Importieren vorhanden.",
- "imported-log-entries": "$1 {{PLURAL:$1|lLogbucheintrag|Logbucheinträge}} importiert.",
+ "imported-log-entries": "$1 {{PLURAL:$1|Logbucheintrag|Logbucheinträge}} importiert.",
"importfailed": "Import fehlgeschlagen: $1",
"importunknownsource": "Unbekannte Importquelle",
"importcantopen": "Importdatei konnte nicht geöffnet werden",
"importbadinterwiki": "Falscher Interwiki-Link",
"importsuccess": "Import abgeschlossen.",
- "importnosources": "Für den Transwiki-Import sind keine Quellen definiert. Das direkte Hochladen von Versionen ist gesperrt.",
+ "importnosources": "Es wurden keine Wikis angegeben, von denen importiert werden soll. Das direkte Hochladen von Versionsgeschichten ist deaktiviert.",
"importnofile": "Es ist keine Importdatei ausgewählt worden.",
"importuploaderrorsize": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei ist größer als die maximal erlaubte Dateigröße.",
"importuploaderrorpartial": "Das Hochladen der Importdatei ist fehlgeschlagen. Die Datei wurde nur teilweise hochgeladen.",
@@ -2249,18 +2273,15 @@
"import-rootpage-nosubpage": "Im Namensraum „$1“ der Stammseite sind keine Unterseiten erlaubt.",
"importlogpage": "Import-Logbuch",
"importlogpagetext": "Administrativer Import von Seiten mit Versionsgeschichte von anderen Wikis.",
- "import-logentry-upload": "importierte „[[$1]]“ von einer Datei",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versionen}} importiert",
- "import-logentry-interwiki": "importierte „$1“ (Transwiki)",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versionen}} von $2 importiert",
"javascripttest": "JavaScript-Test",
- "javascripttest-title": "$1-Tests werden durchgeführt",
"javascripttest-pagetext-noframework": "Diese Seite ist JavaSkript-Tests vorbehalten.",
"javascripttest-pagetext-unknownframework": "Unbekanntes Framework „$1“.",
+ "javascripttest-pagetext-unknownaction": "Unbekannte Aktion „$1“.",
"javascripttest-pagetext-frameworks": "Bitte wähle eine der folgenden Prüfumgebungen aus: $1",
"javascripttest-pagetext-skins": "Wähle eine Benutzeroberfläche zur Durchführung der Tests aus:",
"javascripttest-qunit-intro": "Siehe die [$1 Dokumentation zu Tests] auf mediawiki.org",
- "javascripttest-qunit-heading": "MediaWiki-JavaSkript-QUnit-Tester",
"tooltip-pt-userpage": "Deine Benutzerseite",
"tooltip-pt-anonuserpage": "Benutzerseite der IP-Adresse von der aus du Änderungen durchführst",
"tooltip-pt-mytalk": "Deine Diskussionsseite",
@@ -2268,10 +2289,11 @@
"tooltip-pt-preferences": "Eigene Einstellungen",
"tooltip-pt-watchlist": "Liste der beobachteten Seiten",
"tooltip-pt-mycontris": "Liste eigener Beiträge",
- "tooltip-pt-login": "Sich anzumelden wird zwar gerne gesehen, ist aber keine Pflicht.",
+ "tooltip-pt-login": "Sich anzumelden wird gerne gesehen, ist jedoch nicht zwingend erforderlich.",
"tooltip-pt-logout": "Abmelden",
+ "tooltip-pt-createaccount": "Wir ermutigen dich dazu, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich.",
"tooltip-ca-talk": "Diskussion zum Seiteninhalt",
- "tooltip-ca-edit": "Seite bearbeiten. Bitte vor dem Speichern die Vorschaufunktion benutzen.",
+ "tooltip-ca-edit": "Du kannst diese Seite bearbeiten. Bitte nutze die Vorschaufunktion vor dem Speichern.",
"tooltip-ca-addsection": "Neuen Abschnitt beginnen",
"tooltip-ca-viewsource": "Diese Seite ist geschützt. Ihr Quelltext kann dennoch angesehen und kopiert werden.",
"tooltip-ca-history": "Frühere Versionen dieser Seite",
@@ -2290,15 +2312,16 @@
"tooltip-n-mainpage-description": "Hauptseite besuchen",
"tooltip-n-portal": "Über das Projekt, was du tun kannst, wo was zu finden ist",
"tooltip-n-currentevents": "Hintergrundinformationen zu aktuellen Ereignissen",
- "tooltip-n-recentchanges": "Liste der letzten Änderungen in {{SITENAME}}",
+ "tooltip-n-recentchanges": "Liste der letzten Änderungen in diesem Wiki",
"tooltip-n-randompage": "Zufällige Seite aufrufen",
"tooltip-n-help": "Hilfeseite anzeigen",
"tooltip-t-whatlinkshere": "Liste aller Seiten, die hierher verlinken",
"tooltip-t-recentchangeslinked": "Letzte Änderungen an Seiten, die von hier verlinkt sind",
"tooltip-feed-rss": "RSS-Feed dieser Seite",
"tooltip-feed-atom": "Atom-Feed dieser Seite",
- "tooltip-t-contributions": "Liste der Beiträge von diesem Benutzer ansehen",
+ "tooltip-t-contributions": "Liste der Beiträge dieses Benutzers ansehen",
"tooltip-t-emailuser": "Eine E-Mail an diesen Benutzer senden",
+ "tooltip-t-info": "Weitere Informationen über diese Seite",
"tooltip-t-upload": "Dateien hochladen",
"tooltip-t-specialpages": "Liste aller Spezialseiten",
"tooltip-t-print": "Druckansicht dieser Seite",
@@ -2351,8 +2374,8 @@
"others": "anderen",
"siteusers": "{{SITENAME}}-{{PLURAL:$2|Benutzer}} $1",
"anonusers": "{{PLURAL:$2|unangemeldetem|unangemeldeten}} {{SITENAME}}-{{PLURAL:$2|Benutzer|Benutzern}} $1",
- "creditspage": "Seiteninformationen",
- "nocredits": "Für diese Seite sind keine Informationen vorhanden.",
+ "creditspage": "Seitenzuschreibung",
+ "nocredits": "Für diese Seite sind keine Zuschreibungen vorhanden.",
"spamprotectiontitle": "Spamschutzfilter",
"spamprotectiontext": "Der Text, die du speichern willst, wurde vom Spamschutzfilter blockiert.\nDas liegt wahrscheinlich an einem Link auf eine externe Seite.",
"spamprotectionmatch": "'''Der folgende Text wurde vom Spamfilter gefunden: ''$1'''''",
@@ -2360,7 +2383,7 @@
"spam_reverting": "Letzte Version ohne Links zu $1 wiederhergestellt.",
"spam_blanking": "Alle Versionen mit einem Link zu $1 wurden bereinigt.",
"spam_deleting": "Alle Versionen mit einem Link zu $1 wurden gelöscht.",
- "simpleantispam-label": "Spamschutzprüfung.\nHier '''NICHTS''' eintragen!",
+ "simpleantispam-label": "Spamschutzprüfung.\nHier <strong>NICHTS</strong> eintragen!",
"pageinfo-title": "Informationen zu „$1“",
"pageinfo-not-current": "Diese Information kann leider nicht für alte Versionen zur Verfügung gestellt werden.",
"pageinfo-header-basic": "Basisinformationen",
@@ -2376,8 +2399,7 @@
"pageinfo-robot-policy": "Indizierung durch Suchmaschinen",
"pageinfo-robot-index": "Erlaubt",
"pageinfo-robot-noindex": "Nicht erlaubt",
- "pageinfo-views": "Anzahl der Seitenaufrufe",
- "pageinfo-watchers": "Anzahl der Beobachter der Seite",
+ "pageinfo-watchers": "Anzahl der Beobachter dieser Seite",
"pageinfo-few-watchers": "Weniger als {{PLURAL:$1|ein|$1}} Beobachter",
"pageinfo-redirects-name": "Anzahl der Weiterleitungen zu dieser Seite",
"pageinfo-redirects-value": "$1",
@@ -2395,7 +2417,7 @@
"pageinfo-hidden-categories": "Versteckte {{PLURAL:$1|Kategorie|Kategorien}} ($1)",
"pageinfo-templates": "Eingebundene {{PLURAL:$1|Vorlage|Vorlagen}} ($1)",
"pageinfo-transclusions": "Eingebunden in {{PLURAL:$1|1 Seite|$1 Seiten}}",
- "pageinfo-toolboxlink": "Seiteninformationen",
+ "pageinfo-toolboxlink": "Seiten­informationen",
"pageinfo-redirectsto": "Weiterleitungen nach",
"pageinfo-redirectsto-info": "Information",
"pageinfo-contentpage": "Gezählt als eine Inhaltsseite",
@@ -2437,7 +2459,7 @@
"file-info": "Dateigröße: $1, MIME-Typ: $2",
"file-info-size": "$1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4",
"file-info-size-pages": "$1 × $2 Pixel, Dateigröße: $3, MIME-Typ: $4, $5 {{PLURAL:$5|Seite| Seiten}}",
- "file-nohires": "Keine höhere Auflösung vorhanden.",
+ "file-nohires": "Es ist keine höhere Auflösung vorhanden.",
"svg-long-desc": "SVG-Datei, Basisgröße: $1 × $2 Pixel, Dateigröße: $3",
"svg-long-desc-animated": "Animierte SVG-Datei, Basisgröße $1 × $2 Pixel, Dateigröße: $3",
"svg-long-error": "Ungültige SVG-Datei: $1",
@@ -2826,7 +2848,6 @@
"exif-urgency-low": "Niedrig ($1)",
"exif-urgency-high": "Hoch ($1)",
"exif-urgency-other": "Benutzerdefinierte Priorität ($1)",
- "watchlistall2": "alle",
"namespacesall": "alle",
"monthsall": "alle",
"confirmemail": "E-Mail-Adresse bestätigen (Authentifizierung)",
@@ -2927,9 +2948,9 @@
"hijri-calendar-m11": "Dhu l-qaʿda",
"hijri-calendar-m12": "Dhu l-hiddscha",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussion]])",
- "unknown_extension_tag": "Unbekanntes Parsertag „$1“",
"duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel „$2“ überschreibt den vorher verwendeten Schlüssel „$1“.",
"duplicate-displaytitle": "<strong>Warnung:</strong> Der Anzeigetitel „$2“ überschreibt den früheren Anzeigetitel „$1“.",
+ "invalid-indicator-name": "<strong>Fehler:</strong> Das Attribut <code>name</code> des Seitenstatusindikators darf nicht leer sein.",
"version": "Version",
"version-extensions": "Installierte Erweiterungen",
"version-skins": "Installierte Benutzeroberflächen",
@@ -2951,7 +2972,7 @@
"version-license": "MediaWiki-Lizenz",
"version-ext-license": "Lizenz",
"version-ext-colheader-name": "Bezeichnung",
- "version-skin-colheader-name": "Benutzeroberfläche",
+ "version-skin-colheader-name": "Bezeichnung",
"version-ext-colheader-version": "Version",
"version-ext-colheader-license": "Lizenz",
"version-ext-colheader-description": "Beschreibung",
@@ -2973,6 +2994,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Artikelpfad]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Skriptpfad]",
+ "version-libraries": "Installierte Bibliotheken",
+ "version-libraries-library": "Bibliothek",
+ "version-libraries-version": "Version",
"redirect": "Weiterleitung auf Benutzerseite, Seite, Seitenversion oder Datei",
"redirect-legend": "Weiterleitung auf eine Benutzerseite, Seite, Seitenversion oder Datei",
"redirect-summary": "Diese Spezialseite leitet auf eine Benutzerseite (numerische Benutzerkennung angegeben), Seite (Seitenkennung angegeben), Seitenversion (Versionskennung angegeben) oder Datei (Dateiname angegeben) weiter. Benutzung: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] oder [[{{#Special:Redirect}}/file/Example.jpg]].",
@@ -2995,7 +3019,7 @@
"fileduplicatesearch-noresults": "Es wurde keine Datei namens „$1“ gefunden.",
"specialpages": "Spezialseiten",
"specialpages-note-top": "Legende",
- "specialpages-note": "* Normale Spezialseiten.\n* <span class=\"mw-specialpagerestricted\">Spezialseiten mit beschränktem Zugang.</span>",
+ "specialpages-note": "* Reguläre Spezialseiten\n* <span class=\"mw-specialpagerestricted\">Zugriffsbeschränkte Spezialseiten</span>",
"specialpages-group-maintenance": "Wartungslisten",
"specialpages-group-other": "Andere Spezialseiten",
"specialpages-group-login": "Benutzerkonto",
@@ -3008,6 +3032,7 @@
"specialpages-group-wiki": "Daten und Werkzeuge",
"specialpages-group-redirects": "Weiterleitende Spezialseiten",
"specialpages-group-spam": "Spam-Werkzeuge",
+ "specialpages-group-developer": "Entwicklerwerkzeuge",
"blankpage": "Leere Seite",
"intentionallyblankpage": "Diese Seite ist absichtlich ohne Inhalt. Sie wird für Benchmarks verwendet.",
"external_image_whitelist": " #Diese Zeile nicht verändern.<pre>\n#Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.\n#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.\n#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.\n#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.\n#Es wird nicht zwischen Groß- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.</pre>",
@@ -3020,12 +3045,54 @@
"tags-tag": "Markierungsname",
"tags-display-header": "Benennung auf den Änderungslisten",
"tags-description-header": "Vollständige Beschreibung",
+ "tags-source-header": "Quelle",
"tags-active-header": "Aktiv?",
"tags-hitcount-header": "Markierte Änderungen",
+ "tags-actions-header": "Aktionen",
"tags-active-yes": "Ja",
"tags-active-no": "Nein",
+ "tags-source-extension": "Definiert von einer Erweiterung",
+ "tags-source-manual": "Manuell von Benutzern und Bots eingesetzt",
+ "tags-source-none": "Nicht mehr in Verwendung",
"tags-edit": "bearbeiten",
+ "tags-delete": "löschen",
+ "tags-activate": "aktivieren",
+ "tags-deactivate": "deaktivieren",
"tags-hitcount": "$1 {{PLURAL:$1|Änderung|Änderungen}}",
+ "tags-manage-no-permission": "Du hast keine Berechtigung, Änderungsmarkierungen zu verwalten.",
+ "tags-create-heading": "Eine neue Markierung erstellen",
+ "tags-create-explanation": "Standardmäßig werden neu erstellte Markierungen für die Verwendung durch Benutzer und Bots verfügbar gemacht.",
+ "tags-create-tag-name": "Name der Markierung:",
+ "tags-create-reason": "Grund:",
+ "tags-create-submit": "Erstellen",
+ "tags-create-no-name": "Du musst einen Markierungsnamen angeben.",
+ "tags-create-invalid-chars": "Markierungsnamen dürfen keine Kommas (<code>,</code>) oder Schrägstriche (<code>/</code>) enthalten.",
+ "tags-create-invalid-title-chars": "Markierungsnamen dürfen keine Zeichen enthalten, die nicht in Seitennamen verwendet werden können.",
+ "tags-create-already-exists": "Die Markierung „$1“ ist bereits vorhanden.",
+ "tags-create-warnings-above": "Die {{PLURAL:$2|folgende Warnung ist|folgenden Warnungen sind}} beim Versuch, die Markierung „$1“ zu erstellen, aufgetreten:",
+ "tags-create-warnings-below": "Möchtest du mit dem Erstellen der Markierung fortfahren?",
+ "tags-delete-title": "Markierung löschen",
+ "tags-delete-explanation-initial": "Du bist dabei, die Markierung „$1“ aus der Datenbank zu löschen.",
+ "tags-delete-explanation-in-use": "Sie wird von {{PLURAL:$2|einer Version oder einem Logbucheintrag|allen $2 Versionen und/oder Logbucheinträgen}} entfernt, bei {{PLURAL:$2|der/m|denen}} sie derzeit eingesetzt wird.",
+ "tags-delete-explanation-warning": "Diese Aktion ist <strong>unwiderruflich</strong> und <strong>kann nicht rückgängig gemacht werden</strong>, auch nicht von Datenbankadministratoren. Sei dir sicher, dass dies die Markierung ist, die du löschen möchtest.",
+ "tags-delete-explanation-active": "<strong>Die Markierung „$1“ ist noch aktiv und wird auch in Zukunft eingesetzt werden.</strong> Um dies zu beenden, gehe zu den Orten, wo die Anwendung der Markierung festgelegt wird und deaktiviere sie dort.",
+ "tags-delete-reason": "Grund:",
+ "tags-delete-submit": "Diese Markierung unwiderruflich löschen",
+ "tags-delete-not-allowed": "Markierungen, die von einer Erweiterung definiert werden, können nicht gelöscht werden, außer die Erweiterung erlaubt es ausdrücklich.",
+ "tags-delete-not-found": "Die Markierung „$1“ ist nicht vorhanden.",
+ "tags-delete-too-many-uses": "Die Markierung „$1“ wird bei mehr als {{PLURAL:$2|einer Version|$2 Versionen}} verwendet und kann deshalb nicht gelöscht werden.",
+ "tags-delete-warnings-after-delete": "Die Markierung „$1“ wurde erfolgreich gelöscht, aber die {{PLURAL:$2|folgende Warnung ist|folgenden Warnungen sind}} aufgetreten:",
+ "tags-activate-title": "Markierung aktivieren",
+ "tags-activate-question": "Du bist dabei, die Markierung „$1“ zu aktivieren.",
+ "tags-activate-reason": "Grund:",
+ "tags-activate-not-allowed": "Es ist nicht möglich, die Markierung „$1“ zu aktivieren.",
+ "tags-activate-not-found": "Die Markierung „$1“ ist nicht vorhanden.",
+ "tags-activate-submit": "Aktivieren",
+ "tags-deactivate-title": "Markierung deaktivieren",
+ "tags-deactivate-question": "Du bist dabei, die Markierung „$1“ zu deaktivieren.",
+ "tags-deactivate-reason": "Grund:",
+ "tags-deactivate-not-allowed": "Es ist nicht möglich, die Markierung „$1“ zu deaktivieren.",
+ "tags-deactivate-submit": "Deaktivieren",
"comparepages": "Seiten vergleichen",
"compare-page1": "Seite 1",
"compare-page2": "Seite 2",
@@ -3037,8 +3104,8 @@
"compare-revision-not-exists": "Die angegebene Version ist nicht vorhanden.",
"dberr-problems": "Entschuldigung. Diese Seite hat momentan technische Schwierigkeiten.",
"dberr-again": "Warte einige Minuten und versuche dann neu zu laden.",
- "dberr-info": "(Kann keine Verbindung zum Datenbank-Server herstellen: $1)",
- "dberr-info-hidden": "(Es konnte keine Verbindung mit dem Datenbankserver hergestellt werden)",
+ "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.",
@@ -3079,6 +3146,14 @@
"revdelete-uname-unhid": "Benutzername freigegeben",
"revdelete-restricted": "Einschränkungen gelten auch für Administratoren",
"revdelete-unrestricted": "Einschränkungen für Administratoren aufgehoben",
+ "logentry-block-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} für eine Dauer von $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|hat}} die Sperre von {{GENDER:$4|$3}} aufgehoben",
+ "logentry-block-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} mit einer Sperrdauer 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",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|importierte}} $3 aus einem anderen Wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|vereinigte}} $3 in die Seite „$4“ (Versionen bis zum $5)",
"logentry-move-move": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4, ohne dabei eine Weiterleitung anzulegen",
"logentry-move-move_redir": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4 und überschrieb dabei eine Weiterleitung",
@@ -3096,20 +3171,37 @@
"logentry-upload-upload": "$1 {{GENDER:$2|lud}} $3 hoch",
"logentry-upload-overwrite": "$1 {{GENDER:$2|lud}} eine neue Version von $3 hoch",
"logentry-upload-revert": "$1 {{GENDER:$2|lud}} $3 hoch",
+ "log-name-managetags": "Markierungsverwaltungs-Logbuch",
+ "log-description-managetags": "Diese Seite listet Verwaltungsaufgaben bezüglich der [[Special:Tags|Markierungen]] auf. Das Logbuch enthält nur Aktionen, die manuell von einem Administrator ausgeführt wurden; Markierungen können auch von der Wikisoftware erstellt oder gelöscht werden, ohne dass ein aufgezeichneter Eintrag in diesem Logbuch vorliegt.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|erstellte}} die Markierung „$4“",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|löschte}} die Markierung „$4“ (entfernt von {{PLURAL:$5|einer Version oder einem Logbucheintrag|$5 Versionen und/oder Logbucheinträgen}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|aktivierte}} die Markierung „$4“ zur Verwendung durch Benutzer und Bots",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|deaktivierte}} die Markierung „$4“ zur Verwendung durch Benutzer und Bots",
"rightsnone": "(–)",
+ "revdelete-summary": "Zusammenfassungskommentar",
+ "feedback-adding": "Rückmeldung wird zur Seite hinzugefügt …",
+ "feedback-back": "Zurück",
+ "feedback-bugcheck": "Super! Bitte überprüfe noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.",
+ "feedback-bugnew": "Ich habe es überprüft. Den neuen Fehler melden.",
"feedback-bugornote": "Sofern du detailliert ein technisches Problem beschreiben möchtest, melde bitte [$1 einen Fehler].\nAnderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kommentar wird, zusammen mit deinem Benutzernamen und der Version des von dir verwendeten Webbrowsers sowie Betriebssystems, auf der Seite „[$3 $2]“ hinzugefügt.",
- "feedback-subject": "Betreff:",
- "feedback-message": "Nachricht:",
"feedback-cancel": "Abbrechen",
- "feedback-submit": "Rückmeldung senden",
- "feedback-adding": "Rückmeldung wird zur Seite hinzugefügt …",
+ "feedback-close": "Erledigt",
+ "feedback-external-bug-report-button": "Eine technische Aufgabe einreichen",
+ "feedback-dialog-title": "Rückmeldung senden",
+ "feedback-dialog-intro": "Du kannst das einfache Formular unten verwenden, um deine Rückmeldung einzureichen. Dein Kommentar wird zusammen mit deinem Benutzernamen zur Seite „$1“ hinzugefügt.",
+ "feedback-error-title": "Fehler",
"feedback-error1": "Fehler: Unbekanntes Ergebnis der API",
"feedback-error2": "Fehler: Bearbeitung gescheitert",
"feedback-error3": "Fehler: Keine Antwort von der API",
+ "feedback-error4": "Fehler: Der Beitrag konnte nicht unter dem angegebenen Rückmeldungstitel gespeichert werden",
+ "feedback-message": "Nachricht:",
+ "feedback-subject": "Betreff:",
+ "feedback-submit": "Senden",
+ "feedback-terms": "Ich akzeptiere, dass mein User Agent Informationen über meinen Browser und meine Betriebssystemversion enthält, die zusammen mit meiner Rückmeldung veröffentlicht werden.",
+ "feedback-termsofuse": "Ich erlaube das Übermitteln der Rückmeldung in Übereinstimmung mit den Nutzungsbedingungen.",
"feedback-thanks": "Vielen Dank. Deine Rückmeldung wurde auf der Seite „[$2 $1]“ gespeichert.",
- "feedback-close": "Erledigt",
- "feedback-bugcheck": "Super! Bitte überprüfe noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.",
- "feedback-bugnew": "Ich habe es überprüft. Den neuen Fehler melden.",
+ "feedback-thanks-title": "Danke!",
+ "feedback-useragent": "User Agent:",
"searchsuggest-search": "Suchen",
"searchsuggest-containing": "enthält …",
"api-error-badaccess-groups": "Du hast nicht die Berechtigung Dateien in dieses Wiki hochzuladen.",
@@ -3145,6 +3237,13 @@
"api-error-stashfailed": "Interner Fehler: Der Server konnte keine temporäre Datei speichern.",
"api-error-publishfailed": "Interner Fehler: Der Server konnte die temporäre Datei nicht veröffentlichen.",
"api-error-stasherror": "Beim Hochladen der Datei gab es einen Fehler.",
+ "api-error-stashedfilenotfound": "Die vorab gespeicherte Datei wurde beim Versuch, sie vom Speicher hochzuladen, nicht gefunden.",
+ "api-error-stashpathinvalid": "Der Pfad, unter dem die gespeicherte Datei gefunden werden sollte, war ungültig.",
+ "api-error-stashfilestorage": "Beim Speichern der Datei in den Speicher gab es einen Fehler.",
+ "api-error-stashzerolength": "Der Server konnte die Datei nicht speichern, da sie eine Länge von Null hat.",
+ "api-error-stashnotloggedin": "Du musst angemeldet sein, um Dateien in den Hochladespeicher zu speichern.",
+ "api-error-stashwrongowner": "Die Datei, auf die du im Speicher zugreifen möchtest, gehört nicht dir.",
+ "api-error-stashnosuchfilekey": "Der Dateischlüssel, auf den du im Speicher zugreifen möchtest, ist nicht vorhanden.",
"api-error-timeout": "Der Server hat nicht innerhalb der erwarteten Zeit reagiert.",
"api-error-unclassified": "Ein unbekannter Fehler ist aufgetreten.",
"api-error-unknown-code": "Unbekannter Fehler: „$1“",
@@ -3164,13 +3263,13 @@
"duration-millennia": "$1 {{PLURAL:$1|Jahrtausend|Jahrtausende}}",
"rotate-comment": "Bild um $1 {{PLURAL:$1|Grad}} im Uhrzeigersinn gedreht",
"limitreport-title": "Profilingdaten des Parsers:",
- "limitreport-cputime": "CPU-Zeit-Nutzung",
+ "limitreport-cputime": "Genutzte CPU-Zeit",
"limitreport-cputime-value": "{{PLURAL:$1|Eine Sekunde|$1 Sekunden}}",
- "limitreport-walltime": "Echtzeitnutzung",
+ "limitreport-walltime": "Genutzte Zeit",
"limitreport-walltime-value": "{{PLURAL:$1|Eine Sekunde|$1 Sekunden}}",
- "limitreport-ppvisitednodes": "Besuchte Knotenanzahl des Präprozessors",
+ "limitreport-ppvisitednodes": "Vom Präprozessor besuchte Knoten",
"limitreport-ppvisitednodes-value": "$1/$2",
- "limitreport-ppgeneratednodes": "Erzeugte Knotenanzahl des Präprozessors",
+ "limitreport-ppgeneratednodes": "Vom Präprozessor erzeugte Knoten",
"limitreport-ppgeneratednodes-value": "$1/$2",
"limitreport-postexpandincludesize": "Einbindungsgröße nach dem Expandieren",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|Byte|Bytes}}",
@@ -3192,6 +3291,8 @@
"expand_templates_generate_xml": "XML-Parser-Baum zeigen",
"expand_templates_generate_rawhtml": "Rohes HTML anzeigen",
"expand_templates_preview": "Vorschau",
+ "expand_templates_preview_fail_html": "<em>Da {{SITENAME}} rohes HTML aktiviert hat und es einen Verlust deiner Sitzungsdaten gab, ist die Vorschau als Vorsichtsmaßnahme gegen JavaScript-Angriffe versteckt.</em>\n\n<strong>Falls dies ein zulässiger Vorschauversuch ist, versuche es bitte erneut.</strong>\nFalls dieses Problem weiterhin bestehen bleibt, versuche dich [[Special:UserLogout|abzumelden]] und erneut anzumelden.",
+ "expand_templates_preview_fail_html_anon": "<em>Da {{SITENAME}} rohes HTML aktiviert hat und du nicht angemeldet bist, ist die Vorschau als Vorsichtsmaßnahme gegen JavaScript-Angriffe versteckt.</em>\n\n<strong>Falls dies ein zulässiger Vorschauversuch ist, [[Special:UserLogin|melde dich bitte an]] und versuche es erneut.</strong>",
"pagelanguage": "Seitensprachenauswahl",
"pagelang-name": "Seite",
"pagelang-language": "Sprache",
@@ -3202,13 +3303,14 @@
"log-name-pagelang": "Sprachenänderungs-Logbuch",
"log-description-pagelang": "Dies ist ein Logbuch mit Änderungen an Seitensprachen.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|änderte}} die Seitensprache für $3 von $4 nach $5.",
- "default-skin-not-found": "Hoppla! Die in <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDeine Installation scheint die folgenden Benutzeroberflächen zu enthalten. Siehe [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de das Benutzerhandbuch] zur Aktivierung und Auswahl des Standards.\n\n$2\n\n; Falls du gerade MediaWiki installiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. Versuche einige Benutzeroberflächen aus dem [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das Verzeichnis <code>skins/</code> kopieren und einfügen.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist.\n\n; Falls du gerade MediaWiki aktualisiert hast:\n: MediaWiki 1.24 und neuere Versionen aktivieren nicht mehr automatisch installierte Benutzeroberflächen (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die folgenden Zeilen in die Datei <code>LocalSettings.php</code> einfügen, um alle derzeit installierten Benutzeroberflächen zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade <code>LocalSettings.php</code> geändert hast:\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
- "default-skin-not-found-no-skins": "Hoppla! Die in <code>$wgDefaultSkin</code> als <code>$1</code> definierte Standardbenutzeroberfläche für dein Wiki ist nicht verfügbar.\n\nDu hast keine installierten Benutzeroberflächen.\n\n; Falls du gerade MediaWiki installiert oder aktualisiert hast:\n: Du hast vermutlich von Git oder direkt vom Quellcode mithilfe einer anderen Methode installiert. Dies wird erwartet. MediaWiki 1.24 und neuere Versionen enthalten keine Benutzeroberflächen im Haupt-Repositorium. Versuche einige Benutzeroberflächen aus dem [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Benutzeroberflächenverzeichnis] zu installieren, indem du:\n:* Den [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] herunterlädst, der mit verschiedenen Benutzeroberflächen und Erweiterungen kommt. Du kannst das <code>skins/</code>-Verzeichnis kopieren und einfügen.\n:* Eine der <code>mediawiki/skins/*</code>-Repositorien über Git in das <code dir=\"ltr\">skins/</code>-Verzeichnis deiner MediaWiki-Installation klonst.\n: Dies sollte nicht dein Git-Repositorium beeinträchtigen, falls du ein MediaWiki-Entwickler bist. Siehe das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch] zur Aktivierung von Benutzeroberflächen und Auswahl des Standards.",
+ "default-skin-not-found": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDie folgende(n) Benutzeroberfläche(n) scheinen vorhanden zu sein:\n\n$2\n\nSiehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].\n\n; Sofern du MediaWiki gerade installiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n\n; Sofern du MediaWiki gerade aktualisiert hast\n: Bei MediaWiki 1.24 und neueren Versionen werden die installierten Benutzeroberflächen nicht mehr automatisch aktiviert (siehe das [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Benutzerhandbuch]). Du kannst die folgenden Zeilen in die Datei <code>LocalSettings.php</code> einfügen, um alle derzeit installierten Benutzeroberflächen zu aktivieren:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du gerade die Datei <code>LocalSettings.php</code> geändert hast\n: Überprüfe die Namen der Benutzeroberflächen auf Tippfehler.",
+ "default-skin-not-found-no-skins": "Hoppla! Die mit <code>$wgDefaultSkin</code> als <code>$1</code>&nbsp;für dein Wiki definierte Standardbenutzeroberfläche ist nicht verfügbar.\n\nDu hast keine Benutzeroberfläche installiert.\n\n; Sofern du MediaWiki gerade installiert oder aktualisiert hast\n: Du hast MediaWiki vermutlich mit Hilfe von Git oder den Quellcode direkt anhand einer anderen Methode installiert. Das aktuelle Problem war deshalb zu erwarten, da MediaWiki 1.24 und neuere Versionen keine Benutzeroberflächen im Hauptrepositorium enthalten. Installiere zumindest eine im [https://www.mediawiki.org/wiki/Category:All_skins Verzeichnis der Benutzeroberflächen] enthaltene Benutzeroberfläche indem du:\n:* eines der Repositorien aus <code>mediawiki/skins/*</code> mit Hilfe von Git in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation klonst,\n:* die Dateiveröffentlichungen einzelner Benutzeroberflächen aus [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] herunterlädst und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopierst,\n:* die [https://www.mediawiki.org/wiki/Download/de Dateiveröffentlichung von MediaWiki] herunterlädst, die verschiedene Benutzeroberflächen sowie Erweiterungen enthält. Du kannst das dort enthaltene Verzeichnis <code>skins/</code> Verzeichnis nutzen und in das Verzeichnis <code dir=\"ltr\">skins/</code> deiner MediaWiki-Installation kopieren.\n: Siehe hierzu das [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Benutzerhandbuch zur Konfiguration von Benutzeroberflächen].",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''deaktiviert''')",
"mediastatistics": "Medienstatistiken",
"mediastatistics-summary": "Statistiken über hochgeladene Dateitypen. Dies beinhaltet nur die aktuellste Version einer Datei. Alte oder gelöschte Dateiversionen sind ausgeschlossen.",
- "mediastatistics-nbytes": "{{PLURAL:$1|Ein Byte|$1 Bytes}} ($2; $3%)",
+ "mediastatistics-nfiles": "$1 ($2 %)",
+ "mediastatistics-nbytes": "{{PLURAL:$1|Ein Byte|$1 Bytes}} ($2; $3 %)",
"mediastatistics-table-mimetype": "MIME-Typ",
"mediastatistics-table-extensions": "Mögliche Erweiterungen",
"mediastatistics-table-count": "Anzahl der Dateien",
@@ -3222,5 +3324,38 @@
"mediastatistics-header-office": "Office",
"mediastatistics-header-text": "Text",
"mediastatistics-header-executable": "Ausführbare Dateien",
- "mediastatistics-header-archive": "Komprimierte Formate"
+ "mediastatistics-header-archive": "Komprimierte Formate",
+ "json-warn-trailing-comma": "{{PLURAL:$1|Ein anhängendes Komma wurde|$1 anhängende Kommas wurden}} aus JSON entfernt",
+ "json-error-unknown": "Es gab ein Problem mit dem JSON. Fehler: $1",
+ "json-error-depth": "Die maximale Stapeltiefe wurde überschritten",
+ "json-error-state-mismatch": "Ungültiges oder fehlerhaftes JSON",
+ "json-error-ctrl-char": "Steuerzeichenfehler, vermutlich falsch kodiert",
+ "json-error-syntax": "Syntax-Fehler",
+ "json-error-utf8": "Fehlerhafte UTF-8-Zeichen, vermutlich falsch kodiert",
+ "json-error-recursion": "Eine oder mehrere zu kodierende rekursive Referenzen im Wert",
+ "json-error-inf-or-nan": "Eine oder mehrere zu kodierende NAN- oder INF-Werte im Wert",
+ "json-error-unsupported-type": "Ein Wert eines Typs, der nicht kodiert werden kann, wurde angegeben",
+ "headline-anchor-title": "Link zu diesem Abschnitt",
+ "special-characters-group-latin": "Lateinisch",
+ "special-characters-group-latinextended": "Lateinisch, erweitert",
+ "special-characters-group-ipa": "Internationales Phonetisches Alphabet (IPA)",
+ "special-characters-group-symbols": "Symbole",
+ "special-characters-group-greek": "Griechisch",
+ "special-characters-group-cyrillic": "Kyrillisch",
+ "special-characters-group-arabic": "Arabisch",
+ "special-characters-group-arabicextended": "Arabisch, erweitert",
+ "special-characters-group-persian": "Persisch",
+ "special-characters-group-hebrew": "Hebräisch",
+ "special-characters-group-bangla": "Bengalisch",
+ "special-characters-group-tamil": "Tamilisch",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singhalesisch",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thailändisch",
+ "special-characters-group-lao": "Laotisch",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "Halbgeviertstrich",
+ "special-characters-title-emdash": "Geviertstrich",
+ "special-characters-title-minus": "Minus"
}
diff --git a/languages/i18n/diq.json b/languages/i18n/diq.json
index 7b0a6adb..a497dec3 100644
--- a/languages/i18n/diq.json
+++ b/languages/i18n/diq.json
@@ -20,7 +20,8 @@
"Geitost",
"Microchip08",
"아라",
- "Calak"
+ "Calak",
+ "Macofe"
]
},
"tog-underline": "Bınê gırey de xete bance:",
@@ -132,9 +133,9 @@
"november-date": "Tışrino Peyên $1",
"december-date": "Kanun $1",
"pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriy}}",
- "category_header": "Pelê ke kategoriya \"$1\" miyan derê",
+ "category_header": "Pelê ke kategoriya \"$1\" derê",
"subcategories": "Kategoriyê bınêni",
- "category-media-header": "Dosyeyê ke kategoriya \"$1\" miyan derê",
+ "category-media-header": "Dosyeyê ke kategoriya \"$1\" derê",
"category-empty": "''Ena kategoriye de hewna qet nuştey ya zi medya çıniyê.''",
"hidden-categories": "{{PLURAL:$1|Kategoriya nımıtiye|Kategoriyê nımıtey}}",
"hidden-category-category": "Kategoriyê nımıtey",
@@ -205,7 +206,7 @@
"unprotectthispage": "Starkerdışe ena peler bıvurne",
"newpage": "Pela newiye",
"talkpage": "Ena pele sero werêne",
- "talkpagelinktext": "Vatenayış",
+ "talkpagelinktext": "Werênayış",
"specialpage": "Pela xısusiye",
"personaltools": "Hacetê şexsiy",
"articlepage": "Pela zerreki bıvêne",
@@ -276,7 +277,7 @@
"hidetoc": "bınımne",
"collapsible-collapse": "Kılm ke",
"collapsible-expand": "Hera ke",
- "thisisdeleted": "Bıvêne ya zi $1 peyser bia?",
+ "thisisdeleted": "Bıvêne ya zi $1 peyser biya?",
"viewdeleted": "$1 bıvêne?",
"restorelink": "{{PLURAL:$1|jew vurnayış besteriya|$1 vurnayışi besteriyaye}}",
"feedlinks": "Warikerdış:",
@@ -293,7 +294,7 @@
"sort-ascending": "Rêzkerdışo zêdiyaye",
"nstab-main": "Wesiqe",
"nstab-user": "Pela karberi",
- "nstab-media": "Pera Medya",
+ "nstab-media": "Pela medya",
"nstab-special": "Pela xase",
"nstab-project": "Pela procey",
"nstab-image": "Dosya",
@@ -338,7 +339,7 @@
"badtitletext": "Sernamey pela ke şıma waşt, nêvêrd, thalo/vengo ya ki zıwano miyanêno ğelet gırêdae ya ki sernamey wiki.\nBeno ke, tede yew ya zi zêdê işareti estê ke sernaman de nêxebetiyenê.",
"perfcached": "Datay cı ver hazır biye. No semedê ra nıkayin niyo! tewr zaf {{PLURAL:$1|netice|$1 netice}} debêno de",
"perfcachedts": "Cêr de malumatê nımıteyi esti, demdê newe kerdışo peyın: $1. Tewr zaf {{PLURAL:$4|netice|$4 neticey cı}} debyayo de",
- "querypage-no-updates": "Nıka newe kerdış nêbeno. no datayi ca de newe nêbeni .",
+ "querypage-no-updates": "Rocanebiyayışê na pele nıka cadayiyê.\nDayiyi tiya nıka newe nêbenê.",
"viewsource": "Çımey bıvêne",
"viewsource-title": "Cı geyrayışê $1'i bıvin",
"actionthrottled": "Kerden peysnaya",
@@ -356,7 +357,7 @@
"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": "Pelê xısusiy nênê vurnayış.",
+ "ns-specialprotected": "Pelê xısusiyi nênê vurnayış.",
"titleprotected": "Eno [[User:$1|$1]] zerreyê ena peli nişeno vuriye.\nSebeb: \"''$2''\".",
"filereadonlyerror": "Dosyay vurnayışê \"$1\" nê abê no lakin depoy dosya da \"$2\" mod dê salt wendi deyo.\n\nXızmetkarê kılitkerdışi wa bewni ro enay wa çımra ravyarno: \"$3\".",
"invalidtitle-knownnamespace": "Canemey \"$2\" u metnê \"$3\" xırabo",
@@ -372,8 +373,8 @@
"welcomecreation-msg": "Hesabê şıma abiyo.\n[[Special:Preferences|{{SITENAME}} vurnayişê tercihanê xo]], xo vir ra mekere.",
"yourname": "Nameyê karberi:",
"userlogin-yourname": "Nameyê karberi",
- "userlogin-yourname-ph": "Namey ğoyé karberi cı kewe",
- "createacct-another-username-ph": "Namey karberi de fi",
+ "userlogin-yourname-ph": "Nameyê xoyê karberi cı kewe",
+ "createacct-another-username-ph": "Nameyê karberi cı kewe",
"yourpassword": "Parola",
"userlogin-yourpassword": "Parola",
"userlogin-yourpassword-ph": "Parolaya xo cıkewe",
@@ -403,7 +404,7 @@
"gotaccountlink": "Cı kewe",
"userlogin-resetlink": "Melumatê cıkewtışi xo vira kerdê?",
"userlogin-resetpassword-link": "Parola xo kerda xo vira?",
- "userlogin-helplink2": "Heqde ronıştışi peşti",
+ "userlogin-helplink2": "Heqa qeydbiyayışi de peşti bıgêrên",
"userlogin-loggedin": "Tı xora namey {{GENDER:$1|$1}} ra kewtê/kewtay cı.\nFormê cêrêni bıgureyne ke namey karberio bin ra cı kewê.",
"userlogin-createanother": "Zewbi hesab vıraz",
"createacct-emailrequired": "Adresa e-postey",
@@ -510,12 +511,11 @@
"passwordreset-emailtitle": "Hesab timarê {{SITENAME}}",
"passwordreset-emailtext-ip": "Jeweri, {{SITENAME}} ra (ma heta şımayê, $1 IP adresi ra) ($4) teferuatê hesabdê şıma va wa biyaro xo viri. Karbero ke cêrdeyo {{PLURAL:$3|hesaba|eno hesaba}} ena e-posta adresiya aleqey cı esto:\n\n$2\n\n{{PLURAL:$3|ena parola idaretena|ena parola idareten}} {{PLURAL:$5|jew roc|$5 roca}}rêya.\nEna parolaya deqewe de u xorê ju parolaya newi bıweçine. Parolaya şıma emaya şıma viri se yana ena e-posta şıma nê weştase u şıma qayıl niye parolaya xo bıvurnese, ena mesacer peygoş bıkerê.",
"passwordreset-emailtext-user": "$1 enê karberi, {{SITENAME}} ra ($4) teferuatê hesab dê şıma va wa biyaro xo viri. Karbero ke cêrdeyo {{PLURAL:$3|hesaba|eno hesaba}} ena e-posta adresiya aleqey cı esto:\n\n$2\n\n{{PLURAL:$3|ena parola idaretena|ena parola idareten}} {{PLURAL:$5|jew roc|$5 roca}}rêya.\nEna parolaya deqewe de u xorê ju parolaya newi bıweçine. Parolaya şıma emaya şıma viri se yana ena e-posta şıma nê weştase u şıma qayıl niye parolaya xo bıvurnese, ena mesacer peygoş bıkerê.",
- "passwordreset-emailelement": "Namey karberi: $1\nParola vêrdiye: $2",
+ "passwordreset-emailelement": "Nameyê karberi: $1\nParolaya vêrdiye: $2",
"passwordreset-emailsent": "Yew e-posteyê esterıtışê parola rışiya.",
"passwordreset-emailsent-capture": "Yew e-posteyê esterıtışê parolayo ke rışiya, no cêr mocniyayo.",
"passwordreset-emailerror-capture": "Yew e-posteyê esterıtışê parolayo ke rışiya, no cêr mocniyayo, ema {{GENDER:$2|karber}}i rê rıştış de mıwefeq nêbi: $1",
"changeemail": "E-posta adresa xo bıvurnê",
- "changeemail-header": "E-posya adresta hesabdê xo bıvurnê",
"changeemail-text": "Şıma ke qailê e-postay xo bıvırnê, enê formi pırr kerê. Raştkerdışi rê ki şıma gani parolay xo bınusnê",
"changeemail-no-info": "Şıma gani bıkewê pele ke derdest bıresê na pele.",
"changeemail-oldemail": "E-postay şımawa nıkaêne:",
@@ -523,7 +523,6 @@
"changeemail-none": "(Çıniyo)",
"changeemail-password": "Parolay şımawa {{SITENAME}}i:",
"changeemail-submit": "E-postay xo bıvırnên",
- "changeemail-cancel": "Bıtexelne",
"changeemail-throttled": "Şıma zaf ronıştış akerdış ke.\nKerem ke verdi dekewten $1 bıpawe.",
"resettokens": "Nışanan reset ke",
"resettokens-text": "Şıma tiya de hesabê şıma ra elaqedar tayê kılitê icazetê cıresayışê melumati şenê sıfır kerê.\n\nŞıma be ğeletiye ra ke nê kerdê vıla ya zi hesabê şıma de xırabiye ke esta, naye bıkerê.",
@@ -710,7 +709,7 @@
"history-feed-item-nocomment": "$1 miyanê $2i de",
"history-feed-empty": "Pela cıgeyrayiye çıniya.\nBeno ke ena esteriya, ya zi namê cı vuriyo.\nSeba pelanê muhimanê newan [[Special:Search|cıgeyrayışê wiki de]] bıcerebne.",
"rev-deleted-comment": "(Timarkerdışe enay hewadeyayo)",
- "rev-deleted-user": "(namey karberi esteriyo)",
+ "rev-deleted-user": "(nameyê karberi esteriyo)",
"rev-deleted-event": "(fealiyetê cıkewtışi esteriyo)",
"rev-deleted-user-contribs": "[namey karberi ya zi adresa IPy esteriya - vurnayış iştırakan ra nımniyo]",
"rev-deleted-text-permission": "Çımraviyarnayışê ena pele '''esteriyo'''.\nBeno ke [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] de teferruat esto.",
@@ -726,7 +725,7 @@
"rev-suppressed-diff-view": "Jew timarkerdışê ena versiyon '''Ploxneyış'' biyo.\nÎdarekarî eşkeno ena dif bivîne; belki tiya de [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ploxnayış] de teferruat esto.",
"rev-delundel": "bımocne/bınımne",
"rev-showdeleted": "bımocne",
- "revisiondelete": "Bestere/çımraviyarnayışan peyser bia",
+ "revisiondelete": "Çımraviyarnayışan bestere/peyser biya",
"revdelete-nooldid-title": "Çımraviyarnayışo waşte nêvêreno",
"revdelete-nooldid-text": "Şıma vıraştışê nê fonksiyoni rê ya yew çımraviyarnayışo waşte diyar nêkerdo, çımraviyarnayışo diyarkerde çıniyo, ya ki şıma wazenê ke çımraviyarnayışê nıkayêni bınımnê.",
"revdelete-no-file": "Dosya diyarkerdiye çıniya.",
@@ -792,7 +791,6 @@
"mergehistory-reason": "Sebeb:",
"mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "Qeydé zew kerdışi",
- "pagemerge-logentry": "[[$1]] u [[$2]] yew kerd (revizyonî heta $3)",
"revertmerge": "Abırnê",
"mergelogpagetext": "Cêr de yew liste esta ke mocnena ra, raya tewr peyêne kamci pela tarixi be a bine ra şanawa pê.",
"history-title": "Tarixê çımraviyarnayışê \"$1\"",
@@ -843,7 +841,6 @@
"searchall": "pêro",
"showingresults": "#<strong>$2</strong> netican ra {{PLURAL:$1|<strong>1</strong> netice cêr dero|<strong>$1</strong> neticey cêr derê}}.",
"showingresultsinrange": "{{PLURAL:$1|<strong>1</strong> netice|<strong>$1</strong> neticey}} be mabeynê #<strong>$2</strong> ra be #<strong>$3</strong> cêr asenê.",
- "showingresultsheader": "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' hetê '''$3'''}} qe '''$4'''",
"search-nonefound": "Zey perskerdışê şıma netice nêvêniya.",
"powersearch-legend": "Cıgeyrayışo hera",
"powersearch-ns": "Cayanê nameyan de cıgeyrayış:",
@@ -940,7 +937,7 @@
"prefs-help-email": "Dayışê adresa e-postey keyfiyo, labelê seba eyarê parola lazıma, wexto ke şıma naye xo vira kerê.",
"prefs-help-email-others": "Pera ğoya kerderi de zew link vırazése karberé bini şımaré şenê mesac bırşé. Lakin e-posta adresa şıma héç cayé de niasena.",
"prefs-help-email-required": "E-mail adrese mecburiya.",
- "prefs-info": "Melumata şıma",
+ "prefs-info": "Melumato bıngehên",
"prefs-i18n": "Şar şélıg kerdış",
"prefs-signature": "İmza",
"prefs-dateformat": "Formatê tarixi",
@@ -1010,11 +1007,11 @@
"right-move-rootuserpages": "Pelanê kaberiê rıstımi bere",
"right-movefile": "Dosyan bere",
"right-suppressredirect": "Wexto ke pelan benê, pelanê çımey ra neql mevıraze",
- "right-upload": "Dosya bar bıke",
+ "right-upload": "Dosyeyan bar ke",
"right-reupload": "Dosyeyê ke estê, inan serde bınuse",
"right-reupload-own": "Dosyeyê ke to bar kerdi, inan sero bınuse",
"right-reupload-shared": "Dosyeyê ke ambarê medyao barekerde de, inan mehelli wedare",
- "right-upload_by_url": "Yew URL ra dosyan bar bıke",
+ "right-upload_by_url": "Yew URL ra dosyeyan bar ke",
"right-purge": "Virê sita seba yew pele bêdestur bestere.",
"right-autoconfirmed": "Perê ke nême kılit biyê, inan bıvurne",
"right-bot": "Zey yew kardê otomotiki kar bıvin",
@@ -1023,17 +1020,18 @@
"right-writeapi": "İstıfadey APIyê nuştey",
"right-delete": "Pele bestere",
"right-bigdelete": "Pelanê be tarixanê dergan bestere",
- "right-deletelogentry": "besternayış u mebesternayışa re qeyde definayışê xısusi",
- "right-deleterevision": "Vurnayışê xısusiyê ke ê pelanê, inan bestere ya zi peyser bia",
+ "right-deletelogentry": "Qeydanê cıkewtışanê xısusiyan bestere û peyser biya",
+ "right-deleterevision": "Vurnayışanê xısusiyanê pele bestere ya zi peyser biya",
"right-deletedhistory": "Qeydanê tarixanê esterıteyan de qayt ke, bê nuştey inan",
"right-deletedtext": "Mabênê newede vurnayışanê esterıtiyan de qaytê nuştey esterıtey u vurnayışan ke",
"right-browsearchive": "Pelanê esterıteyan bıgeyre",
- "right-undelete": "Jû pela esterıtiye peyser bia",
- "right-suppressrevision": "İdarekeran ra dızdeni/miyanki, newede vurnayışan de qayt ke u newede vıraze",
+ "right-undelete": "Yew pela esterıtiye peyser biya",
+ "right-suppressrevision": "İdarekeran ra miyanki, newede vurnayışan de qayt ke u newede vıraze",
+ "right-viewsuppressed": "İdarekeran ra miyanki newede vurnayışan de qayt ke",
"right-suppressionlog": "Rocekanê xasan bıvêne",
"right-block": "Karberanê binan karê vurnayışi ra bloke bıke",
"right-blockemail": "Yew karberê erşawıtışê/rıştena e-maili ra bloke bıke",
- "right-hideuser": "Yew namey karberi şari ra dızdeni/miyanki bloke bıke",
+ "right-hideuser": "Yew nameyê karberi şari ra miyanki bloke bıke",
"right-ipblock-exempt": "Blokanê IPi, oto-blokan u blokanê menzıli ra ravêre",
"right-proxyunbannable": "Blokanê otomatikiê proksiyan ra ravêre",
"right-unblockself": "Blokeyınan ake",
@@ -1055,7 +1053,7 @@
"right-markbotedits": "Vurnayışanê peyd ameyan, vurnayışê boti deye nışan kerê",
"right-noratelimit": "Sinoranê xızi (rate limit) ra tesir nêbi",
"right-import": "Pelan wikiyanê binan ra bia",
- "right-importupload": "Pelî dosya bar kerdişî ra import bike",
+ "right-importupload": "Barkerdışê yew dosya ra zerre ke",
"right-patrol": "Vurnayîşanê karberê binî nîşan bike ke patrol biyê",
"right-autopatrol": "Vurnayîşanê xo otomatik nîşan bike ke patrol biyê",
"right-patrolmarks": "Vurnayîşanê peniyî nîşan patrol biyê bivîne",
@@ -1084,13 +1082,13 @@
"action-upload": "ena dosya bar ke",
"action-reupload": "dosyayê ke database de esto ser ey binuse",
"action-reupload-shared": "dosyayê ki ho embarê medyayî de esto ser ay binusne",
- "action-upload_by_url": "Ena dosya yew URL ra bar bike",
+ "action-upload_by_url": "na dosya yew URL ra bar ke",
"action-writeapi": "ser nuşte API gure bike",
"action-delete": "ena pele bestere",
"action-deleterevision": "nê çımraviyarnayışi bestere",
"action-deletedhistory": "tarixê ena pel ki estereyî biya, ey bivine",
"action-browsearchive": "pelanê esterıteyan bıgeyre",
- "action-undelete": "ena pele reyna biyere",
+ "action-undelete": "ena pele meestere",
"action-suppressrevision": "revizyone ki nimnaye biye reyna bivîne u restore bike",
"action-suppressionlog": "enê qeydê xısusi bıvêne",
"action-block": "enê karberi vurnayışi ra bıreyne",
@@ -1112,7 +1110,7 @@
"action-editmyprivateinfo": "Xısusi malumate xo bıvurne",
"nchanges": "$1 {{PLURAL:$1|fın vurna|fıni vurna}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ra yok wazino}}",
- "enhancedrc-history": "verenayış",
+ "enhancedrc-history": "tarix",
"recentchanges": "Vurnayışê peyêni",
"recentchanges-legend": "Tercihê vurnayışanê peyênan",
"recentchanges-summary": "Ena pele de wiki sero vurnayışanê peyênan teqib ke.",
@@ -1193,7 +1191,7 @@
"filereuploadsummary": "Vurnayîşê dosyayî:",
"filestatus": "Weziyetê heqa telifi:",
"filesource": "Çıme:",
- "ignorewarning": "Îkazi kebul meke u dosya reyna bar bike",
+ "ignorewarning": "İqazi qebul meke û dosya reyna bar ke",
"ignorewarnings": "Îkazi kebul meke",
"minlength1": "Nameyanê dosyayî de gani bî ezamî yew herf est biyê.",
"illegalfilename": "\"$1\" no nameyê dosya de tayê karakteri nêşuxulyenî. newe ra tesel bıkerê",
@@ -1253,7 +1251,7 @@
"filename-prefix-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n# * Everything from a \"#\" character to the end of the line is a comment\n# * Every non-blank line is a prefix for typical file names assigned automatically by digital cameras\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobile phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- leave this line exactly as it is -->",
"upload-success-subj": "bar biyo",
"upload-success-msg": "[$2] barkerdışê şıma qebul bı. Barkerdışê şımayo itado: [[:{{ns:file}}:$1]]",
- "upload-failure-subj": "Problem bar bike",
+ "upload-failure-subj": "Problem bar ke",
"upload-failure-msg": "[$1] delal: $2 ra barkerdıştê şıman ra jew xelat vıcyayo.",
"upload-warning-subj": "İqazê barkerdışi",
"upload-warning-msg": "Barkerdış dê [$2] de xırabey vıcyê. Xırabi timar kerdışi re peyser şırê [[Special:Upload/stash/$1|heruna barkerdışi]].",
@@ -1370,8 +1368,8 @@
"filehist-nothumb": "Thumbnail çin o.",
"filehist-user": "Karber",
"filehist-dimensions": "Ebati",
- "filehist-filesize": "Ebata dosya",
- "filehist-comment": "Vacayış",
+ "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.",
@@ -1385,7 +1383,7 @@
"sharedupload-desc-edit": "Na dosya $1 proceyan dê binandı ke şeno bıgurweyno.\nŞıma qayılê ke malumatê cı bıvurnê se şıre [pela da $2 ].",
"sharedupload-desc-create": "Na dosya $1 proceyan dê binandı ke şeno bıgurweyno.\nŞıma qayılê ke malumatê cı bıvurnê se şıre [pela da $2 ].",
"filepage-nofile": "Ena name de dosya çin o.",
- "filepage-nofile-link": "Ena name de dosya çin o. Feqet ti eşkeno [$1 bar bike].",
+ "filepage-nofile-link": "Ebe nê name ra dosya çıniya, labelê tı şena [$1 ey kerê].",
"uploadnewversion-linktext": "Versiyonê newiyerê ena dosya bar ke",
"shared-repo-from": "$1 ra",
"shared-repo": "yew embarê repositoryî",
@@ -1417,7 +1415,7 @@
"filedelete-maintenance": "Esterayîş u resterasyonê dosyayî wextê texmirî de nibenê.",
"filedelete-maintenance-title": "Dosyaya nêbesterneyêna",
"mimesearch": "MIME bigêre",
- "mimesearch-summary": "no pel, no tewır dosyayan MIME kontrol kena. kewteye: tipa zerreyi/tipa bıni, e.g. <code>resim/jpeg</code>.",
+ "mimesearch-summary": "Na pele, dosyayanê MIME goreyê tewran ra parzûn kena. Cıkewtış: tewrê zerreki/tewro bınên ya zi tewrê zerreki/*, nımune: <code>image/jpeg</code>.",
"mimetype": "Babetê NIME",
"download": "bar ke",
"unwatchedpages": "Pelanê seyrnibiyeyî",
@@ -1431,15 +1429,12 @@
"randomincategory": "Ğoseri pera kategoriya",
"randomincategory-invalidcategory": "\"$1\" yew nameyê kategoriya vêrdiye niyo.",
"randomincategory-nopages": "Kategori da [[:Category:$1|$1]] de qet per çıniya.",
- "randomincategory-selectcategory": "Pera ke cıra raşt ameye kategori do bıgéri yo: $1 $2.",
- "randomincategory-selectcategory-submit": "Şo",
"randomredirect": "Serçarnayışo rastameye",
"randomredirect-nopages": "Cayê nameyê \"$1\" de serşıkıtışi çıniyê.",
"statistics": "İstatistiki",
"statistics-header-pages": "İstatistikê pele",
"statistics-header-edits": "Îstatistikê vurnayîşî",
- "statistics-header-views": "Îstatistiksê vînayîşî",
- "statistics-header-users": "Îstatistiksê karberî",
+ "statistics-header-users": "İstatistikê karberi",
"statistics-header-hooks": "Îstatistiksê binî",
"statistics-articles": "Pelanê tedesteyî",
"statistics-pages": "Peli",
@@ -1447,13 +1442,9 @@
"statistics-files": "Dosyayê bar biye",
"statistics-edits": "{{SITENAME}} saz kerdış ra hetana newke amora vırnayışan",
"statistics-edits-average": "Her pele sero nısbi vurnayış",
- "statistics-views-total": "Yekunî bivîne",
- "statistics-views-total-desc": "Peleyê ke çınyê yana xısusiyê e nina zerre nêkerdê",
- "statistics-views-peredit": "Ser her vurnayîşî de vînayîşî",
"statistics-users": "Qeyd biye [[Special:ListUsers|karberî]]",
"statistics-users-active": "Karberê aktifi",
"statistics-users-active-desc": "{{PLURAL:$1|roco peyin de|$1 roco peyin de}} karber ê ke kar kerdê.",
- "statistics-mostpopular": "Pelayanê ke tewr zafî vînî biye",
"pageswithprop": "Peli be yew xısusiyetê pele",
"pageswithprop-legend": "Peli be yew xısusiyetê pele",
"pageswithprop-text": "Na per pimanen pera kena liste.",
@@ -1494,7 +1485,6 @@
"uncategorizedtemplates": "Şablonê ke bêkategoriyê",
"unusedcategories": "Kategoriyê ke nêgureniyê",
"unusedimages": "Dosyeyê ke nê xebtênê",
- "popularpages": "Pelî ke populer o.",
"wantedcategories": "Kategoriyê ke waziyayê",
"wantedpages": "Peleye ke waştênê",
"wantedpages-badtitle": "sernuşte meqbul niyo: $1",
@@ -1504,7 +1494,7 @@
"wantedtemplates": "Şablonê ke waziyenê",
"mostlinked": "Pelî ke tewr zafî lînk bîy.",
"mostlinkedcategories": "Kategoriyê ke tewr zehf meqaley tede estê",
- "mostlinkedtemplates": "Şablonê ke tewr zafî pela re gıre bîye.",
+ "mostlinkedtemplates": "Pelê ke zêdêr gureniyenê",
"mostcategories": "Pelan ke tewr zaf kategorî estê.",
"mostimages": "Dosyayan ke tewr zaf link estê.",
"mostinterwikis": "Pelan ke tewr zaf interwiki biyê.",
@@ -1556,7 +1546,7 @@
"booksources": "Çımeyê kıtaban",
"booksources-search-legend": "Seba çımeyanê kıtaban cı geyre",
"booksources-isbn": "ISBN:",
- "booksources-go": "Şo",
+ "booksources-search": "Cı geyre",
"booksources-text": "listeya cêrıni, keyepelê kitap rotoxan o.",
"booksources-invalid-isbn": "ISBN raşt nêasena bıewnê çımeyê orjinali, raşt kopya biya nê nêbiyaya?",
"specialloguserlabel": "Kerdoğ:",
@@ -1587,8 +1577,8 @@
"categoriesfrom": "Kategoriyê ke be ninan dest pêkenê, bımocne:",
"special-categories-sort-count": "goreyê çendi rêz ker.",
"special-categories-sort-abc": "alfabetik rêz ker",
- "deletedcontributions": "İştiraqê karberan de besternayına",
- "deletedcontributions-title": "Îştirakê karberî wederna",
+ "deletedcontributions": "İştırakê karberi esterdi",
+ "deletedcontributions-title": "İştırakê karberi esterdi",
"sp-deletedcontributions-contribs": "iştıraqi",
"linksearch": "Gıreyê teberi cı geyrê",
"linksearch-pat": "bıgêr motif:",
@@ -1645,7 +1635,7 @@
"noemailtext": "no/na karber yew e-postayo meqbul nêdawa/o",
"nowikiemailtext": "no/na karber/e, karberanê binani ra gırewtışê e-postayi tercih nêkerd.",
"emailnotarget": "Qandê Gêreninamey karberiyo wuna çınyo yana xırabo.",
- "emailtarget": "Namey Karberi defiyê de.",
+ "emailtarget": "Nameyê karberiyê gırewtoği cıkewên.",
"emailusername": "Nameyê karberi:",
"emailusernamesubmit": "İtaet",
"email-legend": "karberê {{SITENAME}} binan re e-posta bıerşaw",
@@ -1682,7 +1672,7 @@
"wlheader-enotif": "E-mail xeber dayiş abiyo.",
"wlheader-showupdated": "ziyaretê şıma ye peyini de vuryayişê peli pê '''nuşteyo qalıni''' mocyayo.",
"wlnote": "$3 seate u bahde $4 deqa dıma {{PLURAL:$2|ju seate dı|'''$2''' ju seate dı}} {{PLURAL:$1|vurnayışe peyeni|vurnayışe '''$1''' peyeni}} cêrdeyê",
- "wlshowlast": "Peyni de vurnayışan ra $1 seata u $2 roca $3 bımocnê",
+ "wlshowlast": "Peyni de vurnayışan ra $1 seata u $2 roca bımocnê",
"watchlist-options": "Tercihê liste da seyri",
"watching": "Seyr ke...",
"unwatching": "Seyr meke...",
@@ -1717,9 +1707,9 @@
"actioncomplete": "Kar bi temam",
"actionfailed": "kar nêbı",
"deletedtext": "\"$1\" biya wedariya.\nQe qeydê wedarnayışi, $2 bevinin.",
- "dellogpage": "Qeydê esterniye",
+ "dellogpage": "Qeydê esterıtışi",
"dellogpagetext": "listeya cêrıni heme qaydê hewn a kerdeyan o.",
- "deletionlog": "qaydê hewnakerdışani",
+ "deletionlog": "qeydê esterıtışi",
"reverted": "revizyono verin tepiya anciyayo",
"deletecomment": "Sebeb:",
"deleteotherreason": "Sebebo bin:",
@@ -1729,8 +1719,7 @@
"delete-toobig": "no pel, pê $1 {{PLURAL:$1|tene vuriyayiş|tene vuriyayiş}}i wayirê yew tarixo kehen o.\nqey hewna nêşiyayişi wina pelani u {{SITENAME}}nêxerebnayişê keyepeli yew hed niyaya ro.",
"delete-warning-toobig": "no pel wayirê tarixê vurnayiş ê derg o, $1 {{PLURAL:$1|revizyonê|revizyonê}} seri de.\nhewn a kerdışê ıney {{SITENAME}} şuxul bıne gırano;\nbı diqqet dewam kerê.",
"rollback": "vurnayişan tepiya bıger",
- "rollback_short": "Peyser bia",
- "rollbacklink": "peyser bia",
+ "rollbacklink": "peyser biya",
"rollbacklinkcount": "$1 {{PLURAL:$1|vurnayış|vurnayışi}} peyd gıroti",
"rollbacklinkcount-morethan": "$1 {{PLURAL:$1|vurnayış|vuranyışi}} tewr peyd gırot",
"rollbackfailed": "Peyserardış nêbi",
@@ -1811,7 +1800,7 @@
"undeleterevision-missing": "revizyonê nemeqbul u vindbiyayeyi.\nRevizyoni ya hewn a biyê ya arşiw ra veciyayê ya zi cıresayişê şımayi şaş o.",
"undelete-nodiff": "revizyonê verıni nidiya",
"undeletebtn": "Timar bike",
- "undeletelink": "bıvêne/peyser bia",
+ "undeletelink": "bıvêne/peyser biya",
"undeleteviewlink": "bıvin",
"undeleteinvert": "Weçinıtışi açarne",
"undeletecomment": "Sebeb:",
@@ -1854,7 +1843,7 @@
"sp-contributions-newbies-sub": "Qe hesebê newe",
"sp-contributions-newbies-title": "Îştîrakê karberî ser hesabê neweyî",
"sp-contributions-blocklog": "Qeydê blokey",
- "sp-contributions-deleted": "İştırakê karberi esterd",
+ "sp-contributions-deleted": "iştırakê karberi esterdi",
"sp-contributions-uploads": "barkerdey",
"sp-contributions-logs": "qeydi",
"sp-contributions-talk": "werênayış",
@@ -1944,7 +1933,7 @@
"emailblock": "e-mail blok biyo",
"blocklist-nousertalk": "ti nieşken pele minaqaşe xo bivurne",
"ipblocklist-empty": "Lista kılitkerdışi venga.",
- "ipblocklist-no-results": "Adresa IPya waştiye ya zi namey karberi kılit nêbiyo.",
+ "ipblocklist-no-results": "Adresa IPya waştiye ya zi nameyê karberi kılit nêbiyo.",
"blocklink": "kılit ke",
"unblocklink": "bloki wedare",
"change-blocklink": "kılitkerdışi bıvurne",
@@ -1958,7 +1947,7 @@
"reblock-logentry": "qey [[$1]]i tarixê qediyayişi $2 $3 pa ninan a eyarê ver-grewtışan vurna.",
"blocklogtext": "No kuliyatê kılitkerdış u rakerdışê fealiyetê karberano.\nAdresê IP'ya ke otomatikmen kılit biyê lista de çıniya.\nSeba lista karberanê ke heta nıka kılit biyê [[Special:BlockList|lista kılitkerdışê IPy]] bıvinê.",
"unblocklogentry": "$1 ake",
- "block-log-flags-anononly": "karberê anomini tenya",
+ "block-log-flags-anononly": "tenya karberê anonimi",
"block-log-flags-nocreate": "akerdışê hesabi racneyayo",
"block-log-flags-noautoblock": "Oto-wedariye terkneyayo",
"block-log-flags-noemail": "e-posta biya bloqe",
@@ -2036,7 +2025,7 @@
"movesubpagetext": "{{PLURAL:$1|pelê bınıni yê|pelê bınıni yê}} no $1 peli cer de yo.",
"movenosubpage": "pelê bınıni yê no peli çino.",
"movereason": "Sebeb:",
- "revertmove": "peyser bia",
+ "revertmove": "peyser biya",
"delete_and_move": "Bestere û bere",
"delete_and_move_text": "==gani hewn a bıbıo/bıesteriyo==\n\n\" no [[:$1]]\" name de yew pel ca ra esto. şıma wazeni pê hewn a kerdışê ey peli vurnayişê nameyi bıkeri?",
"delete_and_move_confirm": "Eya, na pele bestere",
@@ -2103,14 +2092,13 @@
"import": "Peleyi import bik",
"importinterwiki": "Împortê transwîkî",
"import-interwiki-text": "qey kırıştışê zerreyi yew wiki u pel bıvıcinê.\ntarixê revizyon u nameyê nuştoxi pawyene.\nkarê zerredayişê benateyê wikiyani[[Special:Log/import|zerreyê rocaneyê kırıştî de]] qeyd beno.",
- "import-interwiki-source": "Çime wîkî/pel:",
- "import-interwiki-history": "Qe eno pel, revizyonê tarixê hemî kopya bike",
- "import-interwiki-templates": "Şablonê hemî dehil bike",
- "import-interwiki-submit": "Azare de",
- "import-interwiki-namespace": "Destinasyonê canameyî:",
+ "import-interwiki-history": "Qeydanê pele pêrune kopya ke",
+ "import-interwiki-templates": "Şablonan pêro zerre ke",
+ "import-interwiki-submit": "Zerre ke",
+ "import-interwiki-namespace": "Hedefê cayê nameyi:",
"import-interwiki-rootpage": "Hedef pelaya reçi (opsiyonel):",
"import-upload-filename": "Nameyê dosyayi:",
- "import-comment": "Vatış:",
+ "import-comment": "Mışewre:",
"importtext": "Kerem ke dosyay, çımeyê wiki ra pê [[Special:Export|kırıştışê teberdayişi]] bıdê teber, Komputerê xo de qeyd kerê u bar kerê tiya.",
"importstart": "Pelan împort kenî",
"import-revision-count": "$1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
@@ -2130,7 +2118,7 @@
"import-noarticle": "Pel çino ke împort bike!",
"import-nonewrevisions": "Qet versiyoni nêardi (nê pêro ya vera biyê ya zi qandê xeteyan ra nayinan sera xıl diyayo).",
"xml-error-string": "$1 çizgi de $2 col $3 (bit $4): $5",
- "import-upload": "Dosyayê XML bar bike",
+ "import-upload": "Dosyaya XML bar ke",
"import-token-mismatch": "vindibiyayişê ma'lumatê hesabi. kerem kerê newe ra tesel/cereb bıkerê.",
"import-invalid-interwiki": "Ena wiki ra azere kerdış nêbeno.",
"import-error-edit": "Pela \" $1 \" qandê vurnayışi aya nêgêrêna çıkı cı rê icazet nêdeyayo.",
@@ -2144,18 +2132,14 @@
"import-rootpage-nosubpage": "Qan de bınnaman reçe de \"$1\" re mısade nedano.",
"importlogpage": "Defterê seyırio idxal",
"importlogpagetext": "wiki yo ke nişane biyo tera kırıştışê zerredayişi nêbeno.",
- "import-logentry-upload": "dosyayê bar kerdişî ra [[$1]] împort biyo",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
- "import-logentry-interwiki": "$1 transwiki biyo",
"import-logentry-interwiki-detail": "$2 ra $1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
"javascripttest": "Cerebnayışê JavaScripti",
- "javascripttest-title": "Testê $1 gurweyênê",
"javascripttest-pagetext-noframework": "Na pela testanê JavaScripta gurweynayışi re abıryaya.",
"javascripttest-pagetext-unknownframework": "Çerçeweyê \"$1\" cerbnayışi xırabo.",
"javascripttest-pagetext-frameworks": "Şıma ra reca xorê cêr ra test weçinê:$1",
"javascripttest-pagetext-skins": "Testa akarfinayışi rê verqayt:",
"javascripttest-qunit-intro": "Mediawiki.org dı [dokumanê $1] bıvinê.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
"tooltip-pt-userpage": "Pela şımaya karberi",
"tooltip-pt-anonuserpage": "pelê karberê IPyi",
"tooltip-pt-mytalk": "Pela toya werênayışi",
@@ -2200,7 +2184,7 @@
"tooltip-t-permalink": "Gırêyo daimi be ena versiyonê pele",
"tooltip-ca-nstab-main": "Perra muhtevay bıvin",
"tooltip-ca-nstab-user": "Pela karberi bıvêne",
- "tooltip-ca-nstab-media": "Pera medya bıvin",
+ "tooltip-ca-nstab-media": "Pela medya bıvêne",
"tooltip-ca-nstab-special": "Na yew pela xasa, şıma nêşenê sero vurnayış bıkerê",
"tooltip-ca-nstab-project": "Pela procey bıvêne",
"tooltip-ca-nstab-image": "Pera dosyayer bıvin",
@@ -2218,7 +2202,7 @@
"tooltip-watchlistedit-raw-submit": "Lista seyrkerdışi newe ke",
"tooltip-recreate": "pel hewn a bışiyo zi tepiya biya",
"tooltip-upload": "Sergen de bari be",
- "tooltip-rollback": "\"Peyser bia\" be yew tık pela iştıraq(an)ê peyên|i(an) peyser ano.",
+ "tooltip-rollback": "\"Peyser biya\" be yew tık pela iştıraqanê peyênan peyser ano",
"tooltip-undo": "\"Undo\" ena vurnayışê newi iptal kena u vurnayışê verni a kena.\nTı eşkeno yew sebeb bınus.",
"tooltip-preferences-save": "Terciha qeyd ke",
"tooltip-summary": "Yew xulasaya kilm binuse",
@@ -2257,7 +2241,6 @@
"pageinfo-robot-policy": "Weziyetê motor de cıgeyrayışi",
"pageinfo-robot-index": "İndeksbiyayen",
"pageinfo-robot-noindex": "İndeksnêbiyayen",
- "pageinfo-views": "Amarina mocnayışan",
"pageinfo-watchers": "Amariya pela serykeran",
"pageinfo-few-watchers": "$1 ra tayê {{PLURAL:$1|seyrker|seyrkeri}}",
"pageinfo-redirects-name": "Hetenayışê na perer",
@@ -2353,7 +2336,7 @@
"hours": "{{PLURAL:$1|$1 saete|$1 saetan}}",
"days": "{{PLURAL:$1|$1 roce|$1 roci}}",
"weeks": "{{PLURAL:$1|$1 hefte|$1 heftey}}",
- "months": "{{PLURAL:$1|aşme|$1 aşman}}",
+ "months": "{{PLURAL:$1|aşme|$1 aşmi}}",
"years": "{{PLURAL:$1|$1 serre|$1 serri}}",
"ago": "Verê $1",
"just-now": "tafte nıka",
@@ -2410,19 +2393,19 @@
"metadata-fields": "Resımê meydanê metadataê ke na pele de benê lista, pela resımmocnaene de ke tabloê metadata gına waro, gureniyenê.\nÊ bini zey sayekerdoğan nımiyenê.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"metadata-langitem": "'''$2:''' $1",
"metadata-langitem-default": "$1",
- "exif-imagewidth": "Herayey",
+ "exif-imagewidth": "Herayiye",
"exif-imagelength": "Berziye",
"exif-bitspersample": "yew parçe de biti",
"exif-compression": "Planê kompresyoni",
"exif-photometricinterpretation": "Compozisyonê pixeli",
- "exif-orientation": "Oriyentasyon",
+ "exif-orientation": "Berhetkerdış",
"exif-samplesperpixel": "teneyê parçeyi",
"exif-planarconfiguration": "Rezeyê datayi",
"exif-ycbcrsubsampling": "Subsampleyi ebatê Y heta C",
"exif-ycbcrpositioning": "pozisyonê Y u C",
"exif-xresolution": "Rezulasyanê veriniye",
"exif-yresolution": "Rezulasyanê derganiye",
- "exif-stripoffsets": "cayê data yê resim",
+ "exif-stripoffsets": "Cayê melumatê resımi",
"exif-rowsperstrip": "Yew reze de teneyê dizeyi",
"exif-stripbytecounts": "Yew compresyon de dizeyi",
"exif-jpeginterchangeformat": "JPEG SOI rê ayar bike",
@@ -2445,7 +2428,7 @@
"exif-compressedbitsperpixel": "Modê komprasyonê resimi",
"exif-pixelydimension": "Herayeya resimi",
"exif-pixelxdimension": "Berzeya resimi",
- "exif-usercomment": "Hulasayê karberi",
+ "exif-usercomment": "Mışewreyê karberi",
"exif-relatedsoundfile": "Derhekê dosya yê vengi",
"exif-datetimeoriginal": "Zeman u tarixê data varaziyayişi",
"exif-datetimedigitized": "Zeman u tarixê dicital kerdişi",
@@ -2527,11 +2510,11 @@
"exif-coordinate-format": "$1° $2′ $3″ $4",
"exif-jpegfilecomment": "Vatışê dosyada JPEG'i",
"exif-keywords": "Qesa kelimey",
- "exif-worldregioncreated": "Resim dınya dı qanci mıntıqara gêriyayo",
- "exif-countrycreated": "Resim qanci dewlet ra gêriyayo",
- "exif-countrycodecreated": "Cayo ke resim ancıyayo kodê dewlet da cı",
- "exif-provinceorstatecreated": "Cayê resim antışi dewlet yana wılayet",
- "exif-citycreated": "Suka ke resim gêriyayao",
+ "exif-worldregioncreated": "Mıntıqaya dınyaya ke tede resım gêriyayayo",
+ "exif-countrycreated": "Dewleta ke tede resım gêriyayayo",
+ "exif-countrycodecreated": "Kodê dewleta ke tede resım anciyayo",
+ "exif-provinceorstatecreated": "Wılayet ya zi dewleta ke tede resım anciyayo",
+ "exif-citycreated": "Sûka ke tede resım gêriyayayo",
"exif-sublocationcreated": "Bın lokasyonê resimê suker da cı grot",
"exif-worldregiondest": "Wareyo ke mocneyêno",
"exif-countrydest": "Dewleta ke mocneyêna",
@@ -2550,7 +2533,7 @@
"exif-locationdest": "Tarifê cay",
"exif-locationdestcode": "Lokasyon kodi vaciya",
"exif-objectcycle": "Qandê medyay deme u roce cı",
- "exif-contact": "Zanışiya irtibati",
+ "exif-contact": "Melumatê irtıbati",
"exif-writer": "Nuştekar",
"exif-languagecode": "Zıwan",
"exif-iimversion": "Verqaydê IIM",
@@ -2587,8 +2570,8 @@
"exif-event": "Weqaya ke nameycıyo ravreno",
"exif-organisationinimage": "Organizasyono ke ravêreno",
"exif-personinimage": "Merdumo ke nameycıyo ravêreno",
- "exif-originalimageheight": "Veror de resim nêkırpnayışi dergeya cı",
- "exif-originalimagewidth": "Veror de resim nêkırpnayışi herayeya cı",
+ "exif-originalimageheight": "Nêbırniyane ra ver derganiya resımi",
+ "exif-originalimagewidth": "Nêbırniyane ra ver verındiya resımi",
"exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
"exif-subjectnewscode-value": "$2 ($1)",
"exif-compression-1": "Nêdegusneyayo",
@@ -2745,12 +2728,12 @@
"exif-ycbcrpositioning-1": "Wertekerdış",
"exif-ycbcrpositioning-2": "Wayırê-site",
"exif-dc-contributor": "İştıraqkeri",
- "exif-dc-coverage": "Heruna yana wextin grotışa medya",
+ "exif-dc-coverage": "Hal ya zi demê xozerrenayışê medya",
"exif-dc-date": "Tarix(i)",
"exif-dc-publisher": "Hesrekar",
"exif-dc-relation": "Medyay cı",
"exif-dc-rights": "Heqi",
- "exif-dc-source": "Medyaya çımey",
+ "exif-dc-source": "Medyaya çımeyi",
"exif-dc-type": "Babeta medyay",
"exif-rating-rejected": "Red ke",
"exif-isospeedratings-overflow": "65535 ra gırdo",
@@ -2776,7 +2759,6 @@
"exif-urgency-low": "($1) Kemiyo",
"exif-urgency-high": "( $1 ) Vêşiyo",
"exif-urgency-other": "Sıftê şınasiya karberi ($1)",
- "watchlistall2": "pêro",
"namespacesall": "pêro",
"monthsall": "pêro",
"confirmemail": "Adresê e-posta tesdiq ker",
@@ -2935,7 +2917,6 @@
"hebrew-calendar-m12-gen": "Elul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|mesac]])",
"timezone-utc": "[[UTC]]",
- "unknown_extension_tag": "Etiketê ilaweyo nêzanayey \"$1\"",
"duplicate-defaultsort": "'''Tembe:''' Hesıbyaye sırmey ratnayış de \"$2\" sırmey ratnayış de \"$1\"i nêhesıbneno.",
"version": "Versiyon",
"version-extensions": "Ekstensiyonî ke ronaye",
@@ -2997,14 +2978,14 @@
"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": "Pelê xısusiy",
+ "specialpages": "Pelê xısusiyi",
"specialpages-note-top": "Kıtabek",
"specialpages-note": "* Pelê xasê normali.\n* <span class=\"mw-specialpagerestricted\">Pelê xasê nımıtey.</span>",
- "specialpages-group-maintenance": "Raporê tepıştışi",
+ "specialpages-group-maintenance": "Raporê pawıtışi",
"specialpages-group-other": "Pelê xasiyê bini",
"specialpages-group-login": "Cı kewe / hesab vıraze",
"specialpages-group-changes": "Vurnayişê peni u logan",
- "specialpages-group-media": "Raporê medya u bar kerdîşî",
+ "specialpages-group-media": "Raporê medya û barkerdışi",
"specialpages-group-users": "Karber u heqqî",
"specialpages-group-highuse": "Peleyê ke vêşi karênê",
"specialpages-group-pages": "Listeyê pelan",
@@ -3012,6 +2993,7 @@
"specialpages-group-wiki": "Melumat u haceti",
"specialpages-group-redirects": "Pela xasîyê ke heteneyayê",
"specialpages-group-spam": "haletê spami",
+ "specialpages-group-developer": "Xacetanê raverberdoğî",
"blankpage": "Pela venge",
"intentionallyblankpage": "Ena pel bi zanayişî weng mendo.",
"external_image_whitelist": " #no satır zey xo verde/raverde<pre>\n#parçeyê ifadeya rêzbiyayeyani (têna zerreyê ıney de // ) u çıtayo/çiyo zi mende cêr de têare kerê.\n#ney URL ya (hotlink) resmê teberi de hemcıta benî.\n#Ê yê ke hemcıt (eşleşmek-hemçift) biyê zey resımi asenî, eqsê hal de zi zey gıreyê resmi aseno.\nsatır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.\n#herfa gırd û qıci ferq nêkeno\n\n#parçeyê ifadeya rêzbiyayeyani bıerzê serê ney satıri. no satır zey xo verde/raverde </pre>",
@@ -3040,7 +3022,7 @@
"compare-title-not-exists": "Sernameyo ke şımayê vanê mewcud niyo.",
"compare-revision-not-exists": "Revizyono ke şımaye vanê mewcud niyo.",
"dberr-problems": "Mayê muxulêm! Ena sita dı newke xırabiya teknik esta.",
- "dberr-again": "Yew di dekika vinder u hin bar bike.",
+ "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.",
@@ -3097,23 +3079,24 @@
"logentry-rights-rights-legacy": "$1 qandê $3 rê ezayiya grube {{GENDER:$2|vuriye}}",
"logentry-rights-autopromote": "$1 otomatikmen $4 ra $5 {{GENDER:$2|terfi bi}}",
"rightsnone": "(çıniyo)",
+ "revdelete-summary": "kılmvatışê vuriyayişi",
+ "feedback-adding": "Pela rê peyxeberdar defêno...",
+ "feedback-bugcheck": "Harika! Sadece [xırabina ke $1 ] çınyayışê cı kontrol keno.",
+ "feedback-bugnew": "Mı qontrol ke. Xetaya newi xeber ke",
"feedback-bugornote": "Jew mersela teferruato teknik esta şıma reca malumatê şıma hazıro se [ $1 jew xırab rapor] bıvinê.Zewbi zi, formê cerê xo rê şenê karfiyê. Vatışê xo pela da \"[ $3 $2 ]\", namey karber dê xoya piya u wasteriya karfiye.",
- "feedback-subject": "Mewzu:",
- "feedback-message": "Mesac:",
"feedback-cancel": "Bıtexelne",
- "feedback-submit": "Peyxeberdar Bırşe",
- "feedback-adding": "Pela rê peyxeberdar defêno...",
+ "feedback-close": "Biya star",
"feedback-error1": "Xeta: API ra neticey ne vıcyay",
"feedback-error2": "Xeta: Timar kerdış nebı",
"feedback-error3": "Xeta: API ra cewab çıno",
+ "feedback-message": "Mesac:",
+ "feedback-subject": "Mewzu:",
+ "feedback-submit": "Bırışe",
"feedback-thanks": "Teşekkur kemê! Vatışê şıma pela da \"[$2 $1]\" esta.",
- "feedback-close": "Biya star",
- "feedback-bugcheck": "Harika! Sadece [xırabina ke $1 ] çınyayışê cı kontrol keno.",
- "feedback-bugnew": "Mı qontrol ke. Xetaya newi xeber ke",
"searchsuggest-search": "Cı geyre",
"searchsuggest-containing": "Estên...",
"api-error-badaccess-groups": "Ena wiki de dosya barkerdışi rê mısade nêdeyêno.",
- "api-error-badtoken": "Xirabiya zerrek:Xırab resim.",
+ "api-error-badtoken": "Xetaya zerreki: Antışo xırabın.",
"api-error-copyuploaddisabled": "URL barkerdış ena waster dı qefılyayo.",
"api-error-duplicate": "Ena {{PLURAL:$1|ze ke [zey $2]|biya [zey dosya da $2]}} zeq wesiqa biya wendeyê.",
"api-error-duplicate-archive": "Ena {{PLURAL:$1|vurneyaya [$2 zey na dosya]| [zerrey cı zey $2 dosya]}} aseno,feqet {{PLURAL:$1|ena dosya|tewr veri}} besterneyaya.",
@@ -3127,7 +3110,7 @@
"api-error-file-too-large": "Dosyaye ke şıma rışta zaf gırda.",
"api-error-filename-tooshort": "Namayê dosyayi zaf kilm a.",
"api-error-filetype-banned": "Tipê ena dosya qedexe biya.",
- "api-error-filetype-banned-type": "$1 {{PLURAL:$4|Dosya qebul ne vinena|dosya qebul ne vinena|Ena babeta dosya qebul ne vinena}}. Eke cırê izin deyayo se {{PLURAL:$3|Babatan dosyayan|babeta dosyayan}} de $2 bıvin.",
+ "api-error-filetype-banned-type": "$1 {{PLURAL:$4|babetê dosyayo destûrın niyo|babetên dosyeyanê destûrınan niyê}}. {{PLURAL:$3|Babetê dosyayo destûrın|Babetên dosyeyanê destûrınan}} $2.",
"api-error-filetype-missing": "Derganiya dosya kemiya",
"api-error-hookaborted": "Vurnayişê tu ke to cerbna pê yew çengal ra terkneya.",
"api-error-http": "Xırabiya zerreki:Wasteriya irtabet bırya.",
@@ -3162,7 +3145,7 @@
"duration-decades": "$1 {{PLURAL:$1|dades|dadesi}}",
"duration-centuries": "$1 {{PLURAL:$1|seserre|seserri}}",
"duration-millennia": "$1 {{PLURAL:$1|milenyum|milenyumi}}",
- "rotate-comment": "Resim heta sehata $1 {{PLURAL:$1|derece|derecey}} bi cerx",
+ "rotate-comment": "Resım hetê saete de $1 {{PLURAL:$1|derece|dereceyi}} çerexniya",
"limitreport-title": "Agoznaye malumata profili:",
"limitreport-cputime": "CPU dem karnayış",
"limitreport-cputime-value": "$1 {{PLURAL:$1|saniye|saniyeyan}}",
@@ -3188,5 +3171,27 @@
"expand_templates_remove_nowiki": "neticeyan de etiketê <nowiki> yan çap bıker",
"expand_templates_generate_xml": "Dara XML arêdayoği bımocne",
"expand_templates_generate_rawhtml": "Xam HTML'i bıvin",
- "expand_templates_preview": "Verqayt"
+ "expand_templates_preview": "Verqayt",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "latinkiya hêrabiyaye",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Semboli",
+ "special-characters-group-greek": "Yunan",
+ "special-characters-group-cyrillic": "Kiril",
+ "special-characters-group-arabic": "Erebki",
+ "special-characters-group-arabicextended": "Erebkiya Heraye",
+ "special-characters-group-persian": "Fariski",
+ "special-characters-group-hebrew": "İbraniki",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhalaki",
+ "special-characters-group-gujarati": "Gujaratki",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "tira kılme",
+ "special-characters-title-emdash": "tira derge",
+ "special-characters-title-minus": "işaretê kemiye"
}
diff --git a/languages/i18n/dsb.json b/languages/i18n/dsb.json
index 2cebf9a3..295db5a4 100644
--- a/languages/i18n/dsb.json
+++ b/languages/i18n/dsb.json
@@ -17,7 +17,8 @@
"Tlustulimu",
"Tlustulimu Nepl1",
"아라",
- "TMg"
+ "TMg",
+ "Macofe"
]
},
"tog-underline": "Wótkaze pódšmarnuś:",
@@ -509,7 +510,6 @@
"passwordreset-emailsent-capture": "E-mail za anulěrowanje gronidła jo se pósłała, kótaraž pokazujo se dołojce.",
"passwordreset-emailerror-capture": "E-mail za anulěrowanje gronidła jo se napórała, kótaraž se dołojce pokazujo, ale słanje {{GENDER:$2|wužywarjeju|wužywarce}} njejo se raźiło: $1",
"changeemail": "E-mailowu adresu změniś",
- "changeemail-header": "Kontowu e-mailowu adresu změniś",
"changeemail-text": "Wupołni toś ten formular, aby swóju e-mailowu adresu změnił. Musyš swójo gronidło zapódaś, aby toś tu změnu wobkšuśił.",
"changeemail-no-info": "Dejš pśizjawjony byś, aby direktny pśistup na toś ten bok měł.",
"changeemail-oldemail": "Aktualna e-mailowa adresa:",
@@ -517,7 +517,6 @@
"changeemail-none": "(žedna)",
"changeemail-password": "Twójo gronidło za {{GRAMMAR:akuzatiw|{{SITENAME}}}}",
"changeemail-submit": "E-mailowu adresu změniś",
- "changeemail-cancel": "Pśetergnuś",
"changeemail-throttled": "Sy pśecesto wopytał se pśizjawiś.\nPócakaj pšosym $1, nježli až wopytajoš znowego.",
"resettokens": "Tokeny slědk stajiś",
"resettokens-text": "Móžoš tokeny slědk stajiś, kótarež dowóluju pśistup na wěste priwatne daty, kótarež su z twójim kontom zwězane.\n\nTy by dejał to cyniś, jolic sy je zmylnje z někim źělił abo jolic twóje konto jo se nadpadało.",
@@ -793,7 +792,6 @@
"mergehistory-same-destination": "Žrědłowy bok a celowy bok njesmějotej identiskej byś",
"mergehistory-reason": "Pśicyna:",
"mergelog": "Protokol zjadnośenja",
- "pagemerge-logentry": "zjadnośi [[$1]] do [[$2]] (Wersije až do $3)",
"revertmerge": "Zjadnośenje anulěrowaś",
"mergelogpagetext": "Dołojce jo lisćina nejnowejšych zjadnośenjow historije boka z drugej.",
"history-title": "$1: Wersijowe stawizny",
@@ -844,7 +842,6 @@
"searchall": "wše",
"showingresults": "How {{PLURAL:|jo '''1''' wuslědk|stej '''$1''' wuslědka|su '''$1''' wuslědki}} wót cysła '''$2'''.",
"showingresultsinrange": "Dołojce pokazujo se do {{PLURAL:$1|<strong>1</strong> wuslědka|<strong>$1</strong> wuslědkowu|<strong>$1</strong> wuslědkow}} we wobłuku <strong>$2</strong> až do <strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5|Wuslědk '''$1''' z '''$3'''|Wuslědki '''$1 - $2''' z '''$3'''}} za '''$4'''",
"search-nonefound": "Njejsu se wuslědki namakali, kótarež wótpowěduju napšašowanjeju.",
"powersearch-legend": "Rozšyrjone pytanje",
"powersearch-ns": "W mjenjowych rumach pytaś:",
@@ -1431,14 +1428,11 @@
"randomincategory": "Pśipadny bok w kategoriji",
"randomincategory-invalidcategory": "\"$1\" njejo płaśiwe kategorijowe mě.",
"randomincategory-nopages": "W kategoriji [[:Category:$1|$1]] žedne boki njejsu.",
- "randomincategory-selectcategory": "Pśipadny bok z kategorija: $1 $2",
- "randomincategory-selectcategory-submit": "Wótpósłaś",
"randomredirect": "Pśipadne dalejpósrědnjenje",
"randomredirect-nopages": "W mjenjowem rumje \"$1\" njejsu dalejpósrědnjenja.",
"statistics": "Statistika",
"statistics-header-pages": "Statistika bokow",
"statistics-header-edits": "Statistika změnow",
- "statistics-header-views": "Statistiku zwobrazniś",
"statistics-header-users": "Statistika wužywarjow",
"statistics-header-hooks": "Druga statistika",
"statistics-articles": "Wopśimjeśowe boki",
@@ -1447,13 +1441,9 @@
"statistics-files": "Nagrate dataje",
"statistics-edits": "Změny bokow wót załoženja {{SITENAME}}",
"statistics-edits-average": "Změny na bok w pśerězku",
- "statistics-views-total": "Zwobraznjenja dogromady",
- "statistics-views-total-desc": "Woglědanja na njeeksistěrujucych bokach a specialnych bokach njejsu zapśimjone",
- "statistics-views-peredit": "Zwobraznjenja na změnu",
"statistics-users": "Zregistrěrowane [[Special:ListUsers|wužywarje]]",
"statistics-users-active": "Aktiwne wužywarje",
"statistics-users-active-desc": "Wužywarje, kótarež su {{PLURAL:$1|cora|w slědnyma $1 dnjoma|w slědnych $1 dnjach|w slědnych $1 dnjach}} aktiwne byli",
- "statistics-mostpopular": "Nejwěcej woglědane boki",
"pageswithprop": "Boki z kakosću boka",
"pageswithprop-legend": "Boki z kakosću boka",
"pageswithprop-text": "Toś ten bok nalicyjo boki, kótarež wužywaju wěstu kakosć boka.",
@@ -1494,9 +1484,9 @@
"uncategorizedtemplates": "Njekategorizěrowane pśedłogi",
"unusedcategories": "Njewužywane kategorije",
"unusedimages": "Njewužywane dataje",
- "popularpages": "Woblubowane boki",
"wantedcategories": "Póžedane kategorije",
"wantedpages": "Póžedane boki",
+ "wantedpages-summary": "Toś ten specialny bok nalicujo wšykne boki, kótarež hyšći njeeksistěruju, na kótarež ale wót eksistěrujucych bokow se wótkazuju.",
"wantedpages-badtitle": "Njepłaśiwy titel we wuslědku: $1",
"wantedfiles": "Póžedane dataje",
"wantedfiletext-cat": "Slědujuce dataje se wužywaju, ale njeeksistěruja. Dataje z cuzych repozitoriumow daju se nalicyś, lěcrownož eksistěruju. Take wopacne pozitiwy su <del>pśešmarnjone</del>. Mimo togo se boki w [[:$1]] nalicyju, kótarež dataje zasajźuju, kótarež njeeksistěruju.",
@@ -1556,7 +1546,6 @@
"querypage-disabled": "Toś ten specialny bok jo z wugbaśowych pśicynow znjemóžnjony.",
"booksources": "Pytanje pó ISBN",
"booksources-search-legend": "Knigłowe žrědła pytaś",
- "booksources-go": "Pytaś",
"booksources-text": "To jo lisćina z wótkazami na internetowe boki, kótarež pśedawaju nowe a trjebane knigły. Tam mógu teke dalšne informacije wó knigłach byś. {{SITENAME}} njezwisujo góspodarski z žednym z toś tych póbitowarjow.",
"booksources-invalid-isbn": "Pódane ISBN-cysło njezda se płaśiwe byś; pséglědaj za zmólkami, z tym až kopěrujoš z originalnego žrědła.",
"specialloguserlabel": "Wuwjeźaŕ:",
@@ -1682,7 +1671,7 @@
"wlheader-enotif": "E-mailowa zdźěleńska słužba jo zmóžnjona.",
"wlheader-showupdated": "Boki, kótarež su wót twójogo slědnego woglěda se změnili, pokazuju se '''tucnje'''.",
"wlnote": "{{PLURAL:$1|Slědujo slědna změna|slědujotej '''$1''' slědnej změnje|slěduju slědne '''$1''' změny}} {{PLURAL:$2|slědneje góźiny|slědneju '''$2''' góźinowu|slědnych '''$2''' góźinow}}, staw: $3, $4.",
- "wlshowlast": "Pokaž změny slědnych $1 góźinow, $2 dnjow abo $3 (w slědnych 30 dnjach).",
+ "wlshowlast": "Pokaž změny slědnych $1 góźinow, $2 dnjow abo (w slědnych 30 dnjach).",
"watchlist-options": "Opcije wobglědowańki",
"watching": "Wobglědowaś …",
"unwatching": "Njewobglědowaś …",
@@ -1730,7 +1719,6 @@
"delete-warning-toobig": "Toś ten bok ma z wěcej ako $1 {{PLURAL:$1|wersiju|wersijomaj|wersijami|wersijami}} dłujke stawizny. Jich wulašowanje móžo źěło datoweje banki na {{SITENAME}} kazyś;\npóstupujśo z glědanim.",
"deleting-backlinks-warning": "'''Warnowanje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge boki]] wótkazuju k bokoju abo bok jo hynźi zapśěgnjony, kótaryž coš wulašowaś.",
"rollback": "Wobźěłanja slědk wześ",
- "rollback_short": "anulěrowaś",
"rollbacklink": "anulěrowaś",
"rollbacklinkcount": "$1 {{PLURAL:$1|změnu|změnje|změny|změnow}} slědk wześ",
"rollbacklinkcount-morethan": "wěcej ako $1 {{PLURAL:$1|změnu|změnje|změny|změnow}} slědk wześ",
@@ -2107,7 +2095,6 @@
"import": "Boki importěrowaś",
"importinterwiki": "Transwiki-importěrowanje",
"import-interwiki-text": "Wuzwól wiki a bok za importěrowanje.\nDatumy wersijow a wužywarske mjenja pśi tym se njezměniju.\nWšykne transwiki-importowe akcije protokolěruju se w [[Special:Log/import|log-lisćinje importow]].",
- "import-interwiki-source": "Žrědłowy wiki/bok:",
"import-interwiki-history": "Importěruj wšykne wersije toś togo boka",
"import-interwiki-templates": "Wše pśedłogi zapśěgnuś",
"import-interwiki-submit": "Importěrowaś",
@@ -2149,18 +2136,14 @@
"import-rootpage-nosubpage": "Mjenjowy rum \"$1\" kórjenjowego boka njedowólujo pódboki.",
"importlogpage": "Log-lisćinu importěrowaś",
"importlogpagetext": "Administratiwne importěrowanje bokow ze stawiznami z drugich wikijow.",
- "import-logentry-upload": "jo se [[$1]] pśez nagrawańske nagraśe importěrowała.",
"import-logentry-upload-detail": "{{PLURAL:$1|$1 wersija|$1 wersiji|$1 wersije}}",
- "import-logentry-interwiki": "Dataja $1 jo se importěrowała (transwiki).",
"import-logentry-interwiki-detail": "{{PLURAL:$1|$1 wersija|$1 wersiji|$1 wersije}} wót $2",
"javascripttest": "JavaScriptowy test",
- "javascripttest-title": "Testy $1 se pśewjeduju",
"javascripttest-pagetext-noframework": "Toś ten bok jo pśewjedowanjeju javascriptowych testow pśewóstajony.",
"javascripttest-pagetext-unknownframework": "Njeznaty wobłuk \"$1\".",
"javascripttest-pagetext-frameworks": "Pšosym wubjeŕ jaden ze slědujucych testowańskich wobłukow: $1",
"javascripttest-pagetext-skins": "Wubjeŕ drastwu za pśewjeźenje testow:",
"javascripttest-qunit-intro": "Glědaj [$1 testowańsku dokumentaciju] na mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
"tooltip-pt-userpage": "Twój wužywarski bok",
"tooltip-pt-anonuserpage": "Wužywarski bok za IP-adresu, z kótarejuž bok wobźěłajoš",
"tooltip-pt-mytalk": "Twój diskusijny bok",
@@ -2263,7 +2246,6 @@
"pageinfo-robot-policy": "Indicěrowanje pśez roboty",
"pageinfo-robot-index": "Dowólony",
"pageinfo-robot-noindex": "Zakazany",
- "pageinfo-views": "Licba zwobraznjenjow",
"pageinfo-watchers": "Licba wobglědowarjow boka",
"pageinfo-few-watchers": "Mjenjej ako $1 {{PLURAL:$1|wobglědowaŕ|wobglědowarja|wobglědowarje|wobglědowarjow}}",
"pageinfo-redirects-name": "Licba dalejpósrědnjenjow k toś tomu bokoju",
@@ -2713,7 +2695,6 @@
"exif-urgency-low": "Niska ($1)",
"exif-urgency-high": "Wusoka ($1)",
"exif-urgency-other": "Swójska priorita ($1)",
- "watchlistall2": "wšykne",
"namespacesall": "wšykne",
"monthsall": "wšykne",
"confirmemail": "E-mailowu adresu wobkšuśiś.",
@@ -2802,7 +2783,6 @@
"iranian-calendar-m11": "Bahman",
"iranian-calendar-m12": "Esfand",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusija]])",
- "unknown_extension_tag": "Njeznaty tag rozšyrjenja „$1“",
"duplicate-defaultsort": "Glědaj: Standardny sortěrowański kluc (DEFAULT SORT KEY) \"$2\" pśepišo pjerwjej wužyty kluc \"$1\".",
"version": "Wersija",
"version-extensions": "Instalowane rozšyrjenja",
@@ -2876,6 +2856,7 @@
"specialpages-group-wiki": "Daty a rědy",
"specialpages-group-redirects": "Dalej pósrědnjajuce boki",
"specialpages-group-spam": "Spamowe rědy",
+ "specialpages-group-developer": "Rědy wuwiwarjow",
"blankpage": "Prozny bok",
"intentionallyblankpage": "Toś ten bok jo z wótglědom prozny.",
"external_image_whitelist": " #Wóstaj toś tu smužku rowno tak jo<pre>\n#Zapódaj fragmenty regularnych wurazow (jano źěl mjazy //) dołojce\n#Toś te budu se pśirunowaś z URL ekseternych wobrazow\n#Te, kótarež makaju se, zwobraznuju se ako wobraze, howac pokažo se jano wótkaz k wobrazoju\n#Ze smužkami, kótarež zachopiju se z #, wobchadaju ako z komentarami\n#To njeźiwa na wjelikopisanje\n\n#Staj wše fragmenty regularnych wurazow nad smužku. Wóstaj toś tu smužku rowno tak jo</pre>",
@@ -2962,19 +2943,20 @@
"logentry-rights-rights-legacy": "$1 jo kupkowe cłonkojstwo za $3 {{GENDER:$2|změnił|změniła}}",
"logentry-rights-autopromote": "$1 jo se awtomatiski wót $4 do $5 {{GENDER:$2|pśirědował|pśirědowała}}",
"rightsnone": "(nic)",
+ "revdelete-summary": "Zespominanje wobźěłanja",
+ "feedback-adding": "Komentar pśidawa se bokoju...",
+ "feedback-bugcheck": "Wjelicnje! Pśekontrolěruj jano, lěc to njejo jadna z [$1 znatych zmólkow].",
+ "feedback-bugnew": "Som pśekontrolěrował. Nowu zmólku k wěsći daś",
"feedback-bugornote": "Jolic sy zwólny, techniski problem nadrobnje wopisaś, [$1 daj pšosym zmólku k wěsći].\nHować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo se bokoju \"[$3 $2]\", z twójim wužywarskim mjenim a z wobglědowakom, kótaryž wužywaš.",
- "feedback-subject": "Tema:",
- "feedback-message": "Powěsć:",
"feedback-cancel": "Pśetergnuś",
- "feedback-submit": "Komentar wótpósłaś",
- "feedback-adding": "Komentar pśidawa se bokoju...",
+ "feedback-close": "Dokóńcony",
"feedback-error1": "Zmólka: Njepóznaty wuslědk wót API",
"feedback-error2": "Zmólka: Wobźěłanje njejo se raźiło",
"feedback-error3": "Zmólka: Žedne wótegrono wót API",
+ "feedback-message": "Powěsć:",
+ "feedback-subject": "Tema:",
+ "feedback-submit": "Wótpósłaś",
"feedback-thanks": "Źěkujomy se! Twój komentar jo se k bokoju \"[$2 $1]\" pósłał.",
- "feedback-close": "Dokóńcony",
- "feedback-bugcheck": "Wjelicnje! Pśekontrolěruj jano, lěc to njejo jadna z [$1 znatych zmólkow].",
- "feedback-bugnew": "Som pśekontrolěrował. Nowu zmólku k wěsći daś",
"searchsuggest-search": "Pytaś",
"searchsuggest-containing": "wopśimujo...",
"api-error-badaccess-groups": "Njamaš pšawo dataje do toś togo wikija nagraś.",
@@ -3053,5 +3035,27 @@
"expand_templates_remove_nowiki": "Toflicki <nowiki> we wuslědku pódtłocyś",
"expand_templates_generate_xml": "Parsowański bom XML pokazaś",
"expand_templates_generate_rawhtml": "Gropny HTML pokazaś",
- "expand_templates_preview": "Pśeglěd"
+ "expand_templates_preview": "Pśeglěd",
+ "special-characters-group-latin": "Łatyńske",
+ "special-characters-group-latinextended": "Łatyńske rozšyrjone",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symbole",
+ "special-characters-group-greek": "Grichiske",
+ "special-characters-group-cyrillic": "Kyriliske",
+ "special-characters-group-arabic": "Arabiske",
+ "special-characters-group-arabicextended": "Rozšyrjona arabšćina",
+ "special-characters-group-persian": "Persiske",
+ "special-characters-group-hebrew": "Hebrejske",
+ "special-characters-group-bangla": "Bengalšćina",
+ "special-characters-group-tamil": "Tamilšćina",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalezišćina",
+ "special-characters-group-gujarati": "Guźarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "thailandšćina",
+ "special-characters-group-lao": "Laošćina",
+ "special-characters-group-khmer": "Khmeršćina",
+ "special-characters-title-endash": "krotka lažaca smužka",
+ "special-characters-title-emdash": "dłujka lažaca smužka",
+ "special-characters-title-minus": "minusowe znamuško"
}
diff --git a/languages/i18n/dtp.json b/languages/i18n/dtp.json
index 53f608f2..de7ba430 100644
--- a/languages/i18n/dtp.json
+++ b/languages/i18n/dtp.json
@@ -456,14 +456,12 @@
"passwordreset-emailsent-capture": "Surat-i pononsorou nakaatod noh, miagal id siriba diti.",
"passwordreset-emailerror-capture": "Surat-i pononsorou nopudali noh, miagal id siriba diti, nga awu kaatod id momomoguno: $1",
"changeemail": "Alanai porikatan surat-i",
- "changeemail-header": "Alanai akaun porikatan surat-i",
"changeemail-text": "Gonopo poom diti do mongolon porikatan surat-i nuh. Mangai posuango kaatalibnu do papasaah di naalanan.",
"changeemail-no-info": "Mositi sumuang log ko do mongoguno monilombus id bolikon diti.",
"changeemail-oldemail": "Porikatan surat-i maso diti:",
"changeemail-newemail": "Porikatan surat-i it kawawagu:",
"changeemail-none": "(ingaa)",
"changeemail-submit": "Alanai surat-i",
- "changeemail-cancel": "Kinsilo",
"bold_sample": "Polombono tik",
"bold_tip": "Polombono tik",
"italic_sample": "Tik lingging",
@@ -668,7 +666,6 @@
"mergehistory-same-destination": "Wowonod om korikoton do bolikon awu milo do miagal",
"mergehistory-reason": "Sabab:",
"mergelog": "Log pinisompuru",
- "pagemerge-logentry": "pisompuruo [[$1]] sumuang id [[$2]] (sinimakan gisom do $3)",
"revertmerge": "Kada piisoo",
"mergelogpagetext": "Id siriba diti nopo nga lis kawawagu do pinisompuruan susuyan tiso-iso bolikon kumaa doid bolikon do suai.",
"history-title": "Susuyan sinimakan do \"$1\"",
@@ -711,7 +708,6 @@
"search-relatedarticle": "Kompinaian",
"searchrelated": "kompinaian",
"searchall": "oinsanan",
- "showingresultsheader": "{{PLURAL:$5|Kootuson '''$1''' of '''$3'''|Tongkootuson '''$1 - $2''' of '''$3'''}} montok '''$4'''",
"search-nonefound": "Ingaa kootuson kaagal di kuiri.",
"powersearch-legend": "Pogigihum poimogot",
"powersearch-ns": "Pogihum momoguno ngaran:",
@@ -859,7 +855,6 @@
"pager-older-n": "{{PLURAL:$1|nokodori 1|nokodori $1}}",
"booksources": "Nantadon buuk",
"booksources-search-legend": "Ihumo tadon buuk",
- "booksources-go": "Ibok",
"specialloguserlabel": "Momoguno:",
"log": "Tongolog",
"allpages": "Oinsanan bolikon",
@@ -894,7 +889,7 @@
"unwatch": "Awu intangan",
"unwatchthispage": "Tingkod do mongintong",
"watchlist-details": "{{PLURAL:$1|$1 bolikon|$1 bobolikon}} id lis piintangannu, bobolikon bolotok awu pinosuang.",
- "wlshowlast": "Pokitono dohuri $1 jaam $2 tadau $3",
+ "wlshowlast": "Pokitono dohuri $1 jaam $2 tadau",
"watchlist-options": "Pomilian lis piintangan",
"watching": "Piintong...",
"unwatching": "Awu piintong...",
@@ -1073,7 +1068,6 @@
"metadata-expand": "Pokitono kointalangan pinatapil",
"metadata-collapse": "Polisoko kointalangan pinatapil",
"metadata-fields": "Batas pongodata it poinlis id suang pason diti maan poruhango id upa bolikon pongintalangan nung olisok jodual pongodata.\nIri suai sinandad do poinlisok.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "oinsanan",
"namespacesall": "oinsanan",
"monthsall": "oinsanan",
"watchlisttools-view": "Intaai kinoolonon di kosudong",
@@ -1084,5 +1078,6 @@
"external_image_whitelist": " #Pologoson baris diti<pre>\n#Suangai do boros koubasanan (guas boros id pialatan //) ponongsiriba\n#Noputan di kaagal pojodion do toput poinsuang (toput koubasanan) do tangagambar\n#Toput di kaagal no silihon do gambar, nung awu nga okito o noputan sinuratan\n#Baris di kisimbol do # nopo nga ointutunan sobaagi do bolotok\n#Tumanud do pisuaian A om a\n\n#Posurato toinsanan id sawat do garis diti. Pologoson iti garis miagal diti</pre>",
"tag-filter": "[[Special:Tags|Pananda]] gagan:",
"revdelete-restricted": "pinokogos pogoduhan montok momuruan",
- "revdelete-unrestricted": "pinoidu pogoduhan montok momuruan"
+ "revdelete-unrestricted": "pinoidu pogoduhan montok momuruan",
+ "revdelete-summary": "idito koinibaan"
}
diff --git a/languages/i18n/dv.json b/languages/i18n/dv.json
index 703f898d..66207010 100644
--- a/languages/i18n/dv.json
+++ b/languages/i18n/dv.json
@@ -253,12 +253,10 @@
"passwordreset-legend": "ސިއްރުބަސް އައު ކުރައްވާ",
"passwordreset-email": "އީމެއިލް އެޑްރެސް:",
"changeemail": "އީމެއިލް އެޑްރެސް ބަދަލުކުރައްވާ",
- "changeemail-header": "އެކައުންޓްގެ އީމެއިލް އެޑްރެސް ބަދަލުކުރައްވާ",
"changeemail-oldemail": "މިހާރު ބޭނުންކުރާ އީމެއިލް އެޑްރެސް:",
"changeemail-newemail": "އައު އީމެއިލް އެޑްރެސް:",
"changeemail-password": "ތިޔަބޭފުޅާގެ {{SITENAME}} ސިއްރުބަސް:",
"changeemail-submit": "އީމެއިލް ބަދަލުކުރައްވާ",
- "changeemail-cancel": "މަންސޫޚް",
"bold_sample": "ބޯ އިބާރާތް",
"bold_tip": "ބޯ އިބާރާތް",
"italic_sample": "ކަތި އިބާރާތް",
@@ -403,7 +401,6 @@
"statistics": "ތަފާސްހިސާބުތައް",
"statistics-header-pages": "ޞަފްޙާގެ ތަފާސްހިސާބު",
"statistics-header-edits": "އުނިއިތުރުތަކުގެ ތަފާސްހިސާބު",
- "statistics-header-views": "ތަފާސްހިސާބު ބައްލަވާ",
"statistics-header-users": "މެންބަރުގެ ތަފާސްހިސާބު",
"statistics-header-hooks": "އެހެނިހެން ތަފާސްހިސާބު",
"statistics-articles": "މަޒުމޫނުތައް",
@@ -415,12 +412,10 @@
"statistics-users": "ރަޖިސްޓަރކުރެވިފައިވާ [[Special:ListUsers|މެމްބަރުން]]",
"statistics-users-active": "ހަރަކާތްތެރި މެމްބަރުން",
"statistics-users-active-desc": "ފާއިތުވެދިޔަ {{PLURAL:$1|ދުވަސް|$1 ދުވަސްތައް}} ތެރޭގައި ކޮންމެވެސް ކަމެއް ކޮށްފައިވާ މެމްބަރުން",
- "statistics-mostpopular": "އެންމެ މަޤްބޫލް ޞަފްޙާތައް",
"brokenredirects": "އޮޅިފައިވާ މިސްރާބުތައް",
"nbytes": "$1 {{PLURAL:$1|ބައިޓް|ބައިޓްތައް}}",
"unusedcategories": "ބޭނުންނުކުރެވޭ ގިސްމުތައް",
"unusedimages": "ބޭނުންނުކުރެވޭ ފައިލުތައް",
- "popularpages": "މަޤްބޫލު ޞަފްޙާތައް",
"wantedcategories": "ބޭނުންފުޅުވާ ގިސްމުތައް",
"wantedpages": "ބޭނުންފުޅުވާ ޞަފްޙާތައް",
"shortpages": "ކުރު ޞަފްޙާތައް",
@@ -431,7 +426,6 @@
"move": "ނަން/ތަން ބަދަލުކުރައްވާ",
"movethispage": "މި ޞަފްހާގެ ނަންބަދަލުކުރައްވާ",
"booksources": "ފޮތްތަކުގެ މަސްދަރުތައް",
- "booksources-go": "ދުރުވޭ",
"allpages": "ހުރިހާ ޞަފްޙާތައް",
"nextpage": "ކުރިއަށް ($1)",
"prevpage": "ފަހަތަށް ($1)",
@@ -574,7 +568,6 @@
"exif-iimcategory-pol": "ސިޔާސަތު",
"exif-iimcategory-sci": "ސައިންސާއި ޓެކްނޮލޮޖީ",
"exif-iimcategory-spo": "ކުޅިވަރު",
- "watchlistall2": "ހުރިހާ",
"namespacesall": "ހުރިހާ",
"confirmemail": "އީމޭލު އެޑްރެސް ޔަގީންކުރައްވާ",
"confirm_purge_button": "ރަނގަޅު",
diff --git a/languages/i18n/dz.json b/languages/i18n/dz.json
index 988dc2c8..0c81529d 100644
--- a/languages/i18n/dz.json
+++ b/languages/i18n/dz.json
@@ -3,7 +3,8 @@
"authors": [
"CFynn",
"Tenzin",
- "Ævar Arnfjörð Bjarmason <avarab@gmail.com>"
+ "Ævar Arnfjörð Bjarmason <avarab@gmail.com>",
+ "아라"
]
},
"sunday": "འབྲུག་གཟའ་ཟླཝ་",
@@ -133,7 +134,6 @@
"remembermypassword": "གློག་རིག་དེ་གུར་ ངེ་གི་ནང་བསྐྱོད་སེམས་ཁར་བཞག (for a maximum of $1 {{PLURAL:$1|day|days}})",
"login": "ནང་བསྐྱོད།",
"nav-login-createaccount": "ནང་བསྐྱོད་འབད་ / རྩིས་ཐོ་གསརཔ་བཟོ།",
- "loginprompt": "{{SITENAME}} ནང་ལུ་ ནང་བསྐྱོད་འབད་ནིའི་དོན་ལུ་ ཁྱོད་ཀྱིས་ ཀུ་ཀིསི་འདི་ལྕོགས་ཅན་བཟོ་དགོ།",
"userlogin": "ནང་བསྐྱོད་འབད་ / རྩིས་ཐོ་གསརཔ་བཟོ།",
"logout": "ཕྱིར་བསྐྱོད།",
"userlogout": "ཕྱིར་བསྐྱོད།",
@@ -229,7 +229,7 @@
"recentchanges": "འཕྲལ་གྱི་བསྒྱུར་བཅོས",
"recentchanges-feed-description": "འབྱུང་སའི་ནང་ ཝི་ཀི་ལུ་འཕྲལ་གྱི་བསྒྱུར་བཅོས་འབད་མི་འདི་ རྗེས་འཚོལ་འབད།",
"rcnotefrom": "འོག་གི་ཚུ་ '''$2''' (up to '''$1''' shown) ལས་ཚུར་གྱི་བསྒྱུར་བཅོས་ཨིན།",
- "rclistfrom": "$1 ལས་ འགོ་བཟུང་སྟེ་ བསྒྱུར་བཅོས་གསརཔ་ཚུ་སྟོན་",
+ "rclistfrom": "$3 $2 ལས་ འགོ་བཟུང་སྟེ་ བསྒྱུར་བཅོས་གསརཔ་ཚུ་སྟོན་",
"rcshowhideminor": "$1 གལ་གནད་ཆུང་བའི་ཞུན་དག།",
"rcshowhidebots": "$1 བོཊིསི།",
"rcshowhideliu": "$1 ནང་བསྐྱོད་འབད་ཡོད་པའི་ལག་ལེན་པ་ཚུ་",
@@ -252,7 +252,6 @@
"upload": "ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།",
"uploadbtn": "ཡིག་སྣོད་སྐྱེལ་བཙུགས་འབད།",
"uploadlogpage": "ལོག་སྐྱེལ་བཙུགས་འབད།",
- "uploadedimage": "\"[[$1]]\" སྐྱེལ་བཙུགས་འབད་ཡོདཔ།",
"listfiles": "ཡིག་སྣོད་ཐོ་ཡིག།",
"file-anchor-link": "ཡིག་སྣོད།",
"filehist": "ཡིག་སྣོད་སྤྱོད་ཤུལ།",
@@ -312,7 +311,6 @@
"log": "ལོགསི།",
"all-logs-page": "ལོག་སི་ཆ་མཉམ།",
"allpages": "ཤོག་ལེབ་ག་ར།",
- "alphaindexline": "$1 ལས་ $2",
"nextpage": "ཤུལ་མའི་ཤོག་ལེབ་ ($1)",
"prevpage": "ཧེ་མའི་ཤོག་ལེབ་ ($1)",
"allpagesfrom": "ཤོག་ལེབ་བཀྲམ་སྟོན་འགོ་བཙུགས་:",
@@ -329,7 +327,7 @@
"watchthispage": "ཤོག་ལེབ་འདི་ལྟ།",
"unwatch": "བལྟ་བཤོལ།",
"watchlist-details": "{{PLURAL:$1|$1 ཤོག་ལེབ་|$1 ཤོག་ལེབ་ཚུ་}} ཁག་ཆེ་བའི་བློ་ཤོག་ བལྟ་ཞིབ་མ་འབད་བས།",
- "wlshowlast": "མཇུག་གི་ ཆུ་ཚོད་ $1 ཉིནམ་ $2 $3 སྟོན་",
+ "wlshowlast": "མཇུག་གི་ ཆུ་ཚོད་ $1 ཉིནམ་ $2 སྟོན་",
"watching": "བལྟ་ཞིབ་འབད་དོ་་་",
"unwatching": "བལྟ་ཞིབ་འབད་བཤོལ་དོ་་་",
"deletepage": "ཤོག་ལེབ་བཏོན་གཏང་།",
@@ -463,7 +461,6 @@
"metadata-expand": "རྒྱ་བསྐྱེད་ཅན་གྱི་རྒྱས་བཤད་སྟོན།",
"metadata-collapse": "རྒྱ་བསྐྱེད་ཅན་གྱི་རྒྱས་བཤད་ཚུ་སྦ།",
"metadata-fields": "མེ་ཊ་གནས་སྡུད་ཐིག་ཁྲམ་ ཧྲམ་པའི་སྐབས་ལུ་ འཕྲིན་དོན་འདི་ནང་ ཐོ་བཀོད་འབད་་ཡོད་པའི་ ཨི་ཨེགསི་ཨའི་ཨེཕ་ མེ་ཊ༌གནས་སྡུད་འདི་ གཟུགས་བརྙན་ཤོག་ལེབ་བཀྲམ་སྟོན་གུ་ གྲངས་སུ་བཙུགས་འོང་།\nགཞན་ཚུ་ སྔོན་སྒྲིག་གི་ཐོག་ལས་སྦ་འོང་།\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "ཆ་མཉམ།",
"namespacesall": "ཆ་མཉམ།",
"monthsall": "ཆ་མཉམ།",
"watchlisttools-view": "འབྲེལ་བ་ཡོད་པའི་བསྒྱུར་བཅོས་ཚུ་སྟོན།",
diff --git a/languages/i18n/ee.json b/languages/i18n/ee.json
index f0f9b71b..6a9db682 100644
--- a/languages/i18n/ee.json
+++ b/languages/i18n/ee.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Cbrown1023",
- "Natsubee"
+ "Natsubee",
+ "아라"
]
},
"tog-hideminor": "Ɣla tɔtrɔ suewo le tɔtrɔ yeyeawo me",
@@ -89,13 +90,6 @@
"qbedit": "Trɔ asi le eŋu",
"qbpageoptions": "Axa sia",
"qbmyoptions": "Nyeƒe axawo",
- "vector-action-delete": "Tutui",
- "vector-action-move": "Ɖɔli eƒe nɔƒe",
- "vector-view-create": "Dze egɔme",
- "vector-view-edit": "Trɔ asi le eŋu",
- "vector-view-history": "Kpɔ xoxoawo",
- "vector-view-view": "Xlẽ",
- "vector-view-viewsource": "Kpɔ alesi woŋlɔe",
"errorpagetitle": "Vodada",
"returnto": "Gbugbɔ yi $1.",
"tagline": "Tso {{SITENAME}}",
@@ -120,7 +114,6 @@
"talkpagelinktext": "Nyamedzroƒe",
"specialpage": "Axa Tɔxe",
"personaltools": "Wòƒe dɔwɔnuwo",
- "postcomment": "Akpa yeye",
"talk": "Nyamedzroƒe",
"toolbox": "Dɔwɔnuɖaka",
"otherlanguages": "Le gbe bubuwo me",
@@ -238,7 +231,6 @@
"searchmenu-new": "'''Dze axa \"[[:$1]]\" sia ŋlɔm ɖe wiki la dzi!'''",
"searchprofile-everything": "Nuɖesiaɖe",
"searchprofile-articles-tooltip": "Dii le $1",
- "searchprofile-project-tooltip": "Dii le $1",
"search-result-size": "$1 ({{PLURAL:$2|nya 1|nya $2}})",
"search-suggest": "Ɖe wò be: $1",
"search-interwiki-more": "(kɔ kpe ɖe eŋu)",
@@ -263,7 +255,7 @@
"recentchanges": "Tɔtrɔ yeyewo",
"recentchanges-legend": "Tatiawo na tɔtrɔ yeyewo",
"rcnotefrom": "Tɔtrɔwo siwo wowɔ tso '''$2''' (wofia vaseɖe '''$1''') le afii.",
- "rclistfrom": "Fia tɔtrɔ yeyewo tso $1",
+ "rclistfrom": "Fia tɔtrɔ yeyewo tso $3 $2",
"rcshowhideminor": "$1 tɔtrɔ suewo",
"rcshowhidebots": "$1 bɔtwo",
"rcshowhideliu": "$1 ezãla siwo ŋlɔ ŋkɔ",
@@ -314,11 +306,9 @@
"pager-older-n": "{{PLURAL:$1|1 xoxoa|$1 xoxoawo}}",
"booksources": "Agbalɛ̃wo ƒe tsoƒe",
"booksources-search-legend": "Di agbalẽwo ƒe tsoƒewo",
- "booksources-go": "Yi",
"specialloguserlabel": "Ezãla:",
"speciallogtitlelabel": "Ta nya:",
"allpages": "Axawo katã",
- "alphaindexline": "$1 vaseɖe $2",
"nextpage": "Axa yometɔ ($1)",
"prevpage": "Axa do ŋgɔ ($1)",
"allpagesfrom": "Fia axawo tso:",
@@ -330,7 +320,8 @@
"listgrouprights-group": "Hame",
"watch": "Le ŋku ɖe eŋu",
"watchthispage": "Le ŋku ɖe axa sia ŋu",
- "wlshowlast": "Fia gaƒoƒo $1 ŋkeke $2 mamleawo. $3",
+ "wlnote": "Afisia wofia {{PLURAL:$1|tɔtrɔ '''1''' mamlea|tɔtrɔ '''$1''' mamleawo}} le {{PLURAL:$2|gaƒoƒo mamlea si|gaƒoƒo '''$2''' mamleawo siwo}} vayi la me.",
+ "wlshowlast": "Fia gaƒoƒo $1 ŋkeke $2 mamleawo.",
"deletepage": "Tutu axa sia",
"delete-confirm": "Tutu \"$1\"",
"delete-legend": "Tutui",
@@ -438,7 +429,6 @@
"nextdiff": "Tɔtrɔ yeyea →",
"newimages": "Nutata yeyewo",
"ilsubmit": "Dii",
- "watchlistall2": "katã",
"namespacesall": "wokatã",
"monthsall": "wokatã",
"imgmultipagenext": "axa yometɔ",
diff --git a/languages/i18n/egl.json b/languages/i18n/egl.json
index f8f1c7de..0187afb2 100644
--- a/languages/i18n/egl.json
+++ b/languages/i18n/egl.json
@@ -23,7 +23,7 @@
"tog-watchmoves": "Zûnta al pàgini e i file spustê int i tgnû 'd ôc specêl.",
"tog-watchdeletion": "Zûnta al pàgini e i file scanşlê int i tgnû 'd ôc specêl.",
"tog-watchrollback": "Zûta al pàgini in dóv' ó fât al ritōren a la pàgina 'd préma a i tgnû 'd ôc specêl",
- "tog-minordefault": "Sògna ògni mudéfica cme céca (sōl cme pre-stabilî)",
+ "tog-minordefault": "Sègna ògni mudéfica cme céca (sōl cme pre-stabilî)",
"tog-previewontop": "Fà vèder còl ch' ò fât sōver la caşèla ed mudéfica e mìa sòta.",
"tog-previewonfirst": "Fà vèder còl ch' ò fât almēno 'na vôlta préma 'd salvêr",
"tog-enotifwatchlistpages": "Mândon un avîş cun la pôsta eletrônica quând a vîn cambiê 'na pàgina o un file preşèint int i tgnû 'd ôc specêl",
@@ -33,7 +33,7 @@
"tog-shownumberswatching": "Fà vèder al nómer ed j utèint che gh'àn la pàgina sòta uservasiòun",
"tog-oldsig": "La fîrma 'd adèsa",
"tog-fancysig": "Trâta la fîrma cme wikitèst (sèinsa colegamèint avtomâtich)",
- "tog-uselivepreview": "Permèt la funsiòun \"Live preview\" (guêrda préma 'd salvêr dal vîv - in sperimèint)",
+ "tog-uselivepreview": "Permèt la funsiòun \"Live preview\" (guêrda préma 'd salvêr in dirèta)",
"tog-forceeditsummary": "Dmânda s'l'è vèira che al câmp argumèint l' é vōd",
"tog-watchlisthideown": "Lōga al mé mudéfichi int i tgnû 'd ôc specêl",
"tog-watchlisthidebots": "Lōga al mudéfichi di bot int i tgnû 'd ôc specêl",
@@ -42,11 +42,11 @@
"tog-watchlisthideanons": "Lōga al mudéfichi 'd j utèint sèinsa nòm int i tgnû 'd ôc specêl",
"tog-watchlisthidepatrolled": "Lōga al mudéfichi verifichêdi int i tgnû 'd ôc specêl",
"tog-ccmeonemails": "Mândom 'na côpia di mesâg spidî a chiêter utèint",
- "tog-diffonly": "An fê mia vèder còl che gh'é dèinter int la pàgina dôp al cunfrûnt tr'al versiòun",
+ "tog-diffonly": "An fêr mia vèder còl che gh'é dèinter int la pàgina dôp al cunfrûnt tr'al versiòun",
"tog-showhiddencats": "Fà vèder al categoréi lughêdi",
- "tog-norollbackdiff": "An fê mia vèder al cunfrûnt tr' al versiòun dôp avèir fât un \"rollback\"",
+ "tog-norollbackdiff": "An fêr mia vèder al cunfrûnt tr' al versiòun dôp avèir fât un \"rollback\"",
"tog-useeditwarning": "Avîşom quând a vâgh fōra da 'na pàgina d' mudéfica e an n'ò mìa salvê al mudéfichi fâti",
- "tog-prefershttps": "Drōva sèimper un colegamèint sicûr quând ét fê l'ingès",
+ "tog-prefershttps": "Drōva sèimper un colegamèint sicûr quând ét fê l'ingrès",
"underline-always": "Sèimper",
"underline-never": "Mài",
"underline-default": "Mantî al j impustasiòun dal navigadōr o 'd la skin",
@@ -95,7 +95,7 @@
"december-gen": "Dicèmber",
"jan": "Znê",
"feb": "Fer",
- "mar": "Mêr",
+ "mar": "Mêrz",
"apr": "Avr",
"may": "Mâg",
"jun": "Zóg",
@@ -128,7 +128,7 @@
"category-subcat-count-limited": "In cla categoréia ché a gh'é{{PLURAL:$1|'na sòt-categoréia, nutêda|$1 sòt-categoréi, nutêdi}}ché 'd sègvit.",
"category-article-count": "{{PLURAL:$2|In cla categoréia ché a gh'é sōl 'na pàgina, sgnêda ché.|Cla categoréia ché la gh'à {{PLURAL:$1|la pàgina sgnêda| al pàgini $1 sgnêdi}} ed sègvit, in un totêl ed $2.}}",
"category-article-count-limited": "In cla categoréia ché a gh'é {{PLURAL:$1|la pàgina nutêda|al $1 pàgini nutêdi ch'é 'd sègvit.}}",
- "category-file-count": "{{PLURAL:$2|In cla categoréia ché a gh'é sōl un file, sgnê ché.|In cla categoréia ché gh'é{{PLURAL:$1|un file sgnê ché| i file $1, sgnê}} ed sègvit, in un totêl ed $2.}}",
+ "category-file-count": "{{PLURAL:$2|In cla categoréia ché a gh'é sōl un file, sgnê ché.|In cla categoréia ché gh'é{{PLURAL:$1|un file sgnê ché|$1 file , sgnê}} ed sègvit, in un totêl ed $2.}}",
"category-file-count-limited": "In cla categoréia ché a gh'é {{PLURAL:$1|al file nutê|i $1 file nutê}} ché 'd sègvit.",
"listingcontinuesabbrev": "cunt.",
"index-category": "Pàgini gancêdi",
@@ -199,7 +199,7 @@
"toolbox": "Strumèint",
"userpage": "Guêrda la pàgina utèint",
"projectpage": "Guêrda la pàgina dal prugèt",
- "imagepage": "Guêrda la pàgina dal 'file'",
+ "imagepage": "Guêrda la pàgina dal file",
"mediawikipage": "Guêrda al mesâg",
"templatepage": "Guêrda 'l mudèl",
"viewhelppage": "Guêrda la pàgina 'd ajót",
@@ -221,6 +221,7 @@
"pool-queuefull": "A ghé la fîla, trôpa gînta a vōl vèder la pàgina, prōva tra soquânt minût",
"pool-errorunknown": "Erōr mìa cgnusû",
"pool-servererror": "Al servési cuntadōr di pool an n'é mìa léber per èser druvê",
+ "poolcounter-usage-error": "Erōr 'd ûş:$1",
"aboutsite": "Infurmasiòun só {{SITENAME}}",
"aboutpage": "Project:Infurmasiòun",
"copyright": "Còl che gh' é che dèinter a 's pōl druvêr sòta licèinsa $1, s' an gh'é mia scrét diversamèint.",
@@ -230,6 +231,7 @@
"disclaimers": "Avertèinsi",
"disclaimerpage": "Project:Avertèinsi generêli",
"edithelp": "Léber dal spiegasiòun",
+ "helppage-top-gethelp": "Ajót",
"mainpage": "Préma pàgina",
"mainpage-description": "Pàgina principêla",
"policy-url": "Project:Léni 'd cundòta",
@@ -257,7 +259,7 @@
"viewsourcelink": "guêrda la surzéia",
"editsectionhint": "Mudéfica la sesiòn: $1",
"toc": "Argumèint",
- "showtoc": "Fà vèder",
+ "showtoc": "fà vèder",
"hidetoc": "Lōga",
"collapsible-collapse": "Stréca",
"collapsible-expand": "Şlêrga",
@@ -282,7 +284,7 @@
"nstab-media": "File multimediêl",
"nstab-special": "Pàgina specêla",
"nstab-project": "Pàgina 'd servési",
- "nstab-image": "'File'",
+ "nstab-image": "File",
"nstab-mediawiki": "Mesâg",
"nstab-template": "Mudèl",
"nstab-help": "Pàgina 'd ajót",
@@ -308,10 +310,13 @@
"readonly_lag": "Al databêş l'é stê bluchê in avtomàtich per permèter a i terminêl cun al databêş schiêv ed mètres in pâs cun al master",
"internalerror": "Erōr intêren",
"internalerror_info": "Erōr intêren: $1",
+ "internalerror-fatal-exception": "Erōr ch' an pōl mìa èser corèt dal gener \"$1\"",
"filecopyerror": "An n'é mìa pusébil cupiêr al file \"$1\" in \"$2\".",
"filerenameerror": "An n'é mìa pusébil cambiêr al nòm ed \"$1\" in \"$2\".",
"filedeleteerror": "An n'é mìa pusébil scanşlêr al file \"$1\".",
"directorycreateerror": "An n'é mìa pusébil fêr la directory \"$1\".",
+ "directoryreadonlyerror": "La cartèla \"$1\" la 's pōl sōl lēşer.",
+ "directorynotreadableerror": "La cartèla \"$1\" la 's pōl mìa lēşer.",
"filenotfound": "An n'é mìa pusébil catêr al file \"$1\".",
"unexpected": "Valōr mìa pervést \"$1\"=\"$2\".",
"formerror": "Erōr: an n'é ma pusébil spidîr al môdul.",
@@ -322,8 +327,8 @@
"no-null-revision": "An pōl èser fât 'na versiòun mìa vâlida per la pàgina \"$1\"",
"badtitle": "Tétol mìa curèt.",
"badtitletext": "Al tétol ed la pàgina serchêda l'é vōd, şbaliê opór al deşvîn da 'n erōr int i colegamèint di côdis o int i colegamèint druvê in wiki. In pió al pré avèir ûn o pió carâter ch'an pōlen mìa èser druvê int i tétol.",
- "perfcached": "Al j infurmasiòun ché sòta vînen registrêdi int la \"cache\" dal databêş e an pōlen mìa èser arnuvê. Int la \"cache\" a gh'é un mâsim ed {{PLURAL:$1|un rişultêt |$1 rişultêt}} ch' es pōl/en druvêr.",
- "perfcachedts": "Al j infurmasiòun ché sòta vînen registrêdi int la \"cache\" dal databêş e l'ûltma vôlta l' è stê arnuvê al $ 1. Int la \"cache\" a gh'é un mâsim ed {{PLURAL:$4|un rişultêt |$4 rişultêt}} ch' es pōl/en druvêr.",
+ "perfcached": "Al j infurmasiòun ché sòta vînen registrêdi int la \"cache\" dal databêş e an pōlen mìa èser arnuvê. Int la \"cache\" a gh'é un mâsim ed {{PLURAL:$1|un rişultêt |$1 rişultêt}} ch' es pōlen druvêr.",
+ "perfcachedts": "Al j infurmasiòun ché sòta vînen registrêdi int la cache dal databêş e l'ûltma vôlta l' è stê arnuvê al $1. Int la cache a gh'é un mâsim ed {{PLURAL:$4|un rişultêt |$4 rişultêt}} ch' es pōlen druvêr.",
"querypage-no-updates": "J arnuvamèint ed la pàgina în p'r al mumèint fērom. Al j infurmasiòun dèinter a la pàgina a gnirân mia arnuvêdi.",
"viewsource": "Guêrda la surzéia",
"viewsource-title": "Guêrda la surzéia 'd $1",
@@ -333,7 +338,8 @@
"viewsourcetext": "L'é pusébil vèder e cupiêr al côdis surzéia ed cla pàgina ché.",
"viewyourtext": "L'é pusébil vèder e cupiêr al côdis surzéia dal \"tō mudéfichi\" ed cla pàgina ché:",
"protectedinterface": "Cla pàgina ché la gh'à 'n elemèint ch' al fa pêrt dal colegamèint tra utèint e al progrâma 'd cól sît ché e l'é prutèta per schivşêr pusébil abûş. Per zuntêr o mudufichêr tradusiòun per tót i sistēma wiki druvêr [//translatewiki.net/ translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
- "editinginterface": "'''Atèinti:''' Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l progrâma dal sît. Tót' al modéfichi fâti a cla pàgina ché a gnîran spustêdi insém a i mesâg vést da tót j utèint ed cól wiki ché. Per zuntêr o mudufichêr tradusiòun vâlidi per tót i wiki, cunsîdra la pusibilitê 'd druvêr [/ / translatewiki.net / translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
+ "editinginterface": "<strong>Atèinti:</strong> Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l prugrâma dal sît. Tót' al modéfichi fâti a cla pàgina ché a se spècen in sém a i mesâg vést per tót j utèint ed cól wiki ché.",
+ "translateinterface": "Per zuntêr o mudifichêr al tradusiòun vâlidi in sém a tót i wiki, drōva [//translatewiki.net/ translatewiki.net], al prugèt Media Wiki p'r al léngui di divêrs pôst.",
"cascadeprotected": "Insém a cla pàgina ché an n'é mìa pusébil fêr dal mudéfichi perchè l'é dèinter {{PLURAL:$1|int la pàgina sgnêda ché 'd sègvit, ch' l'é stêda prutèta|int al pàgini sgnêdi ché 'd sègvit, ch' în stêdi prutèti}} cun la prutesiòun ch' la 's arfà in cuntinvasiòun:\n$2",
"namespaceprotected": "An 's gh'à mìa i permès necesâri per mudifichêr al pàgini dal spâsi di nòm <strong>$1</strong>.",
"customcssprotected": "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina CSS ché, perchè la gh'à dèinter al j impustasiòun personêli 'd n' êter utèint.",
@@ -387,9 +393,11 @@
"createaccount": "Fà la tó inscrisiòun",
"gotaccount": "Gh'èt bèle un ingrès? $1",
"gotaccountlink": "Và dèinter",
- "userlogin-resetlink": "T'ét scurdê j elemèint p'r al tó ingrès?",
+ "userlogin-resetlink": "T'ét e-scurdê la cêva p'r al tó ingrès?",
"userlogin-resetpassword-link": "T' ét scurdê la cêva 'd ingrès?",
"userlogin-helplink2": "Ajót per l'ingrès",
+ "userlogin-loggedin": "T'ét bèle coleghê {{GENDER:$1|$1}}. \nDrōva al mōdul ché sòta cme un êter utèint.",
+ "userlogin-createanother": "Fà 'n' êtra utèinsa.",
"createacct-emailrequired": "Indirés pôsta eletrônica",
"createacct-emailoptional": "Indirés pôsta eletrônica (se 's vōl)",
"createacct-email-ph": "Scrév al tó indirés ed pôsta eletrônica",
@@ -425,6 +433,7 @@
"wrongpassword": "La cêv 'd ingrès e-scréta an n'é mìa giósta. Tōrna a pruvêr.",
"wrongpasswordempty": "An n'é mìa stê scrét nisóna cêva 'd ingrès. Tōrna pruvêr.",
"passwordtooshort": "La cêva 'd ingrès la dēv avèir almēno {{PLURAL:$1|1 carâter|$1 carâter}}",
+ "passwordtoolong": "La cêva 'd ingrès la 'n pōl mìa avèir pió 'd {{PLURAL:$1|1 carâter|$1 carâter}}",
"password-name-match": "La cêva 'd ingrès l'an dēv mìa èser cumpâgn al nòm utèint.",
"password-login-forbidden": "L'ûş de sté nòm e cêva 'd ingrès l'é stê pruibî.",
"mailmypassword": "Tōrna mèter la cêva 'd ingrès",
@@ -532,10 +541,10 @@
"nowiki_sample": "Mèt dèinter ché al tèst mìa furmatê",
"nowiki_tip": "An badêr mìa la furmatasiòun wiki",
"image_tip": "Mèt dèinter al file",
- "media_tip": "Colegamèint al 'file'",
+ "media_tip": "Colegamèint al file",
"sig_tip": "Fîrma cun la dâta e l'ōra",
"hr_tip": "Rîga spiâna (drōva cun giudési)",
- "summary": "Sûnt:",
+ "summary": "Ogèt:",
"subject": "Argumèint (tétol):",
"minoredit": "Còsta l'é 'na mudéfica céca",
"watchthis": "Tîn adrē a cla pàgina ché",
@@ -547,10 +556,12 @@
"anoneditwarning": "<strong>Atèinti:</strong> An n'é mìa stê fât l'ingrès. S' ét farê dal mudéfichi al tó indirés IP al srà vést da tót. Se <strong>[$1 và dèinter]</strong> o <strong>[$2 fà 'n' utèinsa]</strong>, al tô mudéfichi a srân sgnêdi al tó nòm utèint, insèm a êter benefési.",
"anonpreviewwarning": "\"An n'é mìa stê fât l'ingrès. Mèinter es sêlva la pàgina, l'indirés IP al srà sgnê int la stòria 'd la pàgina.\"",
"missingsummary": "'''Atensiòun:''' an n'é mìa stê precişê al mutîv de sté mudéfica. S'es tōrna a clichêr insém a \"{{int:savearticle}}\" la mudéfica la gnirà salvêda cun al mutîv vōd.",
+ "selfredirect": "<strong>Ateinti:</strong>t'é drē fêr un rinvéi a l'istèsa pàgina. Ét prés avèir şbaliê sgnêr al pôst dal rinvéi o t'é drē mudifichêr la pàgina şbaliêda. S'ét fê cléch incòra in sém a \"{{int:savearticle}}\", al rinvéi al gnirà fât in tót' al manēri.",
"missingcommenttext": "Scréver un cumèint ché sòta.",
"missingcommentheader": "'''Atensiòun:''' an n'é mìa stê precişê al mutîv/al tétol de sté mudéfica. S'es tōrna a clichêr insém a \"{{int:savearticle}}\" la mudéfica la gnirà salvêda sèinsa tétol.",
"summary-preview": "Guêrda préma sûnt:",
"subject-preview": "Guêrda préma argumèint/tétol:",
+ "previewerrortext": "A gh'é stê 'n erōr mèinter a s'é serchê ed guardêr al lavōr préma 'd salvêrel.",
"blockedtitle": "Utèint bluchê",
"blockedtext": " '''Al tō nòm utèint o indirés IP l'é stê bluchê.'''\n\nAl blôch l'é stê fât da $1. Al mutîv dal blôch l'é còst: ''$2''.\n\n*Inési dal blôch: $8\n*Scadèinsa dal blôch: $6\n*Intervâl ed blôch: $7\n\nS' ét vō, l'é pusébil mètres in cuntât cun $1 o 'n êter [[{{MediaWiki:Grouppage-sysop}}|aministradōr]] per discóter dal blôch.\n\nGuêrda che la funsiòun 'Scrév a l'utèint' an n'é mìa in ôvra s' an n'é mìa stê registrtê un indirés ed pôsta eletrônica vâlid int al tō [[Special:Preferences| preferèinsi]] o se sté funsiòun l'é stêda bluchêda. L'indirés IP 'd adèsa l'é $3, al nóme ID dal blôch l'é #$5. T'é perghê ed precişêr tót j elemèint ed préma per ògni dmânda de spiegasiòun",
"autoblockedtext": "Cl'indirés IP ché l'è stê bluchê in avtomâtich perché spartî cun 'n êter utèint, bluchê ânca ló da $1. Al mutîv dal blôch l'é còst:\n\n''$2''\n \n*Inési dal blôch: $8 \n*Scadèinsa dal blôch: $6 \n*Intervâl ed blôch: $7\n \nS' ét vō, l'é pusébil mètres in cuntât cun $1 o 'n êter [[{{MediaWiki:Grouppage-sysop}}|aministradōr]] per dmandêr spiegasiòun insém al blôch. Guêrda che la funsiòun 'Scrév a l'utèint' an n'é mìa in ôvra s' an n'é mìa stê registrtê un indirés ed pôsta eletrônica vâlid int al tō [[Special:Preferences| preferèinsi]] e, in tót al manēri, se int al tachêr al blôch, sté funsiòun l'é stêda bluchêda. L'indirés IP 'd adèsa l'é $3, al nóme ID dal blôch l'é #$5. T'é perghê ed precişêr tót j elemèint ed préma per ògni dmânda de spiegasiòun",
@@ -644,6 +655,10 @@
"content-model-text": "tèst normêl",
"content-model-javascript": "linguâg JavaScript",
"content-model-css": "fòj de stîl CSS",
+ "content-json-empty-object": "L'é vōd",
+ "content-json-empty-array": "Array vōd",
+ "duplicate-args-category": "Pàgini che drōven argumèint dópiê in ciamêdi a i mudē",
+ "duplicate-args-category-desc": "La pàgina la gh'à dèinter ciamêdi a mudē che drōven argumèint dupiê,cme per eşèimpi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Atensiòun:''' cla pàgina ché la gh'à trôpi ciamêdi ala funsiòun parse. A n' in duvré avèir mēno 'd $2, adèsa a {{PLURAL:$1|'gh n'é $1}}.",
"expensive-parserfunction-category": "Pàgini cun trôpi ciamêdi a la funsiòun parser.",
"post-expand-template-inclusion-warning": "'''Atensiòun:''' la grandèsa di mudē més dèinter l'é trôp grôsa. Soquânt mudē gnirâ mìa més dèinter.",
@@ -698,7 +713,7 @@
"history-feed-empty": "La pàgina serchêda l'an gh'é mìa; la pré èser stēda scanşlêda dal sît o gh'é stê cambiê nòm. Verifichêr cun [[Special:Search|pàgina 'd sèirca]] se gh'é dal pàgini nōvi.",
"rev-deleted-comment": "(argumèint ed la mudéfica armôs)",
"rev-deleted-user": "(nòm utèint armôs)",
- "rev-deleted-event": "(asiòun dal log armôsa)",
+ "rev-deleted-event": "(particulêr dal log armôs)",
"rev-deleted-user-contribs": "(nòm utèint o indirés IP armôs - mudéfica lughêda da la stòria)",
"rev-deleted-text-permission": "Cla versiòun ché 'd la pàgina l'é stêda <strong> scanşlêda </strong>. \nConsultêr al [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log dal canşladûri] per nōv particulêr.",
"rev-suppressed-text-permission": "Cla versiòun ché 'd la pàgina l'é stêda <strong> scanşlêda </strong>. Consultêr al [{{fullurl:{{#Special:Log}}/ suppress |page={{ FULLPAGENAMEE }}}} log dal canşladûri] per nōv particulêr.",
@@ -732,7 +747,7 @@
"revdelete-legend": "Impôsta i lémit seguèint al versiòun scanşlêdi:",
"revdelete-hide-text": "Tèst ed la versiòun",
"revdelete-hide-image": "Lōga j argumèint dal file",
- "revdelete-hide-name": "Lōga l'asiòun e l'elemèint ed la 'stèsa",
+ "revdelete-hide-name": "Lōga l'intensiòun e i critèri",
"revdelete-hide-comment": "Elemèint ed la mudéfica o spiegasiòun ed l'asiòun",
"revdelete-hide-user": "Nòm o indirés IP ed l'avtōr",
"revdelete-hide-restricted": "Lōga al j infurmasiòun sgnêdi ânch a j aministradōr",
@@ -786,7 +801,6 @@
"mergehistory-same-destination": "Al pàgini 'd urégin e 'd arîv an pōlen mìa cumbinêr",
"mergehistory-reason": "Mutîv:",
"mergelog": "Uniòun",
- "pagemerge-logentry": "l'à unî [[$1]] a [[$2]] (versiòun fîn a $3)",
"revertmerge": "Scanşèla l'uniòun",
"mergelogpagetext": "Ed sègvit în elenchêdi la j ûltmi operasiòun 'd uniòun ed la stòria ed dō pàgini.",
"history-title": "$1 stòria dal mudéfichi",
@@ -809,6 +823,8 @@
"notextmatches": "Nisóna relasiòun int al tèst dal pàgini",
"prevn": "{{PLURAL:$1|còl préma|quî préma $1}}",
"nextn": "{{PLURAL:$1|al seguèint|i seguèint $1}}",
+ "prev-page": "pàgina 'd préma",
+ "next-page": "pàgina dôp",
"prevn-title": "{{PLURAL:$1|Al rişultêt ed préma|$1 i rişultêt ed préma}}",
"nextn-title": "{{PLURAL:$1|Al rişultêt ed préma|$1 i rişultêt ed préma}}",
"shown-title": "Fà vèder {{PLURAL:$1|un rişultêt|$1 di rişultêt}}",
@@ -820,13 +836,14 @@
"searchprofile-everything": "Tót",
"searchprofile-advanced": "Specêla",
"searchprofile-articles-tooltip": "Sèirca in $1",
- "searchprofile-images-tooltip": "Sèirca 'file'",
+ "searchprofile-images-tooltip": "Sèirca file",
"searchprofile-everything-tooltip": "Sērca dapertót (ânch int al pàgini 'd discusuòun).",
"searchprofile-advanced-tooltip": "Sērca int i spâsi di nòm fât só mzûra.",
"search-result-size": "$1 ({{PLURAL:$2|'na parôla|$2 parôli}})",
"search-result-category-size": "{{PLURAL:$1|1 utèint|$1 utèint}} ({{PLURAL:$2|1 sotcategoréia|$2 sotcategoréi}},{{PLURAL:$3|1 file|$3 files}})",
"search-redirect": "(redirect $1)",
"search-section": "(sesiòun $1)",
+ "search-category": "(categoréia $1)",
"search-file-match": "(relasiòun dèinter al file)",
"search-suggest": "Fōrsi 't serchêv $1",
"search-interwiki-caption": "Prugèt fradē",
@@ -836,7 +853,7 @@
"searchrelated": "coleghê",
"searchall": "tót",
"showingresults": "Ed sègvit {{PLURAL:$1|a vîn preşentê al mâsim <strong>1</strong> rişultêt| a vînen preşentê al mâsim <strong>$1</strong> rişultêt}} a partîr dal nómer #<strong>$2</strong>.",
- "showingresultsinrange": "{{PLURAL:$1|A vîn mustrê| a vînen mustrê}} sòta {{PLURAL:$1|<strong>1</strong> rişultêt|<strong>$1</strong> rişultêt}} dal #<strong>$2</strong> al #<strong>$3</strong>.",
+ "showingresultsinrange": "{{PLURAL:$1|Sòt a vîn mustrê| Sòt a vînen mustrê}} {{PLURAL:$1|<strong>1</strong> rişultêt|<strong>$1</strong> rişultêt}} dal <strong>$2</strong> al <strong>$3</strong>.",
"search-showingresults": "{{PLURAL:$4|Rişultêt <strong>$1</strong> ed <strong>$3</strong>|Rişultêt <strong>$1 - $2</strong> ed <strong>$3</strong>}}",
"search-nonefound": "La sērca an n'à mìa dê di rişultê.",
"powersearch-legend": "Sèirca specêla",
@@ -848,7 +865,7 @@
"search-external": "Sèirca fâta fōra",
"searchdisabled": "La sèirca intêrna ed {{SITENAME}} l'a funsiòuna mìa; int al mèinter a s' pōl pruvêr a druvêr un mutōr ed sèirca d'ed fōra cme Google. (A gh' è da nutêr però che còl che gh'é dèinter in {{SITENAME}} che es câten in chi mutōr a prém èser mìa arnuvê.)",
"search-error": "É sucès un erōr mèinter a's fêva la sèirca:$1",
- "preferences": "Preferèinsa",
+ "preferences": "Preferèinsi",
"mypreferences": "Preferèinsi",
"prefs-edits": "Mudéfichi fâti:",
"prefsnologintext2": "Es prèiga ed l'ingres per impustêr al tō preferèinsi 'd utèint.",
@@ -860,6 +877,11 @@
"prefs-personal": "Prufîl utèint",
"prefs-rc": "Ûltmi mudéfichi",
"prefs-watchlist": "Tgnîr sòt ôc",
+ "prefs-editwatchlist": "Mudéfica la lésta 'd qui da tgnîr sòt ôc",
+ "prefs-editwatchlist-label": "Mudéfica dal pàgini ed la lésta ch' a' s tîn sòt ôc:",
+ "prefs-editwatchlist-edit": "Guêrda e tó via i tétol int la lésta ch'ét tîn sòt ôc",
+ "prefs-editwatchlist-raw": "Mudéfica la lésta in furmê tèst",
+ "prefs-editwatchlist-clear": "Scanşèla la tó lésta di tgnû 'd ôc",
"prefs-watchlist-days": "Nómer ed dé da fêr vèder int i tgnû 'd ôc specêl:",
"prefs-watchlist-days-max": "Mâsim $1 {{PLURAL:$1|dé}}",
"prefs-watchlist-edits": "Nómer 'd mudéfichi da fêr vèder cun al funsiòun pió şvilupêdi:",
@@ -929,7 +951,7 @@
"gender-female": "L'é registrêda in sém a {{SITENAME}}",
"prefs-help-gender": "L'impustasiòun ed cla preferèinsa ché l'é a siēlta. Al progrâma al drōva cól valōr ché per parlêr cun tè e numinêret cun chiêter cun al druvêr al gèner ed gramâtica gióst. Cl'infurmasiòun ché la srà póblica.",
"email": "E-mail",
- "prefs-help-realname": "Druvêr al nòm vèira l'é 'na siēlta personêla; s' es pèinsa 'd druvêrel al gnirâ uşê per dêr la paternitê di lavōr spidî.",
+ "prefs-help-realname": "Al nòm vèira l'é da druvêr a piaşèir. Se druvê, al pōl èser uşê per dêr la paternitê al lavōr fât.",
"prefs-help-email": "Mèter l'indéris ed la tó pôsta eletrônica an n'é mia necesâri, mó al permèt ed ricêver la cêva 'd ingrès se per chêş ét la scurdés.",
"prefs-help-email-others": "Ét pō ânca sernîr ed lasêr che chiêter a 's mèten in cuntât tēgh cun la pôsta eletrônica cun al colegamèint da la tó pàgina utèint o da còla 'd discusiòun. Al tó indirés al vîn mìa fât savèir a quî ch'ét 's mèten in cuntât tēgh.",
"prefs-help-email-required": "L'indirés ed pôsta eletrônica l'é ubligatôri.",
@@ -950,6 +972,7 @@
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Diferèinsi",
"prefs-help-prefershttps": "Cla diferèinsa ché la gh'à efèt dal st'êter ingrès.",
+ "prefswarning-warning": "T'é fât dal mudéfichi al tō preferèinsi ch'în mìa stêdi salvêdi. S'ét vê fōra da cla pàgina ché sèinsa clichêr \"$1\" al preferèinsi a gnîran mìa arnuvêdi.",
"prefs-tabs-navigation-hint": "Sugerimèint: è pusébil druvêr i tâst frècia a mansèina e a dréta per spustêres tr'al schēdi int l'elèinch dal schēdi.",
"email-address-validity-valid": "L'indirès ed pôste eletrônica a sèmbra vâlid",
"email-address-validity-invalid": "Mèt un indirés ed pôsta eletrônica vâlid",
@@ -1007,30 +1030,145 @@
"right-upload": "Cârga un file",
"right-reupload": "Al scré in sém a 'n file ch' al gh'é bèle",
"right-reupload-own": "Al scré in sém a 'n file ch' al gh'é bèle carghê da l'istès utèint",
+ "right-reupload-shared": "Al souvrascrév int al pôst file ch' în int l'archévi spartî",
+ "right-upload_by_url": "Cârga un file da un indirés URL",
+ "right-purge": "Al pulés la memôria pruvişôria dal sît sèinsa cunfērma.",
+ "right-autoconfirmed": "An n'é mìa ublighê al lémit 'd asiòun per IP",
+ "right-bot": "Da tratêr cme şvilóp avtomâtich",
+ "right-nominornewtalk": "Al fa in môd che al mudéfichi céchi al pàgini 'd discussiòun an fâghen mìa vèder l'avîş 'd un mesâg nōv",
+ "right-apihighlimits": "Drōva di lémit pió êlt p'r al j interugasiòun API",
+ "right-writeapi": "Drōva l' API in scritûra",
+ "right-delete": "Scanşèla pàgini",
+ "right-bigdelete": "Scanşèla pàgini cun la stòria 'd la pàgina lònghi",
+ "right-deletelogentry": "Al scanşèla e al tōrna mèter vōş ed regéster bèin precîşi",
+ "right-deleterevision": "Al lōga versiòun precîşi dal pàgini",
+ "right-deletedhistory": "Al fà vèder al versiòun ed la stòria scanşlêdi sèinsa al tèst che gh'é unî",
+ "right-deletedtext": "Al fà veder al tèst scanşlê e al mudéfichi tr'al versiòun scanşlêdi",
+ "right-browsearchive": "Al sêrca int al pàgini scanşlêdi",
+ "right-undelete": "Recópra 'na pàgina",
+ "right-suppressrevision": "Al vèd, al lōga e al tōra mèter versiòun precîşi dal pàgini a utèint bast' ech sìa",
+ "right-viewsuppressed": "Al vèd versiòun lughêdi a utèint bast' ech sìa",
+ "right-suppressionlog": "Al fà vèder i regéster privê",
+ "right-block": "Blôca al mudéfichi da pêrta 'd êter utèint",
+ "right-blockemail": "L'impidés a 'n utèint de spidîr la pôsta eletrônica",
+ "right-hideuser": "Blôca un nòm utèint, e 'l lōga al póblich",
+ "right-ipblock-exempt": "Al vèd mìa i blôch 'd IP, i blôch avtomâtich e i blôch ed range IP",
+ "right-proxyunbannable": "An vèder mìa i blôch avtomâtich di proxi",
+ "right-unblockself": "A şblôca ló 'stès",
+ "right-protect": "Câmbia i livē 'd prutesiòun e mudéfica 'l pàgini prutèti in ripetisiòun",
+ "right-editprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-sysop}}\"",
+ "right-editsemiprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Mudéfica al mudèl ed còl ché dèinter int 'na pàgina.",
+ "right-editinterface": "Mudéfica al colegamèint tra sistēma e utèint",
+ "right-editusercssjs": "Mudéfica i file CSS e JS 'd êter utèint",
+ "right-editusercss": "Mudéfica i file CSS 'd êter utèint",
+ "right-edituserjs": "Mudéfica i file JS 'd êter utèint",
+ "right-editmyusercss": "Mudéfica i file CSS dal só utèint",
+ "right-editmyuserjs": "Mudéfica i file JavaScript dal só utèint",
+ "right-viewmywatchlist": "Guêrda la lésta di tō tgnû 'd ôc specêl",
+ "right-editmywatchlist": "Mudéfica i tō tgnu 'd ôc. Da nutêr che soquânti asiòun a prân incòra zuntêr dal pàgini ânca sèinsa avèiren al dirét.",
+ "right-viewmyprivateinfo": "Guêrda al tō infurmasiòun personêli (per eşèimpi: indirés ed pôsta eletrônica, nòm vèira)",
+ "right-editmyprivateinfo": "Câmbia 'l tō infurmasiòun personêli (per eşèimpi: indirés ed pôsta eletrônica, nòm vèira)",
+ "right-editmyoptions": "Câmbia al tō preferèinsi",
+ "right-rollback": "Scanşèla a la şvêlta al mudéfichi ed l'ûltem utèint ch'l'à mudifichê 'na pàgina particulêra",
+ "right-markbotedits": "Sègna al mudéfichi da turnêr a mèter cme préma cme fâti da 'na mâchina in avtomâtich",
+ "right-noratelimit": "An n'é mìa ublighê al lémit 'd asiòun",
+ "right-import": "Côpia dal pàgini da 'd j êter wiki",
+ "right-importupload": "Zuntêr dal pàgini da un file carghê.",
+ "right-patrol": "Sègna al mudéfichi 'd j êter utèint cme verifichêdi",
+ "right-autopatrol": "Sègna in avtomâtich al mudéfichi che t'é fât cme verifichêdi",
+ "right-patrolmarks": "Drōva la funsiòun ed veréfica dal j ûltmi mudéfichi",
+ "right-unwatchedpages": "Fa vèder un elèinch ed pàgini mìa guardêdi",
+ "right-mergehistory": "Al mèt insèm la stôria dal pàgini",
+ "right-userrights": "Mudéfica i dirét ed l'utèint",
+ "right-userrights-interwiki": "Mudéfica i dirét ed j êter utèint 'd êtri wiki",
+ "right-siteadmin": "Blōca e şblōca al databêş",
+ "right-override-export-depth": "Pôrta fōra al pàgini cun insèm al pàgini coleghêdi per 'na larghèsa ed 5",
+ "right-sendemail": "Spidés pôsta eletrônica a êter utèint",
+ "right-passwordreset": "A vèd i mesâg 'd arnōv ed la cêva 'ed ingrès",
+ "right-managechangetags": "Fà e tó via i [[Special:Tags|tag]] dal databêş",
"newuserlogpage": "Utèint nōv",
+ "newuserlogpagetext": "Ché sòt a gh' é la lésta di nōv utèint.",
+ "rightslog": "Diré ed j utèint",
+ "rightslogtext": "Ché sòt a gh' é la lésta dal mudéfichi a i dirét dê a j utèint.",
"action-read": "lēzer cla pàgina ché",
"action-edit": "Mudifichêr cla pàgina ché",
"action-createpage": "inventêr pàgini",
+ "action-createtalk": "fêr 'l pàgini 'd discusiòun.",
+ "action-createaccount": "fêr cla registrasiòun ché",
+ "action-history": "vèder la stôria 'd cla pàgina ché",
+ "action-minoredit": "sgnêr cla mudéfica che cme céca",
"action-move": "spustêr cla pàgina ché",
- "action-movefile": "spustêr cól 'file' ché",
- "action-upload": "carghêr cól 'file' ché",
+ "action-move-subpages": "spustêr cla pàgina ché e al relatîvi sòt pàgini",
+ "action-move-rootuserpages": "Spustêr 'l pàgini principêli 'd j utèint",
+ "action-move-categorypages": "spustêr 'l categoréi",
+ "action-movefile": "spustêr cól file ché",
+ "action-upload": "carghêr cól file ché",
+ "action-reupload": "scréver in sém a cól file ché ch' al gh'é bèle",
+ "action-reupload-shared": "scréver insém a cól file ché preşèint int l'archévi spartî",
+ "action-upload_by_url": "carghêr cól file ché da 'n indirés URL",
+ "action-writeapi": "drōva al j API in scritûra",
"action-delete": "scanşlêr cla pàgina ché",
+ "action-deleterevision": "scanşlêr cla versiòun ché",
+ "action-deletedhistory": "guêrda la stòria scanşlêda de sté pàgina",
+ "action-browsearchive": "serchêr pàgini scanşlêdi",
+ "action-undelete": "tōr indrê cla pàgina ché",
+ "action-suppressrevision": "turnêr a vèder e mèter al mudéfichi lughêdi",
+ "action-suppressionlog": "guardêr sté regéster privê",
+ "action-block": "bluchê sté utèint in scritûra",
+ "action-protect": "cambiêr i livē 'd prutesiòun per cla pàgina ché",
+ "action-rollback": "scanşèla a la şvêlta al mudéfichi ed l'ûltem utèint ch'l'à mudifichê 'na pàgina particulêra",
+ "action-import": "côpia dal pàgini da 'n' êtra wiki",
+ "action-importupload": "zuntêr dal pàgini da un file carghê",
+ "action-patrol": "sgnêr al mudéfichi 'd j êter utèint cme verifichêdi",
+ "action-autopatrol": "sgnêr al tō mudéfichi cme verifichêdi",
+ "action-unwatchedpages": "vèder un elèinch ed pàgini mìa guardêdi",
+ "action-mergehistory": "unîr la stôria 'd cla pàgina ché",
+ "action-userrights": "mudefichêr tót i dirét ed j utèint",
+ "action-userrights-interwiki": "mudefichêr i dirét ed j utèint insém a êtri wiki",
+ "action-siteadmin": "bluchêr e şbluchêr al databêş",
+ "action-sendemail": "spidîr pôsta eletrônica",
+ "action-editmywatchlist": "mudéfica i tō tgnû sòt ôc",
+ "action-viewmywatchlist": "Guêrda i tō tgnû 'd ôc specêl",
+ "action-viewmyprivateinfo": "guêrda al tō infurmasiòun personêli",
+ "action-editmyprivateinfo": "mudéfica al tō infurmasiòun personêli",
+ "action-editcontentmodel": "câmbia al mudèl dèinter a 'na pàgina",
+ "action-managechangetags": "fà e tó via i tag dal databêş",
"nchanges": "$1\n{{PLURAL:$1|mudéfica|mudéfichi}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|da l'ûltma vîşita}}",
+ "enhancedrc-history": "stòria",
"recentchanges": "Ûltmi mudéfichi",
"recentchanges-legend": "Siēlti ûltmi mudéfichi.",
+ "recentchanges-summary": "Cla pàgina ché la preşèinta al mudéfichi piô nōvi a còl che gh'é dèinter al sît.",
+ "recentchanges-noresult": "Nisóna mudéfica dèinter al peréiod scrét ch'la sudésfa chi critèri ché.",
"recentchanges-feed-description": "Cól feed ché 'l arpôrta al mudéfichi piô frèschi a còl che gh'é dèinter al sît.",
"recentchanges-label-newpage": "Cun cla mudéfica ché t'é fât 'na pàgina nōva.",
"recentchanges-label-minor": "Còsta l'é 'na mudéfica céca",
"recentchanges-label-bot": "Cla mudéfica ché l'é stêda fâta da un bot.",
"recentchanges-label-unpatrolled": "Cla mudéfica ché an n'é mìa incòra stêda verifichêda.",
+ "recentchanges-label-plusminus": "Cambiamèint ed la pàgina in nómer ed byte",
+ "recentchanges-legend-heading": "'''Spiegasiòun:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (guêrda [[Special:NewPages|al pàgini nōvi]])",
"rcnotefrom": "Ché sòt a {{PLURAL:$5|gh'é la mudéfica fâta|gh'în al mudéfichi fâti}} a partîr da<strong>$3,$4</strong>(fîn a <strong>$1</strong>).",
"rclistfrom": "Fà vèder al mudéfichi fâti a partîr da $3 $2",
"rcshowhideminor": "$1 al mudéfichi céchi",
+ "rcshowhideminor-show": "Fà vèder",
+ "rcshowhideminor-hide": "Lōga",
"rcshowhidebots": "$1 i bot",
+ "rcshowhidebots-show": "Fà vèder",
+ "rcshowhidebots-hide": "Lōga",
"rcshowhideliu": "$1 j utèint registrê",
+ "rcshowhideliu-show": "Fà vèder",
+ "rcshowhideliu-hide": "Lōga",
"rcshowhideanons": "$1 j utèint sèinsa nòm.",
+ "rcshowhideanons-show": "Fà vèder",
+ "rcshowhideanons-hide": "Lōga",
"rcshowhidepatr": "$1 al mudéfichi verifichêdi",
+ "rcshowhidepatr-show": "Fà vèder",
+ "rcshowhidepatr-hide": "Lōga",
"rcshowhidemine": "$1 al mē mudéfichi",
+ "rcshowhidemine-show": "Fà vèder",
+ "rcshowhidemine-hide": "Lōga",
"rclinks": "Fà vèder al $1 ûltmi mudéfichi fâti int j ûltem $2 dé<br />$3",
"diff": "dif",
"hist": "stòria",
@@ -1040,25 +1178,119 @@
"newpageletter": "N",
"boteditletter": "b",
"number_of_watching_users_pageview": "[vésta da {{PLURAL:$1|un utèint|$1 utèint}}]",
+ "rc_categories": "Lémita al categoréi (divîşi da \"|\")",
"rc_categories_any": "Bast' ech sia",
+ "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} dôp la mudéfica",
+ "newsectionsummary": "/* $1 */ sesiòn nōva",
"rc-enhanced-expand": "Fà vèder i particulêr.",
"rc-enhanced-hide": "Lōga i particulêr.",
+ "rc-old-title": "in urégin fâta cme \"$1\"",
"recentchangeslinked": "Mudéfichi coleghêdi",
+ "recentchangeslinked-feed": "Mudéfichi coleghêdi",
"recentchangeslinked-toolbox": "Mudéfichi coleghêdi",
"recentchangeslinked-title": "Mudéfichi coleghêdi a $1.",
"recentchangeslinked-summary": "Cla pàgina specêla ché la fà vèder al j ûltmi mudéfichi al pàgini coleghêdi da còla sgnêda (o dèinter int la categoréia sgnêda). Al pàgini dèint a la tó lésta 'd j [[Special:Watchlist|tgnû sòt ôc specêl]] în sgnêdi in '''grasèt'''.",
"recentchangeslinked-page": "Nòm ' d la pàgina.",
"recentchangeslinked-to": "Fà vèder sōl al mudéfichi fâti al pàgini coleghêdi a còla sgnêda.",
- "upload": "Cârga un 'file'",
+ "upload": "Cârga un file",
+ "uploadbtn": "Cârga un file",
+ "reuploaddesc": "Tōrna al modèl p'r al cargamèint.",
+ "upload-tryagain": "Spidés la spiegasiòun dal file mudifichê",
+ "uploadnologin": "An t'é mìa gnû dèinter",
+ "uploadnologintext": "Per carghêr al file è necesâri $1.",
+ "upload_directory_missing": "La cartèla 'd cargamèint dal j infurmasiòun ($1) l'an gh'é mìa e l'an pōl mìa èser fâta dal prugrâma dal sît.",
+ "upload_directory_read_only": "Al prugrâma dal sît an n'é bòun de scréver int la cartèla 'd cargamèint dal j infurmasiòun ($1).",
+ "uploaderror": "Erōr int al cargamèint",
+ "upload-recreate-warning": "<strong>Atèint: un file cun cól nòm ché l'é stê scanşlê o spustê. </strong> L' elèinch dal scanşladûri e di spustamèint ed cla pàgina ché al vîn scrét ché sòta per cumditê:",
+ "uploadtext": "Druvêr al mudèl ché sòta per scarghêr di file nōv. Per guardêr o serchêr i file bèle scarghê, consultêr la [[Special:FileList| lésta di file scarghê]]. Al câregh di file e dal versiòun nōvi di file în registrê int la [[Special:Log/upload|lésta di file salvê]], al scanşladûri in còl [[Special:Log/delete|apôsta]].\n\nPer mèter un file dèinter 'na pàgina, fêr un colegamèint ed cól gèner ché:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' per druvêr la versiòun intēra dal file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|tèst divêrs]]</nowiki></code>''' per druvêr 'na versiòun lêrga 200pixel dèinter int 'na scâtla, in rîga a mansèina e cun 'tèst divêrs' cme tétol\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' per fêr un colegamèint dirèt al file sèinsa vèdrel",
+ "upload-permitted": "{{PLURAL:$2|Gèner ed file permés}}: $1.",
+ "upload-preferred": "{{PLURAL:$2| Gèner ed file cunsiliê}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Gèner ed file mìa permés}}: $1.",
"uploadlogpage": "Fil carghê",
- "filedesc": "Sûnt.",
+ "uploadlogpagetext": "Ed sègvit a gh'é lelèinch ed j ûltem file carghê. Consultêr la [[Special:NewFiles|galeréia di file nōv]] per vèdri tót.",
+ "filename": "Nòm dal file",
+ "filedesc": "Particulêr.",
+ "fileuploadsummary": "Sûnt:",
+ "filereuploadsummary": "Cambiamèint al file:",
+ "filestatus": "Infurmasiòun inséma 'l dirét 'd avtōr:",
+ "filesource": "Surzéia",
+ "ignorewarning": "Trascûra l'avîş e a tóti 'l manēri sêlva al file",
+ "ignorewarnings": "An badêr mìa a i mesâg dal sistēma",
+ "minlength1": "Al nòm dal file al dēv èser fât d' almēno 'na lètra.",
+ "illegalfilename": "Al nòm \"$1\" al gh'à dèinter di carâter mìa permés int i tétol dal pàgini. \nDêr al file un nòm divêrs e pruvêr a carghêrel ed nōv.",
+ "filename-toolong": "I nòm di file an pōlen mìa andêr d'ed sōver î 240 byte.",
+ "badfilename": "Al nòm dal file l'é stê cunvertî in \"$1\".",
+ "filetype-mime-mismatch": "La zûnta dal file \".$1\" an n'é m'a cumpâgna 'l gèner MIME vésta dal file ($2).",
+ "filetype-badmime": "An n'é mìa permés carghê file 'd gèner MIME \"$1\".",
+ "filetype-bad-ie-mime": "Impusébil carghêr al file perché Internet Explorer l'al vedré cme \"$1\", ch'lé un gèner ed file mìa permés e al pré èser ânca periculōş.",
+ "filetype-unwanted-type": "Carghêr un file dal gèner '''''.$1''''' l'é scunsiliê. {{PLURAL:$3|Al gèner ed file cunsiliê l'é|I gèner di file cunsiliê în }} $2.",
+ "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|an n'é mìa un gèner ed file permés| în mìa gèner ed file permés}}.\n{{PLURAL:$3|Al gèner ed file permés l'é|I gèner ed file permés în}} $2.",
+ "filetype-missing": "Al file l'é sèinsa la zûnta (per es. \".jpg\").",
+ "empty-file": "Al file che t'é spidî l'é vōd.",
+ "file-too-large": "Al file che t'é spidî l'é trôp grôs.",
+ "filename-tooshort": "Al nòm dal file l'é trôp cûrt.",
+ "filetype-banned": "Cól gèner ed file ché an n'é mìa permés.",
+ "verification-error": "Cól file ché an n'à mìa pasê la veréfica.",
+ "hookaborted": "La mudéfica che s'é pruvê ed fêr l'é stêda fermêda da un gânc ed 'na zûnta a la fîn dal nòm dal file .",
+ "illegal-filename": "Al nòm dal file an n'é mia acetê.",
+ "overwrite": "Scréver inséma 'n file che al gh'é bèle an n'é mìa permés.",
+ "unknown-error": "É sucès un erōr mìa cgnusû.",
+ "tmp-create-error": "L'é impusébil fêr un file pruvişôri.",
+ "tmp-write-error": "Erōr de scritûra dal file pruvişôri.",
+ "large-file": "A 's arcmânda d' andêr d'ed sōver la larghèsa ed $1 per ógni file; còst l'é grôs $2.",
+ "largefileserver": "Al file al và fōra dal j amzûri permési da l'impustasiòun dal prugrâma.",
+ "emptyfile": "Al file apèina carghê al sèmbra vōd. \nCòst al pré èser duvû a un erōr int al nòm dal file. Verifichêr ch'es vōl dabòun carghêr cól file ché.",
+ "windows-nonascii-filename": "Cla wiki ché l'an permèt mìa i nòm di file cun i carâter specêl.",
+ "fileexists": "Un file cun cól nòm ché al gh'é bèle. Verifichêr préma <strong>[[:$1]]</strong> s' an s'é mìa sicûr ed vrèir scrévregh inséma. \n[[$1|thumb]]",
+ "filepageexists": "La pàgina de spiegasiòun de sté file l'é bèle stêda fâta a l'indirés <strong>[[:$1]]</strong>, anca s' an gh'é mìa incòra un file cun sté nòm. La spiegasiòun ed l'elemèint mésa da carghêr l'an gnirà mìa fâta vèder inséma la pàgina de spiegasiòun. Per fêr in môd che l'elemèint a 's vèda inséma la pàgina de spiegasiòun, a srà necesâri mudifichêrla a mân. [[$1|thumb]]",
+ "fileexists-extension": "Un file cun l'istès nòm al ghé bèle: [[$2|thumb]]\n*Nòm dal file carghê: <strong>[[:$1]]</strong>\n*Nòm dal file che gh'é: <strong>[[:$2]]</strong> \nVōt fōrsi siēlier un nòm pió carateréstich?",
+ "fileexists-thumbnail-yes": "Al file carghê al sèmbra èsere 'na miniadûra ''(thumbnail)''. [[$1|thumb]] Verifichêr, per cunfròunt, al file <strong>[[:$1]]</strong>. Se 's trâta ed l'istèsa figûra, int al j amzûri uriginêli, an n'é mìa necesâri carghêr êtri miniadûri.",
+ "file-thumbnail-no": "Al nòm dal file al cumincia cun <strong>$1</strong>; la sèmbra dòunca èser 'na miniadûra ''(thumbnail)''. Se 's gh'à la figûra int la qualitê uriginêla, as prèiga 'd carghêrla. In chêş contrâri, as prèiga 'd cambiêr al nòm dal file.",
+ "fileexists-forbidden": "Un file cun un nòm cumpâgn al gh'é bèle e an 's pōl mìa scrévregh inséma. Tunêr indrē e cambiêr al nòm cun al nòm ch'es vōl carghêr al file. [[File:$1|thumb|center|$1]]",
+ "fileexists-shared-forbidden": "Un file cun un nòm cumpâgn al gh'é bèle int l'archévi dal risórsi multimediêli spartîdi. S' es vōl incòra carghêr al file, tunêr indrē e cambiêr al nòm cun al nòm ch'es vōl carghêr al file. [[File:$1|thumb|center|$1]]",
+ "file-exists-duplicate": "Cōl file ché l'é 'na côpia {{PLURAL:$1|dal segvèint|di segvèint}} file:",
+ "file-deleted-duplicate": "Un file cumpâgn a còst ([[:$1]]) l'é stê scanşlê tèimp fa. Verifichêr la stôria dal scanşladûri préma 'd carghêrel incòra ed nōv.",
+ "file-deleted-duplicate-notitle": "Un file cumpâgn a còst l'é stê scanşlê tèimp fa, e al tétol l'é stê tôt via. Dmânda a quelchidûn ch' al gh'à la pusibilitê ed vèdeer i file scanşlê 'd verifichêr la situasiòun préma 'd andêr avânti cun al carghêrel incòra 'd nōv.",
+ "uploadwarning": "Avîş che s'é drē carghêr",
+ "uploadwarning-text": "Per piaşèir câmbia ché sòta la spiegasiòun dal file e prōv' incòra.",
+ "savefile": "Sêlva 'l file",
+ "uploaddisabled": "La cârga dal file l'é bluchêda.",
+ "copyuploaddisabled": "La cârga per mèz 'd URL l'é blucêda.",
+ "uploaddisabledtext": "La cârga di file an n'é mìa atîva.",
+ "php-uploaddisabledtext": "La cârga dal file cun PHP l'é bluchêda. Cuntròla che 'l file_uploads al sìa bèin impustê.",
+ "uploadscripted": "Cól file ché al gh'à un côdis o di script, che prén èser mìa capî bèin da un navigadōr internèt.",
+ "uploadscriptednamespace": "Cól file SVG ché al gh'à un namespace '$1' mìa permés.",
+ "uploadinvalidxml": "Al côdis XML int al file al pōl mìa èser lavurê bèin.",
+ "uploadvirus": "Cól fil ché al ghè un 'virus'! Particulêr: $1",
+ "uploadjava": "Cól file ché l'é un file ZIP che 'l gh'à dèinter un file .class Java. Carghêr i file Java an n'é mìa permés, perché pōlen schivşêr i lémit ed sicurèsa.",
+ "upload-source": "File 'd urégin",
+ "sourcefilename": "Nòm dal file 'd urégin:",
+ "sourceurl": "URL 'd urégin:",
+ "destfilename": "Nòm dal file in dó 'l gh'à d'andêr:",
+ "upload-maxfilesize": "Grandèsa mâsima dal file:$1",
+ "upload-description": "Spiegasiòun dal file",
+ "upload-options": "Siēlti per carghêr",
+ "watchthisupload": "Zûnta a i tgnu 'd ôc",
+ "filewasdeleted": "Un file cun cól nòm ché l'é bèle stê carghê e scanşlê tèimp indrē. Verifichêr la stôria dal $1 préma 'd carghêrel incòra.",
+ "filename-bad-prefix": "Al nòm dal file che s'é drē carghêr al cumîncia cun <strong>\"$1\"</strong>, ch'l'é un nòm genèrich cumpâgn a quî dê in avtomâtich dal mâchini fotogrâfichi digitêli. As prèiga ed sernîr un nòm pió precîş p'r al fîle.",
+ "upload-success-subj": "Carghê cun sucès",
+ "upload-success-msg": "La cârga da [$2] l'é andêda bèin. Al file a's pōl catêr ché: [[:{{ns:file}}:$1]]",
+ "upload-failure-subj": "A gh'é un problēma carghêr",
+ "upload-failure-msg": " A s'é verifiche un problēma cun la cârga da [$2]:\n\n\n$1",
+ "upload-warning-subj": "Avîş che s'é drē carghêr",
+ "upload-warning-msg": "A gh'é stê un problēma mèinter 's carghêva da [$2]. A ' spōl turnêr al [[Special:Upload/stash/$1|form di upload]] per justêr al problēma.",
+ "upload-proto-error": "Protocôl şbagliê",
+ "upload-proto-error-text": "Per carghêr da terminêl luntân druvêr URL che cumîncen cun code>http://</code> opór <code>ftp://</code>.",
+ "upload-file-error": "Erōr intêren",
+ "upload-file-error-text": "É sucès un erōr intêren mèinter a s' ēra drê fêr un file pruvişôri inséma 'l servèint. Cuntatêr un [[Special:ListUsers/sysop|aministradōr]].",
+ "upload-misc-error": "Erōr in cârga mia cgnusû",
"license": "Licèinsa:",
"license-header": "Licèinsa",
"nolicense": "Nisóna licèinsa sgnêda",
"listfiles_date": "Dâta",
"listfiles_name": "Nòm",
"listfiles_user": "Utèint",
- "file-anchor-link": "'File'",
+ "file-anchor-link": "File",
"filehist": "Stòria 'd la pàgina",
"filehist-help": "Fà cléch insém a 'n gróp dâta/ōra per vèder al file cm'é l'ēra int al mumèint e-sgnê",
"filehist-revert": "armèt",
@@ -1069,7 +1301,7 @@
"filehist-user": "Utèint",
"filehist-dimensions": "Amzûri",
"filehist-comment": "Cumèint",
- "imagelinks": "Ûş dal 'file'",
+ "imagelinks": "Ûş dal file",
"linkstoimage": "{{PLURAL:$1|Int la pàgina seguèint a gh'é|Int al seguèinti $1 pàgini a gh'é}} colegamèint al file:",
"nolinkstoimage": "Nisóna pàgina la gh'à colegamèint al file",
"sharedupload-desc-here": "Cól file ché al deşvîn da $1 e al pōl èser druvê da êter prugèt. Ed sègvit a vîn fât vèder la spiegasiòun che gh'é int la [$2 pàgina de spiegasiòun dal file].",
@@ -1087,7 +1319,6 @@
"pager-older-n": "{{PLURAL:$1|1 al pió vèc|$1 i pió vèc}}",
"booksources": "Tèst o documèint da léber.",
"booksources-search-legend": "Sērca 'd documèint insém a di léber",
- "booksources-go": "Và",
"log": "Regéster",
"allpages": "Tót al pàgini.",
"allarticles": "Tót al pàgini.",
@@ -1110,7 +1341,7 @@
"watchthispage": "Và adrē a cla pàgina ché",
"unwatch": "Andêr mìa adrē",
"watchlist-details": "La lésta 'd quî tgnû 'd ôc specêl la gh'à {{PLURAL:$1|'na pàgina (e la relatîva pàgina 'd discusiòun)|$1 pagine (e al relatîvi pàgini 'd discusiòun)}}.",
- "wlshowlast": "Fà vèder al j ûltmi $1 ōri $2 dé $3",
+ "wlshowlast": "Fà vèder al j ûltmi $1 ōri $2 dé",
"watchlist-options": "Siēlti di tgnû sòt ôc specêl.",
"created": "creät",
"changed": "mudifegat",
@@ -1119,7 +1350,6 @@
"actioncomplete": "Asiòun cumpîda",
"actionfailed": "Asiòun falîda",
"dellogpage": "Scanşladûri",
- "rollback_short": "Tōrna préma dal mudéfichi",
"rollbacklink": "tōrna préma dal mudéfichi",
"rollbackfailed": "An t'é mia turnê indrē",
"protectlogpage": "Al prutesiòun",
@@ -1158,7 +1388,7 @@
"nolinkshere": "Nisóna pàgina la gh'à dèinter colegamèint che pûnten a '''[[:$1]]'''.",
"isredirect": "Pàgina redirect",
"istemplate": "uniòun",
- "isimage": "Colegamèint vêrs al 'file'",
+ "isimage": "Colegamèint vêrs al file",
"whatlinkshere-prev": "{{PLURAL:$1|còl préma|quî préma $1}}",
"whatlinkshere-next": "{{PLURAL:$1|còl dôp|quî dôp $1}}",
"whatlinkshere-links": "← colegamèint",
@@ -1201,7 +1431,7 @@
"allmessages-filter-submit": "Và",
"thumbnail-more": "Ingrandés",
"thumbnail_error": "Erōr mèinter ét fêv la miniadûra:$1",
- "import-upload-filename": "Nòm dal 'file':",
+ "import-upload-filename": "Nòm dal file:",
"import-comment": "Argumèint:",
"import-upload": "Cârga infurmasiòun XML",
"tooltip-pt-userpage": "La tó pàgina utèint",
@@ -1237,7 +1467,7 @@
"tooltip-feed-atom": "Feed Atom per cla pàgina ché.",
"tooltip-t-contributions": "Lèsta di lavōr fât da cl'utèint ché.",
"tooltip-t-emailuser": "Mânda un mesâg cun la pòsta eletrônica a cl'utèint ché",
- "tooltip-t-upload": "Cârga un 'file'",
+ "tooltip-t-upload": "Cârga un file",
"tooltip-t-specialpages": "Elèinch ed tót al pàgini specêli",
"tooltip-t-print": "Per stampêr cla pàgina ché.",
"tooltip-t-permalink": "Colegamèint fés a cla versiòun ché 'd la pàgina.",
@@ -1245,7 +1475,7 @@
"tooltip-ca-nstab-user": "Guêrda la pàgina utèint",
"tooltip-ca-nstab-special": "Còsta ché l'é 'na pàgina specêlal l'an pōl mìa èser mudifichêda",
"tooltip-ca-nstab-project": "Guêrda la pàgina dal prugèt",
- "tooltip-ca-nstab-image": "Guêrda la pàgina dal 'file'",
+ "tooltip-ca-nstab-image": "Guêrda la pàgina dal file",
"tooltip-ca-nstab-template": "Guêrda 'l mudèl",
"tooltip-ca-nstab-help": "Guêrda la pàgina d'ajót",
"tooltip-ca-nstab-category": "Guêrda la pàgina 'd la categoréia",
@@ -1260,7 +1490,6 @@
"tooltip-summary": "Mèt dèinter un sût cèch.",
"others": "êter",
"pageinfo-header-edits": "Stòria dal mudéfichi",
- "pageinfo-views": "Nómer dal vîşiti",
"pageinfo-watchers": "Nómer 'd utèint che gh'àn la pàgina sòt ôc.",
"pageinfo-edits": "Nómer totêl dal mudéfichi",
"pageinfo-authors": "Nómer totêl di divêrs avtôr",
@@ -1276,7 +1505,7 @@
"ilsubmit": "Sērca",
"bydate": "per dâta",
"ago": "$1 fa",
- "bad_image_list": "La manēra l'é còsta:\n\na vînen cunsidrê sōl j elèinch puntê (ríghi che cumîncen cun al carâter *). Al prém colegamèint só ògni rîga al dēv èser un colegamèint a un 'file' mìa vrû. I colegamèint che vînen dôp, int l'istèsa rîga, în cunsidrê cme un chêş (oséia, pàgini in dó al 'file' al pōl èser arciamê normalmèint).",
+ "bad_image_list": "La manēra l'é còsta:\n\na vînen cunsidrê sōl j elèinch puntê (ríghi che cumîncen cun al carâter *). Al prém colegamèint só ògni rîga al dēv èser un colegamèint a un file mìa vrû. I colegamèint che vînen dôp, int l'istèsa rîga, în cunsidrê cme un chêş (oséia, pàgini in dó al file al pōl èser arciamê normalmèint).",
"metadata": "Metadati",
"metadata-help": "In cól file ché agh'é dal j infurmasiòun zuntêdi, prubabilmèint zuntêdi da la mâchina fotogrâfica o dal scàner druvê per fotografêrel o per fêrel dvintêr digitêl. Se al file l'é stê mudfifichê, soquânt particulêr a prén cumbinêr mìa cun la realtê.",
"metadata-fields": "I câmp relatîv a i metadati ed la figûra, in lésta in cól mesâg ché, a gnirân més int la pàgina ed la figûra quând la tabèla di metadati l'é mustrêda int la fōrma cûrta. Per impustasiòun pre-stabilîda, chiêter câmp a gnirân lughê. \n* make \n* model \n* datetimeoriginal \n* exposuretime \n* fnumber \n* isospeedratings \n* focallength \n* artist \n* copyright \n* imagedescription \n* gpslatitude \n* gpslongitude \n* gpsaltitude",
@@ -1287,7 +1516,6 @@
"exif-languagecode": "Léngva",
"exif-iimcategory": "Categoréia",
"exif-identifier": "Identificatîv",
- "watchlistall2": "tót",
"namespacesall": "tót",
"monthsall": "tót",
"recreate": "Tōrna a fêr",
@@ -1312,7 +1540,7 @@
"version-version": "($1)",
"version-license": "Licèinsa Media Wiki",
"version-poweredby-others": "êter",
- "fileduplicatesearch-filename": "Nòm dal 'file':",
+ "fileduplicatesearch-filename": "Nòm dal file:",
"fileduplicatesearch-submit": "Sērca",
"specialpages": "Pàgini specêli",
"external_image_whitelist": "#Lasêr cla pàgina ché acsé cme l'é<pre>\n#Mèter dèinter i pès dal j espresiòun regolêri (sōl la pêrta cla va fra //) ed sègvit\n#Còsti gnirân més a cunfrûnt cun j indirés URL dal figûri d'ed fōra (hotlinked) \n#Al cunbinasiòun asrân fât vèder cme figûri, se no a gnirà fât vèder sōl al colegamèint\n#Al rîghi che cumîncen cun # în cunsidrêdi di cumèint\n#La diferèinsa tr' al lètri grândi e al lètri céchi an gh'à mìa impurtânsa\n\n#Mèter sōver cla rîga ché tót i pès di regex. Lasêr cla rîga ché acsé cme l'é</pre>",
@@ -1322,10 +1550,10 @@
"compare-page2": "Pàgina 2",
"compare-rev1": "Revişiòn 1",
"compare-rev2": "Revişiòn 2",
- "htmlform-reset": "Scanşèla la mudéfica",
+ "htmlform-reset": "Scanşèla 'l mudéfichi",
"htmlform-selectorother-other": "Êter",
"rightsnone": "(nisûn)",
- "feedback-subject": "Argomèint:",
+ "feedback-cancel": "Scanşela",
"feedback-message": "Mesâg",
- "feedback-cancel": "Scanşela"
+ "feedback-subject": "Argomèint:"
}
diff --git a/languages/i18n/el.json b/languages/i18n/el.json
index 8c365660..78c64a38 100644
--- a/languages/i18n/el.json
+++ b/languages/i18n/el.json
@@ -39,7 +39,9 @@
"아라",
"Calak",
"Auslaender",
- "Milicevic01"
+ "Milicevic01",
+ "Ah3kal",
+ "Macofe"
]
},
"tog-underline": "Υπογράμμιση συνδέσμων:",
@@ -67,7 +69,7 @@
"tog-shownumberswatching": "Εμφάνιση του αριθμού των συνδεδεμένων χρηστών",
"tog-oldsig": "Υπάρχουσα υπογραφή:",
"tog-fancysig": "Μεταχείριση υπογραφής ως κώδικα wiki (χωρίς αυτόματο σύνδεσμο)",
- "tog-uselivepreview": "Χρήση ζωντανής προεπισκόπησης (πειραματικό)",
+ "tog-uselivepreview": "Χρήση προεπισκόπησης σε ζωντανό χρόνο",
"tog-forceeditsummary": "Να ειδοποιούμαι κατά την εισαγωγή κενής σύνοψης επεξεργασίας",
"tog-watchlisthideown": "Απόκρυψη των επεξεργασιών μου από τη λίστα παρακολούθησης",
"tog-watchlisthidebots": "Απόκρυψη των επεξεργασιών των bot από τη λίστα παρακολούθησης",
@@ -83,7 +85,7 @@
"tog-prefershttps": "Να γίνεται πάντα χρήση ασφαλούς σύνδεσης όταν ο χρήστης είναι συνδεδεμένος",
"underline-always": "Πάντα",
"underline-never": "Ποτέ",
- "underline-default": "Προεπιλογή από το skin ή από τον περιηγητή",
+ "underline-default": "Προεπιλογή από θέμα εμφάνισης ή από περιηγητή",
"editfont-style": "Στυλ γραμματοσειράς της περιοχής επεξεργασίας:",
"editfont-default": "Προεπιλογή περιηγητή",
"editfont-monospace": "Γραμματοσειρά με σταθερό πλάτος χαρακτήρων",
@@ -205,11 +207,11 @@
"permalink": "Σταθερός σύνδεσμος",
"print": "Εκτύπωση",
"view": "Προβολή",
- "view-foreign": "Δείτε στο $1",
+ "view-foreign": "Προβολή στο $1",
"edit": "Επεξεργασία",
"edit-local": "Επεξεργασία τοπικής περιγραφής",
"create": "Δημιουργία",
- "create-local": "Προσθέστε τοπική περιγραφή",
+ "create-local": "Προσθήκη τοπικής περιγραφής",
"editthispage": "Επεξεργασία αυτής της σελίδας",
"create-this-page": "Δημιουργία αυτής της σελίδας",
"delete": "Διαγραφή",
@@ -242,6 +244,7 @@
"otherlanguages": "Σε άλλες γλώσσες",
"redirectedfrom": "(Ανακατεύθυνση από $1)",
"redirectpagesub": "Σελίδα ανακατεύθυνσης",
+ "redirectto": "Ανακατεύθυνση σε:",
"lastmodifiedat": "Η σελίδα αυτή τροποποιήθηκε τελευταία φορά στις $1, στις $2.",
"viewcount": "Αυτή η σελίδα έχει προσπελαστεί {{PLURAL:$1|μια φορά|$1 φορές}}.",
"protectedpage": "Προστατευμένη σελίδα",
@@ -253,6 +256,8 @@
"pool-timeout": "Χρόνος αναμονής για το κλείδωμα",
"pool-queuefull": "Η ουρά της δεξαμενής διεργασιών είναι πλήρης",
"pool-errorunknown": "Άγνωστο σφάλμα",
+ "pool-servererror": "Η υπηρεσία καταμετρητή ομαδοποίησης δεν είναι διαθέσιμη ($1).",
+ "poolcounter-usage-error": "Σφάλμα χρήσης:$1",
"aboutsite": "Σχετικά με {{SITENAME}}",
"aboutpage": "Project:Σχετικά",
"copyright": "Το περιεχόμενο είναι διαθέσιμο σύμφωνα με την $1 εκτός αν αναφέρεται διαφορετικά.",
@@ -344,6 +349,8 @@
"filerenameerror": "Δεν είναι δυνατή η μετονομασία του αρχείου «$1» σε «$2».",
"filedeleteerror": "Δεν ήταν δυνατή η διαγραφή του αρχείου «$1».",
"directorycreateerror": "Δεν μπορούσε να δημιουργηθεί η κατηγορία «$1».",
+ "directoryreadonlyerror": "Ο κατάλογος «$1» είναι μόνο για ανάγνωση.",
+ "directorynotreadableerror": "Ο κατάλογος «$1» δεν είναι αναγνώσιμος.",
"filenotfound": "Δεν είναι δυνατή η ανεύρεση του αρχείου «$1».",
"unexpected": "Μη προσδοκώμενη τιμή: «$1»=«$2».",
"formerror": "Σφάλμα: Δεν ήταν δυνατή η υποβολή της φόρμας!",
@@ -365,7 +372,8 @@
"viewsourcetext": "Μπορείτε να δείτε και να αντιγράψετε τον κώδικα αυτής της σελίδας:",
"viewyourtext": "Μπορείτε να προβάλετε και να αντιγράψετε τον κώδικα των '''επεξεργασιών σας''' σε αυτήν τη σελίδα:",
"protectedinterface": "Αυτή η σελίδα παρέχει κείμενο διεπαφής για το λογισμικό σε αυτό το wiki, και έχει κλειδωθεί για αποτροπή τυχόν βανδαλισμού.\n\nΓια να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wikis, παρακαλούμε χρησιμοποιήστε [//translatewiki.net/ translatewiki.net], το εγχείρημα τοπικοποίησης του MediaWiki.",
- "editinginterface": "'''Προσοχή:''' Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτή τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για τους άλλους χρήστες. Εάν θέλετε να διορθώσετε τη μετάφραση, μπορείτε να χρησιμοποιήσετε το [//translatewiki.net/ translatewiki.net], το εγχείρημα για με τις μεταφράσεις των μηνυμάτων MediaWiki.",
+ "editinginterface": "<strong>Προειδοποίηση:</strong> Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτήν τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για άλλους χρήστες αυτού του wiki.",
+ "translateinterface": "Για να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wiki, παρακαλούμε χρησιμοποιήστε το [//translatewiki.net/ translatewiki.net], το έργο τοπικοποίησης του MediaWiki.",
"cascadeprotected": "Αυτή η σελίδα έχει προστατευθεί από επεξεργασία, επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη σελίδα, που είναι προστατευμένη|στις ακόλουθες σελίδες, που είναι προστατευμένες}} με ενεργοποιημένη τη «διαδοχική» προστασία στο:\n$2",
"namespaceprotected": "Δεν έχετε άδεια να επεξεργάζεστε σελίδες στον τομέα '''$1'''.",
"customcssprotected": "Δεν έχετε δικαιώματα για να επεξεργαστείτε αυτή τη σελίδα CSS, επειδή περιέχει προσωπικές ρυθμίσεις άλλου χρήστη.",
@@ -422,6 +430,8 @@
"userlogin-resetlink": "Ξεχάσατε τα στοιχεία εισόδου σας;",
"userlogin-resetpassword-link": "Ξεχάσατε τον κωδικό πρόσβασης;",
"userlogin-helplink2": "Βοήθεια για τη σύνδεση",
+ "userlogin-loggedin": "Είστε ήδη {{GENDER:$1|συνδεδεμένος|συνδεδεμένη}} ως $1.\nΧρησιμοποιήστε την παρακάτω φόρμα για να συνδεθείτε ως άλλος χρήστης.",
+ "userlogin-createanother": "Δημιουργήσετε έναν άλλο λογαριασμό",
"createacct-emailrequired": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
"createacct-emailoptional": "Διεύθυνση ηλεκτρονικού ταχυδρομείου (προαιρετικό)",
"createacct-email-ph": "Εισάγετε το email σας",
@@ -483,6 +493,7 @@
"createaccount-text": "Κάποιος δημιούργησε έναν λογαριασμό για τη διεύθυνση email σας στο {{SITENAME}} ($4) με το όνομα \"$2\", με κωδικό πρόσβασης \"$3\". Θα πρέπει να συνδεθείτε και να αλλάξετε τον κωδικό πρόσβασής σας τώρα.\n\nΜπορείτε να αγνοήσετε αυτό το μήνυμα, αν αυτός ο λογαριασμός δημιουργήθηκε εσφαλμένα.",
"login-throttled": "Κάνατε πάρα πολλές πρόσφατες απόπειρες σύνδεσης.\nΠαρακαλούμε περιμένετε $1 προτού ξαναδοκιμάσετε.",
"login-abort-generic": "Η είσοδος δεν πέτυχε - Ματαιώθηκε",
+ "login-migrated-generic": "Ο λογαριασμός σας έχει μεταναστεύσει, και το όνομα χρήστη σας δεν υπάρχει πλέον σε αυτό το wiki.",
"loginlanguagelabel": "Γλώσσα: $1",
"suspicious-userlogout": "Το αίτημα αποσύνδεσής σας απερρίφθη επειδή φαίνεται ότι στάλθηκε από ένα λανθασμένο φυλλομετρητή (browser) ή διακομιστή προσωρινής αποθήκευσης.",
"createacct-another-realname-tip": "Το πραγματικό όνομα είναι προαιρετικό\nΑν επιλέξετε να το δώσετε, αυτό θα μπορεί να χρησιμοποιηθεί για να αναγνωριστεί η δουλειά σας.",
@@ -581,6 +592,7 @@
"anoneditwarning": "<strong>Προειδοποίηση:</strong> Δεν έχετε συνδεθεί. Η διεύθυνση IP σας θα είναι ορατή δημόσια αν κάνετε κάποια επεξεργασία. Αν <strong>[$1 συνδεθείτε]</strong> ή <strong>[$2 δημιουργήσετε λογαριασμό]</strong>, οι επεξεργασίες σας θα αποδοθούν στο όνομά χρήστη σας, μαζί με άλλα οφέλη.",
"anonpreviewwarning": "''Δεν έχετε συνδεθεί. Η αποθήκευση θα καταγράψει την διεύθυνσή IP σας στο ιστορικό επεξεργασίας αυτής της σελίδας.''",
"missingsummary": "'''Υπενθύμιση:''' Δεν έχετε συμπληρώσει τη σύνοψη επεξεργασίας. Αν κάνετε κλικ στο κουμπί Αποθήκευση πάλι, η επεξεργασία σας θα αποθηκευτεί χωρίς σύνοψη.",
+ "selfredirect": "<strong>Προσοχή:</strong> Ανακατευθύνετε αυτή τη σελίδα στον εαυτό της. Μπορεί να δώσατε λάθος στόχο για την ανακατεύθυνση, ή μπορεί να επεξεργάζεστε λάθος σελίδα.\nΑν κάνε κλίκ στο \"{{int:savearticle}}\" ξανά, η ανακατεύθυνση θα δημιουργηθεί ούτως ή άλλως.",
"missingcommenttext": "Παρακαλώ εισάγετε ένα σχόλιο παρακάτω.",
"missingcommentheader": "'''Υπενθύμιση:''' Δεν έχετε γράψει ένα θέμα/επικεφαλίδα για αυτό το σχόλιο.\nΑν κάνετε πάλι κλικ στο κουμπί \"{{int:savearticle}}\", η επεξεργασία σας θα αποθηκευτεί χωρίς θέμα ή επικεφαλίδα.",
"summary-preview": "Προεπισκόπηση σύνοψης:",
@@ -679,10 +691,13 @@
"content-model-text": "απλό κείμενο",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Κενό αντικείμενο",
+ "duplicate-args-category": "Σελίδες που χρησιμοποιούν διπλές παραμέτρους σε κλήσεις προτύπων",
+ "duplicate-args-category-desc": "Η σελίδα περιέχει κλήσεις πρότυπων που χρησιμοποιούν διπλές παραμέτρους, όπως <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Προειδοποίηση: Αυτή η σελίδα περιέχει πάρα πολύ ακριβό αναλυτή λειτουργικών κλήσεων.\n\nΠρέπει να περιέχει λιγότερες από $2 {{PLURAL:$2|κλήση|κλήσεις}}, τώρα {{PLURAL:$1|υπάρχει $1 κλήση|υπάρχουν $1 κλήσεις}}.",
- "expensive-parserfunction-category": "Σελίδες με πάρα πολλές ακριβές λεξιαναλυτικές λειτουργικές κλήσεις",
+ "expensive-parserfunction-category": "Σελίδες με πάρα πολλές ακριβές κλήσεις σε λεξιαναλυτικές συναρτήσεις",
"post-expand-template-inclusion-warning": "'''Προειδοποίηση:''' Το μέγεθος συμπερίληψης προτύπων είναι πολύ μεγάλο.\nΚάποια πρότυπα δεν θα συμπεριληφθούν.",
- "post-expand-template-inclusion-category": "Σελίδες όπου ο υπερβαίνεται το όριο μεγέθους συμπερίληψης προτύπων",
+ "post-expand-template-inclusion-category": "Σελίδες όπου το όριο μεγέθους συμπερίληψης προτύπων υπερβαίνεται",
"post-expand-template-argument-warning": "'''Προειδοποίηση:''' Αυτή η σελίδα περιέχει τουλάχιστον μια παράμετρο προτύπου η οποία έχει πολύ μεγάλο μέγεθος ανάπτυξης.\nΑυτές οι παράμετροι έχουν παραλειφθεί.",
"post-expand-template-argument-category": "Σελίδες που περιέχουν παραλειπόμενες παραμέτρους προτύπων",
"parser-template-loop-warning": "Εντοπίστηκε πρότυπο σε βρόχο: [[$1]]",
@@ -733,7 +748,7 @@
"history-feed-empty": "Η ζητούμενη σελίδα δεν υπάρχει.\nΜπορεί να έχει διαγραφεί από το wiki, ή να μετονομάστηκε.\nΔοκιμάστε [[Special:Search|να αναζητήσετε στο wiki]] για σχετικές νέες σελίδες.",
"rev-deleted-comment": "(σχόλιο αφαιρέθηκε)",
"rev-deleted-user": "(όνομα χρήστη αφαιρέθηκε)",
- "rev-deleted-event": "(η καταγραφή στο αρχείο αφαιρέθηκε)",
+ "rev-deleted-event": "(οι λεπτομέρειες καταγραφής αφαιρέθηκαν)",
"rev-deleted-user-contribs": "[όνομα χρήστη ή διεύθυνση ΙΡ έχουν αφαιρεθεί - η επεξεργασία έχει αποκρυφθεί από τις συνεισφορές]",
"rev-deleted-text-permission": "Αυτή η αναθεώρηση της σελίδας έχει '''διαγραφεί'''.\nΜπορεί να υπάρχουν λεπτομέρειες στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} αρχείο καταγραφής διαγραφών].",
"rev-suppressed-text-permission": "Αυτή η έκδοση της σελίδας έχει '''κατασταλεί'''.\nΛεπτομέρειες μπορούν να βρεθούν στο [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} αρχείο καταστολής].",
@@ -756,13 +771,14 @@
"revdelete-show-file-confirm": "Είστε σίγουροι ότι θέλετε να δείτε μία διεγραμμένη αναθεώρηση του αρχείου \"<nowiki>$1</nowiki>\" από τις $2 στις $3;",
"revdelete-show-file-submit": "Ναι",
"revdelete-selected-text": "{{PLURAL:$1|Επιλεγμένη έκδοση|Επιλεγμένες εκδόσεις}} της [[:$2]]:",
+ "revdelete-selected-file": "{{PLURAL:$1|Επιλεγμένη έκδοση αρχείου|Επιλεγμένες εκδόσεις αρχείου}} του [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Επιλεγμένο γεγονός αρχείου καταγραφής|Επιλεγμένα γεγονότα αρχείου καταγραφής}}:",
"revdelete-confirm": "Παρακαλούμε επιβεβαιώστε ότι σκοπεύετε να το κάνετε αυτό, ότι αντιλαμβάνεσθε τις συνέπειες, και ότι το κάνετε σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].",
"revdelete-suppress-text": "Η καταστολή μπορεί να χρησιμοποιηθεί <strong> μόνο </strong> για τις ακόλουθες περιπτώσεις:\n* Ενδεχόμενη συκοφαντική δυσφήμιση\n* Ακατάλληλες προσωπικές πληροφορίες\n*: <em>διευθύνσεις κατοικίας και αριθμοί τηλεφώνου, αριθμοί ταυτότητας, κλπ. </em>",
"revdelete-legend": "Θέστε περιορισμούς ορατότητας",
"revdelete-hide-text": "Κείμενο αναθεώρησης",
"revdelete-hide-image": "Κρύψε περιεχόμενο αρχείου",
- "revdelete-hide-name": "Κρύψε ενέργεια και στόχο",
+ "revdelete-hide-name": "Απόκρυψη στόχου και παραμέτρων",
"revdelete-hide-comment": "Σύνοψη επεξεργασίας",
"revdelete-hide-user": "Όνομα χρήστη/IP συντάκτη",
"revdelete-hide-restricted": "Απόκρυψη δεδομένων από διαχειριστές καθώς και από άλλους",
@@ -815,7 +831,6 @@
"mergehistory-same-destination": "Οι σελίδες προέλευσης και προορισμού δεν μπορούν να είναι οι ίδιες",
"mergehistory-reason": "Αιτία:",
"mergelog": "Συγχώνευση λογαριασμού",
- "pagemerge-logentry": "το [[$1]] συγχωνεύθηκε στο [[$2]] (εκδόσεις έως και τις $3)",
"revertmerge": "Αναίρεση συγχώνευσης",
"mergelogpagetext": "Παρακάτω είναι μια λίστα με τις πιο πρόσφατες συγχωνεύσεις ιστορικού μιας σελίδας σε άλλο.",
"history-title": "Ιστορικό αναθεωρήσεων της σελίδας «$1»",
@@ -842,7 +857,7 @@
"shown-title": "Εμφάνιση $1 {{PLURAL:$1|αποτελέσματος|αποτελεσμάτων}} ανά σελίδα",
"viewprevnext": "Εμφάνιση ($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "'''Υπάρχει μια σελίδα που ονομάζεται «[[:$1]]» σε αυτό το wiki.'''",
- "searchmenu-new": "'''Δημιουργήστε τη σελίδα «[[:$1]]» σε αυτό το wiki!'''",
+ "searchmenu-new": "<strong>Δημιουργήστε τη σελίδα «[[:$1]]» σε αυτό το wiki!</strong>\n{{PLURAL:$2|0=|Δείτε επίσης τη σελίδα που βρέθηκε με την αναζήτησή σας.|Δείτε επίσης τα αποτελέσματα της αναζήτησης που βρέθηκαν.}}",
"searchprofile-articles": "Σελίδες περιεχομένου",
"searchprofile-images": "Πολυμέσα",
"searchprofile-everything": "Οτιδήποτε",
@@ -855,6 +870,7 @@
"search-result-category-size": "{{PLURAL:$1|1 μέλος|$1 μέλη}} ({{PLURAL:$2|1 υποκατηγορία|$2 υποκατηγορίες}}, {{PLURAL:$3|1 αρχείο|$3 αρχεία}})",
"search-redirect": "(ανακατεύθυνση $1)",
"search-section": "(ενότητα $1)",
+ "search-category": "(κατηγορία $1)",
"search-file-match": "(ταιριάζει με το περιεχόμενο του αρχείου)",
"search-suggest": "Μήπως εννοούσατε: $1",
"search-interwiki-caption": "Αδελφικά εγχειρήματα",
@@ -865,12 +881,14 @@
"searchall": "όλα",
"showingresults": "Παρακάτω {{PLURAL:$1|εμφανίζεται μέχρι <strong>1</strong> αποτέλεσμα|εμφανίζονται μέχρι <strong>$1</strong> αποτελέσματα}} ξεκινώντας από το Νο <strong>$2</strong>.",
"showingresultsinrange": "Παρακάτω {{PLURAL:$1|εμφανίζεται μέχρι <strong>1</strong> αποτέλεσμα|εμφανίζονται μέχρι <strong>$1</strong> αποτελέσματα}} σε εύρος από το Νο <strong>$2</strong> μέχρι το Νο <strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$5|Αποτέλεσμα <strong>$1</strong> από <strong>$3</strong>|Αποτελέσματα <strong>$1 - $2</strong> από <strong>$3</strong>}}",
"search-nonefound": "Δεν υπάρχουν αποτελέσματα που να ικανοποιούν το ερώτημα.",
"powersearch-legend": "Αναλυτική αναζήτηση",
"powersearch-ns": "Αναζήτηση στις περιοχές ονομάτων:",
"powersearch-togglelabel": "Έλεγχος:",
"powersearch-toggleall": "Όλες",
"powersearch-togglenone": "Καμία",
+ "powersearch-remember": "Διατήρηση επιλογής για μελλοντικές αναζητήσεις",
"search-external": "Εξωτερική αναζήτηση",
"searchdisabled": "Η αναζήτηση για τον ιστότοπο \"{{SITENAME}}\" είναι απενεργοποιημένη. Μπορείτε να αναζητήσετε μέσω του Google εν τω μεταξύ. Σημειώστε ότι οι κατάλογοί τους για το περιεχόμενο του ιστοτόπου \"{{SITENAME}}\" μπορεί να είναι απαρχαιωμένοι.",
"search-error": "Παρουσιάστηκε σφάλμα κατά την αναζήτηση:$1",
@@ -878,7 +896,7 @@
"mypreferences": "Προτιμήσεις",
"prefs-edits": "Αριθμός επεξεργασιών:",
"prefsnologintext2": "Παρακαλώ συνδεθείτε για να αλλάξετε τις προτιμήσεις σας.",
- "prefs-skin": "Οπτική οργάνωση (skin)",
+ "prefs-skin": "Θέμα εμφάνισης",
"skin-preview": "Προεπισκόπηση",
"datedefault": "Χωρίς προτίμηση",
"prefs-labs": "Λειτουργίες των Labs",
@@ -934,7 +952,7 @@
"prefs-files": "Αρχεία",
"prefs-custom-css": "Προκαθορισμένη CSS",
"prefs-custom-js": "Προκαθορισμένη JS",
- "prefs-common-css-js": "Κοινά CSS/JS για όλα τα skins:",
+ "prefs-common-css-js": "Κοινά CSS/JavaScript για όλα τα θέματα εμφάνισης:",
"prefs-reset-intro": "Μπορείτε να χρησιμοποιήσετε αυτήν την σελίδα για να επαναρρυθμίσετε τις προτιμήσεις σας στις προεπιλογές του ιστότοπου. Αυτό δεν μπορεί να αναστρεφθεί.",
"prefs-emailconfirm-label": "Επιβεβαίωση e-mail:",
"youremail": "Διεύθυνση ηλεκτρονικού ταχυδρομείου:",
@@ -955,7 +973,7 @@
"gender-female": "Γυναίκα",
"prefs-help-gender": "Η ρύθμιση αυτή της προτίμησης είναι προαιρετική.\nΤο λογισμικό χρησιμοποιεί την τιμή αυτής της παραμέτρου για να απευθύνεται προς εσάς και για να αναφέρεται σε σας όταν απευθύνεται σε άλλους, χρησιμοποιώντας το κατάλληλο γραμματικό γένος.\nΑυτή η πληροφορία θα είναι δημόσια.",
"email": "Ηλεκτρονικό ταχυδρομείο",
- "prefs-help-realname": "* Πραγματικό όνομα (προαιρετικό): εφόσον εισάγετε το όνομά σας, αυτό θα μπορεί να χρησιμοποιηθεί για να αναγνωριστεί η δουλειά σας.",
+ "prefs-help-realname": "Το πραγματικό όνομα είναι προαιρετικό.\nΕφόσον παρέχεται, μπορεί να χρησιμοποιηθεί για να αναγνωριστεί το έργο σας.",
"prefs-help-email": "Το ηλεκτρονικό ταχυδρομείο είναι προαιρετικό, ωστόσο δίνει τη δυνατότητα να σας αποσταλεί ένας νέος κωδικός στην περίπτωση που ξεχάσετε τον κωδικό σας.",
"prefs-help-email-others": "Μπορείτε επίσης να επιλέξετε να αφήσετε τους άλλους να επικοινωνήσουν μαζί σας μέσω της σελίδας χρήστη ή συζήτησης χωρίς να χρειάζεται να αποκαλύψετε την ταυτότητά σας.",
"prefs-help-email-required": "Απαιτείται διεύθυνση ηλεκτρονικού ταχυδρομείου.",
@@ -976,6 +994,7 @@
"prefs-tokenwatchlist": "Κλειδί",
"prefs-diffs": "Διαφορές",
"prefs-help-prefershttps": "Αυτή η προτίμηση θα τεθεί σε ισχύ στην επόμενή σας σύνδεση.",
+ "prefswarning-warning": "Έχετε κάνει αλλαγές στις προτιμήσεις σας που δεν έχουν αποθηκευτεί ακόμα.\nΕάν αφήσετε αυτή τη σελίδα χωρίς να κάνετε κλικ στο \"$1\" οι προτιμήσεις σας δεν θα ενημερωθούν.",
"prefs-tabs-navigation-hint": "Συμβουλή: Μπορείτε να χρησιμοποιήσετε τα πλήκτρα διευθύνσεων αριστερά και δεξιά για να πλοηγηθείτε μεταξύ των καρτελών στη λίστα καρτελών.",
"email-address-validity-valid": "Η διεύθυνση ηλεκτρονικού ταχυδρομείου φαίνεται έγκυρη",
"email-address-validity-invalid": "Εισάγετε μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου",
@@ -1030,7 +1049,7 @@
"right-move-categorypages": "Μετακίνηση σελίδων κατηγοριών",
"right-movefile": "Μετακίνηση αρχείων",
"right-suppressredirect": "Μη δημιουργία ανακατεύθυνσης από το παλιό όνομα κατά τη μετακίνηση μιας σελίδας",
- "right-upload": "Επιφόρτωση αρχείων",
+ "right-upload": "Ανέβασμα αρχείων",
"right-reupload": "Αντικατάσταση ενός ήδη υπάρχοντος αρχείου",
"right-reupload-own": "Αντικατάσταση ενός ήδη υπάρχοντος αρχείου που έχει ανέβει από κάποιον",
"right-reupload-shared": "Τοπική υπερκάλυψη αρχείων στο κοινό αποθηκευτήριο πολυμέσων",
@@ -1049,7 +1068,7 @@
"right-deletedtext": "Εμφάνιση διεγραμμένου κειμένου και αλλαγών ανάμεσα στις διεγραμμένες εκδόσεις",
"right-browsearchive": "Αναζήτηση στις διαγραμμένες σελίδες",
"right-undelete": "Ανάκληση διαγραφής μίας σελίδας",
- "right-suppressrevision": "Επιθεώρηση και αποκατάσταση αναθεωρήσεων κρυμμένων από τους διαχειριστές",
+ "right-suppressrevision": "Προβολή, απόκρυψη και επανεμφάνιση συγκεκριμένων αναθεωρήσεων σελίδων από κάθε χρήστη",
"right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμένων από κάθε χρήστη",
"right-suppressionlog": "Προβολή ιδιωτικών καταγραφών",
"right-block": "Φραγή άλλων χρηστών από την επεξεργασία",
@@ -1068,6 +1087,7 @@
"right-editmyusercss": "Επεξεργασία των ιδιωτικών αρχείων CSS χρήστη",
"right-editmyuserjs": "Επεξεργασία των ιδιωτικών αρχείων JavaScript χρήστη",
"right-viewmywatchlist": "Προβολή της δικής σας λίστα παρακολούθησης",
+ "right-editmywatchlist": "Επεξεργασία της δικής σας λίστας παρακολούθησής. Σημειώστε ότι κάποιες ενέργειες θα εξακολουθούν να προσθέτουν σελίδες, ακόμα και χωρίς αυτό το δικαίωμα.",
"right-viewmyprivateinfo": "Δείτε τα προσωπικά σας δεδομένα (π.χ. διεύθυνση ηλεκτρονικού ταχυδρομείου, πραγματικό όνομα)",
"right-editmyprivateinfo": "Επεξεργαστείτε τα προσωπικά σας δεδομένα (π.χ. διεύθυνση ηλεκτρονικού ταχυδρομείου, πραγματικό όνομα)",
"right-editmyoptions": "Επεξεργασία των προτιμήσεών σας",
@@ -1096,6 +1116,7 @@
"action-createpage": "να δημιουργήσετε σελίδες",
"action-createtalk": "να δημιουργήσετε σελίδες συζήτησης",
"action-createaccount": "να δημιουργήσετε αυτό το λογαριασμό χρήστη",
+ "action-history": "προβολή ιστορικού αυτή της σελίδας",
"action-minoredit": "να σημειώσετε αυτή την επεξεργασία σαν «μικρής κλίμακας»",
"action-move": "να μετακινήσετε αυτή τη σελίδα",
"action-move-subpages": "να μετακινήσετε αυτή τη σελίδα, καθώς και τις υποσελίδες της",
@@ -1146,7 +1167,7 @@
"recentchanges-label-plusminus": "Μεταβολή του μεγέθους της σελίδας σε bytes",
"recentchanges-legend-heading": "'''Υπόμνημα:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείτε [[Special:NewPages|κατάλογος νέων σελίδων]])",
- "rcnotefrom": "Παρακάτω είναι οι αλλαγές από τις <strong>$2</strong> (εμφανίζονται μέχρι <strong>$1</strong> ).",
+ "rcnotefrom": "Παρακάτω {{PLURAL:$5|είναι η αλλαγή|είναι οι αλλαγές}} από <strong>$3, $4</strong> (έως <strong>$1</strong> που εμφανίζεται).",
"rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από τις $3 στις $2",
"rcshowhideminor": "$1 μικροεπεξεργασιών",
"rcshowhideminor-show": "Εμφάνιση",
@@ -1200,9 +1221,9 @@
"uploaderror": "Σφάλμα στο ανέβασμα αρχείου",
"upload-recreate-warning": "'''Προειδοποίηση: Ένα αρχείο με αυτό το όνομα έχει διαγραφεί ή μετακινηθεί.'''\n\nΤο αρχείο διαγραφών και μετακινήσεων για αυτή τη σελίδα παρέχεται εδώ για διευκόλυνση:",
"uploadtext": "Μπορείτε να χρησιμοποιήσετε την παρακάτω φόρμα για να επιφορτώσετε αρχεία. Για να δείτε ήδη επιφορτωμένα αρχεία, πηγαίνετε στη [[Special:FileList|λίστα επιφορτωμένων αρχείων]] ή στο [[Special:Log/upload|ιστορικό επιφορτώσεων]]. Οι διαγραφές έχουν καταγραφεί στη σελίδα [[Special:Log/delete|αρχείο διαγραφών]].\n\nΓια να συμπεριληφθεί μια εικόνα σε μια σελίδα, χρησιμοποιήστε συνδέσμους της μορφής:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' (χρήση της πλήρους εκδοχής του αρχείου)\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' (χρήση μίας εκδοχής 200 pixel σε πλάτος σε ένα κουτάκι στο αριστερό περιθώριο με περιγραφή 'alt text')\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' (άμεση σύνδεση με το αρχείο χωρίς εμφάνιση του ίδιου του αρχείου)",
- "upload-permitted": "Επιτρεπτοί τύποι αρχείων: $1.",
- "upload-preferred": "Τύποι αρχείων που προτιμούνται: $1.",
- "upload-prohibited": "Απαγορευμένοι τύποι αρχείου: $1.",
+ "upload-permitted": "{{PLURAL:$2|Επιτρεπτός τύπος αρχείων|Επιτρεπτοί τύποι αρχείων}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Τύπος αρχείων που προτιμάται|Τύποι αρχείων που προτιμούνται}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Απαγορευμένος τύπος αρχείων|Απαγορευμένοι τύποι αρχείων}}: $1.",
"uploadlogpage": "Αρχείο καταγραφών ανεβάσματος αρχείων",
"uploadlogpagetext": "Παρακάτω είναι ο κατάλογος με τις πιο πρόσφατες αποθηκεύσεις αρχείων. Επισκεφθείτε τον [[Special:NewFiles|πίνακα νέων αρχείων]] για μία πιο οπτική επισκόπηση.",
"filename": "Όνομα αρχείου",
@@ -1255,6 +1276,7 @@
"uploaddisabledtext": "Το ανέβασμα αρχείων είναι απενεργοποιημένο.",
"php-uploaddisabledtext": "Οι επιφορτώσεις αρχείων ειναι απενεργοποιημένες στην PHP. Παρακαλούμε, ελέγξτε την ρύθμιση file_uploads.",
"uploadscripted": "Αυτό το αρχείο περιέχει κώδικα HTML ή script που μπορεί να παρερμηνευθεί από μερικούς browser.",
+ "uploadscriptednamespace": "Αυτό το αρχείο SVG περιέχει μη αποδεκτό ονοματοχώρο «$1».",
"uploadinvalidxml": "Δεν ήταν δυνατή η ανάλυση του κώδικα XML στο αρχείο.",
"uploadvirus": "Το αρχείο περιέχει ιό! Λεπτομέρειες: $1",
"uploadjava": "Το αρχείο είναι αρχείο ZIP, το οποίο περιέχει ένα αρχείο .class της γλώσσας Java.\nΔεν επιτρέπεται η αποστολή αρχείων Java, επειδή μπορούν να προκαλέσουν παράκαμψη των περιορισμών ασφαλείας του συστήματος.",
@@ -1350,6 +1372,7 @@
"license": "Αδειοδότηση:",
"license-header": "Αδειοδότηση",
"nolicense": "Καμία επιλεγμένη",
+ "licenses-edit": "Επιλογές επεξεργασίας άδειας",
"license-nopreview": "(Μη διαθέσιμη προεπισκόπηση)",
"upload_source_url": "(το επιλεγμένο σας αρχείο από μια έγκυρη, δημόσια προσβάσιμη διεύθυνση URL)",
"upload_source_file": "(το επιλεγμένο αρχείο από τον υπολογιστή σας)",
@@ -1400,7 +1423,7 @@
"filepage-nofile-link": "Δεν υπάρχει τέτοιο αρχείο, αλλἀ μπορείτε να [$1 το επιφορτώσετε].",
"uploadnewversion-linktext": "Φορτώστε μια νέα έκδοση αυτού του αρχείου",
"shared-repo-from": "από το $1",
- "shared-repo": "ένα κοινό εναποθετήριο",
+ "shared-repo": "κοινό εναποθετήριο",
"shared-repo-name-wikimediacommons": "Wikimedia Commons",
"upload-disallowed-here": "Δεν μπορείτε να αντικαταστήσετε αυτό το αρχείο.",
"filerevert": "Επαναφορά $1",
@@ -1428,7 +1451,7 @@
"filedelete-maintenance": "Η διαγραφή κι η επαναφορά αρχείων είναι προσωρινά αδύνατη λόγω συντήρησης.",
"filedelete-maintenance-title": "Αδύνατη η διαγραφή αρχείου",
"mimesearch": "Αναζήτηση MIME",
- "mimesearch-summary": "Αυτή η σελίδα ενεργοποιεί το φιλτράρισμα αρχείων σύμφωνα με τον τύπο MIME τους. Είσοδος: contenttype/subtype, π.χ. <code>image/jpeg</code>.",
+ "mimesearch-summary": "Αυτή η σελίδα ενεργοποιεί το φιλτράρισμα αρχείων σύμφωνα με τον τύπο MIME τους. Είσοδος: contenttype/subtype ή contenttype/*, π.χ. <code>image/jpeg</code>.",
"mimetype": "Τύπος MIME:",
"download": "λήψη",
"unwatchedpages": "Μη παρακολουθούμενες σελίδες",
@@ -1449,7 +1472,6 @@
"statistics": "Στατιστικά",
"statistics-header-pages": "Στατιστικά σελίδων",
"statistics-header-edits": "Στατιστικά επεξεργασιών",
- "statistics-header-views": "Προβολή στατιστικών",
"statistics-header-users": "Στατιστικά χρηστών",
"statistics-header-hooks": "Άλλα στατιστικά",
"statistics-articles": "Σελίδες περιεχομένου",
@@ -1458,13 +1480,9 @@
"statistics-files": "Αρχεία που έχουν επιφορτωθεί",
"statistics-edits": "Επεξεργασίες σελίδων από τη δημιουργία του εγχειρήματος {{SITENAME}}",
"statistics-edits-average": "Μέσος όρος επεξεργασιών ανά σελίδα",
- "statistics-views-total": "Συνολικές εμφανίσεις",
- "statistics-views-total-desc": "Επισκέψεις σε μη υπάρχουσες σελίδες και ειδικές σελίδες δεν συμπεριλαμβάνονται",
- "statistics-views-peredit": "Εμφανίσεις ανά επεξεργασία",
"statistics-users": "Εγγεγραμμένοι [[Special:ListUsers|χρήστες]]",
"statistics-users-active": "Ενεργοί χρήστες",
"statistics-users-active-desc": "Χρήστες που έχουν κάνει κάποια επεξεργασία μέσα σε {{PLURAL:$1|μέρα|$1 μέρες}}",
- "statistics-mostpopular": "Οι πιο δημοφιλείς σελίδες",
"pageswithprop": "Σελίδες με ιδιότητα σελίδας",
"pageswithprop-legend": "Σελίδες με ιδιότητα σελίδας",
"pageswithprop-text": "Αυτή η σελίδα ταξινομεί σελίδες που χρησιμοποιούν μια συγκεκριμένη ιδιότητα σελίδας.",
@@ -1503,7 +1521,6 @@
"uncategorizedtemplates": "Μη κατηγοριοποιημένα πρότυπα",
"unusedcategories": "Κενές κατηγορίες",
"unusedimages": "Αχρησιμοποίητες εικόνες",
- "popularpages": "Δημοφιλείς σελίδες",
"wantedcategories": "Επιθυμητές κατηγορίες",
"wantedpages": "Ζητούμενες σελίδες",
"wantedpages-badtitle": "Μη εγκυρός τίτλος στο σύνολο αποτελέσματος: $1",
@@ -1513,7 +1530,7 @@
"wantedtemplates": "Ζητούμενα πρότυπα",
"mostlinked": "Σελίδες με τους περισσότερους συνδέσμους προς αυτές",
"mostlinkedcategories": "Περισσότερο χρησιμοποιούμενες κατηγορίες",
- "mostlinkedtemplates": "Περισσότερο χρησιμοποιούμενα πρότυπα",
+ "mostlinkedtemplates": "Σελίδες που έχουν ενσωματωθεί περισσότερο από όλες τις άλλες",
"mostcategories": "Σελίδες με τις περισσότερες κατηγορίες",
"mostimages": "Περισσότερο χρησιμοποιούμενα αρχεία",
"mostinterwikis": "Σελίδες με τους περισσότερους διαγλωσσικούς συνδέσμους",
@@ -1561,10 +1578,12 @@
"pager-older-n": "{{PLURAL:$1|1 παλαιότερο|$1 παλαιότερα}}",
"suppress": "Παρόραμα",
"querypage-disabled": "Αυτή η ειδική σελίδα είναι απενεργοποιημένη για λόγους απόδοσης.",
+ "apihelp": "Βοήθεια API",
+ "apihelp-no-such-module": "Το Module \"$1\" δεν βρέθηκε.",
"booksources": "Πηγές βιβλίων",
"booksources-search-legend": "Αναζήτηση για πηγές βιβλίων",
"booksources-isbn": "ISBN:",
- "booksources-go": "Μετάβαση",
+ "booksources-search": "Αναζήτηση",
"booksources-text": "Παρακάτω είναι μια λίστα συνδέσμων σε άλλους ιστοτόπους οι οποίοι πωλούν νέα και μεταχειρισμένα βιβλία, και μπορεί επίσης να έχουν περισσότερες πληροφορίες για βιβλία για τα οποία ψάχνετε:",
"booksources-invalid-isbn": "Το δοσμένο ISBN δεν φαίνεται να είναι έγκυρο· ελέγξτε για λάθη κατά την αντιγραφή από την αρχική πηγή.",
"specialloguserlabel": "",
@@ -1634,10 +1653,16 @@
"listgrouprights-namespaceprotection-header": "Περιορισμοί ονοματοχώρων",
"listgrouprights-namespaceprotection-namespace": "Ονοματοχώρος",
"listgrouprights-namespaceprotection-restrictedto": "Δικαίωμα(τα) που επιτρέπει(ουν) σε χρήστη να επεξεργαστεί",
- "trackingcategories": "Παρακολούθηση κατηγοριών",
+ "trackingcategories": "Κατηγορίες παρακολούθησης",
+ "trackingcategories-summary": "Αυτή η σελίδα εμφανίζει τις κατηγορίες παρακολούθησης το περιεχόμενο των οποίων συμπληρώνεται αυτόματα από το λογισμικό MediaWiki. Τα ονόματά τους μπορεί να αλλαχθούν με την αλλαγή των σχετικών μηνυμάτων συστήματος στον ονοματοχώρο {{ns:8}}.",
+ "trackingcategories-msg": "Κατηγορία παρακολούθησης",
"trackingcategories-name": "Όνομα μηνύματος",
- "trackingcategories-desc": "Κριτήρια συμπερίληψης κατηγορίας",
+ "trackingcategories-desc": "Κριτήρια συμπερίληψης στην κατηγορία",
+ "noindex-category-desc": "Η σελίδα δεν καταλογογραφείται από ρομπότ, επειδή έχει τη μαγική λέξη <code><nowiki>__NOINDEX__</nowiki></code> σε αυτή και είναι σε ένα χώρο ονομάτων όπου αυτή η ετικέτα επιτρέπεται.",
+ "index-category-desc": "Η σελίδα περιέχει στον κώδικά της ένα <code><nowiki>__INDEX__</nowiki></code> (και βρίσκεται σε έναν ονοματοχώρο όπου αυτή η σήμανση επιτρέπεται) και ως εκ τούτου καταλογογραφείται από ρομπότ, ενώ κανονικά δεν θα καταλογογραφείτο.",
"post-expand-template-inclusion-category-desc": "Το μέγεθος της σελίδας είναι μεγαλύτερο από <code>$wgMaxArticleSize</code> μετά την επέκταση όλων των προτύπων, έτσι ώστε ορισμένα πρότυπα δεν έχουν αναπτυχθεί.",
+ "post-expand-template-argument-category-desc": "Η σελίδα είναι μεγαλύτερη από <code>$wgMaxArticleSize</code> μετά την επέκταση της μεταβλητής ενός προτύπου (κάτι σε τρίπλές αγκύλες, όπως <code>{{{Foo}}}</code>).",
+ "broken-file-category-desc": "Η σελίδα περιέχει ένα σπασμένο σύνδεσμο αρχείου (σύνδεσμο για να ενσωμάτωση ενός αρχείου, ενώ το αρχείο δεν υπάρχει).",
"hidden-category-category-desc": "Η κατηγορία περιέχει <code><nowiki>__HIDDENCAT__</nowiki></code> στο περιεχόμενο της σελίδας της, που την εμποδίζει εκ προεπιλογής να εμφανίζεται στο πλαίσιο συνδέσμων κατηγοριών των σελίδων.",
"trackingcategories-nodesc": "Καμία διαθέσιμη περιγραφή.",
"trackingcategories-disabled": "Η κατηγορία είναι απενεργοποιημένη",
@@ -1668,7 +1693,7 @@
"emailccsubject": "Αντίγραφο του μηνυματός σας στο $1: $2",
"emailsent": "Το μήνυμα έχει σταλεί",
"emailsenttext": "Το μήνυμά σας έχει σταλεί.",
- "emailuserfooter": "Αυτό το ηλεκτρονικό μήνυμα στάλθηκε από τον/την \"$1\" στον τον/την \"$2\" μέσω της λειτουργίας \"αποστολής μηνυμάτων\" στο {{SITENAME}}.",
+ "emailuserfooter": "Αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου στάλθηκε από {{GENDER:$1|τον χρήστη|την χρήστρια}} $1 σ{{GENDER:$2|τον χρήστη|την χρήστρια}} $2 μέσω της λειτουργίας «αποστολής μηνύματος ηλεκτρονικού ταχυδρομείου σε χρήστη» στο {{SITENAME}}.",
"usermessage-summary": "Φεύγετε από τις ειδοποιήσεις συστήματος.",
"usermessage-editor": "Μηνύματα συστήματος",
"usermessage-template": "MediaWiki:UserMessage",
@@ -1694,7 +1719,7 @@
"wlheader-enotif": "Η ειδοποίηση ηλεκτρονικού ταχυδρομείου ενεργοποιήθηκε.",
"wlheader-showupdated": "Σελίδες που έχουν υποστεί αλλαγές από την τελευταία φορά που τις επισκεφθήκατε εμφανίζονται με '''έντονους χαρακτήρες'''.",
"wlnote": "Παρακάτω είναι {{PLURAL:$1|η πιο πρόσφατη αλλαγή|οι <strong>$1</strong> πιο πρόσφατες αλλαγές}} κατά τη διάρκεια {{PLURAL:$2|της τελευταίας ώρας|των <strong>$2</strong> τελευταίων ωρών}} ως προς τις $3 στις $4.",
- "wlshowlast": "Εμφάνιση των τελευταίων $1 ωρών $2 ημερών $3",
+ "wlshowlast": "Εμφάνιση των τελευταίων $1 ωρών $2 ημερών",
"watchlist-options": "Επιλογές λίστας παρακολούθησης",
"watching": "Παρακολούθηση...",
"unwatching": "Μη παρακολούθηση...",
@@ -1721,14 +1746,14 @@
"confirm": "Επιβεβαίωση",
"excontent": "το περιεχόμενο ήταν: '$1'",
"excontentauthor": "το περιεχόμενο ήταν: '$1' (και οι μοναδικές συνεισφορές ήταν του '$2')",
- "exbeforeblank": "το περιεχόμενο πριν απο την εκκαθάριση ήταν: '$1'",
+ "exbeforeblank": "το περιεχόμενο πριν τη διαγραφή ήταν: «$1»",
"delete-confirm": "Διαγραφή του \"$1\"",
"delete-legend": "Διαγραφή",
"historywarning": "<strong>Προσοχή:</strong> Η σελίδα που πρόκειται να διαγράψετε έχει ιστορικό με περίπου $1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}:",
"confirmdeletetext": "Πρόκειται να διαγράψετε οριστικά από τη βάση δεδομένων μια σελίδα (ή μια εικόνα) μαζί με το ιστορικό της. Παρακαλούμε επιβεβαιώστε ότι θέλετε πραγματικά να το κάνετε, ότι αντιλαμβάνεσθε τις συνέπειες και ότι το κάνετε σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].",
"actioncomplete": "Η ενέργεια ολοκληρώθηκε.",
"actionfailed": "Η ενέργεια απέτυχε",
- "deletedtext": "Η \"$1\" έχει διαγραφεί.\nΓια το ιστορικό των πρόσφατων διαγραφών ανατρέξτε στο σύνδεσμο $2",
+ "deletedtext": "Η «$1» έχει διαγραφεί.\nΒλ. $2 για ιστορικό πρόσφατων διαγραφών.",
"dellogpage": "Αρχείο καταγραφών διαγραφών",
"dellogpagetext": "Λίστα των πιο πρόσφατων διαγραφών",
"deletionlog": "Καταγραφές διαγραφών",
@@ -1741,8 +1766,8 @@
"delete-toobig": "Αυτή η σελίδα έχει μεγάλο ιστορικό τροποποιήσεων, πάνω από $1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}}.\nΗ διαγραφή τέτοιων σελίδων έχει περιοριστεί για την αποφυγή τυχαίας αναστάτωσης του {{SITENAME}}.",
"delete-warning-toobig": "Αυτή η σελίδα έχει μεγάλο ιστορικό τροποποιήσεων, πάνω από $1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}}.\nΗ διαγραφή της μπορεί να αναστατώσει τη λειτουργία της βάσης δεδομένων του {{SITENAME}}. Συνιστούμε μεγάλη προσοχή.",
"deleteprotected": "Δεν μπορείτε να διαγράψετε αυτή τη σελίδα επειδή είναι προστατευόμενη.",
+ "deleting-backlinks-warning": "\"'Προσοχή:\"' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Άλλες σελίδες]] συνδέουν ή ενσωματώνουν τη σελίδα που πρόκειται να διαγράψετε.",
"rollback": "Επαναφορά επεξεργασιών",
- "rollback_short": "Επαναφορά",
"rollbacklink": "αναστροφή",
"rollbacklinkcount": "Επαναφορά $1 {{PLURAL:$1|επεξεργασίας|επεξεργασιών}}",
"rollbacklinkcount-morethan": "επαναφορά περισσότερων από $1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}",
@@ -1792,6 +1817,7 @@
"protect-othertime": "Άλλο χρονικό διάστημα:",
"protect-othertime-op": "άλλος χρόνος",
"protect-existing-expiry": "Υπάρχουσα λήξη προθεσμίας: $3, $2",
+ "protect-existing-expiry-infinity": "Τρέχον χρόνος λήξης: αόριστος",
"protect-otherreason": "Άλλος/πρόσθετος λόγος:",
"protect-otherreason-op": "Άλλος λόγος",
"protect-dropdown": "*Συνήθεις λόγοι προστασίας\n** Υπερβολικός βανδαλισμός\n** Υπερβολικό spamming\n** Αντιπαραγωγική μάχη επεξεργασιών\n** Σελίδα μεγάλης κίνησης",
@@ -1805,7 +1831,7 @@
"restriction-edit": "Επεξεργασία",
"restriction-move": "Μετακίνηση",
"restriction-create": "Δημιουργήστε",
- "restriction-upload": "Επιφόρτωση",
+ "restriction-upload": "Ανέβασμα αρχείου",
"restriction-level-sysop": "πλήρως προστατευμένη",
"restriction-level-autoconfirmed": "ημιπροστατευμένη",
"restriction-level-all": "οποιοδήποτε επίπεδο",
@@ -2117,8 +2143,8 @@
"thumbnail_gd-library": "Ατελής ενεργοποίηση της βιβλιοθήκης GD: αγνοούμενη λειτουργία $1",
"thumbnail_image-missing": "Το αρχείο φαίνεται να λείπει: $1",
"import": "Εισαγωγή σελίδων",
- "importinterwiki": "Εισαγωγή από άλλο Wiki",
- "import-interwiki-text": "Επιλέξτε ένα wiki και τίτλο σελίδας για την εισαγωγή.\nΟι ημερομηνίες των αναθεωρήσεων και τα ονόματα των συντακτών θα διατηρηθούν.\nΌλες οι ενέργειες εισαγωγής μεταξύ wiki καταγράφονται στο [[Special:Log/import|αρχείο καταγραφής εισαγωγών]].",
+ "importinterwiki": "Εισαγωγή από άλλο wiki",
+ "import-interwiki-text": "Επιλέξτε ένα wiki και τίτλο σελίδας για την εισαγωγή.\nΟι ημερομηνίες των αναθεωρήσεων και τα ονόματα των συντακτών θα διατηρηθούν.\nΌλες οι ενέργειες εισαγωγής από άλλα wiki καταγράφονται στο [[Special:Log/import|αρχείο καταγραφής εισαγωγών]].",
"import-interwiki-sourcewiki": "Πηγαίο wiki:",
"import-interwiki-sourcepage": "Πηγαία σελίδα:",
"import-interwiki-history": "Αντιγραφή όλων των εκδόσεων του ιστορικού για αυτή τη σελίδα",
@@ -2138,16 +2164,16 @@
"importcantopen": "Το αρχείο εισαγωγής δεν ήταν δυνατόν να ανοιχθεί",
"importbadinterwiki": "Εσφαλμένος διαγλωσσικός σύνδεσμος",
"importsuccess": "Η εισαγωγή πέτυχε!",
- "importnosources": "Δεν έχουν καθοριστεί πηγές για την εισαγωγή από άλλο Wiki και η απευθείας φόρτωση στο ιστορικό έχει απενεργοποιηθεί.",
+ "importnosources": "Δεν έχουν καθοριστεί wiki από τα οποία μπορεί να γίνει εισαγωγή και η απευθείας φόρτωση στο ιστορικό έχει απενεργοποιηθεί.",
"importnofile": "Δεν επιφορτώθηκε κανένα αρχείο εισαγωγής.",
- "importuploaderrorsize": "Η επιφόρτωση του εισαγόμενου αρχείου απέτυχε. Το μέγεθος του αρχείου ξεπερνά το επιτρεπόμενο όριο.",
- "importuploaderrorpartial": "Η επιφόρτωση του εισαγόμενου αρχείου απέτυχε. Το αρχείο επιφορτώθηκε μόνο εν μέρει.",
- "importuploaderrortemp": "Η επιφόρτωση του εισαγόμενου αρχείου απέτυχε. Λείπει ένας προσωρινός φάκελος.",
+ "importuploaderrorsize": "Το ανέβασμα του αρχείου εισαγωγής απέτυχε. Το μέγεθος του αρχείου ξεπερνά το επιτρεπόμενο όριο.",
+ "importuploaderrorpartial": "Το ανέβασμα του αρχείου εισαγωγής απέτυχε. Το αρχείο ανέβηκε μόνο εν μέρει.",
+ "importuploaderrortemp": "Το ανέβασμα του αρχείου εισαγωγής απέτυχε. Λείπει ένας προσωρινός φάκελος.",
"import-parse-failure": "Σφάλμα παραμέτρου XML κατά την εισαγωγή",
"import-noarticle": "Καμία σελίδα για εισαγωγή!",
"import-nonewrevisions": "Καμία αναθεώρηση δεν εισήχθει (όλες είτε ήταν ήδη παρούσες, ή παραλήφθηκαν λόγω σφαλμάτων).",
"xml-error-string": "$1 στη γραμμή $2, στήλη $3 (byte $4): $5",
- "import-upload": "Επιφόρτωση δεδομένων XML",
+ "import-upload": "Ανέβασμα δεδομένων XML",
"import-token-mismatch": "Απώλεια των στοιχείων της συνόδου. Παρακαλούμε προσπαθήστε ξανά.",
"import-invalid-interwiki": "Δεν είναι δυνατή η εισαγωγή από το καθορισμένο wiki.",
"import-error-edit": "Η σελίδα «$1» δεν εισήχθη επειδή δεν σας επιτρέπεται να την επεξεργαστείτε.",
@@ -2159,18 +2185,14 @@
"import-rootpage-invalid": "Η δεδομένη ριζική σελίδα είναι μη έγκυρος τίτλος",
"importlogpage": "Αρχείο καταγραφής εισαγωγών",
"importlogpagetext": "Διαχειριστικές εισαγωγές σελίδων με ιστορικό επεξεργασίας από άλλα wiki.",
- "import-logentry-upload": "εισάχθηκε η σελίδα [[$1]] με επιφόρτωση αρχείου",
"import-logentry-upload-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}}",
- "import-logentry-interwiki": "η σελίδα $1 εισάχθηκε μεταξύ wiki",
"import-logentry-interwiki-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}} από $2",
"javascripttest": "Δοκιμή JavaScript",
- "javascripttest-title": "Εκτελούνται $1 δοκιμές",
"javascripttest-pagetext-noframework": "Αυτή η σελίδα είναι δεσμευμένη για την εκτέλεση δοκιμών σε JavaScript.",
"javascripttest-pagetext-unknownframework": "Άγνωστο πλαίσιο δοκιμών \" $1 \".",
"javascripttest-pagetext-frameworks": "Παρακαλώ επιλέξτε ένα από τα ακόλουθα πλαίσια δοκιμών: $1",
"javascripttest-pagetext-skins": "Επιλέξτε ένα skin για να εκτελέσετε δοκιμές με αυτό:",
"javascripttest-qunit-intro": "Ανατρέξτε στην ενότητα [ $1 τεκμηρίωση δοκιμών] στο mediawiki.org.",
- "javascripttest-qunit-heading": "Σουίτα δοκιμών JavaScript QUnit του MediaWiki",
"tooltip-pt-userpage": "Η σελίδα χρήστη σας",
"tooltip-pt-anonuserpage": "Η σελίδα χρήστη στον οποίο αντιστοιχεί η διεύθυνση IP που έχετε",
"tooltip-pt-mytalk": "Η σελίδα συζήτησής σας",
@@ -2180,6 +2202,7 @@
"tooltip-pt-mycontris": "Κατάλογος των συνεισφορών σας",
"tooltip-pt-login": "Σας ενθαρρύνουμε να συνδεθείτε&middot; ωστόσο δεν είναι υποχρεωτικό",
"tooltip-pt-logout": "Έξοδος",
+ "tooltip-pt-createaccount": "Σας ενθαρρύνουμε να δημιουργήσετε ένα λογαριασμό και να συνδεθείτε· ωστόσο, δεν είναι υποχρεωτικό",
"tooltip-ca-talk": "Συζήτηση για τη σελίδα περιεχομένου",
"tooltip-ca-edit": "Μπορείτε να επεξεργαστείτε αυτή τη σελίδα. Παρακαλούμε χρησιμοποιήστε το κουμπί προεπισκόπησης πριν την αποθήκευση.",
"tooltip-ca-addsection": "Ξεκίνημα νέας ενότητας",
@@ -2209,6 +2232,7 @@
"tooltip-feed-atom": "Ροή Atom για αυτήν τη σελίδα",
"tooltip-t-contributions": "Λίστα με τις συνεισφορές αυτού του χρήστη",
"tooltip-t-emailuser": "Αποστολή μηνύματος ηλεκτρονικής αλληλογραφίας σε αυτόν το χρήστη",
+ "tooltip-t-info": "Περισσότερες πληροφορίες σχετικά με αυτήν τη σελίδα",
"tooltip-t-upload": "Ανέβασμα αρχείων",
"tooltip-t-specialpages": "Η λίστα με όλες τις ειδικές σελίδες",
"tooltip-t-print": "Εκτυπώσιμη έκδοση αυτής της σελίδας",
@@ -2273,7 +2297,6 @@
"pageinfo-robot-policy": "Ευρετηρίαση από ρομπότ",
"pageinfo-robot-index": "Επιτρεπτό",
"pageinfo-robot-noindex": "Μη επιτρεπτό",
- "pageinfo-views": "Αριθμός προβολών",
"pageinfo-watchers": "Αριθμός παρατηρητών σελίδας",
"pageinfo-few-watchers": "Λιγότεροι από $1 {{PLURAL:$1| ακόλουθος|ακόλουθοι}}",
"pageinfo-redirects-name": "Αριθμός ανακατευθύνσεων σε αυτήν τη σελίδα",
@@ -2723,7 +2746,6 @@
"exif-urgency-low": "Χαμηλή ($1)",
"exif-urgency-high": "Υψηλή ($1)",
"exif-urgency-other": "Προτεραιότητα που ορίστηκε από το χρήστη ($1)",
- "watchlistall2": "όλες",
"namespacesall": "όλοι",
"monthsall": "όλα",
"confirmemail": "Επιβεβαίωση διεύθυνσης e-mail",
@@ -2797,21 +2819,23 @@
"watchlistedit-raw-done": "Η λίστα παρακολούθησής σας ενημερώθηκε.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 σελίδα|$1 σελίδες}} προστέθηκαν:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 σελίδα|$1 σελίδες}} αφαιρέθηκαν:",
+ "watchlistedit-clear-title": "Εκκαθαρισμένη λίστα παρακολούθησης",
+ "watchlistedit-clear-legend": "Εκκαθάριση λίστας παρακολούθησης",
"watchlistedit-clear-explain": "Όλοι οι τίτλοι θα αφαιρεθούν από τη λίστα παρακολούθησής σας",
"watchlistedit-clear-titles": "Τίτλοι:",
"watchlistedit-clear-submit": "Καθαρίστε τη λίστα παρακολούθησης (αυτό είναι μόνιμο!)",
"watchlistedit-clear-done": "Η λίστα παρακολούθησής σας έχει καθαριστεί.",
"watchlistedit-clear-removed": "{{PLURAL:$1|1 τίτλος αφαιρέθηκε|$1 τίτλοι αφαιρέθηκαν}}:",
"watchlistedit-too-many": "Υπάρχουν υπερβολικά πολλές σελίδες και δεν μπορούν να εμφανιστούν εδώ.",
+ "watchlisttools-clear": "Εκκαθάριση της λίστας παρακολούθησης",
"watchlisttools-view": "Προβολή σχετικών αλλαγών",
"watchlisttools-edit": "Προβολή και επεξεργασία λίστας παρακολούθησης",
"watchlisttools-raw": "Επεξεργασία πρωτογενούς λίστας παρακολούθησης",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|συζήτηση]])",
- "unknown_extension_tag": "Άγνωστη ετικέτα επέκτασης \"$1\"",
"duplicate-defaultsort": "'''Προειδοποίηση:''' Το προεπιλεγμένο κλειδί ταξινόμησης «$2» υπερισχύει του προηγούμενου προεπιλεγμένου κλειδιού «$1».",
"version": "Έκδοση",
"version-extensions": "Εγκαταστημένες επεκτάσεις",
- "version-skins": "Προσόψεις",
+ "version-skins": "Εγκατεστημένα θέματα εμφάνισης",
"version-specialpages": "Ειδικές σελίδες",
"version-parserhooks": "Άγκιστρα του συντακτικού αναλυτή",
"version-variables": "Παράμετροι",
@@ -2823,16 +2847,20 @@
"version-parser-function-hooks": "Άγκιστρα συναρτήσεων του συντακτικού αναλυτή",
"version-hook-name": "Όνομα άγκιστρου",
"version-hook-subscribedby": "Υπογεγραμμένο από",
- "version-version": "(Έκδοση $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[χωρίς όνομα]",
"version-license": "Άδεια MediaWiki",
"version-ext-license": "Άδεια χρήσης",
"version-ext-colheader-name": "Επέκταση",
+ "version-skin-colheader-name": "Θέμα εμφάνισης",
"version-ext-colheader-version": "Έκδοση",
"version-ext-colheader-license": "Άδεια χρήσης",
"version-ext-colheader-description": "Περιγραφή",
"version-ext-colheader-credits": "Δημιουργοί",
"version-license-title": "Άδεια χρήσης για $1",
+ "version-license-not-found": "Δεν βρέθηκαν αναλυτικές πληροφορίες αδειοδότησης για την επέκταση αυτή.",
+ "version-credits-title": "Εύσημα για $1",
+ "version-credits-not-found": "Δεν βρέθηκαν αναλυτικές πληροφορίες ευσήμων για την επέκταση αυτή.",
"version-poweredby-credits": "Αυτό το wiki λειτουργεί με το λογισμικό '''[https://www.mediawiki.org/ MediaWiki]''', πνευματική ιδιοκτησία © 2001-$1 $2.",
"version-poweredby-others": "άλλοι",
"version-poweredby-translators": "translatewiki.net μεταφραστές",
@@ -2878,6 +2906,7 @@
"specialpages-group-wiki": "Δεδομένα και εργαλεία",
"specialpages-group-redirects": "Ανακατεύθυνση ειδικών σελίδων",
"specialpages-group-spam": "Εργαλεία κατά των ανεπιθύμητων διαφημιστικών",
+ "specialpages-group-developer": "Εργαλεία προγραμματιστών",
"blankpage": "Κενή σελίδα",
"intentionallyblankpage": "Αυτή η σελίδα έχει αφεθεί σκοπίμως κενή",
"external_image_whitelist": " #Αφήστε αυτή τη γραμμή ακριβώς όπως είναι<pre>\n#Βάλτε αποσπάσματα συνήθων εκφράσεων (μόνο το μέρος που είναι μεταξύ των //) κάτωθι\n#Αυτές θα αντιστοιχηθούν με τα URL των εξωτερικών (hotlinked) εικόνων\n#Αυτές που αντιστοιχούν θα εμφανιστούν ως εικόνες, αλλιώς μόνο ένας σύνδεσμος προς την εικόνα θα εμφανιστεί\n#Οι γραμμές που αρχίζουν με # αντιμετωπίζονται ως σχόλια\n#Αυτή η λίστα δεν είναι ευαίσθητη στα κεφαλαία γράμματα\n\n#Βάλτε όλα τα αποσπάσματα συνήθων εκφράσεων πάνω από αυτή τη γραμμή. Αφήστε αυτή τη γράμμη ως έχει</pre>",
@@ -2907,8 +2936,8 @@
"compare-revision-not-exists": "Η αναθεώρηση που καθορίσατε δεν υπάρχει.",
"dberr-problems": "Λυπούμαστε! Αυτός ο ιστότοπος αντιμετωπίζει τεχνικές δυσκολίες.",
"dberr-again": "Δοκιμάστε να περιμενένετε λίγα λεπτά και να ανανεώσετε.",
- "dberr-info": "(Δεν μπορεί να επικοινωνήσει με τον εξυπηρετητή της βάσης δεδομένων: $1)",
- "dberr-info-hidden": "(Δεν είναι δυνατή η επικοινωνία με τον εξυπηρετητή της βάσης δεδομένων)",
+ "dberr-info": "(Δεν είναι δυνατή η πρόσβαση στη βάση δεδομένων: $1)",
+ "dberr-info-hidden": "(Δεν είναι δυνατή η πρόσβαση στη βάση δεδομένων)",
"dberr-usegoogle": "Μπορείτε να δοκιμάσετε να ψάξετε στο Google εν τω μεταξύ.",
"dberr-outofdate": "Σημειώστε ότι οι ενδείξεις τους περί του περιεχομένου μας ενδέχεται να μην είναι ενημερωμένες.",
"dberr-cachederror": "Το ακόλουθο είναι ένα αντίγραφο από την μνήμη της σελίδας που ζητήσατε και ενδέχεται να μην είναι ενημερωμένο.",
@@ -2967,19 +2996,20 @@
"logentry-upload-overwrite": "{{GENDER:$2|Ο|Η}} $1 ανέβασε μια νέα έκδοση του $3",
"logentry-upload-revert": "{{GENDER:$2|Ο|Η}} $1 ανέβασε το $3",
"rightsnone": "(κανένα)",
+ "revdelete-summary": "επεξεργασία σύνοψης",
+ "feedback-adding": "Προσθήκη σχολίων στην σελίδα...",
+ "feedback-bugcheck": "Ωραία! Ελέγξτε μόνο ότι δεν είναι ήδη ένα από τα [$1 γνωστά σφάλματα].",
+ "feedback-bugnew": "Έλεγξα. Αναφέρετε ένα νέο σφάλμα",
"feedback-bugornote": "Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλούμε [$1 κάντε μια αναφορά σφάλματος].\nΔιαφορετικά, μπορείτε να χρησιμοποιήσετε την παρακάτω απλή φόρμα. Το σχόλιό σας θα προστεθεί στη σελίδα \"[$3 $2]\", μαζί με το όνομα χρήστη σας.",
- "feedback-subject": "Θέμα:",
- "feedback-message": "Μήνυμα:",
"feedback-cancel": "Ακύρωση",
- "feedback-submit": "Υποβολή σχολίων",
- "feedback-adding": "Προσθήκη σχολίων στην σελίδα...",
+ "feedback-close": "Ολοκληρώθηκε",
"feedback-error1": "Σφάλμα: Μη αναγνωρίσιμο αποτέλεσμα από το API",
"feedback-error2": "Σφάλμα: Η επεξεργασία απέτυχε",
"feedback-error3": "Σφάλμα: Καμία απάντηση από το API",
+ "feedback-message": "Μήνυμα:",
+ "feedback-subject": "Θέμα:",
+ "feedback-submit": "Υποβολή",
"feedback-thanks": "Ευχαριστούμε! Τα σχόλιά σας έχουν καταχωρηθεί στη σελίδα \"[$2 $1]\".",
- "feedback-close": "Ολοκληρώθηκε",
- "feedback-bugcheck": "Ωραία! Ελέγξτε μόνο ότι δεν είναι ήδη ένα από τα [$1 γνωστά σφάλματα].",
- "feedback-bugnew": "Έλεγξα. Αναφέρετε ένα νέο σφάλμα",
"searchsuggest-search": "Αναζήτηση",
"searchsuggest-containing": "περιέχει...",
"api-error-badaccess-groups": "Δεν επιτρέπεται να ανεβάσετε αρχεία σε αυτό το wiki.",
@@ -3066,6 +3096,51 @@
"pagelang-select-lang": "Επιλογή γλώσσας",
"right-pagelang": "Αλλαγή γλώσσας σελίδας",
"action-pagelang": "αλλαγή της γλώσσας σελίδας",
+ "logentry-pagelang-pagelang": "{{GENDER:$2|Ο|Η}} $1 άλλαξε τη γλώσσα σελίδας της σελίδας $3 από $4 σε $5.",
"default-skin-not-found-row-enabled": "* <code>$1</code> /$2 (ενεργοποιημένο)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''απενεργοποιημένο''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''απενεργοποιημένο''')",
+ "mediastatistics": "Στατιστικά πολυμέσων",
+ "mediastatistics-summary": "Στατιστικά για τύπους ανεβασμένων αρχείων. Περιέχει μόνο την πλέον πρόσφατη έκδοση κάθε αρχείου. Δεν συμπεριλαμβάνονται παλιές ή διαγεγραμμένες εκδόσεις αρχείων.",
+ "mediastatistics-table-mimetype": "Τύποι MIME",
+ "mediastatistics-table-extensions": "Πιθανές επεκτάσεις",
+ "mediastatistics-table-count": "Αριθμός αρχείων",
+ "mediastatistics-table-totalbytes": "Συνολικό μέγεθος",
+ "mediastatistics-header-unknown": "Άγνωστα",
+ "mediastatistics-header-bitmap": "Εικόνες bitmap",
+ "mediastatistics-header-drawing": "Σχέδια (διανυσματικές εικόνες)",
+ "mediastatistics-header-audio": "Ήχος",
+ "mediastatistics-header-video": "Βίντεο",
+ "mediastatistics-header-multimedia": "Εμπλουτισμένα πολυμέσα",
+ "mediastatistics-header-office": "Γραφείο",
+ "mediastatistics-header-text": "Μορφές κειμένου",
+ "mediastatistics-header-executable": "Εκτελέσιμα",
+ "mediastatistics-header-archive": "Συμπιεσμένες μορφές",
+ "json-error-unknown": "Υπήρξε πρόβλημα με το JSON. Σφάλμα: $1",
+ "json-error-ctrl-char": "Σφάλμα χαρακτήρα ελέγχου, πιθανόν είναι εσφαλμένα κωδικοποιημένος.",
+ "json-error-syntax": "Συντακτικό λάθος",
+ "json-error-recursion": "Μία ή περισσότερες αναδρομικές αναφορές στην προς κωδικοποίηση τιμή.",
+ "json-error-inf-or-nan": "Μία ή περισσότερες τιμές NAN ή INF στην προς κωδικοποίηση τιμή.",
+ "json-error-unsupported-type": "Δόθηκε τιμή τύπου που δεν μπορεί να κωδικοποιηθεί.",
+ "special-characters-group-latin": "Λατινικό",
+ "special-characters-group-latinextended": "Προέκταση του λατινικού",
+ "special-characters-group-ipa": "ΔΦΑ",
+ "special-characters-group-symbols": "Σύμβολα",
+ "special-characters-group-greek": "Ελληνικό",
+ "special-characters-group-cyrillic": "Κυριλλικό",
+ "special-characters-group-arabic": "Αραβικό",
+ "special-characters-group-arabicextended": "Arabic extended",
+ "special-characters-group-persian": "Περσικό",
+ "special-characters-group-hebrew": "Εβραϊκό",
+ "special-characters-group-bangla": "Μπενγκάλι",
+ "special-characters-group-tamil": "Ταμίλ",
+ "special-characters-group-telugu": "Τελούγκου",
+ "special-characters-group-sinhala": "Σινχάλα",
+ "special-characters-group-gujarati": "Γκουχαράτι",
+ "special-characters-group-devanagari": "Ντεβαναγκάρι",
+ "special-characters-group-thai": "ταϊλανδικά",
+ "special-characters-group-lao": "λαοτινά",
+ "special-characters-group-khmer": "καμποτζιανά",
+ "special-characters-title-endash": "παύλα",
+ "special-characters-title-emdash": "διπλή παύλα",
+ "special-characters-title-minus": "σύμβολο πλην"
}
diff --git a/languages/i18n/eml.json b/languages/i18n/eml.json
index 646727ba..d444e2c9 100644
--- a/languages/i18n/eml.json
+++ b/languages/i18n/eml.json
@@ -1,101 +1,153 @@
{
- "@metadata": {
- "authors": [
- "Lévi",
- "Ottaviano II",
- "Timichal",
- "Tèstaquêdra"
- ]
- },
- "sunday": "Dmànga",
- "monday": "Lonedè",
- "tuesday": "Martedè",
- "wednesday": "Merculdè",
- "thursday": "Giuvidè",
- "friday": "Venerdè",
- "saturday": "Sâbet",
- "january": "Znêr",
- "february": "Fervêr",
- "march": "Mêrs",
- "april": "Avrîl",
- "june": "Zógn",
- "july": "Lój",
- "august": "Agòst",
- "september": "Setèmber",
- "october": "Utòber",
- "november": "Nuvèmber",
- "december": "Dicèmber",
- "may": "Mâg",
- "mytalk": "Al mē discusiòun",
- "returnto": "Tōrna a $1.",
- "help": "Per quî rivê da pôch",
- "history_short": "Stôria",
- "printableversion": "Versiòun ch'la 's pōl stampêr",
- "permalink": "Colegamèint fés",
- "edit": "Mudéfica",
- "delete": "Scanşèla",
- "protect": "Prutēz",
- "specialpage": "Pàgina specêla",
- "talk": "Discusiòun",
- "jumptosearch": "Sèirca",
- "currentevents": "Fât e prugèt ed tót",
- "currentevents-url": "Project:Prugèt_ed_tót",
- "portal": "Discóter e quistiunêr",
- "portal-url": "Project:Bar",
- "nstab-main": "Artécol",
- "nstab-template": "Mudèl",
- "logouttext": "''An té pió coleghê''\nÉt pō cuntinvêr a druvêr {{SITENAME}} sèina nòm, o ét pō coleghêret dôp cun l'istès nòm o cun 'n êter.\nGuêrda che soquânti pàgini a 's prén vèder incòra cme s'ét fós coleghê fîn a che an vîn mia pulî la 'cache' dal tó 'browser'.",
- "userlogin": "Ingrès / regéstret",
- "logout": "Và fōra",
- "userlogout": "Và fōra",
- "userexists": "Al nòm utèint ch'èt siēlt l'è bèle stê druvê.\nCâten un èter, per piaşèir.",
- "loginsuccess": "'''Adèsa t'é coleghê in {{SITENAME}} cun al nòm utèint \"$1\".'''",
- "wrongpassword": "La 'password' che t'é més l'è sbaliêda. Prōva incòra.",
- "blocked-mailpassword": "Per anticipêr abûş, an n'é mía permès druvêr 'n' êtra 'password' da 'n indirés 'IP' bluchê.",
- "accountcreated": "T'é fât un nōv 'account'.",
- "summary": "Mutîv d'al cambiamèint:",
- "minoredit": "Cól cambiamèint ché l'é un gnînt in tót",
- "watchthis": "Tîn a drē a cla pàgina chè",
- "savearticle": "Sêlva la pàgina",
- "showpreview": "Guêrda préma 'd salvêr",
- "showdiff": "Guêrda al diferèinsi",
- "anoneditwarning": "'''Atensiòun''': l'ingrès an n'é mía stê fât. Al tó indirés 'IP' al gnirà scrét int la stòria di cambiamèint ed cla pàgina ché.",
- "anontalkpagetext": "''Còsta l'é la pàgina 'd discusiòun 'd un utèint sèinsa nòm ch' an n'à mìa incòra fât un utèinsa o che in tót al manēri l' al drōva mìa.''\nPer arcgnòsrel l'é dòunca necesâri druvêr al nómer dal só indirés IP. J indirés IP a pōlen èser spartî da pió utèint. Se t'é un utèint sèinsa nòm e 't pèins che i cumèint preşèint in cla pàgina ché an 't riguêrden mìa [[Special:UserLogin/signup|fà 'na nōva utèinsa]] o [[Special:UserLogin|vîn dèinter cun còla ch' ét gh' ê bèle]] per fêr in môd 'd an èser mìa cunfûş in futûr cun êter utèint sèinsa nòm.",
- "editing": "Cambiamèint ed $1",
- "yourdiff": "Diferèinsi",
- "templatesused": "{{PLURAL:$1|Modèl druvê|Modē druvê}} in cla pàgina ché:",
- "mypreferences": "preferèinzi",
- "yourrealname": "Al tō nòm vèira:",
- "yourlanguage": "Léngua:",
- "newuserlogpage": "Regéster di nōv utèint",
- "recentchanges": "Ûltem cambiamèint",
- "diff": "diferèinsi",
- "hist": "stôria",
- "recentchangeslinked": "Mudéfichi coleghêdi",
- "recentchangeslinked-feed": "Mudéfichi coleghêdi",
- "recentchangeslinked-toolbox": "Mudéfichi coleghêdi",
- "upload": "Carghèr un 'file'",
- "filedesc": "Sûnt",
- "fileuploadsummary": "Sûnt dal 'file':",
- "listfiles_size": "Dimensiòun in 'bytes'",
- "randompage": "'Na pàgina a chêş",
- "move": "Spôsta",
- "specialloguserlabel": "Asiòun fâta da:",
- "allpages": "Tót al pàgini",
- "watchlist": "I lavōr che guêrd",
- "watch": "Tîn a drē",
- "watchthispage": "Tîn a drē a cla pàgina ché",
- "excontent": "al contgnû l'ēra: '$1'",
- "excontentauthor": "al cuntgnû l'ēra: '$1' (e l'ónich avtōr l'ēra '[[Special:Contributions/$2|$2]]')",
- "confirmdeletetext": "T'é drē scanşlêr 'na pàgina o na figûra, insèm a tóta la só stòria dal 'database'. Per piaşèir cunfērma ch'ét vō scanşlêrla, ch'ét sê j efèt ed la tó decişiòun e ch' la cumbîna cun al léni guîda dal [[{{MediaWiki:Policy-url}}]].",
- "deletedtext": "\"$1\" l'é stê scanşlê.\nGuèrda $2 per vèder la lésta d'al pàgini ch' în stèdi scanşlèdi da pôch tèimp.",
- "dellogpage": "Regéster dal scanşladûri",
- "deletionlog": "regéster dal scanşladûri",
- "mycontris": "i mē lavōr",
- "whatlinkshere": "A pûnten ché",
- "blocklink": "blôca",
- "contribslink": "còl ch'l'à scrét",
- "movelogpage": "Regéster di muvimèint",
- "ilsubmit": "Sērca",
- "specialpages": "Pàgini specêli"
+ "@metadata": {
+ "authors": [
+ "Lévi",
+ "Ottaviano II",
+ "Timichal",
+ "Tèstaquêdra",
+ "Gloria sah"
+ ]
+ },
+ "tog-underline": "Ligàm ipertestuêl:",
+ "tog-hideminor": "Nascònder i cambiamèint piò cìc in di ùltem cambiamèint",
+ "tog-hidepatrolled": "Nascònder i cambiamèint controlê in di ùltem cambiamèint",
+ "tog-newpageshidepatrolled": "Lōga al pàgini virifichêdi da la lésta dal pàgini pió nōvi",
+ "tog-extendwatchlist": "Fà vèder tóti 'l mudéfichi a i tgnû 'd ôc specêl, mìa sōl l'ûltma",
+ "tog-usenewrc": "Unés al mudéfichi per pògin int al j ûltmi mudéfichi e int i tgnû 'd ôc specêl",
+ "tog-numberheadings": "Numerasiòun avtomâtica di tétol ed sesiòun",
+ "tog-showtoolbar": "Fà vèder la bâra di strumèint ed mudéfica",
+ "tog-editondblclick": "Mudéfica dal pàgini cun un dòpi cléch",
+ "tog-editsectiononrightclick": "Mudéfica dal sesiòun cun un cléch a dréta in séma 'l tétol",
+ "tog-watchcreations": "Zûnta al pàgini fâti e i file carghê a i tgnû 'd ôc specêl",
+ "tog-watchdefault": "Zûnta 'l pàgini e i file mudifichê a i tgnû 'd ôc specêl",
+ "tog-watchmoves": "Zûnta 'l pàgini e i file spustê a i tgnû 'd ôc specêl",
+ "tog-watchdeletion": "Zûnta 'l pàgini e i file scanşlê a i tgnû 'd ôc specêl",
+ "tog-watchrollback": "Zûnta a i tgnû 'd ôc specêl al pàgini in dóv' j ò fât un ritōren a la pàgina 'd préma",
+ "tog-minordefault": "Sègna ógni mudéfica cme céca (sōl fés)",
+ "tog-previewontop": "Fà vèder la pàgina cambiêda sōver la caşèla 'd mudéfica e mìa sòta",
+ "tog-previewonfirst": "Fà vèder la pàgina cambiêda int la préma nudéfica",
+ "tog-oldsig": "Firma ch' a gh' è bèle:",
+ "underline-always": "Sàimper",
+ "underline-never": "Mài",
+ "sunday": "Dmànga",
+ "monday": "Lonedè",
+ "tuesday": "Martedè",
+ "wednesday": "Merculdè",
+ "thursday": "Giuvidè",
+ "friday": "Venerdè",
+ "saturday": "Sâbet",
+ "sun": "Dme.",
+ "mon": "Lun.",
+ "tue": "Mar.",
+ "wed": "Mer.",
+ "thu": "Giu.",
+ "fri": "Ven.",
+ "sat": "Sab.",
+ "january": "Znêr",
+ "february": "Fervêr",
+ "march": "Mêrs",
+ "april": "Avrîl",
+ "june": "Zógn",
+ "july": "Lój",
+ "august": "Agòst",
+ "september": "Setèmber",
+ "october": "Utòber",
+ "november": "Nuvèmber",
+ "december": "Dicèmber",
+ "january-gen": "Znêr",
+ "february-gen": "Fervêr",
+ "march-gen": "Mêrs",
+ "april-gen": "Avrîl",
+ "june-gen": "Zógn",
+ "july-gen": "Lój",
+ "august-gen": "Agòst",
+ "september-gen": "Setèmber",
+ "october-gen": "Utòber",
+ "november-gen": "Novèmber",
+ "december-gen": "Dicèmber",
+ "apr": "Avr",
+ "may": "Mâg",
+ "jun": "Zógn",
+ "jul": "Lój",
+ "aug": "Ago",
+ "sep": "Set",
+ "oct": "Oto",
+ "nov": "Nov",
+ "dec": "Dec",
+ "mytalk": "Al mē discusiòun",
+ "returnto": "Tōrna a $1.",
+ "help": "Ajót",
+ "go": "Va",
+ "searcharticle": "Va",
+ "history": "Stòria dla pàgina",
+ "history_short": "Stôria",
+ "printableversion": "Versiòun ch'la 's pōl stampêr",
+ "permalink": "Colegamèint fés",
+ "print": "Stampèr",
+ "edit": "Mudéfica",
+ "delete": "Scanşèla",
+ "protect": "Prutēz",
+ "specialpage": "Pàgina specêla",
+ "talk": "Discusiòun",
+ "jumptosearch": "Sèirca",
+ "currentevents": "Fât e prugèt ed tót",
+ "currentevents-url": "Project:Prugèt_ed_tót",
+ "portal": "Discóter e quistiunêr",
+ "portal-url": "Project:Bar",
+ "nstab-main": "Artécol",
+ "nstab-template": "Mudèl",
+ "logouttext": "<strong>An té pió coleghê</strong>\n\nGuêrda che soquânti pàgini a 's prén vèder incòra cme s'ét fós coleghê, còst fîn a che an vîn mia pulî la memôria dal tó navigadōr.",
+ "userlogin": "Ingrès / regéstret",
+ "logout": "Và fōra",
+ "userlogout": "Và fōra",
+ "userexists": "Al nòm utèint ch'èt siēlt l'è bèle stê druvê.\nCâten un èter, per piaşèir.",
+ "loginsuccess": "'''Adèsa t'é coleghê in {{SITENAME}} cun al nòm utèint \"$1\".'''",
+ "wrongpassword": "La password che t'é més l'è şbaliêda. Prōva incòra.",
+ "blocked-mailpassword": "Per anticipêr abûş, an n'é mía permès druvêr 'n' êtra 'password' da 'n indirés 'IP' bluchê.",
+ "accountcreated": "T'é fât un nōv 'account'.",
+ "summary": "Mutîv d'al cambiamèint:",
+ "minoredit": "Cól cambiamèint ché l'é un gnînt in tót",
+ "watchthis": "Tîn a drē a cla pàgina chè",
+ "savearticle": "Sêlva la pàgina",
+ "showpreview": "Guêrda préma 'd salvêr",
+ "showdiff": "Guêrda al diferèinsi",
+ "anoneditwarning": "<strong>Atèinti</strong>: l'ingrès an n'é mía stê fât. S'ét ferê dal mudéfichi al tó indirés IP al srà vést da tót. S'ét <strong>[$1 vîn dèinter]</strong> o <strong>[$2 ét fê 'n' utèinsa nōva]</strong>, al tō mudéfichi srân sgnê al tó nòm, insèm a êter benefési.",
+ "anontalkpagetext": "''Còsta l'é la pàgina 'd discusiòun 'd un utèint sèinsa nòm ch' an n'à mìa incòra fât un utèinsa o che in tót al manēri l' al drōva mìa.''\nPer arcgnòsrel l'é dòunca necesâri druvêr al nómer dal só indirés IP. J indirés IP a pōlen èser spartî da pió utèint. Se t'é un utèint sèinsa nòm e 't pèins che i cumèint preşèint in cla pàgina ché an 't riguêrden mìa [[Special:UserLogin/signup|fà 'na nōva utèinsa]] o [[Special:UserLogin|vîn dèinter cun còla ch' ét gh' ê bèle]] per fêr in môd 'd an èser mìa cunfûş in futûr cun êter utèint sèinsa nòm.",
+ "editing": "Cambiamèint ed $1",
+ "yourdiff": "Diferèinsi",
+ "templatesused": "{{PLURAL:$1|Modèl druvê|Modē druvê}} in cla pàgina ché:",
+ "mypreferences": "preferèinzi",
+ "yourrealname": "Al tō nòm vèira:",
+ "yourlanguage": "Léngua:",
+ "newuserlogpage": "Regéster di nōv utèint",
+ "recentchanges": "Ûltem cambiamèint",
+ "diff": "diferèinsi",
+ "hist": "stôria",
+ "recentchangeslinked": "Mudéfichi coleghêdi",
+ "recentchangeslinked-feed": "Mudéfichi coleghêdi",
+ "recentchangeslinked-toolbox": "Mudéfichi coleghêdi",
+ "upload": "Carghèr un 'file'",
+ "filedesc": "Sûnt",
+ "fileuploadsummary": "Sûnt dal 'file':",
+ "listfiles_size": "Dimensiòun in 'bytes'",
+ "randompage": "'Na pàgina a chêş",
+ "move": "Spôsta",
+ "specialloguserlabel": "Asiòun fâta da:",
+ "allpages": "Tót al pàgini",
+ "watchlist": "I lavōr che guêrd",
+ "watch": "Tîn a drē",
+ "watchthispage": "Tîn a drē a cla pàgina ché",
+ "excontent": "al contgnû l'ēra: '$1'",
+ "excontentauthor": "al cuntgnû l'ēra: '$1' (e l'ónich avtōr l'ēra '[[Special:Contributions/$2|$2]]')",
+ "confirmdeletetext": "T'é drē scanşlêr 'na pàgina o na figûra, insèm a tóta la só stòria dal 'database'. Per piaşèir cunfērma ch'ét vō scanşlêrla, ch'ét sê j efèt ed la tó decişiòun e ch' la cumbîna cun al léni guîda dal [[{{MediaWiki:Policy-url}}]].",
+ "deletedtext": "\"$1\" l'é stê scanşlê.\nGuèrda $2 per vèder la lésta d'al pàgini ch' în stèdi scanşlèdi da pôch tèimp.",
+ "dellogpage": "Regéster dal scanşladûri",
+ "deletionlog": "regéster dal scanşladûri",
+ "mycontris": "i mē lavōr",
+ "whatlinkshere": "A pûnten ché",
+ "blocklink": "blôca",
+ "contribslink": "còl ch'l'à scrét",
+ "movelogpage": "Regéster di muvimèint",
+ "ilsubmit": "Sērca",
+ "specialpages": "Pàgini specêli"
}
diff --git a/languages/i18n/en-gb.json b/languages/i18n/en-gb.json
index 3bd84449..d1569c14 100644
--- a/languages/i18n/en-gb.json
+++ b/languages/i18n/en-gb.json
@@ -1,86 +1,86 @@
{
- "@metadata": {
- "authors": [
- "Amire80",
- "Dantman",
- "Fitoschido",
- "Hazard-SJ",
- "Jon Harald Søby",
- "Lloffiwr",
- "Reedy",
- "Shirayuki",
- "The Evil IP address"
- ]
- },
- "tog-watchcreations": "Add pages I create and files I upload to my watchlist",
- "tog-watchdefault": "Add pages and files I edit to my watchlist",
- "tog-watchmoves": "Add pages and files I move to my watchlist",
- "tog-watchdeletion": "Add pages and files I delete to my watchlist",
- "category_header": "Pages in category ‘$1’",
- "category-media-header": "Media in category ‘$1’",
- "retrievedfrom": "Retrieved from ‘$1’",
- "page-rss-feed": "‘$1’ RSS feed",
- "page-atom-feed": "‘$1’ Atom feed",
- "missing-article": "The database did not find the text of a page that it should have found, named ‘$1’ $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
- "fileappenderrorread": "Could not read ‘$1’ during append.",
- "fileappenderror": "Could not append ‘$1’ to ‘$2’.",
- "filecopyerror": "Could not copy file ‘$1’ to ‘$2’.",
- "filerenameerror": "Could not rename file ‘$1’ to ‘$2.’",
- "filedeleteerror": "Could not delete file ‘$1’.",
- "directorycreateerror": "Could not create directory ‘$1’.",
- "filenotfound": "Could not find file ‘$1’.",
- "fileexistserror": "Unable to write to file ‘$1’: File exists.",
- "unexpected": "Unexpected value: ‘$1’=‘$2’.",
- "cannotdelete": "The page or file ‘$1’ could not be deleted.\nIt may have already been deleted by someone else.",
- "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
- "editinginterface": "'''Warning:''' You are editing a page which is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
- "cascadeprotected": "This page has been protected from editing, because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the ‘cascading’ option turned on:\n$2",
- "prefs-i18n": "Internationalisation",
- "license": "Licencing:",
- "license-header": "Licencing",
- "uncategorizedpages": "Uncategorised pages",
- "uncategorizedcategories": "Uncategorised categories",
- "uncategorizedimages": "Uncategorised files",
- "uncategorizedtemplates": "Uncategorised templates",
- "sessionfailure": "There seems to be a problem with your login session;\nthis action has been cancelled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
- "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalised).",
- "ipbreason-dropdown": "*Common block reasons\n** Inserting false information\n** Removing content from pages\n** Spamming links to external sites\n** Inserting nonsense/gibberish into pages\n** Intimidating behaviour/harassment\n** Abusing multiple accounts\n** Unacceptable username",
- "proxyblockreason": "Your IP address has been blocked because it is an open proxy.\nPlease contact your Internet service provider or technical support of your organisation and inform them of this serious security problem.",
- "allmessagestext": "This is a list of system messages available in the MediaWiki namespace.\nPlease visit [https://www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
- "allmessages-filter": "Filter by customisation state:",
- "import-error-unserialize": "Revision $2 of page \"$1\" could not be unserialised. The revision was reported to use content model $3 serialised as $4.",
- "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitise it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
- "exif-ycbcrcoefficients": "Colour space transformation matrix coefficients",
- "exif-colorspace": "Colour space",
- "exif-datetimedigitized": "Date and time of digitising",
- "exif-subsectimedigitized": "DateTimeDigitised subseconds",
- "exif-exposureprogram": "Exposure Programme",
- "exif-licenseurl": "URL for copyright licence",
- "exif-morepermissionsurl": "Alternative licencing information",
- "exif-organisationinimage": "Organisation depicted",
- "exif-exposureprogram-2": "Normal programme",
- "exif-exposureprogram-5": "Creative programme (biased toward depth of field)",
- "exif-exposureprogram-6": "Action programme (biased toward fast shutter speed)",
- "exif-subjectdistance-value": "$1 metres",
- "exif-meteringmode-2": "Centre weighted average",
- "exif-sensingmethod-2": "One-chip colour area sensor",
- "exif-sensingmethod-3": "Two-chip colour area sensor",
- "exif-sensingmethod-4": "Three-chip colour area sensor",
- "exif-sensingmethod-5": "Colour sequential area sensor",
- "exif-sensingmethod-8": "Colour sequential linear sensor",
- "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metre|metres}} above sea level",
- "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metre|metres}} below sea level",
- "exif-gpsspeed-k": "Kilometres per hour",
- "exif-gpsdestdistance-k": "Kilometres",
- "exif-ycbcrpositioning-1": "Centred",
- "exif-iimcategory-lab": "Labour",
- "confirmemail_invalidated": "Email address confirmation cancelled",
- "version-license": "MediaWiki Licence",
- "version-ext-license": "Licence",
- "version-ext-colheader-license": "Licence",
- "version-license-title": "Licence for $1",
- "version-license-not-found": "No detailed licence information was found for this extension.",
- "version-credits-summary": "We would like to recognise the following persons for their contribution to [[Special:Version|MediaWiki]].",
- "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].",
- "feedback-error1": "Error: Unrecognised result from API"
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Dantman",
+ "Fitoschido",
+ "Hazard-SJ",
+ "Jon Harald Søby",
+ "Lloffiwr",
+ "Reedy",
+ "Shirayuki",
+ "The Evil IP address",
+ "Vogone"
+ ]
+ },
+ "tog-watchcreations": "Add pages I create and files I upload to my watchlist",
+ "tog-watchdefault": "Add pages and files I edit to my watchlist",
+ "tog-watchmoves": "Add pages and files I move to my watchlist",
+ "tog-watchdeletion": "Add pages and files I delete to my watchlist",
+ "category_header": "Pages in category ‘$1’",
+ "category-media-header": "Media in category ‘$1’",
+ "retrievedfrom": "Retrieved from ‘$1’",
+ "page-rss-feed": "‘$1’ RSS feed",
+ "page-atom-feed": "‘$1’ Atom feed",
+ "missing-article": "The database did not find the text of a page that it should have found, named ‘$1’ $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
+ "filecopyerror": "Could not copy file ‘$1’ to ‘$2’.",
+ "filerenameerror": "Could not rename file ‘$1’ to ‘$2.’",
+ "filedeleteerror": "Could not delete file ‘$1’.",
+ "directorycreateerror": "Could not create directory ‘$1’.",
+ "filenotfound": "Could not find file ‘$1’.",
+ "unexpected": "Unexpected value: ‘$1’=‘$2’.",
+ "cannotdelete": "The page or file ‘$1’ could not be deleted.\nIt may have already been deleted by someone else.",
+ "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+ "editinginterface": "'''Warning:''' You are editing a page which is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+ "cascadeprotected": "This page has been protected from editing, because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the ‘cascading’ option turned on:\n$2",
+ "prefs-i18n": "Internationalisation",
+ "license": "Licencing:",
+ "license-header": "Licencing",
+ "licenses-edit": "Edit licence options",
+ "uncategorizedpages": "Uncategorised pages",
+ "uncategorizedcategories": "Uncategorised categories",
+ "uncategorizedimages": "Uncategorised files",
+ "uncategorizedtemplates": "Uncategorised templates",
+ "sessionfailure": "There seems to be a problem with your login session;\nthis action has been cancelled as a precaution against session hijacking.\nGo back to the previous page, reload that page and then try again.",
+ "blockiptext": "Use the form below to block write access from a specific IP address or username.\nThis should be done only to prevent vandalism, and in accordance with [[{{MediaWiki:Policy-url}}|policy]].\nFill in a specific reason below (for example, citing particular pages that were vandalised).",
+ "ipbreason-dropdown": "*Common block reasons\n** Inserting false information\n** Removing content from pages\n** Spamming links to external sites\n** Inserting nonsense/gibberish into pages\n** Intimidating behaviour/harassment\n** Abusing multiple accounts\n** Unacceptable username",
+ "proxyblockreason": "Your IP address has been blocked because it is an open proxy.\nPlease contact your Internet service provider or technical support of your organisation and inform them of this serious security problem.",
+ "movecategorypage-warning": "<strong>Warning:</strong> You are about to move a category page. Please note that only the page will be moved and any pages in the old category will <em>not</em> be recategorised into the new one.",
+ "allmessagestext": "This is a list of system messages available in the MediaWiki namespace.\nPlease visit [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.",
+ "allmessages-filter": "Filter by customisation state:",
+ "import-error-unserialize": "Revision $2 of page \"$1\" could not be unserialised. The revision was reported to use content model $3 serialised as $4.",
+ "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitise it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
+ "exif-ycbcrcoefficients": "Colour space transformation matrix coefficients",
+ "exif-colorspace": "Colour space",
+ "exif-datetimedigitized": "Date and time of digitising",
+ "exif-subsectimedigitized": "DateTimeDigitised subseconds",
+ "exif-exposureprogram": "Exposure Programme",
+ "exif-licenseurl": "URL for copyright licence",
+ "exif-morepermissionsurl": "Alternative licencing information",
+ "exif-organisationinimage": "Organisation depicted",
+ "exif-exposureprogram-2": "Normal programme",
+ "exif-exposureprogram-5": "Creative programme (biased toward depth of field)",
+ "exif-exposureprogram-6": "Action programme (biased toward fast shutter speed)",
+ "exif-subjectdistance-value": "$1 metres",
+ "exif-meteringmode-2": "Centre weighted average",
+ "exif-sensingmethod-2": "One-chip colour area sensor",
+ "exif-sensingmethod-3": "Two-chip colour area sensor",
+ "exif-sensingmethod-4": "Three-chip colour area sensor",
+ "exif-sensingmethod-5": "Colour sequential area sensor",
+ "exif-sensingmethod-8": "Colour sequential linear sensor",
+ "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metre|metres}} above sea level",
+ "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metre|metres}} below sea level",
+ "exif-gpsspeed-k": "Kilometres per hour",
+ "exif-gpsdestdistance-k": "Kilometres",
+ "exif-ycbcrpositioning-1": "Centred",
+ "exif-iimcategory-lab": "Labour",
+ "confirmemail_invalidated": "Email address confirmation cancelled",
+ "version-license": "MediaWiki Licence",
+ "version-ext-license": "Licence",
+ "version-ext-colheader-license": "Licence",
+ "version-license-title": "Licence for $1",
+ "version-license-not-found": "No detailed licence information was found for this extension.",
+ "version-credits-summary": "We would like to recognise the following persons for their contribution to [[Special:Version|MediaWiki]].",
+ "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].",
+ "feedback-error1": "Error: Unrecognised result from API"
}
diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index 19832b22..a23c6b61 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -28,7 +28,7 @@
"tog-shownumberswatching": "Show the number of watching users",
"tog-oldsig": "Existing signature:",
"tog-fancysig": "Treat signature as wikitext (without an automatic link)",
- "tog-uselivepreview": "Use live preview (experimental)",
+ "tog-uselivepreview": "Use live preview",
"tog-forceeditsummary": "Prompt me when entering a blank edit summary",
"tog-watchlisthideown": "Hide my edits from the watchlist",
"tog-watchlisthidebots": "Hide bot edits from the watchlist",
@@ -222,6 +222,7 @@
"pool-queuefull": "Pool queue is full",
"pool-errorunknown": "Unknown error",
"pool-servererror": "The pool counter service is not available ($1).",
+ "poolcounter-usage-error": "Usage error: $1",
"aboutsite": "About {{SITENAME}}",
"aboutpage": "Project:About",
"copyright": "Content is available under $1 unless otherwise noted.",
@@ -233,6 +234,7 @@
"edithelp": "Editing help",
"edithelppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Editing_pages",
"helppage": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents",
+ "helppage-top-gethelp": "Help",
"mainpage": "Main Page",
"mainpage-description": "Main page",
"policy-url": "Project:Policy",
@@ -321,10 +323,13 @@
"readonly_lag": "The database has been automatically locked while the slave database servers catch up to the master",
"internalerror": "Internal error",
"internalerror_info": "Internal error: $1",
+ "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
"filecopyerror": "Could not copy file \"$1\" to \"$2\".",
"filerenameerror": "Could not rename file \"$1\" to \"$2\".",
"filedeleteerror": "Could not delete file \"$1\".",
"directorycreateerror": "Could not create directory \"$1\".",
+ "directoryreadonlyerror": "Directory \"$1\" is read-only.",
+ "directorynotreadableerror": "Directory \"$1\" is not readable.",
"filenotfound": "Could not find file \"$1\".",
"unexpected": "Unexpected value: \"$1\"=\"$2\".",
"formerror": "Error: Could not submit form.",
@@ -346,7 +351,8 @@
"viewsourcetext": "You can view and copy the source of this page:",
"viewyourtext": "You can view and copy the source of <strong>your edits</strong> to this page:",
"protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
- "editinginterface": "<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+ "editinginterface": "<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.",
+ "translateinterface": "To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
"cascadeprotected": "This page has been protected from editing because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the \"cascading\" option turned on:\n$2",
"namespaceprotected": "You do not have permission to edit pages in the <strong>$1</strong> namespace.",
"customcssprotected": "You do not have permission to edit this CSS page because it contains another user's personal settings.",
@@ -464,11 +470,8 @@
"blocked-mailpassword": "Your IP address is blocked from editing, and so is not allowed to use the password recovery function to prevent abuse.",
"eauthentsent": "A confirmation email has been sent to the specified email address.\nBefore any other email is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.",
"throttled-mailpassword": "A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.\nTo prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.",
- "loginstart": "",
- "loginend": "",
- "loginend-https": "",
- "signupstart": "{{int:loginstart}}",
- "signupend": "{{int:loginend}}",
+ "signupstart": "",
+ "signupend": "",
"signupend-https": "",
"mailerror": "Error sending mail: $1",
"acct_creation_throttle_hit": "Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.\nAs a result, visitors using this IP address cannot create any more accounts at the moment.",
@@ -591,10 +594,12 @@
"anoneditwarning": "<strong>Warning:</strong> You are not logged in. Your IP address will be publicly visible if you make any edits. If you <strong>[$1 log in]</strong> or <strong>[$2 create an account]</strong>, your edits will be attributed to your username, along with other benefits.",
"anonpreviewwarning": "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
"missingsummary": "<strong>Reminder:</strong> You have not provided an edit summary.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
+ "selfredirect": "<strong>Warning:</strong> You are redirecting this page to itself.\nYou may have specified the wrong target for the redirect, or you may be editing the wrong page.\nIf you click \"{{int:savearticle}}\" again, the redirect will be created anyway.",
"missingcommenttext": "Please enter a comment below.",
"missingcommentheader": "<strong>Reminder:</strong> You have not provided a subject/headline for this comment.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
"summary-preview": "Summary preview:",
"subject-preview": "Subject/headline preview:",
+ "previewerrortext": "An error occurred while attempting to preview your changes.",
"blockedtitle": "User is blocked",
"blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
"autoblockedtext": "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.\n\nNote that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.\n\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
@@ -642,6 +647,7 @@
"editingsection": "Editing $1 (section)",
"editingcomment": "Editing $1 (new section)",
"editconflict": "Edit conflict: $1",
+ "editnotice-notext": "-",
"explainconflict": "Someone else has changed this page since you started editing it.\nThe upper text area contains the page text as it currently exists.\nYour changes are shown in the lower text area.\nYou will have to merge your changes into the existing text.\n<strong>Only</strong> the text in the upper text area will be saved when you press \"{{int:savearticle}}\".",
"yourtext": "Your text",
"storedversion": "Stored revision",
@@ -698,6 +704,11 @@
"content-model-text": "plain text",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-model-json": "JSON",
+ "content-json-empty-object": "Empty object",
+ "content-json-empty-array": "Empty array",
+ "duplicate-args-category": "Pages using duplicate arguments in template calls",
+ "duplicate-args-category-desc": "The page contains template calls that use duplicates of arguments, such as <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "<strong>Warning:</strong> This page contains too many expensive parser function calls.\n\nIt should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $1 call|are now $1 calls}}.",
"expensive-parserfunction-category": "Pages with too many expensive parser function calls",
"post-expand-template-inclusion-warning": "<strong>Warning:</strong> Template include size is too large.\nSome templates will not be included.",
@@ -754,6 +765,7 @@
"history-feed-description": "Revision history for this page on the wiki",
"history-feed-item-nocomment": "$1 at $2",
"history-feed-empty": "The requested page does not exist.\nIt may have been deleted from the wiki, or renamed.\nTry [[Special:Search|searching on the wiki]] for relevant new pages.",
+ "history-edit-tags": "Edit tags of selected revisions",
"rev-deleted-comment": "(edit summary removed)",
"rev-deleted-user": "(username removed)",
"rev-deleted-event": "(log details removed)",
@@ -869,6 +881,8 @@
"notextmatches": "No page text matches",
"prevn": "previous {{PLURAL:$1|$1}}",
"nextn": "next {{PLURAL:$1|$1}}",
+ "prev-page": "previous page",
+ "next-page": "next page",
"prevn-title": "Previous $1 {{PLURAL:$1|result|results}}",
"nextn-title": "Next $1 {{PLURAL:$1|result|results}}",
"shown-title": "Show $1 {{PLURAL:$1|result|results}} per page",
@@ -888,6 +902,7 @@
"search-result-category-size": "{{PLURAL:$1|1 member|$1 members}} ({{PLURAL:$2|1 subcategory|$2 subcategories}}, {{PLURAL:$3|1 file|$3 files}})",
"search-redirect": "(redirect $1)",
"search-section": "(section $1)",
+ "search-category": "(category $1)",
"search-file-match": "(matches file content)",
"search-suggest": "Did you mean: $1",
"search-interwiki-caption": "Sister projects",
@@ -925,6 +940,11 @@
"prefs-personal": "User profile",
"prefs-rc": "Recent changes",
"prefs-watchlist": "Watchlist",
+ "prefs-editwatchlist": "Edit watchlist",
+ "prefs-editwatchlist-label": "Edit entries on your watchlist:",
+ "prefs-editwatchlist-edit": "View and remove titles on your watchlist",
+ "prefs-editwatchlist-raw": "Edit raw watchlist",
+ "prefs-editwatchlist-clear": "Clear your watchlist",
"prefs-watchlist-days": "Days to show in watchlist:",
"prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
"prefs-watchlist-edits": "Maximum number of changes to show in expanded watchlist:",
@@ -996,7 +1016,7 @@
"gender-female": "She edits wiki pages",
"prefs-help-gender": "Setting this preference is optional.\nThe software uses its value to address you and to mention you to others using the appropriate grammatical gender.\nThis information will be public.",
"email": "Email",
- "prefs-help-realname": "Real name is optional.\nIf you choose to provide it, this will be used for giving you attribution for your work.",
+ "prefs-help-realname": "Real name is optional.\nIf provided, it may be used to give you attribution for your work.",
"prefs-help-email": "Email address is optional, but is needed for password resets, should you forget your password.",
"prefs-help-email-others": "You can also choose to let others contact you by email through a link on your user or talk page.\nYour email address is not revealed when other users contact you.",
"prefs-help-email-required": "Email address is required.",
@@ -1134,6 +1154,9 @@
"right-override-export-depth": "Export pages including linked pages up to a depth of 5",
"right-sendemail": "Send email to other users",
"right-passwordreset": "View password reset emails",
+ "right-managechangetags": "Create and delete [[Special:Tags|tags]] from the database",
+ "right-applychangetags": "Apply [[Special:Tags|tags]] along with one's changes",
+ "right-changetags": "Add and remove arbitrary [[Special:Tags|tags]] on individual revisions and log entries",
"newuserlogpage": "User creation log",
"newuserlogpagetext": "This is a log of user creations.",
"rightslog": "User rights log",
@@ -1180,6 +1203,9 @@
"action-viewmyprivateinfo": "view your private information",
"action-editmyprivateinfo": "edit your private information",
"action-editcontentmodel": "edit the content model of a page",
+ "action-managechangetags": "create and delete tags from the database",
+ "action-applychangetags": "apply tags along with your changes",
+ "action-changetags": "add and remove arbitrary tags on individual revisions and log entries",
"nchanges": "$1 {{PLURAL:$1|change|changes}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|since last visit}}",
"enhancedrc-history": "history",
@@ -1259,9 +1285,9 @@
"upload-summary": "",
"upload-recreate-warning": "<strong>Warning: A file by that name has been deleted or moved.</strong>\n\nThe deletion and move log for this page are provided here for convenience:",
"uploadtext": "Use the form below to upload files.\nTo view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].\n\nTo include a file in a page, use a link in one of the following forms:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> to use the full version of the file\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> to use a 200 pixel wide rendition in a box in the left margin with \"alt text\" as description\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> for directly linking to the file without displaying the file",
- "upload-permitted": "Permitted file types: $1.",
- "upload-preferred": "Preferred file types: $1.",
- "upload-prohibited": "Prohibited file types: $1.",
+ "upload-permitted": "Permitted file {{PLURAL:$2|type|types}}: $1.",
+ "upload-preferred": "Preferred file {{PLURAL:$2|type|types}}: $1.",
+ "upload-prohibited": "Prohibited file {{PLURAL:$2|type|types}}: $1.",
"uploadfooter": "-",
"upload-default-description": "-",
"uploadlogpage": "Upload log",
@@ -1532,7 +1558,6 @@
"statistics-summary": "",
"statistics-header-pages": "Page statistics",
"statistics-header-edits": "Edit statistics",
- "statistics-header-views": "View statistics",
"statistics-header-users": "User statistics",
"statistics-header-hooks": "Other statistics",
"statistics-articles": "Content pages",
@@ -1541,13 +1566,9 @@
"statistics-files": "Uploaded files",
"statistics-edits": "Page edits since {{SITENAME}} was set up",
"statistics-edits-average": "Average edits per page",
- "statistics-views-total": "Views total",
- "statistics-views-total-desc": "Views to non-existing pages and special pages are not included",
- "statistics-views-peredit": "Views per edit",
"statistics-users": "Registered [[Special:ListUsers|users]]",
"statistics-users-active": "Active users",
"statistics-users-active-desc": "Users who have performed an action in the last {{PLURAL:$1|day|$1 days}}",
- "statistics-mostpopular": "Most viewed pages",
"statistics-footer": "",
"pageswithprop": "Pages with a page property",
"pageswithprop-summary": "",
@@ -1600,12 +1621,10 @@
"unusedcategories-summary": "",
"unusedimages": "Unused files",
"unusedimages-summary": "",
- "popularpages": "Popular pages",
- "popularpages-summary": "",
"wantedcategories": "Wanted categories",
"wantedcategories-summary": "",
"wantedpages": "Wanted pages",
- "wantedpages-summary": "",
+ "wantedpages-summary": "List of non-existing pages with the most links to them, excluding pages which only have redirects linking to them. For a list of non-existent pages that have redirects linking to them, see [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Invalid title in result set: $1",
"wantedfiles": "Wanted files",
"wantedfiles-summary": "",
@@ -1682,11 +1701,15 @@
"pager-older-n": "{{PLURAL:$1|older 1|older $1}}",
"suppress": "Oversight",
"querypage-disabled": "This special page is disabled for performance reasons.",
+ "apihelp": "API help",
+ "apihelp-summary": "",
+ "apihelp-no-such-module": "Module \"$1\" not found.",
+ "apihelp-link": "[[Special:ApiHelp/$1|$2]]",
"booksources": "Book sources",
"booksources-summary": "",
"booksources-search-legend": "Search for book sources",
"booksources-isbn": "ISBN:",
- "booksources-go": "Go",
+ "booksources-search": "Search",
"booksources-text": "Below is a list of links to other sites that sell new and used books, and may also have further information about books you are looking for:",
"booksources-invalid-isbn": "The given ISBN does not appear to be valid; check for errors copying from the original source.",
"rfcurl": "//tools.ietf.org/html/rfc$1",
@@ -1699,6 +1722,7 @@
"logempty": "No matching items in log.",
"log-title-wildcard": "Search titles starting with this text",
"showhideselectedlogentries": "Change visibility of selected log entries",
+ "log-edit-tags": "Edit tags of selected log entries",
"allpages": "All pages",
"allpages-summary": "",
"nextpage": "Next page ($1)",
@@ -1807,7 +1831,7 @@
"emailccsubject": "Copy of your message to $1: $2",
"emailsent": "Email sent",
"emailsenttext": "Your email message has been sent.",
- "emailuserfooter": "This email was sent by $1 to $2 by the \"Email user\" function at {{SITENAME}}.",
+ "emailuserfooter": "This email was sent by $1 to $2 by the \"{{int:emailpage}}\" function at {{SITENAME}}.",
"usermessage-summary": "Leaving system message.",
"usermessage-editor": "System messenger",
"usermessage-template": "MediaWiki:UserMessage",
@@ -1834,7 +1858,7 @@
"wlheader-enotif": "Email notification is enabled.",
"wlheader-showupdated": "Pages that have been changed since you last visited them are shown in <strong>bold</strong>.",
"wlnote": "Below {{PLURAL:$1|is the last change|are the last <strong>$1</strong> changes}} in the last {{PLURAL:$2|hour|<strong>$2</strong> hours}}, as of $3, $4.",
- "wlshowlast": "Show last $1 hours $2 days $3",
+ "wlshowlast": "Show last $1 hours $2 days",
"watchlist-options": "Watchlist options",
"watching": "Watching...",
"unwatching": "Unwatching...",
@@ -1883,7 +1907,6 @@
"deleteprotected": "You cannot delete this page because it has been protected.",
"deleting-backlinks-warning": "'''Warning:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Other pages]] link to or transclude the page you are about to delete.",
"rollback": "Roll back edits",
- "rollback_short": "Rollback",
"rollbacklink": "rollback",
"rollbacklinkcount": "rollback $1 {{PLURAL:$1|edit|edits}}",
"rollbacklinkcount-morethan": "rollback more than $1 {{PLURAL:$1|edit|edits}}",
@@ -1996,6 +2019,7 @@
"namespace": "Namespace:",
"invert": "Invert selection",
"tooltip-invert": "Check this box to hide changes to pages within the selected namespace (and the associated namespace if checked)",
+ "tooltip-whatlinkshere-invert": "Check this box to hide links from pages within the selected namespace.",
"namespace_association": "Associated namespace",
"tooltip-namespace_association": "Check this box to also include the talk or subject namespace associated with the selected namespace",
"blanknamespace": "(Main)",
@@ -2197,7 +2221,7 @@
"movepage-moved-redirect": "A redirect has been created.",
"movepage-moved-noredirect": "The creation of a redirect has been suppressed.",
"articleexists": "A page of that name already exists, or the name you have chosen is not valid.\nPlease choose another name.",
- "cantmove-titleprotected": "You cannot move a page to this location because the new title has been protected from creation",
+ "cantmove-titleprotected": "You cannot move a page to this location because the new title has been protected from creation.",
"movetalk": "Move associated talk page",
"move-subpages": "Move subpages (up to $1)",
"move-talk-subpages": "Move subpages of talk page (up to $1)",
@@ -2219,16 +2243,16 @@
"delete_and_move_confirm": "Yes, delete the page",
"delete_and_move_reason": "Deleted to make way for move from \"[[$1]]\"",
"selfmove": "Source and destination titles are the same;\ncannot move a page over itself.",
- "immobile-source-namespace": "Cannot move pages in namespace \"$1\"",
- "immobile-target-namespace": "Cannot move pages into namespace \"$1\"",
+ "immobile-source-namespace": "Cannot move pages in namespace \"$1\".",
+ "immobile-target-namespace": "Cannot move pages into namespace \"$1\".",
"immobile-target-namespace-iw": "Interwiki link is not a valid target for page move.",
"immobile-source-page": "This page is not movable.",
"immobile-target-page": "Cannot move to that destination title.",
"bad-target-model": "The desired destination uses a different content model. Cannot convert from $1 to $2.",
- "imagenocrossnamespace": "Cannot move file to non-file namespace",
- "nonfile-cannot-move-to-file": "Cannot move non-file to file namespace",
- "imagetypemismatch": "The new file extension does not match its type",
- "imageinvalidfilename": "The target filename is invalid",
+ "imagenocrossnamespace": "Cannot move file to non-file namespace.",
+ "nonfile-cannot-move-to-file": "Cannot move non-file to file namespace.",
+ "imagetypemismatch": "The new file extension does not match its type.",
+ "imageinvalidfilename": "The target filename is invalid.",
"fix-double-redirects": "Update any redirects that point to the original title",
"move-leave-redirect": "Leave a redirect behind",
"protectedpagemovewarning": "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can move it.\nThe latest log entry is provided below for reference:",
@@ -2274,6 +2298,7 @@
"thumbnail-temp-create": "Unable to create temporary thumbnail file",
"thumbnail-dest-create": "Unable to save thumbnail to destination",
"thumbnail_invalid_params": "Invalid thumbnail parameters",
+ "thumbnail_toobigimagearea": "File with dimensions greater than $1",
"thumbnail_dest_directory": "Unable to create destination directory",
"thumbnail_image-type": "Image type not supported",
"thumbnail_gd-library": "Incomplete GD library configuration: Missing function $1",
@@ -2281,8 +2306,8 @@
"thumbnail_image-failure-limit": "There have been too many recent failed attempts ($1 or more) to render this thumbnail. Please try again later.",
"import": "Import pages",
"import-summary": "",
- "importinterwiki": "Transwiki import",
- "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll transwiki import actions are logged at the [[Special:Log/import|import log]].",
+ "importinterwiki": "Import from another wiki",
+ "import-interwiki-text": "Select a wiki and page title to import.\nRevision dates and editors' names will be preserved.\nAll imports from other wikis are logged at the [[Special:Log/import|import log]].",
"import-interwiki-sourcewiki": "Source wiki:",
"import-interwiki-sourcepage": "Source page:",
"import-interwiki-history": "Copy all history revisions for this page",
@@ -2302,7 +2327,7 @@
"importcantopen": "Could not open import file",
"importbadinterwiki": "Bad interwiki link",
"importsuccess": "Import finished!",
- "importnosources": "No transwiki import sources have been defined and direct history uploads are disabled.",
+ "importnosources": "No wikis from which to import have been defined and direct history uploads are disabled.",
"importnofile": "No import file was uploaded.",
"importuploaderrorsize": "Upload of import file failed.\nThe file is bigger than the allowed upload size.",
"importuploaderrorpartial": "Upload of import file failed.\nThe file was only partially uploaded.",
@@ -2349,6 +2374,7 @@
"accesskey-pt-mycontris": "y",
"accesskey-pt-login": "o",
"accesskey-pt-logout": "",
+ "accesskey-pt-createaccount": "",
"accesskey-ca-talk": "t",
"accesskey-ca-edit": "e",
"accesskey-ca-addsection": "+",
@@ -2378,6 +2404,7 @@
"accesskey-feed-atom": "",
"accesskey-t-contributions": "",
"accesskey-t-emailuser": "",
+ "accesskey-t-info": "",
"accesskey-t-permalink": "",
"accesskey-t-print": "p",
"accesskey-t-upload": "u",
@@ -2416,6 +2443,7 @@
"tooltip-pt-mycontris": "A list of your contributions",
"tooltip-pt-login": "You are encouraged to log in; however, it is not mandatory",
"tooltip-pt-logout": "Log out",
+ "tooltip-pt-createaccount": "You are encouraged to create an account and log in; however, it is not mandatory",
"tooltip-ca-talk": "Discussion about the content page",
"tooltip-ca-edit": "You can edit this page. Please use the preview button before saving",
"tooltip-ca-addsection": "Start a new section",
@@ -2445,6 +2473,7 @@
"tooltip-feed-atom": "Atom feed for this page",
"tooltip-t-contributions": "A list of contributions of this user",
"tooltip-t-emailuser": "Send an email to this user",
+ "tooltip-t-info": "More information about this page",
"tooltip-t-upload": "Upload files",
"tooltip-t-specialpages": "A list of all special pages",
"tooltip-t-print": "Printable version of this page",
@@ -2525,7 +2554,6 @@
"pageinfo-robot-policy": "Indexing by robots",
"pageinfo-robot-index": "Allowed",
"pageinfo-robot-noindex": "Disallowed",
- "pageinfo-views": "Number of views",
"pageinfo-watchers": "Number of page watchers",
"pageinfo-few-watchers": "Fewer than $1 {{PLURAL:$1|watcher|watchers}}",
"pageinfo-redirects-name": "Number of redirects to this page",
@@ -2572,6 +2600,7 @@
"patrol-log-page": "Patrol log",
"patrol-log-header": "This is a log of patrolled revisions.",
"log-show-hide-patrol": "$1 patrol log",
+ "log-show-hide-tag": "$1 tag log",
"deletedrevision": "Deleted old revision $1",
"filedeleteerror-short": "Error deleting file: $1",
"filedeleteerror-long": "Errors were encountered while deleting the file:\n\n$1",
@@ -3056,7 +3085,6 @@
"exif-urgency-low": "Low ($1)",
"exif-urgency-high": "High ($1)",
"exif-urgency-other": "User-defined priority ($1)",
- "watchlistall2": "all",
"namespacesall": "all",
"monthsall": "all",
"confirmemail": "Confirm email address",
@@ -3137,6 +3165,15 @@
"size-exabytes": "$1 EB",
"size-zetabytes": "$1 ZB",
"size-yottabytes": "$1 YB",
+ "size-pixel": "$1 P",
+ "size-kilopixel": "$1 KP",
+ "size-megapixel": "$1 MP",
+ "size-gigapixel": "$1 GP",
+ "size-terapixel": "$1 TP",
+ "size-petapixel": "$1 PP",
+ "size-exapixel": "$1 EP",
+ "size-zetapixel": "$1 ZP",
+ "size-yottapixel": "$1 YP",
"bitrate-bits": "$1 bps",
"bitrate-kilobits": "$1 kbps",
"bitrate-megabits": "$1 Mbps",
@@ -3229,9 +3266,9 @@
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
"signature-anon": "[[{{#special:Contributions}}/$1|$2]]",
"timezone-utc": "UTC",
- "unknown_extension_tag": "Unknown extension tag \"$1\"",
"duplicate-defaultsort": "<strong>Warning:</strong> Default sort key \"$2\" overrides earlier default sort key \"$1\".",
"duplicate-displaytitle": "<strong>Warning:</strong> Display title \"$2\" overrides earlier display title \"$1\".",
+ "invalid-indicator-name": "<strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.",
"version": "Version",
"version-summary": "",
"version-extensions": "Installed extensions",
@@ -3286,17 +3323,20 @@
"version-entrypoints-index-php": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:index.php index.php]",
"version-entrypoints-api-php": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:api.php api.php]",
"version-entrypoints-load-php": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:load.php load.php]",
+ "version-libraries": "Installed libraries",
+ "version-libraries-library": "Library",
+ "version-libraries-version": "Version",
"redirect": "Redirect by file, user, page or revision ID",
"redirect-legend": "Redirect to a file or page",
"redirect-text": "",
- "redirect-summary": "This special page redirects to a file (given the file name), a page (given a revision ID or page ID), or a user page (given a numeric user ID). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
+ "redirect-summary": "This special page redirects to a file (given the filename), a page (given a revision ID or page ID), or a user page (given a numeric user ID). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
"redirect-submit": "Go",
"redirect-lookup": "Lookup:",
"redirect-value": "Value:",
"redirect-user": "User ID",
"redirect-page": "Page ID",
"redirect-revision": "Page revision",
- "redirect-file": "File name",
+ "redirect-file": "Filename",
"redirect-not-exists": "Value not found",
"fileduplicatesearch": "Search for duplicate files",
"fileduplicatesearch-summary": "Search for duplicate files based on hash values.",
@@ -3323,6 +3363,7 @@
"specialpages-group-wiki": "Data and tools",
"specialpages-group-redirects": "Redirecting special pages",
"specialpages-group-spam": "Spam tools",
+ "specialpages-group-developer": "Developer tools",
"blankpage": "Blank page",
"intentionallyblankpage": "This page is intentionally left blank.",
"external_image_whitelist": " #Leave this line exactly as it is<pre>\n#Put regular expression fragments (just the part that goes between the //) below\n#These will be matched with the URLs of external (hotlinked) images\n#Those that match will be displayed as images, otherwise only a link to the image will be shown\n#Lines beginning with # are treated as comments\n#This is case-insensitive\n\n#Put all regex fragments above this line. Leave this line exactly as it is</pre>",
@@ -3336,12 +3377,86 @@
"tags-tag": "Tag name",
"tags-display-header": "Appearance on change lists",
"tags-description-header": "Full description of meaning",
+ "tags-source-header": "Source",
"tags-active-header": "Active?",
"tags-hitcount-header": "Tagged changes",
+ "tags-actions-header": "Actions",
"tags-active-yes": "Yes",
"tags-active-no": "No",
+ "tags-source-extension": "Defined by an extension",
+ "tags-source-manual": "Applied manually by users and bots",
+ "tags-source-none": "No longer in use",
"tags-edit": "edit",
+ "tags-delete": "delete",
+ "tags-activate": "activate",
+ "tags-deactivate": "deactivate",
"tags-hitcount": "$1 {{PLURAL:$1|change|changes}}",
+ "tags-manage-no-permission": "You do not have permission to manage change tags.",
+ "tags-create-heading": "Create a new tag",
+ "tags-create-explanation": "By default, newly created tags will be made available for use by users and bots.",
+ "tags-create-tag-name": "Tag name:",
+ "tags-create-reason": "Reason:",
+ "tags-create-submit": "Create",
+ "tags-create-no-name": "You must specify a tag name.",
+ "tags-create-invalid-chars": "Tag names must not contain commas (<code>,</code>) or forward slashes (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Tag names must not contain characters that cannot be used in page titles.",
+ "tags-create-already-exists": "The tag \"$1\" already exists.",
+ "tags-create-warnings-above": "The following {{PLURAL:$2|warning was|warnings were}} encountered when attempting to create the tag \"$1\":",
+ "tags-create-warnings-below": "Do you wish to continue creating the tag?",
+ "tags-delete-title": "Delete tag",
+ "tags-delete-explanation-initial": "You are about to delete the tag \"$1\" from the database.",
+ "tags-delete-explanation-in-use": "It will be removed from {{PLURAL:$2|$2 revision or log entry|all $2 revisions and/or log entries}} to which it is currently applied.",
+ "tags-delete-explanation-warning": "This action is <strong>irreversible</strong> and <strong>cannot be undone</strong>, not even by database administrators. Be certain this is the tag you mean to delete.",
+ "tags-delete-explanation-active": "<strong>The tag \"$1\" is still active, and will continue to be applied in the future.</strong> To stop this from happening, go to the place(s) where the tag is set to be applied, and disable it there.",
+ "tags-delete-reason": "Reason:",
+ "tags-delete-submit": "Irreversibly delete this tag",
+ "tags-delete-not-allowed": "Tags defined by an extension cannot be deleted unless the extension specifically allows it.",
+ "tags-delete-not-found": "The tag \"$1\" does not exist.",
+ "tags-delete-too-many-uses": "The tag \"$1\" is applied to more than $2 {{PLURAL:$2|revision|revisions}}, which means it cannot be deleted.",
+ "tags-delete-warnings-after-delete": "The tag \"$1\" was deleted successfully, but the following {{PLURAL:$2|warning was|warnings were}} encountered:",
+ "tags-activate-title": "Activate tag",
+ "tags-activate-question": "You are about to activate the tag \"$1\".",
+ "tags-activate-reason": "Reason:",
+ "tags-activate-not-allowed": "It is not possible to activate the tag \"$1\".",
+ "tags-activate-not-found": "The tag \"$1\" does not exist.",
+ "tags-activate-submit": "Activate",
+ "tags-deactivate-title": "Deactivate tag",
+ "tags-deactivate-question": "You are about to deactivate the tag \"$1\".",
+ "tags-deactivate-reason": "Reason:",
+ "tags-deactivate-not-allowed": "It is not possible to deactivate the tag \"$1\".",
+ "tags-deactivate-submit": "Deactivate",
+ "tags-apply-no-permission": "You do not have permission to apply change tags along with your changes.",
+ "tags-apply-not-allowed-one": "The tag \"$1\" is not allowed to be manually applied.",
+ "tags-apply-not-allowed-multi": "The following {{PLURAL:$2|tag is|tags are}} not allowed to be manually applied: $1",
+ "tags-update-no-permission": "You do not have permission to add or remove change tags from individual revisions or log entries.",
+ "tags-update-add-not-allowed-one": "The tag \"$1\" is not allowed to be manually added.",
+ "tags-update-add-not-allowed-multi": "The following {{PLURAL:$2|tag is|tags are}} not allowed to be manually added: $1",
+ "tags-update-remove-not-allowed-one": "The tag \"$1\" is not allowed to be removed.",
+ "tags-update-remove-not-allowed-multi": "The following {{PLURAL:$2|tag is|tags are}} not allowed to be manually removed: $1",
+ "tags-edit-title": "Edit tags",
+ "tags-edit-manage-link": "Manage tags",
+ "tags-edit-revision-selected": "{{PLURAL:$1|Selected revision|Selected revisions}} of [[:$2]]:",
+ "tags-edit-logentry-selected": "{{PLURAL:$1|Selected log event|Selected log events}}:",
+ "tags-edit-revision-explanation": "",
+ "tags-edit-logentry-explanation": "",
+ "tags-edit-revision-legend": "Add or remove tags from {{PLURAL:$1|this revision|all $1 revisions}}",
+ "tags-edit-logentry-legend": "Add or remove tags from {{PLURAL:$1|this log entry|all $1 log entries}}",
+ "tags-edit-existing-tags": "Existing tags:",
+ "tags-edit-existing-tags-none": "''None''",
+ "tags-edit-new-tags": "New tags:",
+ "tags-edit-add": "Add these tags:",
+ "tags-edit-remove": "Remove these tags:",
+ "tags-edit-remove-all-tags": "(remove all tags)",
+ "tags-edit-chosen-placeholder": "Select some tags",
+ "tags-edit-chosen-no-results": "No tags found that match",
+ "tags-edit-reason": "Reason:",
+ "tags-edit-revision-submit": "Apply changes to {{PLURAL:$1|this revision|$1 revisions}}",
+ "tags-edit-logentry-submit": "Apply changes to {{PLURAL:$1|this log entry|$1 log entries}}",
+ "tags-edit-success": "The changes were successfully applied.",
+ "tags-edit-failure": "The changes could not be applied:\n$1",
+ "tags-edit-nooldid-title": "Invalid target revision",
+ "tags-edit-nooldid-text": "You have either not specified a target revision(s) to perform this function, or the specified revision does not exist.",
+ "tags-edit-none-selected": "Please select at least one tag to add or remove.",
"comparepages": "Compare pages",
"comparepages-summary": "",
"compare-page1": "Page 1",
@@ -3354,8 +3469,8 @@
"compare-revision-not-exists": "The revision you specified does not exist.",
"dberr-problems": "Sorry! This site is experiencing technical difficulties.",
"dberr-again": "Try waiting a few minutes and reloading.",
- "dberr-info": "(Cannot contact the database server: $1)",
- "dberr-info-hidden": "(Cannot contact the database server)",
+ "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.",
@@ -3396,6 +3511,14 @@
"revdelete-uname-unhid": "username unhidden",
"revdelete-restricted": "applied restrictions to administrators",
"revdelete-unrestricted": "removed restrictions for administrators",
+ "logentry-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|unblocked}} {{GENDER:$4|$3}}",
+ "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",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiry time of $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|imported}} $3 by file upload",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|imported}} $3 from another wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|merged}} $3 into $4 (revisions up to $5)",
"logentry-move-move": "$1 {{GENDER:$2|moved}} page $3 to $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} page $3 to $4 without leaving a redirect",
"logentry-move-move_redir": "$1 {{GENDER:$2|moved}} page $3 to $4 over redirect",
@@ -3413,6 +3536,20 @@
"logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|uploaded}} a new version of $3",
"logentry-upload-revert": "$1 {{GENDER:$2|uploaded}} $3",
+ "log-name-managetags": "Tag management log",
+ "log-description-managetags": "This page lists management tasks related to [[Special:Tags|tags]]. The log contains only actions carried out manually by an administrator; tags may be created or deleted by the wiki software without an entry being recorded in this log.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|created}} the tag \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|deleted}} the tag \"$4\" (removed from $5 {{PLURAL:$5|revision or log entry|revisions and/or log entries}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|activated}} the tag \"$4\" for use by users and bots",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|deactivated}} the tag \"$4\" for use by users and bots",
+ "log-name-tag": "Tag log",
+ "log-description-tag": "This page shows when users have added or removed [[Special:Tags|tags]] from individual revisions or log entries. The log does not list tagging actions when they occur as part of an edit, deletion, or similar action.",
+ "logentry-tag-update-add-revision": "$1 {{GENDER:$2|added}} the {{PLURAL:$7|tag|tags}} $6 to revision $4 of page $3",
+ "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|added}} the {{PLURAL:$7|tag|tags}} $6 to log entry $5 of page $3",
+ "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|removed}} the {{PLURAL:$9|tag|tags}} $8 from revision $4 of page $3",
+ "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|removed}} the {{PLURAL:$9|tag|tags}} $8 from log entry $5 of page $3",
+ "logentry-tag-update-revision": "$1 {{GENDER:$2|updated}} tags on revision $4 of page $3 ({{PLURAL:$7|added}} $6; {{PLURAL:$9|removed}} $8)",
+ "logentry-tag-update-logentry": "$1 {{GENDER:$2|updated}} tags on log entry $5 of page $3 ({{PLURAL:$7|added}} $6; {{PLURAL:$9|removed}} $8)",
"rightsnone": "(none)",
"revdelete-logentry": "changed revision visibility of \"[[$1]]\"",
"logdelete-logentry": "changed event visibility of \"[[$1]]\"",
@@ -3437,19 +3574,29 @@
"newuserlog-autocreate-entry": "Account created automatically",
"rightslogentry": "changed group membership for $1 from $2 to $3",
"rightslogentry-autopromote": "was automatically promoted from $2 to $3",
+ "feedback-adding": "Adding feedback to page...",
+ "feedback-back": "Back",
+ "feedback-bugcheck": "Great! Just check that it is not already one of the [$1 known bugs].",
+ "feedback-bugnew": "I checked. Report a new bug",
"feedback-bugornote": "If you are ready to describe a technical problem in detail please [$1 report a bug].\nOtherwise, you can use the easy form below. Your comment will be added to the page \"[$3 $2]\", along with your username.",
- "feedback-subject": "Subject:",
- "feedback-message": "Message:",
"feedback-cancel": "Cancel",
- "feedback-submit": "Submit Feedback",
- "feedback-adding": "Adding feedback to page...",
+ "feedback-close": "Done",
+ "feedback-external-bug-report-button": "File a technical task",
+ "feedback-dialog-title": "Submit feedback",
+ "feedback-dialog-intro": "You can use the easy form below to submit your feedback. Your comment will be added to the page \"$1\", along with your username.",
+ "feedback-error-title": "Error",
"feedback-error1": "Error: Unrecognized result from API",
"feedback-error2": "Error: Edit failed",
"feedback-error3": "Error: No response from API",
+ "feedback-error4": "Error: Unable to post to given feedback title",
+ "feedback-message": "Message:",
+ "feedback-subject": "Subject:",
+ "feedback-submit": "Submit",
+ "feedback-terms": "I understand that my user agent information includes information about my exact browser and operating system version and will be shared publicly alongside my feedback.",
+ "feedback-termsofuse": "I agree to provide feedback in accordance with the Terms of Use.",
"feedback-thanks": "Thanks! Your feedback has been posted to the page \"[$2 $1]\".",
- "feedback-close": "Done",
- "feedback-bugcheck": "Great! Just check that it is not already one of the [$1 known bugs].",
- "feedback-bugnew": "I checked. Report a new bug",
+ "feedback-thanks-title": "Thank you!",
+ "feedback-useragent": "User agent:",
"searchsuggest-search": "Search",
"searchsuggest-containing": "containing...",
"api-error-badaccess-groups": "You are not permitted to upload files to this wiki.",
@@ -3485,6 +3632,13 @@
"api-error-stashfailed": "Internal error: Server failed to store temporary file.",
"api-error-publishfailed": "Internal error: Server failed to publish temporary file.",
"api-error-stasherror": "There was an error while uploading the file to stash.",
+ "api-error-stashedfilenotfound": "The stashed file was not found when attempting to upload it from the stash.",
+ "api-error-stashpathinvalid": "The path at which the stashed file should have been found was invalid.",
+ "api-error-stashfilestorage": "There was an error while storing the file in the stash.",
+ "api-error-stashzerolength": "The server could not stash the file, because it had zero length.",
+ "api-error-stashnotloggedin": "You must be logged in to save files in the upload stash.",
+ "api-error-stashwrongowner": "The file you were attempting to access in the stash does not belong to you.",
+ "api-error-stashnosuchfilekey": "The file key you were attempting to access in the stash does not exist.",
"api-error-timeout": "The server did not respond within the expected time.",
"api-error-unclassified": "An unknown error occurred.",
"api-error-unknown-code": "Unknown error: \"$1\".",
@@ -3545,8 +3699,8 @@
"log-name-pagelang": "Change language log",
"log-description-pagelang": "This is a log of changes in page languages.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|changed}} page language for $3 from $4 to $5.",
- "default-skin-not-found": "Whoops! The default skin for your wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable them and choose the default.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following lines into <code>LocalSettings.php</code> to enable all currently installed skins:\n\n<pre dir=\"ltr\">$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
- "default-skin-not-found-no-skins": "Whoops! The default skin for your wiki, defined in <code>$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYou have no installed skins.\n\n; If you have just installed or upgraded MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.\n",
+ "default-skin-not-found": "Whoops! The default skin for your wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable them and choose the default.\n\n$2\n\n; If you have just installed MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n; If you have just upgraded MediaWiki:\n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following lines into <code>LocalSettings.php</code> to enable all currently installed skins:\n\n<pre dir=\"ltr\">$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>:\n: Double-check the skin names for typos.",
+ "default-skin-not-found-no-skins": "Whoops! The default skin for your wiki, defined in <code>$wgDefaultSkin</code> as <code>$1</code>, is not available.\n\nYou have no installed skins.\n\n; If you have just installed or upgraded MediaWiki:\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by:\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it.\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation.\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.\n",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enabled)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabled''')",
"mediastatistics": "Media statistics",
@@ -3576,5 +3730,28 @@
"json-error-utf8": "Malformed UTF-8 characters, possibly incorrectly encoded",
"json-error-recursion": "One or more recursive references in the value to be encoded",
"json-error-inf-or-nan": "One or more NAN or INF values in the value to be encoded",
- "json-error-unsupported-type": "A value of a type that cannot be encoded was given"
+ "json-error-unsupported-type": "A value of a type that cannot be encoded was given",
+ "headline-anchor-title": "Link to this section",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Latin extended",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symbols",
+ "special-characters-group-greek": "Greek",
+ "special-characters-group-cyrillic": "Cyrillic",
+ "special-characters-group-arabic": "Arabic",
+ "special-characters-group-arabicextended": "Arabic extended",
+ "special-characters-group-persian": "Persian",
+ "special-characters-group-hebrew": "Hebrew",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "en dash",
+ "special-characters-title-emdash": "em dash",
+ "special-characters-title-minus": "minus sign"
}
diff --git a/languages/i18n/eo.json b/languages/i18n/eo.json
index cd67bc2e..47032182 100644
--- a/languages/i18n/eo.json
+++ b/languages/i18n/eo.json
@@ -55,6 +55,7 @@
"tog-watchdefault": "Aldoni al mia atentaro paĝojn kaj dosierojn redaktitajn de mi",
"tog-watchmoves": "Aldoni paĝojn kaj dosierojn, kiujn mi movas, al mia atentaro",
"tog-watchdeletion": "Aldoni paĝojn kaj dosierojn, kiujn mi forigas, al mia atentaro",
+ "tog-watchrollback": "Aldoni paĝojn, kie mi amasmalfaris, al mia atentaro.",
"tog-minordefault": "Marki defaŭlte ĉiujn redaktojn kiel etajn",
"tog-previewontop": "Montri antaŭrigardon antaŭ redaktilo",
"tog-previewonfirst": "Montri antaŭrigardon je unua redakto",
@@ -65,7 +66,7 @@
"tog-shownumberswatching": "Montri la nombron da priatentaj uzantoj",
"tog-oldsig": "Ekzistanta subskribo:",
"tog-fancysig": "Trakti subskribon kiel vikitekston (sen aŭtomata ligo)",
- "tog-uselivepreview": "Uzi tujan antaŭrigardon (per ĜavaSkripto) (Eksperimenta)",
+ "tog-uselivepreview": "Uzadi tujan antaŭrigardon",
"tog-forceeditsummary": "Averti min kiam mi konservas malplenan redaktoresumon",
"tog-watchlisthideown": "Kaŝi miajn redaktojn de la atentaro",
"tog-watchlisthidebots": "Kaŝi robotajn redaktojn de la atentaro",
@@ -248,9 +249,12 @@
"jumptonavigation": "navigado",
"jumptosearch": "serĉi",
"view-pool-error": "Bedaŭrinde la serviloj estas tro uzataj ĉi-momente.\nTro da uzantoj provas vidi ĉi tiun paĝon.\nBonvolu atendi iom antaŭ ol provi atingi ĝin denove.\n\n$1",
+ "generic-pool-error": "Bedaŭrinde la serviloj estas tro uzataj ĉi-momente.\nTro da uzantoj provas vidi ĉi tiun risurcon.\nBonvolu iom atendi antaŭ vi provos atingi ĝin denove.",
"pool-timeout": "Tempolimo atingita dum atendo de ŝlosado",
"pool-queuefull": "Atendovico de servilaro estas plena.",
"pool-errorunknown": "Nekonata eraro",
+ "pool-servererror": "La servo manaĝanta aliron al serviloj ne estas disponebla ($1).",
+ "poolcounter-usage-error": "Uzeraro: $1",
"aboutsite": "Pri {{SITENAME}}",
"aboutpage": "Project:Enkonduko",
"copyright": "La enhavo estas disponebla laŭ $1, se ne estas alia indiko.",
@@ -342,6 +346,8 @@
"filerenameerror": "Ne eblis alinomigi dosieron \"$1\" al \"$2\".",
"filedeleteerror": "Neeblis forigi dosieron \"$1\".",
"directorycreateerror": "Ne povis krei dosierujon \"$1\".",
+ "directoryreadonlyerror": "Dosierujo \"$1\" estas nurlega.",
+ "directorynotreadableerror": "Dosierujo \"$1\" estas nelegebla.",
"filenotfound": "Ne eblis trovi dosieron \"$1\".",
"unexpected": "Neatendita valoro: \"$1\"=\"$2\".",
"formerror": "Eraro: ne eblis liveri formulon",
@@ -363,7 +369,8 @@
"viewsourcetext": "Vi povas rigardi kaj kopii la fonton de la paĝo:",
"viewyourtext": "Vi povas vidi kaj kopii la fonton de '''viaj redaktoj''' al ĉi tiu paĝo:",
"protectedinterface": "Ĉi tiu paĝo provizas interfacan tekston por la programaro, kaj estas ŝlosita por malebligi misuzon.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
- "editinginterface": "'''Atentu:''' Vi redaktas paĝon, kiu provizas interfacan tekston por la programaro.\nŜanĝoj de ĉi tiu teksto ŝanĝos aspekton de la interfaco por aliaj uzantoj de ĉi tiu vikio.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
+ "editinginterface": "<strong>Atentu:</strong> Vi redaktas paĝon, kiu provizas interfacan tekston por la programaro.\nŜanĝoj de ĉi tiu teksto ŝanĝos aspekton de la interfaco por aliaj uzantoj de ĉi tiu vikio.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
+ "translateinterface": "Por ŝanĝi tradukaĵojn por ĉiuj vikioj bonvolu uzi [//translatewiki.net/ translatewiki.net], la komunan tradukan projekton de MediaWiki.",
"cascadeprotected": "Ĉi tiu paĝo estas protektita kontraŭ redaktado, ĉar ĝi estas inkludita en la {{PLURAL:$1|sekvan paĝon, kiu|sekvajn paĝojn, kiuj}} estas {{PLURAL:$1|protektata|protektataj}} kun la \"kaskada\" opcio ŝaltita sur:\n$2",
"namespaceprotected": "Vi ne rajtas redakti paĝojn en la '''$1''' nomspaco.",
"customcssprotected": "Vi ne rajtas redakti ĉi tiun CSS-paĝon, ĉar ĝi enhavas personajn alĝustigojn de alia uzanto.",
@@ -420,6 +427,8 @@
"userlogin-resetlink": "Ĉu vi forgesis ensalutajn detalojn?",
"userlogin-resetpassword-link": "Ĉu vi forgesis vian pasvorton?",
"userlogin-helplink2": "Helpo pri ensaluto",
+ "userlogin-loggedin": "Vi jam estas ensalutita kiel {{GENDER:$1|$1}}.\nUzu la formularon suben por ensaluti kiel alia uzanto.",
+ "userlogin-createanother": "Krei alian konton",
"createacct-emailrequired": "Retpoŝta adreso",
"createacct-emailoptional": "Retpoŝta adreso (nedeviga)",
"createacct-email-ph": "Enigu vian retpoŝtan adreson",
@@ -481,6 +490,7 @@
"createaccount-text": "Iu kreis konton por via retadreso en {{SITENAME}} ($4) nomata \"$2\", kun pasvorto \"$3\". Vi ensalutu kaj ŝanĝu vian pasvorton nun.\n\nVi povas ignori ĉi tiun mesaĝon, se ĉi tiu konto estis kreita erare.",
"login-throttled": "Vi ĵus tro ofte provis ensaluti.\nBonvolu ĝisatendi $1 antaŭ reprovi.",
"login-abort-generic": "Via ensaluto malsukcesis - Ĉesigita",
+ "login-migrated-generic": "Via konto estis migrita kaj via uzantonomo ne plu ekzistas en tiu ĉi vikio.",
"loginlanguagelabel": "Lingvo: $1",
"suspicious-userlogout": "Via peto por elsaluti estis malpermesita, ĉar verŝajne ĝi estis sendita de trompita retumilo aŭ kaŝiĝanta prokura servilo.",
"createacct-another-realname-tip": "La vera nomo estas nenecesa.\nSe vi decidas indiki ĝin, ĝi estos uzata por montri atribuadon de viaj kontribuoj.",
@@ -575,9 +585,11 @@
"preview": "Antaŭrigardo",
"showpreview": "Antaŭrigardo",
"showdiff": "Montri ŝanĝojn",
+ "blankarticle": "<strong>Atentigo:</strong>La paĝo kiun vi kreas estas malplena.\nSe vi denove klakos al \"{{int:savearticle}}\" la paĝo estos konservita sen enhavo.",
"anoneditwarning": "<strong>Averto:</strong> Vi ne estas ensalutinta.\nVia IP-adreso enregistriĝos en la redakta historio de tiu ĉi paĝo. Se vi <strong>[$1 ensalutas]</strong> aŭ <strong>[$2 kreas konton]</strong>, viaj redaktoj estos atribuitaj al via salutnomo, kune kun aliaj bonaĵoj.",
"anonpreviewwarning": "''Vi ne estas ensalutita. La konservo de la paĝo registros vian IP-adreson en redakta historio de ĉi tiu paĝo.''",
"missingsummary": "'''Rememorigilo:''' Vi ne provizis redaktan resumon. Se vi alklakos denove la konservan butonon, via redaktaĵo estos konservita sen resumo.",
+ "selfredirect": "<strong>Atentigo:</strong> Ve alidirektas tiun ĉi paĝon al ĝi mem. Vi eble volas difini alian celan paĝon aŭ vi volas redakti alian paĝon.\nSe vi denove klakos al \"{{int:savearticle}}\", la alidirektilo estos ĉiuokaze kreita.",
"missingcommenttext": "Bonvolu entajpi komenton malsupre.",
"missingcommentheader": "'''Atenton:''' Vi ne provizis temon aŭ subtitolon por ĉi tiu komento.\nSe vi klakos \"Konservi\" denove, via redakto estos konservita sen ĝi.",
"summary-preview": "Resuma antaŭrigardo:",
@@ -655,7 +667,7 @@
"permissionserrorstext": "Vi ne rajtas fari tion pro la {{PLURAL:$1|sekva kialo|sekvaj kialoj}}:",
"permissionserrorstext-withaction": "Vi ne rajtas $2, pro la {{PLURAL:$1|jena kialo|jenaj kialoj}}:",
"recreate-moveddeleted-warn": "'''Averto: Vi rekreas paĝon, kiu estis antaŭe forigita.'''\n\nVi konsideru, ĉu konvenas daŭre redakti ĉi tiun paĝon.\nJen la protokolo de forigoj kaj alinomigado por via oportuno:",
- "moveddeleted-notice": "Ĉi tiu paĝo estis forigita.\nJen la protokolo pri forigado kaj alinomigado por via referenco.",
+ "moveddeleted-notice": "Ĉi tiu paĝo estis forigita.\nPliaj detaloj estas en protokolo pri forigado kaj alinomado de tiu ĉi paĝo.",
"log-fulllog": "Vidi kompletan protokolon",
"edit-hook-aborted": "Redakto estis ĉesigita per etendaĵo de la Vikia softvaro.\nĜi ne donis eksplikon.",
"edit-gone-missing": "Ne eblis ĝisdatigi la paĝon.\nVerŝajne ĝi estis forigita.",
@@ -676,6 +688,10 @@
"content-model-text": "ordinara teksto",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Malplena objeto",
+ "content-json-empty-array": "Malplena tabelo",
+ "duplicate-args-category": "Paĝoj kun pluroblaj argumentoj en ŝablonvokoj",
+ "duplicate-args-category-desc": "La paĝo enhavas uzon de ŝablono kun pluroble uzitaj argumentoj, kiel ekzemple <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> aŭ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Averto: Ĉi tiu paĝo enhavas tro da multekostaj sintaksaj funkcio-vokoj.\n\nĜi havu malpli ol $2 {{PLURAL:$2|vokon|vokojn}}, sed nun estas $1 {{PLURAL:$1|voko|vokoj}}.",
"expensive-parserfunction-category": "Paĝoj kun tro da multekostaj sintaksaj funkcio-vokoj",
"post-expand-template-inclusion-warning": "Averto: Inkluziva pezo de ŝablonoj estas tro granda.\nIuj ŝablonoj ne estos inkluzivitaj.",
@@ -686,8 +702,10 @@
"parser-template-recursion-depth-warning": "Ŝablona profundeco transpasis limon ($1)",
"language-converter-depth-warning": "Profundo de lingvo-konvertilo preterpasis limon ($1)",
"node-count-exceeded-category": "Paĝoj kie la nombro da nodoj estas preterpasita",
+ "node-count-exceeded-category-desc": "La paĝo superis maksimuman nombron de nodoj.",
"node-count-exceeded-warning": "Paĝo preterpasis la nombron da nodoj.",
"expansion-depth-exceeded-category": "Paĝoj en kiuj la ekpansiprofundo estas preterpasita",
+ "expansion-depth-exceeded-category-desc": "La paĝo superis maksimuman profundecon de ekspando.",
"expansion-depth-exceeded-warning": "Paĝo preterpasis la ekpansiprofundon.",
"parser-unstrip-loop-warning": "Cirkloreferencon detektis",
"parser-unstrip-recursion-limit": "Rikurlimiton de analizopoj ($1) superis",
@@ -728,9 +746,10 @@
"history-feed-empty": "La petita paĝo ne ekzistas.\nĜi verŝajne estis forigita de la vikio, aŭ alinomita.\nProvu [[Special:Search|serĉi en la vikio]] por rilataj novaj paĝoj.",
"rev-deleted-comment": "(komento forigita)",
"rev-deleted-user": "(uzanto-nomo forigita)",
- "rev-deleted-event": "(protokola ago forigita)",
+ "rev-deleted-event": "(protokolaj detaloj forigitaj)",
"rev-deleted-user-contribs": "[salutnomo aŭ IP-adreso estis forigita - redakto estas kaŝita en kontribuoj]",
"rev-deleted-text-permission": "Ĉi tiu revizio de la paĝo estis '''forigita'''.\nEble estas detaloj en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} protokolo pri forigado].",
+ "rev-suppressed-text-permission": "Ĉi tiu paĝa revizio estis '''kaŝita'''.\nDetaloj estas troveblaj en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} protokolo pri kaŝitoj revizioj].",
"rev-deleted-text-unhide": "Ĉi tiu revizio de la paĝo estis '''forigita'''.\nDetaloj estas troveblaj en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolo pri forigado].\nVi ankoraŭ povas [$1 vidi ĉi tiun revizion] se vi volas kontinui.",
"rev-suppressed-text-unhide": "Ĉi tiu paĝa revizio estis '''kaŝita'''.\nDetaloj estas troveblaj en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} protokolo pri kaŝado].\nVi povas ankoraŭ [$1 rigardi ĉi tiun revizion] se vi volas daŭrigi.",
"rev-deleted-text-view": "Ĉi tiu revizio de la paĝo estis '''forigita'''.\nVi povas rigardi ĝin; detaloj estas trovebla en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} protokolo pri forigado].",
@@ -754,13 +773,14 @@
"logdelete-selected": "{{PLURAL:$1|Selektata protokola evento|Selektataj protokolaj eventoj}}:",
"revdelete-text-text": "Forigitaj versioj ankoraŭ restas en la versia historio, sed partoj de ilia enhavo ne estas alireblaj por la publiko.",
"revdelete-text-file": "Forigitaj dosieraj versioj ankoraŭ restas en la dosiera historio, sed partoj de ilia enhavo ne estas alireblaj por la publiko.",
- "revdelete-text-others": "Aliaj administrantoj sur {{SITENAME}} ankoraŭ havas aliron al la kaŝita enhavo kaj povas malforigi ĝin denove per ĉi tiu sama interfaco, tiel longe kiel aldonaj restriktoj ne estas difinitaj.",
+ "logdelete-text": "Forigitaj protokolaĵoj plu aperos en la protokolo, sed partoj de ilia enhavo ne estos alireblaj por publiko.",
+ "revdelete-text-others": "Aliaj administrantoj ankoraŭ havas aliron al la kaŝita enhavo kaj povas malforigi ĝin, tiel longe kiel aldonaj restriktoj ne estas difinitaj.",
"revdelete-confirm": "Bonvolu konfirmi ke vi intencias fari ĉi tion, ke vi komprenas la konsekvencojn kaj ke vi faras ĉi tion laŭ [[{{MediaWiki:Policy-url}}|la regularo]].",
"revdelete-suppress-text": "Subpremo '''nur''' estu uzata por la jenaj kazoj:\n* Ebla kalumnia informo\n* Netaŭga persona informo\n*: ''hejmaj adresoj kaj telefonnumeroj, ŝtataj identnumeroj, ktp.''",
"revdelete-legend": "Fari videblecajn limigojn",
"revdelete-hide-text": "Teksto de revizio",
"revdelete-hide-image": "Kaŝi enhavon de dosieroj",
- "revdelete-hide-name": "Kaŝi agon kaj celon",
+ "revdelete-hide-name": "Kaŝi celon kaj parametrojn",
"revdelete-hide-comment": "Resumo de redakto",
"revdelete-hide-user": "Salutnomo de redaktanto/IP-adreso",
"revdelete-hide-restricted": "Subpremi ĉi tiujn datenojn de administrantoj kaj ankaŭ aliaj",
@@ -804,6 +824,7 @@
"mergehistory-empty": "Neniuj versioj estas kunigeblaj.",
"mergehistory-success": "$3 {{PLURAL:$3|versio|versioj}} de [[:$1]] sukcese {{PLURAL:$3|kunigita|kunigitaj}} en [[:$2]].",
"mergehistory-fail": "Ne povis fari la historian kunigon; bonvolu konstati la paĝajn kaj tempajn parametrojn.",
+ "mergehistory-fail-toobig": "Ne eblas kunigi historiojn ĉar pli ol sojlo de $1 {{PLURAL:$1|revizio|revizioj}} estus {{PLURAL:$1|movita|movitaj}}.",
"mergehistory-no-source": "Fontpaĝo $1 ne ekzistas.",
"mergehistory-no-destination": "Celpaĝo $1 ne ekzistas.",
"mergehistory-invalid-source": "Fontpaĝo devas esti valida titolo.",
@@ -813,7 +834,6 @@
"mergehistory-same-destination": "Fontaj kaj destinaj paĝoj ne povas esti la samon",
"mergehistory-reason": "Kialo:",
"mergelog": "Protokolo de kunigoj",
- "pagemerge-logentry": "kunigis [[$1]] en [[$2]] (versioj ĝis $3)",
"revertmerge": "Malkunigi",
"mergelogpagetext": "Jen listo de la plej lastatempaj kunigoj de unu paĝhistorio en alian.",
"history-title": "Revizio-historio de \"$1\"",
@@ -854,6 +874,8 @@
"search-result-category-size": "{{PLURAL:$1|1 membro|$1 membroj}} ({{PLURAL:$2|1 subkategorio|$2 subkategorioj}}, {{PLURAL:$3|1 dosiero|$3 dosieroj}})",
"search-redirect": "(alidirektilo $1)",
"search-section": "(sekcio $1)",
+ "search-category": "(kategorio $1)",
+ "search-file-match": "(kongruas kun dosiera enhavo)",
"search-suggest": "Ĉu vi intenciis: $1",
"search-interwiki-caption": "Kunprojektoj",
"search-interwiki-default": "Rezultoj de $1:",
@@ -863,6 +885,7 @@
"searchall": "ĉiuj",
"showingresults": "Montras {{PLURAL:$1|'''1''' trovitan|'''$1''' trovitajn}} ekde la #'''$2'''-a.",
"showingresultsinrange": "Malsupre montriĝas {{PLURAL:$1|<strong>1</strong> rezulto|<strong>$1</strong> rezultoj}} en la intervalo #<strong>$2</strong> ĝis #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Rezulto <strong>$1</strong> el <strong>$3</strong>|Rezultoj <strong>$1 - $2</strong> el <strong>$3</strong>}}",
"search-nonefound": "La serĉomendo rezultis kun neniuj trafoj.",
"powersearch-legend": "Progresa serĉo",
"powersearch-ns": "Serĉi en nomspacoj:",
@@ -876,7 +899,7 @@
"preferences": "Preferoj",
"mypreferences": "Preferoj",
"prefs-edits": "Nombro de redaktoj:",
- "prefsnologintext2": "Bonvolu $1, por ŝanĝi viajn preferojn.",
+ "prefsnologintext2": "Bonvolu ensaluti, por ŝanĝi viajn preferojn.",
"prefs-skin": "Etoso",
"skin-preview": "Antaŭrigardo",
"datedefault": "Nenia prefero",
@@ -885,6 +908,11 @@
"prefs-personal": "Profilo de uzanto",
"prefs-rc": "Lastaj ŝanĝoj",
"prefs-watchlist": "Atentaro",
+ "prefs-editwatchlist": "Redakti atentaron",
+ "prefs-editwatchlist-label": "Redakti erojn de via atentaro:",
+ "prefs-editwatchlist-edit": "Montri kaj forigi erojn de vi atentaro",
+ "prefs-editwatchlist-raw": "Redakti krudan atentaron",
+ "prefs-editwatchlist-clear": "Malplenigi vian atentaron",
"prefs-watchlist-days": "Kiom da tagoj montriĝu en la atentaro:",
"prefs-watchlist-days-max": "Maksimume $1 {{PLURAL:$1|tago|tagoj}}",
"prefs-watchlist-edits": "Maksimuma nombro de ŝanĝoj montrendaj en ekspandita atentaro:",
@@ -954,7 +982,7 @@
"gender-female": "Ina",
"prefs-help-gender": "Nedeviga: uzita por sekseca salutado de la programaro. Ĉi tiu informo montriĝos publike.",
"email": "Retadreso",
- "prefs-help-realname": "* Vera nomo (opcia): se vi elektas sciigi ĝin, ĝi estos uzita por aŭtorigi vin pri viaj kontribuoj.",
+ "prefs-help-realname": "* Vera nomo estas nedeviga.\nSe vi elektas sciigi ĝin, ĝi estos uzita por aŭtorigi vin por viaj kontribuoj.",
"prefs-help-email": "Retadreso estas nedeviga, sed ebligas ke via pasvorto estos reagordota, se vi estos forgesinta ĝin.",
"prefs-help-email-others": "Vi povas elekti ke aliaj povas kontakti vin per via uzanto-paĝo aŭ parol-paĝo sen la neceso malkaŝi vian identecon.",
"prefs-help-email-required": "Ret-adreso estas bezonata.",
@@ -975,6 +1003,7 @@
"prefs-tokenwatchlist": "Ĵetono",
"prefs-diffs": "Diferencoj",
"prefs-help-prefershttps": "Ĉi tiu agordo ekefikos je via sekva ensaluto.",
+ "prefswarning-warning": "Vi faris ŝanĝojn al viaj agordoj, kiuj ankoraŭ ne estas konservitaj.\nSe vi foriros de tiu ĉi paĝo sen klaki al \"$1\", viaj agordoj ne estos ĝisdatigitaj.",
"prefs-tabs-navigation-hint": "Konsileto: Vi povas uzi la maldekstran kaj dekstran sagajn klavojn por navigi inter la langetoj en la langeta listo.",
"email-address-validity-valid": "Ŝajnas ke la retpoŝtadreso estas valida",
"email-address-validity-invalid": "Tajpu validan retpoŝtadreson",
@@ -1049,6 +1078,7 @@
"right-browsearchive": "Serĉi forigitajn paĝojn",
"right-undelete": "Restarigi paĝon",
"right-suppressrevision": "Montri, kaŝi kaj malkaŝi specifajn paĝajn versiojn de ajna uzanto",
+ "right-viewsuppressed": "Vidi reviziojn kaŝite de iu ajn uzanto",
"right-suppressionlog": "Vidi privatajn protokolojn",
"right-block": "Forbari aliajn uzantoj de redaktado",
"right-blockemail": "Forbari uzanton de retpoŝta sendado",
@@ -1059,6 +1089,7 @@
"right-protect": "Ŝanĝi protektniveloj kaj redakti protektitajn paĝojn",
"right-editprotected": "Redakti protektitajn paĝojn (sen kaskada protektado)",
"right-editsemiprotected": "Redakti paĝojn protektitajn kiel \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Redakti paĝan enhavmodelon",
"right-editinterface": "Redakti la uzantointerfacon",
"right-editusercssjs": "Redaktu CSS- kaj JS-dosierojn de aliaj uzantoj",
"right-editusercss": "Redaktu CSS-dosierojn de aliaj uzantoj",
@@ -1086,6 +1117,7 @@
"right-override-export-depth": "Eksporti paĝojn inkluzivante ligitajn paĝojn ĝis profundeco de 5",
"right-sendemail": "Sendi retpoŝton al aliaj uzantoj",
"right-passwordreset": "Vidi retpoŝtojn de pasvorta restarado.",
+ "right-managechangetags": "Kreado kaj forigado de [[Special:Tags|etikedoj]] de datumbazo",
"newuserlogpage": "Protokolo de uzanto-kreado",
"newuserlogpagetext": "Jen protokolo de lastaj kreadoj de uzantoj.",
"rightslog": "Protokolo de uzanto-rajtoj",
@@ -1131,6 +1163,8 @@
"action-viewmywatchlist": "vidi vian atento-liston",
"action-viewmyprivateinfo": "vidi viajn privatajn informojn",
"action-editmyprivateinfo": "redakti viajn privatajn informojn",
+ "action-editcontentmodel": "redakti paĝan enhavmodelon",
+ "action-managechangetags": "krei kaj forigi etikedojn de datumbazo",
"nchanges": "$1 {{PLURAL:$1|ŝanĝo|ŝanĝoj}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ekde lasta vizito}}",
"enhancedrc-history": "historio",
@@ -1146,7 +1180,7 @@
"recentchanges-label-plusminus": "La paĝa grandeco ŝanĝiĝis je ĉi tiu nombro de bajtoj",
"recentchanges-legend-heading": "'''Klarigo:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vidu ankaŭ [[Special:NewPages|liston de novaj paĝoj]])",
- "rcnotefrom": "Malsupre estas ŝanĝoj ekde <strong>$2</strong> ({{PLURAL:$1|lasta|lastaj}} <strong>$1</strong>).",
+ "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 redaktetojn",
"rcshowhideminor-show": "Montri",
@@ -1200,9 +1234,9 @@
"uploaderror": "Eraro okazis dum alŝuto",
"upload-recreate-warning": "''Atenton: dosiero kun tiu nomo estis forigita aŭ alinomita.'''\n\nLa forigo kaj mova protokoloj por ĉi tiu paĝo estas provizitaj ĉi tie por oportuno:",
"uploadtext": "Uzu la jenan formularon por alŝuti dosierojn.\nVidi aŭ serĉi antaŭe alŝutitajn bildojn, iru al [[Special:FileList|Listo de alŝutitaj dosieroj]]; (re)alŝutaĵoj ankaŭ estas registrita en la [[Special:Log/upload|Protokolo de alŝutoj]], forigoj en la [[Special:Log/delete|protokolo de forigoj]].\n\nPor inkluzivi la dosieron en paĝon, skribu ligilon laŭ la formoj\n\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bildo.jpg]]</nowiki>''' por uzi la plenan version de la dosiero\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bildo.png|200px|thumb|left|alternativa teksto]]</nowiki>''' por uzi 200-rastrumeran version en kesto maldekstre (\"left\") kun \"alternativa teksto\" kiel priskribo.\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dosiero.ogg]]</nowiki>''' por ligi rekte al la dosiero ne montrante la dosieron.",
- "upload-permitted": "Permesitaj dosiertipoj: $1.",
- "upload-preferred": "Preferitaj dosiertipoj: $1.",
- "upload-prohibited": "Malpermesitaj dosiero-tipoj: $1.",
+ "upload-permitted": "{{PLURAL:$2|Permesita dosiertipo|Permesitaj dosiertipoj}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Preferata dosiertipo|Preferataj dosiertipoj}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Malpermesita dosiertipo|Malpermesitaj dosiertipoj}}: $1.",
"uploadlogpage": "Protokolo de alŝutoj",
"uploadlogpagetext": "Jen la plej laste alŝutitaj dosieroj.\nĈiuj tempoj montriĝas laŭ la horzono UTC.",
"filename": "Dosiernomo",
@@ -1296,7 +1330,7 @@
"backend-fail-alreadyexists": "La dosiero \"$1\" jam ekzistas.",
"backend-fail-store": "Ne povis konservi dosieron $1 ĉe $2.",
"backend-fail-copy": "Ne povis kopii dosieron $1 al $2.",
- "backend-fail-move": "Ne povis movi dosieron $1 al $2.",
+ "backend-fail-move": "Ne povis movi dosieron \"$1\" al \"$2\".",
"backend-fail-opentemp": "Ne povis malfermi provizoran dosieron.",
"backend-fail-writetemp": "Ne povis skribi intertempan dosieron.",
"backend-fail-closetemp": "Ne povis fermi provizoran dosieron.",
@@ -1358,8 +1392,9 @@
"license": "Permesiloj:",
"license-header": "Permesiloj:",
"nolicense": "Neniu elektita",
+ "licenses-edit": "Modifi opciojn de permesilo",
"license-nopreview": "(Antaŭvido ne montrebla)",
- "upload_source_url": " (valida, publike atingebla URL-o)",
+ "upload_source_url": " (via elektita dosiero de valida, publike atingebla URL-o)",
"upload_source_file": "(dosiero elektita de via komputilo)",
"listfiles-delete": "forigi",
"listfiles-summary": "Ĉi tiu speciala paĝo montras ĉiujn alŝutitajn dosierojn.\nKiam oni filtras ĝin laŭ uzanto, nur la aktuala versio de la dosiero estos montrita.",
@@ -1458,7 +1493,6 @@
"statistics": "Statistiko",
"statistics-header-pages": "Paĝaj statistikoj",
"statistics-header-edits": "Redaktaj statistikoj",
- "statistics-header-views": "Vidi statistikojn",
"statistics-header-users": "Pri la uzantaro",
"statistics-header-hooks": "Aliaj statistikoj",
"statistics-articles": "Enhavaj paĝoj",
@@ -1467,13 +1501,9 @@
"statistics-files": "Alŝutitaj dosieroj",
"statistics-edits": "Paĝaj redaktoj ekde {{SITENAME}} estis starigita",
"statistics-edits-average": "Averaĝa kvanto de redaktoj je paĝo",
- "statistics-views-total": "Vidoj entutaj",
- "statistics-views-total-desc": "Ne inkluzivante vidojn al ne-ekzistantaj paĝoj kaj specialaj paĝoj",
- "statistics-views-peredit": "Po rigardoj por redakto",
"statistics-users": "Registritaj [[Special:ListUsers|uzantoj]]",
"statistics-users-active": "Aktivaj uzantoj",
"statistics-users-active-desc": "Uzantoj kiuj faris agon en la {{PLURAL:$1|lasta tago|lastaj $1 tagoj}}",
- "statistics-mostpopular": "Plej ofte montrataj paĝoj",
"pageswithprop": "Paĝoj kun paĝa atributo",
"pageswithprop-legend": "Paĝoj kun paĝa atributo",
"pageswithprop-text": "Ĉi tiu paĝo listigas paĝoj kiu uzas iajn paĝajn ecojn.",
@@ -1514,13 +1544,14 @@
"uncategorizedtemplates": "Neenkategoriigitaj ŝablonoj",
"unusedcategories": "Neuzitaj kategorioj",
"unusedimages": "Neuzataj bildoj",
- "popularpages": "Plej vizitataj paĝoj",
"wantedcategories": "Dezirataj kategorioj",
"wantedpages": "Dezirataj paĝoj",
"wantedpages-badtitle": "Malvalida titolo en rezulta aro: $1",
"wantedfiles": "Dezirataj dosieroj",
"wantedfiletext-cat": "La jenaj dosieroj estas uzataj sed ne ekzistas. Dosieroj de eksteraj konservujoj eble estos listigita malgraŭ ne ekzistante. Tia malprave pozitivaj rezultoj estos <del>forstrekita</del>. Ankaŭ, paĝoj kiuj enmetas dosierojn kiuj ne ekzistas estas listigita en [[:$1]].",
- "wantedfiletext-nocat": "La jenaj dosieroj estas uzataj sed ne ekzistas. Dosieroj de eksteraj dosierujoj eble estas listigitaj malgraŭ eksistado. Tia malprave pozitiva rezulto estos <del>forstrekita</del>.",
+ "wantedfiletext-cat-noforeign": "Jen dosieroj kiuj estas uzataj, sed mankas. Plue, paĝoj kiuj enmetas dosierojn mankantajn estas en [[:$1]].",
+ "wantedfiletext-nocat": "La jenaj dosieroj estas uzataj sed mankas. Dosieroj de eksteraj dosierujoj eble estas listigitaj malgraŭ eksistado. Tia malprave pozitiva rezulto estos <del>forstrekita</del>.",
+ "wantedfiletext-nocat-noforeign": "Jen dosieroj kiuj estas uzataj sed mankas.",
"wantedtemplates": "Dezirataj ŝablonoj",
"mostlinked": "Plej ligitaj paĝoj",
"mostlinkedcategories": "Plej ligitaj kategorioj",
@@ -1562,8 +1593,8 @@
"newpages": "Novaj paĝoj",
"newpages-username": "Salutnomo:",
"ancientpages": "Plej malnovaj artikoloj",
- "move": "Alinomigi",
- "movethispage": "Alinomigi ĉi tiun paĝon",
+ "move": "Alinomi",
+ "movethispage": "Alinomi ĉi tiun paĝon",
"unusedimagestext": "La jenaj dosieroj ekzistas sed ne estas enmetas en iu ajn paĝo.\nBonvolu noti ke aliaj retejoj povas ligi dosieron kun rekta URL-o, kaj tial estas listebla ĉi tie malgraŭ estante aktive uzata.",
"unusedcategoriestext": "La paĝoj de la sekvanta kategorio jam ekzistas, sed neniu alia artikolo aŭ kategorio rilatas al ĝi.",
"notargettitle": "Sen celpaĝo",
@@ -1574,9 +1605,11 @@
"pager-older-n": "{{PLURAL:$1|pli malnova 1|pli malnovaj $1}}",
"suppress": "Superrigardo",
"querypage-disabled": "Tiu ĉi speciala paĝo estas malfunkciigita pro rendimentaj kialoj.",
+ "apihelp": "Helpo pri API",
+ "apihelp-no-such-module": "Modulo \"$1\" ne estis trovita.",
"booksources": "Libroservoj",
"booksources-search-legend": "Serĉi librofontojn",
- "booksources-go": "Ek",
+ "booksources-search": "Serĉi",
"booksources-text": "Jen ligilaro al aliaj TTT-ejoj, kiuj vendas librojn,\nkaj/aŭ informumos pri la libro ligita.\nLa {{SITENAME}} ne estas komerce ligita al tiuj vendejoj, kaj la listo ne estu\nkomprenata kiel rekomendo aŭ reklamo.",
"booksources-invalid-isbn": "La donata ISBN verŝajne estas nevalida; kontrolu pri erara kopiado el la originala fonto.",
"specialloguserlabel": "Faranto:",
@@ -1651,6 +1684,7 @@
"trackingcategories-msg": "Kategorio pri kontrolado",
"trackingcategories-name": "Nomo de mesaĝo",
"trackingcategories-desc": "Kriterio por inkluzivi kategorion",
+ "broken-file-category-desc": "La paĝo enhavas malvalidan ligilon al dosiero (ligilo por uzi dosieron kvankam la dosiero ne ekzistas).",
"trackingcategories-nodesc": "Neniu priskribo estas disponebla.",
"trackingcategories-disabled": "Kategorio estas malaktivigita",
"mailnologin": "Neniu alsendota adreso",
@@ -1687,10 +1721,11 @@
"mywatchlist": "Atentaro",
"watchlistfor2": "Por $1 $2",
"nowatchlist": "Vi ne jam elektis priatenti iun ajn paĝon.",
- "watchlistanontext": "Bonvolu $1 por vidi aŭ redakti erojn en via atentaro.",
+ "watchlistanontext": "Bonvolu ensaluti por vidi aŭ redakti vian atentaron.",
"watchnologin": "Ne ensalutinta",
"addwatch": "Aldoniĝi al atentaro",
"addedwatchtext": "La paĝo \"[[:$1]]\" aldoniĝis al via [[Special:Watchlist|atentaro]]. Estontaj ŝanĝoj de tiu paĝo kaj de ĝia rilata diskutpaĝo aperos tie.",
+ "addedwatchtext-short": "La paĝo \"$1\" estis aldonita al via atento-listo.",
"removewatch": "Forigi el atentaro",
"removedwatchtext": "La paĝo \"[[:$1]]\" estas forigita el via [[Special:Watchlist|atentaro]].",
"removedwatchtext-short": "La paĝo \"$1\" estis forigita el via atento-listo.",
@@ -1704,9 +1739,9 @@
"wlheader-enotif": "Retpoŝta sciigo estas ŝalta.",
"wlheader-showupdated": "Paĝoj montriĝis per '''dikaj literoj''' kiuj estis ŝanĝitaj ekde vi laste vizitis.",
"wlnote": "Jen la {{PLURAL:$1|lasta redakto|lastaj <strong>$1</strong> redaktoj}} dum la {{PLURAL:$2|lasta horo|lastaj <strong>$2</strong> horoj}}, ekde $3, $4.",
- "wlshowlast": "Montri el lastaj $1 horoj $2 tagoj $3",
+ "wlshowlast": "Montri el lastaj $1 horoj $2 tagoj",
"watchlist-options": "Opcioj por atentaro",
- "watching": "Aldonante al la atentaro...",
+ "watching": "Aldonata al la atentaro...",
"unwatching": "Malatentante...",
"watcherrortext": "Eraro okazis ŝanĝinte vian agordojn de atentaro por \"$1\".",
"enotif_reset": "Marki ĉiujn paĝojn vizititaj",
@@ -1750,9 +1785,9 @@
"delete-edit-reasonlist": "Redakti kialojn de forigo",
"delete-toobig": "Ĉi tiu paĝo havas grandan redakto-historion, pli ol $1 {{PLURAL:$1|version|versiojn}}. Forigo de ĉi tiaj paĝoj estis limigitaj por preventi akcidentan disrompigon de {{SITENAME}}.",
"delete-warning-toobig": "Ĉi tiu paĝo havas grandan redakto-historion, pli ol $1 {{PLURAL:$1|version|versiojn}}. Forigo de ĝi povas disrompigi operacion de {{SITENAME}}; forigu singarde.",
+ "deleteprotected": "Vi ne povas forigi ĉi tiun paĝon ĉar ĝi estis protektita.",
"deleting-backlinks-warning": "'''Atentigo:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Aliaj paĝoj]] ligas al aŭ transkludas tiun ĉi forigotan paĝon.",
"rollback": "Restarigi antaŭan redakton",
- "rollback_short": "Malfari",
"rollbacklink": "malfari",
"rollbacklinkcount": "nuligi $1 {{PLURAL:$1|redakton|redaktojn}}",
"rollbacklinkcount-morethan": "nuligi pli ol $1 {{PLURAL:$1|redakton|redaktojn}}",
@@ -1801,6 +1836,7 @@
"protect-othertime": "Alia tempo:",
"protect-othertime-op": "alia tempo",
"protect-existing-expiry": "Ekzistanta protektdaŭro: $3, $2",
+ "protect-existing-expiry-infinity": "Ekzistanta protektdaŭro: senfina",
"protect-otherreason": "Alia/plua kialo:",
"protect-otherreason-op": "Alia/plua kialo",
"protect-dropdown": "*Oftaj kialoj por protektado\n** Tro da vanadlismo\n** Tro da spamado\n** Malutila redakto-milito\n** Paĝo kun multo da trafiko",
@@ -1812,7 +1848,7 @@
"maximum-size": "Maksimuma pezo:",
"pagesize": "(bitokoj)",
"restriction-edit": "Redakti",
- "restriction-move": "Alinomigi",
+ "restriction-move": "Alinomi",
"restriction-create": "Krei",
"restriction-upload": "Alŝuti",
"restriction-level-sysop": "plene protektita",
@@ -1862,7 +1898,7 @@
"tooltip-invert": "Marku ĉi tiu skatolon por kaŝi ŝanĝoj al paĝoj en la elektita nomspaco (kaj la asocia nomspaco, se tiel markita)",
"namespace_association": "Asociita nomspaco",
"tooltip-namespace_association": "Marku ĉi tiu skatolo por inkluzivi la diskutan aŭ teman nomspacon asocie de la elekta nomspaco",
- "blanknamespace": "(Artikoloj)",
+ "blanknamespace": "(Ĉefa)",
"contributions": "Kontribuoj de {{GENDER:$1|uzanto|uzantino}}",
"contributions-title": "Kontribuoj de uzanto $1",
"mycontris": "Kontribuoj",
@@ -1876,6 +1912,7 @@
"sp-contributions-newbies-sub": "Kontribuoj de novaj uzantoj. Forigitaj paĝoj ne estas montritaj.",
"sp-contributions-newbies-title": "Kontribuoj de novaj uzantoj",
"sp-contributions-blocklog": "protokolo de forbaroj",
+ "sp-contributions-suppresslog": "kaŝitaj kontribuoj de uzanto",
"sp-contributions-deleted": "forigitaj kontribuoj de uzanto",
"sp-contributions-uploads": "alŝutoj",
"sp-contributions-logs": "protokoloj",
@@ -1928,7 +1965,7 @@
"ipb-change-block": "Reforbari la uzanton kun ĉi tiuj preferoj",
"ipb-confirm": "Konfirmi forbaron",
"badipaddress": "Neniu uzanto, aŭ la IP-adreso estas misformita.",
- "blockipsuccesssub": "Oni sukcese forbaris la adreson/nomon.",
+ "blockipsuccesssub": "Forbaro sukcesis.",
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] estas forbarita. <br />\nVidu la [[Special:BlockList|liston de forbaroj]] por kontroli.",
"ipb-blockingself": "Vi preskaŭ forbaros vin mem! Ĉu vi certas ke vi volas fari ĉi tiel?",
"ipb-confirmhideuser": "Vi preskaŭ forbaras uzanto kun \"kaŝi uzanton\" ŝalta. Ĉi tiu kaŝi la nomon de uzanto en ĉiuj listoj ka protokoloj. Ĉu vi certas ke vi volas fari ĉi tiel?",
@@ -1943,6 +1980,7 @@
"unblocked": "[[User:$1|$1]] estas restarigita.",
"unblocked-range": "$1 estis malforbarita",
"unblocked-id": "Forbaro $1 estas forigita.",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] estis malforbarita.",
"blocklist": "Forbaritaj uzantoj",
"ipblocklist": "Forbaritaj uzantoj",
"ipblocklist-legend": "Trovi forbaritan uzanton.",
@@ -2023,33 +2061,36 @@
"lockfilenotwritable": "La datumbaza dosiero pri ŝlosado ne estas skribebla. Por ŝlosi aŭ malŝlosi la datumbazon, ĉi devas esti skribebla de la TTT-servilo.",
"databasenotlocked": "La datumbazo ne estas ŝlosita.",
"lockedbyandtime": "(de {{GENDER:$1|$1}} je $2, $3)",
- "move-page": "Alinomigi $1",
- "move-page-legend": "Alinomigi paĝon",
+ "move-page": "Alinomi $1",
+ "move-page-legend": "Alinomi paĝon",
"movepagetext": "Per la jena formulo vi povas ŝanĝi la nomon de iu paĝo, kunportante ĝian historion de redaktoj al la nova nomo.\nLa antaŭa titolo fariĝos alidirektilo al la nova titolo.\nVi povas ĝisdatigi alidirektilojn kiu indikas la originalan titolon aŭtomate.\nSe vi elektas ĝisdatigi permane, bonvolu kontroli [[Special:DoubleRedirects|duoblajn]] aŭ [[Special:BrokenRedirects|rompitajn alidirektilojn]].\nVi estas responsa por certigi ke ligilojn direktas fidinde.\n\nNotu, ke la paĝo '''ne''' estos movita se jam ekzistas paĝo ĉe la nova titolo, krom se tiu loko estas malplena aŭ alidirektilo al ĉi tiu paĝo, kaj sen antaŭa redaktohistorio.\nPro tio, vi ja povos removi la paĝon je la antaŭa titolo se vi mistajpus, kaj ne povas forviŝi ekzistantan paĝon per movo.\n\n'''AVERTO!'''\nTio povas esti drasta kaj neatendita ŝanĝo por populara paĝo;\nbonvolu certigi vin, ke vi komprenas ties konsekvencojn antaŭ ol vi antaŭeniru.",
"movepagetext-noredirectfixer": "Per jena formularo vi povas alinomigi paĝon, kaj movi tutan ĝian redaktohistorion al la nova nomo. \nLa antaŭa titolo alidirektigos onin al la nova titolo.\nKontrolu pri [[Special:DoubleRedirects|duoblajn]] aŭ [[Special:BrokenRedirects|nefunkciantajn alidirektilojn]].\nVi respondecas pri tio ke ligoj restas montrantaj ĝustadirekten.\n\nKonsciu ke la paĝo '''ne'' estas movota se jam ekzistas paĝo havanta la novan titolon, krom se ĝi maplenas aŭ estas alidirektilo sen antaŭa redaktohistorio.\nTio ĉi signifas ke vi povas alinomigi paĝon reen al antaŭa nomo se vi eraras, kaj vi ke vi ne povas anstataŭigi ekzistantan paĝon.\n\n'''Averto!''\nEblas ke tio ĉi estas drasta kaj neatendita ŝanĝo de populara paĝo;\nAntaŭ daŭrigi, bonvolu certiĝi, ke vi komprenas la konsekvencojn de tiuj ĉi ŝanĝo.",
"movepagetalktext": "La movo aŭtomate kunportos la diskuto-paĝon, se tia ekzistas, '''krom se:'''\n*Vi movas la paĝon tra nomspacoj (ekz de ''Nomo'' je ''User:Nomo''),\n*Ne malplena diskuto-paĝo jam ekzistas je la nova nomo, aŭ\n*Vi malelektas la suban ŝaltilon.\n\nTiujokaze, vi nepre permane kunigu la diskuto-paĝojn se vi tion deziras.",
- "movearticle": "Alinomigi paĝon",
- "moveuserpage-warning": "'''Averto:''' Vi preskaŭ alinomigas paĝon de uzanto. Bonvolu noti ke nur la paĝo estos alinomigita kaj la uzanto mem ''ne'' estos alinomigita.",
+ "movearticle": "Alinomi paĝon",
+ "moveuserpage-warning": "<strong>Averto:</strong> Vi preskaŭ alinomas paĝon de uzanto. Bonvolu noti ke nur la paĝo estos alinomita kaj la uzanto mem <em>ne</em> estos alinomita.",
+ "movecategorypage-warning": "<strong>Averto:</strong> Vi baldaŭ movos kategorian paĝon. Bonvolu noti ke, nur la paĝo estos movita, kaj la paĝoj en la malnova kategorio <em>ne</em> transiros en la novan kategorion.",
"movenologintext": "Vi nepre estu registrita uzanto kaj [[Special:UserLogin|ensalutu]] por rajti movi paĝojn.",
"movenotallowed": "Vi ne rajtas movi paĝojn.",
- "movenotallowedfile": "Vi ne havas rajton alinomigi dosierojn.",
+ "movenotallowedfile": "Vi ne havas rajton alinomi dosierojn.",
"cant-move-user-page": "Vi ne rajtas movi radikajn uzanto-paĝojn.",
"cant-move-to-user-page": "Vi ne rajtas movi paĝon al uzantopaĝo (krom al uzantosubpaĝo).",
+ "cant-move-category-page": "Vi ne rajtas movi kategoriajn paĝojn.",
+ "cant-move-to-category-page": "Vi ne rajtas movi paĝon al kategoria paĝo.",
"newtitle": "Al nova titolo",
"move-watch": "Atenti ĉi tiun paĝon",
- "movepagebtn": "Alinomigi paĝon",
+ "movepagebtn": "Alinomi paĝon",
"pagemovedsub": "Sukcesis alinomigo",
- "movepage-moved": "'''\"$1\" estis alinomigita al \"$2\"'''",
+ "movepage-moved": "<strong>\"$1\" estis alinomita al \"$2\"</strong>",
"movepage-moved-redirect": "Alidirektilo estis kreita.",
"movepage-moved-noredirect": "La kreado de alidirektilo estis nuligita.",
"articleexists": "Paĝo kun tiu nomo jam ekzistas, aŭ la nomo kiun vi elektis ne validas.\nBonvolu elekti alian nomon.",
"cantmove-titleprotected": "Vi ne povas movi paĝo al ĉi loko, ĉar la nova titolo estis protektita kontraŭ kreado",
- "movetalk": "Transigi ankaŭ la \"diskuto\"-paĝon, se ĝi ekzistas.",
- "move-subpages": "Alinomigi ĉiujn subpaĝojn (maksimume $1)",
- "move-talk-subpages": "Alinomigi subpaĝojn de diskuto-paĝo (ĝis $1)",
+ "movetalk": "Alinomi ankaŭ la diskutopaĝon.",
+ "move-subpages": "Alinomi ĉiujn subpaĝojn (maksimume $1)",
+ "move-talk-subpages": "Alinomi subpaĝojn de diskuto-paĝo (maksimume $1)",
"movepage-page-exists": "La paĝo $1 jam ekzistas kaj ne povas esti aŭtomate anstataŭigita.",
"movepage-page-moved": "La paĝo $1 estis alinomita al $2.",
- "movepage-page-unmoved": "La paĝo $1 ne povas esti alinomigita al $2.",
+ "movepage-page-unmoved": "La paĝo $1 ne povas esti alinomita al $2.",
"movepage-max-pages": "La maksimumo de $1 {{PLURAL:$1|paĝo|paĝoj}} estis {{PLURAL:$1|alinomita|alinomitaj}} kaj neniuj pliaj estos alinomitaj aŭtomate.",
"movelogpage": "Protokolo pri paĝmovoj",
"movelogpagetext": "Jen listo de movitaj paĝoj",
@@ -2058,7 +2099,7 @@
"movenosubpage": "Ĉi tiu paĝo havas neniujn subpaĝojn.",
"movereason": "Kialo:",
"revertmove": "restarigi",
- "delete_and_move": "Forigi kaj alinomigi",
+ "delete_and_move": "Forigi kaj alinomi",
"delete_and_move_text": "==Forigo nepras==\n\nLa celartikolo \"[[:$1]]\" jam ekzistas. Ĉu vi volas forigi ĝin por krei spacon por la movo?",
"delete_and_move_confirm": "Jes, forigu la paĝon",
"delete_and_move_reason": "Forigita por ebligi movadon de \"[[$1]]\"",
@@ -2074,7 +2115,7 @@
"imagetypemismatch": "La nova dosierfinaĵo ne kongruas ĝian dosiertipon.",
"imageinvalidfilename": "La cela dosiernomo estas nevalida",
"fix-double-redirects": "Ĝisdatigi iujn alidirektilojn kiuj direktas al la originala titolo",
- "move-leave-redirect": "Forlasi kiel alidirektilon",
+ "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:",
"move-over-sharedrepo": "== Dosiero ekzistas ==\n[[:$1]] ekzistas en komuna dosierujo. Movante la dosieron al ĉi tiu titolo anstataŭigos la komunan dosieron.",
@@ -2167,17 +2208,15 @@
"importlogpage": "Protokolo de importaĵoj",
"importlogpagetext": "Administrantecaj importoj de paĝoj kun redakto-historio de aliaj vikioj.",
"import-logentry-upload": "importita [[$1]] de dosiera alŝuto",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|versio|versioj}}",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizio importita|revizioj importitaj}}",
"import-logentry-interwiki": "transvikiigita $1",
"import-logentry-interwiki-detail": "Importis $1 {{PLURAL:$1|revizion|reviziojn}} de $2",
"javascripttest": "Ĝavoskripta testado",
- "javascripttest-title": "Irigante $1 testoj",
"javascripttest-pagetext-noframework": "Ĉi tiu paĝo estas konservita por funkciigi testojn de JavaScript.",
"javascripttest-pagetext-unknownframework": "Nekonta test-framo \"$1\".",
"javascripttest-pagetext-frameworks": "Bonvolu elekti unu el la jenaj test-framoj: $1",
"javascripttest-pagetext-skins": "Elektu kun kio etoso irigi la testojn:",
"javascripttest-qunit-intro": "Vidu [$1 testa dokumentaro] en mediawiki.org.",
- "javascripttest-qunit-heading": "Testaro QUnit por JavaScript de MediaWiki",
"tooltip-pt-userpage": "Via uzantopaĝo",
"tooltip-pt-anonuserpage": "La uzantopaĝo por la IP adreso sub kiu vi estas redaktanta",
"tooltip-pt-mytalk": "Via diskutpaĝo",
@@ -2216,6 +2255,7 @@
"tooltip-feed-atom": "Atom-fonto por ĉi tiu paĝo",
"tooltip-t-contributions": "Rigardi la liston de kontribuoj de tiu ĉi uzanto",
"tooltip-t-emailuser": "Sendi retmesaĝon al tiu ĉi uzanto",
+ "tooltip-t-info": "Pli da informo pri ĉi tiu paĝo",
"tooltip-t-upload": "Alŝuti bildojn aŭ dosierojn",
"tooltip-t-specialpages": "Listo de ĉiuj specialaj paĝoj",
"tooltip-t-print": "Printebla versio de ĉi tiu paĝo",
@@ -2290,7 +2330,6 @@
"pageinfo-robot-policy": "Indeksado per robotoj",
"pageinfo-robot-index": "Permesata",
"pageinfo-robot-noindex": "Malpermesata",
- "pageinfo-views": "Nombro de rigardoj",
"pageinfo-watchers": "Nombro de paĝatentantoj",
"pageinfo-few-watchers": "Malpli ol $1 {{PLURAL:$1|atentanto|atentantoj}}",
"pageinfo-redirects-name": "Nombro da alidirektiloj al ĉi tiu paĝo",
@@ -2740,7 +2779,6 @@
"exif-urgency-low": "Malalta ($1)",
"exif-urgency-high": "Alta ($1)",
"exif-urgency-other": "Prioritato difinita de uzanto ($1)",
- "watchlistall2": "ĉiuj",
"namespacesall": "ĉiuj",
"monthsall": "ĉiuj",
"confirmemail": "Konfirmi retadreson",
@@ -2879,7 +2917,6 @@
"hebrew-calendar-m11-gen": "abo",
"hebrew-calendar-m12-gen": "elulo",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskuto]])",
- "unknown_extension_tag": "Nekonata etend-etikedo \"$1\"",
"duplicate-defaultsort": "'''Averto:''' Defaŭlta ordiga ŝlosilo \"$2\" anstataŭigas pli fruan defaŭltan ordigan ŝlosilon \"$1\".",
"version": "Versio",
"version-extensions": "Instalitaj kromprogramoj",
@@ -2920,6 +2957,9 @@
"version-entrypoints": "Eniropunktaj URL-oj",
"version-entrypoints-header-entrypoint": "Eniropunkto",
"version-entrypoints-header-url": "Retadreso",
+ "version-libraries": "Instalitaj bibliotekoj",
+ "version-libraries-library": "Biblioteko",
+ "version-libraries-version": "Versio",
"redirect-legend": "Alidirektilo al dosiero aŭ paĝo",
"redirect-submit": "Ek",
"redirect-lookup": "Traserĉi:",
@@ -2953,6 +2993,7 @@
"specialpages-group-wiki": "Datenoj kaj iloj",
"specialpages-group-redirects": "Alidirektantaj specialaj paĝoj",
"specialpages-group-spam": "Kontraŭspamiloj",
+ "specialpages-group-developer": "Disvolvistaj iloj",
"blankpage": "Malplena paĝo",
"intentionallyblankpage": "Ĉi tiu paĝo intencie estas malplena kaj estas uzata por testado, ktp.",
"external_image_whitelist": " #Lasu ĉi tiun linion senŝanĝe<pre>\n#Enmetu parto de regula esprimo (nur la parton enmetinda en //) suben\n#Ĝi estos kongruita kun la URL-o de eksteraj (ligeblaj) bildoj\n#Kongruantaĵoj estos montritaj kiel bildoj; se ne eble montri, nur ligilo estos montrita\n#Linioj komencantaj kun # estas traktata kiel komentoj.\n#Ĉi tiu estas usklecodistinga.\n\n#Enmetu ĉiujn koderojn de regulaj esprimoj super ĉi tiu linio. Lasu la linion senŝanĝe.</pre>",
@@ -2982,8 +3023,8 @@
"compare-revision-not-exists": "La revizio kiun vi specifis ne ekzistas.",
"dberr-problems": "Bedaŭrinde, ĉi tiu retejo suferas pro teknikaj problemoj.",
"dberr-again": "Bonvolu atendi kelkajn minutojn kaj reŝargi.",
- "dberr-info": "(Ne eblas kontakti la datenbazan servilon: $1)",
- "dberr-info-hidden": "(Ne eblas kontakti la datenbazan servilon)",
+ "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.",
@@ -3024,6 +3065,7 @@
"revdelete-uname-unhid": "salutnomo malkaŝita",
"revdelete-restricted": "aplikis limojn al administrantoj",
"revdelete-unrestricted": "forigis limojn por administrantoj",
+ "logentry-merge-merge": "$1 {{GENDER:$2|kunigis}} $3 en $4 (revizioj ĝis $5)",
"logentry-move-move": "$1 movis paĝon $3 al $4",
"logentry-move-move-noredirect": "$1 movis paĝon $3 al $4 ne lasante alidirektilon",
"logentry-move-move_redir": "$1 movis paĝon $3 al $4 anstataŭigante alidirektilon",
@@ -3038,8 +3080,11 @@
"logentry-rights-rights": "$1 ŝanĝis grupan membrecon por $3 de $4 al $5",
"logentry-rights-rights-legacy": "$1 ŝanĝis grupan membrecon por $3",
"logentry-rights-autopromote": "$1 estis aŭtomate {{GENDER:$2|altrangigita}} de $4 al $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|alŝutis}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|alŝutis}} novan version de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|alŝutis}} $3",
"rightsnone": "(nenia)",
+ "revdelete-summary": "redaktoresumon",
"feedback-bugornote": "Se vi pretas priskribi teknikan problemon detale, bonvolu [$1 raporti cimon].\nAŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la paĝo \"[$3 $2]\", kune kun via salutnomo kaj uzita retumilo.",
"feedback-subject": "Temo:",
"feedback-message": "Mesaĝo:",
@@ -3087,6 +3132,7 @@
"api-error-overwrite": "Anstataŭigo de ekzistanta dosiero ne permesatas.",
"api-error-stashfailed": "Interna eraro: la servilo malsukcesis stoki provizoran dosieron.",
"api-error-publishfailed": "Interna eraro: Servilo malsukcesis eldoni provizoran dosieron.",
+ "api-error-stasherror": "Eraro okazis dum alŝutado de la dosiero al dosierujo.",
"api-error-timeout": "La servilo ne respondis ene de la antaŭvidita tempo.",
"api-error-unclassified": "Okazis nekonata eraro",
"api-error-unknown-code": "Nekonata eraro: \"$1\"",
@@ -3140,13 +3186,20 @@
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|ŝanĝis}} la paĝan lingvon por $3 de $4 al $5.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ŝalta)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''malŝalta''')",
+ "mediastatistics": "Statistikoj pri dosieroj",
"mediastatistics-nbytes": "{{PLURAL:$1|$1 bitoko|$1 bitokoj}} ($2; $3%)",
"mediastatistics-table-mimetype": "MIME-tipo",
+ "mediastatistics-table-extensions": "Eblaj dosier-sufiksoj",
"mediastatistics-table-count": "Nombro de dosieroj",
"mediastatistics-header-unknown": "Nekonata",
+ "mediastatistics-header-bitmap": "Rastrumaj bildoj",
+ "mediastatistics-header-drawing": "Desegnaĵoj (vektoraj bildoj)",
"mediastatistics-header-audio": "Sonaj",
"mediastatistics-header-video": "Videaj dosieroj",
"mediastatistics-header-multimedia": "Multmediaj",
"mediastatistics-header-office": "Oficejaj",
- "mediastatistics-header-text": "Tekstaj"
+ "mediastatistics-header-text": "Tekstaj",
+ "mediastatistics-header-executable": "Plenumeblaj dosieroj",
+ "json-error-state-mismatch": "JSON estas malvalida aŭ malformigita",
+ "json-error-syntax": "Sintaksa eraro"
}
diff --git a/languages/i18n/es.json b/languages/i18n/es.json
index 00a866ab..4f386393 100644
--- a/languages/i18n/es.json
+++ b/languages/i18n/es.json
@@ -115,35 +115,42 @@
"Themasterriot",
"AVIADOR",
"F3RaN",
- "Amitie 10g"
+ "Amitie 10g",
+ "Eurodyne",
+ "Gleki",
+ "Jonathan rrr",
+ "Paynekiller92",
+ "Kroji",
+ "JasterTDC",
+ "Laurenslimb"
]
},
"tog-underline": "Subrayar los enlaces:",
"tog-hideminor": "Ocultar las ediciones menores en los cambios recientes",
"tog-hidepatrolled": "Ocultar las ediciones patrulladas en los cambios recientes",
- "tog-newpageshidepatrolled": "Ocultar las páginas patrulladas de la lista de páginas nuevas",
- "tog-extendwatchlist": "Expandir la lista de seguimiento a todos los cambios, no sólo a los más recientes",
+ "tog-newpageshidepatrolled": "Ocultar las páginas patrulladas en la lista de páginas nuevas",
+ "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-numberheadings": "Numerar automáticamente los encabezados",
"tog-showtoolbar": "Mostrar la barra de edición",
- "tog-editondblclick": "Editar las páginas al hacer doble clic",
+ "tog-editondblclick": "Editar páginas al hacer doble clic",
"tog-editsectiononrightclick": "Permitir modificar secciones al pulsar con el botón secundario del ratón en sus títulos",
"tog-watchcreations": "Añadir las páginas que cree y los archivos que suba a mi lista de seguimento",
"tog-watchdefault": "Añadir las páginas y archivos que edite a mi lista de seguimiento",
"tog-watchmoves": "Añadir las páginas y archivos que mueva a mi lista de seguimiento",
"tog-watchdeletion": "Añadir las páginas y archivos que borre a mi lista de seguimiento",
- "tog-watchrollback": "Añadir las páginas donde realicé una reversión a mi lista de seguimento",
+ "tog-watchrollback": "Añadir las páginas donde haya realizado una reversión a mi lista de seguimiento",
"tog-minordefault": "Marcar todas las ediciones como menores de manera predeterminada",
"tog-previewontop": "Mostrar previsualización antes del cuadro de edición",
"tog-previewonfirst": "Mostrar previsualización en la primera edición",
"tog-enotifwatchlistpages": "Enviarme un correo electrónico cuando se modifique una página o un archivo de mi lista de seguimiento",
- "tog-enotifusertalkpages": "Enviarme un correo electrónico cuando se modifique mi página de discusión",
+ "tog-enotifusertalkpages": "Enviarme un mensaje de correo electrónico 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-shownumberswatching": "Mostrar el número de usuarios que la vigilan",
"tog-oldsig": "Firma actual:",
"tog-fancysig": "Tratar la firma como wikitexto (sin un enlace automático)",
- "tog-uselivepreview": "Usar previsualización dinámica (experimental)",
+ "tog-uselivepreview": "Usar previsualización dinámica",
"tog-forceeditsummary": "Avisarme cuando grabe la página sin introducir un resumen de edición",
"tog-watchlisthideown": "Ocultar mis ediciones en la lista de seguimiento",
"tog-watchlisthidebots": "Ocultar las ediciones de bots en la lista de seguimiento",
@@ -151,16 +158,16 @@
"tog-watchlisthideliu": "Ocultar las ediciones de los usuarios registrados en la lista de seguimiento",
"tog-watchlisthideanons": "Ocultar las ediciones de los usuarios anónimos en la lista de seguimiento",
"tog-watchlisthidepatrolled": "Ocultar las ediciones patrulladas en la lista de seguimiento",
- "tog-ccmeonemails": "Enviarme copias de los correos electrónicos que envíe a otros usuarios",
- "tog-diffonly": "No mostrar el contenido de la página bajo las diferencias",
- "tog-showhiddencats": "Mostrar las categorías ocultas",
- "tog-norollbackdiff": "Omitir la diferencia después de revertir",
- "tog-useeditwarning": "Avisarme cuando abandone una página de edición con cambios sin guardar",
- "tog-prefershttps": "Utilizar una conexión segura siempre que haya iniciado una sesión",
+ "tog-ccmeonemails": "Recibir copias de los correos electrónicos que envíe a otros usuarios",
+ "tog-diffonly": "No mostrar el contenido de la página debajo de la lista de diferencias",
+ "tog-showhiddencats": "Mostrar categorías ocultas",
+ "tog-norollbackdiff": "Omitir la lista de diferencias después de revertir",
+ "tog-useeditwarning": "Avisarme cuando abandone una página en edición con cambios sin guardar",
+ "tog-prefershttps": "Utilizar siempre conexiones seguras en mis sesiones",
"underline-always": "Siempre",
"underline-never": "Nunca",
- "underline-default": "Tema o valor predeterminado del navegador",
- "editfont-style": "Estilo de tipografía del área de edición:",
+ "underline-default": "Configuración predeterminada del tema o el navegador",
+ "editfont-style": "Tipo de letra del área de edición:",
"editfont-default": "Predeterminado del navegador",
"editfont-monospace": "Tipo de letra monoespaciado",
"editfont-sansserif": "Tipo de letra de palo seco",
@@ -236,16 +243,16 @@
"hidden-category-category": "Categorías ocultas",
"category-subcat-count": "{{PLURAL:$2|Esta categoría solo contiene la siguiente subcategoría.|Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}, de un total de $2.}}",
"category-subcat-count-limited": "Esta categoría contiene {{PLURAL:$1|la siguiente subcategoría|las siguientes $1 subcategorías}}.",
- "category-article-count": "{{PLURAL:$2|Esta categoría incluye solamente la siguiente página.|{{PLURAL:$1|La siguiente página página pertenece|Las siguientes $1 páginas pertenecen}} a esta categoría, de un total de $2.}}",
+ "category-article-count": "{{PLURAL:$2|Esta categoría incluye solamente la siguiente página.|{{PLURAL:$1|La siguiente página pertenece|Las siguientes $1 páginas pertenecen}} a esta categoría, de un total de $2.}}",
"category-article-count-limited": "{{PLURAL:$1|La siguiente página pertenece|Las siguientes $1 páginas pertenecen}} a esta categoría.",
"category-file-count": "{{PLURAL:$2|Esta categoría contiene solamente el siguiente archivo.|{{PLURAL:$1|El siguiente archivo pertenece|Los siguientes $1 archivos pertenecen}} a esta categoría, de un total de $2.}}",
- "category-file-count-limited": "{{PLURAL:$1|El siguiente fichero pertenece|Los siguientes $1 ficheros pertenecen}} a esta categoría.",
+ "category-file-count-limited": "{{PLURAL:$1|El siguiente archivo pertenece|Los siguientes $1 archivos pertenecen}} a esta categoría.",
"listingcontinuesabbrev": "cont.",
"index-category": "Páginas indizadas",
"noindex-category": "Páginas no indizadas",
"broken-file-category": "Páginas con enlaces rotos a archivos",
"about": "Acerca de",
- "article": "Artículo",
+ "article": "Página de contenido",
"newwindow": "(se abre en una ventana nueva)",
"cancel": "Cancelar",
"moredotdotdot": "Más...",
@@ -261,7 +268,7 @@
"qbpageoptions": "Opciones de página",
"qbmyoptions": "Mis páginas",
"faq": "Preguntas frecuentes",
- "faqpage": "Project:P+F",
+ "faqpage": "Project:PP. FF.",
"actions": "Acciones",
"namespaces": "Espacios de nombres",
"variants": "Variantes",
@@ -315,22 +322,23 @@
"viewhelppage": "Ver página de ayuda",
"categorypage": "Ver página de categoría",
"viewtalkpage": "Ver discusión",
- "otherlanguages": "Otros idiomas",
+ "otherlanguages": "En otros idiomas",
"redirectedfrom": "(Redirigido desde «$1»)",
"redirectpagesub": "Página de redirección",
- "redirectto": "Redirigir a:",
+ "redirectto": "Redirige a:",
"lastmodifiedat": "Esta página fue modificada por última vez el $1 a las $2.",
- "viewcount": "Esta página se ha visitado {{PLURAL:$1|una vez|$1 veces}}.",
+ "viewcount": "Esta página ha recibido {{PLURAL:$1|una visita|$1 visitas}}.",
"protectedpage": "Página protegida",
"jumpto": "Saltar a:",
"jumptonavigation": "navegación",
"jumptosearch": "buscar",
- "view-pool-error": "Lo sentimos, los servidores están sobrecargados en este momento.\nHay demasiados usuarios que están tratando de ver esta página.\nEspera un momento antes de tratar de acceder nuevamente a esta página.\n\n$1",
- "generic-pool-error": "Lo sentimos, los servidores están sobrecargados en este momento.\nHay demasiados usuarios que están tratando de ver este recurso.\nEspera un momento antes de tratar de acceder nuevamente a este recurso.",
- "pool-timeout": "Se agotó el tiempo de espera del candado",
+ "view-pool-error": "Lo sentimos, los servidores están sobrecargados en este momento.\nHay demasiados usuarios tratando de ver esta página.\nEspera un momento antes de intentar acceder de nuevo a esta página.\n\n$1",
+ "generic-pool-error": "Lo sentimos, los servidores están sobrecargados en este momento.\nHay demasiados usuarios tratando de ver este recurso.\nEspera un momento antes de intentar acceder de nuevo a este recurso.",
+ "pool-timeout": "Se agotó el tiempo de espera al cierre de exclusión mutua",
"pool-queuefull": "La cola de trabajo está llena",
"pool-errorunknown": "Error desconocido",
"pool-servererror": "El servicio de gestión de procesos agrupados no está disponible ($1).",
+ "poolcounter-usage-error": "Error de uso: $1",
"aboutsite": "Acerca de {{SITENAME}}",
"aboutpage": "Project:Acerca de",
"copyright": "El contenido está disponible bajo la licencia $1 a menos que se indique lo contrario.",
@@ -340,6 +348,7 @@
"disclaimers": "Aviso legal",
"disclaimerpage": "Project:Limitación general de responsabilidad",
"edithelp": "Ayuda de edición",
+ "helppage-top-gethelp": "Ayuda",
"mainpage": "Página principal",
"mainpage-description": "Página principal",
"policy-url": "Project:Políticas",
@@ -351,7 +360,7 @@
"badaccess-group0": "No estás autorizado a ejecutar la acción solicitada.",
"badaccess-groups": "La acción que has solicitado está restringida a los usuarios {{PLURAL:$2|del grupo|de uno de estos $2 grupos}}: $1.",
"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, consultar [[Special:Version|la página de versión]]",
+ "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",
"retrievedfrom": "Obtenido de «$1»",
"youhavenewmessages": "{{PLURAL:$3|Tienes}} $1 ($2).",
@@ -378,7 +387,7 @@
"viewdeleted": "¿Quieres ver $1?",
"restorelink": "{{PLURAL:$1|una edición borrada|$1 ediciones borradas}}",
"feedlinks": "Canal:",
- "feed-invalid": "El tipo de canal de suscripción no es válido.",
+ "feed-invalid": "El tipo de canal de suscripción no es correcto.",
"feed-unavailable": "Los canales de sindicación no están disponibles",
"site-rss-feed": "Canal RSS de $1",
"site-atom-feed": "Canal Atom de $1",
@@ -398,42 +407,45 @@
"nstab-help": "Ayuda",
"nstab-category": "Categoría",
"nosuchaction": "No existe esa acción",
- "nosuchactiontext": "La acción especificada en la URL no es válida.\nEs posible que hayas escrito mal la URL o que hayas seguido un enlace incorrecto.\nEsto también podría indicar un error en el software utilizado en {{SITENAME}}.",
+ "nosuchactiontext": "La acción especificada en la URL no es válida.\nEs posible que hayas escrito mal la URL o que hayas seguido un enlace incorrecto.\nEsto también podría indicar un error en el software utilizado por {{SITENAME}}.",
"nosuchspecialpage": "No existe esa página especial",
- "nospecialpagetext": "<strong>Ha solicitado una página especial inexistente.</strong>\n\nPuedes ver una lista de las páginas especiales en [[Special:SpecialPages|{{int:specialpages}}]].",
+ "nospecialpagetext": "<strong>Has intentado acceder a una página especial inexistente.</strong>\n\nPuedes ver una lista de las páginas especiales en [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Error",
"databaseerror": "Error de la base de datos",
- "databaseerror-text": "Ocurrió un error de consulta a la base de datos.\nEsto puede indicar un fallo en el software.",
- "databaseerror-textcl": "Se ha producido un error de consulta a la base de datos.",
+ "databaseerror-text": "Se ha producido un error en la consulta a la base de datos.\nEsto puede indicar un fallo en el software.",
+ "databaseerror-textcl": "Se ha producido un error en la consulta a la base de datos.",
"databaseerror-query": "Consulta: $1",
"databaseerror-function": "Función: $1",
"databaseerror-error": "Error: $1",
- "laggedslavemode": "<strong>Avertencia:</strong> puede que falten las actualizaciones más recientes en esta página.",
+ "laggedslavemode": "<strong>Advertencia:</strong> puede que falten las actualizaciones más recientes en esta página.",
"readonly": "Base de datos bloqueada",
"enterlockreason": "Explica el motivo del bloqueo, incluyendo una estimación de cuándo se producirá el desbloqueo",
"readonlytext": "La base de datos no permite nuevas entradas u otras modificaciones de forma temporal, probablemente por mantenimiento rutinario, tras lo cual volverá a la normalidad.\n\nLa explicación dada por el administrador que la bloqueó fue: $1",
- "missing-article": "La base de datos no encuentra el texto de una página que debería hallarse, llamada «$1» $2.\n\nLa causa de esto suele deberse a un ''diff'' anacrónico o un enlace al historial de una página que ha sido borrada.\n\nSi no fuera el caso, puedes haber encontrado un fallo en el software.\n\nPor favor, avisa a un [[Special:ListUsers/sysop|administrador]], tomando nota de la URL.",
- "missingarticle-rev": "(n.º de revisión: $1)",
- "missingarticle-diff": "(Dif.: $1, $2)",
- "readonly_lag": "La base de datos se ha bloqueado automáticamente mientras los servidores de base de datos esclavos se sincronizan con el maestro.",
+ "missing-article": "La base de datos no ha encontrado el texto de la página «$1» $2, cuando debería haberse hallado.\n\nLa causa de esto suele ser un ''diff'' anacrónico o un enlace al historial de una página que ha sido borrada.\n\nSi no fuera el caso, puede que hayas encontrado un fallo en el software.\n\nPor favor, informa de esto a [[Special:ListUsers/sysop|administrador]], y anota la URL actual.",
+ "missingarticle-rev": "(revisión: $1)",
+ "missingarticle-diff": "(diferencia: $1, $2)",
+ "readonly_lag": "La base de datos se ha bloqueado automáticamente mientras sus servidores esclavos se sincronizan con el maestro.",
"internalerror": "Error interno",
"internalerror_info": "Error interno: $1",
- "filecopyerror": "No se pudo copiar el archivo «$1» a «$2».",
- "filerenameerror": "No se pudo renombrar el archivo «$1» a «$2».",
- "filedeleteerror": "No se pudo borrar el archivo «$1».",
- "directorycreateerror": "No se pudo crear el directorio «$1».",
- "filenotfound": "No se pudo encontrar el archivo «$1».",
+ "internalerror-fatal-exception": "Excepción grave de tipo \"$1\"",
+ "filecopyerror": "No se ha podido copiar el archivo «$1» a «$2».",
+ "filerenameerror": "No se ha podido renombrar el archivo «$1» a «$2».",
+ "filedeleteerror": "No se ha podido borrar el archivo «$1».",
+ "directorycreateerror": "No se ha podido crear el directorio «$1».",
+ "directoryreadonlyerror": "La carpeta «$1» es de solo lectura.",
+ "directorynotreadableerror": "La carpeta «$1» no tiene permisos de lectura.",
+ "filenotfound": "No se ha encontrado el archivo «$1».",
"unexpected": "Valor inesperado: «$1»=«$2».",
- "formerror": "Error: no se pudo enviar el formulario",
+ "formerror": "Error: no se ha podido enviar el formulario.",
"badarticleerror": "Esta acción no se puede llevar a cabo en esta página.",
- "cannotdelete": "La página o archivo «$1» no se pudo borrar.\nPuede que ya haya sido borrado por alguien más.",
+ "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-hook-aborted": "La modificación que intentaste hacer fue cancelada por un gancho de extensión. No hay explicación disponible.",
- "no-null-revision": "No se pudo crear la revisión nula para la página «$1»",
+ "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»",
"badtitle": "Título incorrecto",
"badtitletext": "El título de la página solicitada está vacío, no es válido, o es un enlace interidioma o interwiki incorrecto.\nPuede que contenga uno o más caracteres que no se pueden usar en los títulos.",
"perfcached": "Los siguientes datos provienen de la caché y pueden no estar actualizados. La caché puede contener {{PLURAL:$1|un resultado|$1 resultados}} como máximo.",
- "perfcachedts": "Los siguientes datos provienen de la caché y su última actualización fue: $1. La caché puede contener {{PLURAL:$4|un resultado|$4 resultados}} como máximo.",
+ "perfcachedts": "Los siguientes datos provienen de la caché, y fueron actualizados por última vez a fecha de: $1. La caché contiene {{PLURAL:$4|un resultado|$4 resultados}} como máximo.",
"querypage-no-updates": "Actualmente las actualizaciones de esta página están desactivadas. Estos datos no serán actualizados a corto plazo.",
"viewsource": "Ver código",
"viewsource-title": "Ver el código de «$1»",
@@ -441,10 +453,11 @@
"actionthrottledtext": "Como medida contra el ''spam'', la acción que estás realizando está limitada a un número determinado de veces en un periodo corto de tiempo, y has excedido ese límite. Por favor inténtalo de nuevo en unos minutos.",
"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> a 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, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
- "editinginterface": "<strong>Advertencia:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki. \nPara añadir o cambiar las traducciones de todos los wikis utiliza [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
- "cascadeprotected": "Esta página ha sido protegida para su edición, porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que están protegidas con la opción de «cascada»:\n$2",
+ "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 [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
+ "cascadeprotected": "Esta página ha sido protegida contra edición, al estar incluida 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.",
"customjsprotected": "No tienes permiso para editar esta página JavaScript, porque contiene configuraciones personales de otro usuario.",
@@ -453,19 +466,19 @@
"myprivateinfoprotected": "No tienes permiso para editar tu información privada.",
"mypreferencesprotected": "No tienes permiso para editar tus preferencias.",
"ns-specialprotected": "No se pueden editar las páginas especiales.",
- "titleprotected": "Esta página ha sido protegida contra creación por [[User:$1|$1]].\nEl motivo dado fue \"<em>$2</em>\".",
- "filereadonlyerror": "No se puede modificar el archivo \"$1\" porque el repositorio de archivos \"$2\" está en modo de sólo lectura.\nEl administrador que lo ha bloqueado ofrece esta explicación: \"$3\".",
+ "titleprotected": "Este título ha sido protegido contra creación por [[User:$1|$1]].\nEl motivo proporcionado es \"<em>$2</em>\".",
+ "filereadonlyerror": "No se puede modificar el archivo \"$1\" porque el repositorio de archivos \"$2\" es de solo lectura.\nEl administrador que lo ha bloqueado ofrece esta explicación: \"$3\".",
"invalidtitle-knownnamespace": "El título con el espacio de nombres «$2» y el texto «$3» no es válido",
"invalidtitle-unknownnamespace": "El título con el espacio de nombres desconocido (n.º $1) y el texto «$2» no es válido",
"exception-nologin": "No has iniciado sesión",
"exception-nologin-text": "Necesitas acceder para ver esta página o llevar a cabo esta acción.",
- "exception-nologin-text-manual": "Necesitas $1 para acceder a esta página o acción.",
+ "exception-nologin-text-manual": "Necesitas $1 para poder ver esta página o llevar a cabo esta acción.",
"virus-badscanner": "Configuración incorrecta: antivirus desconocido: <em>$1</em>",
- "virus-scanfailed": "falló el análisis (código $1)",
+ "virus-scanfailed": "ha fallado el análisis (código $1)",
"virus-unknownscanner": "antivirus desconocido:",
- "logouttext": "<strong>Ha finalizado tu sesión.</strong>\n\nPuede que algunas páginas continúen mostrándose como si la sesión estuviera iniciada hasta que vacíes la memoria caché del navegador.",
+ "logouttext": "<strong>Tu sesión ha finalizado.</strong>\n\nPuede que algunas páginas continúen mostrándose como si la sesión estuviera iniciada hasta que actualices la caché de tu navegador.",
"welcomeuser": "¡Bienvenido, $1!",
- "welcomecreation-msg": "Se ha creado tu cuenta.\nPuedes cambiar tus [[Special:Preferences|preferencias]] de {{SITENAME}} si lo deseas.",
+ "welcomecreation-msg": "Se ha creado tu cuenta.\nSi lo deseas, puedes cambiar tus [[Special:Preferences|preferencias]] para {{SITENAME}}.",
"yourname": "Usuario:",
"userlogin-yourname": "Usuario",
"userlogin-yourname-ph": "Escribe tu nombre de usuario",
@@ -482,7 +495,7 @@
"userlogin-signwithsecure": "Usar conexión segura",
"yourdomainname": "Tu dominio:",
"password-change-forbidden": "No puedes cambiar las contraseñas en este wiki.",
- "externaldberror": "Hubo un error de autenticación de la base de datos o bien no tienes autorización para actualizar tu cuenta externa.",
+ "externaldberror": "Hubo un error de autenticación en la base de datos, o bien no tienes autorización para actualizar tu cuenta externa.",
"login": "Acceder",
"nav-login-createaccount": "Acceder/crear cuenta",
"userlogin": "Acceder/crear cuenta",
@@ -500,6 +513,8 @@
"userlogin-resetlink": "¿Olvidaste tus datos de acceso?",
"userlogin-resetpassword-link": "¿Has olvidado tu contraseña?",
"userlogin-helplink2": "Ayuda con el acceso",
+ "userlogin-loggedin": "Ya estás conectado como {{GENDER:$1|$1}}.\nUsa el formulario de abajo para iniciar sesión como otro usuario.",
+ "userlogin-createanother": "Crear otra cuenta",
"createacct-emailrequired": "Dirección de correo electrónico",
"createacct-emailoptional": "Dirección de correo electrónico (opcional)",
"createacct-email-ph": "Escribe tu dirección de correo electrónico",
@@ -513,7 +528,7 @@
"createacct-imgcaptcha-ph": "Escribe el texto de arriba",
"createacct-submit": "Crea tu cuenta",
"createacct-another-submit": "Crear otra cuenta",
- "createacct-benefit-heading": "{{SITENAME}} es hecha por gente como tú.",
+ "createacct-benefit-heading": "Personas como tú son las que construyen {{SITENAME}}.",
"createacct-benefit-body1": "{{PLURAL:$1|edición|ediciones}}",
"createacct-benefit-body2": "{{PLURAL:$1|página|páginas}}",
"createacct-benefit-body3": "{{PLURAL:$1|colaborador reciente|colaboradores recientes}}",
@@ -522,26 +537,27 @@
"loginerror": "Error de inicio de sesión",
"createacct-error": "Error al crear la cuenta",
"createaccounterror": "No se pudo crear la cuenta: $1",
- "nocookiesnew": "La cuenta de usuario ha sido creada, pero 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.",
+ "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.",
"noname": "No se ha especificado un nombre de usuario válido.",
- "loginsuccesstitle": "Ya iniciaste sesión",
+ "loginsuccesstitle": "Has accedido correctamente",
"loginsuccess": "<strong>Has accedido a {{SITENAME}} como «$1».</strong>",
- "nosuchuser": "No existe ningún usuario llamado «$1».\nLos nombres de usuario son sensibles a las mayúsculas.\nRevisa la ortografía, o [[Special:UserLogin/signup|crea una cuenta nueva]].",
- "nosuchusershort": "No hay un usuario con el nombre «$1». Comprueba que lo has escrito correctamente.",
+ "nosuchuser": "No existe ningún usuario llamado «$1».\nLos nombres de usuario son sensibles a las mayúsculas.\nRevisa tu ortografía, o [[Special:UserLogin/signup|crea una cuenta nueva]].",
+ "nosuchusershort": "No existe ningún usuario llamado «$1». Comprueba que lo has escrito correctamente.",
"nouserspecified": "Debes especificar un nombre de usuario.",
"login-userblocked": "No puedes iniciar sesión porque tu cuenta está bloqueada.",
"wrongpassword": "La contraseña indicada es incorrecta.\nInténtalo de nuevo.",
"wrongpasswordempty": "No has escrito una contraseña.\nInténtalo de nuevo.",
"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}}.",
"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",
"passwordremindertitle": "Nueva contraseña temporal para {{SITENAME}}",
- "passwordremindertext": "Alguien (probablemente tú, desde la dirección IP $1) solicitó que te enviáramos una nueva contraseña para tu cuenta en {{SITENAME}} ($4).\nSe ha creado la siguiente contraseña temporal para el usuario «$2»: «$3»\nAhora deberías iniciar sesión y cambiar tu contraseña. Tu contraseña temporal expirará en {{PLURAL:$5|un día|$5 días}}.\n\nSi fue otro quien solicitó este mensaje o has recordado tu contraseña y ya no deseas cambiarla, puedes ignorar este mensaje y seguir usando tu contraseña original.",
+ "passwordremindertext": "Alguien (probablemente tú, desde la dirección IP $1) solicitó el envío de una contraseña nueva para tu cuenta en {{SITENAME}} ($4). Se ha creado la siguiente contraseña temporal para el usuario «$2»: «$3». Si efectivamente la solicitaste, ahora puedes iniciar sesión y cambiar tu contraseña. Tu contraseña temporal caducará en {{PLURAL:$5|un día|$5 días}}.\n\nSi fue otro quien realizó esta solicitud, o has recordado tu contraseña y ya no deseas cambiarla, puedes ignorar este mensaje y seguir usando tu contraseña original.",
"noemail": "No hay una dirección de correo electrónico registrada para «$1».",
- "noemailcreate": "Necesitas proveer una dirección de correo electrónico válida",
+ "noemailcreate": "Necesitas proporcionar una dirección de correo electrónico válida.",
"passwordsent": "Se ha enviado una nueva contraseña al correo electrónico de «$1».\nPor favor, identifícate de nuevo tras recibirla.",
"blocked-mailpassword": "Tu dirección IP está bloqueada, y no se te permite el uso de la función de recuperación de contraseñas para prevenir abusos.",
"eauthentsent": "Se ha enviado un correo electrónico de confirmación a la dirección especificada.\nAntes de que se envíe cualquier otro correo a la cuenta tienes que seguir las instrucciones enviadas en el mensaje para así confirmar que la dirección te pertenece.",
@@ -553,27 +569,27 @@
"noemailprefs": "Especifica una dirección electrónica para habilitar estas características.",
"emailconfirmlink": "Confirmar dirección de correo electrónico",
"invalidemailaddress": "La dirección electrónica no puede ser aceptada, pues parece que tiene un formato no válido.\nPor favor, escribe una dirección en el formato adecuado o deja el campo en blanco.",
- "cannotchangeemail": "Las direcciones de la correo electrónico de las cuentas de usuario no pueden cambiarse en esta wiki.",
+ "cannotchangeemail": "En este wiki no se pueden cambiar las direcciones de correo electrónico de las cuentas de usuario.",
"emaildisabled": "Este sitio no puede enviar correos electrónicos.",
"accountcreated": "Se ha creado la cuenta",
- "accountcreatedtext": "La cuenta de usuario de [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) ha sido creada.",
+ "accountcreatedtext": "Se ha creado la cuenta de usuario de [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|discusión]]).",
"createaccount-title": "Creación de cuenta para {{SITENAME}}",
- "createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2» y contraseña «$3». Por favor entra ahora y cambia tu contraseña.\n\nPuedes ignorar este mensaje si esta cuenta fue creada por error.",
- "login-throttled": "Has intentado demasiadas veces iniciar sesión recientemente. Por favor espera $1 antes de intentarlo nuevamente.",
- "login-abort-generic": "Tu inicio de sesión no fue exitoso - Cancelado",
- "login-migrated-generic": "Tu cuenta se ha migrado y tu nombre de usuario ya no existen en este wiki.",
+ "createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2» y contraseña «$3». Por favor, accede ahora y cambia tu contraseña.\n\nSi esta cuenta fue creada por error, ignora este mensaje.",
+ "login-throttled": "Has intentado iniciar sesión demasiadas veces seguidas. Por favor espera $1 antes de intentarlo nuevamente.",
+ "login-abort-generic": "Se ha intentado acceder sin éxito - Cancelado",
+ "login-migrated-generic": "Se ha trasladado tu cuenta. Tu nombre de usuario ya no existe en este wiki.",
"loginlanguagelabel": "Idioma: $1",
"suspicious-userlogout": "Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.",
- "createacct-another-realname-tip": "El nombre real es opcional.\nSi se proporciona, se usará para dar al usuario la atribución de su trabajo.",
+ "createacct-another-realname-tip": "El nombre real es opcional.\nSi lo proporcionas, se usará para dar atribución al trabajo del usuario.",
"pt-login": "Acceder",
"pt-login-button": "Acceder",
"pt-createaccount": "Crear una cuenta",
"pt-userlogout": "Salir",
"php-mail-error-unknown": "Error desconocido en la función mail() de PHP.",
- "user-mail-no-addy": "Se ha intentado enviar correo electrónico sin una dirección de correo electrónico.",
- "user-mail-no-body": "Trató de enviar un correo electrónico con un cuerpo vacío o excesivamente corto.",
+ "user-mail-no-addy": "Se ha intentado enviar un mensaje de correo electrónico sin una dirección de correo electrónico.",
+ "user-mail-no-body": "Trató de enviar un mensaje de correo electrónico sin contenido o excesivamente corto.",
"changepassword": "Cambiar contraseña",
- "resetpass_announce": "Para completar el inicio de sesión, debes definir una contraseña nueva.",
+ "resetpass_announce": "Para completar el inicio de sesión debes definir una contraseña nueva.",
"resetpass_text": "<!-- Añada texto aquí -->",
"resetpass_header": "Cambiar la contraseña de la cuenta",
"oldpassword": "Contraseña antigua:",
@@ -588,48 +604,46 @@
"resetpass-submit-cancel": "Cancelar",
"resetpass-wrong-oldpass": "La contraseña actual, o temporal, no es correcta.\nPuede que ya hayas cambiado exitosamente tu contraseña o que hayas pedido una nueva contraseña temporal.",
"resetpass-recycled": "Restablece tu contraseña a algo distinto de tu contraseña actual.",
- "resetpass-temp-emailed": "Has iniciado sesión con un código temporal por correo electrónico.\nPara terminar el acceso, debes establecer una nueva contraseña aquí:",
+ "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 y necesita restablecerse. Elije una nueva contraseña ahora, o haga clic en \"{{int:resetpass-submit-cancel}}\" para restaurarla más adelante.",
+ "resetpass-expired-soft": "Tu contraseña ha caducado, por lo que debes restablecerla. Cámbiala ahora por una nueva, o haz clic en \"{{int:resetpass-submit-cancel}}\" para restablecerla más adelante.",
"resetpass-validity-soft": "Tu contraseña no es válida: $1\n\nCámbiala ahora por una nueva, o haz clic en \"{{int:resetpass-submit-cancel}}\" 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-text-many": "{{PLURAL:$1|Rellena uno de los campos para recibir una contraseña temporal por correo electrónico.}}",
+ "passwordreset-text-many": "{{PLURAL:$1|Elige una de las opciones para recibir una contraseña temporal por correo electrónico.}}",
"passwordreset-legend": "Restablecer contraseña",
"passwordreset-disabled": "Se ha desactivado el restablecimiento de contraseñas en este wiki.",
- "passwordreset-emaildisabled": "Las funciones de correo electrónico han sido desactivadas en esta wiki.",
+ "passwordreset-emaildisabled": "Se han desactivado las funciones de correo electrónico en este wiki.",
"passwordreset-username": "Nombre de usuario:",
"passwordreset-domain": "Dominio:",
"passwordreset-capture": "¿Ver el mensaje resultante?",
"passwordreset-capture-help": "Si marcas esta casilla, se te mostrará el correo electrónico (con la contraseña temporal) además de enviarse al usuario.",
"passwordreset-email": "Dirección de correo electrónico:",
"passwordreset-emailtitle": "Detalles de la cuenta en {{SITENAME}}",
- "passwordreset-emailtext-ip": "Alguien (probablemente tú, desde la dirección IP $1) ha solicitado la renovación de tu clave para {{SITENAME}} ($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}}\ncon esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} caducarán en {{PLURAL:$5|un día|$5 días}}.\nDeberías iniciar sesión y establecer una contraseña nueva ahora. Si otra persona ha realizado este solicitud\no si recuerdas tu contraseña original y no deseas cambiarla, puedes\nignorar este mensaje y continuar usando tu contraseña anterior.",
- "passwordreset-emailtext-user": "El usuario $1 en {{SITENAME}} pidió un restablecer tu contraseña para {{SITENAME}}\n($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}} con esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} expirarán en {{PLURAL:$5|un día|$5 días}}.\nDeberías iniciar sesión y establecer una contraseña nueva ahora. Si alguien más hizo este pedido,\no recuerdas tu contraseña original, y no deseas cambiarla, puedes\nignorar este mensaje y continuar usando tu contraseña anterior.",
+ "passwordreset-emailtext-ip": "Alguien (probablemente tú, desde la dirección IP $1) ha solicitado el restablecimiento de tu contraseña en {{SITENAME}} ($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}}\na esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} caducarán en {{PLURAL:$5|un día|$5 días}}.\nAhora puedes iniciar sesión y establecer una nueva contraseña. Si fue otra persona la que realizó esta solicitud, o si ya recuerdas tu contraseña original y, por tanto, no deseas cambiarla, puedes ignorar este mensaje y continuar usando tu contraseña anterior.",
+ "passwordreset-emailtext-user": "El usuario $1 de {{SITENAME}} solicitó el restablecimiento de tu contraseña en {{SITENAME}}\n($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}} a esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} caducarán en {{PLURAL:$5|un día|$5 días}}.\nAhora puedes iniciar sesión y establecer una nueva contraseña. Si fue otra persona la que realizó esta solicitud, o si ya recuerdas tu contraseña original y, por tanto, no deseas cambiarla, puedes ignorar este mensaje y continuar usando tu contraseña anterior.",
"passwordreset-emailelement": "Nombre de usuario: $1\nContraseña temporal: $2",
"passwordreset-emailsent": "Se ha enviado un correo electrónico para el restablecimiento de tu contraseña.",
"passwordreset-emailsent-capture": "Se ha enviado un correo para el restablecimiento de la contraseña, el cual se muestra a continuación.",
- "passwordreset-emailerror-capture": "Se generó un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero el envío {{GENDER:$2|al usuario|a la usuaria}} falló: $1",
+ "passwordreset-emailerror-capture": "Se ha generado un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero ha fallado el envío {{GENDER:$2|al usuario|a la usuaria}}: $1",
"changeemail": "Cambiar la dirección de correo electrónico",
- "changeemail-header": "Cambiar la dirección de correo de la cuenta",
- "changeemail-text": "Rellena este formulario para cambiar tu dirección de correo electrónico. Debes introducir la contraseña para confirmar este cambio.",
+ "changeemail-text": "Rellena este formulario para cambiar tu dirección de correo electrónico. Debes introducir tu contraseña para confirmar este cambio.",
"changeemail-no-info": "Debes iniciar sesión para acceder directamente a esta página.",
- "changeemail-oldemail": "Dirección electrónica actual:",
- "changeemail-newemail": "Dirección electrónica nueva:",
+ "changeemail-oldemail": "Dirección de correo electrónico actual:",
+ "changeemail-newemail": "Dirección de correo electrónico nueva:",
"changeemail-none": "(ninguna)",
"changeemail-password": "Tu contraseña en {{SITENAME}}:",
"changeemail-submit": "Cambiar correo electrónico",
- "changeemail-cancel": "Cancelar",
"changeemail-throttled": "Has intentado acceder demasiadas veces.\nEspera $1 antes de intentarlo de nuevo.",
"resettokens": "Restablecer claves",
- "resettokens-text": "Aquí puedes restablecer las fichas que permiten el acceso a ciertos datos privados asociados con tu cuenta.\n\nDeberías hacerlo si accidentalmente los has compartido o si tu cuenta ha sido intervenida.",
+ "resettokens-text": "Aquí puedes restablecer las claves que permiten el acceso a ciertos datos privados asociados a tu cuenta.\n\nDeberías hacerlo si los has compartido por accidente, o si ha habido intrusiones en tu cuenta.",
"resettokens-no-tokens": "No hay claves para restablecer.",
"resettokens-legend": "Restablecer claves",
"resettokens-tokens": "Claves:",
"resettokens-token-label": "$1 (valor actual: $2)",
- "resettokens-watchlist-token": "Clave para la lista de seguimiento (RSS/Atom) de los [[Special:Watchlist|cambios a las páginas en tu lista de seguimiento]]",
+ "resettokens-watchlist-token": "Clave para el canal (RSS/Atom) de los [[Special:Watchlist|cambios a las páginas en tu lista de seguimiento]]",
"resettokens-done": "Restablecimiento de claves.",
"resettokens-resetbutton": "Restablecer las claves",
"bold_sample": "Texto en negrita",
@@ -659,140 +673,146 @@
"showpreview": "Mostrar previsualización",
"showdiff": "Mostrar los cambios",
"blankarticle": "<strong>Aviso:</strong> estás a punto de crear una página vacía.\nSi pulsas en «{{int:savearticle}}» de nuevo, se creará la página sin ningún contenido.",
- "anoneditwarning": "<strong>Advertencia:</strong> No has iniciado sesión. Tu dirección IP será visible públicamente si haces cualquier edición. Si <strong>[$1 inicias sesión]</strong> o <strong>[$2 creas una cuenta]</strong>, tus ediciones se atribuirán a tu nombre de usuario, junto con otros beneficios.",
+ "anoneditwarning": "<strong>Advertencia:</strong> no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición en estas condiciones. Si <strong>[$1 inicias sesión]</strong> o <strong>[$2 creas una cuenta]</strong>, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.",
"anonpreviewwarning": "<em>No has iniciado sesión. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de esta página.</em>",
- "missingsummary": "<strong>Recordatorio:</strong> No has escrito un resumen de edición.\nSi haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
+ "missingsummary": "<strong>Atención:</strong> No has escrito un resumen de edición.\nSi haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
+ "selfredirect": "<strong>Advertencia:</strong> estás redirigiendo esta página a sí misma.\nPuede que hayas especificado erróneamente el destino de la redirección, o quizá estés editando la página equivocada. En cualquier caso, si haces clic de nuevo en \"{{int:savearticle}}\", se creará la redirección.",
"missingcommenttext": "Escribe un comentario a continuación.",
- "missingcommentheader": "<strong>Recordatorio:</strong> No has escrito un asunto/encabezado para este comentario.\nSi haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
+ "missingcommentheader": "<strong>Atención:</strong> No has escrito un asunto/encabezado para este comentario.\nSi haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
"summary-preview": "Previsualización del resumen:",
"subject-preview": "Previsualización del asunto/encabezado:",
+ "previewerrortext": "Se ha producido un error al intentar la vista previa de los cambios.",
"blockedtitle": "El usuario está bloqueado",
"blockedtext": "<strong>Tu nombre de usuario o dirección IP ha sido bloqueada.</strong>\n\nEl bloqueo fue hecho por $1.\nLa razón dada es <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar a $1 u otro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor incluye 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 fue bloqueado por $1.\nLa razón dada es esta:\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\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu actual dirección IP es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos mostrados aquí 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.\nLa explicación proporcionada es la 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\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\n\nTu actual dirección IP es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos aquí mostrados en cualquier consulta que hagas al respecto.",
"blockednoreason": "no se ha especificado el motivo",
"whitelistedittext": "Tienes que $1 para editar artículos.",
- "confirmedittext": "Debes confirmar tu dirección electrónica antes de editar páginas. Por favor, establece y valida una dirección electrónica a través de tus [[Special:Preferences|preferencias de usuario]].",
+ "confirmedittext": "Debes confirmar tu dirección de correo electrónico antes de poder editar páginas. Por favor, configura y confirma tu dirección de correo a través de tus [[Special:Preferences|preferencias de usuario]].",
"nosuchsectiontitle": "Sección no encontrada",
"nosuchsectiontext": "Has intentado editar una sección que no existe.\nQuizá ha sido movida o borrada mientras visitabas la página.",
"loginreqtitle": "Es necesario iniciar sesión",
"loginreqlink": "acceder",
"loginreqpagetext": "Debes $1 para ver otras páginas.",
"accmailtitle": "Se ha enviado la contraseña",
- "accmailtext": "Se ha enviado a $2 una contraseña generada aleatoriamente para [[User talk:$1|$1]]. Puede cambiarse en la página [[Special:ChangePassword|destinada para ello]] después de haber iniciado sesión.",
+ "accmailtext": "Se ha enviado a $2 una contraseña generada aleatoriamente para [[User talk:$1|$1]]. Una vez iniciada la sesión, se puede cambiar en la página [[Special:ChangePassword|destinada para ello]].",
"newarticle": "(Nuevo)",
- "newarticletext": "Has seguido un enlace a una página que aún no existe.\nPara crear esta página, escribe en el campo a continuación. Para más información, consulta la [$1 página de ayuda].\nSi llegaste aquí por error, vuelve a la página anterior.",
- "anontalkpagetext": "---- ''Esta es la página de discusión de un usuario anónimo que aún no ha creado una cuenta, o no la usa. Por lo tanto, tenemos que usar su dirección IP para identificarlo. Una dirección IP puede ser compartida por varios usuarios. Si eres un usuario anónimo y crees que se han dirigido a ti con comentarios improcedentes, por favor [[Special:UserLogin/signup|crea una cuenta]] o si ya la tienes [[Special:UserLogin|identifícate]] para evitar confusiones futuras con otros usuarios anónimos.''",
- "noarticletext": "En este momento no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.",
+ "newarticletext": "Has seguido un enlace a una página que aún no existe.\nPara crear esta página, escribe en el cuadro que aparece a continuación. Para más información, consulta la [$1 página de ayuda].\nSi llegaste aquí por error, vuelve a la página anterior.",
+ "anontalkpagetext": "---- ''Esta es la página de discusión de un usuario anónimo que aún no ha creado una cuenta, o no la usa. Por lo tanto, tenemos que usar su dirección IP para identificarlo. Puede que varios usuarios compartan una misma dirección IP. Si eres un usuario anónimo y crees que se han dirigido a ti con comentarios improcedentes, por favor [[Special:UserLogin/signup|crea una cuenta]] o, si ya la tienes, [[Special:UserLogin|identifícate]] para evitar confusiones futuras con otros usuarios anónimos.''",
+ "noarticletext": "En este momento no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.",
"noarticletext-nopermission": "Actualmente no hay texto en esta página.\nPuedes [[Special:Search/{{PAGENAME}}|buscar este título de página]] en otras páginas, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados]</span>, pero no tienes permiso para crear esta página.",
- "missing-revision": "La revisión n.º $1 de la página llamada «{{FULLPAGENAME}}» no existe.\n\nNormalmente esto ocurre cuando se sigue un enlace de historial obsoleto que apunta a una página ya borrada.\nPuedes encontrar detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
- "userpage-userdoesnotexist": "La cuenta de usuario «<nowiki>$1</nowiki>» no está registrada. Por favor comprueba si quieres crear o editar esta página.",
- "userpage-userdoesnotexist-view": "La cuenta de usuario «$1» no está registrada.",
- "blocked-notice-logextract": "Este usuario está actualmente bloqueado.\nLa última entrada del registro de bloqueos se proporciona debajo para mayor referencia:",
- "clearyourcache": "'''Nota:''' después de guardar, quizás necesites refrescar la caché de tu navegador para ver los cambios.\n* '''Firefox / Safari:''' Mantén presionada ''Mayús'' mientras pulsas el botón ''Actualizar'', o presiona ''Ctrl+F5'' o ''Ctrl+R'' (''⌘+R'' en Mac)\n* '''Google Chrome:''' presiona ''Ctrl+Shift+R'' (''⌘+Mayús+R'' en Mac)\n* '''Internet Explorer:''' mantén presionada ''Ctrl'' mientras pulsas ''Actualizar'', o presiona ''Ctrl+F5''\n* '''Opera:''' vacía la caché en ''Herramientas → Preferencias''",
- "usercssyoucanpreview": "'''Consejo:''' Usa el botón «{{int:showpreview}}» para probar el nuevo CSS antes de guardarlo.",
- "userjsyoucanpreview": "'''Consejo:''' Usa el botón «{{int:showpreview}}» para probar el nuevo JS antes de guardarlo.",
- "usercsspreview": "'''Recuerda que sólo estás previsualizando tu CSS de usuario.'''\n'''¡Aún no se ha guardado!'''",
- "userjspreview": "'''¡Recuerda que solo estás previsualizando tu JavaScript de usuario.'''\n'''¡Aún no se ha guardado!'''",
- "sitecsspreview": "'''Recuerda que sólo estás previsualizando este CSS'''\n'''¡Aún no se ha guardado!'''",
- "sitejspreview": "'''Recuerda que sólo estás previsualizando este código JavaScript.'''\n'''¡Aún no se ha guardado!'''",
- "userinvalidcssjstitle": "'''Aviso:''' No existe la apariencia «$1». Recuerda que las páginas personalizadas ''.css'' y ''.js'' tienen un título en minúsculas. Por ejemplo, {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
+ "missing-revision": "La revisión n.º $1 de la página «{{FULLPAGENAME}}» no existe.\n\nEsto suele ocurrir cuando se sigue un enlace de historial obsoleto que apunta a una página ya borrada.\nPuedes encontrar detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
+ "userpage-userdoesnotexist": "El usuario «$1» no está registrado. Por favor, asegúrate de que realmente quieres crear o editar esta página.",
+ "userpage-userdoesnotexist-view": "El usuario «$1» no está registrado.",
+ "blocked-notice-logextract": "Este usuario se encuentra actualmente bloqueado.\nA continuación se muestra la última entrada del registro de bloqueos para más información:",
+ "clearyourcache": "<strong>Nota:</strong> tras guardar, quizás necesites actualizar la caché de tu navegador para ver los cambios.\n* <strong>Firefox/Safari:</strong> Mantén presionada la tecla <em>Mayús</em> mientras pulsas el botón <em>Actualizar</em>, o presiona <em>Ctrl+F5</em> o <em>Ctrl+R</em> (<em>⌘+R</em> en Mac)\n* <strong>Google Chrome:</strong> presiona <em>Ctrl+Shift+R</em> (<em>⌘+Mayús+R</em> en Mac)\n* <strong>Internet Explorer:</strong> mantén presionada <em>Ctrl</em> mientras pulsas <em>Actualizar</em>, o presiona <em>Ctrl+F5</em>\n* <strong>Opera:</strong> vacía la caché en <em>Herramientas → Preferencias</em>",
+ "usercssyoucanpreview": "<strong>Consejo:</strong> Usa el botón «{{int:showpreview}}» para probar el nuevo CSS antes de guardarlo.",
+ "userjsyoucanpreview": "<strong>Consejo:</strong> Usa el botón «{{int:showpreview}}» para probar el nuevo código JavaScript antes de guardarlo.",
+ "usercsspreview": "<strong>Recuerda que solo estás previsualizando tu CSS de usuario. ¡Aún no se ha guardado!</strong>",
+ "userjspreview": "<strong>¡Recuerda que solo estás previsualizando tu JavaScript de usuario. ¡Aún no se ha guardado!</strong>",
+ "sitecsspreview": "<strong>Recuerda que solo estás previsualizando este CSS. ¡Aún no se ha guardado!</strong>",
+ "sitejspreview": "<strong>Recuerda que solo estás previsualizando este código JavaScript. ¡Aún no se ha guardado!</strong>",
+ "userinvalidcssjstitle": "<strong>Advertencia:</strong> No existe la apariencia «$1». Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas. Por ejemplo, se usa {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
"updated": "(Actualizado)",
"note": "<strong>Nota:</strong>",
- "previewnote": "<strong>Recuerda que esta es una previsualización.</strong>\nTodavía no se han guardado tus cambios.",
+ "previewnote": "<strong>Recuerda que esto no es más que una previsualización.</strong>\nAún no se han guardado tus cambios.",
"continue-editing": "Ir al área de edición",
- "previewconflict": "Esta previsualización refleja el texto en el área de edición superior como aparecerá una vez guardados los cambios.",
- "session_fail_preview": "'''No se pudo procesar la edición debido a una pérdida de los datos de sesión.'''\nInténtalo de nuevo.\nSi el problema persiste, [[Special:UserLogout|cierra la sesión]] y vuelve a identificarte.",
- "session_fail_preview_html": "'''Lo sentimos, no hemos podido procesar tu cambio debido a una pérdida de datos de sesión.'''\n\n''Puesto que este wiki tiene el HTML puro habilitado, la visión preliminar está oculta para prevenirse contra ataques en JavaScript.''\n\n'''Si éste es un intento legítimo de modificación, por favor, inténtalo de nuevo. Si aún así no funcionase, [[Special:UserLogout|cierra la sesión]] e ingresa de nuevo.'''",
- "token_suffix_mismatch": "'''Tu edición ha sido rechazada porque tu cliente ha mezclado los signos de puntuación en el token de edición.\nSe rechazó la edición para evitar que el texto de la página se corrompa.\nEsto sucede en ocasiones cuando se usa un servicio de proxy anónimo defectuoso.'''",
- "edit_form_incomplete": "'''Algunas partes del formulario de edición no llegaron al servidor, comprueba que tus ediciones están intactas e inténtalo de nuevo'''.",
+ "previewconflict": "Esta previsualización muestra cómo aparecerá el texto en el área de edición superior una vez guardados los cambios.",
+ "session_fail_preview": "<strong>Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de los datos de sesión.</strong>\nPor favor, inténtalo de nuevo.\nSi el problema persiste, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
+ "session_fail_preview_html": "<strong>Lo sentimos, no hemos podido procesar tu edición debido a una pérdida de datos de sesión.</strong>\n\n<em>La previsualización está oculta como prevención frente a ataques JavaScript, puesto que este wiki tiene habilitado el HTML en bruto.</em>\n\n<strong>Si se trata de un intento legítimo de modificación, por favor, inténtalo de nuevo.</strong>\nSi aún así no funcionase, prueba a [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
+ "token_suffix_mismatch": "<strong>Tu edición ha sido rechazada porque tu cliente ha mezclado los signos de puntuación en la clave de edición.\nSe rechazó la edición para evitar la corrupción del texto de la página.\nEsto sucede en ocasiones si se usa un servicio de proxy anónimo defectuoso.</strong>",
+ "edit_form_incomplete": "<strong>Una parte del formulario de edición no ha llegado al servidor. Comprueba que tus cambios están intactos e inténtalo de nuevo.</strong>",
"editing": "Edición de «$1»",
- "creating": "Crear la página $1",
- "editingsection": "Editar $1 (sección)",
+ "creating": "Creación de «$1»",
+ "editingsection": "Edición de «$1» (sección)",
"editingcomment": "Edición de «$1» (sección nueva)",
"editconflict": "Conflicto de edición: $1",
- "explainconflict": "Alguien más ha cambiado esta página desde que empezaste a editarla.\nEl área de texto superior contiene el texto de la página como existe actualmente.\nTus cambios se muestran en el área de texto inferior.\nSi quieres grabar tus cambios, has de trasladarlos al área superior.\n'''Sólo''' el texto en el área de texto superior será grabado cuando pulses «{{int:savearticle}}».",
+ "explainconflict": "Alguien ha realizado cambios en esta página desde que empezaste a editarla.\nEl cuadro de texto superior contiene el texto de la página tal como está guardado en este momento.\nTus cambios sobre la versión que editaste se muestran en el cuadro de texto inferior.\nSi quieres guardar tus cambios, has de trasladarlos al cuadro superior.\nAl pulsar «{{int:savearticle}}», se guardará <strong>solo</strong> el texto del cuadro superior.",
"yourtext": "Tu texto",
- "storedversion": "Versión almacenada",
- "nonunicodebrowser": "'''Atención: Tu navegador no cumple la norma Unicode.'''\nSe ha activado un sistema de edición alternativo que te permitirá editar artículos con seguridad: los caracteres no ASCII aparecerán en la caja de edición como códigos hexadecimales.",
- "editingold": "'''Aviso: Estás editando una versión antigua de esta página.'''\nSi la guardas, se perderán los cambios realizados desde esta revisión.",
+ "storedversion": "Versión guardada",
+ "nonunicodebrowser": "<strong>Advertencia: tu navegador no es compatible con los caracteres Unicode.</strong>\nSe ha activado un sistema de edición alternativo que te permitirá editar artículos con seguridad: los caracteres no pertenecientes al estándar ASCII aparecerán como códigos hexadecimales en el cuadro de edición.",
+ "editingold": "<strong>Advertencia: estás editando sobre una revisión antigua de esta página.</strong>\nSi la guardas, se perderá cualquier otro cambio realizado desde esa revisión.",
"yourdiff": "Diferencias",
- "copyrightwarning": "Por favor observa que todas las contribuciones a {{SITENAME}} se consideran hechas públicas bajo la $2 (véase $1 para más detalles). Si no deseas la modificación y distribución libre de tu obra, entonces no la pongas aquí.<br />También nos aseguras que tú escribiste esto y te pertenecen de los derechos de autor, o lo copiaste desde el dominio público u otra fuente libre. '''¡No uses escritos con copyright sin permiso!'''",
- "copyrightwarning2": "Por favor, ten en cuenta que todas las contribuciones a {{SITENAME}} pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones y las distribuyan libremente, entonces no las pongas aquí.<br />También nos aseguras que tú escribiste esto y te pertenecen de los derechos de autor, o lo copiaste desde el dominio público u otra fuente libre. (véase $1 para más detalles).\n'''¡No uses escritos con copyright sin permiso!'''",
- "longpageerror": "'''Error: El texto que has enviado ocupa {{PLURAL:$1|un kilobyte|$1 kilobytes}}, que excede el máximo de {{PLURAL:$2|un kilobyte|$2 kilobytes}}.''' \nNo se lo puede guardar.",
- "readonlywarning": "'''Advertencia: La base de datos ha sido bloqueada para mantenimiento, así que no podrás guardar tus ediciones en este momento.'''\nQuizás quieras copiar y pegar tu texto en un archivo de texto y guardarlo para después.\n\nEl administrador que lo bloqueó ofreció esta explicación: $1",
- "protectedpagewarning": "'''Aviso: Esta página ha sido protegida de manera que solo usuarios con permisos de administrador puedan editarla.'''\nA continuación se muestra la última entrada de registro para referencia:",
- "semiprotectedpagewarning": "'''Nota:''' Esta página ha sido protegida para que solo usuarios registrados puedan editarla.\nA continuación se provee la última entrada de registro para referencia:",
- "cascadeprotectedwarning": "'''Aviso:''' Esta página está protegida, solo los administradores pueden editarla porque está incluida en {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} en cascada:",
- "titleprotectedwarning": "'''Aviso: Esta página está protegida de modo que se necesitan [[Special:ListGroupRights|derechos especificos]] para crearla.'''\nA continuación se muestra la última entrada de registro para referencia:",
+ "copyrightwarning": "Ten en cuenta que todas las contribuciones a {{SITENAME}} se consideran publicadas bajo la $2 (véase $1 para más información). Si no deseas que las modifiquen sin limitaciones y las distribuyan libremente, no las publiques aquí.<br />Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre. <strong>¡No uses textos con copyright sin permiso!</strong>",
+ "copyrightwarning2": "Ten en cuenta que todas las contribuciones a {{SITENAME}} pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.<br />Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase $1 para más detalles).\n<strong>¡No uses textos con copyright sin permiso!</strong>",
+ "longpageerror": "<strong>Error: el texto que has enviado ocupa {{PLURAL:$1|un kilobyte|$1 kilobytes}}, que supera el máximo de {{PLURAL:$2|un kilobyte|$2 kilobytes}}.</strong>\nPor tanto, no lo podemos guardar.",
+ "readonlywarning": "<strong>Advertencia: La base de datos ha sido bloqueada por labores de mantenimiento, así que en este momento no puedes guardar tus ediciones.</strong>\nQuizás quieras copiar y pegar tu texto en un archivo de texto y guardarlo para después.\n\nEl administrador que la bloqueó ha dado esta explicación: $1",
+ "protectedpagewarning": "<strong>Advertencia: Esta página ha sido protegida para que solo puedan editarla los usuarios con permisos de administrador.</strong>\nA continuación se muestra la última entrada de registro para más información:",
+ "semiprotectedpagewarning": "<strong>Nota:</strong> Esta página ha sido protegida para que solo puedan editarla los usuarios registrados.\nA continuación se muestra la última entrada de registro para más información:",
+ "cascadeprotectedwarning": "<strong>Aviso:</strong> esta página está protegida y solo los administradores pueden editarla porque está incluida en {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} en cascada:",
+ "titleprotectedwarning": "<strong>Aviso: esta página está protegida de modo que se necesitan [[Special:ListGroupRights|permisos específicos]] para crearla.</strong>\nA continuación se muestra la última entrada del registro como referencia:",
"templatesused": "{{PLURAL:$1|Plantilla usada|Plantillas usadas}} en esta página:",
"templatesusedpreview": "{{PLURAL:$1|Plantilla usada|Plantillas usadas}} en esta previsualización:",
"templatesusedsection": "{{PLURAL:$1|Plantilla usada|Plantillas usadas}} en esta sección:",
"template-protected": "(protegida)",
"template-semiprotected": "(semiprotegida)",
- "hiddencategories": "Esta página es un miembro de {{PLURAL:$1|1 categoría oculta|$1 categorías ocultas}}:",
+ "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. -->",
- "nocreatetext": "{{SITENAME}} ha restringido la posibilidad de crear nuevas páginas.\nPuede volver atrás y editar una página existente, [[Special:UserLogin|identificarte o crear una cuenta]].",
+ "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 compatible",
- "sectioneditnotsupported-text": "La edición de sección no es compatible con esta página.",
- "permissionserrors": "Error de permiso",
+ "sectioneditnotsupported-title": "Edición de sección no admitida",
+ "sectioneditnotsupported-text": "No se admite la edición de secciones en esta página.",
+ "permissionserrors": "Error de permisos",
"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}}:",
- "recreate-moveddeleted-warn": "'''Atención: estás volviendo a crear una página que ha sido borrada anteriormente.'''\n\nDeberías considerar si es apropiado continuar editando esta página.\nEl registro de borrado y traslados para esta página están provistos aquí por conveniencia:",
- "moveddeleted-notice": "Esta página ha sido borrada.\nEl registro de borrados y traslados para la página están provistos debajo como referencia.",
+ "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:",
+ "moveddeleted-notice": "Esta página ha sido borrada.\nA continuación, se proporciona el registro de borrados y traslados de la página para más información.",
"log-fulllog": "Ver el registro completo",
- "edit-hook-aborted": "Edición cancelada por la extensión.\nNo se aportaron explicaciones.",
- "edit-gone-missing": "No se pudo actualizar la página.\nParece que ha sido borrada.",
+ "edit-hook-aborted": "Una extensión ha evitado la edición.\nNo hay explicación disponible.",
+ "edit-gone-missing": "No se ha podido actualizar la página.\nParece haber sido borrada.",
"edit-conflict": "Conflicto de edición.",
"edit-no-change": "Se ignoró tu edición porque no se hizo ningún cambio en el texto.",
"postedit-confirmation-created": "Se ha creado la página.",
"postedit-confirmation-restored": "Se ha restaurado la página.",
"postedit-confirmation-saved": "Se ha guardado tu edición.",
"edit-already-exists": "No se pudo crear una página nueva.\nYa existe.",
- "defaultmessagetext": "Texto de mensaje predeterminado",
- "content-failed-to-parse": "No se pudo analizar el contenido $2 del modelo $1: $3",
- "invalid-content-data": "Datos de contenido inválidos",
+ "defaultmessagetext": "Texto predeterminado",
+ "content-failed-to-parse": "No se ha podido procesar el contenido $2 del modelo de $1: $3",
+ "invalid-content-data": "Datos de contenido incorrectos",
"content-not-allowed-here": "El contenido «$1» no está permitido en la página [[$2]]",
"editwarning-warning": "Se perderán los cambios si se cierra esta página.\nSi has iniciado sesión, puedes desactivar este aviso en la sección «{{int:prefs-editing}}» de las preferencias.",
- "editpage-notsupportedcontentformat-title": "Formato de contenido no admitido",
- "editpage-notsupportedcontentformat-text": "El formato de contenido $1 no es compatible con el modelo de contenido $2.",
+ "editpage-notsupportedcontentformat-title": "Formato de contenido no compatible",
+ "editpage-notsupportedcontentformat-text": "El formato de contenido $1 no es compatible con el modelo de contenido $2.",
"content-model-wikitext": "texto wiki",
- "content-model-text": "Texto sin formato",
+ "content-model-text": "texto sin formato",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Objeto vacío",
+ "content-json-empty-array": "Matriz vacía",
+ "duplicate-args-category": "Páginas que usan argumentos duplicados en invocaciones de plantillas",
+ "duplicate-args-category-desc": "La página contiene invocaciones de plantillas que utilizan argumentos duplicados, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Aviso: Esta página contiene demasiadas llamadas a funciones sintácticas costosas (#ifexist: y similares)\n\nTiene {{PLURAL:$1|una llamada|$1 llamadas}}, pero debería tener menos de $2.",
"expensive-parserfunction-category": "Páginas con llamadas a funciones sintácticas demasiado costosas",
- "post-expand-template-inclusion-warning": "Aviso: El tamaño de las plantillas incluidas es muy grande.\nAlgunas plantillas no serán incluidas.",
+ "post-expand-template-inclusion-warning": "<strong>Aviso:</strong> El tamaño de las plantillas incluidas es muy grande.\nAlgunas de ellas no se incluirán.",
"post-expand-template-inclusion-category": "Páginas con sobrecarga de plantillas",
- "post-expand-template-argument-warning": "Aviso: Esta página contiene al menos un parámetro de plantilla que tiene un tamaño de expansión demasiado grande.\nEse o esos parámetros han sido omitidos.",
+ "post-expand-template-argument-warning": "Aviso: Esta página contiene al menos un parámetro de plantilla con un tamaño de expansión demasiado grande.\nSe han descartado esos parámetros.",
"post-expand-template-argument-category": "Páginas que contienen plantillas con parámetros descartados",
- "parser-template-loop-warning": "Detectado bucle de plantilla: [[$1]]",
- "parser-template-recursion-depth-warning": "Se ha excedido el límite de recursión de plantillas ($1)",
- "language-converter-depth-warning": "El límite de profundidad del convertidor de idioma ha excedido ($1)",
- "node-count-exceeded-category": "Páginas donde se supera el número de nodos",
- "node-count-exceeded-category-desc": "La página supera el número máximo de nodos.",
- "node-count-exceeded-warning": "Página que ha superado el número de nodos",
- "expansion-depth-exceeded-category": "Páginas donde se supera la profundidad de expansión",
- "expansion-depth-exceeded-category-desc": "Esta página supera el límite de extensión.",
- "expansion-depth-exceeded-warning": "Página que ha superado la profundidad de expansión",
- "parser-unstrip-loop-warning": "Se ha detectado un bucle \"unstrip\"",
- "parser-unstrip-recursion-limit": "Se ha superado el límite de recursión de \"unstrip\" ($1)",
- "converter-manual-rule-error": "Error detectado en la regla de conversión manual del lenguaje",
- "undo-success": "La edición puede deshacerse. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así deshacer la edición.",
- "undo-failure": "No se puede deshacer la edición ya que otro usuario ha realizado una edición intermedia.",
- "undo-norev": "La edición no puede ser deshecha porque no existe o ha sido borrada.",
- "undo-nochange": "Parece que ya se ha deshecho la modificación.",
- "undo-summary": "Deshecha la revisión $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]])",
- "undo-summary-username-hidden": "Deshacer revisión $1 por usuario oculto",
+ "parser-template-loop-warning": "Se ha detectado un bucle de plantilla: [[$1]]",
+ "parser-template-recursion-depth-warning": "Se ha superado el límite de profundidad de la recursividad de plantillas ($1)",
+ "language-converter-depth-warning": "Se ha superado el límite de profundidad del convertidor de idioma ($1)",
+ "node-count-exceeded-category": "Páginas que sobrepasan la cantidad de nodos",
+ "node-count-exceeded-category-desc": "Esta página sobrepasa la cantidad máxima de nodos permitida.",
+ "node-count-exceeded-warning": "La página sobrepasa el límite de nodos",
+ "expansion-depth-exceeded-category": "Páginas que sobrepasan la profundidad de expansión",
+ "expansion-depth-exceeded-category-desc": "Esta página sobrepasa la profundidad de expansión máxima.",
+ "expansion-depth-exceeded-warning": "La página ha sobrepasado el límite de profundidad de expansión",
+ "parser-unstrip-loop-warning": "Se ha detectado un bucle en la función \"unstrip\"",
+ "parser-unstrip-recursion-limit": "Se ha superado el límite de recursividad de la función \"unstrip\" ($1)",
+ "converter-manual-rule-error": "Se ha detectado un error en una regla de conversión de lenguaje manual",
+ "undo-success": "Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.",
+ "undo-failure": "No se ha podido deshacer la edición ya que otro usuario ha realizado una edición intermedia.",
+ "undo-norev": "No se ha podido deshacer la edición porque no existe o ha sido borrada.",
+ "undo-nochange": "Parece que ya se había deshecho la edición.",
+ "undo-summary": "Se ha deshecho la revisión $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]])",
+ "undo-summary-username-hidden": "Se ha deshecho la revisión $1 de un usuario oculto",
"cantcreateaccounttitle": "No se puede crear la cuenta",
- "cantcreateaccount-text": "La creación de cuentas desde esta dirección IP ('''$1''') ha sido bloqueada por [[User:$3|$3]].\n\nEl motivo dado por $3 es ''$2''",
- "cantcreateaccount-range-text": "La creación de cuentas de usuario desde direcciones IP en el rango '''$1''', que incluye tu dirección IP ('''$4'''), ha sido bloqueada por [[User:$3|$3]].\n\nEl motivo dado por $3 es ''$2''",
+ "cantcreateaccount-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas desde esta dirección IP ('''$1''').\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 '''$1''', en el que se encuentra tu dirección IP ('''$4''').\n\nEl motivo dado por $3 es ''$2''",
"viewpagelogs": "Ver los registros de esta página",
"nohistory": "No hay historial de ediciones para esta página.",
"currentrev": "Revisión actual",
- "currentrev-asof": "Última revisión de $1",
- "revisionasof": "Revisión de $1",
- "revision-info": "Revisión de $1 por {{GENDER:$6|$2}}$7",
+ "currentrev-asof": "Revisión actual del $1",
+ "revisionasof": "Revisión del $1",
+ "revision-info": "Revisión del $1 de {{GENDER:$6|$2}}$7",
"previousrevision": "← Revisión anterior",
"nextrevision": "Revisión siguiente →",
"currentrevisionlink": "Revisión actual",
@@ -801,9 +821,9 @@
"last": "ant",
"page_first": "primeras",
"page_last": "últimas",
- "histlegend": "Selección de diferencias: marca los selectores de las versiones a comparar y pulsa ''enter'' o el botón de abajo.<br />\nLeyenda: '''(act)''' = diferencias con la versión actual,\n'''(ant)''' = diferencias con la versión anterior, '''m''' = edición menor",
+ "histlegend": "Selección de diferencias: marca las casillas correspondientes a las versiones a comparar y pulsa Intro o el botón de abajo.<br />\nLeyenda: <strong>(act)</strong> = diferencias con la versión actual,\n<strong>(ant)</strong> = diferencias con la versión anterior, <strong>m</strong> = edición menor",
"history-fieldset-title": "Buscar en el historial",
- "history-show-deleted": "Solo ediciones ocultadas",
+ "history-show-deleted": "Solo eliminadas",
"histfirst": "primeras",
"histlast": "últimas",
"historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
@@ -811,126 +831,127 @@
"history-feed-title": "Historial de revisiones",
"history-feed-description": "Historial de revisiones para esta página en el wiki",
"history-feed-item-nocomment": "$1 en $2",
- "history-feed-empty": "La página solicitada no existe.\nPuede haber sido borrada del wiki o renombrada.\nPrueba a [[Special:Search|buscar en el wiki]] nuevas páginas relevantes.",
+ "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.",
"rev-deleted-comment": "(resumen de edición eliminado)",
"rev-deleted-user": "(nombre de usuario eliminado)",
- "rev-deleted-event": "(entrada borrada)",
+ "rev-deleted-event": "(detalles del registro eliminados)",
"rev-deleted-user-contribs": "[nombre de usuario o dirección IP eliminada - edición ocultada de la lista de contribuciones]",
- "rev-deleted-text-permission": "Esta revisión de la página ha sido '''borrada'''.\nPuede haber detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
- "rev-suppressed-text-permission": "Esta revisión de la página se <strong>suprimió</strong>.\nLos detalles se pueden ver en el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresión].",
- "rev-deleted-text-unhide": "Esta revisión de la página ha sido '''borrada'''.\nPuede haber más detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].\nComo administrador todavía puedes [$1 ver esta revisión] si así lo deseas.",
- "rev-suppressed-text-unhide": "Esta revisión de la página ha sido '''suprimida'''.\nPuede haber más detalles en el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].\nComo administrador podrá seguir [$1 viendo esta revisión] si desea continuar.",
- "rev-deleted-text-view": "Esta revisión de la página ha sido '''borrada'''.\nAún tiene la posibilidad de verla; puede ampliar los detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
- "rev-suppressed-text-view": "Esta revisión de la página ha sido '''suprimida'''.\nAún tiene la posibilidad de verla; puede ampliar los detalles en el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].",
- "rev-deleted-no-diff": "No puedes ver esta diferencia porque una de las revisiones ha sido '''borrada'''.\nPuedes encontrar más detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
- "rev-suppressed-no-diff": "No puedes ver esta diferencia porque una de las revisiones ha sido '''borrada'''.",
- "rev-deleted-unhide-diff": "Una de las revisiones de esta diferencia ha sido '''borrada'''.\nPuede ampliar los detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].\nAún puede [$1 ver este cambio] si así lo desea.",
- "rev-suppressed-unhide-diff": "Una de las revisiones de esta diferencia ha sido '''suprimida'''.\nPuede haber detalles en el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].\nAún puede [$1 ver esta diferencia] si desea así lo desea.",
- "rev-deleted-diff-view": "Una de las revisiones de esta diferencia ha sido '''borrada'''.\nAún tiene la posibilidad de verla; puede ampliar los detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
- "rev-suppressed-diff-view": "Una de las revisiones de esta diferencia ha sido '''suprimida'''.\nAún tiene la posibilidad de verla; puede ampliar los detalles en el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].",
+ "rev-deleted-text-permission": "Esta revisión ha sido <strong>eliminada</strong>.\nPara más información, consulta el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
+ "rev-suppressed-text-permission": "Esta revisión ha sido <strong>suprimida</strong>.\nPara más información, consulta el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].",
+ "rev-deleted-text-unhide": "Esta revisión ha sido <strong>eliminada</strong>.\nPara más información, consulta el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].\nComo administrador, aún puedes [$1 ver esta revisión] si lo deseas.",
+ "rev-suppressed-text-unhide": "Esta revisión ha sido <strong>suprimida</strong>.\nPara más información, consulta el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].\nComo supresor, aún puedes [$1 ver esta revisión] si lo deseas.",
+ "rev-deleted-text-view": "Esta revisión ha sido <strong>eliminada</strong>.\nAún tienes la posibilidad de verla. Para más información, consulta el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
+ "rev-suppressed-text-view": "Esta revisión ha sido <strong>suprimida</strong>.\nAún tienes la posibilidad de verla. Para más información, consulta el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].",
+ "rev-deleted-no-diff": "No puedes ver la diferencia porque una de las revisiones ha sido <strong>eliminada</strong>.\nPuedes encontrar más detalles en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
+ "rev-suppressed-no-diff": "No puedes ver la diferencia porque una de las revisiones ha sido <strong>eliminada</strong>.",
+ "rev-deleted-unhide-diff": "Una de las revisiones ha sido <strong>eliminada</strong>.\nPara más información, consulta el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].\nAún puedes [$1 ver la diferencia] si lo deseas.",
+ "rev-suppressed-unhide-diff": "Una de las revisiones ha sido <strong>suprimida</strong>.\nPara más información, consulta el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].\nAún puedes [$1 ver la diferencia] si lo deseas.",
+ "rev-deleted-diff-view": "Una de las revisiones ha sido <strong>eliminada</strong>.\nAún tienes la posibilidad de verla. Para más información, consulta el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
+ "rev-suppressed-diff-view": "Una de las revisiones ha sido <strong>suprimida</strong>.\nAún tienes la posibilidad de verla. Para más información, consulta el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de supresiones].",
"rev-delundel": "mostrar/ocultar",
"rev-showdeleted": "mostrar",
"revisiondelete": "Borrar/restaurar revisiones",
- "revdelete-nooldid-title": "No hay revisión destino",
- "revdelete-nooldid-text": "No se ha especificado una revisión o revisiones destino sobre las que realizar esta función.",
+ "revdelete-nooldid-title": "La revisión destino es incorrecta",
+ "revdelete-nooldid-text": "Puede haber ocurrido lo siguiente: no se ha especificado una revisión destino sobre la que realizar esta función, la revisión especificada no existe, o estás intentando ocultar la revisión actual.",
"revdelete-no-file": "El archivo especificado no existe.",
- "revdelete-show-file-confirm": "¿Quieres ver la revisión borrada del archivo «<nowiki>$1</nowiki>» del $2 a las $3?",
+ "revdelete-show-file-confirm": "¿Seguro que quieres ver la revisión borrada del archivo «<nowiki>$1</nowiki>» del $2 a las $3?",
"revdelete-show-file-submit": "Sí",
"revdelete-selected-text": "{{PLURAL:$1|Revisión seleccionada|Revisiones seleccionadas}} de [[:$2]]:",
- "revdelete-selected-file": "{{PLURAL:$1|Versión de archivo seleccionada|Versiones de archivo seleccionadas}} de [[:$2]]:",
- "logdelete-selected": "{{PLURAL:$1|Seleccionado un evento|Seleccionados eventos}}:",
- "revdelete-text-text": "Las revisiones eliminadas aún aparecerán en el historial de la página, pero parte de su contenido será inaccesible para el público.",
- "revdelete-text-file": "Las versiones de los archivos eliminados aún aparecerán en el historial del archivo, pero partes de su contenido serán inaccesibles para el público.",
- "logdelete-text": "Las revisiones eliminadas aún aparecerán en el historial de la página, pero parte de su contenido será inaccesible para el público.",
- "revdelete-text-others": "Otros administradores aun serán capaces de acceder a los contenidos ocultos y restaurarlos, a menos que se establezcan restricciones adicionales.",
- "revdelete-confirm": "Por favor confirma que deseas realizar la operación, que entiendes las consecuencias y que estás ejecutando dicha acción acorde con [[{{MediaWiki:Policy-url}}|las políticas]].",
- "revdelete-suppress-text": "La herramienta de supresión '''solo''' debería usarse en los siguientes casos:\n* información potencialmente injuriosa o calumniante.\n* información personal inapropiada, tal como:\n*: ''nombres, domicilios, números de teléfono, números de la seguridad social e información análoga.''",
- "revdelete-legend": "Establecer restricciones de revisión:",
+ "revdelete-selected-file": "{{PLURAL:$1|Versión seleccionada|Versiones seleccionadas}} de [[:$2]]:",
+ "logdelete-selected": "{{PLURAL:$1|Evento seleccionado|Eventos seleccionados}}:",
+ "revdelete-text-text": "Las revisiones eliminadas seguirán apareciendo en el historial de la página, pero parte de su contenido será inaccesible para el público.",
+ "revdelete-text-file": "Las versiones eliminadas seguirán apareciendo en el historial del archivo, pero partes de su contenido serán inaccesibles para el público.",
+ "logdelete-text": "Los eventos eliminados seguirán apareciendo en el registro, pero parte de su contenido será inaccesible para el público.",
+ "revdelete-text-others": "Los demás administradores podrán acceder al contenido oculto y restaurarlo, a menos que se establezcan restricciones adicionales.",
+ "revdelete-confirm": "Por favor confirma que deseas realizar la operación, que entiendes sus consecuencias y que realizas esta acción siguiendo [[{{MediaWiki:Policy-url}}|las políticas]].",
+ "revdelete-suppress-text": "La herramienta de supresión <strong>solo</strong> debería usarse en los siguientes casos:\n* información potencialmente injuriosa o calumniante.\n* información personal inapropiada, tal como:\n*: <em>nombres, domicilios, números de teléfono, números de identificación nacional e información análoga.</em>",
+ "revdelete-legend": "Establecer restricciones de visibilidad",
"revdelete-hide-text": "Texto de la revisión",
"revdelete-hide-image": "Ocultar el contenido del archivo",
- "revdelete-hide-name": "Ocultar acción y objetivo",
+ "revdelete-hide-name": "Ocultar la selección y sus parámetros.",
"revdelete-hide-comment": "Resumen de edición",
"revdelete-hide-user": "Nombre/IP del editor",
- "revdelete-hide-restricted": "Suprimir datos a los administradores así como al resto",
+ "revdelete-hide-restricted": "Suprimir para todos los usuarios, incluidos administradores",
"revdelete-radio-same": "(no cambiar)",
"revdelete-radio-set": "Oculta",
"revdelete-radio-unset": "Visible",
- "revdelete-suppress": "Suprimir datos a los administradores así como al resto",
- "revdelete-unsuppress": "Eliminar restricciones de revisiones restauradas",
+ "revdelete-suppress": "Suprimir para todos los usuarios, incluidos administradores",
+ "revdelete-unsuppress": "Eliminar restricciones de las revisiones restauradas",
"revdelete-log": "Motivo:",
"revdelete-submit": "Aplicar a {{PLURAL:$1|la revisión seleccionada|las revisiones seleccionadas}}",
- "revdelete-success": "'''La visibilidad de revisiones ha sido cambiada correctamente.'''",
- "revdelete-failure": "'''La visibilidad de la revisión no pudo ser establecida:'''\n$1",
- "logdelete-success": "Visibilidad de eventos cambiada correctamente.",
- "logdelete-failure": "'''La visibilidad del registro no pudo ser ajustada:'''\n$1",
- "revdel-restore": "cambiar visibilidad",
+ "revdelete-success": "<strong>Se ha cambiado con éxito la visibilidad de las revisiones.</strong>",
+ "revdelete-failure": "<strong>No se ha podido cambiar la visibilidad de las revisiones:</strong>\n$1",
+ "logdelete-success": "<strong>Se ha cambiado con éxito la visibilidad de los eventos.</strong>",
+ "logdelete-failure": "<strong>No se ha podido cambiar la visibilidad de los eventos:'''\n$1",
+ "revdel-restore": "mostrar/ocultar",
"pagehist": "Historial de la página",
"deletedhist": "Historial borrado",
- "revdelete-hide-current": "Error al ocultar el objeto de fecha $1 a las $2: es la revisión actual.\nNo puede ser ocultada.",
- "revdelete-show-no-access": "Error mostrando el objeto de fecha $2, $1: este objeto ha sido marcado como \"restringido\".\nNo tiene acceso a él.",
- "revdelete-modify-no-access": "Error modificando el objeto de fecha $2, $1: este objeto ha sido marcado como \"restringido\".\nNo tiene acceso a él.",
- "revdelete-modify-missing": "Error modificando el objeto ID $1: ¡no se encuentra en la base de datos!",
- "revdelete-no-change": "'''Atención:''' la revisión de fecha $1 a las $2 ya tiene las restricciones de visibilidad solicitadas.",
- "revdelete-concurrent-change": "Error modificando el objeto de fecha $2, $1: su estado parece haber sido cambiado por alguien más cuando tratabas de modificarlo. Por favor verifica los registros.",
- "revdelete-only-restricted": "Error ocultando el item de fecha $2, $1: no puedes suprimir elementos de vista de los administradores sin seleccionar asímismo una de las otras opciones de visibilidad.",
- "revdelete-reason-dropdown": "*Razones de borrado comunes\n** Violación a los derechos de autor\n** Comentario o información personal inapropiados\n** Nombre de usuario inapropiado\n** Información potencialmente injuriosa o calumniante",
+ "revdelete-hide-current": "Error al ocultar la revisión del $1 a las $2: es la revisión actual y no se puede ocultar.",
+ "revdelete-show-no-access": "Error al mostrar el elemento del $1 a las $2: este elemento ha sido marcado como \"restringido\", por tanto no tienes acceso a él.",
+ "revdelete-modify-no-access": "Error al modificar el elemento del $1 a las $2: este elemento ha sido marcado como \"restringido\", por tanto no tienes acceso a él.",
+ "revdelete-modify-missing": "Error al modificar el elemento con ID $1: no se ha encontrado en la base de datos.",
+ "revdelete-no-change": "<strong>Atención:<strong> la revisión del $1 a las $2 ya tiene las restricciones de visibilidad seleccionadas.",
+ "revdelete-concurrent-change": "Error al modificar el elemento del $1 a las $2: parece que otro usuario cambió su estado mientras tratabas de modificarlo. Por favor, revisa el registro.",
+ "revdelete-only-restricted": "Error al ocultar el elemento del $1 a las $2: no puedes suprimir elementos de cara a los administradores sin seleccionar al mismo tiempo otra de las opciones de visibilidad.",
+ "revdelete-reason-dropdown": "*Razones de borrado más comunes\n** Violación de los derechos de autor\n** Información personal o comentarios inapropiados\n** Nombre de usuario inapropiado\n** Información potencialmente injuriosa o calumniante",
"revdelete-otherreason": "Otro motivo:",
"revdelete-reasonotherlist": "Otro motivo",
"revdelete-edit-reasonlist": "Editar motivos de borrado",
"revdelete-offender": "Autor de la revisión:",
"suppressionlog": "Registro de supresiones",
- "suppressionlogtext": "A continuación hay una lista con los borrados y bloqueos cuyo contenido se encuentra oculto para los administradores.\nVéase la [[Special:BlockList|lista de bloqueos]] que incluye las prohibiciones y bloqueos actualmente operativos.",
- "mergehistory": "Fusionar historiales de páginas",
- "mergehistory-header": "Esta página te permite fusionar revisiones del historial de una página origen en otra más reciente.\nAsegúrate de que esto mantendrá la continuidad histórica de la página.",
+ "suppressionlogtext": "A continuación se muestra una lista de borrados y bloqueos relacionados con contenido oculto para los administradores.\nVéase la [[Special:BlockList|lista de bloqueos]], que incluye las prohibiciones y bloqueos actualmente activos.",
+ "mergehistory": "Fusionar historiales",
+ "mergehistory-header": "Esta página te permite fusionar revisiones del historial de una página origen con los de otra más reciente.\nAsegúrate de que los cambios mantendrán la continuidad histórica de la página.",
"mergehistory-box": "Fusionar los historiales de dos páginas:",
"mergehistory-from": "Página origen:",
"mergehistory-into": "Página destino:",
"mergehistory-list": "Historial de ediciones fusionable",
- "mergehistory-merge": "Las siguientes revisiones de [[:$1]] pueden fusionarse en [[:$2]].\nUsa la columna de casillas para fusionar sólo las revisiones creadas en y antes de la fecha especificada.\nNota que usar los enlaces de navegación borrará las selecciones de esta columna.",
+ "mergehistory-merge": "Las siguientes revisiones de [[:$1]] pueden fusionarse con las de [[:$2]].\nUsa la columna de casillas para fusionar sólo las revisiones creadas en y antes de la fecha especificada.\nTen en cuenta que si cambias de página, se borrará la selección actual de esta columna.",
"mergehistory-go": "Mostrar ediciones fusionables",
"mergehistory-submit": "Fusionar revisiones",
"mergehistory-empty": "No hay revisiones fusionables.",
- "mergehistory-success": "Se {{PLURAL:$3|fusionó $3 revisión|fusionaron $3 revisiones}} de «[[:$1]]» en «[[:$2]]» correctamente.",
+ "mergehistory-success": "Se {{PLURAL:$3|fusionó una revisión|fusionaron $3 revisiones}} de «[[:$1]]» en «[[:$2]]» correctamente.",
"mergehistory-fail": "No se puede realizar la fusión de historiales, por favor revisa la página y los parámetros de tiempo.",
"mergehistory-fail-toobig": "No se puede fusionar el historial ya que más del límite de $1 {{PLURAL:$1|revisión|revisiones}} se moverían.",
"mergehistory-no-source": "La página origen $1 no existe.",
"mergehistory-no-destination": "La página destino $1 no existe.",
- "mergehistory-invalid-source": "La página origen debe tener un título válido.",
- "mergehistory-invalid-destination": "La página de destino ha de tener un título válido.",
- "mergehistory-autocomment": "Fusionando [[:$1]] en [[:$2]]",
- "mergehistory-comment": "Fusionando [[:$1]] en [[:$2]]: $3",
- "mergehistory-same-destination": "Las páginas de origen y destino no pueden ser la misma",
+ "mergehistory-invalid-source": "La página origen ha de tener un título válido.",
+ "mergehistory-invalid-destination": "La página destino ha de tener un título válido.",
+ "mergehistory-autocomment": "Se ha fusionado [[:$1]] en [[:$2]]",
+ "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:",
"mergelog": "Registro de fusiones",
- "pagemerge-logentry": "fusionó [[$1]] en [[$2]] (revisiones hasta $3)",
"revertmerge": "Deshacer fusión",
- "mergelogpagetext": "Debajo está una lista de las fusiones más recientes de historial de una página en otra.",
+ "mergelogpagetext": "A continuación se muestra una lista de las fusiones de historiales más recientes.",
"history-title": "Historial de revisiones de «$1»",
"difference-title": "Diferencia entre revisiones de «$1»",
"difference-title-multipage": "Diferencia entre las páginas «$1» y «$2»",
"difference-multipage": "(Diferencia entre las páginas)",
"lineno": "Línea $1:",
- "compareselectedversions": "Comparar versiones seleccionadas",
- "showhideselectedversions": "Mostrar/ocultar versiones seleccionadas",
+ "compareselectedversions": "Comparar revisiones seleccionadas",
+ "showhideselectedversions": "Mostrar/ocultar revisiones seleccionadas",
"editundo": "deshacer",
"diff-empty": "(Sin diferencias)",
"diff-multi-sameuser": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} del mismo usuario)",
- "diff-multi-otherusers": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|un usuario|$2 usuarios}})",
- "diff-multi-manyusers": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|un usuario|$2 usuarios}})",
- "difference-missing-revision": "No {{PLURAL:$2|se ha encontrado|se han encontrado}} {{PLURAL:$2|una revisión|$2 revisiones}} de esta diferencia ($1).\n\nEsto suele deberse a seguir un enlace obsoleto hacia una página que ya ha sido borrada.\nLos detalles pueden encontrarse en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrado].",
+ "diff-multi-otherusers": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|otro usuario|$2 usuarios}})",
+ "diff-multi-manyusers": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de más de {{PLURAL:$2|un usuario|$2 usuarios}})",
+ "difference-missing-revision": "No {{PLURAL:$2|se ha encontrado|se han encontrado}} {{PLURAL:$2|una revisión|$2 revisiones}} de la comparación solicitada ($1).\n\nLa causa de esto suele ser un enlace obsoleto hacia una página que ya ha sido borrada.\nPara más información, consulta el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
"searchresults": "Resultados de la búsqueda",
"searchresults-title": "Resultados de la búsqueda de «$1»",
- "titlematches": "Coincidencias de título de artículo",
- "textmatches": "Coincidencias de texto de artículo",
- "notextmatches": "No hay coincidencias de texto de artículo",
- "prevn": "{{PLURAL:$1|$1}} previas",
+ "titlematches": "Resultados por título de página",
+ "textmatches": "Resultados por texto de página",
+ "notextmatches": "No hay resultados por texto de página",
+ "prevn": "$1 {{PLURAL:$1|anterior|anteriores}}",
"nextn": "{{PLURAL:$1|$1}} siguientes",
- "prevn-title": "$1 {{PLURAL:$1|resultado|resultados}} previos",
- "nextn-title": "Próximos $1 {{PLURAL:$1|resultado|resultados}}",
+ "prev-page": "página anterior",
+ "next-page": "página siguiente",
+ "prevn-title": "$1 {{PLURAL:$1|resultado anterior|resultados anteriores}}",
+ "nextn-title": "$1 {{PLURAL:$1|resultado siguiente|resultados siguientes}}",
"shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
"viewprevnext": "Ver ($1 {{int:pipe-separator}} $2) ($3).",
- "searchmenu-exists": "<strong>Hay una página llamada «[[:$1]]» en este wiki.</strong> {{PLURAL:$2|0=|Véase también los otros resultados de búsqueda encontrados.}}",
- "searchmenu-new": "<strong>Crear la página «[[:$1]]» en este wiki.</strong> {{PLURAL:$2|0=|Véase también la página encontrada con la búsqueda.|Véanse también los resultados de la búsqueda.}}",
+ "searchmenu-exists": "<strong>Hay una página llamada «[[:$1]]» en este wiki.</strong> {{PLURAL:$2|0=|Véanse también los demás resultados de la búsqueda.}}",
+ "searchmenu-new": "<strong>Crear la página «[[:$1]]» en este wiki.</strong> {{PLURAL:$2|0=|Véase también la página encontrada.|Véanse también los resultados de la búsqueda.}}",
"searchprofile-articles": "Páginas de contenido",
"searchprofile-images": "Multimedia",
"searchprofile-everything": "Todo",
@@ -943,6 +964,7 @@
"search-result-category-size": "{{PLURAL:$1|1 miembro|$1 miembros}} ({{PLURAL:$2|1 subcategoría|$2 subcategorías}}, {{PLURAL:$3|1 fichero|$3 ficheros}})",
"search-redirect": "(redirige desde $1)",
"search-section": "(sección $1)",
+ "search-category": "(categoría $1)",
"search-file-match": "(coincide con el contenido del archivo)",
"search-suggest": "Quizás quieres buscar: $1",
"search-interwiki-caption": "Proyectos hermanos",
@@ -951,8 +973,9 @@
"search-relatedarticle": "Relacionado",
"searchrelated": "relacionado",
"searchall": "todos",
- "showingresults": "Abajo se {{PLURAL:$1|muestra '''1''' resultado|muestran hasta '''$1''' resultados}} comenzando por el n.º '''$2'''.",
- "showingresultsinrange": "Abajo se muestran hasta {{PLURAL:$1|<strong>1</strong> resultado|<strong>$1</strong> resultados}} en el rango #<strong>$2</strong> hasta #<strong>$3</strong>.",
+ "showingresults": "Abajo se {{PLURAL:$1|muestra <strong>1</strong> resultado|muestran hasta <strong>$1</strong> resultados}} comenzando por el n.º <strong>$2</strong>.",
+ "showingresultsinrange": "Abajo se muestran hasta {{PLURAL:$1|<strong>1</strong> resultado|<strong>$1</strong> resultados}} entre el n.º <strong>$2</strong> y el n.º <strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados <strong>$1 - $2</strong> de <strong>$3</strong>}}",
"search-nonefound": "No hay resultados que cumplan los criterios de búsqueda.",
"powersearch-legend": "Búsqueda avanzada",
"powersearch-ns": "Buscar en los espacios de nombres:",
@@ -961,7 +984,7 @@
"powersearch-togglenone": "Ninguno",
"powersearch-remember": "Recordar la selección en búsquedas futuras",
"search-external": "Búsqueda externa",
- "searchdisabled": "Las búsquedas en {{SITENAME}} están temporalmente desactivadas.\nMientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índices relativos a {{SITENAME}} pueden estar desactualizados.",
+ "searchdisabled": "Las búsquedas en {{SITENAME}} están desactivadas.\nMientras tanto puedes buscar mediante Google, pero ten en cuenta que sus índices relativos a {{SITENAME}} pueden estar desactualizados.",
"search-error": "Ha ocurrido un error al buscar: $1",
"preferences": "Preferencias",
"mypreferences": "Preferencias",
@@ -969,43 +992,48 @@
"prefsnologintext2": "Es necesario acceder para cambiar las preferencias del usuario.",
"prefs-skin": "Apariencia",
"skin-preview": "Previsualizar",
- "datedefault": "Sin preferencia",
- "prefs-labs": "Características de los laboratorios",
+ "datedefault": "Ninguno en particular",
+ "prefs-labs": "Características de Labs",
"prefs-user-pages": "Páginas de usuario",
"prefs-personal": "Perfil de usuario",
"prefs-rc": "Cambios recientes",
"prefs-watchlist": "Seguimiento",
- "prefs-watchlist-days": "Número de días a mostrar en la lista de seguimiento:",
+ "prefs-editwatchlist": "Editar lista de seguimiento",
+ "prefs-editwatchlist-label": "Editar entradas de tu lista de seguimiento:",
+ "prefs-editwatchlist-edit": "Ver y quitar los títulos de tu lista de seguimiento",
+ "prefs-editwatchlist-raw": "Editar tu lista de seguimiento en modo texto",
+ "prefs-editwatchlist-clear": "Limpiar tu lista de seguimiento",
+ "prefs-watchlist-days": "Número de días que mostrar en la lista de seguimiento:",
"prefs-watchlist-days-max": "Máximo $1 {{PLURAL:$1|día|días}}",
- "prefs-watchlist-edits": "Número de ediciones a mostrar en la lista expandida:",
+ "prefs-watchlist-edits": "Número máximo de ediciones que mostrar en la lista expandida:",
"prefs-watchlist-edits-max": "Cantidad máxima: 1000",
- "prefs-watchlist-token": "Ficha de lista de seguimiento:",
+ "prefs-watchlist-token": "Clave de lista de seguimiento:",
"prefs-misc": "Miscelánea",
"prefs-resetpass": "Cambiar contraseña",
- "prefs-changeemail": "Cambiar correo electrónico",
+ "prefs-changeemail": "Cambiar la dirección de correo electrónico",
"prefs-setemail": "Establecer una dirección de correo electrónico",
"prefs-email": "Opciones de correo electrónico",
"prefs-rendering": "Apariencia",
"saveprefs": "Guardar",
- "restoreprefs": "Restaurar la configuración predeterminada",
+ "restoreprefs": "Restaurar la configuración predeterminada (en todas las secciones)",
"prefs-editing": "Edición",
"rows": "Filas:",
"columns": "Columnas:",
"searchresultshead": "Búsquedas",
- "stub-threshold": "Límite para formato de <a href=\"#\" class=\"stub\">enlace a esbozo</a> (bytes):",
+ "stub-threshold": "Límite para cambiar a formato de <a href=\"#\" class=\"stub\">enlace a esbozo</a> (en bytes):",
"stub-threshold-disabled": "Desactivado",
- "recentchangesdays": "Días que mostrar en Cambios recientes:",
- "recentchangesdays-max": "(máximo {{PLURAL:$1|un día|$1 días}})",
+ "recentchangesdays": "Días que mostrar en los cambios recientes:",
+ "recentchangesdays-max": "Máximo {{PLURAL:$1|un día|$1 días}}",
"recentchangescount": "N.º de ediciones que mostrar de manera predeterminada:",
- "prefs-help-recentchangescount": "Esto incluye cambios recientes, historiales de página, y registros.",
- "prefs-help-watchlist-token2": "Esta es la clave secreta para el canal de contenido web de tu lista de seguimiento.\nCualquier persona que la conozca podría leer tu lista, así que no la compartas.\n[[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].",
+ "prefs-help-recentchangescount": "Esto incluye cambios recientes, historiales de páginas y registros.",
+ "prefs-help-watchlist-token2": "Esta es la clave secreta del canal de suscripción de tu lista de seguimiento.\nCualquier persona que la conozca podría leer tu lista, así que no la compartas.\n[[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].",
"savedprefs": "Se han guardado tus preferencias.",
"timezonelegend": "Huso horario:",
"localtime": "Hora local:",
"timezoneuseserverdefault": "Usar la hora del servidor ($1)",
- "timezoneuseoffset": "Otra (especifica la diferencia horaria)",
+ "timezoneuseoffset": "Otro (especifica la diferencia horaria)",
"servertime": "Hora del servidor:",
- "guesstimezone": "Rellenar a partir de la hora del navegador",
+ "guesstimezone": "Obtener del navegador",
"timezoneregion-africa": "África",
"timezoneregion-america": "América",
"timezoneregion-antarctica": "Antártida",
@@ -1023,8 +1051,8 @@
"prefs-files": "Archivos",
"prefs-custom-css": "CSS personalizado",
"prefs-custom-js": "JavaScript personalizado",
- "prefs-common-css-js": "CSS/JS compartido para todas las skins:",
- "prefs-reset-intro": "Puedes usar esta página para restaurar tus preferencias a las predeterminadas del sitio.\nEsto no se puede deshacer.",
+ "prefs-common-css-js": "CSS/JavaScript compartido para todas las apariencias:",
+ "prefs-reset-intro": "Puedes usar esta página para restaurar los valores predeterminados de tus preferencias.\nNo podrás deshacer esta acción.",
"prefs-emailconfirm-label": "Confirmación de correo electrónico:",
"youremail": "Correo electrónico:",
"username": "{{GENDER:$1|Nombre de usuario|Nombre de usuaria}}:",
@@ -1035,16 +1063,16 @@
"yourvariant": "Variante lingüística del contenido:",
"prefs-help-variant": "Tu variante u ortografía preferida para mostrar las páginas de contenido de este wiki.",
"yournick": "Firma nueva:",
- "prefs-help-signature": "Los comentarios en páginas de discusión deberían firmarse con «<nowiki>~~~~</nowiki>», que se convertirá en tu firma con fecha y hora.",
+ "prefs-help-signature": "Deberías firmar tus comentarios en páginas de discusión con «<nowiki>~~~~</nowiki>», que se convertirá en tu firma acompañada de la fecha y hora.",
"badsig": "El código de tu firma no es válido; comprueba las etiquetas HTML.",
"badsiglength": "Tu firma es muy larga.\nDebe contener un máximo de {{PLURAL:$1|un carácter|$1 caracteres}}.",
"yourgender": "Sexo:",
"gender-unknown": "Prefiero no especificarlo",
"gender-male": "Masculino",
"gender-female": "Femenino",
- "prefs-help-gender": "Opcional: el software utiliza esta preferencia para dirigirse a ti con el género gramatical apropiado. Esta información es pública.",
+ "prefs-help-gender": "Este campo es opcional. El software lo utiliza para dirigirse a ti con el género gramatical apropiado. Esta información será pública.",
"email": "Correo electrónico",
- "prefs-help-realname": "El nombre real es opcional. Si decides proporcionarlo, se usará para dar atribución a tu trabajo.",
+ "prefs-help-realname": "El nombre real es opcional. Si 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-required": "Es necesario proporcionar una dirección de correo electrónico.",
@@ -1064,78 +1092,79 @@
"prefs-displaywatchlist": "Opciones de visualización",
"prefs-tokenwatchlist": "Clave",
"prefs-diffs": "Diferencias",
- "prefs-help-prefershttps": "Esta preferencia tendrá efecto en tu próximo inicio de sesión.",
+ "prefs-help-prefershttps": "Los cambios surtirán efecto en tu próximo inicio de sesión.",
+ "prefswarning-warning": "Has hecho cambios en tus preferencias que todavía no se han guardado. Si sales de esta página sin pulsar en «$1» no se actualizarán las preferencias.",
"prefs-tabs-navigation-hint": "Sugerencia: Puede utilizar las teclas de flecha izquierda y derecha para navegar entre las pestañas de la lista de pestañas.",
"email-address-validity-valid": "La dirección de correo electrónico parece ser válida",
- "email-address-validity-invalid": "Introduce una dirección de correo válida",
- "userrights": "Gestión de permisos del usuario",
+ "email-address-validity-invalid": "Escribe una dirección de correo electrónico válida",
+ "userrights": "Gestión de permisos de usuario",
"userrights-lookup-user": "Configurar grupos de usuarios",
- "userrights-user-editname": "Escriba un nombre de usuario:",
- "editusergroup": "Modificar grupos de usuarios",
- "editinguser": "Cambiando los derechos del usuario '''[[User:$1|$1]]''' $2",
- "userrights-editusergroup": "Modificar grupos de usuarios",
- "saveusergroups": "Guardar grupos de usuarios",
+ "userrights-user-editname": "Escribe un nombre de usuario:",
+ "editusergroup": "Modificar grupos del usuario",
+ "editinguser": "Cambio de los permisos del usuario <strong>[[User:$1|$1]]</strong> $2",
+ "userrights-editusergroup": "Modificar grupos del usuario",
+ "saveusergroups": "Guardar grupos del usuario",
"userrights-groupsmember": "Miembro de:",
"userrights-groupsmember-auto": "Miembro implícito de:",
"userrights-groups-help": "Puedes modificar los grupos a los que pertenece {{GENDER:$1|este usuario|esta usuaria}}:\n* Un recuadro marcado significa que {{GENDER:$1|el usuario|la usuaria}} está en ese grupo.\n* Un recuadro no marcado 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 agregues, o viceversa.",
"userrights-reason": "Motivo:",
- "userrights-no-interwiki": "No tienes permiso para editar los grupos a los que pertenece un usuario en otros wikis.",
+ "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-nologin": "Debes [[Special:UserLogin|iniciar sesión]] con una cuenta de administrador para poder editar los grupos de los usuarios.",
- "userrights-notallowed": "No tienes permiso para agregar o quitar derechos de usuario.",
+ "userrights-notallowed": "No tienes permiso para añadir o quitar permisos de usuario.",
"userrights-changeable-col": "Grupos que puedes cambiar",
"userrights-unchangeable-col": "Grupos que no puedes cambiar",
- "userrights-conflict": "¡Conflicto de cambio de los derechos de usuario! Por favor, revisar y confirmar tus cambios.",
- "userrights-removed-self": "Usted eliminado con éxito sus propios derechos. Por lo tanto, usted ya no es capaz de acceder a esta página.",
+ "userrights-conflict": "¡Conflicto de cambio de los permisos de usuario! Por favor, revisa y confirma tus cambios.",
+ "userrights-removed-self": "Has eliminado con éxito tus propios permisos. Por tanto, ya no podrás volver a acceder a esta página.",
"group": "Grupo:",
"group-user": "Usuarios",
"group-autoconfirmed": "Usuarios autoconfirmados",
"group-bot": "Bots",
"group-sysop": "Administradores",
"group-bureaucrat": "Burócratas",
- "group-suppress": "Supresores de ediciones",
+ "group-suppress": "Supresores",
"group-all": "(todos)",
"group-user-member": "{{GENDER:$1|usuario|usuaria}}",
"group-autoconfirmed-member": "{{GENDER:$1|usuario autoconfirmado|usuaria autoconfirmada}}",
- "group-bot-member": "bot",
+ "group-bot-member": "{{GENDER:$1|bot}}",
"group-sysop-member": "{{GENDER:$1|administrador|administradora}}",
- "group-bureaucrat-member": "burócrata",
- "group-suppress-member": "{{GENDER:$1|supresor|supresora}} de ediciones",
+ "group-bureaucrat-member": "{{GENDER:$1|burócrata}}",
+ "group-suppress-member": "{{GENDER:$1|supresor|supresora}}",
"grouppage-user": "{{ns:project}}:Usuarios",
"grouppage-autoconfirmed": "{{ns:project}}:Usuarios autoconfirmados",
"grouppage-bot": "{{ns:project}}:Bots",
"grouppage-sysop": "{{ns:project}}:Administradores",
"grouppage-bureaucrat": "{{ns:project}}:Burócratas",
- "grouppage-suppress": "{{ns:project}}:Supresores de ediciones",
+ "grouppage-suppress": "{{ns:project}}:Supresores",
"right-read": "Leer páginas",
"right-edit": "Editar páginas",
- "right-createpage": "Crear páginas que no sean páginas de discusión",
+ "right-createpage": "Crear páginas que no sean de discusión",
"right-createtalk": "Crear páginas de discusión",
"right-createaccount": "Crear cuentas de usuario nuevas",
"right-minoredit": "Marcar ediciones como menores",
"right-move": "Trasladar páginas",
"right-move-subpages": "Trasladar páginas con sus subpáginas",
- "right-move-rootuserpages": "Trasladar páginas de usuario raíz",
- "right-move-categorypages": "Trasladar páginas de categoría",
+ "right-move-rootuserpages": "Trasladar páginas raíz de usuario",
+ "right-move-categorypages": "Trasladar categorías",
"right-movefile": "Trasladar archivos",
- "right-suppressredirect": "No crear redirecciones de las páginas fuente al trasladar páginas",
+ "right-suppressredirect": "Trasladar páginas sin dejar redirección",
"right-upload": "Subir archivos",
"right-reupload": "Subir una nueva versión de un archivo existente",
"right-reupload-own": "Subir una nueva versión de un archivo creado por uno mismo",
- "right-reupload-shared": "Sobreescribir localmente ficheros del repositorio multimedia",
+ "right-reupload-shared": "Sobreescribir localmente archivos del repositorio multimedia",
"right-upload_by_url": "Subir un archivo a traves de un URL",
"right-purge": "Purgar la caché en el servidor sin tener que dar confirmación",
- "right-autoconfirmed": "No ser afectado por los límites de frecuencia basados en el IP",
+ "right-autoconfirmed": "No resultar afectado por los límites de frecuencia de edición para las IP",
"right-bot": "Ser tratado como un programa automático",
- "right-nominornewtalk": "No accionar el aviso de nuevos mensajes al realizar ediciones menores de páginas de discusión",
- "right-apihighlimits": "Tener límites más altos de peticiones a través del API",
- "right-writeapi": "Hacer uso del API para escribir",
+ "right-nominornewtalk": "No accionar el aviso de mensajes nuevos al realizar ediciones menores en páginas de discusión",
+ "right-apihighlimits": "Tener límites más altos para las peticiones a través de la API",
+ "right-writeapi": "Hacer uso de la API de escritura",
"right-delete": "Borrar páginas",
"right-bigdelete": "Borrar páginas con historiales grandes",
- "right-deletelogentry": "Borrar y recuperar entradas de registro específicas",
+ "right-deletelogentry": "Borrar y restaurar entradas de registro específicas",
"right-deleterevision": "Borrar y restaurar revisiones específicas de páginas",
- "right-deletedhistory": "Ver el historial de páginas borradas, sin el texto asociado",
- "right-deletedtext": "Ver texto borrado y cambios entre revisiones borradas",
+ "right-deletedhistory": "Ver el historial de páginas borradas sin su texto asociado",
+ "right-deletedtext": "Ver texto borrado y los cambios entre revisiones borradas",
"right-browsearchive": "Buscar páginas borradas",
"right-undelete": "Restaurar una página",
"right-suppressrevision": "Ver, ocultar y mostrar revisiones específicas de páginas de cualquier usuario",
@@ -1144,92 +1173,96 @@
"right-block": "Bloquear a otros usuarios para que no editen",
"right-blockemail": "Bloquear a un usuario para que no pueda mandar correos electrónicos",
"right-hideuser": "Bloquear un nombre de usuario, haciéndolo invisible",
- "right-ipblock-exempt": "Pasar por encima de bloqueos de IPs, auto-bloqueos y bloqueos de rangos.",
- "right-proxyunbannable": "Pasar por encima de bloqueos automáticos de proxies",
- "right-unblockself": "Desbloquearse uno mismo",
+ "right-ipblock-exempt": "Quedar exento de bloqueos a IPs, autobloqueos y bloqueos de rango.",
+ "right-proxyunbannable": "Quedar exento de bloqueos automáticos a proxies",
+ "right-unblockself": "Desbloquearse a sí mismo",
"right-protect": "Cambiar niveles de protección y editar páginas protegidas en cascada",
"right-editprotected": "Editar páginas protegidas como «{{int:protect-level-sysop}}»",
"right-editsemiprotected": "Editar páginas protegidas como «{{int:protect-level-autoconfirmed}}»",
+ "right-editcontentmodel": "Editar el modelo de contenido de una página",
"right-editinterface": "Editar la interfaz de usuario",
"right-editusercssjs": "Editar las páginas de CSS y JavaScript de otros usuarios",
"right-editusercss": "Editar las páginas de CSS de otros usuarios",
"right-edituserjs": "Editar las páginas de JavaScript de otros usuarios",
- "right-editmyusercss": "Editar tus archivos de usuario CSS",
- "right-editmyuserjs": "Editar tus propios archivos JavaScript de usuario",
+ "right-editmyusercss": "Editar tus páginas de CSS",
+ "right-editmyuserjs": "Editar tus archivos JavaScript",
"right-viewmywatchlist": "Ver tu lista de seguimiento",
- "right-editmywatchlist": "Editar tu lista de seguimiento. Algunas acciones seguirán agregando páginas aún sin este derecho.",
- "right-viewmyprivateinfo": "Ver tu información privada (ej. email, nombre real)",
- "right-editmyprivateinfo": "Editar tus propios datos privados (ej: email, nombre real)",
- "right-editmyoptions": "Editar tus propias preferencias",
+ "right-editmywatchlist": "Editar tu lista de seguimiento. Algunas acciones seguirán agregando páginas aun sin este permiso.",
+ "right-viewmyprivateinfo": "Ver tu información privada (ej. correo electrónico, nombre real)",
+ "right-editmyprivateinfo": "Editar tu información privada (ej: correo electrónico, nombre real)",
+ "right-editmyoptions": "Editar tus preferencias",
"right-rollback": "Revertir rápidamente las ediciones del último usuario que modificó una página en particular",
- "right-markbotedits": "Marcar ediciones deshechas como ediciones de un bot",
- "right-noratelimit": "No afectado por límites de frecuencia",
+ "right-markbotedits": "Marcar ediciones revertidas como ediciones de bot",
+ "right-noratelimit": "No resultar afectado por los límites de frecuencia de edición",
"right-import": "Importar páginas desde otras wikis",
- "right-importupload": "Importar páginas de un archivo subido",
- "right-patrol": "Marcar ediciones de otros como patrulladas",
- "right-autopatrol": "Marcar como patrulladas sus ediciones automáticamente",
- "right-patrolmarks": "Ver las marcas de patrullaje de cambios recientes",
+ "right-importupload": "Importar páginas desde un archivo",
+ "right-patrol": "Marcar ediciones de otros como verificadas",
+ "right-autopatrol": "Tener automáticamente marcadas como verificadas las ediciones propias",
+ "right-patrolmarks": "Ver las marcas de verificación de cambios recientes",
"right-unwatchedpages": "Ver una lista de páginas no vigiladas",
- "right-mergehistory": "Fusionar historiales",
- "right-userrights": "Modificar todos los derechos de usuario",
- "right-userrights-interwiki": "Modificar los derechos de usuarios en otros wikis",
+ "right-mergehistory": "Fusionar historiales de páginas",
+ "right-userrights": "Modificar todos los permisos de usuario",
+ "right-userrights-interwiki": "Modificar los permisos de usuario en otros wikis",
"right-siteadmin": "Bloquear y desbloquear la base de datos",
- "right-override-export-depth": "Exporta páginas incluyendo aquellas enlazadas hasta una profundidad de 5",
- "right-sendemail": "Enviar un correo electrónico a otros usuarios",
- "right-passwordreset": "Ver os correos electrónicos de restablecimiento de contraseñas",
+ "right-override-export-depth": "Exportar páginas, incluyendo aquellas enlazadas hasta una profundidad de 5",
+ "right-sendemail": "Enviar correo electrónico a otros usuarios",
+ "right-passwordreset": "Ver los mensajes de restablecimiento de contraseña",
+ "right-managechangetags": "Crear y eliminar [[Special:Tags|etiquetas]] en la base de datos",
"newuserlogpage": "Registro de creación de usuarios",
"newuserlogpagetext": "Este es un registro de creación de usuarios.",
- "rightslog": "Cambios de perfil de usuario",
+ "rightslog": "Registro de permisos de usuario",
"rightslogtext": "Este es un registro de cambios en los permisos de usuarios.",
"action-read": "leer esta página",
"action-edit": "modificar esta página",
"action-createpage": "crear páginas",
"action-createtalk": "crear páginas de discusión",
"action-createaccount": "crear esta cuenta de usuario",
- "action-history": "Ver el historial de esta página",
+ "action-history": "ver el historial de esta página",
"action-minoredit": "marcar este cambio como menor",
"action-move": "trasladar esta página",
"action-move-subpages": "trasladar esta página y sus subpáginas",
- "action-move-rootuserpages": "trasladar páginas de usuario raíz",
- "action-move-categorypages": "trasladar páginas de categoría",
+ "action-move-rootuserpages": "trasladar páginas raíz de usuario",
+ "action-move-categorypages": "trasladar categorías",
"action-movefile": "trasladar este archivo",
"action-upload": "subir este archivo",
"action-reupload": "reemplazar este archivo existente",
- "action-reupload-shared": "reemplazar este archivo existente en un depósito compartido",
- "action-upload_by_url": "subir este archivo desde una dirección URL",
- "action-writeapi": "utilizar el API de escritura",
+ "action-reupload-shared": "reemplazar este archivo existente en un repositorio compartido",
+ "action-upload_by_url": "subir este archivo desde una URL",
+ "action-writeapi": "utilizar la API de escritura",
"action-delete": "borrar esta página",
"action-deleterevision": "borrar esta revisión",
"action-deletedhistory": "ver el historial borrado de esta página",
"action-browsearchive": "buscar páginas borradas",
"action-undelete": "recuperar esta página",
- "action-suppressrevision": "revisar y restaurar esta revisión escondida",
+ "action-suppressrevision": "revisar y restaurar esta revisión oculta",
"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-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",
- "action-patrol": "marcar ediciones de otros como patrulladas",
- "action-autopatrol": "marcar como patrulladas tus propias ediciones",
+ "action-patrol": "marcar ediciones de otros como verificadas",
+ "action-autopatrol": "tener tus ediciones marcadas como verificadas",
"action-unwatchedpages": "ver la lista de páginas no vigiladas",
"action-mergehistory": "fusionar el historial de esta página",
- "action-userrights": "modificar todos los derechos de usuario",
- "action-userrights-interwiki": "modificar los derechos de usuarios en otros wikis",
+ "action-userrights": "modificar todos los permisos de usuario",
+ "action-userrights-interwiki": "modificar los permisos de los usuarios en otros wikis",
"action-siteadmin": "bloquear o desbloquear la base de datos",
"action-sendemail": "enviar correos electrónicos",
- "action-editmywatchlist": "Editar tu lista de seguimiento",
- "action-viewmywatchlist": "Ver tu lista de seguimiento",
+ "action-editmywatchlist": "editar tu lista de seguimiento",
+ "action-viewmywatchlist": "ver tu lista de seguimiento",
"action-viewmyprivateinfo": "ver tu información privada",
- "action-editmyprivateinfo": "Editar tu información privada",
+ "action-editmyprivateinfo": "editar tu información privada",
+ "action-editcontentmodel": "editar el modelo de contenido de una página",
+ "action-managechangetags": "crear y eliminar etiquetas en la base de datos",
"nchanges": "$1 {{PLURAL:$1|cambio|cambios}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde la última visita}}",
"enhancedrc-history": "historial",
"recentchanges": "Cambios recientes",
"recentchanges-legend": "Opciones sobre cambios recientes",
"recentchanges-summary": "Sigue los cambios más recientes de la wiki en esta página.",
- "recentchanges-noresult": "No hubo cambios durante el período seleccionado que respondan a esos criterios.",
- "recentchanges-feed-description": "Realiza un seguimiento de los cambios más recientes en el wiki en este canal.",
+ "recentchanges-noresult": "No hubo cambios que respondan a esos criterios durante el período seleccionado.",
+ "recentchanges-feed-description": "Realiza un seguimiento de los cambios más recientes en el wiki con este canal.",
"recentchanges-label-newpage": "Esta edición creó una página",
"recentchanges-label-minor": "Esta es una edición menor",
"recentchanges-label-bot": "Esta edición fue realizada por un robot",
@@ -1237,8 +1270,8 @@
"recentchanges-label-plusminus": "El tamaño de la página cambió esta cantidad de bytes",
"recentchanges-legend-heading": "'''Leyenda:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véase también la [[Special:NewPages|lista de páginas nuevas]])",
- "rcnotefrom": "Debajo está{{PLURAL:$5|el cambio|n los cambios}} desde <strong>$3, $4</strong> (se muestran hasta <strong>$1</strong>).",
- "rclistfrom": "Mostrar nuevos cambios desde $2, $3",
+ "rcnotefrom": "Debajo aparece{{PLURAL:$5| el cambio|n los cambios}} desde <strong>$3, $4</strong> (se muestran hasta <strong>$1</strong>).",
+ "rclistfrom": "Mostrar cambios nuevos desde las $2 del $3",
"rcshowhideminor": "$1 ediciones menores",
"rcshowhideminor-show": "Mostrar",
"rcshowhideminor-hide": "Ocultar",
@@ -1261,7 +1294,7 @@
"diff": "dif",
"hist": "hist",
"hide": "Ocultar",
- "show": "mostrar",
+ "show": "Mostrar",
"minoreditletter": "m",
"newpageletter": "N",
"boteditletter": "b",
@@ -1277,49 +1310,49 @@
"recentchangeslinked-feed": "Cambios relacionados",
"recentchangeslinked-toolbox": "Cambios relacionados",
"recentchangeslinked-title": "Cambios relacionados con «$1»",
- "recentchangeslinked-summary": "Esta página es una lista de los últimos cambios en las páginas enlazadas desde una página (o en las pertenecientes a una categoría). Las páginas que están en tu [[Special:Watchlist|lista de seguimiento]] aparecen en '''negrita'''.",
+ "recentchangeslinked-summary": "Esta página es una lista de los últimos cambios en las páginas enlazadas desde una página dada (o en las pertenecientes a una categoría dada). Las páginas que están en tu [[Special:Watchlist|lista de seguimiento]] aparecen en <strong>negrita</strong>.",
"recentchangeslinked-page": "Nombre de la página:",
- "recentchangeslinked-to": "Muestra los cambios recientes en lugar de la página indicada",
- "upload": "Subir un archivo",
+ "recentchangeslinked-to": "Mostrar los cambios en páginas enlazadas con la página seleccionada",
+ "upload": "Subir archivo",
"uploadbtn": "Subir un archivo",
- "reuploaddesc": "Regresar al formulario para subir.",
- "upload-tryagain": "Envíe la descripción del archivo modificado",
+ "reuploaddesc": "Cancelar subida y volver al formulario de carga",
+ "upload-tryagain": "Enviar la descripción modificada del archivo",
"uploadnologin": "No has iniciado sesión",
"uploadnologintext": "Tienes que $1 para subir archivos.",
- "upload_directory_missing": "El directorio de subida de archivos ($1) no existe, y no puede ser creado por el servidor.",
+ "upload_directory_missing": "El directorio de subida de archivos ($1) no existe, y el servidor no ha podido crearlo.",
"upload_directory_read_only": "El servidor web no puede escribir en el directorio de subida de archivos ($1).",
- "uploaderror": "Error al intentar subir archivo",
- "upload-recreate-warning": "'''Aviso: Un archivo con ese nombre ha sido eliminado o renombrado.'''\n\nA continuación se muestra el registro de borrados y traslados de esta página:",
- "uploadtext": "Utiliza el siguiente formulario para subir archivos.\nPara ver o buscar archivos subidos con anterioridad, ve a la [[Special:FileList|lista de archivos subidos]].\nLos archivos subidos quedarán registrados además en el [[Special:Log/upload|registro de archivos subidos]] y los borrados en el [[Special:Log/delete|registro de borrados]].\n\nPara incluir un archivo en una página, usa un enlace como los mostrados a continuación:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' para usar el fichero en tamaño completo\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|texto descriptivo]]</nowiki></code>''' para una versión de 200 píxeles de ancho en una caja en el margen izquierdo con 'texto descriptivo' como descripción\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' para enlazar directamente al fichero sin mostrarlo.",
- "upload-permitted": "Tipos de archivo permitidos: $1.",
- "upload-preferred": "Tipos de archivo preferidos: $1.",
- "upload-prohibited": "Tipos de archivo prohibidos: $1.",
+ "uploaderror": "Error al intentar subir",
+ "upload-recreate-warning": "<strong>Aviso: Un archivo con ese nombre ha sido eliminado o renombrado.</strong>\n\nA continuación se muestra el registro de borrados y traslados de esta página:",
+ "uploadtext": "Utiliza el siguiente formulario para subir archivos.\nPara ver o buscar archivos subidos con anterioridad, ve a la [[Special:FileList|lista de archivos subidos]].\nLos archivos subidos también quedarán registrados en el [[Special:Log/upload|registro de archivos subidos]], y los borrados en el [[Special:Log/delete|registro de borrados]].\n\nPara incluir un archivo en una página, usa un enlace como los mostrados a continuación:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> para usar la versión a tamaño completo del archivo\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|texto alternativo]]</nowiki></code></strong> para una versión de 200 píxeles de ancho situada en una caja en el margen izquierdo con \"texto alternativo\" como descripción\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> para enlazar directamente al archivo sin mostrarlo.",
+ "upload-permitted": "{{PLURAL:$2|Tipo|Tipos}} de archivo permitidos: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipo|Tipos}} de archivo preferidos: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipo|Tipos}} de archivo prohibidos: $1.",
"uploadlogpage": "Subidas de archivos",
- "uploadlogpagetext": "Abajo hay una lista de los últimos archivos subidos.\nMira la [[Special:NewFiles|galería de archivos nuevos]] para una descripción visual",
+ "uploadlogpagetext": "Debajo se muestra una lista de los últimos archivos subidos.\nVéase la [[Special:NewFiles|galería de archivos nuevos]] para una vista más estilizada",
"filename": "Nombre del archivo",
- "filedesc": "Sumario",
- "fileuploadsummary": "Descripción:",
+ "filedesc": "Resumen",
+ "fileuploadsummary": "Resumen:",
"filereuploadsummary": "Cambios de archivo:",
- "filestatus": "Estado de copyright:",
+ "filestatus": "Información de copyright:",
"filesource": "Fuente:",
"ignorewarning": "Ignorar aviso y guardar de todos modos",
- "ignorewarnings": "Ignorar cualquier aviso",
+ "ignorewarnings": "Ignorar todos los avisos",
"minlength1": "Los nombres de archivo deben tener al menos una letra.",
- "illegalfilename": "El nombre de archivo «$1» contiene caracteres que no están permitidos en títulos de páginas. Por favor, renombra el archivo e intenta volver a subirlo.",
+ "illegalfilename": "El nombre de archivo «$1» contiene caracteres que no están permitidos en títulos de página. Cambia el nombre del archivo e intenta subirlo de nuevo.",
"filename-toolong": "Los nombres de archivo no pueden tener más de 240 bytes.",
- "badfilename": "El nombre de la imagen se ha cambiado a «$1».",
- "filetype-mime-mismatch": "La extensión de archivo «.$1» no coincide con el tipo detectado de MIME del archivo ($2).",
+ "badfilename": "Se ha cambiado el nombre del archivo a «$1».",
+ "filetype-mime-mismatch": "La extensión de archivo «.$1» no coincide con el tipo MIME detectado en el archivo ($2).",
"filetype-badmime": "No se permite subir archivos de tipo MIME «$1».",
- "filetype-bad-ie-mime": "No se puede subir este archivo porque Internet Explorer podría considerarlo como «$1», que es un tipo de archivo no permitido y potencialmente peligroso.",
- "filetype-unwanted-type": "'''«.$1»''' no está entre los tipos de fichero aconsejados.\n{{PLURAL:$3|El único tipo aconsejado es|Los tipos aconsejados son}} $2.",
- "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|no es un tipo de archivo permitido|no son tipos de archivos permitidos}}.\n{{PLURAL:$3|El tipo de archivo permitido es|Los tipos de archivos permitidos son}} $2.",
+ "filetype-bad-ie-mime": "No se puede subir este archivo porque Internet Explorer podría considerarlo como «$1», que es un tipo de archivo no autorizado y potencialmente peligroso.",
+ "filetype-unwanted-type": "<strong>«.$1»</strong> no está entre los tipos de archivo aconsejados.\n{{PLURAL:$3|El único tipo aconsejado es|Los tipos aconsejados son}} $2.",
+ "filetype-banned-type": "{{PLURAL:$4|El tipo de archivo|Los tipos de archivo}} <strong>\".$1\"</strong> no {{PLURAL:$4|está permitido|están permitidos}}.\n{{PLURAL:$3|El único tipo de archivo permitido es|Los tipos de archivos permitidos son}} $2.",
"filetype-missing": "El archivo no tiene extensión (como «.jpg»).",
"empty-file": "El archivo que enviaste estaba vacío.",
"file-too-large": "El archivo que enviste era demasiado grande.",
"filename-tooshort": "El nombre de archivo es demasiado corto.",
"filetype-banned": "El tipo de archivo está prohibido.",
- "verification-error": "Este archivo no pasó la verificación de archivos.",
- "hookaborted": "La modificación que ha intentado realizar fue cancelada por un adicional de extensión.",
+ "verification-error": "Este archivo no superó la verificación de archivos.",
+ "hookaborted": "Una extensión ha impedido la modificación que intentaste realizar.",
"illegal-filename": "El nombre de archivo no está permitido.",
"overwrite": "Sobrescribir un archivo existente no está permitido.",
"unknown-error": "Ocurrió un error desconocido.",
@@ -1476,10 +1509,10 @@
"filehist-deleteall": "borrar todo",
"filehist-deleteone": "borrar",
"filehist-revert": "revertir",
- "filehist-current": "act",
+ "filehist-current": "actual",
"filehist-datetime": "Fecha y hora",
"filehist-thumb": "Miniatura",
- "filehist-thumbtext": "Miniatura de la versión de $1",
+ "filehist-thumbtext": "Miniatura de la versión del $1",
"filehist-nothumb": "Sin miniatura",
"filehist-user": "Usuario",
"filehist-dimensions": "Dimensiones",
@@ -1494,7 +1527,7 @@
"duplicatesoffile": "{{PLURAL:$1|El siguiente archivo es un duplicado|Los siguientes $1 archivos son duplicados}} de éste ([[Special:FileDuplicateSearch/$2|más detalles]]):",
"sharedupload": "Este archivo es de $1 y puede ser usado por otros proyectos.",
"sharedupload-desc-there": "Este archivo es de $1 y puede ser usado por otros proyectos.\nPor favor mira la [$2 página de descripción del archivo] para información adicional.",
- "sharedupload-desc-here": "Este archivo es de $1 y puede ser usado por otros proyectos.\nLa descripción en su [$2 página de descripción del archivo] está mostrada debajo.",
+ "sharedupload-desc-here": "Este archivo es de $1 y puede usarse en otros proyectos.\nLa descripción en su [$2 página de descripción del archivo] se muestra debajo.",
"sharedupload-desc-edit": "Este archivo es de $1 y puede ser utilizado por otros proyectos.\nTal vez desee editar la descripción de su [$2 página de descripción del archivo] allí.",
"sharedupload-desc-create": "Este archivo es de $1 y puede ser utilizado por otros proyectos.\nTal vez desee editar la descripción de su [$2 página de descripción del archivo] allí.",
"filepage-nofile": "No existe ningún archivo con este nombre.",
@@ -1552,7 +1585,6 @@
"statistics": "Estadísticas",
"statistics-header-pages": "Estadísticas de páginas",
"statistics-header-edits": "Estadísticas de ediciones",
- "statistics-header-views": "Estadísticas de visitas",
"statistics-header-users": "Estadísticas de usuario",
"statistics-header-hooks": "Otras estadísticas",
"statistics-articles": "Páginas de contenido",
@@ -1561,13 +1593,9 @@
"statistics-files": "Archivos subidos",
"statistics-edits": "Ediciones en páginas desde que {{SITENAME}} fue instalado",
"statistics-edits-average": "Media de ediciones por página",
- "statistics-views-total": "Visitas totales",
- "statistics-views-total-desc": "No se incluyen accesos a páginas no existentes ni páginas especiales",
- "statistics-views-peredit": "Visitas por edición",
"statistics-users": "[[Special:ListUsers|Usuarios]] registrados",
"statistics-users-active": "Usuarios activos",
"statistics-users-active-desc": "Usuarios que han ejecutado una acción en {{PLURAL:$1|el último día|los últimos $1 días}}",
- "statistics-mostpopular": "Páginas más vistas",
"pageswithprop": "Páginas con una propiedad de página",
"pageswithprop-legend": "Páginas con una propiedad de página",
"pageswithprop-text": "Esta página muestra las páginas que usan la propiedad de una página en particular",
@@ -1608,9 +1636,9 @@
"uncategorizedtemplates": "Plantillas sin categorizar",
"unusedcategories": "Categorías sin uso",
"unusedimages": "Imágenes sin uso",
- "popularpages": "Páginas populares",
"wantedcategories": "Categorías requeridas",
"wantedpages": "Páginas requeridas",
+ "wantedpages-summary": "Lista de páginas inexistentes con el mayor número de enlaces a ellas, excluyendo páginas con únicamente redirecciones. Para una lista de páginas con redirecciones apuntando a ellas, consulte [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Título inválido en conjunto de resultados: $1",
"wantedfiles": "Ficheros requeridos",
"wantedfiletext-cat": "Los siguientes archivos están en uso, pero no existen. Es posible que algunos de ellos estén almacenados en repositorios externos y se hayan incluido aquí por error; dichas entradas aparecen <del>tachadas</del>. De igual manera, las páginas que incluyen archivos inexistentes se enumeran en [[:$1]].",
@@ -1663,16 +1691,18 @@
"unusedimagestext": "Los siguientes archivos existen pero no están insertados en ninguna página.\nPor favor note que otros sitios web pueden vincular a un archivo con un URL directo, y por tanto pueden ser listados aquí a pesar de estar en uso activo.",
"unusedcategoriestext": "Las siguientes categorías han sido creadas, pero ningún artículo o categoría las utiliza.",
"notargettitle": "No hay página objetivo",
- "notargettext": "Especifique sobre qué página desea llevar a cabo esta acción.",
+ "notargettext": "No has especificado sobre qué página deseas llevar a cabo esta acción.",
"nopagetitle": "No existe la página destino",
"nopagetext": "La página destino que ha especificado no existe.",
"pager-newer-n": "{{PLURAL:$1|1 siguiente|$1 siguientes}}",
"pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
"suppress": "Supresor de ediciones",
"querypage-disabled": "Esta página especial está deshabilitada por motivos de rendimiento.",
+ "apihelp": "Ayuda de la API",
+ "apihelp-no-such-module": "No se encontró el módulo \"$1\".",
"booksources": "Fuentes de libros",
"booksources-search-legend": "Buscar fuentes de libros",
- "booksources-go": "Ir",
+ "booksources-search": "Buscar",
"booksources-text": "Abajo hay una lista de enlaces a otros sitios que venden libros nuevos y usados, puede que contengan más información sobre los libros que estás buscando.",
"booksources-invalid-isbn": "El número de ISBN no parece ser válido; comprueba los errores copiándolo de la fuente original.",
"specialloguserlabel": "Usuario:",
@@ -1688,7 +1718,7 @@
"prevpage": "Página anterior ($1)",
"allpagesfrom": "Mostrar páginas que empiecen por:",
"allpagesto": "Mostrar páginas terminadas con:",
- "allarticles": "Todos los artículos",
+ "allarticles": "Todas las páginas",
"allinnamespace": "Todas las páginas (espacio de nombres $1)",
"allpagessubmit": "Mostrar",
"allpagesprefix": "Mostrar páginas con el prefijo:",
@@ -1764,7 +1794,7 @@
"emailpage": "Enviar mensaje al usuario",
"emailpagetext": "Puedes usar el formulario de abajo para enviar un correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}.\nLa dirección de correo electrónico que indicaste en [[Special:Preferences|tus preferencias de usuario]] aparecerá en el campo \"Remitente\" o \"De\" para que el destinatario pueda responderte.",
"defemailsubject": "Correo electrónico enviado por el usuario «$1» desde {{SITENAME}}",
- "usermaildisabled": "Correo electrónico del usuario deshabilitado",
+ "usermaildisabled": "Correo electrónico del usuario desactivado",
"usermaildisabledtext": "No puedes enviar correos electrónicos a otros usuarios en esta wiki",
"noemailtitle": "No hay dirección de correo electrónico",
"noemailtext": "Este usuario no ha especificado una dirección de correo electrónico válida.",
@@ -1808,7 +1838,7 @@
"wlheader-enotif": "La notificación por correo está activada.",
"wlheader-showupdated": "Las páginas modificadas desde su última visita aparecen en '''negrita'''.",
"wlnote": "A continuación {{PLURAL:$1|se muestra el último cambio|se muestran los últimos '''$1''' cambios}} en {{PLURAL:$2|la última hora|las últimas '''$2''' horas}} a fecha de $4 $3.",
- "wlshowlast": "Ver los cambios de las últimas $1 horas, $2 días $3",
+ "wlshowlast": "Ver los cambios de las últimas $1 horas, $2 días",
"watchlist-options": "Opciones de la lista de seguimiento",
"watching": "Vigilando...",
"unwatching": "Eliminando de la lista de seguimiento...",
@@ -1839,7 +1869,7 @@
"delete-confirm": "Borrar «$1»",
"delete-legend": "Borrar",
"historywarning": "<strong>Atención:</strong> la página que estás a punto de borrar tiene un historial con $1 {{PLURAL:$1|revisión|revisiones}}:",
- "confirmdeletetext": "Estás a punto de borrar una página en forma permanente, así como todo su historial.\nPor favor, confirma que realmente quieres hacer eso, que entiendes las\nconsecuencias, y que lo estás haciendo de acuerdo con [[{{MediaWiki:Policy-url}}|las políticas]].",
+ "confirmdeletetext": "Estás a punto de borrar una página, así como todo su historial.\nPor favor, confirma que realmente quieres hacer eso, que entiendes las consecuencias, y que lo estás haciendo de acuerdo con [[{{MediaWiki:Policy-url}}|las políticas]].",
"actioncomplete": "Acción completada",
"actionfailed": "Acción fallida",
"deletedtext": "«$1» ha sido borrado.\nVéase $2 para un registro de los borrados recientes.",
@@ -1857,7 +1887,6 @@
"deleteprotected": "No puedes eliminar esta página porque ha sido protegida.",
"deleting-backlinks-warning": "'''Advertencia:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otras páginas]] enlazan o transcluyen la página que vas a eliminar.",
"rollback": "Revertir ediciones",
- "rollback_short": "Revertir",
"rollbacklink": "revertir",
"rollbacklinkcount": "revertir $1 {{PLURAL:$1|edición|ediciones}}",
"rollbacklinkcount-morethan": "revertir más de $1 {{PLURAL:$1|edición|ediciones}}",
@@ -1878,7 +1907,7 @@
"movedarticleprotection": "cambiadas protecciones de «[[$2]]» a «[[$1]]»",
"protect-title": "Cambiando el nivel de protección de «$1»",
"protect-title-notallowed": "Ver el nivel de protección de «$1»",
- "prot_1movedto2": "heredando la protección al trasladar [[$1]] a [[$2]]",
+ "prot_1movedto2": "[[$1]] se trasladó a [[$2]]",
"protect-badnamespace-title": "Espacio de nombres no protegible",
"protect-badnamespace-text": "Las páginas de este espacio de nombres no pueden ser protegidas",
"protect-norestrictiontypes-text": "Esta página no se puede proteger ya que no hay ningún tipo de restricción disponible.",
@@ -1890,9 +1919,9 @@
"protect_expiry_old": "El tiempo de expiración está en el pasado.",
"protect-unchain-permissions": "Desbloquear opciones de protección adicionales",
"protect-text": "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
- "protect-locked-blocked": "No puede cambiar los niveles de protección estando bloqueado. A continuación se muestran las opciones actuales de la página '''$1''':",
+ "protect-locked-blocked": "No puedes cambiar los niveles de protección estando bloqueado.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
"protect-locked-dblock": "Los niveles de protección no se pueden cambiar debido a un bloqueo activo de la base de datos.\nA continuación se muestran las opciones actuales de la página '''$1''':",
- "protect-locked-access": "Su cuenta no tiene permiso para cambiar los niveles de protección de una página.\nA continuación se muestran las opciones actuales de la página '''$1''':",
+ "protect-locked-access": "Tu cuenta no tiene permiso para cambiar los niveles de protección de una página.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
"protect-cascadeon": "Actualmente esta página está protegida porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que tienen activada la opción de protección en cascada. Puedes cambiar el nivel de protección de esta página, pero no afectará a la protección en cascada.",
"protect-default": "Permitir todos los usuarios",
"protect-fallback": "Solo permitir usuarios con el permiso «$1»",
@@ -1907,6 +1936,7 @@
"protect-othertime": "Especificar caducidad:",
"protect-othertime-op": "otra (especificar)",
"protect-existing-expiry": "Fecha de caducidad actual: $2 a las $3",
+ "protect-existing-expiry-infinity": "Tiempo de caducidad existente: infinito",
"protect-otherreason": "Otra razón:",
"protect-otherreason-op": "Otra razón",
"protect-dropdown": "*Razones de protección habituales\n**Vandalismo excesivo\n**Spam excesivo\n**Guerra de ediciones\n**Página muy visitada",
@@ -1928,11 +1958,11 @@
"undeletepage": "Ver y restaurar páginas borradas",
"undeletepagetitle": "'''Las siguientes son las revisiones borradas de [[:$1|$1]]'''.",
"viewdeletedpage": "Ver páginas borradas",
- "undeletepagetext": "{{PLURAL:$1|La siguiente página ha sido borrada pero aún está en el archivo y puede ser restaurada.|Las siguientes $1 páginas han sido borradas pero aún están en el archivo y pueden ser restauradas.}}\nPuede que el archivo se limpie periódicamente.",
+ "undeletepagetext": "{{PLURAL:$1|La siguiente página ha sido borrada, pero aún está en el archivo y puede ser restaurada.|Las siguientes $1 páginas han sido borradas, pero aún están en el archivo y pueden ser restauradas.}}\nPuede que el archivo se limpie periódicamente.",
"undelete-fieldset-title": "Restaurar revisiones",
- "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa '''''{{int:undeletebtn}}'''''. Para realizar una restauración selectiva, marca las revisiones a ser restauradas y pulsa '''''{{int:undeletebtn}}'''''.",
+ "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>. Para realizar una restauración selectiva, marca las revisiones que deban restaurarse y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>.",
"undeleterevisions": "$1 {{PLURAL:$1|revisión|revisiones}} archivadas",
- "undeletehistory": "Si restauras una página, todas sus revisiones serán restauradas al historial.\nSi una nueva página con el mismo nombre ha sido creada desde que se borró la original, las versiones restauradas aparecerán como historial anterior, y la revisión actual de la página actual no se reemplazará automáticamente.",
+ "undeletehistory": "Si restauras la página, todas sus revisiones se restaurarán en el historial.\nSi una nueva página con el mismo nombre se ha creado desde que se borró la original, las versiones restauradas aparecerán en el historial previo.",
"undeleterevdel": "No se deshará el borrado si éste resulta en el borrado parcial de la última revisión de la página. En tal caso, desmarque o muestre las revisiones borradas más recientes. Las revisiones de archivos que no tiene permitido ver no se restaurarán.",
"undeletehistorynoadmin": "El artículo ha sido borrado. La razón de su eliminación se indica abajo en el resumen, así como los detalles de las ediciones realizadas antes del borrado. El texto completo del artículo está disponible sólo para usuarios con permisos de administrador.",
"undelete-revision": "Edición borrada de $1 (fechada $4, a $5) por $3:",
@@ -1966,6 +1996,7 @@
"namespace": "Espacio de nombres:",
"invert": "Invertir selección",
"tooltip-invert": "Marca esta casilla para ocultar los cambios a las páginas dentro del espacio de nombres seleccionado (y el espacio de nombres asociado si está activada)",
+ "tooltip-whatlinkshere-invert": "Activa esta casilla para ocultar los enlaces dentro del espacio de nombres seleccionado.",
"namespace_association": "Espacio de nombres asociado",
"tooltip-namespace_association": "Marca esta casilla para incluir también el espacio de nombres de discusión asociado con el espacio de nombres seleccionado",
"blanknamespace": "(Principal)",
@@ -1982,7 +2013,7 @@
"sp-contributions-newbies-sub": "Para cuentas nuevas",
"sp-contributions-newbies-title": "Contribuciones de usuarios nuevos",
"sp-contributions-blocklog": "registro de bloqueos",
- "sp-contributions-suppresslog": "Contribuciones borradas de usuario",
+ "sp-contributions-suppresslog": "contribuciones de usuario suprimidas",
"sp-contributions-deleted": "contribuciones de usuario borradas",
"sp-contributions-uploads": "subidas",
"sp-contributions-logs": "registros",
@@ -1998,12 +2029,12 @@
"whatlinkshere": "Lo que enlaza aquí",
"whatlinkshere-title": "Páginas que enlazan con «$1»",
"whatlinkshere-page": "Página:",
- "linkshere": "Las siguientes páginas enlazan a '''[[:$1]]''':",
+ "linkshere": "Las siguientes páginas enlazan a <strong>[[:$1]]</strong>:",
"nolinkshere": "Ninguna página enlaza con '''[[:$1]]'''.",
"nolinkshere-ns": "Ninguna página enlaza con '''[[:$1]]''' en el espacio de nombres elegido.",
"isredirect": "página redirigida",
"istemplate": "inclusión",
- "isimage": "Enlace de imagen",
+ "isimage": "enlace de archivo",
"whatlinkshere-prev": "{{PLURAL:$1|previa|previas $1}}",
"whatlinkshere-next": "{{PLURAL:$1|siguiente|siguientes $1}}",
"whatlinkshere-links": "← enlaces",
@@ -2051,6 +2082,7 @@
"unblocked": "[[User:$1|$1]] ha sido {{GENDER:$1|desbloqueado|desbloqueada}}",
"unblocked-range": "$1 ha sido desbloqueado",
"unblocked-id": "Se ha eliminado el bloqueo $1",
+ "unblocked-ip": "Se ha desbloqueado a [[Special:Contributions/$1|$1]].",
"blocklist": "Usuarios bloqueados",
"ipblocklist": "Usuarios bloqueados",
"ipblocklist-legend": "Encontrar a un usuario bloqueado",
@@ -2070,7 +2102,7 @@
"infiniteblock": "infinito",
"expiringblock": "expira el $1 a las $2",
"anononlyblock": "sólo anón.",
- "noautoblockblock": "bloqueo automático deshabilitado",
+ "noautoblockblock": "bloqueo automático desactivado",
"createaccountblock": "creación de cuenta bloqueada",
"emailblock": "correo electrónico bloqueado",
"blocklist-nousertalk": "no puede editar su propia página de discusión",
@@ -2085,14 +2117,14 @@
"blocklogpage": "Registro de bloqueos",
"blocklog-showlog": "Este usuario ha sido bloqueado previamente. Debajo se provee el registro de bloqueos para mayor referencia:",
"blocklog-showsuppresslog": "Este usuario ha sido bloqueado y ocultado. Se provee el registro de supresiones para más detalle:",
- "blocklogentry": "bloqueó a [[$1]] $3 durante un plazo de $2",
+ "blocklogentry": "bloqueó a [[$1]] por un periodo de: $2 $3",
"reblock-logentry": "cambió el bloqueo para [[$1]] con una caducidad de $2 $3",
"blocklogtext": "Esto es un registro de acciones de bloqueo y desbloqueo de usuarios.\nLas direcciones IP bloqueadas automáticamente no aparecen aquí.\nConsulta la [[Special:BlockList|lista de bloqueos]] para ver la lista de bloqueos y prohibiciones de operar en vigor.",
"unblocklogentry": "desbloqueó a $1",
"block-log-flags-anononly": "sólo anónimos",
"block-log-flags-nocreate": "desactivada la creación de cuentas",
"block-log-flags-noautoblock": "bloqueo automático desactivado",
- "block-log-flags-noemail": "correo electrónico deshabilitado",
+ "block-log-flags-noemail": "correo electrónico desactivado",
"block-log-flags-nousertalk": "no puede editar su propia página de discusión",
"block-log-flags-angry-autoblock": "autobloqueo avanzado habilitado",
"block-log-flags-hiddenname": "nombre de usuario ocultado",
@@ -2100,7 +2132,7 @@
"ipb_expiry_invalid": "El tiempo de caducidad no es válido.",
"ipb_expiry_temp": "Los bloqueos a nombres de usuario ocultos deben ser permanentes.",
"ipb_hide_invalid": "No se puede suprimir esta cuenta; tiene más de {{PLURAL:$1|una edición|$1 ediciones}}.",
- "ipb_already_blocked": "\"$1\" ya se encuentra bloqueado.",
+ "ipb_already_blocked": "La cuenta «$1» ya está bloqueada.",
"ipb-needreblock": "$1 ya está bloqueado. ¿Quieres cambiar el bloqueo?",
"ipb-otherblocks-header": "{{PLURAL:$1|Otro bloqueo|Otros bloqueos}}",
"unblock-hideuser": "No se puede desbloquear a este usuario, porque su nombre de usuario está oculto.",
@@ -2179,7 +2211,7 @@
"immobile-target-namespace": "No se puede trasladar páginas al espacio de nombres «$1»",
"immobile-target-namespace-iw": "Un enlace interwiki no es un destino válido para trasladar una página.",
"immobile-source-page": "Esta página no se puede renombrar.",
- "immobile-target-page": "No se puede trasladar a tal título.",
+ "immobile-target-page": "No se puede trasladar a ese título.",
"bad-target-model": "El destino deseado utiliza un modelo diferente de contenido. No se puede realizar la conversión de $1 a $2.",
"imagenocrossnamespace": "No se puede trasladar el fichero a otro espacio de nombres",
"nonfile-cannot-move-to-file": "No es posible trasladar lo que no es un archivo al espacio de nombres de archivo",
@@ -2209,7 +2241,7 @@
"allmessagesname": "Nombre",
"allmessagesdefault": "Texto predeterminado",
"allmessagescurrent": "Texto actual",
- "allmessagestext": "Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki:\nPor favor visita [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir con la localización genérica MediaWiki.",
+ "allmessagestext": "Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki.\nPor favor, visita [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir a la localización genérica de MediaWiki.",
"allmessagesnotsupportedDB": "Esta página no está disponible porque '''$wgUseDatabaseMessages''' está deshabilitado.",
"allmessages-filter-legend": "Filtro",
"allmessages-filter": "Filtrar por estado de personalización:",
@@ -2229,14 +2261,15 @@
"thumbnail-temp-create": "No se ha podido crear el archivo temporal de la miniatura",
"thumbnail-dest-create": "No se ha podido guardar la miniatura",
"thumbnail_invalid_params": "Parámetros del thumbnail no válidos",
+ "thumbnail_toobigimagearea": "Archivo más grande que $1",
"thumbnail_dest_directory": "Incapaz de crear el directorio de destino",
"thumbnail_image-type": "Tipo de imagen no contemplado",
"thumbnail_gd-library": "Configuración de la librería GD incompleta: falta la función $1",
"thumbnail_image-missing": "El fichero parece no existir: $1",
"thumbnail_image-failure-limit": "Ha habido muchos intentos recientes ($1 o más) para representar esta miniatura. Inténtalo de nuevo más tarde.",
"import": "Importar páginas",
- "importinterwiki": "Importación transwiki",
- "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 transwiki se registran en el [[Special:Log/import|registro de importaciones]].",
+ "importinterwiki": "Importar desde otro wiki",
+ "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",
@@ -2256,7 +2289,7 @@
"importcantopen": "No se pudo importar el archivo",
"importbadinterwiki": "Enlace interwiki anómalo",
"importsuccess": "¡La importación se ha realizado con éxito!",
- "importnosources": "No hay fuentes de importación transwiki y no está permitido subir directamente el historial.",
+ "importnosources": "No se definieron wikis de los cuales importar y no está permitido subir directamente el historial.",
"importnofile": "No se subieron archivos de importación.",
"importuploaderrorsize": "Falló la carga del archivo de importaciones.\nSu tamaño es superior al máximo permitido.",
"importuploaderrorpartial": "Falló la subida del fichero de importación.\nSe subió sólo parcialmente.",
@@ -2280,18 +2313,15 @@
"import-rootpage-nosubpage": "El espacio de nombres \"$1\" de la página raíz no permite subpáginas.",
"importlogpage": "Registro de importaciones",
"importlogpagetext": "Importaciones administrativas de páginas con historial desde otros wikis.",
- "import-logentry-upload": "importó [[$1]] por subida de archivo",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importadas}}",
- "import-logentry-interwiki": "transwikificada $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisión importada|revisiones importadas}} desde $2",
"javascripttest": "Pruebas de JavaScript",
- "javascripttest-title": "Pruebas de $1 en ejecución",
"javascripttest-pagetext-noframework": "Esta página está reservada para ejecutar pruebas de JavaScript.",
"javascripttest-pagetext-unknownframework": "Marco de pruebas desconocido \"$1\".",
+ "javascripttest-pagetext-unknownaction": "La acción «$1» es desconocida.",
"javascripttest-pagetext-frameworks": "Por favor, seleccione uno de los marcos de pruebas siguientes: $1",
"javascripttest-pagetext-skins": "Elija un aspecto (skin) para ejecutar las pruebas:",
"javascripttest-qunit-intro": "Consulte la [$1 documentación sobre las pruebas] en mediawiki.org.",
- "javascripttest-qunit-heading": "Conjunto de pruebas MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "Tu página de {{gender:|usuario|usuaria}}",
"tooltip-pt-anonuserpage": "La página de usuario de la IP desde la que editas",
"tooltip-pt-mytalk": "Tu página de discusión",
@@ -2299,13 +2329,14 @@
"tooltip-pt-preferences": "Tus preferencias",
"tooltip-pt-watchlist": "Lista de páginas cuyos cambios vigilas",
"tooltip-pt-mycontris": "Lista de tus contribuciones",
- "tooltip-pt-login": "Te recomendamos iniciar sesión, sin embargo no es obligatorio",
+ "tooltip-pt-login": "Te recomendamos iniciar sesión, aunque no es obligatorio",
"tooltip-pt-logout": "Salir de la sesión",
- "tooltip-ca-talk": "Discusión acerca del artículo",
+ "tooltip-pt-createaccount": "Te recomendamos crear una cuenta e iniciar sesión; sin embargo, no es obligatorio",
+ "tooltip-ca-talk": "Discusión acerca de la página de contenido",
"tooltip-ca-edit": "Puedes editar esta página. Utiliza el botón de previsualización antes de guardar",
"tooltip-ca-addsection": "Iniciar una sección nueva",
"tooltip-ca-viewsource": "Esta página está protegida.\nPuedes ver su código fuente",
- "tooltip-ca-history": "Versiones anteriores de esta página y sus autores",
+ "tooltip-ca-history": "Versiones anteriores de esta página",
"tooltip-ca-protect": "Proteger esta página",
"tooltip-ca-unprotect": "Cambiar protección de esta página",
"tooltip-ca-delete": "Borrar esta página",
@@ -2314,13 +2345,13 @@
"tooltip-ca-watch": "Añadir esta página a tu lista de seguimiento",
"tooltip-ca-unwatch": "Borrar esta página de su lista de seguimiento",
"tooltip-search": "Buscar en {{SITENAME}}",
- "tooltip-search-go": "Ir al artículo con este nombre exacto si existe",
- "tooltip-search-fulltext": "Busca este texto en las páginas",
+ "tooltip-search-go": "Ir a la página con este nombre exacto si existe",
+ "tooltip-search-fulltext": "Buscar este texto en las páginas",
"tooltip-p-logo": "Visitar la página principal",
"tooltip-n-mainpage": "Visitar la página principal",
"tooltip-n-mainpage-description": "Visitar la página principal",
"tooltip-n-portal": "Acerca del proyecto, lo que puedes hacer, dónde encontrar información",
- "tooltip-n-currentevents": "Información de contexto sobre acontecimientos actuales",
+ "tooltip-n-currentevents": "Encuentra información de contexto sobre acontecimientos actuales",
"tooltip-n-recentchanges": "Lista de cambios recientes en el wiki",
"tooltip-n-randompage": "Cargar una página al azar",
"tooltip-n-help": "El lugar para aprender",
@@ -2330,34 +2361,35 @@
"tooltip-feed-atom": "Sindicación Atom de esta página",
"tooltip-t-contributions": "Lista de contribuciones de este usuario",
"tooltip-t-emailuser": "Enviar un mensaje de correo a este usuario",
- "tooltip-t-upload": "Subir imágenes o archivos multimedia",
+ "tooltip-t-info": "Más información sobre esta página",
+ "tooltip-t-upload": "Subir archivos",
"tooltip-t-specialpages": "Lista de todas las páginas especiales",
"tooltip-t-print": "Versión imprimible de esta página",
"tooltip-t-permalink": "Enlace permanente a esta versión de la página",
- "tooltip-ca-nstab-main": "Ver el artículo",
- "tooltip-ca-nstab-user": "Ver la página de usuario",
+ "tooltip-ca-nstab-main": "Ver la página de contenido",
+ "tooltip-ca-nstab-user": "Ver la página del usuario",
"tooltip-ca-nstab-media": "Ver la página de multimedia",
"tooltip-ca-nstab-special": "Esta es una página especial, no se puede editar la página en sí",
- "tooltip-ca-nstab-project": "Ver la página de proyecto",
- "tooltip-ca-nstab-image": "Ver la página de la imagen",
+ "tooltip-ca-nstab-project": "Ver la página del proyecto",
+ "tooltip-ca-nstab-image": "Ver la página del archivo",
"tooltip-ca-nstab-mediawiki": "Ver el mensaje de sistema",
"tooltip-ca-nstab-template": "Ver la plantilla",
"tooltip-ca-nstab-help": "Ver la página de ayuda",
"tooltip-ca-nstab-category": "Ver la página de categoría",
"tooltip-minoredit": "Marcar este cambio como menor",
"tooltip-save": "Guardar los cambios",
- "tooltip-preview": "Previsualiza los cambios realizados. ¡Por favor, hazlo antes de grabar!",
- "tooltip-diff": "Muestra los cambios que ha introducido en el texto.",
+ "tooltip-preview": "Previsualiza tus cambios. ¡Hazlo antes de grabar!",
+ "tooltip-diff": "Mostrar los cambios que has hecho en el texto.",
"tooltip-compareselectedversions": "Ver las diferencias entre las dos versiones seleccionadas de esta página.",
"tooltip-watch": "Añadir esta página a tu lista de seguimiento",
"tooltip-watchlistedit-normal-submit": "Borrar páginas",
"tooltip-watchlistedit-raw-submit": "Actualizar lista de seguimiento",
"tooltip-recreate": "Recupera una página que ha sido borrada",
"tooltip-upload": "Empieza la subida",
- "tooltip-rollback": "«Revertir» revierte todas las ediciones del último usuario con un solo clic.",
+ "tooltip-rollback": "«Revertir» revierte todas las ediciones del último usuario a esta página con un solo clic.",
"tooltip-undo": "«Deshacer» revierte la edición seleccionada y abre la página de edición en el modo de previsualización.\nPermite añadir una razón al resumen de edición.",
"tooltip-preferences-save": "Guardar las preferencias",
- "tooltip-summary": "Introduce un breve resumen",
+ "tooltip-summary": "Escribe un breve resumen",
"interlanguage-link-title": "$1 ($2)",
"common.css": "/* El CSS colocado en esta página será aplicado a todas las apariencias */",
"print.css": "/* Los estilos CSS colocados aquí afectarán la impresión */",
@@ -2388,7 +2420,7 @@
"spam_reverting": "Revirtiendo a la última versión que no contenga enlaces a $1",
"spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
"spam_deleting": "Todas las revisiones que contienen enlaces a $1, en proceso de eliminación",
- "simpleantispam-label": "Comprobación anti-spam\n¡NO rellenes esto!",
+ "simpleantispam-label": "Comprobación anti-spam.\n¡<strong>NO</strong> rellenes esto!",
"pageinfo-title": "Información de «$1»",
"pageinfo-not-current": "Lo sentimos, no es posible mostrar esta información para las revisiones antiguas.",
"pageinfo-header-basic": "Información básica",
@@ -2404,7 +2436,6 @@
"pageinfo-robot-policy": "Indización por robots",
"pageinfo-robot-index": "Permitido",
"pageinfo-robot-noindex": "No permitido",
- "pageinfo-views": "Número de vistas",
"pageinfo-watchers": "Número de usuarios que vigilan la página",
"pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vigilante|vigilantes}}",
"pageinfo-redirects-name": "Número de redirecciones a esta página",
@@ -2453,7 +2484,7 @@
"filedeleteerror-short": "Error al borrar el archivo: $1",
"filedeleteerror-long": "Se han producido errores mientras se borraba el archivo:\n\n$1",
"filedelete-missing": "No se pudo borrar el archivo \"$1\" porque no existe.",
- "filedelete-old-unregistered": "La revisión de archivo \"$1\" no está en la base de datos.",
+ "filedelete-old-unregistered": "La revisión de archivo «$1» no se encuentra en la base de datos.",
"filedelete-current-unregistered": "El archivo «$1» no existe en la base de datos.",
"filedelete-archive-read-only": "El servidor web no logra escribir en el directorio archivo \"$1\".",
"previousdiff": "← Edición anterior",
@@ -2466,7 +2497,7 @@
"file-info": "tamaño de archivo: $1; tipo MIME: $2",
"file-info-size": "$1 × $2 píxeles; tamaño de archivo: $3; tipo MIME: $4",
"file-info-size-pages": "$1 × $2 píxeles, tamaño de archivo: $3, tipo MIME: $4, $5 {{PLURAL:$5|página|páginas}}",
- "file-nohires": "No disponible a mayor resolución.",
+ "file-nohires": "No disponible en mayor resolución.",
"svg-long-desc": "archivo SVG, nominalmente $1 × $2 píxeles, tamaño de archivo: $3",
"svg-long-desc-animated": "Archivo SVG animado, nominalmente de $1 × $2 píxeles, tamaño del archivo: $3",
"svg-long-error": "Archivo SVG no válido: $1",
@@ -2517,10 +2548,10 @@
"yesterday-at": "Ayer a las $1",
"bad_image_list": "El formato es el siguiente:\n\nSolo se reconocen elementos de lista (líneas que comienzan con «*»).\nEl primer enlace de cada línea debe ser un enlace al archivo que se quiere bloquear.\nTodos los demás enlaces en la misma línea se tomarán como excepciones (es decir, páginas donde sí se puede usar el archivo).",
"metadata": "Metadatos",
- "metadata-help": "Este archivo contiene información adicional (metadatos), probablemente añadida por la cámara digital, el escáner o el programa usado para crearlo o digitalizarlo. Si el archivo ha sido modificado desde su estado original, pueden haberse perdido algunos detalles.",
+ "metadata-help": "Este archivo contiene información adicional, probablemente añadida por la cámara digital o el escáner usado para crearlo o digitalizarlo.\nSi el archivo ha sido modificado desde su estado original, pueden haberse perdido algunos detalles.",
"metadata-expand": "Mostrar datos detallados",
"metadata-collapse": "Ocultar datos detallados",
- "metadata-fields": "Los campos de metadatos que se listan en este mensaje se mostrarán en la página de descripción de la imagen aún cuando la tabla de metadatos esté plegada.\nExisten otros campos que se mantendrán ocultos por defecto.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-fields": "Los campos de metadatos listados en este mensaje se mostrarán en la página de descripción de la imagen cuando la tabla de metadatos esté plegada.\nOtros campos se mantendrán ocultos por defecto.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "Anchura",
"exif-imagelength": "Altura",
"exif-bitspersample": "Bits por componente",
@@ -2549,7 +2580,7 @@
"exif-software": "Software usado",
"exif-artist": "Autor",
"exif-copyright": "Titular de los derechos de autor",
- "exif-exifversion": "Versión Exif",
+ "exif-exifversion": "Versión de Exif",
"exif-flashpixversion": "Versión admitida de Flashpix",
"exif-colorspace": "Espacio de color",
"exif-componentsconfiguration": "Significado de cada componente",
@@ -2806,7 +2837,7 @@
"exif-gpslongitude-w": "Longitud oeste",
"exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metro|metros}} sobre el nivel del mar",
"exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metro|metros}} bajo el nivel del mar",
- "exif-gpsstatus-a": "Medida en progreso",
+ "exif-gpsstatus-a": "Medida en proceso",
"exif-gpsstatus-v": "Interoperabilidad de medida",
"exif-gpsmeasuremode-2": "Medición bidimensional",
"exif-gpsmeasuremode-3": "Medición tridimensional",
@@ -2859,7 +2890,6 @@
"exif-urgency-low": "Bajo ($1)",
"exif-urgency-high": "Alto ($1)",
"exif-urgency-other": "Prioridad definida por el usuario ($1)",
- "watchlistall2": "todos",
"namespacesall": "todos",
"monthsall": "todos",
"confirmemail": "Confirmar dirección de correo electrónico",
@@ -2947,9 +2977,9 @@
"watchlisttools-edit": "Ver y editar tu lista de seguimiento",
"watchlisttools-raw": "Editar lista de seguimiento en crudo",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discusión]])",
- "unknown_extension_tag": "Etiqueta desconocida «$1»",
"duplicate-defaultsort": "'''Atención:''' La clave de ordenamiento predeterminada «$2» anula la clave de ordenamiento anterior «$1».",
"duplicate-displaytitle": "<strong>Advertencia:</strong> El título visualizado \"$2\" sobreescribe al anterior \"$1\".",
+ "invalid-indicator-name": "<strong>Error:</strong> el atributo <code>name</code> de los indicadores de estado de página no debe estar vacío.",
"version": "Versión",
"version-extensions": "Extensiones instaladas",
"version-skins": "Temas instalados",
@@ -2991,6 +3021,9 @@
"version-entrypoints-header-url": "Dirección URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Ruta del artículo]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Ruta de la secuencia de comandos (script)]",
+ "version-libraries": "Bibliotecas instaladas",
+ "version-libraries-library": "Biblioteca",
+ "version-libraries-version": "Versión",
"redirect": "Redirigir por archivo, usuario, página o ID de revisión",
"redirect-legend": "Redirigir a un archivo o página",
"redirect-summary": "Esta página especial redirige a un fichero (dado un nombre de fichero), a una página (dado un identificador de revisión o de página) o a una página de usuario (dado un identificador numérico de usuario). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
@@ -2998,7 +3031,7 @@
"redirect-lookup": "Buscar:",
"redirect-value": "Valor:",
"redirect-user": "Id. del usuario",
- "redirect-page": "ID de la página",
+ "redirect-page": "Identificador de la página",
"redirect-revision": "Revisión de página",
"redirect-file": "Nombre de fichero",
"redirect-not-exists": "No se encontró el valor",
@@ -3014,7 +3047,7 @@
"specialpages": "Páginas especiales",
"specialpages-note-top": "Leyenda",
"specialpages-note": "* Páginas especiales normales\n* <span class=\"mw-specialpagerestricted\">Páginas especiales restringidas.</span>\n* <span class=\"mw-specialpagecached\">Páginas especiales en caché (podrían ser obsoletas).</span>",
- "specialpages-group-maintenance": "Reportes de mantenimiento",
+ "specialpages-group-maintenance": "Informes de mantenimiento",
"specialpages-group-other": "Otras páginas especiales",
"specialpages-group-login": "Acceder/crear cuenta",
"specialpages-group-changes": "Cambios recientes y registros",
@@ -3026,6 +3059,7 @@
"specialpages-group-wiki": "Herramientas y datos",
"specialpages-group-redirects": "Búsquedas y redirecciones",
"specialpages-group-spam": "Herramientas anti-SPAM",
+ "specialpages-group-developer": "Herramientas para desarrolladores",
"blankpage": "Página vacía",
"intentionallyblankpage": "Esta pagina está en blanco de manera intencionada.",
"external_image_whitelist": " #Deja esta línea exactamente como está<pre>\n#Colocar fragmentos de expresiones regulares (sólo la parte que va entre los //) debajo\n#Estos coincidirán con los URLs de las imágenes externas (hotlinked)\n#Aquellos que coincidan serán mostrados como imágenes, de lo contrario solamente un vínculo a la imagen será mostrada\n#Las líneas que empiezan por «#» se consideran comentarios\n#Esta es insensible a las mayúsculas\n\n#Colocar todos los fragmentos regex arriba de esta línea. Deja esta línea exactamente como está</pre>",
@@ -3038,12 +3072,54 @@
"tags-tag": "Nombre de etiqueta",
"tags-display-header": "Apariencia de la lista de cambios",
"tags-description-header": "Descripción completa de significado",
+ "tags-source-header": "Fuente",
"tags-active-header": "¿Activo?",
"tags-hitcount-header": "Cambios etiquetados",
+ "tags-actions-header": "Acciones",
"tags-active-yes": "Sí",
"tags-active-no": "No",
+ "tags-source-extension": "Definida por una extensión",
+ "tags-source-manual": "Aplicada manualmente por usuarios y bots",
+ "tags-source-none": "No se utiliza más",
"tags-edit": "editar",
+ "tags-delete": "eliminar",
+ "tags-activate": "activar",
+ "tags-deactivate": "desactivar",
"tags-hitcount": "$1 {{PLURAL:$1|cambio|cambios}}",
+ "tags-manage-no-permission": "No tienes permiso para gestionar las etiquetas de cambios.",
+ "tags-create-heading": "Crear una etiqueta",
+ "tags-create-explanation": "De manera predeterminada, las etiquetas nuevas estarán disponibles para su uso por usuarios y bots.",
+ "tags-create-tag-name": "Nombre de la etiqueta:",
+ "tags-create-reason": "Motivo:",
+ "tags-create-submit": "Crear",
+ "tags-create-no-name": "Es necesario especificar el nombre de la etiqueta.",
+ "tags-create-invalid-chars": "Los nombres de las etiquetas no deben contener comas (<code>,</code>) ni barras (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Los nombres de las etiquetas no deben contener caracteres que no puedan usarse en los títulos de las páginas.",
+ "tags-create-already-exists": "La etiqueta «$1» ya existe.",
+ "tags-create-warnings-above": "Se {{PLURAL:$2|produjo el aviso siguiente|produjeron los avisos siguientes}} al intentar crear la etiqueta «$1»:",
+ "tags-create-warnings-below": "¿Continuar con la creación de la etiqueta?",
+ "tags-delete-title": "Eliminar etiqueta",
+ "tags-delete-explanation-initial": "Estás a punto de eliminar la etiqueta «$1» de la base de datos.",
+ "tags-delete-explanation-in-use": "Se removerá de {{PLURAL:$2|$2 revisión o entrada ingresada|todas las $2 revisiones y/o entradas ingresadas}} a la que actualmente es aplicada.",
+ "tags-delete-explanation-warning": "Esta acción es <strong>irreversible</strong> y ni siquiera los administradores de la base de datos podrán deshacerla. Confirma que esta es la etiqueta que se eliminará.",
+ "tags-delete-explanation-active": "<strong>La etiqueta \"$1\" aún está activa y se seguirá utilizándo en el futuro.</strong> Para que esto no ocurra, deshabilítala desde el lugar donde se configuró para ser utilizada.",
+ "tags-delete-reason": "Motivo:",
+ "tags-delete-submit": "Eliminar esta etiqueta irreversiblemente",
+ "tags-delete-not-allowed": "No se pueden eliminar las etiquetas definidas por una extensión, a menos que esta lo permita expresamente.",
+ "tags-delete-not-found": "La etiqueta «$1» no existe.",
+ "tags-delete-too-many-uses": "No se puede borrar la etiqueta \"$1\" porque se ha aplicado a más de {{PLURAL:$2|una revisión|$2 revisiones}}.",
+ "tags-delete-warnings-after-delete": "La etiqueta \"$1\" se borró exitosamente, pero con {{PLURAL:$2|la siguiente advertencia|las siguientes advertencias}}:",
+ "tags-activate-title": "Activar etiqueta",
+ "tags-activate-question": "Estás a punto de activar la etiqueta «$1».",
+ "tags-activate-reason": "Motivo:",
+ "tags-activate-not-allowed": "No es posible activar la etiqueta «$1».",
+ "tags-activate-not-found": "La etiqueta «$1» no existe.",
+ "tags-activate-submit": "Activar",
+ "tags-deactivate-title": "Desactivar etiqueta",
+ "tags-deactivate-question": "Estás a punto de desactivar la etiqueta «$1».",
+ "tags-deactivate-reason": "Motivo:",
+ "tags-deactivate-not-allowed": "No es posible desactivar la etiqueta «$1».",
+ "tags-deactivate-submit": "Desactivar",
"comparepages": "Comparar páginas",
"compare-page1": "Página 1",
"compare-page2": "Página 2",
@@ -3055,8 +3131,8 @@
"compare-revision-not-exists": "La revisión especificada no existe.",
"dberr-problems": "Lo sentimos. Este sitio está experimentando dificultades técnicas.",
"dberr-again": "Prueba a recargar dentro de unos minutos.",
- "dberr-info": "(No se puede contactar con la base de datos del servidor: $1)",
- "dberr-info-hidden": "(No se puede contactar con la base de datos del servidor)",
+ "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.",
@@ -3097,37 +3173,61 @@
"revdelete-uname-unhid": "nombre de usuario mostrado",
"revdelete-restricted": "restricciones para administradores aplicadas",
"revdelete-unrestricted": "restricciones para administradores eliminadas",
- "logentry-move-move": "$1 movió la página $3 a $4",
+ "logentry-block-block": "$1 {{GENDER:$2|bloqueó}} a {{GENDER:$4|$3}} durante un plazo de $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueó}} {{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-suppress-block": "$1 {{GENDER:$2|bloqueó}} {{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",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|importó}} $3 desde otro wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|combinó}} $3 en $4 (revisiones hasta el $5)",
+ "logentry-move-move": "$1 {{GENDER:$2|trasladó}} la página $3 a $4",
"logentry-move-move-noredirect": "$1 movió la página $3 a $4 sin dejar una redirección",
"logentry-move-move_redir": "$1 {{GENDER:$2|trasladó}} la página $3 a $4 sobre una redirección",
"logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|trasladó}} la página $3 a $4 sobre una redirección y sin dejar una redirección",
"logentry-patrol-patrol": "$1 {{GENDER:$2|marcó}} como patrullada la edición $4 de la página $3",
"logentry-patrol-patrol-auto": "$1 {{GENDER:$2|marcó}} automáticamente la edición $4 de la página $3 como patrullada",
"logentry-newusers-newusers": "La cuenta de usuario $1 ha sido {{GENDER:$2|creada}}",
- "logentry-newusers-create": "La cuenta de usuario $1 ha sido creada",
+ "logentry-newusers-create": "Se ha {{GENDER:$2|creado}} la cuenta de usuario $1",
"logentry-newusers-create2": "La cuenta de usuario $3 ha sido creada por $1",
"logentry-newusers-byemail": "la cuenta de usuario $3 ha sido creada por $1 y la contraseña ha sido enviada por correo",
- "logentry-newusers-autocreate": "La cuenta $1 fue creada automáticamente",
+ "logentry-newusers-autocreate": "La cuenta $1 se {{GENDER:$2|creó}} automáticamente",
"logentry-rights-rights": "$1 modificó los grupos a los que pertenece $3: de $4 a $5",
"logentry-rights-rights-legacy": "$1 modificó los grupos a los que pertenece $3",
"logentry-rights-autopromote": "$1 ha sido {{GENDER:$2|promocionado|promocionada}} automáticamente de $4 a $5",
"logentry-upload-upload": "$1 {{GENDER:$2|subió}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|subió}} una nueva versión de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|subió}} $3",
+ "log-name-managetags": "Registro de gestión de etiquetas",
+ "log-description-managetags": "Esta página muestra las acciones realizadas sobre las [[Special:Tags|etiquetas]]. El registro solo contiene acciones llevadas a cabo por un administrador de forma manual; el software del wiki podría crear o eliminar etiquetas sin que se registre aquí.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|creó}} la etiqueta «$4»",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|eliminó}} la etiqueta «$4» (quitada de $5 {{PLURAL:$5|revisión o entrada de registro|revisiones o entradas de registro}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|activó}} la etiqueta «$4» para su uso por usuarios y bots",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|desactivó}} la etiqueta «$4» para evitar su uso por usuarios y bots",
"rightsnone": "(ninguno)",
+ "revdelete-summary": "resumen de edición",
+ "feedback-adding": "Añadiendo comentarios a la página...",
+ "feedback-back": "Volver",
+ "feedback-bugcheck": "¡Perfecto! Únicamente comprueba que no sea un [$1 fallo conocido].",
+ "feedback-bugnew": "Lo he comprobado. Informar de un nuevo fallo.",
"feedback-bugornote": "Si estás preparado para describir en detalle un problema técnico, [$1 informa de un bug] por favor.\n\nEn otro caso, puedes usar el siguiente formulario. Tu comentario será añadido a la página [$3 $2], junto con tu nombre de usuario y el navegador que usas.",
- "feedback-subject": "Asunto:",
- "feedback-message": "Mensaje:",
"feedback-cancel": "Cancelar",
- "feedback-submit": "Enviar comentarios",
- "feedback-adding": "Añadiendo comentarios a la página...",
+ "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-error-title": "Error",
"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",
+ "feedback-message": "Mensaje:",
+ "feedback-subject": "Asunto:",
+ "feedback-submit": "Enviar",
+ "feedback-terms": "Entiendo que la información de mi agente de usuario incluye información sobre la versión exacta de mi navegador y mi sistema operativo y serán compartidos públicamente junto a mis comentarios.",
+ "feedback-termsofuse": "Acepto proporcionar comentarios de acuerdo con los Términos de uso.",
"feedback-thanks": "¡Gracias! Su comentario ha sido anotado en la página [$2 $1].",
- "feedback-close": "Hecho",
- "feedback-bugcheck": "¡Perfecto! Únicamente comprueba que no sea un [$1 fallo conocido].",
- "feedback-bugnew": "Lo he comprobado. Informar de un nuevo fallo.",
+ "feedback-thanks-title": "¡Muchas gracias!",
+ "feedback-useragent": "Agente de usuario:",
"searchsuggest-search": "Buscar",
"searchsuggest-containing": "que contiene...",
"api-error-badaccess-groups": "No puedes cargar archivos en este wiki.",
@@ -3163,6 +3263,13 @@
"api-error-stashfailed": "Error interno: El servidor no pudo almacenar el archivo temporal.",
"api-error-publishfailed": "Error interno: el servidor no pudo publicar el archivo temporal.",
"api-error-stasherror": "Ha ocurrido un error al subir el archivo al depósito.",
+ "api-error-stashedfilenotfound": "No se encontró el archivo del espacio temporal al intentar cargarlo.",
+ "api-error-stashpathinvalid": "La ruta donde debería encontrarse el archivo del espacio temporal no es válida.",
+ "api-error-stashfilestorage": "Ocurrió un error al almacenar el archivo en el espacio temporal.",
+ "api-error-stashzerolength": "El servidor no pudo almacenar el archivo en el espacio temporal porque este no contiene datos.",
+ "api-error-stashnotloggedin": "Debes acceder para guardar archivos en el espacio temporal de carga.",
+ "api-error-stashwrongowner": "El archivo del espacio temporal al que quieres acceder no te pertenece.",
+ "api-error-stashnosuchfilekey": "La clave de archivo del espacio temporal al que quieres acceder no existe.",
"api-error-timeout": "El servidor no respondió en el plazo previsto.",
"api-error-unclassified": "Ocurrió un error desconocido.",
"api-error-unknown-code": "Error desconocido: «$1»",
@@ -3196,9 +3303,9 @@
"limitreport-expensivefunctioncount": "Cuenta de la funcion expansiva del analizador",
"expandtemplates": "Expandir plantillas",
"expand_templates_intro": "Esta página especial toma un texto wiki y expande todas sus plantillas recursivamente.\nTambién expande las funciones sintácticas como <code><nowiki>{{</nowiki>#language:…}}</code>, y variables como\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. De hecho, expande casi cualquier cosa que esté entre llaves dobles.",
- "expand_templates_title": "Título de la página, útil para expandir {{PAGENAME}} o similares",
+ "expand_templates_title": "Título de la página, útil para expandir {{FULLPAGENAME}} o similares:",
"expand_templates_input": "Texto a expandir:",
- "expand_templates_output": "Resultado:",
+ "expand_templates_output": "Resultado",
"expand_templates_xml_output": "Salida XML",
"expand_templates_html_output": "Salida HTML en crudo",
"expand_templates_ok": "Aceptar",
@@ -3207,6 +3314,8 @@
"expand_templates_generate_xml": "Mostrar el árbol XML.",
"expand_templates_generate_rawhtml": "Mostrar HTML en crudo",
"expand_templates_preview": "Previsualización",
+ "expand_templates_preview_fail_html": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y se perdieron los datos de la sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, por favor inténtelo de nuevo.</strong>\nSi aun así no funciona, pruebe a [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
+ "expand_templates_preview_fail_html_anon": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y usted no ha iniciado sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, por favor [[Special:UserLogin|inicie sesión]] e inténtelo de nuevo.</strong>",
"pagelanguage": "Selector de idioma de página",
"pagelang-name": "Página",
"pagelang-language": "Idioma",
@@ -3217,8 +3326,58 @@
"log-name-pagelang": "Registro de cambios en idiomas",
"log-description-pagelang": "Este es un registro de los cambios en los idiomas de las páginas.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} el idioma de la página «$3» del $4 al $5.",
- "default-skin-not-found": "¡Oops! La apariencia por defecto de la wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, no está disponible.\n\nLa instalación parece poseer las siguientes opciones de apariencia. Por favor revise [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] para mayor información sobre cómo configurarla y seleccionar la apariencia por defecto.\n\n$2\n\n; Si acaba de instalar MediaWiki:\n: Probablemente la haya instalado desde git, o directamente desde el código fuente usando algún otro método. Esto es lo esperado. Intente instalar algunos sets de apariencia desde [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory]:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varios sets de apariencia y extensiones. Puede copiar y pegar el directorio <code>skins/</code> desde ahi.\n:* Clonando uno de los repositorios en <code>mediawiki/skins/*</code> via git dentro del directorio <code>skins/</code> de su instaación de MediaWiki.\n: Haciendo esto no debería interferir con su repositorio git si usted es un desarrollador de MediaWiki.\n\n; Si acaba de actualizar MediaWiki:\n: MediaWiki 1.24 y versiones posteriores ya no tiene habilitada la actualización de apariencia (revise [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puede pegar las siguientes lineas <code>LocalSettings.php</code> para habilitar todos los sets de apariencia que haya configurado:\n\n<pre>$3</pre>\n\n; Si acaba de modificar <code>LocalSettings.php</code>:\n: Compruebe detenidamente posibles errores tipográficos en los nombres de los sets de apariencias.",
- "default-skin-not-found-no-skins": "¡Vaya! La apariencia predeterminada de tu wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, no está disponible.\n\nNo tienes apariencias instaladas.\n\n; Si has instalado o actualizado MediaWiki recientemente:\n: Probablemente has instalado desde git, o directamente desde el código fuente usando algún otro método. Esto es lo esperado. MediaWiki 1.24 y versiones posteriores no incluyen ninguna apariencia en el repositorio principal. Trata de instalar algunas apariencias desde el [https://www.mediawiki.org/wiki/Category:All_skins directorio de apariencias de mediawiki.org], siguiendo el siguiente procedimiento:\n:* Descarga el [https://www.mediawiki.org/wiki/Download instalador tarball], que viene con varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> desde ahí.\n:* Clonando alguno de los repositorios en <code>mediawiki/skins/*</code> usando git en el directorio <code>skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio de MediaWiki si eres un desarrollador de MediaWiki. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] para información sobre cómo habilitar las apariencias y seleccionar la apariencia predeterminada.",
+ "default-skin-not-found": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nLa instalación parece contener las siguientes apariencias. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para más información sobre cómo configurar y seleccionar la apariencia predeterminada.\n\n$2\n\n; Si acabas de instalar MediaWiki:\n: Probablemente la hayas instalado desde git, o directamente desde el código fuente usando algún otro método. Es normal que ocurra esto. Intenta instalar algunas apariencias desde [https://www.mediawiki.org/wiki/Category:All_skins el directorio de apariencias de mediawiki.org] ya sea:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> desde ahí.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno de los repositorios en <code>mediawiki/skins/*</code> via git dentro del directorio <code dir=\"ltr\">skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio git si eres un desarrollador de MediaWiki.\n\n; Si acabas de actualizar MediaWiki:\n: A partir de MediaWiki 1.24 ya no se habilitan automáticamente las apariencias instaladas (revisa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puedes pegar las siguientes líneas en <code>LocalSettings.php</code> para habilitar todas las apariencias instaladas:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabas de modificar <code>LocalSettings.php</code>:\n: Comprueba detenidamente posibles errores tipográficos en los nombres de las apariencias.",
+ "default-skin-not-found-no-skins": "¡Vaya! La apariencia predeterminada de tu wiki, definida en <code>$wgDefaultSkin</code> como <code>$1</code>, no está disponible.\n\nNo tienes apariencias instaladas.\n\n; Si has instalado o actualizado MediaWiki recientemente:\n: Probablemente has instalado desde git, o directamente desde el código fuente usando algún otro método. Esto puede ocurrir en este caso. A partir de MediaWiki 1.24 ya no se incluye ninguna apariencia en el repositorio principal. Trata de instalar algunas apariencias desde el [https://www.mediawiki.org/wiki/Category:All_skins directorio de apariencias de mediawiki.org], ya sea:\n:* Descargando el [https://www.mediawiki.org/wiki/Download instalador tarball], que viene con varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> desde ahí.\n:* Descargando tarballs individuales de cada apariencia de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando alguno de los repositorios en <code>mediawiki/skins/*</code> usando git en el directorio <code dir=\"ltr\">skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio de MediaWiki si eres un desarrollador de MediaWiki. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configuración de apariencias] para información sobre cómo habilitar las apariencias y seleccionar la predeterminada.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activado)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivado''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivado''')",
+ "mediastatistics": "Estadísticas de multimedia",
+ "mediastatistics-summary": "Estadísticas sobre los tipos de archivos cargados. Sólo se incluyen las versiones más recientes. Los archivos antiguos o eliminados están excluidos.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 ''byte''|$1 ''bytes''}} ($2; $3 %)",
+ "mediastatistics-table-mimetype": "Tipo MIME",
+ "mediastatistics-table-extensions": "Extensiones posibles",
+ "mediastatistics-table-count": "Número de archivos",
+ "mediastatistics-table-totalbytes": "Tamaño combinado",
+ "mediastatistics-header-unknown": "Desconocido",
+ "mediastatistics-header-bitmap": "Imágenes de mapa de bits",
+ "mediastatistics-header-drawing": "Dibujos (imágenes vectoriales)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Vídeos",
+ "mediastatistics-header-multimedia": "Multimedia enriquecida",
+ "mediastatistics-header-office": "Oficina",
+ "mediastatistics-header-text": "Textual",
+ "mediastatistics-header-executable": "Ejecutables",
+ "mediastatistics-header-archive": "Formatos comprimidos",
+ "json-warn-trailing-comma": "Se {{PLURAL:$1|eliminó una coma|eliminaron $1 comas}} al final en el archivo JSON",
+ "json-error-unknown": "Ocurrió un problema con el código JSON. Error: $1",
+ "json-error-depth": "Se ha superado la profundidad máxima de la pila",
+ "json-error-state-mismatch": "JSON no válido o con formato incorrecto",
+ "json-error-ctrl-char": "Error de carácter de control, posiblemente codificada incorrectamente",
+ "json-error-syntax": "Error de sintaxis",
+ "json-error-utf8": "Los caracteres UTF-8 tienen errores de formato; probablemente la codificación es incorrecta.",
+ "json-error-recursion": "Una o más referencias recursivas en el valor por codificar",
+ "json-error-inf-or-nan": "Hay uno o más valores «NAN» o «INF» en el valor que se codificará",
+ "json-error-unsupported-type": "Se proporcionó un valor en un tipo que no se puede codificar",
+ "headline-anchor-title": "Enlace a esta sección",
+ "special-characters-group-latin": "Latín",
+ "special-characters-group-latinextended": "Latín extendido",
+ "special-characters-group-ipa": "AFI",
+ "special-characters-group-symbols": "Símbolos",
+ "special-characters-group-greek": "Griego",
+ "special-characters-group-cyrillic": "Cirílico",
+ "special-characters-group-arabic": "Árabe",
+ "special-characters-group-arabicextended": "Arábico extendido",
+ "special-characters-group-persian": "Persa",
+ "special-characters-group-hebrew": "Hebreo",
+ "special-characters-group-bangla": "Bengalí",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugú",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Guyaratí",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Tailandés",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Jemer",
+ "special-characters-title-endash": "semirraya",
+ "special-characters-title-emdash": "raya",
+ "special-characters-title-minus": "signo menos"
}
diff --git a/languages/i18n/et.json b/languages/i18n/et.json
index 5989440d..b0afd78c 100644
--- a/languages/i18n/et.json
+++ b/languages/i18n/et.json
@@ -22,7 +22,8 @@
"Võrok",
"WikedKentaur",
"לערי ריינהארט",
- "Boxmein"
+ "Boxmein",
+ "Roland"
]
},
"tog-underline": "Linkide allakriipsutus:",
@@ -50,7 +51,7 @@
"tog-shownumberswatching": "Näita jälgivate kasutajate hulka",
"tog-oldsig": "Praegune allkiri:",
"tog-fancysig": "Kasuta vikiteksti vormingus allkirja (ilma automaatse lingita kasutajalehele)",
- "tog-uselivepreview": "Kasuta elavat eelvaadet (katseline)",
+ "tog-uselivepreview": "Kasuta elavat eelvaadet",
"tog-forceeditsummary": "Nõua redigeerimisel resümee välja täitmist",
"tog-watchlisthideown": "Peida minu redaktsioonid jälgimisloendist",
"tog-watchlisthidebots": "Peida robotid jälgimisloendist",
@@ -66,7 +67,7 @@
"tog-prefershttps": "Kasuta sisselogimisel alati turvalist ühendust",
"underline-always": "Alati",
"underline-never": "Mitte kunagi",
- "underline-default": "Kujunduse või võrgulehitseja vaikeväärtus",
+ "underline-default": "Kujunduse või brauseri vaikeväärtus",
"editfont-style": "Redigeerimisala kirjatüüp:",
"editfont-default": "Veebilehitseja vaikesäte",
"editfont-monospace": "Püsisammuga font",
@@ -199,14 +200,14 @@
"deletethispage": "Kustuta see lehekülg",
"undeletethispage": "Taasta see lehekülg",
"undelete_short": "Taasta {{PLURAL:$1|üks muudatus|$1 muudatust}}",
- "viewdeleted_short": "Vaata {{PLURAL:$1|üht|$1}} kustutatud redaktsiooni",
+ "viewdeleted_short": "Vaata {{PLURAL:$1|üht|$1}} kustutatud muudatust",
"protect": "Kaitse",
"protect_change": "muuda",
"protectthispage": "Kaitse seda lehekülge",
"unprotect": "Muuda kaitset",
"unprotectthispage": "Muuda selle lehekülje kaitset",
"newpage": "Uus lehekülg",
- "talkpage": "Selle artikli arutelu",
+ "talkpage": "Selle lehekülje arutelu",
"talkpagelinktext": "arutelu",
"specialpage": "Erilehekülg",
"personaltools": "Personaalsed tööriistad",
@@ -238,22 +239,24 @@
"pool-queuefull": "Protsessikogumi järjekord on täis.",
"pool-errorunknown": "Teadmata tõrge",
"pool-servererror": "Protsessikogumi loendurteenus pole saadaval ($1).",
+ "poolcounter-usage-error": "Kasutustõrge: $1",
"aboutsite": "{{GRAMMAR:genitive|{{SITENAME}}}} tiitelandmed",
"aboutpage": "Project:Tiitelandmed",
"copyright": "Sisu on kasutatav litsentsi $1 tingimustel, kui pole öeldud teisiti.",
"copyrightpage": "{{ns:project}}:Autoriõigus",
"currentevents": "Sündmused",
"currentevents-url": "Project:Sündmused",
- "disclaimers": "Hoiatused",
- "disclaimerpage": "Project:Hoiatused",
+ "disclaimers": "Lahtiütlused",
+ "disclaimerpage": "Project:Üldine lahtiütlus",
"edithelp": "Redigeerimisjuhend",
+ "helppage-top-gethelp": "Abi",
"mainpage": "Esileht",
"mainpage-description": "Esileht",
"policy-url": "Project:Reeglid",
"portal": "Kogukonnavärav",
"portal-url": "Project:Kogukonnavärav",
"privacy": "Privaatsus",
- "privacypage": "Project:Privaatsus",
+ "privacypage": "Project:Privaatsuseeskiri",
"badaccess": "Õigus puudub",
"badaccess-group0": "Sul pole õigust sooritada toimingut, mida üritasid.",
"badaccess-groups": "Tegevus, mida üritasid, on piiratud kasutajatele {{PLURAL:$2|rühmas|ühes neist rühmadest}}: $1.",
@@ -284,7 +287,7 @@
"confirmable-no": "Ei",
"thisisdeleted": "Vaata $1 või taasta?",
"viewdeleted": "Vaata $1?",
- "restorelink": "{{PLURAL:$1|üht|$1}} kustutatud versiooni",
+ "restorelink": "{{PLURAL:$1|üht|$1}} kustutatud muudatust",
"feedlinks": "Voog:",
"feed-invalid": "Vigane vootüüp.",
"feed-unavailable": "Uudisvood ei ole saadaval.",
@@ -323,13 +326,16 @@
"missing-article": "Andmebaas ei leidnud küsitud lehekülje \"$1\" $2 teksti.\n\nPõhjuseks võib olla võrdlus- või ajaloolink kustutatud leheküljele.\n\nKui tegemist ei ole nimetatud olukorraga, võib tegu olla ka süsteemi veaga.\nSellisel juhul tuleks teavitada [[Special:ListUsers/sysop|administraatorit]], edastades talle ka käesoleva lehe internetiaadressi.",
"missingarticle-rev": "(redaktsioon: $1)",
"missingarticle-diff": "(redaktsioonid: $1, $2)",
- "readonly_lag": "Andmebaas on automaatselt lukustatud, seniks kuni ''slave''-andmebaasid on uuendatud.",
+ "readonly_lag": "Andmebaas on automaatselt lukustatud, seniks kuni sekundaarsed andmebaasiserverid on primaarserveriga samal järjel.",
"internalerror": "Sisemine viga",
"internalerror_info": "Sisemine viga: $1",
+ "internalerror-fatal-exception": "Saatuslik erandtöötluse tõrge: $1",
"filecopyerror": "Ei saanud faili \"$1\" kopeerida nimega \"$2\".",
"filerenameerror": "Ei saanud faili \"$1\" failiks \"$2\" ümber nimetada.",
"filedeleteerror": "Faili nimega \"$1\" ei ole võimalik kustutada.",
"directorycreateerror": "Kataloogi \"$1\" ei saanud luua.",
+ "directoryreadonlyerror": "Kataloog \"$1\" on kirjutuskaitstud.",
+ "directorynotreadableerror": "Kataloog \"$1\" pole loetav.",
"filenotfound": "Faili nimega \"$1\" ei leitud.",
"unexpected": "Ootamatu väärtus: \"$1\"=\"$2\".",
"formerror": "Viga: vormi ei saanud salvestada",
@@ -351,7 +357,8 @@
"viewsourcetext": "Saad vaadata ja kopeerida lehekülje lähteteksti:",
"viewyourtext": "Saad vaadata ja kopeerida sellel leheküljel tehtud '''enda muudatuste '''lähteteksti:",
"protectedinterface": "Sellel leheküljel on selle viki tarkvara kasutajaliidese tekst. Väärtarvituse vältimiseks on lehekülg kaitstud.\nEt lisada ja muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
- "editinginterface": "'''Hoiatus:''' Redigeerid tarkvara kasutajaliidese tekstiga lehekülge.\nMuudatused siin mõjutavad kõikide selle viki kasutajate kasutajaliidest.\nEt lisada ja muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
+ "editinginterface": "<strong>Hoiatus:</strong> Redigeerid lehekülge, mille teksti kasutatakse tarkvaraliideses.\nMuudatused siin mõjutavad kõikide selle viki kasutajate kasutajaliidest.",
+ "translateinterface": "Et lisada või muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
"cascadeprotected": "See lehekülg on muutmise eest kaitstud, sest see on osa {{PLURAL:$1|järgmisest leheküljest|järgmistest lehekülgedest}}, mis on kaskaadkaitse all:\n$2",
"namespaceprotected": "Sul pole õigust redigeerida lehekülgi nimeruumis '''$1'''.",
"customcssprotected": "Sul pole õigust seda CSS-lehekülge redigeerida, sest see sisaldab teise kasutaja isiklikke sätteid.",
@@ -371,7 +378,7 @@
"virus-badscanner": "Viga konfiguratsioonis: tundmatu viirusetõrje: ''$1''",
"virus-scanfailed": "skaneerimine ebaõnnestus (veakood $1)",
"virus-unknownscanner": "tundmatu viirusetõrje:",
- "logouttext": "'''Oled nüüd välja loginud.'''\n\nPane tähele, et seni kuni sa pole oma võrgulehitseja puhvrit tühjendanud, võidakse mõni lehekülg endiselt kuvada nii nagu oleksid ikka sisse logitud.",
+ "logouttext": "<strong>Oled nüüd välja loginud.</strong>\n\nPane tähele, et seni, kuni sa pole veebilehitseja puhvrit tühjendanud, võidakse mõni lehekülg endiselt kuvada nii nagu oleksid ikka sisse logitud.",
"welcomeuser": "Tere tulemast, $1!",
"welcomecreation-msg": "Sinu konto on loodud.\nÄra unusta seada oma {{GRAMMAR:genitive|{{SITENAME}}}} [[Special:Preferences|eelistusi]].",
"yourname": "Kasutajanimi:",
@@ -396,7 +403,7 @@
"userlogin": "Sisselogimine või kasutajakonto loomine",
"userloginnocreate": "Sisselogimine",
"logout": "Logi välja",
- "userlogout": "Logi välja",
+ "userlogout": "Väljalogimine",
"notloggedin": "Sisse logimata",
"userlogin-noaccount": "Kas sul pole kontot?",
"userlogin-joinproject": "Ühine projektiga {{SITENAME}}",
@@ -408,6 +415,8 @@
"userlogin-resetlink": "Kas oled unustanud oma sisselogimisandmed?",
"userlogin-resetpassword-link": "Kas unustasid parooli?",
"userlogin-helplink2": "Sisselogimisabi",
+ "userlogin-loggedin": "Oled juba sisse logitud nimega {{GENDER:$1|$1}}.\nKasuta allolevat vormi, et logida sisse teise kasutajaga.",
+ "userlogin-createanother": "Loo teine konto",
"createacct-emailrequired": "E-posti aadress",
"createacct-emailoptional": "E-posti aadress (valikuline)",
"createacct-email-ph": "Sisesta e-posti aadress",
@@ -443,6 +452,7 @@
"wrongpassword": "Vale parool. Proovi uuesti.",
"wrongpasswordempty": "Parool jäi sisestamata. Palun proovi uuesti.",
"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}}.",
"password-name-match": "Parool peab kasutajanimest erinema.",
"password-login-forbidden": "Selle kasutajanime ja parooli kasutamine on keelatud.",
"mailmypassword": "Lähtesta parool",
@@ -568,10 +578,12 @@
"anoneditwarning": "<strong>Hoiatus:</strong> Sa pole sisse logitud. Sinu IP-aadress on kõigile nähtav, kui muudatusi teed. Kui <strong>[$1 logid sisse]</strong> või <strong>[$2 lood konto]</strong>, siis teiste eeliste seas omistatakse sinu muudatused sulle kasutajanime järgi.",
"anonpreviewwarning": "''Sa pole sisse logitud. Selle lehe redigeerimislogisse salvestatakse su IP-aadress.''",
"missingsummary": "'''Meeldetuletus:''' Sa ei ole lisanud muudatuse resümeed.\nKui vajutad uuesti salvestamise nupule, salvestatakse muudatus ilma resümeeta.",
+ "selfredirect": "<strong>Hoiatus:</strong> Suunad selle lehekülje iseeneda juurde.\nVõimalik, et oled määranud ümbersuunamise jaoks vale sihtleheküljeks või redigeerid vale lehekülge.\nÜmbersuunamine luuakse sellest hoolimata, kui klõpsad uuesti \"{{int:savearticle}}\".",
"missingcommenttext": "Palun sisesta siit allapoole kommentaar.",
"missingcommentheader": "'''Meeldetuletus:''' Sa pole kirjutanud kommentaarile teemat ega pealkirja.\nKui klõpsad uuesti \"{{int:savearticle}}\", salvestatakse su kommentaar kummatagi.",
"summary-preview": "Resümee eelvaade:",
"subject-preview": "Alaosa pealkirja eelvaade:",
+ "previewerrortext": "Sinu muudatuste eelvaatluse juures esines tõrge.",
"blockedtitle": "Kasutaja on blokeeritud",
"blockedtext": "'''Sinu kasutajanimi või IP-aadress on blokeeritud.'''\n\nBlokeeris $1.\nTema põhjendus on järgmine: ''$2''.\n\n* Blokeeringu algus: $8\n* Blokeeringu lõpp: $6\n* Sooviti blokeerida: $7\n\nKüsimuse arutamiseks võid pöörduda kasutaja $1 või mõne teise [[{{MediaWiki:Grouppage-sysop}}|administraatori]] poole.\n\nPane tähele, et sa ei saa kasutajale teadet saata, kui sa pole kinnitanud oma [[Special:Preferences|eelistuste lehel]] kehtivat e-posti aadressi.\n\nSinu praegune IP-aadress on $3 ning blokeeringu number on #$5. Lisa need andmed kõigile järelepärimistele, mida kavatsed teha.",
"autoblockedtext": "Sinu IP-aadress blokeeriti automaatselt, sest seda kasutas teine kasutaja, kelle $1 blokeeris.\nPõhjendus on järgmine:\n\n:''$2''\n\n* Blokeeringu algus: $8\n* Blokeeringu lõpp: $6\n* Sooviti blokeerida: $7\n\nKüsimuse arutamiseks võid pöörduda kasutaja $1 või mõne teise [[{{MediaWiki:Grouppage-sysop}}|administraatori]] poole.\n\nPane tähele, et sa ei saa teisele kasutajale teadet saata, kui sa pole kinnitanud oma [[Special:Preferences|eelistuste lehel]] kehtivat e-posti aadressi ega ole selle kasutamisest blokeeritud.\n\nSinu praegune IP-aadress on $3 ja blokeeringu number #$5. Lisa need andmed kõigile järelpärimistele, mida kavatsed teha.",
@@ -657,7 +669,7 @@
"defaultmessagetext": "Sõnumi vaiketekst",
"content-failed-to-parse": "Ebaõnnestus $1i mudeli $2-tüüpi sisu liigendamine: $3",
"invalid-content-data": "Vigased sisuandmed",
- "content-not-allowed-here": "Lehekülg [[$2]] ei või sisaldada $1i.",
+ "content-not-allowed-here": "Lehekülg [[$2]] ei tohi sisaldada $1i.",
"editwarning-warning": "Sellelt leheküljelt lahkumise tõttu võivad tehtud muudatused kaotsi minna.\nKui oled sisse loginud, saad selle hoiatuse eelistuste alaosas \"{{int:prefs-editing}}\" keelata.",
"editpage-notsupportedcontentformat-title": "Sisuvormingu tugi puudub",
"editpage-notsupportedcontentformat-text": "Sisumudelil $2 puudub sisuvormingu $1 tugi.",
@@ -665,6 +677,10 @@
"content-model-text": "lihttekst",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Tühi objekt",
+ "content-json-empty-array": "Tühi massiiv",
+ "duplicate-args-category": "Leheküljed, kus mallikutses on topeltargument",
+ "duplicate-args-category-desc": "Lehekülg sisaldab mallikutseid, kus mõnd argumenti on kasutatud mitu korda, näiteks <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> või <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Hoiatus:''' See lehekülg kasutab liialt palju aeglustavaid laiendusfunktsioone. Neid võiks kasutada vähem kui {{PLURAL:$2|ühel|$2}} korral, praegu on kasutatud {{PLURAL:$1|ühel|$1}} korral.",
"expensive-parserfunction-category": "Leheküljed, kus on liiga palju kulukaid parserifunktsioone",
"post-expand-template-inclusion-warning": "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur, mõningaid malle ei näidata.",
@@ -719,7 +735,7 @@
"history-feed-empty": "Soovitud lehekülge ei ole olemas.\nSee võib olla vikist kustutatud või ümber nimetatud.\nÜrita [[Special:Search|vikist otsida]] teemakohaseid lehekülgi.",
"rev-deleted-comment": "(muudatuse resümee eemaldatud)",
"rev-deleted-user": "(kasutajanimi eemaldatud)",
- "rev-deleted-event": "(logitoiming eemaldatud)",
+ "rev-deleted-event": "(logi üksikasjad eemaldatud)",
"rev-deleted-user-contribs": "[kasutajanimi või IP-aadress eemaldatud – muudatust ei näidata]",
"rev-deleted-text-permission": "See lehekülje redaktsioon on '''kustutatud'''.\nÜksikasju võib olla [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} kustutamise logis].",
"rev-suppressed-text-permission": "Lehekülje see redaktsioon on <strong>varjatud</strong>.\nÜksikasju leiad [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} varjamislogist].",
@@ -753,7 +769,7 @@
"revdelete-legend": "Nähtavuse piirangute seadmine",
"revdelete-hide-text": "Redaktsiooni tekst",
"revdelete-hide-image": "Peida faili sisu",
- "revdelete-hide-name": "Peida toiming ja selle objekt",
+ "revdelete-hide-name": "Peida toimingu objekt ja parameetrid",
"revdelete-hide-comment": "Resümee",
"revdelete-hide-user": "Toimetaja kasutajanimi või IP-aadress",
"revdelete-hide-restricted": "Varja andmeid nii administraatorite kui ka teiste eest.",
@@ -807,7 +823,6 @@
"mergehistory-same-destination": "Allik- ja sihtlehekülg ei saa olla samad.",
"mergehistory-reason": "Põhjus:",
"mergelog": "Liitmislogi",
- "pagemerge-logentry": "liitis lehekülje [[$1]] leheküljega [[$2]] (kuni redaktsioonini $3)",
"revertmerge": "Tühista liitmine",
"mergelogpagetext": "Allpool on hiljuti üksteisega liidetud leheküljeajalugude logi.",
"history-title": "Lehekülje \"$1\" muudatuste ajalugu",
@@ -830,6 +845,8 @@
"notextmatches": "Vasted lehekülje tekstides puuduvad.",
"prevn": "{{PLURAL:$1|eelmine|eelmised $1}}",
"nextn": "{{PLURAL:$1|järgmine|järgmised $1}}",
+ "prev-page": "eelmine lehekülg",
+ "next-page": "järgmine lehekülg",
"prevn-title": "{{PLURAL:$1|Eelmine tulemus|Eelmised $1 tulemust}}",
"nextn-title": "{{PLURAL:$1|Järgmine tulemus|Järgmised $1 tulemust}}",
"shown-title": "Näita lehekülje kohta $1 {{PLURAL:$1|tulemus|tulemust}}",
@@ -848,6 +865,7 @@
"search-result-category-size": "{{PLURAL:$1|1 lehekülg|$1 lehekülge}} ({{PLURAL:$2|1 alamkategooria|$2 alamkategooriat}}, {{PLURAL:$3|1 fail|$3 faili}})",
"search-redirect": "(ümbersuunamine $1)",
"search-section": "(alaosa $1)",
+ "search-category": "(kategooria \"$1\")",
"search-file-match": "(vastab faili sisule)",
"search-suggest": "Kas mõtlesid: $1",
"search-interwiki-caption": "Sõsarprojektid",
@@ -881,6 +899,11 @@
"prefs-personal": "Kasutaja andmed",
"prefs-rc": "Viimased muudatused",
"prefs-watchlist": "Jälgimisloend",
+ "prefs-editwatchlist": "Jälgimisloendi redigeerimine",
+ "prefs-editwatchlist-label": "Redigeeri jälgimisloendi sissekandeid:",
+ "prefs-editwatchlist-edit": "Vaata ja eemalda jälgimisloendi linke",
+ "prefs-editwatchlist-raw": "Redigeeri toorandmeid",
+ "prefs-editwatchlist-clear": "Tühjenda jälgimisloend",
"prefs-watchlist-days": "Mitme päeva muudatusi näidata loendis:",
"prefs-watchlist-days-max": "Ülemmäär $1 {{PLURAL:$1|päev|päeva}}",
"prefs-watchlist-edits": "Mitu muudatust näidatakse laiendatud jälgimisloendis:",
@@ -950,7 +973,7 @@
"gender-female": "Naine",
"prefs-help-gender": "Selle eelistuse määramine on valikuline.\nTarkvara kasutab valitud väärtust mõnes keeles, et pöörduda sinu poole ja mainida sind teistele, kasutades soole vastavat sõna või sõnavormi.\nSee teave on avalik.",
"email": "E-post",
- "prefs-help-realname": "Vabatahtlik. Kui otsustad päris nime avaldada, kasutatakse seda sinu kaastöö seostamiseks sinuga.",
+ "prefs-help-realname": "Tegelik nimi on valikuline.\nKui avaldatud, võidakse seda kasutada sinu kaastöö seostamiseks sinuga.",
"prefs-help-email": "E-posti aadressi sisestamine pole kohustuslik, kuid võimaldab sul tellida parooli meeldetuletuse, kui peaksid oma parooli unustama.",
"prefs-help-email-others": "Võid ka paluda teistel sinu kasutaja- või aruteluleheküljel sinuga ühendust võtta, selle asemel, et peaksid oma isikuandmeid avaldama.",
"prefs-help-email-required": "E-posti aadress on vajalik.",
@@ -971,16 +994,17 @@
"prefs-tokenwatchlist": "Luba",
"prefs-diffs": "Erinevused",
"prefs-help-prefershttps": "See eelistus jõustub pärast järgmist sisselogimist.",
+ "prefswarning-warning": "Oled teinud eelistustes muudatusi, mida pole veel salvestatud.\nKui lahkud sellelt leheküljelt ilma nupul \"$1\" klõpsamata, jäävad kehtima senised eelistused.",
"prefs-tabs-navigation-hint": "Spikker: Kaardiloendis toodud kaartide vahel liikumiseks saad kasutada vasakut ja paremat nooleklahvi.",
"email-address-validity-valid": "Sobiv e-posti aadress",
"email-address-validity-invalid": "Sisesta sobiv e-posti aadress.",
"userrights": "Kasutajaõiguste haldus",
"userrights-lookup-user": "Kasutajarühma muutmine",
"userrights-user-editname": "Sisesta kasutajanimi:",
- "editusergroup": "Muuda kasutajarühma",
+ "editusergroup": "Muuda kasutajarühmi",
"editinguser": "Kasutaja '''[[User:$1|$1]]''' $2 õiguste muutmine",
- "userrights-editusergroup": "Kasutajarühma valik",
- "saveusergroups": "Salvesta rühma muudatused",
+ "userrights-editusergroup": "Kasutajarühmade muutmine",
+ "saveusergroups": "Salvesta kasutajarühmad",
"userrights-groupsmember": "Kuulub rühmadesse:",
"userrights-groupsmember-auto": "Kuulub vaikimisi rühmadesse:",
"userrights-groups-help": "Sa võid muuta selle kasutaja kuuluvust eri kasutajarühmadesse.\n* Märgitud kast tähendab, et kasutaja kuulub sellesse rühma.\n* Märkimata kast tähendab, et kasutaja ei kuulu sellesse rühma.\n* Aga * kasutajarühma juures tähistab õigust, mida sa peale lisamist enam eemaldada ei saa, või siis ka vastupidi.",
@@ -1056,6 +1080,7 @@
"right-protect": "Muuta kaitsetasemeid ja redigeerida kaskaadkaitsega lehekülgi",
"right-editprotected": "Muuta lehekülgi kaitsetasemega \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Muuta lehekülgi kaitsetasemega \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Muuta lehekülje sisumudelit",
"right-editinterface": "Muuta kasutajaliidest",
"right-editusercssjs": "Redigeerida teiste kasutajate CSS- ja JS-faile",
"right-editusercss": "Redigeerida teiste kasutajate CSS-faile",
@@ -1083,6 +1108,7 @@
"right-override-export-depth": "Eksportida lehekülgi, kaasates viidatud leheküljed kuni viienda tasemeni",
"right-sendemail": "Saata teistele kasutajatele e-kirju",
"right-passwordreset": "Vaadata parooli lähtestamise e-kirju",
+ "right-managechangetags": "Koostada [[Special:Tags|märgiseid]] ja kustutada neid andmebaasist",
"newuserlogpage": "Konto loomise logi",
"newuserlogpagetext": "Siin on logitud kasutajate registreerimine.",
"rightslog": "Kasutajaõiguste logi",
@@ -1128,6 +1154,8 @@
"action-viewmywatchlist": "oma jälgimisloendit vaadata",
"action-viewmyprivateinfo": "oma eraandmeid vaadata",
"action-editmyprivateinfo": "oma eraandmeid redigeerida",
+ "action-editcontentmodel": "lehekülje sisumudelit muuta",
+ "action-managechangetags": "märgiseid koostada ege neid andmebaasist kustutada",
"nchanges": "$1 {{PLURAL:$1|muudatus|muudatust}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|viimase vaatamise järel}}",
"enhancedrc-history": "ajalugu",
@@ -1197,9 +1225,9 @@
"uploaderror": "Faili laadimine ebaõnnestus",
"upload-recreate-warning": "'''Hoiatus: Sellise nimega fail on kustutatud või teisaldatud.'''\n\nSelle lehe kustutamis- ja teisaldamislogi on kuvatud siin:",
"uploadtext": "Kasuta allpool olevat vormi, et faile üles laadida.\nEt näha või leida varem üles laaditud faile, vaata [[Special:FileList|failide loendit]].\nÜleslaadimiste ajalugu saab uurida [[Special:Log/upload|üleslaadimislogist]], kustutamiste ajalugu [[Special:Log/delete|kustutamislogist]].\n\nEt lisada fail artiklile, kasuta üht järgmistest süntaksitest:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fail.jpg]]</nowiki></code>''', et lisada täissuuruses pilt\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fail.png|200px|thumb|left|kirjeldus]]</nowiki></code>''', et lisada lehekülje vasakusse serva raamiga 200 piksli laiune pisipilt koos pildiallkirjaga (''kirjeldus'')\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fail.ogg]]</nowiki></code>''', et linkida otse failile ilma seda kuvamata",
- "upload-permitted": "Lubatud failitüübid: $1.",
- "upload-preferred": "Eelistatud failitüübid: $1.",
- "upload-prohibited": "Keelatud failitüübid: $1.",
+ "upload-permitted": "Lubatud {{PLURAL:$2|failitüüp|failitüübid}}: $1.",
+ "upload-preferred": "Eelistatud {{PLURAL:$2|failitüüp|failitüübid}}: $1.",
+ "upload-prohibited": "Keelatud {{PLURAL:$2|failitüüp|failitüübid}}: $1.",
"uploadlogpage": "Üleslaadimislogi",
"uploadlogpagetext": "Allpool on loend viimastest failide üleslaadimistest. Visuaalsema esituse nägemiseks vaata [[Special:NewFiles|uute failide galeriid]].",
"filename": "Faili nimi",
@@ -1444,7 +1472,7 @@
"unusedtemplates": "Kasutamata mallid",
"unusedtemplatestext": "See lehekülg loetleb kõik leheküljed nimeruumis {{ns:template}}, mida teistel lehekülgedel ei kasutata.\nEnne kustutamist kontrolli ka muid malli juurde viitavaid linke.",
"unusedtemplateswlh": "teised lingid",
- "randompage": "Juhuslik artikkel",
+ "randompage": "Juhuslik lehekülg",
"randompage-nopages": "{{PLURAL:$2|Järgmises nimeruumis|Järgmistes nimeruumides}} ei ole ühtegi lehekülge: $1.",
"randomincategory": "Juhuslik lehekülg kategoorias",
"randomincategory-invalidcategory": "\"$1\" pole sobiv kategooria nimi.",
@@ -1456,7 +1484,6 @@
"statistics": "Arvandmestik",
"statistics-header-pages": "Lehekülgede arvandmed",
"statistics-header-edits": "Redigeerimise arvandmed",
- "statistics-header-views": "Vaatamise statistika",
"statistics-header-users": "Kasutajate arvandmed",
"statistics-header-hooks": "Muud arvandmed",
"statistics-articles": "Sisulehekülgi",
@@ -1465,13 +1492,9 @@
"statistics-files": "Üleslaaditud faile",
"statistics-edits": "Redigeerimisi alates {{GRAMMAR:genitive|{{SITENAME}}}} loomisest",
"statistics-edits-average": "Keskmiselt redigeerimisi lehekülje kohta",
- "statistics-views-total": "Lehekülje vaatamisi kokku",
- "statistics-views-total-desc": "Olematute lehekülgede või erilehekülgede vaatamised on välja arvatud",
- "statistics-views-peredit": "Vaatamisi redaktsiooni kohta",
"statistics-users": "Registreeritud [[Special:ListUsers|kasutajaid]]",
"statistics-users-active": "Aktiivseid kasutajaid",
"statistics-users-active-desc": "Kasutajad, kes on viimase {{PLURAL:$1|päeva|$1 päeva}} jooksul tegutsenud",
- "statistics-mostpopular": "Enim vaadatud leheküljed",
"pageswithprop": "Leheatribuudiga leheküljed",
"pageswithprop-legend": "Leheatribuudiga leheküljed",
"pageswithprop-text": "Sellel leheküljel on loetletud mõnd leheatribuuti kasutavad leheküljed.",
@@ -1512,9 +1535,9 @@
"uncategorizedtemplates": "Kategoriseerimata mallid",
"unusedcategories": "Kasutamata kategooriad",
"unusedimages": "Kasutamata failid",
- "popularpages": "Loetumad leheküljed",
"wantedcategories": "Kõige oodatumad kategooriad",
"wantedpages": "Kõige oodatumad leheküljed",
+ "wantedpages-summary": "Loend puuduvatest lehekülgedest, millele viitab kõige rohkem linke, välja arvatud leheküljed, millele viitavad ainult ümbersuunamised. Puuduvad leheküljed, millele viitavad ümbersuunamised, on loetletud leheküljel [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Tulemuste seas on vigane pealkiri: $1",
"wantedfiles": "Kõige oodatumad failid",
"wantedfiletext-cat": "Järgmised failid puuduvad, aga on lehekülgedel kasutuses. Siin võivad olla loetletud ka välistes hoidlates asuvad failid, hoolimata sellest, et nad tegelikult olemas on. Loendi sellised valeliikmed on <del>läbi kriipsutatud</del>. Lisaks on puuduvaid faile sisaldavad leheküljed loetletud asukohas [[:$1]].",
@@ -1574,9 +1597,11 @@
"pager-older-n": "{{PLURAL:$1|vanem 1|vanemad $1}}",
"suppress": "Varjamine",
"querypage-disabled": "See erilehekülg on keelatud, et jõudlust hoida.",
+ "apihelp": "API abi",
+ "apihelp-no-such-module": "Moodulit \"$1\" ei leitud.",
"booksources": "Raamatuotsimine",
"booksources-search-legend": "Raamatuotsimine",
- "booksources-go": "Mine",
+ "booksources-search": "Otsi",
"booksources-text": "Allpool on linke teistele lehekülgedele, kus müüakse uusi ja kasutatud raamatuid. Lehekülgedel võib olla ka lisainfot raamatute kohta:",
"booksources-invalid-isbn": "Antud ISBN-number ei ole korrektne; kontrolli algallikast kopeerides vigu.",
"specialloguserlabel": "Täitja:",
@@ -1654,7 +1679,7 @@
"noindex-category-desc": "Robotid ei indekseeri lehekülge, sest sellel on võlusõna <code><nowiki>__NOINDEX__</nowiki></code> ja lehekülg on nimeruumis, kus see silt on lubatud.",
"index-category-desc": "Leheküljel on <code><nowiki>__INDEX__</nowiki></code> ja lehekülg on nimeruumis, kus see silt on lubatud ning seetõttu indekseerivad robotid lehekülge seal, kus nad muidu seda ei teeks.",
"post-expand-template-inclusion-category-desc": "Kõigi mallide hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>, mistõttu jäid mõned mallid hõrendamata.",
- "post-expand-template-argument-category-desc": "Malli argumendi (midagi kolmekordsete looksulgude vahel, näiteks <code>{{{Foo}}})</code> hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>.",
+ "post-expand-template-argument-category-desc": "Malli argumendi (midagi kolmekordsete looksulgude vahel, näiteks <code>{{{Foo}}}</code>) hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>.",
"expensive-parserfunction-category-desc": "Lehekülg kasutab liiga palju kulukaid parserifunktsioone nagu <code>#ifexist</code>. Vaata [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit dokumentatsiooni].",
"broken-file-category-desc": "Leheküljel on katkine pildilink, millega manustatakse fail, mida pole olemas.",
"hidden-category-category-desc": "Selle kategooria leheküljel on <code><nowiki>__HIDDENCAT__</nowiki></code>, mis vaikimisi ei lase näidata seda kategooriat lehekülgedel kategoorialinkide kastis.",
@@ -1712,7 +1737,7 @@
"wlheader-enotif": "E-posti teel teavitamine on lubatud.",
"wlheader-showupdated": "Leheküljed, mida on muudetud peale sinu viimast külastust, on '''rasvases kirjas'''.",
"wlnote": "Allpool on {{PLURAL:$1|viimane muudatus|viimased <strong>$1</strong> muudatust}} viimase {{PLURAL:$2|tunni|<strong>$2</strong> tunni}} jooksul seisuga $3, kell $4.",
- "wlshowlast": "Näita viimast $1 tundi $2 päeva. $3",
+ "wlshowlast": "Näita viimast $1 tundi $2 päeva.",
"watchlist-options": "Jälgimisloendi seaded",
"watching": "Jälgimine...",
"unwatching": "Jälgimise lõpetamine...",
@@ -1761,7 +1786,6 @@
"deleteprotected": "Seda lehekülge ei saa kustutada, sest see on kaitstud.",
"deleting-backlinks-warning": "'''Hoiatus:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Teised leheküljed]] viitavad leheküljele, mida oled kustutamas, või see lehekülg on kasutuses mallina.",
"rollback": "Tühista muudatused",
- "rollback_short": "Tühista",
"rollbacklink": "tühista",
"rollbacklinkcount": "tühista {{PLURAL:$1|üks muudatus|$1 muudatust}}",
"rollbacklinkcount-morethan": "tühista üle {{PLURAL:$1|ühe muudatuse|10 muudatuse}}",
@@ -1811,6 +1835,7 @@
"protect-othertime": "Muu aeg:",
"protect-othertime-op": "muu aeg",
"protect-existing-expiry": "Kehtiv aegumisaeg: $2 kell $3",
+ "protect-existing-expiry-infinity": "Kehtiv aegumisaeg: igavene",
"protect-otherreason": "Muu või täiendav põhjus:",
"protect-otherreason-op": "Muu põhjus",
"protect-dropdown": "*Tavalised kaitsmise põhjused\n** Liigne vandalism\n** Liigne rämpspostitamine\n** Redigeerimissõja pidamine\n** Suure liiklusega lehekülg",
@@ -1870,6 +1895,7 @@
"namespace": "Nimeruum:",
"invert": "Näita kõiki peale valitud nimeruumi",
"tooltip-invert": "Tee kasti linnuke, kui soovid peita muudatused valitud nimeruumi lehekülgedel (ja valiku korral ka sellega seotud nimeruumis)",
+ "tooltip-whatlinkshere-invert": "Tee sellesse kasti linnuke, et peita lingid valitud nimeruumi lehekülgedelt.",
"namespace_association": "Seonduv nimeruum",
"tooltip-namespace_association": "Tee kasti linnuke, kui soovid valida ka valitud nimeruumiga seotud arutelu- või sisulehekülgede nimeruumi",
"blanknamespace": "(Artiklid)",
@@ -1932,7 +1958,7 @@
"ipbenableautoblock": "Blokeeri automaatselt viimane IP-aadress, mida see kasutaja kasutas, ja ka järgnevad, mille alt ta võib proovida kaastööd teha",
"ipbsubmit": "Blokeeri see kasutaja",
"ipbother": "Muu tähtaeg:",
- "ipboptions": "2 tundi:2 hours,1 päev:1 day,3 päeva:3 days,1 nädal:1 week,2 nädalat:2 weeks,1 kuu:1 month,3 kuud:3 months,6 kuud:6 months,1 aasta:1 year,igavene:infinite",
+ "ipboptions": "2 tundi:2 hours,1 päev:1 day,3 päeva:3 days,1 nädal:1 week,2 nädalat:2 weeks,1 kuu:1 month,3 kuud:3 months,6 kuud:6 months,1 aasta:1 year,tähtajatu:infinite",
"ipbhidename": "Peida kasutajatunnus muudatustest ja loenditest",
"ipbwatchuser": "Jälgi selle kasutaja lehekülge ja arutelu",
"ipb-disableusertalk": "Keela sellel kasutajal blokeeringu ajal oma arutelulehekülge redigeerida",
@@ -1973,7 +1999,7 @@
"ipblocklist-localblock": "Kohalik blokeering",
"ipblocklist-otherblocks": "{{PLURAL:$1|Muu blokeering|Muud blokeeringud}}",
"infiniteblock": "igavene",
- "expiringblock": "aegub $1 $2",
+ "expiringblock": "aegumistähtaeg $1, $2",
"anononlyblock": "ainult nimetuna",
"noautoblockblock": "IP-aadressi ei blokita automaatselt",
"createaccountblock": "kontode loomine keelatud",
@@ -2059,7 +2085,7 @@
"movepage-moved": "'''\"$1\" teisaldatud pealkirja \"$2\" alla'''",
"movepage-moved-redirect": "Ümbersuunamisleht loodud.",
"movepage-moved-noredirect": "Ümbersuunamist ei loodud.",
- "articleexists": "Selle nimega artikkel on juba olemas või pole valitud nimi lubatav. Palun valige uus nimi.",
+ "articleexists": "Sellise pealkirjaga lehekülg on juba olemas või pole valitud pealkiri lubatav.\nPalun vali teistsugune pealkiri.",
"cantmove-titleprotected": "Lehte ei saa sinna teisaldada, sest uus pealkiri on artikli loomise eest kaitstud",
"movetalk": "Teisalda seonduv arutelulehekülg",
"move-subpages": "Teisalda alamleheküljed (kuni $1)",
@@ -2134,14 +2160,15 @@
"thumbnail-temp-create": "Ajutist pisipildifaili ei õnnestu luua.",
"thumbnail-dest-create": "Pisipilti ei õnnestu sihtkohas salvestada",
"thumbnail_invalid_params": "Vigased pisipildi parameetrid",
+ "thumbnail_toobigimagearea": "Faili mõõtmed on suuremad kui $1",
"thumbnail_dest_directory": "Sihtkataloogi loomine ebaõnnestus.",
"thumbnail_image-type": "Selline pildi tüüp ei ole toetatav",
"thumbnail_gd-library": "GD teegi häälestus on poolik: funktsioon $1 puudub",
"thumbnail_image-missing": "Fail näib puuduvat: $1",
"thumbnail_image-failure-limit": "Selle pisipildi viimistlemine on hiljuti liiga palju kordi ($1 või rohkem) ebaõnnestunud. Palun proovi hiljem uuesti.",
"import": "Lehekülgede import",
- "importinterwiki": "Vikidevaheline import",
- "import-interwiki-text": "Vali importimiseks viki ja lehekülje pealkiri.\nRedigeerimisajad ja kaastööliste nimed säilitatakse.\nKõik vikidevahelised toimingud on [[Special:Log/import|impordilogis]].",
+ "importinterwiki": "Importimine teisest vikist",
+ "import-interwiki-text": "Vali importimiseks viki ja lehekülje pealkiri.\nRedigeerimisajad ja kaastööliste nimed säilitatakse.\nKõik teisest vikist importimised on [[Special:Log/import|impordilogis]].",
"import-interwiki-sourcewiki": "Lähteviki:",
"import-interwiki-sourcepage": "Alliklehekülg:",
"import-interwiki-history": "Kopeeri selle lehekülje kogu ajalugu",
@@ -2161,7 +2188,7 @@
"importcantopen": "Ei saa imporditavat faili avada",
"importbadinterwiki": "Vigane vikidevaheline link",
"importsuccess": "Importimine edukalt lõpetatud!",
- "importnosources": "Ühtegi vikidevahelist impordiallikat pole määratletud ja otsene ajaloo üleslaadimine on keelatud.",
+ "importnosources": "Määratletud pole ühtegi vikit, kust importida, ja otsene ajaloo üleslaadimine on keelatud.",
"importnofile": "Ühtegi imporditavat faili ei laaditud üles.",
"importuploaderrorsize": "Üleslaaditava faili import ebaõnnestus.\nFail on lubatust suurem.",
"importuploaderrorpartial": "Imporditava faili üleslaadimine ebaõnnestus.\nFail oli vaid osaliselt üleslaaditud.",
@@ -2185,18 +2212,15 @@
"import-rootpage-nosubpage": "Juurlehekülje nimeruumis \"$1\" pole alamleheküljed lubatud.",
"importlogpage": "Impordilogi",
"importlogpagetext": "Importimislogi kuvab leheküljed, mille redigeerimisajalugu pärineb teistest vikidest.",
- "import-logentry-upload": "importis faili üleslaadimisega lehekülje [[$1]]",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|redaktsioon|redaktsiooni}} imporditud",
- "import-logentry-interwiki": "importis teisest vikist lehekülje $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|redaktsioon|redaktsiooni}} imporditud asukohast $2",
"javascripttest": "JavaScripti katsetamine",
- "javascripttest-title": "$1-katse käitus",
"javascripttest-pagetext-noframework": "Seda lehekülge hoitakse JavaScripti katsete jaoks.",
"javascripttest-pagetext-unknownframework": "Tundmatu katseraamistik \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Tundmatu toiming \"$1\".",
"javascripttest-pagetext-frameworks": "Palun vali üks järgmistest katseraamistikest: $1",
"javascripttest-pagetext-skins": "Vali kujundus, millega katsetada:",
"javascripttest-qunit-intro": "Vaata [$1 katsetamise dokumentatsiooni] asukohas mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScripti QUnit-katsekomplekt",
"tooltip-pt-userpage": "Sinu kasutajaleht",
"tooltip-pt-anonuserpage": "Sinu IP-aadressi kasutajalehekülg",
"tooltip-pt-mytalk": "Sinu arutelulehekülg",
@@ -2204,9 +2228,10 @@
"tooltip-pt-preferences": "Sinu eelistused",
"tooltip-pt-watchlist": "Loend lehekülgedest, mille muudatusi jälgid",
"tooltip-pt-mycontris": "Sinu kaastööde loend",
- "tooltip-pt-login": "Me julgustame teid sisse logima, kuid see pole kohustuslik.",
+ "tooltip-pt-login": "See pole küll kohustuslik, aga sul tasub sisse logida.",
"tooltip-pt-logout": "Logi välja",
- "tooltip-ca-talk": "Selle artikli arutelu",
+ "tooltip-pt-createaccount": "See pole küll kohustuslik, aga sul tasub konto luua ja sisse logida.",
+ "tooltip-ca-talk": "Arutelu selle lehekülje sisu kohta",
"tooltip-ca-edit": "Sa saad seda lehekülge muuta. Palun kasuta enne salvestamist eelvaadet.",
"tooltip-ca-addsection": "Lisa uus alaosa",
"tooltip-ca-viewsource": "See lehekülg on kaitstud.\nSaad vaadata selle lähteteksti.",
@@ -2235,6 +2260,7 @@
"tooltip-feed-atom": "Selle lehekülje Atom-voog",
"tooltip-t-contributions": "Kuva selle kasutaja kaastöö",
"tooltip-t-emailuser": "Saada sellele kasutajale e-kiri",
+ "tooltip-t-info": "Lisateave selle lehekülje kohta",
"tooltip-t-upload": "Laadi faile üles",
"tooltip-t-specialpages": "Erilehekülgede loend",
"tooltip-t-print": "Selle lehe trükiversioon",
@@ -2255,7 +2281,7 @@
"tooltip-diff": "Näita tehtavaid muudatusi.",
"tooltip-compareselectedversions": "Näita erinevusi selle lehe kahe valitud versiooni vahel.",
"tooltip-watch": "Lisa see lehekülg oma jälgimisloendisse",
- "tooltip-watchlistedit-normal-submit": "Eemalda leheküljed",
+ "tooltip-watchlistedit-normal-submit": "Eemalda pealkirjad",
"tooltip-watchlistedit-raw-submit": "Uuenda jälgimisloendit",
"tooltip-recreate": "Taasta kustutatud lehekülg",
"tooltip-upload": "Alusta üleslaadimist",
@@ -2308,7 +2334,6 @@
"pageinfo-robot-policy": "Robotindekseering",
"pageinfo-robot-index": "Lubatud",
"pageinfo-robot-noindex": "Keelatud",
- "pageinfo-views": "Vaatamiste arv",
"pageinfo-watchers": "Lehekülje jälgijate arv",
"pageinfo-few-watchers": "Alla {{PLURAL:$1|ühe jälgija|$1 jälgija}}",
"pageinfo-redirects-name": "Sellele leheküljele suunavate lehekülgede arv",
@@ -2353,8 +2378,8 @@
"patrol-log-header": "See on kontrollitud redaktsioonide logi.",
"log-show-hide-patrol": "$1 kontrollimislogi",
"deletedrevision": "Kustutatud vanem versioon $1",
- "filedeleteerror-short": "Faili $1 kustutamine ebaõnnestus",
- "filedeleteerror-long": "Faili kustutamine ebaõnnestus:\n\n$1",
+ "filedeleteerror-short": "Tõrge faili kustutamisel: $1",
+ "filedeleteerror-long": "Faili kustutamisel esines tõrkeid:\n\n$1",
"filedelete-missing": "Faili \"$1\" ei saa kustutada, sest seda ei ole.",
"filedelete-old-unregistered": "Etteantud failiversiooni \"$1\" pole andmebaasis.",
"filedelete-current-unregistered": "Fail \"$1\" ei ole andmebaasis.",
@@ -2479,8 +2504,8 @@
"exif-focallength": "Fookuskaugus",
"exif-subjectarea": "Põhimotiivi ala",
"exif-flashenergy": "Välgu võimsus",
- "exif-focalplanexresolution": "Fokaaltasandi laius",
- "exif-focalplaneyresolution": "Fokaaltasandi kõrgus",
+ "exif-focalplanexresolution": "Fokaaltasandi rõhteraldus",
+ "exif-focalplaneyresolution": "Fokaaltasandi püsteraldus",
"exif-focalplaneresolutionunit": "Fokaaltasandi eraldusühik",
"exif-subjectlocation": "Põhimotiivi asukoht",
"exif-exposureindex": "Särituse number",
@@ -2757,7 +2782,6 @@
"exif-urgency-low": "Madal ($1)",
"exif-urgency-high": "Kõrge ($1)",
"exif-urgency-other": "Kasutaja määratud tähtsus ($1)",
- "watchlistall2": "Näita kõiki",
"namespacesall": "kõik",
"monthsall": "kõik",
"confirmemail": "E-posti aadressi kinnitamine",
@@ -2820,12 +2844,12 @@
"lag-warn-high": "Andmebaasiserveri töö viivituste tõttu ei pruugi viimase {{PLURAL:$1|ühe sekundi|$1 sekundi}} jooksul tehtud muudatused selles loendis näha olla.",
"watchlistedit-normal-title": "Jälgimisloendi redigeerimine",
"watchlistedit-normal-legend": "Jälgimisloendist lehtede eemaldamine",
- "watchlistedit-normal-explain": "Need lehed on sinu jälgimisloendis.\nJälgimisloendist lehtekülgede eemaldamiseks tee vastava lehekülje ees olevasse kastikesse linnuke ja klõpsa nuppu \"{{int:Watchlistedit-normal-submit}}\". Saad ka jälgimisloendi [[Special:EditWatchlist/raw|algandmeid muuta]].",
- "watchlistedit-normal-submit": "Eemalda valitud lehed",
+ "watchlistedit-normal-explain": "Need pealkirjad on sinu jälgimisloendis.\nJälgimisloendist pealkirja eemaldamiseks tee selle juurde linnuke ja klõpsa nuppu \"{{int:Watchlistedit-normal-submit}}\".\nSaad ka jälgimisloendi [[Special:EditWatchlist/raw|toorandmeid redigeerida]].",
+ "watchlistedit-normal-submit": "Eemalda pealkirjad",
"watchlistedit-normal-done": "Jälgimisloendist eemaldati {{PLURAL:$1|üks lehekülg|$1 lehekülge}}:",
- "watchlistedit-raw-title": "Jälgimisloendi algandmed",
- "watchlistedit-raw-legend": "Redigeeritavad jälgimisloendi algandmed",
- "watchlistedit-raw-explain": "Sinu jälgimisloendis olevad leheküljed on kuvatud allpool asuvas tekstikastis, kus sa saad neid lisada või eemaldada;\nIga pealkiri asub ise real.\nKui sa oled lõpetanud, kliki nuppu \"{{int:Watchlistedit-raw-submit}}\".\nSa võid [[Special:EditWatchlist|kasutada ka harilikku tekstiredaktorit]].",
+ "watchlistedit-raw-title": "Jälgimisloendi toorandmete redigeerimine",
+ "watchlistedit-raw-legend": "Jälgimisloendi toorandmete redigeerimine",
+ "watchlistedit-raw-explain": "Allpool on sinu jälgimisloendisse kantud pealkirjade loend, kus saab sissekandeid lisada ja eemaldada.\nIga rea kohta peab olema üks pealkiri.\nKui oled lõpetanud, klõpsa nuppu \"{{int:Watchlistedit-raw-submit}}\".\nSaad kasutada ka [[Special:EditWatchlist|standardset redaktorit]].",
"watchlistedit-raw-titles": "Pealkirjad:",
"watchlistedit-raw-submit": "Uuenda jälgimisloendit",
"watchlistedit-raw-done": "Sinu jälgimisloend on uuendatud.",
@@ -2844,9 +2868,9 @@
"watchlisttools-edit": "Vaata ja redigeeri jälgimisloendit",
"watchlisttools-raw": "Muuda lähteteksti",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|arutelu]])",
- "unknown_extension_tag": "Tundmatu lisa silt \"$1\".",
"duplicate-defaultsort": "'''Hoiatus:''' Järjestamisvõti \"$2\" tühistab eespool oleva järjestamisvõtme \"$1\".",
"duplicate-displaytitle": "<strong>Hoiatus:</strong> Kuvatava pealkirjaga \"$2\" kirjutatakse üle varasem kuvatav pealkiri \"$1\".",
+ "invalid-indicator-name": "<strong>Tõrge:</strong> Lehekülje olekunäidu juures ei tohi atribuudi <code>name</code> väärtus puududa.",
"version": "Versioon",
"version-extensions": "Paigaldatud lisad",
"version-skins": "Paigaldatud kujundused",
@@ -2873,7 +2897,7 @@
"version-ext-colheader-credits": "Autorid",
"version-license-title": "Tarkvaralisa $1 litsents",
"version-license-not-found": "Selle lisa kohta ei leitud üksikasjalikku litsentsiteavet.",
- "version-credits-title": "Tarkvaralisa $1 tegijad",
+ "version-credits-title": "Tarkvarakomponendi $1 tegijad",
"version-credits-not-found": "Selle lisa tegijate kohta ei leitud üksikasjalikku teavet.",
"version-poweredby-credits": "See viki kasutab '''[https://www.mediawiki.org/ MediaWiki]''' tarkvara. Autoriõigus © 2001–$1 $2.",
"version-poweredby-others": "teised",
@@ -2886,6 +2910,9 @@
"version-entrypoints": "Sisendpunktide internetiaadressid",
"version-entrypoints-header-entrypoint": "Sisendpunkt",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Paigaldatud teegid",
+ "version-libraries-library": "Teek",
+ "version-libraries-version": "Versioon",
"redirect": "Ümbersuunamine faili, kasutaja, lehekülje või redaktsiooni identifikaatori järgi",
"redirect-legend": "Ümbersuunamine faili juurde või leheküljele",
"redirect-summary": "See erilehekülg suunab ümber faili (toodud failinimi), lehekülje (toodud redaktsiooni või lehekülje identifikaator) või kasutajalehekülje (toodud numbriline kasutaja identfikaator) juurde. Kasutamine: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] või [[{{#Special:Redirect}}/user/101]].",
@@ -2921,6 +2948,7 @@
"specialpages-group-wiki": "Andmed ja tööriistad",
"specialpages-group-redirects": "Ümbersuunavad erilehed",
"specialpages-group-spam": "Töö spämmiga",
+ "specialpages-group-developer": "Arendusriistad",
"blankpage": "Tühi leht",
"intentionallyblankpage": "See lehekülg on sihilikult tühjaks jäetud.",
"external_image_whitelist": " #Jäta see rida muutmata kujule<pre>\n#Pane regulaaravaldise osad (vaid //-märkide vahel olev osa) allapoole\n#Need on vastavuses vikiväliste piltide internetiaadressidega\n#Vastavuses olevad kuvatakse piltidena, muul juhul kuvatakse ainult pildi link\n#Märgiga # algavad read on kommentaarid\n#See on tõstutundetu\n\n#Pane kõik regulaaravaldise osad selle joone kohale. Jäta see rida muutmata kujule</pre>",
@@ -2933,12 +2961,54 @@
"tags-tag": "Märgise nimi",
"tags-display-header": "Tähistus muudatusloendis",
"tags-description-header": "Täiskirjeldus",
+ "tags-source-header": "Allikas",
"tags-active-header": "Aktiivne?",
"tags-hitcount-header": "Märgistatud muudatused",
+ "tags-actions-header": "Toimingud",
"tags-active-yes": "Jah",
"tags-active-no": "Ei",
+ "tags-source-extension": "Määratletud tarkvaralisas",
+ "tags-source-manual": "Kasutaja või robot rakendab käsitsi",
+ "tags-source-none": "Pole enam kasutuses",
"tags-edit": "muuda",
+ "tags-delete": "kustuta",
+ "tags-activate": "luba",
+ "tags-deactivate": "keela",
"tags-hitcount": "$1 {{PLURAL:$1|muudatus|muudatust}}",
+ "tags-manage-no-permission": "Sul pole õigust muudatusmärgiseid hallata.",
+ "tags-create-heading": "Uue märgise koostamine",
+ "tags-create-explanation": "Vaikimisi on vastkoostatud märgised kasutajate ja robotite jaoks kasutatavad.",
+ "tags-create-tag-name": "Märgise nimi:",
+ "tags-create-reason": "Põhjus:",
+ "tags-create-submit": "Koosta",
+ "tags-create-no-name": "Pead määrama märgise nime.",
+ "tags-create-invalid-chars": "Märgise nimi ei tohi sisaldada koma (<code>,</code>) ega kaldkriipsu (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Märgise nimi ei tohi sisaldada märki, mida ei saa kasutada lehekülje pealkirjas.",
+ "tags-create-already-exists": "Märgis \"$1\" on juba olemas.",
+ "tags-create-warnings-above": "Prooviti koostada märgist \"$1\". Sellega seoses väljastati \"{{PLURAL:$2|järgmine hoiatus|järgmised hoiatused}}:",
+ "tags-create-warnings-below": "Kas soovid märgise koostamisega jätkata?",
+ "tags-delete-title": "Märgise kustutamine",
+ "tags-delete-explanation-initial": "Oled kustutamas märgist \"$1\" andmebaasist.",
+ "tags-delete-explanation-in-use": "See eemaldatakse {{PLURAL:$2|ühelt redaktsioonilt või|kõigilt $2 redaktsioonilt ja/või}} logisissekandelt, mille juures seda on praegu rakendatud.",
+ "tags-delete-explanation-warning": "Seda toimingut <strong>ei saa tagasi pöörata</strong> isegi mitte andmebaasi administraator. Veendu, et tegu on märgisega, mida kustutada tahad.",
+ "tags-delete-explanation-active": "<strong>Märgis \"$1\" on endiselt aktiivne ja seda rakendatakse edaspidi.</strong> Et nii poleks, mine kohtadesse, kust märgist rakendatakse, ja keela märgis seal.",
+ "tags-delete-reason": "Põhjus:",
+ "tags-delete-submit": "Kustuta märgis pöördumatult",
+ "tags-delete-not-allowed": "Tarkvaralisas määratletud märgiseid ei saa kustutada, kui märgis on tarkvaralisas eraldi lubatud.",
+ "tags-delete-not-found": "Märgist \"$1\" pole.",
+ "tags-delete-too-many-uses": "Märgist \"$1\" on rakendatud rohkem kui {{PLURAL:$2|ühe|$2}} redaktsiooni juures, mistõttu ei saa seda kustutada.",
+ "tags-delete-warnings-after-delete": "Märgis \"$1\" on edukalt kustutatud, kuid väljastati {{PLURAL:$2|järgmine hoiatus|järgmised hoiatused}}:",
+ "tags-activate-title": "Märgise lubamine",
+ "tags-activate-question": "Siinkohal lubad märgise \"$1\".",
+ "tags-activate-reason": "Põhjus:",
+ "tags-activate-not-allowed": "Märgist \"$1\" pole võimalik lubada.",
+ "tags-activate-not-found": "Märgist \"$1\" pole.",
+ "tags-activate-submit": "Luba",
+ "tags-deactivate-title": "Märgise keelamine",
+ "tags-deactivate-question": "Siinkohal keelad märgise \"$1\".",
+ "tags-deactivate-reason": "Põhjus:",
+ "tags-deactivate-not-allowed": "Märgist \"$1\" pole võimalik keelata.",
+ "tags-deactivate-submit": "Keela",
"comparepages": "Lehekülgede kõrvutamine",
"compare-page1": "Lehekülg 1",
"compare-page2": "Lehekülg 2",
@@ -2950,8 +3020,8 @@
"compare-revision-not-exists": "Valitud redaktsiooni ei ole.",
"dberr-problems": "Kahjuks on sellel saidil tehnilisi probleeme",
"dberr-again": "Oota mõni hetk ja laadi lehekülg uuesti.",
- "dberr-info": "(Ei saa ühendust andmebaasi serveriga: $1)",
- "dberr-info-hidden": "(Andmebaasiserveriga ei saa ühendust.)",
+ "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.",
@@ -2992,6 +3062,14 @@
"revdelete-uname-unhid": "nähtavaks tehti kasutajanimi",
"revdelete-restricted": "kehtestati piirangud administraatoritele",
"revdelete-unrestricted": "eemaldati administraatoritelt piirangud",
+ "logentry-block-block": "$1 {{GENDER:$2|blokeeris}} kasutaja {{GENDER:$4|$3}}; aegumistähtaeg $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|eemaldas}} kasutaja {{GENDER:$4|$3}} blokeeringu",
+ "logentry-block-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut; 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",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|importis}} lehekülje $3 teisest vikist",
+ "logentry-merge-merge": "$1 {{GENDER:$2|liitis}} lehekülje $3 leheküljega $4 (kuni redaktsioonini $5)",
"logentry-move-move": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla ümbersuunamist maha jätmata",
"logentry-move-move_redir": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 ümbersuunamise $4 asemele",
@@ -3009,20 +3087,36 @@
"logentry-upload-upload": "$1 {{GENDER:$2|laadis üles}} faili $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|laadis üles}} uue versiooni failist $3",
"logentry-upload-revert": "$1 {{GENDER:$2|laadis üles}} faili $3",
+ "log-name-managetags": "Märgiste haldamise logi",
+ "log-description-managetags": "Sellel leheküljel on toodud [[Special:Tags|märgiste]] haldamisega seotud tegevused. Logis on ainult toimingud, mida administraatorid on teinud käsitsi. Siin puuduvad logisissekanded viki tarkvaras koostatud või sealt kustutatud märgiste kohta.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|koostas}} märgise \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|kustutas}} märgise \"$4\" (eemaldatud {{PLURAL:$5|ühe redaktsiooni või|$5 redaktsiooni ja/või}} logisissekande juurest)",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|lubas}} märgise \"$4\" kasutamise kasutajate ja robotite jaoks",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|keelas}} märgise \"$4\" kasutamise kasutajate ja robotite jaoks",
"rightsnone": "(puudub)",
+ "revdelete-summary": "resümee",
+ "feedback-adding": "Tagasiside lisamine leheküljele...",
+ "feedback-back": "Tagasi",
+ "feedback-bugcheck": "Hästi! Kontrolli vaid, ega tegu pole juba [$1 teada oleva veaga].",
+ "feedback-bugnew": "Kontrollisin. Teata uuest veast",
"feedback-bugornote": "Kui arvad, et oskad tehnilist probleemi üksikasjalikult kirjeldada, [$1 teata veast].\nKui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajanime ja teabega kasutatava võrgulehitsejaga kohta leheküljele \"[$3 $2]\".",
- "feedback-subject": "Teema:",
- "feedback-message": "Sõnum:",
"feedback-cancel": "Loobu",
- "feedback-submit": "Saada tagasiside",
- "feedback-adding": "Tagasiside lisamine leheküljele...",
+ "feedback-close": "Valmis",
+ "feedback-external-bug-report-button": "Koosta tehniline tööülesanne",
+ "feedback-dialog-title": "Tagasiside saatmine",
+ "feedback-dialog-intro": "Selle lihtsa vormi abil saad tagasisidet saata. Leheküljele \"$1\" lisatakse sinu kommentaar, mille juures on sinu kasutajanimi.",
+ "feedback-error-title": "Tõrge",
"feedback-error1": "Tõrge: Tundmatu API tulemus",
"feedback-error2": "Tõrge: Redigeerimine ebaõnnestus",
"feedback-error3": "Tõrge: API ei vasta",
+ "feedback-message": "Sõnum:",
+ "feedback-subject": "Teema:",
+ "feedback-submit": "Saada",
+ "feedback-terms": "Mõistan, et minu kasutajaagendi andmed sisaldavad teavet minu veebilehitseja ja operatsioonisüsteemi täpse versiooni kohta ning need andmed tehakse minu tagasiside juures avalikuks.",
+ "feedback-termsofuse": "Olen nõus andma tagasisidet vastavalt kasutustingimustele.",
"feedback-thanks": "Aitäh! Sinu tagasiside on postitatud leheküljele \"[$2 $1]\".",
- "feedback-close": "Valmis",
- "feedback-bugcheck": "Hästi! Kontrolli vaid, ega tegu pole juba [$1 teada oleva veaga].",
- "feedback-bugnew": "Kontrollisin. Teata uuest veast",
+ "feedback-thanks-title": "Aitäh!",
+ "feedback-useragent": "Kasutajaagent:",
"searchsuggest-search": "Otsi",
"searchsuggest-containing": "sisalduv...",
"api-error-badaccess-groups": "Sul pole selles vikis üleslaadimisõigust.",
@@ -3058,6 +3152,13 @@
"api-error-stashfailed": "Sisetõrge: Serveril ei õnnestunud ajutist faili talletada.",
"api-error-publishfailed": "Sisetõrge: Serveril ebaõnnestus ajutise faili avaldamine.",
"api-error-stasherror": "Selle faili hoidlasse üleslaadimisel ilmnes tõrge.",
+ "api-error-stashedfilenotfound": "Algses hoidlas talletatud faili ei leitud, kui seda sealt üles püüti laadida.",
+ "api-error-stashpathinvalid": "Failitee, kus algse hoidla fail pidanuks leiduma, oli vigane.",
+ "api-error-stashfilestorage": "Faili algsesse hoidlasse talletamisel esines tõrge.",
+ "api-error-stashzerolength": "Server ei saanud faili algses hoidlas talletada, sest fail on tühi.",
+ "api-error-stashnotloggedin": "Pead olema sisse logitud, et salvestada faile üleslaadimise algsesse hoidlasse.",
+ "api-error-stashwrongowner": "Fail, mille juurde algses hoidlas üritasid pääseda, ei kuulu sulle.",
+ "api-error-stashnosuchfilekey": "Failivõtit, mille juurde algses hoidlas üritasid pääseda, pole olemas.",
"api-error-timeout": "Server ei vastanud oodatud aja sees.",
"api-error-unclassified": "Ilmnes teadmata tõrge.",
"api-error-unknown-code": "Teadmata tõrge: \"$1\"",
@@ -3102,6 +3203,8 @@
"expand_templates_generate_xml": "Näita XML-liigenduspuud",
"expand_templates_generate_rawhtml": "Näita toor-HTMLi",
"expand_templates_preview": "Eelvaade",
+ "expand_templates_preview_fail_html": "<em>Kuna {{GRAMMAR:inessive|{{SITENAME}}}} on toor-HTML lubatud ja osa seansiandmeid läks kaotsi, siis on JavaScripti põhiste rünnakute vastase abinõuna eelvaade peidetud.</em>\n\n<strong>Kui see eelvaatekatse on õigustatud, proovi palun uuesti.</strong>\nKui see ikka ei tööta, proovi [[Special:UserLogout|logida välja]] ja tagasi sisse.",
+ "expand_templates_preview_fail_html_anon": "<em>Kuna {{GRAMMAR:inessive|{{SITENAME}}}} on toor-HTML lubatud ja sa pole sisse logitud, siis on JavaScripti põhiste rünnakute vastase abinõuna eelvaade peidetud.</em>\n\n<strong>Kui see eelvaatekatse on õigustatud, [[Special:UserLogin|logi]] palun sisse ja proovi uuesti.</strong>",
"pagelanguage": "Lehekülje keele valik",
"pagelang-name": "Lehekülg",
"pagelang-language": "Keel",
@@ -3112,8 +3215,58 @@
"log-name-pagelang": "Keele muutmise logi",
"log-description-pagelang": "Siia on logitud lehekülgede keele muutmised.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" keelt: $4 → $5.",
- "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
- "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
+ "default-skin-not-found": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
+ "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus, milleks muutuja <code dir=\"ltr\">$wgDefaultSkin</code> järgi on <code>$1</code>, pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code dir=\"ltr\">skins/</code>;\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org-ist] kindla kujunduse lintarhiivi alla laadida;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (lubatud)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''keelatud''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''keelatud''')",
+ "mediastatistics": "Meediafailide arvandmestik",
+ "mediastatistics-summary": "Arvandmed üles laaditud failitüüpide kohta. See käib ainult failide viimaste versioonide kohta. Vanu ja kustutatud versioone pole arvesse võetud.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 bait|$1 baiti}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME tüüp",
+ "mediastatistics-table-extensions": "Võimalikud laiendid",
+ "mediastatistics-table-count": "Failide arv",
+ "mediastatistics-table-totalbytes": "Suurus kokku",
+ "mediastatistics-header-unknown": "Teadmata",
+ "mediastatistics-header-bitmap": "Rasterpildid",
+ "mediastatistics-header-drawing": "Vektorjoonised",
+ "mediastatistics-header-audio": "Helifailid",
+ "mediastatistics-header-video": "Videofailid",
+ "mediastatistics-header-multimedia": "Rikasmeedia failid",
+ "mediastatistics-header-office": "Kontoritarkvara failid",
+ "mediastatistics-header-text": "Tekstifailid",
+ "mediastatistics-header-executable": "Täitmisfailid",
+ "mediastatistics-header-archive": "Tihendatud vormingud",
+ "json-warn-trailing-comma": "$1 lõpukoma eemaldati JSON-ist.",
+ "json-error-unknown": "JSON-iga oli probleem. Tõrge: $1",
+ "json-error-depth": "Suurim võimalik pinusügavus on ületatud.",
+ "json-error-state-mismatch": "Vigane või väärdunud JSON",
+ "json-error-ctrl-char": "Juhtmärgi tõrge; see võib olla valesti kodeeritud",
+ "json-error-syntax": "Süntaksitõrge",
+ "json-error-utf8": "Väärdunud UTF-8 märgid; need võivad olla valesti kodeeritud",
+ "json-error-recursion": "Vähemalt üks rekursiivne viide kodeeritavas väärtuses",
+ "json-error-inf-or-nan": "Vähemalt üks NAN- või INF-väärtus kodeeritavas väärtuses",
+ "json-error-unsupported-type": "Ette tuli tüüp, mille väärtust ei saa kodeerida",
+ "headline-anchor-title": "Lingi selle alaosa juurde",
+ "special-characters-group-latin": "Ladina",
+ "special-characters-group-latinextended": "Ladina (laiendatud)",
+ "special-characters-group-ipa": "IPA-laiendid",
+ "special-characters-group-symbols": "Sümbolid",
+ "special-characters-group-greek": "Kreeka",
+ "special-characters-group-cyrillic": "Kirillitsa",
+ "special-characters-group-arabic": "Araabia",
+ "special-characters-group-arabicextended": "Araabia (laiendatud)",
+ "special-characters-group-persian": "Pärsia",
+ "special-characters-group-hebrew": "Heebrea",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tamili",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singali",
+ "special-characters-group-gujarati": "Gudžarati",
+ "special-characters-group-devanagari": "Devanaagari",
+ "special-characters-group-thai": "Tai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmeeri",
+ "special-characters-title-endash": "mõttekriips",
+ "special-characters-title-emdash": "pikk mõttekriips",
+ "special-characters-title-minus": "miinusmärk"
}
diff --git a/languages/i18n/eu.json b/languages/i18n/eu.json
index a235031d..3bd40854 100644
--- a/languages/i18n/eu.json
+++ b/languages/i18n/eu.json
@@ -20,11 +20,13 @@
"පසිඳු කාවින්ද",
"아라",
"Joxemai",
- "Arkaitz Barnetik"
+ "Arkaitz Barnetik",
+ "Sator",
+ "Macofe"
]
},
- "tog-underline": "Loturak azpimarratu:",
- "tog-hideminor": "Azken aldaketetan aldaketa txikiak ezkutatu",
+ "tog-underline": "Azpimarratu loturak:",
+ "tog-hideminor": "Ezkutatu azken aldaketetan aldaketa txikiak",
"tog-hidepatrolled": "Ezkutatu patruilatutako aldaketa azken aldaketetan",
"tog-newpageshidepatrolled": "Ezkutatu patruilatutako orriak, orri-zerrenda berritik",
"tog-extendwatchlist": "Jarraipen-zerrenda zabaldu aldaketa guztiak ikusteko, ez bakarrik azken aldaketak",
@@ -47,7 +49,7 @@
"tog-shownumberswatching": "Jarraitzen duen erabiltzaile kopurua erakutsi",
"tog-oldsig": "Egungo sinadura:",
"tog-fancysig": "Sinadura wikitestu gisa tratatu (lotura automatikorik gabe)",
- "tog-uselivepreview": "Zuzeneko aurrebista erakutsi (Proba fasean)",
+ "tog-uselivepreview": "Zuzeneko aurrebista erabili",
"tog-forceeditsummary": "Aldaketaren laburpena zuri uzterakoan ohartarazi",
"tog-watchlisthideown": "Segimendu zerrendan nire aldaketak ezkutatu",
"tog-watchlisthidebots": "Segimendu zerrendan bot-en aldaketak ezkutatu",
@@ -83,54 +85,54 @@
"thu": "Osg",
"fri": "Osr",
"sat": "Lar",
- "january": "Urtarrila",
- "february": "Otsaila",
- "march": "Martxoa",
- "april": "Apirila",
- "may_long": "Maiatza",
- "june": "Ekaina",
- "july": "Uztaila",
- "august": "Abuztua",
- "september": "Iraila",
- "october": "Urria",
- "november": "Azaroa",
- "december": "Abendua",
- "january-gen": "Urtarril",
- "february-gen": "Otsail",
- "march-gen": "Martxo",
- "april-gen": "Apiril",
- "may-gen": "Maiatz",
- "june-gen": "Ekain",
- "july-gen": "Uztail",
- "august-gen": "Abuztu",
- "september-gen": "Irail",
- "october-gen": "Urri",
- "november-gen": "Azaro",
- "december-gen": "Abendu",
- "jan": "Urt",
- "feb": "Ots",
- "mar": "Mar",
- "apr": "Api",
- "may": "Mai",
- "jun": "Eka",
- "jul": "Uzt",
- "aug": "Abu",
- "sep": "Ira",
- "oct": "Urr",
- "nov": "Aza",
- "dec": "Abe",
- "january-date": "Urtarrilaren $1",
- "february-date": "Otsailaren $1",
- "march-date": "Martxoaren $1",
- "april-date": "Apirilaren $1",
- "may-date": "Maiatzaren $1",
- "june-date": "Ekainaren $1",
- "july-date": "Uztailaren $1",
- "august-date": "Abuztuaren $1",
- "september-date": "Irailaren $1",
- "october-date": "Urriaren $1",
- "november-date": "Azaroaren $1",
- "december-date": "Abenduaren $1",
+ "january": "urtarrila",
+ "february": "otsaila",
+ "march": "martxoa",
+ "april": "apirila",
+ "may_long": "maiatza",
+ "june": "ekaina",
+ "july": "uztaila",
+ "august": "abuztua",
+ "september": "iraila",
+ "october": "urria",
+ "november": "azaroa",
+ "december": "abendua",
+ "january-gen": "urtarrilak",
+ "february-gen": "otsailak",
+ "march-gen": "martxoak",
+ "april-gen": "apirilak",
+ "may-gen": "maiatzak",
+ "june-gen": "ekainak",
+ "july-gen": "uztailak",
+ "august-gen": "abuztuak",
+ "september-gen": "irailak",
+ "october-gen": "urriak",
+ "november-gen": "azaroak",
+ "december-gen": "abenduak",
+ "jan": "urt",
+ "feb": "ots",
+ "mar": "mar",
+ "apr": "api",
+ "may": "mai",
+ "jun": "eka",
+ "jul": "uzt",
+ "aug": "abu",
+ "sep": "ira",
+ "oct": "urr",
+ "nov": "aza",
+ "dec": "abe",
+ "january-date": "urtarrilak $1",
+ "february-date": "otsailak $1",
+ "march-date": "martxoak $1",
+ "april-date": "apirilak $1",
+ "may-date": "maiatzak $1",
+ "june-date": "ekainak $1",
+ "july-date": "uztailak $1",
+ "august-date": "abuztuak $1",
+ "september-date": "irailak $1",
+ "october-date": "urriak $1",
+ "november-date": "azaroak $1",
+ "december-date": "abenduak $1",
"pagecategories": "{{PLURAL:$1|Kategoria|Kategoriak}}",
"category_header": "«$1» kategoriako artikuluak",
"subcategories": "Azpikategoriak",
@@ -219,6 +221,7 @@
"otherlanguages": "Erdaretan",
"redirectedfrom": "($1(e)tik birzuzenduta)",
"redirectpagesub": "Birbideratze orria",
+ "redirectto": "Hona birzuzentzen du:",
"lastmodifiedat": "Orrialdearen azken aldaketa: $2, $1.",
"viewcount": "Orrialde hau {{PLURAL:$1|behin|$1 aldiz}} bisitatu da.",
"protectedpage": "Babestutako orrialdea",
@@ -229,6 +232,7 @@
"pool-timeout": "Lock-a itxoiten denbora amaitu da",
"pool-queuefull": "Prozesuen zerrenda beteta dago",
"pool-errorunknown": "Errore ezezaguna",
+ "poolcounter-usage-error": "Erabilera-errorea: $1",
"aboutsite": "{{SITENAME}} guneari buruz",
"aboutpage": "Project:Honi_buruz",
"copyright": "Eduki guztia $1(r)en babespean dago, ez bada kontrakoa esaten.",
@@ -238,6 +242,7 @@
"disclaimers": "Mugaketak",
"disclaimerpage": "Project:Erantzukizunen mugaketa orokorra",
"edithelp": "Aldaketak egiteko laguntza",
+ "helppage-top-gethelp": "Laguntza",
"mainpage": "Azala",
"mainpage-description": "Azala",
"policy-url": "Project:Politikak",
@@ -269,6 +274,7 @@
"hidetoc": "ezkutatu",
"collapsible-collapse": "Itxi",
"collapsible-expand": "Zabaldu",
+ "confirmable-confirm": "Ziur zaude?",
"confirmable-yes": "Bai",
"confirmable-no": "Ez",
"thisisdeleted": "$1 ikusi edo leheneratu?",
@@ -319,6 +325,8 @@
"filerenameerror": "Ezin izan zaio \"$1\" fitxategiari \"$2\" izen berria eman.",
"filedeleteerror": "Ezin izan da \"$1\" fitxategia ezabatu.",
"directorycreateerror": "Ezin izan da \"$1\" karpeta sortu.",
+ "directoryreadonlyerror": "\"$1\" direktorioa soilik irakurtzekoa da.",
+ "directorynotreadableerror": "\"$1\" direktorioa ez da irakurgarria.",
"filenotfound": "Ezin izan da \"$1\" fitxategia aurkitu.",
"unexpected": "Espero ez zen balioa: \"$1\"=\"$2\".",
"formerror": "Errorea: ezin izan da formularioa bidali",
@@ -396,6 +404,8 @@
"gotaccountlink": "Saioa hasi",
"userlogin-resetlink": "Saioa hasteko datuak ahaztu dituzu?",
"userlogin-resetpassword-link": "Zure pasahitza ahaztu duzu?",
+ "userlogin-loggedin": "Dagoeneko izena emana zaude {{GENDER:$1|$1}}.\nBeheko formularioa erabil ezazu beste erabiltzaile baten izenean sartzeko.",
+ "userlogin-createanother": "Beste kontu bat sortu",
"createacct-emailrequired": "E-posta helbidea",
"createacct-emailoptional": "E-posta helbidea (hautazkoa)",
"createacct-email-ph": "Sartu zure e-posta helbidea",
@@ -460,6 +470,8 @@
"loginlanguagelabel": "Hizkuntza: $1",
"suspicious-userlogout": "Saioa amaitzeko egin duzun eskaria ukatu da. Izan ere, ematen du eskari hori gaizki dabilen nabigatzaile edo cache proxy batek bidali duela.",
"createacct-another-realname-tip": "Benetako izena hautazkoa da.\nEmatea erabakitzen baduzu hori erabiliko da lanaren atribuzioa egiterako garaian.",
+ "pt-login": "Saioa hasi",
+ "pt-login-button": "Saioa hasi",
"pt-createaccount": "Sortu kontua",
"pt-userlogout": "Saioa itxi",
"php-mail-error-unknown": "PHPren mail() funtzioan arazo ezezagun bat egon da.",
@@ -500,7 +512,6 @@
"passwordreset-emailsent": "Pasahitza berrezartzeko e-posta bidali da.",
"passwordreset-emailsent-capture": "Pasahitza berrezartzeko e-posta bat bidali dizugu, behean erakusten dena.",
"changeemail": "Aldatu e-mail helbidea",
- "changeemail-header": "Aldatu kontuko e-posta helbidea",
"changeemail-text": "Bete ezazu formulario hau e-posta helbidea aldatzeko. Zure pasahitza sartu beharko duzu aldaketa hau baieztatzeko.",
"changeemail-no-info": "Orrialde honetara zuzenean sartzeko izena eman behar duzu.",
"changeemail-oldemail": "Egungo e-mail helbidea:",
@@ -508,7 +519,6 @@
"changeemail-none": "(bat ere ez)",
"changeemail-password": "Zure {{SITENAME}}ko pasahitza:",
"changeemail-submit": "E-posta aldatu",
- "changeemail-cancel": "Utzi",
"resettokens": "Tokenak berrezarri",
"resettokens-no-tokens": "Ez dago tokenik berrezartzeko.",
"resettokens-legend": "Tokenak berrezarri",
@@ -628,13 +638,16 @@
"edit-gone-missing": "Ezin da orria eguneratu. Ezabatu omen dute.",
"edit-conflict": "Aldaketa gatazka.",
"edit-no-change": "Zure edizioa baztertu da testua aldatu ez duzulako.",
+ "postedit-confirmation-created": "Orrialdea sortu da.",
+ "postedit-confirmation-restored": "Orrialdea leheneratua izan da.",
"postedit-confirmation-saved": "Zure aldaketa gorde da.",
"edit-already-exists": "Ezin izan da orri berria sortu.\nJada existitzen da.",
"defaultmessagetext": "Testu lehenetsia",
"content-failed-to-parse": "Ezin izan da $2(r)en edukia parseatu $1 modeloarentzat: $3",
"invalid-content-data": "Eduki datu baliogabea",
"content-not-allowed-here": "\"$1\" edukia ez dago baimendua [[$2]] orrialdean",
- "editwarning-warning": "Orrialde honetatik irteten bazara, egindako aldaketak galdu egingo dira.\nSaioa hasi baduzu, mezu hau kendu dezakezu zure hobespenen orrialdeko \"Aldatzen\" atalean.",
+ "editwarning-warning": "Orri honetatik irteten bazara, egindako aldaketak galdu egingo dira, beharbada.\nSaioa hasi baduzu, mezu hau kendu dezakezu zure hobespenen orriko «{{int:prefs-editing}}» atalean.",
+ "editpage-notsupportedcontentformat-title": "Eduki formatu hori ez da onartzen",
"content-model-wikitext": "wikitestua",
"content-model-text": "testu laua",
"content-model-javascript": "JavaScript",
@@ -768,7 +781,6 @@
"mergehistory-same-destination": "Jatorri eta helmugako orriak ezin dira berdinak izan",
"mergehistory-reason": "Arrazoia:",
"mergelog": "Bateratze erregistroa",
- "pagemerge-logentry": "[[$1]] [[$2]](r)ekin batu da ($3(e)raino berrikuspenak)",
"revertmerge": "Bereiztu",
"mergelogpagetext": "Jarraian dagoen zerrendak orrialde baten historiatik beste batera egindako azken bateratzeak erakusten ditu.",
"history-title": "«$1» orriaren historia berrikuspena",
@@ -805,6 +817,7 @@
"search-result-category-size": "{{PLURAL:$1|kide 1|$1 kide}} ({{PLURAL:$2|azpikategoria 1|$2 azpikategoria}}, {{PLURAL:$3|fitxategi 1|$3 fitxategi}})",
"search-redirect": "(«$1» orritik birbideratua)",
"search-section": "($1 atala)",
+ "search-category": "($1 kategoria)",
"search-suggest": "$1 esan nahi zenuen",
"search-interwiki-caption": "Beste proiektuak",
"search-interwiki-default": "$1(r)en emaitzak:",
@@ -813,7 +826,6 @@
"searchrelated": "erlazionatua",
"searchall": "guztia",
"showingresults": "Jarraian {{PLURAL:$1|emaitza '''1''' ikus daiteke|'''$1''' emaitza ikus daitezke}}, #'''$2'''.etik hasita.",
- "showingresultsheader": "{{PLURAL:$5|'''$1'''(e)tik '''$3''' emaitza|'''$1 - $2'''(e)tik '''$3''' emaitza}} '''$4'''(r)entzat",
"search-nonefound": "Ez dago eskaerarekin bat egiten duten emaitzarik.",
"powersearch-legend": "Bilaketa aurreratua",
"powersearch-ns": "Bilatu honako izen-tartetan:",
@@ -835,6 +847,8 @@
"prefs-personal": "Erabiltzaile profila",
"prefs-rc": "Azken aldaketak",
"prefs-watchlist": "Jarraipen zerrenda",
+ "prefs-editwatchlist": "Aldatu jarraipen-zerrenda",
+ "prefs-editwatchlist-clear": "Garbitu zure jarraipen-zerrenda",
"prefs-watchlist-days": "Jarraipen zerrendan erakutsi beharreko egun kopurua:",
"prefs-watchlist-days-max": "Gehienez $1 {{PLURAL:$1|egun|egun}}",
"prefs-watchlist-edits": "Jarraipen zerrendan erakutsi beharreko aldaketa kopurua:",
@@ -1042,10 +1056,12 @@
"action-createpage": "orrialdeak sortu",
"action-createtalk": "eztabaida orrialdeak sortu",
"action-createaccount": "lankide hau sortu",
+ "action-history": "orrialde honen historia ikusi",
"action-minoredit": "markatu aldaketa hau txikitzat",
"action-move": "orri hau mugitu",
"action-move-subpages": "orri hau eta haren azpiorriak mugitu",
"action-move-rootuserpages": "mugitu lankidearen oinarri orrialdeak",
+ "action-move-categorypages": "kategoria orrialdeak mugitu",
"action-movefile": "fitxategi hau mugitu",
"action-upload": "fitxategi hau igo",
"action-reupload": "dagoeneko baden fitxategi honen gainean idatzi",
@@ -1093,11 +1109,23 @@
"rcnotefrom": "Jarraian azaltzen diren aldaketak data honetatik aurrerakoak dira: <b>$2</b> (gehienez <b>$1</b> erakusten dira).",
"rclistfrom": "Erakutsi $3 $2 ondorengo aldaketa berriak",
"rcshowhideminor": "$1 aldaketa txikiak",
+ "rcshowhideminor-show": "Erakutsi",
+ "rcshowhideminor-hide": "Ezkutatu",
"rcshowhidebots": "$1 bot-ak",
- "rcshowhideliu": "$1 erabiltzaile erregistratuak",
+ "rcshowhidebots-show": "Erakutsi",
+ "rcshowhidebots-hide": "Ezkutatu",
+ "rcshowhideliu": "$1 erregistratutako erabiltzaileak",
+ "rcshowhideliu-show": "Erakutsi",
+ "rcshowhideliu-hide": "Ezkutatu",
"rcshowhideanons": "$1 erabiltzaile anonimoak",
+ "rcshowhideanons-show": "Erakutsi",
+ "rcshowhideanons-hide": "Ezkutatu",
"rcshowhidepatr": "$1 patruilatutako aldaketak",
+ "rcshowhidepatr-show": "Erakutsi",
+ "rcshowhidepatr-hide": "Ezkutatu",
"rcshowhidemine": "$1 nire ekarpenak",
+ "rcshowhidemine-show": "Erakutsi",
+ "rcshowhidemine-hide": "Ezkutatu",
"rclinks": "Erakutsi azken $2 egunetako $1 aldaketak<br />$3",
"diff": "ezb",
"hist": "hist",
@@ -1132,9 +1160,9 @@
"uploaderror": "Errorea igotzerakoan",
"upload-recreate-warning": "'''Kontuz: Izen hori duen fitxategi bat berrizendatua edo mugitua izan da.'''",
"uploadtext": "Fitxategiak igotzeko beheko formularioa erabil dezakezu. \nAurretik igotako irudiak ikusi edo bilatzeko [[Special:FileList|igotako fitxategien zerrendara]] jo. Igoerak [[Special:Log/upload|igoera erregistroan]] ikus daitezke eta ezabatutakoak [[Special:Log/delete|ezabaketa erregistroan]] zerrendatzen dira.\n\nOrrialde baten irudi bat txertatzeko, erabili kode hauetako bat:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''',\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' irudia zuzenean erabiltzeko.",
- "upload-permitted": "Baimendutako fitxategi motak: $1.",
- "upload-preferred": "Fitxategi mota hobetsiak: $1.",
- "upload-prohibited": "Debekatutako fitxategi motak: $1.",
+ "upload-permitted": "Baimendutako fitxategi-{{PLURAL:$2|mota|motak}}: $1.",
+ "upload-preferred": "Hobetsitako fitxategi-{{PLURAL:$2|mota|motak}}: $1.",
+ "upload-prohibited": "Debekatutako fitxategi-{{PLURAL:$2|mota|motak}}: $1.",
"uploadlogpage": "Igoera erregistroa",
"uploadlogpagetext": "Jarraian, igotako azken fitxategien zerrenda ageri da.\nIkus ezazu [[Special:NewFiles|fitxategi berrien galeria]], irudizkoagoa den ikuspegi orokor bat izateko.",
"filename": "Fitxategi izena",
@@ -1316,6 +1344,7 @@
"sharedupload": "Elkarbanatutako fitxategi hau $1-(e)ko igoera bat da eta beste proiektuek ere erabil dezakete.",
"sharedupload-desc-here": "Fitxategi hau $1-(e)koa da eta beste proeiktuetan erabilia izan liteke.\nBere [$2 fitxategiaren deskribapen orrialdea] behean dago.",
"filepage-nofile": "Izen horrekin ez dago fitxategirik.",
+ "filepage-nofile-link": "Ez dago fitxategirik izen honekin, baina [$1 igo dezakezu].",
"uploadnewversion-linktext": "Fitxategi honen bertsio berri bat igo",
"shared-repo-from": "$1-tik",
"shared-repo": "elkarbanatutako biltegia",
@@ -1357,12 +1386,12 @@
"randomincategory": "Kategoriako ausazko orrialdea",
"randomincategory-invalidcategory": "\"$1\" ez da kategoria izen baliagarri bat.",
"randomincategory-nopages": "Ez dago orrialderik [[:Category:$1|$1]] kategorian.",
+ "randomincategory-category": "Kategoria:",
"randomredirect": "Ausazko birbideratzea",
"randomredirect-nopages": "Ez dago birzuzenketarik \"$1\" izen-tartean.",
"statistics": "Estatistikak",
"statistics-header-pages": "Orrialdeen estatistikak",
"statistics-header-edits": "Aldaketen estatistikak",
- "statistics-header-views": "Ikustaldien estatistikak",
"statistics-header-users": "Erabiltzaile estatistikak",
"statistics-header-hooks": "Beste estatistikak",
"statistics-articles": "Edukiak dituzten orrialdeak",
@@ -1371,12 +1400,9 @@
"statistics-files": "Igotako fitxategiak",
"statistics-edits": "{{SITENAME}} sortu zenetik eginiko aldaketa kopurua",
"statistics-edits-average": "Bataz-besteko aldaketak orrialdeko",
- "statistics-views-total": "Ikusitako orrialdeak guztira",
- "statistics-views-peredit": "Ikusitako orrialdeak aldaketa bakoitzeko",
"statistics-users": "Izen-emandako [[Special:ListUsers|lankideak]]",
"statistics-users-active": "Lankide aktiboak",
"statistics-users-active-desc": "Aurreko {{PLURAL:$1|egunean|egunetan}} jardueraren bat gauzatu duten erabiltzaileak",
- "statistics-mostpopular": "Orri bisitatuenak",
"pageswithprop": "Orrialde propietatea duten orrialdeak",
"pageswithprop-legend": "Orrialde propietatea duten orrialdeak",
"pageswithprop-prop": "Ezaugarriaren izena:",
@@ -1415,7 +1441,6 @@
"uncategorizedtemplates": "Sailkatu gabeko txantiloiak",
"unusedcategories": "Erabili gabeko kategoriak",
"unusedimages": "Erabili gabeko fitxategiak",
- "popularpages": "Orrialde bisitatuenak",
"wantedcategories": "Eskatutako kategoriak",
"wantedpages": "Eskatutako orrialdeak",
"wantedpages-badtitle": "Izenburu okerra hautatutako emaitzetan: $1",
@@ -1423,7 +1448,7 @@
"wantedtemplates": "Eskatutako txantiloiak",
"mostlinked": "Gehien lotutako orrialdeak",
"mostlinkedcategories": "Gehien lotutako kategoriak",
- "mostlinkedtemplates": "Txantiloi erabilienak",
+ "mostlinkedtemplates": "Orrialde transkluituenak",
"mostcategories": "Sailkapenean kategoria gehien dituzten orrialdeak",
"mostimages": "Gehien lotutako irudiak",
"mostinterwikis": "Interwiki gehien dituzten orrialdeak",
@@ -1439,6 +1464,9 @@
"protectedpages-indef": "Babes mugagabeak bakarrik",
"protectedpages-cascade": "Kaskada moduko babesak bakarrik",
"protectedpagesempty": "Ez dago parametro horiek dituen babesturiko orrialderik oraintxe.",
+ "protectedpages-reason": "Arrazoia",
+ "protectedpages-unknown-timestamp": "Ezezaguna",
+ "protectedpages-unknown-performer": "Erabiltzaile ezezaguna",
"protectedtitles": "Babestutako tituluak",
"protectedtitlesempty": "Ez dago parametro horiek dituen babesturiko izenbururik oraintxe.",
"listusers": "Erabiltzaileen zerrenda",
@@ -1462,9 +1490,10 @@
"pager-older-n": "{{PLURAL:$1|zaharragoa den 1|zaharragoak diren $1}}",
"suppress": "Gain-ikuspena",
"querypage-disabled": "Orrialde berezi hau desgaituta dago funtzionamendu arrazoiengatik.",
+ "apihelp-no-such-module": "Ez da \"$1\" modulua aurkitu.",
"booksources": "Iturri liburuak",
"booksources-search-legend": "Liburuen bilaketa",
- "booksources-go": "Joan",
+ "booksources-search": "Bilatu",
"booksources-text": "Jarraian liburu berri eta erabiliak saltzen dituzten guneetarako loturen zerrenda bat ikus dezakezu, bilatzen ari zaren liburu horientzako informazio gehigarria aurkitzeko lagungarria izan daitekeena:",
"booksources-invalid-isbn": "Badirudi emandako ISBNa ez dela baliagarria; egiazta ezazu ea akatsik egin duzun jatorrizko iturritik kopiatzean.",
"specialloguserlabel": "Egilea:",
@@ -1577,7 +1606,7 @@
"wlheader-enotif": "Posta bidezko ohartarazpena gaituta dago.",
"wlheader-showupdated": "Bisitatu zenituen azken alditik aldaketak izan dituzten orrialdeak '''beltzez''' nabarmenduta daude.",
"wlnote": "Jarraian {{PLURAL:$2|ikus daiteke azken orduko|ikus daitezke azken '''$2''' orduetako}} azken {{PLURAL:$1|aldaketa|'''$1''' aldaketak}}, $3, $4 gisa.",
- "wlshowlast": "Erakutsi azken $1 orduak $2 egunak $3",
+ "wlshowlast": "Erakutsi azken $1 orduak, azken $2 egunak",
"watchlist-options": "Jarraitze-zerrendaren aukerak",
"watching": "Zerrendan gehitzen...",
"unwatching": "Zerrendatik kentzen...",
@@ -1623,7 +1652,6 @@
"delete-toobig": "Orrialde honek aldaketa historia luzea du, {{PLURAL:$1|berrikuspen batetik|$1 berrikuspenetik}} gorakoa.\nOrrialde horien ezabaketa mugatua dago {{SITENAME}}n ezbeharrak saihesteko.",
"delete-warning-toobig": "Orrialde honek aldaketa historia luzea du, {{PLURAL:$1|berrikuspen batetik|$1 berrikuspenetik}} gorakoa.\nEzabatzeak ezbeharrak eragin ditzake {{SITENAME}}ren datu-basean;\nkontu izan.",
"rollback": "Desegin aldaketak",
- "rollback_short": "Desegin",
"rollbacklink": "desegin",
"rollbacklinkcount": "desegin {{PLURAL:$1|edizio bat|$1 edizio}}",
"rollbacklinkcount-morethan": "desegin {{PLURAL:$1|edizio bat|$1 edizio}} baino gehiago",
@@ -1640,7 +1668,7 @@
"protectedarticle": "\"[[$1]]\" babestu da\"",
"modifiedarticleprotection": "\"[[$1]]\"(r)en babes maila aldatu da",
"unprotectedarticle": "\"[[$1]]\"-(r)i babesa kendu zaio",
- "movedarticleprotection": "babes hobespenak \"[[$2]]\"tik \"[[$1]]\"(e)ra mugitu dira",
+ "movedarticleprotection": "babes hobespenak «[[$2]]» orritik «[[$1]]» orrira aldatu dira",
"protect-title": "«$1» babesten",
"protect-title-notallowed": "\"$1\"en babes maila ikusi",
"prot_1movedto2": "«[[$1]]» orria «[[$2]]» izenera aldatu da",
@@ -1796,6 +1824,7 @@
"badipaddress": "Baliogabeko IP helbidea",
"blockipsuccesssub": "Blokeoa burutu da",
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] blokeatua izan da.<br />\nIkus [[Special:BlockList|blokeoen zerrenda]] blokeoak aztertzeko.",
+ "ipb-confirmaction": "Ziur bazaude egin nahi duzula, marka ezazu behean dagoen \"{{int:ipb-confirm}}\" eremua, mesedez.",
"ipb-edit-dropdown": "Blokeatzeko arrazoiak aldatu",
"ipb-unblock-addr": "$1 lankide edo IP helbideari blokeoa baliogabetu",
"ipb-unblock": "Erabiltzaile izen edo IP helbide bati blokeoa kendu",
@@ -1897,6 +1926,7 @@
"movenotallowedfile": "Ez duzu fitxategiak mugitzeko eskumenik.",
"cant-move-user-page": "Ez duzu lankide orrialdeak mugitzeko eskumenik (azpiorrialdeetatik at).",
"cant-move-to-user-page": "Ez duzu orrialde bat lankide orrialde batera mugitzeko eskumenik (lankide azpiorrialde batera izan ezik).",
+ "cant-move-to-category-page": "Ez duzu baimenik orrialde bat kategoria-orrialde batera mugitzeko.",
"newtitle": "Izenburu berria",
"move-watch": "Orrialde hau jarraitu",
"movepagebtn": "Mugitu orria",
@@ -1976,6 +2006,7 @@
"thumbnail-temp-create": "Ezin izan da behin-behineko iruditxoa sortu",
"thumbnail-dest-create": "Ezin izan da iruditxoa gorde helburuan",
"thumbnail_invalid_params": "Irudi txikiaren ezarpenak ez dira baliagarriak",
+ "thumbnail_toobigimagearea": "$1 baino gehiagoko fitxategia",
"thumbnail_dest_directory": "Ezinezkoa izan da helburu direktorioa sortu",
"thumbnail_image-type": "Irudi mota ez babestua",
"thumbnail_gd-library": "GD liburutegiaren konfigurazio osagabea: $1 funtzioa falta da",
@@ -2022,18 +2053,15 @@
"import-rootpage-nosubpage": "Jatorri orrialdearen «$1» izen-tarteak ez du baimentzen azpi-orrialderik.",
"importlogpage": "Inportazio erregistroa",
"importlogpagetext": "Beste wiki batzutatik historial eta guzti egindako orrialdeen inportazio administratiboak.",
- "import-logentry-upload": "[[$1]] igoera bitartez inportatu da",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}}",
- "import-logentry-interwiki": "$1 wiki artean mugitu da",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}} $2-(e)tik",
"javascripttest": "JavaScript frogatzen",
- "javascripttest-title": "$1 frogak egiten",
"javascripttest-pagetext-noframework": "Orrialde hau JavaScript frogak egiteko gordeta dago.",
"javascripttest-pagetext-unknownframework": "Froga eremu ez-ezaguna \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Ekintza ezezaguna \"$1\".",
"javascripttest-pagetext-frameworks": "Mesedez, aukera ezazu froga eremu hauetako bat: $1",
"javascripttest-pagetext-skins": "Aukeratu frogak egiteko itxura bat:",
"javascripttest-qunit-intro": "Ikusi [$1 frogen dokumentazioa] mediawiki.org orrialdean.",
- "javascripttest-qunit-heading": "MediWiki JavaScript QUnit froga taldea",
"tooltip-pt-userpage": "Nire lankide orria",
"tooltip-pt-anonuserpage": "Zure IParen lankide orrialdea",
"tooltip-pt-mytalk": "Nire eztabaida orria",
@@ -2072,6 +2100,7 @@
"tooltip-feed-atom": "Orrialde honen atom jarioa",
"tooltip-t-contributions": "Lankide honen ekarpen zerrenda ikusi",
"tooltip-t-emailuser": "Lankide honi e-posta mezua bidali",
+ "tooltip-t-info": "Orrialde honi buruzko informazio gehiago",
"tooltip-t-upload": "Irudiak edo media fitxategiak igo",
"tooltip-t-specialpages": "Orri berezi guztien zerrenda",
"tooltip-t-print": "Orrialde honen bertsio inprimagarria",
@@ -2135,7 +2164,6 @@
"pageinfo-robot-policy": "Errobotak indexatzea egiten",
"pageinfo-robot-index": "Baimendua",
"pageinfo-robot-noindex": "Debekatua",
- "pageinfo-views": "Bistaratze-kopurua",
"pageinfo-watchers": "Orriaren jarraitzaileen kopurua",
"pageinfo-few-watchers": "{{PLURAL:$1|Ikusle bat|$1 ikusle}} baino gutxiago",
"pageinfo-redirects-name": "Orri honetara dakarten birzuzenketak",
@@ -2213,6 +2241,7 @@
"newimages-summary": "Orrialde berezi honek igotako azkeneko fitxategiak erakusten ditu.",
"newimages-legend": "Iragazkia",
"newimages-label": "Fitxategia (edo bere zati bat):",
+ "newimages-showbots": "Erakutsi botek igotako fitxategiak",
"noimages": "Ez dago ezer ikusteko.",
"ilsubmit": "Bilatu",
"bydate": "dataren arabera",
@@ -2603,7 +2632,6 @@
"exif-urgency-low": "Baxua ($1)",
"exif-urgency-high": "Altua ($1)",
"exif-urgency-other": "Definitutako lehentasuna ($1)",
- "watchlistall2": "guztiak",
"namespacesall": "guztiak",
"monthsall": "guztiak",
"confirmemail": "E-posta helbidea egiaztatu",
@@ -2632,7 +2660,9 @@
"confirm-purge-top": "Orrialde honen katxea ezabatu?",
"confirm-purge-bottom": "Orrialdea purgatzean katxea ezabatzen du eta orrialdearen bertsiorik eguneratuena erakustera behartzen du.",
"confirm-watch-button": "Ados",
+ "confirm-watch-top": "Orrialde hau zure jarraipen-zerrendara gehitu?",
"confirm-unwatch-button": "Ados",
+ "confirm-unwatch-top": "Orrialde hau zure jarraipen-zerrendatik kendu?",
"quotation-marks": "«$1»",
"imgmultipageprev": "&larr; aurreko orrialdea",
"imgmultipagenext": "hurrengo orrialdea &rarr;",
@@ -2670,11 +2700,18 @@
"watchlistedit-raw-done": "Zure jarraipen zerrenda berritu da.",
"watchlistedit-raw-added": "{{PLURAL:$1|Titulu 1 gehitu da|$1 gehitu dira}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|Izenburu 1|$1 izenburu}} ezabatu dira:",
+ "watchlistedit-clear-title": "Garbitutako jarraipen-zerrenda",
+ "watchlistedit-clear-legend": "Garbitu jarraipen-zerrenda",
+ "watchlistedit-clear-explain": "Izenburu guztiak zure jarraipen-zerrendatik kenduko dira",
+ "watchlistedit-clear-titles": "Izenburuak:",
+ "watchlistedit-clear-submit": "Garbitu jarraipen zerrenda (Behin betiko da!)",
+ "watchlistedit-clear-done": "Zure jarraipen-zerrenda garbitu da.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|Izenburu 1 kendu da|$1 izenburu kendu dira}}:",
+ "watchlisttools-clear": "Garbitu jarraipen-zerrenda",
"watchlisttools-view": "Aldaketa garrantzitsuak ikusi",
"watchlisttools-edit": "Zerrenda ikusi eta aldatu",
"watchlisttools-raw": "Zerrenda idatziz aldatu",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|eztabaida]])",
- "unknown_extension_tag": "\"$1\" luzapen etiketa ezezaguna",
"duplicate-defaultsort": "Adi: Berezko \"$2\" antolatzeak aurreko berezko \"$1\" antolatzea gainditzen du.",
"version": "Bertsioa",
"version-extensions": "Instalatutako luzapenak",
@@ -2690,7 +2727,8 @@
"version-parser-function-hooks": "Parser funtzio estentsioak",
"version-hook-name": "Estentsioaren izena",
"version-hook-subscribedby": "Hauen harpidetzarekin",
- "version-version": "(Bertsioa $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[izenik gabe]",
"version-license": "MediaWiki Lizentzia",
"version-ext-license": "Lizentzia",
"version-ext-colheader-name": "Luzapena",
@@ -2708,6 +2746,7 @@
"version-entrypoints": "Sarrera puntuko URLa",
"version-entrypoints-header-entrypoint": "Sarrera puntua",
"version-entrypoints-header-url": "URL",
+ "version-libraries-version": "Bertsioa",
"redirect": "Birzuzendu fitxategi, lankide edo berrikuspen IDaren arabera",
"redirect-legend": "Orrialde edo fitxategi batera birzuzendu",
"redirect-submit": "Joan",
@@ -2741,6 +2780,7 @@
"specialpages-group-wiki": "Datuak eta tresnak",
"specialpages-group-redirects": "Berbideraketa-orri bereziak",
"specialpages-group-spam": "Spam tresnak",
+ "specialpages-group-developer": "Garatzaileen tresnak",
"blankpage": "Orrialde txuria",
"intentionallyblankpage": "Orri hau nahita utzi da hutsik",
"external_image_whitelist": " #Lerro hau utzi dagoen bezala<pre>\n#Jarri espresio zati erregularrak (bakarrik // artean doan zatia) azpian\n#Hauek kanpo irudien URLekin lotuko dira\n#Lotutako horiek irudi bezala agertuko dira, bestela lotura besterik ez da agertuko\n# #-arekin hasten diren lerroak iruzkin bezala hartuko dira\n# Hau case-insensitive da\n\n#Jarri regex zatiak lerro honen gainetik. Lerro hau utzi dagoen bezala</pre>",
@@ -2758,6 +2798,7 @@
"tags-active-no": "Ez",
"tags-edit": "aldatu",
"tags-hitcount": "$1 {{PLURAL:$1|aldaketa|aldaketa}}",
+ "tags-create-submit": "Sortu",
"comparepages": "Orrialdeak alderatu",
"compare-page1": "1. orrialdea",
"compare-page2": "2. orrialdea",
@@ -2787,6 +2828,8 @@
"htmlform-no": "Ez",
"htmlform-yes": "Bai",
"htmlform-chosen-placeholder": "Aukeratu",
+ "htmlform-cloner-create": "Gehitu gehiago",
+ "htmlform-cloner-delete": "Kendu",
"sqlite-has-fts": "$1 testu osoan bilatzeko laguntzarekin",
"sqlite-no-fts": "$1 testu osoan bilatzeko laguntzarik gabe",
"logentry-delete-delete": "$1 {{GENDER:$2|wikilariak}} «$3» orria ezabatu du",
@@ -2804,7 +2847,7 @@
"revdelete-restricted": "administratzaileentzako mugak ezarri dira",
"revdelete-unrestricted": "administratzaileentzako mugak kendu dira",
"logentry-move-move": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du",
- "logentry-move-move-noredirect": "$1 {{GENDER:$2|wikilariak}} $3 orria $4 izenera aldatu du, birzuzenketarik utzi gabe",
+ "logentry-move-move-noredirect": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketarik utzi gabe",
"logentry-move-move_redir": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketaren gainetik",
"logentry-move-move_redir-noredirect": "$1 {{GENDER:wikilariak}} «$3» orria «$4» izenera aldatu du, birbideratze bat gainidatzita, birbideratzerik utzi gabe",
"logentry-patrol-patrol": "$1(e)k $3 orrialdearen $4 berrikuzpena patruilatutzat {{GENDER:$2|markatu}} du",
@@ -2812,16 +2855,17 @@
"logentry-newusers-create": "$1 erabiltzaile kontua sortu da",
"logentry-newusers-create2": "$1 wikilariak $3 erabiltzaile kontua sortu du",
"rightsnone": "(bat ere ez)",
- "feedback-subject": "Gaia:",
- "feedback-message": "Mezua:",
- "feedback-cancel": "Utzi",
- "feedback-submit": "Feedbacka bidali",
+ "revdelete-summary": "aldaketaren laburpena",
"feedback-adding": "Orriari feedbacka gehitzen...",
+ "feedback-bugnew": "Txekeatu dut. Bug berria bidaliko",
+ "feedback-cancel": "Utzi",
+ "feedback-close": "Egina",
"feedback-error1": "Akatsa: APIaren emaitza ez ezagunak",
"feedback-error2": "Akatsa: Aldaketa ez da egin",
"feedback-error3": "Akatsa: APIaren erantzunik gabe",
- "feedback-close": "Egina",
- "feedback-bugnew": "Txekeatu dut. Bug berria bidaliko",
+ "feedback-message": "Mezua:",
+ "feedback-subject": "Gaia:",
+ "feedback-submit": "Bidali",
"searchsuggest-search": "Bilatu",
"searchsuggest-containing": "edukian...",
"api-error-badaccess-groups": "Ez duzu baimendik fitxategi hauek wiki honetara igotzeko.",
@@ -2834,7 +2878,12 @@
"api-error-filename-tooshort": "Fitxategiaren izena laburregia da.",
"api-error-filetype-banned": "Mota horretako fitxategiak debekatuta daude.",
"api-error-filetype-missing": "Fitxategiak ez zuen luzapenik.",
+ "api-error-http": "Barne-errorea: Ezin da zerbitzariarekin konektatu.",
"api-error-illegal-filename": "Fitxategiaren izena ez da onartzen.",
+ "api-error-internal-error": "Barne-errorea: Zerbaitek huts egin du zuk wikira igotakoa prozesatzean.",
+ "api-error-invalid-file-key": "Barne-errorea: Ez da fitxategia aurkitu aldi baterako biltegian.",
+ "api-error-missingparam": "Barne-errorea: Parametroak falta dira eskaeran.",
+ "api-error-missingresult": "Barne-errorea: Ezin da zehaztu kopia ondo burutu den ala ez.",
"api-error-mustbeloggedin": "Fitxategiak igotzeko izena emanda eduki behar duzu.",
"api-error-mustbeposted": "Barne arazoa: HTTP POST beharrezkoa da.",
"api-error-noimageinfo": "Igoera ondo egin da, baina zerbitzariak ez digu informaziorik eman zerbitzariaren inguruan.",
@@ -2842,6 +2891,7 @@
"api-error-ok-but-empty": "Barne arazoa: zerbitzariaren erantzunik ez.",
"api-error-overwrite": "Existitzen den fitxategi bat gain-idaztea ez da posible.",
"api-error-stashfailed": "Barne arazoa: Zerbitzariak ezin izan du behin-behineko fitxategia gorde",
+ "api-error-publishfailed": "Barne-errorea: Zerbitzariak ezin izan du aldi baterako fitxategia gorde.",
"api-error-timeout": "Zerbitzariak ez du erantzun espero zitekeen denboran.",
"api-error-unclassified": "Ezezaguna den errorea gertatu da.",
"api-error-unknown-code": "Akats ezezaguna: \"$1\".",
@@ -2882,5 +2932,33 @@
"expand_templates_remove_comments": "Iruzkinak kendu",
"expand_templates_remove_nowiki": "Ezabatu <nowiki> etiketen emaitzak",
"expand_templates_generate_xml": "Erakutsi XML parse zuhaitza",
- "expand_templates_preview": "Aurreikusi"
+ "expand_templates_preview": "Aurreikusi",
+ "pagelang-language": "Hizkuntza",
+ "pagelang-select-lang": "Hizkuntza aukeratu",
+ "right-pagelang": "Aldatu orrialdearen hizkuntza",
+ "action-pagelang": "orrialdearen hizkuntza aldatu",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gaituta)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desgaituta''')",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 byte}} ($2; %$3)",
+ "mediastatistics-table-mimetype": "MIME mota",
+ "mediastatistics-table-count": "Fitxategi kopurua",
+ "mediastatistics-header-unknown": "Ezezaguna",
+ "mediastatistics-header-video": "Bideoak",
+ "json-error-syntax": "Sintaxi-errorea",
+ "special-characters-group-latin": "Latina",
+ "special-characters-group-latinextended": "Latin hedatua",
+ "special-characters-group-ipa": "NAF",
+ "special-characters-group-symbols": "Ikurrak",
+ "special-characters-group-greek": "Greziera",
+ "special-characters-group-cyrillic": "Zirilikoa",
+ "special-characters-group-arabic": "Arabiera",
+ "special-characters-group-persian": "Persiera",
+ "special-characters-group-hebrew": "Hebreera",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Guajarati",
+ "special-characters-group-thai": "Thaiera",
+ "special-characters-group-lao": "Laosera",
+ "special-characters-group-khmer": "Khmerrera"
}
diff --git a/languages/i18n/ext.json b/languages/i18n/ext.json
index b4eb8d5c..427c0231 100644
--- a/languages/i18n/ext.json
+++ b/languages/i18n/ext.json
@@ -6,7 +6,9 @@
"The Evil IP address",
"Urhixidur",
"Xuacu",
- "아라"
+ "아라",
+ "Babanwalia",
+ "Henares"
]
},
"tog-underline": "Surrayal atihus:",
@@ -127,7 +129,7 @@
"qbedit": "Eital",
"qbpageoptions": "Esta páhina",
"qbmyoptions": "Las mis páhinas",
- "faq": "FAQ",
+ "faq": "ਆਮ ਸੁਆਲ਼",
"faqpage": "Project:FAQ",
"actions": "Acionis",
"namespaces": "Espáciu nombris",
@@ -534,7 +536,6 @@
"mergehistory-comment": "Mesturau [[:$1]] en [[:$2]]: $3",
"mergehistory-reason": "Razón:",
"mergelog": "Rustrihu e fusionis",
- "pagemerge-logentry": "S'á uñificau [[$1]] en [[$2]] (hata la revisión $3)",
"revertmerge": "Desuñifical",
"mergelogpagetext": "Embahu se muestra una lista colas úrtimas uñificacionis d'estorialis.",
"history-title": "Estorial de revisionis de \"$1\"",
@@ -882,7 +883,6 @@
"statistics": "Estaísticas",
"statistics-header-pages": "Estaísticas de la página",
"statistics-header-edits": "Estaísticas d'eición",
- "statistics-header-views": "Guipal estaísticas",
"statistics-header-users": "Estaísticas d´usuáriu",
"statistics-pages": "Páginas",
"statistics-pages-desc": "Tolas páginas nel wiki, encruyendu carabas, redirecionis...",
@@ -890,7 +890,6 @@
"statistics-users": "[[Special:ListUsers|Usuárius rustrius]]",
"statistics-users-active": "Ussuárius ativus",
"statistics-users-active-desc": "Ussuárius que aigan hechu anguna ación {{PLURAL:$1|nel úrtimu dia|enus úrtimus $1 dias}}",
- "statistics-mostpopular": "Páhinas mas visoreás",
"doubleredirects": "Redirecionis dobris",
"brokenredirects": "Redirecionis eschangás",
"brokenredirectstext": "Las siguientis redirecionis atijan a páginas que nu dessistin:",
@@ -916,7 +915,6 @@
"uncategorizedtemplates": "Prantillas sin categoria",
"unusedcategories": "Categorias abaldonás",
"unusedimages": "Archivus abaldonaus",
- "popularpages": "Páhinas polularis",
"wantedcategories": "Categorias deseás",
"wantedpages": "Páhinas deseás",
"wantedfiles": "Archivus nedessitaus",
@@ -950,7 +948,6 @@
"pager-older-n": "{{PLURAL:$1|1 mas antigu|$1 mas antigus}}",
"booksources": "Huentis de librus",
"booksources-search-legend": "Landeal huentis de librus",
- "booksources-go": "Dil",
"booksources-text": "Embahu se muestra una lista d'atihus a páhinas que vendin librus usaus i nuevus, i ondi pueis alcuentral enhormación al tentu los librus qu'estás landeandu:",
"specialloguserlabel": "Usuáriu:",
"speciallogtitlelabel": "Entítulu:",
@@ -1025,7 +1022,7 @@
"wlheader-enotif": "Se premitin notificacionis pol email.",
"wlheader-showupdated": "Las páhinas que s'án emburacau dendi la úrtima vezi que las visoreasti son muestrás en '''negrina'''",
"wlnote": "Embahu {{PLURAL:$1|es el úrtimu chambu|son los úrtimus '''$1''' chambus}} enas úrtimas {{PLURAL:$2|oras|'''$2''' oras}}.",
- "wlshowlast": "Muestral úrtimus $1 oras $2 dias $3",
+ "wlshowlast": "Muestral úrtimus $1 oras $2 dias",
"watchlist-options": "Ocionis de la mi lista e seguimientu",
"watching": "Vehilandu...",
"unwatching": "Abaldonandu la vehiláncia en...",
@@ -1059,7 +1056,6 @@
"delete-edit-reasonlist": "Eital razonis del esborrau",
"delete-warning-toobig": "Esta páhina tieni un estorial d'eicionis grandi, mas de $1 revisionis. Esborralu puei causal pobremas enas operacionis la basi e datus de {{SITENAME}}; atua con cudiau.",
"rollback": "Revertil eicionis",
- "rollback_short": "Revertil",
"rollbacklink": "revertil",
"rollbackfailed": "Marru revirtiendu",
"cantrollback": "Nu se puei eshazel la eición; el úrtimu colabutaol es el únicu autol d´esta páhina.",
@@ -1325,9 +1321,7 @@
"import-upload": "Empuntal datus XML",
"importlogpage": "Emporteal rustrihu",
"importlogpagetext": "Emporteacionis alministrativas de páhinas con estorial d'edicionis d'otras güiquis.",
- "import-logentry-upload": "á emporteau [[$1]] pol empuntu d'archivu",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|revisión|revisionis}}",
- "import-logentry-interwiki": "trasgüiquipeau $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisión|revisionis}} dendi $2",
"tooltip-pt-userpage": "La mi páhina d'usuáriu",
"tooltip-pt-anonuserpage": "La páhina d'usuáriu la IP dendi la qu'eita",
@@ -1616,7 +1610,6 @@
"exif-gpsspeed-n": "Ñus",
"exif-gpsdirection-t": "Direción verdaera",
"exif-gpsdirection-m": "Direción manética",
- "watchlistall2": "tó",
"namespacesall": "tó",
"monthsall": "tó",
"confirmemail": "Confirmal email",
@@ -1688,7 +1681,6 @@
"iranian-calendar-m10": "10 mes Jalāli",
"iranian-calendar-m11": "11 mes Jalāli",
"iranian-calendar-m12": "12 mes Jalāli",
- "unknown_extension_tag": "estensión andarria: \"$1\"",
"version": "Velsión",
"version-extensions": "Estensionis istalás",
"version-specialpages": "Páhinas especialis",
@@ -1696,7 +1688,7 @@
"version-other": "Otru",
"version-hook-name": "Nombri el Hook",
"version-hook-subscribedby": "Suscritu pol",
- "version-version": "(Velsión $1)",
+ "version-version": "($1)",
"version-license": "Licéncia",
"version-software": "Software istalau",
"version-software-product": "Proutu",
@@ -1723,5 +1715,7 @@
"revdelete-restricted": "las restricionis a los çahorilis án siu apricás",
"revdelete-unrestricted": "las restricionis a los çahorilis án siu esborrás",
"rightsnone": "(dengunu)",
+ "revdelete-summary": "eital sumáriu",
+ "searchsuggest-search": "Buscal",
"expand_templates_preview": "Previsoreal"
}
diff --git a/languages/i18n/fa.json b/languages/i18n/fa.json
index 7a1ea406..4ad8846f 100644
--- a/languages/i18n/fa.json
+++ b/languages/i18n/fa.json
@@ -39,10 +39,17 @@
"Oldstoneage",
"Omid.koli",
"Alirezaaa",
- "Mogoeilor"
+ "Mogoeilor",
+ "Hosseinblue",
+ "فلورانس",
+ "Saeidpourbabak",
+ "Arash.pt",
+ "Signal89",
+ "Macofe",
+ "Danialbehzadi"
]
},
- "tog-underline": "خطکشیدن زیر پیوندها:",
+ "tog-underline": "خط کشیدن زیر پیوندها:",
"tog-hideminor": "تغییرات جزئی از فهرست تغییرات اخیر پنهان شوند",
"tog-hidepatrolled": "ویرایش‌های گشت‌خورده از فهرست تغییرات اخیر پنهان شوند",
"tog-newpageshidepatrolled": "صفحه‌های گشت‌خورده از فهرست صفحه‌های تازه پنهان شوند",
@@ -56,18 +63,18 @@
"tog-watchdefault": "صفحه‌ها و پرونده‌هایی که ویرایش می‌کنم به فهرست پیگیری‌هایم افزوده شود",
"tog-watchmoves": "صفحه‌ها و پرونده‌هایی که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود",
"tog-watchdeletion": "صفحات و پرونده‌هایی که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود",
- "tog-watchrollback": "افزودن صفحاتی که واگردانی کردم برای فهرست پیگیری‌هایم",
+ "tog-watchrollback": "صفحاتی که واگردانی می‌کنم به فهرست پیگیری‌هایم افزوده شود",
"tog-minordefault": "همهٔ ویرایش‌ها به طور پیش‌فرض به عنوان «جزئی» علامت بخورد",
"tog-previewontop": "پیش‌نمایش قبل از جعبهٔ ویرایش نمایش یابد",
"tog-previewonfirst": "پیش‌نمایش هنگام اولین ویرایش نمایش یابد",
- "tog-enotifwatchlistpages": "اگر صفحه یا پرونده‌ای از فهرست پی‌گیری‌هایم ویرایش شد به من نامه‌ای فرستاده شود",
- "tog-enotifusertalkpages": "هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه‌ای فرستاده شود",
- "tog-enotifminoredits": "برای تغییرات جزئی در صفحه‌ها و پرونده‌ها هم به من نامه‌ای فرستاده شود",
- "tog-enotifrevealaddr": "نشانی رایانامهٔ من در رایانامه‌های اطلاع‌رسانی نمایش یابد",
+ "tog-enotifwatchlistpages": "اگر صفحه یا پرونده‌ای از فهرست پی‌گیری‌هایم ویرایش شد به من ایمیلی فرستاده شود",
+ "tog-enotifusertalkpages": "هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من ایمیلی فرستاده شود",
+ "tog-enotifminoredits": "برای تغییرات جزئی در صفحه‌ها و پرونده‌ها هم به من ایمیل فرستاده شود",
+ "tog-enotifrevealaddr": "آدرس ایمیل من را در ایمیل‌های اطلاع‌رسانی نمایش یابد",
"tog-shownumberswatching": "شمار کاربران پی‌گیرندهٔ نمایش یابد",
"tog-oldsig": "امضای کنونی:",
"tog-fancysig": "امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)",
- "tog-uselivepreview": "استفاده از پیش‌نمایش زنده (نیازمند جاوااسکریپت) (آزمایشی)",
+ "tog-uselivepreview": "استفاده از پیش‌نمایش زنده",
"tog-forceeditsummary": "هنگامی که خلاصهٔ ویرایش ننوشته‌ام به من اطلاع داده شود",
"tog-watchlisthideown": "ویرایش‌های خودم در فهرست پی‌گیری‌ها پنهان شود",
"tog-watchlisthidebots": "ویرایش‌های ربات‌ها در فهرست پی‌گیری‌ها پنهان شود",
@@ -75,7 +82,7 @@
"tog-watchlisthideliu": "ویرایش‌های کاربران وارد شده به سامانه در فهرست پی‌گیری‌ها پنهان شود",
"tog-watchlisthideanons": "ویرایش‌های کاربران ناشناس در فهرست پی‌گیری‌های من پنهان شود",
"tog-watchlisthidepatrolled": "ویرایش‌های گشت‌خورده در فهرست پی‌گیری‌ها پنهان شود",
- "tog-ccmeonemails": "رونوشتی از نامه‌ای که به دیگران ارسال می‌کنم برای خودم هم فرستاده شود",
+ "tog-ccmeonemails": "رونوشتی از ایمیلی که به دیگران ارسال می‌کنم برای خودم هم فرستاده شود",
"tog-diffonly": "محتوای صفحه، زیر تفاوت نمایش داده نشود",
"tog-showhiddencats": "رده‌های پنهان نمایش داده شود",
"tog-norollbackdiff": "بعد از واگردانی تفاوت نشان داده نشود",
@@ -119,7 +126,7 @@
"february-gen": "فوریهٔ",
"march-gen": "مارس",
"april-gen": "آوریل",
- "may-gen": "مهٔ",
+ "may-gen": "مه",
"june-gen": "ژوئن",
"july-gen": "ژوئیهٔ",
"august-gen": "اوت",
@@ -165,9 +172,9 @@
"category-file-count": "{{PLURAL:$2|این رده تنها حاوی پروندهٔ زیر است.|{{PLURAL:$1|این پرونده|این $1 پرونده}} در این رده قرار {{PLURAL:$1|دارد|دارند}}؛ این رده در کل حاوی $2 پرونده است.}}",
"category-file-count-limited": "{{PLURAL:$1|پروندهٔ|$1 پروندهٔ}} زیر در ردهٔ فعلی قرار دارند.",
"listingcontinuesabbrev": "(ادامه)",
- "index-category": "صفحات فهرست‌شده",
+ "index-category": "صفحه‌های نمایه‌شده",
"noindex-category": "صفحه‌های نمایه‌نشده",
- "broken-file-category": "صفحات دارای پیوند خراب به پرونده",
+ "broken-file-category": "صفحه‌های دارای پیوند خراب به پرونده",
"about": "درباره",
"article": "صفحهٔ محتوایی",
"newwindow": "(در پنجرهٔ تازه باز می‌شود)",
@@ -255,6 +262,7 @@
"pool-queuefull": "صف مخزن پر است",
"pool-errorunknown": "خطای ناشناخته",
"pool-servererror": "پول سنتر سرویس در دسترس نیست ( $1 ).",
+ "poolcounter-usage-error": "خطای استفاده: $1",
"aboutsite": "دربارهٔ {{SITENAME}}",
"aboutpage": "Project:درباره",
"copyright": "محتوایات تحت اجازه‌نامهٔ $1 هستند مگر اینکه خلافش ذکر شده باشد.",
@@ -264,6 +272,7 @@
"disclaimers": "تکذیب‌نامه‌ها",
"disclaimerpage": "Project:تکذیب‌نامهٔ عمومی",
"edithelp": "راهنمای ویرایش‌کردن",
+ "helppage-top-gethelp": "راهنما",
"mainpage": "صفحهٔ اصلی",
"mainpage-description": "صفحهٔ اصلی",
"policy-url": "Project:سیاست‌ها",
@@ -345,10 +354,13 @@
"readonly_lag": "پایگاه داده به طور خودکار قفل شده‌است تا نسخه‌های پشتیبان با نسخهٔ اصلی هماهنگ شوند",
"internalerror": "خطای داخلی",
"internalerror_info": "خطای داخلی: $1",
+ "internalerror-fatal-exception": "نوع استثنای مخرب \"$1\"",
"filecopyerror": "نشد از پروندهٔ «$1» روی «$2» نسخه‌برداری شود.",
"filerenameerror": "نشد پروندهٔ «$1» به «$2» تغییر نام یابد.",
"filedeleteerror": "نشد پروندهٔ «$1» حذف شود.",
"directorycreateerror": "نشد مسیر $1 را ایجاد کرد.",
+ "directoryreadonlyerror": "دایرکتوری \"$1\" فقط خواندنی است.",
+ "directorynotreadableerror": "دایرکتوری \"$1\" قابل خواندن نیست.",
"filenotfound": "پروندهٔ «$1» یافت نشد.",
"unexpected": "مقدار غیرمنتظره: «$1»=«$2».",
"formerror": "خطا: نمی‌توان فرم را فرستاد.",
@@ -370,7 +382,8 @@
"viewsourcetext": "می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:",
"viewyourtext": "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
"protectedinterface": "این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار در این ویکی است و به منظور پیشگیری از خرابکاری محافظت شده‌است.\nبرای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
- "editinginterface": "'''هشدار:''' صفحه‌ای که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.\nتغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.\nبرای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
+ "editinginterface": "<strong>هشدار:</strong> صفحه‌ای که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.\nتغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.",
+ "translateinterface": "برای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
"cascadeprotected": "این صفحه در مقابل ویرایش محافظت شده‌است چون در {{PLURAL:$1|صفحهٔ|صفحه‌های}} محافظت‌شدهٔ زیر که گزینهٔ «آبشاری» در {{PLURAL:$1|آن|آن‌ها}} انتخاب شده قرار گرفته‌است:\n$2",
"namespaceprotected": "شما اجازهٔ ویرایش صفحه‌های فضای نام '''$1''' را ندارید.",
"customcssprotected": "شما اجازهٔ ویرایش این صفحهٔ سی‌اس‌اس را ندارید، زیرا حاوی تنظیم‌های شخصی یک کاربر دیگر است.",
@@ -427,11 +440,13 @@
"userlogin-resetlink": "جزئیات ورود را فراموش کرده‌اید؟",
"userlogin-resetpassword-link": "گذرواژه‌تان را فراموش کردید؟",
"userlogin-helplink2": "کمک با ورود",
- "createacct-emailrequired": "نشانی رایانامه",
- "createacct-emailoptional": "نشانی رایانامه (اختیاری)",
- "createacct-email-ph": "نشانی رایانامه را وارد کنید",
- "createacct-another-email-ph": "نشانی رایانامه را وارد کنید",
- "createaccountmail": "استفاده از رمز عبور موقت تصادفی و فرستادن آن به نشانی رایانامه مشخص‌شده",
+ "userlogin-loggedin": "شما در حال حاضر به عنوان {{GENDER:$1|$1}} وارد شده‌اید.\nاز فرم پایین برای ورود به عنوان یک کاربر دیگر استفاده کنید.",
+ "userlogin-createanother": "ایجاد یک حساب کاربری دیگر",
+ "createacct-emailrequired": "آدرس ایمیل",
+ "createacct-emailoptional": "آدرس ایمیل (اختیاری)",
+ "createacct-email-ph": "آدرس ایمیل خود را وارد کنید",
+ "createacct-another-email-ph": "آدرس ایمیل را وارد کنید",
+ "createaccountmail": "استفاده از رمز عبور موقت تصادفی و ارسال آن به آدرس ایمیل مشخص شده",
"createacct-realname": "نام واقعی (اختیاری)",
"createaccountreason": "دلیل:",
"createacct-reason": "دلیل",
@@ -462,30 +477,31 @@
"wrongpassword": "گذرواژه‌ای که وارد کردید نادرست است.\nلطفاً دوباره امتحان کنید.",
"wrongpasswordempty": "گذرواژه‌ای که وارد کرده‌اید، خالی است.\nلطفاً دوباره تلاش کنید.",
"passwordtooshort": "گذرواژه باید دست‌کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته باشد.",
+ "passwordtoolong": "گذرواژه نمی تواند حروفش بیشتر از {{PLURAL:$1|۱ حرف|$1 حرف}} باشد.",
"password-name-match": "گذرواژهٔ شما باید با نام کاربری شما تفاوت داشته باشد.",
"password-login-forbidden": "استفاده از این نام کاربری و گذرواژه ممنوع است.",
"mailmypassword": "بازنشانی گذرواژه",
"passwordremindertitle": "یادآور گذرواژهٔ {{SITENAME}}",
"passwordremindertext": "یک نفر (احتمالاً خود شما، با نشانی آی‌پی $1) گذرواژهٔ جدیدی برای حساب کاربری شما در {{SITENAME}} درخواست کرده‌است ($4). \nیک گذرواژهٔ موقت برای کاربر «$2» ساخته شده و برابر با «$3» قرار داده شده‌است.\nاگر هدفتان همین بوده‌است، اکنون باید وارد سامانه شوید و گذرواژهٔ جدیدی برگزینید.\nگذرواژهٔ موقت شما ظرف {{PLURAL:$5|یک روز|$5 روز}} باطل می‌شود.\n\nاگر کس دیگری این درخواست را کرده‌است یا اینکه شما گذرواژهٔ پیشین خود را به یاد آورده‌اید و دیگر تمایلی به تغییر آن ندارید، می‌توانید این پیغام را نادیده بگیرید و همان گذرواژهٔ پیشین را به کار برید.",
- "noemail": "هیچ نشانی رایانامه‌ای برای کاربر «$1» ثبت نشده‌است.",
- "noemailcreate": "باید یک نشانی رایانامه معتبر وارد کنید",
- "passwordsent": "گذرواژه‌ای جدید به نشانی رایانامه ثبت‌شده برای «$1» فرستاده شد.\nلطفاً پس از دریافت آن دوباره به سامانه وارد شوید.",
+ "noemail": "هیچ آدرس ایمیلی برای کاربر «$1» ثبت نشده است.",
+ "noemailcreate": "شما باید یک آدرس ایمیل درست فراهم کنید",
+ "passwordsent": "گذرواژه‌ای جدید به آدرس ایمیل ثبت شده برای «$1» ارسال شد.\nلطفاً پس از دریافت آن، دوباره به سیستم وارد شوید.",
"blocked-mailpassword": "نشانی آی‌پی شما از ویرایش بازداشته شده‌است و از این رو به منظور جلوگیری از سوءاستفاده اجازهٔ بهره‌گیری از قابلیت بازیابی گذرواژه را ندارد.",
- "eauthentsent": "یک نامه برای تأیید نشانی رایانامه به نشانی موردنظر ارسال شد.\nقبل از اینکه نامهٔ دیگری قابل ارسال به این نشانی باشد، باید دستورهایی که در آن نامه آمده است را جهت تأیید این مساله که این نشانی متعلق به شماست، اجرا کنید.",
- "throttled-mailpassword": "یک رایانامهٔ بازنشانی گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته فرستاده شده است.\nبرای جلوگیری از سوءاستفاده، هر $1 {{PLURAL:$1|ساعت|ساعت}} تنها یک رایانامهٔ بازنشانی گذرواژه فرستاده می‌شود.",
- "mailerror": "خطا در فرستادن رایانامه: $1",
+ "eauthentsent": "یک ایمیل تأیید برای آدرس ایمیل به نشانی مورد نظر ارسال شد.\nقبل از اینکه ایمیل دیگری قابل ارسال به این آدرس باشد، باید دستورهایی که در آن ایمیل آمده است را جهت تأیید این مساله که این آدرس متعلق به شماست، اجرا کنید.",
+ "throttled-mailpassword": "یک ایمیل بازنشانی گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته فرستاده شده است.\nبرای جلوگیری از سوءاستفاده، هر $1 {{PLURAL:$1|ساعت|ساعت}} تنها یک ایمیل بازنشانی گذرواژه فرستاده می‌شود.",
+ "mailerror": "خطا در ارسال ایمیل: $1",
"acct_creation_throttle_hit": "بازدیدکنندگان این ویکی که از نشانی آی‌پی شما استفاده می‌کنند در روز گذشته {{PLURAL:$1|یک حساب کاربری|$1 حساب کاربری}} ساخته‌اند، که بیشترین تعداد مجاز در آن بازهٔ زمانی است.\nبه همین خاطر، بازدیدکنندگانی که از این نشانی آی‌پی استفاده می‌کنند نمی‌توانند در حال حاضر حساب جدیدی بسازند.",
- "emailauthenticated": "نشانی رایانامهٔ شما در $2 ساعت $3 تصدیق شد.",
- "emailnotauthenticated": "نشانی رایانامهٔ شما هنوز تصدیق نشده‌است.\nبرای هیچ‌یک از ویژگی‌های زیر رایانامه ارسال نخواهد شد.",
- "noemailprefs": "برای راه‌اندازی این قابلیت‌ها یک نشانی رایانامه مشخص کنید.",
- "emailconfirmlink": "تأیید نشانی رایانامه",
- "invalidemailaddress": "نشانی واردشدهٔ رایانامه قابل‌قبول نیست، چرا که دارای ساختار نامعتبری است.\nلطفاً نشانی‌ای با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.",
- "cannotchangeemail": "نشانی‌های رایانامهٔ حساب کاربری در این ویکی قابل تغییر نیست.",
- "emaildisabled": "این وب‌گاه قادر به ارسال رایانامه نیست.",
+ "emailauthenticated": "آدرس ایمیل شما در $2 ساعت $3 تأیید شده است.",
+ "emailnotauthenticated": "آدرس ایمیل شما هنوز تأیید نشده است.\nبرای هیچ‌یک از ویژگی‌های زیر، ایمیل ارسال نخواهد شد.",
+ "noemailprefs": "برای راه‌اندازی این قابلیت‌ها یک آدرس ایمیل در ترجیحات خود مشخص کنید.",
+ "emailconfirmlink": "آدرس ایمیل خود را تأیید کنید",
+ "invalidemailaddress": "آدرس ایمیل واردشدهٔ قابل قبول نیست، چرا که دارای ساختار نامعتبری است.\nلطفاً آدرسی با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.",
+ "cannotchangeemail": "آدرس‌های ایمیل حساب کاربری در این ویکی قابل تغییر نیست.",
+ "emaildisabled": "این وب سایت قادر به ارسال ایمیل نیست.",
"accountcreated": "حساب کاربری ایجاد شد",
"accountcreatedtext": "حساب کاربری برای [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|بحث]]) ایجاد شده است.",
"createaccount-title": "ایجاد حساب کاربری در {{SITENAME}}",
- "createaccount-text": "یک نفر برای رایانامه شما یک حساب کاربری در {{SITENAME}} با نام «$2» ایجاد کرده‌است ($4)، که گذرواژهٔ آن چنین است: $3\nشما باید به سامانه وارد شوید تا گذرواژهٔ خود را تغییر بدهید.\n\nاگر این حساب اشتباهی ساخته شده است، این پیغام را نادیده بگیرید.",
+ "createaccount-text": "یک نفر برای ایمیل شما یک حساب کاربری در {{SITENAME}} با نام «$2» ایجاد کرده‌است ($4)، که گذرواژهٔ آن چنین است: $3\nشما باید به سیستم وارد شوید تا گذرواژهٔ خود را تغییر بدهید.\n\nاگر این حساب اشتباهی ساخته شده است، این پیغام را نادیده بگیرید.",
"login-throttled": "شما به تازگی چندین‌بار برای ثبت ورود تلاش کرده‌اید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
"login-abort-generic": "ورود شما ناموفق بود - خاتمهٔ ناگهانی داده شد",
"login-migrated-generic": "حساب کاربری شما منتقل شده‌است، و نام کاربری‌تان دیگر در این ویکی وجود ندارد.",
@@ -497,8 +513,8 @@
"pt-createaccount": "ایجاد حساب کاربری",
"pt-userlogout": "خروج",
"php-mail-error-unknown": "خطای ناشناخته در تابع mail()‎ پی‌اچ‌پی",
- "user-mail-no-addy": "تلاش برای ارسال نامه بدون یک نشانی رایانامه.",
- "user-mail-no-body": "تلاش برای فرستادن رایانامه بی‌دلیل کوتاه یا خالی",
+ "user-mail-no-addy": "تلاش برای ارسال ایمیل بدون آدرس ایمیل.",
+ "user-mail-no-body": "سعی کردید ایمیلی با محتوای بی‌دلیل کوتاه و یا خالی بفرستید.",
"changepassword": "تغییر گذرواژه",
"resetpass_announce": "شما باید برای پایان ورود به سامانه، گذرواژهٔ جدیدی را تنظیم کنید.",
"resetpass_text": "<!-- اینجا متن اضافه کنید -->",
@@ -515,7 +531,7 @@
"resetpass-submit-cancel": "لغو",
"resetpass-wrong-oldpass": "گذرواژهٔ موقت یا اخیر نامعتبر.\nممکن است که شما همینک گذرواژه‌تان را با موفقیت تغییر داده باشید یا درخواست یک گذرواژهٔ موقت تازه کرده باشید.",
"resetpass-recycled": "لطفاً رمز عبور خود را به چیز دیگری غیر از رمز عبور فعلی تنظیم کنید.",
- "resetpass-temp-emailed": "شما با یک کد رایانامه شدهٔ موقت وارد شده‌اید.\nبرای پایان ورود، شما باید رمز عبور جدیدی اینجا وارد کنید:",
+ "resetpass-temp-emailed": "شما با یک کد ایمیل شدهٔ موقت وارد شده‌اید.\nبرای پایان ورود، شما باید رمز عبور جدیدی اینجا وارد کنید:",
"resetpass-temp-password": "گذرواژهٔ موقت:",
"resetpass-abort-generic": "تغییر گذرواژه به دست یکی از افزونه‌ها لغو شده است.",
"resetpass-expired": "رمز عبور شما منقضی شده‌است. لطفاً برای ورود رمز عبور جدیدی را تنظیم کنید.",
@@ -523,30 +539,30 @@
"resetpass-validity-soft": "گذرواهٔ شما صحیح نیست: $1\n\nلطفاً یک گذرواژهٔ تازه الآن انتخاب کنید یا بر «{{int:resetpass-submit-cancel}}» کلیک کنید که دوباره آن را بعداً انتخاب کنید.",
"passwordreset": "بازنشانی گذرواژه",
"passwordreset-text-one": "برای بازنشانی گذرواژه‌تان این فرم را کامل کنید.",
- "passwordreset-text-many": "{{PLURAL:$1|برای دریافت یک گذرواژهٔ موقت از راه رایانامه، یکی از زمینه‌ها را پر کنید.}}",
+ "passwordreset-text-many": "{{PLURAL:$1|برای دریافت یک گذرواژهٔ موقت از طریق ایمیل، یکی از خانه‌ها را پر کنید.}}",
"passwordreset-legend": "بازنشانی گذرواژه",
"passwordreset-disabled": "بازنشانی گذرواژه در این ویکی غیرفعال شده است.",
- "passwordreset-emaildisabled": "ویژگی‌های رایانامه در این ویکی نافعال شده‌اند.",
+ "passwordreset-emaildisabled": "قابلیت‌های ایمیل در این ویکی غیرفعال شده‌اند.",
"passwordreset-username": "نام کاربری:",
"passwordreset-domain": "دامنه:",
- "passwordreset-capture": "رایانامهٔ نهایی نشان داده شود؟",
- "passwordreset-capture-help": "اگر این گزینه را علامت بزنید رایانامهٔ (حاوی گذرواژهٔ موقت) به شما نشان داده خواهد شد و برای کاربر نیز فرستاده خواهد شد.",
- "passwordreset-email": "نشانی رایانامه:",
+ "passwordreset-capture": "ایمیل نهایی نشان داده شود؟",
+ "passwordreset-capture-help": "اگر این گزینه را علامت بزنید، ایمیل (حاوی گذرواژهٔ موقت) به شما نشان داده خواهد شد و برای کاربر نیز فرستاده خواهد شد.",
+ "passwordreset-email": "نشانی ایمیل:",
"passwordreset-emailtitle": "جزئیات حساب در {{SITENAME}}",
- "passwordreset-emailtext-ip": "یک نفر (احتمالاً شما، با نشانی آی‌پی $1) درخواست بازنشانی گذرواژه‌تان در {{SITENAME}} ($4) را کرده‌است. {{PLURAL:$3|حساب|حساب‌های}} کاربری زیر با این رایانشانی مرتبط هستند:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} پس از {{PLURAL:$5|یک روز|$5 روز}} باطل خواهند شد.\nشما باید هم‌اکنون ثبت ورود کنید و گذرواژه‌ای جدید برگزینید. اگر فکر می‌کنید شخص دیگری این درخواست را داده‌است یا اگر گذرواژهٔ اصلی‌تان را به یاد آوردید و دیگر نمی‌خواهید آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.",
- "passwordreset-emailtext-user": "کاربر $1 از {{SITENAME}} درخواست بازنشانی گذرواژهٔ شما در {{SITENAME}} ($4) را کرده است. {{PLURAL:$3|حساب|حساب‌های}} کاربری زیر با این رایانشانی مرتبط است:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} تا {{PLURAL:$5|یک روز|$5 روز}} باطل می‌شود.\nشما باید هم‌اکنون وارد شده و یک گذرواژهٔ جدید برگزینید. اگر شخص دیگری این درخواست را داده است، یا اگر گذرواژهٔ اصلی‌تان را به خاطر آوردید و دیگر نمی‌خواهید آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.",
+ "passwordreset-emailtext-ip": "یک نفر (احتمالاً شما، با نشانی آی‌پی $1) درخواست بازنشانی گذرواژه‌تان در {{SITENAME}} ($4) را کرده‌است. {{PLURAL:$3|حساب|حساب‌های}} کاربری زیر با این آدرس ایمیل مرتبط هستند:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} پس از {{PLURAL:$5|یک روز|$5 روز}} باطل خواهند شد.\nشما باید هم‌اکنون ثبت ورود کنید و گذرواژه‌ای جدید برگزینید. اگر فکر می‌کنید شخص دیگری این درخواست را داده‌است یا اگر گذرواژهٔ اصلی‌تان را به یاد آوردید و دیگر نمی‌خواهید آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.",
+ "passwordreset-emailtext-user": "کاربر $1 از {{SITENAME}} درخواست بازنشانی گذرواژهٔ شما در {{SITENAME}} ($4) را کرده است. {{PLURAL:$3|حساب|حساب‌های}} کاربری زیر با این آدرس ایمیل مرتبط است:\n\n$2\n\n{{PLURAL:$3|این گذرواژهٔ موقت|این گذرواژه‌های موقت}} تا {{PLURAL:$5|یک روز|$5 روز}} باطل می‌شود.\nشما باید هم‌اکنون وارد شده و یک گذرواژهٔ جدید برگزینید. اگر شخص دیگری این درخواست را داده است، یا اگر گذرواژهٔ اصلی‌تان را به خاطر آوردید و دیگر نمی‌خواهید آن را تغییر دهید، می‌توانید این پیغام را نادیده بگیرید و به استفاده از گذرواژهٔ قبلی‌تان ادامه دهید.",
"passwordreset-emailelement": "نام کاربری: $1\nگذرواژهٔ موقت: $2",
"passwordreset-emailsent": "یک نامهٔ بازنشانی گذرواژه فرستاده شده‌است.",
- "passwordreset-emailsent-capture": "یک رایانامهٔ بازنشانی که در پایین نمایش داده شده، فرستاده شده است.",
- "passwordreset-emailerror-capture": "رایانامهٔ بازنشانی، که در زیر نمایش داده شده، ایجاد شد، ولی ارسال آن به {{GENDER:$2|کاربر}} موفقیت‌آمیز نبود: $1",
- "changeemail": "تغییر نشانی رایانامه",
- "changeemail-text": "این فرم را تکمیل کنید تا آدرس رایانامه‌تان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.",
+ "passwordreset-emailsent-capture": "یک ایمیل بازنشانی که در پایین نمایش داده شده، فرستاده شده است.",
+ "passwordreset-emailerror-capture": "ایمیل بازنشانی، که در زیر نمایش داده شده، ایجاد شد، ولی ارسال آن به {{GENDER:$2|کاربر}} موفقیت‌آمیز نبود: $1",
+ "changeemail": "تغییر آدرس ایمیل",
+ "changeemail-text": "این فرم را تکمیل کنید تا آدرس ایمیلتان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.",
"changeemail-no-info": "برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.",
- "changeemail-oldemail": "نشانی رایانامهٔ کنونی:",
- "changeemail-newemail": "نشانی رایانامهٔ تازه:",
+ "changeemail-oldemail": "آدرس ایمیل کنونی:",
+ "changeemail-newemail": "آدرس ایمیل جدید:",
"changeemail-none": "(هیچ)",
- "changeemail-password": " {{SITENAME}} رمز عبور شما:",
- "changeemail-submit": "تغییر رایانامه",
+ "changeemail-password": "گذرواژهٔ {{SITENAME}} شما:",
+ "changeemail-submit": "تغییر ایمیل",
"changeemail-throttled": "شما به مراتب برای ورود تلاش کرده‌اید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
"resettokens": "بازنشانی شناساننده‌ها",
"resettokens-text": "شما می توانید شناساننده‌ها که اجازهٔ دسترسی به برخی داده‌های خصوصی مرتبط با حسابتان را می‌دهد بازنشانی کنید.\nدر صورتی باید این کار را انجام دهید که تصادقاً آن‌ها را با کسی در میان گذاشته‌اید یا به حسابتان نفوذ شده است.",
@@ -583,20 +599,22 @@
"preview": "پیش‌نمایش",
"showpreview": "پیش‌نمایش",
"showdiff": "نمایش تغییرات",
- "blankarticle": "<strong>هشدار:</strong> شما در حال ایجاد صفحه خالی هستید.\nاگر \"{{int:savearticle}}\" را دوباره کلیک کنید، صفحه بدون محتوا ایجاد می‌شود.",
+ "blankarticle": "<strong>هشدار:</strong> شما در حال ایجاد صفحه خالی هستید.\nاگر «{{int:savearticle}}» را دوباره کلیک کنید، صفحه بدون محتوا ایجاد می‌شود.",
"anoneditwarning": "<strong>هشدار:</strong> شما وارد نشده‌اید. نشانی آی‌پی شما برای عموم قابل مشاهده خواهد بود اگر هر تغییری ایجاد کنید. اگر <strong>[$1 وارد شوید]</strong> یا <strong>[$2 یک حساب کاربری بسازید]</strong>، ویرایش‌هایتان به نام کاربری‌تان نسبت داده خواهد شد، همراه با مزایای دیگر.",
"anonpreviewwarning": "''شما به سامانه وارد نشده‌اید. ذخیره کردن باعث می‌شود که نشانی آی‌پی شما در تاریخچهٔ این صفحه ثبت گردد.''",
"missingsummary": "'''یادآوری:''' شما خلاصهٔ ویرایش ننوشته‌اید.\nاگر دوباره دکمهٔ «{{int:savearticle}}» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.",
+ "selfredirect": "<strong>هشدار:</strong> شما در حال تغییرمسیر صفحه به خودش هستید.\nامکان دارد هدف اشتباهی را برای تغییرمسیر انتخاب کردید، یا ممکن است صفحهٔ اشتباهی را ویرایش می‌کنید.\n\nاگر بر روی \"{{int:savearticle}}\" دوباره کلیک کنید، تغییرمسیر ساخته خواهد شد.",
"missingcommenttext": "لطفاً توضیحی در زیر بیفزایید.",
"missingcommentheader": "'''یادآوری:''' شما موضوع/عنوان این یادداشت را مشخص نکرده‌اید.\nاگر دوباره دکمهٔ «{{int:savearticle}}» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.",
"summary-preview": "پیش‌نمایش خلاصه:",
"subject-preview": "پیش‌نمایش موضوع/عنوان:",
+ "previewerrortext": "در زمان تلاش برای نمایش دادن تغییرات شما، خطای رخ داد.",
"blockedtitle": "کاربر بسته شده‌است",
- "blockedtext": "'''دسترسی حساب کاربری یا نشانی آی‌پی شما بسته شده‌است.'''\n\nاین قطع دسترسی توسط $1 انجام شده‌است.\nدلیل ارائه‌شده چنین است: $2''\n\n* شروع قطع دسترسی: $8\n* پایان قطع دسترسی: $6\n* کاربری هدف قطع دسترسی: $7\n\nشما می‌توانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.\nتوجه کنید که شما نمی‌توانید از ویژگی «فرستادن رایانامه به این کاربر» استفاده کنید مگر آنکه نشانی رایانامه معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این ویژگی برای شما قطع نشده باشد.\nنشانی آی‌پی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.\nلطفاً تمامی جزئیات فوق را در کلیهٔ درخواست‌هایی که در این باره مطرح می‌کنید ذکر کنید.",
- "autoblockedtext": "دسترسی نشانی آی‌پی شما قطع شده‌است، زیرا این نشانی آی‌پی توسط کاربر دیگری استفاده شده که دسترسی او توسط $1 قطع شده‌است.\nدلیل ارائه‌شده چنین است:\n\n:''$2''\n\n* شروع قطع دسترسی: $8\n* پایان قطع دسترسی: $6\n* کاربری هدف قطع دسترسی: $7\n\nشما می‌توانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.\nتوجه کنید که شما نمی‌توانید از ویژگی «فرستادن رایانامه به این کاربر» استفاده کنید مگر آنکه نشانی رایانامه معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این ویژگی برای شما قطع نشده باشد.\nنشانی آی‌پی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.\nلطفاً تمامی جزئیات فوق را در کلیهٔ درخواست‌هایی که در این باره مطرح می‌کنید ذکر کنید.",
+ "blockedtext": "<strong>دسترسی حساب کاربری یا نشانی آی‌پی شما بسته شده‌است.</strong>\n\nاین قطع دسترسی توسط $1 انجام شده است.\nدلیل ارائه‌شده چنین است: <em>$2</em>\n\n* شروع قطع دسترسی: $8\n* پایان قطع دسترسی: $6\n* کاربری هدف قطع دسترسی: $7\n\nشما می‌توانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.\nتوجه کنید که شما نمی‌توانید از قابلیت «ایمیل به این کاربر» استفاده کنید مگر آنکه آدرس ایمیل معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این قابلیت برای شما قطع نشده باشد.\nنشانی آی‌پی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.\nلطفاً تمامی جزئیات فوق را در کلیهٔ درخواست‌هایی که در این باره مطرح می‌کنید ذکر کنید.",
+ "autoblockedtext": "دسترسی نشانی آی‌پی شما قطع شده‌است، زیرا این نشانی آی‌پی توسط کاربر دیگری استفاده شده که دسترسی او توسط $1 قطع شده‌است.\nدلیل ارائه‌شده چنین است:\n\n:''$2''\n\n* شروع قطع دسترسی: $8\n* پایان قطع دسترسی: $6\n* کاربری هدف قطع دسترسی: $7\n\nشما می‌توانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.\nتوجه کنید که شما نمی‌توانید از قابلیت «ایمیل به این کاربر» استفاده کنید مگر آنکه نشانی ایمیل معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این قابلیت برای شما قطع نشده باشد.\nنشانی آی‌پی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.\nلطفاً تمامی جزئیات فوق را در کلیهٔ درخواست‌هایی که در این باره مطرح می‌کنید ذکر کنید.",
"blockednoreason": "دلیلی مشخص نشده‌است",
"whitelistedittext": "برای ویرایش مقاله‌ها باید $1.",
- "confirmedittext": "شما باید، پیش از ویرایش صفحات، نشانی رایانامهٔ خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.",
+ "confirmedittext": "شما باید، پیش از ویرایش صفحات، آدرس ایمیل خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.",
"nosuchsectiontitle": "چنین بخشی پیدا نشد",
"nosuchsectiontext": "شما تلاش کرده‌اید یک بخش در صفحه را ویرایش کنید که وجود ندارد.\nممکن است در مدتی که شما صفحه را مشاهده می‌کردید این بخش جا به جا یا حذف شده باشد.",
"loginreqtitle": "ورود به سامانه لازم است",
@@ -641,8 +659,8 @@
"nonunicodebrowser": "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.'''\nراه حلی به کار گرفته شده تا شما بتوانید صفحات را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده می‌شوند.",
"editingold": "'''هشدار: شما در حال ویرایش نسخه‌ای قدیمی از این صفحه هستید.'''\nاگر ذخیره‌اش کنید، هر تغییری که پس از این نسخه انجام شده‌است از بین خواهد رفت.",
"yourdiff": "تفاوت‌ها",
- "copyrightwarning": "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} تحت «$2» منتشر می‌شوند (برای جزئیات بیشتر به $1 مراجعه کنید).\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شده و به دلخواه توزیع شود، اینجا نفرستیدشان.<br />\nهمچنین شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشته‌اید.\n'''کارهای دارای حق تکثیر (copyright) را بی‌اجازه نفرستید!'''",
- "copyrightwarning2": "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} ممکن است توسط دیگر مشارکت‌کنندگان ویرایش شوند، تغییر یابند یا حذف شوند.\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شود، اینجا نفرستیدشان.<br />\nهمچنین شما دارید به ما قول می‌دهید که خودتان این را نوشته‌اید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشته‌اید (برای جزئیات بیشتر به $1 مراجعه کنید).\n'''کارهای دارای حق تکثیر (copyright) را بی‌اجازه نفرستید!'''",
+ "copyrightwarning": "لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در {{SITENAME}} منتشرشده تحت $2 در نظر گرفته‌می‌شوند (برای جزئیات بیش‌تر $1 را ببینید).\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش و توزیع شوند؛ بنابراین، آنها را اینجا ارائه نکنید.<br />\nشما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید (برای جزئیات بیش‌تر $1 را ببینید).\n<strong>کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!</strong>",
+ "copyrightwarning2": "لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در {{SITENAME}} ممکن است توسط دیگر مشارکت‌کنندگان تغییر یابند، ویرایش یا حذف شوند.\nاگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش شوند؛ بنابراین، آنها را اینجا ارائه نکنید.<br />\nشما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید ($1 را برای جزئیات بیشتر ببینید).\n<strong>کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!</strong>",
"longpageerror": "'''خطا: متنی که ارسال کرده‌اید {{PULAR:$1|یک کیلوبایت|$1 کیلوبایت}} طول دارد. این مقدار از مقدار بیشینهٔ {{PLURAL:$2|یک کیلوبایت|$2 کیلوبایت}} بیشتر است.'''\nنمی‌توان آن را ذخیره کرد.",
"readonlywarning": "'''هشدار: پایگاه داده برای نگهداری قفل شده‌است، به همین علت هم‌اکنون نمی‌توانید ویرایش‌هایتان را ذخیره کنید.'''\nاگر می‌خواهید متن را در یک پروندهٔ متنی کپی کنید و برای آینده ذخیره‌اش کنید.\n\nمدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1",
"protectedpagewarning": "'''هشدار: این صفحه قفل شده‌است تا فقط کاربران با دسترسی مدیریت بتوانند ویرایشش کنند.'''\nآخرین موارد سیاهه در زیر آمده‌است:",
@@ -663,7 +681,7 @@
"permissionserrors": "خطای سطح دسترسی",
"permissionserrorstext": "شما اجازهٔ انجام این کار را به این {{PLURAL:$1|دلیل|دلایل}} ندارید:",
"permissionserrorstext-withaction": "شما اجازهٔ $2 را به این {{PLURAL:$1|دلیل|دلایل}} ندارید:",
- "recreate-moveddeleted-warn": "'''هشدار: شما در حال ایجاد صفحه‌ای هستید که قبلاً حذف شده‌است.'''\n\nدر نظر داشته باشید که آیا ادامهٔ ویرایش این صفحه کار درستی‌است یا نه.\nسیاههٔ حذف و انتقال این صفحه در زیر نشان داده شده‌است:",
+ "recreate-moveddeleted-warn": "<strong>هشدار: شما در حال ایجاد صفحه‌ای هستید که قبلاً حذف شده‌است.</strong>\n\nدر نظر داشته باشید که آیا ادامهٔ ویرایش این صفحه کار درستی‌است یا نه.\nسیاههٔ حذف و انتقال این صفحه در زیر نشان داده شده‌است:",
"moveddeleted-notice": "این صفحه حذف شده‌است.\nدر زیر سیاههٔ حذف و انتقال این صفحه نمایش داده شده‌است.",
"log-fulllog": "مشاهدهٔ سیاههٔ کامل",
"edit-hook-aborted": "ویرایش توسط قلاب لغو شد.\nتوضیحی در این مورد داده نشد.",
@@ -685,6 +703,10 @@
"content-model-text": "متنی ساده",
"content-model-javascript": "جاوااسکریپت",
"content-model-css": "سی‌اس‌اس",
+ "content-json-empty-object": "ابجکت خالی",
+ "content-json-empty-array": "آرایهٔ خالی",
+ "duplicate-args-category": "صفحه‌های دارای آرگومان تکراری در فراخوانی الگو",
+ "duplicate-args-category-desc": "صفحاتی که دارای آرگومان تکراری هستند مانند، <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> یا <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''هشدار:''' این صفحه حاوی تعدادی زیادی فراخوانی دستورهای تجزیه‌گر است.\n\nتعداد آن‌ها باید کمتر از $2 {{PLURAL:$2|فراخوانی|فراخوانی}} باشد، و اینک {{PLURAL:$1|$1 فراخوانی|$1 فراخوانی}} است.",
"expensive-parserfunction-category": "صفحه‌هایی که حاوی تعداد زیادی فراخوانی سنگین دستورهای تجزیه‌گر هستند",
"post-expand-template-inclusion-warning": "هشدار: الگو بیش از اندازه بزرگ است.\nبرخی الگوها ممکن است شامل نشوند.",
@@ -739,7 +761,7 @@
"history-feed-empty": "صفحهٔ درخواست شده وجود ندارد.\nممکن است که از ویکی حذف یا اینکه نامش تغییر داده شده باشد.\nصفحات تازه را برای موارد مرتبط در این ویکی [[Special:Search|جستجو کنید]].",
"rev-deleted-comment": "(خلاصه ویرایش حذف شد)",
"rev-deleted-user": "(نام کاربری حذف شد)",
- "rev-deleted-event": "(مورد از سیاهه پاک شده)",
+ "rev-deleted-event": "(جزئیات سیاهه پاک شده)",
"rev-deleted-user-contribs": "[نام کاربری یا نشانی آی‌پی حذف شده - ویرایش مخفی شده در مشارکت‌ها]",
"rev-deleted-text-permission": "این ویرایش از این صفحه '''حذف شده‌است'''.\nممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
"rev-suppressed-text-permission": "این ویرایش از این صفحه '''حذف شده‌است'''.\nشما می‌توانید آن را ببینید؛ ممکن است اطلاعات مرتبط با آن در [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] موجود باشد.",
@@ -764,7 +786,7 @@
"revdelete-selected-text": "{{PLURAL:$1|نسخهٔ انتخاب‌شده|نسخه‌های انتخابی}} [[:$2]]:",
"revdelete-selected-file": "{{PLURAL:$1|نسخهٔ انتخاب‌شدهٔ|نسخه‌های انتخابی}} [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|مورد|موارد}} انتخاب شده از سیاهه:",
- "revdelete-text-text": "نسخه‌های حذف‌شده همچنان در تارییخچه نمایان خواند بود ولی قسمت‌هایی از محتویات غبرقابل دسترس برای عموم خواهد بود.",
+ "revdelete-text-text": "مشخصات نسخه‌های حذف شده همچنان در تاریخچه صفحه نمایان خواهد بود ولی دسترسی به قسمت‌هایی از محتویات این نسخه‌ها برای عموم ممکن نخواهد بود.",
"revdelete-text-file": "نسخه‌های حذف‌شده همچنان در تاریخچهٔ پرونده نمایان خواهد بود ولی قسمت‌هایی از محتویات آن‌ها برای عموم غیرقابل دسترس خواهد بود.",
"logdelete-text": "نسخه‌های حذف‌شده همچنان در سیاهه‌های نمایان خواهد بود ولی قسمت‌هایی از محتویات آن‌ها غیرقابل دسترس برای عموم خواهد بود.",
"revdelete-text-others": "سایر مدیران هنوز می‌توانند این محتوای پنهان را ببینند و از همین طریق موارد حذف شده را احیا کنند، مگر آن که محدودیت‌های دیگری اعمال گردد.",
@@ -773,7 +795,7 @@
"revdelete-legend": "تنظیم محدودیت‌های پیدایی",
"revdelete-hide-text": "متن نسخه",
"revdelete-hide-image": "نهفتن محتویات پرونده",
- "revdelete-hide-name": "نهفتن عمل و هدف",
+ "revdelete-hide-name": "نهفتن متغییرها و هدف",
"revdelete-hide-comment": "خلاصهٔ ویرایش",
"revdelete-hide-user": "نام کاربری/نشانی آی‌پی",
"revdelete-hide-restricted": "فرونشانی اطلاعات برای مدیران به همراه دیگران",
@@ -791,12 +813,12 @@
"revdel-restore": "تغییر پیدایی",
"pagehist": "تاریخچهٔ صفحه",
"deletedhist": "تاریخچهٔ حذف‌شده",
- "revdelete-hide-current": "خطا در پنهان‌کردن مورد مورخ $2 ساعت $1: این نسخه، نسخهٔ اخیر است و قابل پنهان‌کردن نیست.",
- "revdelete-show-no-access": "خطا در پنهان‌کردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.",
- "revdelete-modify-no-access": "خطا در پنهان‌کردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.",
- "revdelete-modify-missing": "خطا در پنهان‌کردن مورد شمارهٔ $1: این نسخه در پایگاه داده وجود ندارد!",
+ "revdelete-hide-current": "خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه، نسخهٔ اخیر است و قابل پنهان کردن نیست.",
+ "revdelete-show-no-access": "خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.",
+ "revdelete-modify-no-access": "خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه علامت «محدودیت» دارد و شما به آن دسترسی ندارید.",
+ "revdelete-modify-missing": "خطا در پنهان کردن مورد شمارهٔ $1: این نسخه در پایگاه داده وجود ندارد!",
"revdelete-no-change": "'''هشدار:''' مورد مورخ $2 ساعت $1 از قبل تنظیمات پیدایی درخواست شده را دارا بود.",
- "revdelete-concurrent-change": "خطا در پنهان‌کردن مورد مورخ $2 ساعت $1: به نظر می‌رسد که در مدتی که شما برای تغییر وضعیت آن تلاش می‌کردید وضعیت آن توسط فرد دیگری تغییر یافته است.\nلطفاً سیاهه‌ها را بررسی کنید.",
+ "revdelete-concurrent-change": "خطا در پنهان کردن مورد مورخ $2 ساعت $1: به نظر می‌رسد که در مدتی که شما برای تغییر وضعیت آن تلاش می‌کردید وضعیت آن توسط فرد دیگری تغییر یافته است.\nلطفاً سیاهه‌ها را بررسی کنید.",
"revdelete-only-restricted": "خطا در پنهان کردن مورد مورخ $2 ساعت $1: شما نمی‌توانید موارد را از دید مدیران پنهان کنید مگر آن که یکی دیگر از گزینه‌های پنهان‌سازی را نیز انتخاب کنید.",
"revdelete-reason-dropdown": "*دلایل متداول حذف\n** نقض حق تکثیر\n** اظهار نظر یا اطلاعات فردی نامناسب\n** نام کاربری نامناسب\n** اطلاعات به طور بالقوه افتراآمیز",
"revdelete-otherreason": "دلیل دیگر/اضافی:",
@@ -827,7 +849,6 @@
"mergehistory-same-destination": "صفحهٔ مبدأ و مقصد نمی‌تواند یکی باشد",
"mergehistory-reason": "دلیل:",
"mergelog": "سیاههٔ ادغام",
- "pagemerge-logentry": "[[$1]] در [[$2]] ادغام شد (نسخه‌های تا $3)",
"revertmerge": "واگردانی ادغام",
"mergelogpagetext": "در زیر سیاههٔ آخرین موارد ادغام تاریخچهٔ یک صفحه در صفحه‌ای دیگر را می‌بینید.",
"history-title": "$1: تاریخچهٔ ویرایش‌ها",
@@ -836,12 +857,12 @@
"difference-multipage": "(تفاوت بین صفحات)",
"lineno": "سطر $1:",
"compareselectedversions": "مقایسهٔ نسخه‌های انتخاب‌شده",
- "showhideselectedversions": "تغییر پدیداری بازبینی‌های انتخاب‌شده",
+ "showhideselectedversions": "تغییر پدیداری نسخه‌های انتخاب‌شده",
"editundo": "خنثی‌سازی",
"diff-empty": "(بدون تفاوت)",
- "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}} توسط کاربر مشابهی که نشان داده نشده)",
- "diff-multi-otherusers": "({{PLURAL:$1|یک نسخهٔ متوسط|$1 نسخه‌های متوسط}} توسط {{PLURAL:$2|کاربر دیگری|$2 کاربران}} نشان داده نشده)",
- "diff-multi-manyusers": "({{PLURAL:$1|یک|$1}} ویرایش میانی توسط بیش از {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده‌است)",
+ "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}}ِ همین کاربر نمایش داده نشده است)",
+ "diff-multi-otherusers": "({{PLURAL:$1|۱ نسخهٔ میانی|$1 نسخه‌ٔ میانی}} ویرایش شده توسط {{PLURAL:$2|۱ کاربر|$2 کاربر}} نشان داده نشده)",
+ "diff-multi-manyusers": "({{PLURAL:$1|یک|$1}} نسخه‌ٔ میانی ویرایش شده توسط بیش از {{PLURAL:$2|یک|$2}} کاربر نشان داده نشده است)",
"difference-missing-revision": "{{PLURAL:$2|یک ویرایش|$2 ویرایش}} از تفاوت نسخه‌ها ($1) {{PLURAL:$2|یافت|یافت}} نشد.\n\nمعمولاً در اثر پیوند به تاریخچهٔ به‌روز نشدهٔ صفحهٔ حذف شده است.\nمی‌توانید جزئیات بیشتر را در [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سیاههٔ حذف] بیابید.",
"searchresults": "نتایج جستجو",
"searchresults-title": "نتایج جستجو برای «$1»",
@@ -850,6 +871,8 @@
"notextmatches": "متن هیچ مقاله‌ای مطابقت ندارد",
"prevn": "{{PLURAL:$1|$1}}تای قبلی",
"nextn": "{{PLURAL:$1|$1}}تای بعدی",
+ "prev-page": "صفحهٔ قبلی",
+ "next-page": "صفحهٔ بعدی",
"prevn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} قبلی",
"nextn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} بعدی",
"shown-title": "نمایش $1 {{PLURAL:$1|نتیجه|نتیجه}} در هر صفحه",
@@ -868,6 +891,7 @@
"search-result-category-size": "{{PLURAL:$1|یک عضو|$1 عضو}} ({{PLURAL:$2|یک زیررده|$2 زیررده}}، {{PLURAL:$3|یک پرونده|$3 پرونده}})",
"search-redirect": "(تغییرمسیر $1)",
"search-section": "(بخش $1)",
+ "search-category": "(رده $1)",
"search-file-match": "(تشابه محتوی پرونده)",
"search-suggest": "آیا منظورتان این بود: $1",
"search-interwiki-caption": "پروژه‌های خواهر",
@@ -877,8 +901,8 @@
"searchrelated": "مرتبط",
"searchall": "همه",
"showingresults": "نمایش حداکثر {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} در پایین، آغاز از شماره '''$2'''.",
- "showingresultsinrange": "نمایش در پائین تا {{PLURAL:$1|<strong>1</strong> نتیجه|<strong>$1</strong> نتیجه}} in range #<strong>$2</strong> تا #<strong>$3</strong>.",
- "search-showingresults": "{{PLURAL:$4|نتایج <strong>$1</strong> از <strong>$3</strong>|نتایج <strong>$1 - $2</strong از <strong>$3</strong>}}",
+ "showingresultsinrange": "نمایش در پائین تا {{PLURAL:$1|<strong>1</strong> نتیجه|<strong>$1</strong> نتیجه}} در محدودهٔ #<strong>$2</strong> تا #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|نتایج <strong>$1</strong> از <strong>$3</strong>|نتایج <strong>$1 - $2</strong> از <strong>$3</strong>}}",
"search-nonefound": "نتیجه‌ای منطبق با درخواست پیدا نشد.",
"powersearch-legend": "جستجوی پیشرفته",
"powersearch-ns": "جستجو در فضاهای نام:",
@@ -901,6 +925,11 @@
"prefs-personal": "داده‌های کاربر",
"prefs-rc": "تغییرات اخیر",
"prefs-watchlist": "فهرست پی‌گیری‌ها",
+ "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-watchlist-edits": "تعداد ویرایش‌های نشان‌داده‌شده در فهرست پی‌گیری‌های گسترش‌یافته:",
@@ -908,9 +937,9 @@
"prefs-watchlist-token": "رمز فهرست پی‌گیری:",
"prefs-misc": "متفرقه",
"prefs-resetpass": "تغییر گذرواژه",
- "prefs-changeemail": "تغییر رایانامه",
- "prefs-setemail": "تنظیم نشانی رایانامه",
- "prefs-email": "گزینه‌های رایانامه",
+ "prefs-changeemail": "تغییر آدرس ایمیل",
+ "prefs-setemail": "تنظیم آدرس ایمیل",
+ "prefs-email": "گزینه‌های ایمیل",
"prefs-rendering": "نمایش صفحه",
"saveprefs": "ذخیره",
"restoreprefs": "برگرداندن تمام تنظیمات پیش‌فرض (در تمامی قسمت‌ها)",
@@ -942,7 +971,7 @@
"timezoneregion-europe": "اروپا",
"timezoneregion-indian": "اقیانوس هند",
"timezoneregion-pacific": "اقیانوس آرام",
- "allowemail": "امکان دریافت رایانامه از دیگر کاربران",
+ "allowemail": "امکان دریافت ایمیل از دیگر کاربران",
"prefs-searchoptions": "جستجو",
"prefs-namespaces": "فضاهای نام",
"default": "پیش‌فرض",
@@ -951,8 +980,8 @@
"prefs-custom-js": "جاوااسکریپت شخصی",
"prefs-common-css-js": "سی‌اس‌اس/جاوااسکریپت مشترک برای تمام پوسته‌ها:",
"prefs-reset-intro": "شما می‌توانید از این صفحه برای بازگرداندن تنظیمات خود به پیش‌فرض تارنما استفاده کنید.\nاین کار بازگشت‌ناپذیر است.",
- "prefs-emailconfirm-label": "تأیید رایانامه:",
- "youremail": "رایانامه:",
+ "prefs-emailconfirm-label": "تأیید ایمیل:",
+ "youremail": "ایمیل:",
"username": "{{GENDER:$1|نام کاربری}}:",
"prefs-memberingroups": "{{GENDER:$2|عضو}} {{PLURAL:$1|گروه|گروه}}:",
"prefs-registration": "زمان ثبت‌نام:",
@@ -969,11 +998,11 @@
"gender-male": "مرد",
"gender-female": "زن",
"prefs-help-gender": "انجام این تنظیم اختیاری است.\nنرم‌افزار از این مقدار برای اشارهٔ صحیح به جنسیت و ذکر شما برای دیگران با استفاده از دستور زبان درست استفاده می‌کند.\nاین اطلاعات عمومی خواهند بود.",
- "email": "رایانامه",
- "prefs-help-realname": "نام واقعی اختیاری است.\nاگر آن را وارد کنید هنگام ارجاع به آثارتان و انتساب آن‌ها به شما از نام واقعی‌تان استفاده خواهد شد.",
- "prefs-help-email": "نشانی رایانامه اختیاری‌است، اما فرستادن گذرواژه‌ای جدید را اگر گذرواژهٔ خود را فراموش کنید ممکن می‌کند.",
- "prefs-help-email-others": "شما همچنین می‌توانید انتخاب کنید که کاربران بتوانند از طریق پیوندی در صفحهٔ کاربری یا صفحهٔ بحث کاربری‌تان به شما رایانامه بفرستند.\nنشانی رایانامه شما زمانی که دیگران با شما تماس بگیرند فاش نمی‌شود.",
- "prefs-help-email-required": "نشانی رایانامه الزامی‌است.",
+ "email": "ایمیل",
+ "prefs-help-realname": "نام واقعی اختیاری است.\nاگر وارد شده است هنگام ارجاع به آثارتان و انتساب آن‌ها به شما ممکن است از نام واقعی‌تان استفاده شود.",
+ "prefs-help-email": "آدرس ایمیل اختیاری است، اما فرستادن گذرواژه‌ای جدید را اگر گذرواژهٔ خود را فراموش کنید ممکن می‌کند.",
+ "prefs-help-email-others": "شما همچنین می‌توانید انتخاب کنید که کاربران بتوانند از طریق پیوندی در صفحهٔ کاربری یا صفحهٔ بحث کاربری‌تان به شما ایمیل ارسال کنند.\nآدرس ایمیل شما زمانی که دیگران با شما تماس بگیرند فاش نمی‌شود.",
+ "prefs-help-email-required": "آدرس ایمیل اجباری است.",
"prefs-info": "اطلاعات اولیه",
"prefs-i18n": "بین‌المللی‌سازی",
"prefs-signature": "امضا",
@@ -991,9 +1020,10 @@
"prefs-tokenwatchlist": "نشانه",
"prefs-diffs": "تفاوت‌ها",
"prefs-help-prefershttps": "تأثیر این ترجیح بعد از ورود بعدی شما اعمال خواهد شد.",
+ "prefswarning-warning": "تغییراتتان به ترجیحات هنوز ذحیره نشده است.\nاگر این صفحه بدون کلیک بر «$1» ترک کنید ترجیحاتتان ذخیره نخواهد شد.",
"prefs-tabs-navigation-hint": "نکته: شما می توانید از کلیدهای جهت‌نمای چپ و راست برای حرکت بین زبانه‌ها در فهرست زبانه‌ها استفاده کنید.",
- "email-address-validity-valid": "نشانی رایانامه معتبر به نظر می‌رسد",
- "email-address-validity-invalid": "نشانی رایانامهٔ معتبر وارد کنید",
+ "email-address-validity-valid": "آدرس ایمیل معتبر به نظر می‌رسد",
+ "email-address-validity-invalid": "آدرس ایمیل معتبر وارد کنید",
"userrights": "مدیریت اختیارات کاربر",
"userrights-lookup-user": "مدیریت گروه‌های کاربری",
"userrights-user-editname": "یک نام کاربری وارد کنید:",
@@ -1015,7 +1045,7 @@
"userrights-removed-self": "شما با موفقیت دسترسی‌های خود را واستاندید. به این ترتیب شما دیگر به این صفحه دسترسی ندارید.",
"group": "گروه:",
"group-user": "کاربران",
- "group-autoconfirmed": "کاربران تأییدشده",
+ "group-autoconfirmed": "کاربران تأییدشدهٔ خودکار",
"group-bot": "ربات‌ها",
"group-sysop": "مدیران",
"group-bureaucrat": "دیوان‌سالاران",
@@ -1025,7 +1055,7 @@
"group-autoconfirmed-member": "{{GENDER:$1|کاربر تأییدشده}}",
"group-bot-member": "ربات",
"group-sysop-member": "{{GENDER:$1|مدیر}}",
- "group-bureaucrat-member": "{{GENDER:$1|دیوانسالار}}",
+ "group-bureaucrat-member": "{{GENDER:$1|دیوان‌سالار}}",
"group-suppress-member": "{{GENDER:$1|نظارت}}",
"grouppage-user": "{{ns:project}}:کاربران",
"grouppage-autoconfirmed": "{{ns:project}}:کاربران تأییدشده",
@@ -1038,7 +1068,7 @@
"right-createpage": "ایجاد صفحه (در مورد صفحه‌های غیر بحث)",
"right-createtalk": "ایجاد صفحه‌های بحث",
"right-createaccount": "ایجاد حساب‌های کاربری",
- "right-minoredit": "علامت‌زدن ویرایش‌ها به‌عنوان جزئی",
+ "right-minoredit": "علامت‌زدن ویرایش‌ها به عنوان جزئی",
"right-move": "انتقال صفحه",
"right-move-subpages": "انتقال صفحات به همراه زیر‌صفحات‌شان",
"right-move-rootuserpages": "انتقال صفحه‌های کاربری سرشاخه",
@@ -1068,14 +1098,15 @@
"right-viewsuppressed": "مشاهده نسخه‌هایی که از کاربران مخفی شده‌اند",
"right-suppressionlog": "مشاهدهٔ سیاهه‌های خصوصی",
"right-block": "قطع دسترسی ویرایشی دیگر کاربران",
- "right-blockemail": "قطع دسترسی دیگر کاربران برای ارسال رایانامه",
- "right-hideuser": "قطع دسترسی کاربر و پنهان‌کردن آن از دید عموم",
+ "right-blockemail": "قطع دسترسی دیگر کاربران برای ارسال ایمیل",
+ "right-hideuser": "قطع دسترسی کاربر و پنهان کردن آن از دید عموم",
"right-ipblock-exempt": "تاثیر نپذیرفتن از قطع دسترسی‌های آی‌پی، خودکار یا فاصله‌ای",
"right-proxyunbannable": "تاثیر نپذیرفتن از قطع دسترسی خودکار پروکسی‌ها",
"right-unblockself": "بازکردن دسترسی خود",
"right-protect": "تغییر میزان محافظت صفحات و ویرایش صفحات محافظت‌شده آبشاری",
- "right-editprotected": "ویرایش صفحه‌های محافظت‌شده به‌عنوان «{{int:protect-level-sysop}}»",
+ "right-editprotected": "ویرایش صفحه‌های محافظت‌شده به عنوان «{{int:protect-level-sysop}}»",
"right-editsemiprotected": "ویرایش صفحه حفاظت‌شده به عنوان \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "ویرایش مدل محتوای یک صفحه",
"right-editinterface": "ویرایش واسط کاربری",
"right-editusercssjs": "ویرایش صفحه‌های CSS و JS دیگر کاربرها",
"right-editusercss": "ویرایش صفحه‌های CSS دیگر کاربرها",
@@ -1084,11 +1115,11 @@
"right-editmyuserjs": "پرونده‌های جاوااسکریپت کاربری خود را ویرایش کنید",
"right-viewmywatchlist": "فهرست پیگیری‌های خود را ببینید",
"right-editmywatchlist": "فهرست پیگیری‌های خود را ویرایش کنید. توجه داشته باشید برخی از اقدامات حتی بدون این دسترسی هم صفحات را اضافه می‌کنند.",
- "right-viewmyprivateinfo": "داده‌های خصوصی خود را ببینید (مانند رایانشانی و نام واقعی)",
- "right-editmyprivateinfo": "داده‌های خصوصی خود را ویرایش کنید (مانند رایانشانی و نام واقعی)",
+ "right-viewmyprivateinfo": "داده‌های خصوصی خود را ببینید (مانند آدرس ایمیل و نام واقعی)",
+ "right-editmyprivateinfo": "داده‌های خصوصی خود را ویرایش کنید (مانند آدرس ایمیل و نام واقعی)",
"right-editmyoptions": "ترجیحات خود را ویرایش",
"right-rollback": "واگردانی سریع ویرایش‌های آخرین کاربری که یک صفحه را ویرایش کرده‌است",
- "right-markbotedits": "علامت‌زدن ویرایش‌های واگردانی‌شده به‌عنوان ویرایش ربات",
+ "right-markbotedits": "علامت‌زدن ویرایش‌های واگردانی‌شده به عنوان ویرایش ربات",
"right-noratelimit": "تاثیر نپذیرفتن از محدودیت سرعت",
"right-import": "واردکردن صفحه از ویکی‌های دیگر",
"right-importupload": "واردکردن صفحه از طریق بارگذاری پرونده",
@@ -1101,8 +1132,9 @@
"right-userrights-interwiki": "ویرایش اختیارات کاربرهای ویکی‌های دیگر",
"right-siteadmin": "قفل‌کردن و بازکردن پایگاه داده‌ها",
"right-override-export-depth": "برون‌بری صفحه‌ها شامل صفحه‌های پیوند شده تا عمق ۵",
- "right-sendemail": "ارسال رایانامه به دیگر کاربران",
+ "right-sendemail": "ارسال ایمیل به دیگر کاربران",
"right-passwordreset": "مشاهدهٔ نامه‌های تنظیم مجدد گذرواژه",
+ "right-managechangetags": "ایجاد و حذف [[Special:Tags|برچسب‌ها]] از پایگاه داده",
"newuserlogpage": "سیاههٔ ایجاد کاربر",
"newuserlogpagetext": "این سیاهه‌ای از نام‌های کاربری تازه‌ساخته‌شده است.",
"rightslog": "سیاههٔ اختیارات کاربر",
@@ -1143,11 +1175,13 @@
"action-userrights": "ویرایش همهٔ اختیارات کاربری",
"action-userrights-interwiki": "ویرایش اختیارات کاربری کاربران یک ویکی دیگر",
"action-siteadmin": "قفل‌کردن و بازکردن پایگاه داده‌ها",
- "action-sendemail": "ارسال رایانامه",
+ "action-sendemail": "ارسال ایمیل",
"action-editmywatchlist": "فهرست پیگیری‌های خود را ویرایش کنید",
"action-viewmywatchlist": "فهرست پیگیری‌های خود را ببینید",
"action-viewmyprivateinfo": "اطلاعات خصوصی خود را ببینید",
"action-editmyprivateinfo": "اطلاعات خصوصی خود را ویرایش کنید",
+ "action-editcontentmodel": "ویرایش مدل محتوای یک صفحه",
+ "action-managechangetags": "ایجاد و حذف تگ‌ها از پایگاه داده",
"nchanges": "$1 تغییر",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|از آخرین بازدید}}",
"enhancedrc-history": "تاریخچه",
@@ -1160,7 +1194,7 @@
"recentchanges-label-minor": "این یک ویرایش جزئی‌است",
"recentchanges-label-bot": "این ویرایش را یک ربات انجام داده‌است",
"recentchanges-label-unpatrolled": "این ویرایش هنوز گشت‌زنی نشده‌است",
- "recentchanges-label-plusminus": "حجم صفحه به اندازه این بایت‌ها تغییر یافته‌است",
+ "recentchanges-label-plusminus": "حجم صفحه به اندازه این مقدار بایت تغییر یافته است",
"recentchanges-legend-heading": "'''اختصارها:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنین به [[Special:NewPages|فهرست صفحات تازه]] نگاه کنید)",
"recentchanges-legend-plusminus": "(<em>±۱۲۳</em>)",
@@ -1168,22 +1202,22 @@
"rclistfrom": "نمایش تغییرات تازه با شروع از $3 $2",
"rcshowhideminor": "$1 ویرایش‌های جزئی",
"rcshowhideminor-show": "نمایش",
- "rcshowhideminor-hide": "پنهان‌کردن",
+ "rcshowhideminor-hide": "پنهان کردن",
"rcshowhidebots": "$1 ربات‌ها",
"rcshowhidebots-show": "نمایش",
- "rcshowhidebots-hide": "پنهان‌کردن",
+ "rcshowhidebots-hide": "پنهان کردن",
"rcshowhideliu": "$1 کاربران ثبت‌نام‌کردە",
"rcshowhideliu-show": "نمایش",
- "rcshowhideliu-hide": "پنهان‌کردن",
+ "rcshowhideliu-hide": "پنهان کردن",
"rcshowhideanons": "$1 کاربران ناشناس",
"rcshowhideanons-show": "نمایش",
- "rcshowhideanons-hide": "پنهان‌کردن",
+ "rcshowhideanons-hide": "پنهان کردن",
"rcshowhidepatr": "$1 ویرایش‌های گشت‌خورده",
"rcshowhidepatr-show": "نمایش",
- "rcshowhidepatr-hide": "پنهان‌کردن",
+ "rcshowhidepatr-hide": "پنهان کردن",
"rcshowhidemine": "$1 ویرایش‌های من",
"rcshowhidemine-show": "نمایش",
- "rcshowhidemine-hide": "پنهان‌کردن",
+ "rcshowhidemine-hide": "پنهان کردن",
"rclinks": "نمایش آخرین $1 تغییر در $2 روز اخیر<br />$3",
"diff": "تفاوت",
"hist": "تاریخچه",
@@ -1218,9 +1252,9 @@
"uploaderror": "خطای بارگذاری",
"upload-recreate-warning": "'''هشدار: پرونده‌ای با این نام حذف یا منتقل شده است.'''\n\nبرای راحتی، سیاههٔ حذف و انتقال برای این صفحه در زیر آمده است:",
"uploadtext": "از فرم زیر برای بارگذاری کردن پرونده‌های جدید استفاده کنید.\nبرای دیدن پرونده‌هایی که قبلاً بارگذاری شده‌اند به [[Special:FileList|فهرست پرونده‌ها]] بروید. بارگذاری نیز مجدد در [[Special:Log/upload|سیاههٔ بارگذاری‌ها]] و حذف پرونده‌ها در [[Special:Log/delete|deletion log]] ثبت می‌شود.\n\nبعد از این که پرونده‌ای را بارگذاری کردید، به این سه شکل می‌توانید آن را در صفحات استفاده کنید:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' برای استفاده از نسخه کامل پرونده\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' برای استفاده از یک نسخه ۲۰۰ پیکسلی از پرونده درون یک جعبه در سمت چپ متن که عبارت alt text در آن به عنوان توضیح استفاده شده\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' برای ایجاد یک پیونده مستقیم به پرونده بدون نمایش پرونده",
- "upload-permitted": "انواع مجاز پرونده‌ها: $1.",
- "upload-preferred": "انواع ترجیح‌داده شده پرونده‌ها: $1.",
- "upload-prohibited": "انواع نامجاز پرونده‌ها: $1.",
+ "upload-permitted": "{{PLURAL:$2|نوع|انواع}} پرونده مجاز: $1.",
+ "upload-preferred": "{{PLURAL:$2|نوع|انواع}} پرونده ترجیح‌داده شده: $1.",
+ "upload-prohibited": "{{PLURAL:$2|نوع|انواع}} پرونده نامجاز: $1.",
"uploadlogpage": "سیاههٔ بارگذاری‌ها",
"uploadlogpagetext": "فهرست زیر فهرستی از آخرین بارگذاری پرونده‌ها است.\nبرای مرور دیداری [[Special:NewFiles|نگارخانهٔ پرونده‌های جدید]] را ببینید.",
"filename": "نام پرونده",
@@ -1237,7 +1271,7 @@
"badfilename": "نام پرونده به «$1» تغییر کرد.",
"filetype-mime-mismatch": "پسوند پرونده «$1.‎» با نوع MIME آن ($2) مطابقت ندارد.",
"filetype-badmime": "پرونده‌هایی که نوع MIME آن‌ها $1 باشد برای بارگذاری مجاز نیستند.",
- "filetype-bad-ie-mime": "این پرونده را نمی‌توانید بارگذاری کنید زیرا اینترنت اکسپلورر آن را به‌عنوان «$1» تشخیص می‌دهد، که یک نوع پروندهٔ نامجاز و احتمالاً خطرناک است.",
+ "filetype-bad-ie-mime": "این پرونده را نمی‌توانید بارگذاری کنید زیرا اینترنت اکسپلورر آن را به عنوان «$1» تشخیص می‌دهد، که یک نوع پروندهٔ نامجاز و احتمالاً خطرناک است.",
"filetype-unwanted-type": "'''«‎.‎$1»''' یک نوع پرونده ناخواسته است.\n{{PLURAL:$3|نوع پرونده ترجیح داده شده|انواع پرونده ترجیح داده شده}} از این قرار است: $2 .",
"filetype-banned-type": "&lrm;'''\".$1\"''' {{PLURAL:$4|یک نوع پروندهٔ نامجاز است|انواعی پروندهٔ نامجاز هستند}}.\n{{PLURAL:$3|نوع پروندهٔ مجاز|انواع پروندهٔ مجاز}} از این قرار است: $2.",
"filetype-missing": "این پرونده پسوند (مثلاً «‎.jpg») ندارد.",
@@ -1478,7 +1512,6 @@
"statistics": "آمار",
"statistics-header-pages": "آمار صفحه",
"statistics-header-edits": "آمار ویرایش‌ها",
- "statistics-header-views": "آمار بازدیدها",
"statistics-header-users": "آمار کاربران",
"statistics-header-hooks": "آمارهای دیگر",
"statistics-articles": "صفحه‌های محتوایی",
@@ -1487,13 +1520,9 @@
"statistics-files": "پرونده‌های بارگذاری‌شده",
"statistics-edits": "ویرایش صفحه‌ها از هنگامی که {{SITENAME}} راه‌اندازی شده",
"statistics-edits-average": "متوسط ویرایش‌ها به ازای هر صفحه",
- "statistics-views-total": "مجموع بازدیدها",
- "statistics-views-total-desc": "بازدید صفحه‌های ناموجود و صفحه‌های ویژه شامل نشده‌است",
- "statistics-views-peredit": "تعداد بازدید به ازای هر ویرایش",
"statistics-users": "[[Special:ListUsers|کاربران]] ثبت‌نام کرده",
"statistics-users-active": "کاربران فعال",
"statistics-users-active-desc": "کاربرانی که در {{PLURAL:$1|روز|$1 روز}} قبل فعالیتی انجام داده‌اند",
- "statistics-mostpopular": "صفحه‌هایی که بیشترین تعداد بازدیدکننده را داشته‌اند",
"pageswithprop": "صفحه‌های دارای خاصیت صفحه",
"pageswithprop-legend": "صفحه‌های دارای خاصیت صفحه",
"pageswithprop-text": "این صفحه فهرستی است از صفحه‌هایی که از یک خاصیت صفحهٔ خاص استفاده می‌کنند.",
@@ -1534,9 +1563,9 @@
"uncategorizedtemplates": "الگوهای رده‌بندی‌نشده",
"unusedcategories": "رده‌های استفاده‌نشده",
"unusedimages": "پرونده‌های استفاده‌نشده",
- "popularpages": "صفحه‌های محبوب",
"wantedcategories": "رده‌های مورد نیاز",
"wantedpages": "صفحه‌های مورد نیاز",
+ "wantedpages-summary": "فهرست صفحه‌های ناموجود با بیشترین پیوند به آنها، به استثنای صفحه‌هایی که فقط تغییرمسیر به آنها دارند. برای یک فهرست از صفحه‌های ناموجود که تغییرمسیر به آنها دارند، [[{{#special:BrokenRedirects}}]] را ببینید.",
"wantedpages-badtitle": "عنوان نامجاز در مجموعهٔ نتایج: $1",
"wantedfiles": "پرونده‌های مورد نیاز",
"wantedfiletext-cat": "پرونده‌های زیر استفاده می‌شوند اما موجود نیستند. همچنین ممکن است پرونده‌های مخازن خارجی با وجود موجود بودن در اینجا فهرست شوند. هرگونه رتبه مثبت کاذب <del>خط خواهد خورد.</del> علاوه بر این، صفحاتی که پرونده‌هایی ناموجود را در خود جای داده‌اند در [[:$1]] فهرست شده‌اند.",
@@ -1546,7 +1575,7 @@
"wantedtemplates": "الگوهای مورد نیاز",
"mostlinked": "صفحه‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
"mostlinkedcategories": "رده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
- "mostlinkedtemplates": "ببشترین صفحات تراگنجانده‌شده",
+ "mostlinkedtemplates": "بیشترین صفحات تراگنجانده‌شده",
"mostcategories": "صفحه‌های دارای بیشترین رده",
"mostimages": "پرونده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
"mostinterwikis": "صفحه‌های دارای بیشترین میان‌ویکی",
@@ -1562,12 +1591,12 @@
"protectedpages-indef": "فقط محافظت‌های بی‌پایان",
"protectedpages-summary": "در این صفحه فهرست صفحات موجود است که در حال حاضر محافظت شده اند. برای فهرست عنوان‌هایی که از ایجاد محافظت شده‌اند، به [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] مراجعه کنید.",
"protectedpages-cascade": "فقط محافظت‌های آبشاری",
- "protectedpages-noredirect": "پنهان‌کردن تغییر مسیرها",
+ "protectedpages-noredirect": "پنهان کردن تغییر مسیرها",
"protectedpagesempty": "در حال حاضر هیچ‌صفحه‌ای محافظت نشده‌است.",
"protectedpages-timestamp": "برچسب زمان",
"protectedpages-page": "صفحه",
"protectedpages-expiry": "انقضا",
- "protectedpages-performer": "در حال حفاظت از کاربر",
+ "protectedpages-performer": "کاربر حفاظت‌کننده",
"protectedpages-params": "پارامترهای حفاظت",
"protectedpages-reason": "دلیل",
"protectedpages-unknown-timestamp": "ناشناس",
@@ -1596,10 +1625,12 @@
"pager-older-n": "{{PLURAL:$1|یک مورد قدیمی‌تر|$1 مورد قدیمی‌تر}}",
"suppress": "نظارت",
"querypage-disabled": "این صفحه ویژه به دلایل عملکردی غیرفعال شده‌است.",
+ "apihelp": "راهنمای API",
+ "apihelp-no-such-module": "پودمان \" $1 \" یافت نشد.",
"booksources": "منابع کتاب",
"booksources-search-legend": "جستجوی منابع کتاب",
"booksources-isbn": "شابک:",
- "booksources-go": "برو",
+ "booksources-search": "جستجو",
"booksources-text": "در زیر فهرستی از پیوندها به وبگاه‌های دیگر آمده‌است که کتاب‌های نو و دست دوم می‌فروشند، و همچنین ممکن است اطلاعات بیشتری راجع به کتاب مورد نظر شما داشته باشند:",
"booksources-invalid-isbn": "شابک داده شده مجاز به نظر نمی‌رسد؛ از جهت اشکالات هنگام کپی کردن از منبع اصلی بررسی کنید.",
"specialloguserlabel": "مجری:",
@@ -1634,7 +1665,7 @@
"deletedcontributions-title": "مشارکت‌های حذف‌شده",
"sp-deletedcontributions-contribs": "مشارکت‌ها",
"linksearch": "جستجوی پیوندهای بیرونی",
- "linksearch-pat": "جستجوی الگو:",
+ "linksearch-pat": "الگوی جستجو:",
"linksearch-ns": "فضای نام:",
"linksearch-ok": "جستجو",
"linksearch-text": "نشانه‌هایی مانند «‎*.wikipedia.org» را می‌توان استفاده کرد.\nحداقل یک دامنه سطح بالا ، به عنوان مثال \"*.org\" نیاز دارد.<br />\n{{PLURAL:$2|پروتکل|پروتکل‌های}} پشتیبانی‌شده: <code>$1</code> (پیش‌فرض برای http:// در صورت مشخص نشدن پروتکل تنظیم شده‌است).",
@@ -1684,23 +1715,23 @@
"trackingcategories-nodesc": "توضیحی وجود ندارد.",
"trackingcategories-disabled": "رده غیرفعال‌شده است",
"mailnologin": "نشانی‌ای از فرستنده موجود نیست",
- "mailnologintext": "برای فرستادن رایانامه به کاربران دیگر باید [[Special:UserLogin|به سامانه وارد شوید]] و نشانی رایانامهٔ معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.",
- "emailuser": "فرستادن نامه به این کاربر",
- "emailuser-title-target": "رایانامه به {{GENDER:$1|کاربر}}",
- "emailuser-title-notarget": "رایانامه به کاربر",
- "emailpage": "رایانامه به کاربر",
- "emailpagetext": "شما می‌توانید از فرم زیر برای ارسال یک رایانامه به این {{GENDER:$1|کاربر}} استفاده کنید.\nنشانی رایانامه‌ای که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستنده (From) نامه خواهد آمد، تا گیرنده بتواند پاسخ دهد.",
- "defemailsubject": "رایانامه {{SITENAME}} از طرف کاربر «$1»",
- "usermaildisabled": "رایانامهٔ کاربر غیرقعال است",
- "usermaildisabledtext": "شما در این ویکی نمی‌توانید به دیگر کاربران رایانامه بفرستید",
- "noemailtitle": "نشانی رایانامه موجود نیست",
- "noemailtext": "این کاربر نشانی رایانامهٔ معتبری مشخص نکرده است،",
- "nowikiemailtext": "این کاربر انتخاب کرده که از دیگر کاربران رایانامه دریافت نکند.",
+ "mailnologintext": "برای ارسال ایمیل به کاربران دیگر باید [[Special:UserLogin|به سیستم وارد شوید]] و آدرس ایمیل معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.",
+ "emailuser": "ایمیل به این کاربر",
+ "emailuser-title-target": "ارسال ایمیل به این {{GENDER:$1|کاربر}}",
+ "emailuser-title-notarget": "ارسال ایمیل به کاربر",
+ "emailpage": "ایمیل به کاربر",
+ "emailpagetext": "شما می‌توانید از فرم زیر برای ارسال ایمیلی به این {{GENDER:$1|کاربر}} استفاده کنید.\nنشانی ایمیلی که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستندهٔ ایمیل خواهد آمد، تا گیرنده بتواند پاسخ دهد.",
+ "defemailsubject": "ایمیل {{SITENAME}} از طرف کاربر «$1»",
+ "usermaildisabled": "ایمیل کاربر غیر قعال است",
+ "usermaildisabledtext": "شما در این ویکی نمی‌توانید به دیگر کاربران ایمیل ارسال کنید",
+ "noemailtitle": "آدرس ایمیل موجود نیست",
+ "noemailtext": "این کاربر آدرس ایمیل معتبری مشخص نکرده است.",
+ "nowikiemailtext": "این کاربر انتخاب کرده که از دیگر کاربران ایمیل دریافت نکند.",
"emailnotarget": "نام کاربری ناموجود یا نامعتبر برای گیرنده.",
"emailtarget": "نام کاربری دریافت‌کننده را وارد کنید",
"emailusername": "نام کاربری:",
"emailusernamesubmit": "ارسال",
- "email-legend": "ارسال یک نامه به کاربر دیگر {{SITENAME}}",
+ "email-legend": "ارسال ایمیل به کاربر دیگر {{SITENAME}}",
"emailfrom": "از:",
"emailto": "به:",
"emailsubject": "عنوان:",
@@ -1708,9 +1739,9 @@
"emailsend": "بفرست",
"emailccme": "رونوشت پیغام را برایم بفرست.",
"emailccsubject": "رونوشت پیغام شما به $1: $2",
- "emailsent": "رایانامه فرستاده شد",
- "emailsenttext": "پیغام رایانامه شما فرستاده شد.",
- "emailuserfooter": "این رایانامه با استفاده از ویژگی «فرستادن نامه به این کاربر» {{SITENAME}} توسط $1 به $2 فرستاده شد.",
+ "emailsent": "ایمیل ارسال شد",
+ "emailsenttext": "پیام ایمیل شما فرستاده شد.",
+ "emailuserfooter": "این ایمیل با استفاده از ویژگی «ایمیل به این کاربر» {{SITENAME}} توسط $1 به $2 ارسال شد.",
"usermessage-summary": "گذاشتن پیغام سامانه.",
"usermessage-editor": "پیغام رسان سامانه",
"watchlist": "فهرست پی‌گیری",
@@ -1732,15 +1763,15 @@
"notanarticle": "صفحه محتوایی نیست",
"notvisiblerev": "آخرین نسخه توسط کاربری دیگر حذف شده‌است",
"watchlist-details": "بدون احتساب صفحه‌های جداگانهٔ بحث، {{PLURAL:$1|$1 صفحه|$1 صفحه}} در فهرست پی‌گیری‌های شما قرار {{PLURAL:$1|دارد|دارند}}.",
- "wlheader-enotif": "آگاه‌سازی رایانامه‌ای فعال است.",
+ "wlheader-enotif": "ایمیل‌های اعلان فعال است.",
"wlheader-showupdated": "صفحه‌هایی که پس از آخرین بازدید شما تغییر کرده‌اند '''پررنگ''' نمایش داده شده‌اند.",
"wlnote": "در زیر {{PLURAL:$1|تغییری|<strong>$1</strong> تغییری}} که در {{PLURAL:$2|ساعت|<strong>$2</strong> ساعت}} گذشته انجام شده موجود است، تاریخ آخرین بازیابی: $3، $4",
- "wlshowlast": "نمایش آخرین $1 ساعت $2 روز $3",
+ "wlshowlast": "نمایش آخرین $1 ساعت $2 روز",
"watchlist-options": "گزینه‌های پی‌گیری",
"watching": "پی‌گیری...",
"unwatching": "توقف پی‌گیری...",
"watcherrortext": "ایرادی در هنگام عوض کردن تنظیمات فهرست پیگیرتان برای «$1» رخ داد.",
- "enotif_reset": "نشان‌گذاری همهٔ صفحات به‌عنوان بازدیدشده",
+ "enotif_reset": "نشان‌گذاری همهٔ صفحات به عنوان بازدیدشده",
"enotif_impersonal_salutation": "کاربر {{SITENAME}}",
"enotif_subject_deleted": "{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} حذف شد.",
"enotif_subject_created": "{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} ایجاد شده.",
@@ -1755,7 +1786,7 @@
"enotif_lastvisited": "برای دیدن همهٔ تغییرات از آخرین باری که سر زده‌اید $1 را ببینید.",
"enotif_lastdiff": "برای نمایش این تغییر $1 را ببینید.",
"enotif_anon_editor": "کاربر ناشناس $1",
- "enotif_body": "$WATCHINGUSERNAME گرامی،\n\n$PAGEINTRO $NEWPAGE\n\n\nتوضیح ویراستار: $PAGESUMMARY $PAGEMINOREDIT\n\nتماس با ویراستار:\nنامه: $PAGEEDITOR_EMAIL\nویکی: $PAGEEDITOR_WIKI\n\nتا هنگامی که به صفحه سر نزده‌اید، در صورت رخ‌دادنِ احتمالیِ فعالیت بیشتر، تا زمانی که در با کاربریتان در سامانه هستید، اعلانیه‌ای برای شما فرستاده نخواهد شد.\nشما همچنین می‌توانید در صفحهٔ پی‌گیری‌های خود پرچم‌های مربوط به آگاهی‌رسانی را صفر کنید همچنین می‌توانید پرچم‌های آگاهی‌سازی را بازنشانی کنید.\n\nدوستدار شما، سامانهٔ آگاهی‌رسانی {{SITENAME}}\n\n--\nبرای تغییر تنظیمات فهرست آگاهی‌رسانی رایانامه‌ای به {{canonicalurl:{{#special:EditWatchlist}}}} بروید.\n\nبرای تغییر تنظیمات فهرست پی‌گیری‌هایتان به {{canonicalurl:{{#special:EditWatchlist}}}} بروید.\n\nبرای حذف صفحه از فهرست پی‌گیری‌هایتان به $UNWATCHURL بروید.\n\nبازخورد و کمک بیشتر:\n$HELPPAGE",
+ "enotif_body": "$WATCHINGUSERNAME گرامی،\n\n$PAGEINTRO $NEWPAGE\n\n\nتوضیح ویراستار: $PAGESUMMARY $PAGEMINOREDIT\n\nتماس با ویراستار:\nنامه: $PAGEEDITOR_EMAIL\nویکی: $PAGEEDITOR_WIKI\n\nتا هنگامی که به صفحه سر نزده‌اید، در صورت رخ‌دادنِ احتمالیِ فعالیت بیشتر، تا زمانی که در با کاربریتان در سامانه هستید، اعلانیه‌ای برای شما فرستاده نخواهد شد.\nشما همچنین می‌توانید در صفحهٔ پی‌گیری‌های خود پرچم‌های مربوط به آگاهی‌رسانی را صفر کنید همچنین می‌توانید پرچم‌های آگاهی‌سازی را بازنشانی کنید.\n\nدوستدار شما، سامانهٔ آگاهی‌رسانی {{SITENAME}}\n\n--\nبرای تغییر تنظیمات فهرست ایمیل‌های اعلان به {{canonicalurl:{{#special:EditWatchlist}}}} بروید.\n\nبرای تغییر تنظیمات فهرست پی‌گیری‌هایتان به {{canonicalurl:{{#special:EditWatchlist}}}} بروید.\n\nبرای حذف صفحه از فهرست پی‌گیری‌هایتان به $UNWATCHURL بروید.\n\nبازخورد و کمک بیشتر:\n$HELPPAGE",
"created": "ایجاد شده",
"changed": "تغییر یافته",
"deletepage": "حذف صفحه",
@@ -1784,7 +1815,6 @@
"deleteprotected": "شما نمی‌توانید این صفحه را پاک کنید چون که از آن محافظت شده‌است.",
"deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحه‌های دیگری]] هستند که به صفحه‌ای که شما در حال حذف آن هستید پیوند دارند یا آن را تراگنجانیده‌اند.",
"rollback": "واگردانی ویرایش‌ها",
- "rollback_short": "واگردانی",
"rollbacklink": "واگردانی",
"rollbacklinkcount": "واگردانی $1 ویرایش",
"rollbacklinkcount-morethan": "واگردانی بیش از $1 ویرایش",
@@ -1894,6 +1924,7 @@
"namespace": "فضای نام:",
"invert": "انتخاب برعکس شود",
"tooltip-invert": "این جعبه را علامت بزنید تا تغییرات صفحه‌های داخل فضای نام انتخاب شده (و دیگر فضاهای نام علامت زده شده) پنهان شوند",
+ "tooltip-whatlinkshere-invert": "این جعبه را برای پنهان کردن پیوند صفحاتی که فضای نامشان انتخاب شده‌است، انتخاب کنید.",
"namespace_association": "فضای نام مرتبط",
"tooltip-namespace_association": "این جعبه را علامت بزنید تا فضای نام بحث یا موضوع مرتبط با فضای نام انتخاب شده هم شامل شود",
"blanknamespace": "(اصلی)",
@@ -1943,7 +1974,7 @@
"autoblockid": "شناسه قطع دسترسی خودکار #$1",
"block": "بستن کاربر",
"unblock": "بازکردن کاربر",
- "blockip": "مسدودکردن {{GENDER:$1|کاربر}}",
+ "blockip": "بستن {{GENDER:$1|کاربر}}",
"blockip-legend": "بستن کاربر",
"blockiptext": "از فرم زیر برای بستن دسترسی ویرایش یک نشانی آی‌پی یا نام کاربری مشخص استفاده کنید.\nاین کار فقط فقط باید برای جلوگیری از خرابکاری و بر اساس [[{{MediaWiki:Policy-url}}|سیاست قطع دسترسی]] انجام شود.\nدلیل مشخص این کار را در زیر ذکر کنید (مثلاً با ذکر صفحه‌های به‌خصوصی که مورد خرابکاری واقع شده‌اند).",
"ipaddressorusername": "نشانی آی‌پی یا نام کاربری:",
@@ -1952,7 +1983,7 @@
"ipbreason-dropdown": "*دلایل متداول قطع دسترسی\n**واردکردن اطلاعات نادرست\n**پاک‌کردن اطلاعات مفید از صفحات\n**هرزنگاری از طریق درج مکرر پیوند به وب‌گاه‌ها\n**درج چرندیات یا نوشته‌های بی‌معنا در صفحات\n**تهدید یا ارعاب دیگر کاربران\n**سوء استفاده از چند حساب کاربری\n**نام کاربری نامناسب",
"ipb-hardblock": "جلوگیری از ویرایش کردن کاربران ثبت نام کرده از طریق این نشانی آی‌پی",
"ipbcreateaccount": "جلوگیری از ایجاد حساب",
- "ipbemailban": "جلوگیری از ارسال رایانامه",
+ "ipbemailban": "جلوگیری از ارسال ایمیل",
"ipbenableautoblock": "بستن خودکار آخرین نشانی آی‌پی استفاده شده توسط کاربر و نشانی‌های دیگری که از آن‌ها برای ویرایش تلاش می‌کند",
"ipbsubmit": "این کاربر بسته شود",
"ipbother": "زمانی دیگر",
@@ -1983,9 +2014,9 @@
"blocklist": "کاربران بسته‌شده",
"ipblocklist": "کاربران بسته‌شده",
"ipblocklist-legend": "جستجوی کاربر بسته شده",
- "blocklist-userblocks": "پنهان‌کردن بسته‌شدن‌های حساب",
- "blocklist-tempblocks": "پنهان‌کردن بستن‌های موقت",
- "blocklist-addressblocks": "پنهان‌کردن تک آی‌پی‌های بسته شده",
+ "blocklist-userblocks": "پنهان کردن بسته‌شدن‌های حساب",
+ "blocklist-tempblocks": "پنهان کردن بستن‌های موقت",
+ "blocklist-addressblocks": "پنهان کردن تک آی‌پی‌های بسته شده",
"blocklist-rangeblocks": "پنهان کردنی قطع دسترسی بازه‌ها",
"blocklist-timestamp": "برچسب زمان",
"blocklist-target": "هدف",
@@ -2001,7 +2032,7 @@
"anononlyblock": "فقط کاربران گمنام",
"noautoblockblock": "بستن خودکار غیرفعال است",
"createaccountblock": "امکان ایجاد حساب مسدود است",
- "emailblock": "رایانامه مسدود شد",
+ "emailblock": "ایمیل مسدود شد",
"blocklist-nousertalk": "نمی تواند صفحهٔ بحث خود را ویرایش کند",
"ipblocklist-empty": "فهرست بسته‌شدن‌ها خالی‌است.",
"ipblocklist-no-results": "دسترسی حساب کاربری یا نشانی آی‌پی مورد نظر قطع نیست.",
@@ -2009,9 +2040,9 @@
"unblocklink": "باز شود",
"change-blocklink": "تغییر قطع دسترسی",
"contribslink": "مشارکت‌ها",
- "emaillink": "ارسال رایانامه",
+ "emaillink": "ارسال ایمیل",
"autoblocker": "به طور خودکار بسته شد چون آی‌پی شما به تازگی توسط کاربر «[[User:$1|$1]]» استفاده شده‌است.\nدلیل قطع دسترسی $1 چنین است \"$2\"",
- "blocklogpage": "سیاههٔ بسته‌شدن‌ها",
+ "blocklogpage": "سیاههٔ بستن",
"blocklog-showlog": "دسترسی این کاربر در گذشته بسته شده‌است.\nسیاههٔ قطع دسترسی در زیر نمایش یافته است:",
"blocklog-showsuppresslog": "دسترسی این کاربر قبلاً بسته شده و این کاربر پنهان شده‌است.\nسیاههٔ قطع دسترسی در زیر نمایش یافته است:",
"blocklogentry": "«[[$1]]» را تا $2 بست $3",
@@ -2021,7 +2052,7 @@
"block-log-flags-anononly": "فقط کاربران گمنام",
"block-log-flags-nocreate": "قابلیت ایجاد حساب غیرفعال شد",
"block-log-flags-noautoblock": "قطع دسترسی خودکار غیرفعال شد",
- "block-log-flags-noemail": "رایانامه مسدود شد",
+ "block-log-flags-noemail": "ایمیل مسدود شد",
"block-log-flags-nousertalk": "صفحهٔ بحث خود را نمی‌تواند ویرایش کند",
"block-log-flags-angry-autoblock": "قطع دسترسی خودکار پیشرفته فعال شد",
"block-log-flags-hiddenname": "نام کاربری پنهان",
@@ -2042,7 +2073,7 @@
"sorbsreason": "نشانی آی‌پی شما توسط DNSBL مورد استفاده {{SITENAME}} به عنوان یک پروکسی باز گزارش شده‌است.",
"sorbs_create_account_reason": "نشانی آی‌پی شما توسط DNSBL مورد استفاده {{SITENAME}} به عنوان یک پروکسی باز گزارش شده‌است.\nشما اجازهٔ ساختن حساب کاربری ندارید.",
"xffblockreason": "نشانی آی‌پی در X-Forwarded-For header موجود است و پروکسی شما یا سروری که از آن استفاده می‌کنید بسته‌شده‌است. دلیل بسته‌شدن: $1",
- "cant-see-hidden-user": "کاربری که می‌خواهید ببندید قبلاً بسته شده و پنهان گردیده‌است. چون شما دسترسی پنهان‌کردن کاربران را ندارید، نمی‌توانید قطع دسترسی کاربر را ببینید یا ویرایش کنید.",
+ "cant-see-hidden-user": "کاربری که می‌خواهید ببندید قبلاً بسته شده و پنهان گردیده است. چون شما دسترسی پنهان کردن کاربران را ندارید، نمی‌توانید قطع دسترسی کاربر را ببینید یا ویرایش کنید.",
"ipbblocked": "شما نمی‌توانید دسترسی دیگر کاربران را ببندید یا باز کنید زیرا دسترسی خودتان بسته است.",
"ipbnounblockself": "شما مجاز به باز کردن دسترسی خود نیستید.",
"lockdb": "قفل کردن پایگاه داده",
@@ -2064,8 +2095,8 @@
"move-page": "انتقال $1",
"move-page-legend": "انتقال صفحه",
"movepagetext": "با استفاده از فرم زیر نام صفحه تغییر خواهد کرد، و تمام تاریخچه‌اش به نام جدید منتقل خواهد شد.\nعنوان قدیمی تبدیل به یک صفحهٔ تغییرمسیر به عنوان جدید خواهد شد.\nشما می‌توانید تغییرمسیرهایی که به عنوان اصلی اشاره دارند را به صورت خودکار به‌روزرسانی کنید.\nپیوندهای که به عنوان صفحهٔ قدیمی وجود دارند، تغییر نخواهند کرد؛ حتماً تغییرمسیرهای [[Special:DoubleRedirects|دوتایی]] یا [[Special:BrokenRedirects|خراب]] را بررسی کنید.\n'''شما''' مسئول اطمینان از این هستید که پیوندها هنوز به همان‌جایی که قرار است بروند.\n\nتوجه کنید که اگر از قبل صفحه‌ای در عنوان جدید وجود داشته باشد صفحه منتقل '''نخواهد شد'''،\nمگر این آخرین ویرایش تغییرمسیر باشد و در تاریخچهٔ ویرایشی نداشته باشد.\nاین یعنی اگر اشتباه کردید می‌توانید صفحه را به همان جایی که از آن منتقل شده بود برگردانید، و این که نمی‌توانید روی صفحات موجود بنویسید.\n\n'''هشدار!'''\nانتقال صفحات به نام جدید ممکن است تغییر اساسی و غیرمنتظره‌ای برای صفحات محبوب باشد؛\nلطفاً مطمئن شوید که قبل از انتقال دادن صفحه، عواقب این کار را درک می‌کنید.",
- "movepagetext-noredirectfixer": "استفاده از فرم زیر سبب تغییر نام یک صفحه و انتقال تمام تاریخچهٔ آن به نام جدید می‌شود.\nعنوان پیشین تغییرمسیری به عنوان جدید خواهد شد.\nبه خاطر داشته باشید که [[Special:DoubleRedirects|تغییرمسیرهای دوتایی]] یا [[Special:BrokenRedirects|تغییرمسیرهای خراب]] را بررسی کنید.\nشما مسئولید که مطمئن شوید پیوندها به جایی اشاره می‌کنند که قرار است بروند.\n\nتوجه کنید که اگر صفحه‌ای تحت عنوان جدید از قبل موجود باشد، انتقال انجام '''نخواهد شد'''، مگر اینکه صفحه خالی و یا تغییرمسیر باشد و تاریخچهٔ ویرایشی دیگری نداشته باشد.\nاین یعنی اگر صفحه را به نامی اشتباه منتقل کردید می‌توانید این تغییر را واگردانی کنید، اما نمی‌توانید به صفحه‌ای که از قبل موجود است انتقال دهید.\n\n'''هشدار!'''\nانتقال صفحه‌های پربیننده ممکن است عملی غیرمنتظره باشد؛\nلطفاً پیش از انتقال مطمئن شوید از نتیجهٔ کار آگاهید.",
- "movepagetalktext": "صفحهٔ بحث مربوط، اگر وجود داشته باشد، بطور خودکار همراه با مقالهٔ اصلی منتقل خواهد شد '''مگر اینکه''' :\n* در حال انتقال صفحه از این فضای نام به فضای نام دیگری باشید،\n* یک صفحهٔ بحث غیرخالی تحت این نام جدید وجود داشته باشد، یا\n* جعبهٔ زیر را تیک نزده باشید.\n\nدر این حالات، باید صفحه را بطور دستی انتقال داده و یا محتویات دو صفحه را با ویرایش ادغام کنید.",
+ "movepagetext-noredirectfixer": "استفاده از فرم زیر سبب تغییر نام یک صفحه و انتقال تمام تاریخچهٔ آن به نام جدید می‌شود.\nعنوان پیشین تغییرمسیری به عنوان جدید خواهد شد.\nبه خاطر داشته باشید که [[Special:DoubleRedirects|تغییرمسیرهای دوتایی]] یا [[Special:BrokenRedirects|تغییرمسیرهای خراب]] را بررسی کنید.\nشما مسئولید که مطمئن شوید پس از انتقال، پیوندها به عنوان پیشین به جایی منتهی می‌شوند که باید.\n\nتوجه کنید که اگر صفحه‌ای تحت عنوان جدید از قبل موجود باشد، انتقال انجام '''نخواهد شد'''، مگر اینکه صفحه خالی و یا تغییرمسیر باشد و تاریخچهٔ ویرایشی دیگری نداشته باشد.\nاین یعنی اگر صفحه را به نامی اشتباه منتقل کردید می‌توانید این تغییر را واگردانی کنید، اما نمی‌توانید یک صفحه را به صفحه‌ای که از قبل موجود است انتقال دهید.\n\n'''هشدار!'''\nانتقال صفحه‌های پربیننده ممکن است عملی غیرمنتظره باشد؛\nلطفاً پیش از انتقال مطمئن شوید از نتیجهٔ کار آگاهید.",
+ "movepagetalktext": "صفحهٔ بحث مربوط، اگر وجود داشته باشد، بطور خودکار همراه با مقالهٔ اصلی منتقل خواهد شد <strong>مگر اینکه:</strong>\n* در حال انتقال صفحه از این فضای نام به فضای نام دیگری باشید،\n* یک صفحهٔ بحث غیرخالی تحت این نام جدید وجود داشته باشد، یا\n* جعبهٔ زیر را تیک نزده باشید.\n\nدر این حالات، باید صفحه را بطور دستی انتقال داده و یا محتویات دو صفحه را با ویرایش ادغام کنید.",
"movearticle": "انتقال صفحه:",
"moveuserpage-warning": "'''هشدار:''' شما در حال انتقال دادن یک صفحهٔ کاربر هستید. توجه داشته باشید که تنها صفحه منتقل می‌شود و نام کاربر تغییر '''نمی‌یابد'''.",
"movecategorypage-warning": "<strong>هشدار:</strong> شما در حال انتقال صفحه رده هستید. لطفاً توجه داشته باشید که فقط صفحه منتقل خواهد شد و صفحات در رده قدیمی می‌مانند و به رده جدید <em>نمی‌روند</em>.",
@@ -2158,21 +2189,22 @@
"thumbnail-temp-create": "نمی‌توان پروندهٔ بندانگشتی موقت را ساخت",
"thumbnail-dest-create": "نمی‌توان تصویر بندانگشتی را در مقصد ذخیره کرد",
"thumbnail_invalid_params": "پارامترهای نامجاز در تصویر بندانگشتی (thumbnail)",
+ "thumbnail_toobigimagearea": "پرونده‌ای با اندازهٔ بیشتر از $1",
"thumbnail_dest_directory": "اشکال در ایجاد پوشهٔ مقصد",
"thumbnail_image-type": "تصویر از نوع پشتیبانی نشده",
"thumbnail_gd-library": "تنظیمات ناقص کتابخانهٔ GD: عملکرد $1 وجود ندارد",
"thumbnail_image-missing": "پرونده به نظر گم شده‌است: $1",
"thumbnail_image-failure-limit": "تلاش‌های ناموفق اخیر بسیاری ($1 یا بیشتر) برای ارائهٔ این تصویر کوچک وجود داشته‌ است. لطفأ بعداً دوباره تلاش کنید.",
"import": "درون‌ریزی صفحات",
- "importinterwiki": "درون‌ریزی تراویکی",
- "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درون‌ریزی شود.\nتاریخ نسخه‌ها و نام ویرایش‌کنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درون‌ریزی صفحات در [[Special:Log/import|سیاههٔ درون‌ریزی‌ها]] درج خواهد شد.",
+ "importinterwiki": "درون‌ریزی از یک ویکی دیگر",
+ "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درون‌ریزی شود.\nتاریخ نسخه‌ها و نام ویرایش‌کنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درون‌ریزی صفحات از ویکی دیگر در [[Special:Log/import|سیاههٔ درون‌ریزی‌ها]] درج خواهد شد.",
"import-interwiki-sourcewiki": "ویکی منبع:",
"import-interwiki-sourcepage": "صفحهٔ مبدأ:",
"import-interwiki-history": "تمام نسخه‌های تاریخچهٔ این صفحه انتقال داده شود",
"import-interwiki-templates": "تمام الگوها را شامل شود",
"import-interwiki-submit": "درون‌ریزی شود",
"import-interwiki-namespace": "فضای نام مقصد:",
- "import-interwiki-rootpage": "مقصد صفحه ٔ مبنا (اختیاری):",
+ "import-interwiki-rootpage": "ریشهٔ صفحهٔ مقصد (اختیاری):",
"import-upload-filename": "نام پرونده:",
"import-comment": "توضیح:",
"importtext": "لطفاً پرونده را از ویکی منبع با کمک [[Special:Export|ابزار برون‌بری]] دریافت کنید.\nسپس آن را روی دستگاه‌تان ذخیره کنید و اینجا بارگذاری نمایید.",
@@ -2185,14 +2217,14 @@
"importcantopen": "پروندهٔ درون‌ریزی صفحات باز نشد",
"importbadinterwiki": "پیوند میان‌ویکی نادرست",
"importsuccess": "درون‌ریزی با موفقیت انجام شد!",
- "importnosources": "هیچ منبعی برای درون‌ریزی اطلاعات از ویکی دیگر تعریف نشده‌است.",
+ "importnosources": "هیچ منبعی برای درون‌ریزی اطلاعات از ویکی‌های دیگر تعریف نشده‌است.",
"importnofile": "هیچ پرونده‌ای برای درون‌ریزی بارگذاری نشده‌است.",
"importuploaderrorsize": "در بارگذاری پروندهٔ درون‌ریزی، اشکال رخ داد.\nاندازهٔ پرونده بیشتر از حداکثر اندازهٔ مجاز است.",
"importuploaderrorpartial": "در بارگذاری پروندهٔ درون‌ریزی، اشکال رخ داد. پرونده به طور ناقص بارگذاری شده‌است.",
"importuploaderrortemp": "در بارگذاری پروندهٔ درون‌ریزی، اشکال رخ داد.\nپوشهٔ موقت پیدا نشد.",
"import-parse-failure": "خطا در تجزیهٔ اکس‌ام‌ال بارگذاری‌شده",
"import-noarticle": "صفحه‌ای برای بارگذاری وجود ندارد!",
- "import-nonewrevisions": "هیچ بازبینی وارد نشده (همه یا در حال حاضر وجود دارند، یا به دلیل خطا‌ها نادیده گرفته شده‌اند).",
+ "import-nonewrevisions": "نسخه‌ای درون‌ریزی نشد (همه یا در حال حاضر وجود دارند، یا به دلیل خطا‌ها نادیده گرفته شده‌اند).",
"xml-error-string": "$1 در سطر $2، ستون $3 (بایت $4): $5",
"import-upload": "بارگذاری داده اکس‌ام‌ال",
"import-token-mismatch": "از دست رفتن اطلاعات نشست کاربری. لطفاً دوباره امتحان کنید.",
@@ -2209,18 +2241,15 @@
"import-rootpage-nosubpage": "فضای نام \"$1\" صفحهٔ مبنا اجازهٔ زیرصفحه نمی‌دهد.",
"importlogpage": "سیاههٔ درون‌ریزی‌ها",
"importlogpagetext": "درون‌ریزی صفحات به همراه تاریخچهٔ ویرایش آن‌ها از ویکی‌های دیگر.",
- "import-logentry-upload": "[[$1]] را از طریق بارگذاری پرونده درون‌ریزی کرد",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} واردشده",
- "import-logentry-interwiki": "$1 را تراویکی کرد",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} واردشده از $2",
"javascripttest": "آزمایش جاوا اسکریپت",
- "javascripttest-title": "در حال اجرای آزمایش‌های $1",
"javascripttest-pagetext-noframework": "این صفحه برای اجرای آزمایش‌های جاوا اسکریپت کنار گذاشته شده‌است.",
"javascripttest-pagetext-unknownframework": "چارچوب آزمایشی ناشناخته «$1».",
+ "javascripttest-pagetext-unknownaction": "تابع ناشناختهٔ \"$1\".",
"javascripttest-pagetext-frameworks": "لطفاً یکی از چارچوب‌های آزمایش زیر را انتخاب کنید: $1",
"javascripttest-pagetext-skins": "پوسته‌ای را برای اجرای آزمایش‌ها انتخاب کنید:",
"javascripttest-qunit-intro": "[$1 مستندات آزمایش] را در mediawiki.org ببینید.",
- "javascripttest-qunit-heading": "مجموعه آزمایش QUnit جاوااسکریپت برای مدیاویکی",
"tooltip-pt-userpage": "صفحهٔ کاربری شما",
"tooltip-pt-anonuserpage": "صفحهٔ کاربری نشانی آی‌پی‌ای که با آن ویرایش می‌کنید",
"tooltip-pt-mytalk": "صفحهٔ بحث شما",
@@ -2230,6 +2259,7 @@
"tooltip-pt-mycontris": "فهرست مشارکت‌های شما",
"tooltip-pt-login": "توصیه می‌شود که به سامانه وارد شوید، گرچه اجباری نیست",
"tooltip-pt-logout": "خروج از سامانه",
+ "tooltip-pt-createaccount": "از شما دعوت می‌شود که حساب کاربری بسازید و به سامانه وارد شوید؛ هرچند که ساخت حساب کاربری اختیاری است.",
"tooltip-ca-talk": "گفتگو پیرامون محتوای صفحه",
"tooltip-ca-edit": "شما می‌توانید این صفحه را ویرایش کنید. لطفاً پیش از ذخیره از دکمهٔ پیش‌نمایش استفاده کنید.",
"tooltip-ca-addsection": "بخشی جدید ایجاد کنید",
@@ -2258,7 +2288,8 @@
"tooltip-feed-rss": "خبرنامه آراس‌اس برای این صفحه",
"tooltip-feed-atom": "خبرنامهٔ اتم برای این صفحه",
"tooltip-t-contributions": "فهرست مشارکت‌های این کاربر",
- "tooltip-t-emailuser": "فرستادن رایانامه به این کاربر",
+ "tooltip-t-emailuser": "ارسال ایمیل به این کاربر",
+ "tooltip-t-info": "اطلاعات بیشتر دربارهٔ این صفحه",
"tooltip-t-upload": "بارگذاری تصاویر و پرونده‌های دیگر",
"tooltip-t-specialpages": "فهرستی از همهٔ صفحه‌های ویژه",
"tooltip-t-print": "نسخهٔ قابل چاپ این صفحه",
@@ -2323,7 +2354,6 @@
"pageinfo-robot-policy": "‌فهرست‌کردن توسط ربات‌ها",
"pageinfo-robot-index": "مجاز",
"pageinfo-robot-noindex": "نامجاز",
- "pageinfo-views": "شمار بازدیدها",
"pageinfo-watchers": "شمار پی‌گیری‌کنندگان صفحه",
"pageinfo-few-watchers": "کمتر از $1 {{PLURAL:$1| پی‌گیر|پی‌گیر}}",
"pageinfo-redirects-name": "تعداد تغییرمسیرها به این صفحه",
@@ -2344,7 +2374,7 @@
"pageinfo-toolboxlink": "اطلاعات صفحه",
"pageinfo-redirectsto": "تغییرمسیر به",
"pageinfo-redirectsto-info": "اطلاعات",
- "pageinfo-contentpage": "شمرده شده به عنوان صفحهٔ محتویی",
+ "pageinfo-contentpage": "شمرده شده به عنوان صفحهٔ محتوایی",
"pageinfo-contentpage-yes": "بله",
"pageinfo-protect-cascading": "محافظت آبشاری از اینجا",
"pageinfo-protect-cascading-yes": "بله",
@@ -2780,27 +2810,26 @@
"exif-urgency-low": "کم ($1)",
"exif-urgency-high": "زیاد ($1)",
"exif-urgency-other": "اولویت تعریف شده توسط کاربر ($1)",
- "watchlistall2": "همه",
"namespacesall": "همه",
"monthsall": "همهٔ ماه‌ها",
- "confirmemail": "تأیید نشانی رایانامه",
- "confirmemail_noemail": "شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود نشانی رایانامهٔ معتبری وارد نکرده‌اید.",
- "confirmemail_text": "این ویکی شما را ملزم به تأیید اعتبار رایانامه خود، پیش از استفاده از خدمات رایانامه در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا نامهٔ تأییدی به نشانی رایانامهٔ شما فرستاده شود. این نامه دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید (اجرا) کنید تا اعتبار نشانی رایانامهٔ شما تأیید شود.",
- "confirmemail_pending": "یک کد تأییدی پیشتر برای شما به صورت نامه فرستاده شده‌است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید نامهٔ قبلی برسد.",
+ "confirmemail": "تأیید آدرس ایمیل",
+ "confirmemail_noemail": "شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود آدرس ایمیل معتبری وارد نکرده‌اید.",
+ "confirmemail_text": "این ویکی، شما را ملزم به تأیید آدرس ایمیل خود، پیش از استفاده از خدمات ایمیل در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا ایمیلی تأییدی به آدرس ایمیل شما فرستاده شود. این ایمیل دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید کنید تا آدرس ایمیل شما تأیید شود.",
+ "confirmemail_pending": "یک کد تأییدی پیشتر برای شما به صورت ایمیل فرستاده شده است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید ایمیل قبلی برسد.",
"confirmemail_send": "پُست‌کردن یک کد تأیید",
"confirmemail_sent": "یک نامهٔ تأییدی فرستاده شد.",
- "confirmemail_oncreate": "یک کد تأییدی به نشانی رایانامهٔ شما فرستاده شد.\nبرای واردشدن به سامانه نیازی به این کد نیست، ولی برای راه‌اندازی امکانات وابسته به رایانامه در این ویکی به آن نیاز خواهید داشت.",
- "confirmemail_sendfailed": "فرستادن رایانامهٔ تأییدی ممکن نشد.\nنشانی رایانامه را از نظر وجود نویسه‌های نامعتبر بررسی کنید.\n\nپاسخ سامانه ارسال رایانامه: $1",
+ "confirmemail_oncreate": "یک کد تأییدی به آدرس ایمیل شما فرستاده شد.\nبرای واردشدن به سامانه نیازی به این کد نیست، ولی برای راه‌اندازی امکانات وابسته به ایمیل در این ویکی به آن نیاز خواهید داشت.",
+ "confirmemail_sendfailed": "ارسال ایمیل تأییدی ممکن نشد.\nنشانی ایمیل را از نظر وجود نویسه‌های نامعتبر بررسی کنید.\n\nپاسخ سیستم ارسال ایمیل: $1",
"confirmemail_invalid": "کد تأیید نامعتبر است. ممکن است که منقضی شده باشد.",
- "confirmemail_needlogin": "برای تأیید نشانی رایانامه‌تان نیاز به $1 دارید.",
- "confirmemail_success": "نشانی رایانامهٔ شما تأیید شده‌است.\n\nهم‌اینک می‌توانید [[Special:UserLogin|به سامانه وارد شوید]] و از ویکی لذت ببرید.",
- "confirmemail_loggedin": "نشانی رایانامهٔ شما تأیید شد.",
- "confirmemail_subject": "تأیید نشانی رایانامهٔ شما {{SITENAME}}",
- "confirmemail_body": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این نشانی رایانامه در {{SITENAME}} ایجاد کرده‌است.\n\nبرای تأیید این که این حساب واقعاً متعلق به شماست و نیز برای فعال‌سازی امکانات رایانامه {{SITENAME}} پیوند زیر را در مرورگر اینترنت خود باز کنید:\n\n$3\n\nاگر شما این حساب کاربری را ثبت *نکرده‌اید*، لطفاً پیوند زیر را\nدنبال کنید تا تأیید نشانی رایانامه لغو شود:\n\n$5\n\nاین کدِ تأیید در تاریخ $4 منقضی خواهد شد.\n</div>",
- "confirmemail_body_changed": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 نشانی رایانامه حساب «$2» در {{SITENAME}} را تغییر داده‌است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی رایانامه در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر رایانامه را لغو کنید:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
- "confirmemail_body_set": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1,\nنشانی رایانامه حساب «$2» در {{SITENAME}} را به این نشانی تغییر داده‌است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ ویژگی رایانامه در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را دنبال کنید تا تغییر رایانامه را لغو کنید:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
- "confirmemail_invalidated": "تأیید نشانی رایانامه لغو شد",
- "invalidateemail": "لغو کردن تأیید نشانی رایانامه",
+ "confirmemail_needlogin": "لطفاً برای تأیید آدرس ایمیلتان $1.",
+ "confirmemail_success": "آدرس ایمیل شما تأیید شده‌است.\n\nاکنون می‌توانید [[Special:UserLogin|به سیستم وارد شوید]] و از ویکی لذت ببرید.",
+ "confirmemail_loggedin": "آدرس ایمیل شما تأیید شد.",
+ "confirmemail_subject": "تأیید آدرس ایمیل {{SITENAME}}",
+ "confirmemail_body": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این آدرس ایمیل در {{SITENAME}} ایجاد کرده است.\n\nبرای تأیید این که این حساب واقعاً متعلق به شماست و نیز برای فعال سازی قابلیت ایمیل {{SITENAME}} پیوند زیر را در مرورگر اینترنت خود باز کنید:\n\n$3\n\nاگر شما این حساب کاربری را ثبت *نکرده‌اید*، لطفاً پیوند زیر را\nباز کنید تا تأیید آدرس ایمیل لغو شود:\n\n$5\n\nاین کدِ تأیید در تاریخ $4 منقضی خواهد شد.",
+ "confirmemail_body_changed": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 آدرس ایمیل حساب «$2» در {{SITENAME}} را تغییر داده است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ قابلیت ایمیل در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را باز کنید تا تغییر آدرس ایمیل لغو شود:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
+ "confirmemail_body_set": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1,\nآدرس ایمیل حساب «$2» در {{SITENAME}} را به این آدرس تغییر داده‌است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ قابلیت ایمیل در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را باز تا تغییر آدرس ایمیل، لغو شود:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
+ "confirmemail_invalidated": "تأیید آدرس ایمیل لغو شد",
+ "invalidateemail": "لغو تأیید آدرس ایمیل",
"scarytranscludedisabled": "[تراگنجانش بین‌ویکیانه فعال نیست]",
"scarytranscludefailed": "[فراخوانی الگو برای $1 میسر نشد]",
"scarytranscludefailed-httpstatus": "[فراخوانی الگو برای $1 میسر نشد: خطای اچ‌تی‌تی‌پی $2]",
@@ -2857,7 +2886,7 @@
"watchlistedit-raw-legend": "ویرایش فهرست خام پی‌گیری‌ها",
"watchlistedit-raw-explain": "عنوان‌های موجود در فهرست پی‌گیری‌های شما در زیر نشان داده شده‌اند، و شما می‌توانید مواردی را حذف یا اضافه کنید؛ هر مورد در یک سطر جداگانه باید قرار بگیرد.\nدر پایان، دکمهٔ «{{int:Watchlistedit-raw-submit}}» را بفشارید.\nتوجه کنید که شما می‌توانید از [[Special:EditWatchlist|ویرایشگر استاندارد فهرست پی‌گیری‌ها]] هم استفاده کنید.",
"watchlistedit-raw-titles": "عنوان‌ها:",
- "watchlistedit-raw-submit": "به روز رساندن پی‌گیری‌ها",
+ "watchlistedit-raw-submit": "به‌روزرسانی پی‌گیری‌ها",
"watchlistedit-raw-done": "فهرست پی‌گیری‌های شما به روز شد.",
"watchlistedit-raw-added": "$1 عنوان به فهرست پی‌گیری‌ها اضافه {{PLURAL:$1|شد|شدند}}:",
"watchlistedit-raw-removed": "$1 عنوان حذف {{PLURAL:$1|شد|شدند}}:",
@@ -2926,9 +2955,9 @@
"hebrew-calendar-m11-gen": "آب",
"hebrew-calendar-m12-gen": "ایلول",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|بحث]])",
- "unknown_extension_tag": "برچسب ناشناختهٔ افزونه «$1»",
"duplicate-defaultsort": "هشدار: ترتیب پیش‌فرض «$2» ترتیب پیش‌فرض قبلی «$1» را باطل می‌کند.",
"duplicate-displaytitle": "<strong>هشدار:</strong> نمایش عنوان \" $2 \"باعث ابطال پیش نمایش عنوان\" $1 \" می‌شود.",
+ "invalid-indicator-name": "<strong>خطا:</strong>ویژگی های شاخص‌های وضعیت صفحهٔ <code>name</code> نباید خالی باشند.",
"version": "نسخه",
"version-extensions": "افزونه‌های نصب‌شده",
"version-skins": "پوسته‌های نصب شده",
@@ -2943,7 +2972,7 @@
"version-parser-function-hooks": "قلاب‌های عملگر تجزیه‌گر",
"version-hook-name": "نام قلاب",
"version-hook-subscribedby": "وارد شده توسط",
- "version-version": "(نسخه $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[بدون نام]",
"version-svn-revision": "(&رلم;r$2)",
"version-license": "اجازه‌نامهٔ مدیاویکی",
@@ -2962,7 +2991,7 @@
"version-poweredby-others": "دیگران",
"version-poweredby-translators": "مترجمان translatewiki.net",
"version-credits-summary": "افراد زیر را به خاطر ویرایش‌هایش در [[Special:Version|مدیاویکی]] معرفی می‌نمائیم.",
- "version-license-info": "مدیاویکی نرم‌افزاری رایگان است؛ می‌توانید آن را تحت شرایط مجوز عمومی همگانی گنو که توسط بنیاد نرم‌افزار رایگان منتشر شده‌است، بازنشر کنید؛ یا نسخهٔ ۲ از این مجوز، یا (بنا به اختیار) نسخه‌های بعدی.\n\nمدیاویکی به این امید که مفید واقع شود منتشر شده‌است، ولی بدون هیچ‌گونه ضمانتی؛ بدون ضمانت ضمنی که تجاری یا برای کار خاصی مناسب باشد. برای اطلاعات بیشتر مجوز گنو جی‌پی‌ال را مشاهده کنید.\n\nشما باید [{{SERVER}}{{SCRIPTPATH}}/COPYING یک نسخه از مجوز عمومی همگانی گنو] را همراه این برنامه دریافت کرده باشید؛ در غیر این صورت بنویسید برای Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA یا آن را [//www.gnu.org/licenses/old-licenses/gpl-2.0.html به صورت برخط بخوانید].",
+ "version-license-info": "مدیاویکی یک نرم‌افزار آزاد است. می‌توانید آن را با شرایط نگارش ۲، یا (با نظر خودتان) هر نگارش جدیدتری از پروانه جامع همگانی گنو که توسط بنیاد نرم‌افزار آزاد منتشر شده‌است، بازنشر کنید.\n\nمدیاویکی با این امید که مفید واقع شود منتشر شده‌است، ولی هیچ‌گونه ضمانتی، حتا ضمانت ضمنی تجاری یا مناسب بودن برای یک مصرف خاص را ارائه نمی‌کند. برای اطلاعات بیش‌تر، پروانه جامع همگانی گنو را مشاهده کنید.\n\nشما باید [{{SERVER}}{{SCRIPTPATH}}/COPYING یک نسخه از پروانه جامع همگانی گنو] را به همراه این برنامه دریافت کرده باشید. در غیر این صورت با Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA یا آن را [//www.gnu.org/licenses/old-licenses/gpl-2.0.html مکاتبه کرده یا آن را به صورت برخط بخوانید].",
"version-software": "نسخهٔ نصب‌شده",
"version-software-product": "محصول",
"version-software-version": "نسخه",
@@ -2971,6 +3000,9 @@
"version-entrypoints-header-url": "نشانی اینترنتی",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath مسیر مقاله]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath مسیر اسکریپت]",
+ "version-libraries": "کتابخانهٔ نصب شده",
+ "version-libraries-library": "کتابخانه",
+ "version-libraries-version": "نسخه",
"redirect": "تغییرمسیر توسط پرونده، کاربر، صفحه یا شناسهٔ نسخه",
"redirect-legend": "تغییرمسیر به یک پرونده یا صفحه",
"redirect-summary": "این صفحهٔ ویژه به پرونده (نام پرونده داده‌شده)، صفحه (شماره شناسهٔ صفحه یا شماره نسخهٔ داده‌شده) یا صفحهٔ کاربری (شناسهٔ عددی کاربری داده‌شده) تغییرمسیر می‌یابد. طرز استفاده: [[{{#Special:Redirect}}/file/Example.jpg]]، \n[[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]] یا [[{{#Special:Redirect}}/user/101]].",
@@ -3006,6 +3038,7 @@
"specialpages-group-wiki": "داده و ابزارها",
"specialpages-group-redirects": "صفحه‌های ویژهٔ تغییرمسیر دهنده",
"specialpages-group-spam": "ابزارهای هرزنگاری",
+ "specialpages-group-developer": "ابزارهای توسعه‌دهندگان",
"blankpage": "صفحهٔ خالی",
"intentionallyblankpage": "این صفحه به طور عمدی خالی گذاشته شده است.",
"external_image_whitelist": " #این سطر را همان‌گونه که هست رها کنید<pre>\n#عبارت‌های باقاعده (regex) را در زیر قرار دهید (فقط بخشی که بین // قرار می‌گیرد)\n#آن‌ها با نشانی اینترنتی تصاویر خارجی پیوند داده شده تطبیق داده می‌شوند\n#مواردی که مطابق باشند به صورت تصویر نمایش می‌یابند، و در غیر این صورت تنها یک پیوند به تصویر نمایش می‌یابد\n#سطرهایی که با # آغاز شوند به عنوان توضیحات در نظر گرفته می‌شوند\n#این سطرها به کوچکی و بزرگی حروف حساس هستند\n\n#عبارت‌های باقاعده (regex) را زیر این سطر قرار دهید. این سطر را همان‌گونه که هست رها کنید</pre>",
@@ -3018,12 +3051,54 @@
"tags-tag": "نام برچسب",
"tags-display-header": "نمایش در فهرست‌های تغییرات",
"tags-description-header": "توضیح کامل معنی",
+ "tags-source-header": "منبع",
"tags-active-header": "فعال؟",
"tags-hitcount-header": "تغییرهای برچسب‌دار",
+ "tags-actions-header": "فعالیت‌ها",
"tags-active-yes": "بله",
"tags-active-no": "خیر",
+ "tags-source-extension": "تعریف‌شده بر پایه افزونه",
+ "tags-source-manual": "اعمال شده به صورت دستی توسط ربات‌ها یا کاربرها",
+ "tags-source-none": "دیگر استفاده نمی‌شود",
"tags-edit": "ویرایش",
+ "tags-delete": "حذف",
+ "tags-activate": "فعال‌سازی",
+ "tags-deactivate": "غیرفعال‌سازی",
"tags-hitcount": "$1 {{PLURAL:$1|تغییر|تغییر}}",
+ "tags-manage-no-permission": "شما اجازه مدیریت تغییر تگ‌ها را ندارید.",
+ "tags-create-heading": "ایجاد یک برچسب جدید",
+ "tags-create-explanation": "به طور پیش‌فرض، تگ‌های تازه ایجاد شده برای استفاده کاربران و ربات‌ها در دسترس قرار می‌گیرند.",
+ "tags-create-tag-name": "نام برچسب:",
+ "tags-create-reason": "دلیل:",
+ "tags-create-submit": "ایجاد",
+ "tags-create-no-name": "نام تگ باید مشخص شود.",
+ "tags-create-invalid-chars": "نام تگ‌ها نباید حاوی کاما (<code>,</code>) یا خط مورب (<code>/</code>) باشد.",
+ "tags-create-invalid-title-chars": "نام تگ‌ها نباید شامل حروفی شود که نمی‌توان از آن‌ها در عنوان صفحات استفاده کرد.",
+ "tags-create-already-exists": "تگ \"$1\" هم‌اکنون موجود است.",
+ "tags-create-warnings-above": "در هنگام ایجاد تگ \"$1\" با {{PLURAL:$2|هشدار|هشدارهای}} زیر پیش آمد:",
+ "tags-create-warnings-below": "آیا مایل به ادامه ایجاد تگ هستید؟",
+ "tags-delete-title": "حذف برچسب",
+ "tags-delete-explanation-initial": "شما در حال حذف تگ «$1» از پایگاه داده هستید.",
+ "tags-delete-explanation-in-use": "این از {{PLURAL:$2|$2 ویرایش یا ورودی سیاهه|همهٔ $2 ویرایش و/یا ورودی سیاهه}} حذف خواهد شد با وجودی که الان تائید شده‌است.",
+ "tags-delete-explanation-warning": "این عمل <strong>غیر قابل بازگشت</strong> است، حتی توسط مدیران پایگاه داده. مطمئن باشید که این همان تگی است که می‌خواهید آن‌را حذف کنید.",
+ "tags-delete-explanation-active": "<strong>برچسب \"$1\" هنوز فعال است و در آینده اعمال خواهد شد.</strong> برای جلوگیری از این اتفاق، به قسمت(‌هایی) که برچسب فعال شده رفته و از آنجا غیرفعالش کنید.",
+ "tags-delete-reason": "دلیل:",
+ "tags-delete-submit": "این تگ را به‌صورت غیرقابل بازگشت حذف کن",
+ "tags-delete-not-allowed": "برچسب‌هایی که در یک افزونه تعریف می‌شوند قابل حذف نیستند، مگر اینکه آن افزونه در این مورد خاص این قابلیت را بدهد.",
+ "tags-delete-not-found": "تگ «$1» وجود ندارد.",
+ "tags-delete-too-many-uses": "برچسب \"$1\" در بیش از $2 نسخه اعمال شده است و نمی‌توان آن را حذف نمود.",
+ "tags-delete-warnings-after-delete": "برچسب \"$1\" با موفقیت حذف شد، اما با {{PLURAL:$2|خطای|خطاهای}} زیر همراه بود:",
+ "tags-activate-title": "فعال‌سازی برچسب",
+ "tags-activate-question": "شما در حال فعال‌سازی تگ «$1» هستید.",
+ "tags-activate-reason": "دلیل:",
+ "tags-activate-not-allowed": "فعال‌سازی تگ «$1» ممکن نیست.",
+ "tags-activate-not-found": "تگ «$1» وجود ندارد.",
+ "tags-activate-submit": "فعال‌سازی",
+ "tags-deactivate-title": "غیرفعال‌سازی برچسب",
+ "tags-deactivate-question": "شما در حال غیرفعال‌سازی تگ «$1» هستید.",
+ "tags-deactivate-reason": "دلیل:",
+ "tags-deactivate-not-allowed": "غیرفعال‌سازی تگ «$1» ممکن نیست.",
+ "tags-deactivate-submit": "غیرفعال‌سازی",
"comparepages": "مقایسهٔ صفحات",
"compare-page1": "صفحهٔ ۱",
"compare-page2": "صفحهٔ ۲",
@@ -3035,8 +3110,8 @@
"compare-revision-not-exists": "پالایهٔ مشخص شده وجود ندارد.",
"dberr-problems": "شرمنده! این تارنما از مشکلات فنی رنج می‌برد.",
"dberr-again": "چند دقیقه صبر کنید و دوباره صفحه را بارگیری کنید.",
- "dberr-info": "(امکان برقراری ارتباط با کارساز پایگاه داده وجود ندارد: $1)",
- "dberr-info-hidden": "(امکان تماس با پایگاه‌داده‌ها کارساز امکان‌پذیر نیست)",
+ "dberr-info": "(امکان برقراری ارتباط با پایگاه داده وجود ندارد: $1)",
+ "dberr-info-hidden": "(امکان تماس با پایگاه‌داده نیست)",
"dberr-usegoogle": "شما در این مدت می‌توانید با استفاده از گوگل جستجو کنید.",
"dberr-outofdate": "توجه کنید که نمایه‌های آن‌ها از محتوای ما ممکن است به روز نباشد.",
"dberr-cachederror": "آن‌چه در ادامه می‌آید یک کپی از صفحهٔ درخواست شده است که در کاشه قرار دارد، و ممکن است به روز نباشد.",
@@ -3077,16 +3152,24 @@
"revdelete-uname-unhid": "نام کاربری را آشکار کرد",
"revdelete-restricted": "مدیران را محدود کرد",
"revdelete-unrestricted": "محدودیت مدیران را لغو کرد",
+ "logentry-block-block": "$1 {{GENDER:$4|$3}} را تا $5 {{GENDER:$2|بست}} $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|بازکرد}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$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 $3 را توسط بارگذار پرونده {{GENDER:$2|درون‌ریزی کرد}}",
+ "logentry-import-interwiki": "$1 $3 را از ویکی دیگر {{GENDER:$2|درون‌ریز کرد}}",
+ "logentry-merge-merge": "$1 $3 را به $4 {{GENDER:$2| ادغام کرد}} (نسخه تا $5)",
"logentry-move-move": "$1 صفحهٔ $3 را به $4 {{GENDER:$2|منتقل کرد}}",
"logentry-move-move-noredirect": "$1 صفحهٔ $3 را بدون برجای‌گذاشتن تغییرمسیر به $4 {{GENDER:$2|منتقل کرد}}",
"logentry-move-move_redir": "$1 صفحهٔ $3 را به $4 که تغییرمسیر بود {{GENDER:$2|منتقل کرد}}",
"logentry-move-move_redir-noredirect": "$1 صفحهٔ $3 را بدون برجای‌گذاشتن تغییرمسیر به $4 که تغییرمسیر بود {{GENDER:$2|منتقل کرد}}",
"logentry-patrol-patrol": "$1 نسخه $4 صفحه $3 را به عنوان گشت خورده {{GENDER:$2|علامت زد}}",
- "logentry-patrol-patrol-auto": "$1 نسخهٔ $4 صفحهٔ $3 را به‌طور خودکار به‌عنوان گشت‌خورده {{GENDER:$2|علامت زد}}",
+ "logentry-patrol-patrol-auto": "$1 نسخهٔ $4 صفحهٔ $3 را به‌طور خودکار به عنوان گشت‌خورده {{GENDER:$2|علامت زد}}",
"logentry-newusers-newusers": "حساب کاربری $1 {{GENDER:$2|ایجاد شد}}",
"logentry-newusers-create": "حساب کاربری $1 {{GENDER:$2|ایجاد شد}}",
"logentry-newusers-create2": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}}",
- "logentry-newusers-byemail": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}} و رمز عبور به‌وسیلهٔ رایانامه ارسال شد",
+ "logentry-newusers-byemail": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}} و رمز عبور به وسیلهٔ ایمیل ارسال شد",
"logentry-newusers-autocreate": "حساب $1 به شکل خودکار {{GENDER:$2|ایجاد شد}}",
"logentry-rights-rights": "$1 عضویت $3 را از گروه $4 به $5 {{GENDER:$2|تغییر داد}}",
"logentry-rights-rights-legacy": "$1 گروه عضویت $3 را {{GENDER:$2|تغییر داد}}",
@@ -3094,20 +3177,36 @@
"logentry-upload-upload": "$1 $3 را {{GENDER:$2|بارگذاری کرد}}",
"logentry-upload-overwrite": "$1 نسخهٔ تازه‌ای از $3 را {{GENDER:$2|بارگذاری کرد}}",
"logentry-upload-revert": "$1 {{GENDER:$2|بارگذاری کرد}} $3",
+ "log-name-managetags": "تاریخچه مدیریت تگ",
+ "log-description-managetags": "این صفحه امور مدیریتی مربوط به [[Special:Tags|برچسب‌ها]] را فهرست می‌کند. سیاهه فقط حاوی فعالیت‌هایی است که توسط یک مدیر به صورت دستی انجام شده‌اند؛ برچسب‌ها ممکن است توسط نرم‌افزار ویکی ساخته یا حذف بشوند بدون اینکه هیچ ورودی در این سیاهه ثبت گردد.",
+ "logentry-managetags-create": "$1 برچسب «$4» را {{GENDER:$2|ایجاد کرد}}",
+ "logentry-managetags-delete": "$1 برچسب را از \"$4\" {{GENDER:$2|حذف کرد}} (حذف شده از $5 {{PLURAL:$5|نسخه یا ورودی سیاهه|نسخه یا/و ورودی سیاهه}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|برچسب}} فعال شده \"$4\" برای کاربران و ربات‌ها",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|برچسب}} غیرفعال شده \"$4\" برای کاربران و ربات‌ها",
"rightsnone": "(هیچ)",
+ "revdelete-summary": "خلاصه ویرایش",
+ "feedback-adding": "افزودن بازخورد به صفحه...",
+ "feedback-back": "بازگشت",
+ "feedback-bugcheck": "عالی‌است! فقط بررسی کنید که از [$1 ایرادهای شناخته‌شده] نباشد.",
+ "feedback-bugnew": "بررسی کردم. ایرادی تازه را گزارش بده",
"feedback-bugornote": "اگر آماده‌اید تا مشکلی فنی را با جزئیاتش شرح دهید لطفاً [$1 یک ایراد گزارش دهید]. در غیر این صورت می‌توانید از فرم سادهٔ زیر استفاده کنید. نظر شما به همراه نام کاربری و مرورگرتان به صفحهٔ «[$3 $2]» افزوده خواهد شد.",
- "feedback-subject": "موضوع:",
- "feedback-message": "پیغام:",
"feedback-cancel": "لغو",
- "feedback-submit": "ارسال بازخورد",
- "feedback-adding": "افزودن بازخورد به صفحه...",
+ "feedback-close": "انجام شد",
+ "feedback-external-bug-report-button": "پرونده‌سازی یک عمل فنی",
+ "feedback-dialog-title": "ارسال یک بازخورد",
+ "feedback-dialog-intro": "شما می توانید از فرم زیر برای بازخورد استفاده کنید. متن شما همراه با نام کاربریتان به صفحهٔ \"$1\" افزوده خواهد شد.",
+ "feedback-error-title": "خطا",
"feedback-error1": "خطا: پاسخ‌های ناشناخته از رابط برنامه‌نویسی نرم‌افزار",
"feedback-error2": "خطا: شکست در ویرایش",
"feedback-error3": "خطا: عدم پاسخ از رابط برنامه‌نویسی نرم‌افزار",
+ "feedback-message": "پیغام:",
+ "feedback-subject": "موضوع:",
+ "feedback-submit": "ارسال",
+ "feedback-terms": "من اطلاع دارم که اطلاعات یوز ایجنتم دربارهٔ مرورگر و نسخهٔ سیستم عاملی که استفاده می‌کنم، به صورت عمومی همراه با نام کاربریم به اشتراک گذاشته می‌شود.",
+ "feedback-termsofuse": "موافق با قرار دادن بازخورد بر پایهٔ شرایط استفاده هستم.",
"feedback-thanks": "سپاس! بازخورد شما در صفحهٔ «[$1 $2]» ثبت شد.",
- "feedback-close": "انجام شد",
- "feedback-bugcheck": "عالی‌است! فقط بررسی کنید که از [$1 ایرادهای شناخته‌شده] نباشد.",
- "feedback-bugnew": "بررسی کردم. ایرادی تازه را گزارش بده",
+ "feedback-thanks-title": "با تشکر!",
+ "feedback-useragent": "رابط کاربر:",
"searchsuggest-search": "جستجو",
"searchsuggest-containing": "صفحه‌های دربردارنده...",
"api-error-badaccess-groups": "شما اجازهٔ بارگذاری پرونده‌ها را در این ویکی ندارید.",
@@ -3143,6 +3242,13 @@
"api-error-stashfailed": "خطای داخلی: کارساز نمی‌تواند پرونده موقت را ذخیره کند.",
"api-error-publishfailed": "خطای داخلی: کارساز نمی‌تواند پرونده موقت را ذخیره کند.",
"api-error-stasherror": "هنگام انتقال پوشه برای ذخیره خطایی بود.",
+ "api-error-stashedfilenotfound": "زمانی که تلاش برای بارگذاری فایل استش بود، فایل استش یافت نشد.",
+ "api-error-stashpathinvalid": "مسیری که فایل استش در آن باید یافت می‌شد اشتباه است.",
+ "api-error-stashfilestorage": "برای ذخیرهٔ فایل استش خطایی رخ داده است.",
+ "api-error-stashzerolength": "سرور نمی‌تواند فایل استش را ذخیره کند چون حجم آن صفر است.",
+ "api-error-stashnotloggedin": "برای ذخیرهٔ فایل‌ها در بارگذاری استش باید وارد سامانه شده‌باشید.",
+ "api-error-stashwrongowner": "فایلی که در استش قصد داشتید به آن دسترسی داشته‌باشید متعلق به شما نیست.",
+ "api-error-stashnosuchfilekey": "کلیدی که در فایل استش می خواستید به آن دسترسی داشته‌باشید، وجود ندارد.",
"api-error-timeout": "کارساز در زمان انتظار هیچ پاسخی نداد.",
"api-error-unclassified": "یک خطای ناشناخته رخ داد.",
"api-error-unknown-code": "خطای ناشناخته: \" $1 \"",
@@ -3187,6 +3293,8 @@
"expand_templates_generate_xml": "نمایش درخت تجزیهٔ XML",
"expand_templates_generate_rawhtml": "نمایش اچ‌تی‌ام‌ال خام",
"expand_templates_preview": "پیش‌نمایش",
+ "expand_templates_preview_fail_html": "<em>زیرا {{SITENAME}} تا به HTML خام فعال و یک دست رفتن اطلاعات نشست وجود دارد، پیش نمایش به عنوان یک اقدام احتیاطی در برابر حملات جاوا اسکریپت پنهان است.</em>\n\n<strong>اگر این تلاش پیشنمایش مشروع است، لطفا دوباره سعی کنید. اگر هنوز کار نمی کند، سعی کنید [[Special:UserLogout|خروج از سیستم]] را کلیک نموده و دوباره وارد شوید.",
+ "expand_templates_preview_fail_html_anon": "<em>زیرا {{SITENAME}} تا به HTML خام فعال و یک دست رفتن اطلاعات نشست وجود دارد، پیش نمایش به عنوان یک اقدام احتیاطی در برابر حملات جاوا اسکریپت پنهان است.</em>\n\n<strong>اگر این تلاش پیشنمایش مشروع است، لطفا دوباره سعی کنید. اگر هنوز کار نمی کند، سعی کنید [[Special:UserLogout|خروج از سیستم]] را کلیک نموده و دوباره وارد شوید.",
"pagelanguage": "صفحه انتخاب زبان",
"pagelang-name": "صفحه",
"pagelang-language": "زبان",
@@ -3197,8 +3305,58 @@
"log-name-pagelang": "تغییر سیاههٔ زبان",
"log-description-pagelang": "این سیاههٔ تغییرات صفحهٔ زبان‌ها است.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2| تغییریافت}} زبان صفحه برای $3 از $4 به $5 .",
- "default-skin-not-found": "اوه! پوسته پیش‌فرض برای ویکی شما تعریف‌شده در <code dir=\"ltr\"<$wgDefaultSkin</code> به‌عنوان <code>$1</code>، در دسترس نیست.\n\nبه نظر می‌آید نصب شما شامل پوسته‌های زیر می‌شود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعال‌ساختن آن‌ها و انتخاب پیش‌فرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کرده‌اید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده می‌کند نصب کردید. انتظار می‌رود. چند پوسته از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما می‌توانید شاخه <code>skins/</code> را از آن نسخه‌برداری کرده و بچسبانید.\n\n:* همسانه‌سازی یکی از مخازن <code>mediawiki/skins/*</code> از طریق گیت به داخل شاخه <code dir=\"ltr\">skins/</code> از نصب مدیاویکی‌تان.\n: انجام این کار با مخزن گیت‌تان تداخل نمی‌کند اگر توسعه‌دهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی ۱٫۲۴ و تازه‌تر دیگر به طور خودکار پوسته‌های نصب‌شده را فعال نمی‌کند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما می‌توانید خطوط زیر را به داخل <code>LocalSettings.php</code> بچسبانید تا همه پوسته‌های نصب‌شده جاری را فعال کنید:\n\n<pre dir=\"ltr\">$3</pre>\n\n; اگر اخیراً <code>LocalSettings.php</code> را تغییر دادید:\n: نام پوسته‌ها را برای غلط املایی دوباره بررسی کنید.",
- "default-skin-not-found-no-skins": "پوستهٔ پیش‌فرض برای ویکی شما تعریف‌شده در<code>$wgDefaultSkin</code> به‌عنوان <code>$1</code>، هست موجود نیست.\n\nشما پوسته‌ها را نصب نکرده‌اید.\n\n:اگر مدیاویکی را به‌روز یا نصب کرده‌اید:\n:ممکن است از گیت یا از کند منبع با روش های دیگر نصب کرده‌اید. انتظار می‌رود MediaWiki 1.24 یا جدیدتر در پوشهٔ اصلی هیچ پوسته‌ای نداشته باشند.\nسعی کنید تعدادی پوسته از [https://www.mediawiki.org/wiki/Category:All_skins پوشهٔ پوسته‌های مدیاویکی]، با:\n:*دانلود کردن [https://www.mediawiki.org/wiki/Download نصب‌کننده تاربال]، که با چندین پوسته و افزونه هست. شما می توانید پوستهٔ <code>skins/</code> را از آن کپی و پیست کنید.\n:*کلون کردن یکی از <code dir=\"ltr\">mediawiki/skins/*</code> از ریپوزیتوری در پوشهٔ <code>skins/</code> مدیاویکی‌تان.\n:اگر توسعه‌دهندهٔ مدیاویکی هستید، انجام این کار نباید تعارضی با ریپوزیتوری گیت شما داشته باشد. برای اطلاعات بیشتر و فعال کردن پوسته‌ها و انتخاب آنها به عنوان پیش‌فرض [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: تنظیمات پوسته] را مشاهده کنید.",
+ "default-skin-not-found": "اوه! پوسته پیش‌فرض برای ویکی شما تعریف‌شده در <code dir=\"ltr\"<$wgDefaultSkin</code> به عنوان <code>$1</code>، در دسترس نیست.\n\nبه نظر می‌آید نصب شما شامل پوسته‌های زیر می‌شود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعال‌ساختن آن‌ها و انتخاب پیش‌فرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کرده‌اید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده می‌کند نصب کردید. انتظار می‌رود. چند پوسته از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما می‌توانید شاخه <code>skins/</code> را از آن نسخه‌برداری کرده و بچسبانید.\n\n:* همسانه‌سازی یکی از مخازن <code>mediawiki/skins/*</code> از طریق گیت به داخل شاخه <code dir=\"ltr\">skins/</code> از نصب مدیاویکی‌تان.\n: انجام این کار با مخزن گیت‌تان تداخل نمی‌کند اگر توسعه‌دهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی ۱٫۲۴ و تازه‌تر دیگر به طور خودکار پوسته‌های نصب‌شده را فعال نمی‌کند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما می‌توانید خطوط زیر را به داخل <code>LocalSettings.php</code> بچسبانید تا همه پوسته‌های نصب‌شده جاری را فعال کنید:\n\n<pre dir=\"ltr\">$3</pre>\n\n; اگر اخیراً <code>LocalSettings.php</code> را تغییر دادید:\n: نام پوسته‌ها را برای غلط املایی دوباره بررسی کنید.",
+ "default-skin-not-found-no-skins": "پوستهٔ پیش‌فرض برای ویکی شما تعریف‌شده در<code>$wgDefaultSkin</code> به عنوان <code>$1</code>، هست موجود نیست.\n\nشما پوسته‌ها را نصب نکرده‌اید.\n\n:اگر مدیاویکی را به‌روز یا نصب کرده‌اید:\n:ممکن است از گیت یا از کند منبع با روش های دیگر نصب کرده‌اید. انتظار می‌رود MediaWiki 1.24 یا جدیدتر در پوشهٔ اصلی هیچ پوسته‌ای نداشته باشند.\nسعی کنید تعدادی پوسته از [https://www.mediawiki.org/wiki/Category:All_skins پوشهٔ پوسته‌های مدیاویکی]، با:\n:*دانلود کردن [https://www.mediawiki.org/wiki/Download نصب‌کننده تاربال]، که با چندین پوسته و افزونه هست. شما می توانید پوستهٔ <code>skins/</code> را از آن کپی و پیست کنید.\n:*کلون کردن یکی از <code dir=\"ltr\">mediawiki/skins/*</code> از ریپوزیتوری در پوشهٔ <code>skins/</code> مدیاویکی‌تان.\n:اگر توسعه‌دهندهٔ مدیاویکی هستید، انجام این کار نباید تعارضی با ریپوزیتوری گیت شما داشته باشد. برای اطلاعات بیشتر و فعال کردن پوسته‌ها و انتخاب آنها به عنوان پیش‌فرض [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: تنظیمات پوسته] را مشاهده کنید.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (فعال)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر فعال''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر فعال''')",
+ "mediastatistics": "آمار رسانه‌ها",
+ "mediastatistics-summary": "آمارها دربارهٔ نوع‌های پرونده‌ای به روزشده. این فقط شامل آخرین نسخهٔ پرونده است. نسخه‌های قدیمی یا حذف‌شده مسثنی هستند.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایت}} ($2؛ $3٪)",
+ "mediastatistics-table-mimetype": "نوع مایم",
+ "mediastatistics-table-extensions": "افزونه‌های محتمل",
+ "mediastatistics-table-count": "تعداد پرونده‌ها",
+ "mediastatistics-table-totalbytes": "حجم ترکیبی",
+ "mediastatistics-header-unknown": "ناشناخته",
+ "mediastatistics-header-bitmap": "تصاویر بیت‌مپ",
+ "mediastatistics-header-drawing": "طراحی‌ها (تصاویر برداری)",
+ "mediastatistics-header-audio": "صدا",
+ "mediastatistics-header-video": "ویدیو‌ها",
+ "mediastatistics-header-multimedia": "رسانه‌های غنی",
+ "mediastatistics-header-office": "دفتر",
+ "mediastatistics-header-text": "متنی",
+ "mediastatistics-header-executable": "اجرایی",
+ "mediastatistics-header-archive": "قالب‌های فشرده",
+ "json-warn-trailing-comma": "$1 کامای در انتها از جی‌سن {{PLURAL:$1|حذف شد}}.",
+ "json-error-unknown": "مشکلی با جی‌سن بود. خطا: $1",
+ "json-error-depth": "بیشینهٔ عمق پشته رد شده است",
+ "json-error-state-mismatch": "جی‌سن نادرست یا نافض",
+ "json-error-ctrl-char": "خطای نویسهٔ کنترلی، احتمالاً به نادرستی کدگذاری شده است",
+ "json-error-syntax": "خطای نحوی",
+ "json-error-utf8": "نویسه‌های نادرست یوتی‌اف-۸، احتمالاً نادرست کدگذاری شده است",
+ "json-error-recursion": "ارجاع بازگشتی یک یا بیشتر در مقداری که کذگذاری می‌شود",
+ "json-error-inf-or-nan": "مقادیر INF یا NAN یک یا بیشتر در مقداری که کدگذاری می‌شود",
+ "json-error-unsupported-type": "یک مقداری نوعی که نمی‌تواند کدگذاری شود داده شده است",
+ "headline-anchor-title": "پیوند به این بخش",
+ "special-characters-group-latin": "لاتین",
+ "special-characters-group-latinextended": "لاتین گسترش‌یافته",
+ "special-characters-group-ipa": "آوانگاری بین‌المللی",
+ "special-characters-group-symbols": "نمادها",
+ "special-characters-group-greek": "یونانی",
+ "special-characters-group-cyrillic": "سیریلیک",
+ "special-characters-group-arabic": "عربی",
+ "special-characters-group-arabicextended": "عربی گسترش‌یافته",
+ "special-characters-group-persian": "فارسی",
+ "special-characters-group-hebrew": "عبری",
+ "special-characters-group-bangla": "بنگالی",
+ "special-characters-group-tamil": "تامیلی",
+ "special-characters-group-telugu": "تالوگو",
+ "special-characters-group-sinhala": "سینهالی",
+ "special-characters-group-gujarati": "گجراتی",
+ "special-characters-group-devanagari": "دیواناگرى",
+ "special-characters-group-thai": "تایلندی",
+ "special-characters-group-lao": "لائو",
+ "special-characters-group-khmer": "خمر",
+ "special-characters-title-endash": "خط فاصله",
+ "special-characters-title-emdash": "خط فاسله کشیده",
+ "special-characters-title-minus": "علامت منفی"
}
diff --git a/languages/i18n/ff.json b/languages/i18n/ff.json
index c24788b0..78fa818e 100644
--- a/languages/i18n/ff.json
+++ b/languages/i18n/ff.json
@@ -4,7 +4,8 @@
"Amire80",
"Amkoullel",
"Guaka (on ff.wikipedia.org)",
- "Ibrahima"
+ "Ibrahima",
+ "아라"
]
},
"tog-underline": "Diidtol jokke",
@@ -80,13 +81,6 @@
"mytalk": "Yeewtere",
"navigation": "Peeragol",
"faq": "FAQ",
- "vector-action-addsection": "Ɓeydi toɓɓere",
- "vector-action-move": "Dirtin",
- "vector-view-create": "Sos",
- "vector-view-edit": "Taƴto",
- "vector-view-history": "Yiyto aslol",
- "vector-view-view": "Tar",
- "vector-view-viewsource": "Yiyto ɗaɗol",
"actions": "Baɗe",
"namespaces": "Boowal inɗe",
"variants": "Lomtooɗe",
@@ -117,7 +111,6 @@
"talkpagelinktext": "Yeewtere",
"specialpage": "Hello heeriingo",
"personaltools": "Kuutorɗe maa keeriiɗe",
- "postcomment": "Taƴre hesere",
"articlepage": "Yiyto hello loowdi ngoo",
"talk": "Kaldigal",
"views": "Jiyte",
@@ -213,7 +206,6 @@
"remembermypassword": "Siiftor ceŋagol am e ndee wanngorde (so heewii ko {{PLURAL:$1|ñalawma|balɗe}}$1)",
"login": "Seŋo",
"nav-login-createaccount": "Seŋo / uddit konte",
- "loginprompt": "Alaa e sago kurminaa kukiije ngam seŋaade e {{SITENAME}}.",
"userlogin": "Seŋo / uddit konte",
"userlogout": "Seŋto",
"nologin": "A alaa konte tawo? $1.",
@@ -276,12 +268,10 @@
"searchmenu-exists": "'''Ena woodi hello ena wiyee \"[[:$1]]\" e oo wiki.'''",
"searchmenu-new": "'''Sos hello \"[[:$1]]\" e oo wiki!'''",
"searchprofile-articles": "Kello loowdi",
- "searchprofile-project": "Hello ballal e Eɓɓoore",
"searchprofile-images": "Sawmejaajo",
"searchprofile-everything": "Fofof",
"searchprofile-advanced": "Ceeɓtore",
"searchprofile-articles-tooltip": "Yiylo e $1",
- "searchprofile-project-tooltip": "Yiylo e $1",
"searchprofile-images-tooltip": "Yiylo piille",
"searchprofile-everything-tooltip": "Yiylo loowdi fof (waɗoe heen kelle jeewte)",
"searchprofile-advanced-tooltip": "Yiylo e boowe inɗe peŋtore",
@@ -290,7 +280,6 @@
"search-section": "(taƴre $1)",
"search-suggest": "Maa taw njiɗ-ɗaa wiyde ko: $1",
"searchall": "fof",
- "showingresultsheader": "{{PLURAL:$5|Njaltudi'''$1''' of '''$3'''|Jaltuɗe'''$1 - $2''' of '''$3'''}} for '''$4'''",
"search-nonefound": "Alaa njaltudi arti e ndee ɗaɓɓitannde.",
"mypreferences": "Cuɓoraade",
"recentchanges": "Wailitooji kesi",
@@ -298,7 +287,7 @@
"recentchanges-label-newpage": "Ngoo taƴto sosii hello heso",
"recentchanges-label-bot": "Ngoo taƴto waɗi ɗum ko botol",
"recentchanges-label-unpatrolled": "Ngoo taƴto suwaa tawo ƴeewteede",
- "rclistfrom": "Hollu bayle kese puɗɗiiɗe gila $1",
+ "rclistfrom": "Hollu bayle kese puɗɗiiɗe gila $3 $2",
"rclinks": "Hollu bayle $1 cakkitiiɗe baɗaaɗe e balɗe $2 ɓannuɗe ɗee<br />$3",
"diff": "ceer",
"hist": "aslol",
@@ -337,7 +326,6 @@
"pager-older-n": "{{PLURAL:$1|ɓennungol 1|ɓennuɗi $1}}",
"booksources": "Sewnde defte",
"log": "Loge",
- "alphaindexline": "$1 haa $2",
"allarticles": "Winndannde hesere",
"allpagessubmit": "Yah",
"linksearch-line": "$1 ko-ko jokkaa e $2",
diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json
index 004139c3..16ecd3eb 100644
--- a/languages/i18n/fi.json
+++ b/languages/i18n/fi.json
@@ -41,7 +41,10 @@
"아라",
"Syreeni",
"MrTapsa",
- "SMAUG"
+ "SMAUG",
+ "SuperPete",
+ "McSalama",
+ "Macofe"
]
},
"tog-underline": "Linkkien alleviivaus:",
@@ -69,7 +72,7 @@
"tog-shownumberswatching": "Näytä sivua tarkkailevien käyttäjien määrä",
"tog-oldsig": "Nykyinen allekirjoitus:",
"tog-fancysig": "Muotoilematon allekirjoitus ilman automaattista linkkiä",
- "tog-uselivepreview": "Käytä välitöntä esikatselua (kokeellinen)",
+ "tog-uselivepreview": "Käytä välitöntä esikatselua",
"tog-forceeditsummary": "Huomauta minua, jos en ole kirjoittanut yhteenvetoa",
"tog-watchlisthideown": "Piilota omat muokkaukset tarkkailulistalta",
"tog-watchlisthidebots": "Piilota bottien muokkaukset tarkkailulistalta",
@@ -200,7 +203,7 @@
"searchbutton": "Hae",
"go": "Siirry",
"searcharticle": "Siirry",
- "history": "Historia",
+ "history": "Sivun historia",
"history_short": "Historia",
"updatedmarker": "päivitetty viimeisimmän käyntisi jälkeen",
"printableversion": "Tulostettava versio",
@@ -254,9 +257,10 @@
"view-pool-error": "Valitettavasti palvelimet ovat ylikuormittuneet tällä hetkellä.\nLiian monta käyttäjää yrittää tarkastella tätä sivua.\nOdota hetki ennen kuin yrität uudelleen.\n\n$1",
"generic-pool-error": "Valitettavasti palvelimet ovat ylikuormittuneet tällä hetkellä.\nLiian monta käyttäjää yrittää tarkastella tätä sivua.\nOdota hetki ennen kuin yrität uudelleen.",
"pool-timeout": "Lukon aikakatkaisu.",
- "pool-queuefull": "Lukkojono on täysi.",
+ "pool-queuefull": "Prosessijoukon jono on täynnä",
"pool-errorunknown": "Tuntematon virhe.",
"pool-servererror": "Pool counter -palvelu ei ole käytettävissä ($1).",
+ "poolcounter-usage-error": "Käyttövirhe: $1",
"aboutsite": "Tietoja {{GRAMMAR:elative|{{SITENAME}}}}",
"aboutpage": "Project:Tietoja",
"copyright": "Sisältö on käytettävissä lisenssillä $1, ellei toisin ole mainittu.",
@@ -266,6 +270,7 @@
"disclaimers": "Vastuuvapaus",
"disclaimerpage": "Project:Vastuuvapaus",
"edithelp": "Muokkausohjeet",
+ "helppage-top-gethelp": "Ohjeet",
"mainpage": "Etusivu",
"mainpage-description": "Etusivu",
"policy-url": "Project:Käytännöt",
@@ -280,7 +285,7 @@
"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": "Haettu osoitteesta $1",
+ "retrievedfrom": "Noudettu kohteesta $1",
"youhavenewmessages": "Sinulle on $1 ($2).",
"youhavenewmessagesfromusers": "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).",
@@ -345,10 +350,13 @@
"readonly_lag": "Tietokanta on automaattisesti lukittu, jotta kaikki tietokantapalvelimet saisivat kaikki tuoreet muutokset",
"internalerror": "Sisäinen virhe",
"internalerror_info": "Sisäinen virhe: $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.",
"directorycreateerror": "Hakemiston ”$1” luominen epäonnistui.",
+ "directoryreadonlyerror": "Hakemisto ”$1” ei ole kirjoitettavissa.",
+ "directorynotreadableerror": "Hakemisto ”$1” ei ole luettavissa.",
"filenotfound": "Tiedostoa <b>$1</b> ei löytynyt.",
"unexpected": "Odottamaton arvo: ”$1” on ”$2”.",
"formerror": "Lomakkeen tiedot eivät kelpaa",
@@ -357,7 +365,7 @@
"cannotdelete-title": "Sivua $1 ei voi poistaa",
"delete-hook-aborted": "Laajennuskoodi esti poiston antamatta syytä.",
"no-null-revision": "Nollamuokkausta sivulla \"$1\" ei voi tehdä",
- "badtitle": "Virheellinen otsikko",
+ "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ä.",
"perfcached": "Nämä tiedot ovat välimuistista eivätkä välttämättä ole ajan tasalla. Välimuistissa on saatavilla enintään {{PLURAL:$1|yksi tulos|$1 tulosta}}.",
"perfcachedts": "Nämä tiedot ovat välimuistista, ja ne on päivitetty viimeksi $1. Välimuistissa on saatavilla enintään {{PLURAL:$4|yksi tulos|$4 tulosta}}.",
@@ -370,7 +378,8 @@
"viewsourcetext": "Voit katsoa ja kopioida tämän sivun lähdetekstiä:",
"viewyourtext": "Voit tarkastella ja kopioida lähdekoodin '''tekemistäsi muutoksista''' tähän sivuun:",
"protectedinterface": "Tämä sivu sisältää ohjelmiston käyttöliittymätekstiä ja on suojattu häiriköinnin estämiseksi.\nViestien kääntäminen tulisi tehdä [//translatewiki.net/ translatewiki.netissä] – MediaWikin kotoistusprojektissa.",
- "editinginterface": "'''Varoitus:''' Muokkaat sivua, joka sisältää ohjelmiston käyttöliittymätekstiä.\nMuutokset tähän sivuun vaikuttavat muiden käyttäjien käyttöliittymän ulkoasuun tässä wikissä.\nViestien kääntäminen tulisi tehdä [//translatewiki.net/ translatewiki.netissä] – MediaWikin kotoistusprojektissa.",
+ "editinginterface": "<strong>Varoitus:</strong> Olet muokkaamassa sivua, joka sisältää ohjelmiston käyttöliittymän tekstiä.\nMuutokset tähän sivuun vaikuttavat muiden käyttäjien käyttöliittymään tässä wikissä.",
+ "translateinterface": "Jos haluat lisätä tai muuttaa käännöksiä kaikissa wikeissä, käytä siihen MediaWikin kääntämistä varten rakennettua sivustoa [//translatewiki.net/ translatewiki.net].",
"cascadeprotected": "Tämä sivu on suojattu muokkauksilta, koska se on sisällytetty {{PLURAL:$1|seuraavaan tarttuvasti suojattuun sivuun|seuraaviin tarttuvasti suojattuihin sivuihin}}:\n$2",
"namespaceprotected": "Et voi muokata sivuja nimiavaruudessa '''$1'''.",
"customcssprotected": "Sinulla ei ole oikeutta muuttaa tätä CSS-sivua, koska se sisältää toisen käyttäjän henkilökohtaisia asetuksia.",
@@ -427,6 +436,8 @@
"userlogin-resetlink": "Unohditko salasanasi?",
"userlogin-resetpassword-link": "Unohditko salasanasi?",
"userlogin-helplink2": "Apua sisäänkirjautumiseen",
+ "userlogin-loggedin": "Olet jo kirjautunut sisään tunnuksella {{GENDER:$1|$1}}.\nKäytä alla olevaa lomaketta kirjautuaksesi sisään toisena käyttäjänä.",
+ "userlogin-createanother": "Luo toinen käyttäjätunnus",
"createacct-emailrequired": "Sähköpostiosoite",
"createacct-emailoptional": "Sähköpostiosoite (vapaaehtoinen)",
"createacct-email-ph": "Anna sähköpostiosoitteesi",
@@ -462,6 +473,7 @@
"wrongpassword": "Syöttämäsi salasana ei ole oikein. Ole hyvä ja yritä uudelleen.",
"wrongpasswordempty": "Et voi antaa tyhjää salasanaa.",
"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.",
"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": "Uudista salasana",
@@ -575,10 +587,10 @@
"media_tip": "Tiedostolinkki",
"sig_tip": "Allekirjoitus aikaleiman kanssa",
"hr_tip": "Vaakasuora viiva",
- "summary": "Yhteenveto",
- "subject": "Aihe tai otsikko",
+ "summary": "Yhteenveto:",
+ "subject": "Aihe tai otsikko:",
"minoredit": "Tämä on pieni muutos",
- "watchthis": "Lisää tarkkailulistaan",
+ "watchthis": "Tarkkaile tätä sivua",
"savearticle": "Tallenna sivu",
"preview": "Esikatselu",
"showpreview": "Esikatsele",
@@ -587,10 +599,12 @@
"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 \"{{int:savearticle}}\" uudestaan, tämä ohjaussivu luodaan joka tapauksessa.",
"missingcommenttext": "Kirjoita viesti alle.",
"missingcommentheader": "Et ole antanut otsikkoa kommentillesi. Napsauta ”{{int:savearticle}}”, jos et halua antaa otsikkoa.",
"summary-preview": "Yhteenvedon esikatselu:",
"subject-preview": "Otsikon esikatselu:",
+ "previewerrortext": "Muokkaustesi esikatselun toteuttamisessa on tapahtunut virhe.",
"blockedtitle": "Käyttäjä on estetty",
"blockedtext": "'''Käyttäjätunnuksesi tai IP-osoitteesi on estetty.'''\n\nEston on asettanut $1.\nSyy: '''$2'''\n\n* Eston alkamisaika: $8\n* Eston päättymisaika: $6\n* Kohde: $7\n\nVoit keskustella ylläpitäjän $1 tai toisen [[{{MediaWiki:Grouppage-sysop}}|ylläpitäjän]] kanssa estosta.\nHuomaa, ettet voi lähettää sähköpostia {{GRAMMAR:genitive|{{SITENAME}}}} kautta, ellet ole asettanut olemassa olevaa sähköpostiosoitetta [[Special:Preferences|asetuksissa]] tai jos esto on asetettu koskemaan myös sähköpostin lähettämistä.\nIP-osoitteesi on $3 ja estotunnus on #$5.\nLiitä kaikki yllä olevat tiedot mahdollisiin kyselyihisi.",
"autoblockedtext": "IP-osoitteesi on estetty automaattisesti, koska sitä on käyttänyt toinen käyttäjä, jonka on estänyt ylläpitäjä $1.\nEston syy on:\n\n:''$2''\n\n* Eston alkamisaika: $8\n* Eston päättymisaika: $6\n* Kohde: $7\n\nVoit keskustella ylläpitäjän $1 tai toisen [[{{MediaWiki:Grouppage-sysop}}|ylläpitäjän]] kanssa estosta.\n\nHuomaa, ettet voi lähettää sähköpostia {{GRAMMAR:genitive|{{SITENAME}}}} kautta, ellet ole asettanut olemassa olevaa sähköpostiosoitetta [[Special:Preferences|asetuksissa]] tai jos esto on asetettu koskemaan myös sähköpostin lähettämistä.\n\nIP-osoitteesi on $3 ja estotunnus on #$5.\nLiitä kaikki yllä olevat tiedot mahdollisiin kyselyihisi.",
@@ -646,7 +660,7 @@
"longpageerror": "'''Virhe: Lähettämäsi tekstin pituus on {{PLURAL:$1|kilotavu|$1 kilotavua}}. Tekstiä ei voida tallentaa, koska se on pitempi kuin sallittu enimmäispituus {{PLURAL:$2|yksi kilotavu|$2 kilotavua}}.'''",
"readonlywarning": "'''Varoitus: Tietokanta on lukittu huoltoa varten, joten et pysty tallentamaan muokkauksiasi juuri nyt.'''\nSaattaa olla paras leikata ja liimata tekstisi omaan tekstitiedostoosi ja tallentaa se tänne myöhemmin.\n\nLukitsemisen syy: $1",
"protectedpagewarning": "'''Varoitus: Tämä sivu on suojattu niin, että vain ylläpitäjät voivat muokata sitä.'''\nAlla on viimeisin lokitapahtuma:",
- "semiprotectedpagewarning": "'''Huomautus:''' Tämä sivu on suojattu niin, että vain rekisteröityneet käyttäjät voivat muokata sitä.\nAlla on viimeisin lokitapahtuma:",
+ "semiprotectedpagewarning": "<strong>Huomaa:</strong> Tämä sivu on suojattu niin, että vain rekisteröityneet käyttäjät voivat muokata sitä.\nAlla on viimeisin lokitapahtuma:",
"cascadeprotectedwarning": "<strong>Varoitus:</strong> Vain ylläpitäjät voivat muokata tätä sivua, koska se on sisällytetty {{PLURAL:$1|seuraavaan tarttuvasti suojattuun sivuun|seuraaviin tarttuvasti suojattuihin sivuihin}}:",
"titleprotectedwarning": "'''Varoitus: Tämä sivunimi on suojattu niin, että sivun luomiseen tarvitaan [[Special:ListGroupRights|erityisiä oikeuksia]].'''\nAlla on viimeisin lokitapahtuma:",
"templatesused": "Tällä sivulla {{PLURAL:$1|käytetty malline|käytetyt mallineet}}:",
@@ -685,6 +699,10 @@
"content-model-text": "pelkkä teksti",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Tyhjä objekti",
+ "content-json-empty-array": "Tyhjä array",
+ "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}}.",
"expensive-parserfunction-category": "Sivut, joissa on liian monta vaativaa jäsenninfunktiota",
"post-expand-template-inclusion-warning": "'''Varoitus:''' Sisällytettyjen mallineiden koko on liian suuri.\nJoitakin mallineita ei ole sisällytetty.",
@@ -739,7 +757,7 @@
"history-feed-empty": "Pyydettyä sivua ei ole olemassa.\nSe on saatettu poistaa wikistä tai nimetä uudelleen.\nKokeile [[Special:Search|hakua]] löytääksesi asiaan liittyviä sivuja.",
"rev-deleted-comment": "(muokkausyhteenveto poistettu)",
"rev-deleted-user": "(käyttäjänimi poistettu)",
- "rev-deleted-event": "(lokitapahtuma poistettu)",
+ "rev-deleted-event": "(lokitiedot poistettu)",
"rev-deleted-user-contribs": "[käyttäjätunnus tai IP-osoite poistettu – muokkaus on piilotettu muokkausluettelosta]",
"rev-deleted-text-permission": "Tämä versio sivusta on '''poistettu'''.\nLisätietoja löytyy [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} poistolokista].",
"rev-suppressed-text-permission": "Tämä versio sivusta on <strong>häivytetty</strong>.\nLisätietoja löytyy [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} häivytyslokista].",
@@ -773,7 +791,7 @@
"revdelete-legend": "Aseta version näkyvyyden rajoitukset",
"revdelete-hide-text": "Piilota version tekstisisältö",
"revdelete-hide-image": "Piilota tiedoston sisältö",
- "revdelete-hide-name": "Piilota toiminto ja kohde",
+ "revdelete-hide-name": "Piilota kohde ja parametrit",
"revdelete-hide-comment": "Piilota yhteenveto",
"revdelete-hide-user": "Piilota tekijän tunnus tai IP-osoite",
"revdelete-hide-restricted": "Häivytä tiedot sekä ylläpitäjien että muiden käyttäjien näkyviltä",
@@ -827,7 +845,6 @@
"mergehistory-same-destination": "Lähde- ja kohdesivut eivät voi olla samat",
"mergehistory-reason": "Syy:",
"mergelog": "Yhdistämisloki",
- "pagemerge-logentry": "yhdisti kohteen [[$1]] kohteeseen [[$2]] (versiot $3 saakka)",
"revertmerge": "Peru yhdistäminen",
"mergelogpagetext": "Alla on loki viimeisimmistä muutoshistorioiden yhdistämisistä.",
"history-title": "Sivun ”$1” muutoshistoria",
@@ -850,6 +867,8 @@
"notextmatches": "Hakusanaa ei löytynyt sivujen teksteistä",
"prevn": "← {{PLURAL:$1|edellinen|$1 edellistä}}",
"nextn": "{{PLURAL:$1|seuraava|$1 seuraavaa}} →",
+ "prev-page": "edellinen sivu",
+ "next-page": "seuraava sivu",
"prevn-title": "{{PLURAL:$1|Edellinen osuma|Edelliset $1 osumaa}}",
"nextn-title": "{{PLURAL:$1|Seuraava osuma|Seuraavat $1 osumaa}}",
"shown-title": "Näytä $1 {{PLURAL:$1|osuma|osumaa}} sivulla",
@@ -868,6 +887,7 @@
"search-result-category-size": "{{PLURAL:$1|1 jäsen|$1 jäsentä}} ({{PLURAL:$2|1 alaluokka|$2 alaluokkaa}}, {{PLURAL:$3|1 tiedosto|$3 tiedostoa}})",
"search-redirect": "(ohjaus $1)",
"search-section": "(osio $1)",
+ "search-category": "(luokka $1)",
"search-file-match": "(vastaa tiedoston sisältöä)",
"search-suggest": "Tarkoititko: $1",
"search-interwiki-caption": "Sisarprojektit",
@@ -878,7 +898,7 @@
"searchall": "kaikki",
"showingresults": "Alla on vain {{PLURAL:$1|<strong>1</strong> hakutulos|<strong>$1</strong> hakutulosta}} alkaen tuloksesta nro <strong>$2</strong>.",
"showingresultsinrange": "Alla näytetään {{PLURAL:$1|<strong>1</strong> tulos|<strong>$1</strong> tulosta}} väliltä <strong>$2</strong> – <strong>$3</strong>.",
- "search-showingresults": "{{PLURAL:$4|Tulos <strong>$1</strong> enimmäismäärästä <strong>$3</strong>|Tulokset <strong>$1 - $2</strong> enimmäismäärästä <strong>$3</strong>}}",
+ "search-showingresults": "{{PLURAL:$4|Tulos <strong>$1</strong> enimmäismäärästä <strong>$3</strong>|Tulokset <strong>$1 – $2</strong> enimmäismäärästä <strong>$3</strong>}}",
"search-nonefound": "Hakusi ei tuottanut tulosta.",
"powersearch-legend": "Laajennettu haku",
"powersearch-ns": "Hae nimiavaruuksista:",
@@ -888,7 +908,7 @@
"powersearch-remember": "Muista valinta tulevia hakuja varten",
"search-external": "Ulkoinen haku",
"searchdisabled": "Tekstihaku on poistettu toistaiseksi käytöstä suuren kuorman vuoksi. Voit käyttää alla olevaa Googlen hakukenttää sivujen etsimiseen, kunnes haku tulee taas käyttöön. <small>Huomaa, että ulkopuoliset kopiot {{GRAMMAR:genitive|{{SITENAME}}}} sisällöstä eivät välttämättä ole ajan tasalla.</small>",
- "search-error": "Virhe ilmaantui haettaessa: $1",
+ "search-error": "Haku epäonnistui: $1",
"preferences": "Asetukset",
"mypreferences": "Asetukset",
"prefs-edits": "Muokkauksia",
@@ -901,6 +921,11 @@
"prefs-personal": "Käyttäjätiedot",
"prefs-rc": "Tuoreet muutokset",
"prefs-watchlist": "Tarkkailulista",
+ "prefs-editwatchlist": "Muokkaa tarkkailulistaa",
+ "prefs-editwatchlist-label": "Muokkaa tarkkailulistasi merkintöjä:",
+ "prefs-editwatchlist-edit": "Näytä ja poista kohteita tarkkailulistallasi",
+ "prefs-editwatchlist-raw": "Muokkaa tarkkailulistan raakaversiota",
+ "prefs-editwatchlist-clear": "Tyhjennä tarkkailulistasi",
"prefs-watchlist-days": "Näytettävien päivien määrä tarkkailulistalla",
"prefs-watchlist-days-max": "Enintään $1 {{PLURAL:$1|päivä|päivää}}",
"prefs-watchlist-edits": "Tarkkailulistalla näytettävien muokkausten määrä",
@@ -970,7 +995,7 @@
"gender-female": "Nainen",
"prefs-help-gender": "Tämän asetuksen määrittäminen on vapaaehtoista.\nOhjelmisto käyttää annettua arvoa viitaten sinuun oikealla kieliopillisella suvulla.\nTämä tieto on julkinen.",
"email": "Sähköpostitoiminnot",
- "prefs-help-realname": "Vapaaehtoinen. Nimesi näytetään käyttäjätunnuksesi sijasta sivun tekijäluettelossa.",
+ "prefs-help-realname": "Oikean nimen ilmoittaminen on vapaaehtoista.\nJos ilmoitettu, sitä voidaan käyttää tekijän mainitsemiseen.",
"prefs-help-email": "Vapaaehtoinen, mutta tarvitaan uuden salasanan pyytämiseen, jos unohdat salasanasi.",
"prefs-help-email-others": "Voit myös antaa muiden käyttäjien ottaa yhteyttä sinuun sähköpostilla. Osoitteesi ei paljastu toisen käyttäjän ottaessa sinuun yhteyttä.",
"prefs-help-email-required": "Sähköpostiosoite on pakollinen.",
@@ -1059,15 +1084,15 @@
"right-writeapi": "Käyttää kirjoitus-APIa",
"right-delete": "Poistaa sivuja",
"right-bigdelete": "Poistaa sivuja, joilla on pitkä historia",
- "right-deletelogentry": "Poistaa ja palauttaa tiettyjä lokimerkintöjä",
- "right-deleterevision": "Poistaa ja palauttaa sivujen versioita",
- "right-deletedhistory": "Tarkastella poistettujen versioiden tietoja ilman niihin liittyvää tekstisisältöä",
- "right-deletedtext": "Tarkastella poistettujen sivujen tekstiä ja muutoksia poistettujen versioiden välillä",
+ "right-deletelogentry": "Poistaa ja palauttaa näkyviin yksittäisiä lokimerkintöjä",
+ "right-deleterevision": "Poistaa ja palauttaa näkyviin sivujen yksittäisiä versioita",
+ "right-deletedhistory": "Nähdä poistetut merkinnät sivuhistoriassa ilman niihin liittyvää tekstisisältöä",
+ "right-deletedtext": "Nähdä poistettu teksti ja muutokset poistettujen versioiden välillä",
"right-browsearchive": "Hakea poistettuja sivuja",
"right-undelete": "Palauttaa poistettuja sivuja",
- "right-suppressrevision": "Katsoa, piilottaa ja tuoda näkyviin tiettyjä sivujen versioita kaikilta käyttäjiltä",
+ "right-suppressrevision": "Nähdä, piilottaa ja tuoda näkyviin yksittäisiä sivujen versioita, jotka on piilotettu kaikilta käyttäjiltä",
"right-viewsuppressed": "Katsoa versioita, jotka on piilotettu jokaiselta käyttäjältä",
- "right-suppressionlog": "Tarkastella yksityisiä lokeja",
+ "right-suppressionlog": "Nähdä yksityiset lokit",
"right-block": "Asettaa toiselle käyttäjälle muokkausesto",
"right-blockemail": "Estää käyttäjää lähettämästä sähköpostia",
"right-hideuser": "Estää käyttäjätunnus ja piilottaa se näkyvistä",
@@ -1077,6 +1102,7 @@
"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-editcontentmodel": "Muokata sivun sisältömallia (content model)",
"right-editinterface": "Muokata käyttöliittymätekstejä",
"right-editusercssjs": "Muokata toisten käyttäjien CSS- ja JavaScript-tiedostoja",
"right-editusercss": "Muokata toisten käyttäjien CSS-tiedostoja",
@@ -1084,7 +1110,7 @@
"right-editmyusercss": "Muokata omia CSS-tiedostoja",
"right-editmyuserjs": "Muokata omia JavaScript-tiedostoja",
"right-viewmywatchlist": "Nähdä oma tarkkailulista",
- "right-editmywatchlist": "Muokata tarkkailulistaasi. Huomaa, että jotkin toiminnot lisäävät yhä sivuja listallesi riippumatta tästä oikeudesta.",
+ "right-editmywatchlist": "Muokata omaa tarkkailulistaasi. (Jotkut toiminnot lisäävät edelleen sivuja listallesi ilmankin tätä oikeutta.)",
"right-viewmyprivateinfo": "Nähdä omat yksityiset tietosi (esim. sähköpostiosoite, oikea nimi)",
"right-editmyprivateinfo": "Muokata omia yksityisiä tietojasi (esim. sähköpostiosoite, oikea nimi)",
"right-editmyoptions": "Muokata omia asetuksiasi",
@@ -1096,7 +1122,7 @@
"right-patrol": "Merkitä muiden tekemät muokkaukset tarkastetuiksi",
"right-autopatrol": "Omat muokkaukset on automaattisesti merkitty tarkastetuksi",
"right-patrolmarks": "Nähdä tarkastusmerkit tuoreissa muutoksissa",
- "right-unwatchedpages": "Nähdä luetteloa tarkkailemattomista sivuista",
+ "right-unwatchedpages": "Nähdä luettelon tarkkailemattomista sivuista",
"right-mergehistory": "Yhdistää sivujen historioita",
"right-userrights": "Muuttaa kaikkia käyttäjäoikeuksia",
"right-userrights-interwiki": "Muokata käyttäjien oikeuksia muissa wikeissä",
@@ -1104,6 +1130,7 @@
"right-override-export-depth": "Viedä sivuja sisältäen viitatut sivut viiden syvyydellä",
"right-sendemail": "Lähettää sähköpostia muille käyttäjille",
"right-passwordreset": "Tarkastella salasanan alustusviestejä",
+ "right-managechangetags": "Luoda ja poistaa [[Special:Tags|merkkauksia]] tietokannasta",
"newuserlogpage": "Uudet käyttäjät",
"newuserlogpagetext": "Tämä on loki luoduista käyttäjätunnuksista.",
"rightslog": "Käyttöoikeusloki",
@@ -1145,16 +1172,18 @@
"action-userrights-interwiki": "muokata muiden wikien käyttäjien käyttöoikeuksia",
"action-siteadmin": "lukita tai avata tietokantaa",
"action-sendemail": "lähettää sähköpostia",
- "action-editmywatchlist": "muokata tarkkailulistaasi",
+ "action-editmywatchlist": "muokata omaa tarkkailulistaasi",
"action-viewmywatchlist": "tarkastella tarkkailulistaasi",
"action-viewmyprivateinfo": "katsoa omia yksityisiä tietojasi",
"action-editmyprivateinfo": "muokata omia yksityisiä tietojasi",
+ "action-editcontentmodel": "muokata sivun sisältömallia",
+ "action-managechangetags": "luoda ja poistaa merkkauksia tietokannasta",
"nchanges": "$1 {{PLURAL:$1|muutos|muutosta}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|viimeisen käynnin jälkeen}}",
"enhancedrc-history": "historia",
"recentchanges": "Tuoreet muutokset",
"recentchanges-legend": "Tuoreiden muutosten asetukset",
- "recentchanges-summary": "Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.",
+ "recentchanges-summary": "Tällä sivulla voi seurata tuoreita tähän wikiin tehtyjä muutoksia.",
"recentchanges-noresult": "Ei muutoksia, jotka täyttävät nämä kriteerit valitun ajanjakson aikana.",
"recentchanges-feed-description": "Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.",
"recentchanges-label-newpage": "Tämä muutos loi uuden sivun",
@@ -1219,9 +1248,9 @@
"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.",
- "upload-permitted": "Sallitut tiedostomuodot: $1.",
- "upload-preferred": "Suositellut tiedostomuodot: $1.",
- "upload-prohibited": "Kielletyt tiedostomuodot: $1.",
+ "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.",
"uploadlogpage": "Tiedostoloki",
"uploadlogpagetext": "Alla on luettelo uusimmista tiedostonlisäyksistä. Kaikki ajat näytetään palvelimen aikavyöhykkeessä.",
"filename": "Tiedoston nimi:",
@@ -1287,7 +1316,7 @@
"upload-description": "Tiedoston kuvaus",
"upload-options": "Tallennusasetukset",
"watchthisupload": "Tarkkaile tätä tiedostoa",
- "filewasdeleted": "Tämän niminen tiedosto on lisätty ja poistettu aikaisemmin. Tarkista $1 ennen jatkamista.",
+ "filewasdeleted": "Tiedosto tällä samalla nimellä on aikaisemmin tallennettu ja sittemmin poistettu.\nKatso $1 ennen kuin jatkat tiedoston tallentamista uudestaan.",
"filename-bad-prefix": "Tallentamasi tiedoston nimi alkaa merkkijonolla '''$1''', joka on yleensä digitaalikameroiden automaattisesti antama nimi, joka ei kuvaa tiedoston sisältöä. Anna tiedostolle kuvaavampi nimi.",
"filename-prefix-blacklist": " #<!-- älä muokkaa tätä riviä --> <pre>\n# Syntaksi on seuraava:\n# * #-merkki aloittaa kommentin, joka jatkuu rivin loppuun\n# * Jokainen epätyhjä rivi on tiedostonimien etuliite digitaalikameroiden yleisesti käyttämille tiedostonimille\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # jotkut matkapuhelimet\nIMG # yleinen\nJD # Jenoptik\nMGP # Pentax\nPICT # muut\n #</pre> <!-- älä muokkaa tätä riviä -->",
"upload-success-subj": "Tallennus onnistui",
@@ -1479,7 +1508,6 @@
"statistics": "Tilastot",
"statistics-header-pages": "Sivutilastot",
"statistics-header-edits": "Muokkaustilastot",
- "statistics-header-views": "Katselutilastot",
"statistics-header-users": "Käyttäjätilastot",
"statistics-header-hooks": "Muut tilastot",
"statistics-articles": "Sisältösivuja",
@@ -1488,13 +1516,9 @@
"statistics-files": "Tallennettuja tiedostoja",
"statistics-edits": "Muokkauksia {{GRAMMAR:genitive|{{SITENAME}}}} perustamisen jälkeen",
"statistics-edits-average": "Keskimäärin yhtä sivua muokattu",
- "statistics-views-total": "Sivuja katsottu yhteensä",
- "statistics-views-total-desc": "Näyttökertoihin eivät sisälly toimintosivut eikä sivut, joita ei ole olemassa",
- "statistics-views-peredit": "Sivuja katsottu muokkausta kohden",
"statistics-users": "Rekisteröityneitä [[Special:ListUsers|käyttäjiä]]",
"statistics-users-active": "Aktiivisia käyttäjiä",
"statistics-users-active-desc": "Käyttäjät, jotka ovat suorittaneet jonkin toiminnon {{PLURAL:$1|edellisen päivän|edellisten $1 päivän}} aikana.",
- "statistics-mostpopular": "Katsotuimmat sivut",
"pageswithprop": "Sivut sivun ominaisuuden mukaan",
"pageswithprop-legend": "Sivut sivun ominaisuuden mukaan",
"pageswithprop-text": "Tällä sivulla on lueteltu sivut, jotka käyttävät erityistä sivun ominaisuutta.",
@@ -1535,9 +1559,9 @@
"uncategorizedtemplates": "Luokittelemattomat mallineet",
"unusedcategories": "Käyttämättömät luokat",
"unusedimages": "Käyttämättömät tiedostot",
- "popularpages": "Suositut sivut",
"wantedcategories": "Halutut luokat",
"wantedpages": "Halutut sivut",
+ "wantedpages-summary": "Luettelo olemattomista sivuista, joihin johtaa eniten linkkejä. Luettelossa ei kuitenkaan ole sellaisia sivuja, joihin johtaa ainoastaan uudelleenohjauksia. Jos haluat nähdä luettelon niistä olemattomista sivuista, joihin on linkki uudelleenohjauksista, katso sivua [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Virheellinen otsikko tuloksissa: $1",
"wantedfiles": "Halutut tiedostot",
"wantedfiletext-cat": "Seuraavia tiedostoja käytetään, mutta niitä ei ole olemassa. Ulkopuolissa mediavarastoissa olevat tiedostot voivat näkyä tällä listalla, vaikka ne ovat olemassa. Tällaiset väärät merkinnät on <del>yliviivattu</del>. Lisäksi sellaiset sivut, joihin on sisällytetty tiedostoja, jotka eivät ole olemassa, on luetteloitu [[:$1|täällä]].",
@@ -1597,10 +1621,12 @@
"pager-older-n": "{{PLURAL:$1|1 vanhempi|$1 vanhempaa}} →",
"suppress": "Häivytys",
"querypage-disabled": "Tämä toimintosivu on poistettu käytöstä suorituskykysyistä.",
+ "apihelp": "API-apu",
+ "apihelp-no-such-module": "Moduulia ”$1” ei löydy.",
"booksources": "Kirjalähteet",
"booksources-search-legend": "Etsi kirjalähteitä",
"booksources-isbn": "ISBN",
- "booksources-go": "Siirry",
+ "booksources-search": "Hae",
"booksources-text": "Alla linkkejä ulkopuolisiin sivustoihin, joilla myydään uusia ja käytettyjä kirjoja. Sivuilla voi myös olla lisätietoa kirjoista.",
"booksources-invalid-isbn": "Annettu ISBN-numero ei ole kelvollinen. Tarkista alkuperäisestä lähteestä kirjoitusvirheiden varalta.",
"specialloguserlabel": "Suorittaja:",
@@ -1619,7 +1645,7 @@
"allarticles": "Kaikki sivut",
"allinnamespace": "Kaikki sivut nimiavaruudessa $1",
"allpagessubmit": "Hae",
- "allpagesprefix": "Katkaisuhaku",
+ "allpagesprefix": "Sivut, jotka alkavat etuliitteellä:",
"allpagesbadtitle": "Annettu otsikko oli kelvoton tai siinä oli wikien välinen etuliite.",
"allpages-bad-ns": "{{GRAMMAR:inessive|{{SITENAME}}}} ei ole nimiavaruutta ”$1”.",
"allpages-hide-redirects": "Piilota ohjaukset",
@@ -1641,7 +1667,7 @@
"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}}: <code>$1</code> (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": "Katkaisuhaku",
+ "listusersfrom": "Käyttäjien tunnukset alkavat kirjaimilla:",
"listusers-submit": "Hae",
"listusers-noresult": "Käyttäjiä ei löytynyt.",
"listusers-blocked": "(estetty)",
@@ -1736,7 +1762,7 @@
"wlheader-enotif": "Sähköposti-ilmoitus on käytössä.",
"wlheader-showupdated": "Sivut, joita on muokattu viimeisen käyntisi jälkeen, on '''lihavoitu'''.",
"wlnote": "Alla {{PLURAL:$1|on viimeisin muutos|ovat viimeisimmät <strong>$1</strong> muutosta}} edellisen {{PLURAL:$2|tunnin|<strong>$2</strong> tunnin}} ajalta $3 kello $4 lukien.",
- "wlshowlast": "Näytä edelliset $1 tuntia tai $2 päivää tai $3",
+ "wlshowlast": "Näytä edelliset $1 tuntia tai $2 päivää",
"watchlist-options": "Tarkkailulistan asetukset",
"watching": "Lisätään tarkkailulistalle...",
"unwatching": "Poistetaan tarkkailulistalta...",
@@ -1767,7 +1793,7 @@
"delete-confirm": "Poista ”$1”",
"delete-legend": "Sivun poisto",
"historywarning": "<strong>Varoitus:</strong> Sivulla, jota olet poistamassa, on muokkaushistoriaa ja sitä on muokattu $1 {{PLURAL:$1|kerran|kertaa}}:",
- "confirmdeletetext": "Olet poistamassa sivun tai tiedoston ja kaiken sen historian. Ymmärrä teon seuraukset ja tee poisto {{GRAMMAR:genitive|{{SITENAME}}}} [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.",
+ "confirmdeletetext": "Olet poistamassa sivun ja kaiken sen historian.\nVahvista, että olet aikeissa tehdä tämän ja että ymmärrät teon seuraukset ja teet poiston [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.",
"actioncomplete": "Toiminto suoritettu",
"actionfailed": "Toiminto epäonnistui",
"deletedtext": "”$1” on poistettu.\nSivulla $2 on lista viimeaikaisista poistoista.",
@@ -1776,16 +1802,15 @@
"deletionlog": "poistoloki",
"reverted": "Palautettu aikaisempaan versioon",
"deletecomment": "Syy:",
- "deleteotherreason": "Muu syy tai tarkennus",
+ "deleteotherreason": "Muu syy tai tarkennus:",
"deletereasonotherlist": "Muu syy",
"deletereason-dropdown": "* Yleiset poistosyyt\n** Spam tai mainossivu\n** Vandalismi\n** Tekijänoikeusrikkomus\n** Sivun tekijän pyyntö\n** Virheellinen ohjaus",
"delete-edit-reasonlist": "Muokkaa poistosyitä",
- "delete-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistamista on rajoitettu suorituskykysyistä.",
+ "delete-toobig": "Tällä sivulla on pitkä muokkaushistoria, yli $1 {{PLURAL:$1|versio|versiota}}. \nTämänkaltaisten sivujen poistamista on rajoitettu. Tällä ehkäistään sivuston {{SITENAME}} vaurioitumista tahattomasti.",
"delete-warning-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistaminen voi haitata sivuston suorituskykyä.",
"deleteprotected": "Et voi poistaa tätä sivua, koska se on suojattu.",
"deleting-backlinks-warning": "'''Varoitus:''' Sivulle, jota olet poistamassa, johtaa [[Special:WhatLinksHere/{{FULLPAGENAME}}|linkkejä muilta sivuilta]], tai sivu on sisällytetty muuhun sivuun.",
"rollback": "palauta aiempaan versioon",
- "rollback_short": "Palautus",
"rollbacklink": "palauta",
"rollbacklinkcount": "palauta $1 {{PLURAL:$1|muutos|muutosta}}",
"rollbacklinkcount-morethan": "palauta yli $1 {{PLURAL:$1|muutos|muutosta}}",
@@ -1856,7 +1881,7 @@
"undelete": "Tarkastele poistettuja sivuja",
"undeletepage": "Tarkastele ja palauta poistettuja sivuja",
"undeletepagetitle": "'''Poistetut versiot sivusta [[:$1]]'''.",
- "viewdeletedpage": "Poistettujen sivujen selaus",
+ "viewdeletedpage": "Tarkastele poistettuja sivuja",
"undeletepagetext": "{{PLURAL:$1|Seuraava sivu|Seuraavat sivut}} on poistettu, mutta {{PLURAL:$1|se löytyy|ne löytyvät}} vielä arkistosta, joten {{PLURAL:$1|se|ne}} voidaan palauttaa takaisin. Arkisto saatetaan tyhjentää aika ajoin.",
"undelete-fieldset-title": "Palauta versioita",
"undeleteextrahelp": "Palauttaaksesi sivun koko muutoshistorian jätä kaikki valintalaatikot tyhjiksi ja napsauta '''''{{int:undeletebtn}}'''''.\nVoit palauttaa versioita valikoivasti valitsemalla vain niiden versioiden valintalaatikot, jotka haluat palauttaa.",
@@ -1895,8 +1920,9 @@
"namespace": "Nimiavaruus:",
"invert": "Käänteinen valinta",
"tooltip-invert": "Valitse tämä kohta, jos haluat piilottaa muutokset sivuihin valitussa nimiavaruudessa (ja liittyviin nimiavaruuksiin, jos valittu)",
+ "tooltip-whatlinkshere-invert": "Laita rasti tähän ruutuun, kun haluat piilottaa linkit niistä sivuista, jotka kuuluvat valittuun nimiavaruuteen.",
"namespace_association": "Liittyvä nimiavaruus",
- "tooltip-namespace_association": "Valitse tämä kohta, jos haluat sisällyttää ne keskustelu- tai aihe-nimiavaruudet, jotka liittyvät valittuun nimiavaruuteen",
+ "tooltip-namespace_association": "Valitse tämä kohta, jos haluat haun sisältävän myös valittuun nimiavaruuteen liittyvän keskustelu- tai aihenimiavaruuden.",
"blanknamespace": "(sivut)",
"contributions": "{{GENDER:$1|Käyttäjän}} muokkaukset",
"contributions-title": "Käyttäjän $1 muokkaukset",
@@ -1978,7 +2004,7 @@
"unblockiptext": "Tällä lomakkeella voit poistaa käyttäjän tai IP-osoitteen muokkauseston.",
"ipusubmit": "Poista tämä esto",
"unblocked": "Käyttäjän [[User:$1|$1]] esto on poistettu",
- "unblocked-range": "$1 ei ole enää estettynä",
+ "unblocked-range": "Osoitealueen $1 muokkausesto on poistettu.",
"unblocked-id": "Esto $1 on poistettu",
"unblocked-ip": "Käyttäjän [[Special:Contributions/$1|$1]] esto on poistettu.",
"blocklist": "Estetyt käyttäjät",
@@ -2034,7 +2060,7 @@
"ipb-needreblock": "$1 on jo estetty. Haluatko muuttaa eston asetuksia?",
"ipb-otherblocks-header": "{{PLURAL:$1|Muu esto|Muut estot}}",
"unblock-hideuser": "Et voi poistaa estoa tältä käyttäjältä, koska hänen käyttäjätunnuksensa on piilotettu.",
- "ipb_cant_unblock": "Estoa ”$1” ei löytynyt. Se on saatettu poistaa.",
+ "ipb_cant_unblock": "Virhe: Estoa tunnuksella ”$1” ei löytynyt. Se on ehkä jo otettu pois.",
"ipb_blocked_as_range": "IP-osoite $1 on estetty välillisesti ja sen estoa ei voi poistaa. Se on estetty osana verkkoaluetta $2, jonka eston voi poistaa",
"ip_range_invalid": "Virheellinen IP-alue.",
"ip_range_toolarge": "Suuremmat osoitealue-estot kuin /$1 eivät ole sallittuja.",
@@ -2043,7 +2069,7 @@
"sorbsreason": "IP-osoitteesi on listattu avoimena välityspalvelimena DNSBL:n mustalla listalla sivustolla {{SITENAME}}.",
"sorbs_create_account_reason": "IP-osoitteesi on listattu avoimena välityspalvelimena DNSBL:n mustalla listalla sivustolla {{SITENAME}}. \nEt voi luoda käyttäjätunnusta.",
"xffblockreason": "Yhteydet IP-osoitteesta, joka löytyy sinun tai käyttämäsi välipalvelimen X-Forwarded-For-otsakkeesta, on estetty. Alkuperäinen estämisen syy oli: $1",
- "cant-see-hidden-user": "Käyttäjä, jota yrität estää on jo estetty ja piilotettu. Koska sinulla ei ole hideuser-oikeutta, et voi nähdä tai muokata käyttäjän estoa.",
+ "cant-see-hidden-user": "Käyttäjä, jota yrität estää, on jo estetty ja käyttäjänimi on piilotettu. \nKoska sinulla ei ole hideuser-oikeutta, et voi nähdä tai muuttaa käyttäjän estoasetuksia.",
"ipbblocked": "Et voi estää tai poistaa estoja muilta käyttäjiltä, koska itse olet estettynä",
"ipbnounblockself": "Et ole oikeutettu poistamaan estoa itseltäsi",
"lockdb": "Lukitse tietokanta",
@@ -2159,14 +2185,15 @@
"thumbnail-temp-create": "Väliaikaisen esikatselukuvan luonti epäonnistui",
"thumbnail-dest-create": "Esikatselukuvaa ei voitu tallentaa kohteeseen",
"thumbnail_invalid_params": "Virheelliset parametrit pienoiskuvalle",
+ "thumbnail_toobigimagearea": "Tiedosto, jonka mitat ovat suuremmat kuin $1",
"thumbnail_dest_directory": "Kohdehakemiston luominen ei onnistunut",
"thumbnail_image-type": "Kuvamuoto ei ole tuettu",
"thumbnail_gd-library": "GD-kirjastoa ei ole asennettu oikein. Funktio $1 puuttuu.",
"thumbnail_image-missing": "Tiedosto näyttää puuttuvan: $1",
"thumbnail_image-failure-limit": "Tätä kuvaketta on yritetty tulkita epäonnistuneesti liian monta kertaa ($1 tai enemmän). Ole hyvä ja yritä myöhemmin uudelleen.",
"import": "Tuo sivuja",
- "importinterwiki": "Tuo sivuja muista wikeistä (transwiki import)",
- "import-interwiki-text": "Valitse wiki ja sivun nimi tuontia varten.\nVersioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan. \nKaikki wikienväliset tuontitapahtumat kirjataan [[Special:Log/import|tuontilokiin]].",
+ "importinterwiki": "Tuo sivuja toisesta wikistä",
+ "import-interwiki-text": "Valitse wiki ja sivun nimi tuontia varten.\nVersioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan. \nKaikki tuonnit muista wikeistä kirjataan [[Special:Log/import|tuontilokiin]].",
"import-interwiki-sourcewiki": "Lähdewiki:",
"import-interwiki-sourcepage": "Lähdesivu:",
"import-interwiki-history": "Kopioi sivun koko historia ja kaikki versiot",
@@ -2186,7 +2213,7 @@
"importcantopen": "Tuontitiedoston avaus epäonnistui",
"importbadinterwiki": "Kelpaamaton wikienvälinen linkki",
"importsuccess": "Tuonti onnistui!",
- "importnosources": "Wikienvälisiä tuontilähteitä ei ole määritelty ja suorat historiatallennukset on poistettu käytöstä.",
+ "importnosources": "Ei ole määritetty yhtään sellaista wikiä, josta voisi tuoda aineistoa. Tämän lisäksi sivuhistorioiden suorat tuontitallennukset on poistettu käytöstä.",
"importnofile": "Mitään tuotavaa tiedostoa ei lähetetty.",
"importuploaderrorsize": "Tuontitiedoston tallennus epäonnistui. Tiedosto on suurempi kuin sallittu yläraja.",
"importuploaderrorpartial": "Tuontitiedoston tallennus epäonnistui. Tiedostosta oli lähetetty vain osa.",
@@ -2210,18 +2237,15 @@
"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": "toi sivun [[$1]] tiedostomuodossa",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|versio|versiota}} tuotiin",
- "import-logentry-interwiki": "toi toisesta wikistä sivun $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versio|versiota}} tuotiin wikistä $2",
"javascripttest": "JavaScriptin testaus",
- "javascripttest-title": "Suoritetaan $1-testejä.",
"javascripttest-pagetext-noframework": "Tämä sivu on varattu JavaScript-testien suorittamiseen.",
"javascripttest-pagetext-unknownframework": "Tuntematon testausalusta $1.",
+ "javascripttest-pagetext-unknownaction": "Tuntematon toiminto \"$1\".",
"javascripttest-pagetext-frameworks": "Valitse yksi seuraavista testausalustoista: $1",
"javascripttest-pagetext-skins": "Valitse testauksessa käytettävä ulkoasu",
"javascripttest-qunit-intro": "Katso [$1 testausohjeet] mediawiki.orgissa.",
- "javascripttest-qunit-heading": "MediaWikin JavaScriptin QUnit-testikokoelma",
"tooltip-pt-userpage": "Oma käyttäjäsivu",
"tooltip-pt-anonuserpage": "IP-osoitteesi käyttäjäsivu",
"tooltip-pt-mytalk": "Oma keskustelusivu",
@@ -2231,6 +2255,7 @@
"tooltip-pt-mycontris": "Lista omista muokkauksista",
"tooltip-pt-login": "Kirjaudu sisään tai luo tunnus",
"tooltip-pt-logout": "Kirjaudu ulos",
+ "tooltip-pt-createaccount": "On suositeltavaa luoda käyttäjätunnus ja kirjautua sisään. Se ei kuitenkaan ole pakollista.",
"tooltip-ca-talk": "Keskustele sisällöstä",
"tooltip-ca-edit": "Muokkaa tätä sivua",
"tooltip-ca-addsection": "Aloita keskustelu uudesta aiheesta",
@@ -2260,6 +2285,7 @@
"tooltip-feed-atom": "Atom-syöte tälle sivulle",
"tooltip-t-contributions": "Näytä lista tämän käyttäjän muokkauksista",
"tooltip-t-emailuser": "Lähetä sähköpostia tälle käyttäjälle",
+ "tooltip-t-info": "Enemmän tietoa tästä sivusta",
"tooltip-t-upload": "Tallenna tiedostoja",
"tooltip-t-specialpages": "Näytä toimintosivut",
"tooltip-t-print": "Tulostettava versio",
@@ -2279,7 +2305,7 @@
"tooltip-preview": "Esikatsele muokkausta ennen tallennusta",
"tooltip-diff": "Näytä tehdyt muutokset",
"tooltip-compareselectedversions": "Vertaile valittuja versioita",
- "tooltip-watch": "Lisää tämä sivu tarkkailulistaan",
+ "tooltip-watch": "Lisää tämä sivu omalle tarkkailulistallesi",
"tooltip-watchlistedit-normal-submit": "Poista sivut",
"tooltip-watchlistedit-raw-submit": "Päivitä tarkkailulista",
"tooltip-recreate": "Luo sivu uudelleen",
@@ -2335,7 +2361,6 @@
"pageinfo-robot-policy": "Hakukonemerkinnät",
"pageinfo-robot-index": "Indeksoitava",
"pageinfo-robot-noindex": "Ei indeksoitava",
- "pageinfo-views": "Katselukertojen määrä",
"pageinfo-watchers": "Sivun tarkkailijoiden lukumäärä",
"pageinfo-few-watchers": "Vähemmän kuin $1 {{PLURAL:$1|tarkkailija|tarkkailijaa}}",
"pageinfo-redirects-name": "Sivulle johtavat ohjaukset",
@@ -2785,7 +2810,6 @@
"exif-urgency-low": "Matala ($1)",
"exif-urgency-high": "Korkea ($1)",
"exif-urgency-other": "Käyttäjän määrittelemä prioriteetti ($1)",
- "watchlistall2": "koko historia",
"namespacesall": "kaikki",
"monthsall": "kaikki",
"confirmemail": "Varmenna sähköpostiosoite",
@@ -2864,7 +2888,7 @@
"bitrate-zetabits": "$1 Zbit/s",
"bitrate-yottabits": "$1 Ybit/s",
"lag-warn-normal": "Muutokset, jotka ovat uudempia kuin $1 {{PLURAL:$1|sekunti|sekuntia}}, eivät välttämättä näy tällä sivulla.",
- "lag-warn-high": "Tietokannoilla on työjonoa. Muutokset, jotka ovat uudempia kuin $1 {{PLURAL:$1|sekunti|sekuntia}}, eivät välttämättä näy tällä sivulla.",
+ "lag-warn-high": "Tietokantojen päivityksessä on huomattavaa viivettä. Muutokset, jotka ovat tuoreempia kuin $1 {{PLURAL:$1|sekunti|sekuntia}}, eivät välttämättä näy luettelossa.",
"watchlistedit-normal-title": "Tarkkailulistan muokkaus",
"watchlistedit-normal-legend": "Poista sivuja tarkkailulistalta",
"watchlistedit-normal-explain": "Tarkkailulistasi sivut on lueteltu alla. Voit poistaa sivuja valitsemalla niitä vastaavat valintaruudut ja napsauttamalla ”{{int:Watchlistedit-normal-submit}}”. Voit myös muokata listaa [[Special:EditWatchlist/raw|tekstimuodossa]].",
@@ -2891,9 +2915,9 @@
"watchlisttools-edit": "Katso ja muokkaa tarkkailulistaa",
"watchlisttools-raw": "Muokkaa listaa raakamuodossa",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|keskustelu]])",
- "unknown_extension_tag": "Tuntematon laajennuskoodi ”$1”.",
"duplicate-defaultsort": "'''Varoitus:''' Oletuslajitteluavain ”$2” korvaa aiemman oletuslajitteluavaimen ”$1”.",
"duplicate-displaytitle": "<strong>Varoitus:</strong> Näytettävä otsikko \"$2\" päällekirjoittaa edellisen otsikon \"$1\".",
+ "invalid-indicator-name": "<strong>Virhe:</strong> Sivun tilan osoittimien attribuutti <code>name</code> ei saa olla tyhjä.",
"version": "Versio",
"version-extensions": "Asennetut laajennukset",
"version-skins": "Asennetut ulkoasut",
@@ -2933,6 +2957,9 @@
"version-entrypoints": "Aloituskohtien URL-osoitteet",
"version-entrypoints-header-entrypoint": "Aloituskohta",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Asennetut kirjastot",
+ "version-libraries-library": "Kirjasto",
+ "version-libraries-version": "Versio",
"redirect": "Ohjaus tiedoston, käyttäjän, sivun tai version tunnisteen mukaan",
"redirect-legend": "Ohjaus tiedostoon tai sivulle",
"redirect-summary": "Tämä toimintosivu ohjaa tiedostoon (tiedostonimen mukaan), sivulle (version numeron tai sivun tunnisteen mukaan) tai käyttäjäsivulle (käyttäjän numeron mukaan). Käyttö: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] tai [[{{#Special:Redirect}}/user/101]].",
@@ -2968,24 +2995,67 @@
"specialpages-group-wiki": "Tiedot ja työkalut",
"specialpages-group-redirects": "Ohjaavat toimintosivut",
"specialpages-group-spam": "Roskalinkkien (spam) työkalut",
+ "specialpages-group-developer": "Kehittäjien työkalut",
"blankpage": "Tyhjä sivu",
"intentionallyblankpage": "Tämä sivu on tarkoituksellisesti tyhjä.",
"external_image_whitelist": " #Älä muuta tätä riviä lainkaan.<pre>\n#Laita säännöllisten lausekkeiden palaset (vain osa, joka menee //-merkkien väliin) alle\n#Niitä verrataan ulkoisten (suoralinkitettyjen) kuvien URLeihin\n#Ne jotka sopivat, näytetään kuvina, muutoin kuviin näytetään vain linkit\n#Rivit, jotka alkavat #-merkillä ovat kommentteja\n#Tämä on riippumaton kirjainkoosta\n\n#Laita kaikki säännöllisten lausekkeiden palaset tämän rivit yläpuolelle. Älä muuta tätä riviä lainkaan</pre>",
"tags": "Voimassa olevat muutosmerkinnät",
- "tag-filter": "[[Special:Tags|Merkintä]]suodatin:",
+ "tag-filter": "[[Special:Tags|Merkkausten]] suodatin:",
"tag-filter-submit": "Suodata",
- "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merkintä|Merkinnät}}]]: $2)",
- "tags-title": "Merkinnät",
- "tags-intro": "Tämä sivu luetteloi ne merkinnät eli merkkaukset (''engl.'' tags), joilla ohjelmisto voi merkitä muokkauksia, ja mitä ne tarkoittavat.",
- "tags-tag": "Merkinnän nimi",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merkkaus|Merkkaukset}}]]: $2)",
+ "tags-title": "Merkkaukset",
+ "tags-intro": "Tämä sivu luetteloi ne merkkaukset (''engl.'' tags), joilla ohjelmisto voi merkitä muokkauksia, ja mitä ne tarkoittavat.",
+ "tags-tag": "Merkkauksen nimi",
"tags-display-header": "Näkyvyys muutosluetteloissa",
"tags-description-header": "Täysi kuvaus tarkoituksesta",
+ "tags-source-header": "Lähde",
"tags-active-header": "Aktiivinen?",
- "tags-hitcount-header": "Merkityt muutokset",
+ "tags-hitcount-header": "Merkatut muutokset",
+ "tags-actions-header": "Toiminnot",
"tags-active-yes": "Kyllä",
"tags-active-no": "Ei",
+ "tags-source-extension": "Laajennuksen määrittelemä",
+ "tags-source-manual": "Käyttäjien ja bottien käsin asettama",
+ "tags-source-none": "Ei enää käytössä",
"tags-edit": "muokkaa",
+ "tags-delete": "tuhoa",
+ "tags-activate": "aktivoi",
+ "tags-deactivate": "ota pois käytöstä",
"tags-hitcount": "$1 {{PLURAL:$1|muutos|muutosta}}",
+ "tags-manage-no-permission": "Sinulla ei ole oikeutta käsitellä merkkauksia.",
+ "tags-create-heading": "Luo uusi merkkaus",
+ "tags-create-explanation": "Oletuksena on, että uutena luodut merkkaukset tulevat käyttäjien ja bottien käyttöön.",
+ "tags-create-tag-name": "Merkkauksen nimi:",
+ "tags-create-reason": "Syy:",
+ "tags-create-submit": "Luo",
+ "tags-create-no-name": "Sinun täytyy antaa merkkaukselle nimi.",
+ "tags-create-invalid-chars": "Merkkausten nimissä ei saa olla pilkkuja (<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-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-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-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 onnistuneesta, mutta {{PLURAL:$2|seuraava varoitus|seuraavat varoitukset}} ilmeni samalla:",
+ "tags-activate-title": "Aktivoi merkkaus",
+ "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-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-reason": "Syy:",
+ "tags-deactivate-not-allowed": "Ei ole mahdollista poistaa käytöstä merkkausta \"$1\".",
+ "tags-deactivate-submit": "Poista käytöstä",
"comparepages": "Vertaile sivuja",
"compare-page1": "Sivu 1",
"compare-page2": "Sivu 2",
@@ -2997,8 +3067,8 @@
"compare-revision-not-exists": "Määrittämääsi versiota ei ole.",
"dberr-problems": "Tällä sivustolla on teknisiä ongelmia.",
"dberr-again": "Odota hetki ja lataa sivu uudelleen.",
- "dberr-info": "(Tietokantapalvelimeen yhdistäminen epäonnistui: $1)",
- "dberr-info-hidden": "(Tietokantapalvelimeen ei saada yhteyttä)",
+ "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.",
@@ -3039,6 +3109,14 @@
"revdelete-uname-unhid": "käyttäjätunnus palautettu näkyviin",
"revdelete-restricted": "asetti rajoitukset ylläpitäjille",
"revdelete-unrestricted": "poisti rajoitukset ylläpitäjiltä",
+ "logentry-block-block": "$1 {{GENDER:$2|esti}} käyttäjän {{GENDER:$4|$3}}. Eston kesto on $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|poisti muokkauseston}} käyttäjältä {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|muutti}} eston asetuksia kohteessa {{GENDER:$4|$3}}. Eston kesto on $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|esti}} käyttäjän {{GENDER:$4|$3}}. Eston kesto on $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|muutti}} eston asetuksia kohteessa {{GENDER:$4|$3}}. Eston kesto on $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|toi}} kohteen $3 tiedostotallennuksella",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|toi}} kohteen $3 muusta wikistä",
+ "logentry-merge-merge": "$1 {{GENDER:$2|yhdisti}} sivun $3 sivuun $4 (versiot $5 saakka)",
"logentry-move-move": "$1 {{GENDER:$2|siirsi}} sivun $3 uudelle nimelle $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|siirsi}} sivun $3 uudelle nimelle $4 luomatta ohjausta",
"logentry-move-move_redir": "$1 {{GENDER:$2|siirsi}} sivun $3 ohjauksen $4 päälle",
@@ -3056,20 +3134,36 @@
"logentry-upload-upload": "$1 {{GENDER:$2|tallensi}} tiedoston $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|tallensi}} uuden version tiedostosta $3",
"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",
"rightsnone": "(ei oikeuksia)",
+ "revdelete-summary": "yhteenvedon",
+ "feedback-adding": "Lisätään palautetta sivulle...",
+ "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-subject": "Otsikko",
- "feedback-message": "Viesti",
"feedback-cancel": "Peruuta",
- "feedback-submit": "Lähetä palaute",
- "feedback-adding": "Lisätään palautetta sivulle...",
+ "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-error-title": "Virhe",
"feedback-error1": "Virhe: Ohjelmointirajapinnan vastausta ei tunnistettu",
"feedback-error2": "Virhe: Muokkaus epäonnistui",
"feedback-error3": "Virhe: Ohjelmointirajapinta ei vastaa",
+ "feedback-message": "Viesti",
+ "feedback-subject": "Otsikko",
+ "feedback-submit": "Lähetä",
+ "feedback-terms": "Ymmärrän, että minua koskeva \"user agent\" -tieto sisältää tiedon siitä, mitä yksittäistä selainta ja käyttöjärjestelmää minä käytän ja että nämä tiedot tulevat näkymään julkisesti kaikille palautteeni yhteydessä.",
+ "feedback-termsofuse": "Sitoudun lähettämään palautteen käyttöehtojen määräysten mukaisesti.",
"feedback-thanks": "Kiitos. Palautteesi on jätetty sivulle [$2 $1].",
- "feedback-close": "Valmis",
- "feedback-bugcheck": "Hyvä! Varmista vielä, että ohjelmointivirhettä ei löydy [$1 tunnettujen virheiden luettelosta].",
- "feedback-bugnew": "Olen varmistanut. Ilmoitan uuden ohjelmointivirheen",
+ "feedback-thanks-title": "Kiitos!",
+ "feedback-useragent": "User agent:",
"searchsuggest-search": "Hae",
"searchsuggest-containing": "sisältää...",
"api-error-badaccess-groups": "Sinulla ei ole oikeutta tallentaa tiedostoja tähän wikiin.",
@@ -3105,6 +3199,13 @@
"api-error-stashfailed": "Sisäinen virhe: Väliaikaisen tiedoston tallentaminen epäonnistui.",
"api-error-publishfailed": "Sisäinen virhe: Väliaikaisen tiedoston julkaiseminen epäonnistui.",
"api-error-stasherror": "Tiedostoa ladattaessa tapahtui virhe.",
+ "api-error-stashedfilenotfound": "Tallennettavaa tiedostoa ei löytynyt säilöstä.",
+ "api-error-stashpathinvalid": "Hakupolku, jossa säilötyn tiedoston olisi pitänyt olla, oli virheellinen.",
+ "api-error-stashfilestorage": "Tiedoston tallentaminen säilöön epäonnistui.",
+ "api-error-stashzerolength": "Palvelin ei voinut säilöä tiedostoa, koska sen pituus oli nolla.",
+ "api-error-stashnotloggedin": "Sinun täytyy kirjautua sisään, jotta voit tallentaa tiedostoja lataussäilöön.",
+ "api-error-stashwrongowner": "Tiedosto, jota yritit käyttää säilössä, ei ole sinun omasi.",
+ "api-error-stashnosuchfilekey": "Tiedoston avainta, jota yritit käyttää säilössä, ei ole olemassa.",
"api-error-timeout": "Palvelin ei vastannut odotetun ajan kuluessa.",
"api-error-unclassified": "Tapahtui tuntematon virhe.",
"api-error-unknown-code": "Tuntematon virhe: $1.",
@@ -3135,7 +3236,7 @@
"limitreport-templateargumentsize": "Mallineen argumenttien koko<br />(template argument size)",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|tavu|tavua}}",
"limitreport-expansiondepth": "Highest expansion depth",
- "limitreport-expensivefunctioncount": "Vaativien parserfunktioiden määrä",
+ "limitreport-expensivefunctioncount": "Vaativien jäsenninfunktioiden lukumäärä",
"expandtemplates": "Laajenna mallineet",
"expand_templates_intro": "Tämä toimintosivu ottaa syötteeksi tekstiä ja laajentaa kaikki siinä olevat mallineet rekursiivisesti.\nSe myös laajentaa tuetut parserifunktiot kuten\n<code><nowiki>{{</nowiki>#language:...}}</code> ja -muuttujat kuten\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nKäytännössä se laajentaa melkein kaiken, joka on kaksoisaaltosulkeiden sisällä.",
"expand_templates_title": "Otsikko (esimerkiksi muuttujaa {{FULLPAGENAME}} varten)",
@@ -3149,6 +3250,8 @@
"expand_templates_generate_xml": "Näytä XML-jäsennyspuu",
"expand_templates_generate_rawhtml": "Näytä raaka HTML",
"expand_templates_preview": "Esikatselu",
+ "expand_templates_preview_fail_html": "<em>Koska sivustolla {{SITENAME}} on käytössä puhdas HTML-koodi ja koska istunnon tiedot ovat kadonneet, esikatselu on piilotettu JavaScript-hyökkäyksien torjumiseksi.</em>\n\n<strong>Jos olet oikealla asialla, yritä uudestaan.</strong>\nJos esikatselu ei vieläkään toimi, kokeile [[Special:UserLogout|kirjautua ulos]] ja sen jälkeen kirjaudu uudestaan sisään.",
+ "expand_templates_preview_fail_html_anon": "<em>Koska sivustolla {{SITENAME}} on käytössä puhdas HTML-koodi ja koska et ole kirjautunut sisään, esikatselu on piilotettu JavaScript-hyökkäyksien torjumiseksi.</em>\n\n<strong>Jos olet oikealla asialla, [[Special:UserLogin|kirjaudu sisään]] ja yritä uudestaan.</strong>",
"pagelanguage": "Sivun kielen valinta",
"pagelang-name": "Sivu",
"pagelang-language": "Kieli",
@@ -3159,7 +3262,58 @@
"log-name-pagelang": "Kielenvaihtoloki",
"log-description-pagelang": "Tämä on loki, johon merkitään muutokset sivujen kieliasetuksissa.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutti}} sivun kieltä sivulla $3 kielestä $4 kieleksi $5.",
- "default-skin-not-found": "Hupsista! Oletuksena tuleva ulkoasu sinun wikillesi, joka on määritelty koodissa <code dir=\"ltr\">$wgDefaultSkin</code> muotoon <code>$1</code>, ei ole saatavilla.\n\n\n<strong>Alla on ohjeita englanniksi:</strong>\n\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable them and choose the default.\n\n$2\n\n; If you have just installed MediaWiki: \n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by: :* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it. \n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code>skins/</code> directory of your MediaWiki installation. \n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n\n; If you have just upgraded MediaWiki: \n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following lines into <code>LocalSettings.php</code> to enable all currently installed skins:\n\n<pre>$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>: \n: Double-check the skin names for typos.",
+ "default-skin-not-found": "Hupsista! Oletuksena tuleva ulkoasu sinun wikillesi, joka on määritelty koodissa <code dir=\"ltr\">$wgDefaultSkin</code> muotoon <code>$1</code>, ei ole saatavilla.\n\n\n<strong>Alla on ohjeita englanniksi:</strong>\n\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable them and choose the default.\n\n$2\n\n; If you have just installed MediaWiki: \n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by: :* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it. \n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code>skins/</code> directory of your MediaWiki installation. \n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n\n; If you have just upgraded MediaWiki: \n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following lines into <code>LocalSettings.php</code> to enable all currently installed skins:\n\n<pre>$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>: \n: Double-check the skin names for typos.",
+ "default-skin-not-found-no-skins": "Hupsista! Oletusulkoasua sinun wikillesi ei ole saatavilla. Se on määritelty ulkoasuksi <code>$1</code> kohteessa <code>$wgDefaultSkin</code>.\n\nSinulla ei ole lainkaan asennettuja ulkoasuja. (You have no installed skins.)\n\nAlla on lisäohjeita englanniksi:\n\n\n; If you have just installed or upgraded MediaWiki: \n\n: You probably installed from git, or directly from the source code using some other method. This is expected. MediaWiki 1.24 and newer doesn't include any skins in the main repository. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by: \n\n:* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it. \n\n:* Downloading individual skin tarballs from [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n\n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code dir=\"ltr\">skins/</code> directory of your MediaWiki installation. \n\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (käytössä)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ei käytössä''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ei käytössä''')",
+ "mediastatistics": "Median tilastotiedot",
+ "mediastatistics-summary": "Tietoja tallennettujen tiedostojen tyypeistä. Luettelossa ovat ainoastaan tiedostojen uusimmat versiot eikä lainkaan vanhoja tai poistettuja versioita.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 tavu|$1 tavua}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-tyyppi",
+ "mediastatistics-table-extensions": "Tiedostopäätteet",
+ "mediastatistics-table-count": "Tiedostojen lukumäärä",
+ "mediastatistics-table-totalbytes": "Yhteenlaskettu koko",
+ "mediastatistics-header-unknown": "Tuntematon",
+ "mediastatistics-header-bitmap": "Bitmap-kuvat",
+ "mediastatistics-header-drawing": "Piirrokset (vektorikuvat)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Videot",
+ "mediastatistics-header-multimedia": "Rich media",
+ "mediastatistics-header-office": "Office-tiedostot",
+ "mediastatistics-header-text": "Tekstitiedostot",
+ "mediastatistics-header-executable": "Ohjelmatiedostot",
+ "mediastatistics-header-archive": "Pakatussa muodossa",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|jäljelle jäänyt pilkku|jäljelle jäänyttä pilkkua}} poistettiin JSON-tekstistä.",
+ "json-error-unknown": "Syntyi ongelma JSONin kanssa. Virhe: $1",
+ "json-error-depth": "Suurin mahdollinen pinosyvyys (stack depth) on ylitetty",
+ "json-error-state-mismatch": "Kelvoton tai vääränmuotoinen JSON",
+ "json-error-ctrl-char": "Kontrollimerkissä on virhe; se saattaa olla väärin koodattu",
+ "json-error-syntax": "Jäsennysvirhe (syntax error)",
+ "json-error-utf8": "Huonosti muotoiltuja UTF-8 merkkejä; mahdollisesti koodattu virheellisesti",
+ "json-error-recursion": "Joku arvossa (value) oleva rekursiivinen viite pitää vielä muuttaa koodiksi",
+ "json-error-inf-or-nan": "Joku NAN- tai INF-arvo arvossa (value) pitää muuttaa koodiksi",
+ "json-error-unsupported-type": "On annettu sellainen tyypin arvo, jota ei voi muuttaa koodiksi",
+ "headline-anchor-title": "Linkitä tähän osioon",
+ "special-characters-group-latin": "Latina",
+ "special-characters-group-latinextended": "Laajennettu latina",
+ "special-characters-group-ipa": "Kansainvälinen foneettinen kirjaimisto (IPA)",
+ "special-characters-group-symbols": "Symbolit",
+ "special-characters-group-greek": "Kreikka",
+ "special-characters-group-cyrillic": "Kyrillinen",
+ "special-characters-group-arabic": "Arabia",
+ "special-characters-group-arabicextended": "Laajennettu arabia",
+ "special-characters-group-persian": "Persia",
+ "special-characters-group-hebrew": "Heprea",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tamili",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhali",
+ "special-characters-group-gujarati": "Gudžarati",
+ "special-characters-group-devanagari": "Devanāgarī",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "ajatusviiva",
+ "special-characters-title-emdash": "pitkä ajatusviiva",
+ "special-characters-title-minus": "miinusmerkki"
}
diff --git a/languages/i18n/fit.json b/languages/i18n/fit.json
index 3bc686f5..50067223 100644
--- a/languages/i18n/fit.json
+++ b/languages/i18n/fit.json
@@ -275,7 +275,6 @@
"search-suggest": "Tarkoititko: $1",
"searchrelated": "relateerattu",
"searchall": "kaikki",
- "showingresultsheader": "{{PLURAL:$5|Resyltaatit'''$1'''–'''$3'''|Resyltaatit'''$1'''–'''$2''' kaiken joukosta '''$3''' }} haule '''$4'''",
"search-nonefound": "Ei yhtään resyltaattia sinun kysymyksheen",
"mypreferences": "Omat inställninkit",
"youremail": "E-posti:",
@@ -349,7 +348,6 @@
"pager-older-n": "{{PLURAL:$1|1 vanheempi|$1 vanheempaa}} →",
"booksources": "Kirjalähteet",
"booksources-search-legend": "Hae kirjalähtheitä",
- "booksources-go": "Mene",
"log": "Lokit",
"allpages": "Kaikki sivut",
"allarticles": "Kaikki sivut",
@@ -364,7 +362,7 @@
"watch": "Valvo",
"unwatch": "Lopeta valvonta",
"watchlist-details": "Valvontalistala on {{PLURAL:$1|$1 sivu|$1 sivua}} (keskustelusivuja mukhaan laskematta)",
- "wlshowlast": "Näytä viimiset $1 tiimat eli $2 päivät$3",
+ "wlshowlast": "Näytä viimiset $1 tiimat eli $2 päivät",
"watchlist-options": "Valvontalistan altternatiivit",
"actioncomplete": "Tehty",
"actionfailed": "Tehty epäonnistui",
@@ -488,7 +486,6 @@
"metadata": "Meettataatta",
"metadata-help": "Tämä fiili sisältää lisätietoja esimerkiks kuvanlukijan, eli kuvakäsittelyprukrammin lisätietoja. Kaikki tiot ei en´nää välttämättä vastaa toelisuutheen, jos kuvvaa on mookattu sen alkuperäisen luomisen jälkhiin.",
"metadata-fields": "Seuraavaa meettataatta kentät listattu tässä informasuunissa, sisälethään näkyvänä kuvasivussa, kun meettataatta taulukko kolapsaa. Muut piilotethaan stantartina.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "kaikki",
"namespacesall": "kaikki",
"monthsall": "kaikki",
"watchlisttools-view": "Näytä muutokset",
diff --git a/languages/i18n/fj.json b/languages/i18n/fj.json
index 7c825a08..959e8fff 100644
--- a/languages/i18n/fj.json
+++ b/languages/i18n/fj.json
@@ -1,146 +1,146 @@
{
- "@metadata": {
- "authors": [
- "Jose77 (on fj.wikipedia.org)"
- ]
- },
- "sunday": "Sigatabu",
- "monday": "Moniti",
- "tuesday": "Tusiti",
- "wednesday": "Vukelulu",
- "thursday": "Lotulevu",
- "friday": "Vakaraubuka",
- "saturday": "Vakarauwai",
- "sun": "Sigatabu",
- "mon": "Moniti",
- "tue": "Tusiti",
- "wed": "Vukelulu",
- "thu": "Lotulevu",
- "fri": "Vakaraubuka",
- "sat": "Vakarauwai",
- "january": "Janueri",
- "february": "Veverueri",
- "march": "Maji",
- "april": "Epereli",
- "july": "Jiulai",
- "august": "Okosita",
- "september": "Seviteba",
- "october": "Okotova",
- "november": "Noveba",
- "december": "Tiseba",
- "january-gen": "Janueri",
- "february-gen": "Veverueri",
- "march-gen": "Maji",
- "april-gen": "Evereli",
- "may-gen": "Me",
- "july-gen": "Jiulai",
- "august-gen": "Okosita",
- "september-gen": "Seviteba",
- "october-gen": "Okotova",
- "november-gen": "Noveba",
- "december-gen": "Tiseba",
- "jan": "Janueri",
- "feb": "Veverueri",
- "mar": "Maji",
- "apr": "Epereli",
- "may": "Me",
- "jun": "June",
- "jul": "Julai",
- "aug": "Okosita",
- "sep": "Seviteba",
- "oct": "Okotova",
- "nov": "Noveba",
- "dec": "Tiseba",
- "cancel": "Sasamaki",
- "mytalk": "Noqu vosa",
- "navigation": "Vakatasosoko",
- "qbedit": "Veisautaki",
- "help": "Veivuke",
- "search": "Vaqaqara",
- "searchbutton": "Vaqaqara",
- "go": "Lako",
- "searcharticle": "Lako",
- "history_short": "Tukuni",
- "printableversion": "Tikina e rawa ni tabaki",
- "permalink": "Sema tudei",
- "edit": "Veisautaki",
- "delete": "Vakarusa",
- "protect": "Taqomaki",
- "unprotect": "Sega ni taqomaki",
- "talk": "Veiwasei",
- "toolbox": "Kato ni yaya",
- "otherlanguages": "Veimataqali vosa",
- "jumptonavigation": "Vakatasosoko",
- "jumptosearch": "Vaqaqara",
- "currentevents": "Tukutuku kuruvaki",
- "currentevents-url": "Project:Tukutuku kuruvaki",
- "edithelp": "Veivukei",
- "mainpage": "Tabana levu",
- "mainpage-description": "Tabana levu",
- "portal": "Soqosoqo toso",
- "editsection": "Veisautaki",
- "editold": "Veisautaki",
- "nstab-main": "Vola volai",
- "yourname": "Yaca vakayagataki",
- "yourpassword": "Yaca vuni",
- "yourpasswordagain": "Vola tale na Yaca vuni",
- "remembermypassword": "Nanuma na yacaqu ena komipiuta oqo (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "Curu mai",
- "userlogin": "Curu mai / Dolava nomu Akaude",
- "logout": "Curu yani",
- "userlogout": "Curu yani",
- "nologinlink": "Dolava nomu Akaude",
- "createaccount": "Dolava nomu Akaude",
- "gotaccountlink": "Curu mai",
- "summary": "Kena i Soqoni:",
- "watchthis": "Vakaraica toka na tabana oqo",
- "savearticle": "Vakabula na tabana oqo",
- "showpreview": "Vakaraitaka na kenai yaloyalo",
- "showdiff": "Vakaritaka na veisau",
- "loginreqlink": "Curu mai",
- "mypreferences": "Ulutaga taleitaki",
- "searchresultshead": "Vaqaqara",
- "youremail": "I vola livaliva *:",
- "username": "Yaca vakayagataki:",
- "email": "I vola livaliva",
- "recentchanges": "Veisau vovou",
- "recentchangeslinked": "Veisau e veiwekani",
- "recentchangeslinked-feed": "Veisau e veiwekani",
- "recentchangeslinked-toolbox": "Veisau e veiwekani",
- "upload": "Vakasinaita",
- "uploadbtn": "Vakasinaita",
- "filedesc": "Kena i Soqoni",
- "fileuploadsummary": "Kena i Soqoni:",
- "watchthisupload": "Vakaraica toka na tabana oqo",
- "randompage": "Vakawasoma",
- "brokenredirects-edit": "Veisautaki",
- "brokenredirects-delete": "Vakarusa",
- "newpages-username": "Yaca vakayagataki:",
- "move": "Toso",
- "movethispage": "Toso na tabana oqo",
- "allpagessubmit": "Lako",
- "defemailsubject": "{{SITENAME}} I vola livaliva",
- "watchlist": "Ulutaga yadravi",
- "watch": "Vakaraica mada",
- "watchthispage": "Vakaraica toka na tabana oqo",
- "restriction-edit": "Veisautaki",
- "restriction-move": "Toso",
- "undelete-search-submit": "Vaqaqara",
- "mycontris": "Noqu I takitaki",
- "whatlinkshere": "Sema cava oqo",
- "ipbreason": "Vuna",
- "move-page-legend": "Toso kina yasana kadua",
- "movearticle": "Toso kina yasana kadua",
- "move-watch": "Vakaraica toka na tabana oqo",
- "movepagebtn": "Toso kina yasana kadua",
- "movereason": "Vuna",
- "tooltip-pt-preferences": "Ulutaga taleitaki",
- "tooltip-pt-logout": "Curu yani",
- "tooltip-ca-move": "Toso na tabana oqo",
- "tooltip-search": "Vaqaqara {{SITENAME}}",
- "tooltip-p-logo": "Tabana levu",
- "ilsubmit": "Vaqaqara",
- "imgmultigo": "Lako!",
- "table_pager_limit_submit": "Lako",
- "specialpages": "Tabana vakamareqeti"
+ "@metadata": {
+ "authors": [
+ "Jose77 (on fj.wikipedia.org)"
+ ]
+ },
+ "sunday": "Sigatabu",
+ "monday": "Moniti",
+ "tuesday": "Tusiti",
+ "wednesday": "Vukelulu",
+ "thursday": "Lotulevu",
+ "friday": "Vakaraubuka",
+ "saturday": "Vakarauwai",
+ "sun": "Sigatabu",
+ "mon": "Moniti",
+ "tue": "Tusiti",
+ "wed": "Vukelulu",
+ "thu": "Lotulevu",
+ "fri": "Vakaraubuka",
+ "sat": "Vakarauwai",
+ "january": "Janueri",
+ "february": "Veverueri",
+ "march": "Maji",
+ "april": "Epereli",
+ "july": "Jiulai",
+ "august": "Okosita",
+ "september": "Seviteba",
+ "october": "Okotova",
+ "november": "Noveba",
+ "december": "Tiseba",
+ "january-gen": "Janueri",
+ "february-gen": "Veverueri",
+ "march-gen": "Maji",
+ "april-gen": "Evereli",
+ "may-gen": "Me",
+ "july-gen": "Jiulai",
+ "august-gen": "Okosita",
+ "september-gen": "Seviteba",
+ "october-gen": "Okotova",
+ "november-gen": "Noveba",
+ "december-gen": "Tiseba",
+ "jan": "Janueri",
+ "feb": "Veverueri",
+ "mar": "Maji",
+ "apr": "Epereli",
+ "may": "Me",
+ "jun": "June",
+ "jul": "Julai",
+ "aug": "Okosita",
+ "sep": "Seviteba",
+ "oct": "Okotova",
+ "nov": "Noveba",
+ "dec": "Tiseba",
+ "cancel": "Sasamaki",
+ "mytalk": "Noqu vosa",
+ "navigation": "Vakatasosoko",
+ "qbedit": "Veisautaki",
+ "help": "Veivuke",
+ "search": "Vaqaqara",
+ "searchbutton": "Vaqaqara",
+ "go": "Lako",
+ "searcharticle": "Lako",
+ "history_short": "Tukuni",
+ "printableversion": "Tikina e rawa ni tabaki",
+ "permalink": "Sema tudei",
+ "edit": "Veisautaki",
+ "delete": "Vakarusa",
+ "protect": "Taqomaki",
+ "unprotect": "Sega ni taqomaki",
+ "talk": "Veiwasei",
+ "toolbox": "Kato ni yaya",
+ "otherlanguages": "Veimataqali vosa",
+ "jumptonavigation": "Vakatasosoko",
+ "jumptosearch": "Vaqaqara",
+ "currentevents": "Tukutuku kuruvaki",
+ "currentevents-url": "Project:Tukutuku kuruvaki",
+ "edithelp": "Veivukei",
+ "mainpage": "Tabana levu",
+ "mainpage-description": "Tabana levu",
+ "portal": "Soqosoqo toso",
+ "editsection": "Veisautaki",
+ "editold": "Veisautaki",
+ "nstab-main": "Vola volai",
+ "yourname": "Yaca vakayagataki",
+ "yourpassword": "Yaca vuni",
+ "yourpasswordagain": "Vola tale na Yaca vuni",
+ "remembermypassword": "Nanuma na yacaqu ena komipiuta oqo (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "Curu mai",
+ "userlogin": "Curu mai / Dolava nomu Akaude",
+ "logout": "Curu yani",
+ "userlogout": "Curu yani",
+ "nologinlink": "Dolava nomu Akaude",
+ "createaccount": "Dolava nomu Akaude",
+ "gotaccountlink": "Curu mai",
+ "summary": "Kena i Soqoni:",
+ "watchthis": "Vakaraica toka na tabana oqo",
+ "savearticle": "Vakabula na tabana oqo",
+ "showpreview": "Vakaraitaka na kenai yaloyalo",
+ "showdiff": "Vakaritaka na veisau",
+ "loginreqlink": "Curu mai",
+ "mypreferences": "Ulutaga taleitaki",
+ "searchresultshead": "Vaqaqara",
+ "youremail": "I vola livaliva *:",
+ "username": "Yaca vakayagataki:",
+ "email": "I vola livaliva",
+ "recentchanges": "Veisau vovou",
+ "recentchangeslinked": "Veisau e veiwekani",
+ "recentchangeslinked-feed": "Veisau e veiwekani",
+ "recentchangeslinked-toolbox": "Veisau e veiwekani",
+ "upload": "Vakasinaita",
+ "uploadbtn": "Vakasinaita",
+ "filedesc": "Kena i Soqoni",
+ "fileuploadsummary": "Kena i Soqoni:",
+ "watchthisupload": "Vakaraica toka na tabana oqo",
+ "randompage": "Vakawasoma",
+ "brokenredirects-edit": "Veisautaki",
+ "brokenredirects-delete": "Vakarusa",
+ "newpages-username": "Yaca vakayagataki:",
+ "move": "Toso",
+ "movethispage": "Toso na tabana oqo",
+ "allpagessubmit": "Lako",
+ "defemailsubject": "{{SITENAME}} I vola livaliva",
+ "watchlist": "Ulutaga yadravi",
+ "watch": "Vakaraica mada",
+ "watchthispage": "Vakaraica toka na tabana oqo",
+ "restriction-edit": "Veisautaki",
+ "restriction-move": "Toso",
+ "undelete-search-submit": "Vaqaqara",
+ "mycontris": "Noqu I takitaki",
+ "whatlinkshere": "Sema cava oqo",
+ "ipbreason": "Vuna",
+ "move-page-legend": "Toso kina yasana kadua",
+ "movearticle": "Toso kina yasana kadua",
+ "move-watch": "Vakaraica toka na tabana oqo",
+ "movepagebtn": "Toso kina yasana kadua",
+ "movereason": "Vuna",
+ "tooltip-pt-preferences": "Ulutaga taleitaki",
+ "tooltip-pt-logout": "Curu yani",
+ "tooltip-ca-move": "Toso na tabana oqo",
+ "tooltip-search": "Vaqaqara {{SITENAME}}",
+ "tooltip-p-logo": "Tabana levu",
+ "ilsubmit": "Vaqaqara",
+ "imgmultigo": "Lako!",
+ "table_pager_limit_submit": "Lako",
+ "specialpages": "Tabana vakamareqeti"
}
diff --git a/languages/i18n/fo.json b/languages/i18n/fo.json
index 40620b44..0bf854a6 100644
--- a/languages/i18n/fo.json
+++ b/languages/i18n/fo.json
@@ -37,7 +37,7 @@
"tog-shownumberswatching": "Vís tal av brúkarum sum fylgja við",
"tog-oldsig": "Verandi undirskrift:",
"tog-fancysig": "Viðgerð undirskriftina sum wikitekstur (uttan sjálvvirkandi leinkju)",
- "tog-uselivepreview": "Nýt \"live preview\" (á royndarstøði)",
+ "tog-uselivepreview": "Nýt beinleiðis forskoðan",
"tog-forceeditsummary": "Gev mær boð, um eg ikki havi skrivað ein samandrátt um mína rætting",
"tog-watchlisthideown": "Fjal mínar rættingar frá eftirliti",
"tog-watchlisthidebots": "Vís ikki rættingar frá botti í eftirlitslistanum",
@@ -212,6 +212,7 @@
"otherlanguages": "Á øðrum málum",
"redirectedfrom": "(Ávíst frá $1)",
"redirectpagesub": "Ávísingarsíða",
+ "redirectto": "Snarvegur til:",
"lastmodifiedat": "Hendan síðan var seinast broytt $2, $1.",
"viewcount": "Onkur hevur verið á hesi síðu {{PLURAL:$1|eina ferð|$1 ferðir}}.",
"protectedpage": "Friðað síða",
@@ -219,6 +220,7 @@
"jumptonavigation": "navigatión",
"jumptosearch": "leita",
"view-pool-error": "Haldið okkum til góðar, servarnir hava ov nógv at gera í løtuni.\nOv nógvir brúkarir royna at síggja hesa síðuna.\nVinarliga bíða eina løtu, áðrenn tú roynir enn einaferð at fáa atgongd til hesa síðuna.\n\n$1",
+ "generic-pool-error": "Haldið okkum til góðar, servararnir hava ov nógv at gera í løtuni.\nOv nógvir brúkarir royna at síggja hetta tilfeingi.\nVinarliga bíða eina løtu, áðrenn tú roynir enn einaferð at fáa atgongd til hetta tilfeingi.\n\n$1",
"pool-timeout": "Støðgur, bíða verður eftir lásinum",
"pool-queuefull": "Køin til \"hylin\" er full",
"pool-errorunknown": "Ókend villa",
@@ -262,6 +264,8 @@
"hidetoc": "fjal",
"collapsible-collapse": "Samanbrot",
"collapsible-expand": "Víðka",
+ "confirmable-yes": "Ja",
+ "confirmable-no": "Nei",
"thisisdeleted": "Sí ella endurstovna $1?",
"viewdeleted": "Vís $1?",
"restorelink": "{{PLURAL:$1|strikaða rætting|$1 strikaðar rættingar}}",
@@ -291,6 +295,7 @@
"nospecialpagetext": "<strong>Tú hevur biðið um eina serliga síðu, sum wiki ikki kennir aftur.</strong>\n\n<!-- A list of valid special pages can be found at [[Special:SpecialPages]]. -->",
"error": "Villa",
"databaseerror": "Villa í dátagrunni",
+ "databaseerror-text": "Ein feilur hendi í fyrispurninginum til dátagrunnin.\nHetta kann týða uppá ein feil í ritbúnaðinum.",
"databaseerror-query": "Fyrispurningur: $1",
"databaseerror-function": "Funksjón: $1",
"databaseerror-error": "Feilur: $1",
@@ -498,7 +503,6 @@
"passwordreset-emailsent-capture": "Ein teldupostur, har ið tú kanst nullstilla loyniorðið, er blivin sendur, sum víst niðanfyri.",
"passwordreset-emailerror-capture": "Ein teldupostur við nullstillaðum loyniorði var gjørdur, sum víst niðanfyri, men tað miseydnaðist at senda til {{GENDER:$2|brúkaran}}: $1",
"changeemail": "Broyt teldupost adressu",
- "changeemail-header": "Broyt t-post adressuna hjá kontuni",
"changeemail-text": "Útfyll henda formularin fyri at broyta tína t-post adressu. Tú mást skriva títt loyniorð fyri at vátta hesa broyting.",
"changeemail-no-info": "Tú mást vera innritað/ur fyri at fáa beinleiðis atgongd til hesa síðu.",
"changeemail-oldemail": "Verandi t-post adressa:",
@@ -506,7 +510,6 @@
"changeemail-none": "(ongin)",
"changeemail-password": "Títt {{SITENAME}} loyniorð:",
"changeemail-submit": "Broyt t-post",
- "changeemail-cancel": "Ógilda",
"changeemail-throttled": "Tú hevur roynt at rita inn ov nógvar ferðir.\nVinarliga bíða $1 áðrenn tú roynir aftur.",
"resettokens": "Nullstilla lyklar",
"resettokens-text": "Tú kanst nullstilla lyklar sum geva atgongd til ávís privat dáta sum eru knýtt at tínari konto her.\n\nTú eigur at gera tað um tú av óvart hevur deilt lyklarnar við onkran, ella um tín konta hevur verið útsett fyri vandastøðu.",
@@ -759,7 +762,6 @@
"mergehistory-same-destination": "Keldu og málsíðan kunnu ikki vera tann sama",
"mergehistory-reason": "Orsøk:",
"mergelog": "Samanblandingar gerðalisti (loggur)",
- "pagemerge-logentry": "flættaði [[$1]] inn í [[$2]] (versjónir fram til $3)",
"revertmerge": "Angra samanflætting",
"mergelogpagetext": "Niðanfyri er ein listi við teimum nýggjastu samanflættingunum av einari síðu søgu til eina aðra.",
"history-title": "Eftirlitssøgan hjá \"$1\"",
@@ -806,7 +808,6 @@
"searchall": "alt",
"showingresults": "Niðanfyri standa upp til {{PLURAL:$1|'''$1''' úrslit, sum byrjar|'''$1''' úrslit, sum byrja}} við #<b>$2</b>.",
"showingresultsinrange": "Niðanfyri verða víst upp til {{PLURAL:$1|<strong>1</strong> úrslit|<strong>$1</strong> úrslit}} í økinum #<strong>$2</strong> til #<strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5|Úrslit '''$1''' av '''$3'''|Úrslit '''$1 - $2''' av '''$3'''}} fyri '''$4'''",
"search-nonefound": "Leitingin gav onki úrslit.",
"powersearch-legend": "Víðkað leitan",
"powersearch-ns": "Leita í navnaøkinum:",
@@ -1348,14 +1349,11 @@
"randomincategory": "Tilvildarlig síða í bólkinum",
"randomincategory-invalidcategory": "\"$1\" kann ikki brúkast sum bólkaheiti.",
"randomincategory-nopages": "Tað eru ongar síður í [[:Category:$1]].",
- "randomincategory-selectcategory": "Fá tilvildarliga síðu frá bólki: $1 $2.",
- "randomincategory-selectcategory-submit": "Far",
"randomredirect": "Tilvildarlig ávísingarsíða",
"randomredirect-nopages": "Tað eru ongar víðaristillingar til navnarúmið \"$1\".",
"statistics": "Hagtøl",
"statistics-header-pages": "Síðu hagtøl",
"statistics-header-edits": "Rætti hagtøl",
- "statistics-header-views": "Vís hagtøl",
"statistics-header-users": "Brúkarahagtøl",
"statistics-header-hooks": "Onnur hagtøl",
"statistics-articles": "Innihaldssíður",
@@ -1364,13 +1362,9 @@
"statistics-files": "Fílur lagdar upp",
"statistics-edits": "Síðurættingar síðan {{SITENAME}} varð stovnað",
"statistics-edits-average": "Miðal rættingar pr. síðu",
- "statistics-views-total": "Sýningar tilsamans",
- "statistics-views-total-desc": "Sýningar á síðum ið ikki eru til longur og á serstakar síður eru ikki taldar við",
- "statistics-views-peredit": "Sýningar fyri hvørja rætting",
"statistics-users": "Skrásettir [[Special:ListUsers|brúkarir]]",
"statistics-users-active": "Virknir brúkarir",
"statistics-users-active-desc": "Brúkarar ið hava framt eina handling seinasta/u {{PLURAL:$1|døgnið|$1 dagarnar}}",
- "statistics-mostpopular": "Mest sæddu síður",
"pageswithprop": "Síður við síðueginleika",
"pageswithprop-legend": "Síður við einum síðueginleika",
"pageswithprop-text": "Henda síðan vísir síður ein lista yvir síður, sum hava ein serstakan síðueginleika.",
@@ -1409,7 +1403,6 @@
"uncategorizedtemplates": "Óbólkaðar fyrimyndir",
"unusedcategories": "Óbrúktir bólkar",
"unusedimages": "Óbrúktar fílur",
- "popularpages": "Umtóktar síður",
"wantedcategories": "Ynsktir bólkar",
"wantedpages": "Ynsktar síður",
"wantedpages-badtitle": "Ógyldugt heiti í úrslitunum: $1",
@@ -1455,7 +1448,6 @@
"suppress": "Yvirlit",
"booksources": "Bókakeldur",
"booksources-search-legend": "Leita eftir bókum",
- "booksources-go": "Far",
"specialloguserlabel": "Gjørt hevur:",
"speciallogtitlelabel": "Mál (heiti ella brúkari):",
"log": "Gerðabøkur",
@@ -1568,7 +1560,7 @@
"wlheader-enotif": "Tað ber nú til at senda teldupost.",
"wlheader-showupdated": "Síður sum eru broyttar síðan tú seinast vitjaði tær, eru vístar við '''feitum'''.",
"wlnote": "Niðanfyri {{PLURAL:$1|stendur seinasta broytingin|standa seinastu '''$1''' broytingarnar}} seinasta/u {{PLURAL:$2| tíman|'''$2''' tímarnar}} hin $3 kl. $4",
- "wlshowlast": "Vís seinastu $1 tímar $2 dagar $3",
+ "wlshowlast": "Vís seinastu $1 tímar $2 dagar",
"watchlist-options": "Møguleikar í ansingarlistanum",
"watching": "Eftirlitir...",
"unwatching": "Strikar eftirlit...",
@@ -1614,7 +1606,6 @@
"delete-warning-toobig": "Henda síðan hevur eina langa rættingarsøgu, yvir $1 {{PLURAL:$1|versjón|versjónir}}.\nUm tú slettar hana kann tað órógva virksemi hjá dátugrunninum {{SITENAME}};\nfar varliga fram.",
"deleting-backlinks-warning": "'''Ávaring:''' Aðrar síður slóða til ella hava síðuna við, ið tú ert í ferð við at sletta.",
"rollback": "Rulla broytingar aftur",
- "rollback_short": "Rulla aftur",
"rollbacklink": "afturrulling",
"rollbacklinkcount": "rulla aftur $1 {{PLURAL:$1|rætting|rættingar}}",
"rollbacklinkcount-morethan": "rulla aftur meira enn $1 {{PLURAL:$1|rætting|rættingar}}",
@@ -1947,7 +1938,6 @@
"import": "Innflyt síður",
"importinterwiki": "Innflyt frá aðrari wiki",
"import-interwiki-text": "Vel eina wiki og síðuheiti at innflyta.\nDato og nøvnini á høvundunum í versjónini verða varveitt.\nAllar transwiki innflytingar handlingar verða goymdar í [[Special:Log/import|innflytingarlogginum]].",
- "import-interwiki-source": "Kelduwiki/síða:",
"import-interwiki-history": "Avrita alla versjónssøguna fyri hesa síðu",
"import-interwiki-templates": "Tak allar fyrimyndir við",
"import-interwiki-submit": "Innflyta",
@@ -1980,7 +1970,6 @@
"import-logentry-interwiki": "$1 varð flutt millum wikiir",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versjón|versjónir}} frá $2",
"javascripttest": "Royndarkoyring av JavaScript",
- "javascripttest-title": "Koyrir $1 royndir",
"javascripttest-pagetext-noframework": "Henda síðan er løgd av til at koyra JavaScript royndir.",
"javascripttest-pagetext-skins": "Vel eina útsjónd at koyra royndirnar við:",
"tooltip-pt-userpage": "Tín brúkarasíða",
@@ -2079,7 +2068,6 @@
"pageinfo-robot-policy": "Indeksering av robottum",
"pageinfo-robot-index": "Loyvt",
"pageinfo-robot-noindex": "Ikki loyvt",
- "pageinfo-views": "Tal av skoðanum",
"pageinfo-watchers": "Tal av síðu eygleiðarum",
"pageinfo-few-watchers": "Færri enn $1 {{PLURAL:$1|eftirlitsbrúkari|eftirlitsbrúkarar}}",
"pageinfo-redirects-name": "Tal av víðaristillingum til hesa síðu",
@@ -2269,7 +2257,6 @@
"exif-iimcategory-spo": "Ítróttur",
"exif-iimcategory-wea": "Veðrið",
"exif-urgency-normal": "Vanligt ($1)",
- "watchlistall2": "alt",
"namespacesall": "alt",
"monthsall": "allir",
"confirmemail": "Vátta t-post adressu",
@@ -2318,7 +2305,7 @@
"version-other": "Annað",
"version-hooks": "Krókur",
"version-hook-name": "Krókurnavn",
- "version-version": "(Versjón $1)",
+ "version-version": "($1)",
"version-license": "MediaWiki Lisensur",
"version-poweredby-credits": "Henda wiki verður rikin av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "onnur",
@@ -2356,6 +2343,7 @@
"compare-rev2": "Versjón 2",
"compare-submit": "Samanber",
"rightsnone": "(ongin)",
+ "revdelete-summary": "yvirlit yvir broytingar",
"searchsuggest-search": "Leita",
"api-error-empty-file": "Fílan sum tú sendi inn var tóm.",
"api-error-file-too-large": "Fílan sum tú sendi inn var óv stór.",
diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json
index 5fab8047..36c91e64 100644
--- a/languages/i18n/fr.json
+++ b/languages/i18n/fr.json
@@ -112,7 +112,17 @@
"SnowedEarth",
"Orikrin1998",
"Automatik",
- "Elodark"
+ "Elodark",
+ "Macofe",
+ "Sam",
+ "JackPotte",
+ "Weft",
+ "Raulel",
+ "Nicolapps",
+ "Yzelf",
+ "0x010C",
+ "Thibaut120094",
+ "NemesisIII"
]
},
"tog-underline": "Souligner les liens :",
@@ -122,9 +132,9 @@
"tog-extendwatchlist": "Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes",
"tog-usenewrc": "Grouper les changements par page dans les modifications récentes et la liste de suivi",
"tog-numberheadings": "Numéroter automatiquement les titres de section",
- "tog-showtoolbar": "Afficher la barre d'outils de modification (nécessite JavaScript)",
- "tog-editondblclick": "Modifier des pages sur double-clic (nécessite JavaScript)",
- "tog-editsectiononrightclick": "Activer la modification de sections par clic droit sur les titres (nécessite JavaScript)",
+ "tog-showtoolbar": "Afficher la barre d'outils de modification",
+ "tog-editondblclick": "Modifier des pages sur double-clic",
+ "tog-editsectiononrightclick": "Activer la modification de sections par clic droit sur les titres",
"tog-watchcreations": "Ajouter les pages que je crée et les fichiers que j'importe à ma liste de suivi",
"tog-watchdefault": "Ajouter les pages et les fichiers que je modifie à ma liste de suivi",
"tog-watchmoves": "Ajouter les pages et les fichiers que je renomme à ma liste de suivi",
@@ -140,7 +150,7 @@
"tog-shownumberswatching": "Afficher le nombre d'utilisateurs qui suivent la page",
"tog-oldsig": "Signature existante :",
"tog-fancysig": "Traiter la signature comme du wikitexte (sans lien automatique)",
- "tog-uselivepreview": "Utiliser l’aperçu rapide (expérimental)",
+ "tog-uselivepreview": "Utiliser l’aperçu rapide",
"tog-forceeditsummary": "M'avertir lorsque je n'ai pas spécifié de résumé de modification",
"tog-watchlisthideown": "Masquer mes propres modifications dans la liste de suivi",
"tog-watchlisthidebots": "Masquer les modifications faites par des robots dans la liste de suivi",
@@ -297,7 +307,7 @@
"unprotectthispage": "Changer la protection de cette page",
"newpage": "Nouvelle page",
"talkpage": "Discussion sur cette page",
- "talkpagelinktext": "discuter",
+ "talkpagelinktext": "discussion",
"specialpage": "Page spéciale",
"personaltools": "Outils personnels",
"articlepage": "Voir la page de contenu",
@@ -316,7 +326,7 @@
"redirectedfrom": "(Redirigé depuis $1)",
"redirectpagesub": "Page de redirection",
"redirectto": "Rediriger vers :",
- "lastmodifiedat": "Dernière modification de cette page le $1 à $2.<br />",
+ "lastmodifiedat": "Dernière modification de cette page le $1 à $2.",
"viewcount": "Cette page a été consultée {{PLURAL:$1|une fois|$1 fois}}.",
"protectedpage": "Page protégée",
"jumpto": "Aller à :",
@@ -328,6 +338,7 @@
"pool-queuefull": "La file d'attente est pleine",
"pool-errorunknown": "Erreur inconnue",
"pool-servererror": "Le service de comptage de la réserve n’est pas disponible ($1).",
+ "poolcounter-usage-error": "Erreur d’utilisation : $1",
"aboutsite": "À propos de {{SITENAME}}",
"aboutpage": "Project:À propos",
"copyright": "Le contenu est disponible sous licence $1 sauf mention contraire.",
@@ -337,6 +348,7 @@
"disclaimers": "Avertissements",
"disclaimerpage": "Project:Avertissements généraux",
"edithelp": "Aide",
+ "helppage-top-gethelp": "Aide",
"mainpage": "Accueil",
"mainpage-description": "Accueil",
"policy-url": "Project:Règles",
@@ -369,7 +381,7 @@
"hidetoc": "masquer",
"collapsible-collapse": "masquer",
"collapsible-expand": "afficher",
- "confirmable-confirm": "Êtes-vous sûr{{GENDER:||e|(e)}} ?",
+ "confirmable-confirm": "Êtes-vous sûr{{GENDER:$1||e}} ?",
"confirmable-yes": "Oui",
"confirmable-no": "Non",
"thisisdeleted": "Désirez-vous afficher ou restaurer $1 ?",
@@ -416,10 +428,13 @@
"readonly_lag": "La base de données a été automatiquement verrouillée pendant que les serveurs secondaires rattrapent leur retard sur le serveur principal.",
"internalerror": "Erreur interne",
"internalerror_info": "Erreur interne : $1",
+ "internalerror-fatal-exception": "Erreur fatale de type « $1 »",
"filecopyerror": "Impossible de copier le fichier « $1 » vers « $2 ».",
"filerenameerror": "Impossible de renommer le fichier « $1 » en « $2 ».",
"filedeleteerror": "Impossible de supprimer le fichier « $1 ».",
"directorycreateerror": "Impossible de créer le dossier « $1 ».",
+ "directoryreadonlyerror": "Le répertoire « $1 » est en lecture seule.",
+ "directorynotreadableerror": "Le répertoire « $1 » n’est pas lisible.",
"filenotfound": "Impossible de trouver le fichier « $1 ».",
"unexpected": "Valeur inattendue : « $1 » = « $2 ».",
"formerror": "Erreur : Impossible de soumettre le formulaire.",
@@ -441,7 +456,8 @@
"viewsourcetext": "Vous pouvez voir et copier le contenu de la page :",
"viewyourtext": "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
"protectedinterface": "Cette page fournit du texte d'interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.\nPour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.",
- "editinginterface": "'''Attention''' : vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel. Les changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.\nPour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet d’internationalisation de MediaWiki.",
+ "editinginterface": "<strong>Attention :</strong> vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel.\nLes changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.",
+ "translateinterface": "Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MédiaWiki.",
"cascadeprotected": "Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :\n$2",
"namespaceprotected": "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».",
"customcssprotected": "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur.",
@@ -461,7 +477,7 @@
"virus-badscanner": "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
"virus-scanfailed": "Échec de la recherche (code $1)",
"virus-unknownscanner": "antivirus inconnu :",
- "logouttext": "'''Vous êtes à présent déconnecté{{GENDER:||e|(e)}}.'''\n\nNotez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté, jusqu’à ce que vous effaciez le cache de votre navigateur.",
+ "logouttext": "'''Vous êtes à présent déconnecté{{GENDER:||e}}.'''\n\nNotez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté, jusqu’à ce que vous effaciez le cache de votre navigateur.",
"welcomeuser": "Bienvenue, $1&nbsp;!",
"welcomecreation-msg": "Votre compte a été créé.\nN'oubliez pas de modifier [[Special:Preferences|vos préférences pour {{SITENAME}}]].",
"yourname": "Nom d'utilisateur :",
@@ -480,7 +496,7 @@
"userlogin-signwithsecure": "Utiliser une connexion sécurisée",
"yourdomainname": "Votre domaine :",
"password-change-forbidden": "Vous ne pouvez pas modifier les mots de passe sur ce wiki.",
- "externaldberror": "Une erreur s'est produite avec la base de données d'authentification externe, ou bien vous n'êtes pas autorisé{{GENDER:||e|(e)}} à mettre à jour votre compte externe.",
+ "externaldberror": "Une erreur s'est produite avec la base de données d'authentification externe, ou bien vous ne pouvez pas mettre à jour votre compte externe.",
"login": "Connexion",
"nav-login-createaccount": "Créer un compte ou se connecter",
"userlogin": "Créer un compte ou se connecter",
@@ -498,6 +514,8 @@
"userlogin-resetlink": "Vous avez oublié vos détails de connexion ?",
"userlogin-resetpassword-link": "Mot de passe oublié ?",
"userlogin-helplink2": "Aide à la connexion",
+ "userlogin-loggedin": "Vous êtes déjà connecté{{GENDER:$1||e}} en tant que {{GENDER:$1|$1}}.\nUtilisez le formulaire ci-dessous pour vous connecter avec un autre compte utilisateur.",
+ "userlogin-createanother": "Créer un autre compte",
"createacct-emailrequired": "Adresse de courriel",
"createacct-emailoptional": "Adresse de courriel (facultative)",
"createacct-email-ph": "Entrez votre adresse de courriel",
@@ -520,12 +538,12 @@
"loginerror": "Erreur de connexion",
"createacct-error": "Erreur lors de la création du compte",
"createaccounterror": "Impossible de créer le compte : $1",
- "nocookiesnew": "Le compte utilisateur a été créé, mais vous n'êtes pas connecté{{GENDER:||e|(e)}}. {{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
+ "nocookiesnew": "Le compte utilisateur a été créé, mais vous n'êtes pas connecté{{GENDER:||e}}. {{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
"nocookieslogin": "{{SITENAME}} utilise des cookies pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.",
"nocookiesfornew": "Le compte utilisateur n'a pas été créé, car nous n'avons pas pu identifier son origine.\nVérifiez que vous avez activé les cookies, rechargez la page et réessayez.",
"noname": "Vous n'avez pas saisi un nom d'utilisateur valide.",
"loginsuccesstitle": "Connexion réussie",
- "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».",
+ "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e}} à {{SITENAME}} en tant que « $1 ».",
"nosuchuser": "L'utilisateur « $1 » n'existe pas.\nLes noms d'utilisateurs sont sensibles à la casse.\nVérifiez l'orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].",
"nosuchusershort": "Il n'y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l'orthographe.",
"nouserspecified": "Vous devez saisir un nom d'utilisateur.",
@@ -586,7 +604,7 @@
"resetpass-submit-cancel": "Annuler",
"resetpass-wrong-oldpass": "Mot de passe actuel ou temporaire invalide.\nVous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mot de passe temporaire.",
"resetpass-recycled": "Veuillez réinitialiser votre mot de passe à quelque chose d’autre que l’actuel.",
- "resetpass-temp-emailed": "Vous êtes connecté{{GENDER:||e|(e)}} avec un code temporaire fourni par courriel.\nPour terminer la connexion, vous devez fournir un nouveau mot de passe ici :",
+ "resetpass-temp-emailed": "Vous êtes connecté{{GENDER:||e}} avec un code temporaire fourni par courriel.\nPour terminer la connexion, vous devez fournir un nouveau mot de passe ici :",
"resetpass-temp-password": "Mot de passe temporaire :",
"resetpass-abort-generic": "La modification du mot de passe a été annulée par une extension.",
"resetpass-expired": "Votre mot de passe a expiré. Veuillez en fournir un nouveau pour vous connecter.",
@@ -604,8 +622,8 @@
"passwordreset-capture-help": "Si vous cochez cette case, le courriel (avec le mot de passe temporaire) vous sera affiché en même temps qu'il sera envoyé à l'utilisateur.",
"passwordreset-email": "Adresse de courriel :",
"passwordreset-emailtitle": "Détails du compte sur {{SITENAME}}",
- "passwordreset-emailtext-ip": "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu{{GENDER:||e|(e)}} de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
- "passwordreset-emailtext-user": "L'utilisateur $1 sur {{SITENAME}} a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous vous êtes souvenu{{GENDER:||e|(e)}} de votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+ "passwordreset-emailtext-ip": "Quelqu'un (probablement vous, depuis l'adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+ "passwordreset-emailtext-user": "L'utilisateur $1 sur {{SITENAME}} a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. Vous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
"passwordreset-emailelement": "Nom d'utilisateur : $1\nMot de passe temporaire : $2",
"passwordreset-emailsent": "Un courriel de réinitialisation de mot de passe a été envoyé.",
"passwordreset-emailsent-capture": "Un courriel de réinitialisation de mot de passe a été envoyé, qui est affiché ci-dessous.",
@@ -656,12 +674,14 @@
"showdiff": "Voir les modifications",
"blankarticle": "<strong>Attention :</strong> La page que vous créez est vide.\nSi vous cliquez de nouveau sur « {{int:savearticle}} », la page sera créée sans aucun contenu.",
"anoneditwarning": "<strong>Attention :</strong> Vous n’êtes pas connecté. Votre adresse IP sera visible de tout le monde si vous faites des modifications. Si vous <strong>[$1 vous connectez]</strong> ou <strong>[$2 créez un compte]</strong>, vos modifications seront attribuées à votre nom d’utilisateur, entre autres avantages.",
- "anonpreviewwarning": "''Vous n’êtes pas identifié(e). Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''",
+ "anonpreviewwarning": "''Vous n’êtes pas identifié{{GENDER:||e}}. Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''",
"missingsummary": "'''Rappel :''' vous n'avez pas encore fourni le résumé de votre modification.\nSi vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.",
+ "selfredirect": "<strong>Attention :</strong> Vous êtes en train de rediriger la page vers elle-même.\nVous pouvez avoir spécifié la mauvaise cible pour la redirection, ou vous modifiez peut-être la mauvaise page.\nSi vous cliquez de nouveau sur « {{int:savearticle}} », la redirection sera créée tout de même.",
"missingcommenttext": "Veuillez entrer un commentaire ci-dessous.",
"missingcommentheader": "'''Rappel :''' vous n'avez pas fourni de sujet ou de titre à ce commentaire.\nSi vous cliquez de nouveau sur « {{int:Savearticle}} », votre modification sera enregistrée sans titre.",
"summary-preview": "Aperçu du résumé :",
"subject-preview": "Prévisualisation du sujet/titre :",
+ "previewerrortext": "Une erreur s’est produite lors de la tentative de prévisualisation de vos modifications.",
"blockedtitle": "L’utilisateur est bloqué.",
"blockedtext": "'''Votre compte utilisateur ou votre adresse IP a été bloqué.'''\n\nLe blocage a été effectué par $1.\nLa raison invoquée est la suivante : ''$2''.\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Compte bloqué : $7.\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour en discuter.\nVous ne pouvez utiliser la fonction « {{MediaWiki:emailpage}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été bloquée.\nVotre adresse IP actuelle est $3 et votre identifiant de blocage est $5.\nVeuillez préciser ces indications dans toutes les requêtes que vous ferez.",
"autoblockedtext": "Votre adresse IP a été bloquée automatiquement car elle a été utilisée par un autre utilisateur, lui-même bloqué par $1.\nLa raison invoquée est :\n\n:''$2''\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Compte bloqué : $7\n\nVous pouvez contacter $1 ou l’un des autres [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] pour discuter de ce blocage.\n\nNotez que vous ne pourrez utiliser la fonctionnalité d’envoi de courriel que si vous avez une adresse de courriel validée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été désactivée.\n\nVotre adresse IP actuelle est $3, et le numéro de blocage est $5.\nVeuillez préciser ces indications dans toutes les requêtes que vous ferez.",
@@ -676,7 +696,7 @@
"accmailtitle": "Mot de passe envoyé.",
"accmailtext": "Un mot de passe généré aléatoirement pour [[User talk:$1|$1]] a été envoyé à $2.\nIl peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après connexion.",
"newarticle": "(Nouveau)",
- "newarticletext": "Vous avez suivi un lien vers une page qui n’existe pas encore. \nAfin de créer cette page, entrez votre texte dans la boîte ci-après (vous pouvez consulter [$1 la page d’aide] pour plus d’informations). \nSi vous êtes arrivé{{GENDER:||e|(e)}} ici par erreur, cliquez sur le bouton '''retour''' de votre navigateur.",
+ "newarticletext": "Vous avez suivi un lien vers une page qui n’existe pas encore. \nAfin de créer cette page, entrez votre texte dans la boîte ci-après (vous pouvez consulter [$1 la page d’aide] pour plus d’informations). \nSi vous êtes arrivé{{GENDER:||e}} ici par erreur, cliquez sur le bouton '''retour''' de votre navigateur.",
"anontalkpagetext": "---- ''Vous êtes sur la page de discussion d'un utilisateur anonyme qui n'a pas encore créé de compte ou qui n'en utilise pas. Pour cette raison, nous devons utiliser son adresse IP pour l'identifier. Une adresse IP peut être partagée par plusieurs utilisateurs. Si vous êtes un{{GENDER:||e|}} utilisat{{GENDER:|eur|rice|eur}} anonyme et si vous constatez que des commentaires qui ne vous concernent pas vous ont été adressés, vous pouvez [[Special:UserLogin/signup|créer un compte]] ou [[Special:UserLogin|vous connecter]] afin d'éviter toute confusion future avec d'autres contributeurs anonymes.''",
"noarticletext": "Il n’y a pour l’instant aucun texte sur cette page.\nVous pouvez [[Special:Search/{{PAGENAME}}|lancer une recherche sur ce titre]] dans les autres pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les opérations liées]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} créer cette page]</span>.",
"noarticletext-nopermission": "Il n'y a pour l'instant aucun texte sur cette page.\nVous pouvez [[Special:Search/{{PAGENAME}}|faire une recherche sur ce titre]] dans les autres pages,\nou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les journaux associés]</span>.",
@@ -734,7 +754,7 @@
"sectioneditnotsupported-text": "La modification d'une section n'est pas prise en charge pour cette page.",
"permissionserrors": "Erreur de permissions",
"permissionserrorstext": "Vous n'avez pas la permission d'effectuer l'opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
- "permissionserrorstext-withaction": "Vous n'êtes pas autorisé{{GENDER:||e|(e)}} à $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
+ "permissionserrorstext-withaction": "Vous ne pouvez pas $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
"recreate-moveddeleted-warn": "'''Attention : vous êtes en train de recréer une page qui a été précédemment supprimée.'''\n\nAssurez-vous qu'il est pertinent de poursuivre les modifications sur cette page. Le journal des suppressions et des déplacements est affiché ci-dessous :",
"moveddeleted-notice": "Cette page a été supprimée. Le journal des suppressions et des déplacements est affiché ci-dessous pour référence.",
"log-fulllog": "Voir le journal complet",
@@ -750,13 +770,17 @@
"content-failed-to-parse": "Échec de l’analyse syntaxique du contenu de $2 pour le modèle $1: $3",
"invalid-content-data": "Données du contenu non valides",
"content-not-allowed-here": "Le contenu « $1 » n’est pas autorisé sur la page [[$2]]",
- "editwarning-warning": "Quitter cette page vous fera perdre toutes les modifications que vous avez faites.\nSi vous êtes connecté{{GENDER:||e|(e)}}, vous pouvez désactiver cet avertissement dans la section « {{int:prefs-editing}} » de vos préférences.",
+ "editwarning-warning": "Quitter cette page vous fera perdre toutes les modifications que vous avez faites.\nSi vous êtes connecté{{GENDER:||e}}, vous pouvez désactiver cet avertissement dans la section « {{int:prefs-editing}} » de vos préférences.",
"editpage-notsupportedcontentformat-title": "Format de contenu non pris en charge",
"editpage-notsupportedcontentformat-text": "Le format de contenu $1 n'est pas pris en charge par le modèle de contenu $2 .",
"content-model-wikitext": "wikitexte",
"content-model-text": "texte brut",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Objet vide",
+ "content-json-empty-array": "Tableau vide",
+ "duplicate-args-category": "Pages utilisant des arguments dupliqués dans les appels de modèle",
+ "duplicate-args-category-desc": "La page contient des appels de modèle qui utilisent des arguments dupliqués, comme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Attention : cette page contient de trop nombreux appels à des fonctions coûteuses de l'analyseur syntaxique.\n\nIl devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu'il y en a maintenant $1.",
"expensive-parserfunction-category": "Pages avec trop d'appels dispendieux de fonctions de l'analyseur syntaxique",
"post-expand-template-inclusion-warning": "Attention : Cette page contient trop d'inclusions de modèles. Certaines inclusions ne seront pas effectuées.",
@@ -811,7 +835,7 @@
"history-feed-empty": "La page demandée n'existe pas.\nElle a peut-être été effacée ou renommée.\nEssayez de [[Special:Search|rechercher sur le wiki]] pour trouver des pages en rapport.",
"rev-deleted-comment": "(résumé de modification retiré)",
"rev-deleted-user": "(nom d'utilisateur retiré)",
- "rev-deleted-event": "(entrée retirée)",
+ "rev-deleted-event": "(détails de l’entrée retirée)",
"rev-deleted-user-contribs": "[nom d'utilisateur ou adresse IP retiré - modification masquée sur les contributions]",
"rev-deleted-text-permission": "Cette version de la page a été '''effacée'''.\nDes détails sont disponibles dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des effacements].",
"rev-suppressed-text-permission": "Cette version de la page a été <strong>supprimée</strong>.\nLes détails se trouvent dans le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} journal des suppressions].",
@@ -845,7 +869,7 @@
"revdelete-legend": "Mettre en place des restrictions de visibilité :",
"revdelete-hide-text": "Texte de la révision",
"revdelete-hide-image": "Masquer le contenu du fichier",
- "revdelete-hide-name": "Masquer l'action et la cible",
+ "revdelete-hide-name": "Masquer la cible et les paramètres",
"revdelete-hide-comment": "Modifier le résumé",
"revdelete-hide-user": "Nom d’utilisateur/Adresse IP de l’éditeur",
"revdelete-hide-restricted": "Supprimer ces données aux administrateurs ainsi qu'aux autres",
@@ -900,7 +924,6 @@
"mergehistory-reason": "Motif :",
"mergehistory-revisionrow": "$1 ($2) $3 — $4 $5 $6",
"mergelog": "Journal des fusions",
- "pagemerge-logentry": "[[$1]] fusionnée avec [[$2]] (versions jusqu'au $3)",
"revertmerge": "Séparer",
"mergelogpagetext": "Voici la liste des plus récentes fusions de l’historique d’une page dans celui d’une autre.",
"history-title": "$1 : Historique des versions",
@@ -941,6 +964,7 @@
"search-result-category-size": "$1 membre{{PLURAL:$1||s}} ($2 sous-catégorie{{PLURAL:$2||s}}, $3 fichier{{PLURAL:$3||s}})",
"search-redirect": "(redirection depuis $1)",
"search-section": "(section $1)",
+ "search-category": "(catégorie $1)",
"search-file-match": "(correspond au contenu du fichier)",
"search-suggest": "Essayez avec cette orthographe : $1",
"search-interwiki-caption": "Projets frères",
@@ -974,6 +998,11 @@
"prefs-personal": "Informations personnelles",
"prefs-rc": "Modifications récentes",
"prefs-watchlist": "Liste de suivi",
+ "prefs-editwatchlist": "Modifier la liste de suivi",
+ "prefs-editwatchlist-label": "Modifier des titres de votre liste de suivi",
+ "prefs-editwatchlist-edit": "Voir et retirer des titres de votre liste de suivi",
+ "prefs-editwatchlist-raw": "Modifier la liste de suivi en mode brut",
+ "prefs-editwatchlist-clear": "Effacer la liste de suivi",
"prefs-watchlist-days": "Nombre de jours à afficher dans la liste de suivi :",
"prefs-watchlist-days-max": "(maximum $1 jour{{PLURAL:$1||s}})",
"prefs-watchlist-edits": "Nombre de modifications à afficher dans la liste de suivi étendue :",
@@ -1043,7 +1072,7 @@
"gender-female": "Elle modifie des pages du wiki",
"prefs-help-gender": "Définir cette préférence est facultatif.\nCe logiciel utilise sa valeur pour s’adresser à vous et vous mentionner aux autres en utilisant le bon genre grammatical.\nCette information sera publique.",
"email": "Courriel",
- "prefs-help-realname": "Facultatif : si vous le spécifiez, il sera utilisé pour vous attribuer vos contributions.",
+ "prefs-help-realname": "Le vrai nom est facultatif.\nS’il est fourni, il sera utilisé pour vous attribuer vos contributions.",
"prefs-help-email": "L'adresse de courriel est facultative, mais elle est nécessaire pour réinitialiser votre mot de passe, si vous veniez à l'oublier.",
"prefs-help-email-others": "Vous pourriez aussi choisir de laisser les autres vous contacter sur votre page de discussion utilisateur sans que soit nécessaire de révéler votre identité.",
"prefs-help-email-required": "Une adresse de courriel est requise.",
@@ -1064,6 +1093,7 @@
"prefs-tokenwatchlist": "Jeton",
"prefs-diffs": "Différences",
"prefs-help-prefershttps": "Cette préférence sera effective lors de votre prochaine connexion.",
+ "prefswarning-warning": "Vous avez effectué des modifications dans vos préférences qui n’ont pas encore été enregistrées.\nSi vous quittez cette page sans cliquer sur « $1 », vos préférences ne seront pas mises à jour.",
"prefs-tabs-navigation-hint": "Astuce : Vous pouvez utiliser les flèches de gauche et de droite pour naviguer entre les onglets.",
"email-address-validity-valid": "Semble valide",
"email-address-validity-invalid": "Une adresse valide est nécessaire !",
@@ -1149,6 +1179,7 @@
"right-protect": "Modifier les niveaux de protection et modifier les pages protégées en cascade",
"right-editprotected": "Modifier les pages protégées avec « {{int:protect-level-sysop}} »",
"right-editsemiprotected": "Modifier les pages protégées avec « {{int:protect-level-autoconfirmed}} »",
+ "right-editcontentmodel": "Modifier le modèle de contenu d’une page",
"right-editinterface": "Modifier l'interface utilisateur",
"right-editusercssjs": "Modifier les fichiers CSS et JavaScript d'autres utilisateurs",
"right-editusercss": "Modifier les fichiers CSS d'autres utilisateurs",
@@ -1176,6 +1207,7 @@
"right-override-export-depth": "Exporter les pages en incluant les pages liées jusqu'à une profondeur de 5 niveaux",
"right-sendemail": "Envoyer un courriel aux autres utilisateurs",
"right-passwordreset": "Voir les courriels de réinitialisation des mots de passe",
+ "right-managechangetags": "Créer et supprimer des [[Spécial:Balises|balises]] de la base de données",
"newuserlogpage": "Journal des créations de comptes utilisateur",
"newuserlogpagetext": "Cette page affiche l’historique des créations de comptes utilisateur.",
"rightslog": "Journal des modifications de droits d’utilisateurs",
@@ -1221,6 +1253,8 @@
"action-viewmywatchlist": "afficher votre liste de suivi",
"action-viewmyprivateinfo": "voir vos informations personnelles",
"action-editmyprivateinfo": "modifier vos informations personnelles",
+ "action-editcontentmodel": "modifier le modèle de contenu d’une page",
+ "action-managechangetags": "créer et supprimer des balises de la base de données",
"nchanges": "$1 modification{{PLURAL:$1||s}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|depuis la dernière visite}}",
"enhancedrc-history": "historique",
@@ -1291,9 +1325,9 @@
"uploaderror": "Erreur lors de l’import",
"upload-recreate-warning": "'''Attention : Un fichier portant ce nom a été supprimé ou déplacé.'''\n\nLe journal des suppressions et celui des déplacements de cette page sont affichés ici pour informations :",
"uploadtext": "Utilisez ce formulaire pour importer des fichiers sur le serveur.\nPour voir ou rechercher des images précédemment envoyées, consultez la [[Special:FileList|liste des images]]. L’import est aussi enregistré dans le [[Special:Log/upload|journal d’import des fichiers]], et les suppressions dans le [[Special:Log/delete|journal des suppressions]].\n\nPour inclure un fichier dans une page, utilisez un lien de la forme :\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.jpg]]</nowiki></code>''', pour afficher le fichier en pleine résolution (dans le cas d’une image) ;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.png|200px|thumb|left|texte descriptif]]</nowiki></code>''' pour utiliser une miniature de 200 pixels de large dans une boîte à gauche avec « texte descriptif » comme description ;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:fichier.ogg]]</nowiki></code>''' pour lier directement vers le fichier sans l’afficher.",
- "upload-permitted": "Formats de fichiers autorisés : $1.",
- "upload-preferred": "Formats de fichiers préférés : $1.",
- "upload-prohibited": "Formats de fichiers interdits : $1.",
+ "upload-permitted": "{{PLURAL:$2|Format|Formats}} de fichiers {{PLURAL:$2|autorisé|autorisés}} : $1.",
+ "upload-preferred": "{{PLURAL:$2|Format|Formats}} de fichiers {{PLURAL:$2|préféré|préférés}} : $1.",
+ "upload-prohibited": "‎{{PLURAL:$2|Format|Formats}} de fichiers {{PLURAL:$2|interdit|interdits}} : $1.",
"uploadlogpage": "Journal d’import de fichiers",
"uploadlogpagetext": "Voici la liste des derniers fichiers importés sur le serveur.\nVoyez la [[Special:NewFiles|galerie des nouvelles images]] pour une présentation plus visuelle.",
"filename": "Nom du fichier",
@@ -1553,7 +1587,6 @@
"statistics": "Statistiques",
"statistics-header-pages": "Statistiques des pages",
"statistics-header-edits": "Statistiques des modifications",
- "statistics-header-views": "Statistiques des visites",
"statistics-header-users": "Statistiques des utilisateurs",
"statistics-header-hooks": "Autres statistiques",
"statistics-articles": "Pages de contenu",
@@ -1562,13 +1595,9 @@
"statistics-files": "Fichiers importés",
"statistics-edits": "Modifications de pages depuis l'installation de {{SITENAME}}",
"statistics-edits-average": "Nombre moyen de modifications par page",
- "statistics-views-total": "Visites",
- "statistics-views-total-desc": "Les vues des pages non existantes et des pages spéciales ne sont pas incluses",
- "statistics-views-peredit": "Visites par modification",
"statistics-users": "[[Special:ListUsers|Utilisateurs]] enregistrés",
"statistics-users-active": "Utilisateurs actifs",
"statistics-users-active-desc": "Utilisateurs ayant fait au moins une action durant {{PLURAL:$1|le dernier jours|les $1 derniers jours}}",
- "statistics-mostpopular": "Pages les plus consultées",
"pageswithprop": "Pages avec une propriété de page",
"pageswithprop-legend": "Pages avec une propriété de page",
"pageswithprop-text": "Cette page liste les pages qui utilisent une propriété de page particulière.",
@@ -1609,9 +1638,9 @@
"uncategorizedtemplates": "Modèles sans catégories",
"unusedcategories": "Catégories inutilisées",
"unusedimages": "Fichiers orphelins",
- "popularpages": "Pages les plus consultées",
"wantedcategories": "Catégories les plus demandées",
"wantedpages": "Pages les plus demandées",
+ "wantedpages-summary": "Liste des pages inexistantes ayant le plus de lien vers elles, en excluant les pages n’ayant que des redirections pointant vers elles. Pour avoir une liste des pages inexistantes qui ont des redirections pointant vers elles, voyez [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Titre invalide dans les résultats : $1",
"wantedfiles": "Fichiers les plus demandés",
"wantedfiletext-cat": "Les fichiers suivants sont utilisés, mais n'existent pas localement. S'ils se trouvent sur un dépôt partagé, ils peuvent être listés ici, bien qu'ils soient, de fait, déjà disponibles. Tous ces faux positifs seront <del>barrés</del>. En outre, les pages qui intègrent des fichiers qui n'existent pas sont répertoriées dans [[:$1]].",
@@ -1655,7 +1684,7 @@
"listusers-creationsort": "Trier par date de création",
"listusers-desc": "Trier en ordre descendant",
"usereditcount": "$1 modification{{PLURAL:$1||s}}",
- "usercreated": "Créé le $1 à $2",
+ "usercreated": "{{GENDER:$3|Créé}} le $1 à $2",
"newpages": "Nouvelles pages",
"newpages-username": "Nom d'utilisateur :",
"ancientpages": "Pages les plus anciennement modifiées",
@@ -1671,10 +1700,12 @@
"pager-older-n": "{{PLURAL:$1|plus ancienne|$1 plus anciennes}}",
"suppress": "Superviser",
"querypage-disabled": "Cette page spéciale est désactivée pour des raisons de performances.",
+ "apihelp": "Aide de l’API",
+ "apihelp-no-such-module": "Le module « $1 » est introuvable.",
"booksources": "Ouvrages de référence",
"booksources-search-legend": "Rechercher parmi des ouvrages de référence",
"booksources-isbn": "ISBN :",
- "booksources-go": "Lister",
+ "booksources-search": "Rechercher",
"booksources-text": "Voici une liste indicative de liens vers d’autres sites vendant des livres neufs et d’occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :",
"booksources-invalid-isbn": "L’ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.",
"specialloguserlabel": "Auteur :",
@@ -1718,7 +1749,7 @@
"listusersfrom": "Afficher les utilisateurs à partir de :",
"listusers-submit": "Lister",
"listusers-noresult": "Aucun utilisateur trouvé. Vérifiez aussi les variantes de casse.",
- "listusers-blocked": "(bloqué{{GENDER:$1||e|(e)}})",
+ "listusers-blocked": "(bloqué{{GENDER:$1||e}})",
"activeusers": "Liste des utilisateurs actifs",
"activeusers-intro": "Ceci est une liste des utilisateurs qui ont exercé une quelconque activité au cours {{PLURAL:$1|de la dernière journée|des $1 derniers jours}}.",
"activeusers-count": "$1 {{PLURAL:$1|action|actions}} lors {{PLURAL:$3|du dernier jour|des $3 derniers jours}}",
@@ -1810,7 +1841,7 @@
"wlheader-enotif": "La notification par courriel est activée.",
"wlheader-showupdated": "Les pages qui ont été modifiées depuis votre dernière visite sont affichées en '''gras'''.",
"wlnote": "Ci-dessous {{PLURAL:$1|figure la dernière modification effectuée|figurent les <strong>$1</strong> dernières modifications effectuées}} durant {{PLURAL:$2|la dernière heure|les <strong>$2</strong> dernières heures}}, depuis $3, $4.",
- "wlshowlast": "Montrer les dernières $1 heures, les derniers $2 jours ou bien $3",
+ "wlshowlast": "Montrer les dernières $1 heures, les derniers $2 jours",
"watchlist-options": "Options de la liste de suivi",
"watching": "Suivi…",
"unwatching": "Fin du suivi…",
@@ -1859,7 +1890,6 @@
"deleteprotected": "Vous ne pouvez pas supprimer cette page car elle a été protégée.",
"deleting-backlinks-warning": "'''Attention :''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|D’autres pages]] ont un lien vers ou incorporent la page que vous allez supprimer.",
"rollback": "Révoquer les modifications",
- "rollback_short": "Révoquer",
"rollbacklink": "révoquer",
"rollbacklinkcount": "révoquer $1 {{PLURAL:$1|modification|modifications}}",
"rollbacklinkcount-morethan": "révoquer plus de $1 {{PLURAL:$1|modification|modifications}}",
@@ -1892,7 +1922,7 @@
"protect_expiry_old": "La date d'expiration est déjà passée.",
"protect-unchain-permissions": "Déverrouiller davantage d’options de protection",
"protect-text": "Vous pouvez consulter et modifier le niveau de protection de la page '''$1'''.",
- "protect-locked-blocked": "Vous ne pouvez pas modifier les niveaux de protection tant que vous êtes bloqué{{GENDER:||e|(e)}}.\nVoici les réglages actuels de la page '''$1''' :",
+ "protect-locked-blocked": "Vous ne pouvez pas modifier les niveaux de protection durant votre blocage.\nVoici les réglages actuels de la page '''$1''' :",
"protect-locked-dblock": "Le niveau de protection ne peut pas être modifié car la base de données est verrouillée.\nVoici les réglages actuels de la page '''$1''' :",
"protect-locked-access": "Vous n'avez pas les droits nécessaires pour modifier les niveaux de protection de pages.\nVoici les réglages actuels de la page '''$1''' :",
"protect-cascadeon": "Cette page est protégée car incluse dans {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée. Vous pouvez changer le niveau de protection de cette page sans que cela n'affecte la protection en cascade.",
@@ -1909,6 +1939,7 @@
"protect-othertime": "Autre date d'expiration :",
"protect-othertime-op": "autre date d'expiration",
"protect-existing-expiry": "Date d'expiration existante : $2 à $3",
+ "protect-existing-expiry-infinity": "Délai d’expiration existant : infini",
"protect-otherreason": "Motif autre ou supplémentaire :",
"protect-otherreason-op": "Autre motif",
"protect-dropdown": "* Motifs de protection courants\n** Vandalisme excessif\n** Pourriels\n** Conflits de modifications contre-productives\n** Page à fort trafic",
@@ -1963,12 +1994,13 @@
"undelete-error": "Page d’erreur d’annulation",
"undelete-error-short": "Erreur lors de la restauration du fichier : $1",
"undelete-error-long": "Des erreurs ont été rencontrées lors de la restauration du fichier :\n\n$1",
- "undelete-show-file-confirm": "Êtes-vous sûr de vouloir visionner une version supprimée du fichier « <nowiki>$1</nowiki> » datant du $2 à $3 ?",
+ "undelete-show-file-confirm": "Êtes-vous sûr{{GENDER:||e}} de vouloir consulter une version supprimée du fichier « <nowiki>$1</nowiki> » datant du $2 à $3 ?",
"undelete-show-file-submit": "Oui",
"undelete-revision-row": "$1 $2 ($3) $4 — $5 $6 $7 $8 $9",
"namespace": "Espace de noms :",
"invert": "Inverser la sélection",
"tooltip-invert": "Cochez cette case pour cacher les modifications des pages dans l'espace de noms sélectionné (et l'espace de noms associé si coché)",
+ "tooltip-whatlinkshere-invert": "Cochez cette case pour cacher les liens des pages dans l'espace de nom sélectionné.",
"namespace_association": "Espace de noms associé",
"tooltip-namespace_association": "Cochez cette case pour inclure également l'espace de noms de discussion associé à l'espace de noms sélectionné",
"blanknamespace": "(Principal)",
@@ -2013,7 +2045,7 @@
"whatlinkshere-hideredirs": "$1 les redirections",
"whatlinkshere-hidetrans": "$1 les inclusions",
"whatlinkshere-hidelinks": "$1 les liens",
- "whatlinkshere-hideimages": "$1 les fichiers liés",
+ "whatlinkshere-hideimages": "$1 les liens vers le fichier",
"whatlinkshere-filters": "Filtres",
"autoblockid": "Blocage automatique #$1",
"block": "Bloquer l’utilisateur",
@@ -2029,20 +2061,20 @@
"ipbcreateaccount": "Empêcher la création de compte",
"ipbemailban": "Empêcher l'utilisateur d'envoyer des courriels",
"ipbenableautoblock": "Bloquer automatiquement la dernière adresse IP utilisée par l'utilisateur et toutes ses IPs ultérieures qu'il pourrait essayer",
- "ipbsubmit": "Bloquer cet utilisateur",
+ "ipbsubmit": "Bloquer",
"ipbother": "Autre durée :",
"ipboptions": "2 heures:2 hours,1 jour:1 day,3 jours:3 days,1 semaine:1 week,2 semaines:2 weeks,1 mois:1 month,3 mois:3 months,6 mois:6 months,1 an:1 year,indéfiniment:infinite",
"ipbhidename": "Masquer le nom d'utilisateur des modifications et des listes",
"ipbwatchuser": "Suivre les pages utilisateur et de discussion de cet utilisateur",
"ipb-disableusertalk": "Empêcher l'utilisateur de modifier sa page de discussion pendant le blocage",
- "ipb-change-block": "Bloquer à nouveau cet utilisateur avec ces paramètres",
+ "ipb-change-block": "Modifier les paramètres de blocage",
"ipb-confirm": "Confirmer le blocage",
"badipaddress": "Adresse IP incorrecte",
"blockipsuccesssub": "Blocage réussi",
- "blockipsuccesstext": "[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e|}}.<br />\nConsultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e}}.<br />\nConsultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.",
"ipb-blockingself": "Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain{{GENDER:||e}} de vouloir faire cela ?",
- "ipb-confirmhideuser": "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr de vouloir le faire ?",
- "ipb-confirmaction": "Si vous êtes sûr de vraiment vouloir le faire, veuillez cocher le champ « {{int:ipb-confirm}} » en bas.",
+ "ipb-confirmhideuser": "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr{{GENDER:||e}} de vouloir le faire ?",
+ "ipb-confirmaction": "Si vous êtes sûr{{GENDER:||e|(e)}} de vraiment vouloir le faire, veuillez cocher le champ « {{int:ipb-confirm}} » en bas.",
"ipb-edit-dropdown": "Modifier les motifs de blocage par défaut",
"ipb-unblock-addr": "Débloquer $1",
"ipb-unblock": "Débloquer un compte utilisateur ou une adresse IP",
@@ -2118,7 +2150,7 @@
"sorbs_create_account_reason": "Votre adresse IP est listée comme mandataire ouvert dans le DNSBL utilisé par {{SITENAME}}.\nVous ne pouvez pas créer un compte.",
"xffblockreason": "Une adresse IP dans l'en-tête X-Forwarded-For, soit la vôtre ou celle d'un serveur proxy que vous utilisez, a été bloquée. La raison du blocage initial est : $1",
"cant-see-hidden-user": "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
- "ipbblocked": "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué",
+ "ipbblocked": "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué{{GENDER:||e}}.",
"ipbnounblockself": "Vous n'êtes pas autorisé{{GENDER:||e}} à vous débloquer vous-même",
"lockdb": "Verrouiller la base de données",
"unlockdb": "Déverrouiller la base de données",
@@ -2144,7 +2176,7 @@
"movearticle": "Renommer la page :",
"moveuserpage-warning": "'''Attention :''' Vous êtes sur le point de renommer une page d’utilisateur. Veuillez noter que seule la page sera renommée et que l’utilisateur '''ne''' sera '''pas''' renommé.",
"movecategorypage-warning": "<strong>Avertissement :</strong> Vous êtes sur le point de renommer une page de catégorie. Veuillez noter que seule la page sera renommée et que toutes les pages dans l'ancienne catégorie ne seront <em>pas</em> transférées dans la nouvelle.",
- "movenologintext": "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e|(e)}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
+ "movenologintext": "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
"movenotallowed": "Vous n'avez pas la permission de renommer les pages.",
"movenotallowedfile": "Vous n'avez pas la permission de renommer les fichiers.",
"cant-move-user-page": "Vous n’avez pas la permission de renommer les pages principales d’utilisateurs.",
@@ -2180,13 +2212,13 @@
"delete_and_move_reason": "Page supprimée pour permettre le renommage depuis « [[$1]] »",
"selfmove": "Les titres d'origine et de destination sont les mêmes ;\nimpossible de renommer une page sur elle-même.",
"immobile-source-namespace": "Vous ne pouvez pas renommer les pages dans l'espace de noms « $1 »",
- "immobile-target-namespace": "Vous ne pouvez pas renommer des pages vers l'espace de noms « $1 »",
+ "immobile-target-namespace": "Vous ne pouvez pas renommer des pages vers l’espace de noms « $1 ».",
"immobile-target-namespace-iw": "Les destinations interwikis ne sont pas une cible valide pour les déplacements.",
"immobile-source-page": "Cette page n'est pas renommable.",
"immobile-target-page": "Il n'est pas possible de renommer la page vers ce titre.",
"bad-target-model": "La destination souhaitée utilise un autre modèle de contenu. Impossible de convertir de $1 vers $2.",
"imagenocrossnamespace": "Impossible de renommer un fichier vers un espace de noms autre que fichier.",
- "nonfile-cannot-move-to-file": "Impossible de renommer quelque chose d'autre qu'un fichier vers l'espace de noms fichier.",
+ "nonfile-cannot-move-to-file": "Impossible de renommer quelque chose d'autre qu’un fichier vers l’espace de noms fichier.",
"imagetypemismatch": "La nouvelle extension de ce fichier ne correspond pas à son type.",
"imageinvalidfilename": "Le nom du fichier cible est incorrect",
"fix-double-redirects": "Mettre à jour les redirections pointant vers le titre original",
@@ -2233,14 +2265,15 @@
"thumbnail-temp-create": "Impossible de créer le fichier de vignette temporaire",
"thumbnail-dest-create": "Impossible d'enregistrer la vignette sur la destination",
"thumbnail_invalid_params": "Paramètres de la miniature incorrects",
+ "thumbnail_toobigimagearea": "Fichier avec des dimensions supérieures à $1",
"thumbnail_dest_directory": "Impossible de créer le répertoire de destination",
"thumbnail_image-type": "Type d'image non supporté",
"thumbnail_gd-library": "Configuration incomplète de la bibliothèque GD : fonction $1 introuvable",
"thumbnail_image-missing": "Le fichier suivant est introuvable : $1",
"thumbnail_image-failure-limit": "Il y a eu récemment trop de tentatives échouées ($1 ou plus) pour restituer cette vignette. Veuillez réessayer ultérieurement.",
"import": "Importer des pages",
- "importinterwiki": "Importation inter-wiki",
- "import-interwiki-text": "Sélectionnez un wiki et un titre de page à importer.\nLes dates des versions et les noms des contributeurs seront préservés.\nToutes les actions d'importation inter-wiki sont consignées dans l'[[Special:Log/import|historique des importations]].",
+ "importinterwiki": "Importer à partir d'un autre wiki",
+ "import-interwiki-text": "Sélectionnez un wiki et un titre de page à importer.\nLes dates des versions et les noms des contributeurs seront préservés.\nToutes les actions d'importation à partir d'autres wikis sont consignées dans l'[[Special:Log/import|historique des importations]].",
"import-interwiki-sourcewiki": "Wiki source :",
"import-interwiki-sourcepage": "Page source :",
"import-interwiki-history": "Copier toutes les versions de l’historique de cette page",
@@ -2260,7 +2293,7 @@
"importcantopen": "Impossible d'ouvrir le fichier à importer",
"importbadinterwiki": "Mauvais lien inter-wiki",
"importsuccess": "L'importation a réussi !",
- "importnosources": "Aucune source d'importation inter-wiki n'a été définie et l'import direct d'historiques est désactivé.",
+ "importnosources": "Aucun wiki source n'a été défini et l'import direct d'historiques est désactivé.",
"importnofile": "Aucun fichier d'importation n'a été envoyé.",
"importuploaderrorsize": "L'import du fichier a échoué.\nSa taille est supérieure au maximum autorisé pour l'import de fichier.",
"importuploaderrorpartial": "L'import du fichier échoué.\nSon contenu n'a été transféré que partiellement.",
@@ -2270,7 +2303,7 @@
"import-nonewrevisions": "Aucune révision importée (toutes étaient déjà présentes, ou ignorées du fait d’erreurs).",
"xml-error-string": "$1 à la ligne $2, colonne $3 (octet $4) : $5",
"import-upload": "Import de données XML",
- "import-token-mismatch": "Perte des données de session. Veuillez réessayez.",
+ "import-token-mismatch": "Perte des données de session. Veuillez réessayer.",
"import-invalid-interwiki": "Impossible d'importer depuis le wiki spécifié.",
"import-error-edit": "La page « $1 » n’a pas été importée parce que vous n’êtes pas autorisé à la modifier.",
"import-error-create": "La page « $1 » n’a pas été importée parce que vous n’êtes pas autorisé à la créer.",
@@ -2284,18 +2317,15 @@
"import-rootpage-nosubpage": "L'espace de noms « $1 » de la page racine n'autorise pas les sous-pages.",
"importlogpage": "Journal des importations",
"importlogpagetext": "Importations administratives de pages d'autres wikis, avec leur historique de modification.",
- "import-logentry-upload": "a importé [[$1]] par envoi de fichier",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|révision importée|révisions importées}}",
- "import-logentry-interwiki": "a importé $1 d'un wiki à l'autre",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|révision importée|révisions importées}} depuis $2",
"javascripttest": "Test de JavaScript",
- "javascripttest-title": "Exécution des tests $1",
"javascripttest-pagetext-noframework": "Cette page est réservée pour l'exécution des tests JavaScript.",
"javascripttest-pagetext-unknownframework": "Structure « $1 » inconnue.",
+ "javascripttest-pagetext-unknownaction": "Action « $1 » inconnue.",
"javascripttest-pagetext-frameworks": "Veuillez choisir l'une des structures de test suivantes : $1",
"javascripttest-pagetext-skins": "Choisissez un habillage avec lequel lancer les tests :",
"javascripttest-qunit-intro": "Voir [$1 la documentation de test] sur mediawiki.org.",
- "javascripttest-qunit-heading": "Suite de test QUnit de JavaScript sur MediaWiki",
"tooltip-pt-userpage": "Votre page utilisateur",
"tooltip-pt-anonuserpage": "La page utilisateur de l'IP avec laquelle vous contribuez",
"tooltip-pt-mytalk": "Votre page de discussion",
@@ -2303,8 +2333,9 @@
"tooltip-pt-preferences": "Vos préférences",
"tooltip-pt-watchlist": "La liste des pages dont vous suivez les modifications",
"tooltip-pt-mycontris": "La liste de vos contributions",
- "tooltip-pt-login": "Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n'est cependant pas obligatoire.",
+ "tooltip-pt-login": "Il est recommandé de vous identifier ; ce n'est cependant pas obligatoire.",
"tooltip-pt-logout": "Se déconnecter",
+ "tooltip-pt-createaccount": "Il vous est conseillé de créer un compte et de vous connecter ; cependant, ce n’est pas obligatoire",
"tooltip-ca-talk": "Discussion au sujet de cette page de contenu",
"tooltip-ca-edit": "Vous pouvez modifier cette page.\nVeuillez utiliser le bouton de prévisualisation avant d'enregistrer.",
"tooltip-ca-addsection": "Commencer une nouvelle section",
@@ -2323,7 +2354,7 @@
"tooltip-p-logo": "Page principale",
"tooltip-n-mainpage": "Visiter la page d'accueil du site",
"tooltip-n-mainpage-description": "Aller à l'accueil",
- "tooltip-n-portal": "À propos du projet",
+ "tooltip-n-portal": "À propos du projet, ce que vous pouvez faire, où trouver des informations",
"tooltip-n-currentevents": "Trouver les informations de fond sur l'actualité du moment",
"tooltip-n-recentchanges": "Liste des modifications récentes sur le wiki",
"tooltip-n-randompage": "Afficher une page au hasard",
@@ -2334,6 +2365,7 @@
"tooltip-feed-atom": "Flux Atom pour cette page",
"tooltip-t-contributions": "Voir la liste des contributions de cet utilisateur",
"tooltip-t-emailuser": "Envoyer un courriel à cet utilisateur",
+ "tooltip-t-info": "Plus d’information sur cette page",
"tooltip-t-upload": "Envoyer une image ou fichier média sur le serveur",
"tooltip-t-specialpages": "Liste de toutes les pages spéciales",
"tooltip-t-print": "Version imprimable de cette page",
@@ -2411,7 +2443,6 @@
"pageinfo-robot-policy": "Indexation par robots",
"pageinfo-robot-index": "Autorisée",
"pageinfo-robot-noindex": "Interdite",
- "pageinfo-views": "Nombre de vues",
"pageinfo-watchers": "Nombre de contributeurs ayant la page dans leur liste de suivi",
"pageinfo-few-watchers": "Moins de $1 {{PLURAL:$1|observateur|observateurs}}",
"pageinfo-redirects-name": "Nombre de redirections vers cette page",
@@ -2880,7 +2911,6 @@
"exif-urgency-low": "Faible ($1)",
"exif-urgency-high": "Haute ($1)",
"exif-urgency-other": "Urgence définie par l'utilisateur ($1)",
- "watchlistall2": "tout",
"namespacesall": "Tous",
"monthsall": "tous",
"confirmemail": "Confirmer l’adresse de courriel",
@@ -3036,9 +3066,9 @@
"hebrew-calendar-m11-gen": "Av",
"hebrew-calendar-m12-gen": "Éloul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])",
- "unknown_extension_tag": "Balise d’extension « $1 » inconnue",
"duplicate-defaultsort": "Attention : la clé de tri par défaut « $2 » écrase la précédente clé « $1 ».",
"duplicate-displaytitle": "<strong>Attention :</strong> Le titre d'affichage «$2» remplace l'ancien titre d'affichage «$1».",
+ "invalid-indicator-name": "<strong>Erreur :</strong> L’attribut <code>name</code> des indicateurs d’état de la page ne doit pas être vide.",
"version": "Version",
"version-extensions": "Extensions installées",
"version-skins": "Habillages installés",
@@ -3053,7 +3083,7 @@
"version-parser-function-hooks": "Fonctions étendues de l'analyseur syntaxique",
"version-hook-name": "Nom du greffon",
"version-hook-subscribedby": "Abonnés :",
- "version-version": "(version $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[pas de nom]",
"version-license": "Licence MediaWiki",
"version-ext-license": "Licence",
@@ -3080,6 +3110,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Chemin d’article]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Chemin de script]",
+ "version-libraries": "Bibliothèques installées",
+ "version-libraries-library": "Bibliothèque",
+ "version-libraries-version": "Version",
"redirect": "Redirigé par fichier, utilisateur, page ou ID de révision",
"redirect-legend": "Rediriger vers une page ou un fichier",
"redirect-summary": "Cette page spéciale redirige vers un fichier (nom de fichier fourni), une page (ID de révision ou de page fourni) ou une page d’utilisateur (identifiant numérique de l’utilisateur fourni). Utilisation : [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ou [[{{#Special:Redirect}}/user/101]].",
@@ -3115,6 +3148,7 @@
"specialpages-group-wiki": "Données et outils",
"specialpages-group-redirects": "Pages spéciales redirigées",
"specialpages-group-spam": "Outils anti-pourriel",
+ "specialpages-group-developer": "Outils du développeur",
"blankpage": "Page vide",
"intentionallyblankpage": "Cette page est laissée intentionnellement (presque) vide.",
"external_image_whitelist": " #Laisser cette ligne exactement telle quelle.<pre>\n#Indiquer les fragments d'expressions rationnelles (juste la partie indiquée entre les //) ci-dessous.\n#Ils correspondront avec les URL des images externes.\n#Celles qui correspondent s'afficheront comme des images, sinon seul un lien vers l'image sera affiché.\n#Les lignes commençant par un # seront considérées comme des commentaires.\n#Cette liste n'est pas sensible à la casse.\n\n#Mettez tous les fragments d'expressions rationnelles au-dessus de cette ligne. Laissez cette dernière ligne telle quelle.</pre>",
@@ -3127,12 +3161,54 @@
"tags-tag": "Nom de la balise",
"tags-display-header": "Apparence dans les listes de modifications",
"tags-description-header": "Description complète de la balise",
+ "tags-source-header": "Source",
"tags-active-header": "Actif ?",
"tags-hitcount-header": "Modifications balisées",
+ "tags-actions-header": "Actions",
"tags-active-yes": "Oui",
"tags-active-no": "Non",
+ "tags-source-extension": "Définie par une extension",
+ "tags-source-manual": "Appliquée manuellement par les utilisateurs et les bots",
+ "tags-source-none": "Obsolète",
"tags-edit": "modifier",
+ "tags-delete": "supprimer",
+ "tags-activate": "activer",
+ "tags-deactivate": "désactiver",
"tags-hitcount": "$1 modification{{PLURAL:$1||s}}",
+ "tags-manage-no-permission": "Vous n'avez pas la permission de gérer les modifications de balises.",
+ "tags-create-heading": "Créer une nouvelle balise",
+ "tags-create-explanation": "Par défaut, les nouvelles balises créées seront disponibles pour les utilisateurs et les bots.",
+ "tags-create-tag-name": "Nom de la balise :",
+ "tags-create-reason": "Raison :",
+ "tags-create-submit": "Créer",
+ "tags-create-no-name": "Vous devez spécifier un nom de balise.",
+ "tags-create-invalid-chars": "Les noms de balise ne doivent pas contenir de virgules (<code>,</code>) ou des barres obliques (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Les noms de balise ne doivent pas contenir de caractères qui ne peuvent pas être utilisés dans les titres des pages.",
+ "tags-create-already-exists": "La balise « $1 » existe déjà.",
+ "tags-create-warnings-above": "{{PLURAL:$2|L'avertissement suivant|Les avertissements suivants}} ont été rencontrés lors de la tentative de création de la balise « $1 » :",
+ "tags-create-warnings-below": "Voulez-vous continuer la création de la balise?",
+ "tags-delete-title": "Supprimer la balise",
+ "tags-delete-explanation-initial": "Vous êtes sur le point de supprimer la balise « $1 » de la base de données.",
+ "tags-delete-explanation-in-use": "Elle sera supprimée de {{PLURAL:$2|$2 révision ou entrée de journal à laquelle|toutes les $2 révisions et/ou entrées de journal auxquelles}} elle est actuellement appliquée.",
+ "tags-delete-explanation-warning": "Cette action est <strong>irréversible</strong> et <strong>ne peut pas être annulée</strong>, même pas par les administrateurs de base de données. Soyez certain que c'est la balise que vous voulez supprimer.",
+ "tags-delete-explanation-active": "<strong>La balise « $1 » est toujours active, et continuera à être appliquée dans le futur. </strong> Pour arrêter cela, allez à l'endroit (ou aux endroits) où la balise est appliquée, et désactivez la.",
+ "tags-delete-reason": "Motif :",
+ "tags-delete-submit": "Supprimer cette balise de manière irréversible",
+ "tags-delete-not-allowed": "Les balises définies par une extension ne peuvent pas être supprimées, à moins que l'extension ne le permette spécifiquement.",
+ "tags-delete-not-found": "La balise « $1 » n’existe pas.",
+ "tags-delete-too-many-uses": "La balise « $1 » est appliquée à plus de $2 {{PLURAL:$2|révision|révisions}}, ce qui signifie qu'elle ne peut pas être supprimée.",
+ "tags-delete-warnings-after-delete": "La balise « $1 » a été supprimée avec succès, mais {{PLURAL:$2|l' avertissement suivant a|avertissements suivants ont}} été rencontré{{PLURAL:$2||s}} :",
+ "tags-activate-title": "Activer la balise",
+ "tags-activate-question": "Vous êtes sur le point d'activer la balise « $1 ».",
+ "tags-activate-reason": "Motif :",
+ "tags-activate-not-allowed": "Il n'est pas possible d'activer la balise « $1 ».",
+ "tags-activate-not-found": "La balise « $1 » n'existe pas.",
+ "tags-activate-submit": "Activer",
+ "tags-deactivate-title": "Désactiver la balise",
+ "tags-deactivate-question": "Vous êtes sur le point de désactiver la balise « $1 ».",
+ "tags-deactivate-reason": "Motif :",
+ "tags-deactivate-not-allowed": "Il n'est pas possible de désactiver la balise « $1 ».",
+ "tags-deactivate-submit": "Désactiver",
"comparepages": "Comparer des pages",
"compare-page1": "Page 1",
"compare-page2": "Page 2",
@@ -3144,8 +3220,8 @@
"compare-revision-not-exists": "La révision que vous avez spécifiée n’existe pas.",
"dberr-problems": "Désolé ! Ce site rencontre des difficultés techniques.",
"dberr-again": "Essayez d'attendre quelques minutes et rechargez.",
- "dberr-info": "(Connexion au serveur de base de données impossible : $1)",
- "dberr-info-hidden": "(Connexion au serveur de base de données impossible)",
+ "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 être dépassés.",
"dberr-cachederror": "Ceci est une copie cachée de la page demandée et peut être dépassée.",
@@ -3170,7 +3246,7 @@
"logentry-delete-delete": "$1 {{GENDER:$2|a supprimé}} la page $3",
"logentry-delete-restore": "$1 {{GENDER:$2|a restauré}} la page $3",
"logentry-delete-event": "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'un événement du journal|de $5 événements du journal}} sur $3: $4",
- "logentry-delete-revision": "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'une révision|de $5 révisions}} sur la page $3: $4",
+ "logentry-delete-revision": "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'une révision|de $5 révisions}} sur la page $3 : $4",
"logentry-delete-event-legacy": "$1 {{GENDER:$2|a modifié}} la visibilité des événements du journal sur $3",
"logentry-delete-revision-legacy": "$1 {{GENDER:$2|a modifié}} la visibilité des révisions sur la page $3",
"logentry-suppress-delete": "$1 {{GENDER:$2|a supprimé}} la page $3",
@@ -3186,6 +3262,14 @@
"revdelete-uname-unhid": "nom d'utilisateur affiché",
"revdelete-restricted": "restrictions appliquées aux administrateurs",
"revdelete-unrestricted": "restrictions retirées pour les administrateurs",
+ "logentry-block-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|a débloqué}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|a importé}} $3 par téléchargement de fichier",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|a importé}} $3 depuis un autre wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|a fusionné}} $3 en $4 (révisions jusqu’à $5)",
"logentry-move-move": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 sans laisser de redirection",
"logentry-move-move_redir": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 par-dessus une redirection",
@@ -3201,22 +3285,38 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|a été promu}} automatiquement de $4 à $5",
"logentry-upload-upload": "$1 {{GENDER:$2|a téléchargé}} $3",
- "logentry-upload-overwrite": "$1 {{GENDER:$2|a téléchargé}} une nouvelle version de $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|a téléversé}} une nouvelle version de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|a téléchargé}} $3",
+ "log-name-managetags": "Journal des modifications de balises",
+ "log-description-managetags": "Cette page recense les tâches de maintenance liées aux [[Special:Tags|balises]]. Le journal contient uniquement les actions faites manuellement par un administrateur ; les balises peuvent être créées ou supprimées par le logiciel wiki sans que cette action ne soit inscrite dans ce journal.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|a créé}} la balise « $4 ».",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|a supprimé}} la balise « $4 » (retirée {{PLURAL:$5|d'une révision ou entrée de journal|de $5 révisions ou entrées de journal}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|a activé}} la balise \"$4\" pour l’usage des utilisateurs et des robots",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|a désactivé}} la balise « $4 » pour l’usage des utilisateurs et des robots",
"rightsnone": "(aucun)",
+ "revdelete-summary": "résumé de modification",
+ "feedback-adding": "Ajout de vos commentaires à la page...",
+ "feedback-back": "Retour",
+ "feedback-bugcheck": "Formidable ! Vérifiez simplement que ce n'est pas un des [$1 bogues déjà connus].",
+ "feedback-bugnew": "J'ai vérifié. Signaler un nouveau bogue",
"feedback-bugornote": "Si vous êtes prêt à décrire un problème technique en détail, veuillez [$1 signaler un bogue].\nSinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentaire sera ajouté à la page « [$3 $2] », avec votre nom d'utilisateur.",
- "feedback-subject": "Objet :",
- "feedback-message": "Message :",
"feedback-cancel": "Annuler",
- "feedback-submit": "Envoyer vos commentaires",
- "feedback-adding": "Ajout de vos commentaires à la page...",
+ "feedback-close": "Fait",
+ "feedback-external-bug-report-button": "Signaler un bug technique",
+ "feedback-dialog-title": "Soumettre un commentaire",
+ "feedback-dialog-intro": "Vous pouvez utiliser le simple formulaire ci-dessous pour faire parvenir vos commentaires. Votre commentaire sera ajouté à la page « $1 », ainsi que votre nom d’utilisateur.",
+ "feedback-error-title": "Erreur",
"feedback-error1": "Erreur : Résultat de l'IPA non reconnu",
"feedback-error2": "Erreur : la modification a échoué",
"feedback-error3": "Erreur : aucune réponse de l'API",
- "feedback-thanks": "Merci ! Votre commentaire a été publié sur la page \"[$2 $1]\".",
- "feedback-close": "Fait",
- "feedback-bugcheck": "Formidable ! Vérifiez simplement que ce n'est pas un des [$1 bogues déjà connus].",
- "feedback-bugnew": "J'ai vérifié. Signaler un nouveau bogue",
+ "feedback-message": "Message :",
+ "feedback-subject": "Objet :",
+ "feedback-submit": "Envoyer",
+ "feedback-terms": "Je comprends que les informations de mon agent utilisateur incluent des informations sur mon navigateur et ma version de système d’exploitation et qu’elles seront partagées publiquement avec mes commentaires.",
+ "feedback-termsofuse": "J’accepte de fournir un avis en accord avec les Conditions d’utilisation.",
+ "feedback-thanks": "Merci ! Votre commentaire a été publié sur la page « [$2 $1] ».",
+ "feedback-thanks-title": "Merci !",
+ "feedback-useragent": "Agent utilisateur :",
"searchsuggest-search": "Rechercher",
"searchsuggest-containing": "contenant...",
"api-error-badaccess-groups": "Vous n'êtes pas autorisé à verser des fichiers sur ce wiki.",
@@ -3252,6 +3352,13 @@
"api-error-stashfailed": "Erreur interne : le serveur n'a pas pu enregistrer le fichier temporaire.",
"api-error-publishfailed": "Erreur interne: Le serveur n'a pas pu publier le fichier temporaire.",
"api-error-stasherror": "Une erreur s'est produite lors du téléchargement du fichier pour le dissimuler.",
+ "api-error-stashedfilenotfound": "Le fichier caché n’a pas été trouvé lors de la tentative pour le télécharger depuis sa cachette.",
+ "api-error-stashpathinvalid": "Le chemin où aurait dû se trouver le fichier caché n’est pas valide.",
+ "api-error-stashfilestorage": "Une erreur s’est produite en stockant le fichier dans la cachette.",
+ "api-error-stashzerolength": "Le serveur n’a pas pu cacher le fichier, car il a une taille de zéro.",
+ "api-error-stashnotloggedin": "Vous devez être connecté pour enregistrer des fichiers dans la cachette de téléchargement.",
+ "api-error-stashwrongowner": "Le fichier auquel vous essayez d’accéder dans la cachette ne vous appartient pas.",
+ "api-error-stashnosuchfilekey": "La clé du fichier auquel vous essayez d’accéder dans la cachette n’existe pas.",
"api-error-timeout": "Le serveur n'a pas répondu dans le délai imparti.",
"api-error-unclassified": "Une erreur inconnue s'est produite",
"api-error-unknown-code": "Erreur inconnue : « $1 »",
@@ -3296,6 +3403,8 @@
"expand_templates_generate_xml": "Voir l’arborescence d’analyse XML",
"expand_templates_generate_rawhtml": "Afficher le HTML brut",
"expand_templates_preview": "Aperçu du rendu",
+ "expand_templates_preview_fail_html": "<em>Comme {{SITENAME}} a HTML brut activé et qu’il y a eu une perte de données de session, l’aperçu est masqué par précaution contre les attaques JavaScript.</em>\n\n<strong>Si c’est une demande d’aperçu légitime, veuillez réessayer.</strong>\nSi cela ne fonctionne toujours pas, essayez de [[Special:UserLogout|vous déconnecter]] et vous reconnecter.",
+ "expand_templates_preview_fail_html_anon": "<em>Comme {{SITENAME}} a HTML brut activé et que vous n’êtes pas connecté, l’aperçu est masqué par précaution contre les attaques JavaScript.</em>\n\n<strong>Si c’est une demande d’aperçu légitime, veuillez [[Special:UserLogin|vous connecter]] et réessayer.</strong>",
"pagelanguage": "Sélecteur de langue de la page",
"pagelang-name": "Page",
"pagelang-language": "Langue",
@@ -3306,8 +3415,58 @@
"log-name-pagelang": "Tracer les changements de langue",
"log-description-pagelang": "Ceci est un journal des changements dans les langues des pages.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|a changé}} la langue de la page $3 de $4 à $5.",
- "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
- "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
+ "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
+ "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activé)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')",
+ "mediastatistics": "Statistiques sur les médias",
+ "mediastatistics-summary": "Statistiques sur les types de fichier téléchargés. Elles ne prennent en compte que la version la plus récente d’un fichier. Les versions anciennes ou supprimées des fichiers sont exclues.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%)",
+ "mediastatistics-table-mimetype": "Type MIME",
+ "mediastatistics-table-extensions": "Extensions possibles",
+ "mediastatistics-table-count": "Nombre de fichiers",
+ "mediastatistics-table-totalbytes": "Taille combinée",
+ "mediastatistics-header-unknown": "Inconnu",
+ "mediastatistics-header-bitmap": "Images raster",
+ "mediastatistics-header-drawing": "Dessins (images vectorielles)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Vidéos",
+ "mediastatistics-header-multimedia": "Média riche",
+ "mediastatistics-header-office": "Bureautique",
+ "mediastatistics-header-text": "Textuel",
+ "mediastatistics-header-executable": "Exécutables",
+ "mediastatistics-header-archive": "Formats compressés",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgule finale a été supprimée|virgules finales ont été supprimées}} du JSON",
+ "json-error-unknown": "Il y a eu un problème avec le JSON. Erreur : $1",
+ "json-error-depth": "La taille maximale de la pile a été dépassée",
+ "json-error-state-mismatch": "JSON non valide ou mal formé",
+ "json-error-ctrl-char": "Erreur de caractères de contrôle, peut-être mal encodé",
+ "json-error-syntax": "Erreur de syntaxe",
+ "json-error-utf8": "Caractères UTF-8 mal formés, peut-être mal encodé",
+ "json-error-recursion": "Une ou plusieurs références récursives dans la valeur à encoder",
+ "json-error-inf-or-nan": "Une une plusieurs valeurs NaN ou INF dans la valeur à encoder",
+ "json-error-unsupported-type": "Une valeur a été donnée dans un type ne pouvant pas être encodé",
+ "headline-anchor-title": "Lien vers cette section",
+ "special-characters-group-latin": "latin",
+ "special-characters-group-latinextended": "latin étendu",
+ "special-characters-group-ipa": "API",
+ "special-characters-group-symbols": "symboles",
+ "special-characters-group-greek": "grec",
+ "special-characters-group-cyrillic": "cyrillique",
+ "special-characters-group-arabic": "arabe",
+ "special-characters-group-arabicextended": "arabe étendu",
+ "special-characters-group-persian": "persan",
+ "special-characters-group-hebrew": "hébreu",
+ "special-characters-group-bangla": "bengalî",
+ "special-characters-group-tamil": "tamoul",
+ "special-characters-group-telugu": "télougou",
+ "special-characters-group-sinhala": "cingalais",
+ "special-characters-group-gujarati": "gujarâtî",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "thaï",
+ "special-characters-group-lao": "laotien",
+ "special-characters-group-khmer": "khmer",
+ "special-characters-title-endash": "tiret anglais",
+ "special-characters-title-emdash": "tiret em",
+ "special-characters-title-minus": "signe moins"
}
diff --git a/languages/i18n/frc.json b/languages/i18n/frc.json
index 0b328e5a..f3a43cbb 100644
--- a/languages/i18n/frc.json
+++ b/languages/i18n/frc.json
@@ -7,20 +7,21 @@
"PieRRoMaN",
"RoyAlcatraz",
"Urhixidur",
- "Zetud"
+ "Zetud",
+ "Hangmanwa7id",
+ "Stisc-14"
]
},
"tog-underline": "Souligner les liens:",
- "tog-hideminor": "Cachez les petits changements dans la liste des derniers changements",
- "tog-hidepatrolled": "↓ Cachez les petits changements dans la liste des derniers changements",
- "tog-newpageshidepatrolled": "↓Cache pages patrollés de la list des pages nouveau",
+ "tog-hideminor": "Cacher les petits changements dans la liste des derniers changements",
+ "tog-hidepatrolled": "↓ Cacher les petits changements dans la liste des derniers changements",
+ "tog-newpageshidepatrolled": "↓Cacher pages patrollés de la list des pages nouveau",
"tog-extendwatchlist": "Agrandir la liste des pages guettées pour montrer tous les changements",
"tog-usenewrc": "User les derniers changements improuvés (JavaScript)",
"tog-numberheadings": "Mettre les numéros sus les en-têtes",
- "tog-showtoolbar": "Montrer la barre d'outils des changements (JavaScript)",
- "tog-editondblclick": "Faire un clic-double pour changer la page (JavaScript)",
+ "tog-showtoolbar": "Montrer la barre d'outils des changements (nécessite JavaScript)",
+ "tog-editondblclick": "Faire un clic-double pour changer la page (nécessite JavaScript)",
"tog-editsectiononrightclick": "Changer une section en faisant un clic droit sus son nom (JavaScript)",
- "tog-rememberpassword": "Garder mon mot de passe (for a maximum of $1 {{PLURAL:$1|day|days}})",
"tog-watchcreations": "Additionner les pages que je crée à ma liste des pages guettées",
"tog-watchdefault": "Additionner les pages que je change à ma liste des pages guettées",
"tog-watchmoves": "Additionner les pages que je renomme à ma liste des pages guettées",
@@ -33,7 +34,7 @@
"tog-enotifminoredits": "Envoyer un e-mail même pour les petits changements",
"tog-enotifrevealaddr": "Montrer mon adresse e-mail dans les e-mails d'avertissement",
"tog-shownumberswatching": "Montrer le montant de guetteurs",
- "tog-oldsig": "↓ Preview du signature existant:",
+ "tog-oldsig": "Signature existant:",
"tog-fancysig": "Signature brute (sans liens préparés)",
"tog-uselivepreview": "User la vue d'avance vite (JavaScript) (En assai)",
"tog-forceeditsummary": "M'avertir quand j'ai laissé la boëte de commentaires vide",
@@ -48,6 +49,8 @@
"underline-always": "Tout le temps",
"underline-never": "Jamais",
"underline-default": "D'après le réglage du navigateur",
+ "editfont-sansserif": "Font sans-serif",
+ "editfont-serif": "Font serif",
"sunday": "dimanche",
"monday": "lundi",
"tuesday": "mardi",
@@ -68,7 +71,7 @@
"april": "d'avril",
"may_long": "de mai",
"june": "de juin",
- "july": "de juliette",
+ "july": "de julliette",
"august": "d'août",
"september": "de septembre",
"october": "d'octobre",
@@ -80,7 +83,7 @@
"april-gen": "avril",
"may-gen": "mai",
"june-gen": "juin",
- "july-gen": "juliette",
+ "july-gen": "julliette",
"august-gen": "août",
"september-gen": "septembre",
"october-gen": "octobre",
@@ -98,20 +101,40 @@
"oct": "oct",
"nov": "nov",
"dec": "déc",
+ "january-date": "$1 janvier",
+ "february-date": "$1 février",
+ "march-date": "$1 mars",
+ "april-date": "$1 avril",
+ "may-date": "$1 mai",
+ "june-date": "$1 juin",
+ "july-date": "$1 julliette",
+ "august-date": "$1 août",
+ "september-date": "$1 septembre",
+ "october-date": "$1 octobre",
+ "november-date": "$1 novembre",
+ "december-date": "$1 décembre",
"pagecategories": "{{PLURAL:$1|Classe|Classes}}",
"category_header": "Articles dans classe \"$1\"",
"subcategories": "Sous-classes",
"category-media-header": "Média dans classe \"$1\"",
"category-empty": "''À présent, cette classe a ni articles ni média.''",
+ "hidden-categories": "{{PLURAL:$1|Classe cachée|Classes cachées}}",
+ "hidden-category-category": "Classes cachées",
+ "listingcontinuesabbrev": "cont.",
+ "index-category": "Pages indexées",
+ "noindex-category": "Pages non indexées",
+ "broken-file-category": "Pages avec des liens de fichiers cassées",
"about": "Info",
"article": "Page des matières",
"newwindow": "(va ouverre une nouvelle fenêtre)",
- "cancel": "Arrêter",
+ "cancel": "Annuler",
"moredotdotdot": "Plus...",
+ "morenotlisted": "Cette liste est pas complète.",
"mypage": "Ma page",
"mytalk": "Ma page de discussion",
"anontalk": "Discussion avec cette adresse IP",
"navigation": "Navigation",
+ "and": "&#32;et",
"qbfind": "Charcher",
"qbbrowse": "Regarder",
"qbedit": "Changer",
@@ -119,45 +142,52 @@
"qbmyoptions": "Mes options",
"faq": "Questions Communes",
"faqpage": "Project:Questions Communes",
- "vector-action-delete": "Supprimer",
- "vector-action-protect": "Protéger",
+ "actions": "Actions",
+ "namespaces": "Espaces des noms",
+ "variants": "Variantes",
+ "navigation-heading": "Menu de navigation",
"errorpagetitle": "Erreur",
- "returnto": "Retourner back à la page $1.",
+ "returnto": "Retourner à la page $1.",
"tagline": "Un article de {{SITENAME}}",
"help": "Aide",
"search": "Charcher",
"searchbutton": "Charcher",
"go": "Aller",
"searcharticle": "Aller",
- "history": "Changements",
+ "history": "Changements du page",
"history_short": "Changements",
"updatedmarker": "changé depuis ma dernière visite",
"printableversion": "Version imprimable",
"permalink": "Lien permanent",
"print": "Imprimer",
+ "view": "Regarde",
+ "view-foreign": "Regarde sur $1",
"edit": "Changer",
+ "create": "Créer",
"editthispage": "Faire un changement",
+ "create-this-page": "Créer cette page",
"delete": "Supprimer",
"deletethispage": "Supprimer cette page",
- "undelete_short": "Rétablir {{PLURAL:$1|un changement|$1 changements}}",
+ "undeletethispage": "Restaurer cette page",
+ "undelete_short": "Restaurer {{PLURAL:$1|un changement|$1 changements}}",
+ "viewdeleted_short": "Regarder {{PLURAL:$1|un changement effacée|$1 changements effacées}}",
"protect": "Protéger",
"protect_change": "Changer le niveau de protection",
"protectthispage": "Protéger cette page",
- "unprotect": "déprotéger",
- "unprotectthispage": "Déprotéger cette page",
+ "unprotect": "Changer la protection",
+ "unprotectthispage": "Changer la protection de cette page",
"newpage": "Nouvelle page",
"talkpage": "Discuter cette page",
"talkpagelinktext": "Discuter",
"specialpage": "Page espéciale",
"personaltools": "Outils personnels",
- "postcomment": "Nouvelle section",
"articlepage": "Voir l'article",
"talk": "Discussion",
"views": "Vues",
- "toolbox": "Boëte d'outils",
+ "toolbox": "Outils",
"userpage": "Page d'useur",
"projectpage": "Page des projets",
- "imagepage": "Page des images",
+ "imagepage": "Regarder la page du fichier",
"mediawikipage": "Page des messages",
"templatepage": "Page de patron",
"viewhelppage": "Page d'aide",
@@ -166,11 +196,14 @@
"otherlanguages": "Autres langues",
"redirectedfrom": "(Envoyé ici de la page $1)",
"redirectpagesub": "Page de redirection",
+ "redirectto": "Rediriger vers:",
"lastmodifiedat": "Cette page a été changée le $1 à $2.",
- "viewcount": "Cette page a été visitée {{PLURAL:$1|$1 fois|$1 fois}}.",
+ "viewcount": "Cette page a été visitée {{PLURAL:$1|une fois|$1 fois}}.",
"protectedpage": "Page protégée",
"jumpto": "Aller à:",
+ "jumptonavigation": "navigation",
"jumptosearch": "charcher",
+ "poolcounter-usage-error": "Erreur d’utilisation: $1",
"aboutsite": "Qui c'est {{SITENAME}}?",
"aboutpage": "Project:Info",
"copyright": "Les matières sont avalable en accord avec $1",
@@ -188,45 +221,63 @@
"privacy": "Régulations des affaires privées",
"privacypage": "Project:Régulations des affaires privées",
"badaccess": "Erreur de permission",
- "badaccess-group0": "Vous avez pas assez de permission de faire ça que vous demandez.",
+ "badaccess-group0": "Tu as pas asses de permission de faire ça que tu demandes.",
"badaccess-groups": "L'action que vous avez demandé est juste pour les useurs dans une des groupes $1.",
"versionrequired": "Vous avez besoin de la version $1 de MediaWiki.",
"versionrequiredtext": "Vous avez besoin de la version $1 de MediaWiki pour utiliser cette page. Voir [[Special:Version]].",
+ "ok": "OK",
"retrievedfrom": "Pris de \"$1\"",
"youhavenewmessages": "Vous avez $1 ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Tu as}} $1 {{PLURAL:$3|d'un autre utilisateur|de $3 autres utilisateurs}} ($2).",
+ "youhavenewmessagesmanyusers": "Tu as $1 de nombreux utilisateurs ($2).",
+ "newmessageslinkplural": "{{PLURAL:$1|un nouveau message|des nouveaux messages}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|dernière modification|dernières modifications}}",
"youhavenewmessagesmulti": "Vous avez des nouveaux messages sus $1.",
"editsection": "changer",
"editold": "changer",
+ "viewsourceold": "Regarde la source",
+ "editlink": "changer",
"viewsourcelink": "Voir la source",
"editsectionhint": "Changer la section: $1",
"toc": "Matières",
"showtoc": "montrer",
"hidetoc": "cacher",
- "thisisdeleted": "Vous aimerait mieux voir ou rétablir $1?",
- "viewdeleted": "Voir $1?",
+ "confirmable-yes": "Oui",
+ "confirmable-no": "Non",
+ "thisisdeleted": "Tu aimerais mieux regarde ou rétablir $1?",
+ "viewdeleted": "Regarder $1?",
"restorelink": "{{PLURAL:$1|1 changement ôté|$1 changements ôtés}}",
"feedlinks": "Distribution RSS:",
"feed-invalid": "Mauvaise qualité de distribution RSS.",
+ "site-rss-feed": "Flux RSS de $1",
+ "site-atom-feed": "Flux Atom de $1",
+ "page-rss-feed": "Flux RSS de \"$1\"",
+ "page-atom-feed": "Flux Atom de \"$1\"",
"red-link-title": "$1 (page n'existe pas)",
+ "sort-descending": "Tri dégruchant",
+ "sort-ascending": "Tri engruchant",
"nstab-main": "Page",
"nstab-user": "Useur",
"nstab-media": "Média",
"nstab-special": "Page espécial",
"nstab-project": "Info",
"nstab-image": "Dossier",
+ "nstab-mediawiki": "Message",
"nstab-template": "Patron",
"nstab-help": "Aide",
"nstab-category": "Classe",
"nosuchaction": "Action inconnue",
- "nosuchactiontext": "L'action demandée dans l'adresse URL est pas reconnue par le wiki.",
+ "nosuchactiontext": "L'action spécifiée dans l'adresse URL est invalide.\nTu as peut-être mal entré l'URL ou suivi un lien erroné.\nIl peut aussi s'indiquer d'un bug dans le logiciel utilisé par {{SITENAME}}.",
"nosuchspecialpage": "Page espéciale inconnue",
"nospecialpagetext": "La page que vous avez demandée est pas une bonne page espéciale. Vous pouvez trouver une liste des bonnes pages espéciales dans la [[Special:SpecialPages|liste des pages espéciales]].",
"error": "Erreur",
"databaseerror": "Erreur de la base d'information",
+ "databaseerror-error": "Erreur: $1",
"laggedslavemode": "Avertissement: La page est peut-être pas renouvelée.",
"readonly": "La base d'information est barrée.",
"enterlockreason": "Écrire une raison pour le barrage avec un temps estimé\nd'équand le barrage va être ôté.",
"readonlytext": "À présent, la base d'information est barrée aux nouveaux changements, peut-être pour le soutien habituel de la base d'information, et ça va retourner à normal t'à l'heure.\n\nL'administrateur qui l'a barrée a donné cette explication: $1",
+ "missingarticle-diff": "(diff: $1, $2)",
"readonly_lag": "La base d'information s'a barré pendant que les serveurs de la base d'information rapprochont le maître.",
"internalerror": "Erreur internelle",
"internalerror_info": "Erreur intérieur: $1",
@@ -235,7 +286,6 @@
"filedeleteerror": "Impossible d'ôter le dossier \"$1\".",
"directorycreateerror": "Impossible de créer le directoire \"$1\".",
"filenotfound": "Impossible de trouver le dossier \"$1\".",
- "fileexistserror": "Impossible d'écrire dans le dossier \"$1\": le dossier est là",
"unexpected": "Valeur pas prévue: \"$1\"=\"$2\".",
"formerror": "Erreur: impossible d'envoyer l'application",
"badarticleerror": "Cette action peut pas être faite sus cette page.",
@@ -254,15 +304,23 @@
"namespaceprotected": "Vous avez pas la permission de changer les pages dans l'espace de noms \"$1\".",
"ns-specialprotected": "Vous pouvez pas changer les pages dans l'espace de noms {{ns:special}}.",
"logouttext": "'''Vous êtes déconnecté asteur.'''\n\nVous pouvez continuer à user {{SITENAME}} sans nom ou vous pouvez connecter encore une fois avec le même nom ou un autre nom.\nNotez: certaines pages pourriont être vues comme si vous êtes connecté, jusqu'à vous videz l'information de votre navigateur.",
+ "welcomeuser": "Bienvenue, $1!",
"yourname": "Nom d'useur:",
+ "userlogin-yourname": "Nom d'useur:",
+ "userlogin-yourname-ph": "Entres ton nom d'utilisateur",
+ "createacct-another-username-ph": "Entres le nom d'utilisateur",
"yourpassword": "Mot de passe:",
+ "userlogin-yourpassword": "Mot de passe",
+ "userlogin-yourpassword-ph": "Entres ton mot de passe",
+ "createacct-yourpassword-ph": "Entres un mot de passe",
"yourpasswordagain": "Mot de passe encore:",
+ "createacct-yourpasswordagain": "Confirmes le mot de passe",
+ "createacct-yourpasswordagain-ph": "Entres à nouveau le mot de passe",
"remembermypassword": "Garder mon mot de passe dans cette browser (pour un maximum of $1 {{PLURAL:$1|jour|jours}})",
"yourdomainname": "Votre domaine:",
"externaldberror": "Soit y avait une erreur avec la base d'information de certification extérieur, soit vous avez pas la permission de renouveler votre compte extérieur.",
"login": "Connecter",
"nav-login-createaccount": "Connecter / créer un compte",
- "loginprompt": "Il faut partir les cookies pour connecter à {{SITENAME}}.",
"userlogin": "Connecter / créer un compte",
"logout": "Déconnecter",
"userlogout": "Déconnecter",
@@ -273,11 +331,20 @@
"gotaccount": "Vous avez un compte déjà? '''$1'''.",
"gotaccountlink": "Connectez",
"userlogin-resetlink": "Oublié vôtre détailes de log in?",
+ "createacct-emailrequired": "Adresse d'email",
+ "createacct-emailoptional": "Adresse d'email (optional)",
+ "createacct-email-ph": "Entres t'adresse d'email",
+ "createacct-another-email-ph": "Entres adresse d'email",
"createaccountmail": "par e-mail",
+ "createaccountreason": "Raison:",
+ "createacct-reason": "Raison",
+ "createacct-reason-ph": "Pourquoi crées-tu un autre compte",
"badretype": "Les mots de passe que vous avez mis sont pas pareils.",
"userexists": "Le nom d'useur choisi est déjà usé. Choissez donc un autre nom.",
"loginerror": "Erreur d'identification",
- "nocookiesnew": "Votre compte a été créé, mais vous êtes pas connecté. {{SITENAME}} use les cookies pour connecter les useurs. Partez les cookies et connectez avec votre nouveau nom d'useur et votre mot de passe, s'il vous plaît.",
+ "createacct-error": "Erreur lors de la création du compte",
+ "createaccounterror": "Impossible de créer le compte: $1",
+ "nocookiesnew": "Ton compte a été créé, mais tu es pas connecté{{GENDER:||e|(e)}}. {{SITENAME}} use les cookies pour connecter les useurs. Partes les cookies et connectes avec ton nouveau nom d'useur et ton mot de passe.",
"nocookieslogin": "{{SITENAME}} use les cookies pour connecter les useurs. Partez donc les cookies et assayez encore.",
"nocookiesfornew": "Le conte d'useur n'était pas fait, à cause qu'on pouvait pas confirmer la source. Ensurer que tu as des cookies, reload ce page et essayer encore.",
"noname": "Vous avez pas mis un bon nom d'useur.",
@@ -308,12 +375,29 @@
"accountcreated": "Compte créé",
"accountcreatedtext": "Le compte d'useur pour $1 a été créé.",
"loginlanguagelabel": "Langue: $1",
+ "pt-login": "Te connecter",
+ "pt-login-button": "Te connecter",
+ "pt-createaccount": "Créer un compte",
+ "pt-userlogout": "Te déconnecter",
"resetpass_announce": "Pour le moment, vous êtes connecté avec un mot de passe qu'a été envoyé par e-mail. Pour finir de vous connecter, il faut créer un nouveau mot de passe ici:",
"resetpass_text": "<!-- Mettez du texte ici -->",
"resetpass_header": "Rétablir le mot de passe",
+ "oldpassword": "Dépassé mot de passe:",
"resetpass_submit": "Créer le mot de passe et connecter",
"changepassword-success": "Vous avez bien changé votre mot de passe! On est après vous connecter...",
"resetpass_forbidden": "Vous pouvez pas changer votre mot de passe sus ce wiki ici.",
+ "resetpass-submit-loggedin": "Changer de mot de passe",
+ "resetpass-submit-cancel": "Annuler",
+ "resetpass-wrong-oldpass": "Mot de passe actuel ou temporaire invalide.\nTu as peut-être déjà changé ton mot de passe ou demandé un nouveau mot de passe temporaire.",
+ "resetpass-recycled": "Veuilles réinitialiser ton mot de passe à quelque chose d’autre que l’actuel.",
+ "resetpass-temp-password": "Mot de passe temporaire:",
+ "passwordreset-username": "Nom d'useur:",
+ "passwordreset-domain": "Domaine:",
+ "passwordreset-capture": "Regarder l'email résultant?",
+ "passwordreset-email": "Adresse d'email:",
+ "changeemail-none": "(aucun)",
+ "changeemail-password": "Ton mot de passe sur {{SITENAME}}:",
+ "changeemail-submit": "Changer l’adresse d'email",
"bold_sample": "Gras",
"bold_tip": "Gras",
"italic_sample": "Italique",
@@ -339,7 +423,6 @@
"savearticle": "Sauver la page",
"preview": "Vue d'avance",
"showpreview": "Vue d'avance",
- "showlivepreview": "Vue d'avance vite",
"showdiff": "Montrer les changements",
"anoneditwarning": "'''Attention:''' Vous êtes pas connecté. Votre adresse IP vas être sauvée dans la liste des changements pour cette page.",
"missingsummary": "'''Attention:''' Vous avez pas mis de description. Si vous cliquez le bouton \"Sauver\" encore, votre changement va être sauvé sans description.",
@@ -347,6 +430,7 @@
"missingcommentheader": "'''Attention :''' Vous avez pas mis de sujet pour ce commentaire. Si vous cliquez le bouton \"Sauver\" encore, votre changement va être sauvé sans sujet.",
"summary-preview": "Vue d'avance de la description:",
"subject-preview": "Vue d'avance du sujet:",
+ "previewerrortext": "Une erreur est survenue pendant la tentative pour visualiser tes modifications.",
"blockedtitle": "L'useur est bloqué",
"blockedtext": "'''Votre compte d'useur (ou votre adresse IP) est bloqué.'''\n\nLe blocage a été fait par $1. La raison donnée est ''$2''.\n\n* La date du blocage: $8\n* Le blocage va être ôté: $6\n* L'useur bloqué: $7\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour discuter le blocage. Vous pouvez pas user la fonction 'envoyer un e-mail à cet useur' hormis que vous avez une adresse e-mail confirmée dans votre [[Special:Preferences|réglage de compte]] et vous avez la permission de l'user. Votre adresse IP est $3, et le numéro du blocage est #$5. Mettez donc cette information dans toutes vos demandes.",
"autoblockedtext": "Le système a bloqué votre adresse IP parce qu'alle a été usée par un autre useur qu'était bloqué par $1.\n\nLa raison donnée est: ''$2''\n\n* La date du blocage: $8\n* Le blocage va être ôté: $6\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour discuter le blocage.\n\nNotez donc que vous pouvez pas user la fonction 'envoyer un e-mail à cet useur' hormis que vous avez une adresse e-mail confirmée dans votre [[Special:Preferences|réglage de compte]] et vous avez la permission de l'user.\n\nVotre numéro de blocage est #$5. Mettez donc cette information dans toutes vos demandes.",
@@ -405,6 +489,14 @@
"permissionserrorstext": "Vous avez pas la permission de faire ça pour {{PLURAL:$1|cette raison|ces raisons}}:",
"permissionserrorstext-withaction": "Vous avez pas la permission de faire ça pour {{PLURAL:$1|cette raison|ces raisons}}:",
"recreate-moveddeleted-warn": "'''Attention: Vous êtes après recréer une page qu'a déjà été ôtée.'''\n\nVous devrait considérer si c'est à propos de continuer à changer cette page.\nLes notes d'ôtage pour cette page sont données ici pour vous aider:",
+ "postedit-confirmation-restored": "La page a été restaurée.",
+ "postedit-confirmation-saved": "Ton changement a été cachée.",
+ "edit-already-exists": "La nouvelle page a pas pu être créée.\nAlle existe déjà.",
+ "defaultmessagetext": "Message par défaut",
+ "content-model-text": "texte brut",
+ "content-model-javascript": "JavaScript",
+ "content-json-empty-object": "Objet vide",
+ "content-json-empty-array": "Tableau vide",
"undo-success": "Le changement peut être renversé. Regardez donc la comparaison en bas pour être sûr que c'est comme vous voulez, et puis sauvez les changements en bas pour finir le renversage du changement.",
"undo-failure": "Le changement pouvait pas être renversé à cause d'une dispute de changements.",
"undo-summary": "Défaire la révision $1 par [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussion]])",
@@ -453,50 +545,245 @@
"revdelete-submit": "Appliquer à la version choisie",
"revdelete-success": "'''Vous avez bien changé la visibilité des versions.'''",
"logdelete-success": "'''Vous avez bien changé la visibilité des événements.'''",
+ "mergehistory-reason": "Raison:",
+ "mergelog": "Journal des fusions",
"lineno": "Ligne $1:",
"compareselectedversions": "Comparer les versions choisies",
"editundo": "renverser",
"searchresults": "Résultats de la charche",
"searchresults-title": "Résultats de charche pour « $1 »",
+ "nextn": "{{PLURAL:$1|suivante|$1 suivantes}}",
+ "prevn-title": "$1 {{PLURAL:$1|résultat dernier|résultats derniers}}",
+ "nextn-title": "$1 {{PLURAL:$1|résultat suivant|résultats suivants}}",
+ "viewprevnext": "Regarder ($1 {{int:pipe-separator}} $2) ($3).",
"searchprofile-everything": "Tout",
+ "searchprofile-advanced": "Charche avancée",
+ "searchprofile-articles-tooltip": "Charcher dans $1",
+ "searchprofile-images-tooltip": "Charcher des fichiers multimédias",
+ "searchprofile-everything-tooltip": "Charcher dans tout le site (y compris dans les pages de discussion)",
+ "searchprofile-advanced-tooltip": "Choisir les espaces de noms pour la charche",
"search-result-size": "$1 ({{PLURAL:$2|1 mot|$2 mots}})",
+ "search-result-category-size": "$1 membre{{PLURAL:$1||s}} ($2 sous-classe{{PLURAL:$2||s}}, $3 fichier{{PLURAL:$3||s}})",
+ "searchall": "tout",
+ "powersearch-toggleall": "Tout",
+ "powersearch-togglenone": "Aucun",
"preferences": "Réglage",
"mypreferences": "Mon réglage",
"skin-preview": "Vue d'avance",
+ "prefs-user-pages": "Pages d'useur",
+ "prefs-personal": "Profil d'useur",
+ "prefs-rc": "Changements récents",
+ "prefs-watchlist": "Liste de suivi",
+ "prefs-email": "Option des emails",
+ "prefs-rendering": "Apparence",
+ "searchresultshead": "Charcher",
+ "localtime": "Heure locale:",
+ "timezoneregion-asia": "Asie",
+ "timezoneregion-atlantic": "Océan atlantique",
+ "timezoneregion-australia": "Australie",
+ "timezoneregion-europe": "Europe",
+ "timezoneregion-indian": "Océan indien",
+ "timezoneregion-pacific": "Océan pacifique",
+ "prefs-searchoptions": "Charche",
+ "prefs-namespaces": "Espaces des noms",
+ "default": "défaut",
+ "prefs-files": "Fichiers",
"prefs-custom-css": "Custom CSS",
"prefs-custom-js": "Custom JavaScript",
- "youremail": "E-mail:",
+ "youremail": "Email:",
"username": "Nom d'useur:",
- "uid": "Numéro d'useur:",
"yourrealname": "Vrai nom:",
"yourlanguage": "Langue:",
"yourvariant": "Différent:",
"yournick": "'Tit nom:",
"badsig": "Votre signature brute est pas bonne. Regardez-voir les tags HTML.",
"badsiglength": "Votre 'tit nom est trop long. Il faut que ça soye moins que $1 caractères.",
- "gender-male": "Male",
- "gender-female": "Female",
+ "gender-unknown": "Je préfère pas l’indiquer",
+ "gender-male": "Il change des pages du wiki",
+ "gender-female": "Alle change des pages du wiki",
+ "email": "Email",
"prefs-help-realname": "Votre vrai nom est pas nécessaire. Si vous choisirait de le mettre, ça serait usé pour vous donner du crédit pour votre ouvrage.",
"prefs-help-email": "Votre adresse e-mail est pas nécessaire, mais ça quitte le monde vous contacter par votre page d'useur ou votre page de discussion sans montrer votre identité.",
+ "prefs-dateformat": "Format des dates",
+ "prefs-advancedrc": "Options avancées",
+ "prefs-advancedrendering": "Options avancées",
+ "prefs-advancedsearchoptions": "Options avancées",
+ "prefs-advancedwatchlist": "Options avancées",
"editinguser": "Changement de '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+ "userrights-reason": "Raison:",
+ "group": "Groupe:",
+ "group-user": "Useurs",
+ "group-all": "(tous)",
+ "group-bot-member": "{{GENDER:$1|robot}}",
+ "group-sysop-member": "{{GENDER:$1|administrateur|administratrice}}",
+ "group-bureaucrat-member": "{{GENDER:$1|bureaucrate}}",
+ "grouppage-bot": "{{ns:project}}:Robots",
+ "grouppage-sysop": "{{ns:project}}:Administrateurs",
+ "grouppage-bureaucrat": "{{ns:project}}:Bureaucrates",
+ "right-read": "Lire les pages",
+ "right-edit": "Changer les pages",
+ "right-createpage": "Créer des pages (qui sont pas des pages de discussion)",
+ "right-createtalk": "Créer des pages de discussion",
+ "right-createaccount": "Créer des comptes useur",
+ "right-minoredit": "Marquer ses changements comme mineures",
+ "right-move": "Renommer des pages",
+ "right-move-subpages": "Renommer des pages avec leurs sous-pages",
+ "right-move-rootuserpages": "Renommer la page principale d'un useur",
+ "right-move-categorypages": "Renommer des pages de classe",
+ "right-movefile": "Renommer des fichiers",
+ "right-delete": "Effacer des pages",
+ "right-unblockself": "Te débloquer toi-même",
+ "right-editinterface": "Changer l'interface useur",
+ "action-read": "lire cette page",
"action-edit": "Faire un changement",
+ "action-createpage": "créer des pages",
+ "action-createtalk": "créer des pages de discussion",
+ "action-createaccount": "créer ce compte useur",
+ "action-minoredit": "marquer cette changement comme mineure",
+ "action-move": "renommer cette page",
+ "action-move-subpages": "renommer cette page et ses sous-pages",
+ "action-move-rootuserpages": "renommer la page principale d'un useur",
+ "action-move-categorypages": "renommer des pages de classe",
+ "action-movefile": "renommer ce fichier",
+ "action-delete": "effacer cette page",
+ "action-deleterevision": "effacer cette version",
+ "action-browsearchive": "charcher des pages effacées",
+ "action-undelete": "restaurer cette page",
+ "action-sendemail": "envoyer des emails",
+ "nchanges": "$1 changement{{PLURAL:$1||s}}",
"recentchanges": "Changements récent",
+ "rcshowhidebots": "$1 les robots",
"rcshowhidepatr": "$1 les modifications patrouillés",
+ "minoreditletter": "m",
+ "newpageletter": "N",
+ "boteditletter": "b",
+ "recentchangeslinked-page": "Nom de la page:",
+ "filename": "Nom du fichier",
+ "filedesc": "Sommaire",
+ "fileuploadsummary": "Sommaire:",
+ "filereuploadsummary": "Changements du fichier:",
+ "filestatus": "Statut du droit d'auteur:",
+ "filesource": "Source:",
+ "ignorewarning": "Ignorer l'avertissement et sauvegarder le fichier quand même",
+ "ignorewarnings": "Ignorer les avertissements",
+ "backend-fail-notexists": "Le fichier $1 existe pas.",
+ "imgfile": "fichier",
+ "listfiles": "Liste de fichiers",
+ "listfiles_thumb": "Miniature",
+ "listfiles_date": "Date",
+ "listfiles_name": "Nom",
+ "listfiles_user": "Useur",
+ "listfiles_description": "Description",
+ "listfiles_count": "Versions",
+ "listfiles-latestversion-yes": "Oui",
+ "listfiles-latestversion-no": "Non",
"file-anchor-link": "Dossier",
+ "filehist-deleteall": "effacer tout",
+ "filehist-deleteone": "effacer",
+ "filehist-user": "Useur",
+ "shared-repo-from": "de: $1",
+ "filerevert-comment": "Raison:",
+ "filedelete": "Effacer $1",
+ "filedelete-legend": "Effacer le fichier",
+ "filedelete-comment": "Raison:",
+ "filedelete-submit": "Effacer",
+ "filedelete-success": "'''$1''' a été effacé.",
+ "filedelete-nofile": "'''$1''' existe pas.",
"randompage": "Page au hasard",
+ "randomincategory-category": "Classe:",
+ "statistics-pages": "Pages",
+ "pageswithprop-submit": "Aller",
+ "brokenredirects-edit": "changer",
+ "brokenredirects-delete": "effacer",
+ "withoutinterwiki": "Pages sans liens inter-langues",
"nbytes": "$1 octet{{PLURAL:$1||s}}",
+ "ncategories": "$1 classe{{PLURAL:$1||s}}",
+ "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
+ "nlinks": "$1 {{PLURAL:$1|page liée|pages liées}}",
+ "nmembers": "$1 membre{{PLURAL:$1||s}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|membre|membres}}",
+ "unusedcategories": "Classes inutilisées",
+ "unusedimages": "Fichiers orphelins",
+ "protectedpages-page": "Page",
+ "protectedpages-reason": "Raison",
+ "newpages-username": "Nom d'useur:",
+ "ancientpages": "Pages les plus anciennement changées",
"move": "Renommer",
"movethispage": "Renommer cette page",
+ "allpagessubmit": "Aller",
"categories": "Classes",
- "emailuser": "E-mail cet useur",
+ "special-categories-sort-count": "tri par nombre d'éléments",
+ "special-categories-sort-abc": "tri alphabétique",
+ "deletedcontributions": "Contributions effacées des useurs",
+ "deletedcontributions-title": "Contributions effacées des useurs",
+ "sp-deletedcontributions-contribs": "contributions",
+ "linksearch": "Charche de liens externes",
+ "linksearch-ns": "Espace de noms:",
+ "linksearch-ok": "Charcher",
+ "listusers-noresult": "Aucun useur trouvé.",
+ "listusers-blocked": "(bloqué{{GENDER:$1||e|(e)}})",
+ "listgrouprights-namespaceprotection-namespace": "Espace de noms",
+ "trackingcategories-name": "Nom du message",
+ "emailuser": "Emailer cet useur",
+ "emailuser-title-target": "Emailer {{GENDER:$1|cet useur|cette useuse}}",
+ "emailuser-title-notarget": "Emailer useur",
+ "emailpage": "Emailer useur",
+ "noemailtitle": "Aucune adresse d'email",
+ "emailusername": "Nom d'useur:",
+ "emailfrom": "De:",
+ "emailto": "À:",
+ "emailmessage": "Message:",
+ "emailsend": "Envoyer",
"watchlist": "Mes pages guettées",
"mywatchlist": "Mes pages guettées",
+ "watchlistfor2": "Pour $1 $2",
"watch": "Guetter",
+ "watchthispage": "Guetter cette page",
"unwatch": "guettez p'us",
+ "unwatchthispage": "Ne plus guetter",
+ "enotif_subject_deleted": "La page $1 sur {{SITENAME}} a été effacée par {{GENDER:$2|$2}}",
+ "enotif_subject_created": "La page $1 sur {{SITENAME}} a été créée par {{GENDER:$2|$2}}",
+ "enotif_subject_moved": "La page $1 sur {{SITENAME}} a été renommée par {{GENDER:$2|$2}}",
+ "enotif_subject_restored": "La page $1 sur {{SITENAME}} a été restaurée par {{GENDER:$2|$2}}",
+ "enotif_subject_changed": "La page $1 sur {{SITENAME}} a été changée par {{GENDER:$2|$2}}",
+ "enotif_body_intro_deleted": "La page $1 sur {{SITENAME}} a été effacée le $PAGEEDITDATE par {{gender:$2|$2}}, regarder $3 pour la révision actuelle.",
+ "enotif_body_intro_created": "La page $1 sur {{SITENAME}} a été créée le $PAGEEDITDATE par {{GENDER:$2|$2}}, regarder $3 pour la révision actuelle.",
+ "deletepage": "Effacer la page",
+ "delete-confirm": "Effacer \"$1\"",
+ "delete-legend": "Effacer",
+ "deletecomment": "Raison:",
+ "deleteotherreason": "Raison autre ou supplémentaire:",
+ "deletereasonotherlist": "Autre raison",
+ "protectcomment": "Raison:",
+ "restriction-edit": "Changer",
+ "restriction-move": "Renommer",
+ "restriction-create": "Créer",
+ "undelete": "Regarder les pages effacées",
+ "undeletepage": "Regarder et restaurer des pages effacées",
+ "viewdeletedpage": "Regarder les pages effacées",
+ "undeletebtn": "Restaurer",
+ "undeleteviewlink": "regarder",
+ "undeletecomment": "Raison:",
+ "undelete-search-submit": "Charcher",
+ "undelete-show-file-submit": "Oui",
+ "namespace": "Espace de noms:",
"blanknamespace": "(Principal)",
"contributions": "Changements de l'useur",
"mycontris": "Mes changements",
+ "uctop": "(actuel)",
"sp-contributions-talk": "Discuter",
+ "sp-contributions-submit": "Charcher",
+ "whatlinkshere-page": "Page:",
+ "whatlinkshere-links": "← liens",
+ "whatlinkshere-hidelinks": "$1 les liens",
+ "block": "Bloquer l’useur",
+ "unblock": "Débloquer l’useur",
+ "blockip": "Bloquer l’{{GENDER:$1|useur|useuse}}",
+ "blockip-legend": "Bloquer l’useur",
+ "ipbreason": "Raison:",
+ "ipb-unblock-addr": "Débloquer $1",
+ "ipb-unblock": "Débloquer un compte useur ou une adresse IP",
+ "unblockip": "Débloquer l’useur",
"ipblocklist": "Useurs bloqués",
"blocklink": "bloquer",
"contribslink": "changes",
@@ -511,5 +798,6 @@
"tooltip-n-randompage": "Afficher un page au hasard",
"tooltip-n-help": "La place pour savoir",
"tooltip-t-specialpages": "Liste de tout les pages speciales",
- "bad_image_list": "Le format est le suivant :\n\nSeules les listes d’énumération (commençant par *) sont prises en compte. Le premier lien d’une ligne doit être celui d’une mauvaise image.\nLes autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l’image peut apparaître."
+ "bad_image_list": "Le format est le suivant :\n\nSeules les listes d’énumération (commençant par *) sont prises en compte. Le premier lien d’une ligne doit être celui d’une mauvaise image.\nLes autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l’image peut apparaître.",
+ "redirect-file": "Nom du fichier"
}
diff --git a/languages/i18n/frp.json b/languages/i18n/frp.json
index 29c6d437..8c196ebc 100644
--- a/languages/i18n/frp.json
+++ b/languages/i18n/frp.json
@@ -6,7 +6,8 @@
"Reedy",
"לערי ריינהארט",
"아라",
- "Soul Train"
+ "Soul Train",
+ "Macofe"
]
},
"tog-underline": "Solegnér los lims :",
@@ -473,7 +474,6 @@
"passwordreset-emailsent-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ mandâ, qu’est montrâ ce-desot.",
"passwordreset-emailerror-capture": "Un mèssâjo de remês’a zérô de contresegno est étâ fêt, qu’est montrâ ce-desot, mas l’èxpèdicion a l’utilisat{{GENDER:$2|or|rice}} at pas reussi : $1",
"changeemail": "Changiér l’adrèce èlèctronica",
- "changeemail-header": "Changiér l’adrèce èlèctronica du compto",
"changeemail-text": "Rempléd ceti formulèro por changiér voutron adrèce èlèctronica. Vos devréd buchiér voutron contresegno por confirmar cél changement.",
"changeemail-no-info": "Vos dête étre branchiê por arrevar tot drêt a cela pâge.",
"changeemail-oldemail": "Adrèce èlèctronica d’ora :",
@@ -481,7 +481,6 @@
"changeemail-none": "(pas yona)",
"changeemail-password": "Voutron contresegno dessus {{SITENAME}} :",
"changeemail-submit": "Changiér l’adrèce èlèctronica",
- "changeemail-cancel": "Anular",
"bold_sample": "Tèxto grâs",
"bold_tip": "Tèxto grâs",
"italic_sample": "Tèxto étalico",
@@ -735,7 +734,6 @@
"mergehistory-same-destination": "Les pâges d’origina et de dèstinacion pôvont pas étre la méma",
"mergehistory-reason": "Rêson :",
"mergelog": "Jornal de les fusions",
- "pagemerge-logentry": "[[$1]] fusionâye dedens [[$2]] (vèrsions tant qu’u $3)",
"revertmerge": "Sèparar",
"mergelogpagetext": "Vê-que na lista de les fusions les ples novèles de l’historico d’una pâge dedens celi d’un’ôtra.",
"history-title": "Historico de les vèrsions de « $1 »",
@@ -782,7 +780,6 @@
"searchrelated": "aparentâ",
"searchall": "tot",
"showingresults": "Vua de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Rèsultat '''$1'''|Rèsultats '''$1 - $2'''}} de '''$3''' por '''$4'''",
"search-nonefound": "Y at gins de rèsultat que corrèspond a la rechèrche.",
"powersearch-legend": "Rechèrche avanciêe",
"powersearch-ns": "Rechèrchiér dedens los èspâços de noms :",
@@ -1322,7 +1319,6 @@
"statistics": "Statistiques",
"statistics-header-pages": "Statistiques de les pâges",
"statistics-header-edits": "Statistiques des changements",
- "statistics-header-views": "Statistiques de les vues",
"statistics-header-users": "Statistiques des utilisators",
"statistics-header-hooks": "Ôtres statistiques",
"statistics-articles": "Pâges de contegnu",
@@ -1331,13 +1327,9 @@
"statistics-files": "Fichiérs tèlèchargiês",
"statistics-edits": "Changements de pâges dês l’enstalacion de {{SITENAME}}",
"statistics-edits-average": "Nombro moyen de changements per pâge",
- "statistics-views-total": "Soma de les vues",
- "statistics-views-total-desc": "Les vues de les pâges pas ègzistentes et de les pâges spèciâles sont pas avouéc",
- "statistics-views-peredit": "Vues per changement",
"statistics-users": "[[Special:ListUsers|Utilisators]] encartâs",
"statistics-users-active": "Utilisators actifs",
"statistics-users-active-desc": "Utilisators qu’ant fêt por lo muens un’accion pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}",
- "statistics-mostpopular": "Pâges les ples vues",
"pageswithprop": "Pâges avouéc na propriètât de pâge",
"pageswithprop-legend": "Pâges avouéc na propriètât de pâge",
"pageswithprop-text": "Ceta pâge liste les pâges qu’emplèyont na propriètât de pâge particuliére.",
@@ -1375,7 +1367,6 @@
"uncategorizedtemplates": "Modèlos sen catègories",
"unusedcategories": "Catègories pas empleyêes",
"unusedimages": "Fichiérs pas empleyês",
- "popularpages": "Pâges populères",
"wantedcategories": "Catègories demandâyes",
"wantedpages": "Pâges demandâyes",
"wantedpages-badtitle": "Titro pas justo dedens l’ensemblo de rèsultats : $1",
@@ -1425,7 +1416,6 @@
"booksources": "Ôvres de refèrence",
"booksources-search-legend": "Rechèrchiér entre-mié les ôvres de refèrence",
"booksources-isbn": "ISBN :",
- "booksources-go": "Listar",
"booksources-text": "Vê-que na lista de lims de vers d’ôtros setos que vendont des lévros nôfs et d’ocasion, et pués pôvont avêr des enformacions de ples sur les ôvres que vos chèrchiéd :",
"booksources-invalid-isbn": "L’ISBN balyê semble pas étre justo ; controlâd se vos éd fêt na fôta en copiyent la sôrsa originâla.",
"specialloguserlabel": "Ôtor :",
@@ -1543,7 +1533,7 @@
"wlheader-enotif": "La notificacion per mèssageria èlèctronica est activâye.",
"wlheader-showupdated": "Les pâges que sont étâyes changiêes dês voutra dèrriére visita sont montrâyes en '''grâs'''.",
"wlnote": "Vê-que {{PLURAL:$1|lo dèrriér changement fêt|los '''$1''' dèrriérs changements fêts}} pendent {{PLURAL:$2|l’hora passâye|les '''$2''' hores passâyes}}, dês $3 a $4.",
- "wlshowlast": "Montrar les $1 hores passâyes, los $2 jorns passâs ou ben $3",
+ "wlshowlast": "Montrar les $1 hores passâyes, los $2 jorns passâs ou ben",
"watchlist-options": "Chouèx de la lista de siuvu",
"watching": "Siuvu...",
"unwatching": "Fin du siuvu...",
@@ -1590,7 +1580,6 @@
"delete-toobig": "Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprèssion de pâges d’ense est étâye rètrenta por prèvegnir des pèrturbacions emprèvues de {{SITENAME}}.",
"delete-warning-toobig": "Ceta pâge at un grôs historico de changements avouéc més de $1 vèrsion{{PLURAL:$1||s}}.\nLa suprimar pôt troblar la mârche de la bâsa de balyês de {{SITENAME}} ;\na fâre avouéc prudence.",
"rollback": "Rèvocar los changements",
- "rollback_short": "Rèvocar",
"rollbacklink": "rèvocar",
"rollbacklinkcount": "rèvocar $1 changement{{PLURAL:$1||s}}",
"rollbacklinkcount-morethan": "rèvocar més de $1 changement{{PLURAL:$1||s}}",
@@ -1958,7 +1947,6 @@
"import": "Importar des pâges",
"importinterwiki": "Importacion entèrvouiqui",
"import-interwiki-text": "Chouèsésséd un vouiqui et un titro de pâge a importar.\nLes dâtes de les vèrsions et los noms ux contributors seront presèrvâs.\nTotes les accions d’importacion entèrvouiqui sont consignês dens lo [[Special:Log/import|jornal de les importacions]].",
- "import-interwiki-source": "Vouiqui / pâge d’origina :",
"import-interwiki-history": "Copiyér totes les vèrsions de l’historico de ceta pâge",
"import-interwiki-templates": "Encllure tôs los modèlos",
"import-interwiki-submit": "Importar",
@@ -1993,14 +1981,10 @@
"import-options-wrong": "{{PLURAL:$2|Crouyo chouèx|Crouyos chouèx}} : <nowiki>$1</nowiki>",
"importlogpage": "Jornal de les importacions",
"importlogpagetext": "Importacions administratives de pâges avouéc lor historico de changements dês d’ôtros vouiquis.",
- "import-logentry-upload": "at importâ [[$1]] per tèlèchargement de fichiér",
"import-logentry-upload-detail": "$1 vèrsion{{PLURAL:$1||s}}",
- "import-logentry-interwiki": "at importâ $1 per entèrvouiqui",
"import-logentry-interwiki-detail": "$1 vèrsion{{PLURAL:$1||s}} dês $2",
"javascripttest": "Èprôva de JavaScript",
- "javascripttest-title": "Èprôves de $1 en cors",
"javascripttest-qunit-intro": "Vêde la [$1 documentacion de les èprôves] dessus mediawiki.org.",
- "javascripttest-qunit-heading": "Suita d’èprôva QUnit de JavaScript dessus MediaWiki",
"tooltip-pt-userpage": "Voutra pâge usanciér",
"tooltip-pt-anonuserpage": "La pâge usanciér de l’adrèce IP avouéc laquinta vos contribuâd",
"tooltip-pt-mytalk": "Voutra pâge de discussion",
@@ -2110,7 +2094,6 @@
"pageinfo-robot-policy": "Statut de motor de rechèrche",
"pageinfo-robot-index": "Endèxâblo",
"pageinfo-robot-noindex": "Pas endèxâblo",
- "pageinfo-views": "Nombro de visualisacions",
"pageinfo-watchers": "Nombro de contributors qu’ont la pâge dedens lor lista de survelyence",
"pageinfo-redirects-name": "Redirèccions de vers ceta pâge",
"pageinfo-subpages-name": "Sot-pâges de ceta pâge",
@@ -2535,7 +2518,6 @@
"exif-urgency-low": "Fêbla ($1)",
"exif-urgency-high": "Hôta ($1)",
"exif-urgency-other": "Prioritât dèfenia per l’usanciér ($1)",
- "watchlistall2": "tot",
"namespacesall": "tôs",
"monthsall": "tôs",
"confirmemail": "Confirmar l’adrèce èlèctronica",
@@ -2666,7 +2648,6 @@
"hebrew-calendar-m11-gen": "d’av",
"hebrew-calendar-m12-gen": "d’èloul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discutar]])",
- "unknown_extension_tag": "Balisa d’èxtension « $1 » encognua",
"duplicate-defaultsort": "'''Atencion :''' la cllâf de tri per dèfôt « $2 » ècllafe cela « $1 ».",
"version": "Vèrsion",
"version-extensions": "Èxtensions enstalâs",
@@ -2682,7 +2663,7 @@
"version-parser-function-hooks": "Grèfons de les fonccions du parsor",
"version-hook-name": "Nom du grèfon",
"version-hook-subscribedby": "Soscrit per",
- "version-version": "(Vèrsion $1)",
+ "version-version": "($1)",
"version-svn-revision": "(v$2)",
"version-license": "Licence",
"version-poweredby-credits": "Ceti vouiqui fonccione grâce a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
@@ -2717,6 +2698,7 @@
"specialpages-group-wiki": "Balyês du vouiqui et outils",
"specialpages-group-redirects": "Pâges spèciâles redirigiês",
"specialpages-group-spam": "Outils anti-spame",
+ "specialpages-group-developer": "Outils u dèvelopor",
"blankpage": "Pâge voueda",
"intentionallyblankpage": "Ceta pâge est lèssiê èxprès voueda.",
"external_image_whitelist": " #Lèssiéd ceta legne justo d’ense.<pre>\n#Endicâd los bocons d’èxprèssions racionèles (solament la partia endicâ entre-mié los //) ce-desot.\n#Corrèspondront avouéc los lims hipèrtèxtos de les émâges (ben liyês) de defôr.\n#Celos que corrèspondont sè montreront coment des émâges, ôtrament solament un lim de vers l’émâge serat montrâ.\n#Les legnes que començont per un # seront considèrâs coment des comentèros.\n#Ceta lista est pas sensibla a la câssa.\n\n#Betâd tôs los bocons d’èxprèssions racionèles (*RegEx*) en-dessus de ceta legne. Lèssiéd ceta legne justo d’ense.</pre>",
@@ -2791,19 +2773,20 @@
"logentry-rights-rights-legacy": "$1 at changiê l’apartegnence a la tropa por « $3 »",
"logentry-rights-autopromote": "$1 est étâ nomâ ôtomaticament de $4 a $5",
"rightsnone": "(nion)",
+ "revdelete-summary": "rèsumâ du changement",
+ "feedback-adding": "Aponsa de voutros avis a la pâge...",
+ "feedback-bugcheck": "Formidâblo ! Controlâd simplament qu’o est pas yona de les [$1 cofieries ja cognues].",
+ "feedback-bugnew": "J’é controlâ. Signalar una cofierie novèla",
"feedback-bugornote": "Se vos éte prèst a dècrire un problèmo tècnico en dètaly, volyéd [$1 signalar una cofierie].\nÔtrament, vos pouede utilisar lo formulèro simplifiâ ce-desot. Voutron comentèro serat apondu a la pâge « [$3 $2] », avouéc voutron nom d’usanciér et lo navigator que vos utilisâd.",
- "feedback-subject": "Sujèt :",
- "feedback-message": "Mèssâjo :",
"feedback-cancel": "Anular",
- "feedback-submit": "Mandar voutron avis",
- "feedback-adding": "Aponsa de voutros avis a la pâge...",
+ "feedback-close": "Fêt",
"feedback-error1": "Èrror : rèsultat de l’API pas recognu",
"feedback-error2": "Èrror : lo changement at pas reussi",
"feedback-error3": "Èrror : gins de rèponsa de l’API",
+ "feedback-message": "Mèssâjo :",
+ "feedback-subject": "Sujèt :",
+ "feedback-submit": "Sometre",
"feedback-thanks": "Grant-marci ! Voutron avis at étâ postâ sur la pâge « [$2 $1] ».",
- "feedback-close": "Fêt",
- "feedback-bugcheck": "Formidâblo ! Controlâd simplament qu’o est pas yona de les [$1 cofieries ja cognues].",
- "feedback-bugnew": "J’é controlâ. Signalar una cofierie novèla",
"searchsuggest-search": "Rechèrchiér",
"searchsuggest-containing": "que contint...",
"api-error-badaccess-groups": "Vos éte pas ôtorisâ a tèlèchargiér des fichiérs sur ceti vouiqui.",
@@ -2862,5 +2845,27 @@
"expand_templates_remove_comments": "Suprimar los comentèros",
"expand_templates_remove_nowiki": "Suprime les balises <nowiki> dens lo rèsultat",
"expand_templates_generate_xml": "Fâre vêre l’âbro du parsor u format XML",
- "expand_templates_preview": "Prèvisualisacion du rendu"
+ "expand_templates_preview": "Prèvisualisacion du rendu",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Latin ètendu",
+ "special-characters-group-ipa": "AFE (IPA)",
+ "special-characters-group-symbols": "Simbolos",
+ "special-characters-group-greek": "Grèco",
+ "special-characters-group-cyrillic": "Cirilico",
+ "special-characters-group-arabic": "Arabo",
+ "special-characters-group-arabicextended": "Arabo ètendu",
+ "special-characters-group-persian": "Pèrsan",
+ "special-characters-group-hebrew": "Hèbrèo",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tamoul",
+ "special-characters-group-telugu": "Tèlougou",
+ "special-characters-group-sinhala": "Cingalês",
+ "special-characters-group-gujarati": "Goudjarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Tayi",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "C’mère",
+ "special-characters-title-endash": "terèt anglès",
+ "special-characters-title-emdash": "terèt èm",
+ "special-characters-title-minus": "segno muens"
}
diff --git a/languages/i18n/frr.json b/languages/i18n/frr.json
index d5c38cc2..8c6c7775 100644
--- a/languages/i18n/frr.json
+++ b/languages/i18n/frr.json
@@ -35,7 +35,7 @@
"tog-shownumberswatching": "Taal faan brükern uunwise, diar det sidj uun't uug haa",
"tog-oldsig": "Aktuel signatuur:",
"tog-fancysig": "Signatuur üs wikitekst uunsä (saner ferwisangen)",
- "tog-uselivepreview": "Live-föörskau funktjuun brük (eksperimentel)",
+ "tog-uselivepreview": "Live-föörskau funktjuun brük",
"tog-forceeditsummary": "Wäärne, wan bi't seekrin nian tuupfaadang uunden woort",
"tog-watchlisthideown": "Aanj feranrangen bi a sidjen, diar ik uun't uug behual wal, fersteeg",
"tog-watchlisthidebots": "Feranrangen faan bots bi a sidjen, diar ik uun't uug behual wal, fersteeg",
@@ -71,41 +71,41 @@
"thu": "Tö",
"fri": "Fr",
"sat": "Se",
- "january": "Januar",
- "february": "Feebruar",
+ "january": "Janewoore",
+ "february": "Febrewoore",
"march": "Marts",
"april": "April",
- "may_long": "Moi",
- "june": "Juuni",
+ "may_long": "Mei",
+ "june": "Jüüne",
"july": "Juuli",
"august": "August",
- "september": "Septämber",
+ "september": "September",
"october": "Oktoober",
- "november": "Nowämber",
- "december": "Detsämber",
- "january-gen": "Januar",
- "february-gen": "Feebruar",
+ "november": "Nofember",
+ "december": "Detsember",
+ "january-gen": "Janewoore",
+ "february-gen": "Febrewoore",
"march-gen": "Marts",
"april-gen": "April",
- "may-gen": "Moi",
+ "may-gen": "Mei",
"june-gen": "Juuni",
"july-gen": "Juuli",
"august-gen": "August",
- "september-gen": "Septämber",
+ "september-gen": "September",
"october-gen": "Oktoober",
"november-gen": "Nowämber",
- "december-gen": "Detsämber",
+ "december-gen": "Detsember",
"jan": "Jan.",
"feb": "Feb.",
"mar": "Mar.",
"apr": "Apr.",
- "may": "Moi",
+ "may": "Mei",
"jun": "Jun.",
"jul": "Jul.",
"aug": "Aug.",
"sep": "Sep.",
"oct": "Okt.",
- "nov": "Now.",
+ "nov": "Nof.",
"dec": "Det.",
"january-date": "$1. Janewoore",
"february-date": "$1. Febrewoore",
@@ -210,7 +210,8 @@
"otherlanguages": "Uun ööder spriaken",
"redirectedfrom": "(Widjerfeerd faan $1)",
"redirectpagesub": "Widjerfeerang",
- "lastmodifiedat": "Detdiar sidj as tuleetst di $1, am a klook $2 anert wurden.",
+ "redirectto": "Widjerfeer tu:",
+ "lastmodifiedat": "Detdiar sidj as tuleetst di $1, am a klook $2 feranert wurden.",
"viewcount": "Aw jüdeer sid as {{PLURAL:$1|iinjsen|$1 tunge}} tugram wörden.",
"protectedpage": "Sääkerd sid",
"jumpto": "Waksle tu:",
@@ -222,6 +223,7 @@
"pool-queuefull": "Pool as auerläästet",
"pool-errorunknown": "Ünbekäänd feeler",
"pool-servererror": "Di pooltäälersiinst werket ei ($1).",
+ "poolcounter-usage-error": "Feeler bi't bewerkin: $1",
"aboutsite": "Auer {{SITENAME}}",
"aboutpage": "Project:Auer",
"copyright": "Det sidj as tu fun oner $1 , wan diar niks ööders stäänt.",
@@ -231,6 +233,7 @@
"disclaimers": "Disclaimers",
"disclaimerpage": "Project:Disclaimers",
"edithelp": "Halep bi't bewerkin",
+ "helppage-top-gethelp": "Halep",
"mainpage": "Hoodsidj",
"mainpage-description": "Hoodsidj",
"policy-url": "Project:Reegeln",
@@ -314,10 +317,13 @@
"readonly_lag": "Det dootenbeenk as speret wurden, amdat jo ferdiald dootenbeenken (slaves) jo mä di hoodserver (master) ufglik kön.",
"internalerror": "Süsteemfeeler",
"internalerror_info": "Süsteemfeeler: $1",
+ "internalerror-fatal-exception": "Böös ütjnoomfeeler faan di slach \"$1\"",
"filecopyerror": "Det datei $1 küd ei efter $2 kopiaret wurd.",
"filerenameerror": "Det datei $1 küd ei efter $2 amnäämd wurd.",
"filedeleteerror": "Det datei $1 küd ei stregen wurd.",
"directorycreateerror": "Det fertiaknis \"$1\" küd ei iinracht wurd.",
+ "directoryreadonlyerror": "Det auersicht \"$1\" as seekert jin't skriiwen.",
+ "directorynotreadableerror": "Det auersicht \"$1\" koon ei leesen wurd.",
"filenotfound": "Det datei $1 küd ei fünjen wurd.",
"unexpected": "Mä di wäärs stemet wat ei: \"$1\"=\"$2\".",
"formerror": "Feeler: Di iindrach küd ei ferwerket wurd.",
@@ -339,7 +345,8 @@
"viewsourcetext": "Dü könst di kweltekst faan det sidj uunluke an ham uk kopiare:",
"viewyourtext": "Dü könst di code faan '''din feranrang''' faan detdiar sidj uunluke an kopiare:",
"protectedinterface": "Üüb detdiar sidj stäänt tekst för det software faan detheer wiki an as seekert wurden, am dat näämen diar wat feranert.\nDü könst [//translatewiki.net/ translatewiki.net] faan MediaWiki brük, am auersaatangen för ale wiki projekten tu maagin.",
- "editinginterface": "'''Paase üüb:''' Üüb detdiar sidj stäänt tekst, diar faan't MediaWiki software brükt woort. Wan dü diar wat feranerst, feranerst dü di skak faan't Nordfriisk Wikipedia.\nWan dü wat auersaat wel, maage det mä [//translatewiki.net/ translatewiki.net], det as det MediaWiki lokalisiarangsprojekt.",
+ "editinginterface": "<strong>Paase üüb:</strong> Üüb detdiar sidj stäänt tekst, diar faan't MediaWiki software brükt woort. Wan dü diar wat feranerst, feranerst dü di skak faan't Nordfriisk Wikipedia.",
+ "translateinterface": "Am auersaatangen föör aal a Wikis föörtunemen, gung tu [//translatewiki.net/ translatewiki.net], det as det MediaWiki-lokalisiarangsprojekt.",
"cascadeprotected": "Detdiar sidj koon ei bewerket wurd. Hat as uun {{PLURAL:$1|detdiar sidj|jodiar sidjen}}\niinbünjen, diar auer kaskaadenseekerhaid seekert {{PLURAL:$1|as|san}}:\n$2",
"namespaceprotected": "Dü heest ei det brükerrocht, am sidjen uun di nöömrüm '''$1''' tu bewerkin.",
"customcssprotected": "Dü mutst detheer CSS sidj ei bewerke, auer det hoker ööders hiart.",
@@ -396,6 +403,8 @@
"userlogin-resetlink": "Heest dü din login dooten ferjiden?",
"userlogin-resetpassword-link": "Paaswurd ferjiden?",
"userlogin-helplink2": "Halep bi't uunmeldin",
+ "userlogin-loggedin": "Du beest al üs {{GENDER:$1|$1}} uunmeldet.\nBrük det formulaar diar oner, am di mä en öödern nööm uuntumeldin.",
+ "userlogin-createanother": "En ööder brükerkonto iinracht",
"createacct-emailrequired": "E-mail adres",
"createacct-emailoptional": "E-mail adres (optional)",
"createacct-email-ph": "Du din e-mail adres iin",
@@ -457,6 +466,7 @@
"createaccount-text": "Diar as mä din e-mail adres för di en brükerkonto \"$2\" üüb {{SITENAME}} ($4) maaget wurden. För \"$2\" as automaatisk det paaswurd \"$3\" iinracht wurden.\nDü skulst di nü uunmelde an det paaswurd anre.\n\nWan det brükerkonto ütj fersen uunlaanj wurden as, säärst dü niks widjer onernem.",
"login-throttled": "Dü heest tufölsis fersoocht, di uuntumeldin.\nWees so gud an teew $1, iar dü det noch ans ferschükst.",
"login-abort-generic": "Det uunmeldin hää ei loket - Ufbreegen",
+ "login-migrated-generic": "Din brükerkonto as feranert wurden. Dan brükernööm jaft det üüb detheer Wiki ei muar.",
"loginlanguagelabel": "Spriak: $1",
"suspicious-userlogout": "Din ufmeldang as ei föörnimen wurden, auer det uunfraag ferlicht faan en uunstakenen browser of faan en cache-proxy kaam.",
"createacct-another-realname-tip": "Stäänt tu wool. Wan dü dan rochten nööm uundääst, koon hi mä din feranrangen ferbünjen wurd.",
@@ -552,6 +562,7 @@
"anoneditwarning": "'''Paase üüb:''' Dü beest ei uunmeldet. Din aktuel IP-adres komt tu sen, wan dü feranrangen föörnamst. Wan dü di <strong>[$1 uunmeldest]</strong> of <strong>[$2 en konto iinrachtst]</strong>, wurd din feranrangen mä dan brükernööm ferbünjen, tuup mä ööder föördialen.",
"anonpreviewwarning": "\"Dü beest ei uunmeldet. Bi't seekrin woort din IP-adres uun a ferluup faan werjuunen aptiakent.\"",
"missingsummary": "'''Paase üüb:''' Dü heest det ei tuupfaadet.\nWan dü det sidj seekerst, woort det saner en kurtfaadet beskriiwang auernimen.",
+ "selfredirect": "<strong>Paase üüb:</strong> Dü feerst detheer sidj tu detsalew sidj widjer.\nDü heest was det ferkiard mual uunden, of dü bewerkest det ferkiard sidj.\nWan dü noch ans üüb „{{int:savearticle}}“ trakst, woort det widjerfeerang likes iinracht.",
"missingcommenttext": "Faade det oner tuup.",
"missingcommentheader": "'''Paase üüb:''' Dü heest nian auerskraft uunden.\nWan dü det sidj seekerst, woort det saner auerskraft auernimen.",
"summary-preview": "Föörskau faan det tuupfaadang:",
@@ -570,7 +581,7 @@
"accmailtitle": "Paaswurd as ferschüürd wurden.",
"accmailtext": "En tufelag iinracht paaswurd för [[User talk:$1|$1]] as tu $2 ferschüürd wurden. Det koon üüb det spezial-sidj ''[[Special:ChangePassword|Paaswurd anre]]'' feranert wurd, wan dü uunmeldet beest.",
"newarticle": "(Nei)",
- "newarticletext": "Dü beest en ferwisang tu en sidj fulagt, diar't noch ei jaft.\nAm det sidj iinturachten, skriiw dan tekst uun det fial för't bewerkin iin.\nÜüb det [$1 halepsidj] fanjst dü halep.\nWan dü ütj fersen heer beest, trak ianfach üüb di '''turag'''-knoop faan dan browser.",
+ "newarticletext": "Dü beest en ferwisang tu en sidj fulagt, diar't noch ei jaft.\nAm det sidj iinturachten, skriiw dan tekst uun det fial för't bewerkin iin.\nÜüb det [$1 halepsidj] fanjst dü halep.\nWan dü ütj fersen heer beest, trak ianfach üüb di <strong>turag</strong>-knoop faan dan browser.",
"anontalkpagetext": "----''Üüb detheer sidj könst dü en ünbekäänden brüker en nooracht du. Det lääpt auer sin IP adres. IP adresen kön faan flook brükern brükt wurd. Wan dü mä detheer nooracht niks began könst, do as det ferlicht för hoker ööders mend weesen. Dü säärst niks widjer onernem. Wan dü en aanj [[Special:UserLogin/signup|brükerkonto iinrachst]] of di [[Special:UserLogin|uunmeldest]], komt sowat ei weder föör.",
"noarticletext": "Üüb detdiar sidj stäänt noch niks.\nDü könst didiar tiitel üüb ööder sidjen [[Special:Search/{{PAGENAME}}|schük]],\n<span class=\"plainlinks\">uun [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} logbuken schük] of detdiar sidj [{{fullurl:{{FULLPAGENAME}}|action=edit}} bewerke]</span>.",
"noarticletext-nopermission": "Üüb detdiar sidj stäänt noch niks, oober dü mutst diar uk niks iinskriiw.\nDü könst diar üüb ööder sidjen efter [[Special:Search/{{PAGENAME}}|schük]] of a <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAME}}}} logbuken uunluke].</span>",
@@ -649,6 +660,10 @@
"content-model-text": "normool tekst",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Leesag objekt",
+ "content-json-empty-array": "Leesag array",
+ "duplicate-args-category": "Sidjen, diar dobelt argumenten uun föörlaagen aprep.",
+ "duplicate-args-category-desc": "Detdair sidj rept föörlaagen ap, diar dobelt argumenten brük, so üs <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> of <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Paase üüb:''' Detdiar sidj brükt tuföl widjloftag server-funktjuunen.\n\nDiar mut ei muar üs {{PLURAL:$2|1|$2}} brükt wurd. Nü {{PLURAL:$1|woort diar 1|wurd diar $1}} brükt.",
"expensive-parserfunction-category": "Sidjen mä tuföl parser-funktjuunen.",
"post-expand-template-inclusion-warning": "'''Paase üüb:''' Enkelt föörlaagen san tu grat, jo kön ei uun det sidj iinbünjen wurd.",
@@ -737,7 +752,7 @@
"revdelete-legend": "Iinstelangen, hüföl tu sen wees skal",
"revdelete-hide-text": "Tekst faan det werjuun",
"revdelete-hide-image": "Fersteeg, wat uun det datei stäänt",
- "revdelete-hide-name": "Logbuk-aktjuun fersteeg",
+ "revdelete-hide-name": "Mual an parameetern fersteeg",
"revdelete-hide-comment": "Tuupfaadet beskriiwang",
"revdelete-hide-user": "Brükernööm/IP-adres faan di brüker",
"revdelete-hide-restricted": "Dooten uk för administratooren an öödern fersteeg",
@@ -791,7 +806,6 @@
"mergehistory-same-destination": "Det iarst an det ööder sidj mut ei detsalew wees",
"mergehistory-reason": "Grünj:",
"mergelog": "Ferianangs-logbuk",
- "pagemerge-logentry": "[[$1]] efter [[$2]] tuupfeerd (werjuunen bit $3)",
"revertmerge": "Det tuupfeeren turagsaat",
"mergelogpagetext": "Diar as det logbuk faan a tuupfeerd sidjen.",
"history-title": "$1: Ferluup faan a werjuunen",
@@ -832,6 +846,7 @@
"search-result-category-size": "{{PLURAL:$1|1 sidj|$1 sidjen}} ({{PLURAL:$2|1 onerkategorii|$2 onerkategoriin}}, {{PLURAL:$3|1 datei|$3 datein}})",
"search-redirect": "(widjerfeerd faan „$1“)",
"search-section": "(kirew $1)",
+ "search-category": "(kategorii $1)",
"search-file-match": "(fünjen tekst)",
"search-suggest": "Mendst dü „$1“?",
"search-interwiki-caption": "Saster-projekten",
@@ -842,6 +857,7 @@
"searchall": "aaltumaal",
"showingresults": "Heer {{PLURAL:$1|as '''1''' resultaat|san '''$1''' resultaaten}}, jo began mä numer '''$2.'''",
"showingresultsinrange": "Oner {{PLURAL:$1|woort <strong>ian</strong> resultaat|wurd bit tu <strong>$1</strong> resultaaten}} tesken <strong>$2</strong> an <strong>$3</strong> uunwiset.",
+ "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> faan <strong>$3</strong>|Resultaaten <strong>$1 - $2</strong> faan <strong>$3</strong>}}",
"search-nonefound": "För din uunfraag san nian resultaaten fünjen wurden.",
"powersearch-legend": "Ütjwidjet schüken",
"powersearch-ns": "Schük uun nöömrümer:",
@@ -864,6 +880,11 @@
"prefs-personal": "Brüker dooten",
"prefs-rc": "Leetst feranrangen",
"prefs-watchlist": "Uun't uug behual",
+ "prefs-editwatchlist": "List mä sidjen, diar dü uun't uug behual wel, bewerke",
+ "prefs-editwatchlist-label": "Iindracher üüb det list mä sidjen, diar dü uun't uug behual wel, bewerke:",
+ "prefs-editwatchlist-edit": "Iindracher üüb det list mä sidjen, diar dü uun't uug behual wel, uunluke an strik",
+ "prefs-editwatchlist-raw": "Uun't listenformoot bewerke",
+ "prefs-editwatchlist-clear": "Nian sidjen muar uun't uug behual",
"prefs-watchlist-days": "So föl daar uun't uug behual:",
"prefs-watchlist-days-max": "Ei muar üs {{PLURAL:$1|ään dai|$1 daar}}",
"prefs-watchlist-edits": "Ei muar feranrangen üs:",
@@ -954,6 +975,7 @@
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Ferskeel",
"prefs-help-prefershttps": "Detdiar iinstelang täält, wan dü di naist tooch uunmeldest.",
+ "prefswarning-warning": "A feranrangen bi din iinstelangen san noch ei seekert wurden.\nWan dü detheer sidj ferläätst, saner üüb \"$1\" tu traken, wurd din iinstelangen ei aktualisiaret.",
"prefs-tabs-navigation-hint": "Halep: Dü könst a lachter of rochter wiiser-knoop brük, am tesken a ridjerkoorden boowen uun't menüü hen an weder tu springen.",
"email-address-validity-valid": "Detdiar E-Mail-adres schocht gud ütj.",
"email-address-validity-invalid": "Du en echt E-Mail-adres uun.",
@@ -983,7 +1005,7 @@
"group-sysop": "Administratooren",
"group-bureaucrat": "Bürokraaten",
"group-suppress": "Oversighter",
- "group-all": "(Aaltumaal)",
+ "group-all": "(Aal a)",
"group-user-member": "{{GENDER:$1|Brüker}}",
"group-autoconfirmed-member": "{{GENDER:$1|Registriaret brüker}}",
"group-bot-member": "{{GENDER:$1|Bot}}",
@@ -1039,6 +1061,7 @@
"right-protect": "Sidjenseekerhaid feranre an kaskaaden-seekert sidjen bewerke",
"right-editprotected": "Sidjen bewerke, diar mä „{{int:protect-level-sysop}}“ seekert san.",
"right-editsemiprotected": "Sidjen bewerke, diar mä „{{int:protect-level-autoconfirmed}}“ seekert san.",
+ "right-editcontentmodel": "Det model faan det sidj bewerke",
"right-editinterface": "Brüker-skak bewerke",
"right-editusercssjs": "CSS- an JavaScript-datein faan ööder brükern bewerke",
"right-editusercss": "CSS-datein faan ööder brükern bewerke",
@@ -1066,6 +1089,7 @@
"right-override-export-depth": "Sidjen an onersidjen bit tu en jipde faan 5 eksportiare",
"right-sendemail": "E-mails tu ööder brükern schüür",
"right-passwordreset": "Paaswurd faan en brüker turagsaat an det e-mail diartu uunluke",
+ "right-managechangetags": "[[Special:Tags|Markiarangen]] iinracht an uun't dootenbeenk strik",
"newuserlogpage": "Neiuunmeldangs-logbuk",
"newuserlogpagetext": "Detheer as en logbuk faan nei iinracht brükerkonten.",
"rightslog": "Brükerrochten-logbuk",
@@ -1111,14 +1135,16 @@
"action-viewmywatchlist": "sidjen uuntulukin, diar dü uun't uug behual wel",
"action-viewmyprivateinfo": "din priwoot dooten uuntulukin",
"action-editmyprivateinfo": "din priwoot dooten tu bewerkin",
+ "action-editcontentmodel": "det model faan det sidj tu bewerkin",
+ "action-managechangetags": "markiarangen iinracht an uun't dootenbeenk strik",
"nchanges": "$1 {{PLURAL:$1|feranrang|feranrangen}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sant dan leetst beschük}}",
"enhancedrc-history": "Ferluup",
"recentchanges": "Leetst feranrangen",
"recentchanges-legend": "Iinstelangen för't uunwisin",
- "recentchanges-summary": "Üüb detdiar sidj könst dü a leetst feranrangen faan't Nordfriisk Wikipedia ferfulge.",
+ "recentchanges-summary": "Üüb detdiar sidj könst dü a leetst feranrangen faan detheer Wiki-projekt ferfulge.",
"recentchanges-noresult": "Uun di uunjiwen tidjrüm san sok feranrangen ei föörnimen wurden.",
- "recentchanges-feed-description": "Mä didiar feed könst dü a leetst feranrangen faan't Nordfriisk Wikipedia ferfulge.",
+ "recentchanges-feed-description": "Mä didiar feed könst dü a leetst feranrangen faan detheer Wiki-projekt ferfulge.",
"recentchanges-label-newpage": "Nei sidj uunlaanj",
"recentchanges-label-minor": "Letj feranrang",
"recentchanges-label-bot": "Feranrang faan en bot",
@@ -1127,7 +1153,7 @@
"recentchanges-legend-heading": "'''Ferklaarang:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (luke uk bi't [[Special:NewPages|list mä nei sidjen]])",
"recentchanges-legend-plusminus": "(''±123'')",
- "rcnotefrom": "Diar wurd a feranrangen sant <strong>$2</strong>uunwiset (ei muar üs <strong>$1</strong> feranrangen).",
+ "rcnotefrom": "Diar {{PLURAL:$5|woort det feranrang|wurd a feranrangen}} sant <strong>$3,$4</strong>uunwiset (ei muar üs <strong>$1</strong> feranrangen).",
"rclistfrom": "Bluas feranrangen sant $3 $2 wise",
"rcshowhideminor": "$1 letj feranrangen",
"rcshowhideminor-show": "Wise",
@@ -1181,9 +1207,9 @@
"uploaderror": "Bi't huuchschüüren as wat skiaf gingen",
"upload-recreate-warning": "'''Paase üüb: En datei mä didiar nööm as al ans stregen of fersköwen wurden.'''\n\nWat nü komt, as ütj det logbuk för't striken an fersküüwen faan detdiar datei.",
"uploadtext": "Brük detdiar formulaar, am nei datein huuchtuschüüren.\n\nGung tu det [[Special:FileList|list faan huuchschüürd datein]], am datein tu schüken of uuntuwisin. Luke uk iin uun't logbuk för't [[Special:Log/upload|huuchschüüren]] of [[Special:Log/delete|striken]] faan datein.\n\nAm en '''bil''' uun en artiikel tu brüken, brük en link faan det furem:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – för en grat bil\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|alternatiif tekst]]</nowiki></code>''' – för en 200px briad bil uun en box, mä „alternatiif tekst“ üs beskriiwang faan det bil\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – för en direkt ferwisang üüb det datei, saner det datei uuntuwisin",
- "upload-permitted": "Tuläät slacher faan datein: $1.",
- "upload-preferred": "Slacher faan datein, diar dü brük skulst: $1.",
- "upload-prohibited": "Ei tuläät slacher faan datein: $1.",
+ "upload-permitted": "Tuläät {{Plural:$2|slach|slacher}} faan datein: $1.",
+ "upload-preferred": "{{Plural:$2|Slach|Slacher}} faan datein, diar dü brük skulst: $1.",
+ "upload-prohibited": "Ei tuläät {{Plural:$2|slach|slacher}} faan datein: $1.",
"uploadlogpage": "Datei-logbuk",
"uploadlogpagetext": "Detheer as det logbuk för huuchschüürd datein. Dü könst uk det [[Special:NewFiles|galerii faan nei datein]] uunluke.",
"filename": "Dateinööm",
@@ -1339,9 +1365,11 @@
"license": "Lisens:",
"license-header": "Lisens",
"nolicense": "Nian ütjwool",
+ "licenses-edit": "Lisensmögelkhaiden bewerke",
"license-nopreview": "(Diar as noch niks tu sen)",
- "upload_source_url": "(en tuläät URL)",
- "upload_source_file": "(en datei üüb dan computer)",
+ "upload_source_url": "(din ütjsoocht datei faan en tuläät URL)",
+ "upload_source_file": "(din ütjsoocht datei faan dan computer)",
+ "listfiles-delete": "strik",
"listfiles-summary": "Üüb detdiar spezialsidj wurd aal a huuchschüürd datein uunwiset.",
"listfiles_search_for": "Schük efter det datei:",
"imgfile": "datei",
@@ -1431,12 +1459,13 @@
"randomincategory": "Tufelag sidj uun't kategorii",
"randomincategory-invalidcategory": "\"$1\" as üs kategoriinööm ei tuläät.",
"randomincategory-nopages": "Diar san nian sidjen uun [[:Category:$1]].",
+ "randomincategory-category": "Kategorii:",
+ "randomincategory-legend": "Tufelag sidj uun't kategorii",
"randomredirect": "Tufelag widjerfeerang",
"randomredirect-nopages": "Uun di nöömrüm „$1“ san nian widjerfeerangen.",
"statistics": "Statistik",
"statistics-header-pages": "Sidjenstatistik",
"statistics-header-edits": "Statistik faan feranrangen",
- "statistics-header-views": "Statistik faan kliks üüb sidjen",
"statistics-header-users": "Brükerstatistik",
"statistics-header-hooks": "Ööder statistiken",
"statistics-articles": "Artiikler",
@@ -1445,13 +1474,9 @@
"statistics-files": "Huuchschüürd datein",
"statistics-edits": "Feranrangen, sant {{SITENAME}} maaget wurden as",
"statistics-edits-average": "Feranrangen per sidj uun't madel",
- "statistics-views-total": "Kliks üüb det sidj",
- "statistics-views-total-desc": "Kliks üüb sidjen, diar't goorei jaft of \"Spezial-\"sidjen wurd ei mätääld.",
- "statistics-views-peredit": "Kliks per feranrang",
"statistics-users": "Registriaret [[Special:ListUsers|brükern]]",
"statistics-users-active": "Aktiif brükern",
"statistics-users-active-desc": "Brükern, diar wat bewerket haa uun a leetst {{PLURAL:$1|dai|$1 daar}}",
- "statistics-mostpopular": "Sidjen mä a miast kliks",
"pageswithprop": "Sidjen mä en sidjeneegenoort",
"pageswithprop-legend": "Sidjen mä en sidjeneegenoort",
"pageswithprop-text": "Detheer Spezial-sidj feert sidjen mä was sidjeneegenoorten ap.",
@@ -1492,13 +1517,15 @@
"uncategorizedtemplates": "Föörlaagen saner kategorii",
"unusedcategories": "Kategoriin, diar ei brükt wurd",
"unusedimages": "Datein, diar ei brükt wurd",
- "popularpages": "Miats uunluket sidjen",
"wantedcategories": "Kategoriin, diar brükt wurd",
"wantedpages": "Sidjen, diar brükt wurd",
+ "wantedpages-summary": "List faan sidjen, diar't goorei jaft, mä a miast ferwisangen, oober saner sidjen, huar bluas üüb ferwiset woort. För en list faan sidjen, diar't goorei jaft, oober mä ferwisangen luke bi [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Diar as en artiikelnööm ei tuläät uun: $1",
"wantedfiles": "Datein, diar brükt wurd",
"wantedfiletext-cat": "Jodiar datein wurd brükt, oober san ei diar. Datein faan ööder archiiwen wurd apfeerd, san oober <del>trochstregen</del>. An jo sidjen, diar sok datein brük, stun uun [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Jodiar datein wurd brükt, man san ei diar. An do wurd diar üüb [[:$1]] sidjen apfeerd, diar datein brük, diar't ei jaft.",
"wantedfiletext-nocat": "Jodiar datein wurd brükt, oober san ei diar. Datein faan ööder archiiwen wurd apfeerd, san oober <del>trochstregen</del>.",
+ "wantedfiletext-nocat-noforeign": "Jodiar datein wurd brükt, man san ei diar.",
"wantedtemplates": "Föörlaagen, diar brükt wurd",
"mostlinked": "Sidjen, huar a miast ööder sidjen üüb ferwise",
"mostlinkedcategories": "Miast brükt kategoriin",
@@ -1552,9 +1579,11 @@
"pager-older-n": "{{PLURAL:$1|1 ääler|$1 ääler}}",
"suppress": "Oversight",
"querypage-disabled": "Detdiar spezial-sidj as ei aktiif, am det süsteem ei tu auerläästin.",
+ "apihelp": "Halep för API",
+ "apihelp-no-such-module": "Moduul \"$1\" ei fünjen.",
"booksources": "Schük efter ISBN-numer",
"booksources-search-legend": "Schük efter bukloodens",
- "booksources-go": "Widjer",
+ "booksources-search": "Schük",
"booksources-text": "Detdiar list ferwiset üüb wääbsteeden, diar nei an brükt buken ferkuupe. Diar feist dü uk muar tu weden. {{SITENAME}} hää mo jodiar kuuplidj oober niks tu dun.",
"booksources-invalid-isbn": "Detdiar ISBN as woorskiinelk ferkiard. Luke noch ans efter, of det rocht auerdraanj wurden as.",
"specialloguserlabel": "Brüker:",
@@ -1633,8 +1662,8 @@
"index-category-desc": "Üüb detdiar sidj stäänt det maagisk wurd <code><nowiki>__INDEX__</nowiki></code> an as uun en nöömrüm, huar det ei tuläät as. Sodenang woort det faan a bots likes indisiaret.",
"post-expand-template-inclusion-category-desc": "Efter't ütjwidjin faan a föörlaagen as det sidj grater üs <code>$wgMaxArticleSize</code>, sodenang kön enkelt föörlaagen ei ütjwidjet wurd.",
"post-expand-template-argument-category-desc": "Efter't ütjwidjin faan en föörlaagenargument (det stäänt uun trebelt kläämen so üs <code>{{{Foo}}})</code> as det sidj grater üs <code>$wgMaxArticleSize</code>.",
- "expensive-parserfunction-category-desc": "Diar san tu föl parser-funktjuunen (so üs <code>#ifexist</code>) uun det sidj iinbünjen. Luke efter uun't [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit brüker-hoonbuk].",
- "broken-file-category-desc": "Detdiar kategorii woort iinsaat, wan üüb det sidj en uunstaken ferwisang föörkomt. (Det as ferlicht en ferwisang üüb en datei, wat det goorei jaft.)",
+ "expensive-parserfunction-category-desc": "Det sidj brükt tuföl parser-funktjuunen (so üs <code>#ifexist</code>). Luke efter uun't [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit brüker-hoonbuk].",
+ "broken-file-category-desc": "Det sidj brükt en uunstaken ferwisang. (Det as ferlicht en ferwisang üüb en datei, wat det goorei jaft.)",
"hidden-category-category-desc": "Det as en kategorii, huar <code><nowiki>__HIDDENCAT__</nowiki></code> üüb stäänt. Hat woort normoolerwiis ei bi a kategoriin uunwiset.",
"trackingcategories-nodesc": "Diar as nian beskriiwang.",
"trackingcategories-disabled": "Detdiar kategorii as ufsteld wurden",
@@ -1672,7 +1701,7 @@
"mywatchlist": "Uun't uug behual",
"watchlistfor2": "Foon $1 $2",
"nowatchlist": "Diar as nään iindrach, diar dü uun't uug behual wel.",
- "watchlistanontext": "Dü skel di $1, am iindracher tu leesen of tu bewerkin, diar dü uun't uug behual wel.",
+ "watchlistanontext": "Dü skel di uunmelde, am iindracher tu leesen of tu bewerkin, diar dü uun't uug behual wel.",
"watchnologin": "Ei uunmeldet",
"addwatch": "Uk uun't uug behual",
"addedwatchtext": "Det sidj „[[:$1]]“ wel dü [[Special:Watchlist|uun't uug behual]].\nFeranrangen faan detdiar sidj wurd üüb detdiar list fäästhäälen.",
@@ -1689,8 +1718,8 @@
"watchlist-details": "Dü behäälst {{PLURAL:$1|1 sidj|$1 sidjen}} uun't uug, diarbi wurd diskuschuunsidjen ei mätääld.",
"wlheader-enotif": "Di e-mail siinst as aktiif.",
"wlheader-showupdated": "Nei feranert sidjen wurd '''fäät''' uunwiset.",
- "wlnote": "Diar {{PLURAL:$1|stäänt det leetst feranrang|stun a leetst '''$1''' feranrangen}} faan a leetst {{PLURAL:$2|stünj|'''$2''' stünjen}}. Stant: $3, klook $4.",
- "wlshowlast": "Wise a feranrangen faan leetst $1 stünjen, $2 daar of $3.",
+ "wlnote": "Diar {{PLURAL:$1|stäänt det leetst feranrang|stun a leetst <strong>$1</strong> feranrangen}} faan a leetst {{PLURAL:$2|stünj|<strong>$2</strong> stünjen}}. Stant: $3, klook $4.",
+ "wlshowlast": "Wise a feranrangen faan a leetst $1 stünjen, $2 daar.",
"watchlist-options": "Iinstelangen för't uunwisin",
"watching": "Uun't uug behual ...",
"unwatching": "Ei uun't uug behual ...",
@@ -1720,7 +1749,7 @@
"exbeforeblank": "diar sted föör't leesag maagin: „$1“",
"delete-confirm": "Strik \"$1\"",
"delete-legend": "Strike",
- "historywarning": "'''Paase üüb:''' Det sidj, wat dü strik wel, hää amanbi $1 {{PLURAL:$1|werjuun|werjuunen}}:",
+ "historywarning": "<strong>Paase üüb:</strong> Det sidj, wat dü strik wel, hää $1 {{PLURAL:$1|werjuun|werjuunen}}:",
"confirmdeletetext": "Dü wel en sidj mä aal sin werjuunen strik. Dü skel gudkään, dat dü witjst, wat dü dääst an dat din dun mä a [[{{MediaWiki:Policy-url}}|brükerreegeln]] auerian stemet.",
"actioncomplete": "Klaar",
"actionfailed": "Diar ging wat skiaf",
@@ -1736,9 +1765,9 @@
"delete-edit-reasonlist": "Grünjer för't striken bewerke",
"delete-toobig": "Detdiar sidj hää muar üs $1 {{PLURAL:$1|werjuun|werjuunen}} . Sok sidjen kön ei so gau stregen wurd, ööders san a servers plaat.",
"delete-warning-toobig": "Detdiar sidj hää muar üs $1 {{PLURAL:$1|werjuun|werjuunen}} . Det striken koon komer maage bi't dootenbeenk.",
+ "deleteprotected": "Dü könst detdiar sidj ei strik, auer det seekert wurden as.",
"deleting-backlinks-warning": "'''Paase üüb:''' Diar ferwise noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|ööder sidjen]] üüb det sidj, diar dü strik wel. Of det sidj as noch huarööders iinbünjen.",
"rollback": "Feranrangen turagsaat",
- "rollback_short": "Turagsaat",
"rollbacklink": "turagsaat",
"rollbacklinkcount": "$1 {{PLURAL:$1|feranrang|feranrangen}} turagsaat",
"rollbacklinkcount-morethan": "Muar üs $1 {{PLURAL:$1|werjuun|werjuunen}} turagsaat",
@@ -1788,6 +1817,7 @@
"protect-othertime": "Ööder sperdüür:",
"protect-othertime-op": "ööder sperdüür",
"protect-existing-expiry": "Sidjenseekerang lääpt uf: $2, klook $3",
+ "protect-existing-expiry-infinity": "Sidjenseekrang lääpt uf: saner aanj",
"protect-otherreason": "Ööder/noch en grünj:",
"protect-otherreason-op": "Ööder grünj:",
"protect-dropdown": "* Miast brükt grünjer\n** Edit-War\n** Wandaalen onerwais\n** Tuföl rekloome\n** Flooksis brükt föörlaag\n** Sidj mä föl beschük",
@@ -1847,6 +1877,7 @@
"namespace": "Nöömrüm:",
"invert": "Ütjwool amkiir",
"tooltip-invert": "Saat diar en tiaken, am feranrangen faan sidjen uun didiar nöömrüm ei uuntuwisin.",
+ "tooltip-whatlinkshere-invert": "Saat diar en tiaken, am sidjen uun didiar nöömrüm ei uuntuwisin.",
"namespace_association": "Ferbünjen nöömrüm",
"tooltip-namespace_association": "Saat diar en tiaken, am di ferbünjen nöömrüm of diskusjuunsnöömrüm mä iintubetjin.",
"blanknamespace": "(Sidjen)",
@@ -1896,7 +1927,7 @@
"autoblockid": "Automaatisk sper #$1",
"block": "Brüker spere",
"unblock": "Brüker ei muar spere",
- "blockip": "IP-adres/brüker spere",
+ "blockip": "IP-adres/{{GENDER:$1|brüker}} spere",
"blockip-legend": "IP-adres/brüker spere",
"blockiptext": "Mä detdiar formulaar sperest dü en IP-adres of en brükernööm, so dat faan diar nian feranrangen muar maaget wurd kön. \nDet skul bluas föörnimen wurd, am jin wandaalen föörtugungen an uun auerianstemang mä a [[{{MediaWiki:Policy-url}}|brükerreegeln]].\nSkriiw en guden grünj för det sper ap.",
"ipaddressorusername": "IP-adres of brükernööm:",
@@ -1925,13 +1956,14 @@
"ipb-unblock-addr": "„$1“ ei muar spere",
"ipb-unblock": "IP-adres/brüker ei muar spere",
"ipb-blocklist": "Speren uunwise",
- "ipb-blocklist-contribs": "Bidracher faan „$1“",
+ "ipb-blocklist-contribs": "Bidracher faan „{{GENDER:$1|$1}}“",
"unblockip": "Brüker ei muar spere",
"unblockiptext": "Mä detdiar formulaar könst dü det sper faan en IP-adres of en brüker apheew.",
"ipusubmit": "Ei muar spere",
"unblocked": "[[User:$1|$1]] woort ei muar speret.",
"unblocked-range": "Sper för $1 as apheewen wurden.",
"unblocked-id": "Sperang $1 as apheewen",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] as freiden wurden.",
"blocklist": "Speret brükern",
"ipblocklist": "Speret brükern",
"ipblocklist-legend": "Speret brüker finj",
@@ -2110,14 +2142,17 @@
"thumbnail-temp-create": "Det datei för det tidjwiis sümnaielbil küd ei skrewen wurd",
"thumbnail-dest-create": "Det föörskaubil küd diar ei seekert wurd.",
"thumbnail_invalid_params": "Sümnaieldooten steme ei",
+ "thumbnail_toobigimagearea": "Datei mä en grate faan muar üs $1",
"thumbnail_dest_directory": "Det fertiaknis koon ei skrewen wurd.",
"thumbnail_image-type": "Sok bilen kön ei brükt wurd",
"thumbnail_gd-library": "GD-bibleteek ei gans diar: Det funktjuun $1 waant",
"thumbnail_image-missing": "Det datei as wel ei diar: $1",
"thumbnail_image-failure-limit": "Detdiar föörskaubil as uun a leetst tidj tufölsis ($1 of muarsis) feranert wurden. Ferschük det leeder man noch ans.",
"import": "Sidjen importiare",
- "importinterwiki": "Transwiki import",
- "import-interwiki-text": "Schük en Wiki an en sidj tu importiarin ütj. A werjuunen an brükernöömer bliiw erhäälen.\nTranswiki-import-aktjuunen wurd uun't [[Special:Log/import|Import-logbuk]] fäästhäälen.",
+ "importinterwiki": "Faan en ööder Wiki importiare",
+ "import-interwiki-text": "Schük en Wiki an en sidj tu importiarin ütj. A werjuunen an brükernöömer bliiw erhäälen.\nImporten faan ööder Wikis wurd uun't [[Special:Log/import|Import-logbuk]] fäästhäälen.",
+ "import-interwiki-sourcewiki": "Faan hün Wiki:",
+ "import-interwiki-sourcepage": "Faan hün sidj:",
"import-interwiki-history": "Aal a werjuunen faan det sidj importiare",
"import-interwiki-templates": "Mä aal a föörlaagen",
"import-interwiki-submit": "Import",
@@ -2135,7 +2170,7 @@
"importcantopen": "Det import-datei küd ei eeben maaget wurd.",
"importbadinterwiki": "Ferkiard interwiki-link",
"importsuccess": "Import klaar!",
- "importnosources": "För di transwiki-import san nian kwelen uunden. Dü könst werjuunen ei direkt huuchschüür.",
+ "importnosources": "För di import san nian ööder Wikis uunden. Dü könst werjuunen ei direkt huuchschüür.",
"importnofile": "Diar as nian importdatei bestemet wurden.",
"importuploaderrorsize": "Bi't huuchschüüren faan det importdatei as wat skiaf gingen. Det datei as tu grat.",
"importuploaderrorpartial": "Bi't huuchschüüren faan det importdatei as wat skiaf gingen. Det datei as bluas dialwiis huuchschüürd wurden.",
@@ -2151,7 +2186,7 @@
"import-error-create": "Det sidj „$1“ as ei importiaret wurden, auer dü det ei maage mutst.",
"import-error-interwiki": "Det sidj „$1“ as ei importiaret wurden, auer di nööm för ferwisangen (interwiki) föörsen as.",
"import-error-special": "Det sidj „$1“ as ei importiaret wurden, auer hat tu en nöömrüm hiart, huar nian sidjen mögelk san.",
- "import-error-invalid": "Det sidj „$1“ as ei importiaret wurden, auer di nööm ei stemet.",
+ "import-error-invalid": "Det sidj „$1“ as ei importiaret wurden, auer di nööm üüb detheer Wiki ei tuläät as.",
"import-error-unserialize": "Det werjuun $2 faan det sidj „$1“ küd ei deserialisiaret wurd. Det werjuun woort mä det münster $3 brükt, an det as mä $4 serialisiaret.",
"import-error-bad-location": "Det feranrang $2 mä model $3 koon ei üs \"$1\" üüb detheer wiki seekert wurd, auer detdiar model heer ei brükt wurd koon.",
"import-options-wrong": "Ferkiard {{PLURAL:$2|iinstelang|iinstelangen}}: <nowiki>$1</nowiki>",
@@ -2159,27 +2194,25 @@
"import-rootpage-nosubpage": "Uun di nöömrüm „$1“ jaft at nian onersidjen.",
"importlogpage": "Import-logbuk",
"importlogpagetext": "Administratiif import faan sidjen mä aal a werjuunen faan ööder Wikis.",
- "import-logentry-upload": "„[[$1]]“ faan en datei importiaret",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|werjuun|werjuunen}}",
- "import-logentry-interwiki": "„$1“ mä transwiki importiaret",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|werjuun|werjuunen}} faan $2",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|werjuun|werjuunen}} importiaret",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|werjuun|werjuunen}} faan $2 importiaret",
"javascripttest": "JavaScript-test",
- "javascripttest-title": "$1-tests wurd ütjfeerd.",
"javascripttest-pagetext-noframework": "Detdiar sidj as för JavaScript-tests föörsen.",
"javascripttest-pagetext-unknownframework": "Ünbekäänd test-framework „$1“.",
+ "javascripttest-pagetext-unknownaction": "Ünbekäänd aktjuun „$1“.",
"javascripttest-pagetext-frameworks": "Schük ian faan jodiar test-frameworks ütj: $1",
"javascripttest-pagetext-skins": "Schük en brüker-skak ütj, am di test ütjtufeeren:",
"javascripttest-qunit-intro": "Luke efter bi [$1 test dokumentatjuun] üüb mediawiki.org",
- "javascripttest-qunit-heading": "JavaScript-QUnit-tester faan MediaWiki",
"tooltip-pt-userpage": "Din brükersidj",
"tooltip-pt-anonuserpage": "Brükersidj faan det IP-adres, faan huar ütj dü werkest",
- "tooltip-pt-mytalk": "Din diskusjuunssidj",
+ "tooltip-pt-mytalk": "Din diskuschuunssidj",
"tooltip-pt-anontalk": "Diskuschuun auer feranrangen faan detdiar IP-adres",
"tooltip-pt-preferences": "Min iinstelangen",
"tooltip-pt-watchlist": "Sidjen, diar dü uun't uug behual wel",
"tooltip-pt-mycontris": "List mä aanj bidracher",
"tooltip-pt-login": "Wan dü di uunmeldest, heest dü muar mögelkhaiden. Dü säärst det oober ei.",
"tooltip-pt-logout": "Ufmelde",
+ "tooltip-pt-createaccount": "Wees so gud an racht en brükerkonto iin an melde di uun. Dü säärst det oober ei.",
"tooltip-ca-talk": "Diskuschuun auer di artiikel",
"tooltip-ca-edit": "Sidj bewerke. Luke di det iarst ans uun, iar dü det seekerst.",
"tooltip-ca-addsection": "Nei kirew began",
@@ -2209,6 +2242,7 @@
"tooltip-feed-atom": "Atom-feed för detdiar sidj",
"tooltip-t-contributions": "List mä bidracher faan didiar brüker uunluke",
"tooltip-t-emailuser": "En e-mail tu didiar brüker schüür",
+ "tooltip-t-info": "Muar auer detdiar sidj",
"tooltip-t-upload": "Datein huuchschüür",
"tooltip-t-specialpages": "Auersicht auer aal a spezial-sidjen",
"tooltip-t-print": "Drükföörskau",
@@ -2271,7 +2305,6 @@
"pageinfo-robot-policy": "Faan bots indisiaret",
"pageinfo-robot-index": "Tuläät",
"pageinfo-robot-noindex": "Ei tuläät",
- "pageinfo-views": "Taal faan kliks üüb det sidj",
"pageinfo-watchers": "Taal faan brükern, diar det sidj uun't uug haa",
"pageinfo-few-watchers": "Maner üs {{PLURAL:$1|ään brüker|$1 brükern}}, diar det sidj uun't uug haa",
"pageinfo-redirects-name": "Taal faan widjerfeerangen tu detdiar sidj",
@@ -2720,7 +2753,6 @@
"exif-urgency-low": "Liach ($1)",
"exif-urgency-high": "Huuch ($1)",
"exif-urgency-other": "Faan a brüker fäästlaanj prioriteet ($1)",
- "watchlistall2": "aaltumaal",
"namespacesall": "aaltumaal",
"monthsall": "aaltumaal",
"confirmemail": "E-mail-adres gudkään",
@@ -2778,6 +2810,7 @@
"autosumm-replace": "Di tekst as ütjbütjet wurden mä \"$1\"",
"autoredircomment": "Sidj tu [[$1]] widjerfeerd",
"autosumm-new": "Det sidj as nei uunlaanj wurden: \"$1\"",
+ "autosumm-newblank": "En leesag sidj maaget",
"lag-warn-normal": "Feranrangen faan {{PLURAL:$1|at leetst sekund|a leetst $1 sekunden}} kön noch ei uunwiset wurd.",
"lag-warn-high": "Auer det huuch dootenbeenklääst kön a feranrangen faan {{PLURAL:$1|at leetst sekund|a leetst $1 sekunden}} noch ei uunwiset wurd.",
"watchlistedit-normal-title": "List mä sidjen, diar dü uun't uug behual wel, bewerke",
@@ -2806,8 +2839,9 @@
"watchlisttools-edit": "Normool bewerke",
"watchlisttools-raw": "Uun't listenformoot bewerke",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskuschuun]])",
- "unknown_extension_tag": "Ünbekäänd ''tag'' „$1“",
"duplicate-defaultsort": "'''Paase üüb:''' Di sortiarkai \"$2\" auerskraft di ual sortiarkai \"$1\"",
+ "duplicate-displaytitle": "<strong>Paase üüb:</strong> Di uunwiset tiitel \"$2\" auerskraft di ual tiitel \"$1\".",
+ "invalid-indicator-name": "<strong>Feeler:</strong> Det atribut <code>name</code> faan di sidjenstaatusindikaator mut ei leesag wees.",
"version": "Werjuun",
"version-extensions": "Instaliaret ütjwidjangen",
"version-skins": "Instaliaret brükerskaker",
@@ -2847,6 +2881,9 @@
"version-entrypoints": "URLs faan hüsdörsidjen",
"version-entrypoints-header-entrypoint": "Hüsdörsidj",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Instaliaret bibleteeken",
+ "version-libraries-library": "Bibleteek",
+ "version-libraries-version": "Werjuun",
"redirect": "Widjerfeerang faan en brüker, en sidj, en sidjenwerjuun of en datei.",
"redirect-legend": "Widjerfeerang üüb en sidjenwerjuun of datei.",
"redirect-summary": "Detdiar spezial-sidj feert widjer üüb en brükersidj, sidj, sidjenwerjuun of datei.\nAn det woort so brükt: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/file/Example.jpg]].",
@@ -2882,6 +2919,7 @@
"specialpages-group-wiki": "Dooten an werktjüch",
"specialpages-group-redirects": "Spezial-sidjen, diar widjer feer",
"specialpages-group-spam": "''Spam'' werktjüch",
+ "specialpages-group-developer": "Werktjüügen",
"blankpage": "Leesag sidj",
"intentionallyblankpage": "Det sidj as mä walem leesag. Hat woort för benchmarks brükt.",
"external_image_whitelist": " #Feranere detheer rä ei<pre>\n#Dialen faan reguleer ütjdrüker (tesken a tiakens //) kön oner iinden wurd.\n#Jo wurd do mä URLs faan ekstern bilen ferglikt.\n#Huar't auerianstemet, woort det bil uunwiset, ööders bluas en ferwis üüb det bil.\n#Räen mä en # bi a began san komentaaren.\n#Grat- an letjskriiwang woort ei onerskääst.\n\n#Skriiw dialen faan reguleer ütjdrüker auer detheer rä. Feranere detheer rä ei</pre>",
@@ -2894,12 +2932,54 @@
"tags-tag": "Kääntiaken-nööm",
"tags-display-header": "Nööm üüb feranrangslisten",
"tags-description-header": "Widjloftag beskriiwang",
+ "tags-source-header": "Kwel",
"tags-active-header": "Aktiif?",
"tags-hitcount-header": "Kääntiakent feranrangen",
+ "tags-actions-header": "Aktjuunen",
"tags-active-yes": "Ja",
"tags-active-no": "Naan",
+ "tags-source-extension": "Faan en ütjwidjang fäästlaanj",
+ "tags-source-manual": "Manuel faan brükern of bots iinracht",
+ "tags-source-none": "Woort ei muar brükt",
"tags-edit": "bewerke",
+ "tags-delete": "strik",
+ "tags-activate": "aktiwiare",
+ "tags-deactivate": "de-aktiwiare",
"tags-hitcount": "$1 {{PLURAL:$1|feranrang|feranrangen}}",
+ "tags-manage-no-permission": "Dü mutst nian feranrangsmarkiarangen bewerke.",
+ "tags-create-heading": "En nei markiarang iinracht",
+ "tags-create-explanation": "Normoolerwiis wurd nei markiarangen för't bewerkin faan brükern an bots iinracht.",
+ "tags-create-tag-name": "Markiarangsnööm:",
+ "tags-create-reason": "Grünj:",
+ "tags-create-submit": "Maage",
+ "tags-create-no-name": "Dü skel en markiarangsnööm uundu.",
+ "tags-create-invalid-chars": "Markiarangsnöömer mut nian komas (<code>,</code>) of swäärsstreger (<code>/</code>) haa.",
+ "tags-create-invalid-title-chars": "Markiarangsnöömer mut nian tiakens haa, diar uk uun sidjennöömer ei föörkem mut.",
+ "tags-create-already-exists": "Det markiarang \"$1\" jaft at al.",
+ "tags-create-warnings-above": "{{PLURAL:$2|Detdiar wäärnang as|Jodiar wäärnangen san}} apdaaget, üs det markiarang \"$1\" iinracht wurd skul:",
+ "tags-create-warnings-below": "Wel dü mä't iinrachten faan detdiar markiarang widjer maage?",
+ "tags-delete-title": "Markiarang strik",
+ "tags-delete-explanation-initial": "Dü beest diarbi, det markiarang \"$1\" uun't dootenbeenk tu striken.",
+ "tags-delete-explanation-in-use": "Hat woort faan {{PLURAL:$2|$2 werjuun of logbuk-iindrach|aal $2 werjuunen an/of logbuk-iindracher}} strgen, huar't uugenblakelk noch iindraanj as.",
+ "tags-delete-explanation-warning": "Detdiar aktjuun könst dü <strong>ei turagdrei</strong> an <strong>koon ei weder turaghaalet wurd</strong>, uk ei faan dootenbeenk-administartooren. Wees seeker, dat dü detdiar markiarang würelk strik wel.",
+ "tags-delete-explanation-active": "<strong>Det markiarang \"$1\" as noch aktiif an woort uk widjerhen iinsaat.</strong> Wan dü det ei wel, gung tu det(jo) steed(en), huar det markiarang iinracht wurden as, an strik det diar.",
+ "tags-delete-reason": "Grünj:",
+ "tags-delete-submit": "Detdiar markiarang för iiwag strik",
+ "tags-delete-not-allowed": "Markiarangen, diar faan en ütjwidjang fäästlaanj wurden san, kön ei stregen wurd, wan det diar ei mögelk maaget wurden as.",
+ "tags-delete-not-found": "Det markiarang \"$1\" jaft at ei.",
+ "tags-delete-too-many-uses": "Det markiarang \"$1\" as mä muar üs $2 {{PLURAL:$2|werjuun|werjuunen}} ferbünjen an koon ei stregen wurd.",
+ "tags-delete-warnings-after-delete": "Det markiarang \"$1\" as stregen wurden, man diar {{PLURAL:$2|as ian wäärnang|san wäärnangen}} aptreeden:",
+ "tags-activate-title": "Markiarang aktiwiare",
+ "tags-activate-question": "Dü beest diarbi, det markiarang \"$1\" tu aktiwiarin.",
+ "tags-activate-reason": "Grünj:",
+ "tags-activate-not-allowed": "Dü könst det markiarang \"$1\" ei aktiwiare.",
+ "tags-activate-not-found": "Det markiarang \"$1\" jaft at ei.",
+ "tags-activate-submit": "Aktiwiare",
+ "tags-deactivate-title": "Markiarang de-aktiwiare",
+ "tags-deactivate-question": "Dü beest diarbi, det markiarang \"$1\" tu de-aktiwiarin.",
+ "tags-deactivate-reason": "Grünj:",
+ "tags-deactivate-not-allowed": "Dü könst det markiarang \"$1\" ei de-aktiwiare.",
+ "tags-deactivate-submit": "De-aktiwiare",
"comparepages": "Sidjen ferglik",
"compare-page1": "Sidj 1",
"compare-page2": "Sidj 2",
@@ -2911,8 +2991,8 @@
"compare-revision-not-exists": "Son werjuun as diar ei.",
"dberr-problems": "Dää mi iarag! Det sidj hää technisk komer.",
"dberr-again": "Teew en uugenblak an ferschük det noch ans.",
- "dberr-info": "(Koon ei mä a dootenbeenk-server ferbinj: $1)",
- "dberr-info-hidden": "(Ferbinjang mä a dootenbeenk-server as skiaf gingen)",
+ "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.",
@@ -2953,6 +3033,14 @@
"revdelete-uname-unhid": "brükernööm weder tu sen",
"revdelete-restricted": "mögelkhaiden för administratooren wechnimen",
"revdelete-unrestricted": "mögelkhaiden för administratooren ütjwidjet",
+ "logentry-block-block": "$1 {{GENDER:$2|hää}} {{GENDER:$4|$3}} speret mä en sperdüür faan $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|hää det sper}} för {{GENDER:$4|$3}} apheewen.",
+ "logentry-block-reblock": "$1 {{GENDER:$2|hää}} det sper för {{GENDER:$4|$3}} feranert mä en sperdüür faan $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|hää}} {{GENDER:$4|$3}} speret mä en sperdüür faan $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|hää}} det sper för {{GENDER:$4|$3}} feranert mä en sperdüür faan $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|hää}} $3 importiaret an en datei huuchschüürd",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|hää}} $3 faan en ööder Wiki importiaret",
+ "logentry-merge-merge": "$1 {{GENDER:$2|hää}} $3 mä det sidj „$4“ (werjuunen bit tu di $5) tuupfeerd",
"logentry-move-move": "$1 {{GENDER:$2}} hää det sidj $3 efter $4 fersköwen.",
"logentry-move-move-noredirect": "$1 {{GENDER:$2}} hää det sidj $3 efter $4 saner widjerfeerang fersköwen.",
"logentry-move-move_redir": "$1 {{GENDER:$2}} hää det sidj $3 efter $4 fersköwen an diarbi en widjerfeerang auerskrewen.",
@@ -2967,20 +3055,39 @@
"logentry-rights-rights": "$1 {{GENDER:$2|hää}} det brükerskööl för $3 faan $4 tu $5 feranert.",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|hää}} det brükerskööl för $3 feranert.",
"logentry-rights-autopromote": "$1 as automaatisk faan $4 tu $5 {{GENDER:$2|tuwiset}} wurden.",
+ "logentry-upload-upload": "$1 {{GENDER:$2|hää}} $3 huuchschüürd",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|hää}} en nei werjuun faan $3 huuchschüürd",
+ "logentry-upload-revert": "$1 {{GENDER:$2|hää}} $3 huuchschüürd",
+ "log-name-managetags": "Markiarangs-logbuk",
+ "log-description-managetags": "Üüb detdiar sidj stun apgoowen mä [[Special:Tags|markiarangen]]. Uun det logbuk stun bluas aktjuunen faan en administaraator; diar kön oober uk feranrangen faan't Wiki-software föörnimen wurd, diar ei uun detheer logbuk stun.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|hää}} det markiarang \"$4\" iinracht",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|hää}} det markiarang „$4“ stregen (faan {{PLURAL:$5|ian werjuun of ään logbuk-iindrach|$5 werjuunen an/of logbuk-iindracher}} wechnimen).",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|hää}} det markiarang \"$4\" för't bewerkin faan brükern of bots iinracht.",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|hää}} det markiarang \"$4\" för't bewerkin faan brükern of bots de-aktiwiaret.",
"rightsnone": "(-)",
+ "revdelete-summary": "tuhuupefootings-komäntoor",
+ "feedback-adding": "Komentaar woort tu det sidj skrewen ...",
+ "feedback-back": "Turag",
+ "feedback-bugcheck": "Gud! Luke noch ans efter, of det ei ferlicht en [$1 bekäänden feeler] as.",
+ "feedback-bugnew": "Haa ik efterluket. Nei feeler melde.",
"feedback-bugornote": "Wan dü en technisk probleem beskriiw wel, wees so gud an skriiw [$1 am di feeler].\nÖöders könst dü uk det formulaar oner brük. Dan komentaar woort tuup mä dan brükernööm an det werjuun faan dan browser üüb det sidj „[$3 $2]“ skrewen.",
- "feedback-subject": "Teemo:",
- "feedback-message": "Mädialang:",
"feedback-cancel": "Ufbreeg",
- "feedback-submit": "Komentaar ufsjüür",
- "feedback-adding": "Komentaar woort tu det sidj skrewen ...",
+ "feedback-close": "Klaar",
+ "feedback-external-bug-report-button": "En technisk apgoow iinschüür",
+ "feedback-dialog-title": "Komentaar ufsjüür",
+ "feedback-dialog-intro": "Dü könst det ianfach formulaar diar oner för dan komentaar brük. Dan komentaar komt tuup mä dan brükernööm tu det sidj „$1“.",
+ "feedback-error-title": "Diar as wat skiaf gingen",
"feedback-error1": "Feeler: Ünbekäänd API-bööd",
"feedback-error2": "Feeler: Bewerkin as skiaf gingen.",
"feedback-error3": "Feeler: Nian API-oonswaar",
+ "feedback-message": "Mädialang:",
+ "feedback-subject": "Teemo:",
+ "feedback-submit": "Ufschüür",
+ "feedback-terms": "Ik haa det begreben, dat uun min brüker-informatjuunen uk informatjuunen auer man browser an min bedrifssüsteem stun an dat jo tuup mä man komentaar öfentelk diald wurd.",
+ "feedback-termsofuse": "Ik steme tu, dat man komentaar efter a brüker-reegeln uunwiset woort.",
"feedback-thanks": "Föl soonk. Dan komentaar as üüb det sidj „[$2 $1]“ skrewen wurden.",
- "feedback-close": "Klaar",
- "feedback-bugcheck": "Gud! Luke noch ans efter, of det ei ferlicht en [$1 bekäänden feeler] as.",
- "feedback-bugnew": "Haa ik efterluket. Nei feeler melde.",
+ "feedback-thanks-title": "Föl soonk!",
+ "feedback-useragent": "Brüker-agent:",
"searchsuggest-search": "Schük",
"searchsuggest-containing": "diar banen as ...",
"api-error-badaccess-groups": "Dü mutst nian datein tu detdiar Wiki huuchschüür.",
@@ -3016,6 +3123,13 @@
"api-error-stashfailed": "Intern feeler: Di server küd nian tidjwiis datei seekre.",
"api-error-publishfailed": "Intern feeler: Di server küd det tidjwiis datei ei widjer schüür.",
"api-error-stasherror": "Bi't huuchschüüren faan detdiar datei as wat skiaf gingen.",
+ "api-error-stashedfilenotfound": "Det datei, wat al ans seekert wurden as, küd bi't huuchloosin ei fünjen wurd.",
+ "api-error-stashpathinvalid": "Det steed, huar det seekert datei fünjen wurd skul, jaft at ei.",
+ "api-error-stashfilestorage": "Bi't seekrin faan detdiar datei uun a spiiker as wat skiaf gingen.",
+ "api-error-stashzerolength": "Di server küd det datei ei seekre, auer hat man bluas nul bytes grat as.",
+ "api-error-stashnotloggedin": "Dü skel uunmeldet wees, wan dü datein uun a spiiker seekre wel.",
+ "api-error-stashwrongowner": "Det datei, huar dü uun a spiiker üüb tugrip wulst, hiart di ei.",
+ "api-error-stashnosuchfilekey": "Di datei-kai, huar dü uun a spiiker üüb tugrip wulst, as ei diar.",
"api-error-timeout": "Di server hää ei rochttidjag swaaret (time-out).",
"api-error-unclassified": "Diar as irgentwat skiaf gingen.",
"api-error-unknown-code": "Ünbekäänd feeler: „$1“",
@@ -3060,6 +3174,8 @@
"expand_templates_generate_xml": "XML-parser-buum uunwise",
"expand_templates_generate_rawhtml": "Rä HTML uunwise",
"expand_templates_preview": "Föörskau",
+ "expand_templates_preview_fail_html": "<em>Auer {{SITENAME}} rä HTML aktiwiaret hää an session-dooten wech san, as det föörskau ütj seekerhaids-grünjer ferbürgen wurden.</em>\n\n<strong>Wees so gud an ferschük det noch ans.</strong>\nWan det do uk noch ei gongt, [[Special:UserLogout|melde di uf]] an weder uun.",
+ "expand_templates_preview_fail_html_anon": "<em>Auer {{SITENAME}} rä HTML aktiwiaret hää an dü ein uunmeldet beest, as det föörskau ütj seekerhaids-grünjer ferbürgen wurden.</em>\n\n<strong>Wees so gud an [[Special:UserLogin|melde di uun]], an ferschük det noch ans.</strong>",
"pagelanguage": "Ütjwool faan sidjenspriaken",
"pagelang-name": "Sidj",
"pagelang-language": "Spriak",
@@ -3069,5 +3185,37 @@
"action-pagelang": "det sidjenspriak tu feranrin",
"log-name-pagelang": "Logbuk för spriak-feranrangen",
"log-description-pagelang": "Det as en logbuk för sidjenspriak-feranrangen",
- "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert."
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert.",
+ "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar skaker. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst jodiar räen uun det datei <code>LocalSettings.php</code> iinsaat, am aal a instaliaret skaker tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
+ "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiwiaret)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ufsteld''')",
+ "mediastatistics": "Statistik faan meedien",
+ "mediastatistics-summary": "Statistiken faan huuchschüürd dateitypen. Diar woort bluas det leetst werjuun uunwiset. Ual of stregen werjuunen san diar ei bi.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|Ian byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-Typ",
+ "mediastatistics-table-extensions": "Mögelk ütjwidjangen",
+ "mediastatistics-table-count": "Taal faan datein",
+ "mediastatistics-table-totalbytes": "Grate tuup",
+ "mediastatistics-header-unknown": "Ünbekäänd",
+ "mediastatistics-header-bitmap": "Bitmap-bilen",
+ "mediastatistics-header-drawing": "Tiaknangen (vektor-bilen)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Videos",
+ "mediastatistics-header-multimedia": "Rik meedien",
+ "mediastatistics-header-office": "Office",
+ "mediastatistics-header-text": "Tekst",
+ "mediastatistics-header-executable": "Datein tu ütjfeeren",
+ "mediastatistics-header-archive": "Komprimiaret formaaten",
+ "json-warn-trailing-comma": "{{PLURAL:$1|En bihinget koma as|$1 bihinget komas san}} faan JSON wechnimen wurden.",
+ "json-error-unknown": "Diar ging wat skiaf mä't JSON. Feeler: $1",
+ "json-error-depth": "Det staabeljipde as tu grat.",
+ "json-error-state-mismatch": "Ferkiard JSON",
+ "json-error-ctrl-char": "Schüürtiakenfeeler, ferlich ferkiard kodiaret",
+ "json-error-syntax": "Süntaksfeeler",
+ "json-error-utf8": "Ferkiard UTF-8-tiakens, ferlicht ferkiard kodiaret.",
+ "json-error-recursion": "Ian of muar rekursiif referensen uun a wäärs tu kodiarin.",
+ "json-error-inf-or-nan": "Ään of muar NAN of INF wäärser uun a wäärs tu kodiarin.",
+ "json-error-unsupported-type": "Diar stäänt en wäärs faan en typ, diar ei kodiaret wurd koon.",
+ "headline-anchor-title": "Ferwisang tu detdiar kirew"
}
diff --git a/languages/i18n/fur.json b/languages/i18n/fur.json
index 18b5c72b..e4f8d1d4 100644
--- a/languages/i18n/fur.json
+++ b/languages/i18n/fur.json
@@ -536,7 +536,6 @@
"searchrelated": "leâts",
"searchall": "ducj",
"showingresults": "Ca sot {{PLURAL:$1|al è fin a '''1''' risultât|a son fin a '''$1''' risultâts}} scomençant dal numar '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Risultât '''$1''' su '''$3'''|Risultâts '''$1 - $2''' su '''$3'''}} par '''$4'''",
"search-nonefound": "Nissun risultât par cheste ricercje.",
"powersearch-legend": "Ricercje avanzade",
"powersearch-ns": "Cîr tai spazis dai nons:",
@@ -744,7 +743,6 @@
"statistics": "Statistichis",
"statistics-header-pages": "Statistichis su lis pagjinis",
"statistics-header-edits": "Statistichis sui cambiaments",
- "statistics-header-views": "Statistichis su lis viodudis",
"statistics-header-users": "Statistichis dai utents",
"statistics-header-hooks": "Altris statistichis",
"statistics-articles": "Pagjinis di contignûts",
@@ -753,12 +751,9 @@
"statistics-files": "Files cjamâts sù",
"statistics-edits": "Cambiaments scomençant de instalazion di {{SITENAME}}",
"statistics-edits-average": "Medie dai cambiaments par ogni pagjine",
- "statistics-views-total": "Viodudis totâls",
- "statistics-views-peredit": "Viodudis par cambiament",
"statistics-users": "[[Special:ListUsers|Utents]] regjistrâts",
"statistics-users-active": "Utents atîfs",
"statistics-users-active-desc": "Utents che a àn fat une azion {{PLURAL:$1|intal ultin dì|intai ultins $1 dîs}}",
- "statistics-mostpopular": "Pagjinis plui visitadis",
"doubleredirects": "Re-indreçaments doplis",
"brokenredirects": "Re-indreçaments che no funzionin",
"brokenredirectstext": "I re-indreçaments ca sot a mandin a pagjinis che no esistin:",
@@ -783,7 +778,6 @@
"uncategorizedtemplates": "Modei cence une categorie",
"unusedcategories": "Categoriis no dopradis",
"unusedimages": "Files no doprâts",
- "popularpages": "Pagjinis popolârs",
"wantedcategories": "Categoriis desideradis",
"wantedpages": "Pagjinis desideradis",
"wantedfiles": "Files desiderâts",
@@ -812,7 +806,6 @@
"pager-older-n": "{{PLURAL:$1|1 plui vieri|$1 plui vieris}}",
"booksources": "Fonts librariis",
"booksources-search-legend": "Ricercje di fonts libraris",
- "booksources-go": "Va",
"specialloguserlabel": "Utent:",
"speciallogtitlelabel": "Titul:",
"log": "Regjistris",
@@ -885,7 +878,7 @@
"wlheader-enotif": "Notifiche par pueste eletroniche ativade.",
"wlheader-showupdated": "Lis pagjinis gambiadis de ultime volte che tu lis âs cjaladis a son mostradis in '''gruessut'''",
"wlnote": "Ca sot {{PLURAL:$1|al è il cambiament plui recent|a son i '''$1''' cambiaments plui recents}} {{PLURAL:$2|inte ultime ore|intes '''$2''' oris passadis}}.",
- "wlshowlast": "Mostre ultimis $1 oris $2 zornadis $3",
+ "wlshowlast": "Mostre ultimis $1 oris $2 zornadis",
"watchlist-options": "Opzions pe liste dai tignûts di voli",
"watching": "Daûr a zontâ aes pagjinis tignudis di voli...",
"unwatching": "Daûr a gjavâ des pagjinis tignudis di voli...",
@@ -1167,7 +1160,6 @@
"exif-compression-1": "Cence compression",
"exif-unknowndate": "Date no cognossude",
"exif-orientation-1": "Normâl",
- "watchlistall2": "dutis",
"namespacesall": "ducj",
"monthsall": "ducj",
"confirmemail": "Conferme direzione di pueste",
@@ -1208,7 +1200,7 @@
"duplicate-defaultsort": "'''Avîs:''' La clâf predeterminade par l'ordenament \"$2\" invalide la clâf predeterminade precedente \"$1\".",
"version": "Version",
"version-variables": "Variabilis",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-license": "Licence",
"version-software-version": "Version",
"fileduplicatesearch-filename": "Non dal file:",
diff --git a/languages/i18n/fy.json b/languages/i18n/fy.json
index 9c23ae86..abcda04c 100644
--- a/languages/i18n/fy.json
+++ b/languages/i18n/fy.json
@@ -11,7 +11,9 @@
"Snakesteuben",
"Urhixidur",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Robin0van0der0vliet",
+ "Macofe"
]
},
"tog-underline": "Keppelings ûnderstreekje:",
@@ -38,7 +40,7 @@
"tog-shownumberswatching": "It tal brûkers sjen litte dat dizze side folget",
"tog-oldsig": "Aktuele sinjatuerprintallyk:",
"tog-fancysig": "Sinjatuer as wikitekst behannelje (sûnder automatyske keppeling)",
- "tog-uselivepreview": "\"live proefbyld\" brûke (JavaScript nedich - eksperimenteel)",
+ "tog-uselivepreview": "\"Live proefbyld\" brûke",
"tog-forceeditsummary": "Warskôgje at ik de gearfetting leech lit.",
"tog-watchlisthideown": "Eigen bewurkings op myn folchlist ferbergje",
"tog-watchlisthidebots": "Lit gjin bot wizigings sjen yn de folchlist",
@@ -123,7 +125,7 @@
"category_header": "Siden yn de kategory \"$1\"",
"subcategories": "Subkategoryen",
"category-media-header": "Media yn de kategory \"$1\"",
- "category-empty": "''Yn dizze kategory binne gjin siden of triemmen opnaam.''",
+ "category-empty": "<em>Yn dizze kategory binne gjin siden of triemmen opnaam.</em>",
"hidden-categories": "Ferburgen {{PLURAL:$1|kategory|kategoryen}}",
"hidden-category-category": "Ferburgen kategoryen",
"category-subcat-count": "{{PLURAL:$2|Dizze kategory hat allinne de folgjende ûnderkategory.|Dizze kategory hat de folgjende {{PLURAL:$1|ûnderkategory|$1 ûnderkategoryen}}, fan in totaal fan $2.}}",
@@ -135,10 +137,11 @@
"listingcontinuesabbrev": "(ferfolch)",
"index-category": "Yndeksearre siden",
"noindex-category": "Net-yndeksearre siden",
- "about": "Ynfo",
+ "categoryviewer-pagedlinks": "($1) ($2)",
+ "about": "Oer",
"article": "Ynhâld side",
"newwindow": "(nij finster)",
- "cancel": "Ofbrekke",
+ "cancel": "Annulearje",
"moredotdotdot": "Mear...",
"mypage": "Myn side",
"mytalk": "Myn oerlis",
@@ -154,7 +157,8 @@
"faqpage": "Project:Faak stelde fragen",
"namespaces": "Nammeromten",
"variants": "Farianten",
- "errorpagetitle": "Fout",
+ "navigation-heading": "Navigaasjemenu",
+ "errorpagetitle": "Flater",
"returnto": "Werom nei \"$1\".",
"tagline": "Ut {{SITENAME}}",
"help": "Help",
@@ -169,8 +173,9 @@
"permalink": "Fêste keppeling",
"print": "Ofdrukke",
"view": "Lêze",
- "edit": "Feroarje",
+ "edit": "Bewurkje",
"create": "Oanmeitsje",
+ "create-local": "Lokale beskriuwing tafoegje",
"editthispage": "Side bewurkje",
"create-this-page": "Dizze side oanmeitsje",
"delete": "Wiskje",
@@ -185,7 +190,7 @@
"talkpage": "Sideoerlis",
"talkpagelinktext": "Oerlis",
"specialpage": "Bysûndere side",
- "personaltools": "Persoanlike ynstellings",
+ "personaltools": "Persoanlike ynstellingen",
"articlepage": "Side lêze",
"talk": "Oerlis",
"views": "Aspekten/aksjes",
@@ -208,7 +213,8 @@
"jumptonavigation": "navigaasje",
"jumptosearch": "sykje",
"view-pool-error": "Ekskuseare, de tsjinners hawwe it op it stuit te drok.\nTefolle meidoggers probearje dizze side te besjen.\nWachtsje efkes foardatsto op 'e nij tagong ta dizze side probearrest te krijen.\n\n$1",
- "aboutsite": "Oer de {{SITENAME}}",
+ "pool-errorunknown": "Unbekende flater",
+ "aboutsite": "Oer {{SITENAME}}",
"aboutpage": "Project:Ynfo",
"copyright": "Ynhâld is beskikber ûnder de $1.",
"copyrightpage": "{{ns:project}}:Auteursrjocht",
@@ -229,9 +235,13 @@
"badaccess-groups": "De frege hanneling is foarbehâlden oan brûkers yn {{PLURAL:$2|'e groep|ien fan de groepen}}: $1.",
"versionrequired": "Ferzje $1 fan MediaWiki is eask",
"versionrequiredtext": "Ferzje $1 fan MediaWiki is eask om dizze side te brûken. Mear ynfo is beskikber op 'e side [[Special:Version|softwareferzje]].",
- "ok": "Goed",
+ "ok": "OK",
+ "pagetitle": "$1 - {{SITENAME}}",
+ "pagetitle-view-mainpage": "{{SITENAME}}",
+ "backlinksubtitle": "← $1",
"retrievedfrom": "Untfongen fan \"$1\"",
"youhavenewmessages": "Jo hawwe $1 ($2).",
+ "newmessageslinkplural": "{{PLURAL:$1|in nij berjocht|999=nije berjochten}}",
"youhavenewmessagesmulti": "Jo hawwe nije berjochten op $1",
"editsection": "bewurkje",
"editold": "bewurkje",
@@ -242,16 +252,20 @@
"toc": "Ynhâld",
"showtoc": "sjen litte",
"hidetoc": "net sjen litte",
+ "confirmable-yes": "Ja",
+ "confirmable-no": "Nee",
"thisisdeleted": "\"$1\" lêze of werombringe?",
"viewdeleted": "$1 sjen litte?",
"restorelink": "$1 wiske {{PLURAL:$1|ferzje|ferzjes}}",
"feedlinks": "Feed:",
"feed-invalid": "Feedtype wurdt net stipe.",
"feed-unavailable": "Syndikaasjefeeds binne net beskikber",
- "site-rss-feed": "$1 RSS Feed",
- "site-atom-feed": "$1 Atom-Feed",
- "page-rss-feed": "\"$1\" RSS Feed",
- "page-atom-feed": "\"$1\" Atom Feed",
+ "site-rss-feed": "$1 RSS-feed",
+ "site-atom-feed": "$1 Atom-feed",
+ "page-rss-feed": "\"$1\" RSS-feed",
+ "page-atom-feed": "\"$1\" Atom-feed",
+ "feed-atom": "Atom",
+ "feed-rss": "RSS",
"red-link-title": "$1 (de side bestiet net)",
"nstab-main": "Side",
"nstab-user": "Meidogger",
@@ -266,10 +280,12 @@
"nosuchaction": "Unbekende aksje.",
"nosuchactiontext": "De opdracht yn de URL is ûnjildich.\nMooglik hasto in typefout makke yn de URL of in ferkearde keppeling folge.\nIt soe likegoed in programmatuerflater fan {{SITENAME}} wêze kinne.",
"nosuchspecialpage": "Unbekende side",
- "nospecialpagetext": "Jo hawwe in Wiki-side opfrege dy't net bekend is by it Wiki-programma.",
- "error": "Fout",
+ "nospecialpagetext": "<strong>Jo hawwe in Wiki-side opfrege dy't net bekend is by it Wiki-programma.</strong>",
+ "error": "Flater",
"databaseerror": "Databankfout",
- "laggedslavemode": "Warskôging: Mûglik binne resinte bewurkings noch net trochfierd.",
+ "databaseerror-function": "Funksje: $1",
+ "databaseerror-error": "Flater: $1",
+ "laggedslavemode": "<strong>Warskôging:</strong> Mûglik binne resinte bewurkings noch net trochfierd.",
"readonly": "Databank is 'Net-skriuwe'.",
"enterlockreason": "Skriuw wêrom de databank 'net-skriuwe' makke is, en hoenear't men wêr nei alle gedachten wer skriuwe kin.",
"readonlytext": "De {{SITENAME}} databank is ôfsletten foar nije siden en oare wizigings,\nnei alle gedachten is it foar ûnderhâld, en kinne jo der letter gewoan wer brûk fan meitsje.\nDe behearder hat dizze útlis jûn:\n<p>$1</p>",
@@ -285,7 +301,7 @@
"directorycreateerror": "Map \"$1\" koe net oanmakke wurde.",
"filenotfound": "Koe triem \"$1\" net fine.",
"unexpected": "Hommelse wearde: \"$1\"=\"$2\".",
- "formerror": "Fout: koe formulier net oerlizze",
+ "formerror": "Flater: Koe formulier net oerlizze",
"badarticleerror": "Dat kin op dizze side net dien wurden.",
"cannotdelete": "Koe de oantsjutte side of it oantsjutte ôfbyld \"$1\" net fuorthelje. (Faaks hat in oar dat al dien.)",
"badtitle": "Misse titel",
@@ -299,7 +315,7 @@
"protectedpagetext": "Dizze side is befeilige. Bewurkjen is net mooglik.",
"viewsourcetext": "Jo kinne de boarnetekst fan dizze side besjen en kopiearje:",
"protectedinterface": "Dizze side jout systeemteksten fan 'e software en is befeilige tsjin misbrûk. Asto oersettingen foar alle wiki's tafoegje of bewurkje wolst, kinsto [//translatewiki.net/ translatewiki.net] brûke.",
- "editinginterface": "'''Tink derom;''' Jo bewurkje in side dy't brûkt wurdt foar systeemteksten foar de software. Bewurkings op dizze side beynfloedzje de brûkersynterface fan elkenien. Asto wol oersettingen tafoegje of bewurkje wolst kinsto [//translatewiki.net/wiki/Main_Page?setlang=fy translatewiki.net] brûke, it oersetprojekt foar MediaWiki.",
+ "editinginterface": "<strong>Warskôging:</strong> Jo bewurkje in side dy't brûkt wurdt foar systeemteksten foar de software.\nBewurkings op dizze side beynfloedzje de brûkersynterface fan elkenien.",
"cascadeprotected": "Dizze side is skoattele tsjin wizigjen, om't der in ûnderdiel útmakket fan de neikommende {{PLURAL:$1|side|siden}}, dy't skoattele {{PLURAL:$1|is|binne}} mei de \"ûnderlizzende siden\" opsje ynskeakele: $2",
"namespaceprotected": "Jo hawwe gjin rjochten om siden yn'e nammerûmte '''$1''' te bewurkjen.",
"ns-specialprotected": "Siden yn'e nammerûmte {{ns:special}} kinne net bewurke wurde.",
@@ -307,12 +323,13 @@
"virus-badscanner": "Minne konfiguraasje: ûnbekende virusscanner: ''$1''",
"virus-scanfailed": "scannen is mislearre (koade $1)",
"virus-unknownscanner": "ûnbekend antivirus:",
- "logouttext": "'''Jo binne no ôfmeld.'''\n\nGuon siden kinne noch foar it ljocht komme, krekt as wiesto noch oanmeld. Asto de cache fan dyn webblêder leechhellest feroaret dat wer.",
- "yourname": "Jo meidochnamme:",
- "userlogin-yourname": "Meidoggersnamme",
+ "logouttext": "<strong>Jo binne no ôfmeld.</strong>\n\nGuon siden kinne noch foar it ljocht komme, krekt as wiesto noch oanmeld. Asto de cache fan dyn webblêder leechhellest feroaret dat wer.",
+ "welcomeuser": "Wolkom, $1!",
+ "yourname": "Brûkersnamme:",
+ "userlogin-yourname": "Brûkersnamme",
"userlogin-yourname-ph": "Jou dyn brûkersnamme",
"createacct-another-username-ph": "Jou dyn brûkersnamme",
- "yourpassword": "Jo wachtwurd",
+ "yourpassword": "Wachtwurd:",
"userlogin-yourpassword": "Wachtwurd",
"userlogin-yourpassword-ph": "Jou dyn wachtwurd",
"createacct-yourpassword-ph": "Jou dyn wachtwurd",
@@ -336,7 +353,7 @@
"userlogin-joinproject": "Meidwaan {{SITENAME}}",
"nologin": "Noch net oanmelden as meidogger? $1.",
"nologinlink": "Meitsje in brûker oan",
- "createaccount": "Nije ynstellings oanmeitsje",
+ "createaccount": "Registrearje",
"gotaccount": "Hawwe jo jo al as meidogger oanmelde? '''$1'''.",
"gotaccountlink": "Oanmelde",
"userlogin-resetlink": "Ynlochdata fergetten?",
@@ -365,17 +382,18 @@
"createaccounterror": "Koe akkount net meitsje: $1",
"nocookiesnew": "De brûker is oanmakke mar net oanmeld. {{SITENAME}} brûkt cookies foar it oanmelden fan brûkers. Skeakelje dy yn en meld jo dan oan mei jo nije brûkersnamme en wachtwurd.",
"nocookieslogin": "{{SITENAME}} brûkt cookies foar it oanmelden fan brûkers. Jo hawwe cookies útskeakele. Skeakelje dy opsje oan en besykje it nochris.",
+ "nocookiesforlogin": "{{int:nocookieslogin}}",
"noname": "Jo moatte in meidognamme opjaan.",
"loginsuccesstitle": "Oanmelden slagge.",
- "loginsuccess": "'''Jo binne no oanmelden op de {{SITENAME}} as: \"$1.\"'''",
+ "loginsuccess": "<strong>Jo binne no oanmelden op de {{SITENAME}} as: \"$1.\"</strong>",
"nosuchuser": "Der is gjin meidogger \"$1\".\nKontrolearje de stavering, of [[Special:UserLogin/signup|meitsje in nije meidogger oan]].",
"nosuchusershort": "Der is gjin meidogger mei de namme \"$1\". It is goed skreaun?",
"nouserspecified": "Jo moatte in brûkersnamme opjaan.",
"wrongpassword": "Meidochnamme en wachtwurd hearre net by elkoar. Besykje op 'e nij, of fier it wachtwurd twa kear yn en meitsje nije meidoggersynstellings.",
"wrongpasswordempty": "It opjûne wachtwurd wie leech. Besykje it nochris.",
- "passwordtooshort": "Jo wachtwurd is te koart.\nIt moat op syn minst {{PLURAL:$1|1 teken|$1 tekens}} lang wêze.",
+ "passwordtooshort": "Wachtwurden moatte op syn minst {{PLURAL:$1|1 teken|$1 tekens}} lang wêze.",
"password-name-match": "Dyn wachtwurd mei net itselde as dyn meidoggersnamme wêze.",
- "mailmypassword": "Stjoer my in nij wachtwurd.",
+ "mailmypassword": "E-mail my in nij wachtwurd.",
"passwordremindertitle": "Nij wachtwurd foar de {{SITENAME}}",
"passwordremindertext": "Immen (nei alle gedachten jo, fan ynternetadres $1) had in nij wachtwurd\nfoar {{SITENAME}} ($4) oanfrege. Der is in tydlik wachtwurd foar meidogger\n\"$2\" makke en ynstelt as \"$3\". As dat jo bedoeling wie, melde jo jo dan\nno oan en kies in nij wachtwurd. Dyn tydlik wachtwurd komt yn {{PLURAL:$5|ien dei|$5 dagen}} te ferfallen.\nDer is in tydlik wachtwurd oanmakke foar brûker \"$2\": \"$3\".\n\nAs immen oars as jo dit fersyk dien hat of at it wachtwurd jo tuskentiidsk wer yn 't sin kommen is en\njo it net langer feroarje wolle, dan kinne jo dit berjocht ferjitte en\nfierdergean mei it brûken fan jo âlde wachtwurd.",
"noemail": "Der is gjin e-postadres foar meidogger \"$1\".",
@@ -383,7 +401,7 @@
"blocked-mailpassword": "Jo IP-adres is blokkearre foar it meitsjen fan feroarings. Om misbrûk tefoaren te kommen is it net mûglik in oar wachtwurd oan te freegjen.",
"eauthentsent": "Foar befêstiging is jo in netpostberjocht tastjoerd op it adres dat jo ynsteld hawwe. Der wurdt gjin oare netpost stjoerd, oant jo it adres befêstigje sa't it yn it netpostberjocht stiet.",
"throttled-mailpassword": "Yn {{PLURAL:$1|de lêste oere|de lêste $1 oeren}} is der al in wachtwurdwink ferstjoerd.\nOm misbrûk tefoaren te kommen wurdt der mar ien wachtwurdwink yn 'e {{PLURAL:$1|oere|$1 oeren}} ferstjoerd.",
- "mailerror": "Fout by it ferstjoeren fan e-mail: $1",
+ "mailerror": "Flater by it ferstjoeren fan e-mail: $1",
"acct_creation_throttle_hit": "Jo hawwe al {{PLURAL:$1|1 meidochnamme|$1 meidochnammen}} oanmakke. Jo kinne net mear oanmeitsje.",
"emailauthenticated": "Jo netpostadres waard befêstige op $2 om $3.",
"emailnotauthenticated": "Jo netpostadres is <strong>noch net befêstige</strong>. Jo kinne oare brûkers gjin post stjoere, en foar de neikommende opsjes wurdt jo gjin post stjoerd.",
@@ -391,11 +409,15 @@
"emailconfirmlink": "Befêstigje jo netpostadres.",
"invalidemailaddress": "It e-mailadres is net akseptearre om't it in ûnjildige opmaak hat.\nJou beleaven in jildich e-mailadres op of lit it fjild leech.",
"accountcreated": "Brûker oanmakke",
- "accountcreatedtext": "De brûker $1 is oanmakke.",
+ "accountcreatedtext": "De brûkersaccount foar [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|oerlis]]) is oanmakke.",
"createaccount-title": "Brûkers registrearje foar {{SITENAME}}",
"createaccount-text": "Immen hat in brûker op {{SITENAME}} ($4) oanmakke mei de namme \"$2\" en jo e-mailadres. It wachtwurd foar \"$2\" is \"$3\". Meld jo oan en feroarje jo wachtwurd.\n\nNegearje it berjocht as dizze brûker sûnder jo meiwitten oanmakke is.",
"login-throttled": "Jo hawwe koartlyn te faak besocht oan te melden mei in ûnkrekt wachtwurd.\nJo moatte efkes wachtsje foar't jo it op'e nij besykje kinne.",
"loginlanguagelabel": "Taal: $1",
+ "pt-login": "Oanmelde",
+ "pt-login-button": "Oanmelde",
+ "pt-createaccount": "Registrearje",
+ "pt-userlogout": "Ofmelde",
"changepassword": "Wachtwurd feroarje",
"resetpass_announce": "Jo binne oanmeld mei in tydlike koade dy't jo per e-mail tastjoerd is. Fier in nij wachtwurd yn om it oanmelden ôf te meitsjen.",
"resetpass_header": "Wachtwurd feroarje",
@@ -403,21 +425,22 @@
"newpassword": "Nij wachtwurd",
"retypenew": "Nij wachtwurd (nochris)",
"resetpass_submit": "Wachtwurd ynstelle en oanmelde",
- "changepassword-success": "Jo wachtwurd is feroare. Dwaande mei oanmelden ...",
+ "changepassword-success": "Jo wachtwurd is feroare.",
"resetpass_forbidden": "Wachtwurden kinne net feroare wurde",
"resetpass-no-info": "Jo moatte oanmeld wêze foar't Jo dizze side brûke kinne.",
"resetpass-submit-loggedin": "Wachtwurd feroarje",
- "resetpass-submit-cancel": "Ofbrekke",
+ "resetpass-submit-cancel": "Annulearje",
"resetpass-wrong-oldpass": "It momintele of tydlike wachtwurd is ûnjildich.\nMûglik hawwe Jo Jo wachtwurd al feroare of in nij tydlik wachtwurd oanfrege.",
"resetpass-temp-password": "Tydlik wachtwurd:",
+ "passwordreset": "Wachtwurd ferfarskje",
"passwordreset-legend": "Wachtwurd weromsette",
- "passwordreset-username": "Meidoggernamme",
+ "passwordreset-username": "Brûkersnamme:",
"passwordreset-domain": "Domein:",
"passwordreset-email": "E-mailadres:",
"passwordreset-emailtitle": "Akkountdetails op {{SITENAME}}",
"changeemail": "Feroarje e-mailadres",
- "changeemail-header": "Feroarje akkount e-mailadres",
- "changeemail-cancel": "Ofbrekke",
+ "changeemail-none": "(gjin)",
+ "resettokens-token-label": "$1 (hjoeddeistige wearde: $2)",
"bold_sample": "Fette tekst",
"bold_tip": "Fette tekst",
"italic_sample": "Skeane tekst",
@@ -430,30 +453,31 @@
"headline_tip": "Underkopke",
"nowiki_sample": "Foechje hjir platte tekst yn",
"nowiki_tip": "Negearje it wiki formaat",
+ "image_sample": "Foarbyld.jpg",
"image_tip": "Mediatriem",
"media_tip": "Link nei triem",
"sig_tip": "Jo hântekening mei dei en oere",
"hr_tip": "Horizontale line (mei ferdrach brûke)",
"summary": "Gearfetting:",
- "subject": "Mêd:",
+ "subject": "Ûnderwerp/kop:",
"minoredit": "Dit is in tekstwiziging",
"watchthis": "Folgje dizze side",
"savearticle": "Fêstlizze",
"preview": "Oerlêze",
"showpreview": "Earst oerlêze",
"showdiff": "Wizigings",
- "anoneditwarning": "'''Warskôging:''' Jo binne net oanmeld. By it fêstlizzen wurdt jo ynternetadres opnaam yn de sideskiednis.",
- "missingsummary": "'''Wink:''' jo hawwe gjin gearfetting jûn foar jo bewurking. As jo nochris op ''Side opslaan'' klikke wurdt de bewurking sûnder gearfetting opslein.",
+ "anoneditwarning": "<strong>Warskôging:</strong> Jo binne net oanmeld. By it fêstlizzen wurdt jo ynternetadres opnaam yn de sideskiednis.",
+ "missingsummary": "<strong>Tink derom:</strong> Jo hawwe gjin gearfetting jûn foar jo bewurking.\nAs jo nochris op ''Side opslaan'' klikke wurdt de bewurking sûnder gearfetting opslein.",
"missingcommenttext": "Set jo opmerking beleaven hjir ûnder.",
- "missingcommentheader": "'''Tink derom:''' Jo hawwe gjin ûnderwerp/kop foar dizze opmerking opjûn. As jo op 'e nij op \"opslaan\" klikke, wurdt jo feroaring sûnder in ûnderwerp/kop opslein.",
+ "missingcommentheader": "<strong>Tink derom:</strong> Jo hawwe gjin ûnderwerp/kop foar dizze opmerking opjûn.\ns jo op 'e nij op \"opslaan\" klikke, wurdt jo feroaring sûnder in ûnderwerp/kop opslein.",
"summary-preview": "Gearfetting sa at dy brûkt wurdt:",
"subject-preview": "Neisjen ûnderwerp/kop:",
"blockedtitle": "Meidogger is útsletten troch",
- "blockedtext": "'''Jo meidoggernamme of Ynternet-adres is útsletten.'''\n\nDe útsluting is útfierd troch $1.\nDe opjûne reden is ''$2''.\n\n* Begjin útsluting : $8\n* Ein útsluting : $6\n* Bedoeld út te sluten: $7\n\nJo kinne kontakt opnimme mei $1 of in oare [[{{MediaWiki:Grouppage-sysop}}|behearder]] om de útsluting te besprekken.\nJo kinne gjin gebrûk meitsje fan 'e funksje 'Skriuw meidogger', of jo moatte in jildich e-postadres opjûn hawwe yn jo [[Special:Preferences|foarkarren]] en it gebrûk fan dy funksje moat net útsletten wêze.\nJo tsjintwurdich e-postadres is $3 en it útsletnûmer is #$5. Neam beide gegevens as jo earne op dizze útsluting reagearje.",
+ "blockedtext": "<strong>Jo meidoggernamme of IP-adres is útsletten.</strong>\n\nDe útsluting is útfierd troch $1.\nDe opjûne reden is <em>$2</em>.\n\n* Begjin útsluting : $8\n* Ein útsluting : $6\n* Bedoeld út te sluten: $7\n\nJo kinne kontakt opnimme mei $1 of in oare [[{{MediaWiki:Grouppage-sysop}}|behearder]] om de útsluting te besprekken.\nJo kinne gjin gebrûk meitsje fan 'e funksje 'Skriuw meidogger', of jo moatte in jildich e-postadres opjûn hawwe yn jo [[Special:Preferences|foarkarren]] en it gebrûk fan dy funksje moat net útsletten wêze.\nJo tsjintwurdich e-mailadres is $3 en it útsletnûmer is #$5. Neam beide gegevens as jo earne op dizze útsluting reagearje.",
"autoblockedtext": "Jo IP-adres is automatysk útsletten om't brûkt is troch in oare brûker, dy't útsletten is troch $1.\nDe opjûne reden is:\n\n:''$2''\n\n* Begjin útsluting : $8\n* Ein útsluting : $6\n* Bedoeld út te sluten: $7\n\nJo kinne kontakt opnimme mei $1 of in oare [[{{MediaWiki:Grouppage-sysop}}|behearder]] om de útsluting te besprekken.\nJo kinne gjin gebrûk meitsje fan 'e funksje 'Skriuw meidogger', of jo moatte in jildich e-postadres opjûn hawwe yn jo [[Special:Preferences|foarkarren]] en it gebrûk fan dy funksje moat net útsletten wêze.\nJo tsjintwurdich e-postadres is $3 en it útsletnûmer is #$5. Neam beide gegevens as jo earne op dizze útsluting reagearje.",
"blockednoreason": "gjin reden opjûn",
"whitelistedittext": "Jo moatte $1 om siden te bewurkjen.",
- "confirmedittext": "Jo moatte jo e-mailadres befêstichje foar't jo siden feroarje kinne. Fier in e-mailedres yn by jo [[Special:Preferences|ynstellings]] en befêstichje it.",
+ "confirmedittext": "Jo moatte jo e-mailadres befêstichje foar't jo siden feroarje kinne.\nFier in e-mailadres yn by jo [[Special:Preferences|foarkarren]] en befêstichje it.",
"nosuchsectiontitle": "Dizze subkop bestiet net",
"nosuchsectiontext": "Jo besochten in subkop te bewurkjen dy't net bestiet.",
"loginreqtitle": "Oanmelding frege",
@@ -466,19 +490,19 @@
"anontalkpagetext": "----''Dit is de oerlisside fan in ûnbekende meidogger; in meidogger dy't him/har net oanmeld hat. Om't der gjin namme bekend is, wurdt it ynternet-adres brûkt om oan te jaan wa. Mar faak is it sa dat sa'n adres net altyd troch deselde persoan brûkt wurdt. As jo it idee hawwe dat jo as ûnbekende meidogger opmerkings foar in oar krije, dan kinne jo jo [[Special:UserLogin/signup|registrearje]], of jo [[Special:UserLogin|oanmelde]]. Fan in oanmelde meidogger is it ynternet-adres net sichtber, en as oanmelde meidogger krije jo allinnich opmerkings dy't foar josels bedoeld binne.''",
"noarticletext": "Der stjit noch gjin tekst op dizze side. Jo kinne\n[[Special:Search/{{PAGENAME}}|hjirboppe nei dy tekst sykje]], of [{{fullurl:{{FULLPAGENAME}}|action=edit}} de side skriuwe].",
"userpage-userdoesnotexist": "Jo bewurkje in brûkersside fan in brûker dy't net bestiet (brûker \"<nowiki>$1</nowiki>\").\nKontrolearje oft jo dizze side wol oanmeitsje/bewurkje wolle.",
- "clearyourcache": "'''Opmerking:''' Nei it fêstlizzen kin it nedich wêze de oerslach fan dyn blêder te leegjen foardat de wizigings te sjen binne.\n\n'''Mozilla / Firefox / Safari:''' hâld ''Shift'' yntreaun wylst jo op ''Dizze side fernije'' klikke, of typ ''Ctrl-F5'' of ''Ctrl-R'' (''Command-R'' op in Mac); '''Konqueror: '''klik ''Reload'' of typ ''F5;'' '''Opera:''' leegje jo cache yn ''Extra → Voorkeuren;'' '''Internet Explorer:''' hâld ''Ctrl'' yntreaun wylst jo ''Vernieuwen'' klikke of typ ''Ctrl-F5.''",
- "usercssyoucanpreview": "'''Tip:''' Brûk de knop 'Earst oerlêze' om jo nije CSS te testen foar it fêstlizzen.",
- "userjsyoucanpreview": "'''Tip:''' Brûk de knop 'Earst oerlêze' om jo nije JS te testen foar it fêstlizzen.",
- "usercsspreview": "'''Dit is allinne mar it oerlêzen fan jo persoanlike CSS. Hy is noch net fêstlein!'''",
- "userjspreview": "'''Tink derom: jo besjogge no jo persoanlike JavaScript. De side is net fêstlein!'''",
- "userinvalidcssjstitle": "'''Warskôging:''' der is gjin skin \"$1\". Tink derom: jo eigen .css- en .js-siden begjinne mei in lytse letter, bygelyks {{ns:user}}:Namme/vector.css ynsté fan {{ns:user}}:Namme/Vector.css.",
+ "clearyourcache": "<strong>Opmerking:</strong> Nei it fêstlizzen kin it nedich wêze de oerslach fan dyn blêder te leegjen foardat de wizigings te sjen binne.\n* <strong>Firefox / Safari:</strong> Hâld <em>Shift</em> yntreaun wylst jo op <em>Dizze side fernije</em> klikke, of typ <em>Ctrl-F5</em> of <em>Ctrl-R</em> (<em>⌘-R</em> op in Mac)\n* <strong>Google Chrome:</strong> Typ <em>CTRL-Shift-R</em> (<em>⌘-Shift-R</em> op in Mac)\n* <strong>Internet Explorer:</strong> Hâld <em>Ctrl</em> yntreaun wylst jo <em>Vernieuwen'' klikke of typ <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Leegje jo cache yn <em>Extra → Voorkeuren</em>",
+ "usercssyoucanpreview": "<strong>Tip:</strong> Brûk de knop \"{{int:showpreview}}\" om jo nije CSS te testen foar it fêstlizzen.",
+ "userjsyoucanpreview": "<strong>Tip:</strong> Brûk de knop \"{{int:showpreview}}\" om jo nije JS te testen foar it fêstlizzen.",
+ "usercsspreview": "<strong>Dit is allinne mar it oerlêzen fan jo persoanlike CSS. Hy is noch net fêstlein!</strong>",
+ "userjspreview": "<strong>Tink derom: jo besjogge no jo persoanlike JavaScript. De side is net fêstlein!</strong>",
+ "userinvalidcssjstitle": "<strong>Warskôging:</strong> der is gjin skin \"$1\".\nTink derom: jo eigen .css- en .js-siden begjinne mei in lytse letter, bygelyks {{ns:user}}:Namme/vector.css ynsté fan {{ns:user}}:Namme/Vector.css.",
"updated": "(Bewurke)",
- "note": "'''Opmerking:'''",
- "previewnote": "'''Tink der om dat dizze side noch net fêstlein is!'''",
+ "note": "<strong>Opmerking:</strong>",
+ "previewnote": "<strong>Tink der om dat dizze side noch net fêstlein is!</strong>",
"previewconflict": "Dizze side belanget allinich it earste bewurkingsfjild oan.",
- "session_fail_preview": "'''Jo bewurking is net ferwurke, om't de sessygegevens ferlern gien binne.\nBesykje it nochris. As it dan noch net slagget, [[Special:UserLogout|meld jo dan ôf]] en wer oan.'''",
- "session_fail_preview_html": "'''Jo bewurking is net ferwurke, om't sesjegegevens ferlern gien binne.'''\n\n''Om't yn {{SITENAME}} rûge HTML ynskeakele is, is in foarfertoaning net mûglik as beskerming tsjin oanfallen mei JavaScript.''\n\n'''As dit in legitime bewurking is, besykje it dan fannijs.\nAs it dan noch net slagget, [[Special:UserLogout|meld jo dan ôf]] en wer oan.'''",
- "token_suffix_mismatch": "'''Jo bewurking is wegere om't jo blêder de lêstekens yn it bewurkingstoken ûnkrekt behannele hat.\nDe bewurking is wegere om skeinen fan 'e sidetekst tefoaren te kommen.\nDat bart soms as der in webbasearre proxytsjinst brûkt wurdt dy't flaters befettet.'''",
+ "session_fail_preview": "<strong>Jo bewurking is net ferwurke, om't de sessygegevens ferlern gien binne.</strong>\nBesykje it nochris. As it dan noch net slagget, [[Special:UserLogout|meld jo dan ôf]] en wer oan.",
+ "session_fail_preview_html": "<strong>Jo bewurking is net ferwurke, om't sesjegegevens ferlern gien binne.</strong>\n\n<em>Om't yn {{SITENAME}} rûge HTML ynskeakele is, is in foarfertoaning net mûglik as beskerming tsjin oanfallen mei JavaScript.</em>\n\n<strong>As dit in legitime bewurking is, besykje it dan fannijs.</strong>\nAs it dan noch net slagget, [[Special:UserLogout|meld jo dan ôf]] en wer oan.",
+ "token_suffix_mismatch": "<strong>Jo bewurking is wegere om't jo blêder de lêstekens yn it bewurkingstoken ûnkrekt behannele hat.</strong>\nDe bewurking is wegere om skeinen fan 'e sidetekst tefoaren te kommen.\nDat bart soms as der in webbasearre proxytsjinst brûkt wurdt dy't flaters befettet.",
"editing": "Bewurkje \"$1\"",
"editingsection": "Bewurkje $1 (seksje)",
"editingcomment": "Dwaande mei bewurkjen fan $1 (opmerking)",
@@ -486,17 +510,17 @@
"explainconflict": "In oar hat de side feroare sûnt jo begûn binne mei it bewurkjen.\nIt earste bewurkingsfjild is hoe't de tekst wilens wurden is.\nJo feroarings stean yn it twadde fjild.\nDy wurde allinnich tapast safier as jo se yn it earste fjild ynpasse.\n'''Allinnich''' de tekst út it earste fjild kin fêstlein wurde.",
"yourtext": "Jo tekst",
"storedversion": "Fêstleine ferzje",
- "nonunicodebrowser": "'''WARSKOGING: Jo browser kin net goed oer de wei mei unicode.\nDêr wurdt troch de MediaWiki software rekken mei holden, dat Jo kinne dan dochs sûnder problemen siden bewurkje: net-ASCII tekens wurden yn it bewurkingsfjild werjûn as heksadesimale koades.'''",
- "editingold": "'''Warskôging: Jo binne dwaande mei in âldere ferzje fan dizze side.\nSoene jo dy fêstlizze, dan is alles wei wat sûnt dy tiid feroare is.'''",
+ "nonunicodebrowser": "<strong>Warskôging: Jo browser kin net goed oer de wei mei unicode.</strong>\nDêr wurdt troch de MediaWiki software rekken mei holden, dat Jo kinne dan dochs sûnder problemen siden bewurkje: net-ASCII tekens wurden yn it bewurkingsfjild werjûn as heksadesimale koades.",
+ "editingold": "<strong>Warskôging: Jo binne dwaande mei in âldere ferzje fan dizze side.</strong>\nSoene jo dy fêstlizze, dan is alles wei wat sûnt dy tiid feroare is.",
"yourdiff": "Feroarings",
"copyrightwarning": "Tink derom dat alle bydragen oan {{SITENAME}} beskôge wurde frijjûn te wêzen ûnder de $2 (sjoch $1 foar bysûnderheden). As jo net wolle dat jo tekst troch oaren neffens eigen goedfinen bewurke en ferspraat wurde kin, kies dan net foar 'Side Bewarje'.</br>\nHjirby sizze jo tagelyk ta, dat jo dizze tekst sels skreaun hawwe, of oernommen hawwe út in frije, iepenbiere boarne.</br/>\n'''BRûK GJIN MATERIAAL DAT BESKERME WURDT TROCH AUTERURSRJOCHT, OF JO MOATTE DêR TASTIMMING TA HAWWE!</STRONG>",
"copyrightwarning2": "Al jo bydragen oan {{SITENAME}} kinne bewurke, feroare of fuorthelle wurde troch oare brûkers.\nAs jo net wolle dat jo teksten yngeand oanpast wurde troch oaren, set se hjir dan net.<br />\nJo sizze ek ta dat jo de oarspronklike auteur binne fan dit materiaal, of dat jo it kopiearre hawwe út in boarne yn it publike domein, of in soartgelikense frije boarne (sjuch $1 foar details).\n'''BRUK GJIN MATERIAAL DAT BESKERME WURDT TROCH AUTEURSRJOCHT, OF JO MOATTE DER TASTIMMING FOAR HAWWE!'''",
- "longpageerror": "'''FOUT: de tekst dy't jo tafoege hawwe is {{PLURAL:$1|ien kilobyte|$1 kilobytes}} grut, wat grutter is as it maksimum fan {{PLURAL:$2|ien kilobyte|$2 kilobytes}}.\nBewarjen is net mûglik.'''",
- "readonlywarning": "'''Warskôging: De databank is ôfsletten foar ûnderhâld, dus jo kinne jo bewurkings no net fêstlizze. Bewarje de tekst foar lettere pleatsing yn in teksttriem.'''\n\nIn behearder hat de database blokkearre om de folgjende reden: $1",
- "protectedpagewarning": "'''Warskôging: Dizze side is beskerme, dat gewoane brûkers dy net bewurkje kinne.'''",
- "semiprotectedpagewarning": "'''Tink derom:''' dizze side is befeilige en kin allinne troch registrearre brûkers bewurke wurde.",
- "cascadeprotectedwarning": "'''Warskôging:''' Dizze side is skoattele sadat allinnich behearders de side wizigje kinne, om't der in ûnderdiel útmakket fan de neikommende {{PLURAL:$1|side|siden}}, dy't skoattele binne mei de \"ûnderlizzende siden\" opsje ynskeakele:",
- "titleprotectedwarning": "'''WARSKÔGING: Dizze side is befeilige. Der binne [[Special:ListGroupRights|spesjale rjochten]] nedich om dizze side meitsje te kinnen.'''\nDe lêste lochrigel stiet hjirûnder:",
+ "longpageerror": "<strong>Flater: de tekst dy't jo tafoege hawwe is {{PLURAL:$1|ien kilobyte|$1 kilobytes}} grut, wat grutter is as it maksimum fan {{PLURAL:$2|ien kilobyte|$2 kilobytes}}.</strong>\nBewarjen is net mûglik.'''",
+ "readonlywarning": "<strong>Warskôging: De databank is ôfsletten foar ûnderhâld, dus jo kinne jo bewurkings no net fêstlizze. Bewarje de tekst foar lettere pleatsing yn in teksttriem.</strong>\n\nIn behearder hat de database blokkearre om de folgjende reden: $1",
+ "protectedpagewarning": "<strong>Warskôging: Dizze side is beskerme, dat gewoane brûkers dy net bewurkje kinne.</strong>",
+ "semiprotectedpagewarning": "<strong>Opmerking:</strong> Dizze side is befeilige en kin allinne troch registrearre brûkers bewurke wurde.",
+ "cascadeprotectedwarning": "<strong>Warskôging:</strong> Dizze side is skoattele sadat allinnich behearders de side wizigje kinne, om't der in ûnderdiel útmakket fan de neikommende {{PLURAL:$1|side|siden}}, dy't skoattele binne mei de \"ûnderlizzende siden\" opsje ynskeakele:",
+ "titleprotectedwarning": "<strong>Warskôging: Dizze side is befeilige. Der binne [[Special:ListGroupRights|spesjale rjochten]] nedich om dizze side meitsje te kinnen.</strong>\nDe lêste lochrigel stiet hjirûnder:",
"templatesused": "{{PLURAL:$1|Berjocht|Berjochten}} brûkt op dizze side:",
"templatesusedpreview": "{{PLURAL:$1|Sjabloan|Sjabloanen}} dy't yn dizze bewurking brûkt wurde:",
"templatesusedsection": "{{PLURAL:$1|Sjabloan|Sjabloanen}} dy't brûkt wurde yn dizze subkop:",
@@ -504,12 +528,13 @@
"template-semiprotected": "(semi-befeilige)",
"hiddencategories": "Dizze side falt yn de folgjende ferburgen\n{{PLURAL:$1|kategory|kategoryen}}:",
"edittools": "<!-- Tekst hjir stiet ûnder bewurkingsfjilden en oanbringfjilden. -->",
+ "edittools-upload": "-",
"nocreatetext": "{{SITENAME}} hat de mûglikheid beheind om nije siden te meitsjen.\nJo kinne al besteande siden feroarje of jo kinne [[Special:UserLogin|jo oanmelde of in brûker oanmeitsje]].",
"nocreate-loggedin": "Jo meie gjin nije siden meitsje",
"permissionserrors": "Flaters yn rjochten",
"permissionserrorstext": "Jo hawwe gjin rjochtem dit te dwaan om de folgjende {{PLURAL:$1|reden|redenen}}:",
"permissionserrorstext-withaction": "Jo hawwe gjin rjocht ta $2 om de folgjende {{PLURAL:$1|reden|redenen}}:",
- "recreate-moveddeleted-warn": "'''Warskôging: Jo binne dwaande in side oan te meitsjen dy't earder weidien is.'''\n\nBetink oft it gaadlik is dat jo dizze side fierder bewurkje. Foar jo geriif stiet hjirûnder it lochboek oer it weidwaan fan dizze side:",
+ "recreate-moveddeleted-warn": "<strong>Warskôging: Jo binne dwaande in side oan te meitsjen dy't earder weidien is.</strong>\n\nBetink oft it gaadlik is dat jo dizze side fierder bewurkje. Foar jo geriif stiet hjirûnder it lochboek oer it weidwaan fan dizze side:",
"moveddeleted-notice": "Dizze side is fuorthelle. It fuorthel-logboek fan dizze side wurdt hjirûnder werjûn foar jo ynformaasje.",
"log-fulllog": "Besjoch it hiele lochboek",
"edit-hook-aborted": "De bewurking is ôfbrutsen troch in hook.\nDer is gjin taljochting beskikber.",
@@ -519,11 +544,13 @@
"postedit-confirmation-saved": "Dyn bewurking is fêstlein.",
"edit-already-exists": "De side is net oanmakke.\nHy bestie al.",
"defaultmessagetext": "Standert berjochttekst",
- "expensive-parserfunction-warning": "Warskôging: Dizze side brûkt tefolle kostbere parserfunksjes.\n\nWylst it minder as $2 {{PLURAL:$2|parserfunksje|parserfunksjes}} wêze moatte, no {{PLURAL:$1|is it $1 |binne it $1}}",
+ "content-model-wikitext": "wikitekst",
+ "content-model-javascript": "JavaScript",
+ "expensive-parserfunction-warning": "<strong>Warskôging:</strong> Dizze side brûkt tefolle kostbere parserfunksjes.\n\nWylst it minder as $2 {{PLURAL:$2|parserfunksje|parserfunksjes}} wêze moatte, no {{PLURAL:$1|is it $1 |binne it $1}}",
"expensive-parserfunction-category": "Siden dy't tefolle kostbere parserfuksjes brûke",
- "post-expand-template-inclusion-warning": "Warskôging: jo geane oer de maksimale opnamegrutte foar sjabloanen.\nGuon sjabloanen wurden net opnommen.",
+ "post-expand-template-inclusion-warning": "<strong>Warskôging:</strong> jo geane oer de maksimale opnamegrutte foar sjabloanen.\nGuon sjabloanen wurden net opnommen.",
"post-expand-template-inclusion-category": "Side wêrfoar't de maksimale trânsklúzjegrutte teboppe gien is",
- "post-expand-template-argument-warning": "Warskôging: Dizze side befettet minstens ien sjabloanparameter mei in te grutte opnamegrutte.\nDy parameters binne weilitten.",
+ "post-expand-template-argument-warning": "<strong>Warskôging:</strong> Dizze side befettet minstens ien sjabloanparameter mei in te grutte opnamegrutte.\nDy parameters binne weilitten.",
"post-expand-template-argument-category": "Siden dy't missende sjabloaneleminten befetsje",
"parser-template-loop-warning": "Der is in lus yn sjabloanen fûn: [[$1]]",
"parser-template-recursion-depth-warning": "De werhellingsdjipte foar sjabloanen is oer de grins ($1)",
@@ -538,19 +565,19 @@
"currentrev": "Aktuele ferzje",
"currentrev-asof": "Hjoeddeiske ferzje sûnt $1",
"revisionasof": "Ferzje op $1",
- "revision-info": "Ferzje op $1 fan $2",
- "previousrevision": "←Eardere ferskillen",
+ "revision-info": "Ferzje op $1 troch {{GENDER:$6|$2}}$7",
+ "previousrevision": "← Eardere ferzje",
"nextrevision": "Nijere ferzje→",
"currentrevisionlink": "Rinnende ferzje",
"cur": "no",
- "next": "dan",
- "last": "doe",
+ "next": "folgjende",
+ "last": "foarige",
"page_first": "earste",
"page_last": "lêste",
"histlegend": "Utlis: (no) = ferskil mei de side sa't dy no is,\n(doe) = ferskill mei de side sa't er doe wie, foar de feroaring, T = Tekstwiziging",
"history-fieldset-title": "Troch skiednis blêdzje",
- "histfirst": "Ierst",
- "histlast": "Lêst",
+ "histfirst": "âldste",
+ "histlast": "nijste",
"historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
"historyempty": "(leech)",
"history-feed-title": "Sideskiednis",
@@ -582,8 +609,8 @@
"revdelete-unsuppress": "Beheinings op tebeksette feroarings fuorthelje",
"revdelete-log": "Reden:",
"revdelete-submit": "Tapasse op selektearre bewurking",
- "revdelete-success": "'''Sichtberens fan 'e feroaring mei sukses ynsteld.'''",
- "logdelete-success": "'''Sichtberens fan it barren mei sukses ynsteld.'''",
+ "revdelete-success": "<strong>Sichtberens fan 'e feroaring mei sukses ynsteld.</strong>",
+ "logdelete-success": "<strong>Sichtberens fan it barren mei sukses ynsteld.</strong>",
"revdel-restore": "Sichtberens feroarje",
"pagehist": "Sideskiednis",
"deletedhist": "Wiske skiednis",
@@ -610,15 +637,16 @@
"mergehistory-comment": "[[:$1]] kombinearre mei [[:$2]]: $3",
"mergehistory-same-destination": "De boarneside en de doelside kinne net deselde wêze",
"mergehistory-reason": "Reden:",
+ "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "Gearfoegingslogboek",
- "pagemerge-logentry": "[[$1]] kombinearre mei [[$2]] (maksimaal $3 ferzjes)",
"revertmerge": "Gearfoeging ûngedien meitsje",
"mergelogpagetext": "Hjirûnder stiet in list fan resinte gearfoegings fan ien side-skiednis nei in oaren.",
- "history-title": "Sideskiednis fan \"$1\"",
+ "history-title": "$1: ferzjeskiednis",
"lineno": "Rigel $1:",
"compareselectedversions": "Ferlykje selektearre ferzjes",
"showhideselectedversions": "Oantikke ferzjes wol/net sjen litte",
"editundo": "werom sette",
+ "diff-empty": "(Gjin ferskil)",
"searchresults": "Sykresultaat",
"searchresults-title": "Sykresultaten foar \"$1\"",
"titlematches": "Titels",
@@ -629,10 +657,10 @@
"prevn-title": "{{PLURAL:$1|Foarich risseltaat|Foarige $1 risseltaten}}",
"nextn-title": "{{PLURAL:$1|Folgjend risseltaat|Folgjende $1 risseltaat}}",
"viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) besjen.",
- "searchmenu-exists": "'''Der is in side mei namme \"[[:$1]]\" yn dizze wiki'''",
- "searchmenu-new": "'''Meitsje de side \"[[:$1]]\" yn dizze wiki!'''",
+ "searchmenu-exists": "<strong>Der is in side mei namme \"[[:$1]]\" yn dizze wiki</strong>",
+ "searchmenu-new": "<strong>Meitsje de side \"[[:$1]]\" yn dizze wiki!</strong>",
"searchprofile-articles": "Ynhâldlike siden",
- "searchprofile-images": "Triemmen",
+ "searchprofile-images": "Multymedia",
"searchprofile-everything": "Alles",
"searchprofile-advanced": "Utwreide",
"searchprofile-articles-tooltip": "Sykje yn $1",
@@ -642,38 +670,41 @@
"search-result-size": "$1 ({{PLURAL:$2|1 wurd|$2 wurden}})",
"search-redirect": "(trochferwizing $1)",
"search-section": "(seksje $1)",
+ "search-category": "(kategory $1)",
"search-suggest": "Bedoele jo: $1",
"search-interwiki-caption": "Susterprojekten",
- "search-interwiki-default": "$1 resultaten:",
+ "search-interwiki-default": "Resultaten fan $1:",
"search-interwiki-more": "(mear)",
"search-relatedarticle": "Besibbe",
"searchrelated": "besibbe",
"searchall": "alle",
- "showingresults": "{{PLURAL:$1|'''1''' resultaat|'''$1''' resultaten}} fan #'''$2''' ôf.",
+ "showingresults": "{{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1</strong> resultaten}} fan #<strong>$2</strong> ôf.",
+ "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> fan <strong>$3</strong>|Resultaten <strong>$1 - $2</strong> fan <strong>$3</strong>}}",
"search-nonefound": "Der binne gjin resultaten foar Jo sykopdracht.",
"powersearch-legend": "Sykje",
"powersearch-ns": "Sykje op nammeromten:",
"powersearch-togglelabel": "Oantikje:",
- "powersearch-toggleall": "Allegear",
+ "powersearch-toggleall": "Alle",
"powersearch-togglenone": "Gjin",
"search-external": "Utwindich sykje",
"searchdisabled": "<p>Op it stuit stiet it trochsykjen fan tekst út omdat dizze funksje tefolle kompjûterkapasiteit ferget. As we nije apparatuer krije, en dy is ûnderweis, dan wurdt dizze funksje wer aktyf. Oant salang kinne jo sykje fia Google:</p>",
- "preferences": "Ynstellings",
- "mypreferences": "Myn foarkarynstellings",
+ "preferences": "Foarkarren",
+ "mypreferences": "Foarkarren",
"prefs-edits": "Tal bewurkings:",
"prefs-skin": "Side-oansjen",
"skin-preview": "Proefbyld",
"datedefault": "Gjin foarkar",
+ "prefs-user-pages": "Meidoggersiden",
"prefs-personal": "Persoanlike gegevens",
"prefs-rc": "Koartlyn feroare",
"prefs-watchlist": "Folchlist",
"prefs-watchlist-days": "Oantal dagen yn folchlist sjen litte:",
- "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+ "prefs-watchlist-days-max": "Maksimaal $1 {{PLURAL:$1|dei|dagen}}",
"prefs-watchlist-edits": "Tal wizigings om sjen te litten yn de útwreide folchlist:",
"prefs-watchlist-edits-max": "Maksimum oantal: 1000",
"prefs-misc": "Ferskaat",
"prefs-resetpass": "Wachtwurd feroarje",
- "saveprefs": "Ynstellings fêstlizze",
+ "saveprefs": "Fêstlizze",
"restoreprefs": "Tebek nei de standertynstellings",
"prefs-editing": "Siden bewurkje",
"rows": "Rigen",
@@ -683,10 +714,10 @@
"recentchangesdays": "Dagen om sjen te litten yn Koartlyn feroare:",
"recentchangesdays-max": "(maksimaal $1 {{PLURAL:$1|dei|dagen}})",
"recentchangescount": "Tal titels op 'Koartlyn feroare'",
- "savedprefs": "Jo ynstellings binne fêstlein.",
- "timezonelegend": "Tiidsône",
+ "savedprefs": "Jo foarkarren binne fêstlein.",
+ "timezonelegend": "Tiidsône:",
"localtime": "Pleatslike tiid:",
- "timezoneuseserverdefault": "Servertiid brûke",
+ "timezoneuseserverdefault": "Wikistandert brûke ($1)",
"timezoneuseoffset": "Oars (tiidferskil oanjaan)",
"servertime": "Servertiid:",
"guesstimezone": "Freegje de blêder",
@@ -701,40 +732,44 @@
"timezoneregion-indian": "Yndyske Oseaan",
"timezoneregion-pacific": "Stille Oseaan",
"allowemail": "Lit my ek netpost fan oare meidoggers krije",
- "prefs-searchoptions": "Sykynstellings",
+ "prefs-searchoptions": "Sykje",
"prefs-namespaces": "Nammeromten",
"default": "standert",
- "prefs-files": "Triemen",
+ "prefs-files": "Triemmen",
"prefs-custom-js": "Persoanlik JS",
- "prefs-emailconfirm-label": "Netpostbefêstiging:",
- "youremail": "Jo netpostadres:",
- "username": "Meidochnamme:",
+ "prefs-emailconfirm-label": "E-mailbefêstiging:",
+ "youremail": "E-mail:",
+ "username": "{{GENDER:$1|Brûkersnamme}}:",
"prefs-memberingroups": "Lid fan {{PLURAL:$1|groep|groepen}}:",
+ "prefs-memberingroups-type": "$1",
+ "prefs-registration-date-time": "$1",
"yourrealname": "Jo wiere namme:",
"yourlanguage": "Taal:",
"yournick": "Jo alias (foar sinjaturen)",
"badsig": "Unjildige ûndertekening; kontrolearje de HTML-tags.",
"badsiglength": "Bynamme is te lang; dy moat koarter as $1 {{PLURAL:$1|teken|tekens}} wêze.",
- "yourgender": "Geslacht:",
- "gender-unknown": "Net oanjûn",
- "gender-male": "Man",
- "gender-female": "Frou",
+ "yourgender": "Hoe wolsto beskreaun wurde?",
+ "gender-unknown": "Ik wol dit net oanjûn",
+ "gender-male": "Hy bewurke siden",
+ "gender-female": "Sy bewurke siden",
"prefs-help-gender": "Kar: dit wurdt troch de programmatuer brûkt om de goeie oansprekfoarm te kiezen.\nDizze ynformaasje is foar oare meidoggers te sjen.",
- "email": "E-post",
+ "email": "E-mail",
"prefs-help-realname": "Echte namme is net ferplicht; as jo dy opjouwe kin dy namme brûkt wurde om jo erkenning te jaan foar jo wurk.",
- "prefs-help-email": "E-post is opsjoneel, mar makket it mûglik jo wachtwurd te stjoeren as jo it fergetten hawwe.\nJo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwizing op jo brûkers- en oerlisside, sûnder dat jo jo identiteit oer hoege te jaan.",
+ "prefs-help-email": "E-mail is opsjoneel, mar makket it mûglik jo wachtwurd te stjoeren as jo it fergetten hawwe.\nJo kinne ek oaren de mûglikheid jaan kontakt mei jo op te nimmen troch in ferwizing op jo brûkers- en oerlisside, sûnder dat jo jo identiteit oer hoege te jaan.",
"prefs-help-email-required": "Hjir is in e-mailadres foar nedich.",
"prefs-signature": "Sinjatuer",
"prefs-dateformat": "Datumopmaak",
"prefs-timeoffset": "Tiidsferskil",
+ "prefs-preview": "Proefbyld",
"userrights": "Behear fan meidoggerrjochten",
"userrights-lookup-user": "Behear fan meidoggerrjochten",
"userrights-user-editname": "Meidoggernamme:",
"editusergroup": "Wizigje meidoggerrjochten",
- "editinguser": "Bewurkje meidoggerrjochten fan '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+ "editinguser": "Bewurkje meidoggerrjochten fan <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "Wizigje meidoggerrjochten",
"saveusergroups": "Meidoggerrjochten fêstlizze",
"userrights-groupsmember": "Sit yn group:",
+ "userrights-groupsmember-type": "$1",
"userrights-groups-help": "Jo kinne de groepen feroarje dêr't dizze brûker lid fan is.\n* In oankrúst fekje betsjut dat de brûker lid is fan 'e groep.\n* In net oankrúst fekje betsjut dat de brûker gjin lid is fan 'e groep.\n* In \"*\" betsjut dat jo in brûker net út in groep weihelje kinne nei't jo dy tafoege hawwe, of oarsom.",
"userrights-reason": "Reden:",
"userrights-no-interwiki": "Jo hawwe gjin foech om rjochten fan meidoggers op oare wikis te wizigjen.",
@@ -743,6 +778,7 @@
"userrights-notallowed": "Jo hawwe gjin rjochten om rjochten fan meidoggers te wizigjen.",
"userrights-changeable-col": "Groepen dy't jo beheare kinne",
"userrights-unchangeable-col": "Groepen dy't jo net beheare kinne",
+ "userrights-irreversible-marker": "$1*",
"group": "Groep:",
"group-user": "Meidoggers",
"group-autoconfirmed": "befêstige brûkers",
@@ -751,12 +787,12 @@
"group-bureaucrat": "Rjochtenútfurders",
"group-suppress": "tasichthâlders",
"group-all": "(eltsenien)",
- "group-user-member": "{{GENDER:$1|Meidogger}}",
- "group-autoconfirmed-member": "Registrearre brûker",
- "group-bot-member": "Bot",
- "group-sysop-member": "Behearder",
- "group-bureaucrat-member": "Rjochtenútfurder",
- "group-suppress-member": "Tasichthâlder",
+ "group-user-member": "{{GENDER:$1|meidogger}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|registrearre brûker}}",
+ "group-bot-member": "{{GENDER:$1|bot}}",
+ "group-sysop-member": "{{GENDER:$1|behearder}}",
+ "group-bureaucrat-member": "{{GENDER:$1|rjochtenútfurder}}",
+ "group-suppress-member": "{{GENDER:$1|tasichthâlder}}",
"grouppage-user": "{{ns:project}}:Meidoggers",
"grouppage-autoconfirmed": "{{ns:project}}:Registrearre brûkers",
"grouppage-bot": "{{ns:project}}:Bots",
@@ -855,7 +891,9 @@
"action-userrights": "alle brûkersrjochten bewurkje",
"action-userrights-interwiki": "brûkersrjochten fan brûkers fan oare wiki's bewurkje",
"action-siteadmin": "de database ôfslute of iepenstelle",
+ "action-sendemail": "e-mail stjoere:",
"nchanges": "$1 {{PLURAL:$1|bewurking|bewurkings}}",
+ "enhancedrc-history": "skiednis",
"recentchanges": "Koartlyn feroare",
"recentchanges-legend": "Opsjes foar resinte feroarings",
"recentchanges-summary": "De lêste feroarings fan de {{SITENAME}}.",
@@ -864,6 +902,7 @@
"recentchanges-label-minor": "Dit is in tekstwiziging",
"recentchanges-label-bot": "Dizze wiziging is troch in robot makke",
"recentchanges-label-unpatrolled": "Dizze wiziging is noch net neisjûn",
+ "recentchanges-legend-heading": "'''Leginda:'''",
"recentchanges-legend-newpage": "$1 - nije side",
"rcnotefrom": "Dit binne de feroarings sûnt <b>$2</b> (maksimaal <b>$1</b>).",
"rclistfrom": "Jou nije feroarings, begjinnende mei $3 $2",
@@ -881,11 +920,14 @@
"minoreditletter": "T",
"newpageletter": "N",
"boteditletter": "b",
+ "unpatrolledletter": "!",
"number_of_watching_users_pageview": "[$1 folgjende {{PLURAL:$1|meidogger|meidoggers}}]",
"rc_categories": "Alline kategoryen (skiede mei in \"|\")",
"rc_categories_any": "Elk",
+ "rc-change-size": "$1",
+ "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} nei de wiziging",
"newsectionsummary": "/* $1 */ nije seksje",
- "rc-enhanced-expand": "Details werjaan (JavaScript nedich)",
+ "rc-enhanced-expand": "Details werjaan",
"rc-enhanced-hide": "Details ferskûlje",
"recentchangeslinked": "Folgje keppelings",
"recentchangeslinked-feed": "Folgje keppelings",
@@ -935,18 +977,18 @@
"fileexists-forbidden": "Der bestiet al in triem mei dizze namme.\nBied jo triem ûnder in oare namme oan.\n[[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "Der bestiet al in triem mei dizze namme by de dielde triemmen.\nAs jo de triem dochs noch oanbiede wolle, gean dan werom en kies in oare namme.\n[[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "Dizze triem is idintyk oan {{PLURAL:$1|de folgjende triem|de folgjende triemmen}}:",
- "file-deleted-duplicate": "In bestân idintyk oan dit bestân ([[:$1]]) is foarhinne fuorthelle.\nRieplachtsje it fuorthel-logboek foar't jo fierder geane.",
+ "file-deleted-duplicate": "In triem idintyk oan dizze triem ([[:$1]]) is foarhinne fuorthelle.\nRieplachtsje it fuorthel-logboek foar't jo fierder geane.",
"uploadwarning": "Oanbied-warskôging",
"savefile": "Lis triem fêst",
"uploaddisabled": "Sorry, op dizze tsjinner kin net oanbean wurde.",
"uploaddisabledtext": "It oanbieden fan triemmen is útskeakele.",
- "php-uploaddisabledtext": "PHP-triemuploads binne útskeakele. Kontrolearje a.j.w. de triem_uploads-ynstelling.",
+ "php-uploaddisabledtext": "PHP-triemuploads binne útskeakele.\nKontrolearje de ynstelling \"file_uploads\".",
"uploadscripted": "Dizze triem befettet HTML- of scriptkoade dy't ferkeard troch jo browser werjûn wurde kin.",
"uploadvirus": "De triem befettet in firus! Details: $1",
"sourcefilename": "Triemnamme boarne:",
"destfilename": "Triemnamme om op te slaan:",
"upload-maxfilesize": "Maksimale triemgrutte: $1",
- "watchthisupload": "Folgje dizze side",
+ "watchthisupload": "Folgje dizze triem",
"filewasdeleted": "Der is earder in triem mei dizze namme fuorthelle.\nRieplachtsje it $1 foar't jo him op'e nij tafoegje.",
"filename-bad-prefix": "De namme fan de triem dy't jo oanbiede begjint mei '''\"$1\"''', dit wiist op in namme dy't automatysk troch in digitale kamera oanmakke wurdt. Feroarje de namme as jo wolle yn ien dy't in omskriuwing jout fan de triem.",
"filename-prefix-blacklist": " #<!-- lit dizze line exakt sa't er is --> <pre>\n# Syntax is as folget:\n# * Alles fan in \"#\"-teken oan't de ein fan de line is in kommintaar\n# * Elke net blanke line is a foarheaksel foar triemnammen sa't dy automatysk jûn wurde troch digitale kamera's\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # guon mobile tillefoanen\nIMG # algemien\nJD # Jenoptik\nMGP # Pentax\nPICT # ferskaat\n #</pre> <!-- lit dizze line exakt sa't er is -->",
@@ -955,14 +997,14 @@
"upload-proto-error-text": "Oanbieden mei dizze metoade freget URL's dy't begjinne mei <code>http://</code> of <code>ftp://</code>.",
"upload-file-error": "Ynterne fout",
"upload-file-error-text": "Der wie in ynterne fout doe't in tydlike triem op'e server oanmakke waard.\nNim kontakt op mei in [[Special:ListUsers/sysop|behearder]].",
- "upload-misc-error": "Unbekende oanbiedfout",
+ "upload-misc-error": "Unbekende oanbiedflater",
"upload-misc-error-text": "Der is by it oanbieden in ûnbekende fout optreden.\nKontrolearje of de URL krekt en beskikber is en besykje it nochris.\nAs it probleem oanhâldt, nim dan kontakt op mei in\n[[Special:ListUsers/sysop|behearder]].",
"upload-curl-error6": "Koe de URL net berikke",
"upload-curl-error6-text": "De opjûne URL is net berikber.\nKontrolearje oft de URL krekt is en oft de webside beskikber is.",
"upload-curl-error28": "Oanbiedtiid foarby",
"upload-curl-error28-text": "It duorre te lang foar't it webstee andere.\nKontrolearje oft it webstee beskikber is, wachtsje efkes en besykje it dan wer.\nJo kinne it faaks besykje as it wat minder drok is.",
"license": "Lisinsje:",
- "license-header": "Lisinsje:",
+ "license-header": "Lisinsje",
"nolicense": "Neat keazen",
"license-nopreview": "(Foarfertoaning net beskikber)",
"upload_source_url": " (in jildige, publyk tagonklike URL)",
@@ -970,7 +1012,8 @@
"listfiles-summary": "Op dizze spesjale side binne alle tafoege triemmen te besjen.\nStandert wurde de lêst tafoege triemmen boppe oan de list werjûn.\nKlikken op in kolomkop feroaret de sortearring.",
"listfiles_search_for": "Sykje nei triem:",
"imgfile": "triem",
- "listfiles": "Ofbyld list",
+ "listfiles": "Triemlist",
+ "listfiles_thumb": "Miniatuerôfbylding",
"listfiles_date": "Datum",
"listfiles_name": "Namme",
"listfiles_user": "Meidogger",
@@ -992,7 +1035,7 @@
"filehist-nothumb": "Gjin miniatuerôfbylding",
"filehist-user": "Meidogger",
"filehist-dimensions": "Ofmjittings",
- "filehist-filesize": "Triem grutte",
+ "filehist-filesize": "Triemgrutte",
"filehist-comment": "Opmerkings",
"imagelinks": "Ofbyldkeppelings",
"linkstoimage": "Dizze {{PLURAL:$1|side is|$1 siden binne}} keppele oan it ôfbyld:",
@@ -1008,10 +1051,10 @@
"filerevert": "$1 weromsette",
"filerevert-legend": "Triem weromsette",
"filerevert-intro": "Jo binne '''[[Media:$1|$1]]''' oan it weromdraaien ta de [$4 ferzje op $2, $3].",
- "filerevert-comment": "Oanmerking:",
+ "filerevert-comment": "Reden:",
"filerevert-defaultcomment": "Weromdraaid ta de ferzje op $1, $2",
"filerevert-submit": "werom sette",
- "filerevert-success": "'''[[Media:$1|$1]]''' is weromdraaid ta de [$4 ferzje op $2, $3].",
+ "filerevert-success": "<strong>[[Media:$1|$1]]</strong> is weromdraaid ta de [$4 ferzje op $2, $3].",
"filerevert-badversion": "Der is gjin foarige lokale ferzje fan dizze triem fan 'e opjûne tiid.",
"filedelete": "Wiskje $1",
"filedelete-legend": "Wiskje triem",
@@ -1019,9 +1062,9 @@
"filedelete-intro-old": "Jo wiskje de ferzje fan '''[[Media:$1|$1]]''' fan [$4 $3, $2].",
"filedelete-comment": "Reden:",
"filedelete-submit": "Wiskje",
- "filedelete-success": "'''$1''' is wiske.",
+ "filedelete-success": "<strong>$1</strong> is wiske.",
"filedelete-success-old": "De ferzje fan '''[[Media:$1|$1]]''' fan $2, $3 is fuorthelle.",
- "filedelete-nofile": "'''$1''' bestiet net.",
+ "filedelete-nofile": "<strong>$1</strong> bestiet net.",
"filedelete-nofile-old": "Der is gjin opsleine ferzje fan '''$1''' mei de oanjûne eigenskippen.",
"filedelete-otherreason": "Oare/eventuele reden:",
"filedelete-reason-otherlist": "Oare reden",
@@ -1038,12 +1081,12 @@
"unusedtemplateswlh": "oare keppelings",
"randompage": "Samar in side",
"randompage-nopages": "Der binne gjin siden yn'e nammeromte \"$1\".",
+ "randomincategory-category": "Kategory:",
"randomredirect": "Samar in trochferwizing",
"randomredirect-nopages": "Der binne gjin trochferwizings yn'e nammerûmte \"$1\".",
"statistics": "Statistyk",
"statistics-header-pages": "Sidestatistiken",
"statistics-header-edits": "Bewurkingsstatistiken",
- "statistics-header-views": "Sidewerjefte-statistiken",
"statistics-header-users": "Meidogger-statistyk",
"statistics-articles": "Ynhâldlike siden",
"statistics-pages": "Siden",
@@ -1051,12 +1094,9 @@
"statistics-files": "Triemmen",
"statistics-edits": "Sidebewurkings sûnt it begjin fan {{SITENAME}}",
"statistics-edits-average": "Trochstrings tal bewurkings per side",
- "statistics-views-total": "Totaal oantal werjûne siden",
- "statistics-views-peredit": "Werjûne siden per bewurking",
"statistics-users": "Registrearre [[Special:ListUsers|brûkers]]",
"statistics-users-active": "Aktive brûkers",
"statistics-users-active-desc": "Brûkers dy't yn 'e ôfrûne {{PLURAL:$1|dei|$1 dagen}} in hanneling útfierd hawwe",
- "statistics-mostpopular": "Meast besjoene siden",
"doubleredirects": "Dûbelde synonimen",
"doubleredirectstext": "<b>Let op!</b> Der kinne missen yn dizze list stean! Dat komt dan ornaris troch oare keppelings ûnder de \"#REDIRECT\". Eltse rigel jout keppelings nei it earste synonym, it twadde synonym en dan it werklike doel.",
"double-redirect-fixed-move": "[[$1]] is ferplakt en is no in trochferwizing nei [[$2]]",
@@ -1085,7 +1125,6 @@
"uncategorizedtemplates": "Net-kategorisearre sjabloanen",
"unusedcategories": "Lege kategoryen",
"unusedimages": "Lossteande ôfbylden",
- "popularpages": "Populêre siden",
"wantedcategories": "Nedige kategoryen",
"wantedpages": "Nedige siden",
"wantedfiles": "Net-besteande triemmen mei ferwizings",
@@ -1105,6 +1144,8 @@
"protectedpages-indef": "Allinne blokkades sûnder ferrindatum",
"protectedpages-cascade": "Allinne befeiligje mei de kaskade-opsje",
"protectedpagesempty": "Op it stuit binne der gjin siden befeilige, dy't oan dizze betingsten foldogge.",
+ "protectedpages-reason": "Reden",
+ "protectedpages-unknown-timestamp": "Unbekend",
"protectedtitles": "Skoattele titels",
"protectedtitlesempty": "Der binne op it stuit gjin sidenammen befeilige, dy't oan dizze betingsten foldogge.",
"listusers": "Meidoggerlist",
@@ -1112,7 +1153,7 @@
"listusers-creationsort": "Oarderje op dei fan oanmeitsjen",
"usereditcount": "$1 {{PLURAL:$1|bewurking|bewurkings}}",
"newpages": "Nije siden",
- "newpages-username": "Meidoggernamme:",
+ "newpages-username": "Brûkersnamme:",
"ancientpages": "Alde siden",
"move": "Werneam",
"movethispage": "Werneam dizze side",
@@ -1125,15 +1166,16 @@
"pager-newer-n": "{{PLURAL:$1|nijere 1|nijere $1}}",
"pager-older-n": "{{PLURAL:$1|1 âlder|$1 âlder}}",
"suppress": "Tafersjoch",
+ "apihelp": "API-help",
"booksources": "Boekynformaasje",
"booksources-search-legend": "Boarnen en ynformaasje oer in boek sykje",
- "booksources-go": "Sykje",
+ "booksources-search": "Sykje",
"booksources-text": "Hjirûnder is in list mei keppelings nei oare websites dy't nije of brûkte boeken ferkeapje en dy't faaks mear ynformaasje hawwe oer it boek dat jo sykje:",
"booksources-invalid-isbn": "It ynjûne ISBN liket net jildich te wêzen.\nKontrolearje oft jo faaks in flater makke hawwe by de ynfier.",
- "specialloguserlabel": "Meidogger:",
- "speciallogtitlelabel": "Sidenamme:",
+ "specialloguserlabel": "Útfierende meidogger:",
+ "speciallogtitlelabel": "Doel (titel of brûker):",
"log": "Lochs",
- "all-logs-page": "Alle lochboeken",
+ "all-logs-page": "Alle iepenbiere lochboeken",
"alllogstext": "Dit is it kombinearre logboek fan {{SITENAME}}.\nJo kinne ek kieze foar spesifike logboeken en filterje op brûker (haadstêfgefoelich) en sidenamme (haadstêfgefoelich).",
"logempty": "Gjin treffers yn it loch.",
"log-title-wildcard": "Siden sykje dy't mei dizze namme begjinne",
@@ -1158,7 +1200,7 @@
"sp-deletedcontributions-contribs": "bydragen",
"linksearch": "Eksterne ferwizings sykje",
"linksearch-pat": "Sykpatroan:",
- "linksearch-ns": "Nammerûmte:",
+ "linksearch-ns": "Nammeromte:",
"linksearch-ok": "Sykje",
"linksearch-text": "Wildcards lykas \"*.wikipedia.org\" of \"*.org\" binne tastien.<br />\nStipe protokollen: <code>$1</code>",
"linksearch-line": "$1 hat in ferwizing yn $2",
@@ -1179,22 +1221,25 @@
"listgrouprights-removegroup": "Kin brûkers út dizze {{PLURAL:$2|groep|groepen}} fuorthelje: $1",
"listgrouprights-addgroup-all": "Kin brûkers oan alle groepen tafoegje",
"listgrouprights-removegroup-all": "Kin brûkers út alle groepen fuorthelje",
+ "listgrouprights-namespaceprotection-namespace": "Nammeromte",
"mailnologin": "Gjin adres beskikber",
"mailnologintext": "Jo moatte [[Special:UserLogin|oanmelden]] wêze, en in jildich e-postadres [[Special:Preferences|ynsteld]] hawwe, om oan oare meidoggers e-post stjoere te kinnen.",
- "emailuser": "Skriuw meidogger",
- "emailpage": "E-post nei meidogger",
+ "emailuser": "E-mail meidogger",
+ "emailuser-title-notarget": "E-mail nei meidogger",
+ "emailpage": "E-mail nei meidogger",
"emailpagetext": "Fia dit berjocht kinne jo in e-mail oan dizze brûker ferstjoere.\nIt e-mailadres dat jo opjûn hawwe by [[Special:Preferences|jo foarkarren]] wurdt as ôfstjoerder brûkt.\nDe ûntfanger kin dus daliks nei jo reagearje.",
- "defemailsubject": "E-post fan {{SITENAME}}",
+ "defemailsubject": "E-mail fan {{SITENAME}}-brûker \"$1\"",
"noemailtitle": "Gjin e-postadres",
"noemailtext": "Dizze meidogger hat gjin jildich e-postadres ynsteld, of hat oanjûn gjin post fan oare meidoggers krije te wollen.",
"nowikiemailtext": "Dizze brûker wol gjin e-mail ûntfange fan oare brûkers.",
+ "emailusername": "Brûkersnamme:",
"email-legend": "In e-mail ferstjoere nei in oare brûker fan {{SITENAME}}",
"emailfrom": "Fan:",
"emailto": "Oan:",
- "emailsubject": "Oer",
+ "emailsubject": "Ûnderwerp:",
"emailmessage": "Berjocht:",
"emailsend": "Stjoer",
- "emailsent": "Berjocht stjoerd",
+ "emailsent": "E-mail stjoerd",
"emailsenttext": "Jo berjocht is stjoerd.",
"watchlist": "Folchlist",
"mywatchlist": "Folchlist",
@@ -1209,7 +1254,7 @@
"notanarticle": "Dit kin net folge wurde.",
"watchlist-details": "Jo folchlist hat {{PLURAL:$1|$1 side|$1 siden}}, oerlissiden net meiteld.",
"wlnote": "Dit {{PLURAL:$1|is de lêste feroaring|binne de lêste '''$1''' feroarings}} yn de lêste {{PLURAL:$2|oer|'''$2''' oeren}}.",
- "wlshowlast": "Lit feroarings sjen fan de lêste $1 oeren $2 dagen $3",
+ "wlshowlast": "Lit feroarings sjen fan de lêste $1 oeren $2 dagen",
"watching": "Dwaande mei op'e folchlist te setten ...",
"unwatching": "Dwaande mei fan'e folchlist ôf te heljen ...",
"enotif_impersonal_salutation": "meidogger fan {{SITENAME}}",
@@ -1223,7 +1268,7 @@
"exbeforeblank": "foar de tekst wiske wie, wie dat: '$1'",
"delete-confirm": "\"$1\" wiskje",
"delete-legend": "Wiskje",
- "historywarning": "Warskôging: De side dy't jo wiskje wolle hat skiednis:",
+ "historywarning": "<strong>Warskôging:</strong> De side dy't jo wiskje wolle hat skiednis:",
"confirmdeletetext": "Jo binne dwaande mei it foar altyd wiskjen fan in side\nof ôfbyld, tegearre mei alle skiednis, út de databank.\nBefêstigje dat jo dat wier dwaan wolle. Befêstigje dat dat is wat jo witte wat it gefolch\nis en dat jo dit dogge neffens de [[{{MediaWiki:Policy-url}}]].",
"actioncomplete": "Dien",
"deletedtext": "\"$1\" is wiske.\nSjoch \"$2\" foar in list fan wat resint wiske is.",
@@ -1236,7 +1281,6 @@
"deletereasonotherlist": "Oare reden",
"deletereason-dropdown": "*Faak-brûkte redenen\n** Frege troch de skriuwer\n** Skeining fan auteursrjocht\n** Fandalisme",
"rollback": "Feroarings werom sette",
- "rollback_short": "Werom sette",
"rollbacklink": "feroaring werom sette",
"rollbackfailed": "Feroaring werom sette net slagge",
"cantrollback": "Dizze feroaring kin net werom setten wurde, om't der mar ien skriuwer is.",
@@ -1256,14 +1300,15 @@
"protect_expiry_invalid": "Tiid fan ferrinnen is net jildich.",
"protect_expiry_old": "Tiid fan ferrinnen leit yn it ferline.",
"protect-text": "Hjir kin jo it nivo fan skoatteljen sjen en oanpasse foar de side '''$1'''.",
- "protect-locked-blocked": "Jo kinne it befeiligingsnivo net feroarje wylst jo blokkearre binne.\nHjir binne de hjoeddeiske ynstellings foar de side '''$1''':",
- "protect-locked-dblock": "It befeiligingsnivo kin net feroare wurde om't de database sletten is.\nHjir binne de hjoeddeiske ynstellings foar de side '''$1''':",
- "protect-locked-access": "'''Jo brûker hat gjin rjochten om it befeiligingsnivo te feroarjen.'''\nDit binne de rinnende ynstellings foar de side '''$1''':",
+ "protect-locked-blocked": "Jo kinne it befeiligingsnivo net feroarje wylst jo blokkearre binne.\nHjir binne de hjoeddeiske ynstellingen foar de side '''$1''':",
+ "protect-locked-dblock": "It befeiligingsnivo kin net feroare wurde om't de database sletten is.\nHjir binne de hjoeddeiske ynstellingen foar de side '''$1''':",
+ "protect-locked-access": "'''Jo brûker hat gjin rjochten om it befeiligingsnivo te feroarjen.'''\nDit binne de rinnende ynstellingen foar de side '''$1''':",
"protect-cascadeon": "Dizze side is op 't stuit befeilige, om't er yn 'e folgjende {{PLURAL:$1|side|siden}} opnommen is, dy't befeilige {{PLURAL:$1|is|binne}} mei de kaskade-opsje. It befeiligingsnivo feroarje hat alhiel gjin effekt.",
- "protect-default": "(standert)",
+ "protect-default": "Tastean foar alle brûkers",
"protect-fallback": "Hjir is it rjocht \"$1\" foar nedich",
"protect-level-autoconfirmed": "Slút anonymen út",
"protect-level-sysop": "Allinnich behearders",
+ "protect-summary-desc": "[$1=$2] ($3)",
"protect-summary-cascade": "kaskade",
"protect-expiring": "ferrint $1 (UTC)",
"protect-cascade": "Underlizzende siden - skoattelje ek alle siden dy't in ûnderdiel útmeitsje fan dizze side",
@@ -1274,7 +1319,7 @@
"minimum-size": "Min. grutte",
"maximum-size": "Max. grutte:",
"pagesize": "(bytes)",
- "restriction-edit": "Wizigje",
+ "restriction-edit": "Bewurkje",
"restriction-move": "Werneam",
"restriction-create": "Oanmeitsje",
"restriction-upload": "Oanbiede",
@@ -1283,7 +1328,7 @@
"restriction-level-all": "alle nivo's",
"undelete": "Side werom set",
"undeletepage": "Side besjen en werom sette",
- "undeletepagetitle": "'''Hjirûnder steane de fuorthelle bewurkings fan [[:$1|$1]]'''.",
+ "undeletepagetitle": "<strong>Hjirûnder steane de fuorthelle bewurkings fan [[:$1|$1]]</strong>.",
"viewdeletedpage": "Wiske siden besjen",
"undeletepagetext": "Dizze siden binne wiske, mar sitte noch yn it argyf en kinne weromset wurde. (It argyf kin út en troch leechmakke wurde.)",
"undelete-fieldset-title": "Ferzjes werom sette",
@@ -1295,21 +1340,23 @@
"undeletebtn": "Weromsette",
"undeletelink": "besjen/tebeksette",
"undeleteinvert": "Omkearde seleksje",
- "undeletecomment": "Utlis foar weromsetten:",
+ "undeletecomment": "Reden:",
"undelete-header": "Sjoch [[Special:Log/delete|de wiskloch]] foar resint wiske siden.",
"undelete-search-box": "Sykje wiske siden",
"undelete-search-prefix": "Lit siden sjen dy't begjinne mei:",
"undelete-search-submit": "Sykje",
"undelete-no-results": "Gjin oerienkommende siden fûn yn it wisk argyf.",
+ "undelete-show-file-submit": "Ja",
+ "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
"namespace": "Nammeromte:",
"invert": "Seleksje útsein",
"blanknamespace": "(Haadnammerûmte)",
- "contributions": "Meidogger-bydragen",
+ "contributions": "{{GENDER:$1|Meidogger}}-bydragen",
"contributions-title": "Bydragen fan $1",
- "mycontris": "Myn bydragen",
- "contribsub2": "Foar \"$1 ($2)\"",
+ "mycontris": "Bydragen",
+ "contribsub2": "Foar {{GENDER:$3|$1}} ($2)",
"nocontribs": "Der binne gjin feroarings fûn dyt't hjirmei oerienkomme.",
- "uctop": " (boppen)",
+ "uctop": "(lêste feroaring)",
"month": "Fan moanne (en earder):",
"year": "Fan jier (en earder):",
"sp-contributions-newbies": "Allinne bydragen fan nije brûkers besjen",
@@ -1317,8 +1364,8 @@
"sp-contributions-newbies-title": "Bydragen fan nije meidoggers",
"sp-contributions-blocklog": "Blokkearlochboek",
"sp-contributions-deleted": "Wiske meidogger bydragen",
- "sp-contributions-talk": "Oerlis",
- "sp-contributions-userrights": "Behear fan meidoggerrjochten",
+ "sp-contributions-talk": "oerlis",
+ "sp-contributions-userrights": "behear fan meidoggerrjochten",
"sp-contributions-search": "Sykje nei bydragen",
"sp-contributions-username": "IP Adres of meidoggernamme:",
"sp-contributions-submit": "Sykje",
@@ -1330,14 +1377,15 @@
"nolinkshere-ns": "Gjin siden yn de keazen nammeromte keppelje nei '''[[:$1]]'''.",
"isredirect": "synonym",
"istemplate": "opnaam",
- "isimage": "byld keppeling",
- "whatlinkshere-prev": "{{PLURAL:$1|foargeande|foargeande $1}}",
+ "isimage": "triemkeppeling",
+ "whatlinkshere-prev": "{{PLURAL:$1|foarige|foarige $1}}",
"whatlinkshere-next": "{{PLURAL:$1|folgjende|folgjende $1}}",
"whatlinkshere-links": "← keppelings",
"whatlinkshere-hideredirs": "$1 trochferwizings",
"whatlinkshere-hidetrans": "$1 trânsklúzjes",
"whatlinkshere-hidelinks": "$1 keppelings",
- "blockip": "Slút meidogger út",
+ "whatlinkshere-filters": "Filters",
+ "blockip": "Slút {{GENDER:$1|meidogger}} út",
"blockip-legend": "Slút brûker út",
"blockiptext": "Brûk dizze fjilden om in meidogger fan skriuwtagong út te sluten.\nDat soe allinnich fanwege fandalisme dien wurde moatte, sa't de\n[[{{MediaWiki:Policy-url}}|útslut-rie]] it oanjout.\nMeld de krekte reden! Neam bygelyks de siden dy't oantaaste waarden.",
"ipaddressorusername": "IP Adres of meidoggernamme:",
@@ -1359,12 +1407,14 @@
"unblockiptext": "Brûk dizze fjilden om in meidogger wer skriuwtagong te jaan.",
"ipusubmit": "Lit dizze meidogger wer ta.",
"ipblocklist": "List fan útsletten ynternet-adressen en meidochnammen",
+ "blocklist-reason": "Reden",
"ipblocklist-submit": "Sykje",
"infiniteblock": "trochgeand",
"blocklink": "slút út",
"unblocklink": "lit yn",
"change-blocklink": "blokkade feroarje",
"contribslink": "bydragen",
+ "emaillink": "e-mail stjoere:",
"autoblocker": "Jo wiene útsletten om't jo ynternet-adres oerienkomt mei dat fan \"[[User:$1|$1]]\". Foar it útsluten fan dy meidogger waard dizze reden jûn: \"$2\".",
"blocklogpage": "Utslútloch",
"blocklogentry": "\"[[$1]]\" útsletten foar $2 $3",
@@ -1375,8 +1425,8 @@
"ipb_cant_unblock": "Flater: It útsluten fan ID $1 kin net fûn wurde. It is miskien al net mear útsluten.",
"lockdb": "Meitsje de database 'Net-skriuwe'",
"unlockdb": "Meitsje de databank skriuwber",
- "lockdbtext": "Wylst de databank skoattele is, is foar meidoggers it feroarjen fan siden, ynstellings, folchlisten, ensfh. net mooglik.\n\nBefêstigje dat dit is sa't jo it hawwe wolle, en dat jo de databank wer frijjouwe as jo ûnderhâld ree is.",
- "unlockdbtext": "As de databank frijjûn wurdt, is foar meidoggers it feroarjen fan siden, ynstellings, folchlisten ensfh. wer mooglik. Befêstigje dat dit is wat jo wolle.",
+ "lockdbtext": "Wylst de databank skoattele is, is foar meidoggers it feroarjen fan siden, ynstellingen, folchlisten, ensfh. net mooglik.\n\nBefêstigje dat dit is sa't jo it hawwe wolle, en dat jo de databank wer frijjouwe as jo ûnderhâld ree is.",
+ "unlockdbtext": "As de database frijjûn wurdt, is foar meidoggers it feroarjen fan siden, ynstellingen, folchlisten ensfh. wer mooglik.\nBefêstigje dat dit is wat jo wolle.",
"lockconfirm": "Ja, ik wol wier de databank 'Net--skriuwe' meitsje.",
"unlockconfirm": "Ja, ik wol wier de databank skriuwber meitsje.",
"lockbtn": "Meitsje de database 'Net-skriuwe'",
@@ -1386,6 +1436,7 @@
"unlockdbsuccesssub": "Database is skriuwber",
"lockdbsuccesstext": "De {{SITENAME}} databank is 'Net-skriuwe' makke.\n<br />Tink derom en meitsje de databank skriuwber as jo ûnderhâld ree is.",
"unlockdbsuccesstext": "De {{SITENAME}} databank is skriuwber makke.",
+ "lockedbyandtime": "(troch {{GENDER:$1|$1}} op $2 om $3)",
"move-page": "Werneam $1",
"move-page-legend": "Werneam side",
"movepagetext": "Dit werneamt in side, mei alle sideskiednis.\nDe âlde titel wurdt in trochferwizing nei de nije.\nKeppelings mei de âlde side wurde net feroare;\ngean sels nei of't der dûbele of misse ferwizings binne.\nIt hinget fan jo ôf of't de siden noch keppelen binne sa't it mient wie.\n\nDe side wurdt '''net''' werneamt as der al in side mei dy namme is, útsein as it in side\nsûnder skiednis is en de side leech is of in trochferwizing is. Sa kinne jo in side\ndaalks weromneame as jo in flater meitsje, mar jo kinne in oare side net oerskriuwe.",
@@ -1396,7 +1447,7 @@
"move-watch": "Folch dizze side",
"movepagebtn": "Werneam side",
"pagemovedsub": "Werneamen slagge",
- "movepage-moved": "'''\"$1\" hjit no \"$2\"'''",
+ "movepage-moved": "<strong>\"$1\" hjit no \"$2\"</strong>",
"articleexists": "Der is al in side mei dy namme, of oars is de namme dy't jo oanjûn hawwe net tastien. Besykje it op 'e nij.",
"movetalk": "Titel fan oerlisside ek feroarje, as dy der is.",
"movepage-page-moved": "De side $1 is werneamd nei $2.",
@@ -1405,13 +1456,14 @@
"movereason": "Reden:",
"revertmove": "werom sette",
"delete_and_move": "Wiskje en werneam",
- "delete_and_move_text": "== Wiskjen nedich ==\nDe doelside \"[[:$1]]\" is der al. Moat dy wiske wurde om plak te meitsjen foar it werneamen?",
+ "delete_and_move_text": "== Wiskjen nedich ==\nDe doelside \"[[:$1]]\" is der al.\nMoat dy wiske wurde om plak te meitsjen foar it werneamen?",
"delete_and_move_confirm": "Ja, wiskje de side",
"delete_and_move_reason": "Wiske om plak te meitsjen foar in werneamde side",
"export": "Eksportearje",
"export-submit": "Eksportearje",
"export-addcattext": "Siden tafoegje fan kategory:",
"export-addcat": "Tafoegje",
+ "export-addns": "Tafoegje",
"export-download": "Fêstlizze as triem",
"export-templates": "Tafoegje berjochten",
"allmessages": "Alle wikiberjochten",
@@ -1419,12 +1471,15 @@
"allmessagesdefault": "Standerttekst",
"allmessagescurrent": "Tekst yn de nijste ferzje",
"allmessagestext": "Dit is in list fan alle systeemberjochten beskikber yn de MediaWiki-nammeromte.\nSjoch: [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation], [//translatewiki.net translatewiki.net].",
+ "allmessages-filter-all": "Alle",
+ "allmessages-language": "Taal:",
"thumbnail-more": "Fergrutsje",
"filemissing": "Triem net fûn",
"thumbnail_error": "Flater by it oanmeitsjen fan thumbnail: $1",
"thumbnail_dest_directory": "Kin de doelmap net oanmeitsje",
"import": "Importearje siden",
"import-interwiki-submit": "Ymportearje",
+ "import-upload-filename": "Triemnamme:",
"import-comment": "Oanmerking:",
"importstart": "Siden oan it ymportearjen ...",
"import-revision-count": "$1 {{PLURAL:$1|ferzje|ferzjes}}",
@@ -1491,14 +1546,21 @@
"tooltip-diff": "Sjen litte hokker feroarings jo yn'e tekst makke hawwe.",
"tooltip-compareselectedversions": "Sjoch de ferskillen tusken de twa keazen ferzjes fan dizze side.",
"tooltip-watch": "Foegje dizze side ta oan jo folchlist [alt-w]",
+ "interlanguage-link-title": "$1 – $2",
+ "interlanguage-link-title-nonlang": "$1 – $2",
"common.js": "/* Alles wat hjir oan JavaScript delset wurdt, wurdt foar alle brûkers laden foar eltse side! */",
"anonymous": "Anonime {{PLURAL:$1|meidogger|meidoggers}} fan {{SITENAME}}",
"siteuser": "{{SITENAME}} meidogger $1",
+ "anonuser": "{{SITENAME}} anonime brûker $1",
"othercontribs": "Basearre op wurk fan $1.",
"others": "Oaren",
"siteusers": "{{SITENAME}} {{PLURAL:$2|meidogger|meidoggers}} $1",
"spamprotectiontext": "De side dy't jo fêstlizze woene is blokkearre troch in spam filter. Dit wurdt wierskynlik feroarsake troch in ferwizing nei in ekstern webstee.",
"spamprotectionmatch": "De neikommende tekst hat it spam filter aktivearre: $1",
+ "pageinfo-redirects-value": "$1",
+ "pageinfo-toolboxlink": "Sidegegevens",
+ "pageinfo-contentpage-yes": "Ja",
+ "pageinfo-protect-cascading-yes": "Ja",
"markaspatrolleddiff": "Markearje as kontroleare",
"markaspatrolledtext": "Markearje dizze side as kontrolearre",
"markedaspatrolled": "Markearre as kontrolearre",
@@ -1506,45 +1568,90 @@
"markedaspatrollederror": "Kin net as kontrolearre markearre wurde",
"markedaspatrollederrortext": "Jo moatte in ferzje oanjaan dy't jo as kontrolearre markearje.",
"markedaspatrollederror-noautopatrol": "Jo meie jo eigen bewurkings net sels markearre.",
- "previousdiff": "← Toan eardere ferskillen",
+ "previousdiff": "← Âldere feroaring",
"nextdiff": "Neikommende ferskillen →",
"imagemaxsize": "Behein ôfmjittings fan ôfbyld op beskriuwingsside ta:",
"thumbsize": "Mjitte fan miniatueren:",
+ "widthheight": "$1 × $2",
+ "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|side|siden}}",
"file-info": "triemgrutte: $1, MIME-type: $2",
- "file-info-size": "$1 × $2 pixel, triemgrutte: $3, MIME type: $4",
+ "file-info-size": "$1 × $2 pixels, triemgrutte: $3, MIME-type: $4",
+ "file-info-size-pages": "$1 × $2 pixels, triemgrutte: $3, MIME-type: $4, $5 {{PLURAL:$5|side|siden}}",
"file-nohires": "Gjin hegere resolúsje beskikber.",
"svg-long-desc": "SVG-triem, nominaal $1 × $2 pixels, triemgrutte: $3",
- "show-big-image": "Hegere resolúsje",
+ "show-big-image": "Oarspronklike triem",
+ "show-big-image-size": "$1 × $2 pixels",
"newimages": "Nije ôfbylden",
"imagelisttext": "Dit is in list fan '''$1''' {{PLURAL:$1|triem|triemen}}, op $2.",
"newimages-legend": "Filter",
"noimages": "Neat te sjen.",
"ilsubmit": "Sykje",
"bydate": "datum",
+ "video-dims": "$1, $2 × $3",
+ "seconds-abbrev": "$1 s",
+ "minutes-abbrev": "$1 min",
+ "hours-abbrev": "$1 o",
+ "days-abbrev": "$1 d",
+ "seconds": "{{PLURAL:$1|$1 sekonde|$1 sekonden}}",
+ "minutes": "{{PLURAL:$1|$1 minút|$1 minuten}}",
+ "hours": "{{PLURAL:$1|$1 oere|$1 oeren}}",
+ "days": "{{PLURAL:$1|$1 dei|$1 dagen}}",
+ "weeks": "{{PLURAL:$1|$1 wike|$1 wiken}}",
+ "months": "{{PLURAL:$1|$1 moanne|$1 moannen}}",
+ "years": "{{PLURAL:$1|$1 jier|$1 jierren}}",
+ "ago": "$1 lyn",
+ "just-now": "sakrekt",
+ "hours-ago": "$1 {{PLURAL:$1|oere|oeren}} lyn",
+ "minutes-ago": "$1 {{PLURAL:$1|minút|minuten}} lyn",
+ "seconds-ago": "$1 {{PLURAL:$1|sekonde|sekonden}} lyn",
+ "monday-at": "moandei om $1",
+ "tuesday-at": "tiisdei om $1",
+ "wednesday-at": "woansdei om $1",
+ "thursday-at": "tongersdei om $1",
+ "friday-at": "freed om $1",
+ "saturday-at": "sneon om $1",
+ "sunday-at": "snein om $1",
+ "yesterday-at": "juster om $1",
"bad_image_list": "De opmaak is as folget:\n\nAllinne rigels fan in list (rigels dy't begjinne mei *) wurde ferwurke. De earste link op in rigel moat in link wêze nei in net winske ôfbylding.\nAlle folgjende links dy't op deselde rigel steane, wurde behannele as útsûndering, lykas bygelyks siden dêr't de ôfbylding yn'e tekst opnommen is.",
"metadata": "Metadata",
"metadata-help": "Dizze triem befettet oanfoljende ynformaasje, dy't troch in fotokamera, scanner of fotobewurkingsprogramma tafoege wêze kin. As de triem oanpast is, komme de details mûglik net folslein oerien mei de feroare ôfbylding.",
"metadata-expand": "Utwreide details sjen litte",
"metadata-collapse": "Ferskûlje útwreide details",
"metadata-fields": "De EXIF-metadatafjilden yn dit berjocht steane op in ôfbyldingsside as de metadatatabel ynklapt is. Oare fjilden wurde ferburgen.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-langitem-default": "$1",
+ "exif-orientation": "Oriïntaasje",
"exif-samplesperpixel": "Oantal komponinten",
"exif-xresolution": "Horizontale resolúsje",
"exif-yresolution": "Fertikale resolúsje",
"exif-imagedescription": "Ofbylding titel",
"exif-make": "Kamera makker",
+ "exif-model": "Kameramodel",
+ "exif-software": "Brûkte software",
"exif-artist": "Auteur",
+ "exif-exifversion": "Exif-ferzje",
"exif-colorspace": "Kleurromte",
"exif-compressedbitsperpixel": "Ofbylding kompresjemetoade",
"exif-usercomment": "Opmerkings",
"exif-relatedsoundfile": "Besibbe audiotriem",
+ "exif-datetimeoriginal": "Tiidstip gegevensoanmaak",
+ "exif-datetimedigitized": "Tiidstip digitalisearring",
"exif-exposuretime-format": "$1 sek ($2)",
+ "exif-fnumber-format": "f/$1",
+ "exif-shutterspeedvalue": "APEX-slutertiid",
+ "exif-aperturevalue": "APEX-beljochting",
+ "exif-brightnessvalue": "APEX-helderens",
"exif-flash": "Flits",
+ "exif-focallength-format": "$1 mm",
"exif-filesource": "Triemboarne",
"exif-contrast": "Kontrast",
"exif-sharpness": "Skerpte",
+ "exif-gpslatitude": "Breedtegraad",
+ "exif-gpslongitude": "Lingtegraad",
+ "exif-gpsaltitude": "Hichte",
"exif-gpstimestamp": "GPS-tiid (atoomklok)",
"exif-gpsspeedref": "Snelheidsienheid",
"exif-gpsdatestamp": "GPS-datum",
+ "exif-coordinate-format": "$1° $2′ $3″ $4",
"exif-source": "Boarne",
"exif-contact": "Kontakt ynformaasje",
"exif-writer": "Skriuwer",
@@ -1555,6 +1662,8 @@
"exif-cameraownername": "Eigner fan de kamera",
"exif-copyrightowner": "Copyright eigner",
"exif-disclaimer": "Foarbehâld",
+ "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+ "exif-subjectnewscode-value": "$2 ($1)",
"exif-unknowndate": "Datum ûnbekend",
"exif-orientation-1": "Normaal",
"exif-componentsconfiguration-0": "bestiet net",
@@ -1577,8 +1686,8 @@
"exif-subjectdistancerange-2": "Tichtby",
"exif-gpsdestdistance-m": "Milen",
"exif-gpsdestdistance-n": "Seemilen",
- "watchlistall2": "alles",
- "namespacesall": "alles",
+ "exif-urgency-normal": "Normaal ($1)",
+ "namespacesall": "alle",
"monthsall": "alle",
"confirmemail": "Befêstigjen netpostadres",
"confirmemail_text": "{{SITENAME}} freget dat jo jo netpostadres befêstigje eart jo hjir netpost brûke. Brûk de knop hjirûnder om josels in befêstigingskoade ta te stjoeren op it adres dat jo opjûn hawwe. Iepenje de koade dan yn jo blêder om te befêstigjen dat jo netpostadres jildich is.",
@@ -1592,14 +1701,25 @@
"confirmemail_body": "Immen, nei gedachten jo, hat him by {{SITENAME}} oanmelde as \"$2\", mei dit netpostadres ($1).\n\nHjirtroch komme ek de netpostfunksjes fan {{SITENAME}} foar jo beskikber. Iepenje de neikommende keppeling om te befêstigjen dat jo wier josels by {{SITENAME}} mei dit netpostadres oanmelde hawwe:\n\n$3\n\nAt jo dat *net* wienen, brûk dy keppeling dan net, en klik hjir:\n\n$5\n\nDizze befêstigingskoade ferrint dan op $4.",
"scarytranscludetoolong": "[URL-adres is te lang]",
"confirmrecreate": "Sûnt jo begûn binne dizze side te bewurkjen, hat meidogger [[User:$1|$1]] ([[User talk:$1|oerlis]]) de side wiske. De reden dy't derfoar jûn waard wie:\n: ''$2''\nWolle jo de side wier op 'e nij skriuwe?",
- "confirm_purge_button": "Okee",
- "confirm-watch-button": "Okee",
- "confirm-unwatch-button": "Okee",
+ "unit-pixel": "px",
+ "confirm_purge_button": "OK",
+ "confirm-watch-button": "OK",
+ "confirm-unwatch-button": "OK",
"confirm-unwatch-top": "Dizze side fan myn folchlist ôfhelje",
- "imgmultipageprev": "side werom",
+ "semicolon-separator": ";&#32;",
+ "comma-separator": ",&#32;",
+ "colon-separator": ":&#32;",
+ "pipe-separator": "&#32;|&#32;",
+ "word-separator": "&#32;",
+ "ellipsis": "...",
+ "percent": "$1%",
+ "parentheses": "($1)",
+ "brackets": "[$1]",
+ "imgmultipageprev": "← foarige side",
"imgmultipagenext": "folgjende side →",
"imgmultigo": "Los!",
"imgmultigoto": "Gean nei side $1",
+ "img-lang-opt": "$2 ($1)",
"img-lang-default": "(standert taal)",
"table_pager_next": "Folgjende side",
"table_pager_prev": "Side werom",
@@ -1611,6 +1731,24 @@
"autosumm-replace": "Side ferfong mei '$1'",
"autoredircomment": "Ferwiist troch nei [[$1]]",
"autosumm-new": "Nije Side: $1",
+ "size-bytes": "$1 B",
+ "size-kilobytes": "$1 KB",
+ "size-megabytes": "$1 MB",
+ "size-gigabytes": "$1 GB",
+ "size-terabytes": "$1 TB",
+ "size-petabytes": "$1 PB",
+ "size-exabytes": "$1 EB",
+ "size-zetabytes": "$1 ZB",
+ "size-yottabytes": "$1 YB",
+ "bitrate-bits": "$1 bps",
+ "bitrate-kilobits": "$1 kbps",
+ "bitrate-megabits": "$1 Mbps",
+ "bitrate-gigabits": "$1 Gbps",
+ "bitrate-terabits": "$1 Tbps",
+ "bitrate-petabits": "$1 Pbps",
+ "bitrate-exabits": "$1 Ebps",
+ "bitrate-zetabits": "$1 Zbps",
+ "bitrate-yottabits": "$1 Ybps",
"watchlistedit-normal-title": "Folchlist bewurkje",
"watchlistedit-normal-submit": "Siden wiskje",
"watchlistedit-raw-titles": "Siden:",
@@ -1620,16 +1758,26 @@
"watchlisttools-view": "Folchlist besjen",
"watchlisttools-edit": "Folchlist besjen en bewurkje",
"watchlisttools-raw": "Rûge folchlist bewurkje",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|oerlis]])",
"version": "Ferzje",
"version-extensions": "Ynstallearre útwreidings",
"version-specialpages": "Bysûndere siden",
"version-variables": "Fariabels",
+ "version-api": "API",
"version-other": "Oare",
- "version-version": "(Ferzje $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[gjin namme]",
"version-license": "Lisinsje",
+ "version-ext-colheader-version": "Ferzje",
+ "version-ext-colheader-description": "Beskriuwing",
"version-software": "Ynsteld software",
"version-software-product": "Produkt",
"version-software-version": "Ferzje",
+ "version-libraries-library": "Bibleteek",
+ "version-libraries-version": "Ferzje",
+ "redirect-value": "Wearde:",
+ "redirect-user": "Meidogger-ID",
+ "redirect-file": "Triemnamme",
"fileduplicatesearch": "Sykje op duplikaten",
"fileduplicatesearch-legend": "Sykje op duplikaten",
"fileduplicatesearch-filename": "Triemnamme:",
@@ -1638,6 +1786,7 @@
"fileduplicatesearch-result-1": "De triem \"$1\" hat gjin duplikaten.",
"fileduplicatesearch-result-n": "De triem \"$1\" hat {{PLURAL:$2|1 duplikaat|$2 duplikaten}}.",
"specialpages": "Bysûndere siden",
+ "specialpages-note-top": "Leginda",
"specialpages-note": "* Normale bysûndere siden.\n* <strong class=\"mw-specialpagerestricted\">Beheinde bysûndere siden.</strong>",
"specialpages-group-maintenance": "Underhâld siden",
"specialpages-group-other": "Oare bysûndere siden",
@@ -1653,6 +1802,7 @@
"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)",
"tags-active-yes": "Ja",
"tags-active-no": "Nee",
"tags-edit": "bewurkje",
@@ -1664,15 +1814,42 @@
"compare-rev2": "Revyzje 2",
"compare-submit": "Ferlykje",
"compare-invalid-title": "Unjildige titel.",
+ "htmlform-no": "Nee",
+ "htmlform-yes": "Ja",
+ "htmlform-cloner-create": "Mear tafoegje",
"revdelete-restricted": "hat beheinings oplein oan behearders",
"revdelete-unrestricted": "hat beheinings foar behearders goedmakke",
"rightsnone": "(gjin)",
- "feedback-subject": "Underwerp:",
- "feedback-message": "Berjocht:",
- "feedback-cancel": "Ofbrekke",
- "feedback-submit": "Feedback ferstjoere",
+ "revdelete-summary": "gearfetting bewurkje",
+ "feedback-cancel": "Annulearje",
"feedback-close": "Dien",
+ "feedback-message": "Berjocht:",
+ "feedback-subject": "Ûnderwerp:",
+ "feedback-submit": "Ferstjoere",
"searchsuggest-search": "Sykje",
- "expand_templates_ok": "Okee",
- "expand_templates_remove_comments": "Berjochten fuorthelje"
+ "api-error-unknown-code": "Unbekende flater: \"$1\".",
+ "api-error-unknownerror": "Unbekende flater: \"$1\".",
+ "duration-seconds": "$1 {{PLURAL:$1|sekonde|sekonden}}",
+ "duration-minutes": "$1 {{PLURAL:$1|minút|minuten}}",
+ "duration-hours": "$1 {{PLURAL:$1|oere|oeren}}",
+ "duration-days": "$1 {{PLURAL:$1|dei|dagen}}",
+ "duration-weeks": "$1 {{PLURAL:$1|wike|wiken}}",
+ "duration-years": "$1 {{PLURAL:$1|jier|jierren}}",
+ "duration-decades": "$1 {{PLURAL:$1|desennium|desennia}}",
+ "duration-centuries": "$1 {{PLURAL:$1|ieu|ieuwen}}",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|sekonde|sekonden}}",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|sekonde|sekonden}}",
+ "limitreport-ppvisitednodes-value": "$1/$2",
+ "limitreport-ppgeneratednodes-value": "$1/$2",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
+ "limitreport-expansiondepth-value": "$1/$2",
+ "limitreport-expensivefunctioncount-value": "$1/$2",
+ "expand_templates_ok": "OK",
+ "expand_templates_remove_comments": "Berjochten fuorthelje",
+ "pagelang-language": "Taal",
+ "mediastatistics-nfiles": "$1 ($2%)",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-header-unknown": "Unbekend",
+ "special-characters-group-latin": "Latyn"
}
diff --git a/languages/i18n/ga.json b/languages/i18n/ga.json
index 42bf7e99..b50d4bc6 100644
--- a/languages/i18n/ga.json
+++ b/languages/i18n/ga.json
@@ -391,7 +391,6 @@
"passwordreset-email": "Seoladh ríomhphoist:",
"changeemail-none": "(neamhní)",
"changeemail-password": "D'fhocal faire {{SITENAME}}:",
- "changeemail-cancel": "Cealaigh",
"bold_sample": "Cló trom",
"bold_tip": "Cló trom",
"italic_sample": "Cló iodálach",
@@ -809,7 +808,6 @@
"uncategorizedtemplates": "Teimpléid gan chatagóir",
"unusedcategories": "Catagóirí nach n-úsáidtear",
"unusedimages": "Íomhánna nach n-úsáidtear",
- "popularpages": "Leathanaigh is mó cuairteanna orthu",
"wantedcategories": "Catagóirí agus iarraidh ag gabháil leis",
"wantedpages": "Leathanaigh de dhíth",
"mostlinked": "Leathanaigh is mó naisc chucu",
@@ -838,7 +836,6 @@
"pager-older-n": "{{PLURAL:$1|1 níos sine|$1 níos sine}}",
"booksources": "Leabharfhoinsí",
"booksources-search-legend": "Cuardaigh le foinsí leabhar",
- "booksources-go": "Gabh",
"specialloguserlabel": "Úsáideoir:",
"speciallogtitlelabel": "Teideal:",
"log": "Logaí",
@@ -900,7 +897,7 @@
"wlheader-enotif": "Cumasaíodh fógraí riomhphoist.",
"wlheader-showupdated": "Tá '''cló trom''' ar leathanaigh a athraíodh ón uair is deireanaí a d'fhéach tú orthu.",
"wlnote": "Is {{PLURAL:$1|é seo thíos an t-athrú deireanach|iad seo thíos na '''$1''' athruithe deireanacha}} {{PLURAL:$2|san uair deireanach|sna '''$2''' uaire deireanacha}}.",
- "wlshowlast": "Líon na n-uair is déanaí le taispeáint: $1. Líon na laethanta is déanaí le taispeáint: $2. Taispeáin $3.",
+ "wlshowlast": "Líon na n-uair is déanaí le taispeáint: $1. Líon na laethanta is déanaí le taispeáint: $2. Taispeáin .",
"watchlist-options": "Roghanna don liosta faire",
"watching": "Ag faire...",
"unwatching": "Á bhaint de do liosta faire...",
@@ -931,7 +928,6 @@
"deletereasonotherlist": "Fáth eile",
"deletereason-dropdown": "*Fáthanna coitianta scriosta\n** Iarratas ón údar\n** Sárú cóipchirt\n** Loitiméireacht",
"rollback": "Athruithe a rolladh siar",
- "rollback_short": "Roll siar",
"rollbacklink": "roll siar",
"rollbacklinkcount": "Roll siar $1 {{PLURAL:$1|athrú|athruithe}}",
"rollbackfailed": "Theip an rolladh siar",
@@ -1464,7 +1460,6 @@
"exif-gpsspeed-n": "Muirmhílte",
"exif-gpsdirection-t": "Fíorthreo",
"exif-gpsdirection-m": "Treo maighnéadach",
- "watchlistall2": "an t-iomlán",
"namespacesall": "iad uile",
"monthsall": "gach mí",
"confirmemail": "Deimhnigh do ríomhsheoladh",
@@ -1508,7 +1503,7 @@
"watchlisttools-raw": "Cuir do amhliosta faire in eagar",
"version": "Leagan",
"version-other": "Eile",
- "version-version": "(Leagan $1)",
+ "version-version": "($1)",
"version-license": "Ceadúnas",
"version-software": "Bogearraí suiteáilte",
"version-software-version": "Leagan",
@@ -1527,8 +1522,8 @@
"specialpages-group-spam": "Uirlisí turscar",
"blankpage": "Leathanach bán",
"htmlform-selectorother-other": "Eile",
- "feedback-message": "Teachtaireacht:",
"feedback-cancel": "Cealaigh",
+ "feedback-message": "Teachtaireacht:",
"searchsuggest-search": "Cuardaigh",
"expand_templates_remove_comments": "Scrios nótaí tráchta",
"expand_templates_preview": "Réamhamharc"
diff --git a/languages/i18n/gag.json b/languages/i18n/gag.json
index eca10f7d..87835e95 100644
--- a/languages/i18n/gag.json
+++ b/languages/i18n/gag.json
@@ -472,7 +472,6 @@
"statistics": "İstatistikalar",
"statistics-header-pages": "Sayfa istatistikaları",
"statistics-header-edits": "Diişmäkleri istatistikaları",
- "statistics-header-views": "Resim istatikaları",
"statistics-header-users": "Kullanıcı istatistikaları",
"statistics-header-hooks": "Başka istatistakalar",
"statistics-articles": "Yazılar",
@@ -481,13 +480,9 @@
"statistics-files": "Üklenmiş dosyeler",
"statistics-edits": "{{SITENAME}} kurulmaa beeri yapmaa sayfa diişmäkleri",
"statistics-edits-average": "Her yapraktaki diişmäklerin sayısı",
- "statistics-views-total": "Hepsi resimlär",
- "statistics-views-total-desc": "Var nica olmadı hem maasus yapraklarından resim eklenmee",
- "statistics-views-peredit": "Diişmäk başına resimlär",
"statistics-users": "Registratlı [[Special:ListUsers|kullanıcılar]]",
"statistics-users-active": "Aktivli kullanıcılar",
"statistics-users-active-desc": "Bitki {{PLURAL:$1|gün|$1 günde}} çalışmaa yapmaa kullanıcılar",
- "statistics-mostpopular": "En anılmış yazılar",
"doubleredirects": "İki kerä yönnendirmeler",
"brokenredirects": "Var olmayan yazıya yapılmış yönnendirmeler",
"withoutinterwiki": "Başka dillerä baalantısı olmayan sayfalar",
@@ -524,7 +519,6 @@
"pager-older-n": "{{PLURAL:$1|1 taa eski|$1 taa eski}}",
"booksources": "Kaynak kiyatlar",
"booksources-search-legend": "Kiyat kaynaklarını aara",
- "booksources-go": "Git",
"specialloguserlabel": "Kullanıcı:",
"speciallogtitlelabel": "Yazı adı:",
"log": "Jurnallar",
@@ -549,7 +543,7 @@
"watchthispage": "Bak bu sayfaya",
"unwatch": "Durgun sayfa izlemää",
"watchlist-details": "Diil konuşmaa sayfaları {{PLURAL:$1|$1 sayfa|$1 sayfa}} bakmaa listanızda.",
- "wlshowlast": "Bitki $1 saati $2 günü göster $3",
+ "wlshowlast": "Bitki $1 saati $2 günü göster",
"watchlist-options": "İzlemäk listası opţiyaları",
"watching": "Bakılêr...",
"unwatching": "Durgundurulêr...",
@@ -717,7 +711,6 @@
"metadata-expand": "Detalları göster",
"metadata-collapse": "Detalları gösterme",
"metadata-fields": "Bu listadaki meta bilgilerin eri, resim sayfasında sormadan gösterilecek, übürleri saklanacêk.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "Hepsini göster",
"namespacesall": "Hepsi",
"monthsall": "hepsi",
"watchlisttools-view": "İlgili diişmäkleri göster",
diff --git a/languages/i18n/gan-hans.json b/languages/i18n/gan-hans.json
index 5c67aa46..80eff46e 100644
--- a/languages/i18n/gan-hans.json
+++ b/languages/i18n/gan-hans.json
@@ -14,7 +14,8 @@
"아라",
"Mywood",
"Duolaimi",
- "Impersonator 1"
+ "Impersonator 1",
+ "Babanwalia"
]
},
"tog-underline": "下划链接",
@@ -142,7 +143,7 @@
"qbedit": "编写",
"qbpageoptions": "个页",
"qbmyoptions": "偶𠮶选项",
- "faq": "FAQ",
+ "faq": "ਆਮ ਸੁਆਲ਼",
"faqpage": "Project:问得蛮多𠮶问题",
"actions": "动作",
"namespaces": "空间名",
@@ -570,7 +571,6 @@
"searchrelated": "相关",
"searchall": "所有",
"showingresults": "底下从第<b>$2</b>条显示起先𠮶<b>$1</b>条结果:",
- "showingresultsheader": "'''$4'''𠮶{{PLURAL:$5|第'''$1'''到第'''$3'''只结果|第'''$1 - $2'''只,拢共'''$3'''只结果}}",
"search-nonefound": "冇合到𠮶查询结果。",
"powersearch-legend": "高级搜寻",
"powersearch-ns": "到名子空间里头寻:",
@@ -811,7 +811,6 @@
"statistics": "数据",
"statistics-header-pages": "页面数据",
"statistics-header-edits": "编辑数据",
- "statistics-header-views": "查看数据",
"statistics-header-users": "用户数据",
"statistics-header-hooks": "别𠮶数据",
"statistics-articles": "内容页",
@@ -820,12 +819,9 @@
"statistics-files": "上载正𠮶档案",
"statistics-edits": "自从{{SITENAME}}设定𠮶页面编辑数",
"statistics-edits-average": "每页𠮶平均编辑数",
- "statistics-views-total": "查看𠮶统共数",
- "statistics-views-peredit": "每到编辑查看数",
"statistics-users": "注册过𠮶[[Special:ListUsers|用户]]",
"statistics-users-active": "活跃用户",
"statistics-users-active-desc": "头$1日操作过𠮶用户",
- "statistics-mostpopular": "眵𠮶人最多𠮶页面",
"doubleredirects": "双重重定向",
"doubleredirectstext": "底下𠮶重定向链接到别只重定向页面:",
"double-redirect-fixed-move": "[[$1]]拕移动正,佢个下拕重定向到[[$2]]。",
@@ -854,7 +850,6 @@
"uncategorizedtemplates": "冇归类𠮶模版",
"unusedcategories": "冇使用𠮶分类",
"unusedimages": "冇使用𠮶图像",
- "popularpages": "热门页面",
"wantedcategories": "等撰𠮶分类",
"wantedpages": "等撰𠮶页面",
"mostlinked": "最多链接𠮶页面",
@@ -886,7 +881,6 @@
"pager-older-n": "{{PLURAL:$1|更旧𠮶 1|更旧𠮶 $1}}",
"booksources": "书籍来源",
"booksources-search-legend": "寻吖书籍来源",
- "booksources-go": "跳到",
"booksources-text": "底下系一部分网络书店𠮶链接列表,可以提供到倷要找𠮶书籍𠮶更多资料:",
"specialloguserlabel": "用户:",
"speciallogtitlelabel": "标题:",
@@ -949,7 +943,7 @@
"wlheader-enotif": "启动嘞email通知功能。",
"wlheader-showupdated": "上回倷眵𠮶页面改动𠮶部分用'''粗体'''显到",
"wlnote": "下底系最近'''$2'''钟头内𠮶最晏'''$1'''道修改:",
- "wlshowlast": "显示近来$1钟头$2日$3𠮶改动",
+ "wlshowlast": "显示近来$1钟头$2日𠮶改动",
"watchlist-options": "监视清单选项",
"watching": "眏到...",
"unwatching": "莫眏到...",
@@ -982,7 +976,6 @@
"deletereasonotherlist": "别𠮶理由",
"deletereason-dropdown": "*常用删除𠮶理由\n** 写𠮶人自家𠮶要求\n** 侵犯版权\n** 特试破坏",
"rollback": "还原修改",
- "rollback_short": "还原",
"rollbacklink": "还原",
"rollbackfailed": "还原失败",
"cantrollback": "还原伓正;最末𠮶贡献人系文章𠮶唯一作者。",
@@ -1580,7 +1573,6 @@
"exif-gpsspeed-n": "海浬每小时(节)",
"exif-gpsdirection-t": "真实方位",
"exif-gpsdirection-m": "地磁方位",
- "watchlistall2": "全部",
"namespacesall": "全部",
"monthsall": "全部",
"confirmemail": "确认email地址",
@@ -1641,7 +1633,6 @@
"watchlisttools-view": "眵吖相关更改",
"watchlisttools-edit": "眵吖同到编写监视列表",
"watchlisttools-raw": "编写原始监视列表",
- "unknown_extension_tag": "伓认得𠮶扩展标签 \"$1\"",
"duplicate-defaultsort": "'''警告:'''预设𠮶排序键 \"$2\" 覆蓋先头𠮶预设排序键 \"$1\"。",
"version": "版本",
"version-extensions": "装正𠮶插件",
@@ -1653,7 +1644,7 @@
"version-parser-extensiontags": "解析器扩展标签",
"version-hook-name": "钩子名",
"version-hook-subscribedby": "订阅人",
- "version-version": "(版本 $1)",
+ "version-version": "($1)",
"version-license": "许可证",
"version-poweredby-credits": "个只 Wiki 由 '''[https://www.mediawiki.org/ MediaWiki]''' 驱动,版权所有 © 2001-$1 $2。",
"version-software": "装正𠮶软件",
diff --git a/languages/i18n/gan-hant.json b/languages/i18n/gan-hant.json
index 8e2a350e..2837d291 100644
--- a/languages/i18n/gan-hant.json
+++ b/languages/i18n/gan-hant.json
@@ -567,7 +567,6 @@
"searchrelated": "相關",
"searchall": "所有",
"showingresults": "底下從第<b>$2</b>條顯示起先嗰<b>$1</b>條結果:",
- "showingresultsheader": "'''$4'''嗰{{PLURAL:$5|第'''$1'''到第'''$3'''隻結果|第'''$1 - $2'''隻,攏共'''$3'''隻結果}}",
"search-nonefound": "冇合到嗰查詢結果。",
"powersearch-legend": "高級搜尋",
"powersearch-ns": "到名子空間裡頭尋:",
@@ -808,7 +807,6 @@
"statistics": "數據",
"statistics-header-pages": "頁面數據",
"statistics-header-edits": "編輯數據",
- "statistics-header-views": "查看數據",
"statistics-header-users": "用戶數據",
"statistics-header-hooks": "別嗰數據",
"statistics-articles": "內容頁",
@@ -817,12 +815,9 @@
"statistics-files": "上載正嗰檔案",
"statistics-edits": "自從{{SITENAME}}設定嗰頁面編輯數",
"statistics-edits-average": "每頁嗰平均編輯數",
- "statistics-views-total": "查看嗰統共數",
- "statistics-views-peredit": "每到編輯查看數",
"statistics-users": "註冊過嗰[[Special:ListUsers|用戶]]",
"statistics-users-active": "活躍用戶",
"statistics-users-active-desc": "頭$1日操作過嗰用戶",
- "statistics-mostpopular": "眵嗰人頂多嗰頁面",
"doubleredirects": "雙重重定向頁面",
"doubleredirectstext": "底下嗰重定向連結到別隻重定向頁面:",
"double-redirect-fixed-move": "[[$1]]拕移動正,佢箇下拕重定向到[[$2]]。",
@@ -851,7 +846,6 @@
"uncategorizedtemplates": "冇歸類嗰模板",
"unusedcategories": "冇使用嗰分類",
"unusedimages": "冇使用嗰圖像",
- "popularpages": "熱門頁面",
"wantedcategories": "等撰嗰分類",
"wantedpages": "等撰嗰頁面",
"mostlinked": "頂多連結嗰頁面",
@@ -883,7 +877,6 @@
"pager-older-n": "先$1次",
"booksources": "書籍來源",
"booksources-search-legend": "尋下書籍來源",
- "booksources-go": "跳到",
"booksources-text": "底下係一部分網絡書店嗰連結列表,可以提供到倷要找嗰書籍嗰更多資料:",
"specialloguserlabel": "用戶:",
"speciallogtitlelabel": "標題:",
@@ -946,7 +939,7 @@
"wlheader-enotif": "啟動哩email通知功能。",
"wlheader-showupdated": "上回倷眵嗰頁面改動嗰部分用'''粗體'''顯到",
"wlnote": "下底係最近'''$2'''鐘頭內嗰最晏'''$1'''道修改:",
- "wlshowlast": "顯示箇日子$1鐘頭$2日$3嗰改動",
+ "wlshowlast": "顯示箇日子$1鐘頭$2日嗰改動",
"watchlist-options": "監視清單選項",
"watching": "眏到...",
"unwatching": "莫眏到...",
@@ -979,7 +972,6 @@
"deletereasonotherlist": "別嗰理由",
"deletereason-dropdown": "*常用刪除嗰理由\n** 寫嗰人自家嗰要求\n** 侵犯版權\n** 特試破壞",
"rollback": "還原修改",
- "rollback_short": "還原",
"rollbacklink": "還原",
"rollbackfailed": "還原失敗",
"cantrollback": "還原伓正;頂晏嗰貢獻人係文章嗰唯一作者。",
@@ -1577,7 +1569,6 @@
"exif-gpsspeed-n": "海浬每小時(節)",
"exif-gpsdirection-t": "真實方位",
"exif-gpsdirection-m": "地磁方位",
- "watchlistall2": "全部",
"namespacesall": "全部",
"monthsall": "全部",
"confirmemail": "確認email地址",
@@ -1638,7 +1629,6 @@
"watchlisttools-view": "望下相關更改",
"watchlisttools-edit": "望吖同到編寫監視列表",
"watchlisttools-raw": "編寫原始監視列表",
- "unknown_extension_tag": "伓認得嗰擴展標籤 \"$1\"",
"duplicate-defaultsort": "'''警告:'''預設嗰排序鍵 \"$2\" 覆蓋先頭嗰預設排序鍵 \"$1\"。",
"version": "版本",
"version-extensions": "裝正嗰插件",
@@ -1650,7 +1640,7 @@
"version-parser-extensiontags": "解析器擴展標籤",
"version-hook-name": "鉤子名",
"version-hook-subscribedby": "訂閱人",
- "version-version": "(版本 $1)",
+ "version-version": "($1)",
"version-license": "許可證",
"version-poweredby-credits": "箇隻 Wiki 由 '''[https://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
"version-software": "裝正嗰軟件",
diff --git a/languages/i18n/gd.json b/languages/i18n/gd.json
index cd72433a..3969199b 100644
--- a/languages/i18n/gd.json
+++ b/languages/i18n/gd.json
@@ -8,7 +8,8 @@
"Steafan31",
"לערי ריינהארט",
"아라",
- "GunChleoc"
+ "GunChleoc",
+ "Macofe"
]
},
"tog-underline": "Fo-loidhneadh nan ceanglaichean:",
@@ -25,6 +26,7 @@
"tog-watchdefault": "Cuir duilleagan a dheasaicheas mi air a' chlàr-fhaire agam",
"tog-watchmoves": "Cuir duilleagan a ghluaiseas mi air a' chlàr-fhaire agam",
"tog-watchdeletion": "Cuir duilleagan a sguabas mi às air a' chlàr-fhaire agam",
+ "tog-watchrollback": "Cuir duilleagan air an do rinn mi roladh air ais air a' chlàr-fhaire agam",
"tog-minordefault": "Comharraich gach mùthadh mar mhùthadh beag a ghnàth",
"tog-previewontop": "Nochd an ro-shealladh os cionn a' bhogsa deasachaidh",
"tog-previewonfirst": "Nochd an ro-shealladh nuair a nithear a' chiad deasachadh",
@@ -35,7 +37,7 @@
"tog-shownumberswatching": "Nochd àireamh nan cleachdaichean a tha a' cumail sùil air",
"tog-oldsig": "An t-earr-sgrìobhadh làithreach:",
"tog-fancysig": "Làimhsich an t-earr-sgrìobhadh mar wikitext (gun cheangal leis fhèin)",
- "tog-uselivepreview": "Cleachd an ro-shealladh beò (deuchainneach)",
+ "tog-uselivepreview": "Cleachd an ro-shealladh beò",
"tog-forceeditsummary": "Cuir ceist nuair a dh'fhàgas mi gearr-chunntas an deasachaidh bàn",
"tog-watchlisthideown": "Falaich mo mhùthaidhean fhèin air mo chlàr-faire",
"tog-watchlisthidebots": "Falaich mùthaidhean nam bot air mo chlàr-faire",
@@ -211,6 +213,7 @@
"otherlanguages": "Ann an cànain eile",
"redirectedfrom": "(Air ath-sheòladh o $1)",
"redirectpagesub": "Ath-sheòl an duilleag",
+ "redirectto": "Dèan ath-stiùireadh gu:",
"lastmodifiedat": "Chaidh an duilleag seo a mhùthadh $1 aig $2 turas mu dheireadh.",
"viewcount": "Chaidh inntrigeadh a dhèanamh dhan duilleag seo $1 {{PLURAL:$1|turas|thuras|tursan|turas}}.",
"protectedpage": "Duilleag fo dhìon",
@@ -223,6 +226,7 @@
"pool-queuefull": "Tha ciutha nam pròiseasan làn",
"pool-errorunknown": "Mearachd neo-aithnichte",
"pool-servererror": "Chan eil seirbheis cunntadh nan amar ri fhaighinn ($1).",
+ "poolcounter-usage-error": "Mearachd cleachdaidh: $1",
"aboutsite": "Mu dhèidhinn {{SITENAME}}",
"aboutpage": "Project:Mu dhèidhinn",
"copyright": "Tha susbaint ri làimh fo $1 mur eil an caochladh 'ga innse.",
@@ -232,6 +236,7 @@
"disclaimers": "Aithrisean-àichidh",
"disclaimerpage": "Project:Aithris-àichidh choitcheann",
"edithelp": "Cobhair deasachaidh",
+ "helppage-top-gethelp": "Cobhair",
"mainpage": "Prìomh dhuilleag",
"mainpage-description": "Prìomh dhuilleag",
"policy-url": "Project:Poileasaidh",
@@ -266,6 +271,9 @@
"hidetoc": "falaich",
"collapsible-collapse": "Co-theannaich",
"collapsible-expand": "Leudaich",
+ "confirmable-confirm": "A bheil {{GENDER:$1|thu}} cinnteach?",
+ "confirmable-yes": "Tha",
+ "confirmable-no": "Chan eil",
"thisisdeleted": "A bheil thu airson $1 a shealltainn no aiseag?",
"viewdeleted": "A bheil thu airson $1 a shealltainn?",
"restorelink": "$1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} a chaidh a sguabadh às",
@@ -312,10 +320,13 @@
"readonly_lag": "Chaidh an stòr-dàta a ghlasadh leis fhèin fhad 's a tha frithealaichean nan stòr-dàta tràilleach air dheireadh a' mhaighstir",
"internalerror": "Ion-mhearachd",
"internalerror_info": "Ion-mhearachd: $1",
+ "internalerror-fatal-exception": "Eisgeachd mharbhtach dhen t-seòrsa \"$1\"",
"filecopyerror": "Cha b' urrainn dhuinn lethbhreac dhen fhaidhle \"$1\" a chur gu \"$2\".",
"filerenameerror": "Cha do ghabh ainm an fhaidhle \"$1\" atharrachadh gu \"$2\".",
"filedeleteerror": "Cha do ghabh am faidhle \"$1\" a sguabadh às.",
"directorycreateerror": "Cha do ghabh am pasgan \"$1\" a chruthachadh.",
+ "directoryreadonlyerror": "Tha am pasgan \"$1\" ri leughadh a-mhàin.",
+ "directorynotreadableerror": "Cha ghabh am pasgan \"$1\" leughadh.",
"filenotfound": "Cha do ghabh am faidhle \"$1\" a lorg.",
"unexpected": "Luach ris nach robh dùil: \"$1\"=\"$2\".",
"formerror": "Mearachd: cha do ghabh am foirm a chur a-null",
@@ -337,7 +348,8 @@
"viewsourcetext": "'S urrainn dhut coimhead air tùs na duilleige seo 's lethbhreac a dhèanamh dheth:",
"viewyourtext": "'S urrainn dhut coimhead air <strong>na dheasaich thu</strong> 's lethbhreac a dhèanamh dheth air an duilleag seo:",
"protectedinterface": "Bheir an duilleag seo dhut teacsa eadar-aghaidh airson a' bhathar-bhog air an uicidh seo 's chaidh a ghlasadh gus casg a chur air mì-chleachdadh. Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
- "editinginterface": "<strong>Rabhadh:</strong> Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.\nMa dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicidh seo.\nGus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
+ "editinginterface": "<strong>Rabhadh:</strong> Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.\nMa dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicidh seo.",
+ "translateinterface": "Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], am pròiseact eadar-theangachaidh aig MediaWiki.",
"cascadeprotected": "Chaidh an duilleag seo a dhìon o dheasachadh a chionn 's gu bheil e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a chaidh a dhìon 's an roghainn \"mar eas\" air:\n$2",
"namespaceprotected": "Chan eil cead agad duilleagan san ainm-spàs <strong>$1</strong> a dheasachadh.",
"customcssprotected": "Chan eil cead agad an duilleag CSS seo a dheasachadh a chionn 's gu bheil na roghainnean pearsanta aig cleachdaiche eile innte.",
@@ -352,7 +364,7 @@
"invalidtitle-knownnamespace": "Tiotal mì-dhligheach leis an ainm-spàs \"$2\" agus an teacsa \"$3\"",
"invalidtitle-unknownnamespace": "Tiotal mì-dhligheach leis an àireamh ainm-spàis $1 agus an teacsa \"$2\"",
"exception-nologin": "Chan eil thu air logadh a-steach",
- "exception-nologin-text": "Feumaidh tu [[Special:Userlogin|logadh a-steach]] mus fhaic thu an duilleag seo no mus urrainn dhut seo a dhèanamh.",
+ "exception-nologin-text": "Dèan logadh a-steach gus cothrom fhaighinn air an duilleag no air a' ghnìomh seo.",
"exception-nologin-text-manual": "Ma tha thu ag iarraidh cothrom air an duilleag no air a' ghnìomh seo, $1.",
"virus-badscanner": "Droch cho-dhealbhachd: sganair bhìorasan neo-aithnichte: <em>$1</em>",
"virus-scanfailed": "dh'fhàillig an sganadh (còd $1)",
@@ -458,6 +470,7 @@
"createaccount-text": "Chruthaich cuideigin cunntas airson a' phost-d agad air {{SITENAME}} ($4) air a bheil \"$2\", leis an fhacal-fhaire \"$3\".\nBu chòir dhut logadh a-steach agus am facal-faire agad atharrachadh gu h-ìosal an-dràsta.\n\n'S urrainn dhut an teachdaireachd seo a leigeil seachad ma chaidh an cunntas a chruthachadh air mhearachd.",
"login-throttled": "Dh'fheuch thu ri logadh a-steach ro thric o chionn ghoirid.\nFuirich ort $1 mus feuch thu ris a-rithist.",
"login-abort-generic": "Cha do shoirbhich leat leis an logadh a-steach - Chaidh sgur dheth",
+ "login-migrated-generic": "Chaidh an cunntas agad imrich 's chan eil an t-ainm cleachdaiche agad ann tuilleadh air an uicidh seo.",
"loginlanguagelabel": "Cànan: $1",
"suspicious-userlogout": "Chaidh d' iarrtas airson logadh a-mach a dhiùltadh a chionn 's gu bheil coltas gun deach a chur le brabhsair briste no le progsaidh tasglannaidh.",
"createacct-another-realname-tip": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid seo a chleachdadh gus urram a thoirt dha na h-ùghdaran airson an cuid obrach.",
@@ -509,7 +522,6 @@
"passwordreset-emailsent-capture": "Chaidh post-d a chum ath-shuidheachadh an fhacail-fhaire a chur agus chì thu sin gu h-ìosal.",
"passwordreset-emailerror-capture": "Chaidh post-d a chum ath-shuidheachadh an fhacail-fhaire a ghintinn agus chì thu sin gu h-ìosal ach cha b' urrainn dhuinn a chur dhan chleachdaiche: $1",
"changeemail": "Atharraich am post-d",
- "changeemail-header": "Atharraich cunntas a' phuist-d",
"changeemail-text": "Lìon am foirm seo gus am post-d agad atharrachadh. Feumaidh tu am facal-faire agad a chur a-steach a-rithist gus a dhearbhadh.",
"changeemail-no-info": "Feumaidh tu logadh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
"changeemail-oldemail": "An seòladh puist-d làithreach:",
@@ -517,7 +529,6 @@
"changeemail-none": "(chan eil gin)",
"changeemail-password": "Am facal-faire agad air {{SITENAME}}:",
"changeemail-submit": "Atharraich am post-d",
- "changeemail-cancel": "Sguir dheth",
"changeemail-throttled": "Dh'fheuch thu ri logadh a-steach ro thric.\nFuirich ort $1 mus feuch thu ris a-rithist.",
"resettokens": "Ath-shuidhich na tòcanan",
"resettokens-text": "'S urrainn dhut tòcanan ath-shuidheachadh a bheir cothrom dhut air cuid a dhàta prìobhaideach a tha co-cheangailte ris a' chunntas agad.\n\nBu chòir dhut seo a dhèanamh ma thug thu do chuideigin e air mhearachd no ma bhris cuideigin a-steach air a' chunntas agad.",
@@ -554,9 +565,11 @@
"preview": "Ro-shealladh",
"showpreview": "Seall an ro-shealladh",
"showdiff": "Seall na mùthaidhean",
- "anoneditwarning": "<strong>Rabhadh:</strong> Chan eil thu air logadh a-steach.\nThèid an seòladh IP agad a chlàradh ann an eachdraidh na duilleige seo.",
+ "blankarticle": "<strong>Rabhadh:</strong> Tha an duilleag a tha thu a' cruthachadh bàn.\nMa nì thu briogadh air \"{{int:savearticle}}\" a-rithist, thèid an duilleag a chruthachadh gun susbaint sam bith innte.",
+ "anoneditwarning": "<strong>Rabhadh:</strong> Chan eil thu air logadh a-steach. Chithear an seòladh IP agad gu poblach ma nì thu deasachadh sam bith. Ma nì thu <strong>[$1 logadh a-steach]</strong> no ma <strong>[$2 chruthaicheas tu cunntas]</strong>, thèid d' ainm a chur ris na dheasaich thu 's gheibh thu buannachd a bharrachd às cuideachd.",
"anonpreviewwarning": "<em>Chan eil thu air logadh a-steach. Ma nì thu sàbhaladh, thèid an seòladh IP agad a chlàradh ann an eachdraidh deasachadh na duilleige seo.</em>",
"missingsummary": "<strong>Cuimhnich:</strong> Cha dug thu seachad gearr-chunntas air na dh'atharraich thu.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais gearr-chunntais.",
+ "selfredirect": "<strong>Rabhadh:</strong> Tha thu ag ath-stiùireadh duilleag dha fhèin.\nDh'fhaoidte gun do shònraich thu an t-amas cearr airson an ath-stiùiridh no gu bheil thu a' deasachadh an duilleag cearr.\nMa nì thu briogadh air \"{{int:savearticle}}\" a-rithist,m thèid an ath-stiùireadh a chruthachadh co-dhiù.",
"missingcommenttext": "Cuir a-steach beachd gu h-ìosal.",
"missingcommentheader": "<strong>Cuimhnich:</strong> Cha dug thu seachad cuspair/ceann airson a' bheachd seo.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais.",
"summary-preview": "Ro-shealladh a' ghearr-chunntais:",
@@ -656,6 +669,11 @@
"content-model-text": "teacsa lom",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-model-json": "JSON",
+ "content-json-empty-object": "Oibseact falamh",
+ "content-json-empty-array": "Arraigh fhalamh",
+ "duplicate-args-category": "Duilleagan a chleachdas argamaidean dùblaichte ann an gairm teamplaid",
+ "duplicate-args-category-desc": "Tha gairmean teamplaid sa bheil argamaidean dùblaichte air an duilleag seo, can <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> no <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "<strong>Rabhadh:</strong> Tha cus gairmean a' pharsair cosgail san duilleag seo.\n\nBu chòir nas lugha na $2 {{PLURAL:$2|ghairm|ghairm|gairmean|gairm}} a bhith ann ach tha $1 {{PLURAL:$1|ghairm|ghairm|gairmean|gairm}} ann.",
"expensive-parserfunction-category": "Duilleagan le cus expensive parser function calls",
"post-expand-template-inclusion-warning": "<strong>Rabhadh:</strong> Tha meud na teamplaide ro mhòr.\nCha dèid cuid dhith a ghabhail a-steach.",
@@ -666,11 +684,11 @@
"parser-template-recursion-depth-warning": "Chaidh thu thairis air crìoch doimhne nan ath-chùrsaidhean teamplaid ($1)",
"language-converter-depth-warning": "Chaidh thu thairis air crìoch doimhne an iompachair chànain ($1)",
"node-count-exceeded-category": "Duilleagan far an deachas thairis air cunntas nan nòdan",
- "node-count-exceeded-category-desc": "Roinn-seòrsa airson duilleagan far a bheilear thairis air crìoch nan nòdan.",
- "node-count-exceeded-warning": "Chaidh an duilleag thairis air cunntas nan nòdan",
+ "node-count-exceeded-category-desc": "Tha barrachd nòdan san duilleag na tha ceadaichte.",
+ "node-count-exceeded-warning": "Bha barrachd nòdan san duilleag na tha ceadaichte.",
"expansion-depth-exceeded-category": "Duilleagan far an deachas thairis air a' chrìoch leudachaidh",
- "expansion-depth-exceeded-category-desc": "Seo roinn-seòrsa airson duilleagan far a bheilear thairis air doimhne an leudachaidh.",
- "expansion-depth-exceeded-warning": "Chaidh an duilleag thairis air an doimhne leudachaidh",
+ "expansion-depth-exceeded-category-desc": "Tha an leudachadh san duilleag nas doimhne na tha ceadaichte.",
+ "expansion-depth-exceeded-warning": "Bha an leudachadh san duilleag na bu dhoimhne na tha ceadaichte",
"parser-unstrip-loop-warning": "Mhothaich sinn do lùb unstrip",
"parser-unstrip-recursion-limit": "Chaidheas thairis air crìoch unstrip recursion ($1)",
"converter-manual-rule-error": "Mhothaich sinn do mhearachd san riaghailt iompachadh làimhe airson cànan",
@@ -710,9 +728,10 @@
"history-feed-empty": "Chan eil an duilleag a dh'iarr thu ann.\nDh'fhaoidte gun deach a sguabadh às an uicidh no gun deach ainm ùr a chur air.\nFeuch is [[Special:Search|lorg duilleagan ùra iomachaidh air an uicidh]]",
"rev-deleted-comment": "(chaidh gearr-chunntas an deasachaidh a thoirt air falbh)",
"rev-deleted-user": "(chaidh an t-ainm-cleachdaiche a thoirt air falbh)",
- "rev-deleted-event": "(chaidh gnìomh an loga a thoirt air falbh)",
+ "rev-deleted-event": "(chaidh fiosrachadh an loga a thoirt air falbh)",
"rev-deleted-user-contribs": "[chaidh an t-ainm-cleachdaiche no an seòladh IP a thoirt air falbh - chaidh an deasachadh fhalach o liosta na h-obrach]",
"rev-deleted-text-permission": "Chaidh mùthadh na duilleige seo <strong>a sguabadh às</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
+ "rev-suppressed-text-permission": "Chaidh mùthadh na duilleige seo <strong>a mhùchadh</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].",
"rev-deleted-text-unhide": "Chaidh mùthadh na duilleige seo <strong>a sguabadh às</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].\n'S urrainn dhut [$1 am mùthadh seo fhaicinn fhathast] ma tha thu airson leantainn air adhart.",
"rev-suppressed-text-unhide": "Chaidh mùthadh na duilleige seo <strong>a mhùchadh</strong>.\nGheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a mhùchadh].\n'S urrainn dhut [$1 am mùthadh seo fhaicinn fhathast] ma tha thu airson leantainn air adhart.",
"rev-deleted-text-view": "Chaidh mùthadh na duilleige seo <strong>a sguabadh às</strong>.\n'S urrainn dhut coimhead air, gheibh thu mion-fhiosrachadh air [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ann an loga nan rudan a chaidh a sguabadh às].",
@@ -737,13 +756,13 @@
"revdelete-text-text": "Nochdaidh mùthaidhean a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
"revdelete-text-file": "Nochdaidh tionndaidhean dhen fhaidhle a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
"logdelete-text": "Nochdaidh tachartasan san loga a chaidh a sguabadh às ann an eachdraidh na duilleige fhathast ach chan fhaic buill a' phobaill cuid dhen t-susbaint aca.",
- "revdelete-text-others": "Gheibh rianairean eile air {{SITENAME}} cothrom air an t-susbaint fhalaichte fhathast agus is urrainn dhaibh an sguabadh às a neo-dhèanamh san dearbh eadar-aghaidh mur an deach cuingeachaidhean a bharrachd a chur orra.",
+ "revdelete-text-others": "Gheibh rianairean eile cothrom air an t-susbaint fhalaichte fhathast agus is urrainn dhaibh an sguabadh às a neo-dhèanamh mur an deach cuingeachaidhean a bharrachd a chur orra.",
"revdelete-confirm": "Dearbhaich gu bheil thu airson seo a dhèanamh, gu bheil thu a' tuigsinn na thachras ri linn agus gu bheil thu a' dèanamh seo a-rèir [[{{MediaWiki:Policy-url}}|a' phoileasaidh]].",
"revdelete-suppress-text": "Cha bu chòir dhut mùchadh a chleachdadh <strong>ach</strong> ann an suidheachaidhean mar seo:\n* Fiosrachadh a dh'fhaodadh a bhith dìteachail\n* Fiosrachadh pearsanta a tha cearr\n*: <em>seòladh taighe, àireamhan fòn, àireamhan NI is msaa.</em>",
"revdelete-legend": "Suidhich cuingeachaidhean na faicsinneachd",
"revdelete-hide-text": "Teacsa a' mhùthaidh",
"revdelete-hide-image": "Falaich susbaint an fhaidhle",
- "revdelete-hide-name": "Falaich an gnìomh agus an targaid",
+ "revdelete-hide-name": "Falaich an targaid agus na paramadairean",
"revdelete-hide-comment": "Gearr-chunntas an deasachaidh",
"revdelete-hide-user": "Ainm-cleachdaiche/seòladh IP an deasaiche",
"revdelete-hide-restricted": "Mùch dàta o rianairean agus càch",
@@ -798,7 +817,6 @@
"mergehistory-reason": "Adhbhar:",
"mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "Loga a' cho-aonaidh",
- "pagemerge-logentry": "chaidh [[$1]] a cho-aonadh dha [[$2]] (mùthaidhean suas ri $3)",
"revertmerge": "Dì-aonaich",
"mergelogpagetext": "Chì thu liosta nan co-aonaidhean as ùire eadar eachdraidh dhuilleagan gu h-ìosail.",
"history-title": "Eachdraidh nam mùthaidhean aig \"$1\"",
@@ -839,7 +857,8 @@
"search-result-category-size": "{{PLURAL:$1|$1 bhall|$1 bhall|$1 bhuill|$1 ball}} ({{PLURAL:$2|$2 fho-roinn-seòrsa|$2 fho-roinn-seòrsa|$2 fo-roinnean-seòrsa|$2 fo-roinn-seòrsa}}, {{PLURAL:$3|$3 fhaidhle|$3 fhaidhle|$3 faidhlichean|$3 faidhle}})",
"search-redirect": "(ag ath-sheòladh $1)",
"search-section": "(earrann $1)",
- "search-file-match": "{a' freagairt ri susbaint an fhaidhle)",
+ "search-category": "(roinn-seòrsa $1)",
+ "search-file-match": "(a' freagairt ri susbaint an fhaidhle)",
"search-suggest": "An e na leanas a bha fa-near dhut: $1",
"search-interwiki-caption": "Pròiseactan co-cheangailte",
"search-interwiki-default": "Toraidhean o $1:",
@@ -849,7 +868,7 @@
"searchall": "a h-uile",
"showingresults": "A' sealltainn suas ri <strong>$1</strong> {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}} gu h-ìosal a' tòiseachadh le àireamh <strong>$2</strong>.",
"showingresultsinrange": "A' sealltainn suas ri <strong>$1</strong> {{PLURAL:$1|toradh|thoradh|toraidhean|toradh}} san rainse eadar àireamh <strong>$2</strong> is <strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5|Toradh <strong>$1</strong> à <strong>$3</strong>|Toraidhean <strong>$1 - $2</strong> à <strong>$3</strong>}} airson <strong>$4</strong>",
+ "search-showingresults": "{{PLURAL:$4|Toradh <strong>$1</strong> à <strong>$3</strong>|Toraidhean <strong>$1 - $2</strong> à <strong>$3</strong>|Toraidhean <strong>$1 - $2</strong> à <strong>$3</strong>|Toraidhean <strong>$1 - $2</strong> à <strong>$3</strong>}}",
"search-nonefound": "Cha do fhreagair toradh sam bith ri d' iarrtas.",
"powersearch-legend": "Rannsachadh adhartach",
"powersearch-ns": "Lorg ann an ainm-spàsan:",
@@ -863,7 +882,7 @@
"preferences": "Roghainnean",
"mypreferences": "Na roghainnean agam",
"prefs-edits": "Co mheud deasachadh:",
- "prefsnologintext2": "Ma tha thu airson na roghainnean agad atharrachadh, $1.",
+ "prefsnologintext2": "Log a-steach gus na roghainnean agad atharrachadh.",
"prefs-skin": "Bian",
"skin-preview": "Ro-shealladh",
"datedefault": "Gun roghainnean",
@@ -872,6 +891,11 @@
"prefs-personal": "Pròifil",
"prefs-rc": "Mùthaidhean ùra",
"prefs-watchlist": "An clàr-faire",
+ "prefs-editwatchlist": "Deasaich an clàr-faire",
+ "prefs-editwatchlist-label": "Deasaich na tha air a' chlàr-fhaire agad:",
+ "prefs-editwatchlist-edit": "Seall agus thoir air falbh tiotalan air a' chlàr-fhaire agad",
+ "prefs-editwatchlist-raw": "Deasaich còd a' chlàir-fhaire",
+ "prefs-editwatchlist-clear": "Glan an clàr-faire agad",
"prefs-watchlist-days": "Co mheud latha a sheallar air a' chlàr-fhaire:",
"prefs-watchlist-days-max": "$1 {{PLURAL:$1|latha|latha|làithean|latha}} air a' char as motha",
"prefs-watchlist-edits": "An àireamh as motha de mhùthaidhean a thèid a shealltainn air a' chlàr-fhaire leudaichte:",
@@ -943,7 +967,7 @@
"gender-female": "Deasaichidh i duilleagan na h-Uicipeid",
"prefs-help-gender": "Cha leig thu leas an roghainn seo a shuidheachadh.\nCleachdaidh am bathar-bog an luach aice gus bruidhinn riut le d' ainm 's iomradh a thoirt ort gu càch leis a' ghnè ghramataigeach iomchaidh.\nBidh am fiosrachadh seo poblach.",
"email": "Post-d:",
- "prefs-help-realname": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid seo a chleachdadh gus urram a thoirt dhut airson do chuid obrach.",
+ "prefs-help-realname": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid a chleachdadh gus urram a thoirt dhut airson do chuid obrach.",
"prefs-help-email": "Chan leig thu leas post-dealain a chur ann ach bidh feum air ma dhìochuimhnicheas tu am facal-faire agad 's ma dh'iarras tu fear ùr.",
"prefs-help-email-others": "'S urrainn dhut leigeil le daoine eile post-dealain a chur thugad tro cheangal air duilleag a' chleachdaiche no deasbaireachd agad.\nChan fhaicear an seòladh fhèin nuair a chuireas cuideigin post-dealain thugad.",
"prefs-help-email-required": "Tha feum air seòladh puist-d.",
@@ -964,6 +988,7 @@
"prefs-tokenwatchlist": "Tòcan",
"prefs-diffs": "Diofaran",
"prefs-help-prefershttps": "Thèid an roghainn seo a chur an sàs an ath thuras a nì thu logadh a-steach.",
+ "prefswarning-warning": "Rinn thu atharrachadh air na roghainnean agad nach deach a shàbhaladh fhathast.\nCha tèid na roghainnean agad ùrachadh ma dh'fhàgas tu an duilleag seo gun bhriogadh air \"$1\".",
"prefs-tabs-navigation-hint": "Gliocas: 'S urrainn dhut na h-iuchraichean saighde chlì 's dheas a chleachdadh gus leum a ghearradh o thaba gu taba air liosta nan taba.",
"email-address-validity-valid": "Tha coltas gu bheil am post-d dligheach",
"email-address-validity-invalid": "Cuir a-steach post-d dligheach",
@@ -1039,7 +1064,8 @@
"right-deletedtext": "Cead teacsa 's atharraichean eadar mùthaidhean air an sguabadh às a shealltainn",
"right-browsearchive": "Cead lorg sna duilleagan air an sguabadh às",
"right-undelete": "Cead duilleagan air an sguabadh às aiseag",
- "right-suppressrevision": "Cead sùil a thoirt air mùthaidhean a chaidh a sguabadh às 's am falach o na rianairean 's an aiseag",
+ "right-suppressrevision": "Seall, falaich 's neo-fhalaich mùthaidhean sònraichte de dhuilleagan o chleachdaiche sam bith",
+ "right-viewsuppressed": "Seall na mùthaidhean a tha falaichte o chleachdaiche sam bith",
"right-suppressionlog": "Cead logaichean prìobhaideach a shealltainn",
"right-block": "Cead càch a bhacadh o dheasachadh",
"right-blockemail": "Cead cleachdaiche a bhacadh o chur phost-d",
@@ -1050,6 +1076,7 @@
"right-protect": "Cead leibheilean an dìona atharrachadh 's duilleagan le dìon o bhith mar eas a dheasachadh",
"right-editprotected": "Cead gus duilleagan le dìon \"{{int:protect-level-sysop}}\" a dheasachadh",
"right-editsemiprotected": "Cead gus duilleagan le dìon \"{{int:protect-level-autoconfirmed}}\" a dheasachadh",
+ "right-editcontentmodel": "Deasaich modail susbaint duilleige",
"right-editinterface": "Cead gus eadar-aghaidh nan cleachdaichean a dheasachadh",
"right-editusercssjs": "Cead gus faidhlichean CSS 's JavaScript càich a dheasachadh",
"right-editusercss": "Cead gus faidhlichean CSS càich a dheasachadh",
@@ -1077,6 +1104,7 @@
"right-override-export-depth": "Cead gus duilleagan às-phortadh, a' gabhail a-seach duilleagan ceangailte suas ri doimhneachd de 5",
"right-sendemail": "Cead gus puist-d a chur gu cleachdaichean eile",
"right-passwordreset": "Cead gus puist-d ath-shuidheachadh nam facal-faire a shealltainn",
+ "right-managechangetags": "Cruthaich is toir air falbh [[Special:Tags|tagaichean]] on stòr-dàta",
"newuserlogpage": "Loga cruthachadh nan cleachdaichean",
"newuserlogpagetext": "Seo loga nan cleachdaichean a chaidh a chruthachadh.",
"rightslog": "Loga ceadan a' chleachdaiche",
@@ -1122,12 +1150,14 @@
"action-viewmywatchlist": "seall an clàr-faire agad",
"action-viewmyprivateinfo": "seall am fiosrachadh prìobhaideach agad",
"action-editmyprivateinfo": "deasaich am fiosrachadh prìobhaideach agad",
+ "action-editcontentmodel": "deasaich modail susbaint duilleige",
+ "action-managechangetags": "cruthaich is thoir air falbh tagaichean on stòr-dàta",
"nchanges": "$1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}",
"enhancedrc-since-last-visit": "$1 on tadhal mu dheireadh",
"enhancedrc-history": "eachdraidh",
"recentchanges": "Mùthaidhean ùra",
"recentchanges-legend": "Roghainnean nam mùthaidhean ùra",
- "recentchanges-summary": "Cum sùil air na mùthaidhean as ùire a nithear air an uicidh air an duilleag seo.",
+ "recentchanges-summary": "Tha an duilleag seo a’ cumail sùil air na mùthaidhean as ùire a rinneadh air an uicidh.",
"recentchanges-noresult": "Cha fhreagair atharrachadh sam bith san ùine seo ris na cuspairean-deuchainn seo.",
"recentchanges-feed-description": "Cum sùil air na mùthaidhean as ùire a nithear air an uicidh seo san inbhir seo.",
"recentchanges-label-newpage": "Chruthaich thu duilleag ùr leis a sin",
@@ -1138,7 +1168,7 @@
"recentchanges-legend-heading": "'''Treòir:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (faic [[Special:NewPages|liosta nan duilleagan ùra]] cuideachd)",
"recentchanges-legend-plusminus": "(<em>±123</em>)",
- "rcnotefrom": "Gheibhear na mùthaidhean a-mach o <strong>$2</strong> (gu ruige <strong>$1</strong>) gu h-ìosal.",
+ "rcnotefrom": "Chì thu {{PLURAL:$5|am mùthadh|na mùthaidhean|na mùthaidhean|na mùthaidhean}} o <strong>$3 $4</strong> (gu ruige <strong>$1</strong> dhiubh) gu h-ìosal.",
"rclistfrom": "Seall na mùthaidhean ùra a-mach o $3 $2",
"rcshowhideminor": "$1 mùthaidhean beaga",
"rcshowhideminor-show": "Seall",
@@ -1194,9 +1224,9 @@
"uploaderror": "Mearachd leis an luchdadh suas",
"upload-recreate-warning": "<strong>Rabhadh: Chaidh faidhle air a bheil an t-ainm seo a sguabadh às no a ghluasad.</strong>\n\nSeo dhut loga an sguabaidh às 's nan gluasad airson na duilleige seo:",
"uploadtext": "Cleachd am foirm gu h-ìosal gus faidhlichean a luchdadh suas.\nGus na faidhlichean a chaidh a luchdadh suas roimhe a shealltainn no a lorg annta, rach gu [[Special:FileList|liosta nam faidhlichean air an luchdadh suas]], thèid (ath-)luchdaidhean suas a chur ri [[Special:Log/upload|loga nan luchdaidhean suas]] cuideachd 's na chaidh a sguabadh às ri [[Special:Log/delete|loga nan sguabaidhean às]].\n\nCleachd ceangal ann an aon dhe na cruthan seo gus faidhle a chur am broinn duilleige:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> gus an tionndadh slàn dhen fhaidhle a chleachdadh\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|teacsa alt]]</nowiki></code></strong> cus dreach a tha 200 piogsail a leud a chleachdadh a nochdas ann am bogsa air a' mharghan chlì le \"teacsa alt\" mar thuairisgeul\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> gus ceangal a dhèanamh ris an fhaidhle gu dìreach gun a bhith a' sealltainn an fhaidhle",
- "upload-permitted": "Seòrsaichean faidhle a tha ceadaichte: $1.",
- "upload-preferred": "Seòrsaichean faidhle as docha leinn: $1.",
- "upload-prohibited": "Seòrsaichean faidhle nach eil ceadaichte: $1.",
+ "upload-permitted": "{{PLURAL:$2|1=seòrsa|seòrsaichean}} faidhle a tha ceadaichte: $1.",
+ "upload-preferred": "{{PLURAL:$2|1=seòrsa|seòrsaichean}} faidhle as docha leinn: $1.",
+ "upload-prohibited": "{{PLURAL:$2|1=seòrsa|seòrsaichean}} faidhle nach eil ceadaichte: $1.",
"uploadlogpage": "Loga an luchdaidh suas",
"uploadlogpagetext": "Chì thu na faidhlichean a chaidh a luchdadh suas o chionn goirid gu h-ìosal.\nSeall [[Special:NewFiles|gailearaidh nam faidhlichean ùra]] airson foir-shealladh nas lèirsinniche.",
"filename": "Ainm-faidhle",
@@ -1353,9 +1383,11 @@
"license": "Ceadachadh:",
"license-header": "Ceadachadh",
"nolicense": "Cha deach gin a thaghadh",
+ "licenses-edit": "Deasaich roghainnean a' cheadachais",
"license-nopreview": "(Chan eil ro-shealladh ri làimh)",
- "upload_source_url": "(URL dligheach a ghabhas inntrigeadh gu poblach)",
- "upload_source_file": "(faidhle air a' choimpiutair agad)",
+ "upload_source_url": "(am faidhle a thagh thu o URL dligheach a ghabhas inntrigeadh gu poblach)",
+ "upload_source_file": "(am faidhle a thagh thu air a' choimpiutair agad)",
+ "listfiles-delete": "sguab às",
"listfiles-summary": "Seallaidh an duilleag shònraichte seo gach faidhle a chaidh a luchdadh suas.",
"listfiles_search_for": "Lorg airson ainm a' mheadhain:",
"imgfile": "faidhle",
@@ -1447,14 +1479,13 @@
"randomincategory": "Duilleag air thuaiream san roinn-seòrsa",
"randomincategory-invalidcategory": "Chan e \"$1\" 'na ainm roinn-seòrsa dligheach.",
"randomincategory-nopages": "Chan eil duilleag san roinn-seòrsa [[:Category:$1|$1]].",
- "randomincategory-selectcategory": "Faigh duilleag air thuaiream a tha san roinn-seòrsa: $1 $2.",
- "randomincategory-selectcategory-submit": "Siuthad",
+ "randomincategory-category": "Roinn-seòrsa:",
+ "randomincategory-legend": "Duilleag air thuaiream san roinn-seòrsa",
"randomredirect": "Ath-stiùireadh air thuaiream",
"randomredirect-nopages": "Chan eil ath-stiùireadh san ainm-spàs \"$1\".",
"statistics": "Stadastaireachd",
"statistics-header-pages": "Stadastaireachd nan duilleagan",
"statistics-header-edits": "Deasaich an stadastaireachd",
- "statistics-header-views": "Seall an stadastaireachd",
"statistics-header-users": "Stadastaireachd a' chleachdaiche",
"statistics-header-hooks": "Stadastaireachd eile",
"statistics-articles": "Duilleagan susbainte",
@@ -1463,13 +1494,9 @@
"statistics-files": "Faidhlichean a chaidh a luchdadh suas",
"statistics-edits": "Deasachaidhean air duilleagan on a chaidh {{SITENAME}} a stèidheachadh",
"statistics-edits-average": "Deasachaidhean cuibheasach air duilleag",
- "statistics-views-total": "Seallaidhean iomlan",
- "statistics-views-total-desc": "Chan fhaic thu na seallaidhean air duilleagan nach eil ann no air duilleag shònraichte",
- "statistics-views-peredit": "Seallaidhean air gach deasachadh",
"statistics-users": "[[Special:ListUsers|Cleachdaichean]] clàraichte",
"statistics-users-active": "Cleachdaichean gnìomhach",
"statistics-users-active-desc": "Cleachdaichean a rinn gnìomh rè {{PLURAL:$1|an $1 latha|an $1 latha|nan $1 làithean|an $1 latha}} mu dheireadh",
- "statistics-mostpopular": "Na duilleagan air an deach sealltainn as trice",
"pageswithprop": "Duilleagan le buadh duilleige",
"pageswithprop-legend": "Duilleagan le buadh duilleige",
"pageswithprop-text": "Seallaidh an duilleag seo duilleagan dhut air a bheil buadh duilleige shònraichte.",
@@ -1510,13 +1537,14 @@
"uncategorizedtemplates": "Teamplaidean gun roinn-seòrsa",
"unusedcategories": "Roinnean-seòrsa gun chleachdadh",
"unusedimages": "Faidhlichean gun chleachdadh",
- "popularpages": "Duilleagan air a bheil fèill mhòr",
"wantedcategories": "Roinnean-seòrsa a thathar 'gan iarraidh",
"wantedpages": "Duilleagan a thathar 'gan iarraidh",
"wantedpages-badtitle": "Tha tiotal mì-dhligheach am measg nan toraidhean: $1",
"wantedfiles": "Faidhlichean a thathar 'gan iarraidh",
"wantedfiletext-cat": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann. Dh'fhaoidte gum bi faidhlichean o ionadan-tasgaidh cèine 'gan sealltainn an-seo ged a tha iad ann. Bidh <del>loidhne tro</del> na toraidhean a bharrachd seo. A bharrachd air sin, chì thu na duilleagan sa bhios faidhlichean nach eil ann leabaichte air [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann. A bharrachd air sin, chì thu na duilleagan le faidhlichean leabaichte nach eil ann air [[:$1]].",
"wantedfiletext-nocat": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann. Dh'fhaoidte gum bi faidhlichean o ionadan-tasgaidh cèine 'gan sealltainn an-seo ged a tha iad ann. Bidh <del>loidhne tro</del> na toraidhean a bharrachd seo.",
+ "wantedfiletext-nocat-noforeign": "Tha na faidhlichean a leanas 'gan cleachdadh ach chan eil iad ann.",
"wantedtemplates": "Teamplaidean a thathar 'gan iarraidh",
"mostlinked": "Na duilleagan ris a bheil an àireamh as motha de cheanglaichean",
"mostlinkedcategories": "Na roinnean-seòrsa ris a bheil an àireamh as motha de cheanglaichean",
@@ -1573,7 +1601,6 @@
"booksources": "Tùsan a tha 'nan leabhraichean",
"booksources-search-legend": "Lorg tùsan a tha 'nan leabhraichean",
"booksources-isbn": "ISBN:",
- "booksources-go": "Siuthad",
"booksources-text": "Chì thu liosta dhe cheanglaichean gu làraichean eile a reiceas leabhraichean ùra 's cleachdte gu h-ìosal 's ma dh'fhaoidte gum faigh thu barrachd fiosrachaidh orra mu leabhraichean a tha thu a' sireadh:",
"booksources-invalid-isbn": "Tha coltas mì-dhligheach air an ISBN a chaidh a thoirt seachad; dearbhaich gun deach lethbhreac a dhèanamh dheth on tùs gun mhearachd.",
"specialloguserlabel": "Cò rinn e:",
@@ -1653,10 +1680,10 @@
"noindex-category-desc": "Cha dèid an duilleag seo a chur ris an inneacs luirg le botaichean on a tha am facal draoidheach <code><nowiki>__NOINDEX__</nowiki></code> air 's a tha i ann an ainm-spàs far a bheil a' bhratach seo ceadaichte.",
"index-category-desc": "Tha <code><nowiki>__INDEX__</nowiki></code> air an duilleag seo ('s tha i ann an ainm-spàs far a bheil a' bhratach seo ceadaichte) 's mar sin thèid a chur ri inneacsan luirg le botaichean ged nach tachradh seo gu h-àbhaisteach.",
"post-expand-template-inclusion-category-desc": "Bhiodh an duilleag nas motha na <code>$wgMaxArticleSize</code> às dèidh a h-uile teamplaid a leudachadh 's mar sin cha deach a h-uile teamplaid a leudachadh.",
- "post-expand-template-argument-category-desc": "Bidh an duilleag nas motha na <code>$wgMaxArticleSize</code> às dèidh argamaid teamplaid a leudachadh (rudeigin eadar camagan dualach trìoblaichte, can <code>{{{Foo}}}</code>).",
- "expensive-parserfunction-category-desc": "Tha cus foincseanan cosgail a' pharsair (can <code>#ifexist</code>) am broinn duilleige. Faic [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
- "broken-file-category-desc": "Thèid an roinn-seòrsa seo a chur ris nuair a bhios ceangal gu faidhle briste am broinn na duilleige (ceangal gus faidhle a leabachadh mur eil am faidhle ann).",
- "hidden-category-category-desc": "Seo ronn-seòrsa le <code><nowiki>__HIDDENCAT__</nowiki></code> oirre ach nach nochd i ann am bogsa nan ceanglaichean gu roinnean-seòrsa air na duilleagan o thùs.",
+ "post-expand-template-argument-category-desc": "Bidh an duilleag nas motha na <code>$wgMaxArticleSize</code> às dèidh argamaid teamplaid a leudachadh (rudeigin eadar camagan dualach trìoblaichte, can <code>{{{Foo}}}</code>).",
+ "expensive-parserfunction-category-desc": "Tha cus foincseanan cosgail a' pharsair (can <code>#ifexist</code>) am broinn na duilleige. Faic [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "Tha ceangal gu faidhle briste am broinn na duilleige (ceangal gus faidhle a leabachadh fad 's nach eil am faidhle ann).",
+ "hidden-category-category-desc": "Seo roinn-seòrsa le <code><nowiki>__HIDDENCAT__</nowiki></code> 'na susbaint ach nach nochd i ann am bogsa nan ceanglaichean gu roinnean-seòrsa air na duilleagan o thùs.",
"trackingcategories-nodesc": "Chan eil tuairisgeul ri làimh.",
"trackingcategories-disabled": "Tha an roinn-seòrsa à comas",
"mailnologin": "Gun seòladh an t-seòladair",
@@ -1694,7 +1721,7 @@
"mywatchlist": "An clàr-faire",
"watchlistfor2": "aig $1 $2",
"nowatchlist": "Chan eil rud sam bith air a' chlàr-fhaire agad.",
- "watchlistanontext": "$1 gus nithean air a' chlàr-fhaire agad a shealltainn no a dheasachadh.",
+ "watchlistanontext": "Log a-steach gus nithean air a' chlàr-fhaire agad a shealltainn no a dheasachadh.",
"watchnologin": "Chan eil thu air logadh a-steach",
"addwatch": "Cuir air a' chlàr-fhaire",
"addedwatchtext": "Chaidh an duilleag \"[[:$1]]\" a chur ris a' [[Special:Watchlist|chlàr-fhaire]] agad.\nNochdaidh mùthaidhean a nithear air an duilleag seo 's air an duilleag deasbaireachd a tha co-cheangailte ris an-seo san àm ri teachd.",
@@ -1711,8 +1738,8 @@
"watchlist-details": "Tha {{PLURAL:$1|$1 duilleag|$1 dhuilleag|$1 duilleagan|$1 duilleag}} air a' chlàr-fhaire agad, gun luaidh air na duilleagan deasbaireachd.",
"wlheader-enotif": "Tha brathan-naidheachd air a' phost-d an comas.",
"wlheader-showupdated": "Tha clò <strong>trom</strong> air duilleagan a chaidh atharrachadh on turas mu dheireadh a thadhail thu orra.",
- "wlnote": "Seo {{PLURAL:$1|an $1 mhùthadh|$1 mhùthadh|na $1 mùthaidhean|$1 mùthadh}} mu dheireadh san {{PLURAL:$2|$2 uair a thìde|$2 uair a thìde|$2 uairean a thìde|$2 uair a thìde}} mu dheireadh, mar a bha e $3, $4.",
- "wlshowlast": "Seall na $1 uairean a thìde mu dheireadh $2 làithean mu dheireadh $3",
+ "wlnote": "Chì thu gu h-ìosal {{PLURAL:$1|a' $1 mhùthadh|an $1 mhùthadh|na $1 mùthaidhean|am $1 mùthadh}} mu dheireadh san {{PLURAL:$2|$2 uair a thìde|$2 uair a thìde|$2 uairean a thìde|$2 uair a thìde}} mu dheireadh, mar a bha e $3, $4.",
+ "wlshowlast": "Seall na $1 uairean a thìde mu dheireadh $2 làithean mu dheireadh",
"watchlist-options": "Roghainnean mo chlàir-faire",
"watching": "'Ga chur air a' chlàr-fhaire...",
"unwatching": "A' toirt far a' chlàir-fhaire...",
@@ -1758,9 +1785,9 @@
"delete-edit-reasonlist": "Deasaich adhbharan sguabadh às",
"delete-toobig": "Tha eachdraidh deasachaidh mòr aig an duilleag seo sa bheil barrachd air $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}.\nChaidh sguabadh às nan duilleagan dhen leithid a chuingeachadh ach na dèid cron a dhèanamh air {{SITENAME}} le mearachd.",
"delete-warning-toobig": "Tha eachdraidh deasachaidh mòr aig an duilleag seo sa bheil barrachd air $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}.\nMa sguabas tu às dhi, dh'fhaoidte gun dèan thu cron air na gnìomhan stòr-dàta aig {{SITENAME}}; mar sin, thoir an aire.",
+ "deleteprotected": "Chan urrainn dhut an duilleag seo a sguabadh às on a chaidh a dìon.",
"deleting-backlinks-warning": "'''Rabhadh:''' Tha [[Special:WhatLinksHere/{{FULLPAGENAME}}|duilleag eile]] a' ceangal ris an duilleag a tha thu airson sguabadh às no 'ga gabhail a-steach 'na h-iomradh.",
"rollback": "Roilig atharraichean air ais",
- "rollback_short": "Roladh air ais",
"rollbacklink": "roilig air ais",
"rollbacklinkcount": "roilig $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} air ais",
"rollbacklinkcount-morethan": "roilig barrachd air $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} air ais",
@@ -1811,6 +1838,7 @@
"protect-othertime": "Àm eile:",
"protect-othertime-op": "àm eile",
"protect-existing-expiry": "Falbhaidh an ùine air mar-thà: $2 $3",
+ "protect-existing-expiry-infinity": "Chan fhalbh an ùine air gu buan mar-thà",
"protect-otherreason": "Adhbhar eile/a bharrachd:",
"protect-otherreason-op": "Adhbhar eile",
"protect-dropdown": "*Na h-adhbharan dìona as cumanta\n** Cus bhandalachd\n** Cus spama\n** Còmhstrithean deasachaidh nach eil torrach\n** Duilleag air a bheil trafaig mhòr",
@@ -1956,6 +1984,7 @@
"unblocked": "Chaidh [[User:$1|$1]] a neo-bhacadh.",
"unblocked-range": "Chaidh $1 a neo-bhacadh.",
"unblocked-id": "Chaidh am bacadh $1 a thoirt air falbh.",
+ "unblocked-ip": "Chaidh [[Special:Contributions/$1|$1]] a neo-bhacadh.",
"blocklist": "Cleachdaichean a chaidh a bhacadh",
"ipblocklist": "Cleachdaichean a chaidh a bhacadh",
"ipblocklist-legend": "Lorg cleachdaiche a chaidh a bhacadh",
@@ -2143,7 +2172,8 @@
"import": "Ion-phortaich duilleagan",
"importinterwiki": "Ion-phortachadh tar-uicidh",
"import-interwiki-text": "Tagh uicidh 's tiotal na duilleige airson ion-phortachadh.\nThèid cinn-là nam mùthaidhean 's ainmean nan deasaichean a ghlèidheadh.\nThèid gach gnìomh ion-phortachadh tar-uicidh a chur ris an [[Special:Log/import|loga ion-phortachaidh]].",
- "import-interwiki-source": "An uicidh/duilleag thùsail:",
+ "import-interwiki-sourcewiki": "An uicidh thùsail:",
+ "import-interwiki-sourcepage": "An duilleag thùsail:",
"import-interwiki-history": "Dèan lethbhreac de dh'eachdraidh nam mùthaidhean slàna airson na duilleige seo",
"import-interwiki-templates": "Gabh a-steach na teamplaidean uile",
"import-interwiki-submit": "Ion-phortaich",
@@ -2177,7 +2207,7 @@
"import-error-create": "Cha deach an duilleag \"$1\" ion-phortachadh o nach fhaod thu a cruthachadh.",
"import-error-interwiki": "Cha deach an duilleag \"$1\" ion-phortachadh on a chaidh ainm a ghlèidheadh airson ceangal a-mach (eadar-uicidh).",
"import-error-special": "Cha deach an duilleag \"$1\" ion-phortadh on a bhuineas i ri ainm-spàs sònraichte nach ceadaich duilleagan.",
- "import-error-invalid": "Cha deach an duilleag \"$1\" ion-phortachadh on a tha ainm mì-dhligheach.",
+ "import-error-invalid": "Cha deach an duilleag \"$1\" ion-phortachadh on a tha a h-ainm mì-dhligheach air an uicidh seo.",
"import-error-unserialize": "Cha ghabh mùthadh $2 dhen duilleag \"$1\" a thogail on tionndadh serialized. Chaidh aithris gun cleachd am mùthadh modail susbaint $3 a tha serialized mar $4.",
"import-error-bad-location": "Cha ghabh am mùthadh $2 a chleachdas modail susbainte $3 a stòradh air \"$1\" air an uicidh seo o nach cuir an duilleag ud taic ris a' mhodail seo.",
"import-options-wrong": "{{PLURAL:$2|Roghainn cearr|Roghainnean cearra}}: <nowiki>$1</nowiki>",
@@ -2185,18 +2215,14 @@
"import-rootpage-nosubpage": "Cha cheadaich an t-ainm-spàs \"$1\" aig an duilleag freumha fo-duilleagan.",
"importlogpage": "Loga an ion-phortachaidh",
"importlogpagetext": "Ion-phortachadh rianachd de dhuilleagan aig a bheil eachdraidh mhùthaidhean o uicidhean eile.",
- "import-logentry-upload": "chaidh [[$1]] ion-phortachadh le luchdadh suas faidhle",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|mhùthadh|mùthadh|mùthaidhean|mùthadh}}",
- "import-logentry-interwiki": "air fhaighinn 'na thar-uicidh $1",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} o $2",
+ "import-logentry-upload-detail": "Chaidh $1 {{PLURAL:$1|mhùthadh|mùthadh|mùthaidhean|mùthadh}} ion-phortachadh",
+ "import-logentry-interwiki-detail": "Chaidh $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} ion-phortachadh o $2",
"javascripttest": "Deuchainn air JavaScript",
- "javascripttest-title": "A' ruith deuchainnean aig $1",
"javascripttest-pagetext-noframework": "Tha an duilleag seo glèidhte airson deuchainnean JavaScript a ruith.",
"javascripttest-pagetext-unknownframework": "Framework deuchainn \"$1\" neo-aithnichte.",
"javascripttest-pagetext-frameworks": "Feuch an tagh thu aon dhe na frameworks deuchainn seo: $1",
"javascripttest-pagetext-skins": "Tagh craiceann airson ruith nan deuchainnean:",
"javascripttest-qunit-intro": "Faic [$1 docamaideadh nan deuchainnean] air mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
"tooltip-pt-userpage": "An duilleag phearsanta agad",
"tooltip-pt-anonuserpage": "Duilleag a' chleachdaiche airson an t-seòlaidh IP leis a bheil thu a' deasachadh",
"tooltip-pt-mytalk": "Duilleag do dheasbaireachd",
@@ -2312,7 +2338,6 @@
"pageinfo-robot-policy": "Inneacsadh le robotairean",
"pageinfo-robot-index": "Ceadaichte",
"pageinfo-robot-noindex": "Neo-cheadaichte",
- "pageinfo-views": "Air a sealltainn",
"pageinfo-watchers": "A' cumail sùil air",
"pageinfo-few-watchers": "Tha nas lugha na $1 a' cumail sùil air",
"pageinfo-redirects-name": "Ath-stiùiridhean dhan duilleag seo",
@@ -2540,7 +2565,7 @@
"exif-gpsdifferential": "Ceartachadh diofarail GPS",
"exif-coordinate-format": "$1° $2′ $3″ $4",
"exif-jpegfilecomment": "Beachd faidhle JPEG",
- "exif-keywords": "Facalan-luirg",
+ "exif-keywords": "Faclan-luirg",
"exif-worldregioncreated": "An roinn-dùthcha san deach an dealbh a thogail",
"exif-countrycreated": "An dùthaich san deach an dealbh a thogail",
"exif-countrycodecreated": "Còd na dùthcha san deach an dealbh a thogail",
@@ -2786,7 +2811,6 @@
"exif-urgency-low": "Ìosal ($1)",
"exif-urgency-high": "Àrd ($1)",
"exif-urgency-other": "Prìomhachas gnàthaiche ($1)",
- "watchlistall2": "na h-uile",
"namespacesall": "na h-uile",
"monthsall": "na h-uile",
"confirmemail": "Dearbhaich an seòladh puist-dhealain",
@@ -2855,6 +2879,7 @@
"autosumm-replace": "Chaidh \"$1\" a chur an àite na susbaint",
"autoredircomment": "Chaidh an duilleag ath-stiùireadh gu [[$1]]",
"autosumm-new": "Chaidh duilleag le \"$1\" a chruthachadh",
+ "autosumm-newblank": "Chaidh duilleag bhàn a chruthachadh",
"size-bytes": "$1 B",
"size-kilobytes": "$1 KB",
"size-megabytes": "$1 MB",
@@ -2902,8 +2927,8 @@
"watchlisttools-raw": "Deasaich còd a' chlàir-fhaire",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|an deasbaireachd]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "Taga leudachain \"$1\" neo-aithnichte",
"duplicate-defaultsort": "<strong>Rabhadh:</strong> Tha an iuchair seòrsachaidh bhunaiteach \"$2\" a' dol thairis air seann iuchair eile, \"$1\".",
+ "duplicate-displaytitle": "<strong>Rabhadh:</strong> Tha an tiotal taisbeanaidh \"$2\" a' dol thairis air seann tiotal taisbeanaidh eile, \"$1\".",
"version": "Tionndadh",
"version-extensions": "Leudachain air an stàladh",
"version-skins": "Craicnean",
@@ -3066,20 +3091,24 @@
"logentry-rights-rights": "Dh'atharraich $1 {{GENDER:$2|a bhallrachd|a ballrachd}} ann am buidheann airson $3 o $4 gu $5",
"logentry-rights-rights-legacy": "Dh'atharraich $1 {{GENDER:$2|a bhallrachd|a ballrachd}} ann am buidheann airson $3",
"logentry-rights-autopromote": "Chaidh $1 àrdachadh o $4 gu $5 gu fèin-obrachail",
+ "logentry-upload-upload": "Luchdaich $1 $3 suas",
+ "logentry-upload-overwrite": "Luchdaich $1 tionndadh ùr de $3 suas",
+ "logentry-upload-revert": "Luchdaich $1 $3 suas",
"rightsnone": "(chan eil gin)",
+ "revdelete-summary": "gearr-chunntas an deasachaidh",
+ "feedback-adding": "A' cur beachd ri duilleag...",
+ "feedback-bugcheck": "Taghta! Dearbhaich nach eil e air [$1 liosta nam bugaichean air a bheil sinn eòlach] mar-thà.",
+ "feedback-bugnew": "Dhearbh mi seo. Dèan aithris air buga ur",
"feedback-bugornote": "Ma tha fiosrachadh mionaideach agad air duilgheadas teicnigeach, feuch an dèan thu [$1 aithris air buga].\nMur eil, 's urrainn dhut am foirm furasta a chleachdadh gu h-ìosal. Thèid do bheachd a chur ris an duilleag \"[$3 $2]\" is d' ainm-cleachdaiche a chur ris.",
- "feedback-subject": "Cuspair:",
- "feedback-message": "Teachdaireachd:",
"feedback-cancel": "Sguir dheth",
- "feedback-submit": "Cuir do bheachd a-null",
- "feedback-adding": "A' cur beachd ri duilleag...",
+ "feedback-close": "Dèanta",
"feedback-error1": "Mearachd: Chan aithnich sinn toradh an API",
"feedback-error2": "Mearachd: Dh'fhàillig leis an deasachadh",
"feedback-error3": "Mearachd: Cha d' fhuair sinn freagairt on API",
+ "feedback-message": "Teachdaireachd:",
+ "feedback-subject": "Cuspair:",
+ "feedback-submit": "Cuir a-null",
"feedback-thanks": "Mòran taing! Chaidh do bheachd a phostadh air an duilleag \"[$2 $1]\".",
- "feedback-close": "Dèanta",
- "feedback-bugcheck": "Taghta! Dearbhaich nach eil e air [$1 liosta nam bugaichean air a bheil sinn eòlach] mar-thà.",
- "feedback-bugnew": "Dhearbh mi seo. Dèan aithris air buga ur",
"searchsuggest-search": "Lorg",
"searchsuggest-containing": "anns a bheil...",
"api-error-badaccess-groups": "Chan eil cead agad gus faidhlichean a luchdadh suas dhan uicidh seo.",
@@ -3133,13 +3162,22 @@
"duration-centuries": "$1 {{PLURAL:$1|linn|linn|linntean|linn}}",
"duration-millennia": "$1 {{PLURAL:$1|mhìle bliadhna|mhìle bliadhna|mìle bliadhna|mìle bliadhna}}",
"rotate-comment": "Chaidh an dealbh a chuairteachadh le $1 {{PLURAL:$1|cheum|cheum|ceuman|ceum}} gu tuathal",
+ "limitreport-title": "Dàta pròifil a' pharsair",
+ "limitreport-cputime": "Cleachdadh ùine a' CPU",
"limitreport-cputime-value": "$1 {{PLURAL:$1|diog|dhiog|diogan|diog}}",
+ "limitreport-walltime": "Cleachdadh fìor-ùine",
"limitreport-walltime-value": "$1 {{PLURAL:$1|diog|dhiog|diogan|diog}}",
+ "limitreport-ppvisitednodes": "Àireamh nan nòdan ris an do thadhal an ro-phròiseasar",
"limitreport-ppvisitednodes-value": "$1/$2",
+ "limitreport-ppgeneratednodes": "Àireamh nan nòdan a ghin an ro-phròiseasar",
"limitreport-ppgeneratednodes-value": "$1/$2",
+ "limitreport-postexpandincludesize": "Meud na gabhail a-steach às dèidh an leudachaidh",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bhaidht|bhaidht|baidhtichean|baidht}}",
+ "limitreport-templateargumentsize": "Meud nan argamaidean air an teamplaid",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bhaidht|bhaidht|baidhtichean|baidht}}",
+ "limitreport-expansiondepth": "Doimhne as motha an leudachaidh",
"limitreport-expansiondepth-value": "$1/$2",
+ "limitreport-expensivefunctioncount": "Cunntadh air foincseanan daora a' pharsair",
"limitreport-expensivefunctioncount-value": "$1/$2",
"expandtemplates": "Leudaich na templaidean",
"expand_templates_intro": "Gabhaidh an duilleag shònraichte seo ri teacsa agus leudaichidh i a h-uile teamplaid na broinn gu ath-chùrsach.\nLeudaichidh i cuideachd foincseanan parsair ris a chuirear taic, can\n<code><nowiki>{{</nowiki>#language:…}}</code> agus caochladairean mar\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nAir deireadh na sgeòil, leudaichidh i cha mhòr gach rud eadar camagan dualach dùbailte.",
@@ -3163,5 +3201,38 @@
"action-pagelang": "atharraich cànan nan duilleagan",
"log-name-pagelang": "Loga air atharrachadh nan cànan",
"log-description-pagelang": "Seo loga dhe na h-atharraichean air cànanan nan duilleagan.",
- "logentry-pagelang-pagelang": "Dh'atharraich $1 cànan nan duilleagan airson $3 o $4 gu $5."
+ "logentry-pagelang-pagelang": "Dh'atharraich $1 cànan nan duilleagan airson $3 o $4 gu $5.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (an comas)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''à comas''')",
+ "mediastatistics": "Stadastaireachd nam meadhanan",
+ "mediastatistics-summary": "Stadastaireachd air na seòrsaichean faidhle a chaidh a luchdadh suas. Cha ghabh seo a-steach ach an tionndadh as ùire de gach faidhle. Tha seann-tionndaidhean 's faidhlichean air an sguabadh às 'gan leigeil seachad.",
+ "mediastatistics-nfiles": "$1 ($2%)",
+ "mediastatistics-nbytes": "%1 {{PLURAL:$1|bhaidht|bhaidht|baidhtichean|baidht}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Seòrsa MIME",
+ "mediastatistics-table-extensions": "Leudachain comasach",
+ "mediastatistics-table-count": "Àireamh de dh'fhaidhlichean",
+ "mediastatistics-table-totalbytes": "Meud iomlan",
+ "mediastatistics-header-unknown": "Chan eil fhios",
+ "mediastatistics-header-bitmap": "Dealbhan bitmap",
+ "mediastatistics-header-drawing": "Tàirngean (dealbhan vector)",
+ "mediastatistics-header-audio": "Fuaim",
+ "mediastatistics-header-video": "Videothan",
+ "mediastatistics-header-multimedia": "Meadhanan beartach",
+ "mediastatistics-header-office": "Oifis",
+ "mediastatistics-header-text": "Teacsa",
+ "mediastatistics-header-executable": "Faidhlichean so-ghnìomhaichte",
+ "mediastatistics-header-archive": "Fòrmatan dùmhlaichte",
+ "special-characters-group-latin": "Laideann",
+ "special-characters-group-latinextended": "Laideann leudaichte",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Siombalan",
+ "special-characters-group-greek": "Greugais",
+ "special-characters-group-cyrillic": "Cirilis",
+ "special-characters-group-arabic": "Arabais",
+ "special-characters-group-persian": "Farsaidh",
+ "special-characters-group-hebrew": "Eabhra",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati"
}
diff --git a/languages/i18n/gl.json b/languages/i18n/gl.json
index f8345fef..c3a46e80 100644
--- a/languages/i18n/gl.json
+++ b/languages/i18n/gl.json
@@ -15,7 +15,13 @@
"Xosé",
"לערי ריינהארט",
"Fitoschido",
- "McDutchie"
+ "McDutchie",
+ "Josep Maria 15.",
+ "Fisterraeomar",
+ "Breogan2008",
+ "VaiPolaSombra",
+ "Macofe",
+ "Banjo"
]
},
"tog-underline": "Subliñar as ligazóns:",
@@ -26,24 +32,24 @@
"tog-usenewrc": "Agrupar as modificacións por páxina nos cambios recentes e na lista de vixilancia",
"tog-numberheadings": "Numerar automaticamente as cabeceiras",
"tog-showtoolbar": "Mostrar a barra de ferramentas de edición",
- "tog-editondblclick": "Editar as páxinas logo de facer dobre clic",
+ "tog-editondblclick": "Facer dobre clic para editar as páxinas",
"tog-editsectiononrightclick": "Permitir a edición de seccións premendo co botón dereito nos títulos das seccións",
"tog-watchcreations": "Engadir as páxinas que cree e os ficheiros que cargue á miña lista de vixilancia",
"tog-watchdefault": "Engadir as páxinas e os ficheiros que edite á miña lista de vixilancia",
"tog-watchmoves": "Engadir as páxinas e os ficheiros que mova á miña lista de vixilancia",
"tog-watchdeletion": "Engadir as páxinas e os ficheiros que borre á miña lista de vixilancia",
"tog-watchrollback": "Engadir as páxinas nas que realice unha reversión á miña lista de vixilancia",
- "tog-minordefault": "Marcar por omisión todas as edicións como pequenas",
+ "tog-minordefault": "Marcar todas as edicións como pequenas por defecto",
"tog-previewontop": "Mostrar a vista previa antes da caixa de edición",
"tog-previewonfirst": "Mostrar a vista previa na primeira edición",
- "tog-enotifwatchlistpages": "Enviádeme unha mensaxe de correo electrónico cando unha páxina ou un ficheiro da miña lista de vixilancia sufra un cambio",
- "tog-enotifusertalkpages": "Enviádeme unha mensaxe de correo electrónico cando a miña páxina de conversa cambie",
+ "tog-enotifwatchlistpages": "Desexo recibir un aviso por correo electrónico cando unha páxina ou un ficheiro da miña lista de vixilancia sufra algún cambio",
+ "tog-enotifusertalkpages": "Desexo recibir un aviso por correo electrónico cando a miña páxina de conversa cambie",
"tog-enotifminoredits": "Enviádeme tamén unha mensaxe de correo electrónico cando se produzan edicións pequenas nas páxinas ou nos ficheiros",
"tog-enotifrevealaddr": "Revelar o meu enderezo de correo electrónico nos correos de notificación",
"tog-shownumberswatching": "Mostrar o número de usuarios que están a vixiar",
"tog-oldsig": "Sinatura actual:",
"tog-fancysig": "Tratar a sinatura como se fose texto wiki (sen ligazón automática)",
- "tog-uselivepreview": "Usar a vista previa en tempo real (experimental)",
+ "tog-uselivepreview": "Usar a vista previa en tempo real",
"tog-forceeditsummary": "Avisádeme cando o campo resumo estea baleiro",
"tog-watchlisthideown": "Agochar as edicións propias na lista de vixilancia",
"tog-watchlisthidebots": "Agochar as edicións dos bots na lista de vixilancia",
@@ -218,6 +224,7 @@
"otherlanguages": "Outras linguas",
"redirectedfrom": "(Redirixido desde \"$1\")",
"redirectpagesub": "Páxina de redirección",
+ "redirectto": "Redirixir cara a:",
"lastmodifiedat": "A última modificación desta páxina foi o $1 ás $2.",
"viewcount": "Esta páxina foi visitada {{PLURAL:$1|unha vez|$1 veces}}.",
"protectedpage": "Páxina protexida",
@@ -230,6 +237,7 @@
"pool-queuefull": "A cola está chea",
"pool-errorunknown": "Erro descoñecido",
"pool-servererror": "O servidor de contador de recursos comúns non está dispoñible ($1).",
+ "poolcounter-usage-error": "Erro de uso: $1",
"aboutsite": "Acerca de {{SITENAME}}",
"aboutpage": "Project:Acerca de",
"copyright": "Todo o contido está dispoñible baixo a licenza $1, agás que se indique o contrario.",
@@ -239,12 +247,13 @@
"disclaimers": "Advertencias",
"disclaimerpage": "Project:Advertencia xeral",
"edithelp": "Axuda de edición",
+ "helppage-top-gethelp": "Axuda",
"mainpage": "Portada",
"mainpage-description": "Portada",
"policy-url": "Project:Políticas e normas",
"portal": "Portal da comunidade",
"portal-url": "Project:Portal da comunidade",
- "privacy": "Política de protección de datos",
+ "privacy": "Política de privacidade",
"privacypage": "Project:Política de protección de datos",
"badaccess": "Erro de permisos",
"badaccess-group0": "Non ten os permisos necesarios para executar a acción que solicitou.",
@@ -317,10 +326,13 @@
"readonly_lag": "A base de datos bloqueouse automaticamente mentres os servidores levan a cabo a sincronización co servidor principal",
"internalerror": "Erro interno",
"internalerror_info": "Erro interno: $1",
- "filecopyerror": "Non se deu copiado o ficheiro \"$1\" a \"$2\".",
- "filerenameerror": "Non se pode cambiar o nome do ficheiro \"$1\" a \"$2\".",
+ "internalerror-fatal-exception": "Excepción grave de tipo \"$1\"",
+ "filecopyerror": "Non se puido copiar o ficheiro \"$1\" en \"$2\".",
+ "filerenameerror": "Non se puido cambiar o nome do ficheiro \"$1\" a \"$2\".",
"filedeleteerror": "Non se deu borrado o ficheiro \"$1\".",
"directorycreateerror": "Non se puido crear o directorio \"$1\".",
+ "directoryreadonlyerror": "\"$1\" é un cartafol de só lectura.",
+ "directorynotreadableerror": "Non ten permisos de lectura no cartafol \"$1\".",
"filenotfound": "Non se deu atopado o ficheiro \"$1\".",
"unexpected": "Valor inesperado: \"$1\"=\"$2\".",
"formerror": "Erro: Non se pode enviar o formulario.",
@@ -342,7 +354,8 @@
"viewsourcetext": "Pode ver e copiar o código fonte desta páxina:",
"viewyourtext": "Pode ver e copiar o código fonte '''das súas edicións''' nesta páxina:",
"protectedinterface": "Esta páxina fornece o texto da interface do software e está protexida para evitar o seu abuso.\nPara engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
- "editinginterface": "'''Aviso:''' Está editando unha páxina usada para fornecer o texto da interface do software.\nOs cambios nesta páxina afectarán á aparencia da interface dos outros usuarios do wiki.\nPara engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
+ "editinginterface": "<strong>Aviso:</strong> Está editando unha páxina usada para fornecer o texto da interface do software.\nOs cambios feitos nesta páxina afectarán á aparencia da interface dos outros usuarios do wiki.",
+ "translateinterface": "Para engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Special:MainPage?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
"cascadeprotected": "Esta páxina foi protexida fronte á edición debido a que está incluída {{PLURAL:$1|na seguinte páxina protexida, que ten|nas seguintes páxinas protexidas, que teñen}} a \"protección en serie\" activada:\n$2",
"namespaceprotected": "Non ten os permisos necesarios para modificar páxinas no espazo de nomes '''$1'''.",
"customcssprotected": "Non ten os permisos necesarios para modificar esta páxina de CSS, dado que contén a configuración persoal doutro usuario.",
@@ -399,6 +412,8 @@
"userlogin-resetlink": "Esqueceu os seus datos de rexistro?",
"userlogin-resetpassword-link": "Esqueceu o contrasinal?",
"userlogin-helplink2": "Axuda co rexistro",
+ "userlogin-loggedin": "Xa accedeu ao sistema como {{GENDER:$1|$1}}.\nUtilice o formulario inferior para acceder como outro usuario.",
+ "userlogin-createanother": "Crear outra conta",
"createacct-emailrequired": "Enderezo de correo electrónico",
"createacct-emailoptional": "Enderezo de correo electrónico (opcional)",
"createacct-email-ph": "Insira o seu enderezo de correo electrónico",
@@ -426,7 +441,7 @@
"nocookiesfornew": "Non se creou a conta de usuario porque non puidemos confirmar a súa orixe.\nAsegúrese de que ten as cookies habilitadas, volva cargar a páxina e inténteo de novo.",
"noname": "Non especificou un nome de usuario válido.",
"loginsuccesstitle": "Accedeu correctamente",
- "loginsuccess": "'''Accedeu ao sistema {{SITENAME}} como \"$1\".'''",
+ "loginsuccess": "<strong>Accedeu ao sistema de {{SITENAME}} como \"$1\".</strong>",
"nosuchuser": "Non existe ningún usuario chamado \"$1\".\nOs nomes de usuario diferencian entre maiúsculas e minúsculas.\nVerifique o nome que inseriu ou [[Special:UserLogin/signup|cree unha nova conta]].",
"nosuchusershort": "Non existe ningún usuario chamado \"$1\".\nVerifique o nome que inseriu.",
"nouserspecified": "Cómpre especificar un nome de usuario.",
@@ -460,7 +475,7 @@
"createaccount-text": "Alguén creou unha conta chamada \"$2\" para o seu enderezo de correo electrónico en {{SITENAME}} ($4), e con contrasinal \"$3\".\nDebe acceder ao sistema e mudar o contrasinal agora.\n\nPode facer caso omiso desta mensaxe se se creou esta conta por erro.",
"login-throttled": "Fixo demasiados intentos de acceder ao sistema.\nPor favor, agarde $1 antes de probar outra vez.",
"login-abort-generic": "Acceso ao sistema incorrecto; abortado",
- "login-migrated-generic": "A súa conta foi migrada, e o seu nome de usuario xa non existe nesta wiki.",
+ "login-migrated-generic": "A súa conta foi migrada e o seu nome de usuario xa non existe neste wiki.",
"loginlanguagelabel": "Lingua: $1",
"suspicious-userlogout": "Rexeitouse a súa petición de saír do sistema porque semella que a enviou un navegador roto ou a caché dun proxy.",
"createacct-another-realname-tip": "O nome real é opcional.\nSe escolle dalo utilizarase para atribuír ao usuario o seu traballo.",
@@ -512,7 +527,6 @@
"passwordreset-emailsent-capture": "Enviouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación.",
"passwordreset-emailerror-capture": "Xerouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación, pero o envío {{GENDER:$2|ao usuario|á usuaria}} fallou: $1",
"changeemail": "Cambiar o enderezo de correo electrónico",
- "changeemail-header": "Cambiar o enderezo de correo electrónico da conta",
"changeemail-text": "Encha este formulario para cambiar o seu enderezo de correo electrónico. Terá que escribir o seu contrasinal para confirmar este cambio.",
"changeemail-no-info": "Debe rexistrarse para acceder directamente a esta páxina.",
"changeemail-oldemail": "Enderezo de correo electrónico actual:",
@@ -520,7 +534,6 @@
"changeemail-none": "(ningún)",
"changeemail-password": "O seu contrasinal en {{SITENAME}}:",
"changeemail-submit": "Cambiar o correo electrónico",
- "changeemail-cancel": "Cancelar",
"changeemail-throttled": "Fixo demasiados intentos de acceder ao sistema.\nPor favor, agarde $1 antes de probar outra vez.",
"resettokens": "Restablecer os pases",
"resettokens-text": "Aquí pode restablecer os pases que permiten acceder a certos datos privados asociados á súa conta.\n\nDebería facelo se os compartiu accidentalmente con alguén ou se a súa conta foi comprometida.",
@@ -558,13 +571,15 @@
"showpreview": "Mostrar a vista previa",
"showdiff": "Mostrar os cambios",
"blankarticle": "<strong>Advertencia:</strong> A páxina que está a piques de crear está baleira.\nSe preme no botón \"{{int:savearticle}}\" outra vez, a páxina crearase sen contido.",
- "anoneditwarning": "<strong>Aviso:</strong> Non accedeu ao sistema. O seu enderezo IP será rexistado no histórico de edicións desta páxina. Se <strong>[$1 accede ao sistema]</strong> ou <strong>[$2 crea unha conta]</strong>, as súas edicións serán rexistadas co seu nome de usuario, ademais doutros beneficios.",
+ "anoneditwarning": "<strong>Aviso:</strong> Non accedeu ao sistema. O seu enderezo IP será visible se fai algunha edición. Se <strong>[$1 accede ao sistema]</strong> ou <strong>[$2 crea unha conta]</strong>, as súas edicións serán atribuídas ao seu nome de usuario e obterá outros beneficios.",
"anonpreviewwarning": "''Non accedeu ao sistema. Se garda a páxina, o seu enderezo IP quedará rexistrado no historial de edicións.''",
"missingsummary": "'''Aviso:''' Esqueceu incluír o texto do campo resumo.\nSe preme en \"{{int:savearticle}}\" a súa edición gardarase sen ningunha descrición da edición.",
+ "selfredirect": "<strong>Atención:</strong> Está redirecionando esta páxina a ela mesma. Vostede pode ter especificado a páxina incorrecta para a redireción, ou pode que estea a editar a páxina incorrecta. Se preme \"{{int:savearticle}}\" de novo, crearase a redireción de tódolos xeitos.",
"missingcommenttext": "Por favor, escriba un comentario a continuación.",
"missingcommentheader": "'''Aviso:''' Non escribiu ningún texto no asunto/título deste comentario.\nSe preme sobre \"{{int:savearticle}}\", a súa edición gardarase sen el.",
"summary-preview": "Vista previa do resumo:",
"subject-preview": "Vista previa do asunto/título:",
+ "previewerrortext": "Houbo un erro ó tentar previsualizar os cambios.",
"blockedtitle": "O usuario está bloqueado",
"blockedtext": "'''O seu nome de usuario ou enderezo IP foi bloqueado.'''\n\nO bloqueo foi realizado por $1.\nA razón que deu foi ''$2''.\n\n* Inicio do bloqueo: $8\n* Caducidade do bloqueo: $6\n* Pretendeuse bloquear: $7\n\nPode contactar con $1 ou con calquera outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir este bloqueo.\nNon pode empregar a característica \"Enviar un correo electrónico a este usuario\" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e que o seu uso non fose bloqueado.\nO seu enderezo IP actual é $3 e o ID do bloqueo é #$5.\nPor favor, inclúa eses datos nas consultas que faga.",
"autoblockedtext": "O seu enderezo IP foi bloqueado automaticamente porque foi empregado por outro usuario que foi bloqueado por $1.\nA razón que deu foi a seguinte:\n\n:''$2''\n\n* Inicio do bloqueo: $8\n* Caducidade do bloqueo: $6\n* Pretendeuse bloquear: $7\n\nPode contactar con $1 ou con calquera outro [[{{MediaWiki:Grouppage-sysop}}|administrador]] para discutir este bloqueo.\n\nTeña en conta que non pode empregar a característica \"Enviar un correo electrónico a este usuario\" a non ser que dispoña dun enderezo electrónico válido rexistrado nas súas [[Special:Preferences|preferencias de usuario]] e e que o seu uso non fose bloqueado.\n\nO seu enderezo IP actual é $3 e o ID do bloqueo é #$5.\nPor favor, inclúa eses datos nas consultas que faga.",
@@ -584,7 +599,7 @@
"noarticletext": "Actualmente non hai ningún texto nesta páxina.\nPode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras páxinas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar a páxina]</span>.",
"noarticletext-nopermission": "Actualmente non hai ningún texto nesta páxina.\nPode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras páxinas ou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]</span>, pero non ten os permisos necesarios para crear esta páxina.",
"missing-revision": "A revisión nº$1 da páxina chamada \"{{FULLPAGENAME}}\" non existe.\n\nA miúdo, isto está provocado por seguir unha ligazón de historial obsoleta cara a unha páxina que foi borrada.\nO [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistro de borrados] contén máis detalles.",
- "userpage-userdoesnotexist": "A conta do usuario \"<nowiki>$1</nowiki>\" non está rexistrada. Comprobe se desexa crear/editar esta páxina.",
+ "userpage-userdoesnotexist": "A conta de usuario \"$1\" non está rexistrada.\nComprobe se desexa crear/editar esta páxina.",
"userpage-userdoesnotexist-view": "A conta de usuario \"$1\" non está rexistrada.",
"blocked-notice-logextract": "Este usuario está bloqueado.\nVelaquí está a última entrada do rexistro de bloqueos, por se quere consultala:",
"clearyourcache": "'''Nota:''' Despois de gardar, cómpre limpar a memoria caché do seu navegador para ver os cambios.\n* '''Firefox/Safari:''' Prema ''Maiúsculas'' á vez que en ''Recargar'', ou prema en ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' nos Mac)\n* '''Google Chrome:''' Prema en ''Ctrl-Maiús-R'' (''⌘-Maiús-R'' nos Mac)\n* '''Internet Explorer:''' Prema ''Ctrl'' ao tempo que fai clic en ''Refrescar'', ou prema en ''Ctrl-F5''\n* '''Opera:''' Limpe a súa memoria caché en ''Ferramentas → Preferencias''",
@@ -635,7 +650,7 @@
"sectioneditnotsupported-title": "A edición de seccións non está soportada",
"sectioneditnotsupported-text": "A edición de seccións non está soportada nesta páxina.",
"permissionserrors": "Erro de permisos",
- "permissionserrorstext": "Non dispón de permiso para facelo por {{PLURAL:$1|esta razón|estas razóns}}:",
+ "permissionserrorstext": "Non ten os permisos necesarios para facelo {{PLURAL:$1|pola seguinte razón|polas seguintes razóns}}:",
"permissionserrorstext-withaction": "Non ten os permisos necesarios para $2, {{PLURAL:$1|pola seguinte razón|polas seguintes razóns}}:",
"recreate-moveddeleted-warn": "'''Atención: Vai volver crear unha páxina que xa foi eliminada anteriormente.'''\n\nDebería considerar se é apropiado continuar a editar esta páxina.\nVelaquí están o rexistro de borrados e mais o de traslados desta páxina, por se quere consultalos:",
"moveddeleted-notice": "Esta páxina foi borrada.\nA continuación pódese ver o rexistro de borrados e traslados desta páxina, por se quere consultalos.",
@@ -659,6 +674,10 @@
"content-model-text": "texto simple",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Obxecto baleiro",
+ "content-json-empty-array": "Matriz baleira",
+ "duplicate-args-category": "Páxinas con argumentos duplicados nas chamadas aos modelos",
+ "duplicate-args-category-desc": "Esta páxina contén as chamadas aos modelos que utilizan argumentos duplicados, como <code><nowiki>{{exemplo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{exemplo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Aviso:''' Esta páxina contén demasiadas chamadas a funcións analíticas custosas.\n\nDebe ter menos {{PLURAL:$2|dunha chamada|de $2 chamadas}}, e agora hai $1.",
"expensive-parserfunction-category": "Páxinas con moitas chamadas a funcións analíticas custosas",
"post-expand-template-inclusion-warning": "'''Aviso:''' O tamaño do modelo é moi grande.\nAlgúns modelos non se incluirán.",
@@ -713,7 +732,7 @@
"history-feed-empty": "A páxina solicitada non existe.\nPuido borrarse ou moverse a outro nome.\nProbe a [[Special:Search|buscar no wiki]] para atopar as páxinas relacionadas.",
"rev-deleted-comment": "(resumo de edición eliminado)",
"rev-deleted-user": "(nome de usuario eliminado)",
- "rev-deleted-event": "(entrada eliminada)",
+ "rev-deleted-event": "(detalles do rexistro eliminados)",
"rev-deleted-user-contribs": "[nome de usuario ou enderezo IP eliminado; edición agochada das contribucións]",
"rev-deleted-text-permission": "Esta revisión da páxina foi '''borrada'''.\nPode ampliar os detalles no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rexistro de borrados].",
"rev-suppressed-text-permission": "Esta revisión da páxina foi <strong>suprimida</strong>.\nPode ampliar os detalles no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rexistro de supresións].",
@@ -747,7 +766,7 @@
"revdelete-legend": "Aplicar restricións de visibilidade",
"revdelete-hide-text": "Texto da revisión",
"revdelete-hide-image": "Agochar o contido do ficheiro",
- "revdelete-hide-name": "Agochar a acción e o destino",
+ "revdelete-hide-name": "Agochar o destino e os parámetros",
"revdelete-hide-comment": "Resumo de edición",
"revdelete-hide-user": "Nome de usuario ou enderezo IP do editor",
"revdelete-hide-restricted": "Eliminar os datos da vista dos administradores así coma da doutros",
@@ -794,14 +813,13 @@
"mergehistory-fail-toobig": "Non se puido fusionar o historial, xa que supón trasladar máis revisións que o límite de $1 {{PLURAL:$1|revisión|revisións}}.",
"mergehistory-no-source": "Non existe a páxina de orixe \"$1\".",
"mergehistory-no-destination": "Non existe a páxina de destino \"$1\".",
- "mergehistory-invalid-source": "A páxina de orixe ten que ter un título válido.",
- "mergehistory-invalid-destination": "A páxina de destino ten que ter un título válido.",
+ "mergehistory-invalid-source": "A páxina de orixe debe ter un título válido.",
+ "mergehistory-invalid-destination": "A páxina de destino debe ter un título válido.",
"mergehistory-autocomment": "\"[[:$1]]\" fusionouse con \"[[:$2]]\"",
"mergehistory-comment": "\"[[:$1]]\" fusionouse con \"[[:$2]]\": $3",
- "mergehistory-same-destination": "A páxina de orixe e a páxina de destino non pode ser a mesma",
+ "mergehistory-same-destination": "A páxina de orixe e a páxina de destino non poden ser a mesma",
"mergehistory-reason": "Motivo:",
"mergelog": "Rexistro de fusións",
- "pagemerge-logentry": "fusionou \"[[$1]]\" con \"[[$2]]\" (revisións ata o $3)",
"revertmerge": "Desfacer a fusión",
"mergelogpagetext": "A continuación hai unha lista coas fusións máis recentes do historial dunha páxina co doutra.",
"history-title": "Historial de revisións de \"$1\"",
@@ -842,6 +860,7 @@
"search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoría|$2 subcategorías}}, {{PLURAL:$3|1 ficheiro|$3 ficheiros}})",
"search-redirect": "(redirixido desde \"$1\")",
"search-section": "(sección \"$1\")",
+ "search-category": "(categoría $1)",
"search-file-match": "(coincide co contido do ficheiro)",
"search-suggest": "Quizais quixo dicir: $1",
"search-interwiki-caption": "Proxectos irmáns",
@@ -850,8 +869,9 @@
"search-relatedarticle": "Relacionado",
"searchrelated": "relacionado",
"searchall": "todo",
- "showingresults": "{{PLURAL:$1|Móstrase '''1''' resultado|Móstranse '''$1''' resultados}}, comezando polo número '''$2'''.",
+ "showingresults": "{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong>.",
"showingresultsinrange": "{{PLURAL:$1|Móstrase <strong>1</strong> resultado|Móstranse <strong>$1</strong> resultados}}, comezando polo número <strong>$2</strong> e rematando polo número <strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$5|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados do <strong>$1</strong> ao <strong>$2</strong>, dun total de <strong>$3</strong>}}",
"search-nonefound": "Non se atopou ningún resultado que coincidise coa procura.",
"powersearch-legend": "Busca avanzada",
"powersearch-ns": "Procurar nos espazos de nomes:",
@@ -874,6 +894,11 @@
"prefs-personal": "Información de usuario",
"prefs-rc": "Cambios recentes",
"prefs-watchlist": "Lista de vixilancia",
+ "prefs-editwatchlist": "Editar a lista de vixilancia",
+ "prefs-editwatchlist-label": "Editar as entradas da súa lista de vixilancia:",
+ "prefs-editwatchlist-edit": "Ver e eliminar títulos da súa lista de vixilancia",
+ "prefs-editwatchlist-raw": "Editar a lista de vixilancia simple",
+ "prefs-editwatchlist-clear": "Limpar a súa lista de vixilancia",
"prefs-watchlist-days": "Número de días que mostrar na lista de vixilancia:",
"prefs-watchlist-days-max": "Máximo: $1 {{PLURAL:$1|día|días}}",
"prefs-watchlist-edits": "Número máximo de edicións que mostrar na lista de vixilancia completa:",
@@ -943,7 +968,7 @@
"gender-female": "Ela edita as páxinas do wiki",
"prefs-help-gender": "Definir esta preferencia é opcional.\nO software usa este valor para dirixirse á súa persoa e para facerlle mencións mediante o xénero gramatical axeitado.\nEsta información será pública.",
"email": "Correo electrónico",
- "prefs-help-realname": "O nome real é opcional.\nSe escolle dalo utilizarase para atribuírlle o seu traballo.",
+ "prefs-help-realname": "O nome real é opcional.\nEn caso de revelalo, utilizarase para atribuírlle o seu traballo.",
"prefs-help-email": "O enderezo de correo electrónico é opcional, pero permite que se lle envíe un contrasinal novo se se esquece del.",
"prefs-help-email-others": "Tamén pode optar por deixar aos outros que se poidan poñer en contacto con vostede a través da súa páxina de usuario sen necesidade de revelar a súa identidade.",
"prefs-help-email-required": "Cómpre o enderezo de correo electrónico.",
@@ -964,6 +989,7 @@
"prefs-tokenwatchlist": "Pase",
"prefs-diffs": "Diferenzas",
"prefs-help-prefershttps": "Esta preferencia ha aplicarse no seu vindeiro acceso ao sistema.",
+ "prefswarning-warning": "Fixo cambios nas súas preferencias que aínda non se gardaron.\nSe deixa esta páxina sen premer en \"Gardar\", non se actualizarán as súas preferencias.",
"prefs-tabs-navigation-hint": "Consello: Pode empregar as frechas esquerda e dereita para navegar polas lapelas da lista.",
"email-address-validity-valid": "O enderezo de correo electrónico semella válido",
"email-address-validity-invalid": "Escriba un enderezo de correo electrónico válido",
@@ -1049,6 +1075,7 @@
"right-protect": "Cambiar os niveis de protección e editar páxinas protexidas coa opción \"protección en serie\"",
"right-editprotected": "Editar páxinas protexidas con \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Editar páxinas protexidas con \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Editar o modelo de contido dunha páxina.",
"right-editinterface": "Editar a interface de usuario",
"right-editusercssjs": "Editar os ficheiros CSS e JavaScript doutros usuarios",
"right-editusercss": "Editar os ficheiros CSS doutros usuarios",
@@ -1064,7 +1091,7 @@
"right-markbotedits": "Marcar as edicións desfeitas como edicións dun bot",
"right-noratelimit": "Non ser afectado polos límites de frecuencia",
"right-import": "Importar páxinas doutros wikis",
- "right-importupload": "Importar páxinas desde un ficheiro cargado",
+ "right-importupload": "Importar páxinas desde un ficheiro subido",
"right-patrol": "Marcar edicións como patrulladas",
"right-autopatrol": "Ter as edicións marcadas automaticamente como patrulladas",
"right-patrolmarks": "Ver os cambios que están marcados coma patrullados",
@@ -1076,6 +1103,7 @@
"right-override-export-depth": "Exportar páxinas incluíndo as páxinas ligadas ata unha profundidade de 5",
"right-sendemail": "Enviar correos electrónicos a outros usuarios",
"right-passwordreset": "Ver os correos electrónicos de restablecemento de contrasinais",
+ "right-managechangetags": "Crear e borrar [[Special:Tags|tags]] da base de datos",
"newuserlogpage": "Rexistro de creación de usuarios",
"newuserlogpagetext": "Este é un rexistro de creación de contas de usuario.",
"rightslog": "Rexistro de dereitos de usuario",
@@ -1121,6 +1149,8 @@
"action-viewmywatchlist": "ver a súa lista de vixilancia",
"action-viewmyprivateinfo": "ver a súa información privada",
"action-editmyprivateinfo": "editar a súa información privada",
+ "action-editcontentmodel": "editar o modelo de contido dunha páxina",
+ "action-managechangetags": "crear e borrar etiquetas da base de datos",
"nchanges": "$1 {{PLURAL:$1|modificación|modificacións}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde a última visita}}",
"enhancedrc-history": "historial",
@@ -1191,9 +1221,9 @@
"uploaderror": "Erro ao cargar",
"upload-recreate-warning": "'''Atención: Borrouse ou trasladouse un ficheiro con ese nome.'''\n\nVelaquí están o rexistro de borrados e mais o de traslados desta páxina, por se quere consultalos:",
"uploadtext": "Use o formulario de embaixo para cargar ficheiros.\nPara ver ou procurar imaxes subidas con anterioridade vaia á [[Special:FileList|lista de imaxes]]; os envíos tamén se rexistran no [[Special:Log/upload|rexistro de cargas]] e as eliminacións no [[Special:Log/delete|rexistro de borrados]].\n\nPara incluír un ficheiro nunha páxina, use unha ligazón do seguinte xeito:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' para usar a versión completa do ficheiro\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|texto alternativo]]</nowiki></code>''' para usar unha resolución de 200 píxeles de ancho nunha caixa na marxe esquerda cunha descrición (\"texto alternativo\")\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' para ligar directamente co ficheiro sen que este saia na páxina",
- "upload-permitted": "Tipos de ficheiro permitidos: $1.",
- "upload-preferred": "Tipos de ficheiro preferidos: $1.",
- "upload-prohibited": "Tipos de ficheiro prohibidos: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|permitido|permitidos}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|preferido|preferidos}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|prohibido|prohibidos}}: $1.",
"uploadlogpage": "Rexistro de cargas",
"uploadlogpagetext": "A continuación está a lista cos últimos ficheiros cargados no servidor.\nVexa a [[Special:NewFiles|galería de imaxes novas]] para ollar unha visión máis xeral.",
"filename": "Nome do ficheiro",
@@ -1287,8 +1317,8 @@
"backend-fail-describe": "Non se puideron cambiar os metadatos do ficheiro \"$1\".",
"backend-fail-alreadyexists": "O ficheiro \"$1\" xa existe.",
"backend-fail-store": "Non se deu almacenado o ficheiro \"$1\" en \"$2\".",
- "backend-fail-copy": "Non se deu copiado o ficheiro \"$1\" en \"$2\".",
- "backend-fail-move": "Non se deu trasladado o ficheiro \"$1\" a \"$2\".",
+ "backend-fail-copy": "Non se puido copiar o ficheiro \"$1\" en \"$2\".",
+ "backend-fail-move": "Non se puido trasladar o ficheiro \"$1\" a \"$2\".",
"backend-fail-opentemp": "Non se puido abrir o ficheiro temporal.",
"backend-fail-writetemp": "Non se puido escribir no ficheiro temporal.",
"backend-fail-closetemp": "Non se puido pechar o ficheiro temporal.",
@@ -1452,7 +1482,6 @@
"statistics": "Estatísticas",
"statistics-header-pages": "Estatísticas das páxinas",
"statistics-header-edits": "Estatísticas das edicións",
- "statistics-header-views": "Estatísticas das visitas",
"statistics-header-users": "Estatísticas dos usuarios",
"statistics-header-hooks": "Outras estatísticas",
"statistics-articles": "Páxinas de contido",
@@ -1461,13 +1490,9 @@
"statistics-files": "Ficheiros cargados",
"statistics-edits": "Edicións nas páxinas des que se creou {{SITENAME}}",
"statistics-edits-average": "Media de edicións por páxina",
- "statistics-views-total": "Visitas totais",
- "statistics-views-total-desc": "Non se inclúen as visitas ás páxinas inexistentes e especiais",
- "statistics-views-peredit": "Visitas por edición",
"statistics-users": "[[Special:ListUsers|Usuarios]] rexistrados",
"statistics-users-active": "Usuarios activos",
"statistics-users-active-desc": "Usuarios que teñen levado a cabo unha acción {{PLURAL:$1|no último día|nos últimos $1 días}}",
- "statistics-mostpopular": "Páxinas máis vistas",
"pageswithprop": "Páxinas cunha propiedade de páxina",
"pageswithprop-legend": "Páxinas cunha propiedade de páxina",
"pageswithprop-text": "Esta páxina lista aquelas páxinas que utilizan unha propiedade de páxina determinada.",
@@ -1508,9 +1533,9 @@
"uncategorizedtemplates": "Modelos sen categorías",
"unusedcategories": "Categorías sen uso",
"unusedimages": "Imaxes sen uso",
- "popularpages": "Páxinas populares",
"wantedcategories": "Categorías requiridas",
"wantedpages": "Páxinas requiridas",
+ "wantedpages-summary": "Lista de páxinas inexistentes con máis ligazóns cara a elas, excluíndo as páxinas que só teñen redireccións cara a elas. Para consultar a lista de páxinas inexistentes que teñen redireccións cara a elas, véxase [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Título inválido fixado nos resultados: $1",
"wantedfiles": "Ficheiros requiridos",
"wantedfiletext-cat": "Os seguintes ficheiros están en uso, pero non existen. É posible que aparezan ficheiros de repositoroios externos, malia que existan. Calquera falso positivo estará <del>riscado</del>. Ademais, as páxinas que inclúen ficheiros que non existen están listadas en [[:$1]].",
@@ -1570,9 +1595,11 @@
"pager-older-n": "{{PLURAL:$1|unha anterior|$1 anteriores}}",
"suppress": "Supervisor",
"querypage-disabled": "Esta páxina especial está desactivada por razóns de rendemento.",
+ "apihelp": "Axuda coa API",
+ "apihelp-no-such-module": "Non se atopou o módulo \"$1\".",
"booksources": "Fontes bibliográficas",
"booksources-search-legend": "Procurar fontes bibliográficas",
- "booksources-go": "Ir",
+ "booksources-search": "Procurar",
"booksources-text": "A continuación aparece unha lista de ligazóns cara a outros sitios web que venden libros novos e usados, neles tamén pode obter máis información sobre as obras que está a buscar:",
"booksources-invalid-isbn": "O ISBN inserido parece non ser válido; comprobe que non haxa erros ao copialo da fonte orixinal.",
"specialloguserlabel": "Executante:",
@@ -1683,7 +1710,7 @@
"emailccsubject": "Copia da súa mensaxe para $1: $2",
"emailsent": "Mensaxe enviada",
"emailsenttext": "A súa mensaxe de correo electrónico foi enviada.",
- "emailuserfooter": "Este correo electrónico foi enviado por $1 a $2 mediante a función \"Enviar un correo electrónico a este usuario\" de {{SITENAME}}.",
+ "emailuserfooter": "Este correo electrónico foi enviado por $1 a $2 mediante a función \"{{int:emailpage}}\" en {{SITENAME}}.",
"usermessage-summary": "Mensaxe deixada polo sistema.",
"usermessage-editor": "Editor das mensaxes do sistema",
"watchlist": "Lista de vixilancia",
@@ -1708,7 +1735,7 @@
"wlheader-enotif": "A notificación por correo electrónico está activada.",
"wlheader-showupdated": "As páxinas que cambiaron desde a súa última visita móstranse en '''negra'''.",
"wlnote": "A continuación {{PLURAL:$1|está a última modificación|están as últimas <strong>$1</strong> modificacións}} {{PLURAL:$2|na última hora|nas últimas <strong>$2</strong> horas}} ata o $3 ás $4.",
- "wlshowlast": "Mostrar as últimas $1 horas, os últimos $2 días ou $3",
+ "wlshowlast": "Mostrar as últimas $1 horas e os últimos $2 días",
"watchlist-options": "Opcións de vixilancia",
"watching": "Vixiando...",
"unwatching": "Deixando de vixiar...",
@@ -1757,7 +1784,6 @@
"deleteprotected": "Non pode borrar esta páxina porque está protexida.",
"deleting-backlinks-warning": "'''Atención:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Outras páxinas]] conteñen unha ligazón ou unha transclusión da páxina que está a piques de borrar.",
"rollback": "Reverter as edicións",
- "rollback_short": "Reverter",
"rollbacklink": "reverter",
"rollbacklinkcount": "reverter $1 {{PLURAL:$1|edición|edicións}}",
"rollbacklinkcount-morethan": "reverter máis de $1 {{PLURAL:$1|edición|edicións}}",
@@ -1807,6 +1833,7 @@
"protect-othertime": "Outra duración:",
"protect-othertime-op": "outra duración",
"protect-existing-expiry": "Período de caducidade actual: $2 ás $3",
+ "protect-existing-expiry-infinity": "Período de caducidade actual: infinito",
"protect-otherreason": "Outro motivo:",
"protect-otherreason-op": "Outro motivo",
"protect-dropdown": "*Motivos frecuentes para a protección\n** Vandalismo excesivo\n** Publicidade excesiva\n** Guerra de edicións\n** Páxina moi visitada",
@@ -1866,6 +1893,7 @@
"namespace": "Espazo de nomes:",
"invert": "Inverter a selección",
"tooltip-invert": "Marque esta caixa para agochar os cambios nas páxinas pertencentes ao espazo de nomes seleccionado (e o espazo de nomes asociado, se escolleu a opción)",
+ "tooltip-whatlinkshere-invert": "Marque esta caixa para agochar as ligazóns ás páxinas pertencentes ao espazo de nomes seleccionado.",
"namespace_association": "Espazo de nomes asociado",
"tooltip-namespace_association": "Marque esta caixa para incluír tamén o espazo de nomes de conversa ou de contidos asociado a aquel seleccionado",
"blanknamespace": "(Principal)",
@@ -1948,9 +1976,10 @@
"unblockip": "Desbloquear un usuario",
"unblockiptext": "Use o seguinte formulario para dar de novo acceso de escritura a un enderezo IP ou usuario que estea bloqueado.",
"ipusubmit": "Retirar o bloqueo",
- "unblocked": "[[User:$1|$1]] foi {{GENDER:$1|desbloqueado|desbloqueada}}",
- "unblocked-range": "$1 foi desbloqueado",
- "unblocked-id": "O bloqueo $1 foi eliminado",
+ "unblocked": "[[User:$1|$1]] foi {{GENDER:$1|desbloqueado|desbloqueada}}.",
+ "unblocked-range": "$1 foi desbloqueado.",
+ "unblocked-id": "O bloqueo $1 foi eliminado.",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] foi desbloqueado.",
"blocklist": "Usuarios bloqueados",
"ipblocklist": "Usuarios bloqueados",
"ipblocklist-legend": "Buscar un usuario bloqueado",
@@ -2051,7 +2080,7 @@
"move-watch": "Vixiar esta páxina",
"movepagebtn": "Mover a páxina",
"pagemovedsub": "O movemento foi un éxito",
- "movepage-moved": "'''A páxina \"$1\" foi movida a \"$2\"'''",
+ "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.",
"articleexists": "Xa existe unha páxina con ese nome, ou o nome que escolleu non é válido.\nPor favor, escolla outro nome.",
@@ -2129,14 +2158,15 @@
"thumbnail-temp-create": "Non se puido crear o ficheiro de miniatura temporal",
"thumbnail-dest-create": "Non se puido gardar a miniatura no destino",
"thumbnail_invalid_params": "Parámetros de miniatura non válidos",
+ "thumbnail_toobigimagearea": "Ficheiro con dimensións maiores que $1",
"thumbnail_dest_directory": "Non se puido crear o directorio de destino",
"thumbnail_image-type": "Tipo de imaxe non soportado",
"thumbnail_gd-library": "Configuración da libraría GD incompleta: Falta a función $1",
"thumbnail_image-missing": "Parece que falta o ficheiro: $1",
"thumbnail_image-failure-limit": "Producíronse demasiados ($1 ou máis) intentos fallidos recentes de renderizar esta miniatura. Inténteo de novo máis tarde.",
"import": "Importar páxinas",
- "importinterwiki": "Importación transwiki",
- "import-interwiki-text": "Seleccione o wiki e o título da páxina que queira importar.\nAs datas das revisións e os nomes dos editores manteranse.\nTodas as accións relacionadas coa importación entre wikis poden verse no [[Special:Log/import|rexistro de importacións]].",
+ "importinterwiki": "Importar doutro wiki",
+ "import-interwiki-text": "Seleccione o wiki e o título da páxina que queira importar.\nAs datas das revisións e os nomes dos editores manteranse.\nTodas as importacións doutros wikis poden consultarse no [[Special:Log/import|rexistro de importacións]].",
"import-interwiki-sourcewiki": "Wiki de orixe:",
"import-interwiki-sourcepage": "Páxina de orixe:",
"import-interwiki-history": "Copiar todas as versións que hai no historial desta páxina",
@@ -2156,7 +2186,7 @@
"importcantopen": "Non se pode abrir o ficheiro importado",
"importbadinterwiki": "Ligazón interwiki incorrecta",
"importsuccess": "A importación rematou!",
- "importnosources": "Non se defininiu ningunha fonte de importación transwiki e os envíos directos dos historiais están desactivados.",
+ "importnosources": "Non se defininiu ningún wiki desde o que importar e os envíos directos dos historiais están desactivados.",
"importnofile": "Non se enviou ningún ficheiro de importación.",
"importuploaderrorsize": "Fallou o envío do ficheiro de importación. O ficheiro é máis grande que o tamaño de envío permitido.",
"importuploaderrorpartial": "Fallou o envío do ficheiro de importación. O ficheiro só se enviou parcialmente.",
@@ -2179,19 +2209,16 @@
"import-rootpage-invalid": "A páxina raíz dada é un título non válido.",
"import-rootpage-nosubpage": "O espazo de nomes \"$1\" da páxina raíz non permite as subpáxinas.",
"importlogpage": "Rexistro de importacións",
- "importlogpagetext": "Rexistro de importación de páxinas xunto co seu historial de edicións procedentes doutros wikis.",
- "import-logentry-upload": "importou \"[[$1]]\" mediante a carga dun ficheiro",
+ "importlogpagetext": "Importacións administrativas de páxinas procedentes doutros wikis xunto co seu historial de edicións.",
"import-logentry-upload-detail": "{{PLURAL:$1|Importouse $1 revisión|Importáronse $1 revisións}}",
- "import-logentry-interwiki": "importou \"$1\"",
"import-logentry-interwiki-detail": "{{PLURAL:$1|Importouse $1 revisión|Importáronse $1 revisións}} desde $2",
"javascripttest": "Proba de JavaScript",
- "javascripttest-title": "Executando probas de $1",
"javascripttest-pagetext-noframework": "Esta páxina está reservada para executar probas do JavaScript.",
"javascripttest-pagetext-unknownframework": "Descoñécese a infraestrutura dixital \"$1\" de probas.",
+ "javascripttest-pagetext-unknownaction": "Acción descoñecida \"$1\".",
"javascripttest-pagetext-frameworks": "Seleccione unha das seguintes infraestruturas dixitais de probas: $1",
"javascripttest-pagetext-skins": "Escolla a aparencia na que executar as probas:",
"javascripttest-qunit-intro": "Bótelle unha ollada á [$1 documentación das probas] en mediawiki.org.",
- "javascripttest-qunit-heading": "Conxunto de probas QUnit para o JavaScript de MediaWiki",
"tooltip-pt-userpage": "A súa páxina de {{GENDER:|usuario|usuaria}}",
"tooltip-pt-anonuserpage": "A páxina de usuario do enderezo IP desde o que está a editar",
"tooltip-pt-mytalk": "A súa páxina de conversa",
@@ -2199,8 +2226,9 @@
"tooltip-pt-preferences": "As miñas preferencias",
"tooltip-pt-watchlist": "A lista de páxinas cuxas modificacións está a seguir",
"tooltip-pt-mycontris": "Lista das súas contribucións",
- "tooltip-pt-login": "Recoméndaselle rexistrarse, se ben non é obrigatorio.",
+ "tooltip-pt-login": "Recoméndaselle rexistrarse, se ben non é obrigatorio",
"tooltip-pt-logout": "Saír ao anonimato",
+ "tooltip-pt-createaccount": "Recoméndaselle crear unha conta e acceder ao sistema, se ben non é obrigatorio",
"tooltip-ca-talk": "Conversa acerca do contido desta páxina",
"tooltip-ca-edit": "Pode modificar esta páxina; antes de gardala, por favor, utilice o botón de vista previa",
"tooltip-ca-addsection": "Comezar unha nova sección",
@@ -2230,6 +2258,7 @@
"tooltip-feed-atom": "Fonte de novas Atom desta páxina",
"tooltip-t-contributions": "Ver a lista de contribucións {{GENDER:{{BASEPAGENAME}}|deste usuario|desta usuaria}}",
"tooltip-t-emailuser": "Enviarlle unha mensaxe a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}} por correo electrónico",
+ "tooltip-t-info": "Máis información sobre esta páxina",
"tooltip-t-upload": "Subir ficheiros",
"tooltip-t-specialpages": "Lista de todas as páxinas especiais",
"tooltip-t-print": "Versión para imprimir da páxina",
@@ -2304,7 +2333,6 @@
"pageinfo-robot-policy": "Indexación por robots",
"pageinfo-robot-index": "Permitida",
"pageinfo-robot-noindex": "Non permitida",
- "pageinfo-views": "Número de visitas",
"pageinfo-watchers": "Número de vixiantes da páxina",
"pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vixiante|vixiantes}}",
"pageinfo-redirects-name": "Número de redireccións cara a esta páxina",
@@ -2341,8 +2369,8 @@
"rcpatroldisabled": "A patrulla dos cambios recentes está desactivada",
"rcpatroldisabledtext": "A funcionalidade da patrulla dos cambios recentes está actualmente desactivada.",
"markedaspatrollederror": "Non se pode marcar como revisada",
- "markedaspatrollederrortext": "É preciso especificar unha revisión para marcala como revisada.",
- "markedaspatrollederror-noautopatrol": "Non está permitido que un mesmo marque as propias edicións como revisadas.",
+ "markedaspatrollederrortext": "Cómpre especificar unha revisión para marcala como revisada.",
+ "markedaspatrollederror-noautopatrol": "Non está permitido marcar as edicións propias como revisadas.",
"markedaspatrollednotify": "A modificación feita en \"$1\" marcouse como revisada.",
"markedaspatrollederrornotify": "Erro ao marcar como revisada.",
"patrol-log-page": "Rexistro de revisións patrulladas",
@@ -2755,7 +2783,6 @@
"exif-urgency-low": "Baixa ($1)",
"exif-urgency-high": "Alta ($1)",
"exif-urgency-other": "Prioridade definida polo usuario ($1)",
- "watchlistall2": "todo",
"namespacesall": "todos",
"monthsall": "todos",
"confirmemail": "Confirmar o enderezo de correo electrónico",
@@ -2844,9 +2871,9 @@
"watchlisttools-edit": "Ver e editar a lista de vixilancia",
"watchlisttools-raw": "Editar a lista de vixilancia simple",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|conversa]])",
- "unknown_extension_tag": "Etiqueta de extensión descoñecida \"$1\"",
"duplicate-defaultsort": "<strong>Aviso:</strong> A clave de ordenación por defecto \"$2\" anula a clave de ordenación anterior por defecto \"$1\".",
"duplicate-displaytitle": "'''Aviso:''' O título mostrado \"$2\" anula o título anterior \"$1\".",
+ "invalid-indicator-name": "<strong>Erro:</strong> O atributo <code>name</code> dos indicadores do estado da páxina non pode estar baleiro.",
"version": "Versión",
"version-extensions": "Extensións instaladas",
"version-skins": "Aparencias instaladas",
@@ -2888,6 +2915,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Ruta dos artigos]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Ruta das escrituras]",
+ "version-libraries": "Bibliotecas instaladas",
+ "version-libraries-library": "Biblioteca",
+ "version-libraries-version": "Versión",
"redirect": "Redirixir por nome de ficheiro, ID de usuario, ID de páxina ou ID de revisión",
"redirect-legend": "Redirixir a un ficheiro ou unha páxina",
"redirect-summary": "Esta páxina especial redirixe cara a un ficheiro (dado o nome), unha páxina (dado o ID da páxina ou o dunha revisión) ou unha páxina de usuario (dado o ID dun usuario). Utilización: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] ou [[{{#Special:Redirect}}/user/101]].",
@@ -2923,6 +2953,7 @@
"specialpages-group-wiki": "Datos e ferramentas",
"specialpages-group-redirects": "Páxinas de redirección especiais",
"specialpages-group-spam": "Ferramentas contra o spam",
+ "specialpages-group-developer": "Ferramentas dos desenvolvedores",
"blankpage": "Baleirar a páxina",
"intentionallyblankpage": "Esta páxina foi baleirada intencionadamente",
"external_image_whitelist": " #Deixe esta liña tal e como está<pre>\n#Poña embaixo fragmentos de expresións regulares (tan só a parte que vai entre //)\n#Isto coincidirá cos enderezos URL das imaxes externas (hotlinked)\n#Aquelas que coincidan mostraranse como imaxes, senón, só se mostrará unha ligazón cara a esta\n#As liñas que comecen por \"#\" son comentarios\n#Non diferencia entre maiúsculas e minúsculas\n\n#Poña todos os fragmentos por riba desta liña. Deixe esta liña tal e como está</pre>",
@@ -2935,12 +2966,54 @@
"tags-tag": "Nome da etiqueta",
"tags-display-header": "Aparición nas listas de cambios",
"tags-description-header": "Descrición completa do significado",
+ "tags-source-header": "Fonte",
"tags-active-header": "Activa?",
"tags-hitcount-header": "Edicións etiquetadas",
+ "tags-actions-header": "Accións",
"tags-active-yes": "Si",
"tags-active-no": "Non",
+ "tags-source-extension": "Definida por unha extensión",
+ "tags-source-manual": "Aplicado manualmente por usuarios e bots",
+ "tags-source-none": "Xa non está en uso",
"tags-edit": "editar",
+ "tags-delete": "Borrar",
+ "tags-activate": "activar",
+ "tags-deactivate": "Reactivar",
"tags-hitcount": "$1 {{PLURAL:$1|modificación|modificacións}}",
+ "tags-manage-no-permission": "Non ten os permisos necesarios para modificar etiquetas.",
+ "tags-create-heading": "Crear unha nova etiqueta",
+ "tags-create-explanation": "Por defecto, as etiquetas creadas recentemente poderán ser empregadas polos usuarios e os bots.",
+ "tags-create-tag-name": "Nome da páxina:",
+ "tags-create-reason": "Motivo:",
+ "tags-create-submit": "Crear",
+ "tags-create-no-name": "Debe especificar unha páxina.",
+ "tags-create-invalid-chars": "Os nomes das etiquetas non poden conter nin comas (<code>,</code>) nin barras (<code>/</code>).",
+ "tags-create-invalid-title-chars": "As páxinas non deben conter caracteres que non se poidan usar nos títulos das páxinas.",
+ "tags-create-already-exists": "A páxina \"$1\" xa existe.",
+ "tags-create-warnings-above": "{{PLURAL:$2|Atopouse o seguinte erro|Atopáronse os seguintes erros}} ao intentar crear a etiqueta \"$1\":",
+ "tags-create-warnings-below": "Desexa continuar creando a etiqueta?",
+ "tags-delete-title": "Borrar etiqueta",
+ "tags-delete-explanation-initial": "Está a piques de borrar a etiqueta \"$1\" da base de datos.",
+ "tags-delete-explanation-in-use": "Ha eliminarse {{PLURAL:$2|dunha revisión ou entrada|das $2 revisións e/ou entradas}} de rexistro {{PLURAL:$2|á|ás}} que actualmente se aplica.",
+ "tags-delete-explanation-warning": "Esta acción é <strong>irreversible</strong> e nin sequera os administradores da base de datos poderán desfacela. Asegúrese de que é esta a etiqueta que desexa borrar.",
+ "tags-delete-explanation-active": "<strong>A etiqueta \"$1\" segue activa e continuará aplicándose no futuro.</strong> Para evitalo, vaia ao(s) lugar(es) onde se establece a aplicación desta etiqueta e desactívea alí.",
+ "tags-delete-reason": "Motivo:",
+ "tags-delete-submit": "Eliminar esta etiqueta irreversiblemente",
+ "tags-delete-not-allowed": "As etiquetas definidas por unha extensión non se poden borrar, agás que a extensión específica o permita.",
+ "tags-delete-not-found": "A páxina \"$1\" non existe.",
+ "tags-delete-too-many-uses": "A etiqueta \"$1\" aplícase a máis de $2 {{PLURAL:$2|revisión|revisións}}; isto significa que non se pode borrar.",
+ "tags-delete-warnings-after-delete": "A etiqueta \"$1\" borrouse correctamente; con todo, {{PLURAL:$2|atopouse o seguinte erro|atopáronse os seguintes erros}}:",
+ "tags-activate-title": "Activar etiqueta",
+ "tags-activate-question": "Está a piques de activar a etiqueta\"$1\".",
+ "tags-activate-reason": "Motivo:",
+ "tags-activate-not-allowed": "Non é posible activar a páxina \"$1\".",
+ "tags-activate-not-found": "A páxina \"$1\" non existe.",
+ "tags-activate-submit": "Activar",
+ "tags-deactivate-title": "Desactivar etiqueta",
+ "tags-deactivate-question": "Está a piques de desactivar a etiqueta \"$1\".",
+ "tags-deactivate-reason": "Motivo:",
+ "tags-deactivate-not-allowed": "Non é posible reactivar a páxina \"$1\".",
+ "tags-deactivate-submit": "Reactivar",
"comparepages": "Comparar páxinas",
"compare-page1": "Páxina 1",
"compare-page2": "Páxina 2",
@@ -2952,8 +3025,8 @@
"compare-revision-not-exists": "A revisión que especificou non existe.",
"dberr-problems": "Sentímolo! Este sitio está experimentando dificultades técnicas.",
"dberr-again": "Por favor, agarde uns minutos e logo probe a cargar de novo a páxina.",
- "dberr-info": "(Non se pode conectar co servidor da base de datos: $1)",
- "dberr-info-hidden": "(Non se pode conectar co servidor da base de datos)",
+ "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 buscar 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.",
@@ -2994,6 +3067,14 @@
"revdelete-uname-unhid": "descubriu o nome de usuario",
"revdelete-restricted": "aplicou restricións aos administradores",
"revdelete-unrestricted": "eliminou restricións aos administradores",
+ "logentry-block-block": "$1 {{GENDER:$2|bloqueou}} a {{GENDER:$4|$3}} cun tempo de duración de $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueou}} a {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|cambiou}} as configuracións do bloqueo de {{GENDER:$4|$3}} cunha caducidade de $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} a {{GENDER:$4|$3}} cun tempo de duración de $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|cambiou}} as configuracións do bloqueo de {{GENDER:$4|$3}} cunha caducidade de $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|importou}} $3 por medio da carga de ficheiros",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|importou}} $3 dende outra wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|fusionou}} \"$3\" con \"$4\" (revisións ata o $5)",
"logentry-move-move": "$1 {{GENDER:$2|moveu}} a páxina \"$3\" a \"$4\"",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|moveu}} a páxina \"$3\" a \"$4\" sen deixar unha redirección",
"logentry-move-move_redir": "$1 {{GENDER:$2|moveu}} a páxina \"$3\" a \"$4\" sobre unha redirección",
@@ -3011,20 +3092,36 @@
"logentry-upload-upload": "$1 {{GENDER:$2|cargou}} \"$3\"",
"logentry-upload-overwrite": "$1 {{GENDER:$2|cargou}} unha nova versión de \"$3\"",
"logentry-upload-revert": "$1 {{GENDER:$2|cargou}} \"$3\"",
+ "log-name-managetags": "Rexistro de xestión de etiquetas",
+ "log-description-managetags": "Esta páxina contén unha lista das tarefas de xestión relacionadas con [[Special:Tags|tags]]. No rexistro figuran só aquelas accións realizadas de forma manual por un administrador; pódense crear ou borrar etiquetas por medio do software wiki sen que se engada unha nova entrada ao rexistro.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|created}} a etiqueta \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|borrou}} a etiqueta \"$4\" (eliminouse de $5 {{PLURAL:$5|revisión ou entrada de rexistro|revisións e/ou entradas de rexistro}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|activou}} a etiqueta \"$4\" para o seu uso por usuarios e bots",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|desactivou}} a etiqueta \"$4\" para impedir o seu uso por usuarios e bots",
"rightsnone": "(ningún)",
+ "revdelete-summary": "o resumo de edición",
+ "feedback-adding": "Enviando os comentarios...",
+ "feedback-back": "Volver",
+ "feedback-bugcheck": "Perfecto! Comprobe que aínda non está entre os [$1 erros coñecidos].",
+ "feedback-bugnew": "Comprobeino. Informar deste novo erro",
"feedback-bugornote": "Se está listo para describir un problema técnico en detalle, [$1 informe do erro].\nEn caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario aparecerá na páxina \"[$3 $2]\" xunto ao seu nome de usuario e o navegador que está usando.",
- "feedback-subject": "Asunto:",
- "feedback-message": "Mensaxe:",
"feedback-cancel": "Cancelar",
- "feedback-submit": "Enviar os comentarios",
- "feedback-adding": "Enviando os comentarios...",
+ "feedback-close": "Feito",
+ "feedback-external-bug-report-button": "Gardar unha tarefa técnica",
+ "feedback-dialog-title": "Enviar opinión",
+ "feedback-dialog-intro": "Pode usar o formulario simple de abaixo para enviar a súa opinión. O seu comentario será engadido á páxina \"$1\", xunto co seu nome de usuario.",
+ "feedback-error-title": "Erro",
"feedback-error1": "Erro: Resultado da API non recoñecido",
"feedback-error2": "Erro: Fallo de edición",
"feedback-error3": "Erro: Non hai resposta da API",
+ "feedback-message": "Mensaxe:",
+ "feedback-subject": "Asunto:",
+ "feedback-submit": "Enviar",
+ "feedback-terms": "Comprendo que a miña información inclúe datos exactos do meu navegador e versión de sistema operativo e poderá ser compartida públicamente xunto aos meus comentarios.",
+ "feedback-termsofuse": "Concordo en proporcionar as miñas opinións de acordo cos Termos de Uso.",
"feedback-thanks": "Grazas! Os seus comentarios publicáronse na páxina \"[$2 $1]\".",
- "feedback-close": "Feito",
- "feedback-bugcheck": "Perfecto! Comprobe que aínda non está entre os [$1 erros coñecidos].",
- "feedback-bugnew": "Comprobeino. Informar deste novo erro",
+ "feedback-thanks-title": "Grazas!",
+ "feedback-useragent": "Axente de usuario:",
"searchsuggest-search": "Procurar",
"searchsuggest-containing": "que conteña...",
"api-error-badaccess-groups": "Non ten os permisos necesarios para cargar ficheiros neste wiki.",
@@ -3060,6 +3157,13 @@
"api-error-stashfailed": "Erro interno: O servidor non puido almacenar o ficheiro temporal.",
"api-error-publishfailed": "Erro interno: O servidor non puido publicar o ficheiro temporal.",
"api-error-stasherror": "Houbo un erro ao subir o ficheiro ao depósito.",
+ "api-error-stashedfilenotfound": "O ficheiro apartado non se atopou ao intentar envialo.",
+ "api-error-stashpathinvalid": "A ruta na que se apartara o ficheiro non era correcta.",
+ "api-error-stashfilestorage": "Produciuse un erro ao apartar o ficheiro.",
+ "api-error-stashzerolength": "O servidor non puido apartar o ficheiro porque o ficheiro está baleiro.",
+ "api-error-stashnotloggedin": "Debe identificarse para gardar ficheiros no apartado de envío.",
+ "api-error-stashwrongowner": "O ficheiro apartado ao que intentaba acceder non lle pertence a vostede.",
+ "api-error-stashnosuchfilekey": "A clave de ficheiro apartado á que intentaba acceder non existe.",
"api-error-timeout": "O servidor non respondeu no tempo esperado.",
"api-error-unclassified": "Houbo un erro descoñecido.",
"api-error-unknown-code": "Erro descoñecido: \"$1\"",
@@ -3101,9 +3205,11 @@
"expand_templates_ok": "Aceptar",
"expand_templates_remove_comments": "Eliminar os comentarios",
"expand_templates_remove_nowiki": "Suprimir as etiquetas <nowiki> no resultado",
- "expand_templates_generate_xml": "Mostrar as árbores de análise XML",
+ "expand_templates_generate_xml": "Mostrar a árbore de análise XML",
"expand_templates_generate_rawhtml": "Mostrar o HTML en bruto",
"expand_templates_preview": "Vista previa",
+ "expand_templates_preview_fail_html": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, inténteo de novo.</strong>\nSe segue sen funcionar, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta.",
+ "expand_templates_preview_fail_html_anon": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta.</strong>",
"pagelanguage": "Selector de lingua da páxina",
"pagelang-name": "Páxina",
"pagelang-language": "Lingua",
@@ -3114,6 +3220,58 @@
"log-name-pagelang": "Rexistro de cambios de lingua",
"log-description-pagelang": "Este é un rexistro dos cambios na lingua das páxinas.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiou}} a lingua da páxina \"$3\" do $4 ao $5.",
+ "default-skin-not-found": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nA súa instalación parece incluír os aspectos da seguinte lista. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración dos aspectos] para obter información sobre como activalos e escoller o predeterminado.\n\n$2\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki.\n\n; Se acaba de anovar MediaWiki:\n: MediaWiki 1.24 e versións posteriores xa non activan aspectos de maneira automática (lea o [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual de descubrimento automático de aspectos]). Pode pegar as seguintes liñas no seu ficheiro <code>LocalSettings.php</code> para activar todos os aspectos instalados actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se acaba de modificar <code>LocalSettings.php</code>:\n: Asegúrese de que os nomes dos aspectos están escritos correctamente.",
+ "default-skin-not-found-no-skins": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nNon ten aspectos instalados.\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clone un dos repositorios de <code>mediawiki/skins/*</code> mediante Git no cartafol <code dir=\"ltr\">skins/</code> da súa instalación de MediaWiki.\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración de aspectos] para obter información sobre como activar aspectos e escoller o aspecto predeterminado.",
"default-skin-not-found-row-enabled": "* <code>$1</code>/$2 (activada)",
- "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 ('''desactivada''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code>/$2 ('''desactivada''')",
+ "mediastatistics": "Estatísticas do contido multimedia",
+ "mediastatistics-summary": "Estatísticas sobre os tipos de ficheiros enviados. Isto inclúe unicamente a última versión de cada ficheiro. As versións vellas ou borradas dos ficheiros quedan excluídas.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tipo MIME",
+ "mediastatistics-table-extensions": "Extensións posibles",
+ "mediastatistics-table-count": "Número de ficheiros",
+ "mediastatistics-table-totalbytes": "Tamaño combinado",
+ "mediastatistics-header-unknown": "Descoñecido",
+ "mediastatistics-header-bitmap": "Imaxes de mapas de bits",
+ "mediastatistics-header-drawing": "Debuxos (imaxes vectoriais)",
+ "mediastatistics-header-audio": "Son",
+ "mediastatistics-header-video": "Vídeos",
+ "mediastatistics-header-multimedia": "Contido enriquecido",
+ "mediastatistics-header-office": "Documentos",
+ "mediastatistics-header-text": "Texto",
+ "mediastatistics-header-executable": "Executables",
+ "mediastatistics-header-archive": "Formatos comprimidos",
+ "json-warn-trailing-comma": "{{PLURAL:$1|Eliminouse $1 coma final|Elimináronse $1 comas finais}} do JSON.",
+ "json-error-unknown": "Houbo un problema co JSON. Erro: $1",
+ "json-error-depth": "Superouse o número máximo de ficheiros apartados.",
+ "json-error-state-mismatch": "O JSON non é válido.",
+ "json-error-ctrl-char": "Produciuse un erro de carácter de control, trátase probablemente dun problema de codificación.",
+ "json-error-syntax": "Erro de sintaxe",
+ "json-error-utf8": "Hai caracteres UTF-8 incorrectos, trátase probablemente dun problema de codificación.",
+ "json-error-recursion": "Atopáronse unha ou máis referencias recursivas no valor para codificar.",
+ "json-error-inf-or-nan": "Atopáronse un ou máis valores NAN ou INF no valor para codificar.",
+ "json-error-unsupported-type": "Indicouse un valor dun tipo que non se pode codificar.",
+ "headline-anchor-title": "Ligazón a esta sección",
+ "special-characters-group-latin": "Latín",
+ "special-characters-group-latinextended": "Latín estendido",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Símbolos",
+ "special-characters-group-greek": "Grego",
+ "special-characters-group-cyrillic": "Cirílico",
+ "special-characters-group-arabic": "Árabe",
+ "special-characters-group-arabicextended": "Árabe estendido",
+ "special-characters-group-persian": "Persa",
+ "special-characters-group-hebrew": "Hebreo",
+ "special-characters-group-bangla": "Bengalí",
+ "special-characters-group-tamil": "Támil",
+ "special-characters-group-telugu": "Telugú",
+ "special-characters-group-sinhala": "Cingalés",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanāgarī",
+ "special-characters-group-thai": "Tailandés",
+ "special-characters-group-lao": "Laosiano",
+ "special-characters-group-khmer": "Camboxano",
+ "special-characters-title-endash": "guión",
+ "special-characters-title-emdash": "raia",
+ "special-characters-title-minus": "signo menos"
}
diff --git a/languages/i18n/glk.json b/languages/i18n/glk.json
index 1a20c4dc..4ba2bcc3 100644
--- a/languages/i18n/glk.json
+++ b/languages/i18n/glk.json
@@ -1,52 +1,52 @@
{
- "@metadata": {
- "authors": [
- "AminSanaei",
- "Varg",
- "محک"
- ]
- },
- "moredotdotdot": "ویشتر...",
- "mypage": "می هنه‌شر",
- "mytalk": "می گب",
- "anontalk": "اَ آی.پیˇ گب",
- "qbfind": "یاتن",
- "qbedit": "دچین واچین",
- "returnto": "واگرد به $1.",
- "search": "واموج",
- "searchbutton": "واموج",
- "go": "بوشو",
- "searcharticle": "بوشو",
- "history_short": "تارئخ",
- "printableversion": "پرینتی نوسخه",
- "permalink": "مؤنسنی پیوند",
- "edit": "دچین واچین",
- "editthispage": "اَ هنه‌شره (صفحه‌یه) دچین‌واچین بکون.",
- "create-this-page": "اَ هنه‌شره (صفحه‌یه) چاکون.",
- "deletethispage": "اَ هنه‌شره پاکأ کون.",
- "newpage": "تازه هنه‌شر (تازه صفحه)",
- "talkpagelinktext": "گب",
- "talk": "گب",
- "toolbox": "ابزار جیگا",
- "jumpto": "واز بکون به:",
- "jumptonavigation": "گردسن",
- "jumptosearch": "واموج",
- "currentevents": "تازه چیؤن",
- "mainpage": "گت صفحه",
- "mainpage-description": "گت صفحه",
- "portal": "امه جیگا",
- "privacy": "رازبداری",
- "editsection": "دچین‌واچین",
- "editold": "دچین‌واچین",
- "nstab-main": "وانیویس (مقاله)",
- "nstab-user": "کاربری هنه‌شر",
- "nstab-category": "رج",
- "searchresults": "واموج‌دموجˇ نتایج",
- "searchresults-title": "واموج‌دموجˇ نتایج، «$1»ˇ واسی",
- "allpagessubmit": "بشو",
- "categories": "رجؤن",
- "sp-contributions-talk": "گب",
- "blocklink": "دَوَسته ببه",
- "tooltip-ca-edit": "شمه تانید اَ هنه‌شره (صفحه) دچین‌واچین بکونید. بی‌زحمت قبل از ان‌کی ذخیره بکونید، پیش‌نمایشˇ دوکمه جا استفاده بکونید.",
- "tooltip-ca-history": "اَ هنه‌شر (صفحه)ˇ قدیمی نسخه‌یان"
+ "@metadata": {
+ "authors": [
+ "AminSanaei",
+ "Varg",
+ "محک"
+ ]
+ },
+ "moredotdotdot": "ویشتر...",
+ "mypage": "می هنه‌شر",
+ "mytalk": "می گب",
+ "anontalk": "اَ آی.پیˇ گب",
+ "qbfind": "یاتن",
+ "qbedit": "دچین واچین",
+ "returnto": "واگرد به $1.",
+ "search": "واموج",
+ "searchbutton": "واموج",
+ "go": "بوشو",
+ "searcharticle": "بوشو",
+ "history_short": "تارئخ",
+ "printableversion": "پرینتی نوسخه",
+ "permalink": "مؤنسنی پیوند",
+ "edit": "دچین واچین",
+ "editthispage": "اَ هنه‌شره (صفحه‌یه) دچین‌واچین بکون.",
+ "create-this-page": "اَ هنه‌شره (صفحه‌یه) چاکون.",
+ "deletethispage": "اَ هنه‌شره پاکأ کون.",
+ "newpage": "تازه هنه‌شر (تازه صفحه)",
+ "talkpagelinktext": "گب",
+ "talk": "گب",
+ "toolbox": "ابزار جیگا",
+ "jumpto": "واز بکون به:",
+ "jumptonavigation": "گردسن",
+ "jumptosearch": "واموج",
+ "currentevents": "تازه چیؤن",
+ "mainpage": "گت صفحه",
+ "mainpage-description": "گت صفحه",
+ "portal": "امه جیگا",
+ "privacy": "رازبداری",
+ "editsection": "دچین‌واچین",
+ "editold": "دچین‌واچین",
+ "nstab-main": "وانیویس (مقاله)",
+ "nstab-user": "کاربری هنه‌شر",
+ "nstab-category": "رج",
+ "searchresults": "واموج‌دموجˇ نتایج",
+ "searchresults-title": "واموج‌دموجˇ نتایج، «$1»ˇ واسی",
+ "allpagessubmit": "بشو",
+ "categories": "رجؤن",
+ "sp-contributions-talk": "گب",
+ "blocklink": "دَوَسته ببه",
+ "tooltip-ca-edit": "شمه تانید اَ هنه‌شره (صفحه) دچین‌واچین بکونید. بی‌زحمت قبل از ان‌کی ذخیره بکونید، پیش‌نمایشˇ دوکمه جا استفاده بکونید.",
+ "tooltip-ca-history": "اَ هنه‌شر (صفحه)ˇ قدیمی نسخه‌یان"
}
diff --git a/languages/i18n/gn.json b/languages/i18n/gn.json
index 02ef1b2c..b9e8b508 100644
--- a/languages/i18n/gn.json
+++ b/languages/i18n/gn.json
@@ -1,368 +1,365 @@
{
- "@metadata": {
- "authors": [
- "Hugo.arg",
- "P. S. F. Freitas",
- "Perla"
- ]
- },
- "tog-underline": "Haiguy joajuha",
- "tog-hideminor": "Eñomi ñemyatyrõ michĩva «ñemoambue pyahúpe»",
- "tog-extendwatchlist": "Eipyso tembiapo rapykueho rysýi opaite ñemoambue ikatúvape",
- "tog-usenewrc": "Ñemoambue ojejapo ramóva (ndoikói opaite 'navegador'-pe)",
- "tog-numberheadings": "Mbopapapy ijehegui myakãha",
- "tog-showtoolbar": "Ehechauka ñemyatyrõ renda",
- "underline-always": "Akói",
- "underline-never": "Araka'eve",
- "sunday": "arateĩ",
- "monday": "arakői",
- "tuesday": "araapy",
- "wednesday": "ararundy",
- "thursday": "arapo",
- "friday": "arapoteĩ",
- "saturday": "arapokői",
- "sun": "arateĩ",
- "mon": "arakõi",
- "tue": "araapy",
- "wed": "ararundy",
- "thu": "arapo",
- "fri": "arapoteĩ",
- "january": "jasyteĩ",
- "february": "jasykői",
- "march": "jasyapy",
- "april": "jasyrundy",
- "may_long": "jasypo",
- "june": "jasypoteĩ",
- "july": "jasypokői",
- "august": "jasypoapy",
- "september": "jasyporundy",
- "october": "jasypa",
- "november": "jasypateĩ",
- "december": "jasypakői",
- "january-gen": "jasyteĩ",
- "february-gen": "jasykõi",
- "march-gen": "jasyapy",
- "april-gen": "jasyrundy",
- "may-gen": "jasypo",
- "june-gen": "jasypoteĩ",
- "july-gen": "jasypokõi",
- "august-gen": "jasypoapy",
- "september-gen": "jasyporundy",
- "october-gen": "jasypa",
- "november-gen": "jasypateĩ",
- "december-gen": "jasypakõi",
- "jan": "jasyteĩ",
- "feb": "jasykõi",
- "mar": "jasyapy",
- "apr": "jasyrundy",
- "may": "jasypo",
- "jun": "jasypoteĩ",
- "jul": "jasypokõi",
- "aug": "jasypoapy",
- "sep": "jasyporundy",
- "oct": "jasypa",
- "nov": "jasypateĩ",
- "dec": "jasypakõi",
- "pagecategories": "{{PLURAL:$1|Ñemohenda|Ñemohendakuéra}}",
- "about": "Rehegua",
- "article": "Kuatiahai",
- "newwindow": "(Ojepe'a peteĩ ovetã pyahu)",
- "cancel": "Mbotove",
- "mypage": "Che kuatiarogue",
- "mytalk": "Che myangekõi",
- "navigation": "Kundaharã",
- "qbfind": "Heka",
- "qbedit": "Jehaijey",
- "tagline": "{{SITENAME}}megua",
- "help": "Pytyvõhára",
- "search": "Heka",
- "searchbutton": "Heka",
- "go": "Ha",
- "searcharticle": "Ha",
- "history": "Tembiasakue",
- "history_short": "Tembiasakue",
- "printableversion": "Osẽma haguãicha",
- "edit": "Jehaijey",
- "delete": "Mboje'o",
- "undelete_short": "Restaurar $1 ediciones",
- "newpage": "Pyahu kuatia",
- "talkpagelinktext": "ñe'ẽ",
- "specialpage": "Kuatiarogue mba'echĩchĩ",
- "personaltools": "Tapicha rembipuru",
- "postcomment": "Emoĩ ne remimo'ã",
- "talk": "Myangekõi",
- "views": "Techakuéra",
- "toolbox": "Tembiporu",
- "mediawikipage": "Hecha kuatiarogue marandu",
- "viewtalkpage": "Hecha myangekõi",
- "otherlanguages": "Ambue ñe'ẽ",
- "redirectedfrom": "(Oñembohapejeýva $1)",
- "lastmodifiedat": "Ko kuatiarogue oñemoambuejeýkuri: $2, $1.",
- "viewcount": "Esta página ha sido visitada $1 veces.",
- "jumpto": "Kundaharãme jeho",
- "jumptonavigation": "kundaharã",
- "jumptosearch": "Jeheka",
- "aboutsite": "Ári {{SITENAME}}",
- "aboutpage": "Project:Rehegua",
- "copyright": "Tembikuaa'aty ikatu ojepuru <i>$1</i> rekópe",
- "currentevents": "Ag̃agua",
- "disclaimers": "Marandu leiguigua",
- "edithelp": "Jehairã ñepytyvõ",
- "mainpage": "Ape",
- "mainpage-description": "Ape",
- "portal": "Tekohapegua",
- "privacy": "Polítika marandu ñeñangareko rehegua",
- "privacypage": "Project:Polítika marandu ñeñangareko rehegua",
- "youhavenewmessagesmulti": "Reguereko marandu pyahu $1",
- "editsection": "jehaijey",
- "editold": "jehaijey",
- "editsectionhint": "Jehaijey vore: $1",
- "toc": "Tembikuaa'aty rechaukaha",
- "showtoc": "hechauka",
- "hidetoc": "toñemi",
- "restorelink": "$1 ediciones borradas",
- "red-link-title": "$1 (ndaipóri ko togue)",
- "nstab-main": "Kuatiahai",
- "nstab-user": "Puruhára",
- "nstab-media": "Media rogue",
- "nstab-special": "Mba'echĩchĩ",
- "nstab-project": "Mba'e apopyrã rogue",
- "nstab-image": "Ñongatupy",
- "nstab-mediawiki": "Marandu",
- "nstab-template": "Tembiecharã",
- "nstab-help": "Pytyvõ",
- "nstab-category": "Ñemohenda",
- "nosuchaction": "Upe tembiapo ndaipóri",
- "ns-specialprotected": "Las páginas en el espacio de nombres Especial no se pueden editar.",
- "yourname": "Hero",
- "yourpassword": "Ne remiñemi",
- "yourpasswordagain": "Repita ne remiñemi",
- "remembermypassword": "Aipota chemomandu'ajepi amba'apo jave (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "Terañemboguapy/Ke",
- "nav-login-createaccount": "Terañemboguapy/Ke",
- "userlogin": "Terañemboguapy/Ke",
- "logout": "Sẽ",
- "userlogout": "Sẽ",
- "nologin": "¿Ne'ĩrãpa remohenda nde réra? '''$1'''.",
- "nologinlink": "Téra ñemohenda",
- "loginsuccesstitle": "Remoñepyrũ hekopete ne rembiapo",
- "nosuchusershort": "No hay un usuario con el nombre \"$1\". Compruebe que lo ha escrito correctamente.",
- "mailmypassword": "Embou chéve ñe'ẽveve rupive peteĩ temiñemĩ pyahu",
- "loginlanguagelabel": "Ñe'ẽ: $1",
- "bold_sample": "Haipyre oñemohũvéva",
- "bold_tip": "Haipyre oñemohũvéva",
- "italic_sample": "Haipyre ikarẽva",
- "italic_tip": "Haipyre ikarẽva",
- "link_tip": "Joaju hyepyguávandi",
- "extlink_tip": "Joaju okapeguávandi (recuerde añadir el prefijo http://)",
- "headline_tip": "Teraete mokõiha",
- "nowiki_tip": "Viki jehaireko ñembo'yke",
- "image_tip": "Ta'ãnga moĩngepyréva",
- "media_tip": "Joaju jehai'aty multimediaguándi",
- "sig_tip": "Teraguapy, arange, aravo",
- "hr_tip": "Haipuku oñenóva (eipurúke tekotevẽ javénte)",
- "summary": "Jehaimombyky:",
- "subject": "Mba'ekuaarã/teraete:",
- "minoredit": "Kóva ha'e peteĩ jehai mbyky",
- "watchthis": "Toñeñangareko ko tembiapóre",
- "savearticle": "Hai",
- "showpreview": "Tojechauka jehai ñemboguapy mboyve",
- "showdiff": "Tojechauka ñemoambue",
- "missingsummary": "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «Hai» tu edición se grabará sin él.",
- "subject-preview": "Previsualización del mba'ekuaarã/teraete:",
- "newarticletext": "Rehapykuehókuri peteĩ joaju peteĩ kuatiarogue ndaipórivape.\nNde remoheñoisérõ ko kuatiarogue, eñepyrũkatu ehai.\nReikotevẽvérõ marandu, emoñe'ẽ kuatiarogue ñepytyvõ rehegua. Oiméramo reikereínte térã rejavyhaguére, upéicharõ terehojey [[{{MediaWiki:Helppage}}|kuatiarogue mboyveguápe]].",
- "userinvalidcssjstitle": "'''Aviso:''' No existe la piel \"$1\". Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas, p.e. Usuario:Foo/vector.css en vez de Usuario:Foo/Vector.css.",
- "editing": "Ojehaihína $1",
- "editingsection": "Ojehaihína $1 (vore)",
- "editingcomment": "Ojehaihína $1 (comentario)",
- "yourtext": "Mba'ehaipyre",
- "cur": "ko'ag̃agua",
- "last": "ipaha",
- "historysize": "($1 bytes)",
- "rev-delundel": "hechauka/toñemi",
- "logdelete-selected": "'''Seleccionados $1 eventos de registro:'''",
- "lineno": "Jehai $1:",
- "editundo": "embyai",
- "searchresults": "Ojejuhúva jeheka",
- "prevn": "{{PLURAL:$1|$1}} mboyvegua",
- "viewprevnext": "Hecha ($1 {{int:pipe-separator}} $2) ($3).",
- "showingresults": "Abajo se muestran hasta '''$1''' resultados empezando por el nº '''$2'''.",
- "showingresultsnum": "Abajo se muestran los '''$3''' resultados empezando por el nº '''$2'''.",
- "preferences": "Mbohoryha",
- "mypreferences": "Che mbohoryha",
- "prefs-rc": "Oñemoambue pyahúva",
- "searchresultshead": "Jeheka",
- "youremail": "Ñe'ẽveve",
- "yourlanguage": "Ñe'ẽ:",
- "gender-male": "Ha'e ohaijey wiki kuatiarogue kuéra",
- "gender-female": "Ha'e ohaijey wiki kuatiarogue kuéra",
- "email": "Pareha eleytróniko",
- "userrights-lookup-user": "Configurar grupos de usuarios",
- "userrights-user-editname": "Ehaimi peteĩ téra puruháragua:",
- "editusergroup": "Modificar grupos de usuarios",
- "editinguser": "Ojehaihína '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
- "userrights-editusergroup": "Modificar grupos de usuarios",
- "saveusergroups": "Guardar grupos de usuarios",
- "userrights-groupsmember": "Pehengue:",
- "userrights-reason": "Motivo para el cambio:",
- "group-all": "(opaite)",
- "nchanges": "$1 ñemoambue",
- "recentchanges": "Oñemoambue pyahúva",
- "rclistfrom": "Tojehechauka oñemoambue pyahúva $1 guive",
- "rcshowhideminor": "$1 jehaijey michĩva",
- "rcshowhideliu": "$1 puruhára ohejáva teraguapy",
- "rcshowhideanons": "$1 puruhára ojekuaa'ỹva",
- "rcshowhidemine": "$1 che jehaijey",
- "rclinks": "Ápe ojehechakuaa umi $1 oñemoambue pyahúva $2 ára ohasava'ekuépe.<br />$3",
- "hide": "toñemi",
- "show": "hechauka",
- "newsectionsummary": "Pyahuvore: /* $1 */",
- "recentchangeslinked-title": "Ñemoambue $1 rehegua",
- "recentchangeslinked-summary": "Ko kuatiarogue hekochĩchĩvape oñembohysýi umi ñemoambue ipyahúva ko'ã kuatiarogue ojoajúvape. Kuatiarogue oĩva tapykueho rysýipe oĩ '''haipyre oñemohũvape'''.",
- "upload": "Tojehupi jehai'aty",
- "uploadtext": "Eipuru pe tembipuru oĩva iguýpe ehupi hag̃ua jehai'aty, rehecha térã reheka hag̃ua ta'ãnga ojehupipyrémava eike jehai'aty jehupipyre rysýipe, umi ihupipyréva ha oñemboguémava avei oñemboguapy [[Special:Log/upload|jehai'aty jehupipyrépe]].\nReomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:\n'''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.jpg]]</nowiki>''', '''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.png|texto alternativo]]</nowiki>''' o\n'''<nowiki>[[</nowiki>Media<nowiki>:Archivo.ogg]]</nowiki>''' ojoaju hag̃ua hekopete pe jehai'atýre.",
- "filename": "Téra jehai'aty",
- "listfiles": "Ta'ãnga rysýi",
- "listfiles_user": "Puruhára",
- "file-anchor-link": "Ñongatupy",
- "filehist-revert": "embojevy",
- "filehist-current": "ko'ag̃agua",
- "filehist-datetime": "Ára/Aravo",
- "filehist-user": "Puruhára",
- "filehist-comment": "Jehaimombyky",
- "imagelinks": "Joajukuéra",
- "filerevert": "Embojevy $1",
- "filedelete-legend": "Mboje'o jehai'aty",
- "filedelete-success": "'''$1''' oñembogue'akue",
- "mimesearch": "Jeheka MIME",
- "listredirects": "Ñembohapejey rysýi",
- "unusedtemplates": "Tembiecharã ndojepurúiva",
- "randompage": "Kuatiarogue oñembosako'íva",
- "randomredirect": "Oimerãe ñembohapejeýpe jeho",
- "statistics": "Papyrekokuaa",
- "doubleredirects": "Ñembohapejey jo'apyre",
- "brokenredirects": "Ñembohapejey hekopegua'ỹva",
- "brokenredirects-edit": "jehaijey",
- "brokenredirects-delete": "mboje'o",
- "withoutinterwiki": "Kuatiarogue ndorekóiva interwiki",
- "fewestrevisions": "Kuatiahai sa'ive ijehaijeýva",
- "nbytes": "$1 bytes",
- "ncategories": "$1 ñemohendakuéra",
- "nlinks": "$1 joaju",
- "nmembers": "$1 kuatiahai",
- "nrevisions": "$1 revisiones",
- "nviews": "$1 vistas",
- "lonelypages": "Kuatiarogue ityre'ỹva",
- "uncategorizedpages": "Kuatiarogue oñemohenda'ỹva",
- "uncategorizedcategories": "Ñemohenda noñemohendáiva",
- "uncategorizedimages": "Ta'ãnga ne'ĩrã oñemohendáva",
- "uncategorizedtemplates": "Tembiecharã noñemohendáiva",
- "unusedcategories": "Ñemohenda ojepuru'ỹva",
- "unusedimages": "Ta'ãnga ndojepurúiva",
- "wantedcategories": "Ñemohenda oñekotevẽva",
- "wantedpages": "Kuatiarogue oñekotevẽva",
- "mostlinked": "Kuatiahai ojoaju hetavéva",
- "mostlinkedcategories": "Ñemohenda ojoaju hetavéva",
- "mostlinkedtemplates": "Tembiecharã ojoaju hetavéva",
- "mostcategories": "Kuatiarogue iñemohenda hetavéva",
- "mostimages": "Ta'ãnga ojepuruvéva",
- "mostrevisions": "Kuatiahai hetave ijehaijeýva",
- "prefixindex": "Kuatiarogue henondepyguáva",
- "shortpages": "Kuatiarogue mbykýva",
- "longpages": "Kuatiarogue ipukúva",
- "deadendpages": "Kuatiarogue ñesẽ'ỹva",
- "protectedpages": "Kuatiarogue oñeñangarekóva",
- "listusers": "Puruhára rysýi",
- "newpages": "Kuatiarogue ipyahúva",
- "newpages-username": "Hero",
- "ancientpages": "Kuatiahai hi'arevéva",
- "move": "Guerova",
- "movethispage": "Guerova kuatiarogue",
- "booksources": "Heñóiva kuatiañe'ẽme",
- "log": "Ñemboguapypyre",
- "allpages": "Opaite kuatiarogue",
- "alphaindexline": "$1 $2 peve",
- "nextpage": "Kuatia rogue upeigua($1)",
- "prevpage": "Kuatia rogue mboyvegua ($1)",
- "allpagesfrom": "Ehechauka kuatia rogue oñepyrũva: -pe",
- "allpagesto": "Ehechauka kuatia rogue opáva: -pe",
- "allarticles": "Opa kuatia rogue",
- "allinnamespace": "Opa kuatia rogue (pa'ũ $1)",
- "allpagessubmit": "Hechauka",
- "categories": "Ñemohendakuéra",
- "listusers-submit": "Hechauka",
- "emailuser": "Tojeguerahauka ñe'ẽveve ko puruhárape",
- "emailpage": "Pareha eleytrónico",
- "emailmessage": "Marandu",
- "watchlist": "Tapykueho rysýi",
- "mywatchlist": "Tapykueho rysýi",
- "watch": "Ñangareko",
- "dellogpage": "Ñemboguepyre ñonagatupy",
- "deletionlog": "ñemboguepyre ñonagatupy",
- "rollback_short": "Embojevy",
- "rollbacklink": "Embojevy",
- "prot_1movedto2": "[[$1]] oñembohasa [[$2]]-pe",
- "protect-text": "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
- "undeletedrevisions": "$1 ediciones restauradas",
- "undeletedrevisions-files": "$1 ediciones y $2 archivos restaurados",
- "undeletedfiles": "$1 archivos restaurados",
- "undelete-search-submit": "Heka",
- "namespace": "Téra rendagua:",
- "invert": "Toñembo'ovývo mba'eporavopyre",
- "blanknamespace": "(Tenondeguáva)",
- "contributions": "Puruhára mba'emoĩmbyre",
- "mycontris": "Che mba'emoĩmbyre",
- "sp-contributions-search": "Heka mba'emoĩmbyre",
- "sp-contributions-submit": "Heka",
- "whatlinkshere": "Oñembojoajukuaáva ko'ápe",
- "whatlinkshere-title": "Kuatiarogue ojoajúva \"$1\" rehe",
- "whatlinkshere-page": "Kuatiarogue:",
- "linkshere": "Ko'ã kuatiarogue ojoaju '''[[:$1]]''' rehe:",
- "whatlinkshere-prev": "mboyvegua $1",
- "whatlinkshere-next": "upeigua $1",
- "whatlinkshere-links": "← joajukuéra",
- "blockip": "Ejoko puruhára",
- "ipblocklist": "IP mbohape rysýi imbotypyréva",
- "ipblocklist-submit": "Heka",
- "blocklink": "ejoko",
- "contribslink": "mba'emoĩmbyre",
- "blocklogtext": "Esto es un registro de bloqueos y desbloqueos de usuarios. Las direcciones bloqueadas automáticamente no aparecen aquí. Consulte la [[Special:BlockList|IP mbohape rysýi imbotypyréva]] para ver la lista de prohibiciones y bloqueos actualmente vigente.",
- "movearticle": "Guerova kuatiarogue",
- "move-watch": "Toñeñangareko ko tembiapóre",
- "movepagebtn": "Guerova kuatiarogue",
- "revertmove": "embojevy",
- "delete_and_move": "Mboje'o ha guerova",
- "export": "Kuatiarogue ñemondo",
- "allmessages": "Opaite marandu MediaWikigua",
- "import-revision-count": "$1 revisiones",
- "import-logentry-upload-detail": "$1 revisiones",
- "import-logentry-interwiki-detail": "$1 revisiones desde $2",
- "tooltip-pt-userpage": "Che puruhárakuatia",
- "tooltip-pt-mytalk": "Che kuatiarogue myangekõi",
- "tooltip-pt-preferences": "Che mbohoryha",
- "tooltip-pt-mycontris": "Tysỹi che mba'emoĩmbyre",
- "tooltip-ca-move": "Guerova kuatiarogue",
- "tooltip-p-logo": "Ape",
- "tooltip-n-mainpage": "Eho ijapépe",
- "spamprotectiontitle": "Filtro de protección contra spam",
- "spamprotectiontext": "La página que intentas guardar ha sido bloqueada por el filtro de spam. Esto se debe probablemente a alguno de los un enlaces externos incluidos en ella.",
- "spamprotectionmatch": "El siguiente texto es el que activó nuestro filtro ''anti-spam'' (contra la publicidad no solicitada): $1",
- "spambot_username": "Limpieza de spam de MediaWiki",
- "spam_reverting": "Revirtiendo a la última versión que no contenga enlaces a $1",
- "spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
- "file-info": "tamaño de jehai'aty: $1; tipo MIME: $2",
- "newimages": "Ta'ãnga pyahu renda",
- "ilsubmit": "Jeheka",
- "namespacesall": "opaite",
- "monthsall": "opaite",
- "autosumm-new": "Kuatiarogue ipyahúva: $1",
- "watchlistedit-numitems": "Tu lista de seguimiento tiene $1 páginas, excluyendo las páginas de discusión.",
- "watchlistedit-normal-title": "Moambue tapykueho rysýi",
- "watchlistedit-normal-submit": "Mboje'o kuatiarogue",
- "watchlistedit-normal-done": "$1 páginas han sido borradas de tu lista de seguimiento:",
- "watchlistedit-raw-titles": "Kuatiarogue:",
- "watchlistedit-raw-added": "Se han añadido $1 páginas:",
- "watchlistedit-raw-removed": "$1 páginas han sido borradas:",
- "version": "Mba'ereko",
- "specialpages": "Kuatiarogue hekochĩchĩva"
+ "@metadata": {
+ "authors": [
+ "Hugo.arg",
+ "P. S. F. Freitas",
+ "Perla",
+ "아라"
+ ]
+ },
+ "tog-underline": "Haiguy joajuha",
+ "tog-hideminor": "Eñomi ñemyatyrõ michĩva «ñemoambue pyahúpe»",
+ "tog-extendwatchlist": "Eipyso tembiapo rapykueho rysýi opaite ñemoambue ikatúvape",
+ "tog-usenewrc": "Ñemoambue ojejapo ramóva (ndoikói opaite 'navegador'-pe)",
+ "tog-numberheadings": "Mbopapapy ijehegui myakãha",
+ "tog-showtoolbar": "Ehechauka ñemyatyrõ renda",
+ "underline-always": "Akói",
+ "underline-never": "Araka'eve",
+ "sunday": "arateĩ",
+ "monday": "arakői",
+ "tuesday": "araapy",
+ "wednesday": "ararundy",
+ "thursday": "arapo",
+ "friday": "arapoteĩ",
+ "saturday": "arapokői",
+ "sun": "arateĩ",
+ "mon": "arakõi",
+ "tue": "araapy",
+ "wed": "ararundy",
+ "thu": "arapo",
+ "fri": "arapoteĩ",
+ "january": "jasyteĩ",
+ "february": "jasykői",
+ "march": "jasyapy",
+ "april": "jasyrundy",
+ "may_long": "jasypo",
+ "june": "jasypoteĩ",
+ "july": "jasypokői",
+ "august": "jasypoapy",
+ "september": "jasyporundy",
+ "october": "jasypa",
+ "november": "jasypateĩ",
+ "december": "jasypakői",
+ "january-gen": "jasyteĩ",
+ "february-gen": "jasykõi",
+ "march-gen": "jasyapy",
+ "april-gen": "jasyrundy",
+ "may-gen": "jasypo",
+ "june-gen": "jasypoteĩ",
+ "july-gen": "jasypokõi",
+ "august-gen": "jasypoapy",
+ "september-gen": "jasyporundy",
+ "october-gen": "jasypa",
+ "november-gen": "jasypateĩ",
+ "december-gen": "jasypakõi",
+ "jan": "jasyteĩ",
+ "feb": "jasykõi",
+ "mar": "jasyapy",
+ "apr": "jasyrundy",
+ "may": "jasypo",
+ "jun": "jasypoteĩ",
+ "jul": "jasypokõi",
+ "aug": "jasypoapy",
+ "sep": "jasyporundy",
+ "oct": "jasypa",
+ "nov": "jasypateĩ",
+ "dec": "jasypakõi",
+ "pagecategories": "{{PLURAL:$1|Ñemohenda|Ñemohendakuéra}}",
+ "about": "Rehegua",
+ "article": "Kuatiahai",
+ "newwindow": "(Ojepe'a peteĩ ovetã pyahu)",
+ "cancel": "Mbotove",
+ "mypage": "Che kuatiarogue",
+ "mytalk": "Che myangekõi",
+ "navigation": "Kundaharã",
+ "qbfind": "Heka",
+ "qbedit": "Jehaijey",
+ "tagline": "{{SITENAME}}megua",
+ "help": "Pytyvõhára",
+ "search": "Heka",
+ "searchbutton": "Heka",
+ "go": "Ha",
+ "searcharticle": "Ha",
+ "history": "Tembiasakue",
+ "history_short": "Tembiasakue",
+ "printableversion": "Osẽma haguãicha",
+ "edit": "Jehaijey",
+ "delete": "Mboje'o",
+ "undelete_short": "Restaurar $1 ediciones",
+ "newpage": "Pyahu kuatia",
+ "talkpagelinktext": "ñe'ẽ",
+ "specialpage": "Kuatiarogue mba'echĩchĩ",
+ "personaltools": "Tapicha rembipuru",
+ "talk": "Myangekõi",
+ "views": "Techakuéra",
+ "toolbox": "Tembiporu",
+ "mediawikipage": "Hecha kuatiarogue marandu",
+ "viewtalkpage": "Hecha myangekõi",
+ "otherlanguages": "Ambue ñe'ẽ",
+ "redirectedfrom": "(Oñembohapejeýva $1)",
+ "lastmodifiedat": "Ko kuatiarogue oñemoambuejeýkuri: $2, $1.",
+ "viewcount": "Esta página ha sido visitada $1 veces.",
+ "jumpto": "Kundaharãme jeho",
+ "jumptonavigation": "kundaharã",
+ "jumptosearch": "Jeheka",
+ "aboutsite": "Ári {{SITENAME}}",
+ "aboutpage": "Project:Rehegua",
+ "copyright": "Tembikuaa'aty ikatu ojepuru <i>$1</i> rekópe",
+ "currentevents": "Ag̃agua",
+ "disclaimers": "Marandu leiguigua",
+ "edithelp": "Jehairã ñepytyvõ",
+ "mainpage": "Ape",
+ "mainpage-description": "Ape",
+ "portal": "Tekohapegua",
+ "privacy": "Polítika marandu ñeñangareko rehegua",
+ "privacypage": "Project:Polítika marandu ñeñangareko rehegua",
+ "youhavenewmessagesmulti": "Reguereko marandu pyahu $1",
+ "editsection": "jehaijey",
+ "editold": "jehaijey",
+ "editsectionhint": "Jehaijey vore: $1",
+ "toc": "Tembikuaa'aty rechaukaha",
+ "showtoc": "hechauka",
+ "hidetoc": "toñemi",
+ "restorelink": "$1 ediciones borradas",
+ "red-link-title": "$1 (ndaipóri ko togue)",
+ "nstab-main": "Kuatiahai",
+ "nstab-user": "Puruhára",
+ "nstab-media": "Media rogue",
+ "nstab-special": "Mba'echĩchĩ",
+ "nstab-project": "Mba'e apopyrã rogue",
+ "nstab-image": "Ñongatupy",
+ "nstab-mediawiki": "Marandu",
+ "nstab-template": "Tembiecharã",
+ "nstab-help": "Pytyvõ",
+ "nstab-category": "Ñemohenda",
+ "nosuchaction": "Upe tembiapo ndaipóri",
+ "ns-specialprotected": "Las páginas en el espacio de nombres Especial no se pueden editar.",
+ "yourname": "Hero",
+ "yourpassword": "Ne remiñemi",
+ "yourpasswordagain": "Repita ne remiñemi",
+ "remembermypassword": "Aipota chemomandu'ajepi amba'apo jave (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "Terañemboguapy/Ke",
+ "nav-login-createaccount": "Terañemboguapy/Ke",
+ "userlogin": "Terañemboguapy/Ke",
+ "logout": "Sẽ",
+ "userlogout": "Sẽ",
+ "nologin": "¿Ne'ĩrãpa remohenda nde réra? '''$1'''.",
+ "nologinlink": "Téra ñemohenda",
+ "loginsuccesstitle": "Remoñepyrũ hekopete ne rembiapo",
+ "nosuchusershort": "No hay un usuario con el nombre \"$1\". Compruebe que lo ha escrito correctamente.",
+ "mailmypassword": "Embou chéve ñe'ẽveve rupive peteĩ temiñemĩ pyahu",
+ "loginlanguagelabel": "Ñe'ẽ: $1",
+ "bold_sample": "Haipyre oñemohũvéva",
+ "bold_tip": "Haipyre oñemohũvéva",
+ "italic_sample": "Haipyre ikarẽva",
+ "italic_tip": "Haipyre ikarẽva",
+ "link_tip": "Joaju hyepyguávandi",
+ "extlink_tip": "Joaju okapeguávandi (recuerde añadir el prefijo http://)",
+ "headline_tip": "Teraete mokõiha",
+ "nowiki_tip": "Viki jehaireko ñembo'yke",
+ "image_tip": "Ta'ãnga moĩngepyréva",
+ "media_tip": "Joaju jehai'aty multimediaguándi",
+ "sig_tip": "Teraguapy, arange, aravo",
+ "hr_tip": "Haipuku oñenóva (eipurúke tekotevẽ javénte)",
+ "summary": "Jehaimombyky:",
+ "subject": "Mba'ekuaarã/teraete:",
+ "minoredit": "Kóva ha'e peteĩ jehai mbyky",
+ "watchthis": "Toñeñangareko ko tembiapóre",
+ "savearticle": "Hai",
+ "showpreview": "Tojechauka jehai ñemboguapy mboyve",
+ "showdiff": "Tojechauka ñemoambue",
+ "missingsummary": "'''Atención:''' No has escrito un resumen de edición. Si haces clic nuevamente en «Hai» tu edición se grabará sin él.",
+ "subject-preview": "Previsualización del mba'ekuaarã/teraete:",
+ "newarticletext": "Rehapykuehókuri peteĩ joaju peteĩ kuatiarogue ndaipórivape.\nNde remoheñoisérõ ko kuatiarogue, eñepyrũkatu ehai.\nReikotevẽvérõ marandu, emoñe'ẽ kuatiarogue ñepytyvõ rehegua. Oiméramo reikereínte térã rejavyhaguére, upéicharõ terehojey [$1 kuatiarogue mboyveguápe].",
+ "userinvalidcssjstitle": "'''Aviso:''' No existe la piel \"$1\". Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas, p.e. Usuario:Foo/vector.css en vez de Usuario:Foo/Vector.css.",
+ "editing": "Ojehaihína $1",
+ "editingsection": "Ojehaihína $1 (vore)",
+ "editingcomment": "Ojehaihína $1 (comentario)",
+ "yourtext": "Mba'ehaipyre",
+ "cur": "ko'ag̃agua",
+ "last": "ipaha",
+ "historysize": "($1 bytes)",
+ "rev-delundel": "hechauka/toñemi",
+ "logdelete-selected": "Seleccionados $1 eventos de registro:",
+ "lineno": "Jehai $1:",
+ "editundo": "embyai",
+ "searchresults": "Ojejuhúva jeheka",
+ "prevn": "{{PLURAL:$1|$1}} mboyvegua",
+ "viewprevnext": "Hecha ($1 {{int:pipe-separator}} $2) ($3).",
+ "showingresults": "Abajo se muestran hasta '''$1''' resultados empezando por el nº '''$2'''.",
+ "preferences": "Mbohoryha",
+ "mypreferences": "Che mbohoryha",
+ "prefs-rc": "Oñemoambue pyahúva",
+ "searchresultshead": "Jeheka",
+ "youremail": "Ñe'ẽveve",
+ "yourlanguage": "Ñe'ẽ:",
+ "gender-male": "Ha'e ohaijey wiki kuatiarogue kuéra",
+ "gender-female": "Ha'e ohaijey wiki kuatiarogue kuéra",
+ "email": "Pareha eleytróniko",
+ "userrights-lookup-user": "Configurar grupos de usuarios",
+ "userrights-user-editname": "Ehaimi peteĩ téra puruháragua:",
+ "editusergroup": "Modificar grupos de usuarios",
+ "editinguser": "Ojehaihína '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+ "userrights-editusergroup": "Modificar grupos de usuarios",
+ "saveusergroups": "Guardar grupos de usuarios",
+ "userrights-groupsmember": "Pehengue:",
+ "userrights-reason": "Motivo para el cambio:",
+ "group-all": "(opaite)",
+ "nchanges": "$1 ñemoambue",
+ "recentchanges": "Oñemoambue pyahúva",
+ "rclistfrom": "Tojehechauka oñemoambue pyahúva $3 $2 guive",
+ "rcshowhideminor": "$1 jehaijey michĩva",
+ "rcshowhideliu": "$1 puruhára ohejáva teraguapy",
+ "rcshowhideanons": "$1 puruhára ojekuaa'ỹva",
+ "rcshowhidemine": "$1 che jehaijey",
+ "rclinks": "Ápe ojehechakuaa umi $1 oñemoambue pyahúva $2 ára ohasava'ekuépe.<br />$3",
+ "hide": "toñemi",
+ "show": "hechauka",
+ "newsectionsummary": "Pyahuvore: /* $1 */",
+ "recentchangeslinked-title": "Ñemoambue $1 rehegua",
+ "recentchangeslinked-summary": "Ko kuatiarogue hekochĩchĩvape oñembohysýi umi ñemoambue ipyahúva ko'ã kuatiarogue ojoajúvape. Kuatiarogue oĩva tapykueho rysýipe oĩ '''haipyre oñemohũvape'''.",
+ "upload": "Tojehupi jehai'aty",
+ "uploadtext": "Eipuru pe tembipuru oĩva iguýpe ehupi hag̃ua jehai'aty, rehecha térã reheka hag̃ua ta'ãnga ojehupipyrémava eike jehai'aty jehupipyre rysýipe, umi ihupipyréva ha oñemboguémava avei oñemboguapy [[Special:Log/upload|jehai'aty jehupipyrépe]].\nReomĩsérõ ta'ãnga peteĩ kuatiaroguépe, eipuru peteĩ joaju:\n'''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.jpg]]</nowiki>''', '''<nowiki>[[</nowiki>Imagen<nowiki>:Archivo.png|texto alternativo]]</nowiki>''' o\n'''<nowiki>[[</nowiki>Media<nowiki>:Archivo.ogg]]</nowiki>''' ojoaju hag̃ua hekopete pe jehai'atýre.",
+ "filename": "Téra jehai'aty",
+ "listfiles": "Ta'ãnga rysýi",
+ "listfiles_user": "Puruhára",
+ "file-anchor-link": "Ñongatupy",
+ "filehist-revert": "embojevy",
+ "filehist-current": "ko'ag̃agua",
+ "filehist-datetime": "Ára/Aravo",
+ "filehist-user": "Puruhára",
+ "filehist-comment": "Jehaimombyky",
+ "imagelinks": "Joajukuéra",
+ "filerevert": "Embojevy $1",
+ "filedelete-legend": "Mboje'o jehai'aty",
+ "filedelete-success": "'''$1''' oñembogue'akue",
+ "mimesearch": "Jeheka MIME",
+ "listredirects": "Ñembohapejey rysýi",
+ "unusedtemplates": "Tembiecharã ndojepurúiva",
+ "randompage": "Kuatiarogue oñembosako'íva",
+ "randomredirect": "Oimerãe ñembohapejeýpe jeho",
+ "statistics": "Papyrekokuaa",
+ "doubleredirects": "Ñembohapejey jo'apyre",
+ "brokenredirects": "Ñembohapejey hekopegua'ỹva",
+ "brokenredirects-edit": "jehaijey",
+ "brokenredirects-delete": "mboje'o",
+ "withoutinterwiki": "Kuatiarogue ndorekóiva interwiki",
+ "fewestrevisions": "Kuatiahai sa'ive ijehaijeýva",
+ "nbytes": "$1 bytes",
+ "ncategories": "$1 ñemohendakuéra",
+ "nlinks": "$1 joaju",
+ "nmembers": "$1 kuatiahai",
+ "nrevisions": "$1 revisiones",
+ "nviews": "$1 vistas",
+ "lonelypages": "Kuatiarogue ityre'ỹva",
+ "uncategorizedpages": "Kuatiarogue oñemohenda'ỹva",
+ "uncategorizedcategories": "Ñemohenda noñemohendáiva",
+ "uncategorizedimages": "Ta'ãnga ne'ĩrã oñemohendáva",
+ "uncategorizedtemplates": "Tembiecharã noñemohendáiva",
+ "unusedcategories": "Ñemohenda ojepuru'ỹva",
+ "unusedimages": "Ta'ãnga ndojepurúiva",
+ "wantedcategories": "Ñemohenda oñekotevẽva",
+ "wantedpages": "Kuatiarogue oñekotevẽva",
+ "mostlinked": "Kuatiahai ojoaju hetavéva",
+ "mostlinkedcategories": "Ñemohenda ojoaju hetavéva",
+ "mostlinkedtemplates": "Tembiecharã ojoaju hetavéva",
+ "mostcategories": "Kuatiarogue iñemohenda hetavéva",
+ "mostimages": "Ta'ãnga ojepuruvéva",
+ "mostrevisions": "Kuatiahai hetave ijehaijeýva",
+ "prefixindex": "Kuatiarogue henondepyguáva",
+ "shortpages": "Kuatiarogue mbykýva",
+ "longpages": "Kuatiarogue ipukúva",
+ "deadendpages": "Kuatiarogue ñesẽ'ỹva",
+ "protectedpages": "Kuatiarogue oñeñangarekóva",
+ "listusers": "Puruhára rysýi",
+ "newpages": "Kuatiarogue ipyahúva",
+ "newpages-username": "Hero",
+ "ancientpages": "Kuatiahai hi'arevéva",
+ "move": "Guerova",
+ "movethispage": "Guerova kuatiarogue",
+ "booksources": "Heñóiva kuatiañe'ẽme",
+ "log": "Ñemboguapypyre",
+ "allpages": "Opaite kuatiarogue",
+ "nextpage": "Kuatia rogue upeigua($1)",
+ "prevpage": "Kuatia rogue mboyvegua ($1)",
+ "allpagesfrom": "Ehechauka kuatia rogue oñepyrũva: -pe",
+ "allpagesto": "Ehechauka kuatia rogue opáva: -pe",
+ "allarticles": "Opa kuatia rogue",
+ "allinnamespace": "Opa kuatia rogue (pa'ũ $1)",
+ "allpagessubmit": "Hechauka",
+ "categories": "Ñemohendakuéra",
+ "listusers-submit": "Hechauka",
+ "emailuser": "Tojeguerahauka ñe'ẽveve ko puruhárape",
+ "emailpage": "Pareha eleytrónico",
+ "emailmessage": "Marandu",
+ "watchlist": "Tapykueho rysýi",
+ "mywatchlist": "Tapykueho rysýi",
+ "watch": "Ñangareko",
+ "dellogpage": "Ñemboguepyre ñonagatupy",
+ "deletionlog": "ñemboguepyre ñonagatupy",
+ "rollback_short": "Embojevy",
+ "rollbacklink": "Embojevy",
+ "prot_1movedto2": "[[$1]] oñembohasa [[$2]]-pe",
+ "protect-text": "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
+ "undeletedrevisions": "$1 ediciones restauradas",
+ "undeletedrevisions-files": "$1 ediciones y $2 archivos restaurados",
+ "undeletedfiles": "$1 archivos restaurados",
+ "undelete-search-submit": "Heka",
+ "namespace": "Téra rendagua:",
+ "invert": "Toñembo'ovývo mba'eporavopyre",
+ "blanknamespace": "(Tenondeguáva)",
+ "contributions": "Puruhára mba'emoĩmbyre",
+ "mycontris": "Che mba'emoĩmbyre",
+ "sp-contributions-search": "Heka mba'emoĩmbyre",
+ "sp-contributions-submit": "Heka",
+ "whatlinkshere": "Oñembojoajukuaáva ko'ápe",
+ "whatlinkshere-title": "Kuatiarogue ojoajúva \"$1\" rehe",
+ "whatlinkshere-page": "Kuatiarogue:",
+ "linkshere": "Ko'ã kuatiarogue ojoaju '''[[:$1]]''' rehe:",
+ "whatlinkshere-prev": "mboyvegua $1",
+ "whatlinkshere-next": "upeigua $1",
+ "whatlinkshere-links": "← joajukuéra",
+ "blockip": "Ejoko puruhára",
+ "ipblocklist": "IP mbohape rysýi imbotypyréva",
+ "ipblocklist-submit": "Heka",
+ "blocklink": "ejoko",
+ "contribslink": "mba'emoĩmbyre",
+ "blocklogtext": "Esto es un registro de bloqueos y desbloqueos de usuarios. Las direcciones bloqueadas automáticamente no aparecen aquí. Consulte la [[Special:BlockList|IP mbohape rysýi imbotypyréva]] para ver la lista de prohibiciones y bloqueos actualmente vigente.",
+ "movearticle": "Guerova kuatiarogue",
+ "move-watch": "Toñeñangareko ko tembiapóre",
+ "movepagebtn": "Guerova kuatiarogue",
+ "revertmove": "embojevy",
+ "delete_and_move": "Mboje'o ha guerova",
+ "export": "Kuatiarogue ñemondo",
+ "allmessages": "Opaite marandu MediaWikigua",
+ "import-revision-count": "$1 revisiones",
+ "import-logentry-upload-detail": "$1 revisiones",
+ "import-logentry-interwiki-detail": "$1 revisiones desde $2",
+ "tooltip-pt-userpage": "Che puruhárakuatia",
+ "tooltip-pt-mytalk": "Che kuatiarogue myangekõi",
+ "tooltip-pt-preferences": "Che mbohoryha",
+ "tooltip-pt-mycontris": "Tysỹi che mba'emoĩmbyre",
+ "tooltip-ca-move": "Guerova kuatiarogue",
+ "tooltip-p-logo": "Ape",
+ "tooltip-n-mainpage": "Eho ijapépe",
+ "spamprotectiontitle": "Filtro de protección contra spam",
+ "spamprotectiontext": "La página que intentas guardar ha sido bloqueada por el filtro de spam. Esto se debe probablemente a alguno de los un enlaces externos incluidos en ella.",
+ "spamprotectionmatch": "El siguiente texto es el que activó nuestro filtro ''anti-spam'' (contra la publicidad no solicitada): $1",
+ "spambot_username": "Limpieza de spam de MediaWiki",
+ "spam_reverting": "Revirtiendo a la última versión que no contenga enlaces a $1",
+ "spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
+ "file-info": "tamaño de jehai'aty: $1; tipo MIME: $2",
+ "newimages": "Ta'ãnga pyahu renda",
+ "ilsubmit": "Jeheka",
+ "namespacesall": "opaite",
+ "monthsall": "opaite",
+ "autosumm-new": "Kuatiarogue ipyahúva: $1",
+ "watchlistedit-normal-title": "Moambue tapykueho rysýi",
+ "watchlistedit-normal-submit": "Mboje'o kuatiarogue",
+ "watchlistedit-normal-done": "$1 páginas han sido borradas de tu lista de seguimiento:",
+ "watchlistedit-raw-titles": "Kuatiarogue:",
+ "watchlistedit-raw-added": "Se han añadido $1 páginas:",
+ "watchlistedit-raw-removed": "$1 páginas han sido borradas:",
+ "version": "Mba'ereko",
+ "specialpages": "Kuatiarogue hekochĩchĩva"
}
diff --git a/languages/i18n/gom-latn.json b/languages/i18n/gom-latn.json
index 8d7786e8..bdd92b37 100644
--- a/languages/i18n/gom-latn.json
+++ b/languages/i18n/gom-latn.json
@@ -298,7 +298,6 @@
"search-suggest": "mhonnunk sodi: $1",
"searchrelated": "sombondit",
"searchall": "soglle",
- "showingresultsheader": "{{PLURAL:$5|'''$3''' hantlem '''$1''' porinam|'''$3''' hantlim '''$1 - $2''' porinam}}, '''$4''' haka",
"search-nonefound": "Tujea sodak mell khata toslem kai porinam nan.",
"preferences": "Posondeo",
"mypreferences": "Posonti",
@@ -377,7 +376,6 @@
"pager-older-n": "{{PLURAL:$1|adlem 1|adlim $1}}",
"booksources": "Pustokachem mull",
"booksources-search-legend": "Pustokachim mullam sod",
- "booksources-go": "Fuddem voch",
"speciallogtitlelabel": "Vishoi vo vapurpi:",
"log": "Sotram",
"allpages": "Sogllim panam",
@@ -398,7 +396,7 @@
"unwatch": "Nodor kadd",
"watchlist-details": "Tujea sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}}, ulovpachim panam veglim mezonastanam.",
"wlheader-showupdated": "Tujea fatle bhette san bodol'lean tim panam '''datt''' dakhoileant.",
- "wlshowlast": "Xevottchim $1 voram $2 dis $3 dakhoi",
+ "wlshowlast": "Xevottchim $1 voram $2 dis dakhoi",
"watchlist-options": "Sadurvollericheo poryay",
"watching": "Disht dovortanv...",
"unwatching": "Disht kaddthanv...",
@@ -530,7 +528,6 @@
"metadata": "Metadata",
"metadata-help": "Hea failin anikui mahiti asa, hi fail korunk uzar kel'le digital camera vo scanner sun tem aila zait.\nZori tor hi failik bodol'lam zalear kai mahiti bodololem failik sarkem mell khaina zait.",
"metadata-fields": "Metadata chovkott konsollttoch, hea sondexant metadata molleantlea murtipanachea dakhovnnent aspav astolo.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "soglle",
"namespacesall": "sogllem",
"monthsall": "sogllem",
"watchlisttools-view": "Sombondhi bodlopam polloi",
diff --git a/languages/i18n/got.json b/languages/i18n/got.json
index f0c6be35..cc627047 100644
--- a/languages/i18n/got.json
+++ b/languages/i18n/got.json
@@ -1,466 +1,453 @@
{
- "@metadata": {
- "authors": [
- "Bleakgh",
- "Jocke Pirat",
- "Michawiki",
- "Node ue",
- "Sajasazi (on got.wikipedia.org)",
- "Zylbath"
- ]
- },
- "underline-always": "Sinteino",
- "underline-never": "Niu",
- "sunday": "Sunnonsdags",
- "monday": "Meninsdags",
- "tuesday": "Tiwisdags",
- "wednesday": "Midiwiko",
- "thursday": "Þeiƕonsdags",
- "friday": "Fraujonsdags",
- "saturday": "𐌸𐍅𐌰𐌷𐌻𐌹𐍃𐌳𐌰𐌲𐍃",
- "sun": "𐍃𐌿𐌽",
- "mon": "𐌼𐌴𐌽",
- "tue": "𐌰𐍂𐌴",
- "wed": "𐍅𐍉𐌳",
- "thu": "𐍀𐌰𐌹",
- "fri": "𐍆𐍂𐌹",
- "sat": "𐍃𐌰𐌼",
- "january": "𐌰𐍆𐍄𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
- "february": "𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐍃",
- "march": "𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐍃",
- "april": "𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐍃",
- "may_long": "𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐍃",
- "june": "𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐍃",
- "july": "𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐍃",
- "august": "𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
- "september": "𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
- "october": "𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
- "november": "𐍆𐍂𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
- "december": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
- "january-gen": "𐌰𐍆𐍄𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
- "february-gen": "𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
- "march-gen": "𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
- "april-gen": "𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
- "may-gen": "𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
- "june-gen": "𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
- "july-gen": "𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
- "august-gen": "𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
- "september-gen": "𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
- "october-gen": "𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
- "november-gen": "𐍆𐍂𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
- "december-gen": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
- "jan": "𐌰𐍆𐍄",
- "feb": "𐍆𐌰𐌽",
- "mar": "𐌺𐌰𐌻",
- "apr": "𐌲𐍂𐌰",
- "may": "𐌱𐌻𐍉",
- "jun": "𐍅𐌰𐍂",
- "jul": "𐌷𐌰𐍅",
- "aug": "𐌰𐍃𐌰",
- "sep": "𐌰𐌺𐍂",
- "oct": "𐍅𐌴𐌹",
- "nov": "𐍆𐍂𐌿",
- "dec": "𐌾𐌹𐌿",
- "pagecategories": "{{PLURAL:$1|𐌷𐌰𐌽𐍃𐌰|𐌷𐌰𐌽𐍃𐍉𐍃}}",
- "category_header": "𐍃𐌴𐌹𐌳𐍉𐍃 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
- "subcategories": "Dalaþkunjos",
- "category-media-header": "𐌼𐌴𐌳𐌾𐌰 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
- "hidden-categories": "{{PLURAL:$1|𐍆𐌿𐌻𐌲𐌹𐌽𐍃 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌹|𐍆𐌿𐌻𐌲𐌹𐌽𐌰𐌹 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌾𐍉𐍃}}",
- "about": "𐌿𐍆𐌰𐍂",
- "article": "𐍃𐌰𐌸𐍃𐍃𐌴𐌹𐌳𐍉",
- "newwindow": "(𐌰𐌽𐌳𐌷𐌿𐌻𐌾𐌹𐌸 𐌹𐌽𐌽 𐌽𐌹𐌿𐌾𐌰 𐌰𐌿𐌲𐌰𐌳𐌰𐌿𐍂𐍉)",
- "cancel": "𐌷𐌰𐌻𐍄𐍃",
- "moredotdotdot": "𐌼𐌰𐌹𐍃...",
- "mypage": "𐌼𐌴𐌹𐌽 𐍃𐌴𐌹𐌳𐍉",
- "mytalk": "𐌼𐌴𐌹𐌽𐌰 𐌼𐌰𐌸𐌻𐌴𐌹",
- "navigation": "𐍅𐌹𐌲𐌰𐍄𐌰𐌿𐌷𐍄𐍃",
- "and": "𐌾𐌰𐌷",
- "qbfind": "𐍃𐍉𐌺𐌴𐌹𐌸",
- "qbedit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
- "qbmyoptions": "𐌼𐌴𐌹𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
- "vector-action-delete": "𐍄𐌰𐌹𐍂𐌰𐌽",
- "vector-view-create": "𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
- "vector-view-edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
- "vector-view-history": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍅𐌰𐌿𐍂𐌸𐌰𐌽𐌽𐌰",
- "vector-view-view": "𐌰𐌽𐌰𐌺𐌿𐌽𐌽𐌰𐌹𐍃",
- "vector-view-viewsource": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
- "actions": "𐍅𐌰𐌿𐍂𐍃𐍄𐍅𐌴𐌹𐌽𐍃",
- "namespaces": "𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐌸𐌴𐌹𐍃",
- "variants": "𐌼𐌹𐍃𐍃𐌰𐌻𐌴𐌹𐌽𐍃",
- "errorpagetitle": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰 𐌳𐍅𐌰𐌻𐌹𐍃",
- "returnto": "𐌲𐌰𐍅𐌰𐌽𐌳𐌾𐌰𐌽 𐌰𐍄 $1.",
- "tagline": "𐍆𐍂𐌰𐌼 {{SITENAME}}",
- "help": "𐌷𐌹𐌻𐍀𐌰",
- "search": "𐍃𐍉𐌺𐌾𐌰𐌽",
- "searchbutton": "𐍃𐍉𐌺𐌾𐌰𐌽",
- "go": "𐌲𐌰𐌲𐌲𐌰",
- "searcharticle": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽",
- "history": "𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉",
- "history_short": "𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
- "printableversion": "𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐍃𐌴𐌹𐌳𐍉",
- "permalink": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰",
- "view": "Saíhvan",
- "edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
- "create": "𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
- "editthispage": "𐌼𐌰𐌹𐌳𐌾𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
- "create-this-page": "Skapja þo seido",
- "delete": "𐍄𐌰𐌹𐍂𐌰𐌽",
- "deletethispage": "𐍄𐌰𐌹𐍂𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
- "protect": "𐌱𐌰𐌹𐍂𐌲𐌰𐌽",
- "protect_change": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
- "protectthispage": "Baírga þo siedo",
- "unprotect": "𐌽𐌹𐌱𐌰𐌹𐍂𐌲𐌰",
- "unprotectthispage": "Nibaírga þo siedo",
- "newpage": "𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
- "talkpage": "𐌼𐌰𐌸𐌻𐌴𐌹𐍃𐌴𐌹𐌳𐍉",
- "talkpagelinktext": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰",
- "specialpage": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃",
- "personaltools": "𐍅𐌰𐌹𐍂𐌻𐌴𐌹𐌺𐍃 𐌱𐍂𐌿𐌺𐍅𐌰𐌹𐌷𐍄𐍃",
- "talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰",
- "views": "𐌷𐌹𐍅𐌾𐍉𐍃",
- "toolbox": "𐍄𐌰𐌿𐌹 𐌰𐍂𐌺𐌰",
- "otherlanguages": "𐌰𐌽𐌸𐌰𐍂 𐍂𐌰𐌶𐌳𐍉𐍃",
- "redirectedfrom": "(𐌽𐌰𐌿𐌸𐌾𐌰𐌽 𐍆𐍂𐌰𐌼𐌹𐍃 $1)",
- "redirectpagesub": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
- "lastmodifiedat": "𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌼𐌰𐌹𐌳𐌾𐌹𐌸𐍃 ($2) ($1)",
- "jumpto": "𐌲𐌰𐌲𐌲𐌰𐌽 𐌰𐍄:",
- "jumptonavigation": "𐍃𐌴𐌹𐌳𐍉𐌲𐌰𐍅𐌹𐍃𐍃",
- "jumptosearch": "𐍃𐍉𐌺𐌴𐌹𐌸",
- "aboutsite": "𐍆𐍂𐌰𐌼 {{SITENAME}}",
- "aboutpage": "Project:𐌿𐍆𐌰𐍂",
- "copyrightpage": "{{ns:project}}:𐌼𐌰𐌽𐌻𐌴𐌹𐌺𐌰𐍅𐌹𐍄𐍉𐌸𐌰",
- "currentevents": "𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃",
- "currentevents-url": "Project:𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃",
- "disclaimers": "𐍅𐌰𐌳𐌾𐍉𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
- "disclaimerpage": "Project:𐍅𐌰𐌳𐌾𐌹𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
- "edithelp": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌷𐌹𐌻𐍀𐌰",
- "mainpage": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
- "mainpage-description": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
- "portal": "𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹",
- "portal-url": "Project:𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹",
- "privacy": "𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌿𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
- "privacypage": "Project:𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌴𐌹𐌽𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
- "retrievedfrom": "𐌲𐌰𐌽𐌰𐌼 𐍆𐍂𐌰𐌼 \"$1\"",
- "youhavenewmessages": "𐌸𐌿 𐌷𐌰𐌱𐌹𐍃 $1 ($2).",
- "editsection": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
- "editold": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
- "editlink": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
- "viewsourcelink": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
- "editsectionhint": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌳𐌰𐌹𐌻: $1",
- "toc": "𐌹𐌽𐌽𐌰𐌽𐌰",
- "showtoc": "𐌰𐌿𐌲𐌾𐌰",
- "hidetoc": "𐍆𐌹𐌻𐌷𐌰𐌽",
- "site-rss-feed": "$1 RSS Miþnatifodjan",
- "site-atom-feed": "$1 𐌰𐍄𐍉𐌼 𐌼𐌹𐌸𐌽𐌰𐍄𐌹𐍆𐍉𐌳𐌾𐌰𐌽",
- "page-atom-feed": "\"$1\" 𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉",
- "red-link-title": "$1 (𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌽𐌹𐍃𐍄)",
- "nstab-main": "𐍃𐌴𐌹𐌳𐍉",
- "nstab-user": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
- "nstab-special": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉",
- "nstab-project": "𐍂𐌴𐌹𐌺𐌹𐍃𐌴𐌹𐌳𐍉",
- "nstab-image": "𐍆𐌴𐌹𐌻𐌰",
- "nstab-template": "𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃",
- "nstab-help": "𐌷𐌹𐌻𐍀𐌰",
- "nstab-category": "𐌷𐌰𐌽𐍃𐌰",
- "missing-article": "𐍃𐌰 𐌳𐌰𐍄𐌰𐌱𐌿𐍃 𐌽𐌹 𐌲𐌰𐌽𐌰𐌼 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽 𐌴𐌹 𐌹𐍄𐌰 𐍃𐌺𐌰𐌻 𐌱𐌹𐌲𐌹𐍄𐌰𐌽: \"$1\" $2\n\n(The data base did not find the text of a page that it should have found, named \"$1\" $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.)",
- "viewsource": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
- "yourname": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐌽𐌰𐌼𐍉:",
- "yourpassword": "𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐍃 𐍅𐌰𐌿𐍂𐌳𐌰:",
- "login": "Atgaggan",
- "nav-login-createaccount": "𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽 / 𐌲𐌰𐌻𐌰𐌽𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
- "userlogin": "Atgaggan / gaskapjan niutandis",
- "logout": "𐌻𐌴𐌹𐌸𐌰𐌽",
- "userlogout": "𐌻𐌴𐌹𐌸𐌰𐌽",
- "nologinlink": "Gaskapjan þein niutandis",
- "createaccount": "𐌲𐌰𐌻𐌰𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
- "gotaccount": "Habiþ þu niutandis? '''$1'''",
- "gotaccountlink": "Atgaggan",
- "loginlanguagelabel": "Razda: $1",
- "bold_sample": "𐌰𐌱𐍂𐍃 𐌱𐍉𐌺𐌰",
- "bold_tip": "𐌰𐌱𐍂 𐍅𐌰𐌿𐍂𐌳𐌰",
- "italic_sample": "𐍅𐍂𐌰𐌹𐌵𐍃 𐍅𐌰𐌿𐍂𐌳𐌰",
- "italic_tip": "𐌳𐍂𐌹𐌿𐍃𐍉 𐌱𐍉𐌺𐌰",
- "link_sample": "𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉",
- "link_tip": "𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌹𐌽𐌽𐌰𐌽𐌰",
- "extlink_sample": "http://www.example.com 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌳𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉",
- "extlink_tip": "Uta táikjabandi (maúdjan http://)",
- "headline_sample": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍅𐌰𐌿𐍂𐌳𐌰",
- "headline_tip": "𐌷𐌰𐌿𐌷𐍃 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰 •𐌱•",
- "nowiki_sample": "𐍃𐌰𐍄𐌾𐌴𐌹 𐌿𐌽𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃 𐍄𐌴𐌺𐍃𐍄 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌼 𐌷𐌹𐍄",
- "nowiki_tip": "𐌿𐌽𐍅𐌹𐍄𐌾𐌹𐍃 𐍅𐌹𐌺𐌹𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃",
- "image_tip": "𐌹𐌽𐌽𐌱𐍉𐌳𐌰𐌽𐍃 𐍆𐌴𐌹𐌻𐌰",
- "media_tip": "𐍄𐌰𐌹𐌺𐌾𐌰𐌱𐌰𐌽𐌳𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐌹𐍃",
- "sig_tip": "𐌿𐌽𐌳𐌰𐍂𐌼𐌴𐌻 𐌸𐌴𐌹𐌽𐌰 𐌼𐌹𐌸 𐍃𐍄𐌿𐌽𐌳𐌰𐌼𐌴𐌻𐌰",
- "hr_tip": "𐍂𐌰𐌹𐌷𐍄𐍃𐌱𐌰𐌿𐍂𐌳 (𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌼𐌹𐌸 𐌽𐌹𐌿𐍆𐌰𐍂𐌿𐍃𐍃𐌿𐍃)",
- "summary": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐍃𐍀𐌹𐌻𐌻𐍉𐌽:",
- "subject": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰:",
- "minoredit": "𐍃𐌰 𐌹𐍃𐍄 𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
- "watchthis": "𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉",
- "savearticle": "𐌼𐌴𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
- "preview": "𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐍃𐌴𐌹𐌳𐍉",
- "showpreview": "𐍅𐌹𐍄𐌰𐌽 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰",
- "showdiff": "𐍅𐌹𐍄𐌰𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
- "newarticle": "(Niu)",
- "updated": "(Nuwisan)",
- "previewnote": "'''𐍃𐌰𐌷 𐌹𐍃𐍄 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰. 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌲𐌰𐌼𐌴𐌻𐌾𐌹𐌸 𐌽𐌹 𐌰𐍆 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐍃!'''",
- "editing": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1",
- "editingsection": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍆𐌴𐍂𐌰)",
- "editingcomment": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍂𐍉𐌳𐌾𐌰𐍆𐌴𐍂𐌰)",
- "yourdiff": "Missalieks",
- "template-protected": "(𐌲𐌰𐌱𐌰𐌹𐍂𐌲𐌾𐌰𐌽)",
- "template-semiprotected": "(halb-gabaírgjan)",
- "post-expand-template-inclusion-warning": "'''𐌷𐍅𐍉𐍄𐌾𐌰𐌽𐌳𐍃:''' 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃. 𐍃𐌿𐌼𐍃 𐍆𐌰𐌿𐍂𐌴𐌼𐌴𐌻𐌴𐌹𐌽𐍉𐍃 𐌽𐌹 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌸𐌰𐍂",
- "post-expand-template-inclusion-category": "𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍂 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃",
- "currentrev": "𐌽𐌿 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
- "currentrev-asof": "𐌰𐍆𐍄𐌿𐌼𐍃𐍄𐍃 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 $1",
- "revisionasof": "𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐍆𐍂𐌰𐌼 $1",
- "revision-info": "Máideins fram $1 bi $2",
- "previousrevision": "←𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
- "nextrevision": "Iftuma máideins→",
- "currentrevisionlink": "𐌽𐌿𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
- "cur": "𐌽𐌿",
- "next": "𐌹𐍆𐍄𐌿𐌼𐌰",
- "last": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃",
- "page_first": "frumists",
- "page_last": "𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃",
- "histfirst": "𐍆𐌰𐌿𐍂𐌸𐌹𐍃",
- "histlast": "𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃",
- "history-feed-item-nocomment": "$1 at $2",
- "revdel-restore": "𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌰𐌽𐌰𐍃𐌹𐌿𐌽𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍃",
- "revertmerge": "𐌿𐌽𐌲𐌰𐍄𐌹𐌻𐍉𐍃",
- "history-title": "𐌰𐍂𐌹𐍃𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐍆 \"$1\"",
- "lineno": "𐌱𐍉𐌺𐌰𐍂𐌹𐌲𐌹𐌻𐍉 $1:",
- "editundo": "𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
- "searchresults": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃",
- "searchresults-title": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃 𐍆𐌰𐌿𐍂 \"$1\"",
- "prevn": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}",
- "nextn": "𐌹𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}",
- "prevn-title": "𐍆𐌰𐌹𐍂𐌽𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}",
- "nextn-title": "𐌰𐍆𐍄𐌿𐌼𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}",
- "shown-title": "𐌰𐌿𐌾𐌰𐌽𐌳 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}} 𐌸𐌰𐌹𐍂𐌷 𐍃𐌴𐌹𐌳𐍉",
- "viewprevnext": "𐍃𐌹𐌿𐌽𐌴𐌹𐍃 ($1 {{int:pipe-separator}} $2) ($3)",
- "searchmenu-new": "'''𐍃𐌺𐌰𐍀𐌾𐌹𐍃 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉𐌽 \"[[:$1]]\" 𐌸𐌹𐌶𐍉𐍃 𐍅𐌹𐌺𐌾𐍉𐍃!'''",
- "searchprofile-articles": "𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
- "searchprofile-project": "𐌷𐌹𐌻𐍀𐍉𐍃 𐌾𐌰𐌷 𐍀𐍂𐍉𐍃𐌾𐌴𐌺𐍄𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
- "searchprofile-images": "𐌼𐌰𐌽𐌰𐌲𐍃𐌼𐌴𐌳𐌹𐌰",
- "searchprofile-everything": "𐌰𐌻𐌻",
- "searchprofile-advanced": "𐍆𐌰𐌹𐍂𐍂𐌰𐍆𐍂𐌰𐌼𐌰",
- "searchprofile-articles-tooltip": "𐍃𐍉𐌺 𐌹𐌽𐌽𐌰 $1",
- "searchprofile-project-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐌹𐌽𐌽𐌰 $1",
- "searchprofile-images-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
- "searchprofile-everything-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐌰𐌻𐌻 𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 (𐌸𐌹𐌶𐌴𐌴𐌹 𐌹𐍃𐍄 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌹𐍃)",
- "searchprofile-advanced-tooltip": "𐍃𐌺𐍉𐌾𐌹𐍃 𐌹𐌽𐌽𐌰 𐍃𐌹𐌻𐌱𐌰𐍃𐌺𐌰𐍀𐌹𐌸𐍃 𐌽𐌰𐌼𐌰𐌽𐍃𐍄𐌰𐌸",
- "search-result-size": "$1 ({{PLURAL:$2|•𐌰• 𐍅𐌰𐌿𐍂𐌳|•$2• 𐍅𐌰𐌿𐍂𐌳𐌰}})",
- "search-redirect": "(𐌰𐍆𐍄𐍂𐌰𐍅𐌴𐌹𐍄𐍃 𐍆𐍂𐌰𐌼 𐌸𐌰𐌼𐌼𐌰 $1)",
- "search-section": "(𐍆𐌴𐍂𐌰 $1)",
- "search-suggest": "𐍄𐌰𐌹𐌺𐌽𐌹𐌳𐌰 𐌸𐌿: $1",
- "searchall": "𐌰𐌻𐌻𐍃",
- "showingresultsheader": "{{PLURAL:$5|𐍄𐌰𐌿𐌹 '''$1''' 𐌸𐌹𐍃 '''$3'''|𐍄𐌰𐌿𐌾𐍉𐍃 '''$1 - $2''' 𐌸𐌹𐍃 '''$3'''}} 𐌱𐌹 𐌸𐌰𐌼𐌼𐌰 '''$4'''",
- "search-nonefound": "𐌽𐌹 𐌰𐌹𐌽𐌷𐌿𐌽 𐌲𐌰𐌲𐌹𐌱𐌾𐍉 𐍆𐌿𐌻𐌻𐌾𐌹𐌸 𐍃𐍉𐌺𐌴𐌹𐌽",
- "powersearch-legend": "𐍃𐍉𐌺𐌴𐌹𐌸",
- "powersearch-redir": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃",
- "preferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
- "mypreferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰",
- "prefs-skin": "Seidofill",
- "skin-preview": "Faúrsaiƕa",
- "saveprefs": "Melja",
- "searchresultshead": "Sokeiþ",
- "grouppage-sysop": "{{ns:project}}:𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃",
- "rightslog": "Niutandis stutjanlog",
- "nchanges": "$1 {{PLURAL:$1|máidein|máideins}}",
- "recentchanges": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
- "rcshowhideminor": "$1 lietila máideins",
- "rcshowhidebots": "$1 bota",
- "rcshowhideliu": "$1 niutandis",
- "rcshowhideanons": "$1 gasteis",
- "rcshowhidemine": "$1 mein máideins",
- "diff": "𐌻𐌴𐌹𐌺𐍃",
- "hist": "𐍆𐍂𐌼𐌵",
- "hide": "𐍆𐌹𐌻𐌷𐌰𐌽",
- "show": "𐌷𐌿𐌻𐌾𐌰𐌽",
- "minoreditletter": "l",
- "newpageletter": "N",
- "boteditletter": "b",
- "recentchangeslinked": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃",
- "recentchangeslinked-feed": "Máideinlieks",
- "recentchangeslinked-toolbox": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃",
- "recentchangeslinked-summary": "𐍃𐍉 𐌹𐍃𐍄 𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃 𐍃𐌺𐍉𐍀 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 (𐌰𐌹𐌸𐌸𐌰𐌿 𐌻𐌹𐌸𐌰𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹𐌶𐍉𐍃 𐌷𐌰𐌽𐍃𐍉𐍃). 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 [[Special:Watchlist|𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐍉𐍃 𐌸𐌴𐌹𐌽𐍉𐍃]] 𐍃𐌹𐌽𐌳 '''𐌳𐌹𐌲𐍂𐍃𐍄𐌰𐍆𐍃'''.",
- "upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
- "uploadbtn": "Ushlaþaiþ Feilans",
- "uploadlogpage": "Log af Ushlaþan",
- "uploadedimage": "ushlaþiþ \"[[$1]]\"",
- "watchthisupload": "Witan so seido",
- "imgfile": "Feilans",
- "listfiles": "Feilans tala",
- "file-anchor-link": "𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
- "filehist": "𐍆𐌴𐌹𐌻𐌰𐌽𐍃 𐌰𐌹𐍂𐌹𐍃",
- "filehist-help": "𐌺𐌻𐌹𐌺𐍉𐍃 𐌰𐌽𐌰 𐌳𐌰𐍄𐌰𐌹/𐍈𐌴𐌹𐌻𐌰𐌹 𐍃𐌰𐌹𐍈𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽 𐍃𐍅𐌴 𐌰𐍄𐌰𐌿𐌲𐌾𐌹𐌳𐌰 𐍃𐌹𐌺 𐌸𐌰𐌽.",
- "filehist-current": "𐌽𐌿",
- "filehist-datetime": "𐍈𐌴𐌹𐌻𐌰",
- "filehist-thumb": "𐍆𐍉𐍂𐍃𐌾𐌰𐌿",
- "filehist-thumbtext": "𐍆𐍉𐍂𐍃𐌾𐌰𐌿 𐍆𐌰𐌿𐍂 𐌿𐍃𐌲𐌰𐌱𐌰 𐍆𐍂𐌰𐌼 $1",
- "filehist-user": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
- "filehist-dimensions": "𐍅𐌰𐌷𐍃𐍄𐌿𐍃",
- "filehist-filesize": "Feilans wahstus",
- "filehist-comment": "𐌻𐌴𐌹𐍄𐌻𐌰𐍃𐍀𐌹𐌻𐌻𐍉𐌽",
- "imagelinks": "𐍆𐌴𐌹𐌻𐌹𐌽𐍃 𐌱𐍂𐌿𐌺𐌹𐍃",
- "linkstoimage": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌻𐌴𐌹𐌽𐌺𐍉𐌸|𐌸𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳}} 𐌸𐌹𐌶𐍉𐌶𐌿𐌷 𐍆𐌴𐌹𐌻𐍉𐍃",
- "sharedupload-desc-here": "𐍃𐌰 𐍆𐌴𐌹𐌻𐌰 𐌹𐍃𐍄 𐍆𐍂𐌰𐌼 $1 𐌾𐌰𐌷 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌻𐌾𐌰𐌹𐌼 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐍉𐌼.\n𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐌰𐌹 𐍆𐌴𐌹𐌻𐌰𐌽𐍃𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐌹𐍃 𐌸𐌰𐍂 𐌹𐍃𐍄 𐌳𐌰𐌻𐌰𐌸𐌰 𐌿𐍃𐌲𐌹𐌱𐌰𐌽𐍃.",
- "filedelete-submit": "Taíran",
- "mimesearch": "MIME sokeiþ",
- "listredirects": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃",
- "randompage": "𐍃𐌻𐌿𐌼𐍀𐌼𐌰𐍃𐍃𐌹𐌲 𐍃𐌴𐌹𐌳𐍉",
- "statistics": "𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐍄𐌹𐍃𐍄𐌹𐌺",
- "brokenredirects-edit": "(𐌼𐌰𐌹𐌳𐌾𐌰𐌽)",
- "brokenredirects-delete": "(𐍄𐌰𐌹𐍂𐌰𐌽)",
- "nbytes": "$1 {{PLURAL:$1|𐌱𐌰𐌹𐍄|𐌱𐌰𐌹𐍄𐌰}}",
- "ncategories": "$1 {{PLURAL:$1|𐌺𐌿𐌽𐌾𐌰|𐌺𐌿𐌽𐌾𐍉𐍃}}",
- "nlinks": "$1 {{PLURAL:$1|táikjanbandi|táikjanbandja}}",
- "nmembers": "$1 {{PLURAL:$1|niutand|niutanda}}",
- "wantedpages": "Gaírnedum seidam",
- "shortpages": "𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
- "longpages": "𐌻𐌰𐌲𐌲𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
- "listusers": "𐍂𐌴𐌲𐌹𐍃𐍄𐍂𐌴𐍂𐌰𐌳𐌴 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃",
- "newpages": "𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
- "move": "𐌽𐌰𐌼𐌾𐌰𐌽 𐌰𐍆𐍄𐍂𐌰",
- "movethispage": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐌰 𐍃𐌴𐌹𐌳𐍉",
- "specialloguserlabel": "Niutand:",
- "speciallogtitlelabel": "Namo:",
- "log": "𐌻𐍉𐌲𐌱𐍉𐌺𐍉𐍃",
- "all-logs-page": "𐌰𐌻𐌻𐌰 𐌻𐍉𐌲𐍉𐍃",
- "allpages": "𐌰𐌻𐌻𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐍃",
- "alphaindexline": "$1 du $2",
- "nextpage": "𐌹𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)",
- "prevpage": "𐌰𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)",
- "allarticles": "𐌰𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
- "allpagessubmit": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽",
- "categories": "𐌺𐌿𐌽𐌾𐍉𐍃",
- "linksearch-ns": "𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:",
- "emailuser": "𐍃𐌰𐌽𐌳𐌾𐌰𐌽 𐌸𐍉 𐌽𐌹𐌿𐍄𐌰𐌽𐌳 𐌱𐍉𐌺𐍉𐌼",
- "watchlist": "𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰",
- "mywatchlist": "𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰",
- "watch": "𐍅𐌰𐍂𐌰𐌽",
- "watchthispage": "𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉",
- "unwatch": "𐌽𐌹𐍅𐌰𐍂𐌰𐌽",
- "watchlist-details": "{{PLURAL:$1|$1 seido|$1 seidona}} witáiþs inu maþleiseidam.",
- "watching": "Wita...",
- "unwatching": "Niwita...",
- "created": "𐌲𐌰𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
- "deletepage": "𐍄𐌰𐌹𐍂𐌰 𐍃𐌴𐌹𐌳𐍉",
- "delete-legend": "𐍄𐌰𐌹𐍂𐌰𐌽",
- "actioncomplete": "𐍅𐌰𐍃𐌿𐌷 𐌹𐍄𐌰 𐌲𐌰𐌿𐍃𐍄𐌹𐌿𐌷𐌰𐌽",
- "dellogpage": "𐍄𐌰𐌹𐍂𐌰 𐌰𐌹𐍂𐍅𐌱𐍉𐌺𐌰",
- "deleteotherreason": "𐌰𐌽𐌸𐌰𐍂/𐌼𐌰𐌹𐍃 𐌼𐌹𐍄𐍉𐌽𐍃:",
- "deletereasonotherlist": "𐌰𐌽𐌸𐌰𐍂 𐌼𐌹𐍄𐍉𐌽𐍃",
- "rollbacklink": "𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽",
- "protectlogpage": "Log af Baírgjan",
- "prot_1movedto2": "[[$1]] skiubiþ du [[$2]]",
- "protect-level-sysop": "𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃 𐌰𐌹𐌽𐌰𐌷𐌰",
- "protect-expiring": "bláuþiþ $1 (UTC)",
- "restriction-type": "Freihals:",
- "restriction-edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
- "restriction-move": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽",
- "undeletebtn": "𐌰𐍆𐍄𐍂𐌰 𐌲𐌰𐌱𐍉𐍄𐌾𐌰𐌽",
- "undeletelink": "𐍃𐌰𐌹𐍈𐌰𐌽/𐌰𐍆𐍄𐍂𐌰𐌲𐌰𐍃𐌰𐍄𐌾𐌰𐌽",
- "undeleteviewlink": "𐍃𐌰𐌹𐍈𐌹𐍃",
- "undelete-search-submit": "Sokeiþ",
- "namespace": "𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:",
- "invert": "Afwandjan kustus",
- "blanknamespace": "(𐍆𐍂𐌿𐌼𐌹𐍃𐍄𐍃)",
- "contributions": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃",
- "mycontris": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃",
- "contribsub2": "𐍆𐌰𐌿𐍂 $1 ($2)",
- "uctop": "(háubiþ)",
- "month": "𐍆𐍂𐌰𐌼 𐌼𐌴𐌽𐍉𐌸𐍃 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):",
- "year": "𐍆𐍂𐌰𐌼 𐌾𐌴𐍂𐌰 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):",
- "sp-contributions-newbies-sub": "Faúr niujis niutandis",
- "sp-contributions-blocklog": "Logboka af afdraúsjan",
- "sp-contributions-talk": "Maþleiseido",
- "whatlinkshere": "𐍈𐌰𐍂𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌷𐌻𐌰𐌲𐌺𐌾𐌰𐌽𐌳 𐌷𐌹𐌳𐍂𐌴",
- "whatlinkshere-title": "Seidos hwarjis du $1 táiknjan",
- "isredirect": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
- "istemplate": "ináukan",
- "whatlinkshere-prev": "{{PLURAL:$1|aftuma|aftumans $1}}",
- "whatlinkshere-next": "{{PLURAL:$1|iftuma|iftumans $1}}",
- "whatlinkshere-links": "← táikajanbandja",
- "blockip": "𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
- "ipbreason": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰:",
- "ipboptions": "𐌱 𐌰𐍅𐍂𐌰:2 hours, 𐌰 𐌳𐌰𐌲𐍃:1 day, 𐌲 𐌳𐌰𐌲𐍉𐍃:3 days, 𐌰 𐍅𐌹𐌺𐍉:1 week, 𐌱 𐍅𐌹𐌺𐍉𐌽𐍃:2 weeks, 𐌰 𐌼𐌴𐌽𐍉𐌸𐍃:1 month, 𐌲 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:3 months, 𐌵 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:6 months, 𐌰 𐌾𐌴𐍂:1 year, 𐌹𐌽𐌿𐍄𐍂𐌹𐌲𐌲𐌴𐌽𐌳𐌴𐌹𐍃:infinite",
- "ipblocklist-submit": "Sokeiþ",
- "infiniteblock": "ajukduþs",
- "blocklink": "𐍅𐌰𐍂𐌲𐌾𐌰𐌽",
- "unblocklink": "𐍅𐌰𐌽𐌳𐌾𐌰𐌽",
- "change-blocklink": "𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐍅𐌰𐌿𐍂𐌾𐌰𐍅𐌰𐌳𐌳𐌾𐌿𐍃",
- "contribslink": "𐌲𐌹𐌱𐍉𐍃",
- "blocklogpage": "𐌻𐍉𐌲𐌱𐍉𐌺𐌰 𐌰𐍆 𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽",
- "blocklogentry": "𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌹𐌸 [[$1]] 𐍆𐌰𐌿𐍂 $2 $3",
- "movearticle": "𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉:",
- "newtitle": "𐌳𐌿 𐌽𐌹𐌿𐌾𐌹𐍃 𐌽𐌰𐌼𐍉𐍃:",
- "move-watch": "𐍅𐌹𐍄𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
- "movepagebtn": "𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉",
- "movelogpage": "Log af skiubans",
- "movereason": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰:",
- "revertmove": "𐍂𐌰𐌹𐌳𐌾𐌰𐌽",
- "export": "𐌿𐍄𐌼𐌹𐌸𐍃𐌰𐍄𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
- "thumbnail-more": "𐌱𐌹𐌰𐌿𐌺𐌰𐌽",
- "tooltip-pt-userpage": "𐌸𐌴𐌹𐌽𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
- "tooltip-pt-mytalk": "𐌸𐌴𐌹𐌽𐌰 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
- "tooltip-pt-preferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
- "tooltip-pt-watchlist": "𐌻𐌴𐌹𐍃𐍄𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌴𐌹 𐌸𐌿 𐌰𐍄𐍅𐌹𐍄𐌰𐌹𐍃 𐍆𐌰𐌿𐍂 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌽𐍃",
- "tooltip-pt-mycontris": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐌸𐌴𐌹𐌽 𐌲𐌹𐌱𐍉𐌽𐍃",
- "tooltip-pt-login": "𐌸𐌿 𐌹𐍃 𐌲𐌰𐍈𐌰𐍄𐌾𐌰𐌽𐌳𐍃 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽; 𐌰𐌸𐌸𐌰𐌽, 𐌽𐌹𐍃𐍄 𐌸𐌰𐌿𐍂𐌱𐌰𐌽𐍃",
- "tooltip-pt-logout": "𐌻𐌴𐌹𐌸𐌰𐌽",
- "tooltip-ca-talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌹 𐌱𐌹 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
- "tooltip-ca-edit": "𐌸𐌿 𐌼𐌰𐌲𐍄 𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉. 𐌾𐌰𐌱𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐍃, 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍆𐍂𐌿𐌼𐌰.",
- "tooltip-ca-addsection": "𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌾𐌹𐍃 𐌽𐌹𐌿𐌾𐌰 𐌳𐌰𐌹𐌻",
- "tooltip-ca-viewsource": "𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌹𐍃𐍄 𐌷𐌻𐌴𐌹𐌱𐌾𐌰𐌽𐌳𐍃\n𐌸𐌿 𐌼𐌰𐌲𐍄 𐍃𐌰𐌹𐍈𐌹𐍃 𐌹𐌶𐍉𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
- "tooltip-ca-history": "𐍆𐌰𐌿𐍂𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌸𐌹𐌶𐌿𐌷 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
- "tooltip-ca-protect": "𐌱𐌰𐌹𐍂𐌲𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
- "tooltip-ca-delete": "𐍄𐌰𐌹𐍂𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
- "tooltip-ca-move": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
- "tooltip-ca-watch": "𐌰𐌽𐌰𐌰𐌿𐌺𐌹𐍃 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐌰𐌽𐌰 𐌸𐌴𐌹𐌽𐌰 𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐌰",
- "tooltip-search": "𐍃𐍉𐌺𐌾𐌰𐌽 {{SITENAME}}",
- "tooltip-search-go": "𐍆𐌰𐍂𐌹𐍃 𐌳𐌿 𐍃𐌴𐌹𐌳𐍉𐌽 𐌼𐌹𐌸 𐌲𐌻𐌰𐌲𐌲𐌿𐌾𐌰𐌼𐌰 𐌽𐌰𐌼𐌹𐌽 𐌾𐌰𐌱𐌰𐌹 𐌹𐍃𐍄",
- "tooltip-search-fulltext": "𐍃𐍉𐌺𐌾𐌰𐌽 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐍆𐌰𐌿𐍂 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽",
- "tooltip-p-logo": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
- "tooltip-n-mainpage": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
- "tooltip-n-mainpage-description": "𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
- "tooltip-n-portal": "𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐌰𐌹, 𐍈𐌰𐍃 𐌸𐌿 𐌼𐌰𐌲 𐍄𐌰𐌿𐌾𐌰, 𐍈𐌰𐍃 𐍃𐍄𐌰𐌸𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽 𐌹𐌽𐍃",
- "tooltip-n-currentevents": "𐌱𐌹𐌲𐌹𐌸𐌹𐍃 𐌱𐌰𐌺𐌲𐌰𐌷𐌰𐌱𐌹 𐌱𐌹 𐌽𐌹𐌿𐌾𐌰𐌽𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌽𐍃",
- "tooltip-n-recentchanges": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐌴 𐌽𐌿 𐌰𐌽𐌰 𐌸𐌰𐌼𐌼𐌰 𐍅𐌹𐌺𐌾𐌰",
- "tooltip-n-randompage": "𐌿𐍃𐌻𐌰𐌸𐌰𐌹𐌸 𐍃𐌻𐌿𐌼𐍀𐌼𐌰𐍃𐍃𐌹𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉",
- "tooltip-n-help": "𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐍆𐌹𐌽𐌸𐌰𐌽",
- "tooltip-t-whatlinkshere": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌰𐌻𐌻𐌹𐍃 𐍅𐌹𐌺𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍉 𐌴𐌹 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌷𐌹𐌳𐍂𐌴",
- "tooltip-t-recentchangeslinked": "𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌽𐌿 𐍅𐌹𐌸𐍂𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍄𐌴𐌹 𐍃𐌹𐌽𐌳 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐍃 𐌿𐍃 𐌸𐌰𐌼𐌼𐌰 𐍃𐌴𐌹𐌳𐍉𐌽",
- "tooltip-feed-atom": "𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽",
- "tooltip-t-upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
- "tooltip-t-specialpages": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌸𐌹𐌶𐍉 𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐌽𐍉",
- "tooltip-t-print": "𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐌿𐍃𐌲𐌰𐌱𐍉𐍃 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
- "tooltip-t-permalink": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰 𐍅𐌹𐌸𐍂𐌰 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
- "tooltip-ca-nstab-main": "𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐌸𐌰𐍄𐌰 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
- "tooltip-ca-nstab-user": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
- "tooltip-ca-nstab-image": "𐍃𐌰𐌹𐍈𐌰𐌽 𐌸𐍉 𐍆𐌴𐌹𐌻𐌰𐍃𐌴𐌹𐌳𐍉𐌽",
- "tooltip-ca-nstab-template": "𐍃𐌰𐌹𐍈𐌹𐍃 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽",
- "tooltip-ca-nstab-category": "𐍃𐌰𐌹𐍈𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽 𐌷𐌰𐌽𐍃𐍉",
- "tooltip-save": "𐍃𐌺𐍂𐌴𐌹𐌱𐌰𐌹𐌽 𐌸𐌴𐌹𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
- "tooltip-preview": "𐍆𐌰𐌿𐍂𐍃𐌰𐍈𐌹𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌴𐌹𐌽𐌰, 𐌱𐌹𐌳𐌾𐌰 𐌸𐌿𐌺 𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌸𐌰𐍄𐌰 𐍆𐌰𐌿𐍂𐌰 𐌼𐌴𐌻𐌾𐌹𐍃!",
- "tooltip-diff": "𐍃𐌰𐌹𐍈𐌹𐌸 𐌸𐌰𐌽𐌶𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌰𐍄𐌴𐌹 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌹𐌽𐍃",
- "tooltip-rollback": "\"𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽\" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐍅𐌹𐍃𐌰𐌽 𐍃𐍉 𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌲𐌹𐌱𐌰𐌾𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌹𐌽𐍃 𐌺𐌻𐌹𐌺",
- "tooltip-undo": "\"𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽\" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌲𐌴𐌹𐌽𐍃 𐌾𐌰𐌷 𐌿𐍃𐌻𐌿𐌺𐍉𐌸 𐌼𐌰𐌹𐌳𐌾𐌰𐍆𐍉𐍂𐌼𐍉𐌽 𐍃𐍅𐌴 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐌷𐌹𐍅𐌾𐌰. 𐌸𐌰𐍄𐌰 𐌻𐌴𐍄 𐌰𐌽𐌰𐌿𐌺𐌰𐌽𐌰𐌽 𐍃𐌰𐌿𐌸𐌰 𐌹𐌽 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰.",
- "tooltip-summary": "𐌰𐍄𐌲𐌰𐌲𐌲𐌹𐍃 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰 𐌼𐌰𐌿𐍂𐌲𐌾𐌰",
- "previousdiff": "← 𐌰𐍆𐍄𐌿𐌼𐌰 𐌰𐌹𐍂𐌹𐍃",
- "nextdiff": "Iftuma áiris →",
- "file-info-size": "$1 × $2 𐍀𐌹𐌺𐍃𐌴𐌻𐌰, 𐍆𐌴𐌹𐌻𐍅𐌰𐌷𐍃𐍄𐌿𐍃: $3, 𐌼𐌹𐌼𐌴 𐌺𐌿𐌽𐌹: $4",
- "show-big-image": "Fullis wahstus",
- "ilsubmit": "Sokeiþ",
- "metadata": "𐌿𐍆𐌰𐍂𐌳𐌰𐍄𐌰",
- "watchlistall2": "allis",
- "namespacesall": "𐌰𐌻𐌻𐌹𐍃",
- "monthsall": "𐌰𐌻𐌻𐌹𐍃",
- "imgmultigo": "Afgaggan!",
- "table_pager_limit_submit": "Affgaggan",
- "version-other": "Anþar",
- "specialpages": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃",
- "tag-filter": "[[Special:Tags|𐍄𐌰𐌹𐌺𐌽𐍉𐍃]] 𐍆𐌹𐌻𐌷𐌰",
- "rightsnone": "(ni áinshun)"
+ "@metadata": {
+ "authors": [
+ "Bleakgh",
+ "Jocke Pirat",
+ "Michawiki",
+ "Node ue",
+ "Sajasazi (on got.wikipedia.org)",
+ "Zylbath"
+ ]
+ },
+ "underline-always": "Sinteino",
+ "underline-never": "Niu",
+ "sunday": "Sunnonsdags",
+ "monday": "Meninsdags",
+ "tuesday": "Tiwisdags",
+ "wednesday": "Midiwiko",
+ "thursday": "Þeiƕonsdags",
+ "friday": "Fraujonsdags",
+ "saturday": "𐌸𐍅𐌰𐌷𐌻𐌹𐍃𐌳𐌰𐌲𐍃",
+ "sun": "𐍃𐌿𐌽",
+ "mon": "𐌼𐌴𐌽",
+ "tue": "𐌰𐍂𐌴",
+ "wed": "𐍅𐍉𐌳",
+ "thu": "𐍀𐌰𐌹",
+ "fri": "𐍆𐍂𐌹",
+ "sat": "𐍃𐌰𐌼",
+ "january": "𐌰𐍆𐍄𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+ "february": "𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐍃",
+ "march": "𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐍃",
+ "april": "𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐍃",
+ "may_long": "𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐍃",
+ "june": "𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐍃",
+ "july": "𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐍃",
+ "august": "𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
+ "september": "𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
+ "october": "𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐍃",
+ "november": "𐍆𐍂𐌿𐌼𐌰 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+ "december": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+ "january-gen": "𐌰𐍆𐍄𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+ "february-gen": "𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+ "march-gen": "𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+ "april-gen": "𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+ "may-gen": "𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+ "june-gen": "𐍅𐌰𐍂𐌼𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+ "july-gen": "𐌷𐌰𐍅𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+ "august-gen": "𐌰𐍃𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+ "september-gen": "𐌰𐌺𐍂𐌰𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+ "october-gen": "𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃",
+ "november-gen": "𐍆𐍂𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+ "december-gen": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃",
+ "jan": "𐌰𐍆𐍄",
+ "feb": "𐍆𐌰𐌽",
+ "mar": "𐌺𐌰𐌻",
+ "apr": "𐌲𐍂𐌰",
+ "may": "𐌱𐌻𐍉",
+ "jun": "𐍅𐌰𐍂",
+ "jul": "𐌷𐌰𐍅",
+ "aug": "𐌰𐍃𐌰",
+ "sep": "𐌰𐌺𐍂",
+ "oct": "𐍅𐌴𐌹",
+ "nov": "𐍆𐍂𐌿",
+ "dec": "𐌾𐌹𐌿",
+ "pagecategories": "{{PLURAL:$1|𐌷𐌰𐌽𐍃𐌰|𐌷𐌰𐌽𐍃𐍉𐍃}}",
+ "category_header": "𐍃𐌴𐌹𐌳𐍉𐍃 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
+ "subcategories": "Dalaþkunjos",
+ "category-media-header": "𐌼𐌴𐌳𐌾𐌰 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
+ "hidden-categories": "{{PLURAL:$1|𐍆𐌿𐌻𐌲𐌹𐌽𐍃 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌹|𐍆𐌿𐌻𐌲𐌹𐌽𐌰𐌹 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌾𐍉𐍃}}",
+ "about": "𐌿𐍆𐌰𐍂",
+ "article": "𐍃𐌰𐌸𐍃𐍃𐌴𐌹𐌳𐍉",
+ "newwindow": "(𐌰𐌽𐌳𐌷𐌿𐌻𐌾𐌹𐌸 𐌹𐌽𐌽 𐌽𐌹𐌿𐌾𐌰 𐌰𐌿𐌲𐌰𐌳𐌰𐌿𐍂𐍉)",
+ "cancel": "𐌷𐌰𐌻𐍄𐍃",
+ "moredotdotdot": "𐌼𐌰𐌹𐍃...",
+ "mypage": "𐌼𐌴𐌹𐌽 𐍃𐌴𐌹𐌳𐍉",
+ "mytalk": "𐌼𐌴𐌹𐌽𐌰 𐌼𐌰𐌸𐌻𐌴𐌹",
+ "navigation": "𐍅𐌹𐌲𐌰𐍄𐌰𐌿𐌷𐍄𐍃",
+ "and": "𐌾𐌰𐌷",
+ "qbfind": "𐍃𐍉𐌺𐌴𐌹𐌸",
+ "qbedit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+ "qbmyoptions": "𐌼𐌴𐌹𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+ "actions": "𐍅𐌰𐌿𐍂𐍃𐍄𐍅𐌴𐌹𐌽𐍃",
+ "namespaces": "𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐌸𐌴𐌹𐍃",
+ "variants": "𐌼𐌹𐍃𐍃𐌰𐌻𐌴𐌹𐌽𐍃",
+ "errorpagetitle": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰 𐌳𐍅𐌰𐌻𐌹𐍃",
+ "returnto": "𐌲𐌰𐍅𐌰𐌽𐌳𐌾𐌰𐌽 𐌰𐍄 $1.",
+ "tagline": "𐍆𐍂𐌰𐌼 {{SITENAME}}",
+ "help": "𐌷𐌹𐌻𐍀𐌰",
+ "search": "𐍃𐍉𐌺𐌾𐌰𐌽",
+ "searchbutton": "𐍃𐍉𐌺𐌾𐌰𐌽",
+ "go": "𐌲𐌰𐌲𐌲𐌰",
+ "searcharticle": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽",
+ "history": "𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉",
+ "history_short": "𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+ "printableversion": "𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐍃𐌴𐌹𐌳𐍉",
+ "permalink": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰",
+ "view": "Saíhvan",
+ "edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+ "create": "𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
+ "editthispage": "𐌼𐌰𐌹𐌳𐌾𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
+ "create-this-page": "Skapja þo seido",
+ "delete": "𐍄𐌰𐌹𐍂𐌰𐌽",
+ "deletethispage": "𐍄𐌰𐌹𐍂𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
+ "protect": "𐌱𐌰𐌹𐍂𐌲𐌰𐌽",
+ "protect_change": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+ "protectthispage": "Baírga þo siedo",
+ "unprotect": "𐌽𐌹𐌱𐌰𐌹𐍂𐌲𐌰",
+ "unprotectthispage": "Nibaírga þo siedo",
+ "newpage": "𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
+ "talkpage": "𐌼𐌰𐌸𐌻𐌴𐌹𐍃𐌴𐌹𐌳𐍉",
+ "talkpagelinktext": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰",
+ "specialpage": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃",
+ "personaltools": "𐍅𐌰𐌹𐍂𐌻𐌴𐌹𐌺𐍃 𐌱𐍂𐌿𐌺𐍅𐌰𐌹𐌷𐍄𐍃",
+ "talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰",
+ "views": "𐌷𐌹𐍅𐌾𐍉𐍃",
+ "toolbox": "𐍄𐌰𐌿𐌹 𐌰𐍂𐌺𐌰",
+ "otherlanguages": "𐌰𐌽𐌸𐌰𐍂 𐍂𐌰𐌶𐌳𐍉𐍃",
+ "redirectedfrom": "(𐌽𐌰𐌿𐌸𐌾𐌰𐌽 𐍆𐍂𐌰𐌼𐌹𐍃 $1)",
+ "redirectpagesub": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
+ "lastmodifiedat": "𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌼𐌰𐌹𐌳𐌾𐌹𐌸𐍃 ($2) ($1)",
+ "jumpto": "𐌲𐌰𐌲𐌲𐌰𐌽 𐌰𐍄:",
+ "jumptonavigation": "𐍃𐌴𐌹𐌳𐍉𐌲𐌰𐍅𐌹𐍃𐍃",
+ "jumptosearch": "𐍃𐍉𐌺𐌴𐌹𐌸",
+ "aboutsite": "𐍆𐍂𐌰𐌼 {{SITENAME}}",
+ "aboutpage": "Project:𐌿𐍆𐌰𐍂",
+ "copyrightpage": "{{ns:project}}:𐌼𐌰𐌽𐌻𐌴𐌹𐌺𐌰𐍅𐌹𐍄𐍉𐌸𐌰",
+ "currentevents": "𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃",
+ "currentevents-url": "Project:𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃",
+ "disclaimers": "𐍅𐌰𐌳𐌾𐍉𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
+ "disclaimerpage": "Project:𐍅𐌰𐌳𐌾𐌹𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
+ "edithelp": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌷𐌹𐌻𐍀𐌰",
+ "mainpage": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+ "mainpage-description": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+ "portal": "𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹",
+ "portal-url": "Project:𐌱𐌰𐌿𐍂𐌲𐌹𐍃 𐌲𐌰𐍅𐌹",
+ "privacy": "𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌿𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
+ "privacypage": "Project:𐍃𐌿𐌽𐌳𐍂𐌰𐍅𐌴𐌹𐌽𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃",
+ "retrievedfrom": "𐌲𐌰𐌽𐌰𐌼 𐍆𐍂𐌰𐌼 \"$1\"",
+ "youhavenewmessages": "𐌸𐌿 𐌷𐌰𐌱𐌹𐍃 $1 ($2).",
+ "editsection": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+ "editold": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+ "editlink": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+ "viewsourcelink": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
+ "editsectionhint": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌳𐌰𐌹𐌻: $1",
+ "toc": "𐌹𐌽𐌽𐌰𐌽𐌰",
+ "showtoc": "𐌰𐌿𐌲𐌾𐌰",
+ "hidetoc": "𐍆𐌹𐌻𐌷𐌰𐌽",
+ "site-rss-feed": "$1 RSS Miþnatifodjan",
+ "site-atom-feed": "$1 𐌰𐍄𐍉𐌼 𐌼𐌹𐌸𐌽𐌰𐍄𐌹𐍆𐍉𐌳𐌾𐌰𐌽",
+ "page-atom-feed": "\"$1\" 𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉",
+ "red-link-title": "$1 (𐍃𐌴𐌹𐌳𐍉 𐍃𐌹𐌽𐌳 𐌽𐌹𐍃𐍄)",
+ "nstab-main": "𐍃𐌴𐌹𐌳𐍉",
+ "nstab-user": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
+ "nstab-special": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉",
+ "nstab-project": "𐍂𐌴𐌹𐌺𐌹𐍃𐌴𐌹𐌳𐍉",
+ "nstab-image": "𐍆𐌴𐌹𐌻𐌰",
+ "nstab-template": "𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃",
+ "nstab-help": "𐌷𐌹𐌻𐍀𐌰",
+ "nstab-category": "𐌷𐌰𐌽𐍃𐌰",
+ "missing-article": "𐍃𐌰 𐌳𐌰𐍄𐌰𐌱𐌿𐍃 𐌽𐌹 𐌲𐌰𐌽𐌰𐌼 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽 𐌴𐌹 𐌹𐍄𐌰 𐍃𐌺𐌰𐌻 𐌱𐌹𐌲𐌹𐍄𐌰𐌽: \"$1\" $2\n\n(The data base did not find the text of a page that it should have found, named \"$1\" $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.)",
+ "viewsource": "𐍃𐌰𐌹𐍈𐌹𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
+ "yourname": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐌽𐌰𐌼𐍉:",
+ "yourpassword": "𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐍃 𐍅𐌰𐌿𐍂𐌳𐌰:",
+ "login": "Atgaggan",
+ "nav-login-createaccount": "𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽 / 𐌲𐌰𐌻𐌰𐌽𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
+ "userlogin": "Atgaggan / gaskapjan niutandis",
+ "logout": "𐌻𐌴𐌹𐌸𐌰𐌽",
+ "userlogout": "𐌻𐌴𐌹𐌸𐌰𐌽",
+ "nologinlink": "Gaskapjan þein niutandis",
+ "createaccount": "𐌲𐌰𐌻𐌰𐌲𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
+ "gotaccount": "Habiþ þu niutandis? '''$1'''",
+ "gotaccountlink": "Atgaggan",
+ "loginlanguagelabel": "Razda: $1",
+ "bold_sample": "𐌰𐌱𐍂𐍃 𐌱𐍉𐌺𐌰",
+ "bold_tip": "𐌰𐌱𐍂 𐍅𐌰𐌿𐍂𐌳𐌰",
+ "italic_sample": "𐍅𐍂𐌰𐌹𐌵𐍃 𐍅𐌰𐌿𐍂𐌳𐌰",
+ "italic_tip": "𐌳𐍂𐌹𐌿𐍃𐍉 𐌱𐍉𐌺𐌰",
+ "link_sample": "𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉",
+ "link_tip": "𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌱𐌰𐌽𐌳𐌹 𐌹𐌽𐌽𐌰𐌽𐌰",
+ "extlink_sample": "http://www.example.com 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐌳𐌰𐌽𐌳𐌹 𐌽𐌰𐌼𐍉",
+ "extlink_tip": "Uta táikjabandi (maúdjan http://)",
+ "headline_sample": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍅𐌰𐌿𐍂𐌳𐌰",
+ "headline_tip": "𐌷𐌰𐌿𐌷𐍃 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰 •𐌱•",
+ "nowiki_sample": "𐍃𐌰𐍄𐌾𐌴𐌹 𐌿𐌽𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃 𐍄𐌴𐌺𐍃𐍄 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌼 𐌷𐌹𐍄",
+ "nowiki_tip": "𐌿𐌽𐍅𐌹𐍄𐌾𐌹𐍃 𐍅𐌹𐌺𐌹𐍃𐌽𐌴𐌹𐌸𐌾𐌰𐌽𐌳𐍃",
+ "image_tip": "𐌹𐌽𐌽𐌱𐍉𐌳𐌰𐌽𐍃 𐍆𐌴𐌹𐌻𐌰",
+ "media_tip": "𐍄𐌰𐌹𐌺𐌾𐌰𐌱𐌰𐌽𐌳𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐌹𐍃",
+ "sig_tip": "𐌿𐌽𐌳𐌰𐍂𐌼𐌴𐌻 𐌸𐌴𐌹𐌽𐌰 𐌼𐌹𐌸 𐍃𐍄𐌿𐌽𐌳𐌰𐌼𐌴𐌻𐌰",
+ "hr_tip": "𐍂𐌰𐌹𐌷𐍄𐍃𐌱𐌰𐌿𐍂𐌳 (𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌼𐌹𐌸 𐌽𐌹𐌿𐍆𐌰𐍂𐌿𐍃𐍃𐌿𐍃)",
+ "summary": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐍃𐍀𐌹𐌻𐌻𐍉𐌽:",
+ "subject": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌱𐍉𐌺𐌰:",
+ "minoredit": "𐍃𐌰 𐌹𐍃𐍄 𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+ "watchthis": "𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉",
+ "savearticle": "𐌼𐌴𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
+ "preview": "𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐍃𐌴𐌹𐌳𐍉",
+ "showpreview": "𐍅𐌹𐍄𐌰𐌽 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰",
+ "showdiff": "𐍅𐌹𐍄𐌰𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+ "newarticle": "(Niu)",
+ "updated": "(Nuwisan)",
+ "previewnote": "'''𐍃𐌰𐌷 𐌹𐍃𐍄 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰. 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌲𐌰𐌼𐌴𐌻𐌾𐌹𐌸 𐌽𐌹 𐌰𐍆 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐍃!'''",
+ "editing": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1",
+ "editingsection": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍆𐌴𐍂𐌰)",
+ "editingcomment": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍂𐍉𐌳𐌾𐌰𐍆𐌴𐍂𐌰)",
+ "yourdiff": "Missalieks",
+ "template-protected": "(𐌲𐌰𐌱𐌰𐌹𐍂𐌲𐌾𐌰𐌽)",
+ "template-semiprotected": "(halb-gabaírgjan)",
+ "post-expand-template-inclusion-warning": "'''𐌷𐍅𐍉𐍄𐌾𐌰𐌽𐌳𐍃:''' 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃. 𐍃𐌿𐌼𐍃 𐍆𐌰𐌿𐍂𐌴𐌼𐌴𐌻𐌴𐌹𐌽𐍉𐍃 𐌽𐌹 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌸𐌰𐍂",
+ "post-expand-template-inclusion-category": "𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍂 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃 𐍃𐌹𐌽𐌳 𐌿𐍆𐌰𐍂𐌼𐌹𐌺𐌹𐌻𐍃",
+ "currentrev": "𐌽𐌿 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+ "currentrev-asof": "𐌰𐍆𐍄𐌿𐌼𐍃𐍄𐍃 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 $1",
+ "revisionasof": "𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐍆𐍂𐌰𐌼 $1",
+ "revision-info": "Máideins fram $1 bi $2",
+ "previousrevision": "←𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+ "nextrevision": "Iftuma máideins→",
+ "currentrevisionlink": "𐌽𐌿𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+ "cur": "𐌽𐌿",
+ "next": "𐌹𐍆𐍄𐌿𐌼𐌰",
+ "last": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃",
+ "page_first": "frumists",
+ "page_last": "𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃",
+ "histfirst": "𐍆𐌰𐌿𐍂𐌸𐌹𐍃",
+ "histlast": "𐍃𐍀𐌴𐌳𐌿𐌼𐌹𐍃𐍄𐍃",
+ "history-feed-item-nocomment": "$1 at $2",
+ "revdel-restore": "𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌰𐌽𐌰𐍃𐌹𐌿𐌽𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍃",
+ "revertmerge": "𐌿𐌽𐌲𐌰𐍄𐌹𐌻𐍉𐍃",
+ "history-title": "𐌰𐍂𐌹𐍃𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌰𐍆 \"$1\"",
+ "lineno": "𐌱𐍉𐌺𐌰𐍂𐌹𐌲𐌹𐌻𐍉 $1:",
+ "editundo": "𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
+ "searchresults": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃",
+ "searchresults-title": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃 𐍆𐌰𐌿𐍂 \"$1\"",
+ "prevn": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}",
+ "nextn": "𐌹𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}",
+ "prevn-title": "𐍆𐌰𐌹𐍂𐌽𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}",
+ "nextn-title": "𐌰𐍆𐍄𐌿𐌼𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}",
+ "shown-title": "𐌰𐌿𐌾𐌰𐌽𐌳 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}} 𐌸𐌰𐌹𐍂𐌷 𐍃𐌴𐌹𐌳𐍉",
+ "viewprevnext": "𐍃𐌹𐌿𐌽𐌴𐌹𐍃 ($1 {{int:pipe-separator}} $2) ($3)",
+ "searchmenu-new": "'''𐍃𐌺𐌰𐍀𐌾𐌹𐍃 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉𐌽 \"[[:$1]]\" 𐌸𐌹𐌶𐍉𐍃 𐍅𐌹𐌺𐌾𐍉𐍃!'''",
+ "searchprofile-articles": "𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+ "searchprofile-images": "𐌼𐌰𐌽𐌰𐌲𐍃𐌼𐌴𐌳𐌹𐌰",
+ "searchprofile-everything": "𐌰𐌻𐌻",
+ "searchprofile-advanced": "𐍆𐌰𐌹𐍂𐍂𐌰𐍆𐍂𐌰𐌼𐌰",
+ "searchprofile-articles-tooltip": "𐍃𐍉𐌺 𐌹𐌽𐌽𐌰 $1",
+ "searchprofile-images-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
+ "searchprofile-everything-tooltip": "𐍃𐍉𐌺𐌾𐌹𐍃 𐌰𐌻𐌻 𐌲𐌰𐌷𐌰𐌱𐌾𐍉𐍃 (𐌸𐌹𐌶𐌴𐌴𐌹 𐌹𐍃𐍄 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌹𐍃)",
+ "searchprofile-advanced-tooltip": "𐍃𐌺𐍉𐌾𐌹𐍃 𐌹𐌽𐌽𐌰 𐍃𐌹𐌻𐌱𐌰𐍃𐌺𐌰𐍀𐌹𐌸𐍃 𐌽𐌰𐌼𐌰𐌽𐍃𐍄𐌰𐌸",
+ "search-result-size": "$1 ({{PLURAL:$2|•𐌰• 𐍅𐌰𐌿𐍂𐌳|•$2• 𐍅𐌰𐌿𐍂𐌳𐌰}})",
+ "search-redirect": "(𐌰𐍆𐍄𐍂𐌰𐍅𐌴𐌹𐍄𐍃 𐍆𐍂𐌰𐌼 𐌸𐌰𐌼𐌼𐌰 $1)",
+ "search-section": "(𐍆𐌴𐍂𐌰 $1)",
+ "search-suggest": "𐍄𐌰𐌹𐌺𐌽𐌹𐌳𐌰 𐌸𐌿: $1",
+ "searchall": "𐌰𐌻𐌻𐍃",
+ "search-nonefound": "𐌽𐌹 𐌰𐌹𐌽𐌷𐌿𐌽 𐌲𐌰𐌲𐌹𐌱𐌾𐍉 𐍆𐌿𐌻𐌻𐌾𐌹𐌸 𐍃𐍉𐌺𐌴𐌹𐌽",
+ "powersearch-legend": "𐍃𐍉𐌺𐌴𐌹𐌸",
+ "preferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
+ "mypreferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰",
+ "prefs-skin": "Seidofill",
+ "skin-preview": "Faúrsaiƕa",
+ "saveprefs": "Melja",
+ "searchresultshead": "Sokeiþ",
+ "grouppage-sysop": "{{ns:project}}:𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃",
+ "rightslog": "Niutandis stutjanlog",
+ "nchanges": "$1 {{PLURAL:$1|máidein|máideins}}",
+ "recentchanges": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
+ "rcshowhideminor": "$1 lietila máideins",
+ "rcshowhidebots": "$1 bota",
+ "rcshowhideliu": "$1 niutandis",
+ "rcshowhideanons": "$1 gasteis",
+ "rcshowhidemine": "$1 mein máideins",
+ "diff": "𐌻𐌴𐌹𐌺𐍃",
+ "hist": "𐍆𐍂𐌼𐌵",
+ "hide": "𐍆𐌹𐌻𐌷𐌰𐌽",
+ "show": "𐌷𐌿𐌻𐌾𐌰𐌽",
+ "minoreditletter": "l",
+ "newpageletter": "N",
+ "boteditletter": "b",
+ "recentchangeslinked": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃",
+ "recentchangeslinked-feed": "Máideinlieks",
+ "recentchangeslinked-toolbox": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌻𐌹𐌴𐌺𐍃",
+ "recentchangeslinked-summary": "𐍃𐍉 𐌹𐍃𐍄 𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃 𐍃𐌺𐍉𐍀 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 (𐌰𐌹𐌸𐌸𐌰𐌿 𐌻𐌹𐌸𐌰𐌿𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹𐌶𐍉𐍃 𐌷𐌰𐌽𐍃𐍉𐍃). 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 [[Special:Watchlist|𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐍉𐍃 𐌸𐌴𐌹𐌽𐍉𐍃]] 𐍃𐌹𐌽𐌳 '''𐌳𐌹𐌲𐍂𐍃𐍄𐌰𐍆𐍃'''.",
+ "upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
+ "uploadbtn": "Ushlaþaiþ Feilans",
+ "uploadlogpage": "Log af Ushlaþan",
+ "watchthisupload": "Witan so seido",
+ "imgfile": "Feilans",
+ "listfiles": "Feilans tala",
+ "file-anchor-link": "𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
+ "filehist": "𐍆𐌴𐌹𐌻𐌰𐌽𐍃 𐌰𐌹𐍂𐌹𐍃",
+ "filehist-help": "𐌺𐌻𐌹𐌺𐍉𐍃 𐌰𐌽𐌰 𐌳𐌰𐍄𐌰𐌹/𐍈𐌴𐌹𐌻𐌰𐌹 𐍃𐌰𐌹𐍈𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽 𐍃𐍅𐌴 𐌰𐍄𐌰𐌿𐌲𐌾𐌹𐌳𐌰 𐍃𐌹𐌺 𐌸𐌰𐌽.",
+ "filehist-current": "𐌽𐌿",
+ "filehist-datetime": "𐍈𐌴𐌹𐌻𐌰",
+ "filehist-thumb": "𐍆𐍉𐍂𐍃𐌾𐌰𐌿",
+ "filehist-thumbtext": "𐍆𐍉𐍂𐍃𐌾𐌰𐌿 𐍆𐌰𐌿𐍂 𐌿𐍃𐌲𐌰𐌱𐌰 𐍆𐍂𐌰𐌼 $1",
+ "filehist-user": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
+ "filehist-dimensions": "𐍅𐌰𐌷𐍃𐍄𐌿𐍃",
+ "filehist-filesize": "Feilans wahstus",
+ "filehist-comment": "𐌻𐌴𐌹𐍄𐌻𐌰𐍃𐍀𐌹𐌻𐌻𐍉𐌽",
+ "imagelinks": "𐍆𐌴𐌹𐌻𐌹𐌽𐍃 𐌱𐍂𐌿𐌺𐌹𐍃",
+ "linkstoimage": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌻𐌴𐌹𐌽𐌺𐍉𐌸|𐌸𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳}} 𐌸𐌹𐌶𐍉𐌶𐌿𐌷 𐍆𐌴𐌹𐌻𐍉𐍃",
+ "sharedupload-desc-here": "𐍃𐌰 𐍆𐌴𐌹𐌻𐌰 𐌹𐍃𐍄 𐍆𐍂𐌰𐌼 $1 𐌾𐌰𐌷 𐌼𐌰𐌲 𐍅𐌹𐍃𐌰𐌽 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌻𐌾𐌰𐌹𐌼 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐍉𐌼.\n𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌳𐌰𐌹 𐍆𐌴𐌹𐌻𐌰𐌽𐍃𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐌹𐍃 𐌸𐌰𐍂 𐌹𐍃𐍄 𐌳𐌰𐌻𐌰𐌸𐌰 𐌿𐍃𐌲𐌹𐌱𐌰𐌽𐍃.",
+ "filedelete-submit": "Taíran",
+ "mimesearch": "MIME sokeiþ",
+ "listredirects": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃",
+ "randompage": "𐍃𐌻𐌿𐌼𐍀𐌼𐌰𐍃𐍃𐌹𐌲 𐍃𐌴𐌹𐌳𐍉",
+ "statistics": "𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐍄𐌹𐍃𐍄𐌹𐌺",
+ "brokenredirects-edit": "(𐌼𐌰𐌹𐌳𐌾𐌰𐌽)",
+ "brokenredirects-delete": "(𐍄𐌰𐌹𐍂𐌰𐌽)",
+ "nbytes": "$1 {{PLURAL:$1|𐌱𐌰𐌹𐍄|𐌱𐌰𐌹𐍄𐌰}}",
+ "ncategories": "$1 {{PLURAL:$1|𐌺𐌿𐌽𐌾𐌰|𐌺𐌿𐌽𐌾𐍉𐍃}}",
+ "nlinks": "$1 {{PLURAL:$1|táikjanbandi|táikjanbandja}}",
+ "nmembers": "$1 {{PLURAL:$1|niutand|niutanda}}",
+ "wantedpages": "Gaírnedum seidam",
+ "shortpages": "𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+ "longpages": "𐌻𐌰𐌲𐌲𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+ "listusers": "𐍂𐌴𐌲𐌹𐍃𐍄𐍂𐌴𐍂𐌰𐌳𐌴 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃",
+ "newpages": "𐌽𐌹𐌿𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+ "move": "𐌽𐌰𐌼𐌾𐌰𐌽 𐌰𐍆𐍄𐍂𐌰",
+ "movethispage": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐌰 𐍃𐌴𐌹𐌳𐍉",
+ "specialloguserlabel": "Niutand:",
+ "speciallogtitlelabel": "Namo:",
+ "log": "𐌻𐍉𐌲𐌱𐍉𐌺𐍉𐍃",
+ "all-logs-page": "𐌰𐌻𐌻𐌰 𐌻𐍉𐌲𐍉𐍃",
+ "allpages": "𐌰𐌻𐌻𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐍃",
+ "nextpage": "𐌹𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)",
+ "prevpage": "𐌰𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)",
+ "allarticles": "𐌰𐌻𐌾𐌰 𐍃𐌴𐌹𐌳𐍉𐍃",
+ "allpagessubmit": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽",
+ "categories": "𐌺𐌿𐌽𐌾𐍉𐍃",
+ "linksearch-ns": "𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:",
+ "emailuser": "𐍃𐌰𐌽𐌳𐌾𐌰𐌽 𐌸𐍉 𐌽𐌹𐌿𐍄𐌰𐌽𐌳 𐌱𐍉𐌺𐍉𐌼",
+ "watchlist": "𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰",
+ "mywatchlist": "𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰",
+ "watch": "𐍅𐌰𐍂𐌰𐌽",
+ "watchthispage": "𐍅𐌰𐍂𐌰𐌽 𐍃𐌴𐌹𐌳𐍉",
+ "unwatch": "𐌽𐌹𐍅𐌰𐍂𐌰𐌽",
+ "watchlist-details": "{{PLURAL:$1|$1 seido|$1 seidona}} witáiþs inu maþleiseidam.",
+ "watching": "Wita...",
+ "unwatching": "Niwita...",
+ "created": "𐌲𐌰𐍃𐌺𐌰𐍀𐌾𐌰𐌽",
+ "deletepage": "𐍄𐌰𐌹𐍂𐌰 𐍃𐌴𐌹𐌳𐍉",
+ "delete-legend": "𐍄𐌰𐌹𐍂𐌰𐌽",
+ "actioncomplete": "𐍅𐌰𐍃𐌿𐌷 𐌹𐍄𐌰 𐌲𐌰𐌿𐍃𐍄𐌹𐌿𐌷𐌰𐌽",
+ "dellogpage": "𐍄𐌰𐌹𐍂𐌰 𐌰𐌹𐍂𐍅𐌱𐍉𐌺𐌰",
+ "deleteotherreason": "𐌰𐌽𐌸𐌰𐍂/𐌼𐌰𐌹𐍃 𐌼𐌹𐍄𐍉𐌽𐍃:",
+ "deletereasonotherlist": "𐌰𐌽𐌸𐌰𐍂 𐌼𐌹𐍄𐍉𐌽𐍃",
+ "rollbacklink": "𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽",
+ "protectlogpage": "Log af Baírgjan",
+ "prot_1movedto2": "[[$1]] skiubiþ du [[$2]]",
+ "protect-level-sysop": "𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃 𐌰𐌹𐌽𐌰𐌷𐌰",
+ "protect-expiring": "bláuþiþ $1 (UTC)",
+ "restriction-type": "Freihals:",
+ "restriction-edit": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽",
+ "restriction-move": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽",
+ "undeletebtn": "𐌰𐍆𐍄𐍂𐌰 𐌲𐌰𐌱𐍉𐍄𐌾𐌰𐌽",
+ "undeletelink": "𐍃𐌰𐌹𐍈𐌰𐌽/𐌰𐍆𐍄𐍂𐌰𐌲𐌰𐍃𐌰𐍄𐌾𐌰𐌽",
+ "undeleteviewlink": "𐍃𐌰𐌹𐍈𐌹𐍃",
+ "undelete-search-submit": "Sokeiþ",
+ "namespace": "𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:",
+ "invert": "Afwandjan kustus",
+ "blanknamespace": "(𐍆𐍂𐌿𐌼𐌹𐍃𐍄𐍃)",
+ "contributions": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃",
+ "mycontris": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌰𐌹𐍅𐌻𐌰𐌲𐌹𐍉𐍃",
+ "contribsub2": "𐍆𐌰𐌿𐍂 $1 ($2)",
+ "uctop": "(háubiþ)",
+ "month": "𐍆𐍂𐌰𐌼 𐌼𐌴𐌽𐍉𐌸𐍃 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):",
+ "year": "𐍆𐍂𐌰𐌼 𐌾𐌴𐍂𐌰 (𐌾𐌰𐌷 𐌰𐍆𐍄𐌿𐌼𐌰):",
+ "sp-contributions-newbies-sub": "Faúr niujis niutandis",
+ "sp-contributions-blocklog": "Logboka af afdraúsjan",
+ "sp-contributions-talk": "Maþleiseido",
+ "whatlinkshere": "𐍈𐌰𐍂𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌷𐌻𐌰𐌲𐌺𐌾𐌰𐌽𐌳 𐌷𐌹𐌳𐍂𐌴",
+ "whatlinkshere-title": "Seidos hwarjis du $1 táiknjan",
+ "isredirect": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
+ "istemplate": "ináukan",
+ "whatlinkshere-prev": "{{PLURAL:$1|aftuma|aftumans $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|iftuma|iftumans $1}}",
+ "whatlinkshere-links": "← táikajanbandja",
+ "blockip": "𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃",
+ "ipbreason": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰:",
+ "ipboptions": "𐌱 𐌰𐍅𐍂𐌰:2 hours, 𐌰 𐌳𐌰𐌲𐍃:1 day, 𐌲 𐌳𐌰𐌲𐍉𐍃:3 days, 𐌰 𐍅𐌹𐌺𐍉:1 week, 𐌱 𐍅𐌹𐌺𐍉𐌽𐍃:2 weeks, 𐌰 𐌼𐌴𐌽𐍉𐌸𐍃:1 month, 𐌲 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:3 months, 𐌵 𐌼𐌴𐌽𐍉𐌸𐍉𐍃:6 months, 𐌰 𐌾𐌴𐍂:1 year, 𐌹𐌽𐌿𐍄𐍂𐌹𐌲𐌲𐌴𐌽𐌳𐌴𐌹𐍃:infinite",
+ "ipblocklist-submit": "Sokeiþ",
+ "infiniteblock": "ajukduþs",
+ "blocklink": "𐍅𐌰𐍂𐌲𐌾𐌰𐌽",
+ "unblocklink": "𐍅𐌰𐌽𐌳𐌾𐌰𐌽",
+ "change-blocklink": "𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐍅𐌰𐌿𐍂𐌾𐌰𐍅𐌰𐌳𐌳𐌾𐌿𐍃",
+ "contribslink": "𐌲𐌹𐌱𐍉𐍃",
+ "blocklogpage": "𐌻𐍉𐌲𐌱𐍉𐌺𐌰 𐌰𐍆 𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽",
+ "blocklogentry": "𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌹𐌸 [[$1]] 𐍆𐌰𐌿𐍂 $2 $3",
+ "movearticle": "𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉:",
+ "newtitle": "𐌳𐌿 𐌽𐌹𐌿𐌾𐌹𐍃 𐌽𐌰𐌼𐍉𐍃:",
+ "move-watch": "𐍅𐌹𐍄𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
+ "movepagebtn": "𐍃𐌺𐌹𐌿𐌱𐌰 𐍃𐌴𐌹𐌳𐍉",
+ "movelogpage": "Log af skiubans",
+ "movereason": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰:",
+ "revertmove": "𐍂𐌰𐌹𐌳𐌾𐌰𐌽",
+ "export": "𐌿𐍄𐌼𐌹𐌸𐍃𐌰𐍄𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+ "thumbnail-more": "𐌱𐌹𐌰𐌿𐌺𐌰𐌽",
+ "tooltip-pt-userpage": "𐌸𐌴𐌹𐌽𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-pt-mytalk": "𐌸𐌴𐌹𐌽𐌰 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-pt-preferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃",
+ "tooltip-pt-watchlist": "𐌻𐌴𐌹𐍃𐍄𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌴𐌹 𐌸𐌿 𐌰𐍄𐍅𐌹𐍄𐌰𐌹𐍃 𐍆𐌰𐌿𐍂 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌽𐍃",
+ "tooltip-pt-mycontris": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐌸𐌴𐌹𐌽 𐌲𐌹𐌱𐍉𐌽𐍃",
+ "tooltip-pt-login": "𐌸𐌿 𐌹𐍃 𐌲𐌰𐍈𐌰𐍄𐌾𐌰𐌽𐌳𐍃 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽; 𐌰𐌸𐌸𐌰𐌽, 𐌽𐌹𐍃𐍄 𐌸𐌰𐌿𐍂𐌱𐌰𐌽𐍃",
+ "tooltip-pt-logout": "𐌻𐌴𐌹𐌸𐌰𐌽",
+ "tooltip-ca-talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌹 𐌱𐌹 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-ca-edit": "𐌸𐌿 𐌼𐌰𐌲𐍄 𐌼𐌰𐌹𐌳𐌾𐌹𐍃 𐌸𐌰𐍄𐌰 𐍃𐌴𐌹𐌳𐍉. 𐌾𐌰𐌱𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐍃, 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍆𐍂𐌿𐌼𐌰.",
+ "tooltip-ca-addsection": "𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌾𐌹𐍃 𐌽𐌹𐌿𐌾𐌰 𐌳𐌰𐌹𐌻",
+ "tooltip-ca-viewsource": "𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌹𐍃𐍄 𐌷𐌻𐌴𐌹𐌱𐌾𐌰𐌽𐌳𐍃\n𐌸𐌿 𐌼𐌰𐌲𐍄 𐍃𐌰𐌹𐍈𐌹𐍃 𐌹𐌶𐍉𐍃 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
+ "tooltip-ca-history": "𐍆𐌰𐌿𐍂𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌸𐌹𐌶𐌿𐌷 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+ "tooltip-ca-protect": "𐌱𐌰𐌹𐍂𐌲𐌰 𐌸𐍉 𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-ca-delete": "𐍄𐌰𐌹𐍂𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-ca-move": "𐍃𐌺𐌹𐌿𐌱𐌰𐌽 𐍃𐍉 𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-ca-watch": "𐌰𐌽𐌰𐌰𐌿𐌺𐌹𐍃 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐌰𐌽𐌰 𐌸𐌴𐌹𐌽𐌰 𐍅𐌹𐍄𐌰𐌽𐌳𐌻𐌴𐌹𐍃𐍄𐌰",
+ "tooltip-search": "𐍃𐍉𐌺𐌾𐌰𐌽 {{SITENAME}}",
+ "tooltip-search-go": "𐍆𐌰𐍂𐌹𐍃 𐌳𐌿 𐍃𐌴𐌹𐌳𐍉𐌽 𐌼𐌹𐌸 𐌲𐌻𐌰𐌲𐌲𐌿𐌾𐌰𐌼𐌰 𐌽𐌰𐌼𐌹𐌽 𐌾𐌰𐌱𐌰𐌹 𐌹𐍃𐍄",
+ "tooltip-search-fulltext": "𐍃𐍉𐌺𐌾𐌰𐌽 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐍆𐌰𐌿𐍂 𐌸𐌰𐌽𐌰 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌰𐌽",
+ "tooltip-p-logo": "𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-n-mainpage": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-n-mainpage-description": "𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐍃𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-n-portal": "𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐌰𐌹, 𐍈𐌰𐍃 𐌸𐌿 𐌼𐌰𐌲 𐍄𐌰𐌿𐌾𐌰, 𐍈𐌰𐍃 𐍃𐍄𐌰𐌸𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽 𐌹𐌽𐍃",
+ "tooltip-n-currentevents": "𐌱𐌹𐌲𐌹𐌸𐌹𐍃 𐌱𐌰𐌺𐌲𐌰𐌷𐌰𐌱𐌹 𐌱𐌹 𐌽𐌹𐌿𐌾𐌰𐌽𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌽𐍃",
+ "tooltip-n-recentchanges": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐌴 𐌽𐌿 𐌰𐌽𐌰 𐌸𐌰𐌼𐌼𐌰 𐍅𐌹𐌺𐌾𐌰",
+ "tooltip-n-randompage": "𐌿𐍃𐌻𐌰𐌸𐌰𐌹𐌸 𐍃𐌻𐌿𐌼𐍀𐌼𐌰𐍃𐍃𐌹𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-n-help": "𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐍆𐌹𐌽𐌸𐌰𐌽",
+ "tooltip-t-whatlinkshere": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌰𐌻𐌻𐌹𐍃 𐍅𐌹𐌺𐌾𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍉 𐌴𐌹 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳 𐌷𐌹𐌳𐍂𐌴",
+ "tooltip-t-recentchangeslinked": "𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌽𐌿 𐍅𐌹𐌸𐍂𐌰 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌸𐌰𐍄𐌴𐌹 𐍃𐌹𐌽𐌳 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐍃 𐌿𐍃 𐌸𐌰𐌼𐌼𐌰 𐍃𐌴𐌹𐌳𐍉𐌽",
+ "tooltip-feed-atom": "𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽",
+ "tooltip-t-upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
+ "tooltip-t-specialpages": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌸𐌹𐌶𐍉 𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐌽𐍉",
+ "tooltip-t-print": "𐍅𐍂𐌴𐌹𐍄𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐌿𐍃𐌲𐌰𐌱𐍉𐍃 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+ "tooltip-t-permalink": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰 𐍅𐌹𐌸𐍂𐌰 𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽 𐌸𐌹𐌶𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃",
+ "tooltip-ca-nstab-main": "𐍃𐌰𐌹𐍈𐌰𐌹𐍃 𐌸𐌰𐍄𐌰 𐌲𐌰𐌷𐌰𐌱𐌾𐌰 𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-ca-nstab-user": "𐍃𐌰𐌹𐍈𐌰𐌽 𐍃𐌰 𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃𐍃𐌴𐌹𐌳𐍉",
+ "tooltip-ca-nstab-image": "𐍃𐌰𐌹𐍈𐌰𐌽 𐌸𐍉 𐍆𐌴𐌹𐌻𐌰𐍃𐌴𐌹𐌳𐍉𐌽",
+ "tooltip-ca-nstab-template": "𐍃𐌰𐌹𐍈𐌹𐍃 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽",
+ "tooltip-ca-nstab-category": "𐍃𐌰𐌹𐍈𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽 𐌷𐌰𐌽𐍃𐍉",
+ "tooltip-save": "𐍃𐌺𐍂𐌴𐌹𐌱𐌰𐌹𐌽 𐌸𐌴𐌹𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
+ "tooltip-preview": "𐍆𐌰𐌿𐍂𐍃𐌰𐍈𐌹𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌴𐌹𐌽𐌰, 𐌱𐌹𐌳𐌾𐌰 𐌸𐌿𐌺 𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌸𐌰𐍄𐌰 𐍆𐌰𐌿𐍂𐌰 𐌼𐌴𐌻𐌾𐌹𐍃!",
+ "tooltip-diff": "𐍃𐌰𐌹𐍈𐌹𐌸 𐌸𐌰𐌽𐌶𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍉𐍃 𐌸𐌰𐍄𐌴𐌹 𐌱𐍂𐌿𐌺𐌾𐌹𐍃 𐌱𐍉𐌺𐌰𐍅𐌰𐌿𐍂𐌳𐌹𐌽𐍃",
+ "tooltip-rollback": "\"𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽\" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐍃 𐌱𐌹 𐌸𐌹𐌶𐌰𐌹 𐍃𐌴𐌹𐌳𐍉𐌽 𐍅𐌹𐍃𐌰𐌽 𐍃𐍉 𐌲𐌰𐌼𐌰𐌳𐌾𐌴𐌹 𐌼𐌰𐌽𐌰𐌲𐌹𐍃𐍄𐍃 𐌽𐌹𐌿𐌾𐌰 𐌲𐌹𐌱𐌰𐌾𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 𐌰𐌹𐌽𐍃 𐌺𐌻𐌹𐌺",
+ "tooltip-undo": "\"𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽\" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌲𐌴𐌹𐌽𐍃 𐌾𐌰𐌷 𐌿𐍃𐌻𐌿𐌺𐍉𐌸 𐌼𐌰𐌹𐌳𐌾𐌰𐍆𐍉𐍂𐌼𐍉𐌽 𐍃𐍅𐌴 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐌷𐌹𐍅𐌾𐌰. 𐌸𐌰𐍄𐌰 𐌻𐌴𐍄 𐌰𐌽𐌰𐌿𐌺𐌰𐌽𐌰𐌽 𐍃𐌰𐌿𐌸𐌰 𐌹𐌽 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰.",
+ "tooltip-summary": "𐌰𐍄𐌲𐌰𐌲𐌲𐌹𐍃 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰 𐌼𐌰𐌿𐍂𐌲𐌾𐌰",
+ "previousdiff": "← 𐌰𐍆𐍄𐌿𐌼𐌰 𐌰𐌹𐍂𐌹𐍃",
+ "nextdiff": "Iftuma áiris →",
+ "file-info-size": "$1 × $2 𐍀𐌹𐌺𐍃𐌴𐌻𐌰, 𐍆𐌴𐌹𐌻𐍅𐌰𐌷𐍃𐍄𐌿𐍃: $3, 𐌼𐌹𐌼𐌴 𐌺𐌿𐌽𐌹: $4",
+ "show-big-image": "Fullis wahstus",
+ "ilsubmit": "Sokeiþ",
+ "metadata": "𐌿𐍆𐌰𐍂𐌳𐌰𐍄𐌰",
+ "namespacesall": "𐌰𐌻𐌻𐌹𐍃",
+ "monthsall": "𐌰𐌻𐌻𐌹𐍃",
+ "imgmultigo": "Afgaggan!",
+ "table_pager_limit_submit": "Affgaggan",
+ "version-other": "Anþar",
+ "specialpages": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃𐌴𐌹𐌳𐍉𐍃",
+ "tag-filter": "[[Special:Tags|𐍄𐌰𐌹𐌺𐌽𐍉𐍃]] 𐍆𐌹𐌻𐌷𐌰",
+ "rightsnone": "(ni áinshun)"
}
diff --git a/languages/i18n/grc.json b/languages/i18n/grc.json
index 01dc5173..4b99ef08 100644
--- a/languages/i18n/grc.json
+++ b/languages/i18n/grc.json
@@ -369,7 +369,6 @@
"passwordreset-username": "Ὄνομα χρωμένου:",
"changeemail-none": "(οὐδέν)",
"changeemail-submit": "Ἀλλάττειν ἠλ.-ταχυδρομεῖον",
- "changeemail-cancel": "Ἀκυροῦν",
"bold_sample": "Γράμματα παχέα",
"bold_tip": "Γράμματα παχέα",
"italic_sample": "Γράμματα πλάγια",
@@ -545,7 +544,6 @@
"mergehistory-same-destination": "Δέλτοι-πηγαὶ καὶ δέλτοι-προορισμοὶ οὐκ ἔξεστι εἶναι ὅμοιαι",
"mergehistory-reason": "Αἰτία:",
"mergelog": "Τῶν συγχωνεύσεων καταλόγος",
- "pagemerge-logentry": "συγκεχωνευμένον ἐστὶν τὸ [[$1]] μετὰ τοῦ [[$2]] (ἀναθεωρήσεις μέχρι $3)",
"revertmerge": "Ἀποσυγχωνεύειν",
"mergelogpagetext": "Κατωτέρω ἐστὶ διαλογή τις τῶν πλείω προσφάτων συγχωνεύσεων τοῦ ἱστορικοῦ δέλτου τινὸς μετὰ αὐτοῦ ἑτέρας τινός.",
"history-title": "Αἱ πρότεραι ἐκδόσεις τῆς δέλτου \"$1\"",
@@ -586,7 +584,6 @@
"searchrelated": "σχετικά",
"searchall": "ἅπασαι",
"showingresults": "Δεικνύναι κατωτέρω μέχρι {{PLURAL:$1|'''1''' ἀποτέλεσμα|'''$1''' ἀποτελέσματα}}· ἐκκίνησις ἐκ τοῦ #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Ἀποτέλεσμα'''$1''' ἀπὸ '''$3'''|Ἀποτελέσματα '''$1 - $2''' ἀπὸ '''$3'''}} περὶ '''$4'''",
"search-nonefound": "Οὐδὲν ἀποτέλεσμα ἀντίστοιχον τῆς πεύσεως.",
"powersearch-legend": "Ἀνωτέρα ἀναζήτησις",
"powersearch-ns": "Ζήτησις ἐν τοῖς ὀνοματείοις:",
@@ -983,7 +980,6 @@
"statistics": "Τὰ περὶ τῶν δεδομένων",
"statistics-header-pages": "Στατιστικὰ δέλτου",
"statistics-header-edits": "Μεταγράφειν τὰ στατιστικά",
- "statistics-header-views": "Ὁρᾶν τὰ στατιστικά",
"statistics-header-users": "Χρωμένου στατιστικά",
"statistics-header-hooks": "Ἀλλα στατιστικά",
"statistics-articles": "Δέλτοι περιεχομένων",
@@ -992,12 +988,9 @@
"statistics-files": "Ἀρχεῖα ἐπιπεφορτισμένα",
"statistics-edits": "Αἱ μεταγραφαὶ τῆς δέλτου ἀφὄτου {{SITENAME}} ἐγκατεστάθησαν",
"statistics-edits-average": "Μέσος ἀριθμὸς μεταγραφῶν ἀνὰ δέλτον",
- "statistics-views-total": "Συνολικαὶ ἐπιθεωρήσεις",
- "statistics-views-peredit": "Ἐπιθεωρήσεις ἀνὰ μεταγραφή",
"statistics-users": "Ἐγγεγραμμένοι [[Special:ListUsers|χρώμενοι]]",
"statistics-users-active": "Ἐνεργοὶ χρώμενοι <small>(χρώμενοι οἳ have edited or performed an action διάφορον τῆς ποιήσεως λογισμοῦ ἐν τῷ παρελθόντι μηνί)</small>",
"statistics-users-active-desc": "Χρώμενοι δραστήριοι ἐν τῷ παρελθόντι μηνί {{PLURAL:$1|ἡμέρα|$1 ἡμέραι}}",
- "statistics-mostpopular": "Αἱ πλέον θεωρουμέναι δέλτοι",
"doubleredirects": "Ἀναδιευθύνσεις διπλότυπαι",
"doubleredirectstext": "Ἥδε ἡ δέλτος συγκαταλέγει δέλτους αἵπερ ἀνακατευθύνουσι πρὸς ἑτέρας δέλτους ἀνακατευθύνσεως. Πᾶσα σειρά περιέχει συνδέσμους πρὸς τὴν τε πρώτην καὶ τὴν τε δευτέραν δέλτον ἀνακατευθύνσεως καὶ τὸν τε προορισμὸν τῆς δευτέρας δέλτου ἀνακατευθύνσεως ἥπερ ἐστὶ συνήθως ὁ πραγματικὸς προορισμὸς τῆς ἀνακατευθύνσεως ὅπου σὲ ἔδει δεδεγμένος εἶναι. Τὰ <del>διαγεγραμμένα</del> λήμματα ἐπιλέλυνται.",
"double-redirect-fixed-move": "Ἡ [[$1]] κεκίνηται, τὸ νῦν ἀναδιευθύνεται πρὸς τὴν [[$2]]",
@@ -1026,7 +1019,6 @@
"uncategorizedtemplates": "Ἀκατηγοριοποίητα πρότυπα",
"unusedcategories": "Ἄχρησται κατηγορίαι",
"unusedimages": "Ἄχρηστα ἀρχεῖα",
- "popularpages": "Δημοφιλεῖς δέλτοι",
"wantedcategories": "Αἰτούμεναι κατηγορίαι",
"wantedpages": "Αἱ δέλτοι οἷας ἱμείρομεν",
"wantedpages-badtitle": "Ἄκυρος ἐπιγραφὴ ἐν τῷ συνόλῳ ἀποτελεσμάτων: $1",
@@ -1067,7 +1059,6 @@
"suppress": "Ἐπόπτης",
"booksources": "Αἱ ἐν βίβλοις πηγαί",
"booksources-search-legend": "Ζητεῖν πηγὰς βίβλων",
- "booksources-go": "Ἰέναι",
"booksources-invalid-isbn": "Τὸ δοθὲν ISBN προφανῶς ἄκυρον ἐστίν· διεξάγαγε ἔλεγχον περὶ πιθανῶν σφαλμάτων προερχομένων ἐκ τῆς πρωτοτύπου πηγῆς.",
"specialloguserlabel": "Χρώμενος:",
"speciallogtitlelabel": "Ἐπιγραφή:",
@@ -1159,7 +1150,7 @@
"watchlist-details": "{{PLURAL:$1|$1 δέλτος|$1 δέλτοι}} ἐφορωμέναι, ἄνευ τῶν δέλτων διαλέξεως περιλαμβανομένων.",
"wlheader-enotif": "Σύστημα εἰδήσεως μέσῳ ἠλ-ἐπιστολῶν ἐνεργόν.",
"wlnote": "Κατωτέρω {{PLURAL:$1|ἐστὶν ἡ ὑστάτη μεταβολὴ|εἰσὶν αἱ ὑστάται '''$1''' μεταβολαὶ}} ἐν {{PLURAL:$2|τῇ ὑστάτῃ μίᾳ ὥρᾳ|ταῖς ὑστάταις '''$2''' ὥραις}}.",
- "wlshowlast": "Ἐμφάνισις τῶν τελευταίων $1 ὡρῶν $2 ἡμερῶν $3",
+ "wlshowlast": "Ἐμφάνισις τῶν τελευταίων $1 ὡρῶν $2 ἡμερῶν",
"watchlist-options": "Ἐπιλογαὶ ἐφοροδιαλογῆς",
"watching": "Ἐφορῶν...",
"unwatching": "Ἀνεφορῶν...",
@@ -1193,7 +1184,6 @@
"deletereason-dropdown": "*Κοιναὶ αἰτίαι διαγραφῆς\n** Αἴτησις τοῦ δημιουργοῦ\n** Παραβίασις δικαιωμάτων\n** Βαρβαρότης",
"delete-edit-reasonlist": "Μεταγράφειν τὰς αἰτίας διαγραφῆς",
"rollback": "Ἀναστρέφειν μεταγραφάς",
- "rollback_short": "Ἀναστροφή",
"rollbacklink": "ἀναστροφή",
"rollbackfailed": "Ἀναστροφὴ μὴ ἐπιτυχής",
"cantrollback": "Μὴ δυνατὴ ἡ ἀναστροφὴ·\nὁ ὕστατος ἐρανιστὴς ἐστὶ μόνον δημιουργὸς τῆσδε τῆς δέλτου.",
@@ -1476,7 +1466,6 @@
"thumbnail_image-missing": "Ἀρχεῖον καταφανῶς ἐκλιπόν: $1",
"import": "Εἰσάγειν δέλτους",
"importinterwiki": "Ὑπερδιαβικι-εἰσαγωγή",
- "import-interwiki-source": "Βίκι/δέλτος πηγή:",
"import-interwiki-history": "Ἀντιγράφειν ἁπάσας τὰς ἐκδόσεις τοῦ ἱστορικοῦ τῆσδε τῆς δέλτου",
"import-interwiki-templates": "Συμπερίληψις ἁπάντων τῶν προτύπων",
"import-interwiki-submit": "Εἰσάγειν",
@@ -1585,7 +1574,6 @@
"spambot_username": "Κάθαρσις τῶν ἀνεπιθυμήτων ἀγγελιῶν τῆς MediaWiki",
"pageinfo-title": "Πύστις περὶ \"$1\"",
"pageinfo-header-edits": "Μεταγραφαί",
- "pageinfo-views": "Ἀριθμὸς προβολῶν",
"pageinfo-edits": "Ἀριθμὸς μεταγραφῶν",
"markaspatrolleddiff": "Σεσημασμένη ὡς φρουρουμένη",
"markaspatrolledtext": "Σημαίνειν τήνδε τὴν δέλτον ὡς φρουρούμενη",
@@ -1872,7 +1860,6 @@
"exif-dc-publisher": "Ἐκδότης",
"exif-iimcategory-pol": "Πολιτική",
"exif-iimcategory-spo": "Άθλοπαιδιαί",
- "watchlistall2": "ἅπασαι",
"namespacesall": "ἅπασαι",
"monthsall": "ἅπαντες",
"confirmemail": "Ἐπιβεβαίωσον διεύθυνσιν ἠλ-ταχυδρομείου",
@@ -1934,7 +1921,6 @@
"watchlisttools-view": "Ὁρᾶν τὰς συναφεῖς μεταβολὰς",
"watchlisttools-edit": "Ὁρᾶν τε καὶ μεταγράφειν τὰ ἐφορωμένα",
"watchlisttools-raw": "Μεταγράφειν τὸν πρωτογενῆ κατάλογον ἐφορωμένων",
- "unknown_extension_tag": "Ἄγνωτον σήμαντρον ἐπεκτάσεων \"$1\"",
"duplicate-defaultsort": "Eἴδησις: Ἡ προκαθωρισμένη κλεὶς ταξινομήσεως \"$2\" ὑπερκαλύπτει προηγουμένην προκαθωρισμένην κλεῖδα ταξινομήσεως \"$1\".",
"version": "Ἐπανόρθωμα",
"version-extensions": "Ἐγκατεστημέναι ἐπεκτάσεις",
@@ -1948,7 +1934,7 @@
"version-parser-function-hooks": "Ἀγγύλαι ἐνεργειῶν λεξιαναλυτικοῦ προγράμματος",
"version-hook-name": "Ὄνομα ἀγκύλης",
"version-hook-subscribedby": "Ὑπογεγραφυῖα ὑπὸ",
- "version-version": "(Ἔκδοσις $1)",
+ "version-version": "($1)",
"version-license": "Ἄδεια",
"version-poweredby-others": "ἄλλα",
"version-software": "Ἐγκατεστημένον λογισμικόν",
@@ -1976,6 +1962,7 @@
"specialpages-group-wiki": "Βικι-δεδομένα καὶ στοιχεῖα",
"specialpages-group-redirects": "Ἀναδιευθύνειν εἰδικὰς δέλτους",
"specialpages-group-spam": "Ἐργαλεῖα κατὰ τῶν ἀνεπιθυμήτων διαγγελιῶν",
+ "specialpages-group-developer": "Ἐργαλεῖα ἀναπτυκτῶν",
"blankpage": "Κενὴ δέλτος",
"intentionallyblankpage": "Ἥδε ἡ δέλτος ἀφίεται ἐσκεμμένως κενὴ οὖσα χρήσιμος ὡς σημεῖον ἀναφορᾶς, κτλ.",
"external_image_whitelist": " #Ἄφες τήνδε τὴν γραμμὴν ὥσπερ ἐστὶν ἐν τῷ παρόντι<pre>\n#Ὰπόθες ἅπαντα τὰ τεμάχια συνήθων ἐκφράσεων (μόνον τὸ μέρος τὸ μεταξὺ τῶν //) κάτωθεν\n#Αὗται ἀντιστοιχήσασαι μετὰ τῶν URL τῶν ἐξωτέρων (hotlinked) εἰκόνων ἔσονται\n#Αἱ ἀντιστιχοῦσαι, δεικνυμέναι ἔσονται ὡς εἰκόνες· εἰ δὲ μή, εἷς μόνον σύνδεσμος πρὸς τὴν εἰκόνα δείξεται\n#Αἱ γραμμαὶ αἱ ἀρχόμεναι ἐκ τοῦ # θεωροῦνται σχόλια\n#Ὅδε ὁ κατάλογος οὐ διακρίνεται εἰς κεφαλαῖα καὶ μικρὰ γράμματα\n\n#Ὰπόθες ἅπαντα τὰ τεμάχια συνήθων ἐκφράσεων ἄνωθεν τῆσδε τῆς γραμμῆς. Ἄφες τήνδε τὴν γραμμὴν ὡς ἔστι ἐν τῷ παρόντι</pre>",
@@ -2009,6 +1996,7 @@
"revdelete-restricted": "ἐφηρμοσμένοι περιορισμοὶ διὰ τοὺς ἐπιτρόπους",
"revdelete-unrestricted": "αἱρεθέντες περιορισμοὶ διὰ τοὺς ἐπιτρόπους",
"rightsnone": "(Οὐδέν)",
+ "revdelete-summary": "σύνοψις μεταγραφῶν",
"feedback-cancel": "Ἀκυροῦν",
"searchsuggest-search": "Ζητεῖν",
"searchsuggest-containing": "περιέχον...",
diff --git a/languages/i18n/gsw.json b/languages/i18n/gsw.json
index 97e5b097..dd47af17 100644
--- a/languages/i18n/gsw.json
+++ b/languages/i18n/gsw.json
@@ -18,7 +18,8 @@
"The Evil IP address",
"Urhixidur",
"לערי ריינהארט",
- "80686"
+ "80686",
+ "아라"
]
},
"tog-underline": "Links unterstryche",
@@ -35,6 +36,7 @@
"tog-watchdefault": "Sälber gändereti Syte un Dateie automatisch beobachte",
"tog-watchmoves": "Sälber verschobeni Sytene un Dateie automatisch beobachte",
"tog-watchdeletion": "Sälber gleschti Sytene un Dateie automatisch beobachte",
+ "tog-watchrollback": "Syte, wun i zruckgsetzt haa, automatisch beobachte",
"tog-minordefault": "Alli dyni Änderigen als «chlyni Änderige» markiere",
"tog-previewontop": "Vorschou vor em Editierfänschter aazeige",
"tog-previewonfirst": "Vorschou aazeige bim erschten Editiere",
@@ -220,7 +222,8 @@
"otherlanguages": "Anderi Sproche",
"redirectedfrom": "(Witergleitet vun $1)",
"redirectpagesub": "Umgleiteti Syte",
- "lastmodifiedat": "Letschti Änderig vo dere Syte: $2, $1<br />",
+ "redirectto": "Wyterleitig uf:",
+ "lastmodifiedat": "Letschti Änderig vo dere Syte: $2, $1",
"viewcount": "Die Syte isch {{PLURAL:$1|eimol|$1 Mol}} bsuecht wore.",
"protectedpage": "Gschützti Syte",
"jumpto": "Gump zue:",
@@ -272,6 +275,9 @@
"hidetoc": "zueklappe",
"collapsible-collapse": "zueklappe",
"collapsible-expand": "ufklappe",
+ "confirmable-confirm": "{{GENDER:$1|Bisch}} sicher?",
+ "confirmable-yes": "Jo",
+ "confirmable-no": "Nei",
"thisisdeleted": "Aaluege oder widerherstelle vu $1?",
"viewdeleted": "$1 aaluege?",
"restorelink": "{{PLURAL:$1|gleschti Änderig|$1 gleschti Ändrige}}",
@@ -341,7 +347,8 @@
"viewsourcetext": "Quelltext vo dere Syte:",
"viewyourtext": "Du chasch dr Quälltext vu '''Dyre Bearbeitig''' vu däre Syte aaluege un kopiere:",
"protectedinterface": "In däre Syte het s Text fir s Sproch-Interface vu dr Software un si isch gsperrt, zum Missbruch z verhindre.",
- "editinginterface": "'''Obacht:''' Du bisch e Syten am Verändere, wu zum User.Interface ghert. Wänn Du die Syte veränderesch, no änderet sich s User-Interface au fir di andere Benutzer vu däm Wiki. Fir Ibersetzige lueg bitte, eb Du doodefir s [//translatewiki.net/wiki/Main_Page?setlang=gsw Translatewiki] witt bruuche, s MediaWiki-Lokalisierigsprojäkt.",
+ "editinginterface": "<strong>Warnig:</strong> Uf däre Syte het s Täxt, wu vu dr MediaWiki-Software brucht wird. Änderigen uf däre Syte wirke si uf d Benutzeroberflechi vu däm Wiki uus.",
+ "translateinterface": "Go Ibersetzige fir alli Wiki zuefiege oder ändere, bruuch bitte [//translatewiki.net/ translatewiki.net], s MediaWiki-Lokalisierigsprojäkt.",
"cascadeprotected": "Die Syte isch fir s Bearbeite gsperrt. Si isch yybunde in {{PLURAL:$1|die Syte, wu do chunnt|die Syte, wu do chemme}} , wu mit ere Kaskadesperroption gschitzt {{PLURAL:$1|isch|sin}}:\n$2",
"namespaceprotected": "Du hesch kei Berächtigung, die Syte im '''$1'''-Namensruum z bearbeite.",
"customcssprotected": "Du bisch nid berächtigt, die Syte mit CSS z bearbeite, wel si zue dr persenlige Yystellige vun eme andere Benutzer ghert.",
@@ -356,7 +363,7 @@
"invalidtitle-knownnamespace": "Nit-gültige Titel mit Namensruum „$2“ un Text „$3“",
"invalidtitle-unknownnamespace": "Ungültige Titel mit unbekannte Namensruumnummer $1 un Text „$2“",
"exception-nologin": "Nit aagmäldet",
- "exception-nologin-text": "Du muesch Di [[Special:Userlogin|aamälde]] go die Syte oder Aktion ufruefe chenne.",
+ "exception-nologin-text": "Du muesch Di aamälde go die Syte oder Aktion ufruefe chenne.",
"exception-nologin-text-manual": "Du muesch Di $1 go die Syte oder Aktion ufruefe chenne.",
"virus-badscanner": "Fählerhafti Konfiguration: Virescanner, wu nid bekannt isch: ''$1''",
"virus-scanfailed": "Scan het nid funktioniert (code $1)",
@@ -461,6 +468,7 @@
"createaccount-text": "Fir Dii isch e Benutzerkonto \"$2\" uf {{SITENAME}} ($4) aaglait wore. S Passwort fir \"$2\" , wu automatisch generiert woren isch, isch \"$3\". Du sottsch Di jetz aamälde un s Passwort ändere.\n\nWänn s Benutzerkonto us Versäh aaglait woren isch, chasch die Nochricht ignoriere.",
"login-throttled": "Du hesch z vilmol umesuscht versuecht, Di aazmälde. Bitte wart $1, voreb Du s non emol versuechsch.",
"login-abort-generic": "Dyy Aamäldig isch nit erfolgryych gsii – Abbroche",
+ "login-migrated-generic": "Dy Benutzerkonto isch migriert wore, Dy Benutzername git s nimi uf däm Wiki.",
"loginlanguagelabel": "Sproch: $1",
"suspicious-userlogout": "Dyy Versuech di abzmälde isch abbroche wore, wel s uusgsäh het, wie wänn s vun eme bschedigte Browser oder eme Cacheproxy uus gsändet woren isch.",
"createacct-another-realname-tip": "Dr richtig Name isch optional.\nWänn Du ne aagiisch, wird er bruucht fir d Zueornig vu dr Byytreg.",
@@ -491,6 +499,8 @@
"resetpass-temp-password": "Temporär Passwort:",
"resetpass-abort-generic": "D Passwortänderig isch dur e Erwyterig abbroche wore.",
"resetpass-expired": "Dy Passwort isch abglofe. Bitte leg e nej Passwort fir d Aamäldig fescht.",
+ "resetpass-expired-soft": "Dy Passwort isch abgloffe un mueß zruckgsetzt wäre. Bitte wehl jetz e nei Passwort uus oder klick uf „{{int:resetpass-submit-cancel}}“, go s speter zrucksetze.",
+ "resetpass-validity-soft": "Dy Passwort isch nit giltig: $1\n\nBitte wehl jetz e nei Passwort oder klick uf „{{int:resetpass-submit-cancel}}“, go s speter zrucksetze.",
"passwordreset": "Passwort zruggsetze",
"passwordreset-text-one": "Fill des Formular uus go Dy Passwort zrucksetze.",
"passwordreset-text-many": "{{PLURAL:$1|Fill eis vu dr Fälder uus go Dy Passwort zrucksetze.}}",
@@ -510,7 +520,6 @@
"passwordreset-emailsent-capture": "E Passwort-Zrucksetzigs-Mail isch vergschickt worde, un isch unte aazeigt.",
"passwordreset-emailerror-capture": "Die unten angezeigte Passwortzrucksetzigsmail, wu unten aazeigt wird, isch generiert wore, aber dr Versand an {{GENDER:$2|dr Benutzer|d Benutzeri}} het nit funktioniert: $1",
"changeemail": "E-Mail-Adräss ändre",
- "changeemail-header": "D E-Mail-Adräss vo däm Chonto ändre",
"changeemail-text": "Füll des Formular ganz uss, zume dyni E-Mail-Adräss ändre. Du muesch dyn Passwort aagee, zum die Änderig z bstätige.",
"changeemail-no-info": "Du muesch aagmolde sy zum uff die Syte diräkt zuegryfe z chönne.",
"changeemail-oldemail": "Aktuelli E-Mail-Adräss",
@@ -518,7 +527,7 @@
"changeemail-none": "(nyt)",
"changeemail-password": "Dy {{SITENAME}}-Passwort:",
"changeemail-submit": "E-Mail Adräss ändre",
- "changeemail-cancel": "Abbräche",
+ "changeemail-throttled": "Du hesch z vilmol versuecht Di aazmälde. Bitte wart $1, voreb Du s non emol versuechsch.",
"resettokens": "Token zrucksetze",
"resettokens-text": "Du chasch Token zrucksetze, wu Dir dr Zuegriff uf bstimmti privati Date megli mache, wu mit Dym Benutzerkonto do verchnipft sin.\n\nDes sottsch nume mache, wänn Du d Token us Versää mit eberem teilt hesch oder Dy Konto gfehrdet isch.",
"resettokens-no-tokens": "S git kei Token zum Zrucksetze.",
@@ -554,7 +563,8 @@
"preview": "Vorschou",
"showpreview": "Vorschau aaluege",
"showdiff": "Zeig Änderige",
- "anoneditwarning": "'''Warnig:''' Si sin nit aagmäldet. Ihri IP-Adrässe wird in de Gschicht vo däm Artikel gspeicheret.",
+ "blankarticle": "<strong>Warnig:</strong> D Syte, wu Du aalaisch, isch läär.\nWänn Du nomol uf „{{int:savearticle}}“ klicksch, wird d Syte ohni Inhalt aaglait.",
+ "anoneditwarning": "<strong>Warnig:</strong> Du bisch nit aagmäldet. Dy IP-Adräss wird effetli sichtbar, wänn Du Bearbeitige machsch. Wänn di <strong>[$1 aamälde duesch]</strong> oder <strong>[$2 e Benutzerkonto aalaisch]</strong>, wäre Bearbeitige zämme mit andere Bytreg Dym Nenutzername zuegordnet.",
"anonpreviewwarning": "''Du bisch nit aagmäldet. Bim Spychere wird Dyy IP-Adräss yydrait in d Versionsgschicht vu däre Syte.''",
"missingsummary": "'''Obacht:''' Du hesch kei Zämefassig aagee. Wenn du nomol uf Spychere drucksch, wird d Änderung ohni gspychert.",
"missingcommenttext": "Bitte gib Dyy Kommentar unte yy.",
@@ -640,17 +650,23 @@
"edit-gone-missing": "D Syte het nid chenne aktalisiert wäre.\nSi isch schyns glescht wore.",
"edit-conflict": "Bearbeitigskonflikt.",
"edit-no-change": "Dyyni Bearbeitig isch ignoriert wore, wel kei Änderig am Täxt gmacht woren isch.",
+ "postedit-confirmation-created": "D Syte isch aaglait wore.",
+ "postedit-confirmation-restored": "D Syte isch widerhärgstellt wore.",
"postedit-confirmation-saved": "Dyy Bearbeitig isch gspycheret wore.",
"edit-already-exists": "Di nej Syte het nid chenne aaglait wäre, wel s si scho git.",
"defaultmessagetext": "Standardtext",
"content-failed-to-parse": "Parse vum Inhalt $2 fir Modell $1 fählgschlaa: $3",
"invalid-content-data": "Uugiltigi Inhaltsdate",
"content-not-allowed-here": "Dr Inhalt „$1“ isch uf dr Syte [[$2]] nit erlaubt",
- "editwarning-warning": "Wänn Du die Syte verlosch, cha s syy, ass Du alli Bearbeitige verliersch, wu Du do dra gmacht hesch.\nWänn Du aagmäldet bisch, chasch s Anzeige vu däre Warnig im „Bearbeite“-Beryych vu Dyyne Yystelligen abstelle.",
+ "editwarning-warning": "Wänn Du die Syte verlosch, cha s syy, ass Du alli Bearbeitige verliersch, wu Du do dra gmacht hesch.\nWänn Du aagmäldet bisch, chasch s Anzeige vu däre Warnig im „{{int:prefs-editing}}“-Beryych vu Dyyne Yystelligen abstelle.",
+ "editpage-notsupportedcontentformat-title": "S Inhaltsformat wird nit unterstitzt",
+ "editpage-notsupportedcontentformat-text": "S Inhaltsformat $1 wird vum Inhaltsmodäll $2 nit unterstitzt.",
"content-model-wikitext": "Wikitext",
"content-model-text": "Klartext",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "duplicate-args-category": "Syte, wu doppleti Argumänt in Vorlagenufruef verwände",
+ "duplicate-args-category-desc": "Uf dr Syte het s Vorlagenufruef, wu Duplikat vu Argumänt verwände, wie <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> oder <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Achtig: In däre Syte het s z vyyl Ufruef vu ufwändige Parserfunktione.\n\nS {{PLURAL:$2|derf nid meh wie ein Ufruef|derfe nid meh wie $1 Ufruef}} gee.",
"expensive-parserfunction-category": "Syte, wu ufwändigi Parserfunktione z vyylmol ufruefe",
"post-expand-template-inclusion-warning": "Warnig: D Gressi vu yybundene Vorlage isch z gross, e Teil Vorlage chenne nid yybunde wäre.",
@@ -661,8 +677,10 @@
"parser-template-recursion-depth-warning": "Vorlagerekursionstiefegränz iberschritte ($1)",
"language-converter-depth-warning": "Gränz vu dr Sprochkonvertertiefi iberschritte ($1)",
"node-count-exceeded-category": "Syte, wo d Chnotezaal überschritte hen",
- "node-count-exceeded-warning": "Die Syte het d Chnotepunktzaal überschritte.",
+ "node-count-exceeded-category-desc": "D Syte iberschrytet di maximal Chnotenaazahl.",
+ "node-count-exceeded-warning": "Die Syte het d Chnotepunktzaal iberschritte.",
"expansion-depth-exceeded-category": "Syte, wo d Expansionsdiefi überschritte hen",
+ "expansion-depth-exceeded-category-desc": "D Syte iberschrytet di maximal Expandierigstiefi.",
"expansion-depth-exceeded-warning": "Die Syte het d Expansionsdiefi überschritte.",
"parser-unstrip-loop-warning": "Zirkelbezug festgstellt",
"parser-unstrip-recursion-limit": "Rekursionsgränz bim Ufflöse überschritte ($1)",
@@ -670,16 +688,18 @@
"undo-success": "Zum die Änderig ruckgängig z mache, kontrollier bitte d Bearbeitig in dr Verglichsaasicht un druck derno uf „Syte spichere“.",
"undo-failure": "D Änderig het nid chenne ruckgängig gmacht wäre, wel dää Abschnitt mittlerwyli gänderet woren isch.",
"undo-norev": "D Bearbeitig het nid chenne ruckgängig gmacht wäre, wel si nid vorhande oder glescht isch.",
+ "undo-nochange": "Schyns isch die Bearbeitig scho rugggängig gmacht wore.",
"undo-summary": "D Änderig $1 vu [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) isch ruckgängig gmacht wore.",
"undo-summary-username-hidden": "Änderig $1 vun eme versteckte Benutzer ruckgängig gmacht.",
"cantcreateaccounttitle": "Benutzerkonto cha nid aagleit wäre.",
"cantcreateaccount-text": "S Aalege vu me Benutzerkonto vu dr IP-Adräss '''($1)''' isch dur [[User:$3|$3]] gsperrt wore.\n\nGrund vu dr Sperri: ''$2''",
+ "cantcreateaccount-range-text": "S Aalege vu Benutzerkonte vu IP-Adrässen im Berych '''$1''', wu s Dyni IP-Adräss ('''$4''') din het, isch vu [[User:$3|$3]] gsperrt wore.\n\nDr Grund, wu vu $3 aagee woren isch: ''$2''",
"viewpagelogs": "Logbüecher für die Syten azeige",
"nohistory": "S git kei Versionsgschicht fir die Syte.",
"currentrev": "Itzigi Version",
"currentrev-asof": "Aktuälli Version vu $1",
"revisionasof": "Version vo $1",
- "revision-info": "Alti Bearbeitig vom $1 dür $2",
+ "revision-info": "Version vu $4, $5 Uhr vu {{GENDER:$6|$2}}$7",
"previousrevision": "← Vorderi Version",
"nextrevision": "Nächschti Version →",
"currentrevisionlink": "Itzigi Version",
@@ -704,6 +724,7 @@
"rev-deleted-event": "(Logbuechaktion uusegnuh)",
"rev-deleted-user-contribs": "[Benutzername oder IP-Adräss uusegnuu - Bearbeitig in dr Byytragslischt versteckt]",
"rev-deleted-text-permission": "Die Version isch '''glescht''' wore.\nInformation zue dr Leschig un e Begrindig het s im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech].",
+ "rev-suppressed-text-permission": "Die Version isch <strong>unterdruckt</strong> wore.\nEinzelheite het s im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Oversight-Logbuech].",
"rev-deleted-text-unhide": "Die Version isch '''gelöscht''' worde.\nMee Angabe chasch im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuech] finde.\nDu chasch [$1 die Version allno aaluege], wänn de wottsch.",
"rev-suppressed-text-unhide": "Die Version isch '''unterdrückt''' worde.\nMee Angabe chasch im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Unterdrückigs-Logbuech] finde.\nDu chasch [$1 die Version allno aaluege], wänn de wottsch.",
"rev-deleted-text-view": "Die Version isch '''glescht''' wore.\nDu chasch si allno aaluege. Details findsch im [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuech].",
@@ -722,7 +743,13 @@
"revdelete-no-file": "D Datei, wu Du aagee hesch, git s nit.",
"revdelete-show-file-confirm": "Bisch sicher, ass Du di glescht Version vu dr Datei „<nowiki>$1</nowiki>“ vum $2 am $3 witt aaluege?",
"revdelete-show-file-submit": "Jo",
+ "revdelete-selected-text": "Uusgwehlti {{PLURAL:$1|Version|Versione}} vu [[:$2]]:",
+ "revdelete-selected-file": "Uusgwehlti {{PLURAL:$1|Dateiversion|Dateiversione}} vu [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Usgwehlte Logbuechyytrag|Usgwehlti Logbuechyytreg}}:",
+ "revdelete-text-text": "Gleschti Versione blybe no dr Versionsgschicht, Teil vu ihrem Inhalt sin aber nimi effetli zuegängig.",
+ "revdelete-text-file": "Gleschti Dateiversione blybe no in dr Datei-Versionsgschicht, Teil vu ihrem Inhalt sin aber nimi effetli zuegängig.",
+ "logdelete-text": "Gleschti Logbuechyytreg blybe no dr Logbiecher, Teil vu ihrem Inhalt sin aber nimi effetli zuegängig.",
+ "revdelete-text-others": "Anderi Administratore hän no Zuegriff uf dr verdeckt Inhalt un chenne ne au widerhärstelle, solang keini zuesetzlige Bschränkige feschtgleit wäre.",
"revdelete-confirm": "Bitte tue bstetige, ass Du vor hesch, des z mache, d Konsequänze drus verstohsch un s machsch in Inbereinstimmig mit dr [[{{MediaWiki:Policy-url}}|Richtlinie]].",
"revdelete-suppress-text": "Unterdruckige sotte '''nume''' in däne Fäll bruucht wäre:\n* Nit aabrochti Informatione\n*: ''Adrässe, Telifonnummere, Sozialversicherigsnummere usw.'",
"revdelete-legend": "Setze vu dr Sichtbarkeits-Yyschränkige",
@@ -781,7 +808,6 @@
"mergehistory-same-destination": "Uusgangs- un Ziilsyte derfe nit di nämlige syy",
"mergehistory-reason": "Grund:",
"mergelog": "Zämefierigs-Logbuech",
- "pagemerge-logentry": "het [[$1]] in [[$2]] zämegfierd (Versione bis $3)",
"revertmerge": "Zämefierig ruckgängig mache",
"mergelogpagetext": "Des isch e Lischt vu dr letschte Zämefierige vu Versionsgschichte.",
"history-title": "$1: Versionsgschicht",
@@ -828,7 +854,6 @@
"searchrelated": "verwandt",
"searchall": "alli",
"showingresults": "Do {{PLURAL:$1|isch '''1''' Ergebnis|sin '''$1''' Ergebniss}}, s fangt aa mit dr Nummerer '''$2.'''",
- "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' vu '''$3'''|Ergebnis '''$1 - $2''' vu '''$3'''}} fir '''$4'''",
"search-nonefound": "Fir Dyyni Suechaafrog sin keini Ergebniss gfunde wore.",
"powersearch-legend": "Erwytereti Suech",
"powersearch-ns": "Suech in Namensryym:",
@@ -1381,7 +1406,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Sytestatischtik",
"statistics-header-edits": "Bearbeitigsstatischtik",
- "statistics-header-views": "Sytenufruefstatischtik",
"statistics-header-users": "Benutzer-Statischtik",
"statistics-header-hooks": "Anderi Statischtike",
"statistics-articles": "Inhaltssyte",
@@ -1390,13 +1414,9 @@
"statistics-files": "Uffegladeni Dateie",
"statistics-edits": "Sytebearbeitige",
"statistics-edits-average": "Bearbeitige pro Syte im Durchschnitt",
- "statistics-views-total": "Sytenufruef insgsamt",
- "statistics-views-total-desc": "Ufruef vu Syte un Spezialsyte, wu s nit git, wäre nit berucksichtigt",
- "statistics-views-peredit": "Sytenufruef pro Bearbeitig",
"statistics-users": "Regischtrierti [[Special:ListUsers|Benutzer]]",
"statistics-users-active": "Aktivi Benutzer",
"statistics-users-active-desc": "Benutzer mit Bearbeitige {{PLURAL:$1|in dr letschte 24 Stund|in dr letschte $1 Täg}}",
- "statistics-mostpopular": "Am meischte aagluegti Syte",
"pageswithprop": "Syte mit ere Syteneigeschaft",
"pageswithprop-legend": "Syte mit ere Syteneigeschaft",
"pageswithprop-text": "Die Spezialsyte lischet Syten auf, wu ne bstimmti Syteneigeschaft bruche.",
@@ -1434,7 +1454,6 @@
"uncategorizedtemplates": "Nid kategorisierti Vorlage",
"unusedcategories": "Nid bruuchti Kategorië",
"unusedimages": "Verwaiste Bilder",
- "popularpages": "Beliebti Artikel",
"wantedcategories": "Bruuchti Kategorie, wo s no nid git",
"wantedpages": "Artikel, wo fähle",
"wantedpages-badtitle": "Nit giltige Titel im Ergebnis: $1",
@@ -1483,7 +1502,6 @@
"querypage-disabled": "Die Spezialsyte isch deaktiviert wore us Leischtigserhaltigs-Grind.",
"booksources": "ISBN-Suech",
"booksources-search-legend": "Suech no Bezugsquälle fir Biecher",
- "booksources-go": "Sueche",
"booksources-text": "Des isch e Lischt mit Link zue Netzsyte, wu neiji un bruchti Biecher verchaufe. S cha syy, ass es dert au meh Informatione zue dr Biecher git. {{SITENAME}} isch mit keinem vu däne Aabieter gschäftli verbunde.",
"booksources-invalid-isbn": "D ISBN isch schyyns falsch. Lueg no Fähler in dr Kopii.",
"specialloguserlabel": "Benutzer, wu des gmacht het:",
@@ -1600,7 +1618,7 @@
"wlheader-enotif": "Dr E-Mail-Benochrichtigungsdienscht isch aktiviert.",
"wlheader-showupdated": "Syte mit Anderige, wu no nit aagluegt sin, sin '''fett''' dargstellt.",
"wlnote": "Do {{PLURAL:$1|chunnt di letscht Änderig|chemme di letschte '''$1''' Änderige}} vu dr letschte {{PLURAL:$2|Stund|'''$2''' Stunde}}. Stand: $3, $4 Uhr.",
- "wlshowlast": "Zeig di letschte $1 Stunde $2 Tage $3",
+ "wlshowlast": "Zeig di letschte $1 Stunde $2 Tage",
"watchlist-options": "Aazeigoptione",
"watching": "Am beobachte …",
"unwatching": "Nümm am beobachten …",
@@ -1647,7 +1665,6 @@
"delete-toobig": "Die Syte het e arg langi Versionsgschicht mit meh as $1 {{PLURAL:$1|Version|Versione}}. S Lesche vu sonige Syte isch yygschränkt wore go verhindere, ass dr Server vu {{SITENAME}} us Versäh zytwys iberlaschtet wird.",
"delete-warning-toobig": "Die Syte het e arg langi Versionsgschicht mit meh as $1 {{PLURAL:$1|Version|Versione}}. S Lesche cha dr Datebankbetriib vu {{SITENAME}} stere.",
"rollback": "Zrucksetze vu dr Änderige",
- "rollback_short": "Zrucksetze",
"rollbacklink": "Zrüggsetze",
"rollbacklinkcount": "{{PLURAL:$1|Ei Version|$1 Versione}} zrucksetze",
"rollbacklinkcount-morethan": "Meh wie {{PLURAL:$1|ei Version|$1 Versione}} zrucksetze",
@@ -2016,7 +2033,6 @@
"import": "Sytene importiere",
"importinterwiki": "Transwiki-Import",
"import-interwiki-text": "Wääl e Wiki un e Syte zum Importiere us.\nS Datum vo dr Bearbeitig un dr Benutzername blybe erhalte.\nAlli Transwiki-Import-Aktione werde im [[Special:Log/import|Import-Logbuech]] protokolliert.",
- "import-interwiki-source": "Quell-Wiki/-Syte:",
"import-interwiki-history": "Alli früeneri Versione vo dere Syte importiere",
"import-interwiki-templates": "Mit allene Vorlage",
"import-interwiki-submit": "Import",
@@ -2062,13 +2078,11 @@
"import-logentry-interwiki": "„$1“ isch importiert worde (Transwiki)",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} vo $2",
"javascripttest": "JavaScript-Tescht",
- "javascripttest-title": "$1-Tescht wäre durgfiert",
"javascripttest-pagetext-noframework": "Die Syte isch reserviert fir JavaSkript-Tescht.",
"javascripttest-pagetext-unknownframework": "Nit bekannt Framework „$1“.",
"javascripttest-pagetext-frameworks": "Bitte eis vu däne Framework uuswehle: $1",
"javascripttest-pagetext-skins": "Wehl e Benutzeroberflechi uus fir d Durfierig vu dr Tescht:",
"javascripttest-qunit-intro": "Lueg d [$1 Dokumentation zue Tescht] uf mediawiki.org",
- "javascripttest-qunit-heading": "MediaWiki-JavaSkript-QUnit-Teschter",
"tooltip-pt-userpage": "Dyyni Benutzersyte",
"tooltip-pt-anonuserpage": "D Benutzersyte vo der IP-Adress wo du mit schaffsch",
"tooltip-pt-mytalk": "Dyyni Diskussionssyte",
@@ -2167,7 +2181,6 @@
"pageinfo-robot-policy": "Indexierig dur Suechmaschine",
"pageinfo-robot-index": "Erlaubt",
"pageinfo-robot-noindex": "Nit erlaubt",
- "pageinfo-views": "Aazahl Sytenufruef",
"pageinfo-watchers": "Aazahl vu Beobachter",
"pageinfo-few-watchers": "Weniger wie {{PLURAL:$1|ei|$1}} Beobachter",
"pageinfo-redirects-name": "Zahl vu dr Wyterleitige zue däre Syte",
@@ -2600,7 +2613,6 @@
"exif-urgency-low": "Nider ($1)",
"exif-urgency-high": "Hoch ($1)",
"exif-urgency-other": "Benutzerdefinierti Prioritet ($1)",
- "watchlistall2": "alli",
"namespacesall": "alli",
"monthsall": "alli",
"confirmemail": "Bstätigung vo Ihre E-Poscht-Adräss",
@@ -2676,7 +2688,6 @@
"watchlisttools-edit": "normal bearbeite",
"watchlisttools-raw": "imene große Textfäld bearbeite",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussion]])",
- "unknown_extension_tag": "Nit bekannte Extension-Tag „$1“",
"duplicate-defaultsort": "Obacht: Dr Sortierigsschlüssel „$2“ iberschrybt dr vorig brucht Schlüssel „$1“.",
"version": "Version",
"version-extensions": "Installierti Erwyterige",
@@ -2692,7 +2703,7 @@
"version-parser-function-hooks": "Parser-Funktione",
"version-hook-name": "Schnittstellename",
"version-hook-subscribedby": "Ufruef vu",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-license": "Lizänz",
"version-ext-license": "Lizänz",
"version-ext-colheader-name": "Erwyterig",
@@ -2749,6 +2760,7 @@
"specialpages-group-wiki": "Date un Wärchzyyg",
"specialpages-group-redirects": "Spezialsyte wo wyterleite",
"specialpages-group-spam": "Spam-Wärchzüüg",
+ "specialpages-group-developer": "Entwicklerwärchzyyg",
"blankpage": "E leeri Syte",
"intentionallyblankpage": "Die Syte isch absichtlich leer. Si wird für Benchmarks bruucht.",
"external_image_whitelist": " #Die Zyylete nit verändere<pre>\n#Unte chenne Fragmänt vu reguläre Usdrick (dr Teil zwische dr //) yygee wäre\n#Die wäre mit dr URL vu Bilder us externe Quälle vergliche\n#E positive Verglyych fiert zue dr Aazeig vum Bild, suscht wird s Bild nume as Link aazeigt\n#Zyylete, wu mit eme # aafange, wäre as Kommentar behandlet\n#Des isch nit abhängig vum Einzelfall\n\n#Fragmänt vu reguläre Usdrick noch däre Zyylete yytrage. Die Zyylete nit verändere</pre>",
@@ -2830,19 +2842,20 @@
"logentry-rights-rights-legacy": "$1 het d Gruppezuegherigkeit fir $3 gänderet",
"logentry-rights-autopromote": "$1 isch automatisch vu $4 zue $5 zuegordnet wore",
"rightsnone": "(keini)",
+ "revdelete-summary": "Zämmefassig",
+ "feedback-adding": "Ruggmäldig wird zur Syte dezuegfiegt …",
+ "feedback-bugcheck": "Schen! Bitte iberprief no, eb s sich doderby nit um e scho [$1 bekannte Fähler] handlet.",
+ "feedback-bugnew": "Ich haa s iberprieft. Dr nej Fähler mälde.",
"feedback-bugornote": "Wän Du detailliert e tächnisch Probläm witt bschryybe, no mäld bitte [$1 ne Fähler].\nSunscht chasch au s eifach Formular unte nutze. Dyy Kommentar wird, zämme mit Dyym Benutzername un dr Version vu Dyym Webbrowser un em Betribssyschtem, uf dr Syte „[$3 $2]“ zuegfiegt.",
- "feedback-subject": "Beträff:",
- "feedback-message": "Noochricht:",
"feedback-cancel": "Abbräche",
- "feedback-submit": "Ruggmäldig abschigge",
- "feedback-adding": "Ruggmäldig wird zur Syte dezuegfiegt …",
+ "feedback-close": "Isch gmacht",
"feedback-error1": "Fäälermäldig: Unbekannts Ergebniss vo de API",
"feedback-error2": "Fääler: Bearbeitig fehlgschlo",
"feedback-error3": "Fäälermäldig: Kei Antwort vo de API",
+ "feedback-message": "Noochricht:",
+ "feedback-subject": "Beträff:",
+ "feedback-submit": "Ruggmäldig abschigge",
"feedback-thanks": "Dankschen. Dyy Ruckmäldig isch uf dr Syte „[$2 $1]“ gspycheret wore.",
- "feedback-close": "Isch gmacht",
- "feedback-bugcheck": "Schen! Bitte iberprief no, eb s sich doderby nit um e scho [$1 bekannte Fähler] handlet.",
- "feedback-bugnew": "Ich haa s iberprieft. Dr nej Fähler mälde.",
"searchsuggest-search": "Suechi",
"searchsuggest-containing": "din het s …",
"api-error-badaccess-groups": "Du derfsch keini Dateie in des Wiki uffelade.",
diff --git a/languages/i18n/gu.json b/languages/i18n/gu.json
index 26fa4cb8..681e60da 100644
--- a/languages/i18n/gu.json
+++ b/languages/i18n/gu.json
@@ -21,7 +21,9 @@
"RaviC",
"Sushant savla",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Vyom",
+ "Macofe"
]
},
"tog-underline": "કડીઓની નીચે લીટી (અંડરલાઇન):",
@@ -48,7 +50,7 @@
"tog-shownumberswatching": "ધ્યાન રાખતા સભ્યોની સંખ્યા બતાવો",
"tog-oldsig": "હાલના હસ્તાક્ષર:",
"tog-fancysig": "હસ્તાક્ષરનો વિકિલખાણ તરીકે ઉપયોગ કરો (સ્વચાલિત કડી વગર)",
- "tog-uselivepreview": "જીવંત પૂર્વદર્શન વાપરો (પ્રાયોગીક)",
+ "tog-uselivepreview": "જીવંત પૂર્વદર્શન વાપરો",
"tog-forceeditsummary": "કોરો 'ફેરફાર સારાંશ' ઉમેરતા પહેલા મને ચેતવો",
"tog-watchlisthideown": "'મારી ધ્યાનસુચી'માં મે કરેલા ફેરફારો છુપાવો",
"tog-watchlisthidebots": "ધ્યાનસુચીમાં બોટ દ્વારા થયેલા ફેરફાર સંતાડો.",
@@ -223,6 +225,7 @@
"otherlanguages": "અન્ય ભાષાઓમાં",
"redirectedfrom": "($1 થી અહીં વાળેલું)",
"redirectpagesub": "પાનું અન્યત્ર વાળો",
+ "redirectto": "દિશાનિર્દેશિત",
"lastmodifiedat": "આ પાનામાં છેલ્લો ફેરફાર $1ના રોજ $2 વાગ્યે થયો.",
"viewcount": "આ પાનું {{PLURAL:$1|એક|$1}} વખત જોવામાં આવ્યું છે.",
"protectedpage": "સંરક્ષિત પાનું",
@@ -233,6 +236,7 @@
"pool-timeout": "સમય સમાપ્ત - સ્થગિતતા પ્રતિક્ષીત",
"pool-queuefull": "(Pool) કતાર પૂરી ભરેલી છે",
"pool-errorunknown": "અજ્ઞાત ત્રુટિ",
+ "poolcounter-usage-error": "વપરાશ ક્ષતિ: $1",
"aboutsite": "{{SITENAME}} વિષે",
"aboutpage": "Project:વિષે",
"copyright": "અલગથી ઉલ્લેખ ન કરાયો હોય ત્યાં સુધી માહિતી $1 હેઠળ ઉપલબ્ધ છે.",
@@ -399,6 +403,7 @@
"gotaccountlink": "પ્રવેશ કરો",
"userlogin-resetlink": "પોતાની પ્રવેશ માહિતી ભૂલી ગયા છો?",
"userlogin-resetpassword-link": "તમારો પાસવર્ડ ભૂલી ગયા છો?",
+ "userlogin-helplink2": "પ્રવેશ કરવા માટે મદદ",
"userlogin-loggedin": "તમે પહેલેથી {{GENDER:$1|$1}} તરીકે પ્રવેશ કરેલો જ છે.\nબીજા સભ્ય તરીકે પ્રવેશ કરવા માટે નીચેનું ફોર્મ વાપરો.",
"userlogin-createanother": "બીજું ખાતું બનાવો",
"createacct-emailrequired": "ઇમેલ સરનામું",
@@ -507,7 +512,6 @@
"passwordreset-emailsent-capture": "પાસવર્ડ બદલવાનો ઇમેલ મોકલવામાં આવ્યો છે, જે નીચે પ્રમાણે છે.",
"passwordreset-emailerror-capture": "પાસવર્ડ ફરી ગોઠવવા માટેનો ઇમેલ બનાવવામાં આવ્યો છે, જે નીચે પ્રમાણે છે, પરંતુ તે {{GENDER:$2|સભ્ય}}ને મોકલવામાં નિષ્ફળ થયો છે: $1",
"changeemail": "ઇમેલ સરનામું બદલો",
- "changeemail-header": "તમારા ખાતાનું ઇમેલ સરનામું બદલો",
"changeemail-text": "તમારું ઈ-મેઈલ સરનામું બદલવા માટે આ ફોર્મ ભરો. આ ફેરફાર કાયમ કરવા માટે તમારે પાસવર્ડ ભરવાની જરૂર પડશે.",
"changeemail-no-info": "બારોબાર આ પાનું જોવા માટે પ્રવેશ કરવો આવશ્યક છે.",
"changeemail-oldemail": "હાલનું ઈમેલ સરનામું:",
@@ -515,7 +519,6 @@
"changeemail-none": "(કંઈ નહી)",
"changeemail-password": "તમારો {{SITENAME}} પાસવર્ડ:",
"changeemail-submit": "ઈમેલ બદલો",
- "changeemail-cancel": "રદ કરો",
"resettokens": "નિશાનીઓ ફરી ગોઠવો",
"resettokens-no-tokens": "અહીં ફરી ગોઠવવા માટેનાં કોઇ ટોકન નથી",
"resettokens-legend": "નિશાનીઓ ફરી ગોઠવો",
@@ -548,7 +551,7 @@
"preview": "પૂર્વાવલોકન",
"showpreview": "ઝલક દર્શાવો",
"showdiff": "ફેરફારો દર્શાવો",
- "anoneditwarning": "'''ચેતવણી:''' તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી.\nઆ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે.",
+ "anoneditwarning": "<strong>ચેતવણી:</strong> તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી.\nઆ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે અને તમારૂં આઈ.પી. લોકો જાહેર રીતે જોઈ શકશે. માટે <strong>[$1 પ્રવેશ કરો]</strong> અથવા તમે <strong>[$2 ખાતું બનાવો]</strong> તો ફેરફારો તમારા સભ્યનામ હેઠળ થશે અને અન્ય ફાયદાઓ પણ મળશે.",
"anonpreviewwarning": "તમે સભ્યનામથી પ્રવેશ કર્યો નથી,આ પાનું ઈતિહાસમાંતમારા IP સરનામાના નામે સાચવવામાં આવશે",
"missingsummary": "'''ચેતવણી:''' તમે ફેરફારનો સારંશ નથી આપ્યો.\nજો તમે \"{{int:savearticle}}\" પર ક્લીક કરશો તો તમરો ફેરફારા સારાઁશાવગરાસાચવવામાં આવશે",
"missingcommenttext": "કૃપા કરી નીચે ટીપ્પણી લખો.",
@@ -663,7 +666,7 @@
"currentrev": "હાલની આવૃત્તિ",
"currentrev-asof": "$1એ જોઈ શકાતી હાલની આવૃત્તિ",
"revisionasof": "$1 સુધીનાં પુનરાવર્તન",
- "revision-info": "$2 દ્વારા $1 સુધીમાં કરવામાં આવેલાં ફેરફારો",
+ "revision-info": "{{GENDER:$6|$2}}$7 દ્વારા $1 સુધીમાં કરવામાં આવેલાં ફેરફારો",
"previousrevision": "← જુના ફેરફારો",
"nextrevision": "આ પછીનું પુનરાવર્તન→",
"currentrevisionlink": "વર્તમાન આવૃત્તિ",
@@ -688,6 +691,7 @@
"rev-deleted-event": "(લોગ ક્રિયા હટાવાઈ)",
"rev-deleted-user-contribs": "[સભ્યનામ કે IP સરનામું હટાવી દેવાયું છે - યોગદાનામાં આ ફેરફાર અદ્રશ્ય છે]",
"rev-deleted-text-permission": "આ પુનરાવર્તન હટાવી દેવાયું છે\nઆની વિસ્તરીત માહિતી અહીં મળશે [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+ "rev-suppressed-text-permission": "આ પાનાં પરનું પુનરાવર્તન <strong>છુપાવવામાં</strong> આવ્યું છે. તેની વધુ વિગત [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} છુપાવાયેલના લોગ] પરથી મળશે.",
"rev-deleted-text-unhide": "આ પાનાની નવી આવૃત્તિ ''હટાવી છે '''.\nવિગતો શોધી શકાય છે [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\nતમે હજુ પણ [$1 view this revision] આ આવૃત્તિ જોવા શકો છો જો તમે આગલ વધવા માંગો તો.",
"rev-suppressed-text-unhide": "આ પાના ફેરફારો ''' સંતાડવામાં ''' આવ્યાં છે.\nતેની વિગતો અહીં શોધી શકાય છે [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].\nતમે હજુ પણ [$1 view this revision] આ આવૃત્તિ જોઈશકો છો જો તમે આગળ વધવા માંગો તો.",
"rev-deleted-text-view": "આ પાનું આવૃત્તિ''ગયેલ છે '''કાઢી.\nતમે તેને જોઈ શકે છે; વિગતો શોધી શકાય છે [{{fullurl: {{# વિશેષ:}} લોગ / કાઢી | પાનું = {{FULLPAGENAMEE}}}} કાઢી નાંખવાનું લોગ].",
@@ -706,6 +710,7 @@
"revdelete-no-file": "વર્ણવેલી ફાઈલ અસ્તિત્વમાં નથી",
"revdelete-show-file-confirm": "શું તમને ખાત્રી છે કેતમે $2 તારીખ $3 વાગ્યા સુધીના \"<nowiki>$1</nowiki>\" ફાઇલ ના ફેરફાર જોવા માંગો છો?",
"revdelete-show-file-submit": "હા",
+ "revdelete-selected-text": "[[:$2]]: નું {{PLURAL:$1|Selected revision|પસંદ કરાયેલ પુનરાવર્તન}}",
"logdelete-selected": "{{PLURAL:$1|પસંદગી કરેલ લોગ ઘટના | પસંદગી કરેલ લોગ ઘટનાઓ }}:",
"revdelete-confirm": "કૃપયા પુષ્ટિ કરો કે તમે શું કરી રહ્યા છો તેની અને તેના પરિણામોની તમને જાણ છે અને તમે આ બધું [[{{MediaWiki:Policy-url}}|the policy]] અ6તર્ગત કરી રહ્યાં છો.",
"revdelete-suppress-text": "બળ પૂર્વક છુપાવવું \"માત્ર\" આજ સંજોગોમાં કરી શકાશે:\n* સંભવતઃ ભયાજનક માહિતી \n* અયોગ્ય નિજી માહિતી \n*: ''ઘરનું સરનામું અને ટેલિફોન નંબર, રાષ્ટ્રીય ઓળખ ક્રમાંકો વગેરે.''",
@@ -723,9 +728,9 @@
"revdelete-unsuppress": "સમા કરાયેલા પુનરાવર્તનો પરના પ્રતિબંધ હટાવો",
"revdelete-log": "કારણ:",
"revdelete-submit": "પસંદ કરેલા {{PLURAL:$1|ફેરફાર|ફેરફારો}} પર લગાડો",
- "revdelete-success": "પુનરવર્તન દ્રશ્યતાસફળતા પૂર્વક અદ્યતન બનાવાઈ",
+ "revdelete-success": "પુનરાવર્તન દ્રશ્યતા સફળતા પૂર્વક અદ્યતન બનાવાઈ",
"revdelete-failure": "'''પુનરાવર્તનની દ્રશ્યતા બદલીન શકાઈ:'''\n$1",
- "logdelete-success": "'''લોગની દ્રશ્યતા સફળતાપૂર્વક ગોઠવાઈ'''",
+ "logdelete-success": "<strong>લોગની દ્રશ્યતા સફળતાપૂર્વક ગોઠવાઈ</strong>",
"logdelete-failure": "'''લોગની દ્રશ્યતા ગોઠવી ન શકાઈ :'''\n$1",
"revdel-restore": "દૃષ્ટિક્ષમતા બદલો",
"pagehist": "પાનાનો ઇતિહાસ",
@@ -765,7 +770,6 @@
"mergehistory-same-destination": "સ્રોત અને લક્ષ્ય પાના એક સમાન ના હોઈ શકે",
"mergehistory-reason": "કારણ:",
"mergelog": "લોગ વિલિન કરો",
- "pagemerge-logentry": "[[$1]] ને [[$2]]માં વિલિન કરાયું ( $3 સુધી ના પુનરાવર્તનો)",
"revertmerge": "છુટું પાડો",
"mergelogpagetext": "તાજેતરમાં એક બીજા સાથે વિલિન થયેલ ઇતિહાસ પાનાની યાદી",
"history-title": "\"$1\"ના ફેરફારોનો ઇતિહાસ",
@@ -811,7 +815,6 @@
"searchrelated": "શોધ સંબંધિત",
"searchall": "બધા",
"showingresults": " {{PLURAL:$1|'''1''' પરિણામ|'''$1''' પરિણામો}} સુધી #'''$2''' થી શરૂ કરી",
- "showingresultsheader": "'''$4''' માટે {{PLURAL:$5|પરિણામ '''$1''' of '''$3'''|પરિણામો '''$1 - $2''' of '''$3'''}}",
"search-nonefound": "તમે આપેલી માહિતી ને મળતાં આવતાં કોઈ પરિણામો નથી",
"powersearch-legend": "વધુ પર્યાયો સાથે શોધો",
"powersearch-ns": "નામસ્થળોમાં શોધો:",
@@ -1290,6 +1293,7 @@
"license-nopreview": "(ઝલક મોજુદ નથી)",
"upload_source_url": "(યોગ્ય, જાહેર URL માંથી તમે પસંદ કરેલ ફાઇલ)",
"upload_source_file": "(તમારા કોમ્પ્યુટર પરની તમે પસંદ કરેલી એક ફાઇલ)",
+ "listfiles-delete": "દૂર કરો",
"listfiles-summary": "આ વિશિષ્ટ પાનું બધી અપલોડ કરાયેલી ફાઈલો દર્શાવે છે.",
"listfiles_search_for": "મિડિયા નામ શોધો:",
"imgfile": "ફાઇલ",
@@ -1374,14 +1378,12 @@
"randomincategory": "શ્રેણીમાં ગમે તે પાનું",
"randomincategory-invalidcategory": "\"$1\" એ યોગ્ય શ્રેણી નામ નથી.",
"randomincategory-nopages": "[[:Category:$1|$1]] વર્ગમાં કોઇ પાનું નથી.",
- "randomincategory-selectcategory": "વર્ગમાંથી ગમે તે પાનું મેળવો: $1 $2.",
- "randomincategory-selectcategory-submit": "જાઓ",
+ "randomincategory-category": "શ્રેણી:",
"randomredirect": "દિશાહીન નિર્દેશન",
"randomredirect-nopages": "નામ સ્થળ \"$1\" માં કોઇ દિશા નિર્દેશન નથી",
"statistics": "આંકડાકીય માહિતી",
"statistics-header-pages": "પાના સંબંધી આંકડાકીય માહિતી",
"statistics-header-edits": "આંકડાકીય માહિતી બદલો",
- "statistics-header-views": "આંકડાકીય માહિતી જુઓ",
"statistics-header-users": "સભ્ય સંબંધી આંકડાકીય માહિતી",
"statistics-header-hooks": "અન્ય આંકડાકીય માહિતી",
"statistics-articles": "લેખનું પાનું",
@@ -1390,13 +1392,9 @@
"statistics-files": "ચડાવેલ ફાઇલો",
"statistics-edits": "{{SITENAME}} શરૂ થયા પછી ફેરફાર થયેલ પાના",
"statistics-edits-average": "પાનાં દીઠ સરેરાશ ફેરફારો",
- "statistics-views-total": "સરવાળો",
- "statistics-views-total-desc": "અવિહરમાન પાના અને ખાસ પાના આમા શામિલ નથી.",
- "statistics-views-peredit": "ફેરફાર દીઠ અવલોકનો",
"statistics-users": "નોંધણી થયેલ [[Special:ListUsers|users]]",
"statistics-users-active": "સક્રીય સભ્યો",
"statistics-users-active-desc": "સભ્ય કે જેમણે છેલ્લા {{PLURAL:$1|દિવસ|$1 દિવસો}}માં ફેરફારો કર્યાં છે",
- "statistics-mostpopular": "સૌથી વધુ જોવાયેલા પાના",
"pageswithprop": "પાનાં ગુણધર્મ સાથેનાં પાનાંઓ",
"pageswithprop-legend": "પાનાં ગુણધર્મ સાથેનાં પાનાંઓ",
"pageswithprop-prop": "ગુણધર્મ નામ:",
@@ -1433,7 +1431,6 @@
"uncategorizedtemplates": "અવર્ગીકૃત ઢાંચાઓ",
"unusedcategories": "વણ વપરાયેલી શ્રેણીઓ",
"unusedimages": "વણ વપરાયેલાં દસ્તાવેજો",
- "popularpages": "પ્રખ્યાત પાના",
"wantedcategories": "ઇચ્છિત શ્રેણીઓ",
"wantedpages": "ઇચ્છિત પાનાં",
"wantedpages-badtitle": "પરિણામ ગણમાં અવૈધ શીર્ષક: $1",
@@ -1490,7 +1487,7 @@
"booksources": "પુસ્તક સ્રોત",
"booksources-search-legend": "પુસ્તક સ્રોત શોધો",
"booksources-isbn": "આઇએસબીએન:",
- "booksources-go": "જાઓ",
+ "booksources-search": "શોધ",
"booksources-text": "નીચે દર્શાવેલ યાદી એ કડીઓ બતાવે છે જેઓ નવા અને જૂના પુસ્તકો વેચે છે , અને તમે માંગેલ વસ્તુ સંબંધિ વધુ મહિતી પણ ધરાવી શકે છે.",
"booksources-invalid-isbn": "આપેલ ISBN વૈધ નથી લાગતો; મૂળ સ્રોતને ચકાસી, ભૂલ શોધી, ખરી માહિતી આપો.",
"specialloguserlabel": "અભિનય:",
@@ -1607,7 +1604,7 @@
"wlheader-enotif": "ઈમેલ સૂચના પદ્ધતિ સક્રીય કરાઈ.",
"wlheader-showupdated": "તમારી છેલ્લી મુલાકાત પછી બદલાયેલાં પાના '''ઘાટા''' અક્ષરો વડે દર્શાવ્યાં છે.",
"wlnote": "નીચે $3, $4 વાગ્યા સુધીના છેલ્લા {{PLURAL:$2|એક કલાક|'''$2''' કલાક}}માં થયેલા {{PLURAL:$1|ફેરફાર|'''$1''' ફેરફારો }} દર્શાવ્યા છે.",
- "wlshowlast": "છેલ્લા $1 કલાક $2 દિવસ $3 બતાવો",
+ "wlshowlast": "છેલ્લા $1 કલાક $2 દિવસ બતાવો",
"watchlist-options": "ધ્યાનસૂચિના વિકલ્પો",
"watching": "નજર રાખી રહ્યાં છો...",
"unwatching": "નજર રાખવાની બંધ કરી છે...",
@@ -1653,7 +1650,6 @@
"delete-toobig": "આ પાનાના ફેરફારોનો ઇતિહાસ ખૂબ લાંબો છે , $1 {{PLURAL:$1|ફેરફાર|ફેરફારો}}થી પણ વધારે.\n{{SITENAME}}ને અક્સ્માતે ખોરવાતું અટકાવવા આવા પાનાને હટાવવા પર પ્રતિબંધ છે.",
"delete-warning-toobig": "આ પાનાનો ઇતિહાસ ઘણો લાંબો છે લગભગ $1 {{PLURAL:$1|ફેરફાર|ફેરફારો}}.\nતેને ભૂંસતા {{SITENAME}}ના માહિતીસંચને લાગતા કામકાજ પર અસર થૈ શકે છે;\nસંભાળ પૂર્વક આગળ વધો.\n\n\nDeleting it may disrupt database operations of {{SITENAME}};",
"rollback": "ફેરફારો ઉલટાવો",
- "rollback_short": "ઉલટાવો",
"rollbacklink": "પાછું વાળો",
"rollbacklinkcount": "$1 {{PLURAL:$1|ફેરફાર પાછો વાળો|ફેરફારો પાછા વાળો}}",
"rollbacklinkcount-morethan": "$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}} કરતાં ઓછું પાછું લાવો",
@@ -1978,7 +1974,7 @@
"move-over-sharedrepo": "== ફાઇલ અસ્તિત્વ ધારાવે છે ==\nસર્વસામાન્ય ફાઇલ સંગ્રહમાં [[:$1]] પહેલેથી મોજૂદ છે. આ સ્થળે કોઇ અન્ય ફાઇલ હટાવતા વિહરમાન ફાઇલની માહિતી પર આ ફાઇલ લખાશે.",
"file-exists-sharedrepo": "પસંદ કરેલ ફાઇલ ના નામે અન્ય ફાઇલ પહેલેથી સર્વ સામાન્ય ફાઇલ સંગ્રહમાં મોજૂદ છે/\nકૃપયા અન્ય નામ પસંદ કરો.",
"export": "પાનાઓની નિકાસ કરો/પાના અન્યત્ર મોકલો",
- "exporttext": "તમે કોઇ એક પાનાનું લેખન અને ઇતિહાસ નિકાસ કરી શકો અથવા કોઇ XML પાનામાં વેંટાળી શકો.\nમિડીયા વિકિ ના [[Special:Import|import page]] નો ઉપયોગ કરી આ પાનાને અન્ય વિકિમાં ખસેડી શકો.\n\nપાનાની નિકાસ કરવા, નીચેના ચોકઠામાં તેના શીર્ષકો લખો, એક લિટીમાં એક શીર્ષક, અનેપસંદ કરો કે તમારે પ્રાચીન ફેરફારો સાથે ઇતિહાસના પાના સાથે નવા ફેરફારો અને હાલના ફેરફારની માહિતી લઇ જવી છે.\n\nપાછળના વિકલ્પ પસંદ કરવા તમે આ કડી વાપરી શકો [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] આ પાના માટે \"[[{{MediaWiki:Mainpage}}]]\".",
+ "exporttext": "તમે કોઇ એક પાનાનું લેખન અને ઇતિહાસ નિકાસ કરી શકો અથવા કોઇ XML પાનામાં વિંટાળી શકો છો.\nમિડીયાવિકિના [[Special:Import|import page]] નો ઉપયોગ કરી આ પાનાને અન્ય વિકિમાં ખસેડી શકો છો.\n\nપાનાની નિકાસ કરવા, નીચેના ચોકઠામાં તેના શીર્ષકો લખો, એક લિટીમાં એક શીર્ષક, અનેપસંદ કરો કે તમારે પ્રાચીન ફેરફારો સાથે ઇતિહાસના પાના સાથે નવા ફેરફારો અને હાલના ફેરફારની માહિતી લઇ જવી છે.\n\nપાછળના વિકલ્પ પસંદ કરવા તમે આ કડી વાપરી શકો [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] આ પાના માટે \"[[{{MediaWiki:Mainpage}}]]\".",
"exportall": "બધાં પાનાઓ નિકાસ કરો/પાના અન્યત્ર મોકલો",
"exportcuronly": "માત્ર હાલના ફેરફારો જુઓ , પૂર્ણ ઇતિહાસ નહી.",
"exportnohistory": "----\n'''નોંધ:''' કાર્યક્ષમતાને લાગતા કારણોને લીધે આ રૂપમાં ઇતિહાસ પાનાની નિકાસ ને નિષ્ક્રીય કરાઇ છે.",
@@ -2022,7 +2018,6 @@
"import": "પાના આયાત કરો",
"importinterwiki": "ટ્રાંસ વિકિ આયાત",
"import-interwiki-text": "આયાત કરવા માટેનાં પાનાનું શીર્ષક અને વિકિ પસંદ કરો.\nફેરફારની તારીખ અને લેખકો વિષેની માહિતી જેમની તેમ રાખવામાં આવશે.\nબધા જ આંતરવિકિ આયાતની નોંધ [[Special:Log/import|import log]]માં રખાય છે.",
- "import-interwiki-source": "સ્રોત વિકિ/પાનું:",
"import-interwiki-history": "આ પાનું બધા ફેરફારોના ઇતિહાસ સાથે આયાત કરો",
"import-interwiki-templates": "બધા ઢાંચા શામિલ કરો",
"import-interwiki-submit": "આયાત કરો",
@@ -2058,18 +2053,14 @@
"import-error-invalid": "પાનું \"$1\" આયાત થયું નથી કારણ કે તેનું નામ આ વિકિ માટે અયોગ્ય છે.",
"importlogpage": "આયાત માહિતિ પત્રક",
"importlogpagetext": "અન્ય વિકિમાંથી ઈતિહાસ સહિત પાનાની પ્રબંધકીય આયાત",
- "import-logentry-upload": "ફાઇલ ચઢાવનાર દ્વારા [[$1]] આયાત કરાઇ",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}} આયાત કરેલ છે",
- "import-logentry-interwiki": "આંતરવિકિ $1",
"import-logentry-interwiki-detail": "$2 માંથી આયાત કરેલ $1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}}",
"javascripttest": "જાવા સ્ક્રીપ્ટ પરીક્ષણ",
- "javascripttest-title": "$1 પરીક્ષણ જારી",
"javascripttest-pagetext-noframework": "આ પાનું જાવા સ્ક્રીપ્ટ ચલાવવા આરક્ષિત છે.",
"javascripttest-pagetext-unknownframework": "અજાણ ચકાસણી ફ્રેમવર્ક \"$1\".",
"javascripttest-pagetext-frameworks": "નીચેનામાંથી કોઈ એક ચકાસણી ફ્રેમવર્ક પસંદ કરો : $1",
"javascripttest-pagetext-skins": "ચકાસણી કરવા માટેની સ્કીન પસંદ કરો",
"javascripttest-qunit-intro": "mediawiki.org પર [$1 testing documentation] તપાસ માહિતી જુઓ",
- "javascripttest-qunit-heading": "મિડિયા વિકી જાવા સ્ક્રીપ્ટ QUnit test suite",
"tooltip-pt-userpage": "તમારૂં પાનું (તમારૂં 'મારા વિષે')",
"tooltip-pt-anonuserpage": "IP સરનામું માટેના સભ્ય પાનામાં તમે ફેરફાર કરી રહ્યાં છો.",
"tooltip-pt-mytalk": "તમારૂં ચર્ચાનું પાનું",
@@ -2079,6 +2070,7 @@
"tooltip-pt-mycontris": "તમારા યોગદાનની યાદી",
"tooltip-pt-login": "આપને પ્રવેશ કરવા ભલામણ કરવામાં આવે છે, જોકે તે આવશ્યક નથી",
"tooltip-pt-logout": "બહાર નીકળો/લૉગ આઉટ કરો",
+ "tooltip-pt-createaccount": "તમને ખાતું બનાવીને પ્રવેશ કરવા માટે આમંત્રણ છે; તેમ કરવું જોકે, જરૂરી નથી.",
"tooltip-ca-talk": "અનુક્રમણિકાનાં પાના વિષે ચર્ચા",
"tooltip-ca-edit": "આપ આ પાનામાં ફેરફાર કરી શકો છો, કાર્ય સુરક્ષિત કરતાં પહેલાં 'ઝલક' બટન ઉપર ક્લિક કરીને જોઇ લેશો",
"tooltip-ca-addsection": "ચર્ચાનો નવો મુદ્દો ઉમેરો.",
@@ -2166,7 +2158,6 @@
"pageinfo-robot-policy": "રોબોટ્સ દ્વારા અનુક્રમિત",
"pageinfo-robot-index": "માન્ય",
"pageinfo-robot-noindex": "અમાન્ય",
- "pageinfo-views": "જોનારાની સંખ્યા",
"pageinfo-watchers": "પાના નીરીક્ષકોની સંખ્યા",
"pageinfo-redirects-name": "આ પાનાં પર દિશાનિર્દેશનોની સંખ્યા",
"pageinfo-subpages-name": "આ પાનાંનું ઉપપાનું",
@@ -2603,7 +2594,6 @@
"exif-urgency-low": "નિમ્ન ($1)",
"exif-urgency-high": "ઉચ્ચ ($1)",
"exif-urgency-other": "વપરાશકર્તા-વ્યાખ્યાયિત અગ્રતા ($1)",
- "watchlistall2": "બધા",
"namespacesall": "બધા",
"monthsall": "બધાં",
"confirmemail": "તમારા ઇ-મેઇલ સરનામાની પુષ્ટિ કરો",
@@ -2679,7 +2669,6 @@
"watchlisttools-edit": "ધ્યાનસૂચી જુઓ અને બદલો",
"watchlisttools-raw": "કાચી ધ્યાનસૂચિમાં ફેરફાર કરો",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
- "unknown_extension_tag": "અજ્ઞાત વિસ્તારક શબ્દ \"$1\"",
"duplicate-defaultsort": "'''ચેતવણી:''' કી \"$2\" આગળનામૂળે પ્રસ્થાપિત ક્રમિકાવર્ગીકરણ કી \"$1\"નું સ્થાન લઈ લેશે..",
"version": "આવૃત્તિ",
"version-extensions": "પ્રસ્થાપિત વિસ્તારકો",
@@ -2695,7 +2684,7 @@
"version-parser-function-hooks": "પદચ્છેદ કાર્ય ખૂંટા",
"version-hook-name": "ખૂંટાનું નામ્",
"version-hook-subscribedby": "દ્વ્રારા લાભાન્વીત",
- "version-version": "(આવૃત્તિ $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[નામ નથી]",
"version-license": "મીડિઆવિકિ લાયસન્સ",
"version-ext-license": "લાયસન્સ",
@@ -2801,18 +2790,18 @@
"logentry-delete-restore": "$1 {{GENDER:$2|પુનઃસંગ્રહ}} પાનું $3",
"logentry-delete-event": "$1 એ {{PLURAL:$5|લૉગ ઘટના|$5 લૉગ ઘટનાઓ}} ની દ્રશ્યતા $3 પર {{GENDER:$2|બદલેલ}} છે: $4",
"logentry-delete-revision": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ ના દૃશ્યતા {{PLURAL:$5 | સુધારણા | $5 આવૃત્તિઓ}} $3 પાનાં પર: $4",
- "logentry-delete-event-legacy": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ $3 પર લોગ ઘટનાઓ દૃશ્યતા",
+ "logentry-delete-event-legacy": "$1 એ $3 પર ફેરફારની દૃશ્યતા બદલી",
"logentry-delete-revision-legacy": "$1 {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
"logentry-suppress-delete": "$1 એ $3 પાનું {{GENDER:$2|દબાવ્યું}}",
- "logentry-suppress-event": "$1 (છાની માહિતી) {{GENDER:$2|બદલેલ}} બદલાઈ {{PLURAL:$5 | લોગ ઘટના | $5 લોગ}} ની દ્રશ્યતા $3 : $4",
+ "logentry-suppress-event": "$1 ખાનગી રીતે {{GENDER:$2|દ્વારા માહિતીની દૃશ્યતા}} $3 : $4 પર બદલાઈ {{PLURAL:$5 | લોગ ઘટના | $5 લોગ}}",
"logentry-suppress-revision": "$1 છાની માહિતી {{GENDER:$2|બદલેલ}} બદલાઈ ના દૃશ્યતા {{PLURAL:$5 | આવૃત્તિ એ | $5 આવૃત્તિઓ}}: $4 $3 પાનાં પર",
- "logentry-suppress-event-legacy": "$1 ગુપ્ત {{GENDER:$2|બદલેલ}} બદલો $3 પર લોગ ઘટનાઓ દૃશ્યતા",
+ "logentry-suppress-event-legacy": "$1એ ગુપ્ત રીતે $3 પર લોગ ઘટનાઓની દૃશ્યતા બદલી",
"logentry-suppress-revision-legacy": "$1 ગુપ્ત {{GENDER:$2|બદલેલ}} બદલાઈ પાનાં પર આવૃત્તિઓની દૃશ્યતા $3",
- "revdelete-content-hid": "સામગ્રી છુપાયેલા",
- "revdelete-summary-hid": "ફેરફાર સાર છુપાયેલા",
+ "revdelete-content-hid": "માહિતી છુપાવી",
+ "revdelete-summary-hid": "ફેરફારનો સારાંશ છુપાવ્યો",
"revdelete-uname-hid": "વપરાશકર્તા નામ છુપાયેલા",
- "revdelete-content-unhid": "સામગ્રી છુપાવેલ નથીં",
- "revdelete-summary-unhid": "ફેરફાર સાર છુપાવેલ નથીં",
+ "revdelete-content-unhid": "માહિતી છુપાવેલ નથીં",
+ "revdelete-summary-unhid": "ફેરફાર સારાંશ છુપાવેલ નથીં",
"revdelete-uname-unhid": "વપરાશકર્તા નામ છુપાવેલ નથીં",
"revdelete-restricted": "પ્રબઁધકોના ફેરફાર કરવા પર પ્રતિબંધ મુકાયો",
"revdelete-unrestricted": "પ્રબંધકોના ફેરફાર કરવા પર પ્રતિબંધ હટાવાયો.",
@@ -2827,19 +2816,20 @@
"logentry-newusers-create2": "સભ્ય ખાતું $3 $1 વડે {{GENDER:$2|બનાવવામાં આવ્યું હતું}}",
"logentry-newusers-autocreate": "વપરાશકર્તા ખાતું $1 આપમેળે {{GENDER:$2|બનાવવામાં આવ્યું હતું}}",
"rightsnone": "(કંઈ નહી)",
+ "revdelete-summary": "સંપાદનનો સંક્ષિપ્ત અહેવાલ",
+ "feedback-adding": "પ્રતિભાવ આ પાના પર ઉમેરાઈ રહ્યો છે.",
+ "feedback-bugcheck": "સરસ! જરા જોઈ લેશો કે આ પહેલેથી જ હાજર [$1 known bugs] નથીને?",
+ "feedback-bugnew": "મેં તપાસ્યું. નવી ત્રુટીની જાણ કરો.",
"feedback-bugornote": "જો તમે તકનીકી સમસ્યા વર્ણવવા માંગતા હોય તો કૃપયા [$1 report a bug] એ બગ અહીં નોંધાવો.\nઅન્યથા, તમે નીચે આપેલ સરળ ફોર્મ વાપરી શકો છો. તમારા સભ્ય નામ અને કયું બ્રાઉઝર વાપરો છો તેની માહિતી સાથે, તમારી ટિપ્પણીનો \"[$3 $2]\" પાનામાં સમાવેશ કરાશે.",
- "feedback-subject": "વિષય:",
- "feedback-message": "સંદેશ",
"feedback-cancel": "રદ કરો",
- "feedback-submit": "પ્રતિભાવ આપો",
- "feedback-adding": "પ્રતિભાવ આ પાના પર ઉમેરાઈ રહ્યો છે.",
+ "feedback-close": "સંપન્ન",
"feedback-error1": "ક્ષતિ:API તરફથી અજાણ પરિણામ",
"feedback-error2": "ક્ષતિ:ફેરફાર નિષ્ફળ",
"feedback-error3": "ત્રુટી: API તરફથી કોઈ પ્રત્યુત્તર નથી",
+ "feedback-message": "સંદેશ",
+ "feedback-subject": "વિષય:",
+ "feedback-submit": "જમા કરો",
"feedback-thanks": "આભર! તમારા પ્રતિભાવને \"[$2 $1]\" પાના પર મુકાયા છે.",
- "feedback-close": "સંપન્ન",
- "feedback-bugcheck": "સરસ! જરા જોઈ લેશો કે આ પહેલેથી જ હાજર [$1 known bugs] નથીને?",
- "feedback-bugnew": "મેં તપાસ્યું. નવી ત્રુટીની જાણ કરો.",
"searchsuggest-search": "શોધો",
"searchsuggest-containing": "ધરાવતી...",
"api-error-badaccess-groups": "આ વિકિ પર ફાઈલ ચઢાવવાની પરવાનગી તમને નથી.",
@@ -2907,5 +2897,24 @@
"pagelang-language": "ભાષા",
"pagelang-select-lang": "ભાષા પસંદ કરો",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (સક્રિય)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''નિષ્ક્રિય''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''નિષ્ક્રિય''')",
+ "special-characters-group-latin": "લેટિન",
+ "special-characters-group-latinextended": "લેટિન વિસ્તૃત",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "સંજ્ઞાઓ",
+ "special-characters-group-greek": "ગ્રીક",
+ "special-characters-group-cyrillic": "સીરિલિક",
+ "special-characters-group-arabic": "અરેબિક",
+ "special-characters-group-arabicextended": "અરેબિક વિસ્તૃત",
+ "special-characters-group-persian": "પર્સિયન",
+ "special-characters-group-hebrew": "હિબ્રૂ",
+ "special-characters-group-bangla": "બાંગ્લા",
+ "special-characters-group-tamil": "તામિલ",
+ "special-characters-group-telugu": "તેલુગુ",
+ "special-characters-group-sinhala": "સિંહાલા",
+ "special-characters-group-gujarati": "ગુજરાતી",
+ "special-characters-group-devanagari": "દેવનાગરી",
+ "special-characters-group-thai": "થાઈ",
+ "special-characters-group-lao": "લાઓ",
+ "special-characters-group-khmer": "ખ્મેર"
}
diff --git a/languages/i18n/gv.json b/languages/i18n/gv.json
index ebce0189..b972f29c 100644
--- a/languages/i18n/gv.json
+++ b/languages/i18n/gv.json
@@ -682,7 +682,6 @@
"uncategorizedtemplates": "Clowanyn gyn ronney",
"unusedcategories": "Ronnaghyn neuymmydit",
"unusedimages": "Coadanyn neuymmydit",
- "popularpages": "Duillagyn cadjin",
"wantedcategories": "Ronnaghyn ry-laccal",
"wantedpages": "Duillagyn ry-laccal",
"wantedfiles": "Coadanyn ry-laccal",
@@ -713,7 +712,6 @@
"suppress": "Oaseirys",
"booksources": "Bun-gheillyn lioar",
"booksources-search-legend": "Jean ronsaghey er bun-gheillyn lioar",
- "booksources-go": "Gow",
"specialloguserlabel": "Ymmydeyr:",
"speciallogtitlelabel": "Ennym (duillag ny ymmydeyr):",
"log": "Lioaryn cooishyn",
@@ -758,7 +756,7 @@
"notanarticle": "Cha nel eh shoh ny ghuillag cummal",
"notvisiblerev": "Va'n aavriwnys scryssit",
"watchlist-details": "Ta {{PLURAL:$1|$1 duillag|$1 duillag|$1 ghuillag|$1 duillagyn}} er dty rolley arrey, faagail magh duillagyn resoonaght.",
- "wlshowlast": "Taishbyn ny kied $1 ooryn $2 laaghyn $3 s'jerree",
+ "wlshowlast": "Taishbyn ny kied $1 ooryn $2 laaghyn s'jerree",
"watchlist-options": "Reihyn da'n rolley arrey",
"watching": "Jannoo arrey...",
"unwatching": "Stap y chur er arrey...",
@@ -781,7 +779,6 @@
"deleteotherreason": "Fa elley/tooilley:",
"deletereasonotherlist": "Fa elley",
"deletereason-dropdown": "*Fa scryssey cadjin\n** Aghin yn ughtar\n** Brishey choip-chiart\n** Cragheydys",
- "rollback_short": "Aahogherys",
"rollbacklink": "aahogher",
"editcomment": "V'eh \"''$1''\" giare-choontys y reaghey.",
"protectlogpage": "Lioar choadee",
@@ -1019,7 +1016,6 @@
"exif-sharpness-2": "Creoi",
"exif-gpsspeed-k": "Kilometeryn 'syn oor",
"exif-gpsspeed-m": "Meeillaghyn 'syn oor",
- "watchlistall2": "yn clane",
"namespacesall": "yn clane",
"monthsall": "yn clane",
"recreate": "Aachroo",
@@ -1041,7 +1037,7 @@
"version": "Lhieggan",
"version-specialpages": "Duillagyn er lheh",
"version-other": "Elley",
- "version-version": "(Lhieggan $1)",
+ "version-version": "($1)",
"version-license": "Kiedoonys",
"version-software-version": "Lhieggan",
"fileduplicatesearch-filename": "Ennym y choadan:",
@@ -1053,6 +1049,7 @@
"specialpages-group-users": "Ymmydeyryn as kiartyn",
"tags-edit": "reaghey",
"rightsnone": "(veg)",
+ "revdelete-summary": "giare-choontey yn reaghey",
"searchsuggest-search": "Ronsaghey",
"searchsuggest-containing": "goaill stiagh...",
"expand_templates_ok": "OK",
diff --git a/languages/i18n/ha.json b/languages/i18n/ha.json
index 76e59452..7afcfaf3 100644
--- a/languages/i18n/ha.json
+++ b/languages/i18n/ha.json
@@ -340,7 +340,6 @@
"pager-older-n": "{{PLURAL:$1|tsoho 1|tsoffi $1}}",
"booksources": "Littattafai maƙiblata",
"booksources-search-legend": "Nemo tushen littattafai",
- "booksources-go": "Mu je",
"log": "Rajistoci ayyuka",
"allpages": "Duka shafuna",
"prevpage": "Shafi na baya ($1)",
@@ -362,7 +361,7 @@
"watchthispage": "Bin sawun wannan shafi",
"unwatch": "Daina bin sawu",
"watchlist-details": "{{PLURAL:$1|$1 shafi|$1 shafuna}} kan jerinku na bin sawu, banda shafunan mahawara.",
- "wlshowlast": "Nuna awowi $1 kwanaki $2 na ƙarshe $3",
+ "wlshowlast": "Nuna awowi $1 kwanaki $2 na ƙarshe",
"watchlist-options": "Saituttukan jerin bin sawu",
"watching": "Bin sawun...",
"unwatching": "Daina bin sawu...",
@@ -524,7 +523,6 @@
"metadata-expand": "Nuna ƙananan bayannai",
"metadata-collapse": "Ɓoye ƙananan bayannai",
"metadata-fields": "Gurabun bayannan meta na EXIF da ke jere cikin wannan saƙo, za a saka su ne cikin shafin zayyana majigin, idan aka taƙaita jadawalin bayannan metan.\n Wasu gurabun za a ɓoye su bisa manufa.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "duka",
"namespacesall": "duka",
"monthsall": "duka",
"watchlisttools-view": "Duba sauye-sauyen da suka dace",
diff --git a/languages/i18n/hak.json b/languages/i18n/hak.json
index 905c1407..36ec2d75 100644
--- a/languages/i18n/hak.json
+++ b/languages/i18n/hak.json
@@ -385,6 +385,7 @@
"gotaccountlink": "登入",
"userlogin-resetlink": "毋記得汝嘅登入信息?",
"userlogin-resetpassword-link": "添忘訖汝嘅密碼?",
+ "userlogin-loggedin": "汝已作為{{GENDER:$1|$1}}登錄。\n利用以下表單以作為另一賬戶登錄。",
"createacct-emailrequired": "電郵地址:",
"createacct-emailoptional": "電郵地址(可選)",
"createacct-email-ph": "設置電郵地址",
@@ -901,7 +902,6 @@
"randomredirect-nopages": "Chhai liá-ke miàng-sṳ khûng-kiên mò-yû chhùng-thin hong-mien.",
"statistics": "統計",
"statistics-header-users": "用戶統計",
- "statistics-mostpopular": "分查閱次數最多嘅頁面",
"doubleredirects": "雙重重定向頁",
"doubleredirectstext": "Mî yit-hàng pâu-hàm to thi-yit lâu thi-ngi-ke chhûng-thin hong-mien ke lièn-chiap, yî-khi̍p thi-ngi ke chhûng-thin hong-mien ke thi-yit-hàng vùn-sṳ, thûng-sòng hién-sṳ ke he \"chṳ̂n-chṳn\" ke muk-phêu vùn-chông, ye-he thi-yit-ke chhûng-thin hong-mien yin-kôi chṳ́-hiong ke vùn-chông.",
"brokenredirects": "損壞嘅重定向頁",
@@ -925,7 +925,6 @@
"uncategorizedimages": "Thai fûn-lui thù-phién",
"unusedcategories": "吂用分類",
"unusedimages": "吂用圖片",
- "popularpages": "熱點頁面",
"wantedcategories": "想愛嘅分類",
"wantedpages": "等寫頁面",
"mostlinked": "最多鏈接頁面",
@@ -955,7 +954,6 @@
"pager-older-n": "舊$1次",
"booksources": "網絡書源",
"booksources-search-legend": "尋找網絡書源",
- "booksources-go": "送出",
"booksources-text": "下背係一份銷售新書或二手書嘅列表,並可能有汝尋找緊嘅書嘅進一步信息:",
"specialloguserlabel": "Yung-fu:",
"speciallogtitlelabel": "Phêu-thì:",
@@ -1016,7 +1014,7 @@
"wlheader-enotif": "Yí-kîn khí-thung email thûng-tî kûng-nèn.",
"wlheader-showupdated": "Chhai ngì song-chhṳ kiám-sṳ heu yû pûn chhùng-siû ko ke vùn-chông chiông-voi hién-sṳ vi '''chhû-thí'''.",
"wlnote": "Yî-ha he chui-khiûn <b>$2</b> séu-sṳ̀ nui-ke chui-heu $1-chhṳ chin-siû.",
- "wlshowlast": "展示最近$1隻鐘頭,$2日或$3嘅更改。",
+ "wlshowlast": "展示最近$1隻鐘頭,$2日或嘅更改。",
"watchlist-options": "監視列表選項",
"watching": "監視中...",
"unwatching": "停止監視中...",
@@ -1401,7 +1399,6 @@
"metadata-expand": "Hién-sṳ siòng-se ke chṳ̂-liau",
"metadata-collapse": "Yún-chhòng siòng-se ke chṳ̂-liau",
"metadata-fields": "在本信息肚所列出嘅EXIF元數據域將包含在圖片顯示頁面,當元數據表損壞時單淨顯示下背信息。\n其他嘅元數據默認做隱藏。\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "全部",
"namespacesall": "全部",
"monthsall": "全部",
"confirmemail": "確認電郵地址",
@@ -1456,5 +1453,6 @@
"tag-filter": "[[Special:Tags|標籤]]過濾器:",
"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ṳ",
- "rightsnone": "(無)"
+ "rightsnone": "(無)",
+ "revdelete-summary": "piên-sip tsak-yêu"
}
diff --git a/languages/i18n/haw.json b/languages/i18n/haw.json
index acb72eff..65176b13 100644
--- a/languages/i18n/haw.json
+++ b/languages/i18n/haw.json
@@ -6,7 +6,8 @@
"Kolonahe",
"Node ue",
"Singularity",
- "Xqt"
+ "Xqt",
+ "Macofe"
]
},
"tog-underline": "Kahalalo i nā loulou:",
@@ -437,13 +438,11 @@
"passwordreset-username": "Inoa mea ho'ohana:",
"passwordreset-email": "Wahinoho lekauila:",
"changeemail": "Hoʻololi i ka wahinoho lekauila",
- "changeemail-header": "Hoʻololi i ka wahinoho lekauila moʻokāki",
"changeemail-oldemail": "Wahinoho lekauila hananei:",
"changeemail-newemail": "Wahinoho lekauila hou:",
"changeemail-none": "(ʻaʻohe)",
"changeemail-password": "Kāu ʻōlelo hūnā {{SITENAME}}:",
"changeemail-submit": "Loli i kāu lekauila",
- "changeemail-cancel": "Hoʻōki",
"resettokens-token-label": "$1 (helu okamanawa: $2)",
"bold_sample": "Ho‘okā‘ele",
"bold_tip": "Ho‘okā‘ele",
@@ -605,7 +604,6 @@
"search-relatedarticle": "Nā Mea ʻālike",
"searchrelated": "na mea ʻālike",
"searchall": "nā mea apau",
- "showingresultsheader": "{{PLURAL:$5|<strong>$1</strong> hualoaʻa o <strong>$3</strong> mau hualoaʻa|<strong$1-$2</strong> mau hualoaʻa o <strong>$3</strong> mau hualoaʻa}} no <strong>$4</strong>",
"search-nonefound": "ʻAʻohe hualoaʻa no kēia huli.",
"powersearch-legend": "Hulina kūlana kiʻekiʻe",
"powersearch-ns": "Huli i loko o nā wahi inoa:",
@@ -857,7 +855,6 @@
"statistics": "ʻIkepilihelu",
"statistics-header-pages": "ʻIkepilihelu ʻaoʻao",
"statistics-header-edits": "ʻIkepilihelu hoʻololi",
- "statistics-header-views": "ʻIkepilihelu nānā",
"statistics-header-users": "ʻIkepilihelu mea hoʻohana",
"statistics-header-hooks": "ʻIkepilihelu ʻē aʻe",
"statistics-articles": "ʻAoʻao mealoko",
@@ -887,7 +884,6 @@
"pager-older-n": "{{PLURAL:$1|1 aku nei|$1 aku nei}}",
"booksources": "Kumu puke",
"booksources-search-legend": "Huli i nā kūmole puke",
- "booksources-go": "E huli",
"log": "Nā Mo‘olelo",
"all-logs-page": "Nā Moʻolelo lehulehu apau",
"allpages": "Nā ‘Ao‘ao apau",
@@ -919,7 +915,7 @@
"watchthispage": "E nānā pono i kēia mea",
"unwatch": "Kiaʻi ʻole",
"watchlist-details": "{{PLURAL:$1|$1 ʻaoʻao|$1 mau ʻaoʻao}} a kāu papakiaʻi, me ʻole ke koe ʻana o nā ʻaoʻao walaʻau.",
- "wlshowlast": "Hōʻike $1 hola aku nei $2 lā aku nei $3",
+ "wlshowlast": "Hōʻike $1 hola aku nei $2 lā aku nei",
"watchlist-options": "Nā Koho papakiaʻi",
"watching": "Kia‘i nei...",
"unwatching": "Ke wehe nei i ke kiaʻi...",
@@ -1109,7 +1105,6 @@
"pageinfo-language": "ʻŌlelo mealoko ʻaoʻao",
"pageinfo-robot-index": "ʻAe",
"pageinfo-robot-noindex": "ʻAʻole",
- "pageinfo-views": "Helu o nā nānā",
"pageinfo-watchers": "Helu o nā mea nānā ʻaoʻao",
"pageinfo-redirects-name": "Helu o nā kiahou i kēia ʻaoʻao",
"pageinfo-subpages-name": "Helu o nā ʻaoʻao kūloko o kēia ʻaoʻao",
@@ -1183,7 +1178,6 @@
"exif-iimcategory-evn": "ʻĀina",
"exif-iimcategory-hth": "Olakino",
"exif-iimcategory-wea": "Anianilā",
- "watchlistall2": "nā mea apau",
"namespacesall": "nā mea apau",
"monthsall": "nā mea apau",
"confirm_purge_button": "Hiki nō",
@@ -1253,12 +1247,12 @@
"htmlform-yes": "ʻAe",
"htmlform-chosen-placeholder": "Koho i kekahi koho",
"rightsnone": "(ʻaʻohe)",
- "feedback-subject": "Kumunui:",
- "feedback-message": "Pūlono:",
- "feedback-cancel": "Hoʻōki",
- "feedback-submit": "Hoʻouna i nā Manaʻo",
"feedback-adding": "Ke hoʻohui nei i ka manaʻo i ka ʻaoʻao...",
+ "feedback-cancel": "Hoʻōki",
"feedback-close": "Ua pau",
+ "feedback-message": "Pūlono:",
+ "feedback-subject": "Kumunui:",
+ "feedback-submit": "Waiho",
"searchsuggest-search": "Huli",
"api-error-unknown-code": "Hewa ʻikeʻole: \"$1\".",
"api-error-unknown-warning": "Akahele ʻikeʻole: \"$1\".",
diff --git a/languages/i18n/he.json b/languages/i18n/he.json
index 929f1ac4..f49313d8 100644
--- a/languages/i18n/he.json
+++ b/languages/i18n/he.json
@@ -26,7 +26,9 @@
"פדיחה",
"שומבלע",
"תומר ט",
- "Matanya"
+ "Matanya",
+ "GilCahana",
+ "Ldorfman"
]
},
"tog-underline": "סימון קישורים בקו תחתי:",
@@ -54,7 +56,7 @@
"tog-shownumberswatching": "הצגת מספר המשתמשים העוקבים",
"tog-oldsig": "החתימה הנוכחית:",
"tog-fancysig": "התייחסות לחתימה כקוד ויקי (ללא קישור אוטומטי)",
- "tog-uselivepreview": "שימוש בתצוגה מקדימה מהירה (ניסיוני)",
+ "tog-uselivepreview": "שימוש בתצוגה מקדימה מהירה",
"tog-forceeditsummary": "הצגת אזהרה בעת הכנסת תקציר עריכה ריק",
"tog-watchlisthideown": "הסתרת העריכות שלי ברשימת המעקב",
"tog-watchlisthidebots": "הסתרת עריכות של בוטים ברשימת המעקב",
@@ -145,11 +147,11 @@
"category-empty": "'''קטגוריה זו אינה כוללת דפים או קובצי מדיה.'''",
"hidden-categories": "{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות}}",
"hidden-category-category": "קטגוריות מוסתרות",
- "category-subcat-count": "{{PLURAL:$2|קטגוריה זו כוללת את קטגוריית המשנה הבאה בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|קטגוריית המשנה המוצגת להלן|$1 קטגוריות המשנה המוצגות להלן}}, וכוללת בסך הכול $2 קטגוריות משנה.}}",
+ "category-subcat-count": "{{PLURAL:$2|קטגוריה זו כוללת את קטגוריית המשנה הבאה בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|קטגוריית המשנה המוצגת להלן|$1 קטגוריות המשנה המוצגות להלן}}, וכוללת בסך־הכול $2 קטגוריות משנה.}}",
"category-subcat-count-limited": "קטגוריה זו כוללת את {{PLURAL:$1|קטגוריית המשנה הבאה|$1 קטגוריות המשנה הבאות}}.",
- "category-article-count": "{{PLURAL:$2|קטגוריה זו כוללת את הדף הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הדף המוצג להלן|$1 הדפים המוצגים להלן}}, וכוללת בסך הכול $2 דפים.}}",
+ "category-article-count": "{{PLURAL:$2|קטגוריה זו כוללת את הדף הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הדף המוצג להלן|$1 הדפים המוצגים להלן}}, וכוללת בסך־הכול $2 דפים.}}",
"category-article-count-limited": "קטגוריה זו כוללת את {{PLURAL:$1|הדף הבא|$1 הדפים הבאים}}.",
- "category-file-count": "{{PLURAL:$2|קטגוריה זו כוללת את הקובץ הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הקובץ המוצג להלן|$1 הקבצים המוצגים להלן}}, וכוללת בסך הכול $2 קבצים.}}",
+ "category-file-count": "{{PLURAL:$2|קטגוריה זו כוללת את הקובץ הבא בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|הקובץ המוצג להלן|$1 הקבצים המוצגים להלן}}, וכוללת בסך־הכול $2 קבצים.}}",
"category-file-count-limited": "קטגוריה זו כוללת את {{PLURAL:$1|הקובץ הבא|$1 הקבצים הבאים}}.",
"listingcontinuesabbrev": "(המשך)",
"index-category": "דפים המופיעים במנועי חיפוש",
@@ -242,6 +244,7 @@
"pool-queuefull": "התור מלא",
"pool-errorunknown": "שגיאה בלתי ידועה",
"pool-servererror": "שירות המנייה אינו זמין ($1).",
+ "poolcounter-usage-error": "שגיאת שימוש: $1",
"aboutsite": "אודות {{SITENAME}}",
"aboutpage": "Project:אודות",
"copyright": "התוכן זמין לפי תנאי $1 אלא אם נאמר אחרת.",
@@ -251,6 +254,7 @@
"disclaimers": "הבהרה משפטית",
"disclaimerpage": "Project:הבהרה משפטית",
"edithelp": "עזרה לעריכה",
+ "helppage-top-gethelp": "עזרה",
"mainpage": "עמוד ראשי",
"mainpage-description": "עמוד ראשי",
"policy-url": "Project:נהלים",
@@ -259,7 +263,7 @@
"privacy": "מדיניות הפרטיות",
"privacypage": "Project:מדיניות הפרטיות",
"badaccess": "שגיאה בהרשאות",
- "badaccess-group0": "אינכם מורשים לבצע את הפעולה שביקשתם.",
+ "badaccess-group0": "אינך מורשה לבצע את הפעולה שביקשת.",
"badaccess-groups": "הפעולה שביקשת לבצע מוגבלת למשתמשים ב{{PLURAL:$2|קבוצה הבאה|אחת הקבוצות הבאות}}: $1.",
"versionrequired": "נדרשת גרסה $1 של מדיה־ויקי",
"versionrequiredtext": "גרסה $1 של מדיה־ויקי נדרשת לשימוש בדף זה. למידע נוסף, ראו את [[Special:Version|דף הגרסה]].",
@@ -323,23 +327,26 @@
"databaseerror-error": "שגיאה: $1",
"laggedslavemode": "'''אזהרה:''' הדף עשוי שלא להכיל עדכונים אחרונים.",
"readonly": "בסיס הנתונים נעול",
- "enterlockreason": "הזינו סיבה לנעילת בסיס הנתונים, כולל הערכה לגבי מועד שחרור הנעילה.",
+ "enterlockreason": "יש להזין סיבה לנעילה, כולל הערכה למועד שחרור הנעילה",
"readonlytext": "בסיס נתונים זה של האתר נעול ברגע זה לצורך הזנת נתונים ושינויים. ככל הנראה מדובר בתחזוקה שוטפת, שלאחריה יחזור האתר לפעולתו הרגילה.\n\nמנהל המערכת שנעל את בסיס הנתונים סיפק את ההסבר הבא: $1",
- "missing-article": "בסיס הנתונים לא מצא את הטקסט של הדף שהוא היה אמור למצוא, בשם \"$1\" $2.\n\nהדבר נגרם בדרך כלל על ידי קישור ישן להשוואת גרסאות של דף שנמחק או לגרסה של דף כזה.\n\nאם זה אינו המקרה, זהו כנראה באג בתוכנה.\nאנא דווחו על כך ל[[Special:ListUsers/sysop|מפעיל מערכת]], תוך שמירת פרטי כתובת ה־URL.",
+ "missing-article": "בסיס הנתונים לא מצא את הטקסט של הדף שהוא היה אמור למצוא, בשם \"$1\" $2.\n\nהדבר נגרם בדרך כלל על־ידי קישור ישן להשוואת גרסאות של דף שנמחק או לגרסה של דף כזה.\n\nאם זה אינו המקרה, זהו כנראה באג בתוכנה.\nאנא דווחו על כך ל[[Special:ListUsers/sysop|מפעיל מערכת]], תוך שמירת פרטי כתובת ה־URL.",
"missingarticle-rev": "(מספר גרסה: $1)",
"missingarticle-diff": "(השוואת הגרסאות: $1, $2)",
"readonly_lag": "בסיס הנתונים ננעל אוטומטית כדי לאפשר לבסיסי הנתונים המשניים להתעדכן מהבסיס הראשי.",
"internalerror": "שגיאה פנימית",
"internalerror_info": "שגיאה פנימית: $1",
+ "internalerror-fatal-exception": "שגיאה חמורה מסוג \"$1\"",
"filecopyerror": "העתקת \"$1\" ל־\"$2\" נכשלה.",
"filerenameerror": "שינוי השם של \"$1\" ל־\"$2\" נכשל.",
"filedeleteerror": "מחיקת \"$1\" נכשלה.",
"directorycreateerror": "יצירת התיקייה \"$1\" נכשלה.",
+ "directoryreadonlyerror": "התיקייה \"$1\" היא לקריאה בלבד.",
+ "directorynotreadableerror": "התיקייה \"$1\" אינה ניתנת לקריאה.",
"filenotfound": "הקובץ \"$1\" לא נמצא.",
"unexpected": "ערך לא צפוי: \"$1\"=\"$2\"",
- "formerror": "שגיאה: לא יכול לשלוח טופס.",
+ "formerror": "שגיאה: לא ניתן היה לשלוח את הטופס.",
"badarticleerror": "לא ניתן לבצע פעולה זו בדף זה.",
- "cannotdelete": "לא ניתן היה למחוק את הדף או הקובץ \"$1\".\nייתכן שהוא נמחק כבר על ידי מישהו אחר.",
+ "cannotdelete": "לא ניתן היה למחוק את הדף או הקובץ \"$1\".\nייתכן שהוא כבר נמחק על־ידי משתמש אחר.",
"cannotdelete-title": "לא ניתן למחוק את הדף \"$1\"",
"delete-hook-aborted": "המחיקה הופסקה על־ידי מבנה Hook.\nלא ניתן הסבר.",
"no-null-revision": "לא ניתן היה ליצור גרסת־דמה בדף \"$1\"",
@@ -351,28 +358,29 @@
"viewsource": "הצגת מקור",
"viewsource-title": "הצגת המקור של $1",
"actionthrottled": "הפעולה הוגבלה",
- "actionthrottledtext": "כאמצעי נגד ספאם, קיימת מגבלה על ביצוע פעולה זו פעמים רבות מדי בזמן קצר, וחרגתם מהמגבלה הזו.\nאנא נסו שוב בעוד מספר דקות.",
+ "actionthrottledtext": "כאמצעי נגד ספאם, קיימת מגבלה על ביצוע פעולה זו פעמים רבות מדי בזמן קצר, וחרגת מהמגבלה הזאת.\nנא לנסות שוב בעוד מספר דקות.",
"protectedpagetext": "דף זה מוגן כדי למנוע עריכה ופעולות אחרות.",
"viewsourcetext": "באפשרותך לצפות בטקסט המקור של הדף ולהעתיקו:",
- "viewyourtext": "באפשרותכם לצפות בטקסט המקור של '''העריכות שלכם''' של הדף ולהעתיקו:",
+ "viewyourtext": "באפשרותך לצפות בטקסט המקור של <strong>העריכות שלך</strong> בדף הזה ולהעתיקו:",
"protectedinterface": "דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
- "editinginterface": "'''אזהרה:''' הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
+ "editinginterface": "<strong>אזהרה:</strong> הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.",
+ "translateinterface": "כדי להוסיף או לשנות תרגומים עבור כל אתרי הוויקי, יש להשתמש ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
"cascadeprotected": "דף זה מוגן מעריכה כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:\n$2",
- "namespaceprotected": "אינכם מורשים לערוך דפים במרחב השם '''$1'''.",
+ "namespaceprotected": "אין לך הרשאה לערוך דפים במרחב השם <strong>$1</strong>.",
"customcssprotected": "אינך מורשה לערוך דף CSS זה כיוון שהוא כולל הגדרות אישיות של משתמש אחר.",
"customjsprotected": "אינך מורשה לערוך דף JavaScript זה כיוון שהוא כולל הגדרות אישיות של משתמש אחר.",
- "mycustomcssprotected": "אינכם מורשים לערוך דף CSS זה.",
- "mycustomjsprotected": "אינכם מורשים לערוך דף JavaScript זה.",
+ "mycustomcssprotected": "אין לך הרשאה לערוך דף CSS זה.",
+ "mycustomjsprotected": "אין לך הרשאה לערוך דף JavaScript זה.",
"myprivateinfoprotected": "אין לך הרשאה לערוך את המידע הפרטי שלך",
"mypreferencesprotected": "אין לך הרשאה לערוך את ההעדפות שלך.",
"ns-specialprotected": "לא ניתן לערוך דפים מיוחדים.",
- "titleprotected": "לא ניתן ליצור דף זה, כיוון שהמשתמש [[User:$1|$1]] הגן עליו מפני יצירה.\nהסיבה שניתנה לכך היא \"$2\".",
+ "titleprotected": "[[User:$1|$1]] {{GENDER:$1|הפעיל|הפעילה}} הגנה על הדף הזה מפני יצירה.\nהסיבה שניתנה לכך היא \"<em>$2</em>\".",
"filereadonlyerror": "לא ניתן לשנות את הקובץ \"$1\" כיוון שמאגר הקבצים \"$2\" במצב קריאה בלבד.\n\nמנהל המערכת שנעל את המאגר סיפק את ההסבר הבא: \"'''$3'''\".",
"invalidtitle-knownnamespace": "כותרת בלתי־תקינה עם מרחב השם \"$2\" ושם דף \"$3\"",
"invalidtitle-unknownnamespace": "כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף \"$2\"",
"exception-nologin": "לא בחשבון",
- "exception-nologin-text": "אנא היכנסו לחשבון כדי לראות את הדף הזה או לבצע את הפעולה הזו.",
- "exception-nologin-text-manual": "אנא $1 כדי לראות את הדף הזה או לבצע את הפעולה הזו.",
+ "exception-nologin-text": "נדרשת כניסה לחשבון כדי לראות את הדף הזה או לבצע את הפעולה הזאת.",
+ "exception-nologin-text-manual": "נדרשת $1 כדי לראות את הדף הזה או לבצע את הפעולה הזאת.",
"virus-badscanner": "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
"virus-scanfailed": "הסריקה נכשלה (קוד: $1)",
"virus-unknownscanner": "אנטי־וירוס בלתי ידוע:",
@@ -390,12 +398,12 @@
"yourpasswordagain": "חזרה על הסיסמה:",
"createacct-yourpasswordagain": "אימות הסיסמה",
"createacct-yourpasswordagain-ph": "יש להקליד את הסיסמה שנית",
- "remembermypassword": "שמירת הכניסה שלי בדפדפן הזה (ל{{PLURAL:$1|יום אחד|יומיים|־$1 ימים}} לכל היותר)",
+ "remembermypassword": "שמירת הכניסה שלי בדפדפן הזה ({{PLURAL:$1|ליום אחד|ליומיים|ל־$1 ימים}} לכל היותר)",
"userlogin-remembermypassword": "לזכור שנכנסתי",
"userlogin-signwithsecure": "שימוש בחיבור מאובטח",
"yourdomainname": "המתחם שלך:",
"password-change-forbidden": "אין באפשרותך לשנות סיסמאות באתר זה.",
- "externaldberror": "הייתה שגיאה בבסיס הנתונים של ההזדהות, או שאינכם רשאים לעדכן את חשבונכם החיצוני.",
+ "externaldberror": "אירעה שגיאת אימות בבסיס הנתונים, או שאינך מורשה לעדכן את החשבון החיצוני שלך.",
"login": "כניסה לחשבון",
"nav-login-createaccount": "כניסה לחשבון / הרשמה",
"userlogin": "כניסה לחשבון / הרשמה",
@@ -408,11 +416,13 @@
"nologin": "אין לך חשבון? $1.",
"nologinlink": "הרשמה",
"createaccount": "יצירת חשבון חדש",
- "gotaccount": "כבר נרשמתם? $1.",
+ "gotaccount": "כבר יש לך חשבון? $1.",
"gotaccountlink": "כניסה לחשבון",
"userlogin-resetlink": "שכחת את פרטי הכניסה?",
"userlogin-resetpassword-link": "שכחת את הסיסמה?",
"userlogin-helplink2": "עזרה בכניסה לחשבון",
+ "userlogin-loggedin": "אתם כבר מחוברים לחשבון {{GENDER:$1|$1}}.\nהשתמשו בטופס שלהלן כדי להתחבר לחשבון אחר.",
+ "userlogin-createanother": "יצירת חשבון אחר",
"createacct-emailrequired": "כתובת דוא\"ל",
"createacct-emailoptional": "כתובת דוא\"ל (לא חובה)",
"createacct-email-ph": "יש להקליד את כתובת הדוא\"ל שלך",
@@ -430,7 +440,7 @@
"createacct-benefit-body1": "{{PLURAL:$1|עריכה|עריכות}}",
"createacct-benefit-body2": "{{PLURAL:$1|דף|דפים}}",
"createacct-benefit-body3": "{{PLURAL:$1|תורם|תורמים}} לאחרונה",
- "badretype": "הסיסמאות שהזנתם אינן מתאימות.",
+ "badretype": "הסיסמאות שהזנת אינן מתאימות.",
"userexists": "שם המשתמש שבחרתם כבר נמצא בשימוש.\nאנא בחרו שם אחר.",
"loginerror": "שגיאה בכניסה לאתר",
"createacct-error": "שגיאה ביצירת חשבון",
@@ -448,6 +458,7 @@
"wrongpassword": "הסיסמה שהקלדתם שגויה.\nאנא נסו שוב.",
"wrongpasswordempty": "הסיסמה שהקלדתם ריקה.\nאנא נסו שוב.",
"passwordtooshort": "סיסמאות חייבות להיות באורך {{PLURAL:$1|תו אחד|$1 תווים}} לפחות.",
+ "passwordtoolong": "סיסמאות אינן יכולות להיות ארוכות {{PLURAL:$1|מתו אחד|מ־$1 תווים}}.",
"password-name-match": "סיסמתך חייבת להיות שונה משם המשתמש שלך.",
"password-login-forbidden": "השימוש בשם המשתמש והסיסמה האלה נאסר.",
"mailmypassword": "איפוס סיסמה",
@@ -460,12 +471,12 @@
"eauthentsent": "דוא\"ל אימות נשלח לכתובת הדוא\"ל שצוינה.\nלפני שדברי דוא\"ל אחרים יישלחו לחשבון הזה, יהיה עליכם לפעול לפי ההוראות בדוא\"ל, כדי לאשר שהחשבון אכן שייך לכם.",
"throttled-mailpassword": "כבר נשלח דוא\"ל לאיפוס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.\nכדי למנוע ניצול לרעה, יכול להישלח רק דוא\"ל אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.",
"mailerror": "שגיאה בשליחת דואר: $1",
- "acct_creation_throttle_hit": "מבקרים באתר זה דרך כתובת ה־IP שלכם כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ביום האחרון. זהו המקסימום המותר בתקופה זו.\nלפיכך, מבקרים דרך כתובת ה־IP הזו לא יכולים ליצור חשבונות נוספים ברגע זה.",
+ "acct_creation_throttle_hit": "מבקרים באתר זה דרך כתובת ה־IP שלכם כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ביום האחרון. זהו המקסימום המותר בתקופה זו.\nלפיכך, מבקרים דרך כתובת ה־IP הזאת לא יכולים ליצור חשבונות נוספים ברגע זה.",
"emailauthenticated": "כתובת הדוא\"ל שלך אומתה ב־$3, $2.",
"emailnotauthenticated": "כתובת הדוא\"ל שלכם עדיין לא אומתה.\nלא יישלח אליכם דוא\"ל עבור אף אחת מהתכונות הבאות.",
"noemailprefs": "יש לציין כתובת דוא\"ל בהעדפות שלך כדי שתכונות אלה יעבדו.",
"emailconfirmlink": "אישור כתובת הדוא\"ל שלך",
- "invalidemailaddress": "כתובת הדוא\"ל אינה מתקבלת כיוון שנראה שהיא בפורמט לא נכון.\nאנא הקלידו כתובת תקינה או השאירו את השדה ריק.",
+ "invalidemailaddress": "כתובת הדוא\"ל אינה מתקבלת כיוון שנראה שהיא בפורמט לא חוקי.\nיש להזין כתובת תקינה או להשאיר את השדה ריק.",
"cannotchangeemail": "לא ניתן לשנות את כתובות הדוא\"ל של חשבונות באתר ויקי זה.",
"emaildisabled": "אתר זה לא יכול לשלוח דואר אלקטרוני.",
"accountcreated": "החשבון נוצר",
@@ -493,10 +504,10 @@
"newpassword": "סיסמה חדשה:",
"retypenew": "חזרה על הסיסמה החדשה:",
"resetpass_submit": "הגדרת הסיסמה וכניסה לחשבון",
- "changepassword-success": "סיסמתכם שונתה בהצלחה!",
+ "changepassword-success": "סיסמתך שונתה בהצלחה!",
"changepassword-throttled": "ביצעתם לאחרונה ניסיונות רבים מדי להיכנס לחשבון זה.\nאנא המתינו $1 לפני שתנסו שוב.",
"resetpass_forbidden": "לא ניתן לשנות סיסמאות.",
- "resetpass-no-info": "יש להיכנס לחשבון כדי לגשת לדף זה באופן ישיר.",
+ "resetpass-no-info": "נדרשת כניסה לחשבון כדי לגשת לדף זה באופן ישיר.",
"resetpass-submit-loggedin": "שינוי סיסמה",
"resetpass-submit-cancel": "ביטול",
"resetpass-wrong-oldpass": "הסיסמה הזמנית או הנוכחית אינה תקינה.\nייתכן שכבר שינית את סיסמתך או שכבר ביקשת סיסמה זמנית חדשה.",
@@ -519,15 +530,15 @@
"passwordreset-capture-help": "אם תסמנו תיבה זו, הדואר האלקטרוני (יחד עם הסיסמה הזמנית) יוצג לכם במקביל לשליחתו למשתמש.",
"passwordreset-email": "כתובת דוא\"ל:",
"passwordreset-emailtitle": "פרטי חשבון ב{{grammar:תחילית|{{SITENAME}}}}",
- "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}\nשייכים לכתובת הדואר האלקטרוני הזו:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
- "passwordreset-emailtext-user": "המשתמש $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} ביקש איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}\n($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}} שייכים לכתובת הדואר האלקטרוני הזו:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
+ "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}}\nלכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
+ "passwordreset-emailtext-user": "{{GENDER:$1|המשתמש|המשתמשת}} $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} {{GENDER:$1|ביקש|ביקשה}} איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}\n($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}} לכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
"passwordreset-emailelement": "שם משתמש: $1\nסיסמה זמנית: $2",
"passwordreset-emailsent": "נשלח דואר אלקטרוני לאיפוס הסיסמה.",
"passwordreset-emailsent-capture": "נשלח דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן.",
"passwordreset-emailerror-capture": "נוצר דואר אלקטרוני לאיפוס הסיסמה, והוא מוצג להלן, אך שליחתו ל{{GENDER:$2|משתמש|משתמשת}} נכשלה: $1",
"changeemail": "שינוי כתובת דוא\"ל",
"changeemail-text": "מלאו טופס זה כדי לשנות את כתובת הדואר האלקטרוני שלכם. יהיה עליכם למלא סיסמה כדי לאשר את השינוי.",
- "changeemail-no-info": "יש להיכנס לחשבון כדי לגשת לדף זה ישירות.",
+ "changeemail-no-info": "נדרשת כניסה לחשבון כדי לגשת לדף זה ישירות.",
"changeemail-oldemail": "כתובת דוא\"ל נוכחית:",
"changeemail-newemail": "כתובת דוא\"ל חדשה:",
"changeemail-none": "(אין)",
@@ -546,7 +557,7 @@
"bold_sample": "טקסט מודגש",
"bold_tip": "טקסט מודגש",
"italic_sample": "טקסט נטוי",
- "italic_tip": "טקסט נטוי (לא מומלץ בעברית)",
+ "italic_tip": "טקסט נטוי",
"link_sample": "קישור",
"link_tip": "קישור פנימי",
"extlink_sample": "http://www.example.com כותרת הקישור לתצוגה",
@@ -570,22 +581,24 @@
"blankarticle": "<strong>אזהרה:</strong> הדף שאתם יוצרים הוא ריק.\nאם תלחצו שוב על \"{{int:savearticle}}\", הדף ייווצר ללא תוכן.",
"anoneditwarning": "<strong>אזהרה:</strong> אינכם מחוברים לחשבון. כתובת ה־IP שלכם תוצג בפומבי אם תבצעו עריכות כלשהן. אם <strong>[$1 תיכנסו לחשבון]</strong> או <strong>[$2 תיצרו חשבון]</strong>, העריכות שלכם תיוחסנה לשם המשתמש שלכם ותקבלו גם יתרונות אחרים.",
"anonpreviewwarning": "''אינכם מחוברים לחשבון. שמירה תגרום לכתובת ה־IP שלכם להירשם בהיסטוריית העריכות של הדף.''",
- "missingsummary": "'''תזכורת:''' לא הזנתם תקציר עריכה.\nאם תלחצו שוב על הכפתור \"{{int:savearticle}}\", עריכתכם תישמר בלעדיו.",
- "missingcommenttext": "אנא הקלידו את ההודעה למטה.",
- "missingcommentheader": "'''תזכורת:''' לא הזנתם נושא/כותרת להודעה זו.\nאם תלחצו שוב על הכפתור \"{{int:savearticle}}\", עריכתכם תישמר בלעדיו.",
+ "missingsummary": "<strong>תזכורת:</strong> לא הזנת תקציר עריכה.\nלחיצה חוזרת על הכפתור \"{{int:savearticle}}\" תגרום לעריכה שלך להישמר בלעדיו.",
+ "selfredirect": "<strong>אזהרה:</strong> ניסית ליצור הפניה מדף זה לעצמו.\nאולי כתבת יעד שגוי להפניה, ואולי ערכת את הדף הלא־נכון.\nלחיצה חוזרת על הכפתור \"{{int:savearticle}}\" תגרום להפניה להיווצר בכל זאת.",
+ "missingcommenttext": "יש להקליד את ההודעה למטה.",
+ "missingcommentheader": "<strong>תזכורת:</strong> לא הזנת נושא/כותרת להודעה זו.\nלחיצה חוזרת על הכפתור \"{{int:savearticle}}\" תגרום לעריכה שלך להישמר ללא נושא/כותרת.",
"summary-preview": "תצוגה מקדימה של התקציר:",
"subject-preview": "תצוגה מקדימה של הנושא/הכותרת:",
+ "previewerrortext": "אירעה שגיאה בעת הניסיון להציג תצוגה מקדימה של השינויים שלך.",
"blockedtitle": "המשתמש חסום",
"blockedtext": "'''שם המשתמש או כתובת ה־IP שלכם נחסמו.'''\n\nהחסימה בוצעה על ידי $1. הסיבה שניתנה לכך היא '''$2'''.\n\n* תחילת החסימה: $8\n* פקיעת החסימה: $6\n* החסימה שבוצעה: $7\n\nבאפשרותכם ליצור קשר עם $1 או עם כל אחד מ[[{{MediaWiki:Grouppage-sysop}}|מפעילי המערכת]] האחרים כדי לדון על החסימה.\nאינכם יכולים להשתמש בתכונת \"שליחת דואר אלקטרוני למשתמש זה\" אם לא ציינתם כתובת דוא\"ל תקפה ב[[Special:Preferences|העדפות המשתמש שלכם]] או אם נחסמתם משליחת דוא\"ל.\nכתובת ה־IP שלכם היא $3, ומספר החסימה שלכם הוא #$5.\nאנא ציינו את כל הפרטים הללו בכל פנייה למפעילי המערכת.",
"autoblockedtext": "כתובת ה־IP שלכם נחסמה באופן אוטומטי כיוון שמשתמש אחר, שנחסם על־ידי $1, השתמש בה.\nהסיבה שניתנה לחסימה היא:\n\n:<em>$2</em>\n\n* תחילת החסימה: $8\n* פקיעת החסימה: $6\n* החסימה שבוצעה: $7\n\nבאפשרותכם ליצור קשר עם $1 או עם כל אחד מ[[{{MediaWiki:Grouppage-sysop}}|מפעילי המערכת]] האחרים כדי לדון בחסימה.\n\nבאפשרותכם להשתמש בתכונת \"שליחת דואר אלקטרוני למשתמש זה\", אלא אם לא ציינתם כתובת דוא\"ל תקינה ב[[Special:Preferences|העדפות המשתמש שלכם]] או אם נחסמתם משליחת דוא\"ל.\n\nכתובת ה־IP שלכם היא $3, ומספר החסימה שלכם הוא #$5.\nאנא ציינו את כל הפרטים הללו בכל פנייה למפעילי המערכת.",
"blockednoreason": "לא ניתנה סיבה",
- "whitelistedittext": "עליכם $1 כדי לערוך דפים.",
+ "whitelistedittext": "נדרשת $1 כדי לערוך דפים.",
"confirmedittext": "עליכם לאמת את כתובת הדוא\"ל שלכם לפני שתוכלו לערוך דפים. אנא הגדירו ואמתו את כתובת הדוא\"ל שלכם באמצעות [[Special:Preferences|העדפות המשתמש]] שלכם.",
"nosuchsectiontitle": "הפסקה לא נמצאה",
"nosuchsectiontext": "ניסית לערוך פסקה שאינה קיימת.\nייתכן שהיא הועברה או נמחקה בעת שצפית בדף.",
"loginreqtitle": "נדרשת כניסה לחשבון",
- "loginreqlink": "להיכנס לחשבון",
- "loginreqpagetext": "עליכם $1 כדי לצפות בדפים אחרים.",
+ "loginreqlink": "כניסה לחשבון",
+ "loginreqpagetext": "נדרשת $1 כדי לצפות בדפים אחרים.",
"accmailtitle": "הסיסמה נשלחה",
"accmailtext": "סיסמה אקראית עבור [[User talk:$1|$1]] נשלחה אל $2. ניתן לשנותה בדף '''[[Special:ChangePassword|שינוי הסיסמה]]''' לאחר הכניסה.",
"newarticle": "(חדש)",
@@ -597,7 +610,7 @@
"userpage-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.\nאנא בדקו אם ברצונכם ליצור/לערוך דף זה.",
"userpage-userdoesnotexist-view": "חשבון המשתמש \"$1\" אינו רשום.",
"blocked-notice-logextract": "{{GENDER:$1|המשתמש הזה חסום|המשתמשת הזו חסומה}} כרגע.\nהפעולה האחרונה ביומן החסימות מוצגת להלן:",
- "clearyourcache": "'''הערה:''' לאחר השמירה, עליכם לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.\n* '''פיירפוקס / ספארי:''' לחצו על Shift בעת לחיצתכם על '''העלה מחדש''' (Reload), או הקישו על ''Ctrl-F5'' או על ''Ctrl-R'' (או על ''<span dir=\"ltr\">⌘-R</span>'' במחשב מק)\n* '''גוגל כרום:''' לחצו על ''Ctrl-Shift-R'' (או על ''<span dir=\"ltr\">⌘-Shift-R</span>'' במק)\n* '''אינטרנט אקספלורר:''' לחצו על Ctrl בעת לחיצתכם על '''רענן''' (Refresh), או הקישו על ''Ctrl-F5''\n* '''אופרה''': נקו את המטמון ב־''Tools‏ ← Preferences''",
+ "clearyourcache": "<strong>הערה:</strong> לאחר השמירה, ייתכן שתצטרכו לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.\n* <strong>פיירפוקס / ספארי:</strong> לחצו והחזיקו את המקש <em>Shift</em> בעת לחיצתכם על <strong>טעינה מחדש</strong> (Reload), או לחצו על צירוף המקשים <em>Ctrl-F5</em> או <em>Ctrl-R</em>&rlm; (<em><span dir=\"ltr\">⌘-R</span></em> במחשב מק)\n* <strong>גוגל כרום:</strong> לחצו על צירוף המקשים <em>Ctrl-Shift-R</em>&rlm; (<em><span dir=\"ltr\">⌘-Shift-R</span></em> במחשב מק)\n* <strong>אינטרנט אקספלורר:</strong> לחצו והחזיקו את המקש <em>Ctrl</em> בעת לחיצתכם על <strong>רענן</strong> (Refresh), או לחצו על צירוף המקשים <em>Ctrl-F5</em>\n* <strong>אופרה:</strong> נקו את המטמון ב־<em>Tools‏ ← Preferences</em>",
"usercssyoucanpreview": "'''עצה:''' השתמשו בלחצן \"{{int:showpreview}}\" כדי לבחון את גיליון ה־CSS החדש שלכם לפני השמירה.",
"userjsyoucanpreview": "'''עצה:''' השתמשו בלחצן \"{{int:showpreview}}\" כדי לבחון את סקריפט ה־JavaScript החדש שלכם לפני השמירה.",
"usercsspreview": "'''זכרו שזו רק תצוגה מקדימה של גיליון ה־CSS שלכם.'''\n'''הוא טרם נשמר!'''",
@@ -607,17 +620,17 @@
"userinvalidcssjstitle": "'''אזהרה:''' העיצוב \"$1\" אינו קיים.\nדפי .css ו־.js מותאמים אישית משתמשים בכותרת עם אותיות קטנות – למשל, {{ns:user}}:דוגמה/vector.css ולא {{ns:user}}:דוגמה/Vector.css.",
"updated": "(מעודכן)",
"note": "'''הערה:'''",
- "previewnote": "'''זכרו שזו רק תצוגה מקדימה.'''\nהשינויים שלכם טרם נשמרו!",
+ "previewnote": "<strong>זִכרו שזו רק תצוגה מקדימה.</strong>\nהשינויים שלכם טרם נשמרו!",
"continue-editing": "מעבר לאזור העריכה",
"previewconflict": "תצוגה מקדימה זו מציגה כיצד ייראה הטקסט בחלון העריכה העליון, אם תבחרו לשמור אותו.",
"session_fail_preview": "'''לא ניתן לבצע את עריכתכם עקב אובדן מידע הכניסה.'''\nאנא נסו שוב.\nאם זה לא עוזר, נסו [[Special:UserLogout|לצאת מהחשבון]] ולהיכנס אליו שנית.",
"session_fail_preview_html": "'''לא ניתן לבצע את עריכתם עקב אובדן מידע הכניסה.'''\n\nכיוון שבאתר זה אפשרות השימוש ב־HTML מאופשרת, התצוגה המקדימה מוסתרת כדי למנוע התקפות JavaScript.\n\n'''אם זהו ניסיון עריכה לגיטימי, אנא נסו שוב.'''\nאם זה לא עוזר, נסו [[Special:UserLogout|לצאת מהחשבון]] ולהיכנס אליו שנית.",
"token_suffix_mismatch": "'''עריכתך נדחתה כיוון שהדפדפן שלך מחק את תווי הפיסוק באסימון העריכה.'''\nהעריכה נדחתה כדי למנוע בעיות כאלה בטקסט של הדף.\nלעתים התקלה מתרחשת עקב שימוש בשירות פרוקסי אנונימי פגום.",
"edit_form_incomplete": "'''כמה חלקים מטופס העריכה לא הגיעו לשרת; בדקו היטב שעריכותיכם לא נפגעו ונסו שוב.'''",
- "editing": "עריכת $1",
- "creating": "יצירת $1",
- "editingsection": "עריכת $1 (פסקה)",
- "editingcomment": "עריכת $1 (פסקה חדשה)",
+ "editing": "עריכת הדף $1",
+ "creating": "יצירת הדף $1",
+ "editingsection": "עריכת הדף $1 (פסקה)",
+ "editingcomment": "עריכת הדף $1 (פסקה חדשה)",
"editconflict": "התנגשות עריכה: $1",
"explainconflict": "משתמש אחר שינה את הדף מאז שהתחלתם לערוך אותו.\nחלון העריכה העליון מכיל את הטקסט בדף כפי שהוא עתה.\nהשינויים שלכם מוצגים בחלון העריכה התחתון.\nעליכם למזג את השינויים שלכם לתוך הטקסט הקיים.\n'''רק''' הטקסט בחלון העריכה העליון יישמר כשתלחצו על \"{{int:savearticle}}\".",
"yourtext": "הטקסט שלך",
@@ -627,20 +640,20 @@
"yourdiff": "הבדלים",
"copyrightwarning": "'''שימו לב:''' תרומתכם ל{{grammar:תחילית|{{SITENAME}}}} תפורסם תחת תנאי הרישיון $2 (ראו $1 לפרטים נוספים). אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על־ידי אחרים, שתופץ לעיני כול, ושאחרים יוכלו להעתיק ממנה בציון המקור – אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן בזכויות יוצרים. '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''",
"copyrightwarning2": "'''שימו לב:''' תורמים אחרים עשויים לערוך או אף להסיר את תרומתכם ל{{grammar:תחילית|{{SITENAME}}}}. אם אינכם רוצים שעבודתכם תהיה זמינה לעריכה על־ידי אחרים, אל תפרסמו אותה פה. כמו־כן, אתם מבטיחים לנו כי כתבתם את הטקסט הזה בעצמכם, או העתקתם אותו ממקור שאינו מוגן בזכויות יוצרים (ראו $1 לפרטים נוספים). '''אל תעשו שימוש בחומר המוגן בזכויות יוצרים ללא רשות!'''",
- "longpageerror": "'''שגיאה: אורך הטקסט ששלחתם הוא {{PLURAL:$1|קילובייט אחד|$1 קילובייטים}}, והוא ארוך יותר מהאורך המרבי של {{PLURAL:$2|קילובייט אחד|$2 קילובייטים}}.'''\nלא ניתן לשמור אותו.",
+ "longpageerror": "<strong>שגיאה: אורך הטקסט ששלחת הוא {{PLURAL:$1|קילובייט אחד|$1 קילובייטים}}, והוא ארוך יותר מהאורך המרבי של {{PLURAL:$2|קילובייט אחד|$2 קילובייטים}}.</strong>\nלא ניתן לשמור אותו.",
"readonlywarning": "'''אזהרה: בסיס הנתונים ננעל לצורך תחזוקה. בזמן זה לא ניתן לשמור את הטקסט הערוך.'''\nבאפשרותך להעתיק ולהדביק את הטקסט לתוך קובץ טקסט ולשמור אותו למאוחר יותר.\n\nמפעיל המערכת שנעל את בסיס הנתונים סיפק את ההסבר הבא: $1",
"protectedpagewarning": "'''אזהרה: דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
"semiprotectedpagewarning": "'''הערה:''' דף זה מוגן כך שרק משתמשים רשומים יכולים לערוך אותו.\nפעולת היומן האחרונה מוצגת להלן:",
"cascadeprotectedwarning": "'''אזהרה:''' דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו, כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:",
"titleprotectedwarning": "'''אזהרה: דף זה מוגן כך שדרושות [[Special:ListGroupRights|הרשאות מסוימות]] כדי ליצור אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
"templatesused": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בדף זה:",
- "templatesusedpreview": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בתצוגה המקדימה הזו:",
+ "templatesusedpreview": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בתצוגה המקדימה הזאת:",
"templatesusedsection": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בפסקה זו:",
"template-protected": "(מוגנת)",
"template-semiprotected": "(מוגנת חלקית)",
"hiddencategories": "דף זה כלול ב{{PLURAL:$1|קטגוריה מוסתרת אחת|־$1 קטגוריות מוסתרות}}:",
"edittools": "<!-- הטקסט הנכתב כאן יוצג מתחת לטופסי עריכת דפים והעלאת קבצים, ולפיכך ניתן לכתוב להציג בו תווים קשים לכתיבה, קטעים מוכנים של טקסט ועוד. -->",
- "nocreatetext": "ב{{grammar:תחילית|{{SITENAME}}}} קיימת הגבלה על יצירת דפים חדשים.\nבאפשרותך לחזור אחורה ולערוך דף קיים, או [[Special:UserLogin|להיכנס לחשבון]].",
+ "nocreatetext": "ב{{grammar:תחילית|{{SITENAME}}}} קיימת הגבלה על יצירת דפים חדשים.\nבאפשרותך לחזור אחורה ולערוך דף קיים, או [[Special:UserLogin|להיכנס לחשבון או ליצור חשבון]].",
"nocreate-loggedin": "אינך מורשה ליצור דפים חדשים.",
"sectioneditnotsupported-title": "עריכת פסקאות אינה נתמכת",
"sectioneditnotsupported-text": "עריכת פסקאות אינה נתמכת בדף זה.",
@@ -653,7 +666,7 @@
"edit-hook-aborted": "העריכה בוטלה על־ידי Hook.\nלא ניתן הסבר לביטול.",
"edit-gone-missing": "לא ניתן לעדכן את הדף.\nנראה שהוא נמחק.",
"edit-conflict": "התנגשות עריכה.",
- "edit-no-change": "המערכת התעלמה מעריכתכם, כיוון שלא נעשה שינוי בטקסט.",
+ "edit-no-change": "המערכת התעלמה מעריכתך כיוון שלא נעשה שינוי בטקסט.",
"postedit-confirmation-created": "הדף נוצר.",
"postedit-confirmation-restored": "הדף שוחזר.",
"postedit-confirmation-saved": "עריכתך נשמרה.",
@@ -669,6 +682,10 @@
"content-model-text": "טקסט פשוט",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "אוביקט ריק",
+ "content-json-empty-array": "מערך ריק",
+ "duplicate-args-category": "דפים שמשתמשים בפרמטרים כפולים בקריאות לתבניות",
+ "duplicate-args-category-desc": "הדף מכיל קריאות לתבניות שמשתמשות בפרמטרים כפולים, כגון <code><nowiki>{{תאריך|יום=1|יום=2}}</nowiki></code> או <code><nowiki>{{שעה|חמש|1=שש}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''אזהרה:''' דף זה כולל יותר מדי קריאות לפונקציות מפענח שגוזלות משאבים.\n\nנדרש {{PLURAL:$2|שתהיה בו לכל היותר קריאה אחת|שתהיינה בו לכל היותר $2 קריאות}} לפונקציות כאלה, אך כרגע יש בו {{PLURAL:$1|קריאה אחת|$1 קריאות}}.",
"expensive-parserfunction-category": "דפים עם יותר מדי קריאות למשתנים הגוזלים משאבים",
"post-expand-template-inclusion-warning": "'''אזהרה:''' התבניות המוכללות בדף זה גדולות מדי.\nחלק מהתבניות לא יוכללו.",
@@ -694,7 +711,7 @@
"undo-summary": "ביטול גרסה $1 של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]])",
"undo-summary-username-hidden": "ביטול גרסה $1 של משתמש מוסתר",
"cantcreateaccounttitle": "לא ניתן ליצור את החשבון",
- "cantcreateaccount-text": "אפשרות יצירת החשבונות מכתובת ה־IP הזו ('''$1''') נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
+ "cantcreateaccount-text": "אפשרות יצירת החשבונות מכתובת ה־IP הזאת (<strong>$1</strong>) נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
"cantcreateaccount-range-text": "אפשרות יצירת החשבונות מכתובות IP בתוך הטווח '''$1''', כולל כתובת ה־IP שלך ('''$4'''), נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא \"$2\".",
"viewpagelogs": "הצגת יומנים עבור דף זה",
"nohistory": "אין היסטוריית שינויים עבור דף זה.",
@@ -720,17 +737,17 @@
"history-feed-title": "היסטוריית גרסאות",
"history-feed-description": "היסטוריית הגרסאות של הדף הזה בוויקי",
"history-feed-item-nocomment": "$1 ב־$2",
- "history-feed-empty": "הדף המבוקש לא נמצא.\nייתכן שהוא נמחק, או ששמו שונה.\nנסו [[Special:Search|לחפש]] אחר דפים רלוונטיים חדשים.",
+ "history-feed-empty": "הדף המבוקש לא נמצא.\nייתכן שהוא נמחק, או ששמו שונה.\nבאפשרותך לנסות [[Special:Search|לחפש]] דפים רלוונטיים חדשים.",
"rev-deleted-comment": "(תקציר העריכה הוסר)",
"rev-deleted-user": "(שם המשתמש הוסר)",
- "rev-deleted-event": "(פעולת היומן הוסרה)",
+ "rev-deleted-event": "(פרטים מהיומן הוסרו)",
"rev-deleted-user-contribs": "[שם המשתמש או כתובת ה־IP הוסרו – העריכה הוסתרה מדף התרומות]",
- "rev-deleted-text-permission": "גרסת הדף הזו <strong>נמחקה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
- "rev-suppressed-text-permission": "גרסת הדף הזו <strong>הועלמה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
- "rev-deleted-text-unhide": "גרסת הדף הזו <strong>נמחקה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].\nאתם עדיין יכולים [$1 לצפות בגרסה הזו] אם ברצונכם להמשיך.",
- "rev-suppressed-text-unhide": "גרסת הדף הזו <strong>הועלמה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].\nאתם עדיין יכולים [$1 לצפות בגרסה הזו] אם ברצונכם להמשיך.",
- "rev-deleted-text-view": "גרסת הדף הזו '''נמחקה'''.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
- "rev-suppressed-text-view": "גרסת הדף הזו <strong>הועלמה</strong>.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
+ "rev-deleted-text-permission": "גרסת הדף הזאת <strong>נמחקה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
+ "rev-suppressed-text-permission": "גרסת הדף הזאת <strong>הועלמה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
+ "rev-deleted-text-unhide": "גרסת הדף הזאת <strong>נמחקה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].\nאתם עדיין יכולים [$1 לצפות בגרסה הזאת] אם ברצונכם להמשיך.",
+ "rev-suppressed-text-unhide": "גרסת הדף הזאת <strong>הועלמה</strong>.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].\nאתם עדיין יכולים [$1 לצפות בגרסה הזאת] אם ברצונכם להמשיך.",
+ "rev-deleted-text-view": "גרסת הדף הזאת <strong>נמחקה</strong>.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
+ "rev-suppressed-text-view": "גרסת הדף הזאת <strong>הועלמה</strong>.\nאתם יכולים לצפות בה; ניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} יומן ההעלמות].",
"rev-deleted-no-diff": "אינכם יכולים לצפות בהבדלים בין הגרסאות שציינתם משום שאחת מהן '''נמחקה'''.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
"rev-suppressed-no-diff": "אינכם יכולים לצפות בהבדלים בין הגרסאות שציינתם משום שאחת מהן '''נמחקה'''.",
"rev-deleted-unhide-diff": "אחת מהגרסאות שביקשתם להשוות '''נמחקה'''.\nניתן למצוא פרטים על כך ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].\nאתם עדיין יכולים [$1 לצפות בהבדלים בין הגרסאות] אם ברצונכם להמשיך.",
@@ -757,7 +774,7 @@
"revdelete-legend": "הגדרת הגבלות התצוגה",
"revdelete-hide-text": "תוכן הגרסה",
"revdelete-hide-image": "הסתרת תוכן הקובץ",
- "revdelete-hide-name": "הסתרת הפעולה ודף היעד",
+ "revdelete-hide-name": "הסתרת דף היעד והפרמטרים",
"revdelete-hide-comment": "תקציר העריכה",
"revdelete-hide-user": "שם המשתמש או כתובת ה־IP של העורך",
"revdelete-hide-restricted": "העלמת המידע גם ממפעילי המערכת",
@@ -790,17 +807,17 @@
"suppressionlog": "יומן העלמות",
"suppressionlogtext": "להלן רשימת המחיקות והחסימות הכוללות תוכן המוסתר ממפעילי המערכת.\nראו את [[Special:BlockList|רשימת החסומים]] לרשימת החסימות הפעילות כעת.",
"mergehistory": "מיזוג גרסאות של דפים",
- "mergehistory-header": "דף זה מאפשר לכם למזג גרסאות מהיסטוריית הדף של דף מקור לתוך דף חדש יותר.\nאנא ודאו ששינוי זה לא יפגע בהמשכיות השינויים בדף הישן.\n\n'''לפחות גרסה אחת של דף המקור חייבת להישאר בו.'''",
+ "mergehistory-header": "דף זה מאפשר לך למזג גרסאות מתוך היסטוריית גרסאות של דף אחד (דף המקור) לתוך דף חדש.\nיש לוודא שהמיזוג לא יפגע בהמשכיות השינויים בדף הישן.",
"mergehistory-box": "מיזוג גרסאות של שני דפים:",
"mergehistory-from": "דף המקור:",
"mergehistory-into": "דף היעד:",
"mergehistory-list": "היסטוריית עריכות בת מיזוג",
- "mergehistory-merge": "ניתן למזג את הגרסאות הבאות של [[:$1]] לתוך [[:$2]]. אנא השתמשו בלחצני האפשרות כדי לבחור זמן שרק גרסאות שנוצרו בו ולפניו ימוזגו. שימוש בקישורי הניווט יאפס עמודה זו.",
+ "mergehistory-merge": "ניתן למזג את הגרסאות הבאות של [[:$1]] לתוך [[:$2]].\nיש להשתמש בלחצני האפשרות כדי לבחור זמן שרק גרסאות שנוצרו בו ולפניו ימוזגו.\nשימוש בקישורי הניווט יאפס עמודה זו.",
"mergehistory-go": "הצגת עריכות בנות מיזוג",
"mergehistory-submit": "מיזוג",
"mergehistory-empty": "אין גרסאות למיזוג.",
"mergehistory-success": "{{PLURAL:$3|גרסה אחת|$3 גרסאות}} של [[:$1]] מוזגו בהצלחה לתוך [[:$2]].",
- "mergehistory-fail": "לא ניתן לבצע את מיזוג הגרסאות, אנא בדקו שנית את הגדרות הדף והזמן.",
+ "mergehistory-fail": "לא ניתן לבצע את מיזוג הגרסאות, יש לבדוק שנית את הגדרות הדף והזמן.",
"mergehistory-fail-toobig": "לא ניתן לבצע את מיזוג הגרסאות כיוון שצריך להעביר יותר גרסאות מהמגבלה, שהיא {{PLURAL:$1|גרסה אחת|‏‏֫$1 גרסאות}}.",
"mergehistory-no-source": "דף המקור $1 אינו קיים.",
"mergehistory-no-destination": "דף היעד $1 אינו קיים.",
@@ -811,12 +828,11 @@
"mergehistory-same-destination": "דפי המקור והיעד זהים",
"mergehistory-reason": "סיבה:",
"mergelog": "יומן מיזוגים",
- "pagemerge-logentry": "מיזג את [[$1]] לתוך [[$2]] (גרסאות עד $3)",
"revertmerge": "ביטול המיזוג",
"mergelogpagetext": "זוהי רשימה של המיזוגים האחרונים של גרסאות מדף אחד לתוך דף שני.",
"history-title": "היסטוריית גרסאות של הדף \"$1\"",
"difference-title": "הבדלים בין גרסאות בדף \"$1\"",
- "difference-title-multipage": "$1 ו{{GRAMMAR:תחילית|$2}}: הבדלים בין דפים",
+ "difference-title-multipage": "הבדלים בין הדף \"$1\" לבין הדף \"$2\"",
"difference-multipage": "(הבדלים בין דפים)",
"lineno": "שורה $1:",
"compareselectedversions": "השוואת הגרסאות שנבחרו",
@@ -834,12 +850,14 @@
"notextmatches": "אין דפים עם תוכן תואם",
"prevn": "{{PLURAL:$1|הקודם|$1 הקודמים}}",
"nextn": "{{PLURAL:$1|הבא|$1 הבאים}}",
+ "prev-page": "לעמוד הקודם",
+ "next-page": "לעמוד הבא",
"prevn-title": "{{PLURAL:$1|התוצאה הקודמת|$1 התוצאות הקודמות}}",
"nextn-title": "{{PLURAL:$1|התוצאה הבאה|$1 התוצאות הבאות}}",
"shown-title": "הצגת {{PLURAL:$1|תוצאה אחת|$1 תוצאות}} בדף",
"viewprevnext": "צפייה ב: ($1 {{int:pipe-separator}} $2) ($3)",
- "searchmenu-exists": "'''קיים דף בשם \"[[:$1]]\" באתר זה.'''",
- "searchmenu-new": "<strong>'''יצירת הדף \"[[:$1]]\" באתר הוויקי הזה.'''</strong>\n{{PLURAL:$2|0=|ר' גם את הדף שנמצא בחיפוש.|ר' גם את תוצאות החיפוש.}}",
+ "searchmenu-exists": "<strong>קיים דף בשם \"[[:$1]]\" באתר הוויקי הזה.</strong> {{PLURAL:$2|0=|ר' גם את הדפים האחרים שנמצאו בחיפוש.}}",
+ "searchmenu-new": "<strong>יצירת הדף \"[[:$1]]\" באתר הוויקי הזה.</strong> {{PLURAL:$2|0=|ר' גם את הדף שנמצא בחיפוש.|ר' גם את הדפים שנמצאו בחיפוש.}}",
"searchprofile-articles": "דפי תוכן",
"searchprofile-images": "מולטימדיה",
"searchprofile-everything": "הכול",
@@ -852,6 +870,7 @@
"search-result-category-size": "{{PLURAL:$1|חבר אחד|$1 חברים}} ({{PLURAL:$2|קטגוריית משנה אחת|$2 קטגוריות משנה}}, {{PLURAL:$3|קובץ אחד|$3 קבצים}})",
"search-redirect": "(הפניה $1)",
"search-section": "(פסקה $1)",
+ "search-category": "(קטגוריה $1)",
"search-file-match": "(התאמה בתוכן הקובץ)",
"search-suggest": "האם התכוונת ל: $1",
"search-interwiki-caption": "מיזמי אחות",
@@ -876,7 +895,7 @@
"preferences": "העדפות",
"mypreferences": "העדפות",
"prefs-edits": "מספר עריכות:",
- "prefsnologintext2": "אנא היכנסו לחשבון כדי לשנות העדפות משתמש.",
+ "prefsnologintext2": "נדרשת כניסה לחשבון כדי לשנות העדפות משתמש.",
"prefs-skin": "עיצוב",
"skin-preview": "תצוגה מקדימה",
"datedefault": "ברירת המחדל",
@@ -885,6 +904,11 @@
"prefs-personal": "פרטי המשתמש",
"prefs-rc": "שינויים אחרונים",
"prefs-watchlist": "רשימת המעקב",
+ "prefs-editwatchlist": "עריכת רשימת המעקב",
+ "prefs-editwatchlist-label": "עריכת ערכים ברשימת המעקב שלך:",
+ "prefs-editwatchlist-edit": "צפייה והסרת כותרות ברשימת המעקב שלך",
+ "prefs-editwatchlist-raw": "עריכת רשימת המעקב הגולמית",
+ "prefs-editwatchlist-clear": "ניקוי רשימת המעקב שלך",
"prefs-watchlist-days": "מספר הימים המרבי שיוצגו ברשימת המעקב:",
"prefs-watchlist-days-max": "לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}",
"prefs-watchlist-edits": "מספר העריכות המרבי שיוצגו ברשימת המעקב המורחבת:",
@@ -946,15 +970,15 @@
"prefs-help-variant": "סוג הכתב המועדף להצגת דפי התוכן באתר ויקי זה.",
"yournick": "חתימה:",
"prefs-help-signature": "על הודעות בדפי שיחה יש לחתום באמצעות הטקסט \"<nowiki>~~~~</nowiki>\", שיומר לחתימה שלך ואחריה תאריך ושעה.",
- "badsig": "חתימה מסוגננת שגויה.\nאנא בדקו את תגיות ה־HTML.",
- "badsiglength": "חתימתכם ארוכה מדי.\nאורך החתימה המרבי הוא {{PLURAL:$1|תו אחד|$1 תווים}}.",
+ "badsig": "חתימה מסוגננת שגויה.\nנא לבדוק את תגיות ה־HTML.",
+ "badsiglength": "חתימתך ארוכה מדי.\nאורך החתימה המרבי הוא {{PLURAL:$1|תו אחד|$1 תווים}}.",
"yourgender": "איזה תיאור מתאים לך?",
"gender-unknown": "איני רוצה לומר",
"gender-male": "הוא עורך דפים בוויקי",
"gender-female": "היא עורכת דפים בוויקי",
"prefs-help-gender": "אין חובה למלא העדפה זו.\nהמערכת משתמשת במידע זה כדי לפנות אליך/אלייך ולציין את שם המשתמש שלך במין הדקדוקי הנכון.\nהמידע יהיה ציבורי.",
"email": "דוא\"ל",
- "prefs-help-realname": "השם האמיתי הוא אופציונאלי.\nאם תבחרו לספקו, הוא ישמש לייחוס עבודתכם אליכם.",
+ "prefs-help-realname": "אין חובה למלא את השם האמיתי.\nהשם האמיתי עשוי לשמש כדי לייחס לך את עבודתך.",
"prefs-help-email": "כתובת דואר אלקטרוני היא אופציונאלית, אבל היא חיונית לאיפוס הסיסמה במקרה שתשכחו אותה.",
"prefs-help-email-others": "באפשרותך גם לבחור לאפשר לאחרים ליצור איתך קשר באמצעות דוא\"ל דרך קישור בדף המשתמש או בדף השיחה שלך.\nכתובת הדוא\"ל שלך לא תיחשף כשמשתמשים אחרים ייצרו קשר איתך.",
"prefs-help-email-required": "כתובת דואר אלקטרוני נדרשת לכתיבה באתר.",
@@ -975,7 +999,7 @@
"prefs-tokenwatchlist": "אסימון",
"prefs-diffs": "הבדלים בין גרסאות",
"prefs-help-prefershttps": "העדפה זו תיכנס לתוקף בכניסה הבאה לחשבון.",
- "prefswarning-warning": "ביצעת שינויים בהעדפות שלך שעדיין לא נשמרו.\nעזיבת דף זה ללא לחיצה על \"$1\" תגרום להעדפות שלך לא להתעדכן.",
+ "prefswarning-warning": "ביצעת שינויים בהעדפות שלך, והם עדיין לא נשמרו.\nעזיבת דף זה ללא לחיצה על \"$1\" תגרום לכך שההעדפות שלך לא יעודכנו.",
"prefs-tabs-navigation-hint": "טיפ: ניתן להשתמש במקשי החצים הימני והשמאלי כדי לנווט בין הלשוניות ברשימת הלשוניות.",
"email-address-validity-valid": "כתובת הדוא\"ל נראית תקינה",
"email-address-validity-invalid": "יש להקליד כתובת דוא\"ל תקינה",
@@ -990,7 +1014,7 @@
"userrights-groupsmember-auto": "{{GENDER:$2|חבר|חברה}} אוטומטית ב{{PLURAL:$1|קבוצה|קבוצות}}:",
"userrights-groups-help": "באפשרותכם לשנות את הקבוצות שמשתמש זה חבר בהן:\n* תיבה מסומנת פירושה שהמשתמש חבר בקבוצה.\n* תיבה בלתי מסומנת פירושה שהמשתמש אינו חבר בקבוצה.\n* סימון * פירושו שלא תוכלו להסיר משתמש מהקבוצה מרגע שהוספתם אותו אליה, או להפך.",
"userrights-reason": "סיבה:",
- "userrights-no-interwiki": "אין לכם הרשאה לערוך הרשאות משתמש באתרים אחרים.",
+ "userrights-no-interwiki": "אין לך הרשאה לערוך הרשאות משתמש באתרים אחרים.",
"userrights-nodatabase": "בסיס הנתונים $1 אינו קיים או אינו מקומי.",
"userrights-nologin": "עליכם [[Special:UserLogin|להיכנס לחשבון]] עם הרשאות מתאימות כדי לשנות הרשאות של משתמשים.",
"userrights-notallowed": "אין לך הרשאה להוסיף או להסיר הרשאות של משתמשים.",
@@ -1061,6 +1085,7 @@
"right-protect": "שינוי רמות הגנה ועריכת דפים המוגנים בהגנה מדורגת",
"right-editprotected": "עריכת דפים המוגנים ברמת \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "עריכת דפים המוגנים ברמת \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "עריכת מודל התוכן של דף",
"right-editinterface": "עריכת ממשק המשתמש",
"right-editusercssjs": "עריכת דפי CSS ו־JavaScript של משתמשים אחרים",
"right-editusercss": "עריכת גיליונות CSS של משתמשים אחרים",
@@ -1088,6 +1113,7 @@
"right-override-export-depth": "ייצוא דפים כולל דפים מקושרים עד עומק של חמישה",
"right-sendemail": "שליחת דואר אלקטרוני למשתמשים אחרים",
"right-passwordreset": "צפייה בדואר אלקטרוני של איפוס סיסמה",
+ "right-managechangetags": "יצירת ומחיקת [[Special:Tags|תגיות]] מבסיס הנתונים",
"newuserlogpage": "יומן רישום משתמשים",
"newuserlogpagetext": "זהו יומן המכיל הרשמות של משתמשים.",
"rightslog": "יומן תפקידים",
@@ -1122,7 +1148,7 @@
"action-import": "לייבא דפים מאתר ויקי אחר",
"action-importupload": "לייבא דפים באמצעות העלאת קובץ",
"action-patrol": "לסמן עריכות של אחרים כבדוקות",
- "action-autopatrol": "לסמן את עריכותיך כבדוקות",
+ "action-autopatrol": "לסמן את העריכות שלך כבדוקות",
"action-unwatchedpages": "לצפות ברשימת הדפים שאינם במעקב",
"action-mergehistory": "למזג את ההיסטוריה של דף זה",
"action-userrights": "לערוך את כל הרשאות המשתמש",
@@ -1131,8 +1157,10 @@
"action-sendemail": "לשלוח דואר אלקטרוני",
"action-editmywatchlist": "לערוך את רשימת המעקב שלך",
"action-viewmywatchlist": "לצפות ברשימת המעקב שלך",
- "action-viewmyprivateinfo": "לצפות במידע הפרטי שלכם",
- "action-editmyprivateinfo": "לערוך את המידע הפרטי שלכם",
+ "action-viewmyprivateinfo": "לצפות במידע הפרטי שלך",
+ "action-editmyprivateinfo": "לערוך את המידע הפרטי שלך",
+ "action-editcontentmodel": "לערוך את מודל התוכן של דף",
+ "action-managechangetags": "ליצור ולמחוק תגיות מבסיס הנתונים",
"nchanges": "{{PLURAL:$1|שינוי אחד|$1 שינויים}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|מאז ביקורך האחרון}}",
"enhancedrc-history": "היסטוריה",
@@ -1196,16 +1224,16 @@
"uploadbtn": "העלאה",
"reuploaddesc": "ביטול ההעלאה וחזרה לטופס העלאת קבצים לשרת",
"upload-tryagain": "שליחת התיאור החדש של הקובץ",
- "uploadnologin": "לא נכנסתם לחשבון",
- "uploadnologintext": "עליכם $1 כדי להעלות קבצים.",
+ "uploadnologin": "לא נכנסת לחשבון",
+ "uploadnologintext": "נדרשת $1 כדי להעלות קבצים.",
"upload_directory_missing": "שרת האינטרנט אינו יכול ליצור את תיקיית ההעלאות ($1) החסרה.",
"upload_directory_read_only": "שרת האינטרנט אינו יכול לכתוב בתיקיית ההעלאות ($1).",
"uploaderror": "שגיאה בהעלאת הקובץ",
"upload-recreate-warning": "'''אזהרה: קובץ בשם זה נמחק או הועבר.'''\n\nיומני המחיקות וההעברות של הדף מוצגים להלן:",
"uploadtext": "השתמשו בטופס להלן כדי להעלות קבצים.\nכדי לראות או לחפש קבצים שהועלו בעבר אנא פנו ל[[Special:FileList|רשימת הקבצים שהועלו]], וכמו כן, העלאות (כולל העלאות של גרסה חדשה) מוצגות ב[[Special:Log/upload|יומן ההעלאות]], ומחיקות ב[[Special:Log/delete|יומן המחיקות]].\n\nכדי לכלול קובץ בדף, השתמשו בקישור באחת הצורות הבאות:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' לשימוש בגרסה המלאה של הקובץ\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|טקסט תיאור]]</nowiki></code>''' לשימוש בגרסה מוקטנת ברוחב 200 פיקסלים בתיבה בצד שמאל של הדף, עם 'טקסט תיאור' כתיאור\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' לקישור ישיר לקובץ בלי להציגו",
- "upload-permitted": "סוגי קבצים מותרים: $1.",
- "upload-preferred": "סוגי קבצים מומלצים: $1.",
- "upload-prohibited": "סוגי קבצים אסורים: $1.",
+ "upload-permitted": "{{PLURAL:$2|סוג קובץ מותר|סוגי קבצים מותרים}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|סוג קובץ מומלץ|סוגי קבצים מומלצים}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|סוג קובץ אסור|סוגי קבצים אסורים}}: $1.",
"uploadlogpage": "יומן העלאות",
"uploadlogpagetext": "להלן רשימה של העלאות הקבצים האחרונות שבוצעו.\nראו את [[Special:NewFiles|גלריית הקבצים החדשים]] להצגה ויזואלית שלהם.",
"filename": "שם הקובץ",
@@ -1231,7 +1259,7 @@
"filename-tooshort": "שם הקובץ קצר מדי",
"filetype-banned": "אסור להעלות קבצים מהסוג הזה.",
"verification-error": "קובץ זה לא עבר את תהליך אימות הקבצים",
- "hookaborted": "השינוי שניסית לבצע הופסק על ידי מבנה Hook של הרחבה",
+ "hookaborted": "השינוי שניסית לבצע הופסק על־ידי הרחבה.",
"illegal-filename": "שם הקובץ אינו מותר להעלאה",
"overwrite": "דריסת קובץ קיים אינה מותרת",
"unknown-error": "אירעה שגיאה בלתי ידועה",
@@ -1239,18 +1267,18 @@
"tmp-write-error": "שגיאה בכתיבה לקובץ הזמני",
"large-file": "מומלץ שהקבצים לא יהיו גדולים יותר מ־$1 (גודל הקובץ שהעליתם הוא $2).",
"largefileserver": "גודל הקובץ חורג ממגבלת השרת.",
- "emptyfile": "נראה שהקובץ שהעליתם ריק. ייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ. אנא ודאו שזהו הקובץ שברצונכם להעלות.",
+ "emptyfile": "נראה שהקובץ שהעלית ריק.\nייתכן שהסיבה לכך היא שגיאת הקלדה בשם הקובץ.\nיש לוודא שזה הקובץ שברצונך להעלות.",
"windows-nonascii-filename": "אתר ויקי זה אינו תומך בשמות קבצים עם תווים מיוחדים או תווים שאינם באנגלית.",
"fileexists": "קובץ בשם הזה כבר קיים, אנא בדקו את <strong>[[:$1]]</strong> אם אינכם בטוחים שברצונכם להחליף אותו.\n[[$1|thumb]]",
"filepageexists": "דף תיאור הקובץ עבור קובץ זה כבר נוצר ב<strong>[[:$1]]</strong>, אך לא קיים קובץ בשם זה.\nתיאור הקובץ שתכתבו לא יופיע בדף תיאור הקובץ.\nכדי לגרום לו להופיע שם, יהיה עליכם לערוך אותו ידנית. [[$1|thumb]]",
"fileexists-extension": "קובץ עם שם דומה כבר קיים: [[$2|thumb]]\n* שם הקובץ המועלה: <strong>[[:$1]]</strong>\n* שם הקובץ הקיים: <strong>[[:$2]]</strong>\nאולי כדאי לתת לקובץ שם ספציפי יותר?",
- "fileexists-thumbnail-yes": "הקובץ הוא כנראה תמונה מוקטנת (ממוזערת). [[$1|thumb]]\nאנא בדקו את הקובץ <strong>[[:$1]]</strong>.\nאם הקובץ שבדקתם הוא אותה התמונה בגודל מקורי, אין זה הכרחי להעלות גם תמונה ממוזערת.",
- "file-thumbnail-no": "שם הקובץ מתחיל עם <strong>$1</strong>. נראה שזוהי תמונה מוקטנת (ממוזערת).\nאם התמונה בגודל מלא מצויה ברשותכם, אנא העלו אותה ולא את התמונה הממוזערת; אחרת, אנא שנו את שם הקובץ.",
+ "fileexists-thumbnail-yes": "נראה שהקובץ הוא תמונה מוקטנת (ממוזערת).\n[[$1|thumb]]\nיש לבדוק את הקובץ <strong>[[:$1]]</strong>.\nאם הקובץ שבדקת הוא אותה התמונה בגודל מקורי, אין זה הכרחי להעלות גם תמונה ממוזערת.",
+ "file-thumbnail-no": "שם הקובץ מתחיל ב־<strong>$1</strong>.\nנראה שזוהי תמונה מוקטנת (ממוזערת).\nאם התמונה בגודל מלא מצויה ברשותך, יש להעלות אותה ולא את התמונה הממוזערת; אחרת, יש לשנות את שם הקובץ.",
"fileexists-forbidden": "קובץ בשם זה כבר קיים, ואינכם יכולים להחליף אותו.\nאם אתם עדיין מעוניינים להעלות קובץ זה, אנא חזרו לדף הקודם והעלו את הקובץ תחת שם חדש.\n[[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "קובץ בשם זה כבר קיים כקובץ משותף.\nאם אתם עדיין מעוניינים להעלות קובץ זה, אנא חזרו לדף הקודם והעלו את הקובץ תחת שם חדש.\n[[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "קובץ זה זהה {{PLURAL:$1|לקובץ הבא|לקבצים הבאים}}:",
- "file-deleted-duplicate": "קובץ זהה לקובץ זה ([[:$1]]) נמחק בעבר.\nאנא בדקו את היסטוריית המחיקה של הקובץ לפני שתעלו אותו מחדש.",
- "file-deleted-duplicate-notitle": "קובץ זהה לקובץ זה נמחק בעבר, והכותרת שלו הועלמה.\nאנא בקשו ממישהו שיכול לראות נתונים על קבצים שהועלמו לבדוק את המצב לפני שתעלו אותו מחדש.",
+ "file-deleted-duplicate": "קובץ זהה לקובץ זה ([[:$1]]) נמחק בעבר.\nיש לבדוק את היסטוריית המחיקה של הקובץ לפני העלאתו מחדש.",
+ "file-deleted-duplicate-notitle": "קובץ זהה לקובץ זה נמחק בעבר, והכותרת שלו הועלמה.\nיש לבקש ממשתמש שיכול לראות נתונים על קבצים שהועלמו לבדוק את המצב לפני העלאת הקובץ מחדש.",
"uploadwarning": "אזהרת העלאת קבצים",
"uploadwarning-text": "אנא שנו את תיאור הקובץ שלמטה ונסו שוב.",
"savefile": "שמירת קובץ",
@@ -1258,7 +1286,7 @@
"copyuploaddisabled": "העלאת קבצים מכתובת URL מבוטלת.",
"uploaddisabledtext": "אפשרות העלאת הקבצים מבוטלת.",
"php-uploaddisabledtext": "אפשרות העלאת הקבצים מבוטלת ברמת PHP. אנא בדקו את ההגדרה file_uploads.",
- "uploadscripted": "הקובץ כולל קוד סקריפט או HTML שעשוי להתפרש או להתבצע בטעות על ידי הדפדפן.",
+ "uploadscripted": "הקובץ כולל קוד סקריפט או HTML שעשוי להתפרש או להתבצע בטעות על־ידי הדפדפן.",
"uploadscriptednamespace": "קובץ ה‏‏֫־SVG הזה כולל מרחב שם בלתי חוקי: '$1'",
"uploadinvalidxml": "לא ניתן לפרש את ה־XML בקובץ שהועלה.",
"uploadvirus": "הקובץ מכיל וירוס!\nפרטים:\n<div dir=\"ltr\">$1</div>",
@@ -1266,18 +1294,18 @@
"upload-source": "קובץ המקור",
"sourcefilename": "שם הקובץ:",
"sourceurl": "כתובת URL של המקור:",
- "destfilename": "שמור קובץ בשם:",
+ "destfilename": "שמירת הקובץ בשם:",
"upload-maxfilesize": "גודל הקובץ המרבי: $1",
"upload-description": "תיאור הקובץ",
"upload-options": "אפשרויות העלאה",
"watchthisupload": "מעקב אחרי קובץ זה",
"filewasdeleted": "קובץ בשם זה כבר הועלה בעבר, ולאחר מכן נמחק. אנא בדקו את הדף $1 לפני שתמשיכו להעלותו שנית.",
- "filename-bad-prefix": "שם הקובץ שאתם מעלים מתחיל עם '''\"$1\"''', שהוא שם שאינו מתאר את הקובץ ובדרך כלל מוכנס אוטומטית על ידי מצלמות דיגיטליות. אנא בחרו שם מתאים יותר לקובץ, שיתאר את תכניו.",
+ "filename-bad-prefix": "שם הקובץ שאתם מעלים מתחיל ב־<strong>\"$1\"</strong>, שהוא שם שאינו מתאר את הקובץ ובדרך כלל מוקצה אוטומטית על־ידי מצלמות דיגיטליות.\nיש לבחור שם מתאים יותר לקובץ, שיתאר את תכניו.",
"filename-prefix-blacklist": " #<!-- נא להשאיר שורה זו בדיוק כפי שהיא --> <pre>\n# התחביר הוא כדלקמן:\n# * כל דבר מתו \"#\" לסוף השורה הוא הערה\n# * כל שורה לא ריקה היא קידומת לשמות קבצים טיפוסיים שמצלמות דיגיטליות נותנות אוטומטית\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # מספר טלפונים סלולריים\nIMG # כללי\nJD # Jenoptik\nMGP # Pentax\nPICT # שונות\n #</pre> <!-- נא להשאיר שורה זו בדיוק כפי שהיא -->",
"upload-success-subj": "ההעלאה הושלמה בהצלחה",
"upload-success-msg": "ההעלאה מהכתובת [$2] הושלמה בהצלחה. הקובץ שהעליתם זמין כאן: [[:{{ns:file}}:$1]]",
"upload-failure-subj": "בעיה בהעלאה",
- "upload-failure-msg": "הייתה בעיה עם הקובץ שהעליתם מהכתובת [$2]:\n\n$1",
+ "upload-failure-msg": "הייתה בעיה עם הקובץ שהעלית מהכתובת [$2]:\n\n$1",
"upload-warning-subj": "אזהרה בהעלאה",
"upload-warning-msg": "הייתה בעיה עם הקובץ שהעליתם מהכתובת [$2]. באפשרותכם לחזור ל[[Special:Upload/stash/$1|טופס ההעלאה]] כדי לתקן בעיה זו.",
"upload-proto-error": "פרוטוקול שגוי",
@@ -1410,20 +1438,20 @@
"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": "מקום איחסון משותף",
"shared-repo-name-wikimediacommons": "ויקישיתוף",
"filepage.css": "/* הסגנונות הנכתבים כאן יוכללו בדף תיאור הקובץ, כולל באתרי ויקי זרים */",
- "upload-disallowed-here": "אין באפשרותכם לדרוס את הקובץ הזה.",
+ "upload-disallowed-here": "אין באפשרותך לדרוס את הקובץ הזה.",
"filerevert": "שחזור $1",
"filerevert-legend": "שחזור קובץ",
"filerevert-intro": "אתם עומדים לשחזר את הקובץ '''[[Media:$1|$1]]''' ל[$4 גרסה מ־$3, $2].",
"filerevert-comment": "סיבה:",
"filerevert-defaultcomment": "שוחזר לגרסה מ־$2, $1",
"filerevert-submit": "שחזור",
- "filerevert-success": "'''[[Media:$1|$1]]''' שוחזרה ל[$4 גרסה מ־$3, $2].",
+ "filerevert-success": "<strong>[[Media:$1|$1]]</strong> שוחזר ל[$4 גרסה מ־$3, $2].",
"filerevert-badversion": "אין גרסה מקומית קודמת של הקובץ שהועלתה בתאריך המבוקש.",
"filedelete": "מחיקת $1",
"filedelete-legend": "מחיקת קובץ",
@@ -1465,7 +1493,6 @@
"statistics": "סטטיסטיקות",
"statistics-header-pages": "סטטיסטיקות דפים",
"statistics-header-edits": "סטטיסטיקות עריכה",
- "statistics-header-views": "סטטיסטיקות צפייה",
"statistics-header-users": "סטטיסטיקות משתמשים",
"statistics-header-hooks": "סטטיסטיקות אחרות",
"statistics-articles": "דפי תוכן",
@@ -1474,13 +1501,9 @@
"statistics-files": "קבצים שהועלו",
"statistics-edits": "עריכות של דפים מאז התקנת {{SITENAME}}",
"statistics-edits-average": "מספר העריכות הממוצע לדף",
- "statistics-views-total": "מספר הצפיות הכולל",
- "statistics-views-total-desc": "צפיות בדפים שאינם קיימים ובדפים מיוחדים אינן כלולות",
- "statistics-views-peredit": "מספר הצפיות לעריכה",
"statistics-users": "ה[[Special:ListUsers|משתמשים]] הרשומים",
"statistics-users-active": "המשתמשים הפעילים",
"statistics-users-active-desc": "משתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}",
- "statistics-mostpopular": "הדפים הנצפים ביותר",
"pageswithprop": "דפים עם מאפיין דף",
"pageswithprop-legend": "דפים עם מאפיין דף",
"pageswithprop-text": "בדף זה מופיעה רשימת דפים שמשתמשים במאפיין דף מסוים.",
@@ -1491,7 +1514,7 @@
"doubleredirects": "הפניות כפולות",
"doubleredirectstext": "בדף הזה מופיעה רשימת דפי הפניה שמפנים לדפי הפניה אחרים.\nכל שורה מכילה קישור לשתי ההפניות הראשונות, וכן את היעד של ההפניה השנייה, שהיא לרוב היעד ה\"אמיתי\" של ההפניה, שההפניה הראשונה אמורה להצביע אליו.\nפריטים <del>מחוקים</del> כבר תוקנו.",
"double-redirect-fixed-move": "הדף [[$1]] הועבר.\nהוא עודכן אוטומטית ועכשיו מפנה לדף [[$2]].",
- "double-redirect-fixed-maintenance": "תיקון אוטומטי של הפניה כפולה מ[[$1]] ל[[$2]] במשימת תחזוקה.",
+ "double-redirect-fixed-maintenance": "תיקון אוטומטי של הפניה כפולה מהדף [[$1]] אל הדף [[$2]] במשימת תחזוקה.",
"double-redirect-fixer": "מתקן הפניות",
"brokenredirects": "הפניות לא תקינות",
"brokenredirectstext": "ההפניות שלהלן מפנות לדפים שאינם קיימים:",
@@ -1521,9 +1544,9 @@
"uncategorizedtemplates": "תבניות חסרות קטגוריה",
"unusedcategories": "קטגוריות שאינן בשימוש",
"unusedimages": "קבצים שאינם בשימוש",
- "popularpages": "הדפים הנצפים ביותר",
"wantedcategories": "קטגוריות מבוקשות",
"wantedpages": "דפים מבוקשים",
+ "wantedpages-summary": "רשימת דפים לא קיימים שמספר הקישורים אליהם הוא הגדול ביותר, למעט דפים שרק הפניות מקשרות אליהם. לרשימת דפים לא קיימים שיש הפניות המקשרות אליהם, ר' [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "כותרת בלתי תקינה ברשימת התוצאות: $1",
"wantedfiles": "קבצים מבוקשים",
"wantedfiletext-cat": "הקבצים הבאים נמצאים בשימוש, אך אינם קיימים. ייתכן שקבצים ממאגרים חיצוניים יהיו רשומים אף על פי שהם קיימים, אך שגיאות כאלה יהיו <del>מחוקות</del>. בנוסף, דפים שמשתמשים בקבצים שאינם קיימים רשומים בדף [[:$1]].",
@@ -1583,10 +1606,12 @@
"pager-older-n": "{{PLURAL:$1|הקודמת|$1 הקודמות}}",
"suppress": "הסתרה",
"querypage-disabled": "דף מיוחד זה מבוטל עקב בעיות ביצועים.",
+ "apihelp": "עזרה עבור ה־API",
+ "apihelp-no-such-module": "המודול \"$1\" לא נמצא.",
"booksources": "משאבי ספרות חיצוניים",
"booksources-search-legend": "חיפוש משאבי ספרות חיצוניים",
"booksources-isbn": "מסת\"ב (ISBN):",
- "booksources-go": "הצגה",
+ "booksources-search": "חיפוש",
"booksources-text": "להלן רשימת קישורים לאתרים אחרים המוכרים ספרים חדשים ויד־שנייה, ושבהם עשוי להיות מידע נוסף לגבי ספרים שאתם מחפשים:",
"booksources-invalid-isbn": "המסת\"ב שניתן כנראה אינו תקין; אנא בדקו אם ביצעתם טעויות בהעתקה מהמידע המקורי.",
"specialloguserlabel": "בוצעו על־ידי המשתמש:",
@@ -1605,7 +1630,7 @@
"allarticles": "כל הדפים",
"allinnamespace": "כל הדפים (מרחב שם $1)",
"allpagessubmit": "הצגה",
- "allpagesprefix": "הדפים ששמם מתחיל ב:",
+ "allpagesprefix": "הדפים ששמם מתחיל ב־:",
"allpagesbadtitle": "כותרת הדף שניתנה הייתה בלתי־תקינה או שהייתה בה קידומת של קישור לשפה אחרת או לוויקי אחר.\nייתכן שהיא מכילה תו אחד או יותר האסורים לשימוש בכותרות.",
"allpages-bad-ns": "מרחב השם \"$1\" לא קיים ב{{grammar:תחילית|{{SITENAME}}}}.",
"allpages-hide-redirects": "הסתרת הפניות",
@@ -1671,12 +1696,12 @@
"trackingcategories-nodesc": "התיאור אינו זמין.",
"trackingcategories-disabled": "הקטגוריה מבוטלת",
"mailnologin": "אין כתובת לשליחה",
- "mailnologintext": "עליכם [[Special:UserLogin|להיכנס לחשבון]] ולהגדיר לעצמכם כתובת דואר אלקטרוני תקינה ב[[Special:Preferences|העדפות המשתמש]] שלכם כדי לשלוח דואר למשתמש אחר.",
+ "mailnologintext": "יש [[Special:UserLogin|להיכנס לחשבון]] ולהגדיר כתובת דואר אלקטרוני תקינה ב[[Special:Preferences|העדפות המשתמש]] כדי לשלוח דואר אלקטרוני למשתמשים אחרים.",
"emailuser": "שליחת דואר אלקטרוני למשתמש זה",
"emailuser-title-target": "שליחת דוא\"ל {{GENDER:$1|למשתמש זה|למשתמשת זו}}",
"emailuser-title-notarget": "שליחת דוא\"ל למשתמש",
"emailpage": "שליחת דואר למשתמש",
- "emailpagetext": "ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני {{GENDER:$1|למשתמש זה|למשתמשת זו}}.\nכתובת הדואר האלקטרוני שכתבתם ב[[Special:Preferences|העדפות המשתמש שלכם]] תופיע ככתובת שההודעה נשלחה ממנה, כדי לאפשר תגובה ישירה.",
+ "emailpagetext": "ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני {{GENDER:$1|למשתמש זה|למשתמשת זו}}.\nכתובת הדואר האלקטרוני שכתבת ב[[Special:Preferences|העדפות המשתמש שלך]] תופיע ככתובת שההודעה נשלחה ממנה, כדי לאפשר תגובה ישירה.",
"defemailsubject": "דוא\"ל מ{{grammar:תחילית|{{SITENAME}}}} מהמשתמש \"$1\"",
"usermaildisabled": "שליחת דוא\"ל למשתמשים מבוטלת",
"usermaildisabledtext": "אינכם רשאים לשלוח דואר אלקטרוני למשתמשים אחרים באתר זה",
@@ -1684,7 +1709,7 @@
"noemailtext": "משתמש זה לא הזין כתובת דואר אלקטרוני תקינה.",
"nowikiemailtext": "משתמש זה בחר שלא לקבל דואר אלקטרוני ממשתמשים אחרים.",
"emailnotarget": "שם המשתמש של הנמען לא קיים או בלתי תקין.",
- "emailtarget": "הקלידו את שם המשתמש של הנמען",
+ "emailtarget": "יש להזין את שם המשתמש של הנמען",
"emailusername": "שם משתמש:",
"emailusernamesubmit": "שליחה",
"email-legend": "שליחת דואר אלקטרוני למשתמש אחר של {{SITENAME}}",
@@ -1697,14 +1722,14 @@
"emailccsubject": "העתק של הודעתך למשתמש $1: $2",
"emailsent": "הדואר נשלח",
"emailsenttext": "הודעת הדואר האלקטרוני שלך נשלחה.",
- "emailuserfooter": "דואר זה נשלח על ידי $1 למשתמש $2 באמצעות תכונת \"שליחת דואר אלקטרוני למשתמש זה\" ב{{grammar:תחילית|{{SITENAME}}}}.",
+ "emailuserfooter": "דואר זה נשלח על־ידי $1 ל{{GRAMMAR:תחילית|$2}} באמצעות פעולת \"{{int:emailpage}}\" ב{{GRAMMAR:תחילית|{{SITENAME}}}}.",
"usermessage-summary": "השארת הודעת מערכת.",
"usermessage-editor": "שולח הודעות המערכת",
"watchlist": "רשימת המעקב",
"mywatchlist": "רשימת מעקב",
"watchlistfor2": "עבור $1 $2",
"nowatchlist": "אין דפים ברשימת המעקב.",
- "watchlistanontext": "אנא היכנסו לחשבון כדי לצפות או לערוך פריטים ברשימת המעקב.",
+ "watchlistanontext": "נדרשת כניסה לחשבון כדי לצפות או לערוך פריטים ברשימת המעקב.",
"watchnologin": "לא נכנסת לחשבון",
"addwatch": "הוספה לרשימת המעקב",
"addedwatchtext": "הדף \"[[:$1]]\" נוסף ל[[Special:Watchlist|רשימת המעקב]].\nשינויים שייערכו בעתיד בדף זה ובדף השיחה שלו, יוצגו ברשימת המעקב.",
@@ -1722,18 +1747,18 @@
"wlheader-enotif": "הודעות דוא\"ל מאופשרות.",
"wlheader-showupdated": "דפים שהשתנו מאז ביקורך האחרון בהם מוצגים ב'''הדגשה'''.",
"wlnote": "להלן {{PLURAL:$1|השינוי האחרון|<strong>$1</strong> השינויים האחרונים}} {{PLURAL:$2|בשעה האחרונה|בשעתיים האחרונות|ב־<strong>$2</strong> השעות האחרונות}}, עד $4, $3.",
- "wlshowlast": "(הצגת $1 שעות אחרונות | $2 ימים אחרונים | $3)",
+ "wlshowlast": "הצגת $1 שעות אחרונות $2 ימים אחרונים",
"watchlist-options": "אפשרויות ברשימת המעקב",
"watching": "בהוספה לרשימת המעקב…",
"unwatching": "בהסרה מרשימת המעקב…",
"watcherrortext": "אירעה שגיאה בעת שינוי הגדרות רשימת המעקב של \"$1\".",
"enotif_reset": "סימון כל הדפים כאילו נצפו",
- "enotif_impersonal_salutation": "משתמש של {{SITENAME}}",
- "enotif_subject_deleted": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק על ידי $2",
- "enotif_subject_created": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר על ידי $2",
- "enotif_subject_moved": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר על ידי $2",
- "enotif_subject_restored": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר על ידי $2",
- "enotif_subject_changed": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה על ידי $2",
+ "enotif_impersonal_salutation": "משתמש ב{{GRAMMAR:תחילית|{{SITENAME}}}}",
+ "enotif_subject_deleted": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק על־ידי $2",
+ "enotif_subject_created": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר על־ידי $2",
+ "enotif_subject_moved": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר על־ידי $2",
+ "enotif_subject_restored": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שוחזר על־ידי $2",
+ "enotif_subject_changed": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} שונה על־ידי $2",
"enotif_body_intro_deleted": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נמחק ב־$PAGEEDITDATE על ידי $2, ראו $3.",
"enotif_body_intro_created": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} נוצר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.",
"enotif_body_intro_moved": "הדף $1 ב{{grammar:תחילית|{{SITENAME}}}} הועבר ב־$PAGEEDITDATE על ידי $2, ראו $3 לגרסה הנוכחית.",
@@ -1750,7 +1775,7 @@
"excontent": "התוכן היה: \"$1\"",
"excontentauthor": "התוכן היה: \"$1\" ({{GENDER:$2|והתורם היחיד היה|והתורמת היחידה הייתה}} \"[[Special:Contributions/$2|$2]]\")",
"exbeforeblank": "התוכן לפני שרוקן היה: \"$1\"",
- "delete-confirm": "מחיקת $1",
+ "delete-confirm": "מחיקת \"$1\"",
"delete-legend": "מחיקה",
"historywarning": "<strong>אזהרה:</strong> לדף שאתם עומדים למחוק יש היסטוריית שינויים של {{PLURAL:$1|גרסה אחת|$1 גרסאות}}:",
"confirmdeletetext": "אתם עומדים למחוק דף יחד עם כל ההיסטוריה שלו.\n\nאנא אשרו שזה אכן מה שאתם מתכוונים לעשות, שאתם מבינים את התוצאות של מעשה כזה, ושהמעשה מבוצע בהתאם ל[[{{MediaWiki:Policy-url}}|נוהלי האתר]].",
@@ -1771,7 +1796,6 @@
"deleteprotected": "אין באפשרותך למחוק את הדף כי הוא מוגן.",
"deleting-backlinks-warning": "'''אזהרה:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|דפים אחרים]] מקשרים לדף שאתם עומדים למחוק או מכלילים אותו.",
"rollback": "שחזור עריכות",
- "rollback_short": "שחזור",
"rollbacklink": "שחזור",
"rollbacklinkcount": "שחזור {{PLURAL:$1|עריכה אחת|$1 עריכות}}",
"rollbacklinkcount-morethan": "שחזור יותר מ{{PLURAL:$1|עריכה אחת|־$1 עריכות}}",
@@ -1786,12 +1810,12 @@
"sessionfailure": "נראה שיש בעיה בחיבורכם לאתר;\nפעולתכם בוטלה כאמצעי זהירות נגד התחזות לתקשורת ממחשבכם.\nאנא חזרו לדף הקודם, העלו אותו מחדש ונסו שוב.",
"protectlogpage": "יומן הגנות",
"protectlogtext": "להלן רשימה של שינויי ההגנה על דפים.\nראו גם את [[Special:ProtectedPages|רשימת הדפים המוגנים]] הנוכחית.",
- "protectedarticle": "הפעיל הגנה על [[$1]]",
- "modifiedarticleprotection": "שינה את רמת ההגנה של \"[[$1]]\"",
- "unprotectedarticle": "ביטל את ההגנה על [[$1]]",
+ "protectedarticle": "הפעיל הגנה על הדף \"[[$1]]\"",
+ "modifiedarticleprotection": "שינה את רמת ההגנה של הדף \"[[$1]]\"",
+ "unprotectedarticle": "ביטל את ההגנה על הדף \"[[$1]]\"",
"movedarticleprotection": "העביר את הגדרות ההגנה מ\"[[$2]]\" ל\"[[$1]]\"",
- "protect-title": "שינוי רמת ההגנה של \"$1\"",
- "protect-title-notallowed": "הצגת רמת ההגנה של \"$1\"",
+ "protect-title": "שינוי רמת ההגנה של הדף \"$1\"",
+ "protect-title-notallowed": "הצגת רמת ההגנה של הדף \"$1\"",
"prot_1movedto2": "[[$1]] הועבר לשם [[$2]]",
"protect-badnamespace-title": "מרחב שם שבו לא ניתן להגן על דפים",
"protect-badnamespace-text": "לא ניתן להגן על דפים במרחב שם זה.",
@@ -1817,11 +1841,11 @@
"protect-expiring-local": "פוקעת $1",
"protect-expiry-indefinite": "בלתי מוגבלת בזמן",
"protect-cascade": "הגנה על כל הדפים המוכללים בדף זה (הגנה מדורגת)",
- "protect-cantedit": "אינכם יכולים לשנות את רמת ההגנה על דף זה, כיוון שאין לכם הרשאה לערוך אותו.",
+ "protect-cantedit": "אין באפשרותך לשנות את רמת ההגנה על דף זה כיוון שאין לך הרשאה לערוך אותו.",
"protect-othertime": "זמן אחר:",
"protect-othertime-op": "זמן אחר",
"protect-existing-expiry": "זמן פקיעה נוכחי: $3, $2",
- "protect-existing-expiry-infinity": "זמן תפוגה נוכחי: אינסופי",
+ "protect-existing-expiry-infinity": "זמן פקיעה נוכחי: ללא הגבלת זמן",
"protect-otherreason": "סיבה אחרת/נוספת:",
"protect-otherreason-op": "סיבה אחרת",
"protect-dropdown": "* סיבות הגנה נפוצות\n** השחתה רבה\n** ספאם רב\n** מלחמת עריכה בלתי מועילה\n** דף בשימוש רב",
@@ -1881,6 +1905,7 @@
"namespace": "מרחב שם:",
"invert": "ללא מרחב זה",
"tooltip-invert": "יש לסמן תיבה זו כדי להסתיר שינויים בדפים בתוך מרחב השם שנבחר (ובתוך מרחב השם הצמוד, אם הוא סומן)",
+ "tooltip-whatlinkshere-invert": "יש לסמן תיבה זו כדי להסתיר קישורים מדפים בתוך מרחב השם שנבחר",
"namespace_association": "מרחב שם צמוד",
"tooltip-namespace_association": "יש לסמן תיבה זו כדי לכלול גם את מרחב דפי השיחה או דפי הנושא המשויכים למרחב השם הנבחר",
"blanknamespace": "(ראשי)",
@@ -2017,7 +2042,7 @@
"ipb_expiry_temp": "חסימות הכוללות הסתרת שם משתמש חייבות להיות לזמן בלתי מוגבל.",
"ipb_hide_invalid": "לא ניתן להעלים את החשבון הזה; {{PLURAL:$1|בוצעה ממנו יותר מעריכה אחת|בוצעו ממנו יותר מ‏‏֫־$1 עריכות}}.",
"ipb_already_blocked": "המשתמש \"$1\" כבר נחסם.",
- "ipb-needreblock": "$1 כבר נחסם. האם ברצונכם לשנות את הגדרות החסימה?",
+ "ipb-needreblock": "$1 כבר נחסם. האם ברצונך לשנות את הגדרות החסימה?",
"ipb-otherblocks-header": "{{PLURAL:$1|חסימה אחרת|חסימות אחרות}}",
"unblock-hideuser": "לא ניתן לשחרר משתמש זה, כיוון ששם המשתמש שלו הוסתר.",
"ipb_cant_unblock": "שגיאה: חסימה מספר $1 לא נמצאה. ייתכן שהיא כבר שוחררה.",
@@ -2029,9 +2054,9 @@
"sorbsreason": "כתובת ה־IP שלך רשומה ככתובת פרוקסי פתוחה ב־DNSBL שאתר {{SITENAME}} משתמש בו.",
"sorbs_create_account_reason": "כתובת ה־IP שלך רשומה ככתובת פרוקסי פתוחה ב־DNSBL שאתר {{SITENAME}} משתמש בו.\nאין באפשרותך ליצור חשבון.",
"xffblockreason": "כתובת IP הנמצאת בכותרת X-Forwarded-For, בין אם שלכם או של שרת פרוקסי שאתם משתמשים בו, נחסמה. סיבת החסימה המקורית הייתה: $1",
- "cant-see-hidden-user": "המשתמש שאתם מנסים לחסום כבר נחסם והוסתר. כיוון שאין לכם את ההרשאה לחסימת משתמש והסתרתו, אינכם רשאים לצפות בחסימת המשתמש או לערוך אותה.",
+ "cant-see-hidden-user": "המשתמש שאתם מנסים לחסום כבר נחסם והוסתר.\nכיוון שאין לכם הרשאה להסתרת משתמשים, אין באפשרותכם לצפות בחסימת המשתמש או לערוך אותה.",
"ipbblocked": "אינכם יכולים לחסום או לשחרר את חסימתם של משתמשים אחרים, כיוון שאתם עצמכם חסומים.",
- "ipbnounblockself": "אינכם רשאים לשחרר את חסימתכם.",
+ "ipbnounblockself": "אין באפשרותך לבטל את החסימה של עצמך.",
"lockdb": "נעילת בסיס נתונים",
"unlockdb": "שחרור בסיס נתונים",
"lockdbtext": "נעילת בסיס הנתונים תמנע ממשתמשים את האפשרות לערוך דפים, לשנות את העדפותיהם, לערוך את רשימות המעקב שלהם, ופעולות אחרות הדורשות ביצוע שינויים בבסיס הנתונים.\n\nאנא אשרו שזה מה שאתם מתכוונים לעשות, ושתשחררו את בסיס הנתונים מנעילה כאשר פעולת התחזוקה תסתיים.",
@@ -2040,10 +2065,10 @@
"unlockconfirm": "כן, ברצוני לשחרר את בסיס הנתונים מנעילה.",
"lockbtn": "נעילת בסיס הנתונים",
"unlockbtn": "שחרור בסיס הנתונים מנעילה",
- "locknoconfirm": "לא סימנתם את תיבת האישור.",
+ "locknoconfirm": "לא סימנת את תיבת האישור.",
"lockdbsuccesssub": "נעילת בסיס הנתונים הושלמה בהצלחה",
"unlockdbsuccesssub": "שוחררה הנעילה מבסיס הנתונים",
- "lockdbsuccesstext": "בסיס הנתונים ננעל.\n\nזכרו [[Special:UnlockDB|לשחרר את הנעילה]] לאחר שפעולת התחזוקה הסתיימה.",
+ "lockdbsuccesstext": "בסיס הנתונים ננעל.<br />\nיש לזכור [[Special:UnlockDB|לשחרר את הנעילה]] לאחר שפעולת התחזוקה תסתיים.",
"unlockdbsuccesstext": "שוחררה הנעילה של בסיס הנתונים",
"lockfilenotwritable": "קובץ נעילת בסיס הנתונים אינו ניתן לכתיבה. כדי שאפשר יהיה לנעול את בסיס הנתונים או לבטל את נעילתו, שרת האינטרנט צריך לקבל הרשאות לכתוב אליו.",
"databasenotlocked": "בסיס הנתונים אינו נעול.",
@@ -2056,13 +2081,13 @@
"movearticle": "העברת דף:",
"moveuserpage-warning": "'''אזהרה:''' אתם עומדים להעביר דף משתמש. שימו לב שרק הדף יועבר וששם המשתמש '''לא''' ישתנה.",
"movecategorypage-warning": "<strong>אזהרה:</strong> אתם עומדים להעביר דף קטגוריה. שימו לב שרק הדף יועבר ושכל הדפים בקטגוריה הישנה <strong>לא</strong> יסווגו לקטגוריה החדשה.",
- "movenologintext": "עליכם [[Special:UserLogin|להיכנס לחשבון]] כדי להעביר דפים.",
- "movenotallowed": "אינכם מורשים להעביר דפים.",
- "movenotallowedfile": "אינכם מורשים להעביר קבצים.",
- "cant-move-user-page": "אינכם מורשים להעביר דפי משתמש (למעט דפי משנה).",
- "cant-move-to-user-page": "אינכם מורשים להעביר דף לדף משתמש (למעט לדף משנה של דף משתמש).",
- "cant-move-category-page": "אינכם מורשים להעביר דפי קטגוריה.",
- "cant-move-to-category-page": "אינכם מורשים להעביר דף לדף קטגוריה.",
+ "movenologintext": "עליכם להיות רשומים ו[[Special:UserLogin|להיכנס לחשבון]] כדי להעביר דפים.",
+ "movenotallowed": "אין לך הרשאה להעביר דפים.",
+ "movenotallowedfile": "אין לך הרשאה להעביר קבצים.",
+ "cant-move-user-page": "אין לך הרשאה להעביר דפי משתמש (למעט דפי משנה).",
+ "cant-move-to-user-page": "אין לך הרשאה להעביר דף לדף משתמש (למעט לדף משנה של דף משתמש).",
+ "cant-move-category-page": "אין לך הרשאה להעביר דפי קטגוריה.",
+ "cant-move-to-category-page": "אין לך הרשאה להעביר דף לדף קטגוריה.",
"newtitle": "לשם החדש:",
"move-watch": "מעקב אחר דף המקור ואחר דף היעד",
"movepagebtn": "העברה",
@@ -2087,9 +2112,9 @@
"movereason": "סיבה:",
"revertmove": "החזרה",
"delete_and_move": "מחיקה והעברה",
- "delete_and_move_text": "== בקשת מחיקה ==\nדף היעד, [[:$1]], כבר קיים. האם ברצונכם למחוק אותו כדי לאפשר את ההעברה?",
+ "delete_and_move_text": "== בקשת מחיקה ==\nדף היעד, \"[[:$1]]\", כבר קיים.\nהאם ברצונך למחוק אותו כדי לאפשר את ההעברה?",
"delete_and_move_confirm": "אישור מחיקת הדף",
- "delete_and_move_reason": "מחיקה כדי לאפשר העברה מ[[$1]]",
+ "delete_and_move_reason": "מחיקה כדי לאפשר העברה מהשם \"[[$1]]\"",
"selfmove": "כותרות המקור והיעד זהות; לא ניתן להעביר דף לעצמו.",
"immobile-source-namespace": "לא ניתן להעביר דפים במרחב השם \"$1\"",
"immobile-target-namespace": "לא ניתן להעביר דפים למרחב השם \"$1\"",
@@ -2106,7 +2131,7 @@
"protectedpagemovewarning": "'''אזהרה:''' דף זה מוגן כך שרק מפעילי מערכת יכולים להעביר אותו.\nפעולת היומן האחרונה מוצגת להלן:",
"semiprotectedpagemovewarning": "'''הערה:''' דף זה מוגן כך שרק משתמשים רשומים יכולים להעביר אותו.\nפעולת היומן האחרונה מוצגת להלן:",
"move-over-sharedrepo": "== הקובץ קיים ==\n[[:$1]] כבר קיים כקובץ משותף. העברת הקובץ לכותרת זו תדרוס את הקובץ המשותף.",
- "file-exists-sharedrepo": "קובץ בשם שנבחר כבר קיים כקובץ משותף.\nאנא בחרו שם אחר.",
+ "file-exists-sharedrepo": "קובץ בשם שנבחר כבר קיים כקובץ משותף.\nיש לבחור שם אחר.",
"export": "ייצוא דפים",
"exporttext": "באפשרותכם לייצא את התוכן ואת היסטוריית העריכה של דף אחד או של מספר דפים, בתבנית של קובץ XML.\nניתן לייבא את הקובץ למיזם ויקי אחר המשתמש בתוכנת מדיה־ויקי באמצעות [[Special:Import|דף הייבוא]].\n\nכדי לייצא דפים, הקישו את שמותיהם בתיבת הטקסט שלהלן, כל שם בשורה נפרדת, ובחרו האם לייצא גם את הגרסה הנוכחית וגם את היסטוריית השינויים של הדפים, או רק את הגרסה הנוכחית עם מידע על העריכה האחרונה.\n\nבנוסף, ניתן להשתמש בקישור, כגון [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] לדף [[{{MediaWiki:Mainpage}}]] ללא היסטוריית השינויים שלו.",
"exportall": "ייצוא כל הדפים",
@@ -2145,14 +2170,15 @@
"thumbnail-temp-create": "לא הצליחה יצירת קובץ תמונה ממוזערת זמני",
"thumbnail-dest-create": "לא הייתה אפשרות לשמור את התמונה הממוזערת אל יעדה",
"thumbnail_invalid_params": "פרמטרים שגויים לתמונה הממוזערת",
+ "thumbnail_toobigimagearea": "קובץ בגודל של יותר מ־$1",
"thumbnail_dest_directory": "לא ניתן היה ליצור את תיקיית היעד",
"thumbnail_image-type": "סוג התמונה אינו נתמך",
"thumbnail_gd-library": "הגדרת הספריה GD אינה שלמה: חסרה הפונקציה $1",
"thumbnail_image-missing": "נראה שהקובץ הבא חסר: $1",
- "thumbnail_image-failure-limit": "היו לאחרונה ניסיונות רבים מדי ($1 או יותר) ליצור את התמונה הממוזערת הזו. אנו נסו שוב מאוחר יותר.",
+ "thumbnail_image-failure-limit": "היו לאחרונה ניסיונות רבים מדי ($1 או יותר) ליצור את התמונה הממוזערת הזאת. נא לנסות שוב מאוחר יותר.",
"import": "ייבוא דפים",
- "importinterwiki": "ייבוא בין־אתרי",
- "import-interwiki-text": "אנא בחרו אתר ויקי וכותרת דף לייבוא.\nתאריכי העריכות ושמות העורכים יישמרו.\nכל פעולות הייבוא הבין־אתרי נשמרות ב[[Special:Log/import|יומן הייבוא]].",
+ "importinterwiki": "ייבוא מאתר ויקי אחר",
+ "import-interwiki-text": "אנא בחרו אתר ויקי וכותרת דף לייבוא.\nתאריכי העריכות ושמות העורכים יישמרו.\nכל פעולות הייבוא מאתרי ויקי אחרים נשמרות ב[[Special:Log/import|יומן הייבוא]].",
"import-interwiki-sourcewiki": "אתר המקור:",
"import-interwiki-sourcepage": "דף המקור:",
"import-interwiki-history": "העתקת כל היסטוריית העריכות של דף זה",
@@ -2172,7 +2198,7 @@
"importcantopen": "פתיחת קובץ הייבוא נכשלה",
"importbadinterwiki": "קישור בינוויקי שגוי",
"importsuccess": "הייבוא הושלם בהצלחה!",
- "importnosources": "אין מקורות לייבוא בין־אתרי, וייבוא ישיר של דף עם היסטוריה אינו מאופשר כעת.",
+ "importnosources": "לא הוגדרו אתרי ויקי שמהם ניתן לייבא, ואפשרות ההעלאה הישירה של דף עם היסטוריה מבוטלת.",
"importnofile": "לא הועלה קובץ ייבוא.",
"importuploaderrorsize": "העלאת קובץ הייבוא נכשלה. הקובץ היה גדול יותר מגודל ההעלאה המותר.",
"importuploaderrorpartial": "העלאת קובץ הייבוא נכשלה. הקובץ הועלה באופן חלקי בלבד.",
@@ -2186,7 +2212,7 @@
"import-invalid-interwiki": "לא ניתן לייבא מאתר הוויקי שצוין.",
"import-error-edit": "לא ניתן לייבא את הדף \"$1\" כיוון שאין לך הרשאה לערוך אותו.",
"import-error-create": "לא ניתן לייבא את הדף \"$1\" כיוון שאין לך הרשאה ליצור אותו.",
- "import-error-interwiki": "לא ניתן לייבא את הדף \"$1\" כיוון ששמו שמור לקישור חיצוני (בין־ויקי).",
+ "import-error-interwiki": "לא ניתן לייבא את הדף \"$1\" כיוון ששמו שמור לקישור חיצוני (בינוויקי).",
"import-error-special": "לא ניתן לייבא את הדף \"$1\" כיוון שהוא שייך למרחב שם מיוחד שלא יכול להכיל דפים.",
"import-error-invalid": "לא ניתן לייבא את הדף \"$1\" כיוון ששמו אינו תקין.",
"import-error-unserialize": "לא ניתן היה לפענח את הגרסה $2 של הדף \"$1\". הגרסה מסומנת כאילו היא משתמשת במודל התוכן $3, אך קודדה כ{{GRAMMAR:תחילית|$4}}.",
@@ -2196,18 +2222,15 @@
"import-rootpage-nosubpage": "מרחב השם \"$1\" של דף הבסיס אינו מאפשר דפי־משנה.",
"importlogpage": "יומן ייבוא",
"importlogpagetext": "ייבוא מנהלי של דפים (כולל היסטוריית העריכות שלהם) מאתרי ויקי אחרים.",
- "import-logentry-upload": "ייבא את [[$1]] באמצעות העלאת קובץ",
"import-logentry-upload-detail": "{{PLURAL:$1|גרסה אחת יובאה|$1 גרסאות יובאו}}",
- "import-logentry-interwiki": "ייבא את $1 בייבוא בין־אתרי",
"import-logentry-interwiki-detail": "{{PLURAL:$1|גרסה אחת של הדף $2 יובאה|$1 גרסאות של הדף $2 יובאו}}",
"javascripttest": "בדיקת JavaScript",
- "javascripttest-title": "הרצת בדיקות $1",
"javascripttest-pagetext-noframework": "דף זה שמור להרצת בדיקות JavaScript.",
"javascripttest-pagetext-unknownframework": "סביבת הבדיקות \"$1\" אינה ידועה.",
+ "javascripttest-pagetext-unknownaction": "הפעולה \"$1\" אינה ידועה.",
"javascripttest-pagetext-frameworks": "נא לבחור אחת מסביבות הבדיקות הבאות: $1",
"javascripttest-pagetext-skins": "בחירת עיצוב שאיתו יורצו הבדיקות:",
"javascripttest-qunit-intro": "ראו את [$1 תיעוד הבדיקות] באתר mediawiki.org.",
- "javascripttest-qunit-heading": "מערך בדיקות QUnit ל־JavaScript של מדיה־ויקי",
"tooltip-pt-userpage": "דף המשתמש שלך",
"tooltip-pt-anonuserpage": "דף המשתמש של משתמש אנונימי זה",
"tooltip-pt-mytalk": "דף השיחה שלך",
@@ -2217,6 +2240,7 @@
"tooltip-pt-mycontris": "רשימת התרומות שלך",
"tooltip-pt-login": "מומלץ להירשם, אך אין חובה לעשות כן",
"tooltip-pt-logout": "יציאה מהחשבון",
+ "tooltip-pt-createaccount": "מומלץ ליצור חשבון ולהיכנס אליו; עם זאת, זו אינה חובה",
"tooltip-ca-talk": "שיחה על דף זה",
"tooltip-ca-edit": "באפשרותכם לערוך דף זה. אנא השתמשו בלחצן \"תצוגה מקדימה\" לפני השמירה",
"tooltip-ca-addsection": "הוספת פסקה חדשה",
@@ -2241,11 +2265,12 @@
"tooltip-n-randompage": "צפייה בדף תוכן אקראי",
"tooltip-n-help": "עזרה בשימוש באתר",
"tooltip-t-whatlinkshere": "רשימת כל הדפים המקושרים לכאן",
- "tooltip-t-recentchangeslinked": "השינויים האחרונים שבוצעו בדפים המקושרים לכאן",
+ "tooltip-t-recentchangeslinked": "השינויים האחרונים שבוצעו בדפים המקושרים מדף זה",
"tooltip-feed-rss": "הזנת RSS עבור דף זה",
"tooltip-feed-atom": "הזנת Atom עבור דף זה",
"tooltip-t-contributions": "תרומותיו של משתמש זה",
"tooltip-t-emailuser": "שליחת דואר אלקטרוני למשתמש זה",
+ "tooltip-t-info": "מידע נוסף על דף זה",
"tooltip-t-upload": "העלאת קבצים",
"tooltip-t-specialpages": "רשימת כל הדפים המיוחדים",
"tooltip-t-print": "גרסה להדפסה של דף זה",
@@ -2291,7 +2316,7 @@
"anonymous": "{{PLURAL:$1|משתמש אנונימי|משתמשים אנונימיים}} של {{SITENAME}}",
"siteuser": "משתמש {{SITENAME}} $1",
"anonuser": "משתמש אנונימי של {{SITENAME}} $1",
- "lastmodifiedatby": "דף זה שונה לאחרונה בתאריך $2, $1 על ידי $3.",
+ "lastmodifiedatby": "דף זה שונה לאחרונה ב־$2, $1 על־ידי $3.",
"othercontribs": "מבוסס על העבודה של $1.",
"others": "אחרים",
"siteusers": "{{PLURAL:$2|משתמש|משתמשי}} {{SITENAME}} $1",
@@ -2321,7 +2346,6 @@
"pageinfo-robot-policy": "איסוף על־ידי רובוטים של מנועי חיפוש",
"pageinfo-robot-index": "מותר",
"pageinfo-robot-noindex": "אסור",
- "pageinfo-views": "מספר הצפיות",
"pageinfo-watchers": "מספר העוקבים אחר הדף",
"pageinfo-few-watchers": "פחות מ{{PLURAL:$1|עוקב אחד|־$1 עוקבים}}",
"pageinfo-redirects-name": "מספר ההפניות לדף זה",
@@ -2358,8 +2382,8 @@
"rcpatroldisabled": "אפשרות סימון השינויים כבדוקים מבוטלת",
"rcpatroldisabledtext": "תכונת סימון שינויים כבדוקים בדף השינויים האחרונים בוטלה.",
"markedaspatrollederror": "לא ניתן לסמן כבדוק",
- "markedaspatrollederrortext": "עליכם לציין גרסה שתציינו כבדוקה.",
- "markedaspatrollederror-noautopatrol": "אינכם מורשים לסמן את השינויים של עצמכם כבדוקים.",
+ "markedaspatrollederrortext": "יש לציין גרסה שברצונך לסמן כבדוקה.",
+ "markedaspatrollederror-noautopatrol": "אינך מורשה לסמן שינויים של עצמך כבדוקים.",
"markedaspatrollednotify": "שינוי זה ל\"$1\" סומן כבדוק.",
"markedaspatrollederrornotify": "סימון השינוי כבדוק נכשל.",
"patrol-log-page": "יומן שינויים בדוקים",
@@ -2374,7 +2398,7 @@
"filedelete-archive-read-only": "השרת אינו יכול לכתוב לתיקיית הארכיון \"$1\".",
"previousdiff": "→ מעבר להשוואת הגרסאות הקודמת",
"nextdiff": "מעבר להשוואת הגרסאות הבאה ←",
- "mediawarning": "'''אזהרה:''' סוג קובץ זה עלול להכיל קוד זדוני.\nהרצת הקוד עלולה לסכן את המערכת שלכם.",
+ "mediawarning": "<strong>אזהרה:</strong> סוג קובץ זה עלול להכיל קוד זדוני.\nהרצת הקוד עלולה לסכן את המחשב שלך.",
"imagemaxsize": "גודל תמונה מרבי:<br />(לדפי תיאור קובץ)",
"thumbsize": "הקטנה לגודל של:",
"widthheightpage": "<span dir=\"ltr\">$1 × $2</span>, {{PLURAL:$3|דף אחד|$3 דפים}}",
@@ -2614,7 +2638,7 @@
"exif-originalimageheight": "גובה התמונה לפני קיטוע",
"exif-originalimagewidth": "רוחב התמונה לפני קיטוע",
"exif-compression-1": "לא דחוס",
- "exif-compression-2": "קידוד הופמן מואתם חד-מימדי לאורך ריצה CCITT קבוצה 3",
+ "exif-compression-2": "קידוד הופמן מותאם חד־מימדי לאורך ריצה CCITT קבוצה 3",
"exif-compression-3": "קידוד פקס CCITT קבוצה 3",
"exif-compression-4": "קידוד פקס CCITT קבוצה 4",
"exif-compression-6": "JPEG (ישן)",
@@ -2659,8 +2683,8 @@
"exif-lightsource-2": "פלואורסצנטי",
"exif-lightsource-3": "טונגסטן (אור מתלהט)",
"exif-lightsource-4": "מַבזק",
- "exif-lightsource-9": "מזג אוויר טוב",
- "exif-lightsource-10": "מזג אוויר מעונן",
+ "exif-lightsource-9": "מזג־אוויר נאה",
+ "exif-lightsource-10": "מזג־אוויר מעונן",
"exif-lightsource-11": "צל",
"exif-lightsource-12": "אור יום פלואורסצנטי (D 5700 – 7100K)",
"exif-lightsource-13": "אור יום לבן פלואורסצנטי (N 4600 – 5400K)",
@@ -2775,12 +2799,11 @@
"exif-iimcategory-soi": "סוגיות חברתיות",
"exif-iimcategory-spo": "ספורט",
"exif-iimcategory-war": "מלחמה, סכסוך והפרת סדר",
- "exif-iimcategory-wea": "מזג אוויר",
+ "exif-iimcategory-wea": "מזג־אוויר",
"exif-urgency-normal": "רגילה ($1)",
"exif-urgency-low": "נמוכה ($1)",
"exif-urgency-high": "גבוהה ($1)",
"exif-urgency-other": "מותאמת אישית ($1)",
- "watchlistall2": "הכול",
"namespacesall": "הכול",
"monthsall": "הכול",
"confirmemail": "אימות כתובת דוא\"ל",
@@ -2792,22 +2815,22 @@
"confirmemail_oncreate": "קוד אימות דוא\"ל נשלח לכתובת הדוא\"ל שלכם. הקוד הזה אינו נדרש לכניסה, אך תצטרכו לספקו כדי להשתמש בכל תכונה מבוססת דוא\"ל באתר זה.",
"confirmemail_sendfailed": "{{SITENAME}} לא הצליח לשלוח לכם הודעת דוא\"ל עם קוד האימות.\nאנא בדקו שאין תווים שגויים בכתובת הדוא\"ל.\n\nתוכנת שליחת הדוא\"ל החזירה את ההודעה הבאה: $1",
"confirmemail_invalid": "קוד האימות שגוי. ייתכן שפג תוקפו.",
- "confirmemail_needlogin": "עליכם $1 כדי לאמת את כתובת הדוא\"ל שלכם.",
+ "confirmemail_needlogin": "נדרשת $1 כדי לאמת את כתובת הדוא\"ל שלך.",
"confirmemail_success": "כתובת הדוא\"ל שלך אושרה.\nכעת באפשרותך [[Special:UserLogin|להיכנס לחשבון שלך]] וליהנות מהאתר.",
"confirmemail_loggedin": "כתובת הדוא\"ל שלך אושרה כעת.",
"confirmemail_subject": "קוד אימות דוא\"ל מ{{grammar:תחילית|{{SITENAME}}}}",
- "confirmemail_body": "מישהו, כנראה אתם (מכתובת ה־IP הזו: $1),\nרשם את החשבון \"$2\" עם כתובת הדוא\"ל הזו ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם *לא* אתם רשמתם את החשבון, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
- "confirmemail_body_changed": "מישהו, כנראה אתם (מכתובת ה־IP הזו: $1),\nשינה את כתובת הדוא\"ל של החשבון \"$2\" לכתובת הזו ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל מחדש את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
- "confirmemail_body_set": "מישהו, כנראה אתם (מכתובת ה־IP הזו: $1),\nהגדיר את כתובת הדוא\"ל של החשבון \"$2\" לכתובת הזו ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
+ "confirmemail_body": "מישהו, כנראה אתם (מכתובת ה־IP הזאת: $1),\nרשם את החשבון \"$2\" עם כתובת הדוא\"ל הזאת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם *לא* אתם רשמתם את החשבון, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
+ "confirmemail_body_changed": "מישהו, כנראה אתם (מכתובת ה־IP הזאת: $1),\nשינה את כתובת הדוא\"ל של החשבון \"$2\" לכתובת הזאת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל מחדש את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
+ "confirmemail_body_set": "מישהו, כנראה אתם (מכתובת ה־IP הזאת: $1),\nהגדיר את כתובת הדוא\"ל של החשבון \"$2\" לכתובת הזאת ב{{grammar:תחילית|{{SITENAME}}}}.\n\nכדי לאמת שחשבון זה באמת שייך לכם ולהפעיל את שירותי הדוא\"ל באתר, אנא פתחו את הכתובת הבאה בדפדפן שלכם:\n\n$3\n\nאם החשבון *אינו* שייך לכם, השתמשו בקישור הבא כדי לבטל את אימות כתובת הדוא\"ל:\n\n$5\n\nקוד האימות יפקע ב־$4.",
"confirmemail_invalidated": "אימות כתובת הדוא\"ל בוטל",
"invalidateemail": "ביטול האימות של כתובת הדוא\"ל",
"scarytranscludedisabled": "[הכללת דפים בין אתרים מבוטלת]",
"scarytranscludefailed": "[אחזור התבנית נכשל עבור $1]",
"scarytranscludefailed-httpstatus": "[אחזור התבנית נכשל עבור $1&rlm;: HTTP $2]",
"scarytranscludetoolong": "[כתובת ה־URL ארוכה מדי]",
- "deletedwhileediting": "'''אזהרה:''' דף זה נמחק לאחר שהתחלתם לערוך!",
- "confirmrecreate": "הדף נמחק על ידי המשתמש [[User:$1|$1]] ([[User talk:$1|שיחה]]) לאחר שהתחלתם לערוך אותו, מסיבה זו:\n:'''$2'''\nאנא אשרו שאתם אכן רוצים ליצור מחדש את הדף.",
- "confirmrecreate-noreason": "הדף נמחק על ידי המשתמש [[User:$1|$1]] ([[User talk:$1|שיחה]]) לאחר שהתחלתם לערוך אותו.\nאנא אשרו שאתם אכן רוצים ליצור מחדש את הדף.",
+ "deletedwhileediting": "<strong>אזהרה:</strong> דף זה נמחק לאחר שהתחלת לערוך!",
+ "confirmrecreate": "ה{{GENDER:$1|משתמש|משתמשת}} [[User:$1|$1]] ([[User talk:$1|שיחה]]) {{GENDER:$1|מחק|מחקה}} את הדף הזה לאחר שהתחלת לערוך אותו, מהסיבה הבאה:\n: <em>$2</em>\nיש לאשר שאכן ברצונך ליצור מחדש את הדף.",
+ "confirmrecreate-noreason": "ה{{GENDER:$1|משתמש|משתמשת}} [[User:$1|$1]] ([[User talk:$1|שיחה]]) {{GENDER:$1|מחק|מחקה}} את הדף הזה לאחר שהתחלת לערוך אותו. יש לאשר שאכן ברצונך ליצור מחדש את הדף.",
"recreate": "יצירה מחדש",
"confirm_purge_button": "אישור",
"confirm-purge-top": "לנקות את המטמון של דף זה?",
@@ -2852,7 +2875,7 @@
"lag-warn-high": "בגלל עיכוב בעדכון בסיס הנתונים, שינויים שבוצעו לפני פחות מ{{PLURAL:$1|שנייה אחת|־$1 שניות}} אינם מוצגים ברשימה זו.",
"watchlistedit-normal-title": "עריכת רשימת המעקב",
"watchlistedit-normal-legend": "הסרת דפים מרשימת המעקב",
- "watchlistedit-normal-explain": "כל הדפים ברשימת המעקב מוצגים להלן.\nכדי להסיר דף, יש לסמן את התיבה לידו, וללחוץ על \"{{int:Watchlistedit-normal-submit}}\".\nבאפשרותכם גם [[Special:EditWatchlist/raw|לערוך את הרשימה הגולמית]].",
+ "watchlistedit-normal-explain": "כל הדפים ברשימת המעקב מוצגים להלן.\nכדי להסיר דף, יש לסמן את התיבה לידו, וללחוץ על \"{{int:Watchlistedit-normal-submit}}\".\nבאפשרותך גם [[Special:EditWatchlist/raw|לערוך את הרשימה הגולמית]].",
"watchlistedit-normal-submit": "הסרת הדפים",
"watchlistedit-normal-done": "{{PLURAL:$1|כותרת אחת הוסרה|$1 כותרות הוסרו}} מרשימת המעקב:",
"watchlistedit-raw-title": "עריכת הרשימה הגולמית",
@@ -2928,9 +2951,9 @@
"hebrew-calendar-m11-gen": "באב",
"hebrew-calendar-m12-gen": "באלול",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|שיחה]])",
- "unknown_extension_tag": "תגית בלתי ידועה: \"$1\"",
"duplicate-defaultsort": "'''אזהרה:''' המיון הרגיל \"$2\" דורס את המיון הרגיל המוקדם ממנו \"$1\".",
"duplicate-displaytitle": "<strong>אזהרה:</strong> כותרת התצוגה \"$2\" דורסת את כותרת התצוגה הקודמת \"$1\".",
+ "invalid-indicator-name": "<strong>שגיאה:</strong> התכונה <code>name</code> של מצייני מצב הדף אינה יכולה להיות ריקה.",
"version": "גרסת התוכנה",
"version-extensions": "הרחבות מותקנות",
"version-skins": "עיצובים מותקנים",
@@ -2970,6 +2993,9 @@
"version-entrypoints": "כתובות של נקודות כניסה",
"version-entrypoints-header-entrypoint": "נקודת כניסה",
"version-entrypoints-header-url": "כתובת",
+ "version-libraries": "ספריות מותקנות",
+ "version-libraries-library": "ספריה",
+ "version-libraries-version": "גרסה",
"redirect": "הפניה לפי שם קובץ, מספר משתמש, מספר דף או מספר גרסה",
"redirect-legend": "הפניה לקובץ או לדף",
"redirect-summary": "דף מיוחד זה מפנה לקובץ (בהינתן שם הקובץ), לדף (בהינתן מספר גרסה או מספר דף), או לדף משתמש (בהינתן מספר משתמש). דוגמאות לשימוש: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], או [[{{#Special:Redirect}}/user/101]].",
@@ -3005,6 +3031,7 @@
"specialpages-group-wiki": "מידע וכלים",
"specialpages-group-redirects": "הפניות מדפים מיוחדים",
"specialpages-group-spam": "כלי ספאם",
+ "specialpages-group-developer": "כלי פיתוח",
"blankpage": "דף ריק",
"intentionallyblankpage": "דף זה הושאר ריק במכוון.",
"external_image_whitelist": "#נא להשאיר שורה זו בדיוק כפי שהיא<pre>\n#כתבו קטעים של ביטויים רגולריים (רק החלק שבין סימני //) למטה\n#ביטויים אלה יושוו לכתובות ה־URL של תמונות חיצוניות (המוכללות באמצעות כתובת URL)\n#התמונות שתואמות לאחד הביטויים הרגולריים יוצגו כתמונות, והאחרות יוצגו כקישורים בלבד\n#שורות המתחילות בסימן # הן הערות\n#רשימה זו אינה תלויה ברישיות\n\n#נא לכתוב את כל הביטויים הרגולריים מעל שורה זו. נא להשאיר שורה זו בדיוק כפי שהיא</pre>",
@@ -3017,12 +3044,54 @@
"tags-tag": "שם התגית",
"tags-display-header": "הופעה ברשימות השינויים",
"tags-description-header": "תיאור מלא של המשמעות",
+ "tags-source-header": "מקור",
"tags-active-header": "פעילה?",
"tags-hitcount-header": "שינויים עם תגיות",
+ "tags-actions-header": "פעולות",
"tags-active-yes": "כן",
"tags-active-no": "לא",
+ "tags-source-extension": "הוגדר על־ידי הרחבה",
+ "tags-source-manual": "הוחל באופן ידני על־ידי משתמשים ובוטים",
+ "tags-source-none": "אינו בשימוש כעת",
"tags-edit": "עריכה",
+ "tags-delete": "מחיקה",
+ "tags-activate": "הפעלה",
+ "tags-deactivate": "ביטול הפעלה",
"tags-hitcount": "{{PLURAL:$1|שינוי אחד|$1 שינויים}}",
+ "tags-manage-no-permission": "אין לך הרשאה לנהל תגיות לסימון שינויים.",
+ "tags-create-heading": "יצירת תגית חדשה",
+ "tags-create-explanation": "כברירת מחדל, תגיות חדשות שנוצרות יהיו זמינות לשימושם של משתמשים ובוטים.",
+ "tags-create-tag-name": "שם התגית:",
+ "tags-create-reason": "הסבר:",
+ "tags-create-submit": "יצירה",
+ "tags-create-no-name": "יש לציין שם לתגית.",
+ "tags-create-invalid-chars": "שמות תגיות אינם יכולים לכלול תווי פסיק (<code>,</code>) או סלש ימני (<code>/</code>).",
+ "tags-create-invalid-title-chars": "שמות תגיות אינם יכולים לכלול תווים שאינם ניתנים לשימוש בכותרות דפים.",
+ "tags-create-already-exists": "התגית \"$1\" כבר קיימת.",
+ "tags-create-warnings-above": "{{PLURAL:$2|האזהרה הבאה התקבלה|האזהרות הבאות התקבלו}} בעת הניסיון ליצירת התגית \"$1\":",
+ "tags-create-warnings-below": "האם ברצונך להמשיך ביצירת התגית?",
+ "tags-delete-title": "מחיקת התגית",
+ "tags-delete-explanation-initial": "אתם עומדים למחוק את התגית \"$1\" מבסיס הנתונים.",
+ "tags-delete-explanation-in-use": "התגית תוסר {{PLURAL:$2|מגרסה אחת/פריט יומן אחד|מכל $2 הגרסאות/פריטי היומן}} עבורם היא מוחלת כרגע.",
+ "tags-delete-explanation-warning": "פעולה זו <strong>אינה הפיכה</strong> ו<strong>אינה ניתנת לביטול</strong>, אפילו לא על־ידי מנהלי בסיס הנתונים. אנא ודאו שזוהי התגית שאתם מתכוונים למחוק.",
+ "tags-delete-explanation-active": "<strong>התגית \"$1\" עדיין פעילה, והיא תמשיך להיות מוחלת בעתיד.</strong> כדי למנוע זאת, יש לעבור למקום (או למקומות) בהם התגית מוחלת, ולבטל אותה שם.",
+ "tags-delete-reason": "הסבר:",
+ "tags-delete-submit": "מחיקה בלתי הפיכה של תגית זו",
+ "tags-delete-not-allowed": "תגיות שהוגדרו על־ידי הרחבה אינן ניתנות למחיקה אלא אם כן ההרחבה מתירה זאת במיוחד.",
+ "tags-delete-not-found": "התגית \"$1\" אינה קיימת.",
+ "tags-delete-too-many-uses": "התגית \"$1\" מוחלת על יותר {{PLURAL:$2|מגרסה אחת|מ־$2 גרסאות}}, ולכן לא ניתן למחוק אותה.",
+ "tags-delete-warnings-after-delete": "התגית \"$1\" נמחקה בהצלחה, אבל {{PLURAL:$2|התקבלה האזהרה הבאה|התקבלו האזהרות הבאות}}:",
+ "tags-activate-title": "הפעלת תגית",
+ "tags-activate-question": "אתם עומדים להפעיל את התגית \"$1\".",
+ "tags-activate-reason": "הסבר:",
+ "tags-activate-not-allowed": "לא ניתן להפעיל את התגית \"$1\".",
+ "tags-activate-not-found": "התגית \"$1\" אינה קיימת.",
+ "tags-activate-submit": "הפעלה",
+ "tags-deactivate-title": "ביטול הפעלת תגית",
+ "tags-deactivate-question": "אתם עומדים לבטל את הפעלת התגית \"$1\".",
+ "tags-deactivate-reason": "הסבר:",
+ "tags-deactivate-not-allowed": "לא ניתן לבטל את הפעלת התגית \"$1\".",
+ "tags-deactivate-submit": "ביטול הפעלה",
"comparepages": "השוואת דפים",
"compare-page1": "דף 1",
"compare-page2": "דף 2",
@@ -3034,9 +3103,9 @@
"compare-revision-not-exists": "הגרסה שציינת אינה קיימת.",
"dberr-problems": "מצטערים! קיימת בעיה טכנית באתר זה.",
"dberr-again": "נסו להמתין מספר שניות ולהעלות מחדש את הדף.",
- "dberr-info": "(לא ניתן ליצור קשר עם שרת הנתונים: $1)",
- "dberr-info-hidden": "(לא ניתן ליצור קשר עם שרת הנתונים)",
- "dberr-usegoogle": "באפשרותכם לנסות לחפש דרך גוגל בינתיים.",
+ "dberr-info": "(לא ניתן לגשת לבסיס הנתונים: $1)",
+ "dberr-info-hidden": "(לא ניתן לגשת לבסיס הנתונים)",
+ "dberr-usegoogle": "באפשרותך לנסות לחפש באמצעות גוגל בינתיים.",
"dberr-outofdate": "שימו לב שהתוכן שלנו כפי שנשמר במאגר שם עשוי שלא להיות מעודכן.",
"dberr-cachederror": "זהו עותק שמור של המידע, והוא עשוי שלא להיות מעודכן.",
"htmlform-invalid-input": "יש בעיות עם חלק מהקלט שהכנסת",
@@ -3076,6 +3145,14 @@
"revdelete-uname-unhid": "הסתרת שם המשתמש בוטלה",
"revdelete-restricted": "נוספו הגבלות למפעילי מערכת",
"revdelete-unrestricted": "הוסרו הגבלות ממפעילי מערכת",
+ "logentry-block-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|שחרר|שחררה}} את החסימה של {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 באמצעות העלאת קובץ",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מאתר ויקי אחר",
+ "logentry-merge-merge": "$1 {{GENDER:$2|מיזג|מיזגה}} את $3 לתוך $4 (גרסאות עד $5)",
"logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}}",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה",
"logentry-move-move_redir": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה",
@@ -3089,24 +3166,41 @@
"logentry-newusers-autocreate": "חשבון המשתמש $1 {{GENDER:$2|נוצר}} אוטומטית",
"logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3 מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}&rlm;",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3&rlm;",
- "logentry-rights-autopromote": "$1 קודם אוטומטית מ$4 ל$5",
+ "logentry-rights-autopromote": "$1 קודם אוטומטית מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}",
"logentry-upload-upload": "$1 {{GENDER:$2|העלה|העלתה}} את $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|העלה|העלתה}} גרסה חדשה של $3",
"logentry-upload-revert": "$1 {{GENDER:$2|העלה|העלתה}} את $3",
+ "log-name-managetags": "יומן ניהול תגיות",
+ "log-description-managetags": "דף זה כולל רשימה של פעולות ניהול הקשורות ל[[Special:Tags|תגיות]]. היומן כולל רק פעולות שבוצעו ידנית על־ידי מפעיל מערכת; ייתכן שתגיות ייווצרו או יימחקו על־ידי תוכנת הוויקי ללא הוספת ערך ליומן זה.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|יצר|יצרה}} את התגית \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|מחק|מחקה}} את התגית \"4$\" (שהוסרה {{PLURAL:$5|מגרסה אחת/פריט יומן אחד|מ־$5 גרסאות ו/או פריטי יומן}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|הפעיל|הפעילה}} את התגית \"$4\" לשימוש על־ידי משתמשים ובוטים",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|ביטל|ביטלה}} את הפעלת התגית \"$4\" לשימוש על־ידי משתמשים ובוטים",
"rightsnone": "(כלום)",
+ "revdelete-summary": "תקציר העריכה",
+ "feedback-adding": "הוספת משוב לדף...",
+ "feedback-back": "חזרה",
+ "feedback-bugcheck": "מצוין! נא לבדוק שזה לא אחד מה[$1 באגים הידועים].",
+ "feedback-bugnew": "בדקתי. נא לדווח כבאג חדש",
"feedback-bugornote": "אם אתם מוכנים לתאר בעיה טכנית בפרטים, אנא [$1 דווחו באג].\nאחרת, תוכלו להשתמש בטופס הפשוט שלהלן. הערתכם תתווסף לדף \"[$3 $2]\", יחד עם שם המשתמש שלכם.",
- "feedback-subject": "נושא:",
- "feedback-message": "הודעה:",
"feedback-cancel": "ביטול",
- "feedback-submit": "שליחת משוב",
- "feedback-adding": "הוספת משוב לדף...",
+ "feedback-close": "סיום",
+ "feedback-external-bug-report-button": "דיווח על משימה טכנית",
+ "feedback-dialog-title": "שליחת המשוב",
+ "feedback-dialog-intro": "באפשרותך להשתמש בטופס הפשוט שלהלן כדי לשלוח משוב. ההערה שלך תתווסף לדף \"$1\", יחד עם שם המשתמש שלך.",
+ "feedback-error-title": "שגיאה",
"feedback-error1": "שגיאה: תוצאה לא מזוהה מה־API",
"feedback-error2": "שגיאה: העריכה נכשלה",
"feedback-error3": "שגיאה: אין תשובה מה־API",
- "feedback-thanks": "תודה! המשוב שלכם פורסם בדף \"[$2 $1]\".",
- "feedback-close": "סיום",
- "feedback-bugcheck": "מצוין! נא לבדוק שזה לא אחד מה[$1 באגים הידועים].",
- "feedback-bugnew": "בדקתי. נא לדווח כבאג חדש",
+ "feedback-error4": "שגיאה: לא ניתן לשלוח הודעה לכותרת המשוב המבוקשת",
+ "feedback-message": "הודעה:",
+ "feedback-subject": "נושא:",
+ "feedback-submit": "שליחה",
+ "feedback-terms": "ידוע לי שפרטי ה־user agent שלי כוללים מידע על הגרסאות המדויקות של הדפדפן ומערכת ההפעלה שלי, ושהם יפורסמו בפומבי לצד המשוב ששלחתי.",
+ "feedback-termsofuse": "מוסכם עלי ששליחת המשוב היא בהתאם לתנאי השימוש.",
+ "feedback-thanks": "תודה! המשוב שלך פורסם בדף \"[$2 $1]\".",
+ "feedback-thanks-title": "תודה!",
+ "feedback-useragent": "User agent:",
"searchsuggest-search": "חיפוש",
"searchsuggest-containing": "כולל...",
"api-error-badaccess-groups": "אינך מורשה להעלות קבצים לאתר הוויקי הזה.",
@@ -3142,6 +3236,13 @@
"api-error-stashfailed": "שגיאה פנימית: השרת נכשל באחסון הקובץ הזמני.",
"api-error-publishfailed": "שגיאה פנימית: השרת נכשל בפרסום הקובץ הזמני.",
"api-error-stasherror": "הייתה שגיאה בהעלאת הקובץ למאגר.",
+ "api-error-stashedfilenotfound": "הקובץ שבמאגר לא נמצא בעת הניסיון להעלות אותו מהמאגר.",
+ "api-error-stashpathinvalid": "הנתיב שבו הקובץ שבמאגר אמור היה להימצא היה בלתי תקין.",
+ "api-error-stashfilestorage": "הייתה שגיאה בעת אחסון הקובץ במאגר.",
+ "api-error-stashzerolength": "השרת לא יכול היה לאחסן במאגר את הקובץ, כי אורכו היה אפס.",
+ "api-error-stashnotloggedin": "נדרשת כניסה לחשבון כדי לשמור קבצים במאגר ההעלאות.",
+ "api-error-stashwrongowner": "הקובץ שניסית לגשת אליו במאגר אינו שייך לך.",
+ "api-error-stashnosuchfilekey": "מפתח הקובץ שניסית לגשת אליו במאגר אינו קיים.",
"api-error-timeout": "השרת לא השיב בזמן המצופה.",
"api-error-unclassified": "אירעה שגיאה בלתי ידועה.",
"api-error-unknown-code": "שגיאה בלתי ידועה: \"$1\".",
@@ -3186,6 +3287,8 @@
"expand_templates_generate_xml": "הצגת עץ הפענוח של XML",
"expand_templates_generate_rawhtml": "הצגת HTML גולמי",
"expand_templates_preview": "תצוגה מקדימה",
+ "expand_templates_preview_fail_html": "<em>מכיוון שב{{GRAMMAR:תחילית|{{SITENAME}}}} מופעלת הצגת HTML גולמית ואירע אבדן מידע כניסה, התצוגה המקדימה מוסתרת, וזאת כאמצעי זהירות מפני התקפות JavaScript.</em>\n\n<strong>אם זה ניסיון תקין להציג תצוגה מקדימה, יש לנסות שוב.</strong>\nאם זה עדיין לא עובד, יש לנסות [[Special:UserLogout|לצאת מהחשבון]] ולהיכנס שוב.",
+ "expand_templates_preview_fail_html_anon": "<em>מכיוון שב{{GRAMMAR:תחילית|{{SITENAME}}}} מופעלת הצגת HTML גולמית ולא נכנסת לחשבון, התצוגה המקדימה מוסתרת, וזאת כאמצעי זהירות מפני התקפות JavaScript.</em>\n\n<strong>אם זה ניסיון תקין להציג תצוגה מקדימה, יש [[Special:UserLogin|להיכנס לחשבון]] ולנסות שוב.</strong>",
"pagelanguage": "בורר שפת הדף",
"pagelang-name": "דף",
"pagelang-language": "שפה",
@@ -3196,8 +3299,58 @@
"log-name-pagelang": "יומן שינוי שפה",
"log-description-pagelang": "זהו יומן של שינויים בשפות של הדפים.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|שינה|שינתה}} את שפת הדף $3 מ$4 ל$5.",
- "default-skin-not-found": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nנראה שההתקנה שלכם כוללת את העיצובים הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל אותם ולבחור את עיצוב ברירת המחדל.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* שכפול (clone) אחד מהמאגרים ב־<code dir=\"ltr\">mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את השורות הבאות לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את כל העיצובים המותקנים כעת:\n\n<pre dir=\"ltr\">$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם עשיתם שגיאות הקלדה בשמות העיצובים.",
- "default-skin-not-found-no-skins": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n; אם כרגע התקנתם או שדרגתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. מדיה־ויקי 1.24 וגרסאות חדשות יותר אינן כוללות עיצובים ב־git repository הראשי. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה‏‏־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* שכפול (clone) אחד ממאגרים ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם (אם אתם מפתחים של מדיה־ויקי). ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל עיצובים ולבחור את עיצוב ברירת המחדל.",
+ "default-skin-not-found": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nנראה שההתקנה שלכם כוללת את העיצובים הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל אותם ולבחור את עיצוב ברירת המחדל.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* שכפול (clone) אחד מהמאגרים ב־<code dir=\"ltr\">mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את השורות הבאות לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את כל העיצובים המותקנים כעת:\n\n<pre dir=\"ltr\">$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם עשיתם שגיאות הקלדה בשמות העיצובים.",
+ "default-skin-not-found-no-skins": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם, שמוגדר ב־<code dir=\"ltr\">$wgDefaultSkin</code> כ־<code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n; אם כרגע התקנתם או שדרגתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. מדיה־ויקי 1.24 וגרסאות חדשות יותר אינן כוללות עיצובים ב־git repository הראשי. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה‏‏־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה‏‏־<code>skins/</code>.\n:* הורדת קבצי tar של עיצובים ספציפיים מ־[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* שכפול (clone) אחד ממאגרים ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל‏‏מאגר ה־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 ('''מבוטל''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''מבוטל''')",
+ "mediastatistics": "סטטיסטיקות קבצים",
+ "mediastatistics-summary": "סטטיסטיקה על סוגי קבצים שהועלו. הסטטיסטיקה כוללת רק את הגרסה החדשה ביותר של הקובץ: גרסאות ישנות או מחוקות של קבצים אינן כלולות.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|בית אחד|$1 בתים}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "סוג MIME",
+ "mediastatistics-table-extensions": "סיומות אפשריות",
+ "mediastatistics-table-count": "מספר הקבצים",
+ "mediastatistics-table-totalbytes": "גודל כולל",
+ "mediastatistics-header-unknown": "לא ידוע",
+ "mediastatistics-header-bitmap": "תמונות מפת סיביות",
+ "mediastatistics-header-drawing": "ציורים (תמונות וקטוריות)",
+ "mediastatistics-header-audio": "שמע",
+ "mediastatistics-header-video": "וידאו",
+ "mediastatistics-header-multimedia": "מדיה עשירה",
+ "mediastatistics-header-office": "מסמכים",
+ "mediastatistics-header-text": "טקסט",
+ "mediastatistics-header-executable": "בני־הרצה",
+ "mediastatistics-header-archive": "מכווצים",
+ "json-warn-trailing-comma": "{{PLURAL:$1|פסיק מסיים אחד הוסר|$1 פסיקים מסיימים הוסרו}} מטקסט ה־JSON",
+ "json-error-unknown": "הייתה בעיה עם טקסט ה־JSON. שגיאה: $1",
+ "json-error-depth": "הייתה חריגה מהעומק המקסימלי של המחסנית",
+ "json-error-state-mismatch": "נתוני JSON בלתי־תקינים או פגומים",
+ "json-error-ctrl-char": "שגיאה בתו בקרה, ייתכן שהקידוד שגוי",
+ "json-error-syntax": "שגיאת תחביר",
+ "json-error-utf8": "תווי UTF-8 פגומים, ייתכן שהקידוד שגוי",
+ "json-error-recursion": "הפניה רקורסיבית אחת או יותר בערך שנועד לקידוד",
+ "json-error-inf-or-nan": "ערך NAN או INF אחד או יותר בערך שנועד לקידוד",
+ "json-error-unsupported-type": "ניתן ערך מסוג שלא יכול להיות מקודד",
+ "headline-anchor-title": "קישור לפסקה זו",
+ "special-characters-group-latin": "לטיני",
+ "special-characters-group-latinextended": "לטיני מורחב",
+ "special-characters-group-ipa": "אלפבית פונטי בינלאומי (IPA)",
+ "special-characters-group-symbols": "סימנים",
+ "special-characters-group-greek": "יווני",
+ "special-characters-group-cyrillic": "קירילי",
+ "special-characters-group-arabic": "ערבי",
+ "special-characters-group-arabicextended": "ערבי מורחב",
+ "special-characters-group-persian": "פרסית",
+ "special-characters-group-hebrew": "עברית",
+ "special-characters-group-bangla": "בנגלית",
+ "special-characters-group-tamil": "טמילית",
+ "special-characters-group-telugu": "טלוגו",
+ "special-characters-group-sinhala": "סינהלה",
+ "special-characters-group-gujarati": "גוג'רטית",
+ "special-characters-group-devanagari": "דוונגארי",
+ "special-characters-group-thai": "תאית",
+ "special-characters-group-lao": "לאו",
+ "special-characters-group-khmer": "קמרית",
+ "special-characters-title-endash": "קו מפריד",
+ "special-characters-title-emdash": "קו מפריד ארוך",
+ "special-characters-title-minus": "מינוס"
}
diff --git a/languages/i18n/hi.json b/languages/i18n/hi.json
index 811a419f..b0ed3d21 100644
--- a/languages/i18n/hi.json
+++ b/languages/i18n/hi.json
@@ -55,7 +55,12 @@
"आलोक",
"रोहित रावत",
"아라",
- "संजीव कुमार"
+ "संजीव कुमार",
+ "बिप्लब आनन्द",
+ "Phoenix303",
+ "Steinsplitter",
+ "Macofe",
+ "Ankita-ks"
]
},
"tog-underline": "कड़ियाँ अधोरेखन:",
@@ -83,7 +88,7 @@
"tog-shownumberswatching": "ध्यान रखने वाले सदस्यों की संख्या दिखाएँ",
"tog-oldsig": "वर्तमान हस्ताक्षर:",
"tog-fancysig": "हस्ताक्षर का विकिपाठ के समान मानें (बिना स्वचालित कड़ी के)",
- "tog-uselivepreview": "सजीवन झलक का उपयोग करें (प्रयोगात्मक)",
+ "tog-uselivepreview": "सजीवन झलक का उपयोग करें",
"tog-forceeditsummary": "यदि सम्पादन सारांश ना दिया गया हो तो मुझे सूचित करें",
"tog-watchlisthideown": "मेरी ध्यानसूची से मेरे किए परिवर्तन छिपाएँ",
"tog-watchlisthidebots": "मेरी ध्यानसूची से बॉटों द्वारा किए परिवर्तन छिपाएँ",
@@ -258,6 +263,7 @@
"otherlanguages": "अन्य भाषाएँ",
"redirectedfrom": "($1 से पुनर्निर्देशित)",
"redirectpagesub": "पुनर्निर्देश पृष्ठ",
+ "redirectto": "को अनुप्रेषित:",
"lastmodifiedat": "इस पृष्ठ का पिछला बदलाव $1 को $2 बजे हुआ था।",
"viewcount": "यह पृष्ठ {{PLURAL:$1|एक|$1}} बार देखा गया है।",
"protectedpage": "सुरक्षित पृष्ठ",
@@ -270,6 +276,7 @@
"pool-queuefull": "पूल पंक्ति भरी हुई है",
"pool-errorunknown": "अज्ञात त्रुटि",
"pool-servererror": "पूल काउंटर सेवा उपलब्ध नहीं है ($1)।",
+ "poolcounter-usage-error": "उपयोग त्रुटि: $1",
"aboutsite": "{{SITENAME}} के बारे में",
"aboutpage": "Project:परिचय",
"copyright": "उपलब्ध सामग्री $1 के अधीन है जब तक अलग से उल्लेख ना किया गया हो।",
@@ -279,6 +286,7 @@
"disclaimers": "अस्वीकरण",
"disclaimerpage": "Project:साधारण अस्वीकरण",
"edithelp": "सम्पादन सहायता",
+ "helppage-top-gethelp": "सहायता",
"mainpage": "मुखपृष्ठ",
"mainpage-description": "मुखपृष्ठ",
"policy-url": "Project:नीति",
@@ -359,10 +367,13 @@
"readonly_lag": "उपमुख्य डाटाबेस सर्वर मुख्य डाटाबेस सर्वर के बराबर अद्यातानीत होने तक मुख्य डाटाबेस सर्वर लॉक हो गया है।",
"internalerror": "आन्तरिक त्रुटि",
"internalerror_info": "आन्तरिक त्रुटि: $1",
+ "internalerror-fatal-exception": "प्रकार की गंभीर अपवाद \"$1\"",
"filecopyerror": "\"$1\" फ़ाइल की \"$2\" पर प्रतिलिपि नहीं बन पाई।",
"filerenameerror": "\"$1\" फ़ाइल का नाम बदलकर \"$2\" नहीं रखा जा सका।",
"filedeleteerror": "\"$1\" फ़ाइल को हटाया नहीं जा सका।",
"directorycreateerror": "\"$1\" डाइरेक्टरी नहीं बनाई जा सकी।",
+ "directoryreadonlyerror": "निर्देशिका \"$1\" केवल पठनीय है।",
+ "directorynotreadableerror": "निर्देशिका \"$1\" पठनीय नहीं है।",
"filenotfound": "\"$1\" फ़ाइल नहीं मिली।",
"unexpected": "अनपेक्षित मूल्य: \"$1\"=\"$2\".",
"formerror": "त्रुटि: फ़ॉर्म सबमिट नहीं किया जा सका",
@@ -384,7 +395,8 @@
"viewsourcetext": "आप इस पृष्ठ का स्रोत देख सकते हैं और उसकी नकल उतार सकते हैं:",
"viewyourtext": "आप इस पृष्ठ में ''अपने सम्पादन'' का स्रोत देख सकते हैं और उसकी नकल उतार सकते हैं:",
"protectedinterface": "यह पृष्ठ इस विकी के सॉफ़्टवेयर का इंटरफ़ेस पाठ देता है, और इसे गलत प्रयोग से बचाने के लिये सुरक्षित कर दिया गया है।\nसभी विकियों के लिए अनुवाद जोड़ने या बदलने के लिए कृपया मीडियाविकि के क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] का प्रयोग करें।",
- "editinginterface": "'''चेतावनी:''' आप एक ऐसे पृष्ठ को बदल रहे हैं जो सॉफ़्टवेयर का इंटरफ़ेस पाठ प्रदान करता है।\nइस पृष्ठ को बदलने से अन्य सदस्यों को प्रदर्शित इंटरफ़ेस की शक्लोसूरत में बदलाव आएगा।\nसभी विकियों के लिए अनुवाद बदलने या जोड़ने के लिए कृपया मीडियाविकि की क्षेत्रीयकरण परियोजना [//translatewiki.net/wiki/Main_Page?setlang=hi translatewiki.net] का प्रयोग करें।",
+ "editinginterface": "<strong>चेतावनी:</strong> आप एक ऐसे पृष्ठ को बदल रहे हैं जो सॉफ़्टवेयर का इंटरफ़ेस पाठ प्रदान करता है।\nइस पृष्ठ को बदलने से अन्य सदस्यों को प्रदर्शित इंटरफ़ेस की शक्लोसूरत में बदलाव आएगा।",
+ "translateinterface": "सभी विकियों के लिए अनुवाद जोड़ने या बदलने के लिए मीडियाविकि क्षेत्रीयकरण परियोजना [//translatewiki.net/ translatewiki.net] का प्रयोग करें।",
"cascadeprotected": "यह पृष्ठ सुरक्षित हैं, क्योंकी यह निम्नलिखित {{PLURAL:$1|पृष्ठ|पृष्ठों}} की सुरक्षा-सीढ़ी में समाविष्ट है:\n$2",
"namespaceprotected": "आपको '''$1''' नामस्थान में समाविष्ट पृष्ठों को बदलने की अनुमति नहीं है।",
"customcssprotected": "आपको इस CSS पृष्ठ को संपादित करने की अनुमति नहीं है, क्योंकि इसमें अन्य सदस्य की व्यक्तिगत सेटिंग्स शामिल हैं।",
@@ -441,6 +453,8 @@
"userlogin-resetlink": "अपनी प्रवेश जानकारी भूल गए हैं?",
"userlogin-resetpassword-link": "अपना पासवर्ड भूल गए?",
"userlogin-helplink2": "लॉग इन करने में सहायता",
+ "userlogin-loggedin": "आप {{GENDER:$1|$1}} के रूप में पहले से लॉग्ड इन हैं।\nकिसी अन्य सदस्य के रूप में लॉग इन करने के लिए निम्नलिखित फ़ॉर्म का प्रयोग करें।",
+ "userlogin-createanother": "एक अन्य खाता खोलें",
"createacct-emailrequired": "ई-मेल पता",
"createacct-emailoptional": "ई-मेल पता (वैकल्पिक)",
"createacct-email-ph": "अपना ई-मेल पता लिखें",
@@ -476,6 +490,7 @@
"wrongpassword": "आपने जो कूटशब्द लिखा है वह गलत है। कृपया पुनः प्रयास करें।",
"wrongpasswordempty": "कूटशब्द खाली है।\nपुनः यत्न करें।",
"passwordtooshort": "आपका कूटशब्द कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षरों}} का होना चाहिये।",
+ "passwordtoolong": "पासवर्ड {{PLURAL:$1|1 वर्ण|$1 वर्णों}} से ज़्यादा लम्बे नही हो सकते।",
"password-name-match": "आपका कूटशब्द आपके सदस्यनाम से भिन्न होना चाहिए।",
"password-login-forbidden": "इस सदस्यनाम और कूटशब्द का उपयोग वर्जित है।",
"mailmypassword": "कूटशब्द पुनःस्थापित करें",
@@ -502,6 +517,7 @@
"createaccount-text": "आपके ई-मेल पते के लिये किसी ने {{SITENAME}} ($4) पर \"$2\" सदस्य नाम से \"$3\" कूटशब्द (पासवर्ड) सहित खाता खोला है।\nआपको लॉग इन कर के अपना कूटशब्द (पासवर्ड) तुरंत बदल लेना चाहिये।\n\nयदि यह खाता गलती से खोला गया है, तो आप इस मेसेज को नज़रंदाज़ कर सकते हैं।",
"login-throttled": "आपने हाल ही में कई बार लॉग इन करने के प्रयास किये हैं।\nपुनः प्रयास करने से पहले कृपया $1 प्रतीक्षा करें।",
"login-abort-generic": "आपका सत्रारम्भ असफल रहा - निष्फलित",
+ "login-migrated-generic": "आपका खाता माइग्रेट हो गया है और आपका सदस्यनाम इस विकी पर अब मौजूद नहीं है।",
"loginlanguagelabel": "भाषा: $1",
"suspicious-userlogout": "अपका लॉग आउट करने का अनुरोध अस्वीकृत कर दिया गया है क्योंकि ऐसा प्रतीत होता है कि यह किसी खराब ब्राउज़र या कैश करने वाली प्रॉक्सी द्वारा भेजा गया था।",
"createacct-another-realname-tip": "असली नाम देना आवश्यक नहीं है।\nयदि आप प्रदान करते हैं तो इसका प्रयोग सदस्य के योगदानों के लिये उनको श्रेय (attribution) देने के लिये किया जायेगा।",
@@ -596,13 +612,16 @@
"preview": "झलक",
"showpreview": "झलक दिखाएँ",
"showdiff": "बदलाव दिखाएँ",
- "anoneditwarning": "'''सावधान:''' आपने सत्रारंभ नहीं किया है। इस पृष्ठ के संपादन इतिहास में आपका आइ॰पी पता अंकित किया जाएगा।",
+ "blankarticle": "<strong>चेतावनी:</strong> आप एक रिक्त पृष्ठ का निर्माण कर रहे हैं।\nयदि आप \"{{int:savearticle}}\" को पुनः दबाते हैं तो पृष्ठ को बिना किसी सामग्री के निर्मित किया जाएगा।",
+ "anoneditwarning": "<strong>सावधान:</strong> आपने सत्रारंभ नहीं किया है। यदि आप सम्पादन करते हैं तो इस पृष्ठ के संपादन इतिहास में आपका आइ॰पी पता अंकित किया जाएगा। यदि आप <strong>[$1 लॉगिन]</strong> करते हैं अथवा <strong>[$2 खाता बनाते हैं]</strong> तो अन्य सुविधाओं के साथ-साथ आपके संपादनों का श्रेय आपके सदस्यनाम पर दिया जाएगा।",
"anonpreviewwarning": "''आप लॉग्ड इन नहीं हैं। पृष्ठ सहेजने पर आपका आइ॰पी पता इस पृष्ठ के इतिहास में दर्ज किया जायेगा।''",
"missingsummary": "'''अनुस्मारक:''' आपने संपादन सारांश नहीं दिया है।\nअगर आप दुबारा \"{{int:savearticle}}\" पर क्लिक करते हैं तो आपका संपादन बिना सारांश के संजोया जायेगा।",
+ "selfredirect": "<strong>चेतावनी:</strong> आप खुद को इस पेज पुनः निर्देशित कर रहे हैं।\nआप अनुप्रेषित के लिए गलत लक्ष्य निर्दिष्ट हो सकता है, या आप गलत पृष्ठ का संपादन किया जा सकता है।\nआप फिर से \"{{int:savearticle}}\" क्लिक करते हैं, रीडायरेक्ट वैसे भी बनाया जाएगा।",
"missingcommenttext": "कृपया नीचे टिप्पणी दें।",
"missingcommentheader": "'''अनुस्मारक:''' आपने इस टिप्पणी का कोई शीर्षक नहीं दिया है।\nअगर आप \"{{int:savearticle}}\" पर दोबारा क्लिक करते हैं तो आपके बदलाव बिना शीर्षक के संजोये जायेंगे।",
"summary-preview": "सारांश की झलक:",
"subject-preview": "विषय/शीर्षक की झलक:",
+ "previewerrortext": "अापके परिवर्तनों का पूर्वावलोकन करने का प्रयास करते समय एक त्रुटि हुई।",
"blockedtitle": "सदस्य अवरुद्ध है",
"blockedtext": "'''आपका सदस्यनाम अथवा आइ॰पी पता अवरोधित कर दिया गया हैं ।'''\n\nअवरोध $1 द्वारा किया गया था।\nअवरोध का कारण है ''$2''\n\n* अवरोध का आरंभ: $8\n* अवरोध की समाप्ति: $6\n* अवरोधित इकाई: $7\n\nइस अवरोध के बारे में चर्चा करने के लिए आप $1 या किसी अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कर सकते हैं।\nअगर आपने [[Special:Preferences|अपनी वरीयताओं]] में वैध ई-मेल पता प्रविष्ट किया है तो ही आप 'इस प्रयोक्ता को ई-मेल भेजें' वाली सुविधा का इस्तेमाल कर सकते हैं और आपको इसका इस्तेमाल करने से नहीं रोका गया है।\nआपका मौजूदा आइ॰पी पता $3 है और अवरोध क्रमांक #$5 है।\nअपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
"autoblockedtext": "एक और सदस्य आपके ही आइ॰पी का प्रयोग कर रहे थे और उन्हें $1 द्वारा अवरोधित कर दिया गया था। फलस्वरूप आपका आइ॰पी पता भी स्वचालित रूप से अवरोधित हो गया है।\nअवरोध करने का कारण है:\n\n:''$2''\n\n* अवरोध प्रारंभ: $8\n* अवरोध समाप्ति: $6\n* अवरोधित सदस्य: $7\n\nअवरोध की चर्चा करने के लिए आप $1 या किसी अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबंधक]] से संपर्क कर सकते हैं।\n\nकृपया ध्यान दें कि यदि आपक \"इस सदस्य को ई-मेल भेजें\" वाली सुविधा का प्रयोग करना चाहते हैं तो आपकी [[Special:Preferences|वरीयताओं]] में वैध ई-मेल पता होना चाहिए और इसका प्रयोग आपके लिए अवरोधित नहीं होना चाहिए।\n\nआपका मौजूदा आइ॰पी पता $3 है और अवरोध क्रमांक #$5 है।\nअपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
@@ -697,6 +716,10 @@
"content-model-text": "सामान्य पाठ",
"content-model-javascript": "जावास्क्रिप्ट",
"content-model-css": "सी॰एस॰एस",
+ "content-json-empty-object": "रिक्त ऑब्जेक्ट",
+ "content-json-empty-array": "रिक्त ऐरे",
+ "duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क का उपयोग करते हुए पन्ने",
+ "duplicate-args-category-desc": "पेज जैसे तर्कों के डुप्लिकेट का उपयोग करने वाले टेम्पलेट कॉल, जैसे <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ओैर <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''चेतावनी:''' इस पृष्ठ पर बहुत अधिक संख्या में कीमती पार्सर फ़ंक्शनों का प्रयोग किया गया है।\n\nइनका प्रयोग $2 से कम बार होना चाहिये, इस समय प्रयोग $1 बार {{PLURAL:$1|है|हैं}}।",
"expensive-parserfunction-category": "कीमती पार्सर फ़ंक्शनों का अत्यधिक प्रयोग कर रहे पृष्ठ",
"post-expand-template-inclusion-warning": "'''चेतावनी:''' साँचे जुड़ने की सीमा पार हो चुकी है।\nकुछ साँचे नहीं जुड़ेंगे।",
@@ -707,8 +730,8 @@
"parser-template-recursion-depth-warning": "साँचा पुनरावर्ती गहराई सीमा पार ($1)",
"language-converter-depth-warning": "भाषा कन्वर्टर गहराई सीमा से बाहर गया ( $1 )",
"node-count-exceeded-category": "पृष्ठ जिनमें नोड-संख्या सीमा पार की गई है",
- "node-count-exceeded-category-desc": "यह उन पृष्ठों की श्रेणी है जिनमें नोड-संख्या सीमा पार की गयी है।",
- "node-count-exceeded-warning": "पृष्ठ ने नोड-संख्या पार की है",
+ "node-count-exceeded-category-desc": "यह पृष्ठ नोड-संख्या सीमा पार करता है।",
+ "node-count-exceeded-warning": "पृष्ठ ने नोड संख्या पार की है",
"expansion-depth-exceeded-category": "पृष्ठ जिनमें विस्तार गहराई पार की गई है",
"expansion-depth-exceeded-category-desc": "यह पृष्ठ विस्तार गहराई पार करता है।",
"expansion-depth-exceeded-warning": "पृष्ठ में विस्तार गहराई पार की गई है",
@@ -751,7 +774,7 @@
"history-feed-empty": "अनुरोधित पृष्ठ अस्तित्व में नहीं है।\nयह पृष्ठ या तो हटाया गया है या फिर इसका नाम बदल दिया गया है।\n[[Special:Search|विकि पर खोज]] का प्रयोग करें।",
"rev-deleted-comment": "(सम्पादन सारांश हटाया)",
"rev-deleted-user": "(सदस्यनाम हटाया)",
- "rev-deleted-event": "(लॉग कार्य हटाया)",
+ "rev-deleted-event": "(लॉग विवरण हटाया)",
"rev-deleted-user-contribs": "[सदस्यनाम अथवा आइ॰पी पता छुपाया गया - सम्पादन योगदानों में से छुपाया गया]",
"rev-deleted-text-permission": "यह पृष्ठ अवतरण हटाया गया है।\nइसकी अधिक जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाने की लॉग] में पाई जा सकती है।",
"rev-deleted-text-unhide": "यह पृष्ठ अवतरण हटाया गया है।\nइसकी अधिक जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाने की लॉग] में पाई जा सकती है।\nयदि आप चाहें तो इस अवतरण को [$1 देख सकते हैं]।",
@@ -775,12 +798,16 @@
"revdelete-selected-text": "[[:$2]] {{PLURAL:$1|का|के}} चयनित अवतरण:",
"revdelete-selected-file": "[[:$2]] {{PLURAL:$1|का|के}} चयनित फ़ाइल अवतरण:",
"logdelete-selected": "{{PLURAL:$1|चुना हुआ|चुने हुए}} लॉग इवेंट:",
+ "revdelete-text-text": "हटाए गए अवतरण पृष्ठ इतिहास में दर्शाए जाएँगे परन्तु उनकी सामग्री सार्वजनिक रूप से नहीं देखी जा सकेगी।",
+ "revdelete-text-file": "हटाए गए फ़ाइल अवतरण फ़ाइल इतिहास में दर्शाए जायेंगे परन्तु सामग्री सार्वजनिक रूप से नहीं देखी जा सकेगी।",
+ "logdelete-text": "हटाए गए प्रवेश घटनाओं अभी भी लॉग में दिखाई देंगे, लेकिन उनकी सामग्री के कुछ हिस्सों को सार्वजनिक करने के लिए दुर्गम हो जाएगा।",
+ "revdelete-text-others": "अन्य प्रशासकों अभी भी छिपा सामग्री का उपयोग करने के लिए और अतिरिक्त प्रतिबंध सेट कर रहे हैं, जब तक यह अ-नष्ट करने में सक्षम हो जाएगा।",
"revdelete-confirm": "पुष्टि करें कि आप यह कार्य करना चाहते हैं, आप इसका परिणाम समझते हैं, और आप ये [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार कर रहे हैं।",
"revdelete-suppress-text": "छिपाने का प्रयोग <strong>केवल</strong> इन परिस्थितियों में होना चाहिए:\n* संभावित अपमानजनक जानकारी\n* अनुपयुक्त निजी जानकारी\n*: <em>घर के पते व दूरभाष, राष्ट्रीय पहचान क्रमांक आदि।</em>",
"revdelete-legend": "दृश्य प्रतिबंध निश्चित करें",
"revdelete-hide-text": "अवरतण पाठ",
"revdelete-hide-image": "फ़ाइल का पाठ छुपाएँ",
- "revdelete-hide-name": "क्रिया और लक्ष्य को छुपाएँ",
+ "revdelete-hide-name": "लक्ष्य और प्राचलों को छुपाएँ",
"revdelete-hide-comment": "संपादन सारांश",
"revdelete-hide-user": "संपादक का सदस्यनाम/आइ॰पी॰ पता",
"revdelete-hide-restricted": "प्रबंधक सहित सभी सदस्यों से डाटा छुपाएँ",
@@ -824,6 +851,7 @@
"mergehistory-empty": "कोई भी अवतरण एकत्रित नहीं कर सकते।",
"mergehistory-success": "[[:$1]] {{PLURAL:$3|का|के}} $3 अवतरण [[:$2]] में एकत्रित कर {{PLURAL:$3|दिया गया है|दिये गए हैं}}।",
"mergehistory-fail": "इतिहास एकत्रित नहीं कर सकते, कृपया पृष्ठ और समय की पुनः जाँच करें।",
+ "mergehistory-fail-toobig": "इतिहास विलय करना संभव नहीं है क्योंकि अवतरण सीमा $1 से अधिक {{PLURAL:$1|अवतरण|अवतरणों}} को स्थानांतरित करना होगा।",
"mergehistory-no-source": "स्रोत पृष्ठ $1 मौजूद नहीं है।",
"mergehistory-no-destination": "लक्ष्य पृष्ठ $1 मौजूद नहीं है।",
"mergehistory-invalid-source": "स्रोत पृष्ठ का शीर्षक वैध होना आवश्यक है।",
@@ -833,7 +861,6 @@
"mergehistory-same-destination": "स्रोत और लक्ष्य पृष्ठ एक ही नहीं हो सकते हैं",
"mergehistory-reason": "कारण:",
"mergelog": "एकत्रीकरण लॉग",
- "pagemerge-logentry": "[[$2]] में [[$1]] एकत्रित कर दिया ($3 तक के अवतरण)",
"revertmerge": "अलग करें",
"mergelogpagetext": "नीचे उन पृष्ठों की सूची है जिनका इतिहास हाल में ही दूसरे पृष्ठ में मिलाया गया था।",
"history-title": "\"$1\" का अवतरण इतिहास",
@@ -856,6 +883,8 @@
"notextmatches": "किसी भी पृष्ठ में यह सामग्री नहीं मिली",
"prevn": "पिछले {{PLURAL:$1|$1}}",
"nextn": "अगले {{PLURAL:$1|$1}}",
+ "prev-page": "पिछला पृष्ठ",
+ "next-page": "अगला पृष्ठ",
"prevn-title": "{{PLURAL:$1|पिछला|पिछले}} $1 परिणाम",
"nextn-title": "{{PLURAL:$1|अगला|अगले}} $1 परिणाम",
"shown-title": "हर पृष्ठ पर $1 {{PLURAL:$1|परिणाम}} दिखाएँ",
@@ -874,6 +903,7 @@
"search-result-category-size": "{{PLURAL:$1|$1 सदस्य}} ({{PLURAL:$2|$2 उपश्रेणी|$2 उपश्रेणियाँ}}, {{PLURAL:$3|$3 सञ्चिका|$3 सञ्चिकाएँ}})",
"search-redirect": "($1 से पुनर्निर्देशित)",
"search-section": "(अनुभाग $1)",
+ "search-category": "(श्रेणी $1)",
"search-file-match": "(फ़ाइल सामग्री से मेल खाता है)",
"search-suggest": "कहीं आपका मतलब $1 तो नहीं था?",
"search-interwiki-caption": "अन्य प्रकल्प",
@@ -883,19 +913,21 @@
"searchrelated": "सम्बंधित",
"searchall": "सभी",
"showingresults": "नीचे क्रमांक '''$2''' से प्रारंभ कर के अधिकतम '''$1''' परिणाम {{PLURAL:$1|दिखाया गया है|दिखाए गए हैं}}।",
+ "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> में से <strong>$1</strong> परिणाम|<strong>$3</strong> में से परिणाम <strong>$1 - $2</strong>}}",
"search-nonefound": "आपकी खोज से मेल खाते कोई परिणाम नहीं मिले।",
"powersearch-legend": "उन्नत खोज",
"powersearch-ns": "नामस्थानों में खोजें:",
"powersearch-togglelabel": "चुनें:",
"powersearch-toggleall": "सभी",
"powersearch-togglenone": "कोई भी नहीं",
+ "powersearch-remember": "चुनाव को भविष्य की खोजों के लिए याद रखें",
"search-external": "बाहरी खोज",
"searchdisabled": "{{SITENAME}} पर खोज अक्षम है।\nआप गूगल से खोज कर सकते हैं।\nध्यान रखें कि उनकी {{SITENAME}} सामग्री की सूची पुरानी हो सकती है।",
"search-error": "खोजते समय निम्न त्रुटि उत्पन्न हुई है: $1",
"preferences": "मेरी वरीयताएँ",
"mypreferences": "पसंद",
"prefs-edits": "संपादन संख्या:",
- "prefsnologintext2": "अपनी वरीयताओं को बदलने के लिए कृपया $1 करें।",
+ "prefsnologintext2": "अपनी वरीयताओं को बदलने के लिए कृपया लॉग इन करें।",
"prefs-skin": "त्वचा",
"skin-preview": "झलक",
"datedefault": "खा़स पसंद नहीं",
@@ -904,6 +936,11 @@
"prefs-personal": "सदस्य व्यक्तिरेखा",
"prefs-rc": "हाल में हुए बदलाव",
"prefs-watchlist": "ध्यानसूची",
+ "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-watchlist-edits": "बढ़ाई हुई ध्यानसूची में दिखाने हेतु अधिकतम बदलाव:",
@@ -973,7 +1010,7 @@
"gender-female": "मैं सम्पादन करती हूँ।",
"prefs-help-gender": "यह जानकारी देना वैकल्पिक है।\nयह सॉफ़्टवेयर में लिंग के आधार पर आपके लिए सही संबोधन हेतु प्रयुक्त होता है।\nयह जानकारी सार्वजनिक होगी।",
"email": "ई-मेल",
- "prefs-help-realname": "आपका असली नाम देना आवश्यक नहीं है।\nयदि आप प्रदान करते हैं तो इसका प्रयोग आपके योगदानों के लिये आपको श्रेय (attribution) देने के लिये किया जायेगा।",
+ "prefs-help-realname": "असली नाम देना आवश्यक नहीं है।\nयदि आप प्रदान करते हैं तो इसका प्रयोग आपके योगदानों के लिये आपको श्रेय (attribution) देने के लिये किया जायेगा।",
"prefs-help-email": "ई-मेल पता वैकल्पिक है, पर यदि आप अपना कूटशब्द भूल जाएँ तो इसके ज़रिए रीसेट किया जा सकता है।",
"prefs-help-email-others": "आप अपनी पहचान उजागर किए बिना अन्य सदस्यों को अपने सदस्य या वार्ता पृष्ठ के द्वारा स्वयं से सम्पर्क करने दे सकते हैं।",
"prefs-help-email-required": "ई-मेल पता आवश्यक है।",
@@ -994,6 +1031,7 @@
"prefs-tokenwatchlist": "टोकन",
"prefs-diffs": "अंतर",
"prefs-help-prefershttps": "यह वरीयता आपके अगले लॉगिन पर प्रभावी होगी।",
+ "prefswarning-warning": "आपने अपनी वरीयताओं में एैसे परिवर्तन किए हैं जिन्हे अभी तक संचित नहीं किया गया है। अगर अाप \"$1\" पर बिना क्लिक किये इस पृष्ठ को छोड़ देते हैं तो अापकी वरीयताओं का अद्यतन नहीं किया जाएगा।",
"prefs-tabs-navigation-hint": "सुझाव: आप टैब्स सूची में टैब्स के बीच आवागमन करने के लिए बाएँ और दाएँ तीर कुंजियों का उपयोग कर सकते हैं।",
"email-address-validity-valid": "ई-मेल पता वैध प्रतीत होता है",
"email-address-validity-invalid": "एक वैध ई-मेल पता प्रविष्ट करें",
@@ -1067,7 +1105,8 @@
"right-deletedtext": "हटाया गया पाठ और हटाए गए अवतरणों के बीच अंतर देखें",
"right-browsearchive": "हटाए गए पृष्ठ खोजें",
"right-undelete": "पृष्ठ पुनर्स्थापित करें",
- "right-suppressrevision": "प्रबंधकों से छुपे हुए अवतरण देखें और पुनर्स्थापित करें",
+ "right-suppressrevision": "किसी भी सदस्य से छुपे हुए अवतरण देखें, छुपायें और पुनर्स्थापित करें",
+ "right-viewsuppressed": "देखें संशोधन किसी भी उपयोगकर्ता से छुपा।",
"right-suppressionlog": "खासगी लॉग देखें",
"right-block": "अन्य सदस्यों को सम्पादन करने से ब्लॉक करें",
"right-blockemail": "सदस्यों को ई-मेल भेजने से ब्लॉक करें",
@@ -1078,6 +1117,7 @@
"right-protect": "सुरक्षा स्तर बदलें और सीढ़ी-सुरक्षित पृष्ठ सम्पादित करें",
"right-editprotected": "उन सुरक्षित पृष्ठ सम्पादित करें जिनके सम्पादन की \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "उन पृष्ठों को सम्पादित करें जिनका सुरक्षा स्तर है \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "एक पेज की सामग्री मॉडल को संपादित।",
"right-editinterface": "सॉफ़्टवेयर इंटरफ़ेस सम्पादित करें",
"right-editusercssjs": "अन्य सदस्यों के सी॰एस॰एस और जावास्क्रिप्ट पृष्ठ सम्पादित करें",
"right-editusercss": "अन्य सदस्यों के सी॰एस॰एस पृष्ठ सम्पादित करें",
@@ -1105,6 +1145,7 @@
"right-override-export-depth": "पृष्ठ निर्यात करें, पाँच स्तर की गहराई तक जुड़े हुए पृष्ठों समेत",
"right-sendemail": "अन्य सदस्यों को ई-मेल भेजें",
"right-passwordreset": "कूटशब्द रीसेट ई-मेल देखें",
+ "right-managechangetags": "डेटाबेस से [[Special:Tags|चिप्पियाँ]] बनायें और हटायें",
"newuserlogpage": "सदस्य खाता निर्माण लॉग",
"newuserlogpagetext": "यह सदस्य खातों के निर्माण का लॉग है।",
"rightslog": "सदस्य अधिकार लॉग",
@@ -1150,6 +1191,8 @@
"action-viewmywatchlist": "अपनी ध्यानसूची देखने",
"action-viewmyprivateinfo": "अपनी व्यक्तिगत जानकारी देखने",
"action-editmyprivateinfo": "अपनी व्यक्तिगत जानकारी बदलने",
+ "action-editcontentmodel": "एक पेज की सामग्री मॉडल को संपादित।",
+ "action-managechangetags": "डेटाबेस से चिप्पि बनायें और हटायें",
"nchanges": "$1 {{PLURAL:$1|बदलाव}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम बार देखने के बाद से}}",
"enhancedrc-history": "इतिहास",
@@ -1165,7 +1208,7 @@
"recentchanges-label-plusminus": "पृष्ठ आकार इस बाइट संख्या से बदला",
"recentchanges-legend-heading": "'''कुंजी:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नए पन्नों की सूची]] को भी देखें)",
- "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) हुए बदलाव दर्शाए गये हैं।",
+ "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
"rclistfrom": "$3 $2 से नये बदलाव दिखाएँ",
"rcshowhideminor": "छोटे बदलाव $1",
"rcshowhideminor-show": "दिखाएँ",
@@ -1219,9 +1262,9 @@
"uploaderror": "अपलोड त्रुटि",
"upload-recreate-warning": "'''चेतावनी: उस नाम की फ़ाइल हटाई या स्थानान्तरित की जा चुकी है।'''\n\nइस पृष्ठ के हटाने और स्थानान्तरण के लॉग यहाँ सन्दर्भ के लिए दिये हैं:",
"uploadtext": "फ़ाइल अपलोड करने के लिए नीचे दिए फ़ॉर्म का प्रयोग करें।\n[[Special:FileList|अपलोड की गई फ़ाइलों की सूची]] से आप पहले पहले अपलोड की गई फ़ाइलों को देख सकते हैं और उनमें खोज सकते हैं। दोबारा अपलोड की गई फ़ाइलों को [[Special:Log/upload|अपलोड सूची]] में देखें, और मिटाई फ़ाइलों के लिए [[Special:Log/delete|हटाने की सूची]] देखें।\n\nकिसी पृष्ठ में फ़ाइल का प्रयोग करने के लिए नीचे दिए गये उदाहरणों के अनुसार कड़ियाँ बनाएँ।\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' फ़ाइल का पूरा आकार प्रयोग करने के लिये\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' पृष्ठ में बाईं ओर फ़ाइल का 200 पिक्सेल चौड़ा अवतरण \"alt text\" विवरण के साथ एक बक्से में प्रयोग करने के लिये\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' बिना फ़ाइल का प्रयोग किये केवल उसकी कड़ी जोड़ने के लिये",
- "upload-permitted": "अनुमतित फ़ाइल प्रकार: $1।",
- "upload-preferred": "पसंदीदा फ़ाइल प्रकार: $1।",
- "upload-prohibited": "प्रतिबंधिक फ़ाइल प्रकार: $1।",
+ "upload-permitted": "अनुमतित फ़ाइल {{PLURAL:$2|प्रकार}}: $1।",
+ "upload-preferred": "पसंदीदा फ़ाइल {{PLURAL:$2|प्रकार}}: $1।",
+ "upload-prohibited": "प्रतिबंधिक फ़ाइल {{PLURAL:$2|प्रकार}}: $1।",
"uploadlogpage": "अपलोड लॉग",
"uploadlogpagetext": "नीचे हाल ही में अपलोड की गई फ़ाइलों की सूची है।\nकृपया और द्रैश्यिक विवरण के लिए [[Special:NewFiles|नई फ़ाइलों की गैलरी]] देखें।",
"filename": "फ़ाइल का नाम",
@@ -1380,8 +1423,8 @@
"nolicense": "कुछ भी नहीं चुना",
"licenses-edit": "लाइसेंस विकल्प सम्पादन",
"license-nopreview": "(झलक उपलब्ध नहीं है)",
- "upload_source_url": " (एक वैध, सभी जगहों से उपलब्ध यू॰आर॰एल)",
- "upload_source_file": " (आपके कम्प्यूटर से फ़ाइल)",
+ "upload_source_url": "(आपकी चुनी फ़ाइल एक वैध, सार्वजनिक रूप से उपलब्ध यू॰आर॰एल से)",
+ "upload_source_file": "(आपके कम्प्यूटर से चुनी आपकी फ़ाइल)",
"listfiles-delete": "हटाएँ",
"listfiles-summary": "यह विशेष पृष्ठ सभी अपलोड की गई फ़ाइलें दर्शाता है।",
"listfiles_search_for": "मीडिया नाम के लिये खोजें:",
@@ -1461,6 +1504,8 @@
"download": "डाउनलोड",
"unwatchedpages": "ध्यान न दिये हुए पृष्ठ",
"listredirects": "पुनर्निर्देशनों की सूची",
+ "listduplicatedfiles": "डुप्लिकेट के साथ फाइलों की सूची।",
+ "listduplicatedfiles-summary": "यह एैसे फ़ाइलों की सूची है जिनका नवीनतम संस्करण दूसरे फ़ाइलों के नवीनतम संस्करण की प्रतिलिपि हैं। सिर्फ़ स्थानीय फ़ाइलों को विचारा गया है।",
"unusedtemplates": "अप्रयुक्त साँचे",
"unusedtemplatestext": "इस पृष्ठ पर {{ns:template}} नामस्थान वाले वे सभी पृष्ठ इंगित है जो किसी अन्य पृष्ठ में शामिल नहीं हैं।\nइन्हें हटाने के पहले इन साँचों की और कड़ियाँ जाँच लें।",
"unusedtemplateswlh": "अन्य कड़ियाँ",
@@ -1469,12 +1514,13 @@
"randomincategory": "श्रेणी में यादृच्छिक (रैंडम) पृष्ठ",
"randomincategory-invalidcategory": "\"$1\" एक मान्य श्रेणी नाम नहीं है।",
"randomincategory-nopages": "[[:Category:$1|$1]] श्रेणी में कोई पृष्ठ नहीं हैं।",
+ "randomincategory-category": "श्रेणी:",
+ "randomincategory-legend": "श्रेणी में यादृच्छिक पृष्ठ",
"randomredirect": "किसी एक पुनर्निर्देशन पर जाएँ",
"randomredirect-nopages": "नामस्थान \"$1\" में कोई पुनर्निर्देशन नहीं हैं।",
"statistics": "आँकड़े",
"statistics-header-pages": "पृष्ठ के आँकड़े",
"statistics-header-edits": "संपादन के आँकड़े",
- "statistics-header-views": "आँकड़े देखें",
"statistics-header-users": "सदस्य आँकड़े",
"statistics-header-hooks": "अन्य आँकड़े",
"statistics-articles": "सामग्री पृष्ठ",
@@ -1483,13 +1529,9 @@
"statistics-files": "अपलोड की गई फ़ाइलें",
"statistics-edits": "{{SITENAME}} बनने के बाद से पृष्ठ संपादन",
"statistics-edits-average": "प्रति पृष्ठ औसत संपादन",
- "statistics-views-total": "कुल दृष्य",
- "statistics-views-total-desc": "अविद्यमान पृष्ठों और विशेष पृष्ठों के लिए दृश्य सम्मिलित नहीं हैं",
- "statistics-views-peredit": "दृष्य प्रति संपादन",
"statistics-users": "पंजीकृत [[Special:ListUsers|सदस्य]]",
"statistics-users-active": "सक्रिय सदस्य",
"statistics-users-active-desc": "पिछले {{PLURAL:$1|एक दिन|$1 दिनों}} में कुछ गतिविधि रखने वाले सदस्य",
- "statistics-mostpopular": "सबसे अधिक देखे गए पृष्ठ",
"pageswithprop": "पृष्ठ जिनमें पृष्ठ गुण हैं",
"pageswithprop-legend": "पृष्ठ जिनमें पृष्ठ गुण हैं",
"pageswithprop-text": "यह पृष्ठ पृष्ठ गुण का उपयोग कर रहे पन्नों को सूचीबद्ध करता है।",
@@ -1497,9 +1539,9 @@
"pageswithprop-submit": "खोजें",
"doubleredirects": "दुगुने पुनर्निर्देश",
"doubleredirectstext": "यह पृष्ठ उन पृष्ठों की सूची देता है जो अन्य पुनर्निर्देशित पृष्ठों की ओर पुनर्निर्देशित हैं।\nहर कतार में पहले और दूसरे पुनर्निर्देशन की कड़ियाँ, तथा दूसरे पुनर्निर्देशन का लक्ष्य भी है, आमतौर पर यही \"वास्तविक\" लक्ष्यित पृष्ठ होगा, और पहला पुनर्देशन वास्तव में इसी को लक्ष्यित होना चाहिए।\n<del>काटी गई</del> प्रविष्टियाँ सुलझा दी गई हैं।",
- "double-redirect-fixed-move": "[[$1]] की जगह बदली जा चुकी है।\nअब यह [[$2]] की ओर पुनर्निर्देशित होता है।",
- "double-redirect-fixed-maintenance": "[[$1]] से [[$2]] को दुगुने पुनर्निर्देश को ठीक कर रहा है।",
- "double-redirect-fixer": "पुनर्निर्देशन मिस्त्री",
+ "double-redirect-fixed-move": "[[$1]] की जगह बदली जा चुकी है।\nअब यह स्वतः [[$2]] की ओर पुनर्प्रेषित होता है।",
+ "double-redirect-fixed-maintenance": "[[$1]] से [[$2]] को दुगुने पुनर्प्रेषण को रखरखाव कार्य में स्वतः ठीक कर रहा है।",
+ "double-redirect-fixer": "पुनर्प्रेषण मिस्त्री",
"brokenredirects": "टूटे हुए पुनर्निर्देशन पृष्ठ",
"brokenredirectstext": "निम्नोक्त पुनर्निर्देशन नामौजूद पृष्ठों की ओर ले जाते हैं:",
"brokenredirects-edit": "संपादित करें",
@@ -1528,13 +1570,13 @@
"uncategorizedtemplates": "अश्रेणीकृत साँचे",
"unusedcategories": "अप्रयुक्त श्रेणियाँ",
"unusedimages": "अप्रयुक्त फ़ाइलें",
- "popularpages": "लोकप्रिय पृष्ठ",
"wantedcategories": "वांछित श्रेणियाँ",
"wantedpages": "जो पृष्ठ चाहिये",
"wantedpages-badtitle": "परिणामों में अवैध शीर्षक: $1",
"wantedfiles": "वांछित फ़ाइलें",
"wantedfiletext-cat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी। साथ ही, जो पृष्ठ ऐसी फ़ाइलों का प्रयोग करते हैं जो मौजूद नहीं हैं, उनकी सूची [[:$1]] में है।",
"wantedfiletext-nocat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी।",
+ "wantedfiletext-nocat-noforeign": "निम्न फ़ाइलों को इस्तेमाल कर रहे हैं, लेकिन मौजूद नहीं है।",
"wantedtemplates": "वांछित साँचे",
"mostlinked": "सर्वाधिक से जुड़े हुए पृष्ठ",
"mostlinkedcategories": "सर्वाधिक से जुड़ी हुई श्रेणियाँ",
@@ -1569,6 +1611,7 @@
"listusers": "सदस्यसूची",
"listusers-editsonly": "केवल संपादन कर चुके सदस्य दिखाएँ",
"listusers-creationsort": "निर्माण तिथि के आधार पर क्रमांकन करें",
+ "listusers-desc": "अवरोही क्रम में क्रमबद्ध करें",
"usereditcount": "$1 {{PLURAL:$1|सम्पादन}}",
"usercreated": "$1 को $2 बजे बनाया गया, सदस्यनाम $3 है",
"newpages": "नए पृष्ठ",
@@ -1589,7 +1632,7 @@
"booksources": "पुस्तकों के स्रोत",
"booksources-search-legend": "पुस्तकों के स्रोत खोजें",
"booksources-isbn": "आइ॰एस॰बी॰एन:",
- "booksources-go": "जायें",
+ "booksources-search": "खोजें",
"booksources-text": "नीचे पुरानी और नई पुस्तकें बेचने वाली वेबसाइटों के एड्रेस हैं, जिसमें आपको आप द्वारा खोजी जाने वाली पुस्तक के बारे में अधिक जानकारी मिल सकती है:",
"booksources-invalid-isbn": "यह आइ॰एस॰बी॰एन सही नहीं लग रहा है; मूल स्रोत से नकल करने में हुई त्रुटि के लिए जाँचें।",
"specialloguserlabel": "कर्ता:",
@@ -1657,7 +1700,12 @@
"listgrouprights-addgroup-self-all": "अपने खाते में सभी समूह शामिल करें",
"listgrouprights-removegroup-self-all": "अपने खाते से सभी समूह हटाएँ",
"listgrouprights-namespaceprotection-namespace": "नामस्थान",
+ "trackingcategories": "चिह्नित श्रेणियाँ",
+ "trackingcategories-msg": "चिह्नित श्रेणी",
+ "trackingcategories-name": "संदेश नाम",
+ "trackingcategories-desc": "श्रेणी शामिल किए जाने के मानदंड",
"trackingcategories-nodesc": "कोई वर्णन उपलब्ध नहीं।",
+ "trackingcategories-disabled": "श्रेणी अक्षम करी गयी है",
"mailnologin": "पाने वाले का एड्रेस दिया नहीं",
"mailnologintext": "अन्य सदस्यों को इ-मेल भेजने के लिये [[Special:UserLogin|लॉग इन]] करना आवश्यक है और आपकी [[Special:Preferences|वरीयताओं]] में वैध ई-मेल पता होना आवश्यक है।",
"emailuser": "इस सदस्य को ई-मेल भेजें",
@@ -1692,7 +1740,7 @@
"mywatchlist": "ध्यानसूची",
"watchlistfor2": "$1 $2 के लिए",
"nowatchlist": "आपकी ध्यानसूची में कोई भी पृष्ठ नहीं हैं।",
- "watchlistanontext": "अपनी ध्यानसूची में मौजूद पृष्ठ देखने या फिर संपादित करने के लिये कॄपया $1 करें।",
+ "watchlistanontext": "अपनी ध्यानसूची में मौजूद पृष्ठ देखने या फिर संपादित करने के लिये कॄपया लॉग इन करें।",
"watchnologin": "लॉग इन नहीं किया है",
"addwatch": "ध्यानसूची में जोड़ें",
"addedwatchtext": "आपकी [[Special:Watchlist|ध्यानसूची]] में \"[[:$1]]\" पृष्ठ जोड़ दिया गया है।\nभविष्य में इस पृष्ठ तथा इसके वार्ता पृष्ठ में होने वाले बदलाव आपकी ध्यानसूची में दिखेंगे।",
@@ -1707,8 +1755,8 @@
"watchlist-details": "वार्ता पृष्ठों के अलावा {{PLURAL:$1|$1 पृष्ठ}} आपकी ध्यानसूची में हैं।",
"wlheader-enotif": "ई-मेल नोटिफ़िकेशन सक्षम हैं।",
"wlheader-showupdated": "पृष्ठ जो आपके द्वारा देखे जाने के बाद बदले गये हैं '''बोल्ड''' दिखेंगे।",
- "wlnote": "$3 को $4 बजे तक पिछले '''$2''' {{PLURAL:$2|घंटे|घंटों}} में {{PLURAL:$1|हुआ एक|हुए '''$1'''}} परिवर्तन निम्न {{PLURAL:$1|है|हैं}}।",
- "wlshowlast": "पिछले $1 घंटे $2 दिन $3 देखें",
+ "wlnote": "$3 को $4 बजे तक पिछले <strong>$2</strong> {{PLURAL:$2|घंटे|घंटों}} में {{PLURAL:$1|हुआ एक|हुए <strong>$1</strong>}} परिवर्तन निम्न {{PLURAL:$1|है|हैं}}।",
+ "wlshowlast": "पिछले $1 घंटे $2 दिन देखें",
"watchlist-options": "ध्यानसूची विकल्प",
"watching": "ध्यान दे रहे हैं...",
"unwatching": "ध्यान हटा रहे हैं...",
@@ -1738,7 +1786,7 @@
"exbeforeblank": "खाली करने से पहले पाठ था: '$1'",
"delete-confirm": "\"$1\" को हटाएँ",
"delete-legend": "हटाएँ",
- "historywarning": "''' चेतावनी: ''' आप जो पृष्ठ हटाने जा रहे हैं उसके इतिहास में लगभग $1 {{PLURAL:$1|अवतरण}} हैं:",
+ "historywarning": "<strong>चेतावनी:<strong> आप जो पृष्ठ हटाने जा रहे हैं उसके इतिहास में $1 {{PLURAL:$1|अवतरण}} हैं:",
"confirmdeletetext": "आप एक पृष्ठ को उसके सभी अवतरणों सहित हटाने जा रहे हैं।\nजाँच लें कि आप ये करना चाहते हैं, आप इसके पर्निआमों से अवगत हैं, और आप ये [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार कर रहे हैं।",
"actioncomplete": "कार्य पूर्ण",
"actionfailed": "क्रिया विफल",
@@ -1756,7 +1804,6 @@
"delete-warning-toobig": "इस पृष्ठ का संपादन इतिहास $1 से अधिक {{PLURAL:$1|अवतरण}} होने की वजह से बहुत बड़ा है।\nइसे हटाने से {{SITENAME}} के डाटाबेस की गतिविधियों में व्यवधान आ सकता है;\nकृपया सोच समझ कर आगे बढ़ें।",
"deleting-backlinks-warning": "'''चेतावनी:''' जो पृष्ठ आप हटाने जा रहे हैं उससे [[Special:WhatLinksHere/{{FULLPAGENAME}}|अन्य पृष्ठ]] जुड़ते हैं अथवा उसे ट्रांसक्लूड करते हैं।",
"rollback": "संपादन वापिस लें",
- "rollback_short": "वापिस लें",
"rollbacklink": "वापिस लें",
"rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादन}} वापिस लें",
"rollbacklinkcount-morethan": "$1 से अधिक {{PLURAL:$1|सम्पादन}} वापिस लें",
@@ -1806,6 +1853,7 @@
"protect-othertime": "अन्य समय:",
"protect-othertime-op": "अन्य समय",
"protect-existing-expiry": "मौजूदा सुरक्षा सम्पात होने का समय: $3, $2",
+ "protect-existing-expiry-infinity": "मौजुदा समाप्ति समय: अनंत",
"protect-otherreason": "अन्य/अतिरिक्त कारण:",
"protect-otherreason-op": "अन्य कारण",
"protect-dropdown": "*सुरक्षा के आम कारण\n**अत्यधिक बर्बरता \n**अत्यधिक स्पैम\n**अफलदायी सम्पादन युद्ध\n**अधिक यातायात वाला पृष्ठ",
@@ -1912,7 +1960,7 @@
"autoblockid": "स्वतः अवरोध #$1",
"block": "उपयोक्ता को अवरोधित करें।",
"unblock": "उपयोक्ता पर अवरोधण हटाएँ",
- "blockip": "अवरोधित करें",
+ "blockip": "{{GENDER:$1|सदस्य|सदस्या}} अवरोधित करें",
"blockip-legend": "सदस्य को ब्लॉक करें",
"blockiptext": "विशिष्ठ IP पते अथवा सदस्य नाम को लिखने के अधिकार से बाध्य करने के लिए निम्न पत्र का प्रयोग करें।\nयह सिर्फ बर्बरता को रोकने के लिए ही किया जाना चाहिए, और [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार ही करना चाहिए।\nनीचे विशिष्ठ कारण भी लिखें (उदाहरण के लिए, सटीक पृष्ठों को दर्शाते हुए, जिनमें बर्बरता की गई हो)।",
"ipaddressorusername": "आईपी एड्रेस या सदस्यनाम:",
@@ -1939,7 +1987,7 @@
"ipb-unblock-addr": "$1 को अनब्लॉक करें",
"ipb-unblock": "सदस्य अथवा आईपी एड्रेस को अनब्लॉक करें",
"ipb-blocklist": "सद्य ब्लॉक देखें",
- "ipb-blocklist-contribs": "$1 के लिए योगदान",
+ "ipb-blocklist-contribs": "{{GENDER:$1|$1}} के लिए योगदान",
"unblockip": "सदस्य को अनब्लॉक करें",
"unblockiptext": "पहले ब्लॉक किये हुए आईपी एड्रेस या सदस्यनाम को अनब्लॉक करने के लिये नीचे दिया गया फार्म भरें।",
"ipusubmit": "यह अवरोध हटाएँ",
@@ -2123,8 +2171,10 @@
"thumbnail_gd-library": "अवैध जीडी लाइब्रेरी जमाव: कार्यसमूह $1 मौजूद नहीं है",
"thumbnail_image-missing": "लगता है संचिका नामौजूद है: $1",
"import": "पृष्ठ इम्पोर्ट करें",
- "importinterwiki": "ट्रान्सविकि आयात",
- "import-interwiki-text": "आयात करने के लिये एक विकि और एक पृष्ठ चुनें।\nअवतरण दिनांक और संपादक नाम ज्यों-के-त्यों रखे जाएँगे।\nसभी ट्रान्सविकि आयात क्रियाएँ [[Special:Log/import|आयात लॉग]] में डाली जाती हैं।",
+ "importinterwiki": "किसी और विकि से आयात करे",
+ "import-interwiki-text": "आयात करने के लिये एक विकि और एक पृष्ठ चुनें।\nअवतरण दिनांक और संपादक नाम ज्यों-के-त्यों रखे जाएँगे।\nअन्य विकि से सभी आयात [[Special:Log/import|आयात लॉग]] में डाली जाती हैं।",
+ "import-interwiki-sourcewiki": "स्रोत विकि:",
+ "import-interwiki-sourcepage": "स्रोत पृष्ठ:",
"import-interwiki-history": "इस पृष्ठ के सभी इतिहास अवतरण कॉपी करें",
"import-interwiki-templates": "सभी साँचे शामिल करें",
"import-interwiki-submit": "आयात",
@@ -2154,28 +2204,24 @@
"import-upload": "XML डाटा अपलोड करें",
"import-token-mismatch": "सत्र सामग्री खो गई है। \nकृपया पुनः प्रयास करें।",
"import-invalid-interwiki": "इस विकि से आयात नहीं हो सकता है।",
- "import-error-edit": "पृष्ठ \" $1 \" आयातित नहीं किया जासकता है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।",
- "import-error-create": "पृष्ठ \" $1 \" आयातित नहीं है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।",
+ "import-error-edit": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।",
+ "import-error-create": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।",
"import-error-interwiki": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि इसका नाम अंतरविकी कड़ियाँ बनाने के लिए आरक्षित है।",
"import-error-special": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि यह एक ऐसे विशेष नामस्थान के अंतर्गत आता है जिसमें पृष्ठ नहीं बनाए जा सकते हैं।",
- "import-error-invalid": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि इसका नाम अमान्य है।",
+ "import-error-invalid": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि इसका आयात पश्चात जो नाम होता वह इस विकी पर अमान्य है।",
"import-options-wrong": "गलत {{PLURAL:$2|विकल्प}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "दिया गया उपसर्ग पृष्ठ शीर्षक अमान्य है।",
"import-rootpage-nosubpage": "दिए गए उपसर्ग पृष्ठ \"$1\" के नामस्थान में उप-पृष्ठ नहीं बनाए जा सकते।",
"importlogpage": "आयात सूची",
"importlogpagetext": "अन्य विकियों से प्रबन्धकों द्वारा किए गए सम्पादन इतिहास के साथ होने वाले पृष्ठों का आयात।",
- "import-logentry-upload": "सञ्चिका अपलोड करके [[$1]] का आयात किया",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|अवतरण|अवतरण}}",
- "import-logentry-interwiki": "ट्रान्सविकि कर दिया $1",
- "import-logentry-interwiki-detail": "$2 से $1 {{PLURAL:$1|अवतरण|अवतरण}}",
+ "import-logentry-upload-detail": "$1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}",
+ "import-logentry-interwiki-detail": "$2 से $1 अवतरण आयात {{PLURAL:$1|किया गया|किये गए}}",
"javascripttest": "जावास्क्रिप्ट परीक्षण",
- "javascripttest-title": "$1 परीक्षण चल रहे हैं",
"javascripttest-pagetext-noframework": "यह पृष्ठ जावास्क्रिप्ट परीक्षण चलाने के लिए है।",
"javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
"javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचों में से एक चुनें: $1",
"javascripttest-pagetext-skins": "परीक्षण करने के लिए त्वचा चुनें:",
"javascripttest-qunit-intro": "mediawiki.org पर [$1 परीक्षण के प्रलेखन] देखें।",
- "javascripttest-qunit-heading": "मीडियाविकि जावास्क्रिप्ट क्यू-युनिट परीक्षण ढाँचा",
"tooltip-pt-userpage": "आपका प्रयोक्ता पृष्ठ",
"tooltip-pt-anonuserpage": "आप जिस आईपी से बदलाव कर रहें हैं उसका सदस्य पान",
"tooltip-pt-mytalk": "आपका वार्ता पृष्ठ",
@@ -2185,6 +2231,7 @@
"tooltip-pt-mycontris": "आपके योगदानों की सूची",
"tooltip-pt-login": "आपको सत्रारम्भ करने के लिए प्रोत्साहित किया जाता है; लेकिन यह अनिवार्य नहीं है",
"tooltip-pt-logout": "सत्रांत",
+ "tooltip-pt-createaccount": "हमारा सुझाव है की आप खाता बनाएँ और लॉगिन करें, परन्तु यह अनिवार्य नहीं है",
"tooltip-ca-talk": "सामग्री पृष्ठ के बारे में वार्तालाप",
"tooltip-ca-edit": "आप यह पृष्ठ बदल सकते हैं।\nकृपया बदलाव संजोने से पहले झलक देखें।",
"tooltip-ca-addsection": "नया विभाग आरम्भ करें",
@@ -2199,8 +2246,8 @@
"tooltip-ca-unwatch": "यह पृष्ठ अपने ध्यानसूचीसे हटाएं",
"tooltip-search": "{{SITENAME}} में खोजें",
"tooltip-search-go": "अगर इस शीर्षक का पृष्ठ हैं तो उसपर चलें",
- "tooltip-search-fulltext": "इस वाक्यांश को पन्नों में खोजें",
- "tooltip-p-logo": "मुख पृष्ठ",
+ "tooltip-search-fulltext": "इस पाठ को पृष्ठों में खोजें",
+ "tooltip-p-logo": "मुख पृष्ठ पर जाएँ",
"tooltip-n-mainpage": "मुखपृष्ठ पर जाएँ",
"tooltip-n-mainpage-description": "मुखपृष्ठ पर जाएँ",
"tooltip-n-portal": "परियोजना के बारे में, आप क्या कर सकतें हैं, सहायता कहाँ से लें",
@@ -2214,7 +2261,7 @@
"tooltip-feed-atom": "इस पृष्ठ की अणु फ़ीड",
"tooltip-t-contributions": "इस सदस्यके योगदानकी सूची देखियें",
"tooltip-t-emailuser": "इस सदस्य को इमेल भेजें",
- "tooltip-t-upload": "संचिका चढ़ाएँ",
+ "tooltip-t-upload": "फ़ाइल अपलोड करें",
"tooltip-t-specialpages": "सभी विशेष पृष्ठों की सूची",
"tooltip-t-print": "इस पृष्ठका छपानेलायक अवतरण",
"tooltip-t-permalink": "पृष्ठ के इस संस्करण की स्थायी कड़ी",
@@ -2276,7 +2323,6 @@
"pageinfo-robot-policy": "सर्च इंजन बॉट द्वारा अनुक्रमण",
"pageinfo-robot-index": "अनुमतित",
"pageinfo-robot-noindex": "नहीं अनुमतित",
- "pageinfo-views": "दर्शाव की संख्या",
"pageinfo-watchers": "पृष्ठ पर नज़र रखने वालों की संख्या",
"pageinfo-few-watchers": "$1 से कम ध्यान देने {{PLURAL:$1|वाला|वाले}}",
"pageinfo-redirects-name": "इस पृष्ठ को पुनर्निर्देशों की संख्या",
@@ -2719,7 +2765,6 @@
"exif-urgency-low": "न्यूनतम ($1)",
"exif-urgency-high": "उच्चतम ($1)",
"exif-urgency-other": "यूज़र-डिफ़ाइंड प्राथमिकता ( $1 )",
- "watchlistall2": "सभी",
"namespacesall": "सभी",
"monthsall": "सभी",
"confirmemail": "ई-मेल प्रमाणित करे",
@@ -2776,6 +2821,7 @@
"autosumm-replace": "पृष्ठ को '$1' से बदल रहा है।",
"autoredircomment": "[[$1]] को अनुप्रेषित",
"autosumm-new": "'$1' के साथ नया पृष्ठ बनाया",
+ "autosumm-newblank": "रिक्त पृष्ठ बनाया",
"size-bytes": "$1 B",
"size-kilobytes": "$1 KB",
"size-megabytes": "$1 MB",
@@ -2795,6 +2841,14 @@
"watchlistedit-raw-done": "आपकी ध्यानसूची अपडेट कर दी गई हैं",
"watchlistedit-raw-added": "{{PLURAL:$1|1शीर्षक|$1 शीर्षक}} बढा दिये:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1शीर्षक|$1 शीर्षक}} हटा दिये:",
+ "watchlistedit-clear-title": "ध्यानसूची खाली की",
+ "watchlistedit-clear-legend": "ध्यानसूची खाली करें",
+ "watchlistedit-clear-explain": "आपकी ध्यानसूची से सभी पृष्ठ हटा दिये जायेंगे",
+ "watchlistedit-clear-titles": "खिताब:",
+ "watchlistedit-clear-done": "आपकी ध्यानसूची खाली कर दी गयी है।",
+ "watchlistedit-clear-removed": "$1 पृष्ठ{{PLURAL:$1|हटाया गया|हटाये गए}}:",
+ "watchlistedit-too-many": "यहाँ दर्शाने के लिए अत्यधिक पृष्ठ हैं।",
+ "watchlisttools-clear": "ध्यानसूची खाली करें",
"watchlisttools-view": "आधारित बदलाव देखें",
"watchlisttools-edit": "ध्यानसूची देखें एवं संपादित करें",
"watchlisttools-raw": "रॉ ध्यानसूची देखें एवं संपादित करें",
@@ -2839,7 +2893,6 @@
"hebrew-calendar-m11-gen": "एवी (Av)",
"hebrew-calendar-m12-gen": "एलुल (Elul)",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|वार्ता]])",
- "unknown_extension_tag": "गलत एक्स्टेंशन टैग \"$1\"",
"duplicate-defaultsort": "'''Warning:''' पुरानी मूल क्रमांकन कुंजी \"$1\" के बजाय अब मूल क्रमांकन कुंजी \"$2\" होगी।",
"version": "रूपान्तर",
"version-extensions": "इन्स्टॉल की हुई एक्स्टेंशन",
@@ -2856,9 +2909,11 @@
"version-hook-name": "हूक नाम",
"version-hook-subscribedby": "ने सदस्यत्व लिया",
"version-version": "($1)",
+ "version-no-ext-name": "[कोई नाम नहीं]",
"version-license": "मीडियाविकि अनुज्ञापत्र",
"version-ext-license": "लाइसेंस",
"version-ext-colheader-name": "एक्सटेंशन",
+ "version-skin-colheader-name": "त्वचा",
"version-ext-colheader-version": "संस्करण",
"version-ext-colheader-license": "लाइसेंस",
"version-ext-colheader-description": "विवरण",
@@ -2870,16 +2925,26 @@
"version-poweredby-credits": "यह विकि '''[https://www.mediawiki.org/ MediaWiki]''' द्वारा संचालित है, कॉपीराइट © 2001 - $1 $2 ।",
"version-poweredby-others": "अन्य",
"version-poweredby-translators": "translatewiki.net अनुवादक",
+ "version-credits-summary": "हम निम्न व्यक्तियों द्वारा [[Special:Version|मीडियाविकि]] में किये गए योगदानों को सराहते हैं।",
"version-software": "इन्स्टॉल की हुई प्रणाली",
"version-software-product": "प्रोडक्ट",
"version-software-version": "अवतरण",
+ "version-entrypoints": "प्रवेश बिंदु यू॰आर॰एल",
+ "version-entrypoints-header-entrypoint": "प्रवेश बिंदु",
"version-entrypoints-header-url": "यू॰आर॰एल",
+ "version-libraries": "स्थापित लाइब्रेरी",
+ "version-libraries-library": "लाइब्रेरी",
+ "version-libraries-version": "संस्करण",
+ "redirect-legend": "फ़ाइल अथवा पृष्ठ को पुनर्प्रेषण",
+ "redirect-summary": "यह विशेष पृष्ठ फ़ाइलनाम प्रदान करने पर फ़ाइल नाम को, पृष्ठ आइ॰दी अथवा अवतरण आइ॰दी देने पर पृष्ठ को, और सदस्य आइ॰दी देने पर सदस्य पृष्ठ को पुनर्प्रेषित करता है। उदाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], या [[{{#Special:Redirect}}/user/101]]।",
"redirect-submit": "जायें",
"redirect-lookup": "ढूँढें:",
"redirect-value": "मूल्य:",
"redirect-user": "सदस्य आई॰डी",
+ "redirect-page": "पृष्ठ आइ॰डी",
"redirect-revision": "पृष्ठ अवतरण संख्या",
"redirect-file": "फ़ाइल नाम",
+ "redirect-not-exists": "यह मान प्राप्त नहीं हुआ",
"fileduplicatesearch": "फ़ाईल द्विरावृत्ति खोजें",
"fileduplicatesearch-summary": "हैश वैल्यू के अनुसार फ़ाईल की द्विरावृत्ति खोजें।",
"fileduplicatesearch-legend": "द्विरावृत्ति के लिये खोजें",
@@ -2904,6 +2969,7 @@
"specialpages-group-wiki": "डाटा और औज़ार",
"specialpages-group-redirects": "विशेष पृष्ठ अनुप्रेषित कर रहें हैं",
"specialpages-group-spam": "स्पैम औज़ार",
+ "specialpages-group-developer": "डेवलपर उपकरण",
"blankpage": "खाली पृष्ठ",
"intentionallyblankpage": "यह पृष्ठ जानबूझ कर खाली छोड़ा गया है।",
"external_image_whitelist": " #यह लाइन जैसी है वैसी ही छोड़ दें<pre>\n #नीचे रेगुलर एक्सप्रेशन के टुकड़े लिखें(बस वही हिस्सा जो // के बीच में आता है)\n #इन एक्सप्रेशन का बाहरी (hotlinked) छवियों के यू॰आर॰एल के साथ मिलान किया जाएगा\n #जो छवियाँ मिलान करेंगी, उन्हें प्रदर्शित किया जाएगा, अन्यथा केवल छवि की कड़ी दिखायी जाएगी\n # # से शुरू होने वाली लाइनें टिप्पणी मानी जाती हैं\n # इस केस-असंवेदी है\n\n #सब रेगुलर एक्सप्रेशन टुकड़े इस लाइन से ऊपर रखें। यह लाइन जैसी है वैसी ही छोड़ दें</pre>",
@@ -2916,12 +2982,30 @@
"tags-tag": "चिप्पी का नाम",
"tags-display-header": "बदलाव सूचियों में प्रदर्शन",
"tags-description-header": "अर्थ का पूरा वर्णन",
+ "tags-source-header": "स्रोत",
"tags-active-header": "सक्रिय?",
"tags-hitcount-header": "चिप्पी वाले बदलाव",
+ "tags-actions-header": "क्रियाएं",
"tags-active-yes": "हाँ",
"tags-active-no": "नहीं",
+ "tags-source-extension": "एक्सटेंशन द्वारा परिभाषित",
+ "tags-source-manual": "उपयोगकर्ताओं और बॉट द्वारा नियमानुसार लागू",
+ "tags-source-none": "अब प्रयोग में नहीं",
"tags-edit": "सम्पादन",
+ "tags-delete": "हटाएँ",
+ "tags-activate": "सक्रिय करें",
+ "tags-deactivate": "निष्क्रिय करें",
"tags-hitcount": "$1 {{PLURAL:$1|बदलाव|बदलाव}}",
+ "tags-create-tag-name": "चिप्पी का नाम",
+ "tags-create-reason": "कारण:",
+ "tags-create-submit": "बनाएँ",
+ "tags-create-no-name": "आपको एक चिप्पि का नाम निर्दिष्ट करना चाहिए।",
+ "tags-delete-title": "चिप्पि हटायें",
+ "tags-delete-reason": "कारण:",
+ "tags-activate-reason": "कारण:",
+ "tags-activate-submit": "सक्रिय करें",
+ "tags-deactivate-reason": "कारण:",
+ "tags-deactivate-submit": "निष्क्रिय करें",
"comparepages": "पृष्ठों की तुलना करें",
"compare-page1": "पृष्ठ १",
"compare-page2": "पृष्ठ २",
@@ -2933,8 +3017,8 @@
"compare-revision-not-exists": "आपके द्वारा निर्दिष्ट संशोधन मौजूद नहीं है।",
"dberr-problems": "क्षमा करें! इस जालस्थल को कुछ तकनीकी परेशानियों का सामना करना पड़ रहा है।",
"dberr-again": "कुछ मिनट रुकने के बाद फिर से चढ़ाएँ।",
- "dberr-info": "(आँकड़ाकोष सेवक से संपर्क नहीं हो पा रहा:$1)",
- "dberr-info-hidden": "(डाटाबेस सर्वर से संपर्क नहीं किया जा सका)",
+ "dberr-info": "(डाटाबेस से संपर्क नहीं हो पा रहा: $1)",
+ "dberr-info-hidden": "(डाटाबेस से संपर्क नहीं किया जा सका)",
"dberr-usegoogle": "इस बीच आप गूगल से खोज करने की कोशिश कर सकते हैं।",
"dberr-outofdate": "ध्यान दे, हो सकता है कि हमारी सामग्री से संबंधित उनकी सूची बासी हो।",
"dberr-cachederror": "यह अनुरोधित पन्ने की संचित प्रति है, हो सकता है यह ताज़ी न हो।",
@@ -2951,6 +3035,8 @@
"htmlform-no": "नहीं",
"htmlform-yes": "हाँ",
"htmlform-chosen-placeholder": "एक विकल्प चुनें",
+ "htmlform-cloner-create": "अधिक जोड़ें",
+ "htmlform-cloner-delete": "हटाएँ",
"sqlite-has-fts": "$1 पूर्ण पाठ खोज समर्थन के साथ",
"sqlite-no-fts": "$1पूर्ण-पाठ खोज समर्थन के बिना",
"logentry-delete-delete": "$1 ने पृष्ठ $3 {{GENDER:$2|हटा}} दिया",
@@ -2986,20 +3072,22 @@
"logentry-rights-rights": "$1 ने $3 के सदस्य समूह $4 से बदलकर $5 {{GENDER:$2|किये}}",
"logentry-rights-rights-legacy": "$1 ने $3 के सदस्य समूह {{GENDER:$2|बदले}}",
"logentry-rights-autopromote": "$1 के सदस्य समूह स्वतः $4 से बदलकर $5 {{GENDER:$2|किये}} गए",
+ "logentry-upload-upload": "$1 {{GENDER:$2|ने}} $3 अपलोड किया",
"rightsnone": "(कोई नहीं)",
+ "revdelete-summary": "संपादन सारांश",
+ "feedback-adding": "पृष्ठ पर प्रतिक्रिया जोड़ना ...",
+ "feedback-bugcheck": "शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।",
+ "feedback-bugnew": "मैं जाँच कीया। एक नया बग रिपोर्ट करें",
"feedback-bugornote": "यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।\nयदि नहीं, तो आप नीचे दिये सरल फ़ॉर्म का प्रयोग कर सकते हैं। आपकी टिप्पणी आपके सदस्य नाम और आपके ब्राउज़र के नाम के सहित \"[$3 $2]\" पृष्ठ में जोड़ दी जाएगी।",
- "feedback-subject": "विषय:",
- "feedback-message": "संदेश:",
"feedback-cancel": "रद्द करें",
- "feedback-submit": "प्रतिक्रिया भेजें",
- "feedback-adding": "पृष्ठ पर प्रतिक्रिया जोड़ना ...",
+ "feedback-close": "हो गया",
"feedback-error1": "त्रुटि: न पहचाना गया परिणाम एपीआई से",
"feedback-error2": "त्रुटि: संपादन विफल रहा है",
"feedback-error3": "त्रुटि: एपीआई से कोई प्रतिक्रिया नहीं",
+ "feedback-message": "संदेश:",
+ "feedback-subject": "विषय:",
+ "feedback-submit": "जमा करें",
"feedback-thanks": "धन्यवाद! आपकी प्रतिक्रिया पृष्ठ में नियुक्त किया गया है \"[ $2 $1 ]\"।",
- "feedback-close": "हो गया",
- "feedback-bugcheck": "शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।",
- "feedback-bugnew": "मैं जाँच कीया। एक नया बग रिपोर्ट करें",
"searchsuggest-search": "खोज",
"searchsuggest-containing": "...से युक्त",
"api-error-badaccess-groups": "आपको इस विकि के लिए फ़ाइलें अपलोड करने की अनुमति नहीं है.",
@@ -3068,5 +3156,42 @@
"expand_templates_remove_comments": "टिप्पणी हटायें",
"expand_templates_remove_nowiki": "परिणाम में <nowiki> टैग हटाएँ",
"expand_templates_generate_xml": "XML का पार्स (parse) वृक्ष दर्शायें",
- "expand_templates_preview": "झलक"
+ "expand_templates_preview": "झलक",
+ "pagelanguage": "पृष्ठ भाषा चुनाव",
+ "pagelang-name": "पृष्ठ",
+ "pagelang-language": "भाषा",
+ "pagelang-use-default": "डिफ़ॉल्ट भाषा का प्रयोग करें",
+ "pagelang-select-lang": "भाषा चुनें",
+ "right-pagelang": "पृष्ठ भाषा बदलें",
+ "action-pagelang": "पृष्ठ भाषा बदलने",
+ "log-name-pagelang": "पृष्ठ भाषा बदलाव लॉग",
+ "log-description-pagelang": "यह पृष्ठ भाषाओं में परिवर्तन का लॉग है।",
+ "mediastatistics-table-count": "फ़ाइलों की संख्या",
+ "mediastatistics-header-unknown": "अज्ञात",
+ "mediastatistics-header-bitmap": "बिटमैप चित्र",
+ "mediastatistics-header-audio": "ऑडियो",
+ "mediastatistics-header-video": "विडियो",
+ "mediastatistics-header-office": "ऑफ़िस",
+ "mediastatistics-header-text": "पाठ",
+ "json-error-syntax": "सिन्टॅक्स त्रुटि",
+ "headline-anchor-title": "इस अनुभाग की कड़ी",
+ "special-characters-group-latin": "लाटिन",
+ "special-characters-group-latinextended": "लाटिन विस्तारित",
+ "special-characters-group-ipa": "आइपीए",
+ "special-characters-group-symbols": "प्रतीक",
+ "special-characters-group-greek": "ग्रीक",
+ "special-characters-group-cyrillic": "सिरिलिक",
+ "special-characters-group-arabic": "अरबी",
+ "special-characters-group-arabicextended": "अरबी विस्तारित",
+ "special-characters-group-persian": "फार्सी",
+ "special-characters-group-hebrew": "हिब्रू",
+ "special-characters-group-bangla": "बांग्ला",
+ "special-characters-group-tamil": "तमिल",
+ "special-characters-group-telugu": "तेलूगू",
+ "special-characters-group-sinhala": "सिंहल",
+ "special-characters-group-gujarati": "गुजराती",
+ "special-characters-group-devanagari": "देवनागरी",
+ "special-characters-group-thai": "थाई",
+ "special-characters-group-lao": "लाओ",
+ "special-characters-group-khmer": "खमेर"
}
diff --git a/languages/i18n/hif-latn.json b/languages/i18n/hif-latn.json
index 0062c261..4e3590d8 100644
--- a/languages/i18n/hif-latn.json
+++ b/languages/i18n/hif-latn.json
@@ -11,7 +11,9 @@
"Thakurji",
"아라",
"Soul Train",
- "Filipinayzd"
+ "Filipinayzd",
+ "SNN95",
+ "Macofe"
]
},
"tog-underline": "Jorr ke niche line khicho:",
@@ -28,6 +30,7 @@
"tog-watchdefault": "Ham se badla gais panna aur file ke hamaar dhyaan suchi me jorro",
"tog-watchmoves": "Uu panna aur file jiske naam ham badla hai ke hamaar dhyaan suchi me jorro",
"tog-watchdeletion": "Uu panna, aur file jiske ham mitaya hai ke hamaar dhyaan suchi me jorro",
+ "tog-watchrollback": "Uu panna ke jorro jisme ham aapan watchlist me rollback karaa hae",
"tog-minordefault": "Mamuli badlao ke apne se nishaan lagao",
"tog-previewontop": "Badlao waala dabba se pahile ek jhalak dekhao",
"tog-previewonfirst": "Hamaar pahila badlao pe jhalak dekhao",
@@ -176,8 +179,11 @@
"permalink": "Pakka jorr",
"print": "Print karo",
"view": "Dekho",
+ "view-foreign": "$1 pe dekho",
"edit": "Badlo",
+ "edit-local": "Local description ke badlo",
"create": "Banao",
+ "create-local": "Local description ke jorro",
"editthispage": "Ii panna ke badlo",
"create-this-page": "Ii panna ke banao",
"delete": "Mitao",
@@ -210,6 +216,7 @@
"otherlanguages": "Duusra bhasa me",
"redirectedfrom": "($1 se bheja gais)",
"redirectpagesub": "Panna ke redirect karo",
+ "redirectto": "Hian redirect karo:",
"lastmodifiedat": "Ii panna ke $1, ke $2 pichhla time badla gais rahaa.",
"viewcount": "Ii panna ke {{PLURAL:$1|ek dafe|$1 dafe}} dekha gais hai.",
"protectedpage": "Bachawal panna",
@@ -217,9 +224,12 @@
"jumptonavigation": "navigation",
"jumptosearch": "khojo",
"view-pool-error": "Maaf karna, abhi sab server busy hae.\nBahut dher sadasya ii panna ke dekhe maange hae.\nMeharbani kar ke, thora deri sabur kar ke ii panna ke fir se kholo.\n\n$1",
+ "generic-pool-error": "Maaf karna, abhi sab server busy hae.\nBahut dher sadasya ii panna ke dekhe maange hae.\nMeharbani kar ke, thora deri sabur kar ke ii panna ke fir se kholo.",
"pool-timeout": "Lock ke wait kare waala time khalaas hoe gais hae",
"pool-queuefull": "Pool ke line bhar gais hae",
"pool-errorunknown": "Pata nahi kaisan galti hae",
+ "pool-servererror": "Pool counter sewa abhi ready nai hae ($1).",
+ "poolcounter-usage-error": "Kaam me lae pe karrbarr: $1",
"aboutsite": "{{SITENAME}} ke baare me",
"aboutpage": "Project:Ke baare me",
"copyright": "Agar duusra kaaran nai dewa gais hae, tab aap ii panna me likha gae chij ke aap $1 ke niche kaam me lae sakta hai.",
@@ -246,8 +256,8 @@
"youhavenewmessages": "Aapke pass hai $1 ($2).",
"youhavenewmessagesfromusers": "Aap ke lage {{PLURAL:$3|duusra sadasya|$3 sadasya}} ke lage se $1 hae ($2).",
"youhavenewmessagesmanyusers": "Aap ke lage dher sadasya se $1 hae ($2).",
- "newmessageslinkplural": "{{PLURAL:$1|ek nawaa sandes|nawaa sandes}}",
- "newmessagesdifflinkplural": "pichhla {{PLURAL:$1|badlao}}",
+ "newmessageslinkplural": "{{PLURAL:$1|ek nawaa sandes|999=nawaa sandes}}",
+ "newmessagesdifflinkplural": "pichhla{{PLURAL:$1|badlao|999=badlao}}",
"youhavenewmessagesmulti": "Aap ke khatir $1 pe sandes hai",
"editsection": "badlo",
"editold": "badlao",
@@ -260,6 +270,9 @@
"hidetoc": "chupao",
"collapsible-collapse": "Chhota karo",
"collapsible-expand": "Barraa karo",
+ "confirmable-confirm": "Kon{{GENDER:$1|aap}} sure hae?",
+ "confirmable-yes": "Haan",
+ "confirmable-no": "Nai",
"thisisdeleted": "Dekho ki $1 ke pahile jaise karo?",
"viewdeleted": "$1 ke dekho?",
"restorelink": "{{PLURAL:$1|ek mitawal badlao|$1 mitawal badlao}}",
@@ -304,10 +317,13 @@
"readonly_lag": "Database apne se band hoi gais hai jab tak ki duusra database, khaas database ke sanghe kaam nai kare lage.",
"internalerror": "Bhitri galti",
"internalerror_info": "Bhitri galti: $1",
+ "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
"filecopyerror": "File \"$1\" ke \"$2\" pe copy nai kare sakaa.",
"filerenameerror": "File \"$1\" ke naam badal ke \"$2\" nai kare sakaa.",
"filedeleteerror": "File \"$1\" ke nai mitae sakaa.",
"directorycreateerror": "Directory \"$1\" ke nai banae sakaa.",
+ "directoryreadonlyerror": "Directory \"$1\" khaali parrhe ke khatir hae.",
+ "directorynotreadableerror": "Directory \"$1\" ke parrha nai jaae sake hae.",
"filenotfound": "File \"$1\" ke nai pae sakaa.",
"unexpected": "Aasa karaa gais jaankari nai hai: \"$1\"=\"$2\".",
"formerror": "Galti: form ke submit nai kare sakaa",
@@ -329,7 +345,8 @@
"viewsourcetext": "Aap ii panna ke source ke dekhe aur nakal utare kare sakta hai:",
"viewyourtext": "Aap '''aapan badlao''' ke source ke dekhe aur copy kare saktaa hae",
"protectedinterface": "Ii panna, ii wiki ke khatir, software ke interface text dewe hai, aur iske barbaadi se roke ke khatir band kar dewa gais hai.\nSab wiki me anuwaad ke jorre nai to badle ke khatir, meharbaani kar ke [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project ke kaam me laao.",
- "editinginterface": "'''Chetawani:''' Aap ek panna ke badaltaa hai jon ki software ke interface text dewe hae.\nIi panna me badlao ke asar duusra sadasya ke interface pe bhi hoi.\nTranslation khatir [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project, ke kaam me lao.",
+ "editinginterface": "'''Chetawani:''' Aap ek panna ke badaltaa hai jon ki software ke interface text dewe hae.\nIi panna me badlao ke asar duusra sadasya ke interface pe bhi hoi.",
+ "translateinterface": "Sab wiki me translate kare ke khatir [//translatewiki.net/translatewiki.net], the MediaWiki localisation project, ke kaam me lao.",
"cascadeprotected": "Ii panna ke badlao se bachawa gais hai, kahe ki iske {{PLURAL:$1|panna, jon ki|panna, jon ki}} surakchhit hae \"cascading\" option turned on ke saathe me rakkhaa gais hai:\n$2",
"namespaceprotected": "Aap ke paas '''$1''' namespace me panna ke badle ke adhikar nai hai.",
"customcssprotected": "Aap ke ii CSS panna ke badle ke ijaajat nai hae, kaahe ki isme duusra sadasya ke personal settings hae.",
@@ -345,6 +362,7 @@
"invalidtitle-unknownnamespace": "Title gaer kaanuni hae aur iske namespace number \"$1\" aur text \"$2\" ke nai jaana jaawe hae",
"exception-nologin": "Logged in nai hae",
"exception-nologin-text": "Ii panna nai to aap ke action ke khatir ii wiki me login hoe ke jarurui hae",
+ "exception-nologin-text-manual": "Ii panna ke khole, nai to ii action ke kare ke khatir $1 karo.",
"virus-badscanner": "Kharaab ruup dewa gais hae: virus khoje waala software nawaa hae: ''$1''",
"virus-scanfailed": "scan fail hoe gais (code $1)",
"virus-unknownscanner": "jaana waala antivirus nai hai:",
@@ -383,7 +401,10 @@
"gotaccount": "Aap ke pas pahile se account hai ki nai? '''$1'''.",
"gotaccountlink": "Log in",
"userlogin-resetlink": "Ka aap aapan login kare waala jaankari ke bhulae gaya hae?",
- "userlogin-resetpassword-link": "Aapan password ke reset karo",
+ "userlogin-resetpassword-link": "Aapan password ke bhool gayaa?",
+ "userlogin-helplink2": "Log in kare ke khatir madat.",
+ "userlogin-loggedin": "Aap {{GENDER:$1|$1}} ke naam ke niche login bhayaa hae.\nNiche ke form ke kaam me laae ke duusra naam ke niche login ho.",
+ "userlogin-createanother": "Duusra account banao",
"createacct-emailrequired": "Email address",
"createacct-emailoptional": "Email address (jaruri nai hae)",
"createacct-email-ph": "Aapan mail address ke likho",
@@ -421,19 +442,19 @@
"passwordtooshort": "Password me kamti se kamti {{PLURAL:$1|1 character|$1 characters}} hoe ke chahi.",
"password-name-match": "Aap ke password ke aap ke username se different rahe ke chaahi.",
"password-login-forbidden": "Ii sadasya ke naam aur password ke kaam me laae ke ijaajat nai hae.",
- "mailmypassword": "Nawaa password ke E-mail karo",
+ "mailmypassword": "Password ke badlo",
"passwordremindertitle": "{{SITENAME}} ke khatir nawaa temporary password",
"passwordremindertext": "Koi (hoe sake hai aap, IP address $1 se)\n{{SITENAME}} ($4) ke khatir nawaa password mangis hai.\n\"$2\" ke banae ke \"$3\" se set kar dewa gais hai. Agar aap ii chij mangta rahaa,\ntab aap ke abhi login kar ke password badle ke chaahi.\nAap ke temporary password {{PLURAL:$5|ek din|$5 din}} me expire hoi.\n\nAgar jo aur koi ii request karis hai, nai to aap aapan password yaad kar liya hai aur nai badle mangta hai, tab ii sandes ke ignore kar do aur aapan purana password use karte raho.",
"noemail": "Sadasya \"$1\" ke koi e-mail address recorded nai hai.",
"noemailcreate": "Aap ke thiik e-mail address de ke parrii",
"passwordsent": "Ek nawaa password ke \"$1\" ke registered e-mail pe bheja gais hai. Meharbaani kar ke aap password mile ke baad login karna.",
"blocked-mailpassword": "Aap ke IP address ke block kar dewa gais hai, aur iske kaaran aap ke password recovery function kaam me lae ke ijajat nai hai,",
- "eauthentsent": "Ek confirmation e-mail aap ke dewa gae e-mail address be bhej dewa gais hai. Aur mail ii account pe bheje se pahile e-mail me likha instructions ke follow karo, ii confirm kare ke khatir ki account aap ke hai.",
+ "eauthentsent": "Ek confirmation e-mail aap ke dewa gae e-mail address pe bhej dewa gais hai. Aur mail ii account pe bheje se pahile e-mail me likha instructions ke follow karo, ii confirm kare ke khatir ki account aap ke hai.",
"throttled-mailpassword": "Ek password reset Email ke pahile bheja gais hae, pichhle {{PLURAL:$1|ghanta|$1 ghanta}} me bhej me.\nAbuse ke roke ke khatir, khali ek password reminer har {{PLURAL:$1|ghanta|$1 ghanta}} me bheja jaai.",
"mailerror": "Mail bheje me galti hoe gais hai: $1",
"acct_creation_throttle_hit": "Ii wiki me visitors log aap ke IP address ke use kar ke {{PLURAL:$1|1 account|$1 accounts}}, pichhle kuch din me, banae liin hai, jis se jaada ii time nai banawa jaae sake hai.\nIi kaaran se visitors log jon ki ii IP address use kare hai, ke aur account banae ke ijajat nai hai.",
- "emailauthenticated": "Aap ke e-mail address ke $2 ke roj aur $3 baje authenticate karaa gais rahaa.",
- "emailnotauthenticated": "Aap ke e-mail address ke abi tak authenticate nai gais hai.\nIi sab feature khatir koi e-mail nai bheja jaai.",
+ "emailauthenticated": "Aap ke e-mail address ke $2 ke roj aur $3 baje confirm karaa gais rahaa.",
+ "emailnotauthenticated": "Aap ke e-mail address ke abi tak authenticate nai karaagais hai.\nIi sab feature khatir koi e-mail nai bheja jaai.",
"noemailprefs": "Ii sab feature ke kaam kare khatir e-mail specify karo.",
"emailconfirmlink": "aapan e-mail address ke confirm karo",
"invalidemailaddress": "E-mail address ke nai lewa jae sake hai kahe ki iske format kharaab hai.\nMeharbaani kar ke achchha address ke enter karo nai to uu field ke khali kar do.",
@@ -445,14 +466,19 @@
"createaccount-text": "Koi aap ke e-mail katir {{SITENAME}} ($4) named \"$2\" me account banais hai jiske password hai \"$3\".\nAap ke chaahi ki aap login kar ke password ke badal do.\nAgar ii account galti se banaa hai tab ii sandes ke ignore kar do.",
"login-throttled": "Aap bahut jaada dafe ii account ke password ke enter kare ke kosis karaa hae.\n$1 talak wait kar ke fir se try karo.",
"login-abort-generic": "Aap ke login nai chalaa - Aborted",
+ "login-migrated-generic": "Aap ke account ke update kare ke kaaran, aap ke username ab nai hae.",
"loginlanguagelabel": "Bhasa: $1",
"suspicious-userlogout": "Aap ke log out kare ke maang ke na kar dewa gais hae kaahe ki ii janaawe hae ki ii maang ke ek tuuta browser nai to caching proxy bhejis hae.",
"createacct-another-realname-tip": "Aslii naam ke jaruri nai hae.\nAgar aap iske diya hae tab iske aapke kaam ke attribute kare ke khatir kaam me lawa jaai.",
+ "pt-login": "Log in karo",
+ "pt-login-button": "Log in karo",
+ "pt-createaccount": "Nawaa account banao",
+ "pt-userlogout": "Log out ho",
"php-mail-error-unknown": "PHP ke mail() function me koi anjaan kharaabi hae",
"user-mail-no-addy": "Bina e-mail address rahe pe bhi e-mail bheje ke kosis karaa gais hae.",
"user-mail-no-body": "Ek khaali, nai to kaafi chhota email bheje ke kosis kara rahaa.",
"changepassword": "Pasword ke badlo",
- "resetpass_announce": "Aap ek temporary e-mailed code se login bhaya hai\nLogin khatam kare khatir, aap ke nawaa password set kare ke parri hian:",
+ "resetpass_announce": "Login khatam kare khatir, aap ke nawaa password set kare ke parri.",
"resetpass_text": "<!-- Hian pe likho -->",
"resetpass_header": "Account assword ke badlo",
"oldpassword": "Purana password:",
@@ -460,16 +486,22 @@
"retypenew": "Password fir se type karo:",
"resetpass_submit": "Password ke set kar ke login karo",
"changepassword-success": "Aap ke password ke safalta se badal dewa gais hai!",
+ "changepassword-throttled": "Aap bahut jaada dafe ii account ke password ke enter kare ke kosis karaa hae.\n$1 talak wait kar ke fir se try karo.",
"resetpass_forbidden": "Password nai badlaa jaae sake hai",
"resetpass-no-info": "Ii panna ke sidha access kare ke khatir aap ke logged in rahe ke parri.",
"resetpass-submit-loggedin": "Password ke badlo",
"resetpass-submit-cancel": "Nai karo",
"resetpass-wrong-oldpass": "Temporary nai to abhi ke password valid nai hai.\nSait aap password ke safalta se badal sia hoga nai to nawaa temporary password ke maang karaa hoga.",
+ "resetpass-recycled": "Meharbaani kar ke aap aapan password ke badal ke duusra password banao.",
+ "resetpass-temp-emailed": "Aap ke temporary code, jiske emai karaa gais rahaa, se login bhayaa hae.\nLogin khatam kare ke khatir aap ke nawaa password banae ke chaahi.",
"resetpass-temp-password": "Kachcha password:",
"resetpass-abort-generic": "Ek extension password ke badlao ke rokis hae.",
+ "resetpass-expired": "Aap ke password expire hoe gais hae. Log in kare ke khatir ek nawaa password banao.",
+ "resetpass-expired-soft": "Aap ke password expire hoe gais hae aur iske reset kare ke parri. Meharbani kar ke nawaa pasword choose karo, nai to password ke baad me reset kare ke khatir \"{{int:resetpass-submit-cancel}}\" ke click karo.",
+ "resetpass-validity-soft": "Aap ke password thiik nai hae: $1\n\n\nMeharbani kar ke nawaa pasword choose karo, nai to password ke baad me reset kare ke khatir \"{{int:resetpass-submit-cancel}}\" ke click karo.",
"passwordreset": "Password ke badlo",
"passwordreset-text-one": "Aapan password ke reset kare ke khatir ii form ke bharo.",
- "passwordreset-text-many": "{{PLURAL:$1|Aapan password ke reset kare ke khatir ek field me likho}}",
+ "passwordreset-text-many": "{{PLURAL:$1|Temporary password ke email se le ke khatir ek field me likho}}",
"passwordreset-legend": "Password ke badlo",
"passwordreset-disabled": "II wiki me password ke badle ke ijaajat nai hae.",
"passwordreset-emaildisabled": "Ii wiki me email ke band kar dewa gais hae.",
@@ -486,7 +518,6 @@
"passwordreset-emailsent-capture": "Ek password yaad karae waala e-mail, jiske niche dekhawa jaawe hae, ke bhej dewa gais hae.",
"passwordreset-emailerror-capture": "Ek password yaad karae waala e-mail ke banawa gais hae, jiske niche dekhawa jaawe hae, lekin jiske {{GENDER:$2|user}} ke lage bheje nai jawa sake hae: $1",
"changeemail": "E-mail address ke badlo",
- "changeemail-header": "Account e-mail address ke badlo",
"changeemail-text": "Aapan e-mail ke badle kae khaatir ii form ke fill karo. Ii badlao ke khatir aap ke aapan password ke de ke parri.",
"changeemail-no-info": "Ii panna ke sidha dekhe ke khaatir, aap ke login kare ke parri.",
"changeemail-oldemail": "Abhi ke E-mail address:",
@@ -494,7 +525,7 @@
"changeemail-none": "(kuchh nai)",
"changeemail-password": "Aap ke {{SITENAME}} password:",
"changeemail-submit": "E-mail badlo",
- "changeemail-cancel": "Kaat do",
+ "changeemail-throttled": "Aap bahut dher dafe login kare ke kosis karaa hae.\nMeharbaani kar ke $1 talak wait kar ke fir se try karo.",
"resettokens": "Token ke reset karo",
"resettokens-text": "Aap aapan private data pe access roke ke khatir token ke reset kare saktaa hae.\n\nAap ke ii kare ke chaahi agar aap galti se ii jaankari ke aur koi ke de diya hae nai to aap ke account ke bare me aur koi ke pataa hae.",
"resettokens-no-tokens": "Reset kare ke jhatir koi token nai hae.",
@@ -528,9 +559,11 @@
"preview": "Jhalak dekhao",
"showpreview": "Preview dekhao",
"showdiff": "Badlao dekhao",
- "anoneditwarning": "'''Sawadhaan:''' Aap login nai karaa hai\nAap ke IP address ii panna ke edit itihaas me record karaa jaai.",
+ "blankarticle": "<strong>Chetauni:</strong> Jon panna ke aap banata hae, me kuchh likha nai hae. \nAgar aap \"{{int:savearticle}}\" ke fir se click karaa, tab khaali panna ban jaai.",
+ "anoneditwarning": "'''Sawadhaan:''' Aap login nai karaa hai\nAap ke IP address ke sab koi dekhe saki agar aap koi badlao karra. Agar aap <strong>>[$1 log in]</strong> or <strong>[$2 create an account]</strong>, tab aap ke badlao aap ke naam ke niche dekhai, aur duusra benefits ke saathe.",
"anonpreviewwarning": "\"Aap log in nai bhaya hae. Ii panna ke bachae pe aap ke IP address ke panna ke badlao ke itihass me likha jaai.\"",
"missingsummary": "'''Suchna:''' Aap badlao ke sanchhit me nai likha hai.\nAgar aap Save ke fir se click karaa tab, aap ke badlao bina summary ke save kar lewa jaai.",
+ "selfredirect": "<strong>Chetauni:</strong> Aap ii panna ke apne me redirect kartaa hae. \nAap saait wrong target ke specify karaa, nai to wrong panna ke badaltaa hae.\nAgar aap \"{{int:savearticle}}\" ke fir se click karaa tab redirect ban jaai.",
"missingcommenttext": "Meharbani kar ke niche aapan vichar deo.",
"missingcommentheader": "'''Chetauni:''' Aap ii vichar ke vishay nai likha hai.\nAgar aap \"{{int:savearticle}}\" pe click karaa tab bina vishay ke iske bachae lewa jaai.",
"summary-preview": "Sanchhep jhalak:",
@@ -614,17 +647,25 @@
"edit-gone-missing": "Panna ke badle nai sakaa.\nJanae hai ki iske koi mitae dii hai.",
"edit-conflict": "Badlao me conflict hai.",
"edit-no-change": "Aap ke badle ke kosis ke ignore kar dewa gais hai, kahe ki text ke badla nai gais hai.",
+ "postedit-confirmation-created": "Panna ke banae dewa gais hae.",
+ "postedit-confirmation-restored": "Panna ke restore kar dewa gais hae.",
"postedit-confirmation-saved": "Aap ke badlao ke bachae lewa gais hae.",
"edit-already-exists": "Nawaa panna nai banae sakaa hai.\nIi naam ke panna abhi hai.",
"defaultmessagetext": "Default message text",
"content-failed-to-parse": "$1 model ke khatir $2 ke parse nai kare sakaa hae: $3",
"invalid-content-data": "Panna me likha gais chij right nai hae",
"content-not-allowed-here": "Panna [[$2]] me \"$1\" likhe ke ijaajat nai hae",
- "editwarning-warning": "Ii panna ke chore se jetna changes aap karaa hae nai save hoi.\nAgar aap logged in hae, tab aap ii chetauni ke \"Editing\" vibhag me disable kare saktaa hae.",
+ "editwarning-warning": "Ii panna ke chhore se jetna changes aap karaa hae nai save hoi.\nAgar aap logged in hae, tab aap ii chetauni ke \"{{int:prefs-editing}}\" vibhag me disable kare saktaa hae.",
+ "editpage-notsupportedcontentformat-title": "Content ke format ke support nai karaa jaawe hae.",
+ "editpage-notsupportedcontentformat-text": "Content format $1 ke content model $2 nai support kare hae.",
"content-model-wikitext": "wikitext",
"content-model-text": "plain text",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Khaali object",
+ "content-json-empty-array": "Khaali array",
+ "duplicate-args-category": "Panna jiske tamplate call me duplicate argument hae",
+ "duplicate-args-category-desc": "Panna me template calls hae jisme duplicate arguments hae, jaise ki <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Chetauni''': Ii panna me bahut jaada expensive parser function calls hai.\n\nIske $2 {{PLURAL:$2|call|calls}} se kamti hoe ke chaahi, {{PLURAL:$1|abhi hai $1 call|abhi hai $1 calls}}.",
"expensive-parserfunction-category": "Panna jisme bahut jaada expensive parser function calls hai",
"post-expand-template-inclusion-warning": "'''Chetauni:''' Template include size bahut barraa hai.\nKutch templates ke include nai karaa jaai.",
@@ -635,8 +676,10 @@
"parser-template-recursion-depth-warning": "Template recursion depth limit se jaada hoe gais hae ($1)",
"language-converter-depth-warning": "Bhasa anuwaad ke gahiraai ijajat se jaada hoe gais hae ($1)",
"node-count-exceeded-category": "Panna jahaan pe node-count bahut jaada hoe gais hae",
- "node-count-exceeded-warning": "Panna, node-count se jaada hae",
+ "node-count-exceeded-category-desc": "Panna maximum node count ke exceed kare hae.",
+ "node-count-exceeded-warning": "Panna, node count se jaada hae",
"expansion-depth-exceeded-category": "Panna jahaan pe expansion depth ke exceed karaa gais hae",
+ "expansion-depth-exceeded-category-desc": "Panna, maximum expansion depth, se jaada hae.",
"expansion-depth-exceeded-warning": "Panna expansion depth ke exceed karis hae",
"parser-unstrip-loop-warning": "Unstrip loop ke pawa gai shae",
"parser-unstrip-recursion-limit": "Unstrip recursion limit ke exceed karaa gais hae ($1)",
@@ -644,16 +687,18 @@
"undo-success": "Ii badlao ke pahile jaise karaa jaae sake hai.\nNiche ke comparison ke check kar ke dekho ki aap yahi kare mangta rahaa, aur fir niche ke badlao ke save kar ke aapan badlao ke pahile jaise karo.",
"undo-failure": "Ii badalo ke paile jaise nai karaa jaae sake hai kahe ki biich me badlao hai.",
"undo-norev": "Ii badlao ke pahile jaise nai karaa jaae sake hai kahe ki ii badalo abhi nai hai nai to iske mitae dewa gais hai.",
+ "undo-nochange": "Janae hae ki badlao ke pahile delete kar dewa gais hae.",
"undo-summary": "$1 badlao [[Special:Contributions/$2|$2]] se, ke pahile jaise karo ([[User talk:$2|Talk]])",
"undo-summary-username-hidden": "Hidden sadasya ke badalo $1 ke pahile jaise karo",
"cantcreateaccounttitle": "Account nai banae sakta hai",
"cantcreateaccount-text": "Ii IP address ('''$1''') se nawaa account banae ke [[User:$3|$3]] block kar diis hai.\n\nIske kaaran, jon ki $3 diis hai, ''$2'' hai",
+ "cantcreateaccount-range-text": "Nawaa account banae ke IP addresses range '''$1''', jisme aap ke IP address ('''$4''') hae, ke[[User:$3|$3]] block kar diis hae.\n\n$3 ke kaaran hae ''$2''",
"viewpagelogs": "Ii panna ke suchi dekho",
"nohistory": "Ii panna ke khatir koi badlao ke itihaas nai hai.",
"currentrev": "Abhi ke sansodhan",
"currentrev-asof": "Abhi ke badlao ii tarik tak $1",
"revisionasof": "$1 ke badlao",
- "revision-info": "$2 ke badlao $1 tak",
+ "revision-info": "Badlao $1 tak {{GENDER:$6|$2}}$7 se",
"previousrevision": "← Purana badlao",
"nextrevision": "Nawaa badlao→",
"currentrevisionlink": "Abhi ke badlao",
@@ -678,6 +723,7 @@
"rev-deleted-event": "(log action ke hatae dewa gais hai)",
"rev-deleted-user-contribs": "[Sadasya ke naam nai to IP address ke hatae dewa gais hae- yogdaan se badlao ke lukae dewa gais hae]",
"rev-deleted-text-permission": "Panna ke ii badlao ke '''mitae''' dewa gais hae.\nIske baare me aur jaankari [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me saait hoi.",
+ "rev-suppressed-text-permission": "Ii panna ke badlao ke <strong>dabae</strong> dewa gais hai.\nAap iske baare me aur jaankari [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] me paawe saktaa hae.",
"rev-deleted-text-unhide": "i panna ke badlao ke '''mitae''' dewa gais hai.\nIske baare me aur jaankari saait [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me hoi.\nAap fir bhi [$1 ii badlao ke dekhe sakta hae] agar aap aage barrhe mangtaa hae tab.",
"rev-suppressed-text-unhide": "Ii panna ke badlao ke '''dabae''' dewa gais hai.\nIske baare me aur jaankari saait [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log] me hoi.\nAap fir bhi [$1 ii badlao ke dekhe sakta hae] agar aap aage barrhe mangtaa hae tab.",
"rev-deleted-text-view": "Panna ke ii badlao ke '''mitae''' dewa gais hae.\nAap iske dekhe sakta hai; iske baare me aur jaankari [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me saait hoi.",
@@ -696,19 +742,25 @@
"revdelete-no-file": "Chuna gais file abhi nai banawa gais hai.",
"revdelete-show-file-confirm": "Ka aap sure hai ki aap file ke mitawa gais revision ke dekhe mangtaa hai \"<nowiki>$1</nowiki>\" $2 se $3 talak?",
"revdelete-show-file-submit": "Haan",
+ "revdelete-selected-text": "{{PLURAL:$1|Selected revision|Selected revisions}} of [[:$2]]:",
+ "revdelete-selected-file": "{{PLURAL:$1|Selected file version|Selected file versions}} of [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Chuna gais log event|Chuna gais log events}}:",
+ "revdelete-text-text": "Delete karaa gais revision panna ke itihaas me dekhai, lekin panna ke kuchh hissa janata ke nai dekhai.",
+ "revdelete-text-file": "Delete karaa gais file version file ke itihaas me dekhai, lekin file ke kuchh hissa janata ke nai dekhai.",
+ "logdelete-text": "Delete karaa gais log events log me dekhaste rahii, lekin log ke kuchh hissa janata ke nai dekhai.",
+ "revdelete-text-others": "Duusra administrator hidden content ke access kare sake aur undelete kare sake, unless aur restrictions laabu karaa jaae.",
"revdelete-confirm": "Meharbani kar ke aap ii confirm karo ki aap ii kare mangta hae, aap iske asar ke samajhta hae, aur iske aap [[{{MediaWiki:Policy-url}}|the policy]] ke anusar karta hae.",
- "revdelete-suppress-text": "Suppression ke '''khaali''' ii chij ke khatir kaam me lawa jaae sake hai:\n* Aapan baare me jaankari thik nai hai\n*: ''ghar ke address aur telephone number, social security number, etc.''",
+ "revdelete-suppress-text": "Suppression ke <strong>khaali</strong> ii chij ke khatir kaam me lawa jaae sake hai:\n* potentially libelious jaankari\n* Aapan baare me jaankari thik nai hai\n*: <em>ghar ke address aur telephone number, social security number, etc.</em>",
"revdelete-legend": "Dekhe waala rukawat set karo",
- "revdelete-hide-text": "Badlawa gais text ke lukao",
+ "revdelete-hide-text": "Badlawa gais text",
"revdelete-hide-image": "File content ke lukao",
- "revdelete-hide-name": "Kaam aur manjil ke lukao",
- "revdelete-hide-comment": "Badlao ke baare me comment ke lukao",
- "revdelete-hide-user": "Editor's username/IP ke lukao",
+ "revdelete-hide-name": "Target aur parameters ke lukao",
+ "revdelete-hide-comment": "Summary ke badlo",
+ "revdelete-hide-user": "Editor ke username/IP address",
"revdelete-hide-restricted": "Ii rukawat ke administrator aur duusra log se lukao.",
"revdelete-radio-same": "(badlo nai)",
- "revdelete-radio-set": "Haan",
- "revdelete-radio-unset": "Nai",
+ "revdelete-radio-set": "Lukaawal",
+ "revdelete-radio-unset": "Dekhae hae",
"revdelete-suppress": "Sysops ke saathe saathe aur sab se data ke suppress karo",
"revdelete-unsuppress": "Pahile jaise karaa gais badlao me se rukawat hatao",
"revdelete-log": "Kaaran:",
@@ -746,6 +798,7 @@
"mergehistory-empty": "Koi badlao ke jorraa nai jaae sake hai.",
"mergehistory-success": "[[:$1]]ke $3 {{PLURAL:$3|badlao|badlao}} ke safalta se [[:$2]] me jorr dewa gais hai.",
"mergehistory-fail": "Itihaas ke nai jorre paaya hae, meharbaani kar ke panna aur time parameters ke check karo.",
+ "mergehistory-fail-toobig": "History merge nai hoe sake, kaaheki limit of $1 {{PLURAL:$1|revision|revisions}} se jaada move hoe jaai.",
"mergehistory-no-source": "Source panna $1 nai hai.",
"mergehistory-no-destination": "Destination panna $1 nai hai.",
"mergehistory-invalid-source": "Suruu waala panna ke must sahi naam hoe ke chaahi.",
@@ -755,7 +808,6 @@
"mergehistory-same-destination": "Suruu aur khatam kare waala panna ek nai hoe sake hai.",
"mergehistory-reason": "Kaaran:",
"mergelog": "Log ke jorro",
- "pagemerge-logentry": "[[$1]] [[$2]] me jorr dewa gais hai ($3 talak ke badlao)",
"revertmerge": "Milawat ke pahile jaise karo",
"mergelogpagetext": "Niche ke suchi me nawaa itihass ke jorr ke suchi hai",
"history-title": "\"$1\" ke sansodhan ke itihaas",
@@ -767,6 +819,8 @@
"showhideselectedversions": "Chuna gae versions ke dekhao/lukao",
"editundo": "Pahile jaise kar do",
"diff-empty": "(ek rakam)",
+ "diff-multi-sameuser": "({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} same sadasya se nai dekhawa gais hae.",
+ "diff-multi-otherusers": "({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} jiske {{PLURAL:$2|sadasya|$2 sadasya}} ke nai dekhawa jae hai)",
"diff-multi-manyusers": "({{PLURAL:$1|Ek biich waala badlao|$1 biich waala badlao}} jiske {{PLURAL:$2|sadasya|$2 sadasya}} se jaada log karin hae, ke nai dekhawa jae hai.)",
"difference-missing-revision": "Ii badlao ($1) {{PLURAL:$2|was|were}} pe {{PLURAL:$2|One revision|$2 revisions}} nai pawa gais hae\nIske kaaran ii hoe sake hae ki ek mitawa gais panna se link karaa jaawe hae.\nIske baare me aur jaankari [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] me paawa jaae sake hae.",
"searchresults": "Khoj ke natija",
@@ -781,7 +835,7 @@
"shown-title": "Ek panna me $1 {{PLURAL:$1|result|results}} dekhao",
"viewprevnext": "Dekho ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''Ii wiki me \"[[$1]]\" naam ke panna hai'''",
- "searchmenu-new": "'''Ii wiki me \"[[:$1]]\" panna ke banao!'''",
+ "searchmenu-new": "<strong>Ii wiki me \"[[:$1]]\" panna ke banao!</strong>{{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
"searchprofile-articles": "Content panna",
"searchprofile-images": "Multimedia",
"searchprofile-everything": "Sab chij",
@@ -794,6 +848,8 @@
"search-result-category-size": " {{PLURAL:$1|1 sadasya|$1 sadasya}} ({{PLURAL:$2|1 chhota vibhag|$2 chhota vibhag}}, {{PLURAL:$3|1 file|$3 files}})",
"search-redirect": "(redirect $1)",
"search-section": "(section $1)",
+ "search-category": "(category $1)",
+ "search-file-match": "(file content ke match kare hae)",
"search-suggest": "Ka aap ke matlab rahaa: $1",
"search-interwiki-caption": "Saathe ke project",
"search-interwiki-default": "$1 ke result:",
@@ -802,19 +858,22 @@
"searchrelated": "sambhand rakkhe hai",
"searchall": "sab",
"showingresults": "Niche dekhae hai {{PLURAL:$1|'''1''' result|'''$1''' results}} #'''$2''' se suruu hoe ke.",
- "showingresultsheader": "{{PLURAL:$5|Natija '''$1''' of '''$3'''|Natija '''$1 - $2''' of '''$3'''}} '''$4''' khatir",
+ "showingresultsinrange": "Niche dekhae hai {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} #<strong>$2</strong> se suruu hoe ke #<strong>$3</strong> talak.",
+ "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}}",
"search-nonefound": "Ii sawaal ke koi jawab nai hae.",
"powersearch-legend": "Gahira khoj",
"powersearch-ns": "Namespaces me khojo:",
"powersearch-togglelabel": "Check karo:",
"powersearch-toggleall": "Sab",
"powersearch-togglenone": "Koi bhi nai",
+ "powersearch-remember": "Aage ke khoj ke khatir selection ke yaad karo",
"search-external": "Bahaari khoj",
"searchdisabled": "{{SITENAME}} me abhi khoje ke anumati nai hai.\nAap tab tak Google se khoje sakta hai.\nYaad rakhna ki uu log ke {{SITENAME}} ke index saait purana hoi.",
"search-error": "Khoje ke tim ek error hoe gais hae:$1",
"preferences": "Pasand",
"mypreferences": "Pasand",
"prefs-edits": "Badlao ke number:",
+ "prefsnologintext2": "Aapan preferences ke badle ke khatir login ho.",
"prefs-skin": "Skin",
"skin-preview": "Jhalak",
"datedefault": "Koi pasand nai",
@@ -823,6 +882,11 @@
"prefs-personal": "Sadasya ke profile",
"prefs-rc": "Nawaa badlao",
"prefs-watchlist": "Dhyan suchi",
+ "prefs-editwatchlist": "Dhyan suchi ke badlo",
+ "prefs-editwatchlist-label": "Dhyan suchi ke entries ke badlo",
+ "prefs-editwatchlist-edit": "Dhyan suchi me title ke dekho aur hatao",
+ "prefs-editwatchlist-raw": "Raw dhyan suchi ke badlo",
+ "prefs-editwatchlist-clear": "Aapan dhyan suchi ke clear karo",
"prefs-watchlist-days": "Dhyan suchi me ketna roj dekhawa jaae:",
"prefs-watchlist-days-max": "Jaada se jaada $1 {{PLURAL:$1|din|din}}",
"prefs-watchlist-edits": "Barraa dhyan suchi me jaada se jaada ketna badlao dekhawa jaae:",
@@ -890,7 +954,7 @@
"gender-unknown": "Ham bole nai mangtaa hae",
"gender-male": "Uu wiki panna ke badle hae",
"gender-female": "Uu wiki panna ke badle hae",
- "prefs-help-gender": "Optional: used for gender-correct addressing by the software. This information will be public.",
+ "prefs-help-gender": "Ii preference ke set karna optional hae.\nSoftware aapan value ke use kar ke aap ke address kare hae aur aap ke ke bare me duusre ke batae hae, right grammar use kar ke\nIi jaankari janata ke dekhai.",
"email": "E-mail",
"prefs-help-realname": "Asli naam ke jaruri nai hai lekin agar jo aap aapan naam diya hai to iske aap ke kaam ke pahachane khatir kaam me lawa jai.",
"prefs-help-email": "E-mail address ke jaruri nai hai, lekin isse nawaa password aap ke lage bheja jaae sake hai agar aap aapan password bhul gaya tab.",
@@ -913,6 +977,8 @@
"prefs-tokenwatchlist": "Chinh (token)",
"prefs-diffs": "Farka",
"prefs-help-prefershttps": "Aap ke agla login pe ii preferences effect me aai.",
+ "prefswarning-warning": "Aap aapan preferences ke badla hae, jiske abhi talak save nai karaa gae hae.\nAgar aap ii panna ke bina \"$1\" me click kare chhorra, tab aap ke preferences save nai hoi.",
+ "prefs-tabs-navigation-hint": "Tip: Aap left aur right arrow key use kar ke tab list me navigate kare saktaa hae.",
"email-address-validity-valid": "E-mail address kanuni hae",
"email-address-validity-invalid": "Ek kanuni e-mail ke likho",
"userrights": "Sadasya ke adhikaar ke chalao",
@@ -929,10 +995,10 @@
"userrights-no-interwiki": "Aap ke duusra wiki me user rights ke badle ke adhikaar nai hai.",
"userrights-nodatabase": "Database $1 abhi hai nai, nai to local nai hai.",
"userrights-nologin": "Sadasya ke user rights de ke khatir, ap ke chaahi ki aap [[Special:UserLogin|log in]] karo ek administrator ke account se.",
- "userrights-notallowed": "Aap ke account ke user rights de aur hatae ke adhikar nai hai.",
+ "userrights-notallowed": "Aap ke lage user rights de aur hatae ke adhikar nai hae.",
"userrights-changeable-col": "Groups jiske aap badle sakta hai",
"userrights-unchangeable-col": "Groups jiske aap badle nai sakta hai",
- "userrights-conflict": "User right me conflict hae. Meharbaani kar ke aapan balao ke fir se apply karo.",
+ "userrights-conflict": "User right me conflict hae! Meharbaani kar ke aapan badlao ke fir se review aur confirm karo.",
"userrights-removed-self": "App appan ijaajat ke hatae dia hae. Iske natija ii hoi ki app ii panna ke ab nai access kare sakegaa",
"group": "Jhund:",
"group-user": "Sadasya",
@@ -963,6 +1029,7 @@
"right-move": "Panna ke naam badlo",
"right-move-subpages": "Panna aur uske subpanna ke naam badlo",
"right-move-rootuserpages": "Root sadasya ke panna ke naam badlo",
+ "right-move-categorypages": "Category panna ke hatao",
"right-movefile": "File ke naam badlo",
"right-suppressredirect": "Panna ke naam badalte ke time, purana naam se redirect ke nai banao.",
"right-upload": "File ke upload karo",
@@ -984,7 +1051,8 @@
"right-deletedtext": "Mitawa gais text aur mitawa gais badlao ke biich waala badlao ke dekho",
"right-browsearchive": "Mitawa gais panna ke khojo",
"right-undelete": "Ek panna ke undelete karo",
- "right-suppressrevision": "Review and restore revisions hidden from Sysops",
+ "right-suppressrevision": "Koi bhi sadasya ke koi bhi panna ke khaas badlao ke dekho, lukao aur dekhao",
+ "right-viewsuppressed": "Uu badlao ke dekho jon ki koi sadasya ke nai dekhae hae",
"right-suppressionlog": "Private logs ke dekho",
"right-block": "Duusra sadasya ke badle se roko",
"right-blockemail": "Sadasya ke email bheje se roko",
@@ -995,6 +1063,7 @@
"right-protect": "Protection level ke badlo aur cascade-protected panna ke badlo",
"right-editprotected": "Badla gais panna ke \"{{int:protect-level-sysop}}\" ke rakam bachawa gais hae",
"right-editsemiprotected": "Badla gais panna ke \"{{int:protect-level-autoconfirmed}}\" ke rakam bachawa gais hae",
+ "right-editcontentmodel": "Panna ke content model ke badlo",
"right-editinterface": "User interface ke badlo",
"right-editusercssjs": "Duusra sadsya ke CSS aur JS files ke badlo",
"right-editusercss": "Duusra sadsya ke CSS files ke badlo",
@@ -1022,6 +1091,7 @@
"right-override-export-depth": "Panna aur jurra panna, 5 ke gahirrai talak, ke export karo",
"right-sendemail": "Duusra sadasya ke lage e-mail bhejo",
"right-passwordreset": "Password ke badle waala e-mail ke dekho",
+ "right-managechangetags": "Database se banao aur mitao [[Special:Tags|tags]]",
"newuserlogpage": "Sadasya ke banae waala log",
"newuserlogpagetext": "Ii sadasya ke banae waala log hai.",
"rightslog": "Sadasya adhikar suchi",
@@ -1031,10 +1101,12 @@
"action-createpage": "panna banao",
"action-createtalk": "salah waala panna banao",
"action-createaccount": "ii user account ke banao",
+ "action-history": "ii panna ke itihass ke dekho",
"action-minoredit": "ii badlao ke chhota mark karo",
"action-move": "ii panna ke naam badlo",
"action-move-subpages": "ii panna, aur iske subpanna ke naam badal do",
"action-move-rootuserpages": "root sadasya panna ke naam badlo",
+ "action-move-categorypages": "Category panna ke hatao.",
"action-movefile": "ii file ke naam badlo",
"action-upload": "ii file ke upload karo",
"action-reupload": "ii file ke uppar se likh do",
@@ -1051,8 +1123,8 @@
"action-block": "ii sadasya ke panna badle se roko",
"action-protect": "ii panna ke protection levels ke badlo",
"action-rollback": "jaldi se pichhla sadasya, jon ki koi panna ke badlis rahaa, ke badlao ke pahile jaise kar do",
- "action-import": "duusra wiki me se ii panna ke import karo",
- "action-importupload": "ek file upload se ii panna ke import karo",
+ "action-import": "duusra wiki me se panna ke import karo",
+ "action-importupload": "ek file upload se panna ke import karo",
"action-patrol": "duusra jan ke badlao pe pahraa do",
"action-autopatrol": "aapan badlao pe pahraa do",
"action-unwatchedpages": "unwatched panna ke suchi dekho",
@@ -1065,7 +1137,11 @@
"action-viewmywatchlist": "Aapan dhyan suchi ke dekho",
"action-viewmyprivateinfo": "Aapan private jaankari ke dekho",
"action-editmyprivateinfo": "Aapan private jaankari ke badlo",
+ "action-editcontentmodel": "ek panna ke content model ke badlo",
+ "action-managechangetags": "database se tags ke banao aur mitao",
"nchanges": "$1 {{PLURAL:$1|badlao|badlao}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|last time dekhe ke baad}}",
+ "enhancedrc-history": "itihaas",
"recentchanges": "Nawaa badlao",
"recentchanges-legend": "Nawaa badlao options",
"recentchanges-summary": "Wiki me ii panna ke nawaa badlao pe dhyan rakho.",
@@ -1075,15 +1151,29 @@
"recentchanges-label-minor": "Ii ek chhota badlao hae",
"recentchanges-label-bot": "Ii badlao ke ek bot karis hae",
"recentchanges-label-unpatrolled": "Ii badlao pe abhi pahraa nai dewa gais hae.",
- "recentchanges-legend-newpage": "$1 - nawaa panna",
- "rcnotefrom": "Niche '''$2''' se badlao hai ('''$1''' tak )",
+ "recentchanges-label-plusminus": "Panna ke size etna bytes se badla",
+ "recentchanges-legend-heading": "'''Legend:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aur dekho [[Special:NewPages|nawaa panna ke suchi]])",
+ "rcnotefrom": "Niche {{PLURAL:$5|badlao hae|badlao hae}} <strong>$3, $4</strong> (<strong>$1</strong> talak dekhawa gais) talak.",
"rclistfrom": "$3 $2 se suruu kar ke nawaa badlao dekhao",
"rcshowhideminor": "$1 chhota badlao",
+ "rcshowhideminor-show": "Dekhao",
+ "rcshowhideminor-hide": "Lukao",
"rcshowhidebots": "$1 bots",
- "rcshowhideliu": "$1 logged-in sadasya",
+ "rcshowhidebots-show": "Dekhao",
+ "rcshowhidebots-hide": "Lukao",
+ "rcshowhideliu": "$1 registered sadasya",
+ "rcshowhideliu-show": "Dekhao",
+ "rcshowhideliu-hide": "Lukao",
"rcshowhideanons": "$1 bina naam ke sadasya",
+ "rcshowhideanons-show": "Dekhao",
+ "rcshowhideanons-hide": "Lukao",
"rcshowhidepatr": "$1 pahra dewa gae sampadan",
+ "rcshowhidepatr-show": "Dekhao",
+ "rcshowhidepatr-hide": "Lukao",
"rcshowhidemine": "$1 hamaar sampadan",
+ "rcshowhidemine-show": "Dekhao",
+ "rcshowhidemine-hide": "Lukao",
"rclinks": "Pichhla $1 badlao pichle $2 din me dekhao <br />$3",
"diff": "farka",
"hist": "itihaas",
@@ -1097,7 +1187,7 @@
"rc_categories_any": "Koi bhi",
"rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} badlao ke baad",
"newsectionsummary": "/* $1 */ nawaa vibhag",
- "rc-enhanced-expand": "Details dekhao (JavaScript jaruri hai)",
+ "rc-enhanced-expand": "Details dekhao",
"rc-enhanced-hide": "Details ke lukao",
"rc-old-title": "Sab se pahile \"$1\" ke naam ke niche banawa gais rahaa",
"recentchangeslinked": "Panna ke jurraa badlao",
@@ -1118,9 +1208,9 @@
"uploaderror": "Upload nai hoe paais hai",
"upload-recreate-warning": "\"'Chetauni: Ii naam ke file ke mitae dewa gais rahaa, nai to naam badla gais rahaa.\"'\nHian pe mitae waala suchi aur naam badle waala suchi ke aap ke dekhe ke khatir dewa gais hae:",
"uploadtext": "Niche waala form ke use kar ke file upload karo.\nPahile upload karaa file ke dekhe khatir [[Special:FileList|list of uploaded files]] jao, (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].\n\nTo include a file in a page, use a link in one of the following forms:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' to use the full version of the file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' for directly linking to the file without displaying the file",
- "upload-permitted": "File types jiske ijajat hai: $1.",
- "upload-preferred": "Kon rakam ke file ke mangtaa hai: $1.",
- "upload-prohibited": "Ii rakam ke file ke upload nai karaa jaae sake hai: $1.",
+ "upload-permitted": "Permitted file {{PLURAL:$2|type|types}}: $1.",
+ "upload-preferred": "Preferred file {{PLURAL:$2|type|types}}: $1.",
+ "upload-prohibited": "Prohibited file {{PLURAL:$2|type|types}}: $1.",
"uploadlogpage": "Suchi ke upload karo",
"uploadlogpagetext": "Niche ke list me haali ke uplaod karaa gae file ke suchi hai.\nVisual overview ke khatir [[Special:NewFiles|nawaa file ke gallery]] ke dekho.",
"filename": "Filename",
@@ -1156,15 +1246,16 @@
"largefileserver": "Ii file, jetna ki server allow kare hai, se barraa hai.",
"emptyfile": "Jon file aap upload karaa rahaa uu khaali rahaa.\nIi saait file ke naam likhe me typing mistake ke kaaran hoi.\nMeharbaani kar ke ii dekho ki aap such me ii file upload kare mangtaa hai ki nai.",
"windows-nonascii-filename": "Ii wiki me password jisme special characters hae, ke kaam me nai lawa jaae sake hae.",
- "fileexists": "Ii naam ke file abhi hai, meharbani kar ke check karo <strong>[[:$1]]</strong> agar jo aap sure nai hai ki aap iske badle mangta hai.\n[[$1|thumb]]",
+ "fileexists": "Ii naam ke file abhi hai, meharbani kar ke check karo <strong>[[:$1]]</strong> agar jo {{GENDER:|aap}} sure nai hai ki aap iske badle mangta hai.\n[[$1|thumb]]",
"filepageexists": "Ii file ke description ke <strong>[[:$1]]</strong> me banae dewa gais rahaa, lekin ii naam ke koi file abhi nai hai.\nAap jon summary likhtaa hai uu panna ke description me nai dekhai.\nDescription ke dekhae ke khatir, aap ke iske manually badle ke parri.\n[[$1|thumb]]",
- "fileexists-extension": "Ii rakam ke naam ke ek aur file hai: [[$2|thumb]]\n* Uploading file ke naam: <strong>[[:$1]]</strong>\n* Abhi ke file ke naam: <strong>[[:$2]]</strong>\nMeharbani kar ke duusra naam chuno.",
+ "fileexists-extension": "Ii rakam ke naam ke ek aur file hai: [[$2|thumb]]\n* Uploading file ke naam: <strong>[[:$1]]</strong>\n* Abhi ke file ke naam: <strong>[[:$2]]</strong>\nKa app aur jaada distinctive naam use kare mangtaa hae?",
"fileexists-thumbnail-yes": "Ii janawe hai ki ii file ek chhota chapa hai ''(thumbnail)''. [[$1|thumb]]\nMeharbani kar ke file ke check karo <strong>[[:$1]]</strong>.\nAgar jo check karaa gais file wahi chhapa ke original size hai tab ek aur thumbnail ke upload kare ke jaruri nai hai.",
"file-thumbnail-no": "File ke naam <strong>$1</strong> se suruu hoe hai.\nIi janawe hai ki ii chhota size ke chapa hai ''(thumbnail)''.\nAgar jo aap ke lage ii chapa full resolution me hai tab uske upload karna, nai to file ke naam badlo.",
"fileexists-forbidden": "Ii naam ke file abhi hai, aur iske badlawa nai jaae sake hai.\nAgar jo aap fir bhi aapan file ke upload kare mangta hai, tab pichhe jaae ke nawaa naam use karo. [[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "Ii naam ke file abhi shared file repository me hai.\nAgar jo aap fir bhi aapan file upload kare manta hai tab pichhe jaae ke nawaa naam use karo. [[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "Ii file following file ke duplicate hai {{PLURAL:$1|file|files}}:",
"file-deleted-duplicate": "Yahii rakam ke ek aur file ([[:$1]]) ke pahile delete karaa gais hai. Aap ke file ke deletion history ke check kare ke chaahi, upload kare se pahile.",
+ "file-deleted-duplicate-notitle": "Ii rakam ke ek file ke pahile delete karaa gais rahaa, aur iske title ke suppress karaa gais hae. Aap ke aisan koi jan, jiske lake suppressed data dekhe ke adhikar har, se situation ke review karae ke baad file ke upload kare ke chaahi.",
"uploadwarning": "Upload ke baare me chetauni",
"uploadwarning-text": "Meharbani kar ke file ke baaare me aur jankari ke niche badal ke aur fir se kosis karo.",
"savefile": "File ke save karo",
@@ -1173,6 +1264,8 @@
"uploaddisabledtext": "File uploads ke disable kar dewa gais hai.",
"php-uploaddisabledtext": "File uploads ke PHP me disable kar dewa gais hai. Meharbani kar ke file_uploads setting ke check karo.",
"uploadscripted": "Ii file me HTML nai to script code hai jiske web browser erroneously interpret kare sake hai.",
+ "uploadscriptednamespace": "Ii SVG file me illegal namespace \"$1\" hae.",
+ "uploadinvalidxml": "Upload karaa gais file ke XML ke parse nai karaa jaae sake hae.",
"uploadvirus": "Ii file me virus hai! Details: $1",
"uploadjava": "Ii file ek ZIP file hae jisme Java .class ke file hae.\nJava ke uplaod kare ke anumati nai hae, kaaheki isse kuchh security restrictions ke bypass karaa jaae sake hae.",
"upload-source": "Suruu waala file",
@@ -1273,10 +1366,12 @@
"license": "Licence ke baare me:",
"license-header": "Licence ke baare me",
"nolicense": "Koi bhi selct nai karaa gais hai",
+ "licenses-edit": "License options ke badlo",
"license-nopreview": "(Preview abhi taiyaar nai hai)",
- "upload_source_url": " (ek valid, publicly accessible URL)",
- "upload_source_file": " (aap ke computer me ek file)",
- "listfiles-summary": "Ii khaas panna sab uploaded file ke dekhae hai.\nJab sadasya filter kare hae, tab sadasys ke upload karaa gais sab se nawaa file ke version ke dekhawa jaae hae.",
+ "upload_source_url": "(aap ke choose karaa gais file ek valid, publicly accessible URL se)",
+ "upload_source_file": "(aap ke computer me ke aap ke choose karaa gais file)",
+ "listfiles-delete": "mitao",
+ "listfiles-summary": "Ii khaas panna sab uploaded file ke dekhae hai.",
"listfiles_search_for": "Media ke naam khojo:",
"imgfile": "file",
"listfiles": "Chapa ke suchi",
@@ -1287,6 +1382,10 @@
"listfiles_size": "Naap",
"listfiles_description": "Baare me",
"listfiles_count": "Ketna badlao rahaa",
+ "listfiles-show-all": "Chaapa ke purana version ke include karo",
+ "listfiles-latestversion": "Abhi ke version",
+ "listfiles-latestversion-yes": "Haan",
+ "listfiles-latestversion-no": "Nai",
"file-anchor-link": "File",
"filehist": "File ke itihaas",
"filehist-help": "File ke dekhe khatir, jaise uu time dekhe me lagat rahaa, date/time pe click karo.",
@@ -1345,22 +1444,29 @@
"filedelete-maintenance": "Files jiske ke thora din khatir, maintenance ke time, band kar dewa gais rahaa ke mitawa aur fir se pahile jaise karaa jaawe hae.",
"filedelete-maintenance-title": "File ke mitae nai saktaa hae",
"mimesearch": "MIME khojo",
- "mimesearch-summary": "Ii panna filtering of files for its MIME-type ke enable kare hai.\nInput: contenttype/subtype, e.g. <code>image/jpeg</code>.",
+ "mimesearch-summary": "Ii panna filtering of files for its MIME-type ke enable kare hai.\nInput: contenttype/subtype nai to or contenttype/*, e.g. <code>image/jpeg</code>.",
"mimetype": "MIME ke rakam:",
"download": "download karo",
"unwatchedpages": "Panna jispe dhyan nai rakha gais hai",
"listredirects": "Redirects list karo",
+ "listduplicatedfiles": "File jiske duplicate hae ke suchi",
+ "listduplicatedfiles-summary": "Ii uu file ke suchi hae jisme file ke most recent version duusra file ke duplicate hae. Isme khaali local file ke dekha gais hae.",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]] [[$3|{{PLURAL:$2|a duplicate|$2 duplicates}}]] hae.",
"unusedtemplates": "Bina use bhae templates",
"unusedtemplatestext": "Ii panna {{ns:template}} namespace me uu panna ake suchi de hai jon ki koi duusra panna me nai hai.\nTemplates ke delete kare se pahile duusra links ke bhi check kare ke nai bhulna.",
"unusedtemplateswlh": "duusra jorr",
"randompage": "Koi bhi panna",
"randompage-nopages": "Ii {{PLURAL:$2|namespace|namespaces}} me koi panna nai hae: $1",
+ "randomincategory": "Category me random panna",
+ "randomincategory-invalidcategory": "\"$1\" ek valid category naam nai hae.",
+ "randomincategory-nopages": "[[:Category:$1|$1]] category me koi panna nai hae.",
+ "randomincategory-category": "Vibhag:",
+ "randomincategory-legend": "Category me random panna",
"randomredirect": "Koi bhi jagha redirect karo",
"randomredirect-nopages": "Namespace \"$1\" me koi redirects nai hai.",
"statistics": "Aankrra",
"statistics-header-pages": "Panna ke ankrraa",
"statistics-header-edits": "Statistics ke badlo",
- "statistics-header-views": "Statistics ke dekho",
"statistics-header-users": "Sadasya ke statistics",
"statistics-header-hooks": "Duusra statistics",
"statistics-articles": "Content panna",
@@ -1369,23 +1475,19 @@
"statistics-files": "Upload karaa gais files",
"statistics-edits": "{{SITENAME}} ke suruu hoe se panna ke badlao",
"statistics-edits-average": "Average badlao per panna",
- "statistics-views-total": "Views kul jorr",
- "statistics-views-total-desc": "Jon pana abhi banawa nai gais hae aur khaas panna ke include nai karaa gais hae",
- "statistics-views-peredit": "Views per badlao",
"statistics-users": "Registered [[Special:ListUsers|sadasya]]",
"statistics-users-active": "Active sadasya",
"statistics-users-active-desc": "Sadasya jon ki pichhle {{PLURAL:$1|din|$1 din}} me kuchh karin hai.",
- "statistics-mostpopular": "Sab se jaada dekha gae panna",
"pageswithprop": "Panna, aapan property ke saathe",
"pageswithprop-legend": "Panna, aapan poperty ke saathe",
"pageswithprop-text": "Ii panaa, uu panna ke list kare hae jon ki koi khaas panna ke property ke use kare hae.",
"pageswithprop-prop": "Property ke naam:",
"pageswithprop-submit": "Jaao",
- "pageswithprop-prophidden-long": "lamba text property value hidden ($1 kilobytes)",
- "pageswithprop-prophidden-binary": "binary property ke hidden value ($1 kilobytes)",
+ "pageswithprop-prophidden-long": "lamba text property value hidden ($1)",
+ "pageswithprop-prophidden-binary": "binary property ke lukawal value ($1)",
"doubleredirects": "Dugna redirects",
"doubleredirectstext": "Ii panna uu panna ke suchi de hai jon ki duusra redirect panna pe redirect kare hai.\nSab row me pahila aur duusra redirect ke jorr hae, aur isme duusra redirect ke nisana bhi hae, jon ki jaada kar ke \"aslii\" nisana waala panna, jon ki pahila redirect ke dekhae hae.\n<del>Mitawa gais</del> entires ke solve kar dewa gais hae.",
- "double-redirect-fixed-move": "[[$1]] ke naam badal dewa gais hai, ab ii [[$2]] pe redirect kare hai",
+ "double-redirect-fixed-move": "[[$1]] ke naam badal dewa gais hai.\nIske automatically update karaa gais hae aur ab ii [[$2]] pe redirect kare hae.",
"double-redirect-fixed-maintenance": "[[$1]] se [[$2]] ke double redirect ke sudhartaa hae.",
"double-redirect-fixer": "Redirect ke banae waala",
"brokenredirects": "Tuuta redirects",
@@ -1402,6 +1504,7 @@
"ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
"nlinks": "$1 {{PLURAL:$1|jorr|jorr}}",
"nmembers": "$1 {{PLURAL:$1|sadasya|sadasya}}",
+ "nmemberschanged": "$1 → $2{{PLURAL:$2|sadasya|sadasya}}",
"nrevisions": "$1 {{PLURAL:$1|badlao|badlao}}",
"nviews": "$1 {{PLURAL:$1|dafe dekha gais hai|dafe dekha gais hai}}",
"nimagelinks": "$1 {{PLURAL:$1|panna|panna}} me kaam me lawa gais hae",
@@ -1415,17 +1518,19 @@
"uncategorizedtemplates": "Bina categorise karaa gais template",
"unusedcategories": "Bina use bhae category",
"unusedimages": "Bina use bhae files",
- "popularpages": "Popular panna",
"wantedcategories": "Maange waala vibhag",
"wantedpages": "Jaruri panna",
+ "wantedpages-summary": "List of non-existing pages with the most links to them, excluding pages which only have redirects linking to them. For a list of non-existent pages that have redirects linking to them, see [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Result set me kharaa title hai: $1",
"wantedfiles": "Maange waala files",
"wantedfiletext-cat": "Niche likha gais file ke kaam me lawa gais hae lekin ii Wikipedia me nai hae. Ii Wikipedia me file rahe par bhi foreign repositories ke file ke list karaa jaae sake hae. Aisan koi galat positives ke <del>mitae dewa jaai</del>. Aur, uu panna jon ki non-existent files ke embed kare hae ke [[:$1]] me list karaa gais hae.",
+ "wantedfiletext-cat-noforeign": "Ii sab file ke use karaa gais hae lekin exist nai hoe hae. Aur, panna jisme waisan file embed karaa gais hae jon ki exist nai hoe hae ke suchi [[:$1]] me hae.",
"wantedfiletext-nocat": "Niche likha gais file ke kaam me lawa gais hae lekin ii Wikipedia me nai hae. Ii Wikipedia me file rahe par bhi foreign repositories ke file ke list karaa jaae sake hae. Aisan koi galat positives ke <del>mitae dewa jaai</del>.",
+ "wantedfiletext-nocat-noforeign": "Ii sab file ke use karaa gais hae lekin exist nai hae hae.",
"wantedtemplates": "Maange waala templates",
"mostlinked": "Jon panna me sab se jaada chij jorra hai",
"mostlinkedcategories": "Jon vibhag me sab se jaada chij jorra hai",
- "mostlinkedtemplates": "Jon template me sab se jaada fike jorra hai",
+ "mostlinkedtemplates": "Sab se jaada transcluded panna",
"mostcategories": "Sab se jaada vibhag waala panna",
"mostimages": "Jon file me sab se jaada file jorra hai",
"mostinterwikis": "Panna jisme sab se dher interwikis hae",
@@ -1439,13 +1544,25 @@
"deadendpagestext": "Niche ke panna {{SITENAME}} ke koi bhi panna se nai jurre hai.",
"protectedpages": "Surakchhit panna",
"protectedpages-indef": "Khaali indefinite bachao",
+ "protectedpages-summary": "Ii panna me uu panna ke suchi hae jon ki abhi protected hae. Uu title ke suchi jon ki creation se protected hae ke dekhe ke khatir [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] ke dekho.",
"protectedpages-cascade": "Khaali cascading bachao",
+ "protectedpages-noredirect": "Redirects lukao",
"protectedpagesempty": "Ii parameters se koi bhi panna ke nai bachawa gais hai.",
+ "protectedpages-timestamp": "Timestamp",
+ "protectedpages-page": "Panna",
+ "protectedpages-expiry": "Khalaas hoe hae",
+ "protectedpages-performer": "Sadasya ke bachawa jaae hae",
+ "protectedpages-params": "Protection parameters",
+ "protectedpages-reason": "Kaaran",
+ "protectedpages-unknown-timestamp": "Nai maluum",
+ "protectedpages-unknown-performer": "Unknown sadasya",
"protectedtitles": "Bachawa gais titles",
+ "protectedtitles-summary": "Ii panna uu title ke list kare hae jon ki creation se protected hae. Protected panna ke suchi dekhe ke khatir \n[[{{#special:ProtectedPages}}|{{int:protectedpages}}]] ke dekho.",
"protectedtitlesempty": "Ii parameters se koi bhi title ke nai bacawa gais hai.",
"listusers": "Sadasya ke suchi",
"listusers-editsonly": "Khaali uu sadasya ke dekhao jon ki koi badlao karis hai",
"listusers-creationsort": "Banawa gais tarik se sort karo",
+ "listusers-desc": "Descending order me sort karo",
"usereditcount": "$1 {{PLURAL:$1|badlao|badlao}}",
"usercreated": "{{GENDER:$3|Banawa gais hae}} $1 pe $2 me",
"newpages": "Nawaa panna",
@@ -1463,9 +1580,11 @@
"pager-older-n": "{{PLURAL:$1|purana 1|purana $1}}",
"suppress": "Oversight",
"querypage-disabled": "Ii khaas panna ke performance kaaran se disable kar drwa gais hae.",
+ "apihelp": "API madat",
+ "apihelp-no-such-module": "Module \"$1\" ke paawa nai gais hae.",
"booksources": "Pustak sources",
"booksources-search-legend": "Book sources ke khojo",
- "booksources-go": "Jao",
+ "booksources-search": "Khojo",
"booksources-text": "Niche ke suchi me uu websites ke jorr hai jon ki nawaa aur use karaa gais book ke beche hai aur jon book ke aap khojtaa hai uske baare aur jaankari de sake hai:",
"booksources-invalid-isbn": "Dewa gais ISBN thiik nai hai; iske purana jagha se copy kare ke time ke error ke check karo.",
"specialloguserlabel": "Sadasya:",
@@ -1532,6 +1651,23 @@
"listgrouprights-removegroup-self": "{{PLURAL:$2|group|groups}} ke aapan account se hatae saktaa hai: $1",
"listgrouprights-addgroup-self-all": "Sab group ke aapan account me jorre saktaa hai",
"listgrouprights-removegroup-self-all": "Sab group ke aapan account se hatae saktaa hai",
+ "listgrouprights-namespaceprotection-header": "Namespace restrictions",
+ "listgrouprights-namespaceprotection-namespace": "Namespace:",
+ "listgrouprights-namespaceprotection-restrictedto": "Adhikar jon ki sadasya ke badlao kare de hae.",
+ "trackingcategories": "Vibhag ke track karaa jaawe hae",
+ "trackingcategories-summary": "Ii panna me tracking vibhag ke suchi hae, jiske MediaWiki software automatically populate kare hae. Iske naam can be changed by altering the relevant system messages in the {{ns:8}} namespace.",
+ "trackingcategories-msg": "Tracking category",
+ "trackingcategories-name": "Sandes ke naam",
+ "trackingcategories-desc": "Category inclusion ke criteria",
+ "noindex-category-desc": "Ii panna ke robots nai index karis hae kaheki ispe magic word <code><nowiki>__NOINDEX__</nowiki></code> hae aur ii uu namespace me hae jisme uu flag allowed nai hae.",
+ "index-category-desc": "Ii panna me <code><nowiki>__INDEX__</nowiki></code> hae(aur ii uu namespace me hae jahaan pe flag allowed haeand), tab iske robots se index karaa gais hae where it normally wouldn't be.",
+ "post-expand-template-inclusion-category-desc": "Ii panna ke size <code>$wgMaxArticleSize</code> se barraa hae after expanding all the templates, so some templates were not expanded.",
+ "post-expand-template-argument-category-desc": "Ii panna <code>$wgMaxArticleSize</code> se barraa hae after expanding a template argument (something in triple braces, like <code>{{{Foo}}}</code>).",
+ "expensive-parserfunction-category-desc": "Ii panna dher expensive parser functions (jaise ki <code>#ifexist</code>) ke use kare hae. See [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "Ii panna me tuuta file link hae(a link to embed a file when the file does not exist).",
+ "hidden-category-category-desc": "Ii category me <code><nowiki>__HIDDENCAT__</nowiki></code> iske content panna me hae, which prevents it from showing up in the category links box on pages by default.",
+ "trackingcategories-nodesc": "Koi description nai he",
+ "trackingcategories-disabled": "Category ke disable kar dewa gais hae.",
"mailnologin": "Koi bheje waala address nai hai",
"mailnologintext": "Duusra logan ke lage e-mail bheje ke khatir aap ke [[Special:UserLogin|logged in]] aur [[Special:Preferences|preferences]] me thik e-mail hoew ke chaahi.",
"emailuser": "Ii user ke E-mail karo",
@@ -1566,12 +1702,14 @@
"mywatchlist": "Dhyaan suchi",
"watchlistfor2": "$1 $2 ke khatir",
"nowatchlist": "Aap ke dhyan suchi me koi chij nai hai.",
- "watchlistanontext": "Aapan dhyan suchi me ke dekhe nai to badle ke khatir meharbani kar ke $1 karo.",
+ "watchlistanontext": "Aapan dhyan suchi me ke dekhe nai to badle ke khatir meharbani kar ke log in karo.",
"watchnologin": "Logged in nai hai",
"addwatch": "Dhyan suchi me jorro",
"addedwatchtext": "Panna \"[[:$1]]\" ke aap ke [[Special:Watchlist|watchlist]] me jorr dewa gais hae.\nIi panna ke aage ke badlao aur usse jurra baat waala panna ki suchi hian pe hae.",
+ "addedwatchtext-short": "Panna \"$1\" ke aap ke watchlist me jorraa gais hae.",
"removewatch": "Dhyan suchi me se hatao",
"removedwatchtext": "Panna \"[[:$1]]\" ke aap ke [[Special:Watchlist|aap ke dhyan suchi]] se hatae dewa gais hai.",
+ "removedwatchtext-short": "Panna \"$1\" ke aap ke watchlist me se hataawa gais hae.",
"watch": "Dekho",
"watchthispage": "Ii panna par dhyan rakho",
"unwatch": "Nai dhyaan rakho",
@@ -1581,8 +1719,8 @@
"watchlist-details": "{{PLURAL:$1|$1 panna|$1 panna}} pe dhyan dewa jae hai, baat waala panna ke chhorr ke.",
"wlheader-enotif": "E-mail notification ke enable kar dewa gais hai.",
"wlheader-showupdated": "Panna jiske aap ke pichhla visit ke ke baad badal dewa gais hia ke '''bold''' me dekhawa jaawe hai.",
- "wlnote": "Niche ke {{PLURAL:$1|pahile waala badlao hai| pahile '''$1''' badlao hai}} pichhle {{PLURAL:$2|ghanta|'''$2''' ghanta}} me as of $3, $4..",
- "wlshowlast": "Pichhla $1 ghanta $2 din $3 ke dekhao",
+ "wlnote": "Niche ke {{PLURAL:$1|pahile waala badlao hai| pahile <strong>$1</strong> badlao hai}} pichhle {{PLURAL:$2|ghanta|<strong>$2</strong> ghanta}} me as of $3, $4.",
+ "wlshowlast": "Pichhla $1 ghanta $2 din ke dekhao",
"watchlist-options": "Dhyan suchi ke options",
"watching": "Dekhtaa...",
"unwatching": "Nai dekhtaa...",
@@ -1612,7 +1750,7 @@
"exbeforeblank": "blanking se pahile content rahaa: '$1'",
"delete-confirm": "\"$1\" ke mitao",
"delete-legend": "Mitao",
- "historywarning": "Sawadhan: Jon panna ke aap mitae waala hai ke itihaas hai lagbhag $1 {{PLURAL:$1|badlao|badlao}}:",
+ "historywarning": "<strong>Sawadhan</strong>: Jon panna ke aap mitae waala hai ke itihaas hai $1 {{PLURAL:$1|badlao|badlao}} ke saathe:",
"confirmdeletetext": "Aap ek panna ke uske itihaas ke saathe delete kare waala hai.\nMeharbani kar ke iske confirm karo, ki aap iske consequences ke samajhta hai, aur aap iske [[{{MediaWiki:Policy-url}}|the policy]] ke policy ke niche delete karta hai.",
"actioncomplete": "Action puura hoe gais hai",
"actionfailed": "Action fail hoe gais",
@@ -1624,12 +1762,13 @@
"deletecomment": "Kaaran:",
"deleteotherreason": "Aur/duusra kaaran:",
"deletereasonotherlist": "Duusra kaaran",
- "deletereason-dropdown": "*Sadharan mitae ke kaaran\n** Author ke request\n** Copyright ke violation\n** Vandalism",
+ "deletereason-dropdown": "*Sadharan mitae ke kaaran\n** Spam\n** Vandalism\n** Copyright ke violation\n** Author ke request\n** Tuuta redirect",
"delete-edit-reasonlist": "Mitae ke kaaran ke badlo",
"delete-toobig": "Ii panna ke barraa balao ke itihass hai, $1 se jaada {{PLURAL:$1|revision|revisions}}.\nAisan panna ke mitae pe rok lagawa gais hai so that accidental disruption of {{SITENAME}} ke roka jaae sake hai.",
"delete-warning-toobig": "Ii panna ke lambaa badlao ke itihaas hai, $1 {{PLURAL:$1|revision|revisions}} se jaada.\nIske mitae se {{SITENAME}} me database operations me baadha parri;\nsawadhani se aage barrho.",
+ "deleteprotected": "Aap ii panna ke mitae nai saktaa hae kaaheki iske protect karaa gais hae.",
+ "deleting-backlinks-warning": "'''Chetauni:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Duusra panna]] uu panna se link, nai to transclude kare hae jiske aap delete kare waala hae.",
"rollback": "Pahile jaise kare waala badlao",
- "rollback_short": "Pahile jaise karo",
"rollbacklink": "pahile jaise karo",
"rollbacklinkcount": "$1 {{PLURAL:$1|edit|edits}} ke rollback karo",
"rollbacklinkcount-morethan": "$1 {{PLURAL:$1|edit|edits}} se jaada badlao ke rollback karo",
@@ -1638,7 +1777,7 @@
"alreadyrolled": "[[:$1]] by [[User:$2|$2]] ke pahile jaise nai kare sakta hai. ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\naur koi ii panna ke badal nai to pahile jaise kar diis hai.\n\nIi panna ke pichla badla [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) se rahaa",
"editcomment": "Badlao ke summary rahaa: \"''$1''\".",
"revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ke badlao ke [[User:$1|$1]] ke aakhri badlao ke jaise kar dewa gais hai.",
- "revertpage-nouser": "badlao ke [[User:$1|$1]] ke badlao ke rakam kar dewa gais hae.",
+ "revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}",
"rollback-success": "$1 ke badlao ke pahile jaise kar dewa gais hai;\nbadal ke $2 ke aakhri version kar dewa gais hai.",
"sessionfailure-title": "Session fail hoe gais hae",
"sessionfailure": "Aap ke login session me kuch karrbarr hai.\niske cancel kar dewa gais hai jisse ki koi iisession ke hijack nai kar.\nMeharbani kar ke \"back\" ke press kar ke jon pana se aap aae rahaa ke fir se load karo, tab fir kosis karo.",
@@ -1679,6 +1818,7 @@
"protect-othertime": "Duusra time:",
"protect-othertime-op": "duusra time",
"protect-existing-expiry": "Abhi ke khatam hoe waala time: $3, $2",
+ "protect-existing-expiry-infinity": "Abhi ke expiry time: infinite",
"protect-otherreason": "Duusra/aur kaaran:",
"protect-otherreason-op": "Duusra kaaran:",
"protect-dropdown": "*Bachae ke sadharan kaaran\n** Jaada vandalism\n** Jaada spamming\n** Counter-productive edit warring\n** Jaada traffic waala panna",
@@ -1738,13 +1878,15 @@
"namespace": "Namespace:",
"invert": "Selection ke ulto",
"tooltip-invert": "Cuna gais namespace (and the associated namespace if checked) ke badlao ke lukae ke khatir ii box ke tick karo",
+ "tooltip-whatlinkshere-invert": "Ii bix ke check karo, to hide links from pages within the selected namespace.",
"namespace_association": "Associated namespace",
"tooltip-namespace_association": "Chuna gais panna ke baat waala panna, nai to, subject namespace ke include kare ke khatir, ii box ke tick karo",
"blanknamespace": "(Pahila)",
"contributions": "{{GENDER:$1|Sadasya}} ke yogdaan",
"contributions-title": "$1 ke yogdaan",
"mycontris": "Yogdaan",
- "contribsub2": "$1 ($2) ke khatir",
+ "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)",
"month": "Mahina se (aur pahile):",
@@ -1753,6 +1895,7 @@
"sp-contributions-newbies-sub": "Nawaa account khatir",
"sp-contributions-newbies-title": "Nawaa account ke sadasya ke yogdaan",
"sp-contributions-blocklog": "Suchi roko",
+ "sp-contributions-suppresslog": "Sadasya ke yogdaan jiske suppress karaa gais hae",
"sp-contributions-deleted": "Mitawa gais adasya ke yogdaan",
"sp-contributions-uploads": "upload karaa gais file",
"sp-contributions-logs": "logs",
@@ -1763,6 +1906,7 @@
"sp-contributions-search": "Yogdaan ke khojo",
"sp-contributions-username": "IP Address nai to username:",
"sp-contributions-toponly": "Khaali sab se nawaa badlao ke dekhao",
+ "sp-contributions-newonly": "Khaali uu badlao ke dekhao jon ke panna banae waala hae",
"sp-contributions-submit": "Khojo",
"whatlinkshere": "Hian konchij jurre hae",
"whatlinkshere-title": "Panna jon ki $1 se jurre hai",
@@ -1784,7 +1928,7 @@
"autoblockid": "#$1 ke apne se block karo",
"block": "Sadasya ke roko",
"unblock": "Sadasya ke rukawat k khalaas karo",
- "blockip": "Sadasya ke roko",
+ "blockip": "{{GENDER:$1|sadasya}} ke roko",
"blockip-legend": "Sadasya ke roko",
"blockiptext": "Niche ke form ke use kar ke koi khaas IP address nai to username ke write access ke roko.\nIske khaali vandalism ke roke ke khatir use kare ke chaahi [[{{MediaWiki:Policy-url}}|policy]] ke niche.\nNiche ek khaas kaaran likho (jaise ki, citing particular pages that were vandalized).",
"ipaddressorusername": "IP Address nai to username:",
@@ -1808,17 +1952,19 @@
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] ke rok dewa gais hai.<br />\nIi rukawat pe fir se bichar kare ke khatir [[Special:BlockList|block list]] ke dekho.",
"ipb-blockingself": "Aap abhi apne ke block kare waala hae! Aap sure hai koi aap ii kare mangtaa hae?",
"ipb-confirmhideuser": "Aap abhi ek sadasya ke \"hide user\" enabled se block kare waala hae. Isse sadasya ke naam ke sab lists aur log entries se hatae dewa jaai. Aap sure hae ki aap ii kare mangtaa hae?",
+ "ipb-confirmaction": "Agar aap sure hae ki aap konchi kare mantaa hae, tab meharbaani kar ke niche \"{{int:ipb-confirm}}\" field ke check karo",
"ipb-edit-dropdown": "Badlao ke roke ke kaaran",
"ipb-unblock-addr": "$1 ke rukawat ke khalaas karo",
"ipb-unblock": "Ek username nai to IP address ke rukawat ke khalaas karo",
"ipb-blocklist": "Abhi ke rukawat ke dekho",
- "ipb-blocklist-contribs": "$1 ke yogdaan",
+ "ipb-blocklist-contribs": "{{GENDER:$1|$1}} ke yogdaan",
"unblockip": "Sadasya ke rukawat ke khalaas karo",
"unblockiptext": "Niche ke form ke use kar ke pahile roka gais IP address nai to username ke likhe ke adhikar do.",
"ipusubmit": "Ii rukawat ke hatao",
"unblocked": "[[User:$1|$1]] ke rukawat ke khalaas kar dewa gais hai",
"unblocked-range": "$1 ke unblock kar dewa gais hae",
"unblocked-id": "Roko $1 ke khalaas kar dewa gais hai",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] ke unblock kar dewa gais hae.",
"blocklist": "Roka gais sadasya",
"ipblocklist": "Roka gais sadasya",
"ipblocklist-legend": "Ek roka gais sadasya ke khojo",
@@ -1849,7 +1995,7 @@
"change-blocklink": "rukawat ke badlo",
"contribslink": "yogdaan",
"emaillink": "E-mail bhejo",
- "autoblocker": "Apne se rokaa gais hai kaahe ki aap ke IP address ke abhi haali \"[[User:$1|$1]]\" use karis hai.\n$1 ke roke ke kaaran hai: \"$2\"",
+ "autoblocker": "Apne ke rokaa gais hai kaaheki aap ke IP address ke abhi haali \"[[User:$1|$1]]\" use karis hai.\n$1 ke roke ke kaaran hai: \"$2\"",
"blocklogpage": "Suchi ke roko",
"blocklog-showlog": "Ii sadasya ke pahile rokaa gais hae.\nRoke waala suchi ke niche dekhawa jaawe hae aap ke jankari ke khatir:",
"blocklog-showsuppresslog": "Ii sadasya ke pahile rokaa aur lukawa gais hae.\nIske suchi ke niche dekhawa jaawe hae aap ke jankari ke khatir.",
@@ -1867,7 +2013,7 @@
"range_block_disabled": "Administrator ke adhikar, jisse range block banawa jaawat rahaa, ke rok dewa gais hai.",
"ipb_expiry_invalid": "Khalaas hoe waala time galat hai.",
"ipb_expiry_temp": "Lukawa gais username ke rukawat ke permanent hoe ke chaahi.",
- "ipb_hide_invalid": "Ii account ke dabae nai sakaa hai; saait bahut jaada badlao hoi.",
+ "ipb_hide_invalid": "Ii account ke dabae nai sakaa hai; saait {{PLURAL:$1|one edit|$1 edits}} se jaada badlao hae.",
"ipb_already_blocked": "\"$1\" ke pahile rok dewa gais hai",
"ipb-needreblock": "$1 ke rok dewa gais hai.\nKa aapp ii settings ke badle mangtaa hai?",
"ipb-otherblocks-header": "Duusra {{PLURAL:$1|block|blocks}}",
@@ -1907,11 +2053,14 @@
"movepagetalktext": "Saathe ke talk panna ke automatically move kar dewa jai ii panna ke saathe '''agar jo:'''\n* khali nahi talk page nawaa naam ke already hai, yah\n* Aap nivhe waala box ke uncheck karo\nIi prastithi me, aap ke manually move yah merge kare ke parri.",
"movearticle": "Panna ke naam badli karo:",
"moveuserpage-warning": " '''Chetauni:''' Aap ek sadasya ke panna ke naam badle waala hae. Ii yaad rakhna ki khaali panna ke naam badla jaai, sadasya ke naam ''nai'' badlaa jaai.",
+ "movecategorypage-warning": "<strong>Chetauni:</strong> Aap ek category panna ke hatae waala hae. Khaali ii panna ke hataawa jaai aur purana category ke aur panna ke nawaa category me <em>nai</em> recategorize karaa jaai.",
"movenologintext": "Panna ke naam badle ke khatir aap ke ek registered sadasya rahe ke parri aur [[Special:UserLogin|logged in]].",
"movenotallowed": "Aap ke panna ke naam badle ke ijajat nai hai.",
"movenotallowedfile": "Aap ke file ke naam badle ke ijajat nai hai.",
"cant-move-user-page": "Aap ke sadasya ke panna ke namm badle ke ijajat nai hai (subpages ke chhorr ke).",
"cant-move-to-user-page": "Aap ke koi panna ke hatae ke sadasya ke panna pe kare ke ijajat nai hai (sadasya ke subpage ke chhorr ke).",
+ "cant-move-category-page": "Aap ke panna ke category panna ke hatae ke ijajat nai hai.",
+ "cant-move-to-category-page": "Aap ke panna ke category panna me hatae ke ijajat nai hai.",
"newtitle": "Nawaa title pe:",
"move-watch": "Ii panna pe dhyan rakho",
"movepagebtn": "Panna ke naam badlo",
@@ -1984,6 +2133,7 @@
"allmessages-prefix": "Prefix se chhaano:",
"allmessages-language": "Bhasa:",
"allmessages-filter-submit": "Jaao",
+ "allmessages-filter-translate": "Translate karo",
"thumbnail-more": "Barraa karo",
"filemissing": "File missing",
"thumbnail_error": "Thumbnail banae me galti hoe gais: $1",
@@ -1993,14 +2143,17 @@
"thumbnail-temp-create": "Temporary thumbnail file ke nai banae sakaa hae",
"thumbnail-dest-create": "Destination ke thumbnail ke bajae nai sakaa hae",
"thumbnail_invalid_params": "Thumbnail ke parameter valid nai hae",
+ "thumbnail_toobigimagearea": "File jiske dimension $1 se jaada hae",
"thumbnail_dest_directory": "Destination directory ke nai banaawe sakaa hae",
"thumbnail_image-type": "Ii rakam ke chapa ke support nai karaa jaawe hai",
"thumbnail_gd-library": "Incomplete GD library configuration: missing function $1",
"thumbnail_image-missing": "Ii naam ke file nai hae: $1",
+ "thumbnail_image-failure-limit": "Ii thumbnail ke render kare ke bahut dher unsuccessful kosis ($1 or more) rahaa. Meharbaani kar ke baad me fir kosis karna.",
"import": "Panna ke import karo",
- "importinterwiki": "Transwiki se ayaat",
- "import-interwiki-text": "Ek wiki aur panna ke title ke select karo.\nBadalo ke tarik aur badle waala sadasya ke naam wahii rakam rahii.\nSab transwiki import actions ke [[Special:Log/import|import log]] pe log karaa jaawe hai.",
- "import-interwiki-source": "Suruu waala wiki/panna:",
+ "importinterwiki": "Duusra wiki se ayaat",
+ "import-interwiki-text": "Ek wiki aur panna ke title ke, import kare ke khatir, select karo.\nBadalo ke tarik aur badle waala sadasya ke naam wahii rakam rahii.\nSab transwiki import actions ke [[Special:Log/import|import log]] pe log karaa jaawe hai.",
+ "import-interwiki-sourcewiki": "Source wiki:",
+ "import-interwiki-sourcepage": "Source panna:",
"import-interwiki-history": "Ii panna ke sab badlao ke itihaas ke copy karo",
"import-interwiki-templates": "Sab template ke include karo",
"import-interwiki-submit": "Import karo",
@@ -2018,41 +2171,39 @@
"importcantopen": "Import file ke khole nai sakaa",
"importbadinterwiki": "Kharaab interwiki jorr",
"importsuccess": "Import khalaas hoe gais hai!",
- "importnosources": "Koi interwiki import source ke define nai karaa gais hai aur direct itihass ke upload ke rok dewa gais hai.",
+ "importnosources": "Koi interwiki import source ke define nai karaa gais hai aur directory itihass ke upload ke rok dewa gais hai.",
"importnofile": "Koi import file ke upload nai karaa gais hai.",
"importuploaderrorsize": "Import file ke upload nai kare sakaa hai.\nIi file ke size allowed upload size se barraa hai.",
"importuploaderrorpartial": "Import file ke upload nai kare sakaa hai.\nIi file ke khaali thora hissa ke upload karaa gais hai.",
"importuploaderrortemp": "Import file ke upload nai kare sakaa hai.\nEk temporary file nai hai.",
"import-parse-failure": "XML import parse fail hoe gais hai",
"import-noarticle": "Koi panna import kare ke nai hai!",
- "import-nonewrevisions": "Sab badlao ke pahile import karaa gais hai.",
+ "import-nonewrevisions": "Koi badalo ke import nai karaa gais hae (sab ke chaahe pahile import karaa gais rahaa, nai to error ke kaaran skip karaa gais rahaa).",
"xml-error-string": "$1 line $2 me, col $3 (byte $4): $5",
"import-upload": "XML data ke upload karo",
"import-token-mismatch": "Loss of session data.\nMeharbani kar ke, fir se kosis karo.",
"import-invalid-interwiki": "Naam dewa gais wiki se import nai kare saktaa hai.",
"import-error-edit": "Panna \"$1\" ke import nai kara gais kaahe ki aap ke badle ke adhikar nai hae.",
"import-error-create": "Panna \"$1\" ke import nai kara gais kaahe ki aap ke panna banae ke adhikar nai hae.",
- "import-error-interwiki": "Panna \"$1\" ke import nai kara gais kaahe ki ii panna ke external linking (interwiki) ke khatir reserve karaa gais hae.",
+ "import-error-interwiki": "Panna \"$1\" ke import nai kara gais kaaheki ii panna ke naam external linking (interwiki) ke khatir reserve karaa gais hae.",
"import-error-special": "Panna \"$1\" ke import nai karaa gais hae kaaheki ii ek khaas namespace hae jisme panna nai banawa jaae sake hae.",
"import-error-invalid": "Panna \"$1\" ke import nai karaa gais hae kaaheki iske naam kharaab hae.",
"import-error-unserialize": "Panna \"$1\" ke $2 badlao ke unserialize kare nai sakaa hae. Ii badlao me content model $3 serialized as $4 ke kaam me lawa gais hae.",
+ "import-error-bad-location": "Badlao $2, jon ki content model $3 ke use kare hae, ke \"$1\" me nai store karaa jaae sake hae, kaaheki uu panna me uu model ke nai support karaa jaae hae.",
"import-options-wrong": "Galat {{PLURAL:$2|option|options}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "Derwa gais root panna ek kharaab title hae",
"import-rootpage-nosubpage": "Root panna ke namespace \"$1\" sub panna ke nai allow kare hae.",
"importlogpage": "Suchi ke import karo",
"importlogpagetext": "Duusra wiki se panna aur badlao ke itihaas ke administrative imports.",
- "import-logentry-upload": "file upload se [[$1]] ke import karaa gais hai",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|badlao|badlao}}",
- "import-logentry-interwiki": "transwikied $1",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|badlao|badlao}} $2 se",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|badlao|badlao}} import karaa gais hae",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|badlao|badlao}} $2 se import karaa gais hae",
"javascripttest": "JavaScript ke testing",
- "javascripttest-title": "$1 tests ke chaalu karaa jaae hae",
"javascripttest-pagetext-noframework": "Ii panna ke JavaScript test ke kare ke khatir reserve karaa gais hae.",
"javascripttest-pagetext-unknownframework": "Anjaan testing framework \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Unknown action \"$1\".",
"javascripttest-pagetext-frameworks": "Meharbaani kar ke ek testing framework ke chuno: $1",
"javascripttest-pagetext-skins": "Test kare ke khatir ek chamrraa ke chuno:",
"javascripttest-qunit-intro": "mediawiki.org me [$1 testing documentation] ke dekho.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
"tooltip-pt-userpage": "Aap ke sadasya panna",
"tooltip-pt-anonuserpage": "IP jisme se aap edit karta hai ke sadasya panna",
"tooltip-pt-mytalk": "Aap ke baat waala panna",
@@ -2062,6 +2213,7 @@
"tooltip-pt-mycontris": "Aap ke yogdaan ke suchi",
"tooltip-pt-login": "Aap log in kartaa tab achchha rahataa; lekin jaruri nai hae.",
"tooltip-pt-logout": "Log out",
+ "tooltip-pt-createaccount": "Aap ke ek account banae ke log in kare ke encourage karaa jaae hae; lekin iske jaruri nai hae",
"tooltip-ca-talk": "Content waala panna ke baare me salah",
"tooltip-ca-edit": "Aap ii panna ke badle sakta hai. Meherbaani kar ke bachae se pahile preview button ke kaam me laana.",
"tooltip-ca-addsection": "Nawaa section suruu karo",
@@ -2091,6 +2243,7 @@
"tooltip-feed-atom": "Ii panna ke khatir atom feed",
"tooltip-t-contributions": "Ii sadasya ke yogdaan ke suchi dekho",
"tooltip-t-emailuser": "Ii user ke lage ek mail bhejo",
+ "tooltip-t-info": "Ii panna ke bare me aur jankari",
"tooltip-t-upload": "File upload karo",
"tooltip-t-specialpages": "Sab khaas panna ke suchi",
"tooltip-t-print": "Ii panna ke chhape waala version",
@@ -2136,6 +2289,7 @@
"spam_reverting": "Pahile waala badalo, jisme $1 se link nai hai, pe karaa jaawe hai",
"spam_blanking": "Sab badlao jisme $1 se jorr hai, ke mitawa jaawe hai",
"spam_deleting": "Sab badlao jisme $1 se jorr hai, ke mitawa jaawe hai",
+ "simpleantispam-label": "Anti-spam check.\nIske fill <strong>NAI</strong> karo!",
"pageinfo-title": "\"$1\" ke khatir jaankari",
"pageinfo-not-current": "Maaf karna, lekin purana badlao ke baare me ii jaankari nai de saktaa hae.",
"pageinfo-header-basic": "Basic jaankari",
@@ -2147,13 +2301,13 @@
"pageinfo-length": "Panna ke lambai (bytes me)",
"pageinfo-article-id": "Panna ke ID",
"pageinfo-language": "Panna ke bhasa",
- "pageinfo-robot-policy": "Search engine ke status",
- "pageinfo-robot-index": "Indexable",
- "pageinfo-robot-noindex": "Indexable nai hae",
- "pageinfo-views": "Ketna dafe dekha gais hae",
+ "pageinfo-content-model": "Page content model",
+ "pageinfo-robot-policy": "Robots se indexing",
+ "pageinfo-robot-index": "Ijajat hae",
+ "pageinfo-robot-noindex": "Ijajat nai hae",
"pageinfo-watchers": "Ketnaa jane panna ke dekhe hae",
"pageinfo-few-watchers": "$1 {{PLURAL:$1|watcher|watchers}} se kamtii log hae",
- "pageinfo-redirects-name": "Ii panna pe redirect karo",
+ "pageinfo-redirects-name": "Ii panna me etna redirect hae",
"pageinfo-subpages-name": "Ii panna ke subpage",
"pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})",
"pageinfo-firstuser": "Panna ke suruu kare waala",
@@ -2214,7 +2368,7 @@
"svg-long-desc": "SVG file, naam kare ke khatir $1 × $2 pixels, file size: $3",
"svg-long-desc-animated": "Animated SVG file, naam kare ke khatir $1 × $2 pixels, file size: $3",
"svg-long-error": "SCG file valid nai hae: $1",
- "show-big-image": "Puura resolution",
+ "show-big-image": "Original file",
"show-big-image-preview": "Ii preview ke size: $1",
"show-big-image-other": "Duusra {{PLURAL:$2|resolution|resolutions}}: $1",
"show-big-image-size": "$1 × $2 pixels",
@@ -2230,6 +2384,7 @@
"newimages-summary": "Ii khaas panna pahile waala upload karaa gais file ke dekhae hai.",
"newimages-legend": "Chaalo",
"newimages-label": "Filename (nai to iske ek hissa):",
+ "newimages-showbots": "Bots se upload dekhawa jaae hae",
"noimages": "Koi chij dekhe ke nai hai.",
"ilsubmit": "Khojo",
"bydate": "tarik se",
@@ -2441,7 +2596,7 @@
"exif-compression-3": "CCITT Group 3 fax ke encoding",
"exif-compression-4": "CCITT Group 4 fax ke encoding",
"exif-copyrighted-true": "Copyright karaa gais hae",
- "exif-copyrighted-false": "Janata ke khatir",
+ "exif-copyrighted-false": "Copyright status ke nai set karaa gais hae",
"exif-unknowndate": "Taarik nai maalum",
"exif-orientation-1": "Saamaan",
"exif-orientation-2": "Baraabar ultawa gais hae",
@@ -2598,7 +2753,6 @@
"exif-urgency-low": "Kamti ($1)",
"exif-urgency-high": "Jaada ($1)",
"exif-urgency-other": "Sadasya-defined priority ($1)",
- "watchlistall2": "sab",
"namespacesall": "sab",
"monthsall": "sab",
"confirmemail": "E-mail address ke pakka karo",
@@ -2634,10 +2788,14 @@
"confirm-watch-top": "Ii panna ke aap ke dhyan suchi me jorro?",
"confirm-unwatch-button": "Thiik hae",
"confirm-unwatch-top": "Ii panna ke aap ke dhyan suchi se hatao?",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← pahile waala panna",
"imgmultipagenext": "aage waala panna →",
"imgmultigo": "Jaao!",
"imgmultigoto": "$1 panna pe jaao",
+ "img-lang-default": "(default bhasa)",
+ "img-lang-info": "Ii chaapa ke $1. $2 me render karo",
+ "img-lang-go": "Jaao",
"ascending_abbrev": "chhota se barraa",
"descending_abbrev": "barraa se chhota",
"table_pager_next": "Aage waala panna",
@@ -2652,6 +2810,7 @@
"autosumm-replace": "Contwnt ke \"$1\" se replace kar dewa gais hae",
"autoredircomment": "Panna ke [[$1]] pe redirect kar dewa gais hae",
"autosumm-new": "Panna jisme \"$1\" hae ke banae dewa gais hae.",
+ "autosumm-newblank": "Blank panna banawa gais hae",
"lag-warn-normal": "$1 {{PLURAL:$1|second|seconds}} se nawaa badlao, saait ii suchi me nai dekhai.",
"lag-warn-high": "Jaada database server lag ke kaaran $1 {{PLURAL:$1|second|seconds}} se nawaa badlao suchi me saait nai dekhaai.",
"watchlistedit-normal-title": "Dhyan suchi ke badlo",
@@ -2661,41 +2820,248 @@
"watchlistedit-normal-done": "{{PLURAL:$1|1 title was|$1 titles were}} dhyan suchi me se hataa gais:",
"watchlistedit-raw-title": "Raw dhyan suchi ke badlo",
"watchlistedit-raw-legend": "Raw dhyan suchi ke badlo",
+ "watchlistedit-raw-explain": "Aap ke watchlist me ke title ke niche dekhawa jaae hae, aur iske list me se jorra aur hatae ke badla jaae sake hae;\nek line per ek title.\nJab khalaas hoe jaae tab \"{{int:Watchlistedit-raw-submit}}\" pe click karo.\nAap[[Special:EditWatchlist|standard editor ke bhi kaam me laae saktaa hae]].",
+ "watchlistedit-raw-titles": "Titles:",
+ "watchlistedit-raw-submit": "Watchlist ke update karo",
+ "watchlistedit-raw-done": "Aap ke watchlist ke update kar dewa gais hae.",
+ "watchlistedit-raw-added": "{{PLURAL:$1|1 title was|$1 titles were}} added:",
+ "watchlistedit-raw-removed": "{{PLURAL:$1|1 title was|$1 titles were}} removed:",
+ "watchlistedit-clear-title": "Watchlist ke clear karaa gais hae",
+ "watchlistedit-clear-legend": "Watchlist ke clear karo",
+ "watchlistedit-clear-explain": "Aap ke watchlist me se sab title ke hatae dewa jaai",
+ "watchlistedit-clear-titles": "Titles:",
+ "watchlistedit-clear-submit": "Watchlist ke clear karo (Ii permanent hae!)",
+ "watchlistedit-clear-done": "Aap ke watchlist ke update kar dewa gais hae.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|1 title was|$1 titles were}} removed:",
+ "watchlistedit-too-many": "Hian pe bahut dher panna ke dekhae ke hae",
+ "watchlisttools-clear": "Watchlist ke clear karo",
"watchlisttools-view": "Jaruri badlao dekho",
"watchlisttools-edit": "Dhyan suchi ke dekho aur badlo",
"watchlisttools-raw": "Dhyan suchi ke apne sampadan karo",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
"duplicate-defaultsort": "'''Chetauni:''' Default sort key \"$2\" pahile ke default sort key \"$1\" ke override kare hae.",
+ "duplicate-displaytitle": "<strong>Chetauni:</strong> Display title \"$2\" pahile ke display title \"$1\" ke override kare hae.",
+ "invalid-indicator-name": "<strong>Error:</strong> Panna status indicators' <code>naam</code> attribute khaali nai rahe sake hae.",
"version": "Badlao",
+ "version-extensions": "Installed extensions",
+ "version-skins": "Installed skins",
"version-specialpages": "Khaas panna",
+ "version-parserhooks": "Parser hooks",
+ "version-variables": "Variables",
+ "version-antispam": "Spam prevention",
"version-other": "Duusra",
+ "version-mediahandlers": "Media handlers",
+ "version-hooks": "Hooks",
+ "version-parser-extensiontags": "Parser extension tags",
+ "version-parser-function-hooks": "Parser function hooks",
+ "version-hook-name": "Hook ke naam",
+ "version-hook-subscribedby": "Se subscribe karaa gais",
+ "version-no-ext-name": "[naam nai hae]",
+ "version-license": "MediaWiki License",
+ "version-ext-license": "License",
+ "version-ext-colheader-name": "Extension",
+ "version-skin-colheader-name": "Skin",
+ "version-ext-colheader-version": "Version",
+ "version-ext-colheader-license": "License",
+ "version-ext-colheader-description": "Baare me",
+ "version-ext-colheader-credits": "Likhe waale",
+ "version-license-title": "$1 ke licence",
+ "version-license-not-found": "Ii extension ke khatir koi detailed license jankari nai paawa gais hae.",
+ "version-credits-title": "$1 ke khatir credit",
+ "version-credits-not-found": "Ii extension ke khatir koi detailed license jankari nai paawa gais hae.",
+ "version-poweredby-credits": "Ii wiki <strong>[https://www.mediawiki.org/ MediaWiki]</strong> se powered hae, copyright © 2001-$1 $2.",
"version-poweredby-others": "duusra waala",
+ "version-poweredby-translators": "translatewiki.net translators",
+ "version-credits-summary": "Ham log ii sab jan ke [[Special:Version|MediaWiki]] me yogdaan ke khatir recognize kartaa hae.",
+ "version-license-info": "Mediawiki free software hae; jiske aap GNU General Public License as published by the Free Software Foundation; ke niche redistribute aur badle saktaa hae. Ii chaahe version 2 of the License, nai to (at your option) koi baad ke version ke apply hoe hae.\n\nMediawiki ii asha se distribute karaa jaawe hae ki ii aap ke kaam me aai, BINA KOI WARRANTY KE. Iske koi implied warranty of MERCHANTABILITY, nai to, FITNESS FOR A PARTICULAR PURPOSE bhi nai hae. Aur jaankari ke khatir GNU General Public License ke dekho.\n\nAapke ii program ke saathe {{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public License] mila hoi. Agar nai mila tab Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, nai to, [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online] ke lage likho.",
+ "version-software": "Installed software",
+ "version-software-product": "Product",
+ "version-software-version": "Version",
+ "version-entrypoints": "Entry point URLs",
+ "version-entrypoints-header-entrypoint": "Entry point",
+ "version-entrypoints-header-url": "URL",
+ "version-libraries": "Installed libraries",
+ "version-libraries-library": "Library",
+ "version-libraries-version": "Version",
+ "redirect": "File, sadasya, panna, nai to, revision ID se redirect",
+ "redirect-legend": "File nai to panna pe redirect karo",
+ "redirect-summary": "Ii khaas panna ek file (given the filename), panna (given a revision ID or page ID), nai to, sadasya ke panna (given a numeric user ID) pe redirect hoe hae. Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
+ "redirect-submit": "Jaao",
+ "redirect-lookup": "Lookup:",
+ "redirect-value": "Value:",
+ "redirect-user": "Sadasya ke ID",
+ "redirect-page": "Sadasya ke ID",
+ "redirect-revision": "Panna ke revision",
+ "redirect-file": "Filename",
+ "redirect-not-exists": "Value ke nai paawa gais hae",
+ "fileduplicatesearch": "Duplicate files ke khojo",
+ "fileduplicatesearch-summary": "Duplicate files based on hash values ke khojo.",
+ "fileduplicatesearch-legend": "Ek duplicate ke khojo",
"fileduplicatesearch-filename": "File ke naam:",
"fileduplicatesearch-submit": "Khojo",
+ "fileduplicatesearch-info": "$1 × $2 pixel<br />File size: $3<br />MIME type: $4",
+ "fileduplicatesearch-result-1": "Ii file \"$1\" ke koi duplication nai hae.",
+ "fileduplicatesearch-result-n": "File \"$1\" me {{PLURAL:$2|1 identical duplication|$2 identical duplications}} hae.",
+ "fileduplicatesearch-noresults": "Koi file jiske naam \"$1\" ke nai paawa gais hae.",
"specialpages": "Khaas panna",
+ "specialpages-note-top": "Legend",
+ "specialpages-note": "* Normal special panna.\n* <span class=\"mw-specialpagerestricted\">Restricted special panna.</span>",
+ "specialpages-group-maintenance": "Maintenance reports",
"specialpages-group-other": "Duusra khaas panna",
"specialpages-group-login": "Login karo/Nawaa account banao",
+ "specialpages-group-changes": "Abhi kuchh din ke badlao aur logs",
+ "specialpages-group-media": "Media reports aur uploads",
+ "specialpages-group-users": "Sadasyya aur rights",
"specialpages-group-highuse": "Jaada kaam me laae waala panna",
"specialpages-group-pages": "Panna ke suchi",
"specialpages-group-pagetools": "Panna ke aujar",
+ "specialpages-group-wiki": "Data aur tools",
+ "specialpages-group-redirects": "Special panna ke redirect karaa jaawe hae",
+ "specialpages-group-spam": "Spam tools",
+ "specialpages-group-developer": "Developer tools",
"blankpage": "Khaali panna",
"intentionallyblankpage": "Ii panna ke jaan ke khaliya chhorraa gais hae.",
"external_image_whitelist": "#Leave this line exactly as it is<pre>\n#Put regular expression fragments (just the part that goes between the //) below\n#These will be matched with the URLs of external (hotlinked) images\n#Those that match will be displayed as images, otherwise only a link to the image will be shown\n#Lines beginning with # are treated as comments\n#This is case-insensitive\n\n# Ii line ke yahii rakam chhorr do<pre>\n#Sab regular expression fragments (wahii hissa jon ki // ke biich me jaawe hae) ke niche rakkho\n#Iske bahaari URLs (hotlinked) chapa se link karaa jaai",
+ "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)",
+ "tags-title": "Tags",
+ "tags-intro": "Ii panna uu tag ke list kare hae jiske software edit with, aur their meaning se mark kare hae.",
+ "tags-tag": "Tag ke naam",
+ "tags-display-header": "Appearance on change lists",
+ "tags-description-header": "Meaning ke puura description",
+ "tags-source-header": "Source",
+ "tags-active-header": "Active?",
+ "tags-hitcount-header": "Tagged changes",
+ "tags-actions-header": "Actions",
+ "tags-active-yes": "Haan",
+ "tags-active-no": "Nai",
+ "tags-source-extension": "Ek extension se define hoe hae",
+ "tags-source-manual": "Sadasya aur bot se manually apply karaa jaawe hae",
+ "tags-source-none": "Ab iske kaam me nai lawa jaae hae",
"tags-edit": "badlo",
+ "tags-delete": "mitao",
+ "tags-activate": "activate karo",
+ "tags-deactivate": "deactivate karo",
"tags-hitcount": "$1 {{PLURAL:$1|badlao|badlao}}",
+ "tags-manage-no-permission": "Aap ke change tags ke manage kare ke ijaajat nai hae.",
+ "tags-create-heading": "Ek nawaa tag ke banao",
+ "tags-create-explanation": "Default se, jon nawaa tag banawa gais hae ke sadasya aur bots ke kaam me laae khatir dewa jaai.",
+ "tags-create-tag-name": "Tag ke naam:",
+ "tags-create-reason": "Kaaran:",
+ "tags-create-submit": "Banao",
+ "tags-create-no-name": "Aap ke ek tag ke naam ke batae ke parri.",
+ "tags-create-invalid-chars": "Tag ke naam me saait comma (<code>,</code>) nai to forward slashes (<code>/</code>) hoi.",
+ "tags-create-invalid-title-chars": "Tag ke naam me aisan characters nai hoe ke chaahi jiske panna ke title me nai kaam me lawa jaae sake hae.",
+ "tags-create-already-exists": "Tag \"$1\" abhi hae.",
+ "tags-create-warnings-above": "Niche ke {{PLURAL:$2|chetauni|chetauni}} you time mila jab tag \"$1\" ke banae ke kosis karaa jaawat rahaa:",
+ "tags-create-warnings-below": "Ka aap tag banate rahe mantaa hae?",
+ "tags-delete-title": "Tag ke delete karo",
+ "tags-delete-explanation-initial": "Aap tag \"$1\" ke database se mitae waala hae.",
+ "tags-delete-explanation-in-use": "Iske {{PLURAL:$2|$2 revision or log entry|all $2 revisions and/or log entries}} se hatae dewa jaai jahaan pe it is currently applied.",
+ "tags-delete-reason": "Kaaran:",
"comparepages": "Panna ke biich me antar dekho",
"compare-page1": "Panna 1",
"compare-page2": "Panna 2",
"compare-rev1": "Badlao 1",
"compare-rev2": "Badlao 2",
"compare-submit": "Antar dekho",
+ "compare-invalid-title": "Jon title ke aap specify karaa hae, valid nai hae",
+ "compare-title-not-exists": "Chuna gais title abhi nai banawa gais hai.",
+ "compare-revision-not-exists": "Chuna gais revision abhi nai banawa gais hai.",
+ "dberr-problems": "Maaf karna! Ii site technical difficulties experience kare hae.",
+ "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.",
+ "htmlform-float-invalid": "Jon value ke aap specify karaa hae, ek number nai hae.",
+ "htmlform-int-toolow": "Jon value kae aap specify karaa hae, minimum of $1 se kamti hae.",
+ "htmlform-int-toohigh": "Jon value ke aap specify karaa hae, maximum of $1 se jaada hae.",
+ "htmlform-required": "Ii value ke jaruri hae.",
+ "htmlform-submit": "Submit karo",
"htmlform-reset": "Badlao ke pahile jaise karo",
"htmlform-selectorother-other": "Duusra",
+ "htmlform-no": "Nai",
+ "htmlform-yes": "Haan",
+ "htmlform-chosen-placeholder": "Ek option ke select karo",
+ "htmlform-cloner-create": "Aur add karo",
+ "htmlform-cloner-delete": "Remove karo",
+ "htmlform-cloner-required": "Kamti se kamti ek value ke jaruri hae",
+ "sqlite-has-fts": "$1 with full-text search support",
+ "sqlite-no-fts": "$1 without full-text search support",
+ "logentry-delete-delete": "$1 {{GENDER:$2|deleted}} panna $3",
+ "logentry-delete-restore": "$1 {{GENDER:$2|restored}} panna $3",
+ "logentry-delete-event": "$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4",
+ "logentry-delete-revision": "$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} panna $3: $4 pe",
+ "logentry-delete-event-legacy": "$1 {{GENDER:$2|badal dewa gais hae}} visibility of log events on $3",
+ "logentry-delete-revision-legacy": "$1 {{GENDER:$2|changed}} visibility of revisions on panna $3",
+ "logentry-suppress-delete": "$1 {{GENDER:$2|suppressed}} panna $3",
+ "logentry-suppress-event": "$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4",
+ "logentry-suppress-revision": "$1 secretly {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4",
+ "logentry-suppress-event-legacy": "$1 secretly {{GENDER:$2|changed}} visibility of log events on $3",
+ "logentry-suppress-revision-legacy": "$1 secretly {{GENDER:$2|changed}} visibility of revisions on page $3",
+ "revdelete-content-hid": "lokawa gais content",
+ "revdelete-summary-hid": "edit summary ke lukawa gais hae",
+ "revdelete-uname-hid": "username ke lukawa gais hae",
+ "revdelete-content-unhid": "content ke lukawa gais hae",
+ "revdelete-summary-unhid": "edit summary ke lukawa gais hae",
+ "revdelete-uname-unhid": "username ke lukawa gais hae",
"revdelete-restricted": "sysops pe llabu restrictions",
"revdelete-unrestricted": "sysops se hatawa gae rukawat",
- "logentry-rights-rights": "$1 $3 ke group ke membership ke $4 se badal ke $5 kar dia hae",
- "logentry-rights-rights-legacy": "$1 $3 ke group membership ke badal dia hae",
- "logentry-rights-autopromote": "$1 ke apne se $2 se $3 ke promotion dewa gais",
+ "logentry-merge-merge": "$1 {{GENDER:$2|merged}} $3 into $4 (revisions up to $5)",
+ "logentry-move-move": "$1 {{GENDER:$2|moved}} panna $3 se $4",
+ "logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} panna $3 se $4 without leaving a redirect",
+ "logentry-move-move_redir": "$1 {{GENDER:$2|memindahkan}} laman $3 kepada $4 menggunakan lencongan",
+ "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|memindahkan}} laman $3 kepada $4 melalui lencongan tanpa meninggalkan perlencongan",
+ "logentry-patrol-patrol": "$1 {{GENDER:$2|marked}} revision $4 panna $3 ke patrol karaa gais hae",
+ "logentry-patrol-patrol-auto": "$1 automatically {{GENDER:$2|marked}} revision $4 panna $3 ke patrol karis hae",
+ "logentry-newusers-newusers": "Sadasya $1 ke account {{GENDER:$2|created}} ke banawa gais hae",
+ "logentry-newusers-create": "Sadasya $1 ke account {{GENDER:$2|created}} ke banawa gais hae",
+ "logentry-newusers-create2": "Sadasya $3 ke account {{GENDER:$2|created}} ke $1 banais hae.",
+ "logentry-newusers-byemail": "Sadasya $3 ke account {{GENDER:$2|created}} ke $1 banais hae aur password ke email se bheja gais hae",
+ "logentry-newusers-autocreate": "Sadasya $1 ke account {{GENDER:$2|created}} ke automatically banawa gais hae",
+ "logentry-rights-rights": "$1 {{GENDER:$2|changed}} group ke membership $3 ke khatir $4 se lai ke $5 talak",
+ "logentry-rights-rights-legacy": "$1 {{GENDER:$2|changed}} group ke membership $3 ke khatir",
+ "logentry-rights-autopromote": "$1 ke apne se $4 se $5 {{GENDER:$2|promoted karaa gais hae}}",
+ "logentry-upload-upload": "$1 {{GENDER:$2|upload karaa gais hae}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|uploaded}} a new version of $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|upload karaa gais hae}} $3",
"rightsnone": "(koi nai hai)",
- "searchsuggest-search": "Khojo"
+ "revdelete-summary": "summary ke badlo",
+ "feedback-adding": "Panna me subject jorra jaawe hae...",
+ "feedback-bugcheck": "Julum! Khaali ii check karna ki ii ek pahile se jaana waala bugs me se nai hae [$1 known bugs].",
+ "feedback-bugnew": "Ham karaa hae. Nawaa bug ke report karo",
+ "feedback-bugornote": "Agar aap ek technical problem ke detail me describe kare mangtaa hae tab meharbaani kar ke [$1 report a bug].\n\nNai to, aap niche ke sahaj form ke kaam me laae saktaa hae. Aap ke comment ke, aap ke naam ke saathe, panna \"[$3 $2]\" me jorra jaai.",
+ "feedback-cancel": "Cancel karo",
+ "feedback-close": "Kar dewa gais hae",
+ "feedback-error1": "Error: Unrecognized result from API",
+ "feedback-error2": "Error: Edit fail hoi gais hae",
+ "feedback-error3": "Error: API se koi response nai mila",
+ "feedback-message": "Sandes:",
+ "feedback-subject": "Subject:",
+ "feedback-submit": "Submit karo",
+ "feedback-thanks": "Dhanyabaad! Aap ke feedback ke panna \"[$2 $1]\" me post karaa gais hae.",
+ "searchsuggest-search": "Khojo",
+ "searchsuggest-containing": "isme hae.....",
+ "api-error-badaccess-groups": "Aap ke ii wiki me file upload kare ke ijajat nai hae.",
+ "api-error-badtoken": "Internal error: Bad token.",
+ "api-error-copyuploaddisabled": "Uploading by URL ke ii server me disable kar dewa gais hae.",
+ "api-error-duplicate": "There {{PLURAL:$1|is [$2 another file]|are [$2 some other files]}} already on the site with the same content.",
+ "api-error-duplicate-archive": "There {{PLURAL:$1|was [$2 another file]|were [$2 some other files]}} already on the site with the same content, but {{PLURAL:$1|it was|they were}} deleted.",
+ "api-error-duplicate-archive-popup-title": "Duplicate {{PLURAL:$1|file that has|files that have}} already been deleted.",
+ "api-error-duplicate-popup-title": "Duplicate {{PLURAL:$1|file|files}}.",
+ "api-error-empty-file": "Jon file ke aap submit karaa rahaa, khaali hae.",
+ "api-error-emptypage": "Nawaa, khaali panna ke banae ke ijajat nai hae.",
+ "api-error-fetchfileerror": "Internal error: File khoje ke time kuch wrong hoe gais hae.",
+ "api-error-fileexists-forbidden": "Ek file, jiske naam \"$1\" hae abhi hae, aur iske overwrite nai karaa jaae sake hae.",
+ "api-error-fileexists-shared-forbidden": "Ek file, jiske naam \"$1\" hae abhi hae aur file repository me shared hae, aur iske overwrite nai karaa jaae sake hae.",
+ "api-error-file-too-large": "Jon file ke aap submit karaa hae bahut barraa hae.",
+ "api-error-filename-tooshort": "Filename bahut chhota hae.",
+ "api-error-filetype-banned": "Ii rakam ke file banned hae."
}
diff --git a/languages/i18n/hil.json b/languages/i18n/hil.json
index 1600b9d6..17fe4915 100644
--- a/languages/i18n/hil.json
+++ b/languages/i18n/hil.json
@@ -425,7 +425,6 @@
"passwordreset-emailsent-capture": "May e-mail nga nagapahanumdum, nga ginapakita sa idalom.",
"passwordreset-emailerror-capture": "May e-mail nga nagapahanumdom nga ginbuhat, nga ginapakita sa idalom, apang ang pagpadala sa manuggamit indi madinalag-on: $1",
"changeemail": "Ilisan ang E-mail adres",
- "changeemail-header": "Ilisan ang e-mail adres sang akawnt",
"changeemail-text": "Tapusa ang ini nga formas agod nga ma-ilisan ang imo e-mail adres. Kinahanglan mo nga magbutang sang imo pasword sa pag-kumperma sang sini nga pag-ilis.",
"changeemail-no-info": "Kinahanglan nga nakasulod ka agod nga makadtoan ang ini nga panid sing derecho.",
"changeemail-oldemail": "E-mail adres sa subong:",
@@ -433,7 +432,6 @@
"changeemail-none": "(wala)",
"changeemail-password": "Ang imong {{SITENAME}} nga password:",
"changeemail-submit": "Ilisan and E-mail",
- "changeemail-cancel": "Kanselahon",
"bold_sample": "Dukot nga teksto",
"bold_tip": "Dukot nga teksto",
"italic_sample": "Gahilay nga teksto",
@@ -681,7 +679,6 @@
"mergehistory-same-destination": "Ang ginhalinan kag palakadtuan nga mga panid indi mahimo nga pareho",
"mergehistory-reason": "Rason:",
"mergelog": "Isugpon ang log",
- "pagemerge-logentry": "ginsugpon ang [[$1]] sa [[$2]] (mga pagbag-o asta $3)",
"revertmerge": "Di pag-upod",
"mergelogpagetext": "Sa dalom isa ka lista sang mga pinaka-ulihe nga pagsugpon sang isa ka kasaysayan sang panid sa isa pa gid.",
"history-title": "Rebisyon sang hisayranay sa \"$1\"",
@@ -727,7 +724,6 @@
"searchrelated": "konektado",
"searchall": "tanan",
"showingresults": "Ginapakita sa dalom pakadto sa {{PLURAL:$1|'''1''' ka resulta|'''$1''' ka mga resulta}} umpisa ang #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Resulta nga '''$1''' sang '''$3'''|Mga resulta nga '''$1 - $2''' sang '''$3'''}} para sa '''$4'''",
"search-nonefound": "Wala sang mga resulta nga nagsanto sa imo nga ginapangita.",
"powersearch-legend": "Abanse nga pagpangita",
"powersearch-ns": "Pangita sa mga ngalan-espasyo:",
@@ -1070,7 +1066,6 @@
"brokenredirects-delete": "panason",
"nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
"nmembers": "$1 {{PLURAL:$1|membro|mga membro}}",
- "popularpages": "Ang panid nagakilala gid",
"prefixindex": "Tanan nga mga pahina nga may-ara prefiks",
"usercreated": "{{GENDER:$3|Ginhimo}} sa $1 kag $2",
"newpages": "Mga Bag-o nga Pahina",
@@ -1081,7 +1076,6 @@
"pager-older-n": "{{PLURAL:$1|mas daan 1|mas daan $1}}",
"booksources": "Mga ginkuhaan sang Libro",
"booksources-search-legend": "Pangita-on ang ginakuhaan sang libro",
- "booksources-go": "Lakat",
"log": "Logs",
"allpages": "Tanan nga mga pahina",
"prevpage": "Antes nga pahina ($1)",
@@ -1106,7 +1100,7 @@
"watchthispage": "Bantayan ining panid",
"unwatch": "Di maglantaw",
"watchlist-details": "{{PLURAL:$1|$1 pahina|$1 mga pahina}} sa imo nga lista sang paglantaw, indi ang pag-isip sang imo ginahambal nga mga pahina.",
- "wlshowlast": "Ipakita ang nagligad nga $1 oras $2 adlaw $3",
+ "wlshowlast": "Ipakita ang nagligad nga $1 oras $2 adlaw",
"watchlist-options": "Pililian sa lista sang nagalantaw",
"watching": "Nagalantaw...",
"unwatching": "Di-paglantaw...",
@@ -1331,7 +1325,6 @@
"exif-digitalzoomratio": "Antas sang digital zoom",
"exif-focallengthin35mmfilm": "Laba sang pokus sang film nga 35 mm",
"exif-scenecapturetype": "Tipo sang pag-kuha sang litrato",
- "watchlistall2": "tanan",
"namespacesall": "tanan",
"monthsall": "tanan",
"imgmultigo": "Lakat",
@@ -1348,5 +1341,6 @@
"revdelete-restricted": "ginapatuman nga pagbawal sa mga administrador",
"revdelete-unrestricted": "ginkakas nga pagbawal sa mga administrador",
"rightsnone": "(wala)",
+ "revdelete-summary": "liwaton ang kabilogan",
"expand_templates_preview": "Ipakita subong"
}
diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json
index 88a19609..fc7aa3a4 100644
--- a/languages/i18n/hr.json
+++ b/languages/i18n/hr.json
@@ -27,7 +27,8 @@
"Tivek",
"Treecko",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Podcrtane poveznice",
@@ -55,7 +56,7 @@
"tog-shownumberswatching": "Prikaži broj suradnika koji prate stranicu (u nedavnim izmjenama, popisu praćenja i samim člancima)",
"tog-oldsig": "Pregled postojećeg potpisa:",
"tog-fancysig": "Običan potpis kao wikitekst (bez automatske poveznice)",
- "tog-uselivepreview": "Uključi trenutačni pretpregled (zahtijeva JavaScript) (eksperimentalno)",
+ "tog-uselivepreview": "Uključi trenutačni pretpregled",
"tog-forceeditsummary": "Podsjeti me ako sažetak uređivanja ostavljam praznim",
"tog-watchlisthideown": "Sakrij moja uređivanja s popisa praćenja",
"tog-watchlisthidebots": "Sakrij uređivanja botova s popisa praćenja",
@@ -230,6 +231,7 @@
"otherlanguages": "Drugi jezici",
"redirectedfrom": "(Preusmjereno s $1)",
"redirectpagesub": "Preusmjeravanje",
+ "redirectto": "Preusmjerava na:",
"lastmodifiedat": "Vrijeme i datum posljednje promjene na ovoj stranici: $2, $1",
"viewcount": "Ova stranica je pogledana {{PLURAL:$1|$1 put|$1 puta}}.",
"protectedpage": "Zaštićena stranica",
@@ -237,6 +239,7 @@
"jumptonavigation": "orijentacija",
"jumptosearch": "traži",
"view-pool-error": "Ispričavamo se, poslužitelji su trenutačno preopterećeni.\nPreviše suradnika pokušava vidjeti ovu stranicu.\nMolimo malo pričekajte prije nego što opet pokušate pristupiti ovoj stranici.\n\n$1",
+ "generic-pool-error": "Ispričavamo se, poslužitelji su trenutačno preopterećeni.\nPreviše suradnika pokušava vidjeti ovu stranicu.\nMolimo Vas malo pričekajte prije nego što opet pokušate pristupiti ovoj stranici.\n\n$1",
"pool-timeout": "Istek vremena (''timeout'') čekajući zaključavanje",
"pool-queuefull": "Red čekanja je pun",
"pool-errorunknown": "Nepoznata pogrješka",
@@ -249,6 +252,7 @@
"disclaimers": "Odricanje od odgovornosti",
"disclaimerpage": "Project:General_disclaimer",
"edithelp": "Kako uređivati stranicu",
+ "helppage-top-gethelp": "Pomoć",
"mainpage": "Glavna stranica",
"mainpage-description": "Glavna stranica",
"policy-url": "Project:Pravila",
@@ -266,7 +270,7 @@
"youhavenewmessages": "Imate $1 ($2).",
"youhavenewmessagesfromusers": "Imate $1 {{PLURAL:$3||od $3 suradnika|od $3 suradnika}} ($2).",
"youhavenewmessagesmanyusers": "Imate $1 od više suradnika ($2).",
- "newmessageslinkplural": "{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}",
+ "newmessageslinkplural": "{{PLURAL:$1|novu poruku|$1 nove poruke|999=novih poruka}}",
"newmessagesdifflinkplural": "{{PLURAL:$1|posljednje uređivanje|posljednja $1 uređivanja|posljednjih $1 uređivanja}} na stranici za razgovor",
"youhavenewmessagesmulti": "Imate nove poruke na $1",
"editsection": "uredi",
@@ -274,7 +278,7 @@
"viewsourceold": "vidi izvor",
"editlink": "uredi",
"viewsourcelink": "vidi izvornik",
- "editsectionhint": "Uređivanje odlomka: $1",
+ "editsectionhint": "Uredi odlomak $1",
"toc": "Sadržaj",
"showtoc": "prikaži",
"hidetoc": "sakrij",
@@ -312,6 +316,10 @@
"nospecialpagetext": "<strong>Takva posebna stranica ne postoji.</strong>\n\nZa popis svih posebnih stranica posjetite [[Special:SpecialPages|ovdje]].",
"error": "Pogreška",
"databaseerror": "Pogreška baze podataka",
+ "databaseerror-text": "Pogrješka u bazi podataka.\nTo može ukazivati na pogrješku u softveru.",
+ "databaseerror-textcl": "Pogrješka u bazi podataka.",
+ "databaseerror-query": "Upit: $1",
+ "databaseerror-function": "Funkcija: $1",
"databaseerror-error": "Pogrješka: $1",
"laggedslavemode": "Upozorenje: na stranici se možda ne nalaze najnovije promjene.",
"readonly": "Baza podataka je zaključana",
@@ -327,6 +335,8 @@
"filerenameerror": "Ne mogu preimenovati datoteku \"$1\" u \"$2\".",
"filedeleteerror": "Ne mogu obrisati datoteku \"$1\".",
"directorycreateerror": "Nije moguće kreirati direktorij \"$1\".",
+ "directoryreadonlyerror": "Direktorij \"$1\" je samo za čitanje.",
+ "directorynotreadableerror": "Direktorij \"$1\" ne može se pročitati.",
"filenotfound": "Datoteka \"$1\" nije nađena.",
"unexpected": "Neočekivana vrijednost: \"$1\"=\"$2\".",
"formerror": "Pogreška: Ne mogu poslati podatke",
@@ -346,8 +356,9 @@
"protectedpagetext": "Ova stranica je zaključana da bi se onemogućile izmjene.",
"viewsourcetext": "Možete pogledati i kopirati izvorni sadržaj ove stranice:",
"viewyourtext": "Možete vidjeti i kopirati tekst '''vaših uređivanja''' na ovoj stranici:",
- "protectedinterface": "Ova stranica je zaštićena od izmjena jer sadrži tekst MediaWiki softvera.\nAKo želite prevesti neprevedenu poruku ili popraviti prijevod neke druge poruke za sve MediaWiki wikije, posjetite [//translatewiki.net/ translatewiki.net], projekt za lokalizaciju MediaWiki softvera.",
- "editinginterface": "'''Upozorenje:''' Uređujete stranicu koja se rabi za prikaz teksta u sučelju softvera. Promjene učinjene na ovoj stranici će se odraziti na izgled korisničkog sučelja kod drugih suradnika. Za prijevod, razmotrite uporabu [//translatewiki.net/wiki/Main_Page?setlang=hr translatewiki.net], projekta lokalizacije MedijeWiki.",
+ "protectedinterface": "Ova stranica je zaštićena od izmjena jer sadrži tekst MediaWiki softvera.\nAko želite prevesti neprevedenu poruku ili popraviti prijevod neke druge poruke za sve MediaWiki wikije, posjetite [//translatewiki.net/ translatewiki.net], projekt za lokalizaciju MediaWiki softvera.",
+ "editinginterface": "<strong>Upozorenje:</strong> Uređujete stranicu koja se rabi za prikaz teksta u sučelju softvera. Promjene učinjene na ovoj stranici odrazit će se na izgled korisničkog sučelja kod drugih suradnika na ovoj wiki.",
+ "translateinterface": "Za dodavanje ili promjenu prijevoda za sve wikije koristite [//translatewiki.net/ translatewiki.net], projekt za lokalizaciju MediaWikija.",
"cascadeprotected": "Ova je stranica zaključana za uređivanja jer je uključena u {{PLURAL:$1|slijedeću stranicu|slijedeće stranice}}, koje su zaštićene \"prenosivom zaštitom\":\n$2",
"namespaceprotected": "Ne možete uređivati stranice u imenskom prostoru '''$1'''.",
"customcssprotected": "Ne možete uređivati ovu CSS stranicu zato što ona sadrži osobne postavke drugog suradnika.",
@@ -362,7 +373,8 @@
"invalidtitle-knownnamespace": "Neispravan naziv imenskog prostora \"$2\" i teksta \"$3\"",
"invalidtitle-unknownnamespace": "Neispravan naziv imenskog prostora broj $1 i teksta \"$2\"",
"exception-nologin": "Niste prijavljeni",
- "exception-nologin-text": "Ova stranica ili aktivnost zahtijeva da budete prijavljeni na ovom wikiju.",
+ "exception-nologin-text": "Molimo prijavite se ako želite pristup ovoj stranici ili djelovanje.",
+ "exception-nologin-text-manual": "Molimo $1 ako želite pristup ovoj stranici ili djelovanje.",
"virus-badscanner": "Loša konfiguracija: nepoznati skener za viruse: ''$1''",
"virus-scanfailed": "skeniranje neuspješno (kod $1)",
"virus-unknownscanner": "nepoznati antivirus:",
@@ -402,6 +414,9 @@
"gotaccountlink": "Prijavite se",
"userlogin-resetlink": "Zaboravili ste detalje vaše prijave?",
"userlogin-resetpassword-link": "Zaboravili ste zaporku?",
+ "userlogin-helplink2": "Pomoć pri prijavi",
+ "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nRabite donji obrazac da biste se prijavili kao drugi suradnik.",
+ "userlogin-createanother": "Stvori još jedan račun",
"createacct-emailrequired": "Adresa e-pošte",
"createacct-emailoptional": "Adresa e-pošte",
"createacct-email-ph": "Upišite svoju adresu e-pošte",
@@ -463,6 +478,7 @@
"createaccount-text": "Netko je stvorio suradnički račun s Vašom adresom elektronske pošte na {{SITENAME}} ($4) nazvan \"$2\", s lozinkom \"$3\". Trebali biste se prijaviti i odmah promijeniti lozinku.\n\nMožete zanemariti ovu poruku ako je suradnički račun stvoren nenamjerno.",
"login-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
"login-abort-generic": "Vaša prijava bila je neuspješna - Prekinuto",
+ "login-migrated-generic": "Vaš se suradnički račun preselio, i Vaše suradničko ime više ne postoji u ovom wikiju.",
"loginlanguagelabel": "Jezik: $1",
"suspicious-userlogout": "Vaš zahtjev za odjavu je odbijen jer to izgleda kao da je poslan preko pokvarenog preglednika ili keširanog posrednika (proxyja).",
"createacct-another-realname-tip": "Pravo ime nije obvezno. \nAko ga navedete, bit će korišteno za pripisivanje Vaših doprinosa.",
@@ -481,13 +497,19 @@
"retypenew": "Ponovno unesite lozinku",
"resetpass_submit": "Postavite lozinku i prijavite se",
"changepassword-success": "Zaporka je uspješno postavljena!",
+ "changepassword-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
"resetpass_forbidden": "Lozinka ne može biti promijenjena",
"resetpass-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.",
"resetpass-submit-loggedin": "Promijeni lozinku",
"resetpass-submit-cancel": "Odustani",
"resetpass-wrong-oldpass": "Pogrešna privremena ili trenutačna lozinka.\nMožda ste već uspješno promijenili Vašu lozinku ili ste zatražili novu privremenu lozinku.",
+ "resetpass-recycled": "Molimo Vas, promijenite zaporku u nešto drugačiju od Vaše trenutačne zaporke.",
+ "resetpass-temp-emailed": "Prijavljeni ste s privremenom zaporkom prijavljenom putem e-poruke.\nDa biste dovršili prijavu morate postaviti novu zaporku.",
"resetpass-temp-password": "Privremena lozinka:",
"resetpass-abort-generic": "Poništena je promjena zaporke.",
+ "resetpass-expired": "Istekla Vam je valjanost zaporke. Molimo Vas, potvrdite novu zaporku za prijavu.",
+ "resetpass-expired-soft": "Istekla vam je valjanost zaporke i trebate ju promijeniti. Molimo odaberite novu zaporku ili pritisnite na \"{{int:resetpass-submit-cancel}}\", za kasniju promjenu.",
+ "resetpass-validity-soft": "Zaporka Vam ne vrijedi: $1\n\nMolimo odaberite novu zaporku ili pritisnite na \"{{int:resetpass-submit-cancel}}\", za kasniju promjenu.",
"passwordreset": "Ponovno postavi lozinku",
"passwordreset-text-one": "Ispunite ovaj obrazac ako želite ponovno postaviti Vašu zaporku.",
"passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja da biste dobili privremenu zaporku e-poštom.}}",
@@ -512,8 +534,9 @@
"changeemail-oldemail": "Trenutačna adresa e-pošte:",
"changeemail-newemail": "Nova adresa e-pošte:",
"changeemail-none": "(ništa)",
- "changeemail-password": "Zaporka za {{SITENAME}}:",
+ "changeemail-password": "Zaporka za projekt {{SITENAME}}:",
"changeemail-submit": "Promijeni E-mail",
+ "changeemail-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
"bold_sample": "Podebljani tekst",
"bold_tip": "Podebljani tekst",
"italic_sample": "Kurzivni tekst",
@@ -540,9 +563,11 @@
"preview": "Pregled kako će stranica izgledati",
"showpreview": "Prikaži kako će izgledati",
"showdiff": "Prikaži promjene",
- "anoneditwarning": "'''Upozorenje:''' Niste prijavljeni pod suradničkim imenom. Vaša IP adresa bit će zabilježena u popisu izmjena ove stranice.",
+ "blankarticle": "<strong>Upozorenje:</strong> Stvorili ste stranicu koja je prazna.\nAko iznova pritisnete na \"{{int:savearticle}}\", stranica će biti stvorena bez ikakvog sadržaja.",
+ "anoneditwarning": "<strong>Upozorenje:</strong> niste prijavljeni. Ako napravite uređivanje, Vaša IP adresa će biti javno vidljiva. Ako se <strong>[$1 prijavite]</strong> ili <strong>[$2 stvorite račun]</strong>, Vaša uređivanja će biti pridružena suradničkom imenu, zajedno s ostalim pogodnostima.",
"anonpreviewwarning": "''Niste prijavljeni. Spremanjem će Vaše IP adrese ostati zabilježene u starim izmjenama ove stranice.''",
"missingsummary": "'''Podsjetnik:''' Niste unijeli sažetak promjena. Ako ponovno kliknete na \"Sačuvaj stranicu\", Vaše će promjene biti snimljene bez sažetka.",
+ "selfredirect": "<strong>Upozorenje:</strong> Stvarate preusmjeravanje na isti članak.\nMožda ste izabrali pogrješnu odredišnu stranicu za preusmjeravanje ili uređujete pogrješnu stranicu.\nAko pritisnete na \"{{int:savearticle}}\" još jednom, preusmjeravanje će svejedno biti stvoreno.",
"missingcommenttext": "Molim unesite sažetak.",
"missingcommentheader": "'''Podsjetnik:''' Niste napisali sažetak ovog komentara. Ako ponovno kliknete \"{{int:savearticle}}\", Vaš će komentar biti snimljen bez sažetka.",
"summary-preview": "Pregled sažetka:",
@@ -610,7 +635,7 @@
"templatesusedsection": "{{PLURAL:$1|Predložak koji se rabi|Predlošci koji se rabe}} u ovom odjeljku:",
"template-protected": "(zaštićen)",
"template-semiprotected": "(djelomično zaštićen)",
- "hiddencategories": "Ova stranica je član {{PLURAL:$1|1 skrivene kategorija|$1 skrivene kategorije|$1 skrivenih kategorija}}:",
+ "hiddencategories": "Ova stranica je član {{PLURAL:$1|1 skrivene kategorije|$1 skrivene kategorije|$1 skrivenih kategorija}}:",
"nocreatetext": "Na ovom je projektu ograničeno otvaranje novih stranica.\nMožete se vratiti i uređivati već postojeće stranice ili se [[Special:UserLogin|prijaviti ili otvoriti suradnički račun]].",
"nocreate-loggedin": "Nemate ovlasti za stvaranje novih stranica.",
"sectioneditnotsupported-title": "Uređivanje odjeljka nije podržano",
@@ -633,11 +658,13 @@
"content-failed-to-parse": "Obrada (''parsiranje'') formata $2 za model $1 nije uspjela: $3",
"invalid-content-data": "Nevaljani sadržaj",
"content-not-allowed-here": "Sadržaj napisan u obliku \"$1\"-a nije dozvoljen na stranici [[$2]]",
- "editwarning-warning": "Napuštanje ove stranice može uzrokovati gubitak svake izmjene koju ste napravili.\nMožete onemogućiti ovo upozorenje u odjeljku \"{{int:prefs-editing}}\" Vaših postavki.",
+ "editwarning-warning": "Napuštanje ove stranice može uzrokovati gubitak svake izmjene koju ste napravili.\nAko ste prijavljeni, možete onemogućiti ovo upozorenje u odjeljku \"{{int:prefs-editing}}\" Vaših postavki.",
"content-model-wikitext": "wikitekst",
"content-model-text": "obični tekst",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Prazan objekt",
+ "content-json-empty-array": "Prazno polje",
"expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše opterećujućih poziva parserskih funkcija\n\nTrebala bi imati manje od $2 {{PLURAL:$2|poziva|poziva}}, sada ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
"expensive-parserfunction-category": "Stranice s previše poziva opterećujućih parserskih funkcija",
"post-expand-template-inclusion-warning": "Upozorenje: Veličina uključenih predložaka je prevelika.\nNeki predlošci neće biti uključeni.",
@@ -657,6 +684,7 @@
"undo-success": "Izmjena je uklonjena (tekst u okviru ispod ne sadrži posljednju izmjenu). Molim sačuvajte stranicu (provjerite sažetak).",
"undo-failure": "Ova izmjena ne može biti uklonjena zbog postojanja međuinačica.",
"undo-norev": "Izmjena nije mogla biti uklonjena jer ne postoji ili je obrisana.",
+ "undo-nochange": "Čini se da je uređivanje već otkazano.",
"undo-summary": "uklanjanje izmjene $1 {{GENDER:$2|suradnika|suradnice}} [[Posebno:Doprinosi/$2|$2]] ([[Razgovor sa suradnikom:$2|razgovor]])",
"cantcreateaccounttitle": "Nije moguće stvoriti suradnički račun",
"cantcreateaccount-text": "Otvaranje suradničkog računa ove IP adrese ('''$1''') blokirao/la je [[User:$3|$3]].\n\nRazlog koji je dao/la $3 je ''$2''",
@@ -712,10 +740,10 @@
"revdelete-selected-file": "{{PLURAL:$1|Označena inačica|Označene inačice}} datoteke [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Odabrani zapis u evidenciji|Odabrani zapisi u evidenciji}}:",
"revdelete-text-text": "Izbrisane izmjene će i dalje biti vidljive u povijesti stranice, ali dijelovi sadržaja neće biti vidljivi javno.",
- "logdelete-text": "Izbrisane izmjene i dalje će biti vidljive u zapisnicima, ali dijelovi njihova sadržaja biti će nedostupni za javnost.",
- "revdelete-text-others": "Ostali administratori na projektu {{SITENAME}} će moći vidjeti i vratiti izbrisani sadržaj na isti način, osim ako nisu postavljena dodatna ograničenja.",
+ "logdelete-text": "Izbrisane izmjene i dalje će biti vidljive u evidencijama, ali dijelovi njihova sadržaja biti će nedostupni za javnost.",
+ "revdelete-text-others": "Ostali administratori na projektu moći će pristupiti izbrisanom sadržaju i vratiti ga, osim ako nisu postavljena dodatna ograničenja.",
"revdelete-confirm": "Molimo potvrdite da namjeravate ovo učiniti, da razumijete posljedice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
- "revdelete-suppress-text": "Sklanjanje uređivanja treba raditi '''iznimno''' u slijedećih par slučajeva:\n* Privatne informacije neprilične javnom mediju tipa\n*: ''kućna adresa i broj telefona, JMBG ili OIB, itd.''",
+ "revdelete-suppress-text": "Sklanjanje uređivanja treba raditi <strong>iznimno</strong> u sljedećih par slučajeva:\n* moguće klevetničke informacije\n* neprikladne osobne informacije \n*: <em>kućna adresa i broj telefona, JMBG ili OIB, itd.</em>",
"revdelete-legend": "Postavi ograničenja na izmjenu:",
"revdelete-hide-text": "Sakrij tekst izmjene",
"revdelete-hide-image": "Sakrij sadržaj datoteke (sakrij sliku)",
@@ -724,8 +752,8 @@
"revdelete-hide-user": "Sakrij suradnikovo ime/IP adresu",
"revdelete-hide-restricted": "Postavi ograničenja i za administratore kao i za ostale suradnike",
"revdelete-radio-same": "(ne mijenjaj)",
- "revdelete-radio-set": "Da",
- "revdelete-radio-unset": "Ne",
+ "revdelete-radio-set": "Skriven",
+ "revdelete-radio-unset": "Vidljivo",
"revdelete-suppress": "Sakrij podatke od administratora i ostalih suradnika",
"revdelete-unsuppress": "Ukloni ograničenja na vraćenim izmjenama",
"revdelete-log": "Razlog:",
@@ -772,7 +800,6 @@
"mergehistory-same-destination": "Izvorna i ciljana stranica ne mogu biti iste",
"mergehistory-reason": "Razlog:",
"mergelog": "Evidencija spajanja povijesti stranica",
- "pagemerge-logentry": "spojeno [[$1]] u [[$2]] (promjene do $3)",
"revertmerge": "Razdvoji",
"mergelogpagetext": "Slijedi popis posljednjih spajanja povijesti stranica.",
"history-title": "Povijest izmjena stranice \"$1\"",
@@ -813,6 +840,7 @@
"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": "(preusmjeravanje $1)",
"search-section": "(odlomak $1)",
+ "search-category": "(kategorija $1)",
"search-suggest": "Mislili ste: $1",
"search-interwiki-caption": "Sestrinski projekti",
"search-interwiki-default": "$1 rezultati:",
@@ -822,6 +850,7 @@
"searchall": "sve",
"showingresults": "Dolje {{PLURAL:$1|je prikazan '''$1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}}, počevši od '''$2'''.",
"showingresultsinrange": "Dolje {{PLURAL:$1|je prikazan '''$1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}}, u rasponu od '''$2''' do '''$3'''.",
+ "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> od <strong>$3</strong>|Rezultati <strong>$1 - $2</strong> od <strong>$3</strong>}}",
"search-nonefound": "Ne postoje rezultati koji se podudaraju s upitom.",
"powersearch-legend": "Napredno pretraživanje",
"powersearch-ns": "Traži u imenskom prostoru:",
@@ -831,9 +860,11 @@
"powersearch-remember": "Zapamti izbor za buduća pretraživanja",
"search-external": "Vanjski pretraživač",
"searchdisabled": "<p>Oprostite! Pretraga po cjelokupnoj bazi je zbog bržeg rada projekta {{SITENAME}} trenutačno onemogućena. Možete se poslužiti tražilicom Google.</p>",
+ "search-error": "Greška prilikom pretrage: $1",
"preferences": "Postavke",
"mypreferences": "Moje postavke",
"prefs-edits": "Broj uređivanja:",
+ "prefsnologintext2": "Molimo Vas prijavite se da biste promijenili postavke.",
"prefs-skin": "Izgled",
"skin-preview": "Pregled",
"datedefault": "Nemoj postaviti",
@@ -842,6 +873,11 @@
"prefs-personal": "Podaci o suradniku",
"prefs-rc": "Nedavne promjene i kratki članci",
"prefs-watchlist": "Praćene stranice",
+ "prefs-editwatchlist": "Uredi popis praćenja",
+ "prefs-editwatchlist-label": "Uredi stavke na popisu praćenja:",
+ "prefs-editwatchlist-edit": "vidi i ukloni stavke s popisa praćenja",
+ "prefs-editwatchlist-raw": "uredi popis praćenih stranica u okviru za uređivanje",
+ "prefs-editwatchlist-clear": "očisti popis praćenja",
"prefs-watchlist-days": "Broj dana koji će se prikazati na popisu praćenja:",
"prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
"prefs-watchlist-edits": "Broj uređivanja koji će se prikazati na proširenom popisu praćenja:",
@@ -911,7 +947,7 @@
"gender-female": "Ženski",
"prefs-help-gender": "Mogućnost softvera da ispravno oslovljava razlikujući spol. Ovaj će podatak biti javan.",
"email": "Adresa elektroničke pošte *",
- "prefs-help-realname": "Pravo ime nije obvezno. Ako ga navedete, bit će korišteno za pravnu atribuciju Vaših doprinosa.",
+ "prefs-help-realname": "Pravo ime nije obvezno. Ako ga navedete, može biti rabljeno za pripisivanje Vaših doprinosa.",
"prefs-help-email": "E-mail adresa nije obvezna, ali je potrebna za obnovu lozinke u slučaju da ju zaboravite.",
"prefs-help-email-others": "Također možete odabrati da vas ostali kontaktiraju preko vaše suradničke ili stranice za razgovor bez javnog otkrivanja vašeg identiteta.",
"prefs-help-email-required": "Potrebno je navesti adresu e-pošte (e-mail).",
@@ -931,6 +967,8 @@
"prefs-displaywatchlist": "Mogućnosti prikaza",
"prefs-diffs": "razl",
"prefs-help-prefershttps": "Ova mogućnost će stupiti na snagu kod sljedeće prijave.",
+ "prefswarning-warning": "Napravili ste promjene u Vašim postavkama koje još nisu snimljene.\nAko napustite ovu stranicu bez pritiska na \"$1\", postavke neće biti ažurirane.",
+ "prefs-tabs-navigation-hint": "Savjet: možete rabiti tipke sa strjelicama lijevo i desno za prebacivanje između kartica na popisu kartica.",
"email-address-validity-valid": "Adresa e-pošte pokazuje se ispravnom",
"email-address-validity-invalid": "Unesite valjanu adresu e-pošte",
"userrights": "Upravljanje suradničkim pravima",
@@ -950,6 +988,8 @@
"userrights-notallowed": "Vaš trenutačni suradnički račun nema ovlasti mijenjanja suradničkih prava.",
"userrights-changeable-col": "Skupine koje možete promijeniti",
"userrights-unchangeable-col": "Skupine koje ne možete promijeniti",
+ "userrights-conflict": "Sukob promjene suradničkih prava! Molimo provjerite i potvrdite svoje promjene.",
+ "userrights-removed-self": "Uspješno ste uklonili svoja vlastita prava. Kao takvi, više niste u mogućnosti pristupiti ovoj stranici.",
"group": "Skupina:",
"group-user": "Suradnici",
"group-autoconfirmed": "automatski potvrđeni suradnici",
@@ -1047,6 +1087,7 @@
"action-createpage": "stvaranje stranica",
"action-createtalk": "stvaranje stranica za razgovor",
"action-createaccount": "stvaranje ovog suradničkog računa",
+ "action-history": "Vidi povijest uređivanja ove stranice",
"action-minoredit": "označavanje ove izmjene kao manju",
"action-move": "premještanje ove stranice",
"action-move-subpages": "premještanje ove stranice, i njenih podstranica",
@@ -1134,7 +1175,7 @@
"recentchangeslinked": "Povezane stranice",
"recentchangeslinked-feed": "Povezane stranice",
"recentchangeslinked-toolbox": "Povezane stranice",
- "recentchangeslinked-title": "Povezane promjene sa \"$1\"",
+ "recentchangeslinked-title": "Povezane promjene sa stranicom \"$1\"",
"recentchangeslinked-summary": "Ova posebna stranica pokazuje nedavne promjene na povezanim stranicama (ili stranicama određene kategorije). Stranice koje su na [[Special:Watchlist|Vašem popisu praćenja]] su '''podebljane'''.",
"recentchangeslinked-page": "Naslov stranice:",
"recentchangeslinked-to": "Pokaži promjene na stranicama s poveznicom na ovu stranicu",
@@ -1149,9 +1190,9 @@
"uploaderror": "Pogreška kod postavljanja",
"upload-recreate-warning": "'''Upozorenje: datoteka s tim imenom je izbrisana ili premještena.'''\n\nEvidencije brisanja i premještanja prikazane su ovdje:",
"uploadtext": "Ovaj obrazac služi za postavljanje datoteka.\nZa pregledavanje i pretraživanje već postavljenih datoteka vidi [[Special:FileList|popis postavljenih datoteka]], (ponovljena) postavljanja su također u [[Special:Log/upload|popisu postavljanja]], a brisanja u [[Special:Log/delete|popisu brisanja]].\n\nDa biste na stranicu stavili datoteku, koristite poveznice tipa\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg]]</nowiki></code>''' za punu verziju datoteke\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.png|200px|mini|left|popratni tekst]]</nowiki></code>''' za datoteku širine 200 px u okviru s 'popratnim tekstom' kao opisom\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></code>''' za direktno povezivanje na datoteku bez njenog prikazivanja",
- "upload-permitted": "Dopušteni tipovi datoteka: $1.",
- "upload-preferred": "Poželjni tipovi datoteka: $1.",
- "upload-prohibited": "Zabranjeni tipovi datoteka: $1.",
+ "upload-permitted": "Dopušteni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
+ "upload-preferred": "Poželjni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
+ "upload-prohibited": "Zabranjeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
"uploadlogpage": "Evidencija_postavljanja",
"uploadlogpagetext": "Dolje je popis nedavno postavljenih slika.",
"filename": "Ime datoteke",
@@ -1189,10 +1230,10 @@
"windows-nonascii-filename": "Ovaj wiki ne podržava imena datoteka s posebnim znakovima.",
"fileexists": "Datoteka s ovim imenom već postoji, pogledajte <strong>[[:$1]]</strong> ako niste sigurni želite li je uistinu promijeniti.\n[[$1|thumb]]",
"filepageexists": "Opis stranice za ovu datoteku je već napravljen ovdje <strong>[[:$1]]</strong>, ali datoteka sa ovim nazivom trenutno ne postoji.\nSažetak koji ste naveli neće se pojaviti na stranici opisa.\nDa bi se Vaš opis ovdje našao, potrebno je da ga ručno uredite.\n[[$1|thumb]]",
- "fileexists-extension": "Već postoji datoteka sa sličnim imenom: [[$2|thumb]]\n* Ime datoteke koju postavljate: <strong>[[:$1]]</strong>\n* Ime postojeće datoteke: <strong>[[:$2]]</strong>\nMolimo da izaberete drugo ime.",
+ "fileexists-extension": "Već postoji datoteka sa sličnim imenom: [[$2|thumb]]\n* Ime datoteke koju postavljate: <strong>[[:$1]]</strong>\n* Ime postojeće datoteke: <strong>[[:$2]]</strong>\nŽelite li možda izabrati više različito ime?",
"fileexists-thumbnail-yes": "Datoteka je najvjerojatnije slika u smanjenoj veličini ''(thumbnail)''. [[$1|thumb]]\nMolimo provjerite datoteku <strong>[[:$1]]</strong>.\nUkoliko je ta datoteka ista kao i ova koju ste upravo pokušali snimiti, samo u višoj rezoluciji, nije nužno snimanje smanjenje slike ''(thumbnaila)'', prikazivanje smanjene slike iz izvornika radi se softverski.",
"file-thumbnail-no": "Ime datoteke počinje s <strong>$1</strong>.\nČini se da je to slika smanjene veličine ''(minijatura)''.\nUkoliko imate ovu sliku u punoj razlučljivosti (rezoluciji) postavite tu sliku, u protivnom, molimo promijenite ime datoteke.",
- "fileexists-forbidden": "Datoteka s ovim imenom već postoji i nemože biti presnimljena.\nAko i dalje želite postaviti svoju datoteku, molimo vratite se i odaberite novo ime. [[File:$1|thumb|center|$1]]",
+ "fileexists-forbidden": "Datoteka s ovim imenom već postoji i ne može biti presnimljena.\nAko i dalje želite postaviti svoju datoteku, molimo vratite se i odaberite novo ime. [[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "Datoteka s ovim imenom već postoji u središnjem poslužitelju datoteka.\nAko još uvijek želite postaviti svoju datoteku, idite nazad i postavite ju pod drugim imenom. [[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "Ova datoteka je duplikat {{PLURAL:$1|sljedeće datoteke|sljedećih datoteka}}:",
"file-deleted-duplicate": "Datoteka istovjetna ovoj datoteci ([[:$1]]) prethodno je obrisana. Provjerite evidenciju brisanja za tu datoteke datoteku prije nego što nastavite s ponovnim postavljanjem.",
@@ -1304,9 +1345,11 @@
"license": "Licencija:",
"license-header": "Licencija",
"nolicense": "Ništa nije odabrano",
+ "licenses-edit": "Uredi izbor licencija",
"license-nopreview": "(Prikaz nije moguć)",
- "upload_source_url": " (valjani, javno dostupni URL)",
- "upload_source_file": "(datoteka na Vašem računalu)",
+ "upload_source_url": " (izabrali ste datoteku s valjanog, javno dostupnog URL-a)",
+ "upload_source_file": "(izabrali ste datoteku s Vašeg računala)",
+ "listfiles-delete": "izbriši",
"listfiles-summary": "Ova stranica pokazuje sve postavljene datoteke.\nKad je filtriran po suradniku, popis prikazuje samo one datoteke čije je posljednje inačice postavio taj suradnik.",
"listfiles_search_for": "Traži ime slike:",
"imgfile": "datoteka",
@@ -1346,7 +1389,7 @@
"duplicatesoffile": "{{PLURAL:$1|Sljedeća datoteka je kopija|$1 sljedeće datoteke su kopije|$1 sljedećih datoteka su kopije}} ove datoteke ([[Special:FileDuplicateSearch/$2|više detalja]]):",
"sharedupload": "Ova je datoteka postavljena na $1 i mogu je koristiti ostali projekti.",
"sharedupload-desc-there": "Ova datoteka je s projekta $1 i mogu je koristiti drugi projekti. Pogledajte [$2 stranicu s opisom datoteke] za dodatne informacije.",
- "sharedupload-desc-here": "Ova datoteka je sa $1 i mogu je koristiti drugi projekti. Opis s njezine [$2 stranice s opisom datoteke] prikazan je ispod.",
+ "sharedupload-desc-here": "Ova datoteka je s projekta $1 i mogu je koristiti drugi projekti. Opis s njezine [$2 stranice s opisom datoteke] prikazan je ispod.",
"sharedupload-desc-edit": "Ova datoteka nalazi se na $1 i može se rabiti na drugim projektima.\nNjen opis možete urediti na [$2 stranici opisa datoteke].",
"sharedupload-desc-create": "Ova datoteka nalazi se na $1 i može se rabiti na drugim projektima.\nMožda želite urediti njen opis na [$2 stranici opisa datoteke].",
"filepage-nofile": "Ne postoji datoteka s ovim imenom.",
@@ -1385,17 +1428,22 @@
"download": "skidanje",
"unwatchedpages": "Nepraćene stranice",
"listredirects": "Popis preusmjeravanja",
+ "listduplicatedfiles": "Popis kopija datoteka",
+ "listduplicatedfiles-summary": "Ovo je popis datoteka kojima je zadnja inačica kopija zadnje inačice druge datoteke. Na popisu su samo lokalno postavljene datoteke.",
"unusedtemplates": "Nekorišteni predlošci",
"unusedtemplatestext": "Slijedi popis svih stranica imenskog prostora {{ns:template}}, koje nisu umetnute na drugim stranicama. Pripazite da prije brisanja provjerite druge poveznice koje vode na te predloške.",
"unusedtemplateswlh": "druge poveznice",
"randompage": "Slučajna stranica",
"randompage-nopages": "Nema stranica u {{PLURAL:$2|imenskom prostoru|imenskim prostorima}}: $1.",
+ "randomincategory": "Slučajna stranica u kategoriji",
+ "randomincategory-invalidcategory": "\"$1\" nije valjano ime kategorije.",
+ "randomincategory-category": "Kategorija:",
+ "randomincategory-legend": "Slučajna stranica u kategoriji",
"randomredirect": "Slučajno preusmjeravanje",
"randomredirect-nopages": "Nema preusmjeravanja u imenskom prostoru \"$1\".",
"statistics": "Statistika",
"statistics-header-pages": "Statistika stranica",
"statistics-header-edits": "Statistika uređivanja",
- "statistics-header-views": "Statistika posjećivanja",
"statistics-header-users": "Statistika suradnika",
"statistics-header-hooks": "Ostale statistike",
"statistics-articles": "Stranice sa sadržajem",
@@ -1404,13 +1452,9 @@
"statistics-files": "Postavljene datoteke",
"statistics-edits": "Broj uređivanja od nastanka projekta {{SITENAME}}",
"statistics-edits-average": "Prosječan broj uređivanja po stranici",
- "statistics-views-total": "Posjeta ukupno",
- "statistics-views-total-desc": "Posjeti nepostojećim i posebnim stranicama nisu uključeni",
- "statistics-views-peredit": "Posjeta po uređivanju",
"statistics-users": "Prijavljeni [[Special:ListUsers|suradnici]]",
"statistics-users-active": "Aktivni suradnici",
"statistics-users-active-desc": "Suradnici koji su napravili neku od radnji u posljednjih {{PLURAL:$1|dan|$1 dana}}",
- "statistics-mostpopular": "Najposjećenije stranice",
"pageswithprop": "Stranice sa osobinom stranice",
"pageswithprop-legend": "Stranice sa osobinom stranice",
"pageswithprop-prop": "Ime osobine:",
@@ -1447,7 +1491,6 @@
"uncategorizedtemplates": "Nekategorizirani predlošci",
"unusedcategories": "Nekorištene kategorije",
"unusedimages": "Nekorištene slike",
- "popularpages": "Popularne stranice",
"wantedcategories": "Tražene kategorije",
"wantedpages": "Tražene stranice",
"wantedpages-badtitle": "Nevaljani naslov kao rezultat: $1",
@@ -1472,11 +1515,16 @@
"protectedpages-indef": "Samo neograničene zaštite",
"protectedpages-cascade": "Samo prenosiva zaštita",
"protectedpagesempty": "Nema zaštićenih stranica koje ispunjavaju uvjete koje ste postavili.",
+ "protectedpages-page": "Stranica",
+ "protectedpages-expiry": "Istječe",
+ "protectedpages-params": "Stupanj zaštite",
+ "protectedpages-reason": "Razlog",
"protectedtitles": "Zaštićeni naslovi",
"protectedtitlesempty": "Nijedan naslov nije trenutačno zaštićen s tim parametrima.",
"listusers": "Popis suradnika",
"listusers-editsonly": "Pokaži samo suradnike s uređivanjem",
"listusers-creationsort": "Razvrstaj po datumu stvaranja",
+ "listusers-desc": "Sortiraj obrnutim redoslijedom",
"usereditcount": "$1 {{PLURAL:$1|uređivanje|uređivanja|uređivanja}}",
"usercreated": "{{GENDER:$3|Otvorio|Otvorila}} račun $1 u $2",
"newpages": "Nove stranice",
@@ -1496,7 +1544,7 @@
"querypage-disabled": "Ova posebna stranica onemogućena je jer bi usporila funkcioniranje projekta.",
"booksources": "Pretraživanje po ISBN-u",
"booksources-search-legend": "Traženje izvora za knjigu",
- "booksources-go": "Kreni",
+ "booksources-search": "Traži",
"booksources-text": "Ovdje je popis vanjskih poveznica na internetskim stranicama koje prodaju nove i rabljene knjige, ali mogu sadržavati i ostale podatke o knjigama koje tražite:",
"booksources-invalid-isbn": "Čini se da dani ISBN nije valjan; provjerite greške kopirajući iz izvornika.",
"specialloguserlabel": "Suradnik:",
@@ -1563,6 +1611,7 @@
"listgrouprights-removegroup-self": "Ukloni {{PLURAL:$2|skupinu|skupine}} iz vlastitog računa: $1",
"listgrouprights-addgroup-self-all": "Dodaj sve skupine vlastitom računu",
"listgrouprights-removegroup-self-all": "Uklonite sve skupine iz vlastitog računa",
+ "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
"trackingcategories-nodesc": "Opis nije dostupan.",
"mailnologin": "Nema adrese pošiljaoca",
"mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati valjanu adresu e-pošte u svojim [[Special:Preferences|postavkama]]\nda bi mogli slati poštu drugim suradnicima.",
@@ -1591,30 +1640,32 @@
"emailccsubject": "Kopija Vaše poruke suradniku $1: $2",
"emailsent": "E-mail poslan",
"emailsenttext": "Vaša poruka je poslana.",
- "emailuserfooter": "Ovaj e-mail je poslan od $1 za $2 korištenjem \"elektroničke pošte\" s projekta {{SITENAME}}.",
+ "emailuserfooter": "Ova je poruka poslana od $1 za $2 uporabom \"elektroničke pošte\" s projekta {{SITENAME}}.",
"usermessage-summary": "Ostavljanje poruke sustava.",
"usermessage-editor": "Uređivač sistemskih poruka",
"watchlist": "Moj popis praćenja",
"mywatchlist": "Moj popis praćenja",
"watchlistfor2": "Za $1 $2",
"nowatchlist": "Na Vašem popisu praćenja nema nijednog članka.",
- "watchlistanontext": "Molimo Vas $1 kako biste mogli vidjeti ili uređivati Vaš popis praćenih stranica.",
+ "watchlistanontext": "Molimo Vas prijavite se kako biste mogli vidjeti ili uređivati Vaš popis praćenih stranica.",
"watchnologin": "Niste prijavljeni",
"addwatch": "Dodaj u popis praćenja",
"addedwatchtext": "Stranica \"[[:$1]]\" je dodana na Vaš [[Special:Watchlist|popis praćenja]].\nPromjene na toj stranici i njenoj stranici za razgovor bit će prikazane na popisu praćenja.",
+ "addedwatchtext-short": "Stranica \"$1\" dodana je Vašem popisu praćenja.",
"removewatch": "Ukloni s popisa praćenja",
"removedwatchtext": "Stranica \"[[:$1]]\" je uklonjena s [[Special:Watchlist|Vašeg popisa praćenja]].",
+ "removedwatchtext-short": "Stranica \"$1\" uklonjena je s Vašeg popisa praćenja.",
"watch": "Prati",
"watchthispage": "Prati ovu stranicu",
"unwatch": "Prekini praćenje",
"unwatchthispage": "Prekini praćenje",
"notanarticle": "Nije članak",
"notvisiblerev": "Izmjena je obrisana",
- "watchlist-details": "{{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica}} se nalazi na popisu praćenja, ne brojeći stranice za razgovor.",
+ "watchlist-details": "{{PLURAL:$1|$1 stranica se nalazi|$1 stranice se nalaze|$1 stranica se nalazi}} na popisu praćenja, ne brojeći stranice za razgovor.",
"wlheader-enotif": "Uključeno je izvješćivanje e-poštom.",
- "wlheader-showupdated": "Stranice koje su promijenjene od Vašeg posljednjeg posjeta prikazane su '''podebljano'''",
- "wlnote": "Ovdje {{PLURAL:$1|je posljednja $1 promjena|su posljednje $1 promjene|je posljednjih $1 promjena}} u {{PLURAL:$2|posljednjem '''$2''' satu|posljednja '''$2''' sata|posljednjih '''$2''' sati}}, od $3, $4.",
- "wlshowlast": "Prikaži posljednjih $1 sati $2 dana $3",
+ "wlheader-showupdated": "Stranice koje su promijenjene od Vašeg posljednjeg posjeta prikazane su '''podebljano'''.",
+ "wlnote": "Ovdje {{PLURAL:$1|je posljednja $1 promjena|su posljednje $1 promjene|je posljednjih $1 promjena}} u {{PLURAL:$2|posljednjem <strong>$2</strong> satu|posljednja '''$2''' sata|posljednjih <strong>$2</strong> sati}}, od $3, $4.",
+ "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
"watchlist-options": "Izbornik popisa praćenja",
"watching": "Pratim...",
"unwatching": "Prestajem pratiti...",
@@ -1644,7 +1695,7 @@
"exbeforeblank": "sadržaj prije brisanja je bio: '$1'",
"delete-confirm": "Obriši \"$1\"",
"delete-legend": "Izbriši",
- "historywarning": "'''Upozorenje''': stranica koju želite izbrisati ima starije izmjene s približno $1 {{PLURAL:$1|inačicom|inačice|inačica}}:",
+ "historywarning": "<strong>Upozorenje:</strong> stranica koju želite izbrisati ima starije izmjene s $1 {{PLURAL:$1|inačicom|inačice|inačica}}:",
"confirmdeletetext": "Zauvijek ćete izbrisati stranicu ili sliku zajedno s prijašnjim inačicama.\nMolim potvrdite svoju namjeru, da razumijete posljedice i da ovo radite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
"actioncomplete": "Zahvat završen",
"actionfailed": "Radnja nije uspjela",
@@ -1660,9 +1711,9 @@
"delete-edit-reasonlist": "Uredi razloge brisanja",
"delete-toobig": "Ova stranica ima veliku povijest uređivanja, preko $1 {{PLURAL:$1|promjene|promjena}}. Brisanje takvih stranica je ograničeno da se onemoguće slučajni problemi u radu {{SITENAME}}.",
"delete-warning-toobig": "Ova stranica ima veliku povijest uređivanja, preko $1 {{PLURAL:$1|promjene|promjena}}. Brisanje može poremetiti bazu podataka {{SITENAME}}; postupajte s oprezom.",
+ "deleteprotected": "Ne možete obrisati ovu stranicu jer je zaštićena.",
"deleting-backlinks-warning": "'''Upozorenje:''' brišete stranicu koja je uključena u druge ili druge stranice povezuju na nju.",
"rollback": "Ukloni posljednju promjenu",
- "rollback_short": "Ukloni",
"rollbacklink": "ukloni",
"rollbacklinkcount": "ukloni $1 {{PLURAL:$1|uređivanje|uređivanja}}",
"rollbacklinkcount-morethan": "ukloni više od $1 {{PLURAL:$1|uređivanje|uređivanja}}",
@@ -1711,9 +1762,10 @@
"protect-othertime": "Drugo vrijeme:",
"protect-othertime-op": "drugo vrijeme",
"protect-existing-expiry": "Postojeće vrijeme zaštite: $3, $2",
+ "protect-existing-expiry-infinity": "trenutačno vrijeme zaštićivanja: neograničeno",
"protect-otherreason": "Drugi/dodatni razlog:",
"protect-otherreason-op": "drugi/dodatni razlog",
- "protect-dropdown": "*Najčešći razlozi zaštićivanja\n** Učestalo vandaliziranje\n** Učestalo spamiranje\n** Neproduktivni uređivački rat\n** Zatrpavanje nedavnih promjena",
+ "protect-dropdown": "*Najčešći razlozi zaštićivanja:\n** učestalo vandaliziranje\n** učestalo spamiranje\n** neproduktivni uređivački rat\n** zatrpavanje nedavnih promjena\n** često korišten/složen predložak\n** stranica za razgovor blokiranog suradnika",
"protect-edit-reasonlist": "Uredi razloge zaštićivanja",
"protect-expiry-options": "1 sat:1 hour,1 dan:1 day,1 tjedan:1 week,2 tjedna:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godina:1 year,neograničeno:infinite",
"restriction-type": "Dopuštenje:",
@@ -1886,7 +1938,7 @@
"autoblocker": "Automatski ste blokirani jer je Vašu IP adresu nedavno koristio \"[[User:$1|$1]]\" koji je blokiran zbog: \"$2\".",
"blocklogpage": "Evidencija blokiranja",
"blocklog-showlog": "Ovaj suradnik je ranije blokiran.\nEvidencija blokiranja je prikazan ispod kao napomena:",
- "blocklog-showsuppresslog": "Ovaj suradnik je ranije blokiran i skriven.\nZapisnik skrivanja je prikazan ispod kao napomena:",
+ "blocklog-showsuppresslog": "Ovaj suradnik je ranije blokiran i skriven.\nEvidencija skrivanja je prikazana ispod kao napomena:",
"blocklogentry": "Blokiran je \"[[$1]]\" na rok $2 $3.",
"reblock-logentry": "promijenjene postavke blokiranja za [[$1]] na rok od $2 $3",
"blocklogtext": "Ovo je evidencija blokiranja i deblokiranja.\nNa popisu nema automatski blokiranih IP adresa.\nZa popis trenutačnih zabrana i blokiranja vidi [[Special:BlockList|popis blokiranja]].",
@@ -1964,7 +2016,7 @@
"movelogpage": "Evidencija premještanja",
"movelogpagetext": "Ispod je popis premještenih stranica.",
"movesubpage": "{{PLURAL:$1|Podstranica|Podstranice}}",
- "movesubpagetext": "Ova stranica ima $1 {{PLURAL:$1|podstarnicu|podstranice}} koje su prikazane ispod.",
+ "movesubpagetext": "Ova stranica ima $1 {{PLURAL:$1|podstranicu|podstranice|podstranica}} koje su prikazane ispod.",
"movenosubpage": "Ova stranica nema podstranica.",
"movereason": "Razlog:",
"revertmove": "vrati",
@@ -2072,18 +2124,14 @@
"import-rootpage-nosubpage": "Imenski prostor \"$1\" početne stranice ne dopušta podstranice.",
"importlogpage": "Evidencija uvoza članaka",
"importlogpagetext": "Administrativni uvoz stranica s poviješću uređivanja s drugih wikija.",
- "import-logentry-upload": "uvezeno [[$1]] uvozom datoteke",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}",
- "import-logentry-interwiki": "transwiki uvezeno $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|promjena|promjene|promjena}} od $2",
"javascripttest": "Testiranje JavaScripta",
- "javascripttest-title": "Izvršavaju se $1 testovi",
"javascripttest-pagetext-noframework": "Ova je stranica rezervirana za izvršavanje JavaScript testova.",
"javascripttest-pagetext-unknownframework": "Nepoznata testna okolina \"$1\".",
"javascripttest-pagetext-frameworks": "Molimo izaberite jednu od sljedećih testnih okolina: $1",
"javascripttest-pagetext-skins": "Izaberite temu (''skin'') za testiranje:",
"javascripttest-qunit-intro": "Pogledajte [$1 testnu dokumentaciju] na mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit testni alati",
"tooltip-pt-userpage": "Moja suradnička stranica",
"tooltip-pt-anonuserpage": "Suradnička stranica za IP adresu pod kojom uređujete",
"tooltip-pt-mytalk": "Moja stranica za razgovor",
@@ -2116,12 +2164,13 @@
"tooltip-n-recentchanges": "Popis nedavnih promjena u wikiju.",
"tooltip-n-randompage": "Učitaj slučajnu stranicu",
"tooltip-n-help": "Mjesto za pomoć suradnicima.",
- "tooltip-t-whatlinkshere": "Popis svih stranica koje sadrže poveznice ovamo",
+ "tooltip-t-whatlinkshere": "Popis stranica koje sadrže poveznice na ovu stranicu",
"tooltip-t-recentchangeslinked": "Nedavne promjene na stranicama na koje vode ovdašnje poveznice",
"tooltip-feed-rss": "RSS feed za ovu stranicu",
"tooltip-feed-atom": "Atom feed za ovu stranicu",
"tooltip-t-contributions": "Pogledaj popis suradnikovih doprinosa",
"tooltip-t-emailuser": "Pošalji suradniku e-mail",
+ "tooltip-t-info": "Više informacija o ovoj stranici",
"tooltip-t-upload": "Postavi slike i druge medije",
"tooltip-t-specialpages": "Popis posebnih stranica",
"tooltip-t-print": "Verzija za ispis ove stranice",
@@ -2169,7 +2218,7 @@
"spam_reverting": "Vraćam na posljednju inačicu koja ne sadrži poveznice na $1",
"spam_blanking": "Sve inačice sadrže poveznice na $1, brišem cjelokupni sadržaj",
"spam_deleting": "Sve inačice sadržale su poveznice na $1, brišem cjelokupni sadržaj",
- "simpleantispam-label": "Anti-spam provjera.\n'''Ne''' ispunjavajte ovo!",
+ "simpleantispam-label": "Anti-spam provjera.\n<strong>NE</strong> ispunjavajte ovo!",
"pageinfo-title": "Podatci o stranici \"$1\"",
"pageinfo-not-current": "Nema podataka o uređivanju za najstarija uređivanja stranice.",
"pageinfo-header-basic": "Osnovni podatci",
@@ -2185,7 +2234,6 @@
"pageinfo-robot-policy": "Status tražilice",
"pageinfo-robot-index": "Stranicu je moguće indeksirati",
"pageinfo-robot-noindex": "Indeksiranje stranice onemogućeno",
- "pageinfo-views": "Broj pregleda",
"pageinfo-watchers": "Broj pratitelja stranice",
"pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|suradnika koji prate ovu stranicu|suradnika koji prate ovu stranicu}}",
"pageinfo-redirects-name": "Broj preusmjeravanja na ovu stranicu",
@@ -2214,7 +2262,7 @@
"pageinfo-category-pages": "Broj stranica",
"pageinfo-category-subcats": "Broj podkategorija",
"pageinfo-category-files": "Broj datoteka",
- "markaspatrolleddiff": "Označi za pregledano",
+ "markaspatrolleddiff": "Označi pregledanim",
"markaspatrolledtext": "Označi ovaj članak pregledanim",
"markedaspatrolled": "Pregledano",
"markedaspatrolledtext": "Odabrana promjena [[:$1]] označena je pregledanom.",
@@ -2281,8 +2329,16 @@
"hours-ago": "prije $1 {{PLURAL:$1|sat|sata|sati}}",
"minutes-ago": "prije $1 {{PLURAL:$1|minute|minuta}}",
"seconds-ago": "prije $1 {{PLURAL:$1|sekunde|sekundi}}",
+ "monday-at": "u ponedjeljak u $1",
+ "tuesday-at": "u utorak u $1",
+ "wednesday-at": "u srijedu u $1",
+ "thursday-at": "u četvrtak u $1",
+ "friday-at": "u petak u $1",
+ "saturday-at": "u subotu u $1",
+ "sunday-at": "u nedjelju u $1",
+ "yesterday-at": "Jučer u $1",
"bad_image_list": "Rabi se sljedeći format:\n\nSamo retci koji počinju sa zvjezdicom su prikazani. Prva poveznica u retku mora biti poveznica na nevaljanu sliku.\nSvaka sljedeća poveznica u istom retku je izuzetak, npr. kod stranica gdje se slike pojavljuju ''inline''.",
- "variantname-sr-ec": "ћирилица",
+ "variantname-sr-ec": "ćirilica",
"variantname-sr-el": "latinica",
"metadata": "Metapodaci",
"metadata-help": "Ova datoteka sadržava dodatne podatke koje je vjerojatno dodala digitalna kamera ili skener u procesu snimanja odnosno digitalizacije. Ako je datoteka mijenjana, podatci možda nisu u skladu sa stvarnim stanjem.",
@@ -2627,7 +2683,6 @@
"exif-urgency-low": "Nisko ( $1 )",
"exif-urgency-high": "Visoko ($1)",
"exif-urgency-other": "Suradnički definiran prioritet ($1)",
- "watchlistall2": "sve",
"namespacesall": "sve",
"monthsall": "sve",
"confirmemail": "Potvrdite adresu e-pošte",
@@ -2663,10 +2718,13 @@
"confirm-watch-top": "Dodajte ovu stranicu na Vaš popis praćenih stranica",
"confirm-unwatch-button": "U redu",
"confirm-unwatch-top": "Ukloni ovu stranicu s popisa praćenja?",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← prethodna slika",
"imgmultipagenext": "sljedeća slika →",
"imgmultigo": "Kreni!",
"imgmultigoto": "Idi na stranicu $1",
+ "img-lang-default": "(zadani jezik)",
+ "img-lang-go": "Idi",
"ascending_abbrev": "rast",
"descending_abbrev": "pad",
"table_pager_next": "Sljedeća stranica",
@@ -2674,13 +2732,14 @@
"table_pager_first": "Prva stranica",
"table_pager_last": "Zadnja stranica",
"table_pager_limit": "Prikaži $1 slika po stranici",
- "table_pager_limit_label": "Stavke po stranici:",
+ "table_pager_limit_label": "Broj stavki po stranici:",
"table_pager_limit_submit": "Idi",
"table_pager_empty": "Nema rezultata",
"autosumm-blank": "uklonjen cjelokupni sadržaj stranice",
"autosumm-replace": "tekst stranice se zamjenjuje s '$1'",
"autoredircomment": "preusmjeravanje na [[$1]]",
"autosumm-new": "nova stranica: $1",
+ "autosumm-newblank": "stvorena prazna stranica",
"lag-warn-normal": "Moguće je da izmjene nastale posljednjih $1 {{PLURAL:$1|sekundu|sekundi}} neće biti vidljive na ovom popisu.",
"lag-warn-high": "Zbog kašnjenja baze podataka, moguće je da promjene napravljene u posljednjih $1 {{PLURAL:$1|sekundu|sekunde|sekundi}} nisu prikazane u popisu.",
"watchlistedit-normal-title": "Uredi popis praćenja",
@@ -2696,6 +2755,14 @@
"watchlistedit-raw-done": "Vaš popis praćenja je snimljen.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 stranica je dodana|$1 stranice su dodane}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 stranica je uklonjena|$1 stranice su ukonjene}}:",
+ "watchlistedit-clear-title": "Očišćen popis praćenja",
+ "watchlistedit-clear-legend": "Obriši popis praćenja",
+ "watchlistedit-clear-explain": "Sve stavke s popisa praćenja će biti izbrisane",
+ "watchlistedit-clear-titles": "Imena stranica:",
+ "watchlistedit-clear-submit": "Izbriši popis praćenja (ovo je nepovratno!)",
+ "watchlistedit-clear-done": "Vaš je popis praćenja obrisan.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|1 je stranica uklonjena|$1 su stranice ukonjene}}:",
+ "watchlisttools-clear": "Obriši popis praćenja",
"watchlisttools-view": "Pregled promjena praćenih stranica",
"watchlisttools-edit": "Pregled i uređivanje praćenih stranica",
"watchlisttools-raw": "Uređivanje praćenih stranica u okviru za uređivanje",
@@ -2752,11 +2819,10 @@
"hebrew-calendar-m11-gen": "ava",
"hebrew-calendar-m12-gen": "elula",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|razgovor]])",
- "unknown_extension_tag": "Nepoznat ''tag'' ekstenzije \"$1\"",
"duplicate-defaultsort": "'''Upozorenje:''' Razvrstavanje po \"$2\" poništava ranije razvrstavanje po \"$1\".",
"version": "Inačica softvera",
"version-extensions": "Instalirana proširenja",
- "version-skins": "Izgledi",
+ "version-skins": "Postavljeni izgledi",
"version-specialpages": "Posebne stranice",
"version-parserhooks": "Kuke parsera",
"version-variables": "Varijable",
@@ -2768,13 +2834,17 @@
"version-parser-function-hooks": "Kuke funkcija parsera",
"version-hook-name": "Ime kuke",
"version-hook-subscribedby": "Pretplaćeno od",
- "version-version": "(Inačica $1)",
+ "version-version": "($1)",
"version-license": "Licenca",
"version-ext-license": "Licenca",
+ "version-ext-colheader-name": "Dodatak",
+ "version-skin-colheader-name": "Izgled",
"version-ext-colheader-version": "Verzija",
"version-ext-colheader-license": "Licenca",
"version-ext-colheader-description": "Opis",
"version-ext-colheader-credits": "Autori",
+ "version-license-title": "Licencija za $1",
+ "version-license-not-found": "Za ovaj dodatak nema detaljnih informacija o licenciji.",
"version-poweredby-credits": "Ovaj wiki pogoni '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava © 2001-$1 $2.",
"version-poweredby-others": "ostali",
"version-credits-summary": "Željeli bismo zahvaliti sljedećim suradnicima na njihovom doprinosu [[Special:Version|MediaWikiju]].",
@@ -2785,6 +2855,8 @@
"version-entrypoints": "URL adresa instalacije",
"version-entrypoints-header-entrypoint": "Početna adresa",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Instalirane biblioteke",
+ "version-libraries-version": "Inačica",
"redirect-submit": "Idi",
"redirect-value": "Vrijednost:",
"redirect-user": "ID suradnika",
@@ -2813,6 +2885,7 @@
"specialpages-group-wiki": "Wiki podaci i alati",
"specialpages-group-redirects": "Preusmjeravajuće posebne stranice",
"specialpages-group-spam": "Spam alati",
+ "specialpages-group-developer": "Alati za razvijatelje",
"blankpage": "Prazna stranica",
"intentionallyblankpage": "Ova stranica je namjerno ostavljena praznom",
"external_image_whitelist": "#Ovaj redak ostavite točno ovakvim kakav je<pre>\n#Stavite ulomke s regularnim izrazom (samo dio koji ide između //) ispod\n#Ovo će biti usklađeno s URL-ovima vanjskih slika (hotlink)\n#Oni koji se poklapaju će biti prikazani kao slike, u suprotnom će biti prikazana samo poveznica do slike\n#Redovi koji počinju sa # smatraju se komentarom\n#Ovo je osjetljivo na velika slova\n\n#Stavite sve regularne izraze iznad ovog reda. Ostavite ovaj redak točno ovakvim kakav je</pre>",
@@ -2829,7 +2902,31 @@
"tags-active-yes": "Da",
"tags-active-no": "Ne",
"tags-edit": "uredi",
+ "tags-delete": "izbriši",
+ "tags-activate": "pokreni",
+ "tags-deactivate": "isključi",
"tags-hitcount": "$1 {{PLURAL:$1|promjena|promjene|promjena}}",
+ "tags-manage-no-permission": "Nemate pravo upravljati promjenama oznaka.",
+ "tags-create-heading": "Stvori novu oznaku",
+ "tags-create-tag-name": "Naziv oznake:",
+ "tags-create-reason": "Razlog:",
+ "tags-create-submit": "Stvori",
+ "tags-create-no-name": "Morate navesti ime oznake.",
+ "tags-create-already-exists": "Oznaka \"$1\" već postoji.",
+ "tags-create-warnings-below": "Želite li nastaviti stvaranje oznake?",
+ "tags-delete-title": "Izbriši oznaku",
+ "tags-delete-reason": "Razlog:",
+ "tags-delete-not-found": "Oznaka \"$1\" ne postoji.",
+ "tags-activate-title": "Pokreni oznaku",
+ "tags-activate-reason": "Razlog:",
+ "tags-activate-not-allowed": "Nije moguće pokrenuti oznaku \"$1\".",
+ "tags-activate-not-found": "Oznaka \"$1\" ne postoji.",
+ "tags-activate-submit": "Pokreni",
+ "tags-deactivate-title": "Isključi oznaku",
+ "tags-deactivate-question": "Isključit ćete oznaku \"$1\".",
+ "tags-deactivate-reason": "Razlog:",
+ "tags-deactivate-not-allowed": "Nije moguće isključiti oznaku \"$1\".",
+ "tags-deactivate-submit": "Isključi",
"comparepages": "Usporedite stranice",
"compare-page1": "Stranica 1",
"compare-page2": "Stranica 2",
@@ -2841,8 +2938,8 @@
"compare-revision-not-exists": "Navedena izmjena stranice ne postoji.",
"dberr-problems": "Ispričavamo se! Ova stranica ima tehničkih poteškoća.",
"dberr-again": "Pričekajte nekoliko minuta i ponovno učitajte.",
- "dberr-info": "(Ne mogu se spojiti na poslužitelj baze: $1)",
- "dberr-info-hidden": "(Ne mogu se spojiti na poslužitelj baze)",
+ "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.",
@@ -2859,6 +2956,9 @@
"htmlform-no": "Ne",
"htmlform-yes": "Da",
"htmlform-chosen-placeholder": "Odaberite opciju",
+ "htmlform-cloner-create": "Dodaj još",
+ "htmlform-cloner-delete": "Ukloni",
+ "htmlform-cloner-required": "Potrebna je barem jedna vrijednost.",
"sqlite-has-fts": "$1 s podrškom pretraživanja cijelog teksta",
"sqlite-no-fts": "$1 bez podrške pretraživanja cijelog teksta",
"logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
@@ -2898,19 +2998,23 @@
"logentry-upload-overwrite": "$1 је {{GENDER:$2|postavio|postavila}} novu inačicu $3",
"logentry-upload-revert": "$1 је {{GENDER:$2|postavio|postavila}} $3",
"rightsnone": "(suradnik)",
+ "revdelete-summary": "sažetak",
+ "feedback-adding": "Dodajem povratne informacije na stranicu...",
+ "feedback-back": "Natrag",
+ "feedback-bugcheck": "Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
+ "feedback-bugnew": "Provjereno. Prijavi novi \"bug\"",
"feedback-bugornote": "Ako ste spremni detaljno opisati tehnički problem molimo [$1 prijavite \"bug\"].\nInače, možete ispuniti jednostavan obrazac u nastavku. Vaš komentar biti će dodan na stranicu \"[$3 $2]\", zajedno s vašim suradničkim imenom i imenom internetskog preglednika koji rabite.",
- "feedback-subject": "Tema:",
- "feedback-message": "Poruka:",
"feedback-cancel": "Odustani",
- "feedback-submit": "Pošaljite povratnu informaciju",
- "feedback-adding": "Dodajem povratne informacije na stranicu...",
+ "feedback-close": "Gotovo",
+ "feedback-error-title": "Pogrješka",
"feedback-error1": "Pogreška: Neprepoznati rezultat od API funkcije",
"feedback-error2": "Pogreška: Uređivanje nije uspjelo",
"feedback-error3": "Pogreška: Nema odgovora od API funkcije",
+ "feedback-message": "Poruka:",
+ "feedback-subject": "Tema:",
+ "feedback-submit": "Predaj",
"feedback-thanks": "Hvala! Vaš odgovor je snimljen na stranicu \"[$2 $1]\".",
- "feedback-close": "Gotovo",
- "feedback-bugcheck": "Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
- "feedback-bugnew": "Provjereno. Prijavi novi \"bug\"",
+ "feedback-thanks-title": "Hvala!",
"searchsuggest-search": "Traži",
"searchsuggest-containing": "sadrži....",
"api-error-badaccess-groups": "Nemate ovlasti za postavljanje datoteka na ovu wiki.",
@@ -2973,5 +3077,24 @@
"expand_templates_remove_comments": "Ukloni komentare",
"expand_templates_remove_nowiki": "Ukloni <nowiki> tagove u rezultatima.",
"expand_templates_generate_xml": "Prikaži XML stablo",
- "expand_templates_preview": "Vidi kako će izgledati"
+ "expand_templates_preview": "Vidi kako će izgledati",
+ "mediastatistics": "Statistika datoteka",
+ "mediastatistics-summary": "Slijede statistike postavljenih datoteka koje pokazuju zadnju inačicu datoteke. Starije ili izbrisane inačice nisu prikazane.",
+ "headline-anchor-title": "Poveznica na ovaj odlomak",
+ "special-characters-group-latin": "latinica",
+ "special-characters-group-latinextended": "proširena latinica",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "simboli",
+ "special-characters-group-greek": "grčki",
+ "special-characters-group-cyrillic": "ćirilica",
+ "special-characters-group-arabic": "arapski",
+ "special-characters-group-persian": "Perzijski",
+ "special-characters-group-hebrew": "hebrejski",
+ "special-characters-group-bangla": "Bangla znakovi",
+ "special-characters-group-telugu": "telugu",
+ "special-characters-group-sinhala": "Sinhaleški znakovi",
+ "special-characters-group-gujarati": "Gudžaratski znakovi",
+ "special-characters-group-thai": "Tajlandski (tajski) znakovi",
+ "special-characters-group-lao": "Laoski znakovi",
+ "special-characters-group-khmer": "kmerski"
}
diff --git a/languages/i18n/hrx.json b/languages/i18n/hrx.json
index d51bf83d..301fa9ce 100644
--- a/languages/i18n/hrx.json
+++ b/languages/i18n/hrx.json
@@ -493,7 +493,6 @@
"passwordreset-emailsent-capture": "En Passwortzurücksetzung-E-Mail woard versandt, die unne oongezeicht weard.",
"passwordreset-emailerror-capture": "Die unne oongezeichte Passwortzurücksetzungs-E-Mail woard generiert, awer der Versand an {{GENDER:$2|den Benutzer|die Benutzrin}} ist gescheitert: $1",
"changeemail": "E-Mail-Adress ännre",
- "changeemail-header": "E-Mail-Adress ännre",
"changeemail-text": "Füll das Formular vollständig aus, um dein E-Mail-Adress zu ännre. Du musst dein Passwort oongewe, um die Ännrung zu bestätiche.",
"changeemail-no-info": "Du musst dich oonmelde, um uff die Seit direkt zuzugreife.",
"changeemail-oldemail": "Aktuell E-Mail-Adress:",
@@ -501,7 +500,6 @@
"changeemail-none": "(ken)",
"changeemail-password": "Dein {{SITENAME}}-Passwort:",
"changeemail-submit": "E-Mail-Adress ännre",
- "changeemail-cancel": "Abbreche",
"changeemail-throttled": "Du host keerzlich zu viele Oonmeldversuche unnernomm.\nBittachön woort $1, bevoar du das erneit versuchst.",
"resettokens": "Tokens zurücksetze",
"resettokens-text": "Du kannst Tokens zurücksetze, wo dir den Zugriff uff bestimmte private Date ermöchliche, wo mit deinem Benutzerkonto hier verknüpft sind.\n\nDu sollst das nuar mache, wenn du verguckt die Tokens versiehntlich mit jemandem geteilt host orrer dein Konto gefährdet ist.",
@@ -774,7 +772,6 @@
"mergehistory-same-destination": "Ausgangs- und Zielseit deerfe net identisch sin",
"mergehistory-reason": "Grund:",
"mergelog": "Vereinichungs-Logbuch",
- "pagemerge-logentry": "vereinichte [[$1]] in [[$2]] (Versione bis $3)",
"revertmerge": "Vereinichung rückgängich mache",
"mergelogpagetext": "Das ist das Logbuch von der vereinichte Versionsgeschichte.",
"history-title": "$1: Versionsgeschicht",
@@ -825,7 +822,6 @@
"searchall": "alle",
"showingresults": "Hier {{PLURAL:$1|ist '''1''' Ergebnis|sind '''$1''' Ergebnisse}}, beginnend mit Nummer '''$2.'''",
"showingresultsinrange": "Unne {{PLURAL:$1|weard <strong>en</strong> Ergebnis|werre bis zu <strong>$1</strong> Ergebnisse}} im Bereich <strong>$2</strong> bis <strong>$3</strong> oongezeicht.",
- "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' von '''$3'''|Ergebnisse '''$1–$2''' von '''$3'''}} für '''$4'''",
"search-nonefound": "Zu deiner Suchoonfroch wore ken Ergebnisse gefund.",
"powersearch-legend": "Erweiterte Such",
"powersearch-ns": "Such in Noomeräume:",
@@ -1410,14 +1406,11 @@
"randomincategory": "Zufälliche Seit von en Kategorie",
"randomincategory-invalidcategory": "\"$1\" ist ken gülticher Kategorieenoome.",
"randomincategory-nopages": "Es gebt kene Seite in [[:Category:$1]].",
- "randomincategory-selectcategory": "Zufälliche Seit aus der Kategorie: $1 $2",
- "randomincategory-selectcategory-submit": "Geh, los",
"randomredirect": "Zufällich Weiterleitung",
"randomredirect-nopages": "Im Noomeraum „$1“ sind ken Weiterleitunge voarhand.",
"statistics": "Statistik",
"statistics-header-pages": "Seitestatistik",
"statistics-header-edits": "Bearbeitungsstatistik",
- "statistics-header-views": "Seitenuffrufstatistik",
"statistics-header-users": "Benutzerstatistik",
"statistics-header-hooks": "Annre Statistike",
"statistics-articles": "Inhaltsseite",
@@ -1426,13 +1419,9 @@
"statistics-files": "Hochgeloodne Dateie",
"statistics-edits": "Seitebeoorbeitunge",
"statistics-edits-average": "Beoorbeitunge pro Seit im Doorrichschnitt",
- "statistics-views-total": "Seitenuffrufe gesamt",
- "statistics-views-total-desc": "Uffruf net voarhandner Seite und von Spezialseite werre net berücksichticht.",
- "statistics-views-peredit": "Jede Beoorbeitung ehre Seiteuffrufe",
"statistics-users": "Registrierte [[Special:ListUsers|Benutzer]]",
"statistics-users-active": "Aktive Benutzer",
"statistics-users-active-desc": "Benutzer mit Beoorbeitunge {{PLURAL:$1|während (im verloof von) der letzte 24 Stunde|während (im verloof von) der vergangne $1 Tooche}}",
- "statistics-mostpopular": "Meistbesuchte Seite",
"pageswithprop": "Seite mit en Seiteneichenschaft",
"pageswithprop-legend": "Seite mit en Seiteeichenschaft",
"pageswithprop-text": "Die Spezialseit tut Seite ufflistiere, wo en bestimmte Seiteeichenschaft verwenne.",
@@ -1473,7 +1462,6 @@
"uncategorizedtemplates": "Net kategorisierte Vorlage",
"unusedcategories": "Verwaiste Kategorie",
"unusedimages": "Verwaiste Dateie",
- "popularpages": "Beliebteste Seite",
"wantedcategories": "Gewünschte Kategorie",
"wantedpages": "Gewünschte Seite",
"wantedpages-badtitle": "Ungülticher Titel im Ergebnis: $1",
@@ -1535,7 +1523,6 @@
"querypage-disabled": "Die Spezialseit woard aus Gründe von der Leistungserhaltung deaktiviert.",
"booksources": "ISBN-Suche",
"booksources-search-legend": "Such noh Bezugsquelle für Bücher",
- "booksources-go": "Suche",
"booksources-text": "Dies ist en List mit Links zu Internetseite, wo neie und gebrauchte Bücher verkoofe. Dort kann das ooch weitre Informationen üwer die Bücher gebe. {{SITENAME}} ist mit kenem von der Oonbieter geschäftlich verbünd.",
"booksources-invalid-isbn": "Vermutlich ist die ISBN ungültich.\nBittschön prüf, ob die korrekt von der Quell üwertroohr woard.",
"specialloguserlabel": "Ausführender Benutzer:",
@@ -1668,7 +1655,7 @@
"watchlist-details": "Du beobachtest {{PLURAL:$1|en Seit|$1 Seite}}, ohne dass Diskussionsseite getrennt gezählt werre.",
"wlheader-enotif": "Der E-Mail-Benachrichtigungsdienst ist aktiviert.",
"wlheader-showupdated": "Seite mit noch net gesiehne Ännrunge werre'''fett''' dorgestellt.",
- "wlshowlast": "Zeich die Ännrunge von der letzte $1 Stunde, $2 Tooch orrer $3.",
+ "wlshowlast": "Zeich die Ännrunge von der letzte $1 Stunde, $2 Tooch orrer .",
"watchlist-options": "Oonzeichoptione",
"watching": "Beobachte …",
"unwatching": "Netmehr beobachte …",
@@ -2091,7 +2078,6 @@
"import": "Seite importiere",
"importinterwiki": "Transwiki-Import",
"import-interwiki-text": "Wähl en Wiki und en Seit für se importiere.\nDie Versionsdate und Benutzernoome bleibe dabei erhalt.\nAll Transwiki-Import-Aktione werre im [[Special:Log/import|Import-Logbuch]] protokolliert.",
- "import-interwiki-source": "Quell-Wiki/-Seit:",
"import-interwiki-history": "Alle Versione von der Seit importiere",
"import-interwiki-templates": "Alle Vorlooche einschliesse",
"import-interwiki-submit": "Importiere",
@@ -2244,7 +2230,6 @@
"pageinfo-robot-policy": "Indizierung doorrich Suchmaschine",
"pageinfo-robot-index": "Erlaubt",
"pageinfo-robot-noindex": " Net erlaubt",
- "pageinfo-views": "Oonzoohl von der Seiteuffrufe",
"pageinfo-watchers": "Oonzoohl von der Seit ehr Beobachter",
"pageinfo-few-watchers": "Wenicher wie {{PLURAL:$1|ein|$1}} Beobachter",
"pageinfo-redirects-name": "Oonzoohl von der Weiterleitunge zu der Seit",
@@ -2692,7 +2677,6 @@
"exif-urgency-low": "Niedrich ($1)",
"exif-urgency-high": "Hoch ($1)",
"exif-urgency-other": "Benutzerdefinierte Priorität ($1)",
- "watchlistall2": "all",
"namespacesall": "all",
"monthsall": "all",
"confirmemail": "E-Mail-Adress bestätiche (Authentifizierung)",
diff --git a/languages/i18n/hsb.json b/languages/i18n/hsb.json
index 79a42b23..ea835c9c 100644
--- a/languages/i18n/hsb.json
+++ b/languages/i18n/hsb.json
@@ -12,7 +12,8 @@
"Tlustulimu",
"לערי ריינהארט",
"아라",
- "Mikławš"
+ "Mikławš",
+ "Macofe"
]
},
"tog-underline": "Wotkazy podšmórnić:",
@@ -39,7 +40,7 @@
"tog-shownumberswatching": "Ličbu wobkedźbowacych wužiwarjow pokazać",
"tog-oldsig": "Eksistowaca signatura:",
"tog-fancysig": "Ze signaturu kaž z wikitekstom wobchadźeć (bjez awtomatiskeho wotkaza)",
- "tog-uselivepreview": "Live-přehlad wužiwać (eksperimentalny)",
+ "tog-uselivepreview": "Live-přehlad wužiwać",
"tog-forceeditsummary": "Mje skedźbnić, jeli zabudu zjeće",
"tog-watchlisthideown": "Moje změny we wobkedźbowankach schować",
"tog-watchlisthidebots": "Změny awtomatiskich programow (botow) we wobkedźbowankach schować",
@@ -128,7 +129,7 @@
"subcategories": "Podkategorije",
"category-media-header": "Medije w kategoriji „$1”",
"category-empty": "''Tuta kategorija tuchwilu žane nastawki abo medije njewobsahuje.''",
- "hidden-categories": "{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowanych kategorijow}}",
+ "hidden-categories": "{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}}",
"hidden-category-category": "Schowane kategorije",
"category-subcat-count": "{{PLURAL:$2|Tuta kategorija ma jenož slědowacu podkategoriju.|Tuta kategorija ma {{PLURAL:$1|slědowacu podkategoriju|$1 slědowacej podkategoriji|$1 slědowace podkategorije|$1 slědowacych podkategorijow}} z dohromady $2.}}",
"category-subcat-count-limited": "Tuta kategorija ma {{PLURAL:$1|slědowacu podkategoriju|slědowacej $1 podkategoriji|slědowace $1 podkategorije|slědowacych $1 podkategorijow}}:",
@@ -214,6 +215,7 @@
"otherlanguages": "W druhich rěčach",
"redirectedfrom": "(ze strony $1 sposrědkowany)",
"redirectpagesub": "Daleposrědkowanje",
+ "redirectto": "Dale sposrědkować do:",
"lastmodifiedat": "Strona bu posledni raz dnja $1 w $2 hodź. změnjena.",
"viewcount": "Strona bu {{PLURAL:$1|jónu|dwójce|$1 razy|$1 razow}} wopytana.",
"protectedpage": "Škitana strona",
@@ -226,6 +228,7 @@
"pool-queuefull": "Poolowa čakanska rynka je połna",
"pool-errorunknown": "Njeznaty zmylk:",
"pool-servererror": "Poolowa ličakowa słužba k dispoziciji njesteji ($1)",
+ "poolcounter-usage-error": "Wužiwanski zmylk: $1",
"aboutsite": "Wo {{GRAMMAR:lokatiw|{{SITENAME}}}}",
"aboutpage": "Project:Wo",
"copyright": "Wobsah pod $1 k dispoziciji steji, jeli njeje so hinak podało.",
@@ -235,6 +238,7 @@
"disclaimers": "Licencne postajenja",
"disclaimerpage": "Project:Impresum",
"edithelp": "Pomoc za wobdźěłowanje",
+ "helppage-top-gethelp": "Pomoc",
"mainpage": "Hłowna strona",
"mainpage-description": "Hłowna strona",
"policy-url": "Project:Směrnicy",
@@ -313,10 +317,13 @@
"readonly_lag": "Datowa banka bu awtomatisce zawrjena, mjeztym zo pospytuja wotwisne serwery datowych bankow hłowny serwer docpěć",
"internalerror": "Znutřkowny zmylk",
"internalerror_info": "Znutřkowny zmylk: $1",
+ "internalerror-fatal-exception": "Fatalny wuwzaćowy zmylk typa \"$1\"",
"filecopyerror": "Njebě móžno dataju „$1” do „$2” kopěrować.",
"filerenameerror": "Njebě móžno dataju „$1” do „$2” přemjenować.",
"filedeleteerror": "Njebě móžno dataju „$1” wušmórnyć.",
"directorycreateerror": "Zapis „$1“ njeda so wutworić.",
+ "directoryreadonlyerror": "Zapis \"$1\" da so jenož čitać.",
+ "directorynotreadableerror": "Zapis \"$1\" njeda so čitać.",
"filenotfound": "Njebě móžno dataju „$1” namakać.",
"unexpected": "Njewočakowana hódnota: \"$1\"=\"$2\".",
"formerror": "Zmylk: Njebě móžno formular wotesłać.",
@@ -338,7 +345,7 @@
"viewsourcetext": "Móžeš sej žórłowy tekst tuteje strony wobhladać a jón kopěrować:",
"viewyourtext": "Móžeš sej žórłowy tekst '''swojich změnow''' wobhladać a do slědowaceje strony kopěrować:",
"protectedinterface": "Tuta strona wobsahuje tekst za wužiwarski powjerch softwary na tutym wikiju a je škitana, zo by so znjewužiwanje zadźěwało.\nZo by přełožki za wšě wikije přidał abo změnił, wužij prošu [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizaciju.",
- "editinginterface": "'''Warnowanje:''' Wobdźěłuješ stronu, kotraž so wužiwa, zo by tekst za wužiwarski powjerch softwary k dispoziciji stajiła. Změny na stronje wuskutkuja so na napohlad wužiwarskeho powjercha za druhich wužiwarjow na tutym wikiju. Zo by přełožki za wšě wikije přidał abo změnił, wužij prošu [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizaciju.",
+ "editinginterface": "<strong>Warnowanje:</strong> Wobdźěłuješ stronu, kotraž so wužiwa, zo by tekst za wužiwarski powjerch softwary k dispoziciji stajiła. Změny na stronje wuskutkuja so na napohlad wužiwarskeho powjercha za druhich wužiwarjow na tutym wikiju.",
"cascadeprotected": "Tuta strona je za wobdźěłowanje zawrjena, dokelž je w {{PLURAL:$1|slědowacej stronje|slědowacymaj stronomaj|slědowacych stronach|slědowacych stronach}} zapřijata, {{PLURAL:$1|kotraž je|kotrejž stej|kotrež su|kotrež su}} přez kaskadowu opciju {{PLURAL:$1|škitana|škitanej|škitane|škitane}}:\n$2",
"namespaceprotected": "Nimaš dowolnosć, zo by stronu w mjenowym rumje '''$1''' wobdźěłał.",
"customcssprotected": "Nimaš prawo, zo by tutu CSS-stronu wobdźěłał, dokelž wosobinske nastajenja druheho wužiwarja wobsahuje.",
@@ -395,6 +402,8 @@
"userlogin-resetlink": "Přizjewjenske daty zabył?",
"userlogin-resetpassword-link": "Sy swoje hesło zabył?",
"userlogin-helplink2": "Pomoc při přizjewjenju",
+ "userlogin-loggedin": "Sy hižo jako {{GENDER:$1|$1 přizjewjeny|$1 přizjewjena}}. Wužij slědowacy formular, zo by so jako druhi wužiwar přizjewił.",
+ "userlogin-createanother": "Dalše konto załožić",
"createacct-emailrequired": "E-mejlowa adresa",
"createacct-emailoptional": "E-mejlowa adresa (opcionalny)",
"createacct-email-ph": "Zapodaj swoju e-mejlowu adresu",
@@ -550,7 +559,7 @@
"preview": "Přehlad",
"showpreview": "Přehlad pokazać",
"showdiff": "Změny pokazać",
- "anoneditwarning": "'''Kedźbu:''' Njejsy přizjewjeny. Twoja IP-adresa budźe so do wersijowych stawiznow strony přijimać.",
+ "anoneditwarning": "<strong>Warnowanje:</strong> Njejsy přizjewjeny. Twoja IP-adresa budźe zjawnje widźomna, hdyž něšto změniš. Jeli <strong>[$1 so přizjewiš]</strong> abo <strong>[$2 konto załožiš]</strong>, so twoje změny twojemu wužiwarskemu mjenu připokazaja, nimo druhich lěpšinow.",
"anonpreviewwarning": "''Njejsy přizjewjeny. Składowanje přenošuje twoju IP-adresu do wobdźěłowanskeje historije tuteje strony.''",
"missingsummary": "'''Kedźbu:''' Njejsy žane zjeće zapodał. Jeli hišće raz na \"{{int:savearticle}}\" kliknješ, budźe so twoja změna bjez njeho składować.",
"missingcommenttext": "Prošu zapodaj komentar.",
@@ -661,10 +670,10 @@
"parser-template-recursion-depth-warning": "Limit za rekursijnu hłubokosć předłohi překročeny ($1)",
"language-converter-depth-warning": "Limit hłubokosće rěčneho konwertera překročena ($1)",
"node-count-exceeded-category": "Strony, hdźež ličba sukow je překročena",
- "node-count-exceeded-category-desc": "Kategorija za strony, hdźež ličba sukow je překročena.",
+ "node-count-exceeded-category-desc": "Tuta strona překroča maksimalnu ličbu sukow.",
"node-count-exceeded-warning": "Strona je ličbu sukow překročiła",
"expansion-depth-exceeded-category": "Strony, hdźež ekspansiska hłubokosć je překročena",
- "expansion-depth-exceeded-category-desc": "To je kategorija za strony, hdźež ekspansiska hłubokosć je překročena.",
+ "expansion-depth-exceeded-category-desc": "Strona překroša maksimalnu ekspansisku hłubokosć.",
"expansion-depth-exceeded-warning": "Strona je ekspansisku hłubokosć překročił",
"parser-unstrip-loop-warning": "Njeskónčna sekla namakana",
"parser-unstrip-recursion-limit": "Rekursiska hranica překročena ($1)",
@@ -705,7 +714,7 @@
"history-feed-empty": "Strona, kotruž sy požadał, njeeksistuje. Bu snano z wikija wotstronjena abo přesunjena. Móžeš tu [[Special:Search|w {{SITENAME}}]] za stronami z podobnym titulom pytać.",
"rev-deleted-comment": "(Zjeće wotstronjene)",
"rev-deleted-user": "(wužiwarske mjeno wotstronjene)",
- "rev-deleted-event": "(Protokolowa akcija bu wotstronjena)",
+ "rev-deleted-event": "(Protokolowe podrobnosće su so wotstronili)",
"rev-deleted-user-contribs": "[wužiwarske mjeno wotstronjene abo IP-adresa wotstronjena - změna mjez přinoškami schowana]",
"rev-deleted-text-permission": "Tuta wersija strony bu '''wušmórnjena'''.\nHlej podrobnosće w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolu wušmórnjenjow].",
"rev-deleted-text-unhide": "Tuta wersija strony bu '''wušmórnjena'''.\nHlej podrobnosće w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokolu wušmórnjenjow].\nMóžeš [$1 sej tutu wersiju wobhladać], jeli chceš pokročować.",
@@ -732,13 +741,13 @@
"revdelete-text-text": "Zhašane wersije wostanu hišće we wersijowej historiji, ale dźěle jich wobsaha njebudu přistupne zjawnosći.",
"revdelete-text-file": "Zhašane datajowe wersije wostanu w datajowej historiji, ale dźěle jich wobsaha njebudu přistupne zjawnosći.",
"logdelete-text": "Zhašane protokolowe zapiski wostanu hišće w protokolach, ale dźěle jich wobsaha njebudu přistupne zjawnosći.",
- "revdelete-text-others": "Druzy administratorojo na {{GRAMMAR:lokatiw|{{SITENAME}}}} móža hišće na schowany wobsah přistup měć a móža jón zaso přez samsny wužiwarski powjerch wobnowić, chibazo su přidatne wobmjezowanja.",
+ "revdelete-text-others": "Druzy administratorojo móža hišće na schowany wobsah přistup měć a jón zaso wobnowić, chibazo su přidatne wobmjezowanja.",
"revdelete-confirm": "Prošu potwjerdź, zo chceš to činić, zo rozumiš konsekwency a zo činiš to po [[{{MediaWiki:Policy-url}}|prawidłach]].",
"revdelete-suppress-text": "Potłóčenje dyrbjało so '''jenož''' za slědowace pady wužiwać:\n* Potencielnje křiwdźace informacije\n* Njepřihódne wosobinske informacije\n*: ''Bydlenske adresy a telefonowe čisła, čisła socialneho zawěsćenja atd.''",
"revdelete-legend": "Wobmjezowanja za widźomnosć nastajić",
"revdelete-hide-text": "Tekst wersije",
"revdelete-hide-image": "Wobsah wobraza schować",
- "revdelete-hide-name": "Akciju a cil schować",
+ "revdelete-hide-name": "Cil a parametry schować",
"revdelete-hide-comment": "Zjeće změnow",
"revdelete-hide-user": "Mjeno/IP-adresa wobdźěłarja",
"revdelete-hide-restricted": "Daty wot administratorow kaž tež te druhich wužiwarjow potłóčić",
@@ -791,7 +800,6 @@
"mergehistory-same-destination": "Žórłowa a cilowa strona njesmějetej identiskej być",
"mergehistory-reason": "Přičina:",
"mergelog": "Protokol zjednoćenja",
- "pagemerge-logentry": "[[$1]] z [[$2]] zjednoćeny (do $3 {{PLURAL:$3|wersije|wersijow|wersijow|wersijow}})",
"revertmerge": "Zjednoćenje cofnyć",
"mergelogpagetext": "Deleka je lisćina najaktualnišich zjednoćenjow stawiznow dweju stronow.",
"history-title": "$1: Wersijowe stawizny",
@@ -855,7 +863,7 @@
"preferences": "Nastajenja",
"mypreferences": "Nastajenja",
"prefs-edits": "Ličba změnow:",
- "prefsnologintext2": "Dyrbiš so $1, zo by wužiwarske nastajenja postajił.",
+ "prefsnologintext2": "Prošu přizjew so, zo by swoje nastajenja změnił.",
"prefs-skin": "Drasta",
"skin-preview": "Přehlad",
"datedefault": "Žane nastajenje",
@@ -933,7 +941,7 @@
"gender-female": "Wona wobdźěłuje wikistrony",
"prefs-help-gender": "Tute podaće je opcionalne:\nSoftwara wužiwa jeho hódnotu, zo by će z pomocu wotpowědneho gramatikaliskeho roda narěčała a druhich na tebje pokazała.\nTuta informacija budźe zjawna.",
"email": "E-mejl",
- "prefs-help-realname": "* Woprawdźite mjeno (opcionalne): jeli so rozsudźiš to zapodać, budźe to so wužiwać, zo by tebi woprawnjenje za twoje dźěło dało.",
+ "prefs-help-realname": "Woprawdźite mjeno je opcionalne.\nJeli so rozsudźiš to zapodać, budźe to so wužiwać, zo by tebi woprawnjenje za twoje dźěło dało.",
"prefs-help-email": "E-mejlowa adresa je opcionalna, ale zmóžnja ći nowe hesło emejlować, jeli sy swoje hesło zabył.",
"prefs-help-email-others": "Móžeš tež druhim dowolić, so z tobu přez swoju diskusijnu stronu do zwiska stajić, bjeztoho zo dyrbiš swoju identitu přeradźić.",
"prefs-help-email-required": "E-mejlowa adresa je trěbna.",
@@ -1027,7 +1035,7 @@
"right-deletedtext": "Wušmórnjeny tekst a změny mjez wušmórnjenymi wersijemi sej wobhladać",
"right-browsearchive": "Zhašane strony pytać",
"right-undelete": "Strony wobnowić",
- "right-suppressrevision": "Wersije, kotrež su před administratorami schowane, přepruwować a wobnowić",
+ "right-suppressrevision": "Specifiske wersije stronow napřećiwo wšěm wužiwarjam pokazać a schować",
"right-viewsuppressed": "Před wužiwarjemi schowane wersije sej wobhladać",
"right-suppressionlog": "Priwatne protokole wobhladać",
"right-block": "Druhich wužiwarjow při wobdźěłowanju haćić",
@@ -1127,7 +1135,7 @@
"recentchanges-legend-heading": "'''Legenda:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hlej tež [[Special:NewPages|lisćinu nowych stronow]])",
"recentchanges-legend-plusminus": "(''±123'')",
- "rcnotefrom": "Deleka so změny wot <strong>$2</strong> pokazuja (hač k <strong>$1</strong>).",
+ "rcnotefrom": "Deleka so {{PLURAL:$5|změna|změnje|změny}} wot <strong>$3, $4</strong> {{PLURAL:$5|pokazuje|pokazujetej|pokazuja}} (hač k <strong>$1</strong>).",
"rclistfrom": "Jenož změny wot $3, $2 pokazać.",
"rcshowhideminor": "snadne změny $1",
"rcshowhideminor-show": "pokazać",
@@ -1182,9 +1190,9 @@
"uploaderror": "Zmylk při nahrawanju",
"upload-recreate-warning": "'''Warnowanje: Dataja z tym mjenom je so zhašała abo přesunyła.'''\n\nProtokolej zhašenjow a přesunjenjow za tutu stronu stej tu k dobroćiwemu wužiwanju podatej:",
"uploadtext": "Wužij slědowacy formular, zo by nowe dataje nahrał.\nZo by prjedy nahrate dataje wobhladał abo pytał dźi k [[Special:FileList|lisćinje nahratych datajow]], nahraća so tež w [[Special:Log/upload|protokolu nahraćow]], wušmórnjenja [[Special:Log/delete|protokolu wušmornjenjow]] protokoluja.\n\nZo by dataju do strony zapřijał, wužij wotkaz w jednej ze slědowacych formow:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dataja.jpg]]</nowiki></code>''', zo by połnu wersiju dataje wužiwał\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dataja.png|200px|thumb|left|alternatiwny tekst]]</nowiki></code>''', zo by wobraz ze šěrokosću 200 pikselow do kašćika na lěwej kromje z alternatiwnym tekstom jako wopisanje wužiwał\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dataja.ogg]]</nowiki></code>''' zo by direktnje k dataji wotkazał, bjeztoho zo by so dataja zwobrazniła",
- "upload-permitted": "Dowolene datajowe typy: $1.",
- "upload-preferred": "Preferowane datajowe typy: $1.",
- "upload-prohibited": "Zakazane datajowe typy: $1.",
+ "upload-permitted": "{{PLURAL:$2|Dowoleny datajowy typ|Dowolenej datajowej typaj|Dowolene datajowe typy}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Preferowany datajowy typ|preferowanej datajowej typaj|Preferowane datajowe typy}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Zakazany datajowy typ|Zakazanej datajowej typaj|Zakazane datajowe typy}}: $1.",
"uploadlogpage": "Protokol nahraćow",
"uploadlogpagetext": "Deleka je lisćina najnowšich nahratych datajow.\nHlej [[Special:NewFiles|galeriju nowych datajow]] za wizuelny přehlad.",
"filename": "Mjeno dataje",
@@ -1442,7 +1450,6 @@
"statistics": "Statistika",
"statistics-header-pages": "Statistika stronow",
"statistics-header-edits": "Wobdźěłanska statistika",
- "statistics-header-views": "Statistiku wobhladać",
"statistics-header-users": "Statistika wužiwarjow",
"statistics-header-hooks": "Druha statistika",
"statistics-articles": "Wobsahowe strony",
@@ -1451,13 +1458,9 @@
"statistics-files": "Nahrate dataje",
"statistics-edits": "Změny stronow wot załoženja {{SITENAME}}",
"statistics-edits-average": "Změny na stronu w přerězku",
- "statistics-views-total": "Zwobraznjenja dohromady",
- "statistics-views-total-desc": "Pohlady do njeeksistowacych stronow a specialnych stronow njejsu zapřijate",
- "statistics-views-peredit": "Zwobraznjenja na změnu",
"statistics-users": "Zregistrowani [[Special:ListUsers|wužiwarjo]]",
"statistics-users-active": "Aktiwni wužiwarjo",
"statistics-users-active-desc": "Wužiwarjo, kotřiž su {{PLURAL:$1|wčera|w zańdźenymaj $1 dnjomaj|w zańdźenych $1 dnjach|w zańdźenych $1 dnjach}} aktiwni byli",
- "statistics-mostpopular": "Najhusćišo wopytowane strony",
"pageswithprop": "Strony z kajkosću strony",
"pageswithprop-legend": "Strony z kajkosću strony",
"pageswithprop-text": "Tuta strona nalistuje strony, kotrež wěstu kajkosć strony wužiwaja.",
@@ -1498,9 +1501,9 @@
"uncategorizedtemplates": "Njekategorizowane předłohi",
"unusedcategories": "Njewužiwane kategorije",
"unusedimages": "Njewužiwane dataje",
- "popularpages": "Často wopytowane strony",
"wantedcategories": "Požadane kategorije",
"wantedpages": "Požadane strony",
+ "wantedpages-summary": "Tuta specialna strona naliči wšě hišće njeeksistowace strony, na kotrež eksistowace strony hižo wotkazuja.",
"wantedpages-badtitle": "Njepłaćiwy titul we wuslědku: $1",
"wantedfiles": "Požadane dataje",
"wantedfiletext-cat": "Slědowace dataje so wužiwaja, ale njeeksistuju. Dataje z cuzych repozitorijow hodźa so nalistować, byrnjež eksistowali. Tajke wopačne pozitiwy su <del>přešmórnjene</del>. Nimo toho so strony w [[:$1]] nalistuja, kotrež dataje zasadźuja, kotrež njeeksistuja.",
@@ -1561,7 +1564,6 @@
"querypage-disabled": "Tuta specialna strona je z wukonowych přičinow znjemóžnjena.",
"booksources": "Pytanje po ISBN",
"booksources-search-legend": "Žórła za knihi pytać",
- "booksources-go": "Pytać",
"booksources-text": "To je lisćina wotkazow k druhim sydłam, kotrež nowe a trjebane knihi předawaja. Tam móžeš tež dalše informacije wo knihach dóstać, kotrež pytaš:",
"booksources-invalid-isbn": "Podate ISBN-čisło njezda so płaćiwe być; přepruwuj za zmylkami, z tym zo z orginialneho žórła kopěruješ.",
"specialloguserlabel": "Wukonjer:",
@@ -1638,8 +1640,8 @@
"trackingcategories-desc": "Kriterije za zapřijimanje kategorije",
"noindex-category-desc": "Tuta strona so přez boćiki njeindeksuje, dokelž ma magiske słowo <code><nowiki>__NOINDEX__</nowiki></code> na sebi a je w mjenowym rumje, hdźež chorhojčka je dowolena.",
"index-category-desc": "Strona je <code><nowiki>__INDEX__</nowiki></code> na sebi (a je w mjenowym rumje, hdźež ta chorhojčak je dowolena), a tohodla so přez boćiki indeksuje, hdźež so to normalnje njestawa.",
- "post-expand-template-inclusion-category-desc": "Po ekspandowanju wšěch předłohow, je strona wjetša hač <code>$wgMaxArticleSize</code>, tohodla njejsu so někotre předłohi ekspandowali.",
- "post-expand-template-argument-category-desc": "Po ekspandowanju předłohoweho argumenta (něšto w trójnych kwaklatych spinkach kaž <code>{{{přikład}}}</code>), strona je wjetša hač <code>$wgMaxArticleSize</code>.",
+ "post-expand-template-inclusion-category-desc": "Po ekspansiji wšěch předłohow je strona wjetša hač <code>$wgMaxArticleSize</code>, tohodla njejsu so někotre předłohi ekspandowali.",
+ "post-expand-template-argument-category-desc": "Po ekspandowanju předłohoweho argumenta (něšto w trójnych zhibowanych spinkach kaž <code>{{{přikład}}}</code>), strona je wjetša hač <code>$wgMaxArticleSize</code>.",
"expensive-parserfunction-category-desc": "Přewjele naročnych parserowych funkcijow (kaž <code>#ifexist</code>) je so do strony zasadźiło. Hlej [http://www.mediawiki.org/wiki/Special:MyLanguageManual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
"broken-file-category-desc": "Kategorija je so přidała, jeli strona wobsahuje njepłaćiwy datajowy wotkaz (wotkaz za zasadźenje dataje, jeli dataja njeeksistuje).",
"hidden-category-category-desc": "To je kategorija z <code><nowiki>__HIDDENCAT__</nowiki></code>, kotrež standardnje jeje zwobraznjenju w kašćiku kategorijowych wotkazow na stronje zadźěwa.",
@@ -1697,7 +1699,7 @@
"wlheader-enotif": "E-mejlowa zdźělenska słužba je zmóžnjena.",
"wlheader-showupdated": "Strony, kotrež su so po twojim poslednim wopyće změnili, so '''tučne''' pokazuja.",
"wlnote": "Deleka {{PLURAL:$1|je poslednja změna|stej poslednjej '''$1''' změnje|su poslednje '''$1''' změny|je poslednich '''$1''' změnow}} za {{PLURAL:$2|poslednju hodźinu|poslednje '''$2''' hodźinje|poslednje '''$2''' hodźiny|poslednje '''$2''' hodźin}}, staw : $3, $4.",
- "wlshowlast": "Poslednje $1 hodź. - $2 dnjow - $3 pokazać",
+ "wlshowlast": "Poslednje $1 hodź. - $2 dnjow - pokazać",
"watchlist-options": "Opcije wobkedźbowankow",
"watching": "Wobkedźbuju…",
"unwatching": "Njewobkedźbuju…",
@@ -1745,7 +1747,6 @@
"delete-warning-toobig": "Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje móže operacije datoweje banki {{SITENAME}} přetorhnyć; pokročuj z kedźbliwosću.",
"deleting-backlinks-warning": "'''Warnowanje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druhe strony]] wotkazuja k stronje abo strona je druhdźe zapřijata, kotruž chceš zhašeć.",
"rollback": "Změny cofnyć",
- "rollback_short": "Cofnyć",
"rollbacklink": "Cofnyć",
"rollbacklinkcount": "$1 {{PLURAL:$1|změnu|změnje|změny|změnow}} cofnyć",
"rollbacklinkcount-morethan": "přez $1 {{PLURAL:$1|změnu|změnje|změny|změnow}} cofnyć",
@@ -2167,18 +2168,14 @@
"import-rootpage-nosubpage": "Mjenowy rum \"$1\" korjenjoweje strony njedowola podstrony.",
"importlogpage": "Protokol importow",
"importlogpagetext": "To je lisćina importowanych stronow ze stawiznami z druhich wikijow.",
- "import-logentry-upload": "strona [[$1]] bu přez nahraće importowana",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}}",
- "import-logentry-interwiki": "je stronu $1 z druheho wikija přenjesł",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} z $2 {{PLURAL:$1|importowana|importowanej|importowane|importowane}}",
"javascripttest": "JavaScriptowy test",
- "javascripttest-title": "Testy $1 so přewjedu",
"javascripttest-pagetext-noframework": "Tuta strona je za přewjedźenje javascriptowych testow přewostajena.",
"javascripttest-pagetext-unknownframework": "Njeznaty wobłuk \"$1\".",
"javascripttest-pagetext-frameworks": "Prošu wubjer jedyn ze slědowacych testowanskich wobłukow: $1",
"javascripttest-pagetext-skins": "Wubjer drastu za přewjedźenje testow:",
"javascripttest-qunit-intro": "Hlej [$1 testowansku dokumentaciju] na mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit Test Suite",
"tooltip-pt-userpage": "Twoja wužiwarska strona",
"tooltip-pt-anonuserpage": "Wužiwarska strona IP-adresy, z kotrejž tuchwilu dźěłaš",
"tooltip-pt-mytalk": "Twoja diskusijna strona",
@@ -2281,7 +2278,6 @@
"pageinfo-robot-policy": "Indicěrowanje přez roboty",
"pageinfo-robot-index": "Dowoleny",
"pageinfo-robot-noindex": "Zakazany",
- "pageinfo-views": "Ličba zwobraznjenjow",
"pageinfo-watchers": "Ličba wobkedźbowarjow strony",
"pageinfo-few-watchers": "Mjenje hač $1 {{PLURAL:$1|wobkedźbowar|wobkedźbowarjej|wobkedźbowarje|wobkedźbowarjow}}",
"pageinfo-redirects-name": "Ličba dalesposrědkowanjow k tutej stronje",
@@ -2732,7 +2728,6 @@
"exif-urgency-low": "Niska ($1)",
"exif-urgency-high": "Wysoka ($1)",
"exif-urgency-other": "Swójska priorita ($1)",
- "watchlistall2": "wšě",
"namespacesall": "wšě",
"monthsall": "wšě",
"confirmemail": "Emailowu adresu wobkrućić",
@@ -2821,7 +2816,6 @@
"watchlisttools-raw": "Lisćinowy format wobdźěłać (import/eksport)",
"iranian-calendar-m2": "Ordibehešt",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusija]])",
- "unknown_extension_tag": "Njeznata taflička rozšěrjenja \"$1\"",
"duplicate-defaultsort": "Warnowanje: Standardny sortěrowonski kluč (DEFAULTSORTKEY) \"$2\" přepisa prjedawšu sortěrowanski kluč \"$1\".",
"version": "Wersija",
"version-extensions": "Instalowane rozšěrjenja",
@@ -2837,7 +2831,7 @@
"version-parser-function-hooks": "Parserowe funkcije",
"version-hook-name": "Mjeno hoki",
"version-hook-subscribedby": "Abonowany wot",
- "version-version": "(Wersija $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[žane mjeno]",
"version-license": "Licenca MediaWiki",
"version-ext-license": "Licenca",
@@ -2897,6 +2891,7 @@
"specialpages-group-wiki": "Daty a nastroje",
"specialpages-group-redirects": "Daleposrědkowace specialne strony",
"specialpages-group-spam": "Spamowe nastroje",
+ "specialpages-group-developer": "Nastroje wuwiwarjow",
"blankpage": "Prózdna strona",
"intentionallyblankpage": "Tuta strona je z wotpohladom prózdna.",
"external_image_whitelist": " #Wostaj tutu linku eksaktnje kaž je<pre>\n#Zapodaj deleka fragmenty regularnych wurazow (jenož tón dźěl mjez //)\n#Tute přirunuja so z URL eksternych wobrazow\n#Přihódne zwobraznja so jako wobrazy, hewak so jenož wotkaz k wobrazej pokaza\n#Z linkami, kotrež so z # započinaja, wobchadźeja kaž komentary\n#To na wulkopisanje njedźiwa\n\n#Zapodaj wšě fragmenty regularnych wurazow nad tutej linku. Wostaj tutu linku eksaktnje kaž je</pre>",
@@ -2986,19 +2981,20 @@
"logentry-upload-overwrite": "$1 je nowu wersiju $3 {{GENDER:$2|nahrał|nahrała}}",
"logentry-upload-revert": "$1 je $3 {{GENDER:$2|nahrał|nahrała}}",
"rightsnone": "(ničo)",
+ "revdelete-summary": "zjeće wobdźěłać",
+ "feedback-adding": "Komentar so stronje přidawa...",
+ "feedback-bugcheck": "Wulkotnje! Skontroluj jenož, hač to jedyn z [$1 znatych zmylkow] njeje.",
+ "feedback-bugnew": "Sym to skontrolował. Nowy zmylk zdźělić",
"feedback-bugornote": "Jeli sy zwólniwy, techniski problem nadrobnje wopisać, [$1 zdźěl prošu zmylk].\nHewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so stronje \"[$3 $2]\", z twojim wužiwarskim mjenom a z wobhladowakom, kotryž wužiwaš.",
- "feedback-subject": "Tema:",
- "feedback-message": "Powěsć:",
"feedback-cancel": "Přetorhnyć",
- "feedback-submit": "Komentar wotpósłać",
- "feedback-adding": "Komentar so stronje přidawa...",
+ "feedback-close": "Dokónčeny",
"feedback-error1": "Zmylk: Njepřipóznaty wuslědk wot API",
"feedback-error2": "Zmylk: Wobdźěłanje je so njeporadźiło",
"feedback-error3": "Zmylk: Žana wotmołwa wot API",
+ "feedback-message": "Powěsć:",
+ "feedback-subject": "Tema:",
+ "feedback-submit": "Wotpósłać",
"feedback-thanks": "Dźakujemy so! Twój komentar je so k stronje \"[$2 $1]\" pósłał.",
- "feedback-close": "Dokónčeny",
- "feedback-bugcheck": "Wulkotnje! Skontroluj jenož, hač to jedyn z [$1 znatych zmylkow] njeje.",
- "feedback-bugnew": "Sym to skontrolował. Nowy zmylk zdźělić",
"searchsuggest-search": "Pytać",
"searchsuggest-containing": "wobsahuje...",
"api-error-badaccess-groups": "Nimaš prawo dataje do tutoho wikija nahrać.",
@@ -3089,5 +3085,27 @@
"log-description-pagelang": "To je protokol změnow na rěčach stronow.",
"logentry-pagelang-pagelang": "$1 je rěč strony za $3 wot $4 do $5 {{GENDER:$2|změnił|změniła}}.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (zmóžnjeny)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''znjemóžnjeny''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''znjemóžnjeny''')",
+ "special-characters-group-latin": "Łaćonske",
+ "special-characters-group-latinextended": "Łaćonske rozšěrjene",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symbole",
+ "special-characters-group-greek": "Grjekske",
+ "special-characters-group-cyrillic": "Kyriliske",
+ "special-characters-group-arabic": "Arabske",
+ "special-characters-group-arabicextended": "Rozšěrjena arabšćina",
+ "special-characters-group-persian": "Persiske",
+ "special-characters-group-hebrew": "Hebrejske",
+ "special-characters-group-bangla": "Bengalšćina",
+ "special-characters-group-tamil": "Tamilšćina",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalezišćina",
+ "special-characters-group-gujarati": "Gudźarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thailandšćina",
+ "special-characters-group-lao": "Laošćina",
+ "special-characters-group-khmer": "Khmeršćina",
+ "special-characters-title-endash": "krótka ležaca smužka",
+ "special-characters-title-emdash": "dołha ležaca smužka",
+ "special-characters-title-minus": "minusowe znamješko"
}
diff --git a/languages/i18n/ht.json b/languages/i18n/ht.json
index f006760c..cc114db7 100644
--- a/languages/i18n/ht.json
+++ b/languages/i18n/ht.json
@@ -673,7 +673,6 @@
"pager-older-n": "{{PLURAL:$1|pi vye|$1 pi vye yo}}",
"booksources": "Ouvraj referans yo",
"booksources-search-legend": "Chache nan lis ouvraj ki sèvi pou referans",
- "booksources-go": "Ale",
"specialloguserlabel": "itilizatè :",
"speciallogtitlelabel": "Tit :",
"log": "Jounal yo",
@@ -701,7 +700,7 @@
"watchthispage": "Swiv paj sa a",
"unwatch": "Pa swiv ankò",
"watchlist-details": "W ap swiv {{PLURAL:$1|paj|paj}}, san konte paj diskisyon yo.",
- "wlshowlast": "Montre dènye $1 è yo, dènye $2 jou yo, oubyen $3.",
+ "wlshowlast": "Montre dènye $1 è yo, dènye $2 jou yo, oubyen .",
"watchlist-options": "Opsyon pou lis swivi",
"watching": "Swiv...",
"unwatching": "Fini swiv paj sa a...",
@@ -868,7 +867,6 @@
"metadata-expand": "Montre detay konplè yo",
"metadata-collapse": "Kache enfòmasyon ak tout detay yo",
"metadata-fields": "Chan metadone EXIF ki liste nan mesaj sa a ap parèt nan paj deskripsyon imaj la lè tab metadone a ap pi piti. Lòt chan yo ap kache pa defo.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "tout",
"namespacesall": "Tout",
"monthsall": "tout",
"watchlisttools-view": "Wè chanjman enpòtan yo",
@@ -877,5 +875,6 @@
"version": "Vèsyon",
"specialpages": "Paj espesyal yo",
"htmlform-reset": "Revoke chanjman yo",
- "revdelete-restricted": "aplike restriksyon sa yo pou administratè yo"
+ "revdelete-restricted": "aplike restriksyon sa yo pou administratè yo",
+ "revdelete-summary": "somè pou modifikasyon"
}
diff --git a/languages/i18n/hu.json b/languages/i18n/hu.json
index 6c735f7e..5611b473 100644
--- a/languages/i18n/hu.json
+++ b/languages/i18n/hu.json
@@ -36,7 +36,9 @@
"아라",
"Csega",
"ViDam",
- "Adam78"
+ "Adam78",
+ "Grin",
+ "Macofe"
]
},
"tog-underline": "Hivatkozások aláhúzása:",
@@ -53,6 +55,7 @@
"tog-watchdefault": "Az általam szerkesztett lapok és fájlok felvétele a figyelőlistámra",
"tog-watchmoves": "Az általam átnevezett lapok és fájlok felvétele a figyelőlistámra",
"tog-watchdeletion": "Az általam törölt lapok és fájlok felvétele a figyelőlistámra",
+ "tog-watchrollback": "Az általam visszaállított lapok felvétele a figyelőlistámra",
"tog-minordefault": "Alapértelmezetten minden szerkesztésemet jelölje aprónak",
"tog-previewontop": "Előnézet megjelenítése a szerkesztőablak előtt",
"tog-previewonfirst": "Előnézet mutatása az első szerkesztésnél",
@@ -63,7 +66,7 @@
"tog-shownumberswatching": "A lapot figyelő szerkesztők számának megjelenítése",
"tog-oldsig": "A jelenlegi aláírás:",
"tog-fancysig": "Az aláírás wikiszöveg (nem lesz automatikusan hivatkozásba rakva)",
- "tog-uselivepreview": "Élő előnézet használata (kísérleti)",
+ "tog-uselivepreview": "Élő előnézet használata",
"tog-forceeditsummary": "Figyelmeztessen, ha nem adok meg szerkesztési összefoglalót",
"tog-watchlisthideown": "Saját szerkesztések elrejtése",
"tog-watchlisthidebots": "Robotok szerkesztéseinek elrejtése",
@@ -238,6 +241,7 @@
"otherlanguages": "Más nyelveken",
"redirectedfrom": "($1 szócikkből átirányítva)",
"redirectpagesub": "Átirányító lap",
+ "redirectto": "Átirányítás ide:",
"lastmodifiedat": "A lap utolsó módosítása: $1, $2",
"viewcount": "Ezt a lapot {{PLURAL:$1|egy|$1}} alkalommal keresték fel.",
"protectedpage": "Védett lap",
@@ -245,10 +249,12 @@
"jumptonavigation": "navigáció",
"jumptosearch": "keresés",
"view-pool-error": "A szerverek jelenleg túl vannak terhelve, mert túl sok felhasználó próbálta megtekinteni ezt az oldalt.\nKérjük, várj egy kicsit, mielőtt újra próbálkoznál a lap megtekintésével!\n\n$1",
- "generic-pool-error": "Sajnálom, a szerverek jelenleg túl vannak terhelve.\nTúl sok felhasználó próbálja ezt az oldalt megtekinteni.\nKérjük, várj egy kicsit, mielőtt újra próbálkoznál az oldal megtekintésével!",
+ "generic-pool-error": "Sajnáljuk, a szerverek jelenleg túl vannak terhelve.\nTúl sok felhasználó próbálja ezt az erőforrást elérni.\nKérjük, várj egy kicsit, mielőtt újra próbálkoznál!",
"pool-timeout": "Letelt a zárolás feloldására szánt várakozási idő",
"pool-queuefull": "A pool sor megtelt",
"pool-errorunknown": "Ismeretlen hiba",
+ "pool-servererror": "A pool counter szolgáltatás nem elérhető ($1).",
+ "poolcounter-usage-error": "Használati hiba: $1",
"aboutsite": "A {{SITENAME}} wikiről",
"aboutpage": "Project:Rólunk",
"copyright": "A tartalom további jelölés hiányában a(z) $1 feltételei szerint használható fel.",
@@ -258,6 +264,7 @@
"disclaimers": "Jogi nyilatkozat",
"disclaimerpage": "Project:Jogi nyilatkozat",
"edithelp": "Szerkesztési segítség",
+ "helppage-top-gethelp": "Segítség",
"mainpage": "Kezdőlap",
"mainpage-description": "Kezdőlap",
"policy-url": "Project:Irányelvek",
@@ -271,6 +278,7 @@
"versionrequired": "A MediaWiki $1 verziója szükséges",
"versionrequiredtext": "A lap használatához a MediaWiki $1 verziójára van szükség.\nTovábbi információkat a [[Special:Version|verzióinformációs lapon]] találsz.",
"ok": "OK",
+ "pagetitle": "$1 – {{SITENAME}}",
"retrievedfrom": "A lap eredeti címe: „$1”",
"youhavenewmessages": "$1 a vitalapodon! ($2 külön is megtekintheted.)",
"youhavenewmessagesfromusers": "$2 kaptál {{PLURAL:$3|egy|$3}} szerkesztőtől $1!",
@@ -341,17 +349,19 @@
"filerenameerror": "Nem tudtam átnevezni a(z) „$1” fájlt „$2” névre.",
"filedeleteerror": "Nem tudtam törölni a(z) „$1” fájlt.",
"directorycreateerror": "Nem tudtam létrehozni a(z) „$1” könyvtárat.",
+ "directoryreadonlyerror": "A könyvtár ($1) csak olvasható.",
+ "directorynotreadableerror": "A könyvtár ($1) nem olvasható.",
"filenotfound": "A(z) „$1” fájl nem található.",
"unexpected": "Váratlan érték: „$1”=„$2”.",
"formerror": "Hiba: nem tudom elküldeni az űrlapot",
"badarticleerror": "Ez a tevékenység nem végezhető el ezen a lapon.",
"cannotdelete": "A(z) $1 lapot vagy fájlt nem lehet törölni.\nTalán már valaki más törölte.",
"cannotdelete-title": "Nem lehet törölni a(z) „$1” lapot",
- "delete-hook-aborted": "A törlés meg lett szakítva egy hook által.\nNem lett magyarázat csatolva.",
+ "delete-hook-aborted": "A törlést egy hook (szűrő) megszakította.\nNincs csatolt magyarázat hozzá.",
"no-null-revision": "Nem sikerült új null-revíziót létrehozni a(z) „$1” lap számára.",
"badtitle": "Hibás cím",
- "badtitletext": "A kért oldal címe érvénytelen, üres, vagy rosszul hivatkozott nyelvközi vagy wikiközi cím volt. Olyan karaktereket is tartalmazhatott, melyek a címekben nem használhatóak.",
- "perfcached": "Az alábbi adatok gyorsítótárból (''cache''-ből) származnak, és ezért lehetséges, hogy nem a legfrissebb változatot mutatják. Legfeljebb {{PLURAL:$1|egy|$1 }} eredmény áll rendelkezésre a gyorsítótárban.",
+ "badtitletext": "A kért oldal címe érvénytelen, üres, vagy rosszul hivatkozott nyelvközi vagy wikiközi cím volt. Olyan karaktereket is tartalmazhatott, melyek címekben nem használhatók.",
+ "perfcached": "Az alábbi adatok gyorsítótárból (''cache''-ből) származnak, és ezért lehetséges, hogy nem a legfrissebb változatot mutatják. Legfeljebb $1 eredmény áll rendelkezésre a gyorsítótárban.",
"perfcachedts": "Az alábbi adatok gyorsítótárból (''cache''-ből) származnak, legutóbbi frissítésük ideje $1. Legfeljebb {{PLURAL:$4|egy|$4}} eredmény áll rendelkezésre a gyorsítótárban.",
"querypage-no-updates": "Az oldal frissítése jelenleg le van tiltva. Az itt szereplő adatok nem frissülnek azonnal.",
"viewsource": "Lapforrás",
@@ -362,7 +372,8 @@
"viewsourcetext": "Megtekintheted és másolhatod a lap forrását:",
"viewyourtext": "Megtekintheted és kimásolhatod a '''saját szerkesztéseidet''' az alábbi lapra:",
"protectedinterface": "Ez a lap a szoftver felületéhez szolgáltat szöveget, és a visszaélések elkerülése miatt le van zárva.",
- "editinginterface": "'''Vigyázat:''' egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz a kinézetre, ahogy más szerkesztők látják a lapot. Fordításra inkább használd a MediaWiki fordítására indított kezdeményezést, a [//translatewiki.net/wiki/Main_Page?setlang=hu translatewiki.net-et].",
+ "editinginterface": "<strong>Vigyázat:</strong> egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz a kinézetre, ahogy más szerkesztők látják a lapot.",
+ "translateinterface": "Minden wikire kiterjedő fordítások hozzáadásához vagy szerkesztésére használd a [//translatewiki.net/ translatewiki.net]-et, a MédiaWiki lokalizációs projektjét.",
"cascadeprotected": "Ez a lap szerkesztés elleni védelemmel lett ellátva, mert a következő {{PLURAL:$1|lapon|lapokon}} be van kapcsolva a „kaszkádolt” védelem:\n$2",
"namespaceprotected": "Nincs jogosultságod a(z) '''$1''' névtérben található lapok szerkesztésére.",
"customcssprotected": "Nem szerkesztheted ezt a CSS-lapot, mert egy másik felhasználó személyes beállításait tartalmazza.",
@@ -419,6 +430,8 @@
"userlogin-resetlink": "Elfelejtetted a bejelentkezési adataidat?",
"userlogin-resetpassword-link": "Elfelejtetted a jelszavad?",
"userlogin-helplink2": "Segítség a bejelentkezéshez",
+ "userlogin-loggedin": "Már be vagy jelentkezve mint {{GENDER:$1|$1}}. Ha más néven akarsz belépni, alább megteheted.",
+ "userlogin-createanother": "Másik felhasználói fiók létrehozása",
"createacct-emailrequired": "E-mail cím",
"createacct-emailoptional": "E-mail cím (opcionális)",
"createacct-email-ph": "Add meg e-mail címed",
@@ -453,7 +466,8 @@
"login-userblocked": "Ez a szerkesztő blokkolva van, a bejelentkezés nem engedélyezett.",
"wrongpassword": "A megadott jelszó érvénytelen. Próbáld meg újra.",
"wrongpasswordempty": "Nem adtál meg jelszót. Próbáld meg újra.",
- "passwordtooshort": "A jelszónak legalább {{PLURAL:$1|egy|$1}} karakterből kell állnia.",
+ "passwordtooshort": "A jelszónak legalább $1 karakterből kell állnia.",
+ "passwordtoolong": "A jelszó nem lehet hosszabb $1 karakternél.",
"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",
@@ -466,8 +480,8 @@
"eauthentsent": "Egy ellenőrző e-mailt küldtünk a megadott címre. Mielőtt más leveleket kaphatnál, igazolnod kell az e-mailben írt utasításoknak megfelelően, hogy valóban a tiéd a megadott cím.",
"throttled-mailpassword": "Már elküldtünk egy jelszóemlékeztetőt az utóbbi {{PLURAL:$1|egy|$1}} órában.\nA visszaélések elkerülése végett {{PLURAL:$1|egy|$1}} óránként csak egy jelszó-emlékeztetőt küldünk.",
"mailerror": "Hiba történt az e-mail küldése közben: $1",
- "acct_creation_throttle_hit": "A wiki látogatói ezt az IP-címet használva {{PLURAL:$1|egy|$1}} fiókot hoztak létre az elmúlt egy nap alatt . Ez a megengedett maximum ezen időtartam alatt, így az erről a címről látogatók jelenleg nem hozhatnak létre újabb fiókokat.",
- "emailauthenticated": "Az e-mail címedet $2 $3-kor erősítetted meg.",
+ "acct_creation_throttle_hit": "A wiki látogatói ezt az IP-címet használva $1 fiókot hoztak létre az elmúlt egy nap alatt. Ez a megengedett maximum ezen időtartam alatt, így az erről a címről látogatók jelenleg nem hozhatnak létre újabb fiókokat.",
+ "emailauthenticated": "Az e-mail címedet $2, $3-kor erősítetted meg.",
"emailnotauthenticated": "Az e-mail címed még <strong>nincs megerősítve</strong>. E-mailek küldése és fogadása nem engedélyezett.",
"noemailprefs": "Az alábbi funkciók használatához meg kell adnod az e-mail címedet.",
"emailconfirmlink": "E-mail cím megerősítése",
@@ -480,6 +494,7 @@
"createaccount-text": "Valaki létrehozott számodra egy \"$2\" nevű {{SITENAME}}-azonosítót ($4).\nA hozzá tartozó jelszó \"$3\", melyet a bejelentkezés után minél előbb változtass meg.\n\nHa nem kértél új azonosítót, és tévedésből kaptad ezt a levelet, hagyd figyelmen kívül.",
"login-throttled": "Túl sok hibás bejelentkezés.\nVárj $1, mielőtt újra próbálkozol.",
"login-abort-generic": "A bejelentkezés sikertelen – megszakítva",
+ "login-migrated-generic": "A fiók áttelepítése megtörtént, felhasználóneved már nem létezik ezen a wikin.",
"loginlanguagelabel": "Nyelv: $1",
"suspicious-userlogout": "A kijelentkezési kérésed vissza lett utasítva, mert úgy tűnik, hogy egy hibás böngésző vagy gyorsítótárazó proxy küldte.",
"createacct-another-realname-tip": "A valódi nevet nem kötelező megadni, de ha úgy döntesz, hogy megadod, azzal leszel feltüntetve a munkád szerzőjeként.",
@@ -513,7 +528,7 @@
"resetpass-expired-soft": "A jelszavad lejárt, ezért újat kell beállítanod. Válassz most egy új jelszót, vagy kattints a {{int:resetpass-submit-cancel}} gombra, ha később akarod csak beállítani.",
"resetpass-validity-soft": "Adj meg egy új jelszót most, vagy kattints a \"{{int:resetpass-submit-cancel}}\" gombra, ha később akarod megadni.",
"passwordreset": "Jelszó törlése",
- "passwordreset-text-one": "A jelszavad alaphelyzetbe állításához töltsd ki az űrlapot.",
+ "passwordreset-text-one": "A jelszó átmeneti beállításához töltsd ki az űrlapot.",
"passwordreset-text-many": "{{PLURAL:$1|Az átmeneti jelszó elküldéséhez töltsd ki az alábbi mezők egyikét.}}",
"passwordreset-legend": "Új jelszó kérése",
"passwordreset-disabled": "Új jelszó kérése nem engedélyezett ezen a wikin.",
@@ -540,10 +555,12 @@
"changeemail-submit": "E-mail cím megváltoztatása",
"changeemail-throttled": "Túl sok hibás bejelentkezés.\nVárj $1, mielőtt újra próbálkozol.",
"resettokens": "Tokenek törlése",
+ "resettokens-text": "Újra generálhatod a tokeneket, amely a fiókodhoz rendelt bizonyos magánadatokhoz enged hozzáférést.\n\nEzt akkor érdemes használnod, hogy véletlenül megosztottad a tokeneket valakivel, vagy ha valaki feltörte a fiókodat.",
"resettokens-no-tokens": "Nincs újragenerálható token.",
"resettokens-legend": "Tokenek újragenerálása",
"resettokens-tokens": "Tokenek:",
"resettokens-token-label": "$1 (jelenlegi érték: $2)",
+ "resettokens-watchlist-token": "Kulcs egy hírcsatornához (Atom/RSS), ami a [[Special:Watchlist|figyelőlistádon lévő lapok változásaiból]] készül",
"resettokens-done": "Tokenek újragenerálva.",
"resettokens-resetbutton": "Kijelőlt tokenek újragenerálása",
"bold_sample": "Félkövér szöveg",
@@ -573,7 +590,7 @@
"showpreview": "Előnézet megtekintése",
"showdiff": "Változtatások megtekintése",
"blankarticle": "<strong>Figyelem:</strong> A létrehozandó szócikk üres.\nHa ismét a \"{{int:savearticle}}\" gombra kattintasz, a szócikket tartalom nélkül fogod létrehozni.",
- "anoneditwarning": "'''Figyelem:''' Nem vagy bejelentkezve. Ha szerkesztesz, az IP-címed látható lesz a laptörténetben.",
+ "anoneditwarning": "<strong>Figyelem:</strong> Nem vagy bejelentkezve. Ha szerkesztesz, az IP-címed nyilvánosan látható lesz a laptörténetben. Ha <strong>[$1 bejelentkezel]</strong> vagy <strong>[$2 regisztrálsz]</strong>, a szerkesztéseid a felhasználónevedhez lesznek társítva, egyéb hasznos dolgok mellett.",
"anonpreviewwarning": "''Nem vagy bejelentkezve. A mentéskor az IP-címed rögzítve lesz a laptörténetben.''",
"missingsummary": "'''Emlékeztető:''' Nem adtál meg szerkesztési összefoglalót. Ha összefoglaló nélkül akarod elküldeni a szöveget, kattints újra a mentésre.",
"missingcommenttext": "Kérjük, írj összefoglalót a szerkesztésedhez.",
@@ -615,9 +632,9 @@
"previewnote": "'''Ne feledd, hogy ez csak egy előnézet.''' A változtatásaid még nincsenek elmentve!",
"continue-editing": "Szerkesztés folytatása",
"previewconflict": "Ez az előnézet a felső szerkesztődobozban levő szöveg mentés utáni megfelelőjét mutatja.",
- "session_fail_preview": "'''Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.\nKérjük próbálkozz újra!\nAmennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!'''",
+ "session_fail_preview": "<strong>Az elveszett munkamenetadatok miatt sajnos nem tudtuk feldolgozni a szerkesztésedet.</strong>\nKérjük, próbálkozz újra!\nAmennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!",
"session_fail_preview_html": "'''Az elveszett munkamenetadatok miatt nem tudtuk feldolgozni a szerkesztésedet.'''\n\n''Mivel a wikiben engedélyezett a nyers HTML-kód használata, az előnézet el van rejtve a JavaScript-alapú támadások megakadályozása céljából.''\n\n'''Ha ez egy normális szerkesztési kísérlet, akkor próbálkozz újra. Amennyiben továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni!''' (a változtatásaidat mentsd el magadnak, különben elvesznek!)",
- "token_suffix_mismatch": "'''A szerkesztésedet elutasítottuk, mert a kliensprogramod megváltoztatta a központozó karaktereket\na szerkesztési tokenben. A szerkesztés azért lett visszautasítva, hogy megelőzzük a lap szövegének sérülését.\nEz a probléma akkor fordulhat elő, ha hibás web-alapú proxyszolgáltatást használsz.'''",
+ "token_suffix_mismatch": "<strong>A szerkesztésedet elutasítottuk, mert a kliensprogramod megváltoztatta a központozó karaktereket\na szerkesztési tokenben.</strong>\nA szerkesztés azért lett visszautasítva, hogy megelőzzük a lap szövegének sérülését.\nEz a probléma akkor fordulhat elő, ha hibás web-alapú proxyszolgáltatást használsz.",
"edit_form_incomplete": "'''A szerkesztési űrlap egyes részei nem érkeztek meg a szerverre; ellenőrizd, hogy a szerkesztés sértetlen-e, majd próbáld újra.'''",
"editing": "$1 szerkesztése",
"creating": "$1 létrehozása",
@@ -674,6 +691,9 @@
"content-model-text": "egyszerű szöveg",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Üres objektum",
+ "content-json-empty-array": "Üres tömb",
+ "duplicate-args-category": "Dupla paramétermegadást tartalmazó lapok",
"expensive-parserfunction-warning": "Figyelem: ezen a lapon túl sok erőforrásigényes elemzőfüggvény-hívás található.\n\nKevesebb, mint {{PLURAL:$2|egy|$2}} kellene, jelenleg {{PLURAL:$1|egy|$1}} van.",
"expensive-parserfunction-category": "Túl sok költséges elemzőfüggvény-hívást tartalmazó lapok",
"post-expand-template-inclusion-warning": "Figyelem: a beillesztett sablonok mérete túl nagy.\nNéhány sablon nem fog megjelenni.",
@@ -683,9 +703,9 @@
"parser-template-loop-warning": "Végtelen ciklus a következő sablonban: [[$1]]",
"parser-template-recursion-depth-warning": "A sablon rekurzív beillesztésének mélysége átlépte a határérékét ($1)",
"language-converter-depth-warning": "A nyelvátalakító rekurzióinak száma túllépve ($1)",
- "node-count-exceeded-category": "Lapok, ahogy a csomópont szám túl nagy",
- "node-count-exceeded-category-desc": "Azon oldalaknak a kategóriája, ahol a csomópont szám túl nagy.",
- "node-count-exceeded-warning": "Az oldal meghaladta a csomópont számot",
+ "node-count-exceeded-category": "Túl sok csomópontot tartalmazó lapok",
+ "node-count-exceeded-category-desc": "A lap túllépi a maximális csomópontszámot.",
+ "node-count-exceeded-warning": "Az oldal meghaladta a csomópontszámot",
"expansion-depth-exceeded-category": "Lapok, melyeken a sablonok kibontása meghaladja a megengedett szintet",
"expansion-depth-exceeded-warning": "A lap meghaladta az engedélyezett kiterjesztési mélységet",
"parser-unstrip-loop-warning": "Unstrip hurok észlelve",
@@ -727,7 +747,7 @@
"history-feed-empty": "A kért oldal nem létezik.\nLehet, hogy törölték a wikiből, vagy átnevezték.\nPróbálkozhatsz a témával kapcsolatos lapok [[Special:Search|keresésével]].",
"rev-deleted-comment": "(szerkesztési összefoglaló eltávolítva)",
"rev-deleted-user": "(szerkesztőnév eltávolítva)",
- "rev-deleted-event": "(bejegyzés eltávolítva)",
+ "rev-deleted-event": "(naplóbejegyzés eltávolítva)",
"rev-deleted-user-contribs": "[felhasználónév vagy IP-cím eltávolítva – szerkesztés elrejtve a közreműködések közül]",
"rev-deleted-text-permission": "A lap ezen változatát '''törölték'''.\nTovábbi információkat a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} törlési naplóban] találhatsz.",
"rev-deleted-text-unhide": "A lap ezen változatát '''törölték'''.\nTovábbi részleteket a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} törlési naplóban] találhatsz.\nMivel adminisztrátor vagy, még mindig [$1 megtekintheted a tartalmát], ha szeretnéd.",
@@ -755,7 +775,7 @@
"revdelete-legend": "Korlátozások megadása:",
"revdelete-hide-text": "Változat szövege",
"revdelete-hide-image": "A fájl tartalmának elrejtése",
- "revdelete-hide-name": "Művelet és cél elrejtése",
+ "revdelete-hide-name": "Cél és paraméterek elrejtése",
"revdelete-hide-comment": "Szerkesztési összefoglaló",
"revdelete-hide-user": "Szerkesztői név/IP cím",
"revdelete-hide-restricted": "Adatok elrejtése az adminisztrátorok és mindenki más elől",
@@ -808,12 +828,11 @@
"mergehistory-same-destination": "A forrás- és a céllap nem egyezhet meg",
"mergehistory-reason": "Ok:",
"mergelog": "Egyesítési napló",
- "pagemerge-logentry": "[[$1]] és [[$2]] egyesítve ($3 változatig)",
"revertmerge": "Szétválasztás",
"mergelogpagetext": "A lapok egyesítéséről szóló napló. Szűkítheted a listát a műveletet végző szerkesztő, vagy az érintett oldal megadásával.",
"history-title": "A(z) „$1” laptörténete",
"difference-title": "„$1” változatai közötti eltérés",
- "difference-title-multipage": "Oldalak közötti különbség \" $1 \"és\" $2 \"",
+ "difference-title-multipage": "„$1” és „$2” oldalak közötti különbség",
"difference-multipage": "(Lapok közti eltérés)",
"lineno": "$1. sor:",
"compareselectedversions": "Kiválasztott változatok összehasonlítása",
@@ -831,6 +850,8 @@
"notextmatches": "Nincsenek szövegbeli egyezések",
"prevn": "előző {{PLURAL:$1|egy|$1}}",
"nextn": "következő {{PLURAL:$1|egy|$1}}",
+ "prev-page": "előző oldal",
+ "next-page": "következő oldal",
"prevn-title": "Előző {{PLURAL:$1|egy|$1}} találat",
"nextn-title": "Következő {{PLURAL:$1|egy|$1}} találat",
"shown-title": "{{PLURAL:$1|Egy|$1}} találat laponként",
@@ -849,6 +870,8 @@
"search-result-category-size": "$1 oldal, $2 alkategória, $3 fájl",
"search-redirect": "(átirányítva innen: $1)",
"search-section": "($1 szakasz)",
+ "search-category": "($1 kategória)",
+ "search-file-match": "(fájl tartalma egyezik)",
"search-suggest": "Keresési javaslat: $1",
"search-interwiki-caption": "Társlapok",
"search-interwiki-default": "$1 találatok:",
@@ -857,6 +880,8 @@
"searchrelated": "kapcsolódó",
"searchall": "mind",
"showingresults": "Lent '''{{PLURAL:$1|egy|$1}}''' találat látható, az eleje '''$2'''.",
+ "showingresultsinrange": "Lent <strong>$1</strong> találat látható ($2. – $3.)",
+ "search-showingresults": "{{PLURAL:$4|<strong>$1.</strong> a(z) <strong>$3</strong> találatból|<strong>$1–$2.</strong> a(z) <strong>$3</strong> találatból}}",
"search-nonefound": "Nincs egyezés a megadott szöveggel.",
"powersearch-legend": "Részletes keresés",
"powersearch-ns": "Névterek:",
@@ -879,6 +904,11 @@
"prefs-personal": "Felhasználói adatok",
"prefs-rc": "Friss változtatások",
"prefs-watchlist": "Figyelőlista",
+ "prefs-editwatchlist": "Figyelőlista szerkesztése",
+ "prefs-editwatchlist-label": "A figyelőlista szerkesztése:",
+ "prefs-editwatchlist-edit": "A figyelőlista megtekintése és szerkesztése",
+ "prefs-editwatchlist-raw": "A nyers figyelőlista szerkesztése",
+ "prefs-editwatchlist-clear": "A figyelőlista kiürítése",
"prefs-watchlist-days": "A figyelőlistában mutatott napok száma:",
"prefs-watchlist-days-max": "Legfeljebb $1 {{PLURAL:$1|nap|nap}}",
"prefs-watchlist-edits": "A kiterjesztett figyelőlistán mutatott szerkesztések száma:",
@@ -948,7 +978,7 @@
"gender-female": "Nő",
"prefs-help-gender": "Nem kötelező: a szoftver használja a nemtől függő üzenetek megjelenítéséhez. Az információ mindenki számára látható.",
"email": "E-mail",
- "prefs-help-realname": "A valódi nevet nem kötelező megadni, de ha úgy döntesz, hogy megadod, azzal leszel feltüntetve a munkád szerzőjeként.",
+ "prefs-help-realname": "A valódi név nem kötelező.\nHa megadod, akkor leszel feltüntetve a munkád szerzőjeként.",
"prefs-help-email": "Az e-mail cím megadása nem kötelező, de szükséges új jelszó kéréséhez, ha elfelejtenéd a meglévőt.",
"prefs-help-email-others": "Úgy is dönthetsz, hogy lehetővé teszed mások számára, hogy kapcsolatba lépjenek veled a felhasználói vagy vitalapodon keresztül, anélkül, hogy fel kellene fedned a személyazonosságodat.",
"prefs-help-email-required": "Meg kell adnod az e-mail címedet.",
@@ -966,6 +996,7 @@
"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-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.",
"email-address-validity-valid": "Az e-mail cím érvényesnek tűnik",
@@ -1086,10 +1117,12 @@
"action-createpage": "új lap készítése",
"action-createtalk": "vitalap készítése",
"action-createaccount": "felhasználói fiók elkészítése",
+ "action-history": "laptörténet megtekintése",
"action-minoredit": "szerkesztés aprónak jelölése",
"action-move": "lap átnevezése",
"action-move-subpages": "lap és allapjainak átnevezése",
"action-move-rootuserpages": "szerkesztői lapok átnevezése",
+ "action-move-categorypages": "kategóriák átnevezése",
"action-movefile": "fájlok átnevezése",
"action-upload": "fájl feltöltése",
"action-reupload": "már létező fájl felülírása",
@@ -1117,6 +1150,9 @@
"action-siteadmin": "adatbázis lezárása vagy felnyitása",
"action-sendemail": "e-mailek küldése",
"action-editmywatchlist": "saját figyelőlista szerkesztése",
+ "action-viewmywatchlist": "saját figyelőlista megtekintése",
+ "action-viewmyprivateinfo": "személyes adatok megtekintése",
+ "action-editmyprivateinfo": "személyes adatok szerkesztése",
"nchanges": "{{PLURAL:$1|egy|$1}} változtatás",
"enhancedrc-since-last-visit": "$1 az utolsó látogatás óta",
"enhancedrc-history": "történet",
@@ -1186,9 +1222,9 @@
"uploaderror": "Feltöltési hiba",
"upload-recreate-warning": "'''Figyelmeztetés: az ilyen nevű fájlt törölték vagy átnevezték.'''\n\nAz oldalhoz tartozó törlési és átnevezési naplóbejegyzések:",
"uploadtext": "Az alábbi űrlap használatával tölthetsz fel fájlokat.\nA korábban feltöltött képek megtekintéséhez vagy a köztük való kereséshez menj a [[Special:FileList|feltöltött fájlok listájához]], a feltöltések, újrafeltöltések a [[Special:Log/upload|feltöltési naplóban]], a törlések a [[Special:Log/delete|törlési naplóban]] vannak jegyezve.\n\nKépet a következő módon illeszthetsz be egy oldalra: '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Kép.jpg]]</nowiki>''',\n'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Kép.png|alternatív szöveg]]</nowiki>''' vagy a közvetlen hivatkozáshoz használd a\n'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fájl.ogg]]</nowiki>''' formát.",
- "upload-permitted": "Engedélyezett fájltípusok: $1.",
- "upload-preferred": "Támogatott fájltípusok: $1.",
- "upload-prohibited": "Tiltott fájltípusok: $1.",
+ "upload-permitted": "Engedélyezett {{PLURAL:$2|fájltípus|fájltípusok}}: $1.",
+ "upload-preferred": "Ajánlott {{PLURAL:$2|fájltípus|fájltípusok}}: $1.",
+ "upload-prohibited": "Tiltott {{PLURAL:$2|fájltípus|fájltípusok}}: $1.",
"uploadlogpage": "Feltöltési napló",
"uploadlogpagetext": "Lentebb látható a legutóbbi felküldések listája.\nLásd még az [[Special:NewFiles|új fáljlok galériáját]]",
"filename": "Fájlnév",
@@ -1342,6 +1378,7 @@
"license": "Licenc:",
"license-header": "Licenc",
"nolicense": "Válassz licencet!",
+ "licenses-edit": "Licenc-tulajdonságok szerkesztése",
"license-nopreview": "(Előnézet nem elérhető)",
"upload_source_url": "(a kiválasztott fájlod egy nyilvánosan elérhető URL-ről)",
"upload_source_file": "(a számítógépeden kiválasztott fájl)",
@@ -1385,6 +1422,7 @@
"sharedupload": "Ez a fájl a(z) $1 megosztott tárhelyről származik, és más projektek is használhatják.",
"sharedupload-desc-there": "Ez a fájl a $1 megosztott tárhelyről származik, és más projektek is használhatják.\nAz [$2 ottani leírólapján] további információkat találhatsz róla.",
"sharedupload-desc-here": "Ez a fájl a $1 megosztott tárhelyről származik, és más projektek is használhatják.\nA [$2 fájl ottani leírólapjának] másolata alább látható.",
+ "sharedupload-desc-edit": "Ez a fájl a(z) $1 megosztott tárhelyről származik, és más projektek is használhatják.\nValószínűleg az [$2 ottani leírólapját] akartad szerkeszteni.",
"filepage-nofile": "Nem létezik ilyen nevű fájl.",
"filepage-nofile-link": "Nem létezik ilyen nevű fájl. [$1 Ide kattintva] feltölthetsz egyet.",
"uploadnewversion-linktext": "Új változat feltöltése",
@@ -1422,6 +1460,7 @@
"download": "letöltés",
"unwatchedpages": "Nem figyelt lapok",
"listredirects": "Átirányítások listája",
+ "listduplicatedfiles": "Duplikált fájlok listája",
"unusedtemplates": "Nem használt sablonok",
"unusedtemplatestext": "Ez a lap azon {{ns:template}} névtérbe tartozó lapokat gyűjti össze, melyek nincsenek használva egyetlen lapon sem.\nEllenőrizd a meglévő hivatkozásokat, mielőtt törölnéd őket.",
"unusedtemplateswlh": "más hivatkozások",
@@ -1429,12 +1468,14 @@
"randompage-nopages": "A következő {{PLURAL:$2|névtérben|névterekben}} nincsenek lapok: $1.",
"randomincategory": "Véletlen lap egy kategóriából",
"randomincategory-invalidcategory": "\"$1\" nem egy érvényes kategória neve.",
+ "randomincategory-nopages": "Nincsenek lapok a [[:Category:$1|$1]] kategóriában.",
+ "randomincategory-category": "Kategória:",
+ "randomincategory-legend": "Véletlen lap a kategóriából",
"randomredirect": "Átirányítás találomra",
"randomredirect-nopages": "A(z) „$1” névtérben nincsenek átirányítások.",
"statistics": "Statisztika",
"statistics-header-pages": "Lapstatisztikák",
"statistics-header-edits": "Szerkesztési statisztika",
- "statistics-header-views": "Látogatási statisztika",
"statistics-header-users": "Szerkesztői statisztika",
"statistics-header-hooks": "További statisztikák",
"statistics-articles": "Tartalommal rendelkező lapok",
@@ -1443,13 +1484,11 @@
"statistics-files": "Feltöltött fájlok",
"statistics-edits": "Szerkesztések száma a(z) {{SITENAME}} indulása óta",
"statistics-edits-average": "Szerkesztések átlagos száma laponként",
- "statistics-views-total": "Összes megtekintés",
- "statistics-views-total-desc": "A nem létező és speciális lapok megtekintési adatai nincsenek beleszámolva.",
- "statistics-views-peredit": "Megtekintések szerkesztésenként",
"statistics-users": "Regisztrált [[Speciális:Szerkesztők listája|szerkesztők]]",
"statistics-users-active": "Aktív szerkesztők",
"statistics-users-active-desc": "Szerkesztők, akik csináltak valamit az elmúlt {{PLURAL:$1|egy|$1}} napban",
- "statistics-mostpopular": "Legtöbbször megtekintett lapok",
+ "pageswithprop-prop": "Tulajdonságnév:",
+ "pageswithprop-submit": "Ugrás",
"doubleredirects": "Dupla átirányítások",
"doubleredirectstext": "Ez a lap azokat a lapokat listázza, melyek átirányító lapokra irányítanak át.\nMinden sor tartalmaz egy hivatkozást az első, valamint a második átirányításra, valamint a második átirányítás céljára, ami általában a valódi céllap, erre kellene az első átirányításnak mutatnia.\nAz <del>áthúzott</del> sorok a lista elkészülése óta javítva lettek.",
"double-redirect-fixed-move": "[[$1]] áthelyezve.\nAutomatikusan frissült, és mostantól a(z) [[$2]] lapra irányít át.",
@@ -1465,7 +1504,7 @@
"withoutinterwiki-submit": "Megjelenítés",
"fewestrevisions": "Legrövidebb laptörténetű lapok",
"nbytes": "{{PLURAL:$1|egy|$1}} bájt",
- "ncategories": "{{PLURAL:$1|egy|$1}} kategória",
+ "ncategories": "$1 kategória",
"ninterwikis": "{{PLURAL:$1|egy|$1}} interwiki",
"nlinks": "{{PLURAL:$1|egy|$1}} hivatkozás",
"nmembers": "{{PLURAL:$1|egy|$1}} elem",
@@ -1483,41 +1522,49 @@
"uncategorizedtemplates": "Kategorizálatlan sablonok",
"unusedcategories": "Nem használt kategóriák",
"unusedimages": "Nem használt fájlok",
- "popularpages": "Népszerű lapok",
"wantedcategories": "Keresett kategóriák",
"wantedpages": "Keresett lapok",
"wantedpages-badtitle": "Érvénytelen cím található az eredményhalmazban: $1",
"wantedfiles": "Keresett fájlok",
"wantedfiletext-cat": "A következő fájlok használatban vannak, de nem léteznek. Külső tárhelyről származó fájlok akkor is a listára kerülhetnek, ha léteznek. Az ilyen hamis riasztások <del>áthúzva</del> jelennek meg. Ezen felül az olyan beágyazott fájlok, amelyek nem léteznek a [[:$1]] kategóriában jelennek meg.",
"wantedfiletext-nocat": "A következő fájlok használatban vannak, de nem léteznek. Külső tárhelyről származó fájlok akkor is a listára kerülhetnek, ha léteznek. Az ilyen hamis riasztások <del>áthúzva</del> jelennek meg.",
+ "wantedfiletext-nocat-noforeign": "A következő fájlok használatban vannak, de nem léteznek.",
"wantedtemplates": "Keresett sablonok",
"mostlinked": "Legtöbbet hivatkozott lapok",
"mostlinkedcategories": "Legtöbbet hivatkozott kategóriák",
"mostlinkedtemplates": "Legtöbbet hivatkozott sablonok",
- "mostcategories": "Legtöbb kategóriába tartozó lapok",
+ "mostcategories": "Legtöbb kategóriába tartozó szócikkek",
"mostimages": "Legtöbbet hivatkozott fájlok",
- "mostinterwikis": "Legtöbb interwikit tartalmazó lapok",
+ "mostinterwikis": "Legtöbb interwikit tartalmazó szócikkek",
"mostrevisions": "Legtöbbet szerkesztett lapok",
"prefixindex": "Keresés előtag szerint",
"prefixindex-namespace": "Összes lap adott előtaggal ($1 névtér)",
+ "prefixindex-strip": "Előtag eltüntetése a listában",
"shortpages": "Rövid lapok",
"longpages": "Hosszú lapok",
"deadendpages": "Zsákutcalapok",
"deadendpagestext": "Az itt található lapok nem kapcsolódnak hivatkozásokkal ezen wiki más oldalaihoz.",
"protectedpages": "Védett lapok",
"protectedpages-indef": "Csak a meghatározatlan idejű védelmek",
+ "protectedpages-summary": "Az alábbi speciális lap listázza azokat a már létező lapokat, melyeket levédtek az adminisztrátorok, ellentétben azokkal a lapokkal, melyeket [[{{#special:ProtectedTitles}}|létrehozás ellen]] védtek le.",
"protectedpages-cascade": "Csak a kaszkádvédelmek",
+ "protectedpages-noredirect": "Átirányítások elrejtése",
"protectedpagesempty": "Jelenleg nincsenek ilyen paraméterekkel védett lapok.",
"protectedpages-timestamp": "Időbélyeg",
+ "protectedpages-page": "Lap",
"protectedpages-expiry": "Lejárat",
+ "protectedpages-performer": "A levédést végrehajtó szerkesztő",
+ "protectedpages-params": "A védelem paraméterei",
"protectedpages-reason": "Indoklás",
"protectedpages-unknown-timestamp": "Ismeretlen",
"protectedpages-unknown-performer": "Ismeretlen felhasználó",
"protectedtitles": "Létrehozás ellen védett lapok",
+ "protectedtitles-summary": "Az alábbi speciális lap listázza azokat a nem létező címeket, melyeket létrehozás ellen védtek le az adminisztrátorok, ellentétben azokkal a [[{{#special:ProtectedPages}}|létező lapokkal]], melyeket módosítás ellen védtek le.",
"protectedtitlesempty": "Jelenleg nincsenek ilyen típusú védett lapok.",
"listusers": "Szerkesztők",
"listusers-editsonly": "Csak a szerkesztéssel rendelkező szerkesztők mutatása",
"listusers-creationsort": "Rendezés létrehozási dátum szerint",
+ "listusers-desc": "Rendezés csökkenő sorrendben",
"usereditcount": "{{PLURAL:$1|egy|$1}} szerkesztés",
"usercreated": "{{GENDER:$3|Létrehozva}} $1, $2-kor",
"newpages": "Új lapok",
@@ -1535,16 +1582,18 @@
"pager-older-n": "{{PLURAL:$1|1 régebbi|$1 régebbi}}",
"suppress": "adatvédelmi biztos",
"querypage-disabled": "Ez a speciális lap a megfelelő teljesítmény fenntartása érdekében le van tiltva.",
+ "apihelp": "API segítség",
+ "apihelp-no-such-module": "A(z) „$1\" modul nem található.",
"booksources": "Könyvforrások",
"booksources-search-legend": "Könyvforrások keresése",
- "booksources-go": "Keresés",
+ "booksources-search": "Keresés",
"booksources-text": "Alább látható a másik webhelyekre mutató hivatkozások listája, ahol új és használt könyveket árulnak, és\ntovábbi információkat lelhetsz ott az általad keresett könyvekről:",
"booksources-invalid-isbn": "A megadott ISBN hibásnak tűnik; ellenőrizd, hogy jól másoltad-e át az eredeti forrásból.",
"specialloguserlabel": "Szerkesztő:",
"speciallogtitlelabel": "Cél (cím vagy felhasználó):",
"log": "Rendszernaplók",
"all-logs-page": "Minden nyilvános napló",
- "alllogstext": "A(z) {{SITENAME}} naplóinak összesített listája.\nA napló típusának, a szerkesztő nevének (kis- és nagybetűérzékeny), vagy az érintett lap kiválasztásával (ez is kis- és nagybetűérzékeny) szűkítheted a találatok listáját.",
+ "alllogstext": "A(z) {{SITENAME}} naplóinak összesített listája.\nA naplótípus, a felhasználónév (kis- és nagybetűérzékeny) vagy az érintett lap kiválasztásával (ez is kis- és nagybetűérzékeny) szűkítheted a találatok listáját.",
"logempty": "Nincs illeszkedő naplóbejegyzés.",
"log-title-wildcard": "Így kezdődő címek keresése",
"showhideselectedlogentries": "Kijelölt napló bejegyzések megjelenítése/elrejtése",
@@ -1604,11 +1653,23 @@
"listgrouprights-removegroup-self": "eltávolíthatja a következő {{PLURAL:$2|csoportból|csoportokból}} a saját fiókját: $1",
"listgrouprights-addgroup-self-all": "az összes csoportot hozzáadhatja a saját fiókjához",
"listgrouprights-removegroup-self-all": "az összes csoporból eltávolíthatja a saját fiókját",
+ "listgrouprights-namespaceprotection-header": "Névtér korlátozások",
"listgrouprights-namespaceprotection-namespace": "Névtér",
+ "listgrouprights-namespaceprotection-restrictedto": "A szerkesztéshez szükséges jogosultság(ok)",
+ "trackingcategories": "Nyomkövető kategóriák",
+ "trackingcategories-msg": "Nyomkövető kategória",
+ "trackingcategories-name": "Üzenetnév",
+ "trackingcategories-desc": "Kategóriába kerülés feltétele",
+ "noindex-category-desc": "A lapot nem indexelik a keresőrobotok, mert tartalmazza a <code><nowiki>__NOINDEX__</nowiki></code> varázsszót, és egy olyan névtérben található, ahol ez engedélyezett.",
+ "index-category-desc": "A lapot akkor is indexelik a keresőrobotok, ha egyébként nem tennék, mert tartalmazza az <code><nowiki>__INDEX__</nowiki></code> varázsszót, és egy olyan névtérben található, ahol ez engedélyezett.",
+ "post-expand-template-inclusion-category-desc": "A lap mérete nagyobb a <code>$wgMaxArticleSize</code> változóban tárolt értéknél a sablonok kibontása után, így néhány sablon nem került kibontásra.",
+ "post-expand-template-argument-category-desc": "A lap nagyobb a <code>$wgMaxArticleSize</code> változóban megadott értéknél egy sablonparaméter kibontása után (valami hármas kapcsos zárójelek között, mint pl. <code>{{{1}}}</code>).",
+ "expensive-parserfunction-category-desc": "A lap túl sok költséges elemzőfüggvényt használ (mint az <code>#ifexist</code>). Lásd még a [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] lapot.",
+ "broken-file-category-desc": "A lap törött fájllinket tartalmaz (egy fájlt beillesztő link, ami nem létező fájlra mutat).",
"trackingcategories-nodesc": "Nem található leírás.",
"trackingcategories-disabled": "A kategória le van tiltva",
"mailnologin": "Nincs feladó",
- "mailnologintext": "Ahhoz hogy másoknak e-mailt küldhess, [[Special:UserLogin|be kell jelentkezned]] és meg kell adnod egy érvényes e-mail címet a [[Special:Preferences|beállításaidban]].",
+ "mailnologintext": "Ahhoz, hogy másoknak e-mailt küldhess, [[Special:UserLogin|be kell jelentkezned]] és meg kell adnod egy érvényes e-mail címet a [[Special:Preferences|beállításaidban]].",
"emailuser": "E-mail küldése ezen szerkesztőnek",
"emailuser-title-target": "E-mail küldése ennek a felhasználónak: $1",
"emailuser-title-notarget": "E-mail küldése a felhasználónak",
@@ -1641,12 +1702,14 @@
"mywatchlist": "Figyelőlista",
"watchlistfor2": "$1 részére $2",
"nowatchlist": "Nincs lap a figyelőlistádon.",
- "watchlistanontext": "A figyelőlistád megtekintéséhez és szerkesztéséhez $1.",
+ "watchlistanontext": "Jelentkezz be a figyelőlistád megtekintéséhez és szerkesztéséhez.",
"watchnologin": "Nem vagy bejelentkezve",
"addwatch": "Hozzáadás a figyelőlistához",
"addedwatchtext": "A(z) „[[:$1]]” lapot hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].\nEzután minden, a lapon vagy annak vitalapján történő változást ott fogsz látni.",
+ "addedwatchtext-short": "Az oldal: \"$1\" hozzá lett adva a figyelőlistádhoz.",
"removewatch": "Eltávolítás a figyelőlistáról",
"removedwatchtext": "A(z) „[[:$1]]” lapot eltávolítottam a [[Special:Watchlist|figyelőlistáról]].",
+ "removedwatchtext-short": "Az oldal: \"$1\" el lett távolítva a figyelőlistádról.",
"watch": "Lap figyelése",
"watchthispage": "Lap figyelése",
"unwatch": "Lapfigyelés vége",
@@ -1657,7 +1720,7 @@
"wlheader-enotif": "Az e-mailen keresztül történő értesítés engedélyezve.",
"wlheader-showupdated": "Azok a lapok, amelyek megváltoztak, mióta utoljára megnézted őket, '''vastagítva''' láthatók.",
"wlnote": "Alább {{PLURAL:$1|az utolsó változás|az utolsó <strong>$1</strong> változás}} látható az elmúlt {{PLURAL:$2|órában|<strong>$2</strong> órában}}, $3 $4-kor.",
- "wlshowlast": "Az elmúlt $1 órában | $2 napon | $3 történt változtatások legyenek láthatóak",
+ "wlshowlast": "Az elmúlt $1 órában | $2 napon történt változtatások legyenek láthatóak",
"watchlist-options": "A figyelőlista beállításai",
"watching": "Figyelés...",
"unwatching": "Figyelés befejezése...",
@@ -1668,12 +1731,12 @@
"enotif_subject_created": "$2 létrehozta a(z) $1 {{SITENAME}} oldalt",
"enotif_subject_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt.",
"enotif_subject_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt.",
- "enotif_subject_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}} oldalt",
+ "enotif_subject_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}}-oldalt",
"enotif_body_intro_deleted": "$2 törölte a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd $3.",
"enotif_body_intro_created": "$2 létrehozta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
"enotif_body_intro_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
"enotif_body_intro_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
- "enotif_body_intro_changed": "$2 megváltoztatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
+ "enotif_body_intro_changed": "$2 megváltoztatta a $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, az aktuális verziót lásd itt: $3.",
"enotif_lastvisited": "Lásd a $1 lapot az utolsó látogatásod óta történt változtatásokért.",
"enotif_lastdiff": "Lásd a $1 lapot ezen változtatás megtekintéséhez.",
"enotif_anon_editor": "$1 névtelen felhasználó",
@@ -1687,7 +1750,7 @@
"exbeforeblank": "az eltávolítás előtti tartalom: „$1”",
"delete-confirm": "$1 törlése",
"delete-legend": "Törlés",
- "historywarning": "'''Figyelem:''' a lapnak, amit törölni készülsz, körülbelül $1 változattal rendelkező laptörténete van:",
+ "historywarning": "<strong>Figyelem:</strong> a lapnak, amit törölni készülsz, $1 változattal rendelkező laptörténete van:",
"confirmdeletetext": "Egy lapot vagy fájlt készülsz törölni a teljes laptörténetével együtt.\nKérjük, erősítsd meg, hogy valóban ezt szeretnéd tenni, átlátod a következményeit, és hogy a műveletet a [[{{MediaWiki:Policy-url}}|törlési irányelvekkel]] összhangban végzed.",
"actioncomplete": "Művelet végrehajtva",
"actionfailed": "A művelet nem sikerült",
@@ -1704,7 +1767,6 @@
"delete-toobig": "Ennek a lapnak a laptörténete több mint {{PLURAL:$1|egy|$1}} változatot őriz. A szervert kímélendő az ilyen lapok törlése nem engedélyezett.",
"delete-warning-toobig": "Ennek a lapnak a laptörténete több mint {{PLURAL:$1|egy|$1}} változatot őriz. Törlése fennakadásokat okozhat a wiki adatbázis-műveleteiben; óvatosan járj el.",
"rollback": "Szerkesztések visszaállítása",
- "rollback_short": "Visszaállítás",
"rollbacklink": "visszaállítás",
"rollbacklinkcount": "$1 szerkesztés visszaállítása",
"rollbacklinkcount-morethan": "több mint $1 szerkesztés visszaállítása",
@@ -1716,7 +1778,7 @@
"revertpage-nouser": "Visszaállítottam a lap korábbi változatát (szerkesztőnév eltávolítva) szerkesztéséről [[User:$1|$1]] szerkesztésére",
"rollback-success": "$1 szerkesztéseit visszaállítottam $2 utolsó változatára.",
"sessionfailure-title": "Munkamenethiba",
- "sessionfailure": "Úgy látszik, hogy probléma van a bejelentkezési munkameneteddel;\nez a művelet a munkamenet eltérítése miatti óvatosságból megszakadt.\nKérjük, hogy nyomd meg a \"vissza\" gombot, és töltsd le újra az oldalt, ahonnan jöttél, majd próbáld újra.",
+ "sessionfailure": "Úgy látszik, hogy probléma van a bejelentkezési munkameneteddel;\nez a művelet a munkamenet eltérítése miatti óvatosságból megszakadt.\nKérjük, hogy nyomd meg a „vissza” gombot, és töltsd le újra az oldalt, ahonnan jöttél, majd próbáld újra.",
"protectlogpage": "Lapvédelmi napló",
"protectlogtext": "Alább látható a lapvédelemmel kapcsolatos változtatások listája.\nA [[Special:ProtectedPages|védett lapok listáján]] megtekintheted a jelenleg is érvényben lévő védelmeket.",
"protectedarticle": "levédte a(z) [[$1]] lapot",
@@ -1739,9 +1801,9 @@
"protect-locked-dblock": "A védelmi szinteket egy aktív adatbázis zárolás miatt nem változtathatod meg.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
"protect-locked-access": "A fiókod számára nem engedélyezett a védelmi szintek megváltoztatása.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
"protect-cascadeon": "A lap jelenleg le van védve, mert {{PLURAL:$1|tartalmazza az alábbi lap, amelyen|tartalmazzák az alábbi lapok, amelyeken}} be van kapcsolva a kaszkád védelem.\nEzen lap védelmi szintjének megváltoztatása nem lesz hatással a kaszkád védelemre.",
- "protect-default": "Minden szerkesztő számára engedélyezett",
- "protect-fallback": "\"$1\" engedély szükséges hozzá",
- "protect-level-autoconfirmed": "Csak automatikusan megerősített szerkesztőknek engedélyezett (nem vagy frissen regisztráltaknak nem)",
+ "protect-default": "minden szerkesztő számára engedélyezett",
+ "protect-fallback": "„$1”-i engedély szükséges hozzá",
+ "protect-level-autoconfirmed": "automatikusan megerősített szerkesztők számára",
"protect-level-sysop": "csak adminisztrátoroknak engedélyezett",
"protect-summary-cascade": "kaszkád védelem",
"protect-expiring": "lejár: $1 (UTC)",
@@ -1776,7 +1838,7 @@
"undeletepagetext": "Az alábbi {{PLURAL:$1|lapot törölték, de még helyreállítható|$1 lapot törölték, de még helyreállíthatók}} az archívumból.\nAz archívumot időről időre üríthetik!",
"undelete-fieldset-title": "Változatok helyreállítása",
"undeleteextrahelp": "A lap teljes helyreállításához ne jelölj be egy jelölőnégyzetet sem, csak kattints a '''''{{int:undeletebtn}}''''' gombra.\nA lap részleges helyreállításához jelöld be a kívánt változatok melletti jelölőnégyzeteket, és kattints a '''''{{int:undeletebtn}}''''' gombra.",
- "undeleterevisions": "{{PLURAL:$1|egy|$1}} változat archiválva",
+ "undeleterevisions": "$1 változat archiválva",
"undeletehistory": "Ha helyreállítasz egy lapot, azzal visszahozod laptörténet összes változatát.\nHa lap törlése óta azonos néven már létrehoztak egy újabb lapot, a helyreállított\nváltozatok a laptörténet végére kerülnek be, a jelenlegi lapváltozat módosítása nélkül.",
"undeleterevdel": "A törlés visszavonása nem hajtható végre, ha a legfrissebb lapváltozat részleges törlését eredményezi.\nIlyen esetekben vissza kell vonnod a legújabb törölt változatok kijelölését vagy azok elrejtését.",
"undeletehistorynoadmin": "Ezt a szócikket törölték. A törlés okát alább az összegzésben\nláthatod, az oldalt a törlés előtt szerkesztő felhasználók részleteivel együtt. Ezeknek\na törölt változatoknak a tényleges szövege csak az adminisztrátorok számára hozzáférhető.",
@@ -1788,7 +1850,7 @@
"undeleteviewlink": "megtekintés",
"undeleteinvert": "Kijelölés megfordítása",
"undeletecomment": "Ok:",
- "undeletedrevisions": "{{PLURAL:$1|egy|$1}} változat helyreállítva",
+ "undeletedrevisions": "$1 változat helyreállítva",
"undeletedrevisions-files": "{{PLURAL:$1|egy|$1}} változat és {{PLURAL:$2|egy|$2}} fájl visszaállítva",
"undeletedfiles": "{{PLURAL:$1|egy|$1}} fájl visszaállítva",
"cannotundelete": "Lap visszaállítása sikertelen: $1",
@@ -1818,6 +1880,7 @@
"contributions-title": "$1 közreműködései",
"mycontris": "Közreműködések",
"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)",
"month": "E hónap végéig:",
@@ -1858,7 +1921,7 @@
"autoblockid": "$1. autoblokk",
"block": "Felhasználó blokkolása",
"unblock": "Felhasználó blokkolásának feloldása",
- "blockip": "Blokkolás",
+ "blockip": "{{GENDER:$1|Felhasználó}} blokkolása",
"blockip-legend": "Felhasználó blokkolása",
"blockiptext": "Az alábbi űrlap segítségével megvonhatod egy szerkesztő vagy IP-cím szerkesztési jogait.\nÜgyelj rá, hogy az intézkedésed mindig legyen tekintettel a vonatkozó [[{{MediaWiki:Policy-url}}|irányelvekre]].\nAdd meg a blokkolás okát is (például idézd a blokkolandó személy által vandalizált lapokat).",
"ipaddressorusername": "IP-cím vagy felhasználói név",
@@ -1929,7 +1992,7 @@
"blocklog-showsuppresslog": "Ez a felhasználó korábban blokkot kapott, és a naplóbejegyzés el lett rejtve. Az elrejtési napló alább látható tájékoztatásként:",
"blocklogentry": "„[[$1]]” blokkolva $2 időtartamra $3",
"reblock-logentry": "megváltoztatta [[$1]] blokkjának beállításait, a blokk lejárta: $2 $3",
- "blocklogtext": "Ez a felhasználókra helyezett blokkoknak és azok feloldásának listája. Az automatikus blokkolt IP címek nem szerepelnek a listában. Lásd még [[Special:BlockList|a jelenleg életben lévő blokkok listáját]].",
+ "blocklogtext": "Ez a felhasználókra helyezett blokkoknak és azok feloldásának listája. Az automatikusan blokkolt IP-címek nem szerepelnek a listában. Lásd még [[Special:BlockList|a jelenleg életben lévő blokkok listáját]].",
"unblocklogentry": "„$1” blokkolása feloldva",
"block-log-flags-anononly": "csak anonok",
"block-log-flags-nocreate": "nem hozhat létre új fiókot",
@@ -1980,11 +2043,14 @@
"movepagetalktext": "A laphoz tartozó vitalap automatikusan átneveződik, '''kivéve, ha:'''\n*már létezik egy nem üres vitalap az új helyen,\n*nem jelölöd be a lenti pipát.\n\nEzen esetekben a vitalapot külön, kézzel kell átnevezned a kívánságaid szerint.",
"movearticle": "Lap átnevezése",
"moveuserpage-warning": "'''Figyelem:''' Egy felhasználólapot készülsz átmozgatni. Csak a lap lesz átmozgatva, a szerkesztő ''nem'' lesz átnevezve.",
+ "movecategorypage-warning": "<strong>Figyelmeztetés:</strong> Éppen egy kategórialapot készülsz átnevezni. Figyelj arra, hogy csak a lap lesz átnevezve, az idekategorizált lapok <em>nem</em> lesznek átkategorizálva.",
"movenologintext": "Ahhoz, hogy átnevezhess egy lapot, [[Special:UserLogin|be kell lépned]].",
"movenotallowed": "Nincs jogod a lapok átnevezéséhez.",
"movenotallowedfile": "Nincs megfelelő jogosultságod a fájlok átnevezéséhez.",
"cant-move-user-page": "Nem nevezhetsz át szerkesztői lapokat (az allapokon kívül).",
"cant-move-to-user-page": "Nincs jogosultságod átnevezni egy lapot szerkesztői lapnak (kivéve annak allapjának).",
+ "cant-move-category-page": "Nincs jogosultságod kategórialapok átnevezéséhez.",
+ "cant-move-to-category-page": "Nincs jogosultságod átnevezni egy lapot kategórialapnak.",
"newtitle": "Az új cím:",
"move-watch": "Figyeld a lapot",
"movepagebtn": "Lap átnevezése",
@@ -2071,8 +2137,10 @@
"thumbnail_gd-library": "A GD-könyvtár nincs megfelelően beállítva: a(z) $1 függvény hiányzik",
"thumbnail_image-missing": "Úgy tűnik, hogy a fájl hiányzik: $1",
"import": "Lapok importálása",
- "importinterwiki": "Transwiki importálása",
- "import-interwiki-text": "Válaszd ki az importálandó wikit és lapcímet.\nA változatok dátumai és a szerkesztők nevei megőrzésre kerülnek.\nValamennyi transwiki importálási művelet az [[Special:Log/import|importálási naplóban]] kerül naplózásra.",
+ "importinterwiki": "Importálás más wikiből",
+ "import-interwiki-text": "Válaszd ki az importálandó wikit és lapcímet.\nA változatok dátumai és a szerkesztők nevei megőrzésre kerülnek.\nValamennyi más wikiről való importálás az [[Special:Log/import|importálási naplóban]] kerül naplózásra.",
+ "import-interwiki-sourcewiki": "Forráswiki:",
+ "import-interwiki-sourcepage": "Forráslap:",
"import-interwiki-history": "A lap összes előzményváltozatainak másolása",
"import-interwiki-templates": "Az összes sablon hozzáadása",
"import-interwiki-submit": "Importálás",
@@ -2090,7 +2158,7 @@
"importcantopen": "Nem nyitható meg az importfájl",
"importbadinterwiki": "Rossz wikiközi hivatkozás",
"importsuccess": "Az importálás befejeződött!",
- "importnosources": "Nincsenek transzwikiimport-források definiálva, a közvetlen laptörténet-felküldés pedig nem megengedett.",
+ "importnosources": "Nincsenek források definiálva a wikiközi importáláshoz, a közvetlen laptörténet-felküldés pedig nem megengedett.",
"importnofile": "Nem került importfájl feltöltésre.",
"importuploaderrorsize": "Az importálandó fájl feltöltése nem sikerült, mert nagyobb, mint a megengedett feltöltési méret.",
"importuploaderrorpartial": "Az importálandó fájl feltöltése nem sikerült. A fájl csak részben lett feltöltve.",
@@ -2110,20 +2178,16 @@
"import-options-wrong": "Rossz {{PLURAL:$2|opció|opciók}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "A megadott gyökér oldal címe érvénytelen.",
"import-rootpage-nosubpage": "A(z) \"$1\" névtér nem engedi meg aloldalak használatát.",
- "importlogpage": "Importnapló",
+ "importlogpage": "Importálási napló",
"importlogpagetext": "Lapok szerkesztési előzményekkel történő adminisztratív imporálása más wikikből.",
- "import-logentry-upload": "[[$1]] importálása fájlfeltöltéssel kész",
"import-logentry-upload-detail": "$1 változat importálva",
- "import-logentry-interwiki": "$1 más wikiből áthozva",
"import-logentry-interwiki-detail": "$1 változat innen: $2",
"javascripttest": "JavaScript tesztelés",
- "javascripttest-title": "$1 tesztek futtatása",
"javascripttest-pagetext-noframework": "Ez az oldal JavaStript tesztek futtatására van fenntartva.",
"javascripttest-pagetext-unknownframework": "Ismeretlen teszt keretrendszer: $1.",
"javascripttest-pagetext-frameworks": "Kérlek válaszd valamelyik teszt keretrendszert az alábbiak közül: $1",
"javascripttest-pagetext-skins": "Válassz egy megjelenítő felületet, amin a tesztet futtatod:",
"javascripttest-qunit-intro": "Lásd a [$1 tesztelési dokumentációt] a mediawiki.org helyen.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit tesztcsomag",
"tooltip-pt-userpage": "A szerkesztőlapod",
"tooltip-pt-anonuserpage": "Az általad használt IP-címhez tartozó felhasználói lap",
"tooltip-pt-mytalk": "A vitalapod",
@@ -2133,6 +2197,7 @@
"tooltip-pt-mycontris": "A közreműködéseid listája",
"tooltip-pt-login": "Bejelentkezni javasolt, de nem kötelező.",
"tooltip-pt-logout": "Kijelentkezés",
+ "tooltip-pt-createaccount": "Arra bíztatunk, hogy hozz létre egy fiókot, és jelentkezz be, azonban ez nem kötelező",
"tooltip-ca-talk": "Az oldal tartalmának megvitatása",
"tooltip-ca-edit": "Te is szerkesztheted ezt az oldalt. Mentés előtt használd az előnézet gombot.",
"tooltip-ca-addsection": "Új szakasz nyitása",
@@ -2235,7 +2300,6 @@
"pageinfo-robot-policy": "Indexelés robottal",
"pageinfo-robot-index": "Engedélyezett",
"pageinfo-robot-noindex": "Nem engedélyezett",
- "pageinfo-views": "Megtekintések száma",
"pageinfo-watchers": "Figyelők száma",
"pageinfo-few-watchers": "Kevesebb mint $1 szerkesztő figyeli",
"pageinfo-redirects-name": "Átirányítások száma erre a lapra",
@@ -2312,6 +2376,7 @@
"newimages-summary": "Ezen a speciális lapon láthatóak a legutóbb feltöltött fájlok.",
"newimages-legend": "Fájlnév",
"newimages-label": "Fájlnév (vagy annak részlete):",
+ "newimages-showbots": "Botos feltöltések mutatása",
"noimages": "Nem tekinthető meg semmi.",
"ilsubmit": "Keresés",
"bydate": "dátum szerint",
@@ -2680,7 +2745,6 @@
"exif-urgency-low": "Alacsony ($1)",
"exif-urgency-high": "Magas ($1)",
"exif-urgency-other": "Egyedi prioritás ($1)",
- "watchlistall2": "bármikor",
"namespacesall": "Összes",
"monthsall": "mind",
"confirmemail": "E-mail cím megerősítése",
@@ -2691,8 +2755,8 @@
"confirmemail_sent": "Kaptál egy e-mailt, melyben megtalálod a megerősítéshez szükséges kódot.",
"confirmemail_oncreate": "A megerősítő kódot elküldtük az e-mail címedre.\nEz a kód nem szükséges a belépéshez, de meg kell adnod,\nmielőtt a wiki e-mail alapú szolgáltatásait igénybe veheted.",
"confirmemail_sendfailed": "Nem sikerült elküldeni a megerősítő e-mailt.\nEllenőrizd, hogy nem írtál-e érvénytelen karaktert a címbe.\n\nA levelező üzenete: $1",
- "confirmemail_invalid": "Nem megfelelő kód. A kódnak lehet, hogy lejárt a felhasználhatósági ideje.",
- "confirmemail_needlogin": "Meg kell $1 erősíteni az e-mail címedet.",
+ "confirmemail_invalid": "Nem megfelelő kód.\nLehet, hogy a kód felhasználhatósági ideje lejárt.",
+ "confirmemail_needlogin": "{{ucfirst:$1}} az e-mail címed megerősítéséhez.",
"confirmemail_success": "Az e-mail címed megerősítve. Most már beléphetsz a wikibe.",
"confirmemail_loggedin": "E-mail címed megerősítve.",
"confirmemail_subject": "{{SITENAME}} e-mail cím megerősítés",
@@ -2752,11 +2816,15 @@
"watchlistedit-raw-done": "A figyelőlistád változtatásait elmentettem.",
"watchlistedit-raw-added": "A {{PLURAL:$1|következő|következő $1}} cikket hozzáadtam a figyelőlistádhoz:",
"watchlistedit-raw-removed": "A {{PLURAL:$1|következő|következő $1}} cikket eltávolítottam a figyelőlistádról:",
+ "watchlistedit-clear-title": "A figyelőlista kiürítése",
+ "watchlistedit-clear-legend": "Figyelőlista kiürítése",
+ "watchlistedit-clear-explain": "Minden cím el lesz távolítva a figyelőlistádról",
+ "watchlistedit-clear-submit": "Figyelőlista kiürítése (Ez végleges!)",
+ "watchlisttools-clear": "A figyelőlista kiürítése",
"watchlisttools-view": "Kapcsolódó változtatások",
"watchlisttools-edit": "A figyelőlista megtekintése és szerkesztése",
"watchlisttools-raw": "A nyers figyelőlista szerkesztése",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|vita]])",
- "unknown_extension_tag": "Ismeretlen tag kiterjesztés: $1",
"duplicate-defaultsort": "Figyelem: a(z) „$2” rendezőkulcs felülírja a korábbit („$1”).",
"version": "Névjegy",
"version-extensions": "Telepített kiterjesztések",
@@ -2772,7 +2840,8 @@
"version-parser-function-hooks": "Az értelmező függvényeinek hookjai",
"version-hook-name": "Hook neve",
"version-hook-subscribedby": "Használja",
- "version-version": "(verzió: $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[nincs név]",
"version-license": "MediaWiki licenc",
"version-ext-license": "Licenc",
"version-ext-colheader-name": "Kiterjesztés",
@@ -2794,6 +2863,12 @@
"version-entrypoints": "Belépési pont URL-címek",
"version-entrypoints-header-entrypoint": "Belépési pont",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Telepített könyvtárak",
+ "version-libraries-library": "Könyvtár",
+ "version-libraries-version": "Verzió",
+ "redirect": "Átirányítás fájl, szerkesztő, oldal vagy oldalváltozat alapján",
+ "redirect-legend": "Átirányítás egy fájlra vagy lapra",
+ "redirect-submit": "Mehet",
"redirect-lookup": "Keresés:",
"redirect-value": "Érték:",
"redirect-user": "Felhasználói azonosító",
@@ -2825,10 +2900,11 @@
"specialpages-group-wiki": "A wiki adatai és eszközei",
"specialpages-group-redirects": "Átirányító speciális lapok",
"specialpages-group-spam": "Spam eszközök",
+ "specialpages-group-developer": "Fejlesztői eszközök",
"blankpage": "Üres lap",
"intentionallyblankpage": "Ez a lap szándékosan maradt üresen",
"external_image_whitelist": " #Ezt a sort hagyd pontosan így, ahogy van<pre>\n#Ide reguláris kifejezéseket írhatsz (azon részüket, amik a // közé mennek)\n#Ezek egyeztetve lesznek a külső képek URL-jeivel\n#Egyezés esetén képként fognak megjelenni, egyébként csak link fog rájuk mutatni\n#A #-tel kezdődő sorok megjegyzésnek számítanak\n#A kis- és nagybetűk nincsenek megkülönböztetve\n\n#A reguláris kifejezéseket ezen sor alá írd. Ezt a sort hagyd így, ahogy van.</pre>",
- "tags": "Érvényes módosítási címkék",
+ "tags": "Lapváltozat-címkék",
"tag-filter": "[[Special:Tags|Címke]]szűrő:",
"tag-filter-submit": "Szűrő",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Címke|Címkék}}]]: $2)",
@@ -2837,12 +2913,16 @@
"tags-tag": "Címke neve",
"tags-display-header": "Megjelenése a listákon",
"tags-description-header": "Teljes leírás",
+ "tags-source-header": "Forrás",
"tags-active-header": "Aktív?",
"tags-hitcount-header": "Címkézett változtatások",
"tags-active-yes": "Igen",
"tags-active-no": "Nem",
+ "tags-source-extension": "Egy kiterjesztés határozza meg",
+ "tags-source-none": "Már nincs használatban",
"tags-edit": "szerkesztés",
"tags-hitcount": "{{PLURAL:$1|Egy|$1}} változtatás",
+ "tags-delete-not-allowed": "A kiterjesztés által létrehozott címkék nem törölhetők, ha a kiterjesztés nem engedélyezi kifejezetten azt.",
"comparepages": "Lapok összehasonlítása",
"compare-page1": "1. lap",
"compare-page2": "2. lap",
@@ -2854,8 +2934,8 @@
"compare-revision-not-exists": "A megadott lapváltozat nem létezik.",
"dberr-problems": "Sajnáljuk, de az oldallal technikai problémák vannak.",
"dberr-again": "Várj néhány percet, majd frissítsd az oldalt.",
- "dberr-info": "(Nem sikerült kapcsolatot létesíteni az adatbázisszerverrel: $1)",
- "dberr-info-hidden": "(Nem sikerült kapcsolatot létesíteni az adatbázisszerverrel)",
+ "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.",
@@ -2895,6 +2975,7 @@
"revdelete-uname-unhid": "szerkesztő megjelenítve",
"revdelete-restricted": "elrejtett az adminisztrátorok elől",
"revdelete-unrestricted": "felfedett az adminisztrátoroknak",
+ "logentry-block-block": "$1 {{GENDER:$2|blokkolta}} „{{GENDER:$4|$3}}”-t $5 időtartamra $6",
"logentry-move-move": "$1 átnevezte a(z) $3 lapot a következő névre: $4",
"logentry-move-move-noredirect": "$1 átnevezte a(z) $3 lapot $4 lapra átirányítás nélkül",
"logentry-move-move_redir": "$1 átnevezte a(z) $3 lapot $4 lapra az átirányítást felülírva",
@@ -2909,20 +2990,22 @@
"logentry-rights-rights": "$1 megváltoztatta $3 csoporttagságát erről: $4 erre: $5",
"logentry-rights-rights-legacy": "$1 megváltoztatta $3 csoporttagságát",
"logentry-rights-autopromote": "$1 automatikusan előléptetve erről: $4 erre: $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|feltöltötte}} ezt: $3",
"rightsnone": "(semmi)",
+ "revdelete-summary": "a szerkesztési összefoglalóját",
+ "feedback-adding": "Visszajelzés elmentése...",
+ "feedback-bugcheck": "Nagyszerű! Ellenőrizd, hogy ez nem egy [$1 ismert hiba].",
+ "feedback-bugnew": "Ellenőriztem. Új hiba jelentése",
"feedback-bugornote": "Ha kész technikai problémát részletesen leírni, akkor kérjük [$1 jelents egy hibát]. Egyébként használd az alábbi űrlapot. A hozzászólásod a „[$3 $2]” laphoz kerül felvételre, a szerkesztő neveddel és böngésződ típusával együtt.",
- "feedback-subject": "Tárgy:",
- "feedback-message": "Üzenet:",
"feedback-cancel": "Mégse",
- "feedback-submit": "Visszajelzés elküldése",
- "feedback-adding": "Visszajelzés elmentése...",
+ "feedback-close": "Kész",
"feedback-error1": "Hiba: az API ismeretlen eredménnyel tért vissza",
"feedback-error2": "Hiba: a szerkesztés nem sikerült",
"feedback-error3": "Hiba: nem érkezett válasz az API-tól",
+ "feedback-message": "Üzenet:",
+ "feedback-subject": "Tárgy:",
+ "feedback-submit": "Elküldés",
"feedback-thanks": "Köszönjük. A visszajelzésed elküldve a „[$2 $1]” laphoz.",
- "feedback-close": "Kész",
- "feedback-bugcheck": "Nagyszerű! Ellenőrizd, hogy ez nem egy [$1 ismert hiba].",
- "feedback-bugnew": "Ellenőriztem. Új hiba jelentése",
"searchsuggest-search": "Keresés",
"searchsuggest-containing": "tartalmazza…",
"api-error-badaccess-groups": "Nincs jogod fájlokat feltölteni erre a wikire.",
@@ -3001,5 +3084,44 @@
"right-pagelang": "Oldal nyelvének megváltoztatása",
"action-pagelang": "oldal nyelvének módosítása",
"log-name-pagelang": "Nyelvváltoztatások naplója",
- "log-description-pagelang": "Ebben a naplóban a lap nyelvének változásait követheted nyomon."
+ "log-description-pagelang": "Ebben a naplóban a lap nyelvének változásait követheted nyomon.",
+ "mediastatistics": "Feltöltött fájlok statisztikája",
+ "mediastatistics-summary": "Az alábbi statisztika a feltöltött fájlok alapján készült, mely a fájlok legfrissebb változatát tartalmazza a régi, vagy törölt fájlok kivételével.",
+ "mediastatistics-table-mimetype": "MIME-típus",
+ "mediastatistics-table-extensions": "Lehetséges kiterjesztések",
+ "mediastatistics-table-count": "Fájlok száma",
+ "mediastatistics-table-totalbytes": "Kombinált méret",
+ "mediastatistics-header-unknown": "Ismeretlen",
+ "mediastatistics-header-bitmap": "Bittérképes képek",
+ "mediastatistics-header-drawing": "Rajzok (vektoros képek)",
+ "mediastatistics-header-audio": "Hang",
+ "mediastatistics-header-video": "Videók",
+ "mediastatistics-header-multimedia": "Interaktív média",
+ "mediastatistics-header-office": "Dokumentumok",
+ "mediastatistics-header-text": "Szöveges",
+ "mediastatistics-header-executable": "Futtatható",
+ "mediastatistics-header-archive": "Tömörített formátumok",
+ "json-error-unknown": "Hiba volt a JSON-ban. Hiba: $1",
+ "json-error-state-mismatch": "Érvénytelen vagy hibás JSON",
+ "json-error-syntax": "Szintaktikai hiba",
+ "json-error-utf8": "Hibás UTF-8 karakter, esetleg helytelenül kódolt",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Bővített latin",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Szimbólumok",
+ "special-characters-group-greek": "Görög",
+ "special-characters-group-cyrillic": "Cirill",
+ "special-characters-group-arabic": "Arab",
+ "special-characters-group-arabicextended": "Arab (bővített)",
+ "special-characters-group-persian": "Perzsa",
+ "special-characters-group-hebrew": "Héber",
+ "special-characters-group-bangla": "Bengáli",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Szingaléz",
+ "special-characters-group-gujarati": "Gudzsaráti",
+ "special-characters-group-devanagari": "Dévanágari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/hy.json b/languages/i18n/hy.json
index bea41553..d5d575fd 100644
--- a/languages/i18n/hy.json
+++ b/languages/i18n/hy.json
@@ -17,7 +17,9 @@
"Համլետ",
"לערי ריינהארט",
"아라",
- "Lilitik22"
+ "Lilitik22",
+ "GrigorGB",
+ "Աշոտ1997"
]
},
"tog-underline": "ընդգծել հղումները՝",
@@ -28,21 +30,21 @@
"tog-usenewrc": "Խմբավորել փոփոխությունները վերջին փոփոխություններում և հսկացանկում (պահանջում է JavaScript)",
"tog-numberheadings": "Ինքնաթվագրել վերնագրերը",
"tog-showtoolbar": "Ցույց տալ խմբագրումների գործիքների վահանակը",
- "tog-editondblclick": "Խմբագրել էջերը կրկնակի մատնահարմամբ",
- "tog-editsectiononrightclick": "Խմբագրել բաժինները վերնագրի աջ մատնահարմամբ",
- "tog-watchcreations": "Ավելացնել իմ ստեղծած էջերը և բեռնած նիշքերը հսկացանկում",
- "tog-watchdefault": "Ավելացնել իմ խմբագրած էջերը և նիշքերը հսկացանկում",
- "tog-watchmoves": "Ավելացնել իմ վերնավանած էջերը և նիշքերը հսկացանկում",
- "tog-watchdeletion": "Ավելացնել իմ ջնջած էջերը և նիշքերը հսկացանկում",
- "tog-minordefault": "Խմբագրումները լռելյայն նշել որպես չնչին",
+ "tog-editondblclick": "Խմբագրել էջերը կրկնակի սեղմամբ",
+ "tog-editsectiononrightclick": "Խմբագրել բաժինները վերնագրի աջ սեղմամբ",
+ "tog-watchcreations": "Ավելացնել իմ ստեղծած էջերը և բեռնած նիշքերը իմ հսկացանկում",
+ "tog-watchdefault": "Ավելացնել իմ խմբագրած էջերը և նիշքերը իմ հսկացանկում",
+ "tog-watchmoves": "Ավելացնել իմ վերնավանած էջերը և նիշքերը իմ հսկացանկում",
+ "tog-watchdeletion": "Ավելացնել իմ ջնջած էջերը և նիշքերը իմ հսկացանկում",
+ "tog-minordefault": "Բոլոր խմբագրումները լռելյայն կերպով նշել որպես չնչին",
"tog-previewontop": "Ցույց տալ նախադիտումը խմբագրման դաշտից առաջ",
- "tog-previewonfirst": "Նախադիտել մինչև առաջին խմբագրությունը",
+ "tog-previewonfirst": "Ցուցադրել նախադիտումը մինչև առաջին խմբագրումը",
"tog-enotifwatchlistpages": "էլ-փոստով տեղեկացնել հսկվող էջերում փոփոխությունների մասին",
"tog-enotifusertalkpages": "էլ-փոստով տեղեկացնել իմ քննարկման էջի փոփոխության մասին",
- "tog-enotifminoredits": "էլ-փոստով տեղեկացնել էջերի նաև չնչին խմբագրումների մասին",
+ "tog-enotifminoredits": "էլ-փոստով տեղեկացնել նաև էջերի չնչին խմբագրումների մասին",
"tog-enotifrevealaddr": "Ցույց տալ իմ էլ-փոստի հասցեն ծանուցման նամակներում",
- "tog-shownumberswatching": "Ցույց տալ էջ հսկող մասնակիցների թիվը",
- "tog-oldsig": "Ներկայիս ստորագրությունն է․",
+ "tog-shownumberswatching": "Ցույց տալ հսկող մասնակիցների թիվը",
+ "tog-oldsig": "Ընթացիկ ստորագրությունը՝",
"tog-fancysig": "Ստորագրությունը վիքիտեքստի տեսքով (առանց ավտոմատ հղման)",
"tog-uselivepreview": "Օգտագործել անմիջական նախադիտում, առանց էջը վերբեռնելու (փորձնական)",
"tog-forceeditsummary": "Նախազգուշացնել խմբագրման ամփոփումը դատարկ թողնելու դեպքում",
@@ -57,6 +59,7 @@
"tog-showhiddencats": "Ցուցադրել թաքնված կատեգորիաները",
"tog-norollbackdiff": "Չցուցադրել տարբերությունները հետ գլորելուց հետո",
"tog-useeditwarning": "Զգուշացնել ինձ, երբ ես լքում եմ խմբագրման էջը առանց կատարած փոփոխությունները հիշելու։",
+ "tog-prefershttps": "Մուտք գործելուց հետո, միշտ գործածել անվնտանգ միացումից (HTTPS)",
"underline-always": "Միշտ",
"underline-never": "Երբեք",
"underline-default": "Դիտարկչի կամ թեմայի լռելյայն ոճով",
@@ -267,7 +270,7 @@
"hidetoc": "թաքցնել",
"collapsible-collapse": "Ծալել",
"collapsible-expand": "Բացել",
- "confirmable-confirm": "{{GENDER:$1|Դուք}} վստա՞հ եք:",
+ "confirmable-confirm": "{{GENDER:$1|Դուք}} վստա՞հ եք։",
"confirmable-yes": "Այո",
"confirmable-no": "Ոչ",
"thisisdeleted": "Դիտե՞լ կամ վերականգնե՞լ $1։",
@@ -334,7 +337,7 @@
"viewsource-title": "Դիտել $1 էջի աղբյուրը",
"actionthrottled": "Գործողությունը արգելափակվեց",
"actionthrottledtext": "Որպես հակա-սպամային միջոց, այս գործողության չափից շատ կատարումը կարճ ժամանակահատվածի ընթացքում սահմանափակված է։ Խնդրում ենք փորձել կրկին մի քանի րոպե անց։",
- "protectedpagetext": "Այս էջը կողպված է խմբագրման համար։",
+ "protectedpagetext": "Այս էջը պաշտպանված է խմբագումներից։",
"viewsourcetext": "Դուք կարող եք դիտել և պատճենել այս էջի ելատեքստը.",
"viewyourtext": "Դուք կարող եք դիտել «ձեր ներդրումների» աղբյուրը և պատճենել այս էջ",
"protectedinterface": "Այս էջը պարունակում է ծրագրային ապահովման միջերեսի տեքստ, և պաշտպանված է չարաշահումների կանխարգելման նպատակով։\nԲոլոր վիքիների թարգմանությունները փոփոխելու կամ ավելացնելու համար, խնդրում ենք այցելել ՄեդիաՎիքիի տեղայնացման նախագիծը՝ [//translatewiki.net/ translatewiki.net]։",
@@ -389,6 +392,8 @@
"gotaccountlink": "Մուտք գործեք համակարգ",
"userlogin-resetlink": "Մոռացե՞լ եք Ձեր հաշվի տվյալները։",
"userlogin-resetpassword-link": "Մոռացե՞լ եք գաղտնաբառը",
+ "userlogin-helplink2": "Մուտք գործելու օգնություն",
+ "userlogin-createanother": "Ստեղծել այլ հաշիվ",
"createacct-emailrequired": "Էլ–փոստի հասցե",
"createacct-emailoptional": "Էլ–փոստի հասցե (ոչ պարտադիր)",
"createacct-email-ph": "Մուտքագրեք ձեր էլ–փոստի հասցեն",
@@ -401,6 +406,7 @@
"createacct-captcha": "Անվտանգության ստուգում",
"createacct-imgcaptcha-ph": "Մուտքագրեք վերը բերված գրվածքը",
"createacct-submit": "Ստեղծել ձեր հաշիվը",
+ "createacct-another-submit": "Ստեղծել մեկ այլ հաշիվ",
"createacct-benefit-heading": "{{SITENAME}}՝ ստեղծվում է ձեր պես մարդկանց կողմից։",
"createacct-benefit-body1": "{{PLURAL:$1|խմբագրում}}",
"createacct-benefit-body2": "{{PLURAL:$1|էջ}}",
@@ -425,7 +431,7 @@
"passwordtooshort": "Գաղտնաբառը պետք է պարունակի առնվազն {{PLURAL:$1|1 սիմվոլ|$1 սիմվոլ}}։",
"password-name-match": "Գաղտնաբառը պետք է տարբեր լինել ձեր մասնակցի անունից։",
"password-login-forbidden": "Այս ծածկանվան և գաղտնաբառի օգտագործումն արգելված է",
- "mailmypassword": "Վերականգնել գաղտնաբառը",
+ "mailmypassword": "Փոխել գաղտնաբառը",
"passwordremindertitle": "Նոր ժամանակավոր գաղտնաբառ {{grammar:genitive|{{SITENAME}}}} համար",
"passwordremindertext": "Ինչ-որ մեկը (հավանաբար դուք՝ $1 IP-հասցեից) խնդրել է նոր գաղտնաբառ {{grammar:genitive|{{SITENAME}}}} ($4)։ «$2» մասնակցի ժամանակավոր գաղտնաբառն է՝ <code>$3</code>։ Եթե սա իսկապես ձեր մտադրություններ, ապա ձեզ հարկավոր է մտնել համակարգ և փոխել գաղտնաբառը։ Ձեր ժամանակավոր գաղտնաբառը գործելու է {{PLURAL:$5|օր|$5 օր}}։\n\nԵթե դուք չեք արել այսպիսի հայցում կամ արդեն հիշել եք ձեր գաղտնաբառը և մտադրություն չունեք այն փոխել, ապա կարող եք անտեսել այս ուղերձը և շարունակել օգտվել ձեր հին գաղտնաբառից։",
"noemail": "«$1» մասնակցի համար էլ-փոստի հասցե չի նշվել։",
@@ -512,7 +518,7 @@
"showpreview": "Նախադիտել",
"showdiff": "Կատարված փոփոխությունները",
"anoneditwarning": "'''Ուշադրություն.''' Դուք չեք մտել համակարգ։\nՁեր IP հասցեն կգրանցվի այս էջի խմբագրումների պատմության մեջ։",
- "anonpreviewwarning": "Դուք չեք մտել համակարգ։\n''Հիշելով ձեր կատարած խմբագրումը, այն կգրանցվի Ձեր IP հասցեի ներքո այս էջի խմբագրումների պատմության մեջ։''",
+ "anonpreviewwarning": "<em>Դուք չեք մտել համակարգ։\nՀիշելով Ձեր կատարած խմբագրումը, այն կպահանվի Ձեր IP հասցեի հետ միասին այս էջի խմբագրումների պատմության մեջ։</em>",
"missingsummary": "'''Հիշեցում.''' Դուք չեք տվել խմբագրման ամփոփում։ «Հիշել» կոճակի կրկնակի մատնահարման դեպքում փոփոխությունները կհիշվեն առանց ամփոփման։",
"missingcommenttext": "Խնդրում ենք մեկնաբանություն ավելացնել ստորև։",
"missingcommentheader": "'''Հիշեցում.''' Դուք չեք նշել մեկնաբանության վերնագիրը։ «Հիշել» կոճակի կրկնակի մատնահարման դեպքում ձեր մեկնաբանությունը կհիշվի առանց վերնագրի։",
@@ -594,6 +600,7 @@
"editwarning-warning": "Այս էջը լքելով դուք կարող եք կորցնել ձեր կատարած փոփոխությունները։\nԵթե դուք գրանցված եք համակարգում, կարող եք անջատել այս նախազգուշացումը ձեր նախընրությունների «{{int:prefs-editing}}» բաժնում։",
"content-model-wikitext": "վիքիտեքստ",
"content-model-javascript": "ՋավաՍկրիպտ",
+ "content-model-css": "ՍիԷսԷս",
"undo-success": "Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։",
"undo-failure": "Խմբագրումը չի կարող հետ շրջվել միջանկյալ խմբագրումների ընդհարման պատճառով։",
"undo-summary": "Հետ է շրջվում $1 խմբագրումը, որի հեղինակն է՝ [[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) {{GENDER:$2|մասնակիցը|մասնակցուհին}}",
@@ -668,7 +675,7 @@
"mergehistory-reason": "Պատճառ՝",
"revertmerge": "Անջատել",
"history-title": "«$1» էջի փոփոխումների պատմություն",
- "difference-title": "$1: Խմբագրումների տարբերություն",
+ "difference-title": "«$1»–ի խմբագրումների տարբերություն",
"difference-title-multipage": "$1 և $2: Խմբագրումների տարբերություն",
"difference-multipage": "(Էջերի տարերություն)",
"lineno": "Տող $1.",
@@ -727,6 +734,7 @@
"prefs-personal": "Անձնական",
"prefs-rc": "Վերջին փոփոխություններ",
"prefs-watchlist": "Հսկացանկ",
+ "prefs-editwatchlist": "Խմբագրել հսկացանկը",
"prefs-watchlist-days": "Հսկացանկում ցուցադրվող օրերի թիվը՝",
"prefs-watchlist-days-max": "Առավելագույնը $1 {{PLURAL:$1|օր}}",
"prefs-watchlist-edits": "Ընդարձակված հսկացանկում ցուցադրվող օրերի թիվը՝",
@@ -870,6 +878,7 @@
"action-deletedhistory": "Դիտել այս էջի ջնջված պատմությունը",
"action-rollback": "արագ հետ գլորել էջը վերջին անգամ խմբագրած մասնակցի կատարած փոփոխությունները",
"nchanges": "$1 {{PLURAL:$1|փոփոխություն|փոփոխություն}}",
+ "enhancedrc-history": "պատմություն",
"recentchanges": "Վերջին փոփոխություններ",
"recentchanges-legend": "Վերջին փոփոխությունների նախընտրություններ",
"recentchanges-summary": "Հետևեք վիքիում կատարված վերջին փոփոխություններին այս էջում։",
@@ -878,7 +887,7 @@
"recentchanges-label-minor": "Սա չնչին խմբագրում է",
"recentchanges-label-bot": "Այս խմբագրումը կատարվել է բոտի կողմից",
"recentchanges-label-unpatrolled": "Այս խմբագրումը դեռ չի պարեկվել",
- "recentchanges-label-plusminus": "Էջի չափսն փոխոխվեց այսքան բայթով։",
+ "recentchanges-label-plusminus": "Էջի չափսը փոփոխվեց այսքան բայթով",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (տես նաև՝ [[Special:NewPages|նոր էջերի ցանկ]])",
"rcnotefrom": "Ստորև բերված են փոփոխությունները սկսած՝ '''$2''' (մինչև՝ '''$1''')։",
"rclistfrom": "Ցույց տալ նոր փոփոխությունները սկսած $3 $2",
@@ -1013,7 +1022,7 @@
"filehist-dimensions": "Օբյեկտի չափը",
"filehist-filesize": "Նիշքի չափ",
"filehist-comment": "Մեկնաբանություն",
- "imagelinks": "Հղումներ նիշքին",
+ "imagelinks": "Նիշքի օգտագործում",
"linkstoimage": "Հետևյալ {{PLURAL:$1|էջը հղվում է|$1 էջերը հղվում են}} այս նիշքին՝",
"nolinkstoimage": "Այս նիշքին հղվող էջեր չկան։",
"sharedupload": "Այս նիշքը $1 զետեղարանից է և կարող է օգտագործվել այլ նախագծերում։",
@@ -1023,6 +1032,7 @@
"uploadnewversion-linktext": "Բեռնել այս նիշքի նոր տարբերակ",
"shared-repo-from": "$1-ից",
"shared-repo-name-wikimediacommons": "Վիքիպահեստ",
+ "upload-disallowed-here": "Դուք չեք կարող վերագրել այս նիշքը։",
"filerevert": "Հետ շրջել $1-ը",
"filerevert-legend": "Հետ շրջել նիշքը",
"filerevert-intro": "Դուք հետ եք շրջում '''[[Media:$1|$1]]''' նիշքը [$4 տարբերակի՝ $3, $2 պահով]։",
@@ -1061,7 +1071,6 @@
"statistics": "Վիճակագրություն",
"statistics-header-pages": "Էջերի վիճակագրություն",
"statistics-header-edits": "Խմբագրումների վիճակագրություն",
- "statistics-header-views": "Դիտումների վիճակագրություն",
"statistics-header-users": "Մասնակիցների վիճակագրություն",
"statistics-header-hooks": "Այլ վիճակագրություն",
"statistics-articles": "Հոդվածներ",
@@ -1070,12 +1079,9 @@
"statistics-files": "Բեռնված նիշքեր",
"statistics-edits": "Խմբագրումները {{SITENAME}} կայքի տեղադրումից ի վեր",
"statistics-edits-average": "Էջի խմբագրումների միջին թիվը",
- "statistics-views-total": "Ընդհանուր դիտումներ",
- "statistics-views-peredit": "Դիտումներ ամեն մի խմբագրման համար",
"statistics-users": "Գրանցված [[Special:ListUsers|մասնակիցներ]]",
"statistics-users-active": "Ակտիվ մասնակիցներ",
"statistics-users-active-desc": "Վերջին {{PLURAL:$1|օր|$1 օր}}ում որևէ գործողություն են կատարած մասնակիցներ",
- "statistics-mostpopular": "Ամենահաճախ դիտվող էջեր",
"pageswithprop-submit": "Անցնել",
"doubleredirects": "Կրկնակի վերահղումներ",
"doubleredirectstext": "Այս էջում բերված են վերահղման էջերին վերահղող էջերը։ Յուրաքանչյուր տող պարունակում է հղումներ դեպի առաջին և երկրորդ վերահղումները, ինչպես նաև երկրորդ վերահղման նպատակային էջի առաջին տողը, որում սովորաբար նշված է էջի անվանումը, որին պետք է հղի նաև առաջին վերահղումը։",
@@ -1108,7 +1114,6 @@
"uncategorizedtemplates": "Չդասակարգված կաղապարներ",
"unusedcategories": "Չօգտագործվող կատեգորիաներ",
"unusedimages": "Չօգտագործվող նիշքեր",
- "popularpages": "Հաճախ այցելվող էջեր",
"wantedcategories": "Անհրաժեշտ կատեգորիաներ",
"wantedpages": "Անհրաժեշտ էջեր",
"wantedfiles": "Անհրաժեշտ նիշքեր",
@@ -1144,7 +1149,7 @@
"pager-older-n": "{{PLURAL:$1|ավելի հին 1|ավելի հին $1}}",
"booksources": "Գրքային աղբյուրներ",
"booksources-search-legend": "Գրքի մասին տեղեկությունների որոնում",
- "booksources-go": "Անցնել",
+ "booksources-search": "Որոնել",
"booksources-text": "Ստորև բերված են հղումներ դեպի արտաքին կայքեր, որտեղ կգտնեք հավելյալ տեղեկություններ գրքի մասին։ Սրանց մեջ ընդգրկված են ցանցային գրախանութներ և ընդհանուր գրադարանային կատալոգներ։",
"booksources-invalid-isbn": "Նշված ISBN համարը ըստ երևույթի սխալ է պարունակում։ Համոզվեք որ համարը մուտքագրելիս, սխալ չի պատահել։",
"specialloguserlabel": "Մասնակից.",
@@ -1224,7 +1229,7 @@
"wlheader-enotif": "Էլ-փոստով տեղեկացումը միացված է։",
"wlheader-showupdated": "Էջերը, որոնք փոփոխվել են ձեր դրանց վերջին այցից հետո բերված են '''թավատառ'''։",
"wlnote": "Ստորև բերված {{PLURAL:$1|է վերջին փոփոխությունը|են վերջին '''$1''' փոփոխությունները}} վերջին <strong>$2</strong> ժամվա ընթացքում։",
- "wlshowlast": "Ցուցադրել վերջին $1 ժամերը $2 օրերը $3",
+ "wlshowlast": "Ցուցադրել վերջին $1 ժամերը $2 օրերը",
"watchlist-options": "Հսկացանկի նախընտրություններ",
"watching": "Հսկվում է...",
"unwatching": "Հանվում է հսկումից...",
@@ -1262,7 +1267,6 @@
"deletereason-dropdown": "*Ջնջման տարածված պատճառներ\n** Հեղինակի խնդրանքով\n** Հեղինակային իրավունքների խախտում\n** Վանդալություն",
"delete-edit-reasonlist": "Խմբագրել ջնջման պատճառները",
"rollback": "Հետ գլորել խմբագրումները",
- "rollback_short": "Հետ գլորել",
"rollbacklink": "հետ գլորել",
"rollbacklinkcount": "հետ գլորել $1 {{PLURAL:$1|խմբագրում}}",
"rollbackfailed": "Հետ գլորումը ձախողվեց",
@@ -1568,9 +1572,7 @@
"import-upload": "Բեռնված է XML-ի դատան",
"importlogpage": "Ներմուծման տեղեկամատյան",
"importlogpagetext": "Ադմինիստրատորների կողմից այլ վիքիներից իրենց պատմությունների հետ էջերի ներմուծումներ։",
- "import-logentry-upload": "ներմուծվել է «[[$1]]» նիշքի բեռնումով",
"import-logentry-upload-detail": "$1 տարբերակ",
- "import-logentry-interwiki": "«$1»՝ միջվիքի ներմուծմամբ",
"import-logentry-interwiki-detail": "$1 տարբերակ $2-ից",
"tooltip-pt-userpage": "Ձեր մասնակցի էջը",
"tooltip-pt-anonuserpage": "Ձեր IP-հասցեի մասնակցային էջը",
@@ -1633,6 +1635,7 @@
"tooltip-upload": "Սկսել բեռնումը",
"tooltip-rollback": "Մեկ սեղմումով հետ շրջել վերջին մասնակցի կատարած բոլոր խմբագրումները",
"tooltip-undo": "Հետ շրջել կատարված փոփոխությունը և բացել խմբագրման ձևը նախադիտման ռեժիմով՝ թույլ տալով ավելացնել հետ շրջման պատճառը։",
+ "tooltip-summary": "Մուտքագրեք հակիրճ ամփոփում",
"common.css": "/** Այստեղ տեղադրված CSS կոդը կկիրառվի բոլոր տեսքերի վրա */",
"common.js": "/* Այստեղ տեղադրված JavaScript կոդը կբեռնվի բոլոր մասնակիցների համար էջերի բոլոր դիմումների ժամանակ */",
"anonymous": "{{SITENAME}}ի անանուն {{PLURAL:$1|մասնակից|մասնակիցներ}}",
@@ -1649,6 +1652,7 @@
"spambot_username": "Սպամի մաքրում",
"spam_reverting": "Հետ է շրջվում վերջին տարբերակի, որը չի պարունակում հղումներ դեպի $1",
"spam_blanking": "Բոլոր տարբերակները պարունակում են հղումներ դեպի $1, մաքրում",
+ "simpleantispam-label": "Հակա–լցոնային ստուգում։\n<strong>Մի՛</strong> լռացրեք սա։",
"pageinfo-title": "$1-ի տվյալներ",
"pageinfo-not-current": "Ցավոք հին խմբագրումների համար այս տվյալները հասանելի չեն։",
"pageinfo-header-basic": "Հիմնական տվյալներ",
@@ -1663,7 +1667,6 @@
"pageinfo-robot-policy": "Կարգավիճակը որոնողական համակարգերում",
"pageinfo-robot-index": "ինդեքսավորվող",
"pageinfo-robot-noindex": "ինդեքսավորվող չէ",
- "pageinfo-views": "Դիտումների քանակ",
"pageinfo-watchers": "Դիտողների քանակ",
"pageinfo-redirects-name": "վերահղումներ այս էջին",
"pageinfo-subpages-name": "Ենթաէջեր",
@@ -1715,7 +1718,9 @@
"file-info-size": "$1 × $2 փիքսել, նիշքի չափը՝ $3, MIME-տեսակը՝ $4",
"file-nohires": "Ավելի բարձր կետաչափով տարբերակ չկա։",
"svg-long-desc": "SVG-նիշք, անվանապես $1 × $2 փիքսել, նիշքի չափը՝ $3",
- "show-big-image": "Լրիվ թույլատվությամբ",
+ "show-big-image": "Սկզբնական նիշք",
+ "show-big-image-preview": "Նախադիտման չափ՝ $1։",
+ "show-big-image-size": "$1 × $2 պիքսել",
"newimages": "Նոր նիշքերի սրահ",
"imagelisttext": "Ստորև բերված է '''$1''' {{PLURAL:$1|նիշքի}} ցանկ՝ դասավորված ըստ $2։",
"newimages-legend": "Ֆիլտր",
@@ -1740,15 +1745,25 @@
"metadata-fields": "EXIF մետատվյալների այն դաշտերը, որոնք նշված ենք այս ուղերձի մեջ, կցուցադրվեն պատկերի էջուն լռությամբ։ Այլ տվյալները լռությամբ կթաքցվեն։\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "Լայնք",
"exif-imagelength": "Բարձրություն",
+ "exif-orientation": "Դիրք",
+ "exif-xresolution": "Հորիզոնական կետաչափ",
+ "exif-yresolution": "Ուղղահայաց կետաչափ",
+ "exif-make": "Խցիկի արտադրող",
+ "exif-model": "Խցիկի մոդել",
+ "exif-software": "Օգտագործված ծրագիր",
"exif-artist": "Հեղինակ",
+ "exif-exifversion": "Էքսիֆի տարբերակ (Exif)",
+ "exif-colorspace": "Գունային տիրույթ",
+ "exif-datetimeoriginal": "Ստեղծման ամսաթիվ",
+ "exif-datetimedigitized": "Թվայնացման ամսաթիվ",
"exif-flash": "Ֆլեշ տարբ.",
"exif-languagecode": "Լեզու",
"exif-label": "Պիտակ",
+ "exif-orientation-1": "Նորմալ",
"exif-componentsconfiguration-0": "գոյություն չունի",
"exif-urgency-normal": "Նորմալ ($1)",
"exif-urgency-low": "Թույլ ($1)",
"exif-urgency-high": "Ուժեղ ($1)",
- "watchlistall2": "բոլոր",
"namespacesall": "բոլոր",
"monthsall": "բոլոր",
"confirmemail": "Էլ-հասցեի վավերացում",
@@ -1777,7 +1792,7 @@
"confirm-watch-button": "ԼԱՎ",
"confirm-watch-top": "Ավելացնե՞լ ձեր հսկացանկին",
"confirm-unwatch-button": "ԼԱՎ",
- "confirm-unwatch-top": "Հեռացնե՞լ ձեր հսկացանկից։",
+ "confirm-unwatch-top": "Հեռացնե՞լ Ձեր հսկացանկից։",
"imgmultipageprev": "← նախորդ էջ",
"imgmultipagenext": "հաջորդ էջ →",
"imgmultigo": "Անցնե՛լ",
@@ -1850,8 +1865,21 @@
"specialpages-group-spam": "Սպամի գործիքներ",
"blankpage": "Դատարկ էջ",
"intentionallyblankpage": "Այս էջը միտումնավոր դատարկ է թողված։",
+ "tag-filter": "[[Special:Tags|Պիտակների]] զտիչ՝",
"tag-filter-submit": "Ֆիլտրել",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Պիտակ}}]]: $2)",
+ "tags-source-header": "Աղբյուր",
+ "tags-actions-header": "Գործողություններ",
"tags-edit": "խմբագրել",
+ "tags-delete": "ջնջել",
+ "tags-deactivate": "Ապաակտիվացնել",
+ "tags-create-reason": "Պատճառ՝",
+ "tags-create-submit": "Ստեղծել",
+ "tags-delete-reason": "Պատճառ՝",
+ "tags-activate-reason": "Պատճառ՝",
+ "tags-activate-submit": "Ակտիվացնել",
+ "tags-deactivate-reason": "Պատճառ՝",
+ "tags-deactivate-submit": "Ապաակտիվացնել",
"comparepages": "Համեմատել էջեր",
"compare-page1": "Էջ 1",
"compare-page2": "Էջ 2",
@@ -1881,13 +1909,13 @@
"logentry-move-move_redir": "$1 տեղափոխեց էջը «$3»-ից «$4» վերահղման վրայով",
"logentry-move-move_redir-noredirect": "$1 տեղափոխեց էջը «$3»-ից «$4» վերահղման վրայով, առանց վերահղում թողնելու",
"logentry-newusers-newusers": "$1 մասնակիցը ստեղծեց նոր հաշիվ",
- "logentry-newusers-create": "$1 մասնակիցը ստեղծեց նոր հաշիվ",
+ "logentry-newusers-create": "Ստեղծվեց $1 մասնակցի հաշիվ",
"logentry-newusers-create2": "$1 Ստեղծեց նոր հաշիվ $3",
"rightsnone": "(ոչ մի)",
- "feedback-subject": "Թեմա.",
- "feedback-message": "Հաղորդագրություն․",
"feedback-cancel": "Բեկանել",
"feedback-close": "Արված է",
+ "feedback-message": "Հաղորդագրություն․",
+ "feedback-subject": "Թեմա.",
"searchsuggest-search": "Որոնել",
"duration-seconds": "$1 {{PLURAL:$1|վայրկյան}}",
"duration-minutes": "$1 {{PLURAL:$1|րոպե}}",
diff --git a/languages/i18n/ia.json b/languages/i18n/ia.json
index 3edf919f..3f6eb714 100644
--- a/languages/i18n/ia.json
+++ b/languages/i18n/ia.json
@@ -12,7 +12,8 @@
"Yfdyh000",
"לערי ריינהארט",
"아라",
- "Carlosedepaula"
+ "Carlosedepaula",
+ "Macofe"
]
},
"tog-underline": "Sublinear ligamines:",
@@ -40,7 +41,7 @@
"tog-shownumberswatching": "Monstrar le numero de usatores que observa le pagina",
"tog-oldsig": "Signatura existente:",
"tog-fancysig": "Tractar signatura como wikitexto (sin ligamine automatic)",
- "tog-uselivepreview": "Usar previsualisation in directo (experimental)",
+ "tog-uselivepreview": "Usar previsualisation dynamic",
"tog-forceeditsummary": "Avisar me si io non entra un summario de modification",
"tog-watchlisthideown": "Celar mi proprie modificationes in le observatorio",
"tog-watchlisthidebots": "Celar le modificationes de robots in le observatorio",
@@ -228,6 +229,7 @@
"pool-queuefull": "Le cauda commun de processos es plen",
"pool-errorunknown": "Error incognite",
"pool-servererror": "Le servicio de banco de ressources commun non es disponibile ($1).",
+ "poolcounter-usage-error": "Error de uso: $1",
"aboutsite": "A proposito de {{SITENAME}}",
"aboutpage": "Project:A proposito",
"copyright": "Le contento es disponibile sub $1 si non alteremente specificate.",
@@ -237,6 +239,7 @@
"disclaimers": "Declaration de non-responsabilitate",
"disclaimerpage": "Project:Declaration general de non-responsabilitate",
"edithelp": "Adjuta de modification",
+ "helppage-top-gethelp": "Adjuta",
"mainpage": "Pagina principal",
"mainpage-description": "Pagina principal",
"policy-url": "Project:Politica",
@@ -315,10 +318,13 @@
"readonly_lag": "Le base de datos ha essite automaticamente blocate durante que le servitores de base de datos secundari se synchronisa con le servitor principal.",
"internalerror": "Error interne",
"internalerror_info": "Error interne: $1",
+ "internalerror-fatal-exception": "Error irreversibile de typo \"$1\"",
"filecopyerror": "Impossibile copiar file \"$1\" a \"$2\".",
"filerenameerror": "Impossibile renominar file \"$1\" a \"$2\".",
"filedeleteerror": "Impossibile deler file \"$1\".",
"directorycreateerror": "Impossibile crear le directorio \"$1\".",
+ "directoryreadonlyerror": "Le directorio \"$1\" es protegite contra scriptura.",
+ "directorynotreadableerror": "Le directorio \"$1\" non es legibile.",
"filenotfound": "Impossibile trovar file \"$1\".",
"unexpected": "Valor impreviste: \"$1\"=\"$2\".",
"formerror": "Error: impossibile submitter formulario",
@@ -340,7 +346,8 @@
"viewsourcetext": "Tu pote vider e copiar le codice-fonte de iste pagina:",
"viewyourtext": "Tu pote vider e copiar le fonte de '''tu modificationes''' de iste pagina:",
"protectedinterface": "Iste pagina contine texto pro le interfacie del software de iste wiki, e es protegite pro impedir le abuso. Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
- "editinginterface": "'''Attention:''' Le texto de iste pagina face parte del interfacie pro le software.\nOmne modification a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.\nPro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
+ "editinginterface": "<strong>Attention:</strong> Le texto de iste pagina face parte del interfacie pro le software.\nOmne modification apportate a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.",
+ "translateinterface": "Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de localisation de MediaWiki.",
"cascadeprotected": "Iste pagina ha essite protegite contra modificationes, proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} es protegite usante le option \"cascada\":\n$2",
"namespaceprotected": "Tu non ha le permission de modificar paginas in le spatio de nomines '''$1'''.",
"customcssprotected": "Tu non ha le permission de modificar iste pagina de CSS perque illo contine le configuration personal de un altere usator.",
@@ -397,6 +404,8 @@
"userlogin-resetlink": "Datos de authentication oblidate?",
"userlogin-resetpassword-link": "Contrasigno oblidate?",
"userlogin-helplink2": "Adjuta al accesso",
+ "userlogin-loggedin": "Tu ha jam aperite session como {{GENDER:$1|$1}}.\nUsa le formulario sequente pro aperir session como altere usator.",
+ "userlogin-createanother": "Crear un altere conto",
"createacct-emailrequired": "Adresse de e-mail",
"createacct-emailoptional": "Adresse de e-mail (optional)",
"createacct-email-ph": "Entra tu adresse de e-mail",
@@ -510,7 +519,6 @@
"passwordreset-emailsent-capture": "Un message de e-mail pro le reinitialisation del contrasigno ha essite inviate; iste message es monstrate hic infra.",
"passwordreset-emailerror-capture": "Un e-mail pro le reinitialisation del contrasigno ha essite generate; iste message es monstrate hic infra, ma le invio al {{GENDER:$2|usator}} ha fallite: $1",
"changeemail": "Cambiar adresse de e-mail",
- "changeemail-header": "Cambiar le adresse de e-mail del conto",
"changeemail-text": "Completa iste formulario pro cambiar tu adresse de e-mail. Essera necessari entrar tu contrasigno pro confirmar iste cambio.",
"changeemail-no-info": "Tu debe aperir un session pro poter acceder directemente a iste pagina.",
"changeemail-oldemail": "Adresse de e-mail actual:",
@@ -518,7 +526,6 @@
"changeemail-none": "(nulle)",
"changeemail-password": "Contrasigno de {{SITENAME}}:",
"changeemail-submit": "Cambiar e-mail",
- "changeemail-cancel": "Cancellar",
"changeemail-throttled": "Tu ha facite troppo de tentativas de aperir session.\nPer favor attende $1 ante de probar lo novemente.",
"resettokens": "Reinitialisar indicios",
"resettokens-text": "Hic tu pote reinitialisar le indicios que permitte le accesso a certe datos private associate a tu conto.\n\nTu deberea facer lo si tu los ha accidentalmente dividite con un altere persona o si tu conto ha essite compromittite.",
@@ -559,6 +566,7 @@
"anoneditwarning": "<strong>Attention:</strong> Tu non ha aperite un session. Le adresse IP tue essera publicamente visibile si tu face modificationes. Si tu <strong>[$1 aperi un session]</strong> o <strong>[$2 crea un conto]</strong>, le modificationes essera attribuite al nomine de usator tue, inter altere avantages.",
"anonpreviewwarning": "''Tu non ha aperite un session. Salveguardar registrara tu adresse IP in le historia de modificationes de iste pagina.''",
"missingsummary": "'''Rememoration:''' Tu non ha specificate un summario del modification.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin summario.",
+ "selfredirect": "<strong>Attention:</strong> Tu redirige iste pagina verso se mesme.\nTu pote haber specificate le mal destination pro le redirection, o tu modifica forsan le mal pagina.\nSi tu clicca sur \"{{int:savearticle}}\" de novo, le redirection essera create in despecto de isto.",
"missingcommenttext": "Per favor entra un commento infra.",
"missingcommentheader": "'''Rememoration:''' Tu non ha specificate un subjecto/titulo pro iste commento.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin titulo.",
"summary-preview": "Previsualisation del summario:",
@@ -657,6 +665,10 @@
"content-model-text": "texto simple",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Objecto vacue",
+ "content-json-empty-array": "Array vacue",
+ "duplicate-args-category": "Paginas que usa parametros duplicate in appellos de patrono",
+ "duplicate-args-category-desc": "Le pagina contine appellos de patrono que usa duplicatos de parametros, como per exemplo <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Attention: Iste pagina contine troppo de appellos costose al functiones del analysator syntactic.\n\nIllo debe haber minus de $2 {{PLURAL:$2|appello|appellos}}, sed al momento ha $1 {{PLURAL:$1|appello|appellos}}.",
"expensive-parserfunction-category": "Paginas con troppo de appellos costose al functiones del analysator syntactic",
"post-expand-template-inclusion-warning": "'''Attention:''' Le grandor del patronos includite ha excedite le maximo.\nAlcun patronos non essera includite.",
@@ -711,7 +723,7 @@
"history-feed-empty": "Le pagina que tu requestava non existe.\nEs possibile que illo esseva delite del wiki, o renominate.\nProva [[Special:Search|cercar nove paginas relevante]] in le wiki.",
"rev-deleted-comment": "(summario del modification removite)",
"rev-deleted-user": "(nomine de usator eliminate)",
- "rev-deleted-event": "(entrata eliminate)",
+ "rev-deleted-event": "(detalios de registro removite)",
"rev-deleted-user-contribs": "[nomine de usator o adresse IP removite - modification celate ab contributiones]",
"rev-deleted-text-permission": "Iste version del pagina ha essite '''delite'''.\nEs possibile que se trova detalios in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de deletiones].",
"rev-suppressed-text-permission": "Iste version del pagina ha essite <strong>supprimite</strong>.\nDetalios se trova in le [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de suppressiones].",
@@ -745,7 +757,7 @@
"revdelete-legend": "Definir restrictiones de visibilitate",
"revdelete-hide-text": "Texto del version",
"revdelete-hide-image": "Celar le contento del file",
- "revdelete-hide-name": "Celar action e objectivo",
+ "revdelete-hide-name": "Celar objectivo e parametros",
"revdelete-hide-comment": "Summario del modification",
"revdelete-hide-user": "Nomine de usator o adresse IP del modificator",
"revdelete-hide-restricted": "Supprimer le datos a administratores assi como a alteres",
@@ -799,7 +811,6 @@
"mergehistory-same-destination": "Le paginas de origine e de destination non pote esser le mesme",
"mergehistory-reason": "Motivo:",
"mergelog": "Registro de fusiones",
- "pagemerge-logentry": "fusionava [[$1]] in [[$2]] (versiones usque a $3)",
"revertmerge": "Disfusionar",
"mergelogpagetext": "Infra es un lista del fusiones le plus recente de un historia de pagina in un altere.",
"history-title": "$1: Historia de versiones",
@@ -840,6 +851,7 @@
"search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 file|$3 files}})",
"search-redirect": "(redirection ab $1)",
"search-section": "(section $1)",
+ "search-category": "(categoria $1)",
"search-file-match": "(corresponde al contento del file)",
"search-suggest": "Esque tu vole dicer: $1",
"search-interwiki-caption": "Projectos fratres",
@@ -850,6 +862,7 @@
"searchall": "totes",
"showingresults": "Infra se monstra non plus de {{PLURAL:$1|'''1''' resultato|'''$1''' resultatos}} a partir del numero '''$2'''.",
"showingresultsinrange": "In basso es monstrate usque a {{PLURAL:$1|<strong>1</strong> resultato|<strong>$1</strong> resultatos}} inter #<strong>$2</strong> e #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Resultato <strong>$1</strong> de <strong>$3</strong>|Resultatos <strong>$1 - $2</strong> de <strong>$3</strong>}}",
"search-nonefound": "Le recerca non ha producite resultatos.",
"powersearch-legend": "Recerca avantiate",
"powersearch-ns": "Cercar in spatios de nomines:",
@@ -872,6 +885,11 @@
"prefs-personal": "Profilo del usator",
"prefs-rc": "Modificationes recente",
"prefs-watchlist": "Observatorio",
+ "prefs-editwatchlist": "Modificar observatorio",
+ "prefs-editwatchlist-label": "Modificar entratas in tu observatorio:",
+ "prefs-editwatchlist-edit": "Vider e remover titulos in tu observatorio",
+ "prefs-editwatchlist-raw": "Modificar observatorio crude",
+ "prefs-editwatchlist-clear": "Rader tu observatorio",
"prefs-watchlist-days": "Numero de dies a monstrar in le observatorio:",
"prefs-watchlist-days-max": "Maximo $1 {{PLURAL:$1|die|dies}}",
"prefs-watchlist-edits": "Numero maxime de modificationes a monstrar in le observatorio expandite:",
@@ -941,7 +959,7 @@
"gender-female": "Illa modifica paginas wiki",
"prefs-help-gender": "Definir iste preferentia es optional.\nLe software lo usa pro adressar e mentionar te correctemente con le genere appropriate.\nIste information es public.",
"email": "E-mail",
- "prefs-help-realname": "Le nomine real es optional.\nSi tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contributiones.",
+ "prefs-help-realname": "Le nomine real es optional.\nSi fornite, illo pote esser usate pro attribuer te tu travalio.",
"prefs-help-email": "Le adresse de e-mail es optional, ma es necessari pro le reinitialisation de tu contrasigno, in caso que tu lo oblida.",
"prefs-help-email-others": "Tu pote etiam optar pro permitter que altere personas te contacta via tu pagina de usator o de discussion, sin necessitate de revelar tu identitate.",
"prefs-help-email-required": "Un adresse de e-mail es obligatori.",
@@ -962,6 +980,7 @@
"prefs-tokenwatchlist": "Indicio",
"prefs-diffs": "Differentias",
"prefs-help-prefershttps": "Iste preferentia habera effecto a partir de tu proxime session.",
+ "prefswarning-warning": "To ha facite modificationes in tu preferentias que non ha ancora essite confirmate. Si tu quita iste pagina sin cliccar sur \"$1\", tu preferentias non essera cambiate.",
"prefs-tabs-navigation-hint": "Consilio: Tu pote usar le claves de sagitta sinistre e dextre pro navigar inter le schedas in le lista.",
"email-address-validity-valid": "Sembla valide",
"email-address-validity-invalid": "Un adresse valide es obligatori!",
@@ -1047,6 +1066,7 @@
"right-protect": "Cambiar nivellos de protection e modificar paginas protegite in cascada",
"right-editprotected": "Modificar paginas protegite con \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Modificar paginas protegite como \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Modificar le modello de contento de un pagina",
"right-editinterface": "Modificar le interfacie de usator",
"right-editusercssjs": "Modificar le files CSS e JS de altere usatores",
"right-editusercss": "Modificar le files CSS de altere usatores",
@@ -1074,6 +1094,7 @@
"right-override-export-depth": "Exportar paginas includente paginas ligate usque a un profunditate de 5",
"right-sendemail": "Inviar e-mail a altere usatores",
"right-passwordreset": "Vider le e-mails pro reinitialisar le contrasigno",
+ "right-managechangetags": "Crear e deler [[Special:Tags|etiquettas]] in le base de datos",
"newuserlogpage": "Registro de creation de usatores",
"newuserlogpagetext": "Isto es un registro de creation de usatores.",
"rightslog": "Registro de derectos de usator",
@@ -1119,12 +1140,14 @@
"action-viewmywatchlist": "vider le proprie observatorio",
"action-viewmyprivateinfo": "vider le proprie information private",
"action-editmyprivateinfo": "modificar le proprie information private",
+ "action-editcontentmodel": "modificar le modello de contento de un pagina",
+ "action-managechangetags": "crear e deler etiquettas in le base de datos",
"nchanges": "$1 {{PLURAL:$1|modification|modificationes}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde le ultime visita}}",
"enhancedrc-history": "historia",
"recentchanges": "Modificationes recente",
"recentchanges-legend": "Optiones del modificationes recente",
- "recentchanges-summary": "Seque le plus recente modificationes a {{SITENAME}} in iste pagina.",
+ "recentchanges-summary": "Seque le modificationes le plus recente in {{SITENAME}} in iste pagina.",
"recentchanges-noresult": "Nulle modification facite in le periodo specificate que corresponde a iste criterios.",
"recentchanges-feed-description": "Seque le modificationes le plus recente al wiki in iste syndication.",
"recentchanges-label-newpage": "Iste modification creava un nove pagina",
@@ -1136,7 +1159,7 @@
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide etiam le [[Special:NewPages|lista de nove paginas]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "Ecce le {{PLURAL:$5|modification|modificationes}} a partir del <strong>$3 a $4</strong> (usque a <strong>$1</strong> entratas monstrate).",
- "rclistfrom": "Monstrar nove modificationes a partir de $3 $2",
+ "rclistfrom": "Monstrar nove modificationes a partir del $3 a $2",
"rcshowhideminor": "$1 modificationes minor",
"rcshowhideminor-show": "Monstrar",
"rcshowhideminor-hide": "Celar",
@@ -1189,9 +1212,9 @@
"uploaderror": "Error de incargamento",
"upload-recreate-warning": "'''Attention: Un file con iste nomine ha ja essite delite o renominate.'''\n\nLe registro de deletiones e renominationes pro iste pagina es fornite hic pro major commoditate:",
"uploadtext": "Con le formulario sequente tu pote incargar un nove file in le wiki.\nPro vider o cercar files ja incargate, visita le [[Special:FileList|lista de files incargate]]. In ultra, le (re)incargamentos es registrate in le [[Special:Log/upload|registro de incargamentos]], le deletiones in le [[Special:Log/delete|registro de deletiones]].\n\nPro includer un file in un pagina, usa un ligamine in un del sequente formas:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' pro usar le version complete del file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|texto alternative]]</nowiki></code>''' pro usar un rendition a latitude de 200 pixel in un quadro in le margine sinistre con 'texto alternative' qua description\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pro facer un ligamine directe al file sin monstrar le file",
- "upload-permitted": "Typos de file permittite: $1.",
- "upload-preferred": "Typos de file preferite: $1.",
- "upload-prohibited": "Typos de file prohibite: $1.",
+ "upload-permitted": "{{PLURAL:$2|Typo|Typos}} de file permittite: $1.",
+ "upload-preferred": "{{PLURAL:$2|Typo|Typos}} de file preferite: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Typo|Typos}} de file prohibite: $1.",
"uploadlogpage": "Registro de incargamentos",
"uploadlogpagetext": "Infra es un lista de files recentemente incargate.\nVide le [[Special:NewFiles|galeria de nove files]] pro un presentation plus visual.",
"filename": "Nomine del file",
@@ -1449,7 +1472,6 @@
"statistics": "Statisticas",
"statistics-header-pages": "Statisticas de paginas",
"statistics-header-edits": "Statisticas de modificationes",
- "statistics-header-views": "Statisticas de visitas",
"statistics-header-users": "Statisticas de usatores",
"statistics-header-hooks": "Altere statisticas",
"statistics-articles": "Paginas de contento",
@@ -1458,13 +1480,9 @@
"statistics-files": "Files incargate",
"statistics-edits": "Modificationes de paginas depost le installation de {{SITENAME}}",
"statistics-edits-average": "Media del modificationes per pagina",
- "statistics-views-total": "Visitas total",
- "statistics-views-total-desc": "Le visitas a paginas inexistente e special non es includite",
- "statistics-views-peredit": "Visitas per modification",
"statistics-users": "[[Special:ListUsers|Usatores]] registrate",
"statistics-users-active": "Usatores active",
"statistics-users-active-desc": "Usatores qui ha facite un action durante le {{PLURAL:$1|die|$1 dies}} passate",
- "statistics-mostpopular": "Le paginas plus visitate",
"pageswithprop": "Paginas con un proprietate de pagina",
"pageswithprop-legend": "Paginas con un proprietate de pagina",
"pageswithprop-text": "Iste pagina lista le paginas que usa un certe proprietate de pagina.",
@@ -1505,7 +1523,6 @@
"uncategorizedtemplates": "Patronos sin categoria",
"unusedcategories": "Categorias non usate",
"unusedimages": "Imagines non usate",
- "popularpages": "Paginas popular",
"wantedcategories": "Categorias plus demandate",
"wantedpages": "Paginas plus demandate",
"wantedpages-badtitle": "Titulo invalide in le gruppo de resultatos: $1",
@@ -1567,9 +1584,11 @@
"pager-older-n": "{{PLURAL:$1|1 minus recente|$1 minus recente}}",
"suppress": "Supervisor",
"querypage-disabled": "Iste pagina special es disactivate pro evitar de supercargar le systema.",
+ "apihelp": "Adjuta con le API",
+ "apihelp-no-such-module": "Modulo \"$1\" non trovate.",
"booksources": "Fontes de libros",
"booksources-search-legend": "Cercar fontes de libros",
- "booksources-go": "Va",
+ "booksources-search": "Cercar",
"booksources-text": "Infra es un lista de ligamines a altere sitos que vende libros nove e usate, e pote etiam haber altere informationes super libros que tu cerca:",
"booksources-invalid-isbn": "Le ISBN date non pare esser valide; verifica que tu non ha facite errores copiante lo del fonte original.",
"specialloguserlabel": "Executor:",
@@ -1705,7 +1724,7 @@
"wlheader-enotif": "Le notification via e-mail es active.",
"wlheader-showupdated": "Le paginas que ha essite modificate post tu ultime visita se monstra in litteras '''grasse'''.",
"wlnote": "Ecce le ultime {{PLURAL:$1|modification|<strong>$1</strong> modificationes}} durante le ultime {{PLURAL:$2|hora|<strong>$2</strong> horas}}, a partir del $3 a $4.",
- "wlshowlast": "Revelar ultime $1 horas $2 dies $3",
+ "wlshowlast": "Monstrar le ultime $1 horas $2 dies",
"watchlist-options": "Optiones del observatorio",
"watching": "Observation in curso...",
"unwatching": "Disobservation in curso...",
@@ -1754,7 +1773,6 @@
"deleteprotected": "Tu non pote deler iste pagina perque illo ha essite protegite.",
"deleting-backlinks-warning": "'''Attention:''' Il ha [[Special:WhatLinksHere/{{FULLPAGENAME}}|altere paginas]] que liga a o transclude le pagina que tu es sur le puncto de deler.",
"rollback": "Revocar modificationes",
- "rollback_short": "Revocar",
"rollbacklink": "revocar",
"rollbacklinkcount": "revocar $1 {{PLURAL:$1|modification|modificationes}}",
"rollbacklinkcount-morethan": "revocar plus de $1 {{PLURAL:$1|modification|modificationes}}",
@@ -1804,6 +1822,7 @@
"protect-othertime": "Altere duration:",
"protect-othertime-op": "altere duration",
"protect-existing-expiry": "Expiration existente: le $2 a $3",
+ "protect-existing-expiry-infinity": "Termino de expiration existente: infinite",
"protect-otherreason": "Motivo altere/additional:",
"protect-otherreason-op": "Altere motivo",
"protect-dropdown": "*Motivos commun de protection\n** Vandalismo excessive\n** Spam excessive\n** Guerra de modificationes contraproductive\n** Pagina frequentemente visitate",
@@ -1860,9 +1879,10 @@
"undelete-error-long": "Se incontrava errores durante le restauration del file:\n\n$1",
"undelete-show-file-confirm": "Es tu secur de voler vider un version delite del file \"<nowiki>$1</nowiki>\" del $2 a $3?",
"undelete-show-file-submit": "Si",
- "namespace": "Spatio de nomine:",
+ "namespace": "Spatio de nomines:",
"invert": "Inverter selection",
"tooltip-invert": "Marca iste quadrato pro celar le modificationes in paginas intra le spatio de nomines seligite (e le spatio de nomines associate, si tal option es seligite)",
+ "tooltip-whatlinkshere-invert": "Marca iste quadrato pro celar ligamines de paginas in le spatio de nomines seligite.",
"namespace_association": "Spatio de nomines associate",
"tooltip-namespace_association": "Marca iste quadrato pro includer anque le spatio de nomines de discussion o de subjecto associate al spatio de nomines seligite",
"blanknamespace": "(Principal)",
@@ -1892,7 +1912,7 @@
"sp-contributions-toponly": "Monstrar solmente le versiones recente",
"sp-contributions-newonly": "Monstrar solmente le modificationes que es creationes de pagina",
"sp-contributions-submit": "Cercar",
- "whatlinkshere": "Referentias a iste pagina",
+ "whatlinkshere": "Paginas ligate a iste",
"whatlinkshere-title": "Paginas con ligamines verso $1",
"whatlinkshere-page": "Pagina:",
"linkshere": "Le sequente paginas contine ligamines a '''[[:$1]]''':",
@@ -1948,6 +1968,7 @@
"unblocked": "[[User:$1|$1]] ha essite disblocate",
"unblocked-range": "$1 ha essite disblocate",
"unblocked-id": "Le blocada $1 ha essite eliminate",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] ha essite disblocate.",
"blocklist": "Usatores blocate",
"ipblocklist": "Usatores blocate",
"ipblocklist-legend": "Cercar un usator blocate",
@@ -2126,13 +2147,14 @@
"thumbnail-temp-create": "Impossibile crear un file temporari de miniatura",
"thumbnail-dest-create": "Impossibile salveguardar le miniatura in su destination",
"thumbnail_invalid_params": "Parametros de miniatura invalide",
+ "thumbnail_toobigimagearea": "File con dimensiones superior a $1",
"thumbnail_dest_directory": "Impossibile crear directorio de destination",
"thumbnail_image-type": "typo de imagine non supportate",
"thumbnail_gd-library": "le configuration del bibliotheca GD es incomplete: manca le function $1",
"thumbnail_image-missing": "le file pare mancar: $1",
"thumbnail_image-failure-limit": "Il ha habite recentemente troppo de tentativas fallite ($1 o plus) de generar iste miniatura. Per favor reproba plus tarde.",
"import": "Importar paginas",
- "importinterwiki": "Importation transwiki",
+ "importinterwiki": "Importar ab un altere wiki",
"import-interwiki-text": "Selige le wiki e le titulo del pagina a importar.\nLe datas del versiones e nomines del contributores essera preservate.\nTote le actiones de importation transwiki se registra in le [[Special:Log/import|registro de importationes]].",
"import-interwiki-sourcewiki": "Wiki de origine:",
"import-interwiki-sourcepage": "Pagina de origine:",
@@ -2177,18 +2199,15 @@
"import-rootpage-nosubpage": "Le spatio de nomines \"$1\" del pagina radice non permitte subpaginas.",
"importlogpage": "Registro de importationes",
"importlogpagetext": "Importationes administrative de paginas con historia de modificationes desde altere wikis.",
- "import-logentry-upload": "importava [[$1]] per incargamento de file",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versiones}} importate",
- "import-logentry-interwiki": "importava $1 transwiki",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versiones}} importate desde $2",
"javascripttest": "Test de JavaScript",
- "javascripttest-title": "Execution de $1 tests",
"javascripttest-pagetext-noframework": "Iste pagina es reservate pro le execution de tests de JavaScript.",
"javascripttest-pagetext-unknownframework": "Structura de test \"$1\" incognite.",
+ "javascripttest-pagetext-unknownaction": "Action \"$1\" incognite.",
"javascripttest-pagetext-frameworks": "Per favor selige un del sequente structuras de test: $1",
"javascripttest-pagetext-skins": "Selige un apparentia con le qual executar le tests:",
"javascripttest-qunit-intro": "Vide [$1 documentation de tests] sur mediawiki.org.",
- "javascripttest-qunit-heading": "Programmas de test QUnit de JavaScript de MediaWiki",
"tooltip-pt-userpage": "Tu pagina de usator",
"tooltip-pt-anonuserpage": "Le pagina de usator pro le adresse IP desde le qual tu face modificationes",
"tooltip-pt-mytalk": "Tu pagina de discussion",
@@ -2198,6 +2217,7 @@
"tooltip-pt-mycontris": "Lista de tu contributiones",
"tooltip-pt-login": "Nos recommenda que tu te authentica, ma non es obligatori.",
"tooltip-pt-logout": "Clauder session",
+ "tooltip-pt-createaccount": "Tu es incoragiate a crear un conto e aperir session; totevia, non es obligatori",
"tooltip-ca-talk": "Discussiones a proposito del pagina de contento",
"tooltip-ca-edit": "Tu pote modificar iste pagina.\nPer favor usa le previsualisation ante de publicar.",
"tooltip-ca-addsection": "Initiar un nove section",
@@ -2213,7 +2233,7 @@
"tooltip-search": "Cercar in {{SITENAME}}",
"tooltip-search-go": "Visitar un pagina con iste nomine exacte si existe",
"tooltip-search-fulltext": "Cercar iste texto in le paginas",
- "tooltip-p-logo": "Pagina principal",
+ "tooltip-p-logo": "Visitar le pagina principal",
"tooltip-n-mainpage": "Visitar le pagina principal",
"tooltip-n-mainpage-description": "Visitar le pagina principal",
"tooltip-n-portal": "A proposito del projecto, que tu pote facer, ubi trovar cosas",
@@ -2227,6 +2247,7 @@
"tooltip-feed-atom": "Syndication Atom pro iste pagina",
"tooltip-t-contributions": "Vider le lista de contributiones de iste usator",
"tooltip-t-emailuser": "Inviar un e-mail a iste usator",
+ "tooltip-t-info": "Plus information super iste pagina",
"tooltip-t-upload": "Incargar files",
"tooltip-t-specialpages": "Lista de tote le paginas special",
"tooltip-t-print": "Version imprimibile de iste pagina",
@@ -2292,7 +2313,6 @@
"pageinfo-robot-policy": "Indexation per robots",
"pageinfo-robot-index": "Permittite",
"pageinfo-robot-noindex": "Non permittite",
- "pageinfo-views": "Numero de visitas",
"pageinfo-watchers": "Numero de observatores del pagina",
"pageinfo-few-watchers": "Minus de $1 {{PLURAL:$1|observator|observatores}}",
"pageinfo-redirects-name": "Numero de redirectiones verso iste pagina",
@@ -2350,7 +2370,7 @@
"thumbsize": "Dimension del miniaturas:",
"widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pagina|paginas}}",
"file-info": "grandor del file: $1, typo MIME: $2",
- "file-info-size": "$1 × $2 pixel, grandor del file: $3, typo MIME: $4",
+ "file-info-size": "$1 × $2 pixels, dimension del file: $3, typo MIME: $4",
"file-info-size-pages": "$1 × $2 pixels, dimension del file: $3, typo MIME: $4, $5 {{PLURAL:$5|pagina|paginas}}",
"file-nohires": "Non disponibile in resolution plus alte.",
"svg-long-desc": "File SVG, dimensiones nominal: $1 × $2 pixels, grandor del file: $3",
@@ -2741,7 +2761,6 @@
"exif-urgency-low": "Basse ($1)",
"exif-urgency-high": "Alte ($1)",
"exif-urgency-other": "Prioritate definite per usator ($1)",
- "watchlistall2": "totes",
"namespacesall": "totes",
"monthsall": "totes",
"confirmemail": "Confirmar adresse de e-mail",
@@ -2828,9 +2847,9 @@
"watchlisttools-edit": "Vider e modificar le observatorio",
"watchlisttools-raw": "Modificar observatorio crude",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])",
- "unknown_extension_tag": "Etiquetta de extension incognite \"$1\"",
"duplicate-defaultsort": "Attention: Le clave de ordination predefinite \"$2\" supplanta le anterior clave de ordination predefinite \"$1\".",
"duplicate-displaytitle": "<strong>Attention:</strong> Le titulo a monstrar \"$2\" supplanta le ancian titulo a monstrar \"$1\".",
+ "invalid-indicator-name": "<strong>Error:</strong> Le attributo <code>name</code> del indicatores del stato del pagina non pote esser vacue.",
"version": "Version",
"version-extensions": "Extensiones installate",
"version-skins": "Apparentias installate",
@@ -2845,7 +2864,7 @@
"version-parser-function-hooks": "Uncinos de functiones del analysator syntactic",
"version-hook-name": "Nomine del uncino",
"version-hook-subscribedby": "Subscribite per",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[sin nomine]",
"version-license": "Licentia pro MediaWiki",
"version-ext-license": "Licentia",
@@ -2872,6 +2891,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Cammino al articulo]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Cammino al script]",
+ "version-libraries": "Bibliothecas installate",
+ "version-libraries-library": "Bibliotheca",
+ "version-libraries-version": "Version",
"redirect": "Rediriger per nomine de file, ID de usator, ID de pagina o ID de version",
"redirect-legend": "Rediriger a un file o pagina",
"redirect-summary": "Iste pagina special redirige a un file (si es date le nomine de un file), a un pagina (si es date un ID de version o ID de pagina) o a un pagina de usator (si es date un ID de usator numeric). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] o [[{{#Special:Redirect}}/user/101]].",
@@ -2907,6 +2929,7 @@
"specialpages-group-wiki": "Datos e instrumentos",
"specialpages-group-redirects": "Redirection de paginas special",
"specialpages-group-spam": "Instrumentos antispam",
+ "specialpages-group-developer": "Instrumentos pro disveloppatores",
"blankpage": "Pagina vacue",
"intentionallyblankpage": "Iste pagina es intentionalmente vacue",
"external_image_whitelist": " #Lassa iste linea exactemente como illo es<pre>\n#Pone fragmentos de expressiones regular (solmente le parte que va inter //) infra\n#Istes correspondera con le adresses URL de imagines externe (a ligamine directe)\n#Le correspondentes se monstrara como imagines, le alteres solmente como ligamines a imagines\n#Le lineas comenciante con # essera tractate como commentos\n#Isto non es sensibile al differentia inter majusculas e minusculas\n\n#Insere omne fragmentos regex super iste linea. Lassa iste linea exactemente como illo es</pre>",
@@ -2936,8 +2959,8 @@
"compare-revision-not-exists": "Le version que tu specificava non existe.",
"dberr-problems": "Pardono! Iste sito ha incontrate difficultates technic.",
"dberr-again": "Proba attender alcun minutas e recargar.",
- "dberr-info": "(Non pote contactar le servitor del base de datos: $1)",
- "dberr-info-hidden": "(Non pote contactar le servitor del base de datos)",
+ "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.",
@@ -2978,6 +3001,7 @@
"revdelete-uname-unhid": "nomine de usator non plus celate",
"revdelete-restricted": "restrictiones applicate al administratores",
"revdelete-unrestricted": "restrictiones eliminate pro administratores",
+ "logentry-merge-merge": "$1 {{GENDER:$2|fusionava}} $3 in $4 (versiones usque a $5)",
"logentry-move-move": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4 sin lassar un redirection",
"logentry-move-move_redir": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4, superscribente un redirection",
@@ -2996,19 +3020,20 @@
"logentry-upload-overwrite": "$1 {{GENDER:$2|ha incargate}} un nove version de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|ha incargate}} $3",
"rightsnone": "(nulle)",
+ "revdelete-summary": "summario del modification",
+ "feedback-adding": "Le responsa es addite al pagina...",
+ "feedback-bugcheck": "Bon! Ma per favor verifica que iste falta non es [$1 jam cognoscite].",
+ "feedback-bugnew": "Si, io lo ha verificate; reportar un nove falta",
"feedback-bugornote": "Si tu es preste a describer un problema technic in detalio, per favor [$1 reporta un falta].\nSi non, tu pote usar le formulario facile hic infra. Tu commento essera addite al pagina \"[$3 $2]\", con tu nomine de usator e le navigator del web que tu usa.",
- "feedback-subject": "Subjecto:",
- "feedback-message": "Message:",
"feedback-cancel": "Cancellar",
- "feedback-submit": "Submitter opinion",
- "feedback-adding": "Le responsa es addite al pagina...",
+ "feedback-close": "Finite",
"feedback-error1": "Error: Resultato del API non recognoscite",
"feedback-error2": "Error: Modification fallite",
"feedback-error3": "Error: Nulle responsa del API",
+ "feedback-message": "Message:",
+ "feedback-subject": "Subjecto:",
+ "feedback-submit": "Submitter",
"feedback-thanks": "Gratias! Tu evalutation ha essite publicate in le pagina \"[$2 $1]\".",
- "feedback-close": "Finite",
- "feedback-bugcheck": "Bon! Ma per favor verifica que iste falta non es [$1 jam cognoscite].",
- "feedback-bugnew": "Si, io lo ha verificate; reportar un nove falta",
"searchsuggest-search": "Cercar",
"searchsuggest-containing": "continente...",
"api-error-badaccess-groups": "Tu non ha le permission de incargar files in iste wiki.",
@@ -3044,6 +3069,13 @@
"api-error-stashfailed": "Error interne: le servitor non poteva immagazinar le file temporari.",
"api-error-publishfailed": "Error interne: le servitor non poteva publicar le file temporari.",
"api-error-stasherror": "Un error ha occurrite durante le incargamento del file in \"stash\".",
+ "api-error-stashedfilenotfound": "Le file in reserva non ha essite trovate durante le tentativa de incargar lo ab le reserva.",
+ "api-error-stashpathinvalid": "Le cammino ubi le file in reserva deberea haber essite trovate non es valide.",
+ "api-error-stashfilestorage": "Un error ha occurrite durante le immagazinage del file in reserva.",
+ "api-error-stashzerolength": "Le servitor non ha potite mitter le file in reserva perque illo ha un longitude de zero.",
+ "api-error-stashnotloggedin": "Tu debe aperir session pro poter salveguardar files in le reserva de incargamento.",
+ "api-error-stashwrongowner": "Le file al qual tu tentava acceder in le reserva non pertine a te.",
+ "api-error-stashnosuchfilekey": "Le clave de file al qual tu tentava acceder in le reserva non existe.",
"api-error-timeout": "Le servitor non ha respondite intra le tempore expectate.",
"api-error-unclassified": "Un error incognite ha occurrite.",
"api-error-unknown-code": "Error incognite: \"$1\"",
@@ -3088,6 +3120,8 @@
"expand_templates_generate_xml": "Monstrar arbore syntactic XML",
"expand_templates_generate_rawhtml": "Monstrar HTML brute",
"expand_templates_preview": "Previsualisation",
+ "expand_templates_preview_fail_html": "<em>Perque {{SITENAME}} ha HTML crude activate e il habeva un perdita de datos de session, le previsualisation es celate como precaution contra attaccos con JavaScript.</em>\n\n<strong>Si isto es un tentativa de previsualisation legitime, per favor essaya lo de novo.</strong>\nSi illo ancora non functiona, essaya [[Special:UserLogout|clauder le session]] e aperir un nove session.",
+ "expand_templates_preview_fail_html_anon": "<em>Perque {{SITENAME}} ha HTML crude activate e tu non ha aperite session, le previsualisation es celate como precaution contra attaccos con JavaScript.</em>\n\n<strong>Si isto es un tentativa de previsualisation legitime, per favor [[Special:UserLogin|aperi session]] e essaya lo de novo.</strong>",
"pagelanguage": "Selector de lingua de pagina",
"pagelang-name": "Pagina",
"pagelang-language": "Lingua",
@@ -3098,6 +3132,55 @@
"log-name-pagelang": "Registro de cambios de lingua",
"log-description-pagelang": "Isto es un registro de cambios de lingua in paginas.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiava}} le lingua del pagina $3 de $4 a $5.",
+ "default-skin-not-found": "Attention! Le apparentia predefinite de tu wiki, definite in <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nLe installation pare includer le sequente apparentias. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar los e seliger le predefinite.\n\n$2\n\n; Si tu ha justo installate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias indidivual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonar un del repositorios <code>mediawiki/skins/*</code> via git in le directorio <code dir=\"ltr\">skins/</code> de tu installation de MediaWiki.\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki.\n\n; Si tu ha justo actualisate MediaWiki:\n: MediaWiki a partir del version 1.24 non plus activa automaticamente le apparentias installate (vide [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Tu pote collar le sequente lineas in <code>LocalSettings.php</code> pro activar tote le apparentias actualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si tu ha justo modificate <code>LocalSettings.php</code>:\n: Verifica meticulosemente que le nomines del apparentias non ha errores.",
+ "default-skin-not-found-no-skins": "Attention! Le apparentia predefinite de tu wiki, definite in <code>$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nTu non ha apparentias installate.\n\n; Si tu ha justo installate o actualisate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias individual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonar un del repositorios <code>mediawiki/skins/*</code> via git in le directorio <code dir=\"ltr\">skins/</code> de tu installation de MediaWiki.\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar skins e seliger le predefinite.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activate)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disactivate''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disactivate''')",
+ "mediastatistics": "Statisticas de multimedia",
+ "mediastatistics-summary": "Statisticas sur le typos de file incargate. Isto include solmente le version le plus recente de un file. Versiones ancian o delite de files es excludite.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Typo MIME",
+ "mediastatistics-table-extensions": "Extensiones possibile",
+ "mediastatistics-table-count": "Numero de files",
+ "mediastatistics-table-totalbytes": "Dimension combinate",
+ "mediastatistics-header-unknown": "Incognite",
+ "mediastatistics-header-bitmap": "Imagines de mappa de bits",
+ "mediastatistics-header-drawing": "Designos (imagines vectorial)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Video",
+ "mediastatistics-header-multimedia": "Multimedia complexe",
+ "mediastatistics-header-office": "Officio",
+ "mediastatistics-header-text": "Textual",
+ "mediastatistics-header-executable": "Executabiles",
+ "mediastatistics-header-archive": "Formatos comprimite",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|comma|commas}} final ha essite removite de JSON",
+ "json-error-unknown": "Il habeva un problema con le JSON. Error: $1",
+ "json-error-depth": "Le profunditate maxime del pila ha essite excedite",
+ "json-error-state-mismatch": "JSON non valide o mal formate",
+ "json-error-ctrl-char": "Error de character de controlo, possibilemente codificate incorrectemente",
+ "json-error-syntax": "Error de syntaxe",
+ "json-error-utf8": "Characteres UTF-8 mal formate, possibilemente codificate incorrectemente",
+ "json-error-recursion": "Il ha un o plure referentias recursive in le valor a codificar",
+ "json-error-inf-or-nan": "Un o plure valores NAN o INF se trova in le valor a codificar",
+ "json-error-unsupported-type": "Un valor de un typo que non pote esser codificate ha essite date",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Latin extendite",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symbolos",
+ "special-characters-group-greek": "Greco",
+ "special-characters-group-cyrillic": "Cyrillic",
+ "special-characters-group-arabic": "Arabe",
+ "special-characters-group-arabicextended": "Arabe extendite",
+ "special-characters-group-persian": "Persiano",
+ "special-characters-group-hebrew": "Hebreo",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanāgarī",
+ "special-characters-group-thai": "Thailandese",
+ "special-characters-group-lao": "Laotiano",
+ "special-characters-group-khmer": "Cambodgiano",
+ "special-characters-title-minus": "signo minus"
}
diff --git a/languages/i18n/id.json b/languages/i18n/id.json
index 3446e32f..0e46d5e1 100644
--- a/languages/i18n/id.json
+++ b/languages/i18n/id.json
@@ -35,7 +35,9 @@
"아라",
"C5st4wr6ch",
"Raynasution",
- "Arifin.wijaya"
+ "Arifin.wijaya",
+ "Ahdan",
+ "Macofe"
]
},
"tog-underline": "Garis bawahi pranala:",
@@ -62,7 +64,7 @@
"tog-shownumberswatching": "Tunjukkan jumlah pemantau",
"tog-oldsig": "Tanda tangan sekarang:",
"tog-fancysig": "Perlakukan tanda tangan sebagai teks wiki (tanpa suatu pranala otomatis)",
- "tog-uselivepreview": "Gunakan pratayang langsung (eksperimental)",
+ "tog-uselivepreview": "Gunakan pratayang langsung",
"tog-forceeditsummary": "Ingatkan saya bila kotak ringkasan suntingan masih kosong",
"tog-watchlisthideown": "Sembunyikan suntingan saya di daftar pantauan",
"tog-watchlisthidebots": "Sembunyikan suntingan bot di daftar pantauan",
@@ -193,7 +195,7 @@
"search": "Pencarian",
"searchbutton": "Cari",
"go": "Tuju ke",
- "searcharticle": "Tuju ke",
+ "searcharticle": "Lanjut",
"history": "Riwayat halaman",
"history_short": "Versi terdahulu",
"updatedmarker": "diubah sejak kunjungan terakhir saya",
@@ -222,11 +224,11 @@
"talkpage": "Bicarakan halaman ini",
"talkpagelinktext": "bicara",
"specialpage": "Halaman istimewa",
- "personaltools": "Peralatan pribadi",
+ "personaltools": "Perkakas pribadi",
"articlepage": "Lihat halaman isi",
"talk": "Pembicaraan",
"views": "Tampilan",
- "toolbox": "Peralatan",
+ "toolbox": "Perkakas",
"userpage": "Lihat halaman pengguna",
"projectpage": "Lihat halaman proyek",
"imagepage": "Lihat halaman berkas",
@@ -238,10 +240,11 @@
"otherlanguages": "Bahasa lain",
"redirectedfrom": "(Dialihkan dari $1)",
"redirectpagesub": "Halaman pengalihan",
- "lastmodifiedat": "Halaman ini terakhir diubah pada $2, $1.",
+ "redirectto": "Mengalihkan ke:",
+ "lastmodifiedat": "Halaman ini terakhir diubah pada $1, pukul $2.",
"viewcount": "Halaman ini telah diakses sebanyak {{PLURAL:$1|$1 kali}}.<br />",
"protectedpage": "Halaman yang dilindungi",
- "jumpto": "Langsung ke:",
+ "jumpto": "Lompat ke:",
"jumptonavigation": "navigasi",
"jumptosearch": "cari",
"view-pool-error": "Maaf, server sedang sibuk pada saat ini.\nTerlalu banyak pengguna berusaha melihat halaman ini.\nTunggu sebentar sebelum Anda mencoba lagi mengakses halaman ini.\n\n$1",
@@ -250,6 +253,7 @@
"pool-queuefull": "Kumpulan antrean penuh",
"pool-errorunknown": "Kesalahan yang tidak diketahui",
"pool-servererror": "Layanan penghitung pool ini tidak tersedia ($1).",
+ "poolcounter-usage-error": "Galat penggunaan: $1",
"aboutsite": "Tentang {{SITENAME}}",
"aboutpage": "Project:Perihal",
"copyright": "Konten tersedia sesuai di bawah $1.",
@@ -293,6 +297,9 @@
"hidetoc": "sembunyikan",
"collapsible-collapse": "Ciutkan",
"collapsible-expand": "Kembangkan",
+ "confirmable-confirm": "Apakah {{GENDER:$1|Anda}} yakin?",
+ "confirmable-yes": "Ya",
+ "confirmable-no": "Tidak",
"thisisdeleted": "Lihat atau kembalikan $1?",
"viewdeleted": "Lihat $1?",
"restorelink": "{{PLURAL:$1|$1 suntingan}} yang telah dihapus",
@@ -311,7 +318,7 @@
"nstab-main": "Halaman",
"nstab-user": "Pengguna",
"nstab-media": "Media",
- "nstab-special": "Istimewa",
+ "nstab-special": "Halaman Istimewa",
"nstab-project": "Proyek",
"nstab-image": "Berkas",
"nstab-mediawiki": "Pesan",
@@ -343,6 +350,8 @@
"filerenameerror": "Tidak dapat mengubah nama berkas \"$1\" menjadi \"$2\".",
"filedeleteerror": "Tidak dapat menghapus berkas \"$1\".",
"directorycreateerror": "Tidak dapat membuat direktori \"$1\".",
+ "directoryreadonlyerror": "Direktori \"$1\" hanya-baca.",
+ "directorynotreadableerror": "Direktori \"$1\" tidak bisa dibaca.",
"filenotfound": "Tidak dapat menemukan berkas \"$1\".",
"unexpected": "Nilai di luar jangkauan: \"$1\"=\"$2\".",
"formerror": "Kesalahan: Tidak dapat mengirimkan formulir",
@@ -353,8 +362,8 @@
"no-null-revision": "Tidak dapat membuat revisi null baru untuk halaman \"$1\"",
"badtitle": "Judul tidak sah",
"badtitletext": "Judul halaman yang diminta tidak sah, kosong, atau judul antarbahasa atau antarwiki yang salah sambung.",
- "perfcached": "Data berikut ini diambil dari singgahan dan mungkin bukan data mutakhir. {{PLURAL:$1||}}$1 hasil maksimal tersedia di tembolok.",
- "perfcachedts": "Data berikut ini diambil dari singgahan dan terakhir diperbarui pada $1. {{PLURAL:$1||}}$1 hasil maksimal tersedia di tembolok.",
+ "perfcached": "Data berikut ini diambil dari singgahan dan mungkin bukan data mutakhir. {{PLURAL:$1|Hasil}} maksimal ada di singgahan.",
+ "perfcachedts": "Data berikut ini diambil dari singgahan dan terakhir diperbarui pada $1. {{PLURAL:$4|Hasil}} maksimal ada di singgahan.",
"querypage-no-updates": "Pemutakhiran dari halaman ini sedang dimatikan. Data yang ada di sini saat ini tidak akan dimuat ulang.",
"viewsource": "Lihat sumber",
"viewsource-title": "Lihat sumber untuk $1",
@@ -364,7 +373,8 @@
"viewsourcetext": "Anda dapat melihat atau menyalin sumber halaman ini:",
"viewyourtext": "Anda dapat melihat atau menyalin sumber dari '''suntingan Anda''' ke halaman ini:",
"protectedinterface": "Halaman ini memuat teks antarmuka untuk perangkat lunak pada wiki ini, dan dilindungi terhadap penyalahgunaan. Untuk menambah atau mengubah terjemahan pada semua wiki, harap gunakan [//translatewiki.net/ translatewiki.net], proyek pelokalan MediaWiki.",
- "editinginterface": "'''Peringatan:''' Anda menyunting suatu halaman yang digunakan untuk menyediakan teks antarmuka untuk perangkat lunak situs ini. Perubahan teks ini akan memengaruhi tampilan pada antarmuka pengguna untuk pengguna lain di wiki ini.\nUntuk menambah atau mengubahterjemahan untuk semua wiki, harap gunakan [//translatewiki.net/ translatewiki.net], proyek pelokalan MediaWiki.",
+ "editinginterface": "<strong>Peringatan:</strong> Anda menyunting suatu halaman yang digunakan untuk menyediakan teks antarmuka bagi perangkat lunak.\nPerubahan pada halaman ini akan memengaruhi tampilan pada antarmuka pengguna untuk pengguna lain pada wiki ini.",
+ "translateinterface": "Untuk menambah atau mengubah terjemahan semua wiki, mohon gunakan [//translatewiki.net/ translatewiki.net], proyek pelokalan MediaWiki.",
"cascadeprotected": "Halaman ini telah dilindungi dari penyuntingan karena disertakan di {{PLURAL:$1|halaman|halaman-halaman}} berikut yang telah dilindungi dengan opsi \"runtun\":\n$2",
"namespaceprotected": "Anda tak memiliki hak akses untuk menyunting halaman di ruang nama '''$1'''.",
"customcssprotected": "Anda tidak memiliki izin untuk menyunting halaman CSS ini, karena berisi pengaturan pribadi pengguna lain.",
@@ -379,7 +389,7 @@
"invalidtitle-knownnamespace": "Judul yang tidak sah dengan ruangnama \"$2\" dan teks \"$3\"",
"invalidtitle-unknownnamespace": "Judul yang tidak sah dengan nomor ruang nama tidak diketahui $1 dan teks \"$2\"",
"exception-nologin": "Belum masuk log",
- "exception-nologin-text": "Harap [[Special:Userlogin|masuk log]] untuk dapat mengakses halaman atau tindakan ini.",
+ "exception-nologin-text": "Silakan masuk log untuk dapat mengakses halaman atau tindakan ini.",
"exception-nologin-text-manual": "Silakan $1 untuk dapat mengakses halaman atau tindakan ini.",
"virus-badscanner": "Kesalahan konfigurasi: pemindai virus tidak dikenal: ''$1''",
"virus-scanfailed": "Pemindaian gagal (kode $1)",
@@ -421,8 +431,10 @@
"userlogin-resetlink": "Lupa detail info masuk Anda?",
"userlogin-resetpassword-link": "Lupa kata sandi?",
"userlogin-helplink2": "Bantuan masuk log",
+ "userlogin-loggedin": "Andan telah masuk log sebagai $1.\nGunakan formulir di bawah untuk masuk log sebagai pengguna lain.",
+ "userlogin-createanother": "Buat akun lain",
"createacct-emailrequired": "Alamat surel",
- "createacct-emailoptional": "Alamat surel (opsional)",
+ "createacct-emailoptional": "Alamat surel/email (sebaiknya diisi)",
"createacct-email-ph": "Masukkan alamat surel Anda",
"createacct-another-email-ph": "Masukkan alamat surel",
"createaccountmail": "Gunakan kata sandi acak sementara dan kirimkan ke surel yang diinginkan",
@@ -483,6 +495,7 @@
"createaccount-text": "Seseorang telah membuat sebuah akun untuk alamat surel Anda di {{SITENAME}} ($4) dengan nama \"$2\" dan kata sandi \"$3\". Anda dianjurkan untuk masuk log dan mengganti kata sandi Anda sekarang.\n\nAnda dapat mengabaikan pesan ini jika akun ini dibuat karena suatu kesalahan.",
"login-throttled": "Anda sudah terlalu sering mencoba masuk log.\nSilakan menunggu $1 sebelum mencoba lagi.",
"login-abort-generic": "Proses masuk Anda tidak berhasil - Dibatalkan",
+ "login-migrated-generic": "Akun Anda telah dimigrasi, dan nama pengguna Anda tidak lagi terdaftar di wiki ini.",
"loginlanguagelabel": "Bahasa: $1",
"suspicious-userlogout": "Permintaan Anda untuk keluar log ditolak karena tampaknya dikirim oleh penjelajah yang rusak atau proksi penyinggah.",
"createacct-another-realname-tip": "Nama asli bersifat opsional.\nJika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan atas hasil kerja Anda.",
@@ -577,9 +590,11 @@
"preview": "Pratayang",
"showpreview": "Lihat pratayang",
"showdiff": "Lihat perubahan",
- "anoneditwarning": "'''Peringatan:''' Anda tidak terdaftar masuk.\nAlamat IP Anda akan tercatat dalam sejarah (versi terdahulu) halaman ini.",
+ "blankarticle": "<strong>Peringatan:</strong> Halaman yang akan Anda buat tidak berisi apa-apa.\nJika Anda mengklik \"{{int:savearticle}}\" sekali lagi, halaman ini akan dibuat tanpa ada isi.",
+ "anoneditwarning": "<strong>Peringatan:</strong> Anda sedang tidak masuk log. Alamat IP Anda akan terlihat oleh publik jika Anda melakukan suatu perubahan. Jika Anda <strong>[$1 masuk log]</strong> atau <strong>[$2 membuat akun]</strong>, suntingan Anda akan diatribusikan kepada nama pengguna Anda, beserta berbagai keuntungan lainnya.",
"anonpreviewwarning": "''Anda belum masuk log. Menyimpan halaman akan menyebabkan alamat IP Anda tercatat pada riwayat suntingan laman ini.''",
"missingsummary": "'''Peringatan:''' Anda tidak memasukkan ringkasan penyuntingan. Jika Anda kembali menekan tombol Simpan, suntingan Anda akan disimpan tanpa ringkasan penyuntingan.",
+ "selfredirect": "<strong>Peringatan:</strong> Anda mengalihkan halaman ini kembali ke halaman semula.\nAnda bisa jadi telah memberikan tujuan pengalihan yang salah, atau telah menyunting halaman yang salah.\nJika Anda mengeklik \"{{int:savearticle}}\" sekali lagi, halaman pengalihan akan dibuat.",
"missingcommenttext": "Harap masukkan komentar di bawah ini.",
"missingcommentheader": "''Peringatan:''' Anda belum memberikan subjek atau judul untuk komentar Anda. Jika Anda kembali menekan \"{{int:savearticle}}\", suntingan Anda akan disimpan tanpa komentar tersebut.",
"summary-preview": "Pratayang ringkasan:",
@@ -679,6 +694,10 @@
"content-model-text": "teks polos",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Objek kosong",
+ "content-json-empty-array": "Larik kosong",
+ "duplicate-args-category": "Halaman dengan argumen ganda di pemanggilan templat",
+ "duplicate-args-category-desc": "Halaman ini berisi pemanggilan templat yang menggunakan argumen ganda, seperti <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> atau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Peringatan: Halaman ini mengandung terlalu banyak panggilan fungsi parser.\n\nSaat ini terdapat {{PLURAL:$1|$1 panggilan|$1 panggilan}}, seharusnya kurang dari $2 {{PLURAL:$2|panggilan|panggilan}}.",
"expensive-parserfunction-category": "Halaman dengan terlalu banyak panggilan fungsi parser",
"post-expand-template-inclusion-warning": "Peringatan: Ukuran templat yang digunakan terlalu besar.\nBeberapa templat akan diabaikan.",
@@ -689,10 +708,10 @@
"parser-template-recursion-depth-warning": "Limit kedalaman hubungan berulang templat terlampaui ($1)",
"language-converter-depth-warning": "Batas kedalaman pengonversi bahasa terlampaui ($1)",
"node-count-exceeded-category": "Halaman dimana hitungan-node terlampaui",
- "node-count-exceeded-category-desc": "Kategori untuk halaman dimana hitungan-node terlampaui.",
- "node-count-exceeded-warning": "Page exceeded the node-count",
+ "node-count-exceeded-category-desc": "Halaman ini melampaui jumlah node maksimum.",
+ "node-count-exceeded-warning": "Halaman yang melebihi jumlah node",
"expansion-depth-exceeded-category": "Pages where expansion depth is exceeded",
- "expansion-depth-exceeded-category-desc": "Ini adalah kategori untuk halaman dimana kedalaman ekspansi terlampaui.",
+ "expansion-depth-exceeded-category-desc": "Halaman yang melebihi kedalaman luas maksimum.",
"expansion-depth-exceeded-warning": "Page exceeded the expansion depth",
"parser-unstrip-loop-warning": "Unstrip loop detected",
"parser-unstrip-recursion-limit": "Unstrip recursion limit exceeded ($1)",
@@ -712,8 +731,8 @@
"currentrev-asof": "Revisi terkini pada $1",
"revisionasof": "Revisi per $1",
"revision-info": "Revisi per $1 oleh {{GENDER:$6|$2}}$7",
- "previousrevision": "←Revisi sebelumnya",
- "nextrevision": "Revisi selanjutnya→",
+ "previousrevision": "← Revisi sebelumnya",
+ "nextrevision": "Revisi selanjutnya →",
"currentrevisionlink": "Revisi terkini",
"cur": "skr",
"next": "selanjutnya",
@@ -733,7 +752,7 @@
"history-feed-empty": "Halaman yang diminta tak ditemukan.\nKemungkinan telah dihapus dari wiki, atau diberi nama baru.\nCoba [[Special:Search|lakukan pencarian di wiki]] untuk halaman baru yang relevan.",
"rev-deleted-comment": "(ringkasan suntingan dihapus)",
"rev-deleted-user": "(nama pengguna dihapus)",
- "rev-deleted-event": "(isi dihapus)",
+ "rev-deleted-event": "(rincian log dihapus)",
"rev-deleted-user-contribs": "[nama pengguna atau alamat IP dihapus - suntingan disembunyikan pada daftar kontribusi]",
"rev-deleted-text-permission": "Revisi halaman ini telah '''dihapus'''.\nRinciannya mungkin tersedia di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan]",
"rev-deleted-text-unhide": "Revisi ini telah '''dihapus'''.\nRinciannya mungkin tersedia di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].\nSebagai seorang pengurus Anda masih dapat [$1 melihat revisi ini] jika Anda mau.",
@@ -760,13 +779,13 @@
"revdelete-text-text": "Revisi yang dihapus akan tetap muncul di halaman riwayat, tetapi bagian dari konten mereka akan menjadi tidak dapat diakses untuk umum.",
"revdelete-text-file": "Versi berkas yang dihapus akan tetap muncul di riwayat berkas, tetapi bagian dari konten mereka akan menjadi tidak dapat diakses untuk umum.",
"logdelete-text": "Acara log yang dihapus akan tetap muncul di log, tetapi bagian dari konten mereka akan menjadi tidak dapat diakses untuk umum.",
- "revdelete-text-others": "Pengurus lain pada {{SITENAME}} masih akan dapat mengakses konten tersembunyi dan dapat membatalkan penghapusan itu kembali melalui antarmuka yang sama ini, kecuali ada batasan-batasan tambahan yang ditetapkan.",
+ "revdelete-text-others": "Pengurus lain akan masih dapat mengakses konten tersembunyi dan dapat membatalkan penghapusannya, kecuali jika ada penerapan batasan tambahan.",
"revdelete-confirm": "Tolong konfirmasi bahwa Anda memang bermaksud melakukan ini, memahami konsekuensinya, dan bahwa Anda melakukannya sesuai dengan [[{{MediaWiki:Policy-url}}|kebijakan]].",
"revdelete-suppress-text": "Penyembunyian revisi '''hanya''' boleh digunakan untuk kasus-kasus berikut:\n* Informasi yang berpotensi memfitnah\n* Informasi pribadi yang tak sepantasnya\n*: ''alamat rumah dan nomor telepon, nomor kartu identitas, dan lain-lain.''",
"revdelete-legend": "Atur batasan:",
"revdelete-hide-text": "Teks revisi",
"revdelete-hide-image": "Sembunyikan isi berkas",
- "revdelete-hide-name": "Sembunyikan tindakan dan target",
+ "revdelete-hide-name": "Sembunyikan target dan parameter",
"revdelete-hide-comment": "Ringkasan suntingan",
"revdelete-hide-user": "Nama pengguna/alamat IP penyunting",
"revdelete-hide-restricted": "Sembunyikan data dari opsis juga",
@@ -821,7 +840,6 @@
"mergehistory-reason": "Alasan:",
"mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "Log penggabungan",
- "pagemerge-logentry": "menggabungkan [[$1]] ke [[$2]] (revisi sampai dengan $3)",
"revertmerge": "Batal penggabungan",
"mergelogpagetext": "Di bawah ini adalah daftar penggabungan sejarah halaman ke halaman yang lain.",
"history-title": "Riwayat revisi dari \"$1\"",
@@ -833,7 +851,7 @@
"showhideselectedversions": "Tampilkan/sembunyikan versi terpilih",
"editundo": "balikkan",
"diff-empty": "(Tidak ada perbedaan)",
- "diff-multi-sameuser": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh pengguna yang sama tidak ditampilkan)",
+ "diff-multi-sameuser": "({{PLURAL:$1|$1 revisi antara}} oleh pengguna yang sama tidak ditampilkan)",
"diff-multi-otherusers": "({{PLURAL:$1|Satu revisi antara|$1 revisi antara}} oleh {{PLURAL:$2|satu pengguna lainnya|$2 pengguna}} tidak ditampilkan)",
"diff-multi-manyusers": "({{PLURAL:$1|Satu|$1}} revisi antara oleh lebih dari $2 {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)",
"difference-missing-revision": "{{PLURAL:$2|Satu revisi|$2 revisi}} dari perbedaan ini ($1) {{PLURAL:$2|tidak|tidak}} ditemukan.\n\nHal ini biasanya disebabkan oleh tautan diff yang kedaluwarsa ke halaman yang sudah dihapus.\nRinciannya dapat ditemukan di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
@@ -846,7 +864,7 @@
"nextn": "{{PLURAL:$1|$1}} selanjutnya",
"prevn-title": "$1 {{PLURAL:$1|hasil|hasil}} sebelumnya",
"nextn-title": "$1 {{PLURAL:$1|hasil|hasil}} selanjutnya",
- "shown-title": "Tampilkan $1 {{PLURAL:$1|hasil|hasil}} per halaman",
+ "shown-title": "Tampilkan $1 {{PLURAL:$1|hasil}} per halaman",
"viewprevnext": "Lihat ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "* Halaman '''[[$1]]'''",
"searchmenu-new": "<strong>Buat halaman \"[[:$1]]\" di wiki ini!</strong> {{PLURAL:$2|0=|Lihat pula halaman yang ditemukan dari pencarian Anda.|Lihat pula hasil pencarian yang ditemukan.}}",
@@ -858,10 +876,11 @@
"searchprofile-images-tooltip": "Pencarian berkas",
"searchprofile-everything-tooltip": "Pencarian di seluruh situs (termasuk halaman pembicaraan)",
"searchprofile-advanced-tooltip": "Pencarian di ruang nama tertentu",
- "search-result-size": "$1 ({{PLURAL:$2|1 kata|$2 kata}})",
+ "search-result-size": "$1 ({{PLURAL:$2|$2 kata}})",
"search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkategori|$2 subkategori}}, {{PLURAL:$3|1 berkas|$3 berkas}})",
"search-redirect": "(pengalihan $1)",
"search-section": "(bagian $1)",
+ "search-category": "(kategori $1)",
"search-file-match": "(cocok dengan isi berkas)",
"search-suggest": "Mungkin maksud Anda adalah: $1",
"search-interwiki-caption": "Proyek lain",
@@ -871,7 +890,8 @@
"searchrelated": "berkaitan",
"searchall": "semua",
"showingresults": "Di bawah ini ditampilkan hingga {{PLURAL:$1|'''1''' hasil|'''$1''' hasil}}, dimulai dari #'''$2'''.",
- "showingresultsinrange": "Menampilkan sampai dengan {{PLURAL:$1|<strong>1</strong> hasil|<strong>$1</strong> hasil}} dalam jangkauan #<strong>$2</strong> sampai #<strong>$3</strong>.",
+ "showingresultsinrange": "Menampilkan sampai dengan {{PLURAL:$1|<strong>1</strong> hasil|<strong>$1</strong> hasil}} dalam rentang #<strong>$2</strong> sampai #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Hasil <strong>$1</strong> dari <strong>$3</strong>|Hasil <strong>$1 - $2</strong> dari <strong>$3</strong>}}",
"search-nonefound": "Tidak ada hasil yang sesuai dengan kriteria.",
"powersearch-legend": "Pencarian lanjut",
"powersearch-ns": "Mencari di ruang nama:",
@@ -885,7 +905,7 @@
"preferences": "Preferensi",
"mypreferences": "Preferensi",
"prefs-edits": "Jumlah suntingan:",
- "prefsnologintext2": "Silakan $1 untuk mengubah preferensi Anda.",
+ "prefsnologintext2": "Silakan log masuk untuk mengubah preferensi Anda.",
"prefs-skin": "Kulit",
"skin-preview": "Pratayang",
"datedefault": "Tak ada preferensi",
@@ -894,8 +914,13 @@
"prefs-personal": "Profil",
"prefs-rc": "Perubahan terbaru",
"prefs-watchlist": "Pemantauan",
+ "prefs-editwatchlist": "Sunting daftar pantauan",
+ "prefs-editwatchlist-label": "Sunting entri di daftar pantuan:",
+ "prefs-editwatchlist-edit": "Lihat dan hapus judul di daftar pantauan Anda",
+ "prefs-editwatchlist-raw": "Sunting daftar pantauan mentah",
+ "prefs-editwatchlist-clear": "Kosongkan daftar pantauan",
"prefs-watchlist-days": "Jumlah hari maksimum yang ditampilkan di daftar pantauan:",
- "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|hari|hari}}",
+ "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|hari}}",
"prefs-watchlist-edits": "Jumlah suntingan maksimum yang ditampilkan di daftar pantauan yang lebih lengkap:",
"prefs-watchlist-edits-max": "Nilai maksimum: 1000",
"prefs-watchlist-token": "Token pantauan:",
@@ -963,9 +988,9 @@
"gender-unknown": "Tak dinyatakan",
"gender-male": "Laki-laki",
"gender-female": "Perempuan",
- "prefs-help-gender": "Opsional: digunakan untuk perbaikan penyebutan jender oleh perangkat lunak. \nInformasi ini akan terbuka untuk umum.",
+ "prefs-help-gender": "Opsional: digunakan untuk perbaikan penyebutan jenis kelamin oleh perangkat lunak. \nInformasi ini akan terbuka untuk umum.",
"email": "Surel",
- "prefs-help-realname": "Nama asli bersifat opsional.\nJika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan atas hasil kerja Anda.",
+ "prefs-help-realname": "Nama asli bersifat opsional.\nJika disediakan, nama ini dapat digunakan untuk memberi atribusi atas karya Anda.",
"prefs-help-email": "Alamat surel bersifat opsional, namun diperlukan untuk menyetel ulang sandi jika Anda lupa.",
"prefs-help-email-others": "Anda juga dapat memilih untuk mengizinkan orang lain menghubungi Anda melalui halaman pengguna atau pembicaraan tanpa perlu membongkar identitas Anda.",
"prefs-help-email-required": "Alamat surel wajib diisi.",
@@ -986,6 +1011,7 @@
"prefs-tokenwatchlist": "Tanda",
"prefs-diffs": "Beda",
"prefs-help-prefershttps": "Preferensi ini akan diaktifkan kali berikutnya Anda masuk log.",
+ "prefswarning-warning": "Perubahan preferensi anda belum tersimpan. Apabila anda meninggalkan halaman ini tanpa men-klik \"$1\" preferensi anda tidak akan diperbarui.",
"prefs-tabs-navigation-hint": "Tip: Anda dapat menggunakan tombol panah kiri dan kanan untuk bernavigasi antartab di dalam daftar tab.",
"email-address-validity-valid": "Alamat surel tampaknya sah",
"email-address-validity-invalid": "Masukkan alamat surel yang sah",
@@ -1061,7 +1087,8 @@
"right-deletedtext": "Melihat teks yang dihapus dan perubahan antara revisi yang dihapus",
"right-browsearchive": "Mencari halaman yang telah dihapus",
"right-undelete": "Mengembalikan halaman yang telah dihapus",
- "right-suppressrevision": "Memeriksa dan mengembalikan revisi-revisi yang disembunyikan dari Opsis",
+ "right-suppressrevision": "Menampilkan, menyembunyikan dan membatalkan penyembunyian revisi tertentu atas suatu halaman dari pengguna",
+ "right-viewsuppressed": "Lihat revisi yang disembunyikan dari semua pengguna",
"right-suppressionlog": "Melihat log privat",
"right-block": "Memblokir penyuntingan oleh pengguna lain",
"right-blockemail": "Memblokir pengiriman surel oleh pengguna",
@@ -1157,9 +1184,9 @@
"recentchanges-label-bot": "Suntingan ini dilakukan oleh bot",
"recentchanges-label-unpatrolled": "Suntingan ini belum terpatroli",
"recentchanges-label-plusminus": "Perubahan ukuran halaman dalam bita",
- "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-heading": "'''Keterangan:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat pula [[Special:NewPages|daftar halaman baru]])",
- "rcnotefrom": "Di bawah ini adalah perubahan sejak <strong>$2</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
+ "rcnotefrom": "Di bawah ini adalah {{PLURAL:$5|perubahan}} sejak <strong>$3, $4</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
"rclistfrom": "Perlihatkan perubahan terbaru sejak $3 $2",
"rcshowhideminor": "$1 suntingan kecil",
"rcshowhideminor-show": "Tampilkan",
@@ -1167,7 +1194,7 @@
"rcshowhidebots": "$1 bot",
"rcshowhidebots-show": "Tampilkan",
"rcshowhidebots-hide": "Sembunyikan",
- "rcshowhideliu": "$1 pengguna-pengguna terdaftar",
+ "rcshowhideliu": "$1 pengguna terdaftar",
"rcshowhideliu-show": "Tampilkan",
"rcshowhideliu-hide": "Sembunyikan",
"rcshowhideanons": "$1 pengguna anon",
@@ -1192,7 +1219,7 @@
"rc_categories": "Batasi sampai kategori (dipisah dengan \"|\")",
"rc_categories_any": "Apa pun",
"rc-change-size": "$1",
- "rc-change-size-new": "$1 {{PLURAL:$1|bita|bita}} setelah perubahan",
+ "rc-change-size-new": "$1 {{PLURAL:$1|bita}} setelah perubahan",
"newsectionsummary": "/* $1 */ bagian baru",
"rc-enhanced-expand": "Tampilkan rincian",
"rc-enhanced-hide": "Sembunyikan rincian",
@@ -1201,7 +1228,7 @@
"recentchangeslinked-feed": "Perubahan terkait",
"recentchangeslinked-toolbox": "Perubahan terkait",
"recentchangeslinked-title": "Perubahan yang terkait dengan \"$1\"",
- "recentchangeslinked-summary": "Halaman istimewa ini memberikan daftar perubahan terakhir pada halaman-halaman terkait. Halaman yang Anda pantau ditandai dengan '''cetak tebal'''.",
+ "recentchangeslinked-summary": "Ini adalah daftar perubahan pada halaman yang terkait ke halaman yang spesifik (atau bagian dari kategori yang spesifik).\nHalaman pada [[Special:Watchlist|daftar pantauan Anda]] terlihat <strong>dicetak tebal</strong>.",
"recentchangeslinked-page": "Nama halaman:",
"recentchangeslinked-to": "Perlihatkan perubahan dari halaman-halaman yang terhubung dengan halaman yang disajikan",
"upload": "Unggah berkas",
@@ -1215,9 +1242,9 @@
"uploaderror": "Kesalahan pemuatan",
"upload-recreate-warning": "'''Peringatan: Berkas dengan nama itu telah dihapus atau dipindahkan.'''\n\nLog penghapusan dan pemindahan laman ini adalah sebagai berikut:",
"uploadtext": "Gunakan formulir di bawah untuk mengunggah berkas.\nUntuk menampilkan atau mencari berkas yang sebelumnya dimuat, gunakan [[Special:FileList|daftar berkas]]. Pengunggahan (ulang) juga tercatat dalam [[Special:Log/upload|log pengunggahan]], sementara penghapusan tercatat dalam [[Special:Log/delete|log penghapusan]].\n\nUntuk menampilkan atau menyertakan berkas di dalam suatu halaman, gunakan pranala dengan salah satu format di bawah ini:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Berkas.jpg]]</nowiki></code>''' untuk menampilkan berkas dalam ukuran aslinya\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Berkas.png|200px|thumb|left|teks alternatif]]</nowiki></code>''' untuk menampilkan berkas dengan lebar 200px dalam sebuah kotak di kiri halaman dengan 'teks alternatif' sebagai keterangan gambar\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Berkas.ogg]]</nowiki></code>''' sebagai pranala langsung ke berkas yang dimaksud tanpa menampilkan berkas tersebut melalui wiki",
- "upload-permitted": "Jenis berkas yang diperbolehkan: $1.",
- "upload-preferred": "Jenis berkas yang disarankan: $1.",
- "upload-prohibited": "Jenis berkas yang dilarang: $1.",
+ "upload-permitted": "{{PLURAL:$2|Jenis}} berkas yang diperbolehkan: $1.",
+ "upload-preferred": "{{PLURAL:$2|Jenis}} berkas yang disarankan: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Jenis}} berkas yang dilarang: $1.",
"uploadlogpage": "Log pengunggahan",
"uploadlogpagetext": "Berikut adalah daftar unggahan berkas terbaru. \nLihat [[Special:NewFiles|galeri berkas baru]] untuk tampilan visual.",
"filename": "Nama berkas",
@@ -1374,9 +1401,10 @@
"license": "Jenis lisensi:",
"license-header": "Jenis lisensi",
"nolicense": "Tidak ada yang dipilih",
+ "licenses-edit": "Sunting pilihan lisensi",
"license-nopreview": "(Pratayang tak tersedia)",
- "upload_source_url": " (suatu URL valid yang dapat diakses publik)",
- "upload_source_file": " (suatu berkas di komputer Anda)",
+ "upload_source_url": "(Anda pilih berkas dari URL valid yang dapat diakses publik)",
+ "upload_source_file": "(Anda pilih berkas dari komputer Anda)",
"listfiles-delete": "hapus",
"listfiles-summary": "Halaman istimewa ini menampilkan semua berkas yang telah diunggah.\nKetika disaring oleh pengguna, hanya versi berkas terbaru dari berkas yang diunggah oleh pengguna tersebut yang ditampilkan.",
"listfiles_search_for": "Cari nama berkas:",
@@ -1409,7 +1437,7 @@
"filehist-filesize": "Besar berkas",
"filehist-comment": "Komentar",
"imagelinks": "Pranala berkas",
- "linkstoimage": "{{PLURAL:$1||}}$1 halaman berikut memiliki pranala ke berkas ini:",
+ "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.",
"morelinkstoimage": "Lihat [[Special:WhatLinksHere/$1|pranala lainnya]] ke berkas ini.",
@@ -1458,7 +1486,7 @@
"download": "unduh",
"unwatchedpages": "Halaman yang tak dipantau",
"listredirects": "Daftar pengalihan",
- "listduplicatedfiles": "Daftar berkas yang berduplikat",
+ "listduplicatedfiles": "Daftar berkas duplikat",
"listduplicatedfiles-summary": "Ini adalah daftar berkas di mana versi terbaru dari berkas tersebut merupakan duplikat dari versi terbaru dari beberapa berkas lain. Hanya berkas lokal yang dianggap.",
"listduplicatedfiles-entry": "[[:File:$1|$1]] memiliki [[$3|{{PLURAL:$2|sebuah duplikat|$2 duplikat}}]].",
"unusedtemplates": "Templat yang tak digunakan",
@@ -1469,12 +1497,13 @@
"randomincategory": "Halaman acak dalam kategori",
"randomincategory-invalidcategory": "\"$1\" bukanlah nama kategori yang berlaku.",
"randomincategory-nopages": "Tidak ada halaman dalam [[:Category:$1]].",
+ "randomincategory-category": "Kategori:",
+ "randomincategory-legend": "Halaman sembarang di kategori",
"randomredirect": "Pengalihan sembarang",
"randomredirect-nopages": "Tak terdapat pengalihan pada ruang nama \"$1\".",
"statistics": "Statistik",
"statistics-header-pages": "Statistik halaman",
"statistics-header-edits": "Statistik suntingan",
- "statistics-header-views": "Statistik penampilan",
"statistics-header-users": "Statistik pengguna",
"statistics-header-hooks": "Statistik lainnya",
"statistics-articles": "Halaman konten",
@@ -1483,20 +1512,16 @@
"statistics-files": "Berkas yang dimuatkan",
"statistics-edits": "Jumlah suntingan sejak {{SITENAME}} dimulai",
"statistics-edits-average": "Rata-rata suntingan per halaman",
- "statistics-views-total": "Jumlah penampilan halaman",
- "statistics-views-total-desc": "Tampilan ke halaman yang tidak ada dan halaman khusus yang tidak dimasukkan",
- "statistics-views-peredit": "Jumlah penampilan per suntingan",
"statistics-users": "Jumlah [[Special:ListUsers|pengguna terdaftar]]",
"statistics-users-active": "Jumlah pengguna aktif",
"statistics-users-active-desc": "Pengguna yang telah melakukan suatu aktivitas dalam {{PLURAL:$1|sehari|$1 hari}} terakhir.",
- "statistics-mostpopular": "Halaman yang paling banyak ditampilkan",
"pageswithprop": "Halaman dengan halaman properti",
"pageswithprop-legend": "Halaman dengan halaman properti",
"pageswithprop-text": "Halaman ini berisi daftar halaman yang menggunakan properti halaman tertentu.",
"pageswithprop-prop": "Nama properti:",
"pageswithprop-submit": "Lanjut",
- "pageswithprop-prophidden-long": "nilai properti teks panjang tersembunyi ($1 kilobita)",
- "pageswithprop-prophidden-binary": "nilai properti biner tersembunyi ($1 kilobita)",
+ "pageswithprop-prophidden-long": "nilai properti teks panjang tersembunyi ($1)",
+ "pageswithprop-prophidden-binary": "nilai properti biner tersembunyi ($1)",
"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]].",
@@ -1511,11 +1536,11 @@
"withoutinterwiki-legend": "Prefiks",
"withoutinterwiki-submit": "Tampilkan",
"fewestrevisions": "Halaman dengan perubahan tersedikit",
- "nbytes": "$1 {{PLURAL:$1|bita|bita}}",
+ "nbytes": "$1 {{PLURAL:$1|bita}}",
"ncategories": "$1 {{PLURAL:$1|kategori|kategori}}",
"ninterwikis": "$1 {{PLURAL:$1|interwiki|interwiki}}",
"nlinks": "$1 {{PLURAL:$1|pranala|pranala}}",
- "nmembers": "$1 {{PLURAL:$1|isi|isi}}",
+ "nmembers": "$1 {{PLURAL:$1|isi}}",
"nmemberschanged": "$1 → $2 {{PLURAL:$2|anggota|anggota}}",
"nrevisions": "$1 {{PLURAL:$1|revisi|revisi}}",
"nviews": "dilihat $1 {{PLURAL:$1|kali|kali}}",
@@ -1530,7 +1555,6 @@
"uncategorizedtemplates": "Templat yang tak terkategori",
"unusedcategories": "Kategori yang tak digunakan",
"unusedimages": "Berkas yang tak digunakan",
- "popularpages": "Halaman populer",
"wantedcategories": "Kategori yang diinginkan",
"wantedpages": "Halaman yang diinginkan",
"wantedpages-badtitle": "Judul tak valid dalam himpunan hasil: $1",
@@ -1589,13 +1613,15 @@
"nopagetitle": "Halaman tujuan tidak ditemukan",
"nopagetext": "Halaman yang Anda tuju tidak ditemukan.",
"pager-newer-n": "{{PLURAL:$1|1 lebih baru|$1 lebih baru}}",
- "pager-older-n": "{{PLURAL:$1|1 lebih lama|$1 lebih lama}}",
+ "pager-older-n": "{{PLURAL:$1|$1 lebih lama}}",
"suppress": "Pengawas",
"querypage-disabled": "Halaman istimewa ini dinonaktifkan demi alasan kinerja.",
+ "apihelp": "Bantuan API",
+ "apihelp-no-such-module": "Modul \"$1\" tidak ditemukan.",
"booksources": "Sumber buku",
"booksources-search-legend": "Cari di sumber buku",
"booksources-isbn": "ISBN:",
- "booksources-go": "Tuju ke",
+ "booksources-search": "Cari",
"booksources-text": "Di bawah ini adalah daftar pranala ke situs lain yang menjual buku baru dan bekas, dan mungkin juga mempunyai informasi lebih lanjut mengenai buku yang sedang Anda cari:",
"booksources-invalid-isbn": "ISBN yang diberikan tampaknya tidak valid; periksa kesalahan penyalinan dari sumber asli.",
"specialloguserlabel": "Pengguna:",
@@ -1708,7 +1734,7 @@
"emailccsubject": "Salinan pesan Anda untuk $1: $2",
"emailsent": "Surel terkirim",
"emailsenttext": "Surel Anda telah dikirimkan.",
- "emailuserfooter": "Surel ini dikirimkan oleh $1 kepada $2 menggunakan fungsi \"Suratepengguna\" di {{SITENAME}}.",
+ "emailuserfooter": "Surel ini dikirimkan oleh $1 kepada $2 menggunakan fungsi \"Surel Pengguna\" di {{SITENAME}}.",
"usermessage-summary": "Tinggalkan pesan sistem.",
"usermessage-editor": "Penyampai pesan sistem",
"usermessage-template": "MediaWiki:UserMessage",
@@ -1734,7 +1760,7 @@
"wlheader-enotif": "Notifikasi surel diaktifkan.",
"wlheader-showupdated": "Halaman-halaman yang telah berubah sejak kunjungan terakhir Anda ditampilkan dengan '''huruf tebal'''.",
"wlnote": "Di bawah ini adalah {{PLURAL:$1|perubahan|'''$1''' perubahan}} terakhir dalam '''$2''' jam terakhir, per $3, $4.",
- "wlshowlast": "Tampilkan $1 jam $2 hari terakhir $3",
+ "wlshowlast": "Tampilkan $1 jam $2 hari terakhir",
"watchlist-options": "Opsi daftar pantauan",
"watching": "Memantau...",
"unwatching": "Menghilangkan pemantauan...",
@@ -1782,9 +1808,8 @@
"delete-warning-toobig": "Halaman ini memiliki sejarah penyuntingan yang panjang, melebihi {{PLURAL:$1|revisi|revisi}}.\nMenghapus halaman ini dapat menyebabkan masalah dalam operasional basis data {{SITENAME}}.",
"deleting-backlinks-warning": "'''Peringatan:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Halaman lain]] mengarah atau memiliki transklusi ke halaman yang akan Anda hapus.",
"rollback": "Kembalikan suntingan",
- "rollback_short": "Kembalikan",
"rollbacklink": "kembalikan",
- "rollbacklinkcount": "kembalikan $1 {{PLURAL:$1|suntingan|suntingan}}",
+ "rollbacklinkcount": "kembalikan $1 {{PLURAL:$1|suntingan}}",
"rollbacklinkcount-morethan": "kembalikan lebih dari $1 {{PLURAL:$1|suntingan|suntingan}}",
"rollbackfailed": "Pengembalian gagal dilakukan",
"cantrollback": "Tidak dapat membatalkan suntingan;\nkontributor terakhir adalah satu-satunya penulis halaman ini.",
@@ -1928,10 +1953,10 @@
"nolinkshere": "Tidak ada halaman yang memiliki pranala ke '''[[:$1]]'''.",
"nolinkshere-ns": "Tidak ada halaman yang memiliki pranala ke '''[[:$1]]''' pada ruang nama yang dipilih.",
"isredirect": "halaman pengalihan",
- "istemplate": "dengan templat",
+ "istemplate": "tranklusi",
"isimage": "pranala berkas",
- "whatlinkshere-prev": "$1 {{PLURAL:$1|sebelumnya|sebelumnya}}",
- "whatlinkshere-next": "$1 {{PLURAL:$1|selanjutnya|selanjutnya}}",
+ "whatlinkshere-prev": "{{PLURAL:$1|sebelumnya $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|selanjutnya $1}}",
"whatlinkshere-links": "← pranala",
"whatlinkshere-hideredirs": "$1 pengalihan",
"whatlinkshere-hidetrans": "$1 transklusi",
@@ -1941,7 +1966,7 @@
"autoblockid": "Blokir otomatis #$1",
"block": "Blokir pengguna",
"unblock": "Buka blokir pengguna",
- "blockip": "Blokir pengguna",
+ "blockip": "Blokir {{GENDER:$1|pengguna}}",
"blockip-legend": "Blokir pengguna",
"blockiptext": "Gunakan formulir di bawah untuk memblokir akses penulisan dari sebuah alamat IP atau pengguna tertentu.\nIni hanya boleh dilakukan untuk mencegah vandalisme, dan sejalan dengan [[{{MediaWiki:Policy-url}}|kebijakan]].\nMasukkan alasan Anda di bawah (contoh, menuliskan nama halaman yang telah divandalisasi).",
"ipaddressorusername": "Alamat IP atau nama pengguna:",
@@ -1970,7 +1995,7 @@
"ipb-unblock-addr": "Hilangkan blokir $1",
"ipb-unblock": "Hilangkan blokir seorang pengguna atau suatu alamat IP",
"ipb-blocklist": "Lihat blokir yang diterapkan",
- "ipb-blocklist-contribs": "Kontribusi untuk $1",
+ "ipb-blocklist-contribs": "Kontribusi untuk {{GENDER:$1|$1}}",
"unblockip": "Hilangkan blokir terhadap alamat IP atau pengguna",
"unblockiptext": "Gunakan formulir di bawah untuk mengembalikan kemampuan menulis sebuah alamat IP atau pengguna yang sebelumnya telah diblokir.",
"ipusubmit": "Hilangkan blokir ini",
@@ -2210,13 +2235,11 @@
"import-logentry-interwiki": "men-transwiki $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisi}} dari $2",
"javascripttest": "Pengujian JavaScript",
- "javascripttest-title": "$1 pengujian sedang berjalan",
"javascripttest-pagetext-noframework": "Halaman ini disediakan untuk pengujian JavaScript yang sedang berjalan.",
"javascripttest-pagetext-unknownframework": "Pengujian kerangka kerja \"$1\" tidak diketahui",
"javascripttest-pagetext-frameworks": "Silakan pilih satu di antara kerangka kerja pengujian berikut: $1",
"javascripttest-pagetext-skins": "Pilih kulit yang ingin Anda uji:",
"javascripttest-qunit-intro": "Lihat [$1 dokumentasi pengujian] di mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
"tooltip-pt-userpage": "Halaman pengguna Anda",
"tooltip-pt-anonuserpage": "Halaman pengguna IP Anda",
"tooltip-pt-mytalk": "Halaman pembicaraan Anda",
@@ -2226,11 +2249,12 @@
"tooltip-pt-mycontris": "Daftar kontribusi Anda",
"tooltip-pt-login": "Anda disarankan untuk masuk log, meskipun hal itu tidak diwajibkan.",
"tooltip-pt-logout": "Keluar log",
+ "tooltip-pt-createaccount": "Anda dianjurkan untuk membuat akun dan masuk log; meskipun, hal itu tidak diwajibkan",
"tooltip-ca-talk": "Pembicaraan halaman isi",
"tooltip-ca-edit": "Anda dapat menyunting halaman ini. Gunakan tombol pratayang sebelum menyimpan",
"tooltip-ca-addsection": "Mulai bagian baru",
"tooltip-ca-viewsource": "Halaman ini dilindungi. Anda hanya dapat melihat sumbernya.",
- "tooltip-ca-history": "Revisi-revisi sebelumnya dari halaman ini.",
+ "tooltip-ca-history": "Revisi sebelumnya dari halaman ini.",
"tooltip-ca-protect": "Lindungi halaman ini",
"tooltip-ca-unprotect": "Ubah perlindungan halaman ini",
"tooltip-ca-delete": "Hapus halaman ini",
@@ -2238,7 +2262,7 @@
"tooltip-ca-move": "Pindahkan halaman ini",
"tooltip-ca-watch": "Tambahkan halaman ini ke daftar pantauan Anda",
"tooltip-ca-unwatch": "Hapus halaman ini dari daftar pantauan Anda",
- "tooltip-search": "Cari dalam wiki ini",
+ "tooltip-search": "Cari di {{SITENAME}}",
"tooltip-search-go": "Cari suatu halaman dengan nama yang persis seperti ini jika tersedia",
"tooltip-search-fulltext": "Cari halaman yang memiliki teks seperti ini",
"tooltip-p-logo": "Kunjungi Halaman Utama",
@@ -2255,7 +2279,7 @@
"tooltip-feed-atom": "Umpan Atom untuk halaman ini",
"tooltip-t-contributions": "Lihat daftar kontribusi pengguna ini",
"tooltip-t-emailuser": "Kirimkan surel kepada pengguna ini",
- "tooltip-t-upload": "Muatkan gambar atau berkas media",
+ "tooltip-t-upload": "Unggah berkas",
"tooltip-t-specialpages": "Daftar semua halaman istimewa",
"tooltip-t-print": "Versi cetak halaman ini",
"tooltip-t-permalink": "Pranala permanen untuk revisi halaman ini",
@@ -2279,7 +2303,7 @@
"tooltip-watchlistedit-raw-submit": "Perbarui daftar pantauan",
"tooltip-recreate": "Buat ulang halaman walaupun sebenarnya telah dihapus",
"tooltip-upload": "Mulai pemuatan",
- "tooltip-rollback": "\"Kembalikan\" membatalkan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.",
+ "tooltip-rollback": "\"Pengembali\" membatalkan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.",
"tooltip-undo": "\"Balikkan\" membatalkan revisi ini dan membuka kotak penyuntingan dengan mode pratayang. Alasan dapat ditambahkan di kotak ringkasan.",
"tooltip-preferences-save": "Simpan preferensi",
"tooltip-summary": "Masukkan sebuah ringkasan pendek",
@@ -2328,7 +2352,6 @@
"pageinfo-robot-policy": "Pengindeksan oleh robot",
"pageinfo-robot-index": "Diperbolehkan",
"pageinfo-robot-noindex": "Tidak diperbolehkan",
- "pageinfo-views": "Jumlah penampilan",
"pageinfo-watchers": "Jumlah pemantau halaman",
"pageinfo-few-watchers": "Kurang dari $1 {{PLURAL:$1|pengunjung}}",
"pageinfo-redirects-name": "Jumah pengalihan ke halaman ini",
@@ -2389,14 +2412,14 @@
"widthheightpage": "$1 × $2, $3 {{PLURAL:$3|halaman|halaman}}",
"file-info": "ukuran berkas: $1, tipe MIME: $2",
"file-info-size": "$1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4",
- "file-info-size-pages": "$1 × $2 piksel, ukuran berkas: $3, jenis MIME: $4, $5 {{PLURAL:$5|halaman|halaman}}",
+ "file-info-size-pages": "$1 × $2 piksel, ukuran berkas: $3, tipe MIME: $4, $5 {{PLURAL:$5|halaman}}",
"file-nohires": "Tak tersedia resolusi yang lebih tinggi.",
"svg-long-desc": "Berkas SVG, nominal $1 × $2 piksel, besar berkas: $3",
"svg-long-desc-animated": "Berkas SVG animasi, biasanya $1 x $2 piksel, ukuran gambar: $3",
"svg-long-error": "Berkas SVG tidak sah: $1",
"show-big-image": "Ukuran asli",
"show-big-image-preview": "Ukuran pratayang ini: $1.",
- "show-big-image-other": "{{PLURAL:$2|Resolusi|Resolusi}} lain: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Resolusi}} lain: $1.",
"show-big-image-size": "$1 × $2 piksel",
"file-info-gif-looped": "melingkar",
"file-info-gif-frames": "$1 {{PLURAL:$1||}}frame",
@@ -2463,7 +2486,7 @@
"metadata-help": "Berkas ini mengandung informasi tambahan yang mungkin ditambahkan oleh kamera digital atau pemindai yang digunakan untuk membuat atau mendigitalisasi berkas. Jika berkas ini telah mengalami modifikasi, rincian yang ada mungkin tidak secara penuh merefleksikan informasi dari gambar yang sudah dimodifikasi ini.",
"metadata-expand": "Tampilkan rincian tambahan",
"metadata-collapse": "Sembunyikan rincian tambahan",
- "metadata-fields": "Bidang metadata gambar yang tercantum dalam pesan ini akan dimasukkan pada tampilan halaman gambar ketika tabel metadata diciutkan.\nData lain akan disembunyikan secara bawaan.\n * make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-fields": "Bidang metadata gambar yang tercantum dalam pesan ini akan dimasukkan pada tampilan halaman gambar ketika tabel metadata diciutkan.\nData lain akan disembunyikan secara bawaan.\n* pembuat\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* hak cipta\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"metadata-langitem": "'''$2:''' $1",
"metadata-langitem-default": "$1",
"exif-imagewidth": "Lebar",
@@ -2832,7 +2855,6 @@
"exif-urgency-low": "Rendah ($1)",
"exif-urgency-high": "Tinggi ($1)",
"exif-urgency-other": "Prioritas ubahsuaian ($1)",
- "watchlistall2": "semua",
"namespacesall": "semua",
"monthsall": "semua",
"confirmemail": "Konfirmasi alamat surel",
@@ -2875,6 +2897,7 @@
"pipe-separator": "&#32;|&#32;",
"word-separator": "&#32;",
"ellipsis": "...",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "&larr; halaman sebelumnya",
"imgmultipagenext": "halaman selanjutnya &rarr;",
"imgmultigo": "Cari!",
@@ -2961,7 +2984,6 @@
"hebrew-calendar-m12-gen": "Elul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|bicara]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "Tag ekstensi tidak dikenal \"$1\"",
"duplicate-defaultsort": "Peringatan: Kunci pengurutan baku \"$2\" mengabaikan kunci pengurutan baku \"$1\" sebelumnya.",
"duplicate-displaytitle": "<strong>Peringatan:</strong> Menampilkan judul \"$2\" menimpa judul tampilan \"$1\" sebelumnya.",
"version": "Versi",
@@ -2979,7 +3001,7 @@
"version-parser-function-hooks": "Kait fungsi parser",
"version-hook-name": "Nama kait",
"version-hook-subscribedby": "Dilanggani oleh",
- "version-version": "(Versi $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[tanpa nama]",
"version-svn-revision": "(r$2)",
"version-license": "Lisensi MediaWiki",
@@ -3042,6 +3064,7 @@
"specialpages-group-wiki": "Data dan peralatan",
"specialpages-group-redirects": "Pencarian dan pengalihan",
"specialpages-group-spam": "Peralatan spam",
+ "specialpages-group-developer": "Alat Pengembang",
"blankpage": "Halaman kosong",
"intentionallyblankpage": "Halaman ini sengaja dibiarkan kosong dan digunakan di antaranya untuk pengukuran kinerja, dan lain-lain.",
"external_image_whitelist": "#Biarkan baris ini sebagaimana adanya<pre>\n#Gunakan fragmen-fragmen ekspresi regular (hanya bagian di antara //) di bawah ini\n#Fragmen-fragmen ini akan dicocokkan dengan URL dari gambar-gambar eksternal (yang dihubungkan langsung)\n#Fragmen yang cocok akan ditampilkan sebagai gambar, sisanya hanya sebagai pranala saja\n#Baris yang diawali dengan # akan diperlakukan sebagai baris komentar\n#Ini tidak membedakan huruf besar dan kecil\n#Letakkan semua fragmen ekspresi regular di bawah baris ini. Biarkan baris ini sebagaimana adanya</pre>",
@@ -3059,7 +3082,10 @@
"tags-active-yes": "Ya",
"tags-active-no": "Tidak",
"tags-edit": "sunting",
- "tags-hitcount": "$1 {{PLURAL:$1|perubahan|perubahan}}",
+ "tags-delete": "hapus",
+ "tags-activate": "aktifkan",
+ "tags-deactivate": "nonaktifkan",
+ "tags-hitcount": "$1 {{PLURAL:$1|perubahan}}",
"comparepages": "Bandingkan halaman",
"compare-page1": "Halaman 1",
"compare-page2": "Halaman 2",
@@ -3071,8 +3097,8 @@
"compare-revision-not-exists": "Revisi yang Anda minta tidak ada.",
"dberr-problems": "Maaf! Situs ini mengalami masalah teknis.",
"dberr-again": "Cobalah menunggu beberapa menit dan muat ulang.",
- "dberr-info": "(Tak dapat tersambung dengan server basis data: $1)",
- "dberr-info-hidden": "(Tidak dapat menghubungi peladen basis data)",
+ "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.",
@@ -3113,6 +3139,7 @@
"revdelete-uname-unhid": "nama pengguna tidak disembunyikan",
"revdelete-restricted": "akses telah dibatasi untuk opsis",
"revdelete-unrestricted": "pembatasan akses opsis dihapuskan",
+ "logentry-merge-merge": "$1 {{GENDER:$2|menggabungkan}} $3 dengan $4 (revisi lebih dari $5)",
"logentry-move-move": "$1 {{GENDER:$2|memindahkan}} halaman $3 ke $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|memindahkan}} halaman $3 ke $4 tanpa membuat pengalihan",
"logentry-move-move_redir": "$1 {{GENDER:$2|memindahkan}} halaman $3 ke $4 menimpa pengalihan lama",
@@ -3127,29 +3154,35 @@
"logentry-rights-rights": "$1 {{GENDER:$2|mengubah}} keanggotaan grup $3 dari $4 menjadi $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|mengubah}} keanggotaan grup $3",
"logentry-rights-autopromote": "$1 secara otomatis {{GENDER:$2|dipromosikan}} dari $4 menjadi $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|mengunggah}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|mengunggah}} versi baru dari $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|mengunggah}} $3",
+ "log-name-managetags": "Log pengelolaan tag",
+ "logentry-managetags-create": "$1 {{GENDER:$2|membuat}} tag \"$4\"",
"rightsnone": "(tidak ada)",
+ "revdelete-summary": "ringkasan",
+ "feedback-adding": "Menambahkan umpan balik ke halaman...",
+ "feedback-bugcheck": "Hebat! Hanya periksa bahwa itu bukan satu di antara [$1 bug yang telah dikenal].",
+ "feedback-bugnew": "Saya telah memeriksa. Laporkan bug baru",
"feedback-bugornote": "Jika Anda sudah siap untuk mendeskripsikan masalah teknis secara rinci silakan [$1 melaporkan bug].\nJika tidak, Anda dapat menggunakan formulir mudah di bawah ini. Komentar Anda akan ditambahkan ke halaman \"[$3 $2]\", bersama dengan nama pengguna Anda dan apa browser yang Anda gunakan.",
- "feedback-subject": "Perihal:",
- "feedback-message": "Pesan:",
"feedback-cancel": "Batal",
- "feedback-submit": "Kirim Umpan Balik",
- "feedback-adding": "Menambahkan umpan balik ke halaman...",
+ "feedback-close": "Selesai",
"feedback-error1": "Galat: Hasil tidak dikenal dari API",
"feedback-error2": "Galat: Penyuntingan gagal",
"feedback-error3": "Error: API tidak merespons",
- "feedback-thanks": "Terima kasih! Umpan balik Anda telah diposting ke halaman \"[$2 $1]\".",
- "feedback-close": "Selesai",
- "feedback-bugcheck": "Hebat! Hanya periksa bahwa itu bukan satu di antara [$1 bug yang telah dikenal].",
- "feedback-bugnew": "Saya telah memeriksa. Laporkan bug baru",
+ "feedback-message": "Pesan:",
+ "feedback-subject": "Perihal:",
+ "feedback-submit": "Kirim",
+ "feedback-thanks": "Terima kasih! Umpan balik Anda telah dikirimkan ke halaman \"[$2 $1]\".",
"searchsuggest-search": "Cari",
- "searchsuggest-containing": "isian ...",
+ "searchsuggest-containing": "berisi...",
"api-error-badaccess-groups": "Anda tidak diizinkan mengunggah berkas ke wiki ini.",
"api-error-badtoken": "Kesalahan internal: token buruk.",
"api-error-copyuploaddisabled": "Mengunggah melalui URL dilarang pada peladen ini.",
- "api-error-duplicate": "Sudah ada {{PLURAL:$1|[$2 berkas lain]|[$2 berkas lain]}} dengan konten yang sama di situs ini",
- "api-error-duplicate-archive": "Ada {{PLURAL:$1|[$2 berkas]|[$2 berkas]}} lain di situs dengan konten yang sama, namun {{PLURAL:$1|berkas|berkas-berkas}} itu telah dihapus.",
- "api-error-duplicate-archive-popup-title": "{{PLURAL:$1|Berkas|Berkas-berkas}} duplikat yang telah dihapus",
- "api-error-duplicate-popup-title": "{{PLURAL:$1|Berkas|Berkas}} duplikat",
+ "api-error-duplicate": "Sudah ada {{PLURAL:$1|[$2 berkas lain]}} dengan konten yang sama di situs ini.",
+ "api-error-duplicate-archive": "Ada {{PLURAL:$1|[$2 berkas]}} lain di situs dengan konten yang sama, namun {{PLURAL:$1|berkas|berkas-berkas}} itu telah dihapus.",
+ "api-error-duplicate-archive-popup-title": "{{PLURAL:$1|Berkas|Berkas-berkas}} duplikat yang telah dihapus.",
+ "api-error-duplicate-popup-title": "{{PLURAL:$1|Berkas}} duplikat.",
"api-error-empty-file": "Berkas yang Anda kirim kosong.",
"api-error-emptypage": "Pembuatan halaman baru yang kosong tidak diizinkan.",
"api-error-fetchfileerror": "Kesalahan internal: terjadi kesalahan saat memperoleh berkas ini.",
@@ -3184,27 +3217,27 @@
"api-error-unknownerror": "Kesalahan tidak dikenal: \"$1\"",
"api-error-uploaddisabled": "Pengunggahan dinonaktifkan di wiki ini.",
"api-error-verification-error": "Berkas ini mungkin rusak atau memiliki ekstensi yang salah.",
- "duration-seconds": "{{PLURAL:$1||}}$1 detik",
- "duration-minutes": "{{PLURAL:$1||}}$1 menit",
- "duration-hours": "{{PLURAL:$1||}}$1 jam",
- "duration-days": "{{PLURAL:$1||}}$1 hari",
- "duration-weeks": "{{PLURAL:$1||}}$1 minggu",
- "duration-years": "{{PLURAL:$1||}}$1 tahun",
- "duration-decades": "{{PLURAL:$1||}}$1 dekade",
- "duration-centuries": "{{PLURAL:$1||}}$1 abad",
- "duration-millennia": "{{PLURAL:$1||}}$1 milenium",
+ "duration-seconds": "$1 {{PLURAL:$1|detik}}",
+ "duration-minutes": "$1 {{PLURAL:$1|menit}}",
+ "duration-hours": "$1 {{PLURAL:$1|jam}}",
+ "duration-days": "$1 {{PLURAL:$1|hari}}",
+ "duration-weeks": "$1 {{PLURAL:$1|minggu}}",
+ "duration-years": "$1 {{PLURAL:$1|tahun}}",
+ "duration-decades": "$1 {{PLURAL:$1|dekade}}",
+ "duration-centuries": "$1 {{PLURAL:$1|abad}}",
+ "duration-millennia": "$1 {{PLURAL:$1|milenium}}",
"rotate-comment": "Gambar diputar $1 {{PLURAL:$1|derajat}} searah jarum jam",
"limitreport-title": "Parser profil data:",
"limitreport-cputime": "Penggunaan waktu CPU",
- "limitreport-cputime-value": "$1 {{PLURAL:$1|detik|detik}}",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|detik}}",
"limitreport-walltime": "Penggunaan waktu riil",
- "limitreport-walltime-value": "$1 {{PLURAL:$1|detik|detik}}",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|detik}}",
"limitreport-ppvisitednodes": "Preprosesor mengunjungi hitungan node",
"limitreport-ppgeneratednodes": "Preprosesor menghasilkan hitungan node",
"limitreport-postexpandincludesize": "Pasca memperluas mencakup ukuran",
- "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bita|bita}}",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bita}}",
"limitreport-templateargumentsize": "Ukuran argumen temlat",
- "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bita|bita}}",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bita}}",
"limitreport-expansiondepth": "Kedalaman ekspansi tertinggi",
"limitreport-expensivefunctioncount": "Perhitungan fungsi parser yang mahal",
"expandtemplates": "Pengembangan templat",
@@ -3213,7 +3246,7 @@
"expand_templates_input": "Teks masukan:",
"expand_templates_output": "Hasil",
"expand_templates_xml_output": "Hasil XML",
- "expand_templates_html_output": "Keliaran HTML mentah",
+ "expand_templates_html_output": "Keluaran HTML mentah",
"expand_templates_ok": "OK",
"expand_templates_remove_comments": "Buang komentar",
"expand_templates_remove_nowiki": "Tidak menampilkan tag <nowiki> pada hasilnya",
@@ -3223,11 +3256,31 @@
"pagelanguage": "Pemilih bahasa halaman",
"pagelang-name": "Halaman",
"pagelang-language": "Bahasa",
- "pagelang-use-default": "Gunakan bahasa default",
+ "pagelang-use-default": "Gunakan bahasa baku",
"pagelang-select-lang": "Pilih bahasa",
"right-pagelang": "Ubah bahasa halaman",
"action-pagelang": "mengubah bahasa halaman",
"log-name-pagelang": "Ubah bahasa log",
"log-description-pagelang": "Ini adalah log perubahan dalam bahasa halaman.",
- "logentry-pagelang-pagelang": "$1 {{GENDER:$2|mengubah}} bahasa halaman $3 dari $4 menjadi $5."
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|mengubah}} bahasa halaman $3 dari $4 menjadi $5.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktif)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''nonaktif''')",
+ "mediastatistics": "Statistik media",
+ "mediastatistics-summary": "Statistik mengenai jenis berkas yang diunggah. Hanya mencakup versi terbaru dari berkas. Berkas lama dan berkas yang sudah dihapus tidak termasuk.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 bita}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tipe MIME",
+ "mediastatistics-table-extensions": "Ekstensi",
+ "mediastatistics-table-count": "Jumlah file",
+ "mediastatistics-table-totalbytes": "Ukuran gabungan",
+ "mediastatistics-header-unknown": "Tidak diketahui",
+ "mediastatistics-header-bitmap": "Gambar bitmap",
+ "mediastatistics-header-drawing": "Gambar vektor",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Video",
+ "mediastatistics-header-office": "Aplikasi Office",
+ "mediastatistics-header-text": "Tekstual",
+ "mediastatistics-header-executable": "Program",
+ "mediastatistics-header-archive": "Format terkompresi",
+ "json-error-depth": "Kedalaman tumpukan maksimal telah terlewati",
+ "json-error-syntax": "Kesalahan sintaks"
}
diff --git a/languages/i18n/ie.json b/languages/i18n/ie.json
index b1f5651f..215c4894 100644
--- a/languages/i18n/ie.json
+++ b/languages/i18n/ie.json
@@ -460,7 +460,6 @@
"search-suggest": "Esque tu ha intentet: «$1»?",
"searchrelated": "relatet",
"searchall": "omni",
- "showingresultsheader": "{{PLURAL:$5|Resultate '''$1''' de '''$3'''|Resultates '''$1 – $2''' de '''$3'''}} por '''$4'''",
"search-nonefound": "Tu sercha ne ha trovat un resultate.",
"preferences": "Preferenties",
"mypreferences": "Preferenties",
@@ -617,7 +616,6 @@
"statistics": "Statistica",
"statistics-header-pages": "Statistica del págine",
"statistics-header-edits": "Redacter statistica",
- "statistics-header-views": "Vider statistica",
"statistics-header-users": "Statistica de usator",
"statistics-header-hooks": "Altri statistica",
"statistics-articles": "Págines de contenete",
@@ -626,12 +624,9 @@
"statistics-files": "Files cargat",
"statistics-edits": "Redactiones del págine desde que {{SITENAME}} esset etablisset",
"statistics-edits-average": "Valore medial de redactiones per págine",
- "statistics-views-total": "Total de vistas",
- "statistics-views-peredit": "Vider por redaction",
"statistics-users": "[[Special:ListUsers|Usatores]] registrat",
"statistics-users-active": "Usatores activ",
"statistics-users-active-desc": "Usatores qui have efectuat un action in li ultim {{PLURAL:$1|die|dies}}",
- "statistics-mostpopular": "Págines max visitat",
"brokenredirects-edit": "redacter",
"brokenredirects-delete": "deleter",
"withoutinterwiki": "Págines sin catenunes de lingue",
@@ -674,7 +669,6 @@
"suppress": "Perspective comun",
"booksources": "Librari fontes",
"booksources-search-legend": "Serchar por fontes de libre",
- "booksources-go": "Ear",
"specialloguserlabel": "Executor:",
"speciallogtitlelabel": "Cible (titul o usator):",
"log": "Diariumes",
@@ -710,7 +704,7 @@
"wlheader-enotif": "Li notification de e-mail es permisset.",
"wlheader-showupdated": "Págines quel hat esset mutat desde tui ultim visitation es monstrat in '''nigri'''",
"wlnote": "Infra {{PLURAL:$1|es li ultim change|es li ultim '''$1''' changes}} in li ultim {{PLURAL:$2|hor|'''$2''' hores}}.",
- "wlshowlast": "Monstra ultim $1 hores $2 dies $3",
+ "wlshowlast": "Monstra ultim $1 hores $2 dies",
"watchlist-options": "Optiones de liste de págines vigilat",
"watching": "Vigilant...",
"unwatching": "Desvigilant...",
@@ -916,7 +910,6 @@
"metadata": "Metadata",
"metadata-help": "Ti file contene information additional, probabilmen adjuntet de li cámera digitale o scandetor usat por crear o digitalizar it. Si li file ha esset redactet de tui statu original, alcun detallies posse ne reflecter completmen li file redactet.",
"metadata-fields": "Campes metadata de figura listat in ti missage va esser includet in págine de figura monstra quande li tabelle metadata es crulat.\nAltri va esser ocultat per contumacie.\n* fabrication\n* modelle\n* origine de figura\n* témpor de exposition\n* númere\n* percentages de velocitá\n* longore focal\n* artist\n* jure editorial\n* descrition de figura\n* latitúdine\n* longitúdine\n* altitudine",
- "watchlistall2": "omni",
"namespacesall": "omni",
"monthsall": "omni",
"imgmultigo": "Ear!",
@@ -958,7 +951,7 @@
"version-parser-function-hooks": "Croces de functiones analisatores",
"version-hook-name": "Nómine de croc",
"version-hook-subscribedby": "Subscrit per",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-svn-revision": "(r$2)",
"version-license": "Licentie",
"version-software": "Software installat",
diff --git a/languages/i18n/ig.json b/languages/i18n/ig.json
index e976fac0..9b4dfcc3 100644
--- a/languages/i18n/ig.json
+++ b/languages/i18n/ig.json
@@ -343,7 +343,6 @@
"passwordreset": "Nkuwaria okwúngáfè",
"passwordreset-emailelement": "Áhà Ọ'banife: $1\nPasswod nke gi gbanwe: $2",
"changeemail-none": "(efù)",
- "changeemail-cancel": "Kàchá",
"bold_sample": "Mkpúrù èdè íke",
"bold_tip": "Mkpúrù èdè íke",
"italic_sample": "Mkpurụ okwu sélénsé",
@@ -472,7 +471,6 @@
"mergehistory-comment": "Tìkọtàrà [[:$1]] ga na ímé [[:$2]]: $3",
"mergehistory-reason": "Mgbághapụtà:",
"mergelog": "Tìkȯtá ndétu-nchèta",
- "pagemerge-logentry": "tìkọtàrà [[$1]] ga na ímé [[$2]] (orübà rúrú $3)",
"revertmerge": "Emẹkotala",
"history-title": "Ákíkó mbu màkà orü nọr na élú \"$1\"",
"lineno": "Ahiri $1:",
@@ -715,12 +713,10 @@
"statistics": "Olìlé ọtụ ihe dị",
"statistics-header-pages": "Ọmúmú-nà-ńlé ihü",
"statistics-header-edits": "Rüwá ọmúmú-nà-ńlé",
- "statistics-header-views": "Lé ọmúmú-nà-ńlé",
"statistics-header-users": "Ọmúmú-nà-ńlé nke ọ'bànifé",
"statistics-articles": "Ihü ihe dị",
"statistics-pages": "Ihü",
"statistics-files": "Usòrò hé tinyèrè",
- "statistics-views-total": "Há hụrụ ya olé níle",
"statistics-users-active": "Ọ'bànifé di galagala",
"double-redirect-fixed-move": "[[$1]] a puziele.\nUbwa, o na ga [[$2]].",
"brokenredirects": "Nkúfù gbàjịrị",
@@ -736,7 +732,6 @@
"nrevisions": "{{PLURAL:$1|orübà|orübà}} $1",
"nviews": "{{PLURAL:$1|he lèrè nke|he lèrè nke}} $1",
"lonelypages": "Ihü nke ogbènyè",
- "popularpages": "Ihü ne wú",
"wantedpages": "Ihü há chọrọ",
"prefixindex": "Ihü nílé jírí mkpụrụ édémédé nke mbu",
"shortpages": "Ihü mkpümkpü",
@@ -756,7 +751,6 @@
"suppress": "Aghọ",
"booksources": "Ébé ákwúkwó shị",
"booksources-search-legend": "Tuó íshí akwúkwó shì",
- "booksources-go": "Gá",
"specialloguserlabel": "Ọ'bànifé:",
"speciallogtitlelabel": "Ishi:",
"log": "Ndetu-nchétá",
@@ -804,7 +798,7 @@
"unwatch": "A hükwàlà",
"notanarticle": "Búghị ihü ihe nọr",
"watchlist-details": "{{PLURAL:$1|ihü $1|ihü $1}} nọr na ndétu ihe Í ne lé, nke à gúgị ihü okwu.",
- "wlshowlast": "Zi nke mbu àmànị $1 chi $2 $3",
+ "wlshowlast": "Zi nke mbu àmànị $1 chi $2",
"watchlist-options": "Nrọta ndetu nlènlé",
"watching": "O na hü...",
"unwatching": "O mele ka o na á hü kwagi...",
@@ -825,7 +819,6 @@
"deletecomment": "Màkà:",
"deleteotherreason": "Màkà ihe ozor kwa:",
"deletereasonotherlist": "Mgbághàpụtá ozor",
- "rollback_short": "Fifié àzú",
"rollbacklink": "fifié àzú",
"rollbackfailed": "Fifié na àzú dàrà",
"protectlogpage": "Ntínyé nke ncẹdolu",
@@ -979,7 +972,6 @@
"filemissing": "Usòrò è fwuólé",
"import": "Gọbàtá ihü",
"importinterwiki": "Ngọbàtá Transwiki",
- "import-interwiki-source": "Mkpòlógwù wiki/ihü:",
"import-interwiki-templates": "Bàtụcha átụ́ nile",
"import-interwiki-submit": "Dọwá bànyé",
"import-upload-filename": "Áhà usòrò:",
@@ -1145,7 +1137,6 @@
"exif-urgency-normal": "Nkịtị ($1)",
"exif-urgency-low": "Nàlà ($1)",
"exif-urgency-high": "Nélú ($1)",
- "watchlistall2": "nke níle",
"namespacesall": "nke níle",
"monthsall": "nke níle",
"recreate": "Ké ya ohúrù",
@@ -1181,7 +1172,7 @@
"version-hooks": "Nyazo",
"version-hook-name": "Áhà nyazo",
"version-hook-subscribedby": "Dọkpụrụ shì",
- "version-version": "(Ùdị $1)",
+ "version-version": "($1)",
"version-license": "Íwú Ǹkwé",
"version-poweredby-others": "nke ndi ozor",
"version-software-product": "Nfófụtá",
@@ -1224,8 +1215,9 @@
"htmlform-selectorother-other": "Nke ozor",
"revdelete-content-hid": "ihe zọ̀nàri",
"rightsnone": "(efù)",
- "feedback-message": "Ozi:",
+ "revdelete-summary": "mmẹkotá orü",
"feedback-close": "Ọméchá.",
+ "feedback-message": "Ozi:",
"searchsuggest-search": "Chọwa",
"expand_templates_ok": "Ngwanu"
}
diff --git a/languages/i18n/ike-cans.json b/languages/i18n/ike-cans.json
index ec438203..8383f2c9 100644
--- a/languages/i18n/ike-cans.json
+++ b/languages/i18n/ike-cans.json
@@ -1,278 +1,273 @@
{
- "@metadata": {
- "authors": []
- },
- "tog-rememberpassword": "ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "sunday": "ᓴᓇᑦᑕᐃᓕ",
- "monday": "ᓇᒡᒐᔭᖅ",
- "wednesday": "ᐱᖓᔪᐊ",
- "friday": "ᐸᒐᐃᑖᒃ",
- "sun": "ᓴᓇ",
- "mon": "ᓇᒡ",
- "tue": "ᐱᖃ",
- "wed": "ᐱᖓ",
- "thu": "ᕿᑎ",
- "fri": "ᐅᓪᓗ",
- "sat": "ᓯᕙᑕ",
- "january": "ᔭᓐᓄᐊᓕ",
- "february": "ᕕᐳᐊᕆ",
- "march": "ᒫᕐᓯ",
- "april": "ᐊᐃᐳᕆᓪ",
- "may_long": "ᒪᐃ",
- "june": "ᔪᓂ",
- "july": "ᔪᓚᐃ",
- "august": "ᐊᐅᒍᔅ",
- "september": "ᓯᑎᒻᐳᕆ",
- "october": "ᐅᒃᑐᐳᕆ",
- "november": "ᓄᕕᒻᐳᕆ",
- "december": "ᑎᓯᒻᐳᕆ",
- "january-gen": "ᔭᓐᓄᐊᓕ",
- "february-gen": "ᕕᐳᐊᕆ",
- "march-gen": "ᒫᕐᓯ",
- "april-gen": "ᐊᐃᐳᕆᓪ",
- "may-gen": "ᒪᐃ",
- "june-gen": "ᔪᓂ",
- "july-gen": "ᔪᓚᐃ",
- "august-gen": "ᐊᐅᒍᔅ",
- "september-gen": "ᓯᑎᒻᐳᕆ",
- "october-gen": "ᐅᒃᑐᐳᕆ",
- "november-gen": "ᓄᕕᒻᐳᕆ",
- "december-gen": "ᑎᓯᒻᐳᕆ",
- "jan": "ᔭᓐᓄ",
- "feb": "ᕕᐳᐊ",
- "mar": "ᓇᑦᓯ",
- "apr": "ᐊᐃᐳ",
- "may": "ᒪᐃ",
- "jun": "ᔪᓂ",
- "jul": "ᔪᓚᐃ",
- "aug": "ᐊᐅᒍ",
- "sep": "ᓯᑎᒻ",
- "oct": "ᐅᒃᑐ",
- "nov": "ᓄᕕ",
- "dec": "ᑎᓯᒻ",
- "about": "ᒥᒃᓵᓂ",
- "article": "ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ",
- "newwindow": "(ᐅᐃᑦᑐᖅ ᖃᕋᓴᐅᔭᖅ ᐃᑭᐊᖅ ᐱᒋᕗᖅ ᐃᒐᓛᖅ)",
- "cancel": "ᐃᓂᖅᑎᐹ",
- "moredotdotdot": "ᐱᓪᓗᐊᕆᕚ...",
- "mypage": "ᐊᒥ ᒪᑉᐱᑕᖅ",
- "mytalk": "ᐊᓪᓚᖁᑎᒃᑲ",
- "navigation": "ᒥᐊᓂᕆᕚ",
- "and": "&#32;ᐊᒻᒪ",
- "qbedit": "ᓱᖁᓯᖅᐹ",
- "errorpagetitle": "ᑕᒻᒪᓇᖅᑐᖅ",
- "help": "ᖃᔭᓕᑉᐹ",
- "search": "ᐃᕚᖅᐳᖅ",
- "searchbutton": "ᐃᕚᖅᐳᖅ",
- "go": "ᐊᐃᕗᖅ",
- "searcharticle": "ᐊᐃᕗᖅ",
- "history_short": "ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ",
- "edit": "ᓱᖁᓯᖅᐹ",
- "editthispage": "ᓱᖁᓯᖅᐹ ᒪᑉᐱᑕᖅ",
- "delete": "ᓂᐸᖅᑎᐹ",
- "protect": "ᓴᐳᒻᒥᕚ",
- "unprotect": "ᐃᖅ ᓴᐳᒻᒥᕚ",
- "unprotectthispage": "ᐃᖅ ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ",
- "newpage": "ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ",
- "talkpagelinktext": "ᐅᖃᓕᒪᔪᖅ",
- "specialpage": "ᐱᔨ ᒪᑉᐱᑕᖅ",
- "articlepage": "ᐅᕝᕙ ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ",
- "talk": "ᐅᖃᓕᒪᔪᖅ",
- "toolbox": "ᓴᓇᕐᖁᑎᖃᐅᑎ",
- "otherlanguages": "ᑭᓪᓗᒧᑦ ᐅᐃᑭ",
- "redirectedfrom": "(ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ $1)",
- "redirectpagesub": "ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ ᒪᑉᐱᑕᖅ",
- "jumptonavigation": "ᒥᐊᓂᕆᕚ",
- "jumptosearch": "ᐃᕚᖅᐳᖅ",
- "aboutsite": "ᒥᒃᓵᓂ {{SITENAME}}",
- "aboutpage": "Project:ᒥᒃᓵᓂ",
- "currentevents": "ᐱᒋᕗᖅ ᐱᐅᓯᖅ",
- "currentevents-url": "Project:ᐱᒋᕗᖅ ᐱᐅᓯᖅ",
- "edithelp": "ᓱᖁᓯᖅᐹ ᐃᑯᕐᕆᐹ",
- "mainpage": "ᐊᒥᖅ",
- "mainpage-description": "ᐊᒥᖅ",
- "portal": "ᖃᒡᒋᖅ",
- "portal-url": "Project:ᖃᒡᒋᖅ",
- "privacy": "ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ",
- "privacypage": "Project:ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ",
- "youhavenewmessages": "ᐃᓕᔅᓯ ᐱᒋᕚ $1 ($2).",
- "editsection": "ᓱᖁᓯᖅᐹ ᐃᓚ",
- "editold": "ᓱᖁᓯᖅᐹ",
- "editsectionhint": "ᓱᖁᓯᖅᐹ ᐃᓚᖏᐅᑎᑎᑦᓯᒍᑎ: $1",
- "showtoc": "ᐊᓚᒃᑲᑎᖅᐹ",
- "hidetoc": "ᐃᔨᖅᐳᖅ",
- "site-rss-feed": "$1 ᕐᔅᔅ ᒥᐊᓂᕆᕚ",
- "site-atom-feed": "$1 ᐊᑐᒻ ᒥᐊᓂᕆᕚ",
- "page-rss-feed": "\"$1\" ᕐᔅᔅ ᒥᐊᓂᕆᕚ",
- "page-atom-feed": "\"$1\" ᐊᑐᒻ ᒥᐊᓂᕆᕚ",
- "nstab-main": "ᒪᑉᐱᑕᖅ",
- "nstab-user": "ᐃᓄᒃ ᒪᑉᐱᑕᖅ",
- "nstab-special": "ᐱᔨ",
- "nstab-project": "ᐱᓕᕆᐊᒃᓴᐃᑦ ᐱᕙᓪᓕᐊᔾᔪᑎᒃᓴᓄᑦ ᒪᑉᐱᑕᖅ",
- "nstab-image": "ᐊᒋᐅᑦ",
- "nstab-mediawiki": "ᑭᒡᒐᐹ",
- "nstab-template": "ᒥᐊᓂᕆᕚ-ᕿᔪᖁᑦ",
- "nstab-category": "ᓄᐊᑉᐳᑦ",
- "badtitle": "ᐊᔪᖅᑐᖅ ᐊᑎᖅ",
- "editinginterface": "'''ᐃᓂᖅᑎᕈᑎ—''' ᐋᕼᐊ ᓱᖁᓯᖅᐹ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐄᔭᑦᓴᖅ ᖃᕋᓴᐅᔭᖅ ᑕᖅᓴᓕᖅᐹ ᐃᑭᐊᖅ ᐊᕿᑦᑐᖅ ᖃᕆᑕᐅᔭᐅᑉ ᑎᑎᕋᕐᕕᖓ. ᐊᓯᐊᙳᑐᖅ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐃᓄᒃᑎᑐᑦ ᐅᐃᑭᐱᑎᐊ ᐊᓪᓚᖑᖅᑐᐊᖅ ᓇᑭᒪᖅᐳᖅ ᖃᑕᙳᑎ.",
- "yourname": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ",
- "yourpassword": "ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ",
- "yourpasswordagain": "ᑕᒪᑐᒪᓃᖅᐹ ᐃᒃᓯᒐᖅᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ",
- "remembermypassword": "ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "ᐊᑯᓐᓇᐳᖅ",
- "loginprompt": "ᐱᒋᐊᓕᒃ ᐃᒪᑐᐊᖅ ᖃᕆᑕᐅᔭᖅ ᖂᑮᔅ(Cookies) ᐱᕐᖄᑎ ᐊᑯᓐᓇᐳᖅ ᐅᐃᑭᐱᑎᐊ.",
- "userlogin": "ᐊᑯᓐᓇᐳᖅ / ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ",
- "logout": "ᐊᓂᕝᕕᒃ",
- "userlogout": "ᐊᓂᕝᕕᒃ",
- "nologin": "ᐊᔪᐃᓐᓈᖅ ᐃᓄᖁᑎ? '''$1'''.",
- "nologinlink": "ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ",
- "gotaccountlink": "ᐊᑯᓐᓇᐳᖅ",
- "mailmypassword": "ᕿᓪᓗᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
- "bold_sample": "ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ",
- "bold_tip": "ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ",
- "summary": "ᓱᕕᑦ:",
- "minoredit": "ᐅᑭᐅᑭᓗᐊᖅᑐᖅ ᐊᓯᐊᙳᑐᖅ",
- "watchthis": "ᐅᕝᕙ",
- "savearticle": "ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ",
- "preview": "ᐅᕝᕙ ᖃᖓᓵᖑᓕᖅᑐᖅ",
- "showpreview": "ᓱᖁᓯᖅᐹ ᐊᓚᒃᑲᐅᑎᕗᖅ ᓯᕗᓕᐅᖅᐹ ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ",
- "showdiff": "ᐊᓚᒃᑲᑎᑉᐹ ᐊᓯᐊᙳᑐᖅ",
- "summary-preview": "ᓱᕕᑦ:",
- "blockedtitle": "ᐋᖅᑭᒃᓱᐃᔨ ᐅᒥᙵᓯᓯᔪᖅ",
- "loginreqlink": "ᐊᑯᓐᓇᐳᖅ",
- "newarticle": "(ᐱᒋᕗᖅ)",
- "editing": "ᐊᓯᐊᙳᑐᖅ $1",
- "editingsection": "ᓱᖁᓯᖅᐹ ᐃᓚ $1 (ᖏᐅᑎᑎᑦᓯᒍᑎ)",
- "editingcomment": "ᓱᖁᓯᖅᐹ $1 (ᐅᔾᔨᕆᔭᖅ)",
- "editconflict": "ᓱᖁᓯᖅᐹ ᐊᑲᐅᙱᓕᐅᕈᑎᓂᖅ: $1",
- "currentrev": "ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
- "previousrevision": "←ᐅᑐᖃᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
- "nextrevision": "ᐱᓪᓗᐊᕆᕚ ᐱᒋᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ→",
- "currentrevisionlink": "ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
- "next": "ᑕᒡᒐ",
- "last": "ᐊᓐᓂᑐᔪᖅ",
- "history-feed-title": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ",
- "history-feed-description": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ ᐃᑭᐊᖅ ᐅᐃᑭ",
- "history-title": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ \"$1\"",
- "lineno": "ᑐᑭᖅᓯᖅ $1:",
- "editundo": "ᐃᐱᐅᑦᔮᐹ",
- "nextn": "ᑕᒡᒐ {{PLURAL:$1|$1}}",
- "mypreferences": "ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ",
- "prefs-rc": "ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ",
- "searchresultshead": "ᐃᕚᖅᐳᖅ",
- "youremail": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ:",
- "username": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:",
- "yourrealname": "ᐃᓄᓪᓚᕆᒃ ᐊᑎᖅ:",
- "email": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
- "prefs-help-email": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ (ᐱᒃᑲᓪᓚᕗᖅ) — ᖃᑯᒍ ᓇᓗᓇᙱᓚᖅ ᐃᓕᔅᓯ ᐱᔪᖕᓇᖅᑐᖅ ᐱᒋᕚ ᑲᙳᓇᖅᑐᖅ ᐋᔩᖃᑎᒋᖏᖅ",
- "editinguser": "ᓱᖁᓯᖅᐹ ᖃᑕᙳᑎ '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
- "recentchanges": "ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ",
- "hide": "ᐃᔨᖅᐳᖅ",
- "show": "ᐊᓚᒃᑲᑎᖅᐹ",
- "minoreditletter": "ᐅ",
- "newpageletter": "ᐱ",
- "boteditletter": "ᑉ",
- "recentchangeslinked": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
- "recentchangeslinked-feed": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
- "recentchangeslinked-toolbox": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
- "upload": "ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ",
- "uploadbtn": "ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ",
- "filedesc": "ᐱᓕᕆᐊᒃᓴᑦ ᐱᕕᒡᔪᐊᖑᓂᖏᑦ",
- "fileuploadsummary": "ᓱᕕᑦ:",
- "watchthisupload": "ᐅᕝᕙ",
- "file-anchor-link": "ᐊᒋᐅᑦ",
- "listredirects": "ᓂᐱ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
- "randompage": "ᓇᑭᑐᐃᓐᓇᖅ ᖃᐅᔨᓴᕐᓂᖅ ᒪᑉᐱᑕᖅ",
- "randomredirect": "ᓇᑭᑐᐃᓐᓇᖅ ᖃᐅᔨᓴᕐᓂᖅ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
- "statistics": "ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ",
- "statistics-header-users": "ᖃᑕᙳᑎ ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ",
- "doubleredirects": "ᑕᐱᕐᖃᓕᒃ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
- "brokenredirects": "ᓇᐱᕚ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
- "brokenredirects-edit": "ᓱᖁᓯᖅᐹ",
- "brokenredirects-delete": "ᓂᐸᖅᑎᐹ",
- "listusers": "ᖃᑕᙳᑎ ᓂᐱ",
- "newpages-username": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:",
- "ancientpages": "ᒪᑉᐱᑕᖅ ᐃᑦᑐᓴᖅ ᐅᑐᖃᖅ",
- "move": "ᐅᐊᔪᖅ",
- "booksources-go": "ᐊᐃᕗᖅ",
- "allpages": "ᓱᓇᒥᑦᑐᖅ ᒪᑉᐱᑕᖅ",
- "nextpage": "ᑕᒡᒐ ᒪᑉᐱᑕᖅ ($1)",
- "allpagessubmit": "ᐊᐃᕗᖅ",
- "categories": "ᓄᐊᑉᐳᑦ",
- "emailuser": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ ᐃᓄᒃ",
- "emailfrom": "ᓇᑭᑦ",
- "emailmessage": "ᑭᒡᒐᐹ",
- "emailsend": "ᕿᐅᑦᓴᕕᒋᕚ",
- "watchlist": "ᐅᕝᕙ ᒪᑉᐱᑕᖅ",
- "mywatchlist": "ᓂᐱ ᐊᒥ",
- "watch": "ᐅᕝᕙ",
- "watchthispage": "ᐅᕝᕙ",
- "unwatch": "ᐃᖅ ᐅᕝᕙ",
- "enotif_impersonal_salutation": "{{SITENAME}} ᖃᑕᙳᑎ",
- "created": "ᒪᑉᐱᑕᖅ ᐊᓂᕗᖅ",
- "dellogpage": "ᓂᐸᖅ ᓂᐱ",
- "deletionlog": "ᓂᐸᖅ ᓂᐱ",
- "prot_1movedto2": "[[$1]] ᓱᕐᕋᒪᔪᖅ [[$2]]",
- "protect-legend": "ᐸᑎᒻᒥᕚ ᓴᐳᒻᒥᕚ",
- "protect-level-sysop": "ᓯᕐᓚᒃ ᑎᑎᕋᖅᓯᒪᔪᓂᒃ ᑐᖅᑯᖅᑎᕆᔨ",
- "restriction-move": "ᐅᐊᔪᖅ",
- "undelete-search-submit": "ᐃᕚᖅᐳᖅ",
- "blanknamespace": "(ᐊᒥᖅ)",
- "mycontris": "ᑕᓕᐊᖅ",
- "sp-contributions-talk": "ᐅᖃᓕᒪᔪᖅ",
- "sp-contributions-submit": "ᐃᕚᖅᐳᖅ",
- "whatlinkshere": "ᐅᖅᓯᖅ ᒪᐅᖓ",
- "isredirect": "ᑕᐱᑕᕇᒃ ᐅᖅᓯᖅ ᒪᑉᐱᑕᖅ",
- "blockip": "ᐃᖅ ᐋᖅᑭᒃᓱᐃᔨ",
- "badipaddress": "ᐃᓪᓕᑐᖅ ᖃᕆᓴᐅᔭᒃᑯᑦ ᑎᑎᕋᖅᓯᒪᔪᑦ ᒪᓕᒐᑎᒍᑦ ᐊᖏᕈᑕᐅᓯᒪᔪᖅ ᐅᓂᒃᑳᕆᔭᖃᕐᓂᖅ",
- "blockipsuccesssub": "ᐅᒥᙵᓯᓯᔪᖅ ᓈᔪᖅ",
- "ipblocklist-submit": "ᐃᕚᖅᐳᖅ",
- "anononlyblock": "ᓯᕐᓚᒃ ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ",
- "blocklink": "ᐃᖅ",
- "contribslink": "ᖃᑕᙳᑎ ᓱᖁᓯᖅᐹ",
- "blocklogpage": "ᐅᒥᙵᓯᓯᔪᖅ/ᐃᖅ ᑎᑎᖅᑲᖁᑎᑦ ᑐᖅᑯᖅᓯᒪᔭᐃᑦ",
- "block-log-flags-anononly": "ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ ᐋᖅᑭᒃᓱᐃᔨ ᑭᓯᐊᓂ",
- "block-log-flags-nocreate": "ᑮᓇᐅᔭᖃᕐᕕᒃ ᐃᓄᐃᕈᑎᕚ ᐃᓂᖅᑎᐹ ᐱᒋᕗᖅ",
- "block-log-flags-noemail": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
- "move-page-legend": "ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ",
- "movearticle": "ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ",
- "movelogpage": "ᐅᐊᔪᖅ ᓂᐱ",
- "movereason": "ᐃᓱᒪᒃᓴᖅᓯᐅᕈᓐᓇᑦᑎᐊᕐᓂᖅ:",
- "delete_and_move": "ᓂᐸᖅᑎᐹ ᐊᒻᒪ ᐅᐊᔪᖅ",
- "allmessagesname": "ᐊᑎᖅ",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}}",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}} ᐃᑭᐊᖅ $2",
- "tooltip-pt-mytalk": "ᐊᓪᓚᖁᑎᒃᑲ",
- "tooltip-pt-preferences": "ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ",
- "tooltip-pt-logout": "ᐊᓂᕝᕕᒃ",
- "tooltip-ca-protect": "ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ",
- "tooltip-search": "ᐃᕚᖅᐳᖅ {{SITENAME}}",
- "tooltip-minoredit": "ᑐᐊᐸᖅ ᐊᓯᐊᙳᑐᖅ",
- "tooltip-diff": "ᓱᕐᕋᐹ ᖃᑕᙳᑎ",
- "tooltip-compareselectedversions": "ᐅᕝᕙ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ ᐊᑯᓐᓂᖓᓐᓂ ᒪᕐᕉᒃ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
- "anonymous": "ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ ᖃᑕᙳᑎ ᓇᑭᑦ {{SITENAME}}",
- "deletedrevision": "ᓂᐸᖅ ᐅᑐᖃᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ $1",
- "previousdiff": "← ᑐᓄᓪᓕᐹᖅ ᐊᓯᐊᙳᑐᖅ",
- "nextdiff": "ᑕᒡᒐ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ →",
- "ilsubmit": "ᐃᕚᖅᐳᖅ",
- "bydate": "ᐱᑖᕈᑦᑐᖅ ᐃᓅᓕᕐᕕᒃ",
- "variantname-ike-cans": "ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ",
- "variantname-ike-latn": "ilisautik",
- "variantname-iu": "disable",
- "exif-imagelength": "ᖁᑦᓯᖕᓂᖅ",
- "exif-imagedescription": "ᐃᓄᙳᐊᖅ ᐊᑎᖅ",
- "exif-colorspace": "ᒥᖑᐊᕈᑎᒥᑎᖅᐹ",
- "exif-datetimeoriginal": "ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᐃᓱᐃᓪᓕᖓᐃᑦᔭᐹ",
- "exif-datetimedigitized": "ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᖃᕋᓴᐅᔭᖅ",
- "exif-exposuretime-format": "$1 ᐊᐃᑉᐸᖅ ($2)",
- "exif-brightnessvalue": "ᖃᐅᒻᒪᐹ ᐊᒃᑭᐅᑕᖅ",
- "monthsall": "ᓱᓇᒥᑦᑐᖅ",
- "confirm_purge_button": "ᐊᑲᐅᔪᖅ",
- "imgmultipageprev": "← ᑐᓄᓪᓕᐹᖅ ᒪᑉᐱᑕᖅ",
- "imgmultipagenext": "ᑕᒡᒐ ᒪᑉᐱᑕᖅ →",
- "imgmultigo": "ᐊᐃᕗᖅ!",
- "table_pager_limit_submit": "ᐊᐃᕗᖅ",
- "autoredircomment": "ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ [[$1]]",
- "autosumm-new": "ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ: $1",
- "specialpages": "ᐱᔨ ᒪᑉᐱᑕᖅ"
+ "@metadata": [],
+ "sunday": "ᓴᓇᑦᑕᐃᓕ",
+ "monday": "ᓇᒡᒐᔭᖅ",
+ "wednesday": "ᐱᖓᔪᐊ",
+ "friday": "ᐸᒐᐃᑖᒃ",
+ "sun": "ᓴᓇ",
+ "mon": "ᓇᒡ",
+ "tue": "ᐱᖃ",
+ "wed": "ᐱᖓ",
+ "thu": "ᕿᑎ",
+ "fri": "ᐅᓪᓗ",
+ "sat": "ᓯᕙᑕ",
+ "january": "ᔭᓐᓄᐊᓕ",
+ "february": "ᕕᐳᐊᕆ",
+ "march": "ᒫᕐᓯ",
+ "april": "ᐊᐃᐳᕆᓪ",
+ "may_long": "ᒪᐃ",
+ "june": "ᔪᓂ",
+ "july": "ᔪᓚᐃ",
+ "august": "ᐊᐅᒍᔅ",
+ "september": "ᓯᑎᒻᐳᕆ",
+ "october": "ᐅᒃᑐᐳᕆ",
+ "november": "ᓄᕕᒻᐳᕆ",
+ "december": "ᑎᓯᒻᐳᕆ",
+ "january-gen": "ᔭᓐᓄᐊᓕ",
+ "february-gen": "ᕕᐳᐊᕆ",
+ "march-gen": "ᒫᕐᓯ",
+ "april-gen": "ᐊᐃᐳᕆᓪ",
+ "may-gen": "ᒪᐃ",
+ "june-gen": "ᔪᓂ",
+ "july-gen": "ᔪᓚᐃ",
+ "august-gen": "ᐊᐅᒍᔅ",
+ "september-gen": "ᓯᑎᒻᐳᕆ",
+ "october-gen": "ᐅᒃᑐᐳᕆ",
+ "november-gen": "ᓄᕕᒻᐳᕆ",
+ "december-gen": "ᑎᓯᒻᐳᕆ",
+ "jan": "ᔭᓐᓄ",
+ "feb": "ᕕᐳᐊ",
+ "mar": "ᓇᑦᓯ",
+ "apr": "ᐊᐃᐳ",
+ "may": "ᒪᐃ",
+ "jun": "ᔪᓂ",
+ "jul": "ᔪᓚᐃ",
+ "aug": "ᐊᐅᒍ",
+ "sep": "ᓯᑎᒻ",
+ "oct": "ᐅᒃᑐ",
+ "nov": "ᓄᕕ",
+ "dec": "ᑎᓯᒻ",
+ "about": "ᒥᒃᓵᓂ",
+ "article": "ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ",
+ "newwindow": "(ᐅᐃᑦᑐᖅ ᖃᕋᓴᐅᔭᖅ ᐃᑭᐊᖅ ᐱᒋᕗᖅ ᐃᒐᓛᖅ)",
+ "cancel": "ᐃᓂᖅᑎᐹ",
+ "moredotdotdot": "ᐱᓪᓗᐊᕆᕚ...",
+ "mypage": "ᐊᒥ ᒪᑉᐱᑕᖅ",
+ "mytalk": "ᐊᓪᓚᖁᑎᒃᑲ",
+ "navigation": "ᒥᐊᓂᕆᕚ",
+ "and": "&#32;ᐊᒻᒪ",
+ "qbedit": "ᓱᖁᓯᖅᐹ",
+ "errorpagetitle": "ᑕᒻᒪᓇᖅᑐᖅ",
+ "help": "ᖃᔭᓕᑉᐹ",
+ "search": "ᐃᕚᖅᐳᖅ",
+ "searchbutton": "ᐃᕚᖅᐳᖅ",
+ "go": "ᐊᐃᕗᖅ",
+ "searcharticle": "ᐊᐃᕗᖅ",
+ "history_short": "ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ",
+ "edit": "ᓱᖁᓯᖅᐹ",
+ "editthispage": "ᓱᖁᓯᖅᐹ ᒪᑉᐱᑕᖅ",
+ "delete": "ᓂᐸᖅᑎᐹ",
+ "protect": "ᓴᐳᒻᒥᕚ",
+ "unprotect": "ᐃᖅ ᓴᐳᒻᒥᕚ",
+ "unprotectthispage": "ᐃᖅ ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ",
+ "newpage": "ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ",
+ "talkpagelinktext": "ᐅᖃᓕᒪᔪᖅ",
+ "specialpage": "ᐱᔨ ᒪᑉᐱᑕᖅ",
+ "articlepage": "ᐅᕝᕙ ᐃᓗᓕᒃ ᒪᑉᐱᑕᖅ",
+ "talk": "ᐅᖃᓕᒪᔪᖅ",
+ "toolbox": "ᓴᓇᕐᖁᑎᖃᐅᑎ",
+ "otherlanguages": "ᑭᓪᓗᒧᑦ ᐅᐃᑭ",
+ "redirectedfrom": "(ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ $1)",
+ "redirectpagesub": "ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ ᒪᑉᐱᑕᖅ",
+ "jumptonavigation": "ᒥᐊᓂᕆᕚ",
+ "jumptosearch": "ᐃᕚᖅᐳᖅ",
+ "aboutsite": "ᒥᒃᓵᓂ {{SITENAME}}",
+ "aboutpage": "Project:ᒥᒃᓵᓂ",
+ "currentevents": "ᐱᒋᕗᖅ ᐱᐅᓯᖅ",
+ "currentevents-url": "Project:ᐱᒋᕗᖅ ᐱᐅᓯᖅ",
+ "edithelp": "ᓱᖁᓯᖅᐹ ᐃᑯᕐᕆᐹ",
+ "mainpage": "ᐊᒥᖅ",
+ "mainpage-description": "ᐊᒥᖅ",
+ "portal": "ᖃᒡᒋᖅ",
+ "portal-url": "Project:ᖃᒡᒋᖅ",
+ "privacy": "ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ",
+ "privacypage": "Project:ᓇᒻᒥᓂᖅ ᐱᓕᕆᕝᕕᖃᐅᖅᑐᓄᑦ ᐊᐅᓚᑕᐅᔪᑦ ᐊᑐᐊᒐᖅ, ᐱᓇᓱᐊᕐᓂᖅ",
+ "youhavenewmessages": "ᐃᓕᔅᓯ ᐱᒋᕚ $1 ($2).",
+ "editsection": "ᓱᖁᓯᖅᐹ ᐃᓚ",
+ "editold": "ᓱᖁᓯᖅᐹ",
+ "editsectionhint": "ᓱᖁᓯᖅᐹ ᐃᓚᖏᐅᑎᑎᑦᓯᒍᑎ: $1",
+ "showtoc": "ᐊᓚᒃᑲᑎᖅᐹ",
+ "hidetoc": "ᐃᔨᖅᐳᖅ",
+ "site-rss-feed": "$1 ᕐᔅᔅ ᒥᐊᓂᕆᕚ",
+ "site-atom-feed": "$1 ᐊᑐᒻ ᒥᐊᓂᕆᕚ",
+ "page-rss-feed": "\"$1\" ᕐᔅᔅ ᒥᐊᓂᕆᕚ",
+ "page-atom-feed": "\"$1\" ᐊᑐᒻ ᒥᐊᓂᕆᕚ",
+ "nstab-main": "ᒪᑉᐱᑕᖅ",
+ "nstab-user": "ᐃᓄᒃ ᒪᑉᐱᑕᖅ",
+ "nstab-special": "ᐱᔨ",
+ "nstab-project": "ᐱᓕᕆᐊᒃᓴᐃᑦ ᐱᕙᓪᓕᐊᔾᔪᑎᒃᓴᓄᑦ ᒪᑉᐱᑕᖅ",
+ "nstab-image": "ᐊᒋᐅᑦ",
+ "nstab-mediawiki": "ᑭᒡᒐᐹ",
+ "nstab-template": "ᒥᐊᓂᕆᕚ-ᕿᔪᖁᑦ",
+ "nstab-category": "ᓄᐊᑉᐳᑦ",
+ "badtitle": "ᐊᔪᖅᑐᖅ ᐊᑎᖅ",
+ "editinginterface": "'''ᐃᓂᖅᑎᕈᑎ—''' ᐋᕼᐊ ᓱᖁᓯᖅᐹ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐄᔭᑦᓴᖅ ᖃᕋᓴᐅᔭᖅ ᑕᖅᓴᓕᖅᐹ ᐃᑭᐊᖅ ᐊᕿᑦᑐᖅ ᖃᕆᑕᐅᔭᐅᑉ ᑎᑎᕋᕐᕕᖓ. ᐊᓯᐊᙳᑐᖅ ᐃᑭᐊᖅ ᒪᑉᐱᑕᖅ ᐃᓄᒃᑎᑐᑦ ᐅᐃᑭᐱᑎᐊ ᐊᓪᓚᖑᖅᑐᐊᖅ ᓇᑭᒪᖅᐳᖅ ᖃᑕᙳᑎ.",
+ "yourname": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ",
+ "yourpassword": "ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ",
+ "yourpasswordagain": "ᑕᒪᑐᒪᓃᖅᐹ ᐃᒃᓯᒐᖅᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ",
+ "remembermypassword": "ᐃᖅᑑ ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ ᖃᑯᒍᖅ ᐊᑐᐃᓐᓇᓯᕗᖅ ᐅᕙᓗᒪᔪᖅ ᖃᕆᑕᐅᔭᖅ (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "ᐊᑯᓐᓇᐳᖅ",
+ "userlogin": "ᐊᑯᓐᓇᐳᖅ / ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ",
+ "logout": "ᐊᓂᕝᕕᒃ",
+ "userlogout": "ᐊᓂᕝᕕᒃ",
+ "nologin": "ᐊᔪᐃᓐᓈᖅ ᐃᓄᖁᑎ? '''$1'''.",
+ "nologinlink": "ᐱᕐᖄᐹ ᑮᓇᐅᔭᒃᑯᕕᖕᒥ ᑐᖅᑯᖅᓯᕕᒃ",
+ "gotaccountlink": "ᐊᑯᓐᓇᐳᖅ",
+ "mailmypassword": "ᕿᓪᓗᑐᖅ ᐅᐃᑭᐱᑎᐊ ᐸᓚᙵᓴᐅᑎ ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
+ "bold_sample": "ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ",
+ "bold_tip": "ᐃᔾᔪᔪᒡ ᑕᖅᓴᓕᖅᐹ",
+ "summary": "ᓱᕕᑦ:",
+ "minoredit": "ᐅᑭᐅᑭᓗᐊᖅᑐᖅ ᐊᓯᐊᙳᑐᖅ",
+ "watchthis": "ᐅᕝᕙ",
+ "savearticle": "ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ",
+ "preview": "ᐅᕝᕙ ᖃᖓᓵᖑᓕᖅᑐᖅ",
+ "showpreview": "ᓱᖁᓯᖅᐹ ᐊᓚᒃᑲᐅᑎᕗᖅ ᓯᕗᓕᐅᖅᐹ ᐅᖃᐅᓯᓪᓚᕆᖏᑕ ᑎᑎᕋᖅᑕᐅᓂᖏᑦ",
+ "showdiff": "ᐊᓚᒃᑲᑎᑉᐹ ᐊᓯᐊᙳᑐᖅ",
+ "summary-preview": "ᓱᕕᑦ:",
+ "blockedtitle": "ᐋᖅᑭᒃᓱᐃᔨ ᐅᒥᙵᓯᓯᔪᖅ",
+ "loginreqlink": "ᐊᑯᓐᓇᐳᖅ",
+ "newarticle": "(ᐱᒋᕗᖅ)",
+ "editing": "ᐊᓯᐊᙳᑐᖅ $1",
+ "editingsection": "ᓱᖁᓯᖅᐹ ᐃᓚ $1 (ᖏᐅᑎᑎᑦᓯᒍᑎ)",
+ "editingcomment": "ᓱᖁᓯᖅᐹ $1 (ᐅᔾᔨᕆᔭᖅ)",
+ "editconflict": "ᓱᖁᓯᖅᐹ ᐊᑲᐅᙱᓕᐅᕈᑎᓂᖅ: $1",
+ "currentrev": "ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
+ "previousrevision": "←ᐅᑐᖃᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
+ "nextrevision": "ᐱᓪᓗᐊᕆᕚ ᐱᒋᕗᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ→",
+ "currentrevisionlink": "ᒫᓐᓇ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
+ "next": "ᑕᒡᒐ",
+ "last": "ᐊᓐᓂᑐᔪᖅ",
+ "history-feed-title": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ",
+ "history-feed-description": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ ᐃᑭᐊᖅ ᐅᐃᑭ",
+ "history-title": "ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ ᒪᑉᐱᑕᖅ ᑭᖑᓂᑦᑎᓐᓂ \"$1\"",
+ "lineno": "ᑐᑭᖅᓯᖅ $1:",
+ "editundo": "ᐃᐱᐅᑦᔮᐹ",
+ "nextn": "ᑕᒡᒐ {{PLURAL:$1|$1}}",
+ "mypreferences": "ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ",
+ "prefs-rc": "ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ",
+ "searchresultshead": "ᐃᕚᖅᐳᖅ",
+ "youremail": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ:",
+ "username": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:",
+ "yourrealname": "ᐃᓄᓪᓚᕆᒃ ᐊᑎᖅ:",
+ "email": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
+ "prefs-help-email": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ (ᐱᒃᑲᓪᓚᕗᖅ) — ᖃᑯᒍ ᓇᓗᓇᙱᓚᖅ ᐃᓕᔅᓯ ᐱᔪᖕᓇᖅᑐᖅ ᐱᒋᕚ ᑲᙳᓇᖅᑐᖅ ᐋᔩᖃᑎᒋᖏᖅ",
+ "editinguser": "ᓱᖁᓯᖅᐹ ᖃᑕᙳᑎ '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+ "recentchanges": "ᐱᒋᕗᖅ ᐊᓯᐊᙳᑐᖅ",
+ "hide": "ᐃᔨᖅᐳᖅ",
+ "show": "ᐊᓚᒃᑲᑎᖅᐹ",
+ "minoreditletter": "ᐅ",
+ "newpageletter": "ᐱ",
+ "boteditletter": "ᑉ",
+ "recentchangeslinked": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
+ "recentchangeslinked-feed": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
+ "recentchangeslinked-toolbox": "ᐊᓯᐊᙳᑐᖅ ᒥᑦᓵᓯᔪᖅ",
+ "upload": "ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ",
+ "uploadbtn": "ᒪᑉᐱᐹ ᓇᓗᓇᐃᔭᐅᑎᑦ",
+ "filedesc": "ᐱᓕᕆᐊᒃᓴᑦ ᐱᕕᒡᔪᐊᖑᓂᖏᑦ",
+ "fileuploadsummary": "ᓱᕕᑦ:",
+ "watchthisupload": "ᐅᕝᕙ",
+ "file-anchor-link": "ᐊᒋᐅᑦ",
+ "listredirects": "ᓂᐱ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
+ "randompage": "ᓇᑭᑐᐃᓐᓇᖅ ᖃᐅᔨᓴᕐᓂᖅ ᒪᑉᐱᑕᖅ",
+ "randomredirect": "ᓇᑭᑐᐃᓐᓇᖅ ᖃᐅᔨᓴᕐᓂᖅ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
+ "statistics": "ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ",
+ "statistics-header-users": "ᖃᑕᙳᑎ ᑭᓯᑦᓯᓯᖕᖑᕐᓗᒋᑦ ᐹᓯᔅᓱᑎᔅᓴᑦ",
+ "doubleredirects": "ᑕᐱᕐᖃᓕᒃ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
+ "brokenredirects": "ᓇᐱᕚ ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ",
+ "brokenredirects-edit": "ᓱᖁᓯᖅᐹ",
+ "brokenredirects-delete": "ᓂᐸᖅᑎᐹ",
+ "listusers": "ᖃᑕᙳᑎ ᓂᐱ",
+ "newpages-username": "ᐅᐃᑭᐱᑎᐊ ᐊᑎᖅ:",
+ "ancientpages": "ᒪᑉᐱᑕᖅ ᐃᑦᑐᓴᖅ ᐅᑐᖃᖅ",
+ "move": "ᐅᐊᔪᖅ",
+ "allpages": "ᓱᓇᒥᑦᑐᖅ ᒪᑉᐱᑕᖅ",
+ "nextpage": "ᑕᒡᒐ ᒪᑉᐱᑕᖅ ($1)",
+ "allpagessubmit": "ᐊᐃᕗᖅ",
+ "categories": "ᓄᐊᑉᐳᑦ",
+ "emailuser": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ ᐃᓄᒃ",
+ "emailfrom": "ᓇᑭᑦ",
+ "emailmessage": "ᑭᒡᒐᐹ",
+ "emailsend": "ᕿᐅᑦᓴᕕᒋᕚ",
+ "watchlist": "ᐅᕝᕙ ᒪᑉᐱᑕᖅ",
+ "mywatchlist": "ᓂᐱ ᐊᒥ",
+ "watch": "ᐅᕝᕙ",
+ "watchthispage": "ᐅᕝᕙ",
+ "unwatch": "ᐃᖅ ᐅᕝᕙ",
+ "enotif_impersonal_salutation": "{{SITENAME}} ᖃᑕᙳᑎ",
+ "created": "ᒪᑉᐱᑕᖅ ᐊᓂᕗᖅ",
+ "dellogpage": "ᓂᐸᖅ ᓂᐱ",
+ "deletionlog": "ᓂᐸᖅ ᓂᐱ",
+ "prot_1movedto2": "[[$1]] ᓱᕐᕋᒪᔪᖅ [[$2]]",
+ "protect-legend": "ᐸᑎᒻᒥᕚ ᓴᐳᒻᒥᕚ",
+ "protect-level-sysop": "ᓯᕐᓚᒃ ᑎᑎᕋᖅᓯᒪᔪᓂᒃ ᑐᖅᑯᖅᑎᕆᔨ",
+ "restriction-move": "ᐅᐊᔪᖅ",
+ "undelete-search-submit": "ᐃᕚᖅᐳᖅ",
+ "blanknamespace": "(ᐊᒥᖅ)",
+ "mycontris": "ᑕᓕᐊᖅ",
+ "sp-contributions-talk": "ᐅᖃᓕᒪᔪᖅ",
+ "sp-contributions-submit": "ᐃᕚᖅᐳᖅ",
+ "whatlinkshere": "ᐅᖅᓯᖅ ᒪᐅᖓ",
+ "isredirect": "ᑕᐱᑕᕇᒃ ᐅᖅᓯᖅ ᒪᑉᐱᑕᖅ",
+ "blockip": "ᐃᖅ ᐋᖅᑭᒃᓱᐃᔨ",
+ "badipaddress": "ᐃᓪᓕᑐᖅ ᖃᕆᓴᐅᔭᒃᑯᑦ ᑎᑎᕋᖅᓯᒪᔪᑦ ᒪᓕᒐᑎᒍᑦ ᐊᖏᕈᑕᐅᓯᒪᔪᖅ ᐅᓂᒃᑳᕆᔭᖃᕐᓂᖅ",
+ "blockipsuccesssub": "ᐅᒥᙵᓯᓯᔪᖅ ᓈᔪᖅ",
+ "ipblocklist-submit": "ᐃᕚᖅᐳᖅ",
+ "anononlyblock": "ᓯᕐᓚᒃ ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ",
+ "blocklink": "ᐃᖅ",
+ "contribslink": "ᖃᑕᙳᑎ ᓱᖁᓯᖅᐹ",
+ "blocklogpage": "ᐅᒥᙵᓯᓯᔪᖅ/ᐃᖅ ᑎᑎᖅᑲᖁᑎᑦ ᑐᖅᑯᖅᓯᒪᔭᐃᑦ",
+ "block-log-flags-anononly": "ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ ᐋᖅᑭᒃᓱᐃᔨ ᑭᓯᐊᓂ",
+ "block-log-flags-nocreate": "ᑮᓇᐅᔭᖃᕐᕕᒃ ᐃᓄᐃᕈᑎᕚ ᐃᓂᖅᑎᐹ ᐱᒋᕗᖅ",
+ "block-log-flags-noemail": "ᑭᒍᑎᐅᑉ ᓯᑎᓂᖅᐹᖓ",
+ "move-page-legend": "ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ",
+ "movearticle": "ᐅᐊᔪᖅ ᒪᑉᐱᑕᖅ",
+ "movelogpage": "ᐅᐊᔪᖅ ᓂᐱ",
+ "movereason": "ᐃᓱᒪᒃᓴᖅᓯᐅᕈᓐᓇᑦᑎᐊᕐᓂᖅ:",
+ "delete_and_move": "ᓂᐸᖅᑎᐹ ᐊᒻᒪ ᐅᐊᔪᖅ",
+ "allmessagesname": "ᐊᑎᖅ",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}}",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ|ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ}} ᐃᑭᐊᖅ $2",
+ "tooltip-pt-mytalk": "ᐊᓪᓚᖁᑎᒃᑲ",
+ "tooltip-pt-preferences": "ᐊᒥ ᐱᒃᑯᒪᓂᖅᐹᖅ",
+ "tooltip-pt-logout": "ᐊᓂᕝᕕᒃ",
+ "tooltip-ca-protect": "ᓴᐳᒻᒥᕚ ᒪᑉᐱᑕᖅ",
+ "tooltip-search": "ᐃᕚᖅᐳᖅ {{SITENAME}}",
+ "tooltip-minoredit": "ᑐᐊᐸᖅ ᐊᓯᐊᙳᑐᖅ",
+ "tooltip-diff": "ᓱᕐᕋᐹ ᖃᑕᙳᑎ",
+ "tooltip-compareselectedversions": "ᐅᕝᕙ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ ᐊᑯᓐᓂᖓᓐᓂ ᒪᕐᕉᒃ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ",
+ "anonymous": "ᐃᓕᓴᕐᓇᙱᑎᑦᑐᖅ ᖃᑕᙳᑎ ᓇᑭᑦ {{SITENAME}}",
+ "deletedrevision": "ᓂᐸᖅ ᐅᑐᖃᖅ ᑎᑎᕋᖅᑕᐅᒋᐊᕐᖓᕈᑦ $1",
+ "previousdiff": "← ᑐᓄᓪᓕᐹᖅ ᐊᓯᐊᙳᑐᖅ",
+ "nextdiff": "ᑕᒡᒐ ᐊᓯᐊᙳᑐᖅ ᒪᑉᐱᑕᖅ →",
+ "ilsubmit": "ᐃᕚᖅᐳᖅ",
+ "bydate": "ᐱᑖᕈᑦᑐᖅ ᐃᓅᓕᕐᕕᒃ",
+ "variantname-ike-cans": "ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ",
+ "variantname-ike-latn": "ilisautik",
+ "variantname-iu": "disable",
+ "exif-imagelength": "ᖁᑦᓯᖕᓂᖅ",
+ "exif-imagedescription": "ᐃᓄᙳᐊᖅ ᐊᑎᖅ",
+ "exif-colorspace": "ᒥᖑᐊᕈᑎᒥᑎᖅᐹ",
+ "exif-datetimeoriginal": "ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᐃᓱᐃᓪᓕᖓᐃᑦᔭᐹ",
+ "exif-datetimedigitized": "ᖃᑦᓯᐹ ᐊᒪᒻ ᑎᑭᐅᑎ ᓴᕐᕿᐹ ᖃᕋᓴᐅᔭᖅ",
+ "exif-exposuretime-format": "$1 ᐊᐃᑉᐸᖅ ($2)",
+ "exif-brightnessvalue": "ᖃᐅᒻᒪᐹ ᐊᒃᑭᐅᑕᖅ",
+ "monthsall": "ᓱᓇᒥᑦᑐᖅ",
+ "confirm_purge_button": "ᐊᑲᐅᔪᖅ",
+ "imgmultipageprev": "← ᑐᓄᓪᓕᐹᖅ ᒪᑉᐱᑕᖅ",
+ "imgmultipagenext": "ᑕᒡᒐ ᒪᑉᐱᑕᖅ →",
+ "imgmultigo": "ᐊᐃᕗᖅ!",
+ "table_pager_limit_submit": "ᐊᐃᕗᖅ",
+ "autoredircomment": "ᖃᓂᖓᓂ ᑲᒪᒋᔭᖅ ᐋᓯᑦ ᓇᑭᑦ [[$1]]",
+ "autosumm-new": "ᐱᒋᕗᖅ ᒪᑉᐱᑕᖅ: $1",
+ "specialpages": "ᐱᔨ ᒪᑉᐱᑕᖅ"
}
diff --git a/languages/i18n/ike-latn.json b/languages/i18n/ike-latn.json
index 67bd863b..5ab35e21 100644
--- a/languages/i18n/ike-latn.json
+++ b/languages/i18n/ike-latn.json
@@ -1,247 +1,241 @@
{
- "@metadata": {
- "authors": []
- },
- "tog-rememberpassword": "Iqtuu uikipitia atiq qakugiq atuinnasivuq uvalumaq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "sunday": "sanattaili",
- "monday": "naggajaq",
- "wednesday": "pingajua",
- "friday": "pagaitaak",
- "sun": "sana",
- "mon": "nag",
- "wed": "pinga",
- "january": "januari",
- "february": "vipuari",
- "march": "maarsi",
- "april": "aipuril",
- "may_long": "mai",
- "june": "juni",
- "july": "julai",
- "august": "augus",
- "october": "uktupuri",
- "november": "nuvimpuri",
- "december": "tisimpuri",
- "january-gen": "januari",
- "february-gen": "vipuari",
- "march-gen": "maarsi",
- "april-gen": "aipuril",
- "may-gen": "mai",
- "june-gen": "juni",
- "july-gen": "julai",
- "august-gen": "augus",
- "october-gen": "uktupuri",
- "november-gen": "nuvimpuri",
- "december-gen": "tisimpuri",
- "apr": "aipu",
- "may": "mai",
- "aug": "augu",
- "nov": "nuvi",
- "about": "miksaani",
- "article": "ilulik mappitaq",
- "newwindow": "(uittuq qarasaujaq ikiaq pigivuq igalaaq)",
- "cancel": "iniqtipaa",
- "moredotdotdot": "pilluarivaa...",
- "mypage": "ami mappitaq",
- "mytalk": "atlarqutikka",
- "navigation": "mianirivaa",
- "and": "&#32;amma",
- "vector-view-edit": "Suqusiqpaa",
- "help": "qajalippaa",
- "search": "ivaaqpuq",
- "searchbutton": "ivaaqpuq",
- "go": "aivuq",
- "searcharticle": "aivuk",
- "history_short": "mappitaq kingunittinni",
- "edit": "Suqusiqpaa",
- "editthispage": "suqusiqpaa mappitaq",
- "delete": "nipaqtipaa",
- "protect": "sapummivaa",
- "unprotect": "iq sapummivaa",
- "unprotectthispage": "iq sapummivaa mappitaq",
- "newpage": "pigivuk mappitaq",
- "specialpage": "piji mappitaq",
- "articlepage": "ilulik mappitaq uvva",
- "talk": "uqalimajuq",
- "toolbox": "sanarqutiqauti",
- "otherlanguages": "killumut uiki",
- "redirectedfrom": "(qaningani kamagijaq aasit nakit $1)",
- "redirectpagesub": "aningani kamagijaq aasit nakit mappitaq",
- "jumptonavigation": "mianirivaa",
- "jumptosearch": "ivaaqpuq",
- "aboutsite": "miksaani {{SITENAME}}",
- "aboutpage": "Project:miksaani",
- "currentevents": "pigivuq piusiq",
- "currentevents-url": "Project:pigivuq piusiq",
- "edithelp": "ikurripaa suqusiqpaa",
- "mainpage": "amiq",
- "mainpage-description": "amiq",
- "portal": "qaggiq",
- "portal-url": "Project:qaggiq",
- "privacy": "namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq",
- "privacypage": "Project:namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq",
- "youhavenewmessages": "ilissu pigivaa $1 ($2).",
- "editsection": "suqusiqpaa",
- "editold": "suqusiqpaa",
- "editlink": "suqusiqpaa",
- "editsectionhint": "suqusiqpaa ilangiutititsiguti: $1",
- "site-rss-feed": "$1 rss mianirivaa",
- "site-atom-feed": "$1 atum mianirivaa",
- "page-rss-feed": "\"$1\" rss mianirivaa",
- "page-atom-feed": "\"$1\" atum mianirivaa",
- "nstab-main": "mappitaq",
- "nstab-user": "inuk mappitaq",
- "nstab-special": "piji",
- "nstab-project": "piliriaksait pivalliajjutiksanut miqitaq",
- "nstab-mediawiki": "kiggapaa",
- "nstab-template": "mianirivaa-qijuqut",
- "nstab-category": "nuapput",
- "badtitle": "ajuqtuq atiq",
- "editinginterface": "'''iniqtiruti—''' aaha suqusiqpaa iqiak mappitaq atuinnasivuq iijatsaq qarasaujaq taqsaliqpaa ikiaq aqittuq qaritaujaup titirarvinga. asiaNngutuq ikiaq mappitaq inuktitut uikipitia allanguqtuaq nakimaqpuq qatannguti.",
- "yourname": "uikipitia atiq",
- "yourpassword": "uikipitia palanngasauti",
- "yourpasswordagain": "tamatumaniiqpaa iksigaqtuq uikipitia palanngasauti",
- "remembermypassword": "iqtuu uikipitia atiq qakakuq atuinnasivuq uvalumajuq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "akunnapuq",
- "loginprompt": "pigialik imatuaq qaritaujaq quukiis (Cookies) pirqaati akunnapuq {{SITENAME}}.",
- "userlogin": "akunnapuq / pirqaapaa kiinaijakkuvingmi tuqkuqsivik",
- "logout": "anivvik",
- "userlogout": "anivvik",
- "nologin": "ajuinnaaq inuquti? '''$1'''.",
- "nologinlink": "pirqaapaa kiinaujakkuvingmi tuqkuqsivik",
- "mailmypassword": "qillutuq uikipitia palanngasauti kigutiup sitiniqpaanga",
- "bold_sample": "ijjujug taqsaliqpaa",
- "bold_tip": "ijjujug taqsaliqpaa",
- "summary": "suvit:",
- "minoredit": "ukiukiluaq asianngutuq",
- "watchthis": "uvva",
- "savearticle": "uqausillaringgita titiraqtauninggil",
- "preview": "uvva qangasaanguliqtuq",
- "showpreview": "surkuqpaa alakkautivuq sivuliqpaa uqaasillarigita titiraqtauningigit",
- "showdiff": "alakkatippaa asianngutuq",
- "summary-preview": "suvit preview:",
- "blockedtitle": "aaqqiksuiji uminngasisijuq",
- "loginreqlink": "akunnapuq",
- "newarticle": "(pigivuk)",
- "editingsection": "suqusiqpaa $1 (ilangiutititsiguti)",
- "editingcomment": "suqusiqpaa $1 (ujjirijaq)",
- "editconflict": "suqusiqpaa akaunngiliurutiniq: $1",
- "currentrev": "maanna titiraqtaugiarngarut",
- "previousrevision": "←utuqaq titiraqtaugiarngarut",
- "nextrevision": "pilluarivaa pigivuk revision titiraqtaugiarngarut→",
- "currentrevisionlink": "maanna titiraqtaugiarngarut",
- "next": "tagga",
- "history-feed-title": "titiraqtaugiarngarut mappitaq kingunittinni",
- "history-feed-description": "titiraqtaugiarngarut mappitaq kingunittinni ikiaq uiki",
- "history-title": "titiraqtaugiarngarut mappitaq kingunittinni \"$1\"",
- "lineno": "tukiqsiq $1:",
- "editundo": "ipiutjaapaa",
- "nextn": "tagga {{PLURAL:$1|$1}}",
- "mypreferences": "mi pikkumaniqpaaq",
- "prefs-rc": "pigivuq asianngutuq",
- "searchresultshead": "ivaaqpuq",
- "youremail": "kigutiup sitiniqpaanga:",
- "username": "uikipitia atiq:",
- "yourrealname": "inullarik atiq:",
- "email": "kigutiup sitiniqpaanga",
- "prefs-help-email": "kigutiup sitiniqpaanga (pikkallavuq) — qakugu nalunanngilaq ilissi pijungnaqtuq pigivaa kanngunaqtuq aajiiqatiginggiq",
- "editinguser": "suqusiqpaa qatannguti '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
- "recentchanges": "pigivuq asianngutuq",
- "recentchangeslinked": "asiaNngutuq mitsaasijuq",
- "recentchangeslinked-feed": "asiaNngutuq mitsaasijuq",
- "recentchangeslinked-toolbox": "asiaNngutuq mitsaasijuq",
- "upload": "mappipaa nalinaijatit",
- "uploadbtn": "mappipaa nalunaijautit",
- "filedesc": "piliriaksat pivigjuanguningit",
- "fileuploadsummary": "suvit:",
- "watchthisupload": "uvva",
- "listredirects": "nipi qaningani kamagijaq aasit nakit",
- "randompage": "nakituinnaq qaujisarniq mappitaq",
- "randomredirect": "nakituinnaq qaujisarniq qaningani kamagijaq aasit nakit",
- "statistics": "kisitsisillgurlugitpasissitissat",
- "statistics-header-users": "qatannguti kisitsisillgurlugitpasissitissat",
- "doubleredirects": "tapirqilik qaningani kamagijaq aasit nakit",
- "brokenredirects": "napivaa qaningani kamagijaq aasit nakit",
- "brokenredirects-edit": "suqusiqpaa",
- "brokenredirects-delete": "nipaqtipaa",
- "listusers": "qatannguti nipi",
- "newpages-username": "uikipitia atiq:",
- "ancientpages": "utuqaq ittusaq mappitaq",
- "move": "uajuq",
- "booksources-go": "aivuq",
- "allpages": "sunamittuq mappitaq",
- "nextpage": "tagga mappitaq ($1)",
- "allpagessubmit": "aivuk",
- "categories": "nuapput",
- "emailfrom": "nakit",
- "emailmessage": "kiggapaa",
- "emailsend": "qiutsavigivaa",
- "watchlist": "uvva mappitaq",
- "mywatchlist": "nipi ami",
- "watch": "uvva",
- "watchthispage": "uvva",
- "unwatch": "iq uvva",
- "enotif_impersonal_salutation": "{{SITENAME}} qatannguti",
- "created": "mappitaq anivuq",
- "dellogpage": "nipaq nipi",
- "deletionlog": "nipaq nipi",
- "prot_1movedto2": "[[$1]] surramajuq [[$2]]",
- "protect-legend": "patimmivaa sapummivaa",
- "protect-level-sysop": "sirlak titiraqsimajunik tuqquqtiriji",
- "restriction-edit": "Suqusiqpaa",
- "restriction-move": "uajuq",
- "undelete-search-submit": "ivaaqpuq",
- "blanknamespace": "(amiq)",
- "mycontris": "taliaq",
- "sp-contributions-submit": "ivaaqpuq",
- "whatlinkshere": "uqsiq maungu",
- "isredirect": "tapitariik uqsaq mappitaq",
- "blockip": "iq aaqqiksuiji",
- "badipaddress": "illituq qarisaujakkut titiraqsimajut maligatigut angirutausimajuq unikkaarijaqarniq",
- "blockipsuccesssub": "uminngasisijuq naajuq",
- "ipblocklist-submit": "ivaaqpuq",
- "anononlyblock": "sirlak ilisarnanngitittuq",
- "blocklink": "iq",
- "contribslink": "qatannguti suqusiqpaa",
- "blocklogpage": "uminngasisijuq/iq titiqqaqutit tuqquqsimajait",
- "block-log-flags-anononly": "ilisarnanngitittuq aaqqiksuiji kisiani",
- "block-log-flags-nocreate": "kiinaujaqarvik inuirutivaa iniqtipaa pigivuq",
- "block-log-flags-noemail": "kigutiup sitiniqpaanga uminngasisijuq",
- "move-page-legend": "uajuq mappitaq",
- "movearticle": "uajuq mappitaq",
- "movelogpage": "uajuq nipi",
- "delete_and_move": "nipaqtipaa amma uajuq",
- "allmessagesname": "atiq",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}}",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}} ikiaq $2",
- "tooltip-ca-protect": "sapummivaa mappitaq",
- "tooltip-search": "ivaaqpuq {{SITENAME}}",
- "tooltip-minoredit": "tuapaq asiaNngutuq",
- "tooltip-diff": "surrapaa qatannguti",
- "tooltip-compareselectedversions": "uvva asiaNngutuq mappitaq akunninganni marruuk titiraqtaugiarngarut",
- "anonymous": "ilisarnanngitittuq qatannguti nakit {{SITENAME}}",
- "deletedrevision": "nipaq utuqaq titiraqtaugiarngarut $1",
- "previousdiff": "← tunullipaaq asiaNngutuq",
- "nextdiff": "tagga asiaNngutuq mappitaq →",
- "ilsubmit": "ivaaqpuq",
- "bydate": "pitaaruttuq inuulirvik",
- "variantname-ike-cans": "ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ",
- "variantname-ike-latn": "ilisautik",
- "variantname-iu": "disable",
- "exif-imagelength": "qutsingniq",
- "exif-imagedescription": "inunnguaq atiq",
- "exif-colorspace": "minguarutimitiqpaa",
- "exif-datetimeoriginal": "qatsipaa amma tikiuti sarqipaa isuillingaitjapaa",
- "exif-datetimedigitized": "qatsipaa amma tikiuti sarqipaa qarasaujaq",
- "exif-exposuretime-format": "$1 aippaq ($2)",
- "exif-brightnessvalue": "qaummapaa akkiutaq",
- "monthsall": "sunamittuq",
- "confirm_purge_button": "akaujuq",
- "imgmultipageprev": "← tunullipaaq mappitaq",
- "imgmultipagenext": "tagga mappitaq →",
- "imgmultigo": "aivuq!",
- "table_pager_limit_submit": "aivuk",
- "autoredircomment": "qaningani kamagijaq aasit nakit [[$1]]",
- "autosumm-new": "pigivuq mappitaq: $1",
- "specialpages": "piji mappitaq",
- "tags-edit": "suqusiqpaa"
+ "@metadata": [],
+ "sunday": "sanattaili",
+ "monday": "naggajaq",
+ "wednesday": "pingajua",
+ "friday": "pagaitaak",
+ "sun": "sana",
+ "mon": "nag",
+ "wed": "pinga",
+ "january": "januari",
+ "february": "vipuari",
+ "march": "maarsi",
+ "april": "aipuril",
+ "may_long": "mai",
+ "june": "juni",
+ "july": "julai",
+ "august": "augus",
+ "october": "uktupuri",
+ "november": "nuvimpuri",
+ "december": "tisimpuri",
+ "january-gen": "januari",
+ "february-gen": "vipuari",
+ "march-gen": "maarsi",
+ "april-gen": "aipuril",
+ "may-gen": "mai",
+ "june-gen": "juni",
+ "july-gen": "julai",
+ "august-gen": "augus",
+ "october-gen": "uktupuri",
+ "november-gen": "nuvimpuri",
+ "december-gen": "tisimpuri",
+ "apr": "aipu",
+ "may": "mai",
+ "aug": "augu",
+ "nov": "nuvi",
+ "about": "miksaani",
+ "article": "ilulik mappitaq",
+ "newwindow": "(uittuq qarasaujaq ikiaq pigivuq igalaaq)",
+ "cancel": "iniqtipaa",
+ "moredotdotdot": "pilluarivaa...",
+ "mypage": "ami mappitaq",
+ "mytalk": "atlarqutikka",
+ "navigation": "mianirivaa",
+ "and": "&#32;amma",
+ "help": "qajalippaa",
+ "search": "ivaaqpuq",
+ "searchbutton": "ivaaqpuq",
+ "go": "aivuq",
+ "searcharticle": "aivuk",
+ "history_short": "mappitaq kingunittinni",
+ "edit": "Suqusiqpaa",
+ "editthispage": "suqusiqpaa mappitaq",
+ "delete": "nipaqtipaa",
+ "protect": "sapummivaa",
+ "unprotect": "iq sapummivaa",
+ "unprotectthispage": "iq sapummivaa mappitaq",
+ "newpage": "pigivuk mappitaq",
+ "specialpage": "piji mappitaq",
+ "articlepage": "ilulik mappitaq uvva",
+ "talk": "uqalimajuq",
+ "toolbox": "sanarqutiqauti",
+ "otherlanguages": "killumut uiki",
+ "redirectedfrom": "(qaningani kamagijaq aasit nakit $1)",
+ "redirectpagesub": "aningani kamagijaq aasit nakit mappitaq",
+ "jumptonavigation": "mianirivaa",
+ "jumptosearch": "ivaaqpuq",
+ "aboutsite": "miksaani {{SITENAME}}",
+ "aboutpage": "Project:miksaani",
+ "currentevents": "pigivuq piusiq",
+ "currentevents-url": "Project:pigivuq piusiq",
+ "edithelp": "ikurripaa suqusiqpaa",
+ "mainpage": "amiq",
+ "mainpage-description": "amiq",
+ "portal": "qaggiq",
+ "portal-url": "Project:qaggiq",
+ "privacy": "namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq",
+ "privacypage": "Project:namminiq pilirivviqauqtunut aulataujut atuagaq, pinasuarniq",
+ "youhavenewmessages": "ilissu pigivaa $1 ($2).",
+ "editsection": "suqusiqpaa",
+ "editold": "suqusiqpaa",
+ "editlink": "suqusiqpaa",
+ "editsectionhint": "suqusiqpaa ilangiutititsiguti: $1",
+ "site-rss-feed": "$1 rss mianirivaa",
+ "site-atom-feed": "$1 atum mianirivaa",
+ "page-rss-feed": "\"$1\" rss mianirivaa",
+ "page-atom-feed": "\"$1\" atum mianirivaa",
+ "nstab-main": "mappitaq",
+ "nstab-user": "inuk mappitaq",
+ "nstab-special": "piji",
+ "nstab-project": "piliriaksait pivalliajjutiksanut miqitaq",
+ "nstab-mediawiki": "kiggapaa",
+ "nstab-template": "mianirivaa-qijuqut",
+ "nstab-category": "nuapput",
+ "badtitle": "ajuqtuq atiq",
+ "editinginterface": "'''iniqtiruti—''' aaha suqusiqpaa iqiak mappitaq atuinnasivuq iijatsaq qarasaujaq taqsaliqpaa ikiaq aqittuq qaritaujaup titirarvinga. asiaNngutuq ikiaq mappitaq inuktitut uikipitia allanguqtuaq nakimaqpuq qatannguti.",
+ "yourname": "uikipitia atiq",
+ "yourpassword": "uikipitia palanngasauti",
+ "yourpasswordagain": "tamatumaniiqpaa iksigaqtuq uikipitia palanngasauti",
+ "remembermypassword": "iqtuu uikipitia atiq qakakuq atuinnasivuq uvalumajuq qaritaujaq (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "akunnapuq",
+ "userlogin": "akunnapuq / pirqaapaa kiinaijakkuvingmi tuqkuqsivik",
+ "logout": "anivvik",
+ "userlogout": "anivvik",
+ "nologin": "ajuinnaaq inuquti? '''$1'''.",
+ "nologinlink": "pirqaapaa kiinaujakkuvingmi tuqkuqsivik",
+ "mailmypassword": "qillutuq uikipitia palanngasauti kigutiup sitiniqpaanga",
+ "bold_sample": "ijjujug taqsaliqpaa",
+ "bold_tip": "ijjujug taqsaliqpaa",
+ "summary": "suvit:",
+ "minoredit": "ukiukiluaq asianngutuq",
+ "watchthis": "uvva",
+ "savearticle": "uqausillaringgita titiraqtauninggil",
+ "preview": "uvva qangasaanguliqtuq",
+ "showpreview": "surkuqpaa alakkautivuq sivuliqpaa uqaasillarigita titiraqtauningigit",
+ "showdiff": "alakkatippaa asianngutuq",
+ "summary-preview": "suvit preview:",
+ "blockedtitle": "aaqqiksuiji uminngasisijuq",
+ "loginreqlink": "akunnapuq",
+ "newarticle": "(pigivuk)",
+ "editingsection": "suqusiqpaa $1 (ilangiutititsiguti)",
+ "editingcomment": "suqusiqpaa $1 (ujjirijaq)",
+ "editconflict": "suqusiqpaa akaunngiliurutiniq: $1",
+ "currentrev": "maanna titiraqtaugiarngarut",
+ "previousrevision": "←utuqaq titiraqtaugiarngarut",
+ "nextrevision": "pilluarivaa pigivuk revision titiraqtaugiarngarut→",
+ "currentrevisionlink": "maanna titiraqtaugiarngarut",
+ "next": "tagga",
+ "history-feed-title": "titiraqtaugiarngarut mappitaq kingunittinni",
+ "history-feed-description": "titiraqtaugiarngarut mappitaq kingunittinni ikiaq uiki",
+ "history-title": "titiraqtaugiarngarut mappitaq kingunittinni \"$1\"",
+ "lineno": "tukiqsiq $1:",
+ "editundo": "ipiutjaapaa",
+ "nextn": "tagga {{PLURAL:$1|$1}}",
+ "mypreferences": "mi pikkumaniqpaaq",
+ "prefs-rc": "pigivuq asianngutuq",
+ "searchresultshead": "ivaaqpuq",
+ "youremail": "kigutiup sitiniqpaanga:",
+ "username": "uikipitia atiq:",
+ "yourrealname": "inullarik atiq:",
+ "email": "kigutiup sitiniqpaanga",
+ "prefs-help-email": "kigutiup sitiniqpaanga (pikkallavuq) — qakugu nalunanngilaq ilissi pijungnaqtuq pigivaa kanngunaqtuq aajiiqatiginggiq",
+ "editinguser": "suqusiqpaa qatannguti '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+ "recentchanges": "pigivuq asianngutuq",
+ "recentchangeslinked": "asiaNngutuq mitsaasijuq",
+ "recentchangeslinked-feed": "asiaNngutuq mitsaasijuq",
+ "recentchangeslinked-toolbox": "asiaNngutuq mitsaasijuq",
+ "upload": "mappipaa nalinaijatit",
+ "uploadbtn": "mappipaa nalunaijautit",
+ "filedesc": "piliriaksat pivigjuanguningit",
+ "fileuploadsummary": "suvit:",
+ "watchthisupload": "uvva",
+ "listredirects": "nipi qaningani kamagijaq aasit nakit",
+ "randompage": "nakituinnaq qaujisarniq mappitaq",
+ "randomredirect": "nakituinnaq qaujisarniq qaningani kamagijaq aasit nakit",
+ "statistics": "kisitsisillgurlugitpasissitissat",
+ "statistics-header-users": "qatannguti kisitsisillgurlugitpasissitissat",
+ "doubleredirects": "tapirqilik qaningani kamagijaq aasit nakit",
+ "brokenredirects": "napivaa qaningani kamagijaq aasit nakit",
+ "brokenredirects-edit": "suqusiqpaa",
+ "brokenredirects-delete": "nipaqtipaa",
+ "listusers": "qatannguti nipi",
+ "newpages-username": "uikipitia atiq:",
+ "ancientpages": "utuqaq ittusaq mappitaq",
+ "move": "uajuq",
+ "allpages": "sunamittuq mappitaq",
+ "nextpage": "tagga mappitaq ($1)",
+ "allpagessubmit": "aivuk",
+ "categories": "nuapput",
+ "emailfrom": "nakit",
+ "emailmessage": "kiggapaa",
+ "emailsend": "qiutsavigivaa",
+ "watchlist": "uvva mappitaq",
+ "mywatchlist": "nipi ami",
+ "watch": "uvva",
+ "watchthispage": "uvva",
+ "unwatch": "iq uvva",
+ "enotif_impersonal_salutation": "{{SITENAME}} qatannguti",
+ "created": "mappitaq anivuq",
+ "dellogpage": "nipaq nipi",
+ "deletionlog": "nipaq nipi",
+ "prot_1movedto2": "[[$1]] surramajuq [[$2]]",
+ "protect-legend": "patimmivaa sapummivaa",
+ "protect-level-sysop": "sirlak titiraqsimajunik tuqquqtiriji",
+ "restriction-edit": "Suqusiqpaa",
+ "restriction-move": "uajuq",
+ "undelete-search-submit": "ivaaqpuq",
+ "blanknamespace": "(amiq)",
+ "mycontris": "taliaq",
+ "sp-contributions-submit": "ivaaqpuq",
+ "whatlinkshere": "uqsiq maungu",
+ "isredirect": "tapitariik uqsaq mappitaq",
+ "blockip": "iq aaqqiksuiji",
+ "badipaddress": "illituq qarisaujakkut titiraqsimajut maligatigut angirutausimajuq unikkaarijaqarniq",
+ "blockipsuccesssub": "uminngasisijuq naajuq",
+ "ipblocklist-submit": "ivaaqpuq",
+ "anononlyblock": "sirlak ilisarnanngitittuq",
+ "blocklink": "iq",
+ "contribslink": "qatannguti suqusiqpaa",
+ "blocklogpage": "uminngasisijuq/iq titiqqaqutit tuqquqsimajait",
+ "block-log-flags-anononly": "ilisarnanngitittuq aaqqiksuiji kisiani",
+ "block-log-flags-nocreate": "kiinaujaqarvik inuirutivaa iniqtipaa pigivuq",
+ "block-log-flags-noemail": "kigutiup sitiniqpaanga uminngasisijuq",
+ "move-page-legend": "uajuq mappitaq",
+ "movearticle": "uajuq mappitaq",
+ "movelogpage": "uajuq nipi",
+ "delete_and_move": "nipaqtipaa amma uajuq",
+ "allmessagesname": "atiq",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}}",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|titiraqtaugiarngarut|titiraqtaugiarngarut}} ikiaq $2",
+ "tooltip-ca-protect": "sapummivaa mappitaq",
+ "tooltip-search": "ivaaqpuq {{SITENAME}}",
+ "tooltip-minoredit": "tuapaq asiaNngutuq",
+ "tooltip-diff": "surrapaa qatannguti",
+ "tooltip-compareselectedversions": "uvva asiaNngutuq mappitaq akunninganni marruuk titiraqtaugiarngarut",
+ "anonymous": "ilisarnanngitittuq qatannguti nakit {{SITENAME}}",
+ "deletedrevision": "nipaq utuqaq titiraqtaugiarngarut $1",
+ "previousdiff": "← tunullipaaq asiaNngutuq",
+ "nextdiff": "tagga asiaNngutuq mappitaq →",
+ "ilsubmit": "ivaaqpuq",
+ "bydate": "pitaaruttuq inuulirvik",
+ "variantname-ike-cans": "ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ",
+ "variantname-ike-latn": "ilisautik",
+ "variantname-iu": "disable",
+ "exif-imagelength": "qutsingniq",
+ "exif-imagedescription": "inunnguaq atiq",
+ "exif-colorspace": "minguarutimitiqpaa",
+ "exif-datetimeoriginal": "qatsipaa amma tikiuti sarqipaa isuillingaitjapaa",
+ "exif-datetimedigitized": "qatsipaa amma tikiuti sarqipaa qarasaujaq",
+ "exif-exposuretime-format": "$1 aippaq ($2)",
+ "exif-brightnessvalue": "qaummapaa akkiutaq",
+ "monthsall": "sunamittuq",
+ "confirm_purge_button": "akaujuq",
+ "imgmultipageprev": "← tunullipaaq mappitaq",
+ "imgmultipagenext": "tagga mappitaq →",
+ "imgmultigo": "aivuq!",
+ "table_pager_limit_submit": "aivuk",
+ "autoredircomment": "qaningani kamagijaq aasit nakit [[$1]]",
+ "autosumm-new": "pigivuq mappitaq: $1",
+ "specialpages": "piji mappitaq",
+ "tags-edit": "suqusiqpaa"
}
diff --git a/languages/i18n/ilo.json b/languages/i18n/ilo.json
index 360cf5cd..5fc0be21 100644
--- a/languages/i18n/ilo.json
+++ b/languages/i18n/ilo.json
@@ -7,35 +7,37 @@
"Saluyot",
"Urhixidur",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Pinag-ugisan ti silpo:",
- "tog-hideminor": "Ilemmeng dagiti bassit a inurnos iti kaudian a balbaliw",
- "tog-hidepatrolled": "Ilemmeng dagiti napatruliaan nga inurnos iti kaudian a balbaliw",
+ "tog-hideminor": "Ilemmeng dagiti bassit nga inurnos manipud ti kaudian a balbaliw",
+ "tog-hidepatrolled": "Ilemmeng dagiti napatruliaan nga inurnos manipud ti kaudian a balbaliw",
"tog-newpageshidepatrolled": "Ilemmeng dagiti napatruliaan a panid manipud ti baro a listaan ti panid",
"tog-extendwatchlist": "Ipalawa ti listaan ti bambantayan tapno maipakita amin a nasukatan, saan laeng a ti kabiitan",
"tog-usenewrc": "Dagiti grupo a panagbaliw babaen ti panid ti kaudian a balbaliw ken listaan ti bambantayan",
"tog-numberheadings": "Automatiko a pabilangan dagiti paulo",
- "tog-showtoolbar": "Ipakita ti baras ti ramit ti panag-urnos",
+ "tog-showtoolbar": "Ipakita ti baras ti ramit ti panagurnos",
"tog-editondblclick": "Urnosen dagiti panid iti mamindua a panagpindut",
- "tog-editsectiononrightclick": "Pakabaelan ti panag-urnos iti paset babaen ti panagpindut iti kanawan kadagiti titulo ti paset",
+ "tog-editsectiononrightclick": "Pakabaelan ti panagurnos iti paset babaen ti panagpindut iti kanawan kadagiti titulo ti paset",
"tog-watchcreations": "Agnayon kadagiti panid a pinartuatko ken papeles nga inkargak iti listaan ti bambantayak",
"tog-watchdefault": "Agnayon kadagiti panid ken papeles nga inurnosko iti listaan ti bambantayak",
"tog-watchmoves": "Agnayon kadagiti panid ken papeles nga inyalisko iti listaan ti bambantayak",
"tog-watchdeletion": "Agnayon kadagiti panid ken papeles nga inikkatko iti listaan ti bambantayak",
+ "tog-watchrollback": "Agnayon kadagiti panid nga adda inramidko nga insubli iti bambantayak",
"tog-minordefault": "Markaan amin dagiti inurnos a kas bassit babaen ti kasisigud",
"tog-previewontop": "Ipakita ti panagipadas sakbay ti pagurnosan a kahon",
- "tog-previewonfirst": "Ipakita ti pinadas iti umuna a panag-urnos",
+ "tog-previewonfirst": "Ipakita ti pinadas iti umuna a panagurnos",
"tog-enotifwatchlistpages": "Esuratannak no mabaliwan ti panid wenno papeles iti listaan dagiti bambantayak",
"tog-enotifusertalkpages": "Esuratannak no mabaliwan ti panid ti tungtungak",
- "tog-enotifminoredits": "Esuratannak pay para kadagiti bassit a panag-urnos kadagiti panid ken papeles",
+ "tog-enotifminoredits": "Esuratannak pay para kadagiti bassit a panagurnos kadagiti panid ken papeles",
"tog-enotifrevealaddr": "Iparang ti pagtaengan ti esuratko iti panagipakaaammo kadagiti esurat",
"tog-shownumberswatching": "Ipakita ti bilang dagiti agbuybuya nga agar-aramat",
"tog-oldsig": "Ti adda a pirma:",
"tog-fancysig": "Tratuen ti pirma a kas wikitext (nga awan ti automatiko a silpo)",
"tog-uselivepreview": "Usaren ti agdama a panagipadas (eksperimental)",
- "tog-forceeditsummary": "Pakaammuannak no sumrek iti blanko a pakabuklan ti panag-urnos",
+ "tog-forceeditsummary": "Pakaammuannak no sumrek iti blanko a pakabuklan ti panagurnos",
"tog-watchlisthideown": "Ilemmeng dagiti inurnosko manipud ti listaan ti bambantayan",
"tog-watchlisthidebots": "Ilemmeng dagiti inurnos ti bot manipud ti listaan ti bambantayan",
"tog-watchlisthideminor": "Ilemmeng dagiti bassit nga inurnos manipud ti listaan ti bambantayan",
@@ -155,7 +157,7 @@
"faqpage": "Project:MAS",
"actions": "Dagiti aramid",
"namespaces": "Dagiti nagan ti espasio",
- "variants": "Sab-sabali a pagsasao",
+ "variants": "Sabsabali a pagsasao",
"navigation-heading": "Listaan ti pagdaliasatan",
"errorpagetitle": "Biddut",
"returnto": "Agsubli idiay $1.",
@@ -172,11 +174,11 @@
"permalink": "Agnanayon a silpo",
"print": "Imaldit",
"view": "Kitaen",
- "view-foreign": "Kitaen idiay $1",
+ "view-foreign": "Kitaen iti $1",
"edit": "Urnosen",
"edit-local": "Urnosen ti lokal a deskripsion",
"create": "Agpartuat",
- "create-local": "Agnayon ti lokal a deskripsion",
+ "create-local": "Agnayon iti lokal a deskripsion",
"editthispage": "Urnosen daytoy a panid",
"create-this-page": "Partuaten daytoy a panid",
"delete": "Ikkaten",
@@ -193,7 +195,7 @@
"talkpage": "Pagtungtungan daytoy a panid",
"talkpagelinktext": "Tungtungan",
"specialpage": "Espesial a panid",
- "personaltools": "Bukod a ram-ramit",
+ "personaltools": "Bukod a ramramit",
"articlepage": "Kitaen ti naglaon a panid",
"talk": "Pagtungtungan",
"views": "Dagiti pangkitaan",
@@ -209,6 +211,7 @@
"otherlanguages": "Kadagiti sabali a pagsasao",
"redirectedfrom": "(Naibaw-ing manipud iti $1)",
"redirectpagesub": "Baw-ing a panid",
+ "redirectto": "Naibaw-ing iti:",
"lastmodifiedat": "Daytoy a panid ket naudi a nabaliwan idi $1, $2.",
"viewcount": "Naserrekanen daytoy a panid {{PLURAL:$1|iti naminsan|kadagiti $1 a beses}}.",
"protectedpage": "Nasalakniban a panid",
@@ -229,7 +232,7 @@
"currentevents-url": "Project:Agdama a paspasamak",
"disclaimers": "Dagiti renunsia",
"disclaimerpage": "Project:Sapasap a renunsia",
- "edithelp": "Tulong ti panag-urnos",
+ "edithelp": "Tulong ti panagurnos",
"mainpage": "Umuna a Panid",
"mainpage-description": "Umuna a Panid",
"policy-url": "Project:Annuroten",
@@ -261,6 +264,9 @@
"hidetoc": "ilemmeng",
"collapsible-collapse": "Rebbaen",
"collapsible-expand": "Palawaen",
+ "confirmable-confirm": "Siguradoka kadi ?",
+ "confirmable-yes": "Wen",
+ "confirmable-no": "Saan",
"thisisdeleted": "Kitaen wenno ipulang $1?",
"viewdeleted": "Kitaen $1?",
"restorelink": "{{PLURAL:$1|ti maysa a naikkat a naurnos|dagiti $1 a naikkat a naurnos}}",
@@ -309,6 +315,8 @@
"filerenameerror": "Saan a managanan manen ti papeles \"$1\" iti \"$2\".",
"filedeleteerror": "Saan a maikkat ti papeles \"$1\".",
"directorycreateerror": "Saan a mapartuat ti direktorio \"$1\".",
+ "directoryreadonlyerror": "Ti direktorio ti \"$1\" ket mabasa laeng.",
+ "directorynotreadableerror": "Ti direktorio ti \"$1\" ket saan a mabasa.",
"filenotfound": "Saan a mabirukan ti papeles \"$1\".",
"unexpected": "Di nanamnama a pateg: \"$1\"=\"$2\".",
"formerror": "Biddut: saan a maited ti porma.",
@@ -326,11 +334,12 @@
"viewsource-title": "Kitaen ti taudan para iti $1",
"actionthrottled": "Napabuntog ti aramid",
"actionthrottledtext": "Para iti pagkontra ti spam, naipatinggaka nga agramid iti daytoy a tignay iti adu unay a beses iti nasiket nga oras, ken nalabsamon daytoy a patingga.\nPangngaasi nga ipadasmo manen no madamdama.",
- "protectedpagetext": "Nasalakniban daytoy a panid tapno mapawilan ti panag-urnos wenno dagiti dadduma pay a tignay.",
+ "protectedpagetext": "Nasalakniban daytoy a panid tapno mapawilan ti panagurnos wenno dagiti dadduma pay a tignay.",
"viewsourcetext": "Mabalinmo a kitaen ken tuladen ti taudan daytoy a panid:",
"viewyourtext": "Mabalinmo a makita ken tuladen ti taudan dagiti <strong>inurnosmo</strong> iti daytoy panid:",
- "protectedinterface": "Daytoy a panid ket mangited ti testo ti interface para iti sopwer iti daytoy a wiki, ken nasalakniban tapno mapawilan ti panag-abuso.\nTi aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki, pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki.",
- "editinginterface": "<strong>Ballaag:</strong> Ur-urnosem ti maysa a panid a maar-aramat a mangted iti testo ti interface para iti sopwer.\nDagiti panagsukat iti daytoy a panid ket maarigan ti langa ti interface ti agar-aramat para kadagiti sabali nga agar-aramat iti daytoy a wiki.\nTi aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki, pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki.",
+ "protectedinterface": "Daytoy a panid ket mangited iti testo ti interface para iti sopwer iti daytoy a wiki, ken nasalakniban tapno mapawilan ti panag-abuso.\nTi aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki, pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki.",
+ "editinginterface": "<strong>Ballaag:</strong> Ur-urnosem ti maysa a panid a maar-aramat a mangted iti testo ti interface para iti sopwer.\nDagiti panagsukat iti daytoy a panid ket maarigan ti langa ti interface ti agar-aramat para kadagiti sabali nga agar-aramat iti daytoy a wiki.",
+ "translateinterface": "Ti aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki, pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki.",
"cascadeprotected": "Daytoy a panid ket nasalaknibanen para iti panag-urnos ngamin ket nairaman kadagiti sumaganad {{PLURAL:$1|a panid, a|a pampanid, a}} nasalakniban iti nalukatan a pagpilian ti \"sariap\":\n$2",
"namespaceprotected": "Awan ti pammalubosmo nga agurnos kadagiti panid iti nagan ti espasio ti <strong>$1</strong>.",
"customcssprotected": "Awan ti pammalubosmo nga agurnos iti daytoy panid ti CSS, ngamin ket naglaon ti personal a pannakaisaad iti sabali agar-aramat.",
@@ -341,11 +350,11 @@
"mypreferencesprotected": "Awan pammalubosmo nga agurnos kadagiti kakaykayatam.",
"ns-specialprotected": "Saan a mabalin nga urnosen dagiti espesial a panid.",
"titleprotected": "Daytoy a titulo ket nasalakniban manipud ti pannakapartuat babaen ni [[User:$1|$1]].\nTi naited a rason ket \"<em>$2</em>\".",
- "filereadonlyerror": "Di nabaliwan ti papeles ti \"$1\" gapu ket ti repositorio ti papeles ti \"$2\" ket mabasa laeng a moda.\n\nTi administrador a nangserra ket nangited iti daytoy a panagilawlawag \"''$3''\".",
+ "filereadonlyerror": "Di nabaliwan ti papeles ti \"$1\" gapu ket ti repositorio ti papeles ti \"$2\" ket mabasa laeng a moda.\n\nTi administrador a nangserra ket nangited iti daytoy a panagilawlawag: \"$3\".",
"invalidtitle-knownnamespace": "Imbalido a titulo iti nagan ti espasio \"$2\" ken testo \"$3\"",
"invalidtitle-unknownnamespace": "Imbalido a titulo iti di ammo a nagan ti espasio a bilang $1 ken testo \"$2\"",
"exception-nologin": "Saan a nakastrek",
- "exception-nologin-text": "Pangngaasi a [[Special:Userlogin|sumrek]] tapno maserrekam daytoy a panid wenno tignay.",
+ "exception-nologin-text": "Pangngaasi a sumrek tapno maserrekam daytoy a panid wenno tignay.",
"exception-nologin-text-manual": "Pangngaasi a $1 tapno maserrekan daytoy a panid wenno tignay.",
"virus-badscanner": "Madi ti konpigurasion: Di ammo a panagsukimat ti birus: <em>$1</em>",
"virus-scanfailed": "napaay ti panagsukimat (kodigo $1)",
@@ -369,10 +378,10 @@
"userlogin-signwithsecure": "Usaren ti natalged a koneksion",
"yourdomainname": "Ti bukodmo a dominio:",
"password-change-forbidden": "Saanmo a mabaliwan dagiti kontrasenias iti daytoy a wiki.",
- "externaldberror": "Mabalin nga adda biddut iti pannakapasingked ti database wenno saanka a mapalubosan a mangpabaro ti akin-ruar a pakabilangam.",
+ "externaldberror": "Mabalin nga adda biddut iti pannakapasingked ti database wenno saanka a mapalubosan a mangpabaro ti akinruar a pakabilangam.",
"login": "Sumrek",
- "nav-login-createaccount": "Sumrek / agpartuat ti pakabilangan",
- "userlogin": "Sumrek / agpartuat ti pakabilangan",
+ "nav-login-createaccount": "Sumrek / agpartuat iti pakabilangan",
+ "userlogin": "Sumrek / agpartuat iti pakabilangan",
"userloginnocreate": "Sumrek",
"logout": "Rummuar",
"userlogout": "Rummuar",
@@ -380,20 +389,20 @@
"userlogin-noaccount": "Awan ti pakabilangam?",
"userlogin-joinproject": "Tumipon iti {{SITENAME}}",
"nologin": "Awan pakabilangam? $1.",
- "nologinlink": "Agpartuat ti pakabilangan",
- "createaccount": "Agpartuat ti pakabilangan",
+ "nologinlink": "Agpartuat iti pakabilangan",
+ "createaccount": "Agpartuat iti pakabilangan",
"gotaccount": "Addaanka kadin iti pakabilangan? $1.",
"gotaccountlink": "Sumrek",
"userlogin-resetlink": "Nalipatam dagiti salaysay ti panagserrekmo?",
"userlogin-resetpassword-link": "Nalipatam ti kontraseniasmo?",
"userlogin-helplink2": "Tulong iti panagserrek",
"userlogin-loggedin": "Nakastrekkan a kas ni {{GENDER:$1|$1}}.\nUsaren ti porma dita baba tapno sumrek a kas sabali nga agar-aramat.",
- "userlogin-createanother": "Agpartuat ti sabali a pakabilangan",
+ "userlogin-createanother": "Agpartuat iti sabali a pakabilangan",
"createacct-emailrequired": "Esurat a pagtaengan",
"createacct-emailoptional": "Esurat a pagtaengan (pagpilian)",
"createacct-email-ph": "Ikabil ti esurat a pagtaengam",
"createacct-another-email-ph": "Ikabil ti esurat a pagtaengan",
- "createaccountmail": "Agusar ti pugto a temporario a kontrasenias ken ipatulod iti naisangayan nga esurat a pagtaengan",
+ "createaccountmail": "Agusar iti pugto a temporario a kontrasenias ken ipatulod iti naisangayan nga esurat a pagtaengan",
"createacct-realname": "Pudno a nagan (pagpilian)",
"createaccountreason": "Rason:",
"createacct-reason": "Rason",
@@ -401,7 +410,7 @@
"createacct-captcha": "Panagpatalged ti seguridad",
"createacct-imgcaptcha-ph": "Ikabil ti testo a makitam dita ngato",
"createacct-submit": "Partuatem ti pakabilangam",
- "createacct-another-submit": "Agpartuat ti sabali a pakabilangan",
+ "createacct-another-submit": "Agpartuat iti sabali a pakabilangan",
"createacct-benefit-heading": "Ti {{SITENAME}} ket inar-aramid babaen ti tattao a kasla kenka.",
"createacct-benefit-body1": "{{PLURAL:$1|nga inurnos|nga inur-urnos}}",
"createacct-benefit-body2": "{{PLURAL:$1|a panid|a pampanid}}",
@@ -417,7 +426,7 @@
"noname": "Saanmo a nainaganan ti umisu a nagan ti agar-aramat.",
"loginsuccesstitle": "Balligi ti panagserrek",
"loginsuccess": "<strong>Nakastrekkan iti {{SITENAME}} a kas ni \"$1\".</strong>",
- "nosuchuser": "Awan ti agar-aramat nga agnagan ti \"$1\". \n\nDagiti nagan ti agar-aramat ket sensitibo ti kadakkel ti letra.\n\nKitaem ti panangiletram, wenno [[Special:UserLogin/signup|agpartuat ti baro a pakabilangan]].",
+ "nosuchuser": "Awan ti agar-aramat nga agnagan ti \"$1\". \n\nDagiti nagan ti agar-aramat ket sensitibo ti kadakkel ti letra.\n\nKitaem ti panangiletram, wenno [[Special:UserLogin/signup|agpartuat iti baro a pakabilangan]].",
"nosuchusershort": "Awan ti agar-aramat nga agnagan ti \"$1\".\nKitaem ti panangiletram.",
"nouserspecified": "Nasken nga inaganam ti nagan ti agar-aramat.",
"login-userblocked": "Naserraan daytoy nga agar-aramat. Saan a mapalubosan ti sumrek.",
@@ -432,7 +441,7 @@
"noemail": "Awan ti esurat a pagtaengan a nairehistro para iti agar-aramat a ni \"$1\".",
"noemailcreate": "Nasken a mangitedka ti pudno nga esurat a pagtaengan.",
"passwordsent": "Naipatuloden ti baro a kontrasenias iti esurat a pagtaengan a nairehistro kenni \"$1\".\nPangngaasi a sumrekka manen kalpasan ti pannakaawatmo.",
- "blocked-mailpassword": "Ti IP a pagtaengam ket naserraan manipud ti panag-urnos, ken isu a saan a mapalubosan nga agusar ti annong ti panagipulang ti kontrasenias tapno mapawilan ti panag-abuso.",
+ "blocked-mailpassword": "Ti IP a pagtaengam ket naserraan manipud ti panagurnos, ken isu a saan a mapalubosan nga agusar ti annong ti panagipulang ti kontrasenias tapno mapawilan ti panag-abuso.",
"eauthentsent": "Naipatuloden ti pammatalged nga esurat iti naikeddeng nga esurat a pagtaengan.\nSakbay a maipatulod ti aniaman nga esurat iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapatalgedan ti pakabilangan ket agpayso a kukuam.",
"throttled-mailpassword": "Ti panangisaad manen ti kontrasenias ket naipatuloden, iti kaunegan ti napalabas a {{PLURAL:$1|nga oras|$1 nga or-oras}}.\nTapno maipawilan ti panag-abuso, maysa laeng a panangisaad manen ti kontrasenias ti maipatulod iti kada {{PLURAL:$1|nga oras|$1 nga or-oras}}.",
"mailerror": "Biddut iti panangipatulod ti surat: $1",
@@ -450,12 +459,13 @@
"createaccount-text": "Adda nagpartuat ti pakabilangan para iti esurat a pagtaengam iti {{SITENAME}} ($4) nga agnagan ti \"$2\", iti kontrasenias a \"$3\".\nNasken a sumrekka ken sukatam ti kontraseniasmo tattan.\n\nMabalinmo ti saan a mangikaskaso iti daytoy a mensahe, no biddut a naaramid daytoy a pakabilangan.",
"login-throttled": "Adu unay ti panagpadasmo a sumrek.\nPangngaasi nga agurayka ti $1 sakbay a padasen manen.",
"login-abort-generic": "Napaay ti panagserrekmo - Napasardeng",
+ "login-migrated-generic": "Ti pakabilangam ket naiyakaren, ken awanen ti naganmo nga agar-aramat iti daytoy a wiki.",
"loginlanguagelabel": "Pagsasao: $1",
- "suspicious-userlogout": "Naiparit ti panagkiddawmo a rummuar ngamin ket kasla inpatulod ti nadadael a panagbasabasa wenno pannakaidulin a pannakbagi.",
+ "suspicious-userlogout": "Naiparit ti panagkiddawmo a rummuar ngamin ket kasla inpatulod iti nadadael a panagbasabasa wenno pannakaidulin a pannakbagi.",
"createacct-another-realname-tip": "Saan a nasken ti pudno a nagan.\nNo kayatmo nga ited, mausarto daytoy para iti panangited ti pammadayaw para kadagiti obrada.",
"pt-login": "Sumrek",
"pt-login-button": "Sumrek",
- "pt-createaccount": "Agpartuat ti pakabilangan",
+ "pt-createaccount": "Agpartuat iti pakabilangan",
"pt-userlogout": "Rummuar",
"php-mail-error-unknown": "Di ammo a biddut iti surat ti annong ti PHP().",
"user-mail-no-addy": "Pinadas nga inpatulod ti esurat nga awan ti maysa nga esurat a pagtaengan.",
@@ -468,7 +478,7 @@
"retypenew": "Imakinilya manen ti baro a kontrasenias:",
"resetpass_submit": "Isaad ti kontrasenias ken sumrek",
"changepassword-success": "Balligi a nasukatan ti kontraseniasmo!",
- "changepassword-throttled": "Nakaaramidka kadagiti adu unay a nabiit a panangipadas ti panagserrek.\nPangngaasi nga aguray ti $1 sakbay a padasen manen.",
+ "changepassword-throttled": "Nakaaramidka kadagiti adu unay a nabiit a panangipadas ti panagserrek.\nPangngaasi nga aguray iti $1 sakbay a padasen manen.",
"resetpass_forbidden": "Saan a masukatan dagiti kontrasenias",
"resetpass-no-info": "Masapul a nakastrekka tapno dagus a makapanka iti daytoy a panid.",
"resetpass-submit-loggedin": "Sukatan ti kontrasenias",
@@ -500,7 +510,6 @@
"passwordreset-emailsent-capture": "Ti maysa nga esurat ti panangisaad manen ti kontrasenias ket naipatuloden, a naipakita dita baba.",
"passwordreset-emailerror-capture": "Naaramid ti maysa nga esurat a panangisaad manen ti kontrasenias, a napaikita dita baba, ngem ti panangitulod kenni {{GENDER:$2|agar-aramat}} ket napaay: $1",
"changeemail": "Sukatan ti esurat a pagtaengan",
- "changeemail-header": "Sukatan ti esurat a pagtaengan ti pakabilangan",
"changeemail-text": "Kompletuen daytoy a porma ti panagsukat ti esurat a pagtaengam. Nasken nga ikabilmo ti kontrasenias tapno mapasingkedan daytoy a panagsukat.",
"changeemail-no-info": "Masapul a nakastrekka tapno dagus a makapan iti ditoy a panid.",
"changeemail-oldemail": "Agdama nga esurat a pagtaengan:",
@@ -508,7 +517,6 @@
"changeemail-none": "(awan)",
"changeemail-password": "Ti bukodmo a kontrasenias ti {{SITENAME}}:",
"changeemail-submit": "Sukatan ti esurat",
- "changeemail-cancel": "Ukasen",
"changeemail-throttled": "Adu unay ti panagpadasmo a sumrek.\nPangngaasi nga aguray ti $1 sakbay a padasen manen.",
"resettokens": "Isaad manen dagiti tandaan",
"resettokens-text": "Mabalinmo nga isaad manen dagiti tandaan a mangpalubos ti panagserrek ti naisangayan a pribado datos a mainaig ti pakabilangam ditoy.\n\nAramidem daytoy no aksidente nga inbingaymo dagitoy iti sabali wenno ti pakabilangam ket nakomprimiso.",
@@ -537,25 +545,25 @@
"hr_tip": "Horisontal a linia (manmano laeng nga aramaten)",
"summary": "Pakabuklan:",
"subject": "Suheto/paulo:",
- "minoredit": "Daytoy ket bassit a panag-urnos",
+ "minoredit": "Daytoy ket bassit a panagurnos",
"watchthis": "Bantayan daytoy a panid",
"savearticle": "Idulin ti panid",
"preview": "Ipadas",
"showpreview": "Ipakita ti ipadas",
"showdiff": "Ipakita dagiti sinukatan",
"blankarticle": "<strong>Ballaag:</strong> Ti panid a parpatuatem ket blanko.\nNo pindutem manen ti \"{{int:savearticle}}\", ti panid ket mapartuatto nga awan ti aniaman a linaon.",
- "anoneditwarning": "<strong>Ballaag:</strong> Saanka a nakastrek.\nMairehistro ti IP a pagtaengam iti pakasaritaan ti panag-urnos iti daytoy a panid.",
- "anonpreviewwarning": "<em>Saanka a nakastrek. Ti panagidulin ket agirehistro ti IP a pagtaengam kadagitoy a pakasaritaan ti panag-urnos iti daytoy a panid.</em>",
- "missingsummary": "<strong>Palagip:</strong> Saanka a nakaited iti pakabuklan ti panag-urnos.\nNo pindutem manen ti \"{{int:savearticle}}\", maidulin ti inurnosmo nga awan ti pakabuklanna.",
+ "anoneditwarning": "<strong>Ballaag:</strong> Saanka a nakastrek. Ti IP a pagtaengan ket publikonto a makita nga agaramidka iti ania man a panagurnos. No <strong>[$1 sumrekka]</strong> wenno <strong>[$2 agpartuatka iti pakabilangan]</strong>, dagiti inurnosmo ket maitunosto iti naganmo nga agar-aramat, ken dagiti dadduma pay a pagimbagan.",
+ "anonpreviewwarning": "<em>Saanka a nakastrek. Ti panagidulin ket agirehistro ti IP a pagtaengam kadagitoy a pakasaritaan ti panagurnos iti daytoy a panid.</em>",
+ "missingsummary": "<strong>Palagip:</strong> Saanka a nakaited iti pakabuklan ti panagurnos.\nNo pindutem manen ti \"{{int:savearticle}}\", maidulin ti inurnosmo nga awan ti pakabuklanna.",
"missingcommenttext": "Pangngaasi nga agikabil ti komentario dita baba.",
- "missingcommentheader": "<strong>Palagip:</strong> Saanka a nakaited iti suheto/paulo para iti daytoy a komentario.\nNo pindutem manen ti \"{{int:savearticle}}\", maidulin ti inurnosmo nga awan ti pakabuklanna.",
+ "missingcommentheader": "<strong>Palagip:</strong> Saanka a nakaited iti suheto/paulo para iti daytoy a komentario.\nNo pindutem manen ti \"{{int:savearticle}}\", maidulin ti inurnosmo nga awan ti pakabuklanna.",
"summary-preview": "Naipadas a pakabuklan:",
"subject-preview": "Suheto/naipadas a paulo:",
"blockedtitle": "Naseraan ti agar-aramat",
"blockedtext": "<strong>Naseraan ti naganmo nga agar-aramat wenno ti IP a pagtaengam.</strong>\n\nTi serra ket inaramid babaen ni $1. \nTi rason a naited ket <em>$2</em>.\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddeng a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panagserra.\nDimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga esurat a pagtaengan a nainaganan iti [[Special:Preferences|pakabilangan ti kakaykayatm]] ken no saanka a naparitan nga agaramat iti daytoy.\nTi agdama nga IP a pagtaengam ket $3, ti naserraan nga ID ket #$5. \nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti aniaman nga aramidem nga usisa.",
"autoblockedtext": "Ti IP a pagtaengam ket automatiko a naserraan ngamin ket inusar ti sabali nga agar-aramat, a sinerraan ni $1.\nTi rason nga inted ket:\n\n:<em>$2</em>\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddenga a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno maysa kadagiti [[{{MediaWiki:Grouppage-sysop}}|administrador]] tapno maipalawag daytoy a panagserra.\n\nLaglagipem a saanmo a mabalin nga usaren ti \"esuratan daytoy nga agar-aramat\" a langa malaksid no addaanka ti napudno nga esurat a pagtaengan a nakarehistro iti [[Special:Preferences|kakaykayatam]] ken saanka a naserraan manipud ti panag-usar daytoy.\n\nTi tatta nga IP a pagtaengam ket $3, ken ti ID ti naserraan ket #$5.\nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti aniaman nga aramidem nga usisa.",
"blockednoreason": "awan ti naited a rason",
- "whitelistedittext": "Nasken ti $1 tapno maurnosmo dagitoy a panid.",
+ "whitelistedittext": "Pangngaasi a $1 tapno makaurnos kadagiti panid.",
"confirmedittext": "Masapul a pasingkedam ti esurat sakbay a makaurnos kadagitoy a panid.\nPangngaasi nga isaad ken ipapudnom ti esuratmo babaen ti [[Special:Preferences|kakaykayatan ti agar-aramat]].",
"nosuchsectiontitle": "Saan a mabirukan ti paset",
"nosuchsectiontext": "Pinadasmo nga inurnos ti awan a paset.\nMabalin a naiyalis wenno naikkat bayat idi kitkitaem ti panid.",
@@ -566,7 +574,7 @@
"accmailtext": "Ti pugto a napartuat a kontrasenias para kenni [[User talk:$1|$1]] ket naipatuloden iti $2. Mabalin a masukatan iti\n<em>[[Special:ChangePassword|pagsukatan ti kontrasenias]]</em> a panid no sumrekka.",
"newarticle": "(Baro)",
"newarticletext": "Nasurotmo ti silpo ti awan pay a panid. \nTi mangpartuat ti panid, rugiamon ti agmakinilia iti kahon dita baba (kitaen ti [$1 panid ti tulong] para iti adu pay a pakaammo). \nNo addaka ditoy babaen ti biddut, pindutem ti buton ti <strong>back</strong> ti pagbasabasam.",
- "anontalkpagetext": "----\n<em>Daytoy ti pakitungtungan a panid para iti di ammo nga agar-aramat a saan pay a nakapartuat ti pakabilangan, wenno saanna nga us-usaren.</em>\nIsu nga agusarkami ti numero nga IP a pagtaengan tapno mailasin isuda a lalaki/babai.\nTi kastoy nga IP a pagtaengan ket us-usaren a bingayan babaen ti nadumaduma nga agar-aramat.\nNo sika ket maysa a di ammo nga agar-aramat ken dagiti awan ti pategna a komentario ket napaitudo kenka, pangngaasi nga [[Special:UserLogin/signup|agpartuatka ti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] \ntapno maliklikan ti pannakaiyallilaw kadagiti sabali a di ammo nga agar-aramat.",
+ "anontalkpagetext": "----\n<em>Daytoy ti pakitungtungan a panid para iti di ammo nga agar-aramat a saan pay a nakapartuat iti pakabilangan, wenno saanna nga us-usaren.</em>\nIsu nga agusarkami ti numero nga IP a pagtaengan tapno mailasin isuda a lalaki/babai.\nTi kastoy nga IP a pagtaengan ket us-usaren a bingayan babaen ti nadumaduma nga agar-aramat.\nNo sika ket maysa a di ammo nga agar-aramat ken dagiti awan ti pategna a komentario ket napaitudo kenka, pangngaasi nga [[Special:UserLogin/signup|agpartuatka iti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] \ntapno maliklikan ti pannakaiyallilaw kadagiti sabali a di ammo nga agar-aramat.",
"noarticletext": "Awan ti agdama a testo daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk iti kastoy a titulo ti panid]] kadagiti sabali a panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan],\nwenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid]</span>.",
"noarticletext-nopermission": "Awan ti agdama a linaon daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk para iti titulo ti daytoy a panid]] kadagiti sabali a panid, wenno <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan]</span>, ngem awan ti pammalubosmo a mangpartuat iti daytoy a panid.",
"missing-revision": "Ti panagbalbaliw ti #$1 iti daytoy a panid a nanaganan ti \"{{FULLPAGENAME}}\" ket awan.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a silpo ti baak a pakasaritaan iti maysa a naikkaten a panid.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
@@ -580,22 +588,22 @@
"userjspreview": "<strong>Laglagipem a subsubokam/ipadpadasmo ti bukodmo a JavaScript ti agar-aramat.\nSaan pay a naidulin!</strong>",
"sitecsspreview": "<strong>Laglagipem nga ipadpadasmo laeng daytoy a CSS.\nSaan pay a naidulin!</strong>",
"sitejspreview": "<strong>Laglagipem nga ipadpadasmo laeng daytoy a kodigo ti JavaScript.\nSaan pay nga naidulin!</strong>",
- "userinvalidcssjstitle": "<strong>Ballaag:</strong> Awan ti kudil a \"$1\".\nDagiti panid ti naiduma a .css ken .js ket agus-usar ti titulo ti bassit a letra, kas ti {{ns:user}}:Foo/vector.css saan a kas ti {{ns:user}}:Foo/Vector.css.",
+ "userinvalidcssjstitle": "<strong>Ballaag:</strong> Awan ti kudil a \"$1\".\nDagiti panid ti naiduma a .css ken .js ket agus-usar iti titulo ti bassit a letra, kas ti {{ns:user}}:Foo/vector.css saan a kas ti {{ns:user}}:Foo/Vector.css.",
"updated": "(Napabaro)",
"note": "<strong>Nota:</strong>",
"previewnote": "<strong>Laglagipem a daytoy ket panagipadas laeng.</strong>\nDagiti sinukatam ket saan pay a naidulin!",
"continue-editing": "Mapan idiay pagurnosan a lugar",
- "previewconflict": "Daytoy a panagpadas ket mangipakita ti testo iti lugar ti akin-ngato a pangurnosan ti testo a kasla agparang no piliem nga idulin.",
- "session_fail_preview": "<strong>Pasensia! Saanmi a maproseso ti panag-urnosmo gapu ta naawanan ti sesion ti datos.</strong>\nPangngaasi a padasen manen.\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
- "session_fail_preview_html": "<strong>Pasensia! Saanmi a maproseso ti panag-urnosmo gapu ta naawanan ti sesion ti datos.</strong>'\n\n<em>Gapu ta ti {{SITENAME}} ket addaan iti naata a HTML a nakapabaelan, ti panagpadas ket nailemmeng a kas pagan-annadan kadagiti panagraut ti dakes a JavaScript.</em>\n\n<strong>No daytoy ket pudno a panag-urnos, pangngaasi a padasem manen.</strong>\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
- "token_suffix_mismatch": "<strong>Ti panag-urnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna dagiti karakter ti tuldek iti tandaan ti panag-urnos.</strong>\nTi panag-urnos ket saan a naawat tapno mapawilan ti pannakadadael ti testo ti panid.\nSagpaminsan a mapasamak daytoy no agus-usarka ti saan a nasayaat a naibatay ti web ti di ammo a pannakbagi a serbisio.",
- "edit_form_incomplete": "<strong>Adda dagiti paset ti pagurnosan a porma a saan a nakadanon dita server; mamindua a kitaen dagiti panag-urnosmo ket sibubukel ken padasen manen.</strong>",
+ "previewconflict": "Daytoy a panagpadas ket mangipakita ti testo iti lugar ti akinngato a pangurnosan ti testo a kasla agparang no piliem nga idulin.",
+ "session_fail_preview": "<strong>Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.</strong>\nPangngaasi a padasen manen.\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
+ "session_fail_preview_html": "<strong>Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.</strong>'\n\n<em>Gapu ta ti {{SITENAME}} ket addaan iti naata a HTML a nakapabaelan, ti panagpadas ket nailemmeng a kas pagan-annadan kadagiti panagraut ti dakes a JavaScript.</em>\n\n<strong>No daytoy ket pudno a panagurnos, pangngaasi a padasem manen.</strong>\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
+ "token_suffix_mismatch": "<strong>Ti panagurnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna dagiti karakter ti tuldek iti tandaan ti panagurnos.</strong>\nTi panagurnos ket saan a naawat tapno mapawilan ti pannakadadael ti testo ti panid.\nSagpaminsan a mapasamak daytoy no agus-usarka ti saan a nasayaat a naibatay ti web ti di ammo a pannakbagi a serbisio.",
+ "edit_form_incomplete": "<strong>Adda dagiti paset ti pagurnosan a porma a saan a nakadanon dita server; mamindua a kitaen dagiti panagurnosmo ket sibubukel ken padasen manen.</strong>",
"editing": "Ur-urnosen ti $1",
"creating": "Agparpartuat ti $1",
"editingsection": "Ur-urnosen ti $1 (paset)",
"editingcomment": "Ur-urnosen ti $1 (baro a paset)",
- "editconflict": "Agsinnungat a panag-urnos: $1",
- "explainconflict": "Adda sabali a nagsukat iti daytoy a panid idi nangrugika a nagurnos.\nTi akinngato a lugar ti testo ket aglaon ti testo ti panid iti agdama kaddana.\nDagiti sinukatam ket maipakita iti akinbabba a lugar ti testo.\nNasken nga itiponmoto dagiti sinukatam iti adda a testo.\nTi <strong>laeng</strong> testo iti akinngato a lugar ti testo ti maidulinto no talmegam ti \"{{int:savearticle}}\".",
+ "editconflict": "Agsinnungat a panagurnos: $1",
+ "explainconflict": "Adda sabali a nagsukat iti daytoy a panid idi nangrugika a nagurnos.\nTi akinngato a lugar ti testo ket aglaon ti testo ti panid iti agdama kaaddana.\nDagiti sinukatam ket maipakita iti akinbaba a lugar ti testo.\nNasken nga itiponmonto dagiti sinukatam iti adda a testo.\nTi <strong>laeng</strong> testo iti akinngato a lugar ti testo ti maidulinto no talmegam ti \"{{int:savearticle}}\".",
"yourtext": "Ti testom",
"storedversion": "Rebision a naidulin",
"nonunicodebrowser": "<strong>Ballaag: Ti pabasabasam ket saan a maitunos iti Unicode .</strong>\nAdda sabali a mausar tapno makaurnoska kadagiti panid: Ti saan nga-ASCII a karakter ket agparang iti pagurnosan a kahon a kas dagiti heksadesimal a kodigo.",
@@ -603,7 +611,7 @@
"yourdiff": "Paggigiddiatan",
"copyrightwarning": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket naikeddeng a naipablaak babaen ti babaen ti $2 (kitaen ti $1 para kadagiti salaysay). \nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud ti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan.\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
"copyrightwarning2": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket mabalin a maurnos, mabaliwan, wenno ikkaten dagiti sabali a kontributor.\nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud ti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan. (kitaen ti $1 para kadagiti salaysay).\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
- "longpageerror": "<strong>Biddut: Ti testo nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kil-kilobyte}} ti katiddogna, nga at-atiddog ngem ti kangatuan iti {{PLURAL:$2|maysa a kilobyte|$2 kil-kilobyte}}.</strong>\nSaan a mabalin a maidulin.",
+ "longpageerror": "<strong>Biddut: Ti testo nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kilkilobyte}} ti katiddogna, nga at-atiddog ngem ti kangatuan iti {{PLURAL:$2|maysa a kilobyte|$2 kilkilobyte}}.</strong>\nSaan a mabalin a maidulin.",
"readonlywarning": "<strong>Ballaag: Narikepan ti database tapno mataripato, isu a saanmo a mabalin nga idulin dagita inurnosmo tattan.</strong>\nMabalinmo ti agkopia ken agipegket ti testom iti papeles ti testo ken idulinmo daytoy intono madamdama.\n\nTi administrador a nangrikep ket nangited iti daytoy a palawag: $1",
"protectedpagewarning": "<strong>Ballaag: Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos ditoy.</strong>\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
"semiprotectedpagewarning": "<strong>Nota:</strong> Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
@@ -615,24 +623,24 @@
"template-protected": "(nasalakniban)",
"template-semiprotected": "(nasalakniban-bassit)",
"hiddencategories": "Daytoy a panid ket kameng {{PLURAL:$1|ti 1 a nailemmeng a kategoria|dagiti $1 a nailemmeng a kategoria}}:",
- "nocreatetext": "Ginawidan ti {{SITENAME}} ti abilidad nga agpartuat kadagiti baro a panid.\nMabalinmo ti agsubli ken agurnos ti adda a panid, wenno [[Special:UserLogin|sumrek wenno agapartuat ti pakabilangan]].",
+ "nocreatetext": "Ginawidan ti {{SITENAME}} ti abilidad nga agpartuat kadagiti baro a panid.\nMabalinmo ti agsubli ken agurnos ti adda a panid, wenno [[Special:UserLogin|sumrek wenno agapartuat iti pakabilangan]].",
"nocreate-loggedin": "Awan ti pammalubosmo nga agpartuat kadagiti baro a panid.",
- "sectioneditnotsupported-title": "Saan a nasuportaran ti panag-urnos ti paset",
- "sectioneditnotsupported-text": "Saan a nasuportaran ti panag-urnos ti paset iti daytoy a panid.",
+ "sectioneditnotsupported-title": "Saan a nasuportaran ti panagurnos ti paset",
+ "sectioneditnotsupported-text": "Saan a nasuportaran ti panagurnos ti paset iti daytoy a panid.",
"permissionserrors": "Biddut ti pammalubos",
"permissionserrorstext": "Awan ti pammalubosmo nga agaramid iti dayta, gapu ti sumaganad {{PLURAL:$1|a rason|a rasrason}}:",
"permissionserrorstext-withaction": "Awan ti pammalubosmo nga $2, gapu ti sumaganad a {{PLURAL:$1|rason|rasrason}}:",
"recreate-moveddeleted-warn": "<strong>Ballaag: Agparpartuatka manen ti dati a naikkat a panid.</strong>\n\nUsigem koma no maitutop ti agtuloy nga agurnos iti daytoy a panid.\nTi listaan ti pannakaikkat ken pannakaiyalis para iti daytoy a panid ket naited ditoy para iti pakainugotan:",
"moveddeleted-notice": "Naikkaten daytoy a panid.\nTi listaan ti pannakaikkat ken pannakaiyalis para iti panid ket naited dita baba para iti reperensia.",
"log-fulllog": "Kitaem ti napno a listaan",
- "edit-hook-aborted": "Ti panag-urnos ket pinasardeng babaen ti kawit.\nAwan ti intedna a palawag.",
+ "edit-hook-aborted": "Ti panagurnos ket pinasardeng babaen ti kawit.\nAwan ti intedna a palawag.",
"edit-gone-missing": "Saan a mapabaro daytoy a panid.\nKasla met naikkaten.",
- "edit-conflict": "Kasinnungat ti panag-urnos.",
+ "edit-conflict": "Agsinnungat a panagurnos.",
"edit-no-change": "Ti inurnosmo ket saan a naikaskaso ngamin ket awan ti naaramid a pannakasukat iti testo.",
- "postedit-confirmation-created": "Ti panid ket napartuaten.",
- "postedit-confirmation-restored": "Ti panid ket naipulangen.",
- "postedit-confirmation-saved": "Ti inurnosmo ket naidulinen.",
- "edit-already-exists": "Saan a makaaramid ti baro a panid.\nAdda met daytoyen.",
+ "postedit-confirmation-created": "Napartuaten ti panid.",
+ "postedit-confirmation-restored": "Naipulangen ti panid.",
+ "postedit-confirmation-saved": "Naidulinen ti inurnosmo.",
+ "edit-already-exists": "Saan a makapartuat iti baro a panid.\nAdda met daytoyen.",
"defaultmessagetext": "Kasisigud a testo ti mensahe",
"content-failed-to-parse": "Napaay a mawaswas ti $2 a linaon para iti $1 a modelo: $3",
"invalid-content-data": "Imbalido a datos ti linaon",
@@ -644,20 +652,22 @@
"content-model-text": "naranas a testo",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
- "expensive-parserfunction-warning": "<strong>Ballaag:</strong> Daytoy a panid ket adu unay kadagiti nangina a parser a pamay-an a panagtawtawag.\n\nAdda koman basbasit ngem $2 {{PLURAL:$2|a panagtawtawag|kadagiti panagtawtawag}}, adda {{PLURAL:$1|tattan iti $1 a panagtawtawag|tattan kadagiti $1 a panagtawtawag}}.",
- "expensive-parserfunction-category": "Dagiti panid nga adda ti adu unay a nangina a parser a pamay-an a panagtawtawag",
+ "duplicate-args-category": "Pampanid nga agus-usar kadagiti duplikado nga argumento kadagiti panagtawag ti plantilia",
+ "duplicate-args-category-desc": "Ti panid ket aglaon kadagiti panagtawag ti plantilia nga agus-usar kadagiti duplikado dagiti argumento, a kas ti <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> wenno <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+ "expensive-parserfunction-warning": "<strong>Ballaag:</strong> Daytoy a panid ket aglaon ti adu unay kadagiti panagtawag ti nangina a parser.\n\nAdda koman basbasit ngem $2 {{PLURAL:$2|a panagtawtawag|kadagiti panagtawtawag}}, adda {{PLURAL:$1|tattan iti $1 a panagtawtawag|tattan kadagiti $1 a panagtawtawag}}.",
+ "expensive-parserfunction-category": "Dagiti panid nga addaan iti adu unay kadagiti panagtawag ti nangina a parser",
"post-expand-template-inclusion-warning": "<strong>Ballaag:</strong> Dakkel unay ti nairaman a kadakkel ti plantilia.\nAdda dagiti plantilia a saanto a mairaman.",
"post-expand-template-inclusion-category": "Pampanid nga ayan ti plantilia a nagsobra ti kadakkel ti rukod a nairaman",
"post-expand-template-argument-warning": "<strong>Ballaag:</strong> Daytoy a panid ket aglaon ti saan a basbasit ngem maysa a panangipalawag ti plantilia a dakkel unay ti panagpadakkelna.\nDagitoy nga argumento ket saanen a nairaman.",
- "post-expand-template-argument-category": "Pampanid a naglaon dagiti saan a nairaman nga argumento ti plantilia",
- "parser-template-loop-warning": "Nakaduktal ti silo ti plantilia: [[$1]]",
+ "post-expand-template-argument-category": "Pampanid a naglaon kadagiti saan a nairaman nga argumento ti plantilia",
+ "parser-template-loop-warning": "Nakaduktal iti silo ti plantilia: [[$1]]",
"parser-template-recursion-depth-warning": "Nalabsan ti patingga ti panagdullit ti kinauneg ti plantilia ($1)",
"language-converter-depth-warning": "Nalabsan ti patingga ti pagbaliwen a kinauneg ti pagsasao ($1)",
- "node-count-exceeded-category": "Dagiti panid a simmurok ti bilang ti nodo",
- "node-count-exceeded-category-desc": "Ti kategoria para kadagiti panid a nalabsan ti bilang ti nodo.",
+ "node-count-exceeded-category": "Dagiti panid a nakasurokan ti bilang ti nodo",
+ "node-count-exceeded-category-desc": "Ti panid ket nasurokanna ti kaaduan a bilang ti nodo.",
"node-count-exceeded-warning": "Ti panid ket nasurokanna ti bilang ti nodo",
- "expansion-depth-exceeded-category": "Dagiti panid a nasurokan ti kauneg ti panagpadakkel",
- "expansion-depth-exceeded-category-desc": "Daytoy ket kategoria para kadagiti panid a nalabsan ti kauneg ti panagpadakkel.",
+ "expansion-depth-exceeded-category": "Pampanid a nasurokan ti kauneg ti panagpadakkel",
+ "expansion-depth-exceeded-category-desc": "Ti panid ket nasurokanna ti kaaduan ti kauneg ti panagpadakkel.",
"expansion-depth-exceeded-warning": "Ti panid ket nasurokanna ti kauneg ti panagpadakkel",
"parser-unstrip-loop-warning": "Nakaduktal ti di-naukisan a silo",
"parser-unstrip-recursion-limit": "Nalabsan ti patingga ti panagdullit ti di-naukisan ($1)",
@@ -672,7 +682,7 @@
"cantcreateaccount-text": "Ti panagpartuat ti pakabilangan manipud ti daytoy nga IP a pagtaengan (<strong>$1</strong>) ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
"cantcreateaccount-range-text": "Ti panagpartuat ti pakabilangan manipud kadagiti pagtaengan ti IP iti sakop ti '''$1''', a mairaman ti IP a pagtaengam ('''$4'''), ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket ''$2''",
"viewpagelogs": "Kitaen dagiti listaan para iti daytoy a panid",
- "nohistory": "Awan ti pakasaritaan ti panag-urnos iti daytoy a panid.",
+ "nohistory": "Awan ti pakasaritaan ti panagurnos iti daytoy a panid.",
"currentrev": "Kinaudi a rebision",
"currentrev-asof": "Kinaudi a rebision manipud idi $1",
"revisionasof": "Rebision manipud idi $1",
@@ -699,7 +709,7 @@
"rev-deleted-comment": "(naikkat ti pakabuklan ti inurnos)",
"rev-deleted-user": "(naikkat ti nagan ti agar-aramat)",
"rev-deleted-event": "(naikkat ti listaan ti tignay)",
- "rev-deleted-user-contribs": "[naikkat ti nagan ti agar-aramat wenno IP a pagtaengan - ti inurnos ket nailemmeng manipud kadagiti kontributor]",
+ "rev-deleted-user-contribs": "[naikkat ti nagan ti agar-aramat wenno IP a pagtaengan - ti inurnos ket nailemmeng manipud kadagiti kontribusion]",
"rev-deleted-text-permission": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
"rev-suppressed-text-permission": "Ti rebision daytoy a panid ket <strong>napasardeng</strong>.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].",
"rev-deleted-text-unhide": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].\nMabalinmo pay a [$1 makita daytoy a rebision] no kayatmo ti agtuloy.",
@@ -727,7 +737,7 @@
"revdelete-text-file": "Dagiti naikkat a bersion ti papeles ket agparangto pay laeng iti pakasaritaan ti papeles, ngem dagiti paset ti linaonda ket saanton a publiko a maserrekan.",
"logdelete-text": "Dagiti naikkat a listaan ti pasamak ket agparangto pay laeng kadagiti listaan, ngem dagiti paset ti linaonda ket saanton a publiko a maserrekan.",
"revdelete-text-others": "Dagiti sabali nga administrador ket mabalindanto pay laeng a maserrekan ti nailemmeng a linaon ken mangisubli daytoy, malaksid no adda dagiti maipatinayon a maisaad a panangigawid.",
- "revdelete-confirm": "Pangngaasi a pasingkedam a kayatmo nga aramiden daytoy, a maawatam dagiti pagbanagan, ken araramidem daytoy segun [[{{MediaWiki:Policy-url}}|ti annuroten]].",
+ "revdelete-confirm": "Pangngaasi a pasingkedam a kayatmo nga aramiden daytoy, a maawatam dagiti pagbanagan, ken ar-aramidem daytoy segun [[{{MediaWiki:Policy-url}}|ti annuroten]].",
"revdelete-suppress-text": "Ti panagdepdep ket usaren <strong>laeng</strong> kadagiti sumaganad a kaso;\n* Makapataud ti libelo a pakaammo\n* Di maiparbeng a personal a pakaammo\n* : <em>dagiti adres ti balay ken numero ti telepono, dagiti numero ti nailian a pakaipakaammuan, kdpy.</em>",
"revdelete-legend": "Isaad dagiti panangigawid ti panagkita",
"revdelete-hide-text": "Testo ti rebision",
@@ -770,8 +780,8 @@
"mergehistory-from": "Taudan ti panid:",
"mergehistory-into": "Pangipanan a panid:",
"mergehistory-list": "Mabalin nga itipon a pakasaritaan ti inurnos",
- "mergehistory-merge": "Dagiti sumaganad a rebision iti [[:$1]] ket mabalin nga itipon iti [[:$2]].\nUsaren ti radio a buton a tukol ti panagtipon iti laeng panagbaliw a napartuat iti ken sakbay ti nainagan nga oras.\nLaglagipen a ti panag-usar kadagiti silpo ti pagdaliasatan ket mangisaad manen iti daytoy a batong.",
- "mergehistory-go": "Ipakita dagiti mabalin a maitipon a panag-urnos",
+ "mergehistory-merge": "Dagiti sumaganad a rebision iti [[:$1]] ket mabalin nga itipon iti [[:$2]].\nUsaren ti radio a buton a tukol ti panagtipon iti laeng panagbaliw a napartuat iti ken sakbay ti nainagan nga oras.\nLaglagipen a ti panagusar kadagiti silpo ti pagdaliasatan ket mangisaad manen iti daytoy a batong.",
+ "mergehistory-go": "Ipakita dagiti mabalin a maitipon a panagurnos",
"mergehistory-submit": "Pagtitiponen dagiti rebision",
"mergehistory-empty": "Awan dagiti rebision ti mabalin nga itipon.",
"mergehistory-success": "$3 {{PLURAL:$3|a rebision|dagiti rebision}} iti [[:$1]] ket nagballigi a naitipon iti [[:$2]].",
@@ -786,7 +796,6 @@
"mergehistory-same-destination": "Ti nagtaudan ken ti pangipanan ti panid ket saan a mabalin nga agpada",
"mergehistory-reason": "Rason:",
"mergelog": "Listaan ti panagtipon",
- "pagemerge-logentry": "itipon ti [[$1]] iti [[$2]] (dagiti rebision aginggana iti $3)",
"revertmerge": "Pagsinaen",
"mergelogpagetext": "Dita baba ket ti listaan dagiti kaudian a panagtipon ti maysa a pakasaritaan ti panid iti sabali.",
"history-title": "Pakasaritaan a rebision iti \"$1\"",
@@ -824,9 +833,10 @@
"searchprofile-everything-tooltip": "Birukem amin a linaon (uray dagiti tungtungan a panid)",
"searchprofile-advanced-tooltip": "Agbirukka kadagiti naiduma a nagan ti espasio",
"search-result-size": "$1 ({{PLURAL:$2|iti 1 a balikas|kadagiti $2 a balikas}})",
- "search-result-category-size": "{{PLURAL:$1|1 a kameng| dagiti $1 a kameng}} ({{PLURAL:$2|1 a subkategoria|dagiti $2 a subkategoria}}, {{PLURAL:$3|1 a papeles|dagiti $3 a papeles}})",
+ "search-result-category-size": "{{PLURAL:$1|1 a kameng| dagiti $1 a kameng}} ({{PLURAL:$2|1 a subkategoria|dagiti $2 a subkategoria}}, {{PLURAL:$3|1 a papeles|dagiti $3 a papeles}})",
"search-redirect": "(baw-ing ti $1)",
"search-section": "(paset $1)",
+ "search-category": "(kategoria $1)",
"search-file-match": "(maipada ti linaon a papeles)",
"search-suggest": "Daytoy kadi: $1",
"search-interwiki-caption": "Dagiti kakabsat a gandat",
@@ -837,7 +847,7 @@
"searchall": "amin",
"showingresults": "Maiparang dita baba agingga {{PLURAL:$1|iti <strong>1</strong> a nagbanagan|dagiti <strong>$1</strong> a nagbanagan}} a mangrugi ti #<strong>$2</strong>.",
"showingresultsinrange": "Mangipakpakita aginggana {{PLURAL:$1|iti <strong>1</strong> a resulta|dagiti <strong>$1</strong> a resulta}} iti sakop ti #<strong>$2</strong> aginggana ti #<strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5|Nagbanagan a <strong>$1</strong> iti <strong>$3</strong>|Dagiti Nagbanagan a <strong>$1 - $2</strong> iti <strong>$3</strong>}} para iti <strong>$4</strong>",
+ "search-showingresults": "{{PLURAL:$4|Nagbanagan a <strong>$1</strong> iti <strong>$3</strong>|Dagiti nagbanagan a <strong>$1 - $2</strong> iti <strong>$3</strong>}}",
"search-nonefound": "Awan dagiti nagbanagan a maipada ti usisa.",
"powersearch-legend": "Napasayat a panagbiruk",
"powersearch-ns": "Agbiruk kadagiti nagan ti espasio:",
@@ -846,12 +856,12 @@
"powersearch-togglenone": "Awan",
"powersearch-remember": "Lagipen ti napili para kadagiti masakbayan a panagbiruk",
"search-external": "Akinruar a panagbiruk",
- "searchdisabled": "Ti panagbiruk iti {{SITENAME}} ket nabaldado.\nMabalinmo ti agbiruk idiay Google tattan.\nLaglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.",
+ "searchdisabled": "Nabaldado ti panagbiruk iti {{SITENAME}}.\nMabalinmo itan ti agbiruk idiay Google.\nLaglagipem laeng a dagiti pagsurotan a linaon ti {{SITENAME}} ket mabalin a baak.",
"search-error": "Adda maysa a biddut a napasamak bayat nga agbirbiruk:$1",
"preferences": "Kakaykayatan",
"mypreferences": "Kakaykayatan",
"prefs-edits": "Bilang dagiti inurnos:",
- "prefsnologintext2": "Pangngaasi a $1 tapno mabaliwan dagiti kakaykayatam.",
+ "prefsnologintext2": "Pangngaasi a sumrek tapno mabaliwan dagiti kakaykayatam.",
"prefs-skin": "Kudil",
"skin-preview": "Ipadas",
"datedefault": "Awan ti kakaykayatan",
@@ -929,7 +939,7 @@
"gender-female": "Isuna ket babai nga agur-urnos ti pampanid ti wiki",
"prefs-help-gender": "Ti panangisaad daytoy a kakaykayatan ket saan a nasken.\nTi sopwer ket agus-usar iti pategna tapno tawagannaka ken ibaganaka kadagiti sabali nga agus-usar iti maitunos gramatika ti henero.\nDaytoy a pakaammo ket makitanto iti publiko.",
"email": "Esurat",
- "prefs-help-realname": "Saan a nasken ti pudno a nagan.\nNgem no kayatmo nga ited, maaramatto daytoy a kas pammadayaw ken pangpatalged para iti obram.",
+ "prefs-help-realname": "Saan a nasken ti pudno a nagan.\nNo maited, mabalin a maaramatto a panangited iti pammadayaw kenka iti obram.",
"prefs-help-email": "Ti esurat a pagtaengan ket saan a masapul, ngem masapul kadagiti panangisaad manen ti kontrasenias, no malipatam ti kontraseniasmo.",
"prefs-help-email-others": "Mabalinmo pay ti agpili tapno dagiti sabali nga agar-aramat ket mabalin nga esuratandaka babaen ti silpo ti panidmo wenno ti panid ti tungtungam.\nTi esurat a pagtaengam ket saan a maipakita no agkontak kenka dagiti agar-aramat.",
"prefs-help-email-required": "Masapul ti esurat a pagtaengan.",
@@ -950,6 +960,7 @@
"prefs-tokenwatchlist": "Tandaan",
"prefs-diffs": "Paggigiddiatan",
"prefs-help-prefershttps": "Daytoy a kakaykayatan ket mapakabaelanto iti sumaruno nga iseserrekmo.",
+ "prefswarning-warning": "Nagaramikka kadagiti panagbalbaliw kadagiti kakaykayatam a saan pay a naidulin.\nNo panawan daytoy a panid a saan nga agpindut iti \"$1\" dagiti kakaykayatam ket saanto a mapabaro.",
"prefs-tabs-navigation-hint": "Pakaammo: Mabalinmo nga usaren dagiti kanigid ken kanawan a tekla ti pana tapno madaliasat ti baetan dagiti etiketa iti listaan dagiti etiketa.",
"email-address-validity-valid": "Ti esurat a pagtaengan ket kasla umiso",
"email-address-validity-invalid": "Ikabil ti umiso nga esurat a pagtaengan",
@@ -957,7 +968,7 @@
"userrights-lookup-user": "Agtaripato kadagiti grupo ti agar-aramat",
"userrights-user-editname": "Mangiserrek iti nagan ti agar-aramat:",
"editusergroup": "Urnosen dagiti grupo ti agar-aramat",
- "editinguser": "Suksukatan ti karbengan ti agar-aramat ni '''[[User:$1|$1]]''' $2",
+ "editinguser": "Suksukatan ti karbengan ti agar-aramat ni <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "Urnosen dagiti grupo ti agar-aramat",
"saveusergroups": "Idulin dagiti grupo ti agar-aramat",
"userrights-groupsmember": "Kameng iti:",
@@ -1026,15 +1037,16 @@
"right-suppressrevision": "Agkita, agilemmeng ken agisubli ti pannakakita dagiti naisangayan a rebision dagiti panid manipud ti sinoman nga agar-aramat",
"right-viewsuppressed": "Agkita kadagiti rebision a nailemmeng manipud ti sinoman nga agar-aramat",
"right-suppressionlog": "Agkita kadagiti pribado a listaan",
- "right-block": "Agserra kadagiti sabali nga agar-aramat manipud iti panag-urnos",
+ "right-block": "Agserra kadagiti sabali nga agar-aramat manipud iti panagurnos",
"right-blockemail": "Agserra iti agar-aramat manipud ti panagipatulod ti esurat",
"right-hideuser": "Agserra iti nagan ti agar-aramat, ken agilemmeng manipud ti publiko",
"right-ipblock-exempt": "Labsanna dagiti serra ti IP, dagiti automatiko a serra ken dagiti sakop a serra.",
"right-proxyunbannable": "Labsanna dagiti automatiko a serra dagiti pannakbagi",
- "right-unblockself": "Bukod nga agikkat it pannaka-serra",
+ "right-unblockself": "Bukod nga agikkat it pannakaserra",
"right-protect": "Agsukat kadagiti agpang ti salaknib ken agurnos kadagiti nasalakniban ti sariap a panid",
"right-editprotected": "Agurnos kadagiti panid a nasalakniban a kas \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Agurnos kadagiti panid a nasalakniban a kas \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Urnosen ti modelo ti linaon iti panid",
"right-editinterface": "Agurnos iti interface ti agar-aramat",
"right-editusercssjs": "Agurnos kadagiti papales ti CSS ken JavaScript dagiti sabali nga agar-aramat",
"right-editusercss": "Agurnos kadagiti papeles ti CSS dagiti sabali nga agar-aramat",
@@ -1089,8 +1101,8 @@
"action-browsearchive": "agbiruk kadagiti naikkat a panid",
"action-undelete": "agisubli iti pannakaikkat iti daytoy a panid",
"action-suppressrevision": "agrepaso ken agisubli iti daytoy a nailemmeng a rebision",
- "action-suppressionlog": "agkita iti daytoy a pribalo a listaan",
- "action-block": "agserra iti daytoy nga agar-aramat manipud ti panag-urnos",
+ "action-suppressionlog": "agkita iti daytoy a pribado a listaan",
+ "action-block": "agserra iti daytoy nga agar-aramat manipud ti panagurnos",
"action-protect": "mangsukat kadagiti lessaad ti salaknib para iti daytoy a panid",
"action-rollback": "napardas a mangisubli kadagiti inurnos ti kinaudi nga agar-aramat a nagurnos iti naisangsangayan a panid",
"action-import": "agala ti pampanid manipud ti sabali a wiki",
@@ -1107,6 +1119,7 @@
"action-viewmywatchlist": "agkita iti bukodmo a listaan ti bambantayan",
"action-viewmyprivateinfo": "agkita iti bukodmo a pribado a pakaammo",
"action-editmyprivateinfo": "agurnos iti bukodmo a pribado a pakaammo",
+ "action-editcontentmodel": "urnosen ti modelo ti linaon iti panid",
"nchanges": "$1 {{PLURAL:$1|sinukatan|dagiti sinukatan}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|manipud ti naudi a panagsarungkar}}",
"enhancedrc-history": "pakasaritaan",
@@ -1115,16 +1128,16 @@
"recentchanges-summary": "Siputen ti kaudian a balbaliw iti wiki iti daytoy a panid.",
"recentchanges-noresult": "Awan ti nasuksukatan iti las-ud ti naited a paset ti panawen a kapada dagitoy a kriteria.",
"recentchanges-feed-description": "Siputen ti kaudian a balbaliw iti wiki iti daytoy a pakan.",
- "recentchanges-label-newpage": "Daytoy a panag-urnos ket nakapartuat iti baro a panid",
- "recentchanges-label-minor": "Daytoy ket bassit a panag-urnos",
- "recentchanges-label-bot": "Daytoy a panag-urnos ket inaramid babaen ti bot",
- "recentchanges-label-unpatrolled": "Daytoy a panag-urnos ket saan pay a napatruliaan",
+ "recentchanges-label-newpage": "Daytoy a panagurnos ket nakapartuat iti baro a panid",
+ "recentchanges-label-minor": "Daytoy ket bassit a panagurnos",
+ "recentchanges-label-bot": "Daytoy a panagurnos ket inaramid babaen ti bot",
+ "recentchanges-label-unpatrolled": "Daytoy a panagurnos ket saan pay a napatruliaan",
"recentchanges-label-plusminus": "Ti panagbaliw ti kadakkel ti panid babaen ti bilang dagiti byte",
"recentchanges-legend-heading": "'''Leyenda:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kitaen pay ti [[Special:NewPages|listaan ti baro a pampanid]])",
"rcnotefrom": "Dita baba ket {{PLURAL:$5|ti sinukatan|dagiti sinukatan}} manipud idi <strong>$3, $4</strong> (aginggana iti <strong>$1</strong> a naipakita).",
"rclistfrom": "Ipakita dagiti kabarbaro a sinukatan a mangrugi manipud idi $2, $3",
- "rcshowhideminor": "$1 dagiti bassit a panag-urnos",
+ "rcshowhideminor": "$1 dagiti bassit a panagurnos",
"rcshowhideminor-show": "Ipakita",
"rcshowhideminor-hide": "Ilemmeng",
"rcshowhidebots": "$1 dagiti bot",
@@ -1136,7 +1149,7 @@
"rcshowhideanons": "$1 dagiti di ammo nga agar-aramat",
"rcshowhideanons-show": "Ipakita",
"rcshowhideanons-hide": "Ilemmeng",
- "rcshowhidepatr": "$1 dagiti napatrulian a panag-urnos",
+ "rcshowhidepatr": "$1 dagiti napatrulian a panagurnos",
"rcshowhidepatr-show": "Ipakita",
"rcshowhidepatr-hide": "Ilemmeng",
"rcshowhidemine": "$1 dagiti inurnosko",
@@ -1152,7 +1165,7 @@
"boteditletter": "b",
"number_of_watching_users_pageview": "[$1 nga agbuybuya {{PLURAL:$1|nga agar-aramat|kadagiti agar-aramat}}]",
"rc_categories": "Patingga dagiti kategoria (pagsinaen iti \"|\")",
- "rc_categories_any": "Uray ania",
+ "rc_categories_any": "Ania man",
"rc-change-size-new": "$1 {{PLURAL:$1|a byte|kadagiti byte}} kalpasan ti panag-sukat",
"newsectionsummary": "/* $1 */ baro a paset",
"rc-enhanced-expand": "Ipakita dagiti salaysay",
@@ -1175,8 +1188,8 @@
"upload_directory_read_only": "Ti pagikargaan a direktorio ($1) ket saan a masuratan babaen ti webserver.",
"uploaderror": "Biddut ti panagikarga",
"upload-recreate-warning": "<strong>Ballag: Ti papeles babaen ti dayta a nagan ket naikkat wenno naiyalis.</strong>\n\nTi listaan ti panagikkat ken panagiyalis para iti daytoy a panid ket naited ditoy para iti pakainugotan:",
- "uploadtext": "Usaren ti porma dita baba tapno makaikarga iti papeles.\nTi panagkita wenno panagbiruk ti dati a naikarga a papeles mapan idiay [[Special:FileList|listaan dagiti naikarga a papeles]], dagiti naikarga wenno naikarga manen ket nailista pay idiay [[Special:Log/upload|listaan ti panagikarga]], dagiti panagikkat ket idiay [[Special:Log/delete|listaan ti panagikkat]].\n\nTi panangiraman ti papeles iti panid, usaren ti silpo a kas dagiti sumaganad a porma:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> tapno mausar ti napno a bersion ti papeles \n* <strong><code><nowiki>[[</nowiki>{{ns:file<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> tapno mausar ti 200 a piksel a kalawa a panagiparang iti kanigid a margin nga addaan iti \"alt text\"a kas ti deskripsion\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> para iti dagus a panangisilpo iti papeles nga awan ti panangipakita ti papeles",
- "upload-permitted": "Dagiti mapalubosan a kita ti papeles: $1.",
+ "uploadtext": "Usaren ti porma dita baba tapno makaikarga iti papeles.\nTi panagkita wenno panagbiruk ti dati a naikarga a papeles mapan idiay [[Special:FileList|listaan dagiti naikarga a papeles]], dagiti naikarga wenno naikarga manen ket nailista pay idiay [[Special:Log/upload|listaan ti panagikarga]], dagiti panagikkat ket idiay [[Special:Log/delete|listaan ti panagikkat]].\n\nTi panangiraman ti papeles iti panid, usaren ti silpo a kas dagiti sumaganad a porma:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> tapno mausar ti napno a bersion ti papeles \n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> tapno mausar ti 200 a piksel a kalawa a panagiparang iti kanigid a margin nga addaan iti \"alt text\"a kas ti deskripsion\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> para iti dagus a panangisilpo iti papeles nga awan ti panangipakita ti papeles",
+ "upload-permitted": "Dagiti maipalubos a kita ti papeles: $1.",
"upload-preferred": "Dagiti kaykayat a kita ti papeles: $1.",
"upload-prohibited": "Dagiti maiparit a kita ti papeles: $1.",
"uploadlogpage": "Listaan ti panagikarga",
@@ -1187,8 +1200,8 @@
"filereuploadsummary": "Dagiti pannakasukat ti papeles:",
"filestatus": "Kasasaad ti karbengan ti kopia:",
"filesource": "Taudan:",
- "ignorewarning": "Di ikaskaso ti ballaag ket idulin latta ti papeles",
- "ignorewarnings": "Di ikaskaso dagiti aniaman a ballaag",
+ "ignorewarning": "Di ikaskaso ti ballaag ken idulin latta ti papeles",
+ "ignorewarnings": "Di ikaskaso dagiti ania man a ballaag",
"minlength1": "Dagiti nagan ti papeles ket nasken a saan a basbassit ngem maysa a letra.",
"illegalfilename": "Ti nagan ti papeles ti \"$1\" ket aglaon kadagiti karakter a saan a maipalubos kadagiti titulo ti panid.\nPangngaasi a naganan manen ti papeles ken padasen manen nga ikarga.",
"filename-toolong": "Dagiti nagan ti papeles ket nasken a saan nga at-atiddog ngem dagiti 240 a byte.",
@@ -1196,7 +1209,7 @@
"filetype-mime-mismatch": "Ti pagpa-atiddog ti papeles ti \".$1\" ket saan a maipada iti naduktalan a kita ti MIME iti papeles ($2).",
"filetype-badmime": "Dagiti papeles a kita ti MIME ti \"$1\" ket saan a maipalubos a maikarga.",
"filetype-bad-ie-mime": "Saan a maikarga daytoy a papeles gapu ta maduktalan ti Internet Explorer a kas \"$1\", a saan a maipalubos ken makapataud ti dakes a kita ti papeles.",
- "filetype-unwanted-type": "Ti <strong>\".$1\"</strong> ket mays a di kayat a kita ti papeles.\nTi kaykayat {{PLURAL:$3|a kita ti papeles ket|a kita dagiti papeles ket}} $2.",
+ "filetype-unwanted-type": "Ti <strong>\".$1\"</strong> ket maysa a di kayat a kita ti papeles.\nTi kaykayat {{PLURAL:$3|a kita ti papeles ket|a kita dagiti papeles ket}} $2.",
"filetype-banned-type": "Ti <strong>\".$1\"</strong> {{PLURAL:$4|ket saan a maipalubos a kita ti papeles|ket dagiti saan a maipalubos a kita ti papeles}}.\nTi mapalubosan {{PLURAL:$3|a kita ti papeles ket|a kita dagiti papeles ket}} $2.",
"filetype-missing": "Daytoy a papeles ket awan ti pagpaatiddogna (kasla ti \".jpg\").",
"empty-file": "Ti papeles nga intedmo ket awan linaonna.",
@@ -1208,7 +1221,7 @@
"illegal-filename": "Ti nagan ti papeles ket saan a maipalubos.",
"overwrite": "Saan a maipalubos ti mangsurat manen iti addan a papeles.",
"unknown-error": "Napasamak ti maysa a di ammo a biddut.",
- "tmp-create-error": "Saan a makapartuat ti temporario a papeles.",
+ "tmp-create-error": "Saan a makapartuat iti temporario a papeles.",
"tmp-write-error": "Biddut ti panagsurat iti temporario a papeles.",
"large-file": "Maisingasing a dagiti papeles ket saan a dakdakkel ngem $1;\ndaytoy a papeles ket $2.",
"largefileserver": "Daytoy a papeles ket dakdakel ngem ti ipalubos a pannakaaramid ti server.",
@@ -1232,7 +1245,7 @@
"uploaddisabledtext": "Nabaldado dagiti panagikarga ti papeles.",
"php-uploaddisabledtext": "Dagiti panangikarga ti papeles ket nabaldado iti PHP.\nPanngaasi a kitaem ti pannakaisaad ti panagikarga ti papeles.",
"uploadscripted": "Daytoy a papeles ket naglaon ti HTML wenno eskritu ti kodigo a mabalin a kamali nga inpatarus babaen ti pagbasabasa ti web.",
- "uploadscriptednamespace": "Daytoy a papeles ti SVG ket aglaon ti maysa a saan a mabalin a nagan ti espasio ti \"$1\"",
+ "uploadscriptednamespace": "Daytoy a papeles ti SVG ket aglaon ti maysa a saan a mabalin a nagan ti espasio ti \"$1\".",
"uploadinvalidxml": "Ti XML iti naikarga a papeles ket saan a maiwaswas.",
"uploadvirus": "Ti papeles ket aglaon ti birus! \nDagiti salaysay: $1",
"uploadjava": "Daytoy a papeles ket papeles ti ZIP nga aglaon ti Java .a klase ti papeles.\nTi panangikarga ti papales ti Java ket saan a maipalubos gapu ta makapataudda a manglabas kadagiti panangigawid ti seguridad.",
@@ -1306,7 +1319,7 @@
"uploadstash-summary": "Daytoy a panid ket mangited ti panagserrek kadagiti papeles a naikarga wenno mangrugrugi iti proseso a maikarga, ngem saan pay a naipablaak iti wiki. Dagitoy a papeles ket saan a makita ti sinoman ngem ti laeng agar-aramat a nagikarga kaniada.",
"uploadstash-clear": "Dalusan dagiti na-stash a papeles",
"uploadstash-nofiles": "Awan ti na-stash a papelesmo.",
- "uploadstash-badtoken": "Ti panag-tungpal dayta nga aramid ket napaay, ngamin ta dagiti talekmo ti panag-urnos ket nagpason. Padasen manen.",
+ "uploadstash-badtoken": "Ti panag-tungpal dayta nga aramid ket napaay, ngamin ta dagiti talekmo ti panagurnos ket nagpason. Padasen manen.",
"uploadstash-errclear": "Ti panagdalus kadagiti papeles ket napaay.",
"uploadstash-refresh": "Pasadiwaen dagiti listaan ti papeles",
"invalid-chunk-offset": "Imbalido a pirgis ti timbengan",
@@ -1369,7 +1382,7 @@
"filehist-dimensions": "Dagiti rukod",
"filehist-filesize": "Kadakkel ti papeles",
"filehist-comment": "Komentario",
- "imagelinks": "Panag-usar ti papeles",
+ "imagelinks": "Panagusar iti papeles",
"linkstoimage": "Ti sumaganad {{PLURAL:$1|a silsilpo ti panid|kadagiti $1 a silpo ti pampanid}} iti daytoy a papeles:",
"linkstoimage-more": "Ad-adu ngem $1 {{PLURAL:$1|a silsilpo ti panid|a silpo ti pampanid}} iti daytoy a papeles.\nTi sumaganad a listaan ket mangipakita {{PLURAL:$1|ti umona a silpo ti panid|kadagiti umuna a $1 a silsilpo ti panid}} iti daytoy laeng a papeles.\nMagun-od ti [[Special:WhatLinksHere/$2|kompleto a listaan]].",
"nolinkstoimage": "Awan ti pampanid a nakasilpo iti daytoy a papeles.",
@@ -1428,14 +1441,13 @@
"randomincategory": "Pugto a panid iti kategoria",
"randomincategory-invalidcategory": "Ti \"$1\" ket saan nga umisu a nagan ti kategoria.",
"randomincategory-nopages": "Awan ti pampanid iti kategoria ti [[:Category:$1]].",
- "randomincategory-selectcategory": "Agala ti pugto a panid manipud ti kategoria: $1 $2.",
- "randomincategory-selectcategory-submit": "Inkan",
+ "randomincategory-category": "Kategoria:",
+ "randomincategory-legend": "Pugto a panid iti kategoria",
"randomredirect": "Pugto a baw-ing",
"randomredirect-nopages": "Awan dagiti baw-ing iti daytoy a nagan ti espasio ti \"$1\".",
"statistics": "Estadistika",
"statistics-header-pages": "Estadistika ti panid",
- "statistics-header-edits": "Estadistika ti panag-urnos",
- "statistics-header-views": "Estadistika ti panagkita",
+ "statistics-header-edits": "Estadistika ti panagurnos",
"statistics-header-users": "Estadistika ti agar-aramat",
"statistics-header-hooks": "Sabali nga estadistika",
"statistics-articles": "Dagiti naglaon a panid",
@@ -1444,13 +1456,9 @@
"statistics-files": "Dagiti naikarga a papeles",
"statistics-edits": "Dagiti naurnos a panid manipud idi nairugi ti {{SITENAME}}",
"statistics-edits-average": "Dagiti pagtengngaan nga inurnos iti tunggal maysa a panid",
- "statistics-views-total": "Dagiti dagup ti panagkita",
- "statistics-views-total-desc": "Dagiti panagkita ti awan a pampanid ken saan a mairaman dagiti espesial a panid",
- "statistics-views-peredit": "Panagkita iti tunggal maysa a panag-urnos",
"statistics-users": "Dagiti nakarehistro nga [[Special:ListUsers|agar-aramat]]",
"statistics-users-active": "Dagiti aktibo nga agar-aramat",
"statistics-users-active-desc": "Dagiti agar-aramat a nagtungpal ti aramid iti napalabas nga {{PLURAL:$1|aldaw|$1 nga al-aldaw}}",
- "statistics-mostpopular": "Kaaduan a nabuya a pampanid",
"pageswithprop": "Pampanid nga adda tagikua ti panid",
"pageswithprop-legend": "Pampanid nga adda tagikua ti panid",
"pageswithprop-text": "Daytoy a panid ket ilistana ti pampanid nga agus-usar ti naisangayan a tagikua ti panid.",
@@ -1473,15 +1481,15 @@
"withoutinterwiki-submit": "Ipakita",
"fewestrevisions": "Dagiti panid nga adda kadagiti kabassitan a rebision",
"nbytes": "$1 {{PLURAL:$1|a byte|dagiti byte}}",
- "ncategories": "$1 {{PLURAL:$1|a kategoria|a katkategoria}}",
+ "ncategories": "$1 a {{PLURAL:$1|kategoria|katkategoria}}",
"ninterwikis": "$1 {{PLURAL:$1|nga interwiki|dagiti interwiki}}",
"nlinks": "$1 {{PLURAL:$1|a silpo|kadagiti silpo}}",
- "nmembers": "$1 {{PLURAL:$1|a kameng|kamkameng}}",
- "nmemberschanged": "$1 → $2 {{PLURAL:$2|kameng|kamkameng}}",
+ "nmembers": "$1 a {{PLURAL:$1|kameng|kamkameng}}",
+ "nmemberschanged": "$1 → $2 a {{PLURAL:$2|kameng|kamkameng}}",
"nrevisions": "$1 {{PLURAL:$1|a rebison|kadagiti rebision}}",
"nviews": "$1 {{PLURAL:$1|a panangkita|kadagiti panangkita}}",
- "nimagelinks": "Inusar iti $1 {{PLURAL:$1|a panid|a pampanid}}",
- "ntransclusions": "inusar iti $1 {{PLURAL:$1|a panid|a pampanid}}",
+ "nimagelinks": "Inusar iti $1 a {{PLURAL:$1|panid|pampanid}}",
+ "ntransclusions": "inusar iti $1 a {{PLURAL:$1|panid|pampanid}}",
"specialpage-empty": "Awan dagiti nagbanagan daytoy a reporta.",
"lonelypages": "Dagiti naulila a panid",
"lonelypagestext": "Dagiti sumaganad a panid ket saan a nakasilpo wenno nailak-am kadagiti sabali a panid iti {{SITENAME}}.",
@@ -1491,7 +1499,6 @@
"uncategorizedtemplates": "Dagiti saan a nakategoria a plantilia",
"unusedcategories": "Dagiti saan a nausar a kategoria",
"unusedimages": "Dagiti saan a nausar a papeles",
- "popularpages": "Dagiti nadayeg a panid",
"wantedcategories": "Dagiti makiddaw a kategoria",
"wantedpages": "Dagiti makiddaw a panid",
"wantedpages-badtitle": "Imbalido a titulo iti agasmang ti nagbanagan: $1",
@@ -1503,12 +1510,12 @@
"wantedtemplates": "Dagiti makiddaw a plantilia",
"mostlinked": "Dagiti panid a kaaduan iti nakasilpo",
"mostlinkedcategories": "Dagiti kategoria a kaaduan iti nakasilpo",
- "mostlinkedtemplates": "Kaaduan a nailak-am a pampanid",
+ "mostlinkedtemplates": "Dagiti panid a kaaduan a nailak-am",
"mostcategories": "Dagiti panid a kaaduan kadagiti kategoria",
"mostimages": "Dagiti papeles a kaaduan iti nakasilpo",
"mostinterwikis": "Dagiti panid a kaaduan kadagiti interwiki",
- "mostrevisions": "Dagiti artikulo a kaaduan kadagiti rebision",
- "prefixindex": "Dagiti amin a panid nga addaan iti pasaruno",
+ "mostrevisions": "Dagiti panid a kaaduan kadagiti rebision",
+ "prefixindex": "Amin a pampanid nga addaan iti pasaruno",
"prefixindex-namespace": "Amin a pampanid nga addaan iti pasaruno (nagan ti espasio ti $1)",
"prefixindex-strip": "Ikkaten ti pasaruno iti listaan",
"shortpages": "Dagiti ababa a panid",
@@ -1524,7 +1531,7 @@
"protectedpages-timestamp": "Petsa ken oras",
"protectedpages-page": "Panid",
"protectedpages-expiry": "Agpaso",
- "protectedpages-performer": "Salakniban ti agar-aramat",
+ "protectedpages-performer": "Nangsalaknib nga agar-aramat",
"protectedpages-params": "Dagiti parametro ti panagsalaknib",
"protectedpages-reason": "Rason",
"protectedpages-unknown-timestamp": "Di ammo",
@@ -1553,9 +1560,11 @@
"pager-older-n": "{{PLURAL:$1|nadadaan a 1|nadadaan a $1}}",
"suppress": "Pakapansin",
"querypage-disabled": "Daytoy nga espesial a panid ket nabaldado gapu kadagiti rason ti kasayaat ti panagpataray.",
+ "apihelp": "Tulong ti API",
+ "apihelp-no-such-module": "Saan a nabirukan ti modulo ti \"$1\".",
"booksources": "Dagiti taudan ti libro",
"booksources-search-legend": "Agbiruk para kadagiti taudan ti libro",
- "booksources-go": "Inkan",
+ "booksources-search": "Biruken",
"booksources-text": "Dita baba ket listaan dagiti silpo ti sabali a sitio nga aglaklako ti baro ken saan a nausar a liblibro, ken mabalin nga addaan pay iti adu a pakaammo a maipanggep kadagiti libro a birbirukem:",
"booksources-invalid-isbn": "Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad manipud ti kasisigud a taudan.",
"specialloguserlabel": "Perpormer:",
@@ -1630,13 +1639,13 @@
"trackingcategories-msg": "Pagsurotan a kategoria",
"trackingcategories-name": "Nagan ti mensahe",
"trackingcategories-desc": "Kriteria ti panangiraman ti kategoria",
- "noindex-category-desc": "Ti panid ket saan naipagsurotan babaen dagiti robot gapu ta addaan iti salamangka a balikas ti <code><nowiki>__NOINDEX__</nowiki></code> ken adda iti nagan ti espasio a maipalubos ti wagayway.",
+ "noindex-category-desc": "Ti panid ket saan naipagsurotan babaen dagiti robot gapu ta addaan iti salamangka a balikas iti <code><nowiki>__NOINDEX__</nowiki></code> ken adda iti nagan ti espasio a maipalubos ti wagayway.",
"index-category-desc": "Ti panid ket addaan iti <code><nowiki>__INDEX__</nowiki></code> (ken adda iti nagan ti espasio a maipalubos ti wagayway), ken isu a naipagsurotan babaen dagiti robot ngem no iti kadawyan ket saan.",
- "post-expand-template-inclusion-category-desc": "Kalpasan ti panagpadakkel kadagiti amin a plantilia, ti kadakkel ti panid ket dakdakkel ngem ti <code>$wgMaxArticleSize</code>, isu a dagiti plantilia ket saan a napadakkel.",
- "post-expand-template-argument-category-desc": "Kalpasan ti panagpadakkel ti argumento ti plantilia (dagiti addaan iti tallo a pangrikep, kasla ti <code>{{{Foo}}}</code>), ti panid ket dakdakkel ngem ti <code>$wgMaxArticleSize</code>.",
- "expensive-parserfunction-category-desc": "Adu unay dagiti nangina nga annong ti parser (kasla ti <code>#ifexist</code>) a nairaman iti panid. Kitaen ti [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
- "broken-file-category-desc": "Kategoria a nainayon no ti panid ket aglaon ti nadadael a silpo ti papeles (ti silpo a panangisengngat ti papeles no awan ti papeles).",
- "hidden-category-category-desc": "Daytoy ket kategoria nga addaan iti <code><nowiki>__HIDDENCAT__</nowiki></code> , a mangpawil daytoy nga agparang kadagiti silpo ti kahon ti kategoria kadagiti panid, babaen ti kasisigud.",
+ "post-expand-template-inclusion-category-desc": "Ti kadakkel ti panid ket dakdakkel ngem <code>$wgMaxArticleSize</code> kalpasan ti panangipadakkel amin dagiti plantilia, isu nga adda met dagiti plantilia a saan a naipadakkel",
+ "post-expand-template-argument-category-desc": "Ti panid ket dakdakkel ngem <code>$wgMaxArticleSize</code> kalpasan ti panagpadakkel ti argumento (kasla banag kadagiti tallo a pangrikep, kasla ti <code>{{{Foo}}}</code>).",
+ "expensive-parserfunction-category-desc": "Ti panid ket agus-usar iti adu unay kadagiti annong ti nangina a parser (kasla ti <code>#ifexist</code>) a nairaman iti panid. Kitaen ti [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "Ti panid ket aglaon ti nadadael a silpo ti papeles (ti silpo a panangisengngat ti papeles no awan ti papeles).",
+ "hidden-category-category-desc": "Ti kategoria ket aglaon ti <code><nowiki>__HIDDENCAT__</nowiki></code> iti panid a linaonna, a mangpawil daytoy nga agparang kadagiti silpo ti kahon ti kategoria kadagiti panid babaen ti kasisigud.",
"trackingcategories-nodesc": "Awan ti magun-od a deskripsion.",
"trackingcategories-disabled": "Nabaldado ti kategoria",
"mailnologin": "Awan ti pagipatulodan a pagtaengan",
@@ -1645,7 +1654,7 @@
"emailuser-title-target": "Esuratam daytoy nga {{GENDER:$1|agar-aramat}}",
"emailuser-title-notarget": "Esuratan ti agar-aramat",
"emailpage": "Esuratan ti agar-aramat",
- "emailpagetext": "Mabalinmo nga usaren ti porma dita baba tapno makaipatulod ti esurat a mensahe iti daytoy nga {{GENDER:$1|agar-aramat}}.\nTi esurat nga inkabilmo iti [[Special:Preferences|kakaykayatam]] ket agparang a kas \"Naggapu\" a pagtaengan ti esurat, tapno ti nagipatulodam ket makasungbat kenka.",
+ "emailpagetext": "Mabalinmo nga usaren ti porma dita baba tapno makaipatulod iti esurat a mensahe iti daytoy nga {{GENDER:$1|agar-aramat}}.\nTi esurat nga inkabilmo iti [[Special:Preferences|kakaykayatam]] ket agparang a kas \"Naggapo\" a pagtaengan ti esurat, tapno ti nagipatulodam ket makasungbat kenka.",
"defemailsubject": "Esurat ti {{SITENAME}} a naggapo kenni \"$1\"",
"usermaildisabled": "Saanmo a mabalin ti agipatulod ti esurat",
"usermaildisabledtext": "Saanmo a mabalin ti agipatulod ti esurat kadagiti sabali nga agar-aramat iti daytoy a wiki",
@@ -1673,7 +1682,7 @@
"mywatchlist": "Bambantayan",
"watchlistfor2": "Para iti $1 $2",
"nowatchlist": "Awan ti banag iti listaan dagiti bambantayam.",
- "watchlistanontext": "Pangngaasim ti $1 tapno makitam dagiti inurnosmo dita bambantayam.",
+ "watchlistanontext": "Pangngaasi a sumrek tapno makitam dagiti inurnosmo dita bambantayam.",
"watchnologin": "Saan a nakastrek",
"addwatch": "Inayon iti listaan ti bambantayan",
"addedwatchtext": "Ti panid iti \"[[:$1]]\" ket nainayonen idiay [[Special:Watchlist|listaan ti bambantayam]].\nDagiti masakbayan a panagsukat iti daytoy a panid ken dagiti mainaig a tungtunganna a panid ket mailistanto idiay.",
@@ -1691,7 +1700,7 @@
"wlheader-enotif": "Napakabaelan ti panangipakaammo ti esurat.",
"wlheader-showupdated": "Dagiti panid a nasukatanen manipud ti kinaudi a panagsarungkarmo ket naipakita iti <strong>napuskol</strong>.",
"wlnote": "Dita baba ket {{PLURAL:$1|naudi a sinukatan|dagiti naudi a <strong>$1</strong> a sinukatan}} iti napalabas {{PLURAL:$2|nga oras|a <strong>$2</strong> nga or-oras}}, manipud idi $3, $4.",
- "wlshowlast": "Ipakita dagiti naudi a $1 nga or-oras $2 nga al-aldaw $3",
+ "wlshowlast": "Ipakita dagiti naudi a $1 nga or-oras $2 nga al-aldaw",
"watchlist-options": "Dagiti pagpilian ti listaan a bambantayan",
"watching": "Bambantayan...",
"unwatching": "Saanen a bantayan...",
@@ -1708,7 +1717,7 @@
"enotif_body_intro_moved": "Ti {{SITENAME}} a panid ti $1 ket naiyalisen idi $PAGEEDITDATE babaen ni {{gender:$2|$2}}, kitaen ti $3 para iti agdama panagbaliw.",
"enotif_body_intro_restored": "Ti {{SITENAME}} a panid ti $1 ket naipulangen idi $PAGEEDITDATE babaen ni {{gender:$2|$2}}, kitaen ti $3 para iti agdama panagbaliw.",
"enotif_body_intro_changed": "Ti {{SITENAME}} a panid ti $1 ket nasukatanen idi $PAGEEDITDATE babaen ni {{gender:$2|$2}}, kitaen ti $3 para iti agdama panagbaliw.",
- "enotif_lastvisited": "Kitaen ti $1 para iti am-amin a panagsukat sipud ti naudi nga isasarungkarmo.",
+ "enotif_lastvisited": "Kitaen ti $1 para iti amin a panagsukat sipud ti naudi nga isasarungkarmo.",
"enotif_lastdiff": "Kitaen ti $1 tapno mabuya daytoy a panagsukat.",
"enotif_anon_editor": "di am-ammo nga agar-aramat $1",
"enotif_body": "Nadungngo a $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nPakabuklan ti mannurat: $PAGESUMMARY $PAGEMINOREDIT\n\nKontaken ti mannurat:\nsurat: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nAwanton dagiti sabali a pakaammo iti kaso ti adu pay a panagtigtignay malaksid no sarungkaram datoy a panid bayat a nakastrekka. Mabalinmo pay nga isaad manen dagiti wagayway ti pakaammo para kadagiti amin a bambantayam a panid idiay listaan ti bambantayam.\n\nTi mannakigayyem a sistema ti panagpaammo ti {{SITENAME}} \n\n--\nTi panagsukat ti kasasaad ti esurat a pagpa-ammom, sarungkaram ti\n{{canonicalurl:{{#special:Preferences}}}}\n\nTi panagsukat kadagiti kasasaad ti listaan ti bambantayam, sarungkaram ti\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nTi panagikkat ti panid kadagiti listaan ti bambantayam, sarungkaram ti\n$UNWATCHURL\n\nTi makunkunam ken no masapulmo pay ti tulong:\n$HELPPAGE",
@@ -1721,8 +1730,8 @@
"exbeforeblank": "ti linaon sakbay idi nablanko ket: \"$1\"",
"delete-confirm": "Ikkaten ti \"$1\"",
"delete-legend": "Ikkaten",
- "historywarning": "<strong>Ballaag:</strong> Ti panid a kayatmo nga ikkaten ket adda pakasaritaanna ti agarup a $1 {{PLURAL:$1|a rebision|kadagiti rebision}}:",
- "confirmdeletetext": "Mangrugrugika a mangikkat ti maysa a panid a kakuyogna amin ti pakasaritaanna.\nPangngaasi a pasingkedam a talaga a kayatmo nga aramiden daytoy, a maawatam ti bunga ti panangikkatmo, ken aramidem daytoy kas maiyannugot iti [[{{MediaWiki:Policy-url}}|annuroten]].",
+ "historywarning": "<strong>Ballaag:</strong> Ti panid a kayatmo nga ikkaten ket adda pakasaritaanna iti $1 {{PLURAL:$1|a rebision|kadagiti rebision}}:",
+ "confirmdeletetext": "Mangrugrugika a mangikkat iti maysa a panid a kakuyog amin ti pakasaritaanna.\nPangngaasi a pasingkedam a naikeddeng a kayatmo nga aramiden daytoy, a maawatam ti pagbnagan ti panangikkatmo, ken aramidem daytoy a kas maiyannugot iti [[{{MediaWiki:Policy-url}}|annuroten]].",
"actioncomplete": "Nalpasen ti aramid",
"actionfailed": "Napaay ti aramid",
"deletedtext": "Naikkaten ti \"$1\".\nKitaen ti $2 para iti pannakairehistro dagiti naudi a pangikkat.",
@@ -1736,20 +1745,20 @@
"deletereason-dropdown": "* Kadawyan a rasrason ti panagikkat\n** Spam\n** Bandalismo\n** Panaglabsing iti karbengan ti kopia\n** Kiddaw ti mannurat\n** Naputed a baw-ing",
"delete-edit-reasonlist": "Urnosen dagiti rason ti panagikkat",
"delete-toobig": "Daytoy a panid ket dakkel ti pakasaritaanna, sumurok a $1 {{PLURAL:a panagbaliwan|dagiti panagbaliwan}}.\nTi panagikkat ti kastoy a pammpanid ket naparitan tapno mapawilan ti saan nga inkarkaro a pannakadadael ti {{SITENAME}}.",
- "delete-warning-toobig": "Daytoy a panid ket adda ti dakkel unay a pakasaritaan ti panag-urnos, ti kaadu nga $1 {{PLURAL:$1|panagbaliw|dagiti panagbaliw}}.\nTi panagikkat ket madisturbo ti panagpataray ti database ti {{SITNAME}};\nagal-aluadka a mangrugi.",
+ "delete-warning-toobig": "Daytoy a panid ket adda ti dakkel unay a pakasaritaan ti panagurnos, ti kaadu nga $1 {{PLURAL:$1|panagbaliw|dagiti panagbaliw}}.\nTi panagikkat ket madisturbo ti panagpataray ti database ti {{SITNAME}};\nagal-aluadka a mangrugi.",
+ "deleteprotected": "Saanmo a maikkat daytoy a panid gapu ta nasalaknibanen.",
"deleting-backlinks-warning": "'''Ballaag:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Dagiti dadduma a panid]] ket naisilpo wenno nailak-am manipud ti panid a gangani nga ikkatem.",
- "rollback": "Isubli dagiti panag-urnos",
- "rollback_short": "Isubli",
+ "rollback": "Isubli dagiti panagurnos",
"rollbacklink": "isubli",
"rollbacklinkcount": "agisubli ti $1 {{PLURAL:$1|nga inurnos|nga inur-urnos}}",
"rollbacklinkcount-morethan": "agisubli ti ad-adu ngem $1 {{PLURAL:$1|nga inurnos|nga inur-urnos}}",
"rollbackfailed": "Napaay ti panangisubli",
"cantrollback": "Saan a maisubli ti panagurnos;\nti naudi a nakaaramid ket iti laeng nagsurat iti daytoy a panid.",
"alreadyrolled": "Saan a maipasubli ti kinaudi a panagurnos iti [[:$1]] babaen ni [[User:$2|$2]] ([[User talk:$2|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nadda sabali a naurnos wenno nagipasubli ti panid.\n\nTi kinaudi a panagurnos ti daytoy a panid ket babaen ni [[User:$3|$3]] ([[User talk:$3|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
- "editcomment": "Ti pakabuklan ti panag-urnos idi ket: \"''$1''\".",
- "revertpage": "Insubli ti panag-urnos babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]]), naisubli ti kinaudi a rebision babaen ni [[User:$1|$1]]",
+ "editcomment": "Ti pakabuklan ti panagurnos idi ket: \"''$1''\".",
+ "revertpage": "Insubli ti panagurnos babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]]), naisubli ti kinaudi a rebision babaen ni [[User:$1|$1]]",
"revertpage-nouser": "Naisubli dagiti inurnos babaen ti nailemmeng nga agar-aramat iti kinaudi a rebision babaen ni {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "Naibabawi dagiti panag-urnos babaen ni $1;\nnaisubli manen ti naudi a rebision babaen ni $2.",
+ "rollback-success": "Naibabawi dagiti panagurnos babaen ni $1;\nnaisubli manen ti naudi a rebision babaen ni $2.",
"sessionfailure-title": "Napaay ti sesion",
"sessionfailure": "Adda parikut ti sesion ti panagserrekmo;\ndaytoy nga aramid ket naibabawi a kas pagpawilan ti panaghijack ti sesion.\nAgsublika iti naggapuam a panid, ikargam manen ti panid ken padasen manen.",
"protectlogpage": "Listaan ti panagsalaknib",
@@ -1789,9 +1798,10 @@
"protect-othertime": "Sabali nga oras:",
"protect-othertime-op": "sabali nga oras",
"protect-existing-expiry": "Ti adda a panagpaso ti oras: $3, $2",
+ "protect-existing-expiry-infinity": "Ti adda a panagpaso ti oras: inggana't inggana",
"protect-otherreason": "Sabali/maipatinayon a rason:",
"protect-otherreason-op": "Sabali a rason",
- "protect-dropdown": "*Kadawyan a rasrason ti panagsalaknib\n** Adu unay a bandalismo\n** Adu unay a panagspam\n** Saan a produktibo ti agsinnungat a panag-urnos\n** Adu unay nga agbuybuya iti panid",
+ "protect-dropdown": "*Kadawyan a rasrason ti panagsalaknib\n** Adu unay a bandalismo\n** Adu unay a panagspam\n** Saan a produktibo ti agsinnungat a panagurnos\n** Adu unay nga agbuybuya iti panid",
"protect-edit-reasonlist": "Urnosen dagiti rason ti salaknib",
"protect-expiry-options": "1 nga oras:1 hour,1 nga aldaw:1 day,1 a lawas:1 week,2 a lawas:2 weeks,1 a bulan:1 month,3 a bulan:3 months,6 a bulan:6 months,1 a tawen:1 year,awan inggana:infinite",
"restriction-type": "Pammalubos:",
@@ -1804,7 +1814,7 @@
"restriction-create": "Agpartuat",
"restriction-upload": "Agikarga",
"restriction-level-sysop": "napno a nasalakniban",
- "restriction-level-autoconfirmed": "nasalakniban bassit",
+ "restriction-level-autoconfirmed": "nasalakniban-bassit",
"restriction-level-all": "aniaman nga agpang",
"undelete": "Kitaen dagiti naikkat a panid",
"undeletepage": "Kitaen ken isubli dagiti naikkat a panid",
@@ -1812,7 +1822,7 @@
"viewdeletedpage": "Kitaen dagiti naikkat a panid",
"undeletepagetext": "Ti sumaganad a {{PLURAL:$1|panid ket naikkaten ngem|$1 pampanid ket naikkaten ngem}} adda pay naarkibo ken mabalin pay a maipasubli .\nTi arkibo ket mabalin a sagpaminsan a madalusan.",
"undelete-fieldset-title": "Ipasubli dagiti rebision",
- "undeleteextrahelp": "Tapno maipasubli ti intero a pakasaritaan ti panid, ibatim a saan nga nakur-itan dagita kahon ken pinduten ti '''''{{int:undeletebtn}}'''''.\nTi agaramid ti napilian a panagisubli, ikur-it dagita napilim kadagiti kahon ti kayatmo nga ipasubli, ken pinduten ti '''''{{int:undeletebtn}}'''''.",
+ "undeleteextrahelp": "Tapno maipasubli ti intero a pakasaritaan ti panid, ibatim a saan nga nakur-itan dagita kahon ken pinduten ti <strong><em>{{int:undeletebtn}}</em></strong>.\nTi agaramid ti napilian a panagisubli, ikur-it dagita napilim kadagiti kahon ti kayatmo nga ipasubli, ken pinduten ti <strong><em>{{int:undeletebtn}}</em></strong>.",
"undeleterevisions": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti naarkibo",
"undeletehistory": "No ipasublim daytoy a panid, amin dagiti rebision ket maipasubli iti pakasaritaan.\nKet no adda baro a panid a kanagnaganna a naaramid ti napalabas a panagikkat, dagiti naipasubli a rebision ket agparang iti napalabas a pakasaritaan.",
"undeleterevdel": "Ti panagikkat ket saan a maaramid no agbanag iti rabaw ti panid, wenno ti rebision ti papeles ket maikkatan ti bassit.\nIti kastoy a kaso, masapul nga ikkatem ti kur-it wenno ikkatem ti lemmeng dagiti kabarbaro a naikkat a rebision.",
@@ -1870,7 +1880,7 @@
"sp-contributions-logs": "dagiti listaan",
"sp-contributions-talk": "tungtungan",
"sp-contributions-userrights": "panagtaripato kadagiti karbengan ti agar-aramat",
- "sp-contributions-blocked-notice": "Adama a naserraan daytoy nga agar-aramat.\nTi naudi a naikabil iti listaan ti pannakaserra ket naited dita baba para iti reperensia:",
+ "sp-contributions-blocked-notice": "Agdama a naserraan daytoy nga agar-aramat.\nTi naudi a naikabil iti listaan ti pannakaserra ket naited dita baba para iti reperensia:",
"sp-contributions-blocked-notice-anon": "Daytoy nga IP a pagtaengan ket agdama a naserraan.\nTi naudi a naikabil iti listaan ti pannakaserra ket adda dita baba para iti reperensia:",
"sp-contributions-search": "Agbiruk para kadagiti kontribusion",
"sp-contributions-username": "IP a pagtaengan wenno nagan ti agar-aramat:",
@@ -1897,22 +1907,22 @@
"autoblockid": "Auto a panagserra #$1",
"block": "Seraan ti agar-aramat",
"unblock": "Ikkaten ti serra ti agar-aramat",
- "blockip": "Serraan ti agar-aramat",
+ "blockip": "Serraan ti {{GENDER:$1|agar-aramat}}",
"blockip-legend": "Serraan ti agar-aramat",
- "blockiptext": "Usaren ti porma dita baba tapno maserraan ti panagsurat manipud iti naisangayan nga IP a pagtaengan wenno nagan ti agar-aramat.\nUsaren laeng daytoy tapno pawilan ti bandalismo, ken panagtunos iti [[{{MediaWiki:Policy-url}}|annuroten]].\nIkkan ti naisangayan a rason dita baba (kas pagarigan, dakamaten ti maysa a panid a na-bandalismo) .",
+ "blockiptext": "Usaren ti porma dita baba tapno maserraan ti panagsurat manipud iti naisangayan nga IP a pagtaengan wenno nagan ti agar-aramat.\nUsaren laeng daytoy tapno pawilan ti bandalismo, ken panagtunos iti [[{{MediaWiki:Policy-url}}|annuroten]].\nIkkan ti naisangayan a rason dita baba (kas pagarigan, dakamaten ti maysa a panid a nabandalismo) .",
"ipaddressorusername": "IP a pagtaengan wenno nagan ti agar-aramat:",
"ipbexpiry": "Agpaso:",
"ipbreason": "Rason:",
"ipbreason-dropdown": "*Dagiti kadawyan a rason ti panagserra\n** Agikabil kadagiti madi a pakaammo\n** Agikkat kadagiti linaon ti pampanid\n** Agikabil ti spam a silpo iti ruar\n** Agikabil ti minamaag/saan a maawatan a pampanid\n** Mangbutbuteng a panagkukua /mangriribok\n** Agab-abuso kadagiti nadumaduma a pakabilangan\n** Saan a maawat a nagan ti agar-aramat",
"ipb-hardblock": "Iparit dagiti nakastrek nga agar-aramat manipud ti panagurnos manipud ti daytoy nga IP a pagtaengan",
"ipbcreateaccount": "Pawilan ti panagpartuat iti pakabilangan",
- "ipbemailban": "Pawilan ti agar-aramat nga agipatulod ti esurat",
+ "ipbemailban": "Pawilan ti agar-aramat nga agipatulod iti esurat",
"ipbenableautoblock": "Automatiko a mangserra ti naudi nga IP a pagtaengan nga inusar daytoy nga agar-aramat, ken dagiti sumaruno nga IP a pagtaengan nga ayan ti pangipadasanda nga agurnos",
"ipbsubmit": "Serraan daytoy nga agar-aramat",
"ipbother": "Sabali nga oras:",
"ipboptions": "2 nga oras:2 hours,1 nga aldaw:1 day,3 nga aldaw:3 days,1 a lawas:1 week,2 a lawas:2 weeks,1 a bulan:1 month,3 a bulan:3 months,6 a bulan:6 months,1 a tawen:1 year,awan inggana:infinite",
"ipbhidename": "Ilemmeng ti nagan ti agar-aramat kadagiti listaan ken inurnos",
- "ipbwatchuser": "Bantayan ti panid ti agar-ramat ken panid ti tungtungan daytoy nga agar-aramat",
+ "ipbwatchuser": "Bantayan ti panid ti agar-aramat ken panid ti tungtungan daytoy nga agar-aramat",
"ipb-disableusertalk": "Pawilan daytoy nga agar-aramat nga agurnos kadagiti bukodda a tungtungan a panid bayat a naserraan",
"ipb-change-block": "Serraan manen ti agar-aramat kadagitoy a pannakaisaad",
"ipb-confirm": "Pasingkedan ti serra",
@@ -1926,13 +1936,14 @@
"ipb-unblock-addr": "Lukatan ti serra ni $1",
"ipb-unblock": "Lukatan ti serra ti nagan ti agar-aramat wenno IP a pagtaengan",
"ipb-blocklist": "Kitaen dagiti adda a serra",
- "ipb-blocklist-contribs": "Dagiti kontribusion para kenni $1",
+ "ipb-blocklist-contribs": "Dagiti kontribusion para kenni {{GENDER:$1|$1}}",
"unblockip": "Lukatan ti serra ti agar-aramat",
"unblockiptext": "Usaren ti porma dita baba tapno maisubli ti panagserrek ti panagsurat ti dati a naserran nga IP a pagtaengan wenno nagan ti agar-aramat.",
"ipusubmit": "Ikkaten daytoy a serra",
"unblocked": "Naikkat ti pannakaserra ni [[User:$1|$1]].",
"unblocked-range": "Naikkaten ti serra ti $1.",
"unblocked-id": "Naikkaten ti serra ti $1.",
+ "unblocked-ip": "Naikkaten ti serra ni [[Special:Contributions/$1|$1]] .",
"blocklist": "Dagiti naserraan nga agar-aramat",
"ipblocklist": "Dagiti naserraan nga agar-aramat",
"ipblocklist-legend": "Agbiruk ti naserraan nga agar-aramat",
@@ -1953,7 +1964,7 @@
"expiringblock": "agpaso intono $1, $2",
"anononlyblock": "di ammo laeng",
"noautoblockblock": "nabaldado ti automatiko a serra",
- "createaccountblock": "naserraan ti pannakapartuat ti pakabilangan",
+ "createaccountblock": "nabaldado ti pannakapartuat ti pakabilangan",
"emailblock": "nabaldado ti esurat",
"blocklist-nousertalk": "saan a mabalin nga agurnos ti bukod a tungtungan a panid",
"ipblocklist-empty": "Awan linaon ti listaan ti serra.",
@@ -1975,7 +1986,7 @@
"block-log-flags-nocreate": "nabaldado ti panagpartuat ti pakabilangan",
"block-log-flags-noautoblock": "nabaldado ti automatiko a serra",
"block-log-flags-noemail": "nabaldado ti esurat",
- "block-log-flags-nousertalk": "saan a mabalin nga agurnos ti bukodna a tungtungan a panid",
+ "block-log-flags-nousertalk": "saan a mabalin nga agurnos iti bukodna a tungtungan a panid",
"block-log-flags-angry-autoblock": "napakabaelan ti napasayaat nga automatiko a serra",
"block-log-flags-hiddenname": "nailemmeng ti nagan ti agar-aramat",
"range_block_disabled": "Ti abilidad ti administrador nga agpartuat ti nasakupan a serra ket nabaldado.",
@@ -2035,7 +2046,7 @@
"pagemovedsub": "Balligi ti panangiyalis",
"movepage-moved": "<strong>Naiyalisen ti \"$1\" iti \"$2\"</strong>",
"movepage-moved-redirect": "Napartuaten ti maysa a baw-ing.",
- "movepage-moved-noredirect": "Ti pannakapartuat ti baw-ing ket napasardeng.",
+ "movepage-moved-noredirect": "Napasardeng ti pannakapartuat ti baw-ing.",
"articleexists": "Adda panid nga adda ti kastan a nagan, wenno ti nagan a pinilim ket saan a mabalin.\nPangngaasi nga agpili ti sabali a nagan.",
"cantmove-titleprotected": "Saanmo a maiyalis ti panid iti daytoy a lokasion ngamin ket ti baro a titulo ket nasalakniban manipud ti pannakapartuat",
"movetalk": "Iyalis ti mainaig a panid ti tungtungan",
@@ -2119,7 +2130,8 @@
"import": "Agala kadagiti panid",
"importinterwiki": "Agala ti transwiki",
"import-interwiki-text": "Agpilika ti wiki ken titulo ti panid nga alaem.\nDagiti rebision ti petsa ken dagiti nagan ti mannurat ket maipreserba.\nAmin a transwiki nga alaem ket mailista iti [[Special:Log/import|listaan ti panagala]].",
- "import-interwiki-source": "Taudan ti wiki/panid:",
+ "import-interwiki-sourcewiki": "Taudan a wiki:",
+ "import-interwiki-sourcepage": "Taudan a panid:",
"import-interwiki-history": "Kopiaen amin dagiti rebision ti pakasaritaan daytoy a panid",
"import-interwiki-templates": "Iraman amin dagiti plantilia",
"import-interwiki-submit": "Agala",
@@ -2166,13 +2178,11 @@
"import-logentry-interwiki": "nai-transwiki iti $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebision|dagiti rebision}} ti naala manipud ti $2",
"javascripttest": "Panagsubok ti JavaScript",
- "javascripttest-title": "Agpatpataray kadagiti panagsubok ti $1",
"javascripttest-pagetext-noframework": "Daytoy a panid ket naireserba para iti panagpataray kadagiti panagsubok ti JavaScript.",
"javascripttest-pagetext-unknownframework": "Di ammo a tabas ti panagsubok ti \"$1\".",
"javascripttest-pagetext-frameworks": "Pangngaasi nga agpili ti maysa kadagiti sumaganad a tabas ti panagsubok: $1",
"javascripttest-pagetext-skins": "Agpili ti kudil a pangipatarayan kadagiti panagsubok:",
"javascripttest-qunit-intro": "Kitaen ti [ $1 dukomentasion ti panagsubok] idiay mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
"tooltip-pt-userpage": "Panidmo nga agar-aramat",
"tooltip-pt-anonuserpage": "Ti panid ti agar-aramat para iti daytoy nga IP a pagtaengan a kas ur-urnosem",
"tooltip-pt-mytalk": "Tungtungam a panid",
@@ -2180,8 +2190,9 @@
"tooltip-pt-preferences": "Dagiti kakaykayatam",
"tooltip-pt-watchlist": "Listaan dagiti panid a sipsiputem para iti pannakabalbaliw",
"tooltip-pt-mycontris": "Ti listaan dagiti kontribusionmo",
- "tooltip-pt-login": "Maisingasing a sumrekka; nupay kasta, daytoy ket saan a maipapilit",
+ "tooltip-pt-login": "Maaw-awis a sumrekka; nupay kasta, daytoy ket saan a nasken",
"tooltip-pt-logout": "Rummuar",
+ "tooltip-pt-createaccount": "Maaw-awis nga agpartuatka iti pakabilangan ken sumrek; nupay kasta, daytoy ket saan a nasken",
"tooltip-ca-talk": "Pagtungtungan a maipapan ti linaon ti panid",
"tooltip-ca-edit": "Mabalinmo nga urnosen daytoy a panid. Pangngaasi nga aramatem ti buton ti panagipadas sakbay nga agidulin",
"tooltip-ca-addsection": "Mangirugi ti baro a paset",
@@ -2204,13 +2215,14 @@
"tooltip-n-currentevents": "Agsapul ti pakaammo kadagiti agdama a paspasamak",
"tooltip-n-recentchanges": "Listaan dagiti naudi a sinukatan iti wiki",
"tooltip-n-randompage": "Agikarga iti pugto a panid",
- "tooltip-n-help": "Ti lugar a pagsapulan",
+ "tooltip-n-help": "Ti lugar a pagduktalan",
"tooltip-t-whatlinkshere": "Listaan ti amin a pampanid ti wiki a nakasilpo ditoy",
"tooltip-t-recentchangeslinked": "Kaudian a balbaliw kadagiti panid a naisilpo manipud ti daytoy a panid",
"tooltip-feed-rss": "RSS a pakan para iti daytoy a panid",
"tooltip-feed-atom": "Atom a pakan para iti daytoy a panid",
"tooltip-t-contributions": "Ti lstaan dagiti kontribusion iti daytoy nga agar-aramat",
"tooltip-t-emailuser": "Patulodan ti esurat daytoy nga agar-aramat",
+ "tooltip-t-info": "Adu pay a pakaammo a maipanggep iti daytoy a panid",
"tooltip-t-upload": "Agikarga kadagiti papeles",
"tooltip-t-specialpages": "Listaan ti amin nga espesial a pampanid",
"tooltip-t-print": "Maimaldit a bersion iti daytoy a panid",
@@ -2272,7 +2284,6 @@
"pageinfo-robot-policy": "Panagpasurot babaen dagiti robot",
"pageinfo-robot-index": "Maipalubos",
"pageinfo-robot-noindex": "Saan a maipalubos",
- "pageinfo-views": "Bilang dagiti panagkita",
"pageinfo-watchers": "Bilang dagiti agbuybuya ti panid",
"pageinfo-few-watchers": "Basbassit ngem $1 {{PLURAL:$1|ti agbuybuya|dagiti agbuybuya}}",
"pageinfo-redirects-name": "Bilang dagiti baw-ing iti daytoy a panid",
@@ -2281,7 +2292,7 @@
"pageinfo-firstuser": "Nagpartuat iti panid",
"pageinfo-firsttime": "Petsa a pannakapartuat ti panid",
"pageinfo-lastuser": "Kinaudi nga editor",
- "pageinfo-lasttime": "Petsa ti kinaudi a panag-urnos",
+ "pageinfo-lasttime": "Petsa ti kinaudi a panagurnos",
"pageinfo-edits": "Dagup a bilang dagiti inurnos",
"pageinfo-authors": "Dagup a bilang dagiti naisangsangayan a mannurat",
"pageinfo-recent-edits": "Itay nabiit a bilang dagiti inurnos (ti uneg ti napalabas ti $1)",
@@ -2390,7 +2401,7 @@
"exif-photometricinterpretation": "Pakabuklan ti piksel",
"exif-orientation": "Pagturongan",
"exif-samplesperpixel": "Bilang dagiti komponente",
- "exif-planarconfiguration": "Pannaka-urnos ti datos",
+ "exif-planarconfiguration": "Pannakaurnos ti datos",
"exif-ycbcrsubsampling": "Subwadan pannakaibagi ti Y iti C",
"exif-ycbcrpositioning": "Y ken C a panakaipatakderan",
"exif-xresolution": "Horisontal a resolusion",
@@ -2427,16 +2438,16 @@
"exif-exposuretime": "Exposure time",
"exif-exposuretime-format": "$1 sec ($2)",
"exif-fnumber": "F a Numero",
- "exif-exposureprogram": "Exposure Program",
- "exif-spectralsensitivity": "Spectral sensitivity",
- "exif-isospeedratings": "ISO speed rating",
+ "exif-exposureprogram": "Programa ti panakailatakan",
+ "exif-spectralsensitivity": "Espektral a sensitibidad",
+ "exif-isospeedratings": "Grado ti kapardas ti ISO",
"exif-shutterspeedvalue": "APEX Shutter speed",
"exif-aperturevalue": "Apex aperture",
"exif-brightnessvalue": "Kalawag ti APEX",
"exif-exposurebiasvalue": "Exposure bias",
- "exif-maxaperturevalue": "Maximum land aperture",
- "exif-subjectdistance": "Kaadayu ti suheto",
- "exif-meteringmode": "Metering mode",
+ "exif-maxaperturevalue": "Kangato ti apertura ti daga",
+ "exif-subjectdistance": "Kaadayo ti suheto",
+ "exif-meteringmode": "Panagmetro a moda",
"exif-lightsource": "Paggapuan ti lawag",
"exif-flash": "Silap",
"exif-focallength": "Lens focal length",
@@ -2446,40 +2457,40 @@
"exif-focalplaneyresolution": "Focal plane Y resolution",
"exif-focalplaneresolutionunit": "Focal plane resolution unit",
"exif-subjectlocation": "Lokasion ti suheto",
- "exif-exposureindex": "Exposure index",
- "exif-sensingmethod": "Sensing method",
- "exif-filesource": "Nagtaudan ti papeles",
- "exif-scenetype": "Scene type",
- "exif-customrendered": "Custom image processing",
- "exif-exposuremode": "Exposure mode",
+ "exif-exposureindex": "Pagsurotan ti panakailatakan",
+ "exif-sensingmethod": "Pamay-an ti panagrikna",
+ "exif-filesource": "Taudan ti papeles",
+ "exif-scenetype": "Kita ti senario",
+ "exif-customrendered": "Naiduma a panagproseso ti ladawan",
+ "exif-exposuremode": "Moda ti panakailatakan",
"exif-whitebalance": "Pagtimbangan ti puraw",
"exif-digitalzoomratio": "Digital zoom ratio",
"exif-focallengthin35mmfilm": "Focal length iti 35 mm a film",
- "exif-scenecapturetype": "Scene capture type",
- "exif-gaincontrol": "Scene control",
+ "exif-scenecapturetype": "Kita ti panagala iti senario",
+ "exif-gaincontrol": "Panagtengngel ti senario",
"exif-contrast": "Contrast",
"exif-saturation": "Saturation",
"exif-sharpness": "Kalawag",
"exif-devicesettingdescription": "Deskripsion dagiti pannakaidisso ti ramit",
"exif-subjectdistancerange": "Nasakup a kaadayo ti suheto",
- "exif-imageuniqueid": "Naisangsangayan nga ID ti imahen",
+ "exif-imageuniqueid": "Naisangsangayan nga ID ti ladawan",
"exif-gpsversionid": "Etiketa a bersion ti GPS",
- "exif-gpslatituderef": "Amianan wenno Abagatan a Latitude",
- "exif-gpslatitude": "Latitude",
- "exif-gpslongituderef": "Daya wenno Laud a Longitude",
- "exif-gpslongitude": "Longitude",
+ "exif-gpslatituderef": "Amianan wenno Abagatan a Latitud",
+ "exif-gpslatitude": "Latitud",
+ "exif-gpslongituderef": "Daya wenno Laud a Longitud",
+ "exif-gpslongitude": "Longitud",
"exif-gpsaltituderef": "Reperensia ti kangato",
"exif-gpsaltitude": "Kangato",
- "exif-gpstimestamp": "GPS nga oras (atomiko a pagurasan)",
+ "exif-gpstimestamp": "GPS nga oras (atomiko a pagorasan)",
"exif-gpssatellites": "Dagiti satelite a naaramat para iti panagrukod",
- "exif-gpsstatus": "Receiver status",
+ "exif-gpsstatus": "Kasasaad ti pangawat",
"exif-gpsmeasuremode": "Panagrukod a moda",
"exif-gpsdop": "Kasayaat ti panagrukod",
- "exif-gpsspeedref": "Speed unit",
- "exif-gpsspeed": "Kapaspas ti GPS receiver",
- "exif-gpstrackref": "Reperensia iti direksion ti panaggunay",
+ "exif-gpsspeedref": "Yunit ti kapardas",
+ "exif-gpsspeed": "Kapaspas ti pangawat ti GPS",
+ "exif-gpstrackref": "Reperensia iti direksion ti kuti",
"exif-gpstrack": "Direksion ti kuti",
- "exif-gpsimgdirectionref": "Reperensia iti direksion ti imahen",
+ "exif-gpsimgdirectionref": "Reperensia iti direksion ti ladawan",
"exif-gpsimgdirection": "Direksion ti ladawan",
"exif-gpsmapdatum": "Datos nga inaramat ti geodetiko a panagsukimat",
"exif-gpsdestlatituderef": "Reperensia iti papanan a latitud",
@@ -2539,7 +2550,7 @@
"exif-rightscertificate": "Sertipikado ti panagtaripato kadagiti karbengan",
"exif-copyrighted": "Kasasaad ti karbengan ti kopia",
"exif-copyrightowner": "Akinkukua ti karbengan ti kopia",
- "exif-usageterms": "Dagiti termino ti panag-usar",
+ "exif-usageterms": "Dagiti termino ti panagusar",
"exif-webstatement": "Insasao ti karbengan ti kopia nga addaan iti online",
"exif-originaldocumentid": "Naisangayan nga ID iti kinasigud a dokumento",
"exif-licenseurl": "URL para iti lisensia ti karbengan ti kopia",
@@ -2658,14 +2669,14 @@
"exif-subjectdistancerange-1": "Makro",
"exif-subjectdistancerange-2": "Asideg a pinagkita",
"exif-subjectdistancerange-3": "Adayo a pinagkita",
- "exif-gpslatitude-n": "Amianan a latitude",
- "exif-gpslatitude-s": "Abagatan a latitude",
- "exif-gpslongitude-e": "Daya a longitude",
- "exif-gpslongitude-w": "Abagatan a longitude",
+ "exif-gpslatitude-n": "Amianan a latitud",
+ "exif-gpslatitude-s": "Abagatan a latitud",
+ "exif-gpslongitude-e": "Daya a longitud",
+ "exif-gpslongitude-w": "Abagatan a longitud",
"exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|a metro|kadagiti metro}} a nangatngato ngem ti baybay",
"exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|a metro|kadagiti metro}} a nababbaba ngem ti baybay",
"exif-gpsstatus-a": "Agrukrukoden",
- "exif-gpsstatus-v": "Panag-rukod ken pannakabin ti pang-usar ti sabali",
+ "exif-gpsstatus-v": "Panagrukod ken interoperabilidad",
"exif-gpsmeasuremode-2": "2-kalawa pagrukod",
"exif-gpsmeasuremode-3": "3-kalawa pagrukod",
"exif-gpsspeed-k": "Dagiti kilometro kada oras",
@@ -2678,7 +2689,7 @@
"exif-gpsdop-good": "Nalaing ($1)",
"exif-gpsdop-moderate": "Natimbeng ($1)",
"exif-gpsdop-fair": "Nasayaat ($1)",
- "exif-gpsdop-poor": "Makukurangan ($1)",
+ "exif-gpsdop-poor": "Makurkurangan ($1)",
"exif-objectcycle-a": "Agsapa laeng",
"exif-objectcycle-p": "Rabii laeng",
"exif-objectcycle-b": "Agsapa ken rabii",
@@ -2716,7 +2727,6 @@
"exif-urgency-low": "Nababa ($1)",
"exif-urgency-high": "Nangato ($1)",
"exif-urgency-other": "Inpalawag ti agar-aramat a prioridad ($1)",
- "watchlistall2": "amin",
"namespacesall": "amin",
"monthsall": "amin",
"confirmemail": "Pasingkedan ti esurat a pagtaengam",
@@ -2735,8 +2745,8 @@
"confirmemail_body": "Addaan, baka sika, ti naggapu ti IP a pagtaengan $1,\nket nagrehistro ti pakabilangan \"$2\" iti daytoy nga esurat a pagtaengan idiay {{SITENAME}}\n\nTapno mapasingkedan a daytoy a pakabilangan ket kukuam ken ti \npinagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surotem daytoy a panilpo\nta pasardengem ti pinakasingkedan ti esurat a pagtaengam:\n\n$5\n\nDaytoy a pammasingked a kodigo ket agpaso iti $4.",
"confirmemail_body_changed": "Addaan, baka sika, ti naggapu ti IP a pagtaengam $1,\nket nangsukat ti esurat a pagtaengan ti pakabilangan \"$2\" iti daytoy a pagtaengan idiay {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket kukuam ken ti \npanagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surutem daytoy a panilpo\nta pasardengem ti pinakasingkedan ti esurat a pagtaengam:\n\n$5\n\nDaytoy a kodigo a pasingkedan ket agpaso iti $4.",
"confirmemail_body_set": "Addaan, baka sika met laeng, manipud ti IP a pagtaengan ti $1,\nket nangikabil ti esurat a pagtaengan ti pakabilangan ti \"$2\" iti daytoy a pagtaengan idiay {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket agpayso a kukuam ken \npakabaelan dagiti esurat a langa idiay {{SITENAME}}, lukatam daytoy a silpo idiay pabasabasam:\n\n$3\n\nNo daytoy a pakabilangan ket *saanmo* a kukua, surutem daytoy a silpo\ntapno ukasen ti panagpasingked ti esurat a pagtaengan:\n\n$5\n\nDaytoy a panagpasingked ti kodigo ket agpaso intono $4.",
- "confirmemail_invalidated": "Naukas ti pammasingked ti e-surat a pagtaengam",
- "invalidateemail": "Ukasen ti pammasingked ti e-surat",
+ "confirmemail_invalidated": "Naukas ti pammasingked ti esurat a pagtaengam",
+ "invalidateemail": "Ukasen ti pammasingked ti esurat",
"scarytranscludedisabled": "[Nabaldado ti Interwiki panagiraman]",
"scarytranscludefailed": "[Napaay ti panagala ti plantilia para iti $1]",
"scarytranscludefailed-httpstatus": "[Napaay ti panagala ti plantilia para iti $1: HTTP $2]",
@@ -2752,6 +2762,7 @@
"confirm-watch-top": "Inayon daytoy a panid iti listaan ti bambantayam?",
"confirm-unwatch-button": "Sige",
"confirm-unwatch-top": "Ikkatem daytoy a panid manipud ti listaan ti bambantayam?",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← napalabas a panid",
"imgmultipagenext": "sumaruno a panid →",
"imgmultigo": "Inkan!",
@@ -2802,9 +2813,9 @@
"watchlisttools-edit": "Kitaen ken urnosen ti listaan ti bambantayan",
"watchlisttools-raw": "Urnosen ti naata a listaan ti bambantayan",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|tungtungan]])",
- "unknown_extension_tag": "Di ammo a pagpaatiddog nga etiketa ti \"$1\"",
"duplicate-defaultsort": "<strong>Ballag:</strong> Kasisigud a panagilasin ti \"$2\" ket tuonana ti immuna a kasisigud a panagilasin ti \"$1\".",
"duplicate-displaytitle": "<strong>Ballaag:</strong> Ti maiparang a titulo ti \"$2\" ket tuonanna ti immmuna a maiparang a titulo ti \"$1\".",
+ "invalid-indicator-name": "<strong>Biddut:</strong> Ti gupit ti <code>name</code> a panangipakita ti kasasaad ti panid ket nasken nga adda linaon.",
"version": "Bersion",
"version-extensions": "Dagiti naisaad a pagpaatiddog",
"version-skins": "Naisaad a kudkudil",
@@ -2835,7 +2846,7 @@
"version-credits-not-found": "Awan dagiti nabirukan a naisalaysay a pammadayaw para iti daytoy a pagpaatiddog.",
"version-poweredby-credits": "Daytoy a wiki ket pinaandar babaen ti '''[https://www.mediawiki.org/ MediaWiki]''', karbengan ti kopia © 2001-$1 $2.",
"version-poweredby-others": "dadduma pay",
- "version-poweredby-translators": "dagiti agipatpatarus ti translatewiki.net",
+ "version-poweredby-translators": "dagiti agipatpatarus iti translatewiki.net",
"version-credits-summary": "Kayatmi koma a pammadayawan dagiti sumaganad a tao para kadagiti kontribusonda iti [[Special:Version|MediaWiki]].",
"version-license-info": "Ti MediaWiki ket nawaya a sopwer; mabalinmo nga iwaras ken/wenno baliwan babaen kadagiti termino ti GNU General Public License a naipablaak babaen ti Free Software Foundation; wenno bersion 2 iti Lisensia, wenno (ti panagpilim) ti aniaman a naudi a bersion.\n\nTi MediaWiki ket naiwarwaras iti namnama a makatulongto, ngem AWAN TI ANIA MAN A GARANTIA; nga awan pay ti naibagbaga a PANNAKAILAKO wenno KALAINGANNA ITI DAYTOY A PANGGEP. Kitaen ti GNU General Public License para kadagiti adu pay a salaysay.\n\nNaka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU General Public License] a nairaman iti daytoy a programa; no saan, agsuratka idiay Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA wenno [//www.gnu.org/licenses/old-licenses/gpl-2.0.html basaem iti online].",
"version-software": "Naisaad a sopwer",
@@ -2844,9 +2855,9 @@
"version-entrypoints": "Pagserrekan a puntos dagiti URL",
"version-entrypoints-header-entrypoint": "Pagserrekan a puntos",
"version-entrypoints-header-url": "URL",
- "redirect": "Ibaw-ing babaen ti papeles, agar-aramat, panid wenno ID ti rebision",
+ "redirect": "Baw-ing babaen ti papeles, agar-aramat, panid wenno ID ti rebision",
"redirect-legend": "Ibaw-ing iti papeles wenno panid",
- "redirect-summary": "Daytoy nga espesial a panid ket maibaw-ing iti papeles (iti nagan ti papeles), ti panid (iti ID ti rebision wenno ID ti panid), wenno ti panid ti agar-aramat (iti numeriko nga ID ti agar-aramat). Panag-usar:\n[[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], \n[[{{#Special:Redirect}}/revision/328429]], wenno\n[[{{#Special:Redirect}}/user/101]].",
+ "redirect-summary": "Daytoy nga espesial a panid ket maibaw-ing iti papeles (iti nagan ti papeles), ti panid (iti ID ti rebision wenno ID ti panid), wenno ti panid ti agar-aramat (iti numeriko nga ID ti agar-aramat). Panagusar:\n[[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], \n[[{{#Special:Redirect}}/revision/328429]], wenno\n[[{{#Special:Redirect}}/user/101]].",
"redirect-submit": "Inkan",
"redirect-lookup": "Kitaen:",
"redirect-value": "Pateg:",
@@ -2877,8 +2888,9 @@
"specialpages-group-pages": "Lislistaan ti pampanid",
"specialpages-group-pagetools": "Ramramit ti panid",
"specialpages-group-wiki": "Datos ken ramramit",
- "specialpages-group-redirects": "Panangibaw-ing kadagiti espesial a pampanid",
+ "specialpages-group-redirects": "Panangibaw-ing kadagiti espesial a panid",
"specialpages-group-spam": "Ramramit ti spam",
+ "specialpages-group-developer": "Ramramit dagiti agraramid",
"blankpage": "Blanko a panid",
"intentionallyblankpage": "Daytoy a panid ket naigagara a blanko.",
"external_image_whitelist": " #Baybayan daytoy a linia a kastoy<pre>\n#Ikabil ti \"regular expression fragments\" (idiay laeng paset nga ikabil ti tengnga ti //) dita baba\n#Dagitoy ipada na ti URLs ti ruar (ti napudot a naikapet) imahen \n#Dagiti agpada ket agparang nga imahen, ket no saan ti panilpo ti imahen ti agparang laeng\n#Dagiti linia nga umuna iti # ket maipabalin a komentario\n#Daytoy ket \"sensetibo ti kadakkel ti letra\"\n\n#Ikabil dagita \"regex fragment\" ti ngato daytoy a linia. Baybay-an a kastoy daytoy a linia</pre>",
@@ -2950,6 +2962,7 @@
"revdelete-uname-unhid": "saan a nailemmeng ti nagan ti agar-aramat",
"revdelete-restricted": "naipakat dagiti panangigawid kadagiti administrador",
"revdelete-unrestricted": "inikkat dagiti panangigawid para kadagiti administrador",
+ "logentry-merge-merge": "Ni $1 ket {{GENDER:$2|intiponna}} ti $3 iti $4 (kadagiti rebision aginggana iti $5)",
"logentry-move-move": "Ni $1 ket {{GENDER:$2|inyalisna}} ti panid $3 iti $4",
"logentry-move-move-noredirect": "Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 iti $4 a saan a nangibati ti baw-ing",
"logentry-move-move_redir": "Ni $1 ket {{GENDER:$2|inyalisna}} ti panid ti $3 iti $4 a nagtuon iti baw-ing",
@@ -2964,20 +2977,24 @@
"logentry-rights-rights": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti grupo a pannakaikameng para kenni $3 manipud ti $4 iti $5",
"logentry-rights-rights-legacy": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti grupo a pannakaikameng para kenni $3",
"logentry-rights-autopromote": "Ni $1 ket automatiko idi a {{GENDER:$2|naipangato}} manipud ti $4 iti $5",
+ "logentry-upload-upload": "Ni $1 ket {{GENDER:$2|inkargana}} ti $3",
+ "logentry-upload-overwrite": "Ni $1 ket {{GENDER:$2|inkargana}} ti baro a bersion ti $3",
+ "logentry-upload-revert": "Ni $1 ket {{GENDER:$2|inkargana}} ti $3",
"rightsnone": "(awan)",
+ "revdelete-summary": "Pakabuklan ti inurnos",
+ "feedback-adding": "Agnaynayon ti feedback iti panid...",
+ "feedback-bugcheck": "Nasayaaten! Kitaem tapno saan a dagiti adda idin a [$1 nga ammo a parparikut].",
+ "feedback-bugnew": "Kinitak. Agireporta iti baro a parikut",
"feedback-bugornote": "No sisasagakan nga agibaga ti teknikal a pakirut a naisalaysay pangngaasi nga [$1 ireporta ti parikut].\nNupay kasta, mausarmo ti nalaka a porma dita baba. Ti komentario nga itedmo ket mainayon iti panid \"[$3 $2], a mairaman ti naganmo nga agar-aramat ken no ania ti pagbasabasa nga us-sarem.",
- "feedback-subject": "Suheto:",
- "feedback-message": "Mensahe:",
"feedback-cancel": "Ukasen",
- "feedback-submit": "Agited ti Feedback",
- "feedback-adding": "Agnaynayon ti feedback iti panid...",
+ "feedback-close": "Nalpasen",
"feedback-error1": "Biddut: Saan a malasin dagiti nagbanagan manipud ti API",
"feedback-error2": "Biddut: Napaay ti panagurnos",
"feedback-error3": "Biddut: Awan ti sungbat manipud ti API",
+ "feedback-message": "Mensahe:",
+ "feedback-subject": "Suheto:",
+ "feedback-submit": "Ited",
"feedback-thanks": "Agyaman! Ti feedbackmo ket naipablaak iti panid \"[$2 $1]\".",
- "feedback-close": "Nalpasen",
- "feedback-bugcheck": "Nasayaaten! Kitaem tapno saan a dagiti adda idin a [$1 nga ammo a parparikut].",
- "feedback-bugnew": "Kinitak. Agireporta ti baro a parikut",
"searchsuggest-search": "Biruken",
"searchsuggest-containing": "naglaon ti...",
"api-error-badaccess-groups": "Saanka mapalubosan nga agikarga kadagiti papeles iti daytoy a wiki.",
@@ -3066,5 +3083,17 @@
"action-pagelang": "baliwan ti pagsasao ti panid",
"log-name-pagelang": "Listaan ti panagbaliw ti pagsasao",
"log-description-pagelang": "Daytoy ket listaan dagiti panagbaliw kadagiti pagsasao ti panid.",
- "logentry-pagelang-pagelang": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti pagsasao ti panid para iti $3 manipud ti $4 iti $5."
+ "logentry-pagelang-pagelang": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti pagsasao ti panid para iti $3 manipud ti $4 iti $5.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (napakabaelan)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''nabaldado''')",
+ "mediastatistics": "Estadistika ti midia",
+ "mediastatistics-summary": "Estadistika a maipanggep dagiti kita ti naikarga a papeles. Daytoy ket mangiraman laeng ti kinaudi a bersion ti papeles. Dagiti bersion ti papeles a daan wenno naikkat ket saan a mairaman.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 a byte|$1 kadagiti bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Kita ti MIME",
+ "mediastatistics-table-extensions": "Dagiti mabalin pagpaatiddog",
+ "mediastatistics-table-count": "Bilang dagiti papeles",
+ "mediastatistics-table-totalbytes": "Naitiptipon a kadakkel",
+ "mediastatistics-header-unknown": "Di ammo",
+ "mediastatistics-header-bitmap": "Ladladawan ti bitmap",
+ "mediastatistics-header-office": "Opisina"
}
diff --git a/languages/i18n/inh.json b/languages/i18n/inh.json
index d350f648..9799b9d9 100644
--- a/languages/i18n/inh.json
+++ b/languages/i18n/inh.json
@@ -7,69 +7,71 @@
"Sapral Mikail",
"Tagir",
"Умар",
- "아라"
+ "아라",
+ "Shirayuki"
]
},
- "tog-underline": "Ӏинкаш белгалде:",
- "tog-hideminor": "ЗӀамига хувцамаш керда хувцаман дагарленашках къайлаяккха",
- "tog-hidepatrolled": "Керда хувцаман дагарленач дӀанийсаяь хувцамаш къайладаккха",
- "tog-newpageshidepatrolled": "Керда оагӀувна дагарленач дӀанийсаяь хувцамаш къайладаккха",
- "tog-extendwatchlist": "Шераяь теркама дагарле, массадола хувцамаш чулоацаш",
- "tog-usenewrc": "Керда хувцами теркама дагарлеи хувцамаш тоабъе (JavaScript)",
- "tog-numberheadings": "Корталенашт аланза таьрахьал де",
- "tog-showtoolbar": "ГӀалатнийcдара юкъе лакхера гӀорсан гартакх хьахьокха (JavaScript)",
- "tog-editondblclick": "Шозза цлицакацa oагӀув хувца (JavaScript)",
- "tog-editsectiononrightclick": "Декъам хувца кертмугӀа аьтта цлицака я (JavaScript)",
- "tog-watchcreations": "Аз яь йола оагӀувнаш теркама дагарле йолач чуяьккха",
- "tog-watchdefault": "Аз хийца йола оагӀувнаш теркама дагарле йолач чуяьккха",
- "tog-watchmoves": "Аз цӀи хийца йола оагӀувнаш теркама дагарле йолач чуяьккха",
- "tog-watchdeletion": "Аз дӀаяьккха йола оагӀувнаш теркама дагарле йолач чуяьккха",
- "tog-minordefault": "Теркамза хувцамаш лоархӀамза белгалде",
+ "tog-underline": "Хьожадерга |ок|алтакадар:",
+ "tog-hideminor": "Хьат|аяздара чу кердача хувцамашa з|амига дола хувцамаш къайладаккха",
+ "tog-hidepatrolled": "Хьат|аяздара чу кердача хувцамашa д|анийсадаь дола хувцамаш къайладаккха",
+ "tog-newpageshidepatrolled": "Хьат|аяздара чу кердача хувцамашa хьанийсадаь дола оаг|онаш къайлаяккха",
+ "tog-extendwatchlist": "Шерадаь теркама хьат|аяздар, массадола хувцамаш чулоацаш дола, алхха т|ехьара даьраш мара а доацаш",
+ "tog-usenewrc": "Керда хувцамашка а хьат|аяздара зембаккхарга а эргадаккхараш тоабаде (JavaScript эша)",
+ "tog-numberheadings": "Керташкашта аланза таьрахьа хотта",
+ "tog-showtoolbar": "Г|алатнийcдара г|ирсагартакх хьахьокха (JavaScript)",
+ "tog-editondblclick": "Шозза д|ато|амцa oаг|ув хувца (JavaScript)",
+ "tog-editsectiononrightclick": "Ралсдекъараш хувца дахкаца аьтта д|ато|амца керташка т|а (JavaScript)",
+ "tog-watchcreations": "Tеркама хьат|аяздар т|а аз яь оаг|онаши чуяьккха паьлаши т|атоха",
+ "tog-watchdefault": "Tеркама хьат|аяздар т|а аз хийца оаг|онаши паьлаша кустяздараши т|атоха",
+ "tog-watchmoves": "Tеркама хьат|аяздар т|а аз ц|ихийца оагӀонаши паьлаши т|атоха",
+ "tog-watchdeletion": "Tеркама хьат|аяздар т|а аз д|аяьккха оагӀонаши паьлаши т|атоха",
+ "tog-minordefault": "Теркамза хувцамашта лоархӀамза мо белгало хотта",
"tog-previewontop": "ГӀалатнийсдара кора хьалхе бӀаргтассам оттае",
- "tog-previewonfirst": "ГӀалатнийсдаре дехьавоалаш/йоалаш бӀаргтассам хьахьокха",
- "tog-enotifwatchlistpages": "ОагӀувний хувцамахи теркама дагарленахи лаьца, д-хоамнец хоам бе",
- "tog-enotifusertalkpages": "Са дувцама оагӀув тӀа хувцамаш хилача, д-хоамнец хоам бе",
- "tog-enotifminoredits": "Геттара зӀамига хувцамаш хилача, д-хоамнец хоам бе",
- "tog-enotifrevealaddr": "ЗӀы хоамаш тӀа са хоамни моттиг хьахьокха",
- "tog-shownumberswatching": "Ший теркама дагарленгах оагӀув чулаьца бола дакъалаьцархой таьрах хьахьокха",
+ "tog-previewonfirst": "ГӀалатнийсдаре дехьавоалаш/йоалаш бӀаргтассам гойта",
+ "tog-enotifwatchlistpages": "Tеркама хьат|аяздар чура оаг|онаши паьлаши хувцамаех лаьца д-хоамне т|а дайта хьа",
+ "tog-enotifusertalkpages": "Са дувцама оаг|он т|а хувцамаш хилча, д-хоамнец хьахоам бе",
+ "tog-enotifminoredits": "Геттара з|амига хувцамаш хилча а, д-хоамнец хьахоам бе",
+ "tog-enotifrevealaddr": "З|ы хоамаш т|а са д-хоамни ц|ей-меттиг гойта",
+ "tog-shownumberswatching": "Шоай теркама хьат|аяздар чу оаг|ув чуяьккха доакьошхоша таьрахь гойта",
"tog-oldsig": "Дола кулгайоазув:",
- "tog-fancysig": "Ший кулга яздара массахоамбаккхам (ший лоӀаме Ӏинка йоацаш)",
- "tog-uselivepreview": "Сиха бӀарахьажар (JavaScript) (Экспериментально)",
- "tog-forceeditsummary": "Хоам бе, хувцамий лоацам белгал даь деце",
- "tog-watchlisthideown": "Са хувцамаш теркама дагарчера къайладаккха",
- "tog-watchlisthidebots": "БӀатий хувцамаш теркама дагарчера къайладаккха",
- "tog-watchlisthideminor": "Са зӀамига хувцамаш теркама дагарчера къайладаккха",
- "tog-watchlisthideliu": "Чубаьнна дакъалаьцархой хувцамаш теркама дагaрчеча къайлаяьккха",
- "tog-watchlisthideanons": "ЦӀи йоаца дакъалаьцархой хувцамаш теркама дагрчеча къайлаяьккха",
- "tog-watchlisthidepatrolled": "Теркама дагарчера дӀанийсъя хувцамаш къайлаяьккха",
- "tog-ccmeonemails": "Аз дакъалаьцархошоа дахта каьхаташ са д-хоамни тӀа хьатӀадайта",
- "tog-diffonly": "Диста кIал йоалаж йола оагӀувна дакъа ма хьокха",
- "tog-showhiddencats": "Къайла катагаш хьахьокха",
- "underline-always": "Массаза",
- "underline-never": "ЦӀаккха",
- "underline-default": "МазабӀарглокхарий оттамаш хайрамбе",
- "editfont-style": "ТIеракуц хувца",
- "sunday": "КӀиранди",
+ "tog-fancysig": "Ший кулгаяздара массахоамбаккхар (ший ло|ама хьожадерг йоацаш)",
+ "tog-uselivepreview": "Сиха б|арахьажар (JavaScript)",
+ "tog-forceeditsummary": "Хьахоам бе, наггахь санна хувцама кустяздара меттига хьалайиза еце",
+ "tog-watchlisthideown": "Са теркама xьат|аяздара хувцамаш къайладаха",
+ "tog-watchlisthidebots": "Теркама xьат|аяздар чура б|ата хувцамаш къайладаха",
+ "tog-watchlisthideminor": "Са теркама xьат|аяздара з|амига хувцамаш къайладаха",
+ "tog-watchlisthideliu": "Теркама xьат|аяздар чура хьабайза доакъошхоша хувцамаш къайладаха",
+ "tog-watchlisthideanons": "Теркама xьат|аяздар чура ц|ийоацача доакъошхоша хувцамаш къайладаха",
+ "tog-watchlisthidepatrolled": "Теркама xьат|аяздар чура д|анийсдаь хувцамаш къайладаха",
+ "tog-ccmeonemails": "Аз д|ахийташ дола доакъошхошоа каьхаташ са д-хоамни т|а дайта хьа",
+ "tog-diffonly": "Шин нийсхьале в|ашинийсдара к|ала бола оаг|он чулоацам ма гойта",
+ "tog-showhiddencats": "Къайла катагаш гойта",
+ "underline-always": "Даиман",
+ "underline-never": "Ц|аккха",
+ "underline-default": "Мазаб|арглокхарa оттамаш хайраде",
+ "editfont-style": "Нийсдара меттига чу йола зарба б|армат:",
+ "editfont-monospace": "Башхалон зарба",
+ "sunday": "К|иранди",
"monday": "Оршот",
"tuesday": "Шинара",
"wednesday": "Кхаьра",
"thursday": "Ера",
"friday": "ПӀаьраска",
"saturday": "Шоатта",
- "sun": "КӀи",
+ "sun": "К|и",
"mon": "Ор",
"tue": "Ши",
"wed": "Кха",
"thu": "Ер",
- "fri": "ПӀаь",
+ "fri": "П|аь",
"sat": "Шоа",
"january": "Нажгамсхой",
"february": "Саькур",
- "march": "Мутхьол",
+ "march": "Муттхьол",
"april": "Тушоли",
"may_long": "Бекарг",
"june": "Аьтинг",
- "july": "КӀимарс",
+ "july": "К|имарс",
"august": "Мангал",
"september": "Моажол",
"october": "Тов",
@@ -77,11 +79,11 @@
"december": "Чантар",
"january-gen": "Нажгамсхой бетт",
"february-gen": "Саькур бетт",
- "march-gen": "Мутхьол бетт",
+ "march-gen": "Муттхьол бетт",
"april-gen": "Тушоли бетт",
"may-gen": "Бекарг бетт",
"june-gen": "Аьтинг бетт",
- "july-gen": "КӀимарс бетт",
+ "july-gen": "К|имарс бетт",
"august-gen": "Мангал бетт",
"september-gen": "Моажол бетт",
"october-gen": "Тов бетт",
@@ -89,110 +91,128 @@
"december-gen": "Чантар бетт",
"jan": "Нажг.",
"feb": "Саьк.",
- "mar": "Мутхь.",
+ "mar": "Мутт.",
"apr": "Tуш.",
"may": "Бек.",
"jun": "Аьт.",
- "jul": "КӀим.",
+ "jul": "К|им.",
"aug": "Манг.",
"sep": "Моаж.",
"oct": "Тов.",
"nov": "Лайч.",
"dec": "Чант.",
+ "january-date": "Нажгамсхой $1",
+ "february-date": "Саькур $1",
+ "march-date": "Муттхьол $1",
+ "april-date": "Тушоли $1",
+ "may-date": "Бекарг $1",
+ "june-date": "Аьтинг $1",
+ "july-date": "К|имарс $1",
+ "august-date": "Мангал $1",
+ "september-date": "Моажол $1",
+ "october-date": "Тов $1",
+ "november-date": "Лайчил $1",
+ "december-date": "Чантар $1",
"pagecategories": "{{PLURAL:$1|1=Катаг|Катагаш}}",
- "category_header": "\"$1\" Катагачар оагӀувнаш",
+ "category_header": "\"$1\" Катага чура оаг|онаш",
"subcategories": "Чуракатагаш",
- "category-media-header": "\"$1\" Катагачар паьлаш",
- "category-empty": "''Укх катагчоа цхьаккха оагӀувнаш е паьлаш яц.''",
+ "category-media-header": "\"$1\" Катага чура паьлаш",
+ "category-empty": "''Укх катага чу цхьаккха оаг|онаш е паьлаш яц.''",
"hidden-categories": "{{PLURAL:$1|1=Къайла катаг|Къайла катагаш}}",
"hidden-category-category": "Къайла катагаш",
- "category-subcat-count": "{{PLURAL:$2|Йола катаг тӀехьара бухкатаг чулоаца.|{{PLURAL:$1|1=$1 бухкатаг хьахьекха я|$1 бухкатагаш хьахьекха я}} $2 йолачара.}}",
- "category-subcat-count-limited": "Укх катагий {{PLURAL:$1|1=$1 кӀалкатаг|$1 кӀалкатагаш}}.",
- "category-article-count": "{{PLURAL:$2|Йола цатег цхьа оагӀув мара чулоацац.|{{PLURAL:$1|1=$1 оагӀув хьахекха я|$1 оагӀувнаш хьахекха я}} укх цатега $2 йолачарах.}}",
- "category-article-count-limited": "Укх катагач {{PLURAL:$1|1=$1 оагӀув|$1 оагӀувнаш}}.",
- "category-file-count": "{{PLURAL:$2|Укх цатего ца паьла мара чулоацац.|{{PLURAL:$1|1=$1 паьла хьахьекха я|$1 паьлаш хьахьекха я}} укх цатегий $2 долачаьрахь.}}",
- "category-file-count-limited": "Укх катагач {{PLURAL:$1|1=$1 паьл|$1 паьлаш}}.",
- "listingcontinuesabbrev": "дӀахо",
- "index-category": "ДIахьожаман оагӀувнаш",
- "noindex-category": "ДIахьожаманза оагӀувнаш",
- "broken-file-category": "Болхбеш йоаца паьла Ӏинкашца оагӀувнаш",
+ "category-subcat-count": "{{PLURAL:$2|Укх катагa т|ехьара бухкатаг чулоац.|{{PLURAL:$1|1=$1 бухкатаг хьахьекха я|$1 бухкатагаш хьахьекха я}} $2 йолачарex.}}",
+ "category-subcat-count-limited": "Укх катагa чу {{PLURAL:$1|1=$1 к|алкатаг|$1 к|алкатагаш}}.",
+ "category-article-count": "{{PLURAL:$2|Укх катага цхьа оаг|ув мара чулоацац.|{{PLURAL:$1|1=$1 оаг|ув хьахекха я|$1 оаг|oнаш хьахекха я}} укх катага $2 йолачарeх.}}",
+ "category-article-count-limited": "Укх катага чу {{PLURAL:$1|1=$1 оаг|ув|$1 оаг|oнаш}}.",
+ "category-file-count": "{{PLURAL:$2|Укх катаг чу цхьа лурдар мара дац.|{{PLURAL:$1|1=$1 лурдар хьахьекха я|$1 лурдараш хьахьекха я}} укх катагa $2 долачаьрeх.}}",
+ "category-file-count-limited": "Укх катага чу {{PLURAL:$1|1=$1 лурдар|$1 лурдараш}}.",
+ "listingcontinuesabbrev": "д|ахо",
+ "index-category": "Д|ахьожама оаг|онаш",
+ "noindex-category": "Д|ахьожаманза оаг|онаш",
+ "broken-file-category": "Паьла хьожадергашца болхбеш йоаца оаг|онаш",
"about": "Лоацам",
"article": "Йоазув",
- "newwindow": "(керда кора)",
- "cancel": "Юхавалa/ялa",
- "moredotdotdot": "ДӀахо",
- "mypage": "Са оагӀув",
- "mytalk": "Са дувцама оагӀув",
- "anontalk": "Укх IP-моттига дувцам",
- "navigation": "Никътохкарг",
+ "newwindow": "(кердача коре)",
+ "cancel": "Эшац",
+ "moredotdotdot": "Д|ахо",
+ "morenotlisted": "Ер |ояздар хьалдиззанз да.",
+ "mypage": "Oаг|ув",
+ "mytalk": "Дувцам",
+ "anontalk": "Укх IP-меттига дувцам",
+ "navigation": "Наькъатохкарг",
"and": "&#32;кхы",
"qbfind": "Лахар",
- "qbbrowse": "БӀаргтасса",
+ "qbbrowse": "Б|аргтасса",
"qbedit": "Хувца",
- "qbpageoptions": "ОагӀува оттамаш",
+ "qbpageoptions": "Оаг|он оттамаш",
"qbmyoptions": "Са оттамаш",
- "faq": "Каст-каста хаттараш",
- "faqpage": "Project:Каст-каста хаттараш",
- "actions": "ДулархIамаш",
- "namespaces": "ЦӀерий аренаш",
- "variants": "Доштайпарленаш",
- "errorpagetitle": "ГӀалат",
- "returnto": "$1 оагӀув тӀа юхавалар/ялар",
+ "faq": "КТХ",
+ "faqpage": "Project:КТХ",
+ "actions": "Х|амдараш",
+ "namespaces": "Ц|ерий аренаш",
+ "variants": "Дешкепаш",
+ "navigation-heading": "Наькъагойтара хоржаг|ирс",
+ "errorpagetitle": "Г|алат",
+ "returnto": "цу $1 оаг|он т|а юхаг|о",
"tagline": "Кечал укхазара я {{SITENAME}}",
"help": "Куцтохкам",
"search": "Лахаp",
- "searchbutton": "Хьалаха",
- "go": "Дехьа гӀо",
- "searcharticle": "Дехьа гӀо",
- "history": "искар",
- "history_short": "Искар",
+ "searchbutton": "Лахар",
+ "go": "Дехьа г|о",
+ "searcharticle": "Дехьа г|о",
+ "history": "тархьар",
+ "history_short": "Тархьар",
"updatedmarker": "Со ханача денца хувцамаш хиннaд",
- "printableversion": "Каьхатзарбане доржам",
- "permalink": "Даим латта Ӏинк",
- "print": "Каьхат арадаккха",
- "view": "БӀаргтассам",
+ "printableversion": "Кепатохара нийсхьал",
+ "permalink": "Даиман латташ йола хьожадерг",
+ "print": "Кепатохар",
+ "view": "Б|аргтассам",
+ "view-foreign": "Мазаоаг|он чу $1 хьажа",
"edit": "Хувца",
"create": "Хьаде",
- "editthispage": "Ер оагӀув хувца",
- "create-this-page": "Ep oагӀув хьае",
- "delete": "ДӀадаккха",
- "deletethispage": "Ер оагӀув дӀаяьккха",
+ "editthispage": "Ер оаг|ув хувца",
+ "create-this-page": "Ep oаг|ув хьае",
+ "delete": "Д|аяккха",
+ "deletethispage": "Ер оаг|ув д|аяьккха",
+ "undeletethispage": "Ер оаг|ув д|аяккханз йита",
"undelete_short": "Меттаоттае {{PLURAL:$1|1=хувцам|$1 хувцамаш}}",
- "viewdeleted_short": "БӀаргтасса {{PLURAL:$1|1=дӀадаьккха хувцам тӀа|$1 дӀадаьккха хувцамаш тӀа}}",
+ "viewdeleted_short": "Б|аргтасса {{PLURAL:$1|1=д|адаьккха хувцам|$1 д|адаьккха хувцамаш}}",
"protect": "Лораде",
"protect_change": "хувца",
- "protectthispage": "Лорае ер оагӀув",
+ "protectthispage": "Лорае ер оаг|ув",
"unprotect": "Лорам хувца",
"unprotectthispage": "Лорам хувца",
"newpage": "Керда оагӀув",
- "talkpage": "Укх оагӀув тӀа дувцам бе",
+ "talkpage": "Укх оаг|он т|а дувцам бе",
"talkpagelinktext": "дувцам",
- "specialpage": "ГӀулакха оагӀув",
- "personaltools": "Са гӀорсаш",
- "articlepage": "Йоазув тӀа бӀаргтасса",
+ "specialpage": "Г|улакхадара оаг|ув",
+ "personaltools": "Са г|ирсаш",
+ "articlepage": "Йоазон т|а б|аргтасса",
"talk": "Дувцам",
"views": "БӀаргтассамаш",
"toolbox": "ГӀирсаш",
- "userpage": "Дакъалаьцачунна оагӀуве бӀаргтасса",
- "projectpage": "Хьахьоадайтама оагӀуве бӀаргтасса",
- "imagepage": "Паьла оагӀув тӀа бӀаргтасса",
- "mediawikipage": "Xоаман оагӀув хьахьокха",
- "templatepage": "ЧӀабала оагӀув тӀа бӀаргтасса",
+ "userpage": "Доакъошхочун оаг|он т|а б|аргтасса",
+ "projectpage": "Хьахьоадайтама оаг|oн т|а б|аргтасса",
+ "imagepage": "Лурдара оаг|oн т|а б|аргтасса",
+ "mediawikipage": "Xоаман оаг|ув хьахьокха",
+ "templatepage": "Ч|абала оаг|oн т|а б|аргтасса",
"viewhelppage": "Куцтохкам беха",
- "categorypage": "Катага оагӀув тӀа бӀаргтасса",
- "viewtalkpage": "Дувцамага бӀаргтасса",
- "otherlanguages": "Кхыча меттал",
- "redirectedfrom": "($1 тӀера хьадейта да)",
- "redirectpagesub": "ДӀа-хьа дайта оагӀув",
- "lastmodifiedat": "Укх оагӀув тӀехьара хувцам: $2, $1.",
- "viewcount": "Укх оагӀув тӀа бӀаргтасса хиннад {{PLURAL:$1|1=цхьазза|$1 шозза}}.",
- "protectedpage": "Лорама оагӀув",
- "jumpto": "Укхаза дехьа гӀо:",
- "jumptonavigation": "никътохкарг",
- "jumptosearch": "леха",
+ "categorypage": "Катага оаг|oн т|а б|аргтасса",
+ "viewtalkpage": "Дувцамага б|аргтасса",
+ "otherlanguages": "Кхыча меттаех",
+ "redirectedfrom": "($1 т|aра хьадейта да)",
+ "redirectpagesub": "Д|а-хьа дайта оаг|ув",
+ "redirectto": "Д|ахьожаде укх т|а:",
+ "lastmodifiedat": "Укх оаг|oн т|ехьара хувцам: $2, $1.",
+ "viewcount": "Укх оаг|oн т|а б|аргтассаб {{PLURAL:$1|цхьааца\n|$1 times}}. {{PLURAL:$1|1=цхьазза|$1за}}.",
+ "protectedpage": "Лорама оаг|ув",
+ "jumpto": "Укхаза дехьаг|о:",
+ "jumptonavigation": "наькъатоxкар",
+ "jumptosearch": "лaхаp",
"pool-timeout": "ЧIегатохара сабаран ха чакхаяьннай",
"pool-queuefull": "Хаттарий цӀа хьалдизад",
"pool-errorunknown": "Довзаш доаца гӀалат",
+ "poolcounter-usage-error": "Лелдара г|алат: $1",
"aboutsite": "Лоацам {{SITENAME}}",
"aboutpage": "Project:Лоацам",
"copyright": "$1 чулоацамаца тIакхоачаш да.",
@@ -229,9 +249,11 @@
"hidetoc": "къайладаккха",
"collapsible-collapse": "чудерзаде",
"collapsible-expand": "хьадоаржаде",
+ "confirmable-yes": "X|аа",
+ "confirmable-no": "A",
"thisisdeleted": "$1 бӀаргтасса е юхаметтаоттаде?",
"viewdeleted": "$1 бӀаргтасса?",
- "restorelink": "{{PLURAL:$1|1=дӀаяьккха хувцам|$1 дӀаяьккха хувцамаш}}",
+ "restorelink": "{{PLURAL:$1|1=д|адaьккха хувцам|$1 д|адaьккха хувцамаш}}",
"feedlinks": "Цу тайпара:",
"site-rss-feed": "$1 RSS мугӀ",
"site-atom-feed": "$1 Atom мугӀ",
@@ -251,8 +273,12 @@
"nosuchaction": "Цу тайпара дулархIам бац",
"nosuchspecialpage": "Изза мо гӀон оагӀув яц",
"error": "ГӀалат",
+ "databaseerror-query": "Дехар: $1",
+ "databaseerror-function": "Белхма|ан: $1",
+ "databaseerror-error": "Г|алат: $1",
"missing-article": "Кораде дезаш хинна оагӀувни яздам корадаьдац «$1» $2.\n\nИз мо гӀалат нийсалуш хула, саг тишъенна Ӏинкаца, д|адаьккха дола оагӀувни хувца искара тӀа чувала гӀертача.\n\nНаггахь санна из иштта децe, шоана гӀорса Ӏалаш деча гӀалат кораяь хила мега.\nДехар да, [[Special:ListUsers/sysop|мазакулгалхочоа]] хоам бе, URL хьахьокхаш.",
"missingarticle-rev": "(бӀаргоагӀув № $1)",
+ "missingarticle-diff": "(башх: $1, $2)",
"internalerror": "Чура гӀалат",
"internalerror_info": "Чура гӀалат: $1",
"cannotdelete-title": "ОагIув дIаяккха йиш яц \"$1\"",
@@ -260,8 +286,9 @@
"badtitletext": "Дехаш дола оагӀувни цӀи, нийса яц, яьсса я е меттаюкъара е массаюкъара цӀи харцахь я. ЦӀера юкъе мегаш доаца харакъаш нийсаденна хила мегаш да.",
"viewsource": "БIаргтассам",
"actionthrottled": "Сихален овзамал",
- "protectedpagetext": "Хувцаман белхаш долаш ер оагIув къайла я.",
+ "protectedpagetext": "Ер оаг|ув къайла я хувцамаш дергдоацаш е кхы дола х|амдараш.",
"virus-unknownscanner": "довзашдоаца мазаундохьалург:",
+ "welcomeuser": "Маьрша доаг|алд, $1!",
"yourname": "Дакъалаьцархочунна цӀи:",
"yourpassword": "КъайладIоагӀа:",
"yourpasswordagain": "КъайладIоагӀа юха Ӏоязаде:",
@@ -282,9 +309,10 @@
"userlogin-resetlink": "Чувала/яла цӀии дIоагӀаи дийцаденнадий?",
"createaccountmail": "КъайладIоагIа д-хоамнец хьадайта",
"createaccountreason": "Бахьан:",
+ "createacct-reason": "Бахьан",
"badretype": "Оаша яьккха дIоагIий цIераш шоайл таралуш яц.",
"loginerror": "Дакъалаьцархочун цIи нийса яц",
- "mailmypassword": "Керда къайладIоагӀа хьаэца",
+ "mailmypassword": "Керда къайлад|оаг|а эца",
"mailerror": "Хоам дIабохьийташ гIалат даьннад: $1",
"emailconfirmlink": "Доаржален хоамни хьожадорг дIачIоагIаде",
"loginlanguagelabel": "Мотт: $1",
@@ -378,8 +406,8 @@
"rev-delundel": "хьахьокха/къайлаяьккха",
"rev-showdeleted": "хьахьокха",
"revdelete-show-file-submit": "XӀаа",
- "revdelete-radio-set": "XӀаа",
- "revdelete-radio-unset": "A",
+ "revdelete-radio-set": "Къайла",
+ "revdelete-radio-unset": "Гуш йола",
"revdelete-log": "Бахьан",
"revdel-restore": "Кустгойтам хувца",
"pagehist": "ОагӀува искар",
@@ -398,7 +426,7 @@
"searchresults": "Тохкама гIулакхахилар",
"searchresults-title": "\"$1\" тохка",
"notextmatches": "ОагIувнаша яздамий вIашагIакхетараш дац",
- "prevn": "{{PLURAL:$1|хьалхйоаг|ар $1|хьалхйоаг|араш $1|хьалхйоаг|араш $1}}",
+ "prevn": "{{PLURAL:$1|хьалхйоагlар $1|хьалхйоагlараш $1|хьалхйоагlараш $1}}",
"nextn": "{{PLURAL:$1|тlехьайоагlар $1|тlехьайоагlараш $1|тlехьайоагlараш $1}}",
"prevn-title": "{{PLURAL:$1|1=$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}",
"nextn-title": "{{PLURAL:$1|1=$1 тIехьара йоазув|$1 тIехьара йоазувнаш}}",
@@ -420,12 +448,11 @@
"search-section": " (дакъа $1)",
"search-suggest": "Iа лохар из хила мега: $1",
"search-interwiki-caption": "Гаргалон хьахьоадайтамаш",
- "search-interwiki-default": "$1 толамчаш:",
+ "search-interwiki-default": "$1 хьахиннараш:",
"search-interwiki-more": "(кха)",
"search-relatedarticle": "шоайл дола",
"searchrelated": "гаргара",
"searchall": "деррига",
- "showingresultsheader": "{{PLURAL:$5|1='''$1''' толамче укх '''$3''' долачарах|'''$1 — $2''' толамчаш укх '''$3''' долачарах}} '''$4'''а",
"search-nonefound": "ДIахаттама нийсамаш корадаьдац.",
"powersearch-legend": " Доккха тахкар",
"powersearch-ns": " ЦIерий аренашкахь лахар",
@@ -456,14 +483,14 @@
"timezoneregion-europe": "Аьроп",
"timezoneregion-indian": "ХIинда форд",
"timezoneregion-pacific": "Тийна форд",
- "prefs-searchoptions": "Тохкама оттамаш",
+ "prefs-searchoptions": "Лахар",
"prefs-files": "Паьлаш",
"youremail": "Д-хоамни:",
- "username": "Дакъалаьцархочунна цIи:",
+ "username": "{{GENDER:$1|Доакъошхочун ц|и}}:",
"yourrealname": "Шун цIи:",
"yourlanguage": "Мотт:",
- "gender-male": "МаIа",
- "gender-female": "Кхал",
+ "gender-male": "Массаоаг|онаш нийсaеш ва из",
+ "gender-female": "Массаоаг|онаш нийсаеш я из",
"email": "Д-хоамни",
"prefs-help-email": "Д-хоамни моттиг ала эшаш дац, амма новкъа даца, наггахь санна къайладIоагIа шоана дийцалой, цу тIа хьатIадайтаргда.",
"prefs-help-email-others": "Кхыбола дакъалаьцархоша шоаца бувзам я йийшхургья шун оагIува тIа гIолла, д-хоамни хьаела ца езаш.",
@@ -584,11 +611,10 @@
"newpages": "Керда оагIувнаш",
"move": "ЦIи хувца",
"movethispage": "Укх оагIува цIи хувца",
- "pager-newer-n": "{{PLURAL:$1|кердагIа дара|кердагIа долачаьрахь|кердагIа дараш}} $1",
- "pager-older-n": "{{PLURAL:$1|къаьнара дара|къаьнара долaчаьрахь|къаьнара дараш}} $1",
+ "pager-newer-n": "{{PLURAL:$1|кердагIа дара|кердагIа дараш|кердагIа долачаьрахь}} $1",
+ "pager-older-n": "{{PLURAL:$1|къаьнара дара|къаьнара дараш|къаьнара долaчаьрахь}} $1",
"booksources": "Китабий гIувам",
"booksources-search-legend": "Китаба лоаца маIандара тохкам",
- "booksources-go": "Лаха",
"log": "Тептараш",
"allpages": "Еррига оагIувнаш",
"prevpage": "($1) хьалхара оагIув",
@@ -611,7 +637,7 @@
"watchthispage": "Укх оагIува теркам бе",
"unwatch": "Лора ма де",
"watchlist-details": "Шун теркама дагарченгахь йола $1 {{PLURAL:$1|1=оагIув|оагIувнаш}}, дувцама оагIувнаш ца лоархIаш.",
- "wlshowlast": "Тlехьара $1 сахьаташ $2 денош $3 хьахьокха",
+ "wlshowlast": "Тlехьара $1 сахьаташ $2 денош хьахьокха",
"watchlist-options": "Зем баккха дагарена хувцамаш",
"watching": "Тохкам беча оагIув тIа тIадаккха",
"unwatching": "Тохкам беча оагIув тIера дIадаккха",
@@ -686,7 +712,7 @@
"whatlinkshere-hidelinks": "$1 Iинкаш",
"whatlinkshere-hideimages": "$1 суртIинкаш",
"whatlinkshere-filters": "ЦIенъераш",
- "blockip": "Дакъалаьцархочунна чIега бола",
+ "blockip": "Укх {{GENDER:$1|доакъошхочоа}} ч|ега бола",
"ipboptions": "2 сахьат:2 hours,1 ди:1 day,3 ди:3 days,1 кIира:1 week,2 кIира:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шу:1 year,сиха ца луш:infinite",
"ipblocklist": "ЧIега бела дакъалаьцархой",
"blocklink": "чIегa тоха",
@@ -810,7 +836,6 @@
"exif-iimcategory-spo": "Нидзоамал",
"exif-iimcategory-war": "ТIемаш, кховсамаши латтараши",
"exif-iimcategory-wea": "Хаоттам",
- "watchlistall2": "деррига",
"namespacesall": "деррига",
"monthsall": "деррига",
"confirm_purge_button": "ХIаа",
@@ -823,7 +848,7 @@
"duplicate-defaultsort": "Зем бе. Сатийна дIа-хьа хьоржама доагI \"$2\" хьалхара сатийна дIа-хьа хьоржама доагI \"$1\" хьахьоржа.",
"version": "Доржам",
"version-specialpages": "ГIулакхий оагIувнаш",
- "version-version": "(Доржам $1)",
+ "version-version": "($1)",
"version-software-version": "Доржам",
"fileduplicatesearch-filename": "ПаьлацIи:",
"fileduplicatesearch-submit": "Лаха",
@@ -846,5 +871,6 @@
"htmlform-submit": "ДIадахьийта",
"htmlform-reset": "Хувцамаш юхадаккха",
"htmlform-selectorother-other": "Кхыдола",
- "rightsnone": "(а)"
+ "rightsnone": "(а)",
+ "revdelete-summary": "хувцамий лоацам"
}
diff --git a/languages/i18n/io.json b/languages/i18n/io.json
index a5190394..afc328c8 100644
--- a/languages/i18n/io.json
+++ b/languages/i18n/io.json
@@ -454,7 +454,6 @@
"search-interwiki-more": "(plusa)",
"searchall": "omna",
"showingresults": "Montrante infre {{PLURAL:$1|'''1''' rezulto|'''$1''' rezulti}}, qui komencas kun numero #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Rezultajo '''$1''' ek '''$3'''|Rezultaji '''$1 - $2''' ek '''$3'''}} di '''$4'''",
"powersearch-legend": "Avancita sercho",
"powersearch-ns": "Serchez en nomari:",
"powersearch-toggleall": "Omna",
@@ -650,7 +649,6 @@
"statistics-header-users": "Statistiki di uzanto",
"statistics-header-hooks": "Altra statistiki",
"statistics-pages": "Pagini",
- "statistics-mostpopular": "Maxim ofte vizitita pagini",
"doubleredirects": "Duopla ridirektili",
"brokenredirects": "Ridirektili nekorekta",
"brokenredirectstext": "La sequanta ridirektili ligas a ne-existanta pagini:",
@@ -671,7 +669,6 @@
"uncategorizedtemplates": "Nekategorizita shabloni",
"unusedcategories": "Neuzata kategorii",
"unusedimages": "Neuzata imaji",
- "popularpages": "Populara pagini",
"wantedcategories": "Dezirata kategorii",
"wantedpages": "Dezirata pagini",
"wantedfiles": "Dezirata arkivi",
@@ -697,7 +694,6 @@
"pager-older-n": "{{PLURAL:$1|plu anciena 1|plu anciena $1}}",
"booksources": "Fonti di libri",
"booksources-search-legend": "Serchez librala fonti",
- "booksources-go": "Irar",
"specialloguserlabel": "Uzanto:",
"speciallogtitlelabel": "Titulo:",
"log": "Registrari",
@@ -746,7 +742,7 @@
"unwatchthispage": "Ne plus surveyar",
"notanarticle": "Ne esas artiklo",
"wlnote": "Infre esas la lasta {{PLURAL:$1|chanjo|'''$1''' chanji}} dum la lasta {{PLURAL:$2|horo|'''$2''' hori}}.",
- "wlshowlast": "Montrar la lasta $1 hori $2 dii $3",
+ "wlshowlast": "Montrar la lasta $1 hori $2 dii",
"watchlist-options": "Surveryo-listo selekti",
"watching": "Surveyanta…",
"unwatching": "Cesanta surveyar…",
@@ -770,7 +766,6 @@
"deletereasonotherlist": "Altra motivo",
"deletereason-dropdown": "*Ordinara motivi por efaco\n** Demandita da autoro\n** Kopiyuro Violaco\n** Korupto",
"rollback": "Retrorulez redakti",
- "rollback_short": "Retrorular",
"rollbacklink": "retrorulez",
"rollbackfailed": "Retrorular ne sucesis",
"cantrollback": "Ne esas posibla retrorular. La lasta kontributanto esas la nura autoro di ica pagino.",
@@ -1020,7 +1015,6 @@
"exif-sharpness-0": "Normala",
"exif-gpsspeed-k": "Kilometri per horo",
"exif-gpsspeed-m": "Milii per horo",
- "watchlistall2": "omna",
"namespacesall": "omna",
"monthsall": "omna",
"confirmemail_needlogin": "Vu mustas $1 pro konfirmar vua adreso di e-posto.",
@@ -1053,7 +1047,7 @@
"version": "Versiono",
"version-specialpages": "Specala pagini",
"version-other": "Altra",
- "version-version": "(Versiono $1)",
+ "version-version": "($1)",
"version-license": "Licenco",
"version-software-product": "Produkturo",
"version-software-version": "Versiono",
@@ -1073,6 +1067,7 @@
"htmlform-reset": "Desfacar chanji",
"htmlform-selectorother-other": "Altra",
"rightsnone": "(nula)",
+ "revdelete-summary": "redakto-rezumo",
"searchsuggest-search": "Serchez",
"searchsuggest-containing": "quan kontenas...",
"expand_templates_output": "Rezulto",
diff --git a/languages/i18n/is.json b/languages/i18n/is.json
index f8c8f34f..df335037 100644
--- a/languages/i18n/is.json
+++ b/languages/i18n/is.json
@@ -17,7 +17,8 @@
"Urhixidur",
"Ævar Arnfjörð Bjarmason",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Undirstrika tengla:",
@@ -34,6 +35,7 @@
"tog-watchdefault": "Bæta síðum og skrám sem ég breyti á vaktlistann minn",
"tog-watchmoves": "Bæta síðum og skrám sem ég færi á vaktlistann minn",
"tog-watchdeletion": "Bæta síðum og skrám sem ég eyði á vaktlistann minn",
+ "tog-watchrollback": "Bæta síðum þar sem ég hef tekið aftur breytingu á vaktlistann minn",
"tog-minordefault": "Merkja allar breytingar sem minniháttar sjálfgefið",
"tog-previewontop": "Sýna forskoðun á undan breytingarkassanum",
"tog-previewonfirst": "Sýna forskoðun með fyrstu breytingu",
@@ -44,7 +46,7 @@
"tog-shownumberswatching": "Sýna fjölda vaktandi notenda",
"tog-oldsig": "Núverandi undirskrift:",
"tog-fancysig": "Meðhöndla undirskrift sem wikimál (án sjálfvirks tengils)",
- "tog-uselivepreview": "Nota beina forskoðun (Á tilraunastigi)",
+ "tog-uselivepreview": "Nota beina forskoðun",
"tog-forceeditsummary": "Birta áminningu þegar breytingarágripið er tómt",
"tog-watchlisthideown": "Ekki sýna mínar breytingar á vaktlistanum",
"tog-watchlisthidebots": "Ekki sýna breytingar vélmenna á vaktlistanum",
@@ -181,6 +183,7 @@
"permalink": "Varanlegur tengill",
"print": "Prenta",
"view": "Skoða",
+ "view-foreign": "Skoða á $1",
"edit": "Breyta",
"create": "Skapa",
"editthispage": "Breyta þessari síðu",
@@ -215,6 +218,7 @@
"otherlanguages": "Á öðrum tungumálum",
"redirectedfrom": "(Tilvísað frá $1)",
"redirectpagesub": "Tilvísunarsíða",
+ "redirectto": "Tilvísun á",
"lastmodifiedat": "Þessari síðu var síðast breytt $1 klukkan $2.",
"viewcount": "Þessi síða hefur verið skoðuð $1 {{PLURAL:$1|sinni|sinnum}}.",
"protectedpage": "Vernduð síða",
@@ -265,6 +269,9 @@
"hidetoc": "fela",
"collapsible-collapse": "Fela",
"collapsible-expand": "Sýna",
+ "confirmable-confirm": "Ert {{GENDER:$1|þú}} viss?",
+ "confirmable-yes": "Já",
+ "confirmable-no": "Nei",
"thisisdeleted": "Endurvekja eða skoða $1?",
"viewdeleted": "Skoða $1?",
"restorelink": "$1 {{PLURAL:$1|eydd breyting|eyddar breytingar}}",
@@ -382,6 +389,9 @@
"gotaccountlink": "Skráðu þig inn",
"userlogin-resetlink": "Gleymdir þú notendaupplýsingunum þínum?",
"userlogin-resetpassword-link": "Gleymdiru lykilorðinu þínu?",
+ "userlogin-helplink2": "Hjálp við innskráningu",
+ "userlogin-loggedin": "Þú ert búin(n) að skrá þig inn sem {{GENDER:$1|$1}}.\nNotaðu eyðablaðið fyrir neðan til að skrá þig inn sem annar notandi.",
+ "userlogin-createanother": "Stofna annan aðgang",
"createacct-emailrequired": "Netfang",
"createacct-emailoptional": "Netfang (valfrjálst)",
"createacct-email-ph": "Skrifaðu niður netfangið þitt",
@@ -443,9 +453,12 @@
"createaccount-text": "Einhver bjó til aðgang fyrir netfangið þitt á {{SITENAME}} ($4) undir nafninu „$2“, með lykilorðið „$3“.\nÞú ættir að skrá þig inn og breyta lykilorðinu núna.\n\nÞú getur hunsað þessi skilaboð, ef villa hefur átt sér stað.",
"login-throttled": "Þér hefur mistekist að skrá þig inn undir þessu notendanafni of oft.\nVinsamlegast bíðið $1 áður en þú reynir aftur.",
"login-abort-generic": "Innskráningin misheppnaðist - hætt var við hana.",
+ "login-migrated-generic": "Aðgangurinn þinn hefur verið sameinaður og notendanafnið þitt finnst ekki lengur á þessum wiki.",
"loginlanguagelabel": "Tungumál: $1",
"suspicious-userlogout": "Beiðni um útskráningu hafnað því hún var líklegast send frá biluðum vafra eða vefseli sem hefur vistað vefsíðuna í flýtiminni.",
"createacct-another-realname-tip": "Alvöru nafn er valfrjálst. Ef þú kýst að gefa það upp, verður það notað til að gefa þér heiður af verkum þínum.",
+ "pt-login": "Innskrá",
+ "pt-login-button": "Innskrá",
"pt-createaccount": "Stofna aðgang",
"pt-userlogout": "Útskrá",
"php-mail-error-unknown": "Óþekkt villa í PHP mail() aðgerð.",
@@ -460,6 +473,7 @@
"retypenew": "Endurtaktu nýja lykilorðið:",
"resetpass_submit": "Skrifaðu aðgangsorðið og skráðu þig inn",
"changepassword-success": "Það tókst að breyta lykilorðinu þínu!",
+ "changepassword-throttled": "Þú hefur gert of margar tilraunir til innskráningar.\nVinsamlegast bíddu í $1 áður en þú reynir aftur.",
"resetpass_forbidden": "Ekki er hægt að breyta lykilorðum",
"resetpass-no-info": "Þú verður að vera skráð(ur) inn til að hafa aðgang að þessari síðu.",
"resetpass-submit-loggedin": "Breyta lykilorði",
@@ -611,7 +625,7 @@
"edit-gone-missing": "Gat ekki uppfært síðu.\nSvo virðist sem henni hafi verið eytt.",
"edit-conflict": "Breytingaárekstur.",
"edit-no-change": "Breyting þín var hunsuð, því engin breyting var á textanum.",
- "postedit-confirmation-saved": "Breytingin þín var vistuð.",
+ "postedit-confirmation-saved": "Breyting þín hefur verið vistuð.",
"edit-already-exists": "Gat ekki skapað nýja síðu.\nHún er nú þegar til.",
"defaultmessagetext": "Sjálfgefinn skilaboða texti",
"content-failed-to-parse": "Gat ekki þáttað $2 efni samkvæmt $1 líkani: $3",
@@ -622,6 +636,7 @@
"content-model-text": "hreinn texti",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "duplicate-args-category": "Síður með eins gildi í ítengingu sniðs",
"expensive-parserfunction-warning": "'''Viðvörun:''' Þessi síða inniheldur of mörg vinnslufrek aðgerðar þáttunar köll.\n\nHún ætti að innihalda minna en $2 {{PLURAL:$2|kall|köll}}, en {{PLURAL:$1|er nú $1 kall|eru nú $1 köll}}.",
"expensive-parserfunction-category": "Síður með of mörg vinnslufrek aðgerðar þáttunar köll",
"post-expand-template-inclusion-warning": "'''Viðvörun:''' Sniðið tekur of mikið pláss.\nHluti sniðsins verður ekki með.",
@@ -736,7 +751,7 @@
"mergehistory": "Sameina breytingaskrár",
"mergehistory-header": "Þessi síða gerir þér kleift að sameina breytingarskrá tveggja síðna.\nSjáðu til þess að þessi breyting sameini breytingarskrárnar samfellt.",
"mergehistory-box": "Sameina breytingarskrá tveggja síðna:",
- "mergehistory-from": "Heimildsíða:",
+ "mergehistory-from": "Upprunaleg síða:",
"mergehistory-into": "Áætlunarsíða:",
"mergehistory-list": "Breytingarskrá sem hægt er að sameina",
"mergehistory-merge": "Eftirtaldar útgáfur [[:$1]] má sameina [[:$2]].\nNotaðu valtakkadálkinn til þess að sameina aðeins þær útgáfur sem stofnaðar voru fyrir uppgefið tímamark.\nAthugaðu að með því að nota flakktenglana er þessi dálkur endurstilltur.",
@@ -754,7 +769,6 @@
"mergehistory-same-destination": "Upprunasíðan og marksíðan mega ekki vera sú sama",
"mergehistory-reason": "Ástæða:",
"mergelog": "Sameiningar skrá",
- "pagemerge-logentry": "sameinaði [[$1]] við [[$2]] (útgáfur frá $3)",
"revertmerge": "Taka aftur sameiningu",
"mergelogpagetext": "Þetta er skrá yfir síðustu sameiningar einnar síðu við aðra.",
"history-title": "$1: Breytingaskrá",
@@ -764,7 +778,7 @@
"lineno": "Lína $1:",
"compareselectedversions": "Bera saman valdar útgáfur",
"showhideselectedversions": "Sýna/fela valdar breytingar",
- "editundo": "Taka aftur þessa breytingu",
+ "editundo": "afturkalla þessa breytingu",
"diff-empty": "(Enginn munur)",
"diff-multi-sameuser": "($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá sama notandanum)",
"diff-multi-manyusers": "($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá fleiri en $2 {{PLURAL:$2|notanda|notendum}}.)",
@@ -803,12 +817,15 @@
"searchrelated": "tengt",
"searchall": "öllum",
"showingresults": "Sýni <strong>$1</strong> {{PLURAL:$1|niðurstöðu|niðurstöður}} frá og með #<strong>$2</strong>.",
+ "showingresultsinrange": "Sýni allt að <strong>$1</strong> {{PLURAL:$1|niðurstöðu|niðurstöður}} á bilinu <strong>$2</strong> til <strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Niðurstaða|Niðurstöður}} <strong>$1-$2</strong> af <strong>$3</strong>",
"search-nonefound": "Engar niðurstöður pössuðu við fyrirspurnina.",
"powersearch-legend": "Ítarlegri leit",
"powersearch-ns": "Leita í nafnrýmum:",
"powersearch-togglelabel": "Athuga:",
"powersearch-toggleall": "Allt",
"powersearch-togglenone": "Ekkert",
+ "powersearch-remember": "Muna val fyrir leitir í framtíðinni",
"search-external": "Ytri leit",
"searchdisabled": "{{SITENAME}}-leit er óvirk.\nÞú getur leitað í genum Google á meðan.\nAthugaðu að skrár þeirra yfir {{SITENAME}}-efni kunna að vera úreltar.",
"search-error": "Villa kom upp við leit að: $1",
@@ -1076,6 +1093,7 @@
"recentchanges-label-minor": "Þetta er minniháttar breyting",
"recentchanges-label-bot": "Þessi breyting var gerð af vélmenni",
"recentchanges-label-unpatrolled": "Þessi breyting hefur ekki verið yfirfarin",
+ "recentchanges-label-plusminus": "Stærð síðunnar breyttist um svona mörg bæti",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjá einng [[Special:NewPages|lista yfir nýjar síður]])",
"rcnotefrom": "Að neðan {{PLURAL:$5|er breyting síðan|eru breytingar síðan}} <strong>$3, $4</strong> (allt að <strong>$1</strong> sýndar).",
"rclistfrom": "Sýna breytingar frá og með $3 $2",
@@ -1118,7 +1136,7 @@
"recentchangeslinked-toolbox": "Skyldar breytingar",
"recentchangeslinked-title": "Breytingar tengdar \"$1\"",
"recentchangeslinked-summary": "Þetta er listi yfir nýlega gerðar breytingar á síðum sem tengt er í frá tilgreindri síðu (eða á meðlimum úr tilgreindum flokki).\nSíður á [[Special:Watchlist|vaktlistanum þínum]] eru '''feitletraðar'''.",
- "recentchangeslinked-page": "Nafn á síða:",
+ "recentchangeslinked-page": "Síðutitill:",
"recentchangeslinked-to": "Sýna breytingar á síðum sem tengjast uppgefinni síðu í staðinn",
"upload": "Hlaða inn skrá",
"uploadbtn": "Hlaða inn skrá",
@@ -1178,6 +1196,7 @@
"fileexists-shared-forbidden": "Skrá með þessu nafni er þegar til í sameiginlega myndasafninu.\nEf þú villt hlaða inn skránni þinni engu að síður, farðu þá til baka og veldu annað skráarnafn.\n[[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "Þessi skrá er afrit eftirfarandi {{PLURAL:$1|skráar|skráa}}:",
"file-deleted-duplicate": "Afriti þessarar skráar ([[:$1]]) hefur verið eytt.\nÞú ættir að fara yfir eyðingarsögu skráarinnar áður en þú velur að hlaða skránni aftur inn.",
+ "file-deleted-duplicate-notitle": "Skrá sem er eins og þessi skrá hefur verið hlaðið inn áður og titll hennar hefur verið falinn.\nÞú ættir að spurja einhvern með réttindi til að skoða földu skránna til að fara yfir málið áður en þú hleður skránni inn.",
"uploadwarning": "Aðvörun",
"uploadwarning-text": "Vinsamlegast breyttu myndalýsingunni hér fyrir neðan og reyndu aftur.",
"savefile": "Vista",
@@ -1286,6 +1305,7 @@
"license": "Leyfisupplýsingar:",
"license-header": "Leyfisupplýsingar:",
"nolicense": "Ekkert valið",
+ "licenses-edit": "Breyta leyfisvali",
"license-nopreview": "(Forskoðun ekki fáanleg)",
"upload_source_url": "(þín valda skrá frá gildri, aðgengilegri vefslóð)",
"upload_source_file": "(þín valda skrá frá tölvunni þinni)",
@@ -1367,6 +1387,9 @@
"download": "Hlaða niður",
"unwatchedpages": "Óvaktaðar síður",
"listredirects": "Tilvísanir",
+ "listduplicatedfiles": "Listi yfir afritaðar skrár",
+ "listduplicatedfiles-summary": "Þetta er listi yfir skrár þar sem nýjasta útgáfa hennar er afrit af nýjustu útgáfu einhverrar annarar skrár. Aðeins staðbundnar skrár eru taldar með.",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]] hefur $2 [[$3|{{PLURAL:$2|afrit}}]].",
"unusedtemplates": "Ónotuð snið",
"unusedtemplatestext": "Þetta er listi yfir allar síður í {{ns:snið}} nafnrýminu sem ekki eru notaðar í neinum öðrum síðum. Munið að gá að öðrum tenglum í sniðin áður en þeim er eytt.",
"unusedtemplateswlh": "aðrir tenglar",
@@ -1380,7 +1403,6 @@
"statistics": "Tölfræði",
"statistics-header-pages": "Síðutölfræði",
"statistics-header-edits": "Breytingatölfræði",
- "statistics-header-views": "Uppflettitölfræði",
"statistics-header-users": "Notandatölfræði",
"statistics-header-hooks": "Önnur tölfræði",
"statistics-articles": "Greinar alls",
@@ -1389,13 +1411,9 @@
"statistics-files": "Skráafjöldi",
"statistics-edits": "Síðubreytingar frá því {{SITENAME}} byrjaði",
"statistics-edits-average": "Meðal breytingafjöldi á síðu",
- "statistics-views-total": "Uppflettingar alls",
- "statistics-views-total-desc": "Flettingar á síður sem eru ekki til eða kerfisíður eru ekki innifaldar.",
- "statistics-views-peredit": "Uppflettingar á hverja breytingu (meðaltal)",
"statistics-users": "Skráðir [[Special:ListUsers|notendur]]",
"statistics-users-active": "Virkir notendur",
"statistics-users-active-desc": "Notendur sem hafa framkvæmt aðgerð {{PLURAL:$1|síðusta $1 dag|síðustu $1 daga}}",
- "statistics-mostpopular": "Mest skoðuðu síður",
"pageswithprop": "Síður með eiginleika",
"pageswithprop-legend": "Síður með síðueiginleika",
"pageswithprop-text": "Á þessari síðu er listi yfir síður sem hafa ákveðna síðueiginleika.",
@@ -1433,7 +1451,6 @@
"uncategorizedtemplates": "Óflokkuð snið",
"unusedcategories": "Ónotaðir flokkar",
"unusedimages": "Munaðarlausar skrár",
- "popularpages": "Vinsælar síður",
"wantedcategories": "Eftirsóttir flokkar",
"wantedpages": "Eftirsóttar síður",
"wantedpages-badtitle": "Ógildur titill í listanum: $1",
@@ -1457,8 +1474,18 @@
"deadendpagestext": "Eftirfarandi síður tengjast ekki við aðrar síður á {{SITENAME}}.",
"protectedpages": "Verndaðar síður",
"protectedpages-indef": "Aðeins óendanlegar verndanir",
+ "protectedpages-summary": "Þessi skrá sýnir lista yfir síður sem eru til og eru verndaðar í auknablikinu. Til að sjá lista yfir titla sem eru verndaðir gegn stofnun þeirra, sjáðu [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
"protectedpages-cascade": "Keðjuverndun eingöngu",
+ "protectedpages-noredirect": "Fela tilvísanir",
"protectedpagesempty": "Engar síður eru verndaðar með þessum stikum.",
+ "protectedpages-timestamp": "Tímastimpill",
+ "protectedpages-page": "Síða",
+ "protectedpages-expiry": "Rennur út",
+ "protectedpages-performer": "Vernduð af",
+ "protectedpages-params": "Verndunar stikar",
+ "protectedpages-reason": "Ástæða",
+ "protectedpages-unknown-timestamp": "Óþekktur",
+ "protectedpages-unknown-performer": "Óþekktur notandi",
"protectedtitles": "Verndaðir titlar",
"protectedtitlesempty": "Engir titlar eru verndaðir með þessum stikum.",
"listusers": "Notendalisti",
@@ -1484,7 +1511,7 @@
"querypage-disabled": "Þessi kerfisíða er óvirk til að minnka ekki afköst vefþjónsins.",
"booksources": "Bókaleit",
"booksources-search-legend": "Leita að bókaverslunum",
- "booksources-go": "Áfram",
+ "booksources-search": "Leita",
"booksources-text": "Fyrir neðan er listi af tenglum í aðrar síður sem selja nýjar og notaðar bækur og gætu einnig haft nánari upplýsingar í sambandi við bókina sem þú varst að leita að:",
"booksources-invalid-isbn": "ISBN gildið virðist ekki vera gilt; leitaðu eftir villum við innslátt eða afritun gildisins frá upsprettu þess.",
"specialloguserlabel": "Gerandi:",
@@ -1601,7 +1628,7 @@
"wlheader-enotif": "Tilkynning með tölvupósti er virk.",
"wlheader-showupdated": "Síðum sem hefur verið breytt síðan þú skoðaðir þær síðast eru '''feitletraðar'''.",
"wlnote": "Hér fyrir neðan {{PLURAL:$1|er síðasta <strong>$1</strong> breyting|eru síðustu <strong>$1</strong> breytingar}} {{PLURAL:$2|síðustu <strong>$2</strong> klukkutímann|síðastliðna <strong>$2</strong> klukkutímana}}, frá $3, $4.",
- "wlshowlast": "Sýna síðustu $1 klukkutíma, $2 daga, $3",
+ "wlshowlast": "Sýna síðustu $1 klukkutíma, $2 daga",
"watchlist-options": "Vaktlistastillingar",
"watching": "Vakta...",
"unwatching": "Afvakta...",
@@ -1648,7 +1675,6 @@
"delete-toobig": "Þessi síða hefur stóra breytingarskrá, yfir $1 {{PLURAL:$1|breyting|breytingar}}.\nÓheimilt er að eyða slíkum síðum til að valda ekki óæskilegum truflunum á {{SITENAME}}.",
"delete-warning-toobig": "Þessi síða hefur stóra breytingarskrá, yfir $1 {{PLURAL:$1|breyting|breytingar}}.\nEyðing síðunnar gæti truflað vinnslu gangnasafns {{SITENAME}}; haltu áfram með varúð.",
"rollback": "Taka aftur breytingar",
- "rollback_short": "Taka aftur",
"rollbacklink": "taka aftur",
"rollbacklinkcount": "taka aftur $1 {{PLURAL:$1|breytingu|breytingar}}",
"rollbacklinkcount-morethan": "taka aftur fleiri en $1 {{PLURAL:$1|breytingu|breytingar}}",
@@ -1704,10 +1730,10 @@
"protect-edit-reasonlist": "Breyta verndarástæðum",
"protect-expiry-options": "1 tími:1 hour,1 dag:1 day,1 viku:1 week,2 vikur:2 weeks,1 mánuð:1 month,3 mánuði:3 months,6 mánuði:6 months,1 ár:1 year,aldrei:infinite",
"restriction-type": "Réttindi:",
- "restriction-level": "Takmarkaði við:",
+ "restriction-level": "Takmarkað við:",
"minimum-size": "Lágmarksstærð",
"maximum-size": "Hámarksstærð:",
- "pagesize": "(bæt)",
+ "pagesize": "(bæti)",
"restriction-edit": "Breyta",
"restriction-move": "Færa",
"restriction-create": "Skapa",
@@ -2058,12 +2084,9 @@
"import-rootpage-nosubpage": "Nafnrými „$1“ móðursíðunnar leyfir ekki undirsíður.",
"importlogpage": "Innflutningsskrá",
"importlogpagetext": "Hér er listi yfir innflutninga möppdýra á síðum ásamt breytingarskránni frá öðrum wiki.",
- "import-logentry-upload": "flutti inn [[$1]] frá skrá",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|breyting flutt|breytingar fluttar}} inn",
- "import-logentry-interwiki": "flutti inn $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|breyting flutt|breytingar fluttar}} inn frá $2",
"javascripttest": "JavaScript prófun",
- "javascripttest-title": "Keyri $1 prófun",
"javascripttest-pagetext-noframework": "Þessi síða er frátekin fyrir JavaScript prófanir.",
"javascripttest-pagetext-unknownframework": "Óþekktur prófunarrammi „$1“.",
"javascripttest-pagetext-frameworks": "Veldu einn eftirtalinna prófunarramma: $1",
@@ -2132,7 +2155,7 @@
"tooltip-recreate": "Endurvekja síðuna þó henni hafi verið eytt",
"tooltip-upload": "Hefja innhleðslu",
"tooltip-rollback": "\"taka aftur\" breytir greininni til síðasta höfundar með einum smelli",
- "tooltip-undo": "\"Tek aftur þessa breytingu\" breytir aftur til síðustu breytingu og opnar breytinguna í forskoðun. Hægt er að bæta við ástæðu í breytingarávarpinu.",
+ "tooltip-undo": "„Afturkalla þessa breytingu“ breytir aftur til síðustu breytingu og opnar breytinguna í forskoðun. Hægt er að bæta við ástæðu í breytingarávarpinu.",
"tooltip-preferences-save": "Vista stillingar",
"tooltip-summary": "Bættu við stuttu ágripi",
"common.css": "/* Allt CSS sem sett er hér mun virka á öllum þemum. */",
@@ -2169,7 +2192,6 @@
"pageinfo-robot-policy": "Attriðaskráning af vélmennum",
"pageinfo-robot-index": "Heimilað",
"pageinfo-robot-noindex": "Ekki heimilað",
- "pageinfo-views": "Fjöldi innlita",
"pageinfo-watchers": "Fjöldi notenda, sem vakta síðuna",
"pageinfo-few-watchers": "Vöktuð af færri en $1 {{PLURAL:$1|notanda|notendum}}",
"pageinfo-redirects-name": "Fjöldi tilvísana til þessarar síðu",
@@ -2584,7 +2606,6 @@
"exif-urgency-low": "Lítið ($1)",
"exif-urgency-high": "Hátt ($1)",
"exif-urgency-other": "Mikilvægi ákveðið af notanda ($1)",
- "watchlistall2": "allt",
"namespacesall": "öll",
"monthsall": "allir",
"confirmemail": "Staðfesta netfang",
@@ -2637,6 +2658,7 @@
"autosumm-replace": "Skipti út innihaldi með „$1“",
"autoredircomment": "Tilvísun á [[$1]]",
"autosumm-new": "Ný síða: $1",
+ "autosumm-newblank": "Bjó til tóma síðu",
"lag-warn-normal": "Breytingar nýrri en $1 {{PLURAL:$1|sekúnda|sekúndur}} kunna að vera ekki á þessm lista.",
"lag-warn-high": "Vegna mikils álags á vefþjónanna, kunna breytingar yngri en $1 {{PLURAL:$1|sekúnda|sekúndur}} ekki að vera á þessum lista.",
"watchlistedit-normal-title": "Breyta vaktlistanum",
@@ -2652,11 +2674,11 @@
"watchlistedit-raw-done": "Vaktlistinn þinn hefur verið uppfærður.",
"watchlistedit-raw-added": "$1 {{PLURAL:$1|titli|titlum}} var bætt við:",
"watchlistedit-raw-removed": "$1 {{PLURAL:$1|titill var fjarlægður|titlar voru fjarlægðir}}:",
+ "watchlistedit-clear-titles": "Titlar:",
"watchlisttools-view": "Sýna viðeigandi breytingar",
"watchlisttools-edit": "Skoða og breyta vaktlistanum",
"watchlisttools-raw": "Breyta opnum vaktlistanum",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|spjall]])",
- "unknown_extension_tag": "Óþekkt tákn \"$1\"",
"duplicate-defaultsort": "'''Viðvörun:''' Sjálfgildur flýtihnappur \"$2\" tekur yfir fyrri flýtihnapp \"$1\".",
"version": "Útgáfa",
"version-extensions": "Uppsettar viðbætur",
@@ -2668,7 +2690,7 @@
"version-mediahandlers": "Rekill margmiðlunarskráa",
"version-parser-extensiontags": "Þáttuð smáforrita tög",
"version-hook-subscribedby": "Í áskrift af",
- "version-version": "(Útgáfa $1)",
+ "version-version": "($1)",
"version-license": "MediaWiki leyfi",
"version-poweredby-credits": "Þessi wiki er knúin af '''[https://www.mediawiki.org/ MediaWiki]''', höfundaréttur © 2001-$1 $2.",
"version-poweredby-others": "aðrir",
@@ -2712,6 +2734,7 @@
"tags": "Breyta virkum tögum",
"tag-filter": "[[Special:Tags|Tag]] sía:",
"tag-filter-submit": "Sía",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tög}}]]: $2)",
"tags-title": "Tög",
"tags-intro": "Á þessari síðu er listi yfir þau tög sem hugbúnaðurinn gæti merkt breytingar með og merkingu þeirra.",
"tags-tag": "Nafn tags",
@@ -2747,7 +2770,7 @@
"htmlform-int-toohigh": "Gildið sem þú tilgreindir er stærra en hámarkið $1",
"htmlform-required": "Þú þarft að fylla út þetta gildi.",
"htmlform-submit": "Senda",
- "htmlform-reset": "Taka aftur breytingu",
+ "htmlform-reset": "Afturkalla breytingar",
"htmlform-selectorother-other": "Annað",
"htmlform-no": "Nei",
"htmlform-yes": "Já",
@@ -2773,6 +2796,7 @@
"revdelete-uname-unhid": "notandanafn birt",
"revdelete-restricted": "hömlur settar á stjórnendur",
"revdelete-unrestricted": "fjarlægja hömlur á stjórnendur",
+ "logentry-suppress-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6",
"logentry-move-move": "$1 {{GENDER:$2|færði}} $3 á $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|færði}} $3 á $4 án þess að skilja eftir tilvísun",
"logentry-move-move_redir": "$1 {{GENDER:$2|færði}} $3 á $4 yfir tilvísun",
@@ -2787,20 +2811,23 @@
"logentry-rights-rights": "$1 {{GENDER:$2|breytti}} réttindum $3 frá $4 í $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|breytti}} réttindum $3",
"logentry-rights-autopromote": "$1 fékk sjálfvirkt {{GENDER:$2|aukin}} réttindi frá $4 til $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|hlóð inn}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|hlóð inn}} nýrri útgáfu af $3",
"rightsnone": "(engum)",
+ "revdelete-summary": "breytingarágrip",
+ "feedback-adding": "Bæti við svörun á síðuna...",
+ "feedback-bugcheck": "Frábært! Athugaðu hvort þessi villa hafi verið [$1 tilkynnt áður].",
+ "feedback-bugnew": "Ég athugaði það. Tilkynna nýja villu.",
"feedback-bugornote": "Ef þú ert reiðubúinn að lýsa tæknilegri villu í smáatriðum, vinsamlegast [$1 tilkynntu villu].\nEf ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemdin þín verður bætt við síðuna \"[$3 $2]\" ásamt notendanafni og nafni vafrarans sem þú ert að nota.",
- "feedback-subject": "Fyrirsögn:",
- "feedback-message": "Skilaboð:",
"feedback-cancel": "Hætta við",
- "feedback-submit": "Senda svörun",
- "feedback-adding": "Bæti við svörun á síðuna...",
+ "feedback-close": "Búið",
"feedback-error1": "Villa: Óþekkt útkoma frá API",
"feedback-error2": "Villa: Breytingin mistókst",
"feedback-error3": "Villa: Ekkert svar frá API",
+ "feedback-message": "Skilaboð:",
+ "feedback-subject": "Fyrirsögn:",
+ "feedback-submit": "Senda",
"feedback-thanks": "Takk! Ábendingu þinni hefur verið bætt við á síðuna \"[$2 $1]\".",
- "feedback-close": "Búið",
- "feedback-bugcheck": "Frábært! Athugaðu hvort þessi villa hafi verið [$1 tilkynnt áður].",
- "feedback-bugnew": "Ég athugaði það. Tilkynna nýja villu.",
"searchsuggest-search": "Leita",
"searchsuggest-containing": "sem innihalda ...",
"api-error-badaccess-groups": "Þú hefur ekki leyfi til að hlaða inn skrám.",
@@ -2860,5 +2887,43 @@
"expand_templates_xml_output": "XML-úttak",
"expand_templates_ok": "Í lagi",
"expand_templates_remove_comments": "Fjarlægja athugasemdir",
- "expand_templates_preview": "Forskoða"
+ "expand_templates_preview": "Forskoða",
+ "mediastatistics": "Margmiðlunar tölfræði",
+ "mediastatistics-summary": "Tölfræði um upphaldar skráar gerðir. Hún inniheldur eingöngu nýjustu útgáfu skráarinnar. Gamlar eða eyddar skrár eru ekki teknar með.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 bæti}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME tegund",
+ "mediastatistics-table-extensions": "Mögulegar skráargerðir",
+ "mediastatistics-table-count": "Fjöldi skráa",
+ "mediastatistics-table-totalbytes": "Heildarstærð",
+ "mediastatistics-header-unknown": "Óþekkt",
+ "mediastatistics-header-bitmap": "Bitmap myndir",
+ "mediastatistics-header-drawing": "Teikningar (vector-myndir)",
+ "mediastatistics-header-audio": "Hljóð",
+ "mediastatistics-header-video": "Myndbönd",
+ "mediastatistics-header-text": "Textar",
+ "mediastatistics-header-executable": "Uppsetninga skrár",
+ "mediastatistics-header-archive": "Þjappaðar skrár",
+ "json-warn-trailing-comma": "$1 eftirfylgjandi {{PLURAL:$1|komma var fjarlægð|kommur voru fjarlægðar}} úr JSON",
+ "json-error-unknown": "Það varð villa í JSON. Villa: $1",
+ "json-error-state-mismatch": "Ógild eða ranglega uppsett JSON",
+ "json-error-syntax": "málfræði villa",
+ "json-error-utf8": "Gallaðir UTF-8 stafir, líklega vitlaust kótaðir",
+ "json-error-unsupported-type": "Gildi af gerð sem ekki er hægt að kóta var gefin.",
+ "special-characters-group-latin": "Latneskt",
+ "special-characters-group-latinextended": "Aukið latneskt",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Tákn",
+ "special-characters-group-greek": "Grískt",
+ "special-characters-group-cyrillic": "Kýrillískt",
+ "special-characters-group-arabic": "Arabískt",
+ "special-characters-group-arabicextended": "Aukið arabískt",
+ "special-characters-group-persian": "Persneskt",
+ "special-characters-group-hebrew": "Hebreskt",
+ "special-characters-group-bangla": "Bengalskt",
+ "special-characters-group-tamil": "Tamílska",
+ "special-characters-group-telugu": "Telúgú",
+ "special-characters-group-sinhala": "Sinhalskt",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Taílenskt",
+ "special-characters-group-lao": "Laoskt"
}
diff --git a/languages/i18n/it.json b/languages/i18n/it.json
index 42c61fcf..6f7ad23c 100644
--- a/languages/i18n/it.json
+++ b/languages/i18n/it.json
@@ -74,7 +74,15 @@
"아라",
"Lucas2",
"Taxandru",
- "C.R."
+ "C.R.",
+ "Elitre",
+ "Laurentius",
+ "Macofe",
+ "Ricordisamoa",
+ "Horcrux92",
+ "Toadino2",
+ "Purodha",
+ "TecnoMaster"
]
},
"tog-underline": "Sottolinea i collegamenti:",
@@ -102,7 +110,7 @@
"tog-shownumberswatching": "Mostra il numero di utenti che hanno la pagina in osservazione",
"tog-oldsig": "Firma attuale:",
"tog-fancysig": "Gestisci la firma come wikitesto (senza collegamento automatico)",
- "tog-uselivepreview": "Abilita la funzione ''Live preview'' (anteprima in diretta - sperimentale)",
+ "tog-uselivepreview": "Abilita la funzione ''Live preview'' (anteprima in diretta)",
"tog-forceeditsummary": "Chiedi conferma se il campo oggetto è vuoto",
"tog-watchlisthideown": "Nascondi le mie modifiche negli osservati speciali",
"tog-watchlisthidebots": "Nascondi le modifiche dei bot negli osservati speciali",
@@ -275,7 +283,7 @@
"categorypage": "Visualizza la categoria",
"viewtalkpage": "Visualizza la pagina di discussione",
"otherlanguages": "In altre lingue",
- "redirectedfrom": "(Reindirizzamento da '''$1''')",
+ "redirectedfrom": "(Reindirizzamento da <strong>$1</strong>)",
"redirectpagesub": "Pagina di reindirizzamento",
"redirectto": "Reindirizza a:",
"lastmodifiedat": "Questa pagina è stata modificata per l'ultima volta il $1 alle $2.",
@@ -290,6 +298,7 @@
"pool-queuefull": "La coda del pool è piena",
"pool-errorunknown": "Errore sconosciuto",
"pool-servererror": "Il servizio contatore dei pool non è disponibile ($1).",
+ "poolcounter-usage-error": "Errore di utilizzo: $1",
"aboutsite": "Informazioni su {{SITENAME}}",
"aboutpage": "Project:Informazioni",
"copyright": "Il contenuto è disponibile in base alla licenza $1, se non diversamente specificato.",
@@ -299,6 +308,7 @@
"disclaimers": "Avvertenze",
"disclaimerpage": "Project:Avvertenze generali",
"edithelp": "Guida",
+ "helppage-top-gethelp": "Aiuto",
"mainpage": "Pagina principale",
"mainpage-description": "Pagina principale",
"policy-url": "Project:Policy",
@@ -321,9 +331,9 @@
"youhavenewmessagesmulti": "Hai nuovi messaggi su $1",
"editsection": "modifica",
"editold": "modifica",
- "viewsourceold": "visualizza sorgente",
+ "viewsourceold": "visualizza wikitesto",
"editlink": "modifica",
- "viewsourcelink": "visualizza sorgente",
+ "viewsourcelink": "visualizza wikitesto",
"editsectionhint": "Modifica la sezione $1",
"toc": "Indice",
"showtoc": "mostra",
@@ -377,10 +387,13 @@
"readonly_lag": "Il database è stato bloccato automaticamente per consentire ai server con i database slave di sincronizzarsi con il master",
"internalerror": "Errore interno",
"internalerror_info": "Errore interno: $1",
+ "internalerror-fatal-exception": "Errore irreversibile di tipo \"$1\"",
"filecopyerror": "Impossibile copiare il file \"$1\" in \"$2\".",
"filerenameerror": "Impossibile rinominare il file \"$1\" in \"$2\".",
"filedeleteerror": "Impossibile cancellare il file \"$1\".",
"directorycreateerror": "Impossibile creare la directory \"$1\".",
+ "directoryreadonlyerror": "La directory \"$1\" è di sola lettura.",
+ "directorynotreadableerror": "La directory \"$1\" non è leggibile.",
"filenotfound": "Impossibile trovare il file \"$1\".",
"unexpected": "Valore imprevisto: \"$1\"=\"$2\".",
"formerror": "Errore: impossibile inviare il modulo",
@@ -388,21 +401,22 @@
"cannotdelete": "Non è stato possibile cancellare la pagina o il file \"$1\".\nPotrebbe essere stato già cancellato da qualcun altro.",
"cannotdelete-title": "Impossibile cancellare la pagina \"$1\"",
"delete-hook-aborted": "La cancellazione è stata annullata dall'hook.\nNon è stata restituita alcuna spiegazione.",
- "no-null-revision": "Non può essere creata una versione nulla per la pagina \"$1\"",
+ "no-null-revision": "Non è stato possibile creare una versione nulla per la pagina \"$1\"",
"badtitle": "Titolo non corretto",
"badtitletext": "Il titolo della pagina richiesta è vuoto, errato oppure deriva da un errore nei collegamenti interlingua o interwiki.\nPotrebbe inoltre contenere uno o più caratteri il cui uso non è ammesso nei titoli.",
"perfcached": "I dati che seguono sono estratti da una copia ''cache'' del database, e potrebbero non essere aggiornati. Un massimo di {{PLURAL:$1|un risultato è disponibile|$1 risultati sono disponibili}} in cache.",
"perfcachedts": "I dati che seguono sono estratti da una copia ''cache'' del database, il cui ultimo aggiornamento risale al $1. Un massimo di {{PLURAL:$4|un risultato è disponibile|$4 risultati è disponibile}} in cache.",
"querypage-no-updates": "Gli aggiornamenti della pagina sono temporaneamente sospesi. I dati in essa contenuti non verranno aggiornati.",
- "viewsource": "Visualizza sorgente",
- "viewsource-title": "Visualizza sorgente di $1",
+ "viewsource": "Visualizza wikitesto",
+ "viewsource-title": "Visualizza wikitesto di $1",
"actionthrottled": "Azione ritardata",
"actionthrottledtext": "Come misura di sicurezza contro lo spam, l'esecuzione di alcune azioni è limitata a un numero massimo di volte in un determinato periodo di tempo, limite che in questo caso è stato superato. Si prega di riprovare tra qualche minuto.",
"protectedpagetext": "Questa pagina è stata protetta per impedirne la modifica o altre operazioni.",
"viewsourcetext": "È possibile visualizzare e copiare il codice sorgente di questa pagina:",
"viewyourtext": "È possibile visualizzare e copiare il codice sorgente delle '''tue modifiche''' a questa pagina:",
- "protectedinterface": "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.\nPer aggiungere o modificare traduzioni per tutti i wiki usare [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki.",
- "editinginterface": "'''Attenzione:''' Il testo di questa pagina fa parte dell'interfaccia utente del sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.\nPer aggiungere o modificare le traduzioni valide su tutti i wiki, considera la possibilità di usare [//translatewiki.net/wiki/Main_Page?setlang=it translatewiki.net], il progetto MediaWiki per la localizzazione.",
+ "protectedinterface": "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.\nPer aggiungere o modificare le traduzioni valide su tutti i wiki, usa [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki.",
+ "editinginterface": "<strong>Attenzione:</strong> il testo di questa pagina fa parte dell'interfaccia utente del software di questo sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.",
+ "translateinterface": "Per aggiungere o modificare le traduzioni valide su tutti i wiki, usa [//translatewiki.net/ translatewiki.net], il progetto MediaWiki per la localizzazione.",
"cascadeprotected": "Su questa pagina non è possibile effettuare modifiche perché è stata inclusa {{PLURAL:$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione \"ricorsiva\":\n$2",
"namespaceprotected": "Non si dispone dei permessi necessari per modificare le pagine del namespace '''$1'''.",
"customcssprotected": "Non si dispone dei permessi necessari alla modifica di questa pagina CSS, in quanto contiene le impostazioni personali di un altro utente.",
@@ -411,7 +425,7 @@
"mycustomjsprotected": "Non si dispone dei permessi necessari per modificare questa pagina JavaScript.",
"myprivateinfoprotected": "Non si dispone dei permessi necessari per modificare i propri dati personali.",
"mypreferencesprotected": "Non si dispone dei permessi necessari per modificare le proprie preferenze.",
- "ns-specialprotected": "Non è possibile modificare le pagine speciali.",
+ "ns-specialprotected": "Le pagine speciali non possono essere modificate.",
"titleprotected": "La creazione di una pagina con questo titolo è stata bloccata da [[User:$1|$1]].\nLa motivazione è la seguente: ''$2''.",
"filereadonlyerror": "Non è stato possibile modificare il file \"$1\" poiché il repository di file \"$2\" è in modalità di sola lettura.\n\nL'amministratore che lo ha bloccato ha fornito questa motivazione: \"$3\".",
"invalidtitle-knownnamespace": "Titolo non valido con namespace \"$2\" e testo \"$3\"",
@@ -459,6 +473,8 @@
"userlogin-resetlink": "Hai dimenticato i tuoi dati di accesso?",
"userlogin-resetpassword-link": "Hai dimenticato la password?",
"userlogin-helplink2": "Aiuto con l'accesso",
+ "userlogin-loggedin": "Sei già connesso come {{GENDER:$1|$1}}.\nUsa il modulo sottostante per accedere come altro utente.",
+ "userlogin-createanother": "Crea un'altra utenza",
"createacct-emailrequired": "Indirizzo email",
"createacct-emailoptional": "Indirizzo di posta elettronica (opzionale)",
"createacct-email-ph": "Inserisci il tuo indirizzo email",
@@ -477,7 +493,7 @@
"createacct-benefit-body2": "{{PLURAL:$1|pagina|pagine}}",
"createacct-benefit-body3": "{{PLURAL:$1|contributore recente|contributori recenti}}",
"badretype": "Le password inserite non coincidono tra loro.",
- "userexists": "Il nome utente inserito è già utilizzato.\nScegliere un nome utente diverso.",
+ "userexists": "Il nome utente inserito è già utilizzato.\nScegli un nome utente diverso.",
"loginerror": "Errore durante l'accesso",
"createacct-error": "Errore durante la creazione dell'utenza",
"createaccounterror": "Impossibile creare l'account: $1",
@@ -494,6 +510,7 @@
"wrongpassword": "La password inserita non è corretta. Riprovare.",
"wrongpasswordempty": "Non è stata inserita alcuna password. Riprovare.",
"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}}.",
"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",
@@ -619,10 +636,12 @@
"anoneditwarning": "<strong>Attenzione:</strong> Accesso non effettuato. Se effettuerai delle modifiche il tuo indirizzo IP sarà visibile pubblicamente. Se <strong>[$1 accedi]</strong> o <strong>[$2 crei un'utenza]</strong>, le tue modifiche saranno attribuite al tuo nome utente, insieme ad altri benefici.",
"anonpreviewwarning": "''Non è stato eseguito il login. Salvando la pagina, il proprio indirizzo IP sarà registrato nella cronologia.''",
"missingsummary": "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata con l'oggetto vuoto.",
+ "selfredirect": "<strong>Attenzione:</strong> stai reindirizzando questa pagina a se stessa.\nPotresti aver indicato la destinazione errata per il redirect, o stai modificando la pagina sbagliata.\nSe fai clic nuovamente su \"{{int:savearticle}}\", il redirect sarà creato comunque.",
"missingcommenttext": "Inserire un commento qui sotto.",
"missingcommentheader": "'''Attenzione:''' non è stata specificato l'oggetto/l'intestazione di questo commento. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata senza intestazione.",
"summary-preview": "Anteprima dell'oggetto:",
"subject-preview": "Anteprima oggetto/intestazione:",
+ "previewerrortext": "C'è stato un errore mentre si è cercato di mostrare l'anteprima.",
"blockedtitle": "Utente bloccato.",
"blockedtext": "'''Il tuo nome utente o indirizzo IP è stato bloccato.'''\n\nIl blocco è stato imposto da $1. La motivazione del blocco è la seguente: ''$2''\n\n* Inizio del blocco: $8\n* Scadenza del blocco: $6\n* Intervallo di blocco: $7\n\nSe lo si desidera, è possibile contattare $1 o un altro [[{{MediaWiki:Grouppage-sysop}}|amministratore]] per discutere del blocco.\n\nSi noti che la funzione 'Scrivi all'utente' non è attiva se non è stato registrato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]] o se l'utilizzo di tale funzione è stato bloccato.\n\nL'indirizzo IP attuale è $3, il numero ID del blocco è #$5.\nSi prega di specificare tutti i dettagli precedenti in qualsiasi richiesta di chiarimenti.",
"autoblockedtext": "Questo indirizzo IP è stato bloccato automaticamente perché condiviso con un altro utente, a sua volta bloccato da $1.\nLa motivazione del blocco è la seguente:\n\n:''$2''\n\n* Inizio del blocco: $8\n* Scadenza del blocco: $6\n* Intervallo di blocco: $7\n\nÈ possibile contattare $1 o un altro [[{{MediaWiki:Grouppage-sysop}}|amministratore]] per richiedere eventuali chiarimenti circa il blocco.\n\nSi noti che la funzione 'Scrivi all'utente' non è attiva se non è stato registrato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]] e, comunque, se nell'applicare il blocco, tale funzione è stata disabilitata (per la durata del blocco).\n\nL'indirizzo IP attuale è $3, il numero ID del blocco è #$5\nSi prega di specificare tutti i dettagli qui inclusi nel compilare qualsiasi richiesta di chiarimenti.",
@@ -632,12 +651,12 @@
"nosuchsectiontitle": "Impossibile trovare la sezione",
"nosuchsectiontext": "Si è tentato di modificare una sezione inesistente.\nPotrebbe essere stata spostata o eliminata mentre si stava visionando la pagina.",
"loginreqtitle": "Accesso richiesto",
- "loginreqlink": "eseguire l'accesso",
+ "loginreqlink": "effettuare l'accesso",
"loginreqpagetext": "Per vedere altre pagine è necessario $1.",
"accmailtitle": "Password inviata.",
"accmailtext": "Una password generata casualmente per [[User talk:$1|$1]] è stata inviata a $2. Questa password può essere modificata nella pagina per ''[[Special:ChangePassword|cambiare la password]]'' subito dopo l'accesso.",
"newarticle": "(Nuovo)",
- "newarticletext": "Il collegamento appena seguito corrisponde ad una pagina non ancora esistente.\nSe vuoi creare la pagina ora, basta cominciare a scrivere il testo nella casella qui sotto (vedi la [$1 pagina di aiuto] per maggiori informazioni).\nSe il collegamento è stato aperto per errore, è sufficiente fare clic sul pulsante '''Indietro''' del proprio browser.",
+ "newarticletext": "Il collegamento appena seguito corrisponde ad una pagina non ancora esistente.\nSe vuoi creare la pagina ora, basta cominciare a scrivere il testo nella casella qui sotto (vedi la [$1 pagina di aiuto] per maggiori informazioni).\nSe il collegamento è stato aperto per errore, è sufficiente fare clic sul pulsante <strong>Indietro</strong> del proprio browser.",
"anontalkpagetext": "----\n''Questa è la pagina di discussione di un utente anonimo, che non ha ancora creato un'utenza o comunque non la sta usando. Per identificarlo è quindi necessario usare il numero del suo indirizzo IP. Gli indirizzi IP possono però essere condivisi da più utenti. Se sei un utente anonimo e ritieni che i commenti presenti in questa pagina non si riferiscano a te, [[Special:UserLogin/signup|crea una nuova utenza]] o [[Special:UserLogin|entra con quella che già hai]] per evitare di essere confuso con altri utenti anonimi in futuro.''",
"noarticletext": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare la pagina ora]</span>.",
"noarticletext-nopermission": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>, ma non hai i permessi per creare questa pagina.",
@@ -645,7 +664,7 @@
"userpage-userdoesnotexist": "L'account \"$1\" non corrisponde a un utente registrato.\nVerificare che si intenda davvero creare o modificare questa pagina.",
"userpage-userdoesnotexist-view": "L'account utente \"$1\" non è registrato.",
"blocked-notice-logextract": "Questo utente è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
- "clearyourcache": "'''Nota:''' dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti. \n*'''Firefox / Safari''': tenere premuto il tasto delle maiuscole e fare clic su ''Ricarica'', oppure premere ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' su Mac)\n*'''Google Chrome''': premere ''Ctrl-Shift-R'' (''⌘-Shift-R'' su un Mac)\n*'''Internet Explorer''': tenere premuto il tasto ''Ctrl'' mentre si fa clic su ''Refresh'', oppure premere ''Ctrl-F5''\n*'''Opera''': svuotare completamente la cache dal menu ''Strumenti → Preferenze''",
+ "clearyourcache": "<strong>Nota:</strong> dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti. \n*<strong>Firefox / Safari:</strong> tenere premuto il tasto delle maiuscole <em>Shift</em> e fare clic su <em>Ricarica</em>, oppure premere <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> su Mac)\n*<strong>Google Chrome:</strong> premere <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> su un Mac)\n*<strong>Internet Explorer:</strong> tenere premuto il tasto <em>Ctrl</em> e fare clic su <em>Aggiorna</em>, oppure premere <em>Ctrl-F5</em>\n*<strong>Opera:</strong> svuotare completamente la cache dal menu <em>Strumenti → Preferenze</em>",
"usercssyoucanpreview": "'''Suggerimento:''' usa il pulsante 'Visualizza anteprima' per provare il tuo nuovo CSS prima di salvarlo.",
"userjsyoucanpreview": "'''Suggerimento:''' usa il pulsante 'Visualizza anteprima' per provare il tuo nuovo JavaScript prima di salvarlo.",
"usercsspreview": "'''Questa è solo un'anteprima del proprio CSS personale. Le modifiche non sono ancora state salvate!'''",
@@ -671,7 +690,7 @@
"yourtext": "Il tuo testo",
"storedversion": "La versione memorizzata",
"nonunicodebrowser": "'''Attenzione: si sta utilizzando un browser non compatibile con i caratteri Unicode. Per consentire la modifica delle pagine senza creare inconvenienti, i caratteri non ASCII vengono visualizzati nella casella di modifica sotto forma di codici esadecimali.'''",
- "editingold": "'''ATTENZIONE: si sta modificando una versione non aggiornata della pagina. Salvandola così, tutti i cambiamenti apportati dopo questa versione saranno sovrascritti.'''",
+ "editingold": "<strong>Attenzione: si sta modificando una versione non aggiornata della pagina.</strong>\nSalvandola così, tutti i cambiamenti apportati dopo questa versione saranno sovrascritti.",
"yourdiff": "Differenze",
"copyrightwarning": "Per favore tieni presente che tutti i contributi a {{SITENAME}} si considerano pubblicati nei termini d'uso della licenza $2 (vedi $1 per maggiori dettagli).\nSe non desideri che i tuoi testi possano essere modificati e ridistribuiti da chiunque senza alcuna limitazione, non inviarli qui.<br />\nInviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera.\n'''Non inviare materiale protetto da copyright senza autorizzazione!'''",
"copyrightwarning2": "Per favore tieni presente che tutti i contributi a {{SITENAME}} possono essere modificati, stravolti o cancellati da altri contributori.\nSe non vuoi che i tuoi testi possano essere alterati, allora non inserirli.<br />\nInviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera (vedi $1 per maggiori dettagli).\n'''Non inviare materiale protetto da copyright senza autorizzazione!'''",
@@ -709,7 +728,7 @@
"defaultmessagetext": "Testo predefinito",
"content-failed-to-parse": "Impossibile analizzare $2 per il modello $1: $3",
"invalid-content-data": "Dati contenuti non validi",
- "content-not-allowed-here": "Contenuto in \"$1\" non consentito nella pagine [[$2]]",
+ "content-not-allowed-here": "Contenuto in \"$1\" non consentito nella pagina [[$2]]",
"editwarning-warning": "Lasciare questa pagina potrebbe causare la perdita di tutte le modifiche fatte.\nSe hai effettuato l'accesso, puoi disattivare questo avviso nella sezione \"{{int:prefs-editing}}\" delle tue preferenze.",
"editpage-notsupportedcontentformat-title": "Formato contenuto non supportato",
"editpage-notsupportedcontentformat-text": "Il formato del contenuto $1 non è supportato dal modello di contenuto $2.",
@@ -717,6 +736,10 @@
"content-model-text": "testo normale",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Oggetto vuoto",
+ "content-json-empty-array": "Array vuoto",
+ "duplicate-args-category": "Pagine contenenti chiamate a template con parametri duplicati",
+ "duplicate-args-category-desc": "La pagina contiene chiamate a template che utilizzano argomenti duplicati, come ad esempio <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Attenzione:''' Questa pagina contiene troppe chiamate alle parser functions.\n\nDovrebbe averne meno di $2, al momento ce {{PLURAL:$1|n'è $1|ne sono $1}}.",
"expensive-parserfunction-category": "Pagine con troppe chiamate alle funzioni parser",
"post-expand-template-inclusion-warning": "<strong>Attenzione:</strong> la dimensione dei template inclusi è troppo grande.\nAlcuni template non verranno inclusi.",
@@ -744,7 +767,7 @@
"cantcreateaccounttitle": "Impossibile registrare un utente",
"cantcreateaccount-text": "La registrazione è stata bloccata da [[User:$3|$3]] per questo indirizzo IP ('''$1''').\n\nLa motivazione del blocco fornita da $3 è la seguente: ''$2''",
"cantcreateaccount-range-text": "La registrazione da indirizzi IP nell'intervallo '''$1''', che include il tuo ('''$4'''), è stata bloccata da [[User:$3|$3]].\n\nLa motivazione fornita da $3 è ''$2''",
- "viewpagelogs": "Visualizza i log relativi a questa pagina.",
+ "viewpagelogs": "Visualizza i registri relativi a questa pagina",
"nohistory": "Cronologia delle versioni di questa pagina non reperibile.",
"currentrev": "Versione attuale",
"currentrev-asof": "Versione attuale delle $1",
@@ -771,7 +794,7 @@
"history-feed-empty": "La pagina richiesta non esiste; potrebbe essere stata cancellata dal sito o rinominata. Verificare con la [[Special:Search|pagina di ricerca]] se vi sono nuove pagine.",
"rev-deleted-comment": "(Oggetto della modifica rimosso)",
"rev-deleted-user": "(nome utente rimosso)",
- "rev-deleted-event": "(azione del log rimossa)",
+ "rev-deleted-event": "(dettagli del registro rimossi)",
"rev-deleted-user-contribs": "[nome utente o indirizzo IP rimosso - edit nascosto dalla cronologia]",
"rev-deleted-text-permission": "Questa versione della pagina è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
"rev-suppressed-text-permission": "Questa versione della pagina è stata '''soppressa'''.\nConsultare il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle soppressioni] per ulteriori dettagli.",
@@ -781,7 +804,7 @@
"rev-suppressed-text-view": "Questa versione della pagina è stata '''rimossa'''.\nGli amministratori possono ancora visualizzarla; consultare il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log di rimozione] per ulteriori dettagli.",
"rev-deleted-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle versioni è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.",
"rev-suppressed-no-diff": "Non è possibile visualizzare questo confronto tra versioni perché una delle versioni è stata '''cancellata'''.",
- "rev-deleted-unhide-diff": "Una delle versioni di questo confronto tra versioni è stata '''cancellata'''.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare il confronto] se necessario.",
+ "rev-deleted-unhide-diff": "Una delle versioni di questo confronto tra versioni è stata <strong>cancellata</strong>.\nConsultare il [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log delle cancellazioni] per ulteriori dettagli.\nAgli amministratori è ancora consentito [$1 visualizzare il confronto] se necessario.",
"rev-suppressed-unhide-diff": "Una delle versioni di questo confronto di versioni è stata '''rimossa'''.\nPotrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].\nIn quanto amministratore puoi ancora [$1 visualizzare questo confronto di versioni], se vuoi procedere.",
"rev-deleted-diff-view": "Una delle versioni di questo confronto di versioni è stata '''cancellata'''.\nIn quanto amministratore, puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log delle cancellazioni].",
"rev-suppressed-diff-view": "Una delle versioni di questo confronto di versioni è stata '''rimossa'''.\nIn quanto amministratore puoi visualizzare questo confronto di versioni; potrebbero esserci dettagli nel [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log delle rimozioni].",
@@ -805,7 +828,7 @@
"revdelete-legend": "Imposta le seguenti limitazioni sulle versioni cancellate:",
"revdelete-hide-text": "Testo della versione",
"revdelete-hide-image": "Nascondi i contenuti del file",
- "revdelete-hide-name": "Nascondi azione e oggetto della stessa",
+ "revdelete-hide-name": "Nascondi obbiettivo e parametri",
"revdelete-hide-comment": "Oggetto della modifica o motivazione dell'azione",
"revdelete-hide-user": "Nome o indirizzo IP dell'autore",
"revdelete-hide-restricted": "Nascondi le informazioni indicate anche agli amministratori",
@@ -859,7 +882,6 @@
"mergehistory-same-destination": "Le pagine di origine e di destinazione non possono coincidere",
"mergehistory-reason": "Motivo:",
"mergelog": "Unioni",
- "pagemerge-logentry": "ha unito [[$1]] a [[$2]] (versioni fino a $3)",
"revertmerge": "Annulla unioni",
"mergelogpagetext": "Di seguito sono elencate le ultime operazioni di unione della cronologia di due pagine.",
"history-title": "$1: cronologia delle modifiche",
@@ -882,6 +904,8 @@
"notextmatches": "Nessuna corrispondenza nel testo delle pagine",
"prevn": "{{PLURAL:$1|precedente|precedenti $1}}",
"nextn": "{{PLURAL:$1|successivo|successivi $1}}",
+ "prev-page": "pagina precedente",
+ "next-page": "pagina successiva",
"prevn-title": "{{PLURAL:$1|Risultato precedente|$1 risultati precedenti}}",
"nextn-title": "{{PLURAL:$1|Risultato successivo|$1 risultati successivi}}",
"shown-title": "Mostra {{PLURAL:$1|un risultato|$1 risultati}} per pagina",
@@ -900,6 +924,7 @@
"search-result-category-size": "{{PLURAL:$1|1 utente|$1 utenti}} ({{PLURAL:$2|1 sottocategoria|$2 sottocategorie}}, {{PLURAL:$3|1 file|$3 files}})",
"search-redirect": "(redirect $1)",
"search-section": "(sezione $1)",
+ "search-category": "(categoria $1)",
"search-file-match": "(corrispondenza nel contenuto del file)",
"search-suggest": "Forse cercavi: $1",
"search-interwiki-caption": "Progetti fratelli",
@@ -924,7 +949,7 @@
"preferences": "Preferenze",
"mypreferences": "preferenze",
"prefs-edits": "Modifiche effettuate:",
- "prefsnologintext2": "Per modificare le tue preferenze è necessario eseguire l'accesso.",
+ "prefsnologintext2": "Per modificare le tue preferenze è necessario effettuare l'accesso.",
"prefs-skin": "Aspetto grafico (skin)",
"skin-preview": "Anteprima",
"datedefault": "Nessuna preferenza",
@@ -933,6 +958,11 @@
"prefs-personal": "Profilo utente",
"prefs-rc": "Ultime modifiche",
"prefs-watchlist": "Osservati speciali",
+ "prefs-editwatchlist": "Modifica osservati speciali",
+ "prefs-editwatchlist-label": "Modifica le pagine della tua watchlist:",
+ "prefs-editwatchlist-edit": "Visualizza e rimuovi titoli sulla tua watchlist",
+ "prefs-editwatchlist-raw": "Modifica la lista in formato testo",
+ "prefs-editwatchlist-clear": "Cancella la tua watchlist",
"prefs-watchlist-days": "Numero di giorni da mostrare negli osservati speciali:",
"prefs-watchlist-days-max": "Massimo $1 {{PLURAL:$1|giorno|giorni}}",
"prefs-watchlist-edits": "Numero di modifiche da mostrare con le funzioni avanzate:",
@@ -944,7 +974,7 @@
"prefs-setemail": "Imposta un indirizzo email",
"prefs-email": "Opzioni email",
"prefs-rendering": "Aspetto",
- "saveprefs": "Salva le preferenze",
+ "saveprefs": "Salva",
"restoreprefs": "Ripristina le impostazioni predefinite (in tutte le sezioni)",
"prefs-editing": "Casella di modifica",
"rows": "Righe:",
@@ -1002,7 +1032,7 @@
"gender-female": "È registrata su {{SITENAME}}",
"prefs-help-gender": "L'impostazione di questa preferenza è opzionale.\nIl software utilizza questo valore per rivolgersi a te e menzionarti agli altri usando il genere grammaticale appropriato.\nQuesta informazione sarà pubblica.",
"email": "Indirizzo email",
- "prefs-help-realname": "L'indicazione del proprio nome vero è opzionale; se si sceglie di inserirlo, verrà utilizzato per attribuire la paternità dei contenuti inviati.",
+ "prefs-help-realname": "Il vero nome è facoltativo.\nSe fornito, può essere usato per attribuirvi la paternità del vostro lavoro.",
"prefs-help-email": "L'inserimento del proprio indirizzo email è facoltativo, ma permette di ricevere la propria password qualora venisse dimenticata.",
"prefs-help-email-others": "Puoi anche scegliere di lasciare che gli altri ti contattino via posta elettronica con un collegamento dalla tua pagina utente o di discussione.\nIl tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.",
"prefs-help-email-required": "L'indirizzo email è obbligatorio.",
@@ -1109,6 +1139,7 @@
"right-protect": "Cambia i livelli di protezione e modifica pagine protette ricorsivamente",
"right-editprotected": "Modifica pagine protette con \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Modifica pagine protette con \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Modifica il modello di contenuto di una pagina",
"right-editinterface": "Modifica l'interfaccia utente",
"right-editusercssjs": "Modifica i file CSS e JS di altri utenti",
"right-editusercss": "Modifica i file CSS di altri utenti",
@@ -1136,6 +1167,7 @@
"right-override-export-depth": "Esporta le pagine includendo le pagine collegate fino ad una profondità di 5",
"right-sendemail": "Invia email ad altri utenti",
"right-passwordreset": "Vede i messaggi di reimpostazione della password",
+ "right-managechangetags": "Crea ed elimina dal database i [[Special:Tags|tag]]",
"newuserlogpage": "Nuovi utenti",
"newuserlogpagetext": "Di seguito sono elencate le utenze di nuova creazione.",
"rightslog": "Diritti degli utenti",
@@ -1181,6 +1213,8 @@
"action-viewmywatchlist": "vedere i propri osservati speciali",
"action-viewmyprivateinfo": "vedere i propri dati personali",
"action-editmyprivateinfo": "modificare i propri dati personali",
+ "action-editcontentmodel": "modificare il modello di contenuto di una pagina",
+ "action-managechangetags": "crea ed elimina i tag dal database",
"nchanges": "$1 {{PLURAL:$1|modifica|modifiche}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dall'ultima visita}}",
"enhancedrc-history": "cronologia",
@@ -1228,7 +1262,7 @@
"number_of_watching_users_pageview": "[osservata da {{PLURAL:$1|un utente|$1 utenti}}]",
"rc_categories": "Limita alle categorie (separate da \"|\")",
"rc_categories_any": "Qualsiasi",
- "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} dopo la modifica",
+ "rc-change-size-new": "$1 {{PLURAL:$1|byte}} dopo la modifica",
"newsectionsummary": "/* $1 */ nuova sezione",
"rc-enhanced-expand": "Mostra dettagli",
"rc-enhanced-hide": "Nascondi dettagli",
@@ -1237,7 +1271,7 @@
"recentchangeslinked-feed": "Modifiche correlate",
"recentchangeslinked-toolbox": "Modifiche correlate",
"recentchangeslinked-title": "Modifiche correlate a \"$1\"",
- "recentchangeslinked-summary": "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate da quella specificata (o contenute nella categoria specificata).\nLe pagine contenute nella propria lista degli [[Special:Watchlist|Osservati speciali]] sono evidenziate in '''grassetto'''.",
+ "recentchangeslinked-summary": "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate da quella specificata (o contenute nella categoria specificata).\nLe pagine contenute nella propria lista degli [[Special:Watchlist|Osservati speciali]] sono evidenziate in <strong>grassetto</strong>.",
"recentchangeslinked-page": "Nome della pagina:",
"recentchangeslinked-to": "Mostra solo le modifiche alle pagine collegate a quella specificata",
"upload": "Carica un file",
@@ -1251,9 +1285,9 @@
"uploaderror": "Errore nel caricamento",
"upload-recreate-warning": "'Attenzione'': un file con questo nome è stato cancellato o spostato.'''\nIl log delle cancellazioni e degli spostamenti di questa pagina viene qui riportato per comodità:",
"uploadtext": "Usare il modulo sottostante per caricare nuovi file. Per visualizzare o ricercare i file già caricati, consultare il [[Special:FileList|log dei file caricati]]. Caricamenti di file e di nuove versioni di file sono registrati nel [[Special:Log/upload|log degli upload]], le cancellazioni nell'[[Special:Log/delete|apposito]].\n\nPer inserire un file all'interno di una pagina, fare un collegamento di questo tipo:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' per usare la versione completa del file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativo]]</nowiki></code>''' per usare una versione larga 200 pixel inserita in un box, allineata a sinistra e con 'testo alternativo' come didascalia\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' per generare un collegamento diretto al file senza visualizzarlo",
- "upload-permitted": "Tipi di file consentiti: $1.",
- "upload-preferred": "Tipi di file consigliati: $1.",
- "upload-prohibited": "Tipi di file non consentiti: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tipo di file consentito|Tipi di file consentiti}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipo di file consigliato|Tipi di file consigliati}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipo di file non consentito|Tipi di file non consentiti}}: $1.",
"uploadlogpage": "File caricati",
"uploadlogpagetext": "Di seguito sono elencati gli ultimi file caricati.\nConsultare la [[Special:NewFiles|galleria dei nuovi file]] per una visione d'insieme.",
"filename": "Nome del file",
@@ -1446,7 +1480,7 @@
"filehist-filesize": "Dimensione del file",
"filehist-comment": "Commento",
"imagelinks": "Utilizzo del file",
- "linkstoimage": "{{PLURAL:$1|La seguente pagina contiene|Le seguenti $1 pagine contengono}} collegamenti al file:",
+ "linkstoimage": "{{PLURAL:$1|La seguente pagina contiene|Le seguenti $1 pagine contengono}} collegamenti a questo file:",
"linkstoimage-more": "Più di $1 {{PLURAL:$1|pagina punta|pagine puntano}} a questo file.\nDi seguito sono elencate solo {{PLURAL:$1|la prima pagina che punta|le prime $1 pagine che puntano}} a questo file.\nÈ disponibile un [[Special:WhatLinksHere/$2|elenco completo]].",
"nolinkstoimage": "Nessuna pagina contiene collegamenti al file.",
"morelinkstoimage": "Visualizza [[Special:WhatLinksHere/$1|altri link]] a questo file.",
@@ -1512,7 +1546,6 @@
"statistics": "Statistiche",
"statistics-header-pages": "Statistiche relative alle pagine",
"statistics-header-edits": "Statistiche relative alle modifiche",
- "statistics-header-views": "Statistiche relative alle visualizzazioni",
"statistics-header-users": "Statistiche relative agli utenti",
"statistics-header-hooks": "Altre statistiche",
"statistics-articles": "Pagine di contenuti",
@@ -1521,13 +1554,9 @@
"statistics-files": "File caricati",
"statistics-edits": "Modifiche a partire dall'installazione di {{SITENAME}}",
"statistics-edits-average": "Media delle modifiche per pagina",
- "statistics-views-total": "Visualizzazioni totali",
- "statistics-views-total-desc": "Visualizzazioni di pagine inesistenti e pagine speciali non sono incluse",
- "statistics-views-peredit": "Visualizzazioni per modifica",
"statistics-users": "[[Special:ListUsers|Utenti]] registrati",
"statistics-users-active": "Utenti attivi",
"statistics-users-active-desc": "Utenti che hanno effettuato un'azione {{PLURAL:$1|nell'ultimo giorno|negli ultimi $1 giorni}}",
- "statistics-mostpopular": "Pagine più visitate",
"pageswithprop": "Pagine con una proprietà di pagina",
"pageswithprop-legend": "Pagine con una proprietà di pagina",
"pageswithprop-text": "Questa pagina elenca le pagine che utilizzano una particolare proprietà di pagina.",
@@ -1568,9 +1597,9 @@
"uncategorizedtemplates": "Template privi di categorie",
"unusedcategories": "Categorie vuote",
"unusedimages": "File non utilizzati",
- "popularpages": "Pagine più visitate",
"wantedcategories": "Categorie richieste",
"wantedpages": "Pagine più richieste",
+ "wantedpages-summary": "Elenco delle pagine inesistenti con il maggior numero di collegamenti a loro, escludendo le pagine che hanno solo i reindirizzamenti che li collegano. Per un elenco di pagine inesistenti che hanno reindirizzamenti che li collegano, vedere [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Titolo non valido nel gruppo di risultati: $1",
"wantedfiles": "File richiesti",
"wantedfiletext-cat": "I seguenti file sono utilizzati, ma non esistono. I file ospitati su repository esterni potrebbero essere elencati anche se di fatto esistenti. Questi falsi positivi saranno <del>barrati</del>. Le pagine che incorporano i file che non esistono sono elencate in [[:$1]].",
@@ -1594,7 +1623,7 @@
"deadendpagestext": "Le pagine indicate di seguito sono prive di collegamenti verso altre pagine di {{SITENAME}}.",
"protectedpages": "Pagine protette",
"protectedpages-indef": "Solo protezioni infinite",
- "protectedpages-summary": "Questa pagina elenca le pagine esistenti che sono attualmente protette. Per un'elenco di titoli protetti dalla creazione, vedi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+ "protectedpages-summary": "Questa pagina elenca le pagine esistenti che sono attualmente protette. Per un elenco di titoli protetti dalla creazione, vedi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
"protectedpages-cascade": "Solo protezioni ricorsive",
"protectedpages-noredirect": "Nascondi redirect",
"protectedpagesempty": "Al momento non vi sono pagine protette",
@@ -1607,7 +1636,7 @@
"protectedpages-unknown-timestamp": "Sconosciuto",
"protectedpages-unknown-performer": "Utente sconosciuto",
"protectedtitles": "Titoli protetti",
- "protectedtitles-summary": "Questa pagina elenca i titoli che sono attualmente protetti dalla creazione. Per un'elenco di pagine esistenti che sono protette, vedi [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+ "protectedtitles-summary": "Questa pagina elenca i titoli che sono attualmente protetti dalla creazione. Per un elenco di pagine esistenti che sono protette, vedi [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
"protectedtitlesempty": "Al momento non esistono titoli protetti con i parametri specificati.",
"listusers": "Elenco degli utenti",
"listusers-editsonly": "Mostra solo utenti con dei contributi",
@@ -1630,10 +1659,12 @@
"pager-older-n": "{{PLURAL:$1|1 meno recente|$1 meno recenti}}",
"suppress": "Oversight",
"querypage-disabled": "Questa pagina speciale è disattivata per motivi di prestazioni.",
+ "apihelp": "Aiuto API",
+ "apihelp-no-such-module": "Modulo \"$1\" non trovato.",
"booksources": "Fonti librarie",
"booksources-search-legend": "Ricerca di fonti librarie",
"booksources-isbn": "Codice ISBN:",
- "booksources-go": "Vai",
+ "booksources-search": "Cerca",
"booksources-text": "Di seguito sono elencati alcuni collegamenti verso siti esterni che vendono libri nuovi e usati, attraverso i quali è possibile ottenere maggiori informazioni sul testo cercato.",
"booksources-invalid-isbn": "L'ISBN inserito sembra non essere valido; verificare che non siano stati commessi errori nel copiarlo dalla fonte originale.",
"specialloguserlabel": "Azione effettuata da:",
@@ -1770,7 +1801,7 @@
"wlheader-enotif": "La notifica via email è attiva.",
"wlheader-showupdated": "Le pagine che sono state modificate dopo l'ultima visita sono evidenziate in '''grassetto'''.",
"wlnote": "Di seguito {{PLURAL:$1|è elencata la modifica più recente apportata|sono elencate le <strong>$1</strong> modifiche più recenti apportate}} {{PLURAL:$2|nella scorsa ora|nelle scorse <strong>$2</strong> ore}}; i dati sono aggiornati alle $4 del $3.",
- "wlshowlast": "Mostra le ultime $1 ore $2 giorni $3",
+ "wlshowlast": "Mostra le ultime $1 ore $2 giorni",
"watchlist-options": "Opzioni osservati speciali",
"watching": "Aggiunta agli osservati speciali...",
"unwatching": "Eliminazione dagli osservati speciali...",
@@ -1819,7 +1850,6 @@
"deleteprotected": "Non puoi cancellare questa pagina perché è stata protetta.",
"deleting-backlinks-warning": "'''Attenzione:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|altre pagine]] contengono collegamenti o inclusioni alla pagina che stai per cancellare.",
"rollback": "Annulla le modifiche",
- "rollback_short": "Rollback",
"rollbacklink": "rollback",
"rollbacklinkcount": "rollback di {{PLURAL:$1|una modifica|$1 modifiche}}",
"rollbacklinkcount-morethan": "rollback di più di {{PLURAL:$1|una modifica|$1 modifiche}}",
@@ -1927,8 +1957,9 @@
"undelete-show-file-confirm": "Si desidera visualizzare la versione cancellata del file \"<nowiki>$1</nowiki>\" del $2 alle $3?",
"undelete-show-file-submit": "Sì",
"namespace": "Namespace:",
- "invert": "inverti la selezione",
- "tooltip-invert": "Seleziona questa casella per nascondere le modifiche alle pagine all'interno del namespace selezionato (ed il relativo namespace, se selezionato)",
+ "invert": "Inverti selezione",
+ "tooltip-invert": "Seleziona questa casella per nascondere le modifiche alle pagine all'interno del namespace selezionato (ed il namespace associato, se selezionato)",
+ "tooltip-whatlinkshere-invert": "Seleziona questa casella per nascondere i collegamenti dalle pagine all'interno del namespace selezionato",
"namespace_association": "Namespace associato",
"tooltip-namespace_association": "Seleziona questa casella per includere anche la pagina di discussione o l'oggetto del namespace associato con il namespace selezionato",
"blanknamespace": "(Principale)",
@@ -1961,12 +1992,12 @@
"whatlinkshere": "Puntano qui",
"whatlinkshere-title": "Pagine che puntano a \"$1\"",
"whatlinkshere-page": "Pagina:",
- "linkshere": "Le seguenti pagine contengono dei collegamenti a '''[[:$1]]''':",
+ "linkshere": "Le seguenti pagine contengono dei collegamenti a <strong>[[:$1]]</strong>:",
"nolinkshere": "Nessuna pagina contiene collegamenti che puntano a '''[[:$1]]'''.",
"nolinkshere-ns": "Non vi sono pagine che puntano a '''[[:$1]]''' nel namespace selezionato.",
"isredirect": "redirect",
"istemplate": "inclusione",
- "isimage": "collegamento a file",
+ "isimage": "collegamento al file",
"whatlinkshere-prev": "{{PLURAL:$1|precedente|precedenti $1}}",
"whatlinkshere-next": "{{PLURAL:$1|successivo|successivi $1}}",
"whatlinkshere-links": "← collegamenti",
@@ -2193,14 +2224,15 @@
"thumbnail-temp-create": "Impossibile creare il file temporaneo delle miniature",
"thumbnail-dest-create": "Impossibile salvare la miniatura nella destinazione",
"thumbnail_invalid_params": "Parametri miniatura non corretti",
+ "thumbnail_toobigimagearea": "File con dimensioni maggiori di $1",
"thumbnail_dest_directory": "Impossibile creare la directory di destinazione",
"thumbnail_image-type": "Tipo di immagine non supportato",
"thumbnail_gd-library": "Configurazione incompleta della libreria GD: funzione $1 mancante",
"thumbnail_image-missing": "Sembra essere mancante il file: $1",
"thumbnail_image-failure-limit": "Ci sono stati recentemente troppi tentativi falliti ($1 o più) di generare questa miniatura. Riprova più tardi.",
"import": "Importa pagine",
- "importinterwiki": "Importazione transwiki",
- "import-interwiki-text": "Selezionare un progetto wiki e il titolo della pagina da importare.\nLe date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.\nTutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log/import|log di importazione]].",
+ "importinterwiki": "Importazione da un altro wiki",
+ "import-interwiki-text": "Selezionare un progetto wiki e il titolo della pagina da importare.\nLe date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.\nTutte le operazioni di importazione da altri wiki sono registrate nel [[Special:Log/import|registro di importazione]].",
"import-interwiki-sourcewiki": "Wiki di origine:",
"import-interwiki-sourcepage": "Pagina di origine:",
"import-interwiki-history": "Copia l'intera cronologia di questa pagina",
@@ -2220,7 +2252,7 @@
"importcantopen": "Impossibile aprire il file di importazione",
"importbadinterwiki": "Collegamento inter-wiki errato",
"importsuccess": "Importazione riuscita.",
- "importnosources": "Non è stata definita una fonte per l'importazione transwiki; l'importazione diretta della cronologia non è attiva.",
+ "importnosources": "Non è stata definita una fonte per l'importazione da un altro wiki e l'importazione diretta della cronologia non è attiva.",
"importnofile": "Non è stato caricato nessun file per l'importazione.",
"importuploaderrorsize": "Caricamento del file per l'importazione non riuscito. Il file supera le dimensioni massime consentite per l'upload.",
"importuploaderrorpartial": "Caricamento del file per l'importazione non riuscito. Il file è stato caricato solo in parte.",
@@ -2244,27 +2276,25 @@
"import-rootpage-nosubpage": "Il namespace \"$1\" della pagina principale non permette di avere sottopagine.",
"importlogpage": "Importazioni",
"importlogpagetext": "Di seguito sono elencate le importazioni di pagine provenienti da altre wiki, complete di cronologia.",
- "import-logentry-upload": "ha importato [[$1]] tramite upload",
"import-logentry-upload-detail": "{{PLURAL:$1|una versione importata|$1 versioni importate}}",
- "import-logentry-interwiki": "ha trasferito da altra wiki la pagina $1",
"import-logentry-interwiki-detail": "{{PLURAL:$1|una versione importata|$1 versioni importate}} da $2",
"javascripttest": "Sperimentazione JavaScript",
- "javascripttest-title": "In esecuzione test per $1",
"javascripttest-pagetext-noframework": "Questa pagina è riservata all'esecuzione di test di JavaScript.",
"javascripttest-pagetext-unknownframework": "Framework di test sconosciuto \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Azione sconosciuta \"$1\".",
"javascripttest-pagetext-frameworks": "Per cortesia, scegli uno dei seguenti framework per i test: $1",
"javascripttest-pagetext-skins": "Scegli una skin con cui eseguire i test:",
"javascripttest-qunit-intro": "Vedi su mediawiki.org la [$1 documentazione riguardante i test].",
- "javascripttest-qunit-heading": "Suite di test di JavaScript per QUnit in MediaWiki",
"tooltip-pt-userpage": "La tua pagina utente",
"tooltip-pt-anonuserpage": "La pagina utente di questo indirizzo IP",
"tooltip-pt-mytalk": "La tua pagina di discussione",
"tooltip-pt-anontalk": "Discussioni sulle modifiche fatte da questo indirizzo IP",
- "tooltip-pt-preferences": "Le mie preferenze",
+ "tooltip-pt-preferences": "Le tue preferenze",
"tooltip-pt-watchlist": "La lista delle pagine che stai tenendo sotto osservazione",
- "tooltip-pt-mycontris": "Elenco dei tuoi contributi",
- "tooltip-pt-login": "La registrazione è consigliata, anche se non obbligatoria",
+ "tooltip-pt-mycontris": "La lista dei tuoi contributi",
+ "tooltip-pt-login": "Si consiglia di effettuare l'accesso, anche se non è obbligatorio",
"tooltip-pt-logout": "Uscita (logout)",
+ "tooltip-pt-createaccount": "Si consiglia di registrarsi e di effettuare l'accesso, anche se non è obbligatorio",
"tooltip-ca-talk": "Vedi le discussioni relative a questa pagina",
"tooltip-ca-edit": "Puoi modificare questa pagina. Per favore usa il pulsante di anteprima prima di salvare",
"tooltip-ca-addsection": "Inizia una nuova sezione",
@@ -2292,10 +2322,11 @@
"tooltip-t-recentchangeslinked": "Elenco delle ultime modifiche alle pagine collegate a questa",
"tooltip-feed-rss": "Feed RSS per questa pagina",
"tooltip-feed-atom": "Feed Atom per questa pagina",
- "tooltip-t-contributions": "Lista dei contributi di questo utente",
+ "tooltip-t-contributions": "Elenco dei contributi di questo utente",
"tooltip-t-emailuser": "Invia un messaggio email a questo utente",
+ "tooltip-t-info": "Ulteriori informazioni su questa pagina",
"tooltip-t-upload": "Carica file multimediali",
- "tooltip-t-specialpages": "Lista di tutte le pagine speciali",
+ "tooltip-t-specialpages": "Elenco di tutte le pagine speciali",
"tooltip-t-print": "Versione stampabile di questa pagina",
"tooltip-t-permalink": "Collegamento permanente a questa versione della pagina",
"tooltip-ca-nstab-main": "Vedi la voce",
@@ -2354,7 +2385,7 @@
"spam_reverting": "Ripristinata l'ultima versione priva di collegamenti a $1",
"spam_blanking": "Pagina svuotata, tutte le versioni contenevano collegamenti a $1",
"spam_deleting": "Pagina cancellata, tutte le versioni contenevano collegamenti a $1",
- "simpleantispam-label": "Controllo anti-spam.\n'''NON''' riempire!",
+ "simpleantispam-label": "Controllo anti-spam.\n<strong>NON</strong> compilare!",
"pageinfo-title": "Informazioni per \"$1\"",
"pageinfo-not-current": "Spiacente, ma è impossibile fornire quest'informazione per vecchie versioni.",
"pageinfo-header-basic": "Informazioni di base",
@@ -2370,7 +2401,6 @@
"pageinfo-robot-policy": "Indicizzazione per i robot",
"pageinfo-robot-index": "Consentito",
"pageinfo-robot-noindex": "Non consentito",
- "pageinfo-views": "Numero di visualizzazioni",
"pageinfo-watchers": "Numero di utenti che hanno la pagina nei loro osservati speciali",
"pageinfo-few-watchers": "Meno di $1 {{PLURAL:$1|osservatore|osservatori}}",
"pageinfo-redirects-name": "Numero di redirect a questa pagina",
@@ -2830,7 +2860,6 @@
"exif-urgency-low": "Bassa ($1)",
"exif-urgency-high": "Alta ($1)",
"exif-urgency-other": "Priorità definite dal'utente ($1)",
- "watchlistall2": "tutte",
"namespacesall": "tutti",
"monthsall": "tutti",
"confirmemail": "Conferma indirizzo email",
@@ -2898,8 +2927,8 @@
"watchlistedit-normal-explain": "Di seguito sono elencate tutte le pagine osservate.\nPer rimuovere una o più pagine dalla lista, selezionare le caselle relative e fare clic sul pulsante \"{{int:Watchlistedit-normal-submit}}\" in fondo all'elenco.\nSi noti che è anche possibile [[Special:EditWatchlist/raw|modificare la lista in formato testuale]].",
"watchlistedit-normal-submit": "Elimina pagine",
"watchlistedit-normal-done": "Dalla lista degli osservati speciali {{PLURAL:$1|è stata eliminata una pagina|sono state eliminate $1 pagine}}:",
- "watchlistedit-raw-title": "Modifica degli osservati speciali in forma testuale",
- "watchlistedit-raw-legend": "Modifica testuale osservati speciali",
+ "watchlistedit-raw-title": "Modifica degli osservati speciali in formato testo",
+ "watchlistedit-raw-legend": "Modifica la lista in formato testo",
"watchlistedit-raw-explain": "Di seguito sono elencate tutte le pagine osservate. Per modificare la lista aggiungere o rimuovere i rispettivi titoli, uno per riga.\nUna volta terminato, fare clic su \"{{int:Watchlistedit-raw-submit}}\" in fondo all'elenco.\nSi noti che è anche possibile [[Special:EditWatchlist|modificare la lista con l'interfaccia standard]].",
"watchlistedit-raw-titles": "Titoli:",
"watchlistedit-raw-submit": "Aggiorna la lista",
@@ -2921,9 +2950,9 @@
"hebrew-calendar-m10": "Tammuz",
"hebrew-calendar-m10-gen": "Tammuz",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussioni]])",
- "unknown_extension_tag": "Tag estensione sconosciuto: \"$1\"",
"duplicate-defaultsort": "Attenzione: la chiave di ordinamento predefinita \"$2\" sostituisce la precedente \"$1\".",
"duplicate-displaytitle": "<strong>Attenzione:</strong> il titolo visualizzato \"$2\" sostituisce il precedente titolo \"$1\".",
+ "invalid-indicator-name": "<strong>Errore:</strong> attributo <code>name</code> degli indicatori dello stato della pagina non può essere vuoto.",
"version": "Versione",
"version-extensions": "Estensioni installate",
"version-skins": "Skin installate",
@@ -2965,6 +2994,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Percorso voci]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Percorso script]",
+ "version-libraries": "Librerie installate",
+ "version-libraries-library": "Libreria",
+ "version-libraries-version": "Versione",
"redirect": "Reindirizzamento da file, utente, pagina o versione",
"redirect-legend": "Reindirizza a un file o una pagina",
"redirect-summary": "Questa pagina speciale reindirizza a un file (specificando il nome del file), a una pagina (specificando un ID di versione o un ID pagina) o a un utente (specificando un ID utente numerico).\nEsempi: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
@@ -3000,6 +3032,7 @@
"specialpages-group-wiki": "Dati e strumenti",
"specialpages-group-redirects": "Pagine speciali che reindirizzano",
"specialpages-group-spam": "Strumenti contro lo spam",
+ "specialpages-group-developer": "Strumenti per gli sviluppatori",
"blankpage": "Pagina vuota",
"intentionallyblankpage": "Questa pagina è lasciata volutamente vuota.",
"external_image_whitelist": " #Lasciare questa riga esattamente com'è<pre>\n#Inserire i frammenti delle espressioni regolari (solo la parte che va fra //) di seguito\n#Queste verranno messe a confronto con gli indirizzi URL delle immagini esterne (hotlinked)\n#Le corrispondenze saranno mostrate come immagini, altrimenti verrà mostrato solo un collegamento\n#Le righe che iniziano con # sono considerate dei commenti\n#La differenza tra maiuscole e minuscole non è significativa\n\n#Inserire sopra questa riga tutti i frammenti di regex. Lasciare questa riga esattamente com'è</pre>",
@@ -3012,12 +3045,54 @@
"tags-tag": "Nome dell'etichetta",
"tags-display-header": "Aspetto nella lista delle modifiche",
"tags-description-header": "Descrizione completa del significato",
+ "tags-source-header": "Sorgente",
"tags-active-header": "Attivo?",
"tags-hitcount-header": "Modifiche che hanno etichetta",
+ "tags-actions-header": "Azioni",
"tags-active-yes": "Sì",
"tags-active-no": "No",
+ "tags-source-extension": "Definito da un'estensione",
+ "tags-source-manual": "Applicato manualmente da utenti e bot",
+ "tags-source-none": "Non più in uso",
"tags-edit": "modifica",
+ "tags-delete": "cancella",
+ "tags-activate": "attiva",
+ "tags-deactivate": "disattiva",
"tags-hitcount": "$1 {{PLURAL:$1|modifica|modifiche}}",
+ "tags-manage-no-permission": "Non hai il permesso di gestire il cambiamento tag.",
+ "tags-create-heading": "Crea un nuovo tag",
+ "tags-create-explanation": "Per impostazione predefinita, i tag appena creati saranno disponibili per l'utilizzo di utenti e bot.",
+ "tags-create-tag-name": "Nome del tag:",
+ "tags-create-reason": "Motivo:",
+ "tags-create-submit": "Crea",
+ "tags-create-no-name": "È necessario specificare un nome di tag.",
+ "tags-create-invalid-chars": "I nomi dei tag non devono contenere virgole (<code>,</code>) o barre (<code>/</code>).",
+ "tags-create-invalid-title-chars": "I nomi dei tag non devono contenere caratteri che non possono essere utilizzati nei titoli delle pagine.",
+ "tags-create-already-exists": "Il tag \"$1\" esiste già.",
+ "tags-create-warnings-above": "{{PLURAl:$2|È stato rilevato il seguente pericolo|Sono stati rilevati i seguenti pericoli}} mentre si cercava di creare l'etichetta \"$1\":",
+ "tags-create-warnings-below": "Desideri continuare a creare il tag?",
+ "tags-delete-title": "Elimina tag",
+ "tags-delete-explanation-initial": "Stai per eliminare il tag \"$1\" dal database.",
+ "tags-delete-explanation-in-use": "Verrà rimossa da {{PLURAL:$2|$2 versioni o voce di registro| tutte le $2 versioni e voci di registro}} dove si trova attualmente.",
+ "tags-delete-explanation-warning": "Questa azione è <strong>irreversibile</strong> e <strong>non può essere annullata</strong>, nemmeno da amministratori di database. Accertati che questo sia davvero il tag che intendi eliminare.",
+ "tags-delete-explanation-active": "<strong> L'etichetta \"$1\" è ancora attiva, e lo resterà in futuro. </strong> Perché questo smetta, vai alle voci di registro dove l'etichetta è in uso, e disattivala manualmente.",
+ "tags-delete-reason": "Motivo:",
+ "tags-delete-submit": "Elimina irreversibilmente questo tag",
+ "tags-delete-not-allowed": "I tag definiti da un'estensione non possono essere eliminati a meno che ciò non sia specificamente permesso dall'estensione.",
+ "tags-delete-not-found": "Il tag \"$1\" non esiste.",
+ "tags-delete-too-many-uses": "Il tag \"$1\" è applicato a più di $2 {{PLURAL:$2|revisione|revisioni}}, il che significa che non può essere eliminato.",
+ "tags-delete-warnings-after-delete": "Il tag \"$1\" è stato eliminato con successo, ma fai attenzione {{PLURAL:$2|al seguente avviso|ai seguenti avvisi}}:",
+ "tags-activate-title": "Attiva tag",
+ "tags-activate-question": "Stai per attivare il tag \"$1\".",
+ "tags-activate-reason": "Motivo:",
+ "tags-activate-not-allowed": "Non è possibile attivare il tag \"$1\".",
+ "tags-activate-not-found": "Il tag \"$1\" non esiste.",
+ "tags-activate-submit": "Attiva",
+ "tags-deactivate-title": "Disattiva il tag",
+ "tags-deactivate-question": "Stai per disattivare il tag \"$1\".",
+ "tags-deactivate-reason": "Motivo:",
+ "tags-deactivate-not-allowed": "Non è possibile disattivare il tag \"$1\".",
+ "tags-deactivate-submit": "Disattiva",
"comparepages": "Confronta le pagine",
"compare-page1": "Pagina 1",
"compare-page2": "Pagina 2",
@@ -3029,12 +3104,12 @@
"compare-revision-not-exists": "La versione che hai specificato non esiste.",
"dberr-problems": "Questo sito sta avendo dei problemi tecnici.",
"dberr-again": "Prova ad attendere qualche minuto e ricaricare.",
- "dberr-info": "(Impossibile contattare il server del database: $1)",
- "dberr-info-hidden": "(Impossibile contattare il server del database)",
+ "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 l'input inserito",
+ "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.",
"htmlform-float-invalid": "Il valore specificato non è un numero.",
@@ -3071,6 +3146,14 @@
"revdelete-uname-unhid": "nome utente ripristinato",
"revdelete-restricted": "limitazioni ai soli amministratori attivate",
"revdelete-unrestricted": "limitazioni ai soli amministratori rimosse",
+ "logentry-block-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} con una scadenza di $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|ha sbloccato}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|ha modificato}} le impostazioni del blocco per {{GENDER:$4|$3}} con una scadenza di $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} con una scadenza di $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|ha modificato}} le impostazioni del blocco per {{GENDER:$4|$3}} con una scadenza di $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|ha importato}} $3 tramite caricamento",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|ha importato}} $3 da un'altra wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|ha unito}} $3 in $4 (versioni fino al $5)",
"logentry-move-move": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 senza lasciare redirect",
"logentry-move-move_redir": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 tramite redirect",
@@ -3088,20 +3171,36 @@
"logentry-upload-upload": "$1 {{GENDER:$2|ha caricato}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|ha caricato}} una nuova versione di $3.",
"logentry-upload-revert": "$1 {{GENDER:$2|ha caricato}} $3",
+ "log-name-managetags": "Registro gestione tag",
+ "log-description-managetags": "Questa pagina elenca le azioni di gestione relative alle [[Special:Tags|etichette]]. Il registro contiene solo le azioni effettuate manualmente da un amministratore; le etichette potrebbero essere create o cancellate dal programma wiki senza che ciò venga registrato qui.",
+ "logentry-managetags-create": "$1 {{GENERE:$2|ha creato}} il tag \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|ha rimosso}} l'etichetta \"$4\" (da $5 {{PLURAL:$5|versione o voce di registro|versioni o voci di registro}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|ha inserito}} l'etichetta \"$4\" per l'uso da parte d'utenti e bot",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|ha disattivato}} l'etichetta \"$4\" per l'uso da parte d'utenti e bot",
"rightsnone": "(nessuno)",
+ "revdelete-summary": "oggetto della modifica",
+ "feedback-adding": "Inserimento del feedback nella pagina...",
+ "feedback-back": "Indietro",
+ "feedback-bugcheck": "Ottimo! Verifica che non sia già fra i [$1 bug conosciuti].",
+ "feedback-bugnew": "Controllo effettuato. Segnala un nuovo bug",
"feedback-bugornote": "Se si è in grado di descrivere il problema tecnico riscontrato in maniera precisa, [$1 segnalate il bug]. In alternativa, si può usare il modulo semplificato sottostante. Il commento inserito sarà aggiunto alla pagina \"[$3 $2]\", insieme al proprio nome utente e al browser in uso.",
- "feedback-subject": "Oggetto:",
- "feedback-message": "Messaggio:",
"feedback-cancel": "Annulla",
- "feedback-submit": "Invia feedback",
- "feedback-adding": "Inserimento del feedback nella pagina...",
+ "feedback-close": "Fatto",
+ "feedback-external-bug-report-button": "Documenta un problema tecnico",
+ "feedback-dialog-title": "Invia un feedback",
+ "feedback-dialog-intro": "Usa il modulo sottostante per inviare il tuo feedback. Il tuo commento apparirà nella pagina \"$1\", assieme al tuo nome utente.",
+ "feedback-error-title": "Errore",
"feedback-error1": "Errore: Dalla API è arrivato un risultato non riconosciuto",
"feedback-error2": "Errore: Non è stato possibile eseguire la modifica",
"feedback-error3": "Errore: Nessuna risposta dalla API",
+ "feedback-message": "Messaggio:",
+ "feedback-subject": "Oggetto:",
+ "feedback-submit": "Invia",
+ "feedback-terms": "Sono al corrente del fatto che le mie informazioni sull'user agent includono informazioni riguardanti il mio esatto browser e versione del sistema operativo, che saranno condivise pubblicamente, assieme al mio feedback.",
+ "feedback-termsofuse": "Accetto di fornire feedback conformemente alle Condizioni d'Uso.",
"feedback-thanks": "Grazie! Il tuo feedback è stato pubblicato alla pagina \"[$2 $1]\".",
- "feedback-close": "Fatto",
- "feedback-bugcheck": "Ottimo! Verifica che non sia già fra i [$1 bug conosciuti].",
- "feedback-bugnew": "Controllo effettuato. Segnala un nuovo bug",
+ "feedback-thanks-title": "Grazie!",
+ "feedback-useragent": "Agente utente:",
"searchsuggest-search": "Ricerca",
"searchsuggest-containing": "contenente...",
"api-error-badaccess-groups": "Non sei autorizzato a caricare documenti su questa wiki.",
@@ -3137,6 +3236,13 @@
"api-error-stashfailed": "Errore interno: il server non è riuscito a memorizzare il documento temporaneo.",
"api-error-publishfailed": "Errore interno: il server non è riuscito a pubblicare il documento temporaneo.",
"api-error-stasherror": "Si è verificato un errore durante il caricamento del file in stash.",
+ "api-error-stashedfilenotfound": "Il file in stash non è stato trovato durante il tentativo di caricamento dallo stash.",
+ "api-error-stashpathinvalid": "Il percorso in cui il file in stash dovrebbe trovarsi non è valido.",
+ "api-error-stashfilestorage": "Si è verificato un errore durante la memorizzazione del file in stash.",
+ "api-error-stashzerolength": "Il server non può inserire il file in stash, poiché ha lunghezza zero.",
+ "api-error-stashnotloggedin": "Devi aver effettuato l'accesso per poter salvare il file nel caricamento in stash.",
+ "api-error-stashwrongowner": "Il file a cui stai tentando di accedere nello stash non appartiene a te.",
+ "api-error-stashnosuchfilekey": "La chiave del file a cui stai tentando di accedere nello stash non esiste.",
"api-error-timeout": "Il server non ha risposto entro il tempo previsto.",
"api-error-unclassified": "Si è verificato un errore sconosciuto.",
"api-error-unknown-code": "Errore sconosciuto: \"$1\"",
@@ -3181,6 +3287,8 @@
"expand_templates_generate_xml": "Mostra albero sintattico XML",
"expand_templates_generate_rawhtml": "Mostra HTML",
"expand_templates_preview": "Anteprima",
+ "expand_templates_preview_fail_html": "<em>Dato che {{SITENAME}} ha dell'HTML grezzo attivato e c'è stata una perdita dei dati della sessione, l'anteprima è nascosta per precauzione contro gli attacchi a JavaScript.</em>\n\n<strong>Se si tratta di un normale tentativo d'anteprima, riprova.</strong> \nSe comunque non dovesse funzionare, prova ad [[Special:UserLogout|uscire]] ed a rientrare.",
+ "expand_templates_preview_fail_html_anon": "<em>Poiché {{SITENAME}} ha dell'HTML grezzo attivato e non hai effettuato l'accesso, l'anteprima è nascosta come precauzione contro gli attacchi JavaScript.</em>\n\n<strong>Se si tratta di un normale tentativo d'anteprima, [[Special:UserLogin|entra]] e riprova.</strong>",
"pagelanguage": "Seleziona lingua della pagina",
"pagelang-name": "Pagina",
"pagelang-language": "Lingua",
@@ -3191,8 +3299,58 @@
"log-name-pagelang": "Modifiche lingua",
"log-description-pagelang": "Questo è un registro delle modifiche alla lingua delle pagine.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5.",
- "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki, definita in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel <code>LocalSettings.php</code> per abilitare tutte le skin attualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
- "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki, definita in <code>$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code dir=\"ltr\">skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.",
+ "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki, definita in <code dir=\"ltr\">$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code dir=\"ltr\">skins/</code> da lì.\n:* Scaricando tarball di singole skin da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel <code>LocalSettings.php</code> per abilitare tutte le skin attualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
+ "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki, definita in <code>$wgDefaultSkin</code> come <code>$1</code>, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Scaricando tarball di singole skin da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code dir=\"ltr\">skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilitata)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')",
+ "mediastatistics": "Statistiche relative ai file multimediali",
+ "mediastatistics-summary": "Statistiche sui tipi di file caricati. Sono incluse solo la versione più recente di un file. Versioni vecchie o cancellate dei file sono escluse.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tipo MIME",
+ "mediastatistics-table-extensions": "Possibili estensioni",
+ "mediastatistics-table-count": "Numero di file",
+ "mediastatistics-table-totalbytes": "Dimensione combinata",
+ "mediastatistics-header-unknown": "Sconosciuto",
+ "mediastatistics-header-bitmap": "Immagini bitmap",
+ "mediastatistics-header-drawing": "Disegni (immagini vettoriali)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Video",
+ "mediastatistics-header-multimedia": "Contenuti multimediali",
+ "mediastatistics-header-office": "Ufficio",
+ "mediastatistics-header-text": "Testuali",
+ "mediastatistics-header-executable": "File eseguibili",
+ "mediastatistics-header-archive": "Formati compressi",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgola finale è stata rimossa|virgole finali sono state rimosse}} dal JSON",
+ "json-error-unknown": "Si è verificato un problema con il JSON. Errore: $1",
+ "json-error-depth": "La profondità massima dello stack è stata superata",
+ "json-error-state-mismatch": "JSON non valido o malformato",
+ "json-error-ctrl-char": "Errore nel carattere di controllo, possibile codifica errata",
+ "json-error-syntax": "Errore di sintassi",
+ "json-error-utf8": "Caratteri UTF-8 non validi, possibile codifica errata",
+ "json-error-recursion": "Uno o più riferimenti ricorsivi nel valore da codificare",
+ "json-error-inf-or-nan": "Uno o più valori NAN o INF nel valore da codificare",
+ "json-error-unsupported-type": "È stato fornito un valore di un tipo che non può essere codificato",
+ "headline-anchor-title": "Collegamento a questa sezione",
+ "special-characters-group-latin": "Latino",
+ "special-characters-group-latinextended": "Latino esteso",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simboli",
+ "special-characters-group-greek": "Greco",
+ "special-characters-group-cyrillic": "Cirillico",
+ "special-characters-group-arabic": "Arabo",
+ "special-characters-group-arabicextended": "Arabo esteso",
+ "special-characters-group-persian": "Persiano",
+ "special-characters-group-hebrew": "Ebraico",
+ "special-characters-group-bangla": "Bengalese",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalese",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thailandese",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "lineetta enne",
+ "special-characters-title-emdash": "lineetta emme",
+ "special-characters-title-minus": "segno meno"
}
diff --git a/languages/i18n/ja.json b/languages/i18n/ja.json
index e6ce372b..bee8a3ba 100644
--- a/languages/i18n/ja.json
+++ b/languages/i18n/ja.json
@@ -60,7 +60,11 @@
"아라",
"Rxy",
"Mfuji",
- "Takot"
+ "Takot",
+ "SkyDaisy9",
+ "Los688",
+ "朝彦",
+ "Otokoume"
]
},
"tog-underline": "リンクの下線:",
@@ -88,7 +92,7 @@
"tog-shownumberswatching": "ページをウォッチしている利用者数を表示",
"tog-oldsig": "既存の署名:",
"tog-fancysig": "署名をウィキ文として扱う (自動リンクなし)",
- "tog-uselivepreview": "ライブプレビューを使用 (開発中)",
+ "tog-uselivepreview": "ライブプレビューを使用",
"tog-forceeditsummary": "要約欄が空欄の場合に確認を促す",
"tog-watchlisthideown": "自分の編集をウォッチリストに表示しない",
"tog-watchlisthidebots": "ボットによる編集をウォッチリストに表示しない",
@@ -179,8 +183,8 @@
"category-empty": "<em>このカテゴリには現在、ページやメディアが何もありません。</em>",
"hidden-categories": "{{PLURAL:$1|隠しカテゴリ}}",
"hidden-category-category": "隠しカテゴリ",
- "category-subcat-count": "{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには $2 下位カテゴリが含まれており、そのうち以下の {{PLURAL:$1|$1 下位カテゴリ}}を表示しています。}}",
- "category-subcat-count-limited": "このカテゴリには以下の{{PLURAL:$1|下位カテゴリ|​&#32;$1 下位カテゴリ}}が含まれています。",
+ "category-subcat-count": "{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには下位カテゴリ $2 件が含まれており、そのうち以下の{{PLURAL:$1| $1 件}}を表示しています。}}",
+ "category-subcat-count-limited": "このカテゴリには以下の{{PLURAL:$1|下位カテゴリ|​&#32;$1件の下位カテゴリ}}が含まれています。",
"category-article-count": "{{PLURAL:$2|このカテゴリには以下のページのみが含まれています。|このカテゴリには $2 ページが含まれており、そのうち以下の $1 ページを表示しています。}}",
"category-article-count-limited": "現在のカテゴリには以下の{{PLURAL:$1|ページ|​&#32;$1 ページ}}が含まれています。",
"category-file-count": "{{PLURAL:$2|このカテゴリには以下のファイルのみが含まれています。|このカテゴリには $2 ファイルが含まれており、そのうち以下の {{PLURAL:$1|$1 ファイル}}を表示しています。}}",
@@ -196,7 +200,7 @@
"moredotdotdot": "続き...",
"morenotlisted": "この一覧は完全ではありません。",
"mypage": "ページ",
- "mytalk": "議論",
+ "mytalk": "トーク",
"anontalk": "このIPアドレスについての議論",
"navigation": "案内",
"and": "&#32;と",
@@ -263,6 +267,7 @@
"otherlanguages": "他言語版",
"redirectedfrom": "($1から転送)",
"redirectpagesub": "転送ページ",
+ "redirectto": "転送先:",
"lastmodifiedat": "このページの最終更新日時は $1 $2 です。",
"viewcount": "このページは {{PLURAL:$1|$1 回}}アクセスされました。",
"protectedpage": "保護されたページ",
@@ -275,6 +280,7 @@
"pool-queuefull": "プールキューがいっぱいです",
"pool-errorunknown": "不明なエラー",
"pool-servererror": "プール カウンター サービスは利用できません ($1)。",
+ "poolcounter-usage-error": "使用法の誤り: $1",
"aboutsite": "{{SITENAME}}について",
"aboutpage": "Project:{{SITENAME}}について",
"copyright": "特に記載がない限り、内容は$1のライセンスで利用できます。",
@@ -284,6 +290,7 @@
"disclaimers": "免責事項",
"disclaimerpage": "Project:免責事項",
"edithelp": "編集の仕方",
+ "helppage-top-gethelp": "ヘルプ",
"mainpage": "メインページ",
"mainpage-description": "メインページ",
"policy-url": "Project:方針",
@@ -364,10 +371,13 @@
"readonly_lag": "データベースはスレーブのデータベースサーバーがマスターに同期するまで自動的にロックされています",
"internalerror": "内部エラー",
"internalerror_info": "内部エラー: $1",
+ "internalerror-fatal-exception": "種別「$1」の致命的例外",
"filecopyerror": "ファイル「$1」を「$2」に複製できませんでした。",
"filerenameerror": "ファイル名を「$1」から「$2」へ変更できませんでした。",
"filedeleteerror": "ファイル「$1」を削除できませんでした。",
"directorycreateerror": "ディレクトリ「$1」を作成できませんでした。",
+ "directoryreadonlyerror": "ディレクトリー「$1」は読み取り専用です。",
+ "directorynotreadableerror": "ディレクトリー「$1」は読み取りできません。",
"filenotfound": "ファイル「$1」が見つかりませんでした。",
"unexpected": "予期しない値「$1」=「$2」です。",
"formerror": "エラー: フォームを送信できませんでした。",
@@ -388,8 +398,9 @@
"protectedpagetext": "このページは編集や他の操作ができないように保護されています。",
"viewsourcetext": "このページのソースの閲覧やコピーができます:",
"viewyourtext": "このページへの<strong>あなたの編集</strong>のソースの閲覧やコピーができます:",
- "protectedinterface": "このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/ translatewiki.net] を使用してください。",
- "editinginterface": "<strong>警告:</strong> ソフトウェアのインターフェイスに使用されるテキストのページを編集しています。\nこのページを変更すると、このウィキの他の利用者のユーザーインターフェイスの外観に影響します。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
+ "protectedinterface": "このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
+ "editinginterface": "<strong>警告:</strong> ソフトウェアのインターフェイスに使用されるテキストのページを編集しています。\nこのページを変更すると、このウィキの他の利用者のユーザーインターフェイスの外観に影響します。",
+ "translateinterface": "すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
"cascadeprotected": "このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ|ページ群}}で読み込まれているため、編集できないように保護されています:\n$2",
"namespaceprotected": "<strong>$1</strong>名前空間にあるページを編集する権限がありません。",
"customcssprotected": "この CSS ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
@@ -446,6 +457,8 @@
"userlogin-resetlink": "ログイン情報をお忘れですか?",
"userlogin-resetpassword-link": "パスワードをお忘れですか?",
"userlogin-helplink2": "ログインについてのヘルプ",
+ "userlogin-loggedin": "{{GENDER:$1|$1}} として既にログインしています。\n別の利用者としてログインするには下のフォームを使用してください。",
+ "userlogin-createanother": "別アカウントを作成",
"createacct-emailrequired": "メールアドレス",
"createacct-emailoptional": "メールアドレス (省略可能)",
"createacct-email-ph": "メールアドレスを入力",
@@ -464,7 +477,7 @@
"createacct-benefit-body2": "{{PLURAL:$1|ページ}}",
"createacct-benefit-body3": "最近の{{PLURAL:$1|投稿者数}}",
"badretype": "入力したパスワードが一致しません。",
- "userexists": "入力された利用者名は既に使用されています。\n他の名前を選んでください。",
+ "userexists": "入力した利用者名は既に使用されています。\n別の利用者名を指定してください。",
"loginerror": "ログインのエラー",
"createacct-error": "アカウント作成エラー",
"createaccounterror": "アカウントを作成できませんでした: $1",
@@ -482,6 +495,7 @@
"wrongpassword": "パスワードが間違っています。 \nもう一度やり直してください。",
"wrongpasswordempty": "パスワードを空欄にはできません。\nもう一度やり直してください。",
"passwordtooshort": "パスワードは {{PLURAL:$1|$1 文字}}以上にしてください。",
+ "passwordtoolong": "パスワードは {{PLURAL:$1|$1 文字}}以下にしてください。",
"password-name-match": "パスワードは利用者名とは異なる必要があります。",
"password-login-forbidden": "この利用者名とパスワードの使用は禁止されています。",
"mailmypassword": "パスワードを再設定",
@@ -607,10 +621,12 @@
"anoneditwarning": "<strong>警告:</strong> ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。<strong>[$1 ログイン]</strong>または<strong>[$2 アカウントを作成]</strong>すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。",
"anonpreviewwarning": "<em>ログインしていません。投稿を保存すると、ご使用中のIPアドレスがこのページの履歴に記録されます。</em>",
"missingsummary": "<strong>注意:</strong> 編集内容の要約が空欄です。\n「{{int:savearticle}}」をもう一度クリックすると、編集内容は要約なしで保存されます。",
+ "selfredirect": "<strong>警告:</strong> あなたはこのページを自身に転送させようとしています。\n転送先の設定を間違ったか、あるいは間違ったページを編集しているかもしれません。\n「{{int:savearticle}}」を再度クリックすると、そのままの転送ページが作成されます。",
"missingcommenttext": "以下にコメントを入力してください。",
"missingcommentheader": "<strong>注意:</strong> このコメントに対する題名/見出しが空欄です。\n「{{int:savearticle}}」ボタンをもう一度押すと、空のまま編集が保存されます。",
"summary-preview": "要約のプレビュー:",
"subject-preview": "題名/見出しのプレビュー:",
+ "previewerrortext": "変更のプレビューを処理中にエラーが発生しました。",
"blockedtitle": "利用者はブロックされています",
"blockedtext": "<strong>この利用者名またはIPアドレスはブロックされています。</strong>\n\nブロックは$1によって実施されました。\nブロックの理由は <em>$2</em> です。\n\n* ブロック開始日時: $8\n* ブロック解除予定: $6\n* ブロック対象: $7\n\nこのブロックについて、$1もしくは他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]に問い合わせることができます。\nただし、[[Special:Preferences|個人設定]]で有効なメールアドレスが登録されていない場合、またはメール送信機能の使用がブロックされている場合、「この利用者にメールを送信」の機能は使えません。\n現在ご使用中のIPアドレスは$3、このブロックIDは#$5です。\nお問い合わせの際には、上記の情報を必ず書いてください。",
"autoblockedtext": "このIPアドレスは、$1によりブロックされた利用者によって使用されたため、自動的にブロックされています。\n理由は次の通りです。\n\n:<em>$2</em>\n\n* ブロック開始日時: $8\n* ブロック解除予定: $6\n* ブロック対象: $7\n\n$1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロックについて問い合わせることができます。\n\nただし、[[Special:Preferences|個人設定]]に正しいメールアドレスが登録されていない場合、またはメール送信がブロックされている場合、「この利用者にメールを送信」機能を使用できないことに注意してください。\n\n現在ご使用中のIPアドレスは$3 、このブロックIDは#$5です。\nお問い合わせの際は、上記の情報を必ず書いてください。",
@@ -661,8 +677,8 @@
"nonunicodebrowser": "<strong>警告: ご使用中のブラウザーは Unicode に未対応です。</strong>\n安全にページを編集する回避策を表示しています: 編集ボックス内の非 ASCII 文字を 16 進数コードで表現しています。",
"editingold": "<strong>警告: このページの古い版を編集しています。</strong>\n保存すると、この版以降になされた変更がすべて失われます。",
"yourdiff": "差分",
- "copyrightwarning": "{{SITENAME}}への投稿は、すべて$2 (詳細は$1を参照) のもとで公開したと見なされることにご注意ください。\nあなたが投稿したものを、他人によって遠慮なく編集し、それを自由に配布するのを望まない場合は、ここには投稿しないでください。<br />\nまた、投稿するのは、あなたが書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください。\n<strong>著作権保護されている作品を、許諾なしに投稿しないでください!</strong>",
- "copyrightwarning2": "{{SITENAME}}へのすべての投稿は、他の利用者によって編集、変更、除去される場合があります。\nあなたの投稿を、他人が遠慮なく編集するのを望まない場合は、ここには投稿しないでください。<br />\nまた、投稿するのは、あなたが書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください (詳細は$1を参照)。\n<strong>著作権保護されている作品を、許諾なしに投稿してはいけません!</strong>",
+ "copyrightwarning": "{{SITENAME}}への投稿はすべて、$2 (詳細は$1を参照)のもとで公開したと見なされることにご注意ください。\n自分が書いたものが他の人に容赦なく編集され、自由に配布されるのを望まない場合は、ここに投稿しないでください。<br />\nまた、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください。\n<strong>著作権保護されている作品は、許諾なしに投稿しないでください!</strong>",
+ "copyrightwarning2": "{{SITENAME}}への投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。\n自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。<br />\nまた、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は$1を参照)。\n<strong>著作権保護されている作品は、許諾なしに投稿しないでください!</strong>",
"longpageerror": "<strong>エラー: 投稿された文章は {{PLURAL:$1|$1 KB}} の長さがあります。これは投稿できる最大の長さ {{PLURAL:$2|$2 KB}} を超えています。</strong>\nこの編集内容は保存できません。",
"readonlywarning": "<strong>警告: データベースがメンテナンスのためロックされており、現在は編集内容を保存できません。</strong>\n必要であれば文章をコピー&amp;ペーストしてテキストファイルとして保存し、後ほど保存をやり直してください。\n\nデータベースをロックした管理者による説明は以下の通りです: $1",
"protectedpagewarning": "<strong>警告: このページは保護されているため、管理者権限を持つ利用者のみが編集できます。</strong>\n参考として以下に最後の記録を表示します:",
@@ -705,6 +721,10 @@
"content-model-text": "プレーンテキスト",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "空のオブジェクト",
+ "content-json-empty-array": "空の配列",
+ "duplicate-args-category": "テンプレート呼び出しで引数が重複しているページ",
+ "duplicate-args-category-desc": "引数が重複したテンプレート呼び出しを含むページ。例: <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code>、<code><nowiki>{{foo|bar|1=baz}}</nowiki></code>",
"expensive-parserfunction-warning": "<strong>警告:</strong> このページでは、高負荷なパーサー関数の呼び出し回数が多過ぎます。\n\n{{PLURAL:$2|呼び出しを $2 回}}未満にしてください ({{PLURAL:$1|現在は $1 回}})。",
"expensive-parserfunction-category": "高負荷な構文解析関数の呼び出しが多過ぎるページ",
"post-expand-template-inclusion-warning": "<strong>警告:</strong> テンプレートの読み込みサイズが大き過ぎます。\nいくつかのテンプレートは読み込まれません。",
@@ -759,7 +779,7 @@
"history-feed-empty": "要求されたページは存在しません。\nこのウィキから既に削除されたか、名前が変更された可能性があります。\n[[Special:Search|このウィキの検索]]で関連する新しいページを探してみてください。",
"rev-deleted-comment": "(要約は除去されています)",
"rev-deleted-user": "(利用者名は除去されています)",
- "rev-deleted-event": "(記録は除去されています)",
+ "rev-deleted-event": "(記録の詳細は除去されています)",
"rev-deleted-user-contribs": "[利用者名またはIPアドレスは除去されました - その編集は投稿記録で非表示にされています]",
"rev-deleted-text-permission": "この版は<strong>削除されています</strong>。\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
"rev-suppressed-text-permission": "この版は<strong>秘匿されています</strong>。[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。",
@@ -793,7 +813,7 @@
"revdelete-legend": "閲覧レベル制限を設定",
"revdelete-hide-text": "版の本文",
"revdelete-hide-image": "ファイル内容を隠す",
- "revdelete-hide-name": "操作および対象を隠す",
+ "revdelete-hide-name": "対象および引数を隠す",
"revdelete-hide-comment": "編集の要約",
"revdelete-hide-user": "投稿者の利用者名/IPアドレス",
"revdelete-hide-restricted": "他の利用者と同様に管理者からもデータを隠す",
@@ -847,14 +867,13 @@
"mergehistory-same-destination": "統合元と統合先のページを同じにはできません",
"mergehistory-reason": "理由:",
"mergelog": "統合記録",
- "pagemerge-logentry": "[[$1]]を[[$2]]に統合 ($3 版まで)",
"revertmerge": "統合解除",
"mergelogpagetext": "以下は、最近行われたあるページから別のページへの統合の一覧です。",
"history-title": "「$1」の変更履歴",
"difference-title": "「$1」の版間の差分",
"difference-title-multipage": "ページ「$1」と「$2」の間の差分",
"difference-multipage": "(ページ間の差分)",
- "lineno": "行$1:",
+ "lineno": "$1行目:",
"compareselectedversions": "選択した版同士を比較",
"showhideselectedversions": "選択した版を表示/非表示",
"editundo": "取り消し",
@@ -870,6 +889,8 @@
"notextmatches": "どのページ本文とも一致しませんでした",
"prevn": "前の$1件",
"nextn": "次の$1件",
+ "prev-page": "前のページ",
+ "next-page": "次のページ",
"prevn-title": "前の{{PLURAL:$1|$1件}}",
"nextn-title": "次の{{PLURAL:$1|$1件}}",
"shown-title": "ページあたり{{PLURAL:$1|$1件の結果}}を表示",
@@ -884,10 +905,11 @@
"searchprofile-images-tooltip": "ファイルを検索",
"searchprofile-everything-tooltip": "全本文ページ (トークページを含む) 内を検索",
"searchprofile-advanced-tooltip": "特定の名前空間内を検索",
- "search-result-size": "$1 ({{PLURAL:$2|$2 単語}})",
- "search-result-category-size": "{{PLURAL:$1|$1 件}} ({{PLURAL:$2|$2 下位カテゴリ}}、{{PLURAL:$3|$3 ファイル}})",
+ "search-result-size": "$1 ({{PLURAL:$2|$2 語}})",
+ "search-result-category-size": "{{PLURAL:$1|$1 件}} ({{PLURAL:$2|下位カテゴリ $2 件}}、{{PLURAL:$3|ファイル $3 件}})",
"search-redirect": "($1からのリダイレクト)",
"search-section": "($1の節)",
+ "search-category": "(カテゴリ $1)",
"search-file-match": "(ファイルの内容との一致)",
"search-suggest": "もしかして: $1",
"search-interwiki-caption": "姉妹プロジェクト",
@@ -898,6 +920,7 @@
"searchall": "すべて",
"showingresults": "<strong>$2</strong> 件目以降の最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。",
"showingresultsinrange": "<strong>$2</strong> 件目から<strong>$3</strong> 件目までの範囲内で最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。",
+ "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> 件中の <strong>$1</strong> 件目|<strong>$3</strong> 件中の <strong>$1</strong> 件目から <strong>$2</strong> 件目}}",
"search-nonefound": "問い合わせに合致する検索結果はありませんでした。",
"powersearch-legend": "高度な検索",
"powersearch-ns": "名前空間を指定して検索:",
@@ -920,9 +943,14 @@
"prefs-personal": "利用者情報",
"prefs-rc": "最近の更新",
"prefs-watchlist": "ウォッチリスト",
+ "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-watchlist-edits": "拡張ウォッチリストの表示件数:",
+ "prefs-watchlist-edits": "ウォッチリストの展開時の最大表示件数:",
"prefs-watchlist-edits-max": "最大数: 1000",
"prefs-watchlist-token": "ウォッチリストのトークン:",
"prefs-misc": "その他",
@@ -991,7 +1019,7 @@
"gender-female": "女",
"prefs-help-gender": "この項目の設定は省略できます。\nソフトウェアが利用者向けの画面表示であなたに言及する際に、適切な文法的性を選択するために使用されます。\nこの情報は公開されます。",
"email": "メール",
- "prefs-help-realname": "本名は省略できます。\n入力すると、あなたの著作物の帰属表示に使われます。",
+ "prefs-help-realname": "本名は省略できます。\n入力すると、あなたの著作物の帰属表示に使用されます。",
"prefs-help-email": "メールアドレスは省略できますが、パスワードを忘れた際にパスワードをリセットするのに必要です。",
"prefs-help-email-others": "利用者ページやトークページ上のリンクを通じて、他の利用者があなたにメールで連絡を取れるようにすることもできます。\n他の利用者が連絡を取る際にあなたのメールアドレスが開示されることはありません。",
"prefs-help-email-required": "メールアドレスが必要です。",
@@ -1012,6 +1040,7 @@
"prefs-tokenwatchlist": "トークン",
"prefs-diffs": "差分",
"prefs-help-prefershttps": "この設定は、次回ログインの際に反映されます。",
+ "prefswarning-warning": "個人設定にまだ保存されていない変更があります。\n「$1」をクリックせずに離れた場合、個人設定は更新されません。",
"prefs-tabs-navigation-hint": "ヒント: ← キーと → キーで、タブ一覧内のタブ間を移動できます。",
"email-address-validity-valid": "メールアドレスは有効のようです",
"email-address-validity-invalid": "有効なメールアドレスを入力してください",
@@ -1099,6 +1128,7 @@
"right-protect": "保護レベルを変更し、カスケード保護されたページを編集",
"right-editprotected": "「{{int:protect-level-sysop}}」の保護を設定されたページを編集",
"right-editsemiprotected": "「{{int:protect-level-autoconfirmed}}」の保護を設定されたページを編集",
+ "right-editcontentmodel": "ページのコンテンツモデルを編集",
"right-editinterface": "ユーザーインターフェースを編集",
"right-editusercssjs": "他の利用者のCSSファイル/JavaScriptファイルを編集",
"right-editusercss": "他の利用者のCSSファイルを編集",
@@ -1126,6 +1156,7 @@
"right-override-export-depth": "リンク先ページを5階層まで含めて書き出す",
"right-sendemail": "他の利用者にメールを送信",
"right-passwordreset": "パスワード再設定メールを閲覧",
+ "right-managechangetags": "[[Special:Tags|タグ]]のデータベースにおける作成および削除",
"newuserlogpage": "アカウント作成記録",
"newuserlogpagetext": "以下はアカウント作成の記録です。",
"rightslog": "利用者権限変更記録",
@@ -1171,6 +1202,8 @@
"action-viewmywatchlist": "自身のウォッチリストの閲覧",
"action-viewmyprivateinfo": "自分の非公開情報の閲覧",
"action-editmyprivateinfo": "自分の非公開情報の編集",
+ "action-editcontentmodel": "ページのコンテンツモデルを編集",
+ "action-managechangetags": "タグのデータベースにおける作成および削除",
"nchanges": "$1 {{PLURAL:$1|回の変更}}",
"enhancedrc-since-last-visit": "最終閲覧以降 $1 {{PLURAL:$1|件}}",
"enhancedrc-history": "履歴",
@@ -1243,9 +1276,9 @@
"uploaderror": "アップロードのエラー",
"upload-recreate-warning": "<strong>警告: その名前のファイルは、以前に削除または移動されています。</strong>\n\n参考のため、このページの削除と移動の記録を以下に示します:",
"uploadtext": "ファイルをアップロードするには、以下のフォームを使用してください。\n\n以前にアップロードされたファイルの表示と検索には[[Special:FileList|{{int:listfiles}}]]を使用してください。(再) アップロードは[[Special:Log/upload|アップロード記録]]に、削除は[[Special:Log/delete|削除記録]]にも記録されます。\n\nページにファイルを入れるには、以下の書式のリンクを使用してください:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.jpg]]</nowiki></code></strong> とすると、ファイルが完全なままで使用されます。\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.png|200px|thumb|left|代替文]]</nowiki></code></strong> とすると、200ピクセルの幅に修正された状態で、左寄せの枠内に、「代替文」が説明として使用されます。\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}:<nowiki>File.ogg]]</nowiki></code></strong> とすると、ファイルを表示せずにそのファイルに直接リンクします。",
- "upload-permitted": "許可されているファイル形式: $1。",
- "upload-preferred": "推奨されているファイル形式: $1。",
- "upload-prohibited": "禁止されているファイル形式: $1。",
+ "upload-permitted": "許可されているファイル{{PLURAL:$2|形式}}: $1。",
+ "upload-preferred": "推奨されているファイル{{PLURAL:$2|形式}}: $1。",
+ "upload-prohibited": "禁止されているファイル{{PLURAL:$2|形式}}: $1。",
"uploadlogpage": "アップロード記録",
"uploadlogpagetext": "以下はファイルアップロードの最近の記録です。\n画像付きで見るには[[Special:NewFiles|新規ファイルの一覧]]をご覧ください。",
"filename": "ファイル名",
@@ -1505,7 +1538,6 @@
"statistics": "統計",
"statistics-header-pages": "ページに関する統計",
"statistics-header-edits": "編集に関する統計",
- "statistics-header-views": "閲覧に関する統計",
"statistics-header-users": "利用者に関する統計",
"statistics-header-hooks": "その他の統計",
"statistics-articles": "記事数",
@@ -1514,13 +1546,9 @@
"statistics-files": "アップロードされたファイル数",
"statistics-edits": "{{SITENAME}}の開設以降の編集回数の総計",
"statistics-edits-average": "1ページあたりの編集回数",
- "statistics-views-total": "総閲覧回数",
- "statistics-views-total-desc": "存在しないページと特別ページに対する閲覧は含まれていません",
- "statistics-views-peredit": "1編集あたりの閲覧回数",
"statistics-users": "[[Special:ListUsers|利用者]]",
"statistics-users-active": "活動中の利用者",
"statistics-users-active-desc": "過去 {{PLURAL:$1|$1 日間}}に何らかの操作をした利用者",
- "statistics-mostpopular": "最も閲覧されているページ",
"pageswithprop": "ページプロパティがあるページ",
"pageswithprop-legend": "ページプロパティがあるページ",
"pageswithprop-text": "このページでは、特定のページプロパティを持つページを列挙します。",
@@ -1561,7 +1589,6 @@
"uncategorizedtemplates": "カテゴリ分類されていないテンプレート",
"unusedcategories": "使われていないカテゴリ",
"unusedimages": "使われていないファイル",
- "popularpages": "人気のページ",
"wantedcategories": "カテゴリページが存在しないカテゴリ",
"wantedpages": "ページが存在しないリンク",
"wantedpages-badtitle": "結果が、無効なページ名を含んでいます: $1",
@@ -1623,10 +1650,12 @@
"pager-older-n": "{{PLURAL:$1|以前の$1件}}",
"suppress": "秘匿する",
"querypage-disabled": "パフォーマンスに悪影響を与えるおそれがあるため、この特別ページは無効になっています。",
+ "apihelp": "API のヘルプ",
+ "apihelp-no-such-module": "モジュール「$1」が見つかりません。",
"booksources": "書籍情報源",
"booksources-search-legend": "書籍情報源を検索",
"booksources-isbn": "ISBN:",
- "booksources-go": "検索",
+ "booksources-search": "検索",
"booksources-text": "お探しの書籍の新品/中古品を販売している外部サイトへのリンクを以下に列挙します。この書籍についてさらに詳しい情報があるかもしれません:",
"booksources-invalid-isbn": "指定した ISBN は有効ではないようです。情報源から写し間違えていないか確認してください。",
"specialloguserlabel": "実行者:",
@@ -1764,7 +1793,7 @@
"wlheader-enotif": "メール通知が有効になっています。",
"wlheader-showupdated": "最終訪問以降に変更されたページは、<strong>太字</strong>で表示されます。",
"wlnote": "$3 $4 までの{{PLURAL:$2|<strong>$2</strong>時間}}になされた{{PLURAL:$1|<strong>$1</strong>件の変更}}は以下の通りです。",
- "wlshowlast": "表示する期間: $1時間、$2日間、$3",
+ "wlshowlast": "表示する期間: $1時間、$2日間",
"watchlist-options": "ウォッチリストのオプション",
"watching": "ウォッチリストに追加中...",
"unwatching": "ウォッチリストから除去中...",
@@ -1813,7 +1842,6 @@
"deleteprotected": "このページは保護されているため削除できません。",
"deleting-backlinks-warning": "'''警告:''' 削除しようとしているページは、[[Special:WhatLinksHere/{{FULLPAGENAME}}|他のページ]]からリンクまたは参照読み込みされています。",
"rollback": "編集を巻き戻し",
- "rollback_short": "巻き戻し",
"rollbacklink": "巻き戻し",
"rollbacklinkcount": "$1{{PLURAL:$1|編集}}を巻き戻し",
"rollbacklinkcount-morethan": "$1{{PLURAL:$1|編集}}以上を巻き戻し",
@@ -1864,6 +1892,7 @@
"protect-othertime": "その他の期間:",
"protect-othertime-op": "その他の期間",
"protect-existing-expiry": "現在の保護期限: $2 $3",
+ "protect-existing-expiry-infinity": "既存の有効期限: 無期限",
"protect-otherreason": "他の、または追加の理由:",
"protect-otherreason-op": "その他の理由",
"protect-dropdown": "*よくある保護理由\n** 度重なる荒らし\n** 度重なるスパム投稿\n** 非生産的な編集合戦\n** 高負荷ページ",
@@ -1923,6 +1952,7 @@
"namespace": "名前空間:",
"invert": "選択したものを除く",
"tooltip-invert": "選択した名前空間 (チェックを入れている場合は、関連付けられた名前空間も含む) のページの変更を非表示にするには、このボックスにチェックを入れる",
+ "tooltip-whatlinkshere-invert": "このボックスにチェックをいれると、選択した名前空間のページからのリンクは非表示になる。",
"namespace_association": "関連付けられた名前空間も含める",
"tooltip-namespace_association": "選択した名前空間に関連付けられたトークページ (逆にトークページの名前空間を選択した場合も同様) の名前空間も含めるには、このボックスにチェックを入れる",
"blanknamespace": "(標準)",
@@ -1961,8 +1991,8 @@
"isredirect": "転送ページ",
"istemplate": "参照読み込み",
"isimage": "ファイルへのリンク",
- "whatlinkshere-prev": "{{PLURAL:$1|前|前の$1件}}",
- "whatlinkshere-next": "{{PLURAL:$1|次|次の$1件}}",
+ "whatlinkshere-prev": "前の$1件",
+ "whatlinkshere-next": "次の$1件",
"whatlinkshere-links": "← リンク",
"whatlinkshere-hideredirs": "転送ページを$1",
"whatlinkshere-hidetrans": "参照読み込みを$1",
@@ -2008,6 +2038,7 @@
"unblocked": "[[User:$1|$1]]のブロックを解除しました。",
"unblocked-range": "$1のブロックを解除しました。",
"unblocked-id": "ブロック$1を除去しました。",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]]のブロックを解除しました。",
"blocklist": "ブロックされている利用者",
"ipblocklist": "ブロックされている利用者",
"ipblocklist-legend": "ブロックされている利用者の検索",
@@ -2187,14 +2218,15 @@
"thumbnail-temp-create": "一時的なサムネイルファイルを作成できません",
"thumbnail-dest-create": "サムネイルを保存先に保存できません",
"thumbnail_invalid_params": "サムネイル引数が無効です",
+ "thumbnail_toobigimagearea": "$1よりも大きな寸法のファイル",
"thumbnail_dest_directory": "出力ディレクトリを作成できません",
"thumbnail_image-type": "対応していない画像形式です",
"thumbnail_gd-library": "GDライブラリの構成が不完全です: 関数$1が不足",
"thumbnail_image-missing": "ファイルが見つかりません: $1",
"thumbnail_image-failure-limit": "このサムネイルの描画に失敗した回数($1 回以上)が上限を超えました。しばらく後でもう一度お試しください。",
"import": "ページデータの取り込み",
- "importinterwiki": "ウィキ間移動の取り込み",
- "import-interwiki-text": "取り込むウィキとページ名を選択してください。\n版の日付と編集者名は保持されます。\nウィキ間移動のすべての取り込み操作は[[Special:Log/import|取り込み記録]]に記録されます。",
+ "importinterwiki": "他のウィキからの取り込み",
+ "import-interwiki-text": "取り込むウィキとページ名を選択してください。\n版の日付と編集者名は保持されます。\n他のウィキからの取り込みはすべて[[Special:Log/import|取り込み記録]]に記録されます。",
"import-interwiki-sourcewiki": "取り込み元のウィキ:",
"import-interwiki-sourcepage": "取り込み元のページ:",
"import-interwiki-history": "このページのすべての版を複製する",
@@ -2214,7 +2246,7 @@
"importcantopen": "取り込みファイルが開けませんでした",
"importbadinterwiki": "ウィキ間リンクが正しくありません",
"importsuccess": "取り込みが完了しました!",
- "importnosources": "ウィキ間移動の取り込み元が定義されていないため、履歴の直接アップロードは無効になっています。",
+ "importnosources": "取り込み元のウィキが定義されていないため、履歴の直接アップロードは無効になっています。",
"importnofile": "取り込みファイルはアップロードされませんでした。",
"importuploaderrorsize": "取り込みファイルのアップロードに失敗しました。\nファイルが、アップロードできるサイズを超えています。",
"importuploaderrorpartial": "取り込みファイルのアップロードに失敗しました。\nファイルの一部のみアップロードされました。",
@@ -2238,18 +2270,15 @@
"import-rootpage-nosubpage": "ルートページの名前空間「$1」では、下位ページが許可されていません。",
"importlogpage": "取り込み記録",
"importlogpagetext": "管理された他のウィキから編集履歴を伴ったページ取り込みです。",
- "import-logentry-upload": "ファイルのアップロードにより[[$1]]を取り込みました",
"import-logentry-upload-detail": "$1{{PLURAL:$1|版}} をインポートしました",
- "import-logentry-interwiki": "$1をウィキ間移動しました",
"import-logentry-interwiki-detail": "$2からインポート済みの$1{{PLURAL:$1|版}}",
"javascripttest": "JavaScript をテスト中",
- "javascripttest-title": "$1 のテストの実行",
"javascripttest-pagetext-noframework": "このページは JavaScript のテストを実行するために予約されています。",
"javascripttest-pagetext-unknownframework": "テストフレームワーク「$1」は不明です。",
+ "javascripttest-pagetext-unknownaction": "不明な操作「$1」。",
"javascripttest-pagetext-frameworks": "以下のテストフレームワークから1つ選択してください: $1",
"javascripttest-pagetext-skins": "テストを実行する外装を選択してください:",
"javascripttest-qunit-intro": "mediawiki.org上の[$1 テストのドキュメント]を参照してください。",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit テストスイート",
"tooltip-pt-userpage": "自分の利用者ページ",
"tooltip-pt-anonuserpage": "自分が編集しているIPアドレスの利用者ページ",
"tooltip-pt-mytalk": "自分のトークページ",
@@ -2259,6 +2288,7 @@
"tooltip-pt-mycontris": "自分の投稿の一覧",
"tooltip-pt-login": "ログインすることを推奨します。ただし、必須ではありません。",
"tooltip-pt-logout": "ログアウト",
+ "tooltip-pt-createaccount": "アカウントを作成してログインすることをお勧めしますが、必須ではありません",
"tooltip-ca-talk": "本文ページについての議論",
"tooltip-ca-edit": "このページを編集できます。保存前にプレビューボタンを使用してください。",
"tooltip-ca-addsection": "新しい節を開始する",
@@ -2288,6 +2318,7 @@
"tooltip-feed-atom": "このページのAtomフィード",
"tooltip-t-contributions": "この利用者の投稿の一覧",
"tooltip-t-emailuser": "この利用者にメールを送信する",
+ "tooltip-t-info": "このページについての詳細情報",
"tooltip-t-upload": "ファイルをアップロードする",
"tooltip-t-specialpages": "特別ページの一覧",
"tooltip-t-print": "このページの印刷用ページ",
@@ -2364,7 +2395,6 @@
"pageinfo-robot-policy": "ロボットによるインデックス作成",
"pageinfo-robot-index": "許可",
"pageinfo-robot-noindex": "不許可",
- "pageinfo-views": "閲覧回数",
"pageinfo-watchers": "ページをウォッチリストに入れている人数",
"pageinfo-few-watchers": "ウォッチしている利用者 $1 {{PLURAL:$1|人未満}}",
"pageinfo-redirects-name": "このページへのリダイレクトの数",
@@ -2855,7 +2885,6 @@
"exif-urgency-low": "低 ($1)",
"exif-urgency-high": "高 ($1)",
"exif-urgency-other": "利用者定義の優先度 ($1)",
- "watchlistall2": "すべて",
"namespacesall": "すべて",
"monthsall": "すべて",
"confirmemail": "メールアドレスの確認",
@@ -3009,9 +3038,9 @@
"hebrew-calendar-m11-gen": "アブ",
"hebrew-calendar-m12-gen": "エルール",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|トーク]])",
- "unknown_extension_tag": "不明な拡張機能タグ「$1」です",
"duplicate-defaultsort": "<strong>警告:</strong> 既定のソートキー「$2」が、その前に書かれている既定のソートキー「$1」を上書きしています。",
"duplicate-displaytitle": "<strong>警告:</strong> DISPLAYTITLE「$2」が、その前に書かれているDISPLAYTITLE「$1」を上書きしています。",
+ "invalid-indicator-name": "<strong>エラー:</strong> ページ・ステータス・インディケーターの <code>name</code> 属性は空であってはいけません。",
"version": "バージョン情報",
"version-extensions": "インストール済み拡張機能",
"version-skins": "インストール済み外装",
@@ -3026,7 +3055,7 @@
"version-parser-function-hooks": "パーサー関数フック",
"version-hook-name": "フック名",
"version-hook-subscribedby": "使用個所",
- "version-version": "(バージョン $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[名前なし]",
"version-license": "MediaWiki のライセンス",
"version-ext-license": "ライセンス",
@@ -3053,6 +3082,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath 記事のパス]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath スクリプトパス]",
+ "version-libraries": "インストールされているライブラリー",
+ "version-libraries-library": "ライブラリー",
+ "version-libraries-version": "バージョン",
"redirect": "ファイル名、利用者ID、ページID、版IDでの転送",
"redirect-legend": "ファイルまたはページヘの転送",
"redirect-summary": "この特別ページは、ファイル (ファイル名を指定)、ページ (版 ID またはページ ID を指定)、利用者ページ (利用者 ID を整数で指定) に転送されます。使用例: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]]",
@@ -3088,6 +3120,7 @@
"specialpages-group-wiki": "データとツール",
"specialpages-group-redirects": "転送される特別ページ",
"specialpages-group-spam": "スパム対策ツール",
+ "specialpages-group-developer": "開発者用ツール",
"blankpage": "白紙ページ",
"intentionallyblankpage": "このページは意図的に白紙にされています。",
"external_image_whitelist": " #この行はこのままにしておいてください<pre>\n#この下に正規表現 (//の間に入る記述) を置いてください\n#外部の (ホットリンクされている) 画像の URL と一致するか検査されます\n#一致する場合は画像として、一致しない場合は画像へのリンクとして表示されます\n#行の頭に # を付けるとコメントとして扱われます\n#大文字と小文字は区別されません\n\n#正規表現はすべてこの行の上に置いてください。この行はこのままにしておいてください</pre>",
@@ -3100,12 +3133,54 @@
"tags-tag": "タグ名",
"tags-display-header": "変更一覧に表示されるもの",
"tags-description-header": "詳細な意味の説明",
+ "tags-source-header": "由来",
"tags-active-header": "アクティブ?",
"tags-hitcount-header": "タグが付与された変更",
+ "tags-actions-header": "対処操作",
"tags-active-yes": "はい",
"tags-active-no": "いいえ",
+ "tags-source-extension": "拡張機能による定義",
+ "tags-source-manual": "利用者およびボットによる手動適用",
+ "tags-source-none": "もう使われていない",
"tags-edit": "編集",
+ "tags-delete": "削除",
+ "tags-activate": "有効化",
+ "tags-deactivate": "無効化",
"tags-hitcount": "$1 {{PLURAL:$1|回の変更}}",
+ "tags-manage-no-permission": "変更タグを管理する権限がありません。",
+ "tags-create-heading": "新しいタグを作成",
+ "tags-create-explanation": "既定では、新しく作られたタグは利用者とボットによる使用が可能となります。",
+ "tags-create-tag-name": "タグ名:",
+ "tags-create-reason": "理由:",
+ "tags-create-submit": "作成",
+ "tags-create-no-name": "タグの名前を指定しなければなりません。",
+ "tags-create-invalid-chars": "タグ名はコンマ (<code>,</code>) やスラッシュ (<code>/</code>) を含んではなりません。",
+ "tags-create-invalid-title-chars": "タグ名はページ名として使用できない文字を含んではなりません。",
+ "tags-create-already-exists": "タグ「$1」は既に存在します。",
+ "tags-create-warnings-above": "タグ「$1」を作成しようとした際に以下の{{PLURAL:$2|警告}}にあいました:",
+ "tags-create-warnings-below": "このタグの作成を続けますか?",
+ "tags-delete-title": "タグを削除",
+ "tags-delete-explanation-initial": "あなたはタグ「$1」をデータベースから削除しようとしています。",
+ "tags-delete-explanation-in-use": "現在適用されている{{PLURAL:$2|リビジョンやログ項目 $2 件}}を削除します。",
+ "tags-delete-explanation-warning": "この操作は<strong>元に戻せず</strong>、データベース管理者をもってしても<strong>取り消しは不可能</strong>です。削除するタグとして間違いがないことをもう一度しっかり確認してください。",
+ "tags-delete-explanation-active": "<strong>タグ「$1」はまだ有効であり、今後も付与され続けます。</strong>これを止めるには、タグが付与されるよう設定されているところに行き、そこで無効化してください。",
+ "tags-delete-reason": "理由:",
+ "tags-delete-submit": "タグを削除する(取り消し不可)",
+ "tags-delete-not-allowed": "拡張機能によって定義されているタグは削除できません(ただし拡張機能が明示的に削除を許可している場合を除く)。",
+ "tags-delete-not-found": "タグ「$1」は存在しません。",
+ "tags-delete-too-many-uses": "タグ「$1」は少なくとも$2版に付与されており、削除できません。",
+ "tags-delete-warnings-after-delete": "タグ「$1」の削除に成功しましたが、以下の{{PLURAL:$2|警告}}が発生しました:",
+ "tags-activate-title": "タグの有効化",
+ "tags-activate-question": "タグ「$1」を有効化しようとしています。",
+ "tags-activate-reason": "理由:",
+ "tags-activate-not-allowed": "タグ「$1」は有効化できません。",
+ "tags-activate-not-found": "タグ「$1」は存在しません。",
+ "tags-activate-submit": "有効化",
+ "tags-deactivate-title": "タグの無効化",
+ "tags-deactivate-question": "タグ「$1」を無効化しようとしています。",
+ "tags-deactivate-reason": "理由:",
+ "tags-deactivate-not-allowed": "タグ「$1」は無効化できません。",
+ "tags-deactivate-submit": "無効化",
"comparepages": "ページの比較",
"compare-page1": "ページ 1",
"compare-page2": "ページ 2",
@@ -3117,8 +3192,8 @@
"compare-revision-not-exists": "指定した版は存在しません。",
"dberr-problems": "申し訳ありません! このウェブサイトに技術的な障害が発生しています。",
"dberr-again": "数分間待った後、もう一度読み込んでください。",
- "dberr-info": "(データベースサーバー $1 に接続できませんでした)",
- "dberr-info-hidden": "(データベース サーバーと通信できません)",
+ "dberr-info": "(データベース $1 にアクセスできません)",
+ "dberr-info-hidden": "(データベースにアクセスできません)",
"dberr-usegoogle": "元に戻るまで、Googleを利用して検索できます。",
"dberr-outofdate": "収集された内容は古い可能性があることに注意してください。",
"dberr-cachederror": "これは要求されたページをキャッシュした複製であり、古くなっている可能性があります。",
@@ -3159,6 +3234,14 @@
"revdelete-uname-unhid": "利用者名の可視化",
"revdelete-restricted": "管理者に対する制限の適用",
"revdelete-unrestricted": "管理者に対する制限の除去",
+ "logentry-block-block": "$1 が {{GENDER:$4|$3}} を$5で{{GENDER:$2|ブロックしました}} $6",
+ "logentry-block-unblock": "$1 が {{GENDER:$4|$3}} の{{GENDER:$2|ブロックを解除しました}}",
+ "logentry-block-reblock": "$1 が {{GENDER:$4|$3}} のブロックの期限を$5に{{GENDER:$2|変更しました}} $6",
+ "logentry-suppress-block": "$1 が {{GENDER:$4|$3}} を$5で{{GENDER:$2|ブロックしました}} $6",
+ "logentry-suppress-reblock": "$1 が {{GENDER:$4|$3}} のブロックの期限を$5に{{GENDER:$2|変更しました}} $6",
+ "logentry-import-upload": "$1 がファイルをアップロードして $3 を{{GENDER:$2|インポートしました}}",
+ "logentry-import-interwiki": "$1 が他のウィキから $3 を{{GENDER:$2|インポートしました}}",
+ "logentry-merge-merge": "$1{{GENDER:$2|統合元}} と$3を$4に統合(改訂版を$5に掲載)",
"logentry-move-move": "$1 がページ「$3」を「$4」に{{GENDER:$2|移動しました}}",
"logentry-move-move-noredirect": "$1 がページ「$3」を「$4」に、リダイレクトを残さずに{{GENDER:$2|移動しました}}",
"logentry-move-move_redir": "$1 がページ「$3」をリダイレクトの「$4」に{{GENDER:$2|移動しました}}",
@@ -3176,20 +3259,31 @@
"logentry-upload-upload": "$1 が $3 を {{GENDER:$2|アップロードしました}}",
"logentry-upload-overwrite": "$1 が $3 の新しいバージョンを {{GENDER:$2|アップロードしました}}",
"logentry-upload-revert": "$1 が $3 を {{GENDER:$2|アップロードしました}}",
+ "log-name-managetags": "タグ管理記録",
+ "log-description-managetags": "このページは[[Special:Tags|タグ]]に関係する管理タスクをリストアップしています。ログには管理者によって手動で実行された操作の記録しか記載されていません。ウィキ・ソフトウェアによって、ログを残さずにタグが作成・削除されている場合があります。",
+ "logentry-managetags-create": "$1 がタグ「$4」を{{GENDER:$2|作成しました}}",
"rightsnone": "(なし)",
+ "revdelete-summary": "編集内容の要約",
+ "feedback-adding": "ページへのフィードバックの追加...",
+ "feedback-back": "戻る",
+ "feedback-bugcheck": "Great! [$1 既出のバグ]に既に含まれていないかご確認ください。",
+ "feedback-bugnew": "チェックしました。バグを報告します。",
"feedback-bugornote": "技術的な問題の詳細を説明する準備ができている場合は、[$1 バグ報告]をお願いします。\n準備ができていない場合は、下の簡易フォームを使用してください。あなたのコメントと利用者名が、ページ「[$3 $2]」に追加されます。",
- "feedback-subject": "件名:",
- "feedback-message": "メッセージ:",
"feedback-cancel": "キャンセル",
- "feedback-submit": "フィードバックを送信",
- "feedback-adding": "ページへのフィードバックの追加...",
+ "feedback-close": "完了",
+ "feedback-dialog-title": "フィードバックの送信",
+ "feedback-error-title": "エラー",
"feedback-error1": "エラー: 認識できない結果を API が返しました",
"feedback-error2": "エラー: 編集に失敗しました",
"feedback-error3": "エラー: API からの応答がありません",
+ "feedback-message": "メッセージ:",
+ "feedback-subject": "件名:",
+ "feedback-submit": "送信",
+ "feedback-terms": "私のユーザーエージェント情報には、使用ブラウザやオペレーティングシステムのバージョンの情報が含まれており、その情報は私が提供するフィードバックとあわせて公開されることを理解しました。",
+ "feedback-termsofuse": "利用規約に従い、フィードバックを提供することに同意します。",
"feedback-thanks": "ありがとうございます。フィードバックを「[$2 $1]」のページに投稿しました。",
- "feedback-close": "完了",
- "feedback-bugcheck": "Great! [$1 既出のバグ]に既に含まれていないかご確認ください。",
- "feedback-bugnew": "チェックしました。バグを報告します。",
+ "feedback-thanks-title": "ありがとうございます!",
+ "feedback-useragent": "ユーザーエージェント:",
"searchsuggest-search": "検索",
"searchsuggest-containing": "この語句を全文検索",
"api-error-badaccess-groups": "このウィキへのファイルのアップロードが許可されていません。",
@@ -3282,5 +3376,55 @@
"default-skin-not-found": "おっと! あなたのウィキの既定の外装「<code>$1</code>」 (<code>$wgDefaultSkin</code>)は利用できません。\n\nあなたのインストールには以下の外装が含まれています。外装の有効化と既定の選択については、[https://www.mediawiki.org/wiki/Manual:Skin_configuration マニュアル: 外装設定] をご覧ください。\n\n$2\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。\n:* [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これにはいくつかの外装と拡張機能が含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\n: あなたがMediaWiki開発者の場合、これを行うことであなたのgitリポジトリに干渉することはありません。\n\n; MediaWiki をアップグレードした場合:\n: MediaWiki 1.24 以降のバージョンでは、インストール済みの外装は自動的には有効になりません。 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery マニュアル:外装の自動探索] をご覧ください)。<code>LocalSettings.php</code> に以下の行をペーストして、現在インストールされている外装を有効にできます。\n\n<pre>$3</pre>\n\n; <code>LocalSettings.php</code>を編集したばかりの場合:\n: 外装名に打ち間違いがないか再度確認してください。",
"default-skin-not-found-no-skins": "おっと! あなたのウィキの既定の外装「<code>$1</code>」 (<code>$wgDefaultSkin</code>)は利用できません。\n\n外装をインストールしていません。\n\n; MediaWikiをインストールしたばかりの場合:\n: gitからインストールしたか、その他の何らかの方法でソースコードから直接インストールした場合には、これは期待されたとおりの動作です。\n:* [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] から外装をインストールしてみてください。\n:* [https://www.mediawiki.org/wiki/Download tarball installer] をダウンロードしてみてください。これには外装と拡張機能がいくつか含まれています。 <code>skins/</code> ディレクトリからコピー&ペーストできます。\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 ('''無効''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''無効''')",
+ "mediastatistics": "メディア統計",
+ "mediastatistics-summary": "アップロードされたファイルの種類に関する統計です。これはファイルの最新バージョンのみを含みます。以前のまたは削除されたバージョンについては除外されています。",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 バイト}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIMEタイプ",
+ "mediastatistics-table-extensions": "取りうる拡張子",
+ "mediastatistics-table-count": "ファイル数",
+ "mediastatistics-table-totalbytes": "合計サイズ",
+ "mediastatistics-header-unknown": "不明",
+ "mediastatistics-header-bitmap": "ビットマップ画像",
+ "mediastatistics-header-drawing": "線画 (ベクターイメージ)",
+ "mediastatistics-header-audio": "オーディオ",
+ "mediastatistics-header-video": "動画",
+ "mediastatistics-header-multimedia": "リッチメディア",
+ "mediastatistics-header-office": "オフィス",
+ "mediastatistics-header-text": "テキスト",
+ "mediastatistics-header-executable": "実行ファイル",
+ "mediastatistics-header-archive": "圧縮フォーマット",
+ "json-warn-trailing-comma": "JSON の末尾の{{PLURAL:$1|カンマ $1 個}}を除去しました",
+ "json-error-unknown": "JSON に問題点がありました。エラー: $1",
+ "json-error-depth": "スタックの深さが上限を超えました",
+ "json-error-state-mismatch": "JSON が無効か、または破損しています",
+ "json-error-ctrl-char": "制御文字のエラーです。おそらく正しく符号化されていません",
+ "json-error-syntax": "構文エラー",
+ "json-error-utf8": "UTF-8 の文字が破損しています。エンコーディングが誤っているおそれがあります",
+ "json-error-recursion": "エンコードされる値に1つ以上の循環参照が含まれます",
+ "json-error-inf-or-nan": "エンコードされる値に1つ以上の NAN または INF が含まれます",
+ "json-error-unsupported-type": "エンコードできない種類の値が入力されました",
+ "headline-anchor-title": "この節へのリンク",
+ "special-characters-group-latin": "ラテン文字",
+ "special-characters-group-latinextended": "ラテン文字拡張",
+ "special-characters-group-ipa": "国際音声記号",
+ "special-characters-group-symbols": "記号",
+ "special-characters-group-greek": "ギリシア文字",
+ "special-characters-group-cyrillic": "キリル文字",
+ "special-characters-group-arabic": "アラビア文字",
+ "special-characters-group-arabicextended": "アラビア文字拡張",
+ "special-characters-group-persian": "ペルシア文字",
+ "special-characters-group-hebrew": "ヘブライ文字",
+ "special-characters-group-bangla": "ベンガル文字",
+ "special-characters-group-tamil": "タミール",
+ "special-characters-group-telugu": "テルグ文字",
+ "special-characters-group-sinhala": "シンハラ文字",
+ "special-characters-group-gujarati": "グジャラート文字",
+ "special-characters-group-devanagari": "デーヴァナーガリー文字",
+ "special-characters-group-thai": "タイ文字",
+ "special-characters-group-lao": "ラオス文字",
+ "special-characters-group-khmer": "クメール文字",
+ "special-characters-title-endash": "en ダッシュ",
+ "special-characters-title-emdash": "em ダッシュ",
+ "special-characters-title-minus": "マイナス記号"
}
diff --git a/languages/i18n/jam.json b/languages/i18n/jam.json
index 81bc7a85..ac1921e6 100644
--- a/languages/i18n/jam.json
+++ b/languages/i18n/jam.json
@@ -5,7 +5,8 @@
"Ukabia",
"Yocahuna",
"គីមស៊្រុន",
- "아라"
+ "아라",
+ "Chabi1"
]
},
"tog-underline": "Lingk andalainin",
@@ -490,6 +491,7 @@
"powersearch-ns": "Saach ina niemspies:",
"preferences": "Prefrens",
"mypreferences": "Mi prefrans",
+ "prefs-help-realname": "Riil niem apshanal. Ef yu giit, imaita yuuz az achribyuushan fi yu wok.",
"group-sysop": "Adminischrieta",
"grouppage-sysop": "{{ns:project}}:Adminischrieta",
"newuserlogpage": "Yuuza krieshan lag",
@@ -546,7 +548,6 @@
"pager-older-n": "{{PLURAL:$1|uola 1|uola $1}}",
"booksources": "Buk suos",
"booksources-search-legend": "Saach fi buk suos",
- "booksources-go": "Gwaan",
"log": "Lagdem",
"allpages": "Aal piej",
"prevpage": "Priivos piej ($1)",
@@ -565,7 +566,7 @@
"watchthispage": "Wach dis piej",
"unwatch": "Anwach",
"watchlist-details": "{{PLURAL:$1|$1 piej|$1 piej}} pahn yu wachlis, naa kount taak piej.",
- "wlshowlast": "Shuo laas $1 howa $2 die $3",
+ "wlshowlast": "Shuo laas $1 howa $2 die",
"watchlist-options": "Wachlis apshan",
"watching": "De wach ...",
"unwatching": "De anwach ...",
@@ -689,6 +690,7 @@
"tooltip-feed-atom": "Atom fiid fi dis piej",
"tooltip-t-contributions": "Vyuu di lis a kanchribyuushan a dis yuuza",
"tooltip-t-emailuser": "Sen e-miel tu dis yuuza",
+ "tooltip-t-info": "Muo infamieshan bout da piej ya",
"tooltip-t-upload": "Opluod fail",
"tooltip-t-specialpages": "Lis a aal peshal piej",
"tooltip-t-print": "Printobl voerjan a dis piej",
@@ -720,7 +722,6 @@
"metadata-expand": "Shuo extendid ditiel",
"metadata-collapse": "Aid extendid ditiel",
"metadata-fields": "EXIF metadieta fiil wa lis ina dis mechiz wi inkluud pahn imij piej displie wen di metadieta tiebl get kalaps.\nAda wandem wi aid bai difaalt.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "aal",
"namespacesall": "aal",
"monthsall": "aal",
"watchlisttools-view": "Vyuu rilivant chienjdem",
diff --git a/languages/i18n/jbo.json b/languages/i18n/jbo.json
index 3d72b454..c57d4405 100644
--- a/languages/i18n/jbo.json
+++ b/languages/i18n/jbo.json
@@ -1,351 +1,364 @@
{
- "@metadata": {
- "authors": [
- "(vinny)",
- "Gleki",
- "Homo logos",
- "Inego (on jbo.wikipedia.org)",
- "Malafaya",
- "OldakQuill",
- "PierreAbbat",
- "គីមស៊្រុន"
- ]
- },
- "underline-always": "roroi",
- "underline-never": "noroi",
- "sunday": "la zedjed.",
- "monday": "la padjed.",
- "tuesday": "la redjed.",
- "wednesday": "la cedjed.",
- "thursday": "la vodjed.",
- "friday": "la mudjed.",
- "saturday": "la xadjed.",
- "sun": "la zedjed",
- "mon": "la padjed",
- "tue": "la redjed",
- "wed": "la cidjed",
- "thu": "la vodjed",
- "fri": "la mudjed",
- "sat": "la xadjed",
- "january": "ianvari",
- "february": "februari",
- "march": "martio",
- "april": "prilio",
- "may_long": "madjio",
- "june": "djunio",
- "july": "djulio",
- "august": "avgusto",
- "september": "septembero",
- "october": "oktobero",
- "november": "novmbero",
- "december": "decmbero",
- "january-gen": "la pamast.",
- "february-gen": "la .remast.",
- "march-gen": "la cimast.",
- "april-gen": "la vomast.",
- "may-gen": "la mumast.",
- "june-gen": "la xamast.",
- "july-gen": "la zemast.",
- "august-gen": "la bimast.",
- "september-gen": "la somast.",
- "october-gen": "la daumast.",
- "november-gen": "la feimast.",
- "december-gen": "la gaimast.",
- "jan": "ian",
- "feb": "fre",
- "mar": "mar",
- "apr": "pri",
- "may": "mad",
- "jun": "jun",
- "jul": "jul",
- "aug": "avg",
- "sep": "sep",
- "oct": "okt",
- "nov": "nov",
- "dec": "dec",
- "pagecategories": "{{PLURAL:$1|klesi|klesi}}",
- "category_header": "fe le kibypapri cu klesi \"$1\"",
- "subcategories": "le'a ti",
- "category-subcat-count": "{{PLURAL:$2|lo dei klesi cu se klesi lo po'o di'e|lo dei klesi cu se klesi {{PLURAL:$1|pa lo|$1 lo}} $2 da.}}",
- "category-article-count": "{{PLURAL:$2|pa vi ckupau ku po'o cmima lo vi klesi.| {{PLURAL:$1|lo vi ckupau|$1 vi ckupau }} ku cmima lo vi klesi, out of $2 total.}}",
- "listingcontinuesabbrev": "co'unai",
- "about": "ve skicu",
- "cancel": "naljetnygau",
- "moredotdotdot": ".au zmadu",
- "mytalk": "lo casnu be mi",
- "navigation": "ckupau",
- "qbfind": "facki",
- "qbedit": "stika",
- "qbpageoptions": "ti ckupau",
- "qbmyoptions": "lo pe mi ckupau",
- "faq": "lo cafne se reisku",
- "faqpage": "lo proiekto zo'u: lo cafne se reisku",
- "vector-action-addsection": "jmina la'e se casnu",
- "vector-action-delete": "vimcu",
- "vector-action-move": "stika lo cmene",
- "vector-action-protect": "bandu",
- "vector-view-create": "zbasu",
- "vector-view-edit": "stika",
- "vector-view-history": "lo ckupau citri",
- "vector-view-view": "tcidu",
- "vector-view-viewsource": "cpacu lo krasi",
- "actions": "nu zukte",
- "namespaces": "cmene canlu",
- "variants": "loi jutsi",
- "errorpagetitle": "fliba",
- "returnto": "xrugau fi la'e zoi gy. $1 .gy",
- "tagline": "ra'i {{SITENAME}}",
- "help": "sidju ckupau",
- "search": "sisku",
- "searchbutton": "sisku",
- "searcharticle": "jarco",
- "history": "lo ckupau citri",
- "history_short": "galfi plivei",
- "printableversion": "lo prina bredi versio",
- "permalink": "vitno terjo'e",
- "view": "cpacu",
- "edit": "stika",
- "create": "ninzba",
- "editthispage": "stika lo vi ckupau",
- "create-this-page": "zbasu lo vi ckupau",
- "delete": "daspo",
- "deletethispage": "vimcu lo vi ckupau",
- "protect": "bandu",
- "protect_change": "binxo",
- "protectthispage": "bandu lo dei ckupau",
- "newpage": "lo cnino ckupau",
- "talkpagelinktext": "casnu",
- "specialpage": "steci ckupau",
- "personaltools": "Sivni tyobuobulysy",
- "talk": "casnu",
- "views": "nu cpacu",
- "toolbox": "loi tutci",
- "otherlanguages": "lo se bangu be lo drata",
- "lastmodifiedat": "le vi ckupau rore'u se galfi de'i li $2 $1",
- "protectedpage": "lo se bandu ckupau",
- "jumpto": "plipe tyobu:",
- "jumptonavigation": "ckupau",
- "jumptosearch": "sisku",
- "aboutsite": "skicu la'e zoi gy.{{SITENAME}}.gy",
- "aboutpage": "Project:sera'a",
- "copyright": "lo selvau cu gubni ja'i la'o gy. $1 .gy.",
- "copyrightpage": "{{ns:project}}:fukyzifpo'e",
- "currentevents": "caca'a fasnu",
- "currentevents-url": "Project:caca'a fasnu",
- "disclaimers": "nunxusra lo za'i na fuzme",
- "disclaimerpage": "Project:kampu nunxusra be lo za'i na fuzme",
- "edithelp": "stika nunsidju",
- "mainpage": "Ralju Ckupau",
- "mainpage-description": "ralju ckupau",
- "portal": "bende ckupau",
- "portal-url": "Project:bende ckupau",
- "privacy": "javni be sera'a lo sivni",
- "privacypage": "Project:i'inai zukselpla",
- "ok": "ie",
- "retrievedfrom": "cpacu fi la'o .url. \"$1\" .url.",
- "editsection": "stika ti",
- "editold": "stika",
- "viewsourceold": "catlu le mifra",
- "editlink": "stika ti",
- "viewsourcelink": "casnu le mifra",
- "editsectionhint": "stika lo te fendi noi du la'oi $1",
- "toc": "ckupau pagbu",
- "showtoc": "jarco",
- "hidetoc": "cancygau",
- "thisisdeleted": "View or restore $1?",
- "viewdeleted": "View $1?",
- "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
- "feedlinks": "Feed:",
- "feed-invalid": "Invalid subscription feed type.",
- "feed-unavailable": "Syndication feeds are not available",
- "site-rss-feed": "$1 RSS cidja",
- "site-atom-feed": "$1 Atom cidja",
- "red-link-title": "$1 (le vi kibypapri cu na zasti)",
- "nstab-main": "lo ckupau",
- "nstab-user": "lo pilno kibypapri",
- "nstab-media": "Media page",
- "nstab-special": "steci ckupau",
- "nstab-project": "gungunma ckupau",
- "nstab-image": "vreji",
- "nstab-mediawiki": "notci",
- "nstab-template": "lo morna",
- "nstab-category": "klesi",
- "badtitle": "na'e mapti cmene",
- "viewsource": "catlu le mifra",
- "yourname": "to pilno cmene toi",
- "login": "co'a se jaspu",
- "nav-login-createaccount": "jaspu nerkla / vreji lo cnino pilno",
- "userlogin": "co'a pilno lo jaspu / zbasu lo jaspu",
- "logout": "co'u se jaspu",
- "userlogout": "co'u se jaspu",
- "nologin": "xu no da jaspu do i $1",
- "nologinlink": "zbasu lo jaspu",
- "createaccount": "zbasu lo jaspu",
- "gotaccountlink": "co'a se jaspu",
- "loginlanguagelabel": "to bangu toi $1",
- "resetpass-submit-cancel": "naljetnygau",
- "passwordreset-username": "to pilno cmene toi",
- "changeemail-cancel": "naljetnygau",
- "link_tip": "lo nenri judri",
- "extlink_sample": "http://www.example.com link title",
- "media_tip": "judri lo vreji",
- "summary": "to ve skicu toi",
- "minoredit": "ti nu na'evajni galfi",
- "watchthis": "zgana ti",
- "savearticle": "stogau lo ckupau",
- "showpreview": "zganygau lo jai se troci",
- "showdiff": "catlu lo jai te frica",
- "loginreqlink": "co'a se jaspu",
- "newarticle": "to cnino toi",
- "previewnote": "'''do o'i morji lo du'u di'e jai se troci se zgana po'o'''\n.i lo do nu stika cu pu'o se stogau",
- "editing": "ca'o stika la'o vric. $1 vric.",
- "editingsection": "ca'o stika la'o vric. $1 vric. noi te fendi",
- "editingcomment": "ca'o stika la'o vric. $1 vric. noi cnino te fendi",
- "template-protected": "(to loi se bende toi)",
- "revisionasof": "ve farvi soi se detri la'oi $1",
- "previousrevision": "lo laldo zmadu versio",
- "cur": "cab",
- "last": "prula'i",
- "page_first": "pamoi",
- "page_last": "fanmo",
- "history-show-deleted": "mo'u se vimcu po'o",
- "histfirst": "clira traji",
- "histlast": "lerci traji",
- "rev-delundel": "jarco/mipri",
- "lineno": "Linji $1",
- "editundo": "fatstika",
- "searchresults": "tu'a le se sisku",
- "searchresults-title": "Sisku pruce for \"$1\"",
- "prevn": "lo lidne {{PLURAL:$1|$1}}",
- "nextn": "lo se lidne {{PLURAL:$1|$1}}",
- "prevn-title": "lo lidne $1 {{PLURAL:$1|result|results}}",
- "shown-title": "zganygau $1 lo {{PLURAL:$1|danfu}} fau ro papri",
- "searchprofile-articles": "lo se vasru papri",
- "searchprofile-images": "tarti vreji",
- "searchprofile-everything": "ro co'e",
- "searchprofile-advanced": "lo tcila",
- "searchprofile-articles-tooltip": "sisku fi la'oi $1",
- "searchprofile-project-tooltip": "sisku fi la'oi $1",
- "searchprofile-images-tooltip": "sisku tu'a lo vreji",
- "search-result-size": "$1 ({{PLURAL:$2|1 valsi|$2 valsi}})",
- "search-section": "(to la'oi $1 noi te fendi toi)",
- "search-suggest": "xu do sisydji lu $1 li'u",
- "searchall": "ro co'e",
- "preferences": "lo se nelci",
- "mypreferences": "lo se nelci",
- "prefs-rc": "lo nu puzi stika",
- "prefs-editing": "ca'o stika",
- "searchresultshead": "tu'a le se sisku",
- "savedprefs": "le do zmaselnei pu vreji",
- "yourrealname": "to fatci cmene toi",
- "action-edit": "stika lo vi ckupau",
- "recentchanges": "lo nu puzi stika",
- "recentchanges-summary": "liste loi nu puzi galfi la .uikis.",
- "rcshowhidebots": "$1 lo zmiku",
- "rcshowhideliu": "$1 lo se jaspu pilno",
- "diff": "te frica",
- "hist": "galfi plivei",
- "hide": "cancygau",
- "show": "Jarco",
- "minoreditletter": "m",
- "newpageletter": "n",
- "boteditletter": "z",
- "rc-enhanced-expand": "zganygau lo tcila",
- "recentchangeslinked": "lo srana nu gasnu",
- "recentchangeslinked-toolbox": "lo srana nu gasnu",
- "recentchangeslinked-page": "to ckupau cmene toi",
- "upload": "benji lo pa vreji",
- "uploadbtn": "benji lo pa vreji",
- "filedesc": "to ve skicu toi",
- "file-anchor-link": "vreji",
- "filehist": "lo vreji citri",
- "filehist-current": "cabna",
- "filehist-datetime": "detytcika",
- "filehist-user": "pilno",
- "filehist-comment": "pinka",
- "imagelinks": "vreji nu pilno",
- "randompage": "cunso ckupau",
- "nbytes": "$1 {{PLURAL:$1|bitsi}}",
- "newpages": "lo cnino ckupau",
- "move": "stika lo cmene",
- "booksources-go": "sazri",
- "allpages": "ro ckupau",
- "allarticles": "ro notci",
- "allpagessubmit": "jarco",
- "categories": "klesi",
- "watchlist": "loi se zgana ckupau",
- "mywatchlist": "loi se zgana ckupau",
- "watch": "jundi",
- "watchthispage": "zgana ti",
- "unwatch": "de'a zgana",
- "watching": "co'a jundi",
- "unwatching": "co'u jundi",
- "actioncomplete": "mo'u pruce",
- "actionfailed": "fliba lo nu pruce",
- "dellogpage": "plivei fi loi nu daspo",
- "deletionlog": "plivei fi loi nu daspo",
- "rollbacklink": "lamxru",
- "restriction-edit": "stika",
- "undeleteviewlink": "cpacu",
- "namespace": "to cmene canlu toi",
- "blanknamespace": "(ralju)",
- "contributions": "{{GENDER:$1|lo pilno}} mo'u stika la'e di'e",
- "mycontris": "lo be mi pu se stika",
- "sp-contributions-talk": "lo nu casnu",
- "sp-contributions-submit": "sisku",
- "whatlinkshere": "ma jorne ti",
- "whatlinkshere-page": "to ckupau toi",
- "isimage": "judri lo vreji",
- "whatlinkshere-prev": "{{PLURAL:$1|lidne|se lidne la'o url $1 url}}",
- "whatlinkshere-links": "to loi judri toi",
- "whatlinkshere-hidelinks": "loi judri la'o .url $1 .url",
- "blocklink": "zunti",
- "change-blocklink": "stika bliku",
- "contribslink": "selstika",
- "block-log-flags-nocreate": "gau nu ka'enai zbasu lo jaspu",
- "revertmove": "xruti",
- "allmessagesname": "cmene",
- "thumbnail-more": "bardygau",
- "tooltip-pt-userpage": "ckupau pe do poi pilno",
- "tooltip-pt-mytalk": "pe do nu casnu ckupau",
- "tooltip-pt-preferences": "lo se nelci be do",
- "tooltip-pt-watchlist": "le liste be lo kibypapri poi do zgana",
- "tooltip-pt-mycontris": "le liste be le do selstika",
- "tooltip-pt-login": "e'u do co'a pilno lo jaspu ije ku'i do na bilga",
- "tooltip-pt-logout": "co'u se jaspu",
- "tooltip-ca-talk": "lo nu casnu lo se vasru be lo dei ckupau",
- "tooltip-ca-history": "lo purci versio be lo dei papri",
- "tooltip-ca-protect": "bandu lo dei papri",
- "tooltip-ca-delete": "vimcu lo vi ckupau",
- "tooltip-ca-move": "ko galfi lo cmene be lo vi ckupau",
- "tooltip-ca-watch": "jmive lo dei ckupau lo se zgana liste pe do",
- "tooltip-search": "Sisku {{SITENAME}}",
- "tooltip-search-go": "vitke lo ckupau poi se cmene da bi'unai fau lo nu ri zasti",
- "tooltip-search-fulltext": "sisku do'i lei ckupau",
- "tooltip-p-logo": "vitke lo ralju ckupau",
- "tooltip-n-mainpage": "vitke lo ralju ckupau",
- "tooltip-n-mainpage-description": "vitke lo ralju ckupau",
- "tooltip-n-portal": "srana lo dei proiekto je zo'e noi ka'e se zukte do vau je lo stuzi be lo plixau info",
- "tooltip-n-recentchanges": "liste lo vreji be lo nu puzi stika bu'u lo dei uitki",
- "tooltip-n-randompage": "jarco lo cunso ckupau",
- "tooltip-n-help": "sidju kibypapri",
- "tooltip-t-whatlinkshere": "nu liste lo zifyga'ikibjudri poi ke'a kibjorne le vi ckupau",
- "tooltip-t-recentchangeslinked": "lo puzi nunga'i pe lo kibypapri poi kibjorne le vi ckupau",
- "tooltip-t-upload": "benji lo pa vreji",
- "tooltip-t-specialpages": "liste ro steci ckupau",
- "tooltip-t-print": "lo prina versio be lo dei ckupau",
- "tooltip-t-permalink": "lo stodi judri be lo dei versio be lo dei papri",
- "tooltip-ca-nstab-main": "catlu lo se vasru ckupau",
- "tooltip-ca-nstab-project": "cpacu lo gungunma ckupau",
- "tooltip-ca-nstab-image": "catlu lo ckupau pe lo vreji",
- "tooltip-ca-nstab-template": "cpacu lo morna",
- "tooltip-save": "lo nu stika ku ranji gau",
- "tooltip-undo": "fatygau le nunstika gi'e jarco le stika tampapri tai lo nu troci jarco .i kakne jmina lo krinu le torvelski",
- "pageinfo-toolboxlink": "lo info be lo ckupau",
- "bad_image_list": "lo formate cu jai ve ciksi do'e di'e\n\ni lo po'o liste cmima (to lo linji poi zo'oi * cu pamoi lerfu ke'a) cu se pilno\ni lo pamoi ke linji judrysni cu ei judrysni lo jai se curmi nai fail\ni ro lo se lidne judrysni pe lo bi'unai linji cu nai jai se javni vau je va'i me lo papri poi lo fail sinxa ka'e zvati lo bi'unai linji",
- "watchlistall2": "ro co'e",
- "namespacesall": "ro co'e",
- "monthsall": "ro co'e",
- "specialpages": "steci ckupau",
- "feedback-cancel": "naljetnygau"
+ "@metadata": {
+ "authors": [
+ "(vinny)",
+ "Gleki",
+ "Homo logos",
+ "Inego (on jbo.wikipedia.org)",
+ "Malafaya",
+ "OldakQuill",
+ "PierreAbbat",
+ "គីមស៊្រុន"
+ ]
+ },
+ "tog-underline": "lo nu cnita linji ke judri sinxa",
+ "tog-hideminor": "na zgana lo nalvajni nu cnegau poi me lo puzi nu stika",
+ "tog-showtoolbar": "zgana lo stika kajna",
+ "underline-always": "roroi",
+ "underline-never": "noroi",
+ "editfont-sansserif": "cfine claxu lerfu",
+ "editfont-serif": "cfine lerfu",
+ "sunday": "la zedjed.",
+ "monday": "la padjed.",
+ "tuesday": "la redjed.",
+ "wednesday": "la cedjed.",
+ "thursday": "la vodjed.",
+ "friday": "la mudjed.",
+ "saturday": "la xadjed.",
+ "sun": "la zedjed",
+ "mon": "la padjed",
+ "tue": "la redjed",
+ "wed": "la cidjed",
+ "thu": "la vodjed",
+ "fri": "la mudjed",
+ "sat": "la xadjed",
+ "january": "ianvari",
+ "february": "februari",
+ "march": "martio",
+ "april": "prilio",
+ "may_long": "madjio",
+ "june": "djunio",
+ "july": "djulio",
+ "august": "avgusto",
+ "september": "septembero",
+ "october": "oktobero",
+ "november": "novmbero",
+ "december": "decmbero",
+ "january-gen": "la pamast.",
+ "february-gen": "la .remast.",
+ "march-gen": "la cimast.",
+ "april-gen": "la vomast.",
+ "may-gen": "la mumast.",
+ "june-gen": "la xamast.",
+ "july-gen": "la zemast.",
+ "august-gen": "la bimast.",
+ "september-gen": "la somast.",
+ "october-gen": "la daumast.",
+ "november-gen": "la feimast.",
+ "december-gen": "la gaimast.",
+ "jan": "ian",
+ "feb": "fre",
+ "mar": "mar",
+ "apr": "pri",
+ "may": "mad",
+ "jun": "jun",
+ "jul": "jul",
+ "aug": "avg",
+ "sep": "sep",
+ "oct": "okt",
+ "nov": "nov",
+ "dec": "dec",
+ "january-date": "ianvari $1",
+ "february-date": "februari $1",
+ "march-date": "martio $1",
+ "april-date": "prilio $1",
+ "may-date": "madjio $1",
+ "june-date": "djunio $1",
+ "july-date": "djulio $1",
+ "august-date": "avgusto $1",
+ "september-date": "septembero $1",
+ "october-date": "oktobero $1",
+ "november-date": "novmbero $1",
+ "december-date": "decmbero $1",
+ "pagecategories": "{{PLURAL:$1|klesi|klesi}}",
+ "category_header": "fe le kibypapri cu klesi \"$1\"",
+ "subcategories": "le'a ti",
+ "category-subcat-count": "{{PLURAL:$2|lo dei klesi cu se klesi lo po'o di'e|lo dei klesi cu se klesi {{PLURAL:$1|pa lo|$1 lo}} $2 da.}}",
+ "category-article-count": "{{PLURAL:$2|pa vi ckupau ku po'o cmima lo vi klesi.| {{PLURAL:$1|lo vi ckupau|$1 vi ckupau }} ku cmima lo vi klesi, out of $2 total.}}",
+ "listingcontinuesabbrev": "co'unai",
+ "about": "ve skicu",
+ "cancel": "naljetnygau",
+ "moredotdotdot": ".au zmadu",
+ "mytalk": "lo casnu be mi",
+ "navigation": "ckupau",
+ "qbfind": "facki",
+ "qbedit": "stika",
+ "qbpageoptions": "ti ckupau",
+ "qbmyoptions": "lo pe mi ckupau",
+ "faq": "lo cafne se retsku",
+ "faqpage": "lo proiekto zo'u: lo cafne se retsku",
+ "actions": "nu zukte",
+ "namespaces": "cmene canlu",
+ "variants": "loi jutsi",
+ "errorpagetitle": "fliba",
+ "returnto": "xrugau fi la'e zoi gy. $1 .gy",
+ "tagline": "ra'i {{SITENAME}}",
+ "help": "sidju ckupau",
+ "search": "sisku",
+ "searchbutton": "sisku",
+ "searcharticle": "jarco",
+ "history": "lo ckupau citri",
+ "history_short": "galfi plivei",
+ "printableversion": "lo prina bredi versio",
+ "permalink": "vitno terjo'e",
+ "view": "cpacu",
+ "edit": "stika",
+ "create": "ninzba",
+ "editthispage": "stika lo vi ckupau",
+ "create-this-page": "zbasu lo vi ckupau",
+ "delete": "daspo",
+ "deletethispage": "vimcu lo vi ckupau",
+ "protect": "bandu",
+ "protect_change": "binxo",
+ "protectthispage": "bandu lo dei ckupau",
+ "newpage": "lo cnino ckupau",
+ "talkpage": "casnu lo dei ckupau",
+ "talkpagelinktext": "casnu",
+ "specialpage": "steci ckupau",
+ "personaltools": "Sivni tyobuobulysy",
+ "talk": "casnu",
+ "views": "nu cpacu",
+ "toolbox": "loi tutci",
+ "viewtalkpage": "catlu lo nu casnu",
+ "otherlanguages": "bau lo drata",
+ "lastmodifiedat": "le vi ckupau rore'u se galfi de'i li $2 $1",
+ "protectedpage": "lo se bandu ckupau",
+ "jumpto": "lo se plipe",
+ "jumptonavigation": "ckupau",
+ "jumptosearch": "sisku",
+ "pool-errorunknown": "lo se srera poi na se djuno",
+ "aboutsite": "skicu la'e zoi gy.{{SITENAME}}.gy",
+ "aboutpage": "Project:sera'a",
+ "copyright": "lo selvau cu gubni ja'i la'o gy. $1 .gy.",
+ "copyrightpage": "{{ns:project}}:fukyzifpo'e",
+ "currentevents": "caca'a fasnu",
+ "currentevents-url": "Project:caca'a fasnu",
+ "disclaimers": "nunxusra lo za'i na fuzme",
+ "disclaimerpage": "Project:kampu nunxusra be lo za'i na fuzme",
+ "edithelp": "stika nunsidju",
+ "mainpage": "Ralju Ckupau",
+ "mainpage-description": "ralju ckupau",
+ "portal": "bende ckupau",
+ "portal-url": "Project:bende ckupau",
+ "privacy": "javni be sera'a lo sivni",
+ "privacypage": "Project:loi javni be lo nu sivni",
+ "ok": "ie",
+ "retrievedfrom": "cpacu fi la'o .url. \"$1\" .url.",
+ "editsection": "stika ti",
+ "editold": "stika",
+ "viewsourceold": "catlu le mifra",
+ "editlink": "stika ti",
+ "viewsourcelink": "casnu le mifra",
+ "editsectionhint": "stika lo te fendi noi du la'oi $1",
+ "toc": "ckupau pagbu",
+ "showtoc": "jarco",
+ "hidetoc": "cancygau",
+ "thisisdeleted": "View or restore $1?",
+ "viewdeleted": "View $1?",
+ "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+ "feedlinks": "Feed:",
+ "feed-invalid": "Invalid subscription feed type.",
+ "feed-unavailable": "Syndication feeds are not available",
+ "site-rss-feed": "$1 RSS cidja",
+ "site-atom-feed": "$1 Atom cidja",
+ "red-link-title": "$1 (le vi kibypapri cu na zasti)",
+ "nstab-main": "lo ckupau",
+ "nstab-user": "lo pilno kibypapri",
+ "nstab-media": "Media page",
+ "nstab-special": "steci ckupau",
+ "nstab-project": "gungunma ckupau",
+ "nstab-image": "vreji",
+ "nstab-mediawiki": "notci",
+ "nstab-template": "lo morna",
+ "nstab-category": "klesi",
+ "badtitle": "na'e mapti cmene",
+ "viewsource": "catlu le mifra",
+ "yourname": "to pilno cmene toi",
+ "login": "co'a se jaspu",
+ "nav-login-createaccount": "jaspu nerkla / vreji lo cnino pilno",
+ "userlogin": "co'a pilno lo jaspu / zbasu lo jaspu",
+ "logout": "de'a se jaspu",
+ "userlogout": "de'a se jaspu",
+ "nologin": "xu no da jaspu do i $1",
+ "nologinlink": "zbasu lo jaspu",
+ "createaccount": "zbasu lo jaspu",
+ "gotaccountlink": "co'a se jaspu",
+ "loginlanguagelabel": "to bangu toi $1",
+ "pt-userlogout": "de'a se jaspu",
+ "resetpass-submit-cancel": "naljetnygau",
+ "passwordreset-username": "to pilno cmene toi",
+ "link_tip": "lo nenri judri",
+ "extlink_sample": "http://www.example.com link title",
+ "media_tip": "judri lo vreji",
+ "summary": "to ve skicu toi",
+ "minoredit": "ti nu na'evajni galfi",
+ "watchthis": "zgana ti",
+ "savearticle": "stogau lo ckupau",
+ "showpreview": "zgana lo jai se troci",
+ "showdiff": "catlu lo jai te frica",
+ "loginreqlink": "co'a se jaspu",
+ "newarticle": "to cnino toi",
+ "noarticletext": "no da .uenzi va'o lo dei papri .i .e'u do [[Special:Search/{{PAGENAME}}|sisku tu'a lo cmene be lo dei papri]] lo drata papri ja <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sisku fi lo srana citri vreji] ja [{{fullurl:{{FULLPAGENAME}}|action=edit}} cnegau lo dei papri]</span>.",
+ "previewnote": "'''do o'i morji lo du'u di'e jai se troci se zgana po'o'''\n.i lo do nu stika cu pu'o se stogau",
+ "editing": "ca'o stika la'o vric. $1 vric.",
+ "editingsection": "ca'o stika la'o vric. $1 vric. noi te fendi",
+ "editingcomment": "ca'o stika la'o vric. $1 vric. noi cnino te fendi",
+ "template-protected": "(to loi se bende toi)",
+ "revisionasof": "ve farvi soi se detri la'oi $1",
+ "previousrevision": "lo laldo zmadu versio",
+ "cur": "cab",
+ "last": "prula'i",
+ "page_first": "pamoi",
+ "page_last": "fanmo",
+ "history-show-deleted": "mo'u se vimcu po'o",
+ "histfirst": "clira traji",
+ "histlast": "lerci traji",
+ "rev-delundel": "jarco/mipri",
+ "lineno": "Linji $1",
+ "editundo": "fatstika",
+ "searchresults": "tu'a le se sisku",
+ "searchresults-title": "Sisku pruce for \"$1\"",
+ "prevn": "lo lidne {{PLURAL:$1|$1}}",
+ "nextn": "lo se lidne {{PLURAL:$1|$1}}",
+ "prevn-title": "lo lidne $1 {{PLURAL:$1|result|results}}",
+ "shown-title": "fau ro papri zgana $1 lo {{PLURAL:$1|danfu}}",
+ "searchprofile-articles": "lo se vasru papri",
+ "searchprofile-images": "tarti vreji",
+ "searchprofile-everything": "ro co'e",
+ "searchprofile-advanced": "lo tcila",
+ "searchprofile-articles-tooltip": "sisku fi la'oi $1",
+ "searchprofile-images-tooltip": "sisku tu'a lo vreji",
+ "search-result-size": "$1 ({{PLURAL:$2|1 valsi|$2 valsi}})",
+ "search-section": "(to la'oi $1 noi te fendi toi)",
+ "search-suggest": "xu do sisydji lu $1 li'u",
+ "searchall": "ro co'e",
+ "preferences": "lo se nelci",
+ "mypreferences": "lo se nelci",
+ "prefs-rc": "lo nu puzi stika",
+ "prefs-editing": "ca'o stika",
+ "searchresultshead": "tu'a le se sisku",
+ "savedprefs": "le do zmaselnei pu vreji",
+ "yourrealname": "to fatci cmene toi",
+ "yourlanguage": "to bangu toi",
+ "action-edit": "stika lo vi ckupau",
+ "recentchanges": "lo nu puzi stika",
+ "recentchanges-legend": "loi optio pe lo pu zi nu stika",
+ "recentchanges-summary": "liste loi nu puzi stika le uitki",
+ "rcshowhidebots": "$1 lo zmiku",
+ "rcshowhideliu": "$1 lo se jaspu pilno",
+ "rclinks": "zgana $1 lo romoi nu stika ca $2 lo romoi djedi<br />$3",
+ "diff": "te frica",
+ "hist": "galfi plivei",
+ "hide": "cancygau",
+ "show": "Jarco",
+ "minoreditletter": "m",
+ "newpageletter": "n",
+ "boteditletter": "z",
+ "rc-enhanced-expand": "zgana lo tcila",
+ "recentchangeslinked": "lo srana nu gasnu",
+ "recentchangeslinked-toolbox": "lo srana nu gasnu",
+ "recentchangeslinked-page": "to ckupau cmene toi",
+ "upload": "benji lo pa vreji",
+ "uploadbtn": "benji lo pa vreji",
+ "filedesc": "to ve skicu toi",
+ "file-anchor-link": "vreji",
+ "filehist": "lo vreji citri",
+ "filehist-current": "cabna",
+ "filehist-datetime": "detytcika",
+ "filehist-user": "pilno",
+ "filehist-comment": "pinka",
+ "imagelinks": "vreji nu pilno",
+ "randompage": "cunso ckupau",
+ "nbytes": "$1 {{PLURAL:$1|bitsi}}",
+ "newpages": "lo cnino ckupau",
+ "move": "stika lo cmene",
+ "allpages": "ro ckupau",
+ "allarticles": "ro notci",
+ "allpagessubmit": "jarco",
+ "categories": "klesi",
+ "watchlist": "loi se zgana ckupau",
+ "mywatchlist": "loi se zgana ckupau",
+ "watch": "jundi",
+ "watchthispage": "zgana ti",
+ "unwatch": "de'a zgana",
+ "watching": "co'a jundi",
+ "unwatching": "co'u jundi",
+ "actioncomplete": "mo'u pruce",
+ "actionfailed": "fliba lo nu pruce",
+ "dellogpage": "plivei fi loi nu daspo",
+ "deletionlog": "plivei fi loi nu daspo",
+ "rollbacklink": "lamxru",
+ "restriction-edit": "stika",
+ "undeleteviewlink": "cpacu",
+ "namespace": "to cmene canlu toi",
+ "blanknamespace": "(ralju)",
+ "contributions": "{{GENDER:$1|lo pilno}} mo'u stika la'e di'e",
+ "mycontris": "lo be mi pu se stika",
+ "sp-contributions-talk": "lo nu casnu",
+ "sp-contributions-submit": "sisku",
+ "whatlinkshere": "ma jorne ti",
+ "whatlinkshere-page": "to ckupau toi",
+ "isimage": "judri lo vreji",
+ "whatlinkshere-prev": "{{PLURAL:$1|lidne|se lidne la'o url $1 url}}",
+ "whatlinkshere-links": "to loi judri toi",
+ "whatlinkshere-hidelinks": "loi judri la'o .url $1 .url",
+ "blocklink": "zunti",
+ "change-blocklink": "stika bliku",
+ "contribslink": "selstika",
+ "block-log-flags-nocreate": "gau nu ka'enai zbasu lo jaspu",
+ "revertmove": "xruti",
+ "allmessagesname": "cmene",
+ "allmessages-language": "to bangu toi",
+ "thumbnail-more": "bardygau",
+ "tooltip-pt-userpage": "ckupau pe do poi pilno",
+ "tooltip-pt-mytalk": "pe do nu casnu ckupau",
+ "tooltip-pt-preferences": "lo se nelci be do",
+ "tooltip-pt-watchlist": "le liste be lo kibypapri poi do zgana",
+ "tooltip-pt-mycontris": "le liste be le do selstika",
+ "tooltip-pt-login": "e'u do co'a pilno lo jaspu ije ku'i do na bilga",
+ "tooltip-pt-logout": "de'a se jaspu",
+ "tooltip-ca-talk": "lo nu casnu lo se vasru be lo dei ckupau",
+ "tooltip-ca-history": "lo purci versio be lo dei papri",
+ "tooltip-ca-protect": "bandu lo dei papri",
+ "tooltip-ca-delete": "vimcu lo vi ckupau",
+ "tooltip-ca-move": "ko galfi lo cmene be lo vi ckupau",
+ "tooltip-ca-watch": "jmive lo dei ckupau lo se zgana liste pe do",
+ "tooltip-search": "Sisku {{SITENAME}}",
+ "tooltip-search-go": "vitke lo ckupau poi se cmene da bi'unai fau lo nu ri zasti",
+ "tooltip-search-fulltext": "sisku do'i lei ckupau",
+ "tooltip-p-logo": "vitke lo ralju ckupau",
+ "tooltip-n-mainpage": "vitke lo ralju ckupau",
+ "tooltip-n-mainpage-description": "vitke lo ralju ckupau",
+ "tooltip-n-portal": "srana lo dei proiekto je zo'e noi ka'e se zukte do vau je lo stuzi be lo plixau info",
+ "tooltip-n-recentchanges": "liste lo vreji be lo nu puzi stika bu'u lo dei uitki",
+ "tooltip-n-randompage": "jarco lo cunso ckupau",
+ "tooltip-n-help": "sidju kibypapri",
+ "tooltip-t-whatlinkshere": "nu liste lo zifyga'ikibjudri poi ke'a kibjorne le vi ckupau",
+ "tooltip-t-recentchangeslinked": "lo puzi nunga'i pe lo kibypapri poi kibjorne le vi ckupau",
+ "tooltip-t-upload": "benji lo pa vreji",
+ "tooltip-t-specialpages": "liste ro steci ckupau",
+ "tooltip-t-print": "lo prina versio be lo dei ckupau",
+ "tooltip-t-permalink": "lo stodi judri be lo dei versio be lo dei papri",
+ "tooltip-ca-nstab-main": "catlu lo se vasru ckupau",
+ "tooltip-ca-nstab-project": "cpacu lo gungunma ckupau",
+ "tooltip-ca-nstab-image": "catlu lo ckupau pe lo vreji",
+ "tooltip-ca-nstab-template": "cpacu lo morna",
+ "tooltip-save": "lo nu stika ku ranji gau",
+ "tooltip-undo": "fatygau le nunstika gi'e jarco le stika tampapri tai lo nu troci jarco .i kakne jmina lo krinu le torvelski",
+ "pageinfo-toolboxlink": "lo info be lo ckupau",
+ "bad_image_list": "lo formate cu jai ve ciksi do'e di'e\n\ni lo po'o liste cmima (to lo linji poi zo'oi * cu pamoi lerfu ke'a) cu se pilno\ni lo pamoi ke linji judrysni cu ei judrysni lo jai se curmi nai fail\ni ro lo se lidne judrysni pe lo bi'unai linji cu nai jai se javni vau je va'i me lo papri poi lo fail sinxa ka'e zvati lo bi'unai linji",
+ "namespacesall": "ro co'e",
+ "monthsall": "ro co'e",
+ "specialpages": "steci ckupau",
+ "feedback-cancel": "naljetnygau"
}
diff --git a/languages/i18n/jut.json b/languages/i18n/jut.json
index 1e4aa6b2..9ebdaa0e 100644
--- a/languages/i18n/jut.json
+++ b/languages/i18n/jut.json
@@ -458,7 +458,7 @@
"watchthispage": "Åvervåg side",
"unwatch": "Fjern åvervågnenge",
"watchlist-details": "Du har $1 {{PLURAL:$1|side|sider}} på din åvervågnengsliste (øn diskusjesider).",
- "wlshowlast": "Ves de seneste $1 têmer $2 dåg $3",
+ "wlshowlast": "Ves de seneste $1 têmer $2 dåg",
"watching": "Åvervåge …",
"unwatching": "Ekke åvervåge …",
"deletepage": "Slet side",
@@ -593,7 +593,6 @@
"metadata-expand": "Ves udvedede data",
"metadata-collapse": "Skjul udvedede data",
"metadata-fields": "Æ følgende felter frå EXIF-metadata i denne MediaWiki-beskedskrevselenger veses på billetbeskrevelsessider; yderligere lileskrevselenger ken veses.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "åle",
"namespacesall": "åle",
"monthsall": "åle",
"watchlisttools-view": "Se ændrede sider i'n åvervågnengsliste",
diff --git a/languages/i18n/jv.json b/languages/i18n/jv.json
index 0f1efd1b..ffd855f9 100644
--- a/languages/i18n/jv.json
+++ b/languages/i18n/jv.json
@@ -14,7 +14,8 @@
"Rex",
"StefanusRA",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Garisen ngisoré pranala:",
@@ -492,7 +493,6 @@
"passwordreset-emailsent-capture": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim, bisa didelok ngisor iki.",
"passwordreset-emailerror-capture": "Layang èlèktronik pangèling tembung sandhi wis digawe, yaiku sing ditampilaké nèng ngisor iki, nanging ora kasil dikirim ing {{GENDER:$2|panganggo}}: $1",
"changeemail": "Ganti alamat layang èlèktronik",
- "changeemail-header": "Ganti alamat layang èlèktronik akun",
"changeemail-text": "Rampungaké pormulir iki kanggo ngganti alamat layang èlèktronik Sampéyan. Sampéyan bakal butuh nglebokaké tembung sandhi Sampéyan kanggo pepesthèn owahan kuwi.",
"changeemail-no-info": "Sampéyan kudu mlebu log kanggo ngaksès kaca iki langsung.",
"changeemail-oldemail": "Alamat layang èlèktronik saiki:",
@@ -500,7 +500,6 @@
"changeemail-none": "(ora ana)",
"changeemail-password": "Sandi {{SITENAME}} panjenengan:",
"changeemail-submit": "Ganti layang èlèktronik",
- "changeemail-cancel": "Batal",
"resettokens": "Reset token",
"resettokens-text": "Anda dapat me-reset Token yang memungkinkan akses ke data pribadi tertentu yang terkait dengan akun Anda di sini.\n\nAnda harus melakukannya jika Anda secara tidak sengaja berbagi dengan seseorang atau jika akun Anda telah disusupi.",
"resettokens-no-tokens": "Ora ana token sing bisa direset.",
@@ -764,7 +763,6 @@
"mergehistory-same-destination": "Jeneng kaca sumber lan tujuan ora kena padha",
"mergehistory-reason": "Alesan:",
"mergelog": "Gabung log",
- "pagemerge-logentry": "nggabungaké [[$1]] menyang [[$2]] (révisi nganti tekan $3)",
"revertmerge": "Batalna panggabungan",
"mergelogpagetext": "Ing ngisor iki kapacak daftar panggabungan sajarah kaca ing kaca liyané.",
"history-title": "Riwayat rèvisi saka \"$1\"",
@@ -811,7 +809,6 @@
"searchrelated": "kagandhèng",
"searchall": "kabèh",
"showingresults": "Ing ngisor iki dituduhaké {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, wiwitané saking #<strong>$2</strong>.",
- "showingresultsheader": "{{PLURAL:$5|Asil '''$1''' saka '''$3'''|Asil '''$1 - $2''' saka '''$3'''}} kanggo '''$4'''",
"search-nonefound": "Ora ana kasil sing cocog karo pitakonan (''query'').",
"powersearch-legend": "Panggolèkan sabanjuré (''advance search'')",
"powersearch-ns": "Panggolèkan ing ruang jeneng:",
@@ -1378,14 +1375,11 @@
"randomincategory": "Sembarang kaca ing kategori",
"randomincategory-invalidcategory": "\"$1\" dudu jeneng kategori sing apik.",
"randomincategory-nopages": "Ora ana kaca ing kategori [[:Category:$1|$1]].",
- "randomincategory-selectcategory": "Dheleng kaca sembarang saking kategori: $1 $2.",
- "randomincategory-selectcategory-submit": "Golèk",
"randomredirect": "Pangalihan sembarang",
"randomredirect-nopages": "Ora ana pangalihan ing bilik jeneng \"$1\".",
"statistics": "Statistik",
"statistics-header-pages": "Statistik kaca",
"statistics-header-edits": "Statistik panyuntingan",
- "statistics-header-views": "Statistik penampilan",
"statistics-header-users": "Statistik panganggo",
"statistics-header-hooks": "Statistik liya",
"statistics-articles": "Kaca-kaca isi",
@@ -1394,13 +1388,9 @@
"statistics-files": "Berkas sing diunggahaké",
"statistics-edits": "Gunggung suntingan wiwit {{SITENAME}} diwiwiti",
"statistics-edits-average": "Rata-rata suntingan saben kaca",
- "statistics-views-total": "Gunggung panampilan kaca",
- "statistics-views-total-desc": "Delokan nèng kaca sing ora ana lan kaca kusus ora kalebu",
- "statistics-views-peredit": "Gunggung/cacahing panampilan saben suntingan",
"statistics-users": "Gunggung [[Special:ListUsers|panganggo kadaftar]]",
"statistics-users-active": "Para panganggo aktif",
"statistics-users-active-desc": "Panganggo sing ngayahi aktivitas jroning {{PLURAL:$1|dia|$1 dina}} pungkasan",
- "statistics-mostpopular": "Kaca sing paling akèh dideleng",
"pageswithprop": "Kaca-kaca mawa ubarampé",
"pageswithprop-legend": "Kaca-kaca mawa ubarampé",
"pageswithprop-text": "Kaca iki njlèntèhaké kaca-kaca sing nganggo ubarampé astamiwa.",
@@ -1441,7 +1431,6 @@
"uncategorizedtemplates": "Cithakan sing ora dikategorisasi",
"unusedcategories": "Kategori sing ora dienggo",
"unusedimages": "Berkas sing ora dienggo",
- "popularpages": "Kaca populèr",
"wantedcategories": "Kategori sing diperlokaké",
"wantedpages": "Kaca sing dipèngini",
"wantedpages-badtitle": "Judhul ora valid ing sèt asil: $1",
@@ -1493,7 +1482,6 @@
"querypage-disabled": "Kaca kusus iki dipatèni kanggo alesan kinerja.",
"booksources": "Sumber buku",
"booksources-search-legend": "Golèk ing sumber buku",
- "booksources-go": "Golèk",
"booksources-text": "Ing ngisor iki kapacak daftar pranala menyang situs liyané sing ngadol buku anyar lan bekas, lan mbok-menawa uga ndarbèni informasi sabanjuré ngenani buku-buku sing lagi panjenengan golèki:",
"booksources-invalid-isbn": "ISBN sing diwènèhaké katonané ora valid; priksa kasalahan penyalinan saka sumber asli.",
"specialloguserlabel": "Panampil:",
@@ -1610,7 +1598,7 @@
"wlheader-enotif": "Notifikasi layang elektronik diaktifaké.",
"wlheader-showupdated": "Kaca-kaca sing wis owah wiwit ditiliki panjenengan kaping pungkasan, dituduhaké mawa '''aksara kandel'''",
"wlnote": "Ngisor iki {{PLURAL:$1|owahan pungkasan|'''$1''' owahan pungkasan}} {{PLURAL:$2|jam|'''$2''' jam}} kapungkur, per $3, $4.",
- "wlshowlast": "Tuduhna $1 jam $2 dina $3 pungkasan",
+ "wlshowlast": "Tuduhna $1 jam $2 dina pungkasan",
"watchlist-options": "Opsi daftar pangawasan",
"watching": "Ngawasi...",
"unwatching": "Ngilangi pangawasan...",
@@ -1658,7 +1646,6 @@
"delete-warning-toobig": "Kaca iki duwé sajarah panyuntingan sing dawa, luwih saka $1 {{PLURAL:$1|révisi|révisi}}.\nMbusak kaca iki bisa ngrusak operasi basis data ing {{SITENAME}};\nkudu ngati-ati.",
"deleting-backlinks-warning": "'''Awas:''' Kaca liyane mungkin ana sing nautake ing kaca sing arep sampeyan busak.",
"rollback": "Mbalèkaké suntingan",
- "rollback_short": "Balèkna",
"rollbacklink": "balèaké",
"rollbacklinkcount": "balèkaké $1 {{PLURAL:$1|suntingan|suntingan}}",
"rollbacklinkcount-morethan": "balèkaké luwih saka $1 {{PLURAL:$1|suntingan|suntingan}}",
@@ -2029,7 +2016,6 @@
"import": "Impor kaca",
"importinterwiki": "Impor transwiki",
"import-interwiki-text": "Pilih sawijining wiki lan irah-irahan kaca sing arep diimpor.\nTanggal révisi lan jeneng panyunting bakal dilestarèkaké.\nKabèh aktivitas impor transwiki bakal dilog ing [[Special:Log/import|log impor]].",
- "import-interwiki-source": "Kaca/sumber wiki:",
"import-interwiki-history": "Tuladen kabèh vèrsi lawas saka kaca iki",
"import-interwiki-templates": "Katutna kabèh cithakan",
"import-interwiki-submit": "Impor",
@@ -2070,18 +2056,14 @@
"import-rootpage-nosubpage": "Ruang nama \"$1\" di halaman turunan tidak mengizinkan subhalaman.",
"importlogpage": "Log impor",
"importlogpagetext": "Impor administratif kaca-kaca mawa sajarah panyuntingan saka wiki liya.",
- "import-logentry-upload": "ngimpor [[$1]] mawa pangunggahan berkas",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|révisi|révisi}}",
- "import-logentry-interwiki": "wis nge-transwiki $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|révisi}} saka $2",
"javascripttest": "Panjajalan JavaScript",
- "javascripttest-title": "Nglakokaké pangujian $1",
"javascripttest-pagetext-noframework": "Kaca iki disadhiyakaké kanggo nglakokaké panjajalan JavaScript.",
"javascripttest-pagetext-unknownframework": "Rangka kerja panjajalan ora dingertèni \"$1\".",
"javascripttest-pagetext-frameworks": "Mangga pilih sawiji saka rangka kerja panjajalan iki: $1",
"javascripttest-pagetext-skins": "Pilih kulit kanggo nglakokaké panjajalan mawa:",
"javascripttest-qunit-intro": "Delok [dhokumèntasi panjajalan $1] nèng mediawiki.org.",
- "javascripttest-qunit-heading": "Rangkéan panjajalan MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "Kaca panganggo panjenengan",
"tooltip-pt-anonuserpage": "Kaca panganggo IP panjenengan",
"tooltip-pt-mytalk": "Kaca wicara panjenengan",
@@ -2181,7 +2163,6 @@
"pageinfo-robot-policy": "Diindeks karo robot",
"pageinfo-robot-index": "Entuk",
"pageinfo-robot-noindex": "Ora entuk",
- "pageinfo-views": "Cacahing delokan",
"pageinfo-watchers": "Cacahé pangawas kaca",
"pageinfo-few-watchers": "Kurang seka $1 {{PLURAL:$1|wong tilik|wong tilik}}",
"pageinfo-redirects-name": "Jumlah pangalihan menyang kaca iki",
@@ -2629,7 +2610,6 @@
"exif-urgency-low": "Cendhèk ($1)",
"exif-urgency-high": "Dhuwur ($1)",
"exif-urgency-other": "Prioritas sing ditetepaké panganggo ($1)",
- "watchlistall2": "kabèh",
"namespacesall": "kabèh",
"monthsall": "kabèh",
"confirmemail": "Konfirmasi alamat e-mail",
@@ -2706,7 +2686,6 @@
"watchlisttools-edit": "Tuduhna lan sunting daftar pangawasan",
"watchlisttools-raw": "Sunting daftar pangawasan mentah",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|wicara]])",
- "unknown_extension_tag": "Tag èkstènsi ora ditepungi \"$1\"",
"duplicate-defaultsort": "Pènget: Kunci pilih asal (''Default sort key'') \"$2\" nggantèkaké kunci pilih asal sadurungé \"$1\".",
"version": "Versi",
"version-extensions": "Èkstènsi sing wis diinstalasi",
@@ -2722,7 +2701,7 @@
"version-parser-function-hooks": "Canthèlan fungsi parser",
"version-hook-name": "Jeneng canthèlan",
"version-hook-subscribedby": "Dilanggani déning",
- "version-version": "(Vèrsi $1)",
+ "version-version": "($1)",
"version-license": "Lisènsi MediaWiki",
"version-ext-license": "Lisènsi",
"version-ext-colheader-name": "Ekstensi",
@@ -2780,6 +2759,7 @@
"specialpages-group-wiki": "Data lan piranti wiki",
"specialpages-group-redirects": "Ngalihaké kaca astamèwa",
"specialpages-group-spam": "Piranit spam",
+ "specialpages-group-developer": "Piranti déveloper",
"blankpage": "Kaca kosong",
"intentionallyblankpage": "Kaca iki disengajakaké kosong",
"external_image_whitelist": " #Umbarna larikan iki apa anané<pre>\n#Pigunakaké fragmèn èksprèsi regular (mung bagéyan ing antara //) ing ngisor\n#Fragmèn ini bakal dicocogaké karo URL saka gambar-gambar èksternal\n#Fragmèn sing cocog bakal ditampilaké minangka gambar, yèn ora mung pranala menyang gambar waé sing ditampilaké\n#Larikan sing diwiwiti nganggo # dianggep minangka komentar\n#Iki ora mbédakaké aksara gedhé/cilik\n#Dèlèhna kabèh fragmèn èksprèsi regular sadhuwuré larikan iki. Umbarna larikan iki apa anané</pre>",
@@ -2863,19 +2843,20 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|ngganti}} kanggotaan grup kanggo $3",
"logentry-rights-autopromote": "$1 otomatis {{GENDER:$2|dipromosikne}} saka $4 nèng $5",
"rightsnone": "(ora ana)",
+ "revdelete-summary": "ringkesan suntingan",
+ "feedback-adding": "Nambahaké lebon saran nèng kaca...",
+ "feedback-bugcheck": "Apik! Pesthèké kuwi dudu sawijining [$1 bug sing dingertèni].",
+ "feedback-bugnew": "Aku wis mriksa. Kandakaké bug anyar",
"feedback-bugornote": "Yèn Sampéyan siap njelasaké masalah tèhnis kanthi rinci mangga [$1 laporaké bug].\nUtawa, Sampéyan bisa nganggo pormulir gampang ngisor. Tanggepan Sampéyan bakal ditambahaké nèng kaca \"[$3 $2]\", bebarengan karo jeneng panganggo Sampéyan lan pramban sing Sampéyan anggo.",
- "feedback-subject": "Jejer:",
- "feedback-message": "Layang:",
"feedback-cancel": "Batal",
- "feedback-submit": "Kirim Lebon Saran",
- "feedback-adding": "Nambahaké lebon saran nèng kaca...",
+ "feedback-close": "Rampung",
"feedback-error1": "Kasalahan: Asil ora dikenal saka API",
"feedback-error2": "Kasalahan: Gagal nyunting",
"feedback-error3": "Kasalahan: Ora ana tanggepan saka API",
+ "feedback-message": "Layang:",
+ "feedback-subject": "Jejer:",
+ "feedback-submit": "Kirim",
"feedback-thanks": "Nuwun! Lebon saran Sampéyan wis dipasang nèng kacané \"[$2 $1]\".",
- "feedback-close": "Rampung",
- "feedback-bugcheck": "Apik! Pesthèké kuwi dudu sawijining [$1 bug sing dingertèni].",
- "feedback-bugnew": "Aku wis mriksa. Kandakaké bug anyar",
"searchsuggest-search": "Golèk",
"searchsuggest-containing": "ngisi...",
"api-error-badaccess-groups": "Sampéyan ora dililakaké ngunggah berkas nèng wiki iki.",
@@ -2954,5 +2935,24 @@
"expand_templates_remove_nowiki": "Brèdèl tag <nowiki> nèng asilé",
"expand_templates_generate_xml": "Tuduhna uwit parser XML",
"expand_templates_generate_rawhtml": "Show raw HTML",
- "expand_templates_preview": "Pratayang"
+ "expand_templates_preview": "Pratayang",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Latin pepak",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simbol",
+ "special-characters-group-greek": "Yunani",
+ "special-characters-group-cyrillic": "Srilik",
+ "special-characters-group-arabic": "Arab",
+ "special-characters-group-arabicextended": "Arab pepak",
+ "special-characters-group-persian": "Persia",
+ "special-characters-group-hebrew": "Ibrani",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarat",
+ "special-characters-group-devanagari": "Dewanagari",
+ "special-characters-group-thai": "Thailand",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/ka.json b/languages/i18n/ka.json
index bc070b37..06e58639 100644
--- a/languages/i18n/ka.json
+++ b/languages/i18n/ka.json
@@ -21,7 +21,8 @@
"ka.wikipedia.org sysops",
"לערי ריינהארט",
"გიორგიმელა",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "ბმულების ხაზგასმა:",
@@ -38,6 +39,7 @@
"tog-watchdefault": "დაამატე ჩემი კონტროლის სიას ჩემს მიერ რედაქტირებული გვერდები და ფაილები",
"tog-watchmoves": "ჩასვი გვერდები და ფაილები, რომლებიც მე გადამაქვს, ჩემს კონტროლის სიაში",
"tog-watchdeletion": "ჩასვი გვერდები და ფაილები, რომლებსაც მე ვშლი, ჩემს კონტროლის სიაში",
+ "tog-watchrollback": "დაამატე ჩემი კონტროლის სიას გვერდები, სადაც მე სწრაფი გაუქმება განვახორციელე",
"tog-minordefault": "ყველა რედაქტირების მონიშვნა, როგორც უმნიშვნელო, უპირობოდ",
"tog-previewontop": "წინასწარი გადახედვის ჩვენება რედაქტირების დაფამდე",
"tog-previewonfirst": "წინასწარი ჩვენება პირველივე რედაქტირებაზე",
@@ -48,7 +50,7 @@
"tog-shownumberswatching": "მაკონტროლებელ მომხმარებელთა რიცხვის ჩვენება",
"tog-oldsig": "არსებული ხელმოწერა:",
"tog-fancysig": "საკუთარი ვიკიფორმატიანი ხელმოწერა (ავტომატური ბმულის გარეშე)",
- "tog-uselivepreview": "გამოიყენეთ სწრაფი წინასწარი გადახედვა (ექსპერიმენტული)",
+ "tog-uselivepreview": "გამოიყენეთ სწრაფი წინასწარი გადახედვა",
"tog-forceeditsummary": "გამაფრთხილე ცარიელი რედაქტირების რეზიუმეს შემთხვევაში",
"tog-watchlisthideown": "დამალე ჩემი რედაქტირება კონტროლის სიაში",
"tog-watchlisthidebots": "დამალე რობოტის რედაქტირება კონტროლის სიაში",
@@ -187,6 +189,7 @@
"permalink": "მუდმივი ბმული",
"print": "ამობეჭდე",
"view": "იხილე",
+ "view-foreign": "იხილეთ $1-ზე",
"edit": "რედაქტირება",
"edit-local": "ლოკალური აღწერის რედაქტირება",
"create": "შექმნა",
@@ -223,6 +226,7 @@
"otherlanguages": "სხვა ენებზე",
"redirectedfrom": "(გადმომისამართდა $1-დან)",
"redirectpagesub": "გადამისამართება გვერდზე",
+ "redirectto": "გადამისამართება:",
"lastmodifiedat": "ეს გვერდი ბოლოს განახლდა $2, $1.",
"viewcount": "ეს გვერდი შემოწმდა {{PLURAL:$1|ერთხელ|$1-ჯერ}}.",
"protectedpage": "დაბლოკილი გვერდი",
@@ -234,15 +238,17 @@
"pool-timeout": "ბლოკირების ლოდინის დრო ამოიწურა",
"pool-queuefull": "მოთხოვნების დამგროვებელი სავსეა",
"pool-errorunknown": "უცნობი შეცდომა",
+ "poolcounter-usage-error": "გამოყენების შეცდომა: $1",
"aboutsite": "{{SITENAME}}-ის შესახებ",
"aboutpage": "Project:შესახებ",
"copyright": "შინაარსი წარმოდგენილია $1 პირობებით (თუ სხვა არ არის მითითებული).",
"copyrightpage": "{{ns:project}}:საავტორო უფლებები",
"currentevents": "მიმდინარე მოვლენები",
"currentevents-url": "Project:მიმდინარე მოვლენები",
- "disclaimers": "პასუხისმგებლობის მოხსნა",
+ "disclaimers": "პასუხისმგებლობის უარყოფა",
"disclaimerpage": "Project:პასუხისმგებლობის უარყოფა",
"edithelp": "დახმარება",
+ "helppage-top-gethelp": "დახმარება",
"mainpage": "მთავარი გვერდი",
"mainpage-description": "მთავარი გვერდი",
"policy-url": "Project:პოლიტიკა",
@@ -348,7 +354,7 @@
"viewsourcetext": "თქვენ შეგიძლიათ ნახოთ ამ გვერდის საწყისი ფაილი და მისი ასლი შექმნათ:",
"viewyourtext": "თქვენ შეგიძლიათ იხილოთ და დააკოპიროთ '''თქვენი რედაქტირებების''' საწყისი ტექსტი ამ გვერდზე:",
"protectedinterface": "ეს გვერდი წარმოადგენს ტექსტურ ინტერფეისს პროგრამული უზრუნველყოფისათვის და დაცულია ვანდალიზმის აღკვეთის მიზნით.",
- "editinginterface": "'''ყურადღება:''' თქვენ რედაქტორობთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. \nამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს ამ ვიკის სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც. \nიმისათვის, რომ დაამატოთ ან შეცვალოთ თარგმანები ყველა ვიკიში გთხოვთ, გამოიყენოთ მედიავიკის ლოკალიზაციის პროექტი [//translatewiki.net/ translatewiki.net].",
+ "editinginterface": "'''ყურადღება:''' თქვენ არედაქტირებთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. \nამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს ამ ვიკის სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც. \nიმისათვის, რომ დაამატოთ ან შეცვალოთ თარგმანები ყველა ვიკიში, გთხოვთ, გამოიყენოთ მედიავიკის ლოკალიზაციის პროექტი [//translatewiki.net/ translatewiki.net].",
"cascadeprotected": "ეს გვერდი რედაქტირებისგან დაცულია, რადგან იგი ჩართულია შემდეგ {{PLURAL:$1|გვერდში, რომლის |გვერდებში, რომელთა}} დასაცავადაც ჩართულია პარამეტრი \"იერარქიული\":\n$2",
"namespaceprotected": "თქვენ არ გაქვთ '''$1''' სახელთა სივრცეში გვერდების რედაქტირების უფლება.",
"customcssprotected": "თქვენ არ გაქვთ ამ CSS გვერდის რედაქტირების უფლება, ვინაიდან ის სხვა მომხმარებლის პირად კონფიგურაციას შეიცავს.",
@@ -402,6 +408,7 @@
"userlogin-resetlink": "ავტორიზაციის მონაცემები დაგავიწყდათ?",
"userlogin-resetpassword-link": "დაგავიწყდათ პაროლი?",
"userlogin-helplink2": "დახმარება:შესვლა",
+ "userlogin-createanother": "სხვა ანგარიშის შექმნა",
"createacct-emailrequired": "ელ. ფოსტის მისამართი",
"createacct-emailoptional": "ელ. ფოსტის მისამართი (არასავალდებულო)",
"createacct-email-ph": "შეიყვანეთ თქვენი ელ. ფოსტის მისამართი",
@@ -517,8 +524,14 @@
"changeemail-none": "(არაფერი)",
"changeemail-password": "თქვენი პაროლი პროექტში {{SITENAME}}:",
"changeemail-submit": "ელ-ფოსტის შეცვლა",
+ "changeemail-throttled": "თქვენ უკვე ძალიან ბევრჯერ სცადეთ შესვლა.\nგთხოვთ, მოიცადოთ $1, სანამ კიდევ სცდიდეთ.",
+ "resettokens": "ტოკენების ჩამოყრა",
+ "resettokens-text": "თქვენ შეგიძლიათ ჩამოყაროთ ტოკენები, რომლებიც შესაძლებლობას იძლევიან შესვლას განსაზღვრულ პირად მონაცემებში, დაკავშირებულს თქვენ ანგარიშთან აქ. \n\nთქვენ ეს აუცილებლად უნდა გააკეთოთ, თუ თქვენ ის შემთხვევით გააცანით სხვას ან თუკი თქვენი ანგარიში იქნა გატეხილი.",
+ "resettokens-legend": "ტოკენების ჩამოყრა",
"resettokens-tokens": "ჟეტონები:",
"resettokens-token-label": "$1 (მიმდინარე მნიშვნელობა: $2)",
+ "resettokens-watchlist-token": "ტოკენი ვებ-არხისთვის (Atom/RSS) [[Special:Watchlist|გვერდების ცვლილებები თქვენი კონტროლის სიაში]]",
+ "resettokens-resetbutton": "არჩეული ტოკენების ჩამოყრა",
"bold_sample": "მუქი ტექსტი",
"bold_tip": "მუქი ტექსტი",
"italic_sample": "კურსივი",
@@ -633,6 +646,7 @@
"edit-conflict": "რედაქციების კონფლიქტი.",
"edit-no-change": "თქვენი შესწორება არ იქნა შენახული, რადგანაც ტექსტის ცვლილება არ მოხდა.",
"postedit-confirmation-created": "გვერდი შეიქმნა.",
+ "postedit-confirmation-restored": "გვერდი აღდგა.",
"postedit-confirmation-saved": "თქვენი რედაქტირება შენახულია.",
"edit-already-exists": "ახალი გვერდის შექმნა არ მოხერხდა.\nის უკვე არსებობს.",
"defaultmessagetext": "შეტყობინების სტანდარტული ტექსტი",
@@ -640,10 +654,15 @@
"invalid-content-data": "დაუშვებელი მონაცემები",
"content-not-allowed-here": "„$1“-ის შინაარსი დაუშვებელია [[$2]] გვერდზე",
"editwarning-warning": "სხვა გვერდზე გადასვლამ შესაძლოა გამოიწვიოს ცვლილებების დაკარგვა.\nთუკი თქვენ დარეგისტრირებული ხართ სისტემაში, მაშინ შეგიძლიათ გამორთოთ ეს გაფრთხილება თქვენი კონფიგურაციის განყოფილებაში „{{int:prefs-editing}}“ .",
+ "editpage-notsupportedcontentformat-title": "კონტენტის ფორმატი შეუსაბამოა.",
"content-model-wikitext": "ვიკიტექსტი",
"content-model-text": "ჩვეულებრივი ტექსტი",
"content-model-javascript": "ჯავასკრიპტი",
"content-model-css": "CSS",
+ "content-json-empty-object": "ცარიელი ობიექტი",
+ "content-json-empty-array": "ცარიელი ტაბლო",
+ "duplicate-args-category": "გვერდები, რომლებიც იყენებენ დუბლიკატ არგუმენტებს თარგების გამოძახებისას",
+ "duplicate-args-category-desc": "გვერდები, რომლებიც იყენებენ დუბლიკატ არგუმენტებს თარგების გამოძახებისას, როგორებიც არის <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ან <code><nowiki>{{foo|bar|1=bar}}</nowiki></code>.",
"expensive-parserfunction-warning": "ყურადღება. მოცემული გვერდი შეიცავს ძალიან ბევრ მძიმე ფუნქციას.\n\nგამოძახებათა რაოდენობა შეზღუდულია $2 დონეზე.ამ შემთხვევაში უნდა გაკეთდეს $1 გამოძახება.",
"expensive-parserfunction-category": "გვერდი ძალიან ბევრი მძიმე ფუნქციის მოთხოვნით",
"post-expand-template-inclusion-warning": "ყურადღება. ჩართული თარგების ზომა ძალიან დიდია. ზოგი თარგი შეიძლება დარჩეს გათიშული.",
@@ -663,6 +682,7 @@
"undo-success": "რედაქტირების გაუქმება შესაძლებელია. გთხოვთ შეამოწმოთ განსხვავება ქვევით, რათა დარწმუნდეთ, რომ ეს ის არის რაც თქვენ გსურთ, შემდეგ კი შეინახეთ ცვლილებები რათა დაასრულოთ რედაქტირების გაუქმება.",
"undo-failure": "რედაქტირების გაუქმება შეუძლებელია კონფლიქტური შუალედური რედაქტირებების გამო.",
"undo-norev": "რედაქტირება ვერ გაუქმდება რადგანაც არ არსებობს ან წაშლილი იქნა.",
+ "undo-nochange": "როგორც ჩანს, რედაქტირება უკვე გაუქმდა.",
"undo-summary": "[[Special:Contributions/$2|$2-ის]]([[User talk:$2|განხილვა]]) ცვლილებების გაუქმება (№$1)",
"cantcreateaccounttitle": "ანგარიშის შექმნა ვერ ხერხდება",
"cantcreateaccount-text": "ამ IP-მისამართიდან აიკრძალა (<b>$1</b>) მომხმარებელ [[User:$3|$3]]-ის მიერ.\n\n$3 -ემ ამგვარი ახსნა : ''$2''",
@@ -774,7 +794,6 @@
"mergehistory-reason": "მიზეზი:",
"mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "გაერთიანებათა ჟურნალი",
- "pagemerge-logentry": "გაერთიანდა [[$1]] და [[$2]] (ვერსიები $3-მდე)",
"revertmerge": "შერწყმის გაუქმება",
"mergelogpagetext": "ქვემოთ წარმოდგენილია ამ გვერდის ბოლო გაერთიანებათა სია",
"history-title": "$1: ცვლილებათა ისტორია",
@@ -823,7 +842,8 @@
"searchrelated": "მიბმული",
"searchall": "ყველა",
"showingresults": "ქვემოთ იხილეთ <b>$1</b>-მდე შედეგი დაწყებული #<b>$2</b>-იდან.",
- "search-nonefound": "მოთხოვნის შესაბამისობა არ არის ნაპოვნი.",
+ "search-showingresults": "{{PLURAL:$4|შედეგი <strong>$1</strong> დან <strong>$3</strong>|შედეგი <strong>$1 - $2</strong> დან <strong>$3</strong>}}",
+ "search-nonefound": "მსგავსი მოთხოვნით გვერდი ვერ მოიძებნა.",
"powersearch-legend": "გაფართოებული ძიება",
"powersearch-ns": "ძიება სახელთა სივრცეებში:",
"powersearch-togglelabel": "მონიშვნა:",
@@ -843,6 +863,11 @@
"prefs-personal": "მომხმარებლის მონაცემები",
"prefs-rc": "ბოლო ცვლილებები",
"prefs-watchlist": "კონტროლის სია",
+ "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-watchlist-edits": "გაფართოებულ კონტროლის სიაში საჩვენებელი ცვლილებების მაქსიმალური რაოდენობა:",
@@ -866,6 +891,7 @@
"recentchangesdays-max": "მაქსიმუმ $1 {{PLURAL:$1|დღე}}",
"recentchangescount": "საჩვენებელი ცვლილებების რაოდენობა:",
"prefs-help-recentchangescount": "შეიცავს ახალ შესწორებებს, გვერდების ისტორიებს, ჟურნალებს.",
+ "prefs-help-watchlist-token2": "ეს არის საიდუმლო გასაღები თქვენი კონტროლის სიის ვებ-არხისთვის. ნებისმიერს, ვინც იცის ის, შეუძლია წაიკითხოს თქვენი კონტროლის სია, ამიტომ არ გაუზიაროთ იგი სხვებს. [[Special:ResetTokens|თქვენ შეგიძლიათ ჩამოყაროთ ის]].",
"savedprefs": "თქვენ მიერ შერჩეული პარამეტრები დამახსოვრებულია.",
"timezonelegend": "სასაათო სარტყელი:",
"localtime": "ადგილობრივი დრო:",
@@ -985,6 +1011,7 @@
"right-move": "გვერდების გადატანა",
"right-move-subpages": "გვერდები გადამისამართდეს ქვეგვერდებთან ერთად",
"right-move-rootuserpages": "მომხმარებელთა ძირი გვერდების გადატანა",
+ "right-move-categorypages": "კატეგორიის გვერდების გადატანა",
"right-movefile": "ფაილების გადატანა",
"right-suppressredirect": "არ იქმნება გადამისამართება ძველი სახელიდან გვერდითვის სახელის შეცვლის შემთხვევაში",
"right-upload": "ფაილების ატვირთვა",
@@ -1049,10 +1076,12 @@
"action-createpage": "გვერდების შექმნა",
"action-createtalk": "განხილვის გვერდების შექმნა",
"action-createaccount": "ამ ანგარიშის შექმნა",
+ "action-history": "ამ გვერდის ისტორიის ნახვა",
"action-minoredit": "მონიშვნა, როგორც მცირე რედაქტირება",
"action-move": "ამ გვერდის გადატანა",
"action-move-subpages": "გვერდისა და მისი ქვეგვერდების გადატანა",
"action-move-rootuserpages": "მომხმარებელთა საბაზისო გვერდების გადატანა",
+ "action-move-categorypages": "კატეგორიის გვერდების გადატანა",
"action-movefile": "ფაილის გადატანა",
"action-upload": "ამ ფაილის ატვირთვა",
"action-reupload": "არსებულ ფაილზე გადაწერა",
@@ -1088,7 +1117,8 @@
"enhancedrc-history": "ისტორია",
"recentchanges": "ბოლო ცვლილებები",
"recentchanges-legend": "ბოლო ცვლილებების პარამეტრები",
- "recentchanges-summary": "უთვალთვალეთ ვიკის ბოლო ცვლილებებს ამ გვერდზე.",
+ "recentchanges-summary": "ამ გვერდზე შეგიძლიათ თვალი ადევნოთ ვიკის ბოლო ცვლილებებს.",
+ "recentchanges-noresult": "მითითებულ პერიოდსა და სახელთა სივრცეში ცვლილებები არ არის.",
"recentchanges-feed-description": "ვიკის უახლესი ცვლილებების მეთვალყურეობა ამ არხში.",
"recentchanges-label-newpage": "ამ რედაქტირებით შეიქმნა ახალი გვერდი",
"recentchanges-label-minor": "ეს არის მცირე შესწორება",
@@ -1308,6 +1338,7 @@
"license": "ლიცენზია:",
"license-header": "ლიცენზია",
"nolicense": "არაფერი არის მონიშნული",
+ "licenses-edit": "ლიცენზიის პარამეტრების რედაქტირება",
"license-nopreview": "(წინასწარ გადახედვა არ არის ხელმისაწვდომი)",
"upload_source_url": "(თქვენ აირჩიეთ სწორი, საზოგადოდ ხელმისაწვდომი URL)",
"upload_source_file": "(თქვენ აირჩიეთ ფაილი თქვენი კომპიუტერიდან)",
@@ -1398,12 +1429,14 @@
"randompage-nopages": "{{PLURAL:$2|სახელთა შემდეგი სივრცე|სახელთა შემდეგ სივრცეში}} \"$1\" არ არის გვერდები.",
"randomincategory": "კატეგორიის შემთხვევითი გვერდი",
"randomincategory-invalidcategory": "კატეგორია „$1“ არ არსებობს.",
+ "randomincategory-nopages": "კატეგორიაში [[:კატეგორია:$1|$1]] გვერდები არაა.",
+ "randomincategory-category": "კატეგორია:",
+ "randomincategory-legend": "შემთხვევითი გვერდი კატეგორიაში",
"randomredirect": "ნებისმიერი გადამისამართება",
"randomredirect-nopages": "სახელთა სივრცეში „$1“ არ არის გადამისამართებები.",
"statistics": "სტატისტიკა",
"statistics-header-pages": "გვერდების სტატისტიკა",
"statistics-header-edits": "რედაქციების სტატისტიკა",
- "statistics-header-views": "გვერდის მონახულების სტატისტიკა",
"statistics-header-users": "მომხმარებლის სტატისტიკა",
"statistics-header-hooks": "სხვა სტატისტიკა",
"statistics-articles": "სტატია",
@@ -1412,13 +1445,9 @@
"statistics-files": "ატვირთული ფაილები",
"statistics-edits": "გვერდის შესწორებები მას შემდეგ რაც შეიქმნა პროექტი {{SITENAME}}",
"statistics-edits-average": "რედაქტირების საერთო რაოდენობა გვერდზე",
- "statistics-views-total": "სულ ხილვა",
- "statistics-views-total-desc": "სათვალავში არ მიიღება არარსებული და სამუშაო გვერდების გადახედვა",
- "statistics-views-peredit": "შესწორებათა ხილვა",
"statistics-users": "დარეგისტრირებული [[Special:ListUsers|მომხმარებლები]]",
"statistics-users-active": "აქტიური მომხმარებლები",
"statistics-users-active-desc": "მომხმარებლები, რომლებმაც განახორციელეს ქმედება {{PLURAL:$1|ბოლო $1 დღის|ბოლო $1 დღის}} განმავლობაში",
- "statistics-mostpopular": "ყველზე ხშირად ხილვადი გვერდები",
"pageswithprop": "გვერდები განსაზღვრული თვისებით",
"pageswithprop-legend": "გვერდები განსაზღვრული თვისებით",
"pageswithprop-text": "აქ მოცემულია გვერდები, რომელთაც ხელით განესაზღვრათ გარკვეული თვისებები.",
@@ -1426,8 +1455,8 @@
"pageswithprop-submit": "მიდი",
"doubleredirects": "ორმაგი გადამისამართება",
"doubleredirectstext": "ამ გვერდზე ჩამოთვლილია გვერდები, რომლებიც გადამისამართებულია სხვა გადამისამართების გვერდებზე.\nყოველი მწკრივი შეიცავს ბმულებს პირველ და მეორე გადამისამართებაზე, აგრეთვე მეორე გადამისამართების ტექსტის პირველ სტრიქონს, რომელშიც ჩვეულებრივ მითითებულია რეალური „სამიზნე“ გვერდის სათაური. საჭიროა, რომ პირველი გადამისამართებაც უთითებდეს ამ გვერდზე.\n<del>გადახაზული</del> მონაცემები უკვე გამართულია.",
- "double-redirect-fixed-move": "[[$1]] გადატანილ იქნა.\nამჟამად ის გადამისამართებულია [[$2]]-ზე.",
- "double-redirect-fixed-maintenance": "ორმაგი გადამისამართების გასწორება [[$1]]დან [[$2]]ზე.",
+ "double-redirect-fixed-move": "[[$1]] გადატანილ იქნა.\nიგი განახლდა და ამჟამად გადამისამართებულია [[$2]]-ზე.",
+ "double-redirect-fixed-maintenance": "ორმაგი გადამისამართების ავტომატური გასწორება [[$1]]დან [[$2]]ზე.",
"double-redirect-fixer": "გადამისამართება შემსწორებელი",
"brokenredirects": "გაწყვეტილი გადამისამართება",
"brokenredirectstext": "შემდეგი გადამისამართებები გაკეთებულია არარსებულ გვერდებზე:",
@@ -1457,7 +1486,6 @@
"uncategorizedtemplates": "თარგები კატეგორიების გარეშე",
"unusedcategories": "გამოუყენებელი კატეგორიები",
"unusedimages": "გამოუყენებელი ფაილები",
- "popularpages": "პოპულარული გვერდები",
"wantedcategories": "მოთხოვნილი კატეგორიები",
"wantedpages": "მოთხოვნილი გვერდები",
"wantedpages-badtitle": "შეცდომითი სათაური მთხოვნაში $1.",
@@ -1514,10 +1542,12 @@
"pager-older-n": "{{PLURAL:$1|უფრო ძველი 1|უფრო ძველი $1}}",
"suppress": "დამალვა",
"querypage-disabled": "ეს სპეცგვერდი გამორთულია წარმადობის გასაზრდელად.",
+ "apihelp": "API დახმარება",
+ "apihelp-no-such-module": "მოდული „$1“ ვერ მოიძებნა.",
"booksources": "წიგნის წყაროები",
"booksources-search-legend": "წიგნის წყაროს ძებნა",
"booksources-isbn": "ISBN:",
- "booksources-go": "გადასვლა",
+ "booksources-search": "ძიება",
"booksources-text": "ქვემოთ არის ვებ გვერდების ბმულების სია სადაც იყიდება ახალი და ნახმარი წიგნები, და შესაძლოა შეიცავდნენ დამატებით ინფორმაციას წიგნების შესახებ, რომლებსაც ეძებთ:",
"booksources-invalid-isbn": "თქვენს მიერ მითითებული ISBN, შეცდომას შეიცავს. შეამოწმეთ, თუ თავდაპირველი წყარო სწორადაა აკრეფილი.",
"specialloguserlabel": "შემსრულებელი:",
@@ -1586,6 +1616,7 @@
"listgrouprights-removegroup-self": "შეუძლია წაშალოს {{PLURAL:$2|ჯგუფი|ჯგუფები}} თავისი ანგარიშიდან: $1",
"listgrouprights-addgroup-self-all": "შეუძლია ყელა ჯგუფია ჩამატება ანგარიშს.",
"listgrouprights-removegroup-self-all": "შეუძლია თავისი ანგარიშის ყველა ჯგუფის წაშლა.",
+ "listgrouprights-namespaceprotection-header": "სახელთა სივრცის შეზღუდვები",
"listgrouprights-namespaceprotection-namespace": "სახელთა სივრცე",
"trackingcategories-name": "შეტყობინების სახელი",
"trackingcategories-nodesc": "აღწერა არ არის.",
@@ -1643,7 +1674,7 @@
"wlheader-enotif": "ელ.ფოსტით შეტყობინება ჩართულია.",
"wlheader-showupdated": "თქვენი ბოლო ვიზიტის შემდეგ შეცვლილი გვერდები, აღნიშნულია '''მუქად'''.",
"wlnote": "ქვემოთ {{PLURAL:$1|ნაჩვენებია ბოლო ცვლილება|ნაჩვენებია ბოლო '''$1''' ცვლილება}} უკანასკნელი {{PLURAL:$2|საათის|'''$2''' საათის}} მანძილზე, $3, $4 მდგომარეობით.",
- "wlshowlast": "აჩვენე ბოლო $1 საათის $2 დღის $3",
+ "wlshowlast": "აჩვენე ბოლო $1 საათის $2 დღის",
"watchlist-options": "კონტროლის სიის პარამეტრები",
"watching": "კონტროლებადი...",
"unwatching": "არაკონტროლირებადი...",
@@ -1691,7 +1722,6 @@
"delete-warning-toobig": "ამ გვერდს ძალიან გრძელი ისტორია გააჩნია, $1 {{PLURAL:$1|ვერსიაზე|ვერსიიებზე|ვერსიებზე}} მეტი.\nმისმა წაშლამ შესაძლოა გამოიწვიოს საიტის მონაცემთა ბაზის {{SITENAME}} არაკორექტული მუშაობა;\nიმოქმედეთ სიფრთხილით.",
"deleting-backlinks-warning": "'''გაფრთხილება:''' რამდენიმე სხვა გვერდი დაკავშირებულია ამ წასაშლელ გვერდთან.",
"rollback": "ცვლილებების გაუქმება",
- "rollback_short": "სწრაფი გაუქმება",
"rollbacklink": "სწრაფი გაუქმება",
"rollbacklinkcount": "$1 {{PLURAL:$1|ცვლილების|ცვლილების}} გაუქმება",
"rollbacklinkcount-morethan": "$1-ზე მეტი {{PLURAL:$1|ცვლილების|ცვლილების}} გაუქმება",
@@ -1701,7 +1731,7 @@
"editcomment": "რედაქტირება განმარტებული იყო როგორც: \"''$1''\".",
"revertpage": "[[Special:Contributions/$2|$2]]-ის რედაქტირება გაუქმდა; აღდგა ბოლოს [[User:$1|$1]]-ის მიერ რედაქტირებული ვერსია",
"revertpage-nouser": "მომხმარებლის (მომხმარებლის სახელი დამალულია) ცვლილებები დაბრუნებულია ვერსიაზე {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "გაუქმდა შესწორება $1; დაბრუნება ვერსიაზე $2.",
+ "rollback-success": "გაუქმდა რედაქტირება $1; დაბრუნება ვერსიაზე $2.",
"sessionfailure-title": "სეანსის შეცდომა",
"sessionfailure": "ჩანს, რომ პრობლემაა თქვენი რეგისტრაციის სესიისათვის;\nეს მოქმედება შეჩერდა თქვენი სესიაში შემოჭრის თავიდან ასაცილებლად.\nგთხოვთ, დააწკაპუნოთ ღილაკს \"უკან\" და თავიდან ჩართოთ გვერდი, რომლიდანაც შემოხვედით და სცადოთ განმეორებით.",
"protectlogpage": "დაცვის ისტორია",
@@ -1742,6 +1772,7 @@
"protect-othertime": "სხვა დრო:",
"protect-othertime-op": "სხვა დრო",
"protect-existing-expiry": "დასრულების დრო: $2, $3",
+ "protect-existing-expiry-infinity": "დასრულების დრო: განუსაზღვრელი",
"protect-otherreason": "სხვა/დამატებითი მიზეზი:",
"protect-otherreason-op": "სხვა/დამატებითი მიზეზი",
"protect-dropdown": "* დაცვის ტიპიური მიზეზები\n** გადაჭარბებული ვანდალიზმი\n** გადაჭარბებული სპამი\n** რედაქტირებათა ომი\n** მაღალი რისკის გვერდი",
@@ -1973,6 +2004,7 @@
"movepagetalktext": "დაკავშირებული განხილვის გვერდი ავტომატურად გადავა მასთან ერთად, '''გარდა იმ შემთხვევისა, თუ''':\n*განხილვის გვერდი ახალი სათაურით და გარკვეული შინაარსით უკვე არსებობს, ან\n*თქვენ მოხსნით ნიშნულს ქვევით დაფაზე.\n\nამ შემთხვევებში, თქვენ თავად მოგიწევთ ამ გვერდის გადატანა, სურვილისამებრ.",
"movearticle": "გვერდის გადატანა",
"moveuserpage-warning": "'''გაფრთხილება:''' თქვენ გადაგაქვთ მომხმარებლის გვერდი. გთხოვთ გაითვალისწინეთ, რომ გადატანა შესრულდება, მომხმარებლის სახელის გადარქმევა კი ''არა''.",
+ "movecategorypage-warning": "<strong>გაფრთხილება:</strong> თქვენ გადაგაქვთ კატეგორიის გვერდი. გაითვალისწინეთ, რომ გვერდი გადავა, თუმცა მასში შემავალი გვერდები <em>დარჩება</em> ძველ კატეგორიაში. საჭირო იქნება კატეგორიის ჩასწორება სტატიებში ინდივიდუალურად.",
"movenologintext": "თქვენ უნდა [[Special:UserLogin|წარუდგინოთ თავი]],\nსისტემას რათა გადაიტანოთ გვერდები.",
"movenotallowed": "თქვენ არ გაქვთ გვერდების გადატანის უფლება.",
"movenotallowedfile": "თქვენ ვერ გადაიტანთ ფაილებს.",
@@ -2107,18 +2139,15 @@
"import-rootpage-nosubpage": "სახელტა სივრცეში მითითებულ ძირეულ გვერდში „$1“ ქვეგვერდები დაუშვებელია.",
"importlogpage": "იმპორტის ჟურნალი",
"importlogpagetext": "ადმინისტრატორთა მიერ გვერდების იმპორტირება ცვლილებების ჩათვლით სხვა ვიკიდან.",
- "import-logentry-upload": "„[[$1]]“ — ფაილის იმპორტი",
"import-logentry-upload-detail": "$1 ცვლილება",
- "import-logentry-interwiki": "„$1“ — ტრანსვიკი იმპორტი",
"import-logentry-interwiki-detail": "$1 ცვლილება $2-დან",
"javascripttest": "JavaScript-ის ტესტირება",
- "javascripttest-title": "მიმდინარეობს $1-ის ტესტირება",
"javascripttest-pagetext-noframework": "ეს გვერდი დარეგისტრირებულია JavaScript-ის ტესტების გასაშვებად.",
"javascripttest-pagetext-unknownframework": "„$1-ის“ ტესტირების უცნობი გარემო.",
+ "javascripttest-pagetext-unknownaction": "უცნობი ქმედება „$1“.",
"javascripttest-pagetext-frameworks": "გთხოვთ, აირჩიეთ ტესტირების ერთ-ერთი შემდეგი გარემო: $1",
"javascripttest-pagetext-skins": "ტესტების გასაშვებად აირჩიეთ გაფორმების თემა:",
"javascripttest-qunit-intro": "იხილეთ [$1 ტესტირების დოკუმენტები] mediawiki.org-ზე.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit-ის ტესტების კრებული",
"tooltip-pt-userpage": "თქვენი მომხმარებლის გვერდი",
"tooltip-pt-anonuserpage": "ჩემი IP-ის მქონე მომხმარებლის გვერდი",
"tooltip-pt-mytalk": "თქვენი განხილვის გვერდი",
@@ -2225,7 +2254,6 @@
"pageinfo-robot-policy": "ინდექსაცია საძიებო რობოტებით",
"pageinfo-robot-index": "დაშვებულია",
"pageinfo-robot-noindex": "არ არის დაშვებული",
- "pageinfo-views": "ხილვების რაოდენობა",
"pageinfo-watchers": "გვერდის დამკვირვებელთა რაოდენობა",
"pageinfo-few-watchers": "სულ მცირე $1 {{PLURAL:$1|დამკვირვებელი|დამკვირვებელი}}",
"pageinfo-redirects-name": "გადამისამართებების რაოდენობა ამ გვერდზე",
@@ -2513,7 +2541,7 @@
"exif-attributionurl": "ამ სამუშაოს გამოყენებისას, გთხოვთ, დატოვეთ ბმული",
"exif-preferredattributionname": "ამ სამუშაოს გამოყენებისას, გთხოვთ, მიუთითეთ",
"exif-pngfilecomment": "PNG ფაილის კომენტარი",
- "exif-disclaimer": "პასუხისმგებლობის მოხსნა",
+ "exif-disclaimer": "პასუხისმგებლობის უარყოფა",
"exif-contentwarning": "გაფრთხილება შინაარსის შესახებ",
"exif-giffilecomment": "GIF ფაილის კომენტარი",
"exif-intellectualgenre": "ობიექტის ტიპი",
@@ -2701,7 +2729,6 @@
"exif-urgency-low": "დაბალი ($1)",
"exif-urgency-high": "მაღალი ($1)",
"exif-urgency-other": "მომხმარებლის მიერ განსაზღვრული პრიორიტეტი ($1)",
- "watchlistall2": "ყველა",
"namespacesall": "ყველა",
"monthsall": "ყველა",
"confirmemail": "ელ. ფოსტის მისამართის დადასტურება",
@@ -2813,7 +2840,6 @@
"watchlisttools-raw": "კონტროლის სიის რედაქტირება ტექსტის ფორმატში",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|განხილვა]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "უცნობი დამატების «$1» თეგი",
"duplicate-defaultsort": "'''ყურადღება.'''სორტირების გასაღებს «$2»-ს გააჭრის წინა გასაღებს «$1»-ს.",
"version": "ვერსია",
"version-extensions": "დაყენებული გაფართოებები",
@@ -2830,7 +2856,7 @@
"version-parser-function-hooks": "სინტაქსური ანალიზატორის ჰუკი",
"version-hook-name": "ჰუკის სახელი",
"version-hook-subscribedby": "ჩაწერილია",
- "version-version": "(ვერსია $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[სახელის გარეშე]",
"version-svn-revision": "(r$2)",
"version-license": "მედიავიკის ლიცენზია",
@@ -2854,6 +2880,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath გზა სტატიისაკენ]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath გზა სკრიპტისაკენ]",
+ "version-libraries": "დაინსტალირებული ბიბლიოთეკები",
+ "version-libraries-library": "ბიბლიოთეკა",
+ "version-libraries-version": "ვერსია",
"redirect": "გადამისამართება ფაილიდან, მომხმარებლიდან, გვერდიდან ან ვერსიის იდენტიფიკატორიდან",
"redirect-legend": "გადამისამართება ფაილზე ან გვერდზე",
"redirect-submit": "მიდი",
@@ -2888,6 +2917,7 @@
"specialpages-group-wiki": "მონაცემები და ინსტრუმენტები",
"specialpages-group-redirects": "სპეცგვერდების გადამისამართება",
"specialpages-group-spam": "ინსტრუმენტები სპამის წინააღმდეგ",
+ "specialpages-group-developer": "შემქმნელის ხელსაწყოები",
"blankpage": "ცარიელი გვერდი",
"intentionallyblankpage": "ეს გვერდი სპეციალურად დარჩა ცარიელი",
"external_image_whitelist": " #დატოვეთ ეს ხაზი ისე, როგორც არის <pre>\n#განათვსეთ აქ რეგულარულ გამოთქმათა ფრაგმენტები (ისინი, რომლებიც // შორის იმყოფება)\n#ისინი იქნებიან შეფარდებულები გარე გამოსახულებათა URL-თან.\n#მოგერგებული იქნება ნაჩვენები გამოსახულებათა სახით, ხოლო სხვები ბმულების სახით.\n#ხაზები, რომლებიც იწყება #, ითვლება კომენტარად.\n#ხაზები გრძნობადები არიან რეგისტრისადმი.</pre>",
@@ -2899,12 +2929,30 @@
"tags-tag": "ტეგის სახელი",
"tags-display-header": "რედაქტირებების სიაში ცვლილებების წარმოდგენა",
"tags-description-header": "მნიშვნელობის სრული აღწერა",
+ "tags-source-header": "წყარო",
"tags-active-header": "აქტიურია?",
"tags-hitcount-header": "აღნიშნული ცვლილებები",
+ "tags-actions-header": "ქმედებები",
"tags-active-yes": "დიახ",
"tags-active-no": "არა",
+ "tags-source-none": "აღარ გამოიყენება",
"tags-edit": "რედაქტირება",
+ "tags-delete": "წაშლა",
+ "tags-activate": "გააქტიურება",
+ "tags-deactivate": "დეაქტივაცია",
"tags-hitcount": "$1 ცვლილება",
+ "tags-create-heading": "ახალი ტეგის შექმნა",
+ "tags-create-tag-name": "ტეგის სახელი:",
+ "tags-create-reason": "მიზეზი",
+ "tags-create-submit": "შექმნა",
+ "tags-delete-title": "ტეგის წაშლა",
+ "tags-delete-reason": "მიზეზი:",
+ "tags-activate-title": "ტეგის გააქტიურება",
+ "tags-activate-reason": "მიზეზი:",
+ "tags-activate-submit": "გააქტიურება",
+ "tags-deactivate-title": "ტეგის დეაქტივაცია",
+ "tags-deactivate-reason": "მიზეზი:",
+ "tags-deactivate-submit": "დეაქტივაცია",
"comparepages": "გვერდების შედარება",
"compare-page1": "1 გვერდი",
"compare-page2": "2 გვერდი",
@@ -2971,20 +3019,24 @@
"logentry-rights-rights": "მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} ჯგუფის წევრობა $3-თვის $4-დან $5-ზე",
"logentry-rights-rights-legacy": "მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} ჯგუფის წევრობა $3-თვის",
"logentry-rights-autopromote": "მომხმარებელი $1 ავტომატურად იქნა {{GENDER:$2|გადაყვანილი}} $4–დან $5–ში",
+ "logentry-upload-upload": "მომხმარებელმა $1 {{GENDER:$2|ატვირთა}} $3",
+ "logentry-upload-overwrite": "მომხმარებელმა $1 {{GENDER:$2|ატვირთა}} $3-ის ახალი ვერსია",
+ "logentry-upload-revert": "მომხმარებელმა $1 {{GENDER:$2|ატვირთა}} $3",
"rightsnone": "(არცერთი)",
+ "revdelete-summary": "ცვლილებების აღწერა",
+ "feedback-adding": "თქვენი შეფასების შენახვა...",
+ "feedback-bugcheck": "კარგია! გთხოვთ, კიდევ ერთხელ შეამოწმეთ, ხომ არ არის აქ რომელიმე უკვე [$1 ნაცნობი შეცდომა].",
+ "feedback-bugnew": "მე შევამოწმე. ახალი შეცდომის შეტყობინება",
"feedback-bugornote": "თუ თქვენ მზად ხართ დეტალურად აღწეროთ ტექნიკური პრობლემა, გთხოვთ, [$1 შეგვატყობინეთ შეცდომის შესახებ].\nწინააღმდეგ შემთხვევაში თქვენ შეგიძლიათ ისარგებლოთ ამ მარტივი ფორმით. თქვენი კომენტარი დაემატება „[$3 $2]“ გვერდზე თქვენი მომხმარებლის სახელთან და გამოყენებულ ბრაუზერთან ერთად.",
- "feedback-subject": "თემა:",
- "feedback-message": "შეტყობინება:",
"feedback-cancel": "გაუქმება",
- "feedback-submit": "შეფასების გაგზავნა",
- "feedback-adding": "თქვენი შეფასების შენახვა...",
+ "feedback-close": "გაკეთდა",
"feedback-error1": "შეცდომა. API-ს მოულოდნელი რეზულტატი.",
"feedback-error2": "შეცდომა: რედაქტირება ვერ განხორციელდა",
"feedback-error3": "შეცდომა. არ არის API-ს პასუხი .",
+ "feedback-message": "შეტყობინება:",
+ "feedback-subject": "თემა:",
+ "feedback-submit": "მიღება",
"feedback-thanks": "გმადლობთ! თქვენი შეფასება განთავსებულია „[$2 $1]“ გვერდზე.",
- "feedback-close": "გაკეთდა",
- "feedback-bugcheck": "კარგია! გთხოვთ, კიდევ ერთხელ შეამოწმეთ, ხომ არ არის აქ რომელიმე უკვე [$1 ნაცნობი შეცდომა].",
- "feedback-bugnew": "მე შევამოწმე. ახალი შეცდომის შეტყობინება",
"searchsuggest-search": "ძიება",
"searchsuggest-containing": "შეიცავს...",
"api-error-badaccess-groups": "თქვენ არ გაქვთ ამ ვიკიში ფაილების ატვირთვის უფლება.",
@@ -3068,5 +3120,28 @@
"log-name-pagelang": "ენის ცვლილებების ჟურნალი",
"log-description-pagelang": "ეს არის გვერდის ენის ცვლილებების ჟურნალი",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ჩართულია)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''გამორთულია''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''გამორთულია''')",
+ "headline-anchor-title": "ბმული ამ სექციაზე",
+ "special-characters-group-latin": "ლათინური",
+ "special-characters-group-latinextended": "ლათინური გაფართოება",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "სიმბოლოები",
+ "special-characters-group-greek": "ბერძნული",
+ "special-characters-group-cyrillic": "კირილიცა",
+ "special-characters-group-arabic": "არაბული",
+ "special-characters-group-arabicextended": "არაბული გაფართოება",
+ "special-characters-group-persian": "სპარსული",
+ "special-characters-group-hebrew": "ებრაული",
+ "special-characters-group-bangla": "ბენგალური",
+ "special-characters-group-tamil": "ტამილური",
+ "special-characters-group-telugu": "ტელუგუ",
+ "special-characters-group-sinhala": "სინგალური",
+ "special-characters-group-gujarati": "გუჯარათი",
+ "special-characters-group-devanagari": "დევანაგარი",
+ "special-characters-group-thai": "ტაილანდური",
+ "special-characters-group-lao": "ლაოსური",
+ "special-characters-group-khmer": "ქჰმერული",
+ "special-characters-title-endash": "ტირე",
+ "special-characters-title-emdash": "გრძელი ტირე",
+ "special-characters-title-minus": "მინუსის ნიშანი"
}
diff --git a/languages/i18n/kaa.json b/languages/i18n/kaa.json
index f5237ee5..805de26b 100644
--- a/languages/i18n/kaa.json
+++ b/languages/i18n/kaa.json
@@ -14,25 +14,25 @@
"tog-underline": "Siltewdin' astın sız:",
"tog-hideminor": "Aqırg'ı o'zgerislerden kishilerin jasır",
"tog-extendwatchlist": "Baqlaw dizimin barlıq o'zgerislerdi ko'rsetetug'ın qılıp ken'eyt (tek aqırg'ıların emes)",
- "tog-usenewrc": "Ken'eytilgen jaqındag'ı o'zgerislerdi qollan (JavaScript bolıwın talap etedi)",
+ "tog-usenewrc": "Jaqındag'ı o'zgerisler ha'm baqlaw dizimindegi o'zgerislerdi birlestiriw",
"tog-numberheadings": "Atamalardı avtomat nomerle",
- "tog-showtoolbar": "O'zgertiw a'sbapların ko'rset (JavaScript)",
- "tog-editondblclick": "Eki ma'rte basıp o'zgertiw (JavaScript)",
- "tog-editsectiononrightclick": "Bo'lim atamasın on' jaqqa basıp o'zgertiwdi qos (JavaScript)",
- "tog-watchcreations": "Men jaratqan betlerdi baqlaw dizimime qos",
- "tog-watchdefault": "Men o'zgeris kiritken betlerdi baqlaw dizimime qos",
- "tog-watchmoves": "Men ko'shirgen betlerdi baqlaw dizimime qos",
- "tog-watchdeletion": "Men o'shirgen betlerdi baqlaw dizimime qos",
+ "tog-showtoolbar": "O'zgertiw a'sbapların ko'rset",
+ "tog-editondblclick": "Betlerdi eki ma'rte basıp o'zgertiw",
+ "tog-editsectiononrightclick": "Bo'lim atamasın on' jaqqa basıp o'zgertiwdi qos",
+ "tog-watchcreations": "Men jaratqan betlerdi ha'm ju'klegen fayllardı baqlaw dizimime qos",
+ "tog-watchdefault": "Men o'zgeris kiritken betler ha'm fayllardı baqlaw dizimime qos",
+ "tog-watchmoves": "Men ko'shirgen betler ha'm fayllardı baqlaw dizimime qos",
+ "tog-watchdeletion": "Men o'shirgen betler ha'm fayllardı baqlaw dizimime qos",
"tog-minordefault": "Defolt boyınsha barlıq o'zgerislerdi kishi dep esaplaw",
"tog-previewontop": "O'zgertiw maydanınan aldın ko'rip shıg'ıw maydanın ko'rset",
"tog-previewonfirst": "Birinshi o'zgertiwdi ko'rip shıq",
- "tog-enotifwatchlistpages": "Baqlaw dizimimdegi bet o'zgertilgende mag'an xat jiber",
+ "tog-enotifwatchlistpages": "Baqlaw dizimimdegi bet yamasa fayl o'zgertilgende mag'an xat jiber",
"tog-enotifusertalkpages": "Menin' sa'wbetim o'zgertilgende mag'an xat jiber",
- "tog-enotifminoredits": "Kishi o'zgerisler haqqında da mag'an xat jiber",
+ "tog-enotifminoredits": "Bet ha'm fayllardag'ı kishi o'zgerisler haqqında da mag'an xat jiber",
"tog-enotifrevealaddr": "Eskertiw xatlarında e-mail adresimdi ko'rset",
"tog-shownumberswatching": "Baqlag'an paydalanıwshılar sanın ko'rset",
"tog-fancysig": "İmzalardı wikitext dep qabıl etiw (avtomat siltewsiz)",
- "tog-uselivepreview": "Janlı ko'rip shıg'ıwdı qollan (JavaScript) (Sınawda)",
+ "tog-uselivepreview": "Janlı ko'rip shıg'ıwdı qollan (Sınawda)",
"tog-forceeditsummary": "O'zgertiw juwmag'ı bos qalg'anda mag'an eskert",
"tog-watchlisthideown": "Baqlaw dizimindegi menin' o'zgertiwlerimdi jasır",
"tog-watchlisthidebots": "Baqlaw dizimindegi bot o'zgertiwlerin jasır",
@@ -115,8 +115,8 @@
"newwindow": "(jan'a aynada)",
"cancel": "Biykar etiw",
"moredotdotdot": "Ja'ne...",
- "mypage": "Menin' betim",
- "mytalk": "Menin' sa'wbetim",
+ "mypage": "Bet",
+ "mytalk": "Sa'wbet",
"anontalk": "Usı IP sa'wbeti",
"navigation": "Navigatsiya",
"and": "&#32;ha'm",
@@ -184,7 +184,7 @@
"jumptosearch": "izlew",
"aboutsite": "{{SITENAME}} haqqında",
"aboutpage": "Project:Haqqında",
- "copyright": "Mag'lıwmat $1 boyınsha alıng'an.",
+ "copyright": "Mag'lıwmat $1 litsenziyası boyınsha alıng'an (eger basqa sha'rtler ko'rsetilmese).",
"copyrightpage": "{{ns:project}}:Avtorlıq huquqları",
"currentevents": "Ha'zirgi ha'diyseler",
"currentevents-url": "Project:Ha'zirgi ha'diyseler",
@@ -272,14 +272,14 @@
"viewsource": "Deregin ko'riw",
"actionthrottled": "Ha'reket toqtatıldı",
"actionthrottledtext": "Spamg'a qarsı gu'res esabında, bunday ha'reketti qısqa waqıtta dım ko'p ma'rte bejeriwin'iz sheklenedi, ha'mde siz usı limitten o'tip ketkensiz.\nBirneshe minuttan keyin qaytadan ha'reket qılıp ko'rin'.",
- "protectedpagetext": "Bul bet o'zgertiwdin' aldın alıw ushın qulplang'an.",
+ "protectedpagetext": "Bul bet o'zgertiwdin' ha'm basqa ha'reketlerdin' aldın alıw ushın qulplang'an.",
"viewsourcetext": "Bul bettin' deregin qarawın'ızg'a ha'mde ko'shirip alıwın'ızg'a boladı:",
- "editinginterface": "'''Esletpe:''' Siz ishinde MediaWiki sistema xabarı bar bolg'an betti o'zgertip atırsız.\nBul bettin' o'zgeriwi basqa paydalanıwshılardın' sırtqı interfeisine ta'sir etedi.\nAudarıw ushın, MediaWiki programmasın jersindiriw [//translatewiki.net/wiki/Main_Page?setlang=kaa translatewiki.net proyektisin] qarap shıg'ın'ız.",
+ "editinginterface": "'''Esletpe:''' Siz ishinde MediaWiki sistema xabarı bar bolg'an betti o'zgertip atırsız.\nBul bettin' o'zgeriwi basqa paydalanıwshılardın' sırtqı interfeysine ta'sir etedi.\nBul xabardın' awdarmasın qosıw yamasa o'zgertiw ushın, MediaWiki programmasının' lokallastırıw [//translatewiki.net/wiki/Main_Page?setlang=kaa translatewiki.net proektinen] paydalanın'.",
"namespaceprotected": "'''$1''' isimler ko'pligindegi betlerdi o'zgertiwge ruxsatın'ız joq.",
"ns-specialprotected": "\"{{ns:special}}:\" isimler ko'pligindegi betler o'zgertilmeydi",
"titleprotected": "Bul atamanı jaratıw [[User:$1|$1]] ta'repinen qorg'alg'an.\nKeltirilgen sebep: ''$2''.",
"virus-unknownscanner": "belgisiz antivirus:",
- "logouttext": "'''Siz endi sayttan shıqtın'ız.'''\n\nSiz {{SITENAME}} saytınan anonim halda paydalanıwın'ız mu'mkin.\nYamasa siz ja'ne ha'zirgi yaki basqa paydalanıwshı atı menen <span class='plainlinks'>[$1 qaytadan sistemag'a kiriwin'izge]</span> boladı.\nSonı este saqlan', ayrım betler sizin' brauzerin'izdin' keshi tazalanbag'anlıg'ı sebebli sistemada kirgenin'izdey ko'riniste dawam ettire beriwi mu'mkin.",
+ "logouttext": "'''Siz endi sayttan shıqtın'ız.'''\n\nSonı este saqlan', ayrım betler sizin' brauzerin'izdin' keshi tazalanbag'anlıg'ı sebebli sistemada kirgenin'izdey ko'riniste dawam ettire beriwi mu'mkin.",
"yourname": "Paydalanıwshı atı:",
"yourpassword": "Parol:",
"yourpasswordagain": "Paroldi qayta kiritin':",
@@ -296,7 +296,7 @@
"createaccount": "Akkaunt jarat",
"gotaccount": "Akkauntın'ız barma? '''$1'''.",
"gotaccountlink": "Kir",
- "createaccountmail": "e-mail arqalı",
+ "createaccountmail": "Waqtınshalıq parol jaratıw ha'm onı ko'rsetilgen e-mail adresin jiber",
"badretype": "Siz kiritken parol tuwra kelmedi.",
"userexists": "Kiritken paydalanıwshı atı ba'nt. \nİltimas, basqa at saylan'.",
"loginerror": "Kiriwde qatelik",
@@ -321,24 +321,24 @@
"throttled-mailpassword": "Aqırg'ı {{PLURAL:$1|saat|$1 saat}} ishinde parol eskertiw xatı jiberildi.\nJaman jolda paydalanıwdın' aldın alıw ushın, ha'r {{PLURAL:$1|saat|$1 saat}} sayın tek g'ana bir parol eskertiw xatı jiberiledi.",
"mailerror": "Xat jiberiwde qatelik juz berdi: $1",
"acct_creation_throttle_hit": "Keshirersiz, siz aldın {{PLURAL:$1|1 akkaunt|$1 akkaunt}} jaratqansız.\nBunnan artıq jaratıw mu'mkinshiligin'iz joq.",
- "emailauthenticated": "Sizin' e-mail adresin'iz tastıyqlang'an waqtı: $2, $3.",
+ "emailauthenticated": "Sizin' e-mail adresin'iz tastıyqlang'an waqtı: $3, $2.",
"emailnotauthenticated": "E-mail adresin'iz ele tastıyıqlanbag'an.\nTo'mendegi mu'mkinshilikler ushın hesh xat jiberilmeydi.",
"noemailprefs": "Usı mu'mkinshilikler islewi ushın e-mail adresin'izdi ko'rsetin'.",
"emailconfirmlink": "E-mail adresin'izdi tastıyıqlan'",
"invalidemailaddress": "E-mail adresin'iz nadurıs formatta bolg'anı ushın qabıl etile almaydı.\nDurıs formattag'ı adresin'izdi ko'rsetin', yamasa qatardı bos qaldırın'.",
"accountcreated": "Akkaunt jaratıldı",
- "accountcreatedtext": "$1 paydalanıwshısına akkaunt jaratıldı.",
+ "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) paydalanıwshısına akkaunt jaratıldı.",
"createaccount-title": "{{SITENAME}} ushın akkaunt jaratıw",
"createaccount-text": "Kimdir e-mail adresin'izdi paydalanıp {{SITENAME}} saytında ($4) \"$2\" atı menen, \"$3\" paroli menen akkaunt jaratqan.\nEndi saytqa kirip parolin'izdi o'zgertiwin'iz kerek.\n\nEger bul akkaunt nadurıs jaratılg'an bolsa, bul xabarg'a itibar bermesen'izde boladı.",
"loginlanguagelabel": "Til: $1",
"changepassword": "Paroldi o'zgertiw",
- "resetpass_announce": "E-mailin'izge jiberilgen waqtınshalıq kod penen kirdin'iz.\nKiriw protsessin juwmaqlaw ushın jan'a parolin'izdi usı jerge kiritin':",
+ "resetpass_announce": "Kiriw protsessin juwmaqlaw ushın jan'a parol jaratıwın'ız kerek.",
"resetpass_header": "Akkaunt parolin o'zgertiw",
"oldpassword": "Aldıng'ı parol:",
"newpassword": "Taza parol:",
"retypenew": "Taza paroldi qayta kiritin':",
"resetpass_submit": "Paroldi kirgizin'",
- "changepassword-success": "Parolin'iz sa'tli o'zgertildi! Endi kirin'...",
+ "changepassword-success": "Parolin'iz sa'tli o'zgertildi!",
"resetpass_forbidden": "Paroller o'zgertile almaydi",
"resetpass-submit-loggedin": "Paroldi o'zgertiw",
"resetpass-temp-password": "Waqtınshalıq parol:",
@@ -410,7 +410,7 @@
"hiddencategories": "Bul bet {{PLURAL:$1|1 jasırın kategoriyasının'|$1 jasırın kategoriyalarının'}} ag'zası:",
"nocreatetext": "{{SITENAME}} saytında taza betlerdi jaratıw sheklengen.\nArqag'a qaytıp bar betti o'zgertiwin'izge yamasa [[Special:UserLogin|kiriwin'izge / akkaunt jaratıwın'ızg'a]] boladı.",
"nocreate-loggedin": "Taza betler jaratıwın'ızg'a ruxsatın'ız joq.",
- "permissionserrors": "Ruxsatnamalar Qatelikleri",
+ "permissionserrors": "Ruxsatnama qateligi",
"permissionserrorstext-withaction": "$2 ha'reketine ruxsatın'ız joq, to'mendegi {{PLURAL:$1|sebep|sebepler}} boyınsha:",
"recreate-moveddeleted-warn": "'''Esletpe: Aldın o'shirilgen betti qayta jaratajaqsız.'''\n\nUsi betti qaytadan jaratıw tuwrılıg'ın oylap ko'rin'.\nQolaylıq ushın to'mende o'shiriw jurnalı keltirilgen:",
"moveddeleted-notice": "Bul bet o'shirilgen.\nTo'mende mag'lıwmat ushın bettin' o'shiriw ha'm ko'shiriw jurnalı ko'rsetilgen.",
@@ -434,8 +434,8 @@
"page_last": "aqırg'ı",
"histlegend": "Tu'sindirme: salıstırajaq nusqaların'ızdı saylan' ha'mde Enter knopkasın yamasa to'mendegi knopkani basın'.<br />\nSha'rtli belgiler: (ha'z.) = ha'zirgi nusqasi menen parqı,\n(aqır.) = aldıng'ı nusqasi menen parqı, k = kishi o'zgeris",
"history-fieldset-title": "Tariyxınan izlew",
- "histfirst": "En' aldıng'ısı",
- "histlast": "En' aqırg'ısı",
+ "histfirst": "en' aldıng'ısı",
+ "histlast": "en' aqırg'ısı",
"historysize": "({{PLURAL:$1|1 bayt|$1 bayt}})",
"historyempty": "(bos)",
"history-feed-title": "Nusqa tariyxı",
@@ -446,11 +446,11 @@
"rev-deleted-event": "(jurnal ha'reketi o'shirildi)",
"rev-delundel": "ko'rsetiw/jasırıw",
"revdelete-legend": "Ko'rinis sheklewlerin belgilew",
- "revdelete-hide-text": "Nusqa tekstin jasır",
+ "revdelete-hide-text": "O'zgeris teksti",
"revdelete-hide-image": "Fayl mag'lıwmatın jasır",
"revdelete-hide-name": "Ha'reket ha'm onın' obyektin jasır",
- "revdelete-hide-comment": "O'zgertiw kommentariyin jasır",
- "revdelete-hide-user": "O'zgeriwshi atın/IP jasır",
+ "revdelete-hide-comment": "O'zgerisler ta'ripleri",
+ "revdelete-hide-user": "Paydalanıwshı atı/IP-adres",
"revdelete-hide-restricted": "Mag'lıwmatlardı administratorlar menen basqalardan da jasırıw",
"revdelete-suppress": "Mag'lıwmatlardı administratorlar menen basqalardan da jasırıw",
"revdelete-unsuppress": "Qayta tiklengen nusqalardan sheklewlerdi alıp taslaw",
@@ -480,7 +480,6 @@
"mergehistory-comment": "[[:$1]] degen [[:$2]] degenge biriktirildi: $3",
"mergehistory-same-destination": "Derek ha'm aqırg'ı betler birdey bolmawı kerek",
"mergelog": "Biriktiriw jurnalı",
- "pagemerge-logentry": "[[$1]] degen [[$2]] degenge biriktirildi ($3 shekemgi nusqalar)",
"revertmerge": "Ajırat",
"mergelogpagetext": "To'mende bir bet tariyxının' basqa betke biriktiriliwinin' en' aqırg'ı dizimi keltirilgen.",
"history-title": "\"$1\" betinin' nusqa tariyxı",
@@ -521,7 +520,7 @@
"powersearch-ns": "Usı isimler ko'pliginen izlew:",
"search-external": "Sırtqı izlewshi",
"preferences": "Sazlawlar",
- "mypreferences": "Menin' sazlawlarım",
+ "mypreferences": "Sazlawlar",
"prefs-edits": "O'zgertiwler sanı:",
"prefs-skin": "Sırtqı ko'rinis",
"skin-preview": "Korip al",
@@ -551,12 +550,12 @@
"servertime": "Server waqtı:",
"guesstimezone": "Brauzerden alıp toltırıw",
"allowemail": "Basqalardan xat qabıllawdı qos",
- "prefs-searchoptions": "İzlew sazlawları",
+ "prefs-searchoptions": "İzlew",
"prefs-namespaces": "İsimler ko'plikleri",
"default": "defolt",
"prefs-files": "Fayllar",
"youremail": "E-mail:",
- "username": "Paydalanıwshı atı:",
+ "username": "{{GENDER:$1|Paydalanıwshı atı}}:",
"prefs-memberingroups": "Kirgen {{PLURAL:$1|toparın'ız|toparların'ız}}:",
"yourrealname": "Haqıyqıy isimin'iz:",
"yourlanguage": "Til:",
@@ -819,7 +818,6 @@
"statistics": "Statistika",
"statistics-header-pages": "Bet statistikası",
"statistics-header-edits": "Statistikanı o'zgertiw",
- "statistics-header-views": "Statistikanı ko'riw",
"statistics-header-users": "Paydalanıwshı statistikası",
"statistics-articles": "Maqalalar",
"statistics-pages": "Betler",
@@ -827,11 +825,8 @@
"statistics-files": "Aploud qılıng'an fayllar",
"statistics-edits": "{{SITENAME}} ornatılg'anlı beri bettegi o'zgerisler sanı",
"statistics-edits-average": "Ha'r bir betke ortasha kiritilgen o'zgerisler sanı",
- "statistics-views-total": "Barlıq ko'riwler",
- "statistics-views-peredit": "Ha'r bir o'zgeriske ko'riwler sanı",
"statistics-users": "Registratsiyadan o'tken [[Special:ListUsers|paydalanıwshılar]]",
"statistics-users-active": "Aktiv paydalanıwshılar",
- "statistics-mostpopular": "En' ko'p ko'rilgen betler",
"doubleredirects": "Qos burıwshılar",
"double-redirect-fixer": "Qayta bag'ıtlawshılardı du'zetiwshi",
"brokenredirects": "Hesh betke bag'ıtlamaytug'ın burıwshılar",
@@ -858,7 +853,6 @@
"uncategorizedtemplates": "Kategoriyasız shablonlar",
"unusedcategories": "Paydalanılmag'an kategoriyalar",
"unusedimages": "Paydalanılmag'an fayllar",
- "popularpages": "En' ko'p ko'rilgen betler",
"wantedcategories": "Talap qılıng'an kategoriyalar",
"wantedpages": "Talap qılıng'an betler",
"wantedfiles": "Kerekli fayllar",
@@ -892,7 +886,6 @@
"pager-older-n": "{{PLURAL:$1|eskilew 1|eskilew $1}}",
"booksources": "Kitap derekleri",
"booksources-search-legend": "Kitap haqqında informatsiya izlew",
- "booksources-go": "O'tin'",
"specialloguserlabel": "Paydalanıwshı:",
"speciallogtitlelabel": "Atama:",
"log": "Jurnallar",
@@ -961,7 +954,7 @@
"watchlist-details": "Baqlaw dizimin'izde (sa'wbet betlerin esapqa almag'anda) {{PLURAL:$1|1 bet|$1 bet}} bar.",
"wlheader-enotif": "E-mail arqalı eskertiw qosılg'an.",
"wlnote": "To'mende aqırg'ı {{PLURAL:$2|saattag'ı|'''$2''' saattag'ı}} {{PLURAL:$1|aqırg'ı o'zgeris bar|aqırg'ı '''$1''' o'zgeris bar}}.",
- "wlshowlast": "Aqırg'ı $1 saat, $2 ku'n, $3 ko'rset",
+ "wlshowlast": "Aqırg'ı $1 saat, $2 ku'n, ko'rset",
"watchlist-options": "Baqlaw diziminin' sazlawları",
"watching": "Baqlaw...",
"unwatching": "Baqlamaw...",
@@ -1270,7 +1263,6 @@
"exif-imagelength": "Uzunlıg'ı",
"exif-imagedescription": "Su'wret ataması",
"exif-artist": "Avtor",
- "watchlistall2": "ha'mmesin",
"namespacesall": "ha'mmesi",
"monthsall": "ha'mme",
"confirmemail": "E-mail adresin tastıyıqlaw",
@@ -1322,5 +1314,6 @@
"specialpages-group-users": "Paydalanıwshılar ha'm olardın' huqıqları",
"revdelete-restricted": "administratorlarg'a qollanılg'an sheklewler",
"revdelete-unrestricted": "administratorlardan alıp taslang'an sheklewler",
- "rightsnone": "(hesh qanday)"
+ "rightsnone": "(hesh qanday)",
+ "revdelete-summary": "o'zgerislerdin' qısqasha mazmunı"
}
diff --git a/languages/i18n/kab.json b/languages/i18n/kab.json
index 256af449..c92e9e14 100644
--- a/languages/i18n/kab.json
+++ b/languages/i18n/kab.json
@@ -10,7 +10,8 @@
"Salem333",
"Teak",
"Urhixidur",
- "아라"
+ "아라",
+ "SalemB"
]
},
"tog-underline": "Derrer izdayen:",
@@ -125,7 +126,7 @@
"category_header": "Isebtar deg taggayt \"$1\"",
"subcategories": "Adutaggayin",
"category-media-header": "Media deg taggayt \"$1\"",
- "category-empty": "''Taggayt-agi d tilemt.''",
+ "category-empty": "<em>Taggayt agi ur tesɛa asebtar, adu-taggayt neɣ afaylu agetmedia.</em>",
"hidden-categories": "{{PLURAL:$1|Taggayt yeffren|Taggayin yeffren}}",
"hidden-category-category": "Taggayin yeffren",
"category-subcat-count": "Taggayt agi tesɛa {{PLURAL:$2|adu-taggayt|$2 adu-taggayin, ɣef ayed {{PLURAL:$1|t-agi|t-igi $1}}}} ddaw agi.",
@@ -163,7 +164,7 @@
"errorpagetitle": "Agul",
"returnto": "Uɣal ar $1.",
"tagline": "Seg {{SITENAME}}",
- "help": "Tallat",
+ "help": "Tallalt",
"search": "Nadi",
"searchbutton": "Nadi",
"go": "Ẓer",
@@ -203,7 +204,7 @@
"imagepage": "Ẓer asebter n tugna",
"mediawikipage": "Ẓer asebter n izen",
"templatepage": "Ẓer asebter n talɣa",
- "viewhelppage": "Ẓer asebter n tallat",
+ "viewhelppage": "Ẓer asebter n tallalt",
"categorypage": "Ẓer asebter n taggayin",
"viewtalkpage": "Ẓer amyannan",
"otherlanguages": "S tutlayin tiyaḍ",
@@ -227,7 +228,7 @@
"currentevents-url": "Project:Isallen",
"disclaimers": "Iɣtalen",
"disclaimerpage": "Project:Iɣtalen",
- "edithelp": "Tallat deg ubeddel",
+ "edithelp": "Tallalt deg ubeddel",
"mainpage": "Asebter amenzawi",
"mainpage-description": "Asebter amenzawi",
"policy-url": "Project:Ilugan",
@@ -280,7 +281,7 @@
"nstab-image": "Afaylu",
"nstab-mediawiki": "Izen",
"nstab-template": "Talɣa",
- "nstab-help": "Tallat",
+ "nstab-help": "Tallalt",
"nstab-category": "Taggayt",
"nosuchaction": "Tigawt ulac-itt",
"nosuchactiontext": "Wiki ur teɛqil ara tigawt-nni n URL",
@@ -489,7 +490,6 @@
"passwordreset-emailsent-capture": "Tirawt n uwennez n awal n uɛaddi tetwaceggaɛ, ẓeṛ-itt ddaw agi.",
"passwordreset-emailerror-capture": "Tirawt n uwennez n awal n uɛaddi t-arewed, ẓeṛ-itt ddaw agi, lamaɛna aceggaɛ i {{GENDER:$2|umseqdac}} yefkad anezri : $1",
"changeemail": "Beddel tansa n e-mail",
- "changeemail-header": "Beddel tansa n e-mail n umiḍan",
"changeemail-text": "Ččur tiferkit agi iwakken ad beddeleḍ tansa e-mail inek/inem. Ilaq ad sekcemeḍ awal ik/im n uɛaddi iwakken ad sergegeḍ abeddel agi.",
"changeemail-no-info": "Ilaq ad qqeneḍ iwakken ad ẓṛeḍ asebter agi.",
"changeemail-oldemail": "Tansa e-mail n tura :",
@@ -497,7 +497,6 @@
"changeemail-none": "(ulac)",
"changeemail-password": "Awal-ik/im n uɛaddi ɣef {{SITENAME}} :",
"changeemail-submit": "Beddel tansa e-mail",
- "changeemail-cancel": "Semmewet",
"changeemail-throttled": "Tɛerdeḍ ad qqeneḍ aṭas tiqwal.\nIlaq ad rǧuḍ $1 uqbel ad ɛerdeḍ tikkelt nniḍen.",
"resettokens": "Wennez tiddas",
"resettokens-text": "D-agi tzemreḍ ad twennezeḍ tiddas i ɛemmeden ad kecmeḍ ar isefka usligen i qqenen ar amiḍan inek/inem.\n\nIlaq ad twennezeḍ tiddas ma tferqeḍ-ten s tuccḍa s umseqdac nniḍen neɣ ma amiḍan inek/inem yexṣer.",
@@ -555,7 +554,7 @@
"accmailtitle": "Awal n tbaḍnit yettwazen.",
"accmailtext": "Awal n uɛaddi id yuran s ugacur i [[User talk:$1|$1]] yetweceggaɛ i $2.\nYezmer ad yetbeddel ɣef usebtar [[Special:ChangePassword|Abeddel n awal uɛddi]] sakin tuqqna.",
"newarticle": "(Amaynut)",
- "newarticletext": "Tḍefreḍ azday ɣer usebter mazal ur yettwaxleq ara.\nAkken ad txelqeḍ asebter-nni, aru deg tenkult i tella deg ukessar\n(ẓer [$1 asebter n tallat] akken ad tessneḍ kter).\nMa tɣelṭeḍ, wekki kan ɣef tqeffalt \"Back/Précédent\" n browser/explorateur inek.",
+ "newarticletext": "Tḍefreḍ azday ɣer usebter mazal ur yettwaxleq ara.\nAkken ad txelqeḍ asebter-nni, aru deg tenkult i tella deg ukessar\n(ẓer [$1 asebter n tallalt] akken ad tessneḍ kter).\nMa tɣelṭeḍ, wekki kan ɣef tqeffalt \"Back/Précédent\" n browser/explorateur inek.",
"anontalkpagetext": "---- ''Wagi d asebter n umyennan n useqdac adrig, mazal ur d-yesnufa ara amiḍan. I taɣẓint agi, ilaq an seqdec tansa IP ines iwakken at-id n sulu. Yiwet tansa IP tezmer at tettuseqdac sɣur aṭṭas n iseqdacen. Lukan ula d kečč aqla-k amseqdac adrig dɣa ur tebɣiḍ ara ad tettwabcreḍ izen am wigini, ihi [[Special:UserLogin/signup|snulfud amiḍan]] naɣ [[Special:UserLogin|qqened]] iwakken sya d asawen ur t-illint ara uguren n usulu.''",
"noarticletext": "Ulac aḍris deg usebter-agi, tzemreḍ ad [[Special:Search/{{PAGENAME}}|tnadiḍ ɣef wezwel n usebter-agi]] deg isebtar wiyaḍ neɣ [{{fullurl:{{FULLPAGENAME}}|action=edit}} tettbeddileḍ asebter-agi].",
"noarticletext-nopermission": "Imira ulac aḍris deg usebter agi.\nTzemreḍ [[Special:Search/{{PAGENAME}}|ad nadiḍ ɣef azwel agi]] deg isebtaren nniḍen,\nnaɣ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|asebter={{FULLPAGENAMEE}}}} ad nadiḍ deg iɣmisen iqqenen]</span>.",
@@ -764,7 +763,6 @@
"mergehistory-same-destination": "Asebter n azar d usebter n userken ur zemren ara ad illin d yiwen",
"mergehistory-reason": "Ayɣer",
"mergelog": "Aɣmis n izdayen",
- "pagemerge-logentry": "[[$1]] yezdukel s [[$2]] (lqem alama d $3)",
"revertmerge": "Fru",
"mergelogpagetext": "Attan tebdart n wesdukel umezruy usebtar deg win n usebtar nniḍen amaynut.",
"history-title": "Tiẓṛi tiss sint umezruy n \"$1\"",
@@ -812,7 +810,6 @@
"searchrelated": "ineqqes",
"searchall": "akk",
"showingresults": "Tamuli n {{PLURAL:$1|'''Yiwen''' wegmud|'''$1''' n yigmad}} seg #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Agmud '''$1'''|Igmad '''$1–$2'''}} n '''$3''' i '''$4'''",
"search-nonefound": "Ulac igmad i usuter agi.",
"powersearch-legend": "Anadi amahlan",
"powersearch-ns": "Nadi deg tallunin n isemawen",
@@ -1381,14 +1378,11 @@
"randomincategory": "Asebtar s ugacur deg taggayt",
"randomincategory-invalidcategory": "« $1 » mačči d-isem n taggayt yeɣblen.",
"randomincategory-nopages": "Ulac asebtar deg [[:Category:$1]].",
- "randomincategory-selectcategory": "Ddem asebtar s ugacur deg taggayt : $1 $2.",
- "randomincategory-selectcategory-submit": "Ruḥ",
"randomredirect": "Asemmimeḍ menwala",
"randomredirect-nopages": "Ulac asebter n alsanamad deg tallunt n isemawen « $1 ».",
"statistics": "Tisnaddanin",
"statistics-header-pages": "Tisnaddanin n isebtar",
"statistics-header-edits": "Tisnaddanin n ibeddilen",
- "statistics-header-views": "Tisnaddanin n iskanen",
"statistics-header-users": "Tisnaddanin n wemseqdac",
"statistics-header-hooks": "Tisnaddanin nniḍen",
"statistics-articles": "Isebtar n ugbur",
@@ -1397,13 +1391,9 @@
"statistics-files": "Ifuyla yettwaznen",
"statistics-edits": "Ibeddilen n isebtar seg aserkeb n {{SITENAME}}",
"statistics-edits-average": "Amḍan allal n ibeddilen sɣur asebter",
- "statistics-views-total": "Iskanen",
- "statistics-views-total-desc": "Timuɣliwin n isebtar ur llan ara dɣa d isebtar usligen ur sseddant ara",
- "statistics-views-peredit": "Tizra s ubeddel",
"statistics-users": "[[Special:ListUsers|Iseqdacen]] i siggezen",
"statistics-users-active": "Iseqdacen urmiden",
"statistics-users-active-desc": "Iseqdacen yesɛan xersum yiwet tigawt seg {{PLURAL:$1|ass agi aneggaru|$1 ussan agi ineggura}}",
- "statistics-mostpopular": "isebtar mmeẓren aṭṭas",
"pageswithprop": "Isebtar s ayla n usebtar",
"pageswithprop-legend": "Isebtar s ayla n usebtar",
"pageswithprop-text": "Asebtar agi, yefked umuɣ n isebtar yeseqdacen ayla n usebtar amaẓlay",
@@ -1444,7 +1434,6 @@
"uncategorizedtemplates": "Talɣiwin mebla taggayt",
"unusedcategories": "Taggayin ur nettwaseqdac ara",
"unusedimages": "Ifayluwin ur nettwaseqdac ara",
- "popularpages": "Isebtar iɣerfanen",
"wantedcategories": "Taggayin mmebɣant",
"wantedpages": "Isebtar mmebɣan",
"wantedpages-badtitle": "Azwel ur yeɣbel ara deg igmad : $1",
@@ -1496,7 +1485,6 @@
"querypage-disabled": "Asebter uslig agi yensa , taɣzint : timellal is.",
"booksources": "Iɣbula n yidlisen",
"booksources-search-legend": "Nadi ɣef iɣbula n yidlisen",
- "booksources-go": "Ruḥ",
"booksources-text": "Deg ukessar, yella wumuɣ n yizdayen iberraniyen izzenzen idlisen (imaynuten akk d weqdimen), yernu ahat sɛan kter talɣut ɣef idlisen i tettnadiḍ fell-asen:",
"booksources-invalid-isbn": "ISBN agi ur yeɣbel ara ; selken ma ulac anezri deg-es.",
"specialloguserlabel": "Ameskar :",
@@ -1613,7 +1601,7 @@
"wlheader-enotif": "Talɣut s email yessermed.",
"wlheader-showupdated": "Isebtar ttubeddlen segwasmi tkecmeḍ tikelt taneggarut ttbanen-d s uḍris '''aberbuz'''.",
"wlnote": "Ddaw agi {{PLURAL:$1|yella abeddel aneggaru|llan '''$1''' ibeddilen ineggura}} n {{PLURAL:$2|usrag aneggaru|'''$2''' isragen ineggura}}, seg $3 af $4.",
- "wlshowlast": "Ssken $1 n swayeɛ $2 n wussan neɣ $3 ineggura",
+ "wlshowlast": "Ssken $1 n swayeɛ $2 n wussan neɣ ineggura",
"watchlist-options": "Tifranin n umuɣ n uɛessi",
"watching": "Ad iɛass...",
"unwatching": "Ad ifukk aɛessi...",
@@ -1661,7 +1649,6 @@
"delete-warning-toobig": "Asebtar agi yesɛa amezruy axatar n ibeddilen, ugaren $1 {{PLURAL:$1|lqem|ileqman}}.\nTukksa-s tezmer ad terwi tiddit n taffa n isefka n {{SITENAME}} ;\nilaq ad seqdeceḍ s-leɛqel.",
"deleting-backlinks-warning": "'''Ɣur-wet :''' Isebtar nniḍen sɛan azday ɣer asebtar i tebɣiḍ ad ekkeseḍ.",
"rollback": "Semmet ibeddilen",
- "rollback_short": "Semmet",
"rollbacklink": "semmet",
"rollbacklinkcount": "semmet $1 {{PLURAL:$1|abeddel|ibeddilen}}",
"rollbacklinkcount-morethan": "semmet ugar n $1 {{PLURAL:$1|abeddel|ibeddilen}}",
@@ -2034,7 +2021,6 @@
"import": "Ssekcem isebtar",
"importinterwiki": "Assekcem n transwiki",
"import-interwiki-text": "Fren yiwen wiki d yiwen azwel n usebtar ad ketreḍ.\nIzemzen n ileqman d isemawen n ittekkiyen ad qqimen.\nAkkw tigawin n taktert ager-wiki ad illint deg [[Special:Log/import|umezruy n tiketrin]].",
- "import-interwiki-source": "Wiki d usebtar n taɣbalut",
"import-interwiki-history": "Xdem alsaru n akk tisiwal umezruy n usebter-agi",
"import-interwiki-templates": "Sekcem akkw talɣiwin",
"import-interwiki-submit": "Ssekcem",
@@ -2081,13 +2067,11 @@
"import-logentry-interwiki": "$1 s transwiki",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|lqem|ileqman}} seg $2",
"javascripttest": "Tarmit n JavaScript",
- "javascripttest-title": "Asselkem n tirmitin $1",
"javascripttest-pagetext-noframework": "Asebtar agi yeḥeṛṛ i usselkem n tirmitin JavaScript.",
"javascripttest-pagetext-unknownframework": "Tamṣuka « $1 » warisem.",
"javascripttest-pagetext-frameworks": "Ilaq ad xetreḍ yiwet n timṣukyin n tarmit agi : $1",
"javascripttest-pagetext-skins": "Xter agwlim s anwa ad xeddemeḍ tarmit :",
"javascripttest-qunit-intro": "Zeṛ [$1 tumlin n tarmit] ɣef mediawiki.org.",
- "javascripttest-qunit-heading": "Azrar n tarmit QUnit n JavaScript ɣef MediaWiki",
"tooltip-pt-userpage": "Asebter n umseqdac inu",
"tooltip-pt-anonuserpage": "Asebter n wemseqdac n IP wukud tekkiḍ",
"tooltip-pt-mytalk": "Asebter n umyannan inu",
@@ -2138,7 +2122,7 @@
"tooltip-ca-nstab-image": "Ẓer asebter n tugna",
"tooltip-ca-nstab-mediawiki": "Ẓer izen n system",
"tooltip-ca-nstab-template": "Ẓer talɣa",
- "tooltip-ca-nstab-help": "Ẓer asebter n tallat",
+ "tooltip-ca-nstab-help": "Ẓer asebter n tallalt",
"tooltip-ca-nstab-category": "Ẓer asebter n taggayt",
"tooltip-minoredit": "Wagi d abeddel afessas",
"tooltip-save": "Smekti ibeddlen inek",
@@ -2188,7 +2172,6 @@
"pageinfo-robot-policy": "Asbeddi sɣur iṛubuten",
"pageinfo-robot-index": "Tessireg",
"pageinfo-robot-noindex": "Tegdel",
- "pageinfo-views": "Amḍan n timuɣliwin",
"pageinfo-watchers": "Amḍan n imttekkiyen yesɛan asebter agi deg umuɣ nsen n uɛassi",
"pageinfo-few-watchers": "Kkes-as $1 {{PLURAL:$1|amanay|imanayen}}",
"pageinfo-redirects-name": "Amḍan n izdayen ɣer asebtar agi",
@@ -2636,7 +2619,6 @@
"exif-urgency-low": "Anammum ($1)",
"exif-urgency-high": "Afella ($1)",
"exif-urgency-other": "Lḥir id yefka amseqdac ($1)",
- "watchlistall2": "akk",
"namespacesall": "akk",
"monthsall": "akk",
"confirmemail": "Sentem tansa n e-mail",
@@ -2716,7 +2698,6 @@
"watchlisttools-edit": "Ẓer u beddel umuɣ n uɛessi",
"watchlisttools-raw": "Beddel umuɣ n uɛessi (raw)",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|amyannan]])",
- "unknown_extension_tag": "Ticṛeṭ n usiɣzef « $1 » warisem",
"duplicate-defaultsort": "Ɣur-wet : tasarut n ufran m-ulac « $2 » atsefεej tasarut n uqbel « $1 ».",
"version": "Lqem",
"version-extensions": "Isiɣzaf i serkeben",
@@ -2732,7 +2713,7 @@
"version-parser-function-hooks": "Tiseɣnin yeẓẓlen n umsisleḍ n taseddast",
"version-hook-name": "Isem n umgud",
"version-hook-subscribedby": "Imeltaɣen :",
- "version-version": "(lqem $1)",
+ "version-version": "($1)",
"version-license": "Turagt MediaWiki",
"version-ext-license": "Turagt",
"version-ext-colheader-name": "Asiɣzef",
@@ -2873,19 +2854,19 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|yebeddel|tebeddel}} amyili ar ugraw i $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|yettwasmel|tettwasmel}} s uwurman seg $4 ar $5",
"rightsnone": "(ulaḥedd)",
+ "feedback-adding": "Rnud iwenniten inek/inem ar usebter...",
+ "feedback-bugcheck": "D ayen igerrzen ! Senqed kan ma mačči d yiwen n [$1 inezriyen i n-sen yakan].",
+ "feedback-bugnew": "Senqedeɣ. Ɛeyyen anezri amaynut",
"feedback-bugornote": "Ma teḥgiḍ iman-ik/im ad gelmeḍ agnu atekni i tilɣa tummidtin, [$1 ɛeyyen ɣef anezri].\nMulac, tzemreḍ ad seqdeceḍ tiferkit ddaw agi. Awennit inek/inem ad yetwernu ar usebtar « [$3 $2] », s isem-ik/im n umseqdac d iminig i tseqdeceḍ.",
- "feedback-subject": "Asentel :",
- "feedback-message": "Izen :",
"feedback-cancel": "Semmewet",
- "feedback-submit": "Ceggaɛ iwenniten",
- "feedback-adding": "Rnud iwenniten inek/inem ar usebter...",
+ "feedback-close": "D ayen",
"feedback-error1": "Tuccḍa : Agmuḍ n API ur yetwaɛqel ara",
"feedback-error2": "Tuccḍa : abeddel yexṣer",
"feedback-error3": "Tuccḍa : Ulac tamrarut n API",
+ "feedback-message": "Izen :",
+ "feedback-subject": "Asentel :",
+ "feedback-submit": "Ceggaɛ iwenniten",
"feedback-thanks": "Tanemmirt ! Awennit inek/inem yeffeɣ-d ɣef usebtar \"[$2 $1]\".",
- "feedback-close": "D ayen",
- "feedback-bugcheck": "D ayen igerrzen ! Senqed kan ma mačči d yiwen n [$1 inezriyen i n-sen yakan].",
- "feedback-bugnew": "Senqedeɣ. Ɛeyyen anezri amaynut",
"searchsuggest-search": "Nadi",
"searchsuggest-containing": "yesɛan...",
"api-error-badaccess-groups": "Ur tesɛiḍ ara turagt ad smireḍ ifuyla ɣef wiki agi.",
diff --git a/languages/i18n/kbd-cyrl.json b/languages/i18n/kbd-cyrl.json
index 29f6f2ee..e98a76ed 100644
--- a/languages/i18n/kbd-cyrl.json
+++ b/languages/i18n/kbd-cyrl.json
@@ -617,7 +617,6 @@
"mergehistory-same-destination": "Япэрейуэ щыт напэкӀуэцӀымрэ напэкӀуэцӀ псоуэ щытымрэ зэщхьэщыкӀын хуейщ",
"mergehistory-reason": "Зытеухуар:",
"mergelog": "Зэхэгъэхьэгъуэхэм я тхылъ",
- "pagemerge-logentry": "Зы щӀащ [[$1]]-рэ [[$2]]-рэ (версиэхэр $3 нэгъунэ)",
"revertmerge": "Зыхэдзын",
"mergelogpagetext": "ИщӀагъымкӀэ зэхэгъэхьэгъуэхэм я тхыдэм и тхылъыр напэкӀуэцӀым еуэ гъэлъэгъуащ",
"history-title": "\"$1\" и зэхъуэкIыныгъэм и тхыдэр",
@@ -728,7 +727,6 @@
"pager-older-n": "{{PLURAL:$1|нэхъ жьыуэ 1|нэхъ жьыху $1}}",
"booksources": "Тхылъ къыздихар",
"booksources-search-legend": "Тхылъым и хъыбар лъыхъуэн",
- "booksources-go": "Къэгъуэтын",
"log": "Тхылъхэр",
"allpages": "НапэкIуэцIухъуар",
"prevpage": "Япэреуэ кӀуа напэкӀуэцӀыр ($1)",
@@ -747,7 +745,7 @@
"watchthispage": "НапэкӀуэцӀым кӀэлъыплъын",
"unwatch": "КӀэлъымыплъын",
"watchlist-details": "Уи щӀэлъыплъыгъуэ тхылъым $1 {{PLURAL:$1|напэкӀуэцӀ|напэкӀуэцӀу}}, напэкӀуэцӀ тепсэлъыхьыгъуэхэр хэмыту",
- "wlshowlast": "Гъэлъэгъуэн кӀуа $1 сэхьэтым $2 махуэ $3",
+ "wlshowlast": "Гъэлъэгъуэн кӀуа $1 сэхьэтым $2 махуэ",
"watchlist-options": "ЩӀэлъыплъыгъуэхэм я тхылъ зэгъэзэхуэгъуэ",
"watching": "СызыкӀэлъыплъ тхылъым хэлъхьэн...",
"unwatching": "СызыкӀэлъыплъ тхылъым хэхын",
@@ -900,7 +898,6 @@
"metadata-expand": "Дээпыкъуэгъу кэӀуэтэгъуэхэр гъэлъэгъуэн",
"metadata-collapse": "Дээпыкъуэгъу кэӀуэтэгъуэхэр гъэпшкӀун",
"metadata-fields": "Метаданнэхэр, мыбы кърибжэкІхэр къызэрыгуэкІыу сурэтым и напэкІуэцІым къщридзэнущ, адрейхэр гъэпщкІуау щытынущ.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "псори",
"namespacesall": "псори",
"monthsall": "псори",
"imgmultipageprev": "япэрыт напэкӀуэцӀыр",
@@ -915,5 +912,6 @@
"version-specialpages": "Лэжыгъэ напэкӀуэцӀ",
"specialpages": "СпецнапэкӀуэцӀхэр",
"revdelete-restricted": "теубыдыгъуэхэр тхьэмадэхэм ятохуэ",
- "revdelete-unrestricted": "теубыдыгъуэхэр тхьэмадэхэм ятеха"
+ "revdelete-unrestricted": "теубыдыгъуэхэр тхьэмадэхэм ятеха",
+ "revdelete-summary": "зэхъуэкӀыгъуэхэм я тепсэлъыхьыгъуэ"
}
diff --git a/languages/i18n/kg.json b/languages/i18n/kg.json
index 6e514a91..91d64ad1 100644
--- a/languages/i18n/kg.json
+++ b/languages/i18n/kg.json
@@ -94,13 +94,6 @@
"qbmyoptions": "Mikânda ya munu",
"faq": "Kyuvu ná mvutu",
"faqpage": "Lukanu:Kyuvu ná mvutu",
- "vector-action-delete": "Kufwa",
- "vector-action-move": "Nata",
- "vector-action-protect": "Keba",
- "vector-view-create": "Tunga",
- "vector-view-edit": "Soba",
- "vector-view-history": "Tala bansoba",
- "vector-view-view": "Tânga",
"errorpagetitle": "Fôti",
"returnto": "Vutuka na $1",
"tagline": "Katuka {{SITENAME}}",
@@ -125,7 +118,6 @@
"newpage": "Mukânda ya yimpa",
"talkpage": "Zônzana mukânda yayi",
"talkpagelinktext": "Disolo",
- "postcomment": "Ndâmbu ya yimpa",
"talk": "Disolo",
"views": "Bantadilu",
"toolbox": "Bisadilu",
@@ -183,7 +175,6 @@
"internalerror": "Fôti na kati",
"internalerror_info": "Fôti na kati: $1",
"filenotfound": "Fisyé \"$1\" me kutama ve.",
- "fileexistserror": "Yawu lênda kusonika ve fisyé \"$1\": Fisyé kele.",
"cannotdelete": "Mukânda to fisyé \"$1\" me lênda kufwa ve. Muntu ya nkaka kufwaka yawu?",
"cannotdelete-title": "Mukânda \"$1\" lênda kufwa ve",
"badtitle": "Nkûmbu ya mbote ve",
@@ -256,7 +247,6 @@
"resetpass-submit-cancel": "Sala ve",
"changeemail-none": "(nkatu)",
"changeemail-password": "Mpovo ya nge ya kukota {{SITENAME}}:",
- "changeemail-cancel": "Sala ve",
"bold_sample": "Kisono ya vimbu",
"bold_tip": "Kisono ya vimbu",
"italic_sample": "Kisono ya nswalu",
@@ -279,7 +269,7 @@
"permissionserrors": "Fôti ya luve",
"permissionserrorstext": "Nge kele na luve ya kusala yayi ve, samu na:",
"permissionserrorstext-withaction": "Nge kele na luve ve ku $2, samu na:",
- "postedit-confirmation": "Nsoba ya nge me lundama.",
+ "postedit-confirmation-saved": "Nsoba ya nge me lundama.",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
"page_first": "ntete",
@@ -310,7 +300,6 @@
"searchmenu-new": "'''Tunga mukânda \"[[:$1]]\" na wiki yayi!'''",
"searchprofile-everything": "Nyonso",
"searchprofile-articles-tooltip": "Sosa na $1",
- "searchprofile-project-tooltip": "Sosa na $1",
"search-result-size": "$1 ({{PLURAL:$2|mpovo 1|bampovo $2}})",
"search-section": "(kibuku $1)",
"search-interwiki-default": "Bandându $1:",
@@ -361,7 +350,6 @@
"newpages": "Mikânda ya yimpa",
"move": "Nata",
"allpages": "Mikânda nyonso",
- "alphaindexline": "$1 tî $2",
"allarticles": "Mikânda nyonso",
"categories": "Mitîndu",
"watch": "Keba",
@@ -405,7 +393,6 @@
"tooltip-ca-nstab-image": "Tala mukânda ya fisyé",
"tooltip-save": "Lunda bansoba ya nge",
"tooltip-undo": "\"Vutula\" ke vutula nsoba yayi mpe yawu ke monisa lumoni ya kusoba. Nge lênda sonika kikuma ya mvutula.",
- "watchlistall2": "nyonso",
"namespacesall": "nyonso",
"monthsall": "nyonso",
"table_pager_next": "Mukânda ya kulânda",
diff --git a/languages/i18n/khw.json b/languages/i18n/khw.json
index f9976fa3..00959b62 100644
--- a/languages/i18n/khw.json
+++ b/languages/i18n/khw.json
@@ -361,7 +361,6 @@
"passwordreset": "پاسورڈو ری سیٹ کورے",
"passwordreset-username": "ممبارو نم",
"changeemail-none": "(نو)",
- "changeemail-cancel": "کھینسل",
"bold_sample": "بوسک متن",
"bold_tip": "بولڈ ٹیکسٹ",
"italic_sample": "کولی/اٹالک نیویشیرو",
@@ -483,7 +482,6 @@
"search-interwiki-more": "(مزید)",
"searchrelated": "متعلقہ",
"searchall": "کھل",
- "showingresultsheader": "{{PLURAL:$5|نتیجہ'''$1''' of '''$3'''|نتیجہ'''$1 - $2''' of '''$3'''}} بچے'''$4'''",
"search-nonefound": "استفسارو مطابقا نتائج ملاو نو ھونی.",
"powersearch-legend": "ایڈوانس سرچ",
"powersearch-ns": "جائے ناما تلاش:",
@@ -571,7 +569,6 @@
"lonelypages": "څھوعو صفحات",
"unusedcategories": "غیر استعمال شدہ زمرہ جات",
"unusedimages": "غیر استعمال شدہ فائل",
- "popularpages": "مقبول صفحات",
"wantedcategories": "طلب شدہ زمرہ جات",
"wantedpages": "درخواست شدہ مضامین",
"wantedfiles": "درخواست شدہ مضامین",
@@ -598,7 +595,6 @@
"pager-older-n": "{{PLURAL:$1|قدیم1|قدیم ترین $1}}",
"booksources": "کتابی وسائل",
"booksources-search-legend": "کتابی وسایلان تلاش",
- "booksources-go": "Go/بوغے",
"specialloguserlabel": "یوزر",
"speciallogtitlelabel": "عنوان:",
"log": "نوشتہ جات",
@@ -624,7 +620,7 @@
"watchthispage": "ھیہ صفحو تان نظرا لاکھے",
"unwatch": "زیرنظرمنسوخ",
"watchlist-details": " تہ زیرِنظرفہرستا {{PLURAL:$1|$1 صفحہ شیر|$1 صفحات شینی}}، ھیارا تبادلۂ خیالو صفحاتن تعداد شامل نیکی.",
- "wlshowlast": "پشاوے آخری $1 گھنٹو $2 آنوسو $3",
+ "wlshowlast": "پشاوے آخری $1 گھنٹو $2 آنوسو",
"watchlist-options": "واچ لسٹ آپشن",
"watching": "زیر نظر",
"unwatching": "منسوخ",
@@ -786,7 +782,6 @@
"metadata-collapse": "درونگار تفصیلان کھوشتاوے",
"metadata-fields": "ایگزف میٹاڈیٹا ھیارا دیونو بیرو ھوٹوان صفحا دیونو بونی وا کیاوتکہ میٹاڈیٹا ٹیبل کھولاو ھوی باقی اشناری بائی ڈیفالٹ کھوشت تان بہچونی\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-dc-date": "تاریخ",
- "watchlistall2": "سف",
"namespacesall": "تھمامو",
"monthsall": "سف",
"confirm_purge_button": "OK/ٹھیک شیر",
diff --git a/languages/i18n/kiu.json b/languages/i18n/kiu.json
index 4b2bf841..50f65721 100644
--- a/languages/i18n/kiu.json
+++ b/languages/i18n/kiu.json
@@ -103,7 +103,7 @@
"nov": "Teş",
"dec": "Gağ",
"pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriy}}",
- "category_header": "Pelê ke kategoriya \"$1\" miyan derê",
+ "category_header": "Pelê ke kategoriya \"$1\" derê",
"subcategories": "Kategoriyê bınêni",
"category-media-header": "Medyawa ke kategoriya \"$1\" dera",
"category-empty": "''Na kategoriye de hona qet nustey ya ki medya çinê.''",
@@ -467,7 +467,7 @@
"rev-deleted-unhide-diff": "Çımraviarnaisunê na ferqi ra jü '''esteriyo'''.\nBeno ke [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] de teferruat esto.\nSıma be idarekerênia ho ra şikinê hona [$1 nê ferqi bıvênê], eke wazenê dewam kerê.",
"rev-delundel": "bıasne/wedare",
"rev-showdeleted": "bıasne",
- "revisiondelete": "Çımraviarnaisu bestere/peyser bia",
+ "revisiondelete": "Çımraviyarnayisu bestere/peyser biya",
"revdelete-nooldid-title": "Çımraviarnaena waştiye nêvêrena",
"revdelete-nooldid-text": "Sıma vırastena nê fonksiyoni rê ya jü çımraviarnaena waştiye diyar nêkerdo, çımraviarnaena diyarkerdiye çına, ya ki sıma wazenê ke çımraviarnaena nıkaêne bınımnê.",
"revdelete-no-file": "Dosya diyarkerdiye çina.",
@@ -499,7 +499,7 @@
"history-title": "Tarixê çımraviyarnayişê \"$1\"",
"lineno": "Rêza $1i:",
"compareselectedversions": "Varyantunê weçinıtun têver sane",
- "editundo": "peyser bia",
+ "editundo": "peyser biya",
"searchresults": "Neticê cıfeteliyaene",
"searchresults-title": "\"$1\" rê neticê cıfeteliyaene",
"notextmatches": "Qet zu pele de nêvêniya",
@@ -530,7 +530,6 @@
"search-relatedarticle": "alaqedar",
"searchrelated": "alaqedar",
"searchall": "pêro",
- "showingresultsheader": "'''$4''' rê {{PLURAL:$5|'''$3''' netice ra '''$1'''i|'''$1 - $2''' miyan de '''$3''' netice}}",
"search-nonefound": "Neticeo ke ebe perşi zubini cêno çino.",
"powersearch-legend": "Cıcêraiso hira",
"powersearch-ns": "Caunê namun de cıcêre:",
@@ -747,7 +746,6 @@
"statistics": "İstatistiki",
"statistics-header-pages": "İstatistikê pele",
"statistics-header-edits": "İstatistikê vurnaene",
- "statistics-header-views": "İstatistikê asaene",
"statistics-header-users": "İstatistikê karberi",
"statistics-header-hooks": "İstatistikê bini",
"statistics-articles": "Pelê tedeesteu",
@@ -777,7 +775,6 @@
"pager-older-n": "{{PLURAL:$1|1 khanêr|$1 khanêri}}",
"booksources": "Çımê kıtabun",
"booksources-search-legend": "Serba çımeunê kıtabu cıfeteliye",
- "booksources-go": "So",
"specialloguserlabel": "Kerdoğ:",
"speciallogtitlelabel": "Sernuste:",
"log": "Qeydi",
@@ -821,7 +818,7 @@
"watchthispage": "Na pele de şêr ke",
"unwatch": "Şêr meke",
"watchlist-details": "Pelunê hurênaişi ra qêri {{PLURAL:$1|$1 pele lista şêrkerdişi dera|$1 peli lista şêrkerdişi derê}}.",
- "wlshowlast": "$1 saetunê $2 rozunê peyênu bıasne $3",
+ "wlshowlast": "$1 saetunê $2 rozunê peyênu bıasne",
"watchlist-options": "Alternatifê lista şêrkerdene",
"watching": "Şêr ke…",
"unwatching": "Şêr meke…",
@@ -836,7 +833,7 @@
"deletecomment": "Sebeb:",
"deleteotherreason": "Sebebo bin/ilaweki:",
"deletereasonotherlist": "Sebebo bin",
- "rollbacklink": "peyser bia",
+ "rollbacklink": "peyser biya",
"protectlogpage": "Qeydê seveknaene",
"protectedarticle": "\"[[$1]]\" sevekna",
"modifiedarticleprotection": "serba \"[[$1]]\" sewiya seveknaene vurriye",
@@ -880,8 +877,8 @@
"undeletepagetitle": "'''Ni, [[:$1|$1]] be çımraviarnaunê pele ra yenê pêra'''.",
"viewdeletedpage": "Pelunê esteriyau bıvine",
"undelete-fieldset-title": "Çımraviarnau peyser biya",
- "undeletebtn": "Peyser bia",
- "undeletelink": "bıvêne/peyser bia",
+ "undeletebtn": "Peyser biya",
+ "undeletelink": "bıvêne/peyser biya",
"undeleteviewlink": "bıvêne",
"undeleteinvert": "Weçinıtey ters bıçarne",
"undeletecomment": "Sebeb:",
@@ -961,7 +958,7 @@
"block-log-flags-hiddenname": "namê karberi wedariyaeo",
"range_block_disabled": "Qabılıyetê idarekeri be afernaena komuna têdine qapan bi.",
"ipb_expiry_invalid": "Xêlê zeman nêvêreno.",
- "movepagetext": "Ebe gurênaena formê cêrêni namê jü pele vurino, qeydê cıyê verêni pêro tede sonê be namê newey ser.\nNameo khan jü pela de cihetiê be namê newey cêna.\nTı şikina ita de cihetu otomatikman hetê namê oricinali ser rocane kerê.\nEke tı nêwazena otomatikman bıkerê, gunê [[Special:DoubleRedirects|cihetunê çıftu]] ya ki [[Special:BrokenRedirects|cihetunê nêvêrdeyu]] pêroine be ho duz kerê.\nHo vira meke ke be na vurnaiso ke tı kena, gurênaisê girêu be caunê rastu pêroine ra tı mesula.\n\nDiqet ke, namê newey de hora ke jü madde esto, vurnaisê namey '''nêbeno''', wa no ke thalo ya ki jü cihetiserberdiso u vurnaisê huyo verên çino. No yeno na mana ke tı şikina namê jü pele peyser bıcêrê, koti ra ke namê ae vuriyo, beno ke to ğelet kerd u zobina ki qarısê pela de bine nêbena.\n\n'''Teme!'''\nNo vurnais beno ke serba jü pela populere neticunê nêbiyau biaro meydan;\nkerem ke, verê vurnaişi neticunê biyau bia be çımu ver.",
+ "movepagetext": "Ebe gurênayena formê cêrêni namê jü pele vurino, qeydê cıyê verêni pêro tede sonê be namê newey ser.\nNamewo khan jü pela de cihetiyê be namê neweyi cêna.\nTı şikina ita de cihetu otomatikman hetê namê oricinali ser rocane kerê.\nEke tı nêwazena otomatikman bıkerê, gunê [[Special:DoubleRedirects|cihetunê çıftu]] ya ki [[Special:BrokenRedirects|cihetunê nêvêrdeyu]] pêroyine be ho duz kerê.\nHo vira meke ke be na vurnaiso ke tı kena, gurênayisê girêwu be cawunê rastu pêroyine ra tı mesula.\n\nDiqet ke, namê neweyi de hora ke jü made esto, vurnayisê nameyi <strong>nêbeno</strong>, wa no ke thalo ya ki jü cihetiserberdiso u vurnayisê huyo verên çino. No yeno na mana ke tı şikina namê jü pele peyser bıcêrê, koti ra ke namê aye vuriyo, beno ke to ğelet kerd û zobina ki qarısê pela de bine nêbena.\n\n<strong>Teme!</strong>\nNo vurnayis beno ke serba jü pela populere neticunê nêbiyawu biyaro meydan;\nkerem ke, verê vurnayişi neticunê biyawu biya be çımu ver.",
"movepagetalktext": "Na pela hurênaişia ke tedera otomatikmen kırışina be namê newey, hama nê halu ra '''qêri''':\n*Jü pela hurênaişia pırre bınê namê newey de hora esta, ya ki\n*Qutiya bınêne to nêçinıte we.\n\nNê halu de, tı gunê pele ebe dest berê ya ki ser kerê eke wajiye.",
"movearticle": "Pele bere:",
"newtitle": "Ebe nameo newe:",
@@ -973,7 +970,7 @@
"movetalk": "Pela hurênaişiê alaqedare bere",
"movelogpage": "Qeydê berdene",
"movereason": "Sebeb:",
- "revertmove": "raçarnaene",
+ "revertmove": "raçarne",
"export": "Pelu qeyd ke",
"allmessages": "Mesacê sistemi",
"allmessagesname": "Name",
@@ -1039,7 +1036,7 @@
"tooltip-watch": "Na pele lista huya şêrkerdişi ser ke",
"tooltip-recreate": "Na pele esterıte bo ki, nae oncia bıaferne",
"tooltip-upload": "Dest be bar-kerdene ke",
- "tooltip-rollback": "\"Peyser bia\" ebe jü tık pela iştırak(un)ê peyên|i(u) peyser ano.",
+ "tooltip-rollback": "\"Peyser biya\" ebe jü tık pela iştırakunê peyênu peyser ano.",
"tooltip-undo": "\"Peyser\" ni vurnaişi peyser ano u modusê verqayt de vurnaisê formi keno ra.\nTêser-kerdena jü sebebi rê xulasa de imkan dano cı.",
"tooltip-summary": "Xulasê da kılme cı kuye",
"common.css": "/* CSSo ke itaro, serba çermu pêroine gurenino */",
@@ -1083,7 +1080,6 @@
"exif-imagewidth": "Verındêni",
"exif-imagelength": "Berzêni",
"exif-meteringmode-255": "Bin",
- "watchlistall2": "pêro",
"namespacesall": "pêro",
"monthsall": "pêro",
"confirm_purge_button": "Temam",
@@ -1112,5 +1108,6 @@
"tag-filter": "Parzünê [[Special:Tags|etiket]]i:",
"compare-page1": "Pele 1",
"compare-page2": "Pele 2",
- "rightsnone": "(qet jü)"
+ "rightsnone": "(qet jü)",
+ "revdelete-summary": "xulasa vurnaene"
}
diff --git a/languages/i18n/kk-arab.json b/languages/i18n/kk-arab.json
index e70e9c82..a54f8315 100644
--- a/languages/i18n/kk-arab.json
+++ b/languages/i18n/kk-arab.json
@@ -501,7 +501,6 @@
"mergehistory-autocomment": "[[:$1]] دەگەن [[:$2]] دەگەنگە بىرىكتىرىلدى",
"mergehistory-comment": "[[:$1]] دەگەن [[:$2]] دەگەنگە بىرىكتىرىلدى: $3",
"mergelog": "بىرىكتىرۋ جۋرنالى",
- "pagemerge-logentry": "[[$1]] دەگەن [[$2]] دەگەنگە بىرىكتىرىلدى ($3 دەيىنگى تۇزەتۋلەرى)",
"revertmerge": "بىرىكتىرۋدى بولدىرماۋ",
"mergelogpagetext": "تومەندە ٴبىر بەتتىڭ تارىيحى وزگە بەتكە بىرىكتىرۋ ەڭ سوڭعى ٴتىزىمى كەلتىرىلەدى.",
"history-title": "«$1» — تۇزەتۋ تارىيحى",
@@ -829,7 +828,6 @@
"randomredirect-nopages": "بۇل ەسىم اياسىندا ەش ايداعىش جوق.",
"statistics": "ساناق",
"statistics-header-users": "قاتىسۋشى ساناعى",
- "statistics-mostpopular": "ەڭ كوپ قارالعان بەتتەر",
"doubleredirects": "شىنجىرلى ايداعىشتار",
"doubleredirectstext": "بۇل بەتتە باسقا ايداتۋ بەتتەرگە سىلتەيتىن بەتتەر تىزىمدەلىنەدى. ٴاربىر جولاقتا ٴبىرىنشى جانە ەكىنشى ايداعىشقا سىلتەمەلەر بار, سونىمەن بىرگە ەكىنشى ايداعىش نىساناسى بار, ادەتتە بۇل ٴبىرىنشى ايداعىش باعىتتايتىن «ناقتى» نىسانا بەت اتاۋى بولۋى كەرەك.",
"brokenredirects": "ەش بەتكە كەلتىرمەيتىن ايداعىشتار",
@@ -856,7 +854,6 @@
"uncategorizedtemplates": "ساناتسىز ۇلگىلەر",
"unusedcategories": "پايدالانىلماعان ساناتتار",
"unusedimages": "پايدالانىلماعان فايلدار",
- "popularpages": "ەڭ كوپ قارالعان بەتتەر",
"wantedcategories": "باستالماعان ساناتتار",
"wantedpages": "باستالماعان بەتتەر",
"mostlinked": "ەڭ كوپ سىلتەلگەن بەتتەر",
@@ -892,7 +889,6 @@
"suppress": "شەتتەتۋ",
"booksources": "كىتاپ قاينارلارى",
"booksources-search-legend": "كىتاپ قاينارلارىن ىزدەۋ",
- "booksources-go": "ٴوتۋ",
"booksources-text": "تومەندە جاڭا جانە قولدانعان كىتاپتار ساتاتىن توراپتارىنىڭ سىلتەمەلەرى تىزىمدەلگەن. بۇل توراپتاردا ىزدەلگەن كىتاپتار تۋرالى بىلايعى اقپارات بولۋعا مۇمكىن.",
"specialloguserlabel": "قاتىسۋشى:",
"speciallogtitlelabel": "تاقىرىپ اتى:",
@@ -968,7 +964,7 @@
"wlheader-enotif": "ەسكەرتۋ حات جىبەرۋى قوسىلعان.",
"wlheader-showupdated": "سوڭعى كەلىپ-كەتۋىڭىزدەن بەرى وزگەرتىلگەن بەتتەردى '''جۋان''' قارىپىمەن كورسەت",
"wlnote": "تومەندە سوڭعى {{PLURAL:$2|ساعاتتا|'''$2''' ساعاتتا}} بولعان, {{PLURAL:$1|جۋىقتاعى وزگەرىس|جۋىقتاعى '''$1''' وزگەرىس}} كورسەتىلەدى.",
- "wlshowlast": "سوڭعى $1 ساعاتتاعى, $2 كۇندەگى, $3 بولعان وزگەرىستى كورسەتۋ",
+ "wlshowlast": "سوڭعى $1 ساعاتتاعى, $2 كۇندەگى, بولعان وزگەرىستى كورسەتۋ",
"watching": "باقىلاۋدا…",
"unwatching": "باقىلاماۋدا…",
"enotif_reset": "بارلىق بەت كەلىپ-كەتىلدى دەپ بەلگىلە",
@@ -1002,7 +998,6 @@
"delete-toobig": "بۇل بەتتە بايتاق تۇزەتۋ تارىيحى بار, $1 تۇزەتۋدەن استام.\nبۇنداي بەتتەردىڭ جويۋى {{SITENAME}} تورابىن الدەقالاي ٴۇزىپ تاستاۋىنا بوگەت سالۋ ٴۇشىن تىيىمدالعان.",
"delete-warning-toobig": "بۇل بەتتە بايتاق تۇزەتۋ تارىيحى بار, $1 تۇزەتۋدەن استام.\nبۇنىڭ جويۋى {{SITENAME}} تورابىنداعى دەرەكقور ارەكەتتەردى ٴۇزىپ تاستاۋىن مۇمكىن;\nبۇنى ابايلاپ وتكىزىڭىز.",
"rollback": "وڭدەمەلەردى شەگىندىرۋ",
- "rollback_short": "شەگىندىرۋ",
"rollbacklink": "شەگىندىرۋ",
"rollbackfailed": "شەگىندىرۋ ٴساتسىز ٴبىتتى",
"cantrollback": "وڭدەمە قايتارىلمادى;\nسوڭعى ۇلەسكەرى تەك وسى بەتتىڭ باستاۋشىسى بولدى.",
@@ -1609,7 +1604,6 @@
"exif-gpsspeed-n": "knot",
"exif-gpsdirection-t": "شىن باعىت",
"exif-gpsdirection-m": "ماگنىيتتى باعىت",
- "watchlistall2": "بارلىق",
"namespacesall": "بارلىعى",
"monthsall": "بارلىعى",
"confirmemail": "ە-پوشتا مەكەنجايىن قۇپتاۋ",
@@ -1715,7 +1709,6 @@
"hebrew-calendar-m10-gen": "تىموزدىڭ",
"hebrew-calendar-m11-gen": "ابتىڭ",
"hebrew-calendar-m12-gen": "ايلولدىڭ",
- "unknown_extension_tag": "تانىلماعان كەڭەيتپە بەلگىسى «$1»",
"version": "جۇيە نۇسقاسى",
"version-extensions": "ورناتىلعان كەڭەيتىمدەر",
"version-specialpages": "ارنايى بەتتەر",
@@ -1728,7 +1721,7 @@
"version-parser-function-hooks": "قۇرىلىمدىق تالداتقىش جەتەلەرىنىڭ تۇزاقتارى",
"version-hook-name": "تۇزاق اتاۋى",
"version-hook-subscribedby": "تۇزاق تارتقىشتارى",
- "version-version": "(نۇسقاسى: $1)",
+ "version-version": "($1)",
"version-license": "لىيتسەنزىيياسى",
"version-software": "ورناتىلعان باعدارلامالىق جاساقتاما",
"version-software-product": "ٴونىم",
@@ -1758,6 +1751,7 @@
"revdelete-restricted": "اكىمشىلەرگە تىيىمدار قولدادى",
"revdelete-unrestricted": "اكىمشىلەردەن تىيىمداردى الاستادى",
"rightsnone": "(ەشقانداي)",
+ "revdelete-summary": "وڭدەمەنىڭ قىسقاشا مازمۇنداماسى",
"expandtemplates": "ۇلگىلەردى ۇلعايتۋ",
"expand_templates_intro": "وسى قۇرال ارنايى بەتى الدەبىر ٴماتىندى الادى دا,\nبۇنىڭ ىشىندەگى بارلىق كىرىكتەلگەن ۇلگىلەردى مەيلىنشە ۇلعايتادى.\nمىنا <nowiki>{{#language:...}} سىيياقتى جوڭدەتۋ فۋنكتسىييالارىن دا, جانە {{CURRENTDAY}}\nسىيياقتى اينامالىلارىن دا ۇلعايتادى (ناقتى ايتقاندا, قوس قابات ساداق جاقشالار اراسىنداعى بارلىعىن).\nبۇنى ٴوز MediaWiki باعدارلاماسىنان قاتىستى جوڭدەتۋ ساتىن شاقىرىپ ىستەلىنەدى.",
"expand_templates_title": "ٴماتىن ارالىق اتاۋى ({{FULLPAGENAME}} ت.ب. بەتتەر ٴۇشىن):",
diff --git a/languages/i18n/kk-cyrl.json b/languages/i18n/kk-cyrl.json
index d3bed033..1753182f 100644
--- a/languages/i18n/kk-cyrl.json
+++ b/languages/i18n/kk-cyrl.json
@@ -8,7 +8,10 @@
"Daniyar",
"GaiJin",
"Kaztrans",
- "Balnur.s"
+ "Balnur.s",
+ "Нұрлан Рахымжанов",
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Сілтеменің астын сызу:",
@@ -25,6 +28,7 @@
"tog-watchdefault": "Мен өңдеген беттерді және файлдарды бақылау тізіміне қосу",
"tog-watchmoves": "Мен жылжытқан беттерді және файлдарды бақылау тізіміне қосу",
"tog-watchdeletion": "Мен жойған беттерді және файлдарды бақылау тізіміне қосу",
+ "tog-watchrollback": "Мен шегіндіруін орындаған беттерді бақылау тізіміме қосу",
"tog-minordefault": "Әдепкі бойынша барлық өңдемелерді шағын деп белгілеу",
"tog-previewontop": "Қарап шығу аумағын өңдеу терезесінің жоғарғы жағында көрсету",
"tog-previewonfirst": "Бірінші өңдегенде алдын-ала қарап шығу",
@@ -51,7 +55,7 @@
"tog-prefershttps": "Кірген кезде қауіпсіз байланысуды әрқашан қолдану",
"underline-always": "Әрқашан",
"underline-never": "Ешқашан",
- "underline-default": "Әдепкі мәнер не броузер",
+ "underline-default": "Әдепкі броузер не мәнер",
"editfont-style": "Өңдеу аумағындағы қаріп мәнері",
"editfont-default": "Негізгі браузер",
"editfont-monospace": "Бірдей енді қаріп",
@@ -210,6 +214,7 @@
"otherlanguages": "Басқа тілдерде",
"redirectedfrom": "($1 бетінен бағытталған)",
"redirectpagesub": "Бағыттау беті",
+ "redirectto": "Мына бетке бағытталған:",
"lastmodifiedat": "Бұл беттің соңғы өзгертілген кезі: $2, $1.",
"viewcount": "Бұл бет {{PLURAL:$1|бір рет|$1 уақыт}} қатыналған.",
"protectedpage": "Қорғалған бет",
@@ -230,6 +235,7 @@
"disclaimers": "Жауапкершіліктен бас тарту",
"disclaimerpage": "Project:Жауапкершіліктен бас тарту",
"edithelp": "Өндеу анықтамасы",
+ "helppage-top-gethelp": "Анықтама",
"mainpage": "Басты бет",
"mainpage-description": "Басты бет",
"policy-url": "Project:Ережелер",
@@ -334,6 +340,7 @@
"viewyourtext": "Осы беттен <strong>өңдемелеріңіздің</strong> қайнарын қарай және көшіре аласыз.",
"protectedinterface": "Бұл бет осы уикидің бағдарламалық жасақтамасы үшін интерфейс мәтінін қамтамасыз етеді және қиянаттауды болдырмау үшін қорғалған. Барлық уикилер үшін аудармаларды қосу немесе өзгерту үшін [//translatewiki.net/ translatewiki.net] MediaWiki жерсіндіру жобасын қолданыңыз.",
"editinginterface": "<strong>Ескерту:</strong> Бағдарламалық жасақтаманың тілдесу мәтінін жетістіретін бетін өңдеп жатырсыз.\nБұл беттің өзгертілуі басқа қатысушыларға пайдаланушылық интерфейсін қалай көрінетіне әсер етеді.\nБарлық уикилер үшін аудармаларды өзгерту немесе қосу үшін [//translatewiki.net/ translatewiki.net] МедиаУики жерсіндіру жобасын пайдаланыңыз.",
+ "translateinterface": "Барлық уикилерге аудармаларды қосу немесе өзгерту үшін [//translatewiki.net/ translatewiki.net] МедиаУики жерсіндіру жобасын қолданыңыз.",
"cascadeprotected": "Бұл бет өңдеуден қорғалған, себебі бұл келесі «баулы қорғауы» қосылған {{PLURAL:$1|бетке|беттерге}} кірістірілген:\n$2",
"namespaceprotected": "<strong>$1</strong> есім кеңістігіндегі беттерді өңдеу рұқсатыңыз жоқ.",
"customcssprotected": "Сіздің бұл CSS бетін өңдеуге рұқсатыңыз жоқ, себебі мұнда өзге қатысушының жеке баптауларынан тұрады.",
@@ -353,7 +360,7 @@
"virus-badscanner": "Дұрыс емес ішқұрылым. Белгісіз вирус скайнері: <em>$1</em>",
"virus-scanfailed": "скайнерлеу орындалмады (коды: $1)",
"virus-unknownscanner": "белгісіз антивирус:",
- "logouttext": "<strong>Жүйеден шықтыңыз.</strong>\n\nКейбір беттер броузеріңіздің кэшін тазартқанша әлі де жүйеге кіріп отырғаныңыздай көрінуі мүмкіндігін ескеріңіз.",
+ "logouttext": "<strong>Жүйеден шықтыңыз.</strong>\n\nКейбір беттер браузеріңіздің кэшін тазартқанша әлі де жүйеге кіріп отырғаныңыздай көрінуі мүмкіндігін ескеріңіз.",
"welcomeuser": "Қош келдіңіз, $1!",
"welcomecreation-msg": "Сіз тіркелдіңіз.\n{{SITENAME}} [[Special:Preferences|баптауларыңызды]] өзіңіз қалауыңыз бойынша өзгерте аласыз.",
"yourname": "Қатысушы аты:",
@@ -390,6 +397,8 @@
"userlogin-resetlink": "Қатысушы атын не құпия сөзді ұмыттыңыз ба?",
"userlogin-resetpassword-link": "Құпия сөздіңізді ұмыттыңыз ба?",
"userlogin-helplink2": "Кіруге көмек",
+ "userlogin-loggedin": "{{GENDER:$1|$1}} ретінде әлдеқашан кіргенсіз.\nТөмендегі пішінді басқа қатысушы кіруі ретінде қолданыңыз.",
+ "userlogin-createanother": "Басқа тіркелгі жасау",
"createacct-emailrequired": "Е-пошта мекен-жайы",
"createacct-emailoptional": "Е-пошта мекен-жайы (міндетті емес)",
"createacct-email-ph": "Е-пошта мекен-жайыңызды енгізіңіз",
@@ -529,13 +538,13 @@
"blankarticle": "<strong>Ескерту:</strong> Сіз бастамақшы болған бет бос.\nЕгер сіз «{{int:savearticle}}» дегенші қайта шертсеңіз бет қандайда бір мағлұматсыз басталады.",
"anoneditwarning": "<strong> Ескерту:</strong> Сіз жүйеге кірмегенсіз.\nIP мекенжайыңыз бұл беттің өңделу тарихында жазылып алынады.",
"anonpreviewwarning": "<em>Сіз жүйеге кірмегенсіз. IP мекенжайыңыз бұл беттің өңделу тарихында жазылып алынады.</em>",
- "missingsummary": "<strong>Ескерту:</strong> Өңдеменің қысқаша түйіндемесін енгізбепсіз.\n«{{int:savearticle}}» батырмасын қайта бассаңыз өңденмеңіз түйіндемесіз сақталады.",
+ "missingsummary": "<strong>Ескерту:</strong> Өңдеменің қысқаша түйіндемесін енгізбепсіз.\n«{{int:savearticle}}» батырмасын қайта бассаңыз өңдемеңіз түйіндемесіз сақталады.",
"missingcommenttext": "Пікіріңізді төменге енгізіңіз.",
"missingcommentheader": "<strong>Ескерту:</strong> Бұл пікірге тақырыпы/бас жолы жазбапсыз.\n«{{int:savearticle}}» түймесін тағы бассаңыз өңдемеңіз түйіндемесіз сақталады.",
"summary-preview": "Қысқаша түйіндемесін қарап шығу:",
"subject-preview": "Тақырыбын/бас жолын қарап шығу:",
"blockedtitle": "Қатысушы бұғатталған",
- "blockedtext": "<strong>Қатысушы атыңыз не IP мекенжайыңыз бұғатталған.</strong>\n\n$1 деген әкімші бұғаттаған. \nКелтірілген себебі: <em>$2</em>.\n\n* Бұғаттаудың басталғаны: $8\n* Бұғаттаудың бітетіні: $6\n* Бұғаттау нысанасы: $7\n\nОсы бұғаттауды талқылау үшін $1 не өзге [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] байланыса аласыз.\n[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын көрсетіп және де оны пайдаланудан бұғатталмаған жағдайда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, бұғатау нөмірі: #$5.\nСұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
+ "blockedtext": "<strong>Қатысушы атыңыз не IP мекенжайыңыз бұғатталған.</strong>\n\n$1 деген әкімші бұғаттаған. \nКелтірілген себебі: <em>$2</em>.\n\n* Бұғаттаған кезі: $8\n* Бұғаттаудың бітетін кезі: $6\n* Бұғаттау нысанасы: $7\n\nОсы бұғаттауды талқылау үшін $1 не өзге [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] байланыса аласыз.\n[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын көрсетіп және де оны пайдаланудан бұғатталмаған жағдайда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, бұғатау нөмірі: #$5.\nСұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
"autoblockedtext": "IP мекенжайыңыз автоматты бұғатталған, себебі оны басқа қатысушы пайдаланған. Оны $1 есімді әкімші бұғаттаған\n\nКелтірілген себебі: \n:<em>$2</em>\n\n* Бұғаттаудың басталғаны: $8\n* Бұғаттаудың бітетіні: $6\n* Бұғаттау нысанасы: $7\n\nОсы бұғаттауды талқылау үшін $1 не басқа [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] байланыса аласыз.\n[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын көрсеткен болсаңыз және де оны пайдаланудан бұғатталмаған жағдайда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, бұғатау нөмірі: $5.\nСұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
"blockednoreason": "еш себебі келтірілмеген",
"whitelistedittext": "Беттерді өңдеу үшін $1.",
@@ -581,7 +590,7 @@
"yourtext": "Мәтініңіз",
"storedversion": "Сақталған нұсқасы",
"nonunicodebrowser": "<strong>Ескерту: Шолғышыңыз Юникод белгілеуіне үйлесімді емес</strong>\nЖұмыс істеуге ықтималдық беру үшін төмендегі кірістіру орнында ASCII емес таңбалар оналтылық кодымен көрсетіледі.",
- "editingold": "<strong>Ескерту: Осы беттің бұрыңғы нұсқасын өңдеудесіз.</strong>\nБұны сақтасаңыз осы нұсқадан кейінгі барлық өзгерістер жоғалады.",
+ "editingold": "<strong>Ескерту: Осы беттің бұрынғы нұсқасын өңдеудесіз.</strong> Бұны сақтасаңыз осы нұсқадан кейінгі барлық өзгерістер жоғалады.",
"yourdiff": "Айырмашылықтар",
"copyrightwarning": "{{SITENAME}} жобасына қосқан барлық үлестеріңіз $2 (көбірек ақпарат үшін: $1) аясында жарияланатынын ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін және ақысыз көпшілікке таралуын қаламасаңыз мұнда жарияламаңыз<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз.\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!</strong>",
"copyrightwarning2": "{{SITENAME}} жобасына қосқан барлық үлестеріңізді басқа үлескерлер өңдеуге, өзгертуге немесе аластауы мүмкін екенін ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін қаламасаңыз осында жарияламаңыз.<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз. (көбірек ақпарат үшін $1 құжатын қараңыз).\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!",
@@ -624,6 +633,7 @@
"content-model-text": "қалыпты мәтін",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "duplicate-args-category": "Үлгіні шақыруда қабатталып тұрған аргументтер қолданған беттер",
"expensive-parserfunction-warning": "<strong>Ескерту:</strong> Бұл бет тым көп шығыс алатын құрылым талдатқыш жетелер шақыруынан тұрады.\n\nБұл $2 {{PLURAL:$2|шақыру|шақырулар}} шамасынан кем болуы керек, осы арада {{PLURAL:$1|қазір $1 шақыру|қазір $1 шақыру}}.",
"expensive-parserfunction-category": "Шығыс алатын құрылым талдатқыш жетелерінің тым көп шақырымы бар беттер",
"post-expand-template-inclusion-warning": "<strong>Ескерту:</strong> Үлгі кірістіру мөлшері тым үлкен.\nКейбір үлгілер кірістірілмейді.",
@@ -738,7 +748,6 @@
"mergehistory-same-destination": "Бастапқы және мақсатты беттер бірдей болмауы керек",
"mergehistory-reason": "Себебі:",
"mergelog": "Біріктіру журналы",
- "pagemerge-logentry": "[[$1]] деген [[$2]] дегенге біріктірілді ($3 дейінгі түзетулері)",
"revertmerge": "Біріктіруді болдырмау",
"mergelogpagetext": "Төменде бір беттің тарихы өзге бетке біріктіру ең соңғы тізімі келтіріледі.",
"history-title": "«$1» дегеннің өңделу тарихы",
@@ -755,7 +764,7 @@
"diff-multi-manyusers": "($2-(ден<sup>4</sup>) көп {{PLURAL:$2|қатысуышының|қатысушының}} арадағы {{PLURAL:$1|бір түзетуі|$1 түзетуі}} көрсетілмеген)",
"difference-missing-revision": "Бұл ($1) {{PLURAL:$2|нұсқа|$2 нұсқалар}} айырмашылығы табылмады.\n\n\nБұл әлте жойылған беттің нұсқалар айырмашылығының сілтемесі.\nЕгжей-тегжейін [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} жою журналынан] таба аласыз.",
"searchresults": "Іздеу нәтижелері",
- "searchresults-title": "\"$1\" сұранымына табылған нәтижелер",
+ "searchresults-title": "«$1» сұранымына табылған нәтижелер",
"titlematches": "Бет атауы сәйкес келеді",
"textmatches": "Бет мәтіні сәйкес келеді",
"notextmatches": "Еш бет мәтіні сәйкес емес",
@@ -779,6 +788,7 @@
"search-result-category-size": "{{PLURAL:$1|1 мүше|$1 мүше}} ({{PLURAL:$2|1 санатша|$2 санатша}}, {{PLURAL:$3|1 файл|$3 файл}})",
"search-redirect": "(айдағыш $1)",
"search-section": "(бөлім $1)",
+ "search-category": "(Санат:$1)",
"search-suggest": "Мүмкін осы болар: $1",
"search-interwiki-caption": "Бауырлас жобалар",
"search-interwiki-default": "$1 дегеннен нәтиже:",
@@ -787,6 +797,7 @@
"searchrelated": "қатысты",
"searchall": "барлық",
"showingresults": "Төменде нөмір '''$2''' орнынан бастап барынша '''$1''' нәтиже көрсетіледі.",
+ "search-showingresults": "{{PLURAL:$4|Табылған <strong>$3</strong> нәтиженің <strong>$1</strong> нәтижесі көрсетілген|Табылған <strong>$3</strong> нәтиженің <strong>$1 - $2</strong> аралығы көрсетілген}}",
"search-nonefound": "Сұрауға сәйкес нәтижелер табылмады.",
"powersearch-legend": "Кеңейтілген іздеу",
"powersearch-ns": "Атау кеңістіктері бойынша іздеу:",
@@ -902,7 +913,7 @@
"userrights-lookup-user": "Қатысушы топтарын реттеу",
"userrights-user-editname": "Қатысушы атын енгізіңіз:",
"editusergroup": "Қатысушы топтарын өңдеу",
- "editinguser": "'''[[User:$1|$1]]''' $2 есімді қатысушының құқықтарын өзгерту",
+ "editinguser": "<strong>[[User:$1|$1]]</strong> $2 есімді қатысушының құқықтарын өзгерту",
"userrights-editusergroup": "Қатысушы топтарын өңдеу",
"saveusergroups": "Қатысушы топтарын сақтау",
"userrights-groupsmember": "Мүшелігі:",
@@ -1078,7 +1089,7 @@
"rcshowhideanons": "Кірмегендерді $1",
"rcshowhideanons-show": "көрсету",
"rcshowhideanons-hide": "жасыру",
- "rcshowhidepatr": "Зерттелген өңдемелерді $1",
+ "rcshowhidepatr": "Тексерілген өңдемелерді $1",
"rcshowhidepatr-show": "көрсету",
"rcshowhidepatr-hide": "жасыру",
"rcshowhidemine": "Өңдемелерімді $1",
@@ -1095,7 +1106,7 @@
"number_of_watching_users_pageview": "[бақылаған $1 қатысушы]",
"rc_categories": "Санаттарға шектеу (\"|\" белгісімен бөліктеңіз)",
"rc_categories_any": "Кез келген",
- "rc-change-size-new": "Өңдеуден кейінгі көлемі: $1{{PLURAL:$1|байт|байт}}",
+ "rc-change-size-new": "Өңдеуден кейінгі көлемі: $1 {{PLURAL:$1|байт|байт}}",
"newsectionsummary": "/* $1 */ жаңа бөлім",
"rc-enhanced-expand": "Толық ақпаратты көрсету",
"rc-enhanced-hide": "Толық ақпаратты жасыру",
@@ -1206,6 +1217,7 @@
"license": "Лицензияландыруы:",
"license-header": "Лицензияландыруы",
"nolicense": "Ештеңе таңдалмаған",
+ "licenses-edit": "Лицензия талғауларын өңдеу",
"license-nopreview": "(Қарап шығу жетімді емес)",
"upload_source_url": "(жарамды, баршаға қатынаулы URL)",
"upload_source_file": "(компьютеріңіздегі файл)",
@@ -1300,7 +1312,6 @@
"statistics": "Санақ",
"statistics-header-pages": "Беттер статистикасы",
"statistics-header-edits": "Өңдеулер статистикасы",
- "statistics-header-views": "Қаралу статистикасы",
"statistics-header-users": "Қатысушы статистикасы",
"statistics-header-hooks": "Басқа статистикалар",
"statistics-articles": "Мақалалар саны",
@@ -1309,13 +1320,9 @@
"statistics-files": "Жүктелген файлдар",
"statistics-edits": "{{SITENAME}} құрылғанан бергі бет өңдеулері",
"statistics-edits-average": "Әр бетке шаққандағы өңдеулердің орташа саны",
- "statistics-views-total": "Барлық қаралулар",
- "statistics-views-total-desc": "Қаралуларға бар болмаған беттер және арнайы беттер кірмейді",
- "statistics-views-peredit": "Өңдеуге шаққанда қаралулар",
"statistics-users": "Тіркелген қатысушылар [[Special:ListUsers|(тізім)]]",
"statistics-users-active": "Белсенді қатысушылар",
"statistics-users-active-desc": "Соңғы {{PLURAL:$1|күнде|$1 күнде}} қандай да бір іс-әрекет жасаған қатысушылар",
- "statistics-mostpopular": "Ең көп қаралған беттер",
"pageswithprop": "Беттер бет сипатымен",
"pageswithprop-legend": "Беттер бет сипатымен",
"pageswithprop-prop": "Меншік атауы:",
@@ -1340,8 +1347,8 @@
"nmemberschanged": "$1 → $2 {{PLURAL:$2|мүше|мүше}}",
"nrevisions": "$1 {{PLURAL:$1|түзету|түзету}}",
"nviews": "$1 {{PLURAL:$1|қаралу|қаралу}}",
- "nimagelinks": "$1 {{PLURAL:$1|бетінде|беттерінде}} қолданылады",
- "ntransclusions": "$1 {{PLURAL:$1|бетінде|беттерінде}} қолданылады",
+ "nimagelinks": "$1 {{PLURAL:$1|бетте|бетте}} қолданылады",
+ "ntransclusions": "$1 {{PLURAL:$1|бетте|бетте}} қолданылады",
"specialpage-empty": "Бұл сұраныс бойынша нәтиже жоқ.",
"lonelypages": "Еш беттен сілтелмеген беттер",
"lonelypagestext": "Келесі беттерге {{SITENAME}} жобасындағы басқа беттерінің ішіндегі кірікбеттер сілтемейді.",
@@ -1351,7 +1358,6 @@
"uncategorizedtemplates": "Санатсыз үлгілер",
"unusedcategories": "Пайдаланылмаған санаттар",
"unusedimages": "Пайдаланылмаған файлдар",
- "popularpages": "Ең көп қаралған беттер",
"wantedcategories": "Басталмаған санаттар",
"wantedpages": "Басталмаған беттер",
"wantedfiles": "Басталмаған файлдар",
@@ -1407,7 +1413,6 @@
"querypage-disabled": "Бұл арнайы бет өнімділік себептері үшін өшірілген",
"booksources": "Кітап қайнарлары",
"booksources-search-legend": "Кітап қайнарларын іздеу",
- "booksources-go": "Өту",
"booksources-text": "Төменде жаңа және қолданған кітаптар сататын тораптарының сілтемелері тізімделген және ізделген кітаптар туралы қосымша ақпарат болуы мүмкін:",
"specialloguserlabel": "Орындаушы:",
"speciallogtitlelabel": "Нысана (атауы немесе қатысушы):",
@@ -1483,7 +1488,7 @@
"emailuser-title-notarget": "Қатысушы е-поштасы",
"emailpage": "Қатысушыға хат жазу",
"emailpagetext": "Төмендегі пішін арқылы бұл {{GENDER:$1|қатысушыға}} е-пошта хабарламасын жөнелтуге болады.\n[[Special:Preferences|Қатысушы баптауыңызда]] енгізген е-пошта мекенжайыңыз «Кімнен» деген бас жолағында көрінеді, сондықтан хат алушысы тура жауап бере алады.",
- "defemailsubject": "\"$1\" есімді қатысушының {{SITENAME}} е-поштасының хаты",
+ "defemailsubject": "«$1» есімді қатысушының {{SITENAME}} е-поштасының хаты",
"usermaildisabled": "Қатысушының электронды поштасы қосылмаған",
"usermaildisabledtext": "Бұл уикиде басқа қатысушыларға хат жібере алмайсыз",
"noemailtitle": "Еш е-пошта мекенжайы жоқ",
@@ -1525,7 +1530,7 @@
"wlheader-enotif": "Ескерту хат жіберуі қосылған.",
"wlheader-showupdated": "Соңғы келіп-кетуіңізден бері өзгертілген беттер '''жуан''' қаріпімен көрсетіледі.",
"wlnote": "Төменде $3, $4 кезіне дейінгі соңғы {{PLURAL:$2|сағатта|'''$2''' сағатта}} болған, {{PLURAL:$1|жуықтағы өзгеріс|жуықтағы '''$1''' өзгеріс}} көрсетіледі.",
- "wlshowlast": "Соңғы $1 сағаттағы, $2 күндегі, $3 болған өзгерісті көрсету",
+ "wlshowlast": "Соңғы $1 сағаттағы, $2 күндегі, болған өзгерісті көрсету",
"watchlist-options": "Бақылау тізімінің баптаулары",
"watching": "Бақылауда…",
"unwatching": "Бақыламауда…",
@@ -1573,7 +1578,6 @@
"delete-warning-toobig": "Бұл бетте үлкен өңдеу тарихы бар, $1 {{PLURAL:$1|түзетуден|түзетуден}} астам.\nБұның жоюы {{SITENAME}} торабындағы дерекқор әрекеттерді үзіп тастауын мүмкін;\nбұны абайлап өткізіңіз.",
"deleting-backlinks-warning": "'''Ескерту:''' Сіз жоймақшы болған бетке [[Special:WhatLinksHere/{{FULLPAGENAME}}|басқа беттерден]] сілтенген немесе [[Special:WhatLinksHere/{{FULLPAGENAME}}|басқа беттерге]] кірістірілген.",
"rollback": "Өңдемелерді шегіндіру",
- "rollback_short": "Шегіндіру",
"rollbacklink": "шегіндіру",
"rollbacklinkcount": "$1 {{PLURAL:$1|өңдемені|өңдемені}} шегіндіру",
"rollbacklinkcount-morethan": "$1-нан аса {{PLURAL:$1|өңдемені|өңдемелерді}} шегіндіру",
@@ -1590,7 +1594,7 @@
"protectlogtext": "Төменде беттердің қорғау/қорғамау тізімі берілген.\nАғымдағы қорғау әректтер бар беттер үшін [[Special:ProtectedPages|қорғалған беттер тізімін]] қараңыз.",
"protectedarticle": "«[[$1]]» бетін қорғады",
"modifiedarticleprotection": "«[[$1]]» бетінің қорғалу деңгейін өзгертті",
- "unprotectedarticle": "«[[$1]]» дегеннен қорғалуын жылжытты",
+ "unprotectedarticle": "«[[$1]]» бетінің қорғалуын аластады",
"movedarticleprotection": "қорғалу баптауларын «[[$2]]» дегеннен «[[$1]]» дегенге жылжытты",
"protect-title": "«$1» қорғау деңгейін өзгерту",
"protect-title-notallowed": "«$1» қорғалу деңгейін қарау",
@@ -1647,10 +1651,10 @@
"undelete-fieldset-title": "Нұсқаларды қалпына келтіру",
"undeleteextrahelp": "Толық бет тарихын қалпына келтіру үшін барлық құсбелгі көздерді босатып <strong><em>{{int:undeletebtn}}</em></strong> батырмасын нұқыңыз.\nБөлектеумен қалпына келтіруді орындау үшін қалпына келтіру керек түзетулеріне сәйкес көздерге құсбелгімен белгілеп <strong><em>{{int:undeletebtn}}</em></strong> батырмасын басыңыз.",
"undeleterevisions": "$1 түзету мұрағатталды",
- "undeletehistory": "Егер бетті қалпына келтірсеңіз тарихына барлық түзетулер де қалпына келтіріледі. \nЕгер жоюдан соң дәл солай атауымен жаңа бет басталса қалпына келтірілген түзетулер бұрыңғы өңделу тарихында көрсетіледі.",
+ "undeletehistory": "Егер бетті қалпына келтірсеңіз тарихындағы барлық түзетулер де қалпына келтіріледі. Егер жоюдан соң дәл солай атауымен жаңа бет басталса қалпына келтірілген түзетулер бұрынғы өңделу тарихында көрсетіледі.",
"undeleterevdel": "Егер бұл үстіңгі бетте аяқталса, не файл түзетуі жарым-жартылай жойылған болса, жою болдырмауы орындалмайды.\nОсындай жағдайларда, ең жаңа жойылған түзетуін алып тастауыңыз не жасыруын болдырмауыңыз жөн.",
"undeletehistorynoadmin": "Бұл бет жойылған.\nЖою себебі алдындағы өңдеген қатысушылар егжей-тегжейлерімен бірге төмендегі қысқаша мазмұндамасында көрсетілген.\nМына жойылған түзетулерін көкейкесті мәтіні тек әкімшілерге жетімді.",
- "undelete-revision": "$4, $5 кезіндегі $3 жойған $1 дегеннің жойылған түзетуі:",
+ "undelete-revision": "$4, $5 кезіндегі $3 жасаған $1 дегеннің жойылған түзетуі:",
"undeleterevision-missing": "Жарамсыз не жоғалған түзету.\nСілтемеңіз жарамсыз, не түзету қалпына келтірілген, немесе мұрағаттан аласталған болуы мүмкін.",
"undelete-nodiff": "Еш алдыңғы түзету табылмады.",
"undeletebtn": "Қалпына келтір!",
@@ -1753,7 +1757,7 @@
"ipb-unblock-addr": "$1 дегенді бұғаттауынан босату",
"ipb-unblock": "Қатысушы атын немесе IP мекенжайын бұғаттамау",
"ipb-blocklist": "Бұғатталғандарды қарау",
- "ipb-blocklist-contribs": "$1 есімді қатысушының үлесі",
+ "ipb-blocklist-contribs": "{{GENDER:$1|$1}} есімді қатысушының үлесі",
"unblockip": "Қатысушыны бұғаттауынан босату",
"unblockiptext": "Төмендегі форманы IP мекенжайымен не қатысушы есімімен алдын-ала бұғатталған қатысушыға жазу рұқсатын қалпына келтіріу үшін қолданыңыз.",
"ipusubmit": "Осы бұғаттауды алып тастау",
@@ -1795,10 +1799,11 @@
"blocklog-showlog": "Бұл қатысушы ұдайы бұғатталып отырған.\nДерек үшін төменде бұғатталу журналы берілген:",
"blocklog-showsuppresslog": "Бұл қатысушы ұдайы жасырылып және бұғатталып отырған.\nДерек үшін төменде жасыру журналы берілген:",
"blocklogentry": "[[$1]] дегенді $2 мерзімге бұғаттады $3",
+ "reblock-logentry": "[[$1]] дегеннің бұғатталу мерзімінің аяқталуын $2 $3 дегенге өзгертті.",
"blocklogtext": "Бұл қатысушыларды бұғаттау және бұғаттауынан босату әрекеттерінің журналы.\nӨздіктік бұғатталған IP мекенжайлар тізімделмеген.\nҚазіргі уақыттағы белсенді тиымдар мен бұғаттауларды [[Special:BlockList|бұғаттау тізімінен]] қараңыз.",
"unblocklogentry": "$1 есімді қатысушыны бұғаттауынан босатты",
"block-log-flags-anononly": "тек аноним қатысушылар",
- "block-log-flags-nocreate": "тіркелу өшірілген",
+ "block-log-flags-nocreate": "тіркелуін өшірді",
"block-log-flags-noautoblock": "автобұғаттау өшірілген",
"block-log-flags-noemail": "е-пошта өшірілген",
"block-log-flags-nousertalk": "өз талқылау бетін өңдей алмайтындай ету",
@@ -1836,12 +1841,12 @@
"databasenotlocked": "Дерекқор құлыпталған жоқ.",
"move-page": "«$1» дегенді жылжыту",
"move-page-legend": "Бетті жылжыту",
- "movepagetext": "Бетті бүкіл тарихымен қоса жаңа атауға жылжытқалы жатырсыз.\nБеттің бұрыңғы атауы жаңа бетке айдағыш сілтеме ретінде қалады.\nҚаласаңыз, бұрыңғы атауды мегзейтін сілтемелердің автоматты түрде жаңартылуын таңдай аласыз. Бұны таңдамаған жағдайда, [[Special:DoubleRedirects|екі мәрте айдағыш]] не [[Special:BrokenRedirects|сынық айдағыш]] сілтемелер қалып қоймауына көз жеткізіңіз.\nЖылжытудан кейін әр сілтеме өзіне тиісті бетке мегзейтініне жауапты боласыз.\n\nЕгер жылжытайын деп жатқан жаңа атау басқа бетке әлдеқашан берілген болса, жылжыту <strong>орындалмайды</strong>. Бұл шара әлдеқашан бар беттің қайта жазылуынан сақтайды. Алайда, егер бет — бос бет, не өткен тарихы жоқ [[Special:ListRedirects|айдағыш бет]] болса, жылжыту орындалады. Бұл жаңылыс жылжытылған бетті бұрыңғы атауына қайтаруды мүмкін ету үшін жасалған.\n\n\n</strong>Ескерту!</strong>\nБұл көп қаралатын бет үшін қатаң және күтілмеген өзгеріс болуы мүмкін;\nілгері басудан бұрын әрекетіңіздің салдарын есепке алуыңызды сұраймыз.",
- "movepagetext-noredirectfixer": "Бетті бүкіл тарихымен қоса жаңа атауға жылжытқалы жатырсыз.\nБеттің бұрыңғы атауы жаңа бетке айдағыш сілтеме ретінде қалады.\n[[Special:DoubleRedirects|Екі мәрте айдағыш]] не [[Special:BrokenRedirects|сынық айдағыш]] сілтемелер қалып қоймауына көз жеткізіңіз.\nЖылжытудан кейін әр сілтеме өзіне тиісті бетке мегзейтініне жауапты боласыз.\n\nЕгер жылжытайын деп жатқан жаңа атау басқа бетке әлдеқашан берілген болса, жылжыту '''орындалмайды'''. Бұл шара әлдеқашан бар беттің қайта жазылуынан сақтайды. Алайда, егер бет — бос бет, не өткен тарихы жоқ [[Special:ListRedirects|айдағыш бет]] болса, жылжыту орындалады. Бұл жаңылыс жылжытылған бетті бұрыңғы атауына қайтаруды мүмкін ету үшін жасалған.\n\n\n'''Ескерту!'''\nБұл көп қаралатын бетке тиісті өзгеріс болуы мүмкін;\nілгері басудан бұрын әрекетіңіздің салдарын есепке алуыңызды сұраймыз.",
+ "movepagetext": "Бетті бүкіл тарихымен қоса жаңа атауға жылжытқалы жатырсыз. Беттің бұрынғы атауы жаңа бетке айдағыш сілтеме ретінде қалады. Қаласаңыз, бұрынғы атауды мегзейтін сілтемелердің автоматты түрде жаңартылуын таңдай аласыз. Бұны таңдамаған жағдайда, [[Special:DoubleRedirects|екі мәрте айдағыш]] не [[Special:BrokenRedirects|сынық айдағыш]] сілтемелер қалып қоймауына көз жеткізіңіз. Жылжытудан кейін әр сілтеме өзіне тиісті бетке мегзейтініне жауапты боласыз. Егер жылжытайын деп жатқан жаңа атау басқа бетке әлдеқашан берілген болса, жылжыту <strong>орындалмайды</strong>. Бұл шара әлдеқашан бар беттің қайта жазылуынан сақтайды. Алайда, егер бет - бос бет, не өткен тарихы жоқ [[Special:ListRedirects|айдағыш бет]] болса, жылжыту орындалады. Бұл жаңылыс жылжытылған бетті бұрынғы атауына қайтаруды мүмкін ету үшін жасалған. </strong>Ескерту!</strong> Бұл көп қаралатын бет үшін қатаң және күтпеген өзгеріс болуы мүмкін; ілгері басудан бұрын әрекетіңіздің салдарын есепке алуыңызды сұраймыз.",
+ "movepagetext-noredirectfixer": "Бетті бүкіл тарихымен қоса жаңа атауға жылжытқалы жатырсыз. Беттің бұрынғы атауы жаңа бетке айдағыш сілтеме ретінде қалады. [[Special:DoubleRedirects|Екі мәрте айдағыш]] не [[Special:BrokenRedirects|сынық айдағыш]] сілтемелер қалып қоймауына көз жеткізіңіз. Жылжытудан кейін әр сілтеме өзіне тиісті бетке мегзейтініне жауапты боласыз. Егер жылжытайын деп жатқан жаңа атау басқа бетке әлдеқашан берілген болса, жылжыту \"'орындалмайды\"'. Бұл шара әлдеқашаннан бар, беттің қайта жазылуынан сақтайды. Алайда, егер бет - бос бет, не өткен тарихы жоқ [[Special:ListRedirects|айдағыш бет]] болса, жылжыту орындалады. Бұл жаңылыс жылжытылған бетті бұрынғы атауына қайтаруды мүмкіндік беру үшін жасалған. \"'Ескерту!\"' Бұл көп қаралатын бетке тиісті өзгеріс болуы мүмкін; ілгері басудан бұрын әрекетіңіздің салдарын есепке алуыңызды сұраймыз.",
"movepagetalktext": "Келесі жағдай орын алса, қатысты талқылау беті '''жылжытылмайды''':\n*жаңа атаумен аталатын беттің талқылау беті әлдеқашан бар болған кезде (бұл жағдайда талқылауын қолмен көшіруге болады, бірақ түйіндемесіне қай беттен көшірілгендігін міндетті түрде жазыңыз)\n*төмендегі қорапшадан құсбелгі алынып тасталғанда.\n\nАл мақаланың атауын өзгертем деп мағлұматын қолмен көшіруге болмайды, себебі беттің түзету тарихын өшіреді.",
"movearticle": "Бетті жылжыту:",
"moveuserpage-warning": "<strong>Ескерту:</strong> Сіз қатысушы бетін жылжытпақшысыз. Назар аударыңыз, қатысушы беті ғана жылжытылуы мүмкін және қатысушы аты <em>өзгертілмейді</em>.",
- "movecategorypage-warning": "<strong>Ескерту:</strong> Сіз санат бетінің атауын өзгерткелі жатырсыз. Бұл әрекетіңізде санат атауы ғана өзгерте аласыз сондықтан санаттың бұрыңғы атауындағы қандай да бір бет санаттың жаңа атауына өздігінен <em>санатталмайтыны</em> есіңізде болсын. Санаттың бұрыңғы атауындағы беттері мен санатшаларын жаңа атауына қайта санаттап шығуға тура келеді.",
+ "movecategorypage-warning": "<strong>Ескерту:</strong> Сіз санат бетінің атауын өзгерткелі жатырсыз. Бұл әрекетіңізде санат атауы ғана өзгерте аласыз, сондықтан санаттың бұрынғы атауындағы қандай да бір бет санаттың жаңа атауына өздігінен <em>санатталмайтыны</em> есіңізде болсын. Санаттың бұрынғы атауындағы беттері мен санатшаларын жаңа атауына қайта санаттап шығуға тура келеді.",
"movenologintext": "Бетті жылжыту үшін тіркелген қатысуышы болуыңыз және [[Special:UserLogin|кіруіңіз]] керек.",
"movenotallowed": "{{SITENAME}} жобасында беттерді жылжытуға рұқсатыңыз жоқ.",
"movenotallowedfile": "Файлдарды жылжытуға рұқсатыңыз жоқ.",
@@ -1855,6 +1860,7 @@
"pagemovedsub": "Бет жылжытылды",
"movepage-moved": "<strong>«$1» беті «$2» бетіне жылжытылды</strong>",
"movepage-moved-redirect": "Айдатқыш жасалды.",
+ "movepage-moved-noredirect": "Бағыттау беті басталуы жасырылды.",
"articleexists": "Осылай аталған бет әлдақашан бар немесе таңдаған атауыңыз жарамды емес.\nБасқа атауды таңдаңыз.",
"cantmove-titleprotected": "Бетті осы орынға жылжыта алмайсыз, себебі жаңа тақырып аты бастаудан қорғалған",
"movetalk": "Қатысты талқылау бетін де жылжыту",
@@ -1874,7 +1880,7 @@
"delete_and_move": "Жою және жылжыту",
"delete_and_move_text": "== Жоюды қажет етеді ==\nТағайындалған «[[:$1]]» беті әлдеқашан бар.\nЖылжытуға жол беру үшін бұны жойғыңыз келе ме?",
"delete_and_move_confirm": "Иә, бұл бетті жой",
- "delete_and_move_reason": "\"[[$1]]\" дегеннен жылжытуға жол беру үшін жойылған",
+ "delete_and_move_reason": "«[[$1]]» дегеннен жылжытуға жол беру үшін жойылған",
"selfmove": "Қайнар және нысана тақырып аттары бірдей;\nбет өзінің үстіне жылжытылмайды.",
"immobile-source-namespace": "\"$1\" есім кеңістігіндегі беттер жылжытылмайды",
"immobile-target-namespace": "\"$1\" есім кеңістігіне беттерді жылдытылмайды",
@@ -1943,7 +1949,7 @@
"importunknownsource": "Cырттан алынатын қайнар түрі белгісіз",
"importcantopen": "Сырттан алынатын файл ашылмайды",
"importbadinterwiki": "Жарамсыз уики-аралық сілтеме",
- "importsuccess": "Сырттан алу аяқталды!",
+ "importsuccess": "Импорттау аяқталды!",
"importnosources": "Уики-апару үшін сырттан алынатын еш қайнар көзі анықталмаған, және тарихын тікелей қотарып беруі өшірілген.",
"importnofile": "Сырттан алынған файл жүктелген жоқ.",
"importuploaderrorsize": "Импортталған файлдың жүктелуі сәтсіз болды. \nФайл рұқсат етілгеннен жүктеу өлшемінен үлкенірек.",
@@ -1959,9 +1965,7 @@
"import-options-wrong": "Қате {{PLURAL:$2|параметр|параметр}}: <nowiki>$1</nowiki>",
"importlogpage": "Сырттан алу журналы",
"importlogpagetext": "Беттерді түзету тарихымен бірге сыртқы уикилерден әкімші ретінде алу.",
- "import-logentry-upload": "«[[$1]]» дегенді файл жүктеу арқылы сырттан алды",
"import-logentry-upload-detail": "$1 түзету",
- "import-logentry-interwiki": "уики-апарылған $1",
"import-logentry-interwiki-detail": "$2 дегеннен $1 түзету",
"javascripttest": "JavaScript сынақталуда",
"javascripttest-qunit-intro": "[$1 сынақтау құжаттамасын] mediawiki.org-тен қара.",
@@ -2003,6 +2007,7 @@
"tooltip-feed-atom": "Бұл беттің Atom арнасы",
"tooltip-t-contributions": "Осы қатысушының үлестерінің тізімі",
"tooltip-t-emailuser": "Осы қатысушыға хат жөнелту",
+ "tooltip-t-info": "Бұл бет туралы көбірек мәлімет",
"tooltip-t-upload": "Файлдарды жүктеу",
"tooltip-t-specialpages": "Барлық арнайы беттер тізімі",
"tooltip-t-print": "Бұл беттің басып шығарышқа арналған нұсқасы",
@@ -2050,7 +2055,7 @@
"spambot_username": "MediaWiki spam cleanup",
"spam_reverting": "$1 дегенге сілтемелері жоқ соңғы нұсқасына қайтарылды",
"spam_blanking": "$1 дегенге сілтемелері бар барлық түзетулер тазартылды",
- "pageinfo-title": "\"$1\" беті туралы мәлімет",
+ "pageinfo-title": "«$1» беті туралы мәлімет",
"pageinfo-header-basic": "Негізгі ақпарат",
"pageinfo-header-edits": "Өңдеу тарихы",
"pageinfo-header-restrictions": "Бет қорғалуы",
@@ -2064,7 +2069,6 @@
"pageinfo-robot-policy": "Индекстеуді робот жүргізуге",
"pageinfo-robot-index": "рұқсат берілген",
"pageinfo-robot-noindex": "рұқсат етілмеген",
- "pageinfo-views": "Қараушылар саны",
"pageinfo-watchers": "Бетті қараушылар саны",
"pageinfo-few-watchers": "$1 азырақ {{PLURAL:$1|қараушы|қараушы}}",
"pageinfo-redirects-name": "Бұл бетке бағытталғандар саны",
@@ -2102,8 +2106,8 @@
"markedaspatrollederror": "Зерттелді деп белгіленбейді",
"markedaspatrollederrortext": "Зерттелді деп белгілеу үшін түзетуді келтіріңіз.",
"markedaspatrollederror-noautopatrol": "Өз жасаған өзгерістеріңізді зерттелді деп белгілей алмайсыз.",
- "patrol-log-page": "Зерттеу журналы",
- "log-show-hide-patrol": "$1 зерттеу журналы",
+ "patrol-log-page": "Тексеру журналы",
+ "log-show-hide-patrol": "$1 тексеру журналы",
"deletedrevision": "Ескі түзетуін жойды: $1",
"filedeleteerror-short": "Файл жою қатесі: $1",
"filedeleteerror-long": "Файлды жойғанда қателер кездесті:\n\n$1",
@@ -2441,7 +2445,6 @@
"exif-urgency-normal": "Қалыпты ($1)",
"exif-urgency-low": "Төмен ($1)",
"exif-urgency-high": "Жоғары ($1)",
- "watchlistall2": "барлық",
"namespacesall": "барлығы",
"monthsall": "барлығы",
"confirmemail": "Е-пошта мекенжайын құптау",
@@ -2567,7 +2570,6 @@
"hebrew-calendar-m11-gen": "абтың",
"hebrew-calendar-m12-gen": "айлолдың",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|талқылауы]])",
- "unknown_extension_tag": "Белгісіз кеңейтпе белгісі \"$1\"",
"version": "Нұсқа",
"version-extensions": "Орнатылған кеңейтімдер",
"version-skins": "Орнатылған мәнерлер",
@@ -2582,7 +2584,7 @@
"version-parser-function-hooks": "Құрылымдық талдатқыш жетелерінің тұзақтары",
"version-hook-name": "Тұзақ атауы",
"version-hook-subscribedby": "Тұзақ тартқыштары",
- "version-version": "(Нұсқасы: $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[аты жоқ]",
"version-license": "MediaWiki Лицензиясы",
"version-ext-license": "Лицензия",
@@ -2619,7 +2621,7 @@
"fileduplicatesearch-result-n": "«$1» файлына тең $2 телнұсқасы бар.",
"fileduplicatesearch-noresults": "\"$1\" атауымен файл табылмады.",
"specialpages": "Арнайы беттер",
- "specialpages-note": "* Қалпты арнайы беттер.\n* <span class==\"mw-specialpagerestricted\">Шектелген арнайы беттер.</span>",
+ "specialpages-note": "* Қалыпты арнайы беттер. \n* <span class==\"mw-specialpagerestricted\">Шектелген арнайы беттер.</span>",
"specialpages-group-maintenance": "Техникалық талқылау есептері",
"specialpages-group-other": "Тағы басқа арнайы беттер",
"specialpages-group-login": "Кіру / тіркелу",
@@ -2670,7 +2672,7 @@
"logentry-delete-event": "$1 $3 бетіндегі {{PLURAL:$5|журнал оқиғасы|$5 журнал оқиғасы}} көрінісін {{GENDER:$2|өзгертті}}: $4",
"logentry-delete-revision": "$1 $3 бетіндегі {{PLURAL:$5|нұсқа|$5 нұсқа}} көрінісін {{GENDER:$2|өзгертті}}: $4",
"logentry-suppress-event": "$1 $3 бетіндегі {{PLURAL:$5|журнал оқиғасы|$5 журнал оқиғасы}} көрінісін құпия түрде {{GENDER:$2|өзгертті}}: $4",
- "revdelete-content-hid": "мағлұмат жасырылған",
+ "revdelete-content-hid": "мағлұматын жасырыды",
"revdelete-summary-hid": "өңдеу түйіндемесі жасырылған",
"revdelete-uname-hid": "қатысушы есімі жасырылған",
"revdelete-content-unhid": "мағлұматы жасырылмаған",
@@ -2678,6 +2680,7 @@
"revdelete-uname-unhid": "қатысушы есімі жасырылмаған",
"revdelete-restricted": "әкімшілерге тиымдар қолдады",
"revdelete-unrestricted": "әкімшілерден тиымдарды аластады",
+ "logentry-block-unblock": "$1 {{GENDER:$4|$3}} деген қатысушыны {{GENDER:$2|бұғатынан босатты}}",
"logentry-move-move": "$1 $3 бетін $4 бетіне {{GENDER:$2|жылжытты}}",
"logentry-move-move-noredirect": "$1 $3 бетін $4 бетіне {{GENDER:$2|жылжытты}} (айдатқыш қалдырмады)",
"logentry-move-move_redir": "$1 $3 бетін $4 деген айдатқыш үстіне {{GENDER:$2|жылжытты}}",
@@ -2687,17 +2690,21 @@
"logentry-newusers-create2": "$1 $3 деген аккаунт {{GENDER:$2|тіркеді}}",
"logentry-newusers-byemail": "$1 $3 деген аккаунт {{GENDER:$2|тіркеді}} және құпия сөзі е-пошта арқылы жіберілді",
"logentry-newusers-autocreate": "$1 қатысушы аккаунтын автоматты түрде {{GENDER:$2|тіркеді}}",
- "logentry-rights-rights": "$1 $3 үшін топ мүшелігін $4 дегеннен $5 дегенге {{GENDER:$2|өзгерті}}",
+ "logentry-rights-rights": "$1 $3 үшін топ мүшелігін $4 дегеннен $5 дегенге {{GENDER:$2|өзгертті}}",
"logentry-rights-rights-legacy": "$1 $3 үшін топ мүшелігін {{GENDER:$2|өзгерті}}",
+ "logentry-upload-upload": "$1 $3 файлын {{GENDER:$2|жүктеді}}",
+ "logentry-upload-overwrite": "$1 $3 дегеннің жаңа нұсқасын {{GENDER:$2|жүктеді}}",
+ "log-name-managetags": "Тег басқару журналы",
"rightsnone": "(ешқандай)",
- "feedback-subject": "Тақырып:",
- "feedback-message": "Хабарлама:",
- "feedback-cancel": "Болдырмау",
- "feedback-submit": "Кері байланысты жіберу",
+ "revdelete-summary": "өңдеменің қысқаша мазмұндамасы",
"feedback-adding": "Бетке кері байланыс қосуда...",
+ "feedback-cancel": "Болдырмау",
+ "feedback-close": "Жасалды",
"feedback-error2": "Қате: Өңдеме сәтсіздікке ұшырады",
+ "feedback-message": "Хабарлама:",
+ "feedback-subject": "Тақырып:",
+ "feedback-submit": "Жіберу",
"feedback-thanks": "Рахмет! Сіздің кері байланысыңыз \"[$2 $1]\" бетіне қойылды.",
- "feedback-close": "Жасалды",
"searchsuggest-search": "Іздеу",
"searchsuggest-containing": "қамтылуда...",
"api-error-badaccess-groups": "Сізге бұл уикиге файл жүктеуге рұқсат етілмеген.",
@@ -2750,5 +2757,28 @@
"expand_templates_ok": "OK",
"expand_templates_remove_comments": "Мәндемелерін аластатып?",
"expand_templates_generate_xml": "XML өңдету бұтақтарын көрсет",
- "expand_templates_preview": "Қарап шығу"
+ "expand_templates_preview": "Қарап шығу",
+ "headline-anchor-title": "Бұл бөлімнің уики сілтемесі",
+ "special-characters-group-latin": "Латын",
+ "special-characters-group-latinextended": "Кеңейтілген латын",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Белгілер",
+ "special-characters-group-greek": "Грек",
+ "special-characters-group-cyrillic": "Кирилл",
+ "special-characters-group-arabic": "Араб",
+ "special-characters-group-arabicextended": "Кеңейтілген араб",
+ "special-characters-group-persian": "Парсы",
+ "special-characters-group-hebrew": "Иврит",
+ "special-characters-group-bangla": "Бангла",
+ "special-characters-group-tamil": "Тамил",
+ "special-characters-group-telugu": "Телугу",
+ "special-characters-group-sinhala": "Синхала",
+ "special-characters-group-gujarati": "Гуджарати",
+ "special-characters-group-devanagari": "Девангари",
+ "special-characters-group-thai": "Тай",
+ "special-characters-group-lao": "Лао",
+ "special-characters-group-khmer": "Кхмер",
+ "special-characters-title-endash": "дефис",
+ "special-characters-title-emdash": "сызықша",
+ "special-characters-title-minus": "минус белгісі"
}
diff --git a/languages/i18n/kk-latn.json b/languages/i18n/kk-latn.json
index a3a4cd8d..7e62a685 100644
--- a/languages/i18n/kk-latn.json
+++ b/languages/i18n/kk-latn.json
@@ -373,7 +373,7 @@
"accmailtitle": "Qupïya söz jöneltildi.",
"accmailtext": "$2 jaýına «$1» qupïya sözi jöneltildi.",
"newarticle": "(Jaña)",
- "newarticletext": "Siltemege erip äli bastalmağan betke kelipsiz.\nBetti bastaw üşin, tömendegi kiristirw ornında mätiniñizdi teriñiz (köbirek aqparat üşin [[{{{{ns:mediawiki}}:helppage}}|anıqtama betin] qarañız).\nEger jañılğannan osında kelgen bolsañız, şolğışıñız «Artqa» degen batırmasın nuqıñız.",
+ "newarticletext": "Siltemege erip äli bastalmağan betke kelipsiz.\nBetti bastaw üşin, tömendegi kiristirw ornında mätiniñizdi teriñiz (köbirek aqparat üşin [[{{{{ns:mediawiki}}:helppage}}|anıqtama betin]] qarañız).\nEger jañılğannan osında kelgen bolsañız, şolğışıñız «Artqa» degen batırmasın nuqıñız.",
"anontalkpagetext": "----''Bul tirkelgisiz (nemese tirkelgisin qoldanbağan) qatıswşı talqılaw beti. Osı qatıswşını biz tek sandıq IP mekenjaýımen teñdestiremiz.\nOsındaý IP mekenjaý birneşe qatıswşığa ortaqtastırılğan bolwı mümkin.\nEger siz tirkelgisiz qatıswşı bolsañız jäne sizge qatıssız mändemeler jiberilgenin sezseñiz, basqa tirkelgisiz qatıswşılarmen aralastırmawı üşin [[{{#special:Userlogin}}|tirkeliñiz ne kiriñiz]].''",
"noarticletext": "Bul bette ağımda eş mätin joq, basqa betterden osı bet atawın [[Special:Search/{{PAGENAME}}|izdep körwiñizge]] nemese osı betti [{{fullurl:{{FULLPAGENAME}}|action=edit}} tüzetwiñizge] boladı.",
"userpage-userdoesnotexist": "«<nowiki>$1</nowiki>» qatıswşı tirkelgisi jazıp alınbağan. Bul betti bastaw/öñdew talabıñızdı tekserip şığıñız.",
@@ -502,7 +502,6 @@
"mergehistory-autocomment": "[[:$1]] degen [[:$2]] degenge biriktirildi",
"mergehistory-comment": "[[:$1]] degen [[:$2]] degenge biriktirildi: $3",
"mergelog": "Biriktirw jwrnalı",
- "pagemerge-logentry": "[[$1]] degen [[$2]] degenge biriktirildi ($3 deýingi tüzetwleri)",
"revertmerge": "Biriktirwdi boldırmaw",
"mergelogpagetext": "Tömende bir bettiñ tarïxı özge betke biriktirw eñ soñğı tizimi keltiriledi.",
"history-title": "«$1» — tüzetw tarïxı",
@@ -830,7 +829,6 @@
"randomredirect-nopages": "Bul esim ayasında eş aýdağış joq.",
"statistics": "Sanaq",
"statistics-header-users": "Qatıswşı sanağı",
- "statistics-mostpopular": "Eñ köp qaralğan better",
"doubleredirects": "Şınjırlı aýdağıştar",
"doubleredirectstext": "Bul bette basqa aýdatw betterge silteýtin better tizimdelinedi. Ärbir jolaqta birinşi jäne ekinşi aýdağışqa siltemeler bar, sonımen birge ekinşi aýdağış nısanası bar, ädette bul birinşi aýdağış bağıttaýtın «naqtı» nısana bet atawı bolwı kerek.",
"brokenredirects": "Eş betke keltirmeýtin aýdağıştar",
@@ -857,7 +855,6 @@
"uncategorizedtemplates": "Sanatsız ülgiler",
"unusedcategories": "Paýdalanılmağan sanattar",
"unusedimages": "Paýdalanılmağan faýldar",
- "popularpages": "Eñ köp qaralğan better",
"wantedcategories": "Bastalmağan sanattar",
"wantedpages": "Bastalmağan better",
"mostlinked": "Eñ köp siltengen better",
@@ -893,7 +890,6 @@
"suppress": "Şettetw",
"booksources": "Kitap qaýnarları",
"booksources-search-legend": "Kitap qaýnarların izdew",
- "booksources-go": "Ötw",
"booksources-text": "Tömende jaña jäne qoldanğan kitaptar satatın toraptarınıñ siltemeleri tizimdelgen. Bul toraptarda izdelgen kitaptar twralı bılaýğı aqparat bolwğa mümkin.",
"specialloguserlabel": "Qatıswşı:",
"speciallogtitlelabel": "Taqırıp atı:",
@@ -969,7 +965,7 @@
"wlheader-enotif": "Eskertw xat jiberwi qosılğan.",
"wlheader-showupdated": "Soñğı kelip-ketwiñizden beri özgertilgen betterdi '''jwan''' qaripimen körset",
"wlnote": "Tömende soñğı {{PLURAL:$2|sağatta|'''$2''' sağatta}} bolğan, {{PLURAL:$1|jwıqtağı özgeris|jwıqtağı '''$1''' özgeris}} körsetiledi.",
- "wlshowlast": "Soñğı $1 sağattağı, $2 kündegi, $3 bolğan özgeristi körsetw",
+ "wlshowlast": "Soñğı $1 sağattağı, $2 kündegi, bolğan özgeristi körsetw",
"watching": "Baqılawda…",
"unwatching": "Baqılamawda…",
"enotif_reset": "Barlıq bet kelip-ketildi dep belgile",
@@ -1003,7 +999,6 @@
"delete-toobig": "Bul bette baýtaq tüzetw tarïxı bar, $1 tüzetwden astam.\nBundaý betterdiñ joywı {{SITENAME}} torabın äldeqalaý üzip tastawına böget salw üşin tïımdalğan.",
"delete-warning-toobig": "Bul bette baýtaq tüzetw tarïxı bar, $1 tüzetwden astam.\nBunıñ joywı {{SITENAME}} torabındağı derekqor äreketterdi üzip tastawın mümkin;\nbunı abaýlap ötkiziñiz.",
"rollback": "Öñdemelerdi şegindirw",
- "rollback_short": "Şegindirw",
"rollbacklink": "şegindirw",
"rollbackfailed": "Şegindirw sätsiz bitti",
"cantrollback": "Öñdeme qaýtarılmadı;\nsoñğı üleskeri tek osı bettiñ bastawşısı boldı.",
@@ -1610,7 +1605,6 @@
"exif-gpsspeed-n": "knot",
"exif-gpsdirection-t": "Şın bağıt",
"exif-gpsdirection-m": "Magnïttı bağıt",
- "watchlistall2": "barlıq",
"namespacesall": "barlığı",
"monthsall": "barlığı",
"confirmemail": "E-poşta mekenjaýın quptaw",
@@ -1714,7 +1708,6 @@
"hebrew-calendar-m10-gen": "tımozdıñ",
"hebrew-calendar-m11-gen": "abtıñ",
"hebrew-calendar-m12-gen": "aýloldıñ",
- "unknown_extension_tag": "Tanılmağan keñeýtpe belgisi «$1»",
"version": "Jüýe nusqası",
"version-extensions": "Ornatılğan keñeýtimder",
"version-specialpages": "Arnaýı better",
@@ -1727,7 +1720,7 @@
"version-parser-function-hooks": "Qurılımdıq taldatqış jeteleriniñ tuzaqtarı",
"version-hook-name": "Tuzaq atawı",
"version-hook-subscribedby": "Tuzaq tartqıştarı",
- "version-version": "(Nusqası: $1)",
+ "version-version": "($1)",
"version-license": "Lïcenzïyası",
"version-software": "Ornatılğan bağdarlamalıq jasaqtama",
"version-software-product": "Önim",
@@ -1757,6 +1750,7 @@
"revdelete-restricted": "äkimşilerge tïımdar qoldadı",
"revdelete-unrestricted": "äkimşilerden tïımdardı alastadı",
"rightsnone": "(eşqandaý)",
+ "revdelete-summary": "öñdemeniñ qısqaşa mazmundaması",
"expandtemplates": "Ülgilerdi ulğaýtw",
"expand_templates_intro": "Osı qural arnaýı beti äldebir mätindi aladı da,\nbunıñ işindegi barlıq kiriktelgen ülgilerdi meýlinşe ulğaýtadı.\nMına <nowiki>{{</nowiki>#language:...}} sïyaqtı jöñdetw fwnkcïyaların da, jäne <nowiki>{{</nowiki>CURRENTDAY}}\nsïyaqtı aýnamalıların da ulğaýtadı (naqtı aýtqanda, qos qabat sadaq jaqşalar arasındağı barlığın).\nBunı öz MediaWiki bağdarlamasınan qatıstı jöñdetw satın şaqırıp istelinedi.",
"expand_templates_title": "Mätin aralıq atawı ({{FULLPAGENAME}} t.b. better üşin):",
diff --git a/languages/i18n/kl.json b/languages/i18n/kl.json
index b6d68565..dd10a353 100644
--- a/languages/i18n/kl.json
+++ b/languages/i18n/kl.json
@@ -1,379 +1,368 @@
{
- "@metadata": {
- "authors": [
- "Aputtu",
- "Iketsi",
- "Kaare",
- "Kaniina (on kl.wikipedia.org)",
- "Qaqqalik",
- "לערי ריינהארט"
- ]
- },
- "sunday": "Sapaat",
- "monday": "Ataasinngorneq",
- "tuesday": "Marlunngorneq",
- "wednesday": "Pingasunngorneq",
- "thursday": "Sisamanngorneq",
- "friday": "Tallimanngorneq",
- "saturday": "Arfininngorneq",
- "sun": "Sap",
- "mon": "Ata",
- "tue": "Mar",
- "wed": "Pin",
- "thu": "Sis",
- "fri": "Tal",
- "sat": "Arf",
- "january": "Jannuaari",
- "february": "Februaari",
- "march": "Martsi",
- "april": "Apriili",
- "may_long": "Maaji",
- "june": "Juuni",
- "july": "Juuli",
- "august": "Aggusti",
- "september": "Septemberi",
- "october": "Oktoberi",
- "november": "Novemberi",
- "december": "Decemberi",
- "january-gen": "Januaari",
- "february-gen": "Februaari",
- "march-gen": "Marsi",
- "april-gen": "Apriili",
- "may-gen": "Maaji",
- "june-gen": "Juuni",
- "july-gen": "Juuli",
- "august-gen": "Aggusti",
- "september-gen": "Septembari",
- "october-gen": "Oktobari",
- "november-gen": "Novembari",
- "december-gen": "Decembari",
- "jan": "Jan",
- "feb": "Feb",
- "mar": "Mar",
- "apr": "Apr",
- "may": "Maaji",
- "jun": "Jun",
- "jul": "Jul",
- "aug": "Aug",
- "sep": "Sep",
- "oct": "Okt",
- "nov": "Nov",
- "dec": "Dec",
- "pagecategories": "{{PLURAL:$1|Sumut atassuseq|Sunut atassusit}}",
- "category_header": "Quppernerit sumut atassusermi \"$1\"-miittut",
- "subcategories": "Sunut atassuserni ataaniittut",
- "category-subcat-count": "{{PLURAL:$2|Una sumut atassuseq ataatsimik ataani ilaqarpoq.|Una sumut atassuseq imarivai {{PLURAL:$1|sumut atassuseq ataaniittoq|$1 sunut atassusit ataaniittut}}, $2-suni.}}",
- "category-article-count": "Una sumut atassuseq imarivaa {{PLURAL:$2|qupperneq ataaseq ataaniittoq|{{PLURAL:$1|qupperneq ataaseq ataaniittoq|quppernerit ataaniittut $1-it}} $2-suni.}}",
- "about": "Pillugu",
- "newwindow": "(nutaamut ammassaaq)",
- "cancel": "Unitsiguk",
- "moredotdotdot": "Suli...",
- "mytalk": "Oqalliffikka",
- "navigation": "Sumiissusersiuut",
- "qbfind": "Naniuk",
- "qbedit": "Aaqqissoruk",
- "vector-action-addsection": "Imm. nutaaq",
- "vector-action-move": "Nuuguk",
- "vector-view-create": "Pilersiguk",
- "vector-view-edit": "Aaqqissoruk",
- "vector-view-history": "Oqalutt.",
- "vector-view-view": "Takuuk",
- "vector-view-viewsource": "Toqqavia takuuk",
- "errorpagetitle": "Kukkuneq",
- "returnto": "$1 -mut uterit",
- "tagline": "{{SITENAME}}-meersoq",
- "help": "Ikiuutit",
- "search": "Ujarlerit",
- "searchbutton": "Ujarlerit",
- "go": "Ikunnarit",
- "searcharticle": "Tassunngarit",
- "history": "Oqaluttuassartaa",
- "history_short": "Oqaluttuassartaa",
- "printableversion": "Naqikkuminartoq",
- "permalink": "Ataavartumik innersuut",
- "edit": "Aaqqissoruk",
- "create": "Pilersiguk",
- "editthispage": "Qupperneq aaqqissuuguk",
- "delete": "Peeruk",
- "deletethispage": "Qupperneq piiaruk",
- "protect": "Illersoruk",
- "protect_change": "allannguutit",
- "unprotect": "Illersorunnaaruk",
- "newpage": "Qupperneq nutaaq",
- "talkpagelinktext": "Oqallinneq",
- "personaltools": "Namminermut sannatit",
- "talk": "Oqallinneq",
- "views": "Takutitat",
- "toolbox": "Atortut",
- "otherlanguages": "Oqaatsit allat",
- "redirectedfrom": "($1-mit nuunneq)",
- "lastmodifiedat": "Una qupperneq kingullermik allanngortinneqarsimavoq $1 $2",
- "jumpto": "Uunngarit:",
- "jumptonavigation": "sumiissusersiuut",
- "jumptosearch": "ujarlerit",
- "aboutsite": "{{SITENAME}} pillugu",
- "aboutpage": "Project:Pillugu",
- "currentevents": "Maannakkut pisut",
- "disclaimers": "Aalajangersagaq",
- "edithelp": "Ikiuutit",
- "mainpage": "Saqqaa",
- "mainpage-description": "Saqqaa",
- "portal": "Allattartup saqqaa",
- "privacy": "Namminermut paasissutissat",
- "retrievedfrom": "Uannga aaneqartoq \"$1\"",
- "youhavenewmessages": "<!-- This sentence shall be empty because of kl grammar. --> $1 ($2)",
- "editsection": "aaqqissoruk",
- "editold": "aaqqissoruk",
- "viewsourceold": "toqqavia takuuk",
- "editlink": "aaqqissoruk",
- "editsectionhint": "Aaqqissuuguk immikkoortoq: $1",
- "toc": "Imarisai",
- "showtoc": "saqqummeruk",
- "hidetoc": "toqqoruk",
- "site-rss-feed": "$1 RSS Feed",
- "site-atom-feed": "$1 Atom Feed",
- "page-rss-feed": "\"$1\" RSS Feed",
- "red-link-title": "$1 (Qupperneq suli allaffigineqanngilaq)",
- "nstab-main": "Allaaserisaq",
- "nstab-user": "Atuisup quppernera",
- "nstab-special": "Immikkut",
- "nstab-project": "Pillugu",
- "nstab-image": "Assiliaq",
- "nstab-template": "Ilisserut",
- "nstab-help": "Ikiuutit",
- "nstab-category": "Sumut atassuseq",
- "viewsource": "Toqqavia takuuk",
- "protectedpagetext": "Una qupperneq allaffigineqarnissamut illersugaavoq.",
- "viewsourcetext": "Qupperneq takusinnaavat aamma sanarfia kopeersinnaavat:",
- "logouttext": "'''Maanna anivutit.'''\n\n{{SITENAME}} atorlugu ingerlaqqissinnaavutit kinaanerit isertorlugu, iseqqissinnaavutilluunniit taamatut isissuteqarlutit imalt. allat iserfigisinnaanngorpaat.",
- "yourname": "Atuisutut atit",
- "yourpassword": "Isissutissaq:",
- "yourpasswordagain": "Isissutissaq allaqqiguk",
- "remembermypassword": "Iserfiga tullissaanut eqqaamalara (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "Iserit",
- "nav-login-createaccount": "Konto-mik pilersitsigit imalt. iserit",
- "loginprompt": "Pisariaqassaaq cookies-itit atussallugit {{SITENAME}} -mut isissaguit.",
- "userlogin": "Kontomik pilersitsigit / iserit",
- "logout": "Anigit",
- "userlogout": "Anigit",
- "nologin": "Kontomik peqanngilatit? '''$1'''.",
- "nologinlink": "Kontomik pilersitsigit",
- "createaccount": "Kontomik nutaamik pilersitsigit",
- "gotaccount": "Kontomik peqareerpit? '''$1'''.",
- "gotaccountlink": "Iserit",
- "createaccountmail": "e-mail-ikkut",
- "badretype": "Isissutissat allanneqartut assigiinngillat.",
- "userexists": "Atuisup atia atorneqareerpoq. Allamik qinersigit.",
- "loginerror": "Iserniarnerlunneq",
- "loginsuccesstitle": "Maanna isersimalerputit",
- "loginsuccess": "Maanna {{SITENAME}} -mut isersimalerputit \"$1\" -itut taaguuserlutit.",
- "wrongpassword": "Isissutissaq kukkusumik allanneqarsimavoq. Misileqqiuk.",
- "mailmypassword": "E-mail-ikkut isissutissaq nutaaq nassiuguk",
- "acct_creation_throttle_hit": "Konto-mik pilersitsereersimagavit pilersitseqqissinnaanngilatit, IP-adressit malillugu.\nTaamaattumik maannakkorpiaq kontomik pilersitsisinnaanngilatit.",
- "oldpassword": "Isissutissatoqaq:",
- "newpassword": "Isissutissaq nutaaq:",
- "retypenew": "Isissutissaq nutaaq allaqqiuk",
- "summary": "Allaaserinera:",
- "subject": "Pineqartoq/qulequtaq:",
- "minoredit": "Annikitsumik allannguutaavoq",
- "watchthis": "Allaaserisaq ersersimatiguk",
- "savearticle": "Toqqoruk",
- "preview": "Isikkua",
- "showpreview": "Isikkua takuuk",
- "showdiff": "Allannguutit",
- "anoneditwarning": "'''Mianersoqqussut:''' Isersimanak sulilerputit.\nIP adressit nuisassaaq massuma quppernerup oqaluttuassartaani.",
- "accmailtitle": "Password-i nassiunneqarsimavoq.",
- "accmailtext": "Password-i \"$1\" $2-mut nassiunneqarsimavoq.",
- "newarticle": "(Nuutaq)",
- "newarticletext": "Maanga innersuunneqarsimavutit quppernermut suli pilersinneqarsimanngitsumut.\nQupperneq pilersissagukku, boks-ip iluani allagit (takuuk [[{{MediaWiki:Helppage}}|ikiuutit]] paasissutissaanerusut).\nMaanngarsimaguit kukkusumik, toortaat '''utimut''' tooruk.",
- "anontalkpagetext": "---- ''Manna tassaavoq oqalliffik atuisumit anonym-iusumeersumit, konto-mik pilersitsisimanngitsumik imalt. atorneq ajugaanik.\nTaamaattumik IP-adressia kinaanerattut atortariaqassavarput.\nIP-adressi pigineqarsinnaavoq atuisunit arlalinnit.\nAtuisuuguit anonym-iusoq, isumaqarlutillu soqutiginngisannik oqaaseqarfigineqarlutit, qinnuigivatsigit [[Special:UserLogin/signup|atuisutut pilersitsissallutit]] aamma [[Special:UserLogin|iserlutit]], taava siunissami paarlattoornernik atuisuni arlalinni pinaveersaartoqarniassammat.''",
- "noarticletext": "Maannamut una qupperneq allaffigineqanngilaq.\nTaamatut oqaasilimmik quppernerni allani [[Special:Search/{{PAGENAME}}|ujaasisinnaavutit]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} log-ini ujaasisinnavutillu] imaluunniit [{{fullurl:{{FULLPAGENAME}}|action=edit}} qupperneq pilersissinnaavat]</span>.",
- "previewnote": "Eqqaamallugu isikkua takutinneqaannarpoq, toqqorneqanngilaq suli!",
- "editing": "Aaqqissorpaa $1",
- "editingsection": "Aaqqissorpaa $1 (immikkoortoq)",
- "editingcomment": "Aaqqissorpaa $1 (immikkoortoq nutaaq)",
- "yourtext": "Allatat",
- "editingold": "'''Mianersoqqussut: Qupperneq pisoqaanerusoq aaqqissuutilerpat.'''\nToqqorukku quppernerup taamaannera taarserneqassaaq.",
- "protectedpagewarning": "'''Mianersoqqussut: Una qupperneq illersugaavoq, administratorit kisimik aaqqissorsinnaavaat.'''",
- "semiprotectedpagewarning": "'''Malugiuk:''' Qupperneq parnaaqqavoq, atuisutut nalunaarsimasut kisimik allanngortitersinnaavaat.",
- "templatesused": "{{PLURAL:$1|Ilisserut|Ilisserutit}} quppernermi atorneqartoq/tut:",
- "permissionserrorstext-withaction": "Pisinnaatitaaffeqanngilatit $2 atussallugu, {{PLURAL:$1|peqqutigalugu|peqqutigalugit}}:",
- "moveddeleted-notice": "Una qupperneq peerneqarsimavoq.\nPeersinermut nuutsinermullu nalunaarsuutit ataani takuneqarsinnaapput.",
- "currentrev": "Maanna taamaannera",
- "currentrev-asof": "Maanna taamaannera $1-meersoq",
- "revisionasof": "Taamaannera $1-meersoq",
- "previousrevision": "← Pisoqaaneq",
- "nextrevision": "Nutaaneq →",
- "currentrevisionlink": "Massakkuunera takuuk",
- "cur": "maanna",
- "last": "siulia",
- "page_first": "siulliit",
- "page_last": "kingulliit",
- "histlegend": "Nassuiaat: (maanna) = assigiinngissut maanna inneranut, (siulia) = assigiinngissut siulianut, M = annikitsumik allannguut",
- "history-fieldset-title": "Oqaluttuassartaani qupperaagit",
- "histfirst": "Pisoqaaneq",
- "histlast": "Nutaaneq",
- "history-title": "\"$1\"-p oqaluttuassartaa",
- "compareselectedversions": "Qinikkat nalilersukkit",
- "editundo": "peeruk",
- "searchresults": "Ujaasinermi inernerit",
- "searchresults-title": "Uuma ujarnera \"$1\"",
- "prevn": "siulii {{PLURAL:$1|$1}}",
- "nextn": "tullii {{PLURAL:$1|$1}}",
- "viewprevnext": "Takuuk ($1 {{int:pipe-separator}} $2) ($3)",
- "searchmenu-exists": "'''Qupperneqarpoq \"[[:$1]]\" -mik atilimmik maani wikimi'''",
- "searchmenu-new": "'''Qupperneq [[:$1]] pilersiguk maani wikimi'''",
- "searchprofile-articles": "Imarisai",
- "searchprofile-project": "Ikiuutit suliniutillu imaat",
- "searchprofile-everything": "Tamarmik",
- "searchprofile-advanced": "Ujaasiffik anneq",
- "search-result-size": "$1 ({{PLURAL:$2|oqaaseq|$2 oqaatsit}})",
- "search-redirect": "(nuunneq $1)",
- "search-suggest": "Una piviuk: $1",
- "showingresultsheader": "{{PLURAL:$5|Inernera '''$1''' '''$3'''|Inerneri '''$1 - $2''' '''$3'''}}-suni '''$4'''-mut",
- "search-nonefound": "Ujaasineq inerneqanngilaq",
- "mypreferences": "Inissiffissat",
- "prefs-rc": "Allannguutit kingulliit",
- "saveprefs": "Toqqukkit",
- "yourlanguage": "Oqaatsit:",
- "group-sysop": "Administratorit",
- "recentchanges": "Allannguutit kingulliit",
- "recentchanges-legend": "Inissisimaffiit allannguutini kingullerni",
- "recentchanges-summary": "Uani quppernermi '''{{SITENAME}}'''-mi allannguutit kingulliit malinnaavigisinnaavatit.",
- "recentchanges-label-newpage": "Tassaavoq qupperneq nutaaq",
- "recentchanges-label-minor": "Tassaavoq allannguut annikitsoq",
- "recentchanges-label-bot": "Bot-ip allannguutaa",
- "recentchanges-legend-newpage": "$1 - qupperneq nutaaq",
- "rclistfrom": "Allannguutit kingulliit takukkit $1 -nngaanniit",
- "rcshowhideminor": "$1 allannguutit annikitsut",
- "rcshowhidebots": "$1 robottit",
- "rcshowhideliu": "$1 atuisut nalunaarsimasut",
- "rcshowhideanons": "$1 atuisut anonymejusut",
- "rcshowhidepatr": "$1 allannguutit misissorneqarsimasut",
- "rcshowhidemine": "$1 nammineq tapit",
- "rclinks": "Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni<br />$3",
- "diff": "assigiinng",
- "hist": "oqalutt",
- "hide": "Assequt",
- "show": "Saqqummiuk",
- "minoreditletter": "m",
- "newpageletter": "N",
- "boteditletter": "b",
- "recentchangeslinked": "Allannguutit naleqqiussat",
- "recentchangeslinked-feed": "Allannguutit naleqqiussat",
- "recentchangeslinked-toolbox": "Allannguutit naleqqiussat",
- "upload": "Fiilimik ilisigit",
- "uploadedimage": "ilivaa \"[[$1]]\"",
- "listfiles_user": "Atuisoq",
- "file-anchor-link": "Assiliaq",
- "filehist-datetime": "Ulloq/Piffissaq",
- "filehist-user": "Atuisoq",
- "imagelinks": "Innersuutit",
- "mimesearch": "MIME ujaarlerit",
- "randompage": "Nalaatsornermi qupperneq",
- "statistics": "Kisitsisinngorlugit paasissutissat",
- "newpages": "Quppernerit nutaat",
- "move": "Nuuguk",
- "pager-newer-n": "{{PLURAL:$1|nutaaneq 1|nutaanerit $1}}",
- "pager-older-n": "{{PLURAL:$1|pisoqaaneq 1|pisoqaanerit $1}}",
- "booksources-go": "Ujaruk",
- "specialloguserlabel": "Atuisoq:",
- "allarticles": "Quppernerit tamarmik",
- "allpagessubmit": "Tassunngarit",
- "categories": "Sunut atassusit",
- "categoriespagetext": "Uku {{PLURAL:$1|sumut atassuseq|sunut atassusit}} imarivai quppernerit media-lluunniit.\n[[Special:UnusedCategories|Sunut atassusit]] atorneqanngitsut maani ilaanngillat.\nAamma takuuk [[Special:WantedCategories|sunut atassusinut kissaatigineqartut]].",
- "categoriesfrom": "Takuuk qanoq aallartiffianeersumiit:",
- "linksearch-ok": "Ujaruk",
- "watchlist": "Ersersimasut",
- "mywatchlist": "Nuisatiffikka",
- "addedwatchtext": "Una qupperneq \"[[:$1]]\" ersersimatitannut ilanngunneqarpoq. Siunissami allannguutit ilinnut malugeqquneqartassapput aamma [[Special:RecentChanges|allannguutini kingullerni]] issusuumik allanneqartuusassallutik. Ersersimatikkusunngikkukku [[Special:Watchlist|piiginnassavat]] ersersimasuutitanni.",
- "watch": "Ersilli",
- "watchthispage": "Qupperneq ersersimatiguk",
- "unwatch": "Ersitsinnagu",
- "watching": "Saqqumitiguk",
- "unwatching": "Saqquminera peeruk",
- "excontent": "imarivaa: '$1'",
- "excontentauthor": "imarivaa: '$1' (allattutuaavorlu '[[Special:Contributions/$2|$2]]')",
- "delete-confirm": "Peeruk \"$1\"",
- "actioncomplete": "Naammassivoq",
- "deletedtext": "\"$1\" peerpoq. Takukkit $2 peerneqarsimasut kingulliit.",
- "revertpage": "Inisseqqiineq [[User:$1|$1]]-meersoq, peerneqarpoq [[Special:Contributions/$2|$2]] ([[User talk:$2|diskussion]])-meersoq",
- "prot_1movedto2": "[[$1]]-i nuunneqarsimavoq [[$2]]-mut",
- "protect-expiry-options": "1 tiimi:1 hour,ulloq 1:1 day,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite",
- "undeletebtn": "Inisseqqiguk",
- "undelete-search-submit": "Ujarlerit",
- "namespace": "Quppernerup ilusia:",
- "invert": "Quppernerup ilusia qinernagu",
- "blanknamespace": "(Pingaarneq)",
- "contributions": "Atuisup tapii",
- "mycontris": "Tapikka",
- "contribsub2": "$1-meersoq ($2)",
- "uctop": "(kingulleq)",
- "month": "Qaammat:",
- "year": "Ukioq:",
- "sp-contributions-newbies": "Atuisut nutaaginnaat takukkit",
- "sp-contributions-talk": "oqallinneq",
- "sp-contributions-search": "Tapiisunik ujaasineq",
- "sp-contributions-username": "IP adresse imalt. atuisoq:",
- "sp-contributions-submit": "Ujaruk",
- "whatlinkshere": "Suna maangamut innersuussisoq",
- "whatlinkshere-prev": "{{PLURAL:$1|siulia|siulii $1}}",
- "whatlinkshere-next": "{{PLURAL:$1|tullia|tullii $1}}",
- "blockip": "Atuisoq asseruk",
- "blockip-legend": "Atuisoq asseruk",
- "ipadressorusername": "IP adresse imalt. atuisoq:",
- "ipboptions": "2 tiimit:2 hours,ulloq 1:1 day,ullut 3:3 days,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite",
- "ipblocklist-submit": "Ujarlerit",
- "infiniteblock": "killeqanngitsoq",
- "expiringblock": "atorunnaassaaq $1 $2-nngoruni",
- "blocklink": "assersoruk",
- "contribslink": "tapikkat",
- "blocklogentry": "asserpaa [[$1]] $2-mik sivissusilimmik $3",
- "movearticle": "Qupperneq nuuguk",
- "move-watch": "Qupperneq ersersimatiguk",
- "movepagebtn": "Qupperneq nuuguk",
- "pagemovedsub": "Nuunnera iluatsippoq",
- "movepage-moved": "Qupperneq '''\"$1\" uunga nuuppoq \"$2\"'''",
- "allmessages-language": "Oqaatsit:",
- "allmessages-filter-submit": "Takuuk",
- "thumbnail-more": "Allisiguk",
- "tooltip-pt-userpage": "Atuisutut quppernerit",
- "tooltip-pt-mytalk": "Oqalliffiit",
- "tooltip-pt-preferences": "Inissiinikka",
- "tooltip-pt-mycontris": "Tapikkatit",
- "tooltip-pt-login": "Iseqquneqaraluarputit, pitsaanerussagaluarpoq",
- "tooltip-pt-logout": "Aniffik",
- "tooltip-ca-talk": "Quppernerup imaanik oqallinneq",
- "tooltip-ca-edit": "Allanngortiterisinnaavutit. Isikkua takulaariuk",
- "tooltip-ca-history": "Quppernerup siulii",
- "tooltip-ca-move": "Qupperneq nuuguk",
- "tooltip-ca-watch": "Saqqumitiguk",
- "tooltip-search": "Ujaarlerit {{SITENAME}}",
- "tooltip-search-go": "Tassunngarit nassaassappat",
- "tooltip-search-fulltext": "Taanna ujaruk",
- "tooltip-n-mainpage": "Saqqaa iseruk",
- "tooltip-n-mainpage-description": "Saqqaa iseruk",
- "tooltip-n-portal": "Suliaq, ilitsersuut, nassaassaasinnaasullu",
- "tooltip-n-currentevents": "Maannakkut pisut tunuliaqutai takukkit",
- "tooltip-n-recentchanges": "Wikimi allannguutit kingulliit",
- "tooltip-n-randompage": "Allaaserisamukarit",
- "tooltip-n-help": "Qanoq iliussaanga ...",
- "tooltip-t-whatlinkshere": "Innersuussami saqqummiussat",
- "tooltip-t-recentchangeslinked": "Massuma quppernerani allannguutit kingulliit",
- "tooltip-t-upload": "Assinik mediafiilinilluunniit ilisigit",
- "tooltip-t-specialpages": "Quppernerit immikkut ittut nassaassaasinnaasut",
- "tooltip-t-print": "Quppernerup naqikkuminarnera",
- "tooltip-t-permalink": "Massuma quppernerup taamaaqqaarnera",
- "tooltip-ca-nstab-main": "Imarisaa takuuk",
- "tooltip-save": "Allannguutitit toqqukkit",
- "tooltip-preview": "Isikkua takuuk, toqqortinnaguk atortaruk!",
- "lastmodifiedatby": "Una qupperneq kingullermik allanngortinneqarsimavoq $2, $1 $3-mit.",
- "previousdiff": "← Assigiinngissut siulia",
- "nextdiff": "Assigiinngissut tullia →",
- "ilsubmit": "Ujarlerit",
- "namespacesall": "tamarmik",
- "monthsall": "tamarmik",
- "autosumm-new": "Qupperneq pilersippaa '$1'",
- "specialpages": "Quppernerit immikkut ittut",
- "searchsuggest-search": "Ujarlerit"
+ "@metadata": {
+ "authors": [
+ "Aputtu",
+ "Iketsi",
+ "Kaare",
+ "Kaniina (on kl.wikipedia.org)",
+ "Qaqqalik",
+ "לערי ריינהארט",
+ "아라"
+ ]
+ },
+ "sunday": "Sapaat",
+ "monday": "Ataasinngorneq",
+ "tuesday": "Marlunngorneq",
+ "wednesday": "Pingasunngorneq",
+ "thursday": "Sisamanngorneq",
+ "friday": "Tallimanngorneq",
+ "saturday": "Arfininngorneq",
+ "sun": "Sap",
+ "mon": "Ata",
+ "tue": "Mar",
+ "wed": "Pin",
+ "thu": "Sis",
+ "fri": "Tal",
+ "sat": "Arf",
+ "january": "Jannuaari",
+ "february": "Februaari",
+ "march": "Martsi",
+ "april": "Apriili",
+ "may_long": "Maaji",
+ "june": "Juuni",
+ "july": "Juuli",
+ "august": "Aggusti",
+ "september": "Septemberi",
+ "october": "Oktoberi",
+ "november": "Novemberi",
+ "december": "Decemberi",
+ "january-gen": "Januaari",
+ "february-gen": "Februaari",
+ "march-gen": "Marsi",
+ "april-gen": "Apriili",
+ "may-gen": "Maaji",
+ "june-gen": "Juuni",
+ "july-gen": "Juuli",
+ "august-gen": "Aggusti",
+ "september-gen": "Septembari",
+ "october-gen": "Oktobari",
+ "november-gen": "Novembari",
+ "december-gen": "Decembari",
+ "jan": "Jan",
+ "feb": "Feb",
+ "mar": "Mar",
+ "apr": "Apr",
+ "may": "Maaji",
+ "jun": "Jun",
+ "jul": "Jul",
+ "aug": "Aug",
+ "sep": "Sep",
+ "oct": "Okt",
+ "nov": "Nov",
+ "dec": "Dec",
+ "pagecategories": "{{PLURAL:$1|Sumut atassuseq|Sunut atassusit}}",
+ "category_header": "Quppernerit sumut atassusermi \"$1\"-miittut",
+ "subcategories": "Sunut atassuserni ataaniittut",
+ "category-subcat-count": "{{PLURAL:$2|Una sumut atassuseq ataatsimik ataani ilaqarpoq.|Una sumut atassuseq imarivai {{PLURAL:$1|sumut atassuseq ataaniittoq|$1 sunut atassusit ataaniittut}}, $2-suni.}}",
+ "category-article-count": "Una sumut atassuseq imarivaa {{PLURAL:$2|qupperneq ataaseq ataaniittoq|{{PLURAL:$1|qupperneq ataaseq ataaniittoq|quppernerit ataaniittut $1-it}} $2-suni.}}",
+ "about": "Pillugu",
+ "newwindow": "(nutaamut ammassaaq)",
+ "cancel": "Unitsiguk",
+ "moredotdotdot": "Suli...",
+ "mytalk": "Oqalliffikka",
+ "navigation": "Sumiissusersiuut",
+ "qbfind": "Naniuk",
+ "qbedit": "Aaqqissoruk",
+ "errorpagetitle": "Kukkuneq",
+ "returnto": "$1 -mut uterit",
+ "tagline": "{{SITENAME}}-meersoq",
+ "help": "Ikiuutit",
+ "search": "Ujarlerit",
+ "searchbutton": "Ujarlerit",
+ "go": "Ikunnarit",
+ "searcharticle": "Tassunngarit",
+ "history": "Oqaluttuassartaa",
+ "history_short": "Oqaluttuassartaa",
+ "printableversion": "Naqikkuminartoq",
+ "permalink": "Ataavartumik innersuut",
+ "edit": "Aaqqissoruk",
+ "create": "Pilersiguk",
+ "editthispage": "Qupperneq aaqqissuuguk",
+ "delete": "Peeruk",
+ "deletethispage": "Qupperneq piiaruk",
+ "protect": "Illersoruk",
+ "protect_change": "allannguutit",
+ "unprotect": "Illersorunnaaruk",
+ "newpage": "Qupperneq nutaaq",
+ "talkpagelinktext": "Oqallinneq",
+ "personaltools": "Namminermut sannatit",
+ "talk": "Oqallinneq",
+ "views": "Takutitat",
+ "toolbox": "Atortut",
+ "otherlanguages": "Oqaatsit allat",
+ "redirectedfrom": "($1-mit nuunneq)",
+ "lastmodifiedat": "Una qupperneq kingullermik allanngortinneqarsimavoq $1 $2",
+ "jumpto": "Uunngarit:",
+ "jumptonavigation": "sumiissusersiuut",
+ "jumptosearch": "ujarlerit",
+ "aboutsite": "{{SITENAME}} pillugu",
+ "aboutpage": "Project:Pillugu",
+ "currentevents": "Maannakkut pisut",
+ "disclaimers": "Aalajangersagaq",
+ "edithelp": "Ikiuutit",
+ "mainpage": "Saqqaa",
+ "mainpage-description": "Saqqaa",
+ "portal": "Allattartup saqqaa",
+ "privacy": "Namminermut paasissutissat",
+ "retrievedfrom": "Uannga aaneqartoq \"$1\"",
+ "youhavenewmessages": "<!-- This sentence shall be empty because of kl grammar. --> $1 ($2)",
+ "editsection": "aaqqissoruk",
+ "editold": "aaqqissoruk",
+ "viewsourceold": "toqqavia takuuk",
+ "editlink": "aaqqissoruk",
+ "editsectionhint": "Aaqqissuuguk immikkoortoq: $1",
+ "toc": "Imarisai",
+ "showtoc": "saqqummeruk",
+ "hidetoc": "toqqoruk",
+ "site-rss-feed": "$1 RSS Feed",
+ "site-atom-feed": "$1 Atom Feed",
+ "page-rss-feed": "\"$1\" RSS Feed",
+ "red-link-title": "$1 (Qupperneq suli allaffigineqanngilaq)",
+ "nstab-main": "Allaaserisaq",
+ "nstab-user": "Atuisup quppernera",
+ "nstab-special": "Immikkut",
+ "nstab-project": "Pillugu",
+ "nstab-image": "Assiliaq",
+ "nstab-template": "Ilisserut",
+ "nstab-help": "Ikiuutit",
+ "nstab-category": "Sumut atassuseq",
+ "viewsource": "Toqqavia takuuk",
+ "protectedpagetext": "Una qupperneq allaffigineqarnissamut illersugaavoq.",
+ "viewsourcetext": "Qupperneq takusinnaavat aamma sanarfia kopeersinnaavat:",
+ "logouttext": "'''Maanna anivutit.'''\n\n{{SITENAME}} atorlugu ingerlaqqissinnaavutit kinaanerit isertorlugu, iseqqissinnaavutilluunniit taamatut isissuteqarlutit imalt. allat iserfigisinnaanngorpaat.",
+ "yourname": "Atuisutut atit",
+ "yourpassword": "Isissutissaq:",
+ "yourpasswordagain": "Isissutissaq allaqqiguk",
+ "remembermypassword": "Iserfiga tullissaanut eqqaamalara (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "Iserit",
+ "nav-login-createaccount": "Konto-mik pilersitsigit imalt. iserit",
+ "userlogin": "Kontomik pilersitsigit / iserit",
+ "logout": "Anigit",
+ "userlogout": "Anigit",
+ "nologin": "Kontomik peqanngilatit? '''$1'''.",
+ "nologinlink": "Kontomik pilersitsigit",
+ "createaccount": "Kontomik nutaamik pilersitsigit",
+ "gotaccount": "Kontomik peqareerpit? '''$1'''.",
+ "gotaccountlink": "Iserit",
+ "createaccountmail": "e-mail-ikkut",
+ "badretype": "Isissutissat allanneqartut assigiinngillat.",
+ "userexists": "Atuisup atia atorneqareerpoq. Allamik qinersigit.",
+ "loginerror": "Iserniarnerlunneq",
+ "loginsuccesstitle": "Maanna isersimalerputit",
+ "loginsuccess": "Maanna {{SITENAME}} -mut isersimalerputit \"$1\" -itut taaguuserlutit.",
+ "wrongpassword": "Isissutissaq kukkusumik allanneqarsimavoq. Misileqqiuk.",
+ "mailmypassword": "E-mail-ikkut isissutissaq nutaaq nassiuguk",
+ "acct_creation_throttle_hit": "Konto-mik pilersitsereersimagavit pilersitseqqissinnaanngilatit, IP-adressit malillugu.\nTaamaattumik maannakkorpiaq kontomik pilersitsisinnaanngilatit.",
+ "oldpassword": "Isissutissatoqaq:",
+ "newpassword": "Isissutissaq nutaaq:",
+ "retypenew": "Isissutissaq nutaaq allaqqiuk",
+ "summary": "Allaaserinera:",
+ "subject": "Pineqartoq/qulequtaq:",
+ "minoredit": "Annikitsumik allannguutaavoq",
+ "watchthis": "Allaaserisaq ersersimatiguk",
+ "savearticle": "Toqqoruk",
+ "preview": "Isikkua",
+ "showpreview": "Isikkua takuuk",
+ "showdiff": "Allannguutit",
+ "anoneditwarning": "'''Mianersoqqussut:''' Isersimanak sulilerputit.\nIP adressit nuisassaaq massuma quppernerup oqaluttuassartaani.",
+ "accmailtitle": "Password-i nassiunneqarsimavoq.",
+ "accmailtext": "Password-i \"$1\" $2-mut nassiunneqarsimavoq.",
+ "newarticle": "(Nuutaq)",
+ "newarticletext": "Maanga innersuunneqarsimavutit quppernermut suli pilersinneqarsimanngitsumut.\nQupperneq pilersissagukku, boks-ip iluani allagit (takuuk [$1 ikiuutit] paasissutissaanerusut).\nMaanngarsimaguit kukkusumik, toortaat '''utimut''' tooruk.",
+ "anontalkpagetext": "---- ''Manna tassaavoq oqalliffik atuisumit anonym-iusumeersumit, konto-mik pilersitsisimanngitsumik imalt. atorneq ajugaanik.\nTaamaattumik IP-adressia kinaanerattut atortariaqassavarput.\nIP-adressi pigineqarsinnaavoq atuisunit arlalinnit.\nAtuisuuguit anonym-iusoq, isumaqarlutillu soqutiginngisannik oqaaseqarfigineqarlutit, qinnuigivatsigit [[Special:UserLogin/signup|atuisutut pilersitsissallutit]] aamma [[Special:UserLogin|iserlutit]], taava siunissami paarlattoornernik atuisuni arlalinni pinaveersaartoqarniassammat.''",
+ "noarticletext": "Maannamut una qupperneq allaffigineqanngilaq.\nTaamatut oqaasilimmik quppernerni allani [[Special:Search/{{PAGENAME}}|ujaasisinnaavutit]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} log-ini ujaasisinnavutillu] imaluunniit [{{fullurl:{{FULLPAGENAME}}|action=edit}} qupperneq pilersissinnaavat]</span>.",
+ "previewnote": "Eqqaamallugu isikkua takutinneqaannarpoq, toqqorneqanngilaq suli!",
+ "editing": "Aaqqissorpaa $1",
+ "editingsection": "Aaqqissorpaa $1 (immikkoortoq)",
+ "editingcomment": "Aaqqissorpaa $1 (immikkoortoq nutaaq)",
+ "yourtext": "Allatat",
+ "editingold": "'''Mianersoqqussut: Qupperneq pisoqaanerusoq aaqqissuutilerpat.'''\nToqqorukku quppernerup taamaannera taarserneqassaaq.",
+ "protectedpagewarning": "'''Mianersoqqussut: Una qupperneq illersugaavoq, administratorit kisimik aaqqissorsinnaavaat.'''",
+ "semiprotectedpagewarning": "'''Malugiuk:''' Qupperneq parnaaqqavoq, atuisutut nalunaarsimasut kisimik allanngortitersinnaavaat.",
+ "templatesused": "{{PLURAL:$1|Ilisserut|Ilisserutit}} quppernermi atorneqartoq/tut:",
+ "permissionserrorstext-withaction": "Pisinnaatitaaffeqanngilatit $2 atussallugu, {{PLURAL:$1|peqqutigalugu|peqqutigalugit}}:",
+ "moveddeleted-notice": "Una qupperneq peerneqarsimavoq.\nPeersinermut nuutsinermullu nalunaarsuutit ataani takuneqarsinnaapput.",
+ "currentrev": "Maanna taamaannera",
+ "currentrev-asof": "Maanna taamaannera $1-meersoq",
+ "revisionasof": "Taamaannera $1-meersoq",
+ "previousrevision": "← Pisoqaaneq",
+ "nextrevision": "Nutaaneq →",
+ "currentrevisionlink": "Massakkuunera takuuk",
+ "cur": "maanna",
+ "last": "siulia",
+ "page_first": "siulliit",
+ "page_last": "kingulliit",
+ "histlegend": "Nassuiaat: (maanna) = assigiinngissut maanna inneranut, (siulia) = assigiinngissut siulianut, M = annikitsumik allannguut",
+ "history-fieldset-title": "Oqaluttuassartaani qupperaagit",
+ "histfirst": "Pisoqaaneq",
+ "histlast": "Nutaaneq",
+ "history-title": "\"$1\"-p oqaluttuassartaa",
+ "compareselectedversions": "Qinikkat nalilersukkit",
+ "editundo": "peeruk",
+ "searchresults": "Ujaasinermi inernerit",
+ "searchresults-title": "Uuma ujarnera \"$1\"",
+ "prevn": "siulii {{PLURAL:$1|$1}}",
+ "nextn": "tullii {{PLURAL:$1|$1}}",
+ "viewprevnext": "Takuuk ($1 {{int:pipe-separator}} $2) ($3)",
+ "searchmenu-exists": "'''Qupperneqarpoq \"[[:$1]]\" -mik atilimmik maani wikimi'''",
+ "searchmenu-new": "'''Qupperneq [[:$1]] pilersiguk maani wikimi'''",
+ "searchprofile-articles": "Imarisai",
+ "searchprofile-everything": "Tamarmik",
+ "searchprofile-advanced": "Ujaasiffik anneq",
+ "search-result-size": "$1 ({{PLURAL:$2|oqaaseq|$2 oqaatsit}})",
+ "search-redirect": "(nuunneq $1)",
+ "search-suggest": "Una piviuk: $1",
+ "search-nonefound": "Ujaasineq inerneqanngilaq",
+ "mypreferences": "Inissiffissat",
+ "prefs-rc": "Allannguutit kingulliit",
+ "saveprefs": "Toqqukkit",
+ "yourlanguage": "Oqaatsit:",
+ "group-sysop": "Administratorit",
+ "recentchanges": "Allannguutit kingulliit",
+ "recentchanges-legend": "Inissisimaffiit allannguutini kingullerni",
+ "recentchanges-summary": "Uani quppernermi '''{{SITENAME}}'''-mi allannguutit kingulliit malinnaavigisinnaavatit.",
+ "recentchanges-label-newpage": "Tassaavoq qupperneq nutaaq",
+ "recentchanges-label-minor": "Tassaavoq allannguut annikitsoq",
+ "recentchanges-label-bot": "Bot-ip allannguutaa",
+ "recentchanges-legend-newpage": "$1 - qupperneq nutaaq",
+ "rclistfrom": "Allannguutit kingulliit takukkit $3 $2 -nngaanniit",
+ "rcshowhideminor": "$1 allannguutit annikitsut",
+ "rcshowhidebots": "$1 robottit",
+ "rcshowhideliu": "$1 atuisut nalunaarsimasut",
+ "rcshowhideanons": "$1 atuisut anonymejusut",
+ "rcshowhidepatr": "$1 allannguutit misissorneqarsimasut",
+ "rcshowhidemine": "$1 nammineq tapit",
+ "rclinks": "Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni<br />$3",
+ "diff": "assigiinng",
+ "hist": "oqalutt",
+ "hide": "Assequt",
+ "show": "Saqqummiuk",
+ "minoreditletter": "m",
+ "newpageletter": "N",
+ "boteditletter": "b",
+ "recentchangeslinked": "Allannguutit naleqqiussat",
+ "recentchangeslinked-feed": "Allannguutit naleqqiussat",
+ "recentchangeslinked-toolbox": "Allannguutit naleqqiussat",
+ "upload": "Fiilimik ilisigit",
+ "listfiles_user": "Atuisoq",
+ "file-anchor-link": "Assiliaq",
+ "filehist-datetime": "Ulloq/Piffissaq",
+ "filehist-user": "Atuisoq",
+ "imagelinks": "Innersuutit",
+ "mimesearch": "MIME ujaarlerit",
+ "randompage": "Nalaatsornermi qupperneq",
+ "statistics": "Kisitsisinngorlugit paasissutissat",
+ "newpages": "Quppernerit nutaat",
+ "move": "Nuuguk",
+ "pager-newer-n": "{{PLURAL:$1|nutaaneq 1|nutaanerit $1}}",
+ "pager-older-n": "{{PLURAL:$1|pisoqaaneq 1|pisoqaanerit $1}}",
+ "specialloguserlabel": "Atuisoq:",
+ "allarticles": "Quppernerit tamarmik",
+ "allpagessubmit": "Tassunngarit",
+ "categories": "Sunut atassusit",
+ "categoriespagetext": "Uku {{PLURAL:$1|sumut atassuseq|sunut atassusit}} imarivai quppernerit media-lluunniit.\n[[Special:UnusedCategories|Sunut atassusit]] atorneqanngitsut maani ilaanngillat.\nAamma takuuk [[Special:WantedCategories|sunut atassusinut kissaatigineqartut]].",
+ "categoriesfrom": "Takuuk qanoq aallartiffianeersumiit:",
+ "linksearch-ok": "Ujaruk",
+ "watchlist": "Ersersimasut",
+ "mywatchlist": "Nuisatiffikka",
+ "addedwatchtext": "Una qupperneq \"[[:$1]]\" ersersimatitannut ilanngunneqarpoq. Siunissami allannguutit ilinnut malugeqquneqartassapput aamma [[Special:RecentChanges|allannguutini kingullerni]] issusuumik allanneqartuusassallutik. Ersersimatikkusunngikkukku [[Special:Watchlist|piiginnassavat]] ersersimasuutitanni.",
+ "watch": "Ersilli",
+ "watchthispage": "Qupperneq ersersimatiguk",
+ "unwatch": "Ersitsinnagu",
+ "watching": "Saqqumitiguk",
+ "unwatching": "Saqquminera peeruk",
+ "excontent": "imarivaa: '$1'",
+ "excontentauthor": "imarivaa: '$1' (allattutuaavorlu '[[Special:Contributions/$2|$2]]')",
+ "delete-confirm": "Peeruk \"$1\"",
+ "actioncomplete": "Naammassivoq",
+ "deletedtext": "\"$1\" peerpoq. Takukkit $2 peerneqarsimasut kingulliit.",
+ "revertpage": "Inisseqqiineq [[User:$1|$1]]-meersoq, peerneqarpoq [[Special:Contributions/$2|$2]] ([[User talk:$2|diskussion]])-meersoq",
+ "prot_1movedto2": "[[$1]]-i nuunneqarsimavoq [[$2]]-mut",
+ "protect-expiry-options": "1 tiimi:1 hour,ulloq 1:1 day,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite",
+ "undeletebtn": "Inisseqqiguk",
+ "undelete-search-submit": "Ujarlerit",
+ "namespace": "Quppernerup ilusia:",
+ "invert": "Quppernerup ilusia qinernagu",
+ "blanknamespace": "(Pingaarneq)",
+ "contributions": "Atuisup tapii",
+ "mycontris": "Tapikka",
+ "contribsub2": "$1-meersoq ($2)",
+ "uctop": "(kingulleq)",
+ "month": "Qaammat:",
+ "year": "Ukioq:",
+ "sp-contributions-newbies": "Atuisut nutaaginnaat takukkit",
+ "sp-contributions-talk": "oqallinneq",
+ "sp-contributions-search": "Tapiisunik ujaasineq",
+ "sp-contributions-username": "IP adresse imalt. atuisoq:",
+ "sp-contributions-submit": "Ujaruk",
+ "whatlinkshere": "Suna maangamut innersuussisoq",
+ "whatlinkshere-prev": "{{PLURAL:$1|siulia|siulii $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|tullia|tullii $1}}",
+ "blockip": "Atuisoq asseruk",
+ "blockip-legend": "Atuisoq asseruk",
+ "ipaddressorusername": "IP adresse imalt. atuisoq:",
+ "ipboptions": "2 tiimit:2 hours,ulloq 1:1 day,ullut 3:3 days,sap akunn 1:1 week,sap akunn 2:2 weeks,qaammat 1:1 month,qaammatit 3:3 months,qaammatit 6:6 months,ukioq 1:1 year,killeqanngitsoq:infinite",
+ "ipblocklist-submit": "Ujarlerit",
+ "infiniteblock": "killeqanngitsoq",
+ "expiringblock": "atorunnaassaaq $1 $2-nngoruni",
+ "blocklink": "assersoruk",
+ "contribslink": "tapikkat",
+ "blocklogentry": "asserpaa [[$1]] $2-mik sivissusilimmik $3",
+ "movearticle": "Qupperneq nuuguk",
+ "move-watch": "Qupperneq ersersimatiguk",
+ "movepagebtn": "Qupperneq nuuguk",
+ "pagemovedsub": "Nuunnera iluatsippoq",
+ "movepage-moved": "Qupperneq '''\"$1\" uunga nuuppoq \"$2\"'''",
+ "allmessages-language": "Oqaatsit:",
+ "allmessages-filter-submit": "Takuuk",
+ "thumbnail-more": "Allisiguk",
+ "tooltip-pt-userpage": "Atuisutut quppernerit",
+ "tooltip-pt-mytalk": "Oqalliffiit",
+ "tooltip-pt-preferences": "Inissiinikka",
+ "tooltip-pt-mycontris": "Tapikkatit",
+ "tooltip-pt-login": "Iseqquneqaraluarputit, pitsaanerussagaluarpoq",
+ "tooltip-pt-logout": "Aniffik",
+ "tooltip-ca-talk": "Quppernerup imaanik oqallinneq",
+ "tooltip-ca-edit": "Allanngortiterisinnaavutit. Isikkua takulaariuk",
+ "tooltip-ca-history": "Quppernerup siulii",
+ "tooltip-ca-move": "Qupperneq nuuguk",
+ "tooltip-ca-watch": "Saqqumitiguk",
+ "tooltip-search": "Ujaarlerit {{SITENAME}}",
+ "tooltip-search-go": "Tassunngarit nassaassappat",
+ "tooltip-search-fulltext": "Taanna ujaruk",
+ "tooltip-n-mainpage": "Saqqaa iseruk",
+ "tooltip-n-mainpage-description": "Saqqaa iseruk",
+ "tooltip-n-portal": "Suliaq, ilitsersuut, nassaassaasinnaasullu",
+ "tooltip-n-currentevents": "Maannakkut pisut tunuliaqutai takukkit",
+ "tooltip-n-recentchanges": "Wikimi allannguutit kingulliit",
+ "tooltip-n-randompage": "Allaaserisamukarit",
+ "tooltip-n-help": "Qanoq iliussaanga ...",
+ "tooltip-t-whatlinkshere": "Innersuussami saqqummiussat",
+ "tooltip-t-recentchangeslinked": "Massuma quppernerani allannguutit kingulliit",
+ "tooltip-t-upload": "Assinik mediafiilinilluunniit ilisigit",
+ "tooltip-t-specialpages": "Quppernerit immikkut ittut nassaassaasinnaasut",
+ "tooltip-t-print": "Quppernerup naqikkuminarnera",
+ "tooltip-t-permalink": "Massuma quppernerup taamaaqqaarnera",
+ "tooltip-ca-nstab-main": "Imarisaa takuuk",
+ "tooltip-save": "Allannguutitit toqqukkit",
+ "tooltip-preview": "Isikkua takuuk, toqqortinnaguk atortaruk!",
+ "lastmodifiedatby": "Una qupperneq kingullermik allanngortinneqarsimavoq $2, $1 $3-mit.",
+ "previousdiff": "← Assigiinngissut siulia",
+ "nextdiff": "Assigiinngissut tullia →",
+ "ilsubmit": "Ujarlerit",
+ "namespacesall": "tamarmik",
+ "monthsall": "tamarmik",
+ "autosumm-new": "Qupperneq pilersippaa '$1'",
+ "specialpages": "Quppernerit immikkut ittut",
+ "searchsuggest-search": "Ujarlerit"
}
diff --git a/languages/i18n/km.json b/languages/i18n/km.json
index 1c977719..bbea687f 100644
--- a/languages/i18n/km.json
+++ b/languages/i18n/km.json
@@ -14,7 +14,8 @@
"គីមស៊្រុន",
"តឹក ប៊ុនលី",
"វ័ណថារិទ្ធ",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "គូសបន្ទាត់ក្រោម​តំណភ្ជាប់៖",
@@ -180,6 +181,7 @@
"permalink": "តំណភ្ជាប់អចិន្ត្រៃយ៍",
"print": "បោះពុម្ព",
"view": "មើល",
+ "view-foreign": "មើលលើ $1",
"edit": "កែប្រែ",
"create": "បង្កើត",
"editthispage": "កែប្រែទំព័រនេះ",
@@ -214,6 +216,7 @@
"otherlanguages": "ជាភាសាដទៃទៀត",
"redirectedfrom": "(ត្រូវបានបញ្ជូនបន្តពី $1)",
"redirectpagesub": "ទំព័របញ្ជូនបន្ត",
+ "redirectto": "បញ្ជូនបន្តទៅ៖",
"lastmodifiedat": "ទំព័រនេះត្រូវបានកែចុងក្រោយនៅ$2 $1",
"viewcount": "ទំព័រនេះ​ត្រូវបានចូលមើល​ចំនួន'''{{PLURAL:$1|ម្ដង|$1ដង}}'''",
"protectedpage": "ទំព័រដែលត្រូវបានការពារ",
@@ -265,6 +268,9 @@
"hidetoc": "លាក់",
"collapsible-collapse": "បង្រួម",
"collapsible-expand": "ពន្លាត",
+ "confirmable-confirm": "តើ {{GENDER:$1|អ្នក}} ប្រាកដហើយ?",
+ "confirmable-yes": "បាទ/ចាស",
+ "confirmable-no": "ទេ",
"thisisdeleted": "មើល ឬ​ ស្ដារ $1 ឡើងវិញ?",
"viewdeleted": "មើល $1?",
"restorelink": "{{PLURAL:$1|កំណែប្រែមួយត្រូវបានលុបចោល|កំណែប្រែចំនួន $1 ត្រូវបានលុបចោល}}",
@@ -330,7 +336,8 @@
"viewsourcetext": "អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ៖",
"viewyourtext": "អ្នកអាចមើលនិងចម្លងកូដរបស់'''ការកែប្រែរបស់អ្នក'''មកកាន់ទំព័រនេះ៖",
"protectedinterface": "ទំព័រនេះផ្ដល់នូវអត្ថបទអន្តរមុខសម្រាប់សូហ្វវែរនៅក្នុងវិគីនេះ និងត្រូវបានចាក់សោដើម្បីចៀសវាងការបំពាន។\nដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែសំរាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគំរោងបកប្រែរបស់MediaWiki។",
- "editinginterface": "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិគីនេះ។ ដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែ​សំរាប់វិគីទាំងអស់ សូបប្រើប្រាស់ [//translatewiki.net/wiki/Main_Page?setlang=km translatewiki.net] គម្រោង​បកប្រែរបស់មេឌាវិគី ។",
+ "editinginterface": "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិគីនេះ។",
+ "translateinterface": "ដើម្បីបន្ថែមឬកែប្រែការបកប្រែសម្រាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគម្រោងបកប្រែវិគីមេឌា។",
"cascadeprotected": "ទំព័រនេះត្រូវបានការពារពីការការប្រែដោយសារវាមាន{{PLURAL:$1|ទំព័រ, ដែលមាន}} ដែលត្រូវបានការពារជាមួយជំរើស\"ជាបណ្ដាក់\"៖\n$2",
"namespaceprotected": "អ្នកមិនមានសិទ្ធិកែប្រែទំព័រក្នុងប្រភេទ'''$1'''ទេ។",
"customcssprotected": "អ្នកមិនមាន​ការអនុញ្ញាត​ក្នុងការកែប្រែទំព័រ CSS នេះទេ ព្រោះវាផ្ទុកការកំណត់ផ្ទាល់ខ្លួនផ្សេងៗរបស់អ្នកប្រើប្រាស់ម្នាក់ផ្សេងទៀត។",
@@ -345,7 +352,7 @@
"invalidtitle-knownnamespace": "ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះ \"$2\" និងអត្ថបទ \"$3\"",
"invalidtitle-unknownnamespace": "ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះមិនស្គាល់លេខ $1 និងអត្ថបទ \"$2\"",
"exception-nologin": "មិនទាន់កត់ឈ្មោះចូលទេ",
- "exception-nologin-text": "សូម[[Special:Userlogin|lកត់ឈ្មោះចូល]]ដើម្បីចូលអានទំព័រឬធ្វើសកម្មភាពនេះ។",
+ "exception-nologin-text": "សូមកត់ឈ្មោះចូលដើម្បីចូលអានទំព័រឬធ្វើសកម្មភាពនេះ។",
"exception-nologin-text-manual": "សូម $1 ដើម្បីអាចចូលមើលទំព័រនេះឬធ្វើសកម្មភាពអ្វីមួយ។",
"virus-badscanner": "ការ​កំណត់​រចនា​សម្ព័ន្ធ​មិន​ល្អ​៖ កម្មវិធី​ស្កេន​មេរោគមិន​ស្គាល់​៖ ''$1''",
"virus-scanfailed": "ស្កេនមិនបានសំរេច (កូដ $1)",
@@ -386,6 +393,7 @@
"gotaccountlink": "កត់ឈ្មោះចូល",
"userlogin-resetlink": "តើអ្នកភ្លេចព័ត៌មានលម្អិតសម្រាប់កត់ឈ្មោះចូលហើយ?",
"userlogin-resetpassword-link": "អ្នកភ្លេចពាក្យសម្ងាត់ហើយ?",
+ "userlogin-helplink2": "ជំនួយលើការកត់ឈ្មោះចូល",
"userlogin-loggedin": "អ្នកបានកត់ឈ្មោះចូលជា {{GENDER:$1|$1}} ហើយ។\nប្រើសំណុំបែបបទខាងក្រោមដើម្បីកត់ឈ្មោះចូលជាអ្នកប្រើប្រាស់ផ្សេងម្នាក់ទៀត។",
"userlogin-createanother": "បង្កើតគណនីមួយទៀត",
"createacct-emailrequired": "អាសយដ្ឋានអ៊ីមែល",
@@ -452,6 +460,7 @@
"loginlanguagelabel": "ភាសា៖ $1",
"createacct-another-realname-tip": "អ្នកអាចផ្ដល់ឈ្មោះពិតរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ បើអ្នកផ្ដល់ឱ្យ វានឹងត្រូវបានប្រើប្រាស់់ដើម្បីបញ្ជាក់ភាពជាម្ចាស់​លើការរួមចំណែក​នានា​របស់អ្នក។",
"pt-login": "កត់ឈ្មោះចូល",
+ "pt-login-button": "កត់ឈ្មោះចូល",
"pt-createaccount": "បង្កើតគណនី",
"pt-userlogout": "កត់ឈ្មោះចេញ",
"php-mail-error-unknown": "កំហុសមិនស្គាល់នៅក្នុងអនុគមន៍ mail() របស់ PHP",
@@ -476,11 +485,12 @@
"resetpass-temp-emailed": "អ្នកបានកត់ឈ្មោះចូលដោយប្រើលេខកូដបណ្ដោះអាសន្នផ្ញើតាមអ៊ីមែល។\nដើម្បីបញ្ចប់ការកត់ឈ្មោះចូល អ្នកចាំបាច់ត្រូវតែកំណត់ពាក្យសម្ងាត់ថ្មីនៅទីនេះ៖",
"resetpass-temp-password": "ពាក្យសម្ងាត់បណ្តោះអាសន្ន:",
"resetpass-expired": "ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ។ សូមកំណត់ពាក្យសម្ងាត់ថ្មីដើម្បីកត់ឈ្មោះចូល។",
- "resetpass-expired-soft": "ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ ហើយអ្នកត្រូវតែកំណត់វាឡើងវិញ។ សូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីឥឡូវនេះ ឬចុចបោះបង់ដើម្បីកំណត់វានៅពេលក្រោយ។",
- "passwordreset": "កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ",
+ "resetpass-expired-soft": "ពាក្យសម្ងាត់របស់អ្នកហួសសុពលភាពហើយ ហើយអ្នកត្រូវតែកំណត់វាឡើងវិញ។ សូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីឥឡូវនេះ ឬចុច\"{{int:resetpass-submit-cancel}}\"ដើម្បីកំណត់វានៅពេលក្រោយ។",
+ "resetpass-validity-soft": "ពាក្យសម្ងាត់របស់អ្នកមិនត្រឹមត្រូវទេ៖ $1\n\nសូមជ្រើសរើសពាក្យសម្ងាត់ថ្មីមួយឥឡូវនេះ ឬក៏ចុច\"{{int:resetpass-submit-cancel}}\" ដើម្បីកំណត់វាឡើងវិញនៅពេលក្រោយ។",
+ "passwordreset": "កំណត់​ពាក្យសម្ងាត់​ឡើងវិញ",
"passwordreset-text-one": "បំពេញសំណុំបែបបទនេះដើម្បីស្ដារពាក្យសម្ងាត់របស់អ្នក។",
"passwordreset-text-many": "{{PLURAL:$1|សូមបំពេញក្នុងប្រអប់មួយក្នុងចំណោមប្រអប់ខាងក្រោមដើម្បីទទួលពាក្យសម្ងាត់បណ្ដោះអាសន្នមួយតាមរយៈអ៊ីមែល។}}",
- "passwordreset-legend": "កំណត់​ពាក្យសម្ងាត់​សាឡើងវិញ",
+ "passwordreset-legend": "កំណត់​ពាក្យសម្ងាត់​ឡើងវិញ",
"passwordreset-disabled": "មុខងារប្ដូរទៅពាក្យសម្ងាត់ដើមត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។",
"passwordreset-emaildisabled": "មុខងារអ៊ីមែលត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។",
"passwordreset-username": "អត្តនាម៖",
@@ -496,7 +506,6 @@
"passwordreset-emailsent-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានផ្ញើទៅហើយ។",
"passwordreset-emailerror-capture": "អ៊ីមែលស្ដារពាក្យសម្ងាត់មួយដូចបង្ហាញខាងក្រោមត្រូវបានបង្កើតហើយ ប៉ុន្តែការផ្ញើទៅកាន់ {{GENDER:$2|អ្នកប្រើប្រាស់}}មិនបានសំរេចទេ៖ $1",
"changeemail": "ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែល",
- "changeemail-header": "ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលសំរាប់គណនីនេះ",
"changeemail-text": "សូមបំពេញសំនុំបែបបទនេះដើម្បីផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលរបស់អ្នក។ អ្នកនឹងត្រូវបញ្ចូលពាក្យសម្ងាត់ដើម្បីអះអាងលើការផ្លាស់ប្ដូរនេះ។",
"changeemail-no-info": "អ្នក​ចាំបាច់​ត្រូវតែ​កត់ឈ្មោះចូល ដើម្បី​ចូលទៅកាន់​ទំព័រ​នេះ​ដោយផ្ទាល់​។",
"changeemail-oldemail": "អាសយដ្ឋានអ៊ីមែលបច្ចុប្បន្ន៖",
@@ -504,7 +513,6 @@
"changeemail-none": "(គ្មាន​)",
"changeemail-password": "ពាក្យសំងាត់{{SITENAME}}របស់អ្នក:",
"changeemail-submit": "ផ្លាស់ប្ដូរអ៊ីមែល",
- "changeemail-cancel": "បោះបង់",
"changeemail-throttled": "អ្នកបានព្យាយាមកត់ឈ្មោះចូលច្រើនដងពេកហើយ។​\nសូមរង់ចាំរយៈពេល$1 មុនពេលសាកល្បងម្ដងទៀត។",
"bold_sample": "អក្សរដិត",
"bold_tip": "អក្សរដិត",
@@ -532,8 +540,8 @@
"preview": "មើលជាមុន",
"showpreview": "បង្ហាញ​ការមើលជាមុន",
"showdiff": "បង្ហាញ​បន្លាស់ប្ដូរ",
- "anoneditwarning": "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។",
- "anonpreviewwarning": "''អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។''",
+ "anoneditwarning": "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។ បើសិនជាអ្នក <strong>[$1 កត់ឈ្មោះចូល]</strong> ឬ <strong>[$2 បង្កើតគណនី]</strong> នោះការកែប្រែរបស់អ្នកនឹងត្រូវភ្ចាប់ជាមួយអត្តនាមរបស់អ្នកផង នឹងមានផលប្រយោជន៍ផ្សេងទៀតផង។",
+ "anonpreviewwarning": "<em>អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។</em>",
"missingsummary": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ចំណារពន្យល់អំពីកំណែប្រែនេះទេ។\n\nបើសិនជាអ្នកចុច '''រក្សាទុក''' ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានចំណារពន្យល់។",
"missingcommenttext": "សូមវាយបញ្ចូលយោបល់មួយនៅខាងក្រោម។",
"missingcommentheader": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ឱ្យនូវ ប្រធានបទ/ចំណងជើង របស់មតិយោបល់នេះទេ។\nបើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានវា។",
@@ -613,6 +621,8 @@
"edit-gone-missing": "មិនអាចបន្ទាន់សម័យទំព័រនេះទេ។\n\nទំព័រនេះហាក់ដូចជាត្រូវបានលុបចោលហើយ។",
"edit-conflict": "កែប្រែ​ភាពឆ្គង​។",
"edit-no-change": "ការកែប្រែរបស់អ្នកត្រូវបានមិនទុកជាការទេ ព្រោះគ្មានការផ្លាស់ប្ដូរណាមួយត្រូវបានធ្វើនៅលើអត្ថបទនេះទេ។",
+ "postedit-confirmation-created": "បានបង្កើតទំព័ររូចហើយ។",
+ "postedit-confirmation-restored": "បានស្ដារទំព័រឡើងវិញរួចហើយ។",
"postedit-confirmation-saved": "កំណែប្រែរបស់អ្នកត្រូវបានរក្សាទុកហើយ។",
"edit-already-exists": "មិនអាចបង្កើតទំព័រថ្មីមួយទេ។\n\nទំព័រនេះមានរួចហើយ។",
"defaultmessagetext": "អត្ថបទសារតាមលំនាំដើម",
@@ -641,7 +651,7 @@
"currentrev": "កំណែបច្ចុប្បន្ន",
"currentrev-asof": "កំណែប្រែបច្ចុប្បន្ន $1",
"revisionasof": "កំណែ​របស់ $1",
- "revision-info": "កំណែ​របស់ $1 ដោយ $2",
+ "revision-info": "កំណែ​នៅ $1 ដោយ {{GENDER:$6|$2}}$7",
"previousrevision": "← កំណែ​មុន",
"nextrevision": "កំណែបន្ទាប់ →",
"currentrevisionlink": "កំណែបច្ចុប្បន្ន",
@@ -739,7 +749,6 @@
"mergehistory-same-destination": "ទំព័រប្រភពនិងទំព័រគោលដៅមិនអាចមានចំណងជើងដូចគ្នាបានទេ។",
"mergehistory-reason": "មូលហេតុ៖",
"mergelog": "កំណត់ហេតុនៃការច្របាច់បញ្ចូលគ្នា",
- "pagemerge-logentry": "បានច្របាច់បញ្ចូល[[$1]]ទៅក្នុង[[$2]] (ចំនួនកំណែរហូតដល់$3)",
"revertmerge": "បំបែកចេញ",
"mergelogpagetext": "ខាងក្រោមគឺជាតារាងនៃការច្របាច់បញ្ចូលគ្នាថ្មីៗបំផុតរបស់ប្រវត្តិនៃទំព័រមួយទៅក្នុងប្រវត្តិនៃទំព័រមួយទៀត។",
"history-title": "ប្រវត្តិកំណែប្រែរបស់ \"$1\"",
@@ -765,7 +774,7 @@
"shown-title": "បង្ហាញ $1 {{PLURAL:$1|លទ្ធផល|លទ្ធផល}}ក្នុងមួយទំព័រ",
"viewprevnext": "មើល ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "* ទំព័រ '''[[$1]]'''",
- "searchmenu-new": "'''បង្កើតទំព័រ \"[[:$1]]\" នៅ​លើ​វិគី​នេះ!'''",
+ "searchmenu-new": "<strong>បង្កើតទំព័រ \"[[:$1]]\" នៅ​លើ​វិគី​នេះ!</strong> {{PLURAL:$2|0=|សូមមើលផងដែរទំព័រដែលរកឃើញជាមួយពាក្យដែលអ្នកស្វែងរក។|សូមមើលផងដែរលទ្ធផលដែលរកឃើញ។}}",
"searchprofile-articles": "ទំព័រ​មាតិកា",
"searchprofile-images": "ពហុ​ព័ត៌មាន",
"searchprofile-everything": "ទាំងអស់",
@@ -778,6 +787,8 @@
"search-result-category-size": "{{PLURAL:$1|សមាជិកម្នាក់|សមាជិក$1នាក់}} ({{PLURAL:$2|កូនចំណាត់ថ្នាក់ក្រុម១|$2 កូនចំណាត់ថ្នាក់ក្រុម}}, {{PLURAL:$3|1 ឯកសារ|$3 ឯកសារ}})",
"search-redirect": "(បញ្ជូនបន្ត $1)",
"search-section": "(ផ្នែក $1)",
+ "search-category": "(ចំណាត់ថ្នាក់ក្រុម $1)",
+ "search-file-match": "(ខ្លឹមសារឯកសារត្រូវគ្នា)",
"search-suggest": "ប្រហែលជាអ្នកចង់រក៖ $1",
"search-interwiki-caption": "គម្រោងជាបងប្អូន",
"search-interwiki-default": "លទ្ធផលពី$1៖",
@@ -786,7 +797,6 @@
"searchrelated": "ទាក់ទិន",
"searchall": "ទាំងអស់",
"showingresults": "ខាងក្រោមកំពុងបង្ហាញរហូតដល់ {{PLURAL:$1|'''១''' លទ្ឋផល|'''$1''' លទ្ឋផល}} ចាប់ផ្ដើមពីលេខ #'''$2'''។",
- "showingresultsheader": "{{PLURAL:$5|លទ្ឋផល '''$1''' ក្នុងចំណោមលទ្ឋផលសរុប '''$3'''|លទ្ឋផល '''$1 - $2''' ក្នុងចំណោមលទ្ឋផលសរុប '''$3'''}} សម្រាប់ '''$4'''",
"search-nonefound": "មិនមានលទ្ធផលណាមួយ​ត្រូវគ្នានឹងសំណើសុំនេះទេ",
"powersearch-legend": "ស្វែងរកថ្នាក់ខ្ពស់",
"powersearch-ns": "ស្វែងរកក្នុងលំហឈ្មោះ៖",
@@ -799,6 +809,7 @@
"preferences": "ចំណង់ចំណូលចិត្ត",
"mypreferences": "ចំណង់ចំណូលចិត្ត​",
"prefs-edits": "ចំនួនកំណែប្រែ៖",
+ "prefsnologintext2": "សូមកត់ឈ្មោះចូលដើម្បីផ្លាស់ប្ដូរចំណង់ចំណូលចិត្តរបស់អ្នក។",
"prefs-skin": "សំបក",
"skin-preview": "មើលជាមុន",
"datedefault": "គ្មានចំណូលចិត្ត",
@@ -875,7 +886,7 @@
"gender-female": "ស្រី",
"prefs-help-gender": "ចំណង់ចំណូលចិត្តនេះកំណត់ក៏បានមិនកំណត់ក៏បាន៖ ប្រើសំរាប់អោយសូហ្វវែរហៅតាមភេទអោយបាមត្រឹមត្រូវ។ ព័ត៌មាននេះនឹងត្រូវបង្ហាញជាសាធារណៈ។",
"email": "អ៊ីមែល",
- "prefs-help-realname": "អ្នកអាចផ្ដល់ឈ្មោះពិតរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ បើអ្នកផ្ដល់ឱ្យ វានឹងត្រូវបានប្រើប្រាស់់ដើម្បីបញ្ជាក់ភាពជាម្ចាស់​លើការរួមចំណែក​នានា​របស់អ្នក។",
+ "prefs-help-realname": "អ្នកអាចផ្ដល់ឈ្មោះពិតរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ បើអ្នកផ្ដល់ឱ្យ វានឹងត្រូវបានប្រើប្រាស់់ដើម្បីបញ្ជាក់ភាពជាម្ចាស់​លើស្នាដៃ​របស់អ្នក។",
"prefs-help-email": "អ្នកអាចផ្ដល់អាសយដ្ឋានអ៊ីមែលរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ ប៉ុន្ដែអាសយដ្ឋានអ៊ីមែលដែលផ្ដល់អោយនឹងមានប្រយោជន៍ក្នុងការប្ដូរពាក្យសម្ងាត់ ពេលដែលអ្នកភ្លេចវា។",
"prefs-help-email-others": "អ្នកក៏អាចជ្រើសរើស​ការផ្ដល់លទ្ឋភាព​​ឱ្យអ្នកដទៃទាក់ទងអ្នក​តាមរយៈ​​ទំព័រអ្នកប្រើប្រាស់​​ឬទំព័រពិភាក្សារបស់អ្នក​​ដោយមិនចាំបាច់ឱ្យគេដឹងពីអត្តសញ្ញាណរបស់អ្នកផងដែរ។",
"prefs-help-email-required": "អាសយដ្ឋានអ៊ីមែលត្រូវការជាចាំបាច់។",
@@ -946,6 +957,7 @@
"right-move": "ប្ដូរទីតាំងទំព័រ",
"right-move-subpages": "ប្ដូរទីតាំងទំព័ររួមជាមួយទំព័ររងរបស់វា",
"right-move-rootuserpages": "ប្ដូរទីតាំងឫសទំព័រអ្នកប្រើប្រាស់",
+ "right-move-categorypages": "ប្ដូរទីតាំងទំព័រចំណាត់ថ្នាក់ក្រុម",
"right-movefile": "ប្ដូរទីតាំងឯកសារ",
"right-suppressredirect": "មិនបង្កើតការបញ្ជូនបន្តពីទំព័រប្រភពនៅពេលប្ដូរទីតាំងទំព័រ",
"right-upload": "ផ្ទុកឡើងឯកសារ",
@@ -1015,6 +1027,7 @@
"action-move": "ប្ដូរទីតាំងទំព័រនេះ",
"action-move-subpages": "ប្ដូរទីតាំងទំព័រនេះព្រមទាំងអនុទំព័ររបស់វា",
"action-move-rootuserpages": "ប្ដូរទីតាំងឫសទំព័រអ្នកប្រើប្រាស់",
+ "action-move-categorypages": "ប្ដូរទីតាំងទំព័រចំណាត់ថ្នាក់ក្រុម",
"action-movefile": "ប្ដូរទីតាំងឯកសារនេះ",
"action-upload": "ផ្ទុកឡើងឯកសារនេះ",
"action-reupload": "ផ្ទុកជាន់ពីលើឯកសារដែលមានស្រាប់ហើយនេះ",
@@ -1226,6 +1239,7 @@
"license-nopreview": "(មិនទាន់មានការបង្ហាញការមើលជាមុនទេ)",
"upload_source_url": "(URL ត្រឹមត្រូវនិងបើកចំហជាសាធារណៈ)",
"upload_source_file": "(ឯកសារក្នុងកុំព្យូទ័ររបស់អ្នក)",
+ "listfiles-delete": "លុបចោល",
"listfiles-summary": "ទំព័រពិសេស​នេះ​បង្ហាញ​គ្រប់​ឯកសារ​ដែល​បានផ្ទុកឡើង។",
"listfiles_search_for": "ស្វែងរកឈ្មោះមេឌា៖",
"imgfile": "ឯកសារ",
@@ -1312,14 +1326,11 @@
"randomincategory": "ទំព័រចៃដន្យក្នុងចំណាត់ថ្នាក់ក្រុម",
"randomincategory-invalidcategory": "\"$1\" មិនមែនជាឈ្មោះចំណាតក្រុមត្រឹមត្រូវ។",
"randomincategory-nopages": "គ្មានទំព័រណាមួយក្នុងចំណាត់ថ្នាក់ក្រុម [[:Category:$1|$1]] ទេ។",
- "randomincategory-selectcategory": "បង្ហាញទំព័រចៃដន្យពីចំណាត់ថ្នាក់ក្រុម៖ $1 $2។",
- "randomincategory-selectcategory-submit": "ទៅ",
"randomredirect": "ទំព័របញ្ជូនបន្តចៃដន្យ",
"randomredirect-nopages": "គ្មានទំព័របញ្ជូនបន្តណាមួយនៅក្នុងប្រភេទ \"$1\" ទេ។",
"statistics": "ស្ថិតិ",
"statistics-header-pages": "ស្ថិតិទំព័រ",
"statistics-header-edits": "ស្ថិតិកំណែប្រែ",
- "statistics-header-views": "មើលស្ថិតិ",
"statistics-header-users": "ស្ថិតិអ្នកប្រើប្រាស់",
"statistics-header-hooks": "ស្ថិតិ​ដទៃទៀត​",
"statistics-articles": "ទំព័រខ្លឹមសារ",
@@ -1328,13 +1339,9 @@
"statistics-files": "ឯកសារបានផ្ទុកឡើង",
"statistics-edits": "ការកែប្រែទំព័រចាប់តាំងពី{{SITENAME}}ត្រូវបានដំឡើង",
"statistics-edits-average": "កំណែប្រែជាមធ្យមក្នុងមួយទំព័រ",
- "statistics-views-total": "ចំនួនការចូលមើលសរុប",
- "statistics-views-total-desc": "មិនរាប់បញ្ចូលការចូលមើលទំព័រដែលគ្មានរូបរាងនិងទំព័រពិសេសៗទេ",
- "statistics-views-peredit": "ចំនួនការចូលមើលក្នុងមួយកំណែប្រែ",
"statistics-users": "[[Special:ListUsers|អ្នកប្រើប្រាស់]]ដែលបានចុះឈ្មោះ",
"statistics-users-active": "អ្នកប្រើប្រាស់សកម្ម",
"statistics-users-active-desc": "អ្នក​ប្រើប្រាស់​ដែល​បាន​អនុវត្ត​សកម្មភាព​ក្នុង​{{PLURAL:$1|ថ្ងៃ​}}ចុង​ក្រោយ​",
- "statistics-mostpopular": "ទំព័រដែលត្រូវបានមើលច្រើនបំផុត",
"doubleredirects": "ទំព័របញ្ជូនបន្តទ្វេដង",
"doubleredirectstext": "ទំព័រនេះរាយឈ្មោះទំព័រដែលបញ្ជូនបន្តទៅទំព័របញ្ជូនបន្ដផ្សេងទៀត។\n\nជួរនីមួយៗមានតំនភ្ជាប់ទៅកាន់ទំព័របញ្ជូនបន្តទី១និងទី២ ព្រមជាមួយទំព័រគោលដៅរបស់ទំព័របញ្ជូនបន្តទី២(ដែលជាធម្មតានេះក៏ជាទំព័រគោលដៅ\"ពិត\"របស់ទំព័របញ្ជូនបន្តទី១ដែរ)។",
"double-redirect-fixed-move": "[[$1]] ត្រូវបានដកចេញ។\n\nវាត្រូវបានបញ្ជូនបន្តទៅ [[$2]]",
@@ -1367,7 +1374,6 @@
"uncategorizedtemplates": "ទំព័រគំរូគ្មានចំណាត់ថ្នាក់ក្រុម",
"unusedcategories": "ចំណាត់ថ្នាក់ក្រុមដែលមិនត្រូវបានប្រើប្រាស់",
"unusedimages": "ឯកសារ(មេឌា​ រូបភាព)ដែលមិនត្រូវបានប្រើប្រាស់",
- "popularpages": "ទំព័រដែលមានប្រជាប្រិយ",
"wantedcategories": "ចំណាត់ថ្នាក់ក្រុមដែលគ្រប់គ្នាចង់បាន",
"wantedpages": "ទំព័រ​ដែល​គ្រប់គ្នា​ចង់បាន",
"wantedpages-badtitle": "ចំណងជើង​មិន​ត្រឹមត្រូវ​នៅ​ក្នុង​សំនុំ​លទ្ធផល​៖ $1",
@@ -1428,7 +1434,7 @@
"booksources": "ប្រភពសៀវភៅ",
"booksources-search-legend": "ស្វែងរកប្រភពសៀវភៅ",
"booksources-isbn": "លេខ​កូដ​សៀវ​ភៅ​ ISBN ៖",
- "booksources-go": "ទៅ",
+ "booksources-search": "ស្វែងរក",
"booksources-text": "ខាងក្រោមនេះជាបញ្ជីនៃតំណភ្ជាប់ទៅវិបសាយនានាដែលលក់​សៀវភៅថ្មីនិងជជុះ ហើយអាចផ្ដល់ព័ត៌មានបន្ថែមផ្សេងទៀតអំពីសៀវភៅដែលអ្នកកំពុងស្វែងរក៖",
"booksources-invalid-isbn": "លេខISBNដែលអ្នកផ្ដល់អោយហាក់ដូចជាមិនត្រឹមត្រូវទេ។ សូមពិនិត្យក្រែងលោមានកំហុសក្នុងការចម្លងចេញពីប្រភពដើម។",
"specialloguserlabel": "អ្នកប្រព្រឹត្តិ៖",
@@ -1492,6 +1498,7 @@
"listgrouprights-removegroup-self": "យក​ចេញ​{{PLURAL:$2|ក្រុម}}ពី​​គណនី​ផ្ទាល់ខ្លួន​៖ $1",
"listgrouprights-addgroup-self-all": "បន្ថែម​ក្រុម​ទាំងអស់​ទៅ​គណនី​ផ្ទាល់ខ្លួន​",
"listgrouprights-removegroup-self-all": "យក​ចេញ​​ក្រុម​ទាំងអស់​ពី​​គណនី​ផ្ទាល់ខ្លួន​",
+ "trackingcategories-name": "ឈ្មោះសារ",
"mailnologin": "គ្មានអាសយដ្ឋានផ្ញើទេ",
"mailnologintext": "អ្នកត្រូវតែ [[Special:UserLogin|កត់ឈ្មោះចូល]] និង មានអាសយដ្ឋានអ៊ីមែលមានសុពលភាពមួយ ក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នក ដើម្បីមានសិទ្ធិផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់ដទៃទៀត។",
"emailuser": "ផ្ញើអ៊ីមែល​ទៅកាន់​អ្នក​ប្រើប្រាស់នេះ",
@@ -1526,12 +1533,14 @@
"mywatchlist": "បញ្ជីតាមដាន​",
"watchlistfor2": "សម្រាប់ $1 $2",
"nowatchlist": "គ្មានអ្វីនៅក្នុងបញ្ជីតាមដានរបស់អ្នកទេ។",
- "watchlistanontext": "សូម $1 ដើម្បី​មើល​ឬ​កែប្រែ​របស់​ក្នុង​បញ្ជីតាមដាន​របស់អ្នក។",
+ "watchlistanontext": "សូមកត់ឈ្មោះចូលដើម្បី​មើល​ឬ​កែប្រែ​របស់​ក្នុង​បញ្ជីតាមដាន​របស់អ្នក។",
"watchnologin": "មិនទាន់កត់ឈ្មោះចូលទេ",
"addwatch": "បន្ថែមទៅបញ្ជីតាមដាន",
"addedwatchtext": "ទំព័រ \"[[:$1]]\" ត្រូវបានដាក់បញ្ចូលទៅក្នុង​[[Special:Watchlist|បញ្ជីតាមដាន]]របស់លោកអ្នកហើយ ។ រាល់ការផ្លាស់ប្ដូរនៃទំព័រនេះ រួមទាំងទំព័រពិភាក្សារបស់វាផងដែរ នឹងត្រូវបានដាក់បញ្ចូលក្នុងបញ្ជីនៅទីនោះ។",
+ "addedwatchtext-short": "ទំព័រ \"$1\" ត្រូវបានបន្ថែមទៅក្នុងបញ្ជីតាមដានរបស់អ្នកហើយ។",
"removewatch": "ដកចេញពីបញ្ជីតាមដាន",
- "removedwatchtext": "ទំព័រ \"[[:$1]]\" ត្រូវបានដកចេញពី[[Special:Watchlist|បញ្ជីតាមដាន]]របស់លោកអ្នកហើយ ។",
+ "removedwatchtext": "ទំព័រ \"[[:$1]]\" ត្រូវបានដកចេញពី[[Special:Watchlist|បញ្ជីតាមដានរបស់លោកអ្នក]]ហើយ ។",
+ "removedwatchtext-short": "ទំព័រ \"$1\" ត្រូវបានដកចេញបញ្ជីតាមដានរបស់អ្នកហើយ។",
"watch": "តាមដាន",
"watchthispage": "តាមដានទំព័រនេះ",
"unwatch": "ឈប់​តាមដាន",
@@ -1542,7 +1551,7 @@
"wlheader-enotif": "បើកប្រើការផ្ដល់ដំណឹងតាមរយៈអ៊ីមែល។",
"wlheader-showupdated": "ទំព័រដែលត្រូវបានផ្លាស់ប្តូរតាំងពីពេលចូលមើលចុងក្រោយរបស់អ្នក ត្រូវបានបង្ហាញជា '''អក្សរដិត'''។",
"wlnote": "ខាងក្រោមនេះជា {{PLURAL:$1|បំលាស់ប្តូរចុងក្រោយ|'''$1'''បំលាស់ប្តូរចុងក្រោយ}}ក្នុងរយះពេល{{PLURAL:$2|'''$2'''ម៉ោង}}ចុងក្រោយ គិតចាប់ពី $3, $4។",
- "wlshowlast": "បង្ហាញ $1ម៉ោងចុងក្រោយ $2ថ្ងៃចុងក្រោយ ឬ$3",
+ "wlshowlast": "បង្ហាញ $1ម៉ោងចុងក្រោយ $2ថ្ងៃចុងក្រោយ",
"watchlist-options": "ជម្រើសនានាក្នុងបញ្ជីតាមដាន",
"watching": "កំពុង​តាមដាន...",
"unwatching": "ឈប់​តាមដាន...",
@@ -1588,8 +1597,8 @@
"delete-edit-reasonlist": "ពិនិត្យផ្ទៀងផ្ទាត់ហេតុផលនៃការលុប",
"delete-toobig": "ទំព័រនេះមានប្រវត្តិកែប្រែធំលើសពី $1 {{PLURAL:$1|កំណែ|កំណែ}}។\n\nការលុបទំព័របែបនេះចោលត្រូវបានហាមឃាត់ ដើម្បីបង្ការកុំអោយមានការរអាក់រអួលក្នុង{{SITENAME}}។",
"delete-warning-toobig": "ទំព័រនេះមានប្រវត្តិកែប្រែធំលើសពី $1 {{PLURAL:$1|កំណែ|កំណែ}}។\n\nការលុបទំព័របែបនេះចោលអាចធ្វើអោយមានការរអាក់រអួលប្រតិបត្តិការរបស់មូលដ្ឋានទិន្នន័យក្នុង{{SITENAME}}។\n\nសូមបន្តសកម្មភាពនេះដោយប្រុងប្រយ័ត្ន។",
+ "deleteprotected": "អ្នកមិនអាចលុបចោលទំព័រនេះបានទេព្រោះវាត្រូវបានការពារហើយ។",
"rollback": "មូលត្រឡប់កំណែប្រែ",
- "rollback_short": "មូលត្រឡប់",
"rollbacklink": "មូលត្រឡប់",
"rollbacklinkcount": "មូលត្រឡប់ $1 {{PLURAL:$1|កំណែប្រែ|កំណែប្រែ}}",
"rollbacklinkcount-morethan": "មូលត្រឡប់ច្រើនជាង $1 {{PLURAL:$1|កំណែប្រែ|កំណែប្រែ}}",
@@ -1635,6 +1644,7 @@
"protect-othertime": "រយៈពេលផុតកំណត់ផ្សេងទៀត៖",
"protect-othertime-op": "រយៈពេលផុតកំណត់ផ្សេងទៀត",
"protect-existing-expiry": "រយៈពេលផុតកំណត់មានស្រាប់៖ $3, $2",
+ "protect-existing-expiry-infinity": "រយៈពេលផុតកំណត់មានស្រាប់៖ ជារៀងរហូត",
"protect-otherreason": "មូលហេតុបន្ថែមផ្សេងៗទៀត៖",
"protect-otherreason-op": "មូលហេតុផ្សេងទៀត",
"protect-dropdown": "*មូលហេតុការពារជាទូទៅ\n** ទទួលការបំផ្លិចបំផ្លាញយ៉ាងសំបើមក្រៃលែង\n** ស្ព៊ែមយ៉ាងសំបើមក្រៃលែង\n** សង្រ្គាមនៃការកែប្រែដែលនាំឲខូចប្រយោជន៍\n** ទំព័រដែលមានចរាចរកម្រិតខ្ពស់",
@@ -1700,6 +1710,7 @@
"contributions-title": "ការរួមចំណែករបស់អ្នកប្រើប្រាស់ $1",
"mycontris": "ការរួមចំណែក",
"contribsub2": "សម្រាប់{{GENDER:$3|$1}} ($2)",
+ "contributions-userdoesnotexist": "គណនីអ្នកប្រើប្រាស់ដែលមានឈ្មោះ \"$1\"មិនទាន់បានចុះឈ្មោះទេ។",
"nocontribs": "គ្មានការផ្លាស់ប្តូរត្រូវបានឃើញដូចនឹងលក្ខណៈវិនិច្ឆ័យទាំងនេះ។",
"uctop": "(បច្ចុប្បន្ន)",
"month": "ខែ៖",
@@ -1739,7 +1750,7 @@
"autoblockid": "ដាក់ការហាមឃាត់ជាស្វ័យប្រវត្តិលើ #$1",
"block": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
"unblock": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់",
- "blockip": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
+ "blockip": "ហាមឃាត់{{GENDER:$1|អ្នកប្រើប្រាស់}}",
"blockip-legend": "ដាក់ការហាមឃាត់លើអ្នកប្រើប្រាស់",
"blockiptext": "សូម​ប្រើប្រាស់​សំណុំ​បែបបទ​ខាងក្រោម​ដើម្បី​ហាមឃាត់ការសរសេរ​ពី​អាសយដ្ឋាន IP ឬ​ឈ្មោះ​អ្នកប្រើប្រាស់ណាមួយ​។\nការ​ធ្វើ​បែបនេះ​គួរតែ​ធ្វើឡើង​ក្នុង​គោលបំណង​បង្ការ​ការប៉ុនប៉ង​បំផ្លាញ(vandalism)ដូច​ដែល​មាន​ចែង​ក្នុង[[{{MediaWiki:Policy-url}}|គោលការណ៍]]។\nសូមបំពេញមូលហេតុច្បាស់លាស់មួយខាងក្រោម (ឧទាហរណ៍៖ រាយឈ្មោះទំព័រនានាដែលត្រូវបានគេបំផ្លាញ)។",
"ipaddressorusername": "អាសយដ្ឋានIP ឬអត្តនាម៖",
@@ -1765,7 +1776,7 @@
"ipb-unblock-addr": "ដកការហាមឃាត់លើ $1",
"ipb-unblock": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់ ឬ អាសយដ្ឋាន IP",
"ipb-blocklist": "មើលការហាមឃាត់ដែលមានហើយ",
- "ipb-blocklist-contribs": "ការរួមចំណែកសម្រាប់ $1",
+ "ipb-blocklist-contribs": "ការរួមចំណែកសម្រាប់ {{GENDER:$1|$1}}",
"unblockip": "ដកការហាមឃាត់លើអ្នកប្រើប្រាស់",
"unblockiptext": "សូម​ប្រើប្រាស់​ទម្រង់​បែបបទ​ខាងក្រោម​នេះ ដើម្បី​បើក​សិទ្ឋិ​សរសេរ​ឡើងវិញ សម្រាប់​អាសយដ្ឋាន​IP​ឬ​អ្នកប្រើប្រាស់​ដែល​ត្រូវ​បាន​ហាមឃាត់ពីមុន​។",
"ipusubmit": "ដក​ការហាមឃាត់នេះ​ចេញ",
@@ -1931,7 +1942,8 @@
"thumbnail_image-missing": "ឯកសារហាក់ដូចជាកំពុងបាត់ខ្លួន៖$1",
"import": "ការនាំចូលទំព័រ",
"importinterwiki": "ការនាំចូលអន្តរវិគី",
- "import-interwiki-source": "ប្រភព​ វិគី​/ទំព័រ​៖",
+ "import-interwiki-sourcewiki": "វិគីប្រភព៖",
+ "import-interwiki-sourcepage": "ទំព័រប្រភព៖",
"import-interwiki-history": "ចម្លង គ្រប់កំណែចាស់ នៃទំព័រនេះ",
"import-interwiki-templates": "រាប់​បញ្ចូល​ទំព័រគំរូ​ទាំងអស់​",
"import-interwiki-submit": "នាំចូល",
@@ -1956,9 +1968,7 @@
"import-upload": "ផ្ទុកឡើងទិន្នន័យ XML",
"import-invalid-interwiki": "មិន​អាច​នាំ​ចូល​ពី​វិគី​ដែល​បាន​បញ្ជាក់​។",
"importlogpage": "កំណត់ហេតុនៃការនាំចូល",
- "import-logentry-upload": "បាននាំចូល [[$1]] ដោយការផ្ទុកឡើង ឯកសារ",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|កំណែ}}",
- "import-logentry-interwiki": "បាននាំចូល$1ពីវិគីផ្សេងទៀត",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|កំណែ}} ពី $2",
"tooltip-pt-userpage": "ទំព័រអ្នកប្រើប្រាស់​របស់អ្នក​",
"tooltip-pt-mytalk": "ទំព័រពិភាក្សា​របស់អ្នក​",
@@ -1997,6 +2007,7 @@
"tooltip-feed-atom": "បម្រែបម្រួល Atom ចំពោះទំព័រនេះ",
"tooltip-t-contributions": "បង្ហាញបញ្ជីរួមចំណែករបស់អ្នកប្រើប្រាស់នេះ",
"tooltip-t-emailuser": "ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់នេះ",
+ "tooltip-t-info": "ព័ត៌មានបន្ថែមអំពីទំព័រនេះ",
"tooltip-t-upload": "ឯកសារផ្ទុកឡើង",
"tooltip-t-specialpages": "បញ្ជីទំព័រពិសេសៗទាំងមូល",
"tooltip-t-print": "ទម្រង់សម្រាប់បោះពុម្ភរបស់ទំព័រនេះ",
@@ -2054,7 +2065,6 @@
"pageinfo-robot-policy": "ដាក់ក្នុងលិបិក្រមដោយរូបយន្ត",
"pageinfo-robot-index": "អនុញ្ញាត",
"pageinfo-robot-noindex": "មិនអនុញ្ញាត",
- "pageinfo-views": "ចំនួនការបើកមើល",
"pageinfo-watchers": "ចំនួនអ្នកតាមដានទំព័រ",
"pageinfo-few-watchers": "អ្នកតាមដានតិចជាង $1 {{PLURAL:$1|នាក់|នាក់}}",
"pageinfo-redirects-name": "ចំនួនការបញ្ជូនបន្តមកកាន់ទំព័រនេះ",
@@ -2372,7 +2382,6 @@
"exif-urgency-low": "ទាប ($1)",
"exif-urgency-high": "ខ្ពស់ ($1)",
"exif-urgency-other": "តាមការកំណត់របស់អ្នកប្រើប្រាស់ ($1)",
- "watchlistall2": "ទាំងអស់",
"namespacesall": "ទាំងអស់",
"monthsall": "ទាំងអស់",
"confirmemail": "បញ្ជាក់ទទួលស្គាល់អាសយដ្ឋានអ៊ីមែល",
@@ -2423,6 +2432,7 @@
"autosumm-replace": "ជំនួសខ្លឹមសារនៃទំព័រដោយ '$1'",
"autoredircomment": "បញ្ជូនបន្តទៅ [[$1]]",
"autosumm-new": "បានបង្កើតទំព័រដែលផ្ដើមដោយ $1",
+ "autosumm-newblank": "បានបង្កើតទំព័រទទេ",
"size-bytes": "$1បៃ",
"size-kilobytes": "$1គីឡូបៃ",
"size-megabytes": "$1មេកាបៃ",
@@ -2442,11 +2452,12 @@
"watchlistedit-raw-done": "បញ្ជីតាមដានរបស់អ្នកត្រូវបានធ្វើឱ្យទាន់សម័យហើយ។",
"watchlistedit-raw-added": "{{PLURAL:$1| ចំណងជើង១បានត្រូវ|$1 ចំណងជើងបានត្រូវ}}ដាក់បន្ថែម៖",
"watchlistedit-raw-removed": "{{PLURAL:$1|១ចំណងជើងបានត្រូវ|$1ចំណងជើងបានត្រូវ}}ដកចេញ៖",
+ "watchlistedit-clear-title": "បានសម្អាតបញ្ចីតាមដាន",
+ "watchlistedit-clear-legend": "សម្អាតបញ្ជីតាមដាន",
"watchlisttools-view": "មើលបន្លាស់ប្ដូរពាក់ព័ន្ធ",
"watchlisttools-edit": "មើលនិងកែប្រែបញ្ជីតាមដាន",
"watchlisttools-raw": "កែប្រែបញ្ជីតាមដានឆៅ",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ការពិភាក្សា]])",
- "unknown_extension_tag": "ស្លាក​នៃផ្នែកបន្ថែម \"$1\" មិនស្គាល់",
"version": "កំណែ",
"version-extensions": "ផ្នែកបន្ថែមដែលបានដំឡើង",
"version-skins": "សំបក",
@@ -2457,9 +2468,11 @@
"version-mediahandlers": "កម្មវិធី​បើក​មេឌា​ (Media handlers)",
"version-hook-name": "ឈ្មោះ​ Hook",
"version-hook-subscribedby": "បានជាវ ជាប្រចាំ ដោយ",
- "version-version": "(កំណែ $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[គ្មានឈ្មោះ]",
"version-license": "អាជ្ញាបណ្ណ​មេឌាវិគី",
"version-ext-license": "អាជ្ញាបណ្ណ",
+ "version-skin-colheader-name": "សំបក",
"version-ext-colheader-version": "កំណែ",
"version-ext-colheader-license": "អាជ្ញាបណ្ណ",
"version-ext-colheader-description": "ការពិពណ៌នា",
@@ -2487,6 +2500,7 @@
"fileduplicatesearch-result-n": "មាន {{PLURAL:$2|1 ឯកសារដូចគ្នាបេះបិទ|$2 ឯកសារដូចគ្នាបេះបិទ}}ទៅនឹងឯកសារ \"$1\"។",
"fileduplicatesearch-noresults": "រកមិនឃើញឯកសារដែលមានឈ្មោះ \"$1\" ទេ។",
"specialpages": "ទំព័រ​ពិសេស​ៗ",
+ "specialpages-note-top": "កំណត់សម្គាល់",
"specialpages-note": "* ទំព័រពិសេសៗធម្មតា។\n* <span class=\"mw-specialpagerestricted\">ទំព័រពិសេសៗដែលមានការដាក់កំហិត។</span>",
"specialpages-group-maintenance": "របាយការណ៍នានាអំពីតំហែទាំ",
"specialpages-group-other": "ទំព័រពិសេសៗផ្សេងៗទៀត",
@@ -2500,6 +2514,7 @@
"specialpages-group-wiki": "ទិន្នន័យនិងឧបករណ៍",
"specialpages-group-redirects": "ទំព័របញ្ជូនបន្តពិសេសៗ",
"specialpages-group-spam": "ឧបករណ៍ស្ព៊ែម",
+ "specialpages-group-developer": "ឧបករណ៍​អ្នកអភិវឌ្ឍ",
"blankpage": "ទំព័រទទេ",
"intentionallyblankpage": "ទំព័រនេះត្រូវបានទុកចោលឱ្យនៅទំនេរដោយចេតនា",
"tags": "ស្លាក​បំលាស់​ប្ដូរ​ដែល​មាន​សុពលភាព​",
@@ -2543,6 +2558,8 @@
"htmlform-no": "ទេ",
"htmlform-yes": "ព្រម",
"htmlform-chosen-placeholder": "ជ្រើសយកជម្រើសមួយ",
+ "htmlform-cloner-create": "បន្ថែមទៀត",
+ "htmlform-cloner-delete": "ដកចេញ",
"logentry-delete-delete": "$1 {{GENDER:$2|បានលុប}} ទំព័រ $3 ចោល",
"logentry-delete-restore": "$1 {{GENDER:$2|បានស្ដារ}} ទំព័រ $3 ឡើងវិញ",
"revdelete-content-hid": "ខ្លឹមសារត្រូវបានលាក់",
@@ -2566,16 +2583,17 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|បានផ្លាស់ប្ដូរ}}សមាជិកភាពរបស់ $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|ត្រូវបានតំឡើង}}សមាជិកភាពពី $4 ជា $5 ដោយស្វ័យប្រវត្តិ",
"rightsnone": "(ទទេ)",
- "feedback-subject": "កម្មវត្ថុ ៖",
- "feedback-message": "សារ​៖",
- "feedback-cancel": "បោះបង់​",
- "feedback-submit": "ដាក់ស្នើមតិយោបល់",
+ "revdelete-summary": "កែប្រែចំណារពន្យល់",
"feedback-adding": "កំពុងបន្ថែមមតិយោបល់ទៅលើទំព័រ...",
+ "feedback-cancel": "បោះបង់​",
+ "feedback-close": "រួចរាល់",
"feedback-error1": "បញ្ហា៖ លទ្ធផលមិនស្គាល់ពី API",
"feedback-error2": "បញ្ហា៖ កែប្រែមិនបានសម្រេច",
"feedback-error3": "បញ្ហា៖ គ្មានចម្លើយតបពី API",
+ "feedback-message": "សារ​៖",
+ "feedback-subject": "កម្មវត្ថុ ៖",
+ "feedback-submit": "ដាក់ស្នើ",
"feedback-thanks": "សូមអរគុណ! មតិយោបល់របស់អ្នកត្រូវបានដាក់ផ្សាយនៅលើទំព័រ \"[$2 $1]\"។",
- "feedback-close": "រួចរាល់",
"searchsuggest-search": "ស្វែងរក​",
"searchsuggest-containing": "ដែលមានពាក្យ...",
"api-error-badaccess-groups": "អ្នកគ្មានការអនុញ្ញាតអោយផ្ទុកឯកសារឡើងទៅក្នុងវិគីនេះទេ។",
@@ -2621,5 +2639,22 @@
"expand_templates_output": "លទ្ធផល",
"expand_templates_ok": "យល់ព្រម",
"expand_templates_remove_comments": "ដកចេញ វិចារនានា",
- "expand_templates_preview": "បង្ហាញការមើលជាមុន"
+ "expand_templates_preview": "បង្ហាញការមើលជាមុន",
+ "special-characters-group-latin": "អក្សរឡាតាំង",
+ "special-characters-group-latinextended": "អក្សរឡាតាំងផ្សេងទៀត",
+ "special-characters-group-ipa": "អក្ខរក្រមសំលេងអន្តរជាតិ",
+ "special-characters-group-symbols": "សញ្ញា",
+ "special-characters-group-greek": "អក្សរក្រិច",
+ "special-characters-group-cyrillic": "អក្សរស៊ីរីល",
+ "special-characters-group-arabic": "អក្សរអារ៉ាប់",
+ "special-characters-group-arabicextended": "អក្សរអារ៉ាប់បន្ថែម",
+ "special-characters-group-persian": "អក្សរពែក្ស",
+ "special-characters-group-hebrew": "អក្សរហេប៊្រូ",
+ "special-characters-group-bangla": "អក្សរបេងក្លា",
+ "special-characters-group-telugu": "អក្សរតិលគ្គ",
+ "special-characters-group-sinhala": "អក្សរស៊ិនហាឡា",
+ "special-characters-group-gujarati": "អក្សរគុចរទី",
+ "special-characters-group-thai": "អក្សរថៃ",
+ "special-characters-group-lao": "អក្សរឡាវ",
+ "special-characters-group-khmer": "អក្សរខ្មែរ"
}
diff --git a/languages/i18n/kn.json b/languages/i18n/kn.json
index b24c1bbf..cbd155a1 100644
--- a/languages/i18n/kn.json
+++ b/languages/i18n/kn.json
@@ -25,7 +25,7 @@
"아라"
]
},
- "tog-underline": "ಲಿಂಕುಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
+ "tog-underline": "ಕೊಂಡಿಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
"tog-hideminor": "ಚಿಕ್ಕಪುಟ್ಟ ಬದಲಾವಣೆಗಳನ್ನು ಅಡಗಿಸಿ",
"tog-hidepatrolled": "ಪಹರೆಯಲ್ಲಿ ಆದ ಸಂಪಾದನೆಗಳನ್ನು ಇತ್ತೀಚೆಗಿನ ಬದಲಾವಣೆಗಳಲ್ಲಿ ಅಡಗಿಸು",
"tog-newpageshidepatrolled": "ಪಹರೆಯಲ್ಲಿ ಆದ ಪುಟಗಳನ್ನು ಹೊಸ ಪುಟಗಳ ಪಟ್ಟಿಯಲ್ಲಿ ಅಡಗಿಸು",
@@ -224,6 +224,7 @@
"otherlanguages": "ಇತರ ಭಾಷೆಗಳು",
"redirectedfrom": "($1 ಇಂದ ಪುನರ್ನಿರ್ದೇಶಿತ)",
"redirectpagesub": "ಪುನರ್ನಿರ್ದೇಶನ ಪುಟ",
+ "redirectto": "ಪುನರ್ನಿರ್ದೇಶನ ಇದಕ್ಕೆ:",
"lastmodifiedat": "ಈ ಪುಟವನ್ನು ಕೊನೆಯಾಗಿ $2, $1 ರಂದು ಬದಲಾಯಿಸಲಾಗಿತ್ತು.",
"viewcount": "ಈ ಪುಟವನ್ನು {{PLURAL:$1|೧ ಬಾರಿ|$1 ಬಾರಿ}} ವೀಕ್ಷಿಸಲಾಗಿದೆ.",
"protectedpage": "ಸಂರಕ್ಷಿತ ಪುಟ",
@@ -490,7 +491,6 @@
"changeemail-newemail": "ಹೊಸ ಇ-ಅಂಚೆ ವಿಳಾಸ:",
"changeemail-none": "(ಯಾವೂ ಇಲ್ಲ)",
"changeemail-submit": "ಇಮೇಲ್ ಬದಲಾಯಿಸಿ",
- "changeemail-cancel": "ರದ್ದುಗೊಳಿಸಿ",
"bold_sample": "ದಪ್ಪಗಿನ ಅಚ್ಚು",
"bold_tip": "ದಪ್ಪಗಿನ ಅಚ್ಚು",
"italic_sample": "ಓರೆ ಅಕ್ಷರಗಳು",
@@ -605,7 +605,7 @@
"currentrev": "ಈಗಿನ ತಿದ್ದುಪಡಿ",
"currentrev-asof": "ಅತ್ಯಂತ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿ ($1)",
"revisionasof": "$1 ದಿನದ ಆವೃತ್ತಿ",
- "revision-info": "$2 ಅವರು $1 ಅಂದು ಸಂಪಾದನೆ ಮಾಡಿದ ನಂತರದ ಆವೃತ್ತಿ",
+ "revision-info": "ಬದಲಾವಣೆ $1 ರಂತೆ {{GENDER:$6|$2}} ಇವರಿಂದ $7",
"previousrevision": "←ಹಿಂದಿನ ಪರಿಷ್ಕರಣೆ",
"nextrevision": "ಮುಂದಿನ ಪರಿಷ್ಕರಣೆ",
"currentrevisionlink": "ಈಗಿನ ಪರಿಷ್ಕರಣೆ",
@@ -672,7 +672,6 @@
"mergehistory-comment": "[[:$1]] ಅನ್ನು [[:$2]] ಒಳಗೆ ಸೇರಿಸಲಾಗಿದೆ: $3",
"mergehistory-reason": "ಕಾರಣ:",
"mergelog": "ಸೇರ್ಪಡೆಯ ದಾಖಲೆ",
- "pagemerge-logentry": "[[$1]] ಅನ್ನು [[$2]] ಒಳಗೆ ಸೇರಿಸಲಾಗಿದೆ ($3 ರವರೆಗಿನ ಬದಲಾವಣೆಗಳು)",
"revertmerge": "ಸೇರ್ಪಡೆಯನ್ನು ತೊಡೆದುಹಾಕು",
"mergelogpagetext": "ಒಂದು ಪುಟದ ಇತಿಹಾಸವನ್ನು ಇನ್ನೊಂದರೊಳಗೆ ಇತ್ತೀಚೆಗೆ ಸೇರ್ಪಡೆ ಮಾಡಲಾಗಿರುವ ಪಟ್ಟಿ ಕೆಳಗಿದೆ.",
"history-title": "\"$1\" ಪುಟದ ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸ",
@@ -712,7 +711,6 @@
"searchrelated": "ಸಂಬಂಧಿತ",
"searchall": "ಎಲ್ಲಾ",
"showingresults": "ಕೆಳಗೆ #'''$2''' ಇಂದ ಶುರುವಾದ {{PLURAL:$1|'''೧''' ಫಲಿತಾಂಶದ|'''$1''' ಫಲಿತಾಂಶಗಳ}}ವರೆಗೂ ತೋರಿಸಲಾಗುತ್ತಿದೆ.",
- "showingresultsheader": "'''$4''' ಗೆ {{PLURAL:$5|'''$3''' ರಲ್ಲಿ '''$1''' ಫಲಿತಾಂಶ|'''$3''' ರಲ್ಲಿ '''$1 - $2''' ಫಲಿತಾಂಶಗಳು}}",
"search-nonefound": "ನಿಮ್ಮ ವಿಚಾರಣೆಗೆ ತಕ್ಕ ಫಲಿತಾಂಶಗಳಿಲ್ಲ.",
"powersearch-legend": "ಮುಂದುವರೆದ ಹುಡುಕಾಟ",
"powersearch-ns": "ಈ ಪುಟ ಪ್ರಬೇಧಗಳಲ್ಲಿ ಹುಡುಕು:",
@@ -907,7 +905,7 @@
"rcshowhidebots": "ಬಾಟ್‍ಗಳನ್ನು $1",
"rcshowhidebots-show": "ತೊರಿಸಿ",
"rcshowhidebots-hide": "ಮರೆ ಮಾಡಿ",
- "rcshowhideliu": "ಲಾಗ್-ಇನ್ ಆಗಿರುವ ಸದಸ್ಯರು $1",
+ "rcshowhideliu": "$1 ನೊಂದಾಯಿತ ಬಳಕೆದಾರರು",
"rcshowhideliu-show": "ತೊರಿಸಿ",
"rcshowhideliu-hide": "ಮರೆ ಮಾಡಿ",
"rcshowhideanons": "ಅನಾಮಧೇಯ ಸದಸ್ಯರು $1",
@@ -930,6 +928,7 @@
"number_of_watching_users_pageview": "[$1 ವೀಕ್ಷಿಸುತ್ತಿರುವ {{PLURAL:$1|ಸದಸ್ಯ|ಸದಸ್ಯರು}}]",
"rc_categories": "ವರ್ಗಗಳಿಗೆ ಮಾತ್ರ ಸೀಮಿತವಾಗಿಸು (\"|\" ಇಂದ ಬೇರ್ಪಡಿಸು)",
"rc_categories_any": "ಯಾವುದೇ",
+ "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ಬದಲಾವಣೆಯ ನಂತರ change",
"newsectionsummary": "/* $1 */ ಹೊಸ ವಿಭಾಗ",
"rc-enhanced-expand": "ವಿವರಗಳನ್ನು ತೋರಿಸು (JavaScript ಬೇಕಾಗುತ್ತದೆ)",
"rc-enhanced-hide": "ವಿವರಗಳನ್ನು ಅಡಗಿಸು",
@@ -1097,16 +1096,13 @@
"statistics": "ಅಂಕಿ ಅಂಶಗಳು",
"statistics-header-pages": "ಪುಟಗಳ ಅಂಕಿಅಂಶಗಳು",
"statistics-header-edits": "ಸಂಪಾದನಾ ಅಂಕಿಅಂಶಗಳು",
- "statistics-header-views": "ವೀಕ್ಷಣಾ ಅಂಕಿಅಂಶಗಳು",
"statistics-header-users": "ಸದಸ್ಯರ ಅಂಕಿ ಅಂಶ",
"statistics-header-hooks": "ಇತರ ಅಂಕಿಅಂಶಗಳು",
"statistics-articles": "ಲೇಖನ ಪುಟ",
"statistics-pages": "ಪುಟಗಳು",
"statistics-files": "ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳು",
"statistics-edits-average": "ಪುಟದ ಸರಾಸರಿ ಮಾರ್ಪಡಿಕೆಗಳು",
- "statistics-views-total": "ಒಟ್ಟು ವೀಕ್ಷಣೆಗಳು",
"statistics-users-active": "ಸಕ್ರಿಯ ಬಳಕೆದಾರರು",
- "statistics-mostpopular": "ಅತ್ಯಂತ ಹೆಚ್ಚು ವೀಕ್ಷಿತ ಪುಟಗಳು",
"pageswithprop-submit": "ಹೋಗು",
"doubleredirects": "ಮರುಕಳಿಸಿದ ಪುನರ್ನಿರ್ದೇಶನಗಳು",
"brokenredirects": "ಮುರಿದ ರಿಡೈರೆಕ್ಟ್‌ಗಳು",
@@ -1131,7 +1127,6 @@
"uncategorizedtemplates": "ಅವರ್ಗೀಕೃತ ಟೆಂಪ್ಲೇಟುಗಳು",
"unusedcategories": "ಬಳಕೆಯಲ್ಲಿರದ ವರ್ಗಗಳು",
"unusedimages": "ಉಪಯೋಗಿಸದ ಚಿತ್ರಗಳು",
- "popularpages": "ಜನಪ್ರಿಯ ಪುಟಗಳು",
"wantedcategories": "ಬೇಕಾಗಿರುವ ವರ್ಗಗಳು",
"wantedpages": "ಬೇಕಾಗಿರುವ ಪುಟಗಳು",
"wantedfiles": "ಬೇಕಾಗಿರುವ ಕಡತಗಳು",
@@ -1172,7 +1167,7 @@
"suppress": "ನಿಗಾ ಇಡುವವ",
"booksources": "ಪುಸ್ತಕಗಳ ಮೂಲ",
"booksources-search-legend": "ಪುಸ್ತಕ ಮೂಲಗಳಿಗೆ ಹುಡುಕು",
- "booksources-go": "ಹೋಗು",
+ "booksources-search": "ಹುಡುಕು",
"specialloguserlabel": "ಸದಸ್ಯ:",
"speciallogtitlelabel": "ಶೀರ್ಷಿಕೆ:",
"log": "ದಾಖಲೆಗಳು",
@@ -1256,7 +1251,7 @@
"watchlist-details": "ಚರ್ಚೆ ಪುಟಗಳನ್ನು ಹೊರತುಪಡಿಸಿ, ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ {{PLURAL:$1|$1 ಪುಟ ಇದೆ|$1 ಪುಟಗಳು ಇವೆ}}.",
"wlheader-enotif": "ಮಿಂಚಂಚೆ ಸೂಚನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.",
"wlheader-showupdated": "ನೀವು ಕೊನೆಯ ಬಾರಿ ಭೇಟಿ ನೀಡಿದ ನಂತರ ಬದಲಾವಣೆಗಳು ಆಗಿರುವ ಪುಟಗಳು '''ದಪ್ಪ ಅಕ್ಷರಗಳಲ್ಲಿ''' ತೋರಿಸಲಾಗಿದೆ",
- "wlshowlast": "ಕೊನೆಯ $1 ಗಂಟೆ $2 ದಿನಗಳು $3 ಅನ್ನು ತೋರಿಸು",
+ "wlshowlast": "ಕೊನೆಯ $1 ಗಂಟೆ $2 ದಿನಗಳು ಅನ್ನು ತೋರಿಸು",
"watchlist-options": "ವೀಕ್ಷಣಾಪಟ್ಟಿ ಆಯ್ಕೆಗಳು",
"watching": "ವೀಕ್ಷಣೆಗೆ ಸೇರಿಸಲಾಗುತ್ತಿದೆ...",
"unwatching": "ವೀಕ್ಷಣೆಯಿಂದ ತೆಗೆಯಲಾಗುತ್ತಿದೆ...",
@@ -1283,7 +1278,6 @@
"deletereasonotherlist": "ಇತರ ಕಾರಣ",
"deletereason-dropdown": "*ಸಾಮಾನ್ಯ ಅಳಿಸುವಿಕೆಯ ಕಾರಣಗಳು\n** ಸಂಪಾದಕರ ಕೋರಿಕೆ\n** ಕೃತಿಸ್ವಾಮ್ಯತೆಯ ಉಲ್ಲಂಘನೆ\n** Vandalism",
"delete-edit-reasonlist": "ಅಳಿಸುವಿಕೆ ಕಾರಣಗಳನ್ನು ಸಂಪಾದಿಸು",
- "rollback_short": "ತೊಡೆದುಹಾಕು",
"rollbacklink": "ತೊಡೆದುಹಾಕು",
"protectlogpage": "ಸಂರಕ್ಷಣೆ ದಿನಚರಿ",
"protectedarticle": "\"[[$1]]\" ಸಂರಕ್ಷಿಸಲಾಗಿದೆ.",
@@ -1495,7 +1489,6 @@
"import-noarticle": "ಆಮದು ಮಾಡಲು ಯಾವ ಪುಟವೂ ಇಲ್ಲ!",
"import-nonewrevisions": "ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳನ್ನೂ ಮುಂಚೆಯೆ ಆಮದು ಮಾಡಲಾಗಿದೆ.",
"importlogpage": "ಆಮದುಗಳ ದಾಖಲೆ",
- "import-logentry-upload": "ಫೈಲು ಅಪ್ಲೋಡ್ ಮೂಲಕ [[$1]] ಅನ್ನು ಆಮದು ಮಾಡಲಾಗಿದೆ",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}",
"tooltip-pt-userpage": "ನಿಮ್ಮ ಸದಸ್ಯ ಪುಟ",
"tooltip-pt-anonuserpage": "ನೀವು ಸಂಪಾದನೆ ಮಾಡುತ್ತಿರುವ ipಯ ಬಳಕೆದಾರ ಪುಟ",
@@ -1506,6 +1499,7 @@
"tooltip-pt-mycontris": "ನಿಮ್ಮ ಕಾಣಿಕೆಗಳ ಪಟ್ಟಿ",
"tooltip-pt-login": "ನೀವು ಲಾಗ್ ಇನ್ ಆಗಬೇಕೆಂದು ಕೋರುತ್ತೇವೆ, ಆದರೆ ಅದು ಖಡ್ಡಾಯ ಏನು ಅಲ್ಲ.",
"tooltip-pt-logout": "ಲಾಗ್ ಔಟ್",
+ "tooltip-pt-createaccount": "ನೀವು ಹೊಸ ಖಾತೆಯನ್ನು ತೆರೆದು ಲಾಗಿನ್ ಆಗುವುದನ್ನು ಹುರಿದುಂಬಿಸುತ್ತೇವೆ; ಆದಾಗ್ಯೂ, ಇದು ಅವಶ್ಯವೇನಿಲ್ಲ",
"tooltip-ca-talk": "ಮಾಹಿತಿ ಪುಟದ ಬಗ್ಗೆ ಚರ್ಚೆ",
"tooltip-ca-edit": "ಈ ಪುಟವನ್ನು ನೀವು ಸಂಪಾದಿಸಬಹುದು. ಉಳಿಸುವ ಮುನ್ನ ಮುನ್ನೋಟವನ್ನು ಉಪಯೋಗಿಸಿ.",
"tooltip-ca-addsection": "ಹೊಸ ವಿಭಾಗವನ್ನು ಪ್ರಾರಂಭಿಸಿ",
@@ -1561,6 +1555,7 @@
"others": "ಇತರರು",
"siteusers": "{{SITENAME}} {{PLURAL:$2|ಸದಸ್ಯ|ಸದಸ್ಯರು}} $1",
"creditspage": "ಪುಟದ ಗೌರವಗಳು",
+ "simpleantispam-label": "ಆಂಟಿ-ಸ್ಪ್ಯಾಮ್ ಪರೀಕ್ಷೆ.\nಇದನ್ನು ತುಂಬ <strong>ಬೇಡಿ</strong>!",
"pageinfo-toolboxlink": "ಪುಟದ ಮಾಹಿತಿ",
"pageinfo-redirectsto": "ಪುನರ್ನಿರ್ದೇಶನ:",
"deletedrevision": "ಹಳೆ ಆವೃತ್ತಿ $1 ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ",
@@ -1575,7 +1570,8 @@
"file-info-size": "$1 × $2 ಚಿತ್ರಬಿಂದು, ಫೈಲಿನ ಗಾತ್ರ: $3, MIME ಪ್ರಕಾರ: $4",
"file-nohires": "ಇದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ವಿವರವಾದ ನೋಟ ಇಲ್ಲ.",
"svg-long-desc": "SVG ಫೈಲು, ಸುಮಾರಾಗಿ $1 × $2 ಚಿತ್ರಬಿಂದುಗಳು, ಫೈಲಿನ ಗಾತ್ರ: $3",
- "show-big-image": "ಅತಿ ಹೆಚ್ಚು ವಿವರವಾದ ನೋಟ",
+ "show-big-image": "ಮೂಲ ಕಡತ",
+ "show-big-image-size": "$1 × $2 ಪಿಕ್ಸೆಲ್‌ಗಳು",
"newimages": "ಹೊಸ ಫೈಲುಗಳ ಪ್ರದರ್ಶನ",
"imagelisttext": "ಕೆಳಗೆ ಇರುವುದು '''$1''' {{PLURAL:$1|ಫೈಲಿನ|ಫೈಲುಗಳ}} ಪಟ್ಟಿ, $2 ಏರ್ಪಾಟಾಗಿದೆ.",
"newimages-summary": "ಈ ವಿಶೇಷ ಪುಟವು ಕೊನೆಯದಾಗಿ ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳನ್ನು ತೋರುತ್ತದೆ",
@@ -1608,6 +1604,7 @@
"exif-usercomment": "ಬಳಕೆದಾರನ ಟಿಪ್ಪಣಿ",
"exif-relatedsoundfile": "ಸಂಬಂಧಿತ ಧ್ವನಿ ಫೈಲು",
"exif-datetimeoriginal": "ಮಾಹಿತಿ ಸೃಷ್ಟಿಯಾದ ದಿನಾಂಕ ಮತ್ತು ಕಾಲ",
+ "exif-datetimedigitized": "ಗಣಕೀಕರಣದ ದಿನಾಂಕ ಮತ್ತು ಸಮಯ",
"exif-exposuretime-format": "$1 ಕ್ಷಣ ($2)",
"exif-fnumber": "F ಸಂಖ್ಯೆ",
"exif-brightnessvalue": "ಪ್ರಕಾಶತೆ",
@@ -1630,6 +1627,7 @@
"exif-copyrighted": "ಕೃತಿಸ್ವಾಮ್ಯತೆಯ ಸ್ಥಿತಿ",
"exif-copyrightowner": "ಕೃತಿಸ್ವಾಮ್ಯತೆಯನ್ನು ಹೊಂದಿರುವವರು",
"exif-unknowndate": "ದಿನಾಂಕ ತಿಳಿದಿಲ್ಲ",
+ "exif-orientation-1": "ಸಾಧಾರಣ",
"exif-orientation-3": "180° ತಿರುಗಿಸಲ್ಪಟ್ಟಿದೆ",
"exif-componentsconfiguration-0": "ಅಸ್ಥಿತ್ವದಲ್ಲಿ ಇಲ್ಲ",
"exif-meteringmode-0": "ತಿಳಿದಿಲ್ಲ",
@@ -1659,7 +1657,6 @@
"exif-gpsspeed-n": "ಕ್ನಾಟ್‍ಗಳು",
"exif-gpsdirection-t": "ನಿಜ ದಿಕ್ಕು",
"exif-gpsdirection-m": "ಆಯಸ್ಕಾಂತೀಯ ದಿಕ್ಕು",
- "watchlistall2": "ಎಲ್ಲಾ",
"namespacesall": "ಎಲ್ಲಾ",
"monthsall": "ಎಲ್ಲಾ",
"confirmemail": "ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ಖಾತ್ರಿ ಮಾಡಿ",
@@ -1713,10 +1710,11 @@
"watchlisttools-view": "ಸೂಚಿಸಲ್ಪಟ್ಟ ಬದಲಾವಣೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ",
"watchlisttools-edit": "ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ನೋಡು ಮತ್ತು ಸಂಪಾದಿಸು",
"watchlisttools-raw": "ಮೂಲ ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ಸಂಪಾದಿಸು",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ಚರ್ಚೆ]])",
"version": "ಆವೃತ್ತಿ",
"version-specialpages": "ವಿಶೇಷ ಪುಟಗಳು",
"version-other": "ಇತರ",
- "version-version": "(ಆವೃತ್ತಿ $1)",
+ "version-version": "($1)",
"version-software": "ಸಂಸ್ಥಾಪಿಸಲಾಗಿರುವ ತಂತ್ರಾಂಶ",
"version-software-product": "ಉತ್ಪನ್ನ",
"version-software-version": "ಆವೃತ್ತಿ",
@@ -1743,8 +1741,9 @@
"specialpages-group-pages": "ಪುಟಗಳ ಪಟ್ಟಿ",
"specialpages-group-redirects": "ವಿಶೇಷ ಪುಟಗಳನ್ನು ಪುನರ್ನಿರ್ದೇಶಿಸಲಾಗುತ್ತಿದೆ",
"blankpage": "ಖಾಲಿ ಪುಟ",
- "tag-filter": "[[ವಿಶೇಷ:ತಳುಕುಗಳು|ತಳುಕು]] ಶೋಧಕ:",
+ "tag-filter": "[[ವಿಶೇಷ:ಟ್ಯಾಗ್‌ಗಳು|ಟ್ಯಾಗ್]] ಶೋಧಕ:",
"tag-filter-submit": "ಶೋಧಕ",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ಟ್ಯಾಗ್|ಟ್ಯಾಗ್‌ಗಳು}}]]: $2)",
"tags-title": "ಅಂಕಿತಗಳು",
"tags-tag": "ಅಂಕಿತ ನಾಮ",
"tags-active-header": "ಸಕ್ರಿಯ?",
@@ -1760,11 +1759,17 @@
"htmlform-selectorother-other": "ಇತರ",
"htmlform-no": "ಇಲ್ಲ",
"htmlform-yes": "ಹೌದು",
+ "logentry-delete-delete": "$1 {{GENDER:$2|ಅಳಿಸಲಾಯಿತು}} ಪುಟ $3",
"revdelete-restricted": "ನಿರ್ವಾಹಕರಿಗೆ ನಿಬಂಧನೆಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು",
"revdelete-unrestricted": "ನಿರ್ವಾಹಕರ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆಯಲಾಯಿತು",
+ "logentry-move-move": "$1 $3 ಪುಟವನ್ನು $4 ಕ್ಕೆ {{GENDER:$2|ಸರಿಸಿದ್ದಾರೆ}}",
+ "logentry-newusers-create": "ಬಳಕೆದಾರ ಖಾತೆ $1 ನ್ನು {{GENDER:$2|ಸೃಷ್ಟಿಸಲಾಯಿತು}}",
+ "logentry-upload-upload": "$1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಾಡಿದ್ದಾರೆ}} $3",
"rightsnone": "(ಯಾವೂ ಇಲ್ಲ)",
- "feedback-subject": "ವಿಷಯ:",
+ "revdelete-summary": "ಸಂಪಾದನೆಯ ತಾತ್ಪರ್ಯ",
"feedback-message": "ಸಂದೇಶ:",
+ "feedback-subject": "ವಿಷಯ:",
+ "searchsuggest-search": "ಹುಡುಕು",
"duration-seconds": "$1 {{PLURAL:$1|ಕ್ಷಣ|ಕ್ಷಣಗಳು}}",
"duration-minutes": "$1 {{PLURAL:$1|ನಿಮಿಷ|ನಿಮಿಷಗಳು}}",
"duration-hours": "$1 {{PLURAL:$1|ಘಂಟೆ|ಘಂಟೆಗಳು}}",
@@ -1774,5 +1779,19 @@
"duration-decades": "$1 {{PLURAL:$1|ದಶಕ|ದಶಕಗಳು}}",
"duration-centuries": "$1 {{PLURAL:$1|ಶತಮಾನ|ಶತಮಾನಗಳು}}",
"duration-millennia": "$1 {{PLURAL:$1|ಸಹಸ್ರಮಾನ|ಸಹಸ್ರಮಾನಗಳು}}",
- "expand_templates_preview": "ಮುನ್ನೋಟ"
+ "expand_templates_preview": "ಮುನ್ನೋಟ",
+ "special-characters-group-latin": "ಲ್ಯಾಟಿನ",
+ "special-characters-group-greek": "ಗ್ರೀಕ್",
+ "special-characters-group-arabic": "ಅರೇಬಿಕ್",
+ "special-characters-group-persian": "ಪರ್ಶಿಯನ್",
+ "special-characters-group-hebrew": "ಹೀಬ್ರೂ",
+ "special-characters-group-bangla": "ಬಾಂಗ್ಲಾ",
+ "special-characters-group-tamil": "ತಮಿಳು",
+ "special-characters-group-telugu": "ತೆಲುಗು",
+ "special-characters-group-sinhala": "ಸಿಂಹಳ",
+ "special-characters-group-gujarati": "ಗುಜರಾತಿ",
+ "special-characters-group-devanagari": "ದೇವನಾಗರಿ",
+ "special-characters-group-thai": "ಥಾಯ್",
+ "special-characters-group-lao": "ಲಾವೋ",
+ "special-characters-group-khmer": "ಖ್ಮೇರ್"
}
diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json
index 662f105c..7c18c028 100644
--- a/languages/i18n/ko.json
+++ b/languages/i18n/ko.json
@@ -40,7 +40,12 @@
"Keysuck",
"Infinity",
"Bluemersen",
- "Revi"
+ "Revi",
+ "Namoroka",
+ "양념파닭",
+ "콩가루",
+ "Twotwo2019",
+ "SeoJeongHo"
]
},
"tog-underline": "링크에 밑줄:",
@@ -68,7 +73,7 @@
"tog-shownumberswatching": "주시하는 사용자 수 보이기",
"tog-oldsig": "현재 서명:",
"tog-fancysig": "서명을 위키텍스트로 취급 (자동으로 링크를 걸지 않음)",
- "tog-uselivepreview": "실시간 미리 보기 사용하기 (실험 기능)",
+ "tog-uselivepreview": "실시간 미리 보기 사용하기",
"tog-forceeditsummary": "편집 요약을 쓰지 않았을 때 알려주기",
"tog-watchlisthideown": "주시문서 목록에서 내 편집을 숨기기",
"tog-watchlisthidebots": "주시문서 목록에서 봇 편집을 숨기기",
@@ -85,7 +90,7 @@
"underline-always": "항상",
"underline-never": "항상 치지 않기",
"underline-default": "스킨 또는 브라우저 기본값",
- "editfont-style": "편집 창의 글꼴:",
+ "editfont-style": "편집 영역의 글꼴:",
"editfont-default": "브라우저 기본값",
"editfont-monospace": "고정폭 글꼴",
"editfont-sansserif": "산세리프 글꼴",
@@ -160,11 +165,11 @@
"hidden-categories": "{{PLURAL:$1|숨은 분류}}",
"hidden-category-category": "숨은 분류",
"category-subcat-count": "{{PLURAL:$2|이 분류에는 하위 분류 1개만이 속해 있습니다.|다음은 이 분류에 속하는 {{PLURAL:$1|하위 분류}} $2개 가운데 $1개입니다.}}",
- "category-subcat-count-limited": "이 분류에 {{PLURAL:$1|하위 분류}} $1개가 있습니다.",
+ "category-subcat-count-limited": "이 분류에 {{PLURAL:$1|하위 분류가|하위 분류 $1개가}} 있습니다.",
"category-article-count": "{{PLURAL:$2|이 분류에는 문서 1개만이 속해 있습니다.|다음은 이 분류에 속하는 {{PLURAL:$1|문서}} $2개 가운데 $1개입니다.}}",
- "category-article-count-limited": "이 분류에 {{PLURAL:$1|문서}} $1개가 있습니다.",
+ "category-article-count-limited": "이 분류에 {{PLURAL:$1|문서가|문서 $1개가}} 있습니다.",
"category-file-count": "{{PLURAL:$2|이 분류에는 파일 1개만이 속해 있습니다.|다음은 이 분류에 속하는 {{PLURAL:$1|파일}} $2개 가운데 $1개입니다.}}",
- "category-file-count-limited": "이 분류에 {{PLURAL:$1|파일}} $1개가 있습니다.",
+ "category-file-count-limited": "이 분류에 {{PLURAL:$1|파일이|파일 $1개가}} 있습니다.",
"listingcontinuesabbrev": "(계속)",
"index-category": "색인된 문서",
"noindex-category": "색인에서 제외되는 문서",
@@ -177,7 +182,7 @@
"morenotlisted": "이 목록은 완성되지 않았습니다.",
"mypage": "문서",
"mytalk": "토론",
- "anontalk": "익명 사용자와 토론",
+ "anontalk": "이 IP 주소의 사용자와 토론",
"navigation": "둘러보기",
"and": ",",
"qbfind": "찾기",
@@ -216,8 +221,8 @@
"delete": "삭제",
"deletethispage": "이 문서 삭제하기",
"undeletethispage": "이 문서를 되살리기",
- "undelete_short": "{{PLURAL:$1|편집}} $1개 되살리기",
- "viewdeleted_short": "{{PLURAL:$1|삭제된 편집}} $1개 보기",
+ "undelete_short": "{{PLURAL:$1|편집 한 개|편집 $1개}} 되살리기",
+ "viewdeleted_short": "{{PLURAL:$1|삭제된 편집 한 개|삭제된 편집 $1개}} 보기",
"protect": "보호",
"protect_change": "보호 수준 바꾸기",
"protectthispage": "이 문서 보호하기",
@@ -256,6 +261,7 @@
"pool-queuefull": "풀 대기열이 가득 찼습니다",
"pool-errorunknown": "알 수 없는 오류",
"pool-servererror": "풀 카운터 서비스는 사용할 수 없습니다 ($1).",
+ "poolcounter-usage-error": "어법 에러: $1",
"aboutsite": "{{SITENAME}} 소개",
"aboutpage": "Project:소개",
"copyright": "내용은 별도로 명시하지 않을 경우 $1에 따라 사용할 수 있습니다.",
@@ -265,6 +271,7 @@
"disclaimers": "면책 조항",
"disclaimerpage": "Project:면책 조항",
"edithelp": "편집 도움말",
+ "helppage-top-gethelp": "도움말",
"mainpage": "대문",
"mainpage-description": "대문",
"policy-url": "Project:정책",
@@ -274,14 +281,14 @@
"privacypage": "Project:개인 정보 정책",
"badaccess": "권한 오류",
"badaccess-group0": "요청한 명령을 실행할 권한이 없습니다.",
- "badaccess-groups": "요청한 명령은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게만 가능합니다: $1",
+ "badaccess-groups": "요청한 명령은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게 제한됩니다: $1.",
"versionrequired": "미디어위키 $1 버전 필요",
"versionrequiredtext": "이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다.\n[[Special:Version|설치된 미디어위키 버전]]을 참고하세요.",
"ok": "확인",
"retrievedfrom": "원본 주소 \"$1\"",
- "youhavenewmessages": "다른 사용자가 $1를 {{PLURAL:$3|남겼습니다}}. ($2)",
- "youhavenewmessagesfromusers": "{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1를 {{PLURAL:$4|남겼습니다}}. ($2)",
- "youhavenewmessagesmanyusers": "여러 사용자가 $1를 남겼습니다. ($2)",
+ "youhavenewmessages": "다른 사용자로부터의 $1가 {{PLURAL:$3|있습니다}}. ($2)",
+ "youhavenewmessagesfromusers": "{{PLURAL:$3|다른 사용자로|사용자 $3명으로}}부터의 $1가 {{PLURAL:$4|있습니다}}. ($2)",
+ "youhavenewmessagesmanyusers": "여러 사용자로부터의 $1가 있습니다. ($2)",
"newmessageslinkplural": "{{PLURAL:$1|새 메시지}}",
"newmessagesdifflinkplural": "마지막으로 {{PLURAL:$1|바뀐 내용}}",
"youhavenewmessagesmulti": "다른 사용자가 $1에 남긴 새 메시지가 있습니다",
@@ -301,10 +308,10 @@
"confirmable-no": "아니오",
"thisisdeleted": "$1 문서를 보거나 되살리겠습니까?",
"viewdeleted": "$1 문서를 보겠습니까?",
- "restorelink": "{{PLURAL:$1|삭제된 편집}} $1개",
+ "restorelink": "{{PLURAL:$1|삭제된 편집 한 개|삭제된 편집 $1개}}",
"feedlinks": "피드:",
"feed-invalid": "잘못된 구독 피드 방식입니다.",
- "feed-unavailable": "피드 서비스를 사용할 수 없습니다",
+ "feed-unavailable": "피드 배달을 사용할 수 없습니다",
"site-rss-feed": "$1 RSS 피드",
"site-atom-feed": "$1 Atom 피드",
"page-rss-feed": "\"$1\" RSS 피드",
@@ -322,8 +329,8 @@
"nstab-template": "틀",
"nstab-help": "도움말",
"nstab-category": "분류",
- "nosuchaction": "해당하는 명령이 없습니다.",
- "nosuchactiontext": "URL이 지정한 명령이 잘못되었습니다.\nURL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니다.\n{{SITENAME}}의 버그일 수도 있습니다.",
+ "nosuchaction": "이러한 명령이 없습니다",
+ "nosuchactiontext": "URL에 지정한 명령이 올바르지 않습니다.\nURL을 잘못 입력했거나, 올바르지 않은 링크를 따라갔을 수 있습니다.\n{{SITENAME}}에 사용하는 소프트웨어의 버그가 있을 수 있습니다.",
"nosuchspecialpage": "해당하는 특수 문서가 없습니다.",
"nospecialpagetext": "<strong>요청한 특수 문서가 존재하지 않습니다.</strong>\n\n특수 문서의 목록은 [[Special:SpecialPages|여기]]에서 볼 수 있습니다.",
"error": "오류",
@@ -333,7 +340,7 @@
"databaseerror-query": "쿼리: $1",
"databaseerror-function": "함수: $1",
"databaseerror-error": "오류: $1",
- "laggedslavemode": "'''경고:''' 문서가 최근에 바뀐 내용을 포함하지 않을 수도 있습니다.",
+ "laggedslavemode": "<strong>경고:</strong> 문서가 최근에 바뀐 내용을 포함하지 않을 수도 있습니다.",
"readonly": "데이터베이스 잠김",
"enterlockreason": "데이터베이스를 잠그는 이유와 예상되는 기간을 적어 주세요.",
"readonlytext": "데이터베이스가 잠겨 있어서 문서를 편집할 수 없습니다. 데이터베이스 관리가 끝난 후에는 정상으로 돌아올 것입니다.\n\n관리자가 데이터베이스를 잠글 때 남긴 메시지는 다음과 같습니다: $1",
@@ -343,23 +350,26 @@
"readonly_lag": "슬레이브 데이터베이스가 마스터 서버의 자료를 새로 고치는 중입니다. 데이터베이스가 자동으로 잠겨 있습니다.",
"internalerror": "내부 오류",
"internalerror_info": "내부 오류: $1",
+ "internalerror-fatal-exception": "종류 \"$1\"에서 심각한 오류",
"filecopyerror": "\"$1\" 파일을 \"$2\"로 복사할 수 없습니다.",
"filerenameerror": "\"$1\" 파일을 \"$2\"로 옮길 수 없습니다.",
"filedeleteerror": "\"$1\" 파일을 삭제할 수 없습니다.",
"directorycreateerror": "\"$1\" 디렉터리를 만들 수 없습니다.",
+ "directoryreadonlyerror": "\"$1\" 디렉터리는 읽기 전용입니다.",
+ "directorynotreadableerror": "\"$1\" 디렉터리는 읽을 수 없습니다.",
"filenotfound": "\"$1\" 파일을 찾을 수 없습니다.",
- "unexpected": "예기치 못한 값: \"$1\"=\"$2\"",
+ "unexpected": "예기치 않은 값: \"$1\"=\"$2\".",
"formerror": "오류: 양식을 제출할 수 없습니다.",
- "badarticleerror": "해당 명령은 이 문서에서 실행할 수 없습니다.",
+ "badarticleerror": "이 명령은 이 문서에서 수행할 수 없습니다.",
"cannotdelete": "\"$1\" 문서나 파일을 삭제할 수 없습니다.\n이미 삭제되었을 수도 있습니다.",
"cannotdelete-title": "\"$1\" 문서를 삭제할 수 없습니다.",
"delete-hook-aborted": "훅이 삭제를 중단했습니다.\n아무런 설명도 주어지지 않았습니다.",
"no-null-revision": "\"$1\" 문서에 대한 새 빈 판을 만들 수 없습니다",
"badtitle": "잘못된 제목",
"badtitletext": "요청한 문서 제목이 잘못되었거나, 비어있거나, 잘못된 인터위키 제목으로 링크했습니다.\n문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.",
- "perfcached": "다음 자료는 캐시된 것이므로 새로 바뀐 내용을 반영하지 못할 수도 있습니다. 캐시에 최대 {{PLURAL:$1|$1개의 결과}}가 있습니다.",
- "perfcachedts": "다음 자료는 캐시된 것으로, $1에 마지막으로 새로 고쳐졌습니다. 캐시에 최대 {{PLURAL:$4|결과 $4개}}가 있습니다.",
- "querypage-no-updates": "이 문서의 새로 고침이 현재 비활성화되어 있습니다.\n이 문서의 자료를 잠시 동안 새로 고치지 않을 것입니다.",
+ "perfcached": "다음 자료는 캐시된 것이며 최신이 아닐 수 있습니다. 캐시에 최대 {{PLURAL:$1|결과 한 개|결과 $1개}}가 있습니다.",
+ "perfcachedts": "다음 자료는 캐시된 것으로, $1에 마지막으로 업데이트되었습니다. 캐시에 최대 {{PLURAL:$4|결과 한 개|결과 $4개}}가 있습니다.",
+ "querypage-no-updates": "이 문서의 갱신이 현재 중지되어 있습니다.\n자료가 잠시 갱신되지 않을 것입니다.",
"viewsource": "원본 보기",
"viewsource-title": "$1 문서 원본 보기",
"actionthrottled": "동작 중지",
@@ -368,7 +378,8 @@
"viewsourcetext": "문서의 원본을 보거나 복사할 수 있습니다:",
"viewyourtext": "이 문서에 남긴 '''내 편집''' 내용을 보거나 복사할 수 있습니다:",
"protectedinterface": "이 문서는 이 위키의 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.\n모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
- "editinginterface": "'''경고''': 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.\n이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.\n모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
+ "editinginterface": "<strong>경고</strong>: 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.\n이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.",
+ "translateinterface": "모든 위키를 위해 번역을 추가하거나 바꾸려면, 미디어위키 지역화 프로젝트인 [//translatewiki.net/ translatewiki.net]을 사용해 주시기 바랍니다.",
"cascadeprotected": "이 문서는 다음 \"연쇄적\" 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다:\n$2",
"namespaceprotected": "'''$1''' 이름공간을 편집할 수 있는 권한이 없습니다.",
"customcssprotected": "여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 CSS 문서를 편집할 수 없습니다.",
@@ -387,8 +398,8 @@
"exception-nologin-text-manual": "이 문서에 접근하거나 이 명령을 수행하려면 $1하세요.",
"virus-badscanner": "잘못된 설정: 알 수 없는 바이러스 검사기: '''$1'''",
"virus-scanfailed": "검사 실패 (코드 $1)",
- "virus-unknownscanner": "알 수 없는 백신 소프트웨어:",
- "logouttext": "'''지금 로그아웃했습니다.'''\n\n브라우저 캐시를 지우지 않으면 일부 문서에서 로그인이 되어 있는 것처럼 보일 수 있습니다.",
+ "virus-unknownscanner": "알 수 없는 안티 바이러스:",
+ "logouttext": "<strong>이제 로그아웃했습니다.</strong>\n\n브라우저 캐시를 지울 때까지 일부 문서에서 아직 로그인이 되어 있는 것처럼 보일 수 있음에 유의하세요.",
"welcomeuser": "$1님, 환영합니다!",
"welcomecreation-msg": "계정이 만들어졌습니다.\n[[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.",
"yourname": "사용자 이름:",
@@ -425,6 +436,8 @@
"userlogin-resetlink": "로그인 정보를 잊으셨나요?",
"userlogin-resetpassword-link": "비밀번호를 잊으셨나요?",
"userlogin-helplink2": "로그인에 대한 도움말",
+ "userlogin-loggedin": "이미 {{GENDER:$1|$1}} 사용자로 로그인되어 있습니다.\n다른 사용자로 로그인하려면 아래의 양식을 사용하세요.",
+ "userlogin-createanother": "다른 계정 만들기",
"createacct-emailrequired": "이메일 주소",
"createacct-emailoptional": "이메일 주소 (선택 사항)",
"createacct-email-ph": "이메일 주소를 입력하세요",
@@ -583,10 +596,12 @@
"anoneditwarning": "<strong>경고:</strong> 로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 보여집니다. <strong>[$1 로그인]</strong>하거나 <strong>[$2 계정을 만들면]</strong>, 당신의 편집에 다른 이익과 함께, 사용자 이름이 표시됩니다.",
"anonpreviewwarning": "<em>로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서의 편집 역사에 남게 됩니다.</em>",
"missingsummary": "'''알림:''' 편집 요약을 적지 않았습니다.\n이대로 \"{{int:savearticle}}\"을 클릭하면 편집 요약 없이 저장됩니다.",
+ "selfredirect": "<strong>경고:</strong> 자기 자신으로 문서를 넘겨주고 있습니다.\n넘겨줄 대상을 잘못 입력했거나, 잘못된 문서를 편집하고 있을 수 있습니다.\n\"{{int:savearticle}}\"을 입력하면, 넘겨주기 문서가 생성될 것입니다.",
"missingcommenttext": "아래에 내용을 채워 넣어 주세요.",
"missingcommentheader": "'''알림:''' 글의 제목을 입력하지 않았습니다.\n다시 \"{{int:savearticle}}\" 버튼을 클릭하면 글이 제목 없이 저장됩니다.",
"summary-preview": "요약 미리 보기:",
"subject-preview": "주제/제목 미리 보기:",
+ "previewerrortext": "변경사항을 미리보기하는 도중 오류가 발생했습니다.",
"blockedtitle": "사용자가 차단됨",
"blockedtext": "'''사용자 계정 또는 IP 주소가 차단되었습니다.'''\n\n차단한 사람은 $1입니다.\n차단한 이유는 다음과 같습니다: $2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n현재 당신의 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
"autoblockedtext": "당신의 IP 주소는 $1 사용자가 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\n차단된 이유는 다음과 같습니다:\n\n:$2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 \"이메일 보내기\" 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n\n현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
@@ -609,7 +624,7 @@
"userpage-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.\n이 문서를 만들거나 편집하려면 계정이 존재하는지 확인해주세요.",
"userpage-userdoesnotexist-view": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.",
"blocked-notice-logextract": "이 사용자는 현재 차단되어 있습니다.\n해당 사용자의 최근 차단 기록을 참고하십시오:",
- "clearyourcache": "'''참고:''' 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.\n* '''파이어폭스 / 사파리''': ''Shift'' 키를 누르면서 새로 고침을 클릭하거나, ''Ctrl-F5'' 또는 ''Ctrl-R'' 을 입력 (Mac에서는 ''⌘-R'')\n* '''구글 크롬''': ''Ctrl-Shift-R''키를 입력 (Mac에서는 ''⌘-Shift-R'')\n* '''인터넷 익스플로러''': ''Ctrl'' 키를 누르면서 새로 고침을 클릭하거나, ''Ctrl-F5''를 입력.\n* '''오페라''': ''도구→설정''에서 캐시를 비움",
+ "clearyourcache": "<strong>참고:</strong> 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.\n* <strong>Firefox / Safari</strong>: <em>Shift</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em> 또는 <em>Ctrl-R</em> 을 입력 (Mac에서는 <em>⌘-R</em>)\n* <strong>Google Chrome</strong>: <em>Ctrl-Shift-R</em>키를 입력 (Mac에서는 <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer</strong>: <em>Ctrl</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em>를 입력.\n* <strong>Opera</strong>: <em>도구→설정</em>에서 캐시를 비움",
"usercssyoucanpreview": "'''안내''': CSS 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
"userjsyoucanpreview": "'''안내''': 자바스크립트 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
"usercsspreview": "'''사용자 CSS의 미리 보기입니다.'''\n'''아직 저장하지 않았습니다!'''",
@@ -635,7 +650,7 @@
"yourtext": "당신의 편집",
"storedversion": "현재 문서",
"nonunicodebrowser": "'''경고: 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다.'''\n아스키가 아닌 문자가 16진수 코드로 나타날 수 있습니다.",
- "editingold": "'''경고: 지금 이전 버전의 문서를 고치고 있습니다.'''\n이것을 저장하면 최근에 편집된 부분이 사라질 수 있습니다.",
+ "editingold": "<strong>경고: 이 문서의 오래된 판을 편집하고 있습니다.</strong>\n이것을 저장하면, 이 판 이후로 바뀐 모든 편집이 사라집니다.",
"yourdiff": "차이",
"copyrightwarning": "{{SITENAME}}에서의 모든 기여는 $2 라이선스로 배포된다는 점을 유의해 주세요 (자세한 내용에 대해서는 $1 문서를 읽어주세요).\n만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.<br />\n또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.\n'''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
"copyrightwarning2": "{{SITENAME}}에서의 모든 기여는 다른 사용자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요.\n만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.<br />\n또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 내용에 대해서는 $1 문서를 읽어 주세요).\n'''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
@@ -681,6 +696,10 @@
"content-model-text": "일반 텍스트",
"content-model-javascript": "자바스크립트",
"content-model-css": "CSS",
+ "content-json-empty-object": "빈 오브젝트",
+ "content-json-empty-array": "빈 배열",
+ "duplicate-args-category": "중복된 인수를 사용한 틀의 호출을 포함한 문서",
+ "duplicate-args-category-desc": "문서에 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code>나 <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>와 같은, 인수를 중복하여 사용한 틀 호출을 포함합니다.",
"expensive-parserfunction-warning": "'''경고:''' 이 문서는 너무 많은 파서 함수를 포함하고 있습니다.\n\n$2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개를 쓰고 있습니다}}.",
"expensive-parserfunction-category": "느린 파서 함수 호출을 너무 많이 하는 문서",
"post-expand-template-inclusion-warning": "'''경고:''' 틀 포함 크기가 너무 큽니다.\n일부 틀은 포함되지 않을 수 있습니다.",
@@ -690,10 +709,10 @@
"parser-template-loop-warning": "재귀적인 틀이 발견되었습니다: [[$1]]",
"parser-template-recursion-depth-warning": "틀 반복 깊이 제한을 초과함 ($1)",
"language-converter-depth-warning": "언어 변환기 실행 제한 초과($1)",
- "node-count-exceeded-category": "문서가 노드 횟수를 초과하였습니다.",
- "node-count-exceeded-category-desc": "노드 횟수를 초과하는 문서의 분류입니다.",
+ "node-count-exceeded-category": "노드 횟수를 초과한 문서",
+ "node-count-exceeded-category-desc": "문서가 최대 노드 수를 초과합니다.",
"node-count-exceeded-warning": "문서가 노드 수를 초과하였습니다.",
- "expansion-depth-exceeded-category": "문서가 확장 깊이를 초과하였습니다.",
+ "expansion-depth-exceeded-category": "확장 깊이를 초과한 문서",
"expansion-depth-exceeded-category-desc": "최대 확장 깊이를 초과하는 문서입니다.",
"expansion-depth-exceeded-warning": "문서가 확장 깊이를 초과하였습니다",
"parser-unstrip-loop-warning": "Unstrip의 반복을 감지했습니다",
@@ -722,7 +741,7 @@
"last": "이전",
"page_first": "처음",
"page_last": "마지막",
- "histlegend": "비교하려는 판을 선택한 다음 엔터나 아래의 버튼을 누르세요.<br />\n설명: '''({{int:cur}})''' = 최신 판과 비교, '''({{int:last}})''' = 이전 판과 비교, '''{{int:minoreditletter}}'''= 사소한 편집",
+ "histlegend": "비교하려는 판을 선택한 다음 엔터나 아래의 버튼을 누르세요.<br />\n설명: <strong>({{int:cur}})</strong> = 최신 판과 비교, <strong>({{int:last}})</strong> = 이전 판과 비교, <strong>{{int:minoreditletter}}</strong>= 사소한 편집",
"history-fieldset-title": "역사 찾아보기",
"history-show-deleted": "삭제된 것만",
"histfirst": "오래됨",
@@ -735,19 +754,20 @@
"history-feed-empty": "요청한 문서가 존재하지 않습니다.\n해당 문서가 삭제되었거나, 문서 이름이 바뀌었을 수 있습니다.\n[[Special:Search|위키의 검색]]을 사용해 관련 문서를 찾아보세요.",
"rev-deleted-comment": "(편집 요약 삭제됨)",
"rev-deleted-user": "(사용자 이름 삭제됨)",
- "rev-deleted-event": "(기록 동작이 제거됨)",
+ "rev-deleted-event": "(기록 정보가 제거됨)",
"rev-deleted-user-contribs": "[사용자 이름 또는 IP 주소 삭제됨 - 기여 목록에서 편집이 숨겨짐]",
- "rev-deleted-text-permission": "해당 편집이 문서 역사에서 '''삭제'''되었습니다.\n자세한 사항은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 볼 수 있습니다.",
- "rev-deleted-text-unhide": "해당 편집이 문서 역사에서 '''삭제'''되었습니다.\n자세한 사항은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 볼 수 있습니다.\n이 편집을 보기를 원하신다면 [$1 해당 편집]을 볼 수 있습니다.",
- "rev-suppressed-text-unhide": "해당 편집이 문서 역사에서 '''숨겨져''' 있습니다.\n자세한 사항은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 볼 수 있습니다.\n이 편집을 보기를 원하신다면 [$1 해당 편집]을 볼 수 있습니다.",
- "rev-deleted-text-view": "이 문서의 편집은 역사에서 '''삭제'''되었습니다.\n삭제된 편집을 볼 수 있으며 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 자세한 내용을 볼 수 있습니다.",
- "rev-suppressed-text-view": "이 문서의 편집은 역사에서 '''숨겨져''' 있습니다.\n숨겨진 편집을 볼 수 있으며 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 자세한 내용을 볼 수 있습니다.",
+ "rev-deleted-text-permission": "이 문서의 판은 <strong>삭제되어</strong> 있습니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾을 수 있습니다.",
+ "rev-suppressed-text-permission": "이 문서의 판은 <strong>숨겨져</strong> 있습니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 찾을 수 있습니다.",
+ "rev-deleted-text-unhide": "이 문서의 판이 <strong>삭제되어</strong> 있습니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾을 수 있습니다.\n이 판을 보기를 원한다면 여전히 [$1 해당 판]을 볼 수 있습니다.",
+ "rev-suppressed-text-unhide": "이 문서의 판이 <strong>숨겨져</strong> 있습니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 찾을 수 있습니다.\n이 판을 보기를 원한다면 여전히 [$1 해당 판]을 볼 수 있습니다.",
+ "rev-deleted-text-view": "이 문서의 판은 <strong>삭제되어</strong> 있습니다.\n삭제된 판을 볼 수 있으며 자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾을 수 있습니다.",
+ "rev-suppressed-text-view": "이 문서의 판은 <strong>숨겨져</strong> 있습니다.\n숨겨진 판을 볼 수 있으며 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 찾을 수 있습니다.",
"rev-deleted-no-diff": "특정 판이 문서 역사에서 '''삭제'''되었기 때문에 비교할 수 없습니다.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 자세한 내용을 볼 수 있습니다.",
"rev-suppressed-no-diff": "두 판 중 일부가 '''삭제'''되었기 때문에 문서 편집 내용을 비교할 수 없습니다.",
- "rev-deleted-unhide-diff": "이 비교에 사용된 판 가운데 하나가 '''삭제'''되었습니다.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에 자세한 내용을 찾아볼 수 있습니다.\n계속 작업하고 싶다면 여전히 [$1 비교 보기]를 계속할 수 있습니다.",
+ "rev-deleted-unhide-diff": "비교하려는 판 가운데 <strong>삭제</strong>된 판이 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾아볼 수 있습니다.\n원하는 경우 [$1 비교 보기]를 계속하실 수 있습니다.",
"rev-suppressed-unhide-diff": "이 비교에 사용된 판 가운데 하나가 '''숨겨져''' 있습니다.\n[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에 자세한 내용이 있을 수 있습니다.\n계속 작업하고 싶다면 [$1 해당 편집]을 볼 수도 있습니다.",
"rev-deleted-diff-view": "비교 대상 중 어느 한 판이 '''삭제'''되었습니다.\n삭제된 판과 다른 판의 비교를 할 수 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 찾아볼 수 있습니다.",
- "rev-suppressed-diff-view": "비교하려는 판 중 일부가 '''숨겨져''' 있습니다.\n숨겨진 판과 이 판의 편집 비교를 할 수 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 해당 숨김 기록]에서 찾아볼 수 있습니다.",
+ "rev-suppressed-diff-view": "비교하려는 판 가운데 <strong>숨겨진</strong> 판이 있습니다.\n숨겨진 판과 이 판의 편집 비교를 할 수 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 찾아볼 수 있습니다.",
"rev-delundel": "보이기/숨기기",
"rev-showdeleted": "보이기",
"revisiondelete": "판 삭제/되살리기",
@@ -768,7 +788,7 @@
"revdelete-legend": "보이기 제한을 설정",
"revdelete-hide-text": "판 문자열",
"revdelete-hide-image": "파일을 숨기기",
- "revdelete-hide-name": "명령 내용과 대상을 숨기기",
+ "revdelete-hide-name": "명령 내용과 변수를 숨기기",
"revdelete-hide-comment": "편집 요약",
"revdelete-hide-user": "편집자의 사용자 이름/IP 주소",
"revdelete-hide-restricted": "관리자도 보지 못하게 숨기기",
@@ -806,7 +826,7 @@
"mergehistory-from": "원본 문서:",
"mergehistory-into": "대상 문서:",
"mergehistory-list": "합칠 수 있는 문서 역사",
- "mergehistory-merge": "[[:$1]] 문서의 다음 판이 [[:$2]] 문서로 합칠 수 있습니다.\n병합하려는 판과 그 이전의 판을 선택하시려면 라디오 버튼을 이용해주세요.\n둘러보기 링크를 이용하는 것은 이 문서를 초기화시킬 것입니다.",
+ "mergehistory-merge": "[[:$1]] 문서의 다음 판을 [[:$2]] 문서로 합칠 수 있습니다.\n라디오 버튼으로 선택한 판과 그 이전판이 합쳐집니다.\n둘러보기 링크를 이용하는 것은 이 문서를 초기화시킬 것입니다.",
"mergehistory-go": "합칠 수 있는 편집 보기",
"mergehistory-submit": "판 합치기",
"mergehistory-empty": "합칠 수 있는 판이 없습니다.",
@@ -822,7 +842,6 @@
"mergehistory-same-destination": "원본 문서 이름과 대상 문서 이름은 달라야 합니다",
"mergehistory-reason": "이유:",
"mergelog": "합치기 기록",
- "pagemerge-logentry": "사용자가 [[$1]]을 [[$2]]에 합쳤습니다 ($3판이 위로 옮겨짐)",
"revertmerge": "합치기 해제",
"mergelogpagetext": "다음은 한 문서의 역사를 다른 문서의 역사와 합친 최근 기록입니다.",
"history-title": "\"$1\"의 편집 역사",
@@ -845,6 +864,8 @@
"notextmatches": "해당하는 문서 없음",
"prevn": "이전 {{PLURAL:$1|$1개}}",
"nextn": "다음 {{PLURAL:$1|$1개}}",
+ "prev-page": "전 페이지",
+ "next-page": "다음 페이지",
"prevn-title": "이전 {{PLURAL:$1|결과}} $1개",
"nextn-title": "다음 {{PLURAL:$1|결과}} $1개",
"shown-title": "쪽마다 {{PLURAL:$1|결과}} $1개씩 보기",
@@ -863,16 +884,18 @@
"search-result-category-size": "{{PLURAL:$1|문서 1개|문서 $1개}}, {{PLURAL:$2|하위 분류 1개|하위 분류 $2개}}, {{PLURAL:$3|파일 1개|파일 $3개}}",
"search-redirect": "($1에서 넘어옴)",
"search-section": "($1 문단)",
+ "search-category": "(분류 $1)",
"search-file-match": "(내용이 일치하는 파일 있음)",
"search-suggest": "$1 문서를 찾고 있으신가요?",
"search-interwiki-caption": "자매 프로젝트",
- "search-interwiki-default": "$1 로부터의 결과:",
+ "search-interwiki-default": "$1로부터의 결과:",
"search-interwiki-more": "(더 보기)",
"search-relatedarticle": "관련",
"searchrelated": "관련",
"searchall": "모두",
"showingresults": "'''$2'''번 부터의 {{PLURAL:$1|결과 '''1'''개|결과 '''$1'''개}}입니다.",
"showingresultsinrange": "#<strong>$2</strong>부터 #<strong>$3</strong>까지의 범위에서 <strong>$1</strong>개의 {{PLURAL:$1|결과}}가 아래에 보입니다.",
+ "search-showingresults": "{{PLURAL:$4|결과 <strong>$3</strong>개 중 <strong>$1</strong>개|결과 <strong>$3</strong>개 중 <strong>$1 - $2</strong>개}}",
"search-nonefound": "검색어와 일치하는 결과가 없습니다.",
"powersearch-legend": "고급 검색",
"powersearch-ns": "다음 이름공간에서 검색:",
@@ -880,13 +903,13 @@
"powersearch-toggleall": "모두",
"powersearch-togglenone": "모두 제외",
"powersearch-remember": "향후 검색에 선택 기억하기",
- "search-external": "바깥에서 검색",
+ "search-external": "바깥 검색",
"searchdisabled": "{{SITENAME}} 검색이 비활성화되어 있습니다.\n검색이 작동하지 않는 동안에는 Google(구글)을 통해 검색할 수 있습니다.\n검색 엔진의 내용은 최신이 아닐 수 있다는 점을 참고하세요.",
"search-error": "검색하는 동안 오류가 발생했습니다: $1",
"preferences": "사용자 환경 설정",
"mypreferences": "환경 설정",
"prefs-edits": "편집 수:",
- "prefsnologintext2": "사용자 환경 설정을 변경하려면 로그인하십시오.",
+ "prefsnologintext2": "사용자 환경 설정을 바꾸려면 로그인하세요.",
"prefs-skin": "스킨",
"skin-preview": "미리 보기",
"datedefault": "설정하지 않음",
@@ -895,6 +918,11 @@
"prefs-personal": "사용자 정보",
"prefs-rc": "최근 바뀜",
"prefs-watchlist": "주시문서 목록",
+ "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-watchlist-edits": "주시문서 목록에서 볼 편집 수:",
@@ -943,7 +971,7 @@
"prefs-files": "파일",
"prefs-custom-css": "사용자 CSS",
"prefs-custom-js": "사용자 자바스크립트",
- "prefs-common-css-js": "모든 스킨에 대한 공통 CSS/자바스크립트:",
+ "prefs-common-css-js": "모든 스킨에 공유된 CSS/자바스크립트:",
"prefs-reset-intro": "이 페이지를 사용해 사이트 기본값으로 환경 설정을 재설정할 수 있습니다.\n이는 되돌릴 수 없습니다.",
"prefs-emailconfirm-label": "이메일 인증:",
"youremail": "이메일:",
@@ -964,7 +992,7 @@
"gender-female": "위키 문서를 편집하는 여자입니다",
"prefs-help-gender": "이 환경 설정은 선택 사항입니다.\n소프트웨어는 적절한 성별 문법을 사용하여 다른 사용자에게 당신을 언급하는 것을 해결하기 위해 사용됩니다.\n이 정보는 공개됩니다.",
"email": "이메일",
- "prefs-help-realname": "실명은 선택 사항입니다.\n실명을 입력하면 문서 기여에 자신의 이름이 들어가게 됩니다.",
+ "prefs-help-realname": "실명은 선택 사항입니다.\n실명을 입력하면 당신의 기여에 대한 저작자표시에 쓰이게 될 수 있습니다.",
"prefs-help-email": "이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호를 재설정하기 위해 필요합니다.",
"prefs-help-email-others": "자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.\n이 경우에도 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.",
"prefs-help-email-required": "이메일 주소가 필요합니다.",
@@ -985,6 +1013,7 @@
"prefs-tokenwatchlist": "토큰",
"prefs-diffs": "차이",
"prefs-help-prefershttps": "이 사용자 환경 설정은 다음 로그인부터 적용됩니다.",
+ "prefswarning-warning": "사용자 환경 설정에서 바뀐 것이 아직 저장되어 있지 않습니다.\n사용자 환경 설정에서 \"$1\"을 클릭하지 않고 이 페이지를 떠나면 바뀌지 않습니다.",
"prefs-tabs-navigation-hint": "팁: 탭 목록에서 탭 사이를 둘러보려면 왼쪽과 오른쪽 화살표 키를 사용할 수 있습니다.",
"email-address-validity-valid": "이메일 주소가 올바른 것으로 보입니다",
"email-address-validity-invalid": "올바른 이메일 주소를 입력하세요",
@@ -1047,9 +1076,9 @@
"right-purge": "확인 없이 문서의 캐시를 새로 고침",
"right-autoconfirmed": "IP 기반의 속도 제한에 영향을 받지 않음",
"right-bot": "봇의 편집으로 취급",
- "right-nominornewtalk": "토론 문서에 사소한 편집으로 새 메시지를 보낼 수 없음",
+ "right-nominornewtalk": "토론 문서에서 사소한 편집으로 새 메시지 알림을 보내지 않기",
"right-apihighlimits": "API 상한 상승",
- "right-writeapi": "API 작성",
+ "right-writeapi": "쓰기 API 사용",
"right-delete": "문서 삭제",
"right-bigdelete": "문서 역사가 긴 문서를 삭제",
"right-deletelogentry": "특정 기록 항목을 삭제 및 되살리기",
@@ -1058,7 +1087,7 @@
"right-deletedtext": "삭제된 문서의 내용과 편집상의 차이를 보기",
"right-browsearchive": "삭제된 문서 검색",
"right-undelete": "삭제된 문서 되살리기",
- "right-suppressrevision": "관리자가 보지 못하도록 숨겨진 판을 검토하고 되살리기",
+ "right-suppressrevision": "어떤 사용자도 보지 못하도록 숨겨진 판을 검토하고 되살리기",
"right-viewsuppressed": "어떤 사용자가 숨긴 판 보기",
"right-suppressionlog": "숨겨진 기록을 보기",
"right-block": "다른 사용자가 편집을 못하도록 차단",
@@ -1070,6 +1099,7 @@
"right-protect": "보호 수준 바꾸기 및 연쇄 보호된 문서 편집",
"right-editprotected": "\"{{int:protect-level-sysop}}\"로 보호된 문서 편집",
"right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\"로 보호된 문서 편집",
+ "right-editcontentmodel": "문서의 콘텐츠 모델을 편집",
"right-editinterface": "사용자 인터페이스를 편집",
"right-editusercssjs": "다른 사용자의 CSS와 자바스크립트 문서를 편집",
"right-editusercss": "다른 사용자의 CSS 문서를 편집",
@@ -1078,8 +1108,8 @@
"right-editmyuserjs": "자신의 사용자 자바스크립트 파일 편집하기",
"right-viewmywatchlist": "자신의 주시문서 목록 보기",
"right-editmywatchlist": "자신의 주시문서 목록을 편집합니다. 이 권한이 없어도 문서를 추가할 수 있는 권한이 이외에도 있음을 참고하세요.",
- "right-viewmyprivateinfo": "자신의 개인 데이터 보기 (예를 들어 이메일 주소, 실명)",
- "right-editmyprivateinfo": "자신의 개인 데이터 편집 (예를 들어 이메일 주소, 실명)",
+ "right-viewmyprivateinfo": "자신의 개인정보 보기 (이메일 주소, 실명 등)",
+ "right-editmyprivateinfo": "자신의 개인정보 편집 (이메일 주소, 실명 등)",
"right-editmyoptions": "자신의 환경 설정 편집",
"right-rollback": "특정 문서를 편집한 마지막 사용자의 편집을 신속하게 되돌리기",
"right-markbotedits": "되돌리기를 봇의 편집으로 취급 가능",
@@ -1097,6 +1127,7 @@
"right-override-export-depth": "5단계로 링크된 문서를 포함하여 문서를 내보내기",
"right-sendemail": "다른 사용자에게 이메일 보내기",
"right-passwordreset": "비밀번호 재설정 이메일을 보기",
+ "right-managechangetags": "데이터베이스에서 [[Special:Tags|태그]]를 만들거나 지우기",
"newuserlogpage": "사용자 만들기 기록",
"newuserlogpagetext": "사용자가 만들어진 기록입니다.",
"rightslog": "사용자 권한 기록",
@@ -1140,8 +1171,10 @@
"action-sendemail": "이메일 보내기",
"action-editmywatchlist": "내 주시문서 목록 편집",
"action-viewmywatchlist": "내 주시문서 목록 보기",
- "action-viewmyprivateinfo": "내 개인 정보 보기",
- "action-editmyprivateinfo": "내 개인 정보 편집",
+ "action-viewmyprivateinfo": "자신의 개인정보 보기",
+ "action-editmyprivateinfo": "자신의 개인정보 편집",
+ "action-editcontentmodel": "문서의 콘텐츠 모델을 편집",
+ "action-managechangetags": "데이터베이스에서 태그를 만들거나 지울",
"nchanges": "$1개 {{PLURAL:$1|바뀜}}",
"enhancedrc-since-last-visit": "{{PLURAL:$1|마지막 방문 이후}} $1개",
"enhancedrc-history": "역사",
@@ -1150,14 +1183,14 @@
"recentchanges-summary": "이 페이지에서 위키의 최근 바뀜을 추적합니다.",
"recentchanges-noresult": "지정한 조건과 일치하는 주어진 기간 동안 바뀜이 없습니다.",
"recentchanges-feed-description": "이 피드에 위키의 최근 바뀜을 추적합니다.",
- "recentchanges-label-newpage": "새로 만든 문서",
+ "recentchanges-label-newpage": "새 문서",
"recentchanges-label-minor": "사소한 편집",
- "recentchanges-label-bot": "봇의 편집",
- "recentchanges-label-unpatrolled": "아직 순찰하지 않은 편집",
+ "recentchanges-label-bot": "봇이 수행한 편집",
+ "recentchanges-label-unpatrolled": "아직 점검하지 않은 편집",
"recentchanges-label-plusminus": "바이트로 표기된 바뀐 문서 크기",
"recentchanges-legend-heading": "'''범례:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|새 문서 목록]]도 보세요)",
- "recentchanges-legend-plusminus": "(''±123'')",
+ "recentchanges-legend-plusminus": "(<em>±123</em>)",
"rcnotefrom": "아래는 <strong>$3, $4</strong>부터 시작하는 {{PLURAL:$5|바뀜이 있습니다}}. (최대 <strong>$1</strong>개가 보여집니다)",
"rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기",
"rcshowhideminor": "사소한 편집을 $1",
@@ -1212,9 +1245,9 @@
"uploaderror": "올리기 오류",
"upload-recreate-warning": "<strong>경고: 해당 이름으로 된 파일이 삭제되었거나 옮겨졌습니다.</strong>\n\n편의를 위해 이 문서에 대한 삭제와 옮기기 기록을 다음과 같이 제공합니다:",
"uploadtext": "파일을 올리기 위해서는 아래의 양식을 채워주세요.\n[[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 검색할 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 기록]]에서 볼 수 있습니다.\n\n문서에 파일을 넣으려면 아래 방법 중 하나를 사용하세요.\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' 파일의 온전한 모양을 사용하고자 할 때\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200픽셀|섬네일|왼쪽|설명]]</nowiki></code>''' 파일의 너비를 200픽셀로 하고 왼쪽 정렬하며 '설명' 이라는 주석을 파일 밑에 달 때\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' 파일을 직접 보여주지 않고 파일로 바로 링크할 때",
- "upload-permitted": "허용하는 파일 확장자: $1",
- "upload-preferred": "권장하는 파일 확장자: $1",
- "upload-prohibited": "금지하는 파일 확장자: $1",
+ "upload-permitted": "허용된 파일 {{PLURAL:$2|형식}}: $1",
+ "upload-preferred": "권장 파일 {{PLURAL:$2|형식}}: $1",
+ "upload-prohibited": "금지된 파일 {{PLURAL:$2|형식}}: $1",
"uploadlogpage": "올리기 기록",
"uploadlogpagetext": "최근 올라온 파일 목록입니다.\n갤러리 형식으로 확인하고 싶으시다면 [[Special:NewFiles|새 파일 목록]]을 보세요.",
"filename": "파일 이름",
@@ -1231,7 +1264,7 @@
"badfilename": "파일 이름이 \"$1\"로 바뀌었습니다.",
"filetype-mime-mismatch": "\".$1\" 파일 확장자와 이 파일의 MIME 형식($2)이 일치하지 않습니다.",
"filetype-badmime": "\"$1\" MIME 형식을 가진 파일은 올릴 수 없습니다.",
- "filetype-bad-ie-mime": "이 파일을 올릴 수 없습니다. 인터넷 익스플로러가 잠재적으로 위험한 파일 형식으로 판단하여 사용이 금지된 \"$1\"로 인식할 수 있습니다.",
+ "filetype-bad-ie-mime": "이 파일을 올릴 수 없습니다. Internet Explorer가 잠재적으로 위험한 파일 형식으로 판단하여 사용이 금지된 \"$1\"로 인식할 수 있습니다.",
"filetype-unwanted-type": "'''\".$1\"''' 확장자는 권장하지 않습니다.\n권장하는 {{PLURAL:$3|파일 확장자}}는 $2입니다.",
"filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|형식의 파일은 올릴 수 없습니다}}.\n$2 {{PLURAL:$3|형식만 사용할 수 있습니다}}.",
"filetype-missing": "파일에 확장자(\".jpg\" 등)가 없습니다.",
@@ -1373,7 +1406,7 @@
"nolicense": "선택하지 않음",
"licenses-edit": "라이선스 옵션 편집",
"license-nopreview": "(미리 보기 불가능)",
- "upload_source_url": "(올바르고, 공개적으로 접근할 수 있는 URL)",
+ "upload_source_url": "(올바르고, 공개적으로 접근할 수 있는 URL에서 선택한 파일)",
"upload_source_file": "(당신의 컴퓨터에서 선택한 파일)",
"listfiles-delete": "삭제",
"listfiles-summary": "이 특수 문서는 모든 올려진 파일을 보여줍니다.",
@@ -1430,7 +1463,7 @@
"filerevert-legend": "파일 되돌리기",
"filerevert-intro": "'''[[Media:$1|$1]]''' 파일을 [$4 $2 $3 버전]으로 되돌립니다.",
"filerevert-comment": "이유:",
- "filerevert-defaultcomment": "$1 $2 버전으로 되돌림",
+ "filerevert-defaultcomment": "$1 $2 판으로 되돌림",
"filerevert-submit": "되돌리기",
"filerevert-success": "'''[[Media:$1|$1]]''' 파일을 [$4 $2 $3 버전]으로 되돌렸습니다.",
"filerevert-badversion": "입력된 시간 기록을 가진 파일의 로컬 버전이 없습니다.",
@@ -1452,7 +1485,7 @@
"filedelete-maintenance-title": "파일을 삭제할 수 없습니다",
"mimesearch": "MIME 검색",
"mimesearch-summary": "이 페이지는 MIME 유형에 해당하는 파일을 필터합니다.\n입력: 내용종류/하위종류나 내용종류/*, 예를 들어 <code>image/jpeg</code>",
- "mimetype": "MIME 형식:",
+ "mimetype": "MIME 종류:",
"download": "다운로드",
"unwatchedpages": "주시되지 않는 문서 목록",
"listredirects": "넘겨주기 문서 목록",
@@ -1474,7 +1507,6 @@
"statistics": "통계",
"statistics-header-pages": "문서 통계",
"statistics-header-edits": "편집 통계",
- "statistics-header-views": "방문 통계",
"statistics-header-users": "사용자 통계",
"statistics-header-hooks": "기타 통계",
"statistics-articles": "본문",
@@ -1483,13 +1515,9 @@
"statistics-files": "올려져 있는 파일",
"statistics-edits": "{{SITENAME}} 설치 이후 문서의 전체 편집 수",
"statistics-edits-average": "문서당 평균 편집 수",
- "statistics-views-total": "총 방문 수",
- "statistics-views-total-desc": "존재하지 않는 문서나 특수 문서에 대한 방문 수는 포함하지 않았습니다",
- "statistics-views-peredit": "편집당 방문 횟수",
"statistics-users": "등록된 [[Special:ListUsers|사용자]]",
"statistics-users-active": "활동적인 사용자",
"statistics-users-active-desc": "최근 {{PLURAL:$1|$1일}} 동안 활동한 사용자",
- "statistics-mostpopular": "가장 많이 읽힌 문서",
"pageswithprop": "문서 속성이 있는 문서",
"pageswithprop-legend": "문서 속성이 있는 문서",
"pageswithprop-text": "이 문서는 특정 문서 속성을 사용한 문서를 나타냅니다.",
@@ -1530,7 +1558,6 @@
"uncategorizedtemplates": "분류되지 않은 틀 목록",
"unusedcategories": "사용하지 않는 분류 목록",
"unusedimages": "사용하지 않는 파일 목록",
- "popularpages": "인기 있는 문서 목록",
"wantedcategories": "필요한 분류 목록",
"wantedpages": "필요한 문서 목록",
"wantedpages-badtitle": "문서 제목이 잘못되었습니다: $1",
@@ -1563,7 +1590,7 @@
"protectedpages-timestamp": "시간 기록",
"protectedpages-page": "문서",
"protectedpages-expiry": "만료 기한",
- "protectedpages-performer": "사용자를 보호",
+ "protectedpages-performer": "보호한 사용자",
"protectedpages-params": "보호 변수",
"protectedpages-reason": "이유",
"protectedpages-unknown-timestamp": "알 수 없음",
@@ -1592,10 +1619,12 @@
"pager-older-n": "{{PLURAL:$1|이전 1개|이전 $1개}}",
"suppress": "오버사이트",
"querypage-disabled": "이 특수 문서는 성능상의 이유로 비활성화되었습니다.",
+ "apihelp": "API 도움말",
+ "apihelp-no-such-module": "\"$1\" 모듈을 찾을 수 없습니다.",
"booksources": "책 찾기",
"booksources-search-legend": "책 원본 검색",
"booksources-isbn": "ISBN:",
- "booksources-go": "검색",
+ "booksources-search": "검색",
"booksources-text": "아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다.",
"booksources-invalid-isbn": "입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.",
"specialloguserlabel": "작업 수행자:",
@@ -1673,10 +1702,10 @@
"noindex-category-desc": "문서는 그것과 그 플래그가 허용된 곳에 있는 이름공간에서 <code><nowiki>__NOINDEX__</nowiki></code> 특수 명령이 있기 때문에 로봇이 색인하지 않습니다.",
"index-category-desc": "문서는 그것(과 플래그가 허용된 곳에 있는 이름공간에 있는 것)에 <code><nowiki>__INDEX__</nowiki></code>가 있어서, 정상적이지 않을 곳에 로봇에 의해 색인됩니다.",
"post-expand-template-inclusion-category-desc": "모든 틀을 전개하였을 때, 문서 크기가 <code>$wgMaxArticleSize</code>보다 커지므로, 어떤 틀은 전개하지 않았습니다.",
- "post-expand-template-argument-category-desc": "틀 변수 (<code>{{{Foo}}}</code>와 같은, 중괄호가 세 개 있는 무언가)를 확장하고 나서, 문서는 <code>$wgMaxArticleSize</code>보다 커집니다.",
- "expensive-parserfunction-category-desc": "(<code>#ifexist</code>와 같은) 느린 파서 함수가 너무 많이 문서에 포함되어 있습니다. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]를 보세요.",
- "broken-file-category-desc": "분류가 깨진 파일 링크 (파일이 존재하지 않을 때 포함되는 링크)가 있는 문서가 있다면 추가됩니다.",
- "hidden-category-category-desc": "기본적으로 문서에 분류 링크 상자가 보여지는 것에서 막기 위한, <code><nowiki>__HIDDENCAT__</nowiki></code>가 있는 분류입니다.",
+ "post-expand-template-argument-category-desc": "틀 변수 (<code>{{{Foo}}}</code>와 같은, 중괄호가 세 개 있는 무언가)를 확장하고 나서 문서는 <code>$wgMaxArticleSize</code>보다 커집니다.",
+ "expensive-parserfunction-category-desc": "문서에 (<code>#ifexist</code>와 같은) 느린 파서 함수가 너무 많이 쓰이고 있습니다. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]를 보세요.",
+ "broken-file-category-desc": "문서에 깨진 파일 링크 (파일이 존재하지 않을 때 포함되는 링크)를 포함합니다.",
+ "hidden-category-category-desc": "기본적으로 문서에 분류 링크 상자가 보여지는 것에서 막기 위한, 분류의 문서 내용에 <code><nowiki>__HIDDENCAT__</nowiki></code>를 포함합니다.",
"trackingcategories-nodesc": "사용할 수 있는 설명이 없습니다.",
"trackingcategories-disabled": "분류가 비활성화되어 있습니다",
"mailnologin": "보낼 이메일 주소가 없음",
@@ -1714,7 +1743,7 @@
"mywatchlist": "주시문서 목록",
"watchlistfor2": "사용자:$1 $2",
"nowatchlist": "주시하는 문서가 아직 없습니다.",
- "watchlistanontext": "주시문서 목록을 보거나 고치려면 $1 하세요.",
+ "watchlistanontext": "주시문서 목록을 보거나 고치려면 로그인하세요.",
"watchnologin": "로그인하지 않음",
"addwatch": "주시문서 목록에 추가",
"addedwatchtext": "\"[[:$1]]\" 문서를 [[Special:Watchlist|주시문서 목록]]에 추가했습니다.\n앞으로 이 문서나 관련된 토론 문서가 바뀌면 보일 것입니다.",
@@ -1731,8 +1760,8 @@
"watchlist-details": "별도의 토론 문서를 세지 않고, 주시문서 목록에 {{PLURAL:$1|문서 $1개}}가 있습니다.",
"wlheader-enotif": "이메일 알림 기능이 활성화되었습니다.",
"wlheader-showupdated": "마지막으로 방문한 이후에 바뀐 문서는 '''굵은 글씨'''로 보입니다.",
- "wlnote": "다음은 최근 {{PLURAL:$2|'''$2'''시간}} 동안 {{PLURAL:$1|바뀐 문서 '''$1'''개 입니다}}. ($3 $4 기준)",
- "wlshowlast": "최근 $1시간 $2일 또는 $3 동안에 바뀐 문서 보기",
+ "wlnote": "$3 $4 기준으로, 아래에 최근 {{PLURAL:$2|한 시간|<strong>$2</strong>시간}} 동안 {{PLURAL:$1|마지막 바뀜이|마지막 바뀜 <strong>$1</strong>개가}} 있습니다.",
+ "wlshowlast": "최근 $1시간 $2일 동안의 바뀜 보기",
"watchlist-options": "주시문서 목록 설정",
"watching": "주시 추가 중…",
"unwatching": "주시 해제 중…",
@@ -1762,7 +1791,7 @@
"exbeforeblank": "비우기 전의 내용: \"$1\"",
"delete-confirm": "\"$1\" 삭제",
"delete-legend": "삭제",
- "historywarning": "'''경고:''' 삭제하려는 문서에 이전 {{PLURAL:$1|편집 역사}} 약 $1개가 있습니다:",
+ "historywarning": "<strong>경고:</strong> 삭제하려고 하는 문서에 {{PLURAL:$1|판}} $1개의 역사가 있습니다:",
"confirmdeletetext": "문서와 문서 역사를 삭제하려고 합니다.\n삭제하려는 문서가 맞는지, 이 문서를 삭제하는 것이 [[{{MediaWiki:Policy-url}}|정책]]에 맞는 행동인지를 확인해 주세요.",
"actioncomplete": "동작 완료",
"actionfailed": "명령 실패",
@@ -1770,18 +1799,17 @@
"dellogpage": "삭제 기록",
"dellogpagetext": "아래의 목록은 최근에 삭제된 문서입니다.",
"deletionlog": "삭제 기록",
- "reverted": "이전 버전으로 되돌렸습니다.",
+ "reverted": "이전 판으로 되돌렸습니다",
"deletecomment": "이유:",
"deleteotherreason": "다른 이유/추가적인 이유:",
"deletereasonotherlist": "다른 이유",
"deletereason-dropdown": "* 일반적인 삭제 이유\n** 스팸\n** 문서 훼손 행위\n** 저작권 침해\n** 작성자의 요청\n** 깨진 넘겨주기",
"delete-edit-reasonlist": "삭제 이유 편집",
- "delete-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.\n편집 역사가 긴 문서를 삭제하면 {{SITENAME}}에 큰 혼란을 줄 수 있기 때문에 삭제할 수 없습니다.",
+ "delete-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 이상 있습니다.\n{{SITENAME}}에 의도하지 않은 혼란을 줄 수 있기 때문에 이런 문서의 삭제는 제한됩니다.",
"delete-warning-toobig": "이 문서에는 {{PLURAL:$1|편집 역사}}가 $1개 있습니다.\n편집 역사가 긴 문서를 삭제하면 {{SITENAME}} 데이터베이스 동작에 큰 영향을 줄 수 있습니다.\n주의해 주세요.",
"deleteprotected": "이 문서가 잠겨 있기 때문에 삭제할 수 없습니다.",
"deleting-backlinks-warning": "'''경고:''' 삭제하려는 문서가 [[Special:WhatLinksHere/{{FULLPAGENAME}}|다른 문서]]에 링크되어 있거나 끼워져 있습니다.",
"rollback": "편집 되돌리기",
- "rollback_short": "되돌리기",
"rollbacklink": "되돌리기",
"rollbacklinkcount": "{{PLURAL:$1|편집}} $1회 되돌리기",
"rollbacklinkcount-morethan": "{{PLURAL:$1|편집}} $1회 이상 되돌리기",
@@ -1789,9 +1817,9 @@
"cantrollback": "편집을 되돌릴 수 없습니다.\n문서를 편집한 사용자가 한 명뿐입니다.",
"alreadyrolled": "[[:$1]]에서 [[User:$2|$2]] ([[User talk:$2|토론]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])의 편집을 되돌릴 수 없습니다.\n누군가가 이미 문서를 고치거나 되돌렸습니다.\n\n마지막으로 이 문서를 편집한 사용자는 [[User:$3|$3]] ([[User talk:$3|토론]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])입니다.",
"editcomment": "편집 요약: \"$1\"",
- "revertpage": "[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[User:$1|$1]]의 마지막 버전으로 되돌림",
+ "revertpage": "[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[User:$1|$1]]의 마지막 판으로 되돌림",
"revertpage-nouser": "숨긴 사용자의 편집을 {{GENDER:$1|[[User:$1|$1]]}}의 마지막 판으로 되돌림",
- "rollback-success": "$1의 편집을 $2의 마지막 버전으로 되돌렸습니다.",
+ "rollback-success": "$1의 편집을 되돌렸습니다.\n$2의 마지막 판으로 바뀌었습니다.",
"sessionfailure-title": "세션 실패",
"sessionfailure": "로그인 세션에 문제가 발생한 것 같습니다.\n세션 하이재킹을 막기 위해 동작이 취소되었습니다.\n브라우저의 뒤로 버튼을 누르고 문서를 새로 고침한 후에 다시 시도해 주세요.",
"protectlogpage": "문서 보호 기록",
@@ -1831,9 +1859,10 @@
"protect-othertime": "다른 기간:",
"protect-othertime-op": "다른 기간",
"protect-existing-expiry": "현재 만료 기간: $2 $3",
+ "protect-existing-expiry-infinity": "기존 만료 시간: 무기한",
"protect-otherreason": "다른 이유/추가적인 이유:",
"protect-otherreason-op": "다른 이유",
- "protect-dropdown": "*일반적인 보호 이유\n** 빈번한 훼손 행위\n** 빈번한 광고 행위\n** 비생산적인 편집 분쟁\n** 방문이 많은 문서",
+ "protect-dropdown": "*일반적인 보호 이유\n** 빈번한 훼손 행위\n** 빈번히 광고를 넣음\n** 비생산적인 편집 분쟁\n** 방문이 많은 문서",
"protect-edit-reasonlist": "보호 이유 편집하기",
"protect-expiry-options": "1시간:1 hour,1일:1 day,1주일:1 week,2주일:2 weeks,1개월:1 month,3개월:3 months,6개월:6 months,1년:1 year,무기한:infinite",
"restriction-type": "권한:",
@@ -1890,6 +1919,7 @@
"namespace": "이름공간:",
"invert": "선택 반전",
"tooltip-invert": "선택한 이름공간(선택되어 있다면 관련된 이름공간도 포함)에 있는 문서의 바뀜을 숨기려면 이 상자를 선택하세요",
+ "tooltip-whatlinkshere-invert": "이 박스를 체크하여 특정 이름공간의 문서에 대한 링크를 숨깁니다.",
"namespace_association": "관련된 이름공간",
"tooltip-namespace_association": "선택한 이름공간과 관련된 토론이나 본문 이름공간을 포함하려면 이 상자를 선택하세요",
"blanknamespace": "(일반)",
@@ -2155,6 +2185,7 @@
"thumbnail-temp-create": "임시 섬네일 파일을 만들 수 없습니다",
"thumbnail-dest-create": "대상 경로에 섬네일을 저장할 수 없습니다.",
"thumbnail_invalid_params": "섬네일 변수가 잘못되었습니다",
+ "thumbnail_toobigimagearea": "$1 이상의 파일 용량",
"thumbnail_dest_directory": "새 목적 디렉터리를 만들 수 없습니다.",
"thumbnail_image-type": "그림 형식이 지원되지 않습니다",
"thumbnail_gd-library": "GD 라이브러리 설정이 잘못되었습니다: $1 함수를 찾을 수 없습니다.",
@@ -2162,7 +2193,7 @@
"thumbnail_image-failure-limit": "여기에 이 섬네일을 렌더하는 데 최근에 너무 많이 실패한 시도($1 이상)가 있습니다.\n나중에 다시 시도하세요.",
"import": "문서 가져오기",
"importinterwiki": "다른 위키에서 문서 가져오기",
- "import-interwiki-text": "문서를 가져올 위키를 선택하고 문서 제목을 입력해주세요.\n편집 날짜와 편집자의 이름이 보존될 것입니다.\n모든 가져오기는 [[Special:Log/import|가져오기 기록]]에 기록될 것입니다.",
+ "import-interwiki-text": "문서를 가져올 위키를 선택하고 문서 제목을 입력해주세요.\n편집 날짜와 편집자의 이름이 보존될 것입니다.\n모든 가져오기는 [[Special:Log/import|가져오기 기록]]에 기록됩니다.",
"import-interwiki-sourcewiki": "원본 위키:",
"import-interwiki-sourcepage": "원본 문서:",
"import-interwiki-history": "이 문서의 모든 역사를 가져오기",
@@ -2182,7 +2213,7 @@
"importcantopen": "파일을 열 수 없습니다.",
"importbadinterwiki": "인터위키 링크가 잘못되었습니다.",
"importsuccess": "가져오기 완료!",
- "importnosources": "문서를 가져올 출처가 정의되지 않았고 문서 역사 올리기가 비활성화되었습니다.",
+ "importnosources": "문서를 가져올 출처 위키가 정의되지 않았고 문서 역사 올리기가 비활성화되었습니다.",
"importnofile": "가져오기 파일이 올려지지 않았습니다.",
"importuploaderrorsize": "파일 올리기를 통한 가져오기에 실패했습니다.\n파일이 허용된 크기 제한보다 큽니다.",
"importuploaderrorpartial": "가져오기 파일을 올리는 데 실패하였습니다.\n파일이 부분적으로만 올려졌습니다.",
@@ -2194,11 +2225,11 @@
"import-upload": "XML 데이터 올리기",
"import-token-mismatch": "세션 데이터가 손실되었습니다.\n다시 시도하세요.",
"import-invalid-interwiki": "해당 위키에서 문서를 가져올 수 없습니다.",
- "import-error-edit": "현재 문서를 편집할 권한이 없기 때문에 \"$1\" 문서를 불러올 수 없습니다.",
- "import-error-create": "현재 문서를 만들 권한이 없기 때문에 \"$1\" 문서를 불러올 수 없습니다.",
- "import-error-interwiki": "\"$1\" 문서는 제목이 바깥 링크(인터위키)용으로 할당되어 있기 때문에 가져오지 않습니다.",
- "import-error-special": "\"$1\" 문서는 특수 문서에 속해 있기 때문에 가져오지 않습니다.",
- "import-error-invalid": "\"$1\" 문서는 제목이 잘못되었기 때문에 가져오지 않습니다.",
+ "import-error-edit": "문서를 편집할 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.",
+ "import-error-create": "문서를 만들 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.",
+ "import-error-interwiki": "\"$1\" 문서는 제목이 바깥 링크(인터위키)용으로 할당되어 있기 때문에 가져오지 않았습니다.",
+ "import-error-special": "\"$1\" 문서는 문서가 허용하지 않는 특수 이름공간에 속해 있기 때문에 가져오지 않았습니다.",
+ "import-error-invalid": "\"$1\" 문서는 이 위키에서 가져오려고 하는 문서의 이름이 올바르지 않기 때문에 가져오지 않았습니다.",
"import-error-unserialize": "\"$1\" 문서의 $2 판이 일렬적이지 않습니다. $3 내용 모델을 사용하여 $4 형식으로 일렬화되도록 판을 보고했습니다.",
"import-error-bad-location": "$3 내용 모델을 사용하는 $2 판을 이 위키의 \"$1\"에 저장할 수 없습니다. 모델을 문서에서 지원하지 않습니다.",
"import-options-wrong": "잘못된 {{PLURAL:$2|선택 사항}}: <nowiki>$1</nowiki>",
@@ -2206,18 +2237,15 @@
"import-rootpage-nosubpage": "루트 문서의 \"$1\" 이름공간은 하위 문서를 허용하지 않습니다.",
"importlogpage": "가져오기 기록",
"importlogpagetext": "다른 위키에서 가져온 문서 기록입니다.",
- "import-logentry-upload": "사용자가 파일 올리기를 통해 [[$1]] 문서를 가져왔습니다",
"import-logentry-upload-detail": "{{PLURAL:$1|판}} $1개를 가져왔습니다",
- "import-logentry-interwiki": "$1 문서를 다른 위키에서 가져왔습니다",
"import-logentry-interwiki-detail": "$2에서 {{PLURAL:$1|판}} $1개를 가져왔습니다",
"javascripttest": "자바스크립트 테스트",
- "javascripttest-title": "$1 테스트 실행",
"javascripttest-pagetext-noframework": "이 문서는 자바스크립트 테스트를 실행하기 위한 용도로 할당되어 있습니다.",
"javascripttest-pagetext-unknownframework": "실험용 프레임워크 \"$1\"를 알 수 없습니다.",
+ "javascripttest-pagetext-unknownaction": "알 수 없는 동작 \"$1\".",
"javascripttest-pagetext-frameworks": "다음 실험용 프레임워크 중 하나를 선택하세요: $1",
"javascripttest-pagetext-skins": "실험할 스킨을 선택하세요:",
"javascripttest-qunit-intro": "mediawiki.org의 [$1 테스트 설명서]를 참고하세요.",
- "javascripttest-qunit-heading": "미디어위키 자바스크립트 QUnit 실험군",
"tooltip-pt-userpage": "내 사용자 문서",
"tooltip-pt-anonuserpage": "현재 사용하는 IP 주소의 사용자 문서",
"tooltip-pt-mytalk": "내 토론 문서",
@@ -2227,6 +2255,7 @@
"tooltip-pt-mycontris": "내 기여의 목록",
"tooltip-pt-login": "꼭 로그인해야 하는 것은 아니지만, 로그인을 권장합니다.",
"tooltip-pt-logout": "로그아웃",
+ "tooltip-pt-createaccount": "계정을 만들고 로그인하는 것이 좋습니다; 하지만, 필수는 아닙니다",
"tooltip-ca-talk": "문서의 내용에 대한 토론 문서",
"tooltip-ca-edit": "문서를 편집할 수 있습니다. 저장하기 전에 미리 보기를 해주세요.",
"tooltip-ca-addsection": "문단 추가하기",
@@ -2256,6 +2285,7 @@
"tooltip-feed-atom": "이 문서의 Atom 피드",
"tooltip-t-contributions": "이 사용자의 기여 목록",
"tooltip-t-emailuser": "이 사용자에게 이메일 보내기",
+ "tooltip-t-info": "이 문서에 대한 자세한 정보",
"tooltip-t-upload": "파일 올리기",
"tooltip-t-specialpages": "모든 특수 문서의 목록",
"tooltip-t-print": "이 문서의 인쇄용 판",
@@ -2285,15 +2315,17 @@
"tooltip-preferences-save": "환경 설정 저장하기",
"tooltip-summary": "짧은 요약을 적어주세요",
"interlanguage-link-title": "$1 – $2",
- "common.css": "/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */",
+ "common.css": "/* 이 CSS 설정은 모든 스킨에 적용됩니다 */",
"print.css": "/* 이 CSS 설정은 인쇄 출력 화면에 적용됩니다 */",
"noscript.css": "/* 이 CSS 설정은 자바스크립트를 비활성화한 사용자에 적용됩니다 */",
"group-autoconfirmed.css": "/* 이 CSS 설정은 자동 인증된 사용자에만 적용됩니다 */",
+ "group-user.css": "/* 이 CSS 설정은 등록된 사용자에만 적용됩니다 */",
"group-bot.css": "/* 이 CSS 설정은 봇에만 적용됩니다 */",
"group-sysop.css": "/* 이 CSS 설정은 관리자에만 적용됩니다 */",
"group-bureaucrat.css": "/* 이 CSS 설정은 사무관에만 적용됩니다 */",
"common.js": "/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */",
"group-autoconfirmed.js": "/* 이 자바스크립트 설정은 자동 인증된 사용자에만 적용됩니다 */",
+ "group-user.js": "/* 이 자바스크립트 설정은 등록된 사용자에만 적용됩니다 */",
"group-bot.js": "/* 이 자바스크립트 설정은 봇에만 적용됩니다 */",
"group-sysop.js": "/* 이 자바스크립트 설정은 관리자에만 적용됩니다 */",
"group-bureaucrat.js": "/* 이 자바스크립트 설정은 사무관에만 적용됩니다 */",
@@ -2321,7 +2353,7 @@
"pageinfo-header-edits": "편집 역사",
"pageinfo-header-restrictions": "문서 보호",
"pageinfo-header-properties": "문서 속성",
- "pageinfo-display-title": "보여줄 이름",
+ "pageinfo-display-title": "보여줄 제목",
"pageinfo-default-sort": "기본 정렬 키",
"pageinfo-length": "문서 길이 (바이트)",
"pageinfo-article-id": "문서 ID",
@@ -2330,7 +2362,6 @@
"pageinfo-robot-policy": "로봇에 의한 색인",
"pageinfo-robot-index": "허용됨",
"pageinfo-robot-noindex": "불허됨",
- "pageinfo-views": "읽은 수",
"pageinfo-watchers": "문서를 주시하는 사용자 수",
"pageinfo-few-watchers": "{{PLURAL:$1|주시하는 사용자}} $1명 미만",
"pageinfo-redirects-name": "이 문서의 넘겨주기 수",
@@ -2364,7 +2395,7 @@
"markaspatrolleddiff": "점검한 문서로 표시",
"markaspatrolledtext": "이 문서를 점검한 것으로 표시",
"markedaspatrolled": "점검한 문서로 표시",
- "markedaspatrolledtext": "[[:$1]] 문서의 선택한 판을 순찰한 것으로 표시하였습니다.",
+ "markedaspatrolledtext": "[[:$1]] 문서의 선택한 판을 점검한 것으로 표시했습니다.",
"rcpatroldisabled": "최근 바뀜 점검 기능 비활성화됨",
"rcpatroldisabledtext": "최근 바뀜 점검 기능은 현재 비활성화되어 있습니다.",
"markedaspatrollederror": "점검한 것으로 표시할 수 없습니다.",
@@ -2626,7 +2657,7 @@
"exif-compression-4": "CCITT 그룹-4 팩스 인코딩",
"exif-compression-6": "JPEG (오래됨)",
"exif-compression-8": "수축 (Adobe)",
- "exif-compression-32773": "PackBits (매킨토시 RLE)",
+ "exif-compression-32773": "PackBits (Macintosh RLE)",
"exif-compression-32946": "수축 (PKZIP)",
"exif-copyrighted-true": "저작권의 보호를 받음",
"exif-copyrighted-false": "저작권 상태를 설정하지 않음",
@@ -2786,7 +2817,6 @@
"exif-urgency-low": "낮음 ($1)",
"exif-urgency-high": "높음 ($1)",
"exif-urgency-other": "사용자 정의 ($1)",
- "watchlistall2": "모두",
"namespacesall": "모두",
"monthsall": "모든 달",
"confirmemail": "이메일 주소 확인",
@@ -2873,9 +2903,9 @@
"watchlisttools-edit": "주시문서 목록 보기/편집하기",
"watchlisttools-raw": "주시문서 목록 직접 편집하기",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|토론]])",
- "unknown_extension_tag": "알 수 없는 확장 기능 태그 \"$1\"",
"duplicate-defaultsort": "'''경고:''' 기본 정렬 키 \"$2\"가 이전의 기본 정렬 키 \"$1\"를 덮어쓰고 있습니다.",
"duplicate-displaytitle": "<strong>경고:</strong> \"$2\" 제목 표시는 기존의 표시되는 제목 \"$1\"을 덮어씁니다.",
+ "invalid-indicator-name": "<strong>오류:</strong> 문서 상태 표시기의 <code>name</code> 특성은 비어 있지 않아야 합니다.",
"version": "버전",
"version-extensions": "설치된 확장 기능",
"version-skins": "설치된 스킨",
@@ -2917,6 +2947,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath 문서 경로]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath 스크립트 경로]",
+ "version-libraries": "설치된 라이브러리",
+ "version-libraries-library": "라이브러리",
+ "version-libraries-version": "버전",
"redirect": "파일, 사용자, 문서나 판 ID로 넘겨주기",
"redirect-legend": "파일이나 문서로 넘겨주기",
"redirect-summary": "이 특수 문서는 파일(파일 이름이 주어짐), 문서(판 ID나 문서 ID가 주어짐)나 사용자 문서(숫자로 표시된 사용자 ID가 주어짐)로 넘겨줍니다. 사용법: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], 또는 [[{{#Special:Redirect}}/user/101]].",
@@ -2952,6 +2985,7 @@
"specialpages-group-wiki": "데이터와 도구",
"specialpages-group-redirects": "넘겨주기 특수 문서",
"specialpages-group-spam": "스팸 처리 도구",
+ "specialpages-group-developer": "개발자 도구",
"blankpage": "빈 문서",
"intentionallyblankpage": "일부러 비워 둔 문서입니다.",
"external_image_whitelist": " #이 줄은 그대로 두십시오<pre>\n#정규 표현식(// 사이에 있는 부분)을 아래에 입력하세요.\n#이 목록은 바깥 그림의 URL과 대조할 것입니다.\n#이 목록과 일치하는 것은 그림이 직접 보여지지만, 그렇지 않은 경우 그림을 가리키는 링크만 보이게 될 것입니다.\n#\"#\" 문자에서 줄의 끝까지는 주석입니다\n#이 목록은 대소문자를 구별하지 않습니다\n\n#모든 정규 표현식은 이 줄 위에 넣어 주십시오. 그리고 이 줄은 그대로 두십시오.</pre>",
@@ -2962,14 +2996,43 @@
"tags-title": "태그",
"tags-intro": "이 문서는 소프트웨어에서 편집에 대해 표시하는 태그와 그 의미를 설명하는 목록입니다.",
"tags-tag": "태그 이름",
- "tags-display-header": "바뀜 목록의 모양",
+ "tags-display-header": "바뀜 목록에서의 모양",
"tags-description-header": "태그에 대한 설명",
- "tags-active-header": "활성하겠습니까?",
+ "tags-source-header": "출처",
+ "tags-active-header": "활성화 여부",
"tags-hitcount-header": "태그된 바뀜",
+ "tags-actions-header": "동작",
"tags-active-yes": "예",
"tags-active-no": "아니오",
+ "tags-source-extension": "확장 기능에 의해 정의됨",
+ "tags-source-manual": "사용자와 봇에 의해 수동으로 적용됨",
+ "tags-source-none": "더 이상 사용하지 않음",
"tags-edit": "편집",
+ "tags-delete": "삭제",
+ "tags-activate": "활성화",
+ "tags-deactivate": "비활성화",
"tags-hitcount": "$1개 {{PLURAL:$1|바뀜}}",
+ "tags-manage-no-permission": "태그를 변경할 권한이 없습니다.",
+ "tags-create-heading": "태그 생성",
+ "tags-create-explanation": "기본적으로 새로 생성된 태그는 사용자와 봇이 사용할 수 있습니다.",
+ "tags-create-tag-name": "태그 이름:",
+ "tags-create-reason": "이유:",
+ "tags-create-submit": "만들기",
+ "tags-create-no-name": "태그 이름을 지정해야 합니다.",
+ "tags-create-invalid-chars": "태그 이름은 콤마 (<code>,</code>)나 슬래시 (<code>/</code>)를 포함할 수 없습니다.",
+ "tags-create-invalid-title-chars": "태그 이름은 문서 제목에 사용할 수 없는 이름으로는 쓸 수 없습니다.",
+ "tags-create-already-exists": "\"$1\" 태그가 이미 존재합니다.",
+ "tags-create-warnings-above": "태그 \"$1\"을 생성하려고 하였으나 {{PLURAL:$2|오류}}가 발생하였습니다.",
+ "tags-create-warnings-below": "태그 생성을 계속하시겠습니까?",
+ "tags-delete-title": "태그 삭제",
+ "tags-delete-explanation-initial": "\"$1\" 태그를 데이터베이스에서 삭제하려고 합니다.",
+ "tags-delete-explanation-in-use": "이 태그가 적용된 {{PLURAL:$2|$2 개의 판이나 로그 기록}}에서 삭제될 것입니다.",
+ "tags-delete-explanation-warning": "이 행위는 데이터베이스 관리자도 <strong>되돌릴 수 없으며</strong> <strong>취소할 수 없습니다.</strong>. 당신이 하려고 하고 있는 행동이 맞는지 확인하십시오.",
+ "tags-delete-explanation-active": "<strong>\"$1\" 태그는 활성화되어 있으며, 미래에도 적용될 것입니다.</strong> 이러한 행동을 방지하려면, 태그가 설정되도록 적용된 곳을 찾아, 비활성화하십시오.",
+ "tags-delete-reason": "이유:",
+ "tags-delete-not-found": "\"$1\" 태그가 존재하지 않습니다.",
+ "tags-activate-not-found": "\"$1\" 태그가 존재하지 않습니다.",
+ "tags-deactivate-reason": "이유:",
"comparepages": "문서 비교",
"compare-page1": "첫 번째 문서",
"compare-page2": "두 번째 문서",
@@ -3023,6 +3086,12 @@
"revdelete-uname-unhid": "사용자 이름 숨김 해제됨",
"revdelete-restricted": "관리자에게 제한을 적용함",
"revdelete-unrestricted": "관리자에 대한 제한을 해제함",
+ "logentry-block-block": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자를 $5 $6 설정으로 차단했습니다.",
+ "logentry-block-unblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 해제했습니다.",
+ "logentry-block-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.",
+ "logentry-suppress-block": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자를 $5 $6 설정으로 차단했습니다.",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.",
+ "logentry-merge-merge": "$1 사용자가 $3 문서를 $4 안에 {{GENDER:$2|병합했습니다}} (판은 $5까지)",
"logentry-move-move": "$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|옮겼습니다}}",
"logentry-move-move-noredirect": "$1 사용자가 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|옮겼습니다}}",
"logentry-move-move_redir": "$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|옮기면서}} 넘겨주기를 덮어썼습니다",
@@ -3033,27 +3102,41 @@
"logentry-newusers-create": "$1 사용자 계정을 {{GENDER:$2|만들었습니다}}",
"logentry-newusers-create2": "$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}",
"logentry-newusers-byemail": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었고}} 비밀번호는 이메일로 보냈습니다",
- "logentry-newusers-autocreate": "$1 사용자 계정을 자동적으로 {{GENDER:$2|만들었습니다}}",
+ "logentry-newusers-autocreate": "$1 사용자 계정을 자동으로 {{GENDER:$2|만들었습니다}}",
"logentry-rights-rights": "$1 사용자가 $3 사용자의 권한을 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
"logentry-rights-rights-legacy": "$1 사용자가 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}",
"logentry-rights-autopromote": "$1 사용자의 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
"logentry-upload-upload": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}",
"logentry-upload-overwrite": "$1 사용자가 $3의 새 판을 {{GENDER:$2|올렸습니다}}",
"logentry-upload-revert": "$1 사용자가 $3 파일을 {{GENDER:$2|올렸습니다}}",
+ "log-name-managetags": "태그 관리 기록",
+ "log-description-managetags": "이 문서는 [[Special:Tags|태그]]에 관한 관리 작업의 목록입니다. 이 기록에는 관리자가 직접 실행한 동작만이 기록되며, 위키 소프트웨어에 의해 태그가 생성 및 삭제되는 경우는 기록되지 않습니다.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 만들었습니다",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 삭제하였습니다 ($5개 {{PLURAL:$5|판 및 기록}}에서 제거되었습니다)",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하도록 활성화시켰습니다",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|사용자가}} \"$4\" 태그를 사용자나 봇이 사용하지 못하도록 비활성화시켰습니다",
"rightsnone": "(없음)",
+ "revdelete-summary": "편집 요약",
+ "feedback-adding": "문서에 피드백을 올리는 중...",
+ "feedback-back": "뒤로",
+ "feedback-bugcheck": "감사합니다! 혹시 해당 사항이 [$1 기존의 버그 보고서]에 올라와 있는지 확인해주세요.",
+ "feedback-bugnew": "확인했습니다. 새로운 버그 보고서를 작성합니다.",
"feedback-bugornote": "기술적 문제를 구체적으로 설명할 준비가 되었다면 [$1 버그를 신고]해 주세요.\n아니면 아래에 쉬운 양식을 쓸 수 있습니다. 의견은 사용자 이름과 함께 \"[$3 $2]\"에 남겨질 것입니다.",
- "feedback-subject": "제목:",
- "feedback-message": "내용:",
"feedback-cancel": "취소",
- "feedback-submit": "피드백 제출",
- "feedback-adding": "문서에 피드백을 올리는 중...",
+ "feedback-close": "완료",
+ "feedback-dialog-title": "피드백 제출",
+ "feedback-error-title": "오류",
"feedback-error1": "오류: API 실행 결과를 인식할 수 없음",
"feedback-error2": "오류: 편집 실패",
"feedback-error3": "오류: API가 응답하지 않음",
+ "feedback-message": "내용:",
+ "feedback-subject": "제목:",
+ "feedback-submit": "제출",
+ "feedback-terms": "사용자 에이전트 정보가 나의 브라우저 정보, 운영 체제 버전을 포함하며 피드백과 함께 공개적으로 공유됨을 이해합니다.",
+ "feedback-termsofuse": "이용 약관을 준수하여 피드백을 제공할 것입니다.",
"feedback-thanks": "감사합니다! \"[$2 $1]\" 문서에 의견을 남겼습니다.",
- "feedback-close": "완료",
- "feedback-bugcheck": "감사합니다! 혹시 해당 사항이 [$1 기존의 버그 보고서]에 올라와 있는지 확인해주세요.",
- "feedback-bugnew": "확인했습니다. 새로운 버그 보고서를 작성합니다.",
+ "feedback-thanks-title": "감사합니다!",
+ "feedback-useragent": "사용자 에이전트:",
"searchsuggest-search": "검색",
"searchsuggest-containing": "다음 문자열 포함...",
"api-error-badaccess-groups": "이 위키에 파일을 올릴 권한이 없습니다.",
@@ -3089,6 +3172,8 @@
"api-error-stashfailed": "내부 오류: 서버가 임시 파일을 저장하지 못했습니다.",
"api-error-publishfailed": "내부 오류: 서버가 임시 파일을 게시하지 못했습니다.",
"api-error-stasherror": "파일을 안전한 곳으로 업로드 하는 동안 오류가 발생했습니다.",
+ "api-error-stashzerolength": "서버는 파일을 저장하지 못했는데, 파일의 용량이 0이기 때문입니다.",
+ "api-error-stashnotloggedin": "파일을 업로드하기 위해 로그인이 필요합니다.",
"api-error-timeout": "서버가 제 시간 내에 응답하지 않았습니다.",
"api-error-unclassified": "알 수 없는 오류가 발생했습니다.",
"api-error-unknown-code": "알 수 없는 오류: \"$1\"",
@@ -3143,6 +3228,57 @@
"log-name-pagelang": "언어 바꾸기 기록",
"log-description-pagelang": "문서 언어를 바꾼 기록입니다.",
"logentry-pagelang-pagelang": "$1 사용자가 $3의 문서 언어를 $4에서 $5로 {{GENDER:$2|바꾸었습니다}}.",
+ "default-skin-not-found": "이런! 당신의 위키에 <code dir=\"ltr\">$wgDefaultSkin</code>에 <code>$1</code>(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치에는 다음 스킨이 포함된 것으로 보입니다. 스킨을 활성화하고 기본값으로 선택하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.\n\n$2\n\n; 미디어위키를 설치했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org의 스킨 디렉터리]에서 어떤 스킨을 설치해보세요:\n:* 여러 스킨과 확장 기능이 들어 있는 [https://www.mediawiki.org/wiki/Download tarball 설치 관리자]를 다운로드하세요. 거기서 <code>skins/</code> 디렉터리를 복사하여 붙여 넣을 수 있습니다.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]에서 개별 스킨 tarball을 다운로드하세요.\n:* 미디어위키 설치의 <code dir=\"ltr\">skins/</code> 디렉터리 안에 git를 통해 <code>mediawiki/skins/*</code> 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다.\n\n; 미디어위키를 업그레이드했다면:\n: 미디어위키 1.24와 새 버전은 더 이상 설치된 스킨을 자동으로 활성화하지 않습니다 ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: 스킨 자동발견]을 보세요). 현재 설치된 스킨을 모두 활성화하려면 <code>LocalSettings.php</code> 안에 다음 줄을 붙여 넣을 수 있습니다:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code>를 수정했다면:\n: 스킨 이름에 오타가 났는지 다시 확인하세요.",
+ "default-skin-not-found-no-skins": "이런! 당신의 위키에 <code dir=\"ltr\">$wgDefaultSkin</code>에 <code>$1</code>(으)로 지정한 기본 스킨은 사용할 수 없습니다.\n\n설치된 스킨은 없습니다.\n\n; 미디어위키를 설치했거나 업그레이드했다면:\n: 아마 git에서 설치했거나, 어떤 다른 방법을 사용하여 직접 설치했을 수 있을 것으로 봅니다. 미디어위키 1.24와 새 버전은 주 저장소에 어떠한 스킨도 포함되어 있지 않습니다. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org의 스킨 디렉터리]에서 어떤 스킨을 설치해보세요:\n:* 여러 스킨과 확장 기능이 들어 있는 [https://www.mediawiki.org/wiki/Download tarball 설치 관리자]를 다운로드하세요. 거기서 <code>skins/</code> 디렉터리를 복사하여 붙여 넣을 수 있습니다.\n:* [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]에서 개별 스킨 tarball을 다운로드하세요.\n:* 미디어위키 설치의 <code dir=\"ltr\">skins/</code> 디렉터리 안에 git를 통해 <code>mediawiki/skins/*</code> 저장소 중 하나를 복제하세요.\n: 당신이 미디어위키 개발자이면 당신의 git 저장소를 방해하면 안됩니다. 스킨을 활성화하고 기본값으로 선택하는 방법에 대한 정보에 대해서는 [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: 스킨 설정]을 보세요.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (활성화)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''비활성화''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''비활성화''')",
+ "mediastatistics": "미디어 통계",
+ "mediastatistics-summary": "올려진 파일 유형에 대한 통계입니다. 이 통계는 파일의 가장 최신 판만을 포함합니다. 오래되거나 삭제된 파일의 판은 제외됩니다.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 바이트}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME 종류",
+ "mediastatistics-table-extensions": "가능한 확장 기능",
+ "mediastatistics-table-count": "파일 수",
+ "mediastatistics-table-totalbytes": "압축된 크기",
+ "mediastatistics-header-unknown": "알 수 없음",
+ "mediastatistics-header-bitmap": "비트맵 그림",
+ "mediastatistics-header-drawing": "드로잉 (벡터 이미지)",
+ "mediastatistics-header-audio": "소리",
+ "mediastatistics-header-video": "동영상",
+ "mediastatistics-header-multimedia": "리치 미디어",
+ "mediastatistics-header-office": "오피스",
+ "mediastatistics-header-text": "텍스트",
+ "mediastatistics-header-executable": "실행 파일",
+ "mediastatistics-header-archive": "압축 파일",
+ "json-warn-trailing-comma": "뒤 {{PLURAL:$1|쉼표}} $1개가 JSON에서 제거되었습니다",
+ "json-error-unknown": "JSON에 문제가 있었습니다. 오류: $1",
+ "json-error-depth": "최대 스택 깊이를 초과했습니다",
+ "json-error-state-mismatch": "올바르지 않거나 잘못된 형식의 JSON",
+ "json-error-ctrl-char": "제어 문자 오류, 올바르지 않게 인코딩되어 있을 수 있습니다",
+ "json-error-syntax": "구문 오류",
+ "json-error-utf8": "잘못된 형식의 UTF-8 문자, 올바르지 않게 인코딩되어 있을 수 있습니다",
+ "json-error-recursion": "인코딩할 값에 하나 이상의 재귀 참조",
+ "json-error-inf-or-nan": "인코딩할 값에 하나 이상의 NAN이나 INF 값",
+ "json-error-unsupported-type": "인코딩할 수 없는 유형의 값을 받았습니다",
+ "special-characters-group-latin": "라틴 문자",
+ "special-characters-group-latinextended": "확장 라틴 문자",
+ "special-characters-group-ipa": "IPA 문자",
+ "special-characters-group-symbols": "기호",
+ "special-characters-group-greek": "그리스 문자",
+ "special-characters-group-cyrillic": "키릴 문자",
+ "special-characters-group-arabic": "아랍 문자",
+ "special-characters-group-arabicextended": "아랍어 확장",
+ "special-characters-group-persian": "페르시아어",
+ "special-characters-group-hebrew": "히브리 문자",
+ "special-characters-group-bangla": "뱅골어",
+ "special-characters-group-tamil": "타밀어",
+ "special-characters-group-telugu": "텔루구어 문자",
+ "special-characters-group-sinhala": "싱할라 문자",
+ "special-characters-group-gujarati": "구자라트 문자",
+ "special-characters-group-devanagari": "데바나가리어",
+ "special-characters-group-thai": "타이어",
+ "special-characters-group-lao": "라오어",
+ "special-characters-group-khmer": "크메르어",
+ "special-characters-title-endash": "en 대시",
+ "special-characters-title-emdash": "em 대시",
+ "special-characters-title-minus": "빼기 기호"
}
diff --git a/languages/i18n/koi.json b/languages/i18n/koi.json
index 4cded69b..2cc313fc 100644
--- a/languages/i18n/koi.json
+++ b/languages/i18n/koi.json
@@ -373,7 +373,6 @@
"pager-older-n": "{{PLURAL:$1|1=важжык 1|важжык $1}}",
"booksources": "Небöггез-öшмöссэз",
"booksources-search-legend": "Небöг йылiсь юöррез кошшан",
- "booksources-go": "Кошшыны",
"log": "Журналлэз",
"allpages": "Быдöс листбоккез",
"prevpage": "Одзжыкся листбок ($1)",
@@ -396,7 +395,7 @@
"unwatch": "Оз ков синмавны",
"unwatchthispage": "Дугдыны синмавны",
"watchlist-details": "Синмалан нимлёдзат $1 {{PLURAL:$1|листбок|листбок|листбок}}, сёрнитан листбоккесö лыдö босьттöг.",
- "wlshowlast": "Мыччавны медбöрья $1 час $2 лун $3 понда",
+ "wlshowlast": "Мыччавны медбöрья $1 час $2 лун понда",
"watchlist-options": "Синмалан нимлёз понда лöсьöтаннэз",
"watching": "Синмавны …",
"unwatching": "Дугдыны синмавны …",
@@ -563,7 +562,6 @@
"metadata-fields": "EXIF метадатаэза ыббез, кöдна шуöмöсь нимлёдзын, лоасö сё ни мыччалöмöсь серпаса листбок вылын, мöдiккез лоасö, он кö шу мöднёж, сайöвтöмöсь:\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "Пасьта",
"exif-imagelength": "Вылына",
- "watchlistall2": "быдöс",
"namespacesall": "быдöс",
"monthsall": "быдöс",
"watchlisttools-view": "Видзöт лöсялана вильмöтöммез",
diff --git a/languages/i18n/krc.json b/languages/i18n/krc.json
index d027276e..2c3b40cb 100644
--- a/languages/i18n/krc.json
+++ b/languages/i18n/krc.json
@@ -7,7 +7,8 @@
"Kaganer",
"Reedy",
"Къарачайлы",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Джибериулени черт:",
@@ -34,7 +35,7 @@
"tog-shownumberswatching": "Бетни, кёзде тургъан тизмелерине къошханланы санын кёргюз",
"tog-oldsig": "Бусагъатдагъы къол салыннган:",
"tog-fancysig": "Къол салыуну энчи вики-тексти (автомат джибериусюз)",
- "tog-uselivepreview": "Терк ал къарауну хайырландыр (экспериментал халда)",
+ "tog-uselivepreview": "Терк ал къарауну хайырландыр",
"tog-forceeditsummary": "Тюрлендириуню ачыкълау тизгини бош къалса, билдир",
"tog-watchlisthideown": "Кёзюмде тургъан бетден мени тюрлендириулерими джашыр",
"tog-watchlisthidebots": "Кёзюмде тургъан бетден ботланы тюрлендириулерин джашыр",
@@ -209,6 +210,7 @@
"otherlanguages": "Башха тилледе",
"redirectedfrom": "(«$1» бетден джиберилгенди)",
"redirectpagesub": "Башха бетге джибериучю бет",
+ "redirectto": "Бу бетге редирект:",
"lastmodifiedat": "Бу бетни ахыр тюрленнгени: $2, $1.",
"viewcount": "Бу бетге {{PLURAL:$1|бир|$1}} кере киргендиле.",
"protectedpage": "Джакъланнган бет",
@@ -221,6 +223,7 @@
"pool-queuefull": "Соруула джыйыучу толуду",
"pool-errorunknown": "Билинмеген халат",
"pool-servererror": "Пул санаучу къуллукъ ишлемеди ($1).",
+ "poolcounter-usage-error": "Хайырланыу халат: $1",
"aboutsite": "{{SITENAME}} сайтны юсюнден",
"aboutpage": "Project:Суратлау",
"copyright": "Ичиндегиси, $1 лицензиягъа кёре бериледи (башха белгиленмеген эсе).",
@@ -261,6 +264,9 @@
"hidetoc": "джашыр",
"collapsible-collapse": "джашыр",
"collapsible-expand": "кёргюз",
+ "confirmable-confirm": "{{GENDER:$1|Базыбмыса}}?",
+ "confirmable-yes": "Хоу",
+ "confirmable-no": "Огъай",
"thisisdeleted": "$1 къараргъа неда къайтарыргъа (тургъузтургъа)?",
"viewdeleted": "$1 къараймыса?",
"restorelink": "{{PLURAL:$1|джангыз бир кетерилген тюрлендириу|$1 кетерилген тюрлендириу}}",
@@ -292,6 +298,7 @@
"databaseerror": "Информация базада халат",
"databaseerror-textcl": "Билгиле базада халат чыкъды.",
"databaseerror-query": "Соруулау: $1",
+ "databaseerror-function": "Функция: $1",
"databaseerror-error": "Халат: $1",
"laggedslavemode": "Эс бёлюгюз! Бу бетге ахыр джангыртыула болмазгъа боллукъдула.",
"readonly": "Информация база джабыкъды",
@@ -382,8 +389,8 @@
"userlogin-helplink2": "Кириуде болушлукъ",
"userlogin-createanother": "Башха аккаунт къурау",
"createacct-emailrequired": "Электрон почтаны адреси",
- "createacct-emailoptional": "Электрон почтаны адреси (амалсыз тюлдю)",
- "createacct-email-ph": "Электрон почта адресигизни джазыгъыз",
+ "createacct-emailoptional": "Email адресинг (амалсыз керек тюлдю)",
+ "createacct-email-ph": "Email адресинги джаз",
"createacct-another-email-ph": "Электрон почтаны адресин джаз",
"createaccountmail": "Эсде болмагъанлай генерация этилген болджаллы паролну хайырландырыу эмда берилген электрон почта адресге ийиу",
"createacct-realname": "Керти атыгъыз (ажымсыз керек тюлдю)",
@@ -391,7 +398,7 @@
"createacct-reason": "Чурум",
"createacct-reason-ph": "Башха тергеу джазыуну нек къураусыз",
"createacct-captcha": "Къоркъуусузлукъну тинтиу",
- "createacct-imgcaptcha-ph": "Башыракъда кёрюннген текстни джаз",
+ "createacct-imgcaptcha-ph": "Башыракъдагъы текстни джаз",
"createacct-submit": "Тергеу джазыуну къура",
"createacct-another-submit": "Энтда бир аккаунт къурау",
"createacct-benefit-heading": "{{SITENAME}} сизнича адамла бла къуралгъанды.",
@@ -484,15 +491,13 @@
"passwordreset-emailsent-capture": "Ийилген пароль эсгертиу e-mail тюбюрекде берилибди.",
"passwordreset-emailerror-capture": "Пароль эсгертиу e-mail генерация этилди (тюбюрекде берилибди), аны {{GENDER:$2|къошулуучугъа}} ашырыу джетишимсиз болду, чурум: $1",
"changeemail": "Электрон почтаны адресин ауушдур",
- "changeemail-header": "Электрон почтаны адресин ауушдуруу",
"changeemail-text": "Сизни e-mail адресигизни тюрлендирир ючюн бу форманы толтуругъуз. Тюрлениуню бегитир ючюн паролну джазаргъа керек боллукъду.",
"changeemail-no-info": "Бу бетни кёрюр ючюн сиз системагъа тергеу джазыуугъуз (аккаунтугъуз) бла кирирге керексиз.",
"changeemail-oldemail": "Почтаны бусагъатдагъы адреси:",
- "changeemail-newemail": "Электрон почтаны джангы адреси:",
+ "changeemail-newemail": "Джангы email адрес:",
"changeemail-none": "(джокъ)",
"changeemail-password": "«{{SITENAME}}» проектде паролугъуз:",
"changeemail-submit": "Адресни тюрлендир",
- "changeemail-cancel": "Ызына алыу",
"resettokens": "Токенлени джибер",
"resettokens-legend": "Токенлени джибер",
"resettokens-tokens": "Токенле:",
@@ -521,7 +526,7 @@
"preview": "Ал къарау",
"showpreview": "Ал къарау",
"showdiff": "Къошулгъан тюрлениуле",
- "anoneditwarning": "'''Эс бёлюгюз''': Сиз системагъа кирмегенсиз. Сизни IP-адресигиз бу бетни тюрлениу тарихине джазыллыкъды.",
+ "anoneditwarning": "<strong>Эс бёлюгюз!</strong> Сиз системагъа кирмегенсиз. Тюрлендириу этсегиз, сизни IP-адресигиз бу бетни тюрлениу тарихине джазыллыкъды эмда ачыкъ кёрюннюкдю. Сиз <strong>[$1 кирсегиз]</strong> неда <strong>[$2 тергеу джазыу къурасагъыз]</strong>, тюрлендириулеригиз аны орнуна къошулуучу атыгъыз бла байламлы боллукъдула эмда башха онглулукъларыгъыз боллукъду.",
"anonpreviewwarning": "''Сиз тергеу джазыуугъуз бла кирмегенсиз. Бетде тюрлениулени сакълатсагъыз, бетни тюрлениу тарихине IP-адресигиз джазыллыкъды.''",
"missingsummary": "'''Эс бёлюгюз.''' Тюрлениулеге къысха ачыкълау джазмагъансыз.\nСиз «Бетни сакъла» дегеннге энтда бассагъыз, тюрлениуле комментарийлесиз сакъланныкъдыла.",
"missingcommenttext": "Тюбю бла ачыкълау джазыгъыз.",
@@ -597,7 +602,7 @@
"sectioneditnotsupported-text": "Бу бетде бёлюмлени тюрлендирирге болмайды.",
"permissionserrors": "Эркинликлени халаты",
"permissionserrorstext": "Бу операцияны этерге эркинлигигиз джокъду, былайдагъы {{PLURAL:$1|1=чурум|чурумла}} ючюн:",
- "permissionserrorstext-withaction": "«'''$2'''» этерге амалыгъыз джокъду. {{PLURAL:$1|1=Чуруму|Чурумлары}}:",
+ "permissionserrorstext-withaction": "$2 операцияны этерге амалыгъыз джокъду, былайдагъы {{PLURAL:$1|1=чурум|чурумла}} ючюн:",
"recreate-moveddeleted-warn": "'''Эс бёлюгюз! Сиз алгъын кетерилген бетни джангыдан къураргъа излейсиз'''\n\nБетни джангыдан къураргъа кереклигине сагъыш этигиз.\nБетни кетериу бла атын тюрлендирилиуню журналы тюбюнде кёргюзюлгенди.",
"moveddeleted-notice": "Бу бет кетерилгенди.\nХапарлашдырыу ючюн тюбюрек кетериуле бла ат тюрлендириулени журналы берилгенди.",
"log-fulllog": "Журналгъа толулай къара",
@@ -643,7 +648,7 @@
"currentrev": "Бусагъатдагъы версия",
"currentrev-asof": "Бусагъатдагъы версия, $1",
"revisionasof": "$1 версиясы",
- "revision-info": "$2 джанындан этилген $1 версия",
+ "revision-info": "$1 датадан версия; {{GENDER:$6|$2}}$7",
"previousrevision": "← Алдагъы",
"nextrevision": "Эндиги →",
"currentrevisionlink": "Бусагъатдагъы версия",
@@ -745,7 +750,6 @@
"mergehistory-same-destination": "Тамал эмда нюзюрдеги бетле бирча болургъа болмайды",
"mergehistory-reason": "Чурум:",
"mergelog": "Бирлешиулени журналы",
- "pagemerge-logentry": "[[$1]] бла [[$2]] бирлешдирилгенди ($3 дери версияла)",
"revertmerge": "Бёлюрге",
"mergelogpagetext": "Тюбюрек бетлени тарихлерини ахыр бирлешдириулери берилгенди.",
"history-title": "$1 — тюрлениу тарихи",
@@ -793,7 +797,7 @@
"searchrelated": "бейламлы",
"searchall": "бютеу",
"showingresults": "Тюбюрек №&nbsp;<strong>$2</strong> башлаб <strong>$1</strong> {{PLURAL:$1|1=эсеб|эсебле}} {{PLURAL:$1|1=кёргюзюлгенди|кёргюзюлгендиле}}.",
- "showingresultsheader": "'''$4''' ючюн {{PLURAL:$5|1='''$3''' эсебден '''$1'''|'''$1 — $2''' арасы '''$3''' эсеб}}",
+ "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> результатдан <strong>$1</strong> результаты|<strong>$3</strong> результатдан <strong>$1 — $2</strong> результатла}}",
"search-nonefound": "Соруу бла келишген эсеб джокъду",
"powersearch-legend": "Кенг излеу",
"powersearch-ns": "Атла аламда излеу:",
@@ -1061,6 +1065,7 @@
"recentchanges-label-bot": "Бу тюрлендириуню бот этгенди",
"recentchanges-label-unpatrolled": "Бу тюрлендириу алкъын патруль этилинмегенди",
"recentchanges-label-plusminus": "Бетни ёлчеми быллай бир байтха тюрленнгенди",
+ "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (къарагъыз: [[Special:NewPages|джангы бетлени тизмеси]])",
"recentchanges-legend-plusminus": "(''±123'')",
"rcnotefrom": "Тюбюрекде <strong>$2</strong> башлаб (<strong>$1</strong> дери) тюрлендириуле кёрюнедиле",
@@ -1328,13 +1333,11 @@
"randomincategory": "Категориядагъы эсде болмагъан бет",
"randomincategory-invalidcategory": "«$1» категория джокъду.",
"randomincategory-nopages": "[[:Category:$1]] категорияда бетле джокъдула.",
- "randomincategory-selectcategory-submit": "Кёч",
"randomredirect": "Сакъланмагъан джибериу",
"randomredirect-nopages": "«$1» ат аланда чырт бир джибериу джокъду.",
"statistics": "Статистика",
"statistics-header-pages": "Бетлени статистикалары",
"statistics-header-edits": "Тюрлендириулени статистикасы",
- "statistics-header-views": "Къарауланы статистикалары",
"statistics-header-users": "Къошулуучуланы статистикалары",
"statistics-header-hooks": "Башха статистика",
"statistics-articles": "Статьяла",
@@ -1343,13 +1346,9 @@
"statistics-files": "Джюкленнген файлла",
"statistics-edits": "{{SITENAME}} къуралгъанындан бери этилген тюрлендириуле.",
"statistics-edits-average": "Хар бетдеги тюрлендириулени орта саны",
- "statistics-views-total": "Къараула бютеулей",
- "statistics-views-total-desc": "Къуралмагъан бетле бла къуллукъ бетлеге къараула саналмайдыла.",
- "statistics-views-peredit": "Тюрлендириуге къарауну саны",
"statistics-users": "Регистрация этилген [[Special:ListUsers|къошулуучула]]",
"statistics-users-active": "Актив къошулуучула",
"statistics-users-active-desc": "Ахыр {{PLURAL:$1|кюнде|$1 кюнде}} ишлеме этген къошулуучула",
- "statistics-mostpopular": "Эм кёб къаралгъан бетле",
"pageswithprop-prop": "Амалны аты:",
"pageswithprop-submit": "Таб",
"doubleredirects": "Джибериу болгъан джибериуле",
@@ -1384,7 +1383,6 @@
"uncategorizedtemplates": "Категория салынмагъан шаблонла",
"unusedcategories": "Хайырланылынмагъан категорияла",
"unusedimages": "Хайырланмагъан файлла",
- "popularpages": "Популяр бетле",
"wantedcategories": "Керекли категорияла",
"wantedpages": "Керекли бетле",
"wantedpages-badtitle": "Сорманы эсеблеринде халатлы башлыкъ: $1",
@@ -1438,7 +1436,7 @@
"booksources": "Китабланы чыкъгъан джерлери",
"booksources-search-legend": "Китабны юсюнден информация излеу",
"booksources-isbn": "ISBN:",
- "booksources-go": "Таб",
+ "booksources-search": "Изле",
"booksources-text": "Бу бетде джангы эмда эски китаб сатхан башха сайтлагъа джибериулени тизмеси барды, эм излеген китабларыгъызны юсюнден кёбюрек билги билирге боллукъсуз.",
"booksources-invalid-isbn": "Берилген ISBN джараусуз кибик кёрюнеди; оригинал къайнакъдан кёчюрюлген заманда халатланы контроль этигиз.",
"specialloguserlabel": "Толтуруучу:",
@@ -1559,7 +1557,7 @@
"wlheader-enotif": "E-mail бла хапар бериу джандырылыбды.",
"wlheader-showupdated": "Ахыр кириуюгюзден сора бетни тюрлениулери '''къалын''' джазыу бла кёргюзюлгенди.",
"wlnote": "Тюбюндеди кёргюзюлгенди: ахыр '''$2''' сагъатха этилген ахыр '''$1''' тюрлениу, $3 $4 заманнга дери.",
- "wlshowlast": "Арт $1 сагъат $2 кюннге $3 кёргюз",
+ "wlshowlast": "Арт $1 сагъат $2 кюннге кёргюз",
"watchlist-options": "Кёзде тургъан тизмени джарашдырыулары",
"watching": "Кёзде тургъан тизмеге къошуу...",
"unwatching": "Кёзде тургъан тизмеден кетериу...",
@@ -1595,7 +1593,6 @@
"delete-toobig": "Бу бетни, $1 {{PLURAL:$1|1=версияла|версияла}} бла бек узун тарихи барды.\nБыллай бетлени кетерилиую, {{SITENAME}} сайтны бузмаз ючюн чекленгенди.",
"delete-warning-toobig": "Бу бетни уллу тюрлендириу тарихи барды, $1 {{PLURAL:$1|1=версиядан|версиядан}} артыкъ.\nБуну кетериу {{SITENAME}} ишлеулени асхатыргъа боллукъду;\nэсгере андан ары ишлегиз.",
"rollback": "Тюрлендириулени ызына ал",
- "rollback_short": "Ызына ал",
"rollbacklink": "ызына къайтарыу",
"rollbacklinkcount": "$1 {{PLURAL:$1|тюрлендириуню ызына|тюрлендириуню ызларына}} тёнгерет",
"rollbacklinkcount-morethan": "$1 тюрлендириуден кёбню {{PLURAL:$1|ызларына}} тёнгерет",
@@ -1947,7 +1944,6 @@
"import": "Бетлени импорт эт",
"importinterwiki": "Викиле арасы импорт",
"import-interwiki-text": "Импорт этер ючюн викини эм импорт этилген бетни атын сайлагъыз.\nТюрлениулени тарихи бла джазыучуланы атлары сакъланныкъды.\nБютеу викиле арасы импорт операцияла [[Special:Log/import|импортну журналына]] кёчюрюллюкдю.",
- "import-interwiki-source": "Къайнакъ вики/бет:",
"import-interwiki-history": "Бу бетни бютеу тюрлениу тарихин копия эт",
"import-interwiki-templates": "Бютеу шаблонланы ичине сал",
"import-interwiki-submit": "Импорт",
@@ -1978,12 +1974,9 @@
"import-invalid-interwiki": "Белгиленнген викиден импорт этелирча тюлдю.",
"importlogpage": "Импортну журналы",
"importlogpagetext": "Башха викиледен бетлени тюрлендириу тарихин администраторланы импорт этиую.",
- "import-logentry-upload": "[[$1]] файл джюклениую бла импорт этилди",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|версия}}",
- "import-logentry-interwiki": "$1 трансвикиленди",
"import-logentry-interwiki-detail": "$2 бетден $1 {{PLURAL:$1|версия}}",
"javascripttest": "JavaScript тинтилиую",
- "javascripttest-title": "$1 тинтиле турады",
"tooltip-pt-userpage": "Къошулуучу бетигиз",
"tooltip-pt-anonuserpage": "Сизни IP-адресигиз ючюн къошулуучу бет",
"tooltip-pt-mytalk": "Сизни сюзюу бетигиз",
@@ -2066,6 +2059,7 @@
"spambot_username": "Спамны ариулау",
"spam_reverting": "$1 бла джибериую болмагъан ахыр версиягъа къайтылады",
"spam_blanking": "Бютеу версияла $1 бетге джибериу тутадыла, ариуланадыла",
+ "simpleantispam-label": "Анти-спам сынау.\nМуну '''толтурМА'''!",
"pageinfo-title": "«$1» бетни юсюнден информация",
"pageinfo-header-basic": "Баш билгиле",
"pageinfo-header-edits": "Тюрлениу тарих",
@@ -2080,7 +2074,6 @@
"pageinfo-robot-policy": "Излеу роботла бла индексация",
"pageinfo-robot-index": "Эркинлик берилгенди",
"pageinfo-robot-noindex": "Эркинлик берилмегенди",
- "pageinfo-views": "Къарауланы саны",
"pageinfo-watchers": "Бетни кёзде тутханланы саны",
"pageinfo-redirects-name": "Бу бетге редиректлени саны",
"pageinfo-firstuser": "Бетле къураучу",
@@ -2500,7 +2493,6 @@
"exif-urgency-low": "Алаша ($1)",
"exif-urgency-high": "Мийик ($1)",
"exif-urgency-other": "Къошулуучу салгъан приоритет ($1)",
- "watchlistall2": "бютеу",
"namespacesall": "бютеу",
"monthsall": "бютеу",
"confirmemail": "Электорн адресни мюкюл эт",
@@ -2626,7 +2618,6 @@
"hebrew-calendar-m6-gen": "Адар",
"hebrew-calendar-m6a-gen": "Адар I",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|сюзюу]])",
- "unknown_extension_tag": "Къошакъны билинмеген \"$1\" теги",
"duplicate-defaultsort": "'''Эсгериу:''' Бар саналгъан \"$2\" сыныфлама ачхыч, аллындагъы \"$1\" сыныфлама ачхычны джараусуз этеди.",
"version": "Версия",
"version-extensions": "Салыннган кенгертиуле",
@@ -2642,7 +2633,7 @@
"version-parser-function-hooks": "Синтаксис анализаторну функцияларын тутуучула",
"version-hook-name": "Тутуучуну аты",
"version-hook-subscribedby": "Абонент болгъан",
- "version-version": "(Версия $1)",
+ "version-version": "($1)",
"version-license": "MediaWiki'ни лицензиясы",
"version-ext-colheader-name": "Кенгериу",
"version-ext-colheader-description": "Ачыкълау",
@@ -2759,13 +2750,15 @@
"logentry-rights-rights": "$1 къошулуучу, $3 къошулуучуну членлигин $4 къауумдан $5 къауумгъа {{GENDER:$2|кёчюрдю}}",
"logentry-rights-rights-legacy": "$1 къошулуучу, $3 къушулуучуну къауумлада членлигин {{GENDER:$2|тюрлендирди}}",
"logentry-rights-autopromote": "$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа {{GENDER:$2|кёчюрюлдю}}",
+ "logentry-upload-upload": "$1, $3 {{GENDER:$2|джюкледи}}",
"rightsnone": "(джокъ)",
- "feedback-subject": "Тема:",
- "feedback-message": "Билдириу:",
+ "revdelete-summary": "тюрлениулени ачыкълау",
"feedback-cancel": "Ызына алыу",
- "feedback-submit": "Оюмунгу джибер",
- "feedback-error2": "Халат. Тюзетиу ётмеди",
"feedback-close": "Тындырылды",
+ "feedback-error2": "Халат. Тюзетиу ётмеди",
+ "feedback-message": "Билдириу:",
+ "feedback-subject": "Тема:",
+ "feedback-submit": "Джибер",
"searchsuggest-search": "Излеу",
"searchsuggest-containing": "ичиндегиси…",
"api-error-badtoken": "Ич халат: терс токен.",
@@ -2822,5 +2815,26 @@
"expand_templates_remove_nowiki": "Эсебде <nowiki> теглени тый",
"expand_templates_generate_xml": "XML'ни тинтиу терегин кёргюз",
"expand_templates_generate_rawhtml": "HTML'ни кёргюз",
- "expand_templates_preview": "Ал къарау"
+ "expand_templates_preview": "Ал къарау",
+ "special-characters-group-latin": "Латинча",
+ "special-characters-group-latinextended": "Кенгертилген латинча",
+ "special-characters-group-ipa": "ХАФА (IPA)",
+ "special-characters-group-symbols": "Символла",
+ "special-characters-group-greek": "Грекча",
+ "special-characters-group-cyrillic": "Кириллица",
+ "special-characters-group-arabic": "Арабча",
+ "special-characters-group-arabicextended": "Кенгерген арабча",
+ "special-characters-group-persian": "Къаджарча",
+ "special-characters-group-hebrew": "Иврит",
+ "special-characters-group-bangla": "Бенгалча",
+ "special-characters-group-tamil": "Тамил",
+ "special-characters-group-telugu": "Телугу",
+ "special-characters-group-sinhala": "Сингалча",
+ "special-characters-group-gujarati": "Гуджарати",
+ "special-characters-group-thai": "Тай",
+ "special-characters-group-lao": "Лаос",
+ "special-characters-group-khmer": "Кхмер",
+ "special-characters-title-endash": "орта тире",
+ "special-characters-title-emdash": "узун тире",
+ "special-characters-title-minus": "минус белги"
}
diff --git a/languages/i18n/kri.json b/languages/i18n/kri.json
index 5cb828ee..aab1026f 100644
--- a/languages/i18n/kri.json
+++ b/languages/i18n/kri.json
@@ -346,7 +346,6 @@
"movethispage": "Muf dhis pej hyar",
"booksources": "Buk sòrsdèm",
"booksources-search-legend": "Sarcg fòr buk sòrsdèm",
- "booksources-go": "Go",
"log": "Lògdèm",
"allpages": "Òll pejdèm",
"allarticles": "Òll pejdèm",
@@ -470,7 +469,6 @@
"show-big-image": "Original fail",
"ilsubmit": "Sarch",
"metadata": "Mètadata",
- "watchlistall2": "òll",
"namespacesall": "òll",
"monthsall": "òll",
"confirmemail": "Kònfirm yu emel addrèss",
diff --git a/languages/i18n/krj.json b/languages/i18n/krj.json
index d083aa12..dcc2e276 100644
--- a/languages/i18n/krj.json
+++ b/languages/i18n/krj.json
@@ -1,232 +1,229 @@
{
- "@metadata": {
- "authors": [
- "Harvzsf",
- "Joebertj",
- "Jose77",
- "Oxyzen",
- "RonaldPanaligan"
- ]
- },
- "tog-underline": "Koritan ang dalum kang manga ''link'':",
- "tog-hideminor": "Tagoon ang gagmay nga ''edit'' sa mga bag-o nga ilis",
- "tog-extendwatchlist": "Palapadun ang ''watchlist'' agud nga mapakita ang tanan nga ginasogtan nga pag-ilis",
- "tog-numberheadings": "Automatiko nga togroan kang nomero ang manga ''heading''",
- "tog-showtoolbar": "Ipakita ang pangbolig sa pag-ilis (JavaScript)",
- "tog-rememberpassword": "Tandaan ang akun nga ''log-in'' sa dya nga ''computer'' (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "tog-watchcreations": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghimo ko",
- "tog-watchdefault": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpang-''edit'' ko",
- "tog-watchmoves": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghalin ko",
- "tog-watchdeletion": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpamara ko",
- "tog-previewonfirst": "Ipakita ang preview sa ona nga ilis",
- "tog-enotifwatchlistpages": "Padarhan ako kang e-mail kon may nag-ilis kang pahina nga akun ginabantayan",
- "tog-enotifminoredits": "Padarhan man ako kang ''e-mail'' tohay sa manga gagmay nga pag-ilis sa manga pahina",
- "tog-shownumberswatching": "Ipakita ang karakuun kang manga ''user'' nga galantaw",
- "tog-forceeditsummary": "Paman-an ako kon blanko nga ''edit summary'' ang akun ginapasulud",
- "tog-watchlisthideown": "Indi pagpakita sa ''watchlist'' ang akun nga manga gin-islan",
- "tog-watchlisthidebots": "Indi pagpakita sa ''watchlist'' ang manga gin-islan kang bot",
- "tog-watchlisthideminor": "Indi pagpakita sa ''watchlist'' ang mga gagmay nga inislan",
- "tog-ccmeonemails": "Padarhi man ako kang manga ''e-mail'' nga ginpadara ko sa iban nga manga ''user''",
- "underline-always": "Pirme gid",
- "underline-never": "Indi gid",
- "underline-default": "Onay nga browser",
- "sunday": "Domingo",
- "monday": "Lones",
- "tuesday": "Martes",
- "wednesday": "Miyerkoles",
- "thursday": "Webes",
- "friday": "Biyernes",
- "saturday": "Sabado",
- "sun": "Dom",
- "mon": "Lon",
- "tue": "Mar",
- "wed": "Miy",
- "thu": "Web",
- "fri": "Biy",
- "sat": "Sab",
- "january": "Enero",
- "february": "Pebrero",
- "march": "Marso",
- "april": "Abril",
- "may_long": "Mayo",
- "june": "Honyo",
- "july": "Holyo",
- "august": "Agosto",
- "september": "Setyembre",
- "october": "Oktobre",
- "november": "Nobyembre",
- "december": "Disyembre",
- "january-gen": "Enero",
- "february-gen": "Pebrero",
- "march-gen": "Marso",
- "april-gen": "Abril",
- "may-gen": "Abril",
- "june-gen": "Honyo",
- "july-gen": "Holyo",
- "august-gen": "Agosto",
- "september-gen": "Setyembre",
- "october-gen": "Oktobre",
- "november-gen": "Nobyembre",
- "december-gen": "Disyembre",
- "jan": "Ene",
- "feb": "Peb",
- "apr": "Abr",
- "may": "May",
- "jun": "Hon",
- "jul": "Hol",
- "aug": "Ago",
- "sep": "Set",
- "oct": "Okt",
- "nov": "Nob",
- "dec": "Dis",
- "category_header": "Manga artikolo sa \"$1\"",
- "subcategories": "Manga ''subcategory''",
- "category-media-header": "Manga midya sa \"$1\"",
- "category-empty": "''Wara it manga artikolo okon medya ang katergorya nga dya.''",
- "about": "Angut sa Iwan",
- "article": "Pahina kasudlan",
- "newwindow": "(gabokas sa bag-o nga ''window'')",
- "cancel": "Kanselar",
- "moredotdotdot": "Raku pa...",
- "mypage": "Akun nga pahina",
- "anontalk": "Istoryahun ang dya nga ''IP''",
- "qbfind": "Sagap",
- "qbbrowse": "Bilid",
- "qbedit": "Iislan",
- "qbpageoptions": "Dya nga Pahina",
- "faq": "FAQ",
- "faqpage": "Project:FAQ",
- "errorpagetitle": "Sayup",
- "returnto": "Balik sa $1.",
- "help": "Bolig",
- "search": "Sagap",
- "searchbutton": "Sagap",
- "go": "Agto",
- "searcharticle": "Agto",
- "history": "Kasaysayan kang Pahina",
- "history_short": "Kasaysayan",
- "updatedmarker": "ginpabag-o halin kang orihi ko nga pagbisita",
- "printableversion": "Bersyon nga sarang ma-''print''",
- "permalink": "Permanyente nga ''link''",
- "print": "Printa",
- "edit": "Iislan",
- "editthispage": "Islan ang dya nga pahina",
- "delete": "Para",
- "deletethispage": "Paraun ang dya nga Pahina",
- "protect": "Amlig",
- "protect_change": "iislan",
- "protectthispage": "Amligan ang dya nga pahina",
- "unprotect": "huksun ang proteksyon",
- "unprotectthispage": "Huksun ang proteksyon sa dya nga pahina",
- "newpage": "Bag-o nga pahina",
- "talkpage": "Sogdanunun ang dya nga pahina",
- "talkpagelinktext": "Wakal",
- "specialpage": "Espesyal nga Pahina",
- "postcomment": "Togro Komento",
- "articlepage": "Turukun ang pahina kasudlan",
- "talk": "Sugilanon",
- "views": "Manga paglantaw",
- "toolbox": "Pangbolig",
- "otherlanguages": "Sa iban nga lingwahe",
- "redirectpagesub": "Idaho ang pahina",
- "protectedpage": "Protektado nga pahina",
- "jumpto": "Lompat sa:",
- "jumptosearch": "sagap",
- "aboutsite": "Tunggəd sa {{SITENAME}}",
- "aboutpage": "Project:Tunggəd",
- "disclaimers": "Mga Panginwala",
- "disclaimerpage": "Project:Panginwala nga Pangtanan",
- "edithelp": "Panoytoy sa Pag-ilis",
- "mainpage": "Pono nga Pahina",
- "mainpage-description": "Pono nga Pahina",
- "privacy": "Surundun sa Privacy",
- "privacypage": "Project:Surundun sa Privacy",
- "badaccess": "Sayup sa lisensya",
- "badaccess-group0": "Indi kaw ginpasogtan nga himoon ang lihuk nga ginalaum mo.",
- "badaccess-groups": "Ang imo ginpangayo nga lihuk ay para lang sa mga users sa {{PLURAL:$2|nga grupo|sara sa mga grupo}}: $1.",
- "versionrequired": "Version $1 kang MediaWiki kinahanglan",
- "versionrequiredtext": "Version $1 of MediaWiki kinahanglan para magamit ang page nga ja.\nLantawa sa [[Special:Version|version kang page]].",
- "ok": "OK dun",
- "youhavenewmessages": "May rudyan kaw nga $1 ($2).",
- "youhavenewmessagesmulti": "May rudyan kaw nga manga bag-o nga mensahe sa $1",
- "editsection": "iislan",
- "editold": "iislan",
- "toc": "Manga Sulud",
- "showtoc": "ipakita",
- "hidetoc": "itago",
- "nstab-main": "Pahina",
- "nstab-media": "Pahina kang Midya",
- "nstab-special": "Espesyal nga pahina",
- "nstab-project": "Pahina kang Proyekto",
- "nstab-image": "Inayap",
- "nstab-mediawiki": "Mensahe",
- "nstab-template": "''Template''",
- "nstab-help": "Pahina kang Panoytoy",
- "nstab-category": "Kategorya",
- "error": "Sayup",
- "databaseerror": "Sayup sa database",
- "readonly": "Napintalan ang ''database''",
- "internalerror": "Sayup internal",
- "internalerror_info": "Sayup internal: $1",
- "filecopyerror": "Indi makopya ang ''file'' halin sa \"$1\" paagto sa \"$2\".",
- "filerenameerror": "Indi maislan ang ngaran kang ''file'' halin sa \"$1\" paagto sa \"$2\".",
- "filedeleteerror": "Indi mapara ang ''file'' nga \"$1\".",
- "directorycreateerror": "Indi mahimo ang ''directory'' nga \"$1\".",
- "filenotfound": "Indi makita ang ''file'' nga \"$1\".",
- "fileexistserror": "Indi makasolat sa ''file'' nga \"$1\": may amo kadya run nga ''file''",
- "viewsource": "Turukun ang ginhalinan",
- "remembermypassword": "Tandaan ang akun nga ''log-in'' sa dya nga ''browser'' (kang maximum nga $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})",
- "nologinlink": "Himo ka sangka ''account''",
- "createaccount": "Himo ka ''account''",
- "preview": "Bilid",
- "skin-preview": "Bilid",
- "searchresultshead": "Sagap",
- "youremail": "E-mail:",
- "email": "E-mail",
- "hide": "Itago",
- "show": "Ipakita",
- "upload-file-error": "Sayup internal",
- "imgfile": "inayap",
- "file-anchor-link": "Inayap",
- "filedelete-submit": "Para",
- "brokenredirects-edit": "Iislan",
- "brokenredirects-delete": "para",
- "withoutinterwiki-submit": "Ipakita",
- "booksources-go": "Agto",
- "categories": "Manga Kategorya",
- "linksearch-ok": "Sagap",
- "listusers-submit": "Ipakita",
- "emailmessage": "Mensahe",
- "delete-legend": "Para",
- "restriction-edit": "Iislan",
- "undelete-search-submit": "Sagap",
- "sp-contributions-talk": "wakal",
- "sp-contributions-submit": "Sagap",
- "whatlinkshere-page": "Pahina:",
- "isredirect": "idaho ang pahina",
- "ipblocklist-submit": "Sagap",
- "tooltip-ca-protect": "Amligan ang dya nga pahina",
- "tooltip-ca-delete": "Paraun ang dya nga Pahina",
- "tooltip-p-logo": "Pono nga Pahina",
- "tooltip-n-mainpage": "Agtoni ang Main Page",
- "tooltip-n-portal": "Tunggəd sa project, ano pwede mo mahimo, diin mo makita ang mga bagay bagay",
- "tooltip-n-currentevents": "Pangita-a ang mga ginhalinan sa mga nagakaratabo sa tulad",
- "tooltip-n-recentchanges": "Listahan kang mga bag-o lang na-ilis sa wiki.",
- "tooltip-n-randompage": "Magkarga kang random nga page",
- "tooltip-n-help": "Lugar kun diin mo masagap.",
- "tooltip-t-whatlinkshere": "Listahan kang tanan nga mga wiki pages nga naga-link paagto ja",
- "tooltip-t-recentchangeslinked": "Mga bag-o lng ilis nga mga page nga naka-link halin sa page nga ja",
- "tooltip-feed-rss": "RSS feed para sa page nga ja",
- "tooltip-feed-atom": "Atom feed para sa page nga ja",
- "tooltip-t-contributions": "Lantawa ang listahan kang mga ginbulig kang user nga ja",
- "tooltip-t-emailuser": "Padarhi kang e-mail ang user nga ja",
- "ilsubmit": "Sagap",
- "confirm_purge_button": "OK dun",
- "imgmultigo": "Agto!",
- "table_pager_limit_submit": "Agto",
- "version-specialpages": "Manga espesyal nga pahina",
- "fileduplicatesearch-submit": "Sagap",
- "specialpages": "Manga espesyal nga pahina",
- "expand_templates_ok": "OK dun",
- "expand_templates_preview": "Bilid"
+ "@metadata": {
+ "authors": [
+ "Harvzsf",
+ "Joebertj",
+ "Jose77",
+ "Oxyzen",
+ "RonaldPanaligan",
+ "TMg"
+ ]
+ },
+ "tog-underline": "Koritan ang dalum kang manga ''link'':",
+ "tog-hideminor": "Tagoon ang gagmay nga ''edit'' sa mga bag-o nga ilis",
+ "tog-extendwatchlist": "Palapadun ang ''watchlist'' agud nga mapakita ang tanan nga ginasogtan nga pag-ilis",
+ "tog-numberheadings": "Automatiko nga togroan kang nomero ang manga ''heading''",
+ "tog-showtoolbar": "Ipakita ang pangbolig sa pag-ilis (JavaScript)",
+ "tog-watchcreations": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghimo ko",
+ "tog-watchdefault": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpang-''edit'' ko",
+ "tog-watchmoves": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpanghalin ko",
+ "tog-watchdeletion": "Idogang sa akun nga ''watchlist'' ang manga pahina nga ginpamara ko",
+ "tog-previewonfirst": "Ipakita ang preview sa ona nga ilis",
+ "tog-enotifwatchlistpages": "Padarhan ako kang e-mail kon may nag-ilis kang pahina nga akun ginabantayan",
+ "tog-enotifminoredits": "Padarhan man ako kang ''e-mail'' tohay sa manga gagmay nga pag-ilis sa manga pahina",
+ "tog-shownumberswatching": "Ipakita ang karakuun kang manga ''user'' nga galantaw",
+ "tog-forceeditsummary": "Paman-an ako kon blanko nga ''edit summary'' ang akun ginapasulud",
+ "tog-watchlisthideown": "Indi pagpakita sa ''watchlist'' ang akun nga manga gin-islan",
+ "tog-watchlisthidebots": "Indi pagpakita sa ''watchlist'' ang manga gin-islan kang bot",
+ "tog-watchlisthideminor": "Indi pagpakita sa ''watchlist'' ang mga gagmay nga inislan",
+ "tog-ccmeonemails": "Padarhi man ako kang manga ''e-mail'' nga ginpadara ko sa iban nga manga ''user''",
+ "underline-always": "Pirme gid",
+ "underline-never": "Indi gid",
+ "underline-default": "Onay nga browser",
+ "sunday": "Domingo",
+ "monday": "Lones",
+ "tuesday": "Martes",
+ "wednesday": "Miyerkoles",
+ "thursday": "Webes",
+ "friday": "Biyernes",
+ "saturday": "Sabado",
+ "sun": "Dom",
+ "mon": "Lon",
+ "tue": "Mar",
+ "wed": "Miy",
+ "thu": "Web",
+ "fri": "Biy",
+ "sat": "Sab",
+ "january": "Enero",
+ "february": "Pebrero",
+ "march": "Marso",
+ "april": "Abril",
+ "may_long": "Mayo",
+ "june": "Honyo",
+ "july": "Holyo",
+ "august": "Agosto",
+ "september": "Setyembre",
+ "october": "Oktobre",
+ "november": "Nobyembre",
+ "december": "Disyembre",
+ "january-gen": "Enero",
+ "february-gen": "Pebrero",
+ "march-gen": "Marso",
+ "april-gen": "Abril",
+ "may-gen": "Mayo",
+ "june-gen": "Honyo",
+ "july-gen": "Holyo",
+ "august-gen": "Agosto",
+ "september-gen": "Setyembre",
+ "october-gen": "Oktobre",
+ "november-gen": "Nobyembre",
+ "december-gen": "Disyembre",
+ "jan": "Ene",
+ "feb": "Peb",
+ "apr": "Abr",
+ "may": "May",
+ "jun": "Hon",
+ "jul": "Hol",
+ "aug": "Ago",
+ "sep": "Set",
+ "oct": "Okt",
+ "nov": "Nob",
+ "dec": "Dis",
+ "category_header": "Manga artikolo sa \"$1\"",
+ "subcategories": "Manga ''subcategory''",
+ "category-media-header": "Manga midya sa \"$1\"",
+ "category-empty": "''Wara it manga artikolo okon medya ang katergorya nga dya.''",
+ "about": "Angut sa Iwan",
+ "article": "Pahina kasudlan",
+ "newwindow": "(gabokas sa bag-o nga ''window'')",
+ "cancel": "Kanselar",
+ "moredotdotdot": "Raku pa...",
+ "mypage": "Akun nga pahina",
+ "anontalk": "Istoryahun ang dya nga ''IP''",
+ "qbfind": "Sagap",
+ "qbbrowse": "Bilid",
+ "qbedit": "Iislan",
+ "qbpageoptions": "Dya nga Pahina",
+ "faq": "FAQ",
+ "faqpage": "Project:FAQ",
+ "errorpagetitle": "Sayup",
+ "returnto": "Balik sa $1.",
+ "help": "Bolig",
+ "search": "Sagap",
+ "searchbutton": "Sagap",
+ "go": "Agto",
+ "searcharticle": "Agto",
+ "history": "Kasaysayan kang Pahina",
+ "history_short": "Kasaysayan",
+ "updatedmarker": "ginpabag-o halin kang orihi ko nga pagbisita",
+ "printableversion": "Bersyon nga sarang ma-''print''",
+ "permalink": "Permanyente nga ''link''",
+ "print": "Printa",
+ "edit": "Iislan",
+ "editthispage": "Islan ang dya nga pahina",
+ "delete": "Para",
+ "deletethispage": "Paraun ang dya nga Pahina",
+ "protect": "Amlig",
+ "protect_change": "iislan",
+ "protectthispage": "Amligan ang dya nga pahina",
+ "unprotect": "huksun ang proteksyon",
+ "unprotectthispage": "Huksun ang proteksyon sa dya nga pahina",
+ "newpage": "Bag-o nga pahina",
+ "talkpage": "Sogdanunun ang dya nga pahina",
+ "talkpagelinktext": "Wakal",
+ "specialpage": "Espesyal nga Pahina",
+ "articlepage": "Turukun ang pahina kasudlan",
+ "talk": "Sugilanon",
+ "views": "Manga paglantaw",
+ "toolbox": "Pangbolig",
+ "otherlanguages": "Sa iban nga lingwahe",
+ "redirectpagesub": "Idaho ang pahina",
+ "protectedpage": "Protektado nga pahina",
+ "jumpto": "Lompat sa:",
+ "jumptosearch": "sagap",
+ "aboutsite": "Tunggəd sa {{SITENAME}}",
+ "aboutpage": "Project:Tunggəd",
+ "disclaimers": "Mga Panginwala",
+ "disclaimerpage": "Project:Panginwala nga Pangtanan",
+ "edithelp": "Panoytoy sa Pag-ilis",
+ "mainpage": "Pono nga Pahina",
+ "mainpage-description": "Pono nga Pahina",
+ "privacy": "Surundun sa Privacy",
+ "privacypage": "Project:Surundun sa Privacy",
+ "badaccess": "Sayup sa lisensya",
+ "badaccess-group0": "Indi kaw ginpasogtan nga himoon ang lihuk nga ginalaum mo.",
+ "badaccess-groups": "Ang imo ginpangayo nga lihuk ay para lang sa mga users sa {{PLURAL:$2|nga grupo|sara sa mga grupo}}: $1.",
+ "versionrequired": "Version $1 kang MediaWiki kinahanglan",
+ "versionrequiredtext": "Version $1 of MediaWiki kinahanglan para magamit ang page nga ja.\nLantawa sa [[Special:Version|version kang page]].",
+ "ok": "OK dun",
+ "youhavenewmessages": "May rudyan kaw nga $1 ($2).",
+ "youhavenewmessagesmulti": "May rudyan kaw nga manga bag-o nga mensahe sa $1",
+ "editsection": "iislan",
+ "editold": "iislan",
+ "toc": "Manga Sulud",
+ "showtoc": "ipakita",
+ "hidetoc": "itago",
+ "nstab-main": "Pahina",
+ "nstab-media": "Pahina kang Midya",
+ "nstab-special": "Espesyal nga pahina",
+ "nstab-project": "Pahina kang Proyekto",
+ "nstab-image": "Inayap",
+ "nstab-mediawiki": "Mensahe",
+ "nstab-template": "''Template''",
+ "nstab-help": "Pahina kang Panoytoy",
+ "nstab-category": "Kategorya",
+ "error": "Sayup",
+ "databaseerror": "Sayup sa database",
+ "readonly": "Napintalan ang ''database''",
+ "internalerror": "Sayup internal",
+ "internalerror_info": "Sayup internal: $1",
+ "filecopyerror": "Indi makopya ang ''file'' halin sa \"$1\" paagto sa \"$2\".",
+ "filerenameerror": "Indi maislan ang ngaran kang ''file'' halin sa \"$1\" paagto sa \"$2\".",
+ "filedeleteerror": "Indi mapara ang ''file'' nga \"$1\".",
+ "directorycreateerror": "Indi mahimo ang ''directory'' nga \"$1\".",
+ "filenotfound": "Indi makita ang ''file'' nga \"$1\".",
+ "viewsource": "Turukun ang ginhalinan",
+ "remembermypassword": "Tandaan ang akun nga ''log-in'' sa dya nga ''browser'' (kang maximum nga $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}})",
+ "nologinlink": "Himo ka sangka ''account''",
+ "createaccount": "Himo ka ''account''",
+ "preview": "Bilid",
+ "skin-preview": "Bilid",
+ "searchresultshead": "Sagap",
+ "youremail": "E-mail:",
+ "email": "E-mail",
+ "hide": "Itago",
+ "show": "Ipakita",
+ "upload-file-error": "Sayup internal",
+ "imgfile": "inayap",
+ "file-anchor-link": "Inayap",
+ "filedelete-submit": "Para",
+ "brokenredirects-edit": "Iislan",
+ "brokenredirects-delete": "para",
+ "withoutinterwiki-submit": "Ipakita",
+ "categories": "Manga Kategorya",
+ "linksearch-ok": "Sagap",
+ "listusers-submit": "Ipakita",
+ "emailmessage": "Mensahe",
+ "delete-legend": "Para",
+ "restriction-edit": "Iislan",
+ "undelete-search-submit": "Sagap",
+ "sp-contributions-talk": "wakal",
+ "sp-contributions-submit": "Sagap",
+ "whatlinkshere-page": "Pahina:",
+ "isredirect": "idaho ang pahina",
+ "ipblocklist-submit": "Sagap",
+ "tooltip-ca-protect": "Amligan ang dya nga pahina",
+ "tooltip-ca-delete": "Paraun ang dya nga Pahina",
+ "tooltip-p-logo": "Pono nga Pahina",
+ "tooltip-n-mainpage": "Agtoni ang Main Page",
+ "tooltip-n-portal": "Tunggəd sa project, ano pwede mo mahimo, diin mo makita ang mga bagay bagay",
+ "tooltip-n-currentevents": "Pangita-a ang mga ginhalinan sa mga nagakaratabo sa tulad",
+ "tooltip-n-recentchanges": "Listahan kang mga bag-o lang na-ilis sa wiki.",
+ "tooltip-n-randompage": "Magkarga kang random nga page",
+ "tooltip-n-help": "Lugar kun diin mo masagap.",
+ "tooltip-t-whatlinkshere": "Listahan kang tanan nga mga wiki pages nga naga-link paagto ja",
+ "tooltip-t-recentchangeslinked": "Mga bag-o lng ilis nga mga page nga naka-link halin sa page nga ja",
+ "tooltip-feed-rss": "RSS feed para sa page nga ja",
+ "tooltip-feed-atom": "Atom feed para sa page nga ja",
+ "tooltip-t-contributions": "Lantawa ang listahan kang mga ginbulig kang user nga ja",
+ "tooltip-t-emailuser": "Padarhi kang e-mail ang user nga ja",
+ "ilsubmit": "Sagap",
+ "confirm_purge_button": "OK dun",
+ "imgmultigo": "Agto!",
+ "table_pager_limit_submit": "Agto",
+ "version-specialpages": "Manga espesyal nga pahina",
+ "fileduplicatesearch-submit": "Sagap",
+ "specialpages": "Manga espesyal nga pahina",
+ "expand_templates_ok": "OK dun",
+ "expand_templates_preview": "Bilid"
}
diff --git a/languages/i18n/ks-arab.json b/languages/i18n/ks-arab.json
index 51c758dc..3dcc18b5 100644
--- a/languages/i18n/ks-arab.json
+++ b/languages/i18n/ks-arab.json
@@ -1,46 +1,44 @@
{
- "@metadata": {
- "authors": [
- "Rachitrali",
- "Rk_kaul (on ks.wikipedia.org)",
- "VibhasKS"
- ]
- },
- "monday": "ژِنٛدٕروار",
- "january": "جنوری",
- "february": "فرؤری",
- "march": "مارچ",
- "april": "اپریٖل",
- "may_long": "مٔی",
- "june": "جوٗن",
- "july": "جولائی",
- "august": "اَگست",
- "september": "سیٚپٹَمبَر",
- "october": "اکتوبر",
- "november": "نَوَمبَر",
- "december": "ڈیٚسَمبَر",
- "jan": "جنوری",
- "about": "مُتعلِق",
- "vector-view-edit": "تَرتیٖب دِیُن",
- "vector-view-view": "پَرُن",
- "help": "مدد",
- "search": "ژھارُن",
- "searchbutton": "ژھارُن",
- "history_short": "توٲریٖخ",
- "talkpagelinktext": "بَحَژ",
- "talk": "بَحَژ",
- "toolbox": "اَوزار",
- "otherlanguages": "باقیَن زَبانَن منٛز",
- "jumptosearch": "ژھارُن",
- "aboutsite": "مُتعلِق {{SITENAME}}",
- "mainpage": "گَرٕ",
- "mainpage-description": "اہم صَفہٕ",
- "nstab-main": "صَفہٕ",
- "nstab-category": "زٲژ",
- "summary": "خُلاسہٕ:",
- "recentchanges": "نَوِ تبدیلی",
- "filedesc": "خُلاسہٕ",
- "sp-contributions-talk": "بَحَژ",
- "sp-contributions-submit": "ژھارُن",
- "allmessagesname": "ناو"
+ "@metadata": {
+ "authors": [
+ "Rachitrali",
+ "Rk_kaul (on ks.wikipedia.org)",
+ "VibhasKS"
+ ]
+ },
+ "monday": "ژِنٛدٕروار",
+ "january": "جنوری",
+ "february": "فرؤری",
+ "march": "مارچ",
+ "april": "اپریٖل",
+ "may_long": "مٔی",
+ "june": "جوٗن",
+ "july": "جولائی",
+ "august": "اَگست",
+ "september": "سیٚپٹَمبَر",
+ "october": "اکتوبر",
+ "november": "نَوَمبَر",
+ "december": "ڈیٚسَمبَر",
+ "jan": "جنوری",
+ "about": "مُتعلِق",
+ "help": "مدد",
+ "search": "ژھارُن",
+ "searchbutton": "ژھارُن",
+ "history_short": "توٲریٖخ",
+ "talkpagelinktext": "بَحَژ",
+ "talk": "بَحَژ",
+ "toolbox": "اَوزار",
+ "otherlanguages": "باقیَن زَبانَن منٛز",
+ "jumptosearch": "ژھارُن",
+ "aboutsite": "مُتعلِق {{SITENAME}}",
+ "mainpage": "گَرٕ",
+ "mainpage-description": "اہم صَفہٕ",
+ "nstab-main": "صَفہٕ",
+ "nstab-category": "زٲژ",
+ "summary": "خُلاسہٕ:",
+ "recentchanges": "نَوِ تبدیلی",
+ "filedesc": "خُلاسہٕ",
+ "sp-contributions-talk": "بَحَژ",
+ "sp-contributions-submit": "ژھارُن",
+ "allmessagesname": "ناو"
}
diff --git a/languages/i18n/ksh.json b/languages/i18n/ksh.json
index da11257b..2a37b9ca 100644
--- a/languages/i18n/ksh.json
+++ b/languages/i18n/ksh.json
@@ -24,6 +24,7 @@
"tog-watchdefault": "Donn Sigge beim Ändere automattesch för ming Oppaßlėß vörschlonn",
"tog-watchmoves": "Donn Sigge beim Ömnänne automattesch för ming Oppaßlėß vörschlonn",
"tog-watchdeletion": "Donn Sigge beim Fottschmiiße automattesch för ming Oppaßlėß vörschlonn",
+ "tog-watchrollback": "Donn Sigge beim schtantepee retuur Nämme vun Änderonge automattesch för ming Oppaßlėß vörschlonn",
"tog-minordefault": "Dun all ming Änderunge jedes Mol als klein Mini-Änderunge vürschlage",
"tog-previewontop": "Zeisch de Vör-Aanseesch övver däm Fäld för der Täx enzejävve aan.",
"tog-previewonfirst": "Zeich de Vör-Aansich tirek för et eetste Mol beim Bearbeide aan",
@@ -31,13 +32,13 @@
"tog-enotifusertalkpages": "Scheck mer en <i lang=\"en\">e-mail</i>, wann ming Klaaf_Sigg jeändert weed",
"tog-enotifminoredits": "Scheck mer och en <i lang=\"en\">e-mail</i> för de klein Mini-Änderonge",
"tog-enotifrevealaddr": "Zeich dä Andere ming E-Mail Adress aan, en de Benohrichtijunge per E-Mail",
- "tog-shownumberswatching": "Zeich de Aanzahl Metmaacher, die op die Sigg am oppasse sin",
+ "tog-shownumberswatching": "Zeisch de Aanzahl Metmaacher, di op di Sigg am oppaßße sin",
"tog-oldsig": "Esu&nbsp;süht&nbsp;Ding „Ongerschreff“&nbsp;us:",
"tog-fancysig": "Donn de „Ungerschreff“ als Wiki-Tex behandelle (ohne enne automattesche Lengk)",
- "tog-uselivepreview": "Vör-Aansesch övver AJAX zeije (noch zem Ußprobeere)",
+ "tog-uselivepreview": "Vör-Aansesch övver AJAX zeije",
"tog-forceeditsummary": "Froch noh, wann en däm Feld „Koot zosammejefass, Quell“ beim Avspeichere nix dren steiht",
- "tog-watchlisthideown": "Dun ming eije Änderunge <strong>nit</strong> en minger Oppassliss aanzeije",
- "tog-watchlisthidebots": "Dun jedes Mol dä Bots ehr Änderunge <strong>nit</strong> en minger Oppassliss zeije",
+ "tog-watchlisthideown": "Don ming eije Änderonge <strong>nit</strong> en minger Oppaßleß aanzeije",
+ "tog-watchlisthidebots": "Dun jedes Mohl dä Bots ehr Änderonge <strong>nit</strong> en minger Oppaßleß zeije",
"tog-watchlisthideminor": "Dun jedes Mol de klein Mini-Änderunge <strong>nit</strong> en minger Oppassliss zeije",
"tog-watchlisthideliu": "Enjeloggte Metmaacher ier Änderunge jedesmol <strong>nit</strong> en minger Oppassliss aanzeije",
"tog-watchlisthideanons": "Namelose Metmaacher ier Änderunge jedesmol <strong>nit</strong> en minger Oppassliss aanzeije",
@@ -124,7 +125,7 @@
"category-media-header": "Dateije en dä Saachjropp „$1“",
"category-empty": "''En dä Saachjrupp heh sin kein Sigge un kein Dateie.''",
"hidden-categories": "Verstoche Saachjrupp{{PLURAL:$1||e|e}}",
- "hidden-category-category": "Verstoche Saachjruppe",
+ "hidden-category-category": "Verstoche Saachjroppe",
"category-subcat-count": "En dä Saachrupp heh {{PLURAL:$2|es ein Ungerjrupp dren:|sin $2 Ungerjruppe dren, {{PLURAL:$1|un dovun weed heh nur ein|un dovun weede $1 heh|ävver dovun weed heh keine}} aanjezeich:|sinn_er kein Ungerjruppe dren.}}",
"category-subcat-count-limited": "En dä Saachrupp heh {{PLURAL:$1|es ein Ungerjrupp dren:|sin $1 Ungerjruppe dren:|sin kein Ungerjruppe dren.}}",
"category-article-count": "En dä Saachjrupp heh {{PLURAL:$2|es ein Sigg dren:|sin $2 Sigge dren, {{PLURAL:$1|un dovun weed heh nur ein|un dovun weede $1 heh|ävver dovun weed heh keine}} aanjezeich:|sin kein Sigge dren.}}",
@@ -132,9 +133,10 @@
"category-file-count": "En dä Saachrupp heh {{PLURAL:$2|es ein Datei dren:|sin $2 Dateie dren, {{PLURAL:$1|un dovun weed heh nur ein|un dovun weede $1 heh|ävver dovun weed heh kein}} aanjezeich:|es kein Datei dren.}}",
"category-file-count-limited": "En dä Saachrupp heh {{PLURAL:$1|es ein Datei dren:|sin $1 Dateie dren:|es kein Datei dren.}}",
"listingcontinuesabbrev": "… (wigger)",
- "index-category": "Sigge, di de Söhkmaschine opnämme sulle",
- "noindex-category": "Sigge, di de Söhkmaschine nit opnämme sulle",
+ "index-category": "Sigge, di de Söhkmaschihne opnämme sulle",
+ "noindex-category": "Sigge, di de Söhkmaschihne nit opnämme sulle",
"broken-file-category": "Sigge met kappodde Lengks op Datteije",
+ "categoryviewer-pagedlinks": "$1 ↔ $2",
"about": "Övver",
"article": "Atikkel",
"newwindow": "(Mäht e neu Finster op, wann Dinge Brauser dat kann)",
@@ -174,7 +176,9 @@
"view": "Beloore",
"view-foreign": "Op $1 beloohre",
"edit": "Ändere",
+ "edit-local": "Aanmärkonge heh em Wikki beärbeide",
"create": "Aanlääje",
+ "create-local": "Aanmärkonge heh em Wikki derbei donn",
"editthispage": "De Sigg ändere",
"create-this-page": "Neu aanläje",
"delete": "Fottschmieße",
@@ -204,9 +208,10 @@
"viewhelppage": "De Hölpsigg aanluure",
"categorypage": "De Saachjruppesigg aanluure",
"viewtalkpage": "Klaaf aanluure",
- "otherlanguages": "En ander Schprooche",
+ "otherlanguages": "En ander Schprohche",
"redirectedfrom": "(Ömjeleit vun $1)",
"redirectpagesub": "Ömleidongssigg",
+ "redirectto": "Ömleide op:",
"lastmodifiedat": "Heh di Sigg es et letz aam $1 öm $2 Uhr jeändert woode.",
"viewcount": "De Sigg es bes jetz {{PLURAL:$1|eimol|$1 Mol|keijmol}} avjerofe woode.",
"protectedpage": "Jeschötzte Sigg",
@@ -218,6 +223,8 @@
"pool-timeout": "Zick zem Waade affjeloufe, diweil mer op en Sperr am Waade wohre",
"pool-queuefull": "De Schlang zom Waade op ene freie Prozäß zom Beärbeide es vull",
"pool-errorunknown": "Dä Fähler kenne mer nit",
+ "pool-servererror": "Dä <i lang=\"en\" xml:lang=\"en\">pool counter</i> Deens schteiht nit zor Verföhjong ($1).",
+ "poolcounter-usage-error": "Fähler beim Aanwände: $1",
"aboutsite": "Övver {{GRAMMAR:Akkusativ|{{ucfirst:{{SITENAME}}}}}}",
"aboutpage": "Project:Övver {{GRAMMAR:Akkusativ|{{ucfirst:{{SITENAME}}}}}}",
"copyright": "Dä Enhald steiht unger dä Lezänz $1, ußer wann ußdröklesch jäd anders jesaad es.",
@@ -227,6 +234,7 @@
"disclaimers": "Henwies",
"disclaimerpage": "Project:Impressum",
"edithelp": "Hölp för et Bearbeide",
+ "helppage-top-gethelp": "Hölp",
"mainpage": "Haupsigg",
"mainpage-description": "Haupsigg",
"policy-url": "Project:Rejelle",
@@ -241,6 +249,7 @@
"versionrequiredtext": "De Version $1 vun MediaWiki Soffwär es nüdich, öm die Sigg heh bruche ze künne. Süch op [[Special:Version|de Versionssigg]], wat mer heh för ene Soffwärstand han.",
"ok": "Jot!",
"pagetitle": "$1 — {{SITENAME}}",
+ "backlinksubtitle": "←&nbsp;$1",
"retrievedfrom": "Di Sigg heh stamp vun „$1“.",
"youhavenewmessages": "Do häs $1 ($2).",
"youhavenewmessagesfromusers": "Do häs $1 vun {{PLURAL:$3|enem|$3|keinem}} andere Metmaacher ($2)",
@@ -259,6 +268,9 @@
"hidetoc": "ußblände",
"collapsible-collapse": "Zohklappe",
"collapsible-expand": "Opklappe",
+ "confirmable-confirm": "{{GENDER:$1|Verhaftesch}}?",
+ "confirmable-yes": "Joh",
+ "confirmable-no": "Nää",
"thisisdeleted": "$1 - aanluure oder widder zeröckholle?",
"viewdeleted": "$1 aanzeije?",
"restorelink": "{{PLURAL:$1|eijn fottjeschmesse Änderung|$1 fottjeschmesse Änderunge|keij fottjeschmesse Änderunge}}",
@@ -305,10 +317,13 @@
"readonly_lag": "De Daatebank es för en koote Zigg automattesch jesperrt, för de Daate vun de ongerjeodente Rääschner mem Houprääschner avzejliiche.",
"internalerror": "De Wiki-Soffwär hät ene Fähler jefunge",
"internalerror_info": "Enne ennere Fäähler en de ẞoffwäer es opjetrodde: $1",
+ "internalerror-fatal-exception": "Ene schlemme Fähler vun dä Zoot „$1“ es opjetrodde.",
"filecopyerror": "Kunnt de Datei „$1“ nit noh „$2“ kopeere.",
"filerenameerror": "Kunnt de Datei „$1“ nit op „$2“ ömdäufe.",
"filedeleteerror": "Kunnt de Datei „$1“ nit fottschmieße.",
"directorycreateerror": "Dat Verzeichnis „$1“ kunnte mer nit aanläje.",
+ "directoryreadonlyerror": "En dat Verzeischnes „$1“ darf mer nid eren schriive.",
+ "directorynotreadableerror": "En däm Verzeischnes „$1“ kam_mer nix lässe.",
"filenotfound": "Kunnt de Datei „$1“ nit finge.",
"unexpected": "Domet hät keiner jerechnet: „$1“=„$2“",
"formerror": "Dat es donevve jejange: Wor nix, met däm Fomular.",
@@ -330,7 +345,8 @@
"viewsourcetext": "Heh es dä Sigg ier Wikitex zom Belooere un Koppeere:",
"viewyourtext": "Do kanns Ding Änderonge aan heh dä Sigg beloore un kopeere:",
"protectedinterface": "Op dä Sigg heh steiht Tex usem Interface vun de Wiki-Soffwär. Dröm es die jäje Änderunge jeschötz, domet keine Mess domet aanjestallt weed.",
- "editinginterface": "<strong>Opjepass:</strong>\nOp dä Sigg heh steiht Tex uß em Ingerfäiß vun de Wiki-Soffwär. Dröm es\ndie jäje Änderunge jeschötz, domet keine Mess domet aanjestallt weed.\nNor de Wiki-Köbesse künne se ändere. Denk dran, heh Ändere deit et\nUssinn un de Wööt ändere met dänne et Wiki op de Metmaacher un de\nBesöker drop aankütt!\n\nWann De die en Ding Shprooch övversäze wellß, do jangk op\n<code lang=\"en\">[//translatewiki.net/wiki/Main_Page?setlang=ksh translatewiki.net]</code>,\nwoh et MediaWiki Ingerfäiß en alle Shprooche översaz weedt.\n\nWann De weße wells, wat dä Täx heh bedügg, do häß De en Schangß, dat De op\n<code lang=\"en\">//www.mediawiki.org/wiki/Manual:Interface/{{BASEPAGENAMEE}}?setlang=ksh</code>\njet doh drövver fenge kanns, udder op\n<code lang=\"en\">//translatewiki.net/wiki/MediaWiki:{{BASEPAGENAMEE}}/qqq?setlang=ksh</code>",
+ "editinginterface": "<strong>Opjepass:</strong>\nOp dä Sigg heh schteiht Täx uß de Beehnbovverfläsch vum Wikki.\nDenk dran, heh Ändere deit et\nUssinn un de Wöht ändere, met dänne et Wiki op de Metmaacher un de\nBesöhker aankütt!",
+ "translateinterface": "Övversäzonge för <stron>alle</strong> Wikis jonn blohß op [//translatewiki.net/ translatewiki.net], woh mer MedijaWiki övversaz weed.",
"cascadeprotected": "Die Sigg es jeschöz, un mer kann se nit ändere. Se es en en Schotz-Kaskad enjebonge, zosamme met dä {{PLURAL:$1|Sigg|Sigge}}:\n$2",
"namespaceprotected": "Do darfs Sigge em Appachtemang „$1“ nit ändere.",
"customcssprotected": "Do darfs di CSS-Sigg heh nit ändere. Se jehööt enem andere Metmacher un es e Stöck funn dämm sing eije Enstellunge.",
@@ -345,7 +361,7 @@
"invalidtitle-knownnamespace": "„$3“ es ene onjöltijje Tittel för em Appachtemang „$2“",
"invalidtitle-unknownnamespace": "„$2“ es ene onjöltijje Tittel för e Appachtemang met dä verkehte Nommer $1.",
"exception-nologin": "Nit enjelogg",
- "exception-nologin-text": "Heh di Sigg udder heh dä Opdraach jeiht blooß, wann De heh [[Special:Userlogin|em Wiki enjelogg]] bes.",
+ "exception-nologin-text": "Heh di Sigg udder heh dä Opdraach jeiht blooß, wann De heh enjelogg bes.",
"exception-nologin-text-manual": "De mööds ald $1, öm heh di Sigg udder di Axjuhn zohjriife ze dörve.",
"virus-badscanner": "Fääler en de Enstellunge: Dat Projramm ''$1'' fö noh Kompjuterwiere ze söke, dat kenne mer nit.",
"virus-scanfailed": "Dat Söhke eß donevve jejange, dä Kood för dä Fähler es „$1“.",
@@ -450,7 +466,8 @@
"createaccount-text": "Einer hät Desch als Medmaacher „$2“ {{GRAMMAR:em|{{SITENAME}}}} aanjemelldt.\nDat es e Wiki, un De fengks et onger däm URL:\n $4\nDat Passwoot „$3“ hät sesch dat Wiki för Disch usjewörfelt.\nDon jlisch enlogge un donn et ändere.\n\nWann Dat all böömesch Dörver för Desch sin, da fojeß heh di\ne-mail eijfach. Wann De en däm Wikki nit metmaache wells, och.",
"login-throttled": "Do häs zo öff, zo vill, un zo lang en de letzde Zick probeet, ennzelogge.\nWaad e Wielsche ävver $1, ih dat De et wider versöhks.",
"login-abort-generic": "Dat Enlogge hät nit jeflup.",
- "loginlanguagelabel": "Sproch: $1",
+ "login-migrated-generic": "Dinge Zohjang zom Wikki es verändert woode un Dinge Metmaacher_Nahme jidd_et heh nit mieh.",
+ "loginlanguagelabel": "Schprohch: $1",
"suspicious-userlogout": "Do bes '''nit''' ußjelogg.\nEt süht us, wi wann ene kappodde Brauser udder <i lang=\"en\">proxy</i>ẞööver met Zwescheschpeischer noh däm Ußlogge jefrooch hät.",
"createacct-another-realname-tip": "Dä reschteje Nahme kam_mer fott lohße.\n\nWann dä aanjejovve es, weet_e jebruch, öm öffentlesch de Schriiver för Beidrääsch ze nänne.",
"pt-login": "Enlogge",
@@ -501,7 +518,6 @@
"passwordreset-emailsent-capture": "En <i lang=\"en\">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh es verscheck woode. Heh dronger kanns De se lässe.",
"passwordreset-emailerror-capture": "En <i lang=\"en\">e-mail</i> met Aanjaabe zom neue Paßwoot för der Zohjang heh sullt verscheck wääde, ävver dat Verschecke aan {{GENDER:$2|dä|dat|dä Metmaacher|de|dat}} $2 hät nit jeflup: $1",
"changeemail": "Donn Ding Address för de <i lang=\"en\">e-mail</i> ändere",
- "changeemail-header": "Donn en Adräß för de <i lang=\"en\">e-mail</i> ändere",
"changeemail-text": "Föll dat Fommulaa uß, öm Ding Adräß för de <i lang=\"en\">e-mail</i> ze ändere.\nDo moß Ding Paßwoot enjävve, öm Ding Änderong ze bschtäätejje.",
"changeemail-no-info": "Do mööts ald enjelogg sin, öm tiräk op di Sigg jonn ze dörve",
"changeemail-oldemail": "Ding Address för de <i lang=\"en\">e-mail</i> es jäz:",
@@ -509,7 +525,6 @@
"changeemail-none": "(kein)",
"changeemail-password": "Ding Passwoot {{GRAMMAR:en 3|{{ucfirst:{{SITENAME}}}}}}:",
"changeemail-submit": "Lohß jonn!",
- "changeemail-cancel": "Ophüre",
"changeemail-throttled": "Do häs zoh öff versöhk, enzelogge. Waat $1 Ih dat De es widder probeers.",
"resettokens": "Neue Schlößel maache",
"resettokens-text": "Do kanns neue Schlößel maache lohße för op beschtemmpte päsöhnlesche Daate uohjriife ze künne, di met Dingem Zohjang heh ze donn han.\n\nDonn dat op jeede Fall, wann se enem Andere bikannt jewoode sin, udder wann Dinge Zohjang jeknack woode es.",
@@ -538,21 +553,24 @@
"media_tip": "Ene Link op en Tondatei, e Filmche, oder esu jet",
"sig_tip": "Dinge Naame, med de Uhrzigk unn_em Dattum",
"hr_tip": "En Querlinnich",
- "summary": "Koot Zosammejefass, Quell:",
+ "summary": "Koot zosammejefaß, Quäll:",
"subject": "Üvverschreff - wodröm jeiht et?",
"minoredit": "Dat es en klein Änderung (mini)",
- "watchthis": "Op die Sigg heh oppasse",
+ "watchthis": "Op di Sigg heh oppaßße",
"savearticle": "De Sigg Avspeichere",
"preview": "Vör-Ansich",
"showpreview": "Vör-Aansich zeije",
"showdiff": "De Ungerscheide zeije",
- "anoneditwarning": "'''Opjepaß:''' Weil De nit enjelogg bes, weed Ding <i lang=\"en\">IP</i>-Adräß en dä Sigg ier Leß met de Versione faßjehallde wääde.",
+ "blankarticle": "<strong>Opjepaß:</strong> Di Sigg, di De jrahd aanlähje wells, es läddesch. Wann De jäz norr_ens op „{{int:savearticle}}“ jehß, weed di Sigg och ohne jät dren aanjelaat.",
+ "anoneditwarning": "'''Opjepaß:''' Weil De nit enjelogg bes, weed Ding <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß en heh dä Sigg ier Leß met de Väsiohne faßjehallde wääde.\nWann De [$1 enlogge deihs] udder [$2 desch aanmällds], dann wääde Ding Änderonge met dingem Nahme als Metmaacher opjevöhrt.",
"anonpreviewwarning": "''Weil De nit enjlogg bes, weed Ding <code lang=\"en\">IP</code>-Addräß zoamme met dä neue Version faßjehallde, wann de heh di Sigg avspeichere deihß.''",
"missingsummary": "<strong>Opjepass:</strong> Do häs nix bei „{{int:summary}}“ enjejovve. Dun noch ens op „{{int:savearticle}}“ klicke, öm Ding Änderunge ohne de Zosammefassung ze Speichere. Ävver besser jiss De do jetz tirek ens jet en!",
+ "selfredirect": "<strong>Opjepaß:</strong> Do wells heh di Sigg op sesch sällver ömleide lohße.\nDat hät zwa keine rääschte Senn, ävver wann De jäz norr_enz op „{{int:savearticle}}“ klecks, weed dat esu jemaat.",
"missingcommenttext": "Jevv en „Koot Zosammejefass, Quell“ aan!",
"missingcommentheader": "'''Opjepass:''' Do häs kein Üvverschreff för Dinge Beidrach enjejovve. Wann De noch ens op „{{int:savearticle}}“ dröcks, weed Dinge Beidrach der ohne avjespeichert.",
"summary-preview": "Vör-Aansich vun „Koot Zosammejefass, Quell“:",
"subject-preview": "Vör-Aansich vun de Üvverschreff:",
+ "previewerrortext": "Ene Fähler es beim Versohch opjetrodde, de Sigg met de Änderonge aanzezeije.",
"blockedtitle": "Dä Metmaacher es jesperrt",
"blockedtext": "'''Dinge Metmaacher-Name oder IP Adress es vun „$1“ jesperrt woode.'''\n\nAls Jrund es enjedrage: „''$2''“\n\nDo kanns heh em Wiki immer noch lässe. Do sühß ävver di Sigg heh, wann De op rude Links klicks, neu Sigge aanlääje, udder Sigge ändere wells, denn doför bes De jäz jeschperrt.\n\nDo kanns met $1 oder enem andere [[{{MediaWiki:Grouppage-sysop}}|Wiki-Köbes]] övver dat Schpärre schwaade, wann De wells.\nDo kanns ävver nor dann „''E-Mail aan dä Metmaacher''“ aanwende, wann De ald en E-Mail Adress en Dinge [[Special:Preferences|Enstellunge]] enjedrage un freijejovve häs un wann et E-mail schecke nit metjesperrt es.\n\nDun en Ding Aanfroge nenne:\n* Dä Wiki-Köbeß, dä jesperrt hät: $1\n* Der Jrond för et Sperre: $2\n* Da wood jesperrt: $8\n* De Sperr soll loufe bes: $6\n* De Nommer vun dä Sperr: #$5\n* Ding IP-Adress is jetz: $3\n* Di Sperr es wäje odde jäje: $7\n\nDo kanns och noch en et <span class=\"plainlinks\">[{{fullurl:Special:IPBlockList|&action=search&limit=&ip=%23}}$5 Logboch met de Sperre]</span> loore.",
"autoblockedtext": "'''Ding IP Adress es automattesch jesperrt woode.'''\n<br />\n'''Se wor vun enem Metmaacher jebruch woode, dä vun „$1“ jesperrt woode es.'''\n<br />\nAls Jrund es enjedrage: „''$2''“\n\nDo kanns heh em Wiki immer noch lesse. Do sühß ävver di Sigg heh, wann De op rude Links klicks, neu Sigge aanlääje, odder Sigge ändere wells, denn doför bes De jetz jesperrt.\n\nDo kanns met $1 oder enem andere [[{{MediaWiki:Grouppage-sysop}}|Wiki-Köbes]] övver dat Schpärre schwaade, wann De wells.\nDo kanns ävver nor dann „''e-mail aan dä Metmaacher''“ aanwende, wann De ald en e-mail Adress en Dinge [[Special:Preferences|Enstellunge]] enjedrage un freijejovve häs un wann et e-mail schecke nit metjeschperrt es.\n\nDun en Dinge Aanfrore nänne:\n* Dä Wiki-Köbeß, dä jesperrt hät: $1\n* Der Jrond för et Sperre: $2\n* Da wood jesperrt: $8\n* De Sperr soll loufe bes: $6\n* De Nommer vun dä Sperr: #$5\n* Ding IP-Adress is jetz: $3\n* Di Sperr es wäje odde jäje: $7\n\nDo kanns och noch en et <span class=\"plainlinks\">[{{fullurl:Special:IPBlockList|&action=search&limit=&ip=%23}}$5 {{int:ipblocklist}}]</span> loore.",
@@ -585,7 +603,7 @@
"userinvalidcssjstitle": "<strong>Opjepass:</strong> Et jitt kein Ussinn met däm Name: „<strong>$1</strong>“ -\ndenk dran, dat ene Metmaacher eije Dateie för et Ussinn han kann, un dat die met kleine Buchstave\naanfange dun, alsu etwa: {{ns:user}}:Name/vector.css, un {{ns:user}}:Name/vector.js heiße.",
"updated": "(Aanjepack)",
"note": "'''Opjepass:'''",
- "previewnote": "'''Heh kütt nor de Vör-Aansich — Ding Änderunge sin noch nit jesechert!'''",
+ "previewnote": "<strong>Heh kütt blohß en Aanseesch vöraff — Ding Änderonge sin noch nidd em Wikki faßjehallde!</strong>",
"continue-editing": "Jangk tiräk nohm Plaz zom Schrieve",
"previewconflict": "Heh die Vör-Aansich zeich dä Enhald vum bovvere Texfeld.\nEsu wööd dä Atikkel ussinn, wann De n jetz avspeichere däts.",
"session_fail_preview": "'''Schad: Ding Änderunge kunnte mer su nix met aanfange.\nVersök et jrad noch ens.\nWann dat widder nit flupp, dann versök et ens met [[Special:UserLogout|Uslogge]] un widder Enlogge.'''",
@@ -624,7 +642,7 @@
"sectioneditnotsupported-text": "Afschnedde Ändere is en heh dä Sigg nit zohjelohße.",
"permissionserrors": "Dat jeit nit, dat darfs De nit.",
"permissionserrorstext": "Do häs nit dat Rääch, dat ze maache, {{PLURAL:$1|dä Jrund es:|de Jründe sin:|oohne Jrund.}}",
- "permissionserrorstext-withaction": "Do häs nit dat Rääch $2, {{PLURAL:$1|dä Jrund es:|de Jründe sin:|oohne Jrund.}}",
+ "permissionserrorstext-withaction": "Do häs nit dat Rääch $2, {{PLURAL:$1|dä Jrond es:|de Jrönde sin:|ävver ohne aanjävbahre Jrond.}}",
"recreate-moveddeleted-warn": "'''Opjepaß:''' Do bes om bäste Wääsh, en Sigg neu aanzelääje, di doför ald ens fottjeschmeße woode wohr.\n\nBes förseschtesch un övverlääsch Der, of dat en joode Idee es, di Sigg widder opzemaache. Domet De Bescheid weiß, hee de Endrääsh em Logboch vum Sigge-Ömnänne, un em Logboch vum Sigge-Fottschmieße mem Jrond, woröm di Sigg dohmohls fottjeschmesse woode es:",
"moveddeleted-notice": "Heh di Sigg es fottjeschmeße. E Shtöck uß dä Logböösher fum Sigge-Fottschmieße un fum Sigge-Ömnänne för di Sigg kütt jetz, en dä Hoffnung, dat dat Der hellef.",
"log-fulllog": "Donn dat janze Logboch aanloore",
@@ -637,7 +655,7 @@
"postedit-confirmation-saved": "Ding Änderunge sin nit faßjehallde.",
"edit-already-exists": "Kunnt kei neu Sigg aanlääje. Di Sigg jidd_et ald.",
"defaultmessagetext": "Dä standaadmäßije Tex",
- "content-failed-to-parse": "Et wohr nit müjjelesch, dä Enhalld met däm <i lang=\"en\">MIME-Typ</i> $2 för en Dattei met $1 dren ze verwooschte: $3.",
+ "content-failed-to-parse": "Et wohr nit müjjelesch, dä Enhalld met däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Tüpp <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\" >$2</code> för en Dattei met $1 dren ze verwooschte: $3.",
"invalid-content-data": "Di Daate en dä Sigg sen onjöltesch.",
"content-not-allowed-here": "Ene Enhalld vun dä Zoot „$1“ es op dä Sigg „[[$2]]“ nit zohjelohße.",
"editwarning-warning": "Wann de vun hee dä Sigg fott jeihß, doh künnte all Ding Änderonge aan dä Sigg verschött jonn.\nDo kanns heh di Warnung affschallde, wann de aanjemelldt un enjelogg bes, dann kriß de se nieh mieh wider. Jangk doför en dä Afschnett „{{int:prefs-editing}}“ en Dinge Enschtellonge.",
@@ -647,6 +665,11 @@
"content-model-text": "Eijnfache Tex",
"content-model-javascript": "JavaSkrepp",
"content-model-css": "CSS",
+ "content-model-json": "<i lang=\"en\" xml:lang=\"en\" title=\"JavaScript Object Notation\">JSON</i>",
+ "content-json-empty-object": "Nix dren",
+ "content-json-empty-array": "Nix dren",
+ "duplicate-args-category": "Sigge met dubbelt aanjejovve Parramehtere för Schablohne.",
+ "duplicate-args-category-desc": "Sigge met Oprohve vun Schablohne met dubbelt aanjejovve Parramehtere dren, alsu esu jät wi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> un <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Opjepaß:''' Die Sigg heh määt zovill Opwand met Paaser-Funkßjohne.\n\n{{PLURAL:$2|Eine Oproof|Beß $2 Oproofe|Keine Oproof}} es älaup, {{PLURAL:$1|un eine Oproof|ävver $1 Oproofe|un keine Oproof}} määt di Sigg em Momang.",
"expensive-parserfunction-category": "Sigge met zovill Opwand en Paaser-Funkßjohne",
"post-expand-template-inclusion-warning": "Warnung: Heh in di Sigg wääde zo fill Bytes övver Schablone erin jebraat. Nit all di Schablone künne enjbonge wäde.",
@@ -655,15 +678,16 @@
"post-expand-template-argument-category": "Sigge met övverjange Parrammeeter fun Schablone",
"parser-template-loop-warning": "Schablon roofe sesch em Kringel op: [[$1]]",
"parser-template-recursion-depth-warning": "Schablone refe sesch zo öff sellver op ($1)",
- "language-converter-depth-warning": "Zoh vill Verschachtelunge (övver $1) beim Täx-Ömwandelle vun ein Shprooch en andere.",
+ "language-converter-depth-warning": "Zoh vill Verschachtelonge (övver $1) beim Täx-Ömwandelle vun eine Schprohch udder Schrevv en en anndere.",
"node-count-exceeded-category": "Sigge, woh dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde es",
+ "node-count-exceeded-category-desc": "Di Sigg hät dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde.",
"node-count-exceeded-warning": "Heh di Sigg hät dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde",
"expansion-depth-exceeded-category": "Sigge, woh de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschredde es",
"expansion-depth-exceeded-category-desc": "Dat heh es de Saachjropp för Sigge, woh de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschreddde es.",
"expansion-depth-exceeded-warning": "Heh di Sigg hät de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschredde",
"parser-unstrip-loop-warning": "Ene Befähl em Täx betrick sesch op sesch sellef.",
"parser-unstrip-recursion-limit": "Ene Befähl em Täx es mieh wi {{PLURAL:$1|eijmohl|$1 Mohl|jaa nit}} met sesch sellef verschachtelt.",
- "converter-manual-rule-error": "Doh es ene Fähler en ene händesche Önwandelongsrääjel zwesche de Schprooche.",
+ "converter-manual-rule-error": "Doh es ene Fähler en ene händesche Önwandelongsrääjel zwesche de Schprohche.",
"undo-success": "De Änderung könnte mer zeröck nämme. Beloor Der de Ungerscheid un dann donn di Sigg avspeichere, wann De dengks, et es en Oodenung esu.",
"undo-failure": "Dat kunnt mer nit zeröck nämme, dä Afschnedd wood enzwesche ald widder beärbeidt.",
"undo-norev": "Do ka'mer nix zeröck nämme. Di Version jidd_et nit, odder se es verstoche odder fottjeschmesse woode.",
@@ -678,7 +702,7 @@
"currentrev": "Neuste Version",
"currentrev-asof": "De neuste Version fum $2 öm $3 Uhr",
"revisionasof": "De Version vum $2 öm $3 Uhr",
- "revision-info": "Dat heh es de övverhollte Version $3, {{GENDER:$2|vum|vum|vum Metmaacher|vun dä|vum}} $2 aam $4 öm $5 Uhr afjeshpeichert.",
+ "revision-info": "Väsjohn $3 vum $4 öm $5 Uhr vum {{GENDER:$6|vum|vum|vum Metmaacher|vun dä|vum}} $2.$7",
"previousrevision": "← De Version dovör zeije",
"nextrevision": "De Version donoh zeije →",
"currentrevisionlink": "De neuste Version",
@@ -700,9 +724,10 @@
"history-feed-empty": "De aanjefrochte Sigg jitt et nit. Künnt sin, dat se enzwesche fottjeschmesse udder ömjenannt woode es. Kanns jo ens [[Special:Search|em Wiki söke looße]], öm de zopass, neu Sigge ze finge.",
"rev-deleted-comment": "(„Koot Zosammejefass, Quell“ usjeblendt)",
"rev-deleted-user": "(Metmaacher Name usjeblendt)",
- "rev-deleted-event": "(Logboch-Enndraach fottjenomme)",
+ "rev-deleted-event": "(Eijnzelheijte vom Logboch-Enndraach fottjenomme)",
"rev-deleted-user-contribs": "[Däm Metmaacher singe Name udder sing <i lang=\"en\">IP</i>-Addräß wood veschtoche, un heh di Änderung douch nit mieh en de Leß met de Beidrääsch op]",
"rev-deleted-text-permission": "Die Version fun dä Sigg es '''fottjeschmeße'''.\nWann Ehr en [{{FULLURL:{{#spezial:Log}}/delete|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:deletionlog}}}}] loore doht, künnt Ehr velleisch mieh do drövver lesse.",
+ "rev-suppressed-text-permission": "Di Väsjohn vun dä Sigg es <strong>verschtoche</strong> woode.\nEinzelheite fengk mer en däm [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Logbohch vum Sigge verschteische].",
"rev-deleted-text-unhide": "{{int:rev-deleted-text-permission}} Als ene Wiki-Köbes kanns De [$1 se ävver doch bekike], wann De wells.",
"rev-suppressed-text-unhide": "Die Version fun dä Sigg es '''verschtoche'''.\nWann Ehr en [{{FULLURL:{{#spezial:Log}}/suppress|page={{FULLPAGENAMEE}}}} {{lcfirst:{{int:suppressionlog}}}}] loore doht, künnt Ehr velleisch mieh do drövver lesse.\nAls ene Wiki-Köbes kanns De [$1 se ävver doch bekike], wann De wells.",
"rev-deleted-text-view": "{{int:rev-deleted-text-permission}} Als ene Wiki-Köbes kanns De se ävver bekike.",
@@ -727,14 +752,14 @@
"revdelete-text-text": "Fottjeschmeße Väsjohne blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mieh drop zohjriehfe.",
"revdelete-text-file": "Fottjeschmeße Väsjohne vun Datteije blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mieh drop zohjriehfe.",
"logdelete-text": "Fottjeschmeße Endrääsch en de Logbööscher blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mieh drop zohjriehfe.",
- "revdelete-text-others": "De Wiki_Kööbeße künne emmer noch drop zohjriefe un künne och wider för alle seeschbaa maache, wat jäz verschtoche es, esu lang kein äxtra Beschränkonge jemaat woodte.",
+ "revdelete-text-others": "De Wiki_Kööbeße künne emmer noch drop zohjriefe un künne och wider för alle seeschbaa maache, wat jäz verschtoche es, esu lang wi kein äxtra Beschränkonge jemaat woodte.",
"revdelete-confirm": "Bes esu joot un doon dat beschtääteje, un donn domet ongerschriive, dat De dat donn wells, dat De weiß, wat dobei eruß kütt, un dat De dat och noh de [[{{MediaWiki:Policy-url}}|Rääjelle]] deihß.",
"revdelete-suppress-text": "Dat sullt '''blooß''' jedonn wäde för:\n* onjesäzlesche Aanjaabe\n* unjenehmesch persöhnlesch Daate\n*: ''Aanschreffte, Tellefoon- un ander Nummere, <span lang=\"en\" xml:lang=\"en\">e-mail</span> Adräß, uew.''",
"revdelete-legend": "Dä öffentlije Zojang enschränke",
"revdelete-hide-text": "dä Täx vun dä Väsjohn",
"revdelete-hide-image": "De Enhallt vun däm Beld versteiche",
- "revdelete-hide-name": "Der Förjang, un och der Enndraach uss_em Logboch, versteiche",
- "revdelete-hide-comment": "dä Enhald vun „Koot Zosammejefass, Quell“",
+ "revdelete-hide-name": "Der Förjang un sing Parramehtere uss_em Enndraach em Logboch versteiche",
+ "revdelete-hide-comment": "dä Enhald vun „{{int:Summary}}“",
"revdelete-hide-user": "däm Bearbeider sing <i lang=\"en\" xml:lang=\"en\"IP</i>-Adress oder Metmaacher-Name",
"revdelete-hide-restricted": "Dun dat och för de Wiki-Köbesse esu maache wie för jede Andere",
"revdelete-radio-same": "(lohß wi_t eß)",
@@ -777,6 +802,7 @@
"mergehistory-empty": "Mer han kei Versione för zesammezeläje",
"mergehistory-success": "{{PLURAL:$3|Ein Version es|$3 Versione sen|Kei Version wood}} fun „[[:$1]]“ noh „[[:$2]]“ övverdraare un domet zosamme jelaat.",
"mergehistory-fail": "Dat Versione zesamme läje is nit müjjelisch. Don ens di Sigge un de Zigge pröfe!",
+ "mergehistory-fail-toobig": "Mieh wi {{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohne}} wöödte zesamme jelaat. Esu vill künne mer nit, un maache mer nit.",
"mergehistory-no-source": "En Ursprungssigg „$1“ jidd_et nit.",
"mergehistory-no-destination": "En Zielsigg „$1“ jidd_et nit.",
"mergehistory-invalid-source": "De Ursprungssigg ier Name moß och ene reschtijje Siggetittel sin.",
@@ -786,7 +812,6 @@
"mergehistory-same-destination": "De Quell-Sigg un de Ziel-Sigg dörve nit deselve Sigg sinn.",
"mergehistory-reason": "Der Jrond:",
"mergelog": "Logboch fum Sigge zesamme Läje",
- "pagemerge-logentry": "Versione beß $3 fun „[[$1]]“ zosamme jelaat met „[[$2]]“",
"revertmerge": "Dat Zosammelääje widder retuur maache",
"mergelogpagetext": "Dat hee is dat Logboch fun de zesammejelaate Versione fun Sigge",
"history-title": "Älder Versione vun dä Sigg „$1“",
@@ -827,6 +852,7 @@
"search-result-category-size": "{{PLURAL:$1|1 Saach|$1 Saache|0 Saache}} ({{PLURAL:$2|1 Ongerjropp|$2 Ongerjroppe|0 Ongerjroppe}}, {{PLURAL:$3|1 Datei|$3 Dateie|0 Dateie}})",
"search-redirect": "(Ömleitung $1)",
"search-section": "(Avschnett $1)",
+ "search-category": "({{int:Category}} $1)",
"search-file-match": "(en dä Dattei dren)",
"search-suggest": "Häß De „$1“ jemeint?",
"search-interwiki-caption": "Schwesterprojekte",
@@ -837,20 +863,21 @@
"searchall": "all",
"showingresults": "Onge {{PLURAL:$1|weed <strong>eine</strong>|wääde bes <strong>$1</strong>|weed <strong>keine</strong>}} vun de jefonge Endrähsch jezeisch, vun de Nommer <strong>$2</strong> av.",
"showingresultsinrange": "{{PLURAL:$1|<strong>Ein</strong> Saachjropp|<strong>$1</strong> Saachjroppe|Kein Saachjropp}}, vun Nommer <strong>$2</strong> bes Nommer <strong>$3</strong> {{PLURAL:$1|weed|wääde|weed}} heh opjeleß.",
- "showingresultsheader": "Jefonge un aanjezeisch: {{PLURAL:$5|'''$1''' vun '''$3'''|'''$1''' beß '''$2''' vun '''$3'''|nix}} för '''$4'''",
+ "search-showingresults": "{{PLURAL:$4|Heh es dä <strong>$1</strong>-te vun <strong>$3</strong> Träffere.|Träffer Nommero <strong>$1 bes $2</strong> vun <strong>$3</strong> Träffer.|Jevonge woodt woodt nix.}}",
"search-nonefound": "Mer han nix zopaß jefonge för Ding Aanfrohch.",
"powersearch-legend": "Extra Söhke",
"powersearch-ns": "Söök en de Apachtemangs:",
"powersearch-togglelabel": "&nbsp;",
"powersearch-toggleall": "Övverall Höhksche draan maache",
"powersearch-togglenone": "All Höhksche fott nämme",
+ "powersearch-remember": "Di Ußwahl faßhallde för schpääder wider dermet ze söhke.",
"search-external": "Söke fun Ußerhallef",
"searchdisabled": "Dat Söhke hee {{GRAMMAR:en|{{SITENAME}}}} es em Momang avjeschalt.\nDat weed op dänne ẞööver ad ens jemaat, domet de Lass op inne nit ze jroß weed,\nun winnischsdens dat normale Sigge Oprofe flöck jenoch jeiht.\n\nEhr künnt esu lang övver en Söhkmaschin vun usserhalv emmer noch\nSigge us {{GRAMMAR:Dative|{{ucfirst:{{SITENAME}}}}}} finge.\nEt es nit jesaht,\ndat dänne ehr Daate topaktoell sin,\nävver et es bäßer wi jaa_nix.",
"search-error": "An error has occurred while searching: $1",
"preferences": "ming Enstellunge",
- "mypreferences": "Enstellunge",
+ "mypreferences": "Enschtällonge",
"prefs-edits": "Aanzahl Änderunge am Wiki:",
- "prefsnologintext2": "Do mööts ald $1, öm Ding Enschtällonge ze verändere.",
+ "prefsnologintext2": "Donn ennlogge, öm Ding Enschtällonge ze verändere.",
"prefs-skin": "Et Ussinn",
"skin-preview": "Vör-Ansich",
"datedefault": "Ejaal - kein Vörliebe",
@@ -859,6 +886,11 @@
"prefs-personal": "De Enstellunge",
"prefs-rc": "Neuste Änderonge",
"prefs-watchlist": "De Oppassliss",
+ "prefs-editwatchlist": "De Oppaßleß beärbeijde",
+ "prefs-editwatchlist-label": "Endrähsch en Dinge Oppaßleß beärbeijde:",
+ "prefs-editwatchlist-edit": "Siggeövverschreffte en Dinge Oppaßleß belohre un eruß schmiiße:",
+ "prefs-editwatchlist-raw": "De Oppaßleß en rüh beärbeijde:",
+ "prefs-editwatchlist-clear": "Donn Ding Oppaßleß läddesch maache",
"prefs-watchlist-days": "Aanzahl Daare för en ming Oppassliss aanzezeije:",
"prefs-watchlist-days-max": "Nit mieh wie {{PLURAL:$1|eine Daach|$1 Dääch|keine Daach}}",
"prefs-watchlist-edits": "Aanzahl Änderunge för en ming verjrößerte Oppassliss aanzezeije:",
@@ -916,9 +948,9 @@
"prefs-registration": "Aanjemeldt zick",
"prefs-registration-date-time": "dem $2 öm $3 Uhr",
"yourrealname": "Dinge richtije Name *",
- "yourlanguage": "Di Schprooch, di et Wiki kalle soll:",
- "yourvariant": "Der Dijaläk, de Schriefwies, de Zoot Shprooch för der Enhald.",
- "prefs-help-variant": "Der Dijaläk udder de Schriefwies udder de Zoot Shprooch, di De för der Enhald.vun Sigge am leevsde häs.",
+ "yourlanguage": "Di Schprohch, di et Wiki kalle soll:",
+ "yourvariant": "Der Dijaläk, de Schriefwies, de Zoot Schprohch för der Enhald:",
+ "prefs-help-variant": "Der Dijalägg udder de Schriefwies udder de Zoot Schprohch, di De för der Enhald vun Sigge am leevsde häß.",
"yournick": "Ding&nbsp;„Ongerschreff“&nbsp;*",
"prefs-help-signature": "* Beidrääsch op Klaafsigge sullte met „<nowiki>~~~~</nowiki>“ ophüere, dat weed beim Afshpeishere en Ding „Ongerschreff“ met de Uhrzig un em Dattum ömjewandelt.",
"badsig": "Di Ungeschreff jëijd_esu nit — luer noh dem HTML do_dren un maach et rėshtėsh.",
@@ -929,7 +961,7 @@
"gender-female": "Dat Su-wi-De-heiß schriiv heh em Wiki met.",
"prefs-help-gender": "* Moß mer nit aanjävve, un dat kritt de janne Welt ze sinn, nit nur Do allein.",
"email": "<i lang=\"en\">e-mail</i>",
- "prefs-help-realname": "* Dinge richtije Name — kanns De fott looße — wann De en ävver nenne wells, dann weed dä jebruch, öm Ding Beidräch domet ze schmöcke.",
+ "prefs-help-realname": "Dinge rechteje Nahme kanns De fott lohße.\nWann De en ävver nenne wells, dann kann dä jebruch weede, öm Ding Beidrähch domet ze schmöcke.",
"prefs-help-email": "Ding <i lang=\"en\">e-mail</i> Adress - kanns De fottlooße, un se es för Andre nit ze sinn - mäht et ävver müjjelich, Der e neu Passwoot ze schecke, wann De et ens verjäße häß.",
"prefs-help-email-others": "Do kannß och zohlohße, dat mer Der domet övver Ding Metmaacherklaafsigg en <i lang=\"en\">e-mail</i> schecke kann. Esu künne ander Metmaacher met Der en Kontak kumme, ohne dat se Dinge Name oder Ding <i lang=\"en\">e-Mail</i> Adress kenne mööte.",
"prefs-help-email-required": "Do moß en <i lang=\"en>e-mail</i>-Addräß aanjevve.",
@@ -950,6 +982,7 @@
"prefs-tokenwatchlist": "Schlößel",
"prefs-diffs": "Ongerscheide un Verjliische",
"prefs-help-prefershttps": "Di Enschtällong kütt eets zom drahre, wann De nähksde Mohl enloggs.",
+ "prefswarning-warning": "Do häs Ding Ennschtällonge verändert, ävver dat noch nit faßjehallde. De moß heh di Sigg met däm Knopp „$1“ verlohße, söns sin Ding Änderonge fott.",
"prefs-tabs-navigation-hint": "Opjepaß: Met dä Piel-Knöppe kanns de noh rääds un lenks op de Rigger jonn un se ußsöhke.",
"email-address-validity-valid": "De Addräß fö de <i lang=\"en\">e-mail</i> schingk en Odenung",
"email-address-validity-invalid": "Jivv en jöltijje Addräß fö de <i lang=\"en\">e-mail</i> en",
@@ -1024,7 +1057,8 @@
"right-deletedtext": "Fotjeschmeße Täx un Ungerscheid zwesche de verschtoche Versione aanloore",
"right-browsearchive": "Noh fottjeschmesse Sigge söke",
"right-undelete": "Fottjeschmeße Sigge widder zeröck holle",
- "right-suppressrevision": "Versione vun Sigge beloore un zeröck holle, di sujaa för de Wiki-Köbesse verstoche sin",
+ "right-suppressrevision": "Versione vun Sigge beloore, verschteische, un zeröck holle, di sujaa för de Wiki-Köhbeße verstoche sin",
+ "right-viewsuppressed": "Beloor de Väsjohne, di vun jeedem verschtoche sin.",
"right-suppressionlog": "De private Logböcher aanloore",
"right-block": "Medmaacher Sperre, un domet am Schrive hindere",
"right-blockemail": "Metmaacher för et E-Mail Verschecke sperre",
@@ -1035,6 +1069,7 @@
"right-protect": "Sigge schöze, jeschözde Sigge änndere, un der iere Schoz widder ophevve",
"right-editprotected": "Sigge ändere, di met „{{int:protect-level-sysop}}“ jezöz sin",
"right-editsemiprotected": "Sigge met däm Schoz „{{int:protect-level-autoconfirmed}}“ ändere",
+ "right-editcontentmodel": "et Modäll vum Ennhald vun Sigge verändere",
"right-editinterface": "Sigge met de Texte ändere, die et Wiki kallt",
"right-editusercssjs": "Anderlücks CSS- un JS-Dateie ändere",
"right-editusercss": "Anderlücks CSS-Dateie ändere",
@@ -1062,6 +1097,7 @@
"right-override-export-depth": "Beim Sigge Expoteere de Sigge metnämme, woh Lingks drop jon — beß fönef Schredde wigk",
"right-sendemail": "<i lang=\"en\">e-mail</i> aan ander Metmaacher schecke",
"right-passwordreset": "De <i lang=\"en\">e-mails</i> vum Paßwoot neu Säze aanloore",
+ "right-managechangetags": "[[Special:Tags|Kännzeijsche]] en de Dahtebangk aanlähje udder fottschmiiße",
"newuserlogpage": "Logboch för neu Metmaachere",
"newuserlogpagetext": "He sin de Metmaacher opjelėßß, di sesh nöü aanjemäldt han.",
"rightslog": "Logboch för Änderunge aan Metmaacher-Räächde",
@@ -1107,50 +1143,53 @@
"action-viewmywatchlist": "de eije Oppaßleß ze belooere",
"action-viewmyprivateinfo": "de eije päsöönlesche Aanjaabe ze belooere",
"action-editmyprivateinfo": "Ding päsöönlesche Aanjaabe ze ändere",
+ "action-editcontentmodel": "et Modäll vum Ennhald vun Sigge ze verändere",
+ "action-managechangetags": "Kännzeijsche en de Dahtebangk aanlähje udder fottschmiiße",
"nchanges": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderong}}",
"enhancedrc-since-last-visit": "{{PLURAL:$1|Ein|$1|Kein}} zigg_em läzde Aanloore",
"enhancedrc-history": "Väsjohne",
"recentchanges": "Neuste Änderonge",
"recentchanges-legend": "Enstellunge",
- "recentchanges-summary": "Op dä Sigg hee sin de neuste Änderunge am Wiki opjeliss.",
+ "recentchanges-summary": "Op dä Sigg heh sin de neuste Änderonge aam Wikki opjeleß.",
"recentchanges-noresult": "Nit verändert en dä Zigg met de aanjejovve Beschrängkonge.",
"recentchanges-feed-description": "Op dämm Abonnomang-Kannal (<i lang=\"en\">Feed</i>) kannze de {{int:recentchanges}} aam Wiki en Laif un en Färve metloore.",
- "recentchanges-label-newpage": "Heh di Sigg es neu dobei jekumme met dä Änderung",
+ "recentchanges-label-newpage": "Di Sigg es neu dobei jekumme met dä Änderong",
"recentchanges-label-minor": "Heh dat es en Mini-Änderung",
"recentchanges-label-bot": "Di Änderung es fun enem Bot jemaat woode",
- "recentchanges-label-unpatrolled": "Heh di Änderung es noch nit nohjeloort",
- "recentchanges-label-plusminus": "Der Ömvang vun dä Sigg hät sesch öm di Aanzahl Bytes verändert.",
- "recentchanges-legend-heading": "'''Lejänd:'''",
+ "recentchanges-label-unpatrolled": "Heh di Änderong es noch nit nohjelohrt",
+ "recentchanges-label-plusminus": "Der Ömvang vun dä Sigg hät sesch öm di Aanzahl <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i> verändert.",
+ "recentchanges-legend-heading": "'''Lejänd:&nbsp;'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Loor och noh de [[Special:NewPages|Leß met de neue Sigge]])",
"recentchanges-legend-plusminus": "(''±123'')",
- "rcnotefrom": "Hee {{PLURAL:$1|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.",
- "rclistfrom": "Zeich de Änderunge vum $3 $2 aan",
- "rcshowhideminor": "$1 klein Mini-Änderunge",
- "rcshowhideminor-show": "Zeisch",
- "rcshowhideminor-hide": "Verschteihsch",
- "rcshowhidebots": "$1 de Bots ehr Änderunge",
- "rcshowhidebots-show": "Zeisch",
- "rcshowhidebots-hide": "Verschteihsch",
- "rcshowhideliu": "De aanjemeldte Metmaacher ehr Änderunge: $1",
- "rcshowhideliu-show": "Zeisch",
- "rcshowhideliu-hide": "Verschteihsch",
- "rcshowhideanons": "$1 de namenlose Metmaacher ehr Änderunge",
- "rcshowhideanons-show": "Zeisch",
- "rcshowhideanons-hide": "Verschteihsch",
- "rcshowhidepatr": "$1 de nohjeluurte Änderunge",
- "rcshowhidepatr-show": "Zeisch",
- "rcshowhidepatr-hide": "Verschteihsch",
- "rcshowhidemine": "$1 ming eije Änderunge",
- "rcshowhidemine-show": "Zeisch",
- "rcshowhidemine-hide": "Verschteihsch",
- "rclinks": "Zeich de letzte {{int:pipe-separator}}$1{{int:pipe-separator}} Änderunge us de letzte {{int:pipe-separator}}$2{{int:pipe-separator}} Däch, un dun {{int:pipe-separator}}$3",
- "diff": "Ungerscheid",
+ "rcnotefrom": "Hee {{PLURAL:$5|es ein|sin bes op <strong>$1</strong>|es keine}} fun de Änderunge zick dem <strong>$3</strong> öm <strong>$4</strong> Uhr opjelėß.",
+ "rclistfrom": "Zeisch de Änderonge avv em $3 öm $2 Uhr aan.",
+ "rcshowhideminor": "de klein Mini-Änderonge $1",
+ "rcshowhideminor-show": "aanzeije",
+ "rcshowhideminor-hide": "verschteihsche",
+ "rcshowhidebots": "de Bots ehr Änderonge $1",
+ "rcshowhidebots-show": "aanzeije",
+ "rcshowhidebots-hide": "verschteihsche",
+ "rcshowhideliu": "de aanjemällte Metmaacher ehr Änderonge $1",
+ "rcshowhideliu-show": "aanzeije",
+ "rcshowhideliu-hide": "verschteihsche",
+ "rcshowhideanons": "de nahmelohse Metmaacher ehr Änderonge $1",
+ "rcshowhideanons-show": "aanzeije",
+ "rcshowhideanons-hide": "verschteihsche",
+ "rcshowhidepatr": "de nohjeluhrte Änderonge $1",
+ "rcshowhidepatr-show": "aanzeije",
+ "rcshowhidepatr-hide": "verschteihsche",
+ "rcshowhidemine": "ming eije Änderonge $1",
+ "rcshowhidemine-show": "aanzeije",
+ "rcshowhidemine-hide": "verschteihsche",
+ "rclinks": "Zeisch de läzde {{int:pipe-separator}}$1{{int:pipe-separator}} Änderonge us de läzde {{int:pipe-separator}}$2{{int:pipe-separator}} Däch, un dun {{int:pipe-separator}} $3.",
+ "diff": "Ongerscheid",
"hist": "Versione",
"hide": "Ußblände!",
"show": "Zeije:",
"minoreditletter": "M",
"newpageletter": "N",
"boteditletter": "B",
+ "unpatrolledletter": "!",
"number_of_watching_users_pageview": "[{{PLURAL:$1|eine|$1|kein}} Oppasser]",
"rc_categories": "Nor de Saachjruppe (met „|“ dozwesche):",
"rc_categories_any": "All, wat mer han",
@@ -1163,10 +1202,10 @@
"recentchangeslinked": "Änderunge aan Sigge, wo heh drop jelink es",
"recentchangeslinked-feed": "Änderunge aan Sigge, wo hee drop jelink es",
"recentchangeslinked-toolbox": "Änderunge aan Sigge, wo hee drop jelink es",
- "recentchangeslinked-title": "Änderunge aan Sigge, die vun „$1“ uß verlink sin",
- "recentchangeslinked-summary": "Heh di {{int:nstab-special}} hät en Leß met Änderunge aan Sigge, di vun dä aanjejovve Sigg uß verlink sin.\nBei Saachjruppe sen et de Sigge en dä Saachjrupp.\nSigge uß Dinge [[Special:Watchlist|Opaßleß]] sin '''fett''' jeschrevve.",
- "recentchangeslinked-page": "Dä Sigg iere Tittel:",
- "recentchangeslinked-to": "Zeish de Änderonge fun dä Sigge, wo Lengks noh heh drop sin",
+ "recentchangeslinked-title": "Änderonge aan Sigge, di vun „$1“ uß verlengk sin",
+ "recentchangeslinked-summary": "Heh di {{int:nstab-special}} hädd en Leß met Änderonge aan Sigge, di vun dä aanjejovve Sigg uß verlengk sin.\nBei Saachjroppe sen et de Sigge en dä Saachjropp.\nSigge uß Dinge [[Special:Watchlist|Opaßleß]] sin en '''Fättschreff''' jeschrevve.",
+ "recentchangeslinked-page": "Dä Sigg ier Övverschreff:",
+ "recentchangeslinked-to": "Zeisch de Änderonge aan dä Sigge, woh Lengks op di aanjejovve Sigg drop sin",
"upload": "Daate huhlade",
"uploadbtn": "Huhlade!",
"reuploaddesc": "Zeröck noh de Sigg zem Huhlade.",
@@ -1178,9 +1217,9 @@
"uploaderror": "Fähler beim Huhlade",
"upload-recreate-warning": "'''Opjepaß: En Dattei met dämm Name es ömjenannt udder fottjeschmeße woode.'''\n\nDe Logböösher vum Datteie Ömnänne un Fottschmieße saare doh drövver:",
"uploadtext": "Met däm Formular unge kanns de Belder oder ander Daate huhlade.\nJangk op de [[Special:FileList|Less met de huhjelaade Datteie]], öm esu en Datteie ze beloore udder noh inne ze söhke. De Logbööscher vum [[Special:Log/upload|Huhlaade]] un vum [[Special:Log/delete|Sigge fottschmiiße]] künnte Der och hellefe.\n\nDo kanns dann Ding Werk en Sigge enbinge, met Lengks en dä Aate:\n* <code>'''<nowiki>[[</nowiki>{{ns:file}}:'''''Beldche'''''.jpg]]'''</code> — för di janze Dattei ze zeije, wi se eß,\n* <code>'''<nowiki>[[</nowiki>{{ns:file}}:'''''Beld'''''.svg | '''''200''''' px]]'''</code> — för e Mini-Beldsche met 200&nbsp;Pixelle Breedt ze zeije,\n* <code>'''<nowiki>[[</nowiki>{{ns:file}}:'''''Su süht dat us'''''.png | left | thumb | '''''ene Tex''''' ]]'''</code> — deiht e 200-Pixel-Mini-Beldsche en ene Kaßte aan der lenke (<i lang=\"en\">left</i>) Rand vun dä Sigg un „ene Tex“ onger däm Beldsche,\n* <code>'''<nowiki>[[</nowiki>{{ns:media}}:'''''Esu hürt sich dat aan'''''.ogg]]'''</code> — öm tiräk op en Dattei ze Lenke, ohne se aanzzeije.\nUsführlich met alle Müjjelichkeite fings de dat bei de Hölp.",
- "upload-permitted": "Nor de Dateitüpe <code>$1</code> sin zojelohße.",
- "upload-preferred": "De bevörzochte Zoote Dateie: $1.",
- "upload-prohibited": "Verbodde Zoote Dateie: $1.",
+ "upload-permitted": "{{PLURAL:$2|Bloß dä Datteitüp <code>$1</code> es zohjelohße.|Nor heh di Dateitüpe sin zohjelohße: <code>$1</code>.|Keine Dateitüp es zohjelohße.}}",
+ "upload-preferred": "De bevörzochte Zoot{{PLURAL:$2||e|}} Datei{{PLURAL:$2||je|}}: $1.",
+ "upload-prohibited": "Verbodde Zoot{{PLURAL:$2||e|} Datei{{PLURAL:$2||je|}: $1.",
"uploadlogpage": "Logboch met de huhjelade Dateie",
"uploadlogpagetext": "Hee sin de Neuste huhjelade Dateie opjeliss un wä dat jedon hät.\n(En de [[Special:NewFiles|Jalleri met neu Dateie]] kriß De ene Övverbleck med Belldsche)",
"filename": "Dä Name vun dä Datei",
@@ -1216,9 +1255,9 @@
"largefileserver": "De Datei es ze jroß. Jrößer wie däm ẞööver sing Enstellung erlaub.",
"emptyfile": "Wat De hee jetz huhjelade häs, hät kein Daate dren jehatt. Künnt sin, dat De Dich verdon häs, un dä Name wo verkihrt jeschrevve. Luur ens ov De wirklich <strong>die</strong> Datei hee huhlade wells.",
"windows-nonascii-filename": "Heh dat Wiki löht kein Datteiname met Sönderzeische zoh.",
- "fileexists": "Et jitt ald en Datei met däm Name.\nWann De op „Datei avspeichere“ klicks, weed se ersetz.\nBes esu jod un luur Der <strong>[[:$1]]</strong> aan, wann De nit 100% secher bes.\n[[$1|thumb]]",
+ "fileexists": "Et jitt ald en Dattei met däm Nahme. Bes esu johd un lohr Der <strong>[[:$1]]</strong> aan, wann De nit secher bes, da De se ändere wells.\n[[$1|thumb]]",
"filepageexists": "En Sigg övver di Datei met däm Tittel <strong>[[:$1]]</strong> es ald doh, ävver en Datei met däm Name ham_mer nit. Dinge Tex kütt nit automattesch op di Sigg övver di Dattei. Di Sigg moß De wann nüüdesch noch ens extra ändere.\n[[$1|thumb]]",
- "fileexists-extension": "Mer han ald en Dattei, di bahl jenou esu heijß: [[$2|thumb]]\n* Huh am laade sim_mer: <strong>[[:$1]]</strong>\n* Ald om ßörve eß:</td><td><strong>[[:$2]]</strong>\nBes esu joot, un söök Der ene ander Name fö di Datei us.",
+ "fileexists-extension": "Mer han ald en Dattei, di bahl jenou esu heijß: [[$2|thumb]]\n* Huh am laade sim_mer: <strong>[[:$1]]</strong>\n* Ald om ßörve eß: <strong>[[:$2]]</strong>\nWels De nit leever ene andere Nahme fö di Datei ußsöhke?",
"fileexists-thumbnail-yes": "Dat süühd uß, wi wann dat hee en Minni-Beldsche em Breefmarrke-Fommaat (''<span lang=\"en\">thumbnail</span>'') wöhr. [[$1|thumb]]\nDon ens di Dattei <strong>[[:$1]]</strong> prööfe.\nWann dat de Orjinaaljrüß es, do moß keij för dat Beld keij extra Vör-Aansich huhjelade wäde.",
"file-thumbnail-no": "Dä Name fö di Datei fängk met <strong>$1</strong> aan.\nDat süühd uß, wi wann dat en Minni-Beldsche em Breefmarrke-Fommaat\n(''<span lang=\"en\">thumbnail</span>'') wöhr. Don ens di Dattei\n<strong>$1</strong> prööfe, of de nit e besser opjelööß Beld\ndofun häß, un don dat met singe Orjinaaljrüß huhlade, wann möjjelesch.\nSöns donn besser ene andere Dateiname ußsöke.",
"fileexists-forbidden": "Et jitt ald en Dattei met däm Name, un mer kann se nit övverschriive.\nWann de Ding Dattei trozdämm huhlaade wells, da jangk zeröck un lad se\nunger enem andere Name huh. [[File:$1|thumb|center|$1]]",
@@ -1245,7 +1284,7 @@
"upload-maxfilesize": "Der jrüütßte müjjelesche Ömfang för en Datei es $1.",
"upload-description": "Övver di Datei",
"upload-options": "Enstellunge för et Laade",
- "watchthisupload": "Op di Datei oppasse",
+ "watchthisupload": "Op di Datei oppaßße",
"filewasdeleted": "Unger däm Name wood ald ens en Datei huhjelade. Die es enzwesche ävver widder fottjeschmesse woode. Luur leever eets ens en et $1 ih dat De se dann avspeichere deis.",
"filename-bad-prefix": "Dä Datei ier Name fängk met '''„$1“''' aan. dat eß fä jewöhnlesch ene Name, dä en dijjitaale Kammerra iere Belder jitt. Esu en Name donn uns esu winnisch verzälle, dat mer se nit jän em Wiki han wulle.\nBes esu joot un jiff dä enne Name, wo mer mieh met aanfange, öm ze wesse, wat en dä Datei dren es.",
"filename-prefix-blacklist": " #<!-- Lohß di Reih jenou esu wie se es! --> <pre>\n# Syntax:\n# * Alles zwesche em #-Zeiche bes nohm Engk vun de Reih es ene Kommäntaa\n# * Jede Reih met jet dren es ene typpesche Aanfang för ene Datteiname,\n# * dä automattesch vun ene Dijjitahlkammera kütt\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # - et ein udder andere mobile Tellefohn -\nIMG # - alljemein üplesch -\nJD # Jenoptik\nMGP # Pentax\nPICT # - diverse -\n #</pre> <!-- Lohß di Reih jenou esu wie se es! -->",
@@ -1337,9 +1376,10 @@
"license": "Lizenz:",
"license-header": "Lizänz",
"nolicense": "Nix usjesöhk",
+ "licenses-edit": "Donn de Lezänzbedengonge verändere udder beärbeide.",
"license-nopreview": "(Kein Vör-Aansich ze hann)",
- "upload_source_url": " (richtije öffentlije URL)",
- "upload_source_file": " (en Datei op Dingem Kompjuter)",
+ "upload_source_url": "(en Dattei med ene öffentlesch zohjänglesche URL)",
+ "upload_source_file": "(en Datei op Dingem Kompjuter)",
"listfiles-delete": "fottschmieße",
"listfiles-summary": "Heh sin de huhjelade Dateije opjeleß.",
"listfiles_search_for": "Sök noh däm Name vun dä Datei:",
@@ -1416,7 +1456,7 @@
"filedelete-maintenance": "Datteie Fottschmiiße un widder zerök Holle jeiht jez jrad nit, mer hann Waadong.",
"filedelete-maintenance-title": "Di Dattei künne mer nit fottschmiiße",
"mimesearch": "Dateije övver dänne ehre <span lang=\"en\">MIME</span>-Tüp söhke",
- "mimesearch-summary": "Op hee dä {{int:nstab-special}} könne de Dateie noh em <i lang=\"en\">MIME</i>-Tüpp ußjesöök wäde.\nMer moß immer der Medietüp un der Ongertüp aanjevve.\nZem Beispell: <code lang=\"en\">image/jpeg</code>\n— kannß donoh op dä Beschrievungssigge von de Dateie loore.",
+ "mimesearch-summary": "Op hee dä {{int:nstab-special}} könne de Dateie noh em <i lang=\"en\" xml:lang=\"en\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Tüpp ußjesöhk wähde.\nMer moß der Medijetüp un der Ongertüp aanjevve mem scheive Schtresch derzwesche, zem Bejschpell: <code xml:lang=\"en\" lang=\"en\">image/jpeg</code> udder <code xml:lang=\"en\" lang=\"en\">text/*</code> udder esu.",
"mimetype": "MIME-Typ:",
"download": "eronger laade",
"unwatchedpages": "Sigge, wo keiner drop oppass",
@@ -1432,14 +1472,13 @@
"randomincategory": "En zohfälleje Sigg us ener Saachjropp",
"randomincategory-invalidcategory": "„$1“ es keine jölteje Nahme för en Saachjropp.",
"randomincategory-nopages": "et sinn er kein Sigge en dä Saachjropp [[:Category:$1|$1]] dren.",
- "randomincategory-selectcategory": "Holl en zohfälleje Sigg us dä Saachjropp: $1 $2.",
- "randomincategory-selectcategory-submit": "Lohß Jonn!",
+ "randomincategory-category": "Saachjropp:",
+ "randomincategory-legend": "En zohfälleje Sigg us dä Saachjropp",
"randomredirect": "Zofällije Ömleitung",
"randomredirect-nopages": "En däm Appachtemang „$1“ sin ja kein Ömleidonge dren.",
"statistics": "Schtatistike",
"statistics-header-pages": "Zahle övver Sigge",
"statistics-header-edits": "Zahle övver Änderunge",
- "statistics-header-views": "Zahle övver afjeroofe Sigge",
"statistics-header-users": "Schtatistike övver de Metmaacher",
"statistics-header-hooks": "Ander Schtatistike",
"statistics-articles": "Atikele",
@@ -1448,18 +1487,16 @@
"statistics-files": "Huhjelade Dateie",
"statistics-edits": "Änderunge aan Sigge",
"statistics-edits-average": "Aanzahl Änderunge pro Sigg em Dorschschnett",
- "statistics-views-total": "Sigge affjeroofe, ėnßjesamp",
- "statistics-views-total-desc": "Sigge, die et nit johv, un Extrasigge sin nit metjezallt",
- "statistics-views-peredit": "Sigge affjeroofe, pro Änderung",
"statistics-users": "[[Special:ListUsers|Metmaacher]] aajemelldt",
"statistics-users-active": "Aktive Metmaacher",
"statistics-users-active-desc": "Aktiv sin Metmaacher, di {{PLURAL:$1|hück un jesterre|en de läzte $1 Dääsch|hück}} jät jemaat han.",
- "statistics-mostpopular": "De miets affjeroofe Sigge",
"pageswithprop": "Sigge med en beschtemmpte Eijeschaff",
"pageswithprop-legend": "Sigge med en Eijeschaff",
- "pageswithprop-text": "Heh di Sigg zeisch Sigge, di en beschtemmpte Eijeschaf han",
+ "pageswithprop-text": "Heh di Sigg zeisch Sigge, di en beschtemmpte Eijeschaff han.",
"pageswithprop-prop": "Dä name vun dä Eijeschaff:",
"pageswithprop-submit": "Lohß Jonn!",
+ "pageswithprop-prophidden-long": "en Eijeschaff med enem janz lange Täx als Wäät weed nit aanjezeisch ($1)",
+ "pageswithprop-prophidden-binary": "en Eijeschaff med enem benähre Wäät weed nit aanjezeisch ($1)",
"doubleredirects": "Ömleitunge op Ömleitunge",
"doubleredirectstext": "Hee fings De en jede Reih ene Link op de iertste un de zweite Ömleitung, donoh ene Link op de Sigg, wo de\nzweite Ömleitung hin jeiht. För jewöhnlich es dat dann och de richtije Sigg, wo de iertste Ömleitung ald hen jonn sullt.\n<del>Ußjeshtreshe</del> Reije sin ald äleedesh.\nMet däm „(Ändere)“-Link kanns De de eetste Sigg tirek aanpacke.\nTipp: Merk Der dä Tittel vun dä Sigg dovör.",
"double-redirect-fixed-move": "Di Sigg [[$1]] es ömjenannt un längk jäz autmattesch öm op di Sigg [[$2]].",
@@ -1484,7 +1521,7 @@
"nviews": "{{PLURAL:$1|Eine Avrof|$1 Avrofe|Keine Avrof}}",
"nimagelinks": "Weed op {{PLURAL:$1|eine Sigg|$1 Sigge|keine Sigg}} jebruch",
"ntransclusions": "weed op {{PLURAL:$1|eine Sigg|$1 Sigge|keine Sigg}} jebruch",
- "specialpage-empty": "Hee en dä Liss es nix dren.",
+ "specialpage-empty": "Heh en dä Leß es nix dren.",
"lonelypages": "Atikele, wo nix drop link",
"lonelypagestext": "De Sigge hee noh sin nörjenzwoh ennjebonge un et jonn och kein Linkß drop.",
"uncategorizedpages": "Atikele, die en kein Saachjrupp sin",
@@ -1493,19 +1530,21 @@
"uncategorizedtemplates": "Schablone, die en kein Saachjruppe sen",
"unusedcategories": "Saachjruppe met nix dren",
"unusedimages": "Dateie, die nit en Sigge dren stäche",
- "popularpages": "Sigge, die off avjerofe wääde",
"wantedcategories": "Saachjruppe, die mer noch nit han, die noch jebruch wääde",
"wantedpages": "Sigge, die mer noch nit han, die noch jebruch wääde",
+ "wantedpages-summary": "He sin Sigge opjeliss, die et noch nit jitt, wo ävver Hyperlinks vun andere Sigge drop jon. en leß met Sigge met Ömleidonge drop fengk mer op dä Sigg [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Ene onjöltijje Tittel för en Sigg: $1",
- "wantedfiles": "Dateie, di onß noch fähle",
+ "wantedfiles": "Dateije, di onß noch fähle",
"wantedfiletext-cat": "Heh di Datteije sin nit doh. Se wääde ävver jebruch, wi wann se doh wööre.\nDatteije uß frembde Sammlonge künne heh opjeleß sin, och wann et se jitt.\nDi sin dann <del>dorschjeschtresche</del>. \nSigge, woh Datteije jebruch wääde sulle, die mer jaa nit han, fengk mer och en dä [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Heh di Datteije sulle jebruch wääde, et jitt se ävver jaa nit.\nSigge, di Datteije oprohfe, di et nit jitt, fengk mer op dä Sigg [[:$1]] opjeleß.",
"wantedfiletext-nocat": "Heh di Datteije sin nit doh. Se wääde ävver jebruch, wi wann se doh wööre.\nDatteije uß frembde Sammlonge künne heh opjeleß sin, och wann et se jitt.\nDi sin dann <del>dorschjeschtresche</del>.",
+ "wantedfiletext-nocat-noforeign": "Heh di Datteije sulle jebruch wääde, et jitt se ävver jaa nit.",
"wantedtemplates": "Schablone, die mer noch nit han, die noch jebruch wääde",
- "mostlinked": "Atikele met de miehste Links drop",
- "mostlinkedcategories": "Saachjruppe met de miehste Links drop",
- "mostlinkedtemplates": "Schablone met de miehßte Lenks drop",
+ "mostlinked": "Atikele met de mihste Lenks drop",
+ "mostlinkedcategories": "Saachjroppe met de miehste Lenks drop",
+ "mostlinkedtemplates": "Sigge met de miehßte Oprohfe, di wohanders enjeföhsch wähde",
"mostcategories": "Atikkele met de miehste Saachjruppe",
- "mostimages": "Dateie met de miehste Links drop",
+ "mostimages": "Dateije met de mihste Lenks drop",
"mostinterwikis": "Atikkele met de miehste Engerwikilengks",
"mostrevisions": "Atikkele met de miehste Änderunge",
"prefixindex": "All Sigge, dänne ehr Name met enem bestemmte Wood oder Tex aanfängk",
@@ -1553,17 +1592,19 @@
"pager-older-n": "{{PLURAL:$1|vörrije|vörrije $1}}",
"suppress": "Versteiche",
"querypage-disabled": "Heh di Extrasigg es ußjeschalldt, domet dä Server jet winnijer ze brassele hät.",
+ "apihelp": "Hölp för de <i lang=\"en\" xml:lang=\"en\" title=\"Application Programmers Interface\">API</i>",
+ "apihelp-no-such-module": "Et Moduhl „$1“ wood nit jefonge.",
"booksources": "Böcher",
"booksources-search-legend": "Söök noh Bezochsquelle för Bööcher",
"booksources-isbn": "ISBN:",
- "booksources-go": "Lohß Jonn!",
+ "booksources-search": "Söhke",
"booksources-text": "Hee noh küdd_en Leßß met Websigge,\nwo mir {{GRAMMAR:Dative fun|{{SITENAME}}}} nix wigger med ze donn hänn,\nwo mer jät övver Böösher erfaare\nun zom Dëijl och Böösher koufe kann.\nDoför moßß De Desh mannshmool allodengs eetß ennß aanmällde,\nwat Koßte un Jefaare met sesh brenge künndt.\nWo_t jëijdt,\njonn di Lengkß hee tirrägg_op dat Booch,\nwadd_Er am Sööke sidt.",
"booksources-invalid-isbn": "De ISBNummer schingk verkeeht ze sin. Loohr ens donoh, woh se häe kütt.",
"specialloguserlabel": "Dä Metmaacher, dä et jedonn hät:",
"speciallogtitlelabel": "Betroffe wohr: (dä Tittel vun ener Sigg udder enem Metmaacher singe Name)",
"log": "Logböcher ehr Opzeichnunge (all)",
"all-logs-page": "All de öffentlich Logböcher",
- "alllogstext": "Dat hee es en jesamte Liss us all dä Logböcher {{GRAMMAR:en|{{SITENAME}}}}.\nDä Logböcher ehre Enhald ka'mer all noh de Aat, de Metmaacher,\noder de Sigge ehr Name, un esu, einzel zoteet aanluure.\nBei de Name moß mer op Jruß- un Kleinschreff aachjävve.",
+ "alllogstext": "Dat heh es en jesampte Less us all dä Logböhscher {{GRAMMAR:en|{{SITENAME}}}}.\nDä Logböhscher ehre Enhald kam_mer all noh de Aat, de Metmaacher,\noder de Sigge ehr Name, un esu, einzel zoteht aanluhre.\nBei dä Name moß mer op Jruß- un Kleinschreff aachjävve.",
"logempty": "Mer han kein zopaß Endrähsch en däm Logbooch.",
"log-title-wildcard": "Sök noh Titelle, di aanfange met …",
"showhideselectedlogentries": "Ußjesöhk Endrääsch verschteische udder zeije",
@@ -1623,8 +1664,22 @@
"listgrouprights-removegroup-self": "Kann sesch sällver {{PLURAL:$2|eruß nämme uß dä Metmaacherjropp:|uß $2 Metmaacherjroppe eruß nämme:|uß kei Metmaacherjropp eruß nämme.}} $1",
"listgrouprights-addgroup-self-all": "Kann sesch sällver en alle Metmaacherjroppe erenn donn",
"listgrouprights-removegroup-self-all": "Kann sesch sällver uß alle Metmaacherjroppe eruß nämme",
+ "listgrouprights-namespaceprotection-header": "Beschrängkonge för Appachtemangs",
"listgrouprights-namespaceprotection-namespace": "Appachtemang",
+ "listgrouprights-namespaceprotection-restrictedto": "Rääsch(de) zom Verändere",
+ "trackingcategories": "Saachjroppe för täschnsche Saache ze verfollje.",
+ "trackingcategories-summary": "Op hee dä {{int:nstab-special}} sin Saachjroppe opjeleß, di automattesch vum Wikki jevöllt wähde. Dä iehr Nahme künne övver Veränderonge aan beschtemmpte Täxte em Appachtemang {{ns:8}} faßjelaat wäde.",
+ "trackingcategories-msg": "Saachjropp för täschnsche Saache ze verfollje.",
"trackingcategories-name": "Dä Nohreesch udder däm Täxschtöck singe Nahme",
+ "trackingcategories-desc": "Bedengonge för enjeschloße ze sin",
+ "noindex-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne nit opjenumme wähde, weil dat Zauberwoot <code><nowiki>__NOINDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es.",
+ "index-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne opjenumme wähde, weil dat Zauberwoot <code><nowiki>__INDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es, un wat nommahlerwies nit vun de Robots dorschsöhk weed.",
+ "post-expand-template-inclusion-category-desc": "Nohdämm a paa Schablohne enjesaz woode sen, hät di Sigg mieh Dahte wi <code xml:lang=\"en\" lang=\"en\">$wgMaxArticleSize</code> zohlöhß. Et sin nit alle Oprohve vun Schablohne opjelöhß.",
+ "post-expand-template-argument-category-desc": "Di Sigg hät mieh Dahte wi <code xml:lang=\"en\" lang=\"en\">$wgMaxArticleSize</code> zohlöhß, nohdämm dä Wäät för ene Parramehter — jät met drei jeschweifte Klammere drömeröm, wi <code>{{{Dengenskersche}}}</code> — enjesaz woode es.",
+ "expensive-parserfunction-category-desc": "Di Sigg hät zoh vill düüre Befähle met Pahserfonxjuhne, för e Beijschpell esu jät, wi <code xml:lang=\"en\" lang=\"en\">#ifexist</code>. Mih doh drövver schteihd em [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Handbohch].",
+ "broken-file-category-desc": "En dä Sigge sin Lengks dren op Datteje, di mer nit han.",
+ "hidden-category-category-desc": "Di Saachjropp hät dä Befähl <code><nowiki>__HIDDENCAT__</nowiki></code> op ier Saachjroppe_Sigg schtonn. Dröm weed se schtandattmääßesch verschtoche, un nit en dä Leß met de Saachjroppe von dä Sigge aanjezeich, di dren sin.",
+ "trackingcategories-nodesc": "Heh weße mer nix drövver.",
"trackingcategories-disabled": "Di Saachjrobb es afjeschalldt.",
"mailnologin": "Keij E-Mail Adress",
"mailnologintext": "Do mööts ald aanjemeldt un [[Special:UserLogin|enjelogg]] sin, un en jode E-Mail\nAdress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze\nschecke.",
@@ -1660,7 +1715,7 @@
"mywatchlist": "Oppaßleß",
"watchlistfor2": "För dä $1 $2",
"nowatchlist": "En Ding Oppassliss es nix dren.",
- "watchlistanontext": "Do muss $1, domet de en Ding Oppassliss erenluure kanns, oder jet dran ändere.",
+ "watchlistanontext": "Do moß enlogge, domet de en Ding Oppassliss erenluure kanns, oder jet dran ändere.",
"watchnologin": "Nit enjelogg",
"addwatch": "En de Oppassliss don",
"addedwatchtext": "Die Sigg „[[:$1]]“ es jetz en Dinge [[Special:Watchlist|Oppaßleß]].\nWann di Sigg udder ier Klaafsigg verändert weed, kütt dat af jäz heh en di Oppaßleß.",
@@ -1668,20 +1723,20 @@
"removewatch": "Us de Oppassliss nämme",
"removedwatchtext": "Die Sigg „[[:$1]]“ es jetz us de [[Special:Watchlist|Oppassliss]] erusjenomme.",
"removedwatchtext-short": "De Sigg „$1“ es uß Dinge Oppaßleß eruß jenumme.",
- "watch": "Drop Oppasse",
- "watchthispage": "Op die Sigg oppasse",
- "unwatch": "Nimieh drop Oppasse",
- "unwatchthispage": "Nit mieh op die Sigg oppasse",
+ "watch": "Drobb oppaßße",
+ "watchthispage": "Op di Sigg oppaßße",
+ "unwatch": "Nimeh drobb oppaßße",
+ "unwatchthispage": "Nit mih op di Sigg oppaßße",
"notanarticle": "Keine Atikkel",
"notvisiblerev": "Di Version es fottjeschmesse",
"watchlist-details": "Do häß {{PLURAL:$1|ein Sigg|$1 Sigge|kein Sigg}} en Dinge Oppaßleß{{PLURAL:$1|, un di Klaafsigg dohzoh|, un de Klaafsigge dohzoh|}}.",
"wlheader-enotif": "Et <i lang=\"en\">e-mail</i> Schecke es enjeschalt.",
"wlheader-showupdated": "Wann se Einer jeändert hätt, zickdäm De se et letzte Mol aanjeluurt häs, sin die Sigge <strong>extra markeet</strong>.",
- "wlnote": "{{PLURAL:$1|Hee es de letzte Änderung us|Hee sin de letzte <strong>$1</strong> Änderunge us|Mer han kein Äbderunge en}} de letzte {{PLURAL:$2|Stund|<strong>$2</strong> Stunde|<strong>noll</strong> Stunde}} zigg em $3 öm $4 Uhr.",
- "wlshowlast": "Zeich de letzte | $1 | Stunde | $2 | Dage | $3 | aan, dun",
+ "wlnote": "{{PLURAL:$1|Hee es de läzde Änderong uß|Hee sin de läzde <strong>$1</strong> Änderonge uß|Mer han kein Änderonge en}} de läzde {{PLURAL:$2|Stund|<strong>$2</strong> Stunde|<strong>noll</strong> Stunde}} zigg em $3 öm $4 Uhr.",
+ "wlshowlast": "Zeisch de läzde $1 Schtunde, $2 Dähsch aan.",
"watchlist-options": "Eijeschaffte fun de Oppassless",
- "watching": "Drop oppasse…",
- "unwatching": "Nimmieh drop oppasse",
+ "watching": "Drobb oppaßße…",
+ "unwatching": "Nimmih drobb oppaßße",
"watcherrortext": "Ene Fähler es opjetrodde beim Ändere vun de Enshtällonge för Ding Oppaßleß för „$1“",
"enotif_reset": "Saz all Änderonge op „Aanjeluurt“, un fäädesch.",
"enotif_impersonal_salutation": "Metmaacher {{GRAMMAR:Genitiv vun|{{SITENAME}}}}",
@@ -1708,8 +1763,8 @@
"exbeforeblank": "drop stundt vörher: „$1“",
"delete-confirm": "„$1“ fottschmieße",
"delete-legend": "Fottschmieße",
- "historywarning": "<strong>Opjepass:</strong> Die Sigg, di De fott schmiiße wells, hät {{PLURAL:$1|ein ällder Version|ald Stöcker $1 ällder Versione|jaa kei ällder Versione}}.",
- "confirmdeletetext": "Do bes koot dovör, en Sigg för iwich fottzeschmieße. Dobei verschwind och de janze Verjangenheit vun dä Sigg us de Daatebank, met all ehr Änderunge un Metmaacher Name, un all dä Opwand, dä do dren stich. Do muss heh jetz bestätije, dat de versteihs, wat dat bedügg, un dat De weiß, wat Do do mähs.\n<strong>Dun et nor, wann dat met de [[{{MediaWiki:Policy-url}}|Rejelle]] wirklich zosamme jeiht!</strong>",
+ "historywarning": "<strong>Opjepass:</strong> Die Sigg, di De fott schmiiße wells, hät {{PLURAL:$1|ein ällder Väsjohn|ald $1 ällder Väsjohne|jaa kein ällder Väsjohne}}.",
+ "confirmdeletetext": "Do bes koot dovör, en Sigg för iiwich fottzeschmiiße. Dobei verschwind och de janze Verjangeheit vun dä Sigg us de Dahtebangk, met all ehr Änderonge un Metmaacher Nahme, un all dä Opwand, dä do dren stich. Do moß heh jäz beschtähteje, dat de verschteihs, wat dat bedügg, un dat De weiß, wat Do do mähs.\n<strong>Dun et blohß, wann dat met de [[{{MediaWiki:Policy-url}}|Rääjelle]] verhaftech zosamme jeiht!</strong>",
"actioncomplete": "Jedonn!",
"actionfailed": "Dat es donevve jejange",
"deletedtext": "De Sigg „$1“ es jetz fottjeschmesse woode. Luur Der „$2“ aan, do häs De en Liss met de Neuste fottjeschmesse Sigge.",
@@ -1724,9 +1779,9 @@
"delete-edit-reasonlist": "De Jrönde för et Fottschmieße beärbeide",
"delete-toobig": "Di Sigg hät {{PLURAL:$1|ein Version|$1 Versione|jaa kein Version}}. Dat sinn_er ärsch fill. Domet unsere ẞööver do nit draan en de Kneen jeit, dom_mer esu en Sigg nit fottschmieße.",
"delete-warning-toobig": "Di Sigg hät {{PLURAL:$1|ein Version|$1 Versione|jakein Version}}. Dat sinn_er ärsch fill. Wann De die all fottschmieße wells, dat kann dem Wiki sing Datenbangk schwer ußbremse.",
- "deleting-backlinks-warning": "<strong>Opjepaß:</strong> Es jitt Sigge met Lenks noh heh doh, udder Sigge, di heh di Sigg enbenge!",
+ "deleteprotected": "Di Sigg es jeschöz, un dröm kam_mer se nit fott schmiiße.",
+ "deleting-backlinks-warning": "<strong>Opjepaß:</strong> Es jitt Sigge met Lengks noh heh, udder Sigge, di heh di Sigg enbenge!",
"rollback": "Em Letzte sing Änderunge zeröcknemme",
- "rollback_short": "Zeröcknemme",
"rollbacklink": "All dem Letzte sing Änderunge zeröckdriehe",
"rollbacklinkcount": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderonge}} schtantepee retuur nämme",
"rollbacklinkcount-morethan": "{{PLURAL:$1|Mieh wi ein Änderong|Övver $1 Änderonge|Kein Änderonge}} schtantepee retuur nämme",
@@ -1762,7 +1817,7 @@
"protect-locked-blocked": "Do kanns nit der Siggeschotz ändere, esu lang wi Dinge Zojang zom Wiki jesperrt es. Hee es der aktuelle Stand fum Siggeschotz för di Sigg '''„$1“:'''",
"protect-locked-dblock": "De Datebank es jesperrt. Dröm künne mer der Siggeschotz nit ändere.\nHee es der aktuelle Stand fum Siggeschotz för di Sigg '''„$1“:'''",
"protect-locked-access": "Do häs nit dat Rääsch, heh em Wiki Sigge ze schötze udder dä Schotz widder opzehevve.\nDi Sigg '''„$1“:''' es jetz jrad:",
- "protect-cascadeon": "Die Sigg es en enne Schotz-Kaskad. Se es enjebonge en {{PLURAL:$1|die Sigg|$1 Sigge|kein Sigg}}, die per Kaskade-Schotz jeschötz {{PLURAL:$1|es|sin|es}}. Do kanns dä Schotz för die Sigg heh ändere, ävver di Kaskad blief bestonn. Dat heh sin die Sigge en dä Kaskad:",
+ "protect-cascadeon": "Die Sigg es en enne Schotz-Kaskad. Se es enjebonge en {{PLURAL:$1|einSigg|$1 Sigge|kein Sigg}}, die per Kaskade-Schotz jeschötz {{PLURAL:$1|es|sin|es}}. Do kanns dä Schotz för die Sigg heh ändere, ävver di Kaskad blief bestonn.",
"protect-default": "Jeede Metmaacher eraan lohße",
"protect-fallback": "Do weet dat Rääsch „$1“ jebruch.",
"protect-level-autoconfirmed": "Bloß de automattesch beschtääteschte Metmaacher dranlooße",
@@ -1776,6 +1831,7 @@
"protect-othertime": "En ander Door:",
"protect-othertime-op": "en ander Door",
"protect-existing-expiry": "Beß am $2 öm $3 Uhr",
+ "protect-existing-expiry-infinity": "Dä schöz bliev em momang för iewisch beschtonn.",
"protect-otherreason": "En andere udder zosätzlijje Jrund:",
"protect-otherreason-op": "Ene andere udder zosätzlijje Jrond",
"protect-dropdown": "* Jewöhnlijje Jrönd för dä Sigge-Schotz\n** ußerjewöhnlesch fill Kapottmaacherei\n** ußerjewöhnlesch fill SPAMlinks op ander Sigge wäde neu enjedraare\n** Hen- un her-Änderei, woh mer süht, dat nix mieh joods erus kumme weed\n** janz weschtejje Sigg, met ußerjewöhnlesch fill Afroofe",
@@ -1810,7 +1866,7 @@
"undeletebtn": "Zeröckholle!",
"undeletelink": "aanloore odder widder zeröckholle",
"undeleteviewlink": "aanloore",
- "undeleteinvert": "De Ußwahl ömdrije",
+ "undeleteinvert": "De Ußwahl ömdrihje",
"undeletecomment": "Jrond (för en et Logboch):",
"undeletedrevisions": "{{PLURAL:$1|ein Version|$1 Versione}} zeröckjehollt",
"undeletedrevisions-files": "Zesammejenomme {{PLURAL:$1|Ein Version|<strong>$1</strong> Versione|<strong>Kein</strong> Version}} vun {{PLURAL:$2|eine Datei|<strong>$2</strong> Dateie|<strong>nix</strong>}} zeröckjehollt",
@@ -1832,10 +1888,11 @@
"undelete-error-long": "Mer wollte en Datei widder zeröckholle, ävver dobei sin_er Fääler opjefalle:\n\n$1",
"undelete-show-file-confirm": "Wells De dä Datei „<nowiki>$1</nowiki>“ ier fottjeschmesse Version vum $2 öm $3 Uhr verhaftesch sinn?",
"undelete-show-file-submit": "Jo",
- "namespace": "Appachtemeng:",
- "invert": "dun de Uswahl ömdrije",
+ "namespace": "Appachtemang:",
+ "invert": "don di Ußwahl ömdrihje",
"tooltip-invert": "Maach e Höhksche, öm Änderonge aan Sigge en däm ußjewählte Appachtemang — un däm, wat doh zohjehööt, wann doh och e Höhksche es — nit aanzezeije, ävver doför uß all de andre Appachtemangs.",
- "namespace_association": "mem zohjehüüreje Appachtemang",
+ "tooltip-whatlinkshere-invert": "Maach heh e Höhksche, öm de Lengks ze verschteische, di vun de Sigge en dämm usjesöhkte Appachtemang ußjonn.",
+ "namespace_association": "mem zohjehühreje Appachtemang",
"tooltip-namespace_association": "Maach e Höhksche, öm dat Appachtemang, wat zom ußjewählte Appachtemang doh zohjehööt — entweeder de Klaafsigge udder de nomaale Sigge — zohsäzlesch ußzewähle.",
"blanknamespace": "(Atikkele)",
"contributions": "{{GENDER:$1|Däm Metmaacher|Däm|Däm Metmaacher|Dä Metmaacherėn|Däm}} $1 {{GENDER:$1|singe|singe|singe|iere|singe}} Beidräch",
@@ -1884,7 +1941,7 @@
"autoblockid": "Automattesche Sperr Nommer $1",
"block": "Metmaacher udder en <i lang=\"en\">IP</i>-Addräß sperre",
"unblock": "Don en Sperr för ene Metmaacher udder en <i lang=\"en\">IP</i>-Addräß ophävve",
- "blockip": "Metmaacher sperre",
+ "blockip": "{{GENDER:$1|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher|De Metmaacherėn|Dä Metmaacher}} schpärre",
"blockip-legend": "Metmaacher ov IP-Adresse Sperre",
"blockiptext": "Hee kanns De bestemmte Metmaacher oder IP-Adresse sperre, su dat se hee em Wiki nit mieh schrieve und Sigge ändere künne.\nDat sollt nor jedon wääde om sujenannte Vandaale ze bremse. Un mer müsse uns dobei natörlich aan uns [[{{MediaWiki:Policy-url}}|Rejelle]] för esu en Fäll halde.\nDrag bei „Aanlass“ ene möchlichs jenaue Jrund en, wöröm dat Sperre passeet. Nenn un Link op de Sigge wo Einer kapott jemaat hät, zem Beispill.",
"ipaddressorusername": "<i lang=\"en\">IP</i>-Adress oder Metmaacher Name:",
@@ -1899,7 +1956,7 @@
"ipbother": "För en ander Duur:",
"ipboptions": "2 Stund:2 hours,1 Dach:1 day,3 Däch:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Mond:1 month,3 Mond:3 months,6 Mond:6 months,1 Johr:1 year,Unbejrenz:infinite",
"ipbhidename": "Don däm Metmaacher singe Name versteiche, en de Leste un däm sing Änderunge.",
- "ipbwatchuser": "Op däm Metmaacher sing Metmaachersigg un Klaafsigg oppasse",
+ "ipbwatchuser": "Op däm Metmaacher sing Metmaachersigg un Klaafsigg oppaßße",
"ipb-disableusertalk": "Dä Metmaacher darf sing Klaafsigg nit ändere, esulang, wi hä jwesperrt es",
"ipb-change-block": "Wigger sperre met dä neue Enstellunge",
"ipb-confirm": "Et Sperre beshtäätejje",
@@ -1913,13 +1970,14 @@
"ipb-unblock-addr": "„$1“ widder zohlohße",
"ipb-unblock": "En IP-Addräß ov ene Metmaacher widder zohlohße",
"ipb-blocklist": "All de Sperre för Metmaacher un IP-Adresse aanzeije, die jrad bestonn",
- "ipb-blocklist-contribs": "De Metmaacher ier Bäjdrähsch för „$1“",
+ "ipb-blocklist-contribs": "{{GENDER:$1|Däm|Däm|Däm Metmaacher|Dä|Däm}} $1 {{GENDER:$1|sing|singe|sing|iere|sing}} Bäjdrähsch",
"unblockip": "Dä Medmacher widder maache looße",
"unblockiptext": "Heh kanns De vörher jesperrte IP_Adresse oder Metmaacher widder freijevve, un dänne esu dat Rääch för ze Schrieve heh em Wiki widder jevve.",
"ipusubmit": "Sperr ophevve!",
"unblocked": "[[User:$1|$1]] wood widder zojelooße",
"unblocked-range": "Dä Berett $1 es nit mieh jesperrt.",
"unblocked-id": "De Sperr met dä Nommer $1 es opjehovve",
+ "unblocked-ip": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dä}} [[Special:Contributions/$1|$1]] es jäz nit mieh jeschpächt.",
"blocklist": "De Leß met jesperrte <i lang=\"en\">IP</i>-Adräße un Metmaacher",
"ipblocklist": "Leß met jesperrte <i lang=\"en\">IP</i>-Adresse un Metmaacher",
"ipblocklist-legend": "Ene jesperrte Metmaacher fenge",
@@ -2018,7 +2076,7 @@
"cant-move-category-page": "Do häß nit dat Rääsch, Saachjroppesigge ömzebenänne.",
"cant-move-to-category-page": "Do häß nit dat Rääsch, en Sigg obb en Saachjroppesigg ömzebenänne.",
"newtitle": "op dä neue Name",
- "move-watch": "Op die Sigg heh oppasse",
+ "move-watch": "Op di Sigg heh oppaßße",
"movepagebtn": "Ömnenne",
"pagemovedsub": "Dat Ömnenne hät jeflupp",
"movepage-moved": "'''De Sigg „$1“ es jez en „$2“ ömjenannt.'''",
@@ -2067,7 +2125,7 @@
"exportcuronly": "Bloß de aktuelle Version usjevve (un <strong>nit</strong> de janze ahle Versione onoch met dobei dun)",
"exportnohistory": "----\n<strong>Opjepass:</strong> de janze Versione Exporteere es heh em Wiki avjeschalt. Schad, ävver et wör en\nzo jroße Lass för dä ẞööver.",
"exportlistauthors": "Donn en kumpläte Lėß met dä Schriiver för en Sigg dobei",
- "export-submit": "Loss_Jonn!",
+ "export-submit": "Lohß Jonn!",
"export-addcattext": "Sigge dobei donn us dä Saachjrupp:",
"export-addcat": "Dobei donn",
"export-addnstext": "Sigge dobei donn uß dämm Appachtemang:",
@@ -2087,7 +2145,7 @@
"allmessages-filter-all": "ejaal",
"allmessages-filter-modified": "heh em Wiki jeändert",
"allmessages-prefix": "Name fängk aan met:",
- "allmessages-language": "Schprooch:",
+ "allmessages-language": "Schprohch:",
"allmessages-filter-submit": "Lohß Jonn!",
"allmessages-filter-translate": "Övversäze!",
"thumbnail-more": "Jrößer aanzeije",
@@ -2099,15 +2157,17 @@
"thumbnail-temp-create": "Mer kunnte kein Zweschedattei für Minnibeldscher aanlääje.",
"thumbnail-dest-create": "Mer kunnte kein Minnibeldscher faßhallde, woh se hen sulle.",
"thumbnail_invalid_params": "Ene Parameter för et Breefmarke-Belldsche (<i lang=\"en\">thumbnail</i>) Maache wohr nit en Odenung",
+ "thumbnail_toobigimagearea": "Dattei met mieh wi $1",
"thumbnail_dest_directory": "Dat Verzeichnis för dat erin ze donn kunte mer nit aanlääje.",
"thumbnail_image-type": "Di Zoot Beld künne mer nit met ömjonn",
"thumbnail_gd-library": "Vun dä <i lang=\"en\">GD</i> Projramm_Biplijotheek fäählt en Funkßuhn: „$1“",
"thumbnail_image-missing": "Di Datei schingk nit doh ze sin: <code>$1</code>",
"thumbnail_image-failure-limit": "Mieh wi {{PLURAL:$1|eine Versohch|$1 Versohche|keine Versohch}} dat Minnibelldsche ze zeije. Versöhg_et schpääder widder.",
"import": "Sigge Emporteere",
- "importinterwiki": "Trans Wiki Emport",
- "import-interwiki-text": "Wähl en Wiki un en Sigg zem Emporteere us.\nEt Datum vun de Versione un de Metmaacher Name vun de Schriever wääde dobei metjenomme.\nAll de Trans Wiki Emporte wääde em [[Special:Log/import|Emport_Logboch]] fassjehallde.",
- "import-interwiki-source": "Quelle-Wiki un -Sigg:",
+ "importinterwiki": "Empottehre uss_enem andere Wikki",
+ "import-interwiki-text": "Wähl e Wikki un en Sigg zem Emportehre uß.\nEt Dattum vun de Väsiohne un de Metmaacher_Nahme vun de Schriever wähde dobei metjenomme.\nAll de Empochte vun andere Wikkis wähde em [[Special:Log/import|Logbohch vum Empottehre]] faßjehallde.",
+ "import-interwiki-sourcewiki": "Vum Wikki:",
+ "import-interwiki-sourcepage": "Vun dä Sigg:",
"import-interwiki-history": "All de Versione vun dä Sigg heh kopeere",
"import-interwiki-templates": "All Schablone metnämme",
"import-interwiki-submit": "Huhlade!",
@@ -2125,7 +2185,7 @@
"importcantopen": "Kunnt op de Datei för dä Emport nit zojriefe",
"importbadinterwiki": "Verkihrte Interwiki Link",
"importsuccess": "Dat Emporteere hät jeflupp!",
- "importnosources": "Heh es kein Quell för dä Tikek-Emport vun ander Wikis enjerich.\nDat ahle Versione Huhlade es avjeschalt, un es nit müjjelich.",
+ "importnosources": "Heh es kein Wikki för_enne tiräkte Empoot enjereesch.\nÄllder Väsjohne huhzelade es nit zohjelohße.",
"importnofile": "Et wood kein Datei huhjelade för ze Emporteere.",
"importuploaderrorsize": "De Import-Datei huhzelade jingk scheif, weil dat Denge jrößer wi äloup es.",
"importuploaderrorpartial": "De Import-Datei huhzelade jingk scheif, weil dat Denge nit komplett zo eng transpotteet woode es. Do fäählt jet.",
@@ -2137,29 +2197,27 @@
"import-upload": "En XML-Datei impochteere",
"import-token-mismatch": "Schadt. Et senn nit alle Date heh aanjekumme.\nBes esu joot, un versök et noch ens.",
"import-invalid-interwiki": "Us dämm jenannte Wiki künne mer nix Importeere.",
- "import-error-edit": "Di Sigg „$1“ es nit impoteet woode. Do häs nit et Rääsch, se ze ändre.",
- "import-error-create": "Di Sigg „$1“ es nit impoteet woode. Do häs nit et Rääsch, se aanzlääje.",
- "import-error-interwiki": "Di Sigg „$1“ weed nit empoteet, weil dä iehre Name för et Verlengke noh ußerhallef, pä Engerwiki-Lengk, jebruch weed.",
- "import-error-special": "Di Sigg „$1“ weed nit empoteet, weil dä iehre Name en enem besöndere Appachtemang litt, woh kein Sigge dren zohjelohße sin.",
- "import-error-invalid": "Di Sigg „$1“ weed nit empoteet, weil dä iehre Name nit jöltesch es.",
+ "import-error-edit": "Di Sigg „$1“ es nit impotehrt woode. Do häs nit et Rääsch, se ze ändere.",
+ "import-error-create": "Di Sigg „$1“ es nit impotehrt woode. Do häs nit et Rääsch, se aanzelähje.",
+ "import-error-interwiki": "Di Sigg „$1“ weed nit empotehrt, weil dä iehre Name för et Verlengke noh ußerhallef, pä Engerwikilengk, jebruch weed.",
+ "import-error-special": "Di Sigg „$1“ weed nit empotehrt, weil dä iehre Name en enem besöndere Appachtemang litt, woh kein Sigge dren zohjelohße sin.",
+ "import-error-invalid": "Di Sigg „$1“ weed nit empotehrt, weil dä Sigg iehre Name, woh se hen empotehrt wääde sull, nit jöltesch es.",
"import-error-unserialize": "De Väsjohn $2 vun dä Sigg „$1“ kunnt nit von serijäll ußjepack wääde. De Väsjohn sull Daate vun dä Zoot „$3“ änthallde un ußjepack „$4“ jävve.",
+ "import-error-bad-location": "De Väsjohn $2 mem Enhalldsmodäll $3 künne mer nit als Sigg „$1“ heh em Wikki faßjehallde wähde, weil dat Modäll vum Enhallt för di Sigg nit ongerschtöz weed.",
"import-options-wrong": "{{PLURAL:$2|En verkiehrte Aanjab|Verkiehrte Aanjabe|Kein verkiehrte Aanjabe}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "Di aanjejovve Aanfangssigg hät keine jölteje Tittel.",
"import-rootpage-nosubpage": "Em Appachtemang „$1“ vun dä Aanfangssig sin kein Ongersigge zohjelohße.",
"importlogpage": "Logboch met emporteerte Sigge",
"importlogpagetext": "Sigge met ehre Versione vun ander Wikis emporteere.",
- "import-logentry-upload": "„[[$1]]“ emporteet fun enne huhjelade Dattei",
- "import-logentry-upload-detail": "{{PLURAL:$1|ein Version|$1 Versione|kein Version}} emporteet",
- "import-logentry-interwiki": "hät tirek vum ander Wiki emporteet: „$1“",
- "import-logentry-interwiki-detail": "{{PLURAL:$1|ein Version|$1 Versione|kein Version}} vun „$2“",
+ "import-logentry-upload-detail": "{{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohn}} woodt emportehrt.",
+ "import-logentry-interwiki-detail": "{{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein VVäsjohnersion}} woodt empottehrt vun „$2“",
"javascripttest": " JavaSkrepte ußprobeere.",
- "javascripttest-title": "De Prööfunge „$1“ loufe.",
"javascripttest-pagetext-noframework": "Heh di Sigg es för JavaSkrepte ußzeprobeere.",
"javascripttest-pagetext-unknownframework": "Dä Prööfrahme „$1“ es onbikannt.",
+ "javascripttest-pagetext-unknownaction": "„$1“ es ene onbikannte Opdracht.",
"javascripttest-pagetext-frameworks": "Bes esu jood un söök eine vun dä Prööfömjävvonge us: $1",
"javascripttest-pagetext-skins": "Sööke en Bovverfläsch udder et Ußsinn uß, öm di Prööfonge domet ze maache:",
"javascripttest-qunit-intro": "Loor noh dä [$1 Dokemäntation övver et Prööfe] op mediawiki.org.",
- "javascripttest-qunit-heading": "De Sammlong vum MediaWiki sing JavaSkrep-<i lang=\"en\">QUnit</i>-Pröövunge",
"tooltip-pt-userpage": "Don Ding eije Metmaachersigg aanzeije",
"tooltip-pt-anonuserpage": "Metmaachersigg för die IP-Adress, vun wo uß De jraad Ding Änderunge un Äjänzunge aam Wiki am maache bes",
"tooltip-pt-mytalk": "Dun Ding eije Klaafsigg aanzeije",
@@ -2169,6 +2227,7 @@
"tooltip-pt-mycontris": "en Liss met Dinge eije Beidräch",
"tooltip-pt-login": "Do moß Desch nit Enlogge, kannz_E ävver jähn maache!",
"tooltip-pt-logout": "Ußlogge",
+ "tooltip-pt-createaccount": "mer schlonn vör, dat De Desch aanmällde deihs un ennloggs, ävver müüdesch es et nit.",
"tooltip-ca-talk": "Dun die Sigg met däm Klaaf övver heh de Sigg aanzeije",
"tooltip-ca-edit": "De kanns die Sigg heh ändere — für em Avspeichere, donn eetß ens enen Bleck op de Vör-Aansich",
"tooltip-ca-addsection": "Donn heh enne neue Afschnett opmaache.",
@@ -2198,6 +2257,7 @@
"tooltip-feed-atom": "Dä Atom-Abonnomang-Kannal (Feed) för heh di Sigg",
"tooltip-t-contributions": "Donn en Leß met dä Bedrähsch vun däm Medmaacher belooere",
"tooltip-t-emailuser": "Scheck en E-Mail aan dä Metmaacher",
+ "tooltip-t-info": "Mieh Aanjahbe övver heh di Sigg",
"tooltip-t-upload": "Dateie huhlade",
"tooltip-t-specialpages": "Liss met de {{int:nstab-special}}e",
"tooltip-t-print": "De Drock-Aansich för heh die Sigg",
@@ -2217,12 +2277,12 @@
"tooltip-preview": "Liss de Vör-Aansich vun dä Sigg un vun Dinge Änderunge ih datte se Avspeichere deis!",
"tooltip-diff": "Zeich Ding Änderunge am Tex aan.",
"tooltip-compareselectedversions": "Dun de Ungerscheid zwesche dä beids usjewählde Versione zeije.",
- "tooltip-watch": "Op die Sigg heh oppasse.",
+ "tooltip-watch": "Op di Sigg heh oppaßße.",
"tooltip-watchlistedit-normal-submit": "Donn de Titele met Hökche eruß schmieße.",
"tooltip-watchlistedit-raw-submit": "Oppassliss neu fasshallde",
"tooltip-recreate": "En fottjeschmesse Sigg widder zeröckholle",
"tooltip-upload": "Mem Dattei-Huhlaade loßlääje",
- "tooltip-rollback": "Nemmp alle Änderunge zeröck, di dä Läzde jemaat hät, dä aan dä Sigg övverhoup jet jedonn hät. Deit nimmieh frore un määd ene automattesche Endraach en „{{int:Summary}}“",
+ "tooltip-rollback": "Nemmp alle Änderonge zeröck, di dä Läzde jemaat hät, dä aan dä heh Sigg övverhoup jet jedonn hät. Deiht nimmieh frohre, un mähd automattesch ene Endraach onger „{{int:Summary}}“ en et Logbohch eren.",
"tooltip-undo": "„{{UCfirst:{{int:editundo}}}}“ määt der förije Zostand\nfun dä Sigg op, zom Beärbeide un widder Afspeichere.\nEsu kam_mer noch en Aanmärkong en „{{int:summary}}“ maache.",
"tooltip-preferences-save": "Enstellunge faßhallde",
"tooltip-summary": "Jif en koote Zesammefassung en",
@@ -2231,11 +2291,13 @@
"print.css": "/* CSS heh aan dä Stell wirrek nur op et Sigge Drökke */",
"noscript.css": "/* Dat CSS heh aan dä Stell krijje nur de Metmaacher met affjeschaldt JavaSkrepp jescheck */",
"group-autoconfirmed.css": "/* Dat CSS heh aan dä Stell krijje nur de automattesch beshtääteshte Metmacher jescheck */",
+ "group-user.css": "/* Dat CSS heh aan dä Schtäll wirrek sesch nur op de enjeloggte Metmaacher uß */",
"group-bot.css": "/* Dat CSS heh aan dä Stell krijje nur de Bot-Projrammee jescheck */",
"group-sysop.css": "/* Dat CSS heh aan dä Stell krijje nur dem Wiki sing Köbeße jescheck */",
"group-bureaucrat.css": "/* Dat CSS heh aan dä Stell krijje nur de Bürrokraate jescheck */",
"common.js": "/* Jedes JavaScrip hee kütt för jede Metmaacher in jede Sigg erinn */",
"group-autoconfirmed.js": "/* De JavaSkreppte fun hee krijje bloß de autemattesch beshtääteschte Metmaacher jescheck */",
+ "group-user.js": "/* De JavaSkreppte heh aan dä Schtäll wirrek sesch nur op de enjeloggte Metmaacher uß */",
"group-bot.js": "/* De JavaSkreppte fun hee krijje bloß de Bots jescheck */",
"group-sysop.js": "/* De JavaSkreppte fun hee krijje bloß de Wiki_Köbeße jescheck */",
"group-bureaucrat.js": "/* De JavaSkreppte fun hee krijje bloß de Bürrokraate jescheck */",
@@ -2267,17 +2329,16 @@
"pageinfo-default-sort": "Shtandattmääßesch zottiere met däm Schlößel",
"pageinfo-length": "Bytes en dä Sigg",
"pageinfo-article-id": "Dä Sigg ier Nommer en dä Daatebangk",
- "pageinfo-language": "De Schprooch vum Sigge-Enhallt",
+ "pageinfo-language": "De Schprohch vum Enhallt vun dä Sigg",
"pageinfo-content-model": "Et Modäll för der Enhalld vun dä Sigg",
- "pageinfo-robot-policy": "Et opnämme es för Söhkmaschiine",
+ "pageinfo-robot-policy": "Et Opnämme es för Söhkmaschihne",
"pageinfo-robot-index": "zohjelohße",
"pageinfo-robot-noindex": "verbodde",
- "pageinfo-views": "De Aanzahl Affroofe",
- "pageinfo-watchers": "De Aanzahl Oppaßer för di Sigg",
+ "pageinfo-watchers": "De Aanzahl Oppaßßer för di Sigg",
"pageinfo-few-watchers": "Et jidd_er winnijer wi {{PLURAL:$1|eine|$1|keine}} Oppaßer.",
- "pageinfo-redirects-name": "Ömleidong(e) op heh di Sigg",
- "pageinfo-subpages-name": "Ongersigg(e) vun heh dä Sigg",
- "pageinfo-subpages-value": "$1 (dovun {{PLURAL:$2|ein Ömleidong|$2 Ömleidonge|kein Ömleidong}} un {{PLURAL:$3|ein nomaale Sigg|$3 nomaale Sigge|kein nomaale Sigg}})",
+ "pageinfo-redirects-name": "Ömleidonge op heh di Sigg",
+ "pageinfo-subpages-name": "Ongersigge vun heh dä Sigg",
+ "pageinfo-subpages-value": "$1 (dovun {{PLURAL:$2|ein Ömleidong|$2 Ömleidonge|kein Ömleidong}} un {{PLURAL:$3|ein nomahle Sigg|$3 nomahle Sigge|kein nomahle Sigg}})",
"pageinfo-firstuser": "Aanjelaat vun",
"pageinfo-firsttime": "Aanjelaat aam",
"pageinfo-lastuser": "Dä läzde Schriiver",
@@ -2529,7 +2590,7 @@
"exif-objectcycle": "De Daachszick, för wann dat Denge zom Verdeile jedaach es",
"exif-contact": "Kuntak",
"exif-writer": "Schriiver",
- "exif-languagecode": "Schprooch",
+ "exif-languagecode": "Schprohch",
"exif-iimversion": "Dem <i lang=\"en\">IIM</i> sing Version",
"exif-iimcategory": "Saachjrupp udder Zoot",
"exif-iimsupplementalcategory": "Extra Saachjroppe udder Zoote",
@@ -2721,6 +2782,7 @@
"exif-dc-type": "Meedije_Zoot",
"exif-rating-rejected": "Affjelehnt",
"exif-isospeedratings-overflow": "Övver 65535",
+ "exif-maxaperturevalue-value": "$1 <i lang=\"en\" xml:lang=\"en\" title=\"Öffnong\">APEX</i> (f/$2)",
"exif-iimcategory-ace": "Kunß, Kultuur, Vermaache",
"exif-iimcategory-clj": "Verbräsche, Rääsch",
"exif-iimcategory-dis": "Onjlöck, Onfäll, Kattaßtroofe",
@@ -2742,7 +2804,6 @@
"exif-urgency-low": "Klein ($1)",
"exif-urgency-high": "Huh ($1)",
"exif-urgency-other": "Selfs faßjelaat ($1)",
- "watchlistall2": "all",
"namespacesall": "all",
"monthsall": "all",
"confirmemail": "E-Mail Adress bestätije",
@@ -2815,6 +2876,15 @@
"size-exabytes": "$1&nbsp;EB",
"size-zetabytes": "$1&nbsp;ZB",
"size-yottabytes": "$1&nbsp;YB",
+ "size-pixel": "$1&nbsp;Pixelle",
+ "size-kilopixel": "$1&nbsp;Killopixelle",
+ "size-megapixel": "$1&nbsp;Mejapixelle",
+ "size-gigapixel": "$1&nbsp;Jijapixelle",
+ "size-terapixel": "$1&nbsp;Terapixelle",
+ "size-petapixel": "$1&nbsp;Petapixelle",
+ "size-exapixel": "$1&nbsp;Exapixelle",
+ "size-zetapixel": "$1&nbsp;Zetapixelle",
+ "size-yottapixel": "$1&nbsp;Yottaixelle",
"bitrate-bits": "$1&nbsp;bps",
"bitrate-kilobits": "$1&nbsp;Kbps",
"bitrate-megabits": "$1&nbsp;Mbps",
@@ -2824,8 +2894,8 @@
"bitrate-exabits": "$1&nbsp;Ebps",
"bitrate-zetabits": "$1&nbsp;Zbps",
"bitrate-yottabits": "$1&nbsp;Ybps",
- "lag-warn-normal": "Änderunge us de letzte {{PLURAL:$1|Sekund|$1 Sekunde|knappe Sekund}} sin en dä Leß wall noch nit opjenomme.",
- "lag-warn-high": "Dä Datebankßööver hät jrad vill ze donn.\nÄnderunge us de letzte {{PLURAL:$1|Sekund|$1 Sekunde|knappe Sekund}} sin dröm en dä Leß heh wall noch nit opjenomme.",
+ "lag-warn-normal": "Änderonge uß de läzde {{PLURAL:$1|Sekond|$1 Sekuode|knappe Sekond}} sin en dä Leß wall noch nit opjenomme.",
+ "lag-warn-high": "Dä Datebankßööver hät jrad vill ze donn.\nÄnderonge uß de läzde {{PLURAL:$1|Sekond|$1 Sekonde|knappe Sekond}} sin dröm en dä Leß heh wall noch nit opjenomme.",
"watchlistedit-normal-title": "Oppassliss beärbeijde",
"watchlistedit-normal-legend": "Titell uß de Oppassliss eruß lohße",
"watchlistedit-normal-explain": "Dat sin de Endräsch en Dinge Oppaßleß.\nÖm einzel Titelle loßß ze wääde, don Hökche en de Kässjer nevve inne maache, un dann deuß De dä Knopp „{{int:watchlistedit-normal-submit}}“.\nDo kanns Ding Oppassleß och [[Special:EditWatchlist/raw|en rüh beärbeide]].",
@@ -2867,11 +2937,12 @@
"hebrew-calendar-m12": "Elul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Klaafe]])",
"timezone-utc": "<i lang=\"en\">UTC</i>",
- "unknown_extension_tag": "„<code>$1</code>“ es en zosäzlejje Kennzeichnung, die kenne mer nit.",
"duplicate-defaultsort": "'''Opjepaß:'''\nDä Shtanndat-Zoot-Schlößel „$1“ övverschriif dä älldere Zoot-Schlößel „$2“.",
+ "duplicate-displaytitle": "<strong>opjepaß:</strong> Dä Nahme „$2“ övverschriev dä fröjere Nahme „$1“ för zem Aanzeije.",
+ "invalid-indicator-name": "<strong>Fähler:</strong> De Eijeschaff <code xml:lang=\"en\" lang=\"en\">name</code> vun däm Kännzeijsche för der Zohschtand för die Sigg darf nit läddesch sin.",
"version": "Väsjohn vun de Wiki Soffwär zeije",
"version-extensions": "Installeete Erjänzunge un Zohsätz",
- "version-skins": "Ovverflääsche",
+ "version-skins": "De enschtallehrte Bedeenbovverflääsche",
"version-specialpages": "{{int:nstab-special}}e",
"version-parserhooks": "De Parser-Hooke",
"version-variables": "Variable",
@@ -2884,9 +2955,9 @@
"version-parser-function-hooks": "Parserfunktione",
"version-hook-name": "De Schnettstelle ier Name",
"version-hook-subscribedby": "Opjeroofe vun",
- "version-version": "(Väsjohn $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[keine Nahme]",
- "version-license": "MediaWiki sing Lėzänz",
+ "version-license": "MehdijaWikki sing Lėzänz",
"version-ext-license": "‎Lėzänz",
"version-ext-colheader-name": "Zohsazprojramm",
"version-skin-colheader-name": "Et Ußsinn",
@@ -2911,6 +2982,9 @@
"version-entrypoints-header-url": "<i lang=\"en\">URL</i>",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Der Pad noh de Atikele]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Der Pad noh de Skrepte]",
+ "version-libraries": "Enschtallehrte Projrammsammlonge",
+ "version-libraries-library": "Projrammsammlong",
+ "version-libraries-version": "Väsjohn",
"redirect": "Ömleide op en Dattei, ene Metmaacher udder de Väsjohn vun ener Sigg",
"redirect-legend": "Ömleide ob_en Dattei udder Sigg",
"redirect-summary": "Heh di {{int:specialpage}} leidt öm ob_en Dattei — doh mößd_Er ene Nahme aanjävve, för e Beischpell:[[{{#Special:Redirect}}/file/Example.jpg]] — udder en Sigg — doh mößd_Er en Kännong för, udder en Väsjuhn aanjävve, för e Beischpell esu: [[{{#Special:Redirect}}/page/64308]] udder [[{{#Special:Redirect}}/revision/328429]] — udder en Metmaachersigg — doh mößd_Er enem Metmaacher sing Kännong aanjävve, för e Beischpell: [[{{#Special:Redirect}}/user/101]].",
@@ -2946,23 +3020,67 @@
"specialpages-group-wiki": "Werrekzüch un Daate vum Syßteem",
"specialpages-group-redirects": "{{int:nstab-special}}e, die ömleide, söhke, un fenge",
"specialpages-group-spam": "Werrekzüch jäje SPÄM",
+ "specialpages-group-developer": "Werkzüch fö Entwecklere",
"blankpage": "Vakat-Sigg",
"intentionallyblankpage": "Op dä Sigg es med Afseesh nix drop.",
"external_image_whitelist": "# Donn aan dä Reih heh nix ändere<pre>\n# Onge künne Brochstöke fun rejolähre Ußdrök aanjejovve wäde,\n# alsu dä Deil zwesche / und /\n# Noh em Verjliische met däm URL vun ene Datei fun ußerhallef:\n# Treffer: De Datei weed jezeich odder enjebonge.\n# Söns: ene Link weed aanjezeich.\n# Wam_mer et nit ömschtällt, es Jruß- un Kleinschrevv_ejaal.\n# Reije met # am Aanfang, sen bloß Kommenta\n# Donn de Brochstöck heh noh endrare, un di Reihe bes hee nit ändere</pre>",
"tags": "De jöltijje Makeerunge för Änderunge",
- "tag-filter": "[[Special:Tags|Makeerunge]] ußsöke:",
+ "tag-filter": "[[Special:Tags|Makehronge]] ußsöhke:",
"tag-filter-submit": "Beschränke!",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ein|$1|Kein}} Kännzeijsche]]: $2)",
"tags-title": "Makeeronge",
"tags-intro": "Heh sin alle de Makeerunge opjeliß, die et Wiki för Änderunge verjevve kann, un wat se bedügge.",
"tags-tag": "Dä Makeerung iere Name",
"tags-display-header": "Kennzeiche en de Leßte met Änderunge",
"tags-description-header": "Bedüggtening",
+ "tags-source-header": "Quäll",
"tags-active-header": "Aktiiv?",
"tags-hitcount-header": "Makeete Änderunge",
+ "tags-actions-header": "Akßjuhne",
"tags-active-yes": "Joh",
"tags-active-no": "Näh",
+ "tags-source-extension": "Övver e Zohsazprojramm faßjelaht",
+ "tags-source-manual": "Vun Hand vun Metmaachere udder vun Bots faßjelaht",
+ "tags-source-none": "Weed nit mih jebruch",
"tags-edit": "ändere",
+ "tags-delete": "fottschmieße",
+ "tags-activate": "aanschallde",
+ "tags-deactivate": "ußschallde",
"tags-hitcount": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderonge}}",
+ "tags-manage-no-permission": "Do häs nit et Rääsch Kännzeijsche ze verwallde.",
+ "tags-create-heading": "E neu Kännzeijsche aanlähje",
+ "tags-create-explanation": "Neu aanjelahte Kännzeijsche schtonn schtandattmähßesch för de Metmaacher un de Bots parraht.",
+ "tags-create-tag-name": "Däm Kännzeijsche singe Nahme:",
+ "tags-create-reason": "Jrond:",
+ "tags-create-submit": "Lohß Jonn!",
+ "tags-create-no-name": "Do moß der Nahme vun enem Kännzeijsche aanjävve",
+ "tags-create-invalid-chars": "En de Nahme för Kännzeijsche dörve kein Kommas (<code>,</code>) un kein scheive Schtresche (<code>/</code>) dren sin.",
+ "tags-create-invalid-title-chars": "En de Nahme för Kännzeijsche dörve kein Zeische dren sin, di em nit en de Övverschreffte vun Sigg bruche darref.",
+ "tags-create-already-exists": "Dat Kännzeijsche „$1“ jidd_et ald.",
+ "tags-create-warnings-above": "Opjepaß: Beim Kännzeijsche „$1“ aanlähje \n{{PLURAL:$2|es ene|sinner $1|es keine}} Fähler opjetrodde:",
+ "tags-create-warnings-below": "Wells De wigger maache un dat Kännzeijsche aanlähje?",
+ "tags-delete-title": "Kännzeijsche fottschmiiße",
+ "tags-delete-explanation-initial": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ us de Dahtebangk ze wärfe.",
+ "tags-delete-explanation-in-use": "Et weed vun {{PLURAL:$2|eine Väsjohn udder einem Enndrahch|alle $2 Väsjohn udder Endrähsch|keine Väsjohn udder keinem Endrahsch}} em Logbohch fott jenumme, woh dat em Momang noch dren es.",
+ "tags-delete-explanation-warning": "Dat kam_mer <strong>nit retuur</strong> maache.\nOch wä tiräk en de Dahtebangk met alle Rääschte werreke darf, kann dat nit. Alsu bes sescher, dat dat Kännzeijsche es, wat De fottschmiiße wells.",
+ "tags-delete-explanation-active": "<strong>Dat Kännzeijsche „$1“ es noch aanjeschalldt un weed wigger jebruch wähde.</strong> Öm dat ze verhendere, jangk aan dä Plaz udder all de Pläz, woh dat noch aanjeschalldt es, un donn et doh affschallde.",
+ "tags-delete-reason": "Jrond:",
+ "tags-delete-submit": "Onzeröckhollbaa fottschmiiße!",
+ "tags-delete-not-allowed": "Kännzeijsche, di övver Zohsazprojramme faßjelaat wääde, kam_mer blß fottschmiiße, wann dat Zohsazprojramm et zohlöht.",
+ "tags-delete-not-found": "E Kännzeijsche „$1“ jidd_et nit.",
+ "tags-delete-too-many-uses": "Dat Kännzeijsche „$1“ es för {{PLURAL:$2|mieh wi ein Väsjohn|övver $2 Väsjohn|kein Väsjohn}} em jebruch, dröm kam_mer et nit fottschmiiße.",
+ "tags-delete-warnings-after-delete": "Dat Kännzeijsche „$1“ es fottjeschmeße, ävver {{PLURAL:$2|ei Problem|$2 Probleme|kein Problem}} es opjevalle:",
+ "tags-activate-title": "Kännzeijsche aanschallde",
+ "tags-activate-question": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ aanzeschallde.",
+ "tags-activate-reason": "Jrond:",
+ "tags-activate-not-allowed": "Ed es nit müjjelesch, et Kännzeijsche „$1“ aanzeschallde.",
+ "tags-activate-not-found": "Dat Kännzeijsche „$1“ jidd_et nit.",
+ "tags-activate-submit": "Aktivehre",
+ "tags-deactivate-title": "Kännzeijsche afschallde",
+ "tags-deactivate-question": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ afzeschallde.",
+ "tags-deactivate-reason": "Jrond:",
+ "tags-deactivate-not-allowed": "Ed es nit müjjelesch, et Kännzeijsche „$1“ afzeschallde.",
+ "tags-deactivate-submit": "Ußschallde",
"comparepages": "Sigge verjliesche",
"compare-page1": "De ein Sigg",
"compare-page2": "De ander Sigg",
@@ -2974,8 +3092,8 @@
"compare-revision-not-exists": "Dä aanjejovve Version jidd_et jaa nit.",
"dberr-problems": "Deit uns leid, die Sigg heh häd för der Momang e teschnisch Problem.",
"dberr-again": "Versök eijfach en e paa Menutte, norr_ens die Sigg afzeroofe.",
- "dberr-info": "(Mer han kei Verbindung noh_m Datebank-ẞööver krijje künne: $1)",
- "dberr-info-hidden": "(Mer han kei Verbindung noh_m Datebank-ẞööver krijje künne)",
+ "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 Kopi vum Zwescheshpeisher vun dä Sigg,\ndie De häs han welle. Se künnt jet ällder un nit mieh aktoäll sin.",
@@ -3016,6 +3134,14 @@
"revdelete-uname-unhid": "der Name vum Metmaacher öffentlesh jemaat",
"revdelete-restricted": ", och för de Wiki-Köbesse",
"revdelete-unrestricted": ", och för de Wiki-Köbesse",
+ "logentry-block-block": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|dä|dat|dä Metmaacher|de|dat}} $3 för en Zigg vun $5 jeschpächt. $6",
+ "logentry-block-unblock": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|däm|däm|däm Metmaacher|dä|däm}} $3 {{GENDER:$3|sing|sing|sing|ier|sing}} sing Schpärr opjehovve.",
+ "logentry-block-reblock": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|däm|däm|däm Metmaacher|dä|däm}} $3 {{GENDER:$3|sing|sing|sing|ier|sing}} sing Schpärr för di Zigg vun $5 verändert. $6",
+ "logentry-suppress-block": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|dä|dat|dä Metmaacher|de|dat}} $3 för en Zigg vun $5 jespächt. $6",
+ "logentry-suppress-reblock": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät {{GENDER:$4|däm|däm|däm Metmaacher|dä|däm}} $3 {{GENDER:$3|sing|sing|sing|ier|sing}} sing Schpärr för di Zigg vun $5 verändert. $6",
+ "logentry-import-upload": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät di Sigg „$3“ huhjelahde un esu empottehrt",
+ "logentry-import-interwiki": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät di Sigg „$3“ fun enem andere Wikki empottehrt",
+ "logentry-merge-merge": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ met dä Sigg „$4“ zersamme jelaat, jenou jenumme de Väsjohne bes $5",
"logentry-move-move": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt.",
"logentry-move-move-noredirect": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei kein Ömleidong aanjelaat.",
"logentry-move-move_redir": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hätt di Sigg „$3“ en „$4“ ömjenannt un derbei en ahle Ömleindongßsigg fottjeschmeße.",
@@ -3030,20 +3156,39 @@
"logentry-rights-rights": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.",
"logentry-rights-rights-legacy": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.",
"logentry-rights-autopromote": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.",
+ "logentry-upload-upload": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Dattei „$3“ huhjelahe.",
+ "logentry-upload-overwrite": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät en neue Väsjohn vun dä Dattei „$3“ huhjelahe.",
+ "logentry-upload-revert": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Dattei „$3“ huhjelahe.",
+ "log-name-managetags": "Logbohch vun de Kännzeijsche_Verwaldong",
+ "log-description-managetags": "Heh sin de Veränderonge em Zersammehang vun de [[Special:Tags|Kännzeijsche]] faßjehallde. En däm Logbohch schteiht blohß de Wikki_Köhbeße händesch jedonn han. Kännzeijsche künne och vum Wikki automattesch aanjelaat un fott jemaat wääde, un douche dann heh nit op.",
+ "logentry-managetags-create": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ aanjelaat.",
+ "logentry-managetags-delete": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ fottjeschmeße un derbei uß {{PLURAL:$5|eine Väsjohn udder einem Enndraach|$5 Väsjohne udder $5 Enndrähsch|keine Väsjohn udder keinem Enndraach}} vum Logbohch eruß jenumme.",
+ "logentry-managetags-activate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ aanjeschalldt för de Metmaacher un de Bots.",
+ "logentry-managetags-deactivate": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dat Kännzeijsche „$4“ för de Metmaacher un de Bots afjeschalldt.",
"rightsnone": "(nix)",
+ "revdelete-summary": "dä Täx en „{{int:summary}}“",
+ "feedback-adding": "Ben di Röckmäldong op di Sigg aam donn&nbsp;…",
+ "feedback-back": "Retuur",
+ "feedback-bugcheck": "Joot. Donn op jeede Vall nohlooer, dat dat bes jäz noch nit [$1 bikannt wohr].",
+ "feedback-bugnew": "Hann esch nohjelooert. Esch jävven ene neue Fähler enn.",
"feedback-bugornote": "Wann de em Bejreff bes, övver e täschesch Probleem ze schrieve, bes esu jood un donn dat als en [$1 Fählermäldong].\nSöns, nemm dat koote Fommulaa heh dronger.\nWat De doh enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg „[$3 $2]“ drop.",
- "feedback-subject": "Theema:",
- "feedback-message": "Nohreesch:",
"feedback-cancel": "Stopp! Avbreche!",
- "feedback-submit": "Lohß jonn!",
- "feedback-adding": "Ben di Röckmäldong op di Sigg aam donn&nbsp;…",
+ "feedback-close": "Jedonn.",
+ "feedback-external-bug-report-button": "Donne ene Fähler mällde, ene Wonsch för en Verbäßerong ennreische, udder anndere täschneche Idee opbränge.",
+ "feedback-dialog-title": "En Rökmäldong jävve",
+ "feedback-dialog-intro": "Dat Fommolaa kam_mer för en Rökmäldong bruche. Di kütt zesamme met Dingem Metmaacher_Nahme op di Sigg „$1“.",
+ "feedback-error-title": "Fähler",
"feedback-error1": "Fähler: dat <i lang=\"en\">API</i> säät jät, wat mer nit kenne",
"feedback-error2": "Fähler: de Sigg ze ändere es donävve jejange",
"feedback-error3": "Fähler: dat <i lang=\"en\">API</i> joov kein Antwoot",
+ "feedback-message": "Nohreesch:",
+ "feedback-subject": "Theema:",
+ "feedback-submit": "Lohß jonn!",
+ "feedback-terms": "Minge Brauser un sing Enschtällong un mi Bedriefssüßtehm und dänne iehr Väsohne wääde met minge Röckmäldong zersamme öffentlesch jemaat.",
+ "feedback-termsofuse": "Esch donn ming Röckmäldong onger de Bedengonge för der Jebruch maache.",
"feedback-thanks": "Joot. Dinge Beidraach kütt op die Sigg \"[$2 $1]\".",
- "feedback-close": "Jedonn.",
- "feedback-bugcheck": "Joot. Donn op jeede Vall nohlooer, dat dat bes jäz noch nit [$1 bikannt wohr].",
- "feedback-bugnew": "Hann esch nohjelooert. Esch jävven ene neue Fähler enn.",
+ "feedback-thanks-title": "Ene schöne Dangk och!",
+ "feedback-useragent": "Dä Brauser:",
"searchsuggest-search": "Söhke",
"searchsuggest-containing": "dren änthallde…",
"api-error-badaccess-groups": "Do häs nit et Rääsch, Datteije en heh dat Wiki huhzelaade.",
@@ -3078,6 +3223,14 @@
"api-error-overwrite": "En Dattei ze övverschrieve es nit zohjelohße.",
"api-error-stashfailed": "Fähler: Dä ẞööver hät kein Datteije zweschejeschpeischert.",
"api-error-publishfailed": "Ene Fähler es em ẞööver opjetrodde. En zweschejescheischerte Dattei kunnt nit öffentlesch jemaat wääde.",
+ "api-error-stasherror": "Ene Fähler es opjetrodd, wi mer di Dattei en der <i lang=\"en\" xml:lang=\"en\">stash</i> huh aam lahde wohre.",
+ "api-error-stashedfilenotfound": "Di Dattei wohd em <i lang=\"en\" xml:lang=\"en\">stash</i> nit jefonge, wi mer se vun doh huh lahde wullte.",
+ "api-error-stashpathinvalid": "Di Dattei wohd em <i lang=\"en\" xml:lang=\"en\">stash</i> nit jefonge, weil dä Pad do hen nit jeschtemmp hät.",
+ "api-error-stashfilestorage": "Ene Fähler es opjetrodd, wi mer di Dattei en der <i lang=\"en\" xml:lang=\"en\">stash</i> donn wullte.",
+ "api-error-stashzerolength": "Dä ẞööver kunnt di Dattei nit en der <i lang=\"en\" xml:lang=\"en\">stash</i> donn, weil en dä Dattei nix dren schtund.",
+ "api-error-stashnotloggedin": "Do moß enjelogg sin, öm en Dattei en der <i lang=\"en\" xml:lang=\"en\">stash</i> huh ze lahde.",
+ "api-error-stashwrongowner": "Di Dattei em <i lang=\"en\" xml:lang=\"en\">stash</i> woh De draan wells, jehürt Der nit.",
+ "api-error-stashnosuchfilekey": "Di Dattei em <i lang=\"en\" xml:lang=\"en\">stash</i> woh De draan wells, jidd_et nit.",
"api-error-timeout": "Dä ẞööver hät en dä jewennde Zick nit jeantwoot.",
"api-error-unclassified": "Ene Fähler es opjetrodde, der mer nit kenne.",
"api-error-unknown-code": "Nit bekannte Fähler: „$1“",
@@ -3122,9 +3275,71 @@
"expand_templates_generate_xml": "Och dä XML-Parser-Boum zeije",
"expand_templates_generate_rawhtml": "Donn de Röh HTML Ußjaav aanzeije",
"expand_templates_preview": "Vör-Aansich",
+ "expand_templates_preview_fail_html": "<em>Weil et Wiki rüh <i xml:lang=\"en\" title=\"HyperText Markup Language\" lang=\"en\">HTML</i> zohlöht un de Sezongsdahte verschött jejange sin, dom_mer de {{int:preview}} uß Vörseesch nit aanzeije, öm Aanjreffe övver JavaSkrep zevör ze kumme.</em>\n\n<strong>Wann dat heh en Ohdenong es, bes esu johd un versöhg et norr_ens.</strong>\nwann dat nix hellef, versöhg ens [[Special:UserLogout|ußzelogge]] un neu enzelogge.",
+ "expand_templates_preview_fail_html_anon": "<em>Weil et Wiki rüh <i xml:lang=\"en\" title=\"HyperText Markup Language\" lang=\"en\">HTML</i> zohlöht un Do nit ennjelogg bes, dom_mer de {{int:preview}} uß Vörseesch nit aanzeije, öm Aanjreffe övver JavaSkrep zevör ze kumme.</em>\n\n<strong>Wann dat heh en Ohdenong es, bes esu johd un donn [[Special:UserLogin|enlogge]] un versöhg et norr_ens.</strong>",
"pagelanguage": "De Schprohch för di Sigg faßlääje",
"pagelang-name": "Sigg",
- "pagelang-language": "De Schprooch",
+ "pagelang-language": "De Schprohch",
"pagelang-use-default": "Nemm de Schtandatt_Schprohch",
- "pagelang-select-lang": "Söhg_en Schprooch uß"
+ "pagelang-select-lang": "Donn en Schprohch ußwähle",
+ "right-pagelang": "Ener Sigg ier Schprohch tuusche",
+ "action-pagelang": "Sigge ier Schprohch zu tuusche",
+ "log-name-pagelang": "Logbooch vum Tuusche vun Sige iehr Schprohche",
+ "log-description-pagelang": "Dat heh es et Logbohch vun de Veränderonge aan de Schprohch vun de Sigge.",
+ "logentry-pagelang-pagelang": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Schprohch vun dä Sigg „$3“ vun $4 op $5 verändert.",
+ "default-skin-not-found": "De schtandattmähßejje Bedehnbovverfläsch <code>$1</code> för et Wikki es nit ze fenge. Se weed övver dä Enndrahch <code lang=\"en\" xml:lang=\"en\">$wgDefaultSkin</code> en dä Dattei <code lang=\"en\" xml:lang=\"en\">LocalSettings.php</code> om ẞööver faßjelaat.\n\n{{PLURAL:$4|Heh di Bedehnbovverfläsch es|Heh di Bedehnbovverfläsche sin|Kein Bedehnbovverfläsche sin}} doh:\n\n$2\n\nLohr och en et [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de Handbohch övver et Enschtälle vun Bedehnbovverfläsche].\n\n*'''Falls dat heh e fresch enjereesch MehdijaWikki es:'''\n*: MehdijaWikki wood velleisch övver <i lang=\"en\" xml:lang=\"en\">Git</i> enschtallehrt, udder der Quälltäx wood tiräk obb_en ander Manier enschtallehrt. Met däm Problehm heh wohr ze rääschne. Donn winneschßdens eine vun dä Bovverfläsche uss_em [https://www.mediawiki.org/wiki/Category:All_skins Verzeischneß vun de Bedehnbovverfläsche vum MehdijaWikki] enschtallehre. Dat jeihd, endämm dat De:\n*:* einzel veröffentleschte Bovverfläsche us [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] erongerlähds un en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun dä MehdijaWikki_Enschtallazuhn holls,\n*:* winneschsdens eins vun dä Verzeischneße us <code lang=\"en\" xml:lang=\"en\">mediawiki/skins/*</code> met <i lang=\"en\" xml:lang=\"en\">Git</i> en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MehdijaWikki_Enschtallazuhn holls,\n*:* de [https://www.mediawiki.org/wiki/Download Dattei vum MehdijaWikki] erongerlähds, woh ongerscheidlejje Bedehnbovverfläsche dren sin un Zohsäz derzoh. Uß däm Verzeischneß doh dren kam_mer Saache en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun dä MehdijaWikki_Enschtallazuhn holle.\n*: Dat sullt sesch nit met Dingem <i lang=\"en\" xml:lang=\"en\">git</i>-Verzeischneß schtühre, falls De och ene Äntweckler vum MehdijaWikki bes.\n*'''Falls dat MehdijaWikki heh jrahd obb ene neue Schtand jebraht wood:'''\n*: Bei MehdijaWikki en dä Väsjohn 1.24 un hüüter wääde de enschtallehrte Bedehnbovverfläsche nit mieh automattesch alle aanjemaat; süsch och em [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Handbohch] dernoh. Do kanns heh di {{PLURAL:$5|Reih|Reihje|kein Reihje}} en de Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> eren koppehre, öm {{PLURAL:$5|di enschtallehrte Bedehnbovverfläsch|alle enschtallehrte Bedehnbovverfläsche|kein Bedehnbovverfläsch}} aanzeschallde:\n<pre lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3</pre>\n* '''Falls de jrahd aan dä Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> jät geändert häs:'''\n*: Donn de Nahme vun de Bedehnbovverfläsche en dä Dattei pröhve. Se künnte verhehrt jeschrevve sin.",
+ "default-skin-not-found-no-skins": "De schtandattmähßejje Bedehnbovverfläsch <code>$1</code> för et Wikki es nit ze fenge. Se weed övver dä Enndraach <code lang=\"en\" xml:lang=\"en\">$wgDefaultSkin</code> en dä Dattei <code lang=\"en\" xml:lang=\"en\">LocalSettings.php</code> om ẞööver faßjelaat.\n\nEt sinn_er kein Bedehnbovverfläsche doh.\n\n*'''Falls dat heh e fresch enjereesch MehdijaWikki, es udder jrahd obb ene neue Schtand jebraht wood:'''\n*: MehdijaWikki wood velleisch övver <i lang=\"en\" xml:lang=\"en\">Git</i> enschtallehrt, udder der Quälltäx wood tiräk obb_en ander Manier enschtallehrt. Met däm Problehm heh wohr ze rääschne. Bei MehdijaWikki en dä Väsjohn 1.24 un hüüter sin kein Bedehnbovverfläsche mieh automattesch derbei. Donn winneschßdens eine vun dä Bovverfläsche uss_em [https://www.mediawiki.org/wiki/Category:All_skins Verzeischneß vun de Bedehnbovverfläsche] enschtallehre. Dat jeihd, endämm dat De:\n*:* winneschsdens eins vun dä Verzeischneße us <code lang=\"en\" xml:lang=\"en\">mediawiki/skins/*</code> met <i lang=\"en\" xml:lang=\"en\">Git</i> en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MehdijaWikki_Enschtallazuhn holls,\n*:* einzel veröffentleschte Bovverfläsche us [https://www.mediawiki.org/wiki/Special:SkinDistributor MediaWiki.org] erongerlähds un en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge MehdijaWikki_Enschtallazuhn holls,\n*:* de [https://www.mediawiki.org/wiki/Download Dattei vum MehdijaWikki] erongerlähds, woh ongerscheidlejje Bedehnbovverfläsche dren sin un Zohsäz derzoh. Uß däm Verzeischneß doh dren kam_mer Saache en et Verzeischneß <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skins/</code> vun Dinge vun dä MehdijaWikki_Enschtallazuhn holle.\n*: Dat sullt sesch nit met Dingem <i lang=\"en\" xml:lang=\"en\">Git</i>-Verzeischneß schtühre, falls De och ene Äntweckler vum MehdijaWikki bes. Lohr em [https://www.mediawiki.org/wiki/Manual:Skin_configuration Handbohch] dernoh, wi mer Bedehnbovverfläsche aanmääd un ene Schtandatt faßlähsch.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enjeschalldt)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ußjeschalldt''')",
+ "mediastatistics": "Schtateßteke övver de Meedije",
+ "mediastatistics-summary": "Schtatißteke övver de huhjelahde Zoote Datteije. Von de Datteije weed bloß de jeweils neuste Väsjohn jezallt. Fottjeschmeße un övverhollte Datteije wähde nit metjezallt.",
+ "mediastatistics-nfiles": "$1 ($2%)",
+ "mediastatistics-nbytes": "{{PLURAL:$1|Ei Byte|$1 Bytes|Nix}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "<i lang=\"en\" xml:lang=\"en\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Tüpp",
+ "mediastatistics-table-extensions": "Müjjelesche Datteizoote",
+ "mediastatistics-table-count": "De Aanzahl Dateije",
+ "mediastatistics-table-totalbytes": "Ömvang",
+ "mediastatistics-header-unknown": "Onbikannt",
+ "mediastatistics-header-bitmap": "Belder uß Pixelle",
+ "mediastatistics-header-drawing": "Zeischnonge uß Väktohre",
+ "mediastatistics-header-audio": "Tohndatteije",
+ "mediastatistics-header-video": "Viddejos",
+ "mediastatistics-header-multimedia": "Kombinehrte Meedijedatteije",
+ "mediastatistics-header-office": "Dokkemänte met Täx dren",
+ "mediastatistics-header-text": "Täx",
+ "mediastatistics-header-executable": "Projramme",
+ "mediastatistics-header-archive": "Kumpremeerte Dahtefommahte",
+ "json-warn-trailing-comma": "{{PLURAL:$1|0=Kei Komma wood|1=Ei Komma woodt|$1 Kommas woodte}} aam Ängk vum <i lang=\"en\" xml:lang=\"en\">JSON</i> fott jenumme.",
+ "json-error-unknown": "Mem <i lang=\"en\" xml:lang=\"en\">JSON</i> es jät scheif jeloufe: $1",
+ "json-error-depth": "Der ẞtägg eß övverjeloufe",
+ "json-error-state-mismatch": "Onjöltesch udder kapott <i lang=\"en\" lang=\"en\" xml:lang=\"en\" title=\"JavaScript Object Notation\">JSON</i>-Fommaat",
+ "json-error-ctrl-char": "Verkeht Schtührzeijsche. Künnt ene Fähler mem Kodehre sin.",
+ "json-error-syntax": "Fähler en de Syntax",
+ "json-error-utf8": "Kapodde Zeijsche em <i lang=\"en\" lang=\"en\" xml:lang=\"en\" title=\"Universal Character Set Transformation Format-8-bit\">UTF-8</i>-Fommaat. Künnt ene Fähler mem Kodehre sin.",
+ "json-error-recursion": "En däm Wäät zem Kodehre sinn_er rekursihve Bezösch dren.",
+ "json-error-inf-or-nan": "Et sinn_er Wääte <i lang=\"en\" lang=\"en\" xml:lang=\"en\" title=\"Not a Number – Kein Zahl\">NAN</i> ov <i lang=\"en\" lang=\"en\" xml:lang=\"en\" title=\"Infinity – övver alle Mohße jruhß\">INF</i> en däm Wäät zem Kodehre dren.",
+ "json-error-unsupported-type": "Et wodd ene Wäät aanjejovve vun ene Zoot, di nit ze Kodehre jeiht.",
+ "headline-anchor-title": "Lengk op heh dä Afschnett",
+ "special-characters-group-latin": "Lateinesch",
+ "special-characters-group-latinextended": "Lateinesch met Extras",
+ "special-characters-group-ipa": "IPA, et engernazjonal foneetesch Alfabeet",
+ "special-characters-group-symbols": "Symbole",
+ "special-characters-group-greek": "Jriischesch",
+ "special-characters-group-cyrillic": "Kyrillesch",
+ "special-characters-group-arabic": "Arabesch",
+ "special-characters-group-arabicextended": "Araabesch met Extras",
+ "special-characters-group-persian": "Pärsesch",
+ "special-characters-group-hebrew": "Hebräjesch",
+ "special-characters-group-bangla": "Benjaalesch",
+ "special-characters-group-tamil": "Tamiilesch",
+ "special-characters-group-telugu": "Teluuju",
+ "special-characters-group-sinhala": "Singhaleesesch",
+ "special-characters-group-gujarati": "Jujaraatesch",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thailändesch",
+ "special-characters-group-lao": "Laotesch",
+ "special-characters-group-khmer": "Khmer-Kambodschaanesch",
+ "special-characters-title-endash": "Ene Halfjeviertschtresch",
+ "special-characters-title-emdash": "Ene Jeviertschtresch",
+ "special-characters-title-minus": "Et Winnijer-Zeische"
}
diff --git a/languages/i18n/ku-latn.json b/languages/i18n/ku-latn.json
index 07a1d759..799d6907 100644
--- a/languages/i18n/ku-latn.json
+++ b/languages/i18n/ku-latn.json
@@ -13,7 +13,8 @@
"Liangent",
"The Evil IP address",
"Welathêja",
- "아라"
+ "아라",
+ "Bikarhêner"
]
},
"tog-underline": "Xetekê di bin girêdanê de çêke:",
@@ -105,6 +106,18 @@
"oct": "kew",
"nov": "ser",
"dec": "ber",
+ "january-date": "Rêbendan $1",
+ "february-date": "Reşemî $1",
+ "march-date": "Adar $1",
+ "april-date": "Avrêl $1",
+ "may-date": "Gulan $1",
+ "june-date": "Pûşper $1",
+ "july-date": "Tîrmeh $1",
+ "august-date": "Gelawêj $1",
+ "september-date": "Rezber $1",
+ "october-date": "Kewçêr $1",
+ "november-date": "Sermawez $1",
+ "december-date": "Berfanbar $1",
"pagecategories": "{{PLURAL:$1|Kategorî|Kategorî}}",
"category_header": "Gotarên di kategoriya \"$1\" de",
"subcategories": "Binkategorî",
@@ -205,6 +218,7 @@
"disclaimers": "Ferexetname",
"disclaimerpage": "Project:Ferexetname",
"edithelp": "Alîkariya guherandinê",
+ "helppage-top-gethelp": "Alîkarî",
"mainpage": "Destpêk",
"mainpage-description": "Destpêk",
"policy-url": "Project:Rêgez",
@@ -235,6 +249,8 @@
"hidetoc": "veşêre",
"collapsible-collapse": "Bigire",
"collapsible-expand": "Berfireh bike",
+ "confirmable-yes": "Erê",
+ "confirmable-no": "Na",
"thisisdeleted": "Li $1 binêre an jî serast bike?",
"viewdeleted": "Li $1 binêre?",
"restorelink": "{{PLURAL:$1|guherandineke|$1 guherandinên}} jêbirî",
@@ -262,6 +278,7 @@
"nospecialpagetext": "<strong>Rûpela taybet a te xwestî tune ye.</strong>\n\nHemû rûpelên taybet dikarin di [[Special:SpecialPages|lîsteya rûpelên taybet]] de werin dîtin.",
"error": "Çewtî",
"databaseerror": "Çewtiya bingeha daneyan",
+ "databaseerror-error": "Çewtî:$1",
"laggedslavemode": "'''Zanibe:''' Dibe ku di vê rûpelê de rojanekirinên dawî nîn bin.",
"readonly": "Bingeha daneyan hatiye girtin",
"enterlockreason": "Sedemeke bestinê binivîse, herwiha demeke texmînkirî ji bo vebûna bestinê binivîse!",
@@ -305,7 +322,9 @@
"yourpassword": "Şîfre:",
"userlogin-yourpassword": "Şîfre",
"userlogin-yourpassword-ph": "Şîfreya xwe binivîse",
+ "createacct-yourpassword-ph": "Şîfreya xwe binivîse",
"yourpasswordagain": "Şîfreyê dîsa binivîse:",
+ "createacct-yourpasswordagain-ph": "Şîfreyê ji nû ve têkeve",
"remembermypassword": "Şifreya min di her têketina min de bîne bîra xwe (herî zêde $1 {{PLURAL:$1|rojekê|rojan}})",
"userlogin-remembermypassword": "Min têketî bihêle",
"userlogin-signwithsecure": "Girêdana parastî bikarbîne",
@@ -313,7 +332,7 @@
"externaldberror": "Çewtiyeke bingeha daneyan heye, an jî destûra te ya rojanekirina hesabê xweyê navxweyî nîne.",
"login": "Têkeve",
"nav-login-createaccount": "Têkeve / hesabekî nû çêke",
- "userlogin": "Têkeve an hesabekî nû çêke",
+ "userlogin": "Têkeve / hesabekî nû çêke",
"userloginnocreate": "Têkeve",
"logout": "Derkeve",
"userlogout": "Derkeve",
@@ -329,13 +348,17 @@
"userlogin-resetpassword-link": "Şîfreyê ji nû ve çêke",
"userlogin-helplink2": "Alîkariya têketinê",
"createacct-emailrequired": "E-name",
+ "createacct-emailoptional": "E-name",
+ "createacct-email-ph": "E-nameya xwe binivîse",
"createaccountmail": "Use a temporary random password and send it to the email address specified below",
+ "createacct-realname": "Navê te ya rast (Ko tu bixwazi bikeve, pêdivî nîne)",
"createaccountreason": "Sedem:",
"createacct-reason": "Sedem",
+ "createacct-imgcaptcha-ph": "Nivîsa ku tu li jor dibînî binivîse",
"createacct-submit": "Hesabê xwe biafirîne",
"createacct-benefit-body2": "{{PLURAL:$1|rûpel}}",
"badretype": "Her du şîfreyên ku te nivîsîn li hevdu nayên.",
- "userexists": "Ev navî bikarhênerî berê tê bikaranîn. Xêra xwe navekî din bibe.",
+ "userexists": "Ev navî bikarhênerî berê tê bikaranîn. Xêra xwe navekî din dake.",
"loginerror": "Çewtiya têketinê",
"nocookiesnew": "Hesabê bikarhêner hatibû çêkirin, lê te xwe qeyd nekiriye. {{SITENAME}} ji bo qeydkirina bikarhêneran cookie'yan bikartîne. Te bikaranîna cookie'yan girtiye. Xêra xwe cookie'yan qebûl bike, piştre bi navê bikarhêner û şîfreya xwe têkeve.",
"nocookieslogin": "Ji bo qeydkirina bikarhêneran {{SITENAME}} \"cookies\" bikartîne. Te fonksîyona \"cookies\" girtîye. Xêra xwe kerema xwe \"cookies\" gengaz bike û careke din biceribîne.",
@@ -403,7 +426,6 @@
"changeemail-newemail": "Navnîşana E-nameya nû:",
"changeemail-none": "(nîne)",
"changeemail-submit": "E-nameyê biguherîne",
- "changeemail-cancel": "Betal bike",
"bold_sample": "Nivîsa stûr",
"bold_tip": "Nivîsa stûr",
"italic_sample": "Nivîsa xwehr (îtalîk)",
@@ -599,7 +621,6 @@
"searchrelated": "pêwendîdar",
"searchall": "hemû",
"showingresults": "{{PLURAL:$1|Encamek|'''$1''' encam}}, bi #'''$2''' dest pê dike.",
- "showingresultsheader": "{{PLURAL:$5|Encam '''$1''' ên '''$3'''|Encam '''$1 - $2''' ên '''$3'''}} ji bo '''$4'''",
"search-nonefound": "Ti rûpelên wek ya daxwazkirî nînin.",
"powersearch-legend": "Lê bigere",
"powersearch-ns": "Di valahiya navan de lêbigere:",
@@ -909,17 +930,14 @@
"statistics": "Statîstîk",
"statistics-header-pages": "Statîstîkên rûpelê",
"statistics-header-edits": "Statîstîkan biguherîne",
- "statistics-header-views": "Amaran bibîne",
"statistics-header-users": "Statistîkên bikarhêner",
"statistics-header-hooks": "Statîstîkên din",
"statistics-articles": "Rûpelên naverokê",
"statistics-pages": "Rûpel",
"statistics-pages-desc": "Hemû rûpelên di vê wîkiyê de, bi hemû rûpelên gotûbêj, beralîkirin, hwd.",
"statistics-files": "Wêneyên barkirî",
- "statistics-views-total": "Hemû nîşandan",
"statistics-users": "[[Special:ListUsers|Bikarhênerên tomarkirî]]",
"statistics-users-active": "Bikarhênerên çalak",
- "statistics-mostpopular": "Rûpelên herî lênerî",
"doubleredirects": "Beralîkirinên ducarî",
"double-redirect-fixed-move": "Cihê [[$1]] hatiye guhertin, ew niha beralîkirina [[$2]] ye.",
"brokenredirects": "Beralîkirinên xerabûyî",
@@ -941,7 +959,6 @@
"uncategorizedtemplates": "Şablonên bê kategorî",
"unusedcategories": "Kategoriyên ku nayên bikaranîn",
"unusedimages": "Wêneyên ku nayên bikaranîn",
- "popularpages": "Rûpelên populer",
"wantedcategories": "Kategoriyên ku tên xwestin",
"wantedpages": "Rûpelên ku tên xwestin",
"wantedfiles": "Wêneyên ku tên xwestin",
@@ -968,7 +985,6 @@
"pager-older-n": "{{PLURAL:$1|kevintir 1|kevintir $1}}",
"booksources": "Çavkaniyên pirtûkan",
"booksources-search-legend": "Li pirtûkan bigere",
- "booksources-go": "Here",
"booksources-text": "Li vir listek ji lînkên rûpelên, yê pirtûkên nû ya kevin difiroşin, heye. Hên jî li vir tu dikarî înformasyonan li ser wan pirtûkan tê derxê.",
"specialloguserlabel": "Bikarhêner:",
"speciallogtitlelabel": "Sernav:",
@@ -1048,7 +1064,7 @@
"wlheader-enotif": "Agahdariya E-nameyê pêk tê.",
"wlheader-showupdated": "Ev rûpela hatî guhertin dema te lê meyzand bi '''nivîsa stûr''' tê xuyakirin.",
"wlnote": "Niha {{PLURAL:$1|xeyrandinê|'''$1''' xeyrandinên}} dawî yê {{PLURAL:$2|seetê|'''$2''' seetên}} dawî {{PLURAL:$1|tê|tên}} dîtin.",
- "wlshowlast": "Guhertinên berî $1 saetan, $2 rojan, ya $3 nîşan bide",
+ "wlshowlast": "Guhertinên berî $1 saetan, $2 rojan, ya nîşan bide",
"watchlist-options": "Vebijarkên lîsteya şopandinê",
"watching": "Bişopîne...",
"unwatching": "Neşopîne…",
@@ -1081,7 +1097,6 @@
"delete-edit-reasonlist": "Sedemên jêbirinê biguherîne",
"delete-toobig": "Dîroka vê rûpelê pir mezin e, zêdetirî $1 guherandin. Jêbirina van rûpelan hatîye sînorkirin, ji bo pir şaşbûn (error) di {{SITENAME}} da çênebin.",
"delete-warning-toobig": "Dîroka vê rûpelê pir mezin e, zêdetirî $1 guherandin. Jêbirina van rûpelan dikarin şaşbûnan di database'ê {{SITENAME}} da çêkin; zandibe tu çi dikê!",
- "rollback_short": "Bizîvirîne pêş",
"rollbacklink": "bizîvirîne pêş",
"cantrollback": "Guherto naye vegerandin;\nbikarhênerê dawî, tenya nivîskarê vê rûpelê ye.",
"alreadyrolled": "Guherandina dawiya [[$1]]\nbi [[User:$2|$2]] ([[User talk:$2|gotûbêj]]) venizivre; kesekî din ew rûpel zîvirandiye an guherandiye.\n\nGuhertoya dawî bi [[User:$3|$3]] ([[User talk:$3|gotûbêj]]).",
@@ -1388,7 +1403,6 @@
"spamprotectionmatch": "Ev nivîsa parastinê spam vêxist: $1",
"pageinfo-header-edits": "Guherandin",
"pageinfo-header-restrictions": "Parastina rûpelê",
- "pageinfo-views": "Hejmara dîtinê",
"pageinfo-watchers": "Hejmara kesên dişopînin",
"pageinfo-subpages-name": "Binrûpelên vê rûpelê",
"pageinfo-edits": "Hejmara guherandinan",
@@ -1487,7 +1501,6 @@
"exif-iimcategory-spo": "Werzîş",
"exif-iimcategory-war": "Şer, pevçûn û alozî",
"exif-iimcategory-wea": "Hewa",
- "watchlistall2": "hemû",
"namespacesall": "hemû",
"monthsall": "hemû",
"confirmemail": "Adrêsa e-nameyan nasbike",
@@ -1530,7 +1543,7 @@
"version": "Versiyon",
"version-specialpages": "Rûpelên taybet",
"version-other": "yên din",
- "version-version": " (Verzîyon $1)",
+ "version-version": "($1)",
"version-license": "Destûr",
"version-software-product": "Berhem",
"version-software-version": "Guherto",
@@ -1571,13 +1584,31 @@
"logentry-newusers-newusers": "$1 hesabekî bikarhêneriyê çêkir",
"logentry-newusers-create": "$1 hesabekî bikarhêneriyê çêkir",
"rightsnone": "(tune)",
- "feedback-subject": "Mijar:",
- "feedback-message": "Peyam:",
+ "revdelete-summary": "kurteyê biguherîne",
"feedback-cancel": "Betal bike",
"feedback-close": "Çêbû",
+ "feedback-message": "Peyam:",
+ "feedback-subject": "Mijar:",
+ "feedback-thanks-title": "Spas!",
"searchsuggest-search": "Lêgerîn",
"searchsuggest-containing": "dihundirîne...",
"expand_templates_output": "Encam",
"expand_templates_ok": "Baş e",
- "expand_templates_preview": "Pêşdîtin"
+ "expand_templates_preview": "Pêşdîtin",
+ "special-characters-group-latin": "Latînî",
+ "special-characters-group-latinextended": "Latînî berfirehkirî",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Sembol",
+ "special-characters-group-greek": "Yewnanî",
+ "special-characters-group-cyrillic": "Kirîlî",
+ "special-characters-group-arabic": "Erebî",
+ "special-characters-group-persian": "Farsî",
+ "special-characters-group-hebrew": "Îbranî",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-telugu": "Telûgû",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gucaratî",
+ "special-characters-group-thai": "Tay",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/kv.json b/languages/i18n/kv.json
index e483c283..ab8596d9 100644
--- a/languages/i18n/kv.json
+++ b/languages/i18n/kv.json
@@ -1,125 +1,122 @@
{
- "@metadata": {
- "authors": [
- "Comp1089",
- "Yufereff",
- "ОйЛ"
- ]
- },
- "sunday": "вежалун",
- "monday": "выльлун",
- "tuesday": "воторник",
- "wednesday": "середа",
- "thursday": "четверг",
- "friday": "пекнича",
- "saturday": "субöта",
- "january": "тӧв шӧр тӧлысь",
- "february": "урасьӧм тӧлысь",
- "march": "рака тӧлысь",
- "april": "кос му тӧлысь",
- "may_long": "ода кора тӧлысь",
- "june": "лӧддза-номъя тӧлысь",
- "july": "сора тӧлысь",
- "august": "моз тӧлысь",
- "september": "кӧч тӧлысь",
- "october": "йирым тӧлысь",
- "november": "вӧльгым тӧлысь",
- "december": "ӧшым тӧлысь",
- "january-gen": "тӧв шӧр",
- "february-gen": "урасьӧм",
- "march-gen": "рака",
- "april-gen": "кос му",
- "may-gen": "ода кора",
- "june-gen": "лӧддза-номъя",
- "july-gen": "сора",
- "august-gen": "моз",
- "september-gen": "кӧч",
- "october-gen": "йирым",
- "november-gen": "вӧльгым",
- "december-gen": "ӧшым",
- "pagecategories": "{{PLURAL:$1|1=Категория|Категория}}",
- "article": "Гижӧд",
- "cancel": "Дугӧдны",
- "mytalk": "Сёрнитан лист бокӧй",
- "qbfind": "Корсьысьӧм",
- "qbedit": "Веськӧдны",
- "vector-action-move": "Ним вежны",
- "vector-view-edit": "Вежны",
- "vector-view-view": "Лыддьыны",
- "namespaces": "Ним пространствояс",
- "search": "Корсьысьӧм",
- "searchbutton": "Аддзыны",
- "searcharticle": "Вуджны",
- "history_short": "Важвылӧм",
- "printableversion": "Лэдзӧм версия",
- "permalink": "Вежласьтӧм ыстӧд",
- "edit": "Вежны",
- "delete": "Бырӧдны",
- "protect": "Дорйыны",
- "newpage": "Выль лист бок",
- "talkpagelinktext": "сёрнитанін",
- "talk": "Сёрнитанін",
- "toolbox": "Инструментъяс",
- "otherlanguages": "Мӧд кывъясӧн",
- "jumptosearch": "корсьысьӧм",
- "aboutsite": "{{SITENAME}} йылысь",
- "currentevents": "Быд лунся лоӧмтор",
- "mainpage": "Медшӧр лист бок",
- "mainpage-description": "Медшӧр лист бок",
- "portal": "Йитчӧм",
- "portal-url": "Project:Йитчӧм портал",
- "editsection": "веськӧдны",
- "editold": "веськӧдны",
- "editlink": "вежны",
- "editsectionhint": "«$1» секция веськӧдны",
- "red-link-title": "$1 (гижӧд абу)",
- "nstab-main": "Гижӧд",
- "nstab-user": "Пырысь",
- "nstab-project": "Проект йылысь",
- "nstab-category": "Категория",
- "yourname": "Пырысьлӧн ним:",
- "login": "Висьтасьны",
- "nav-login-createaccount": "Висьтасьны / гижсьыны",
- "userlogin": "Висьтасьны али гижсьыны",
- "logout": "Сеанс эштӧдӧм",
- "userlogout": "Сеанс эштӧдӧм",
- "gotaccountlink": "Висьтасьӧй",
- "loginlanguagelabel": "Кыв: $1",
- "savearticle": "Лист бокӧс гижны",
- "newarticle": "(Выль)",
- "currentrev": "Быд лунся версия",
- "search-result-size": "$1 ({{PLURAL:$2|$2 кыв}})",
- "timezonelegend": "Час кытш",
- "recentchanges": "Выль веськӧдӧмъяс",
- "hide": "Дзебны",
- "newpageletter": "В",
- "boteditletter": "б",
- "recentchangeslinked-page": "Гижӧдлӧн ним:",
- "upload": "Файл сӧвтны",
- "uploadbtn": "Файл сӧвтны",
- "filehist-datetime": "Кадпас/кад",
- "filehist-user": "Пырысь",
- "filehist-comment": "Пасйӧд",
- "randompage": "Кӧсйытӧг гижӧд",
- "newpages": "Выль лист бокъяс",
- "move": "Ним вежны",
- "specialloguserlabel": "Пырысь:",
- "log": "Журналъяс",
- "allarticles": "Став гижӧдъяс",
- "mywatchlist": "Видзӧдӧм лыддьӧгӧй",
- "deletepage": "Лист бокӧс бырӧдны",
- "deletereason-dropdown": "* Типовые причины удаления\n** вандализм\n** по запросу автора\n** нарушение авторских прав\n* MediaWiki\n** Дубликат сообщения с translatewiki.net",
- "protect-level-sysop": "Администраторъяс сӧмын",
- "namespace": "Ним пространство:",
- "contributions": "Вӧлысьлӧн чӧжӧс",
- "mycontris": "Чӧжӧсӧй",
- "whatlinkshere": "Ыстӧдъяс татчӧ",
- "contribslink": "чӧжӧс",
- "newtitle": "Выль ним",
- "movepagebtn": "Лист бокӧс ним вежны",
- "allmessages": "Система юӧртӧмъяс",
- "tooltip-pt-userpage": "Пырысьлӧн лист бокӧй",
- "tooltip-ca-talk": "Гижӧдлӧн сёрнитӧм лист бокӧй али Википедиялӧн дӧнъялӧм лист бокӧй",
- "tooltip-ca-move": "Лист боклӧн ним вежны",
- "specialpages": "Торъя лист бокъяс"
+ "@metadata": {
+ "authors": [
+ "Comp1089",
+ "Yufereff",
+ "ОйЛ"
+ ]
+ },
+ "sunday": "вежалун",
+ "monday": "выльлун",
+ "tuesday": "воторник",
+ "wednesday": "середа",
+ "thursday": "четверг",
+ "friday": "пекнича",
+ "saturday": "субöта",
+ "january": "тӧв шӧр тӧлысь",
+ "february": "урасьӧм тӧлысь",
+ "march": "рака тӧлысь",
+ "april": "кос му тӧлысь",
+ "may_long": "ода кора тӧлысь",
+ "june": "лӧддза-номъя тӧлысь",
+ "july": "сора тӧлысь",
+ "august": "моз тӧлысь",
+ "september": "кӧч тӧлысь",
+ "october": "йирым тӧлысь",
+ "november": "вӧльгым тӧлысь",
+ "december": "ӧшым тӧлысь",
+ "january-gen": "тӧв шӧр",
+ "february-gen": "урасьӧм",
+ "march-gen": "рака",
+ "april-gen": "кос му",
+ "may-gen": "ода кора",
+ "june-gen": "лӧддза-номъя",
+ "july-gen": "сора",
+ "august-gen": "моз",
+ "september-gen": "кӧч",
+ "october-gen": "йирым",
+ "november-gen": "вӧльгым",
+ "december-gen": "ӧшым",
+ "pagecategories": "{{PLURAL:$1|1=Категория|Категория}}",
+ "article": "Гижӧд",
+ "cancel": "Дугӧдны",
+ "mytalk": "Сёрнитан лист бокӧй",
+ "qbfind": "Корсьысьӧм",
+ "qbedit": "Веськӧдны",
+ "namespaces": "Ним пространствояс",
+ "search": "Корсьысьӧм",
+ "searchbutton": "Аддзыны",
+ "searcharticle": "Вуджны",
+ "history_short": "Важвылӧм",
+ "printableversion": "Лэдзӧм версия",
+ "permalink": "Вежласьтӧм ыстӧд",
+ "edit": "Вежны",
+ "delete": "Бырӧдны",
+ "protect": "Дорйыны",
+ "newpage": "Выль лист бок",
+ "talkpagelinktext": "сёрнитанін",
+ "talk": "Сёрнитанін",
+ "toolbox": "Инструментъяс",
+ "otherlanguages": "Мӧд кывъясӧн",
+ "jumptosearch": "корсьысьӧм",
+ "aboutsite": "{{SITENAME}} йылысь",
+ "currentevents": "Быд лунся лоӧмтор",
+ "mainpage": "Медшӧр лист бок",
+ "mainpage-description": "Медшӧр лист бок",
+ "portal": "Йитчӧм",
+ "portal-url": "Project:Йитчӧм портал",
+ "editsection": "веськӧдны",
+ "editold": "веськӧдны",
+ "editlink": "вежны",
+ "editsectionhint": "«$1» секция веськӧдны",
+ "red-link-title": "$1 (гижӧд абу)",
+ "nstab-main": "Гижӧд",
+ "nstab-user": "Пырысь",
+ "nstab-project": "Проект йылысь",
+ "nstab-category": "Категория",
+ "yourname": "Пырысьлӧн ним:",
+ "login": "Висьтасьны",
+ "nav-login-createaccount": "Висьтасьны / гижсьыны",
+ "userlogin": "Висьтасьны али гижсьыны",
+ "logout": "Сеанс эштӧдӧм",
+ "userlogout": "Сеанс эштӧдӧм",
+ "gotaccountlink": "Висьтасьӧй",
+ "loginlanguagelabel": "Кыв: $1",
+ "savearticle": "Лист бокӧс гижны",
+ "newarticle": "(Выль)",
+ "currentrev": "Быд лунся версия",
+ "search-result-size": "$1 ({{PLURAL:$2|$2 кыв}})",
+ "timezonelegend": "Час кытш",
+ "recentchanges": "Выль веськӧдӧмъяс",
+ "hide": "Дзебны",
+ "newpageletter": "В",
+ "boteditletter": "б",
+ "recentchangeslinked-page": "Гижӧдлӧн ним:",
+ "upload": "Файл сӧвтны",
+ "uploadbtn": "Файл сӧвтны",
+ "filehist-datetime": "Кадпас/кад",
+ "filehist-user": "Пырысь",
+ "filehist-comment": "Пасйӧд",
+ "randompage": "Кӧсйытӧг гижӧд",
+ "newpages": "Выль лист бокъяс",
+ "move": "Ним вежны",
+ "specialloguserlabel": "Пырысь:",
+ "log": "Журналъяс",
+ "allarticles": "Став гижӧдъяс",
+ "mywatchlist": "Видзӧдӧм лыддьӧгӧй",
+ "deletepage": "Лист бокӧс бырӧдны",
+ "deletereason-dropdown": "* Типовые причины удаления\n** вандализм\n** по запросу автора\n** нарушение авторских прав\n* MediaWiki\n** Дубликат сообщения с translatewiki.net",
+ "protect-level-sysop": "Администраторъяс сӧмын",
+ "namespace": "Ним пространство:",
+ "contributions": "Вӧлысьлӧн чӧжӧс",
+ "mycontris": "Чӧжӧсӧй",
+ "whatlinkshere": "Ыстӧдъяс татчӧ",
+ "contribslink": "чӧжӧс",
+ "newtitle": "Выль ним",
+ "movepagebtn": "Лист бокӧс ним вежны",
+ "allmessages": "Система юӧртӧмъяс",
+ "tooltip-pt-userpage": "Пырысьлӧн лист бокӧй",
+ "tooltip-ca-talk": "Гижӧдлӧн сёрнитӧм лист бокӧй али Википедиялӧн дӧнъялӧм лист бокӧй",
+ "tooltip-ca-move": "Лист боклӧн ним вежны",
+ "specialpages": "Торъя лист бокъяс"
}
diff --git a/languages/i18n/kw.json b/languages/i18n/kw.json
index e8320d8b..94f5b4b5 100644
--- a/languages/i18n/kw.json
+++ b/languages/i18n/kw.json
@@ -378,14 +378,12 @@
"passwordreset-emailsent": "Ebost dassettya ger tremena re beu danvenys.",
"passwordreset-emailsent-capture": "Ebost dassettya ger tremena re beu danvenys, hag y hyllir y weles a-woles.",
"changeemail": "Chanjya trigva ebost",
- "changeemail-header": "Chanjya trigva ebost an akont",
"changeemail-text": "Lenwewgh an furvlen-ma rag chanjya agas trigva ebost. Y fydh res dhywgh entra agas ger tremena rag afydhya an chanj-ma.",
"changeemail-oldemail": "Agas trigva ebost a-lemmyn:",
"changeemail-newemail": "Agas trigva ebost nowyth:",
"changeemail-none": "(nagonan)",
"changeemail-password": "Agas ger tremena war {{SITENAME}}:",
"changeemail-submit": "Chanjya an trigva ebost",
- "changeemail-cancel": "Hedhi",
"bold_sample": "Tekst tew",
"bold_tip": "Tekst tew",
"italic_sample": "Tekst italek",
@@ -510,7 +508,6 @@
"search-relatedarticle": "Kelmys",
"searchrelated": "kelmys",
"searchall": "oll",
- "showingresultsheader": "{{PLURAL:$5|Sewyans '''$1''' a '''$3'''|Sewyansow '''$1 - $2''' a '''$3'''}} rag '''$4'''",
"search-nonefound": "Nyns esa sewyans vyth owth omdhesedha orth an govyn.",
"powersearch-legend": "Hwilans avonsys",
"powersearch-ns": "Hwilas yn spasys-hanow:",
@@ -727,7 +724,6 @@
"pager-older-n": "{{PLURAL:$1|1 kottha|$1 kottha}}",
"booksources": "Pennfentynyow lyver",
"booksources-search-legend": "Hwilas pennfentynyow lyver",
- "booksources-go": "Mos",
"specialloguserlabel": "Awtour:",
"speciallogtitlelabel": "Kosten (titel po devnydhyer):",
"log": "Kovnotennow",
@@ -768,7 +764,7 @@
"watchlist-details": "Yma {{PLURAL:$1|$1 folen}} war agas rol wolya, marnas folennow keskows.",
"wlheader-showupdated": "Yn '''tew''' y tiskwedhir folennow re beu chanjyes a-dhia agas vysytyans diwettha.",
"wlnote": "A-woles yma an {{PLURAL:$1|chanj diwettha|'''$1''' chanj diwettha}} y'n {{PLURAL:$2|our|'''$2''' our}} diwettha, a-dhia $3, $4.",
- "wlshowlast": "Diskwedhes an $1 our diwettha, an $2 dydh diwettha, po $3",
+ "wlshowlast": "Diskwedhes an $1 our diwettha, an $2 dydh diwettha, po",
"watchlist-options": "Etholyow an rol wolya",
"watching": "Ow kolya...",
"unwatching": "Ow tisgolya...",
@@ -967,7 +963,6 @@
"exif-sharpness-1": "Medhes",
"exif-sharpness-2": "Kales",
"exif-subjectdistancerange-0": "Ankoth",
- "watchlistall2": "puptra",
"namespacesall": "oll",
"monthsall": "oll",
"confirmemail": "Afydhya an drigva ebost",
@@ -998,7 +993,7 @@
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|keskows]])",
"version": "Versyon",
"version-other": "Aral",
- "version-version": "(Versyon $1)",
+ "version-version": "($1)",
"fileduplicatesearch-filename": "Hanow an restren:",
"fileduplicatesearch-submit": "Hwilas",
"specialpages": "Folennow arbennek",
diff --git a/languages/i18n/ky.json b/languages/i18n/ky.json
index f3fb4ec9..02122089 100644
--- a/languages/i18n/ky.json
+++ b/languages/i18n/ky.json
@@ -12,7 +12,9 @@
"Tynchtyk Chorotegin",
"Ztimur",
"Викиней",
- "아라"
+ "아라",
+ "Askar Nazyrov",
+ "Macofe"
]
},
"tog-underline": "Шилтемелердин алдын сызуу:",
@@ -442,7 +444,6 @@
"passwordreset-emailsent-capture": "Төмөндө көрсөтүлгөн эмейлге сырсөздү алмаштыруучу кат жөнөтүлдү.",
"passwordreset-emailerror-capture": "Төмөндө көрсөтүлгөн дарекке сырсөздү алмаштыруу кат түзүлдү,бирок аны {{GENDER:$2|катышуучуга}} жөнөтүү оңунан чыккан жок: $1",
"changeemail": "E-mail даректи өзгөртүү",
- "changeemail-header": "Эл. почтанын дарегин өзгөртүү",
"changeemail-text": "Эмейл дарегиңизди алмаштыруу үчүн ушул үлгүнү толтуруңуз. Өзгөрүүнү аныктоо үчүн сырсөздү киргизүү талап кылынат.",
"changeemail-no-info": "Бул баракка түз кайрылыш үчүн, сиз системага киришиңиз керек.",
"changeemail-oldemail": "Учурдагы e-mail дарек:",
@@ -450,7 +451,6 @@
"changeemail-none": "(жок)",
"changeemail-password": "«{{SITENAME}}» долбоору үчүн сиздин сырсөзүңүз:",
"changeemail-submit": "E-mail'ди өзгөртүү",
- "changeemail-cancel": "Жокко чыгаруу",
"bold_sample": "Калың текст",
"bold_tip": "Калың текст",
"italic_sample": "жантык текст",
@@ -621,7 +621,6 @@
"search-relatedarticle": "Байланыштуу",
"searchrelated": "байланыштуу",
"searchall": "баары",
- "showingresultsheader": "'''$4''' үчүн {{PLURAL:$5|'''$3''' жыйынтыктан '''$1'''-и|'''$1 - $2''' -дан '''$3''' жыйынтык}}",
"search-nonefound": "Талапка төп маалымат табылган жок.",
"powersearch-legend": "Кеңейтилген издөө",
"powersearch-ns": "Аталыш мейкиндиктеринен издөө:",
@@ -869,7 +868,6 @@
"unusedtemplateswlh": "башка шилтемелер",
"randompage": "Тушкелди макала",
"statistics": "Статистика",
- "statistics-header-views": "Көрүү статистикасы",
"statistics-header-users": "Колдонуучулардын статистикасы",
"statistics-header-hooks": "Башка статистика",
"statistics-articles": "Макалалар",
@@ -887,7 +885,6 @@
"uncategorizedtemplates": "Категорияланбаган калыптар",
"unusedcategories": "Колдонулбаган категориялар",
"unusedimages": "Колдонулбаган файлдар",
- "popularpages": "Популярдуу барактар",
"wantedcategories": "Керек болгон категориялар",
"wantedpages": "Керек болгон барактар",
"wantedfiles": "Керек болгон файлдар",
@@ -905,7 +902,6 @@
"pager-older-n": "{{PLURAL:$1|эскирээк 1|эскирээк $1}}",
"booksources": "Китеп тууралуу маалыматтар",
"booksources-search-legend": "Китеп тууралуу маалыматтарды издөө",
- "booksources-go": "Алга",
"specialloguserlabel": "Аткаруучу:",
"speciallogtitlelabel": "Максаты (аталышы же колдонуучу):",
"log": "Журналдар",
@@ -946,7 +942,7 @@
"watch": "Көзөмөлдөө",
"unwatch": "Көзөмөлдөбөө",
"watchlist-details": "Талкуу барактарын эсепке албаганда көзөмөл тизмеңизде {{PLURAL:$1|$1 барак|$1 барак}} бар.",
- "wlshowlast": "Соңку $1 саат $2 күн $3 көрсөтүү.",
+ "wlshowlast": "Соңку $1 саат $2 күн көрсөтүү.",
"watchlist-options": "Көзөмөл тизменин ырастоолору",
"created": "түзүлдү",
"changed": "өзгөртүлдү",
@@ -1083,7 +1079,6 @@
"thumbnail_image-type": "Сүрөт түрү колдолбойт",
"import": "Барактарды импорттоо",
"importinterwiki": "Уики аралык импорт",
- "import-interwiki-source": "Уики-булак/барак:",
"import-interwiki-history": "Бул барактын бүткүл өзгөртүү тарыхын көчүрүү",
"import-interwiki-templates": "Бардык калыптарды камтуу",
"import-interwiki-submit": "Импорттоо",
@@ -1111,9 +1106,7 @@
"import-invalid-interwiki": "Көрсөтүлгөн уикиден импорттоого мүмкүн эмес.",
"importlogpage": "Импорт журналы",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|версия}}",
- "import-logentry-interwiki": "«$1» — уики аралык импорту",
"javascripttest": "JavaScript'ти текшерүү",
- "javascripttest-title": "$1 үчүн текшерүү жүргүзүлүп жатат",
"tooltip-pt-userpage": "Колдонуучу барагыңыз",
"tooltip-pt-mytalk": "Баарлашуу барагыңыз",
"tooltip-pt-anontalk": "Бул IP дарекке арналган талкуулоо барагы",
@@ -1182,7 +1175,6 @@
"pageinfo-header-edits": "Оңдоо тарыхы",
"pageinfo-display-title": "Көрүнүүчү башжазуу",
"pageinfo-article-id": "Барактын идентификатору",
- "pageinfo-views": "Кароолордун саны",
"pageinfo-redirects-name": "Бул баракка багыттамалар",
"pageinfo-firstuser": "Барактын түзүүчүсү",
"pageinfo-lastuser": "Акыркы редактор",
@@ -1315,7 +1307,6 @@
"exif-iimcategory-soi": "Социалдык маселелер",
"exif-iimcategory-spo": "Спорт",
"exif-iimcategory-wea": "Аба-ырайы",
- "watchlistall2": "баары",
"namespacesall": "баары",
"monthsall": "баары",
"confirmemail": "Электрондук даректи аныктоо",
@@ -1348,7 +1339,7 @@
"version-specialpages": "Кызматтык барактар",
"version-variables": "Өзгөрмөлөр",
"version-other": "Башка",
- "version-version": "(Версия $1)",
+ "version-version": "($1)",
"version-license": "Лицензия",
"version-software": "Орнотулган программалык камсыздоо",
"version-software-product": "Продукт",
@@ -1390,16 +1381,16 @@
"logentry-newusers-create2": "$1 эсеп жазуусун түздү",
"logentry-newusers-autocreate": "Автоматтуу түрдө $1 эсеп жазуусу түзүлдү",
"rightsnone": "(жок)",
- "feedback-subject": "Тема:",
- "feedback-message": "Билдирүү:",
- "feedback-cancel": "Жокко чыгаруу",
- "feedback-submit": "Пикир жөнөтүү",
"feedback-adding": "Баракка пикирди кошуу…",
+ "feedback-bugnew": "Мен текшердим. Жаңы ката жөнүндө маалымдоо",
+ "feedback-cancel": "Жокко чыгаруу",
+ "feedback-close": "Даяр",
"feedback-error1": "Ката. API'ден белгисиз натыйжа",
"feedback-error2": "Ката: Оңдоо оңунан чыккан жок",
"feedback-error3": "Ката: API'ден жооп жок",
- "feedback-close": "Даяр",
- "feedback-bugnew": "Мен текшердим. Жаңы ката жөнүндө маалымдоо",
+ "feedback-message": "Билдирүү:",
+ "feedback-subject": "Тема:",
+ "feedback-submit": "Жөнөтүү",
"searchsuggest-search": "Издөө",
"searchsuggest-containing": "кармагандар...",
"api-error-badtoken": "Ички ката: анык эмес токен.",
@@ -1420,5 +1411,31 @@
"duration-years": "$1 {{PLURAL:$1|жыл}}",
"duration-decades": "$1 {{PLURAL:$1|оң жылдык мөөнөт}}",
"duration-centuries": "$1 {{PLURAL:$1|кылым}}",
- "duration-millennia": "$1 {{PLURAL:$1|миң жылдык мөөнөт}}"
+ "duration-millennia": "$1 {{PLURAL:$1|миң жылдык мөөнөт}}",
+ "mediastatistics-table-count": "Файлдар саны",
+ "mediastatistics-table-totalbytes": "Жалпы өлчөм",
+ "mediastatistics-header-unknown": "Белгисиз",
+ "mediastatistics-header-audio": "Аудио",
+ "mediastatistics-header-video": "Видеолор",
+ "mediastatistics-header-office": "Кеңсе",
+ "mediastatistics-header-text": "Тексттик",
+ "special-characters-group-latin": "Латынча",
+ "special-characters-group-latinextended": "Латынча кеңейтилген",
+ "special-characters-group-ipa": "ЭФА (IPA)",
+ "special-characters-group-symbols": "Белгилер",
+ "special-characters-group-greek": "Грек",
+ "special-characters-group-cyrillic": "Кирилик",
+ "special-characters-group-arabic": "Араб",
+ "special-characters-group-arabicextended": "Арабча кеңейтилген",
+ "special-characters-group-persian": "Перс",
+ "special-characters-group-hebrew": "Иврит",
+ "special-characters-group-bangla": "Бенгал",
+ "special-characters-group-tamil": "Тамил",
+ "special-characters-group-telugu": "Телугу",
+ "special-characters-group-sinhala": "Сингала",
+ "special-characters-group-gujarati": "Гужарати",
+ "special-characters-group-devanagari": "Деванагари",
+ "special-characters-group-thai": "Тай",
+ "special-characters-group-lao": "Лаос",
+ "special-characters-group-khmer": "Кхмер"
}
diff --git a/languages/i18n/la.json b/languages/i18n/la.json
index decfd86a..77734a28 100644
--- a/languages/i18n/la.json
+++ b/languages/i18n/la.json
@@ -21,7 +21,8 @@
"UV",
"Žekřil71pl",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Lesgles"
]
},
"tog-underline": "Versores linea denotandi:",
@@ -34,27 +35,27 @@
"tog-showtoolbar": "Affigere trabem redigentem",
"tog-editondblclick": "Percussus duplex redactionem hortetur",
"tog-editsectiononrightclick": "Paginarum segmenta dextero percussu in titulis redigenda",
- "tog-watchcreations": "Paginas quas creo et fasciculos quos impono in paginarum custoditarum indicem addere",
- "tog-watchdefault": "Paginas et fasciculos quos recenseo in paginarum custoditarum indicem addere",
- "tog-watchmoves": "Paginas et fasciculos quos moveo in paginarum custoditarum indicem addere",
- "tog-watchdeletion": "Paginas et fasciculos quos deleo in paginarum custoditarum indicem addere",
+ "tog-watchcreations": "Paginas quas creo et fasciculos quos impono in paginarum observatarum indicem addere",
+ "tog-watchdefault": "Paginas et fasciculos quos recenseo in paginarum observatarum indicem addere",
+ "tog-watchmoves": "Paginas et fasciculos quos moveo in paginarum observatarum indicem addere",
+ "tog-watchdeletion": "Paginas et fasciculos quos deleo in paginarum observatarum indicem addere",
"tog-minordefault": "Notare omnes recensiones quasi minores",
"tog-previewontop": "Monstrare praevisum ante capsam recensiti, non post ipsam",
"tog-previewonfirst": "Praevisum monstrare recensione incipiente",
- "tog-enotifwatchlistpages": "Mittere mihi litteras electronicas si pagina a me custodita vel fasciculus a me custoditus mutatur",
+ "tog-enotifwatchlistpages": "Mittere mihi litteras electronicas si pagina a me observata vel fasciculus a me observatus mutatur",
"tog-enotifusertalkpages": "Mittere mihi litteras electronicas si mea disputatio mutatur",
"tog-enotifminoredits": "Mittere mihi litteras electronicas etiam pro recensionibus minoribus",
"tog-enotifrevealaddr": "Monstrare inscriptio mea electronica in nuntiis notificantibus",
- "tog-shownumberswatching": "Numerum usorum custodientium monstrare",
+ "tog-shownumberswatching": "Numerum usorum observantium monstrare",
"tog-oldsig": "Subscriptio ad tempus adhibita:",
"tog-fancysig": "Subscriptio vicitext (sine nexu automatico)",
"tog-uselivepreview": "Praevisum viventem adhibere (experimentalis)",
"tog-forceeditsummary": "Si recensionem non summatim descripsero, me roga si continuare velim",
- "tog-watchlisthideown": "Celare recensiones meas in paginarum custoditarum indice",
- "tog-watchlisthidebots": "Celare recensiones automatarias in paginarum custoditarum indice",
- "tog-watchlisthideminor": "Celare recensiones minores in paginarum custoditarum indice",
- "tog-watchlisthideliu": "Celare recensiones usorum notorum in paginarum custoditarum indice",
- "tog-watchlisthideanons": "Celare recensiones usorum ignotorum in paginarum custoditarum indice",
+ "tog-watchlisthideown": "Celare recensiones meas in paginarum observatarum indice",
+ "tog-watchlisthidebots": "Celare recensiones automatarias in paginarum observatarum indice",
+ "tog-watchlisthideminor": "Celare recensiones minores in paginarum observatarum indice",
+ "tog-watchlisthideliu": "Celare recensiones usorum notorum in paginarum observatarum indice",
+ "tog-watchlisthideanons": "Celare recensiones usorum ignotorum in paginarum observatarum indice",
"tog-watchlisthidepatrolled": "Recensiones vigilatae paginas custoditas celare",
"tog-ccmeonemails": "Mitte mihi transcriptiones litterarum quas ad alios usores mitto",
"tog-diffonly": "Noli monstrare contenta paginae infra dissimilitudinem",
@@ -393,6 +394,10 @@
"createaccount-text": "Aliquis creavit rationem pro inscriptione electronica tua apud {{grammar:accusative|{{SITENAME}}}} ($4). Nomen usoris est \"$2\" et tessera est \"$3\". Conventum aperias et statim tesseram tuam mutes.\n\nHunc nuntium ignorare potes, si nolis hac ratione uti.",
"login-abort-generic": "Conventum aperire non contigit - Desitum",
"loginlanguagelabel": "Lingua: $1",
+ "pt-login": "Conventum aperire",
+ "pt-login-button": "Conventum aperire",
+ "pt-createaccount": "Conventum creare",
+ "pt-userlogout": "Conventum concludere",
"changepassword": "Tesseram mutare",
"resetpass_header": "Tesseram rationis mutare",
"oldpassword": "Tessera vetus:",
@@ -410,7 +415,6 @@
"passwordreset-emailelement": "Nomen usoris: $1\nMomentarius Tessera: $2",
"changeemail-none": "(nulla)",
"changeemail-submit": "Inscriptionem electronicam mutare",
- "changeemail-cancel": "Abrogare",
"bold_sample": "Litterae pingues",
"bold_tip": "Litterae pingues",
"italic_sample": "Textus litteris Italicis scriptus",
@@ -432,7 +436,7 @@
"summary": "Summarium:",
"subject": "Res/titulus:",
"minoredit": "Haec est recensio minor",
- "watchthis": "Custodire hanc paginam",
+ "watchthis": "Observare hanc paginam",
"savearticle": "Servare hanc rem",
"preview": "Praevidere",
"showpreview": "Monstrare praevisum",
@@ -459,6 +463,7 @@
"newarticletext": "Per nexum progressus es ad paginam quae nondum exsistit.\nNovam paginam si vis creare, in capsam infra praebitam scribe.\n(Vide [$1 paginam auxilii] si plura cognoscere vis.)\nSi hic es propter errorem, solum '''Retrorsum''' in navigatro tuo preme.",
"anontalkpagetext": "----''Haec est pagina disputationis usoris anonymi, solum a loco IP suo noti. Memento locos IP aliquando mutaturos, et a usoribus multis fortasse adhibitos. Si es usor ignotus, et tibi querulae sine causa datae sunt, conventum [[Special:UserLogin/signup|crea]] vel [[Special:UserLogin|aperi]] ad confusionem futuram evitendam.''",
"noarticletext": "Hac in pagina non sunt litterae.\nPotes [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} acta huius paginae videre]\naut [{{fullurl:{{FULLPAGENAME}}|action=edit}} hanc paginam creare]</span>.",
+ "noarticletext-nopermission": "Hac in pagina non sunt litterae.\nPotes [[Special:Search/{{PAGENAME}}|hanc rem in aliis paginis quaerere]] aut <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} acta huius paginae videre], sed tibi non licet hanc paginam creare.",
"userpage-userdoesnotexist": "Usor \"<nowiki>$1</nowiki>\" non est. Visne re vera hanc paginam creare vel recensere?",
"updated": "(Novata)",
"note": "'''Nota:'''",
@@ -509,7 +514,7 @@
"currentrev": "Emendatio recentissima",
"currentrev-asof": "Emendatio recentissima ex $1",
"revisionasof": "Emendatio ex $1",
- "revision-info": "Emendatio ex $1 ab $2",
+ "revision-info": "Emendatio ex $1 ab $2$7",
"previousrevision": "← Emendatio senior",
"nextrevision": "Emendatio novior →",
"currentrevisionlink": "Emendatio currens",
@@ -521,8 +526,8 @@
"histlegend": "Selige pro dissimilitudine: indica emendationes in botones radiales et \"intrare\" in claviatura vel \"comparatio\" imprime ut conferas.<br />\nTitulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,\n'''({{int:last}})''' = dissimilis ab emendatione proxima, '''{{int:minoreditletter}}''' = recensio minor.",
"history-fieldset-title": "Quaerere in paginae historia",
"history-show-deleted": "Solum recensiones deletas monstrare",
- "histfirst": "veterrimus",
- "histlast": "novissimus",
+ "histfirst": "veterrima",
+ "histlast": "novissima",
"historysize": "({{PLURAL:$1|1 octetus|$1 octeti}})",
"historyempty": "(vacua)",
"history-feed-title": "Historia",
@@ -580,7 +585,7 @@
"textmatches": "Textus paginarum adaequat",
"notextmatches": "Nihil verbis quaesitis congruit",
"prevn": "{{PLURAL:$1|$1}} superiores",
- "nextn": "{{PLURAL:$1|$1}} proxima",
+ "nextn": "{{PLURAL:$1|$1 proxima|$1 proximae}}",
"prevn-title": "{{PLURAL:$1|Eventus prior|Eventus priores}} $1",
"nextn-title": "{{PLURAL:$1|Eventus proximus|Eventus proximi}} $1",
"shown-title": "Monstrare $1 {{PLURAL:$1|eventum|eventus}} per paginam",
@@ -624,10 +629,10 @@
"prefs-user-pages": "Paginae usoris",
"prefs-personal": "Minutiae rationis",
"prefs-rc": "Nuper mutata",
- "prefs-watchlist": "Paginae custoditae",
- "prefs-watchlist-days": "Numerus dierum displicandus in paginis tuis custoditis:",
+ "prefs-watchlist": "Paginae observatae",
+ "prefs-watchlist-days": "Numerus dierum displicandus in paginis tuis observatis:",
"prefs-watchlist-days-max": "Numerus maximus: $1 {{PLURAL:$1|dies|dies}}",
- "prefs-watchlist-edits": "Numerus recensionum displicandus in paginis tuis custoditis extensis:",
+ "prefs-watchlist-edits": "Numerus recensionum displicandus in paginis tuis observatis extensis:",
"prefs-watchlist-edits-max": "Numerus maximus: 1000",
"prefs-misc": "Misc",
"prefs-resetpass": "Tesseram mutare",
@@ -754,7 +759,7 @@
"right-rollback": "Cito reverti recensiones proximas usoris cuiuslibet paginae",
"right-import": "Paginas ex vicis aliis importare",
"right-importupload": "Paginas ex fasciculo imponendo importare",
- "right-unwatchedpages": "Indicem paginarum non custoditarum inspicere",
+ "right-unwatchedpages": "Indicem paginarum non observatarum inspicere",
"right-mergehistory": "Historias paginarum confundere",
"right-userrights": "Omnes potestates usorum recensere",
"right-userrights-interwiki": "Potestates usorum aliis in vicis recensere",
@@ -786,13 +791,13 @@
"action-protect": "protectionem huius paginae mutare",
"action-import": "paginas ex vico alio importare",
"action-importupload": "paginas ex fasciculo imponendo importare",
- "action-unwatchedpages": "indicem paginarum non custoditarum inspicere",
+ "action-unwatchedpages": "indicem paginarum non observatarum inspicere",
"action-mergehistory": "historiam huius paginae confundere",
"action-userrights": "omnes potestates usorum recensere",
"action-userrights-interwiki": "potestates usorum aliis in vicis recensere",
"action-siteadmin": "basem datorum obstruere vel deobstruere",
- "action-editmywatchlist": "Recensere paginas custoditas",
- "action-viewmywatchlist": "Spectare paginas custoditas",
+ "action-editmywatchlist": "indicem tuum paginarum observatarum recensere",
+ "action-viewmywatchlist": "indicem tuum paginarum observatarum inspicere",
"nchanges": "$1 {{PLURAL:$1|mutatio|mutationes}}",
"enhancedrc-history": "Historia",
"recentchanges": "Nuper mutata",
@@ -833,8 +838,9 @@
"minoreditletter": "m",
"newpageletter": "N",
"boteditletter": "a",
- "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usor custodiens|usores custodientes}}]",
+ "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usor observans|usores observantes}}]",
"rc_categories_any": "Ulla",
+ "rc-change-size-new": "$1 {{PLURAL:$1|octetus|octeti}} post recensionem",
"newsectionsummary": "/* $1 */ nova pars",
"rc-enhanced-expand": "Minima monstrare",
"rc-enhanced-hide": "Minima celare",
@@ -842,7 +848,7 @@
"recentchangeslinked-feed": "Nuper mutata annexorum",
"recentchangeslinked-toolbox": "Nuper mutata annexorum",
"recentchangeslinked-title": "Nuper mutata in paginis quibus pagina \"$1\" nectit",
- "recentchangeslinked-summary": "Ecce mutationes recentissimas commentationum quae aut paginae cuidam adnectuntur, aut in categoria quadam includuntur. Paginae a [[Special:Watchlist|te custoditae]] '''litteris pinguibus''' monstrantur.",
+ "recentchangeslinked-summary": "Ecce mutationes recentissimas commentationum quae aut paginae cuidam adnectuntur, aut in categoria quadam includuntur. Paginae a [[Special:Watchlist|te observatae]] '''litteris pinguibus''' monstrantur.",
"recentchangeslinked-page": "Titulus paginae:",
"recentchangeslinked-to": "Mutationes commentationum quae huic paginae adnectuntur monstrare",
"upload": "Fasciculum imponere",
@@ -877,7 +883,7 @@
"sourcefilename": "Fasciculi imponendi nomen:",
"destfilename": "Nomen fasciculi petitum:",
"upload-maxfilesize": "Maxima fasciculi magnitudo: $1",
- "watchthisupload": "Custodire hunc fasciculum",
+ "watchthisupload": "Observare hunc fasciculum",
"upload-success-subj": "Impositum est perfectum",
"upload-proto-error": "Protocollum incorrectum",
"upload-file-error": "Erratum internum",
@@ -958,7 +964,6 @@
"statistics": "Census",
"statistics-header-pages": "Census paginarum",
"statistics-header-edits": "Census recensionum",
- "statistics-header-views": "Census visuum",
"statistics-header-users": "Census usorum",
"statistics-header-hooks": "Alia statistica",
"statistics-articles": "Paginae in spatio nominali principali",
@@ -967,12 +972,9 @@
"statistics-files": "Fasciculi impositi",
"statistics-edits": "Recensiones paginarum factae ab initio {{grammar:genitive|{{SITENAME}}}}",
"statistics-edits-average": "Recensiones per paginam",
- "statistics-views-total": "Visus",
- "statistics-views-peredit": "Visus per recensionem",
"statistics-users": "[[Special:ListUsers|Usores]] relati",
"statistics-users-active": "Usores activi",
"statistics-users-active-desc": "Usores qui {{PLURAL:$1|proxima die|proximis $1 diebus}} actionem perfecerunt",
- "statistics-mostpopular": "Paginae plurimum visae",
"pageswithprop-submit": "Pergere",
"doubleredirects": "Redirectiones duplices",
"double-redirect-fixed-move": "[[$1]] mota est et nunc redirigit ad [[$2]]",
@@ -999,7 +1001,6 @@
"uncategorizedtemplates": "Formulae sine categoriis",
"unusedcategories": "Categoriae non in usu",
"unusedimages": "Fasciculi non in usu",
- "popularpages": "Paginae saepe monstratae",
"wantedcategories": "Categoriae desideratae",
"wantedpages": "Paginae desideratae",
"wantedfiles": "Fasciculi desiderati",
@@ -1036,7 +1037,6 @@
"suppress": "Censura",
"booksources": "Librorum fontes",
"booksources-search-legend": "Fontes impressas quaerere",
- "booksources-go": "Ire",
"specialloguserlabel": "Usor:",
"speciallogtitlelabel": "Destinatum (titulus aut usor):",
"log": "Acta",
@@ -1108,24 +1108,24 @@
"emailsenttext": "Nuntium tuum missum est.",
"emailuserfooter": "Has litteras electronicas $1 ad $2 misit per \"Litteras electronicas usori mittere\" in {{grammar:ablative|{{SITENAME}}}}.",
"usermessage-editor": "Nuntius systematis",
- "watchlist": "Paginae custoditae",
- "mywatchlist": "Paginae custoditae",
+ "watchlist": "Paginae observatae",
+ "mywatchlist": "Paginae observatae",
"watchlistfor2": "Pro $1 $2",
- "nowatchlist": "Nullas paginas custodis.",
- "watchlistanontext": "Necesse est $1 ad indicem paginarum custoditarum inspiciendum vel recensendum.",
+ "nowatchlist": "Sunt nullas paginas in indice tuo paginarum observatarum.",
+ "watchlistanontext": "Necesse est conventum aperire ad indicem paginarum observatarum inspiciendum vel recensendum.",
"watchnologin": "Conventum non est apertum",
- "addedwatchtext": "Pagina \"[[:$1]]\" in [[Special:Watchlist|paginas tuas custoditas]] addita est.\nMutationes posthac huic paginae et paginae disputationis ibi notabuntur.",
- "removedwatchtext": "Pagina \"[[:$1]]\" ex [[Special:Watchlist|indice paginarum custoditarum]] remota est.",
- "watch": "Custodire",
- "watchthispage": "Custodire hanc paginam",
- "unwatch": "Decustodire",
- "unwatchthispage": "Abrogare custoditum",
+ "addedwatchtext": "Pagina \"[[:$1]]\" in [[Special:Watchlist|paginas tuas observatas]] addita est.\nMutationes posthac huic paginae et paginae disputationis ibi notabuntur.",
+ "removedwatchtext": "Pagina \"[[:$1]]\" ex [[Special:Watchlist|indice paginarum observatarum]] remota est.",
+ "watch": "Observare",
+ "watchthispage": "Observare hanc paginam",
+ "unwatch": "Non iam observare",
+ "unwatchthispage": "Non iam observare",
"notanarticle": "Res non est",
"notvisiblerev": "Emendatio deleta est",
- "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginae}} in indice paginarum custoditarum tuarum, sine paginis disputationis.",
+ "watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginae}} in indice paginarum observatarum tuarum, sine paginis disputationis.",
"wlnote": "Subter {{PLURAL:$1|est mutatio proxima|sunt '''$1''' mutationes proximae}} in {{PLURAL:$2|proxima hora|proximis '''$2''' horis}} ex $4, $3.",
- "wlshowlast": "Monstrare proximas $1 horas $2 dies $3",
- "watchlist-options": "Indicis paginarum custoditarum praeferentiae",
+ "wlshowlast": "Monstrare proximas $1 horas $2 dies",
+ "watchlist-options": "Indicis paginarum observatarum praeferentiae",
"watching": "Custodiens...",
"unwatching": "Decustodiens...",
"enotif_reset": "Indicare omnes paginas visitatas",
@@ -1157,7 +1157,6 @@
"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",
- "rollback_short": "Reverti",
"rollbacklink": "reverti",
"rollbacklinkcount": "reverti {{PLURAL:$1|unam recensionem|$1 recensiones}}",
"rollbacklinkcount-morethan": "reverti plus quam {{PLURAL:$1|unam recensionem|$1 recensiones}}",
@@ -1268,7 +1267,7 @@
"istemplate": "inclusio",
"isimage": "nexus fasciculi",
"whatlinkshere-prev": "{{PLURAL:$1|superior|$1 superiores}}",
- "whatlinkshere-next": "{{PLURAL:$1|proxima|proxima $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|proxima|proximae $1}}",
"whatlinkshere-links": "← nexus",
"whatlinkshere-hideredirs": "$1 redirectiones",
"whatlinkshere-hidetrans": "$1 inclusiones alia in pagina",
@@ -1287,7 +1286,7 @@
"ipbsubmit": "Obstruere hunc locum",
"ipbother": "Exitus alius:",
"ipboptions": "2 horas:2 hours,1 diem:1 day,3 dies:3 days,1 hebdomadem:1 week,2 hebdomades:2 weeks,1 mensem:1 month,3 menses:3 months,6 menses:6 months,1 annum:1 year,infinite:infinite",
- "ipbwatchuser": "Paginam usoris disputationisque huius usoris custodire",
+ "ipbwatchuser": "Paginam usoris disputationisque huius usoris observare",
"ipb-change-block": "Obstructionem usoris modificare",
"badipaddress": "Locus IP male formatus",
"blockipsuccesssub": "Locus prospere obstructus est",
@@ -1359,7 +1358,7 @@
"cant-move-user-page": "Tibi non licet paginas usorum movere (solum eorum subpaginas).",
"cant-move-to-user-page": "Tibi non licet paginam ad paginam usoris movere (solum ad paginae usoris subpaginam).",
"newtitle": "Ad titulum novum:",
- "move-watch": "Hanc paginam custodire",
+ "move-watch": "Observare et titulum veterem et titulum novum",
"movepagebtn": "Paginam movere",
"pagemovedsub": "Pagina mota est",
"movepage-moved": "'''\"$1\" mota est ad \"$2\"'''",
@@ -1426,12 +1425,11 @@
"import-upload": "XML imponere et importare",
"importlogpage": "Acta adportationum",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|emendatio|emendationes}}",
- "import-logentry-interwiki": "adportavit transvici $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|emendatio|emendationes}} ex $2",
"tooltip-pt-userpage": "Pagina usoris tua",
"tooltip-pt-mytalk": "Pagina disputationis tua",
"tooltip-pt-preferences": "Praeferentiae tuae",
- "tooltip-pt-watchlist": "Paginae quas custodis ut earum mutationes facilius videas",
+ "tooltip-pt-watchlist": "Paginae quas observas ut earum mutationes facilius videas",
"tooltip-pt-mycontris": "Index conlationum tuarum",
"tooltip-pt-login": "Te conventum aperire hortamur, non autem requisitum",
"tooltip-pt-logout": "Conventum concludere",
@@ -1444,8 +1442,8 @@
"tooltip-ca-delete": "Delere hanc paginam",
"tooltip-ca-undelete": "Restituere emendationes huic paginae conlatas antequam haec pagina deleta esset",
"tooltip-ca-move": "Movere hanc paginam",
- "tooltip-ca-watch": "Addere hanc paginam tuis paginis custoditis",
- "tooltip-ca-unwatch": "Removere hanc paginam ex tuis paginis custoditis",
+ "tooltip-ca-watch": "Addere hanc paginam tuis paginis observatis",
+ "tooltip-ca-unwatch": "Removere hanc paginam ex tuis paginis observatis",
"tooltip-search": "Quaerere aliquid in {{grammar:ablative|{{SITENAME}}}}",
"tooltip-search-go": "I ad paginam cum hoc titulo exacto, si est",
"tooltip-search-fulltext": "Hunc textum in paginis quaerere",
@@ -1481,7 +1479,7 @@
"tooltip-preview": "Praevidere mutationes tuas, quaesumus hoc utere antequam servas!",
"tooltip-diff": "Monstrare mutationes textui tuas",
"tooltip-compareselectedversions": "Videre dissimilitudinem inter ambas emendationes selectas huius paginae",
- "tooltip-watch": "Addere hanc paginam tuis paginis custoditis",
+ "tooltip-watch": "Addere hanc paginam tuis paginis observatis",
"tooltip-recreate": "Recreare hanc paginam etiamsi deleta est",
"tooltip-upload": "Incipere imponere",
"tooltip-rollback": "\"Revertere\" omnes ultimi editoris in hac pagina recensiones statim revertit",
@@ -1523,6 +1521,7 @@
"file-nohires": "Nulla maior resolutio exstat.",
"svg-long-desc": "fasciculus SVG, nominale $1 × $2 elementa imaginalia, magnitudo fasciculi: $3",
"show-big-image": "Resolutio completa",
+ "show-big-image-size": "$1 × $2 elementa imaginalia",
"file-info-gif-frames": "$1 {{PLURAL:$1|replum|repla}}",
"newimages": "Fasciculi novi",
"imagelisttext": "Subter est index {{PLURAL:$1|'''unius''' fasciculi|'''$1''' fasciculorum}} digestus $2.",
@@ -1687,7 +1686,6 @@
"exif-gpsdestdistance-n": "Milia nautica",
"exif-gpsdirection-t": "Directio vera",
"exif-gpsdirection-m": "Directio magnetica",
- "watchlistall2": "omnes",
"namespacesall": "omnia",
"monthsall": "omnes",
"confirmemail": "Inscriptionem electronicam adfirmare",
@@ -1728,14 +1726,14 @@
"size-kilobytes": "$1 chiliocteti",
"size-megabytes": "$1 megaocteti",
"size-gigabytes": "$1 gigaocteti",
- "watchlistedit-normal-title": "Indicem paginarum custoditarum recensere",
+ "watchlistedit-normal-title": "Indicem paginarum observatarum recensere",
"watchlistedit-normal-submit": "Removere titulos",
- "watchlistedit-raw-title": "Indicem paginarum custoditarum quasi textum recensere",
- "watchlistedit-raw-legend": "Indicem paginarum custoditarum quasi textum recensere",
+ "watchlistedit-raw-title": "Indicem paginarum observatarum quasi textum recensere",
+ "watchlistedit-raw-legend": "Indicem paginarum observatarum quasi textum recensere",
"watchlistedit-raw-titles": "Tituli:",
- "watchlisttools-view": "Mutationes paginarum custoditarum monstrare",
- "watchlisttools-edit": "Indicem paginarum custoditarum inspicere vel recensere",
- "watchlisttools-raw": "Indicem paginarum custoditarum quasi textum recensere",
+ "watchlisttools-view": "Mutationes paginarum observatarum inspicere",
+ "watchlisttools-edit": "Indicem paginarum observatarum inspicere vel recensere",
+ "watchlisttools-raw": "Indicem paginarum observatarum quasi textum recensere",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|disputatio]])",
"version": "Versio",
"version-specialpages": "Paginae speciales",
@@ -1788,10 +1786,11 @@
"logentry-newusers-create2": "Ratio usoris $3 creata est ab usore $1",
"logentry-newusers-autocreate": "Ratio usoris $1 automatice creata est",
"rightsnone": "(nullus)",
- "feedback-message": "Nuntius:",
+ "revdelete-summary": "summarium recensionis",
"feedback-cancel": "Dimittere",
- "feedback-error2": "Error: Recensio non additur",
"feedback-close": "Factum",
+ "feedback-error2": "Error: Recensio non additur",
+ "feedback-message": "Nuntius:",
"searchsuggest-search": "Quaerere",
"searchsuggest-containing": "continens...",
"api-error-empty-file": "Fasciculus inmissus vacuus est.",
@@ -1801,5 +1800,14 @@
"api-error-illegal-filename": "Nomen fasciculi permissum non est.",
"api-error-mustbeloggedin": "Ad fasciculos inmittendos conventum aperire necesse est.",
"api-error-unknownerror": "Error incognitus: \"$1\".",
- "expandtemplates": "Formulas resolvere"
+ "expandtemplates": "Formulas resolvere",
+ "special-characters-group-latin": "Latinum",
+ "special-characters-group-latinextended": "Latinum extensum",
+ "special-characters-group-ipa": "API",
+ "special-characters-group-symbols": "Symbola",
+ "special-characters-group-greek": "Graecum",
+ "special-characters-group-cyrillic": "Cyrillicum",
+ "special-characters-group-arabic": "Arabicum",
+ "special-characters-group-hebrew": "Hebraicum",
+ "special-characters-group-telugu": "Telugu"
}
diff --git a/languages/i18n/lad.json b/languages/i18n/lad.json
index db68ff1b..15210dbf 100644
--- a/languages/i18n/lad.json
+++ b/languages/i18n/lad.json
@@ -398,13 +398,11 @@
"passwordreset-email": "Adresso de letral:",
"passwordreset-emailelement": "Usuario: $1\nKontrasenya temporal: $2",
"changeemail": "Kambiar adreso de korreo elektroniko",
- "changeemail-header": "Kambiar adreso de korreo elektroniko de kuento",
"changeemail-oldemail": "Adreso de korreo elektroniko aktual:",
"changeemail-newemail": "Muevo adreso de korreo elektroniko:",
"changeemail-none": "(dinguno)",
"changeemail-password": "Tu kontrasenya en {{SITENAME}}:",
"changeemail-submit": "Trocar letral",
- "changeemail-cancel": "Anular",
"resettokens-token-label": "$1(valor aktual: $2)",
"bold_sample": "Teksto reforçado",
"bold_tip": "Teksto reforçado",
@@ -547,7 +545,6 @@
"search-interwiki-more": "(mas)",
"searchrelated": "lisionado",
"searchall": "todos",
- "showingresultsheader": "{{PLURAL:$5|Resultado '''$1''' de '''$3'''|Resultados '''$1-$2''' de '''$3'''}} parâ '''$4'''",
"search-nonefound": "No ay resultados por esta búxquida.",
"powersearch-legend": "Búsqueda adelantada",
"powersearch-ns": "Busca en los espacios de nombres:",
@@ -722,7 +719,6 @@
"download": "deskargar",
"unusedtemplateswlh": "otros enlases",
"randompage": "Hoja por azardo",
- "randomincategory-selectcategory-submit": "Ir",
"statistics": "Estatísticas",
"statistics-articles": "Pajinas de kontenido",
"statistics-pages": "Pajinas",
@@ -754,7 +750,6 @@
"pager-older-n": "{{PLURAL:$1|1 de antes|$1 de antes}}",
"booksources": "Fuentes de livros",
"booksources-search-legend": "Buscar fuentes de libros",
- "booksources-go": "Ir",
"log": "Rejistros",
"allpages": "Todas las hojas",
"nextpage": "La sigiente pajina ($1)",
@@ -804,7 +799,7 @@
"watchthispage": "Cudia esta hoja",
"unwatch": "dexa de cudiar",
"watchlist-details": "{{PLURAL:$1|$1 hoja|$1 hojas}} en tu lista de escogidas, sin contar las de la diskussión.",
- "wlshowlast": "Ver los trocamientos de las últimas $1 oras, $2 días $3",
+ "wlshowlast": "Ver los trocamientos de las últimas $1 oras, $2 días",
"watchlist-options": "Opciones de la lista de escogidas",
"watching": "Cudiando...",
"unwatching": "Dexando de cudiar...",
@@ -1043,7 +1038,6 @@
"exif-iimcategory-hth": "Salud",
"exif-iimcategory-lab": "Lavoro",
"exif-iimcategory-sci": "Sensiya i teknolojiya",
- "watchlistall2": "todos",
"namespacesall": "todos",
"monthsall": "(todos)",
"confirmemail": "Konfirmar adreso de korreo elektronika",
@@ -1074,7 +1068,7 @@
"version": "Versión",
"version-specialpages": "Pajinas espesiales",
"version-other": "Otros",
- "version-version": "(Versión $1)",
+ "version-version": "($1)",
"version-ext-colheader-credits": "Otores",
"version-poweredby-others": "otros",
"version-software-version": "Versión",
@@ -1103,9 +1097,9 @@
"htmlform-yes": "Si",
"logentry-newusers-autocreate": "El cuento de usuario $1 fue {{GENDER:$2|kreado}} otomatikamente",
"rightsnone": "(dinguno)",
- "feedback-subject": "Sujeto",
- "feedback-message": "Messaje",
"feedback-cancel": "Anular",
+ "feedback-message": "Messaje",
+ "feedback-subject": "Sujeto",
"searchsuggest-search": "Bushkar",
"duration-seconds": "$1{{PLURAL:$1|segundo|segundos}}",
"duration-minutes": "$1{{PLURAL:$1|minuto|minutos}}",
diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json
index a193f4ba..4319ac34 100644
--- a/languages/i18n/lb.json
+++ b/languages/i18n/lb.json
@@ -43,7 +43,7 @@
"tog-shownumberswatching": "D'Zuel vun de Benotzer déi dës Säit iwwerwaache weisen",
"tog-oldsig": "Aktuell Ënnerschrëft:",
"tog-fancysig": "Ënnerschrëft als Wiki-Text behandelen (Ouni automatesche Link)",
- "tog-uselivepreview": "Live-Preview benotzen (experimentell)",
+ "tog-uselivepreview": "Live-Preview benotzen",
"tog-forceeditsummary": "Warnen, wa beim Späicheren de Resumé feelt",
"tog-watchlisthideown": "Meng Ännerungen op menger Iwwerwaachungslëscht verstoppen",
"tog-watchlisthidebots": "Ännerunge vu Botten op menger Iwwerwaachungslëscht verstoppen",
@@ -230,6 +230,7 @@
"pool-timeout": "Timeout bis d'Spär opgehuewen ass",
"pool-queuefull": "Pool-Queue ass voll",
"pool-errorunknown": "Onbekannte Feeler",
+ "poolcounter-usage-error": "Benotzungsfeeler: $1",
"aboutsite": "Iwwer {{SITENAME}}",
"aboutpage": "Project:Iwwer",
"copyright": "Den Inhalt ass ënner $1 disponibel wann et net anescht uginn ass.",
@@ -239,6 +240,7 @@
"disclaimers": "Impressum",
"disclaimerpage": "Project:Impressum",
"edithelp": "Hëllef beim Änneren",
+ "helppage-top-gethelp": "Hëllef",
"mainpage": "Haaptsäit",
"mainpage-description": "Haaptsäit",
"policy-url": "Project:Richtlinnen",
@@ -317,6 +319,7 @@
"readonly_lag": "D'Datebank gouf automatesch gespaart fir datt d'Zweetserveren (slaves) nees mat dem Haaptserver (master) synchron geschalt kënne ginn.",
"internalerror": "Interne Feeler",
"internalerror_info": "Interne Feeler: $1",
+ "internalerror-fatal-exception": "Fatale Feeler vum Typ \"$1\"",
"filecopyerror": "De Fichier \"$1\" konnt net op \"$2\" kopéiert ginn.",
"filerenameerror": "De Fichier \"$1\" konnt net op \"$2\" ëmbenannt ginn.",
"filedeleteerror": "De Fichier \"$1\" konnt net geläscht ginn.",
@@ -342,7 +345,8 @@
"viewsourcetext": "Dir kënnt de Quelltext vun dëser Säit kucken a kopéieren:",
"viewyourtext": "Dir kënnt de Quelltext vun '''Ären Ännerungen''' op dëser Säit kucken a kopéieren:",
"protectedinterface": "Op dëser Säit fannt Dir Text fir de Sprooch-Interface vun der Software op dëser Wiki an dofir ass si gespaart fir Mëssbrauch ze verhënneren.\n\nFir Iwwersetzungen fir all Wikien bäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net/ translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
- "editinginterface": "'''Opgepasst:''' Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. \nÄnnerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer op dëser Wiki gesi ginn. \nFir d'Iwwersetzunge fir all Wikien derbäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
+ "editinginterface": "<strong>Opgepasst:</strong> Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. \nÄnnerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer op dëser Wiki gesi ginn.",
+ "translateinterface": "Fir Iwwersetzunge fir all Wikien z'änneren oder dobäizesetze benotzt w.e.g. [//translatewiki.net/ translatewiki.net], de Projet fir d'Lokalisatioun vu MediaWiki.",
"cascadeprotected": "Dës Säit gouf fir Ännerunge gespaart, well se duerch Cascadeprotectioun vun {{PLURAL:$1|dëser Säit|dëse Säite}} gespaart ass mat der Cascadenoptioun:\n$2",
"namespaceprotected": "Dir hutt net déi néideg Rechter fir d'Säiten am Nummraum '''$1''' ze änneren.",
"customcssprotected": "Dir hutt net d'Recht dës CSS-Säit z'änneren, well dorop déi perséinlech Astellunge vun engem anere Benotzer gespäichert sinn.",
@@ -399,6 +403,8 @@
"userlogin-resetlink": "Hutt Dir d'Detailer vun Ärem Login vergiess?",
"userlogin-resetpassword-link": "Hutt Dir Äert Passwuert vergiess?",
"userlogin-helplink2": "Hëllef beim Aloggen",
+ "userlogin-loggedin": "Dir sidd schonn als {{GENDER:$1|$1}} ageloggt.\nBenotzt de Formulaire hei drënner fir Iech als een anere Benotzer anzeloggen.",
+ "userlogin-createanother": "Maacht een anere Benotzerkont op",
"createacct-emailrequired": "E-Mail-Adress",
"createacct-emailoptional": "E-Mailadress (fakultativ)",
"createacct-email-ph": "Gitt Är E-Mail-Adress an",
@@ -434,6 +440,7 @@
"wrongpassword": "Dir hutt e falscht (oder kee) Passwuert aginn. Probéiert w.e.g. nach eng Kéier.",
"wrongpasswordempty": "D'Passwuert dat Dir aginn hutt war eidel.\nProbéiert w.e.g. nach eng Kéier.",
"passwordtooshort": "Passwierder musse mindestens {{PLURAL:$1|1 Zeeche|$1 Zeeche}} laang sinn.",
+ "passwordtoolong": "Passwierder kënnen net méi laang wéi {{PLURAL:$1|1 Zeeche|$1 Zeeche}} sinn.",
"password-name-match": "Äert Passwuert muss verschidde vun Ärem Benotzernumm sinn.",
"password-login-forbidden": "D'Benotze vun dësem Benotzernumm a Passwuert gouf verbueden.",
"mailmypassword": "Passwuert zrécksetzen",
@@ -558,6 +565,7 @@
"anoneditwarning": "<strong>Opgepasst:</strong> Dir sidd net ageloggt. Dowéinst gëtt amplaz vun engem Benotzernumm Är IP Adress ëffentlech gewise wann Dir Ännerunge maacht. Wann Dir <strong>[$1 Iech aloggt]</strong> oder <strong>[$2 e Bnotzerkont opmaachen]</strong>, Är Ännerunge ginn dann Ärem Benotzerkont zougedeelt, genee wéi aner Avantagen.",
"anonpreviewwarning": "''Dir sidd net ageloggt. Wann Dir ofspäichert gëtt Är IP-Adress an der Lëscht vun de Versioune vun dëser Säit enregistréiert.''",
"missingsummary": "'''Erënnerung:''' Dir hutt kee Resumé aginn.\nWann Dir nacheemol op \"{{int:savearticle}}\" klickt, gëtt Är Ännerung ouni Resumé ofgespäichert.",
+ "selfredirect": "<strong>Opgepasst:</strong> Dir maacht eng Viruleedung vun dëser Aäit op sech selwer.\n\nEt ka sinn datt Dir déi falsch Zilsäit fir d'Viruleedung aginn hutt oder datt Dir déi falsch Säit ännert.\n\nWann Dir nach eng Kéier op \"{{int:savearticle}}\" klickt, da gëtt d'Viruleedung trotzdem ugeluecht.",
"missingcommenttext": "Gitt w.e.g. eng Bemierkung an.",
"missingcommentheader": "'''Denkt drun:''' Dir hutt keen Titel/Sujet fir dës Bemierkung aginn.\nWann Dir nach en Kéier op \"{{int:savearticle}}\" klickt da gëtt Är Ännerung ouni Titel gespäichert.",
"summary-preview": "Resumé kucken ouni ofzespäicheren:",
@@ -656,6 +664,8 @@
"content-model-text": "Kloertext",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Eidelen Objet",
+ "content-json-empty-array": "Eidel Tabell",
"expensive-parserfunction-warning": "'''Opgepasst:'' Dës Säit huet ze vill Ufroe vu komplexe Parserfunktiounen.\n\nEt däerfen net méi wéi $2 {{PLURAL:$2|Ufro|Ufroe}} sinn, aktuell {{PLURAL:$2|ass et $1 Ufro|sinn et $1 Ufroe}}.",
"expensive-parserfunction-category": "Säiten, déi komplex Parserfunktiounen ze dacks opruffen",
"post-expand-template-inclusion-warning": "Opgepasst: D'Gréisst vun den agebonnene Schablounen ass ze grouss, e puer Schabloune kënnen net agebonne ginn.",
@@ -693,7 +703,7 @@
"page_last": "lescht",
"histlegend": "Fir d'Ännerungen unzeweisen: Klickt déi zwou Versiounen un, déi solle verglach ginn.<br />\n*(aktuell) = Ënnerscheed mat der aktueller Versioun,\n*(lescht) = Ënnerscheed mat der aler Versioun,\n*k = Kleng Ännerung.",
"history-fieldset-title": "An de Versioune sichen",
- "history-show-deleted": "nëmmen déi geläschten",
+ "history-show-deleted": "nëmmen déi geläscht",
"histfirst": "eelst",
"histlast": "neist",
"historysize": "({{PLURAL:$1|1 Byte|$1 Byten}})",
@@ -704,7 +714,7 @@
"history-feed-empty": "Déi ugefrote Säit gëtt et net.\nVläicht gouf se geläscht oder geréckelt.\n[[Special:Search|Sicht]] op {{SITENAME}} no relevanten neie Säiten.",
"rev-deleted-comment": "(Resumé vun der Ännerung ewechgeholl)",
"rev-deleted-user": "(Benotzernumm ewechgeholl)",
- "rev-deleted-event": "(Aktioun aus dem Logbuch erausgeholl)",
+ "rev-deleted-event": "(Detailer aus dem Logbuch erausgeholl)",
"rev-deleted-user-contribs": "[Benotzernumm oder IP-Adress ewechgeholl - Ännerung an der Lescht vun de Kontributioune verstoppt]",
"rev-deleted-text-permission": "Dës Versioun vun der Säit gouf '''geläscht'''.\nDir fannt eventuell méi Informatiounen an der [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Läsch-Logbuch].",
"rev-suppressed-text-permission": "Dës Versioun vun der Säit gouf <strong>geläscht</strong>..\nDetailer fannt Dir am [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Läsch-Logbuch].",
@@ -737,7 +747,7 @@
"revdelete-legend": "Limitatioune fir d'Sichtbarkeet festleeën",
"revdelete-hide-text": "Text vun der Versioun",
"revdelete-hide-image": "Bildinhalt verstoppen",
- "revdelete-hide-name": "Logbuch-Aktioun verstoppen",
+ "revdelete-hide-name": "Zil a Parametere verstoppen",
"revdelete-hide-comment": "Resumé vun der Ännerung",
"revdelete-hide-user": "Dem Auteur säi Benotzernumm/IP-Adress",
"revdelete-hide-restricted": "Donnéeën och fir Administrateuren suppriméieren geneesou wéi fir déi Aner",
@@ -790,7 +800,6 @@
"mergehistory-same-destination": "Ausgangs- an Zilsäit däerfen net déi selwescht sinn",
"mergehistory-reason": "Grond:",
"mergelog": "Fusiouns-Logbuch",
- "pagemerge-logentry": "[[$1]] zesummegeluecht an [[$2]] (Versioune bis $3)",
"revertmerge": "Zesummeféieren ophiewen",
"mergelogpagetext": "Lëscht vun de rezenten Zesummeféierunge vu Versiounsgeschichten.",
"history-title": "$1: Historique vun de Versiounen",
@@ -813,6 +822,8 @@
"notextmatches": "Keng Iwwereneestëmmungen",
"prevn": "vireg {{PLURAL:$1|$1}}",
"nextn": "nächst {{PLURAL:$1|$1}}",
+ "prev-page": "vireg Säit",
+ "next-page": "nächst Säit",
"prevn-title": "Vireg $1 {{PLURAL:$1|Resultat|Resultater}}",
"nextn-title": "Nächst $1 {{PLURAL:$1|Resultat|Resultater}}",
"shown-title": "$1 {{PLURAL:$1|Resultat|Resultater}} pro Säit weisen",
@@ -831,6 +842,7 @@
"search-result-category-size": "{{PLURAL:$1|1 Säit|$1 Säiten}} ({{PLURAL:$2|1 Ënnerkategorie|$2 Ënnerkategorien}}, {{PLURAL:$3|1 Fichier|$3 Fichieren}})",
"search-redirect": "(Viruleedung $1)",
"search-section": "(Abschnitt $1)",
+ "search-category": "(Kategorie $1)",
"search-file-match": "(Inhalt vum Fichier passt)",
"search-suggest": "Mengt Dir: $1",
"search-interwiki-caption": "Schwësterprojeten",
@@ -840,6 +852,8 @@
"searchrelated": "a Verbindng",
"searchall": "all",
"showingresults": "Hei gesitt der {{PLURAL:$1| '''1''' Resultat|'''$1''' Resultater}}, ugefaange mat #'''$2'''.",
+ "showingresultsinrange": "Hei drënner {{PLURAL:$1|<strong>gëtt 1</strong> Resultat|gi(nn) <strong>$1</strong> Resultater}} aus dem Beräich #<strong>$2</strong> bis #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Resultat <strong>$1</strong> of <strong>$3</strong>|Resultater <strong>$1 - $2</strong> vu(n) <strong>$3</strong>}}",
"search-nonefound": "Fir Är Ufro gouf näischt fonnt.",
"powersearch-legend": "Erweidert Sich",
"powersearch-ns": "Sichen an den Nummraim:",
@@ -862,6 +876,11 @@
"prefs-personal": "Benotzerprofil",
"prefs-rc": "Rezent Ännerungen",
"prefs-watchlist": "Iwwerwaachungslëscht",
+ "prefs-editwatchlist": "Iwwerwaachungslëscht änneren",
+ "prefs-editwatchlist-label": "Ännert d'Elementer op Ärer Iwwerwaachungslëscht:",
+ "prefs-editwatchlist-edit": "Titelen op Ärer Iwwerwaachungslëscht kucken an erofhuelen",
+ "prefs-editwatchlist-raw": "Net-formatéiert Iwwerwaachungslëscht änneren",
+ "prefs-editwatchlist-clear": "Är Iwwerwaachungslëscht eidelmaachen",
"prefs-watchlist-days": "Zuel vun den Deeg, déi an der Iwwerwaachungslëscht ugewise solle ginn:",
"prefs-watchlist-days-max": "Maximal $1 {{PLURAL:$1|Dag|Deeg}}",
"prefs-watchlist-edits": "Maximal Zuel vun den Ännerungen déi an der erweiderter Iwwerwaachungslëscht ugewise solle ginn:",
@@ -931,7 +950,7 @@
"gender-female": "Si ännert Wikisäiten",
"prefs-help-gender": "Fakultativ:\nD'Software benotzt seng Wäerter fir Iech unzeschwätzen a fir vun Iech vis-a-vis vun Aneren grammatesch ''Gender-korrekt'' ze schwätzen. \n\nDës Informatioun ass ëffentlech.",
"email": "E-Mail",
- "prefs-help-realname": "Äre richtegen Numm ass fakultativ. Wann Dir en ugitt, gëtt e benotzt fir Iech Är Kontributiounen zouzeuerdnen.",
+ "prefs-help-realname": "De richtegen Numm ass fakultativ.\nWann en ugi gouf, gëtt e benotzt fir Iech Är Kontributiounen zouzeuerdnen.",
"prefs-help-email": "D'E-Mailadress ass fakultativ, awer si gëtt gebraucht fir Iech Äert Passwuert ze mailen, wann Dir et géift vergiessen.",
"prefs-help-email-others": "Dir kënnt Iech och dofir decidéieren datt Anerer Iech iwwer Är Diskussiounssäit kontaktéieren ouni datt Dir derbäi Är Identitéit verrode musst.",
"prefs-help-email-required": "Eng gëlteg E-Mail-Adress gëtt heifir gebraucht.",
@@ -952,6 +971,7 @@
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Ënnerscheeder",
"prefs-help-prefershttps": "Dës Astellung gëtt déi nächste Kéier wierksam wou Dir Iech ageloggt.",
+ "prefswarning-warning": "Dir hutt Ännerunge vun Ären Astellunge gemaach, déi nach net gespäichert goufen.\n\nWann Dir vun dëser Säit erof gitt ouni op \"$1\" ze klicken, da ginn Är Astellungen net aktualiséiert.",
"prefs-tabs-navigation-hint": "Tipp: Dir kënnt d'Feiler no lénks an no riets benotze fir tëscht den Tabs an der Lëscht vun den Tabs ze navigéieren.",
"email-address-validity-valid": "D'E-Mail-Adress schéngt valabel ze sinn",
"email-address-validity-invalid": "Gitt eng valabel E-Mail-Adress an",
@@ -1037,6 +1057,7 @@
"right-protect": "Protektiounsniveauen änneren a kaskadegespaart Säiten änneren",
"right-editprotected": "Protegéiert Säiten als \"{{int:protect-level-sysop}}\" änneren",
"right-editsemiprotected": "Säiten déi als \"{{int:protect-level-autoconfirmed}}\" gespaart sinn änneren",
+ "right-editcontentmodel": "De Modell vum Inhalt vun enger Säit änneren",
"right-editinterface": "De Benotzerinterface änneren",
"right-editusercssjs": "Anere Benotzer hir CSS a JS Fichieren änneren",
"right-editusercss": "Anere Benotzer hir CSS Fichieren änneren",
@@ -1109,6 +1130,7 @@
"action-viewmywatchlist": "kuckt Är Iwwerwaachungslëscht",
"action-viewmyprivateinfo": "Är privat Informatioune kucken",
"action-editmyprivateinfo": "Är privat Informatiounen änneren",
+ "action-editcontentmodel": "de Modell vum Inhalt vun enger Säit änneren",
"nchanges": "$1 {{PLURAL:$1|Ännerung|Ännerungen}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|zanter dem leschte Passage}}",
"enhancedrc-history": "Versiounen",
@@ -1126,7 +1148,7 @@
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kuckt och [[Special:NewPages|Lëscht vun den neie Säiten]])",
"recentchanges-legend-plusminus": "''(±123)''",
"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).",
- "rclistfrom": "Nei Ännerunge vu(n) $3 $2 u weisen",
+ "rclistfrom": "Nei Ännerunge vum $3 $2 u weisen",
"rcshowhideminor": "Kleng Ännerunge $1",
"rcshowhideminor-show": "Weisen",
"rcshowhideminor-hide": "Verstoppen",
@@ -1180,9 +1202,9 @@
"uploaderror": "Feeler bäim Eroplueden",
"upload-recreate-warning": "'''Opgepasst: E Fichier mat deem Numm gouf scho geläscht oder geréckelt.'''\n\nHei fannt Dir en Extrait aus dem Läsch- a Réckel-Logbuch fir dëse Fichier.",
"uploadtext": "Benotzt dëse Formulaire, fir nei Fichieren eropzelueden.\nGitt op d'[[Special:FileList|Lëscht vun den eropgeluedene Fichieren]], fir no Fichieren ze sichen déi virdrun eropgeluede goufen, Eropluedunge fannt dir an der [[Special:Log/upload|Lëscht vun den eropgeluedene Fichieren]], geläscht Fichiere stinn am [[Special:Log/delete|Läschlog]].\n\nFir e '''Bild''' op enger Säit ze benotzen, schreift amplaz vum Bild eng vun dëse Formelen:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.jpg]]</nowiki></code>''' fir déi ganz Versioun vum Fichier ze benotzen\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fichier.png|200px|thumb|left|alt text]]</nowiki></code>''' fir eng 200 Pixel breet Versioun an enger Këscht am lénke Rand mat 'alt text' als Beschreiwung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fichier.ogg]]</nowiki></code>''' fir e Fichier direkt ze verlinken ouni de Fichier ze weisen",
- "upload-permitted": "Erlaabt Formater vun de Fichieren: $1.",
- "upload-preferred": "Fichierszorten déi am beschte funktionéieren: $1.",
- "upload-prohibited": "Verbuede Fichiers Formater: $1.",
+ "upload-permitted": "{{PLURAL:$2|Erlaabten Typ|Erlaabt Type}} vu Fichieren: $1.",
+ "upload-preferred": "{{PLURAL:$2|Fichierszort|Fichierszorten}} déi am beschte {{PLURAL:$2|funktionéiert|funktionéieren}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Verbuedene|Verbuede}} Fichiers {{PLURAL:$2|Format|Formater}}: $1.",
"uploadlogpage": "Logbuch vum Eroplueden",
"uploadlogpagetext": "Dëst ass d'Lëscht vun de rezente Fichieren déi eropgeluede goufen.\nKuckt [[Special:NewFiles|d'Gallerie vun de neie Fichieren]] wann Dir méi e visuellen Iwwerbléck wëllt",
"filename": "Numm vum Fichier",
@@ -1436,7 +1458,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Säitestatistiken",
"statistics-header-edits": "Statistik vun den Ännerungen",
- "statistics-header-views": "Statistiken iwwer d'Visitten",
"statistics-header-users": "Benotzerstatistik",
"statistics-header-hooks": "Aner Statistiken",
"statistics-articles": "Säite mat Inhalt",
@@ -1445,13 +1466,9 @@
"statistics-files": "Eropgeluede Fichieren",
"statistics-edits": "Säitenännerungen zanter datt et {{SITENAME}} gëtt",
"statistics-edits-average": "Duerchschnëttlech Zuel vun Ännerunge pro Säit",
- "statistics-views-total": "Total vun den Oprif",
- "statistics-views-total-desc": "Kucke vu Säiten déi et net gëtt a vu Spezialsäite sinn net mat dran",
- "statistics-views-peredit": "Affichage pro Ännerung",
"statistics-users": "Registréiert [[Special:ListUsers|Benotzer]]",
"statistics-users-active": "Aktiv Benotzer",
"statistics-users-active-desc": "Benotzer déi während {{PLURAL:$1|dem leschten Dag|de leschten $1 Deeg}} eppes gemaach hunn",
- "statistics-mostpopular": "Am meeschte gekuckte Säiten",
"pageswithprop": "Säite mat enger Säiteneegeschaft",
"pageswithprop-legend": "Säite mat enger Säiteneegeschaft",
"pageswithprop-text": "Op dëser Säit sti Säiten déi eng speziell Säiteneegeschaft benotzen.",
@@ -1491,12 +1508,13 @@
"uncategorizedtemplates": "Schablounen ouni Kategorie",
"unusedcategories": "Net benotzt Kategorien",
"unusedimages": "Net benotzt Fichieren",
- "popularpages": "Populär Säiten",
"wantedcategories": "Gewënscht Kategorien",
"wantedpages": "Gewënscht Säiten",
+ "wantedpages-summary": "Lëscht vun de Säiten, déi et nach net gëtt, mat de meeschte Linken drop, ouni d'Säiten op déi nëmme Viruleedunge linken. Fir eng Lëscht vun de Säiten, déi et nach net gëtt, op déi Viruleedunge linken kuckt w.e.g. [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Net valabelen Titel am Resultat: $1",
"wantedfiles": "Gewënscht Fichieren",
"wantedfiletext-cat": "Dës Fichiere gi benotzt awer et gëtt se net. Fichiere aus frieme Repositorie kënnen hei gewise ginn och wann et se gëtt. All sou falsch Positiver ginn <del>duerchgestrach</del>. Zousätzlech gi Säiten an deene Fichieren dra sinn déi et net gëtt op [[:$1]] gewisen.",
+ "wantedfiletext-cat-noforeign": "Dëse Fichiere gi benotzt awer et gëtt se net. Zousätzlech ginn Säiten op deene Fichiere stinn déi et net gëtt op der Lëscht [[:$1]] gewisen.",
"wantedfiletext-nocat": "Dës Fichiere gi benotzt existéieren awer net. Fichieren aus frieme Repertoiren kënnen trotzdeem opgelëscht ginn. All dës positiv Fichiere ginn <del>duergestrach</del>.",
"wantedfiletext-nocat-noforeign": "Dës Fichiere gi benotzt awer et gëtt se net.",
"wantedtemplates": "Gewënscht Schablounen",
@@ -1552,9 +1570,11 @@
"pager-older-n": "{{PLURAL:$1|vireg|vireg $1}}",
"suppress": "Iwwersiicht",
"querypage-disabled": "Dës Spezialsäit ass aus Performance-Grënn ausgeschalt.",
+ "apihelp": "API-Hëllef",
+ "apihelp-no-such-module": "Modul \"$1\" net fonnt.",
"booksources": "Bicherreferenzen",
"booksources-search-legend": "No Bicherreferenze sichen",
- "booksources-go": "Sichen",
+ "booksources-search": "Sichen",
"booksources-text": "Hei ass eng Lëscht mat Linken op Internetsäiten, déi nei a gebraucht Bicher verkafen. Do kann et sinn datt Dir méi Informatiounen iwwer déi Bicher fannt déi Dir sicht.",
"booksources-invalid-isbn": "D'ISBN-Nummer déi Dir uginn hutt schéngt net gëlteg ze sinn. Kuckt w.e.g. no ob beim Kopéiere kee Feeler geschitt ass.",
"specialloguserlabel": "Aktive Benotzer:",
@@ -1686,7 +1706,7 @@
"wlheader-enotif": "E-Mail-Notifikatioun ass ageschalt.",
"wlheader-showupdated": "Säiten déi zanter Ärer leschter Visite geännert goufen, si '''fett''' geschriwwen",
"wlnote": "Hei {{PLURAL:$1|ass déi lescht Ännerung|sinn déi lescht <strong>$1</strong> Ännerunge}} vun {{PLURAL:$2|der leschter Stonn|de leschte(n) <strong>$2</strong> Stonnen}}, Stand: $3 ëm $4 Auer.",
- "wlshowlast": "D'Ännerunge vun de leschte(n) $1 Stonnen, $2 Deeg oder $3 (an de leschten 30 Deeg) weisen.",
+ "wlshowlast": "Déi lescht $1 Stonnen $2 Deeg weisen",
"watchlist-options": "Optioune vun der Iwwerwaachungslëscht",
"watching": "Iwwerwaachen …",
"unwatching": "Net méi iwwerwaachen …",
@@ -1706,7 +1726,7 @@
"enotif_lastvisited": "All Ännerungen op ee Bléck: $1",
"enotif_lastdiff": "Kuckt $1 fir dës Ännerung.",
"enotif_anon_editor": "Anonyme Benotzer $1",
- "enotif_body": "Léiwe $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nResumé vum Mataarbechter: $PAGESUMMARY $PAGEMINOREDIT\n\nDen Editeur kontaktéieren:\nE-Mail: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nEt gi soulaang keng weider Maile geschéckt, bis Dir d'Säit nees emol besicht hutt wärend deem Dir ageloggt sidd.\nOp Ärer Iwwerwaachungslëscht kënnt Dir all Noriichtemarkeren zesummen zrécksetzen.\n\n\nÄre frëndlechen {{SITENAME}} Noriichtessystem\n\n--\n\nFir d'Astellungen op Ären E-Mailnoriichten z'änneren, besicht w.e.g.\n{{canonicalurl:{{#special:Preferences}}}}\n\n\nFir d'Astellunge vun Ärer Iwwerwaachungslëscht z'änneren, besicht w.e.g.\n{{canonicalurl:Special:Watchlist/edit}}\n\nFeedback a weider Hëllef:\n$HELPPAGE",
+ "enotif_body": "Léiwe $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nResumé vum Mataarbechter: $PAGESUMMARY $PAGEMINOREDIT\n\nDen Editeur kontaktéieren:\nE-Mail: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nEt gi soulaang keng weider Maile geschéckt, bis Dir d'Säit nees emol besicht hutt wärend deem Dir ageloggt sidd.\nOp Ärer Iwwerwaachungslëscht kënnt Dir all Noriichtemarkeren zesummen zrécksetzen.\n\n\nÄre frëndleche(n) {{SITENAME}} Noriichtessystem\n\n--\n\nFir d'Astellungen op Ären E-Mailnoriichten z'änneren, besicht w.e.g.\n{{canonicalurl:{{#special:Preferences}}}}\n\n\nFir d'Astellunge vun Ärer Iwwerwaachungslëscht z'änneren, besicht w.e.g.\n{{canonicalurl:Special:Watchlist/edit}}\n\nFeedback a weider Hëllef:\n$HELPPAGE",
"created": "gemaach",
"changed": "geännert",
"deletepage": "Säit läschen",
@@ -1735,7 +1755,6 @@
"deleteprotected": "Dir däerft dëst Säit net läsche well se gespaart ass.",
"deleting-backlinks-warning": "'''Opgepasst:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Aner Säite]] linken op déi Säit déi Dir am Gaang sidd ze läschen oder déi Säit Déi Dir am Gaang sidd ze läschen ass an aner Säiten agebonn.",
"rollback": "Ännerungen zrécksetzen",
- "rollback_short": "Zrécksetzen",
"rollbacklink": "Zrécksetzen",
"rollbacklinkcount": "{{PLURAL:$1|Eng Ännerung|$1 Ännerungen}} zrécksetzen",
"rollbacklinkcount-morethan": "méi wéi {{PLURAL:$1|Eng Ännerung|$1 Ännerungen}} zrécksetzen",
@@ -2108,12 +2127,13 @@
"thumbnail-temp-create": "Den temporäre Fichier fir d'Minitaurbild konnt net ugeluecht ginn",
"thumbnail-dest-create": "D'Miniatur bild konnt net do gespäichert gi wou dat virgesinn ass",
"thumbnail_invalid_params": "Ongëlteg Miniatur-Parameter",
+ "thumbnail_toobigimagearea": "Fichier mat Dimensioune méi grouss wéi $1",
"thumbnail_dest_directory": "Den Zilepertoire konnt net ugeluecht ginn.",
"thumbnail_image-type": "Bildtyp gëtt net ënnerstëtzt",
"thumbnail_gd-library": "D'Konfiguratioun vun der GD-Bibliothéik (GD library) ass net komplett: D'Funktioun $1 feelt",
"thumbnail_image-missing": "De Fichier schengt ze feelen: $1",
"import": "Säiten importéieren",
- "importinterwiki": "Transwiki-Import",
+ "importinterwiki": "Vun enger anerer Wiki importéieren",
"import-interwiki-text": "Sicht eng Wiki an e Säitentitel eraus fir z'importéieren.\nD'Versiounsdatumen an d'Benotzernimm bleiwen dobäi erhalen.\nAll Transwiki-Import-Aktioune ginn am [[Special:Log/import|Import-Logbuch]] protokolléiert.",
"import-interwiki-sourcewiki": "Quellwiki:",
"import-interwiki-sourcepage": "Originalsäit:",
@@ -2157,18 +2177,15 @@
"import-rootpage-nosubpage": "Am Nummraum \"$1\" vun der Basis-Säit si keng Ënnersäiten erlaabt.",
"importlogpage": "Lëscht vun den Säitenimporten",
"importlogpagetext": "Administrativen Import vu Säite mam Historique vun den Ännerungen aus anere Wikien.",
- "import-logentry-upload": "huet [[$1]] vun engem Fichier duerch Eroplueden importéiert",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|Versioun|Versiounen}} importéiert",
- "import-logentry-interwiki": "huet $1 importéiert (Transwiki)",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Versioun|Versiounen}} importéiert vu(n) $2",
"javascripttest": "JavaScript-Test",
- "javascripttest-title": "$1-Tester ginn elo gemaach",
"javascripttest-pagetext-noframework": "Dës Säit ass fir Java-Script-Tester reservéiert.",
"javascripttest-pagetext-unknownframework": "Onbekannten Test-Framework \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Onbekannt Aktioun \"$1\".",
"javascripttest-pagetext-frameworks": "Sicht w.e.g. eng vun dësen Test-Strukturen eraus: $1",
"javascripttest-pagetext-skins": "Sicht en Interface (skin) eraus fir d'Tester ze maachen:",
"javascripttest-qunit-intro": "Kuckt d'[$1 Dokumentatioun vun den Tester] op mediawiki.org",
- "javascripttest-qunit-heading": "JavaScript-QUnit Testserie op MediaWiki",
"tooltip-pt-userpage": "Är Benotzersäit",
"tooltip-pt-anonuserpage": "Benotzersäit vun der IP-Adress vun där aus Dir den Ament Ännerunge maachtt",
"tooltip-pt-mytalk": "Är Diskussiounssäit",
@@ -2178,6 +2195,7 @@
"tooltip-pt-mycontris": "Lëscht vun Äre Kontributiounen",
"tooltip-pt-login": "Sech umelle gëtt gäre gesinn, Dir musst et awer net maachen.",
"tooltip-pt-logout": "Ofmellen",
+ "tooltip-pt-createaccount": "Et gëtt Iech geroden e Benotzerkont unzeleeën an Iech anzeloggen; dat ass awer net obligatoresch",
"tooltip-ca-talk": "Diskussioun iwwer de Säiteninhalt",
"tooltip-ca-edit": "Dës Säit ka geännert ginn. Maacht vun der Méiglechkeet Gebrauch fir ze \"kucken ouni ofzespäicheren\" a kuckt ob alles an der Rei ass ier der ofspäichert.",
"tooltip-ca-addsection": "En neien Abschnitt ufänken.",
@@ -2207,6 +2225,7 @@
"tooltip-feed-atom": "Atom-Feed fir dës Säit",
"tooltip-t-contributions": "Lëscht vun de Kontributioune vun dësem Benotzer",
"tooltip-t-emailuser": "Dësem Benotzer eng E-Mail schécken",
+ "tooltip-t-info": "Méi Informatiounen iwwer dës Säit",
"tooltip-t-upload": "Biller oder Mediefichieren eroplueden",
"tooltip-t-specialpages": "Lëscht vun alle Spezialsäiten",
"tooltip-t-print": "Versioun vun dëser Säit fir auszedrécken",
@@ -2272,7 +2291,6 @@
"pageinfo-robot-policy": "Indexéierung duerch Botten",
"pageinfo-robot-index": "Erlaabt",
"pageinfo-robot-noindex": "Net erlaabt",
- "pageinfo-views": "Zuel vun de Kéieren déi dës Säit gekuckt gouf",
"pageinfo-watchers": "Zuel vun de Benotzer déi d'Säit iwwerwaachen",
"pageinfo-few-watchers": "Manner wéi $1 {{PLURAL:$1|Benotzer deen iwwerwaacht|Benotzer déi iwwerwaachen}}",
"pageinfo-redirects-name": "Zuel vun de Viruleedungen op dës Säit",
@@ -2714,7 +2732,6 @@
"exif-urgency-low": "Niddreg ($1)",
"exif-urgency-high": "Héich ($1)",
"exif-urgency-other": "Benotzerdefinéiert Prioritéit ($1)",
- "watchlistall2": "all",
"namespacesall": "all",
"monthsall": "all",
"confirmemail": "E-Mailadress confirméieren",
@@ -2801,8 +2818,8 @@
"watchlisttools-edit": "Iwwerwaachungslëscht weisen an änneren",
"watchlisttools-raw": "Net-formatéiert Iwwerwaachungslëscht änneren",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussioun]])",
- "unknown_extension_tag": "Onbekannten Erweiderungs-Tag \"$1\"",
"duplicate-defaultsort": "'''Opgepasst:''' Den Zortéierschlëssel \"$2\" iwwerschreift de virege Standard-Zortéierschlëssel \"$1\".",
+ "duplicate-displaytitle": "<strong>Opgepasst:</strong> Den Titel dee gewise gëtt \"$2\" iwwerschreift deen Titel dee virdru gewise gouf \"$1\".",
"version": "Versioun",
"version-extensions": "Installéiert Erweiderungen",
"version-skins": "Installéiert Skins/Layout",
@@ -2817,7 +2834,7 @@
"version-parser-function-hooks": "Parser-Funktiounen",
"version-hook-name": "Numm vun der Klamer",
"version-hook-subscribedby": "Opruff vum",
- "version-version": "(Versioun $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[keen Numm]",
"version-license": "MediaWiki-Lizenz",
"version-ext-license": "Lizenz",
@@ -2840,6 +2857,9 @@
"version-entrypoints": "URLe vun Agangspunkten",
"version-entrypoints-header-entrypoint": "Agangspunkt",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Installéiert Bibliothéiken",
+ "version-libraries-library": "Bibliothéik",
+ "version-libraries-version": "Versioun",
"redirect": "Viruleedung duerch e Fichier, e Benotzer, eng Säit oder eng Versiouns-ID",
"redirect-legend": "Viruleedung op ee Fichier oder eng Säit",
"redirect-summary": "Dës Spezialsäit ass eng Viruleedung op e Fichier (Fichiersnumm uginn), eng Säit (Versiounsnummer uginn) oder eng Benotzersäit (numeresch Benotzeridentifikatioun uginn).\nGebrauch: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], oder [[{{#Special:Redirect}}/user/101]].",
@@ -2875,6 +2895,7 @@
"specialpages-group-wiki": "Daten an Handwierksgeschir",
"specialpages-group-redirects": "Spezialsäiten déi viruleeden",
"specialpages-group-spam": "Handwierksgeschir géint de Spam",
+ "specialpages-group-developer": "Handwierksgeschir fir Entwéckler (Programméierer)",
"blankpage": "Eidel Säit",
"intentionallyblankpage": "Dës Säit ass absichtlech eidel. Si gëtt fir Benchmarking an Ähnleches benotzt.",
"external_image_whitelist": "#Dës Zeil genee sou loosse wéi se ass<pre>\n#Schreift hei ënnendrënner Fragmenter vu regulären Ausdréck (just den Deel zwëscht den // aginn)\n#Dës gi mat den URLe vu Biller aus externe Quelle verglach\n#Wann d'Resultat positiv ass, gëtt d'Bild gewisen, soss gëtt d'Bild just als Link gewisen\n#Zeilen, déi mat engem # ufänken, ginn als Bemierkung behandelt\n#Et gëtt en Ënnerscheed tëscht groussen a klenge Buschtawe gemaach\n\n#All regulär Ausdréck ënner dëser Zeil androen. Dës Zeil genee sou loosse wéi se ass</pre>",
@@ -2887,12 +2908,38 @@
"tags-tag": "Numm vun der Markéierung",
"tags-display-header": "Opzielungen op den Ännerungslëschten",
"tags-description-header": "Ganz Beschreiwung vun der Bedeitung",
+ "tags-source-header": "Quell",
"tags-active-header": "Aktiv?",
"tags-hitcount-header": "Markéiert Ännerungen",
+ "tags-actions-header": "Aktiounen",
"tags-active-yes": "Jo",
"tags-active-no": "Neen",
+ "tags-source-extension": "Duerch eng Erweiderung definéiert",
+ "tags-source-manual": "Manuell vu Benotzer a vu Botten agesat",
+ "tags-source-none": "Gëtt net méi gebraucht",
"tags-edit": "änneren",
+ "tags-delete": "läschen",
+ "tags-activate": "aktivéieren",
+ "tags-deactivate": "desaktivéieren",
"tags-hitcount": "$1 {{PLURAL:$1|Ännerung|Ännerungen}}",
+ "tags-create-tag-name": "Numm vun der Markéierung (Tag):",
+ "tags-create-reason": "Grond:",
+ "tags-create-submit": "Uleeën",
+ "tags-create-already-exists": "D'Markéierung (tag) ''$1'' gëtt et schonn.",
+ "tags-delete-title": "Markéierung (tag) läSchen",
+ "tags-delete-reason": "Grond:",
+ "tags-delete-not-found": "D'Markéierung (tag) ''$1'' gëtt et net.",
+ "tags-activate-title": "Markéierung (tag) aktivéieren",
+ "tags-activate-question": "Dir sidd am Gaang d'Markéierung \"$1\" z'aktivéieren.",
+ "tags-activate-reason": "Grond:",
+ "tags-activate-not-allowed": "Et ass net méiglech d'Markéierung \"$1\" z'aktivéieren.",
+ "tags-activate-not-found": "D'Markéierung (tag) ''$1'' gëtt et net.",
+ "tags-activate-submit": "Aktivéieren",
+ "tags-deactivate-title": "Markéierung (tag) desaktivéieren",
+ "tags-deactivate-question": "Dir sidd am Gaang d'Markéierung \"$1\" ze desaktivéieren.",
+ "tags-deactivate-reason": "Grond:",
+ "tags-deactivate-not-allowed": "Et ass net méiglech d'Markéierung \"$1\" ze desaktivéieren.",
+ "tags-deactivate-submit": "Desaktivéieren",
"comparepages": "Säite vergläichen",
"compare-page1": "Säit 1",
"compare-page2": "Säit 2",
@@ -2904,8 +2951,8 @@
"compare-revision-not-exists": "D'Versioun déi Dir uginn hutt gëtt et net.",
"dberr-problems": "Pardon! Dëse Site huet technesch Schwieregkeeten.",
"dberr-again": "Versicht e puer Minutten ze waarden an dann nei ze lueden.",
- "dberr-info": "(Den Datebank-Server kann net erreecht ginn: $1)",
- "dberr-info-hidden": "(Den Datebank-Server kann net erreecht ginn)",
+ "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.",
@@ -2946,6 +2993,8 @@
"revdelete-uname-unhid": "Benotzernumm net verstoppt",
"revdelete-restricted": "Limitatioune fir Administrateuren ageschalt",
"revdelete-unrestricted": "Limitatioune fir Administrateuren opgehuewen",
+ "logentry-block-unblock": "$1 {{GENDER:$2|huet}} d'Spär vum {{GENDER:$4|$3}} opgehuewen",
+ "logentry-import-interwiki": "$1 huet $3 vun enger anerer Wiki {{GENDER:$2|importéiert}}",
"logentry-move-move": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}}",
"logentry-move-move-noredirect": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} ouni eng Viruleedung unzeleeën",
"logentry-move-move_redir": "$1 huet d'Säit $3 op $4 {{GENDER:$2|geréckelt}} an derbäi gouf eng Viruleedung iwwerschriwwen",
@@ -2964,19 +3013,25 @@
"logentry-upload-overwrite": "$1 huet eng nei Versioun vu(n) $3 {{GENDER:$2|eropgelueden}}",
"logentry-upload-revert": "$1 huet $3 {{GENDER:$2|eropgelueden}}",
"rightsnone": "(keen)",
+ "revdelete-summary": "Resumé änneren",
+ "feedback-adding": "Feedback gëtt bei d'Säit derbäigesat...",
+ "feedback-back": "Zréck",
+ "feedback-bugcheck": "Super! Kuckt just no ob et net ee vun de scho [$1 bekannte Feeler] ass.",
+ "feedback-bugnew": "Ech hunn et nogekuckt. Den neie Bug mellen",
"feedback-bugornote": "Wann Dir bereet sidd fir en technesche Problem am Detail ze beschreiwen da [$1 mellt w.e.g. e Feeler (Bug)].\nSoss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gëtt op d'Säit \"[$3 $2]\" derbäigesat, zesumme mat Ärem Benotzernumm an dem Numm vum Browser deen Dir benotzt.",
- "feedback-subject": "Sujet:",
- "feedback-message": "Message:",
"feedback-cancel": "Ofbriechen",
- "feedback-submit": "Feedback schécken",
- "feedback-adding": "Feedback gëtt bei d'Säit derbäigesat...",
+ "feedback-close": "Fäerdeg",
+ "feedback-external-bug-report-button": "Eng technesch Aufgab notifizéieren",
+ "feedback-dialog-title": "Feedback schécken",
+ "feedback-error-title": "Feeler",
"feedback-error1": "Feeler: Resultat vum API gouf net erkannt",
"feedback-error2": "Feeler: D'Ännerung gouf net gespäichert",
"feedback-error3": "Feeler: Keng Äntwert vum API",
+ "feedback-message": "Message:",
+ "feedback-subject": "Sujet:",
+ "feedback-submit": "Schécken",
"feedback-thanks": "Merci! Äre Feedback gouf op der Säit \"[$2 $1]\" gespäichert.",
- "feedback-close": "Fäerdeg",
- "feedback-bugcheck": "Super! Kuckt just no ob et net ee vun de scho [$1 bekannte Feeler] ass.",
- "feedback-bugnew": "Ech hunn et nogekuckt. Den neie Bug mellen",
+ "feedback-thanks-title": "Merci!",
"searchsuggest-search": "Sichen",
"searchsuggest-containing": "mat ...",
"api-error-badaccess-groups": "Et ass Iech net erlaabt fir Fichieren op dës Wiki eropzelueden.",
@@ -3011,6 +3066,10 @@
"api-error-overwrite": "D'Iwwerschreiwe vun engem Fichier ass net erlaabt.",
"api-error-stashfailed": "Interne Feeler: de Server konnt den temporäre Fichier net späicheren.",
"api-error-publishfailed": "Interne Feeler: de Server konnt den temporäre Fichier net publizéieren.",
+ "api-error-stasherror": "Beim Eropluede vum Fichier ass e Feeler geschitt.",
+ "api-error-stashfilestorage": "Beim Späichere vum Fichier ass ee Feeler geschitt.",
+ "api-error-stashzerolength": "De Server konnt de Fichier net späicheren, well en eng Längt vun Null hat.",
+ "api-error-stashnotloggedin": "Dir musst ageloggt si fir Fichiere späicheren ze kënnen.",
"api-error-timeout": "De Server huet net bannen där Zäit geäntwert déi virgesinn ass.",
"api-error-unclassified": "En onbekannte Feeler ass geschitt",
"api-error-unknown-code": "Onbekannte Feeler: \"$1\"",
@@ -3057,6 +3116,46 @@
"action-pagelang": "d'Sprooch vun der Säit änneren",
"log-name-pagelang": "Log vum Ännere vun der Sprooch",
"log-description-pagelang": "Dëst ass a Log mat den Ännerunge vun de Sprooche vun de Säiten.",
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|huet}} d'Sprooch vun der Säit $3 vu(n) $4 op $5 geännert.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktivéiert)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desaktivéiert''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desaktivéiert''')",
+ "mediastatistics": "Statistike vun de Medien",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 Byte|$1 Byten}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-Typ",
+ "mediastatistics-table-extensions": "Méiglech Erweiderungen",
+ "mediastatistics-table-count": "Zuel vun de Fichieren",
+ "mediastatistics-table-totalbytes": "Gesamtgréisst",
+ "mediastatistics-header-unknown": "Onbekannt",
+ "mediastatistics-header-bitmap": "Bitmap-Biller",
+ "mediastatistics-header-drawing": "Zeechnungen (Vektorbiller)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Videoen",
+ "mediastatistics-header-multimedia": "Rich Media",
+ "mediastatistics-header-office": "Office",
+ "mediastatistics-header-text": "Textuell",
+ "mediastatistics-header-archive": "Kompriméiert Formater",
+ "json-error-unknown": "Et gouf e Problem mam JSON. Feeler: $1",
+ "json-error-state-mismatch": "JSON den net valabel ass oder Feeler huet",
+ "json-error-syntax": "Syntaxfeeler",
+ "headline-anchor-title": "Link op dësen Abschnitt",
+ "special-characters-group-latin": "Laténgesch",
+ "special-characters-group-latinextended": "Laténgesch, erweidert",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symboler",
+ "special-characters-group-greek": "Griichesch",
+ "special-characters-group-cyrillic": "Kyrillisch",
+ "special-characters-group-arabic": "Arabesch",
+ "special-characters-group-arabicextended": "Arabesch, erweidert",
+ "special-characters-group-persian": "Persesch",
+ "special-characters-group-hebrew": "Hebräisch",
+ "special-characters-group-bangla": "Bangalesch",
+ "special-characters-group-tamil": "Tamilesch",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-minus": "Minus-Zeechen"
}
diff --git a/languages/i18n/lbe.json b/languages/i18n/lbe.json
index b05d1646..63fa3b20 100644
--- a/languages/i18n/lbe.json
+++ b/languages/i18n/lbe.json
@@ -1,48 +1,48 @@
{
- "@metadata": {
- "authors": [
- "Amire80"
- ]
- },
- "article": "Тарих",
- "mytalk": "На цӀухху-бусу байсса интернетрал лажин",
- "qbedit": "Дакьин дуван",
- "history": "Тарих",
- "history_short": "Тарих",
- "edit": "Дакьин дуван",
- "talkpagelinktext": "Ихтилат",
- "talk": "Ихтилат",
- "currentevents": "Нанисса ишру",
- "currentevents-url": "Project:Нанисса ишру",
- "mainpage": "Агьаммур лажин",
- "mainpage-description": "Агьаммур лажин",
- "editsection": "дакьин дуван",
- "editold": "дакьин дуван",
- "nstab-main": "Тарих",
- "nstab-user": "Гьуртту хьума",
- "nstab-special": "Къуллугъирал лажин",
- "nstab-image": "Сурат",
- "nstab-template": "Шаблон",
- "nstab-category": "Категория",
- "userlogin": "Системалухь цу уссарав бусан",
- "logout": "Уккаву",
- "userlogout": "Уккаву",
- "minoredit": "Мюрщсса дахханашиву",
- "watchthis": "Ва лажин ябитаврил сияхӀравун ххи дан",
- "savearticle": "Лажин ядан",
- "preview": "Цалсса ххалбаву",
- "showpreview": "Цалсса ххалбаву",
- "recentchanges": "Махъсса дахханашивурту",
- "file-anchor-link": "Сурат",
- "filehist-user": "Гьурттучув",
- "move": "ЦӀа даххана дан",
- "specialloguserlabel": "Гьурттучув:",
- "emailuser": "ГьурттучувначӀансса чагьар",
- "watchlist": "Ябитаврил сияхӀ",
- "watch": "Хъирив агьан",
- "unwatch": "Хъирив къаагьан",
- "contributions": "Гьурттучунал бутӀа",
- "mycontris": "Ттул даву",
- "sp-contributions-talk": "Ихтилат",
- "move-watch": "Ва лажин ябитаврил сияхӀравун ххи дан"
+ "@metadata": {
+ "authors": [
+ "Amire80"
+ ]
+ },
+ "article": "Тарих",
+ "mytalk": "На цӀухху-бусу байсса интернетрал лажин",
+ "qbedit": "Дакьин дуван",
+ "history": "Тарих",
+ "history_short": "Тарих",
+ "edit": "Дакьин дуван",
+ "talkpagelinktext": "Ихтилат",
+ "talk": "Ихтилат",
+ "currentevents": "Нанисса ишру",
+ "currentevents-url": "Project:Нанисса ишру",
+ "mainpage": "Агьаммур лажин",
+ "mainpage-description": "Агьаммур лажин",
+ "editsection": "дакьин дуван",
+ "editold": "дакьин дуван",
+ "nstab-main": "Тарих",
+ "nstab-user": "Гьуртту хьума",
+ "nstab-special": "Къуллугъирал лажин",
+ "nstab-image": "Сурат",
+ "nstab-template": "Шаблон",
+ "nstab-category": "Категория",
+ "userlogin": "Системалухь цу уссарав бусан",
+ "logout": "Уккаву",
+ "userlogout": "Уккаву",
+ "minoredit": "Мюрщсса дахханашиву",
+ "watchthis": "Ва лажин ябитаврил сияхӀравун ххи дан",
+ "savearticle": "Лажин ядан",
+ "preview": "Цалсса ххалбаву",
+ "showpreview": "Цалсса ххалбаву",
+ "recentchanges": "Махъсса дахханашивурту",
+ "file-anchor-link": "Сурат",
+ "filehist-user": "Гьурттучув",
+ "move": "ЦӀа даххана дан",
+ "specialloguserlabel": "Гьурттучув:",
+ "emailuser": "ГьурттучувначӀансса чагьар",
+ "watchlist": "Ябитаврил сияхӀ",
+ "watch": "Хъирив агьан",
+ "unwatch": "Хъирив къаагьан",
+ "contributions": "Гьурттучунал бутӀа",
+ "mycontris": "Ттул даву",
+ "sp-contributions-talk": "Ихтилат",
+ "move-watch": "Ва лажин ябитаврил сияхӀравун ххи дан"
}
diff --git a/languages/i18n/lez.json b/languages/i18n/lez.json
index 69b197ca..83aeb8af 100644
--- a/languages/i18n/lez.json
+++ b/languages/i18n/lez.json
@@ -304,7 +304,6 @@
"changeemail": "Э-почта дегишарун",
"changeemail-none": "(садни)",
"changeemail-submit": "E-адрес дегишун",
- "changeemail-cancel": "Гьич авун",
"bold_sample": "ЯцIу текст",
"bold_tip": "Къалин текст",
"italic_sample": "Курсивдин текст",
@@ -350,7 +349,7 @@
"editconflict": "Дуьзар хъувунрин акьунар: $1",
"yourtext": "Зи текст",
"yourdiff": "Тафаватар",
- "copyrightwarning": "Тавакъу ийида, фагьум ая хьи, {{SITENAME}}-диз кутунвай вири крариз $2 лицензиядин шартунал акъуднавайбур хьиз килигда. (гегьеншдиз $1-з килига). \nКвез куьне кхьенвайбур азаддаказ чкIун ва гьар са кас патахъай дуьзар хъувун кIанзавачтIа, а кхьенвайбур иниз эцигмир.<br />\nГЬакIни, куьне тестикьзава хьи, кутазвай алавайрин автор кьун я, я тахьайтIа, куьне а алаваяр чпин къенеавайбур азад чкIунни дегишун ихтияр гузвай чешмедикай ччин къачунва.<br />\n'''АВТОРДИН ИХТИЯР ХУЬЗВАЙ МАЛУМАТАР ИХТИЯР ГАЛАЧИЗ ЭЦИГМИР!'''",
+ "copyrightwarning": "Тавакъу ийида, фагьум ая хьи, {{SITENAME}}-диз кутунвай вири крариз $2 лицензиядин шартунал акъуднавайбур хьиз килигда. (гегьеншдиз $1-з килига).\nКвез куьне кхьенвайбур азаддаказ чкӀун ва гьар са кас патахъай дуьзар хъувун кӀанзавачтӀа, а кхьенвайбур иниз эцигмир.<br />\nГьакӀни, куьне тестикьзава хьи, кутазвай алавайрин автор кьун я, я тахьайтӀа, куьне а алаваяр чпин къенеавайбур азад чкӀунни дегишун ихтияр гузвай чешмедикай ччин къачунва.<br />\n'''АВТОРДИН ИХТИЯР ХУЬЗВАЙ МАЛУМАТАР ИХТИЯР ГАЛАЧИЗ ЭЦИГМИР!'''",
"templatesused": "И ччина кардик кутунвай {{PLURAL:$1|1=Чешне|Чешнеяр}}:",
"templatesusedpreview": "{{PLURAL:$1|1=Шаблон|Шаблонар}},илемишзавай дуьз клигунра:",
"template-protected": "(хвенвай)",
@@ -449,7 +448,6 @@
"search-relatedarticle": "Галкlанавай",
"searchrelated": "Галкlанавай",
"searchall": "вири",
- "showingresultsheader": "'''$4''' патал {{PLURAL:$5|1='''$3''' - кай '''$1''' нетижа|'''$3''' - кай '''$1 - $2''' нетижаяр}}",
"search-nonefound": "Тlалабдив кьадай са нетижани жагъанвач.",
"powersearch-legend": "Гегьенш жугъурун",
"powersearch-ns": "Жугъурун тlварарин генгвилера:",
@@ -615,6 +613,7 @@
"upload-options": "Ппарунин шартIар",
"watchthisupload": "И файл гуьзетун",
"upload-file-error": "Къенепатан гъалатӀ",
+ "backend-fail-delete": "$1 файл алудиз хьанвач.",
"uploadstash-refresh": "Файлрин сиягь цIийи хъувун",
"img-auth-accessdenied": "Гьахьун къадагъа авунва",
"license": "Лицензиярун",
@@ -667,14 +666,12 @@
"statistics": "Статистика",
"statistics-header-pages": "Ччинрин статистика",
"statistics-header-edits": "Дуьзар хъувунрин статистика",
- "statistics-header-views": "Статистикадиз килигун",
"statistics-header-users": "Иштиракчидин статистика",
"statistics-articles": "Макъалаяр",
"statistics-pages": "Ччинар",
"statistics-files": "Ппарнавай файлар",
- "statistics-views-total": "Вири килигунар",
"statistics-users-active": "Актив уртахар",
- "brokenredirects-edit": "дегишарун",
+ "brokenredirects-edit": "дуьзар хъувун",
"brokenredirects-delete": "алудун",
"withoutinterwiki-submit": "Къалурун",
"nbytes": "$1 {{PLURAL:$1|1=байт|байтар}}",
@@ -696,7 +693,6 @@
"suppress": "Чуьнуьхун",
"booksources": "Ктабрин чешмеяр",
"booksources-search-legend": "Ктабдикай малумат жугъурун",
- "booksources-go": "Фин",
"log": "Журналар",
"allpages": "Вири ччинар",
"prevpage": "Алатай чар ($1)",
@@ -731,7 +727,7 @@
"watchthispage": "Гелкъуьн и хъувун",
"unwatch": "Вилив хуьмир",
"watchlist-details": "Куь вилив хуьнин сиягьда {{PLURAL:$1|1=$1 ччин|$1 ччин}} авайди я, веревирдрин ччинар квачиз.",
- "wlshowlast": "Эхиримжи $1 сят $2 югъ $3 къалура",
+ "wlshowlast": "Эхиримжи $1 сят $2 югъ къалура",
"watchlist-options": "Вилив хуьнин сиягьдин низамарунар",
"watching": "Килигун...",
"unwatching": "Амма клигнай",
@@ -739,7 +735,7 @@
"changed": "дегишнава",
"deletepage": "Къакъудун хъувун",
"confirm": "Тестикьун",
- "delete-confirm": "Къакъудун \"$1\"",
+ "delete-confirm": "«$1» алудун",
"delete-legend": "Къакъудун",
"confirmdeletetext": "Квез чlуриз кlанзани чарар гьадан вири тарихар галаз. Буюр, сидикъара,куьне чlурзатlа, куьн агъавурда автlа вуч ийизатlа ва куьне ийизатlа жуьреда [[{{MediaWiki:Policy-url}}| политика]].",
"actioncomplete": "Кар авунва",
@@ -748,8 +744,7 @@
"dellogpage": "Алудунин журнал",
"deletecomment": "Кар",
"deleteotherreason": "Масса/ ва мад кар",
- "deletereasonotherlist": "Маса фагьум",
- "rollback_short": "КЬулухъди чIугун",
+ "deletereasonotherlist": "Маса себеб",
"rollbacklink": "Кьулухъди чIугун",
"sessionfailure-title": "Гьахьунин гъалатI",
"protectlogpage": "Хуьнин журнал",
@@ -919,7 +914,6 @@
"tooltip-undo": "«Гьич авун» авунвай дуьзар хъувун paxкурзава ва сифтедин килигунин режимда дуьзар хъувундин форма ахъа йийзва. Им нетижадиз себеб алава йийз мумкинвал гузва",
"tooltip-summary": "Куьруь нетижа гьадрун",
"pageinfo-header-edits": "Дуьзар хъувун",
- "pageinfo-views": "Килигунрин кьадар",
"pageinfo-edits": "Дьузар хъувунрин кьадар",
"previousdiff": "Вилик алатай дуьзар хъувун",
"nextdiff": "ЦIийи масакIаяр",
@@ -945,7 +939,6 @@
"exif-disclaimer": "Жавабдарвал хивяй акъудун",
"exif-contrast-1": "Жими",
"exif-sharpness-1": "Жими",
- "watchlistall2": "вири",
"namespacesall": "вири",
"monthsall": "вири",
"confirm_purge_button": "ЭХь",
@@ -990,10 +983,10 @@
"logentry-move-move_redir-noredirect": "$1 $3 макъаладин тӀвар, ракъурун тун тавуна ва ракъурунин винелай $4 -диз масакӀа хъувуна",
"logentry-newusers-autocreate": "Уртахдин $1 учётдин кхьин автоматиквилели туькӀуьр хьанва",
"rightsnone": "(садни)",
- "feedback-subject": "Тема:",
- "feedback-message": "Чар:",
"feedback-cancel": "Гьич авун",
"feedback-close": "Авунва",
+ "feedback-message": "Чар:",
+ "feedback-subject": "Тема:",
"expand_templates_xml_output": "XML акъудун",
"expand_templates_ok": "ОК",
"expand_templates_remove_comments": "Баянар алудун"
diff --git a/languages/i18n/lfn.json b/languages/i18n/lfn.json
index b7592f5b..17b837bc 100644
--- a/languages/i18n/lfn.json
+++ b/languages/i18n/lfn.json
@@ -443,7 +443,6 @@
"uncategorizedtemplates": "Modeles sin categoria",
"unusedcategories": "Categorias nonusada",
"unusedimages": "Images nonusada",
- "popularpages": "Pajes poplal",
"wantedcategories": "Categorias desireda",
"wantedpages": "Pajes desirada",
"mostlinked": "Pajes la plu liada",
@@ -467,7 +466,6 @@
"pager-newer-n": "{{PLURAL:$1|1 plu resente|$1 plu resentes}}",
"pager-older-n": "{{PLURAL:$1|1 plu vea|$1 plu veas}}",
"booksources": "Orijines de libros",
- "booksources-go": "Vade",
"specialloguserlabel": "Usor:",
"speciallogtitlelabel": "Titulo:",
"log": "Lista de atas",
@@ -496,7 +494,7 @@
"watchthispage": "Oserva esta paje",
"unwatch": "Nonoserva",
"watchlist-details": "{{PLURAL:$1|$1 paje|$1 pajes}} osservada, sin pajes de discutes.",
- "wlshowlast": "Mostra la $1 oras e $2 dias presedente $3",
+ "wlshowlast": "Mostra la $1 oras e $2 dias presedente",
"watching": "Oserva...",
"unwatching": "No oserva...",
"created": "Creada",
@@ -662,7 +660,6 @@
"metadata-collapse": "Asconde detalias estendeda",
"metadata-fields": "Campos de EXIF metadata listada en esta mesaje va es inclui cuando la table de metadata es minimida.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-exposuretime-format": "$1 sec. ($2)",
- "watchlistall2": "tota",
"namespacesall": "tota",
"monthsall": "tota",
"confirm_purge_button": "Oce",
@@ -670,7 +667,7 @@
"watchlisttools-edit": "Vide e edita la lista de pajes oservada",
"watchlisttools-raw": "Edita la lista rua de pajes oservada",
"version": "Varia",
- "version-version": "(Varia $1)",
+ "version-version": "($1)",
"fileduplicatesearch-submit": "Xerca",
"specialpages": "Pajes spesial",
"expand_templates_ok": "Oce"
diff --git a/languages/i18n/lg.json b/languages/i18n/lg.json
index ee0185a4..192cba75 100644
--- a/languages/i18n/lg.json
+++ b/languages/i18n/lg.json
@@ -654,7 +654,6 @@
"pager-older-n": "{{PLURAL:$1|ekyasooka bino 1|ebyasooka bino $1}}",
"booksources": "Ebitabo ebijulizidwa",
"booksources-search-legend": "Noonya ebitabo eby'okujuliza",
- "booksources-go": "Nona",
"specialloguserlabel": "Memba:",
"log": "Empapula ez'ebyafaayo eby'emirimu egitaligimu",
"allpages": "Empapula zonna",
@@ -680,7 +679,7 @@
"watchthispage": "Goberera olupapula luno",
"unwatch": "Lekerawo okugoberera olupapula luno",
"watchlist-details": "Olina {{PLURAL:$1|olupapula $1|empapula $1}} z'ogoberera, nga tobalideko n'eza yogera-nange.",
- "wlshowlast": "Ndaga ez'omu ssaawa $1 n'ennaku $2 eziyise oba $3",
+ "wlshowlast": "Ndaga ez'omu ssaawa $1 n'ennaku $2 eziyise oba",
"watchlist-options": "Enteetakeeka y'endaga ya mpapula zengoberera",
"watching": "Kikolebwako...",
"unwatching": "Kikolebwako...",
@@ -869,7 +868,6 @@
"metadata-expand": "Laba ebisingawo",
"metadata-collapse": "Kisako ebimu, wasigalewo ebisinga obukulu",
"metadata-fields": "Ebiddako bye ebikwata ku fayiro eno ebyagiwandikibwamu ekyagitegekera kompyuta ebijakusigala nga biragibwa.<br />\nEbirala biyinza butalabika okujjako ng'okiragidde.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "Zonna",
"namespacesall": "Gonna",
"monthsall": "gyonna",
"confirm_purge_button": "Kale",
diff --git a/languages/i18n/li.json b/languages/i18n/li.json
index bf80d698..b0795462 100644
--- a/languages/i18n/li.json
+++ b/languages/i18n/li.json
@@ -14,7 +14,9 @@
"Remember the dot",
"Tibor",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Robin0van0der0vliet",
+ "Macofe"
]
},
"tog-underline": "Links óngersjtriepe",
@@ -135,7 +137,7 @@
"cancel": "Aafbraeke",
"moredotdotdot": "Miè...",
"mypage": "Mien gebroekerspagina",
- "mytalk": "Mien euverlèkpagina",
+ "mytalk": "Euverlèk",
"anontalk": "Euverlèk veur dit IP adres",
"navigation": "Navigatie",
"and": "&#32;en",
@@ -323,7 +325,9 @@
"virus-unknownscanner": "onbekeng antivirus:",
"logouttext": "'''De bis noe aafgemeld.'''\n\nDe kèns {{SITENAME}} noe anoniem (mit vermeljing van IP-adres) gebroeke, of <span class='plainlinks'>[$1 opnuuj aanmelde]</span> ónger dezelfde of 'ne angere naam.\nMäögelik waert nog 'n deil pagina's getuind esofs te nog aangemeld bis pès te de cache van diene browser laeg maaks.",
"yourname": "Diene gebroekersnaam",
+ "userlogin-yourname": "Gebroekersnaam",
"yourpassword": "Die wachwaord",
+ "userlogin-yourpassword": "Wachwaord",
"yourpasswordagain": "Wachwaord opnuuj intype",
"remembermypassword": "Mien wachwaord onthouwe veur later sessies (hoegstens $1 {{PLURAL:$1|daag|daag}})",
"yourdomainname": "Die domein",
@@ -388,6 +392,9 @@
"login-abort-generic": "Doe bös neet aangemèldj - Aafgebraoke",
"loginlanguagelabel": "Taol: $1",
"suspicious-userlogout": "Dien verzeuk óm aaf te melde is genegeerd, ómdet 't liek esof 't verzeuk is versjik door 'ne browser of cacheproxy dae kepot is.",
+ "pt-login": "Aanmèlde",
+ "pt-login-button": "Aanmèlde",
+ "pt-userlogout": "Aafmelde",
"php-mail-error-unknown": "Dao haet ziech 'n ónbekénde fout veurgedaon in de mail()-functie van PHP",
"user-mail-no-addy": "Perbeerdjes 'ne mail te sjikke zónger 'n adres",
"changepassword": "Wachwaord verangere",
@@ -420,14 +427,12 @@
"passwordreset-emailsent-capture": "d'r Is 'ne herinneringse-mail versjik. Deze weurt hieónger getuind.",
"passwordreset-emailerror-capture": "d'r Is 'ne herinneringse-mail aangemaak. Deze weurt hieónger getuind. 't Verzènje nao de gebroeker is mislök óm de volgende raeje: $1",
"changeemail": "Veranger dien e-mailadres",
- "changeemail-header": "Veranger 't e-mailadres van miene gebroekersnaam",
"changeemail-text": "Völ dit form in óm dien e-mailadres te verangere. Doe mós dien wachwaord inveuren óm dees veranger te bevestige.",
"changeemail-no-info": "Doe moos aangemeld zien ierdets doe dees pagina gebroeke kens.",
"changeemail-oldemail": "Hujig mailadres:",
"changeemail-newemail": "Nuuj mailadres:",
"changeemail-none": "(gein)",
"changeemail-submit": "Veranger e-mail",
- "changeemail-cancel": "Braek aaf",
"bold_sample": "Vètten teks",
"bold_tip": "Vetten teks",
"italic_sample": "Sjuunsen tèks",
@@ -667,7 +672,6 @@
"mergehistory-same-destination": "De brónpagina en bestömmingspagina kinne neet dezelfde zien",
"mergehistory-reason": "Reeje:",
"mergelog": "Samevoegingslogbook",
- "pagemerge-logentry": "voegde [[$1]] nao [[$2]] same (versies tot en met $3)",
"revertmerge": "Samevoging ongedaon make",
"mergelogpagetext": "Hiejonger zuut geer 'ne lies van recente samevoeginge van 'ne paginagesjiedenis nao 'ne angere.",
"history-title": "$1: bewèrkingseuverzich",
@@ -712,7 +716,6 @@
"searchrelated": "gerelateerd",
"searchall": "alle",
"showingresults": "Hieonger staon de <b>$1</b> {{PLURAL:$1|resultaat|resultaat}}, vanaaf #<b>$2</b>.",
- "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultate '''$1 - $2''' van '''$3'''}} veur '''$4'''",
"search-nonefound": "D'r zien gein resultate veur diene zeukopdrach.",
"powersearch-legend": "Oetgebreid zeuke",
"powersearch-ns": "Zeuke in naamruumdes:",
@@ -722,7 +725,7 @@
"search-external": "Extern zeuke",
"searchdisabled": "Zeuke op {{SITENAME}} is oetgesjakeld vanweige gebrek aan servercapaciteit.\nZoelang as de servers nog neet sjterk genog zunt kins e zeuke bie Google.\nMèrk op dat hun indexe van {{SITENAME}} content e bietje gedatierd kint zien.",
"preferences": "Veurkäöre",
- "mypreferences": "Mien veurkäöre",
+ "mypreferences": "Veurkäöre",
"prefs-edits": "Aantal bewèrkinge:",
"prefs-skin": "{{SITENAME}}-uterlik",
"skin-preview": "Veurbesjouwing",
@@ -956,6 +959,7 @@
"action-siteadmin": "de database aaf te sloete of aope te stelle",
"action-sendemail": "Sjik e-mails",
"nchanges": "$1 {{PLURAL:$1|bewerking|bewerkinge}}",
+ "enhancedrc-history": "historie",
"recentchanges": "Lètste verangeringe",
"recentchanges-legend": "Opties veur recènte verangeringe",
"recentchanges-summary": "Volg de recènste bewirkinge op deze wiki op dees pagina.",
@@ -1247,7 +1251,6 @@
"statistics": "Sjtattestieke",
"statistics-header-pages": "Paginastatistieke",
"statistics-header-edits": "Bewerkingsstatistieke",
- "statistics-header-views": "Paginaweergavestatistieke",
"statistics-header-users": "Stattestieke euver gebroekers",
"statistics-header-hooks": "Anger gegaeves",
"statistics-articles": "Inhoudelijke pagina's",
@@ -1256,13 +1259,9 @@
"statistics-files": "Bestenj",
"statistics-edits": "Paginabewerkinge sins t begin van {{SITENAME}}",
"statistics-edits-average": "Gemiddeld aantal bewerkinge per pagina",
- "statistics-views-total": "Totaal aantal weergegeve pagina's",
- "statistics-views-total-desc": "'t Bekieke van neet-bestaonde pagina's en speciaal pagina's is neet inbegrepe",
- "statistics-views-peredit": "Weergegeve pagina's per bewerking",
"statistics-users": "Geregistreerde [[Special:ListUsers|gebroekers]]",
"statistics-users-active": "Actieve gebroekers",
"statistics-users-active-desc": "Gebroekers die in de aafgeloupe {{PLURAL:$1|daag|$1 daag}} 'ne hanjeling höbbe oetgevoerd",
- "statistics-mostpopular": "Meisbekeke pazjena's",
"doubleredirects": "Dobbel redirects",
"doubleredirectstext": "Dees lies haet paazjes mit redireks die nao anger redireks gaon.\nOp eder raegel vings te de ierste redirectpazjena, de twiede redirectpazjena en de iesjte raegel van de twiede redirectpazjena. Meistes bevat dees litste de pazjena woe de iesjte redirect naotoe zouw mótte verwieze.\n<del>Dórchstreipinge</del> zègke det 't al gedaon is.",
"double-redirect-fixed-move": "[[$1]] is verplaats en is noe 'n doorverwiezing nao [[$2]]",
@@ -1294,7 +1293,6 @@
"uncategorizedtemplates": "Óngecategorizeerde sjablone",
"unusedcategories": "Óngebroekde kategorieë",
"unusedimages": "Ongebroekde aafbeildinge",
- "popularpages": "Populaire artikels",
"wantedcategories": "Gewunsjde categorieë",
"wantedpages": "Gewunsjde pazjena's",
"wantedpages-badtitle": "Verkeerde titel in 't rizzeltaot gezatj: $1",
@@ -1342,7 +1340,7 @@
"querypage-disabled": "Dees speciaal pagina steit oet veur performanceredene.",
"booksources": "Bookwinkele",
"booksources-search-legend": "Zeuk informatie euver 'n book",
- "booksources-go": "Zeuk",
+ "booksources-search": "Zeuk",
"booksources-text": "Hiej onger stuit 'n lies met koppelinge nao anger websites die nuuje of gebroekde beuk verkoupe, en die wellich meer informatie euver 't book detse zeuks höbbe:",
"booksources-invalid-isbn": "t Ingegaeve ISBN liek neet geldig te zeen.\nControleer of se wellich n fout höbs gemaak bie de inveur.",
"specialloguserlabel": "Oetveurder:",
@@ -1457,7 +1455,7 @@
"wlheader-enotif": "Doe wörs per e-mail gewaarsjuwd",
"wlheader-showupdated": "Pazjena's die verangerd zeen saers doe ze veur 't lètste bekeeks sjtaon '''vet'''",
"wlnote": "Hieónger {{PLURAL:$1|steit de lètste verangering|staon de lètste $1 verangeringe}} van {{PLURAL:$2|'t lètste oer|de lètste <b>$2</b> oer}} óp $3 óm $4.",
- "wlshowlast": "Tuin lètste $1 ore $2 daag $3",
+ "wlshowlast": "Tuin lètste $1 ore $2 daag",
"watchlist-options": "Opties veur volglies",
"watching": "Bezig mit plaatse op de volglies...",
"unwatching": "Oet de volglies aan 't haole...",
@@ -1494,7 +1492,6 @@
"delete-toobig": "Dees pazjena haet 'ne lange bewerkingsgesjiedenis, mieë es $1 {{PLURAL:$1|versie|versies}}. 't Wisse van dit saort pazjena's is mit rech beperk óm 't próngelök versteure van de werking van {{SITENAME}} te veurkómme.",
"delete-warning-toobig": "Dees pazjena haet 'ne lange bewerkingsgesjiedenis, mieë es $1 {{PLURAL:$1|versie|versies}}. 't Wisse van dees pazjena kan de werking van de database van {{SITENAME}} versteure. Bön veurzichtig.",
"rollback": "Verangering ongedaon gemaak",
- "rollback_short": "Trökdrèjje",
"rollbacklink": "Trökdrieje",
"rollbackfailed": "Ongedaon make van wieziginge mislùk.",
"cantrollback": "Trökdrejje van verangeringe neet meugelik: Dit artikel haet mer einen auteur.",
@@ -1604,7 +1601,7 @@
"blanknamespace": "(hoofnaamruumde)",
"contributions": "Biedrages per gebroeker",
"contributions-title": "Biedrage van $1",
- "mycontris": "Mien biedrage",
+ "mycontris": "Biedrage",
"contribsub2": "Veur $1 ($2)",
"nocontribs": "Gein wijzigingen gevonden die aan de gestelde criteria voldoen.",
"uctop": "(lèste verangering)",
@@ -1893,18 +1890,14 @@
"import-error-invalid": "De pagina\" \"$1\" is neet geïmporteerd omdet de naam óngeljig is.",
"importlogpage": "Importlogbook",
"importlogpagetext": "Administratieve import van pazjena's mit gesjiedenis van anger wiki's.",
- "import-logentry-upload": "[[$1]] geïmporteerd via 'ne bestandjsupload",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|versie|versies}}",
- "import-logentry-interwiki": "transwiki veur $1 geslaag",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} van $2",
"javascripttest": "Tes JavaScript",
- "javascripttest-title": "Veur tes oet veur $1",
"javascripttest-pagetext-noframework": "Dees pagina is gerizzerveerd veur 't oetveure van JavaScriptteste.",
"javascripttest-pagetext-unknownframework": "Ónbekèndje testframework \"$1\".",
"javascripttest-pagetext-frameworks": "Kees ein vanne volgende tesframeworks: $1",
"javascripttest-pagetext-skins": "Kees 'n oeterlik óm de teste op te laote loupe:",
"javascripttest-qunit-intro": "Zuuch de [$1 tesdocumentatie] op mediawiki.org.",
- "javascripttest-qunit-heading": "QUnit tessuite veur MediaWiki JavaScript",
"tooltip-pt-userpage": "Dien gebroekerspagina",
"tooltip-pt-anonuserpage": "De gebroekerspazjena veur dit IP adres",
"tooltip-pt-mytalk": "Dien euverlèkpagina",
@@ -1991,7 +1984,6 @@
"simpleantispam-label": "Antispemcontrole.\nVol dit veld '''NEET''' in!",
"pageinfo-title": "Informatie euver \"$1\"",
"pageinfo-header-edits": "Bewirk",
- "pageinfo-views": "Aantal waergave",
"pageinfo-watchers": "Aantal volgers",
"pageinfo-edits": "Aantal bewèrkinge",
"pageinfo-authors": "Aantal versjillende sjrievers",
@@ -2392,7 +2384,6 @@
"exif-urgency-low": "Lieg ($1)",
"exif-urgency-high": "Hoeg ($1)",
"exif-urgency-other": "Door gebroeker gedefinieerde prioriteit ($1)",
- "watchlistall2": "al",
"namespacesall": "alle",
"monthsall": "al",
"confirmemail": "Bevèstig e-mailadres",
@@ -2464,7 +2455,6 @@
"watchlisttools-edit": "Volglies bekieke en bewirke",
"watchlisttools-raw": "Roew volglies bewirke",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|euverlègk]])",
- "unknown_extension_tag": "Ónbekindje tag \"$1\"",
"duplicate-defaultsort": "Waarsjuwing: De standaardsortering \"$2\" krieg veurrang veur de sortering \"$1\".",
"version": "Versie",
"version-extensions": "Geïnstalleerde oetbreijinge",
@@ -2480,7 +2470,7 @@
"version-parser-function-hooks": "Parserfunctieheuk",
"version-hook-name": "Hooknaam",
"version-hook-subscribedby": "Geabonneerd door",
- "version-version": "(Versie $1)",
+ "version-version": "($1)",
"version-license": "Licentie",
"version-poweredby-credits": "Deze wiki weurt aangedreve door '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "anger",
@@ -2514,6 +2504,7 @@
"specialpages-group-wiki": "Wikigegaeves en -hölpmiddele",
"specialpages-group-redirects": "Doorverwiezende speciaal pazjena's",
"specialpages-group-spam": "Spamhölpmiddele",
+ "specialpages-group-developer": "Hölpmiddele veur óntwikkeleers",
"blankpage": "Laeg pazjena",
"intentionallyblankpage": "Deze pagina is bewus laeg gelaote en wurt gebroek veur benchmarks, enzovoort.",
"external_image_whitelist": " #Laot deze regel onveranderd<pre>\n#Zèt hierónger reguliere expressiefragmente (allein 't deil det tusse de // steit)\n#Deze waere gehaaje taenge de URL's van externe (gehotlinkte) aafbeeldinge\n#Es de reguliere expressie van toegang is, wurd 'n aafbeelding weergegaeve, anges wurd allein 'n verwiezing weergegaeve\n#Regels die beginne met \"#\" waere es opmerking behanjeld\n#Regels in de witte lies zeen neet hooflettergeveulig.\n\n#Zet alle reguliere expressiefragmenten baove deze regel. Laot deze regel onveranderd</pre>",
@@ -2585,19 +2576,20 @@
"logentry-newusers-create2": "$1 haet 'ne gebroeker $3 aangemaak",
"logentry-newusers-autocreate": "De gebroeker $1 is autematis aangemaak",
"rightsnone": "(gein)",
+ "revdelete-summary": "samevatting bewerke",
+ "feedback-adding": "Feedback weurt aan pagina toegevoeg...",
+ "feedback-bugcheck": "Good! Kónterleer ef of 't neet al ein vanne [$1 bekèndje bugs] is.",
+ "feedback-bugnew": "Gekónterleerdj. Mèlj 'ne nuuj bug.",
"feedback-bugornote": "Es se zewied bös óm e technisch perbleem in détail te besjrieve, [$1 rapperteer 'ne bug]. \nAnges kin se-n ouch 't einvawdig formeleer hieónger gebroeke. Dien commentaar zal waere toegeveug ane pagina \"[$3 $2]\", same mit diene gebroekersnaam enne browser dae se gebruuks.",
- "feedback-subject": "Óngerwerp:",
- "feedback-message": "Berich:",
"feedback-cancel": "Braek aaf",
- "feedback-submit": "Slaon feedback óp",
- "feedback-adding": "Feedback weurt aan pagina toegevoeg...",
+ "feedback-close": "Gedaon",
"feedback-error1": "Fout: ónbekind rizzeltaot vanne API",
"feedback-error2": "Fout: bewirking mislök",
"feedback-error3": "Fout: gein reactie vanne API",
+ "feedback-message": "Berich:",
+ "feedback-subject": "Óngerwerp:",
+ "feedback-submit": "Slaon óp",
"feedback-thanks": "Danke! Diene feedback is oppe pagina \"[$2 $1]\" geplaats.",
- "feedback-close": "Gedaon",
- "feedback-bugcheck": "Good! Kónterleer ef of 't neet al ein vanne [$1 bekèndje bugs] is.",
- "feedback-bugnew": "Gekónterleerdj. Mèlj 'ne nuuj bug.",
"searchsuggest-search": "Zeuke",
"searchsuggest-containing": "bevat...",
"api-error-badaccess-groups": "Doe moogs gein bestenj uploade óp deze wiki.",
@@ -2658,5 +2650,24 @@
"expand_templates_remove_comments": "Wis opmerkinge",
"expand_templates_remove_nowiki": "Óngerdrök <nowiki>-tags in 't resultaat",
"expand_templates_generate_xml": "XML-parserboum bekieke",
- "expand_templates_preview": "Veurvertoeaning"
+ "expand_templates_preview": "Veurvertoeaning",
+ "special-characters-group-latin": "Letien",
+ "special-characters-group-latinextended": "Oetgebreid letien",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symbole",
+ "special-characters-group-greek": "Grieks",
+ "special-characters-group-cyrillic": "Cyrillisch",
+ "special-characters-group-arabic": "Arabisch",
+ "special-characters-group-arabicextended": "Oetgebreid Arabisch",
+ "special-characters-group-persian": "Perzisch",
+ "special-characters-group-hebrew": "Hebreeuws",
+ "special-characters-group-bangla": "Bengaals",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Teloegoe",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Goedzjarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Cambodzjaans"
}
diff --git a/languages/i18n/lij.json b/languages/i18n/lij.json
index c4753273..3a1d7712 100644
--- a/languages/i18n/lij.json
+++ b/languages/i18n/lij.json
@@ -377,12 +377,10 @@
"passwordreset-emailtitle": "Dettaggi account sciu {{SITENAME}}",
"passwordreset-emailelement": "Nomme utente: $1\nPoula segretta temporannia: $2",
"changeemail": "Cangia l'adresso e-mail",
- "changeemail-header": "Cangia l'adresso e-mail de questa utensa",
"changeemail-newemail": "Noeuvo adresso e-mail",
"changeemail-none": "(nisciun)",
"changeemail-password": "A to password pe {{SITENAME}}:",
"changeemail-submit": "Cangia e-mail",
- "changeemail-cancel": "Annulla",
"resettokens-token-label": "$1 (oua o l'è: $2)",
"bold_sample": "Grascetto",
"bold_tip": "Grascetto",
@@ -504,7 +502,6 @@
"search-suggest": "Fòscia ti voéivi: $1",
"searchrelated": "corelæ",
"searchall": "tùtti",
- "showingresultsheader": "{{PLURAL:$5|Rizoltato '''$1''' di '''$3'''|Rizoltati '''$1 - $2''' de '''$3'''}} pe '''$4'''",
"search-nonefound": "Mi n'ho atrovòu ninte",
"preferences": "Preferençe",
"mypreferences": "Preferençe",
@@ -658,7 +655,6 @@
"booksources": "Fonte libraie",
"booksources-search-legend": "Çerca e fonti",
"booksources-isbn": "Codice ISBN:",
- "booksources-go": "Vànni",
"booksources-text": "De sotta unn-a lista de ingançi a ätri sciti che vendan neuvi e vegi libbri, e che peuvre avei informaçioin in sci libbri che ti te çerchi",
"specialloguserlabel": "Ûtente:",
"speciallogtitlelabel": "Tittolo:",
@@ -704,7 +700,7 @@
"watchthispage": "Vigilâ 'sta paggina",
"unwatch": "Leva da sott'oservaçion",
"watchlist-details": "A lista d'oservaçión speçiâle a contegne {{PLURAL:$1|ina pàgina (co-a seu pàgina de discusción)|$1 de pàgine (co-e so pàgine de discusción)}}.",
- "wlshowlast": "Famme vedde e ûrtime $1 ôe $2 giorni $3",
+ "wlshowlast": "Famme vedde e ûrtime $1 ôe $2 giorni",
"watchlist-options": "Inpostaçioìn di oservæ speciâli",
"watching": "Inti osservæ speçiâli...",
"unwatching": "Scassâ da-i osservæ speçiâli",
@@ -937,7 +933,6 @@
"exif-copyright": "Diritti d'autô de",
"exif-filesource": "Reixe do papê",
"exif-languagecode": "Lengua",
- "watchlistall2": "Tùtti",
"namespacesall": "Tùtti",
"monthsall": "tutti",
"imgmultipageprev": "← Pagina de primma",
diff --git a/languages/i18n/liv.json b/languages/i18n/liv.json
index 727743d9..9feb6518 100644
--- a/languages/i18n/liv.json
+++ b/languages/i18n/liv.json
@@ -268,7 +268,6 @@
"search-interwiki-more": " (vel)",
"searchrelated": "sidtõd",
"searchall": "tikkiž",
- "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-st rezultātõst|Rezultātõd '''$1–$2''' '''$3'''-st}} kizzimizõn '''$4'''",
"search-nonefound": "Vȯtšimizõn vȯtšimi äb lieudtõd vastūkst.",
"powersearch-legend": " Juo akurāt vȯtšimi",
"powersearch-ns": "Vȯtšimi nim-rūimšti:",
@@ -351,7 +350,6 @@
"pager-older-n": "{{PLURAL:$1|jo vaņīmi 1|jo vaņīmizt $1}}",
"booksources": "Rōntõ vȯtšimi",
"booksources-search-legend": "Rōntõ vȯtšimi",
- "booksources-go": "Li",
"log": "Logūd",
"allpages": "Amād lēḑõd",
"prevpage": "Jedmõli lēḑ ($1)",
@@ -373,7 +371,7 @@
"watchthispage": "Vaņ iļ siedā līedpūoltõ",
"unwatch": "Lopta iļ-vaņtlimi",
"watchlist-details": " {{PLURAL:$1|$1 lēḑ|$1 līedtõ}} ātõ iļ-vaņtlimiz nimkēras, bäz luggõmõt nõvpidāmiz-līedidi.",
- "wlshowlast": "Nägţ perīzt $1 stuņdõ $2 päuvõ $3",
+ "wlshowlast": "Nägţ perīzt $1 stuņdõ $2 päuvõ",
"watchlist-options": "Iļ-vaņtlimiz nimkēra pie-lēmizt",
"watching": "Vaņtlimi iļ sīe...",
"unwatching": "Iļ-vaņtlimiz loptimi...",
@@ -539,7 +537,6 @@
"metadata-expand": "Nägţ mūḑi jo akurātidi ažḑi",
"metadata-collapse": "Vaŗ jarā juo akurāt ažād",
"metadata-fields": "Täs lugdõd fail meta-tīetõkst vellidi nägţõbõd bīlda seļţimiz līeds meta-tīetõkst vaņtlimiz āigal. Munt tīetõkst ātõ bäz kītõmõt jarā vaŗtõd. \n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "tikkiž",
"namespacesall": "tikkiž",
"monthsall": "tikkiž",
"watchlisttools-view": "Nägţ sīe mõitõkši",
diff --git a/languages/i18n/lmo.json b/languages/i18n/lmo.json
index 80bfa6bb..264bb818 100644
--- a/languages/i18n/lmo.json
+++ b/languages/i18n/lmo.json
@@ -474,11 +474,9 @@
"passwordreset-emailsent": "Gh'è stat mandàt vià 'na e-mail de redefinisiù de la password.",
"passwordreset-emailsent-capture": "Gh'è stat mandàt vià chèsta e-mail de redefinisiù de la password:",
"changeemail": "Càmbia l'indirìs e-mail",
- "changeemail-header": "Càmbia l'indirìs e-mail de l'ütènsa",
"changeemail-none": "(nisü)",
"changeemail-password": "La password sö {{SITENAME}}:",
"changeemail-submit": "Càmbia l'indirìs e-mail",
- "changeemail-cancel": "Scancèla l'operasiù",
"changeemail-throttled": "Te g'hét fat tròp tacc tentatìf de autenticàt, adès te g'hét de spetà $1 per püdì turnà a pröà.",
"resettokens": "Redefenés i tokens",
"resettokens-no-tokens": "Gh'è nisü token de redefenéser.",
@@ -635,7 +633,6 @@
"revdelete-edit-reasonlist": "Mudifega i mutiv del scancelament",
"mergehistory-submit": "Önés le versiù",
"mergehistory-reason": "Mutìf:",
- "pagemerge-logentry": "el g'ha ünìt [[$1]] a [[$2]] (reviziù 'nfìna al $3)",
"revertmerge": "Scancela i ünión",
"history-title": "Crunulugia di mudifegh de \"$1\"",
"difference-title-multipage": "Diferènsa 'ntra le pàgine \"$1\" e \"$2\"",
@@ -986,12 +983,10 @@
"unusedtemplates": "Templat mia druvaa",
"unusedtemplateswlh": "alter culegament",
"randompage": "Una pagina a cas",
- "randomincategory-selectcategory-submit": "Và",
"randomredirect": "Un redirect a cas",
"statistics": "Statistich",
"statistics-header-pages": "Statistegh di paginn",
"statistics-header-edits": "Statistegh di mudifegh",
- "statistics-header-views": "Statistegh di visüalizazión",
"statistics-header-users": "Statistegh di druvadur",
"statistics-header-hooks": "Alter statistegh",
"statistics-articles": "Paginn de cuntegnüü",
@@ -1033,7 +1028,6 @@
"uncategorizedtemplates": "Mudel ch'i gh'hann mía de categuria.",
"unusedcategories": "Categurij mía druvaa",
"unusedimages": "Imagin mia druvaa",
- "popularpages": "Pàgine éste piö de spès",
"wantedcategories": "Categurij ricercaa",
"wantedpages": "Pagin ricercaa",
"mostlinked": "Püssè ligaa a pagin",
@@ -1073,7 +1067,6 @@
"pager-older-n": "{{PLURAL:$1|1|$1}} püssee vegg",
"booksources": "Surgent per i lìber",
"booksources-search-legend": "Cerca i fónt di liber",
- "booksources-go": "Va",
"specialloguserlabel": "Ütent:",
"speciallogtitlelabel": "Asiù fàda sö:",
"log": "Register",
@@ -1117,7 +1110,7 @@
"unwatch": "Tegn pü d'ögg",
"unwatchthispage": "Desmèt de tègner d'öcc",
"watchlist-details": "{{PLURAL:$1|$1 pagina|$1 paginn}} tegnüü sot ögg, fö che i paginn de discüssión.",
- "wlshowlast": "Fa vidé i ültim $1 ur $2 dì $3",
+ "wlshowlast": "Fa vidé i ültim $1 ur $2 dì",
"watchlist-options": "Upzión lista d'ussevazión",
"watching": "Giuntà ai pagin da ten d'ögg...",
"unwatching": "Eliminà dai pagin da ten d'ögg...",
@@ -1430,7 +1423,6 @@
"exif-stripoffsets": "Puzisiù dei dati de la foto",
"exif-rowsperstrip": "Nömer de rìghe per fàsa",
"exif-imagedescription": "Tìtol de la foto",
- "watchlistall2": "tücc",
"namespacesall": "tücc",
"monthsall": "tücc",
"confirmemail": "Cunferma l<nowiki>'</nowiki>''e-mail''",
diff --git a/languages/i18n/ln.json b/languages/i18n/ln.json
index 5e8fda18..7c0baaa9 100644
--- a/languages/i18n/ln.json
+++ b/languages/i18n/ln.json
@@ -209,7 +209,6 @@
"passwordreset-username": "Nkómbó ya mosáleli:",
"passwordreset-email": "Adɛlɛ́sɛ-ímɛ́lɛ:",
"changeemail-none": "(mɔ́kɔ́ tɛ́)",
- "changeemail-cancel": "Kozóngela",
"bold_sample": "Nkomá ya mbinga",
"bold_tip": "Nkomá ya mbinga",
"italic_sample": "Nkomá ya kotɛ́ngama",
@@ -376,7 +375,6 @@
"newpages-username": "Nkómbó ya mosáleli:",
"move": "Kobóngola nkómbó",
"movethispage": "Kobóngola nkómbó ya lonkásá loye",
- "booksources-go": "Kɛndɛ́",
"log": "Bapasɔ́",
"allpages": "Nkásá ínsɔ",
"nextpage": "Lonkásá ya nsima ($1)",
@@ -400,7 +398,7 @@
"unwatch": "Kolanda tɛ́",
"watchlist-details": "{{PLURAL:$1|Lonkásá $1 elandámí|Nkásá $1 bilandámí}}, longola nkásá ya ntembe.",
"wlnote": "Áwa o nsé {{PLURAL:$1|ezalí mbóngwana ya nsúka|izalí mbóngwana '''$1''' ya nsúka}} o {{PLURAL:$2|ngonga|ngonga '''$2'''}} ya nsúka.",
- "wlshowlast": "Komɔ́nisa ngónga $1 ya nsúka, mikɔlɔ $2 mya nsúka tǒ $3",
+ "wlshowlast": "Komɔ́nisa ngónga $1 ya nsúka, mikɔlɔ $2 mya nsúka tǒ",
"watching": "Kolanda...",
"unwatching": "Kolanda tɛ́...",
"created": "ekomákí",
@@ -520,7 +518,6 @@
"ilsubmit": "Boluki",
"exif-artist": "Mokeli",
"exif-subjectdistancerange-2": "kokanga view",
- "watchlistall2": "nyɔ́nsɔ",
"namespacesall": "Nyɔ́nsɔ",
"monthsall": "nyɔ́nsɔ",
"confirm_purge_button": "Nandimi",
diff --git a/languages/i18n/lo.json b/languages/i18n/lo.json
index dfffb145..b45d90cb 100644
--- a/languages/i18n/lo.json
+++ b/languages/i18n/lo.json
@@ -448,7 +448,6 @@
"move": "ຍ້າຍ",
"movethispage": "ຍ້າຍໜ້ານີ້",
"booksources": "ປຶ້ມອ້າງອີງ",
- "booksources-go": "ໄປ",
"log": "ບັນທຶກ",
"all-logs-page": "ທຸກໆຂໍ້ມູນບັນທຶກການນຳໃຊ້",
"logempty": "ຍັງບໍ່ພົບເນື້ອໃນບັນທຶກ.",
@@ -486,7 +485,7 @@
"watchthispage": "ຕິດຕາມໜ້ານີ້",
"unwatch": "ເຊົາຕິດຕາມ",
"wlheader-showupdated": "ບັນດາ ໜ້າ ທີ່ມີການປ່ຽນແປງ ຫຼັງຈາກທີ່ທ່ານ ເຂົ້າຊົມຫຼ້າສຸດ ຈະຖືກສະແດງເປັນ ໂຕໜັງສື '''ເຂັ້ມ'''",
- "wlshowlast": "ສະແດງ $1 ຊົ່ວໂມງຫຼ້າສຸດ $2 ມື້ຫຼ້າສຸດ $3",
+ "wlshowlast": "ສະແດງ $1 ຊົ່ວໂມງຫຼ້າສຸດ $2 ມື້ຫຼ້າສຸດ",
"watching": "ພວມຕິດຕາມ...",
"unwatching": "ພວມເຊົາຕິດຕາມ...",
"enotif_lastvisited": "ເບິ່ງ $1 ເພື່ອ ທຸກໆການປ່ຽນແປງ ຕັ້ງແຕ່ເທື່ອສຸດທ້າຍ ທີ່ ທ່ານເຂົ້າຫາ.",
@@ -633,7 +632,6 @@
"exif-imagedescription": "ຫົວຂໍ້ຮູບ",
"exif-artist": "ຜູ້ຂຽນ",
"exif-copyright": "ເຈົ້າຂອງລິຂະສິດ",
- "watchlistall2": "ທັງໝົດ",
"namespacesall": "ທັງໝົດ",
"monthsall": "ທັງໝົດ",
"confirmemail": "ຢືນຢັນ ທີ່ຢູ່ ອີເມລ",
diff --git a/languages/i18n/loz.json b/languages/i18n/loz.json
index 7f03841f..f511adcc 100644
--- a/languages/i18n/loz.json
+++ b/languages/i18n/loz.json
@@ -478,7 +478,6 @@
"uncategorizedtemplates": "Yegani coni kattegori",
"unusedcategories": "Kattegori kopu",
"unusedimages": "Imegi kopu",
- "popularpages": "Petulo populali",
"wantedcategories": "Ni sa kattegorina con ling'ki",
"wantedpages": "Ni sa petulo con ling'ki",
"mostlinked": "Petulo con plus ling'ki di a",
@@ -500,7 +499,6 @@
"move": "Nyanganyisize",
"movethispage": "Nyanganyisize bye petulo",
"booksources": "Desusorsi",
- "booksources-go": "Afi",
"specialloguserlabel": "Sebelu:",
"speciallogtitlelabel": "Sebu:",
"log": "Desuni",
@@ -541,7 +539,7 @@
"unwatchthispage": "Ngambu kentezi",
"notanarticle": "Ni di petulo infomelo",
"watchlist-details": "{{PLURAL:$1|$1 petulo|$1 petulo}} sa kentezi e no bulelezi.",
- "wlshowlast": "Kamukile lapu-lila $1 holani $2 dia $3",
+ "wlshowlast": "Kamukile lapu-lila $1 holani $2 dia",
"watching": "Kentezi...",
"unwatching": "Dikentezi...",
"enotif_impersonal_salutation": "{{SITENAME}} sebelu",
@@ -743,7 +741,6 @@
"metadata-collapse": "Cwankekile petulo tabu",
"metadata-fields": "EXIF metadata fields mukoloko kwa mulumiwa sa ike kwa imegipetulo ka metadata tablu sa tibekile. Xetewi sa cwankekile auto.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagedescription": "Sebu di imegi",
- "watchlistall2": "xeti",
"namespacesall": "xeti",
"monthsall": "xeti",
"confirm_purge_button": "Afi",
diff --git a/languages/i18n/lrc.json b/languages/i18n/lrc.json
index bfa2bce3..f2f4dcbb 100644
--- a/languages/i18n/lrc.json
+++ b/languages/i18n/lrc.json
@@ -3,7 +3,8 @@
"authors": [
"Bonevarluri",
"Mogoeilor",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "هوم پیوند زیرخط دار:",
@@ -15,41 +16,41 @@
"tog-numberheadings": "سربلگه خود شماره گر",
"tog-showtoolbar": "نوار اوزار ويرايشت نشون بيه",
"tog-editondblclick": "بلگيا نه وا دوبار پورنين ويرايشت بكيد",
- "tog-editsectiononrightclick": "بهر ویرایشت نه وا راس کلیک کردن د بهر عنوانیا فعال کو",
- "tog-watchcreations": "بلگیایی که مه راس کمه و فایلیایی که مه سوار کمه اضاف کو د سیل برگه مه",
- "tog-watchdefault": "بلگیا و فایلایی که مه ویرایشت کمه اضاف کو د سیل برگم",
- "tog-watchmoves": "بلگیاو فایلیایی که مه جاوه جا کمه د سیل برگم اضاف کو",
- "tog-watchdeletion": "بلگیا و فایلایی که مه پاک کمه اضاف کو د سیل برگم",
+ "tog-editsectiononrightclick": "بهرجا ویرایشت نه وا راس پورنین د بهرجا داسونیا کنشتگر کو",
+ "tog-watchcreations": "بلگیایی که مه راس کمه و جانیایایی که مه سوار کمه اضاف کو د سیل برگه مه",
+ "tog-watchdefault": "بلگیا و جانیایی که مه ویرایشت کمه اضاف کو د سیل برگم",
+ "tog-watchmoves": "بلگیاو جانیایی که مه جاوه جا کمه د سیل برگم اضاف کو",
+ "tog-watchdeletion": "بلگیا و جانیایی که مه پاک کمه اضاف کو د سیل برگم",
"tog-watchrollback": "همه بلگه یا نه د جایی که مه د سیل برگم می کم اضاف کو.",
"tog-minordefault": "همه ویرایشتیا کؤچک نه وا پیش فرض بیئن نشو دار کو.",
"tog-previewontop": "پیش سیل نه دما جعوه ویرایشت نشو بیئه",
- "tog-previewonfirst": "پیش سیل نه د اولین ویرایشت نشو بیئه",
- "tog-enotifwatchlistpages": "اوسه که یه گل بلگه یا فایلی د سیل برگ مه آلشت بوئه منه وا ایمیل خور کو",
- "tog-enotifusertalkpages": "وختی که بلگه گپسن کاریار آلشت پیدا کرد منه وا ایمیل خور کو",
- "tog-enotifminoredits": "همچنو اوسه که ویرایشتیا کؤچکی د بلگیا یا فایلیا انجوم بوئه منه خور کو",
- "tog-enotifrevealaddr": "نشونی ایمیل منه د ایمیل اشگار نشو بیه",
- "tog-shownumberswatching": "انازه کاریاریایی که د حالت دیئنن نشو بیه",
+ "tog-previewonfirst": "پیش سیل نه د اولی ویرایشت نشو بیئه",
+ "tog-enotifwatchlistpages": "اوسه که یه گل بلگه یا جانیا د سیل برگ مه آلشت بوئه منه وا انجومانامه خور کو",
+ "tog-enotifusertalkpages": "د گاتی که بلگه گپسن کاریار آلشت پیدا کرد منه وا انجومانامه خور کو",
+ "tog-enotifminoredits": "همچنو اوسه که ویرایشتیا کؤچکی د بلگیا یا جانیایا انجوم بوئه منه خور کو",
+ "tog-enotifrevealaddr": "نشونی انجومانامه منه د انجومانامه اشگار نشو بیه",
+ "tog-shownumberswatching": "انازه کاریاریایی که د حال و بال دیئنن نشو بیه",
"tog-oldsig": "امضايی هيئش:",
- "tog-fancysig": "وا امضا چی ویکی متن برخورد کو",
- "tog-uselivepreview": "د پیش سیل زنه استفاده کو",
- "tog-forceeditsummary": "منه وختی که یه گل چکسه ویرایشت حالی وارد بوئه سریع خور کو",
+ "tog-fancysig": "وا امضا چی ویکی متن رفتار داشتو",
+ "tog-uselivepreview": "پیش سیل زنه وه کار بیئر",
+ "tog-forceeditsummary": "منه د گاتی که یه گل چکسه ویرایشت حالی وارد بوئه سریع خور کو",
"tog-watchlisthideown": "قام كو ويرايشت منه د",
"tog-watchlisthidebots": "ویرایشت یا بوت نه د سیل برگ قام کو",
"tog-watchlisthideminor": "قام كو ويرايشت کؤچک منه د",
- "tog-watchlisthideliu": "ویرایشت یا کاریاریا وامئن سیستم نه د سیل برگ قام کو",
- "tog-watchlisthideanons": "ویرایشت یا کاروریا ناشناس نه د سیل برگ قام کو",
+ "tog-watchlisthideliu": "ویرایشت یا کاریاریا وامئن سامونه نه د سیل برگ قام کو",
+ "tog-watchlisthideanons": "ویرایشت یا کاروریا نادیار نه د سیل برگ قام کو",
"tog-watchlisthidepatrolled": "ویرایش تیا د تی رس نه د سیل برگ قام کو",
- "tog-ccmeonemails": "کپی انجومانامه یا منه که سی کاریاریا تر می فرسنم سیم کل کو",
- "tog-diffonly": "بلگیایی که شومل فرخیا هارن نشون نیه",
+ "tog-ccmeonemails": "ورداشته انجومانامه یا منه که سی کاریاریا تر می فرسنم سیم کل کو",
+ "tog-diffonly": "بلگیایی که د ور گرته فرخیا هارن نشون نیه",
"tog-showhiddencats": "دسه يا قام بيئنه نشون بيه",
"tog-norollbackdiff": "فرخیا نه د بین بوریت نها یه گل عقو گرد کردن",
- "tog-useeditwarning": "وختی که آلشتیا ذخیره نبیه د بلگه ویرایشت وه جا می نم خورم کو",
- "tog-prefershttps": "همیشه وختی که مه وامئن هئم د ارتواط امن استفاده کو",
+ "tog-useeditwarning": "د گاتی که آلشتیا اماییه نبیه د بلگه ویرایشت وه جا می نم خورم کو",
+ "tog-prefershttps": "همیشه د گاتی که مه وامئن هئم د ارتواط امن وه کار بیئر",
"underline-always": "هميشه",
"underline-never": "هيژوخت",
- "underline-default": "پوسه یا مرورگر پیش فرض",
+ "underline-default": "پوسه یا دوارته نیئر پیش فرض",
"editfont-style": "راساگه فونت شلک نه ویرایشت کو",
- "editfont-default": "مرورگر پیش بینی بیه",
+ "editfont-default": "دوارته نیئر پیش بینی بیه",
"editfont-monospace": "فونت تک بلگه ای",
"editfont-sansserif": "سان سریف فونت",
"editfont-serif": "فونت سريف",
@@ -68,7 +69,7 @@
"fri": "جمه",
"sat": "شمه",
"january": "جانويه",
- "february": "فبريه",
+ "february": "فوریه",
"march": "مارش",
"april": "آبريل",
"may_long": "ما",
@@ -91,8 +92,8 @@
"october-gen": "اكتور",
"november-gen": "نوامر",
"december-gen": "دسامر",
- "jan": "ژانويه",
- "feb": "فبريه",
+ "jan": "جانویه",
+ "feb": "فوریه",
"mar": "مارش",
"apr": "آبريل",
"may": "ما",
@@ -118,31 +119,31 @@
"pagecategories": "{{PLURAL:$1|دسه|دسه يا}}",
"category_header": "بلگيا مئن دسه \"$1\"",
"subcategories": "زيردسه يا",
- "category-media-header": "رسانه د دسه \"$1\"",
- "category-empty": "ای دسه واقعن شومل هیژ بلگه ای یا رسانه ای نی",
+ "category-media-header": "وارسگر د دسه \"$1\"",
+ "category-empty": "ای دسه واقعن ده ور گرته هیژ بلگه ای یا وارسگر ای نی",
"hidden-categories": "{{PLURAL:$1|دسته قام بيه|دسته يا قام بيه}}",
"hidden-category-category": "دسه یا قام بیه",
- "category-subcat-count": "{{جمی:$2|ای دسه فقط زیر دسه دینداگر هان دش .|ای دسه {{جمی:$1| زیردسه|$1 زیردسه یا}}هئ , خارج د $2 کل.}}",
- "category-subcat-count-limited": "ای دسه وا دمال {{جمی:$1|زیردسه|$1زیردسه یا}} بوئه",
- "category-article-count": "{{جمی:$2|ای دسه شومل بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای دسه, خارج د $2 کل.}}",
+ "category-subcat-count": "{{جمی:$2|ای دسه فقط زیر دسه دینداگر هان دش .|ای دسه {{جمی:$1| زیردسه|$1 زیردسه یا}}هئ , وه در د $2 کل.}}",
+ "category-subcat-count-limited": "ای دسه وا دم {{جمی:$1|زیردسه|$1زیردسه یا}} بوئه",
+ "category-article-count": "{{جمی:$2|ای دسه ده ور گرته بلگه نهاییه .| {{جمی:$1| بلگه هئ|$1 بلگیا هئن}} د ای دسه, وه در $2 کل.}}",
"category-article-count-limited": "نها {{جمی:$1|بلگه هئ|$1بلگیا هئن}} د دسه ایسنی .",
- "category-file-count": "{{جمی:$2|ای دسه فقط شامل فایل نهایی هئ file.| نهایی {{جمی:$1|فایل هئ|$1 فایلیا هئن}} د ای دسه, وه در د کل $2 .}}",
+ "category-file-count": "{{جمی:$2|ای دسه فقط د ور گرته جانیا نهایی هئ file.| نهایی {{جمی:$1|جانیا هئ|$1 جانیایا هئن}} د ای دسه, وه در د کل $2 .}}",
"category-file-count-limited": " {{جمی:$1|[جانیا هئ|1$جانیایا هئن}}نهایی هان د دسه ایسنی.",
"listingcontinuesabbrev": "دماله",
"index-category": "بلگيا سيائه دار",
"noindex-category": "بلگيا بی سيائه",
- "broken-file-category": "بلگیایی که هوم پیوند فایلیا اشکسه دارن",
+ "broken-file-category": "بلگیایی که هوم پیوند جانیایا اشکسه دارن",
"categoryviewer-pagedlinks": "($1) ($2)",
"about": "دباره",
- "article": "محتوا بلگه",
+ "article": "مینونه بلگه",
"newwindow": "(نيمدری تازه وا کو)",
"cancel": "انجوم شیوسن",
"moredotdotdot": "بيشتر",
- "morenotlisted": "ای ليست كامل نبيه",
+ "morenotlisted": "ای نومجا كامل نبيه",
"mypage": "بلگه",
"mytalk": "چك چنه",
- "anontalk": "دباره نشونی ای آی پی قصه بكيد",
- "navigation": "ناوگشتن",
+ "anontalk": "دباره تیرنشون ای آی پی قصه بكيد",
+ "navigation": "ناوجوری",
"and": "&#32;و",
"qbfind": "فهمسن،جسن",
"qbbrowse": "قرض گرتن",
@@ -152,8 +153,8 @@
"faq": "اف ای كيو",
"faqpage": "پروجه:اف اي كيو",
"actions": "جمشت",
- "namespaces": "نوم جا",
- "variants": "آلشت ونی يا",
+ "namespaces": "نوم ورگه یا",
+ "variants": "آلشتگریا",
"navigation-heading": "منو ناوگشتن",
"errorpagetitle": "غلط",
"returnto": "ورگشت وه $1.",
@@ -165,10 +166,10 @@
"searcharticle": "رو",
"history": "ويرگار بلگه",
"history_short": "ويرگار",
- "updatedmarker": "د آخرین دیئن مه روزآمد کو",
- "printableversion": "نسقه چاپ بيئنی",
- "permalink": "چسب ون هميشئی",
- "print": "چاپ كردن",
+ "updatedmarker": "د آخرین دیئن مه وه هنگوم سازی کو",
+ "printableversion": "نسقه پلا بيئنی",
+ "permalink": "هوم پیوند هميشئی",
+ "print": "پلا كردن",
"view": "ديئن",
"view-foreign": "د $1 نه بوینیت",
"edit": "ويرايشت",
@@ -177,22 +178,22 @@
"create-local": "یه گل توضیح ولات نشینی اضاف بکیتو",
"editthispage": "ويرايشت ای بلگه",
"create-this-page": "راس كردن ای بلگه",
- "delete": "حذف كردن",
- "deletethispage": "ای بلگه نه حذف بكيد",
- "undeletethispage": "ای بلگه نه حذف نكيد",
+ "delete": "پاکسا كردن",
+ "deletethispage": "ای بلگه نه پاکسا بكيد",
+ "undeletethispage": "ای بلگه نه پاکسا نكيد",
"undelete_short": "زنه کردن {{جمی:$1|یه گل ویرایشت|$1 ویرایشتیا}}",
"viewdeleted_short": "بوینیت {{[جمی:$1|یه گل ویرایشت پاکسا بیه|$1ویرایشتیا پاکسا بیه}}",
- "protect": "حمايت بكيد",
+ "protect": "پر و پیم بكيد",
"protect_change": "آلشت بكيد",
- "protectthispage": "ای بلگه نه حفاظت بكيد",
- "unprotect": "حمايت آلشت بكيد",
- "unprotectthispage": "حفاظت دی بلگه نه آلشت بكيد",
+ "protectthispage": "ای بلگه نه پر و پیم بكيد",
+ "unprotect": "پر و پیم کردن نه آلشت بکیت",
+ "unprotectthispage": "پر و پیم کردن د ای بلگه نه آلشت بكيد",
"newpage": "بلگه نو",
"talkpage": "دباره ای بلگه قصه بكيد",
- "talkpagelinktext": "وت و واچ",
+ "talkpagelinktext": "چک چنه",
"specialpage": "بلگه ويجه",
"personaltools": "اوزاريا شصقی",
- "articlepage": "ديئن محتوا بلگه",
+ "articlepage": "ديئن مینونه بلگه",
"talk": "گپ",
"views": "ديئنيا",
"toolbox": "اوزاريا",
@@ -200,56 +201,58 @@
"projectpage": "ديئن بلگه پروجه",
"imagepage": "ديئن بلگه جانیا",
"mediawikipage": "ديئن بلگه پيغوم",
- "templatepage": "ديئن بلگه قالو",
+ "templatepage": "ديئن بلگه چوئه",
"viewhelppage": "ديئن بلگه هومياری",
"categorypage": "ديئن بلگه دسه بنی",
"viewtalkpage": "ديئن چك چنه يا",
- "otherlanguages": "د زونيا هنی",
+ "otherlanguages": "د زونا هنی",
"redirectedfrom": "(ورگشتن د$1)",
- "redirectpagesub": "بلگه دوباره ورگشتن",
+ "redirectpagesub": "بلگه واگردونی",
"redirectto": "واگردونی سی:",
"lastmodifiedat": "ای بلگه تازه ايا وضع آلشت بيه د $1, د $2.",
"viewcount": "ای بلگه قاول دسترسی بيه {{PLURAL:$1|once|$1 times}}.",
- "protectedpage": "بلگه حفاظت بيه",
+ "protectedpage": "بلگه پر و پیم بيه",
"jumpto": "پئرستن د",
- "jumptonavigation": "ناوگشتن",
+ "jumptonavigation": "ناوجوری",
"jumptosearch": "پی جوری",
"view-pool-error": "د بدبختی،ایسنی سروریا فره شلوغ.\nکاریاریا فره زیادی میهان ای بلگه نه بوینن.\nیه گری صب بکیتو دما یه که میهات دوواره ای بلگه نه بوینیت.",
"generic-pool-error": "د بدبختی،ایسنی سروریا فره شلوغ.\nکاریاریا فره زیادی میهان ای بلگه نه بوینن.\nیه گری صب بکیتو دما یه که میهات دوواره ای بلگه نه بوینیت.",
- "pool-timeout": "وخت سی تیه وه ره منن سی قلف بیئن تموم بی",
- "pool-queuefull": "ذخیره گی گرتن پر بیه",
- "pool-errorunknown": "خطا ناشناس",
+ "pool-timeout": "گات سی تیه وه ره منن سی قلف بیئن تموم بی",
+ "pool-queuefull": "اماییه کاری گی گرتن پر بیه",
+ "pool-errorunknown": "خطا نادیار",
"pool-servererror": "پول سنتر خذمتگه د دسرس نئ($1).",
+ "poolcounter-usage-error": "خطار وه کار گرتن:$1",
"aboutsite": "دباره {{SITENAME}}",
"aboutpage": "پروجه:دباره",
- "copyright": "محتوا د دسرس هئ سی $1 مر وه شلک هنی نوشته بوئه",
+ "copyright": "مینونه د دسرس هئ سی $1 مر وه شلک هنی نوشته بوئه",
"copyrightpage": "{{ان اس:پروجه}}:کپی رایت",
"currentevents": "پيشومدل تازه باو",
"currentevents-url": "پروجه:پيشومدل تازه باو",
- "disclaimers": "منكرون",
- "disclaimerpage": "پروجه:منكر بيئن كاروريا",
+ "disclaimers": "تیه پوشکاریا",
+ "disclaimerpage": "پروجه:منكر بيئن کلی",
"edithelp": "هومياری سی ويرايشت",
+ "helppage-top-gethelp": "هومياری",
"mainpage": "سرآسونه",
"mainpage-description": "سرآسونه",
"policy-url": "پروجه:خط و مش",
"portal": "درآسونه کومله یکی",
"portal-url": "پروجه:سرآسونه کومله یکی",
- "privacy": "رهبرد رازداری",
- "privacypage": "پروجه: خط مشی راز واداشتن",
- "badaccess": "خطا :اجازه بئیر",
- "badaccess-group0": "شما اجازه انجوم کاری که حاستیت نارین",
- "badaccess-groups": "ای کاری که شما هاستیته سی کاروریا د {{جمی:$2|گرو|یکی د گرویا}}: $1 مئدود بیه",
- "versionrequired": "یه نسقه د نیازمنیا ویکی رسانه\n$1",
- "versionrequiredtext": "نسقه $1 ویکی مدیا سی وه کار بستن د ای بلگه لازم هئی .\nوه نه بوینیت [[ویجه:نسقه|نسقه بلگه]].",
+ "privacy": "پولتیک رازینه داری",
+ "privacypage": "پروجه: خط مشی رازینه کاری کردن",
+ "badaccess": "خطا :صلاداری کو",
+ "badaccess-group0": "شما صلا انجوم کاری که حاستیت نارین",
+ "badaccess-groups": "ای کاری که شما هاستیته سی کاریاریا د {{جمی:$2|گرو|یکی د گرویا}}: $1 کم بیه",
+ "versionrequired": "یه نسقه د حاستنیا ویکی وارسگر\n$1",
+ "versionrequiredtext": "نسقه $1 ویکی وارسگر سی وه کار گرتن د ای بلگه لازمه.\nوه نه بوینیت [[ویجه:نسقه|نسقه بلگه]].",
"ok": "خوئه",
"pagetitle": "$1 - {{SITENAME}}",
"pagetitle-view-mainpage": "{{SITENAME}}",
"backlinksubtitle": "← $1",
- "retrievedfrom": "بازيافته د\"$1\"",
+ "retrievedfrom": "د نو زنه بیه د\"$1\"",
"youhavenewmessages": "شما داريت $1($2)",
- "youhavenewmessagesfromusers": "{{جمی:$4|شما }} $1 د {{جمی:$3|کارور هنی|$3 کاروریا}}داریتو($2).",
- "youhavenewmessagesmanyusers": "شما $1 د خيلی كاروريا داريت ($2).",
- "newmessageslinkplural": "{{جمی:$1|یه گل پیغوم تازه|999=پیغوم ئل تازه}}",
+ "youhavenewmessagesfromusers": "{{جمی:$4|شما }} $1 د {{جمی:$3|کاریار هنی|$3 کاریاریا}}داریتو($2).",
+ "youhavenewmessagesmanyusers": "شما $1 د فره کاریار داريت ($2).",
+ "newmessageslinkplural": "{{جمی:$1|یه گل پیغوم تازه|999=پیغومیا تازه}}",
"newmessagesdifflinkplural": "آخر {{جمی:$1|آلشت|آلشتیا}}",
"youhavenewmessagesmulti": "شما یه گل پیغوم تازه د $1 داریتو",
"editsection": "ويرايشت",
@@ -257,9 +260,9 @@
"viewsourceold": "سرچشمه نه بوينيت",
"editlink": "ويرايشت",
"viewsourcelink": "سرچشمه نه بوينيت",
- "editsectionhint": "ويرايشت يه بشق:$1",
+ "editsectionhint": "ويرايشت يه گل بهرجا:$1",
"toc": "مینونه یا",
- "showtoc": "نشو دائن",
+ "showtoc": "نشو دئن",
"hidetoc": "قام كردن",
"collapsible-collapse": "جم كردن",
"collapsible-expand": "وا كردن",
@@ -269,21 +272,21 @@
"thisisdeleted": "دیئن یا ورگنين $1?",
"viewdeleted": "دیئن$1?",
"restorelink": "{{جمی:$1|یه گل ویرایشت پاک بیه|$1 ویرایشتیا پاک بیه}}",
- "feedlinks": "خورحو:",
- "feed-invalid": "نوع مشترک بین خورحو نامعتور",
- "feed-unavailable": "خور حونیا د دسرس نئین",
- "site-rss-feed": "خورخو RSS سی $1",
- "site-atom-feed": "خور حون Atom سی $1",
- "page-rss-feed": "خورحو RSS سی «$1»",
- "page-atom-feed": "خور حون Atom سی $1",
+ "feedlinks": "هوال حون:",
+ "feed-invalid": "نوع مشترک بین هوال حون نامعتور",
+ "feed-unavailable": "هوال حونیا د دسرس نئین",
+ "site-rss-feed": "هوال حون RSS سی $1",
+ "site-atom-feed": "هوال حون Atom سی $1",
+ "page-rss-feed": "هوال حون RSS سی «$1»",
+ "page-atom-feed": "هوال حون Atom سی $1",
"feed-atom": "اتم",
"feed-rss": "آر اس اس",
"red-link-title": "$1(بلگه وجود ناره)",
- "sort-descending": "كم بيئن منظم",
- "sort-ascending": "زياد بيئن منظم",
+ "sort-descending": "كم بيئن سرجاخود",
+ "sort-ascending": "زياد بيئن سرجاخود",
"nstab-main": "بلگه",
"nstab-user": "بلگه کاریار",
- "nstab-media": "بلگه رسانه",
+ "nstab-media": "بلگه وارسگر",
"nstab-special": "بلگيا ويجه",
"nstab-project": "بلگه پروجه",
"nstab-image": "جانیا",
@@ -291,41 +294,44 @@
"nstab-template": "چوئه",
"nstab-help": "بلگه هومياری",
"nstab-category": "دسه",
- "nosuchaction": "چنو كاری وجود ناره",
- "nosuchactiontext": "کاری که وا یو آر ال مشقص بیه معتور نئ.\nشایت شما یو آر ال نه دروس ننشتیته، یا یه گل هوم پیوند نادرست وارد بیه.\nوه شاید وه یه گل باگ د نرم افزار استفاده بیه وا {{نوم مالگه}} هشاره داشتوه.",
- "nosuchspecialpage": "چنو بلگه خاصی وجود ناره",
+ "nosuchaction": "چنی کنشتگری وجود ناره",
+ "nosuchactiontext": "کاری که وا یو آر ال مشقص بیه معتور نئ.\nشایت شما یو آر ال نه دروس ننشتیته، یا یه گل هوم پیوند نادرست وارد بیه.\nوه شاید وه یه گل سیسریک د نرم افزار وه کار گرته بیه وا {{نوم مالگه}} هشاره داشتوه.",
+ "nosuchspecialpage": "چنی بلگه خاصی وجود ناره",
"nospecialpagetext": "<strong>شما سی یه گل بلگه نامعتور درحاست داشتیته.</strong>\nیه گل نوم گه سی اعتوار بلگه یا بوئه د [[ویجه:بلگه یا ویجه|{{رقم:بلگه یا ویجه}}]] پیدا با.",
"error": "خطا",
"databaseerror": "خطا د جاگه دونسمنيا",
- "databaseerror-text": "یه خطا جست کردن د پایگا داده پیش اوما.یه ممکنه یه در کار ونن د نرم اوزار پیش بیاره",
- "databaseerror-textcl": "خطاجست گرتن پايگاه دونسمنيا پيشومد كرده",
+ "databaseerror-text": "یه خطا جست کردن د رسینه جا پیش اوما.یه ممکنه یه در کار ونن د نرم اوزار پیش بیاره",
+ "databaseerror-textcl": "خطاجست گرتن رسینه جا دونسمنيا پيشومد كرده",
"databaseerror-query": "نوم گشتن: $1",
- "databaseerror-function": "تابع:$1",
+ "databaseerror-function": "آلشت ون:$1",
"databaseerror-error": "خطا: $1",
- "laggedslavemode": "زنهار:بلگه شايت شومل روزامديا تازه باو نبوئه",
+ "laggedslavemode": "زنهار:بلگه شايت د ور گرینه وه هنگوم سازی تازه باو نبوئه",
"readonly": "جاگه دونسمنيا بسه بيه",
- "enterlockreason": "دلیل قلف کردن نه بنیست،یه وختی سی وا کردن قلف د ویر داشتویت.",
- "readonlytext": "پایگا دونسمنیا ایسه سی دئن ورودی یا تازه یا آلشتگریا هنی قلف بیه،شایت سی منن معمولی پایگا دونسمنی نها وه که ورئرده وه حالت عادیش.\nمدیری که ونه قلف کرده ونه گوته:$1",
- "missing-article": "پاگا دونمسمنی نتونه بلگه ای با پیدا بکه بجوره.که نومش $1 و $2 هئ.\nمعمولند یه سی یه که فرخ ویرگار رئته دش بیه پاک بیه.",
- "missingarticle-rev": "(دوواره ديئن#: $1)",
+ "enterlockreason": "دلیل قلف کردن نه بنیست،یه گاتی سی وا کردن قلف د ویر داشتویت.",
+ "readonlytext": "رسینه جا ایسه سی دئن ورودی یا تازه یا آلشتگریا هنی قلف بیه،شایت سی منن معمولی رسینه جانها وه که ورئرده وه حال و بال عادیش.\nدیوونداری که ونه قلف کرده ونه گوته:$1",
+ "missing-article": "رسینه جا نتونه بلگه ای با پیدا بکه بجوره.که نومش $1 و $2 هئ.\nمعمولند یه سی یه که فرخ ویرگار رئته دش بیه پاک بیه.",
+ "missingarticle-rev": "(وانئری#: $1)",
"missingarticle-diff": "(فرخ: $1، $2)",
- "readonly_lag": "ای پاگا دونسمنی قلف بیه تا اوسه که سرور پایگا دونسمنیا وه مینجاون برسه.",
+ "readonly_lag": "ای رسینه جا قلف بیه تا اوسه که سرور رسینه جا وه مینجاون برسه.",
"internalerror": "خطا داخلی",
"internalerror_info": "خطا داخلی:$1",
- "filecopyerror": "نبوئه فایل $1 د $2 کپی بوئه",
- "filerenameerror": "نبوئه فایل $1 د $2 نوم آلشت بوئه",
- "filedeleteerror": "نبوئه فایل $1 پاک بوئه",
+ "internalerror-fatal-exception": "تی داشتن مرگدار د جور \"$1\"",
+ "filecopyerror": "نبوئه جانیا $1 د $2 ورداشته بوئه",
+ "filerenameerror": "نبوئه جانیا $1 د $2 نوم آلشت بوئه",
+ "filedeleteerror": "نبوئه جانیا $1 پاکسا بوئه",
"directorycreateerror": "نبوئه سردسه $1 راس بوئه.",
- "filenotfound": "نتونیت فایل $1 پیدا بکید",
+ "directoryreadonlyerror": "فقط موئه نشونگه \"$1\" بحونی.",
+ "directorynotreadableerror": "نشونگه \"$1\" حننی نئ.",
+ "filenotfound": "نتونیت جانیا $1 نه پیدا بکید",
"unexpected": "ارزایشت ناحاسته: \"$1\"=\"$2\".",
- "formerror": "خطا:نبوئه فرم وه مو بئيت",
+ "formerror": "خطا:نبوئه نوم بلگه وه مو بئيت",
"badarticleerror": "ای انجوم دئنی د ای بلگه انجوم نگره.",
- "cannotdelete": "بلگه یا فایل$1 نبوئه پاک با.\nشایت یه ایسه وا کسی هنی پاک بیه.",
- "cannotdelete-title": "نبوئه بلگه $1 حذف بو",
- "delete-hook-aborted": "پاک بیئن وا قلاو جلوگری بیه.\nهیچ توضیئ سیش نئ.",
- "no-null-revision": "سی بلگه$1 دوواره خنثی دیئن راس بکید",
- "badtitle": "موضو گن",
- "badtitletext": "عنوان بلگه حاسته بیه معتور نی،یا یه گل مئن زونی یا مئن ویکی عنوان غلطه.\nیه شایت شومل یکی با یا بیشتر کاراکتریا نبوئه سی ای موضوعیا استفاده بوئن",
+ "cannotdelete": "بلگه یا جانیا $1 نبوئه پاکسا با.\nشایت یه ایسه وا کسی هنی پاکسابیه.",
+ "cannotdelete-title": "نبوئه بلگه $1 پاکسا بو",
+ "delete-hook-aborted": "پاکسا بیئن وا قلاو نهاگری بیه.\nهیچ توضیئ سیش نئ.",
+ "no-null-revision": "سی بلگه$1 وانئری خنثی نه راس بکید",
+ "badtitle": "داسون گن",
+ "badtitletext": "داسون بلگه حاسته بیه معتور نی،یا یه گل مئن زونی یا مئن ویکی داسون غلطه.\nیه شایت د ور گرته یکی با یا بیشتر کاراکتریا نبوئه سی ای داسونیا وه کار گرته بوئن",
"perfcached": "رسینه یا نهایی د ویرگه نهونی موکشت بینه و شایت هنی وه هنگوم سازی نبینه.بیشترونه {{جمی:$4|یه گل نتیجه|$4 یه گل نتیجه}} د ویرگه نهونی هان د دسرس.",
"perfcachedts": "رسینه یا نهایی د ویرگه نهونی موکشت بینه و شایت هنی وه هنگوم سازی نبینه.بیشترونه {{جمی:$4|یه گل نتیجه|$4 یه گل نتیجه}} د ویرگه نهونی هان د دسرس.",
"querypage-no-updates": "نبوئه ای بلگه وه هنگوم سازی با.\nرسینه یا ایچه تازه نبیه.",
@@ -338,10 +344,11 @@
"viewyourtext": "شما تونیت سرچشمه ویرایشتیا تونه ای د بلگه بوینیت و دشو ورداریت",
"protectedinterface": "ای بلگه سی نرم افزار د ای ویکی نیسسه آماده می که، و د .\nسی اضاف کردن یا آلشت دئن د همه ویکی یا لطفا [//translatewiki.net/ translatewiki.net] نه به کار بؤریت، ولات نشین کنی پروجه ویکی وارسگر.",
"editinginterface": "<strong>زئنار دئن:</strong> شما داریت بلگه ای نه که سی بیه ویرایشت می کید.",
- "cascadeprotected": "ای بلگه د ویرایشت محافظت بیه سی یه که {{جمی:$1|وه بلگه یه |ونو بلگه یان}} که ها دش د :\n$2",
+ "translateinterface": "سی اضاف کردن یا آلشت دئن والرسته یا د همه ویکی یا،لطف بکید[//translatewiki.net/ translatewiki.net] وه کار بئیریت، پروجه ولات دیاری کردن ویکی وارسگر",
+ "cascadeprotected": "ای بلگه د ویرایشت پر و پیم بیه سی یه که {{جمی:$1|وه بلگه یه |ونو بلگه یان}} که ها دش د :\n$2",
"namespaceprotected": "شما حقی سی ویرایشت بلگه یایی که هان د نومجا <strong>$1</strong> ناریت.",
"customcssprotected": "شما سی ویرایشت ای بلگه سی اس اس اجازه ناریت سی یه که میزونکاری دونسمنیا شخصی یه کاریار هنی ها د وه.",
- "customjsprotected": "شما سی ویرایشت ای بلگه جاوا اسکریپت اجازه ناریت سی یه که میزونکاری دونسمنیا شخصی یه کاریار هنی ها د وه.",
+ "customjsprotected": "شما سی ویرایشت ای بلگه جاوا اسکریپت صلا ناریت سی یه که میزونکاری دونسمنیا شخصی یه کاریار هنی ها د وه.",
"mycustomcssprotected": "شما حق ناریت ای بلگه سی اس اس نه ویرایشت بکید",
"mycustomjsprotected": "شما حق ناریت ای بلگه جاوا اسکریپت نه ویرایشت بکید",
"myprivateinfoprotected": "شما حق ناریت دونسمنیا خصوصی نه ویرایشت بکید",
@@ -353,168 +360,171 @@
"invalidtitle-unknownnamespace": "نوم نامعتور سی شماره نومجا ناشناس $1 و نیسه \"$2\"",
"exception-nologin": "نبوئه وارد بوئيد",
"exception-nologin-text": "شما وارد [[ویجه:وامین اومائن کاریار|وامین اومائن]] بوئیت سی یه تونستویت که د ای بلگه یا کنشت دسرسی داشتویت.",
- "exception-nologin-text-manual": "خواهشمنیدم که $1 تونسه بوئه د ای بلگه دسرسی داشتوه یا کاری انجوم بیئه.",
- "virus-badscanner": "سازواره گن:ویروس ناشناس:<em>$1</em>",
+ "exception-nologin-text-manual": "دتو تقاضا میکیم که $1 تونسه بوئه د ای بلگه دسرسی داشتوه یا کاری انجوم بیئه.",
+ "virus-badscanner": "سازواره گن:ویروس نادیار:<em>$1</em>",
"virus-scanfailed": "زل بیئن شکست حرد($1)",
- "virus-unknownscanner": "ويروس كش ناآشگار",
+ "virus-unknownscanner": "ويروس كش نادیار",
"logouttext": "<strong>شما هنی نریتته وه در.</strong>\n\nد ویرتو با که ویرگه نهو انجومیارتو نه پاکسا نکیت، سی یه پاره ای د بلگه یا ممکنه جوری نشو دئه بوئن چی یه که منیستی شما هنی هایین وامین.",
"welcomeuser": "خوش اومايت،$1!",
"welcomecreation-msg": "حساوتو دروس بیه.\nد ویرتو نروئه که{{نوم دیارگه}} [[Special:Preferences|preferences]] خوتونه آلشت بکیت",
"yourname": "نوم کاریاری:",
- "userlogin-yourname": "نوم كاروری",
+ "userlogin-yourname": "نوم کاریاری",
"userlogin-yourname-ph": "نوم کاریاری تو نه وارد بكيد",
- "createacct-another-username-ph": "نوم كاروری ته وارد كو",
- "yourpassword": "پاسورد:",
- "userlogin-yourpassword": "رمز",
- "userlogin-yourpassword-ph": "رمز بزه",
- "createacct-yourpassword-ph": "رمزه بزه",
- "yourpasswordagain": "دوواره رمز بزه",
- "createacct-yourpasswordagain": "رمز محكم كو",
- "createacct-yourpasswordagain-ph": "دوواره رمز بزه",
- "remembermypassword": "اومائن وا مئن منه د ای مرورگر د ویر داشتو(سی بیشترونه$1{{جمی:$1|روز|روزیا}})",
- "userlogin-remembermypassword": "منه مئن سيستم وادار",
- "userlogin-signwithsecure": "د وصل بيئن امن استفاده كو",
+ "createacct-another-username-ph": "نوم کاریاری ته وارد كو",
+ "yourpassword": "رازینه گواردن:",
+ "userlogin-yourpassword": "رازینه گواردن",
+ "userlogin-yourpassword-ph": "رازینه گواردن نه بزه",
+ "createacct-yourpassword-ph": "رازینه گواردن نه بزه",
+ "yourpasswordagain": "دوواره رازینه گواردن نه بزه",
+ "createacct-yourpasswordagain": "رازینه گواردن نه پشت راس كو",
+ "createacct-yourpasswordagain-ph": "دوواره رازینه گواردن نه بزه",
+ "remembermypassword": "اومائن وا مین منه د ای دوارته نیئر د ویر داشتو(سی بیشترونه$1{{جمی:$1|روز|روزیا}})",
+ "userlogin-remembermypassword": "منه مین سامونه وادار",
+ "userlogin-signwithsecure": "د وصل بيئن امن وه کار بیئر",
"yourdomainname": "پوشگیر شما:",
- "password-change-forbidden": "شما نتونید پاسوردیانه د ای ویکی آلشت بکید",
- "externaldberror": "اشتوایی د ارتواط وا رسینه گا پیش اومائه یا ینه که شما اجازه وه هنگوم سازی حساو خارجی تونه ناریت.",
- "login": "اومائن",
+ "password-change-forbidden": "شما نتونید رازینه گواردتون خوتونه د ای ویکی آلشت بکید",
+ "externaldberror": "اشتوایی د ارتواط وا رسینه گا پیش اومائه یا ینه که شما صلا وه هنگوم سازی حساو خارجی تونه ناریت.",
+ "login": "وا مین اومائن",
"nav-login-createaccount": " اومائن د سيستم/راس كردن حساو",
"userlogin": " اومائن د سيستم/راس كردن حساو",
- "userloginnocreate": "اومائن",
- "logout": "رئتن",
- "userlogout": "د سيستم دراومائن",
- "notloggedin": "نبوئه وارد بوئيد",
+ "userloginnocreate": "وا مین اومائن",
+ "logout": "د سامونه دراومائن",
+ "userlogout": "د سامونه دراومائن",
+ "notloggedin": "نبوئه بیاییت وامین",
"userlogin-noaccount": "یه گل حساو ناریت؟",
"userlogin-joinproject": "وصل بوييت {{SITENAME}}",
- "nologin": "حساو كاروری ناريت؟$1",
+ "nologin": "حساو کاریاری ناريت؟$1",
"nologinlink": "يه گل حساو راست بكيد",
"createaccount": "حساو راست بكيد",
"gotaccount": "ایسنی حساو کاروری داریتو؟$1",
- "gotaccountlink": "اومائن",
+ "gotaccountlink": "وا مین اومائن",
"userlogin-resetlink": "جزییات وامین اومائن تونه د ویر بردیته",
- "userlogin-resetpassword-link": "پاسورد د ویرتو رئته؟",
+ "userlogin-resetpassword-link": "رازینه گواردن د ویرتو رئته؟",
"userlogin-helplink2": "هومیاری وا مین اومائن",
- "createacct-emailrequired": "نشونی ايميل",
- "createacct-emailoptional": "نشونی ايميل",
- "createacct-email-ph": "نوم نشون ايميلتونه وارد بكيت",
- "createacct-another-email-ph": "يه گل ايميل وارد بكيت",
- "createaccountmail": "د یه گل پاسورد موقتیه بختکی استفاده بکید و ونه سی یه گل نشونی ایمیل ویجه بفرسنیت",
+ "userlogin-loggedin": "شما ایسه چی {{جنس:$1|$1}} اومایته وا مین.\nد نوم بلگه هاری سی وا مین اومائن چی یه گل کاریار هنی وه کار بیئرتو.",
+ "userlogin-createanother": "يه گل حساوهنی راست بكيد",
+ "createacct-emailrequired": "تیرنشون انجومانامه",
+ "createacct-emailoptional": "تیرنشون انجومانامه",
+ "createacct-email-ph": "تیرنشون انجومانامه تونه وارد بكيت",
+ "createacct-another-email-ph": "يه گل انجومانامه وارد بكيت",
+ "createaccountmail": "د یه گل رازینه گواردن موقتیه بختکی وه کار بیئریت و ونه سی یه گل نشونی انجومانامه ویجه کل بکیت",
"createacct-realname": "نوم راستكی(مژبوری نيئ)",
"createaccountreason": "دليل",
"createacct-reason": "دليل",
"createacct-reason-ph": "سی چی شما داريتو يه گل حساو هنی راس می كيد",
"createacct-captcha": "وارسی امنيت دار بين",
- "createacct-imgcaptcha-ph": "متنی نه كه د وارو ميئنيت وارد بكيد",
+ "createacct-imgcaptcha-ph": "نیسسه نه كه د وارو ميئنيت وارد بكيد",
"createacct-submit": "حساو خوتونه راس بكيد",
"createacct-another-submit": "يه گل حساوهنی راست بكيد",
"createacct-benefit-heading": "{{نوم مالگه}} وه دس خلکی چی شما راس بیه.",
"createacct-benefit-body1": "{{جمی:$1|ویرایشت|ویرایشتیا}}",
"createacct-benefit-body2": "{{جمی:$1|بلگه|بلگه یا}}",
"createacct-benefit-body3": "تازه{{جمی:$1|هومیار|هومیارا}}",
- "badretype": "پاسوردی که شما دئیته مطاوقت ناره",
- "userexists": "کارور نوم که وارد بیه د ایسه استفاده بوئه.\nلطف بکید یه گل نوم هنی انتخاو بکید",
+ "badretype": "رازینه گواردنی که شما دئیته مطاوقت ناره",
+ "userexists": "کاریارنوم که وارد بیه د ایسه وه کار گرته بوئه.\nلطف بکید یه گل نوم هنی انتخاو بکید",
"loginerror": "خطا اومائن د سيستم",
"createacct-error": "خطا راس كردن حساو",
"createaccounterror": "نبوئه حساو راس بكيد:$1",
- "nocookiesnew": "حساو کاروری راس بی،اما شما وامئن نیامایئته.{{نوم مالگه}} د کوکیا سی اومائن د سیستم کاروریا استفاده می که.کوکیا شما د کار افتائه.لطفن وا کارشو بونیت، اوسه وا نوم کاروری تازه و پسورد هنی بیایت وا مئن.",
- "nocookieslogin": "{{نوم مالگه}} د کوکیا سی وامئن اومائن کاروریا استفاده می که. کوکیا شما د کار افتائه.\nلطف بکید د کارشو بونیت و دوواره تلاش بکید.",
- "nocookiesfornew": "حساو کاروری راس نبیه، سی یه ایما نتونیم سرچشمه ونه مئکم بکیم.\nمطمئن بوئیت که کوکیا فعال بینه، ای بلگه نه د نو سوار بکید و د نو تلاش بکید.",
+ "nocookiesnew": "حساو کاریاری راس بی،اما شما وامئن نیامایئته.{{نوم مالگه}} د کوکیا سی اومائن د سیستم کاریاریا وه کار میئره .کوکیا شما د کار افتائه.لطفن وا کارشو بونیت، اوسه وا نوم کاریاری تازه و رازینه گواردن هنی بیایت وا مئن.",
+ "nocookieslogin": "{{نوم مالگه}} د کوکیا سی وامئن اومائن کاریاریا وه کار میئره. کوکیا شما د کار افتائه.\nلطف بکید د کارشو بونیت و دوواره تلاش بکید.",
+ "nocookiesfornew": "حساو کاریاری راس نبیه، سی یه ایما نتونیم سرچشمه ونه مئکم بکیم.\nمطمئن بوئیت که کوکیا کنشتگر بینه، ای بلگه نه د نو سوار بکید و د نو تلاش بکید.",
"nocookiesforlogin": "{{int:nocookieslogin}}",
- "noname": "شما یه گل نوم کاروری خو ناریت",
- "loginsuccesstitle": "اومائن د سيستم موفق بی",
- "loginsuccess": "شما ایسه وارد بیته {{SITENAME}} د دعنوان \"$1\".'",
+ "noname": "شما یه گل نوم کاریاری خو ناریت",
+ "loginsuccesstitle": "اومائن د سامونه موفق بی",
+ "loginsuccess": "شما ایسه وارد بیته {{SITENAME}} د چی\"$1\".'",
"nosuchuser": "چنی کاریاری و نوم \"$1\" نئیش.\nنوم کاریاری وه حرفیا حساس هئ.\nروشت نیسنن تونه وارسی بکید،یا [[ویجه:وامین اومائن کاریار/ثوت نام کردن|یه گل حساو تازه راس بکید]].",
- "nosuchusershort": "چنو کاروری وا ای نوم $1 نی ئیش.\nنیسنن تونه دوواره نئری بکیتو",
- "nouserspecified": "شما باید یه نوم کارور اختصاص بئیتو",
- "login-userblocked": "کارور قلف بیه.وامین اومائن اجازه نی ئن",
- "wrongpassword": "پاسورد غلط وارد بیه.\nهنی تلاش بکید",
- "wrongpasswordempty": "پاسوردی که دئیت حالیه.د نؤ تلاش بکیت",
- "passwordtooshort": "پاسورد با حداقل {{PLURAL:$1|1 character|$1 characters}} با",
- "password-name-match": "پاسوردتو با د نوم کاروریتو فرخ داشتوه",
- "password-login-forbidden": "وه کار گرتن ای پاسوردو نوم کاروری ممنو بیه.",
- "mailmypassword": "د نۈ وارد كردن رمز",
- "passwordremindertitle": "پاسورد موقت تازه سی {{SITENAME}}",
+ "nosuchusershort": "چنو کاریاری وا ای نوم $1 نی ئیش.\nنیسنن تونه دوواره نئری بکیتو",
+ "nouserspecified": "شما باید یه نوم کاریاری تیاری بکیت",
+ "login-userblocked": "کاریار قلف بیه.وامین اومائن اجازه نی ئن",
+ "wrongpassword": "رازینه گواردن غلط وارد بیه.\nهنی تلاش بکید",
+ "wrongpasswordempty": "رازینه گواردنی که دئیت حالیه.د نؤ تلاش بکیت",
+ "passwordtooshort": "رازینه گواردن با حداقل {{PLURAL:$1|1 character|$1 characters}} با",
+ "passwordtoolong": "رازینه گواردن نواس بیشتر د {{PLURAL:$1|1 character|$1 characters}} با.",
+ "password-name-match": "رازینه گواردنتو با د نوم کاریاری فرخ داشتوه",
+ "password-login-forbidden": "وه کار گرتن ای پاسوردو نوم کاریاری قدقن بیه.",
+ "mailmypassword": "د نۈ وارد كردن رازینه گواردن",
+ "passwordremindertitle": "رازینه گواردن موقت تازه سی {{SITENAME}}",
"passwordremindertext": "یه نفر(شات خوتو،د تیرنشون آی پی $1) یه گل رازینه گواردن هنی سی {{نوم دیارگه}}($4) حاسته.یه گل رازینه گواردن موقتی سی کاریاری\"$2\" دروس بیه و د \"$3\" جاگر بیه. ار قصدتو یه بیه،شما واس ایسه روئیت وامین و یه گل رازینه گواردن هنی انتخاو بکید.\nرازینه گورادن موقتی د {{جمی:$5|یه رو|$5 رو}} تموم بوئه.\n\nار یه نفر هنی یه حاست داشتوئه،یا ار رازینه گورادن تونه د ویرتو اوما، و ار نحاستیت ونه آلشت بکیت، شما شایت د ای پیغوم تیه پوش بکیت و بحایت د وه کار بسن رازینه گواردن دماترتو دماداری بکیت.",
- "noemail": "هیچ نشونی ایمیلی سی کارور $1 ضفط نبیه.",
- "noemailcreate": "شما باید یه نشونی نومه معتور فراهم بکید",
- "passwordsent": "یه گل پاسورد هنی سی تیرنشون انجانامه ای که \"$1\" واش ثوت نام کرده بی کل بیه.\nخواهش میکیم هنی رویئت وامین و اوسه بئریتش.",
+ "noemail": "هیچ تیرنشون انجومانامه ای سی کاریار $1 ضفط نبیه.",
+ "noemailcreate": "شما باید یه تیرنشون انجومانامه خو فراهم بکید",
+ "passwordsent": "یه گل رازینه گواردن هنی سی تیرنشون انجومانامه ای که \"$1\" واش ثوت نام کرده بی کل بیه.\nخواهش میکیم هنی رویئت وامین و اوسه بئریتش.",
"blocked-mailpassword": "نها آی پی شما سی ویرایشت گرته بیه، و",
"eauthentsent": "یه گل انجومانامه پشت راس کردنی د یه گل تیرنشون ویجه کل بیه.\nدما یه که یه گل انجومانامه هنی د حساو کل بوئه، شما واس دما رئنمونی نه د انجومانامه بئریت، سی یه که حساو شما راستکی پشت راست بوئه.",
- "throttled-mailpassword": "یه گل پسورد دواره زنه بیه ایسه کل بیه، د آخری {{جمی:$1|ساعت|$1 ساعتیا}}.\nسی نهاگری د اذیت دئن،فقط یه گل رازینه گواردن د انجومانامه دواره زنه بیه د هر {{جمی:$1|ساعت|$1 ساعتیا}} کل بیه.",
+ "throttled-mailpassword": "یه گل رازینه گواردن دواره زنه بیه ایسه کل بیه، د آخری {{جمی:$1|ساعت|$1 ساعتیا}}.\nسی نهاگری د اذیت دئن،فقط یه گل رازینه گواردن د انجومانامه دواره زنه بیه د هر {{جمی:$1|ساعت|$1 ساعتیا}} کل بیه.",
"mailerror": "خطا داره کل موئه:$1",
- "acct_creation_throttle_hit": "سیل کریا ای ویکی د تیرنشون آی پی شما استفاده کردنه د روز دمایی {{جمی:$1|1 حساو|$1 حساویا}} نه دروس کردنه، و وه د بیشترونه صلا دئن د ای دوره گاتی انجوم بیه.\nد نتیجه، سیل کریایی که د ای تیرنشون آی پی استفاده کردنه نمی تونن حساویا بیشتری د ای گات دروس بکن.",
- "emailauthenticated": "نشونی انجومانامه تونه د $2 سی 3$ مئکم بیه.",
+ "acct_creation_throttle_hit": "سیل کریا ای ویکی تیرنشون آی پی شما وه کار گرتنه د روز دمایی {{جمی:$1|1 حساو|$1 حساویا}} نه دروس کردنه، و وه د بیشترونه صلا دئن د ای دوره گاتی انجوم بیه.\nد نتیجه، سیل کریایی که د ای تیرنشون آی پی وه کار گرتنه نمی تونن حساویا بیشتری د ای گات دروس بکن.",
+ "emailauthenticated": "تیرنشون انجومانامه تونه د $2 سی 3$ مئکم بیه.",
"emailnotauthenticated": "تیرنشون انجومانامه شما تا ایسه پشت راسگری نبیه.\nهنی انجومانامه ای سی چیا ری به نها کل نبیه.",
"noemailprefs": "یه گل تیرنشون انجومانامه د الویتیاتو سی یه که ای ویجه گیا کار بکن انتخاو بکیت.",
- "emailconfirmlink": "نشونی ايملتو نه محكم بكيد",
+ "emailconfirmlink": "پشت راس کردن تیرنشون انجومانامه",
"invalidemailaddress": "تیرنشون انجومانامه حاستنی نئ شکل وه چوئه خوئی ناره.\nلطفن یه گل تیرنشون چوئه دار وارد بکیت یا ای رشنه گه نه حالی بنیت.",
- "cannotchangeemail": "نشونی ایمیل حساو نتونه د ای ویکی آلشت بوئه.",
- "emaildisabled": "ای مالگه نتونه ایمیل بفرسنه",
+ "cannotchangeemail": "تیرنشون انجومانامه حساو نتونه د ای ویکی آلشت بوئه.",
+ "emaildisabled": "ای مالگه نتونه انجومانامه کل نمی که",
"accountcreated": "حساو راس بی",
"accountcreatedtext": "حساو کاریاری سی [[{{ns:کاریار}}:$1|$1]] ([[{{ns:کاریار چک چنه}}:$1|چک چنه]]) دروس بیه.",
"createaccount-title": "حساو راس کرده سی {{SITENAME}}",
- "createaccount-text": "یه نفر وا تیرنشون انجونامه تو یه گل حساو راس کرده{{نوم دیارگه}} ($4) نومشه نیائه\"$2\", با پاسورد \"$3\".\nشما همی ایسه باید روئیت وامین و پاسوردتونه آلشت بکیت.\n\nار شما ای پیغوم نه وش التفات نکیت، د راس بیین ای حساو خطا دروس موئه.",
+ "createaccount-text": "یه نفر وا تیرنشون انجونامه تو یه گل حساو راس کرده{{نوم دیارگه}} ($4) نومشه نیائه\"$2\", با پاسورد \"$3\".\nشما همی ایسه باید روئیت وامین و رازینه گواردتونه آلشت بکیت.\n\nار شما ای پیغوم نه وش التفات نکیت، د راس بیین ای حساو خطا دروس موئه.",
"login-throttled": "شما ایسنی فره سی وامین اومائن تلاش کردیته.\n$1 لطفن سی تلاش هنی صبر بکید",
"login-abort-generic": "اومائن وامین تو شکست حرد-شکست حرده",
"login-migrated-generic": "حساو کاریاری شما جا وه جا بیه، و نوم کاریاری شما دیه د ای ویکی نیئش.",
"loginlanguagelabel": "زون:$1",
"suspicious-userlogout": "درحاست وه در رئتن شما انکار بیه سی یه کل وه نظر میا که د یه گل دووارته نیئر گن یا یه گل پروکسی که ها د ویرگه نهو کل بیه",
- "createacct-another-realname-tip": "نوم راستکی دل به حائه.\nار شما وه نه نهااماییه بکیت، یه سی هوم نسبت دئن وه کاریار سی کاریاش استفاده بوئه.",
+ "createacct-another-realname-tip": "نوم راستکی دل به حائه.\nار شما وه نه نهااماییه بکیت، یه سی هوم نسبت دئن وه کاریار سی کاریاش وه کار گرته بوئه.",
"pt-login": "وا مین اومائن",
"pt-login-button": "وا مین اومائن",
- "pt-createaccount": "يه گل حساو راست بكيد",
- "pt-userlogout": "د سيستم دراومائن",
- "php-mail-error-unknown": "خطا ناشناس مئن تاوع PHP's mail()",
- "user-mail-no-addy": "سی کل کردن ایمیل بی نشونه ایمیل صورت گرته",
- "user-mail-no-body": "سی کل کردن ایمیل وا مینونه حالی یا کؤچک بیئن سی دلیل غیر علقمنی تلاش بکید.",
- "changepassword": "پاسورد نه آلشت بكيت",
- "resetpass_announce": "سی تموم کردن وا مین اومائن، شما باید یه گل پاسورد هنی وارد بکیتو.",
+ "pt-createaccount": "يه گل حساو راس بكيد",
+ "pt-userlogout": "د سامونه دراومائن",
+ "php-mail-error-unknown": "خطا نادیار مین آلشت ون PHP's mail()",
+ "user-mail-no-addy": "سی کل کردن انجومانامه د یه گل انجومانامه بی تیرنشون کنشتگری بیه",
+ "user-mail-no-body": "سی کل کردن انجومانامه وا مینونه حالی یا کؤچک بیئن سی دلیل غیر علقمنی تلاش بکید.",
+ "changepassword": "رازینه گواردن نه آلشت بكيت",
+ "resetpass_announce": "سی تموم کردن وا مین اومائن، شما باید یه گل رازینه گواردن هنی وارد بکیتو.",
"resetpass_text": "<!-- یه گل نیسسه ایچه اضاف بکیت -->",
- "resetpass_header": "پاسورد حساوتونه آلشت بکید",
- "oldpassword": "پاسورد قدیمی:",
- "newpassword": "پاسورد تازه:",
- "retypenew": "رمز تازه نه دوواره بنیسید:",
- "resetpass_submit": "پاسور بنیت و وامین بیایت",
- "changepassword-success": "پاسورد شما وا موفقیت آلشت بی",
+ "resetpass_header": "رازینه گواردن حساوتونه آلشت بکید",
+ "oldpassword": "رازینه گواردن قدیمی:",
+ "newpassword": "رازینه گواردن تازه:",
+ "retypenew": "رازینه گواردن تازه نه دوواره انجومیارنیسی :",
+ "resetpass_submit": "رازینه گواردن بنیت و وامین بیایت",
+ "changepassword-success": "رازینه گواردن شما د خوئی آلشت بی",
"changepassword-throttled": "شما ایسنی فره سی وامین اومائن تلاش کردیته.\n$1 لطفن سی تلاش هنی صبر بکید",
- "resetpass_forbidden": "پاسوردیا نتونن آلشت بوئن",
- "resetpass-no-info": "شما با بیایت د سیستم تا د ای بلگه دسرسی داشتویت",
- "resetpass-submit-loggedin": "پاسورد نه آلشت بكيت",
+ "resetpass_forbidden": "رازینه گواردناتون نتونن آلشت بوئن",
+ "resetpass-no-info": "شما با بیایت د سامونه تا د ای بلگه دسرسی داشتویت",
+ "resetpass-submit-loggedin": "رازینه گواردن نه آلشت بكيت",
"resetpass-submit-cancel": "انجوم شیوسن",
"resetpass-wrong-oldpass": "رازینه گواردن تازه یا موقتی نامعتور.\nشات شما ایسنی یا رازینه گواردن خوتونه د خوئی آلشت دئیته یا یه گل رازینه گواردن موقت هنی درحاست دئیته.",
"resetpass-recycled": "لطفن رازینه گواردن خوتونه سی چیا تر د رازینه گواردن ایسنی د نو زنه بکیت",
"resetpass-temp-emailed": "شما وا یه گل رازینه موقتی که انجوما گر بیه اومایته وامین.\nسی تموم کردن اومائن وامین، یه گل رازینه گواردن هنی د ایچه جاگر بکیت.",
- "resetpass-temp-password": "رمز موقت:",
+ "resetpass-temp-password": "رازینه گواردن موقت:",
"resetpass-abort-generic": "آلشت دئن رازینه گواردن وا یه گل فره پوش خرو بیه.",
"resetpass-expired": "رازینه گواردن شما منقضی بیه. لطفن یه گل رازینه گواردن هنی سی وامین اومائن جاگری بکیت.",
"resetpass-expired-soft": "رازینه گواردن شما منقضی بیه و واس د نو زنه با. لطفن یه گل رازینه هنی انتخاو بکیت، یا سی د نو زنه کردن د نهاتر د ایچه \"{{int:resetpass-submit-cancel}}\" بپورنیت.",
- "resetpass-validity-soft": "زازینه گواردتون تو معتور نئ:$1\n\nلطفن یه گل رازینه گواردن هنی انتخاو بکیت، یا ری ایچه \"{{int:resetpass-submit-cancel}}\" سی د نو زنه کردن وه د نهاتر بپورنیت.",
- "passwordreset": "د نۈ وارد كردن رمز",
+ "resetpass-validity-soft": "رازینه گواردتون تو معتور نئ:$1\n\nلطفن یه گل رازینه گواردن هنی انتخاو بکیت، یا ری ایچه \"{{int:resetpass-submit-cancel}}\" سی د نو زنه کردن وه د نهاتر بپورنیت.",
+ "passwordreset": "د نۈ وارد كردن رازینه گواردن",
"passwordreset-text-one": "ای نوم بلگه نه سی گرتن یه گل رازینه گواردن موقتی وا انجومانامه پر بکیت.",
"passwordreset-text-many": "{{جمی:$1|یه گل د رشنه گه یا نه سی یه که رازینه گواردن موقتی وا انجومانامه گرته بوئه پر بکیت}}",
- "passwordreset-legend": "د نۈ وارد كردن رمز",
- "passwordreset-disabled": "نو کرد پاسورد د ای ویکی غیرفعال بیه.",
- "passwordreset-emaildisabled": "چی یا هنی ایمیل د ای ویکی غیرفعال بیه.",
- "passwordreset-username": "نوم كاروری:",
+ "passwordreset-legend": "د نۈ وارد كردن رازینه گواردن",
+ "passwordreset-disabled": "نو کرد رازینه گواردن د ای ویکی ناکشتگر بیه.",
+ "passwordreset-emaildisabled": "چی یا هنی انجومانامه د ای ویکی ناکشتگر بیه.",
+ "passwordreset-username": "نوم کاریاری:",
"passwordreset-domain": "پوشگیر",
- "passwordreset-capture": "ایمیل نتیجه نه بوینیتو؟",
- "passwordreset-capture-help": "ار شما ای جعوه نه وارسی بکید. ایمیل و خوئی اوسه که سی کارور کل بیه بوئه بوینیتش.",
- "passwordreset-email": "نشونی ايميل",
+ "passwordreset-capture": "انجومانامه نتیجه نه بوینیتو؟",
+ "passwordreset-capture-help": "ار شما ای جعوه نه وارسی بکید. انجومانامه و خوئی اوسه که سی کاریار کل بیه بوئه بوینیتش.",
+ "passwordreset-email": "تیرنشون انجومانامه",
"passwordreset-emailtitle": "جزئیات حساو ها د {{نوم مالگه}}",
"passwordreset-emailtext-ip": "یه کسی(شات خوتو، وا تیرنشون آی پی $1) سی د نو زنه کردن رازینه گواردن تو د {{SITENAME}} درحاست کرده($4).\nسی کاریار «$2» یه گل رازینه گواردن موقتی دروس بیه و و هؤمبراور «$3» ئه.\nار تمارزو تو یه بیه ایسه باید بیایت وامین سامونه و یه گل رازینه گواردن هنی بهاییت\nرازینه گواردن شما د طیل {{PLURAL:$5|یه رو|$5 رو}} باطل بوئه.\n\nار کس هنی چنی درحاستی کرده یا یه که شما رازینه گواردن دمایی خوتونه د ویر اوردیت و تر نمیهایت ونه آلشت بیئت، می تونیت د ای پیغوم تیه پوشی بکیت و همو رازینه گواردن دمایی نه وه کار به ونیت.",
"passwordreset-emailtext-user": "کاریار $1 د {{SITENAME}} د نو زنه کردن رازینه گواردن شمانه د{{SITENAME}} ($4) کرده. {{PLURAL:$3|حساو|حساویا}} کاریاری که هان د هار د وا ای تیرنشون انجومانامه ها د ارتواط:\n\n$2\n\n{{PLURAL:$3|ای رازینه گواردن موقت|ای رازینه گواردنیا موقت}} تا {{PLURAL:$5|یه رو|$5 رو}} باطل بوئه.\nار کس هنی چنی درحاستی کرده یا یه که شما رازینه گواردن دمایی خوتونه د ویر اوردیت و تر نمیهایت ونه آلشت بیئت، می تونیت د ای پیغوم تیه پوشی بکیت و همو رازینه گواردن دمایی نه وه کار به ونیت.",
- "passwordreset-emailelement": "نوم کاروری: $1\nپاسورد موقتی: $2",
- "passwordreset-emailsent": "پاسورد هنی سی ایمیل کل بیه.",
- "passwordreset-emailsent-capture": "پاسورد تازه تو د ایمیلتو که د هار نشو دئه بیه کل بیه",
+ "passwordreset-emailelement": "نوم کاریاری: $1\nرازینه گواردن موقتی: $2",
+ "passwordreset-emailsent": "رازینه گواردن هنی سی انجومانامه کل بیه.",
+ "passwordreset-emailsent-capture": "رازینه گواردن تازه تو د انجومانامه تو که د هار نشو دئه بیه کل بیه",
"passwordreset-emailerror-capture": "رازینه گواردن د انجومانامه د نو زنه کننه راس بیه، و وه د هار دیاری می که، اما کل بیین وه د{{جنس:$2|کاریار}} شکست حرده:$1",
- "changeemail": "ایمیل تو نه آلشت بکید",
+ "changeemail": "انجومانامه تو نه آلشت بکید",
"changeemail-text": "ای نوم بلگه نه سی آلشت دئن تیرنشون انجومانامه تو پر بکیت. شما سی پشت راس کردن ای آلشت واس رازینه گواردن خوتونه وارد بکیت.",
- "changeemail-no-info": "شما با بیایت د سیستم تا د ای بلگه دسرسی داشتویت",
- "changeemail-oldemail": "نشونی ایمیل تازه باو:",
- "changeemail-newemail": "نشونی ایمیل تازه",
+ "changeemail-no-info": "شما با بیایت د سامونه تا د ای بلگه دسرسی داشتویت",
+ "changeemail-oldemail": "تیرنشون انجومانامه تازه باو:",
+ "changeemail-newemail": "تیرنشون انجومانامه تازه:",
"changeemail-none": "(هيش كوم)",
- "changeemail-password": "شما {{SITENAME}} پاسورد:",
- "changeemail-submit": "آلشت کردن ایمیل",
+ "changeemail-password": "{{SITENAME}} رازینه گواردن شما:",
+ "changeemail-submit": "آلشت کردن انجومانامه",
"changeemail-throttled": "شما ایسنی فره سی وامین اومائن تلاش کردیته.\n$1 لطفن سی تلاش هنی صبر بکید.",
"resettokens": "تازه کردن نشونه یا",
"resettokens-text": "شما سی صلا دئن دسرسی وه رسینه یا خصوصی که ها د حساو ایچنی تو می تونیت دیارگریا نه د نو زنه بکیت.\n\nشما اوسنی واس ای کار بکیت که رسینه یا شما سی یه کسی تر بئر بیه یا د حساو شما چل بیه.",
@@ -525,65 +535,67 @@
"resettokens-watchlist-token": "دیارگر سی حردنی تورگه(اتم/آر اس اس) سی [[ویجه:سیل برگ|آلشت دئن بلگه یا د سیل برگتو]]",
"resettokens-done": "نشونه یا تازه بیه.",
"resettokens-resetbutton": "نشونه یا انتخاو بیه تازه بوئن",
- "bold_sample": "متن توپر بيه",
- "bold_tip": "متن توپر بيه",
- "italic_sample": "نوشته كج كوله",
- "italic_tip": "نوشته كج كوله",
- "link_sample": "عنوان لينك",
- "link_tip": "لینک مئن ون",
- "extlink_sample": "http://www.example.com نوم ديس ون",
+ "bold_sample": "نیسسه توپر بیه",
+ "bold_tip": "نیسسه توپر بيه",
+ "italic_sample": "نیسسه كج كوله",
+ "italic_tip": "نیسسه كج كوله",
+ "link_sample": "داسون هوم پیوند",
+ "link_tip": "هوم پیوند مینجایی",
+ "extlink_sample": "http://www.example.com داسون هوم پیوند",
"extlink_tip": "هوم پیوند خارجی(د ویر داشتو)",
- "headline_sample": "سرخط نوشته",
- "headline_tip": "قدم 2 خط سر ون",
- "nowiki_sample": "د ایچه یه گل متن بی شلک وارد بکید",
+ "headline_sample": "سرخط نیسسه",
+ "headline_tip": "ریرتراز 2 خط سر ون",
+ "nowiki_sample": "د ایچه یه گل نیسسه بی شلک وارد بکید",
"nowiki_tip": "شلک ویکی نه ندید بگر",
"image_sample": "Example.jpg",
- "image_tip": "جانیا محاط بيه",
+ "image_tip": "جانیا چار قر گرته",
"media_sample": "Example.ogg",
- "media_tip": "فایل هوم پیوند",
- "sig_tip": "امضا شما و برچسو وخت",
- "hr_tip": "خط افق ونه(سوا سوا دش استفاده کو)",
+ "media_tip": "جانیا هوم پیوند",
+ "sig_tip": "امضا شما وا گاتدیس",
+ "hr_tip": "خط آسو ونه(سوا سوا وه کار بیئرشو)",
"summary": "چكسته",
"subject": "موضو/سر خط:",
"minoredit": "يه ويرايشت كؤچكيه",
"watchthis": "ديئن ای بلگه",
"savearticle": "اماییه کردن بلگه",
"preview": "پيش سيل",
- "showpreview": "پيش نمائش نشون بيئه",
+ "showpreview": "پيش سیل نشون بيئه",
"showdiff": "آلشتيانه نشون بيئه",
"blankarticle": "<strong>زنئار:</strong> بلگه ای که شما دروس کردیته حالیه.\nار شما د نو ری \"{{int:savearticle}}\" بپورنیت, بلگه وه شکل که هیچ مینونه ای دش نبا دروس بوئه.",
"anoneditwarning": "<strong>زئنار:</strong> شما هنی نیوماته وامین. تیرنشون آی پی شما هر گاتی که آلشتی راس بکیت سی کل خلک دیاره. ار <strong>[$1 روئیت وامین]</strong> یا <strong>[$2 یه گل حساو کاریاری راس بکیت]</strong>، ویرایشتیا شما وه نوم کاریاری خوتون دیاری می که، و وا چیا بیتر هنی.",
"anonpreviewwarning": "<em>شما نیومائته وامین. تیرنشون آی پی شما د ویرگار ویرایشت ای بلگه اماییه بوئه.</em>",
"missingsummary": "<strong>د ویر ونا:</strong> شما هنی یه گل چکسته ویرایشتی نها اماییه نکردیته.\nار شما د نو د ری\"{{int:savearticle}}\" بپورنیت, ویرایشت شما حالی اماییه بوئه.",
- "missingcommenttext": "لطفن د ایچه نظر بیئتو",
+ "selfredirect": "<strong>هشدار:</strong> شما د حال و بار آلشت دئن لا بلگه وه خوش هیئن.\nشایت دال اشتوایی سی آلشت دئن لا نه انتخاو کردیته، یا شایت بلگه نه اشتوایی ویرایشت می کیت.\n\nار ری \"{{int:savearticle}}\" دوبار بپورنیت، آلشت دئن لا دروس بوئه.",
+ "missingcommenttext": "لطفن د ایچه ویر و باور بیئتو",
"missingcommentheader": "<strong>د ویر ونا:</strong> شما هنی یه گل موضوع/سرخط سی ای ویر و باور نها اماییه نکردیته.\nار شما د نو د ری\"{{int:savearticle}}\" بپورنیت, ویرایشت شما حالی اماییه بوئه.",
"summary-preview": "چکسته پیش سیل:",
"subject-preview": "پیش سیل موضو سرخط",
- "blockedtitle": "كارور قلف بيه",
+ "previewerrortext": "یه گل خطا د گاتی که شما میهاستیت یه گل پیش سیل د آلشتیاتو داشتوین پیش اومائه.",
+ "blockedtitle": "کاریار نهاگری بیه",
"blockedtext": "<strong>نوم کاریاری شما یا تیرنشون آی پی شما قلف بیه.</strong>\n\n\n$1 ونه قلف کرده.\nدلیل ها د ایچه<em>$2</em>.\n\nشرو د قلف بیین:$8\nآخر قلف بیین:$6\nکاریار ورتیه قلف بیه:$7\n\nشما می تونیت وا $1 یا [[{{MediaWiki:Grouppage-sysop}}|دیووندار]] هنی پیوند بئریت و سی قلف کردن چک چنه بزنیت.\nالوت د ویر داشتویت که شما نمی تونیت د خصوصیت انجومانامه کل کردن سی ای کاربر استفاده بکیت مئر یه گل تیرنشون انجومانامه معتور د [[Special:Preferences|ترجیحیا کاریاری]] خوتو معلوم کرده بویت و باید امکان وه کار بستن وه نه داشتویتو\nتیرنشون آی پی ایسنی شما $3 ئه، و نوم دیارکن قلف کردن #$5 ئه.\nلطفا همه جزئیات نه د هر حاسته ای که داریت بوئیت.",
- "autoblockedtext": "نوم کاریاری شما یا تیرنشون آی پی شما سی یه که یه گل کاریاری هنی وه کارش بسته خودانجومن قلف بیه $1 ونه قلف کرده.\nدلیل ها د ایچه\n\n:<em>$2</em>.\n\nشرو د قلف بیین:$8\nآخر قلف بیین:$6\nکاریار ورتیه قلف بیه:$7\n\nشما می تونیت وا $1 یا [[{{MediaWiki:Grouppage-sysop}}|دیووندار]] هنی پیوند بئریت و سی قلف کردن چک چنه بزنیت.\n\nالوت د ویر داشتویت که شما نمی تونیت د خصوصیت انجومانامه کل کردن سی ای کاربر استفاده بکیت مئر یه گل تیرنشون انجومانامه معتور د [[Special:Preferences|ترجیحیا کاریاری]] خوتو معلوم کرده بویت و باید امکان وه کار بستن وه نه داشتویت.\n\nتیرنشون آی پی ایسنی شما $3 ئه، و نوم دیارکن قلف کردن #$5 ئه.\nلطفا همه جزئیات نه د هر حاسته ای که داریت بوئیت.",
+ "autoblockedtext": "نوم کاریاری شما یا تیرنشون آی پی شما سی یه که یه گل کاریاری هنی وه کارش بسته خودانجومن قلف بیه $1 ونه قلف کرده.\nدلیل ها د ایچه\n\n:<em>$2</em>.\n\nشرو د قلف بیین:$8\nآخر قلف بیین:$6\nکاریار ورتیه قلف بیه:$7\n\nشما می تونیت وا $1 یا [[{{MediaWiki:Grouppage-sysop}}|دیووندار]] هنی پیوند بئریت و سی قلف کردن چک چنه بزنیت.\n\nالوت د ویر داشتویت که شما نمی تونیت د خصوصیت انجومانامه کل کردن سی ای کاربر استفاده بکیت مئر یه گل تیرنشون انجومانامه معتور د [[Special:Preferences|ترجیحیا کاریاری]] خوتو دیاری کرده بویت و باید امکان وه کار بستن وه نه داشتویت.\n\nتیرنشون آی پی ایسنی شما $3 ئه، و نوم دیارکن قلف کردن #$5 ئه.\nلطفا همه جزئیات نه د هر حاسته ای که داریت بوئیت.",
"blockednoreason": "هیژ دلیلی دئه نبیه",
"whitelistedittext": "شما باید $1 سی ویرایشت بلگیا",
"confirmedittext": "شما واس دما ویرایشت کردن بلگه یا تیرنشون انجومانامه تونه پشت راس بکیت.\nلطفا یه گل تیرنشون خو سی [[Special:اولویتیا|اولویتیا کاریار]] بنیت.",
"nosuchsectiontitle": "نبوئه بشخ پیدا بوئه",
"nosuchsectiontext": "شما سی ویرایشت کردن جایی که وجود ناره تلاش کردیته.\nشات وه اوسه که شما بلگه نه می دیئته جا وه جا بیه یا پاکسا بیه.",
"loginreqtitle": "وامین اومائن لازمه",
- "loginreqlink": "اومائن",
+ "loginreqlink": "وا مین اومائن",
"loginreqpagetext": "$1 لطف بکید بلگه یا هنی نه بوینیت",
- "accmailtitle": "پاسورد کل بی",
+ "accmailtitle": "رازینه گواردن کل بی",
"accmailtext": "یه گل رازینه گواردن شامسکی سی[[چک چنه کاریار:$1|$1]] سی $2 کل بیه.بوئه وه نه د گات وه کار بستن بلگه اومائن وامین د <em>[[Special:آلشت دئن رازینه گواردن|آلشت دئن رازینه گواردن]]</em> آلشت دئه بوئه.",
"newarticle": "تازه",
- "newarticletext": "شما وادما هوم پیوندی هئیت که وجود ناره.\nسی راس کردن بلگه.شرو د نیسنن مئن جعوه هاری بکید(سیل[$1 ] سی دونسمنی بیشتر بکید).\nار شما سی اشتوا کردن هایئن ایچه، دگمه وادما رئتن مرورگر تونه بپورنیت.",
+ "newarticletext": "شما وادما هوم پیوندی هئیت که وجود ناره.\nسی راس کردن بلگه.شرو د نیسنن مئن جعوه هاری بکید(سیل[$1 ] سی دونسمنی بیشتر بکید).\nار شما سی اشتوا کردن هایئن ایچه، دگمه وادما رئتن دوارته نیئر تونه بپورنیت.",
"anontalkpagetext": "----",
- "noarticletext": "د تازه یا د ای بلگه متن نی.\nشما تونید د[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هنی پی جوری بوئه logs]</span> \n [{{fullurl:{{FULLPAGENAME}}|action=edit}} یای ای بلگه نه ویرایشت بکیدpage]</span>.",
- "noarticletext-nopermission": "د تازه یا د ای بلگه متن نی.\nشما تونید د[[Special:Search/{{PAGENAME}}|search for this page title]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هنی پی جوری بوئه logs]</span> اما شما حق ناریتو ای بلگه نه راس بکیت",
+ "noarticletext": "د تازه یا د ای بلگه نیسسه نی.\nشما می تونیت د[[Special:/{{PAGENAME}}|]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هنی پی جوری بوئه logs]</span> \n [{{fullurl:{{FULLPAGENAME}}|action=edit}} یای ای بلگه نه ویرایشت بکیدpage]</span>.",
+ "noarticletext-nopermission": "د تازه یا د ای بلگه نیسسه نی.\nشما می تونیت د[[Special:/{{PAGENAME}}]] بگردید د ای بلگه یا د بلگیا هنی یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هنی پی جوری بوئه logs]</span> اما شما حق ناریتو ای بلگه نه راس بکیت",
"missing-revision": "وانئیری #$1 د بلگه ای که نومش ونه \"{{FULLPAGENAME}}\" وجود ناره.\n\nشایت بانی جاونه وه وا یه گل ویرگار وه هنگوم نبیه که د یه گل بلگه پاکسا بیه هوم پیوند بیه بوئه.\nشایت جزئیات د [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] پیدا بوئن.",
"userpage-userdoesnotexist": "حساو کاریاری\"$1\" ثوت نام نبیه.\nار میهایت ای بلگه نه بسازیتو یا ویرایشت بکیت یه گل وارسی انجوم بئیت.",
"userpage-userdoesnotexist-view": "حساو کارور\"$1\" ثوت نبیه.",
- "blocked-notice-logextract": "ای کارور ایسنی دسرسی ناره.\nآخری نشون قلف ورودی د هار ایچه سی سرچشمه آماده بیه:",
- "clearyourcache": "<strong>توجه داشتویت:</strong> نها اماییه کاری, شات مژبور وه وه کار ونن ویرگه نهو دوارته نیئر خوتو سی دیئن ای آلشتیا بوئیت .\n* <strong>فایرفاکس/ سفری:</strong> بپورنیت ری<em>شیفت</em> اوسه که می پورنیت<em>د نو سوار بوئه</em>یا هنی ری <em>Ctrl-F5</em> بپورنیت یا<em>Ctrl-R</em> (<em>⌘-R</em> د سامونه مک)\n* <strong>گوگل کروم:</ strong>بپورنیت ری <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> یا د سامونه)\n* <strong>اینترنت اکسپلورر:</strong> <em>Ctrl</em> واداریت اوسه که می پورنیت ری <em>Refresh</em>, یل بپورنیت ری<em>Ctrl-F5</em>\n* <strong>اوپرا:</strong> ویرگه نهو نه د <em>اوزاریا→ اولویتیا پاک بکیت</em>",
- "usercssyoucanpreview": "<strong>نکته:</strong> د دگمه \"{{int:showpreview}}\" سی آزماشت کردن سی اس اس تازه دما اماییه کاری استفاده بکیت .",
- "userjsyoucanpreview": "<strong>نکته:</strong> د دگمه \"{{int:showpreview}}\" سی آزماشت کردن دما اماییه کاری جاوا اسکریپت تازه استفاده بکیت .",
+ "blocked-notice-logextract": "ای کاریار ایسنی دسرسی ناره.\nآخری پهرستنومه قلف ورودی د هار ایچه سی سرچشمه آماده بیه:",
+ "clearyourcache": "<strong>د ویر داشتویت:</strong> نها اماییه کاری, شات مژبور وه وه کار ونن ویرگه نهو دوارته نیئر خوتو سی دیئن ای آلشتیا بوئیت .\n* <strong>فایرفاکس/ سفری:</strong> بپورنیت ری<em>شیفت</em> اوسه که می پورنیت<em>د نو سوار بوئه</em>یا هنی ری <em>Ctrl-F5</em> بپورنیت یا<em>Ctrl-R</em> (<em>⌘-R</em> د سامونه مک)\n* <strong>گوگل کروم:</ strong>بپورنیت ری <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> یا د سامونه)\n* <strong>اینترنت اکسپلورر:</strong> <em>Ctrl</em> واداریت اوسه که می پورنیت ری <em>Refresh</em>, یل بپورنیت ری<em>Ctrl-F5</em>\n* <strong>اوپرا:</strong> ویرگه نهو نه د <em>اوزاریا→ اولویتیا پاک بکیت</em>",
+ "usercssyoucanpreview": "<strong>نکته:</strong> د دگمه \"{{int:showpreview}}\" سی آزماشت کردن سی اس اس تازه دما اماییه کاری وه کار بیئریت.",
+ "userjsyoucanpreview": "<strong>نکته:</strong> د دگمه \"{{int:showpreview}}\" سی آزماشت کردن دما اماییه کاری جاوا اسکریپت تازه وه کار بیئریت.",
"usercsspreview": "<strong>د ویر داشتوئیت که شما فقط می تونیت سی اس اس کاریاری تونه پیش سیل بکیت. وه د ایسنی هنی اماییه نبیه!</strong>",
"userjspreview": "<strong>د ویر داشتوئیت که شما فقط می تونیت جاوا اسکریپت کاریاری تونه پیش سیل بکیت. وه د ایسنی هنی اماییه نبیه!</strong>",
"sitecsspreview": "<strong>د ویر داشتوئیت که شما فقط می تونیت ای سی اس اس نه فقط پیش سیل بکیت. وه د ایسنی هنی اماییه نبیه!</strong>",
@@ -598,13 +610,13 @@
"session_fail_preview_html": "<strong>د بدبختی ما سی یه که رسینه یا جلسه مونه د دس دئیمه نمی تونیم کار پردازشت ویرایشت شمانه انجوم بیئمو.</strong>\nلطفن هنی تلاش بکیت.\n\n<em>سی یه که {{نوم دیارگه}} یه گل ردیف اچ تی ام ال کنشتگر بیه داره، پیش سیل سی یه که د دس حمله یا جاوا اسکریپ د امون با قام کرده بیه..</em>\n\n<strong>ار وه گات قانونی تلاش سی ویرایشته،لطفا د نو تلاش بکیت.</strong>\nار هنی کار وه دروس کار نکرد،[[Special:UserLogout|اومائن وه در]] نه ازمایشت بکیت و د نو بیایت وامین.",
"token_suffix_mismatch": "<strong>ویرایشتیا شما سی یه که دووارته نئر شما نیسسه یا نقطه نیائن نه د رازینه امنیتی ویرایشت د یک تیچسه.</strong>\nویرایشت سی یه که د خراو بیئن نیسسه بلگه نهاگری با رد بیه.\nای رخ ون د گاتیایی پیش میا که شما د یه گل رسینه جا پروکسی استفاده می کیت.",
"edit_form_incomplete": "<strong>پاره ای د ویرایشتا وه رسینه جا نمی رسن، هنی وارسی بکیت سی یه که بوینیت ویرایشتیا شما خوئه و هنی تلاش بکیت .</strong>",
- "editing": "د حالت ويرايشت$1",
+ "editing": "د حال و بال ويرايشت$1",
"creating": "راس كردن $1",
- "editingsection": "د حال ویرایشت$1(بشخ)",
- "editingcomment": "د حال ویرایشت$1(بشخ تازه)",
+ "editingsection": "د حال و بال ویرایشت$1(بشخ)",
+ "editingcomment": "د حال و بال ویرایشت$1(بهرجا تازه)",
"editconflict": "تضاد د ویرایشت:$1",
- "explainconflict": "داوسه که شما شرو د ویرایشت ای بلگه کردیته، یه نفر هنی ای بلگه نه آلشت دئه.\nراساگه روئی متن بلگه متن نه چی یه که وجود داشتوه د ور میئره.\nآلشتیا شما د متن هاری نشو دئه هئ.\nشما با آلشتیاتونه د متن که هئش یکی بکید.\nفقط متنی که ها د رو د وختی که شما\"{{رقم:ذخیره گوتار}}\" نه گزارشت می کید اماییه بوئه",
- "yourtext": "متن شما",
+ "explainconflict": "داوسه که شما شرو د ویرایشت ای بلگه کردیته، یه نفر هنی ای بلگه نه آلشت دئه.\nراساگه وارو نیسسه بلگه نیسسه نه چی یه که وجود داشتوه د ور میئره.\nآلشتیا شما د نیسسه هاری نشو دئه هئ.\nشما با آلشتیاتونه د نیسسه که هئش یکی بکید.\nفقط متنی که ها د رو د گاتی که شما\"{{رقم:اماییه کاری گوتار}}\" نه گزارشت می کید اماییه بوئه",
+ "yourtext": "نیسسه شما",
"storedversion": "دوواره دیئن انبار بیه.",
"nonunicodebrowser": "<strong>زئنار:دووارته نئر شما وا نیسسه یا یونیکد سازگاری ناره.</strong>\nیه گل راحل وه کار گرته بیه سی یه که شما بلگه یا نه وا امنیت ویرایشت بکیت:\nنیسه یا غیر-ASCII د پایه رازینه یا 16 تایی دتو نشو دئه بوئه.",
"editingold": "<strong>زئنار:شما داریت یه گل وانئری نا به هنگوم بیه نه سی ای بلگه ویرایشت می کید</strong>\nار شما ونه اماییه بکیت،هر آلشتی که د اول سی ای وانئری انجوم بیه گم بوئه.",
@@ -617,24 +629,24 @@
"semiprotectedpagewarning": "<strong>د ویر داشتویت:</strong> ای بلگه سی یه که فقط کاریاریا ثوت نام کرده تونستون دش ویرایشت بکه ن پر و پیم بیه.\nآخرین پهرستنومه دئه بیه سی سرچشمه هار نها اماییه بیه:",
"cascadeprotectedwarning": "<strong>زئنار:</strong> ای بلگه",
"titleprotectedwarning": "<strong>زئنار:ای بلگه پر و پیم بیه سی یه که[[ویجه:نوم گه حقوق گرو|حقوق ویجه]] باید ونه دروس بکن .</strong>\nآخرین پهرستنومه دئه بیه سی سرچشمه دئن نهااماییه بیه:",
- "templatesused": "{{جمی:$1|چوئه|چوئه یا}}د ای بلگه استفاده بیه:",
+ "templatesused": "{{جمی:$1|چوئه|چوئه یا}}د ای بلگه وه کار گرته بیه:",
"templatesusedpreview": "{{جمی:$1|چوئه|چوئه یا}}استفاده بیه د ای پیش سیل:",
- "templatesusedsection": "{{جمی:$1|چوئه|چوئه یا}} استفاده بیه د ای بخش:",
- "template-protected": "(حمايت بيه)",
- "template-semiprotected": "(نيم-حفاظت بيه)",
+ "templatesusedsection": "{{جمی:$1|چوئه|چوئه یا}} وه کار گرته بیه د ای بخش:",
+ "template-protected": "(پر و پیم بيه)",
+ "template-semiprotected": "نصم و نیمه پر و پیم بیه",
"hiddencategories": "ای بلگه يه اندوم د{{PLURAL:$1|1 hidden category|$1 hidden categories}}: هئ",
"edittools-upload": "-",
"nocreatetext": "{{نوم مالگه}} سی راس کردن بلگه یا تازه محدود بیه.\nشما تونید روئیت وادما و بلگه ای که هئیش ویرایشت بکید ، یا [[ویجه:وامین اومائن کاریار|بیایت وامین یا یه گل حساو بسازیت]].",
"nocreate-loggedin": "شما حق ناریت که بلگه یا تازه نه راس بکید.",
- "sectioneditnotsupported-title": "ویرایشت بخش حمایت نبوئه",
- "sectioneditnotsupported-text": "ویرایشت بشقی د ای بلگه نئیش.",
+ "sectioneditnotsupported-title": "ویرایشت بهرجا حامین داری نبوئه",
+ "sectioneditnotsupported-text": "ویرایشت بهرجایی د ای بلگه نئیش.",
"permissionserrors": "خطا اجازه دئین",
"permissionserrorstext": "شما حق ناریت ونه انجوم بیئت, سی{{جمی:$1|دلیل|دلیلیا}} نهایی:",
- "permissionserrorstext-withaction": "شما سی $2 اجازه ناریت\nسی دمال کردن{{PLURAL:$1|reason|reasons}}:",
- "recreate-moveddeleted-warn": "'''زنهار شما بلگه ای که وادما پاکسا بیه هنی راس کردیته'''\nشما باید دونسه بایت که آیا هنی سی نها گرتن ویرایشت ای بلگه خوئه.\nپاکسا بیئن و جمشت سی ای بلگه سی راحتی تو فراهم بیه:",
- "moveddeleted-notice": "ای بلگه پاک بیه.\nپاک بین و جمشت ای بلگه سی سرچشمه دئین فراهم بیه",
+ "permissionserrorstext-withaction": "شما سی $2 اجازه ناریت\nسی نهاگری {{PLURAL:$1|دلیل|دلیلیا}}:",
+ "recreate-moveddeleted-warn": "'''زنهار شما بلگه ای که وادما پاکسا بیه هنی راس کردیته'''\nشما باید دونسه بایت که آیا هنی سی نها گرتن ویرایشت ای بلگه خوئه.\nپاکسا بیئن و جمشت سی ای بلگه سی فراغتتو آماده بیه:",
+ "moveddeleted-notice": "ای بلگه پاکسا بیه.\nپاکسا بین و جمشت ای بلگه سی سرچشمه دئین آماده بیه",
"log-fulllog": "دیئن همه پهرستنومه یا",
- "edit-hook-aborted": "ویرایشت وا قلاو جلوگری بیه.\nهیچ توضیئ سیش نئ.",
+ "edit-hook-aborted": "ویرایشت وا قلاو نهاگری بیه.\nهیچ توضیئ سیش نئ.",
"edit-gone-missing": "نبوئه ای بلگه نه وه هنگوم بکیت.\nوه نظر میا که وه پاکسا بیه.",
"edit-conflict": "مخالفت نه ویرایشت بکید",
"edit-no-change": "سی یه که آلشتیا د یه گل نیسسه دروس بیه د ویرایشت شما تیه پوشی بیه.",
@@ -642,24 +654,28 @@
"postedit-confirmation-restored": "بلگه د نو اماییه بیه.",
"postedit-confirmation-saved": "ویرایشتتو اماییه بی",
"edit-already-exists": "نبوئه یه گل بلگه تازه راس بکید.\nوه هئیش.",
- "defaultmessagetext": "متن پیغوم پیش فرض",
+ "defaultmessagetext": "نیسسه پیغوم پیش فرض",
"content-failed-to-parse": "د یک تیچیسن چیا مئن $2 د مدل $1:$3",
"invalid-content-data": "دنسمنی مینونه نامعتور",
- "content-not-allowed-here": " مینونه\"$1\" سی بلگه [[$2]] اجازه نه دئه بیه",
+ "content-not-allowed-here": " مینونه\"$1\" سی بلگه [[$2]] صلا نه دئه بیه",
"editwarning-warning": "ار ای بلگه نه ول بکیت هر آلشتی که دئیته پاک بوئه.\nار شما هاییت وا مین،شما می تونیت ای زئنار نه د \"{{int:prefs-editing}}\" که ها د بخش اولویتیا شما ناکشتگر بکیت.",
"editpage-notsupportedcontentformat-title": "شلک مینونه دماگری نبیه",
"editpage-notsupportedcontentformat-text": "وضع و بار مینونه $1 د مدل مینونه $2 حامین نبوئه.",
- "content-model-wikitext": "ويكی متن",
- "content-model-text": "متن ساده",
+ "content-model-wikitext": "ويكی نیسسه",
+ "content-model-text": "نیسسه ساده",
"content-model-javascript": "جاوا اسكريپت",
"content-model-css": "سی اس اس",
+ "content-json-empty-object": "سرتال حالی",
+ "content-json-empty-array": "آرایه حالی",
+ "duplicate-args-category": "بلگه یا یی که چک چنه کاریا دو کونه نه د چوئه یا واحونیشو وه کار میئرن",
+ "duplicate-args-category-desc": "بلگه یی که آرگومان دوکونه داره چی، <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> یا <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "<strong>زئنار:</strong>ای بلگه مینونه دار واحونی دستوریا مئن اشکافت فره ای هئ.\n\nانازه و باید د کمتر با$2 {{جمی:$2|واحونی|واحونیا}}، ایسه {{جمی:$1|$1 واحونی|$1 واحونیا}}ئه.",
"expensive-parserfunction-category": "بلگه یایی که واحونی پیوندگر خطا گرون فره ای ها دشو",
- "post-expand-template-inclusion-warning": "زنئار قالو شومل انازه ای یه که فره گپه.پاره ای د قالویا نه د بر نگره",
- "post-expand-template-inclusion-category": "بلگیا شومل قالوی ین که انازش د حد اومائه وه در",
- "post-expand-template-argument-warning": "زنهار ای بلگه شومل حداقل یه قالو سی چک چنه یه که انازه فره گپه.\nگپسنیا پاک بینه.",
- "post-expand-template-argument-category": "بلگه شومل قالو چک چنیا د بین رئته",
- "parser-template-loop-warning": "حلقه قالو کشف بیه:[[$1]]",
+ "post-expand-template-inclusion-warning": "زنئار چوئه د ور گرته انازه ای یه که فره گپه.پاره ای د چوئه یا نه د ور نمیئره.",
+ "post-expand-template-inclusion-category": "بلگیا د ور گرته چوئه ین که انازش د حد اومائه وه در",
+ "post-expand-template-argument-warning": "زنهار ای بلگه د ور گرته حداقل یه چوئه سی چک چنه یه که انازه فره گپه.\nگپسنیا پاک بینه.",
+ "post-expand-template-argument-category": "بلگه د ور گرته چوئه چک چنیا د بین رئته",
+ "parser-template-loop-warning": "حلقه چوئه دیاری کرده:[[$1]]",
"parser-template-recursion-depth-warning": "محدودیت پی یا ورئشتن چوئه رد بی($1)",
"language-converter-depth-warning": "محدودیت پی یا زون والرن رد بی($1)",
"node-count-exceeded-category": "بلگه یا که د بیشرونه شماره گرو فره پئشکرد کردنه",
@@ -670,7 +686,7 @@
"expansion-depth-exceeded-warning": "بلگه د پی یا ووله بیین پئشکرد کرد",
"parser-unstrip-loop-warning": "گردوله د فرمونه Unstrip پیدا بیه",
"parser-unstrip-recursion-limit": "د بیشترونه د سرچشمه رئتن د دستور Unstrip واروتر رئتیته($1)",
- "converter-manual-rule-error": "خطا د قانون دسی زون",
+ "converter-manual-rule-error": "خطا د قانون والرشتن دسی زون",
"undo-success": "نبوئه ویرایشت نه انجومشیو بکیت.\nلطفا ای فرخی که ها د هار نه وارسی بکیت تا یه کاریه که میهات انجوم بئیت، و اوسه آلشتیا هار نه اماییه بکیت سی یه که خمثی کردن ویرایشت نه انجوم بئیت.",
"undo-failure": "سی ری به ری بیئن ای ویرایشت وا ویرایشتیا مینجایی، نبوئه ای ویرایشت نه خومثی بکیت.",
"undo-norev": "نبوئه ای ویرایشت نه خومثی بکیت سی یه که یا وجود ناره یا پاکسا بیه.",
@@ -683,19 +699,19 @@
"viewpagelogs": "سی ای بلگه بوینتو.",
"nohistory": "هیچ ویرگار ویرایشتی د ای بلگه نئ.",
"currentrev": "آخرین دوواره دیئن",
- "currentrev-asof": "آخرين دووار ديئن چی $1",
+ "currentrev-asof": "آخري وانئری چی $1",
"revisionasof": "دوواره ديئن $1",
"revision-info": "دوواره سیل بیه چی $1 وا $2",
"previousrevision": "اصلاح دمايی",
- "nextrevision": "تازه ترن دوبار دیئن",
- "currentrevisionlink": "آخرین دوواره دیئن",
+ "nextrevision": "تازه تری وانئری",
+ "currentrevisionlink": "آخری وانئری",
"cur": "تازه باو",
"next": "نيایی",
"last": "دمايی",
"page_first": "اولی",
"page_last": "آخر",
"histlegend": "انتخاو فرخدار:جعویا رادیو نه سی دوواره دیئن و وارسی نشو دار بکید و یا ری رئتن کلیک بکید .<br />\nشرح نوشته: '''({{int:cur}})''' = وا آخری دوواره دیئن فرخ داره '''({{ int:last}})'''= وا دواره دیئن انجوم دئنی فرخ داره '''{{int:minoreditletter}}''' =ویرایشت کؤچک.",
- "history-fieldset-title": "ویرگار مرور ون",
+ "history-fieldset-title": "ویرگار دوارته نیئری",
"history-show-deleted": "فقط پاكسا بيه",
"histfirst": "قديمي تري",
"histlast": "تازه تري",
@@ -708,7 +724,7 @@
"rev-deleted-comment": "(ویرایشت چکسته جا وه جا بیه)",
"rev-deleted-user": "(نوم کاروری جا وه جا بیه)",
"rev-deleted-event": "(انجوم گر پهرستنومه جا وه جا بیه)",
- "rev-deleted-user-contribs": "[نوم کاروری یا نشونی آی پی جا وه جا بیه - چیا قام بیه د ور هوم یاریانه ویرایشت بکید]",
+ "rev-deleted-user-contribs": "[نوم کاریاری یا تیرنشون آی پی جا وه جا بیه - چیا قام بیه د ور هوم یاریانه ویرایشت بکید]",
"rev-deleted-text-permission": "وانئری ای بلگه <strong>پاکسا بیه</strong>.\nجزئیات هان د [{{fullurl:{{#Special:Log}}/پاکسا کردن|بلگه={{نوم کامل بلگه}}}} پهرستنومه پاکساکردن].",
"rev-suppressed-text-permission": "وانئری بلگه <strong>پاکساگری</strong>.\nجزئیات هان د [{{fullurl:{{#Special:Log}}/پاکساگری کردن|بلگه={{نوم کامل بلگه}}}} پهرستنومه پاکساگری کردن].",
"rev-deleted-text-unhide": "وانئری ای بلگه <strong>پاکسا بیه</strong>.\nجزئیات هان د [{{fullurl:{{#Special:Log}}/پاکسا کردن|بلگه={{نوم کامل بلگه}}}} پهرستنومه پاکساکردن].\nشما هنی تونیت [$1ای وانئری نه بونیت] ار بهاییت.",
@@ -721,12 +737,12 @@
"rev-suppressed-unhide-diff": "وانئری ای بلگه <strong>پاکساگری بیه</strong>.\nجزئیات هان د [{{fullurl:{{#Special:Log}}/پاکساگری کردن|بلگه={{نوم کامل بلگه}}}} پهرستنومه پاکساگری کردن].\nشما هنی تونیت [$1ای وانئری نه بونیت] ار بهاییت.",
"rev-deleted-diff-view": "وانئری ای بلگه <strong>پاکسا بیه</strong>.\nجزئیات هان د [{{fullurl:{{#Special:Log}}/پاکسا کردن|بلگه={{نوم کامل بلگه}}}} پهرستنومه پاکساکردن].",
"rev-suppressed-diff-view": "وانئری بلگه <strong>پاکساگری</strong>.\nجزئیات هان د [{{fullurl:{{#Special:Log}}/پاکساگری کردن|بلگه={{نوم کامل بلگه}}}} پهرستنومه پاکساگری کردن].",
- "rev-delundel": "آلشت وضئيت ديئن",
- "rev-showdeleted": "نشو دائن",
+ "rev-delundel": "آلشت حال و بال ديئن",
+ "rev-showdeleted": "نشو دئن",
"revisiondelete": "پاکسا کردن/زنه کردن وانئریا",
"revdelete-nooldid-title": "وانیری تمارزی بیه نامعتوره",
"revdelete-nooldid-text": "شما وانئریا حاسنی نه سی انجوم دئن ای کار ره ون تیاری نکردیته، یا وانئریا تیارگر بیه وجود نارن، یا یه که شما میهایت وانئری ایسنی نه قام بکیت.",
- "revdelete-no-file": "فایل مشقص بیه وجود ناره.",
+ "revdelete-no-file": "جانیا تیار بیه وجود ناره.",
"revdelete-show-file-confirm": "شما د دل میهایت که وانئری پاکسا بیه ای جانیا نه بونیت \"<nowiki>$1</nowiki>\" د $2 تا $3؟",
"revdelete-show-file-submit": "هری",
"revdelete-selected-text": "{{جمی:$1|وانیری گل گر بیه|وانیری گل گر بیه}} د [[:$2]]:",
@@ -740,10 +756,10 @@
"revdelete-suppress-text": "پاکساگری فقط با <strong>تئنا</strong> سی جایایی که هان د هار وه کار گرته بوئه:\n*دونسمنیایی که فره تنادارن\n*دونسمنیا نامناسو شخصی\n*: <em>تیرنشون حونه، شماره تیلیفون،رازینه زایاره ای و چیا تر</em>",
"revdelete-legend": "میزونکاری محدودیتیا دیار بیین.",
"revdelete-hide-text": "متن دوواره دیئن",
- "revdelete-hide-image": "چی یا مئن فایل قام کو",
+ "revdelete-hide-image": "چی یا مین جانیا نه قام کو",
"revdelete-hide-name": "آرمون و انجوم گر نه قام بکید",
"revdelete-hide-comment": "چکسه نه ویرایشت بکید",
- "revdelete-hide-user": "نوم کاروری ویرایشتگر/نشونی آی پی",
+ "revdelete-hide-user": "نوم کاریاری ویرایشتگر/تیرنشون آی پی",
"revdelete-hide-restricted": "پاکساگری کردن رسینه یا سی دیوونداریا و کسونا تر",
"revdelete-radio-same": "آلشت نکید",
"revdelete-radio-set": "قام بیه",
@@ -756,7 +772,7 @@
"revdelete-failure": "'''دیئن وانیری وه خوئی وه هنگوم نبی:'''$1",
"logdelete-success": "<strong>پهرستنومه دیار بیین د خوئی میزونکاری بی.</strong>",
"logdelete-failure": "<strong>پهرستنومه دیار بیین نبوئه میزونکاری با.</strong> $1",
- "revdel-restore": "آلشت وضئيت ديئن",
+ "revdel-restore": "آلشت حال و بال ديئن",
"pagehist": "ويرگار بلگه",
"deletedhist": "ویرگار پاکسا بیه",
"revdelete-hide-current": "خطا د قام کردن چی که ها د ویرگار $2 ساعت $1: ای نسقه، نسقه ایسنی یه و نبوئه نهوش بکیت.",
@@ -771,10 +787,10 @@
"revdelete-reasonotherlist": "دلیل هنی",
"revdelete-edit-reasonlist": "دلیلیا پاکسا کردنه نه ویرایشت بکید",
"revdelete-offender": "نیسنه وانیری:",
- "suppressionlog": "پهرستنومه پاکسازی",
+ "suppressionlog": "پهرستنومه پاکساگری",
"suppressionlogtext": "د هار یه گل نوم گه ای هئ که مینونه یا پاکسا بیه و قلف بیه که هان دش د ورتیه دیوونداریا قام بینه.\n[[ویجه:نوم گه قلف بیه|نوم گه قلف بیئنیا]]نه سی نوم گه ایی که انجومکاریا قدقن بیه و قلف بینیا هان دش بونیت.",
"mergehistory": "ویرگاریا بلگه نه یکی بکید",
- "mergehistory-header": "ای بلگه وه شما اجازه می ئه که وانیریانه ویرگار سرچشمه بلگه نه د یه گل بلگه تازه سریک سازی بکید.\nمطمئن بویت که ای آلشت د لحاظ ویرگاری د مین بلگه موندگار هئ.",
+ "mergehistory-header": "ای بلگه وه شما اجازه می ئه که وانیریانه ویرگار سرچشمه بلگه نه د یه گل بلگه تازه سریک سازی بکید.\nمطمئن بویت که ای آلشت د لحاظ ویرگاری د مین بلگه موندگاره.",
"mergehistory-box": "دوواره دیئن دوبلگه ای نه سر یک سازی کو:",
"mergehistory-from": "بلگه سرچشمه:",
"mergehistory-into": "بلگه مقصد:",
@@ -784,8 +800,8 @@
"mergehistory-submit": "سر یک سازی دوواره دیئنیا",
"mergehistory-empty": "هیپ دوواره دیئنی نبوئه یکی سازی بوئه.",
"mergehistory-success": "$3 {{جمی:$3|وانیری|وانیریا}} د [[:$1]] وه خوئی د [[:$2]] سریک سازی بی.",
- "mergehistory-fail": "سریک سازی ویرگار انجوم نبوئه، لطفن پینیاریا زمون و بلگه نه د نو وارسی بکید.",
- "mergehistory-fail-toobig": "نبوئه وه یک شیوسن ویرگان انجوم دئه سی یکه وه بیشتر د محدودیت $1 {{PLURAL:$1|نسقه}}جا وه جا موئه.",
+ "mergehistory-fail": "سریک سازی ویرگار انجوم نبوئه، لطفن پینیاریا گات و بلگه نه د نو وارسی بکید.",
+ "mergehistory-fail-toobig": "نبوئه وه یک شیوسن ویرگا انجوم دئه سی یکه وه بیشتر د محدودیت $1 {{PLURAL:$1|نسقه}}جا وه جا موئه.",
"mergehistory-no-source": "سرچشمه بلگه $1 وجود ناره.",
"mergehistory-no-destination": "بلگه مقصد $1 وجود ناره.",
"mergehistory-invalid-source": "نوم ون بلگه سرچشمه با معتور بوئه.",
@@ -796,7 +812,6 @@
"mergehistory-reason": "دليل:",
"mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "سریک سازی پهرستنومه",
- "pagemerge-logentry": " [[$1]] وا [[$2]] سریک سازی بی (وانیریا که د $3 فره تر هئن)",
"revertmerge": "بی لوئه",
"mergelogpagetext": "شما د هار نوم گه آخرین چیا وه یک شیوسن ویرگار یه بلگه نه د بلگه تر میئنیت.",
"history-title": "دوواره دیئن ویرگار$1",
@@ -806,37 +821,40 @@
"lineno": "خط $1:",
"compareselectedversions": "دوبار دیئنیایی که انتخاو بینه مقایسه بکیتو",
"showhideselectedversions": "شلک دیئن وانیریا انتخاو بیه نه آلشت بکید",
- "editundo": "رد كردن",
+ "editundo": "ناانجومگر کردن",
"diff-empty": "(بی فرق)",
"diff-multi-sameuser": "({{PLURAL:$1|یه گل نسقه مینجایی|$1 نسقه یا مینجایی}} وه دس{{PLURAL:$2|کاریاری تر|$2 کاریاریا}} نشو دئه نبیه)",
"diff-multi-otherusers": "({{PLURAL:$1|یه گل نسقه مینجایی|$1 نسقه یا مینجایی}} وه دس{{PLURAL:$2|کاریاری تر|$2 کاریاریا}} نشو دئه نبیه)",
- "diff-multi-manyusers": "({{جمی:$1|یه گل وانیری مینجاگرته|$1وانیریا مینجا گرته}} بیشتر د $2 {{جمی:$2|کارور|کاروریا}} نشو دئه نبیه)",
+ "diff-multi-manyusers": "({{جمی:$1|یه گل وانیری مینجاگرته|$1وانیریا مینجا گرته}} بیشتر د $2 {{جمی:$2|کاریار|کاریاریا}} نشو دئه نبیه)",
"difference-missing-revision": "{{PLURAL:$2|یه گل ویرایشت|$2 ویرایشت}} د فرق مینجا($1) {{PLURAL:$2|پیدا نبی|پیدا نبینه}}.\n\nشایت بانی جاونه وه وا یه گل ویرگار وه هنگوم نبیه که د یه گل بلگه پاکسا بیه هوم پیوند بیه بوئه.\nشایت جزئیات د [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] پیدا بوئن.",
"searchresults": "نتيجه يا پی جوری",
"searchresults-title": "نتيجه يا پی جوری سی \"$1\"",
- "titlematches": "عنوان بلگه مطاوقت داره",
+ "titlematches": "داسون بلگه یکی بیه",
"textmatches": "هومسازی نیسسه بلگه.",
"notextmatches": "نیسسه بلگه هومسازی ناره",
"prevn": "وادما {{PLURAL:$1|$1}}",
"nextn": "نيايی {{PLURAL:$1|$1}}",
+ "prev-page": "بلگه دمايی",
+ "next-page": "بلگه نهایی",
"prevn-title": "پيشتر $1 {{PLURAL:$1|نتيجه|نتيجيا}}",
"nextn-title": "نيايی $1 {{PLURAL:$1|نتيجه|نتيجيا}}",
"shown-title": "نشون دئن $1 {{جمی:$1|نتيجه|نتيجه}} سی هر بلگه",
"viewprevnext": "ديئن ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''ایچه بلگه ای هئ وه نوم\"[[:$1]]\" که ها د ای ویکی'''",
"searchmenu-new": "'''ای بلگه نه راس كو \"[[:$1]]\" د ای ويكي!'''",
- "searchprofile-articles": "بلگيا محتوا",
- "searchprofile-images": "رسانيا جمی",
+ "searchprofile-articles": "بلگيا مینونه دار",
+ "searchprofile-images": "وارسگریا خلکمن",
"searchprofile-everything": "همه چی",
- "searchprofile-advanced": "پيشرفته",
+ "searchprofile-advanced": "پیشکرده",
"searchprofile-articles-tooltip": "بگرد مئن $1",
- "searchprofile-images-tooltip": "بگرد سی فايليا",
- "searchprofile-everything-tooltip": "همه محتوا نه پی جوری كو (شاملا بلگيا چك چنه)",
+ "searchprofile-images-tooltip": "جانیایانه پی جوری کو",
+ "searchprofile-everything-tooltip": "همه مینونه یا نه پی جوری كو (شاملا بلگيا چك چنه)",
"searchprofile-advanced-tooltip": "نوم جايا نوم ديار بگرد",
"search-result-size": "$1 ({{جمی:$2|1 کلیمه|$2 کلیمه یا}})",
"search-result-category-size": "{{جمی:$1|1 اندوم|$1 اندومیا}} ({{جمی:$2|1 زیردسه|$2 زیردسه یا}}, {{جمی:$3|1 جانیا|$3 جانیایا}}",
"search-redirect": "(ورگشتن $1)",
- "search-section": "(بشق $1)",
+ "search-section": "(بهرجا $1)",
+ "search-category": "(دسه $1)",
"search-file-match": "(یکی کردن مینونه جانیا)",
"search-suggest": "منظورت يه بی:$1",
"search-interwiki-caption": "پروجه یا خوئر",
@@ -848,9 +866,9 @@
"showingresults": "نمائشت بیشترونه {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} د هار، شرو د شماره'''$2'''.",
"showingresultsinrange": "نمائشت بیشترونه {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} د هار، شرو د شماره'''$2''' تا شماره '''$3'''.",
"search-showingresults": "{{PLURAL:$4|نتیجه یا<strong>$1</strong> د <strong>$3</strong>|نتیجه یا<strong>$1 - $2</strong د <strong>$3</strong>}}",
- "search-nonefound": "هیژ نتیجه یی سی پی جست تو مطاوقت نکرده",
- "powersearch-legend": "پی جوری پیشبرده",
- "powersearch-ns": "نوم جايا نوم ديار بگرد:",
+ "search-nonefound": "هیژ نتیجه یی وا پی جست تو یکی نئ.",
+ "powersearch-legend": "پی جوری پیشکرده",
+ "powersearch-ns": "د نوم جايا نوم ديار پی جوری بک:",
"powersearch-togglelabel": "چك كردن:",
"powersearch-toggleall": "همه",
"powersearch-togglenone": "هيش كوم",
@@ -859,31 +877,36 @@
"searchdisabled": "مئن جوری د {{SITENAME}} کنشتگر نئ.\nموقتاً می تونیت مئن جوری Google نه بونیت وه کار.\nد ویرتو با که نتیجه یایی که د مئن جوری وا او روشت وه دست میان شایت وه روز نبان.",
"search-error": "یه گل خطا سی اوسنی که پی جوری می کردیت اتفاق افتائه:$1",
"preferences": "خصوصيات هنی",
- "mypreferences": "خصوصيات هنی",
+ "mypreferences": "چیا هنی",
"prefs-edits": "شماره ویرایشتا:",
"prefsnologintext2": "لطف بکیت بیایت وامین و ترجیحات خوتونه آلشت بئیت.",
- "prefs-skin": "پوست",
+ "prefs-skin": "پوس",
"skin-preview": "پیش سیل",
"datedefault": "هیچ ترجیحات دش نئ",
- "prefs-labs": "گزینشتیا آزمایشتی",
- "prefs-user-pages": "بلگیا كارور",
- "prefs-personal": "پروفایل کارور",
+ "prefs-labs": "گزینشتیا ازماشتی",
+ "prefs-user-pages": "بلگه یا کاریار",
+ "prefs-personal": "پروفایل کاریار",
"prefs-rc": "آلشتیا تازه باو",
"prefs-watchlist": "سیل برگ",
+ "prefs-editwatchlist": "ویرایشت سیل برگ",
+ "prefs-editwatchlist-label": "داده یا نه د سیل برگ خوتو ویرایشت بکیت:",
+ "prefs-editwatchlist-edit": "داسونانه سیل بکیت و ونونه د سیل برگ خوتو ورداریت",
+ "prefs-editwatchlist-raw": "ویرایشت ردیفی سیل برگ",
+ "prefs-editwatchlist-clear": "سیل برگه تونه پاک بکیت",
"prefs-watchlist-days": "روزیا نه د سیل برگ نشو دئه بو:",
"prefs-watchlist-days-max": "$1 بیشترونه {{جمی:$1|روز|روزیا}}",
"prefs-watchlist-edits": "بیشترونه انازه آلشتیایی که د سیل برگ گپ بیه نشو دئه بیه:",
"prefs-watchlist-edits-max": "شماره بیشترونه:1000",
"prefs-watchlist-token": "نشونه سیل برگ:",
"prefs-misc": "شيوسن",
- "prefs-resetpass": "پاسورد نه آلشت بكيت",
- "prefs-changeemail": "نشونی ایمیل تو نه آلشت بکید",
- "prefs-setemail": "يه گل ايميل بنیت",
+ "prefs-resetpass": "رازینه گواردن نه آلشت بكيت",
+ "prefs-changeemail": "تیرنشون انجومانامه تو نه آلشت بکید",
+ "prefs-setemail": "يه گل انجومانامه بنیت",
"prefs-email": "چیا هنی انجومانامه",
"prefs-rendering": "شلک و ری",
"saveprefs": "اماییه كردن",
"restoreprefs": "د نو زنه کردن همه میزونکاریا پیش فرض(د همه جایا)",
- "prefs-editing": "د حالت ويرايشت",
+ "prefs-editing": "د حال و بال ویرایشت",
"rows": "رديفيا:",
"columns": "ستينا:",
"searchresultshead": "پی جوری",
@@ -895,11 +918,11 @@
"prefs-help-recentchangescount": "یه شامل آلشتیا تازه،ویرگاریا بلگه و پهرستنومه یا هئ.",
"prefs-help-watchlist-token2": "یه یه گل کلیت رازینه دار سی خوارک تیارگه سیل برگه شمانه.\nهر کسی که شما مئشناسیت می تونه سیل برگ شما نه بوحونه،په ونه هومبئری نکیت.[[Special:ResetTokens|ار لازمه ونه آلشت بئیت ایچه نه بپورنیت]].",
"savedprefs": "ویجه گیا هنی تو اماییه بیه.",
- "timezonelegend": "وخت راساگه",
- "localtime": "وخت ولاتی:",
- "timezoneuseserverdefault": "وخت راساگه",
+ "timezonelegend": "گات راساگه",
+ "localtime": "گات ولاتی:",
+ "timezoneuseserverdefault": "ویکی پیش فرض($1) وه کار بونیت",
"timezoneuseoffset": "هنی",
- "servertime": "وخت سرور:",
+ "servertime": "گات رسینه جا:",
"guesstimezone": "وا جاگرد پر بوئه",
"timezoneregion-africa": "افرقا",
"timezoneregion-america": "امركا",
@@ -911,46 +934,46 @@
"timezoneregion-europe": "اوروپا",
"timezoneregion-indian": "جهوناو هند",
"timezoneregion-pacific": "جهوناو آروم",
- "allowemail": "ایمیل سی کاروریا هنی فعال کو",
+ "allowemail": "انجومانامه نه سی کاریاریا هنی کنشتگر کو",
"prefs-searchoptions": "پی جوری",
"prefs-namespaces": "نوم جایا",
"default": "پيش فرض",
- "prefs-files": "فايلا",
+ "prefs-files": "جانیایا",
"prefs-custom-css": "سی اس اس جاافتائه",
"prefs-custom-js": "جاوا نیسسه جاافتائه",
"prefs-common-css-js": " سی اس اس/جاوا اسکریپت بهر بیه سی همه پوسه یا:",
"prefs-reset-intro": "شما می تونیت ای بلگه سی د نو زنه کردن ترجیحات خوت وه شکل تیارگه پیش فرض وه کار بوونیت.\nیه ورئشت پذیر نئ.",
- "prefs-emailconfirm-label": "مئکم کردن ایمیل:",
- "youremail": "ايميل:",
- "username": "{{جنس:$1|نوم کاروری}}:",
+ "prefs-emailconfirm-label": "پش راست کردن انجومانامه:",
+ "youremail": "انجومانامه:",
+ "username": "{{جنس:$1|نوم کاریاری}}:",
"prefs-memberingroups": "{{جنس:$2|اندوم}} {{جمی:$1|گرویا|گرویا}}:",
"prefs-memberingroups-type": "$1",
- "prefs-registration": "موقع ثوت نام:",
+ "prefs-registration": "گات ثوت نام:",
"prefs-registration-date-time": "$1",
"yourrealname": "نوم راستكی:",
"yourlanguage": "زون:",
- "yourvariant": "محتوا آلشتگر زون:",
+ "yourvariant": "مینونه آلشتگر زون:",
"prefs-help-variant": "قسه وری انتخاوی شما سی نمائشت مینونه بلگه یا د ای ویکی.",
"yournick": "امضا تازه:",
"prefs-help-signature": "ویر و باوریا نیسسه بیه د بلگه چک چنه باید وا«<nowiki>~~~~</nowiki>» امضا بان؛ ای نشون وه شکل خودانجومی وه امضا شما و مؤر ویرگار تبدیل بوئه.",
"badsig": "امضا خؤم بی اعتوار.\nسردیسیا اچ تی ام ال نه وارسی بکیت.",
- "badsiglength": "امضا شما فره گپه.\nطیل امضا باید کمتر د $1 {{PLURAL:$1|نیسه}} بوئه.",
+ "badsiglength": "امضا شما فره گپه.\nدرازا امضا باید کمتر د $1 {{PLURAL:$1|نیسه}} بوئه.",
"yourgender": "شما بیشتر میهایت که چه جوری گوته بوئه؟",
"gender-unknown": "مه میهام چی یی نموئم",
"gender-male": "وه(پیا) بلگه یا ویکی نه ویرایشت می که",
"gender-female": "وه(زئنه)بلگه یا ویکی نه ویرایشت می که",
"prefs-help-gender": "انجوم دئن ای میزونکاری دل به هاییه.\nنرم افزار سی هشاره درست وه جنسیت و گوتن شما سی کسونا تر د شکل درست وه کار بسن یه گل دستور زون یه نه وه کار می بنه.\nای دونسمنیا سی کل خلک دیارن.",
- "email": "پیومک برقی",
- "prefs-help-realname": "نوم راستکی دل به حائه.\nار شما ونه وارد بکیت د گات واگردونی وه آرنگیاتو و نسوت دئن ونو وه خوتو د نوم راستکی استفاده بوئه.",
- "prefs-help-email": "نشونی ایمیل اختیاری هئ.اما سی بازجست پاسورد دش نیاز بوئه.شما باید پاسوردتونه د ویر بوریت",
- "prefs-help-email-others": "شما می تونید سی پیوند گرتن تو وا نهایین ایمیل مئن یه هوم پیوند د بلگه کاروری یا بلگه چک چنه تو انتخاو بکید.\nنشونی ایمیلتو وختی که کاروریا هنی وا تو پیوند می گرن دیار نی.",
- "prefs-help-email-required": "نشونی ایمیل لازم هئ.",
+ "email": "انجومانامه",
+ "prefs-help-realname": "نوم راستکی دل به حائه.\nار شما ونه وارد بکیت د گات واگردونی وه آرنگیاتو و نسوت دئن ونو وه خوتو نوم راستکی وه کار گرته بوئه.",
+ "prefs-help-email": "تیرنشون ایمیل دل بهاییه.اما سی وایافت رازینه گواردن دش میهایتش.شما باید رازینه گواردنتونه د ویر بوریت",
+ "prefs-help-email-others": "شما می تونید سی پیوند گرتن تو وا نهایین انجومانامه مین یه هوم پیوند د بلگه کاریاری یا بلگه چک چنه تو انتخاو بکید.تیرنشون انجومانامه تونه د گاتی که کاریاریا هنی وا تو پیوند می گرن دیار نی.",
+ "prefs-help-email-required": "تیرنشون انجومانامه واس با.",
"prefs-info": "دونسمنیا اولیه",
"prefs-i18n": "جهون ولاتمنی",
"prefs-signature": "امضا",
- "prefs-dateformat": "شلک وخت",
- "prefs-timeoffset": "جا وه جایی زمونی",
- "prefs-advancedediting": "گزینه یا عمومی",
+ "prefs-dateformat": "شلک گات",
+ "prefs-timeoffset": "جا وه جایی گاتی",
+ "prefs-advancedediting": "گزینه یا خلکمنی",
"prefs-editor": "ويرايشتگر",
"prefs-preview": "پیش سیل",
"prefs-advancedrc": "گزینه یا پیشکرده",
@@ -962,45 +985,46 @@
"prefs-tokenwatchlist": "نشو",
"prefs-diffs": "فرخیا",
"prefs-help-prefershttps": "کارگرایی ای ترجیح نها وامین اومائن نهایی شما وه کار گرته بوئه.",
+ "prefswarning-warning": "آلشتیا شما ری ترجیحاتتو هنی اماییه نبیه.\nار ای بلگه نه بی یه که ری \"$1\" بپورنیت ول بکیت ترجیحیا شما اماییه نبوئن.",
"prefs-tabs-navigation-hint": "نکته: شما می تونید د کلیتیا لادیار کن چپ و راست نه سی رئتن مین تبیا که هان د نوم گه تبیا وه کار بونیت.",
- "email-address-validity-valid": "نشونی ایمیل دیار بیه خوئه",
- "email-address-validity-invalid": "یه گل نشونی ایمیل خو وارد بکید",
+ "email-address-validity-valid": "تیرنشون انجومانامه دیار بیه خوئه",
+ "email-address-validity-invalid": "یه گل تیرنشون انجومانامه خو وارد بکید",
"userrights": "حقوق دیوونداری کاریار",
"userrights-lookup-user": "دسه یا کاروری نه دیوون داری بکیت",
- "userrights-user-editname": "نوم كاروری ته وارد كو",
- "editusergroup": "ویرایشت گرویا کاروری",
+ "userrights-user-editname": "یه گل نوم کاریاری وارد بکیت:",
+ "editusergroup": "ویرایشت گرویا کاریاری",
"editinguser": "آلشت دئن حقوق کاریاری کاریار'''[[کاریار:$1|$1]]''' $2",
- "userrights-editusergroup": "ویرایشت گرویا کاروری",
+ "userrights-editusergroup": "ویرایشت گرویا کاریاری",
"saveusergroups": "اماییه کردن گرویا کاریاری",
"userrights-groupsmember": "اندوم:",
"userrights-groupsmember-auto": "اندوم ضمنی:",
"userrights-groupsmember-type": "$1",
"userrights-groups-help": "شما می تونیت دسه یای که ای کاریار ها دشو آلشت بئیتو:\n* جعوه نشودار وه ای مئنیه که کاریار ها د او دسه.\n* جعوه بی نشون وه ای مئنیه که کاریار د او دسه نئ.\n* نشون* د ای مئنیه که ار شما او دسه نه اضاف بکیتو د نهاتر نموئه ؤردارینش یا برعسگش.",
"userrights-reason": "دليل:",
- "userrights-no-interwiki": "شما سی ویرایشت حقوق کارور د ویکی یا هنی دسرسی ناریت.",
+ "userrights-no-interwiki": "شما سی ویرایشت حقوق کاریار د ویکی یا هنی دسرسی ناریت.",
"userrights-nodatabase": "پاگا دونسمنی $1 یا نیئش یا د ولاتنشین نئ.",
"userrights-nologin": "شما باید وا یه گل حساو کاریاری دیووندار [[Special:UserLogin|روئیت وامین ]] تا تونستوییت حقوق کاریاری کاریار نه گماشته کاری بکیت.",
- "userrights-notallowed": "شما سی اضاف کردن حقوق کارور یا ورداشتنش دسرسی ناریت.",
+ "userrights-notallowed": "شما سی اضاف کردن حقوق کاریار یا ورداشتنش دسرسی ناریت.",
"userrights-changeable-col": "گرویایی که شما تونیت ویرایشت بکید",
"userrights-unchangeable-col": "گرویایی که شما نتونیت ویرایشت بکید",
"userrights-irreversible-marker": "$1*",
"userrights-conflict": "تعارض دسرسیا کاریاری! لطف بکیت یه گل وارسی انجوم بئیت و آلشتانه پشت راس بکیت.",
"userrights-removed-self": "شما د خوئی حقوق خوتونه ؤرداشتیته، چی یه که مثلا شما تر نمی تونیت وه ای بلگه دسرسی داشتویت.",
"group": "گرو",
- "group-user": "کاروریا",
- "group-autoconfirmed": "کاروریا خودوادار",
+ "group-user": "کاریاریا",
+ "group-autoconfirmed": "کاریاریا خود پش راست بیه",
"group-bot": "بتیا",
- "group-sysop": "مدیریا",
+ "group-sysop": "دیوونداریا",
"group-bureaucrat": "بروکراتیا",
"group-suppress": "تیه پایا",
"group-all": "(همه)",
- "group-user-member": "{{جنس:$1|کارور}}",
+ "group-user-member": "{{جنس:$1|کاریار}}",
"group-autoconfirmed-member": "{{جنس:$1|کاریار خودانجومکار}}",
"group-bot-member": "{{حنس:$1|بوت}}",
- "group-sysop-member": "{{جنس:$1|مدیر}}",
+ "group-sysop-member": "{{جنس:$1|دیووندار}}",
"group-bureaucrat-member": "{{جنس:$1|بروکرات}}",
"group-suppress-member": "{{جنس:$1|تیه پا}}",
- "grouppage-user": "{{ns:project}}:کاروریا",
+ "grouppage-user": "{{ns:project}}:کاریاریا",
"grouppage-autoconfirmed": "{{ns:project}}:کاریار خودانجومکار",
"grouppage-bot": "{{ns:project}}:بوت یا",
"grouppage-sysop": "{{ns:project}}:دیوونداریا",
@@ -1016,19 +1040,19 @@
"right-move-subpages": "بلگه یا و زیر بلگه یا شونه جا وه جا کو",
"right-move-rootuserpages": "بلگه یا ریشه ای کارور نه جا وه جا کو",
"right-move-categorypages": "دسه بلگه یا نه جا وه جا بکیت",
- "right-movefile": "فایلیا نه جا وه جا کو",
+ "right-movefile": "جانیایا نه جا وه جا کو",
"right-suppressredirect": "اوسه که بلگه یا د بین رئتنه هیچ واگردونی سی بلگه یا سرچشمه دروس نبیه",
- "right-upload": "سوار کردن فايلا",
+ "right-upload": "سوار کردن جانیایا",
"right-reupload": "سوارکرد هنی جانیایی که دماتر بئیشه",
"right-reupload-own": "سوارکرد هنی جانیایی که د دماتر وه دس همو کاریار سوارکرد بیه.",
"right-reupload-shared": "باطل‌کردن ولات نشینی جانیایا هومبئر بیه",
- "right-upload_by_url": "سوار کرد فایلیا د یو آر ال",
+ "right-upload_by_url": "سوار کرد جانیایا د یو آر ال",
"right-purge": "پاک کردن مینجاگر بلگه بی یه که بلگه پشت راس کردن دیاری بکه",
"right-autoconfirmed": "د محدودیتیا سرعت آی پی-پایه کارگرایی ناره",
"right-bot": "باور بیه چی یه گل پردازشت خودانجوم",
"right-nominornewtalk": "حیرده ویرایشت بلگه یا چک چنه وه شکلی که باعث گوتن پیغوم تازه نبوئه.",
"right-apihighlimits": "سخم بالاتر د وه کار بسن API",
- "right-writeapi": "د نیسنن ای پی آی استفاده بکید",
+ "right-writeapi": "د نیسنن ای پی آی وه کار بئیریت",
"right-delete": "بلگیا نه پاکسا کو",
"right-bigdelete": "بلگه یایی که ویرگار گپی دارن پاکسا بکیت",
"right-deletelogentry": "پاکسا کردن و ناپاکسا کردن داده واریایی ویجه ای د پهرستنومه",
@@ -1036,7 +1060,7 @@
"right-deletedhistory": "دیئن چیا پاکسا بیه د ویرگار، بی یه که نیسسه ونونه بؤنیت.",
"right-deletedtext": "دیئن نیسسه پاکسا بیه و آلشتیایی که هان مینجا وانئریا پاکسا بیه",
"right-browsearchive": "بلگه یا پاک بیه نه پی جوری کو",
- "right-undelete": "ای بلگه نه حذف نكيد",
+ "right-undelete": "ای بلگه نه پاکسا نكيد",
"right-suppressrevision": "دیئن و زنه کردن وانئریایی بلگه یایی که د دس کاریاریا نهو بینه",
"right-viewsuppressed": "دیئن وانئریایی که د تیه هر کاریاری قام بیه",
"right-suppressionlog": "دیئن پهرستنومه یا خصوصی",
@@ -1049,16 +1073,17 @@
"right-protect": "آلشت دئن انازه پر و پیم کردن بلگه یا و ویرایشت بلگه یا پر و پیم بیه تافی",
"right-editprotected": "ویرایشت بلگه یا پر و پیم بیه چی «{{int:protect-level-sysop}}»",
"right-editsemiprotected": "ویرایشت بلگه یا پر و پیم بیه چی «{{int:protect-level-autoconfirmed}}»",
- "right-editinterface": "راوط کارور نه ویرایشت کو",
- "right-editusercssjs": "فایلیا جاوا اسکریپت و سی اس اس کاروریا هنی نه ویرایشت کو",
- "right-editusercss": "فایلیا سی اس اس کاروریا هنی نه ویرایشت کو",
- "right-edituserjs": "فایلیا جاوا اسکریپت کاروریا هنی نه ویرایشت کو",
- "right-editmyusercss": "فایلیا سی اس اس کارور خوتو نه ویرایشت کو",
- "right-editmyuserjs": "فایلیا جاوا اسکریپت کارور خوتو نه ویرایشت کو",
+ "right-editcontentmodel": "ویرایشت مدل مینونه یه گل بلگه",
+ "right-editinterface": "راوط کاریار نه ویرایشت کو",
+ "right-editusercssjs": "جانیایا جاوا اسکریپت و سی اس اس کاریاریا هنی نه ویرایشت کو",
+ "right-editusercss": "جانیایا سی اس اس کاریاریا هنی نه ویرایشت کو",
+ "right-edituserjs": "جانیایا جاوا اسکریپت کاریاریا هنی نه ویرایشت کو",
+ "right-editmyusercss": "جانیایا سی اس اس کاریار خوتو نه ویرایشت کو",
+ "right-editmyuserjs": "جانیایا جاوا اسکریپت کاریار خوتو نه ویرایشت کو",
"right-viewmywatchlist": "سیل برگ خوتونه بوینیت",
"right-editmywatchlist": "سیل برگ خوتونه ویرایشت بکیت. د ویرتو با که پاره ای د انجومکاریا بی دسرسی ئم می تونن ای بلگه یا نه اضافه بکن.",
- "right-viewmyprivateinfo": "دونسمنیا شصقی خوتونه بوینیت(چی نشونی ایمیل،نوم راستکی)",
- "right-editmyprivateinfo": "دونسمنیا شصقی خوتونه ویرایشت بکید(چی نشونی ایمیل،نوم راستکی)",
+ "right-viewmyprivateinfo": "دونسمنیا شصقی خوتونه بوینیت(چی تیرنشون انجومانامه،نوم راستکی)",
+ "right-editmyprivateinfo": "دونسمنیا شصقی خوتونه ویرایشت بکید(چی تیرنشون انجومانامه،نوم راستکی)",
"right-editmyoptions": "اولویتیا تونه ویرایشت بکیت",
"right-rollback": "چواشه کردن سریع ویرایشتیا آخری کاریاری که یه بلگه ویجه نه ویرایشت دئه",
"right-markbotedits": "نشودار کردن ویرایشتیا چواشه بیه چی ویرایشتیا یه گل بات",
@@ -1070,68 +1095,71 @@
"right-patrolmarks": "دیئن سردیس سردیاری کردن د آلشتیا ایسنی",
"right-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه",
"right-mergehistory": "وه یک شیوسن ویرگار ای بلگه",
- "right-userrights": "حقوق همه کاروریانه ویرایشت بکید",
- "right-userrights-interwiki": "حقوق همه کاروریانه د ویکی یا هنی ویرایشت بکید",
+ "right-userrights": "حقوق همه کاریاریانه ویرایشت بکید",
+ "right-userrights-interwiki": "حقوق همه کاریاریانه د ویکی یا هنی ویرایشت بکید",
"right-siteadmin": "پاگا دونسمنی نه قلف بکید یا نکید",
"right-override-export-depth": "وه در دئن بلگه یایی که بلگه یا هوم پیوند بیه تا پی یا 5 ها دشو",
- "right-sendemail": "سی کاروریا هنی ایمیل کل بکید",
- "right-passwordreset": "پاسورد ایمیلیا د نو دئه بیه نه بوینیت",
- "newuserlogpage": "راس بیه وا کارور",
- "newuserlogpagetext": "یه پهرستنومه راس بیئن کارور هئ.",
+ "right-sendemail": "سی کاریاریا هنی انجومانامه کل بکید",
+ "right-passwordreset": "رازینه گواردن انجومانامه د نو دئه بیه نه بوینیت",
+ "right-managechangetags": "راس کردن[[Special:سردیسیا|سردیسیا]] پاکسا کردن د رسینه جا",
+ "newuserlogpage": "راس بیه وا کاریار",
+ "newuserlogpagetext": "یه پهرستنومه راس بیئن کاریاره",
"rightslog": "پهرستنومه حقوق کاریار",
- "rightslogtext": "یه پهرستنومه آلشتیا حقوق کارور هئ.",
- "action-read": "ای بلگه نه بحون",
+ "rightslogtext": "یه پهرستنومه آلشتیا حقوق کاریاره.",
+ "action-read": "ای بلگه نه بحو",
"action-edit": "ای بلگه نه ويرايشت بكيد",
"action-createpage": "راس کردن بلگیا",
"action-createtalk": "بلگه یا چک چنه نه راس بکید",
- "action-createaccount": "حساو ای کارور نه راس بکید",
+ "action-createaccount": "حساو ای کاریار نه راس بکید",
"action-history": "ویرگار ای بلگه نه بوینیت",
"action-minoredit": "ای ویرایشت نه چی یه حیرده ویرایشت نشو بیئت",
"action-move": "لی بلگه جا وه جا کو",
"action-move-subpages": "ای بلگه و زیر بلگه یاشه جا وه جا بکید",
- "action-move-rootuserpages": "بلگه یا ریشه ای کارور نه جا وه جا بکید",
+ "action-move-rootuserpages": "بلگه یا ریشه ای کاریار نه جا وه جا بکید",
"action-move-categorypages": "جا وه جا کردن دسه بلگه یا",
- "action-movefile": "ای فایل جا وه جا بکید",
- "action-upload": "ای فایل سوار بکید",
+ "action-movefile": "ای جانیا نه جا وه جا بکید",
+ "action-upload": "ای جانیا نه سوار بکید",
"action-reupload": "نیسئین ری جانیا ایسنی",
"action-reupload-shared": "باطل کردن ای جانیا ری یه گل گنجینه هومبئر",
- "action-upload_by_url": "ای فایله نه د یو آر ال سوار بکید",
+ "action-upload_by_url": "ای جانیا نه د یو آر ال سوار بکید",
"action-writeapi": "د نیسنن ای پی آی استفاده بکید",
"action-delete": "ای بلگه نه پاکسا کو",
- "action-deleterevision": "ای بازدئین پاک کو",
+ "action-deleterevision": "ای وانئری نه پاک کو",
"action-deletedhistory": "ویرگار پاکسا بیه ای بلگه نه بوینیت",
"action-browsearchive": "بلگه یا پاک بیه نه پی جوری بکید",
"action-undelete": "ای بلگه نه پاک نکو",
"action-suppressrevision": "وانئری و زنه کردن وانئریا پاک بیه",
"action-suppressionlog": "ای پهرستنومه خصوصی نه بوینیت",
- "action-block": "ای کارور نه د ویرایشت کردن منع کو",
- "action-protect": "ریترازیا حفاظت د ای بلگه نه آلشت بکید",
+ "action-block": "ای کاریار نه د ویرایشت کردن نهاگری کو",
+ "action-protect": "ریترازیا پر و پیم کاری د ای بلگه نه آلشت بکید",
"action-rollback": "چواشه کردن سریع ویرایشتیا آخری کاریاری که یه بلگه ویجه نه ویرایشت دئه",
"action-import": "بلگه یا نه د ویکی هنی وارد بکید",
- "action-importupload": "بلگه یا نه د فایل سوار بیه وارد بکید",
+ "action-importupload": "بلگه یا نه د جانیا سوار بیه وارد بکید",
"action-patrol": "سردیاری کردن د ویرایشتیا کسونا تر",
"action-autopatrol": "سردیاری کردن د ویرایشتیا خوتو",
"action-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه",
"action-mergehistory": "وه یک شیوسن ویرگار ای بلگه",
- "action-userrights": "حقوق همه کاروریانه ویرایشت بکید",
- "action-userrights-interwiki": "حقوق همه کاروریانه د ویکی یا هنی ویرایشت بکید",
- "action-siteadmin": "پاگا دونسمنی نه قلف بکید یا نکید",
- "action-sendemail": "ایمیلیانه کل کو",
+ "action-userrights": "حقوق همه کاریاریا نه ویرایشت بکید",
+ "action-userrights-interwiki": "حقوق همه کاریاریانه د ویکی یا هنی ویرایشت بکید",
+ "action-siteadmin": "رسینه جا نه قلف بکید یا نکید",
+ "action-sendemail": "انجومانامه یا نه کل کو",
"action-editmywatchlist": "سیل برگ خوتونه ویرایشت بکید",
"action-viewmywatchlist": "سیل برگ خوتونه بوینیت",
"action-viewmyprivateinfo": "دونسمنیا خوتونه بوینیت",
"action-editmyprivateinfo": "دونسمنیا شصقی خوتونه ویرایشت بکید",
+ "action-editcontentmodel": "ویرایشت مدل مینونه یه گل بلگه",
+ "action-managechangetags": "راس کردن و پاکسا کردن سردیسیا د رسینه جا",
"nchanges": "$1 {{جمی:$1|آلشت|آلشتیا}}",
"enhancedrc-since-last-visit": "$1 {{جمی:$1|د آخری دیئن}}",
"enhancedrc-history": "ويرگار",
- "recentchanges": "تغيريا تازه",
- "recentchanges-legend": "گزينه يا آلشتيا تازه",
+ "recentchanges": "آلشتیا ایسنی",
+ "recentchanges-legend": "گزینه یا آلشتیا ایسنی",
"recentchanges-summary": "دو بیشتر آلشتیا تازباو نه د ویکی نه د ای بلگه پیگری کو.",
- "recentchanges-noresult": "هیژ آلشتی د طیل دوره دیار بیه وا ای معیاریا یکی نبی.",
+ "recentchanges-noresult": "هیژ آلشتی د درازا دوره دیار بیه وا ای معیاریا یکی نبی.",
"recentchanges-feed-description": "دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.",
"recentchanges-label-newpage": "ای ويرايشت يه بلگه تازه راس كرده",
"recentchanges-label-minor": "يه ويرايشت كؤچكيه",
- "recentchanges-label-bot": "ای ويرايشت نه يه بوت انجوم ديئه",
+ "recentchanges-label-bot": "ای ويرايشت نه يه بوت انجوم دئه",
"recentchanges-label-unpatrolled": "ای ويرايشت هنی تيه واداشت نبيه",
"recentchanges-label-plusminus": "انازه بلگه وه شمار ای بایتیا آلشت کرده.",
"recentchanges-legend-heading": "'''میراث:'''",
@@ -1145,10 +1173,10 @@
"rcshowhidebots": "$1 رواتيا یا بوتيا",
"rcshowhidebots-show": "نشو دئن",
"rcshowhidebots-hide": "قام کردن",
- "rcshowhideliu": "$1 کاروريا ثوت نام کرده",
+ "rcshowhideliu": "$1 کاریاریا ثوت نام کرده",
"rcshowhideliu-show": "نشو دئن",
"rcshowhideliu-hide": "قام کردن",
- "rcshowhideanons": "$1 کاروريا ناشناس",
+ "rcshowhideanons": "کاریار نادیار $1",
"rcshowhideanons-show": "نشو دئن",
"rcshowhideanons-hide": "قام کردن",
"rcshowhidepatr": "$1 ویرایشتیا تیه پرس بیه",
@@ -1161,7 +1189,7 @@
"diff": "فرخ",
"hist": "ويرگار",
"hide": "قام كردن",
- "show": "نشون دائن",
+ "show": "نشو دئن",
"minoreditletter": "م",
"newpageletter": "ن",
"boteditletter": "ب",
@@ -1171,19 +1199,19 @@
"rc_categories_any": "هرکوم",
"rc-change-size": "$1",
"rc-change-size-new": "$1 {{جمی:$1|بایت|بایتیا}} نها آلشت",
- "newsectionsummary": "/* $1 */ بخش تازه",
+ "newsectionsummary": "/* $1 */ بهرجا تازه",
"rc-enhanced-expand": "جزيات نشون بيئه",
"rc-enhanced-hide": "جزياته قام كو",
"rc-old-title": "ذاتا چی \"$1\" راس بیه",
- "recentchangeslinked": "تغيريا مرتبط",
- "recentchangeslinked-feed": "آلشتیا مرتبط",
- "recentchangeslinked-toolbox": "تغيريا مرتبط",
- "recentchangeslinked-title": "آلشتيا مرتوط وا $1",
+ "recentchangeslinked": "آلشتیا تی یکی",
+ "recentchangeslinked-feed": "آلشتیا تی یکی",
+ "recentchangeslinked-toolbox": "آلشتیا ته یک",
+ "recentchangeslinked-title": "آلشتیا تی یکی د $1",
"recentchangeslinked-summary": "ای نوم گه تازه د بلگیایی که وا بلگیا ویجه هوم پیوند بینه آلشت بیه(یا سی اندومیا دسه بنی بیه)\nبلگیا یی که هان [[Special:Watchlist|your watchlist]]و گپ بینه",
"recentchangeslinked-page": "نوم بلگه:",
"recentchangeslinked-to": "آلشتیایی که د بلگه یا هوم پیوند بینه وه جا بلگه دئیه بیه نشو بیه",
- "upload": "بلم گير كردن فايلا",
- "uploadbtn": "سوار کردن فایل",
+ "upload": "سوار کردن جانیا",
+ "uploadbtn": "سوار کردن جانیا",
"reuploaddesc": "سوار کردن نه انجوم شیو بکیت و د ورئردیت جابلگ سوارکرد",
"upload-tryagain": "کل کردن توضیحیا آلشت دئیه بیه جانیا",
"uploadnologin": "وارد نبیه",
@@ -1198,10 +1226,10 @@
"upload-prohibited": "جورا جانیا مجاز:$1.",
"uploadlogpage": "سوارکرد",
"uploadlogpagetext": "نومگه هاری یه گل نومگه د آخری سوارکرد جانیایا هئ.\nسی د نو سیل کردن[[Special:NewFiles|عسگدونی جانیایا تازه نه]] به ونیت.",
- "filename": "نوم فایل",
+ "filename": "نوم جانیا",
"filedesc": "چكسته",
"fileuploadsummary": "چکسه",
- "filereuploadsummary": "آلشتیا فایل:",
+ "filereuploadsummary": "آلشتیا جانیا:",
"filestatus": "حال و بال کپی رایت",
"filesource": "سرچشمه:",
"ignorewarning": "تیه پوشی د زئنار و اماییه کردن جانیا",
@@ -1210,19 +1238,19 @@
"illegalfilename": "نوم جانیا «$1» د وه گیرنه نیسه یایی که د نوم بلگه یا صاحاو اجاره نیئن.\nلطفن نوم جانیا نه آلشت بئیت و ونه د نو نوم بنیت.",
"filename-toolong": "نوم جانیا شایت گپتر د 240 بایت نبا.",
"badfilename": "نوم جانیا د \"$1\" آلشت بیه.",
- "filetype-mime-mismatch": "دماون جانیا «$1.‎» وا نوع MIME وه($2) یکی نئ.",
+ "filetype-mime-mismatch": "دمادیس جانیا «$1.‎» وا نوع MIME وه($2) یکی نئ.",
"filetype-badmime": "جانیایی که نوع MIME ونو $1 بوئه سی سوارکرد اجازه دار نیئن.",
"filetype-bad-ie-mime": "نبوئه ای جانیانه سوار بکیت سی یه که اینترنت اکسپلورر ونه چی «$1» میشناسه، سی یه که وه یه گل جانیا ناصلادار و شات خطردار با.",
"filetype-unwanted-type": "'''«‎.‎$1»''' یه گل جانیا حاستنی نئ.\n{{PLURAL:$3|جانیا ورتیه گر|جانیایا ورتیه گر}} د ای قرارن: $2 .",
"filetype-banned-type": "&lrm;'''\".$1\"''' {{PLURAL:$4|یه گل جانیا ناصلاداره|جانیایایی که صلادار نیئن}}.\n{{PLURAL:$3|جانیا صلادار|جانیایا صلادار}} د ای قرارن: $2.",
"filetype-missing": "ای جانیا هیچ اضاف کردی ناره(چی \"جی پی جی\")",
- "empty-file": "فایلی که دئی ته حالی بیه.",
- "file-too-large": "فایلی که دئی ته فره گپ بی.",
- "filename-tooshort": "نوم فایل فره کؤچکه.",
+ "empty-file": "جانیایی که دئی ته حالی بیه.",
+ "file-too-large": "جانیایی که دئی ته فره گپ بی.",
+ "filename-tooshort": "نوم جانیا فره کؤچکه.",
"filetype-banned": "چنی جانیا قدقه بیه.",
"verification-error": "جانیا د ازمایشت پشت راسگری نگوارد.",
"hookaborted": "آلشتی که میهاستیت دروس بکیت وا یه گل قلاو اضاف کرد انجوم نگرت.",
- "illegal-filename": "نوم فایل اجاره ندئه بیه.",
+ "illegal-filename": "نوم جانیا صلا ندئه ئه.",
"overwrite": "نیسنن ری یه گل جانیایی که هیئش صلا ندئه بیه",
"unknown-error": "یه گل خطا نادیار ری ون کرده.",
"tmp-create-error": "نبوئه جانیا موقتی نه راس بکیتو.",
@@ -1246,17 +1274,17 @@
"savefile": "جانیا نه اماییه کو",
"uploaddisabled": "سوار کردن د کار نئ.",
"copyuploaddisabled": "سوار کردن وا یو آر ال د کار نئ.",
- "uploaddisabledtext": "سوار کرد فایلیا د کار نئ.",
+ "uploaddisabledtext": "سوار کرد جانیایا د کار نئ.",
"php-uploaddisabledtext": "سوارکرد جانیایا د پی اچ پی ناکشتگر بیه.\nلطفن میزونکاری سوارکرد جانیا نه وارسی بکیت.",
"uploadscripted": "ای بلگه مینونه دار رازینه اچ تی امل یا نیسسه یه که شایت وه ناخوشی وا دوراته نیئر واشکافت با.",
"uploadscriptednamespace": "ای جانیا اس‌ وی‌ جی نوم جا غیرقانونی '$1' داره.",
"uploadinvalidxml": "ایکس ام الی که سوار بیه نبوئه نوتیج با.",
"uploadvirus": "د ای جانیا ویروس هئ!\nجزیات:$1",
"uploadjava": "ای جانیا یه گل جانیا زیپه که مینونه دار جانیایی د نوع کلاس جاوائه.\nسوارکردن جانیایا جاوا قدقن بیه، سی یه که شایت ونو صلا دور زئن محدودیتیا امنیتی نه بی ئن.",
- "upload-source": "سرچشمه فایل",
+ "upload-source": "سرچشمه جانیا",
"sourcefilename": "سرچشمه نوم جانیا:",
"sourceurl": "سرچشمه يو آر ال:",
- "destfilename": "نوم فایل مقصد:",
+ "destfilename": "نوم جانیا مقصد:",
"upload-maxfilesize": "بیشترونه انازه جانیا:$1",
"upload-description": "شرح جانیا",
"upload-options": "گزینه یا سوارکرد",
@@ -1268,11 +1296,11 @@
"upload-failure-subj": "مشگل د سوارکردن",
"upload-failure-msg": "یه گل مشلگل د سوارکردتو سی [$2] بی:$1",
"upload-warning-subj": "هشدار سوارکرد",
- "upload-warning-msg": "د نوم بلگه سوارکرد مشگلی بی [$2]. شما می تونیت د[[Special:Upload/stash/$1|نوم بلگه سوارکرد]] ؤیرذیت تا ای مشگل نه برطرف بکیت.",
+ "upload-warning-msg": "د نوم بلگه سوارکرد مشگلی بی [$2]. شما می تونیت د[[Special:Upload/stash/$1|نوم بلگه سوارکرد]] ؤیرئیت تا ای مشگل نه برطرف بکیت.",
"upload-proto-error": "پروتکل نادروس",
"upload-proto-error-text": "سوارکرد د د دیرادیر ائتیاج وه تیرنشونیایی داره که وا <code dir=ltr>http://</code> یا <code dir=ltr>ftp://</code> شرو بان.",
"upload-file-error": "خطا مینونه",
- "upload-file-error-text": "گات تلاش سی راس کردن یه گل جانیا موقتی د سرور یه گل خطا مینونه پیش اومائه.\nلطفن وا یه گل [[Special:ListUsers/sysop|دیووندار]] تماس بئریت.",
+ "upload-file-error-text": "گات تلاش سی راس کردن یه گل جانیا موقتی د رسینه جا یه گل خطا مینونه پیش اومائه.\nلطفن وا یه گل [[Special:ListUsers/sysop|دیووندار]] تماس بئریت.",
"upload-misc-error": "خطا سوار کرد ناشناخته",
"upload-misc-error-text": "د گات سوارکرد خطایی نادیاری پیش اومائه.\nلطف بکیت یه دل بایت که تیرنشون اینترنتی خو و د دسرسه و هنی تلاش بکیت.\nار مشگل هنی بیئش وا یه گل [[Special:ListUsers/sysop|دیوونداریا]] تماس بئیریت.",
"upload-too-many-redirects": "ای یو آر ال د ورگیرنه واگردونیا فرئی هئ",
@@ -1280,7 +1308,7 @@
"upload-copy-upload-invalid-domain": "ورداشتن سوارکردیا د ای پوشگئر د دسرس نئ.",
"backend-fail-stream": "نبوئه جانیا\"$1\" کل بوئه.",
"backend-fail-backup": "نبوئه سی \"$1\" پشتجا گرت.",
- "backend-fail-notexists": "فایل $1 وجود ناره.",
+ "backend-fail-notexists": "جانیا $1 وجود ناره.",
"backend-fail-hashes": "گرتن هش یا جانیا سی ری به ری یک نیاین د خوئی انجوم نگرت.",
"backend-fail-notsame": "جانیا ناهمتایی ها د $1 .",
"backend-fail-invalidpath": "\"$1\" ره خوئی سی امائیه کردن نئ.",
@@ -1349,7 +1377,7 @@
"upload-curl-error28": "تموم بیئن مئلت سی سوار کرد",
"upload-curl-error28-text": "ای دیارگه فره دیر دتو واکنشت نشو دئه.\nلطف بکیت سی یه که دیارگه کنشگتر و ری خطه یه گل وارسی بکیت، اوسه یه گر واستید و هنی تلاش بکیت.\nشایت بیتر با که د گات خلوتری هنی تلاش بکیت.",
"license": "ليانس دار بيئن",
- "license-header": "د شكل ليسانس دار بيئن",
+ "license-header": "د حال وبال ليسانس دار بيئن",
"nolicense": "هیچی انتخاو نبیه",
"licenses-edit": "گزینه یا مجوز ویرایشت",
"license-nopreview": "(پیش سیل د دسرس نئ)",
@@ -1358,7 +1386,7 @@
"listfiles-delete": "پاکسا کردن",
"listfiles-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.",
"listfiles_search_for": "پی جوری سی نوم رسانه:",
- "imgfile": "فايل",
+ "imgfile": "جانیا",
"listfiles": "نوم گه فایل",
"listfiles_thumb": "بن کلکی",
"listfiles_date": "تاريخ",
@@ -1372,7 +1400,7 @@
"listfiles-latestversion-yes": "هری",
"listfiles-latestversion-no": "نه",
"file-anchor-link": "فايل",
- "filehist": "ويرگار فايل",
+ "filehist": "ويرگار جانیا",
"filehist-help": "ری ويرگاريا بپورنيت تا نسقه مرتوط بونيت.",
"filehist-deleteall": "همه نه پاکسا کو",
"filehist-deleteone": "پاك كردن",
@@ -1386,10 +1414,10 @@
"filehist-dimensions": "بعديا",
"filehist-filesize": "انازه فایل",
"filehist-comment": "نظر",
- "imagelinks": "استفاده د فايل",
+ "imagelinks": "وه کار گری جانیا",
"linkstoimage": "دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:",
"linkstoimage-more": "بیشتر د $1 بلگه د ای جانیا هوم پیوند {{PLURAL:$1|بیه|بینه}}.\nنومگه هاری تئنا {{PLURAL:$1|اولین هوم پیوند|اولین $1 هوم پیوند}} د ای بلگه نه نشو می ئه.\n[[Special:WhatLinksHere/$2|نومگه کامل]] ئم هیئش.",
- "nolinkstoimage": "ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای فایل نی",
+ "nolinkstoimage": "ایچه هیژ بلگه ای سی هوم پیوند بیئن وا ای جانیا نی",
"morelinkstoimage": " [[ویجه:چه هوم پیوندی ها ایچه/$1|هوم پیوندیا هنی]]سی ای جانیا نه بونیت.",
"linkstoimage-redirect": "$1 (واگردونی جانیا) $2",
"duplicatesoffile": "{{PLURAL:$1|جانیا|جانیایا}} هاری نسقه تکراری ای جانیا {{PLURAL:$1|هئ|هئن}} ([[Special:FileDuplicateSearch/$2|دونسمنیا هنی]]):",
@@ -1452,7 +1480,6 @@
"statistics": "آماريا",
"statistics-header-pages": "بلگه آماریا",
"statistics-header-edits": "آماریا نه ویرایشت بکید",
- "statistics-header-views": "آماریا نه بوینیت",
"statistics-header-users": "آماریا کاریار",
"statistics-header-hooks": "آماریا هنی",
"statistics-articles": "بلگه یا مینونه",
@@ -1461,13 +1488,9 @@
"statistics-files": "جانیا یا سوار بیه",
"statistics-edits": "ویرایشت بلگه یا د گاتی که {{SITENAME}} دروس بیه",
"statistics-edits-average": "میانگین ویرایشت یا سی هر بلگه",
- "statistics-views-total": "همه نه بوینیت",
- "statistics-views-total-desc": "دیئن بلگه یایی که وجود نارن و بلگه یا ویجه د ور گرته نئ",
- "statistics-views-peredit": "هر ویرایشت نه بوینیت",
"statistics-users": "ثوت نام بیه [[ویجه:نوم گه کاریاریا|کاریاریا]]",
"statistics-users-active": "کاروریا کارکو",
"statistics-users-active-desc": "کاریاریایی که د {{PLURAL:$1|رو|$1 رو}} دماتر کنشتگر بینه",
- "statistics-mostpopular": "بلگه یایی که بیشتر دیئه بینه",
"pageswithprop": "بلگه یایی که خاصیت صفحه ها دشو",
"pageswithprop-legend": "بلگه یایی که خاصیت صفحه ها دشو",
"pageswithprop-text": "ای بلگه نومگه ای یه د بلگه یایی که یه گل ویجه گی د یه بلگه خاص نه وه کار می بنن.",
@@ -1508,13 +1531,14 @@
"uncategorizedtemplates": "قالویا دسه بنی نبیه",
"unusedcategories": "دسه یا استفاده نبیه",
"unusedimages": "فایلیا استفاده نبیه",
- "popularpages": "بلگه یا حاستنی",
"wantedcategories": "بلگه یا حاستنی",
"wantedpages": "بلگه یا حاستنی",
+ "wantedpages-summary": "نومگه بلگه یایی که نیئشو وا بیشتری هوم پیوند د ونو، وه جز بلگه یایی که فقط آلشت دئن لا د ونونه دارن. سی یه گل نومگه د بلگه یایی که نیئشو و آلشت دئن لا د ونونه دارن، [[{{#special:BrokenRedirects}}]] نه سیل بکیت.",
"wantedpages-badtitle": "سرون نامعتور د کومله نتیجه یا:$1",
"wantedfiles": "فایلیا حاستنی",
"wantedfiletext-cat": "جانیایا هاری وه کار گرته بوئن ولی وجود نارن. همچنو شایت جانیایا وه دری وا یه که ایچه هیئشون نومگه کاری بینه.هر گرینج مثبت دورویی <del>خط مئوره.</del> به اضافه یه، بلگه یایی که که جانیایا بی وجودن نه د خوشو دارن د [[:$1]] نومگه کاری بینه.",
"wantedfiletext-cat-noforeign": "جانیایا هاری وه کار گرته بوئن ولی نیئشو. اضافه وه یه بلگه یایی که جانیایا نادیار د خوشو دارن هان د [[:$1]].",
+ "wantedfiletext-nocat": "جانیایا هاری که وه کار گرته بوئن نیئشو. همچنو شایت جانیا اماییه داریا خارجی وه شرطی که بان وه کار گرته بوئن. هر گرینج خو ولی الکی <del> خط مئوره. <del>",
"wantedfiletext-nocat-noforeign": "جانیایا هاری وه کار گرته بوئن ولی نیئشو.",
"wantedtemplates": "قالویا حاستنی",
"mostlinked": "بلگه یا که بیشتر هوم پیوند بینه",
@@ -1533,6 +1557,7 @@
"deadendpagestext": "بلگه یا هاری وه هیچ بلگه هنی د {{SITENAME}} هوم پیوند نبینه.",
"protectedpages": "بلگه یا حفاظت بيه",
"protectedpages-indef": "فقط پر و پیم بیین یا بی زمون",
+ "protectedpages-summary": "د ای بلگه نومگه بلگه یایی هیئن که د ایسنی پر و پیم بینه. سی نومگه سرونیا که نبوئه دروس بان، سیل[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] بکیت.",
"protectedpages-cascade": "فقط پر و پیم بیین تافنمایی",
"protectedpages-noredirect": "واگردونیا قام بیه",
"protectedpagesempty": "د ایسنی هیچ بلگه ای پر و پیم نبیه.",
@@ -1545,6 +1570,7 @@
"protectedpages-unknown-timestamp": "ناشناس",
"protectedpages-unknown-performer": "کارور ناشناس",
"protectedtitles": "سرونیا پر و پیم بیه",
+ "protectedtitles-summary": "د ای بلگه نومگه بلگه یایی هیئن که د ایسنی پر و پیم بینه. سی نومگه سرونیا که نبوئه دروس بان، سیل[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] بکیت.",
"protectedtitlesempty": "د ایسنی هیچ سرونی وا ای پارامتریا پر و پیم نبیه",
"listusers": "نوم گه کارور",
"listusers-editsonly": "فقط کاروریایی که ویرایشت می کن نشو بیه",
@@ -1557,6 +1583,7 @@
"ancientpages": "بلگه یا نهاتر",
"move": "جاوه جا بوئيت",
"movethispage": "ای بگله نه جا وه جا كو",
+ "unusedimagestext": "جانیایا هاری هئشو اما د هیچ بلگه ای وه کار گرته نبینه.\nلطفن د ویرتو با که دیارگه یا هنی شایت وا یه گل تیرنشون اینترنتی مستقیم وه یه گل جانیا هوم پیوند بان و وا یه که د وه کار گرتن کنشتگر هیئن د ایچه نومگه بان.",
"unusedcategoriestext": "ای دسه یا هیئشو ولی د ایسنی هیچ گوتار یا دسه ای ونونه وه کار نمی بنه.",
"notargettitle": "رسینه جایی نئ",
"notargettext": "شما بلگه یا کاریاری مقصدی سی انجوم دئن ای کنشت ریش انتخاو نکردیته.",
@@ -1566,14 +1593,19 @@
"pager-older-n": "{{جمی:$1|گپسالتر 1|گپسالتر $1}}",
"suppress": "پائیئن",
"querypage-disabled": "ای بلگه ویجه سی دلیلیا انجومکاری ناکشتگر بیه.",
- "booksources": "سرچشمه يل كتاو",
+ "apihelp": "هومیاری آی پی آی",
+ "apihelp-no-such-module": "ماجول \"$1\" پیدا نبی.",
+ "booksources": "سرچشمه یا كتاو",
"booksources-search-legend": "پی جوری سی سرچشمه یا کتاو",
"booksources-isbn": "آی اس بی ان:",
- "booksources-go": "رو",
+ "booksources-search": "پی جوری",
+ "booksources-text": "د هار نومگه ای د هوم پیوندیا د دیارگه یا هنی اومائه که کتاویا نو و دس دوئم می فروشن، و همچنو شایت دونسمنیا بیشتری راجع وه کتاو حاستنی شما داشتوئن:",
+ "booksources-invalid-isbn": "شازک که دئه بیه معتور نئ؛ وارسی خطایا د گات ؤرداشتن د سرچشمه اولی وه کار گرته بوئه.",
"specialloguserlabel": "انجومکار:",
"speciallogtitlelabel": "حاستنی(موضوع یا کاریار):",
- "log": "نیسنن رخ ونیا",
+ "log": "پهرستنومه یا",
"all-logs-page": "همه پهرستنومه یا عمومی",
+ "alllogstext": "نماشت یه جا همه پهرستنومه یا که هان د{{SITENAME}}.\nمی تونید وا انتخاو نوع پهرستنومه، نوم کاریاری(حساس وه کؤچکی و گپی حرفیا) و بلگه یا آلشت کرده(حساس و گپی و کؤچکی حرنیا) نمایشت نه دیر د ویرتر بکیت.\n\n{{SITENAME}}.",
"logempty": "او چی ای که شما میهایت د پهرستنومه نیئش.",
"log-title-wildcard": "بلگه یایی نه پی جوری کو که وا ای سرون شرو موئن",
"showhideselectedlogentries": "آلشت دئن ورتیه گر پهرستنومه یا انتخاو بیه",
@@ -1590,8 +1622,10 @@
"allpages-bad-ns": "{{نوم دیارگه}} د ای نوم جا نئ \"$1\".",
"allpages-hide-redirects": "واگردونیا قام بیه",
"cachedspecial-viewing-cached-ttl": "شما د حال و بار دیئن یه گل نسقه ای د ای بلگه که ها د مینجاگیر هیئت که شایت سی $1 دماتر با.",
+ "cachedspecial-viewing-cached-ts": "شما داریت یه گل نسقه د ای بلگه نه که ها د مینجاگر سیل می کیت، و ای نسقه شایت کاملند راستکی نبا.",
"cachedspecial-refresh-now": "دیئن آخری.",
"categories": "دسه يا",
+ "categoriespagetext": "{{PLURAL:$1|دسه|دسه یا}} هاری دشو جانیایا یا بلگه {{PLURAL:$1|هئ|هیئن}}.\n[[Special:UnusedCategories|دسه یا وه کار نگرته بیه]] د ایچه نیئن.\nهمچنو[[Special:WantedCategories|دسه یا حاستنی نه]] بوینیت.",
"categoriesfrom": "دسه یایی که د شرو بینه نشو بیه:",
"special-categories-sort-count": "سرجاخودگری د اساس شمارشت",
"special-categories-sort-abc": "سرجاخودگری د اساس الفبا",
@@ -1602,18 +1636,22 @@
"linksearch-pat": "سازه یار پی جوری:",
"linksearch-ns": "نوم جا:",
"linksearch-ok": "پی جوری",
+ "linksearch-text": "نشونه یا چی «‎*.wikipedia.org» نم بوئه وه کار گرت.\nد کمترونه یه گل پوشگر ریتراز وارو، .\"*.org\" میها.<br />\n{{PLURAL:$2|پروتکل|پروتکل یا}} بی حامین: <code>$1</code> (پیش حاست سی http:// د حال وباری که پروتکل میزوکاری نبیه با).",
"linksearch-line": "$1 داره د $2 هوم پیوند بوئه",
+ "linksearch-error": "نشونه یا فقط د اول نوم مئموندار اینترنتی می تونن وه کار گرته بان.",
"listusersfrom": "کاریاریایی که د شرو بینه نشو بیه:",
"listusers-submit": "نشو دئن",
"listusers-noresult": "هیچ کاروری پیدا نبی",
"listusers-blocked": "(قلف بيه)",
"activeusers": "نوم گه کاروریا کارکو",
+ "activeusers-intro": "شما د هار یه گل نومگه د کاریاریایی نه مینیت که د $1 {{PLURAL:$1|رو|رو}} دماتر کنشتگر بینه.",
"activeusers-count": "$1 {{PLURAL:$1|کنشت|کنشت}} در {{PLURAL:$3|رو|$3 رو}} دماتر",
"activeusers-from": "کاریاریایی که د شرو بینه نشو بیه:",
"activeusers-hidebots": "بوتیا قام کو",
"activeusers-hidesysops": "دیوون داریا نه قام کو",
"activeusers-noresult": "هیچ کاروری پیدا نبی",
"listgrouprights": "حقوق گرو کاریاری",
+ "listgrouprights-summary": "نومگه های گرته د ور گرویا کاریاری تعریف بیه د ای ویکی و اختیارات دئه بیه د ونونه.\nدونسمنیا بیشتر دباره هرکوم د اختیارات نه د [[{{MediaWiki:Listgrouprights-helppage}}]] پیدا بکیت.",
"listgrouprights-key": "Legend:\n* <span class=\"listgrouprights-granted\">دئه بیه د سمت راست</span>\n* <span class=\"listgrouprights-revoked\">انجوم شیو بیه د سمت راست</span>",
"listgrouprights-group": "دسه",
"listgrouprights-rights": "حقوقیا",
@@ -1633,16 +1671,26 @@
"listgrouprights-namespaceprotection-namespace": "نوم جا",
"listgrouprights-namespaceprotection-restrictedto": "دسرسیا مجاز کاریار سی ویرایشت",
"trackingcategories": "دما گری دسه یا",
+ "trackingcategories-summary": "ای بلگه نومگه دسه یایی دماگری بیه ئه که وه شکل خودانجوم وه دس ویکی وارسگر پر بوئن . نومیا ونو نها آلشت کردن پیغومیا سامونه ای مرتوط د نومجا {{ns:8}} آلشت دئه با.",
"trackingcategories-msg": "دماگری دسه",
"trackingcategories-name": "نوم پیغوم",
"trackingcategories-desc": "جادیارکنیا گنجایشت دسه",
+ "noindex-category-desc": "ای بلگه وا رباتیا نومگه کاری نبیه و سی یه کلیمه یا جادویی <code><nowiki>__NOINDEX__</nowiki></code> د وه یا د جاگه ای که بیرق مجازه دش هئ.",
+ "index-category-desc": "ای بلگه<code><nowiki>__INDEX__</nowiki></code> که ها دش(و د نومجایی یه که بیرق دش مجازه)، سی یه وا رباط ما مشگلی ناره که وه شکل عادی نباید با.",
+ "post-expand-template-inclusion-category-desc": "نها د گپ کلونکاری همه چوئه یا، گنجایشت بلگه د <code>$wgMaxArticleSize</code> گپتر موئه سی یه نه یه گل د چوئه یا گپ کلونکاری نبینه.",
+ "post-expand-template-argument-category-desc": "نها د گپ کلونکاری یه گل آرگومان چوئه(یه چی مینجا آکولادیا سه تایی، چی <code>{{{Foo}}}</code>) بلگه د <code>$wgMaxArticleSize</code> گپتر بوئه.",
+ "expensive-parserfunction-category-desc": "آلشگریا هزینه گر و گرو (چی<code>#ifexist</code>) هره یی هان د ای بلگه. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] نه سیل بکیت.",
+ "broken-file-category-desc": "بلگه مینونه دار یه گل هوم پیوند جانیا خراوه(هوم پیوندی سی جاسازی کردن یه گل جانیا سی گاتی که او جانیا نئئش).",
+ "hidden-category-category-desc": "رده د مینونه بلگه ش د ور گرته <code><nowiki>__HIDDENCAT__</nowiki></code> ئه، که د وه شکل پیش فرض د نشو دئن جعوه هوم پیوندیا رده د بلگه نهاگری می که.",
"trackingcategories-nodesc": "هیچ شرحی د دسرس نئ.",
"trackingcategories-disabled": "دسه ناکشتگر بیه",
"mailnologin": "هیپچ نشونی یی کل نبیه",
+ "mailnologintext": "سی کل کردن انجومانامه وه کاریاریا هنی واس [[Special:UserLogin|بیایت وامین سامونه]] و تیرنشون انجومانامه معتوری د [[Special:Preferences|ترجیحات]] خوتو داشتوئیت.",
"emailuser": "ای كارور نه ايميل كو",
"emailuser-title-target": "ایمیل سی ای {{جنس:$1|کارور}}",
"emailuser-title-notarget": "ایمیل کارور",
"emailpage": "ایمیل کارور",
+ "emailpagetext": "شما می تونیت نوم بلگه هار نه سی کل کردن یه گل انجومانامه وه ای {{GENDER:$1|کاریار}} وه کار بئیرت.\nتیرنشون انجومانامه یی که د [[Special:Preferences|ترجیحات کاریارتو]] دئیه ته د تیرنشون کلکار انجومانامه میا، سی یه که گیرنه بتونه جواوش بیه.",
"defemailsubject": "{{نوم سیل جا}} ایمیل د کارور \"$1\"",
"usermaildisabled": "ایمیل کارور د کار افتائه",
"usermaildisabledtext": "شما نمی تونیت سی کاریار هنی د ای ویکی انجومانامه کل بکیت",
@@ -1663,6 +1711,7 @@
"emailccsubject": " پیغومتو سی $1:$2 ورداشته بی",
"emailsent": "ایمیل کل بیه",
"emailsenttext": "پیغوم ایمیلی تو کل بیه.",
+ "emailuserfooter": "ای انجومانامه وا به کار گرتن د خصوصیت \"کل کردن نومه د ای کاریار\"{{SITENAME}} وه دس $1 به $2 کل بی.",
"usermessage-summary": "رئتن د سامونه پیغوم",
"usermessage-editor": "پیغوم فرسن سیستم",
"usermessage-template": "ویکی وارسگر:پیغوم کاریار",
@@ -1673,6 +1722,7 @@
"watchlistanontext": "لطفن بیایت وامین و ویرایشتیا نه د سیل برگتو سیل بکیت.",
"watchnologin": "وارد نبیه",
"addwatch": "اضاف کردن د سیل برگ",
+ "addedwatchtext": "بلگه «[[:$1]]» د [[Special:Watchlist|نومگه دماگردی]] شما اضاف بی.\nآلشتیا ای بلگه بلگه چک چنه ری وه ریش د نهاتر د ایچه نومگه کاری بوئه.",
"addedwatchtext-short": "بلگه \"$1\" وه سیل برگ شما اضاف بیه.",
"removewatch": "جا وه جا کردن د سیل برگ",
"removedwatchtext": "بلگه\"[[:$1]]\" د [[Special:سیل برگ|سیل برگ خوتو]] جا وه جا بیه.",
@@ -1687,10 +1737,11 @@
"wlheader-enotif": "وارسیاری ایمیل فعال بیه.",
"wlheader-showupdated": "بلگه یایی که د آخرین کرتی که شما دشو دیئن کردیته آلشت بینه د <strong>توپر</strong>نشون دئه بینه",
"wlnote": "د هار {{PLURAL:$1|آلشت|<strong>$1</strong> آلشتی}} که د {{PLURAL:$2|ساعت|<strong>$2</strong> ساعت}} دماتر انجوم بیه هیئش، ویرگار آخرین واجوری انجام شده موجود است، ویرگار آخری واجوری: $3، $4",
- "wlshowlast": "آخرین$1 ساعتیا $2و روزیا $3 نشو بیئه",
+ "wlshowlast": "آخرین$1 ساعتیا $2و روزیا نشو بیئه",
"watchlist-options": "گزینیا سیل برگ",
"watching": "د حال دیئن...",
"unwatching": "د حال ندیئن...",
+ "watcherrortext": "یه گل اشگال د گات آلشت کردن میزونکاری نومگه سیل برگتو سی «$1» پیش اوما.",
"enotif_reset": "همه بلگه یا دیئه بینه نشودار بکید",
"enotif_impersonal_salutation": "{{نوم سیلجا}} کارور",
"enotif_subject_deleted": "{{SITENAME}} بلگه$1 وه دس{{gender:$2|$2}} پاکسا بیه.",
@@ -1698,20 +1749,30 @@
"enotif_subject_moved": "{{SITENAME}} بلگه$1 وه دس{{gender:$2|$2}} جا وه جا بیه.",
"enotif_subject_restored": "{{SITENAME}} بلگه$1 وه دس{{gender:$2|$2}} د نو زنه بیه.",
"enotif_subject_changed": "{{SITENAME}} بلگه$1 وه دس{{gender:$2|$2}} آلشت بیه.",
+ "enotif_body_intro_deleted": "بلگه$1 {{SITENAME}} د ویرگار $PAGEEDITDATE وه دس {{gender:$2|$2}} پاکسا بیه، $3 نه بینیت.",
+ "enotif_body_intro_created": "{{SITENAME}} بلگه $1 د ویرگار $PAGEEDITDATE وه دس {{gender:$2|$2}} دروس بیه، سی وانئری ایسنی سیل $3 بکیت.",
+ "enotif_body_intro_moved": "{{SITENAME}} بلگه $1 د ویرگار $PAGEEDITDATE وه دس {{gender:$2|$2}} جاوه جا بیه، سی وانئری ایسنی سیل $3 بکیت.",
+ "enotif_body_intro_restored": "{{SITENAME}} بلگه $1 د ویرگار $PAGEEDITDATE وه دس {{gender:$2|$2}} د نو زئنه بیه، سی وانئری ایسنی سیل $3 بکیت.",
+ "enotif_body_intro_changed": "{{SITENAME}} بلگه $1 د ویرگار $PAGEEDITDATE وه دس {{gender:$2|$2}} آلشت بیه، سی وانئری ایسنی سیل $3 بکیت.",
"enotif_lastvisited": "همه آلشتیا$1 د اوسه که شما د آخرین بار دیئته بوینیت.",
"enotif_lastdiff": "سی دیئن ای آلشتیا $1 نه سیل بکیت.",
"enotif_anon_editor": "کارو ناشناس$1",
+ "enotif_body": "$WATCHINGUSERNAME نازار،\n\n$PAGEINTRO $NEWPAGE\n\n\nتوضیح ویراشتکار: $PAGESUMMARY $PAGEMINOREDIT\n\nپیوند گرتن وا ویراشتکار:\nنومه: $PAGEEDITOR_EMAIL\nویکی: $PAGEEDITOR_WIKI\n\nتا گاتی که سر نه دئیته وه بلگه، د حال و بار پیش اومائن ائتمالی کنشتیاری بیشتر، تا گاتی که وا نوم کاریاریتو هایت د سامونه، گوته دیاری سی شما کل نبوئه.\nشما همچنی می تونید د بلگه دماگریا خوتو بیرقیا مربوط وه وارسکاری نه صفر بکیت همچنی می تونیت بیرقیا وارسکاری نه د نو نشوکاری بکیت.\n\nدوسیار شما، سامونه وارسکاری {{SITENAME}}\n\n--\nسی آلشت دئن میزونکاریا نومگه انجومانامه یا گوته دیاری روئیت وه {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nسی آلشت دئن میزونکاری نومگه دماگریاتو روئیت وه {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nسی پاکساکاری بلگه د نومگه دماگریاتو روئیت د $UNWATCHURL.\n\nبازحرد و هومیاری بیشتر:\n$HELPPAGE",
"created": "دروس بیه",
"changed": "آلشت بیه",
"deletepage": "پاک کردن بلگه",
"confirm": "مئكم كردن",
"excontent": "مینونه :\"$1\" بی",
+ "excontentauthor": "مینونه بلگه یه بی: «$1» (و تئنا هومیار«[[Special:Contributions/$2|$2]]» بی)",
"exbeforeblank": "مینونه حالی دمایی:\"$1\" بی",
"delete-confirm": "پاکسا کردن\"$1\"",
"delete-legend": "پاك كردن",
+ "historywarning": "<strong>هشدار:</strong> بلگه یی که شما میهایت پاکساش بکیت دش یه گل ویرگارچه واگرد $1 {{PLURAL:$1|وانئری|وانئریا}} ئه:",
+ "confirmdeletetext": "شما د حال و بار پاکسا کردن یه گل بلگه یا عسگ د رسینه جا واگرد همه ویرگارچه ونیت.\nلطف بکیت ای کنشتکاری نه پشت راسکاری بکیت و یه دل بوئیت که سرانجوم ای کار نه دونیت و ای کار نه مطابق وا [[{{MediaWiki:Policy-url}}|سیاستیا]] انجوم دئیته.",
"actioncomplete": "عملكرد كامل بيه",
"actionfailed": "عملكرد شكست حرده",
- "dellogpage": "لاگ پاك كردن",
+ "deletedtext": "«$1» پاکسا بیه.\nسی نهاتری پاکساگریا ایسنی وه $2 سرکشی بکیت.",
+ "dellogpage": "پاکسا کردن پهرستنومه",
"dellogpagetext": "نومگه هاری یه گل نومگه د آخری چیا پاکسا بیه هئ.",
"deletionlog": "پهرستنومه پاک بیئن",
"reverted": "لرسه د نزیکترین وانئری",
@@ -1720,39 +1781,65 @@
"deletereasonotherlist": "دلیل هنی",
"deletereason-dropdown": "* دلیلیا پاکسا کردن رسم بیه\n** اسپم\n** خراوکاری\n** رعایت نبین کپی رایت\n** درحاست نیسنه\n** نهاورگشت شکست حرده",
"delete-edit-reasonlist": "دلیلیا پاکسا کردنه نه ویرایشت بکید",
+ "delete-toobig": "ای بلگه ویرگارچه ویرایشتی گپی داره، که د ور گرته بیشتر د $1 {{PLURAL:$1|نسقه|نسقه}} ئه.\nسی یه که د اختلال ناحاستنی د {{SITENAME}} نهاگری با پاکسا کردن ای جوراین بلگه یا محدود بیه.",
+ "delete-warning-toobig": "ای بلگه ویرگارچه ویرایشتی گپی داره، که د ور گرته بیشتر د $1 {{PLURAL:$1|نسقه|نسقه}} ئه.\nپاکسا کردن وه ممکنه که کنشتکاری رسینه جا {{SITENAME}} نه مختل بکه؛\nای کار نه وا ائتیاط نهاداری بکیت.",
"deleteprotected": "شما نمی تونیت ای بلگه نه پاکسا بکیت سی یه که وه پر و پیم بیه.",
+ "deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|بلگه یا هنی]] ین که وه بلگه یی که شما د حال و بار پاکسا کردن ونیت پیوند دارن یا د وه پرگنجایشت کاری بیینه.",
"rollback": "چواشه کردن ویرایشتیا",
- "rollback_short": "چواشه کردن",
"rollbacklink": "ورگشتن",
"rollbacklinkcount": "چواشه کردن $1 {{PLURAL:$1|ویرایشت|ویرایشتیا}}",
"rollbacklinkcount-morethan": "چواشه کردن بیشتر د$1 {{PLURAL:$1|ویرایشت|ویرایشتیا}}",
"rollbackfailed": "چواشه کردن د خوئی انجوم نبی",
+ "cantrollback": "نبوئه ویرایشت نه پاکساگری بکیت:\nآخری هومیار تئنا نیسنه ای گوتاره.",
+ "alreadyrolled": "وادیاری آخری ویرایشت [[:$1]] وه دس [[User:$2|$2]] ([[User talk:$2|چک چنه]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ممکن نئ؛\nدما د یه کسی تر گوتار نه ویرایشت یا وادیاری کرده.\n\nآخری ویرایشت وه دس [[User:$3|$3]] ([[User talk:$3|چک چنه]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) انجوم بیه.",
"editcomment": "ویرایشت چکشه وه: \"''$1''\" بی.",
+ "revertpage": "ویرایشت [[Special:Contributions/$2|$2]] ([[User talk:$2|چک چنه]]) وه آخری آلشتی که [[User:$1|$1]] انجوم دئه بی وادیاری بی",
+ "revertpage-nouser": "ویرایشتیا انجوم بیه وه دس (نوم کاریاری پاک بیه) د آخری ویرایشت [[User:$1|$1]] وادیار بی.",
+ "rollback-success": "ویرایشتیا $1 پاکساگری بی؛\nبلگه وه آخری ویرایشت $2 آلشت بیه.",
"sessionfailure-title": "شکست حردن نشینگه",
- "protectlogpage": "حفاظت کردن",
+ "sessionfailure": "چنی وه نظری میا که مشکلی ها د نشتجا کاریاری شما؛\nانجومگر حاستنی سی یه که د دزیه بیین دونسمنیاتو د نشسجا کاریاری نهاگری با انجومشیو بیه.\nلطف بکیت د ری دگمه ؤرئشتن بپورنیت و بلگه یی که رسسینه دش د نو واحونی بکیت، اوسه دنو تلاش بکیت.",
+ "protectlogpage": "پر و پیم کاری کردن",
+ "protectlogtext": "د هار یه گل نومگه د آلشتیا ریتراز پر و پیم کاری بلگه یا اومائه.\n[[Special:ProtectedPages|نومگه بلگه یا پر و پیم کار بیه]] نه سی دیئن نومگه پر و پیم کاری کارگرا بلگه یا سیل بکیت.",
"protectedarticle": "حفاظت بيه [[$1]]",
"modifiedarticleprotection": "ریتراز حفاظت د \"[[$1]]\" آلشت بیه",
+ "unprotectedarticle": "بلگه«[[$1]]» نه د پر و پیم دراورد",
+ "movedarticleprotection": "میزونکاری پر و پیم بیین د «[[$2]]» وه «[[$1]]» جا وه جا بیه",
"protect-title": "ریتراز حفاظت د \"$1\" آلشت بیه",
"protect-title-notallowed": "دیئن ریتراز پر و پیم \"$1\"",
"prot_1movedto2": "[[$1]] د [[$2]] جا وه جا بی",
"protect-badnamespace-title": "نوم جا بی پر و پیم",
+ "protect-badnamespace-text": "بلگه یایی که هان د ای نومجا پر و پیم بیئنی نیئن.",
+ "protect-norestrictiontypes-text": "امکان پر و پیم کردن ای بلگه سی یه که نوع محدودیتی ناره، وجود ناره.",
"protect-norestrictiontypes-title": "بلگه بی حامین گر",
"protect-legend": "پشت راس کردن حامین گری",
"protectcomment": "دلیل:",
"protectexpiry": "تموم بين:",
"protect_expiry_invalid": "گات تموم بیین نامعتوره.",
"protect_expiry_old": "گات تموم بیین مال دماتره.",
+ "protect-unchain-permissions": "وا کردن گزینه یا هنی پر و پیم کردن",
+ "protect-text": "شما می تونیت ریتراز پر و پیم کاری بلگه '''$1''' نه سیل بکیت و از ایچه ونه آلشت بکیت.",
+ "protect-locked-blocked": "شما د گاتی که د دسرسیتو نهاگری بیه نمی تونیت ریتراز پر و پیم کاری بلگه یا نه آلشت بئیت.\nمیزونکاری ایسنی بلگه '''$1''' د ای قراره:",
+ "protect-locked-dblock": "سی یه که رسینه جا قلف بیه، امکان آلشت دئن ریتراز پر و پیم کاری بلگه یا د ایسه نئ.\nمیزونکاری ایسنی بلگه '''$1''' ها دی ای قرار:",
+ "protect-locked-access": "حساو کاریاری شما سی آلشتکاری ریتراز پر و پیم کاری صلاداری ناره.\nمیزونکاریا ایسنی بلگه '''$1''' ها دی ای قرار:",
+ "protect-cascadeon": "ای بلگه ایسنی پر و پیم کاری بیه، سی یه که د {{PLURAL:$1|بلگه|بلگه یا}} هاری که گزینه پر و پیم کاری تاف نمایی {{PLURAL:$1|وه|ونو}} کنشتکاره، اومائه.\nآلشتیایی که مال ریتراز ای بلگه ن ری پر و پیم کاری تاف نمایی کارگرایی نارن.",
"protect-default": "همه کاروریا اجازه دارن",
+ "protect-fallback": "فقط کاریاریایی که وه «$1» دسرسی دارن، صلادار ای کارن",
+ "protect-level-autoconfirmed": "فقط کاریاریا که خودپشت راس بینه صلادارن",
"protect-level-sysop": "فقط دیوونداریا",
"protect-summary-desc": "[$1=$2] ($3)",
"protect-summary-cascade": "د حال و بال تافنمایی",
"protect-expiring": "گات تموم بیین $1 (یو تی سی)",
"protect-expiring-local": "گات تموم بیین $1",
"protect-expiry-indefinite": "بی زمون",
+ "protect-cascade": "پر و پیم بیین تافنمایی- همه بلگه یایی که هان د ای بلگه پر و پیم بوئن.",
+ "protect-cantedit": "شما نمی تونیت حال و بار پر و پیم کاری ای بلگه نه آلشت بئیت، سی یه که صلا ویرایشت دئن ونه ناریت.",
"protect-othertime": "وخت هنی:",
"protect-othertime-op": "گات هنی",
+ "protect-existing-expiry": "گات تموم بیین ایسنی: $2، $3",
+ "protect-existing-expiry-infinity": "گات تموم بیین: بی گاته",
"protect-otherreason": "دلیل اضافی/هنی:",
"protect-otherreason-op": "دلیل هنی",
+ "protect-dropdown": "*دلیلیا جاافتائه سی پر و پیم کاری\n** خراوکاری گپ کلون\n** هرزه نیسی گپ کلون\n** جئن ویرایشتی وه درد نحور\n** بلگه فره تماشاکار دار",
"protect-edit-reasonlist": "دلیلا پر و پیم بیین ویرایشت",
"protect-expiry-options": "1 ساعت:1 ساعت,1 روز:1 روز,1 هفته:1 هفته,2 هفته:2 هفته,1 ما:1 ما,3 ما:3 ما,6 ما:6 ما,1 سال:1 سال,بی حساو:بی حساو",
"restriction-type": "دسرسی:",
@@ -1769,28 +1856,57 @@
"restriction-level-all": "هر ریترازی",
"undelete": "دیئن بلگه یا پاکسا بیه",
"undeletepage": "دیئن و ؤرگشتن بلگه یا پاکسا بیه",
+ "undeletepagetitle": "'''اوی چی که ها د نها د ور گرته نسقه یا پاکسا بیه [[:$1|$1]] ه'''.",
"viewdeletedpage": "دیئن بلگه یا پاکسا بیه",
+ "undeletepagetext": "{{PLURAL:$1|بلگه های پاکسا بیه|بلگه یا هاری پاکسا بینه}} ولی ایسه د اماییه جا {{PLURAL:$1|هئ|هان}} و {{PLURAL:$1|می تونه د نو زنه با|می‌ تونن د نو زنه بان}}.\nای اماییه جا ممکنه هر چن گری تمیس بوئه.",
+ "undelete-fieldset-title": "د نو زنه کردن وانئریا",
+ "undeleteextrahelp": "سی زنه کردن همه ویرگارچه یا بلگه، هم جعوه یا حالی نه ول بکیت و دگمه '''''{{int:undeletebtn}}''''' نه بپورنیت.\nسی انجوم دئن د نو زنه کردن انتخاوی، جعوه ویایی که هان د ارتواط وا نسقه یا خوشو سی د نو زنه کردن نشو دار بکیت و دگمه '''''{{int:undeletebtn}}''''' بپورنیت.",
+ "undeleterevisions": "$1 نسقه مال دیاری{{PLURAL:$1|بیه|بینه}}",
+ "undeletehistory": "ار ای بلگه نه د نو زنه بکیت، همه نسقه یا وه د ویرگارچه ش د نو زنه بوئن.\nار بلگه تازه یی وا نوم هومبراوری د گات پاکسا بیین دروس بیه با، نسقه یا د نو زنه بیه د ویرگارچه ره وندیاری می کن.",
+ "undeleterevdel": "ناپاکسا کردن بلگه یا د حال و باری که باعث پاکسا بیین بهرجایی د آخری نسقه بلگه یا جانیا با امکانش نئ.\nد ای حال و بار شما واس تازه تری نسقه پاکساگری بینه ئم د نو زنه بکیت.",
+ "undeletehistorynoadmin": "ای بلگه پاکسا بیه.\nدلیل پاکسا بیین ای بلگه واگرد مشخصات کاریاریایی که دما د پاکسا کردن ای بلگه نه ویرایشت دئنه ها د چکسته هاری.\nنیسسه راستیکی ای ویرایشت پاکسا بیه و فقط ها د دسرس دیوونداریا.",
+ "undelete-revision": "نسقه پاکسا بیه $1 (د ویرگار$4 ساعت $5) وه دس $3:",
+ "undeleterevision-missing": "وانئری یا گم بیه یا نامعتوره.\nشایت هوم پیوند شما دروس نبوئه یا یه که ای وانئری د اماییه جا پاکسا بیه یا بازجست بیه.",
+ "undelete-nodiff": "وانئری دماتری پیدا نبیه.",
"undeletebtn": "د نو زنه کردن",
"undeletelink": "بوين/دوواره آماده با",
"undeleteviewlink": "ديئن",
"undeleteinvert": "انتخاو برعسك بوئه",
"undeletecomment": "دليل:",
+ "undeletedrevisions": "وانئری$1 د نو زنه{{PLURAL:$1|بی}}",
+ "undeletedrevisions-files": "{{PLURAL:$1|1 وانئری|$1 وانئریا}} و{{PLURAL:$2|1 جانیا|$2 جانیا}} د نو زئنه بینه.",
"undeletedfiles": "{{PLURAL:$1|1 جانیا|$1 جانیایا}} د نو زنه بیه",
"cannotundelete": "زنه کردن انجوم نبی:$1",
+ "undeletedpage": "'''$1 د نو زنه بی'''\n\nسی دیئن پهرستنومه پاکساکاریا و د نو زنه کردنیا ایسنی روئیت د [[Special:Log/delete|پهرستنوم پاکساکاری]].",
+ "undelete-header": "سی دیئن بلگه یا پاکسا بیه ایسنی [[Special:Log/delete|پهرستونمه پاکسا بیین]] نه سیل بکیت.",
"undelete-search-title": "بلگه یا پاکسا بیه نه پی جوری کو",
"undelete-search-box": "پی جوری بلگه یا پاکسا بیه",
"undelete-search-prefix": "بلگه یایی که وا شرو بیه نشو بیه:",
"undelete-search-submit": "پی جوری",
+ "undelete-no-results": "هیچ بلگه یکی بیینی د مال دیارکن پاکسا بیه یا نئ.",
+ "undelete-filename-mismatch": "نبوئه نسقه $1 نه د نو زنه بکی: نوم جانیا واش یکی نئ.",
+ "undelete-bad-store-key": "نبوئه نسقه $1 نه د نو زنه بکی: جانیا وه دما د پاکسا کردن د بین رئته.",
+ "undelete-cleanup-error": "خطا د پاکسا کردن ویرگارچه وه کار نگرته بیه د«$1».",
+ "undelete-missing-filearchive": "نبوئه ویرگارچه شماره $1 د نو زنه بکی سی یه که دونسمنیاش د رسینه جا نیئن.\nیا شایت د دماتر د نو زنه بینه.",
+ "undelete-error": "خطا بلگه ای که نبوئه پاکساش بکی",
"undelete-error-short": "خطا پاک نبیئن جانیا:$1",
+ "undelete-error-long": "د گات زنه کردن جانیا یه گل خطا پیش اوما:\n\n\n$1",
+ "undelete-show-file-confirm": "آیا یه دل بئیته که میهایت یه گل نسقه پاکسا بیه د جانیا \"<nowiki>$1</nowiki>\" که ها د ویرگار $2 ساعت $3 نه سیل بکیت؟",
"undelete-show-file-submit": "هری",
"undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
"namespace": "نوم جا:",
"invert": "انتخاو برعسك بوئه",
+ "tooltip-invert": "د ری ای جعوه بپورنیت و آلشتیایی نه که د مینجا نوم ورگه انتخاو بیه انجوم بینه قام بکیت(و ار نوم ورگه شریکی وارسی بیه)",
+ "tooltip-whatlinkshere-invert": "ای جعون نه سی نهو کردن هوم پیوند بلگه یایی که نوم جاشو انتخاو بیه، انتخاو بکیت.",
+ "namespace_association": "نوم جایا یکاگرته",
+ "tooltip-namespace_association": "ای جعوه نه وارسی بکیت ای جعوه د ور گرته چک چنه یا داسون نوم ورگه شریکی و نوم ورگه انتخاو بیه ئه",
"blanknamespace": "اصلی",
- "contributions": "{{جنس:$1|کارور}} هومیاریا",
+ "contributions": "{{جنس:$1|کاریار}} هومیاریا",
"contributions-title": "هومياري كارور سي $1",
- "mycontris": "هومياری",
+ "mycontris": "هومياریا",
"contribsub2": "سي {{جنسيت:$3|$1}} ($2)",
+ "contributions-userdoesnotexist": "کاریار \"$1\" ثوت نام نکرده.",
+ "nocontribs": "هیچ آلشتی وا ای مشقصات دیاری نکرد.",
"uctop": "(تازه باو)",
"month": "د ما(یا زیتر)",
"year": "د سال",
@@ -1804,23 +1920,27 @@
"sp-contributions-logs": "نیسنن رخ ونیا",
"sp-contributions-talk": "چك چنه",
"sp-contributions-userrights": "دیوونداری حقوق کاریار",
+ "sp-contributions-blocked-notice": "د دسرسی ای کاریا د ایسنی نهاگری بیه.\nآخری برشت د پهرستنومه نهاگری ها د سرچشمه هاری:",
+ "sp-contributions-blocked-notice-anon": "ای آی پی ایسنی دسرسی ناره.\nآخری برشت د پهرستنومه ها د سرچشمه هاری:",
"sp-contributions-search": "سی هومیاریا پی جور با",
"sp-contributions-username": "نوم نشون آی پی يا نوم كاروری:",
"sp-contributions-toponly": "فقط ویرایشتیایی که جزئه آخرین دوواره دیئن هئین نشو بیه",
+ "sp-contributions-newonly": "فقط ویرایشتیایی که مال دروس کردن بلگه هیئن نشو بیه.",
"sp-contributions-submit": "پی جوری",
- "whatlinkshere": "كؤم ديس ونيا هان ايچه",
+ "whatlinkshere": "كؤم هوم پیوندیا هان ايچه",
"whatlinkshere-title": "بلگه ای که د $1 هوم پیوند بیه",
"whatlinkshere-page": "بلگه",
"linkshere": "بلگیا نهایی د '''[[:$1]]''' هوم پیوند بیه",
"nolinkshere": "هیژ بگله ای د '''[[:$1]]''' هوم پیوند نبیه",
+ "nolinkshere-ns": "هیچ بلگه ای د نومجا انتخاو بیه وه'''[[:$1]]''' هوم پیوند ناره.",
"isredirect": "بلگه دوباره ورگشتن",
"istemplate": "نشونی دئن",
- "isimage": "فایل هوم پیوند",
+ "isimage": "جانیا هوم پیوند",
"whatlinkshere-prev": "{{جمی:$1|دمایی|دمایی $1}}",
"whatlinkshere-next": "{{جمی:$1|نهایی|نهایی $1}}",
"whatlinkshere-links": "هوم پیوندیا",
- "whatlinkshere-hideredirs": "$1 دوواره د نشونی ورگشتن",
- "whatlinkshere-hidetrans": "$ا چن نتیجه ای",
+ "whatlinkshere-hideredirs": "$1 واگردونیا",
+ "whatlinkshere-hidetrans": "$ا چن نتیجه یی",
"whatlinkshere-hidelinks": "هوم پیوندیا $1",
"whatlinkshere-hideimages": "فایل هوم پیوندیا $1",
"whatlinkshere-filters": "فيلتريا",
@@ -1829,86 +1949,162 @@
"unblock": "کاریار نهاگری نبیه",
"blockip": "نهاگری{{GENDER:$1|کاریار}}",
"blockip-legend": "نهاگری کاریار",
+ "blockiptext": "نومگه بلگه هاری نه سی نهاگری د دسرسی ویرایشت یه گل تیرنشون آی پی وا نوم کاریاری مشخص وه کار بئیریت.\nای کار فقط فقط واس سی نهاگری د خراوکاری و د پایه [[{{MediaWiki:Policy-url}}|سیاست نهاگری]] انجوم با.\nدلیل دیاری نه د هار بوئیت (مثلند وا گوتن بلگه یایی که دشو خراوکاری بیه).",
"ipaddressorusername": "نوم نشون آی پی يا نوم كاروری:",
"ipbexpiry": "تموم بين:",
"ipbreason": "دليل:",
+ "ipbreason-dropdown": "*دلیلیا جاافتائه سی نهاگری\n**دئن دونسمنیا غلط\n**پاکسا کردن دونسمنیا خو د بلگه یا\n**هرزه نیسی د طریق نیسنن هوم پیوند تکراری د دیارگه یا\n**نیسنن چرند و چار یا نیسسه یا بی مئنی د بلگه یا\n**سهم ونن د کاریاریا هنی\n**وه کار گرتن چن گل حساو کاریاری\n**نوم کاریاری گن",
+ "ipb-hardblock": "پیشگری د ویرایشت کردن کاریاریی که د طریق ای تیرنشون آی پی وامین اومانه.",
"ipbcreateaccount": "نهاگری دروس کردن حساو",
"ipbemailban": "نهاگرتن کاریار د کل کردن انجومانامه",
+ "ipbenableautoblock": "بستن خودانجوم آخری تیرنشون آی پی وه کار گرته بیه وه دس کاریار و تیرنشونیا هنی که که د ونو سی ویرایشت وه سعی می کن.",
"ipbsubmit": "نهاگری ای کاریار",
"ipbother": "وخت هنی:",
"ipboptions": "2 ساعتیا:2 ساعت,1 رو:1 رو,3 روزا:3 رو,1 هفته:1 هفته,2 هفته یا:2 هفته,1 ما:1 ما,3 ما:3 میا,6 ما:6 مایا,1 سال:1سال,بی حساو:بی حساو",
"ipbhidename": "نوم کاروری نه سی ویرایشت یا و نوم گه یا قام کو",
+ "ipbwatchuser": "پی گری بلگه کاریاری و بلگه چک چنه ای کاریار",
"ipb-disableusertalk": "نها ای کاریار نه اوسه که میها د بلگه چک چنه ش ویرایشت بکه و وه قلف بیه بئر",
+ "ipb-change-block": "بسن دوواره کاریار وا ای میزونکاریا",
"ipb-confirm": "پشت راس کردن قلف",
"badipaddress": "تیرنشون نامعتور آی پی",
"blockipsuccesssub": "قلف کردن د خوئی انجوم بی",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] بسته بیه.<br />\nسی وارسی بسته بیه یا [[Special:BlockList|نوم گه بسته بیه یا ]] نه سیل بکیت.",
+ "ipb-blockingself": "شما د حال نهاگری خوتونیت! آیا دلراس هیئت که میهایت چنی کاری انجوم بیتو؟",
"ipb-edit-dropdown": "ویرایشت دلیلیا نهاگرتن",
"ipb-unblock-addr": "وا کردن قلف $1",
+ "ipb-unblock": "واز کردن نوم کاریاری یا تیرنشون آی پی",
+ "ipb-blocklist": "دیئن نهاگرتن یا ایسنی",
+ "ipb-blocklist-contribs": "هومیاریا $1",
"unblockip": "کارور منع نبیه",
"ipusubmit": "ای قلف نه ؤردار",
+ "unblocked": "دسرسی [[User:$1|$1]] دوواره برقرار بیه.",
+ "unblocked-range": "$1 وا بیه.",
+ "unblocked-id": "قلف $1 ورداشته بیه.",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] رفع نهاگری بیه.",
"blocklist": "كاروريا منع بيه",
- "ipblocklist": "كاروريا منع بيه",
+ "ipblocklist": "كاروريا نهاگری بیه",
"ipblocklist-legend": "یه گل کارور منع بیه بجوریت",
+ "blocklist-userblocks": "قام کردن حساو قلف بیه",
+ "blocklist-tempblocks": "قام کردن نهاگرتنیا موقت",
+ "blocklist-addressblocks": "قام کردن تکی نهاگرتن آی پیا",
+ "blocklist-rangeblocks": "قام کردن پوشینه نهاگرتنیا",
"blocklist-timestamp": "چسب ون وخت",
+ "blocklist-target": "مقصد",
"blocklist-expiry": "تموم بين",
+ "blocklist-by": "دیووندار نهاگیرنه",
+ "blocklist-params": "پارامتریا قلف کردن",
"blocklist-reason": "دلیل",
"ipblocklist-submit": "پی جوری",
"ipblocklist-localblock": "نهاگری ولات نشینی",
"ipblocklist-otherblocks": "هنی{{PLURAL:$1|نهاگرتن|نهاگرتنیا}}",
"infiniteblock": "بی زمون",
+ "expiringblock": "د $1 ساعت $2 تموم موئه",
+ "anononlyblock": "فقط کاریاریا نادیار",
+ "noautoblockblock": "بستن خودانجوم ناکشتگر بیه",
+ "createaccountblock": "حساو راس کردن ناکشتگر بیه.",
"emailblock": "انجومانامه ناکشتگر بیه",
"blocklist-nousertalk": "نبوئه بلگه چک چنه خوتونه ویرایشت بکید",
"ipblocklist-empty": "جاگه نوم گه حالیه",
- "blocklink": "بسته بوئه",
+ "ipblocklist-no-results": "دسرسی نوم کاریاری یا تیرنشون آی پی حاسته بیه نهاگری نبیه.",
+ "blocklink": "نهاگری بوئه",
"unblocklink": "بی قطی",
"change-blocklink": "اجازه نديئن سی آلشت",
- "contribslink": "هومكاری",
+ "contribslink": "هومیاریا",
"emaillink": "انجومانامه نه کل کو",
"blocklogpage": "قلف",
"blocklogentry": " [[$1]] وا یه گل وخت تموم بیئن $2 و $3 قلف بیه",
+ "reblock-logentry": "میزوکاری سی نهاگری[[$1]] آلشت بیه سی آخر نهاگری د $2 $3",
+ "unblocklogentry": "وا کردن قلف $1",
+ "block-log-flags-anononly": "فقط کاریاریایی که نادیارن",
"block-log-flags-nocreate": "حساو راس کردن عاجز بیه.",
+ "block-log-flags-noautoblock": "بستن خودانجوم ناکشتگر بیه",
"block-log-flags-noemail": "انجومانامه ناکشتگر بیه",
"block-log-flags-nousertalk": "نبوئه بلگه چک چنه خوتونه ویرایشت بکید",
+ "block-log-flags-angry-autoblock": "نهاگری خودانجوم پئشکرده کنشتگر بیه",
"block-log-flags-hiddenname": "نوم کاروری قام بیه",
+ "range_block_disabled": "درس کردن بسن یه گل پوشگر وه دس دیوونداریا ناکنشتگر بیه.",
+ "ipb_expiry_invalid": "گات تموم بیین نامعتوره.",
+ "ipb_expiry_temp": "نهاگری نوم کاریاریا قام بیه واس همیشه یی با.",
"ipb_already_blocked": "\"$1\" ایسه نهاگری بیه.",
+ "ipb-needreblock": "$1 د دماتر نهاگری بیه. آیا میهایت میزوکاری ونه آلشت بیتو؟",
"ipb-otherblocks-header": "هنی{{PLURAL:$1|نهاگرتن|نهاگرتنیا}}",
+ "ipb_cant_unblock": "خطا:نهاگری د نوم دیارکن $1 دیار نئ.شایت وه د ایسنی نهاگریش د بین رئته.",
"ip_range_invalid": "پوشگر نامعتور آی پی",
+ "ip_range_toolarge": "نهاگری پوشینه یا گپتر $1/ مجاز نئ.",
"proxyblocker": "قلف کننه پروکسی",
"sorbs": "دی ان اس بی ال",
+ "ipbnounblockself": "شما صلادار وارکدن دسرسی خوتو نییت.",
"lockdb": "قلف کردن رسینه گا",
"unlockdb": "رسینه گا قلف نبیه",
+ "lockconfirm": "هره، مه واقعند میهام که رسینه گا نهاگری با.",
"unlockconfirm": "هره، مه واقعند میهام که رسینه گا وا بوئه.",
"lockbtn": "قلف کردن رسینه گا",
"unlockbtn": "رسینه گا قلف نبیه",
+ "locknoconfirm": "شما کلیت پشت راسکاری نه نشودار نکردیته.",
"lockdbsuccesssub": "رسینه گا د خوئی قلف بیه",
"unlockdbsuccesssub": "قلف رسینه گا ؤرداشته بیه",
+ "unlockdbsuccesstext": "رسینه گا وا بیه.",
+ "databasenotlocked": "رسینه گا وازه.",
+ "lockedbyandtime": "(وا{{GENDER:$1|$1}} د $2 د$3)",
"move-page": "$1 جا وه جا کو",
"move-page-legend": "بلگه نه جا وه جا کو",
"movearticle": "جا وه جا کردن بلگه:",
"movenotallowed": "شما وه جا وه جا کردن بلگه دسرسی ناریت",
"movenotallowedfile": "شما وه جا وه جا کردن جانیایا دسرسی ناریت",
+ "cant-move-category-page": "شما صلا ینه که دسه یا نه ناریت.",
+ "cant-move-to-category-page": "شما صلا ینه که یه بلگه نه بوریت وه بلگه دسه ناریت.",
"newtitle": "سی سرون هنی:",
+ "move-watch": "دیئن بلگه سرچشمه و بلگه حاستنی",
"movepagebtn": "بلگه جا وه جا کو",
"pagemovedsub": "د خوئی جا وه جا بیه",
+ "movepage-moved": "<strong>\"$1\" جا وه جا بیه سی \"$2\"</strong>",
"movepage-moved-redirect": "یه گل واگردونی دروس بیه.",
+ "movepage-moved-noredirect": "د دروس کردن واگردونی جلوگری بیه.",
+ "movetalk": "بلگه چک چنه ئم جا وه جا بوئه",
+ "move-subpages": "جا وه جایی بلگه یا(تا $1 بلگه)",
+ "move-talk-subpages": "جا وه جا کردن زیر بلگه یا بلگه چک چنه (تا $1 بلگه)",
+ "movepage-page-moved": "بلگه $1 د $2 جا وه جا بیه",
+ "movepage-page-unmoved": "نبوئه بلگه $1 د $2 جا وه جا بوئه",
"movelogpage": "جاوه جا کردن",
"movelogpagetext": "د هار یه گل نوم گه د جا وه جایی یا بلگه هئ",
+ "movesubpage": "{{جمی:$1|زیر بلگه|زیر بلگه یا}}",
+ "movenosubpage": "ای بلگه زیر بلگه نئ.",
"movereason": "دلیل:",
"revertmove": "لرستن",
"delete_and_move": "پاکسا و جا وه جا بوئه",
"delete_and_move_confirm": "هری بلگه نه پاکسا کو",
+ "delete_and_move_reason": "پاکساکاری سی ممکن بیین جا وه جایی «[[$1]]»",
+ "immobile-source-namespace": "نبوئه بلگه یا نه وه نومجا \"$1\" جا وه جا با",
+ "immobile-target-namespace": "نبوئه بلگه یا نه وه نومجا \"$1\" جا وه جا با",
+ "immobile-target-namespace-iw": "هوم پیوند مینجاویکی حاستنی مجازی سی جا وه جا کردن بلگه نئ.",
"immobile-source-page": "ای بلگه جا وه جا کردنی نئ.",
+ "immobile-target-page": "نبوئه وه ای مقصد چنی سرونی جا وه جا بوئه.",
+ "imagenocrossnamespace": "نبوئه جانیانه وه یه گل نومجا غیرجانیایی جا وه جا بکیت",
+ "nonfile-cannot-move-to-file": "نبوئه جانیانه وه یه گل نومجا غیرجانیایی جا وه جا بکیت",
+ "imagetypemismatch": "دماون جانیا تازه وا نوع وه سازگاری ناره",
+ "imageinvalidfilename": "نوم جانیا هدف معتور نئ",
+ "fix-double-redirects": "وه هنگوم سازی همه واگردونیایی که وه گوتار اصلی هشاره میکن",
+ "move-leave-redirect": "وه جا نیائن یه گل واگردونی",
+ "protectedpagemovewarning": "<strong>زئنار:ای بلگه سی یه پر و پیم بیه که کاریاریایی که دسرسی دیوونداری دارن فقط بتونن دش ویرایشت بکن.</strong>\nآخرین سیائه سی سرچشمه یا د هار اماییه کاری بیه:",
+ "semiprotectedpagemovewarning": "<strong>د ویر داشتویت:</strong> ای بلگه سی یه که فقط کاریاریا ثوت نام کرده تونستون دش ویرایشت بکه ن پر و پیم بیه.\nآخرین پهرستنومه دئه بیه سی سرچشمه هار نها اماییه بیه:",
"export": "وه صحرا ديئن بلگيا",
"exportall": "وه صحرا ديئن همه بلگيا",
+ "exportcuronly": "فقط مینونه دار وانئری ایسنی با،نه همه ویرگار نه",
+ "exportlistauthors": "مینونه دار نومگه کامل هومیاریا سی هر بلگه",
"export-submit": "وه در ديئن",
+ "export-addcattext": "اضاف کردن بلگه یا د یه گل دسه:",
"export-addcat": "اضاف کو",
+ "export-addnstext": "اضاف کردن بلگه یا د یه نومجا:",
"export-addns": "اضاف كو",
"export-download": "ذخیره کردن جانیا",
"export-templates": "شامل چوئه یا",
+ "export-pagelinks": "مینونه دار بیین بلگه یا هوم پیوند تا ای پی یا:",
"allmessages": "سامونه پیغومیا",
"allmessagesname": "نوم",
"allmessagesdefault": "سفارشت متنی پيش فرض",
+ "allmessagescurrent": "نیسسه ایسنی پیغوم",
"allmessages-filter-legend": "فیلتر",
+ "allmessages-filter": "فیلتر کردن د اساس شخصی کردن:",
"allmessages-filter-unmodified": "آلشت نبیه",
"allmessages-filter-all": "همه",
"allmessages-filter-modified": "آلشت بیه",
@@ -1919,111 +2115,186 @@
"thumbnail-more": "گپ كردن",
"filemissing": "گم بیئن جانیا",
"thumbnail_error": "خطا د راس بیئن بن کلئکی:$1",
+ "thumbnail_error_remote": "پیغوم خطا $1 :\n$2",
+ "djvu_page_error": "بلگه DjVu وه در د حد مجاز",
+ "djvu_no_xml": "امکان پیدا کردن جانیا XML سی وه کار گرتن DjVu وجود ناشت.",
+ "thumbnail-temp-create": "نبوئه جانیا موقت بن کلیکی نه راست بکیت",
+ "thumbnail-dest-create": "نبوئه بن کلیکی نه د مقصدش اماییه بکیت",
+ "thumbnail_invalid_params": "بن کلیکی وا پارامتریا نامعتور",
+ "thumbnail_toobigimagearea": "جانیا وا بعدیا گپتر د $1",
+ "thumbnail_dest_directory": "نبوئه دایرکتوری مقصد نه درست بکیت",
+ "thumbnail_image-type": "نوع عسگ حامیین داری نبوئه",
+ "thumbnail_image-missing": "وه ویر و باور میا که جانیا گم بیه:$1",
"import": "وامین اوردن بلگه یا",
+ "importinterwiki": "وامین اوردن ترانس ویکی",
"import-interwiki-sourcewiki": "سرچشمه ویکی:",
"import-interwiki-sourcepage": "بلگه سرچشمه:",
+ "import-interwiki-history": "ؤرداشتن ویرگار همه وانئریا سی ای بلگه",
"import-interwiki-templates": "همه چوئه یا",
"import-interwiki-submit": "وامین اوردن",
"import-interwiki-namespace": "نومجا مقصد:",
+ "import-interwiki-rootpage": "ریشه بلگه مقصد(دل به حایی):",
"import-upload-filename": "نوم جانیا:",
"import-comment": "ویر و باور:",
"importstart": "د حال و بار وامین اوردن",
"import-revision-count": "$1 {{جمی:$1|وانئری|وانئریا}}",
"importnopages": "هیچ بلگه ای وامین نیومائه.",
+ "imported-log-entries": "$1 {{PLURAL:$1|داده وار پهرستنومه|داده وار پهرستنومه یا}} وامین اومائه.",
"importfailed": "وامین اوردن شکست حرده: <nowiki>$1</nowiki>",
+ "importunknownsource": "نوع سرچشمه وامین اوردن نادیاره",
"importcantopen": "نبوئه جانیا دئه بیه نه وا بکید",
"importbadinterwiki": "هوم پیوند مینجاویکی گن",
"importsuccess": "وامین اوردن تموم بی!",
"importnofile": "هیچ جانیا دئه بیه ای سوار نبیه.",
+ "importuploaderrorpartial": "د سوارکرد وامین اوردن جانیا شکستی پیش اومائه.\nانازه جانیا د انازه بیشترونه مجاز گپتره.",
+ "importuploaderrortemp": "د سوارکرد جانیا وامین اوردن مشگلی پیش اومائه.\nتابنده موقت گم بیه.",
+ "import-parse-failure": "خطا د وااشکافت یه گل وامین اوردن ایکس ام ال",
"import-noarticle": "هیچ بلگه ای سی وامین اوردن نئ!",
+ "import-nonewrevisions": "وانئرییا وامین اورده نبیه(همه یا د ایسنی هئشو، یا سی پیش اومائن خطا ور نظر نبینه).",
+ "xml-error-string": "$1 د خط$2, ستین $3 (byte $4): $5",
"import-upload": "سوار کرد دونسمنیا ایکس ام ال",
"import-token-mismatch": "کمبود د دونسمنیا نشینگه.\nلطفن هنی کوششت بکید.",
+ "import-invalid-interwiki": "نبوئه د ویکی دیارکرده چی یی وامین اورد.",
+ "import-error-edit": "بلگه «$1» وامین نیومائه، سی یه که شما نمی تونیت ونه ویرایشت بکیت.",
+ "import-error-create": "بلگه «$1» وامین نیومائه، سی یه که شما نمی تونیت ونه راست بکیت.",
+ "import-error-interwiki": "بلگه «$1» وامین نیومائه، سی یه که نوم وه سی یه گل هوم پیوندگری خارجی اماییه کاری بیه(مینجا ویکی).",
+ "import-error-special": "بلگه «$1» وامین نیومائه، سی یه که وه مال وه یه گل نومجا خاصه که او بلگه یا صلادار نئین.",
+ "import-error-invalid": "بلگه \"$1\" سی یه که نامعتور بیین نومش ممکن بی د ویکی وامین اورده نبیه.",
+ "import-error-unserialize": "نبوئه وه دراوردن بلگه $2 د بلگه «$1» د شکل رازینه کاری بیه نه انجوم بییت.چؤ اومائه که نسقه ای د مدل مینونه $3 وه کار گرته که وه د شکل $4 رازینه کاری بیه.",
+ "import-options-wrong": "{{PLURAL:$2|جزئیات|جزئیات}} اشتوا: <nowiki>$1</nowiki>",
+ "import-rootpage-invalid": "ریشه دئه بیه د بلگه یه گل سرون نامعتوره.",
+ "import-rootpage-nosubpage": "نومجا \"$1\" بلگه پایه صلا زیر بلگه نه نمی یه.",
"importlogpage": "پهرستنومه دئن",
+ "importlogpagetext": "وامین اوردن بلگه یا وا ویرگارچه ویرایشت ونو د ویکی یا هنی",
+ "import-logentry-upload-detail": "$1 {{جمی:$1|وانئری|وانئریا}} وامین اومانه",
+ "import-logentry-interwiki-detail": "$1 {{جمی:$1|وانئری|وانئریا}} د $2 وامین اومائنه",
"javascripttest": "ازمایشت کردن جاوا اسکریپت",
- "tooltip-pt-userpage": "بلگه كارورتو",
+ "javascripttest-pagetext-noframework": "ای بلگه سی انجوم دئن ازمایشتیا جاوا اسکریپت اماییه کاری بیه.",
+ "javascripttest-pagetext-unknownframework": "چوئه کار نادیار ازمایشت \"$1\"",
+ "javascripttest-pagetext-unknownaction": "کنشتکاری نادیار \"$1\".",
+ "javascripttest-pagetext-frameworks": "لطفن یه گل د چوئه یا ازمایشت هاری نه انتخاو بکیت :$1",
+ "javascripttest-pagetext-skins": "یه گل پوسه نه سی انجوم دئن ازمایشتا انتخاو بکیت:",
+ "javascripttest-qunit-intro": "[$1 مستندیا ازمایشت] نه د mediawiki.org سیل بکیت.",
+ "tooltip-pt-userpage": "بلگه کاریاریتو",
+ "tooltip-pt-anonuserpage": "بلگه کاریاری تیرنشون آی پی ای که دش ویرایشت می کید",
"tooltip-pt-mytalk": "بلگه قسه كردن شما",
+ "tooltip-pt-anontalk": "چک چنه دباره ویرایشتیا ای تیرنشون آی پی",
"tooltip-pt-preferences": "اولويتيا شما",
"tooltip-pt-watchlist": "نوم نوشت د بلگه يايی كه شما آلشتاشونه پيگئری ميكيد",
"tooltip-pt-mycontris": "يه گل د هومياريا شما",
- "tooltip-pt-login": "توصيه بو كه وارد بوئين، اما مجبوری ني",
- "tooltip-pt-logout": "د سيستم دراومائن",
- "tooltip-ca-talk": "قسه دباره محتوا بلگه",
- "tooltip-ca-edit": "شما تونيد ای بلگه نه ويرايشت بكيد. لطف بكيد د دگمه پيش ديئن پيش د ذخيره كردن استفاده بكيد",
- "tooltip-ca-addsection": "بشخ تازه نه شرو كو",
- "tooltip-ca-viewsource": "ای بلگه حفاظت بيه.\nشما تونيت سرچمه ش بئوينيت",
+ "tooltip-pt-login": "ایما موئیم که روئیت وامین سامونگه؛ولی ای کار اژباری نئ",
+ "tooltip-pt-logout": "د سامونه دراومائن",
+ "tooltip-pt-createaccount": "شما تشویق بییته که یه گل حساو راست بکیت و بیایت وامین؛ د هر جور ای کار اژباری نئ",
+ "tooltip-ca-talk": "قسه دباره مینونه بلگه",
+ "tooltip-ca-edit": "شما تونيد ای بلگه نه ويرايشت بكيد. لطف بكيد دگمه پيش ديئن پيش د اماییه کردن نه وه کار بیئریت",
+ "tooltip-ca-addsection": "د یه گل بهرجا هنی شرو بک",
+ "tooltip-ca-viewsource": "ای بلگه پر و پیم بيه.\nشما تونيت سرچمه ش بئوينيت",
"tooltip-ca-history": "دوواره ديئن ای بلگه",
"tooltip-ca-protect": "ای بلگه نه حفاظت بكيد",
+ "tooltip-ca-unprotect": "پر و پیم گیری د ای بلگه نه آلشت بکیت",
"tooltip-ca-delete": "ای بلگه نه پاکسا کو",
+ "tooltip-ca-undelete": "د نو زنه کردن ویرایشتیا ری ای بلگه دما یه که پاکساگری بان",
"tooltip-ca-move": "ای بگله نه جا وه جا كو",
"tooltip-ca-watch": "اضاف کردن ای بلگه وه نوم نوشت پیگئریاتو",
"tooltip-ca-unwatch": "ورداشتن ای بلگه وه نوم نوشت پیگئریاتو",
"tooltip-search": "پی جوری {{SITENAME}}",
"tooltip-search-go": "رؤ د بلگه ای که یه نوم راستکی ها مینش الوت ار دش بوئه",
- "tooltip-search-fulltext": "بلگيانه سی چنو متنی بگرد",
+ "tooltip-search-fulltext": "بلگيانه سی چنس نیسسه یی پی جوری کو",
"tooltip-p-logo": "سرآسونه نه بونيت",
"tooltip-n-mainpage": "سرآسونه نه بونيت",
- "tooltip-n-mainpage-description": "ديئن سرآسونه",
- "tooltip-n-portal": "دباره پروجه،ايسا ترين(تونيت) چی بكيد، كجه چيانه بجورين",
+ "tooltip-n-mainpage-description": "سرآسونه نه بونيت",
+ "tooltip-n-portal": "دباره پروجه،شما می تونیت(تونيت) چی بکیت، د کجا ای چیانه بجوریت",
"tooltip-n-currentevents": "ساوند دونسمنديايی كه هان د پيشومدل تازه باو پيدا كو",
- "tooltip-n-recentchanges": "يه نوم جاوند سی تغيرا تازه مئن ويكی",
+ "tooltip-n-recentchanges": "یه گل نومگه سی آلشتیا ایسنی د ویکی",
"tooltip-n-randompage": "سوار كرد بلگه بختكی",
- "tooltip-n-help": "جاگه سی فهمسن",
- "tooltip-t-whatlinkshere": "سيائه تمؤم بلگيایی كه ايچه چسب ون دارن",
- "tooltip-t-recentchangeslinked": "تغيريا تازه باو مئن بلگيايي كه د ای بلگه چسب وند بيئنه",
+ "tooltip-n-help": "یه گل جاگه سی فهمسن",
+ "tooltip-t-whatlinkshere": "یه گل نومگه د همه بلگه یایی كه ايچه هوم پیوند دارن",
+ "tooltip-t-recentchangeslinked": "آلشتیا تازه باو مئن بلگيايي كه د ای بلگه هوم پیوند بيئنه",
"tooltip-feed-rss": "هوال حون آر اس اس سی ای بلگه",
- "tooltip-feed-atom": "تغذيه كؤچك سی ای بلگه",
+ "tooltip-feed-atom": "حوال هون اتمی سی ای بلگه",
"tooltip-t-contributions": "یه نوم گه د هومیاریا ای کارور",
"tooltip-t-emailuser": "سی ای كارور ايميل كل كو",
- "tooltip-t-upload": "بلم گير كردن فايلا",
- "tooltip-t-specialpages": "سيائه تمؤم بلگيا خاص",
- "tooltip-t-print": "نسقه چاپ بيئنی سی ای بلگه",
- "tooltip-t-permalink": "چسب ون هميشئی د دوواره بينی ای بلگه",
- "tooltip-ca-nstab-main": "ديئن محتوا بلگه",
- "tooltip-ca-nstab-user": "ديئن بلگه كارور",
+ "tooltip-t-info": "دونسمنیا بیشتر دباره ای بلگه",
+ "tooltip-t-upload": "سوارکردن جانیایا",
+ "tooltip-t-specialpages": "نومگه همه بلگه یا ویجه",
+ "tooltip-t-print": "نسقه پلا بيئنی سی ای بلگه",
+ "tooltip-t-permalink": "هوم پیوند همیشه یی سی دوواره دیئن ای بلگه",
+ "tooltip-ca-nstab-main": "ديئن مینونه بلگه",
+ "tooltip-ca-nstab-user": "ديئن بلگه کاریار",
"tooltip-ca-nstab-media": "دیئن بلگه وارسگر",
"tooltip-ca-nstab-special": "اي بلگه ويجه يه، شما نتونيت خود اي بلگه نه ويرايشت بكيد",
"tooltip-ca-nstab-project": "ديئن بلگه پروجه",
- "tooltip-ca-nstab-image": "ديئن بلگه فايل",
+ "tooltip-ca-nstab-image": "ديئن بلگه جانیا",
"tooltip-ca-nstab-mediawiki": "دیئن پیغوم سامونه",
"tooltip-ca-nstab-template": "ديئن قالو",
"tooltip-ca-nstab-help": "ديئن بلگه هومیاری",
"tooltip-ca-nstab-category": "ديئن بلگه دسه بنی",
"tooltip-minoredit": "یه نه د عنوان حیرده ویرایشت ثوت کو",
"tooltip-save": "آلشتياتونه اماییه بكيد",
- "tooltip-preview": "پیش سیل آلشتیاتو،لطفن پیش د ذخیره دش استفاده بکیتو",
+ "tooltip-preview": "پیش سیل آلشتیاتو،لطف بکیت وه نونه دما د اماییه کاریشو وه کار بیئریت!",
"tooltip-diff": "آلشتیا نه که شما د ای متن راس کردیته نشو بیئه",
"tooltip-compareselectedversions": "فرخیا مینجا دو تا د دو بار دیئن ای بلگه نه بوینیت",
"tooltip-watch": "ای بلگه نه د سیل برگتو اضاف بکید",
+ "tooltip-watchlistedit-normal-submit": "ؤرداشتن سرونیا",
"tooltip-watchlistedit-raw-submit": "وه هنگوم سازی سیل برگ",
+ "tooltip-recreate": "د نو راس کردن بلگه بی یه که و پاکساگری دماتر وه سیل بکیم",
"tooltip-upload": "شرو د سوار کرد",
"tooltip-rollback": "\"ورگشتن\" لرستن د حالت اول سی ای بلگه که سی يه كه هومياری نيايی اصلاح بيه وا يه پورنسن",
"tooltip-undo": "انجوم نگرتن ای ویرایشت ورگن و همه فرمیا ویرایشت تانه که حالت پیش سیل واکو.یه اجازه میئه سی اضاف کردن یه دلیل د چکسته.",
+ "tooltip-preferences-save": "اولويتيا نه ذخيره بكيد",
"tooltip-summary": "يه چكسته كؤچك وارد بكيد",
"interlanguage-link-title": "$1-$2",
"interlanguage-link-title-nonlang": "$1 – $2",
"anonymous": "ناشناس {{جمی:$1|کارور|کاروریا}} {{سیل جا}}",
+ "siteuser": "{{نوم سیلجا}} کارور $1",
"anonuser": "{{سیل جا}} کارور ناشناس $1",
+ "lastmodifiedatby": "ای بلگه آخری بار د $1,$2 وه دس $2 آلشت دئه بیه.",
+ "othercontribs": "د اساس کار وا $1.",
"others": "دیه رون",
"siteusers": "{{نوم سیل جا}} {{جمی:$2|کارور|کاروریا}} $1",
+ "anonusers": "{{نوم سیل جا}} نادیار {{جمی:$2|کاریار|کاریاریا}} $1",
"creditspage": "اعتوار بلگه",
+ "nocredits": "دونسمنیا راس کننه یا ای بلگه د دسرس نئ",
+ "spamprotectiontitle": "فیلتر پر و پیم گری د اسپم",
+ "spamprotectionmatch": "نیسسه هاری چی ای یه که فیلتر اسپم ایما نه ونه د کار: $1",
+ "spambot_username": "اسپم پاک کن ویکی وارسگر",
+ "spam_reverting": "واگردونی وه آخری نسقه ای که هوم پیوندی وه $1 ناره.",
+ "spam_blanking": "همه وانئریایی که مینونه دار هوم پیوند $1 هئن، دارن حالی بوئن",
+ "spam_deleting": "همه وانئریایی که مینونه دار هوم پیوند $1 هئن، دارن پاکساگری بوئن",
+ "simpleantispam-label": "وارسی ضد اسپم.\nای \"جاگه\" نه پر نکیت!",
"pageinfo-title": "دونسمنیا سی \"$1\"",
+ "pageinfo-not-current": "د بدبختی،نبوئه که ای دونسمنیا نه سی وانئریا دماتری نهااماییه بکیت.",
"pageinfo-header-basic": "دونسمنیا پایه",
"pageinfo-header-edits": "ویرایشت ویرگار",
"pageinfo-header-restrictions": "پر و پیم کردن بلگه",
"pageinfo-header-properties": "چیا بلگه",
+ "pageinfo-display-title": "نشو دئن سرون",
+ "pageinfo-default-sort": "کلیت سرجا یک کن پیش فرض",
"pageinfo-length": "انازه بلگه(وه بایت)",
"pageinfo-article-id": "نوم دیار کن بلگه",
"pageinfo-language": "بلگه مینونه زون",
"pageinfo-content-model": "شلگ مینونه بلگه",
- "pageinfo-views": "شماره دیئن یا",
+ "pageinfo-robot-policy": "نومگه کاری وا رباتیا",
+ "pageinfo-robot-index": "صلادار",
+ "pageinfo-robot-noindex": "بی صلا",
"pageinfo-watchers": "شماره سیل کننه بلگه یا",
+ "pageinfo-few-watchers": "کمتر د $1 {{PLURAL:$1|سیل کننه|سیل کننه یا}}",
"pageinfo-redirects-name": "شماره واگردونیا ای بلگه",
"pageinfo-redirects-value": "$1",
+ "pageinfo-subpages-name": "انازه زیربلگه یا ای بلگه",
+ "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|واگردونی|واگردونیا}}; $3 {{PLURAL:$3|بی واگردونی|بی واگردونیا}})",
"pageinfo-firstuser": "بلگه راس کن",
"pageinfo-firsttime": "گات دروس بیین بلگه",
"pageinfo-lastuser": "آخری ویرایشتگر",
"pageinfo-lasttime": "گات آخری ویرایشت",
"pageinfo-edits": "شماره همه ویرایشتیا",
+ "pageinfo-authors": "شماره کلی نویسنه یا یکونه",
+ "pageinfo-recent-edits": "شماره ویرایشتیا ایسنی (د $1 دماتر)",
+ "pageinfo-recent-authors": "شماره کلی نویسنه یا یکونه",
+ "pageinfo-magic-words": "جادویی{{PLURAL:$1|کلیمه|کلیمه یا}} ($1)",
+ "pageinfo-hidden-categories": "$1{{جمی:$1|دسه|دسه يا}} قام بیه",
+ "pageinfo-templates": "{{PLURAL:$1|چوئه|چوئه یا}} وه کار گرته بیه($1)",
+ "pageinfo-transclusions": "{{PLURAL:$1|بلگه|بلگه یا}} وه کار گرته بیه د ($1)",
"pageinfo-toolboxlink": "دونسمنیا بلگه",
"pageinfo-redirectsto": "واگردونی سی",
"pageinfo-redirectsto-info": "دونسمنیا",
@@ -2036,26 +2307,54 @@
"pageinfo-category-pages": "شماره بلگيا",
"pageinfo-category-subcats": "شماره زیر دسه یا",
"pageinfo-category-files": "شماره جانیایا",
+ "markaspatrolleddiff": "نشو دار کردن چی سردیاری بیه",
+ "markaspatrolledtext": "ای بلگه نه چی بلگه ای که سردیاری کرده با نشودار کو",
+ "markedaspatrolled": "نشو دار کردن چی سردیاری بیه",
+ "rcpatroldisabled": "سردیاری کردن سی آلشتیا ایسنی ناکنشتگر بیه",
+ "rcpatroldisabledtext": "خصوصیت سردیاری کردن د ری آلشتیا ایسنی تازه ای یا ناکشتگر بیه.",
+ "markedaspatrollederror": "نبوئه چی یه گل سردیاری کرده نشودار با",
+ "markedaspatrollederrortext": "شما واس سی نشودار کردن یه گل وانئری چی سردیاری کرده ونه تیار بکیت.",
+ "markedaspatrollederror-noautopatrol": "شما صلا یه نه که آلشتیا خوتونه چی یه که سردیاری کرده بان ناریت.",
+ "markedaspatrollednotify": "آلشتیایی که مال $1 چی یه گل چی سردیاری کرده نشودار بینه.",
+ "markedaspatrollederrornotify": "نشودار کردن چی نشودار بیه شکست حرده",
"patrol-log-page": "پهرستنومه گشتن",
+ "patrol-log-header": "یه پهرستنومه وانئریا سردیاری کرده هئ.",
+ "log-show-hide-patrol": "$1 پهرستنومه سردیاری کردن",
+ "deletedrevision": "وانئری دماتری پاکسابیه د $1",
"filedeleteerror-short": "خطا پاک نبیئن جانیا:$1",
+ "filedeleteerror-long": "د گات پاکسا کردن جانیا یه گل خطا پیش اوما:\n\n\n$1",
+ "filedelete-missing": "نبوئه جانیا \"$1\" نه پاکسا بکیت سی یه که وه وجود ناره.",
+ "filedelete-old-unregistered": "وانئری جانیا تیارکرده \"$1\" د رسینه جا وجود ناره.",
+ "filedelete-current-unregistered": "جانیا تیارکرده \"$1\" د رسینه جا نئیش.",
+ "filedelete-archive-read-only": "نشونگه مال دیارکردن ($1) د لا سرور قاول نیسنن نئ.",
"previousdiff": "← ويرايشت كۈهنه تر",
"nextdiff": "ويرايشت تازه تر",
+ "imagemaxsize": "انازه عسگ:<br /><em>(سی شرح جانیا بلگه یا)</em>",
+ "thumbsize": "انازه بن کلکی:",
"widthheight": "$1 × $2",
"widthheightpage": "$1 × $2, $3 {{PLURAL:$3|بلگه|بلگه یا}}",
"file-info": "انازه جانیا: $1, MIME type: $2",
"file-info-size": "$1 × $2 پیکسل, انازه فایل: $3, MIME نوع: $4",
"file-info-size-pages": "$1 × $2 pixels, انازه جانیا: $3, MIME type: $4, $5 {{PLURAL:$5|بلگه|بلگه یا}}",
"file-nohires": "عسك ون بالاتري دش ني",
- "svg-long-desc": "اس وی جی فايل.نومنا $1 $2 پيكسل",
- "show-big-image": "فایل اصلی",
- "show-big-image-size": "$1 × $2 pixels",
+ "svg-long-desc": "اس وی جی جانیا.نومنا $1 $2 پيكسل",
+ "svg-long-desc-animated": "جانیا جمشدار اس وی جی .نومنا $1 × $2 پيكسل،انازه جانیا:$3",
+ "svg-long-error": "جانیا اس وی جی نامعتور:$1",
+ "show-big-image": "جانیا اصلی",
+ "show-big-image-preview": "انازه ای پیش سیل:$1.",
+ "show-big-image-other": "هنی{{PLURAL:$2|گپ نما کردن|گپ نما کردنیا}}: $1.",
+ "show-big-image-size": "$1 × $2 پیکسل",
"file-info-gif-looped": "حلقه دار",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|فریم|فریمیا}}",
"file-info-png-looped": "حلقه دار",
"file-info-png-repeat": "$1 بازی کرده{{جمی:$1|وخت|وختیا}}",
+ "file-info-png-frames": "$1 {{PLURAL:$1|فریم|فریمیا}}",
"newimages": "عسگدونی جانیایا تازه",
+ "imagelisttext": "د هار نومگه <strong>$1</strong> {{PLURAL:$1|جانیا|جانیایا}} اماییه جا بیه$2.",
"newimages-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.",
"newimages-legend": "فیلتر",
"newimages-label": "نوم جانیا(یا بشقی د وه):",
+ "newimages-showbots": "سوارکردیا نه وا بوتیا نشو بیه",
"noimages": "هیچی سی دیئن نئ",
"ilsubmit": "پی جوری",
"bydate": "وا گات",
@@ -2078,73 +2377,380 @@
"minutes-ago": "$1 {{PLURAL:$1|دیقه|دیقه یا}} دماتر",
"seconds-ago": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}} دماتر",
"monday-at": "دوشمه د $1",
+ "tuesday-at": "سه شمه د $1",
+ "wednesday-at": "چارشمه د $1",
+ "thursday-at": "پن شمه د $1",
+ "friday-at": "جمه د $1",
+ "saturday-at": "شمه د $1",
+ "sunday-at": "یه شمه د $1",
+ "yesterday-at": "دیرو د $1",
"bad_image_list": "دونسمنديانه وه ای شلگ وارد بكيت:\n\nفقط سرخط يایی که وا * شرو بوئن د وير گرته بوئن. اولی چسب ون مئن هر سرخط، باید چسب ونی وه یک عسگ گن با.\nچسب ونيا نيایی د همو سرخط، وه عنوان چيا استثنادار د وير گرته بوئن",
"metadata": "داديا فره گپ",
"metadata-help": "ای فایل شومل دونسمنیا هنی یه.شایت د دیربین رقم ون یا اسکنری که سی راس کردنشو استفاده بیه،وه ایچه اضاف بیه",
- "metadata-fields": "رشته یا گپ دونسمنیا که د ای پیغوم نوم ون بینه شومل بلگه عسگ ن که وختی که جدول گپ دونسمنیا وا بوئه نشون دئیه بوئن.\nچی یا هنی سی یه که پیش فرضن قام بوئن.\n*راست کو\n*مدل\n*دم وخت اصل\n*وخت آشگار\n*اف ان شماره\n*ایزو نرخ من سرعت\n*فوکالنس\n*هنرمن\n*کپی رایت\n*حالت جی پی اس \n*جی پی اس گپ حالت\n*جی پی اس همه حالت",
+ "metadata-expand": "نشو دئن جزییات دمادیسگری",
+ "metadata-collapse": "قام کردن جزییات دمادیسگری",
+ "metadata-fields": "رشنه یا یا گپ دونسمنیا که د ای پیغوم نومگه کاری بینه د ور گرته بلگه عسگ ن که گات وختی که جدول گپ دونسمنیا واز بوئه نشون دئیه بوئن.\nچی یا هنی سی یه که پیش فرضن قام بوئن.\n*راست کو\n*مدل\n*دم وخت اصل\n*وخت آشگار\n*اف ان شماره\n*ایزو نرخ من سرعت\n*فوکالنس\n*هنرمن\n*کپی رایت\n*حالت جی پی اس \n*جی پی اس گپ حالت\n*جی پی اس همه حالت",
"metadata-langitem": "<strong>$2:</strong> $1",
"metadata-langitem-default": "$1",
"exif-imagewidth": "پئنا",
"exif-imagelength": "بلنگی",
+ "exif-bitspersample": "نقطه یا سی هر اندوم",
+ "exif-compression": "شیوات جم و جور کردن",
+ "exif-photometricinterpretation": "ترکیو پیکسل",
+ "exif-orientation": "سرچشمه",
+ "exif-samplesperpixel": "شماره اندومیا",
"exif-planarconfiguration": "سرجایک کردن رسینه",
+ "exif-ycbcrsubsampling": "نسوت زیرنمونه Y وه C",
+ "exif-ycbcrpositioning": "جاگری کردن Y و C",
+ "exif-xresolution": "گپ نما کردن د آسو",
+ "exif-yresolution": "گپ نما کردن د وارو",
+ "exif-stripoffsets": "جاگه رسینه یا عسگ",
+ "exif-rowsperstrip": "انازه ردیفیا سی هر نوار",
+ "exif-stripbytecounts": "نقطه یا سی هر نوار جمع و جور بیه",
+ "exif-jpeginterchangeformat": "جا وه جایی نسوت وه JPEG SOI",
+ "exif-jpeginterchangeformatlength": "بایت رسینه JPEG",
+ "exif-whitepoint": "رئن دار بین جاگه اسبئ",
+ "exif-primarychromaticities": "رنگ گرتن چیا مهمتر",
+ "exif-ycbcrcoefficients": "ضریبا ماتریس جا وه جایی جاگه رئنی",
+ "exif-referenceblackwhite": "جفت انازه سرچشمه سیا و اسبئ",
"exif-datetime": "آلشت دئن وخت و دمون جانیا",
- "exif-make": "سازنه دیربین",
+ "exif-imagedescription": "نوم عسگ",
+ "exif-make": "سازیار دیربین",
+ "exif-model": "مدل دیربین",
+ "exif-software": "نرم افزار به کار گرتنی",
"exif-artist": "نیسنه",
+ "exif-copyright": "حق تکثیر دار",
+ "exif-exifversion": "نسقه Exif",
+ "exif-flashpixversion": "نسقه حامین داری Flashpix",
+ "exif-colorspace": "رئن ورگه",
+ "exif-componentsconfiguration": "مئنی هر اندوم",
+ "exif-compressedbitsperpixel": "شکل جمع و جیل کردن عسگ",
"exif-pixelydimension": "پئنا عسگ",
+ "exif-pixelxdimension": "درازا عسگ",
"exif-usercomment": "ویر و باوریا کارور",
"exif-relatedsoundfile": "جانیا دنگ دار مرتوط",
"exif-datetimeoriginal": "دمون و وخت راس بیئن دونسمنیا",
+ "exif-datetimedigitized": "گات و وخت دیجیتالی کردن",
+ "exif-subsectime": "کم کردن ثانیه گات و وخت",
+ "exif-subsectimeoriginal": "کم کردن ثانیه گات اصلی",
+ "exif-subsectimedigitized": "کم کردن ثانیه گات دیجیتالی",
+ "exif-exposuretime": "گات نیر دئن",
+ "exif-exposuretime-format": "$1 ثانیه ($2)",
+ "exif-fnumber": "ضریب اف",
+ "exif-exposureprogram": "برنامه نیر دئن",
+ "exif-spectralsensitivity": "حساسیت طیفی",
+ "exif-isospeedratings": "گرینج گری سرعت سی ایزو",
+ "exif-shutterspeedvalue": "سرعت اپکس شاتر",
+ "exif-aperturevalue": "انازه اپکس دیافراگم",
+ "exif-brightnessvalue": "انازه برچ زئن اپکس",
+ "exif-exposurebiasvalue": "خطا نیر دئن اپکس",
+ "exif-maxaperturevalue": "بیشرونه د یک رئتن زمین",
+ "exif-subjectdistance": "فاصله سوجه",
+ "exif-meteringmode": "شکل سنجشت نیر",
+ "exif-lightsource": "سرچشمه نور",
+ "exif-flash": "فلش",
+ "exif-focallength": "انازه کانونی عدسی",
+ "exif-subjectarea": "انازه اندومواره",
+ "exif-flashenergy": "آز فلش",
+ "exif-focalplanexresolution": "گپ نما کردن X د بلگه کانونی",
+ "exif-focalplaneyresolution": "گپ نما کردن Y د بلگه کانونی",
+ "exif-focalplaneresolutionunit": "واحد",
+ "exif-subjectlocation": "جاگه موضوع",
+ "exif-exposureindex": "نشودیارکن نیردئن",
+ "exif-sensingmethod": "روشت حسگری کردن",
"exif-filesource": "سرچشمه جانیا",
+ "exif-scenetype": "نوع حسگری کردن",
+ "exif-customrendered": "پردازشتکاری جاافتائه عسگ",
+ "exif-exposuremode": "شکل نیر دئن",
+ "exif-whitebalance": "موازنه نیر اسبئ",
+ "exif-digitalzoomratio": "نسوت گپ کردن دیجیتالی",
+ "exif-focallengthin35mmfilm": "انازه کانونی سی فیلم 35 میلیمتری",
+ "exif-scenecapturetype": "نوع ضفط کردن صئنه",
+ "exif-gaincontrol": "کنترل کردن صئنه",
+ "exif-contrast": "کنتراست",
+ "exif-saturation": "سیر بیین رئن",
+ "exif-sharpness": "گرینج برچ زئن",
+ "exif-devicesettingdescription": "شرح میزوکاری اوزار",
+ "exif-subjectdistancerange": "محدوده دیر د دس بیین سوجه",
+ "exif-imageuniqueid": "نوم دیار کن یکونه عسگ",
+ "exif-gpsversionid": "نسقه سردیس جی پی اس",
+ "exif-gpslatituderef": "پئنا ولاتشناسی شمالی و هارگه",
+ "exif-gpslatitude": "پئنا ولاتشناسی",
+ "exif-gpslongituderef": "درازا ولاتشناسی افتوزنون و افتونشین",
+ "exif-gpslongitude": "درازا ولاتشناسی",
+ "exif-gpsaltituderef": "جاگه سرچشمه بلنگی",
+ "exif-gpsaltitude": "جاگه بلنگی",
"exif-gpstimestamp": "وخت جی پی اس (ساعت اتمی)",
+ "exif-gpssatellites": "ماواره یا وه کار گرته بیه سی انازه گری",
+ "exif-gpsstatus": "حال و بال گیرنه",
+ "exif-gpsmeasuremode": "شکل انازه گری",
+ "exif-gpsdop": "دقیق بیین انازه گری",
+ "exif-gpsspeedref": "واحد سرعت",
+ "exif-gpsspeed": "سرعت گیرنه جی پی اس",
+ "exif-gpstrackref": "سرچشمه سی لا جمشت",
+ "exif-gpstrack": "لا جمشت",
+ "exif-gpsimgdirectionref": "سرچشمه سی لا جمشت",
+ "exif-gpsimgdirection": "لا عسگ",
+ "exif-gpsmapdatum": "دونسمنیا وارسگری وه کار گرته بیه سی جئودزیک",
+ "exif-gpsdestlatituderef": "سرچشمه سی پئنا ولاتشناسی مقصد",
+ "exif-gpsdestlatitude": "پئنا ولاتشناسی مقصد",
+ "exif-gpsdestlongituderef": "سرچشمه سی پئنا ولاتشناسی مقصد",
+ "exif-gpsdestlongitude": "پئنا ولاتشناسی مقصد",
+ "exif-gpsdestbearingref": "سرچشمه سی لا مقصد",
+ "exif-gpsdestbearing": "لا مقصد",
+ "exif-gpsdestdistanceref": "سرچشمه سی دیری مقصد",
+ "exif-gpsdestdistance": "دیری د مقصد",
+ "exif-gpsprocessingmethod": "نوم روشت پردازشت جی پی اس",
+ "exif-gpsareainformation": "نوم راساگه جی پی اس",
+ "exif-gpsdatestamp": "گات جی پی اس",
+ "exif-gpsdifferential": "راس کردن کم د جی پی اس",
"exif-coordinate-format": "$1° $2′ $3″ $4",
"exif-jpegfilecomment": "ویر و باور فایل پی ان جی",
"exif-keywords": "کلیمه یا کلیتی",
+ "exif-worldregioncreated": "راساگه ای د دنیا که عسگ د اوچه گرته بیه",
+ "exif-countrycreated": "ولاتی که عسگ دش گرته بیه",
"exif-countrycodecreated": "رازینه سی ولاتی که عسگ د وه گرته بیه",
+ "exif-provinceorstatecreated": "آستونی که عسگ دش گرته بیه",
"exif-citycreated": "شهری که عسگ دش گرته بیه",
+ "exif-sublocationcreated": "جاگه ای د شهر که عسگ د وه گرته بیه",
+ "exif-worldregiondest": "راساگه نشو دئه بیه د دنیا",
+ "exif-countrydest": "ولات نشو دئه بیه",
"exif-countrycodedest": "رازینه سی ولات نمائشت دئه بیه",
+ "exif-provinceorstatedest": "آستون یا ولاتچه نشو دئه",
"exif-citydest": "شهر دیار بیه",
+ "exif-sublocationdest": "جاگه ای د شهر که نشو دئه بیه",
+ "exif-objectname": "نوم کؤچک",
+ "exif-specialinstructions": "انجوم روشتیا ویجه",
+ "exif-headline": "سربلگه",
+ "exif-credit": "صاحاو/اماییه کار",
"exif-source": "سرچشمه",
+ "exif-editstatus": "حال و بار ویرایشتکاری عسگ",
+ "exif-urgency": "فوریت",
"exif-fixtureidentifier": "نوم ثاوت",
+ "exif-locationdest": "جاگه کشیاری بیه",
+ "exif-locationdestcode": "رازینه جاگه کشیاری بیه",
+ "exif-objectcycle": "گات روزی که ای وارسگر سی وه اومائه د ویر",
+ "exif-contact": "دونسمنیا پیوند گرتن",
"exif-writer": "نیسنه",
"exif-languagecode": "زون",
+ "exif-iimversion": "نسقه آی آی ام",
"exif-iimcategory": "دسه",
+ "exif-iimsupplementalcategory": "دسه یا اضافی",
"exif-datetimeexpires": "وا نها دش استفاده نبوئه",
"exif-datetimereleased": "ول بیه د",
+ "exif-originaltransmissionref": "رازینه جاگه جا وه جا بیین اصلی",
+ "exif-identifier": "نوم دیارکن",
+ "exif-lens": "لنز وه کار رتنی",
+ "exif-serialnumber": "نوم شماره دیربین",
+ "exif-cameraownername": "مالک دیربین",
"exif-label": "ری دیار",
+ "exif-datetimemetadata": "گات متا کلون دونسمنیا آخر بار آلشت کاری بیه.",
+ "exif-nickname": "نوم نامرتوط سی عسگ",
+ "exif-rating": "امتیاز(د 5)",
+ "exif-rightscertificate": "تصیق حقوق دیوونداری",
+ "exif-copyrighted": "حال و بال کپی رایت",
+ "exif-copyrightowner": "مالک کپی رایت",
+ "exif-usageterms": "کلیمه یا وه کار گرتن",
+ "exif-webstatement": "گوته یاری ری خط کپی رایت",
+ "exif-originaldocumentid": "نوم دیارکن یکونه سند اصلی",
+ "exif-licenseurl": "یو آر ال سی لیسانس کپی رایت",
+ "exif-morepermissionsurl": "دونسمنیا جانشین لیسانسکاری",
+ "exif-attributionurl": "د گات دواره وه کار گرتن، لطف بکیت د هوم پیوندش بکیت",
+ "exif-preferredattributionname": "د گات دواره وه کار گرتن، لطف بکیت وا اعتوارش بکیت",
"exif-pngfilecomment": "ویر و باور فایل جی پی ان جی",
+ "exif-disclaimer": "کذو نومه",
+ "exif-contentwarning": "هشدار مینونه",
"exif-giffilecomment": "ویر و باور فایل جی آی اف",
+ "exif-intellectualgenre": "نوع مورد",
+ "exif-subjectnewscode": "رازینه داسون",
+ "exif-scenecode": "IPTC رازینه صحنه",
+ "exif-event": "رخ ون کشیاری بیه",
+ "exif-organisationinimage": "سامونجا کشیاری بیه",
+ "exif-personinimage": "آئم کشیاری بیه",
+ "exif-originalimageheight": "بلنگی عسگ دما برشت دئن",
+ "exif-originalimagewidth": "پئنا عسگ دما برشت دئن",
"exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+ "exif-compression-1": "جم نبیه",
+ "exif-compression-2": "رازینه کاری سی‌ سی‌ آی‌ تی‌ تی دسه ۳ تک ورگه جایی روشت هافمن آلشتکاری بیه ری درازا",
+ "exif-compression-3": "رازینه کاری فاکس سی سی آی تی تی گرو3",
+ "exif-compression-4": "رازینه کاری فاکس سی سی آی تی تی گرو ۴",
+ "exif-copyrighted-true": "کپی رایت بیه",
+ "exif-copyrighted-false": "حال و بال کپی رایت میزوکاری نبیه",
+ "exif-unknowndate": "گات نادیار",
"exif-orientation-1": "عادی",
+ "exif-orientation-2": "پشت ری بیه افقی",
+ "exif-orientation-3": "180 گرینج لر دئه",
+ "exif-orientation-4": "پشت ری بیه عمودی",
+ "exif-orientation-5": "۹۰° خلاف گردشت ساعت در حرده و عمودی پشت و ری بیه",
+ "exif-orientation-6": "چرخشت 90 گرینجی",
+ "exif-orientation-7": "۹۰° خلاف گردشت ساعت در حرده و عمودی پشت و ری بیه",
+ "exif-orientation-8": "چرخشت لا ساعتی 90 گرینجی",
+ "exif-planarconfiguration-1": "قالو قووین",
+ "exif-planarconfiguration-2": "قالو دولایی",
+ "exif-colorspace-65535": "میزونکاری نبیه",
"exif-componentsconfiguration-0": "نی یش",
+ "exif-exposureprogram-0": "تعریف نبیه",
"exif-exposureprogram-1": "دسی",
+ "exif-exposureprogram-2": "برنامه عادی",
+ "exif-exposureprogram-3": "زیتری دیافراگم",
+ "exif-exposureprogram-4": "زیتری شاتر",
+ "exif-exposureprogram-5": "برنامه سازدیاری",
+ "exif-exposureprogram-6": "برنامه پر جمشت(وا حاست وه لا سرعت بیشتر شاتر)",
+ "exif-exposureprogram-7": "حال و بار کشیاری(سی عسگیا نزیک که نهازمینه شو ها وه در د فاصله کانونی)",
+ "exif-exposureprogram-8": "حال و بار منظره(سی عسگیا منظره که زل زئن واس ری نهازمینه با)",
+ "exif-subjectdistance-value": "$1 متر",
"exif-meteringmode-0": "نادیار",
"exif-meteringmode-1": "میانگین",
+ "exif-meteringmode-2": "میانگین وا مینجاون سنگین",
+ "exif-meteringmode-3": "نقطه جا",
+ "exif-meteringmode-4": "چن جاگه ای",
+ "exif-meteringmode-5": "الگو",
+ "exif-meteringmode-6": "جزئی",
+ "exif-meteringmode-255": "هنی",
"exif-lightsource-0": "نادیار",
"exif-lightsource-1": "روشنایی روز",
+ "exif-lightsource-2": "فلورسنت",
+ "exif-lightsource-3": "تنگستن",
+ "exif-lightsource-4": "فلش",
+ "exif-lightsource-9": "هوا خو",
+ "exif-lightsource-10": "هوا اوری",
+ "exif-lightsource-11": "سایه",
+ "exif-lightsource-12": "مهتاوی د روز (D 5700 – 7100K)",
+ "exif-lightsource-13": "مهتاوی اسبئ روز (N 4600 – 5400K)",
+ "exif-lightsource-14": "مهتاوی اسبئ حنک (W 3900 – 4500K)",
+ "exif-lightsource-15": "مهتاوی اسبی(WW 3200 – 3700K)",
+ "exif-lightsource-17": "چرا استاندارد آ",
+ "exif-lightsource-18": "چرا استاندارد بی",
+ "exif-lightsource-19": "چرا استاندارد سی",
+ "exif-lightsource-24": "لامپا تنگستن کارخونه ISO",
+ "exif-lightsource-255": "سرچشمه چرا هنی",
+ "exif-flash-fired-0": "فلاش دئه نبی",
+ "exif-flash-fired-1": "فلاش دئه بی",
+ "exif-flash-return-0": "بی کنشت دیاری دیارکاری نور برچسه",
+ "exif-flash-return-2": "نیر وابرچسه دیاجوری نبی",
+ "exif-flash-return-3": "نور وابرچسه دیارجوری بی",
+ "exif-flash-mode-1": "فلاش زئن اژباری",
+ "exif-flash-mode-2": "نهاگری اژباری د فلاش زئن",
+ "exif-flash-mode-3": "مد خودانجوم",
+ "exif-flash-function-1": "بی کنشت دیار فلاش",
+ "exif-flash-redeye-1": "حال و بار راسکاری سوریا تیا",
"exif-focalplaneresolutionunit-2": "ائنج",
+ "exif-sensingmethod-1": "نادیار",
+ "exif-sensingmethod-2": "حس دیار راساگه یی رئنی تک تاشه یی",
+ "exif-sensingmethod-3": "حس دیار راساگه یی رئنی دو تاشه یی",
+ "exif-sensingmethod-4": "حس دیار راساگه یی رئنی سه تاشه یی",
+ "exif-sensingmethod-5": "حس دیار راساگه یی منظم رئنیا",
+ "exif-sensingmethod-7": "حس دیار سه خطی",
+ "exif-sensingmethod-8": "حس دیار خطی منظم رئنیا",
+ "exif-filesource-3": "دیربین دیجیتالی",
+ "exif-scenetype-1": "عسگ مستقیم گرته بیه",
+ "exif-customrendered-0": "پردازشت خو",
+ "exif-customrendered-1": "پردازشت همیشه ای",
+ "exif-exposuremode-0": "نیر دئن خودانجوم",
+ "exif-exposuremode-1": "نیر دئن دسی",
+ "exif-exposuremode-2": "چوئه کاری خودانجوم",
+ "exif-whitebalance-0": "میزونکاری خودانجوم میونه کار رئن اسبئ",
+ "exif-whitebalance-1": "میزونکاری دسی میونه کار رئن اسبئ",
+ "exif-scenecapturetype-0": "استاندارد",
+ "exif-scenecapturetype-1": "ورتیه جا",
+ "exif-scenecapturetype-2": "نیمری کشین",
"exif-scenecapturetype-3": "چی شو",
"exif-gaincontrol-0": "هیش کوم",
+ "exif-gaincontrol-1": "وارو رئتن کمترونه گرتنی",
+ "exif-gaincontrol-2": "وارو رئتن بیشترونه گرتنی",
+ "exif-gaincontrol-3": "کمتر بیین کمترونه گرتنی",
+ "exif-gaincontrol-4": "وارو رئتن کمترونه گرتنی",
"exif-contrast-0": "عادی",
"exif-contrast-1": "نرم",
"exif-contrast-2": "سفت",
"exif-saturation-0": "عادی",
+ "exif-saturation-1": "رئنیا لقن بیه",
+ "exif-saturation-2": "رئنیا سیر بیه",
"exif-sharpness-0": "عادی",
"exif-sharpness-1": "نرم",
"exif-sharpness-2": "سفت",
"exif-subjectdistancerange-0": "نادیار",
"exif-subjectdistancerange-1": "گپ",
+ "exif-subjectdistancerange-2": "نما بسته",
+ "exif-subjectdistancerange-3": "نما د دیر",
+ "exif-gpslatitude-n": "پئنا ولاتشناسی شمالی",
+ "exif-gpslatitude-s": "پئنا ولاتشناسی هارگه",
+ "exif-gpslongitude-e": "پئنا ولاتشناسی افتوزنون",
+ "exif-gpslongitude-w": "پئنا ولاتشناسی افتونشین",
"exif-gpsaltitude-above-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
"exif-gpsaltitude-below-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
+ "exif-gpsstatus-a": "د حال و بار انازه یاری",
+ "exif-gpsstatus-v": "ری وه ری یک کاری انازه یاری",
+ "exif-gpsmeasuremode-2": "انازه یاری دو ورگه جایی",
+ "exif-gpsmeasuremode-3": "انازه یاری سه ورگه جایی",
+ "exif-gpsspeed-k": "کلومتر سی هر ساعت",
+ "exif-gpsspeed-m": "مایل سی هر ساعت",
+ "exif-gpsspeed-n": "گره",
+ "exif-gpsdestdistance-k": "کلومتر",
"exif-gpsdestdistance-m": "مایل",
+ "exif-gpsdestdistance-n": "مایل دریایی",
+ "exif-gpsdop-excellent": "عالیه($1)",
"exif-gpsdop-good": "خو ($1)",
+ "exif-gpsdop-moderate": "متوسط($1)",
+ "exif-gpsdop-fair": "د ری انصاف ($1)",
+ "exif-gpsdop-poor": "گن ($1)",
+ "exif-objectcycle-a": "فقط شو صو",
+ "exif-objectcycle-p": "فقط ایواره",
+ "exif-objectcycle-b": "هم شو صو و هم ایواره",
+ "exif-gpsdirection-t": "لا درست",
+ "exif-gpsdirection-m": "لا مغناطیسی",
+ "exif-ycbcrpositioning-1": "مینجا کاری بیه",
+ "exif-ycbcrpositioning-2": "هوم بهری",
+ "exif-dc-contributor": "هومیارا",
+ "exif-dc-coverage": "محدوده گاتی یا جاگه یی وارسگر",
+ "exif-dc-date": "گاتیا",
+ "exif-dc-publisher": "درتیجن",
+ "exif-dc-relation": "وارسگر مرتوط",
+ "exif-dc-rights": "حقوق",
+ "exif-dc-source": "سرچشمه وارسگر",
+ "exif-dc-type": "نوع وارسگر",
+ "exif-rating-rejected": "رد بیه",
+ "exif-isospeedratings-overflow": "گپتر د 65535",
"exif-iimcategory-ace": "هنریا، رهزیشت و زیستگه",
+ "exif-iimcategory-clj": "جرم و قانون",
+ "exif-iimcategory-dis": "بدبختیا و رخ ونیا",
+ "exif-iimcategory-fin": "اموری و کسم کار",
+ "exif-iimcategory-edu": "آموختاری",
+ "exif-iimcategory-evn": "زئشت گه",
+ "exif-iimcategory-hth": "تن آزایی",
+ "exif-iimcategory-hum": "حاستنی انسانی",
"exif-iimcategory-lab": "کار",
- "watchlistall2": "همه شو",
+ "exif-iimcategory-lif": "گواردن زئشت و شادی کردن",
+ "exif-iimcategory-pol": "سیاستا",
+ "exif-iimcategory-rel": "دین و ائتقات",
+ "exif-iimcategory-sci": "دونسمنی و سازیاری",
+ "exif-iimcategory-soi": "جریانیا اشتمائی",
+ "exif-iimcategory-spo": "ورزشتا",
+ "exif-iimcategory-war": "جئن، تضاد و لیزشیوسن",
+ "exif-iimcategory-wea": "هوا",
+ "exif-urgency-normal": "خو($1)",
+ "exif-urgency-low": "هار ($1)",
+ "exif-urgency-high": "بلنگ ($1)",
+ "exif-urgency-other": "اول کاری تعریف بیه وه دس کاریار($1)",
"namespacesall": "همه شو",
"monthsall": "همه",
+ "confirmemail": "پشت راس کردن تیرنشون انجومانامه",
"confirmemail_send": "کل کردن رازینه پشت راس کاری",
+ "confirmemail_sent": "انجومانامه پشت راس کردن کل بیه.",
+ "confirmemail_needlogin": "لطف بکید $1 نه سی تیرنشون انجومانامه تو پشت راس بکید.",
+ "confirmemail_success": "تیرنشون انجومانامه تو پشت راس بیه.\nشایت شما ایسه بهایت [[Special:چی یه گل کاریار|بیایت وامین]]و د ویکی لذت بوریت",
+ "confirmemail_loggedin": "تیرنشون انجومانامه شما ایسه پشت راس بیه.",
+ "confirmemail_subject": "{{SITENAME}} تیرنشون انجومانامه پشت راست کردن",
+ "confirmemail_invalidated": "پشت راس کنی انجومانامه انجوم شیو بیه",
+ "invalidateemail": "انجومشیو کردن پشت راس کردن انجومانامه",
+ "scarytranscludedisabled": "[پرگنجایشت کاری مینجا ویکی کنشتکار نئ]",
+ "scarytranscludefailed": "[واحونی چوئه سی $1 انجومگر نبی]",
+ "scarytranscludefailed-httpstatus": "[واحونی چوئه سی $1 انجومگر نبی: خطا اچ‌ تی‌ تی‌ پی $2]",
+ "scarytranscludetoolong": "[یو آر ال فره گپه]",
+ "deletedwhileediting": "<strong>زئنار:</strong>ای بلگه د او گاتی که شما شرو د ویرایشت کردیته پاکسا بیه!",
"recreate": "د نو راس کردن",
"confirm_purge_button": "خوئه",
+ "confirm-purge-top": "میهایت کش ای بلگه نا پاک بکیت؟",
"confirm-watch-button": "خوئه",
"confirm-watch-top": "ای بلگه نه د سیل برگتو اضاف می کید؟",
"confirm-unwatch-button": "خوئه",
@@ -2162,17 +2768,41 @@
"imgmultipageprev": "بلگه دمايی",
"imgmultipagenext": "بلگه نهایی",
"imgmultigo": "رؤ!",
+ "imgmultigoto": "رو د بلگه $1",
"img-lang-opt": "$2 ($1)",
"img-lang-default": "(زون پیش زمینه)",
+ "img-lang-info": "اوردن ای عسگ د $1 . $2",
"img-lang-go": "رو",
+ "ascending_abbrev": "ری وه وارو",
+ "descending_abbrev": "ری وه هاری",
"table_pager_next": "بلگه نهایی",
"table_pager_prev": "بلگه دمايی",
"table_pager_first": "سرآسونه",
"table_pager_last": "بلگه آخری",
+ "table_pager_limit": "$1 سی هر بلگه نشو بیه",
+ "table_pager_limit_label": "آیتم سی هر بلگه:",
"table_pager_limit_submit": "رو",
+ "table_pager_empty": "هیچ نتیجه ای نئ",
+ "autosumm-blank": "بلگه حالی",
"autosumm-replace": "مینونه وا \"َ$1\" جاگزین بی",
"autoredircomment": "بلگه واگردونی بیه سی[[$1]]",
+ "autosumm-new": "راست کردن بلگه وه دس \"$1\"",
+ "autosumm-newblank": "بلگه حالی دروس بیه",
"watchlistedit-normal-title": "ویرایشت سیل برگ",
+ "watchlistedit-normal-legend": "ؤرداشتن سرونیا د سیل برگ",
+ "watchlistedit-normal-submit": "ؤرداشتن سرونیا",
+ "watchlistedit-raw-title": "سیل برگ نه ردیفی ویرایشت کو",
+ "watchlistedit-raw-legend": "سیل برگ نه ردیفی ویرایشت کو",
+ "watchlistedit-raw-titles": "داسون:",
+ "watchlistedit-raw-submit": "وه هنگوم سازی سیل برگ",
+ "watchlistedit-raw-done": "سیل برگتون وه هنگوم سازی بیه.",
+ "watchlistedit-raw-added": "$1 داسون وه دماگریا اضافه {{PLURAL:$1|بی|بیین}}:",
+ "watchlistedit-clear-title": "سیل برگ دروس بیه",
+ "watchlistedit-clear-legend": "پاک کردن سیل برگ",
+ "watchlistedit-clear-titles": "داسون:",
+ "watchlistedit-clear-submit": "پاک کردن سیل برگ(وه سی همیشه هئ!)",
+ "watchlistedit-clear-done": "سیل برگتون وه پاک بیه.",
+ "watchlistedit-too-many": "ایچه بلگه یا فره ای سی نشو دئن هئ.",
"watchlisttools-clear": "پاک کردن سیل برگ",
"watchlisttools-view": "آلشتیا مرتوط نه بوینیت",
"watchlisttools-edit": "سیل برگ بوینیتو و ویرایشت بکید",
@@ -2193,86 +2823,242 @@
"hijri-calendar-m2": "صفر",
"hijri-calendar-m3": "ربیع الاول",
"hijri-calendar-m4": "رجو",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|چک چنه]])",
"timezone-utc": "UTC",
"duplicate-defaultsort": "زنهار کلیت پیش فرض جور بیه $2 تازه ای یا کلید پیش فرض جوربیه $1 رد بیه.",
"version": "نسقه",
+ "version-extensions": "دمادیسیا پورسه",
+ "version-skins": "پوسه یا پورسه بیه",
+ "version-specialpages": "بلگيا ويجه",
+ "version-parserhooks": "قلاویا کته کته یار",
"version-variables": "آلشت ونا",
"version-antispam": "نهاگرتن هرزنومه",
"version-other": "هنی",
+ "version-mediahandlers": "دس دیاریا وارسگر",
+ "version-hooks": "قلاویا",
+ "version-parser-extensiontags": "سردیسیا دمادیس کوته کوته کار",
+ "version-parser-function-hooks": "قلاویا انجومکار کوته کوته کار",
+ "version-hook-name": "نوم قلاو",
+ "version-hook-subscribedby": "اندوم بیه وه دس",
+ "version-no-ext-name": "[بی نوم]",
+ "version-license": "لیسانس ویکی وارسگر",
"version-ext-license": "ليسانس",
+ "version-ext-colheader-name": "دمادیس",
"version-skin-colheader-name": "پوسه",
"version-ext-colheader-version": "نسقه",
"version-ext-colheader-license": "ليسانس",
"version-ext-colheader-description": "شرح",
"version-ext-colheader-credits": "نیسنه یا",
+ "version-license-title": "لیسانس سی $1",
+ "version-license-not-found": "هیچ دونسمنی خو و لیسانسداری د ای دمادیس دیاری نکرده.",
+ "version-credits-title": "اعتوار سی $1",
+ "version-credits-not-found": "هیچ دونسمنی خو و معتوری د ای دمادیس دیاری نکرده.",
+ "version-poweredby-credits": "ای ویکی د لا '''[https://www.mediawiki.org/ ویکی وارسگر]''' حامینداری بوئه، همه حقوق پر و پیم کاری بیه© 2001-$1 $2.",
"version-poweredby-others": "دیه رون",
+ "version-poweredby-translators": "والریاریاtranslatewiki.net",
+ "version-software": "نرم افزار پورسه بیه",
+ "version-software-product": "نتجه",
"version-software-version": "نسقه",
+ "version-entrypoints": "تیرنشون اینترنتی جاگه وامین اومائن",
+ "version-entrypoints-header-entrypoint": "جاگه وامین اومائن",
"version-entrypoints-header-url": "يو آر ال",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Article path]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script path]",
+ "version-libraries": "کتاو حونه یا پورسه بیه",
+ "version-libraries-library": "کتاوگه",
+ "version-libraries-version": "نسقه",
"redirect": "واگردونی وا جانیا،بلگه یا وانیئری نوم دیارکو",
+ "redirect-legend": "واگردونی د جانیا یا بلگه",
"redirect-submit": "رو",
+ "redirect-lookup": "پی جوری:",
"redirect-value": "ارزایشت:",
"redirect-user": "نوم دياركن کاریار:",
"redirect-page": "نوم دیار کن بلگه",
+ "redirect-revision": "وانئری بلگه",
"redirect-file": "نوم جانیا",
+ "redirect-not-exists": "انازه که پیدا نبی",
+ "fileduplicatesearch": "پی جوری سی جانیایا دوکونه",
+ "fileduplicatesearch-legend": "پی جوری سی دوکونه",
"fileduplicatesearch-filename": "نوم جانیا:",
"fileduplicatesearch-submit": "پی جوری",
"fileduplicatesearch-info": "$1 × $2 pixel<br />انازه جانیا: $3<br />MIME type: $4",
+ "fileduplicatesearch-noresults": "جانیایی وا نوم «$1» یافت نبی.",
"specialpages": "بلگيا ويجه",
+ "specialpages-note-top": "میراث",
+ "specialpages-group-maintenance": "گزارشتیا واداشتن",
+ "specialpages-group-other": "بلگه یا ویجه هنی",
+ "specialpages-group-login": " اومائن د سيستم/راس كردن حساو",
"specialpages-group-changes": "آلشتیا تازه و پهرستنومه یا",
"specialpages-group-media": "گزارشتیا رسانه و سوارکردیا",
"specialpages-group-users": "کاروریا و حقوق",
+ "specialpages-group-highuse": "بلگه یا فره وه کار گرته بیه",
"specialpages-group-pages": "نوم گه بلگه یا",
+ "specialpages-group-pagetools": "اوزاریا بلگه",
"specialpages-group-wiki": "رسینه و اوزاریا",
"specialpages-group-redirects": "بلگه ویجه واگردونی بیه",
+ "specialpages-group-spam": "اوزاریا اسپم",
+ "specialpages-group-developer": "اوزاریا گپ کلون یار",
+ "blankpage": "بلگه حالی",
+ "intentionallyblankpage": "ای بلگه عمدن حالی هشته بیه",
"external_image_whitelist": "یه خط نه ول بکید چی وه<pre>",
- "tag-filter": "فيلتر [[Special:Tags|Tag]]:",
+ "tags": "سردیسیا آلشت دئن خو",
+ "tag-filter": "فيلتر [[Special:سردیسیا|سردیس]]:",
+ "tag-filter-submit": "فيلتر",
+ "tag-list-wrapper": "([[Special:سردیسیا|{{PLURAL:$1|سردیس|سردیسیا}}]]: $2)",
+ "tags-title": "سردیسیا",
+ "tags-tag": "نوم سردیس",
"tags-display-header": "دیاری کردن د نوم گه آلشتیا",
+ "tags-source-header": "سرچشمه",
"tags-active-header": "کنشتگره؟",
+ "tags-hitcount-header": "آلشتیا سردیس دار",
+ "tags-actions-header": "کنشتکاریا",
"tags-active-yes": "هری",
"tags-active-no": "نه",
+ "tags-source-extension": "تعریف بیه د اساس دمادیس",
+ "tags-source-manual": "وه کار گرته بیه وه شکل دسی وا کاریاریا یا بوتیا",
+ "tags-source-none": "تر وه کار گرته نموئه",
"tags-edit": "ویرایشت",
+ "tags-delete": "پاکسا کردن",
+ "tags-activate": "کنشتیاری کردن",
+ "tags-deactivate": "ناکنشتیاری کردن",
"tags-hitcount": "$1 {{جمی:$1|آلشت|آلشتیا}}",
+ "tags-manage-no-permission": "شما صلا یه نه که آلشت دئن سردیسیا نه دیوونداری بکیت ناریت.",
+ "tags-create-heading": "راس کردن یه گل سردیس تازه",
+ "tags-create-tag-name": "نوم سردیس",
+ "tags-create-reason": "دلیل",
+ "tags-create-submit": "راس کردن",
+ "tags-create-no-name": "شما واس سی هر سردیسی یه گل نوم راس بکیت.",
+ "tags-create-already-exists": "سردیس\"$1\" ایسه هیئش.",
+ "tags-create-warnings-below": "شما واقعن میهایت راس کردن ای سردیس نه دماداری بکیت؟",
+ "tags-delete-title": "پاکسا کردن سردیس",
+ "tags-delete-reason": "دليل:",
+ "tags-delete-not-found": "سردیس \"$1\" نیئش.",
+ "tags-activate-title": "کنشتیاری کردن سردیس",
+ "tags-activate-reason": "دليل:",
+ "tags-activate-not-found": "سردیس \"$1\" نیئش.",
+ "tags-activate-submit": "کنشتیاری کردن",
+ "tags-deactivate-title": "ناکشتیاری کردن سردیس",
+ "tags-deactivate-reason": "دليل:",
+ "tags-deactivate-submit": "ناکنشتیاری کردن",
"comparepages": "کنار یک نیاین بلگه یا",
"compare-page1": "بلگه 1",
"compare-page2": "بلگه 2",
"compare-rev1": "دوواره ديئن1",
+ "compare-rev2": "وانئری 2",
"compare-submit": "کنار یک نیاین",
+ "compare-invalid-title": "داسونی که شما تیار کردیته خو نئ.",
"compare-title-not-exists": "سرون مشقص بیه وجود ناره.",
"compare-revision-not-exists": "وانئری که شما تی دیار کردیته وجود ناره.",
+ "dberr-info": "(نبوئه وه رسینه جا:$1 دسرسی داشتوئیت)",
+ "dberr-info-hidden": "(نبوئه د رسینه گا دسرسی داشت)",
+ "htmlform-invalid-input": "یه قری مشگل ها د پاره یی د درینده یا شما.",
+ "htmlform-int-toolow": "انازه یی که شما دئیته د کمترونه $1 فره کمتره.",
+ "htmlform-int-toohigh": "انازه یی که شما دئیته د بشترونه $1 فره بیشتره.",
+ "htmlform-required": "یه دئه واس بوئه.",
"htmlform-submit": "دئن",
+ "htmlform-reset": "انجومشیو کردن آلشتیا",
"htmlform-selectorother-other": "هنی",
"htmlform-no": "نه",
"htmlform-yes": "هری",
+ "htmlform-chosen-placeholder": "یه گل گزینه انتخاو بکیت",
+ "htmlform-cloner-create": "هنی اضاف بکیت",
"htmlform-cloner-delete": "ؤرداشتن",
+ "htmlform-cloner-required": "سی کمترونه یه گل ارزایشت لازمه",
+ "sqlite-has-fts": "$1 وا حامینداری پی جوری تمام نیسسه یی",
+ "sqlite-no-fts": "$1 وا بی حامینداری پی جوری تمام نیسسه یی",
+ "logentry-delete-delete": "$1 بلگه {{GENDER:$2|پاکسا بیه}} $3",
+ "logentry-delete-restore": "$1 {{GENDER:$2|}} بلگه $3 د نو زنه کرده",
"revdelete-content-hid": "مینونه قام بیه",
+ "revdelete-summary-hid": "چکسته ویرایشت قام بیه",
"revdelete-uname-hid": "نوم کاروری قام بیه",
"revdelete-content-unhid": "مینونه قام نبیه",
+ "revdelete-summary-unhid": "چکسته ویرایشت قام نبیه",
"revdelete-uname-unhid": "نوم کاروری قام نبیه",
+ "logentry-move-move": "$1 {{GENDER:$2|جا وه جا کرده}} بلگه $3 نه سی $4",
+ "logentry-newusers-create": "حساو کاریاری $1 {{GENDER:$2|راس بی}}",
+ "logentry-upload-upload": "$1 {{GENDER:$2|سوار کرده}} $3",
+ "logentry-upload-revert": "$1 $3 نه {{GENDER:$2|سوارکرد}}",
+ "log-name-managetags": "سردیس دیوونداری کردن پهرستنومه",
+ "logentry-managetags-create": "$1 {{GENDER:$2|سردیس \"$4\"}} نه راس کرده",
"rightsnone": "(هيش كوم)",
- "feedback-subject": "سرون:",
- "feedback-message": "پيغوم:",
+ "revdelete-summary": "چکسه ویرایشت",
+ "feedback-adding": "اضاف کردن هوال حون یار د بلگه....",
+ "feedback-back": "دما",
+ "feedback-bugnew": "مه وارسیش کردمه. یه گل سیسرک تازه گزارشت بی",
"feedback-cancel": "انجوم شیوسن",
- "feedback-submit": "کل کردن نهاهوال حون",
"feedback-close": "انجوم بی",
+ "feedback-external-bug-report-button": "جانیا سازی یه گل کنشتیاری کسمدار",
+ "feedback-dialog-title": "دیار بیین نهاحردیاری",
+ "feedback-error-title": "خطا",
+ "feedback-error2": "خطا:ویرایشت خو نبی",
+ "feedback-error3": "خطا: جواو ندئن د پیوندکار برنامه نیسی نرم افزار",
+ "feedback-message": "پيغوم:",
+ "feedback-subject": "سرون:",
+ "feedback-submit": "كل كردن",
+ "feedback-thanks-title": "دتو منمونیم!",
+ "feedback-useragent": "راوط کاریا:",
"searchsuggest-search": "پی جوری",
+ "searchsuggest-containing": "د حال و بار مینونه دار...",
"api-error-badaccess-groups": "شما سی سوار کرد جانیایا د ای ویکی اجازه ناریت.",
+ "api-error-badtoken": "خطا مینجا:رازینه امنیتی اشتوا",
"api-error-copyuploaddisabled": "سوار کردن وا یو آر ال دی ای سرور غیرفعال بیه.",
+ "api-error-duplicate-archive-popup-title": "{{PLURAL:$1|جانیا|جانیایا}} تکراری یی که ایسه پاکسا بیینه",
+ "api-error-duplicate-popup-title": "{{PLURAL:$1|جانیا|جانیایا}} تکراری",
+ "api-error-empty-file": "جانیایی که دئی ته حالی بی.",
+ "api-error-emptypage": "یه گل بلگه تازه راس بکیت،بلگه یا حالی صلادار کاری نیئن.",
+ "api-error-file-too-large": "جانیایی که دئیته فره گپه.",
"api-error-filename-tooshort": "نوم جانیا فره کؤچکه.",
+ "api-error-filetype-banned": "چنی جانیا قدقه بیه.",
+ "api-error-filetype-missing": "نوم جانیا یه گل دمادیس گم بیه ئه.",
+ "api-error-hookaborted": "آلشکاری که شما میهاستیت ره وندیاریش بکیت وا یه گل دما دیس انجوم شیو بیه.",
+ "api-error-http": "خطا مینجایی:نبوئه د رسینه جا وصل بوئیت.",
"api-error-illegal-filename": "نوم جانیا اجازه دئه نئ.",
"api-error-mustbeloggedin": "شما سی سوارکردن فایلیا با بیایت وامین",
+ "api-error-unclassified": "یه گل خطا نادیار ری ون کرده.",
+ "api-error-unknown-code": "خطا نادیار:\"$1\".",
+ "api-error-unknown-warning": "هشدار نادیار:\"$1\".",
+ "api-error-unknownerror": "خطا نادیار:\"$1\".",
+ "api-error-uploaddisabled": "سوار کردن د ای ویکی ناکشتگر بیه.",
+ "duration-seconds": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
+ "duration-minutes": "$1 {{PLURAL:$1|دیقه|دیقه یا}}",
+ "duration-hours": "$1 {{PLURAL:$1|ساعت |ساعتیا}}",
"duration-days": "$1{{جمی:$1|روز|روزیا}}",
"duration-weeks": "$1 {{جمی:$1|هفته|هفته یا}}",
"duration-years": "$1{{جمی:$1| سال|سالیا}}",
+ "duration-decades": "$1 {{PLURAL:$1|دهه|دهه یا}}",
+ "duration-centuries": "$1 {{PLURAL:$1|سده|سده یا}}",
+ "duration-millennia": "$1 {{PLURAL:$1|میلینیوم|ملینا}}",
+ "limitreport-cputime": "گات وه کار گرتن سی پی یو",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
+ "limitreport-walltime": "زمون راستکی وه کار گرتن",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه یا}}",
+ "limitreport-ppvisitednodes": "شمارش یار گره دیئه بیه دما پردازشتکار",
"limitreport-ppvisitednodes-value": "$1/$2",
+ "limitreport-ppgeneratednodes": "شمارش یار گره تولیدی دما پردازشتکار",
"limitreport-ppgeneratednodes-value": "$1/$2",
+ "limitreport-postexpandincludesize": "انازه د ور گرته نها گپ کلونکاری",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بایت|بایتیا}}",
+ "limitreport-templateargumentsize": "انازه چوئه آرگومان",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بایت|بایتیا}}",
+ "limitreport-expansiondepth": "بیشتری پی یا گپ کلونکاری",
"limitreport-expansiondepth-value": "$1/$2",
+ "limitreport-expensivefunctioncount": "انازه انجومگریا وااشکافتکار پر مصرف",
"limitreport-expensivefunctioncount-value": "$1/$2",
+ "expandtemplates": "گپ کلون کردن چوئه یا",
+ "expand_templates_intro": "ای بلگه ویجه یه گل نیسسه نه گرته و همه چوئه یایی که هان د وه ونونه و حال و بار ؤرئشتن گپ کلونکاری می که همچنی. آلشیاریا وااشکافت کاری چی <code><nowiki>{{</nowiki>#language:…}}</code> و آلشتکنیا چی <code><nowiki>{{</nowiki>CURRENTDAY}}</code> نه ئم گپ کلونکاری می که— د راستکی تقریون هر چی نه که ها د میلات دو گل آکولات. ای کار وا واحونی کاری ریترازجا وااشکافت مربوط د خود ویکی وارسگر انجوم دیار موئه.",
+ "expand_templates_title": "داسون، سی {{FULLPAGENAME}} و چیا هنی:",
+ "expand_templates_input": "نیسسه درینده:",
"expand_templates_output": "نتیجه",
+ "expand_templates_xml_output": "درده ایکس ام ال",
+ "expand_templates_html_output": "وه در ده اچ تی ام ال خام",
"expand_templates_ok": "خوئه",
"expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا",
+ "expand_templates_remove_nowiki": "خومثی کردن سردیسیا <nowiki> د کارگرایی",
+ "expand_templates_generate_xml": "نشو دئن دار وااشکافتکاری XML",
+ "expand_templates_generate_rawhtml": "نشو دئن اچ‌ تی‌ ام‌ ال خام",
"expand_templates_preview": "پيش سيل",
+ "expand_templates_preview_fail_html": "<em>سی یه که{{SITENAME}} تا یه گل HTML خام کنشتیار و یه گل د دس رئتن دونسمنیا نشسجا هئ، پیش سیل وا داسون یه انجومکاری احتیاطی ری وه ری چل کاریا جاوا نیسسه نهو بیه.</em>\n\n<strong>ار ای تلاش پیش سیل مشروعه، لطف بکیت د نو تلاش بکیت. ار هنی ئم کار نمی که، تلاش بکیت ری [[Special:UserLogout|اومائن وه در د سامونه]] بپورنیت و د نو روئیت وامین سامونه.",
+ "expand_templates_preview_fail_html_anon": "<em>سی یه که{{SITENAME}} تا یه گل HTML خام کنشتیار و یه گل د دس رئتن دونسمنیا نشسجا هئ، پیش سیل وا داسون یه انجومکاری احتیاطی ری وه ری چل کاریا جاوا نیسسه نهو بیه.</em>\n\n<strong>ار ای تلاش پیش سیل مشروعه، لطف بکیت د نو تلاش بکیت. ار هنی ئم کار نمی که، تلاش بکیت ری [[Special:UserLogout|اومائن وه در د سامونه]] بپورنیت و د نو روئیت وامین سامونه.",
"pagelanguage": "بلگه انتخاو زون",
"pagelang-name": "بلگه",
"pagelang-language": "زون",
@@ -2282,6 +3068,58 @@
"action-pagelang": "آلشت دئن زون بلگه",
"log-name-pagelang": "آلشت دئن زون پهرستنومه",
"log-description-pagelang": "ای پهرستنومه در بلگه زونا آلشت گرته.",
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2| آلشتکاری بی}} زون بلگه سی $3 د $4 وه $5 .",
+ "default-skin-not-found-no-skins": "پویه پیش فرض سی ویکی شما د <code>$wgDefaultSkin</code> جاگر نبیه و د اوچه وا داسون <code>$1</code>، هئیش دیاری نمی که.\n\nشما پوسه یا نپورسیته.\n\n:ار ویکی وارسگر نه د نو وه هنگوم سازی کردیته یا ونه د نو بپورسیته:\n:شایت د گیتیا یا کند بیین سرچشمه واگرد روشتیا هنی پورسن نه وه کار گرتیته. تیه داشتوئیت کهMediaWiki 1.24 یا تازه تر د جانیا اصلی هیچ پوسه یی ناشتوئن.\nتلاش بکیت چن گل پوسه د [https://www.mediawiki.org/wiki/Category:All_skins جانیا پوسه یا ویکی وارسگر]، نه واگرد:\n:*گرتن [https://www.mediawiki.org/wiki/Download پورسیا تاربال]، که وا چن گل پوسه و دما دیسه ای کار بکیت. شما می می تونیت پوسه <code>skins/</code> نه د وه وردار بدیس بکیت.\n:*کلون کردن یه گل د <code dir=\"ltr\">mediawiki/skins/*</code> د ریپوزیتوری د جانیا <code>skins/</code> ویکی وارسگرتو.\n:ار یه گل گپ کلونکاریا ویکی وارسگر هئیت، انجوم دئن ای کار نواس ضدیتی وا ریپوزیتوری گیت شما داشتوئه. سی دونسمنیا هنی و کنشتیار کردن پوسه یاو انتخاو ونو سی پیش فرض بیین [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: میزونکاری پوسه] نه سیل بکیت.",
"default-skin-not-found-row-enabled": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')",
- "default-skin-not-found-row-disabled": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')"
+ "default-skin-not-found-row-disabled": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')",
+ "mediastatistics": "آماریا وارسگر",
+ "mediastatistics-summary": "آماریایی که دباره جوریا یه گل جانیا وه هنگوم بیه . ای چی فقط د ور گرته آخری نسقه جانیائه. نسقه یا دمایی یا پاکسا بینه یا جیاوازی دارن.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایت|$1 بایتیا}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "جورMIME:",
+ "mediastatistics-table-extensions": "دمادیسیا ممکن",
+ "mediastatistics-table-count": "شماره جانیایا",
+ "mediastatistics-table-totalbytes": "انازه وه یک شیوسه",
+ "mediastatistics-header-unknown": "نادیار",
+ "mediastatistics-header-bitmap": "عسگیا بیت مپ",
+ "mediastatistics-header-drawing": "کشیاریا(عسگیا وکتور)",
+ "mediastatistics-header-audio": "دنگ",
+ "mediastatistics-header-video": "عسگ و فیلم",
+ "mediastatistics-header-multimedia": "وارسگر خو",
+ "mediastatistics-header-office": "نوشتگه",
+ "mediastatistics-header-text": "نیسسه دار",
+ "mediastatistics-header-executable": "اجرا کردنیا",
+ "mediastatistics-header-archive": "قالویا جم بیه",
+ "json-warn-trailing-comma": "$1 ویرگار که ها د نها جی سون {{PLURAL:$1|پاکسا بی}}.",
+ "json-error-unknown": "مشگل د جی سون بی. خطا: $1",
+ "json-error-depth": "بیشترونه پی یا دماداری رد بیه",
+ "json-error-state-mismatch": "جی‌ سن نادرست یا ناقص",
+ "json-error-ctrl-char": "خطا نیسه یار کنترلی، شایت غلط رازینه کاری بیه",
+ "json-error-syntax": "خطا دستوری",
+ "json-error-utf8": "نیسه یاریا غلط یو تی‌ اف-۸، شایت غلط رازینه کاری بیه",
+ "json-error-recursion": "ری کردن یه گلی یا بیشتر د انازه یی که رازینه کاری بوئه",
+ "json-error-inf-or-nan": "ارزایشتیا INF یا NAN یه گل یا بیشتر د وه د انازه یی که رازینه کاری بیه",
+ "json-error-unsupported-type": "یه گل ارزایشت د جوری که نبوئه رازینه کاری با وتو دئه بیه",
+ "headline-anchor-title": "هوم پیوند کردن د ای بهرجا",
+ "special-characters-group-latin": "لاتين",
+ "special-characters-group-latinextended": "لاتین گپ کلون کاری بیه",
+ "special-characters-group-ipa": "آی پی آ",
+ "special-characters-group-symbols": "نماديا",
+ "special-characters-group-greek": "هلنی",
+ "special-characters-group-cyrillic": "سريليك",
+ "special-characters-group-arabic": "عروی",
+ "special-characters-group-arabicextended": "عروی گپ کلون کاری بیه",
+ "special-characters-group-persian": "فارسی",
+ "special-characters-group-hebrew": "عبری",
+ "special-characters-group-bangla": "بانگلا",
+ "special-characters-group-tamil": "تاميل",
+ "special-characters-group-telugu": "تلوگو",
+ "special-characters-group-sinhala": "سين هالا",
+ "special-characters-group-gujarati": "گجرات",
+ "special-characters-group-devanagari": "دوانگاری",
+ "special-characters-group-thai": "تايی",
+ "special-characters-group-lao": "لائو",
+ "special-characters-group-khmer": "خمر",
+ "special-characters-title-endash": "خط فاصله",
+ "special-characters-title-emdash": "خط فاصله",
+ "special-characters-title-minus": "نشون کم کردن"
}
diff --git a/languages/i18n/lt.json b/languages/i18n/lt.json
index d883947b..a392ca13 100644
--- a/languages/i18n/lt.json
+++ b/languages/i18n/lt.json
@@ -28,7 +28,9 @@
"Xabier Armendaritz",
"לערי ריינהארט",
"Vogone",
- "아라"
+ "아라",
+ "Aswanas",
+ "Pofka"
]
},
"tog-underline": "Pabraukti nuorodas:",
@@ -93,18 +95,18 @@
"sat": "Šeš",
"january": "sausio",
"february": "vasario",
- "march": "kovo",
+ "march": "Kovo",
"april": "balandžio",
"may_long": "gegužės",
"june": "birželio",
"july": "liepos",
"august": "rugpjūčio",
- "september": "rugsėjo",
- "october": "spalio",
+ "september": "Rugsėjo",
+ "october": "Spalio",
"november": "lapkričio",
"december": "gruodžio",
- "january-gen": "Sausis",
- "february-gen": "Vasaris",
+ "january-gen": "Sausio",
+ "february-gen": "Vasario",
"march-gen": "Kovas",
"april-gen": "Balandis",
"may-gen": "Gegužė",
@@ -115,18 +117,18 @@
"october-gen": "Spalis",
"november-gen": "Lapkritis",
"december-gen": "Gruodis",
- "jan": "sau",
- "feb": "vas",
- "mar": "kov",
- "apr": "bal",
- "may": "geg",
- "jun": "Eka",
- "jul": "lie",
- "aug": "rgp",
- "sep": "rgs",
- "oct": "spa",
- "nov": "lap",
- "dec": "grd",
+ "jan": "Sau",
+ "feb": "Vas",
+ "mar": "Kov",
+ "apr": "Bal",
+ "may": "gegužės",
+ "jun": "Birželis",
+ "jul": "Lie",
+ "aug": "Rgp",
+ "sep": "Rgs",
+ "oct": "Spa",
+ "nov": "Lap",
+ "dec": "Grd",
"january-date": "Sausio $1",
"february-date": "Vasario $1",
"march-date": "Kovo $1",
@@ -142,7 +144,7 @@
"pagecategories": "{{PLURAL:$1|Kategorija|Kategorijos}}",
"category_header": "Puslapiai kategorijoje „$1“",
"subcategories": "Subkategorijos",
- "category-media-header": "Daugialypės terpės failai kategorijoje „$1“",
+ "category-media-header": "Daugialypės terpės rinkmenos kategorijoje „$1“",
"category-empty": "''Šiuo metu ši kategorija neturi jokių puslapių ar failų.''",
"hidden-categories": "{{PLURAL:$1|Paslėpta kategorija|Paslėptos kategorijos}}",
"hidden-category-category": "Paslėptos kategorijos",
@@ -150,7 +152,7 @@
"category-subcat-count-limited": "Šioje kategorijoje yra $1 {{PLURAL:$1|subkategorija|subkategorijos|subkategorijų}}.",
"category-article-count": "{{PLURAL:$2|Šioje kategorijoje yra vienas puslapis.|{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|puslapis|puslapiai|puslapių}} (iš viso kategorijoje yra $2 {{PLURAL:$2|puslapis|puslapiai|puslapių}}).}}",
"category-article-count-limited": "{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|puslapis|puslapiai|puslapių}}.",
- "category-file-count": "{{PLURAL:$2|Šioje kategorijoje yra vienas failas.|{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|failas|failai|failų}} (iš viso kategorijoje yra $2 {{PLURAL:$2|failas|failai|failų}}).}}",
+ "category-file-count": "{{PLURAL:$2|Šioje kategorijoje yra viena rinkmena.|{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|rinkmena|rinkmenos|rinkmenų}} (iš viso kategorijoje yra $2 {{PLURAL:$2|rinkmena|rinkmenos|rinkmenų}}).}}",
"category-file-count-limited": "{{PLURAL:$1|Rodomas|Rodomi|Rodoma}} $1 šios kategorijos {{PLURAL:$1|failas|failai|failų}}.",
"listingcontinuesabbrev": "tęs.",
"index-category": "Indeksuoti puslapiai",
@@ -194,7 +196,7 @@
"print": "Spausdinti",
"view": "Žiūrėti",
"view-foreign": "Rodyti $1",
- "edit": "Redaguoti",
+ "edit": "Keisti",
"edit-local": "Redaguoti vietos aprašymą",
"create": "Sukurti",
"create-local": "Pridėti vietos aprašymą",
@@ -217,7 +219,7 @@
"personaltools": "Asmeniniai įrankiai",
"articlepage": "Rodyti turinio puslapį",
"talk": "Aptarimas",
- "views": "Žiūrėti",
+ "views": "Peržiūros",
"toolbox": "Įrankiai",
"userpage": "Rodyti naudotojo puslapį",
"projectpage": "Rodyti projekto puslapį",
@@ -230,6 +232,7 @@
"otherlanguages": "Kitomis kalbomis",
"redirectedfrom": "(Nukreipta iš $1)",
"redirectpagesub": "Nukreipimo puslapis",
+ "redirectto": "Nukreipti į:",
"lastmodifiedat": "Šis puslapis paskutinį kartą keistas $1 $2.",
"viewcount": "Šis puslapis buvo atvertas $1 {{PLURAL:$1|kartą|kartus|kartų}}.",
"protectedpage": "Užrakintas puslapis",
@@ -240,20 +243,22 @@
"pool-timeout": "Baigėsi laikas laukiant užrakto",
"pool-queuefull": "Telkinio eilė pilna",
"pool-errorunknown": "Nežinoma klaida",
+ "poolcounter-usage-error": "Naudojimo klaida: $1",
"aboutsite": "Apie {{SITENAME}}",
- "aboutpage": "Project:Apie",
+ "aboutpage": "Project:About",
"copyright": "Turinys pateikiamas pagal $1 jei nenurodyta kitaip.",
- "copyrightpage": "{{ns:project}}:Autorystės teisės",
+ "copyrightpage": "{{ns:project}}:Autorinės teisės",
"currentevents": "Naujienos",
- "currentevents-url": "Project:Naujienos",
+ "currentevents-url": "Project:Current events",
"disclaimers": "Atsakomybės apribojimas",
- "disclaimerpage": "Project:Atsakomybės apribojimas",
+ "disclaimerpage": "Project:General disclaimer",
"edithelp": "Kaip redaguoti",
+ "helppage-top-gethelp": "Pagalba",
"mainpage": "Pagrindinis puslapis",
"mainpage-description": "Pagrindinis puslapis",
"policy-url": "Project:Politika",
"portal": "Bendruomenė",
- "portal-url": "Project:Bendruomenė",
+ "portal-url": "Project:Community portal",
"privacy": "Privatumo politika",
"privacypage": "Project:Privatumo politika",
"badaccess": "Teisių klaida",
@@ -262,14 +267,14 @@
"versionrequired": "Reikalinga $1 MediaWiki versija",
"versionrequiredtext": "Reikalinga $1 MediaWiki versija, kad pamatytumėte šį puslapį. Žiūrėkite [[Special:Version|versijos puslapį]].",
"ok": "Gerai",
- "retrievedfrom": "Gauta iš „$1“",
+ "retrievedfrom": "Gauta iš \"$1\"",
"youhavenewmessages": "Jūs turite $1 ($2).",
"youhavenewmessagesfromusers": "Jūs gavote $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).",
"youhavenewmessagesmanyusers": "Jūs turite $1 iš daugelio vartotojų ( $2 ) .",
"newmessageslinkplural": "{{PLURAL:$1|nauja žinutė|999=naujos žinutės}}",
"newmessagesdifflinkplural": "paskutinis {{PLURAL:$1|pakeitimas|999=pakeitimai}}",
"youhavenewmessagesmulti": "Turite naujų žinučių $1",
- "editsection": "redaguoti",
+ "editsection": "keisti",
"editold": "taisyti",
"viewsourceold": "žiūrėti šaltinį",
"editlink": "keisti",
@@ -280,6 +285,7 @@
"hidetoc": "slėpti",
"collapsible-collapse": "Sutraukti",
"collapsible-expand": "Išplėsti",
+ "confirmable-confirm": "Ar esate {{GENDER:$1|tikras|tikra}}?",
"confirmable-yes": "Taip",
"confirmable-no": "Ne",
"thisisdeleted": "Žiūrėti ar atkurti $1?",
@@ -300,7 +306,7 @@
"nstab-media": "Media puslapis",
"nstab-special": "Specialusis puslapis",
"nstab-project": "Projekto puslapis",
- "nstab-image": "Failas",
+ "nstab-image": "Rinkmena",
"nstab-mediawiki": "Pranešimas",
"nstab-template": "Šablonas",
"nstab-help": "Pagalbos puslapis",
@@ -311,7 +317,10 @@
"nospecialpagetext": "<strong>Toks specialusis puslapis neegzistuoja</strong>\n\nEgzistuojančių specialiųjų puslapių sąrašą galite rasti [[Special:SpecialPages|specialiųjų puslapių sąraše]].",
"error": "Klaida",
"databaseerror": "Duomenų bazės klaida",
+ "databaseerror-text": "Įvyko duomenų bazės klaida.\nTai gali rodyti programinės įrangos sutrikimą.",
+ "databaseerror-textcl": "Įvyko duomenų bazės klaida.",
"databaseerror-query": "Užklausa:$1",
+ "databaseerror-function": "Paskirtis: $1",
"databaseerror-error": "Klaida: $1",
"laggedslavemode": "Dėmesio: Puslapyje gali nesimatyti naujausių pakeitimų.",
"readonly": "Duomenų bazė užrakinta",
@@ -327,6 +336,8 @@
"filerenameerror": "Nepavyksta pervardinti failo iš „$1“ į „$2“.",
"filedeleteerror": "Nepavyksta ištrinti failo „$1“.",
"directorycreateerror": "Nepavyko sukurti aplanko „$1“.",
+ "directoryreadonlyerror": "Nukreiptis \"$1\" yra skirta tik skaitymui.",
+ "directorynotreadableerror": "Nukreiptis \"$1\" neskaitoma.",
"filenotfound": "Nepavyksta rasti failo „$1“.",
"unexpected": "Netikėta reikšmė: „$1“=„$2“.",
"formerror": "Klaida: nepavyko apdoroti formos duomenų",
@@ -335,7 +346,7 @@
"cannotdelete-title": "Negalite ištrinti puslapio \"$1\"",
"delete-hook-aborted": "Trynimą atšaukė kabliukas.\nNebuvo duotas joks paaiškinimas.",
"badtitle": "Blogas pavadinimas",
- "badtitletext": "Nurodytas puslapio pavadinimas buvo neleistinas, tuščias arba neteisingai sujungtas tarpkalbinis arba tarpprojektinis pavadinimas. Jame gali būti vienas ar daugiau simbolių, neleistinų pavadinimuose",
+ "badtitletext": "Nurodytas puslapio pavadinimas buvo neleistinas, tuščias arba neteisingai sujungtas tarpkalbinis arba tarpprojektinis pavadinimas. Jame gali būti vienas ar daugiau simbolių, neleistinų pavadinimuose.",
"perfcached": "Rodoma išsaugota duomenų kopija, todėl duomenys gali būti ne patys naujausi. Maksimaliai $1 {{PLURAL:$1|rezultatas|rezultatai|rezultatų}} yra saugoma.",
"perfcachedts": "Rodoma išsaugota duomenų kopija, kuri buvo atnaujinta $2 $3. Maksimaliai $4 {{PLURAL:$4|rezultatas|rezultatai|rezultatų}} yra saugoma.",
"querypage-no-updates": "Atnaujinimai šiam puslapiui dabar yra išjungti. Duomenys čia dabar nebus atnaujinti.",
@@ -346,8 +357,9 @@
"protectedpagetext": "Šis puslapis yra užrakintas, saugant jį nuo redagavimo.",
"viewsourcetext": "Jūs galite žiūrėti ir kopijuoti puslapio kodą:",
"viewyourtext": "Jūs galite matyti ir kopijuoti '''savo redagavimų''' tekstą į šį puslapį:",
- "protectedinterface": "Šiame puslapyje yra apsaugotas nuo piktnaudžiavimo programinės įrangos sąsajos tekstas.",
- "editinginterface": "'''Dėmesio:''' Jūs redaguojate puslapį, kuris yra naudojamas programinės įrangos sąsajos tekste. Pakeitimai šiame puslapyje taip pat pakeis naudotojo sąsajos išvaizdą ir kitiems naudotojams šiame wiki.\nJei norite pridėti ir keisti vertimus, siūlome pasinaudoti [//translatewiki.net/wiki/Main_Page?setlang=lt „translatewiki.net“], „MediaWiki“ lokalizacijos projektu.",
+ "protectedinterface": "Šiame puslapyje yra apsaugotas nuo piktnaudžiavimo programinės įrangos sąsajos tekstas. Norėdami pridėti ar pakeisti vertimus visose wiki, naudokite [//translatewiki.net/ translatewiki.net] MediaWiki vertimų projektą.",
+ "editinginterface": "'''Dėmesio:''' Jūs redaguojate puslapį, kuris yra naudojamas programinės įrangos sąsajos tekste. Pakeitimai šiame puslapyje taip pat pakeis naudotojo sąsajos išvaizdą ir kitiems naudotojams šiame wiki.",
+ "translateinterface": "Kad pridėtumėte vertimus visoms wiki, naudokitės [//translatewiki.net/ translatewiki.net] – projektu, skirtu MediaWiki vertimams į vietines kalbas.",
"cascadeprotected": "Šis puslapis buvo apsaugotas nuo redagavimo, kadangi jis yra įtrauktas į {{PLURAL:$1|šį puslapį, apsaugotą|šiuos puslapius, apsaugotus}} „pakopinės apsaugos“ pasirinktimi:\n$2",
"namespaceprotected": "Jūs neturite teisės redaguoti puslapių '''$1''' srityje.",
"customcssprotected": "Jūs neturite teisės keisti šį CSS puslapį, nes jame yra kito naudotojo asmeniniai nustatymai.",
@@ -363,10 +375,11 @@
"invalidtitle-unknownnamespace": "Klaidingas pavadinimas nežinomoje vardų erdvėje numeriu $1 ir tekstu \"$2\"",
"exception-nologin": "Neprisijungęs",
"exception-nologin-text": "Šiam puslapiui ar veiksmui reikalingas prisijungimas šioje wiki.",
+ "exception-nologin-text-manual": "Prašome $1, kad galėtumėte pasiekti puslapį ar įvykdyti veiksmą.",
"virus-badscanner": "Neleistina konfigūracija: nežinomas virusų skeneris: ''$1''",
"virus-scanfailed": "skanavimas nepavyko (kodas $1)",
"virus-unknownscanner": "nežinomas antivirusas:",
- "logouttext": "'''Dabar jūs esate atsijungęs.'''\n\nGalite toliau naudoti {{SITENAME}} anonimiškai arba <span class='plainlinks'>[$1 prisijunkite]</span> iš naujo tuo pačiu ar kitu naudotoju.\nPastaba: kai kuriuose puslapiuose ir toliau gali rodyti, kad esate prisijungęs iki tol, kol išvalysite savo naršyklės podėlį.",
+ "logouttext": "<strong>Dabar jūs esate atsijungęs.</strong>\n\nPastaba: kai kuriuose puslapiuose ir toliau gali rodyti, kad esate prisijungęs iki tol, kol išvalysite savo naršyklės podėlį.",
"welcomeuser": "Sveiki, $1 !",
"welcomecreation-msg": "Jūsų paskyra buvo sukurta.\nNepamirškite pakeisti savo [[Special:Preferences|{{SITENAME}} nustatymų]].",
"yourname": "Naudotojo vardas:",
@@ -403,6 +416,7 @@
"userlogin-resetlink": "Pamiršote savo prisijungimo duomenis?",
"userlogin-resetpassword-link": "Pamiršote savo slaptažodį?",
"userlogin-helplink2": "Padėti prisijungti",
+ "userlogin-loggedin": "Jūs jau prisijungęs kaip {{GENDER:$1|$1}}.\nNaudokite žemiau pateiktą pavidalą, kad prisijungtumėte kaip kitas naudotojas.",
"userlogin-createanother": "Sukurti kitą paskyrą",
"createacct-emailrequired": "Elektroninio pašto adresas",
"createacct-emailoptional": "Elektroninio pašto adresas (neprivaloma)",
@@ -465,8 +479,10 @@
"createaccount-text": "Projekte {{SITENAME}} ($4) kažkas sukūrė paskyrą „$2“ su slaptažodžiu „$3“ panaudodamas jūsų el. pašto adresą.\nJūs turėtumėte prisijungti ir pasikeisti savo slaptažodį.\n\nJūs galite nekreipti dėmesio į laišką, jei ši paskyra buvo sukurta per klaidą.",
"login-throttled": "Jūs pernelyg daug kartų bandėte prisijungti.\nPalaukite $1 prieš bandant vėl.",
"login-abort-generic": "Jūsų prisijungimas buvo nesėkmingas - Nutraukta",
+ "login-migrated-generic": "Jūsų paskyra buvo perkelta ir jūsų naudotojo vardo šioje wiki daugiau nebėra.",
"loginlanguagelabel": "Kalba: $1",
"suspicious-userlogout": "Jūsų prašymas atsijungti buvo atmestas, nes, atrodo, jį klaidingai išsiuntė naršyklė arba spartinantysis tarpinis serveris.",
+ "createacct-another-realname-tip": "Tikrojo vardo nurodyti nebūtina.\nJei pasirinksite jį nurodyti, jis bus naudojamas parodymui, kas atliko straipsnio papildymus.",
"pt-login": "Prisijungti",
"pt-login-button": "Prisijungti",
"pt-createaccount": "Sukurti paskyrą",
@@ -475,7 +491,7 @@
"user-mail-no-addy": "Bandyta išsiųsti elektroninį laišką be el. pašto adreso.",
"user-mail-no-body": "Mėginta siųsti tuščia ar pernelyg trumpą E-pašto žinutė.",
"changepassword": "Pakeisti slaptažodį",
- "resetpass_announce": "Jūs prisijungėte su atsiųstu laikinuoju kodu. Norėdami užbaigti prisijungimą, čia jums reikia nustatyti naująjį slaptažodį:",
+ "resetpass_announce": "Norint užbaigti prisijungimą jums reikia nustatyti naująjį slaptažodį.",
"resetpass_text": "<!-- Įterpkite čia tekstą -->",
"resetpass_header": "Keisti paskyros slaptažodį",
"oldpassword": "Senas slaptažodis:",
@@ -483,16 +499,22 @@
"retypenew": "Pakartokite naują slaptažodį:",
"resetpass_submit": "Nustatyti slaptažodį ir prisijungti",
"changepassword-success": "Jūsų slaptažodis pakeistas sėkmingai!",
+ "changepassword-throttled": "Jūs pastaruoju metu atlikote pernelyg daug bandymų prisijungti. Prašome luktelėti $1 prieš bandant iš naujo.",
"resetpass_forbidden": "Slaptažodžiai negali būti pakeisti",
"resetpass-no-info": "Jūs turite būti prisijungęs, kad pasiektumėte puslapį tiesiogiai.",
"resetpass-submit-loggedin": "Keisti slaptažodį",
"resetpass-submit-cancel": "Atšaukti",
"resetpass-wrong-oldpass": "Klaidingas laikinas ar esamas slaptažodis.\nJūs galbūt jau sėkmingai pakeitėte savo slaptažodį ar gavote naują laikiną slaptažodį.",
+ "resetpass-recycled": "Atkurkite savo slaptažodį kitokiu, nei buvo prieš tai.",
+ "resetpass-temp-emailed": "Jūs prisijungęs laikinu slaptažodžiu, gautu per elektroninį paštą. Kad baigtumėte jungtis, čia turite nustatyti naują slaptažodį:",
"resetpass-temp-password": "Laikinas slaptažodis:",
"resetpass-abort-generic": "Slaptažodžio keitimas buvo nutrauktas nuo ekstenzijos.",
+ "resetpass-expired": "Jūsų slaptažodžio galiojimas baigėsi. Prašome nustatyti naują prisijungimo slaptažodį.",
+ "resetpass-expired-soft": "Jūsų slaptažodžio galiojimas baigėsi ir jį reikia atkurti iš naujo. Pasirinkite naują slaptažodį dabar arba spauskite \"{{int:resetpass-submit-cancel}}\", kad būtų atstatytas vėliau.",
+ "resetpass-validity-soft": "Jūsų slaptažodis netinkamas: $1\n\nPasirinkite naują slaptažodį dabar arba spauskite \"{{int:resetpass-submit-cancel}}\", kad būtų atkurtas vėliau.",
"passwordreset": "Atstatyti slaptažodį",
"passwordreset-text-one": "Užpildykite šią formą, norėdami atkurti savo slaptažodį.",
- "passwordreset-text-many": "{{PLURAL:$1|Užpildykite viena iš laukų slaptažodžio atkurimui.}}",
+ "passwordreset-text-many": "{{PLURAL:$1|Užpildykite vieną iš laukų slaptažodžio atkūrimui.}}",
"passwordreset-legend": "Atstatyti slaptažodį",
"passwordreset-disabled": "Slaptažodžių atstatymai šiame wikyje išjungti.",
"passwordreset-emaildisabled": "El. pašto funkcijos uždraustos šiame wiki.",
@@ -502,14 +524,13 @@
"passwordreset-capture-help": "Jei jūs čia pažymėsite, tai e-mail laiškas (su laikinuoju slaptažodžiu) bus parodytas jums prieš išsiunčiant jį naudotojui.",
"passwordreset-email": "E-pašto adresas:",
"passwordreset-emailtitle": "Paskyros informacija apie {{sitename}}",
- "passwordreset-emailtext-ip": "Kažkas (tikriausiai jūs, IP adresu $1) paprašė priminti jūsų slaptažodį svetainėje {{SITENAME}} ($4). Šio naudotojo {PLURAL:$3|paskyra|paskyros}} yra susietos su šiuo elektroninio pašto adresu $2\n\n{{PLURAL:$3|Šis laikinas slaptažodis |Šie laikini slaptažodžiai}} baigsis po {{PLURAL:$5|vienos dienos| $5 dienų}}. \n\nJūs turėtumėte prisijungti ir pasirinkti naują slaptažodį. Jei kažkas kitas padarė šį prašymą arba jūs prisiminėte savo pirminį slaptažodį, ir jums nebereikia jo pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju slaptažodžiu.",
+ "passwordreset-emailtext-ip": "Kažkas (tikriausiai jūs, IP adresu $1) paprašė priminti jūsų slaptažodį svetainėje {{SITENAME}} ($4). Šio naudotojo {PLURAL:$3|paskyra|paskyros}} yra susietos su šiuo elektroninio pašto adresu:\n\n$2\n\n{{PLURAL:$3|Šis laikinas slaptažodis |Šie laikini slaptažodžiai}} baigs galiot po {{PLURAL:$5|vienos dienos|$5 dienų}}. \n\nJūs turėtumėte prisijungti ir pasirinkti naują slaptažodį. Jei kažkas kitas padarė šį prašymą arba jūs prisiminėte savo pirminį slaptažodį, ir jums nebereikia jo pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju slaptažodžiu.",
"passwordreset-emailtext-user": "Naudotojas $1 svetainėje {{SITENAME}} sukūrė užklausą slaptažodžio priminimui svetainėje {{SITENAME}}\n($4). Šio naudotojo {{PLURAL:$3|paskyra|paskyros}} susieto su šiuo elektroniniu paštu $2. \n\n{{PLURAL:$3|Šis laikinas slaptažodis|Šie laikini slaptažodžiai}} baigs galioti po {{PLURAL:$5|vienos dienos|$5 dienų}}. Jūs turėtumėte prisijungti ir pasirinkti naują slaptažodį. Jei kažkas padarė tai be jūsų žinios arba jūs prisiminėte savo pirminį slaptažodį, ir jūs nebenorite jo pakeisti, galite ignoruoti šį pranešimą ir toliau naudotis savo senuoju slaptažodžiu.",
"passwordreset-emailelement": "Naudotojo vardas: $1\nLaikinas slaptažodis: $2",
"passwordreset-emailsent": "Slaptažodžio priminimo laiškas buvo išsiųstas.",
"passwordreset-emailsent-capture": "Slaptažodžio priminimo laiškas bus išsiųstas, toks koks parodytas.",
- "passwordreset-emailerror-capture": "Priminimo e-mail laiškas buvo sugeneruotas, toks koks parodytas, bet pasiuntimas naudotojui buvo nesėkmingas: $1",
+ "passwordreset-emailerror-capture": "Priminimo elektroninis laiškas buvo sukurtas, toks, koks parodytas žemiau, bet pasiuntimas naudotojui buvo nesėkmingas: $1",
"changeemail": "Pakeisti el. pašto adresą",
- "changeemail-header": "Keisti paskyros el. pašto adresą",
"changeemail-text": "Užpildykite šią formą, jei norite pakeisti savo el. pašto adresą. Jums reikės įvesti savo slaptažodį, siekiant patvirtinti šį pakeitimą.",
"changeemail-no-info": "Jūs turite būti prisijungęs, kad pasiektumėte puslapį tiesiogiai.",
"changeemail-oldemail": "Dabartinis el. pašto adresas:",
@@ -517,7 +538,8 @@
"changeemail-none": "(nėra)",
"changeemail-password": "Jūsų {{SITENAME}} slaptažodis:",
"changeemail-submit": "Keisti el. pašto adresą",
- "changeemail-cancel": "Atšaukti",
+ "changeemail-throttled": "Jūs atlikote pernelyg daug bandymų prisijungti.\nLuktelėkite $1 prieš bandant vėl.",
+ "resettokens-token-label": "$1 (dabartinė reikšmė: $2)",
"bold_sample": "Paryškintas tekstas",
"bold_tip": "Paryškinti tekstą",
"italic_sample": "Tekstas kursyvu",
@@ -531,12 +553,12 @@
"nowiki_sample": "Čia įterpkite neformuotą tekstą",
"nowiki_tip": "Ignoruoti wiki formatą",
"image_sample": "Pavyzdys.jpg",
- "image_tip": "Įdėti failą",
+ "image_tip": "Įterpta rinkmena",
"media_sample": "Pavyzdys.ogg",
- "media_tip": "Nuoroda į failą",
+ "media_tip": "Nuoroda į rinkmeną",
"sig_tip": "Jūsų parašas bei laikas",
"hr_tip": "Horizontali linija (naudokite taupiai)",
- "summary": "Komentaras:",
+ "summary": "Paaiškinimas:",
"subject": "Tema/antraštė:",
"minoredit": "Tai smulkus pataisymas",
"watchthis": "Stebėti šį puslapį",
@@ -544,9 +566,11 @@
"preview": "Peržiūra",
"showpreview": "Rodyti peržiūrą",
"showdiff": "Rodyti skirtumus",
- "anoneditwarning": "'''Dėmesio:''' Jūs nesate prisijungęs. Jūsų IP adresas bus įrašytas į šio puslapio istoriją.",
+ "blankarticle": "<strong>Dėmesio:</strong> Jūsų kuriamas straipsnis yra tuščias. Jei vėl paspausite \"{{int:savearticle}}\", puslapis bus sukurtas be jokio turinio.",
+ "anoneditwarning": "<strong>Dėmesio:</strong> Jūs nesate prisijungęs. Jūsų IP adresas bus viešai matomas, jei atliksite kokius nors keitimus. Jeigu <strong>[$1 prisijungsite]</strong> arba <strong>[$2 sukursite paskyrą]</strong>, jūsų keitimai bus priskirti jūsų naudotojo vardui; drauge įgysite naujų galimybių.",
"anonpreviewwarning": "''Jūs nesate prisijungęs. Išsaugojant jūsų IP adresas bus rodomas šio puslapio redagavimo istorijoje.''",
"missingsummary": "'''Priminimas:''' Jūs nenurodėte keitimo komentaro. Jei vėl paspausite „{{int:savearticle}}“, jūsų keitimas bus išsaugotas be jo.",
+ "selfredirect": "<strong>Dėmesio:</strong> Jūs nukreipiate puslapį atgal į jį patį. Galbūt parinkote netinkamą nukreipimo kreipinį arba taisote ne tą straipsnį. \nJei vėl paspausite \"{{int:savearticle}}\", šis nukreipimas vis vien bus sukurtas.",
"missingcommenttext": "Prašome įvesti komentarą.",
"missingcommentheader": "'''Priminimas:''' Jūs nenurodėte šio komentaro pavadinimo/antraštės.\nJei vėl paspausite „{{int:savearticle}}“, jūsų keitimas bus įrašytas be jo.",
"summary-preview": "Komentaro peržiūra:",
@@ -563,7 +587,7 @@
"loginreqlink": "prisijungti",
"loginreqpagetext": "Jums reikia $1, kad matytumėte kitus puslapius.",
"accmailtitle": "Slaptažodis išsiųstas.",
- "accmailtext": "Atsitiktinai sugeneruotas naudotojo [[User talk:$1|$1]] slaptažodis nusiųstas į $2.\n\nŠios naujos paskyros slaptažodis gali būti pakeistas ''[[Special:ChangePassword|keisti slaptažodį]]'' puslapyje.",
+ "accmailtext": "Atsitiktinai sukurtas naudotojo [[User talk:$1|$1]] slaptažodis nusiųstas į $2.\n\nŠios naujos paskyros slaptažodis gali būti pakeistas <em>[[Special:ChangePassword|keisti slaptažodį]]</em> puslapyje beprisijungiant.",
"newarticle": "(Naujas)",
"newarticletext": "Jūs patekote į dar neegzistuojantį puslapį.\nNorėdami sukurti puslapį, pradėkite rašyti žemiau esančiame įvedimo lauke\n(plačiau [$1 pagalbos puslapyje]).\nJei patekote čia per klaidą, paprasčiausiai spustelkite naršyklės mygtuką '''atgal'''.",
"anontalkpagetext": "----''Tai yra anoniminio naudotojo, nesusikūrusio arba nenaudojančio paskyros, aptarimų puslapis.\nDėl to naudojamas IP adresas jo identifikavimui.\nŠis IP adresas gali būti dalinamas keliems naudotojams.\nJeigu Jūs esate anoniminis naudotojas ir atrodo, kad komentarai nėra skirti Jums, [[Special:UserLogin/signup|sukurkite paskyrą]] arba [[Special:UserLogin|prisijunkite]], ir nebūsite tapatinamas su kitais anoniminiais naudotojais.''",
@@ -592,7 +616,7 @@
"editing": "Taisomas $1",
"creating": "Kuriama $1",
"editingsection": "Taisomas $1 (skyrelis)",
- "editingcomment": "Taisomas $1 (komentaras)",
+ "editingcomment": "Taisomas $1 (naujas skyrius)",
"editconflict": "Išpręskite konfliktą: $1",
"explainconflict": "Kažkas kitas jau pakeitė puslapį nuo tada, kai jūs pradėjote jį redaguoti.\nViršutiniame tekstiniame lauke pateikta šiuo metu esanti puslapio versija.\nJūsų keitimai pateikti žemiau esančiame lauke.\nJums reikia sujungti jūsų pakeitimus su esančia versija.\nKai paspausite „{{int:savearticle}}“, bus įrašytas '''tik''' tekstas viršutiniame tekstiniame lauke.",
"yourtext": "Jūsų tekstas",
@@ -629,18 +653,25 @@
"edit-gone-missing": "Negalima atnaujinti puslapio.\nGreičiausiai jis yra ištrintas.",
"edit-conflict": "Redagavimo konfliktas.",
"edit-no-change": "Jūsų keitimas buvo ignoruotas kadangi nebuvo atlikta jokių teksto pakeitimų.",
+ "postedit-confirmation-created": "Puslapis sukurtas.",
+ "postedit-confirmation-restored": "Puslapis buvo atkurtas.",
"postedit-confirmation-saved": "Jūsų pakeitimas išsaugotas.",
"edit-already-exists": "Negalima sukurti naujo puslapio.\nJis jau egzistuoja.",
"defaultmessagetext": "Numatytasis pranešimo tekstas",
+ "content-failed-to-parse": "Turinys $2 neatitinka tipui $1: $3",
"invalid-content-data": "Neleistinas turinys.",
"content-not-allowed-here": "Turinys \"$1\" puslapyje [[$2]] nėra leistinas.",
- "editwarning-warning": "Palikdamas šį puslapį jūs prarasite visus padarytus pakeitimus.",
+ "editwarning-warning": "Palikdamas šį puslapį jūs galite prarasti visus padarytus pakeitimus.\nJei esate prisijungęs, galite išjungti šį perspėjimą jūsų nustatymų skyrelyje \"{{int:prefs-editing}}\".",
"editpage-notsupportedcontentformat-title": "Turinio formatas nepalaikomas",
"editpage-notsupportedcontentformat-text": "Turinio formatas $1 nepalaiko turinio modelio $2.",
"content-model-wikitext": "wikitekstas",
"content-model-text": "paprastasis tekstas",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Tuščias objektas",
+ "content-json-empty-array": "Tuščias masyvas",
+ "duplicate-args-category": "Puslapiai, naudojantys pasikartojančias skiltis iššaukiant šablonus",
+ "duplicate-args-category-desc": "Puslapiai, turintys šablonų, naudojančių pasikartojančias skiltis, iššaukimus, pavyzdžiui <nowiki>{{foo|bar=1|bar=2}}</nowiki></code> arba <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Įspėjimas: Šiame puslapyje yra per daug užtrunkančių analizatoriaus funkcijų šaukinių.\n\nTai turėtų būti mažiau nei $2 {{PLURAL:$2|šaukinys|šaukiniai|šaukinių}}, tačiau dabar yra $1 {{PLURAL:$1|šaukinys|šaukiniai|šaukinių}}.",
"expensive-parserfunction-category": "Puslapiai su per daug brangių kodo analizuoklio funkcijų šaukinių",
"post-expand-template-inclusion-warning": "Įspėjimas: Šablonų įterpimo dydis per didelis.\nKai kurie šablonai nebus įtraukti.",
@@ -650,19 +681,30 @@
"parser-template-loop-warning": "Aptiktas šablono ciklas: [[$1]]",
"parser-template-recursion-depth-warning": "Šablono rekursinio gylio riba viršyta ($1)",
"language-converter-depth-warning": "Kalbos keitiklio gylio riba viršyta ($1)",
+ "node-count-exceeded-category": "Puslapiai, kuriuose viršytas saitų kiekis",
+ "node-count-exceeded-category-desc": "Puslapyje viršijamas didžiausias saitų kiekis.",
+ "node-count-exceeded-warning": "Puslapis, viršijantis didžiausią saitų kiekį",
+ "expansion-depth-exceeded-category": "Puslapiai, kuriuose viršijamas plėtros gylis",
+ "expansion-depth-exceeded-category-desc": "Puslapis viršija didžiausią plėtros gylį.",
+ "expansion-depth-exceeded-warning": "Puslapis, viršijantis didžiausią plėtros gylį",
+ "parser-unstrip-loop-warning": "Rastas neuždarytas ciklas",
+ "converter-manual-rule-error": "Rankinėje kalbos pertvarkymo taisyklėje rasta klaida",
"undo-success": "Keitimas gali būti atšauktas. Prašome patikrinti palyginimą, esantį žemiau, kad patvirtintumėte, kad jūs tai ir norite padaryti, ir tada išsaugokite pakeitimus, esančius žemiau, kad užbaigtumėte keitimo atšaukimą.",
"undo-failure": "Keitimas negali būti atšauktas dėl konfliktuojančių tarpinių keitimų.",
"undo-norev": "Keitimas negali būti atšauktas, kadangi jis neegzistuoja arba buvo ištrintas.",
+ "undo-nochange": "Panašu, kad keitimas jau buvo atšauktas.",
"undo-summary": "Atšauktas [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarimas]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]]) keitimas ($1 versija)",
+ "undo-summary-username-hidden": "Atmesti versiją $1, atliktą paslėpto naudotojo",
"cantcreateaccounttitle": "Paskyrų kūrimas negalimas",
"cantcreateaccount-text": "Paskyrų kūrimą iš šio IP adreso ('''$1''') užblokavo [[User:$3|$3]].\n\n$3 nurodyta priežastis yra ''$2''",
+ "cantcreateaccount-range-text": "Naudotojas [[User:$3|$3]] nustatė draudimą kurti paskyras iš IP adresų plotmės '''$1''', į kurią patenka ir jūsiškis IP adresas ('''$4''').",
"viewpagelogs": "Rodyti šio puslapio specialiuosius veiksmus",
"nohistory": "Šis puslapis neturi keitimų istorijos.",
"currentrev": "Dabartinė versija",
"currentrev-asof": "Dabartinė $1 versija",
"revisionasof": "$1 versija",
- "revision-info": "$1 versija naudotojo $2",
- "previousrevision": "←Ankstesnė versija",
+ "revision-info": "$1 versija, sukurta {{GENDER:$6|$2}}$7",
+ "previousrevision": "← Ankstesnė versija",
"nextrevision": "Vėlesnė versija→",
"currentrevisionlink": "Dabartinė versija",
"cur": "dab",
@@ -686,6 +728,7 @@
"rev-deleted-event": "(įrašas pašalintas)",
"rev-deleted-user-contribs": "[vardas arba IP adresas pašalintas - redagavimas paslėptas nuo prisidėjimų]",
"rev-deleted-text-permission": "Ši puslapio versija buvo '''pašalinta'''.\nDaugiau detalių galima rasti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} trynimų istorijoje].",
+ "rev-suppressed-text-permission": "Ši puslapio versija buvo <strong>pašalinta</strong>.\nDaugiau smulkmenų galima rasti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} trynimų istorijoje].",
"rev-deleted-text-unhide": "Ši puslapio versija buvo '''ištrinta'''.\nTrynimo detales rasite [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ištrintų puslapių sąraše].\nKaip administratorius, jūs vis dar galite [$1 peržiūrėti šią versiją].",
"rev-suppressed-text-unhide": "Ši puslapio versija buvo '''paslėpta'''.\nDaugiau detalių gali būti [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} slėpimų istorijoje].\nKaip administratorius, jūs vis dar galite [$1 peržiūrėti šią versiją].",
"rev-deleted-text-view": "Ši puslapio versija buvo '''pašalinta'''.\nKaip administratorius, jūs galite ją pamatyti;\ndaugiau detalių gali būti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} trynimų istorijoje].",
@@ -704,9 +747,15 @@
"revdelete-no-file": "Nurodytas failas neegzistuoja.",
"revdelete-show-file-confirm": "Ar tikrai norite peržiūrėti ištrintą failo „<nowiki>$1</nowiki>“ $2 $3 versiją?",
"revdelete-show-file-submit": "Taip",
+ "revdelete-selected-text": "[[:$2]] {{PLURAL:$1|pasirinkta versija|pasirinktos versijos|pasirinktų versijų}}:",
+ "revdelete-selected-file": "[[:$2]] {{PLURAL:$1|pasirinkta rinkmenos versija|pasirinktos rinkmenos versijos|pasirinktų rinkmenos versijų}}:",
"logdelete-selected": "{{PLURAL:$1|Pasirinktas istorijos įvykis|Pasirinkti istorijos įvykiai}}:",
+ "revdelete-text-text": "Pašalintos versijos vis dar bus matomos puslapio istorijoje, bet jų dalys nebebus viešai pasiekiamos.",
+ "revdelete-text-file": "Pašalintos rinkmenos versijos vis dar bus matomos puslapio istorijoje, bet jų dalys nebebus viešai pasiekiamos.",
+ "logdelete-text": "Pašalinti veiksmai vis dar bus matomi veiksmų istorijose, bet jų dalys nebebus viešai pasiekiamos.",
+ "revdelete-text-others": "Kiti administratoriai vis dar galės pasiekti paslėptą turinį ir jį atkurti, nebent būtų nustatyti papildomi apribojimai.",
"revdelete-confirm": "Prašome patvirtinti, kad jūs tai ketinate padaryti, kad jūs suprantate padarinius, ir kad jūs tai darote pagal [[{{MediaWiki:Policy-url}}|politiką]].",
- "revdelete-suppress-text": "Ištrynimas turėtų būti taikomas '''tik''' šiais atvejais:\n* Netinkama asmeninė informacija\n*: ''namų adresai, telefonų numeriai, asmens kodai ir t. t.''",
+ "revdelete-suppress-text": "Ištrynimas turėtų būti taikomas <strong>tik</strong> šiais atvejais:\n* Galimai šmeižikiška informacija\n* netinkama asmeninė informacija\n*: <em>namų adresai, telefonų numeriai, asmens kodai ir t. t.</em>",
"revdelete-legend": "Nustatyti matomumo apribojimus:",
"revdelete-hide-text": "Versijos tekstas",
"revdelete-hide-image": "Slėpti failo turinį",
@@ -754,6 +803,7 @@
"mergehistory-empty": "Versijos negali būti sujungtos",
"mergehistory-success": "$3 [[:$1]] {{PLURAL:$3|versija|versijos|versijų}} sėkmingai {{PLURAL:$3|sujungta|sujungtos|sujungta}} su [[:$2]].",
"mergehistory-fail": "Nepavyksta atlikti istorijų sujungimo, prašome patikrinti puslapio ir laiko parametrus.",
+ "mergehistory-fail-toobig": "Nepavyksta sulieti istorijos, nes būtina pernešti daugiau, nei leidžia $1 riba, {{PLURAL:$1|versijos|versijų}}.",
"mergehistory-no-source": "Šaltinio puslapis $1 neegzistuoja.",
"mergehistory-no-destination": "Rezultato puslapis $1 neegzistuoja.",
"mergehistory-invalid-source": "Pradinis puslapis turi turėti leistiną pavadinimą.",
@@ -763,21 +813,22 @@
"mergehistory-same-destination": "Šaltinio ir tikslo puslapiai negali būti vienodi",
"mergehistory-reason": "Priežastis:",
"mergelog": "Sujungimų sąrašas",
- "pagemerge-logentry": "sujungė [[$1]] su [[$2]] (versijos iki $3)",
"revertmerge": "Atskirti",
"mergelogpagetext": "Žemiau yra paskiausių vieno su kitu puslapių sujungimų sąrašas.",
"history-title": "„$1“ versijų istorija",
"difference-title": "$1: Skirtumas tarp puslapio versijų",
"difference-title-multipage": "Skirtumas tarp puslapių „$1 ir $2“",
"difference-multipage": "(Skirtumai tarp puslapių)",
- "lineno": "Eilutė $1:",
+ "lineno": "$1 eilutė:",
"compareselectedversions": "Palyginti pasirinktas versijas",
"showhideselectedversions": "Rodyti/slėpti pasirinktas versijas",
"editundo": "atšaukti",
"diff-empty": "(Jokio skirtumo)",
+ "diff-multi-sameuser": "(nerodoma {{PLURAL:$1|viena tarpinė versija, sukurta|$1 tarpinės versijos, sukurtos|$1 tarpinių versijų, sukurtų}} to paties naudotojo)",
+ "diff-multi-otherusers": "(nerodoma {{PLURAL:$1|viena tarpinė versija, sukurta|$1 tarpinės versijos, sukurtos|$1 tarpinių versijų, sukurtų}} {{PLURAL:$2|vieno naudotojo|$2 naudotojų}})",
"diff-multi-manyusers": "(daugiau nei $2 {{PLURAL:$2|naudotojo|naudotojų|naudotojų}} $1 {{PLURAL:$1|tarpinis keitimas nėra rodomas|tarpiniai keitimai nėra rodomi|tarpinių keitimų nėra rodoma}})",
"searchresults": "Paieškos rezultatai",
- "searchresults-title": "Paieškos rezultatai „$1“",
+ "searchresults-title": "Paieškos rezultatai \"$1\"",
"titlematches": "Puslapių pavadinimų atitikmenys",
"textmatches": "Puslapio turinio atitikmenys",
"notextmatches": "Jokių puslapių teksto atitikmenų",
@@ -794,13 +845,15 @@
"searchprofile-everything": "Viskas",
"searchprofile-advanced": "Išplėstinė",
"searchprofile-articles-tooltip": "Ieškoti čia: $1",
- "searchprofile-images-tooltip": "Ieškoti failų",
- "searchprofile-everything-tooltip": "Ieškoti viso turinio (tame tarpe aptarimų puslapių)",
+ "searchprofile-images-tooltip": "Ieškoti rinkmenų",
+ "searchprofile-everything-tooltip": "Ieškoti viso turinio (įskaitant aptarimo puslapius)",
"searchprofile-advanced-tooltip": "Ieškoti skirtingose vardų srityse",
"search-result-size": "$1 ({{PLURAL:$2|1 žodis|$2 žodžiai|$2 žodžių}})",
"search-result-category-size": "{{PLURAL:$1|1 narys|$1 narių}} ({{PLURAL:$2|1 subkategorijoje|$2 subkategorijų}}, {{PLURAL:$3|1 failas|$3 failų}})",
"search-redirect": "(peradresavimas $1)",
"search-section": "(skyrius $1)",
+ "search-category": "(kategorija $1)",
+ "search-file-match": "(atitinka rinkmenos turinį)",
"search-suggest": "Galbūt norėjote $1",
"search-interwiki-caption": "Dukteriniai projektai",
"search-interwiki-default": "Rezultatai iš $1:",
@@ -809,18 +862,22 @@
"searchrelated": "susiję",
"searchall": "visi",
"showingresults": "Žemiau rodoma iki '''$1''' {{PLURAL:$1|rezultato|rezultatų|rezultatų}} pradedant #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Rezultatas '''$1''' iš '''$3'''|Rezultatai '''$1 - $2''' iš '''$3'''}} pagal užklausą '''$4'''",
+ "showingresultsinrange": "Žemiau rodoma iki {{PLURAL:$1|<strong>1</strong> gavinio|<strong>$1</strong> gavinių}} imtyje nuo <strong>$2</strong> iki <strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Davinys <strong>$1</strong> iš <strong>$3</strong>|Daviniai <strong>$1 - $2</strong> iš <strong>$3</strong>}}",
"search-nonefound": "Nėra rezultatų, atitinkančių užklausą.",
"powersearch-legend": "Išplėstinė paieška",
"powersearch-ns": "Ieškoti vardų srityse:",
"powersearch-togglelabel": "Pažymėti:",
"powersearch-toggleall": "Viską",
"powersearch-togglenone": "Nieko",
+ "powersearch-remember": "Atsiminti pasirinkimą būsimoms paieškoms",
"search-external": "Išorinė paieška",
"searchdisabled": "Projekto {{SITENAME}} paieška yra uždrausta. Galite pamėginti ieškoti Google paieškos sistemoje. Paieškos sistemoje projekto {{SITENAME}} duomenys gali būti pasenę.",
+ "search-error": "Vykdant paiešką įvyko klaida: $1",
"preferences": "Nustatymai",
"mypreferences": "Nustatymai",
"prefs-edits": "Keitimų skaičius:",
+ "prefsnologintext2": "Prisijunkite, kad galėtumėte keisti savo nustatymus.",
"prefs-skin": "Išvaizda",
"skin-preview": "Peržiūra",
"datedefault": "Jokio pasirinkimo",
@@ -841,7 +898,7 @@
"prefs-email": "El. pašto nustatymai",
"prefs-rendering": "Išvaizda",
"saveprefs": "Išsaugoti",
- "restoreprefs": "Grąžinti visus numatytuosius nustatymus",
+ "restoreprefs": "Grąžinti visus numatytuosius nustatymus (visose skiltyse)",
"prefs-editing": "Redagavimas",
"rows": "Eilutės:",
"columns": "Stulpeliai:",
@@ -852,6 +909,7 @@
"recentchangesdays-max": "(daugiausiai $1 {{PLURAL:$1|diena|dienos|dienų}})",
"recentchangescount": "Numatytasis rodomas keitimų skaičius:",
"prefs-help-recentchangescount": "Į tai įeina naujausi keitimai, puslapių istorijos ir specialiųjų veiksmų sąrašai.",
+ "prefs-help-watchlist-token2": "Tai yra slaptas jūsų stebimųjų sąrašo raktas, skirtas žiniatinkliui.\nKiekvienas, kurį jį žino, gali skaityti jūsų stebimųjų puslapių sąrašą, taigi, juo nesidalinkite.\nJei reikia jį anuliuoti, [[Special:ResetTokens|spauskite čia]].",
"savedprefs": "Nustatymai sėkmingai išsaugoti.",
"timezonelegend": "Laiko juosta:",
"localtime": "Vietinis laikas:",
@@ -881,7 +939,7 @@
"prefs-emailconfirm-label": "El. pašto patvirtinimas:",
"youremail": "El. paštas:",
"username": "{{GENDER:$1Naudotojo vardas}}:",
- "prefs-memberingroups": "{{PLURAL:$1|Grupės|Grupių}} narys:",
+ "prefs-memberingroups": "{{PLURAL:$1|Grupės|Grupių}} {{GENDER:$2|narys|narė}}:",
"prefs-registration": "Registravimosi laikas:",
"yourrealname": "Tikrasis vardas:",
"yourlanguage": "Sąsajos kalba:",
@@ -893,8 +951,8 @@
"badsiglength": "Jūsų parašas per ilgas.\nJį turi sudaryti ne daugiau kaip $1 {{PLURAL:$1|simbolis|simboliai|simbolių}}.",
"yourgender": "Lytis:",
"gender-unknown": "Aš nenoriu pasakyti",
- "gender-male": "Jis redaguoja wiki puslapius",
- "gender-female": "Ji redaguoja wiki puslapius",
+ "gender-male": "Vyras",
+ "gender-female": "Moteris",
"prefs-help-gender": "Pasirinktinai: naudojama teisingam sistemos kreipimuisi į jus.\nŠi informacija yra vieša.",
"email": "El. paštas",
"prefs-help-realname": "Tikrasis vardas yra neprivalomas.\nJei jūs jį įvesite, jis bus naudojamas pažymėti jūsų darbą.",
@@ -916,6 +974,9 @@
"prefs-displayrc": "Rodymo nustatymai",
"prefs-displaywatchlist": "Rodymo nuostatos",
"prefs-diffs": "Skirtumai",
+ "prefs-help-prefershttps": "Šis nustatymas suveiks kitą kartą prisijungiant.",
+ "prefswarning-warning": "Jūs atlikote savo nustatymų pakeitimus, kurie dar nebuvo išsaugoti.\nJei paliksite puslapį nepaspaudę \"$1\", jūsų nustatymai nebus atnaujinti.",
+ "prefs-tabs-navigation-hint": "Patarimas: galite naudoti kairės ir dešinės rodyklių ženkliukus, kad skirtukų sąraše judėtumėte tarp skirtukų.",
"email-address-validity-valid": "Panašu, kad E-pašto adresas yra teisingas",
"email-address-validity-invalid": "Įveskite korektišką e-pašto adresą",
"userrights": "Naudotojų teisių valdymas",
@@ -936,6 +997,7 @@
"userrights-changeable-col": "Grupės, kurias galite keisti",
"userrights-unchangeable-col": "Grupės, kurių negalite keisti",
"userrights-conflict": "Naudotojo teisių konfliktas! Prašome dar kartą taikyti savo keitimus.",
+ "userrights-removed-self": "Jūs sėkmingai panaikinote savo paties teises. Taigi, daugiau nebegalite pasiekti šio puslapio.",
"group": "Grupė:",
"group-user": "Naudotojai",
"group-autoconfirmed": "Automatiškai patvirtinti naudotojai",
@@ -965,6 +1027,7 @@
"right-move": "Pervadinti puslapius",
"right-move-subpages": "Perkelti puslapius su jų subpuslapiais",
"right-move-rootuserpages": "Perkelti šakninius naudotojo puslapius",
+ "right-move-categorypages": "Pervardyti kategorijų puslapius",
"right-movefile": "Perkelti failus",
"right-suppressredirect": "Nekurti peradresavimo iš seno pavadinimo, kuomet puslapis pervadinamas",
"right-upload": "Įkelti failus",
@@ -987,6 +1050,7 @@
"right-browsearchive": "Ieškoti ištrintų puslapių",
"right-undelete": "Atkurti puslapį",
"right-suppressrevision": "Peržiūrėti ir atkurti versijas, paslėptas nuo administratorių",
+ "right-viewsuppressed": "Peržiūrėti versijas, paslėptas nuo visų naudotojų",
"right-suppressionlog": "Žiūrėti privačius įvykių sąrašus",
"right-block": "Blokuoti redagavimo galimybę kitiems naudotojams",
"right-blockemail": "Blokuoti elektroninio pašto siuntimo galimybę naudotojui",
@@ -995,14 +1059,18 @@
"right-proxyunbannable": "Apeiti automatinius proxy serverių blokavimus",
"right-unblockself": "Atblokuoti pačius",
"right-protect": "Pakeisti apsaugos lygius ir redaguoti apsaugotus puslapius",
- "right-editprotected": "Redaguoti apsaugotus puslapius (be pakopinės apsaugos)",
- "right-editinterface": "Redaguoti naudotojo aplinką",
+ "right-editprotected": "Taisyti puslapius, apsaugotus kaip \"{{int:protect-level-sysop}}\"",
+ "right-editsemiprotected": "Taisyti puslapius, apsaugotus kaip \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editinterface": "Keisti naudotojo aplinką",
"right-editusercssjs": "Redaguoti kitų naudotojų CSS ir JS failus",
"right-editusercss": "Redaguoti kitų naudotojų CSS failus",
"right-edituserjs": "Redaguoti kitų naudotojų JS failus",
"right-editmyusercss": "Redaguoti savo vartotojo CSS failus",
"right-editmyuserjs": "Redaguokite savo naudotojo vartotojo JavaScript failus",
"right-viewmywatchlist": "Peržiūrėti savo stebimų sąrašą",
+ "right-editmywatchlist": "Keiskite savo stebimųjų sąrašą. Atminkite, kad kai kurie veiksmai vis vien pridės puslapius netgi be tokios teisės.",
+ "right-viewmyprivateinfo": "Peržiūrėti asmeninius duomenis (pvz., elektroninis paštas, tikras vardas)",
+ "right-editmyprivateinfo": "Keisti asmeninius duomenis (pvz., elektroninis paštas, tikras vardas)",
"right-editmyoptions": "Redaguoti savo nuostatas",
"right-rollback": "Greitai atmesti paskutinio naudotojo tam tikro puslapio pakeitimus",
"right-markbotedits": "Žymėti atmestus keitimus kaip atliktus boto",
@@ -1025,19 +1093,21 @@
"rightslog": "Naudotojų teisių pakeitimai",
"rightslogtext": "Pateikiamas naudotojų teisių pakeitimų sąrašas.",
"action-read": "skaityti šį puslapį",
- "action-edit": "redaguoti šį puslapį",
+ "action-edit": "keisti šį puslapį",
"action-createpage": "kurti puslapius",
"action-createtalk": "kurti aptarimų puslapius",
"action-createaccount": "kurti šią naudotojo paskyrą",
+ "action-history": "peržiūrėti šio puslapio istoriją",
"action-minoredit": "žymėti keitimą kaip smulkų",
"action-move": "pervadinti šį puslapį",
"action-move-subpages": "pervadinti šį puslapį ir jo subpuslapius",
"action-move-rootuserpages": "perkelti pagrindinius naudotojų puslapius",
+ "action-move-categorypages": "pervardyti kategorijų puslapius",
"action-movefile": "perkelti šį failą",
- "action-upload": "įkelti šį failą",
+ "action-upload": "įkelti šią rinkmeną",
"action-reupload": "perrašyti šį esamą failą",
"action-reupload-shared": "perrašyti šį failą bendrojoje saugykloje",
- "action-upload_by_url": "įkelti šį failą iš URL adreso",
+ "action-upload_by_url": "įkelti šią rinkmeną iš URL adreso",
"action-writeapi": "naudotis rašymo API",
"action-delete": "ištrinti šį puslapį",
"action-deleterevision": "ištrinti šią reviziją",
@@ -1064,18 +1134,21 @@
"action-viewmyprivateinfo": "peržiūrėti jūsų privačią informaciją",
"action-editmyprivateinfo": "redaguoti savo privačią informaciją",
"nchanges": "$1 {{PLURAL:$1|pakeitimas|pakeitimai|pakeitimų}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|nuo paskutinio apsilankymo}}",
"enhancedrc-history": "istorija",
"recentchanges": "Naujausi keitimai",
"recentchanges-legend": "Naujausių keitimų parinktys",
"recentchanges-summary": "Šiame puslapyje yra patys naujausi pakeitimai šiame projekte.",
+ "recentchanges-noresult": "Per nurodytą laiką atliktų keitimų, atitinkančių nurodytas sąlygas, nėra.",
"recentchanges-feed-description": "Sekite pačius naujausius projekto keitimus šiame šaltinyje.",
"recentchanges-label-newpage": "Šiuo keitimu sukurtas naujas puslapis",
"recentchanges-label-minor": "Tai smulkus pakeitimas",
"recentchanges-label-bot": "Šį keitimą atliko automatinė programa",
"recentchanges-label-unpatrolled": "Šis keitimas dar nebuvo patikrintas",
"recentchanges-label-plusminus": "Šiuo baitų skaičiumi pakeista puslapio apimtis",
- "recentchanges-legend-newpage": "$1 - naujas puslapis",
- "rcnotefrom": "Žemiau yra pakeitimai pradedant <strong>$2</strong> (rodoma iki <strong>$1</strong> pakeitimų).",
+ "recentchanges-legend-heading": "'''Paaiškinimai:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (taip pat žiūrėkite [[Special:NewPages|naujausių straipsnių sąrašą]])",
+ "rcnotefrom": "Žemiau yra {{PLURAL:$5|pakeitimas|pakeitimai}} pradedant <strong>$3, $4</strong> (rodoma iki <strong>$1</strong> pakeitimų).",
"rclistfrom": "Rodyti naujus pakeitimus pradedant $3 $2",
"rcshowhideminor": "$1 smulkius keitimus",
"rcshowhideminor-show": "Rodyti",
@@ -1118,8 +1191,8 @@
"recentchangeslinked-summary": "Tai paskutinių keitimų, atliktų puslapiuose, į kuriuos yra nuoroda iš nurodyto puslapio (arba į nurodytos kategorijos narius), sąrašas.\nPuslapiai iš jūsų [[Special:Watchlist|stebimųjų sąrašo]] yra '''paryškinti'''.",
"recentchangeslinked-page": "Puslapio pavadinimas:",
"recentchangeslinked-to": "Rodyti su duotuoju puslapiu susijusių puslapių pakeitimus",
- "upload": "Įkelti failą",
- "uploadbtn": "Įkelti failą",
+ "upload": "Įkelti rinkmeną",
+ "uploadbtn": "Įkelti rinkmeną",
"reuploaddesc": "Atšaukti įkėlimą ir grįžti į įkėlimo formą.",
"upload-tryagain": "Siųsti pakeistą failo aprašymą",
"uploadnologin": "Neprisijungęs",
@@ -1129,14 +1202,14 @@
"uploaderror": "Įkėlimo klaida",
"upload-recreate-warning": "'''Dėmėsio: Failas šiuo pavadinimu buvo ištrintas arba pervadintas.'''\n\nJūsų patogumui pateiktas įrašas apie šio puslapio trynimą ar pervadinimą:",
"uploadtext": "Kad įkeltumėte failą, naudokitės žemiau pateikta forma.\nNorėdami peržiūrėti ar ieškoti anksčiau įkeltų paveikslėlių, eikite į [[Special:FileList|įkeltų failų sąrašą]], įkėlimai yra registruojami [[Special:Log/upload|įkėlimų sąraše]], trynimai — [[Special:Log/delete|trynimų sąraše]].\n\nNorėdami panaudoti įkeltą failą puslapyje, naudokite tokias nuorodas:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Failas.jpg]]</nowiki></code>''' norėdami naudoti pilną failo versiją\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Failas.png|200px|thumb|left|alternatyvusis tekstas]]</nowiki></code>''' norėdami naudoti 200 pikselių pločio paveikslėlį rėmelyje puslapio kairėje; „alternatyvus tekstas“ bus naudojamas paveikslėlio aprašymui.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Failas.ogg]]</nowiki></code>''' tiesioginei nuorodai į failą.",
- "upload-permitted": "Leidžiami failų tipai: $1.",
- "upload-preferred": "Pageidautini failų tipai: $1.",
- "upload-prohibited": "Uždrausti failų tipai: $1.",
+ "upload-permitted": "{{PLURAL:$2|Leidžiamas rinkmenos tipas|Leidžiami rinkmenų tipai}}: $1.",
+ "upload-preferred": "Pageidautini failai {{PLURAL:$2|type|types}}: $1.",
+ "upload-prohibited": "Uždrausti failai {{PLURAL:$2|type|types}}: $1.",
"uploadlogpage": "Įkėlimų sąrašas",
"uploadlogpagetext": "Žemiau pateikiamas paskutinių failų įkėlimų sąrašas.\nTaip pat galite peržvelgti [[Special:NewFiles|naujausių failų galeriją]].",
"filename": "Failo vardas",
"filedesc": "Aprašymas",
- "fileuploadsummary": "Komentaras:",
+ "fileuploadsummary": "Aprašymas:",
"filereuploadsummary": "Failo pakeitimai:",
"filestatus": "Autorystės teisės:",
"filesource": "Šaltinis:",
@@ -1167,34 +1240,36 @@
"largefileserver": "Šis failas yra didesnis nei serveris yra sukonfigūruotas leisti.",
"emptyfile": "Panašu, kad failas, kurį įkėlėte yra tuščias. Tai gali būti dėl klaidos failo pavadinime. Pasitikrinkite ar tikrai norite įkelti šitą failą.",
"windows-nonascii-filename": "Ši viki neleidžia naudoti failų vardų su specialiais simboliais.",
- "fileexists": "Failas tuo pačiu vardu jau egzistuoja, prašome pažiūrėti <strong>[[:$1]]</strong>, jei nesate tikras, ar norite perrašyti šį failą.\n[[$1|thumb]]",
+ "fileexists": "Rinkmena tokiu pačiu pavadinimu jau esti, prašome pažiūrėti <strong>[[:$1]]</strong>, jei nesate tikras, ar norite perrašyti šią rinkmeną.\n[[$1|thumb]]",
"filepageexists": "Šio failo aprašymo puslapis jau buvo sukurtas <strong>[[:$1]]</strong>, bet šiuo metu nėra jokio failo šiuo pavadinimu.\nJūsų įvestas komentaras neatsiras aprašymo puslapyje.\nJei norite, kad jūsų komentaras ten atsirastų, jums reikia jį pakeisti pačiam.\n[[$1|thumb]]",
- "fileexists-extension": "Failas su panašiu pavadinimu jau yra: [[$2|thumb]]\n* Įkeliamo failo pavadinimas: <strong>[[:$1]]</strong>\n* Jau esančio failo pavadinimas: <strong>[[:$2]]</strong>\nPrašome pasirinkti kitą vardą.",
- "fileexists-thumbnail-yes": "Failas turbūt yra sumažinto dydžio failas ''(miniatiūra)''. [[$1|thumb]]\nPrašome peržiūrėti failą <strong>[[:$1]]</strong>.\nJeigu tai yra toks pats pradinio dydžio paveikslėlis, tai įkelti papildomos miniatūros nereikia.",
+ "fileexists-extension": "Rinkmena panašiu pavadinimu jau yra: [[$2|thumb]]\n* Įkeliamos rinkmenos pavadinimas: <strong>[[:$1]]</strong>\n* Jau esančios rinkmenos pavadinimas: <strong>[[:$2]]</strong>\nPrašome pasirinkti kitą vardą.",
+ "fileexists-thumbnail-yes": "Rinkmena turbūt yra sumažinto dydžio ''(miniatiūra)''. [[$1|thumb]]\nPrašome peržiūrėti rinkmeną <strong>[[:$1]]</strong>.\nJeigu tai yra toks pats pradinio dydžio paveikslėlis, tai įkelti papildomos miniatūros nereikia.",
"file-thumbnail-no": "Failo pavadinimas prasideda <strong>$1</strong>.\nAtrodo, kad yra sumažinto dydžio paveikslėlis ''(miniatiūra)''.\nJei jūs turite šį paveisklėlį pilna raiška, įkelkite šitą, priešingu atveju prašome pakeisti failo pavadinimą.",
"fileexists-forbidden": "Failas tokiu pačiu vardu jau egzistuoja ir negali būti perrašytas;\nprašome eiti atgal ir įkelti šį failą kitu vardu. [[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "Failas tokiu vardu jau egzistuoja bendrojoje failų saugykloje;\nJei visvien norite įkelti savo failą, prašome eiti atgal ir įkelti šį failą kitu vardu. [[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "Šis failas yra {{PLURAL:$1|šio failo|šių failų}} dublikatas:",
"file-deleted-duplicate": "Failas, identiškas šiam failui ([[:$1]]), seniau buvo ištrintas. Prieš įkeldami jį vėl patikrinkite šio failo ištrynimo istoriją.",
+ "file-deleted-duplicate-notitle": "Rinkmena, visiškai atitinkanti šią, anksčiau buvo ištrinta, o jos pavadinimas uždraustas. Jums reiktų paprašyti kieno nors, turinčio galimybę peržiūrėti uždraustą rinkmeną, kad jis išaiškintų padėtį, prieš bandant vėl kelti rinkmeną.",
"uploadwarning": "Dėmesio",
"uploadwarning-text": "Prašome pakeisti failo aprašymą ir bandykite dar kartą.",
- "savefile": "Išsaugoti failą",
+ "savefile": "Išsaugoti rinkmeną",
"uploaddisabled": "Įkėlimai uždrausti",
"copyuploaddisabled": "Įkėlimas pagal URL išjungtas.",
"uploaddisabledtext": "Failų įkėlimai yra uždrausti.",
"php-uploaddisabledtext": "Failų įkėlimai uždrausti PHP nustatymuose.\nPatikrinkite ''file_uploads'' nustatą.",
"uploadscripted": "Šis failas turi HTML arba programinį kodą, kuris gali būti klaidingai suprastas interneto naršyklės.",
"uploadscriptednamespace": "Šis SVG failas turi neteisėtą vietą vardui '$1'",
+ "uploadinvalidxml": "XML įkeltoje rinkmenoje negali būti išnagrinėtas.",
"uploadvirus": "Šiame faile yra virusas! Smulkiau: $1",
- "uploadjava": "Failas yra ZIP failas, kuriame yra Java .class failas.\nĮkelti Java failus neleidžiama, nes jie gali padėti apeiti saugumo apribojimus.",
- "upload-source": "Failo šaltinis",
- "sourcefilename": "Įkeliamas failas:",
+ "uploadjava": "Ši rinkmena tai ZIP rinkmena, kurioje yra Java .class rinkmena.\nĮkelti Java rinkmenų neleidžiama, nes jos gali padėti apeiti saugumo apribojimus.",
+ "upload-source": "Pradinė rinkmena",
+ "sourcefilename": "Įkeliama rinkmena:",
"sourceurl": "Šaltinio adresas:",
"destfilename": "Norimas failo vardas:",
- "upload-maxfilesize": "Didžiausias failo dydis: $1",
- "upload-description": "Failo aprašymas",
+ "upload-maxfilesize": "Didžiausias rinkmenos dydis: $1",
+ "upload-description": "Rinkmenos aprašymas",
"upload-options": "Įkėlimo nustatymai",
- "watchthisupload": "Stebėti šį failą",
+ "watchthisupload": "Stebėti šią rinkmeną",
"filewasdeleted": "Failas šiuo vardu anksčiau buvo įkeltas, o paskui ištrintas. Jums reikėtų patikrinti $1 prieš bandant įkelti jį vėl.",
"filename-bad-prefix": "Jūsų įkeliamas failas prasideda su '''„$1“''', bet tai yra neapibūdinantis pavadinimas, dažniausiai priskirtas skaitmeninių kamerų. Prašome suteikti labiau apibūdinantį pavadinimą savo failui.",
"upload-success-subj": "Įkelta sėkmingai",
@@ -1275,14 +1350,16 @@
"upload-curl-error28": "Per ilgai įkeliama",
"upload-curl-error28-text": "Atsakant svetainė užtrunka per ilgai. Patikrinkite, ar svetainė veikia, palaukite truputį ir vėl pamėginkite. Galbūt jums reikėtų pamėginti ne tokiu apkrautu metu.",
"license": "Licencija:",
- "license-header": "Licensija",
+ "license-header": "Licencija",
"nolicense": "Nepasirinkta",
+ "licenses-edit": "Keisti licencijų parinktis",
"license-nopreview": "(Peržiūra negalima)",
- "upload_source_url": " (tikras, viešai prieinamas URL)",
- "upload_source_file": " (failas jūsų kompiuteryje)",
- "listfiles-summary": "Šiame specialiame puslapyje rodomi visi įkelti failai.\nKai sąrašas susiaurinamas pagal naudotoją, rodomi tik tie failai, kurių naujausią versiją jis yra įkėlęs.",
+ "upload_source_url": "(pasirinkta rinkmena iš tikro, viešai pasiekiamo URL adreso)",
+ "upload_source_file": "(pasirinkta rinkmena jūsų kompiuteryje)",
+ "listfiles-delete": "trinti",
+ "listfiles-summary": "Šiame specialiame puslapyje rodomos visos įkeltos rinkmenos.",
"listfiles_search_for": "Ieškoti failo pavadinimo:",
- "imgfile": "failas",
+ "imgfile": "rinkmena",
"listfiles": "Failų sąrašas",
"listfiles_thumb": "Miniatiūra",
"listfiles_date": "Data",
@@ -1291,12 +1368,13 @@
"listfiles_size": "Dydis",
"listfiles_description": "Aprašymas",
"listfiles_count": "Versijos",
+ "listfiles-show-all": "Įtraukti senesnes paveikslėlių versijas",
"listfiles-latestversion": "Dabartinė versija",
"listfiles-latestversion-yes": "Taip",
"listfiles-latestversion-no": "Ne",
- "file-anchor-link": "Failas",
- "filehist": "Paveikslėlio istorija",
- "filehist-help": "Paspauskite ant datos/laiko, kad pamatytumėte failą tokį, koks jis buvo tuo metu.",
+ "file-anchor-link": "Rinkmena",
+ "filehist": "Rinkmenos istorija",
+ "filehist-help": "Paspauskite ant datos/laiko, kad pamatytumėte rinkmeną tokią, kokia ji buvo tuo metu.",
"filehist-deleteall": "trinti visus",
"filehist-deleteone": "trinti",
"filehist-revert": "grąžinti",
@@ -1307,25 +1385,27 @@
"filehist-nothumb": "Nėra miniatiūros",
"filehist-user": "Naudotojas",
"filehist-dimensions": "Matmenys",
- "filehist-filesize": "Failo dydis",
- "filehist-comment": "Komentaras",
- "imagelinks": "Failų panaudojimas",
- "linkstoimage": "{{PLURAL:$1|Šis puslapis|Šie puslapiai}} nurodo į šį failą:",
+ "filehist-filesize": "Rinkmenos dydis",
+ "filehist-comment": "Paaiškinimas",
+ "imagelinks": "Rinkmenos naudojimas",
+ "linkstoimage": "{{PLURAL:$1|Šis puslapis|Šie puslapiai}} nurodo į šią rinkmeną:",
"linkstoimage-more": "Daugiau nei $1 {{PLURAL:$1|puslapis|puslapiai|puslapių}} rodo į šį failą.\nŠis sąrašas rodo tik {{PLURAL:$1|puslapio|pirmų $1 puslapių}} nuorodas į šį failą.\nYra pasiekiamas ir [[Special:WhatLinksHere/$2|visas sąrašas]].",
- "nolinkstoimage": "Į failą nenurodo joks puslapis.",
+ "nolinkstoimage": "Į rinkmeną nenurodo joks puslapis.",
"morelinkstoimage": "Žiūrėti [[Special:WhatLinksHere/$1|daugiau nuorodų]] į šį failą.",
"linkstoimage-redirect": "$1 (failo peradresavimas) $2",
"duplicatesoffile": "Šis failas turi {{PLURAL:$1|$1 dublikatą|$1 dublikatus|$1 dublikatų}} ([[Special:FileDuplicateSearch/$2|daugiau informacijos]]):",
- "sharedupload": "Šis failas yra iš $1 ir gali būti naudojamas kituose projektuose.",
+ "sharedupload": "Ši rinkmena yra iš $1 ir gali būti naudojama kitose wiki svetainėse.",
"sharedupload-desc-there": "Šis failas yra iš $1 ir gali būti naudojamas kituose projektuose.\nNorėdami sužinoti daugiau, žiūrėkite [$2 failo aprašymą].",
- "sharedupload-desc-here": "Šis failas yra iš $1 ir gali būti naudojamas kituose projektuose.\nInformacija iš [$2 failo aprašymo puslapio] yra pateikiama žemiau.",
+ "sharedupload-desc-here": "Ši rinkmena yra iš $1 ir gali būti naudojama kituose projektuose.\nInformacija iš [$2 failo aprašymo puslapio] yra pateikiama žemiau.",
+ "sharedupload-desc-edit": "Ši rinkmena yra iš $1 ir gali būti naudojama kituose projektuose.\nGal norite pakeisti aprašymą jos [$2 aprašymo puslapyje]?",
+ "sharedupload-desc-create": "Ši rinkmena yra iš $1 ir gali būti naudojama kituose projektuose.\nGal norite pakeisti aprašymą jos [$2 aprašymo puslapyje]?",
"filepage-nofile": "Joks failas su duotu pavadinimu neegzistuoja.",
"filepage-nofile-link": "Joks failas su duotu pavadinimu neegzistuoja, bet vis dar galite [$1 jį įkelti].",
- "uploadnewversion-linktext": "Įkelti naują failo versiją",
+ "uploadnewversion-linktext": "Įkelti naują šios rinkmenos atmainą",
"shared-repo-from": "iš $1",
"shared-repo": "bendrosios failų saugyklos",
"shared-repo-name-wikimediacommons": "Vikiteka",
- "upload-disallowed-here": "Jūs negalite perrašyti šio failo.",
+ "upload-disallowed-here": "Jūs negalite perrašyti šios rinkmenos.",
"filerevert": "Sugrąžinti $1",
"filerevert-legend": "Failo sugrąžinimas",
"filerevert-intro": "<span class=\"plainlinks\">Jūs grąžinate '''[[Media:$1|$1]]''' į versiją $4 ($2, $3).</span>",
@@ -1335,7 +1415,7 @@
"filerevert-success": "<span class=\"plainlinks\">'''[[Media:$1|$1]]''' buvo sugrąžintas į versiją $4 ($2, $3).</span>",
"filerevert-badversion": "Nėra jokių ankstesnių vietinių šio failo versijų su pateiktu laiku.",
"filedelete": "Trinti $1",
- "filedelete-legend": "Trinti failą",
+ "filedelete-legend": "Trinti rinkmeną",
"filedelete-intro": "Jūs ketinate ištrinti failą '''[[Media:$1|$1]]''' su visa istorija.",
"filedelete-intro-old": "<span class=\"plainlinks\">Jūs trinate '''[[Media:$1|$1]]''' [$4 $3, $2] versiją.</span>",
"filedelete-comment": "Priežastis:",
@@ -1356,17 +1436,24 @@
"download": "parsisiųsti",
"unwatchedpages": "Nestebimi puslapiai",
"listredirects": "Peradresavimų sąrašas",
+ "listduplicatedfiles": "Pasikartojančių rinkmenų sąrašas",
+ "listduplicatedfiles-summary": "Tai rinkmenų sąrašas, kuriame pati vėliausia rinkmenos versija laikoma kai kurių kitų rinkmenų dublikatu. Vertinamos tik vietinės rinkmenos.",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]] turi [[$3|{{PLURAL:$2|dublikatą|$2 dublikatus|$2 dublikatų}}]].",
"unusedtemplates": "Nenaudojami šablonai",
"unusedtemplatestext": "Šis puslapis rodo sąrašą puslapių, esančių {{ns:template}} vardų srityje, kurie nėra įterpti į jokį kitą puslapį. Nepamirškite patikrinti kitų nuorodų prieš juos ištrinant.",
"unusedtemplateswlh": "kitos nuorodos",
"randompage": "Atsitiktinis puslapis",
"randompage-nopages": "{{PLURAL:$2|Šioje vardų srityje|Šiose vardų srityse}} nėra jokių puslapių: $1.",
+ "randomincategory": "Atsitiktinis puslapis kategorijoje",
+ "randomincategory-invalidcategory": "Kategorijos pavadinimu „$1“ nėra.",
+ "randomincategory-nopages": "[[:Category:$1|$1]] kategorijoje nėra puslapių.",
+ "randomincategory-category": "Kategorija:",
+ "randomincategory-legend": "Atsitiktinis puslapis kategorijoje",
"randomredirect": "Atsitiktinis peradresavimas",
"randomredirect-nopages": "Vardų srityje „$1“ nėra jokių peradresavimų.",
"statistics": "Statistika",
"statistics-header-pages": "Puslapių statistika",
"statistics-header-edits": "Redagavimų statistika",
- "statistics-header-views": "Peržiūrų statistika",
"statistics-header-users": "Naudotojų statistika",
"statistics-header-hooks": "Kita statistika",
"statistics-articles": "Turinio puslapiai",
@@ -1375,13 +1462,9 @@
"statistics-files": "Įkelti failai",
"statistics-edits": "Puslapių redagavimų skaičius nuo {{SITENAME}} sukūrimo",
"statistics-edits-average": "Vidutinis puslapio keitimų skaičius",
- "statistics-views-total": "Iš viso peržiūrų",
- "statistics-views-total-desc": "Neegzistuojančių ir specialiųjų puslapių parodymai neįtraukti",
- "statistics-views-peredit": "Peržiūrų skaičius puslapio versijai",
"statistics-users": "Registruotų [[Special:ListUsers|naudotojų]]",
"statistics-users-active": "Aktyvių naudotojų",
"statistics-users-active-desc": "Naudotojai, kurie per {{PLURAL:$1|paskutinę dieną|paskutines $1 dienų}} padarė keitimų",
- "statistics-mostpopular": "Daugiausiai rodyti puslapiai",
"pageswithprop": "Puslapiai su puslapio atributais",
"pageswithprop-legend": "Puslapiai su puslapio atributais",
"pageswithprop-text": "Šiame puslapyje pateikiami puslapiai, kurie ypač naudoja puslapio atributus.",
@@ -1389,7 +1472,7 @@
"pageswithprop-submit": "Eiti",
"doubleredirects": "Dvigubi peradresavimai",
"doubleredirectstext": "Šiame puslapyje yra puslapių, kurie nukreipia į kitus peradresavimo puslapius, sąrašas.\nKiekvienoje eilutėje yra nuorodos į pirmąjį ir antrąjį peradresavimą, taip pat antrojo peradresavimo paskirtis, kuris paprastai yra „tikrasis“ paskirties puslapis, į kurį pirmasis peradresavimas ir turėtų rodyti.\n<del>Išbraukti</del> įrašai yra išspręsti.",
- "double-redirect-fixed-move": "[[$1]] buvo perkeltas, dabar tai peradresavimas į [[$2]]",
+ "double-redirect-fixed-move": "[[$1]] buvo pervardytas; dabar tai peradresavimas į [[$2]].",
"double-redirect-fixed-maintenance": "Tvarkomas dvigubas peradresavimas iš [[$1]] į [[$2]].",
"double-redirect-fixer": "Peradresavimų tvarkyklė",
"brokenredirects": "Peradresavimai į niekur",
@@ -1406,6 +1489,7 @@
"ninterwikis": "$1 {{PLURAL:$1|interviki nuoroda|interviki nuorodos}}",
"nlinks": "$1 {{PLURAL:$1|nuoroda|nuorodos|nuorodų}}",
"nmembers": "$1 {{PLURAL:$1|narys|nariai|narių}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|narys|nariai|narių}}",
"nrevisions": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}",
"nviews": "$1 {{PLURAL:$1|parodymas|parodymai|parodymų}}",
"nimagelinks": "Naudojama $1 {{PLURAL:$1|puslapyje|puslapiuose|puslapių}}",
@@ -1419,13 +1503,13 @@
"uncategorizedtemplates": "Šablonai, nepriskirti jokiai kategorijai",
"unusedcategories": "Nenaudojamos kategorijos",
"unusedimages": "Nenaudojami failai",
- "popularpages": "Populiarūs puslapiai",
"wantedcategories": "Geidžiamiausios kategorijos",
"wantedpages": "Geidžiamiausi puslapiai",
"wantedpages-badtitle": "Neleistinas pavadinimas rezultatų rinkinyje: $1",
"wantedfiles": "Trokštami failai",
"wantedfiletext-cat": "Sekantys failai yra naudojami, bet neegzistuoja. Čia failai iš išorinių saugyklų gali būti išvardinti, nors jie jose ir egzistuoja. Failai netenkinantys šių sąlygų gali būti <del>perbraukti</del>. Papildomai peržiūrėkite [[:$1|puslapius]], kuriuose yra naudojami čia išvardinti neegzistuojantys failai.",
"wantedfiletext-nocat": "Sekantys failai yra naudojami, bet neegzistuoja. Čia failai iš išorinių saugyklų gali būti išvardinti, nors jie jose ir egzistuoja. Failai netenkinantys šių sąlygų gali būti <del>perbraukti</del>.",
+ "wantedfiletext-nocat-noforeign": "Šios rinkmenos yra naudojamos, tačiau nesti.",
"wantedtemplates": "Trokštami šablonai",
"mostlinked": "Daugiausiai nurodomi puslapiai",
"mostlinkedcategories": "Daugiausiai nurodomos kategorijos",
@@ -1436,26 +1520,32 @@
"mostrevisions": "Puslapiai su daugiausiai keitimų",
"prefixindex": "Visi puslapiai pagal pavadinimo pradžią",
"prefixindex-namespace": "Visi puslapiai prasidedantys ($1 vardų sritis)",
+ "prefixindex-strip": "Paslėpti priešdėlį gavinių sąraše",
"shortpages": "Trumpiausi puslapiai",
"longpages": "Ilgiausi puslapiai",
"deadendpages": "Puslapiai-aklavietės",
"deadendpagestext": "Šie puslapiai neturi nuorodų į kitus puslapius šiame projekte.",
"protectedpages": "Užrakinti puslapiai",
"protectedpages-indef": "Tik neapibrėžtos apsaugos",
+ "protectedpages-summary": "Šiame puslapyje pateikti puslapiai, kurie šiuo metu užrakinti. Pavadinimų, kurie uždrausti nuo kūrimo, sąrašą žiūrėkite čia: [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
"protectedpages-cascade": "Tik pakopinė apsauga",
"protectedpages-noredirect": "Slėpti peradresavimus",
"protectedpagesempty": "Šiuo metu nėra apsaugotas joks failas su šiais parametrais.",
"protectedpages-timestamp": "Laiko žyma",
"protectedpages-page": "Puslapis",
"protectedpages-expiry": "Galioja iki",
+ "protectedpages-performer": "Užrakinantis naudotojas",
+ "protectedpages-params": "Užrakinimo nuostatos",
"protectedpages-reason": "Priežastis",
"protectedpages-unknown-timestamp": "Nežinomas",
"protectedpages-unknown-performer": "Nežinomas vartotojas",
"protectedtitles": "Apsaugoti pavadinimai",
+ "protectedtitles-summary": "Tai pavadinimų, kuriais uždrausta kurti puslapius, sąrašas. Šiuo metu užrakintų puslapių sąrašą žiūrėkite čia: [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
"protectedtitlesempty": "Šiuo metu nėra jokių pavadinimų apsaugotų šiais parametrais.",
"listusers": "Naudotojų sąrašas",
"listusers-editsonly": "Rodyti tik keitimus atlikusius naudotojus",
"listusers-creationsort": "Rodyti pagal paskyros sukūrimo datą",
+ "listusers-desc": "Išdėstyti abėcėline tvarka",
"usereditcount": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}",
"usercreated": "{{GENDER:$3|Naudotojo|Naudotojos|Naudotojo}} $3 paskyra sukurta $1 $2",
"newpages": "Naujausi puslapiai",
@@ -1473,9 +1563,11 @@
"pager-older-n": "$1 {{PLURAL:$1|senesnis|senesni|senesnių}}",
"suppress": "Peržiūra",
"querypage-disabled": "Šiame specialiajame puslapyje yra išjungta dėl neefektyvumo.",
+ "apihelp": "API pagalba",
+ "apihelp-no-such-module": "Nerasta modulio $1.",
"booksources": "Knygų šaltiniai",
"booksources-search-legend": "Knygų šaltinių paieška",
- "booksources-go": "Rodyti",
+ "booksources-search": "Ieškoti",
"booksources-text": "Žemiau yra nuorodų sąrašas į kitas svetaines, kurios parduoda naujas ar naudotas knygas, bei galbūt turinčias daugiau informacijos apie knygas, kurių ieškote:",
"booksources-invalid-isbn": "Duotas ISBN atrodo neteisingas; patikrinkite, ar nepadarėte kopijavimo klaidų.",
"specialloguserlabel": "Naudotojas:",
@@ -1542,13 +1634,26 @@
"listgrouprights-removegroup-self": "Pašalinti {{PLURAL:$2|grupę|grupes}} iš savo paskyros: $1",
"listgrouprights-addgroup-self-all": "Priskirti visas grupes prie paskyros",
"listgrouprights-removegroup-self-all": "Pašalinti visas grupes iš savo paskyros",
+ "listgrouprights-namespaceprotection-header": "Vardų srities apribojimai",
+ "listgrouprights-namespaceprotection-namespace": "Vardų sritis",
+ "listgrouprights-namespaceprotection-restrictedto": "Teisė(s), leidžiančios naudotojui atlikti keitimus",
+ "trackingcategories": "Sekimo kategorijos",
+ "trackingcategories-summary": "Šiame puslapyje išdėstytos sekimo kategorijos, kurias savaime sudaro MediaWiki programinė įranga. Jų pavadinimus galima pakeisti pakeičiant sistemos pranešimus {{ns:8}} vardų srityje.",
+ "trackingcategories-msg": "Sekimo kategorija",
+ "trackingcategories-name": "Pranešimo pavadinimas",
+ "trackingcategories-desc": "Įtraukimo kategorijon sąlygos",
+ "noindex-category-desc": "Šis puslapis nėra indeksuojamas robotų, nes jame yra specialus įrašas <code><nowiki>__NOINDEX__</nowiki></code> ir yra vardų srityje, kuri ši vėliava leidžiama.",
+ "post-expand-template-inclusion-category-desc": "Puslapio dydis viršija <code>$wgMaxArticleSize</code>, kai išskleidžiami visi šablonai, todėl keletas šablonų liko neišskleista.",
+ "broken-file-category-desc": "Puslapyje yra neveikianti rinkmenos nuoroda (yra rinkmenos nuoroda, tačiau pačios rinkmenos nėra).",
+ "trackingcategories-nodesc": "Nėra aprašymo.",
+ "trackingcategories-disabled": "Kategorija išjungta",
"mailnologin": "Nėra adreso",
"mailnologintext": "Jums reikia būti [[Special:UserLogin|prisijungusiam]] ir turi būti įvestas teisingas el. pašto adresas jūsų [[Special:Preferences|nustatymuose]], kad siųstumėte el. laiškus kitiems nautotojams.",
"emailuser": "Rašyti laišką šiam naudotojui",
"emailuser-title-target": "Siųsti E-pašto žinutę {{GENDER:$1|user}}",
"emailuser-title-notarget": "El. pašto vartotojas",
"emailpage": "Siųsti el. laišką naudotojui",
- "emailpagetext": "Jūs gali pasinaudoti šia forma norėdami nusiųsti el. laišką šiam naudotojui.\nEl. pašto adresas, kurį įvedėte [[Special:Preferences|savo naudotojo nustatymuose]], bus rodomas kaip el. pašto siuntėjo adresas, tam, kad gavėjas galėtų jums iškart atsakyti.",
+ "emailpagetext": "Jūs galite pasinaudoti šiuo pavyzdžiu, norėdami nusiųsti elektroninį laišką šiam naudotojui.\nElektroninio pašto adresas, kurį įvedėte [[Special:Preferences|savo naudotojo nustatymuose]], bus rodomas kaip el. pašto siuntėjo adresas, tam, kad gavėjas galėtų jums iškart atsakyti.",
"defemailsubject": "{{SITENAME}} el. pašto iš vartotojo \" $1 \"",
"usermaildisabled": "Naudotojo elektroninis paštas išjungtas",
"usermaildisabledtext": "Jūs negalite siūlsti el. laiško kitiems šio wiki projekto naudotojams.",
@@ -1576,12 +1681,14 @@
"mywatchlist": "Stebimų sąrašas",
"watchlistfor2": "Naudotojo $1 $2",
"nowatchlist": "Neturite nei vieno stebimo puslapio.",
- "watchlistanontext": "Prašome $1, kad peržiūrėtumėte ar pakeistumėte elementus savo stebimųjų sąraše.",
+ "watchlistanontext": "Prašome prisijungti, kad peržiūrėtumėte ar pakeistumėte elementus savo stebimųjų sąraše.",
"watchnologin": "Neprisijungęs",
"addwatch": "Pridėti į stebimųjų sąrašą",
"addedwatchtext": "Puslapis „[[:$1]]“ pridėtas į [[Special:Watchlist|stebimųjų sąrašą]].\nBūsimi puslapio bei atitinkamo aptarimo puslapio pakeitimai bus rodomi stebimųjų puslapių sąraše,\ntaip pat bus '''paryškinti''' [[Special:RecentChanges|naujausių keitimų sąraše]], kad išsiskirtų iš kitų puslapių.",
+ "addedwatchtext-short": "Puslapis „$1“ pridėtas į jūsų stebimųjų sąrašą.",
"removewatch": "Pašalinti iš stebimųjų sąrašo",
"removedwatchtext": "Puslapis „[[:$1]]“ pašalintas iš jūsų [[Special:Watchlist|stebimųjų sąrašo]].",
+ "removedwatchtext-short": "Puslapis „$1“ pašalintas iš jūsų stebimųjų sąrašo.",
"watch": "Stebėti",
"watchthispage": "Stebėti šį puslapį",
"unwatch": "Nebestebėti",
@@ -1592,7 +1699,7 @@
"wlheader-enotif": "El. pašto pranešimai yra įjungti.",
"wlheader-showupdated": "Puslapiai pakeisti nuo tada, kai paskutinį kartą apsilankėte juose, yra pažymėti '''pastorintai'''",
"wlnote": "{{PLURAL:$1|Rodomas '''$1''' paskutinis pakeitimas, atliktas|Rodomi '''$1''' paskutiniai pakeitimai, atlikti|Rodoma '''$1''' paskutinių pakeitimų, atliktų}} per '''$2''' {{PLURAL:$2|paskutinę valandą|paskutines valandas|paskutinių valandų}}, nuo $3 $4.",
- "wlshowlast": "Rodyti paskutinių $1 valandų, $2 dienų ar $3 pakeitimus",
+ "wlshowlast": "Rodyti paskutinių $1 valandų, $2 dienų",
"watchlist-options": "Stebimųjų sąrašo parinktys",
"watching": "Įtraukiama į stebimųjų sąrašą...",
"unwatching": "Šalinama iš stebimųjų sąrašo...",
@@ -1634,19 +1741,20 @@
"deletecomment": "Priežastis:",
"deleteotherreason": "Kita/papildoma priežastis:",
"deletereasonotherlist": "Kita priežastis",
- "deletereason-dropdown": "*Dažnos trynimo priežastys\n** Autoriaus prašymas\n** Autorystės teisių pažeidimas\n** Vandalizmas",
+ "deletereason-dropdown": "* Dažnos trynimo priežastys\n** Brukalai\n** Vandalizmas\n** Autorystės teisių pažeidimas\n** Autoriaus prašymas\n** Neteisingas nukreipimas",
"delete-edit-reasonlist": "Keisti trynimo priežastis",
"delete-toobig": "Šis puslapis turi ilgą keitimų istoriją, daugiau nei $1 {{PLURAL:$1|revizija|revizijos|revizijų}}. Tokių puslapių trynimas yra apribotas, kad būtų išvengta atsitiktinio {{SITENAME}} žlugdymo.",
"delete-warning-toobig": "Šis puslapis turi ilgą keitimų istoriją, daugiau nei $1 {{PLURAL:$1|revizija|revizijos|revizijų}}. Trinant jis gali sutrikdyti {{SITENAME}} duomenų bazės operacijas; būkite atsargūs.",
+ "deleteprotected": "Jūs šio puslapio ištrinti negalite, nes jis apsaugotas.",
+ "deleting-backlinks-warning": "'''Dėmesio:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Kiti puslapiai]] nurodo ar įtraukia puslapį, kurį ruošiatės trinti.",
"rollback": "Atmesti keitimus",
- "rollback_short": "Atmesti",
"rollbacklink": "atmesti",
"rollbacklinkcount": "atmesti $1 {{PLURAL:$1|keitimą|keitimus}}",
"rollbacklinkcount-morethan": "atmesti daugiau nei $1 {{PLURAL:$1|keitimą|keitimų}}",
"rollbackfailed": "Atmetimas nepavyko",
"cantrollback": "Negalima atmesti redagavimo; paskutinis keitęs naudotojas yra šio puslapio autorius.",
"alreadyrolled": "Nepavyko atmesti paskutinio [[User:$2|$2]] ([[User talk:$2|Aptarimas]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) daryto puslapio [[:$1]] keitimo;\nkažkas jau pakeitė puslapį arba suspėjo pirmas atmesti keitimą.\n\nPaskutimas keitimas darytas naudotojo [[User:$3|$3]] ([[User talk:$3|Aptarimas]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
- "editcomment": "Redagavimo komentaras: „''$1''“.",
+ "editcomment": "Pateiktas toks keitimo paaiškinimas: „''$1''“.",
"revertpage": "Atmestas [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarimas]]) pakeitimas; sugrąžinta [[User:$1|$1]] versija",
"revertpage-nouser": "Atversti pakeitimai paslėpto vartotojo, grąžino prieš tai buvusią versiją {{GENDER:$1|[[User:$1|$1]]}}",
"rollback-success": "Atmesti $1 pakeitimai;\ngrąžinta prieš tai buvusi $2 versija.",
@@ -1689,6 +1797,7 @@
"protect-othertime": "Kitas laikas:",
"protect-othertime-op": "kitas laikas",
"protect-existing-expiry": "Esamas galiojimo laikas: $3, $2",
+ "protect-existing-expiry-infinity": "Esamas galiojimo laikas: begalinis",
"protect-otherreason": "Kita/papildoma priežastis:",
"protect-otherreason-op": "Kita priežastis",
"protect-dropdown": "*Įprastos užrakinimo priežastys\n** Intensyvus vandalizmas\n** Nuolatinis nepageidautinų nuorodų dėliojimas\n** Beprasmis redagavimo karas\n** Didelės svarbos puslapis\n** Pakartotinis ištrinto puslapio atkūrinėjimas",
@@ -1741,7 +1850,7 @@
"undelete-cleanup-error": "Klaida trinant nenaudotą archyvo failą „$1“.",
"undelete-missing-filearchive": "Nepavyksta atkurti failo archyvo ID $1, nes jo nėra duomenų bazėje. Jis gali būti jau atkurtas.",
"undelete-error": "Klaida panaikinant puslapį",
- "undelete-error-short": "Klaida atkuriant failą: $1",
+ "undelete-error-short": "Klaida atkuriant rinkmeną: $1",
"undelete-error-long": "Įvyko klaidų atkuriant failą:\n\n$1",
"undelete-show-file-confirm": "Ar tikrai norite peržiūrėti ištrintą failo „<nowiki>$1</nowiki>“ $2 $3 versiją?",
"undelete-show-file-submit": "Taip",
@@ -1751,10 +1860,11 @@
"namespace_association": "Susijusi vardų sritis",
"tooltip-namespace_association": "Įjunkite šią parinktį, kad taip pat įtrauktumėte aptarimų arba temos sritį, susijusią su pasirinkta sritimi",
"blanknamespace": "(Pagrindinė)",
- "contributions": "{{GENDER:$1|Naudotojo}} įndėlis",
+ "contributions": "{{GENDER:$1|Naudotojo}} indėlis",
"contributions-title": "{{GENDER:$1|Naudotojo|Naudotojos}} $1 indėlis",
"mycontris": "Įnašai",
"contribsub2": "Dėl {{GENDER:$3|$1}} ($2)",
+ "contributions-userdoesnotexist": "Naudotojo paskyra „$1“ neužregistruota.",
"nocontribs": "Jokie keitimai neatitiko šių kriterijų.",
"uctop": "(dabartinis)",
"month": "Nuo mėnesio (ir anksčiau):",
@@ -1763,8 +1873,9 @@
"sp-contributions-newbies-sub": "Neseniai prisiregistravusieji",
"sp-contributions-newbies-title": "Naujai užsiregistravusių naudotojų indėlis",
"sp-contributions-blocklog": "Blokavimų sąrašas",
+ "sp-contributions-suppresslog": "ištrintas naudotojo indėlis",
"sp-contributions-deleted": "ištrintas naudotojo indėlis",
- "sp-contributions-uploads": "nuotraukos",
+ "sp-contributions-uploads": "įkėlimai",
"sp-contributions-logs": "Specialiųjų veiksmų sąrašas",
"sp-contributions-talk": "Aptarimas",
"sp-contributions-userrights": "naudotojų teisių valdymas",
@@ -1773,6 +1884,7 @@
"sp-contributions-search": "Ieškoti įnašo",
"sp-contributions-username": "IP adresas arba naudotojo vardas:",
"sp-contributions-toponly": "Rodyti tik paskutinius keitimus",
+ "sp-contributions-newonly": "Rodyti tik tuos keitimus, kuriais sukurti nauji straipsniai",
"sp-contributions-submit": "Ieškoti",
"whatlinkshere": "Susiję puslapiai",
"whatlinkshere-title": "Puslapiai, kurie nurodo į „$1“",
@@ -1782,7 +1894,7 @@
"nolinkshere-ns": "Nurodytoje vardų srityje nei vienas puslapis nenurodo į '''[[:$1]]'''.",
"isredirect": "nukreipiamasis puslapis",
"istemplate": "įterpimas",
- "isimage": "failo nuoroda",
+ "isimage": "rinkmenos nuoroda",
"whatlinkshere-prev": "$1 {{PLURAL:$1|ankstesnis|ankstesni|ankstesnių}}",
"whatlinkshere-next": "$1 {{PLURAL:$1|kitas|kiti|kitų}}",
"whatlinkshere-links": "← nuorodos",
@@ -1818,17 +1930,19 @@
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] buvo užblokuotas.<br />\nAplankykite [[Special:BlockList|IP blokavimų istoriją]] norėdami jį peržiūrėti.",
"ipb-blockingself": "Jūs ruošiatės užblokuoti save! Ar tikrai norite tai padaryti?",
"ipb-confirmhideuser": "Jūs ruošiatės užblokuoti naudotoją, pasirinkę „slėpti naudotoją“ nustatymą. Tai paslėps naudotojo vardą visuose sąrašuose ir žurnalo įrašuose. Ar tikrai norite tai padaryti?",
+ "ipb-confirmaction": "Jei esate tikras, pažymėkite \"{{int:ipb-confirm}}\" laukelį apačioje.",
"ipb-edit-dropdown": "Redaguoti blokavimų priežastis",
"ipb-unblock-addr": "Atblokuoti $1",
"ipb-unblock": "Atblokuoti naudotojo vardą arba IP adresą",
"ipb-blocklist": "Rodyti egzistuojančius blokavimus",
- "ipb-blocklist-contribs": "$1 indėlis",
+ "ipb-blocklist-contribs": "{{GENDER:$1|$1}} indėlis",
"unblockip": "Atblokuoti naudotoją",
"unblockiptext": "Naudokite šią formą, kad atkurtumėte redagavimo galimybę\nankščiau užblokuotam IP adresui ar naudotojui.",
"ipusubmit": "Atblokuoti šį adresą",
"unblocked": "[[User:$1|$1]] buvo atblokuotas",
"unblocked-range": "$1 buvo atblokuotas",
"unblocked-id": "Blokavimas $1 buvo pašalintas",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] buvo atblokuotas.",
"blocklist": "Blokuoti naudotojai",
"ipblocklist": "Blokuoti naudotojai",
"ipblocklist-legend": "Rasti užblokuotą naudotoją",
@@ -1863,7 +1977,7 @@
"blocklogpage": "Blokavimų sąrašas",
"blocklog-showlog": "Šis naudotojas buvo užblokuotas.\nPateikiamas paskutinis blokavimo istorijos įrašas.",
"blocklog-showsuppresslog": "Šis naudotojas buvo užblokuotas ir paslėptas anksčiau.\nŽemiau yra pateiktas slėpimų žurnalas:",
- "blocklogentry": "blokavo [[$1]], blokavimo laikas - $2 $3",
+ "blocklogentry": "užblokavo [[$1]], blokavimo laikas - $2 $3",
"reblock-logentry": "pakeisti [[$1]] blokavimo nustatymai, naujas blokavimo laikas – $2 $3",
"blocklogtext": "Čia yra naudotojų blokavimo ir atblokavimo sąrašas.\nAutomatiškai blokuoti IP adresai neišvardinti.\nJei norite pamatyti dabar blokuojamus adresus, žiūrėkite [[Special:BlockList|blokavimų sąrašą]].",
"unblocklogentry": "atblokavo $1",
@@ -1877,7 +1991,7 @@
"range_block_disabled": "Administratoriams neleidžiama blokuoti IP adresų sričių.",
"ipb_expiry_invalid": "Galiojimo laikas neleistinas.",
"ipb_expiry_temp": "Paslėptų naudotojų vardų blokavimas turi būti neribotas.",
- "ipb_hide_invalid": "Negalima paslėpti šios paskyros; ji gali turėti per daug keitimų.",
+ "ipb_hide_invalid": "Negalima paslėpti šios paskyros; ji gali turėti daugiau nei {{PLURAL:$1|vieną keitimą|$1 keitimus|$1 keitimų}}.",
"ipb_already_blocked": "„$1“ jau užblokuotas",
"ipb-needreblock": "$1 jau yra užblokuotas. Ar norite pakeisti nustatymus?",
"ipb-otherblocks-header": "{{PLURAL:$1|Kitas blokavimas|Kiti blokavimai}}",
@@ -1916,11 +2030,14 @@
"movepagetalktext": "Susietas aptarimo puslapis bus automatiškai perkeltas kartu su juo, '''išskyrus:''':\n*Puslapis nauju pavadinimu jau turi netuščią aptarimo puslapį, arba\n*Paliksite žemiau esančia varnelę nepažymėtą.\n\nŠiais atvejais jūs savo nuožiūra turite perkelti arba apjungti aptarimo puslapį.",
"movearticle": "Pervardinti puslapį:",
"moveuserpage-warning": "'''Dėmesio:''' Jūs ruošiatės perkelti naudotojo puslapį. Atkreipkite dėmesį, kad bus perkeltas tik puslapis, naudotojas ''nebus'' pervadintas.",
+ "movecategorypage-warning": "<strong>Dėmesio:</strong> Jūs ketinate pervadinti kategorijos puslapį. Atminkite, kad tik pats puslapis bus pervadintas, tačiau kategorijai priskirti puslapiai <em>nebus</em> perkelti naujon kategorijon.",
"movenologintext": "Norėdami pervadinti puslapį, turite būti užsiregistravęs naudotojas ir būti [[Special:UserLogin|prisijungęs]].",
"movenotallowed": "Jūs neturite teisių pervadinti puslapių.",
"movenotallowedfile": "Jūs neturite teisės perkelti failus.",
"cant-move-user-page": "Jūs neturite teisės pervardyti naudotojų puslapių (išskyrus subpuslapius).",
"cant-move-to-user-page": "Jūs neturite teisių perkelti puslapį į naudotojo puslapį (išskyrus į naudotojo popuslapį).",
+ "cant-move-category-page": "Neturite teisių pervadinti kategorijų puslapius.",
+ "cant-move-to-category-page": "Neturite teisės pervadinti puslapio į kategorijos puslapį.",
"newtitle": "Naujas pavadinimas:",
"move-watch": "Stebėti šį puslapį",
"movepagebtn": "Pervadinti puslapį",
@@ -1962,7 +2079,7 @@
"move-leave-redirect": "Pervadinant palikti nukreipimą",
"protectedpagemovewarning": "'''Dėmesio:''' Šis puslapis buvo užrakintas, kad tik naudotojai su administratoriaus teisėmis galėtų jį pervadinti.\nNaujausias įrašas žurnale yra pateiktas žemiau:",
"semiprotectedpagemovewarning": "'''Pastaba''': Šis puslapis buvo užrakintas, kad tik registruoti naudotojai galėtų jį redaguoti.\nNaujausias įrašas žurnale yra pateiktas žemiau:",
- "move-over-sharedrepo": "== Failas jau yra ==\n[[:$1]] egzistuoja bendrojoje saugykloje. Perkėlus failą į šį pavadinimą, jis pakeis bendrąjį failą.",
+ "move-over-sharedrepo": "== Rinkmena jau yra ==\n[[:$1]] esti bendrojoje saugykloje. Įkėlus rinkmeną šiuo pavadinimu, ji pakeis bendrąją rinkmeną.",
"file-exists-sharedrepo": "Pasirinktas failo pavadinimas jau yra naudojamas bendrojoje saugykloje.\nPrašome pasirinkti kitą pavadinimą.",
"export": "Eksportuoti puslapius",
"exporttext": "Galite eksportuoti vieno puslapio tekstą ir istoriją ar kelių puslapių vienu metu tame pačiame XML atsakyme.\nŠie puslapiai galės būti importuojami į kitą projektą, veikiantį MediaWiki pagrindu, per [[Special:Import|importo puslapį]].\n\nNorėdami eksportuoti puslapius, įveskite pavadinimus žemiau esančiame tekstiniame lauke po vieną pavadinimą eilutėje, taip pat pasirinkite ar norite eksportuoti ir istoriją ar tik dabartinę versiją su paskutinio redagavimo informacija.\n\nPastaruoju atveju, jūs taip pat galite naudoti nuorodą, pvz. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] puslapiui „[[{{MediaWiki:Mainpage}}]]“.",
@@ -1985,13 +2102,14 @@
"allmessagestext": "Čia pateikiamas sisteminių pranešimų sąrašas, esančių MediaWiki vardų srityje.\nAplankykite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation „MediaWiki“ lokaliziciją] ir [//translatewiki.net „translatewiki.net“], jei norite prisidėti prie bendrojo „MediaWiki“ lokalizavimo.",
"allmessagesnotsupportedDB": "Šis puslapis nepalaikomas, nes nuostata '''$wgUseDatabaseMessages''' yra išjungtas.",
"allmessages-filter-legend": "Filtras",
- "allmessages-filter": "Filtruoti pagal būseną:",
+ "allmessages-filter": "Perkošti pagal būseną:",
"allmessages-filter-unmodified": "Nepakeisti",
"allmessages-filter-all": "Visi",
"allmessages-filter-modified": "Pakeisti",
- "allmessages-prefix": "Filtruoti pagal pradžią:",
+ "allmessages-prefix": "Perkošti pagal pradžią:",
"allmessages-language": "Kalba:",
"allmessages-filter-submit": "Rodyti",
+ "allmessages-filter-translate": "Versti",
"thumbnail-more": "Padidinti",
"filemissing": "Dingęs failas",
"thumbnail_error": "Klaida kuriant sumažintą paveikslėlį: $1",
@@ -2001,20 +2119,23 @@
"thumbnail-temp-create": "Negalima sukurti laikinos failo miniatiūros",
"thumbnail-dest-create": "Negalima išsaugoti failo miniatiūros",
"thumbnail_invalid_params": "Neleistini miniatiūros parametrai",
+ "thumbnail_toobigimagearea": "Rinkmenos matmenys didesni nei $1",
"thumbnail_dest_directory": "Nepavyksta sukurti paskirties aplanko",
"thumbnail_image-type": "Paveikslėlio tipas nėra palaikomas",
"thumbnail_gd-library": "Nepilna GD bibliotekos konfigūracija: trūksta funkcijos $1",
"thumbnail_image-missing": "Gali būti, kad failo nėra: $1",
"import": "Importuoti puslapius",
- "importinterwiki": "Tarpprojektinis importas",
+ "importinterwiki": "Įkelti iš kitos Viki",
"import-interwiki-text": "Pasirinkite projektą ir puslapio pavadinimą importavimui.\nVersijų datos ir redaktorių vardai bus išlaikyti.\nVisi tarpprojektiniai importo veiksmai yra registruojami [[Special:Log/import|importo istorijoje]].",
+ "import-interwiki-sourcewiki": "Pradinė wiki:",
+ "import-interwiki-sourcepage": "Pirminis puslapis:",
"import-interwiki-history": "Kopijuoti visas istorijos versijas šiam puslapiui",
"import-interwiki-templates": "Įtraukti visus šablonus",
"import-interwiki-submit": "Importuoti",
"import-interwiki-namespace": "Paskirties vardų sritis:",
"import-interwiki-rootpage": "Paskirties namų puslapis (pasirinktinai):",
"import-upload-filename": "Failo pavadinimas:",
- "import-comment": "Komentaras:",
+ "import-comment": "Paaiškinimas:",
"importtext": "Prašome eksportuoti iš projekto-šaltinio failo, naudojant [[Special:Export|eksportavimo pagalbininką.]]\nIšsaugokite jį savo kompiuteryje ir įkelkite jį čia.",
"importstart": "Imporuojami puslapiai...",
"import-revision-count": "$1 {{PLURAL:$1|versija|versijos|versijų}}",
@@ -2045,32 +2166,29 @@
"import-rootpage-invalid": "Duotas šaknų puslapis yra blogas pavadinimas.",
"importlogpage": "Importavimų sąrašas",
"importlogpagetext": "Administraciniai puslapių importai su keitimų istorija iš kitų wiki projektų.",
- "import-logentry-upload": "importuota $1 įkeliant failą",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}",
- "import-logentry-interwiki": "tarpprojektinis $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|keitimas|keitimai|keitimų}} iš $2",
"javascripttest": "JavaScript testavimas",
- "javascripttest-title": "Vykdomas $1 testavimas",
"javascripttest-pagetext-noframework": "Šis puslapis yra skirtas vykdyti JavaScript testavimus.",
"javascripttest-pagetext-unknownframework": "Nežinoma \"$1\" testavimo struktūra.",
"javascripttest-pagetext-frameworks": "Prašome pasirinkti vieną iš išvardintų testavimo struktūrų: $1",
"javascripttest-pagetext-skins": "Pasirinkite naudotojo sąsajos išvaizdą, kuriai atliksite testavimą:",
"javascripttest-qunit-intro": "Peržiūrėkite [$1 testavimo dokumentaciją]",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit bandymų komplektas",
"tooltip-pt-userpage": "Jūsų naudotojo puslapis",
"tooltip-pt-anonuserpage": "Naudotojo puslapis jūsų IP adresui",
"tooltip-pt-mytalk": "Jūsų aptarimo puslapis",
"tooltip-pt-anontalk": "Pakeitimų aptarimas, darytus naudojant šį IP adresą",
"tooltip-pt-preferences": "Mano nustatymai",
- "tooltip-pt-watchlist": "Puslapių sąrašas, kuriuos jūs pasirinkote stebėti.",
+ "tooltip-pt-watchlist": "Puslapių sąrašas, kuriuos jūs pasirinkote stebėti",
"tooltip-pt-mycontris": "Jūsų darytų keitimų sąrašas",
- "tooltip-pt-login": "Rekomenduojame prisijungti, nors tai nėra privaloma.",
+ "tooltip-pt-login": "Rekomenduojame prisijungti, nors tai nėra privaloma",
"tooltip-pt-logout": "Atsijungti",
+ "tooltip-pt-createaccount": "Skatiname susikurti paskyrą ir prisijungti, tačiau, tai nėra privaloma",
"tooltip-ca-talk": "Puslapio turinio aptarimas",
"tooltip-ca-edit": "Jūs galite redaguoti šį puslapį. Nepamirškite paspausti peržiūros mygtuką prieš išsaugodami.",
"tooltip-ca-addsection": "Pradėti naują aptariamą temą",
"tooltip-ca-viewsource": "Puslapis yra užrakintas. Galite pažiūrėti turinį.",
- "tooltip-ca-history": "Ankstesnės puslapio versijos.",
+ "tooltip-ca-history": "Ankstesni patikslinimai šiame puslapyje",
"tooltip-ca-protect": "Užrakinti šį puslapį",
"tooltip-ca-unprotect": "Keisti šio puslapio apsaugą",
"tooltip-ca-delete": "Ištrinti šį puslapį",
@@ -2078,33 +2196,34 @@
"tooltip-ca-move": "Pervadinti puslapį",
"tooltip-ca-watch": "Pridėti puslapį į stebimųjų sąrašą",
"tooltip-ca-unwatch": "Pašalinti puslapį iš stebimųjų sąrašo",
- "tooltip-search": "Ieškoti šiame projekte",
+ "tooltip-search": "Ieškoti {{SITENAME}}",
"tooltip-search-go": "Eiti į puslapį su tokiu pavadinimu, jei toks yra",
- "tooltip-search-fulltext": "Ieškoti puslapių su šiuo tekstu",
+ "tooltip-search-fulltext": "Ieškokite šio teksto puslapių",
"tooltip-p-logo": "Eiti į pradinį puslapį",
"tooltip-n-mainpage": "Eiti į pradinį puslapį",
"tooltip-n-mainpage-description": "Eiti į pradinį puslapį",
"tooltip-n-portal": "Apie projektą, ką galima daryti, kur ką rasti",
- "tooltip-n-currentevents": "Raskite naujausią informaciją",
- "tooltip-n-recentchanges": "Paskutinių keitimų sąrašas šiame projekte.",
+ "tooltip-n-currentevents": "Rasti pagrindinę informaciją apie įvykius",
+ "tooltip-n-recentchanges": "Paskutinių keitimų sąrašas wiki projekte",
"tooltip-n-randompage": "Įkelti atsitiktinį puslapį",
- "tooltip-n-help": "Vieta, kur rasite rūpimus atsakymus.",
- "tooltip-t-whatlinkshere": "Puslapių sąrašas, rodančių į čia",
+ "tooltip-n-help": "Vieta, kur rasite rūpimus atsakymus",
+ "tooltip-t-whatlinkshere": "Wiki puslapių sąrašas, kuris nurodo čia",
"tooltip-t-recentchangeslinked": "Paskutiniai keitimai puslapiuose, pasiekiamuose iš šio puslapio",
"tooltip-feed-rss": "Šio puslapio RSS šaltinis",
"tooltip-feed-atom": "Šio puslapio Atom šaltinis",
"tooltip-t-contributions": "Rodyti šio naudotojo keitimų sąrašą",
"tooltip-t-emailuser": "Siųsti laišką šiam naudotojui",
- "tooltip-t-upload": "Įkelti failus",
+ "tooltip-t-info": "Daugiau žinių apie šį puslapį",
+ "tooltip-t-upload": "Įkelti rinkmenas",
"tooltip-t-specialpages": "Specialiųjų puslapių sąrašas",
"tooltip-t-print": "Šio puslapio versija spausdinimui",
"tooltip-t-permalink": "Nuolatinė nuoroda į šią puslapio versiją",
"tooltip-ca-nstab-main": "Rodyti puslapio turinį",
"tooltip-ca-nstab-user": "Rodyti naudotojo puslapį",
"tooltip-ca-nstab-media": "Rodyti media puslapį",
- "tooltip-ca-nstab-special": "Šis puslapis yra specialusis - jo negalima redaguoti.",
+ "tooltip-ca-nstab-special": "Šis puslapis yra specialusis - jo negalima redaguoti",
"tooltip-ca-nstab-project": "Rodyti projekto puslapį",
- "tooltip-ca-nstab-image": "Rodyti failo puslapį",
+ "tooltip-ca-nstab-image": "Rodyti rinkmenos puslapį",
"tooltip-ca-nstab-mediawiki": "Rodyti sisteminį pranešimą",
"tooltip-ca-nstab-template": "Rodyti šabloną",
"tooltip-ca-nstab-help": "Rodyti pagalbos puslapį",
@@ -2112,7 +2231,7 @@
"tooltip-minoredit": "Pažymėti keitimą kaip smulkų",
"tooltip-save": "Išsaugoti pakeitimus",
"tooltip-preview": "Pakeitimų peržiūra, prašome pažiūrėti prieš išsaugant!",
- "tooltip-diff": "Rodo, kokius pakeitimus padarėte tekste.",
+ "tooltip-diff": "Rodo, kokius pakeitimus padarėte tekste",
"tooltip-compareselectedversions": "Žiūrėti dviejų pasirinktų puslapio versijų skirtumus.",
"tooltip-watch": "Pridėti šį puslapį į stebimųjų sąrašą",
"tooltip-watchlistedit-normal-submit": "Šalinti puslapius",
@@ -2120,7 +2239,7 @@
"tooltip-recreate": "Atkurti puslapį nepaisant to, kad jis buvo ištrintas",
"tooltip-upload": "Pradėti įkėlimą",
"tooltip-rollback": "Vienu spustelėjimu grąžinama prieš tai redagavusio naudotojo versija",
- "tooltip-undo": "„Anuliuoti“ atmeta šį keitimą ir atveria ankstesnės versijos redagavimo formą.\nLeidžia pridėti atmetimo priežastį komentaruose",
+ "tooltip-undo": "„Anuliuoti“ atmeta šį keitimą ir atveria ankstesnės versijos redagavimo formą. Leidžia pridėti atmetimo priežastį komentaruose.",
"tooltip-preferences-save": "Išsaugoti nustatymus",
"tooltip-summary": "Įvesti trumpą santrauką",
"common.css": "/** Čia įdėtas CSS bus taikomas visoms išvaizdoms */",
@@ -2142,7 +2261,7 @@
"spam_reverting": "Atkuriama į ankstesnę versiją, neturinčios nuorodų į $1",
"spam_blanking": "Visos versijos turėjo nuorodų į $1, išvaloma",
"spam_deleting": "Visos versijos turėjo nuorodų į $1, ištrinama",
- "simpleantispam-label": "Anti-spam patikra.\n'''NE'''pildykite!",
+ "simpleantispam-label": "Brukalų patikra.\n'''NE'''pildykite!",
"pageinfo-title": "„$1“ informacija",
"pageinfo-not-current": "Atsiprašome, neįmanoma pateikti šios senų versijų informacijos.",
"pageinfo-header-basic": "Pagrindinė informacija",
@@ -2157,7 +2276,6 @@
"pageinfo-robot-policy": "Paieškos variklio būsena",
"pageinfo-robot-index": "Leidžiama",
"pageinfo-robot-noindex": "Neleidžiama",
- "pageinfo-views": "Peržiūrų skaičius",
"pageinfo-watchers": "Puslapio stebėtojų skaičius",
"pageinfo-redirects-name": "Nukreipimai į šį puslapį",
"pageinfo-subpages-name": "Šio puslapio papuslapiai",
@@ -2171,6 +2289,9 @@
"pageinfo-recent-edits": "Paskutinųjų keitimų skaičius (per $1 laikotarpį)",
"pageinfo-recent-authors": "Pastarųjų skirtingų redaguotojų skaičius",
"pageinfo-magic-words": "Magiškas(-i) {{PLURAL:$1|žodis|žodžiai}} ($1)",
+ "pageinfo-hidden-categories": "{{PLURAL:$1|Paslėpta kategorija|Paslėptos kategorijos|Paslėptų kategorijų}} ($1)",
+ "pageinfo-templates": "{{PLURAL:$1|Įtrauktas šablonas|Įtraukti šablonai|Įtrauktų šablonų}} ($1)",
+ "pageinfo-transclusions": "{{PLURAL:$1|Įtrauktas puslapis|Įtraukti puslapiai|Įtrauktų puslapių}} ($1)",
"pageinfo-toolboxlink": "Puslapio informacija",
"pageinfo-redirectsto": "Nukreipimai į",
"pageinfo-redirectsto-info": "informacija",
@@ -2198,7 +2319,7 @@
"patrol-log-header": "Tai patvirtintų versijų sąrašas.",
"log-show-hide-patrol": "$1 patvirtinimų sąrašą",
"deletedrevision": "Ištrinta sena versija $1",
- "filedeleteerror-short": "Klaida trinant failą: $1",
+ "filedeleteerror-short": "Klaida trinant rinkmeną: $1",
"filedeleteerror-long": "Įvyko klaidų trinant failą:\n\n$1",
"filedelete-missing": "Failas „$1“ negali būti ištrintas, nes jo nėra.",
"filedelete-old-unregistered": "Nurodytos failo versijos „$1“ nėra duomenų bazėje.",
@@ -2210,16 +2331,16 @@
"imagemaxsize": "Riboti paveikslėlių dydį:<br />''(failų aprašymo puslapiuose)''",
"thumbsize": "Sumažintų paveikslėlių dydis:",
"widthheightpage": "$1 × $2, $3 {{PLURAL:$3|puslapis|puslapiai|puslapių}}",
- "file-info": "failo dydis: $1, MIME tipas: $2",
- "file-info-size": "$1 × $2 taškų, failo dydis: $3, MIME tipas: $4",
- "file-info-size-pages": "$1 × $2 taškų, failo dydis: $3, MIME tipas: $4, $5 {{PLURAL:$5|page|pages}}",
+ "file-info": "rinkmenos dydis: $1, MIME tipas: $2",
+ "file-info-size": "$1 × $2 taškų, rinkmenos dydis: $3, MIME tipas: $4",
+ "file-info-size-pages": "$1 × $2 taškų, rinkmenos dydis: $3, MIME tipas: $4, $5 {{PLURAL:$5|puslapis|puslapiai|puslapių}}",
"file-nohires": "Geresnė raiška negalima.",
- "svg-long-desc": "SVG failas, formaliai $1 × $2 taškų, failo dydis: $3",
+ "svg-long-desc": "SVG rinkmena, formaliai $1 × $2 taškų, rinkmenos dydis: $3",
"svg-long-desc-animated": "Animuotas SVG failas, formaliai $1 × $2 pikselių, failo dydis: $3",
"svg-long-error": "Neleistinas SVG failas: $1",
- "show-big-image": "Originalus failas",
- "show-big-image-preview": "Sumažintos iliustracijos dydis: $1 .",
- "show-big-image-other": "{{PLURAL:$2|Kita rezoliucija|Kitos $2 rezoliucijos|Kitų $2 rezoliucijų}}: $1 .",
+ "show-big-image": "Pradinė rinkmena",
+ "show-big-image-preview": "Šios peržiūros dydis: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Kita rezoliucija|Kitos $2 rezoliucijos|Kitų $2 rezoliucijų}}: $1.",
"show-big-image-size": "$1 × $2 taškų",
"file-info-gif-looped": "ciklinis",
"file-info-gif-frames": "$1 {{PLURAL:$1|kadras|kadrai|kadrų}}",
@@ -2232,6 +2353,7 @@
"newimages-summary": "Šis specialus puslapis rodo paskiausiai įkeltus failus.",
"newimages-legend": "Filtras",
"newimages-label": "Failo vardas (ar jo dalis):",
+ "newimages-showbots": "Rodyti robotų atliktus įkėlimus",
"noimages": "Nėra ką parodyti.",
"ilsubmit": "Ieškoti",
"bydate": "pagal datą",
@@ -2258,7 +2380,7 @@
"yesterday-at": "Vakar $1",
"bad_image_list": "Formatas yra toks:\n\nTik eilutės, prasidedančios *, yra įtraukiamos.\nPirmoji nuoroda eilutėje turi būti nuoroda į blogą failą.\nVisos kitos nuorodos toje pačioje eilutėje yra laikomos išimtimis, t. y. puslapiai, kuriuose leidžiama įterpti failą.",
"metadata": "Metaduomenys",
- "metadata-help": "Šiame faile yra papildomos informacijos, tikriausiai pridėtos skaitmeninės kameros ar skaitytuvo, naudoto jam sukurti ar perkelti į skaitmeninį formatą. Jei failas buvo pakeistas iš pradinės versijos, kai kurios detalės gali nepilnai atspindėti naują failą.",
+ "metadata-help": "Šioje rinkmenoje yra papildomos informacijos, tikriausiai pridėtos skaitmeninės kameros ar skaitytuvo, naudoto jai sukurti ar perkelti į skaitmeninį formatą. Jei rinkmena buvo pakeista iš pradinės versijos, kai kurios detalės gali nepilnai atspindėti naują rinkmeną.",
"metadata-expand": "Rodyti išplėstinę informaciją",
"metadata-collapse": "Slėpti išplėstinę informaciją",
"metadata-fields": "Vaizdo metaduomenų laukai, nurodyti šiame pranešime, bus įtraukti į paveikslėlio puslapį, kai metaduomenų lentelė bus suskleista.! N! kiti bus paslėpti.!\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
@@ -2283,7 +2405,7 @@
"exif-primarychromaticities": "Pagrindinių spalvų chromiškumas",
"exif-ycbcrcoefficients": "Spalvų pristatym matricos matricos koeficientai",
"exif-referenceblackwhite": "Juodos ir baltos poros nuorodos reikšmės",
- "exif-datetime": "Failo keitimo data ir laikas",
+ "exif-datetime": "Rinkmenos keitimo data ir laikas",
"exif-imagedescription": "Paveikslėlio pavadinimas",
"exif-make": "Kameros gamintojas",
"exif-model": "Kameros modelis",
@@ -2300,7 +2422,7 @@
"exif-usercomment": "Naudotojo komentarai",
"exif-relatedsoundfile": "Susijusi garso byla",
"exif-datetimeoriginal": "Duomenų generavimo data ir laikas",
- "exif-datetimedigitized": "Pervedimo į skaitmeninį formatą data ir laikas",
+ "exif-datetimedigitized": "Datos ir laiko pervedimas į skaitmeninį formatą",
"exif-subsectime": "Datos ir laiko sekundės dalys",
"exif-subsectimeoriginal": "Duomenų generavimo datos ir laiko sekundės dalys",
"exif-subsectimedigitized": "Pervedimo į skaitmeninį formatą datos ir laiko sekundės dalys",
@@ -2429,7 +2551,7 @@
"exif-pngfilecomment": "JPEG failo komentaras",
"exif-disclaimer": "Atsakomybės apribojimas",
"exif-contentwarning": "Turinio įspėjimas",
- "exif-giffilecomment": "GIF failo komentaras",
+ "exif-giffilecomment": "GIF rinkmenos paaiškinimas",
"exif-intellectualgenre": "Elemento tipas",
"exif-subjectnewscode": "Objektas kodas",
"exif-scenecode": "IPTC scenos kodas",
@@ -2443,7 +2565,7 @@
"exif-compression-3": "CCITT 3 grupės fakso kodavimas",
"exif-compression-4": "CCITT 4 grupės fakso kodavimas",
"exif-copyrighted-true": "Autorinės teisės",
- "exif-copyrighted-false": "Viešas domenas",
+ "exif-copyrighted-false": "Autorinių teisių padėtis nenustatyta",
"exif-unknowndate": "Nežinoma data",
"exif-orientation-1": "Standartinis",
"exif-orientation-2": "Apversta horizontaliai",
@@ -2602,7 +2724,6 @@
"exif-urgency-low": "Žemas ( $1 )",
"exif-urgency-high": "Aukštas ( $1 )",
"exif-urgency-other": "Vartotojo nustatyta pirmenybė ($1)",
- "watchlistall2": "visus",
"namespacesall": "visos",
"monthsall": "visi",
"confirmemail": "Patvirtinkite el. pašto adresą",
@@ -2620,7 +2741,7 @@
"confirmemail_subject": "{{SITENAME}} el. pašto adreso patvirtinimas",
"confirmemail_body": "Kažkas, tikriausiai jūs IP adresu $1, užregistravo\npaskyrą „$2“ susietą su šiuo el. pašto adresu projekte {{SITENAME}}.\n\nKad patvirtintumėte, kad ši dėžutė tikrai priklauso jums, ir aktyvuotumėte\nel. pašto paslaugas projekte {{SITENAME}}, atverkite šią nuorodą savo naršyklėje:\n\n$3\n\nJei paskyrą registravote *ne* jūs, eikite šia nuoroda,\nkad atšauktumėte el. pašto adreso patvirtinimą:\n\n$5\n\nPatvirtinimo kodas baigs galioti $4.",
"confirmemail_body_changed": "Kažkas, tikriausiai jūs IP adresu $1, projekte {{SITENAME}}\npakeitė paskyros „$2“ el. pašto adresą.\n\nKad patvirtintumėte, kad ši dėžutė tikrai priklauso jums, ir vėl aktyvuotumėte\nel. pašto paslaugas projekte {{SITENAME}}, atverkite šią nuorodą savo naršyklėje:\n\n$3\n\nJei paskyra jums *nepriklauso*, eikite šia nuoroda,\nkad atšauktumėte el. pašto adreso patvirtinimą:\n\n$5\n\nPatvirtinimo kodas baigs galioti $4.",
- "confirmemail_body_set": "Kažkas (tikriausiai jūs) iš IP adreso $1,\nnustatė svetainės {{SITENAME}} paskyros „$2“ e-pašto adresą į jūsiškį.\n\nKad patvirtintumėte, kad ši paskyra tikrai priklauso jums ir tokiu būdu aktyvuotumėte\ne-pašto funkcijas svetainėje {{SITENAME}}, atverkite šią nuorodą jūsų naršyklėje:\n\n$3\n\nJei paskyra jums *nepriklauso*, spauskite šią nuorodą,\nkad atšauktumėte e-pašto adreso patvirtinimą:\n\n$5\n\nŠis patvirtinimo kodas baigs galioti $4.",
+ "confirmemail_body_set": "Kažkas (tikriausiai jūs) iš IP adreso $1,\nnustatė svetainės {{SITENAME}} paskyros „$2“ elektroninio pašto adresą į jūsiškį.\n\nKad patvirtintumėte, kad ši paskyra tikrai priklauso jums ir tokiu būdu aktyvuotumėte\nelektroninio pašto galimybes svetainėje {{SITENAME}}, atverkite šią nuorodą savo naršyklėje:\n\n$3\n\nJei paskyra jums *nepriklauso*, spauskite šią nuorodą,\nkad atšauktumėte elektroninio pašto adreso patvirtinimą:\n\n$5\n\nŠis patvirtinimo kodas baigs galioti $4.",
"confirmemail_invalidated": "El. pašto adreso patvirtinimas atšauktas",
"invalidateemail": "El. pašto patvirtinimo atšaukimas",
"scarytranscludedisabled": "[Tarpprojektinis įterpimas yra išjungtas]",
@@ -2638,10 +2759,14 @@
"confirm-watch-top": "Pridėti šį puslapį į stebimųjų sąrašą?",
"confirm-unwatch-button": "Gerai",
"confirm-unwatch-top": "Pašalinti šį puslapį iš jūsų stebimųjų sąrašo?",
+ "quotation-marks": "„$1“",
"imgmultipageprev": "← ankstesnis puslapis",
"imgmultipagenext": "kitas puslapis →",
"imgmultigo": "Eiti!",
"imgmultigoto": "Eitį į puslapį $1",
+ "img-lang-default": "(numatytoji kalba)",
+ "img-lang-info": "Rodyti šį vaizdą $1 kalba. $2",
+ "img-lang-go": "Eiti",
"ascending_abbrev": "didėjanti tvarka",
"descending_abbrev": "mažėjanti tvarka",
"table_pager_next": "Kitas puslapis",
@@ -2656,6 +2781,7 @@
"autosumm-replace": "Puslapis keičiamas su „$1“",
"autoredircomment": "Nukreipiama į [[$1]]",
"autosumm-new": "Naujas puslapis: $1",
+ "autosumm-newblank": "Sukurtas tuščias puslapis",
"size-kilobytes": "$1 KiB",
"size-megabytes": "$1 MiB",
"size-gigabytes": "$1 GiB",
@@ -2674,15 +2800,23 @@
"watchlistedit-raw-done": "Jūsų stebimųjų sąrašas buvo atnaujintas.",
"watchlistedit-raw-added": "$1 {{PLURAL:$1|puslapis buvo pridėtas|puslapiai buvo pridėti|puslapių buvo pridėta}}:",
"watchlistedit-raw-removed": "$1 {{PLURAL:$1|puslapis buvo pašalintas|puslapiai buvo pašalinti|puslapių buvo pašalinta}}:",
+ "watchlistedit-clear-title": "Išvalytas stebimųjų sąrašas",
+ "watchlistedit-clear-legend": "Išvalyti stebimųjų sąrašą",
+ "watchlistedit-clear-explain": "Visi pavadinimai bus pašalinti iš jūsų stebimųjų sąrašo",
+ "watchlistedit-clear-titles": "Pavadinimai:",
+ "watchlistedit-clear-submit": "Išvalyti stebimųjų sąrašą (tai negrįžtamas veiksmas!)",
+ "watchlistedit-clear-done": "Jūsų stebimųjų sąrašas buvo išvalytas.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|1 pavadinimas|$1 pavadinimai|$1 pavadinimų}} pašalinta:",
+ "watchlistedit-too-many": "Pernelyg daug puslapių, kad juos visus čia būtų galima parodyti.",
+ "watchlisttools-clear": "Išvalyti stebimųjų sąrašą",
"watchlisttools-view": "Rodyti susijusius keitimus",
"watchlisttools-edit": "Rodyti ir redaguoti stebimųjų sąrašą",
"watchlisttools-raw": "Redaguoti grynąjį sąrašą",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|aptarimas]])",
- "unknown_extension_tag": "Nežinoma priedo žymė „$1“",
"duplicate-defaultsort": "Įspėjimas: Numatytasis rikiavimo raktas „$2“ pakeičia ankstesnį numatytąjį rikiavimo raktą „$1“.",
"version": "Versija",
"version-extensions": "Įdiegti priedai",
- "version-skins": "Išvaizda",
+ "version-skins": "Įrašytos išvaizdos",
"version-specialpages": "Specialieji puslapiai",
"version-parserhooks": "Analizatoriaus gaudliai",
"version-variables": "Kintamieji",
@@ -2694,10 +2828,21 @@
"version-parser-function-hooks": "Analizatoriaus funkciniai gaudliai",
"version-hook-name": "Gaudlio pavadinimas",
"version-hook-subscribedby": "Užsakyta",
- "version-version": "(Versija $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[be pavadinimo]",
"version-license": "MediaWiki licencija",
+ "version-ext-license": "Licencija",
+ "version-ext-colheader-name": "Plėtinys",
+ "version-skin-colheader-name": "Išvaizda",
+ "version-ext-colheader-version": "Versija",
+ "version-ext-colheader-license": "Licencija",
+ "version-ext-colheader-description": "Aprašymas",
+ "version-ext-colheader-credits": "Autoriai",
+ "version-license-title": "$1 licencija",
+ "version-credits-title": "$1 autoriai",
"version-poweredby-credits": "Šis projektas naudoja '''[https://www.mediawiki.org/ MediaWiki]''', autorystės teisės © 2001-$1 $2.",
"version-poweredby-others": "kiti",
+ "version-poweredby-translators": "translatewiki.net vertėjai",
"version-credits-summary": "Už indėlį kuriant [[Special:Version|MediaWiki]] dėkojame",
"version-license-info": "MediaWiki yra nemokama programinė įranga; galite ją platinti ir/arba modifikuoti pagal GNU General Public License, kurią publikuoja Free Software Foundation; taikoma 2-oji licenzijos versija arba (Jūsų pasirinkimu) bet kuri vėlesnė versija. \n\nMediaWiki yra platinama su viltimi, kad ji bus naudinga, bet BE JOKIOS GARANTIJOS; be jokios numanomos PARDAVIMO arba TINKAMUMO TAM TIKRAM TIKSLUI garantijos. Daugiau informacijos galite sužinoti GNU General Public License. \n\nJūs turėjote gauti [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License kopiją] kartu su šia programa, jei ne, rašykite Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, JAV arba [//www.gnu.org/licenses/old-licenses/gpl-2.0.html perskaitykite ją internete].",
"version-software": "Įdiegta programinė įranga",
@@ -2712,6 +2857,7 @@
"redirect-lookup": "Peržvalgos:",
"redirect-value": "Vertė:",
"redirect-user": "Naudotojo ID",
+ "redirect-page": "Puslapio ID",
"redirect-revision": "Puslapio peržiūra",
"redirect-file": "Failo vardas",
"redirect-not-exists": "Vertė nėra nustatyta",
@@ -2725,7 +2871,8 @@
"fileduplicatesearch-result-n": "Šis failas „$1“ turi $2 {{PLURAL:$2|identišką dublikatą|identiškus dublikatus|identiškų dublikatų}}.",
"fileduplicatesearch-noresults": "Nėra failo pavadinimu \"$1\".",
"specialpages": "Specialieji puslapiai",
- "specialpages-note": "* Įprastą specialius puslapius.\n* <span class=\"mw-specialpagerestricted\">Tik specialius puslapius.</span>",
+ "specialpages-note-top": "Paaiškinimai",
+ "specialpages-note": "* Įprasti specialieji puslapiai.\n* <span class=\"mw-specialpagerestricted\">Apriboto pasiekiamumo specialieji puslapiai.</span>",
"specialpages-group-maintenance": "Sistemos palaikymo pranešimai",
"specialpages-group-other": "Kiti specialieji puslapiai",
"specialpages-group-login": "Prisijungti / sukurti paskyrą",
@@ -2738,6 +2885,7 @@
"specialpages-group-wiki": "Wiki duomenys ir priemonės",
"specialpages-group-redirects": "Specialieji nukreipimo puslapiai",
"specialpages-group-spam": "Šlamšto valdymo priemonės",
+ "specialpages-group-developer": "Kūrėjo įrankai",
"blankpage": "Tuščias puslapis",
"intentionallyblankpage": "Šis puslapis specialiai paliktas tuščias",
"external_image_whitelist": " #Palikite šią eilutę, tokią kokia yra <pre>\n#Įrašykite standartinių išraiškų fragmentus (tik dalį tarp //)\n#Juos bus bandoma sutapdinti su išorinių paveikslėlių adresais\n#Tie, kurie sutaps, bus rodomi kaip paveikslėliai, o kiti bus rodomi tik kaip nuorodos\n#Raidžių dydis nėra svarbus\n#Eilutės, prasidedančios # yra komentarai\n\n#Įterpkite visus standartinių išraiškų fragmentus prieš šią eilutę. Palikite šią eilutę, tokią kokia yra </pre>",
@@ -2750,7 +2898,10 @@
"tags-tag": "Žymos pavadinimas",
"tags-display-header": "Išvaizda keitimų sąrašuose",
"tags-description-header": "Visas reikšmės aprašymas",
+ "tags-active-header": "Veikiantis?",
"tags-hitcount-header": "Pažymėti pakeitimai",
+ "tags-active-yes": "Taip",
+ "tags-active-no": "Ne",
"tags-edit": "taisyti",
"tags-hitcount": "$1 {{PLURAL:$1|pakeitimas|pakeitimai|pakeitimų}}",
"comparepages": "Palyginti puslapius",
@@ -2765,6 +2916,7 @@
"dberr-problems": "Atsiprašome! Svetainei iškilo techninių problemų.",
"dberr-again": "Palaukite kelias minutes ir perkraukite puslapį.",
"dberr-info": "(Nepavyksta pasiekti duomenų bazės serverio: $1)",
+ "dberr-info-hidden": "(Nepavyksta susisiekti su duomenų bazės serveriu)",
"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.",
@@ -2781,6 +2933,9 @@
"htmlform-no": "Ne",
"htmlform-yes": "Taip",
"htmlform-chosen-placeholder": "Pasirinkite parinktį",
+ "htmlform-cloner-create": "Pridėti dar",
+ "htmlform-cloner-delete": "Pašalinti",
+ "htmlform-cloner-required": "Bent viena reikšmė būtina.",
"sqlite-has-fts": "$1 su visatekstės paieškos palaikymu",
"sqlite-no-fts": "$1 be visatekstės paieškos palaikymo",
"logentry-delete-delete": "$1 {{GENDER:$2|ištrynė}} puslapį $3",
@@ -2802,6 +2957,11 @@
"revdelete-uname-unhid": "naudotojo vardas paviešintas",
"revdelete-restricted": "uždėti apribojimai administratoriams",
"revdelete-unrestricted": "pašalinti apribojimai administratoriams",
+ "logentry-block-block": "$1 {{GENDER:$2|užblokavo}} {{GENDER:$4|$3}}, blokavimo laikas – $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|atblokavo}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|pakeitė}} {{GENDER:$4|$3}} blokavimo nustatymus, blokavimo laikas – $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|užblokavo}} {{GENDER:$4|$3}}, blokavimo laikas – $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|pakeitė}} {{GENDER:$4|$3}} blokavimo nustatymus, blokavimo laikas – $5 $6",
"logentry-move-move": "$1 pervadino puslapį $3 į $4",
"logentry-move-move-noredirect": "$1 pervadino puslapį $3 į $4, nepalikdamas nukreipimo",
"logentry-move-move_redir": "$1 pervadino puslapį iš $3 į $4, vietoje buvusio nukreipimo",
@@ -2816,20 +2976,27 @@
"logentry-rights-rights": "$1 pakeista narystė grupėje $3 iš $4 į $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|pakeista}} narystė grupėje $3",
"logentry-rights-autopromote": "$1 buvo automatiškai {{GENDER:$2|pervestas}} iš $4 į $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|įkėlė}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|įkėlė}} naują $3 versiją",
+ "logentry-upload-revert": "$1 {{GENDER:$2|įkėlė}} $3",
"rightsnone": "(jokių)",
+ "revdelete-summary": "keitimo paaiškinimas",
+ "feedback-adding": "Pridedamas atsiliepimas į puslapį ...",
+ "feedback-back": "Atgal",
+ "feedback-bugcheck": "Puiku! Tiesiog patikrinkite, ar tai ne viena [$1 jau žinomų klaidų].",
+ "feedback-bugnew": "Patikrinau. Pranešti apie naują klaidą",
"feedback-bugornote": "Jei jūs esate pasirengę aprašyti techninę problemą išsamiau, [$1 praneškite apie programinę klaidą].\nKitu atveju, galite naudotis žemiau esančia paprastesne forma. Jūsų komentaras bus įtrauktas į puslapį „[$3 $2]“, kartu su jūsų naudotojo vardu ir jūsų naudojama naršykle.",
- "feedback-subject": "Tema:",
- "feedback-message": "Pranešimas:",
"feedback-cancel": "Atšaukti",
- "feedback-submit": "Siųsti Atsiliepimą",
- "feedback-adding": "Pridedamas atsiliepimas į puslapį ...",
+ "feedback-close": "Atlikta",
+ "feedback-dialog-title": "Pateikti atsiliepimą",
+ "feedback-error-title": "Klaida",
"feedback-error1": "Klaida: Neatpažįstamas rezultatas iš API",
"feedback-error2": "Klaida: Redagavimas nepavyko",
"feedback-error3": "Klaida: Jokio atsakymo iš API",
+ "feedback-message": "Pranešimas:",
+ "feedback-subject": "Tema:",
+ "feedback-submit": "Pateikti",
"feedback-thanks": "Ačiū! Jūsų atsiliepimas buvo užregistruotas puslapyje „[$2 $1]“.",
- "feedback-close": "Atlikta",
- "feedback-bugcheck": "Puiku! Tiesiog patikrinkite, ar tai ne viena [$1 jau žinomų klaidų].",
- "feedback-bugnew": "Patikrinau. Pranešti apie naują klaidą",
"searchsuggest-search": "Ieškoti",
"searchsuggest-containing": "turintys",
"api-error-badaccess-groups": "Jums neleidžiama įkelti failus į šią wiki.",
@@ -2881,8 +3048,39 @@
"duration-decades": "$1 {{PLURAL:$1|dešimtmetis|dešimtmečiai|dešimtmečių}}",
"duration-centuries": "$1 {{PLURAL:$1|amžius|amžiai|amžių}}",
"duration-millennia": "$1 {{PLURAL:$1|tūkstantmetis|tūkstantmečiai|tūkstantmečių}}",
+ "limitreport-title": "Analizatoriaus duomenys:",
"expand_templates_output": "Rezultatas",
"expand_templates_ok": "Gerai",
"expand_templates_remove_comments": "Pašalinti komentarus",
- "expand_templates_preview": "Peržiūra"
+ "expand_templates_preview": "Peržiūra",
+ "pagelanguage": "Puslapio kalbos pasirinkimas",
+ "pagelang-name": "Puslapis",
+ "pagelang-language": "Kalba",
+ "pagelang-use-default": "Naudoti numatytąją kalbą",
+ "pagelang-select-lang": "Pasirinkite kalbą",
+ "right-pagelang": "Keisti puslapio kalbą",
+ "action-pagelang": "keisti puslapio kalbą",
+ "log-name-pagelang": "Keisti kalbos žurnalą",
+ "mediastatistics-table-mimetype": "MIME tipas",
+ "json-error-syntax": "Sintaksės klaida",
+ "headline-anchor-title": "Nuoroda į šią pastraipą",
+ "special-characters-group-latin": "Lotynų",
+ "special-characters-group-latinextended": "Lotynų išplėstoji",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simboliai",
+ "special-characters-group-greek": "Graikų",
+ "special-characters-group-cyrillic": "Kirilica",
+ "special-characters-group-arabic": "Arabų",
+ "special-characters-group-arabicextended": "Arabic extended",
+ "special-characters-group-persian": "Persų",
+ "special-characters-group-hebrew": "Hebrajų",
+ "special-characters-group-bangla": "Bengalų",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugų",
+ "special-characters-group-sinhala": "Sinhalų",
+ "special-characters-group-gujarati": "Gudžaratų",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Tajų",
+ "special-characters-group-lao": "Laosiečių",
+ "special-characters-group-khmer": "Khmerų"
}
diff --git a/languages/i18n/ltg.json b/languages/i18n/ltg.json
index 717c2be6..b60e023c 100644
--- a/languages/i18n/ltg.json
+++ b/languages/i18n/ltg.json
@@ -200,7 +200,6 @@
"resetpass-submit-cancel": "Atsaukt",
"passwordreset-username": "Slāgvuords:",
"passwordreset-email": "E-posta adress:",
- "changeemail-cancel": "Atsaukt",
"bold_sample": "Pamalnais roksts",
"bold_tip": "Pamalnais roksts",
"italic_sample": "Sleipais roksts",
@@ -409,7 +408,6 @@
"pager-older-n": "{{PLURAL:$1|vacuoku 1|vacuokys $1}}",
"booksources": "Gruomotu olūti",
"booksources-search-legend": "Meklēt gruomotu olūtus",
- "booksources-go": "Meklēt",
"log": "Registri",
"allpages": "Vysys puslopys",
"prevpage": "Īprīškejuo lopa ($1)",
@@ -433,7 +431,7 @@
"watchthispage": "Puorraudzeit itū lopu",
"unwatch": "Vairs napuorraudzeit",
"watchlist-details": "(Tu puorraug $1 {{PLURAL:$1|lopu|lopys}}, naskaitūt sarunu lopys.)",
- "wlshowlast": "Paruodeit izmainis pādejūs $1 stuņžu laikā voi $2 dīnu laikā, voi ari $3",
+ "wlshowlast": "Paruodeit izmainis pādejūs $1 stuņžu laikā voi $2 dīnu laikā, voi ari",
"watchlist-options": "Puorraugamū rokstu saroksta īspiejis",
"watching": "Davīnoj puorraudzeišonai...",
"unwatching": "Atslādz puorraudzeišonu...",
@@ -609,7 +607,6 @@
"metadata-expand": "Paruodeit papyldu detalis",
"metadata-collapse": "Nūglobuot papyldu detalis",
"metadata-fields": "Itymā paziņuojumā asūši metadatu lauki byus radzami attāla lopā ari tod, kod metadatu tabula byus sateita.\nPuorejī lauki, piec nūklusiejuma, byus nūglobuoti.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "vysys",
"namespacesall": "vysys",
"monthsall": "vysi",
"watchlisttools-view": "Apsavērt atbylstūšuos izmainis",
diff --git a/languages/i18n/lus.json b/languages/i18n/lus.json
index c4a82fa8..88cae64b 100644
--- a/languages/i18n/lus.json
+++ b/languages/i18n/lus.json
@@ -397,7 +397,6 @@
"passwordreset-emailsent-capture": "Hriat nawntirna e-lehkha thawn a ni, a hnuaia tarlan ang khuan.",
"passwordreset-emailerror-capture": "Hriat nawntirna e-lehkha siam chhuah a ni a, a hnuaia tarlan ang khuan; mahsé thawn hlawhchham a ni: $1",
"changeemail": "E-chenhmun thlâk rawh",
- "changeemail-header": "Siangchan e-chenhmun thlâk rawh",
"changeemail-text": "I e-chenhmun thlâk tùrin hei hi dahkhat vek rawh. I tihdanglam nemngheh nan i thurûk ziahluh i ngai ang.",
"changeemail-no-info": "He phêk lut mai tùr chuan i inziahluh a ngai.",
"changeemail-oldemail": "Tùna i e-chenhmun:",
@@ -405,7 +404,6 @@
"changeemail-none": "(pakhat mah)",
"changeemail-password": "I {{SITENAME}} thurûk:",
"changeemail-submit": "E-chenhmun thlâk rawh",
- "changeemail-cancel": "Sûtna",
"bold_sample": "Hawrawp thau",
"bold_tip": "Hawrawp thau",
"italic_sample": "Hawrawp äwn",
@@ -580,7 +578,6 @@
"search-relatedarticle": "Laichin",
"searchrelated": "laichin",
"searchall": "a vaiin",
- "showingresultsheader": "'''$4''' tana {{PLURAL:$5|chhuak '''$3''' zinga '''$1'''|chhuak '''$3''' zinga '''$1 - $2''' }}",
"search-nonefound": "I zawn mil a awm lo",
"powersearch-legend": "Zawnna chi sang",
"powersearch-ns": "Hemi hminghmun chhungah hian zawng rawh:",
@@ -940,7 +937,6 @@
"statistics": "Lepsena",
"statistics-header-pages": "Phêk lepsena",
"statistics-header-edits": "Siamṭhatphung lepsena",
- "statistics-header-views": "Tlawhna lepsèna",
"statistics-header-users": "Hmangtute chanchin kimchang",
"statistics-header-hooks": "Chanchin dang",
"statistics-articles": "Thuziakna phêkte",
@@ -949,13 +945,9 @@
"statistics-files": "Taksa hlankaite",
"statistics-edits": "{{SITENAME}} din achina phêk khawih danglam zât",
"statistics-edits-average": "Phêk khat zëla siamṭhat zât chawhrual",
- "statistics-views-total": "Tlawh zât",
- "statistics-views-total-desc": "Phêk awm lo leh phêk vohbîkte tlawhna chu chhiar tel a ni lo",
- "statistics-views-peredit": "Siamṭhat pakhat zël tlawh zât",
"statistics-users": "[[Special:ListUsers|Hmangtu]] inziaklût zât",
"statistics-users-active": "Hmangtu aktif zât",
"statistics-users-active-desc": "Ni {{PLURAL:$1|khat|$1}} kaltâ chhunga thiltih nei hmangtuho",
- "statistics-mostpopular": "Phêk thlir zin deuh deuhte",
"doubleredirects": "Hruailuhna phír",
"double-redirect-fixed-move": "[[$1]] sawn a ni ta.\n[[$2]] lama hruailuhna siam nghâl a ni.",
"double-redirect-fixed-maintenance": "[[$1]] aṭanga [[$2]] hruailuhna phír chinfel.",
@@ -983,7 +975,6 @@
"uncategorizedtemplates": "Páwl nei lo siamsâte",
"unusedcategories": "Páwl hman lohte",
"unusedimages": "Taksa hman hlawh lote",
- "popularpages": "Phêk lärte",
"wantedcategories": "Páwl mamawhte",
"wantedpages": "Phêk mamawhte",
"wantedpages-badtitle": "Phêk hming dik lo: $1",
@@ -1022,7 +1013,6 @@
"suppress": "Hmuh hmaih",
"booksources": "Lehkhabu rawnte",
"booksources-search-legend": "Lehkhabu hnar zingah zawng rawh",
- "booksources-go": "Khai le",
"specialloguserlabel": "Buatsaihtu:",
"speciallogtitlelabel": "Tumhmun (hming emaw hmangtu):",
"log": "Chanchin-ziak",
@@ -1103,7 +1093,7 @@
"watchlist-details": "I ralvèn zing aţanga {{PLURAL:$1| phêk $1 |phêk $1}}, sawihona phêk chhiar lohvin.",
"wlheader-enotif": "*E-lehkha inhriattirna tihnun a ni.",
"wlheader-showupdated": "I tlawh hnuhnun ber hnua tihdanglam phêk te chu a '''thau'''va tihlan a ni.",
- "wlshowlast": "Darkar $1 kalta-a tihdanglam tilang rawh , ni $2 kalta-a tihdanglam tilang rawh, $3 tilang rawh",
+ "wlshowlast": "Darkar $1 kalta-a tihdanglam tilang rawh , ni $2 kalta-a tihdanglam tilang rawh, tilang rawh",
"watchlist-options": "Ralvèn duhdàn",
"enotif_reset": "Phêk zawng zawng tlawh tawh vek angin chhinchhiah rawh.",
"enotif_impersonal_salutation": "{{SITENAME}} hmangtu",
@@ -1358,7 +1348,6 @@
"spamprotectiontitle": "Thuthawn lawi lo danna",
"pageinfo-title": "\"$1\" chungchanga hriattirna",
"pageinfo-header-edits": "Siamţhatnate",
- "pageinfo-views": "Thlir/en tawh zât",
"pageinfo-watchers": "Thlirtu zât",
"pageinfo-edits": "Siamţhat zât",
"pageinfo-authors": "Ziaktu hrang zât",
@@ -1429,7 +1418,6 @@
"exif-languagecode": "Ţawng",
"exif-iimversion": "IIM chhuah",
"exif-iimcategory": "Pawl",
- "watchlistall2": "a vaiin",
"namespacesall": "a vaiin",
"monthsall": "a vaiin",
"confirm-watch-top": "I ralvèn zingah i telh duh maw?",
diff --git a/languages/i18n/lv.json b/languages/i18n/lv.json
index a8a4e9bc..cafbea42 100644
--- a/languages/i18n/lv.json
+++ b/languages/i18n/lv.json
@@ -20,7 +20,8 @@
"Xil",
"Yyy",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Pasvītrot saites:",
@@ -30,15 +31,15 @@
"tog-extendwatchlist": "Izvērst uzraugāmo lapu sarakstu, lai parādītu visas veiktās izmaiņas (ne tikai pašas svaigākās)",
"tog-usenewrc": "Grupēt izmaiņas pēc lapas pēdējās izmaiņās un uzraugāmo lapu sarakstā (izmanto ''JavaScript'')",
"tog-numberheadings": "Automātiski numurēt virsrakstus",
- "tog-showtoolbar": "Rādīt rediģēšanas rīkjoslu",
- "tog-editondblclick": "Atvērt lapu rediģēšanai ar dubultklikšķi",
- "tog-editsectiononrightclick": "Atvērt sadaļas rediģēšanas lapu, uzklikšķinot ar labo peles pogu uz sadaļas virsraksta (izmanto ''JavaScript'')",
+ "tog-showtoolbar": "Rādīt labošanas rīkjoslu",
+ "tog-editondblclick": "Atvērt lapu labošanai ar dubultklikšķi",
+ "tog-editsectiononrightclick": "Atvērt sadaļas labošanas lapu, uzklikšķinot ar labo peles pogu uz sadaļas virsraksta (izmanto ''JavaScript'')",
"tog-watchcreations": "Pievienot manis radītās lapas un manis augšuplādētos failus uzraugāmo lapu sarakstam",
"tog-watchdefault": "Pievienot manis izmainītās lapas un failus uzraugāmo lapu sarakstam",
"tog-watchmoves": "Pievienot manis pārvietotās lapas un failus uzraugāmo lapu sarakstam",
"tog-watchdeletion": "Pievienot manis izdzēstās lapas un failus uzraugāmo lapu sarakstam",
"tog-minordefault": "Atzīmēt visus labojumus jau sākotnēji par maznozīmīgiem",
- "tog-previewontop": "Parādīt priekšskatījumu virs rediģēšanas lauka, nevis zem",
+ "tog-previewontop": "Parādīt priekšskatījumu virs labošanas lauka, nevis zem",
"tog-previewonfirst": "Parādīt priekšskatījumu jau uzsākot rediģēšanu",
"tog-enotifwatchlistpages": "Paziņot pa e-pastu par izmaiņām uzraugāmo rakstu sarakstā esošos rakstos un failos",
"tog-enotifusertalkpages": "Paziņot pa e-pastu par izmaiņām manā diskusiju lapā",
@@ -59,7 +60,7 @@
"tog-diffonly": "Nerādīt lapu saturu zem izmaiņām",
"tog-showhiddencats": "Rādīt slēptās kategorijas",
"tog-norollbackdiff": "Neņemt vērā atšķirības, veicot atriti",
- "tog-useeditwarning": "Brīdināt mani, kad es atstāju lapas rediģēšanu nesaglabājot izmaiņas",
+ "tog-useeditwarning": "Brīdināt mani, kad es atstāju lapas labošanu, nesaglabājot izmaiņas",
"tog-prefershttps": "Vienmēr izmantot drošu savienojumu pēc pieslēgšanās",
"underline-always": "vienmēr",
"underline-never": "Nekad",
@@ -131,19 +132,19 @@
"october-date": "$1. oktobris",
"november-date": "$1. novembris",
"december-date": "$1. decembris",
- "pagecategories": "{{PLURAL:$1|Kategorija|Kategorijas}}",
+ "pagecategories": "{{PLURAL:$1|Kategorijas|Kategorija|Kategorijas}}",
"category_header": "Raksti, kas ietverti kategorijā \"$1\".",
"subcategories": "Apakškategorijas",
"category-media-header": "Faili kategorijā \"$1\"",
"category-empty": "''Šī kategorija šobrīd nesatur ne lapas, ne failus''",
- "hidden-categories": "{{PLURAL:$1|Slēpta kategorija|Slēptas kategorijas}}",
+ "hidden-categories": "{{PLURAL:$1|Slēptas kategorijas|Slēpta kategorija|Slēptas kategorijas}}",
"hidden-category-category": "Slēptās kategorijas",
- "category-subcat-count": "{{PLURAL:$2|Šajai kategorijai ir tikai viena apakškategorija.|Šajai kategorijai ir $2 apakškategorijas, no kurām ir {{PLURAL:$1|redzama viena|redzamas $1}}.}}",
- "category-subcat-count-limited": "Šai kategorijai ir {{PLURAL:$1|viena apakškategorija|$1 apakškategorijas}}.",
- "category-article-count": "{{PLURAL:$2|Šī kategorija satur tikai šo vienu lapu.|Šajā kategorijā kopā ir $2 lapas, šobrīd ir {{PLURAL:$1|redzama viena no tām|redzamas $1 no tām}}.}}",
- "category-article-count-limited": "Šajā kategorijā ir {{PLURAL:$1|šī viena lapa|šīs $1 lapas}}.",
- "category-file-count": "{{PLURAL:$2|Šī kategorija satur tikai šo vienu failu.|Šajā kategorijā ir $2 faili, no kuriem {{PLURAL:$1|redzams ir viens|ir redzami $1}}.}}",
- "category-file-count-limited": "Šajā kategorijā atrodas {{PLURAL:$1|tikai šis fails|šie $1 faili}}.",
+ "category-subcat-count": "{{PLURAL:$2|Šai kategorijai ir $2 apakškategorijas, no kurām ir {{PLURAL:$1|redzamas $1|redzama $1|redzamas $1}}.|Šai kategorijai ir $2 apakškategorija.|Šai kategorijai ir $2 apakškategorijas, no kurām ir {{PLURAL:$1|redzamas $1|redzama $1|redzamas $1}}.}}",
+ "category-subcat-count-limited": "Šai kategorijai ir {{PLURAL:$1|$1 apakškategorijas|$1 apakškategorija|$1 apakškategorijas}}.",
+ "category-article-count": "{{PLURAL:$2|Šajā kategorijā kopā ir $2 lapu, šobrīd ir {{PLURAL:$1|redzamas $1 no tām|redzama $1 no tām|redzamas $1 no tām}}.|Šī kategorija satur $2 lapu.|Šajā kategorijā kopā ir $2 lapas, šobrīd ir {{PLURAL:$1|redzamas $1 no tām|redzama $1 no tām|redzamas $1 no tām}}.}}",
+ "category-article-count-limited": "Šajā kategorijā ir {{PLURAL:$1|šīs $1 lapas|šī $1 lapa|šīs $1 lapas}}.",
+ "category-file-count": "{{PLURAL:$2|Šajā kategorijā ir $2 failu, no kuriem {{PLURAL:$1|ir redzami $1|redzams ir $1|ir redzami $1}}.|Šī kategorija satur tikai $2 failu.|Šajā kategorijā ir $2 faili, no kuriem {{PLURAL:$1|ir redzami $1|redzams ir $1|ir redzami $1}}.}}",
+ "category-file-count-limited": "Šajā kategorijā atrodas {{PLURAL:$1|šie $1 faili|tikai šis fails|šie $1 faili}}.",
"listingcontinuesabbrev": " (turpinājums)",
"index-category": "Indeksētās lapas",
"noindex-category": "Neindeksētās lapas",
@@ -161,7 +162,7 @@
"and": "&#32;un",
"qbfind": "Meklēšana",
"qbbrowse": "Navigācija",
- "qbedit": "Izmainīšana",
+ "qbedit": "Labošana",
"qbpageoptions": "Šī lapa",
"qbmyoptions": "Manas lapas",
"faq": "BUJ",
@@ -185,15 +186,17 @@
"permalink": "Pastāvīgā saite",
"print": "Drukāt",
"view": "Skatīt",
- "edit": "Izmainīt šo lapu",
+ "edit": "Labot šo lapu",
+ "edit-local": "Labot vietējo aprakstu",
"create": "Izveidot",
+ "create-local": "Pievienot vietējo aprakstu",
"editthispage": "Izmainīt šo lapu",
"create-this-page": "Izveidot šo lapu",
"delete": "Dzēst",
"deletethispage": "Dzēst šo lapu",
"undeletethispage": "Atjaunot šo lapu",
- "undelete_short": "Atjaunot $1 {{PLURAL:$1|versiju|versijas}}",
- "viewdeleted_short": "Apskatīt {{PLURAL:$1|vienu dzēstu labojumu|$1 dzēstus labojumus}}",
+ "undelete_short": "Atjaunot $1 {{PLURAL:$1|versijas|versiju|versijas}}",
+ "viewdeleted_short": "Apskatīt {{PLURAL:$1|$1 dzēstus labojumus|$1 dzēstu labojumu|$1 dzēstus labojumus}}",
"protect": "Aizsargāt",
"protect_change": "izmainīt",
"protectthispage": "Aizsargāt šo lapu",
@@ -219,14 +222,16 @@
"otherlanguages": "Citās valodās",
"redirectedfrom": "(Pāradresēts no $1)",
"redirectpagesub": "Pāradresācijas lapa",
+ "redirectto": "Pāradresēt uz:",
"lastmodifiedat": "Šajā lapā pēdējās izmaiņas izdarītas $2, $1.",
- "viewcount": "Šī lapa ir tikusi apskatīta $1 {{PLURAL:$1|reizi|reizes}}.",
+ "viewcount": "Šī lapa ir tikusi apskatīta $1 {{PLURAL:$1|reizes|reizi|reizes}}.",
"protectedpage": "Aizsargāta lapa",
"jumpto": "Pārlēkt uz:",
"jumptonavigation": "navigācija",
"jumptosearch": "meklēt",
"view-pool-error": "Atvainojiet, šobrīd serveri ir pārslogoti.\nPārāk daudz lietotāju mēģina apskatīt šo lapu.\nLūdzu, brīdi uzgaidiet un mēģiniet šo lapu apskatīties vēlreiz.\n\n$1",
"pool-errorunknown": "Nezināma kļūda",
+ "poolcounter-usage-error": "Izmantošanas kļūda: $1",
"aboutsite": "Par {{grammar:akuzatīvs|{{SITENAME}}}}",
"aboutpage": "Project:Par",
"copyright": "Saturs ir pieejams saskaņā ar $1, ja vien nav norādīts citādi.",
@@ -235,7 +240,7 @@
"currentevents-url": "Project:Aktualitātes",
"disclaimers": "Saistību atrunas",
"disclaimerpage": "Project:Saistību atrunas",
- "edithelp": "Rediģēšanas palīdzība",
+ "edithelp": "Labošanas palīdzība",
"mainpage": "Sākumlapa",
"mainpage-description": "Sākumlapa",
"policy-url": "Project:Politika",
@@ -245,32 +250,33 @@
"privacypage": "Project:Privātuma politika",
"badaccess": "Atļaujas kļūda",
"badaccess-group0": "Tev nav atļauts izpildīt darbību, kuru tu pieprasīji.",
- "badaccess-groups": "Darbības izpilde, ko Tu pieprasīji, ir pieejama tikai $1 {{PLURAL:$2|lietotāju grupai|lietotāju grupām}}.",
+ "badaccess-groups": "Darbības izpilde, ko Tu pieprasīji, ir pieejama tikai $1 {{PLURAL:$2|lietotāju grupām|lietotāju grupai|lietotāju grupām}}.",
"versionrequired": "Nepieciešamā ''MediaWiki'' versija: $1.",
"versionrequiredtext": "Lai lietotu šo lapu, nepieciešama ''MediaWiki'' versija $1. Sk. [[Special:Version|versija]].",
"ok": "Labi",
"retrievedfrom": "Saturs iegūts no \"$1\"",
"youhavenewmessages": "Tev ir $1 (skatīt $2).",
"youhavenewmessagesmanyusers": "Jums ir $1 no daudziem lietotājiem ($2).",
- "newmessageslinkplural": "{{PLURAL:$1|jauns vēstījums|999=jauni vēstījumi}}",
- "newmessagesdifflinkplural": "{{PLURAL:$1|pēdējā izmaiņa|999=pēdējās izmaiņas}}",
+ "newmessageslinkplural": "{{PLURAL:$1|999=jauni vēstījumi|jauns vēstījums|999=jauni vēstījumi}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|999=pēdējās izmaiņas|pēdējā izmaiņa|999=pēdējās izmaiņas}}",
"youhavenewmessagesmulti": "Tev ir jauns ziņojums: $1",
- "editsection": "labot",
+ "editsection": "labot šo sadaļu",
"editold": "labot",
"viewsourceold": "aplūkot kodu",
"editlink": "labot",
"viewsourcelink": "aplūkot kodu",
- "editsectionhint": "Rediģēt sadaļu: $1",
+ "editsectionhint": "Labot sadaļu: $1",
"toc": "Satura rādītājs",
"showtoc": "parādīt",
"hidetoc": "paslēpt",
"collapsible-collapse": "paslēpt",
"collapsible-expand": "rādīt",
+ "confirmable-confirm": "Vai esi {{GENDER:$1|pārliecināts|pārliecināta}}?",
"confirmable-yes": "Jā",
"confirmable-no": "Nē",
"thisisdeleted": "Apskatīt vai atjaunot $1?",
"viewdeleted": "Skatīt $1?",
- "restorelink": "$1 {{PLURAL:$1|dzēsto versiju|dzēstās versijas}}",
+ "restorelink": "$1 {{PLURAL:$1|dzēstās versijas|dzēsto versiju|dzēstās versijas}}",
"feedlinks": "Barotne:",
"feed-invalid": "Nederīgs abonētās barotnes veids.",
"feed-unavailable": "Sindicētās plūsmas nav pieejamas",
@@ -359,7 +365,7 @@
"yourpasswordagain": "Atkārto paroli",
"createacct-yourpasswordagain": "Apstipriniet paroli",
"createacct-yourpasswordagain-ph": "Vēlreiz ievadiet paroli",
- "remembermypassword": "Atcerēties pēc pārlūka aizvēršanas (spēkā ne vairāk kā $1 {{PLURAL:$1|diena|dienas}}).",
+ "remembermypassword": "Atcerēties pēc pārlūka aizvēršanas (spēkā ne vairāk kā $1 {{PLURAL:$1|dienas|diena|dienas}}).",
"userlogin-remembermypassword": "Atcerēties mani",
"userlogin-signwithsecure": "Izmantot drošu savienojumu",
"yourdomainname": "Tavs domēns",
@@ -381,6 +387,8 @@
"userlogin-resetlink": "Esat aizmirsis savu pieslēgšanās informāciju?",
"userlogin-resetpassword-link": "Aizmirsi savu paroli?",
"userlogin-helplink2": "Palīdzība ar pieslēgšanos",
+ "userlogin-loggedin": "Tu esi pieslēdzies ar lietotājvārdu {{GENDER:$1|$1}}.\nLai pieslēgtos ar citu lietotājvārdu, aizpildi šo formu.",
+ "userlogin-createanother": "Izveidot citu kontu",
"createacct-emailrequired": "E-pasta adrese",
"createacct-emailoptional": "E-pasta adrese (nav obligāta)",
"createacct-email-ph": "Ievadiet savu e-pasta adresi",
@@ -395,9 +403,9 @@
"createacct-submit": "Izveidot savu kontu",
"createacct-another-submit": "Izveidot citu lietotāja kontu",
"createacct-benefit-heading": "{{SITENAME}} darbojas ar tādu cilvēku kā Tu ieguldījumu.",
- "createacct-benefit-body1": "{{PLURAL:$1|labojums|labojumi}}",
- "createacct-benefit-body2": "{{PLURAL:$1|lapa|lapas}}",
- "createacct-benefit-body3": "{{PLURAL:$1|nesens dalībnieks|neseni dalībnieki}}",
+ "createacct-benefit-body1": "{{PLURAL:$1|labojumi|labojums|labojumi}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|lapas|lapa|lapas}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|neseni dalībnieki|nesens dalībnieks|neseni dalībnieki}}",
"badretype": "Tevis ievadītās paroles nesakrīt.",
"userexists": "Ievadītais lietotājvārds jau ir aizņemts.\nLūdzu, izvēlieties citu vārdu.",
"loginerror": "Neveiksmīga ieiešana",
@@ -414,12 +422,12 @@
"login-userblocked": "Šis lietotājs ir bloķēts. Pieslēgšanās nav atļauta.",
"wrongpassword": "Tu ievadīji nepareizu paroli. Lūdzu, mēģini vēlreiz.",
"wrongpasswordempty": "Parole bija tukša. Lūdzu mēģini vēlreiz.",
- "passwordtooshort": "Tava parole ir pārāk īsa.\nTajā jābūt vismaz {{PLURAL:$1|1 zīmei|$1 zīmēm}}.",
+ "passwordtooshort": "Tava parole ir pārāk īsa.\nTajā jābūt vismaz {{PLURAL:$1|$1 zīmēm|1 zīmei|$1 zīmēm}}.",
"password-name-match": "Tava parole nedrīkst būt tāda pati kā tavs lietotājvārds.",
"password-login-forbidden": "Šī lietotājvārda un paroles izmantošana ir aizliegta.",
"mailmypassword": "Atiestatīt paroli",
"passwordremindertitle": "Jauna pagaidu parole no {{SITENAME}}s",
- "passwordremindertext": "Kads (iespejams, Tu pats, no IP adreses $1)\nludza, lai nosutam Tev jaunu {{SITENAME}} ($4) paroli.\nLietotajam $2 pagaidu parole tagad ir $3.\nLudzu, nomaini paroli, kad esi veiksmigi iekluvis ieksa.\nTavas pagaidu paroles deriiguma terminsh beigsies peec {{PLURAL:$5|vienas dienas|$5 dienaam}}.\n\nJa paroles pieprasījumu bija nosūtījis kāds cits, vai arī tu atcerējies savu veco paroli, šo var ignorēt. Vecā parole joprojām darbojas.",
+ "passwordremindertext": "Kāds (iespējams, Tu pats, no IP adreses $1)\nlūdza, lai nosūtām Tev jaunu {{SITENAME}} ($4) paroli.\nLietotajam $2 pagaidu parole tagad ir $3.\nLudzu, nomaini paroli, kad esi veiksmīgi iekļuvis iekšš.\nTavas pagaidu paroles derīguma termiņš beigsies pēc {{PLURAL:$5|$5 dienām|$5 dienas|$5 dienām}}.\n\nJa paroles pieprasījumu bija nosūtījis kāds cits, vai arī tu atcerējies savu veco paroli, šo var ignorēt. Vecā parole joprojām darbojas.",
"noemail": "Lietotājs \"$1\" nav reģistrējis e-pasta adresi.",
"noemailcreate": "Tev jānorāda derīgu e-pasta adresi",
"passwordsent": "Esam nosūtījuši jaunu paroli uz e-pasta adresi, kuru ir norādījis lietotājs $1. Lūdzu, nāc iekšā ar jauno paroli, kad būsi to saņēmis.",
@@ -427,7 +435,7 @@
"eauthentsent": "Apstiprinājuma e-pasts tika nosūtīts uz norādīto e-pasta adresi. Lai varētu saņemt citus ''meilus'', izpildi vēstulē norādītās instrukcijas, lai apstiprinātu, ka šī tiešām ir tava e-pasta adrese.",
"throttled-mailpassword": "Paroles atgādinājums jau ir ticis nosūtīts {{PLURAL:$1|pēdējās stundas|pēdējo $1 stundu}} laikā.\nLai novērstu šīs funkcijas ļaunprātīgu izmantošanu, iespējams nosūtīt tikai vienu paroles atgādinājumu, {{PLURAL:$1|katru stundu|katras $1 stundas}}.",
"mailerror": "E-pasta sūtīšanas kļūda: $1",
- "acct_creation_throttle_hit": "Lietotāji no tavas IP adreses šajā viki pēdējo 24 stundu laikā jau ir izveidojuši {{PLURAL:$1|1 kontu|$1 kontus}}, kas ir maksimālais atļautais skaits šajā laika periodā.\nTādēļ šobrīd no šīs IP adreses vairs nevar izveidot jaunus kontus.",
+ "acct_creation_throttle_hit": "Lietotāji no tavas IP adreses šajā viki pēdējo 24 stundu laikā jau ir izveidojuši {{PLURAL:$1|$1 kontus|1 kontu|$1 kontus}}, kas ir maksimālais atļautais skaits šajā laika periodā.\nTādēļ šobrīd no šīs IP adreses vairs nevar izveidot jaunus kontus.",
"emailauthenticated": "Tava e-pasta adrese tika apstiprināta $2, $3.",
"emailnotauthenticated": "Tava e-pasta adrese <strong>vēl nav apstiprināta</strong> un zemāk norādītās iespējas nav pieejamas.",
"noemailprefs": "Norādi e-pasta adresi, lai lietotu šīs iespējas.",
@@ -466,6 +474,7 @@
"passwordreset-text-one": "Aizpildiet šo veidlapu, lai atiestatītu savu paroli.",
"passwordreset-legend": "Atiestatīt paroli",
"passwordreset-disabled": "Paroles atiestates šajā viki ir atspējotas.",
+ "passwordreset-emaildisabled": "Šajā viki ir atspējotas e-pasta iespējas.",
"passwordreset-username": "Lietotājvārds:",
"passwordreset-domain": "Domēns:",
"passwordreset-capture": "Apskatīt izveidoto e-pastu?",
@@ -503,7 +512,7 @@
"hr_tip": "Horizontāla līnija (neizmanto lieki)",
"summary": "Kopsavilkums:",
"subject": "Tēma/virsraksts:",
- "minoredit": "maznozīmīgs labojums",
+ "minoredit": "Maznozīmīgs labojums",
"watchthis": "Uzraudzīt šo lapu",
"savearticle": "Saglabāt lapu",
"preview": "Pirmskats",
@@ -520,7 +529,7 @@
"blockedtext": "'''Tavs lietotāja vārds vai IP adrese ir nobloķēta.'''\n\n$1 nobloķēja tavu lietotāja vārdu vai IP adresi.\nBloķējot norādītais iemesls bija: ''$2''.\n\n*Bloka sākums: $8\n*Bloka beigas: $6\n*Bija domāts nobloķēt: $7\n\nTu vari sazināties ar $1 vai kādu citu [[{{MediaWiki:Grouppage-sysop}}|administratoru]] lai apspriestu šo bloku.\n\nPievērs uzmanību, tam, ka ja tu neesi norādījis derīgu e-pasta adresi ''[[Special:Preferences|savās izvēlēs]]'', tev nedarbosies \"sūtīt e-pastu\" iespēja.\n\nTava IP adrese ir $3 un bloka identifikators ir #$5. Lūdzu iekļauj vienu no tiem, vai abus, visos turpmākajos pieprasījumos.",
"autoblockedtext": "Tava IP adrese ir tikusi automātiski nobloķēta, tāpēc, ka to (nupat kā) ir lietojis cits lietotājs, kuru nobloķēja $1.\nNorādītais bloķēšanas iemesls bija:\n\n:''$2''\n\n* Bloka sākums: $8\n* Bloka beigas: $6\n* Bija domāts nobloķēt: $7\n\nTu vari sazināties ar $1 vai kādu citu [[{{MediaWiki:Grouppage-sysop}}|adminu]] lai apspriestu šo bloku.\n\nAtceries, ka tu nevari lietot \"sūtīt e-pastu šim lietotājam\" iespēju, ja tu neesi norādījis derīgu e-pasta adresi savās [[Special:Preferences|lietotāja izvelēs]] un bloķējot tev nav aizbloķēta iespēja sūtīt e-pastu.\n\nTava pašreizējā IP adrese ir $3 un bloka ID ir $5.\nLūdzu iekļauj šos visos ziņojumos, kurus sūti adminiem, apspriežot šo bloku.",
"blockednoreason": "iemesls nav norādīts",
- "whitelistedittext": "Tev $1 lai varētu rediģēt lapas.",
+ "whitelistedittext": "Lūdzu $1, lai varētu labot lapas.",
"confirmedittext": "Lai varētu izmainīt lapas, vispirms jāapstiprina savu e-pasta adresi.\nNorādi un apstiprini e-pasta adresi savos [[Special:Preferences|lietotāja uzstādījumos]].",
"nosuchsectiontitle": "Nevaru atrast sadaļu",
"nosuchsectiontext": "Jūs mēģinājāt rediģēt sadaļu, kas neeksistē.\nTā var būt pārvietota vai dzēsta, kamēr jūs apskatījāt lapu.",
@@ -550,10 +559,10 @@
"continue-editing": "Pāriet uz labošanas lauku",
"session_fail_preview": "'''Neizdevās apstrādāt tavas izmaiņas, jo tika pazaudēti sesijas dati.\nLūdzu mēģini vēlreiz.\nJa tas joprojām nedarbojas, mēģini [[Special:UserLogout|izlogoties ārā]] un ielogoties no jauna.'''",
"session_fail_preview_html": "'''Neizdevās apstrādāt tavas izmaiņas, jo tika pazaudēti sesijas dati.'''\n\n''Tā, kā {{grammar:ģenitīvs|{{SITENAME}}}} darbojas neapstrādāts HTML, pirmskats ir paslēpts, lai aizsargātos no JavaScripta uzbrukumiem.''\n\n'''Ja šis bija parasts rediģēšanas mēģinājums, mēģini vēlreiz.\nJa tas joprojām nedarbojas, mēģini [[Special:UserLogout|izlogoties ārā]] un ielogoties no jauna.'''",
- "editing": "Izmainīt $1",
+ "editing": "Labot $1",
"creating": "Izveido lapu $1",
- "editingsection": "Izmainīt $1 (sadaļa)",
- "editingcomment": "Izmainīt $1 (jauna sadaļa)",
+ "editingsection": "Labot lapas \"$1\" sadaļu",
+ "editingcomment": "Labot $1 (jauna sadaļa)",
"editconflict": "Izmaiņu konflikts: $1",
"explainconflict": "Kāds cits ir izmainījis šo lapu pēc tam, kad tu sāki to mainīt.\nAugšējā teksta logā ir lapas teksts tā pašreizējā versijā.\nTevis veiktās izmaiņas ir redzamas apakšējā teksta logā.\nLai saglabātu savas izmaiņas, tev ir jāapvieno savs teksts ar saglabāto pašreizējo variantu.\nKad spiedīsi pogu \"{{int:savearticle}}\", tiks saglabāts '''tikai''' teksts, kas ir augšējā teksta logā.",
"yourtext": "Tavs teksts",
@@ -561,26 +570,26 @@
"nonunicodebrowser": "'''Brīdinājums: Tavs pārlūks neatbalsta unikodu.\nIr pieejams risinājums, kas ļaus tev droši rediģēt lapas: zīmes, kas nav ASCII, parādīsies izmaiņu logā kā heksadecimāli kodi.'''",
"editingold": "'''BRĪDINĀJUMS: Saglabājot šo lapu, tu izmainīsi šīs lapas novecojušu versiju, un ar to tiks dzēstas visas izmaiņas, kas izdarītas pēc šīs versijas.'''",
"yourdiff": "Atšķirības",
- "copyrightwarning": "Lūdzu, ņem vērā, ka viss ieguldījums, kas veikts {{grammar:lokatīvs|{{SITENAME}}}}, ir uzskatāms par publiskotu saskaņā ar $2 (vairāk info skat. $1).\nJa nevēlies, lai Tevis rakstīto kāds rediģē un izplata tālāk, tad, lūdzu, nepievieno to šeit!<br />\n\nIzvēloties \"Saglabāt lapu\", Tu apliecini, ka šo rakstu esi rakstījis vai papildinājis pats vai izmantojis informāciju no darba, ko neaizsargā autortiesības, vai tamlīdzīga brīvi pieejama resursa.\n'''BEZ ATĻAUJAS NEPIEVIENO DARBU, KO AIZSARGĀ AUTORTIESĪBAS!'''",
+ "copyrightwarning": "Lūdzu, ņem vērā, ka viss ieguldījums, kas veikts {{grammar:lokatīvs|{{SITENAME}}}}, ir uzskatāms par publiskotu saskaņā ar $2 (vairāk info skatīt $1).\nJa nevēlies, lai Tevis rakstīto kāds labo un izplata tālāk, tad, lūdzu, nepievieno to šeit!<br />\n\nIzvēloties \"Saglabāt lapu\", Tu apliecini, ka šo rakstu esi rakstījis vai papildinājis pats vai izmantojis informāciju no darba, ko neaizsargā autortiesības, vai tamlīdzīga brīvi pieejama resursa.\n'''BEZ ATĻAUJAS NEPIEVIENO DARBU, KO AIZSARGĀ AUTORTIESĪBAS!'''",
"copyrightwarning2": "Lūdz ņem vērā, ka visu ieguldījumu {{grammar:lokatīvs|{{SITENAME}}}} var rediģēt, mainīt vai izdzēst citi lietotāji. Ja negribi lai ar tavu rakstīto tā izrīkojas, nepievieno to šeit.\n\nTu apliecini, ka šo rakstu esi rakstījis vai papildinājis pats vai izmantojis informāciju no darba, ko neaizsargā autortiesības, vai tamlīdzīga brīvi pieejama resursa (sīkāk skatīt $1).\n\n'''BEZ ATĻAUJAS NEPIEVIENO DARBU, KO AIZSARGĀ AUTORTIESĪBAS!'''",
"longpageerror": "'''Kļūda: Teksts, kuru tu mēģināji saglabāt, ir $1 kilobaitus garš, kas ir vairāk nekā pieļaujamie $2 kilobaiti.\nTas nevar tikt saglabāts.'''",
"readonlywarning": "'''Brīdinājums: Datubāze ir slēgta apkopei, tāpēc tu tagad nevarēsi saglabāt veiktās izmaiņas.\nTu vari nokopēt tekstu un saglabāt kā teksta failu vēlākam laikam.'''\n\nAdmins, kas slēdza datubāzi, norādīja šādu paskaidrojumu: $1",
"protectedpagewarning": "'''BRĪDINĀJUMS: Šī lapa ir aizsargāta, tikai lietotāji ar administratora privilēģijām var to izmainīt.'''\n\nPēdējais aizsargāšanas reģistra ieraksts ir apskatāms zemāk:",
"semiprotectedpagewarning": "'''Piezīme:''' Šī lapa ir aizsargāta, lai to varētu labot tikai reģistrēti lietotāji.\nPēdējais reģistra ieraksts ir apskatāms zemāk:",
"titleprotectedwarning": "'''Brīdinājums: Šī lapa ir slēgta un to var izveidot tikai [[Special:ListGroupRights|noteikti]] lietotāji.'''",
- "templatesused": "Šajā lapā {{PLURAL:$1|izmantotā veidne|izmantotās veidnes}}:",
- "templatesusedpreview": "Šajā pirmskatā {{PLURAL:$1|izmanotā veidne|izmantotās veidnes}}:",
- "templatesusedsection": "Šajā sadaļā {{PLURAL:$1|izmantotā veidne|izmantotās veidnes}}:",
+ "templatesused": "Šajā lapā {{PLURAL:$1|izmantotās veidnes|izmantotā veidne|izmantotās veidnes}}:",
+ "templatesusedpreview": "Šajā pirmskatā {{PLURAL:$1|izmantotās veidnes|izmanotā veidne|izmantotās veidnes}}:",
+ "templatesusedsection": "Šajā sadaļā {{PLURAL:$1|izmantotās veidnes|izmantotā veidne|izmantotās veidnes}}:",
"template-protected": "(aizsargāta)",
"template-semiprotected": "(daļēji aizsargāta)",
- "hiddencategories": "Šī lapa ietilpst {{PLURAL:$1|1 slēptajā kategorijā|$1 slēptajās kategorijās}}:",
- "nocreatetext": "{{grammar:lokatīvs|{{SITENAME}}}} ir atslēgta iespēja izveidot jauinas lapas.\nTu vari atgriezties atpakaļ un izmainīt esošu lapu, vai arī [[Special:UserLogin|ielogoties, vai izveidot kontu]].",
+ "hiddencategories": "Šī lapa ietilpst {{PLURAL:$1|$1 slēptajās kategorijās|1 slēptajā kategorijā|$1 slēptajās kategorijās}}:",
+ "nocreatetext": "{{grammar:lokatīvs|{{SITENAME}}}} ir atslēgta iespēja izveidot jaunas lapas.\nTu vari atgriezties atpakaļ un izlabot esošu lapu, vai arī [[Special:UserLogin|ielogoties, vai izveidot kontu]].",
"nocreate-loggedin": "Tev nav atļaujas veidot jaunas lapas.",
"sectioneditnotsupported-title": "Sadaļa rediģēšana nav atbalstīta",
"sectioneditnotsupported-text": "Sadaļu rediģēsana šajā lapā nav atļauta.",
"permissionserrors": "Atļauju kļūda",
- "permissionserrorstext": "Tev nav atļauts veikt šo darbību {{PLURAL:$1|šāda iemesla|šādu iemeslu}} dēļ:",
- "permissionserrorstext-withaction": "Tev nav atļauts $2 {{PLURAL:$1|šāda iemesla|šādu iemeslu}} dēļ:",
+ "permissionserrorstext": "Tev nav atļauts veikt šo darbību {{PLURAL:$1|šādu iemeslu|šāda iemesla|šādu iemeslu}} dēļ:",
+ "permissionserrorstext-withaction": "Tev nav atļauts $2 {{PLURAL:$1|šādu iemeslu|šāda iemesla|šādu iemeslu}} dēļ:",
"recreate-moveddeleted-warn": "'''Brīdinājums: Tu atjauno lapu, kas ir tikusi izdzēsta'''\n\nTev vajadzētu pārliecināties, vai ir lietderīgi turpināt izmainīt šo lapu.\nTe var apskatīties dzēšanas un pārvietošanas reģistrus, kuros jābūt datiem par to kas, kad un kāpēc šo lapu izdzēsa.",
"moveddeleted-notice": "Šī lapa ir tikusi izdzēsta.\nTe var apskatīties dzēšanas un pārvietošanas reģistru fragmentus, lai noskaidrotu kurš, kāpēc un kad to izdzēsa.",
"log-fulllog": "Paskatīties pilnu reģistru",
@@ -599,6 +608,8 @@
"content-model-text": "vienkāršs teksts",
"content-model-javascript": "JavaScript kods",
"content-model-css": "CSS stils",
+ "content-json-empty-object": "Tukšs objekts",
+ "content-json-empty-array": "Tukšs masīvs",
"expensive-parserfunction-category": "Lapas ar pārāk daudz laikietilpīgiem apstrādes funkciju izsaukumiem",
"post-expand-template-inclusion-warning": "'''Brīdinājums:''' iekļauto veidņu izmērs ir par lielu.\nDažas veidnes netiks iekļautas.",
"post-expand-template-inclusion-category": "Lapas, kurām pārsniegts iekļauto veidņu apjoms",
@@ -616,7 +627,7 @@
"currentrev": "Pašreizējā versija",
"currentrev-asof": "Pašreizējā versija, $1",
"revisionasof": "Versija, kas saglabāta $1",
- "revision-info": "Versija $1 laikā, kādu to atstāja $2",
+ "revision-info": "Versija $1, kādu to atstāja {{GENDER:$6|$2}}$7",
"previousrevision": "← Senāka versija",
"nextrevision": "Jaunāka versija →",
"currentrevisionlink": "skatīt pašreizējo versiju",
@@ -630,7 +641,7 @@
"history-show-deleted": "Tikai dzēstās",
"histfirst": "Senākās",
"histlast": "Jaunākās",
- "historysize": "({{PLURAL:$1|1 baits|$1 baiti}})",
+ "historysize": "({{PLURAL:$1|$1 baiti|1 baits|$1 baiti}})",
"historyempty": "(tukša)",
"history-feed-title": "Versiju hronoloģija",
"history-feed-description": "Šīs wiki lapas versiju hronoloģija",
@@ -650,7 +661,7 @@
"revdelete-nooldid-title": "Nederīga mērķa versija",
"revdelete-no-file": "Norādītais fails neeksistē.",
"revdelete-show-file-submit": "Jā",
- "logdelete-selected": "{{PLURAL:$1|Izvēlētais reģistra ieraksts|Izvēlētie reģistra ieraksti}}:",
+ "logdelete-selected": "{{PLURAL:$1|Izvēlētie reģistra ieraksti|Izvēlētais reģistra ieraksts|Izvēlētie reģistra ieraksti}}:",
"revdelete-confirm": "Lūdzu apstiprini, ka Tu zini, ko dari, Tu apzinies sekas, tāpat Tu to dari saskaņā ar vadlīnijām.",
"revdelete-suppress-text": "Paslēpšanu izmantot vienīgi šādos gadījumos:\n* potenciāli apmelojoša informācija\n* nepiemērotā personīgā informācija\n*: ''mājas adrese, telefona numuri u.c.''",
"revdelete-legend": "Uzstādīt redzamības ierobežojumus",
@@ -666,7 +677,7 @@
"revdelete-suppress": "Paslēpt datus arī no administratoriem",
"revdelete-unsuppress": "Atcelt ierobežojumus atjaunotajām versijām",
"revdelete-log": "Iemesls:",
- "revdelete-submit": "Piemērot {{PLURAL:$1|izvēlētajai versijai|izvēlētajām versijām}}",
+ "revdelete-submit": "Piemērot {{PLURAL:$1|izvēlētajām versijām|izvēlētajai versijai|izvēlētajām versijām}}",
"revdelete-success": "'''Versiju redzamība veiksmīgi atjaunināta.'''",
"revdelete-failure": "'''Versiju redzamību nav iespējams atjaunināt:'''\n$1",
"logdelete-success": "'''Reģistra ierakstu redzamība veiksmīgi uzstādīta.'''",
@@ -698,7 +709,6 @@
"mergehistory-same-destination": "Avota un mērķa lapas nevar būt tās pašas",
"mergehistory-reason": "Iemesls:",
"mergelog": "Apvienošanas reģistrs",
- "pagemerge-logentry": "apvienots [[$1]] ar [[$2]] (versijas līdz $3)",
"revertmerge": "Atsaukt apvienošanu",
"history-title": "\"$1\" versiju hronoloģija",
"difference-title": "Atšķirības starp \"$1\" versijām",
@@ -709,19 +719,19 @@
"showhideselectedversions": "Rādīt/slēpt izvēlētās versijas",
"editundo": "atcelt",
"diff-empty": "(Nav atšķirību)",
- "diff-multi-sameuser": "({{PLURAL:$1|Viena starpversija|$1 starpversijas}}, ko izdarījis viens lietotājs, nav parādīta{{PLURAL:$1||s}})",
- "diff-multi-otherusers": "({{PLURAL:$1|Viena starpversija|$1 starpversijas}}, ko {{PLURAL:$2|saglabājis|saglabājuši}} {{PLURAL:$2|viens cits lietotājs|$2 lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
- "diff-multi-manyusers": "({{PLURAL:$1|Viena starpversija|$1 starpversijas}}, ko saglabājuši vairāk nekā $2 {{PLURAL:$2|lietotājs|lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
+ "diff-multi-sameuser": "({{PLURAL:$1|$1 starpversijas|$1 starpversija|$1 starpversijas}}, ko mainījis viens lietotājs, nav {{PLURAL:$1|parādītas|parādīta|parādītas}})",
+ "diff-multi-otherusers": "({{PLURAL:$1|$1 starpversijas|Viena starpversija|$1 starpversijas}}, ko {{PLURAL:$2|saglabājuši|saglabājis|saglabājuši}} {{PLURAL:$2|$2 lietotāji|viens cits lietotājs|$2 lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
+ "diff-multi-manyusers": "({{PLURAL:$1|$1 starpversijas|$1 starpversija|$1 starpversijas}}, ko saglabājuši vairāk nekā $2 {{PLURAL:$2|lietotāji|lietotājs|lietotāji}}, nav parādīta{{PLURAL:$1||s}})",
"searchresults": "Meklēšanas rezultāti",
"searchresults-title": "Meklēšanas rezultāti \"$1\"",
"titlematches": "Rezultāti virsrakstos",
"textmatches": "Rezultāti lapu tekstos",
"notextmatches": "Neviena rezultāta, meklējot lapas tekstā",
- "prevn": "iepriekšējās {{PLURAL:$1|$1}}",
- "nextn": "nākamās {{PLURAL:$1|$1}}",
- "prevn-title": "{{PLURAL:$1|Iepriekšējais|Iepriekšējie}} $1 {{PLURAL:$1|rezultāts|rezultāti}}",
- "nextn-title": "{{PLURAL:$1|Nākošais|INākošie}} $1 {{PLURAL:$1|rezultāts|rezultāti}}",
- "shown-title": "Parādīt $1 {{PLURAL:$1|rezultātu|rezultātus}} vienā lapā",
+ "prevn": "{{PLURAL:$1|iepriekšējās $1|iepriekšējā $1|iepriekšējās $1}}",
+ "nextn": "{{PLURAL:$1|nākamās $1|nākamā $1|nākamās $1}}",
+ "prevn-title": "{{PLURAL:$1|Iepriekšējie|Iepriekšējais|Iepriekšējie}} $1 {{PLURAL:$1|rezultāti|rezultāts|rezultāti}}",
+ "nextn-title": "{{PLURAL:$1|Nākamie|Nākamais|Nākamie}} $1 {{PLURAL:$1|rezultāti|rezultāts|rezultāti}}",
+ "shown-title": "Parādīt $1 {{PLURAL:$1|rezultātus|rezultātu|rezultātus}} vienā lapā",
"viewprevnext": "Skatīt ($1 {{int:pipe-separator}} $2) ($3 vienā lapā).",
"searchmenu-exists": "'''Šajā projektā ir raksts ar nosaukumu \"[[:$1]]\"'''",
"searchmenu-new": "'''Izveido rakstu \"[[:$1]]\" šajā projektā!'''",
@@ -733,8 +743,8 @@
"searchprofile-images-tooltip": "Meklēt attēlus, audio un video failus",
"searchprofile-everything-tooltip": "Meklēt visur (ieskaitot diskusiju lapas)",
"searchprofile-advanced-tooltip": "Izvēlēties nosaukumvietas, kurās meklēt",
- "search-result-size": "$1 ({{PLURAL:$2|1 vārds|$2 vārdi}})",
- "search-result-category-size": "$1 {{PLURAL:$1|apakšelements|apakšelementi}} ($2 {{PLURAL:$2|apakškategorija|apakškategorijas}}, $3 {{PLURAL:$3|fails|faili}})",
+ "search-result-size": "$1 ({{PLURAL:$2|$2 vārdi|1 vārds|$2 vārdi}})",
+ "search-result-category-size": "$1 {{PLURAL:$1|apakšelementi|apakšelements|apakšelementi}} ($2 {{PLURAL:$2|apakškategorijas|apakškategorija|apakškategorijas}}, $3 {{PLURAL:$3|faili|fails|faili}})",
"search-redirect": "(pāradresēts no $1)",
"search-section": "(sadaļa $1)",
"search-file-match": "(atbilst faila saturam)",
@@ -745,7 +755,7 @@
"search-relatedarticle": "Saistītais",
"searchrelated": "saistītais",
"searchall": "viss",
- "showingresults": "Šobrīd ir {{PLURAL:$1|redzama|redzamas}} '''$1''' {{PLURAL:$1|lapa|lapas}}, sākot ar #'''$2'''.",
+ "showingresults": "Šobrīd ir {{PLURAL:$1|redzamas|redzama|redzamas}} '''$1''' {{PLURAL:$1|lapas|lapa|lapas}}, sākot ar #'''$2'''.",
"search-nonefound": "Nav atrasti pieprasījumam atbilstoši rezultāti.",
"powersearch-legend": "Izvērstā meklēšana",
"powersearch-ns": "Meklēt šajās lapu grupās:",
@@ -767,7 +777,7 @@
"prefs-rc": "Pēdējās izmaiņas",
"prefs-watchlist": "Uzraugāmie raksti",
"prefs-watchlist-days": "Dienu skaits, kuras parādīt uzraugāmo rakstu sarakstā:",
- "prefs-watchlist-days-max": "Ne vairāk kā $1 {{PLURAL:$1|dienu|dienas}}",
+ "prefs-watchlist-days-max": "Ne vairāk kā $1 {{PLURAL:$1|dienas|dienu|dienas}}",
"prefs-watchlist-edits": "Izmaiņu skaits, kuras rādīt izvērstajā uzraugāmo rakstu sarakstā:",
"prefs-watchlist-edits-max": "Ne vairāk kā 1000",
"prefs-watchlist-token": "Uzraugāmo lapu saraksta marķieris:",
@@ -779,14 +789,14 @@
"prefs-rendering": "Izskats",
"saveprefs": "Saglabāt",
"restoreprefs": "Atjaunot noklusētos uzstādījumus (visās sadaļās)",
- "prefs-editing": "Rediģēšana",
+ "prefs-editing": "Labošana",
"rows": "Rindiņu skaits:",
"columns": "Simbolu skaits rindiņā:",
"searchresultshead": "Meklēšana",
"stub-threshold": "Slieksnis <a href=\"#\" class=\"stub\">aizmetņa saites</a> formatēšanai (baiti):",
"stub-threshold-disabled": "Atslēgts",
"recentchangesdays": "Dienu skaits, kuru rādīt pēdējās izmaiņās:",
- "recentchangesdays-max": "Ne vairāk kā $1 {{PLURAL:$1|diena|dienas}}",
+ "recentchangesdays-max": "Ne vairāk kā $1 {{PLURAL:$1|dienas|diena|dienas}}",
"recentchangescount": "Izmaiņu skaits, kuru rāda pēc noklusējuma:",
"prefs-help-recentchangescount": "Šis parametrs attiecas uz pēdējo izmaiņu un hronoloģijas lapām, kā arī uz sistēmas žurnāliem",
"prefs-help-watchlist-token2": "Šī ir slepena atslēga tavam uzraugāmo lapu sarakstam.\nIkvienam, kas to zinās, būs iespēja apskatīt tavu uzraugāmo lapu sarakstu, tāpēc nedalies ar to.\n[[Special:ResetTokens|Spied šeit, lai to atjaunotu]].",
@@ -826,7 +836,7 @@
"yournick": "Tava iesauka (parakstam):",
"prefs-help-signature": "Komentāri diskusiju lapās ir jāparaksta, pievienojot simbolu virkni \"<nowiki>~~~~</nowiki>\", kas tiek automātiski aizstāta ar tavu parakstu un parakstīšanās laiku.",
"badsig": "Kļūdains ''paraksta'' kods; pārbaudi HTML (ja tāds ir lietots).",
- "badsiglength": "Paraksts ir pārāk garš.\nTam ir jābūt īsākam par $1 {{PLURAL:$1|simbolu|simboliem}}.",
+ "badsiglength": "Paraksts ir pārāk garš.\nTam ir jābūt īsākam par $1 {{PLURAL:$1|simboliem|simbolu|simboliem}}.",
"yourgender": "Dzimums:",
"gender-unknown": "Es nevēlos norādīt",
"gender-male": "Viņš labo viki lapas",
@@ -908,6 +918,7 @@
"right-reupload-own": "Pārrakstīt paša augšuplādētu esošu failu",
"right-upload_by_url": "Augšupielādēt failus no URL",
"right-autoconfirmed": "Izmainīt daļēji aizsargātas lapas",
+ "right-writeapi": "Rakstīšanas API lietošana",
"right-delete": "Dzēst lapas",
"right-bigdelete": "Dzēst lapas ar lielām hronoloģijām",
"right-deleterevision": "Dzēst un atjaunot lapu noteiktas versijas",
@@ -981,7 +992,7 @@
"action-userrights-interwiki": "mainīt lietotāju tiesības citās Vikipēdijās",
"action-siteadmin": "bloķēt vai atbloķēt datubāzi",
"action-sendemail": "sūtīt e-pastus",
- "nchanges": "$1 {{PLURAL:$1|izmaiņa|izmaiņas}}",
+ "nchanges": "$1 {{PLURAL:$1|izmaiņas|izmaiņa|izmaiņas}}",
"enhancedrc-history": "vēsture",
"recentchanges": "Pēdējās izmaiņas",
"recentchanges-legend": "Pēdējo izmaiņu iespējas",
@@ -989,8 +1000,8 @@
"recentchanges-noresult": "Norādītajā periodā šiem kritērijiem neatbilst neviena izmaiņa.",
"recentchanges-feed-description": "Sekojiet līdzi jaunākajām izmaiņām vikijā izmantojot šo barotni.",
"recentchanges-label-newpage": "Šī ir jaunizveidota lapa",
- "recentchanges-label-minor": "Šī ir maznozīmīga izmaiņa",
- "recentchanges-label-bot": "Šī ir bota veikta izmaiņa",
+ "recentchanges-label-minor": "Šis ir maznozīmīgs labojums",
+ "recentchanges-label-bot": "Šis ir bota veikts labojums",
"recentchanges-label-unpatrolled": "Šis labojums vēl nav pārbaudīts",
"recentchanges-label-plusminus": "Par tik baitiem tika izmainīts lapas izmērs",
"recentchanges-legend-heading": "'''Apzīmējumi:'''",
@@ -998,11 +1009,23 @@
"rcnotefrom": "Šobrīd redzamas izmaiņas kopš '''$2''' (parādītas ne vairāk par '''$1''').",
"rclistfrom": "Parādīt jaunas izmaiņas kopš $3 $2",
"rcshowhideminor": "$1 maznozīmīgos",
+ "rcshowhideminor-show": "Rādīt",
+ "rcshowhideminor-hide": "Slēpt",
"rcshowhidebots": "$1 botus",
+ "rcshowhidebots-show": "Rādīt",
+ "rcshowhidebots-hide": "Slēpt",
"rcshowhideliu": "$1 reģistrētos lietotājus",
+ "rcshowhideliu-show": "Rādīt",
+ "rcshowhideliu-hide": "Slēpt",
"rcshowhideanons": "$1 anonīmos",
+ "rcshowhideanons-show": "Rādīt",
+ "rcshowhideanons-hide": "Slēpt",
"rcshowhidepatr": "$1 pārbaudītos labojumus",
+ "rcshowhidepatr-show": "Rādīt",
+ "rcshowhidepatr-hide": "Slēpt",
"rcshowhidemine": "$1 manus",
+ "rcshowhidemine-show": "Rādīt",
+ "rcshowhidemine-hide": "Slēpt",
"rclinks": "Parādīt pēdējās $1 izmaiņas pēdējās $2 dienās.<br />$3",
"diff": "izmaiņas",
"hist": "hronoloģija",
@@ -1011,9 +1034,10 @@
"minoreditletter": "m",
"newpageletter": "J",
"boteditletter": "b",
- "number_of_watching_users_pageview": "[šo lapu uzrauga $1 {{PLURAL:$1|lietotājs|lietotāji}}]",
+ "number_of_watching_users_pageview": "[šo lapu uzrauga $1 {{PLURAL:$1|lietotāji|lietotājs|lietotāji}}]",
"rc_categories": "Ierobežot uz kategorijām (atdalīt ar \"|\")",
"rc_categories_any": "Jebkas",
+ "rc-change-size-new": "$1 {{PLURAL:$1|baiti|baits|baiti}} pēc izmaiņām",
"newsectionsummary": "/* $1 */ jauna sadaļa",
"rc-enhanced-expand": "Skatīt detaļas",
"rc-enhanced-hide": "Paslēpt detaļas",
@@ -1030,7 +1054,7 @@
"reuploaddesc": "Atcelt augšupielādi un atgriezties pie augšupielādes veidnes.",
"upload-tryagain": "Iesniegt izmainīto faila aprakstu",
"uploadnologin": "Neesi iegājis",
- "uploadnologintext": "Tev jābūt [[Special:UserLogin|iegājušam]], lai augšuplādētu failus.",
+ "uploadnologintext": "Lūdzu, $1, lai augšupielādētu failus.",
"upload_directory_missing": "Augšupielādes direktorijs ($1) ir pazudis, un to tīmekļa serveris nevar izveidot.",
"upload_directory_read_only": "Augšupielādes direktoriju ($1) tīmekļa serveris nevar labot.",
"uploaderror": "Augšupielādes kļūda",
@@ -1056,7 +1080,7 @@
"filetype-mime-mismatch": "Faila paplašinājums \".$1\" neatbilst noteiktajam MIME tipam ($2).",
"filetype-badmime": "Šeit nav atļauts augšupielādēt failus ar MIME tipu \"$1\".",
"filetype-bad-ie-mime": "Nevar augšupielādēt šo failu, jo Internet Explorer to uzskatītu kā \"$1\", kas ir neatļauts un potenciāli bīstams faila tips.",
- "filetype-unwanted-type": "'''\".$1\"''' ir nevēlams failu tips. {{PLURAL:$3|Ieteicamais faila tips|Ieteicamie failu tipi}} ir $2.",
+ "filetype-unwanted-type": "'''\".$1\"''' ir nevēlams failu tips. {{PLURAL:$3|Ieteicamie failu tipi|Ieteicamais faila tips|Ieteicamie failu tipi}} ir $2.",
"filetype-banned-type": "'''\".$1\"''' nav atļautais failu tips. {{PLURAL:$3|Atļautais faila tips|Atļautie failu tipi}} ir $2.",
"filetype-missing": "Failam nav paplašinājuma (piem. tāda kā \".jpg\").",
"empty-file": "Fails, ko Tu iesniedzi, bija tukšs.",
@@ -1077,7 +1101,7 @@
"fileexists-extension": "Pastāv fails ar līdzīgu nosaukumu: [[$2|thumb]]\n* Augšupielādējamā faila nosaukums: <strong>[[:$1]]</strong>\n* Esošā faila nosaukums: <strong>[[:$2]]</strong>\nLūdzu, izvēlieties citu nosaukumu.",
"file-thumbnail-no": "Faila vārds sākas ar <strong>$1</strong>.\nIzskatās, ka šis ir samazināts attēls ''(thumbnail)''.\nJa tev ir šis pats attēls pilnā izmērā, augšuplādē to, ja nav, tad nomaini faila vārdu.",
"fileexists-forbidden": "Fails ar šādu nosaukumu jau eksistē un to nevar aizvietot ar jaunu.\nJa jūs joprojām gribat augšupielādēt šo failu, tad mēģiniet vēlreiz ar citu faila nosaukumu.\n[[File:$1|thumb|center|$1]]",
- "file-exists-duplicate": "Fails ir kopija {{PLURAL:$1|šim failam|šiem failiem}}:",
+ "file-exists-duplicate": "Fails ir kopija {{PLURAL:$1|šiem failiem|šim failam|šiem failiem}}:",
"uploadwarning": "Augšupielādes brīdinājums",
"uploadwarning-text": "Lūdzu, pārveido zemāk esošo faila aprakstu un mēģini vēlreiz.",
"savefile": "Saglabāt failu",
@@ -1178,7 +1202,7 @@
"filehist-filesize": "Faila izmērs",
"filehist-comment": "Komentārs",
"imagelinks": "Faila lietojums",
- "linkstoimage": "{{PLURAL:$1|Šajā lapā ir saite|Šajās $1 lapās ir saites}} uz šo failu:",
+ "linkstoimage": "{{PLURAL:$1|Šajās $1 lapās ir saites|Šajā lapā ir saite|Šajās $1 lapās ir saites}} uz šo failu:",
"nolinkstoimage": "Nevienā lapā nav norāžu uz šo attēlu.",
"morelinkstoimage": "Skatīt [[Special:WhatLinksHere/$1|vairāk saites]] uz šo failu.",
"linkstoimage-redirect": "$1 (faila pāradresācija) $2",
@@ -1226,11 +1250,12 @@
"randompage": "Nejauša lapa",
"randomincategory": "Nejauša lapa kategorijā",
"randomincategory-invalidcategory": "\"$1\" nav derīgs kategorijas nosaukums.",
+ "randomincategory-category": "Kategorija:",
+ "randomincategory-legend": "Nejauša lapa kategorijā",
"randomredirect": "Nejauša pāradresācijas lapa",
"statistics": "Statistika",
"statistics-header-pages": "Lapu statistika",
"statistics-header-edits": "Izmaiņu statistika",
- "statistics-header-views": "Apskatīt statistiku",
"statistics-header-users": "Statistika par lietotājiem",
"statistics-header-hooks": "Cita statistika",
"statistics-articles": "Satura lapas",
@@ -1239,12 +1264,9 @@
"statistics-files": "Augšuplādētie faili",
"statistics-edits": "Lapu izmaiņas kopš {{grammar:ģenitīvs{{SITENAME}}}} izveidošanas",
"statistics-edits-average": "Vidējais izmaiņu skaits uz lapu",
- "statistics-views-total": "Skatījumi kopā",
- "statistics-views-peredit": "Skatījumu skaits uz labojumu",
"statistics-users": "Reģistrēti lietotāji",
"statistics-users-active": "Aktīvi lietotāji",
- "statistics-users-active-desc": "Lietotāji, kas ir veikuši jebkādu darbību {{PLURAL:$1|iepriekšējā dienā|iepriekšējās $1 dienās}}",
- "statistics-mostpopular": "Visvairāk skatītās lapas",
+ "statistics-users-active-desc": "Lietotāji, kas ir veikuši jebkādu darbību {{PLURAL:$1|iepriekšējās $1 dienās|iepriekšējā $1 dienā|iepriekšējās $1 dienās}}",
"pageswithprop-prop": "Īpašības nosaukums:",
"pageswithprop-submit": "Aiziet",
"doubleredirects": "Divkāršas pāradresācijas lapas",
@@ -1261,14 +1283,14 @@
"withoutinterwiki-legend": "Prefikss",
"withoutinterwiki-submit": "Rādīt",
"fewestrevisions": "Lapas, kurām ir vismazāk veco versiju",
- "nbytes": "$1 {{PLURAL:$1|baits|baitu}}",
- "ncategories": "$1 {{PLURAL:$1|kategorija|kategorijas}}",
- "nlinks": "$1 {{PLURAL:$1|saite|saites}}",
- "nmembers": "$1 {{PLURAL:$1|lapa|lapas}}",
- "nrevisions": "$1 {{PLURAL:$1|versija|versijas}}",
- "nviews": "skatīta $1 {{PLURAL:$1|reizi|reizes}}",
- "nimagelinks": "Izmantots $1 {{PLURAL:$1|lapā|lapās}}",
- "ntransclusions": "izmantots $1 {{PLURAL:$1|lapā|lapās}}",
+ "nbytes": "$1 {{PLURAL:$1|baitu|baits|baitu}}",
+ "ncategories": "$1 {{PLURAL:$1|kategorijas|kategorija|kategorijas}}",
+ "nlinks": "$1 {{PLURAL:$1|saites|saite|saites}}",
+ "nmembers": "$1 {{PLURAL:$1|lapas|lapa|lapas}}",
+ "nrevisions": "$1 {{PLURAL:$1|versijas|versija|versijas}}",
+ "nviews": "skatīta $1 {{PLURAL:$1|reizes|reizi|reizes}}",
+ "nimagelinks": "Izmantots $1 {{PLURAL:$1|lapās|lapā|lapās}}",
+ "ntransclusions": "izmantots $1 {{PLURAL:$1|lapās|lapā|lapās}}",
"specialpage-empty": "Šim ziņojumam nav rezultātu.",
"lonelypages": "Lapas bez saitēm uz tām",
"uncategorizedpages": "Nekategorizētās lapas",
@@ -1277,7 +1299,6 @@
"uncategorizedtemplates": "Nekategorizētās veidnes",
"unusedcategories": "Neizmantotas kategorijas",
"unusedimages": "Neizmantoti attēli",
- "popularpages": "Populārākās lapas",
"wantedcategories": "Sarkanas kategorijas",
"wantedpages": "Pieprasītās lapas",
"wantedfiles": "Vajadzīgie faili",
@@ -1307,7 +1328,7 @@
"listusers": "Lietotāju uzskaitījums",
"listusers-editsonly": "Rādīt tikai lietotājus, kas ir izdarījuši kādas izmaiņas",
"listusers-creationsort": "Kārtot pēc izveidošanas datuma",
- "usereditcount": "$1 {{PLURAL:$1|izmaiņa|izmaiņas}}",
+ "usereditcount": "$1 {{PLURAL:$1|izmaiņas|izmaiņa|izmaiņas}}",
"usercreated": "{{GENDER:$3|Izveidoja}} $1 plkst. $2",
"newpages": "Jaunas lapas",
"newpages-username": "Lietotājs:",
@@ -1318,12 +1339,11 @@
"notargettitle": "Bez mērķa",
"nopagetitle": "Nav tādas mērķa lapas",
"nopagetext": "Mērķa lapa, ko Jūs norādījāt, nepastāv.",
- "pager-newer-n": "{{PLURAL:$1|$1 jaunāku|$1 jaunākas}}",
- "pager-older-n": "{{PLURAL:$1|$1 vecāku|$1 vecākas}}",
+ "pager-newer-n": "{{PLURAL:$1|$1 jaunākas|$1 jaunāku|$1 jaunākas}}",
+ "pager-older-n": "{{PLURAL:$1|$1 vecākas|$1 vecāku|$1 vecākas}}",
"querypage-disabled": "Šī īpašā lapā ir atspējota veiktspējas iemeslu dēļ.",
"booksources": "Grāmatu avoti",
"booksources-search-legend": "Meklēt grāmatu avotus",
- "booksources-go": "Meklēt",
"specialloguserlabel": "Izpildītājs:",
"speciallogtitlelabel": "Mērķis (nosaukums vai lietotājs):",
"log": "Reģistri",
@@ -1344,7 +1364,7 @@
"allpages-hide-redirects": "Paslēpt pāradresācijas",
"cachedspecial-refresh-now": "Skatīt jaunāko.",
"categories": "Kategorijas",
- "categoriespagetext": "{{PLURAL:$1|Šī kategorija|Šīs kategorijas}} satur lapas vai failus.\nŠeit nav parādītas [[Special:UnusedCategories|neizmantotās kategorijas]].\nSkatīt arī [[Special:WantedCategories|''sarkanās'' kategorijas]].",
+ "categoriespagetext": "{{PLURAL:$1|Šīs kategorijas|Šī kategorija|Šīs kategorijas}} satur lapas vai failus.\nŠeit nav parādītas [[Special:UnusedCategories|neizmantotās kategorijas]].\nSkatīt arī [[Special:WantedCategories|''sarkanās'' kategorijas]].",
"categoriesfrom": "Parādīt kategorijas sākot ar:",
"special-categories-sort-count": "kārtot pēc skaita",
"special-categories-sort-abc": "kārtot alfabētiskā secībā",
@@ -1363,7 +1383,8 @@
"listusers-blocked": "(bloķēts)",
"activeusers": "Aktīvo lietotāju saraksts",
"activeusers-intro": "Šis ir lietotāju saraksts, kas veikuši kādu darbību {{PLURAL:daudzskaitlī:$1|pēdējā|pēdējās}} $1 {{PLURAL:daudzskaitlī:$1|dienā|dienās}}.",
- "activeusers-from": "Parādīt lietotājus sākot ar:",
+ "activeusers-count": "$1 {{PLURAL:$1|darbību|darbība|darbības}} {{PLURAL:$3|pēdējās $3 dienās|pēdējā $3 dienā|pēdējās $3 dienās}}",
+ "activeusers-from": "Parādīt lietotājus, sākot ar:",
"activeusers-hidebots": "Paslēpt botus",
"activeusers-hidesysops": "Paslēpt administratorus",
"activeusers-noresult": "Neviens lietotājs nav atrasts.",
@@ -1373,8 +1394,8 @@
"listgrouprights-rights": "Tiesības",
"listgrouprights-helppage": "Help:Grupu tiesības",
"listgrouprights-members": "(dalībnieku saraksts)",
- "listgrouprights-addgroup": "Pievienot {{PLURAL:$2|grupu|grupas}}: $1",
- "listgrouprights-removegroup": "Noņemt {{PLURAL:$2|grupu|grupas}}: $1",
+ "listgrouprights-addgroup": "Pievienot {{PLURAL:$2|grupas|grupu|grupas}}: $1",
+ "listgrouprights-removegroup": "Noņemt {{PLURAL:$2|grupas|grupu|grupas}}: $1",
"listgrouprights-addgroup-all": "Pievienot visas grupas",
"listgrouprights-removegroup-all": "Noņemt visas grupas",
"listgrouprights-addgroup-self-all": "Pievienot visas grupas savam kontam",
@@ -1427,7 +1448,7 @@
"watchlist-details": "(Tu uzraugi $1 {{PLURAL:$1|lapu|lapas}}, neieskaitot diskusiju lapas.)",
"wlheader-enotif": "E-pasta paziņojumi ir ieslēgti.",
"wlheader-showupdated": "Lapas, kuras ir tikušas izmainītas, kopš tu tās pēdējoreiz apskatījies, te rādās ar '''pustrekniem''' burtiem",
- "wlshowlast": "Parādīt izmaiņas pēdējo $1 stundu laikā vai $2 dienu laikā, vai arī $3.",
+ "wlshowlast": "Parādīt izmaiņas pēdējo $1 stundu laikā vai $2 dienu laikā, vai arī .",
"watchlist-options": "Uzraugāmo rakstu saraksta opcijas",
"watching": "Uzrauga...",
"unwatching": "Neuzrauga...",
@@ -1446,7 +1467,7 @@
"exbeforeblank": "lapas saturs pirms satura dzēšanas bija šāds: '$1'",
"delete-confirm": "Dzēst \"$1\"",
"delete-legend": "Dzēšana",
- "historywarning": "'''Brīdinājums:''' Lapai, ko tu gatavojies dzēst, ir vēsture ar aptuveni $1 {{PLURAL:$1|versiju|versijām}}:",
+ "historywarning": "'''Brīdinājums:''' Lapai, ko tu gatavojies dzēst, ir vēsture ar aptuveni $1 {{PLURAL:$1|versijām|versiju|versijām}}:",
"confirmdeletetext": "Tu tūlīt no datubāzes dzēsīsi lapu vai attēlu, kā arī to iepriekšējās versijas. Lūdzu, apstiprini, ka tu tiešām to vēlies darīt, ka tu apzinies sekas un ka tu to dari saskaņā ar [[{{MediaWiki:Policy-url}}|vadlīnijām]].",
"actioncomplete": "Darbība pabeigta",
"actionfailed": "Darbība neizdevās",
@@ -1460,16 +1481,15 @@
"deletereasonotherlist": "Cits iemesls",
"deletereason-dropdown": "* Izplatīti dzēšanas iemesli\n** Spams\n** Vandālisms\n** Autortiesību pārkāpums\n** Autora pieprasījums\n** Nederīga pāradresācija",
"delete-edit-reasonlist": "Izmainīt dzēšanas iemeslus",
- "delete-toobig": "Šai lapai ir liela izmaiņu hronoloģija, vairāk nekā $1 {{PLURAL:$1|versija|versijas}}.\nŠādu lapu dzēšana ir atslēgta, lai novērstu nejaušus traucējumus {{grammar:lokatīvs|{{SITENAME}}}}.",
+ "delete-toobig": "Šai lapai ir liela izmaiņu hronoloģija, vairāk nekā $1 {{PLURAL:$1|versijas|versija|versijas}}.\nŠādu lapu dzēšana ir atslēgta, lai novērstu nejaušus traucējumus {{grammar:lokatīvs|{{SITENAME}}}}.",
"deleting-backlinks-warning": "'''Brīdinājums:''' uz lapu, ko grasies izdzēst, ved [[Special:WhatLinksHere/{{FULLPAGENAME}}|saites no citām lapām]].",
"rollback": "Novērst labojumus",
- "rollback_short": "Novērst",
"rollbacklink": "novērst",
- "rollbacklinkcount": "atcelt $1 {{PLURAL:$1|labojumu|labojumus}}",
- "rollbacklinkcount-morethan": "atcelt vairāk kā $1 {{PLURAL:$1|labojumu|labojumus}}",
+ "rollbacklinkcount": "atcelt $1 {{PLURAL:$1|labojumus|labojumu|labojumus}}",
+ "rollbacklinkcount-morethan": "atcelt vairāk kā $1 {{PLURAL:$1|labojumus|labojumu|labojumus}}",
"rollbackfailed": "Novēršana neizdevās",
"cantrollback": "Nav iespējams novērst labojumu; iepriekšējais labotājs ir vienīgais lapas autors.",
- "alreadyrolled": "Nav iespējams novērst pēdējās izmaiņas, ko lapā [[:$1]] saglabāja [[User:$2|$2]] ([[User talk:$2|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]). Kāds cits jau ir rediģējis šo lapu vai novērsis izmaiņas.\n\nPēdējās izmaiņas saglabāja [[User:$3|$3]] ([[User talk:$3|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+ "alreadyrolled": "Nav iespējams novērst pēdējās izmaiņas, ko lapā [[:$1]] saglabāja [[User:$2|$2]] ([[User talk:$2|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]). Kāds cits jau ir labojis šo lapu vai novērsis izmaiņas.\n\nPēdējās izmaiņas saglabāja [[User:$3|$3]] ([[User talk:$3|diskusija]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"editcomment": "Attiecīgās izmaiņas kopsavilkums bija: \"''$1''\".",
"revertpage": "Novērsu izmaiņas, ko izdarīja [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]), atjaunoju versiju, ko saglabāja [[User:$1|$1]]",
"revertpage-nouser": "Novērsu (lietotājvārds slēpts) izmaiņas, atjaunoju [[User:$1|$1]] versiju.",
@@ -1492,7 +1512,7 @@
"protect_expiry_old": "Beigu termiņs ir pagātnē.",
"protect-text": "Šeit var apskatīties un izmainīt lapas '''$1''' aizsardzības līmeni.",
"protect-locked-access": "Jūsu kontam nav atļaujas mainīt lapas aizsardzības pakāpi.\nPašreizējie lapas '''$1''' iestatījumi ir:",
- "protect-cascadeon": "Šī lapa pašlaik ir aizsargāta, jo tā ir iekļauta {{PLURAL:$1|šajā lapā|šajās lapās}} (mainot šīs lapas aizsardzības līmeni aizsardzība netiks noņemta):",
+ "protect-cascadeon": "Šī lapa pašlaik ir aizsargāta, jo tā ir iekļauta {{PLURAL:$1|šajās lapās|šajā lapā|šajās lapās}} (mainot šīs lapas aizsardzības līmeni aizsardzība netiks noņemta):",
"protect-default": "Atļaut visiem lietotājiem",
"protect-fallback": "Atļaut tikai lietotājiem ar \"$1\" atļauju",
"protect-level-autoconfirmed": "Atļaut tikai autoapstiprinātiem lietotājiem",
@@ -1516,7 +1536,7 @@
"minimum-size": "Mazākais izmērs",
"maximum-size": "Lielākais izmērs:",
"pagesize": "(baiti)",
- "restriction-edit": "Izmainīt",
+ "restriction-edit": "Labot",
"restriction-move": "Pārvietot",
"restriction-create": "Izveidot",
"restriction-upload": "Augšupielādēt",
@@ -1527,10 +1547,10 @@
"undeletepage": "Skatīt un atjaunot dzēstās lapas",
"undeletepagetitle": "'''Šeit ir [[:$1|$1]] izdzēstās versijas'''.",
"viewdeletedpage": "Skatīt izdzēstās lapas",
- "undeletepagetext": "{{PLURAL:$1|Šī lapa ir dzēsta, bet ir saglabāta arhīvā. To ir iespējams atjaunot|Šīs $1 lapas ir dzēstas, bet ir saglabātas arhīvā. Tās ir iespējams atjaunot}}, bet ņemiet vērā, ka arhīvs reizēm tiek tīrīts.",
+ "undeletepagetext": "{{PLURAL:$1|Šīs $1 lapas ir dzēstas, bet ir saglabātas arhīvā. Tās ir iespējams atjaunot|Šī lapa ir dzēsta, bet ir saglabāta arhīvā. To ir iespējams atjaunot|Šīs $1 lapas ir dzēstas, bet ir saglabātas arhīvā. Tās ir iespējams atjaunot}}, bet ņemiet vērā, ka arhīvs reizēm tiek tīrīts.",
"undelete-fieldset-title": "Atjaunot versijas",
"undeleteextrahelp": "Lai atjaunotu visu lapu, atstāj visus ķekšus (pie \"Lapas hronoloģija\") neieķeksētus uz uzspied uz '''''Atjaunot!'''''.\nLai atjaunotu tikai noteiktas versijas, ieķeksē vajadzīgās versijas un spied uz '''''Atjaunot!'''''. Uzspiešana uz '''''Notīrīt''''' notīrīs komentāru lauku un visus keķšus.",
- "undeleterevisions": "$1 {{PLURAL:$1|versija|versijas}} {{PLURAL:$1|arhivēta|arhivētas}}",
+ "undeleterevisions": "$1 {{PLURAL:$1|versijas|versija|versijas}} {{PLURAL:$1|arhivētas|arhivēta|arhivētas}}",
"undeletehistory": "Ja tu atjauno lapu, visas versijas tiks atjaunotas tās hronoloģijā.\nJa pēc dzēšanas ir izveidota jauna lapa ar tādu pašu nosaukumu, atjaunotās versijas tiks ievietotas lapas hronoloģijā attiecīgā secībā un konkrētās lapas pašreizējā versija netiks automātiski nomainīta.",
"undeleterevdel": "Atjaunošana nenotiks, ja tas izraisīs jaunākās versijas izdzēšanu.\nŠādos gadījumos ir vai nu jāizņem ķeksis no jaunākās versijas, vai arī jāatslēpj jaunākā versija.",
"undeletehistorynoadmin": "Šī lapa ir tikusi izdzēsta.\nDzēšanas iemesls ir redzams apakšā, kopsavilkumā, kopā ar informāciju par lietotājiem, kas bija rediģējuši šo lapu pirs tās izdzēšanas.\nŠo izdzēsto versiju teksts ir pieejams tikai administratoriem.",
@@ -1542,9 +1562,9 @@
"undeleteviewlink": "skatīt",
"undeleteinvert": "Izvēlēties pretēji",
"undeletecomment": "Iemesls:",
- "undeletedrevisions": "$1 {{PLURAL:$1|versija|versijas}} {{PLURAL:$1|atjaunota|atjaunotas}}",
- "undeletedrevisions-files": "{{PLURAL:$1|1 versija|$1 versijas}} un {{PLURAL:$2|1 fails|$2 faili}} atjaunoti",
- "undeletedfiles": "{{PLURAL:$1|1 fails atjaunots|$1 faili atjaunoti}}",
+ "undeletedrevisions": "$1 {{PLURAL:$1|versijas|versija|versijas}} {{PLURAL:$1|atjaunotas|atjaunota|atjaunotas}}",
+ "undeletedrevisions-files": "{{PLURAL:$1|$1 versijas|1 versija|$1 versijas}} un {{PLURAL:$2|$2 faili|1 fails|$2 faili}} atjaunoti",
+ "undeletedfiles": "{{PLURAL:$1|$1 faili atjaunoti|$1 fails atjaunots|$1 faili atjaunoti}}",
"cannotundelete": "Atjaunošana neizdevās:\n$1",
"undeletedpage": "'''$1 tika atjaunots'''\n\n[[Special:Log/delete|Dzēšanas reģistrā]] ir informācija par pēdējām dzēšanām un atjaunošanām.",
"undelete-header": "Nesen dzēstajām lapām skatīt [[Special:Log/delete|dzēšanas reģistru]].",
@@ -1592,8 +1612,8 @@
"isredirect": "pāradresācijas lapa",
"istemplate": "izsaukts",
"isimage": "faila saite",
- "whatlinkshere-prev": "{{PLURAL:$1|iepriekšējo|iepriekšējos $1}}",
- "whatlinkshere-next": "{{PLURAL:$1|nākamo|nākamos $1}}",
+ "whatlinkshere-prev": "{{PLURAL:$1|iepriekšējos $1|iepriekšējo|iepriekšējos $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|nākamos $1|nākamo|nākamos $1}}",
"whatlinkshere-links": "← saites",
"whatlinkshere-hideredirs": "$1 pāradresācijas",
"whatlinkshere-hidetrans": "$1 lapas, kurās šī lapa izmantota kā veidne",
@@ -1646,7 +1666,7 @@
"blocklist-reason": "Iemesls",
"ipblocklist-submit": "Meklēt",
"ipblocklist-localblock": "Vietējais bloks",
- "ipblocklist-otherblocks": " {{PLURAL:$1|Cita|Citas}} {{PLURAL:$1|bloķēšana|bloķēšanas}}",
+ "ipblocklist-otherblocks": " {{PLURAL:$1|Citas|Cita|Citas}} {{PLURAL:$1|bloķēšanas|bloķēšana|bloķēšanas}}",
"infiniteblock": "bezgalīgs",
"expiringblock": "beidzas $1 $2",
"anononlyblock": "tikai anon.",
@@ -1678,7 +1698,7 @@
"ipb_expiry_temp": "Slēpto lietotājvārdu bloķēšanai jābūt beztermiņa.",
"ipb_already_blocked": "\"$1\" jau ir bloķēts",
"ipb-needreblock": "$1 jau ir bloķēts.\nVai tu gribi izmainīt bloka uzstādījumus?",
- "ipb-otherblocks-header": "{{PLURAL:$1|Cits bloks|Citi bloki}}",
+ "ipb-otherblocks-header": "{{PLURAL:$1|Citi bloki|Cits bloks|Citi bloki}}",
"unblock-hideuser": "Šo lietotāju nevar atbloķēt, jo tā lietotājvārds ir paslēpts.",
"ipb_cant_unblock": "Kļūda: Bloka ID $1 nav atrasts.\nTas, iespējams, jau ir atbloķēts.",
"ipb_blocked_as_range": "Kļūda: IP $1 nav bloķēta tieši, tāpēc to nevar atbloķēt.\nTā ir bloķēta kā daļa no IP adrešu diapazona $2, kuru var atbloķēt.",
@@ -1724,8 +1744,8 @@
"movepage-page-unmoved": "Lapu $1 nevarēja pārvietot uz $2.",
"movelogpage": "Pārvietošanas reģistrs",
"movelogpagetext": "Lapu pārvietošanas (pārdēvēšanas) reģistrs.",
- "movesubpage": "{{PLURAL:$1|Apakšlapa|Apakšlapas}}",
- "movesubpagetext": "Šai lapai ir $1 {{PLURAL:$1|apakšlapa|apakšlapas}}, kas redzamas zemāk.",
+ "movesubpage": "{{PLURAL:$1|Apakšlapas|Apakšlapa|Apakšlapas}}",
+ "movesubpagetext": "Šai lapai ir $1 {{PLURAL:$1|apakšlapas|apakšlapa|apakšlapas}}, kas redzamas zemāk.",
"movenosubpage": "Šai lapai nav apakšlapu.",
"movereason": "Iemesls:",
"revertmove": "atcelt",
@@ -1793,9 +1813,9 @@
"import-upload-filename": "Faila nosaukums:",
"import-comment": "Komentārs:",
"importstart": "Importē lapas...",
- "import-revision-count": "$1 {{PLURAL:$1|versija|versijas}}",
+ "import-revision-count": "$1 {{PLURAL:$1|versijas|versija|versijas}}",
"importnopages": "Nav lapu, ko importēt.",
- "imported-log-entries": "{{PLURAL:$1|Importētais|Importētie}} $1 {{PLURAL:$1|reģistra ieraksts|reģistra ieraksti}}.",
+ "imported-log-entries": "{{PLURAL:$1|Importētie|Importētais|Importētie}} $1 {{PLURAL:$1|reģistra ieraksti|reģistra ieraksts|reģistra ieraksti}}.",
"importfailed": "Importēšana neizdevās: <nowiki>$1</nowiki>",
"importunknownsource": "Nezināms importēšanas avota veids",
"importcantopen": "Nevarēja atvērt importējamo failu",
@@ -1815,12 +1835,9 @@
"import-invalid-interwiki": "Nevar importēt no norādītās viki.",
"importlogpage": "Importēšanas reģistrs",
"importlogpagetext": "Administratīvās lapu importēšanas no citām Vikipēdijām ar lapas hronoloģiju.",
- "import-logentry-upload": "importēts [[$1]], izmantojot failu augšupielādi",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|versija|versijas}}",
- "import-logentry-interwiki": "starpvikizēts $1",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versija|versijas}} no $2",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|versijas|versija|versijas}}",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versijas|versija|versijas}} no $2",
"javascripttest": "JavaScript testēšana",
- "javascripttest-title": "Darbina $1 testus",
"tooltip-pt-userpage": "Tava lietotāja lapa",
"tooltip-pt-anonuserpage": "Manas IP adreses lietotāja lapa",
"tooltip-pt-mytalk": "Tava diskusiju lapa",
@@ -1831,7 +1848,7 @@
"tooltip-pt-login": "Aicinām tevi ieiet {{grammar:lokatīvs|{{SITENAME}}}}, tomēr tas nav obligāti.",
"tooltip-pt-logout": "Iziet",
"tooltip-ca-talk": "Diskusija par šī raksta lapu",
- "tooltip-ca-edit": "Izmainīt šo lapu. Lūdzam izmantot pirmskatu pirms lapas saglabāšanas.",
+ "tooltip-ca-edit": "Labot šo lapu. Lūdzam izmantot pirmskatu pirms lapas saglabāšanas.",
"tooltip-ca-addsection": "Sākt jaunu sadaļu",
"tooltip-ca-viewsource": "Šī lapa ir aizsargāta. Tu vari apskatīties tās izejas kodu.",
"tooltip-ca-history": "Šīs lapas iepriekšējās versijas.",
@@ -1885,14 +1902,14 @@
"tooltip-undo": "\"Atgriezt\" atgriež šīs izmaiņas un atver labošanas formu priekšskatījuma veidā.\nTas atļauj pievienot iemeslu kopsavilkumā.",
"tooltip-preferences-save": "Saglabāt iestatījumus",
"tooltip-summary": "Ievadiet īsu kopsavilkumu",
- "anonymous": "{{PLURAL:$1|Anonīmais {{grammar:ģenitīvs|{{SITENAME}}}} lietotājs|Anonīmie {{grammar:ģenitīvs|{{SITENAME}}}} lietotāji}}",
+ "anonymous": "{{PLURAL:$1|{{SITENAME|Anonīmais {{grammar:ģenitīvs|{{SITENAME}}}} lietotājs|Anonīmie {{grammar:ģenitīvs|{{SITENAME}}}} lietotāji}}",
"siteuser": "{{grammar:ģenitīvs|{{SITENAME}}}} lietotājs $1",
"anonuser": "{{SITENAME}} anonīms lietotājs $1",
"lastmodifiedatby": "Šo lapu pēdējoreiz izmainīja $3, $2, $1.",
"othercontribs": "Balstototies uz $1 darbu.",
"others": "citi",
- "siteusers": "{{SITENAME}} {{PLURAL:$2|lietotāja|lietotāju}} $1",
- "anonusers": "{{SITENAME}} anonīma {{PLURAL:$2|lietotāja|lietotāju}} $1",
+ "siteusers": "{{SITENAME}} {{PLURAL:$2|lietotāju|lietotāja|lietotāju}} $1",
+ "anonusers": "{{SITENAME}} anonīma {{PLURAL:$2|lietotāju|lietotāja|lietotāju}} $1",
"creditspage": "Lapas autori",
"nocredits": "Šai lapa nav pieejama informācija par autoriem.",
"spamprotectiontitle": "Spama filtrs",
@@ -1909,7 +1926,6 @@
"pageinfo-length": "Lapas garums (baitos)",
"pageinfo-article-id": "Lapas ID",
"pageinfo-language": "Lappuses satura valoda",
- "pageinfo-views": "Skatījumu skaits",
"pageinfo-watchers": "Lapas uzraudzītāju skaits",
"pageinfo-redirects-name": "Pāradresāciju skaits uz šo lapu",
"pageinfo-subpages-name": "Šīs lapas apakšlapas",
@@ -1948,22 +1964,22 @@
"mediawarning": "'''Brīdinājums''': Šis faila tips var saturēt ļaunprātīgu kodu, kuru izpildot, tava datora darbība var tikt traucēta.",
"imagemaxsize": "Attēlu apraksta lapās parādāmo attēlu maksimālais izmērs:",
"thumbsize": "Sīkbildes izmērs:",
- "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|lapa|lapas}}",
+ "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|lapu|lapa|lapas}}",
"file-info": "faila izmērs: $1, MIME tips: $2",
"file-info-size": "$1 × $2 pikseļi, faila izmērs: $3, MIME tips: $4",
- "file-info-size-pages": "$1 × $2 pikseļi, faila izmērs: $3, MIME tips: $4, $5 {{PLURAL:$5|lapa|lapas}}",
+ "file-info-size-pages": "$1 × $2 pikseļi, faila izmērs: $3, MIME tips: $4, $5 {{PLURAL:$5|lapas|lapa|lapas}}",
"file-nohires": "Augstāka izšķirtspēja nav pieejama.",
"svg-long-desc": "SVG fails, definētais izmērs $1 × $2 pikseļi, faila izmērs: $3",
"svg-long-error": "Nederīgs SVG fails: $1",
"show-big-image": "Sākotnējais fails",
"show-big-image-preview": "Šī priekšskata izmērs: $1.",
- "show-big-image-other": "{{PLURAL:$2|Cits izmērs|Citi izmēri}}: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Citi izmēri|Cits izmērs|Citi izmēri}}: $1.",
"show-big-image-size": "$1 × $2 pikseļi",
- "file-info-gif-frames": "$1 {{PLURAL:$1|kadrs|kadri}}",
- "file-info-png-repeat": "spēlēts $1 {{PLURAL:$1|reizi|reizes}}",
- "file-info-png-frames": "$1 {{PLURAL:$1|kadrs|kadri}}",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|kadri|kadrs|kadri}}",
+ "file-info-png-repeat": "spēlēts $1 {{PLURAL:$1|reizes|reizi|reizes}}",
+ "file-info-png-frames": "$1 {{PLURAL:$1|kadri|kadrs|kadri}}",
"newimages": "Jauno attēlu galerija",
- "imagelisttext": "Šobrīd redzams $1 {{PLURAL:$1|attēla|attēlu}} uzskaitījums, kas sakārtots $2.",
+ "imagelisttext": "Šobrīd redzams $1 {{PLURAL:$1|attēlu|attēla|attēlu}} uzskaitījums, kas sakārtots $2.",
"newimages-summary": "Šeit var apskatīties pēdējos augšuplādētos failus šajā Vikipēdijā",
"newimages-legend": "Filtrs",
"newimages-label": "Faila nosaukums (vai tā daļa):",
@@ -1972,10 +1988,10 @@
"ilsubmit": "Meklēt",
"bydate": "<b>pēc datuma</b>",
"sp-newimages-showfrom": "Rādīt jaunos attēlus sākot no $1, $2",
- "seconds": "{{PLURAL:$1|$1 sekunde|$1 sekundes}}",
- "minutes": "{{PLURAL:$1|$1 minūte|$1 minūtes}}",
- "hours": "{{PLURAL:$1|$1 stunda|$1 stundas}}",
- "days": "{{PLURAL:$1|$1 diena|$1 dienas}}",
+ "seconds": "{{PLURAL:$1|$1 sekundes|$1 sekunde|$1 sekundes}}",
+ "minutes": "{{PLURAL:$1|$1 minūtes|$1 minūte|$1 minūtes}}",
+ "hours": "{{PLURAL:$1|$1 stundas|$1 stunda|$1 stundas}}",
+ "days": "{{PLURAL:$1|$1 dienas|$1 diena|$1 dienas}}",
"ago": "pirms $1",
"bad_image_list": "Formāts:\n\nTiek ņemti vērā tikai ieraksti rindiņā kas sākas ar *\nPirmajai saitei rindiņā ir jābūt uz attiecīgo failu\nJebkuras sekojošas saites tiks uzskatītas par izņēmumiem t.i. lapām kurās fails drīkt tikt izmantots",
"metadata": "Metadati",
@@ -2190,8 +2206,8 @@
"exif-gpslatitude-s": "Dienvidu platums",
"exif-gpslongitude-e": "Austrumu garums",
"exif-gpslongitude-w": "Rietumu garums",
- "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metrs|metri}} virs jūras līmeņa",
- "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metrs|metri}} zem jūras līmeņa",
+ "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metri|metrs|metri}} virs jūras līmeņa",
+ "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metri|metrs|metri}} zem jūras līmeņa",
"exif-gpsmeasuremode-2": "Divdimensionāls mērījums",
"exif-gpsmeasuremode-3": "Trīsdimensionāls mērījums",
"exif-gpsspeed-k": "Kilometri stundā",
@@ -2233,7 +2249,6 @@
"exif-urgency-low": "Zema ($1)",
"exif-urgency-high": "Augsta ($1)",
"exif-urgency-other": "Lietotāja definēta prioritāte ($1)",
- "watchlistall2": "visas",
"namespacesall": "visas",
"monthsall": "visi",
"confirmemail": "Apstiprini e-pasta adresi",
@@ -2281,26 +2296,27 @@
"autosumm-replace": "Aizvieto lapas saturu ar '$1'",
"autoredircomment": "Pāradresē uz [[$1]]",
"autosumm-new": "Jauna lapa: $1",
- "lag-warn-normal": "Izmaiņas, kas ir jaunākas par $1 {{PLURAL:$1|sekundi|sekundēm}}, var neparādīties šajā sarakstā.",
- "lag-warn-high": "Sakarā ar lielu datubāzes servera lagu, izmaiņas, kas svaigākas par $1 {{PLURAL:$1|sekundi|sekundēm}}, šajā sarakstā var neparādīties.",
+ "autosumm-newblank": "Izveidota tukša lapa",
+ "lag-warn-normal": "Izmaiņas, kas ir jaunākas par $1 {{PLURAL:$1|sekundēm|sekundi|sekundēm}}, var neparādīties šajā sarakstā.",
+ "lag-warn-high": "Sakarā ar lielu datubāzes servera lagu, izmaiņas, kas svaigākas par $1 {{PLURAL:$1|sekundēm|sekundi|sekundēm}}, šajā sarakstā var neparādīties.",
"watchlistedit-normal-title": "Izmainīt uzraugāmo rakstu sarakstu",
"watchlistedit-normal-legend": "Noņemt lapas (virsrakstus) no uzraugāmo rakstu saraksta",
"watchlistedit-normal-explain": "Tavā uzraugāmo rakstu sarakstā esošās lapas ir redzamas zemāk.\nLai noņemtu lapu, ieķeksē lodziņā pretī lapai un uzspied Noņemt lapas.\nVar arī izmainīt [[Special:EditWatchlist/raw|neapstrādātu sarakstu]] (viens liels teksta lauks).",
"watchlistedit-normal-submit": "Noņemt lapas",
- "watchlistedit-normal-done": "{{PLURAL:$1|1 lapa tika noņemta|$1 lapas tika noņemtas}} no uzraugāmo rakstu saraksta:",
+ "watchlistedit-normal-done": "{{PLURAL:$1|$1 lapas tika noņemtas|1 lapa tika noņemta|$1 lapas tika noņemtas}} no uzraugāmo rakstu saraksta:",
"watchlistedit-raw-title": "Izmainīt uzraugāmo rakstu saraksta kodu",
"watchlistedit-raw-legend": "Izmainīt uzraugāmo rakstu saraksta kodu",
"watchlistedit-raw-explain": "Uzraugāmo rakstu sarakstā esošās lapas ir redzamas zemāk, un šo sarakstu var izmainīt lapas pievienojot vai izdzēšot no saraksta;\nkatrai rindai te atbilst viena lapa.\nTad, kad pabeigts, uzspied Atjaunot sarakstu.\nVar arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].",
"watchlistedit-raw-titles": "Lapas:",
"watchlistedit-raw-submit": "Atjaunot sarakstu",
"watchlistedit-raw-done": "Tavs uzraugāmo rakstu saraksts tika atjaunots.",
- "watchlistedit-raw-added": "{{PLURAL:$1|1 lapa tika pievienota|$1 lapas tika pievienotas}}:",
- "watchlistedit-raw-removed": "{{PLURAL:$1|1 lapa tika noņemta|$1 lapas tika noņemtas}}:",
+ "watchlistedit-raw-added": "{{PLURAL:$1|$1 lapas tika pievienotas|$1 lapa tika pievienota|$1 lapas tika pievienotas}}:",
+ "watchlistedit-raw-removed": "{{PLURAL:$1|$1 lapas tika noņemtas|1 lapa tika noņemta|$1 lapas tika noņemtas}}:",
"watchlistedit-clear-titles": "Nosaukumi:",
"watchlisttools-view": "Skatīt atbilstošās izmaiņas",
"watchlisttools-edit": "Apskatīt un izmainīt uzraugāmo rakstu sarakstu",
"watchlisttools-raw": "Izmainīt uzraugāmo rakstu saraksta kodu",
- "unknown_extension_tag": "Nezināma paplašinājuma iezīme \"$1\"",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusija]])",
"duplicate-defaultsort": "'''Brīdinājums:''' Noklusējuma kārtošanas atslēga \"$2\" ignorē kārtošanas atslēga \"$1\".",
"version": "Versija",
"version-extensions": "Ieinstalētie paplašinājumi",
@@ -2311,7 +2327,7 @@
"version-other": "Cita",
"version-hooks": "Aizķeres",
"version-hook-name": "Aizķeres nosaukums",
- "version-version": "(Versija $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[bez nosaukuma]",
"version-license": "MediaWiki licence",
"version-ext-license": "Licence",
@@ -2340,7 +2356,7 @@
"fileduplicatesearch-submit": "Meklēt",
"fileduplicatesearch-info": "$1 × $2 pikseļi<br />Faila izmērs: $3<br />MIME tips: $4",
"fileduplicatesearch-result-1": "Failam \"$1\" nav identiskas kopijas.",
- "fileduplicatesearch-result-n": "Failam \"$1\" ir {{PLURAL:$2|1 identiska kopija|$2 identiskas kopijas}}.",
+ "fileduplicatesearch-result-n": "Failam \"$1\" ir {{PLURAL:$2|$2 identiskas kopijas|1 identiska kopija|$2 identiskas kopijas}}.",
"specialpages": "Īpašās lapas",
"specialpages-note-top": "Apzīmējumi",
"specialpages-note": "* Normālas īpašās lapas.\n* <span class=\"mw-specialpagerestricted\">Ierobežotas pieejas īpašās lapas.</span>\n* <span class=\"mw-specialpagecached\">Iekešotās īpašās lapas.</span>",
@@ -2356,12 +2372,13 @@
"specialpages-group-wiki": "Dati un rīki",
"specialpages-group-redirects": "Pāradresējošas īpašās lapas",
"specialpages-group-spam": "Spama rīki",
+ "specialpages-group-developer": "Izstrādātāju rīki",
"blankpage": "Tukša lapa",
"intentionallyblankpage": "Šī lapa ar nodomu ir atstāta tukša.",
"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īme|Iezīmes}}]]: $2)",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Iezīmes|Iezīme|Iezīmes}}]]: $2)",
"tags-title": "Iezīmes",
"tags-intro": "Šajā lapā uzskaitītas iezīmes, ar kurām programmatūra var atzīmēt labojumus, un to nozīme.",
"tags-tag": "Iezīmes nosaukums",
@@ -2372,7 +2389,7 @@
"tags-active-yes": "Jā",
"tags-active-no": "Nē",
"tags-edit": "labot",
- "tags-hitcount": "$1 {{PLURAL:$1|izmaiņa|izmaiņas}}",
+ "tags-hitcount": "$1 {{PLURAL:$1|izmaiņas|izmaiņa|izmaiņas}}",
"comparepages": "Salīdzināt lapas",
"compare-page1": "1. lapa",
"compare-page2": "2. lapa",
@@ -2415,6 +2432,7 @@
"revdelete-uname-unhid": "lietotājvārda slēpšana atcelta",
"revdelete-restricted": "piemērot administratoriem ierobežojumus",
"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-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",
@@ -2423,18 +2441,20 @@
"logentry-newusers-create": "Lietotāja konts $1 tika {{GENDER:$2|izveidots}}",
"logentry-newusers-create2": "$1 {{GENDER:$2|izveidoja}} lietotāja kontu $3",
"logentry-newusers-autocreate": "Lietotaja konts $1 tika {{GENDER:$2|izveidots}} automātiski",
+ "logentry-upload-overwrite": "$1 augšupielādēja jaunu $3 versiju",
"rightsnone": "(nav)",
- "feedback-subject": "Temats:",
- "feedback-message": "Ziņojums:",
- "feedback-cancel": "Atcelt",
- "feedback-submit": "Iesniegt atsauksmes",
+ "revdelete-summary": "izmaiņu kopsavilkums",
"feedback-adding": "Atsauksmes tiek pievienotas lapai...",
+ "feedback-bugnew": "Es pārbaudīju. Ziņot par jaunu kļūdu",
+ "feedback-cancel": "Atcelt",
+ "feedback-close": "Gatavs",
"feedback-error1": "Kļūda: API neatpazīts rezultāts",
"feedback-error2": "Kļūda: Labojums neizdevās",
"feedback-error3": "Kļūda: Nav atbildes no API",
+ "feedback-message": "Ziņojums:",
+ "feedback-subject": "Temats:",
+ "feedback-submit": "Iesniegt",
"feedback-thanks": "Paldies! Jūsu atsauksmes ir ievietotas lapā \"[$2 $1]\".",
- "feedback-close": "Gatavs",
- "feedback-bugnew": "Es pārbaudīju. Ziņot par jaunu kļūdu",
"searchsuggest-search": "Meklēt",
"searchsuggest-containing": "Meklējamā frāze:",
"api-error-badaccess-groups": "Jums nav atļauts augšupielādēt failus šajā wiki.",
@@ -2451,10 +2471,23 @@
"api-error-unknownerror": "Nezināma kļūda: \"$1\"",
"api-error-uploaddisabled": "Augšupielāde šajā wiki ir atslēgta.",
"limitreport-title": "Parsētāja profilēšanas dati:",
- "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|baits|baiti}}",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|baiti|baits|baiti}}",
"limitreport-templateargumentsize": "Veidnes argumenta izmērs",
- "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|baits|baiti}}",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|baiti|baits|baiti}}",
"expand_templates_output": "Rezultāts",
"expand_templates_ok": "Labi",
- "expand_templates_preview": "Pirmskats"
+ "expand_templates_preview": "Pirmskats",
+ "special-characters-group-latin": "Latīņu",
+ "special-characters-group-latinextended": "Latīņu (papildus)",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simboli",
+ "special-characters-group-greek": "Grieķu",
+ "special-characters-group-cyrillic": "Kirilica",
+ "special-characters-group-arabic": "Arābu",
+ "special-characters-group-persian": "Persiešu",
+ "special-characters-group-hebrew": "Ebreju",
+ "special-characters-group-bangla": "Bengāļu",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singāļu",
+ "special-characters-group-gujarati": "Gudžarati"
}
diff --git a/languages/i18n/lzh.json b/languages/i18n/lzh.json
index b4a9d8cd..674c343a 100644
--- a/languages/i18n/lzh.json
+++ b/languages/i18n/lzh.json
@@ -13,7 +13,11 @@
"Yanteng3",
"아라",
"LNDDYL",
- "Jason924tw"
+ "Jason924tw",
+ "灰太狼Wolffy55",
+ "RalfX",
+ "Davidzdh",
+ "Nemo bis"
]
},
"tog-underline": "鏈墊線:",
@@ -21,11 +25,11 @@
"tog-hidepatrolled": "隱近巡",
"tog-newpageshidepatrolled": "隱新巡",
"tog-extendwatchlist": "展列見變",
- "tog-usenewrc": "青出近易(JavaScript)",
+ "tog-usenewrc": "青出近易",
"tog-numberheadings": "生章數",
- "tog-showtoolbar": "多寶列見(JavaScript)",
+ "tog-showtoolbar": "多寶列見",
"tog-editondblclick": "雙擊以纂頁",
- "tog-editsectiononrightclick": "纂段右擊標(JavaScript)",
+ "tog-editsectiononrightclick": "纂段右擊標",
"tog-watchcreations": "哨己撰",
"tog-watchdefault": "哨己纂",
"tog-watchmoves": "派哨予吾遷之頁",
@@ -40,7 +44,7 @@
"tog-shownumberswatching": "放哨有",
"tog-oldsig": "覽原署名:",
"tog-fancysig": "署以本碼待之(免自連)",
- "tog-uselivepreview": "即覽嚐鮮(JavaScript)",
+ "tog-uselivepreview": "即覽嚐鮮",
"tog-forceeditsummary": "漏概醒之",
"tog-watchlisthideown": "不哨己文",
"tog-watchlisthidebots": "不哨僕文",
@@ -130,12 +134,12 @@
"category-empty": "''無頁或媒也。''",
"hidden-categories": "$1隱類",
"hidden-category-category": "隱類",
- "category-subcat-count": "{{PLURAL:$2|門有戶壹。|門有戶$1,有$2戶也。}}",
- "category-subcat-count-limited": "門有戶$1。",
- "category-article-count": "{{PLURAL:$2|門有頁壹。|門有頁$1,有$2頁也。}}",
- "category-article-count-limited": "門有頁$1。",
- "category-file-count": "{{PLURAL:$2|門有檔壹。|門有檔$1,有$2檔也。}}",
- "category-file-count-limited": "門有檔$1。",
+ "category-subcat-count": "{{PLURAL:$2|類有子類如下。|類有$1子類,轄下子類數$2也。}}",
+ "category-subcat-count-limited": "類有子類$1。",
+ "category-article-count": "{{PLURAL:$2|類有頁如下。|類有頁$1,轄下頁數$2也。}}",
+ "category-article-count-limited": "類有頁$1。",
+ "category-file-count": "{{PLURAL:$2|類有檔如下。|類有檔$1,轄下檔數$2也。}}",
+ "category-file-count-limited": "類有檔$1。",
"listingcontinuesabbrev": "續",
"index-category": "已索之頁",
"noindex-category": "未索之頁",
@@ -145,7 +149,7 @@
"newwindow": "啟窗",
"cancel": "捨",
"moredotdotdot": "見逾",
- "morenotlisted": "示未出之項",
+ "morenotlisted": "列未成。",
"mypage": "寒舍",
"mytalk": "書房",
"anontalk": "與(IP)私議",
@@ -177,6 +181,7 @@
"permalink": "恆通",
"print": "印",
"view": "察",
+ "view-foreign": "觀於$1",
"edit": "纂",
"create": "立",
"editthispage": "纂",
@@ -261,6 +266,7 @@
"hidetoc": "藏",
"collapsible-collapse": "摺",
"collapsible-expand": "展",
+ "confirmable-confirm": "{{GENDER:$1|汝}}無悔?",
"confirmable-yes": "是",
"confirmable-no": "否",
"thisisdeleted": "還$1或閱之?",
@@ -302,7 +308,7 @@
"missingarticle-diff": "(異:$1,$2)",
"internalerror": "家誤",
"internalerror_info": "家誤:$1",
- "filecopyerror": "\"$1\"謄\"$2\",未可為也。",
+ "filecopyerror": "謄\"$1\"至\"$2\",未可為也。",
"filerenameerror": "\"$2\"替\"$1\"名,未可為也。",
"filedeleteerror": "\"$1\"未可刪也。",
"directorycreateerror": "立目\"$1\",未可為也。",
@@ -418,7 +424,7 @@
"mailerror": "信失遣如下:$1",
"acct_creation_throttle_hit": "一日之內,於一址但許一人增簿。",
"emailauthenticated": "$2 $3郵驛證矣",
- "emailnotauthenticated": "郵驛<strong>未證</strong>,下不遺書。",
+ "emailnotauthenticated": "郵驛未證,下不遺書。",
"noemailprefs": "郵驛設而用之。",
"emailconfirmlink": "惠考郵驛",
"invalidemailaddress": "驛址不格,惠正略之。",
@@ -428,7 +434,7 @@
"accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|書]])簿增矣。",
"createaccount-title": "於{{SITENAME}}增簿",
"createaccount-text": "有人於{{SITENAME}}用爾之電郵增名為 \"$2\" 之簿 ($4),符節為 \"$3\" 。汝應登,再改符節也。\n\n如簿誤增,爾可略之。",
- "login-throttled": "爾多試於此簿登中。\n請候再試之。",
+ "login-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
"login-abort-generic": "登簿未成——棄",
"loginlanguagelabel": "語:$1",
"suspicious-userlogout": "爾欲無離也,可由壞瀏覽器或快枝代理呈送之。",
@@ -448,7 +454,7 @@
"retypenew": "重察新符節:",
"resetpass_submit": "設符再登",
"changepassword-success": "爾之符節已改!",
- "changepassword-throttled": "爾多試於此簿登中。\n請候再試之。",
+ "changepassword-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
"resetpass_forbidden": "無改符節",
"resetpass-no-info": "爾須登簿後方進此頁。",
"resetpass-submit-loggedin": "改符節",
@@ -463,8 +469,11 @@
"passwordreset-domain": "域:",
"passwordreset-email": "電郵址",
"changeemail": "更郵址",
+ "changeemail-oldemail": "當前郵驛:",
+ "changeemail-newemail": "新郵驛:",
"changeemail-none": "(無)",
"changeemail-password": "汝 {{SITENAME}} 之符節",
+ "changeemail-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
"bold_sample": "粗體",
"bold_tip": "粗體",
"italic_sample": "斜體",
@@ -572,6 +581,8 @@
"postedit-confirmation-saved": "汝之纂已成",
"edit-already-exists": "不建新頁。\n已存也。",
"defaultmessagetext": "慣話文",
+ "content-model-text": "純文本",
+ "content-model-javascript": "JavaScript",
"content-model-css": "層疊樣式表",
"expensive-parserfunction-warning": "警:頁有多貴功呼。\n\n其須少$2呼,現有$1呼。",
"expensive-parserfunction-category": "頁有多貴功呼",
@@ -646,8 +657,8 @@
"revdelete-hide-user": "簿、IP址以藏",
"revdelete-hide-restricted": "廢有秩與簿之事",
"revdelete-radio-same": "(無改)",
- "revdelete-radio-set": "可",
- "revdelete-radio-unset": "否",
+ "revdelete-radio-set": "藏",
+ "revdelete-radio-unset": "現",
"revdelete-suppress": "廢有秩與簿之事",
"revdelete-unsuppress": "復審解限",
"revdelete-log": "因:",
@@ -694,7 +705,6 @@
"mergehistory-same-destination": "源頁和到頁無同也",
"mergehistory-reason": "因:",
"mergelog": "誌併",
- "pagemerge-logentry": "併咗[[$1]]至[[$2]] (訂至$3)",
"revertmerge": "悔併",
"mergelogpagetext": "下乃近頁之誌併至二頁之表也。",
"history-title": "$1之誌",
@@ -981,6 +991,7 @@
"recentchanges": "近易",
"recentchanges-legend": "近易項",
"recentchanges-summary": "共筆揮新,悉列於此。",
+ "recentchanges-noresult": "無易。",
"recentchanges-feed-description": "跟wiki源之近易。",
"recentchanges-label-newpage": "此纂開新頁",
"recentchanges-label-minor": "此乃細纂",
@@ -1017,6 +1028,7 @@
"boteditletter": "僕",
"number_of_watching_users_pageview": "[放有$1哨]",
"rc_categories_any": "任",
+ "rc-change-size-new": "既纂,本文有$1字節",
"newsectionsummary": "/* $1 */ 新節",
"rc-enhanced-expand": "示細(要 JavaScript)",
"rc-enhanced-hide": "藏細",
@@ -1153,6 +1165,7 @@
"listfiles_size": "幅(位元組)",
"listfiles_description": "述",
"listfiles_count": "擇",
+ "listfiles-latestversion": "今本",
"listfiles-latestversion-yes": "是",
"listfiles-latestversion-no": "否",
"file-anchor-link": "檔",
@@ -1207,6 +1220,7 @@
"filedelete-reason-dropdown": "\n*常刪之因\n** 侵版權\n** 重檔",
"filedelete-edit-reasonlist": "纂刪因",
"filedelete-maintenance": "護當禁刪復檔也。",
+ "filedelete-maintenance-title": "無法刪檔",
"mimesearch": "篩檔",
"mimesearch-summary": "此頁可以MIME篩檔.格仿「文類/次類」,如<code>image/jpeg</code>。",
"mimetype": "MIME類有:",
@@ -1218,12 +1232,12 @@
"unusedtemplateswlh": "支鏈",
"randompage": "清風翻書",
"randompage-nopages": "下列{{PLURAL:$2|名集}}中無頁也:$1",
+ "randomincategory-category": "類:",
"randomredirect": "任渡",
"randomredirect-nopages": "「$1」名冊內無渡也。",
"statistics": "彙統",
"statistics-header-pages": "頁彙統",
"statistics-header-edits": "纂彙統",
- "statistics-header-views": "閱彙統",
"statistics-header-users": "有簿彙統",
"statistics-header-hooks": "他彙統",
"statistics-articles": "容頁",
@@ -1232,13 +1246,9 @@
"statistics-files": "已貢",
"statistics-edits": "自{{SITENAME}}設之頁纂數",
"statistics-edits-average": "每頁均纂數",
- "statistics-views-total": "閱總",
- "statistics-views-total-desc": "不包無存之頁與奇頁之閱數",
- "statistics-views-peredit": "每纂閱數",
"statistics-users": "註[[Special:ListUsers|簿]]",
"statistics-users-active": "活簿",
"statistics-users-active-desc": "早$1日前更動之簿",
- "statistics-mostpopular": "燴炙",
"pageswithprop-submit": "往",
"doubleredirects": "窮渡",
"doubleredirectstext": "頁下窮渡,迭列以示。首尾宿合,宜正渡之。\n<del>劃</del>已解之。",
@@ -1254,7 +1264,7 @@
"withoutinterwiki-submit": "示",
"fewestrevisions": "鮮察",
"nbytes": "$1位元組",
- "ncategories": "$1門",
+ "ncategories": "$1類",
"nlinks": "$1鏈",
"nmembers": "$1戶",
"nrevisions": "$1審",
@@ -1269,14 +1279,13 @@
"uncategorizedtemplates": "待蘸",
"unusedcategories": "樞鏽",
"unusedimages": "色褪",
- "popularpages": "膾炙",
- "wantedcategories": "求門",
+ "wantedcategories": "求類",
"wantedpages": "徵頁",
"wantedpages-badtitle": "結組無題: $1",
"wantedfiles": "求檔",
"wantedtemplates": "徵模",
"mostlinked": "好料",
- "mostlinkedcategories": "豪門",
+ "mostlinkedcategories": "豪類",
"mostlinkedtemplates": "美模",
"mostcategories": "跨船",
"mostimages": "名檔",
@@ -1288,9 +1297,11 @@
"protectedpages": "頁錮",
"protectedpages-indef": "只示無期之錮",
"protectedpages-cascade": "只示連串之錮",
+ "protectedpages-timestamp": "標時章",
"protectedpages-page": "頁",
"protectedpages-expiry": "屆期",
"protectedpages-reason": "因:",
+ "protectedpages-unknown-timestamp": "未知",
"listusers": "點簿",
"listusers-editsonly": "只示有纂之簿",
"listusers-creationsort": "按先後列之",
@@ -1302,7 +1313,7 @@
"move": "遷",
"movethispage": "遷此頁",
"unusedimagestext": "下檔存也,未嵌於其頁之。\n他站可以網址鏈檔,故下列並非盡閒,註記之。",
- "unusedcategoriestext": "以下空門,無依可活。",
+ "unusedcategoriestext": "以下空類,無依可活。",
"notargettitle": "落靶",
"notargettext": "簿、頁未定,無可為之。",
"nopagetitle": "落靶之頁",
@@ -1311,16 +1322,17 @@
"pager-older-n": "陳$1次",
"suppress": "監",
"querypage-disabled": "此奇頁基以效,故停之。",
+ "apihelp": "程式接口幫助檔",
"booksources": "書海",
"booksources-search-legend": "舀書海",
- "booksources-go": "往",
+ "booksources-search": "尋",
"booksources-text": "有賈售新舊書,或有助焉。茲列如下:",
"booksources-invalid-isbn": "供之ISBN無確,查始複之誤。",
"specialloguserlabel": "簿:",
"speciallogtitlelabel": "標:",
"log": "誌",
"all-logs-page": "眾誌",
- "alllogstext": "眾{{SITENAME}}之誌有合者,俱併版見。擇門、選簿、限疆以裁之。",
+ "alllogstext": "眾{{SITENAME}}之誌有合者,俱併版見。擇誌、選簿、限疆以裁之。",
"logempty": "無合誌也。",
"log-title-wildcard": "題以此始者,取之",
"allpages": "全典",
@@ -1362,7 +1374,7 @@
"activeusers-noresult": "無簿矣。",
"listgrouprights": "權任一覽",
"listgrouprights-summary": "此所列述,諸職所司也,各有異同。欲知其詳,請閱[[{{MediaWiki:Listgrouprights-helppage}}|此文]]。",
- "listgrouprights-key": "* <span class=\"listgrouprights-granted\">權授矣</span>\n* <span class=\"listgrouprights-revoked\">權撤矣</span>",
+ "listgrouprights-key": "圖例:\n* <span class=\"listgrouprights-granted\">權授矣</span>\n* <span class=\"listgrouprights-revoked\">權撤矣</span>",
"listgrouprights-group": "組",
"listgrouprights-rights": "權",
"listgrouprights-helppage": "Help:組權",
@@ -1387,6 +1399,7 @@
"noemailtext": "此君無郵。",
"nowikiemailtext": "此君謝收郵之。",
"emailusername": "簿名:",
+ "emailusernamesubmit": "呈",
"email-legend": "發郵至{{SITENAME}}之另一簿",
"emailfrom": "自:",
"emailto": "致:",
@@ -1404,7 +1417,7 @@
"mywatchlist": "哨站",
"watchlistfor2": "$1之哨 $2",
"nowatchlist": "無哨",
- "watchlistanontext": "$1以治哨",
+ "watchlistanontext": "登簿以治哨",
"watchnologin": "未登簿",
"addwatch": "增至哨站",
"addedwatchtext": "\"[[:$1]]\"哨派矣。後有易、議者可見於[[Special:Watchlist|哨站]],且'''粗體'''列於[[Special:RecentChanges|近易]]。",
@@ -1419,7 +1432,7 @@
"wlheader-enotif": "*准報信。",
"wlheader-showupdated": "*易者'''粗體'''。",
"wlnote": "近<b>$2</b>時有$1者易。",
- "wlshowlast": "見近$1時、$2天、$3時易",
+ "wlshowlast": "見近$1時、$2天易",
"watchlist-options": "哨項",
"watching": "出陣…",
"unwatching": "收兵…",
@@ -1455,7 +1468,6 @@
"delete-toobig": "此頁含大誌,過$1修。刪頁限矣,防於{{SITENAME}}之亂也。",
"delete-warning-toobig": "此頁含大誌,過$1修。刪之可亂{{SITENAME}}之事也;續時留神之。",
"rollback": "反正",
- "rollback_short": "正",
"rollbacklink": "正",
"rollbackfailed": "未能反正",
"cantrollback": "獨一作者,無以反正。",
@@ -1576,6 +1588,7 @@
"sp-contributions-search": "問勛",
"sp-contributions-username": "簿名或IP址",
"sp-contributions-toponly": "僅示至新審之纂",
+ "sp-contributions-newonly": "僅示創文之纂",
"sp-contributions-submit": "問",
"whatlinkshere": "取佐",
"whatlinkshere-title": "「$1」取佐",
@@ -1625,6 +1638,7 @@
"unblocked-id": "禁$1赦焉",
"ipblocklist": "列禁簿",
"ipblocklist-legend": "尋禁簿",
+ "blocklist-reason": "因:",
"ipblocklist-submit": "尋",
"ipblocklist-localblock": "本禁",
"ipblocklist-otherblocks": "他{{PLURAL:$1|禁|禁}}",
@@ -1641,6 +1655,7 @@
"unblocklink": "赦",
"change-blocklink": "更",
"contribslink": "勛",
+ "emaillink": "遣函",
"autoblocker": "近日$1\"$2\";同子IP址,故禁焉。",
"blocklogpage": "誌禁",
"blocklog-showlog": "此簿曾被禁。誌禁示下:",
@@ -1741,7 +1756,7 @@
"exportcuronly": "獨匯今審",
"exportnohistory": "----\n'''囑記,'''封匯全誌,因累甚也。",
"export-submit": "出匯",
- "export-addcattext": "索門擇題:",
+ "export-addcattext": "擇題入類:",
"export-addcat": "增",
"export-addnstext": "索名集擇題:",
"export-addns": "增",
@@ -1761,6 +1776,7 @@
"allmessages-prefix": "以前綴濾:",
"allmessages-language": "言:",
"allmessages-filter-submit": "始",
+ "allmessages-filter-translate": "譯",
"thumbnail-more": "展",
"filemissing": "喪檔",
"thumbnail_error": "縮圖$1有誤",
@@ -1802,9 +1818,7 @@
"import-invalid-interwiki": "無乃定之wiki匯入。",
"importlogpage": "誌入",
"importlogpagetext": "秩入匯自他山之審。",
- "import-logentry-upload": "[[$1]]上傳而匯",
"import-logentry-upload-detail": "有審$1",
- "import-logentry-interwiki": "互匯$1",
"import-logentry-interwiki-detail": "$1審自$2",
"tooltip-pt-userpage": "述平生、紹身家、銘字號",
"tooltip-pt-anonuserpage": "君IP之舍",
@@ -1815,6 +1829,7 @@
"tooltip-pt-mycontris": "刻勛功、追作續、慰苦勞",
"tooltip-pt-login": "設書齋、錄功績、廣放哨",
"tooltip-pt-logout": "凡事盡,乘雲飄",
+ "tooltip-pt-createaccount": "勸君增簿以登,然非必須之舉",
"tooltip-ca-talk": "求異見、辯是非、妥紛擾",
"tooltip-ca-edit": "拓文意、校誤謬、潤辭藻",
"tooltip-ca-addsection": "有言議,添新要",
@@ -1857,7 +1872,7 @@
"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-preview": "篤存儲,先草稿",
@@ -1890,6 +1905,8 @@
"spam_reverting": "還新審之無鏈$1者。",
"spam_blanking": "審皆鏈$1,遂令白頁。",
"pageinfo-header-restrictions": "頁錮",
+ "pageinfo-robot-index": "可",
+ "pageinfo-robot-noindex": "不可",
"pageinfo-toolboxlink": "文訊",
"markaspatrolleddiff": "派哨",
"markaspatrolledtext": "哨此報",
@@ -1937,6 +1954,9 @@
"bydate": "時序",
"sp-newimages-showfrom": "自$1 $2賞新檔",
"video-dims": "$1,$2矩$3",
+ "just-now": "方",
+ "hours-ago": "$1時前",
+ "yesterday-at": "昨日於$1",
"bad_image_list": "僅取表件,冠「*」者也。格式如下:\n\n單列數鏈,首通壞檔;而後所鏈之文,允圖見於其內。",
"metadata": "補註",
"metadata-help": "此檔補註,製者所添,如相機、掃描之器;後若更檔,補註不誠也。",
@@ -1980,7 +2000,6 @@
"exif-gpsdestdistance-k": "千米",
"exif-gpsdestdistance-m": "哩",
"exif-gpsdestdistance-n": "浬",
- "watchlistall2": "全",
"namespacesall": "全",
"monthsall": "全",
"confirmemail": "核郵驛",
@@ -2044,7 +2063,6 @@
"watchlisttools-view": "察易",
"watchlisttools-edit": "治哨站",
"watchlisttools-raw": "治源哨",
- "unknown_extension_tag": "未明之擴標「$1」",
"duplicate-defaultsort": "警:預之排鍵「$2」蓋前之排鍵「$1」。",
"version": "版",
"version-extensions": "裝展",
@@ -2060,7 +2078,7 @@
"version-parser-function-hooks": "語函鈎",
"version-hook-name": "鈎名",
"version-hook-subscribedby": "用於",
- "version-version": "(版 $1)",
+ "version-version": "($1)",
"version-license": "牌",
"version-poweredby-credits": "此 Wiki 以 '''[https://www.mediawiki.org/ MediaWiki]''' 之驅,權 © 2001-$1 $2。",
"version-poweredby-others": "其他",
@@ -2090,12 +2108,34 @@
"specialpages-group-wiki": "Wiki訊與器",
"specialpages-group-redirects": "轉之特查",
"specialpages-group-spam": "反垃圾之器",
+ "specialpages-group-developer": "造紙者之器",
"blankpage": "白頁",
"intentionallyblankpage": "此頁為白也,試速之用",
"external_image_whitelist": " #同留<pre>\n#下(中之//)乃正表式\n#乃外(連)圖配之\n#配乃成像,非配則成連\n#有 # 之為注\n#無為大小之異也\n\n#入正表式。同留</pre>",
"tag-filter": "[[Special:Tags|標]] 之濾:",
+ "tags-title": "標",
"tags-tag": "標名",
+ "tags-source-header": "源",
+ "tags-actions-header": "动",
+ "tags-active-yes": "是",
+ "tags-active-no": "否",
"tags-edit": "纂",
+ "tags-delete": "削",
+ "tags-deactivate": "閉",
+ "tags-manage-no-permission": "無准遷檔也。",
+ "tags-create-tag-name": "標名:",
+ "tags-create-reason": "因:",
+ "tags-create-submit": "立",
+ "tags-create-no-name": "子必名此签!",
+ "tags-create-warnings-below": "子欲立此签乎?",
+ "tags-delete-title": "削签",
+ "tags-delete-reason": "因:",
+ "tags-delete-not-found": "$1之頁無存焉。",
+ "tags-activate-title": "活簽",
+ "tags-activate-reason": "因:",
+ "tags-activate-submit": "活",
+ "tags-deactivate-reason": "因:",
+ "tags-deactivate-submit": "闭",
"comparepages": "較頁",
"compare-page1": "頁一",
"compare-page2": "頁二",
@@ -2117,5 +2157,19 @@
"revdelete-restricted": "應限至有秩",
"revdelete-unrestricted": "除限自有秩",
"rightsnone": "(凡)",
- "searchsuggest-search": "尋"
+ "revdelete-summary": "摘",
+ "searchsuggest-search": "尋",
+ "pagelang-language": "語",
+ "default-skin-not-found": "嚄!君於<code dir=\"ltr\">$wgDefaultSkin</code>所設之膚無以用也。君所用版本,似需含膚下者也。可於MediaWiki之官網[https://www.mediawiki.org/wiki/Manual:Skin_configuration “設膚”]之冊,以知啟而許膚之法。\n\n$2\n\n; 若君安MediaWiki未幾:\n: 君或安自git庫。或以他法徑安自源始碼,若如此甚善。汝可試下者之法,自[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org之膚庫]安膚些許:\n:* 載下[https://www.mediawiki.org/wiki/Download/lzh 群安之器]。若依此道,則將预安膚與拓器些許。君可謄而貼<code>skins/</code>于焉。\n:* 自[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]獨載下安膚包。\n:* 以git徑謄自<code>mediawiki/skins/*</code>儲物库,至君MediaWiki副本之<code dir=\"ltr\">skins/</code>。\n: 若君MediaWiki開發者也,則為之應擾不及君之git儲物庫。\n\n; 若君MediaWiki新矣:\n: 自MediaWiki 1.24版本始,已安之膚不復自啟(見[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 冊])。君可謄而貼字下者,至君圍紀之<code>LocalSettings.php</code>以啟膚已安者:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若君已改<code>LocalSettings.php</code>:\n: 请再查膚名,以保之無誤。",
+ "mediastatistics-header-unknown": "未知",
+ "mediastatistics-header-video": "映像",
+ "json-error-syntax": "語法有誤",
+ "special-characters-group-latin": "拉丁字母",
+ "special-characters-group-latinextended": "拉丁擴字",
+ "special-characters-group-ipa": "萬國音標",
+ "special-characters-group-symbols": "符像",
+ "special-characters-group-greek": "希臘字母",
+ "special-characters-group-cyrillic": "西里爾字母",
+ "special-characters-group-arabic": "阿拉伯字母",
+ "special-characters-group-arabicextended": "阿拉伯擴字"
}
diff --git a/languages/i18n/lzz.json b/languages/i18n/lzz.json
index bbae542a..e5ab3e2f 100644
--- a/languages/i18n/lzz.json
+++ b/languages/i18n/lzz.json
@@ -395,7 +395,6 @@
"pager-older-n": "{{PLURAL:$1|çkva mcveşi 1|çkva mcveşi $1}}",
"booksources": "Odude svarape",
"booksources-search-legend": "Svaraş odudepe mgori",
- "booksources-go": "İgzali",
"log": "Kʼayitʼepe",
"allpages": "Mteli butʼkʼape",
"prevpage": "İptineri butʼkʼa ($1)",
@@ -414,7 +413,7 @@
"watchthispage": "Butʼkʼa gatxozi",
"unwatch": "Gotxozu naşkʼvi",
"watchlist-details": "{{PLURAL:$1|$1 butʼkʼa|$1 butʼkʼa}}, skani gotxozu listʼes ren, ama oğarğaluşi butʼkʼapes va ren",
- "wlshowlast": "Çodinaşi $1 saatʼi $2 ndğa ko3ʼiri $3",
+ "wlshowlast": "Çodinaşi $1 saatʼi $2 ndğa ko3ʼiri",
"watchlist-options": "Gotxozu listʼeşi tercihepe",
"watching": "i3ʼkʼedinen...",
"unwatching": "var i3ʼkʼedinen...",
@@ -572,7 +571,6 @@
"metadata-expand": "Detayepe ko3ʼiri",
"metadata-collapse": "Detayepe doşinaxi",
"metadata-fields": "Am butʼkʼas na ilistʼelinen EXIF metadataş burmepe, resimi ozʼiramuşi butʼkʼapes metadata tʼablo na ğuru oras ixmarinen. Majuranepeti maartani oqʼopinot işinaxasen.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "mteli",
"namespacesall": "mteli",
"monthsall": "mteli",
"watchlisttools-view": "Am tema kʼala alakʼali na renan oktirobape ko3ʼiri",
diff --git a/languages/i18n/mai.json b/languages/i18n/mai.json
index b1d5f3b9..ffa712d1 100644
--- a/languages/i18n/mai.json
+++ b/languages/i18n/mai.json
@@ -18,14 +18,18 @@
"Umeshberma",
"Vinitutpal",
"아라",
- "बिप्लब आनन्द"
+ "बिप्लब आनन्द",
+ "सरोज कुमार ढकाल",
+ "Bijay chaurasia",
+ "Tulsi Bhagat",
+ "Macofe"
]
},
"tog-underline": "लिंककेँ रेखांकित करू:",
"tog-hideminor": "सन्निकट परिवर्त्तनमे छोट परिवर्त्तन नुकाऊ",
"tog-hidepatrolled": "सन्निकट परिवर्त्तनमे छोट परिवर्त्तन नुकाऊ",
"tog-newpageshidepatrolled": "नियंत्रित सम्पादनकेँ नव पन्ना सूचीसँ नुकाऊ",
- "tog-extendwatchlist": "ध्यानसूचीमे सभ परिवर्तन देखाऊ,खाली हालक परिवर्तन नै",
+ "tog-extendwatchlist": "सन्निकट परिवर्तन नै,अखन ध्यानसूचीमे रहल सभ परिवर्तन देखाऊ",
"tog-usenewrc": "नीक सन्निकट परिवर्तन प्रयोग करू (जावास्क्रिप्ट चाही)",
"tog-numberheadings": "शीर्षक स्वयं-क्रमांकित करू",
"tog-showtoolbar": "संपादन ओजारपेटी देखाऊ (जावास्क्रीप्ट)",
@@ -38,15 +42,15 @@
"tog-watchrollback": "हमरा द्वारा जोडलगेल पृष्ठ हमार सांकक्ष सूचीमे राखू",
"tog-minordefault": "हमर सभ सम्पादन पूर्वन्यस्त रूपेँ मामूली कहू",
"tog-previewontop": "संपादन पेटीक ऊपर दृश्य देखाऊ",
- "tog-previewonfirst": "पहिल सम्पादनक बाद पूर्वावलोकन देखाउ",
+ "tog-previewonfirst": "पहिल संपादनक बाद पूर्वावलोकन देखाउ",
"tog-enotifwatchlistpages": "जौं हमर ध्यानसूचीक कोनो पन्नामे परिवर्तन हुअए तँ हमरा ई-पत्र पठाउ",
"tog-enotifusertalkpages": "हमर सदस्य वार्ता पृष्ठ पर भेल परिवर्त्तनक हेतु हमरा ई-मेल करथि",
"tog-enotifminoredits": "छोट परिवर्त्तनक हेतु सेहो हमरा ई-मेल पठाऊ",
"tog-enotifrevealaddr": "हमर ई-पत्र संकेत सूचना ई-पत्रमे देखाउ",
"tog-shownumberswatching": "ध्यान राखैबला प्रयोक्ताक संख्या",
- "tog-oldsig": "अखुनका दस्खत",
- "tog-fancysig": "हस्ताक्षरकें विकिटेक्सटक रूपमे देखू (स्वचालित श्रृंखला हीन)",
- "tog-uselivepreview": "करू चल पूर्वावलोकन (जावास्क्रिप्ट चाही) (प्रायोगिक)",
+ "tog-oldsig": "अखुनका दस्खत:",
+ "tog-fancysig": "दस्खतकें विकिटेक्सटक रूपमे देखू (स्वचालित श्रृंखला हीन)",
+ "tog-uselivepreview": "करू चल पूर्वावलोकन (प्रायोगिक)",
"tog-forceeditsummary": "हमरा सचेत करू जखन हम खाली सम्पादम सारांशमे जाइ",
"tog-watchlisthideown": "हमर साकांक्ष सूचीसँ हमर सम्पादन नुकाउ",
"tog-watchlisthidebots": "हमर साकांक्ष सूचीसँ स्वचालित सम्पादन हटाउ",
@@ -153,7 +157,7 @@
"cancel": "समाप्त",
"moredotdotdot": "आर...",
"morenotlisted": "ई पुरा सूची नै अछी ।",
- "mypage": "हमर पन्ना",
+ "mypage": "पन्ना",
"mytalk": "वार्त्ता",
"anontalk": "ऐ अनिकेत पता लेल विमर्श",
"navigation": "संचार",
@@ -161,8 +165,8 @@
"qbfind": "ताकू",
"qbbrowse": "गवेषण करू",
"qbedit": "सम्पादन करू",
- "qbpageoptions": "ई पन्ना",
- "qbmyoptions": "हमर पन्ना सभ",
+ "qbpageoptions": "ई पृष्ठ",
+ "qbmyoptions": "हमर पृष्ठ सभ",
"faq": "त्वरित प्रश्नोत्तरी",
"faqpage": "Project: त्वरित प्रश्नोत्तरी",
"actions": "क्रिया सभ",
@@ -170,17 +174,17 @@
"variants": "प्रकार सभ",
"navigation-heading": "दिक्चालन सूची",
"errorpagetitle": "गलती",
- "returnto": "$1 पर घुरु।",
+ "returnto": "$1 पर आउ।",
"tagline": "कतयसँ {{SITENAME}}",
"help": "मदति",
"search": "ताकू",
"searchbutton": "ताकू",
- "go": "जाउ",
+ "go": "जाऊ",
"searcharticle": "जाऊ",
"history": "पन्नाक इतिहास",
"history_short": "इतिहास",
"updatedmarker": "हमर अन्तिम आगमनसँ पहिने अद्यतन कएल",
- "printableversion": "प्रिंट करबा योग्य",
+ "printableversion": "प्रिन्ट करबा योग्य",
"permalink": "स्थायी लिंक",
"print": "छापू",
"view": "देखू",
@@ -221,6 +225,7 @@
"otherlanguages": "दोसर भाषामे",
"redirectedfrom": "(एतयसँ बहटारल $1)",
"redirectpagesub": "पन्नाकेँ पठाउ",
+ "redirectto": "मे पुनर्निर्देश:",
"lastmodifiedat": "ई पन्ना अंतिम बेर संवर्धित भेल $1, केँ $2 बजे।",
"viewcount": "ई पन्ना देखल गेल {{PLURAL:$1|एक बेर|$1 एतेक बेर}}",
"protectedpage": "संरक्षित पन्ना",
@@ -252,24 +257,24 @@
"badaccess": "आज्ञा गल्ती",
"badaccess-group0": "अहाँकेँ आग्रह कएल क्रियाकेँ करबाक अनुमति नै अछि।",
"badaccess-groups": "जइ क्रियाक अहाँ आग्रह केने छी से मात्र किछु प्रयोक्ता लेल सुरक्षित अछि {{PLURAL:$2|संवर्ग|संवर्ग सभमे एकटा}}: $1",
- "versionrequired": "मीडियाविकीक संस्करण $1 चाही",
- "versionrequiredtext": "ऐ पन्नाक प्रयोग लेल मीडियाविकीक संस्करण $1 चाही।\nदेखू ee [[Special:Version|version page]]",
+ "versionrequired": "मिडियाविकीकऽ संस्करण $1 चाही",
+ "versionrequiredtext": "ऐ पन्नाक प्रयोग लेल मिडियाविकीकऽ संस्करण $1 चाही।\nदेखू [[Special:Version|पृष्ठ भर्सन]]",
"ok": "ठीक अछि",
"pagetitle-view-mainpage": "{{अन्तर्जाल}}",
"backlinksubtitle": "← $1",
"retrievedfrom": "प्राप्ति स्थल \"$1\"",
"youhavenewmessages": "अहाँ लग अछि $1 ($2).",
- "youhavenewmessagesfromusers": "अहाके लेल {{PLURAL:$3|एक अन्य सदस्य|$3 अन्य सदस्यसभ}} के $1 छि । ($2)",
- "youhavenewmessagesmanyusers": "अहाके $1 छि । ($2)",
- "newmessageslinkplural": "{{PLURAL:$1|एगो नया पत्र|999=नया पत्र}}",
- "newmessagesdifflinkplural": "$1 {{PLURAL:$1|परिवर्तन|परिवर्तन सभ}}",
- "youhavenewmessagesmulti": "$1 पर अहाँ लेल नव सन्देश अछि",
- "editsection": "संपादन करू",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|अहाँके लेल}} $1 सँ {{PLURAL:$3|अन्य प्रयोक्ता|$3 प्रयोक्तासभ}} ($2)।",
+ "youhavenewmessagesmanyusers": "अहाँके $1 सँ बहुत प्रयोक्ता सभ ($2)।",
+ "newmessageslinkplural": "{{PLURAL:$1|एगो नयाँ पत्र|999=नयाँ पत्र}}",
+ "newmessagesdifflinkplural": "अन्तिम {{PLURAL:$1|परिवर्त्तन|999=परिवर्त्तन सभ}}",
+ "youhavenewmessagesmulti": "$1 पर अहाँ लेल नव पत्र अछि",
+ "editsection": "सम्पादन करू",
"editold": "सम्पादित करू",
"viewsourceold": "जड़ि देखू",
"editlink": "सम्पादन करू",
"viewsourcelink": "जड़ि देखू",
- "editsectionhint": "संपादन शाखा: $1",
+ "editsectionhint": "सम्पादन शाखा: $1",
"toc": "विषय-सूची",
"showtoc": "देखाऊ",
"hidetoc": "नुकाऊ",
@@ -278,34 +283,34 @@
"confirmable-confirm": "कि {{GENDER:$1|अहाँ}} छी?",
"confirmable-yes": "हँ",
"confirmable-no": "नै",
- "thisisdeleted": "देखू वा जाउ $1?",
- "viewdeleted": "देखू $1?",
+ "thisisdeleted": "$1 देखू वा फेर सँ आनु?",
+ "viewdeleted": "$1 के देखाऊ?",
"restorelink": "{{PLURAL:$1|एकटा मेटाएल सम्पादन|$1 मेटाएल सम्पादन सभ}}",
"feedlinks": "सूचक:",
"feed-invalid": "अमान्य सूचक प्रकार मासुल",
- "feed-unavailable": "ाधिकृत सूचक उपलब्ध नै अछि",
- "site-rss-feed": "$1 आरएसएस फीड",
- "site-atom-feed": "$1 अणु फीड",
- "page-rss-feed": "\"$1\" आर.एस.एस. सूचना",
- "page-atom-feed": "\"$1\" अणु सू़चना",
+ "feed-unavailable": "अधिकृत सूचक उपलब्ध नै अछि",
+ "site-rss-feed": "$1 आर.एस.एस. सूचक",
+ "site-atom-feed": "$1 अणु सूचक",
+ "page-rss-feed": "\"$1\" आर.एस.एस. सूचक",
+ "page-atom-feed": "\"$1\" अणु सूचक",
"feed-atom": "अणु",
"feed-rss": "आर.एस.एस.",
- "red-link-title": "$1 (पृष्ठ उपलब्ध नै अछि)",
+ "red-link-title": "$1 (पृष्ठ उपलब्ध नै अछि)",
"sort-descending": "घटैत क्रममे छाँटू",
"sort-ascending": "बढ़ैत क्रममे छाँटू",
- "nstab-main": "पृष्ठ",
- "nstab-user": "उपयोगकर्ताक पृष्ठ",
- "nstab-media": "मीडिया पन्ना",
- "nstab-special": "विशिष्ट पन्ना",
- "nstab-project": "परियोजना पन्ना",
- "nstab-image": "फाइल",
- "nstab-mediawiki": "संदेश",
- "nstab-template": "नमूना",
- "nstab-help": "सहायता पन्ना",
+ "nstab-main": "पन्ना",
+ "nstab-user": "प्रयोक्ता पृष्ठ",
+ "nstab-media": "मिडिया पृष्ठ",
+ "nstab-special": "विशेष पृष्ठ",
+ "nstab-project": "परियोजना पृष्ठ",
+ "nstab-image": "संचिका",
+ "nstab-mediawiki": "पत्र",
+ "nstab-template": "आकृति",
+ "nstab-help": "सहायता पृष्ठ",
"nstab-category": "संवर्ग",
- "nosuchaction": "एहेन कोनो क्रिया नै",
+ "nosuchaction": "एहेन कोनो क्रिया नै अछि",
"nosuchactiontext": "ऐ सार्वत्रिक विभव संकेत द्वारा निर्दिष्ट क्रिया अमान्य अछि।\nअहाँ सार्वत्रिक विभव संकेतक गलत टंकण केने हएब, वा कोनो गलत लिंकक पाछाँ गेल हएब।\nई {{अन्तर्जाल}} प्रयोक्ता द्वारा प्रयुक्त तंत्रांशमे स्थित कोनो दोषक संकेत सेहो कऽ सकैए।",
- "nosuchspecialpage": "एहेन कोनो विशेष पन्ना नै",
+ "nosuchspecialpage": "एहेन कोनो विशेष पृष्ठ नै अछि",
"nospecialpagetext": "<strong> अहाँ एकटा अमान्य पन्नाक आग्रह केने छी। </strong>\nमान्य विशेष पन्नाक सूची एतए अछि [[Special:SpecialPages|{{int:specialpages}}]]।",
"error": "भ्रम",
"databaseerror": "दत्तनिधि भ्रम",
@@ -335,6 +340,7 @@
"cannotdelete": "पन्ना व संचिका \"$1\" मेटाएल नै जा सकल।",
"cannotdelete-title": "पन्ना \"$1\" नै मेटा सकल",
"delete-hook-aborted": "सम्पादन नोकसीसँ खतम भेल।\nई कोनो कारण नै देलक।",
+ "no-null-revision": "\"$1\" पृष्ठ के लेल बिना परिवर्तन नब अवतरण बनाबए में असफल।",
"badtitle": "खराप शीर्षक",
"badtitletext": "आग्रह कएल पन्नाक शीर्षक गलत, खाली, वा गलत सम्बन्धित अन्तर-न्हाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।",
"perfcached": "ई दत्तांश उपस्मृतिक आधारपर अछि आ भऽ सकैए जे अद्यतन नै हुअए। अधिकतम {{PLURAL:$1|एकटा परिणाम|$1 परिणाम सभ}} क्याचेमे उपलब्ध अछि ।",
@@ -348,12 +354,12 @@
"viewsourcetext": "अहाँ ऐ पन्नाक जड़िकेँ देख आ अनुकृत कऽ सकै छी:",
"viewyourtext": "अहाँ '''अहाँक सम्पादन''' केँ देख आ एतए उतारि सकै छी:",
"protectedinterface": "ई पन्ना तंत्रांश लेल मध्यस्थ पाठक व्यवस्था करैत अछि, आ अपशब्द रोकबाक ब्योंत करैत अछि।",
- "editinginterface": "'''चेतौनी''' अहाँ एकटा एहेन पन्नाक सम्पादन कऽ रहल छी जे तंत्रांशक मध्यस्थ पन्नाकेँ पाठ देबा लेल प्रयोग भऽ रहल अछि।\nऐ पन्नामे परिवर्तन दोसर प्रयोक्ता लेल प्रयोक्ता मध्यस्थक रूपमे परिवर्तन करत।\nअनुवाद लेल [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] जाउ, मीडियाविकी स्थानीयकरण परियोजनापर।",
+ "editinginterface": "'''चेतौनी''' अहाँ एकटा एहेन पन्नाक सम्पादन कऽ रहल छी जे तंत्रांशक मध्यस्थ पन्नाकेँ पाठ देबा लेल प्रयोग भऽ रहल अछि।\nऐ पन्नामे परिवर्तन दोसर प्रयोक्ता लेल प्रयोक्ता मध्यस्थक रूपमे परिवर्तन करत।\nअनुवाद लेल [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] जाउ, मीडियाविकी स्थानीयकरण परियोजना पर।",
"cascadeprotected": "ऐ पन्नाक सम्पादन सम्भव नै अछि, कारण ई ऐ मे सम्मिलित अछि, {{PLURAL:$1|पन्ना, जे अछि|पन्ना, से सभ अछि}} सुरक्षित अछि \"तराउपड़ी\" विकल्प खोललाक बाद:\n$2",
"namespaceprotected": "अहाँकेँ '''$1''' नाम-पेटारमे सम्पादनक अनुमति नै अछि।",
"customcssprotected": "अहांकें ऐ सी.एस.एस.पन्नाकें सम्पादित करबाक अधिकार नै अछि, कारण ऐमे दोसर प्रयोक्ताक व्यक्तिगत विकल्प छै।",
"customjsprotected": "अहांकें ऐ जावास्क्रिप्ट पन्नाकें सम्पादित करबाक अधिकार नै अछि, कारण ऐमे दोसर प्रयोक्ताक व्यक्तिगत विकल्प छै।",
- "mycustomcssprotected": "अहाके लेल ई CSS पन्नाके सम्पादित करवाक अधिकार नै अछि।",
+ "mycustomcssprotected": "अहाके लेल ई सीएसएस पन्नाके सम्पादित करवाक अधिकार नै अछि।",
"mycustomjsprotected": "अहके लेल इ जावास्क्रिप्ट पन्नाके सम्पादित करवाक अधिकार नै अछि।",
"myprivateinfoprotected": "अहाके अपन व्यक्तिगत जानकारी बदलैक अनुमति नै अछि।",
"mypreferencesprotected": "अहाके अपन प्राथमिकता बदलैक अनुमति नै अछि।",
@@ -389,8 +395,8 @@
"password-change-forbidden": "अहा इ विकिमे कूटशब्द नै बदल सकैत छि ।",
"externaldberror": "खाहे सत्यापन दतांश भ्रम छल वा अहाँ अपन बाह्य खाताकेँ अद्यतन करबामे असमर्थ छी।",
"login": "सम्प्रवेश",
- "nav-login-createaccount": "सदस्य लॉग इन",
- "userlogin": "लॉग इन / खेसरा बनाऊ",
+ "nav-login-createaccount": "सम्प्रवेश /खेसरा बनाऊ",
+ "userlogin": "सम्प्रवेश/ खेसरा बनाऊ",
"userloginnocreate": "सम्प्रवेश",
"logout": "निष्क्रमण",
"userlogout": "फेर आयब",
@@ -399,12 +405,14 @@
"userlogin-joinproject": "{{SITENAME}} से जोडु",
"nologin": "खाता नै अछि? $1।",
"nologinlink": "नव खाता खोलू",
- "createaccount": "खाता खोली",
+ "createaccount": "खाता खोलू",
"gotaccount": "पहिनहियेसँ खाता अछि? $1",
"gotaccountlink": "सम्प्रवेश",
"userlogin-resetlink": "अपन सम्प्रवेश विवरण बिसरि गेलहुँ?",
"userlogin-resetpassword-link": "अपन कूटशब्द बिसर गेलौ ?",
"userlogin-helplink2": "सम्प्रवेशित करवाकलेल मदत",
+ "userlogin-loggedin": "अहा {{GENDER:$1|$1}} के रूपमे पहिले स सम्प्रवेशित छि।\nकोनो दोसर सदस्यके रुपमे सम्प्रवेशित करवाक लेल देल गेल फारमके प्रयोग करु।",
+ "userlogin-createanother": "दोसर खाता बनाउ",
"createacct-emailrequired": "ई-पत्र संकेत",
"createacct-emailoptional": "ई-पत्र संकेत (वैकल्पिक)",
"createacct-email-ph": "अपन ई-पत्र संकेत सत्यापित करू",
@@ -451,33 +459,34 @@
"blocked-mailpassword": "अहाँक अनिकेत सम्पादन लेल प्रतिबन्धित अछि, आ दुरुपयोग रोकबा लेल कूटशब्द प्रत्याहरण सेवा ऐ लेल उपलब्ध नै अछि।",
"eauthentsent": "एकटा पावती ई-पत्र निर्धारित ई-पत्र संकेतपर पठा देल गेल अछि।\nऐ खातापर कोनो दोसर ई-पत्र पठाएल जएबासँ पहिने, अहाँकेँ ऐ ई-पत्रक निर्देशक पालन करए पड़त, जइसँ ई पुष्ट भऽ सकए जे ई खाता वास्तवमे अहींक अछि।",
"throttled-mailpassword": "एकटा कूटशब्द स्मारक पहिनहिये पठाएल गेल अछि, {{PLURAL:$1|घण्टा|$1 घण्टा}}क भीतर।\nदुरुपयोग रोकबा लेल, मात्र एकटा कूटशब्द {{PLURAL:$1|घण्टा|$1 घण्टा}}मे पठाएल जाएत।",
- "mailerror": "ई-पत्र पठेबामे दिक्कत: $1",
- "acct_creation_throttle_hit": "ऐ विकीक आगन्तुक अहाँक अनिकेतक प्रयोगसँ काल्हि बनेलन्हि अछि {{PLURAL:$1|1 खाता|$1 खाता}}",
- "emailauthenticated": "अहाँक ई-पत्र संकेत $2 केँ $3 पर सत्यापित भेल।",
- "emailnotauthenticated": "अहाँक ई-पत्र संकेत अखन धरि सत्यापित नै भेल अछि।",
- "noemailprefs": "ई सभ उत्पाद काज कऽ सकए तै लेल एकटा ई-पत्र संकेतक निर्देश अपन विकल्पमे करू।",
- "emailconfirmlink": "अपन ई-पत्र संकेत सत्यापित करू",
- "invalidemailaddress": "अमान्य प्रारूपक कारण ऐ ई-पत्र संकेतकेँ स्वीकार नै कएल जा सकैए।\nएकटा मान्य ई-पत्र संकेत लिखू वा ओइ स्थानकेँ खाली करू।",
- "cannotchangeemail": "खाता ई-पत्र संकेत ऐ विकीपर बदलल नै जा सकैए।",
- "emaildisabled": "ई साइट ई-पत्र नै पठाएत।",
+ "mailerror": "ई-पत्र पठेबामे त्रुटी: $1",
+ "acct_creation_throttle_hit": "अहाँके आइ॰पि. पतासँ आएल आगंतुक चौबीस घण्टा सँ बैसी ई विकिमे {{PLURAL:$1|एक खाता|$1 खाता}} बनौलक अछि, इ समयावधिमे ई अधिकतम सिमा छी। अतः अखन ई आइ॰पि. पताके प्रयोग करए वाला आगंतुक आर कोनो खाता नै खोइल सकएत अछि ।",
+ "emailauthenticated": "अहाँक ई-पत्र संकेत $2 केँ $3 बजे सत्यापित भेल।",
+ "emailnotauthenticated": "अहाँक ई-पत्र संकेत अखन धरि सत्यापित नै भेल अछि।\nनिचा देल गेल कोनो सुविधा के लेल अहाँके ई-पत्र नै भेजल जाएत।",
+ "noemailprefs": "इ सुविधा सभ कऽ प्रयोग करए के लेल अपन विकल्पमे ई-पत्र पता राखु।",
+ "emailconfirmlink": "अपन ई-पत्र संकेत सत्यापित करु",
+ "invalidemailaddress": "अमान्य प्रारूपक कारण ऐ ई-पत्र संकेतकेँ स्वीकार नै कएल जा सकैए।\nएकटा मान्य ई-पत्र संकेत लिखू वा ओइ स्थानकेँ खाली करु।",
+ "cannotchangeemail": "खाता ई-पत्र संकेत ऐ विकिपर बदलल नै जा सकैए।",
+ "emaildisabled": "ई अन्तर्जाल ई-पत्र नै पठाएत।",
"accountcreated": "खाता खुजि गेल",
- "accountcreatedtext": "$1 लेल प्रयोक्ता खाता खुजि गेल।",
+ "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|वार्ता]]) के लेल खाता खोलल गेल अछि।",
"createaccount-title": "{{अन्तर्जाल}} लेल खाता निर्माण",
"createaccount-text": "कियो अहाँक ई-पत्र संकेत लेल एकटा खाता {{अन्तर्जाल}} पर खोललन्हि ($4) नाम भेल \"$2\", कूटशब्द भेल \"$3\"।\nअहाँ सम्प्रवेश करू आ अपन कूटशब्द बदलू।\n\nअहाँ ऐ संदेशकेँ बिसरि सकै छी, जँ ई खाता भ्रमवश बनल हुअए।",
"login-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।",
"login-abort-generic": "अहाँक सम्प्रवेश सफल नै भेल- खतम",
+ "login-migrated-generic": "अहाँके खाता माइग्रेट कएल गेल अछि, आर अहाँके प्रयोक्ता नाम आब ई विकिमे नै अछि।",
"loginlanguagelabel": "भाषा : $1",
"suspicious-userlogout": "अहाँक निष्क्रमणक अनुरोध नै मानल गेल कारण ई लागल जे ई पुरान गवेषकक लागि वा दोसराइत उपस्मृति द्वारा पठाओल गेल छल।",
"createacct-another-realname-tip": "मूल नाम वैकल्पिक अछि।\nजँ अहाँ एकरा देबा लेल प्रयोग करै छी, ई अहाँकेँ काजक श्रेय देबा लेल एकर प्रयोग कएल जाएत।",
"pt-login": "सम्प्रवेश",
"pt-login-button": "सम्प्रवेश",
- "pt-createaccount": "खाता खोली",
+ "pt-createaccount": "खाता खोलल जाए",
"pt-userlogout": "निष्क्रमण",
- "php-mail-error-unknown": "पी.एच.पी.क संदेश कार्य() मे अज्ञात दोष",
- "user-mail-no-addy": "बिन ई-पत्र संकेतक ई-पत्र पठेबाक प्रयास",
- "user-mail-no-body": "एकटा खाली वा बहुत कनिका ई-पत्र भेजवाक प्रयास कल गेल ।",
+ "php-mail-error-unknown": "पी.एच.पी.कऽ समाद कार्य() मे अज्ञात दोष भेल।",
+ "user-mail-no-addy": "बिन ई-पत्र संकेतक ई-पत्र पठेबाक प्रयास कएल गेल।",
+ "user-mail-no-body": "एकटा खाली वा बहुत कनिका ई-पत्र भेजवाक प्रयास कल गेल।",
"changepassword": "कूटशब्द बदलू",
- "resetpass_announce": "अहाँक अस्थायी ई-पत्र विध्यादेशसँ सम्प्रवेश केने छी।\nसम्प्रवेश सम्पूर्ण करबा लेल, अहाँ एकटा नव कूटशब्द एतए निर्धारित करू:",
+ "resetpass_announce": "सम्प्रवेश सम्पूर्ण करबा लेल, अहाँ एकटा नव कूटशब्द एतए निर्धारित करु।",
"resetpass_text": "<!-- पाठ एतऽ लिखू -->",
"resetpass_header": "खाता कूटशब्द बदलू",
"oldpassword": "पुरान कूटशब्द",
@@ -485,16 +494,19 @@
"retypenew": "नव कूटशब्द फेरसँ टंकित करू",
"resetpass_submit": "कूटशब्द बनाउ आ सम्प्रवेश करू",
"changepassword-success": "अहाँक कूटशब्द सफलतासँ बदलि देल गेल!",
- "changepassword-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।",
- "resetpass_forbidden": "कूटशब्द सभ नै बदलल जा सकैए।",
- "resetpass-no-info": "अहाँकेँ ऐ पन्नाकेँ पढ़बाले सम्प्रवेशित हुअए पड़त।",
+ "changepassword-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास $1 करबासँ पहिने कने काल थम्हू।",
+ "resetpass_forbidden": "कूटशब्द नै बदलल जा सकैए।",
+ "resetpass-no-info": "अहाँकेँ ऐ पन्नाकेँ सोझे प्रयोग करबालेल सम्प्रवेशित हुअए पड़त।",
"resetpass-submit-loggedin": "कूटशब्द बदलू",
"resetpass-submit-cancel": "खतम करू",
"resetpass-wrong-oldpass": "अमान्य अस्थायी वा अखुनका कूटशब्द।\nअहाँ पहिनहिये सफलतासँ कूटशब्द बदलि लेने छी वा एकटा नव अस्थायी कूटशब्द लेल आग्रह केने छी।",
- "resetpass-recycled": "रीसेट करएके लेल नयाँ कूटशब्दमे कृपया अपन वर्तमान कूटशब्द नै द के नयाँ देल जाउ।",
- "resetpass-temp-password": "तात्कालिक कूटशब्द",
- "resetpass-abort-generic": "कूटशब्दमें बदलाव कोनो एक्सटेंशन द्वारा रोक देल गएल अछि ।",
- "resetpass-expired": "अहाँके कूटशब्दक वैधता अवधि खत्तम भ गेल अछि । कृपया सम्प्रवेशित करवाक लेल नयाँ कूटशब्द राखु।",
+ "resetpass-recycled": "रीसेट करएके लेल नयाँ कूटशब्दमे कृपया अपन वर्तमान कूटशब्द नै द के नयाँ कूटशब्द देल जाउ।",
+ "resetpass-temp-emailed": "अहाँ अखन एकटा अस्थायी ई-पत्र कोड सँ सम्प्रवेशित केनए छी। सम्प्रवेश पूर्ण करए के लेल अहाँ के एतए नयाँ कूटशब्द राखए पडत:",
+ "resetpass-temp-password": "तात्कालिक कूटशब्द:",
+ "resetpass-abort-generic": "कूटशब्दमे बदलाव कोनो एक्सटेंशनद्वारा रोकल गएल अछि।",
+ "resetpass-expired": "अहाँके कूटशब्दक वैधता अवधि खत्तम भऽ गेल अछि । कृपया सम्प्रवेशित करवाक लेल नयाँ कूटशब्द राखु।",
+ "resetpass-expired-soft": "अहाँके कूटशब्दकऽ वैधता अवधि समाप्त भऽ गेल आर कूटशब्द परिवार्तान करवाक आवश्यकता अछि। कृपया एगो नव कूटशब्द राखु, वा पाछु रिसेट करवाक लेल \"{{int:resetpass-submit-cancel}}\" क्लिक करु।",
+ "resetpass-validity-soft": "अहाँके कूटशब्द मान्य नै अछि: $1 \n\nकृपया आब एगो नव कूटशब्द चुनु, वा पाछु पुनर्स्थापित करए के लेल \"{{int:resetpass-submit-cancel}}\" में क्लिक करू।",
"passwordreset": "कूटशब्द फेरसँ बनाउ",
"passwordreset-text-one": "अपन कूटशब्द रीसेट करवाक लेल इ फारम भरु ।",
"passwordreset-text-many": "{{PLURAL:$1|ई-पत्रके माध्यमसऽ एकटा अस्थायी कूटशब्द पावैलेल कोनो एकटा डिब्बा भरु ।}}",
@@ -514,7 +526,6 @@
"passwordreset-emailsent-capture": "एकटा स्मरण ई-पत्र पठाएल गेल अछि, जे नीचाँ देखाएल अछि।",
"passwordreset-emailerror-capture": "एकटा स्मरण ई-पत्र बनाएल गेल अछि, जे नीचाँ देखाएल अछि, मुदा प्र्योक्ताकेँ एकरा पठेबाक प्रयास विफल भेल: $1",
"changeemail": "ई-पत्र संकेत बदलू",
- "changeemail-header": "ई-पत्र पता खाता बदलू",
"changeemail-text": "अपन ई-पत्र संकेत बदलबा लेल ऐ आवेदनकेँ भरू। अहाँकेँ ऐ परिवर्तनक अनुमोदन लेल अपन कूटशब्द भरए पड़त।",
"changeemail-no-info": "अहाँकेँ ऐ पन्नाकेँ सोझे देखबाले सम्प्रवेशित हुअए पड़त।",
"changeemail-oldemail": "अखुनका ई-पत्र संकेत:",
@@ -522,13 +533,14 @@
"changeemail-none": "(कोनो नै)",
"changeemail-password": "अहाके {{SITENAME}} कूटशब्द:",
"changeemail-submit": "ई-पत्र संकेत बदलू",
- "changeemail-cancel": "खतम",
"changeemail-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।",
"resettokens": "टोकन रीसेट करी",
+ "resettokens-text": "जे स्तोक अहाँके खाता सँ सम्बद्ध किछु विशिष्ट व्यक्तिगत जानकारी प्रदान करएत अछि, अहाँ वोकरा एतए सँ रिसेट कऽ सकएत छी।\n\nयदि अहाँ एकरा गलती सँ केकरो देखा देनए छी वा अहाँ के खाता ह्याक भ गेल अछि तहन अहाँके एकरा रिसेट कऽ देना चाही।",
"resettokens-no-tokens": "रीसेट करवाक लेल कोनो टोकन नै अछि।",
"resettokens-legend": "टोकन रीसेट करी",
"resettokens-tokens": "टोकन:",
"resettokens-token-label": "$1 (वर्तमान मूल्य: $2)",
+ "resettokens-watchlist-token": "[[Special:Watchlist|अहाँके साकांक्षसूची के पृष्ठसभ में परिवर्तन सभ]] के वेब फिट (Atom/RSS) लेल स्तोक",
"resettokens-done": "टोकन रीसेट भेल अछि।",
"resettokens-resetbutton": "छानल टोकन रीसेट करु",
"bold_sample": "गँहीर लेखन",
@@ -575,7 +587,7 @@
"loginreqtitle": "सम्प्रवेश आवश्यक",
"loginreqlink": "सम्प्रवेश",
"loginreqpagetext": "अहाँ निश्चयरूपेँ $1 दोसर पन्ना देखबाक लेल।",
- "accmailtitle": "कोटशब्द पठा देल गेल।",
+ "accmailtitle": "कूटशब्द पठा देल गेल।",
"accmailtext": "एकटा बिना क्रमबला निर्माण पद्धतिसँ कूटशब्दक निर्माण [[User talk:$1|$1]] लेल $2 केँ पठाएल गेल अछि।\n\nऐ खाताक कूटशब्द बदलल जा सकैए ''[[Special:ChangePassword|कूटशब्द बदलू]]'' पन्नापर सम्प्रवेश केलाक बाद।",
"newarticle": "(नव)",
"newarticletext": "अहाँ एहेन पन्नाक लिंकक अनुसरण कऽ आएल छी जे पन्ना अखन बनले नै अछि।\nपन्ना बनेबाक लेल नीचाँक बक्शामे टाइप केनाइ शुरू करू (देखू [$1 सहायता पन्ना] विषेष जानकारी लेल)।",
@@ -624,9 +636,10 @@
"templatesused": "{{PLURAL:$1|नमूना|नमूना सभ}} ऐ पन्नापर प्रयुक्त:",
"templatesusedpreview": "{{PLURAL:$1|मास्टरफाइल|सभटा मास्टरफाइल}} used in this preview:ऐ पूर्वप्रदर्शनमे प्रयुक्त :",
"templatesusedsection": "{{PLURAL:$1|नमूना|नमूना सभ}} ऐ संवर्गमे प्रयुक्त:",
- "template-protected": "(सुरक्षित)",
- "template-semiprotected": "(अर्ध-रक्षित)",
+ "template-protected": "(संरक्षित)",
+ "template-semiprotected": "(अर्ध-संरक्षित)",
"hiddencategories": "ई पन्ना सदस्य अछि {{PLURAL:$1|1 नुकाएल संवर्ग|$1 नुकाएल संवर्ग सभ}}:",
+ "edittools": "<!-- एतए देल गेल पाठ सम्पादन आर अपलोड फारम के निचा देखाओल जाएत। -->",
"edittools-upload": "-",
"nocreatetext": "{{अन्तर्जाल}} नव पन्ना निर्माणक क्षमताकेँ सीमित कऽ देने अछि।\nअहाँ आपस जा सकै छी आ कोनो पन्नाकेँ सम्पादित कऽ सकै छी, वा [[Special:UserLogin|log in or create an account]]",
"nocreate-loggedin": "अहाँकेँ नव पन्ना बनेबाक अधिकार नै अछि।",
@@ -647,8 +660,12 @@
"postedit-confirmation-saved": "अहाके संपादनके सुरक्षित भेल ।",
"edit-already-exists": "नव पन्नाक निर्माण नै भऽ सकल।\nई पहिनहियेसँ वर्तमान अछि।",
"defaultmessagetext": "पूर्वनिर्धारित संदेश पाठ",
+ "content-failed-to-parse": "$1 के लेल $2 सामग्री के बिच्छेदन करए में विफल, त्रुटि: $3",
"invalid-content-data": "अवैध डाटा सामग्री",
+ "content-not-allowed-here": "[[$2]] पृष्ठ पर \"$1\" सामग्री वर्जित अछि।",
+ "editwarning-warning": "इ पृष्ठ के छोड़ए सँ अहाके द्वारा कएल गेल कोनो भी परिवर्तन गायब भऽ जाएत।\nयदि अहाँ सम्प्रवेश केनए छी तहन ई सूचना के देखावए लेल अपन वरीयता सभ के \"{{int:prefs-editing}}\" भाग में बन्द कऽ सकएत छी।",
"editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नै अछि",
+ "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मोडल द्वारा समर्थित नै अछि।",
"content-model-wikitext": "विकिटेक्स्ट",
"content-model-text": "सामान्य पाठ",
"content-model-javascript": "जावास्क्रिप्ट",
@@ -662,6 +679,15 @@
"parser-template-loop-warning": "नमूना परिक्रम भेटल: [[$1]]",
"parser-template-recursion-depth-warning": "नमूना प्रत्यावर्तन गहीर सीमा पार केलक ($1)",
"language-converter-depth-warning": "भाषान्तर गहीर सीमा पार केलक ($1)",
+ "node-count-exceeded-category": "पन्ना जे में नोड-संख्या सीमा पार कऽ गेल अछि",
+ "node-count-exceeded-category-desc": "ई पृष्ठ अधिकतम नोड गिनती पार केनए अछि",
+ "node-count-exceeded-warning": "पन्ना नोड गिनती पार केनए अछि",
+ "expansion-depth-exceeded-category": "ई पन्ना विस्तार गहिराई पार केनए अछि",
+ "expansion-depth-exceeded-category-desc": "ई पृष्ठ अधिकतम रुपमे विस्तार गहिराई पार केनए अछि",
+ "expansion-depth-exceeded-warning": "पन्ना विस्तार गहिराई पार केनए अछि",
+ "parser-unstrip-loop-warning": "Unstrip लूप पाओल गेल",
+ "parser-unstrip-recursion-limit": "Unstrip पुनरावर्तन सीमा पार कइर गेल($1)",
+ "converter-manual-rule-error": "म्यानुअल भाषा परिवर्तन नियम में त्रुटि",
"undo-success": "ई सम्पादन पूर्ववत बदलल जा सकैए।\nकृपा क' नीचाँक तुलनाक जाँच करू ई देखैले जे ई वएह भेल अछि जे अहाँ चाहै छलहुँ, आ तखन सम्पादन ख़तम करबा लेल नीचाँक परिवर्तन सुरक्षित करू ।",
"undo-failure": "मध्यवर्ती विरोधी सम्पादनक कारण ऐ सम्पादनकेँ खतम नै कएल जा सकैए।",
"undo-norev": "ई सम्पादन खतम नै कएला जा सकैए कारण ई अछि नै वा मेटा देल गेल अछि।",
@@ -752,7 +778,7 @@
"revdelete-reasonotherlist": "दोसर कारण",
"revdelete-edit-reasonlist": "मेटेबाक कारणक सम्पादन करू",
"revdelete-offender": "संशोधन केनिहार:",
- "suppressionlog": "दबाएलबला वृत्तलेख",
+ "suppressionlog": "दबाएलगेल वृत्तलेख",
"suppressionlogtext": "नीचाँ मेटाएल आ प्रतिबन्धक उल्लेख अछि जे संचालकसँ नुकाएल सामिग्री अछि।\nअखन स्थित प्रभावी प्रतिबन्ध आ अवरोध लेल देखू [[Special:BlockList|IP block list]] ।",
"mergehistory": "मिज्झर भेल पन्ना सभक इतिहास",
"mergehistory-header": "ई पन्ना अहाँकेँ एकटा स्रोत पन्नाक एकटा नव पन्नामे संशोधन इतिहासकेँ मिज्झर करबाक अनुमति दैत अछि।\nसुनिश्चित होउ जे ई परिवर्तन ऐतिहासिक पन्ना सांतत्य स्थापित करत।",
@@ -775,7 +801,6 @@
"mergehistory-same-destination": "स्रोत आ लक्ष्य पन्ना सभ एक्के नै भऽ सकैए",
"mergehistory-reason": "कारण:",
"mergelog": "मिज्झरबला वृत्तलेख",
- "pagemerge-logentry": "मिज्झर केलौं [[$1]]केँ [[$2]] मे (संशोधन $3 धरि)",
"revertmerge": "नै मिज्झर",
"mergelogpagetext": "नीचाँ एक पन्ना इतिहासक दोसरमे अद्यतन मिश्रणक सूची अछि।",
"history-title": "\"$1\" क संशोधन इतिहास",
@@ -816,6 +841,7 @@
"search-result-category-size": "{{PLURAL:$1|1 सदस्य|$1 सदस्य}} ({{PLURAL:$2|1 उपसंवर्ग|$2 उपसंवर्ग}}, {{PLURAL:$3|1 संचिका|$3 संचिका}})",
"search-redirect": "(रस्ता बदलेन $1)",
"search-section": "(शाखा $1)",
+ "search-category": "(श्रेणी $1)",
"search-file-match": "(फाइल सामग्रीसे मेल खेलक अछि)",
"search-suggest": "अहाँ मोने अछि जे:$1",
"search-interwiki-caption": "सम्बन्धित परियोजना सभ",
@@ -885,7 +911,7 @@
"timezoneregion-arctic": "आर्कटिक",
"timezoneregion-asia": "एशिया",
"timezoneregion-atlantic": "अटलांटिक महासागर",
- "timezoneregion-australia": "ऑस्ट्रेलिया",
+ "timezoneregion-australia": "अस्ट्रेलिया",
"timezoneregion-europe": "यूरोप",
"timezoneregion-indian": "हिंद महासागर",
"timezoneregion-pacific": "प्रशांत महासागर",
@@ -916,7 +942,7 @@
"yourgender": "पुरुख आकि स्त्री",
"gender-unknown": "अज्ञात",
"gender-male": "पुरुख",
- "gender-female": "महिला",
+ "gender-female": "स्त्री",
"prefs-help-gender": "वैकल्पिक: तंत्रांश द्वारा लिंग निरपेक्ष सम्बोधन लेल प्रयुक्त।\nई सूचना सार्वजनिक हएत।",
"email": "ई-पत्र",
"prefs-help-realname": "मूल नाम वैकल्पिक अछि।\nजँ अहाँ एकरा देबा लेल प्रयोग करै छी, ई अहाँकेँ काजक श्रेय देबा लेल एकर प्रयोग कएल जाएत।",
@@ -1000,8 +1026,8 @@
"right-reupload-own": "अपन उपारोपित पन्ना सभक पुनर्लेखन करू",
"right-reupload-shared": "श्रव्य-दृश्य साझी बखारीक फाइलक पुनर्लेखन स्थानीय रूपेँ करू।",
"right-upload_by_url": "सार्वत्रिक विभव संकेतसँ संचिका उपारोपित करू",
- "right-purge": "जालक उपस्मृतिकेँ बिना स्वीकृतिक पन्नाक लेल खतम करू।",
- "right-autoconfirmed": "अर्द्ध-संरक्षित पन्ना सभक सम्पादन करू।",
+ "right-purge": "जालक उपस्मृतिकेँ बिना स्वीकृतिक पन्नाक लेल खतम करू",
+ "right-autoconfirmed": "अर्द्ध-संरक्षित पन्ना सभक सम्पादन करू",
"right-bot": "स्वचालित प्रक्रियाक रूपमे देखल जाए",
"right-nominornewtalk": "वार्ता पन्नापर मामूली सम्पादन नव संदेश संसूचक नै आनैए",
"right-apihighlimits": "ए.पी.आइ. अभ्यर्थनामे पैघ सीमाक प्रयोग करू",
@@ -1058,7 +1084,7 @@
"rightslog": "प्रयोक्ता अधिकार वृत्तलेख",
"rightslogtext": "ई प्रयोक्ता अधिकार परिवर्तन सभक वृतलेख छी।",
"action-read": "ई पन्ना पढ़ू",
- "action-edit": "ऐ पन्नाकेँ सम्पादित करू",
+ "action-edit": "ई पन्नाकेँ सम्पादित करू",
"action-createpage": "पन्ना सभ बनाउ",
"action-createtalk": "वार्ता पन्ना सभ बनाउ",
"action-createaccount": "ई प्रयोक्ता खाता बनाउ",
@@ -1068,21 +1094,21 @@
"action-move-subpages": "ऐ पन्ना आ एकर उपपन्नाकेँ घसकाउ",
"action-move-rootuserpages": "मूल प्रयोक्ता पन्ना सभ घसकाउ",
"action-move-categorypages": "श्रेणी पृष्ठ स्थानांतरित करू",
- "action-movefile": "ऐ संचिकाकेँ घसकाउ",
- "action-upload": "ऐ संचिकाकेँ उपारोपित करू",
- "action-reupload": "ऐ संचिकाक पुनर्लेखन करू",
- "action-reupload-shared": "ऐ संचिकाकेँ साझी बखारीमे नजरि नै दिअ",
- "action-upload_by_url": "आइ संचिकाकेँ सार्वत्रिक विभव संकेतसँ उपारोपित करू",
+ "action-movefile": "ई संचिकाकेँ घसकाउ",
+ "action-upload": "ई संचिकाकेँ उपारोपित करू",
+ "action-reupload": "ई संचिकाक पुनर्लेखन करू",
+ "action-reupload-shared": "ई संचिकाकेँ साझी बखारीमे नजरि नै दिअ",
+ "action-upload_by_url": "ई संचिकाकेँ सार्वत्रिक विभव संकेतसँ उपारोपित करू",
"action-writeapi": "लेख्य ए.पी.आइ.क प्रयोग करू",
"action-delete": "ई पन्ना मेटाउ",
"action-deleterevision": "ई संशोधन मेटाउ",
"action-deletedhistory": "ऐ पन्नाक मेटाएलबला इतिहास देखू",
"action-browsearchive": "मेटाएल पन्ना सभकेँ ताकू",
- "action-undelete": "ऐ पन्नाकेँ फेरसँ आनू",
- "action-suppressrevision": "ऐ नुकाएल संशोधनकेँ पुनरीक्षित आ पुनर्स्थापित करू",
- "action-suppressionlog": "ऐ व्यक्तिगत वृत्तलेखकेँ देखू",
- "action-block": "ऐ प्रयोक्ताकेँ सम्पादनसँ रोकू",
- "action-protect": "ऐ पन्नाक सुरक्षा स्तर बदलू",
+ "action-undelete": "ई पन्नाकेँ फेरसँ आनू",
+ "action-suppressrevision": "ई नुकाएल संशोधनकेँ पुनरीक्षित आ पुनर्स्थापित करू",
+ "action-suppressionlog": "ई व्यक्तिगत वृत्तलेखकेँ देखू",
+ "action-block": "ई प्रयोक्ताकेँ सम्पादनसँ रोकू",
+ "action-protect": "ई पन्नाक सुरक्षा स्तर बदलू",
"action-rollback": "कृपा कऽ अन्तिम प्रयोक्ताक सम्पादनकेँ प्रत्यावर्तित करू जे एक खास पन्नाकेँ सम्पादित केलन्हि",
"action-import": "ऐ पन्नाकेँ दोसर विकीसँ आनू",
"action-importupload": "ऐ पन्नाकेँ संचिका उपारोपणसँ आनू",
@@ -1097,13 +1123,13 @@
"action-editmywatchlist": "काँच साकांक्षसूची संपादित करू",
"action-viewmywatchlist": "अपन काँच साकांक्षसूची देखु",
"action-viewmyprivateinfo": "अपन व्यक्तिगत जानकारी देखु",
- "action-editmyprivateinfo": "अपन व्यक्तिगत जानकारी संपादित करु",
+ "action-editmyprivateinfo": "अपन व्यक्तिगत जानकारी सम्पादित करु",
"nchanges": "$1 {{PLURAL:$1|परिवर्त्तन|परिवर्त्तन}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम बेर देखला के बाद स}}",
"enhancedrc-history": "इतिहास",
"recentchanges": "लगक परिवर्तन सभ",
"recentchanges-legend": "नव परिवर्तन सभक विकल्प सभ",
- "recentchanges-summary": "ऐ पन्नापर विकीमे भेल सभसँ अद्यतन परिवर्तनपर नजरि राखू।",
+ "recentchanges-summary": "ई पन्नापर विकीमे भेल सभसँ अद्यतन परिवर्तनपर नजरि राखू।",
"recentchanges-noresult": "इ अवधिके दौरान इ मापदंडके पूर्ण करेत समय कोनो परिवर्तन नै केएल गेल अछि।",
"recentchanges-feed-description": "ऐ सूचना-तंत्रांशमे विकीमे भेल सभसँ लगक परिवर्तन ताकू",
"recentchanges-label-newpage": "ई सम्पादन एकटा नव पन्नाक निर्माण केलक।",
@@ -1158,7 +1184,7 @@
"recentchangeslinked-summary": "ई विशेष पन्नासँ सम्बद्ध पन्ना सभमे (आकि कोनो विशेष वर्गक समूहमे) भेल परिवर्तनक सूची छी ।\n[[Special:Watchlist|your watchlist]] पर पन्नासभ '''गाढ़''' अछि।",
"recentchangeslinked-page": "पन्नाक नाम",
"recentchangeslinked-to": "देल पन्नाक सम्बन्धी पन्नामे परिवर्तन देखाउ",
- "upload": "फाइल अपलोड करू",
+ "upload": "फाइल अपलोड करी",
"uploadbtn": "फाइल अपलोड",
"reuploaddesc": "उपारोपण रद्द करू आ उपारोपण आवेदन-पत्रपर घुरू।",
"upload-tryagain": "संशोधित संचिका वर्णन दिअ",
@@ -1200,7 +1226,7 @@
"hookaborted": "संशोधन जे अहाँ करऽ चाहलौं से विस्तार नोकसी द्वारा खतम कऽ देल गेल।",
"illegal-filename": "ऐ तरहक संचिका नाम अमान्य अछि।",
"overwrite": "वर्तमान संचिकाकेँ अधिलेखित केनाइ मान्य नै अछि।",
- "unknown-error": "एकटा अबूझ भ्रम आए।",
+ "unknown-error": "एकटा अबूझ भ्रम आएल।",
"tmp-create-error": "अस्थायी संचिका नै बना सकल।",
"tmp-write-error": "अस्थायी संचिका लिखबा काल भ्रम।",
"large-file": "ई सुझाव अछि जे संचिका $1 सँ पैघ नै हुअए;\nई संचिका अछि $2 ।",
@@ -1308,6 +1334,7 @@
"license": "अधिकृत करब:",
"license-header": "अधिकृत करब",
"nolicense": "कियो नै चुनाएल",
+ "licenses-edit": "लाइसेन्स विकल्प सम्पादन",
"license-nopreview": "(पूर्वावलोकन उपलब्ध नै अछि)",
"upload_source_url": "(एकटा मान्य, सार्वजनिक प्रवेशबला सार्वत्रिक विभव संकेत)",
"upload_source_file": "(अहाँक संगणकपर एकटा संचिका)",
@@ -1357,6 +1384,7 @@
"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 केँ] लग।",
@@ -1392,28 +1420,25 @@
"unusedtemplateswlh": "दोसर लागि सभ",
"randompage": "अव्यवस्थित पृष्ठ",
"randompage-nopages": "ऐमे दोसर पन्ना नै अछि {{PLURAL:$2|namespace|namespaces}}: $1 ।",
+ "randomincategory-category": "श्रेणी:",
"randomredirect": "मिज्झर बदलेनबला लागि",
"randomredirect-nopages": "नामस्थान \"$1\" मे कोनो बदलेनबला लागि नै अछि।",
"statistics": "सांख्यिकी",
"statistics-header-pages": "पन्नाक सांख्यिकी",
"statistics-header-edits": "सांख्यिकीक सम्पादन करू",
- "statistics-header-views": "सांख्यिकी देखू",
"statistics-header-users": "प्रयोक्ता सांख्यिकी",
"statistics-header-hooks": "दोसर सांख्यिकी",
"statistics-articles": "अनुक्रम पन्ना सभ",
"statistics-pages": "पन्ना सभ",
- "statistics-pages-desc": "वार्ता पन्ना, बदलेनबला लागि सभ इत्यादि सहित सभटा पन्ना सभ।",
+ "statistics-pages-desc": "वार्ता पन्ना, बदलेन इत्यादि सहित सभटा विकि पन्ना सभ।",
"statistics-files": "उपारोपित संचिका सभ",
"statistics-edits": "{{अन्तर्जाल}} अएबासँ लऽ कऽ भेल पन्ना सम्पादन सभ।",
"statistics-edits-average": "प्रति पन्ना औसत सम्पादन",
- "statistics-views-total": "दृश्य आइ धरि",
- "statistics-views-total-desc": "अस्तित्वहीन पन्ना आ विशेष पन्नाक दृश्य सम्मिलित नै अछि",
- "statistics-views-peredit": "प्रति सम्पादन देखल गेल",
- "statistics-users": "[[Special:ListUsers|users]] छथि",
+ "statistics-users": "पंजीकृत [[Special:ListUsers|प्रयोक्ता]]",
"statistics-users-active": "सक्रिय प्रयोक्ता",
"statistics-users-active-desc": "प्रयोक्ता जे अन्तिम {{PLURAL:$1|दिन|$1 दिन}} मे कोनो काज केने छथि",
- "statistics-mostpopular": "सभसँ बेसी देखल गेल पन्ना",
- "doubleredirects": "द्वितीयक लागिबला बदलेन",
+ "pageswithprop-submit": "जाऊ",
+ "doubleredirects": "द्वितीयक लागएबला बदलेन",
"doubleredirectstext": "ई पन्ना ओइ पन्ना सभक संकलन छी जे बदलेन करैए दोसर बदलेनबला पन्नासँ।\nप्रत्येक पाँती पहिल आ दोसर बदलेनक लागि रखने अछि आ संगे दोसर बदलेनक लक्ष्य सेहो, जे वास्तवमे \"वास्तव\" लक्ष्य पन्ना अछि, जकरापर पहिल बदलेनकेँ जेबाक चाही। \n <del>Crossed out</del> प्रविष्टिक हल भेटल अछि।",
"double-redirect-fixed-move": "[[$1]] घसकाएल गेल।\nई आब [[$2]] दिस जा रहल अछि।",
"double-redirect-fixed-maintenance": "द्वितीयक बदलेन [[$1]] सँ [[$2]] कएल गेल।",
@@ -1429,8 +1454,10 @@
"fewestrevisions": "एकाध संशोधनबला पन्ना सभ",
"nbytes": "$1 {{PLURAL:$1|बाइट|बाइट्स}}",
"ncategories": "{{PLURAL:$1|संवर्ग|कएटा संवर्ग}}",
+ "ninterwikis": "$1 अन्तरविकि {{PLURAL:$1|जड़ी|जड़ि सभ}}",
"nlinks": "$1 {{PLURAL:$1|लागि|लागि सभ}}",
"nmembers": "$1 {{PLURAL:$1|सदस्य|सदस्य सभ}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|प्रयोक्ता|प्रयोक्ता सभ}}",
"nrevisions": "$1{{PLURAL:$1|संशोधन|संशोधन सभ}}",
"nviews": "$1 {{PLURAL:$1|दृश्य|दृश्य सभ}}",
"nimagelinks": "$1पर प्रयुक्त {{PLURAL:$1|पन्ना|पन्ना सभ}}",
@@ -1444,7 +1471,6 @@
"uncategorizedtemplates": "अवर्गीकृत नमूना सभ",
"unusedcategories": "नै प्रयोग कएल संवर्ग सभ",
"unusedimages": "बिना प्रयोगक संचिका सभ",
- "popularpages": "लोकप्रिय पन्ना सभ",
"wantedcategories": "आवश्यक संवर्ग सभ",
"wantedpages": "आवश्यक पन्ना सभ",
"wantedpages-badtitle": "परिणाम सूचीमे अमान्य शीर्षक:$1",
@@ -1457,6 +1483,8 @@
"mostimages": "सभसँ बेसी लागिबला संचिका सभ",
"mostrevisions": "सभसँ बेसी संशोधनबला पन्ना सभ",
"prefixindex": "उपसर्गक संग सभटा पृष्ठ",
+ "prefixindex-namespace": "उपसर्ग भएल सभ पृष्ठ ($1 नामस्थान)",
+ "prefixindex-strip": "सूची में उपसर्ग नुकाउ",
"shortpages": "पन्ना सभ छाँटू",
"longpages": "नमगर पन्ना सभ",
"deadendpages": "एकदमसँ अन्त भऽ जाएबला पन्ना सभ",
@@ -1464,7 +1492,7 @@
"protectedpages": "संरक्षित पन्ना सभ",
"protectedpages-indef": "अनन्तकालिक सुरक्षा मात्र",
"protectedpages-cascade": "तराउपड़ी सुरक्षा मात्र",
- "protectedpages-noredirect": "पुनर्निर्देश नुकाऊँ",
+ "protectedpages-noredirect": "बदलेन नुकाऊँ",
"protectedpagesempty": "कोनो पन्ना ऐ सभ परिमिति लेल सुरक्षित नै राखल गेल अछि।",
"protectedpages-timestamp": "समएकाल",
"protectedpages-page": "पृष्ठ",
@@ -1496,30 +1524,36 @@
"pager-older-n": "{{PLURAL:$1|साबिक 1|साबिक $1}}",
"suppress": "नजरिपर नै आएल",
"querypage-disabled": "ई विशिष्ट पन्ना कार्य दक्षता लेल अशक्त कएल गेल अछि।",
+ "apihelp": "API मद्दत",
+ "apihelp-no-such-module": "मोड्युल \"$1\" नै भेटल।",
"booksources": "किताबक सन्दर्भ सभ",
"booksources-search-legend": "किताबक सन्दर्भक लेल ताकू",
"booksources-isbn": "आइ.एस.बी.एन.:",
- "booksources-go": "चलू",
+ "booksources-search": "ताकू",
"booksources-text": "नीचाँ दोसर जालस्थलसँ लागि सभक सूची अछि जे नव आ प्रयोग कएल किताब बेचैए, आ ई पोथी सभक विषयमे ओहो सूचना दऽ सकैए जे अहाँ ताकि रहल छी:",
"booksources-invalid-isbn": "देल आइ.एस.बी.एन. संख्या मान्य नै बुझाइत अछि; कृपा कऽ मूल स्रोतसँ द्वितीयक बनेबा काल भेल भ्रमकेँ जाँचू।",
"specialloguserlabel": "कर्ता:",
"speciallogtitlelabel": "लक्ष्य (शीर्षक वा प्रयोक्ता):",
"log": "वृत्तलेख सभ",
- "all-logs-page": "सभटा सार्वजनिक वृत्तलेख",
+ "all-logs-page": "सभ सार्वजनिक वृत्तलेख",
"alllogstext": "{{अन्तर्जाल}} क सभटा उपलब्ध वृत्तलेखक संयुक्त दृश्य।\nअहाँ दृश्यकेँ संकीर्ण करबा लेल वृत्तलेखक एकटा प्रकार चुनि सकै छी, प्रयोक्तानाम (ब्रह्मक्षर-लघ्वक्षर विचारणीय), वा प्रभावित पन्ना (एतौ ब्रह्मक्षर-लघ्वक्षर विचारणीय)।",
"logempty": "वृत्तलेखमे कोनो मेल खाइबला बौस्तु नै।",
"log-title-wildcard": "खोज शीर्षक सभ ऐ पाठसँ प्रारम्भ",
+ "showhideselectedlogentries": "देखाउ/ नुकाउ चयनित लग सभ",
"allpages": "सभ पन्ना",
"nextpage": "अगिला पन्ना ($1)",
"prevpage": "पहिलुका पन्ना ($1)",
"allpagesfrom": "पन्ना प्रदर्शन प्रारम्भ भेल:",
"allpagesto": "एतऽ खतम होमएबला पन्नाक प्रदर्शन करू:",
- "allarticles": "सभटा पन्ना",
+ "allarticles": "सभटा लेख",
"allinnamespace": "सभटा पन्ना ($1 नामगाम)",
"allpagessubmit": "जाउ",
"allpagesprefix": "उपसर्गक संग दृश्य पन्ना सभ:",
"allpagesbadtitle": "देल पन्नाक शीर्षक गलत, गलत सम्बन्धित अन्तर-भाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।",
"allpages-bad-ns": "{{जालस्थल}} मे \"$1\" नामगाम नै अछि।",
+ "allpages-hide-redirects": "बदलेन नुकाऊँ",
+ "cachedspecial-viewing-cached-ttl": "अहाँ ई पृष्ठ के क्यास कएल अवतरण देख रहल छी, जे $1 पूरान भऽ सकएत अछि।",
+ "cachedspecial-viewing-cached-ts": "अहाँ इ पृष्ठ के क्यास कएल गएल अवतरण देख रहल छी, जे कि संभवतः वर्तमान अवस्था सँ भिन्न भऽ सकएत अछि।",
"cachedspecial-refresh-now": "लब्का देखु",
"categories": "संवर्ग सभ",
"categoriespagetext": "ई {{PLURAL:$1|संवर्गमे अछि|संवर्ग सभमे अछि}} पन्ना वा मीडिया।\n[[Special:UnusedCategories|Unused categories]] एतए देखाएल नै अछि।\nईहो देखू [[Special:WantedCategories|wanted categories]]।",
@@ -1553,27 +1587,34 @@
"listgrouprights-group": "वर्ग",
"listgrouprights-rights": "अधिकार",
"listgrouprights-helppage": "Help: वर्ग अधिकार",
- "listgrouprights-members": "(सदस्यक सूची)",
+ "listgrouprights-members": "(प्रयोक्ता सूची)",
"listgrouprights-addgroup": "जोड़ू {{PLURAL:$2|वर्ग|वर्ग}}: $1",
"listgrouprights-removegroup": "निकालू {{PLURAL:$2|वर्ग|वर्ग}}: $1",
"listgrouprights-addgroup-all": "सभटा वर्ग जोड़ू",
"listgrouprights-removegroup-all": "सभटा वर्ग निकालू",
"listgrouprights-addgroup-self": "जोड़ू {{PLURAL:$2|वर्ग|वर्ग}} अपन खातामे: $1",
"listgrouprights-removegroup-self": "निकालू {{PLURAL:$2|वर्ग|वर्ग}} अपन खातामे: $1",
- "listgrouprights-addgroup-self-all": "सभटा वर्गकेँ अपन खातामे जोड़ू",
- "listgrouprights-removegroup-self-all": "सभटा वर्गकेँ अपन खातासँ निकालू",
- "listgrouprights-namespaceprotection-header": "नामस्थान वर्जित",
- "listgrouprights-namespaceprotection-namespace": "नामस्थान :",
+ "listgrouprights-addgroup-self-all": "सभ वर्गकेँ अपन खातामे जोड़ू",
+ "listgrouprights-removegroup-self-all": "सभ वर्गकेँ अपन खातासँ निकालू",
+ "listgrouprights-namespaceprotection-header": "नामस्थान प्रतिबन्धित",
+ "listgrouprights-namespaceprotection-namespace": "नामस्थान",
"listgrouprights-namespaceprotection-restrictedto": "सांच(सभ) के संपादन करए लेल",
"trackingcategories": "श्रेणीके ट्रयाक करु",
+ "trackingcategories-msg": "श्रेणीके ट्रयाक करु",
+ "trackingcategories-name": "सन्देश नाम",
+ "trackingcategories-desc": "श्रेणी समावेशीकरण मापदण्ड",
+ "trackingcategories-nodesc": "कोनो वर्णन उपलब्ध नै।",
+ "trackingcategories-disabled": "श्रेणी नुकाएल गेल अछि",
"mailnologin": "कोनो पठेबाक पता नै",
"mailnologintext": "अहाँ [[Special:UserLogin|सम्प्रवेशित]] हेबाक चाही आ अहाँक विकल्प [[Special:Preferences|preferences]] मे एकटा मान्य ई-पत्र संकेत दोसर प्रयोक्ताकेँ पठेबा लेल हेबाक चाही।",
"emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
+ "emailuser-title-target": "इ {{GENDER:$1|प्रयोक्ता}} के ई-पत्र भेजु।",
+ "emailuser-title-notarget": "ई-पत्र प्रयोक्ता",
"emailpage": "ई-पत्र प्रयोक्ता",
"emailpagetext": "अहाँक नीचाँक आवेदन-पत्र ऐ प्रयोक्ताकेँ ई-पत्र संदेश पठेबा लेल प्रयोग कऽ सकै छी।\nई-पत्र जे अहाँ [[Special:Preferences|your user preferences]] मे देलहुँ से ई-पत्र\"एतएसँ\" पतासँ देखाएत, से प्राप्तकर्ता सोझे अहाँकेँ उत्तर देबामे समर्थ हेताह।",
"defemailsubject": "{{जालस्थल}} प्रयोक्ता \"$1\" सँ ई-पत्र",
"usermaildisabled": "प्रयोक्ता ई-पत्र अशक्त",
- "usermaildisabledtext": "अहाँ दोसर प्रयोक्ताकेँ ऐ विकीपर ई-पत्र नै पठा सकै छिऐ।",
+ "usermaildisabledtext": "अहाँ दोसर प्रयोक्ताकेँ ऐ विकीपर ई-पत्र नै पठा सकए छी",
"noemailtitle": "कोनो ई-पत्र पता नै",
"noemailtext": "ई पर्योक्ता अपन कोनो मान्य ई-पत्र संकेत नै देने अछि।",
"nowikiemailtext": "ई प्रयोक्ता दोसर प्रयोक्तासँ ई-पत्र प्राप्त नै करबाक विकल्प चुनने अछि।",
@@ -1598,15 +1639,17 @@
"watchlist": "साकांक्षसूची",
"mywatchlist": "साकांक्ष-सूची",
"watchlistfor2": "$1 $2 लेल",
- "nowatchlist": "अहाँक साकांक्ष-सूचीमे कोनो बौस्तु नै अछि।",
+ "nowatchlist": "अहाँक साकांक्ष-सूचीमे कोनो पन्ना नै अछि।",
"watchlistanontext": "कृपा कऽ $1 अहाँक साकांक्ष-सूचीकेँ देखबा वा सम्पादित करबा लेल।",
"watchnologin": "सम्प्रवेशित नै",
"addwatch": "साकांक्ष सूचीमे जोड़ू",
"addedwatchtext": "पन्ना \"[[:$1]]\" अहाँक [[Special:Watchlist|साकांक्ष सूची]] मे जोड़ल गेल।\nऐ पन्नामे भविष्यक परिवर्तन आ एकर सम्बन्धित चौबटिया पन्ना एतए सूचीबद्ध रहत, आ पन्ना [[Special:RecentChanges|हालक परिवर्तन]]मे '''गाढ़''' देखाएत , जइसँ आसानीसँ एकरा चिन्हल जा सकत।",
+ "addedwatchtext-short": "इ पृष्ठ \"$1\" अहाँ के साकांक्ष सूची मे राखल गेल अछि।",
"removewatch": "साकांक्ष सूचीसँ हटाउ",
"removedwatchtext": "पन्ना \"[[:$1]]\" हटाएल गेल [[Special:Watchlist|अहाँक साकांक्षसूची]] सँ।",
- "watch": "ताकिमे",
- "watchthispage": "ऐ पृष्ठपर नजरि राखू",
+ "removedwatchtext-short": "इ पृष्ठ \"$1\" अहाँ के साकांक्ष सूची मे राखल गेल अछि।",
+ "watch": "ध्यान राखु",
+ "watchthispage": "ऐ पृष्ठपर ध्यान राखू",
"unwatch": "छोड़ू",
"unwatchthispage": "देखनाइ छोड़ू",
"notanarticle": "कोनो विषय सूची नै",
@@ -1615,13 +1658,16 @@
"wlheader-enotif": "ई-पत्र सूचना लागू अछि।",
"wlheader-showupdated": "पन्ना सभ जे अहाँक एतए अन्तिम बेर अएलाक बाद बदलल अछि तकर सूची देल अछि '''गाढ़''' मे",
"wlnote": "नीचाँ {{PLURAL:$1|is the last change|are the last '''$1''' changes}} अन्तिम {{PLURAL:$2|hour|'''$2''' hours}} $3, $4 जेना।",
- "wlshowlast": "देखाउ अन्तिम $1 घण्टा $2 दिन $3",
+ "wlshowlast": "देखाउ अन्तिम $1 घण्टा $2 दिन",
"watchlist-options": "साकांक्षसूचीक विकल्प सभ",
"watching": "ताकिमे...",
"unwatching": "छोड़ल ...",
"watcherrortext": "अहाँक साकांक्ष-सूची विकल्प \"$1\" लेल बदलबा काल एकटा भ्रम आएल।",
"enotif_reset": "सभ पन्नाकेँ देखल चिन्हित करू",
"enotif_impersonal_salutation": "{{अन्तर्जाल}} प्रयोक्ता",
+ "enotif_subject_deleted": "{{SITENAME}} पन्ना $1 के {{gender:$2|$2}} हटेलक",
+ "enotif_subject_created": "{{SITENAME}} पन्ना $1 को {{gender:$2|$2}} बनेलक",
+ "enotif_subject_moved": "{{SITENAME}} पृष्ठ $1 के {{gender:$2|$2}} घसकेलक",
"enotif_lastvisited": "देखू $1 अपन अन्तिम बेर अएलाक बादक परिवर्तन लेल।",
"enotif_lastdiff": "ऐ परिवर्तनकेँ देखबा लेल $1 देखू।",
"enotif_anon_editor": "गुप्त प्रयोक्ता $1",
@@ -1641,7 +1687,7 @@
"actionfailed": "कार्य नै भेल",
"deletedtext": "\"$1\" केँ मेटा देल गेल अछि।\nदेखू $2 हालक मेटाएल सामिग्रीक अभिलेख लेल।",
"dellogpage": "मेटाएल सामिग्रीक वृत्तलेख",
- "dellogpagetext": "नीचाँ एकदम हालक मेटाएलबला सूची अछि।",
+ "dellogpagetext": "नीचाँ एकदम लगक मेटाएल पन्नाकऽ सूची छी।",
"deletionlog": "मेटाएल सामिग्रीक वृत्तलेख",
"reverted": "पुरान कोनो संशोधन धरि घुराउ",
"deletecomment": "कारण:",
@@ -1651,9 +1697,12 @@
"delete-edit-reasonlist": "मेटेबाक कारणक सम्पादन करू",
"delete-toobig": "ऐ पन्नामे बड्ड बेसी सम्पादन इतिहास अछि, $1 सँ बेसी {{PLURAL:$1|revision|revisions}}।\nओइ सभ पन्नाक मेटाएब प्रतिबन्धित कएल गेल अछि जइसँ आकस्मिक क्षति नै हुअए {{जालस्थलक}}।",
"delete-warning-toobig": "ऐ पन्नामे बड्ड सम्पादन इतिहास अछि, $1 सँ बेसी {{PLURAL:$1|revision|revisions}}।\nएकरा मेटेलापर दत्तनिधि क्रिया {{जालस्थल}} खतरामे पड़त;\nसतर्कीसँ आगाँ बढ़ू।",
+ "deleteprotected": "अहाँ इ पन्ना नै मेटा सकए छी कियाकि ई सुरक्षण कएल गेल अछि",
+ "deleting-backlinks-warning": "'''चेतौनी:''' जे पृष्ठ अहाँ हटावए लेल जा रहल छी वोकरा में [[Special:WhatLinksHere/{{FULLPAGENAME}}|अन्य पृष्ठ]] जुड़एत अछि अथवा वोकरा ट्रान्सक्ल्युड करएत अछि।",
"rollback": "प्रत्यावर्तित सम्पादन",
- "rollback_short": "प्रत्यावर्तन",
"rollbacklink": "प्रत्यावर्तन",
+ "rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादन}} पूर्ववत करू",
+ "rollbacklinkcount-morethan": "$1 सँ अधिक {{PLURAL:$1|सम्पादन}} पूर्ववत करू",
"rollbackfailed": "प्रत्यावर्तन असफल",
"cantrollback": "सम्पादन आपस नै भऽ सकै अछि;\nअन्तिम योगदान दैबला ऐ पन्नाक एकमात्र लेखक छी।",
"alreadyrolled": "अन्तिम सम्पादनक प्रत्यावर्तन नै भऽ सकैए [[:$1]] by [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nकियो आन ऐ पन्नाकेँ पहिनहिये सम्पादित वा प्रत्यावर्तित कऽ देने अछि।\nऐ पन्नाक अन्तिम सम्पादन भेल अछि एकरा द्वारा [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])।",
@@ -1663,17 +1712,19 @@
"rollback-success": "$1 केर संपादन हटाऊ. \n$2 केर संपादित आखिरी अवतरण क पुनर्स्थापित करल गेल.",
"sessionfailure-title": "सत्र विफल भ गेल",
"sessionfailure": "एहन लागैत अछि जे अहां के लागिन सत्र में कोनो त्रुटि अछि. सत्र अपहरण से बचाबय सं सावधानीक लेल अहां के अहि क्रियाकलाप क रद्द क देल गेल. अहां पाछां के पृष्ठ पर जौउ आ पृष्ठ के फेर सं लोड क दोबारा कोशिश करू.",
- "protectlogpage": "सुरक्षा लॉग",
- "protectlogtext": "नीचाँ किछु पन्ना सुरक्षा परिवर्तनक सूची अछि।\nदेखू [[Special:ProtectedPages|protected pages list]] हालक कार्यरत पन्ना सुरक्षाक सूची लेल।",
- "protectedarticle": "रक्षित \"[[$1]]\"",
+ "protectlogpage": "सुरक्षा लग",
+ "protectlogtext": "नीचाँ किछु पन्ना सुरक्षा परिवर्तनक सूची अछि।\nदेखू [[Special:ProtectedPages|protected pages list]] लगक कार्यरत पन्ना सुरक्षाकऽ सूची लेल।",
+ "protectedarticle": "रक्षित \"[[$1]]\" कएल गेल",
"modifiedarticleprotection": "\"[[$1]]\" लेल बदलैत रक्षा स्तर",
"unprotectedarticle": "अरक्षित केलौं \"[[$1]]\"",
- "movedarticleprotection": "सुरक्षा स्तर \"[[$2]]\" से बदल क \"[[$1]]\" क देल गेल.",
+ "movedarticleprotection": "सुरक्षा स्तर \"[[$2]]\" सँ बदल के \"[[$1]]\" क देल गेल",
"protect-title": "\"$1\" लेल रक्षा स्तर बदलू",
"protect-title-notallowed": "\"$1\" लेल रक्षा स्तर देखू",
"prot_1movedto2": "[[$1]] गेल एतय [[$2]]",
"protect-badnamespace-title": "अरक्षित नाम-गाम",
"protect-badnamespace-text": "ऐ नामगामक पन्नामे सुरक्षा सम्भव नै।",
+ "protect-norestrictiontypes-text": "ई पृष्ठ सुरक्षित नै कएल जा सकएत अछि कियाकि कोनो सुरक्षा प्रकार उपलब्ध नै अछि।",
+ "protect-norestrictiontypes-title": "सुरक्षाहीन पृष्ठ",
"protect-legend": "सुरक्षितता निर्धारित करू.",
"protectcomment": "कारण:",
"protectexpiry": "खतम हएत:",
@@ -1685,10 +1736,10 @@
"protect-locked-dblock": "सक्रिय दत्तनिधि प्रतिबन्धक कारण सुरक्षा स्तर नै बदलल जा सकैए।\nएतए '''$1''' लेल वर्तमान नियत विकल्प देल अछि:",
"protect-locked-access": "अहाँक खाता अहाँकेँ रक्षा स्तरमे परिवर्तनक अधिकार नै दैत अछि।\nएतए '''$1'''पन्नाक वर्तमान परिस्थिति देल गेल अछि:",
"protect-cascadeon": "ई पन्ना अखन रक्षित अछि कारण ई ऐ मे सम्मिलित अछि {{PLURAL:$1|पन्ना, जे अछि|पन्ना सभ, जे सभ अछि}} तराउपड़ी रक्षण लागू।\nअहाँ ऐ पन्नाक रक्षा स्तरकेँ बदलि सकै छी, मुदा ताइ सँ तराउपड़ी रक्षापर असर नै पड़त।",
- "protect-default": "सभ प्रयोक्ताकेँ अधिकार दिअ",
- "protect-fallback": "\"$1\" अनुमति चाही",
- "protect-level-autoconfirmed": "नव आ अपंजीकृत प्रयोक्ताकेँ प्रतिबन्धित करू",
- "protect-level-sysop": "माइनजन मात्र",
+ "protect-default": "सभ प्रयोक्ताकेँ अधिकार दएल जाए",
+ "protect-fallback": "\"$1\" अधिकार भेल प्रयोक्तासभके अनुमति दएल जाए",
+ "protect-level-autoconfirmed": "मात्र स्वत: स्थापित प्रयोक्ताकेँ अनुमति दएल जाए",
+ "protect-level-sysop": "माइनजन मात्रके अनुमति दएल जाए",
"protect-summary-cascade": "तराउपड़ी",
"protect-expiring": "खतम हएत $1 (UTC)",
"protect-expiring-local": "खतम होइए $1",
@@ -1698,6 +1749,7 @@
"protect-othertime": "दोसर समए:",
"protect-othertime-op": "दोसर समए",
"protect-existing-expiry": "अखुनका खतम हेबाक समए : $3, $2",
+ "protect-existing-expiry-infinity": "अखुनका खतम होबाक समय:अनिश्चितकाल",
"protect-otherreason": "दोसर/ अतिरिक्त कारण:",
"protect-otherreason-op": "दोसर कारण",
"protect-dropdown": "*सामान्य सुरक्षा कारण\n** अत्यधिक दकचब\n** अत्यधिक अनपेक्षित संदेश \n** नोकसानबला सम्पादन चेतौनी\n** बेसी पाठकबला पन्ना",
@@ -1737,9 +1789,9 @@
"undeletedrevisions": "{{PLURAL:$1|1 revision|$1 revisions}} घुराएल",
"undeletedrevisions-files": "{{PLURAL:$1|1 संशोधन|$1 संशोधन}} and {{PLURAL:$2|1 संचिका|$2 संचिका}} आनल",
"undeletedfiles": "{{PLURAL:$1|1 संचिका|$1 संचिका सभ}} आनल",
- "cannotundelete": "फेरसँ नै आबि सकल;\nसम्भव जे कियो आन पहिनहिये एकरा आनि लेने छथि।",
- "undeletedpage": "'''$1 आनि लेल गेल'''$1\nपूछू [[Special:Log/delete|deletion log]] वर्तमान मेटाएल आ आनल सूची लेल।",
- "undelete-header": "देखू [[Special:Log/delete|the deletion log]] हालक मेटाएल पन्ना लेल।",
+ "cannotundelete": "फेरसँ नै आबि सकल:\n$",
+ "undeletedpage": "'''$1 के पुनर्स्थापित करल गेल अछि'''\n\nलग पास में हटाओल गेल आ पुनर्स्थापित कएल गेल पन्ना सभके जानकारी के लेल [[Special:Log/delete|हटाओल गेल लग]] देखु।",
+ "undelete-header": "हालक मेटाएल पन्ना के लेल [[Special:Log/delete|हटाएल लग]] देखू।",
"undelete-search-title": "मेटाएल पन्नाकेँ ताकू",
"undelete-search-box": "मेटाएल पन्ना सभकेँ ताकू",
"undelete-search-prefix": "से शुरु भेल पन्ना देखाबू.",
@@ -1757,31 +1809,34 @@
"namespace": "चेन्हासी समूह",
"invert": "उनटा चयन",
"tooltip-invert": "ऐ बक्साकेँ सही करू पन्ना परिवर्तनकेँ नुकेबा लेल चयनित नामस्थानक भीतर (आ संग लागल नामस्थान जँ सही कएल अछि तखन)",
- "namespace_association": "सम्बद्ध नामस्थान",
+ "namespace_association": "सम्बद्ध चेन्हासी",
"tooltip-namespace_association": "ऐ बक्साकेँ सही करू जइसँ वार्ता आ विषय नामस्थान समाहित कएल जा सकए चुनल नामस्थानमे",
"blanknamespace": "(मुख्य)",
"contributions": "प्रयोक्ताक योगदान सभ",
"contributions-title": "$1 लेल प्रयोक्ताक अवदान",
"mycontris": "योगदान",
"contribsub2": "$1 ($2) लेल",
+ "contributions-userdoesnotexist": "प्रयोक्ता खाता \"$1\" पंजीकृत नै अछि।",
"nocontribs": "कोनो परिवर्तन ऐ सँ मेल नै खाइए।",
"uctop": "(शिखर)",
"month": "माससँ (आ पहिने)",
"year": "ऐ साल (आ पहिने)",
"sp-contributions-newbies": "नव खाताक अवदानकेँ देखाउ",
- "sp-contributions-newbies-sub": "नब सदस्यक लेल.",
- "sp-contributions-newbies-title": "नब सदस्यक योगदान",
- "sp-contributions-blocklog": "प्रतिबन्धबला वृत्तलेख",
- "sp-contributions-deleted": "प्रयोक्ताक मेटाएल योगदान सभ",
+ "sp-contributions-newbies-sub": "नब प्रयोक्ताकऽ लेल",
+ "sp-contributions-newbies-title": "नब प्रयोक्ताकऽ योगदान",
+ "sp-contributions-blocklog": "प्रतिबन्धित वृत्तलेख",
+ "sp-contributions-suppresslog": "मेटाएल प्रयोक्ता योगदान सभ",
+ "sp-contributions-deleted": "प्रयोक्ताकऽ मेटाएल योगदान सभ",
"sp-contributions-uploads": "उपारोपण",
"sp-contributions-logs": "वृत्तलेख सभ",
"sp-contributions-talk": "वार्त्ता",
- "sp-contributions-userrights": "प्रयोक्ता अधिकारक प्रबन्धन",
- "sp-contributions-blocked-notice": "ई प्रयोक्ता अखन प्रतिबन्धित अछि।\nअद्यतन प्रतिबन्धित वृत्तलेख लेखा सन्दर्भ नीचाँ देल अछि:",
+ "sp-contributions-userrights": "प्रयोक्ता अधिकारकऽ प्रबन्धन",
+ "sp-contributions-blocked-notice": "ई प्रयोक्ता अखन प्रतिबन्धित अछि।\nनव प्रतिबन्धित वृत्तलेख लेख सन्दर्भ नीचाँ देल अछि:",
"sp-contributions-blocked-notice-anon": "ई अनिकेत अखन प्रतिबन्धित अछि।\nअद्यतन प्रतिबन्धित वृत्तलेख लेखा सन्दर्भ नीचाँ देल अछि:",
"sp-contributions-search": "अवदानक लेल ताकू",
"sp-contributions-username": "अनिकेत संकेत वा प्रयोक्तानाम:",
"sp-contributions-toponly": "मात्र ओइ सम्पादनकेँ देखाउ जे अद्यतन संशोधन छी।",
+ "sp-contributions-newonly": "मात्र ओइ सम्पादन देखाउ जे पृष्ठ निर्मित भेल अछि",
"sp-contributions-submit": "ताकू",
"whatlinkshere": "एतय कोन लिंक अछि",
"whatlinkshere-title": "\"$1\" सँ सम्बन्धित पन्ना सभ",
@@ -1791,14 +1846,14 @@
"nolinkshere-ns": "कोनो पन्नाक लागि '''[[:$1]]''' चुनल नामगाममे नै अछि।",
"isredirect": "पन्नाकेँ घुराउ",
"istemplate": "परागत",
- "isimage": "फाइलक लिंक",
- "whatlinkshere-prev": "{{PLURAL:$1|पहिलुका|पहिलुका सभ $1}}",
+ "isimage": "फाइलकऽ जडी",
+ "whatlinkshere-prev": "{{PLURAL:$1|पहिलुका|पहिलुका $1}}",
"whatlinkshere-next": "{{PLURAL:$1|अगुलका|अगुलका $1}}",
- "whatlinkshere-links": "← लिंक",
+ "whatlinkshere-links": "← जडीसभ",
"whatlinkshere-hideredirs": "$1 घुरबैए",
"whatlinkshere-hidetrans": "$1 परागत",
"whatlinkshere-hidelinks": "$1 सम्बन्ध सभ",
- "whatlinkshere-hideimages": "$1 फाइल लागि सभ",
+ "whatlinkshere-hideimages": "$1 फाइल जडी सभ",
"whatlinkshere-filters": "चलनी सभ",
"autoblockid": "स्वतःप्रतिबन्धित #$1",
"block": "प्रयोक्ताकेँ प्रतिबन्धित करू",
@@ -1838,6 +1893,7 @@
"unblocked": "[[User:$1|$1]] अप्रतिबन्धित कएल गेल",
"unblocked-range": "$1 अप्रतिबन्धित कएल गेल",
"unblocked-id": "$1 अप्रतिबन्धित कएल गेल",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] खोजल गेल।",
"blocklist": "प्रतिबन्धित प्रयोक्ता सभ",
"ipblocklist": "प्रतिबन्धित प्रयोक्ता सभ",
"ipblocklist-legend": "प्रतिबन्धित प्रयोक्ताकेँ ताकू",
@@ -1879,7 +1935,7 @@
"block-log-flags-anononly": "गुप्त प्रयोक्ता मात्र",
"block-log-flags-nocreate": "लेखा निर्माण अशक्त कएल",
"block-log-flags-noautoblock": "स्वचालित प्रतिबन्ध अशक्त",
- "block-log-flags-noemail": "ई-मेल अवरुद्ध",
+ "block-log-flags-noemail": "ई-पत्र अशक्त",
"block-log-flags-nousertalk": "अपन वार्ता पन्ना सम्पादित नै कऽ सकब",
"block-log-flags-angry-autoblock": "नीक स्वचालित प्रतिबन्ध देल गेल",
"block-log-flags-hiddenname": "प्रयोक्तानाम नुकाएल",
@@ -1947,10 +2003,10 @@
"movepage-page-unmoved": "पन्ना $1 केँ $2 लग नै घसकाएल जा सकैए।",
"movepage-max-pages": "बेसी सें बेसी $1 पृष्ठ बदलि के {{PLURAL:$1| क देल गेल अछि|क देल गेल अछि}}, आब आर पृष्ठ अपने आप नहि बदलत.",
"movelogpage": "वृत्तलेख हटाउ",
- "movelogpagetext": "नाम बदलल गेल लेख क सूचि नीचां देल गेल अछि",
- "movesubpage": "{{PLURAL:$1|उप पृष्ठ|उप पृष्ठ}}",
- "movesubpagetext": "नीचां $1 {{PLURAL:$1| पृष्ठ देखा द रहल अछि, जे अहि पृष्ठक उप पन्ना अछि|पृष्ठ देखा द रहल अछि, जे अहि पृष्ठक उप पन्ना अछि}}।",
- "movenosubpage": "अहि पृष्ठ का कोनो उप पन्ना नहि अछि.",
+ "movelogpagetext": "नाम बदलल गेल लेख कऽ सूचि नीचां देल गेल अछि",
+ "movesubpage": "{{PLURAL:$1|उप पन्ना|उप पन्ना}}",
+ "movesubpagetext": "नीचां $1 {{PLURAL:$1| पन्ना देखाओल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि|पन्ना देखावोल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि}}।",
+ "movenosubpage": "अहि पन्ना कऽ कोनो उप पन्ना नहि अछि।",
"movereason": "कारण:",
"revertmove": "फेरसँ वएह",
"delete_and_move": "मेटाउ आ हटू",
@@ -1968,13 +2024,14 @@
"imagetypemismatch": "नव संचिका विस्तारक अपन प्रकारसँ मेल नै खाइए।",
"imageinvalidfilename": "लक्ष्यित संचिकाक नाम अवैध अछि",
"fix-double-redirects": "मूल शीर्षक धरि जाहि बला सभटा पुनर्निर्देशनों के सेहो बदलु.",
- "move-leave-redirect": "एकटा पुनर्निर्देशन के पांछा छोडि के जाऊ.",
- "protectedpagemovewarning": "''' चेतौनी: ई पन्ना संरक्षित अछि से खाली संचालन अधिकारयुक्त प्रयोक्ता एकरा हटा सकैत छथि।'''\nअद्यतन वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:",
- "semiprotectedpagemovewarning": "'''नोट:''' ई पन्ना संरक्षित अछि से खाली पंजीकृत प्रयोक्ता एकरा हटा सकैत छथि।\nअद्यतन वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:",
+ "move-leave-redirect": "एकटा बदलेन के पांछा छोडि के जाऊ",
+ "protectedpagemovewarning": "''' चेतौनी: ई पन्ना संरक्षित अछि से खाली संचालन अधिकारयुक्त प्रयोक्ता एकरा घुसका सकैत छथि।'''\nनव वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:",
+ "semiprotectedpagemovewarning": "'''नोट:''' ई पन्ना संरक्षित अछि से खाली पंजीकृत प्रयोक्ता एकरा घुसका सकैत छथि।\nनव वृतलेख उल्लेख नीचाँ सन्दर्भ लेल देल जा रहल अछि:",
"move-over-sharedrepo": "[[:$1]] अछि एकटा साझी बखारीमे। कोनो संचिकाकेँ ऐ नामसँ अनलापर साझीबला एकटा संचिका मेटा जाएत।",
"file-exists-sharedrepo": "साझी बखारीमे ऐ नामसँ पहिनहियेसँ एकटा संचिका अछि।\nकृपा कऽ दोसर नाम चुनू।",
"export": "पन्ना सभकेँ पठाउ",
"exporttext": "अहाँ पाठ आ कोनो पन्ना/ वा पन्ना-सभक सम्पादन इतिहासकेँ दोसर ठाम कोनो एक्स.एम.एल. संचिकामे लपेट कऽ पठा सकै छी।\nई कोनो दोसर विकीमे मीडियाविकीक प्रयोग कऽ [[Special:Import|import page]] द्वारा आयात कएल जा सकैए।\n\nपन्ना सभक निर्यात लेल, नीचाँक पाठ बक्शामे शीर्षक सभ भरू, प्रति पाँती एक शीर्षक, आ चुनू जे अहाँ अखुनका आ पहिलुका सभटा संशोधन राखऽ चाहै छी, पन्ना इतिहास पाँतीक संग, आकि अखुनका संशोधन पछिला सम्पादनक सूचनाक संग।\n\nबादबला स्थितिमे अहाँ एकटा लागिक प्रयोग कऽ सकै छी, जेना \"[[{{MediaWiki:Mainpage}}]]\" पन्ना लेल [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।",
+ "exportall": "पन्ना सभकेँ निर्यात करू",
"exportcuronly": "अखुनका संशोधन मात्र लिअ, पूरा इतिहास नै।",
"exportnohistory": "----\n'''सूचना:''' परिणाम कुशलताकेँ देखैत पन्नाक सम्पूर्ण इतिहासक निर्यात अशक्त कएल गेल अछि।",
"exportlistauthors": "सभ पन्नाक सम्पूर्ण योगदानकर्ताक सूची जोड़ू",
@@ -2000,11 +2057,14 @@
"allmessages-prefix": "उपसर्गक आधारपर छाँटू:",
"allmessages-language": "भाषा:",
"allmessages-filter-submit": "चलू",
+ "allmessages-filter-translate": "अनुवाद करु",
"thumbnail-more": "पैघ",
"filemissing": "संचिका हेराएल",
"thumbnail_error": "लघुचित्र निर्माण कालमे भ्रम:$1",
+ "thumbnail_error_remote": "$1 सँ त्रुटि सन्देश: $2",
"djvu_page_error": "डेजावू पन्ना सकक बाहर अछि",
"djvu_no_xml": "डेजावू संचिकाक एक्स.एम.एल. नै आनि सकलौं",
+ "thumbnail-temp-create": "अस्थायी थम्बनेल फाइल बनाबए में असफल",
"thumbnail_invalid_params": "अमान्य लघुचित्र परिमिति",
"thumbnail_dest_directory": "लक्ष्य निर्देशिका नै बना सकल",
"thumbnail_image-type": "चित्र प्रकार समर्थित नै अछि",
@@ -2013,6 +2073,8 @@
"import": "पन्ना सभकेँ आनू",
"importinterwiki": "ट्रान्सविकी आनू",
"import-interwiki-text": "एकटा विकी आ पन्ना शीर्षक अनबाले चुनू।\nसंशोधन तिथि आ सम्पादकक नाम सुरक्षित रहत।\nसभटा ट्रान्सविकी आयात क्रिया सम्प्रवेशित अछि [[Special:Log/import|import log]] पर।",
+ "import-interwiki-sourcewiki": "मूल विकि:",
+ "import-interwiki-sourcepage": "मूल पन्ना:",
"import-interwiki-history": "अए पन्नाक सभटा इतिहास संशोधनक द्वितीयक बनाउ",
"import-interwiki-templates": "सभटा नमूना शामिल करू",
"import-interwiki-submit": "आनू",
@@ -2027,7 +2089,7 @@
"importfailed": "आयात विफल: <nowiki>$1</nowiki>",
"importunknownsource": "अज्ञात आयात स्रोत प्रकार",
"importcantopen": "आयात संचिकाकेँ नै खोलि सकलौं",
- "importbadinterwiki": "खराप अन्तरविकी लागि",
+ "importbadinterwiki": "खराप अन्तरविकी लिंक",
"importsuccess": "आयात सफल!",
"importnosources": "कोनो ट्रान्सविकी आयात स्रोत परिभाषित नै अछि आ सोझ इतिहास उपारोपण अशक्त कएल अछि।",
"importnofile": "कोनो आयातित संचिका उपारोपित नै भेल।",
@@ -2045,11 +2107,14 @@
"import-error-create": "\"$1\" पन्ना आयातित नै कएल गेल अछि कारण अहाँकेँ एकरा निर्माण करबाक अधिकार नै अछि।",
"importlogpage": "लॉगक आयात",
"importlogpagetext": "पन्ना सभक प्रशासनिक आयात दोसर विकीक सम्पादन इतिहासक संग।",
- "import-logentry-upload": "[[$1]] आयात केलौं संचिका उपारोपण द्वारा",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}}",
- "import-logentry-interwiki": "$1 क विकीअन्तरण",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}} $2 सँ",
"javascripttest": "जावास्क्रिप्ट परिक्षण",
+ "javascripttest-pagetext-noframework": "इ पृष्ठ जावास्क्रिप्ट परीक्षण चलावए के लेल अछि।",
+ "javascripttest-pagetext-unknownframework": "अज्ञात परीक्षण ढाँचा \"$1\"",
+ "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचा सभ में सँ एक चुनु: $1",
+ "javascripttest-pagetext-skins": "परीक्षण करए के लेल त्वचा चुनु:",
+ "javascripttest-qunit-intro": "mediawiki.org पर [$1 परीक्षण के प्रलेखन] देखु।",
"tooltip-pt-userpage": "अहाँक खेसरा पन्ना",
"tooltip-pt-anonuserpage": "सम्पाद्न कएल जा रहल स्थानक अनिकेतक प्रयोक्ता पन्ना",
"tooltip-pt-mytalk": "अहाँक वार्त्ता पृष्ठ",
@@ -2057,8 +2122,9 @@
"tooltip-pt-preferences": "हमर मोनपसंद",
"tooltip-pt-watchlist": "पन्ना सभ जकर परिवर्त्तन पर अहाँक नजरि अछि",
"tooltip-pt-mycontris": "अहाँक योगदानक सूची",
- "tooltip-pt-login": "लॉग इन करब नीक, परञ्च आवश्यक नहि.",
+ "tooltip-pt-login": "अहाँ कें खाता खोलक लेल प्रोत्साहित कल जाएत अछि; मुदा इ अनिवार्य नै छै",
"tooltip-pt-logout": "फेर आयब",
+ "tooltip-pt-createaccount": "अहाँ कें खाता खोलक लेल प्रोत्साहित कल जाएत अछि; मुदा इ अनिवार्य नै छै",
"tooltip-ca-talk": "विषयसूचीक पन्नाक संबंधमे वर्त्तालाप",
"tooltip-ca-edit": "अहाँ एहि पन्नाकेँ संपादित कए सकैत छी। कृपया सुरक्षित करबासँ पहिने पूर्वप्रदर्शन बटम उपयोग करू।",
"tooltip-ca-addsection": "नव खण्ड शुरू करू",
@@ -2081,14 +2147,15 @@
"tooltip-n-currentevents": "लगक घटनाक विषयमे आधार सूचना प्राप्त करू।",
"tooltip-n-recentchanges": "विकीमे लगक परिवर्त्तनक सूची.",
"tooltip-n-randompage": "कोनो अनिर्धारित पन्ना लोड करू",
- "tooltip-n-help": "प्राप्त करबाक स्थान.",
- "tooltip-t-whatlinkshere": "सभटा विकी-पन्नाक सूची जकर एतय लिंक अछि",
+ "tooltip-n-help": "पता लगावए वाला स्थान",
+ "tooltip-t-whatlinkshere": "सभ विकी-पन्नाक सूची जकर एतय लिंक अछि",
"tooltip-t-recentchangeslinked": "ऐ पृष्ठक लागिक पन्नामे भेल नव परिवर्तन",
"tooltip-feed-rss": "ऐ पन्ना लेल आर.एस.एस. सूचना",
"tooltip-feed-atom": "ऐ पन्ना लेल अणु समदिया",
"tooltip-t-contributions": "ऐ प्रयोक्ताक योगदानक सूची देखू",
"tooltip-t-emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
- "tooltip-t-upload": "चित्र आकि मीडिया फाइलकेँ अपलोड करू",
+ "tooltip-t-info": "ई पृष्ठ के सम्बन्धमें आर बैंसी जानकारी",
+ "tooltip-t-upload": "चित्र आकि मीडिया फाइलकेँ अपलोड करी",
"tooltip-t-specialpages": "सभटा विशेष पन्नाक सूची",
"tooltip-t-print": "ऐ पृष्ठक छपैबला रूप",
"tooltip-t-permalink": "पन्नाक ऐ संवर्धनक स्थायी लिंक",
@@ -2108,6 +2175,8 @@
"tooltip-diff": "देखाऊ जे परिवर्त्तन अहाँ एहि लेखमे कएलहुँ।",
"tooltip-compareselectedversions": "ऐ पन्नाक दू टा चयन कएल संशोधनक बीचक अन्तर देखू",
"tooltip-watch": "ऐ पन्नाकेँ अपन साकांक्ष सूचीमे जोड़ू",
+ "tooltip-watchlistedit-normal-submit": "शीर्षक सभकेँ हटाउ",
+ "tooltip-watchlistedit-raw-submit": "साकांक्षसूची उद्दतन करू",
"tooltip-recreate": "पन्ना फेरसँ बनाउ तखनो जँ ई मेटा देल गेल हुअए",
"tooltip-upload": "उपारोपण करू",
"tooltip-rollback": "\"प्रत्यावर्तन\" ऐ पन्नाक अन्तिम योगदा करैबलाक सम्पादन (सम्पादन सभ) केँ एक क्लिकमे पुरान जगहपर लऽ जाउ",
@@ -2130,13 +2199,42 @@
"spambot_username": "मीडियाविकी अनिष्ट संकेत सफाइ",
"spam_reverting": "अन्तिम संशोधन लग घुरल जइमे $1 लागि नै अछि",
"spam_blanking": "सभटा संशोधन $1 लागिसँ युक्त अि, खतम कऽ रहल छी",
+ "simpleantispam-label": "ऐन्टी-स्पैम जाँच।\nयी मऽ <strong>नै</strong> भरु!",
"pageinfo-title": "\"$1\"पृष्ठक लेल नब गप",
+ "pageinfo-header-basic": "न्यूनतम जानकारी",
"pageinfo-header-edits": "संपादन",
"pageinfo-header-restrictions": "पन्ना संरक्षण",
- "pageinfo-views": "देखहि बला के संख्या",
+ "pageinfo-header-properties": "पन्ना जानकारी",
+ "pageinfo-display-title": "प्रदर्शन शिर्षक",
+ "pageinfo-default-sort": "डिफल्ट सर्ट कुंजी",
+ "pageinfo-length": "पन्ना आकार (बाइट्स में)",
+ "pageinfo-article-id": "पन्ना आई॰डी॰",
+ "pageinfo-language": "पन्ना सामग्री भाषा",
+ "pageinfo-robot-index": "मान्य",
+ "pageinfo-robot-noindex": "अमान्य",
"pageinfo-watchers": "जानकारक संख्या",
+ "pageinfo-firstuser": "पन्ना सर्जक",
+ "pageinfo-firsttime": "पृष्ठ निर्माण तिथि",
+ "pageinfo-lastuser": "अन्तिम सम्पादक",
+ "pageinfo-lasttime": "नवीनतम सम्पादन तिथि",
"pageinfo-edits": "सम्पादनक संख्या",
"pageinfo-authors": "भिन्न लेखक संख्या",
+ "pageinfo-recent-edits": "लगक सम्पादन सभ के संख्या (पिछुल्का $1 में)",
+ "pageinfo-recent-authors": "लग में लेखक सभ के संख्या",
+ "pageinfo-magic-words": "जादु {{PLURAL:$1|शब्द|शब्द सभ}} ($1)",
+ "pageinfo-hidden-categories": "नुकाएल {{PLURAL:$1|संवर्ग|संवर्ग सभ}} ($1)",
+ "pageinfo-templates": "प्रयुक्त {{PLURAL:$1|आकृति|आकृति सभ}} ($1)",
+ "pageinfo-transclusions": "$1 {{PLURAL:$1|पन्ना|पन्ना}} पर ट्रान्सक्ल्युडेड",
+ "pageinfo-toolboxlink": "ऐ पन्ना पर जानकारी",
+ "pageinfo-redirectsto": "मे पुनर्निर्देश:",
+ "pageinfo-redirectsto-info": "जानकारी",
+ "pageinfo-contentpage": "सामग्री पृष्ठ सभ में गिनल जाएत अछि",
+ "pageinfo-contentpage-yes": "हँ",
+ "pageinfo-protect-cascading-yes": "हँ",
+ "pageinfo-category-info": "संवर्ग जानकारी",
+ "pageinfo-category-pages": "पृष्ठ संख्या",
+ "pageinfo-category-subcats": "उपसंवर्ग के संख्या",
+ "pageinfo-category-files": "फाइल सभके संख्या",
"markaspatrolleddiff": "देखि लेल गेल, एहन चिन्ह लगाऊ",
"markaspatrolledtext": "देखि लेल गेल, एहन चिन्ह लगाऊ",
"markedaspatrolled": "देखि लेल गेल, एहन चिन्ह लगाऊ",
@@ -2146,6 +2244,8 @@
"markedaspatrollederror": "देख लेलिय, एहन चिन्ह नहि लगा सकब.",
"markedaspatrollederrortext": "अहाँ कोनो संशोधनकेँ संचालित निर्दिष्ट करू।",
"markedaspatrollederror-noautopatrol": "अहाँ अपन कएल संशोधनकेँ संचालित नै कहि सकै छी।",
+ "markedaspatrollednotify": "$1 पृष्ठ में कएल गएल ऐ परिवर्तन जाँचल गेल चिन्हासी कएल गेल।",
+ "markedaspatrollederrornotify": "जाँचल चिन्हासी असफल भेल।",
"patrol-log-page": "संचालन वृत्तलेख",
"patrol-log-header": "ई संचालित संशोधन सभक वृत्तलेख छी।",
"log-show-hide-patrol": "$1 निरीक्षण वृत्तलेख",
@@ -2168,6 +2268,8 @@
"file-info-size-pages": "$1 × $2 चित्रकण, संचिका आकार : $3, माइम प्रकार: $4, $5 {{PLURAL:$5|पन्ना|पन्ना सभ}}",
"file-nohires": "ऐसँ बेशी आनन्तर्य उपलब्ध नै अछि।",
"svg-long-desc": "एस.वी.जी. फाइल, मामूली रूपमे $1 × $2 चित्रकण, फाइलक आकार: $3",
+ "svg-long-desc-animated": "एनिमेटेड एस.वी.जी. फाइल,$1 × $2 चित्रकण, फाइलक आकार: $3",
+ "svg-long-error": "अमान्य एस॰वी॰जी फ़ाइल: $1",
"show-big-image": "पूर्ण आनन्तर्य",
"show-big-image-preview": "ऐ पूर्वदृश्यक आकार: $1.",
"show-big-image-other": "दोसर {{PLURAL:$2|resolution|resolutions}}: $1।",
@@ -2177,11 +2279,13 @@
"file-info-png-looped": "घुरियाएल",
"file-info-png-repeat": "छुअल $1 {{PLURAL:$1|बेर|बेर}}",
"file-info-png-frames": "$1 {{PLURAL:$1|खाका |खाका सभ }}",
+ "file-no-thumb-animation": "'''सूचना: प्राविधिक समस्या सभ के कारण इ फाइल के थम्बनेल ऐनिमेटिड नै होएत।'''",
"newimages": "नव संचिका सबहक पेटार",
"imagelisttext": "नीचाँ '''$1''' क सूची अछि {{PLURAL:$1|संचिका|संचिका सभ}} छाँटल $2।",
"newimages-summary": "ऐ विशेष पन्नामे उपारोपित संचिका सभ देखाएल गेल अछि।",
"newimages-legend": "चलनी",
"newimages-label": "संचिका नाम (वा ओकर अंश):",
+ "newimages-showbots": "बोटद्वारा कएल गेल अपलोड देखाऊ",
"noimages": "किछु देखबा योग्य नै |",
"ilsubmit": "ताकू",
"bydate": "तारीख सं",
@@ -2195,7 +2299,22 @@
"minutes": "{{PLURAL:$1|$1 मिनट|$1 मिनट}}",
"hours": "{{PLURAL:$1|$1 घण्टा|$1 घण्टा}}",
"days": "{{PLURAL:$1|$1 दिन|$1 दिन}}",
+ "weeks": "{{PLURAL:$1|$1 सप्ताह|$1 सप्ताह}}",
+ "months": "{{PLURAL:$1|$1 महिना|$1 महिना}}",
+ "years": "{{PLURAL:$1|$1 वर्ष|$1 वर्ष}}",
"ago": "$1 पहिने",
+ "just-now": "अखन",
+ "hours-ago": "$1 {{PLURAL:$1|घंटा|घंटा}} पहिले",
+ "minutes-ago": "$1 {{PLURAL:$1|मिनट|मिनट}} पहिले",
+ "seconds-ago": "$1{{PLURAL:$1|सॅकेंड|सॅकेंड}} पहिले",
+ "monday-at": "सोमवार $1 बजे",
+ "tuesday-at": "मंगलबार $१",
+ "wednesday-at": "बुधवार $1 बजे",
+ "thursday-at": "बृहस्पतिबार $1 बजे",
+ "friday-at": "शुक्रवार $1 बजे",
+ "saturday-at": "शनिबार $1 बजे",
+ "sunday-at": "रविवार $1 बजे",
+ "yesterday-at": "काइल $1 बजे",
"bad_image_list": "फॉर्मेट निम्न प्रकारेँ अछि:\n\nमात्र सूचीबद्ध सामग्री (* सँ प्रारम्भ होय बला पंक्त्ति) विचारनीय अछि। पंक्त्तिक प्रथम लिंक आवश्यक रूपसँ खराब चित्रक लिंक होयबाक चाही।\n\nओही पंक्त्तिक कोनो आर लिंक अपवाद स्वरूप अछि, उदाहरणस्वरूप पन्ना जतय चित्र पंक्त्तिअहि पर होय।",
"variantname-zh-cn": "cn",
"variantname-zh-tw": "tw",
@@ -2235,7 +2354,7 @@
"exif-datetime": "संचिका परिवर्तन तिथि आ समए",
"exif-imagedescription": "चित्र शीर्षक",
"exif-make": "कैमरा निर्माता",
- "exif-model": "कैमरा मॉडल",
+ "exif-model": "कैमरा मोडल",
"exif-software": "प्रयुक्त तंत्रांश",
"exif-artist": "लिखैबला",
"exif-copyright": "सर्वाधिकारी",
@@ -2549,7 +2668,6 @@
"exif-urgency-low": "कम ($1)",
"exif-urgency-high": "बेशी ($1)",
"exif-urgency-other": "प्रयोक्ता परिभाषित प्राथमिकता ($1)",
- "watchlistall2": "सभ",
"namespacesall": "सभटा",
"monthsall": "सभ",
"confirmemail": " ई-पत्र सत्यापित करू",
@@ -2572,6 +2690,7 @@
"invalidateemail": "ई-मेल प्रमाणिकरण रद्द करू",
"scarytranscludedisabled": "[अन्तरविकी समावेश अशक्त कएल गेल अछि]",
"scarytranscludefailed": "[नमूना आनब विफल भेल $1 लेल]",
+ "scarytranscludefailed-httpstatus": "[$1 के लेल आकृति नै आइन पेलौ, त्रुटि: HTTP $2]",
"scarytranscludetoolong": "यूआरएल बड़ पैग अछि",
"deletedwhileediting": "'''Warning''': अहां जखन सें संपादन शुरू केने छी, ओकर बाद से ई पृष्ठ के मिटा देल गेल अछि.",
"confirmrecreate": "प्रयोक्ता [[User:$1|$1]] ([[User talk:$1|वार्ता]]) अहाँक कारण सहित सम्पादनक बाद ऐ पन्नाकेँ मेटा देलक:\n: ''$2''\nकृपा कऽ अहाँ सुनिश्चित करू जे अहाँ ऐ पन्नाकेँ फेरसँ बनबऽ चाहै छी।",
@@ -2584,10 +2703,13 @@
"confirm-watch-top": "ऐ पन्नाकेँ अपन साकांक्ष सूचीमे जोड़ू",
"confirm-unwatch-button": "ठीक अछि",
"confirm-unwatch-top": "ऐ पन्नाकेँ हमर साकांक्ष सूचीसँ हटाउ",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "पहिलुका पृष्ठ",
"imgmultipagenext": "अगुलका पृष्ठ",
"imgmultigo": "जाऊ",
"imgmultigoto": "$1 पृष्ठ पर जाऊ",
+ "img-lang-default": "(डिफल्ट भाषा)",
+ "img-lang-go": "जाऊ",
"ascending_abbrev": "asc",
"descending_abbrev": "desc",
"table_pager_next": "अगला पृष्ठ",
@@ -2602,6 +2724,7 @@
"autosumm-replace": "\"$1\" सहित पाठ परिवर्तित भेल",
"autoredircomment": "[[$1]] के अनुप्रेषित",
"autosumm-new": "'$1'संग नब पृष्ठ बनाओल गेल",
+ "autosumm-newblank": "खालि पन्ना बनाओल गेल",
"lag-warn-normal": "$1 सँ नव बदलल गेल {{PLURAL:$1|सेकेण्ड|सेकेण्ड}} ऐ सूचीमे नै देखाएल गेल।",
"lag-warn-high": "उच्च दत्तनिधि वितरक देरीक कारण, $1 सँ नव परिवर्तन {{PLURAL:$1|सेकेण्ड|सेकेण्ड}} ऐ सूचीमे नै देखाएल जा सकल।",
"watchlistedit-normal-title": "साकांक्षसूची बदलू",
@@ -2617,11 +2740,19 @@
"watchlistedit-raw-done": "अहाँक साकांक्ष-सूची अद्यतन कएल गेल।",
"watchlistedit-raw-added": "{{PLURAL:$1|1 शीर्षक छल|$1शीर्षक सभ रहए}} जोड़ल गेल:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 शीर्षक छल|$1शीर्षक सभ रहए}} हटाएल गेल:",
+ "watchlistedit-clear-title": "साकांक्ष-सूची मेटाओल गेल",
+ "watchlistedit-clear-legend": "साकांक्ष-सूची मेटाउ",
+ "watchlistedit-clear-explain": "एही ठाम रहल सभ शिर्षक अहाँक साकांक्ष-सूची से मेटा जाएत",
+ "watchlistedit-clear-titles": "शीर्षक",
+ "watchlistedit-clear-submit": "साकांक्ष-सूची मेटाउ (ई स्थायी छि!)",
+ "watchlistedit-clear-done": "अहाँक साकांक्ष-सूची मेटाओल गेल।",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|1 शीर्षक छल|$1शीर्षक सभ रहए}} हटाएल गेल:",
+ "watchlistedit-too-many": "एतेक बहुत रास पन्ना सभ देखावोल जाएत।",
+ "watchlisttools-clear": "साकांक्ष-सूची मेटाउ",
"watchlisttools-view": "सम्बन्धित परिवर्तन सभकेँ देखू",
"watchlisttools-edit": "साकांक्षसूचीकेँ देखू आ सम्पादित करू",
"watchlisttools-raw": "काँच साकांक्षसूची संपादित करू",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
- "unknown_extension_tag": "अज्ञात बढ़ाएल चेन्ह \"$1\"",
"duplicate-defaultsort": "'''चेतौनी:''' पूर्वनिर्धारित विन्यास चाभी \"$2\" पहिलुका पूर्वनिर्धारित विन्यास चाभी \"$1\" केँ खतम करैए।",
"version": "संस्करण",
"version-extensions": "संस्करणक आगाँ",
@@ -2637,7 +2768,7 @@
"version-parser-function-hooks": "विभाजक प्रकार्य खुट्टी",
"version-hook-name": "खुट्टीक नाम",
"version-hook-subscribedby": "ई सदस्यता लेलनि",
- "version-version": "(संस्करण $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[कोनो नाम नै]",
"version-license": "अधिकार",
"version-ext-license": "अधिकार",
@@ -2658,6 +2789,13 @@
"version-software-product": "उत्पाद",
"version-software-version": "संस्करण",
"version-entrypoints-header-url": "यू॰आर॰एल",
+ "redirect-submit": "जाऊ",
+ "redirect-lookup": "ताकू:",
+ "redirect-value": "मूल्य:",
+ "redirect-user": "प्रयोक्ता आई॰डी॰",
+ "redirect-page": "पन्ना आई॰डी॰",
+ "redirect-revision": "पन्ना अवतरण संख्या",
+ "redirect-file": "फाइल नाम",
"fileduplicatesearch": "द्वितीयक संचिका ताकू",
"fileduplicatesearch-summary": "हैश मानक आधारपर द्वितीयक संचिका ताकू।",
"fileduplicatesearch-legend": "द्वितीयक ताकू",
@@ -2668,6 +2806,7 @@
"fileduplicatesearch-result-n": "संचिका \"$1\" केँ छै {{PLURAL:$2|1 तादात्म्य द्वितीयक|$2तादात्म्य द्वितीयक}}.",
"fileduplicatesearch-noresults": "कोनो \"$1\" नाम्ना संचिका नै।",
"specialpages": "विशेष पन्ना",
+ "specialpages-note-top": "कुंजी",
"specialpages-note": "* सामान्य विशिष्ट पन्ना।\n* <span class=\"mw-specialpagerestricted\">प्रतिबंधित विशिष्ट पन्ना।</span>\n* <span class=\"mw-specialpagecached\">उपस्मृतिक विशिष्ट पन्ना (पुरान भऽ सकैए)।</span>",
"specialpages-group-maintenance": "सुस्थापन प्रतिवेदन",
"specialpages-group-other": "दोसर विशेष पन्ना",
@@ -2687,6 +2826,7 @@
"tags": "मान्य परिवर्तन चेन्ह सभ",
"tag-filter": "[[Special:Tags|Tag]] छन्ना:",
"tag-filter-submit": "चलनी",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग}}]]: $2)",
"tags-title": "चेन्ह सभ",
"tags-intro": "ई पन्ना चेन्ह सभकेँ सूचित करैए जे तंत्रांश सम्पादनसँ चिन्हित करए, आ ओकर अर्थ सेहो।",
"tags-tag": "चेन्हक नाम",
@@ -2760,15 +2900,17 @@
"logentry-newusers-create": "$1 {{लिंग:$2|बनाएल}} एकटा प्रयोक्ता खाता",
"logentry-newusers-create2": "$1 {{लिंग:$2|बनाएल}} {{लिंग:$4|एकटा प्रयोक्ता खाता}} $3",
"logentry-newusers-autocreate": "खाता $1 छल {{लिंग:$2|बनाएल}} स्वतः",
+ "logentry-upload-upload": "$1 {{GENDER:$2|ए}} $3 अपलोड केलक",
"rightsnone": "(कोनो नै)",
- "feedback-subject": "विषय:",
- "feedback-message": "संदेश:",
- "feedback-cancel": "रद्द करु",
- "feedback-submit": "प्रतिक्रिया भेजु",
+ "revdelete-summary": "सम्पादन सारांश",
"feedback-adding": "पन्ना उपर प्रतिक्रिया जोडु ...",
- "feedback-error2": "त्रुटि: संपादन विफल भेल",
- "feedback-close": "भ गेल",
"feedback-bugcheck": "बहुत निक! जांच करु कि [ $1 known bugs] पहिले स त नै अछि ।",
+ "feedback-cancel": "रद्द करु",
+ "feedback-close": "भ गेल",
+ "feedback-error2": "त्रुटि: संपादन विफल भेल",
+ "feedback-message": "संदेश:",
+ "feedback-subject": "विषय:",
+ "feedback-submit": "दिअ",
"searchsuggest-search": "ताकू",
"searchsuggest-containing": "...सऽ युक्त",
"api-error-badaccess-groups": "अहि विकी सें अहां कोनो प्रारूप लोड नहि क सकब.",
@@ -2777,12 +2919,24 @@
"api-error-filetype-banned-type": "$1 {{PLURAL:$4|मान्य संचिका प्रकार नै अछि|मान्य संचिका प्रकार सभ नै अछि}}। मान्य अछि {{PLURAL:$3|संचिका प्रकार अछि|संचिका प्रकार सभ अछि}} $2।",
"api-error-http": "आन्तरिक भ्रम: वितरकसँ सम्पर्क करबामे असफल",
"api-error-illegal-filename": "ऐ तरहक संचिका नाम अमान्य अछि।",
+ "api-error-mustbeloggedin": "अहाँ के फाइल अपलोड करए के लेल सम्प्रवेष करए पडत।",
"api-error-mustbeposted": "आन्तरिक भ्रम: आग्रहक लेल परिपाठ्य संचार संविद पाठ चाही।",
"api-error-nomodule": "आन्तरिक भ्रम: कोनो उपारोपण तरीका निर्धारित नै अछि।",
"api-error-ok-but-empty": "आन्तरिक भ्रम: वितरकसँ कोनो सम्पर्क नै",
"api-error-unclassified": "एकटा अबूझ भ्रम आएल",
"api-error-unknown-code": "अबूझ भ्रम:\"$1\"",
+ "api-error-unknown-warning": "अज्ञात चेतौनी: $1",
+ "api-error-unknownerror": "अज्ञात भ्रम:\"$1\"",
"api-error-uploaddisabled": "ऐ विकीपर उपारोपण अशक्त कएल गेल अछि।",
+ "expand_templates_output": "परिणाम",
+ "expand_templates_xml_output": "XML आउटपुट",
+ "expand_templates_ok": "ठीक अछि",
+ "expand_templates_remove_comments": "टिप्पणी हटाउ",
+ "expand_templates_remove_nowiki": "परिणाम में <nowiki> ट्याग हटाउ",
+ "expand_templates_generate_xml": "XML के पार्स (parse) वृक्ष देखाउ",
"pagelang-name": "पन्ना",
- "pagelang-language": "भाषा"
+ "pagelang-language": "भाषा",
+ "pagelang-select-lang": "भाषा चुनु",
+ "right-pagelang": "पृष्ठ के भाषा परिवर्तन करू",
+ "action-pagelang": "पृष्ठ के भाषा परिवर्तन करू"
}
diff --git a/languages/i18n/map-bms.json b/languages/i18n/map-bms.json
index 90ac544d..f7cf1c6a 100644
--- a/languages/i18n/map-bms.json
+++ b/languages/i18n/map-bms.json
@@ -470,7 +470,6 @@
"passwordreset-emailsent-capture": "Imel kanggo nyetel maning tembung sandhi uwis dikirim, kaya sing ditidokna nang ngisor kiye.",
"passwordreset-emailerror-capture": "Imel nggo nyetel maning tembung sandhi uwis digawe, kaya sing ditidokna nang ngisor kiye, ningen gole ngirim maring {{GENDER:$2|panganggo}} ora teyeng: $1",
"changeemail": "Ganti alamat imel",
- "changeemail-header": "Ganti alamat imel-e akun",
"changeemail-text": "Rampungna formulir kiye kanggo ngganti alamat imel Rika. Rika bakal perlu nglebokna tembung sandhi Rika nggo konfirmasi owahan kiye.",
"changeemail-no-info": "Rika kudu mlebu log kanggo ngakses kaca kiye sacara langsung.",
"changeemail-oldemail": "Alamat imel sekiye:",
@@ -478,7 +477,6 @@
"changeemail-none": "(ora ana)",
"changeemail-password": "Tembung sandhi {{SITENAME}} Rika:",
"changeemail-submit": "Ganti imel",
- "changeemail-cancel": "Ora sida",
"resettokens-no-tokens": "Ora ana token sing arep disetel maning.",
"resettokens-legend": "Nyetel maning token",
"resettokens-token-label": "$1 (biji sekiye:$2)",
@@ -662,7 +660,6 @@
"mergehistory-same-destination": "Jeneng kaca sumber lan tujuan ora kena padha",
"mergehistory-reason": "Alesan:",
"mergelog": "Gabung log",
- "pagemerge-logentry": "nggabungna [[$1]] maring [[$2]] (révisi nganti tekan $3)",
"revertmerge": "Batalna panggabungan",
"mergelogpagetext": "Nang ngisor kiye isine daftar panggabungan sajarah kaca maring kaca liyane.",
"history-title": "Riwayat revisi sekang \"$1\"",
@@ -705,7 +702,6 @@
"searchrelated": "kagandhèng",
"searchall": "kabèh",
"showingresults": "Nang ngisor kiye ditidokna ana {{PLURAL:$1|'''1''' kasil|'''$1''' kasil}}, dimulai sekang #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Asil '''$1''' sekang '''$3'''|Asil '''$1 - $2''' sekang '''$3'''}} kanggo '''$4'''",
"search-nonefound": "Ora ana kasil sing cocog karo pitakonan (''query'').",
"powersearch-legend": "Panggoletan lanjut",
"powersearch-ns": "Goleti nang bilik jeneng:",
@@ -1031,7 +1027,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Statistik kaca",
"statistics-header-edits": "Statistik panyuntingan",
- "statistics-header-views": "Statistik tampilan",
"statistics-header-users": "Statistik panganggo",
"statistics-header-hooks": "Statistik liyane",
"statistics-articles": "Kaca-kaca isi",
@@ -1040,13 +1035,9 @@
"statistics-files": "Berkas sing diunggahna",
"statistics-edits": "Jumlah suntingan wiwit {{SITENAME}} dimolai",
"statistics-edits-average": "Rata-rata suntingan saben kaca",
- "statistics-views-total": "Jumlah penampilan kaca",
- "statistics-views-total-desc": "Tampilan maring kaca sing ora-ana lan kaca astamiwa ora dilebokna",
- "statistics-views-peredit": "Jumlah tampilan saben suntingan",
"statistics-users": "Jumlah [[Special:ListUsers|panganggo sing kedaftar]]",
"statistics-users-active": "Jumlah panganggo aktif",
"statistics-users-active-desc": "Panganggo sing nglakokna aktivitas nang {{PLURAL:$1|dina|$1 dina}} pungkasan",
- "statistics-mostpopular": "Kaca sing paling akèh dideleng",
"doubleredirects": "Pangalihan dobel",
"doubleredirectstext": "Kaca kiye muat daftar kaca sing dialihna maring kaca pangalihan liyane.\nSaben barise nduwe pranala maring pangalihan pertama lan kepindho, lan tujuan sekang pengalihan kepindho sing biasane kuwe kaca tujuan sing \"sebenere\", sing kudune dadi tujuane kaca pangalihan pertama.\n Tembung sing <del>dicorèk</del> artine kuwe wis rampung didandani.",
"double-redirect-fixed-move": "[[$1]] uwis dipindahna.\nKiye sekiye dialihna maring [[$2]].",
@@ -1078,7 +1069,6 @@
"uncategorizedtemplates": "Cithakan sing ora dikategorisasi",
"unusedcategories": "Kategori sing ora digunakna",
"unusedimages": "Berkas sing ora digunakna",
- "popularpages": "Kaca populèr",
"wantedcategories": "Kategori sing diperlokna",
"wantedpages": "Kaca sing dipèrlokna",
"wantedpages-badtitle": "Judhul ora valid nang sèt asil: $1",
@@ -1123,7 +1113,6 @@
"querypage-disabled": "Kaca astamiwa kiye dinonaktifna kanggo alesan kinerja.",
"booksources": "Sumber buku",
"booksources-search-legend": "Nggoleti sumbere buku",
- "booksources-go": "Goleti",
"booksources-text": "Nang ngisor kiye daftar pranala ming situs liyane sing ngadol buku anyarlan bekas,lan mbok menawa duwe informasi sebanjure ngenani buku-buku sing lagi Rika goleti:",
"booksources-invalid-isbn": "ISBN sing diwenehna ketone anu ora valid; priksa mbok salah gole nyalin sekang sumber asline.",
"specialloguserlabel": "Panganggo:",
@@ -1165,7 +1154,7 @@
"watch": "Pantau",
"unwatch": "Batalna pantauan",
"watchlist-details": "Ana {{PLURAL:$1|$1 kaca|$1 kaca}} nang daftar pangawasané Rika, ora klebu kaca-kaca dhiskusiné.",
- "wlshowlast": "Tidokna $1 jam $2 dina $3 pungkasan",
+ "wlshowlast": "Tidokna $1 jam $2 dina pungkasan",
"watchlist-options": "Opsi daftar pangawasan",
"delete-confirm": "Busek \"$1\"",
"delete-legend": "Busek",
@@ -1380,7 +1369,6 @@
"exif-lightsource-17": "Cahya standar A",
"exif-lightsource-18": "Cahya standar B",
"exif-lightsource-19": "Cahya standar C",
- "watchlistall2": "kabèh",
"namespacesall": "kabèh",
"monthsall": "kabèh",
"watchlisttools-view": "Tidokna owahan sing ana gandhèngané",
diff --git a/languages/i18n/mdf.json b/languages/i18n/mdf.json
index bdd44604..46f6d38d 100644
--- a/languages/i18n/mdf.json
+++ b/languages/i18n/mdf.json
@@ -620,7 +620,6 @@
"mergehistory-same-destination": "Сядынгольде ди од лопатненди аш кода улемс фкат",
"mergehistory-reason": "Туфтал:",
"mergelog": "Шоворематнень лувома",
- "pagemerge-logentry": "[[$1]] шоворевсь [[$2]]-ть мархта ($3-ть верзиети самс)",
"revertmerge": "Валхтомс шоворемать",
"mergelogpagetext": "Ванк ала сяда мекольдень лопатнень фкя фкянь мархта шоворемаснон историясна.",
"history-title": "\"$1\"нь полафнематнень историясна",
@@ -661,7 +660,6 @@
"searchrelated": "мала",
"searchall": "сембе",
"showingresults": "Ала няфтеви {{PLURAL:$1|мувсь '''1'''|мувсть '''$1'''}} '''$2'''-ста ушедомс.",
- "showingresultsheader": "{{PLURAL:$5|'''$1''' сафкс '''$3'''-ста|'''$1 - $2''' сафкст '''$3'''-ста}} '''$4'''нди",
"search-nonefound": "Аш вешфксонди малады муфкст.",
"powersearch-legend": "Анцяйняньбес вешендема",
"powersearch-ns": "Вешендемс лемботмоса:",
@@ -1038,7 +1036,6 @@
"statistics": "Статистик",
"statistics-header-pages": "Лопань статистик",
"statistics-header-edits": "Петнемс статистикть",
- "statistics-header-views": "Няфтемс статистикть",
"statistics-header-users": "Тиить статистиксь",
"statistics-articles": "Потма мархта лопатне",
"statistics-pages": "Лопатне",
@@ -1046,12 +1043,9 @@
"statistics-files": "Тонкф файлхне",
"statistics-edits": "Лопань петнемасна {{SITENAME}}ть ушедомста",
"statistics-edits-average": "Петнемат фкя лопас ётксталувксста",
- "statistics-views-total": "Ванондомада сембоц",
- "statistics-views-peredit": "Фкя петнемас ванондомада",
"statistics-users": "Сёрматфтф [[Special:ListUsers|тиихне]]",
"statistics-users-active": "Покай тиихне",
"statistics-users-active-desc": "Тиихне конатне тисть мезеге ётай {{PLURAL:$1|шиня|$1 шиста}}",
- "statistics-mostpopular": "Сидеста сувсеви лопат",
"doubleredirects": "Кафонзаф умборондафтфксне",
"doubleredirectstext": "Тя лопань лувомаса няфтевихть умборондафтфксне сюлмафт иля умборондафтфкснень мархта. Эрь луфксса (строкаса) улихть васенце ди омбоце умборондафтфкснень сюлмафкссна, тяса тага ули омбоце умборондафтфксонь васенце киксонцты сюлмафкссь, тоса ули няфтемась лопань лемонц лангс конань мархта эряволь васенце умборондафтфксть сюлмафтомс.\n<del>Туркс кикс мархта</del> тяшксне латцефольхть.",
"double-redirect-fixed-move": "[[$1]] шашфтфоль, сон тяни [[$2]]нь умборондафтфксоц",
@@ -1080,7 +1074,6 @@
"uncategorizedtemplates": "Категориефтома кепотькст",
"unusedcategories": "Тевс апак нолдак категориет",
"unusedimages": "Тевс апак нолдак файлхт",
- "popularpages": "Сидеста сувсеви лопат",
"wantedcategories": "Вешф категориет",
"wantedpages": "Вешф лопат",
"wantedfiles": "Вешеви файлхт",
@@ -1122,7 +1115,6 @@
"suppress": "Кяшема",
"booksources": "Кинигань кучфтемат",
"booksources-search-legend": "Вешендемс кинигань кучфтемат",
- "booksources-go": "Аре",
"booksources-text": "Сюлмафкст ала сотфт иля интернет лопатнень мархта, конат мишендихть од эди сире кинигат, ди тоса, улема, тон мусак поладомань информацие ся кинигатнень колга, конатнень тон вешендить:",
"booksources-invalid-isbn": "Путф ISBN аф виде эли аф кондясти; ванк кодамкс сон ульсь лисемаса.",
"specialloguserlabel": "Тиись:",
@@ -1208,7 +1200,7 @@
"wlheader-enotif": "Электрононь сёрма вельде пачфнема нолдаф тевс.",
"wlheader-showupdated": "Лопат конань полафтозь тонь мекольце сувсемадот меле няфтевсть '''эчке тяшкса'''.",
"wlnote": "Ала {{PLURAL:$1|мекольце полафнема|'''$1''' мекольце полафнемат}} ётай {{PLURAL:$2| ойста (часста)|'''$2''' ойста (часста)}}.",
- "wlshowlast": "Няфтемс мекольце $1 ойхть (част) $2 шит $3",
+ "wlshowlast": "Няфтемс мекольце $1 ойхть (част) $2 шит",
"watchlist-options": "Мельгеваномать латцемасна",
"watching": "Ванома...",
"unwatching": "Аф ванома...",
@@ -1244,7 +1236,6 @@
"delete-toobig": "Тя лопать кувака петнемань историясь, $1 {{PLURAL:$1|верзиеда|верзиеда}} лама. Тяфтама лопатнень нардамась кардаф {{SITENAME}}-нь уф учсеви колавомада араламать туфталонкса.",
"delete-warning-toobig": "Тя лопать кувака петнемань историясь, $1 {{PLURAL:$1|верзиеда|верзиеда}} лама. Сонь нардамаста, улема, лиси {{SITENAME}}-нь датабаза якаманц колавомась; тик тянь инголе арьсезь.",
"rollback": "Потафтомс петнематне",
- "rollback_short": "Потафтома",
"rollbacklink": "потафтомс",
"rollbackfailed": "Потафтомась изь лисе",
"cantrollback": "Аш кода петнемать потафтомс; мекольце путысь ульсь тя лопать анцек фкя тиикс.",
@@ -1537,7 +1528,6 @@
"import": "Таргамс лопат",
"importinterwiki": "Трансвикинь таргама",
"import-interwiki-text": "Кочкак Вики ди лопань коняксонц эрявихть таргаманди.\nВерзиень шисна ди петнихнень лемсна улихть ванфтфт.\nСембе ётковикинь таргама тефне тяшневихть [[Special:Log/import|таргамань лувомас]].",
- "import-interwiki-source": "Вики лисьма/лопа:",
"import-interwiki-history": "Копияфтомс тя лопать сембе историянь верзиенза",
"import-interwiki-templates": "Сувафтомс сембе шаблотт",
"import-interwiki-submit": "Таргамс",
@@ -1921,7 +1911,6 @@
"exif-gpsspeed-n": "Сюлмот",
"exif-gpsdirection-t": "Виде ён",
"exif-gpsdirection-m": "Магнитонь ён",
- "watchlistall2": "сембе",
"namespacesall": "сембе",
"monthsall": "сембе",
"confirmemail": "Кемостамс электрононь адресть",
@@ -1984,7 +1973,6 @@
"watchlisttools-view": "Няфтемс полафнематне лувомастонь лопапотмова",
"watchlisttools-edit": "Няфтемс эди петнемс мельгеваномать",
"watchlisttools-raw": "Петнемс казяма мельгеваномать",
- "unknown_extension_tag": "Аф содаф келептема тяштькссь \"$1\"",
"duplicate-defaultsort": "Инголе мярьгома: Апак полафтт сортонь панжема \"$2\" апак полафтт сортонь панжема \"$1\"да вяре.",
"version": "MediaWiki-ть верзиец",
"version-extensions": "Нолдаф тевс келепнематне",
@@ -1998,7 +1986,7 @@
"version-parser-function-hooks": "Синтаксонь анализаторть функциензон кярьмодихне",
"version-hook-name": "Кярьмодинь лемоц",
"version-hook-subscribedby": "Сёрматфтсь",
- "version-version": "(Верзие $1)",
+ "version-version": "($1)",
"version-license": "Лицензие",
"version-software": "Нолдаф програпне",
"version-software-product": "Нолдафкс",
@@ -2031,5 +2019,6 @@
"tag-filter": "[[Special:Tags|Tag]] педямась:",
"revdelete-restricted": "нолдаф тевс кардафксне системонь вятиксненди",
"revdelete-unrestricted": "системонь вятиксненди кардафксне валхтфт",
- "rightsnone": "(аш)"
+ "rightsnone": "(аш)",
+ "revdelete-summary": "петнемс нюрьхкяня лихтемать"
}
diff --git a/languages/i18n/mg.json b/languages/i18n/mg.json
index 43756bde..8f39d3dd 100644
--- a/languages/i18n/mg.json
+++ b/languages/i18n/mg.json
@@ -7,7 +7,8 @@
"The Evil IP address",
"Urhixidur",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Hanipika ny rohy:",
@@ -35,7 +36,7 @@
"tog-shownumberswatching": "Asehoy ny isan'ny mpikambana manara-maso ny pejy",
"tog-oldsig": "Topi-mason'ny sonia :",
"tog-fancysig": "Sonia tsotra (tsy misy rohy)",
- "tog-uselivepreview": "Hampiasa ny topi-maso malakay (andramana)",
+ "tog-uselivepreview": "Hampiasa ny topi-maso mivantana",
"tog-forceeditsummary": "Teneno ahy ra tsy nametraka ny ambangovangony",
"tog-watchlisthideown": "Tsy ampiseho anatin'ny pejy fanaraha-maso ny zavatra nosoratako",
"tog-watchlisthidebots": "Asitriho amin'ny lisitro ny fanovàna nataon'ny rôbô",
@@ -223,6 +224,7 @@
"pool-queuefull": "Feno ny lisitry ny asa hatao",
"pool-errorunknown": "Tsi-fetezana tsy fantatra",
"pool-servererror": "Tsy mandeha ny rahraha fanisana ($1).",
+ "poolcounter-usage-error": "Hadisoam-pampiasana : $1",
"aboutsite": "Mombamomba ny {{SITENAME}}",
"aboutpage": "Project:Mombamomba",
"copyright": "Ny lisansa $1 no mamehy ny fampiasana ity voatoatiny ity.",
@@ -264,6 +266,7 @@
"hidetoc": "afeno",
"collapsible-collapse": "Vonkinina",
"collapsible-expand": "Itarina",
+ "confirmable-confirm": "Tena tapa-kevitra amin'izany ianao?",
"confirmable-yes": "Eny",
"confirmable-no": "Tsia",
"thisisdeleted": "Hojerena sa haverina i $1?",
@@ -314,6 +317,8 @@
"filerenameerror": "Tsy voaova ho \"$2\" ny anaran'ilay rakitra \"$1\".",
"filedeleteerror": "Tsy voafafa ilay rakitra \"$1\".",
"directorycreateerror": "Tsy afaka amboarina ny petra-drakitra (''dossier, directory'') « $1 ».",
+ "directoryreadonlyerror": "Vakiana ihany ny lahatahiry \"$1\"",
+ "directorynotreadableerror": "Tsy azo vakiana ny lahatahiry \"$1\".",
"filenotfound": "Tsy hita ilay rakitra \"$1\".",
"unexpected": "Tsy nandrasana: \"$1\"=\"$2\".",
"formerror": "Tsy mety: tsy lasa ny fisy",
@@ -335,7 +340,8 @@
"viewsourcetext": "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity :",
"viewyourtext": "Azonao atao ny mijery ary mandika ny fangon'ny '''fanovanao''' tamin'ity pejy ity:",
"protectedinterface": "Ity pejy ity dia manome ny lahatsoratra ho an'ny rindrankajy eto amin'ity Wiki ity, ary narovana mba tsy hisian'ny fanararaotana. Raha tia hanampy na hanova ny dikanteny ho an'ny wiki rehetra, ampiasao [//translatewiki.net/ translatewiki.net], izay tetikasa fandikanan ny rindrankajy Mediawiki.",
- "editinginterface": "'''Tandremo''' : Manova pejy ampiasaina amin'ny famoahana ny hafatray ny rindrankajy ianao io.\n\nHisy fiantraikany amin'ny fisehon'ny tranonkala amin'ny mpampiasa rehetra eto amin'ity wiki ity ny fanovana.\n\nRaha hanampy dikanteny izay tokony hihatra amin'ny wiki rehetra, ampiaao ny tranonkala [//translatewiki.net/ translatewiki.net translatewiki.net], ny tetikasa fandikana an'i MediaWiki.",
+ "editinginterface": "<strong> Fampitandremana: <strong> manova pejy ampiasaina amin'ny famoronan-tsoratry ny rindrankajy ianao. Hisy fiatraika amin'ny fisehon'ny interfasim-pikambana ho an'ny mpikambana hafan'ity wiki ity ny fiovana ho atao.",
+ "translateinterface": "Mba hanampy na hanova dikanteny ho an'ny wiki rehetra, dia ampiasao [//translatewiki.net/ translatewiki.net], na ny tetikasa fandikana Mediawiki.",
"cascadeprotected": "Ankehitriny dia voaaro ity pejy ity satria misy pejy voaaro {{PLURAL:$1||$1}}1 mampiasa ity pejy ity. Io pejy io dia mampiasa ny fiarovana \"en cascade\" :\n\n$2",
"namespaceprotected": "Tsy manana alalàna manova ny toeran'anarana « '''$1''' » ianao.",
"customcssprotected": "Tsy afaka manova ity pejy CSS ity ianao satria misy ny safidy manokan'ny mpikambana hafa.",
@@ -392,6 +398,8 @@
"userlogin-resetlink": "Adinonavo ve ny antsipihan'ny fidiranao ?",
"userlogin-resetpassword-link": "Hadino ny tenimiafina?",
"userlogin-helplink2": "Fanampiana amin'ny fidirana",
+ "userlogin-loggedin": "Efa tafiditra amin'ny anaran'i {{GENDER:$1|$1}} ianao. Ampiasao ny fôrmiolera eo ambany raha hiditra amin'ny anaran'ny mpikambana hafa.",
+ "userlogin-createanother": "Hamorona kaonty hafa",
"createacct-emailrequired": "Adiresy mailaka :",
"createacct-emailoptional": "Adiresy mailaka (azo tsy atao) :",
"createacct-email-ph": "Atsofohy ny adiresy mailakao",
@@ -453,6 +461,7 @@
"createaccount-text": "Nisy olona nanokatra kaonty ho an'ny adiresy imailakao eo amin'ny {{SITENAME}} ($4) mitondra anarana « $2 » miaraka amin'ny tenimiafina « $3 ».<br />\nTokony miditra na manokatra kaonty ianao, ary ovay ny tenimiafinao dien-izao.\n\nAza mijery ity hafatra ity ianao raha voaforona an-tsifetezana ilay kaonty io.",
"login-throttled": "Betsaka loatra ny andram-pidirana nataonao.\n\nAndraso $1 alohan'ny mamerina.",
"login-abort-generic": "Tsy nahomby ny fanandramanao niditra",
+ "login-migrated-generic": "Efa nafindra ny kaontinao, ary efa tsy misy eto amin'ity wiki ity intsony ny anaram-pikamnbanao",
"loginlanguagelabel": "fiteny : $1",
"suspicious-userlogout": "Ny fangataham-pialanao dia tsy nekena satria ohatry ny nalfan'ny mpizahan-tsehatra simba izy na kasy ny proxy.",
"createacct-another-realname-tip": "Azo tsy atsofoka ny tena anarana.\nRaha misafidy ny hanome azy ianao, ho ampiasaina amin'ny fanehoana ny anjara asan'ilay mpikambana ilay izy.",
@@ -503,7 +512,6 @@
"passwordreset-emailsent-capture": "Lasa ilay mailaka famerenana tenimiafina, izay aseho eo ambany.",
"passwordreset-emailerror-capture": "Nosoratana ilay mailaka famerenana tenimiafina, izay aseho eo ambany, fa tsy tafalefa tany amin'ilay mpikambana ilay izy : $1{{GENDER:$2}}",
"changeemail": "Hanova ny adiresy imailaka",
- "changeemail-header": "Hanova ny adiresy imailak'ilay kaonty",
"changeemail-text": "Fenoy ity pejy fenoina ity mba hanova ny adiresy imailakao. Ilainao atsofoka ny tenimiafinao mba hampihatra ilay fanovana.",
"changeemail-no-info": "Mila tafiditra ianao vao avaka mijery ity pejy ity.",
"changeemail-oldemail": "Adiresy imailaka ankehitriny :",
@@ -511,7 +519,6 @@
"changeemail-none": "(tsy misy)",
"changeemail-password": "Tenimiafinao eo amin'i {{SITENAME}}:",
"changeemail-submit": "Hanova ny adiresy imailaka",
- "changeemail-cancel": "Adinoy",
"changeemail-throttled": "Betsaka loatra ny andrana nidiranao.\nMiandrasa $1 alohan'ny manandrana indray.",
"resettokens": "Hamerina ny token",
"resettokens-text": "Azonao averina eto ny token izay hahafahana mitsidika ny fampahalalana tsy sarababem-bahoaka ao amin'ny kaontinao. Tokony ataonao izany raha voazara tsy fanahy iniana na raha nisy nangalatra ny kaontinao.",
@@ -548,6 +555,7 @@
"preview": "Topi-maso",
"showpreview": "Asehoy aloha",
"showdiff": "Asehoy ny fiovana",
+ "blankarticle": "<strong>Tandremo:</strong> Fotsy ny pejy tianao hoforonina.\nRaha manindry an'i \"{{int:savearticle}}\" indray ianao dia hoforonina tsy hisy vontoatiny na inona na innona ilay pejy.",
"anoneditwarning": "<strong>Fampitandremana :</strong> Tsy niditra tamin'ny kaontinao ianao. Ho hitan'ny vahoaka ny adiresy IP-nao raha manova inona na inona ianao. Raha <strong>[$1 miditra amin'ny kaontinao]</strong> ianao dia ho anisan'ny tombontsoa anananao ny fanaovana ny fiovana amin'ny solonanaranao.",
"anonpreviewwarning": "''Tsy niditra ianao. Hampitahiry ny adiresy IP anao ao amin'ny tantaram-panovan'ity pejy ity ny fitehirizana ny fanovana.''",
"missingsummary": "'''Hafatra fampantsiahivana''' : tsy mbola nanome ny ambangovangom-panovanao ianao.\nRaha mbola tsindriano fanindroany eo amin'ny bokotra {{int:savearticle}}, ho voatahiry tsy fanambarana ny fanovanao.",
@@ -648,6 +656,9 @@
"content-model-text": "soratra tsotra",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Zavatra foana",
+ "content-json-empty-array": "Tabilao foana",
+ "duplicate-args-category": "Pejy mampiasa dika mitovy hevitra amin'ny fiantsoana endrika",
"expensive-parserfunction-warning": "Tandremo : Betsaka loatra ny fanantsoana ny tao parser.\n\nTsy maintsy latsaky ny $2 ny tao, kanefa misy $1. {{PLURAL:$2||}}",
"expensive-parserfunction-category": "Pejy mampiasa be loatra ny tao parser",
"post-expand-template-inclusion-warning": "'''Tandremo''' : be loatra ny endrika ampiasain'ity pejy ity, misy endrika tsy ho ampiasaina.",
@@ -689,7 +700,7 @@
"last": "farany",
"page_first": "voalohany",
"page_last": "farany",
- "histlegend": "Fisafidianana ny votoatiny hohampitahaina: Mario ny bokotra radiôn'ny fiovana hampitahazay ary tsintrio ny bokotra fanekena amin'ny faram-pejy<br />\nMaribolana: '''(ank)''' = fampitahana amin'ny votoatin'ny pejy ankehitriny,\n'''(farany)''' = fampitahana amin'ny version talohan'ity, M = fanovana madinika",
+ "histlegend": "Safidim-pahasamihafana: Mariho ireo bokotra radiôn'ny versiona mba hampitahàna azy ireo ary tsindrony ilay bokotra amin'ny faran'ny pejy: <strong>({{int:cur}})</strong> = fampitahana amin'ny versiona farany indrindra, <strong>({{int:last}})</strong> = fahasamihafana amin'ny versiona farany nialoha ity, <strong>{{int:minoreditletter}}</strong> = fiovana madinika.",
"history-fieldset-title": "Karohy ny tantara",
"history-show-deleted": "Voafafa ihany",
"histfirst": "antitra indrindra",
@@ -702,7 +713,7 @@
"history-feed-empty": "Tsy misy ny pejy notadiavina.\nMety efa voafafa na voafindra angamba izy.\nMitadiava amin'ny '''[[Special:Search|fiasàna fitadiavina]]''' mba hitady ny pejy misy fifandraisana.",
"rev-deleted-comment": "(ambangovangom-panovana nesorina)",
"rev-deleted-user": "(solonanarana nesorina)",
- "rev-deleted-event": "(nesorina ny fampidirana)",
+ "rev-deleted-event": "(nesorina ny antsipirihan'ny laogy)",
"rev-deleted-user-contribs": "[anaram-pikambana na adiresy IP voafafa - fanovana nasitria teo amin'ny fandraisan'anjara modification]",
"rev-deleted-text-permission": "<strong>Voafafa</strong> ny santiônan'ity pejy ity.\nMety misy ny antsipirihany angamba ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME}}}} laogim-pamafàna pejy].",
"rev-deleted-text-unhide": "Ity versionan'ity pejy ity dia '''voafafa'''.\nHita ao amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafana] ny antsipirihany.\nAfaka [$1 mijery ilay versiona] ianao raha tianao.",
@@ -724,12 +735,13 @@
"revdelete-show-file-confirm": "Tapa-kevitra hamafa ny ''revision''-n'i rakitra <nowiki>$1</nowiki> tamin'ny $2 tamin'ny $3 ve ianao ?",
"revdelete-show-file-submit": "Eny",
"logdelete-selected": "{{PLURAL:$1||}}Laogy voafidy :",
+ "revdelete-text-others": "Ny mpandrindra hafa dia mbola ho afaka nahazo ny votoaty miafina ary mamerina izany, \nraha tsy misy famerana mikasika izany.",
"revdelete-confirm": "Amafiso eto ny hevitrao raha hanao io ianao, raha azonao sary an-tsaina ny mety ho vokany, ary raha araka ny [[{{MediaWiki:Policy-url}}|fepetra mihatra]] ny zavatra ataonao.",
"revdelete-suppress-text": "Ny famafàna pejy dia ampiasaina rehefa :\n* Fampahalalana mampiely lainga\n* Misy fampahalalana tsy sarababem-bahoaka tsy metimety\n*: ''Adiresy onenana, laharana antso an-tariby, sns.''",
"revdelete-legend": "Hametraka ny fe-pahitana",
"revdelete-hide-text": "Tahirintsoratry ny versiona",
"revdelete-hide-image": "asitriho ny votoatin'ilay rakitra",
- "revdelete-hide-name": "Asitriho ny asa sy ny tanjona",
+ "revdelete-hide-name": "Asitriho ny tanjona sy ny parametatra",
"revdelete-hide-comment": "Ambangovangon'ilay fiovàna",
"revdelete-hide-user": "Adiresy IPn'ny Mpanova",
"revdelete-hide-restricted": "Fafao ireo votoatiny ireo amin'ny mpiandrindra sy amin'ny mpikambana hafa",
@@ -782,7 +794,6 @@
"mergehistory-same-destination": "Ny pejy iaviana sy ny pejy tanjona dia tsy mahazo mitovy",
"mergehistory-reason": "Antony :",
"mergelog": "Laogim-fampitambarana",
- "pagemerge-logentry": "voatambatra tamin'ny [[$2]] [[$1]] (fanovàna hatramin'ny $3)",
"revertmerge": "Saraho",
"mergelogpagetext": "Ity ny lisitry ny fanambarana ny tantaram-pejy vao haingana",
"history-title": "Tantaran'ny endrik'i « $1 »",
@@ -852,6 +863,11 @@
"prefs-personal": "Mombamomba anao",
"prefs-rc": "Vao niova",
"prefs-watchlist": "Lisitry ny pejy arahana-maso",
+ "prefs-editwatchlist": "Hanova ny lisitry ny pejy arahana",
+ "prefs-editwatchlist-label": "Hanova ny iditry ny lisitra arahanao",
+ "prefs-editwatchlist-edit": "Hijery na hanala lohateny ao amin'ny lisitra arahanao",
+ "prefs-editwatchlist-raw": "Hanova ny lisitra arahana amin'ny fomba manta",
+ "prefs-editwatchlist-clear": "Handio ny lisitra arahanao",
"prefs-watchlist-days": "Isa ny andro haseho anatin'ny lisitra ny pejy arahana-maso",
"prefs-watchlist-days-max": "$1 {{PLURAL:$1|}} andro farafahabetsany",
"prefs-watchlist-edits": "Isa ny fanovana aseho eo amin'ny fanaraha-maso navelatra:",
@@ -871,10 +887,11 @@
"searchresultshead": "Fikarohana",
"stub-threshold": "Fetra ambony ho an'i <a href=\"#\" class=\"stub\">rohim-bangovango</a> (oktety):",
"stub-threshold-disabled": "Tsy alefa",
- "recentchangesdays": "Isa ny andro ho ampiseho eo amin'ny fanovàna farany",
+ "recentchangesdays": "Isan'ny andro ho aseho amin'ny fiovana farany:",
"recentchangesdays-max": "($1 andro{{PLURAL:$1||}} fara-faha betsany)",
"recentchangescount": "Isan'ny fanovana haseho (tsipalotra) :",
"prefs-help-recentchangescount": "Misy ny fiovana farany, ny tantaram-pejy ary ny laogy",
+ "prefs-help-watchlist-token2": "Ity ny lakilen'ny topaka Web ny lisitra arahanao. Afaka mamangy ny lisitra arahanao izay mahalala io lakileo io, ka aza zarazaraina ilay izy. Raha ilainao izany dia afaka [[Special:ResetTokens|manavao izy io ianao]]",
"savedprefs": "Voatahiry ny mombamomba anao.",
"timezonelegend": "Faritr'ora :",
"localtime": "Ora an-toerana",
@@ -920,7 +937,7 @@
"gender-female": "Manova pejy wiki izy (vehivavy)",
"prefs-help-gender": "Ankifidy : ampiasaina ho an'ny fifandraisan'ny rindrankajy aminao. Ho sarababem-bahoaka ity fampahalalana ity.",
"email": "Imailaka",
- "prefs-help-realname": "Anarana marina (afaka tsy fenoina): raha fenoinao ity dia hampiasaina hanomezana anao tambin'ny asa izay efainao eto.",
+ "prefs-help-realname": "Tsy voatery omena ny tena anarana.\nRaha omena izany dia hanomezana dera ny fandraisan'anjaranao",
"prefs-help-email": "Azo tsy omena ny adiresy imailaka, fa ilaina izy io raha sendra hadino ny tenimiafinao.",
"prefs-help-email-others": "Azonareo atao ny misafidy mba hamela ny hafa hifandray aminao eo amin'ny alanana rohy iray eo amin'ny pejin-dresakao.\nTsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa.",
"prefs-help-email-required": "Ilaina ny adiresy imailaka",
@@ -941,6 +958,8 @@
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Diff",
"prefs-help-prefershttps": "Hihatra amin'ny fidiranao manaraka ity safidy ity.",
+ "prefswarning-warning": "Efa nanova tamin'ny safidinao tsy mbola voatahiry ianao. Raha miala amin'ity pejy ity amin'ny alalan'ny fanindriana an'i \"$1\" ianao dia tsy ho voavao ny safidinao.",
+ "prefs-tabs-navigation-hint": "Torohevitra: afaka mampiasa ny zana-tsipika havia ary havanana ianao ho an'ny fitetezana ny vakizoro ao amin'ny lisi-bakizoro",
"email-address-validity-valid": "Adiresy imailaka mameno fepetra",
"email-address-validity-invalid": "Ilaina ny mametraka adiresy imailaka mameno fepetra",
"userrights": "Fandrindràna ny fahefahan'ny mpikambana",
@@ -1014,6 +1033,7 @@
"right-browsearchive": "Mitady pejy voafafa",
"right-undelete": "Mamerina pejy voafafa",
"right-suppressrevision": "Mandinika sy mamerina ny version asitrika amin'ny mpikambana rehetra",
+ "right-viewsuppressed": "Fiovana natakona avy amin'ity mpikambana ity",
"right-suppressionlog": "Mijery ny tao tsy sarababem-bahoaka",
"right-block": "Manakana ny mpikambana mba tsy hanova",
"right-blockemail": "Manakana ny mpikambana mba tsy handefa imailaka",
@@ -1024,6 +1044,7 @@
"right-protect": "Manova ny lenta fiarovan'ny pejy sy manova ny pejy voaaro miriana",
"right-editprotected": "Manova pejy voaaro (tsy misy fiarovana en cascade)",
"right-editsemiprotected": "Hanova ny pejy narovna ho \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Hanova ny modelim-botoatin'ny pejy",
"right-editinterface": "Manova ny interface ny mpikambana",
"right-editusercssjs": "Manova ny rakitra CSS sy JS ny mpikambana hafa",
"right-editusercss": "Manova ny rakitra CSS ny mpikambana hafa",
@@ -1051,7 +1072,8 @@
"right-override-export-depth": "Mamoaka ny pejy miaraka amin'ny zana-pejy hatramin'ny ambaratonga fahadimy",
"right-sendemail": "Mandefa imailaka any amin'ny mpikambana hafa",
"right-passwordreset": "Hijery ny imailaka famerenana ny tenimiafina",
- "newuserlogpage": "Tatitr’asan’ny fanokafana kaontim-pikambana",
+ "right-managechangetags": "Mamorona ary mamafa [[Special:Tags|balizy]] ao amin'ny banky angona",
+ "newuserlogpage": "Laogim-panokafana kaontim-pikambana",
"newuserlogpagetext": "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
"rightslog": "Laogim-piovan'ny zom-pikambana",
"rightslogtext": "Ity ny laogim-piovan'ny zom-pikambana",
@@ -1096,14 +1118,16 @@
"action-viewmywatchlist": "Mijery ny pejy arahanao",
"action-viewmyprivateinfo": "Mijery ny fampahalalana tsy sarababem-bahoakanao",
"action-editmyprivateinfo": "Mijery ny fampahalalana sarababem-bahoakanao",
+ "action-editcontentmodel": "manova ny modelim-botoatin'ny pejy",
+ "action-managechangetags": "hamorona ary hamafa balizy ao amin'ny banky angona",
"nchanges": "{{PLURAL:$1|fanovana|fanovana}} $1",
"enhancedrc-since-last-visit": "$1 ({{PLURAL:$1|hatry ny famangiana farany}})",
"enhancedrc-history": "tantara",
"recentchanges": "Fiovana farany",
- "recentchanges-legend": "Safidy ny fanovàna farany",
+ "recentchanges-legend": "Safidin'ny fiovana farany",
"recentchanges-summary": "Jereo eto amin'ity pejy ity izay vao niova vao haingana teto amin'ity wiki ity.",
"recentchanges-noresult": "Tsy misy fanovana miady amin'ny fepe-potoana napetraka.",
- "recentchanges-feed-description": "Arao ny fanovàna farany amin'ity wiki ity anaty topa",
+ "recentchanges-feed-description": "Hanaraka ny fiovana faran'ny wiki anaty topaka.",
"recentchanges-label-newpage": "Namorona pejy vaovao io fanovana io",
"recentchanges-label-minor": "Kely fotsiny ity fanovana ity",
"recentchanges-label-bot": "Nataon'ny rôbô ity fanovana ity.",
@@ -1165,9 +1189,9 @@
"uploaderror": "Nisy tsy fetezana ny fandefasana rakitra",
"upload-recreate-warning": "'''Tandremo : novain-toerana na nofafana ny rakitra mitondra io anarana io.'''\n\nAseho eo ambany ho fampahalalana fanampiny ny iditra ao amin'ny laogim-panisahana ary ny laogim-pamafana :",
"uploadtext": "Ampiasao ity fisy ity handefasana rakitra. Jereo eto ny [[Special:FileList|lisitry ny rakitra]] nalefan'ny mpikambana, na koa azonao ampiasaina ny [[Special:Log/delete|tantaran'asan'ny fandefasana sy famonoana rakitra]].\n\nRaha hanisy sary ao anaty pejy, dia mampiasà rohy toy ny iray amin'ireto\n'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:file.jpg]]</nowiki>''', na\n'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:file.png|alt text]]</nowiki>''' na\n'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:file.ogg]]</nowiki>''' raha hirohy mivantana amin'ny rakitra.",
- "upload-permitted": "Endriky ny rakitra manan-alalana : $1.",
- "upload-preferred": "Endriky ny rakitra nampidirina : $1",
- "upload-prohibited": "Endriky ny rakitra tsy manan-alalana : $1",
+ "upload-permitted": "Karazan-drakitra {{PLURAL:$2||}}mahazo alalana : $1",
+ "upload-preferred": "Karazan-drakitra tiana{{PLURAL:$2||}}: $1.",
+ "upload-prohibited": "Karazan-drakitra voarara{{PLURAL:$2||}}: $1.",
"uploadlogpage": "Fampidiran-drakitra",
"uploadlogpagetext": "Ity ny lisitr'ireo rakitra nalefa farany indrindra.",
"filename": "Anarana",
@@ -1220,6 +1244,7 @@
"uploaddisabledtext": "Tsy afaka andefasana rakitra aloha eto amin'ity wiki ity.",
"php-uploaddisabledtext": "Ny fampidiran-drakitra dia tsy ampiasaina amin'ny PHP.\nMarino ny option configuration file_uploads.",
"uploadscripted": "\nMisy kialo HTML na fango script mety tsy ho hain'ny navigateur sasany haseho ity rakitra ity.",
+ "uploadscriptednamespace": "ahitana valan'anarana \"$1\" ny rakitra SVG.",
"uploadinvalidxml": "Tsy afaka vakiana ny XML tao anatin'ilay rakitra nafaranao.",
"uploadvirus": "Misy viriosy io rakitra io! Toy izao ny antsipirihany: $1",
"uploadjava": "Ny rakitra dia rakitra ZIP ahitana rakitra .class Java.\nVoarara ny mandefa rakitra Java satria mety hahavaky ny fepetra mikasika ny antoka ireo rakitra ireo.",
@@ -1268,6 +1293,7 @@
"backend-fail-readonly": "Amin'izao fotoana dia famakiana ihany ny fitahirizana terminal an'i \"$1\". \"''$2''\" no antony nomena",
"backend-fail-connect": "Tsy afaka mifandray amin'ny terminal fitahirizana \"$1\".",
"backend-fail-internal": "Hadisoana tsy fantatra tao anatin'ny terminal fitahirizana \"$1\".",
+ "backend-fail-contenttype": "Tsy afaka maminavina ny karazam-botoatin'ny rakitra hotahirizina ao amin'i \"$1\".",
"backend-fail-usable": "Tsy afaka nanoratra ny rakitra \"$1\" nohon'ny zo tsy ampy na ny tsy fisian'ny petra-drakitra.",
"filejournal-fail-dbconnect": "Tsy afaka miantso ilay banky angona laogy ho an'ny terminal fitahirizana \"$1\".",
"filejournal-fail-dbquery": "Tsy afaka manavao ny banky angona laogy ho an'ilay terminal fitahirizana \"$1\".",
@@ -1405,7 +1431,6 @@
"statistics": "Statistika",
"statistics-header-pages": "Statistikan'ny pejy",
"statistics-header-edits": "Statistikan'ny fanovana",
- "statistics-header-views": "Statistikan'ny tsidika",
"statistics-header-users": "Statistikan'ny mpikambana",
"statistics-header-hooks": "statistika hafa",
"statistics-articles": "Lahatsoratra",
@@ -1414,12 +1439,9 @@
"statistics-files": "Rakitra voaray",
"statistics-edits": "Isan’ny fanovana hatry ny fisian’i {{SITENAME}}",
"statistics-edits-average": "Isan'ny fanovana isaky ny pejy",
- "statistics-views-total": "Tsidika",
- "statistics-views-peredit": "Tsidika isaky ny fanovana",
"statistics-users": "[[Special:ListUsers|Mpikambana]] nisoratra anarana",
"statistics-users-active": "Mpikambana mavitrika",
"statistics-users-active-desc": "Mpikambana nanao zavatra teto tanatin'ny $1 andro{{PLURAL:}}.",
- "statistics-mostpopular": "Pejy voatsidika",
"pageswithprop": "Pejy misy toe-pejy",
"pageswithprop-legend": "Pejy misy toe-pejy",
"pageswithprop-text": "Manalisitra ny pejy mampiasa toe-pejy manokana ity",
@@ -1456,7 +1478,6 @@
"uncategorizedtemplates": "Endrika tsy voasokajy",
"unusedcategories": "Sokajy tsy miasa",
"unusedimages": "Rakitra tsy miasa",
- "popularpages": "Pejy maresaka",
"wantedcategories": "Vondrona tokony hoforonina",
"wantedpages": "Pejy tokony hoforonina",
"wantedpages-badtitle": "Lohateny tsy ekena amin'ny valiny : $1",
@@ -1512,7 +1533,7 @@
"querypage-disabled": "Tsy ampiasaina ity pejy manokana ity mba hitsitsy ny solosaina",
"booksources": "boky tsiahy",
"booksources-search-legend": "hikaroka anatin'ny boky todika",
- "booksources-go": "Ataovy lisitra",
+ "booksources-search": "Fikarohana",
"booksources-text": "Ity misy lisitra maneho ny rohy makany amin'ny sehatra mivarotra boky vaovao sy efa vaky ary mety ahitanao fampahalalàna momba ny boky sy soratra notadiavinao :",
"booksources-invalid-isbn": "Ny ISBN nomena dia mety diso ; marino raha diso ianao teo am-pandikanana ny loharano fotony.",
"specialloguserlabel": "Mpikambana nanao :",
@@ -1535,6 +1556,7 @@
"allpagesbadtitle": "Tsy mety ny anaram-pejy : misy tovona iraisam-piteny na interwiki natokana, na misy soratra iray na maro tsy azo ampiasaina anaty anaram-pejy.",
"allpages-bad-ns": "{{SITENAME}} dia tsy manana anaran-tsehatra mitondra anarana « $1 ».",
"allpages-hide-redirects": "Haneho ny fihodinana",
+ "cachedspecial-viewing-cached-ttl": "Mijery pejy anaty takona ianao, izay namboarina $1 taona lasa.",
"cachedspecial-refresh-now": "Hijery ny farany indrindra",
"categories": "Sokajy",
"categoriespagetext": "{{PLURAL:$1}}Ampiasain'ny rakitra na pejy ireo sokajy manaraka ireo.\nTsy hiseho eto ny [[Special:UnusedCategories|sokajy tsy miasa]].\nVangio koa ny [[Special:WantedCategories|sokajy ilaina]].",
@@ -1635,7 +1657,7 @@
"wlheader-enotif": "Alefa ny fampilazana amin'ny mailaka.",
"wlheader-showupdated": "Aseho '''sorabaventy''' ny pejy niova taorian'ny famangianao azy farany.",
"wlnote": "Eo ambany dia ahitana ny {{PLURAL:$1|fiovana farany indrindra|ny fiovana ''$1'' farany}} natao tanatin'ny adin'ny {{PLURAL:$2|iray|'''$2'''}}, nanomboka ny $3, $4.",
- "wlshowlast": "Haneho ny $1 ora farany, ny $2 andro farany na $3",
+ "wlshowlast": "Haneho ny $1 ora farany, ny $2 andro farany na",
"watchlist-options": "Safidy ny lisitry ny pejy arahana",
"watching": "Fanarahana...",
"unwatching": "Fanalana ny fanarahana...",
@@ -1672,7 +1694,6 @@
"delete-toobig": "Ity pejy ity dia manana tantaram-panovana lava be, izany hoe manana versiona {{PLURAL:$1}} $1.\nNoferana mba tsy hikorontana ny fandehanan'i {{SITENAME}} ny famafana ireo pejy ireo.{{PLURAL:$1|}}",
"delete-warning-toobig": "Lava be mihitsy ny tantaram-piovan'ity pejy ity, mihoatra santiôna $1{{PLURAL:}}.\nMety hitondra fikorontanana ao amin'ny banky angon'i {{SITENAME}} ny famafana azy ;\nataovy am-pitandremana ity tao ity.",
"rollback": "Foano indray ilay fanovana",
- "rollback_short": "Aza ovaina indray",
"rollbacklink": "foano",
"rollbacklinkcount": "hamoana fanovana{{PLURAL:$1}} $1",
"rollbackfailed": "Tsy voaverina amin'ny teo aloha",
@@ -1720,6 +1741,7 @@
"protect-othertime": "Daty hafa :",
"protect-othertime-op": "daty hafa",
"protect-existing-expiry": "Datin'ny fanalana ilay sazy : $2 amin'ny $3",
+ "protect-existing-expiry-infinity": "Daty fitsaharana efa misy: tsiefa",
"protect-otherreason": "Antony hafa miampy :",
"protect-otherreason-op": "Antony hafa",
"protect-dropdown": "*Anton'ny fiarovana\n** Misy be mpanimba\n** Misy be mpametraka spam\n** Misy adim-panontana\n** Misy olona maro no mandalo eo",
@@ -1790,6 +1812,7 @@
"sp-contributions-newbies-sub": "Ao amin'ny kaonty vaovao",
"sp-contributions-newbies-title": "Fandraisan'anjara ao amin'ny kaonty vaovao",
"sp-contributions-blocklog": "Laogim-panakanana",
+ "sp-contributions-suppresslog": "Fandraisan'anjara voafafa",
"sp-contributions-deleted": "fandraisan'anjara voafafa",
"sp-contributions-uploads": "fampidiram-pejy",
"sp-contributions-logs": "laogy",
@@ -1800,6 +1823,7 @@
"sp-contributions-search": "Hikaroka fandraisan'anjara",
"sp-contributions-username": "Adiresy IP na anaram-pikambana :",
"sp-contributions-toponly": "Fiovana izay farany ihany no aseho",
+ "sp-contributions-newonly": "Fiovana izay namorom-pejy ihany no aseho",
"sp-contributions-submit": "Hikaroka",
"whatlinkshere": "Pejy mirohy eto",
"whatlinkshere-title": "Pejy mirohy any amin'i « $1 »",
@@ -1821,7 +1845,7 @@
"autoblockid": "Fanakanana mandeha ho azy #$1",
"block": "Hanakana ilay mpikambana",
"unblock": "Hanala ny sakan'ilay mpikambana",
- "blockip": "Sakano ny mpikambana",
+ "blockip": "Hanakana an'i {{GENDER:$1|mpikambana}}",
"blockip-legend": "Sakano ny mpikambana",
"blockiptext": "Ampiasao ity formulaire ity hisakanana ny fahazoan-dàlana hanoratra\nananan'ny adiresy IP iray na solonanarana iray.\nTokony ho antony fisorohana ny fisomparana ihany, ary mifanaraka amin'ny [[{{MediaWiki:Policy-url}}|fepetra]]\nihany no hanaovana ny fisakanana.\nFenoy etsy ambany ny antony manokana (ohatra, mitanisà pejy nosomparana).",
"ipaddressorusername": "Adiresy IP na solonanarana",
@@ -1891,7 +1915,7 @@
"blocklogentry": "voasakana i \"[[$1]]\" mandritra ny $2 ; antony : $3",
"reblock-logentry": "nanova ny parametatry ny sakan'i [[$1]], ary tapitra amin'ny $2. Ny antony dia ''$3''",
"blocklogtext": "Eto no ahitana ny tantaran'ny hetsika momba ny fisakanana sy ny famoanana ny fisakanana mpandray anjara.\nTsy aseho eto ny adiresy IP voasakana ho azy.\nJereo ao amin'ny [[Special:BlockList|lisitry ny sakana]] hahitana ny lisitry ny sakana mihatra amin'izao fotoana izao",
- "unblocklogentry": "voaaisotra ny sakana an'i $1",
+ "unblocklogentry": "afa-tsakana i $1",
"block-log-flags-anononly": "mpikambana tsy nisoratra anarana ihany",
"block-log-flags-nocreate": "tsy mahazo manokatra kaonty",
"block-log-flags-noautoblock": "fanakanana ny IP nesorina",
@@ -2027,6 +2051,8 @@
"import": "Hampidi-pejy",
"importinterwiki": "fampidirana interwiki",
"import-interwiki-text": "Safidio wiki loharano iray ary ny lohatenin'ilay pejy ho ampidirina eto.\nHo voatazona ao amin'ny tantara ny datin'ny santiôna sy ny anaran'ny mpandray anjara.\nHo voasoratra ao amin'ny [[Special:Log/import|laogim-pampidirana]] ny tao rehetra mikasika ny fampidirana pejy interwiki",
+ "import-interwiki-sourcewiki": "Wiki niaviana:",
+ "import-interwiki-sourcepage": "Pejy niavana :",
"import-interwiki-history": "Handika ny santiônan'ny tantaran'ity pejy ity",
"import-interwiki-templates": "Ataovy ao ny endrika rehetra",
"import-interwiki-submit": "Hampiditra",
@@ -2062,13 +2088,9 @@
"import-rootpage-invalid": "Lohateny tsy azo raisina ny foto-pejy nomenao:",
"importlogpage": "laogin'ny fampidirana",
"importlogpagetext": "Fampidirana ara-pandraharahana ny pejy miaraka amin'ny tantaram-panvany avy any amin'ny wiki hafa.",
- "import-logentry-upload": "nampiditra [[$1]] tamin'ny fampidiran-drakitra",
- "import-logentry-interwiki": "nampiditra $1 tamin'ny transwiki",
"javascripttest": "Fanandramana JavaScript",
- "javascripttest-title": "Mandefa fanandramana $1",
"javascripttest-pagetext-skins": "Mifidia skin hanaovana ny fanandramana:",
"javascripttest-qunit-intro": "Jereo ny [$1 fanoroana mikasika ny andrana] eo amin'i mediawiki.org.",
- "javascripttest-qunit-heading": "Tohin'andrana QUnit an'i Javascript eo amin'i MediaWiki",
"tooltip-pt-userpage": "Ny pejinao",
"tooltip-pt-anonuserpage": "Ny pejim-bikamban'ny IP andraisanao anjara",
"tooltip-pt-mytalk": "Pejin-dresakao",
@@ -2093,12 +2115,12 @@
"tooltip-search": "Karoka amin'ny {{SITENAME}}",
"tooltip-search-go": "Mandana any amina pejy mitondra n'io anarana io ra misy.",
"tooltip-search-fulltext": "Tadiavo ny pejy misy an'io lahatsoratra io.",
- "tooltip-p-logo": "Renpejy",
+ "tooltip-p-logo": "Hitsidika renipejy",
"tooltip-n-mainpage": "Jereo ny renipejy",
"tooltip-n-mainpage-description": "hitsidika ny renipejy",
"tooltip-n-portal": "Ny mombamomba ny tetikasa",
"tooltip-n-currentevents": "Hikaroka torohay fototra mikasika ny vaovao",
- "tooltip-n-recentchanges": "Lisitra ny fanovàna farany efa vita eto amin'ity wiki ity",
+ "tooltip-n-recentchanges": "Lisitry ny fiovana farany eto amin'ny wiki",
"tooltip-n-randompage": "Hjery pejy aki-sendra",
"tooltip-n-help": "fanoroana",
"tooltip-t-whatlinkshere": "Lisitra ny pejy wiki mirohy eto",
@@ -2163,7 +2185,6 @@
"pageinfo-robot-policy": "Fanondroana ataon'ny rôbô",
"pageinfo-robot-index": "Azo atao",
"pageinfo-robot-noindex": "Tsy azo tondroina",
- "pageinfo-views": "Isan'ny jery",
"pageinfo-watchers": "Isan'ny mpandray anjara manaraka",
"pageinfo-few-watchers": "Mpanaraka latsaky ny $1{{PLURAL:}}",
"pageinfo-redirects-name": "Fihodinana manketo amin'ity pejy ity",
@@ -2500,7 +2521,6 @@
"exif-urgency-normal": "Tsotra ($1)",
"exif-urgency-low": "Ambany ($1)",
"exif-urgency-high": "Ambony ($1)",
- "watchlistall2": "rehetra",
"namespacesall": "rehetra",
"monthsall": "rehetra",
"confirmemail": "Fanamarinana adiresy imailaka.",
@@ -2564,7 +2584,6 @@
"watchlisttools-view": "pejy arahako maso",
"watchlisttools-edit": "Jereo sy ovao ny lisitra ny pejy fanaraha-maso",
"watchlisttools-raw": "Ovay ilay pejy arahako maso amizao",
- "unknown_extension_tag": "Balizy mitondra itatra « $1 » tsy fantatra",
"duplicate-defaultsort": "'''Tandremo''' : manitsaka ny sort key taloha \"$1\" ilay sort key ankehitriny \"$2\".",
"version": "Versiona",
"version-extensions": "Fanitarana nampidirina",
@@ -2652,17 +2671,18 @@
"logentry-rights-rights-legacy": "{{GENDER:$2}}$1 nanova ny vonodrom-pikambana isian'i $3",
"logentry-rights-autopromote": "{{GENDER:$2}}Lasa $5 ho azy i $1 izay $4 taloha",
"rightsnone": "(tsy misy)",
- "feedback-subject": "Lohahevitra:",
- "feedback-message": "Hafatra:",
- "feedback-cancel": "Foanana",
- "feedback-submit": "Handefa ny fanehoan-kevitra",
+ "revdelete-summary": "ambangovangon'ny fanovàna",
"feedback-adding": "Manampy ny fahenoan-kevitra amin'ilay pejy...",
+ "feedback-bugnew": "Efa nomariniko. Hitory baogy iray",
+ "feedback-cancel": "Foanana",
+ "feedback-close": "Vita",
"feedback-error1": "Hadisoana: Valiny avy amin'ny API tsy fantatra",
"feedback-error2": "Hadisoana: Tsy voaòva",
"feedback-error3": "Hadisoana: Tsy nisy valiny avy amin'ny API",
+ "feedback-message": "Hafatra:",
+ "feedback-subject": "Lohahevitra:",
+ "feedback-submit": "Alefa",
"feedback-thanks": "Misaotra! lanefa tany amin'ilay pejy ''[$2 $1]'' ilay fanehoan-kevitrao.",
- "feedback-close": "Vita",
- "feedback-bugnew": "Efa nomariniko. Hitory baogy iray",
"searchsuggest-search": "Karohy",
"searchsuggest-containing": "misy...",
"api-error-badaccess-groups": "Tsy afaka mampiditra rakitra eto amin'ity wiki ity ianao.",
@@ -2696,5 +2716,27 @@
"api-error-unknown-warning": "Fampitandremana tsy fantatra : ''$1''.",
"api-error-unknownerror": "Hadisoana tsy fantatra : ''$1''.",
"api-error-uploaddisabled": "Tsy alefa eto amin'ity wiki ity ny fandefasan-drakita.",
- "api-error-verification-error": "Mety tapaka ity rakitra ity, na diso tovan-drakitra."
+ "api-error-verification-error": "Mety tapaka ity rakitra ity, na diso tovan-drakitra.",
+ "special-characters-group-latin": "latina",
+ "special-characters-group-latinextended": "latina nitarina",
+ "special-characters-group-ipa": "AAI",
+ "special-characters-group-symbols": "eva",
+ "special-characters-group-greek": "grika",
+ "special-characters-group-cyrillic": "sirilika",
+ "special-characters-group-arabic": "arabo",
+ "special-characters-group-arabicextended": "arabo nitarina",
+ "special-characters-group-persian": "persàna",
+ "special-characters-group-hebrew": "ebreo",
+ "special-characters-group-bangla": "bengali",
+ "special-characters-group-tamil": "tamily",
+ "special-characters-group-telugu": "telogo",
+ "special-characters-group-sinhala": "singalesa",
+ "special-characters-group-gujarati": "gojaraty",
+ "special-characters-group-devanagari": "devanagari",
+ "special-characters-group-thai": "tailandey",
+ "special-characters-group-lao": "laôsianina",
+ "special-characters-group-khmer": "kimera",
+ "special-characters-title-endash": "tsipika anglisy",
+ "special-characters-title-emdash": "tsipika em",
+ "special-characters-title-minus": "marika mainosy"
}
diff --git a/languages/i18n/mhr.json b/languages/i18n/mhr.json
index c1e5e2ad..3f38f594 100644
--- a/languages/i18n/mhr.json
+++ b/languages/i18n/mhr.json
@@ -368,7 +368,7 @@
"searchprofile-everything-tooltip": "Чыла лаштык-влакыште кычалаш (каҥашымаш лаштык-влакыштат)",
"searchprofile-advanced-tooltip": "Искать в заданных пространствах имён",
"search-result-size": "$1 ({{PLURAL:$2|1=$2 мут|$2 мут}})",
- "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождений|вхождения}} ($2 {{PLURAL:$2|подкатегория|подкатегорий|подкатегории}}, $3 {{PLURAL:$3|файл|файлов|файла}}).",
+ "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождения|вхождений}} ($2 {{PLURAL:$2|подкатегория|подкатегории|подкатегорий}}, $3 {{PLURAL:$3|файл|файла|файлов}}).",
"search-redirect": "($1 вес вере колтымаш)",
"search-section": "(ужаш $1)",
"search-suggest": "Але те $1 возынеда ыле",
@@ -377,7 +377,6 @@
"search-interwiki-more": "(эше)",
"searchrelated": "кылдалтше",
"searchall": "чыла",
- "showingresultsheader": "'''$4'''лан {{PLURAL:$5|1='''$3''' гыч '''$1''' результат|'''$3''' гыч '''$1 - $2''' результат}}",
"search-nonefound": "Тыйын йодышет почеш нимо муалтын огыл",
"powersearch-legend": "Сайынрак кычалаш",
"powersearch-ns": "Кычалаш тиде лӱм-влакын кумдыкышт-влакыште:",
@@ -513,7 +512,6 @@
"statistics": "Иктешлымаш",
"statistics-header-pages": "Лаштык коклам иктешлымаш",
"statistics-header-edits": "Тӧрлатымаш коклам иктешлымаш",
- "statistics-header-views": "Ончымаш коклам иктешлымаш",
"statistics-header-users": "Пайдаланыше коклам иктешлымаш",
"statistics-header-hooks": "Тӱрлӧ коклам иктешлымаш",
"statistics-articles": "Возымо лаштык-влак",
@@ -522,12 +520,9 @@
"statistics-files": "Пуртымо файл-влак",
"statistics-edits": "{{SITENAME}} лаштыкым чылажге мыняр гана тӧрлатыме",
"statistics-edits-average": "Ик лаштыкым покшел тӧрлымӧ чот",
- "statistics-views-total": "Чылажге ончымо",
- "statistics-views-peredit": "Ик тӧрлатымашлан ончымо",
"statistics-users": "Регистрацийым эртыше [[Special:ListUsers|пайдаланыше-влак]]",
"statistics-users-active": "Чӱчкыдын пайдаланыше-влак",
"statistics-users-active-desc": "Пытартыш {{PLURAL:$1|1=кечыште|$1 кечыште}} иктаж-мом ыштыше пайдаланыше-влак",
- "statistics-mostpopular": "Эн чӱчкыдын ончымо лаштык-влак",
"brokenredirects": "Пудыртымо вес вере колтымаш-влак",
"brokenredirects-edit": "тӧрлаташ",
"brokenredirects-delete": "шӧраш",
@@ -553,7 +548,6 @@
"pager-older-n": "{{PLURAL:$1|1=ончычсо|ончычсо}}",
"booksources": "Негызым пыштыше кнага-влак",
"booksources-search-legend": "Негызым пыштыше книгам кычалаш",
- "booksources-go": "Муаш",
"specialloguserlabel": "Пайдаланыше:",
"log": "Журнал-влак",
"allpages": "Чыла лаштык-влак",
@@ -585,7 +579,7 @@
"unwatch": "Эскерыман огыл",
"unwatchthispage": "Эскерымым чарнаш",
"watchlist-details": "Эскерымаш лӱмерыштет $1 {{PLURAL:$1|лаштык}}, каҥашымаш лаштык-влакым шотлыде",
- "wlshowlast": "Пытартыш $1 шагат $2 кечылан $3 ончыкташ",
+ "wlshowlast": "Пытартыш $1 шагат $2 кечылан ончыкташ",
"watchlist-options": "Эскерыме лӱмерын келыштарымаш",
"watching": "Эскерымаш лӱмерыш ешарымаш...",
"unwatching": "Эскерымаш лӱмер гыч шӧрымаш...",
@@ -766,7 +760,6 @@
"metadata-expand": "Ешартыш рашлык-влакым ончыкташ",
"metadata-collapse": "Ешартыш рашлык-влакым шылташ",
"metadata-fields": "Поля метаданных изображения, перечисленные в этом списке, будут показаны на странице изображения при свёрнутой таблице метаданных. Остальные поля будут по умолчанию скрыты.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "чыла",
"namespacesall": "чыла",
"monthsall": "чыла",
"confirm_purge_button": "Йӧра",
@@ -792,6 +785,7 @@
"specialpages-group-pagetools": "Лаштык ӱзгар-влак",
"specialpages-group-redirects": "Вес вере колтышо спецлаштык-влак",
"external_image_whitelist": " #Оставьте эту строчку такой, как она есть<pre>\n#Разместите здесь фрагменты регулярных выражений (ту часть, что находится между //)\n#они будут соотнесены с URL внешних изображений.\n#Подходящие будут показаны как изображения, остальные будут показаны как ссылки на изображения.\n#Строки, начинающиеся с # считаются комментариями.\n#Строки не чувствительны к регистру\n\n#Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>",
+ "revdelete-summary": "тӧрлатымаш-влакым возен ончыктымаш",
"expand_templates_ok": "Йӧра",
"expand_templates_preview": "Ончылгоч ончымаш"
}
diff --git a/languages/i18n/mi.json b/languages/i18n/mi.json
index 443cd4fa..ceb12da0 100644
--- a/languages/i18n/mi.json
+++ b/languages/i18n/mi.json
@@ -1,85 +1,85 @@
{
- "@metadata": {
- "authors": [
- "Iketsi",
- "Kiharoa",
- "Sonia"
- ]
- },
- "sunday": "Rātapu",
- "monday": "Rāhina",
- "tuesday": "Rātū",
- "wednesday": "Rāapa",
- "thursday": "Rāpare",
- "friday": "Rāmere",
- "saturday": "Rāhoroi",
- "january": "Kohi-tātea",
- "february": "Hui-tanguru",
- "march": "Poutū-te-rangi",
- "april": "Paenga-whāwhā",
- "may_long": "Haratua",
- "june": "Pipiri",
- "july": "Hōngongoi",
- "august": "Here-turi-kōkā",
- "september": "Mahuru",
- "october": "Whiringa-ā-nuku",
- "november": "Whiringa-ā-rangi",
- "december": "Hakihea",
- "cancel": "Whakakore",
- "mytalk": "Karere mōku",
- "navigation": "Huarahi",
- "vector-view-view": "Rīti",
- "help": "Whakamārama",
- "search": "Rapua",
- "go": "Haere",
- "history": "Kōrero Nehe",
- "history_short": "Tuhinga/kaituhi",
- "printableversion": "Tāia",
- "permalink": "Hononga toitū",
- "edit": "Whakatika",
- "delete": "tangohia",
- "protect": "Whakangungua",
- "talkpagelinktext": "Kōrerohia",
- "talk": "Kōrerorero",
- "toolbox": "Pouaka utauta",
- "aboutsite": "Mo {{SITENAME}}",
- "currentevents": "Kōrero",
- "currentevents-url": "Project:Kōrero",
- "mainpage": "Hau Kāinga",
- "mainpage-description": "Hau Kāinga",
- "portal": "Tomokanga hapori",
- "portal-url": "Project:Tomokanga hapori",
- "privacy": "Tikanga tūmataiti",
- "privacypage": "Project:Tikanga tūmataiti",
- "toc": "Rārangi kōrero",
- "showtoc": "whakakite",
- "hidetoc": "hunaia",
- "nstab-main": "tuhi pānui",
- "nstab-template": "papa tauira",
- "nstab-help": "Āwhina",
- "nstab-category": "Wāhanga",
- "userlogout": "Whakarere",
- "savearticle": "Tiaki",
- "showdiff": "Tiro rerekētanga",
- "preferences": "Kōwhiringa",
- "recentchanges": "Rerekētanga hōu",
- "hide": "Hunaia",
- "show": "Whakaaturia",
- "recentchangeslinked": "Rerekētanga pū tahi",
- "recentchangeslinked-feed": "Rerekētanga pū tahi",
- "recentchangeslinked-toolbox": "Rerekētanga pū tahi",
- "upload": "Tuku atu",
- "randompage": "Tipihaere",
- "move": "Nekehia",
- "allpages": "Ngā whārangi katoa",
- "allpagessubmit": "Haere",
- "watchlist": "Rārangi mātaki",
- "mywatchlist": "Rārangi mātaki",
- "watch": "Mātaki",
- "unwatch": "kāti te mātaki",
- "contributions": "Ngā mahi a tēnei mema",
- "mycontris": "āku mahi",
- "whatlinkshere": "Ngā hononga mai",
- "allmessages": "Pānui pūnaha",
- "specialpages": "Whārangi motuhake"
+ "@metadata": {
+ "authors": [
+ "Iketsi",
+ "Kiharoa",
+ "Sonia",
+ "Piwaiwaka"
+ ]
+ },
+ "sunday": "Rātapu",
+ "monday": "Rāhina",
+ "tuesday": "Rātū",
+ "wednesday": "Rāapa",
+ "thursday": "Rāpare",
+ "friday": "Rāmere",
+ "saturday": "Rāhoroi",
+ "january": "Kohi-tātea",
+ "february": "Hui-tanguru",
+ "march": "Poutū-te-rangi",
+ "april": "Paenga-whāwhā",
+ "may_long": "Haratua",
+ "june": "Pipiri",
+ "july": "Hōngongoi",
+ "august": "Here-turi-kōkā",
+ "september": "Mahuru",
+ "october": "Whiringa-ā-nuku",
+ "november": "Whiringa-ā-rangi",
+ "december": "Hakihea",
+ "cancel": "Whakakore",
+ "mytalk": "Karere mōku",
+ "navigation": "Huarahi",
+ "help": "Whakamārama",
+ "search": "Rapua",
+ "go": "Haere",
+ "history": "Kōrero nehe",
+ "history_short": "Tuhinga/kaituhi",
+ "printableversion": "Tāia",
+ "permalink": "Hononga toitū",
+ "edit": "Whakatika",
+ "delete": "tangohia",
+ "protect": "Whakangungua",
+ "talkpagelinktext": "Kōrerohia",
+ "talk": "Kōrerorero",
+ "toolbox": "Pouaka utauta",
+ "aboutsite": "Mo {{SITENAME}}",
+ "currentevents": "Kawepūrongo",
+ "currentevents-url": "Project:Kōrero",
+ "mainpage": "Hau Kāinga",
+ "mainpage-description": "Hau Kāinga",
+ "portal": "Tomokanga hapori",
+ "portal-url": "Project:Tomokanga hapori",
+ "privacy": "Tikanga tūmataiti",
+ "privacypage": "Project:Tikanga tūmataiti",
+ "toc": "Rārangi kōrero",
+ "showtoc": "whakakite",
+ "hidetoc": "hunaia",
+ "nstab-main": "tuhi pānui",
+ "nstab-template": "papa tauira",
+ "nstab-help": "Āwhina",
+ "nstab-category": "Wāhanga",
+ "userlogout": "Whakarere",
+ "savearticle": "Tiaki",
+ "showdiff": "Tiro rerekētanga",
+ "preferences": "Kōwhiringa",
+ "recentchanges": "Huringa hou",
+ "hide": "Hunaia",
+ "show": "Whakaaturia",
+ "recentchangeslinked": "Huringa pūtahi",
+ "recentchangeslinked-feed": "Rerekētanga pū tahi",
+ "recentchangeslinked-toolbox": "Huringa pūtahi - pouaka utauta",
+ "upload": "Tuku atu",
+ "randompage": "Tipihaere",
+ "move": "Nekehia",
+ "allpages": "Ngā whārangi katoa",
+ "allpagessubmit": "Haere",
+ "watchlist": "Rārangi mātaki",
+ "mywatchlist": "Rārangi mātaki",
+ "watch": "Mātaki",
+ "unwatch": "kāti te mātaki",
+ "contributions": "Ngā mahi a tēnei mema",
+ "mycontris": "āku mahi",
+ "whatlinkshere": "Ngā hononga mai",
+ "allmessages": "Pānui pūnaha",
+ "specialpages": "Whārangi motuhake"
}
diff --git a/languages/i18n/min.json b/languages/i18n/min.json
index 2af3d81a..e63929fc 100644
--- a/languages/i18n/min.json
+++ b/languages/i18n/min.json
@@ -246,7 +246,7 @@
"youhavenewmessagesmanyusers": "Sanak mandapek $1 dari banyak pangguno ($2)",
"newmessageslinkplural": "{{PLURAL:$1|pasan baru}}",
"newmessagesdifflinkplural": "{{PLURAL:$1|parubahan}} taakhia",
- "youhavenewmessagesmulti": "Sanak mandapek pasan baru pado $1",
+ "youhavenewmessagesmulti": "Sanak ado pasan baru pado $1",
"editsection": "suntiang",
"editold": "suntiang",
"viewsourceold": "caliak sumber",
@@ -432,6 +432,7 @@
"login-abort-generic": "Proses masuak Sanak indak barasil - Dibatalan",
"loginlanguagelabel": "Baso: $1",
"suspicious-userlogout": "Pamintaan Sanak untuak kalua log ditulak karano tampaknyo dikirim oleh paramban nan rusak atau proksi panyinggah.",
+ "pt-userlogout": "Kalua log",
"php-mail-error-unknown": "Kasalahan nan indak jaleh dalam fungsi mail() PHP",
"user-mail-no-addy": "Mancubo mangirim surel tanpa alamaik surel.",
"user-mail-no-body": "Mancubo mangirim surel kosong atau pasan talalu pendek",
@@ -469,7 +470,6 @@
"passwordreset-emailsent-capture": "Surel parubahan kato sandi alah dikirim, nan nampak di bawah ko.",
"passwordreset-emailerror-capture": "Surel parubahan kato sandi nan ditampilan di bawah, alah dibuek, tapi pangirimannyo ka {{GENDER:$2|pangguno}} gagal: $1",
"changeemail": "Tuka alamaik surel.",
- "changeemail-header": "Ganti alamaik surel.",
"changeemail-text": "Isi formulir ko untuak mangganti alamaik surel. Sanak musti mamasuakan kato sandi untuak mayakinkan parubahan.",
"changeemail-no-info": "Sanak harus masuak log untuak mangakses laman ko.",
"changeemail-oldemail": "Alamat surel kini:",
@@ -477,7 +477,6 @@
"changeemail-none": "(indak ado)",
"changeemail-password": "Sandi {{SITENAME}} Sanak:",
"changeemail-submit": "Ganti surel.",
- "changeemail-cancel": "Batalkan",
"bold_sample": "Teks taba",
"bold_tip": "Teks taba",
"italic_sample": "Teks miriang",
@@ -699,7 +698,6 @@
"suppressionlog": "Log pambanaman",
"mergehistory-reason": "Alasan:",
"mergelog": "Log panggabuangan",
- "pagemerge-logentry": "manggabuangan [[$1]] ka [[$2]] (revisi sampai $3)",
"revertmerge": "Batal gabuang",
"mergelogpagetext": "Di bawah ko daftar panggabuangan riwayaik laman ka laman nan lain.",
"history-title": "Riwayaik revisi dari \"$1\"",
@@ -743,7 +741,6 @@
"searchrelated": "bakaitan",
"searchall": "sado",
"showingresults": "Di bawah ko dikaluaan sampai {{PLURAL:$1|'''$1''' hasil}}, dimulai dari #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Hasil '''$1 - $2''' dari '''$3'''}} untuak '''$4'''",
"search-nonefound": "Indak ado hasil nan cocok sasuai jo parmintaan",
"powersearch-legend": "Pencarian lanjut",
"powersearch-ns": "Mancari di ruangnamo:",
@@ -1080,7 +1077,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Statistik laman",
"statistics-header-edits": "Statistik suntiangan",
- "statistics-header-views": "Statistik tampilan",
"statistics-header-users": "Statistik pangguno",
"statistics-header-hooks": "Statistik lainnyo",
"statistics-articles": "Laman konten",
@@ -1089,13 +1085,9 @@
"statistics-files": "Berkas nan lah dimuek",
"statistics-edits": "Jumlah suntiangan sangkek {{SITENAME}} ko dimulai",
"statistics-edits-average": "Rato-rato suntiangan per-laman",
- "statistics-views-total": "Jumlah tampilan laman",
- "statistics-views-total-desc": "Tampilan ka laman nan indak ado jo laman khusus nan indak ikuik",
- "statistics-views-peredit": "Tampilan per-suntiangan",
"statistics-users": "Jumlah [[Special:ListUsers|pangguno tadaftar]]",
"statistics-users-active": "Pangguno aktip",
"statistics-users-active-desc": "Pangguno nan aktip dalam {{PLURAL:$1|$1 ari}} tarakhia.",
- "statistics-mostpopular": "Laman nan paliang banyak ditampilkan",
"pageswithprop": "Laman jo laman properti",
"pageswithprop-legend": "Laman jo laman properti",
"pageswithprop-text": "Laman ko barisi daftar laman nan manggunoan properti laman tatantu.",
@@ -1166,7 +1158,6 @@
"pager-older-n": "{{PLURAL:$1|$1 labiah lamo}}",
"booksources": "Sumber buku",
"booksources-search-legend": "Cari di sumber buku",
- "booksources-go": "Tuju",
"specialloguserlabel": "Pangguno:",
"speciallogtitlelabel": "Target (judul atau pangguno):",
"log": "Log",
@@ -1251,7 +1242,7 @@
"watchlist-details": "{{PLURAL:$1|$1 laman}} dalam daftar pantau Sanak, indak tamasuak laman rundiangnyo.",
"wlheader-showupdated": "Laman nan alah barubah sajak kunjuangan tarakhia Sanak ditunjuakan jo '''hurup taba'''",
"wlnote": "Di bawah ko ado $1 {{PLURAL:$1|parubahan}} dalam {{PLURAL:$2|'''$2''' jam}} iko, sampai tanggal $3, pukua $4.",
- "wlshowlast": "Tunjuakan $1 jam parubahan dalam $2 hari tarakhia $3",
+ "wlshowlast": "Tunjuakan $1 jam parubahan dalam $2 hari tarakhia",
"watchlist-options": "Piliahan daftar pantau",
"watching": "Mamantau...",
"unwatching": "indak dipantau le...",
@@ -1275,7 +1266,6 @@
"deleteotherreason": "Alasan lain/tambahan:",
"deletereasonotherlist": "Alasan lain",
"rollback": "Baliakan suntiangan",
- "rollback_short": "Baliakan",
"rollbacklink": "baliakan",
"rollbacklinkcount": "baliakan $1 {{PLURAL:$1|suntiangan}}",
"rollbacklinkcount-morethan": "baliakan labiah dari $1 {{PLURAL:$1|suntiangan}}",
@@ -1612,7 +1602,6 @@
"pageinfo-robot-policy": "Statuih masin pancari",
"pageinfo-robot-index": "Dapek di indeks",
"pageinfo-robot-noindex": "Indak dapek di indeks",
- "pageinfo-views": "Bara kali dibaco",
"pageinfo-watchers": "Bara urang nan mambaco",
"pageinfo-few-watchers": "Kurang dari $1 {{PLURAL:$1|pambaco}}",
"pageinfo-redirects-name": "Pangaliahan ka laman ko",
@@ -1752,7 +1741,6 @@
"exif-pixelxdimension": "Tinggi gamba",
"exif-usercomment": "Komen pangguno",
"exif-relatedsoundfile": "Berkas audio nan bahubuangan",
- "watchlistall2": "kasadonyo",
"namespacesall": "sadonyo",
"monthsall": "sadonyo",
"table_pager_limit_label": "Item per laman:",
@@ -1775,7 +1763,6 @@
"watchlisttools-edit": "Tunjuakan sarato suntiang daftar pantau",
"watchlisttools-raw": "Suntiang pantauan mantah",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|maota]])",
- "unknown_extension_tag": "Tag ekstensi \"$1\" indak tau",
"duplicate-defaultsort": "'''Peringatan:''' Kunci panguruitan default \"$2\" sabalunnyo mangabaikan kunci panguruitan default \"$1\".",
"version": "Versi",
"version-extensions": "Ekstensi tarinstal",
@@ -1785,7 +1772,7 @@
"version-variables": "Variabel",
"version-antispam": "Pancagahan spam",
"version-other": "Lain-lain",
- "version-version": "(Versi $1)",
+ "version-version": "($1)",
"version-license": "Lisensi",
"version-poweredby-credits": "Wiki ko didukuang jo '''[https://www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
"version-poweredby-others": "lainnyo",
diff --git a/languages/i18n/mk.json b/languages/i18n/mk.json
index a32cd833..de8663b4 100644
--- a/languages/i18n/mk.json
+++ b/languages/i18n/mk.json
@@ -15,7 +15,8 @@
"Urhixidur",
"לערי ריינהארט",
"아라",
- "Milicevic01"
+ "Milicevic01",
+ "Macofe"
]
},
"tog-underline": "Потцртување на врски:",
@@ -28,10 +29,10 @@
"tog-showtoolbar": "Прикажи алатник за уредување",
"tog-editondblclick": "Уредување на страници при двоен стисок",
"tog-editsectiononrightclick": "Уредување на заглавија со десно копче од глушецот на нивниот наслов",
- "tog-watchcreations": "Додавај ги страниците што ги создавам и податотеките што ги подигам во списокот на набљудувања",
- "tog-watchdefault": "Додавај ги страниците и податотеките што ги уредувам во списокот на набљудувања",
- "tog-watchmoves": "Додавај ги страниците и податотеките што ги преместувам во списокот на набљудувања",
- "tog-watchdeletion": "Додавај ги страниците и податотеките што ги бришам во списокот на набљудувања",
+ "tog-watchcreations": "Додавај ги страниците што ги создавам и податотеките што ги подигам во набљудуваните",
+ "tog-watchdefault": "Додавај ги страниците и податотеките што ги уредувам во набљудуваните",
+ "tog-watchmoves": "Додавај ги страниците и податотеките што ги преместувам во набљудуваните",
+ "tog-watchdeletion": "Додавај ги страниците и податотеките што ги бришам во набљудуваните",
"tog-watchrollback": "Додај ги страниците сум ги отповикал во набљудувани",
"tog-minordefault": "Обележувај ги сите уредувања како ситни по основно",
"tog-previewontop": "Прикажи го прегледот пред кутијата за уредување",
@@ -43,13 +44,13 @@
"tog-shownumberswatching": "Прикажи го бројот на корисници кои набљудуваат",
"tog-oldsig": "Постоечки потпис:",
"tog-fancysig": "Сметај го потписот за викитекст (без автоматска врска)",
- "tog-uselivepreview": "Користи преглед во живо (експериментално)",
+ "tog-uselivepreview": "Користи преглед во живо",
"tog-forceeditsummary": "Извести ме кога нема опис на промените",
- "tog-watchlisthideown": "Скриј мои уредувања од списокот на набљудувања",
- "tog-watchlisthidebots": "Скриј ботовски уредувања од списокот на набљудувања",
- "tog-watchlisthideminor": "Скриј ги ситните уредувања во списокот на набљудувања",
- "tog-watchlisthideliu": "Скриј ги уредувањата на најавените корисници во списокот на набљудувања",
- "tog-watchlisthideanons": "Скриј ги уредувањата од анонимни корисници во списокот на набљудувања",
+ "tog-watchlisthideown": "Скриј мои уредувања од набљудуваните",
+ "tog-watchlisthidebots": "Скриј ботовски уредувања од набљудуваните",
+ "tog-watchlisthideminor": "Скриј ги ситните уредувања во набљудуваните",
+ "tog-watchlisthideliu": "Скриј ги уредувањата на најавените корисници во набљудуваните",
+ "tog-watchlisthideanons": "Скриј ги уредувањата од анонимни корисници во набљудуваните",
"tog-watchlisthidepatrolled": "Скриј испатролирани уредувања од мојот список на набљудувања",
"tog-ccmeonemails": "Испраќај ми мои примероци од писмата што ги праќам на другите корисници",
"tog-diffonly": "Не ја покажувај содржината на страницата под разликите",
@@ -183,19 +184,19 @@
"view": "Преглед",
"view-foreign": "Погл. на $1",
"edit": "Уреди",
- "edit-local": "Уреди локален опис",
+ "edit-local": "Уреди месен опис",
"create": "Создај",
- "create-local": "Додај локален опис",
+ "create-local": "Додај месен опис",
"editthispage": "Уреди ја страницава",
- "create-this-page": "Создај ја оваа страница",
+ "create-this-page": "Создај ја страницава",
"delete": "Избриши",
- "deletethispage": "Избриши ја оваа страница",
- "undeletethispage": "обнови ја оваа страница",
+ "deletethispage": "Избриши ја страницава",
+ "undeletethispage": "обнови ја страницава",
"undelete_short": "Врати {{PLURAL:$1|едно уредување|$1 уредувања}}",
"viewdeleted_short": "Преглед на {{PLURAL:$1|едно избришано уредување|$1 избришани уредувања}}",
"protect": "Заштити",
"protect_change": "промена",
- "protectthispage": "Заштити ја оваа страница",
+ "protectthispage": "Заштити ја страницава",
"unprotect": "Измени заштита",
"unprotectthispage": "Измена на заштитата на страницава",
"newpage": "Нова страница",
@@ -218,7 +219,7 @@
"otherlanguages": "На други јазици",
"redirectedfrom": "(Пренасочено од $1)",
"redirectpagesub": "Пренасочувачка страница",
- "redirectto": "Пренасочи кон:",
+ "redirectto": "Пренасочување кон:",
"lastmodifiedat": "Последната промена на страницава е извршена на $1 г. во $2 ч.",
"viewcount": "Оваа страница била посетена {{PLURAL:$1|еднаш|$1 пати}}.",
"protectedpage": "Заштитена страница",
@@ -231,6 +232,7 @@
"pool-queuefull": "Редицата на барања е полна",
"pool-errorunknown": "Непозната грешка",
"pool-servererror": "Службата на фондовскиот шалтер е недостапна ($1).",
+ "poolcounter-usage-error": "Грешка во употребата: $1",
"aboutsite": "За {{SITENAME}}",
"aboutpage": "Project:За {{SITENAME}}",
"copyright": "Содржината е достапна под условите на $1 освен ако не е поинаку наведено.",
@@ -240,6 +242,7 @@
"disclaimers": "Услови на употреба",
"disclaimerpage": "Project:Услови на употреба",
"edithelp": "Помош за уредување",
+ "helppage-top-gethelp": "Помош",
"mainpage": "Главна страница",
"mainpage-description": "Главна страница",
"policy-url": "Project:Начела",
@@ -281,12 +284,12 @@
"restorelink": "{{PLURAL:$1|едно избришано уредување|$1 избришани уредувања}}",
"feedlinks": "Во вид:",
"feed-invalid": "Погрешен начин на претплата на емитувања",
- "feed-unavailable": "RSS/Atom емитувањата не се достапни",
+ "feed-unavailable": "RSS/Атом-емитувањата не се достапни",
"site-rss-feed": "$1 — RSS-емитувања",
- "site-atom-feed": "$1 — Atom-емитувања",
+ "site-atom-feed": "$1 — Атом-емитувања",
"page-rss-feed": "„$1“ - RSS емитувања",
- "page-atom-feed": "„$1“ — Atom-емитувања",
- "feed-atom": "Atom",
+ "page-atom-feed": "„$1“ — Атом-емитувања",
+ "feed-atom": "Атом",
"feed-rss": "RSS",
"red-link-title": "$1 (страницата не постои)",
"sort-descending": "Подреди надолно",
@@ -322,10 +325,13 @@
"readonly_lag": "Базата е автоматски заклучена додека помошните опслужувачи не се усогласат",
"internalerror": "Внатрешна грешка",
"internalerror_info": "Внатрешна грешка: $1",
+ "internalerror-fatal-exception": "Кобен исклучок на типот „$1“",
"filecopyerror": "Не можeв да ја ископирам податотеката „$1“ во „$2“.",
"filerenameerror": "Не можев да ја преименувам податотеката „$1“ во „$2“.",
"filedeleteerror": "Не може да се избрише податотеката „$1“.",
"directorycreateerror": "Не можеше да се создаде именикот „$1“.",
+ "directoryreadonlyerror": "Папката „$1“ не е запислива.",
+ "directorynotreadableerror": "Папката „$1“ не е читлива.",
"filenotfound": "Не може да се најде податотеката „$1“.",
"unexpected": "Неочекувана вредност: „$1“=„$2“.",
"formerror": "Грешка: не можам да го испратам образецот",
@@ -346,8 +352,9 @@
"protectedpagetext": "Оваа страница е заклучена за уредувања и други дејства.",
"viewsourcetext": "Можете да го погледнете и копирате кодот на оваа страница:",
"viewyourtext": "Можете да го погледнете и копирате кодот на '''вашите уредувања''' на оваа страница:",
- "protectedinterface": "Оваа страница содржи текст од посредникот на програмот на ова вики и е превентивно заштитена поради можна злоупотреба.\nЗа да додавате или менувате преводи на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?uselang=mk translatewiki.net] - проектот за локализација на МедијаВики.",
- "editinginterface": "'''Предупредување:''' Уредувате страница која е дел од корисничкиот посредник на програмот МедијаВики.\nПромените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.\nЗа да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] - проектот за локализација на МедијаВики.",
+ "protectedinterface": "Оваа страница содржи текст од посредникот на програмот на ова вики и е превентивно заштитена поради можна злоупотреба.\nЗа да додавате или менувате преводи на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?uselang=mk translatewiki.net] — проектот за преведување на МедијаВики.",
+ "editinginterface": "<strong>Предупредување:</strong> Уредувате страница која е дел од корисничкиот посредник на програмот МедијаВики.\nПромените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.",
+ "translateinterface": "За да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] — проектот за преведување на МедијаВики.",
"cascadeprotected": "Оваа страница е заштитена од уредувања бидејќи е вклучена во {{PLURAL:$1|следнава страница, којашто е заштитена|следниве страници, коишто се заштитени}} со можноста „каскадна заштита“:\n$2",
"namespaceprotected": "Немате дозвола за уредување страници во именскиот простор '''$1'''.",
"customcssprotected": "Немате дозвола да ја менувате оваа страница со CSS бидејќи содржи туѓи лични нагодувања.",
@@ -388,8 +395,8 @@
"password-change-forbidden": "Не можете да ја менувате лозинката на ова вики.",
"externaldberror": "Настана грешка при надворешното најавување на базата или пак немате дозвола да ја подновите вашата надворешна сметка.",
"login": "Најава",
- "nav-login-createaccount": "Најава / регистрација",
- "userlogin": "Најава / регистрација",
+ "nav-login-createaccount": "Најава / направи сметка",
+ "userlogin": "Најава / направи сметка",
"userloginnocreate": "Најава",
"logout": "Одјава",
"userlogout": "Одјава",
@@ -404,6 +411,8 @@
"userlogin-resetlink": "Си ги заборавивте податоците за најава?",
"userlogin-resetpassword-link": "Ја заборавивте лозинката?",
"userlogin-helplink2": "Помош за најава",
+ "userlogin-loggedin": "Веќе сте најавени како {{GENDER:$1|$1}}.\nСо образецот подолу можете да се најавите како друг корисник.",
+ "userlogin-createanother": "Направи нова сметка",
"createacct-emailrequired": "Е-пошта",
"createacct-emailoptional": "Е-пошта (незадолжително)",
"createacct-email-ph": "Внесете е-пошта",
@@ -440,6 +449,7 @@
"wrongpassword": "Внесовте погрешна лозинка. Обидете се повторно.",
"wrongpasswordempty": "Внесената лозинка е празна. Обидете се повторно.",
"passwordtooshort": "Лозинката мора да има најмалку {{PLURAL:$1|1 знак|$1 знаци}}.",
+ "passwordtoolong": "Лозинката не треба да има повеќе од {{PLURAL:$1|1 знак|$1 знаци}}.",
"password-name-match": "Лозинката мора да се разликува од корисничкото име.",
"password-login-forbidden": "Употребата на ова корисничко име и лозинка е забранета.",
"mailmypassword": "Нова лозинка",
@@ -532,7 +542,7 @@
"resettokens-legend": "Враќање одново на шифри",
"resettokens-tokens": "Шифри:",
"resettokens-token-label": "$1 (тековна вредност: $2)",
- "resettokens-watchlist-token": "Шифра за каналот (Atom/RSS) на [[Special:Watchlist|измени во набљудуваните страници]]",
+ "resettokens-watchlist-token": "Шифра за каналот (Атом/RSS) на [[Special:Watchlist|измени во набљудуваните страници]]",
"resettokens-done": "Шифрата е вратена одново.",
"resettokens-resetbutton": "Врати избрани шифри",
"bold_sample": "Задебелен текст",
@@ -565,10 +575,12 @@
"anoneditwarning": "<strong>Предупредување:</strong> Не сте најавени. Вашата IP-адреса ќе биде јавно видлива ако уредувате. Ако <strong>[$1 се најавите]</strong> или <strong>[$2 направите сметка]</strong>, тогаш уредувањата ќе се припишуваат на вашето корисничко име, покрај другите погодности.",
"anonpreviewwarning": "''Не сте најавени. Ако ја зачувате, Вашата IP-адреса ќе биде заведена во историјата на уредување на страницата.''",
"missingsummary": "'''Потсетник:''' Не внесовте опис на измените. Ако притиснете Зачувај повторно, вашите измени ќе се зачуваат без опис.",
+ "selfredirect": "<strong>Предупредување:</strong> Создавате пренасочување кон истата статија.\nМоже да сте укажале грешна целна страница, или пак уредувате погрешна страница.\nАко стиснете на „{{int:savearticle}}“ повторно, тогаш пренасочувањето бездруго ќе се создаде.",
"missingcommenttext": "Ве молиме внесете коментар подолу.",
"missingcommentheader": "'''Потсетување:''' Не внесовте наслов за овој коментар.\nАко повторно стиснете на „{{int:savearticle}}“, уредувањето ќе биде зачувано без наслов.",
"summary-preview": "Изглед на описот:",
"subject-preview": "Преглед на предметот/насловот:",
+ "previewerrortext": "Се појави грешка при обидот да се прегледаат промените.",
"blockedtitle": "Корисникот е блокиран",
"blockedtext": "'''Вашето корисничко име или IP-адреса е блокирано.'''\n\nБлокирањето е направено од страна на $1.\nДаденото образложение е ''$2''.\n\n* Почеток на блокирањето: $8\n* Истекување на блокирањето: $6\n* Корисникот што требало да биде блокиран: $7\n\nМоже да контактирате со $1 или некој друг [[{{MediaWiki:Grouppage-sysop}}|администратор]] за да разговарате во врска со блокирањето.\nМожете да ја искористите можноста „Е-пошта до овој корисник“ ако е назначена важечка е-поштенска адреса во [[Special:Preferences|вашите нагодувања]] и не ви е забрането да ја користите.\nВашата сегашна IP-адреса е $3, а назнака на блокирањето гласи #$5.\nВе молиме наведете ги сите подробности прикажани погоре, во вашата евентуална реакција.",
"autoblockedtext": "Вашата IP-адреса е автоматски блокирана бидејќи била користена од страна на друг корисник, кој бил блокиран од $1.\nДаденото образложение е следново:\n\n:''$2''\n\n* Почеток на блокирањето: $8\n* Истекување на блокирањето: $6\n* Со намера да се блокира: $7\n\nМоже да контактирате со $1 или некој друг [[{{MediaWiki:Grouppage-sysop}}|администратор]] за да разговарате во врска со ова блокирање.\n\nИмајте предвид дека можеби нема да можете да ја искористите можноста „Е-пошта до овој корисник“ доколку не е назначена важечка е-поштенска адреса во [[Special:Preferences|вашите нагодувања]] и ви е забрането користитење на истата.\n\nВашата IP-адреса е $3, a ID на блокирањеto е $5.\nВе молиме наведете ги овие подробности доколку реагирате на блокирањето.",
@@ -664,6 +676,10 @@
"content-model-text": "прост текст",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Празен објект",
+ "content-json-empty-array": "Празна низа",
+ "duplicate-args-category": "Страници што користат дуплирани аргументи во повикувања на шаблони",
+ "duplicate-args-category-desc": "Страницава содржи повикувања на шаблони кои се дупликати на аргументи, како што се <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Предупредување: Оваа страница користи премногу повикувања на parser функции.\n\nТреба да има помалку од $2 {{PLURAL:$2|повикување|повикувања}} а сега има {{PLURAL:$1|$1 повикување|$1 повикувања}}.",
"expensive-parserfunction-category": "Страници со премногу повикувања на парсер функции",
"post-expand-template-inclusion-warning": "'''Предупредување:''' Големината на вклучените шаблони е преголема.\nНекои шаблони нема да бидат вклучени.",
@@ -718,7 +734,7 @@
"history-feed-empty": "Бараната страница не постои.\nМоже била избришана од викито или преименувана.\nОбидете се да [[Special:Search|пребарате низ викито]] за релевантни нови страници.",
"rev-deleted-comment": "(избришан опис на промени)",
"rev-deleted-user": "(избришано корисничко име)",
- "rev-deleted-event": "(избришан запис на дејство)",
+ "rev-deleted-event": "(избришани податоци од дневникот)",
"rev-deleted-user-contribs": "[отстрането е корисничкото име или IP-адресата - уредувањето нема да се прикаже на списокот на придонеси]",
"rev-deleted-text-permission": "Оваа преработка страницата е <strong>избришана</strong>.\nМожеби има подробности во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].",
"rev-suppressed-text-permission": "Оваа преработка на страницата е <strong>притаена</strong>. Повеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневникот на скривања].",
@@ -752,7 +768,7 @@
"revdelete-legend": "Постави ограничувања за видливост",
"revdelete-hide-text": "Текст на преработката",
"revdelete-hide-image": "Скриј содржина на податотека",
- "revdelete-hide-name": "Скриј го дејството и неговата одредница",
+ "revdelete-hide-name": "Скриј ја целта и параметрите",
"revdelete-hide-comment": "Опис на уредувањето",
"revdelete-hide-user": "Корисничко име/IP-адреса на уредникот",
"revdelete-hide-restricted": "Постави ограничувања и за администратори на ист начин како и за останатите",
@@ -806,7 +822,6 @@
"mergehistory-same-destination": "Изворната и целната страница треба да се различни",
"mergehistory-reason": "Причина:",
"mergelog": "Дневник на спојувања на страници",
- "pagemerge-logentry": "споено [[$1]] во [[$2]] (преработки до $3)",
"revertmerge": "Одвојување",
"mergelogpagetext": "Следи список на скорешни спојувања на истории на страници.",
"history-title": "$1: Историја на измените",
@@ -829,6 +844,8 @@
"notextmatches": "Ниеден текст во статиите не одговара",
"prevn": "{{PLURAL:$1|претходна $1| претходни $1}}",
"nextn": "{{PLURAL:следна $1|следни $1}}",
+ "prev-page": "претходна страница",
+ "next-page": "следна страница",
"prevn-title": "{{PLURAL:$1|Претходен|Претходни}} $1 {{PLURAL:$1|резултат|резултати}}",
"nextn-title": "{{PLURAL:$1|Следен|Следни}} $1 {{PLURAL:$1|резултат|резултати}}",
"shown-title": "Прикажи $1 {{PLURAL:$1|резултат|резултати}} на страница",
@@ -844,9 +861,10 @@
"searchprofile-everything-tooltip": "Пребарување по сета содржина (вклучувајќи страници за разговор)",
"searchprofile-advanced-tooltip": "Пребарување во именски простори по избор",
"search-result-size": "$1 ({{PLURAL:$2|еден збор|$2 збора}})",
- "search-result-category-size": "{{PLURAL:$1|1 член|$1 члена}} ({{PLURAL:$2|1 поткатегорија|$2 поткатегории}}, {{PLURAL:$3|1 податотека|$3 податотеки}})",
+ "search-result-category-size": "{{PLURAL:$1|1 член|$1 членови}} ({{PLURAL:$2|1 поткатегорија|$2 поткатегории}}, {{PLURAL:$3|1 податотека|$3 податотеки}})",
"search-redirect": "(пренасочување $1)",
"search-section": "(пасус $1)",
+ "search-category": "(категорија $1)",
"search-file-match": "(се совпаѓа со содржината на податотеката)",
"search-suggest": "Дали мислевте на: $1",
"search-interwiki-caption": "Збратимени проекти",
@@ -880,7 +898,12 @@
"prefs-personal": "Кориснички профил",
"prefs-rc": "Скорешни промени",
"prefs-watchlist": "набљудувања",
- "prefs-watchlist-days": "Број на денови за приказ во списокот на набљудувања:",
+ "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-watchlist-edits": "Максимален број на прикажани промени во проширениот список на набљудувања:",
"prefs-watchlist-edits-max": "Највеќе: 1000",
@@ -906,7 +929,7 @@
"prefs-help-watchlist-token2": "Ова е тајна шифра за вашиот канализиран список на набљудувања.\nСекој што ја знае ќе може да ја чита, па затоа ви препорачуваме да не ја кажувате никому.\n[[Special:ResetTokens|Стиснете тука ако треба да зададете нова]].",
"savedprefs": "Вашите нагодувања се зачувани.",
"timezonelegend": "Часовен појас:",
- "localtime": "Локално време:",
+ "localtime": "Месно време:",
"timezoneuseserverdefault": "Од викито ($1)",
"timezoneuseoffset": "Друго (посочете отстапување)",
"servertime": "Време на опслужувачот:",
@@ -949,12 +972,12 @@
"gender-female": "Таа уредува викистраници",
"prefs-help-gender": "Оваа поставка е незадолжителна.\nПрограмот го користи посочениот род за да ве опишува согласно вашиот пол.\nИнформацијата ќе биде јавна.",
"email": "Е-пошта",
- "prefs-help-realname": "'''Вистинското име''' е незадолжително.\nДоколку изберете да го внесете, тоа може да се искористи за оддавање на заслуги за Вашата работа.",
+ "prefs-help-realname": "Вистинското име е незадолжително.\nДоколку изберете да го внесете, тоа може да се искористи за оддавање на заслуги за Вашата работа.",
"prefs-help-email": "Е-поштата е незадолжителна, но ќе ви треба за добивање на нова лозинка ако си ја заборавите постоечката.",
"prefs-help-email-others": "Можете да изберете другите да ве контактираат преку вашата корисничка страница без да го откриете вашиот идентитет.",
"prefs-help-email-required": "Е-поштенска адреса е задолжително да се наведе.",
"prefs-info": "Основни информации",
- "prefs-i18n": "Интернационализација",
+ "prefs-i18n": "Јазик",
"prefs-signature": "Потпис",
"prefs-dateformat": "Формат на датумот",
"prefs-timeoffset": "Временско отстапување",
@@ -1029,14 +1052,14 @@
"right-upload": "Подигни податотеки",
"right-reupload": "Заменување на постоечки податотеки",
"right-reupload-own": "Преснимување на постоечка податотека подигната од вас",
- "right-reupload-shared": "Презапис на едни податотеки врз други на заедничкото мултимедијално складиште локално",
+ "right-reupload-shared": "Презапис на едни податотеки врз други на заедничкото мултимедијално складиште месно",
"right-upload_by_url": "Подигање на податотека од URL-адреса",
"right-purge": "Бришење од опслужувачки меѓусклад на страницата без барање потврда за тоа",
"right-autoconfirmed": "Без ограничувања на стапки за IP-адреса",
"right-bot": "Третиран како автоматски процес",
"right-nominornewtalk": "Ситните уредувања да не поттикнуваат потсетник за нова порака",
- "right-apihighlimits": "Користење на помалку ограничени барања кон API",
- "right-writeapi": "Можност за пишување на API",
+ "right-apihighlimits": "Користење на помалку ограничени барања од извршникот",
+ "right-writeapi": "Можност за запишување во извршникот",
"right-delete": "Бришење страници",
"right-bigdelete": "Бришење страници со долга историја",
"right-deletelogentry": "Бришење и враќање на конкретни ставки во дневник",
@@ -1057,6 +1080,7 @@
"right-protect": "Менување на степени на заштита и уредување на каскадно заштитени страници",
"right-editprotected": "Уредување на страници заштитени како „{{int:protect-level-sysop}}“",
"right-editsemiprotected": "Уредување на страници заштитени како „{{int:protect-level-autoconfirmed}}“",
+ "right-editcontentmodel": "Уредување на содржинскиот модел на страница",
"right-editinterface": "Уредување на кориснички посредник",
"right-editusercssjs": "Уредување на CSS и JS податотеки на други корисници",
"right-editusercss": "Уредување на CSS податотеки на други корисници",
@@ -1064,7 +1088,7 @@
"right-editmyusercss": "Уредување на сопствени кориснички каскадни стилски податотеки (CSS)",
"right-editmyuserjs": "Уредување на сопствени кориснички податотеки со JavaScript",
"right-viewmywatchlist": "Преглед на вашиот список на набљудувања",
- "right-editmywatchlist": "Уредување на вашиот список на набљудувања. Извесни дејства сепак ќе ставаат страници во списокот и без да го имате ова право.",
+ "right-editmywatchlist": "Уредување на вашите набљудувани. Извесни дејства сепак ќе ставаат страници во нив и без да го имате ова право.",
"right-viewmyprivateinfo": "Преглед на сопствените лични податоци (на пр. е-пошта, вистинско име и презиме)",
"right-editmyprivateinfo": "Уредување на сопствените лични податоци (на пр. е-пошта, вистинско име и презиме)",
"right-editmyoptions": "Уредување на вашите нагодувања",
@@ -1084,6 +1108,7 @@
"right-override-export-depth": "Извезување на страници вклучувајќи поврзани страници со длабочина до 5",
"right-sendemail": "Испраќање на е-пошта до други корисници",
"right-passwordreset": "Преглед на пораки по е-пошта за промена на лозинка",
+ "right-managechangetags": "Создавање3 или бришење на [[Special:Tags|ознаки]] од базата",
"newuserlogpage": "Дневник на регистрирања на корисници",
"newuserlogpagetext": "Ова е дневник на регистрирани корисници.",
"rightslog": "Дневник на корисничките права",
@@ -1104,12 +1129,12 @@
"action-reupload": "заменување на оваа постоечка податотека",
"action-reupload-shared": "заменување на оваа податотека на заедничко складиште",
"action-upload_by_url": "подигни ја податотекава од URL-адреса",
- "action-writeapi": "употребете пишување на API",
+ "action-writeapi": "употребете запишување во извршникот",
"action-delete": "избриши ја страницава",
"action-deleterevision": "избриши ја ревизијава",
"action-deletedhistory": "прегледај ја историјата на бришења за оваа страница",
"action-browsearchive": "барање на избришани страници",
- "action-undelete": "обнови ја оваа страница",
+ "action-undelete": "обнови ја страницава",
"action-suppressrevision": "прегледај ја и обнови ја оваа скриена преработка",
"action-suppressionlog": "преглед на овој li;en дневник",
"action-block": "оневозможи го овој корисник да уредува",
@@ -1125,10 +1150,12 @@
"action-userrights-interwiki": "уредување на кориснички права на корисници на други викија",
"action-siteadmin": "заклучување или отклучување на базата на податоци",
"action-sendemail": "испраќање на е-пошта",
- "action-editmywatchlist": "уредување на вашиот список на набљудувања",
+ "action-editmywatchlist": "уредување на мои набљудувани",
"action-viewmywatchlist": "преглед на вашиот список на набљудувања",
"action-viewmyprivateinfo": "преглед на вашите лични податоци",
"action-editmyprivateinfo": "уредување на вашите лични податоци",
+ "action-editcontentmodel": "уредување на содржинскиот модел на страница",
+ "action-managechangetags": "создавање или бришење на ознаки од базата",
"nchanges": "$1 {{PLURAL:$1|промена|промени}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|од последната посаета}}",
"enhancedrc-history": "историја",
@@ -1199,17 +1226,17 @@
"upload_directory_read_only": "Опслужувачот не може да запишува во именикот за подигање ($1).",
"uploaderror": "Грешка во подигањето",
"upload-recreate-warning": "'''Предупредување: Податотеката со тоа име е избришана или преместена.'''\n\nПодолу е наведена дневничката евиденција на бришење и преместување за оваа страница:",
- "uploadtext": "Користете го долниот образец за подигање на податотеки.\nЗа преглед или пребарување на претходно подигнати податотеки, погледнете ја [[Special:FileList|списокот на подигнати податотеки]]; повторните подигања се заведени во [[Special:Log/upload|дневникот на подигања]], а бришењата се заведуваат во [[Special:Log/delete|дневникот на бришења]].\n\nЗа да поставите слика во страница, користете врска во еден од следниве облици:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Податотека.jpg]]</nowiki></code>''' за верзија на сликата во целосна големина\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Податотека.png|200px|thumb|left|опис]]</nowiki></code>''' за верзија на сликата со големина од 200 пиксели прикажана во соодветна кутија, со опис како што е наведено во '''опис'''\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Податотека.ogg]]</nowiki></code>''' за директно поврзување со податотеката без нејзино прикажување",
- "upload-permitted": "Допуштени податотечни типови: $1.",
- "upload-preferred": "Претпочитани податотечни типови: $1.",
- "upload-prohibited": "Недопуштени податотечни типови: $1.",
+ "uploadtext": "Користете го долниот образец за подигање на податотеки.\nЗа преглед или пребарување на претходно подигнати податотеки, погледнете ја [[Special:FileList|списокот на подигнати податотеки]]; повторните подигања се заведени во [[Special:Log/upload|дневникот на подигања]], а бришењата се заведуваат во [[Special:Log/delete|дневникот на бришења]].\n\nЗа да поставите слика во страница, користете врска во еден од следниве облици:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Податотека.jpg]]</nowiki></code>''' за верзија на сликата во целосна големина\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Податотека.png|200px|thumb|left|опис]]</nowiki></code>''' за верзија на сликата со големина од 200 пиксели прикажана во соодветна кутија, со опис како што е наведено во '''опис'''\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Податотека.ogg]]</nowiki></code>''' за непосредно поврзување со податотеката без нејзино прикажување",
+ "upload-permitted": "{{PLURAL:$2|Допуштен податотечен тип|Допуштени податотечни типови}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Претпочитан податотечен тип|Претпочитани податотечни типови}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Недозволен податотечен тип|Недозволени податотечни типови}}: $1.",
"uploadlogpage": "Дневник на подигања",
"uploadlogpagetext": "Наведен е список на најновите подигања на податотеки.\nПогледнете ја [[Special:NewFiles|галеријата на нови податотеки]] за визуелен преглед.",
"filename": "Име на податотеката",
"filedesc": "Опис",
"fileuploadsummary": "Опис:",
"filereuploadsummary": "Измени во податотеката:",
- "filestatus": "Copyright статус:",
+ "filestatus": "Авторскоправен статус:",
"filesource": "Извор:",
"ignorewarning": "Занемари ги предупредувањата и зачувај ја податотеката",
"ignorewarnings": "Занемари предупредувања",
@@ -1266,7 +1293,7 @@
"destfilename": "Целно име на податотеката:",
"upload-maxfilesize": "Максимална големина на податотеката: $1",
"upload-description": "Опис на податотека",
- "upload-options": "Нагодувања за подигање",
+ "upload-options": "Нагодувања на подигањето",
"watchthisupload": "Набљудувај ја податотекава",
"filewasdeleted": "Податотека со ова име претходно била подигната и потоа избришана.\nПроверете во $1 пред да продолжите со повтроно подигање.",
"filename-bad-prefix": "Името на податотеката која ја подигате започнува со '''„$1“''', типично за неописните називи кои дигиталните фотоапарати автоматски ги создаваат, што впрочем е недоволно описно.\nВе молиме одберете подобро описно име за вашата податотека.",
@@ -1359,10 +1386,10 @@
"license": "Лиценцирање:",
"license-header": "Лиценцирање",
"nolicense": "Нема",
- "licenses-edit": "Измени лиценцни можности",
+ "licenses-edit": "Измени ги лиценцните можности",
"license-nopreview": "(Прегледот не е достапен)",
- "upload_source_url": "(податотеката што се ја одбрале од важечка, јавно достапна URL-адреса)",
- "upload_source_file": "(податотеката што се ја одбрале од вашиот сметач)",
+ "upload_source_url": "(податотеката што сте ја одбрале од важечка, јавно достапна URL-адреса)",
+ "upload_source_file": "(податотеката што ја одбирате од вашиот сметач)",
"listfiles-delete": "избриши",
"listfiles-summary": "Оваа службена страница ги прикажува сите подигнати податотеки.",
"listfiles_search_for": "Побарај име на податотека:",
@@ -1445,7 +1472,7 @@
"unwatchedpages": "Ненабљудувани страници",
"listredirects": "Список на пренасочувања",
"listduplicatedfiles": "Список на податотеки со дупликати",
- "listduplicatedfiles-summary": "Ова е список на податотеки чија најнова верзија е дупликат на најнова верзија на некоја друга податотека. Се земаат предвид само локални податотеки.",
+ "listduplicatedfiles-summary": "Ова е список на податотеки чија најнова верзија е дупликат на најнова верзија на некоја друга податотека. Се земаат предвид само месни податотеки.",
"listduplicatedfiles-entry": "[[:File:$1|$1]] има [[$3|{{PLURAL:$2|дупликат|$2 дупликати}}]].",
"unusedtemplates": "Неискористени шаблони",
"unusedtemplatestext": "Оваа страница ги прикажува сите страници во именскиот простор {{ns:template}} кои не се вклучени во друга страница.\nНе заборавајте да ги проверите другите врски во шаблоните пред да ги избришете.",
@@ -1462,7 +1489,6 @@
"statistics": "Статистики",
"statistics-header-pages": "Статистики за страници",
"statistics-header-edits": "Статистики на уредувања",
- "statistics-header-views": "Статистики на посети",
"statistics-header-users": "Статистики за корисници",
"statistics-header-hooks": "Други статистики",
"statistics-articles": "Статии",
@@ -1471,13 +1497,9 @@
"statistics-files": "Подигнати податотеки",
"statistics-edits": "Број на уредувања од започнувањето на {{SITENAME}}",
"statistics-edits-average": "Просечен број на уредувања по страница",
- "statistics-views-total": "Вкупно посети",
- "statistics-views-total-desc": "Не се вклучени прегледувања на непостоечки и службени страници",
- "statistics-views-peredit": "Посети по уредување",
"statistics-users": "Регистрирани [[Special:ListUsers|корисници]]",
"statistics-users-active": "Активни корисници",
"statistics-users-active-desc": "Корисници кои имаат извршено некое дејство {{PLURAL:$1|претходниот ден|во претходните $1 дена}}",
- "statistics-mostpopular": "Најпосетувани страници",
"pageswithprop": "Страници со својство",
"pageswithprop-legend": "Страници со својство",
"pageswithprop-text": "На страницава се наведени страници што користат дадено својство.",
@@ -1503,8 +1525,8 @@
"ncategories": "$1 {{PLURAL:$1|категорија|категории}}",
"ninterwikis": "$1 {{PLURAL:$1|меѓувики|меѓувикија}}",
"nlinks": "$1 {{PLURAL:$1|врска|врски}}",
- "nmembers": "$1 {{PLURAL:$1|член|члена}}",
- "nmemberschanged": "$1 → $2 {{PLURAL:$2|член|члена}}",
+ "nmembers": "$1 {{PLURAL:$1|член|членови}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|член|членови}}",
"nrevisions": "$1 {{PLURAL:$1|измена|измени}}",
"nviews": "$1 {{PLURAL:$1|преглед|прегледи}}",
"nimagelinks": "Се користи на $1 {{PLURAL:$1|страница|страници}}",
@@ -1518,9 +1540,9 @@
"uncategorizedtemplates": "Некатегоризирани преуредувања",
"unusedcategories": "Неискористени категории",
"unusedimages": "Неискористени слики",
- "popularpages": "Популарни страници",
"wantedcategories": "Потребни категории",
"wantedpages": "Потребни страници",
+ "wantedpages-summary": "Список на непостоечки страници со највеќе врски што водат до нив, исклучувајќи страниците до кои водат само пренасочувања. Список на непостоечки страници до кои водат пренасочувања ќе најдете на [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Невалиден наслов во резултатите: $1",
"wantedfiles": "Потребни податотеки",
"wantedfiletext-cat": "Следниве податотеки се користат, но не постојат. Податотеките од други складишта може да се наведени дури и ако постојат. Таквите ќе бидат <del>поништени</del> од списокот. Покрај ова, страниците што содржат податотеки кои не постојат се наведени на [[:$1]].",
@@ -1540,7 +1562,7 @@
"prefixindex-strip": "Отстрани ја претставката во списокот",
"shortpages": "Кратки страници",
"longpages": "Долги страници",
- "deadendpages": "Ќорсокак страници",
+ "deadendpages": "Слепи страници",
"deadendpagestext": "Следните страници немаат врски кон ниту една друга страница на ова вики.",
"protectedpages": "Заштитени страници",
"protectedpages-indef": "Само бесконечни заштити",
@@ -1569,8 +1591,8 @@
"newpages-username": "Корисничко име:",
"ancientpages": "Најстари статии",
"move": "Премести",
- "movethispage": "Премести ја оваа страница",
- "unusedimagestext": "Следниве податотеки постојат, но не се вметнати во ниедна страница.\nИмајте предвид дека други мрежни места може да ставаат врски до неа со директна URL-адреса, и затоа може да е наведена овде и покрај тоа што е во активна употреба.",
+ "movethispage": "Премести ја страницава",
+ "unusedimagestext": "Следниве податотеки постојат, но не се вметнати во ниедна страница.\nИмајте предвид дека други мрежни места може да ставаат врски до неа со непосредна URL-адреса, и затоа може да е наведена овде и покрај тоа што е во активна употреба.",
"unusedcategoriestext": "Следните категории постојат и покрај тоа што ниедна статија и категорија не ги користи.",
"notargettitle": "Нема цел",
"notargettext": "Не одредивте целна страница или корисник на кој би се применила функцијата.",
@@ -1580,10 +1602,12 @@
"pager-older-n": "{{PLURAL:$1|постара 1|постари $1}}",
"suppress": "Скривање",
"querypage-disabled": "Оваа службена страница е оневозможена за да не попречува на делотворноста.",
+ "apihelp": "Помош со извршникот",
+ "apihelp-no-such-module": "Модулот „$1“ не е пронајден.",
"booksources": "Печатени извори",
"booksources-search-legend": "Пребарување на извори за книга",
"booksources-isbn": "ISBN:",
- "booksources-go": "Најди",
+ "booksources-search": "Пребарај",
"booksources-text": "Ова е список на врски кон други мрежни места кои продаваат нови и користени книги, и тие може\nда имаат повеќе информации за книгите што ги баравте:",
"booksources-invalid-isbn": "Наведениот ISBN се чини неправилен. Проверете да не настанала некоја грешка при копирањето од изворот.",
"specialloguserlabel": "Изведувач:",
@@ -1653,9 +1677,9 @@
"listgrouprights-namespaceprotection-header": "Ограничувања за именски простори",
"listgrouprights-namespaceprotection-namespace": "Именски простор",
"listgrouprights-namespaceprotection-restrictedto": "Права што им овозможуваат на корисниците да уредуваат",
- "trackingcategories": "Следачки категории",
- "trackingcategories-summary": "На страницава се наведени следачки категории што автоматски се пополнуваат од програмот на МедијаВики. Нивните називи можат да се сменат со измена на соодветните системски пораки во именскиот простор {{ns:8}}.",
- "trackingcategories-msg": "Следачка категорија",
+ "trackingcategories": "Следечки категории",
+ "trackingcategories-summary": "На страницава се наведени следечки категории што автоматски се пополнуваат од програмот на МедијаВики. Нивните називи можат да се сменат со измена на соодветните системски пораки во именскиот простор {{ns:8}}.",
+ "trackingcategories-msg": "Следечка категорија",
"trackingcategories-name": "Назив на пораката",
"trackingcategories-desc": "Критериуми за вклучување",
"noindex-category-desc": "Роботите не ја индексираат страницава бидејќи го содржи волшебниот збор <code><nowiki>__NOINDEX__</nowiki></code> и се наоѓа во именски простор кајшто е дозволен.",
@@ -1673,7 +1697,7 @@
"emailuser-title-target": "Составување на е-пошта за {{GENDER:$1|корисникот}}",
"emailuser-title-notarget": "Е-пошта за корисникот",
"emailpage": "Е-пошта",
- "emailpagetext": "Можете да го употребите следниов образец за да му испратите е-пошта на овој {{GENDER:$1|корисник}}.\nАдреса која ја имате наведено во [[Special:Preferences|вашите нагодувања]] ќе се прикаже во полето „Од“ на пораката, со што примачот ќе може да ви одговори директно вам.",
+ "emailpagetext": "Можете да го употребите следниов образец за да му испратите е-пошта на овој {{GENDER:$1|корисник}}.\nАдреса која ја имате наведено во [[Special:Preferences|вашите нагодувања]] ќе се прикаже во полето „Од“ на пораката, со што примачот ќе може да ви одговори непосредно вам.",
"defemailsubject": "{{SITENAME}} — писмо од корисникот „$1“",
"usermaildisabled": "Корисничката е-пошта е оневозможена",
"usermaildisabledtext": "Не можете да испратите е-порака до дрги корисници на ова вики",
@@ -1694,20 +1718,20 @@
"emailccsubject": "Копија од вашата порака до $1: $2",
"emailsent": "Писмото е испратено",
"emailsenttext": "Писмото е испратено.",
- "emailuserfooter": "Оваа е-порака беше пратена од $1 до $2 со помош на функцијата Е-пошта на {{SITENAME}}.",
+ "emailuserfooter": "$1 го испрати писмово на $2 со помош на функцијата „{{int:emailpage}}“ на {{SITENAME}}.",
"usermessage-summary": "Оставете системска порака.",
"usermessage-editor": "Системски гласник",
"watchlist": "набљудувања",
"mywatchlist": "Набљудувања",
"watchlistfor2": "За $1 $2",
- "nowatchlist": "Немате ништо во списокот на набљудувања.",
- "watchlistanontext": "Најавете се за да можете да го прегледувате и уредувате списокот на набљудувања.",
+ "nowatchlist": "Немате ништо во набљудуваните.",
+ "watchlistanontext": "Најавете се за да можете да го прегледувате и уредувате набљудуваните.",
"watchnologin": "Не сте најавени",
- "addwatch": "Додај во списокот на набљудувања",
- "addedwatchtext": "Страницата „[[:$1]]“ е додадена во [[Special:Watchlist|списокот на набљудувања]].\nИдните промени на оваа страница и нејзината страница за разговор ќе се прикажуваат таму.",
+ "addwatch": "Додај во набљудувани",
+ "addedwatchtext": "Страницата „[[:$1]]“ е додадена во [[Special:Watchlist|набљудуваните]].\nИдните промени на оваа страница и нејзината страница за разговор ќе се прикажуваат таму.",
"addedwatchtext-short": "Страницата „$1“ е додадена во вашите набљудувања.",
- "removewatch": "Отстрани од списокот на набљудувања",
- "removedwatchtext": "Страницата „[[:$1]]“ е отстранета од [[Special:Watchlist|списокот на набљудувања]].",
+ "removewatch": "Отстрани набљудуваните",
+ "removedwatchtext": "Страницата „[[:$1]]“ е отстранета од [[Special:Watchlist|набљудуваните]].",
"removedwatchtext-short": "Страницата „$1“ е отстранета од вашите набљудувања.",
"watch": "Набљудувај",
"watchthispage": "Набљудувај ја страницава",
@@ -1719,11 +1743,11 @@
"wlheader-enotif": "Известувањето по е-пошта е вклучено.",
"wlheader-showupdated": "Страниците што се изменети од вашата последна посета се прикажани со '''задебелени''' букви",
"wlnote": "Подолу {{PLURAL:$1|е прикажана последната промена|се прикажани последните <strong>$1</strong> промени}} во {{PLURAL:$2|последниов час|последниве <strong>$2</strong> часа}}, заклучно со $3, $4 ч.",
- "wlshowlast": "Прикажи ги последните $1 часа, $2 дена, $3",
+ "wlshowlast": "Прикажи ги последните $1 часа, $2 дена,",
"watchlist-options": "Поставки за список на набљудувања",
"watching": "Набљудување...",
"unwatching": "Отстранувам од набљудувани...",
- "watcherrortext": "Се појави грешка при менувањето на вашите нагодувања списокот на набљудувања за „$1“.",
+ "watcherrortext": "Се појави грешка при менувањето на вашите нагодувања набљудуваните за „$1“.",
"enotif_reset": "Означи ги сите страници како посетени",
"enotif_impersonal_salutation": "Википедија корисник",
"enotif_subject_deleted": "Страницата $1 на {{SITENAME}} е избришана од {{gender:$2|$2}}",
@@ -1768,7 +1792,6 @@
"deleteprotected": "Не можете да ја избришете страницава бидејќи е заштитена.",
"deleting-backlinks-warning": "'''Предупредување:''' До страницата што сакате да ја избришете водат [[Special:WhatLinksHere/{{FULLPAGENAME}}|други страници]] или пак се превметнуваат во неа.",
"rollback": "Отповикај промени",
- "rollback_short": "Отповикај",
"rollbacklink": "отповикај",
"rollbacklinkcount": "отповикај $1 {{PLURAL:$1|уредување|уредувања}}",
"rollbacklinkcount-morethan": "отповикај повеќе од $1 {{PLURAL:$1|уредување|уредувања}}",
@@ -1878,6 +1901,7 @@
"namespace": "Именски простор:",
"invert": "Обратен избор",
"tooltip-invert": "Штиклирајте го полево за да ги скриете извршените измени во одбраниот именски простор (и поврзаниот именски простор, ако е штиклиран)",
+ "tooltip-whatlinkshere-invert": "Штиклирајте го кутивчево за да ги скриете врските од страниците во избраниот именски простор.",
"namespace_association": "Поврзан именски простор",
"tooltip-namespace_association": "Штиклирајте го полево за да го вклучите и именскиот простор за разговор (или наслов) поврзан со одбраниот именски простор",
"blanknamespace": "(Главен)",
@@ -1890,7 +1914,7 @@
"uctop": "(тековно)",
"month": "Од месец (и порано):",
"year": "Од година (и порано):",
- "sp-contributions-newbies": "Прикажи придонеси само на нови корисници",
+ "sp-contributions-newbies": "Прикажи само придонеси на нови корисници",
"sp-contributions-newbies-sub": "За нови кориснички сметки",
"sp-contributions-newbies-title": "Придонеси на нови корисници",
"sp-contributions-blocklog": "Дневник на блокирања",
@@ -1978,7 +2002,7 @@
"blocklist-params": "Параметри на блокот",
"blocklist-reason": "Причина",
"ipblocklist-submit": "Пребарај",
- "ipblocklist-localblock": "Локален блок",
+ "ipblocklist-localblock": "Месен блок",
"ipblocklist-otherblocks": "{{PLURAL:$1|друг блок|други блокови}}",
"infiniteblock": "бесконечно",
"expiringblock": "истекува на $1 во $2 ч.",
@@ -2018,7 +2042,7 @@
"ipb-otherblocks-header": "{{PLURAL:$1|Друго блокирање|Други блокирања}}",
"unblock-hideuser": "Не можете да го одблокирате корисников бидејќи неговото корисничко име е скриено.",
"ipb_cant_unblock": "Грешка: Блокирањето $1 не постои.\nМожеби веќе е одблокиран.",
- "ipb_blocked_as_range": "Грешка: IP-адресата $1 не е директно блокирана и не може да се деблокира.\nТаа е блокирана како дел од блокот адреси $2, кој не може да се деблокира.",
+ "ipb_blocked_as_range": "Грешка: IP-адресата $1 не е непосредно блокирана и не може да се одблокира.\nТаа е блокирана како дел од блокот адреси $2, кој не може да се одблокира.",
"ip_range_invalid": "Неважечки IP дијапазон на адреси.",
"ip_range_toolarge": "Не се дозволени опсежни блокирања поголеми од /$1.",
"proxyblocker": "Блокер на застапници (proxy)",
@@ -2123,7 +2147,7 @@
"allmessagesname": "Име",
"allmessagesdefault": "Текст по основно",
"allmessagescurrent": "Сегашен текст",
- "allmessagestext": "Ова е список на системските пораки расположиви за именскиот простор „МедијаВики“.\nОдете на [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Локализација на МедијаВики] и [//translatewiki.net translatewiki.net] ако сакате да придонесете кон општата локализација на МедијаВики.",
+ "allmessagestext": "Ова е список на системските пораки расположиви за именскиот простор „МедијаВики“.\nОдете на [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Превод на МедијаВики] и [//translatewiki.net translatewiki.net] ако сакате да придонесете кон општото преведување на МедијаВики.",
"allmessagesnotsupportedDB": "Оваа страница не може да се користи бидејќи '''$wgUseDatabaseMessages''' е исклучено.",
"allmessages-filter-legend": "Филтер",
"allmessages-filter": "Филтрирај по состојба на прилагодувањето:",
@@ -2143,14 +2167,15 @@
"thumbnail-temp-create": "Не можам да создадам привремена податотека на минијатурата",
"thumbnail-dest-create": "Не можам да ја зачувам минијатурата во одредницата",
"thumbnail_invalid_params": "Параметрите на минијатурата се погрешни",
+ "thumbnail_toobigimagearea": "Податотека со димензии поголеми од $1",
"thumbnail_dest_directory": "Целниот именик не може да се создаде",
"thumbnail_image-type": "Неподдржан тип на слика",
"thumbnail_gd-library": "Нецелосни поставки на графичката библиотека: недостасува функцијата $1",
"thumbnail_image-missing": "Изгледа дека податотеката недостасува: $1",
"thumbnail_image-failure-limit": "Направив премногу обиди ($1 или повеќе) за да ја прикажам минијатурава. Обидете се подоцна.",
"import": "Увезување на страници",
- "importinterwiki": "Меѓувики увоз",
- "import-interwiki-text": "Избери вики и наслов на страница за увоз.\nДатумите и имињата на уредниците ќе бидат зачувани.\nСите постапки при увозот од другото вики се заведуваат во [[Special:Log/import|дневникот на увезувања]].",
+ "importinterwiki": "Увези од друго вики",
+ "import-interwiki-text": "Избери вики и наслов на страница за увоз.\nДатумите и имињата на уредниците ќе бидат зачувани.\nСите увози од други викија се заведуваат во [[Special:Log/import|дневникот на увезувања]].",
"import-interwiki-sourcewiki": "Изворно вики:",
"import-interwiki-sourcepage": "Изворна страница:",
"import-interwiki-history": "Копирај ги сите постари верзии за оваа страница",
@@ -2170,7 +2195,7 @@
"importcantopen": "Не може да се отвори увезената податотека",
"importbadinterwiki": "Лоша меѓувики-врска",
"importsuccess": "Увезувањето е завршено!",
- "importnosources": "Нема определено меѓувики-извори за увоз и директните подигања на историја се оневозможени.",
+ "importnosources": "Нема викија од кои би се извршил увоз и непосредните подигања на историја се оневозможени.",
"importnofile": "Нема подигнато увозна податотека.",
"importuploaderrorsize": "Подигањето на увозната податотека не успеа.\nПодатотеката ја надминува допуштената големина.",
"importuploaderrorpartial": "Подигањето на увозна податотека не успеа.\nПодатотеката е само делумно подигната.",
@@ -2194,18 +2219,15 @@
"import-rootpage-nosubpage": "Именскиот простор „$1“ на основната страница не допушта потстраници.",
"importlogpage": "Дневник на увезувања",
"importlogpagetext": "Административно увезување на страници со историја на уредување од други викија.",
- "import-logentry-upload": "увезена [[$1]] со подигање на податотека",
"import-logentry-upload-detail": "{{PLURAL:$1|Увезена е една преработка|Увезени се $1 преработки}}",
- "import-logentry-interwiki": "трансвикифиран $1",
"import-logentry-interwiki-detail": "{{PLURAL:$1|Увезена е една преработка|Увезени се $1 преработки}} од $2",
"javascripttest": "Проба на JavaScript",
- "javascripttest-title": "Вршам $1 проби",
"javascripttest-pagetext-noframework": "Оваа страница е резервирана за вршење на проби со JavaScript.",
"javascripttest-pagetext-unknownframework": "Непозната рамка „$1“.",
+ "javascripttest-pagetext-unknownaction": "Непознато дејство „$1“.",
"javascripttest-pagetext-frameworks": "Изберете една од следниве рамки: $1",
"javascripttest-pagetext-skins": "Одберете со кое руво да ја направите пробата:",
"javascripttest-qunit-intro": "Вид. [$1 документација на испробувањето] на mediawiki.org.",
- "javascripttest-qunit-heading": "JavaScript-програм за испробување на МедијаВики „QUnit“",
"tooltip-pt-userpage": "Вашата корисничка страница",
"tooltip-pt-anonuserpage": "Корисничка страница за IP-адресата од која уредувате",
"tooltip-pt-mytalk": "Вашата страница за разговор",
@@ -2214,19 +2236,20 @@
"tooltip-pt-watchlist": "Список на страници кои сте избрале да ги набљудувате.",
"tooltip-pt-mycontris": "Список на ваши придонеси",
"tooltip-pt-login": "Ви препорачуваме да се најавите, иако тоа не е задолжително.",
- "tooltip-pt-logout": "Одјавете се",
+ "tooltip-pt-logout": "Одјавување",
+ "tooltip-pt-createaccount": "Ви препорачуваме да направите сметка и да се најавите, иако тоа не е задолжително",
"tooltip-ca-talk": "Разговор за страницата",
"tooltip-ca-edit": "Можете да ја уредите оваа страница. Ве молиме користете го копчето за преглед пред зачувување.",
"tooltip-ca-addsection": "Започни нов пасус",
"tooltip-ca-viewsource": "Оваа страница е заштитена. Можете да го видите изворниот код.",
"tooltip-ca-history": "Претходни верзии на оваа страница.",
- "tooltip-ca-protect": "Заштитете ја оваа страница",
+ "tooltip-ca-protect": "Заштити ја страницава",
"tooltip-ca-unprotect": "Измени заштита страницава",
- "tooltip-ca-delete": "Избриши ја оваа страница",
+ "tooltip-ca-delete": "Избриши ја страницава",
"tooltip-ca-undelete": "Обнови ги уредувањата направени на оваа страница пред да биде избришана",
- "tooltip-ca-move": "Премести ја оваа страница",
- "tooltip-ca-watch": "Додај ја страницава во списокот на набљудувања",
- "tooltip-ca-unwatch": "Отстрани ја страницава од списокот на набљудувања",
+ "tooltip-ca-move": "Премести ја страницава",
+ "tooltip-ca-watch": "Додај ја страницава во набљудуваните",
+ "tooltip-ca-unwatch": "Отстрани ја страницава од набљудуваните",
"tooltip-search": "Пребарај низ {{SITENAME}}",
"tooltip-search-go": "Оди на страница со ова име доколку постои",
"tooltip-search-fulltext": "Пребарај го овој текст низ странците",
@@ -2241,12 +2264,13 @@
"tooltip-t-whatlinkshere": "Список на сите вики-страници што водат овде",
"tooltip-t-recentchangeslinked": "Скорешни промени на страници со врски на оваа страница",
"tooltip-feed-rss": "RSS емитување за оваа страница",
- "tooltip-feed-atom": "Atom емитување за оваа страница",
+ "tooltip-feed-atom": "Атом-емитување за оваа страница",
"tooltip-t-contributions": "Список на придонеси на овој корисник",
"tooltip-t-emailuser": "Испрати е-пошта на овој корисник",
+ "tooltip-t-info": "Повеќе информаици за страницава",
"tooltip-t-upload": "Подигни податотеки",
"tooltip-t-specialpages": "Список на сите службени страници",
- "tooltip-t-print": "Верзија за печатење на оваа страница",
+ "tooltip-t-print": "Верзија на страницава наменета за печатење",
"tooltip-t-permalink": "Постојана врска до оваа верзија на страницата",
"tooltip-ca-nstab-main": "Преглед на содржината",
"tooltip-ca-nstab-user": "Преглед на корисничката страница",
@@ -2263,7 +2287,7 @@
"tooltip-preview": "Преглед на промените - ве молиме користете го ова пред зачувување!",
"tooltip-diff": "Покажи кои промени ги направи во текстот.",
"tooltip-compareselectedversions": "Видете ја разликата помеѓу двете избрани верзии на оваа страница.",
- "tooltip-watch": "Додај ја страницава во списокот на набљудувања",
+ "tooltip-watch": "Додај ја страницава во набљудуваните",
"tooltip-watchlistedit-normal-submit": "Отстрани наслови",
"tooltip-watchlistedit-raw-submit": "Поднови го списокот",
"tooltip-recreate": "Повторно создај ја страницата иако е избришана",
@@ -2314,14 +2338,13 @@
"pageinfo-header-properties": "Својства на страницата",
"pageinfo-display-title": "Наслов за приказ",
"pageinfo-default-sort": "Основен подредбен клуч",
- "pageinfo-length": "Должина на страницата (во бајти)",
+ "pageinfo-length": "Големина на страницата (во бајти)",
"pageinfo-article-id": "Назнака на страницата",
"pageinfo-language": "Јазик на содржината на страницата",
"pageinfo-content-model": "Модел на содржината на страницата",
"pageinfo-robot-policy": "Индексирање со роботи",
"pageinfo-robot-index": "Дозволено",
"pageinfo-robot-noindex": "Недозволено",
- "pageinfo-views": "Број на посети",
"pageinfo-watchers": "Број на набљудувачи",
"pageinfo-few-watchers": "Помалку од $1 {{PLURAL:$1|набљудувач|набљудувачи}}",
"pageinfo-redirects-name": "Пренасочувања кон страницата",
@@ -2383,13 +2406,13 @@
"file-info": "големина: $1, MIME-тип: $2",
"file-info-size": "$1 × $2 пиксели, големина: $3, MIME-тип: $4",
"file-info-size-pages": "$1 × $2 пиксели, големина: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страници}}",
- "file-nohires": "Нема верзија со поголема разложеност.",
+ "file-nohires": "Нема верзија со поголема разделеност.",
"svg-long-desc": "SVG податотека, номинално $1 × $2 пиксели, големина: $3",
"svg-long-desc-animated": "Анимирана SVG-податотека, номинално: $1 × $2 пиксели, големина: $3",
"svg-long-error": "Неважечка SVG-податотека: $1",
"show-big-image": "Изворна податотека",
"show-big-image-preview": "Големина на овој преглед: $1.",
- "show-big-image-other": "{{PLURAL:$2|Друга разложеност|Други разложености}}: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Друга разделеност|Други разделености}}: $1.",
"show-big-image-size": "$1 × $2 пиксели",
"file-info-gif-looped": "кружно",
"file-info-gif-frames": "$1 {{PLURAL:$1|кадар|кадри}}",
@@ -2397,7 +2420,7 @@
"file-info-png-repeat": "пуштено {{PLURAL:$1|еднаш|$1 пати}}",
"file-info-png-frames": "$1 {{PLURAL:$1|кадар|кадри}}",
"file-no-thumb-animation": "'''Напомена: Поради технички ограничувања, минијатурите на оваа податотека нема да се анимираат.'''",
- "file-no-thumb-animation-gif": "'''Напомена: Поради технички ограничувања, минијатурите на GIF-слики со висока разложеност како оваа нема да се анимираат.'''",
+ "file-no-thumb-animation-gif": "'''Напомена: Поради технички ограничувања, минијатурите на GIF-слики со висока разделеност како оваа нема да се анимираат.'''",
"newimages": "Галерија на нови податотеки",
"imagelisttext": "Следи список на '''$1''' {{PLURAL:$1|податотека|податотеки}} подредени $2.",
"newimages-summary": "Оваа службена страница ги покажува скоро подигнатите податотеки.",
@@ -2477,8 +2500,8 @@
"exif-planarconfiguration": "Распоред на податоците",
"exif-ycbcrsubsampling": "Однос на величината на Y спрема C",
"exif-ycbcrpositioning": "Положби на Y и C",
- "exif-xresolution": "Хоризонтална разложеност",
- "exif-yresolution": "Вертикална разложеност",
+ "exif-xresolution": "Хоризонтална разделеност",
+ "exif-yresolution": "Вертикална разделеност",
"exif-stripoffsets": "Положба на податоците",
"exif-rowsperstrip": "Број на редови по блок",
"exif-stripbytecounts": "Бајти по набиен блок",
@@ -2529,9 +2552,9 @@
"exif-focallength-format": "$1 мм",
"exif-subjectarea": "Положба и површина на објектот",
"exif-flashenergy": "Енергија на блицот",
- "exif-focalplanexresolution": "Разложеност на жаришната рамнина X",
- "exif-focalplaneyresolution": "Разложеност на жаришната рамнина Y",
- "exif-focalplaneresolutionunit": "Единица за разложеност на жаришната рамнина",
+ "exif-focalplanexresolution": "Разделеност на жаришната рамнина X",
+ "exif-focalplaneyresolution": "Разделеност на жаришната рамнина Y",
+ "exif-focalplaneresolutionunit": "Единица за разделеност на жаришната рамнина",
"exif-subjectlocation": "Положба на субјектот",
"exif-exposureindex": "Показател на изложувањето",
"exif-sensingmethod": "Метод на сензорот",
@@ -2624,7 +2647,7 @@
"exif-nickname": "Неформален назив на сликата",
"exif-rating": "Оценка (од 5)",
"exif-rightscertificate": "Уверение за раководство со права",
- "exif-copyrighted": "Авторски правен статус",
+ "exif-copyrighted": "Авторскоправен статус:",
"exif-copyrightowner": "Носител на авторските права",
"exif-usageterms": "Услови на употреба",
"exif-webstatement": "Изјава за авторското право",
@@ -2731,7 +2754,7 @@
"exif-sensingmethod-7": "Тробоен линеарен сензор",
"exif-sensingmethod-8": "Бојно-последователен линеарен сензор",
"exif-filesource-3": "Дигитален фотоапарат",
- "exif-scenetype-1": "Директно фотографирана слика",
+ "exif-scenetype-1": "Непосредно фотографирана слика",
"exif-customrendered-0": "Нормален процес",
"exif-customrendered-1": "Нестандарден процес",
"exif-exposuremode-0": "Автоматско изложување",
@@ -2820,7 +2843,6 @@
"exif-urgency-low": "Мала ($1)",
"exif-urgency-high": "Голема ($1)",
"exif-urgency-other": "Кориснички-зададен приоритет ($1)",
- "watchlistall2": "сите",
"namespacesall": "сите",
"monthsall": "сите",
"confirmemail": "Потврда на е-поштенска адреса",
@@ -2854,9 +2876,9 @@
"confirm-purge-top": "Да го исчистам меѓускладот на страницава?",
"confirm-purge-bottom": "Со оваа операција се чисти опслужувачкиот меѓусклад и се прикажува најновата верзија.",
"confirm-watch-button": "ОК",
- "confirm-watch-top": "Да ја додадам страницава во списокот на набљудувања?",
+ "confirm-watch-top": "Да ја додадам страницава во набљудуваните?",
"confirm-unwatch-button": "ОК",
- "confirm-unwatch-top": "Да ја отстранам страницава од списокот на набљудувања?",
+ "confirm-unwatch-top": "Да ја отстранам страницава од набљудуваните?",
"percent": "$1&#160;%",
"quotation-marks": "„$1“",
"imgmultipageprev": "&larr; претходна страница",
@@ -2901,22 +2923,22 @@
"bitrate-yottabits": "$1 Јб/с",
"lag-warn-normal": "Промените во {{PLURAL:$1|последната секунда|последните $1 секунди}} може да не бидат прикажани во списокот.",
"lag-warn-high": "Поради преоптовареност на податочниот опслужувач, промените понови од {{PLURAL:$1|една секунда|$1 секунди}}\nможе да не бидат прикажани во списокот.",
- "watchlistedit-normal-title": "Уредување на списокот на набљудувања",
+ "watchlistedit-normal-title": "Уредување на набљудуваните",
"watchlistedit-normal-legend": "Бришење на наслови од список на набљудување",
"watchlistedit-normal-explain": "Насловите во вашиот список на набљудувања се прикажани подолу.\nЗа да избришете наслов, штиклирајте го квадратчето лево од насловот, и стиснете на „{{int:Watchlistedit-normal-submit}}“.\nМожете и да го [[Special:EditWatchlist/raw|уредувате сировиот список]].",
"watchlistedit-normal-submit": "Избриши",
"watchlistedit-normal-done": "{{PLURAL:$1|1 наслов беше|$1 наслови беа}} избришани од вашиот список на набљудувања:",
- "watchlistedit-raw-title": "Напредно уредување на списокот на набљудувања",
- "watchlistedit-raw-legend": "Уредување на списокот на набљудувања",
+ "watchlistedit-raw-title": "Уреди сирови набљудувани",
+ "watchlistedit-raw-legend": "Уреди сирови набљудувани",
"watchlistedit-raw-explain": "Насловите во вашиот список на набљудувања се прикажани подолу, и можат да се уредуваат со додавање или бришење на ставки од списокот; \nеден наслов по ред. \nКога ќе завршите, стиснете на „{{int:Watchlistedit-raw-submit}}“.\nМожете да го [[Special:EditWatchlist|употребите обичниот уредник]].",
"watchlistedit-raw-titles": "Наслови:",
"watchlistedit-raw-submit": "Поднови го списокот",
"watchlistedit-raw-done": "Вашиот список на набљудувања е подновен.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 наслов беше|$1 наслови беа}} додадени:",
"watchlistedit-raw-removed": "{{PLURAL:$1|Избришан е еден наслов|Избришани се $1 наслови}}:",
- "watchlistedit-clear-title": "Исчистен списокот на набљудувања",
+ "watchlistedit-clear-title": "Исчистени набљудуваните",
"watchlistedit-clear-legend": "Исчисти набљудувани",
- "watchlistedit-clear-explain": "Сите наслови ќе бидат отстранети од списокот на набљудувања",
+ "watchlistedit-clear-explain": "Сите наслови ќе бидат отстранети од набљудуваните",
"watchlistedit-clear-titles": "Наслови:",
"watchlistedit-clear-submit": "Исчисти ги набљудуваните (Ова е трајно!)",
"watchlistedit-clear-done": "Вашиот список на набљудувања е исчистен.",
@@ -2925,7 +2947,7 @@
"watchlisttools-clear": "Исчисти ги набљудуваните",
"watchlisttools-view": "Преглед на релевантни промени",
"watchlisttools-edit": "Погледај и уреди список на набљудувања",
- "watchlisttools-raw": "Напредно уредување на списокот на набљудувања",
+ "watchlisttools-raw": "Уреди сирови набљудувани",
"iranian-calendar-m1": "Фарвардин",
"iranian-calendar-m2": "Ордибехешт",
"iranian-calendar-m3": "Хордад",
@@ -2950,38 +2972,38 @@
"hijri-calendar-m10": "Шавал",
"hijri-calendar-m11": "Ду ел-Кида",
"hijri-calendar-m12": "Ду ел-Хиџа",
- "hebrew-calendar-m1": "Тишри",
- "hebrew-calendar-m2": "Хешван",
- "hebrew-calendar-m3": "Кислев",
- "hebrew-calendar-m4": "Тебет",
- "hebrew-calendar-m5": "Шебат",
- "hebrew-calendar-m6": "Адар",
- "hebrew-calendar-m6a": "Адар I",
- "hebrew-calendar-m6b": "Адар II",
- "hebrew-calendar-m7": "Нисан",
- "hebrew-calendar-m8": "Ијар",
- "hebrew-calendar-m9": "Сиван",
- "hebrew-calendar-m10": "Тамуз",
- "hebrew-calendar-m11": "Ав",
- "hebrew-calendar-m12": "Елул",
- "hebrew-calendar-m1-gen": "Тишри",
- "hebrew-calendar-m2-gen": "Хешван",
- "hebrew-calendar-m3-gen": "Кислев",
- "hebrew-calendar-m4-gen": "Тебет",
- "hebrew-calendar-m5-gen": "Шебат",
- "hebrew-calendar-m6-gen": "Адар",
- "hebrew-calendar-m6a-gen": "Адар I",
- "hebrew-calendar-m6b-gen": "Адар II",
- "hebrew-calendar-m7-gen": "Нисан",
- "hebrew-calendar-m8-gen": "Ијар",
- "hebrew-calendar-m9-gen": "Сиван",
- "hebrew-calendar-m10-gen": "Тамуз",
- "hebrew-calendar-m11-gen": "Ав",
- "hebrew-calendar-m12-gen": "Елул",
+ "hebrew-calendar-m1": "тишри",
+ "hebrew-calendar-m2": "хешван",
+ "hebrew-calendar-m3": "кислев",
+ "hebrew-calendar-m4": "тевет",
+ "hebrew-calendar-m5": "шват",
+ "hebrew-calendar-m6": "адар",
+ "hebrew-calendar-m6a": "адар I",
+ "hebrew-calendar-m6b": "адар II",
+ "hebrew-calendar-m7": "нисан",
+ "hebrew-calendar-m8": "ијар",
+ "hebrew-calendar-m9": "сиван",
+ "hebrew-calendar-m10": "тамуз",
+ "hebrew-calendar-m11": "ав",
+ "hebrew-calendar-m12": "елул",
+ "hebrew-calendar-m1-gen": "тишри",
+ "hebrew-calendar-m2-gen": "хешван",
+ "hebrew-calendar-m3-gen": "кислев",
+ "hebrew-calendar-m4-gen": "тевет",
+ "hebrew-calendar-m5-gen": "шват",
+ "hebrew-calendar-m6-gen": "адар",
+ "hebrew-calendar-m6a-gen": "адар I",
+ "hebrew-calendar-m6b-gen": "адар II",
+ "hebrew-calendar-m7-gen": "нисан",
+ "hebrew-calendar-m8-gen": "ијар",
+ "hebrew-calendar-m9-gen": "сиван",
+ "hebrew-calendar-m10-gen": "тамуз",
+ "hebrew-calendar-m11-gen": "ав",
+ "hebrew-calendar-m12-gen": "елул",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|разговор]])",
- "unknown_extension_tag": "Непозната ознака на додатокот „$1“",
"duplicate-defaultsort": "Предупредување: Основниот клуч за подредување „$2“ го поништува претходниот основен клуч за подредување „$1“.",
"duplicate-displaytitle": "<strong>Предупредување:</strong> Приказниот наслов „$2“ го заменува претходнито приказен наслов „$1“.",
+ "invalid-indicator-name": "<strong>Грешка:</strong> Атрибутот <code>name</code> што го покажува статусот на страницата не може да биде празен.",
"version": "Верзија",
"version-extensions": "Воспоставени додатоци",
"version-skins": "Воспоставени рува",
@@ -2989,7 +3011,7 @@
"version-parserhooks": "Расчленувачки куки",
"version-variables": "Променливи",
"version-antispam": "Спречување на спам",
- "version-api": "Прилози",
+ "version-api": "Извршници",
"version-other": "Друго",
"version-mediahandlers": "Ракувачи со мултимедијални содржини",
"version-hooks": "Куки",
@@ -2997,7 +3019,7 @@
"version-parser-function-hooks": "Куки на расчленувачки функции",
"version-hook-name": "Име на кука",
"version-hook-subscribedby": "Претплатено од",
- "version-version": "(Верзија $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[нема име]",
"version-svn-revision": "прер. $1",
"version-license": "Лиценца на МедијаВики",
@@ -3025,6 +3047,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath?uselang=mk Статија]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath?uselang=mk Скрипта]",
+ "version-libraries": "Востановени библиотеки",
+ "version-libraries-library": "Библиотека",
+ "version-libraries-version": "Верзија",
"redirect": "Пренасочување по податотеки, корисник или назнака на преработка",
"redirect-legend": "Пренасочување кон податотека или страница",
"redirect-summary": "Оваа службена страница пренасочува кон податотека (се задава името), страница (се задава назнаката на преработката или страницата) или корисничка странца (се задава бројчената назнака на корисникот). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] или [[{{#Special:Redirect}}/user/101]].",
@@ -3050,7 +3075,7 @@
"specialpages-note": "* Нормални службени страници.\n* <span class=\"mw-specialpagerestricted\">Ограничени службени страници.</span>",
"specialpages-group-maintenance": "Извештаи за одржување",
"specialpages-group-other": "Други службени страници",
- "specialpages-group-login": "Најава / регистрација",
+ "specialpages-group-login": "Најава / направи сметка",
"specialpages-group-changes": "Скорешни промени и дневници",
"specialpages-group-media": "Извештаи за мултимедијални содржини и подигања",
"specialpages-group-users": "Корнисници и кориснички права",
@@ -3060,6 +3085,7 @@
"specialpages-group-wiki": "Податоци и алатки",
"specialpages-group-redirects": "Пренасочување на службени страници",
"specialpages-group-spam": "Алатки против спам",
+ "specialpages-group-developer": "Развојни алатки",
"blankpage": "Празна страница",
"intentionallyblankpage": "Оваа страница намерно е оставена празна",
"external_image_whitelist": " #Остави го овој ред таков каков што е<pre>\n#Додавај фрагменти на регуларни изрази (само делот кој се наоѓа помеѓу //) подолу\n#Ова ќе биде споредено со URL-та на надворешните (hotlinked) слики\n#Оние кои одговараат ќе бидат прикажани како слики, до другите ќе биде прикажана само врската\n#Се прави разлика помеѓу мали и големи букви\n\n#Стави ги сите фрагменти на регуларни изрази над овој ред. Оставете го овој ред таков каков што е</pre>",
@@ -3072,12 +3098,54 @@
"tags-tag": "Име на ознака",
"tags-display-header": "Изглед во списоците на промени",
"tags-description-header": "Целосен опис на значењето",
+ "tags-source-header": "Извор",
"tags-active-header": "Активно?",
"tags-hitcount-header": "Означени промени",
+ "tags-actions-header": "Дејства",
"tags-active-yes": "Да",
"tags-active-no": "Не",
+ "tags-source-extension": "Одредени од додаток",
+ "tags-source-manual": "Применети рачно од корисници и ботови",
+ "tags-source-none": "Вон употреба",
"tags-edit": "уреди",
+ "tags-delete": "избриши",
+ "tags-activate": "активирај",
+ "tags-deactivate": "деактивирај",
"tags-hitcount": "$1 {{PLURAL:$1|промена|промени}}",
+ "tags-manage-no-permission": "Немате дозвола за раководење со ознаки за промени.",
+ "tags-create-heading": "Создај нова ознака",
+ "tags-create-explanation": "Новосоздадните ознаки по основно ќе се стават на располагање за употреба од корисници и ботови.",
+ "tags-create-tag-name": "Име на ознаката:",
+ "tags-create-reason": "Причина:",
+ "tags-create-submit": "Создај",
+ "tags-create-no-name": "Мора да укажете име на ознаката.",
+ "tags-create-invalid-chars": "Ознаката не смее да содржи запирки (<code>,</code>) и надесни коси црти (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Имињата на ознаките не смеат да содржат знаци што не може да се користат во наслови на страници.",
+ "tags-create-already-exists": "Ознаката „$1“ веќе постои.",
+ "tags-create-warnings-above": "Во обидот да ја создадам ознаката „$1“ наидов на {{PLURAL:$2|следново предупредување|следниве предупредувања}}:",
+ "tags-create-warnings-below": "Дали сакате да продолжите со создавањето на ознаката?",
+ "tags-delete-title": "Избриши ознака",
+ "tags-delete-explanation-initial": "На пат сте да ја избришете ознаката „$1“ од базата.",
+ "tags-delete-explanation-in-use": "Ќе биде отстранета од {{PLURAL:$2|една преработка или дневнички запис врз која|сите $2 преработки и/или дневнички записи врз кои}} е применета.",
+ "tags-delete-explanation-warning": "Ова дејство е <strong>неповратно</strong> и <strong>не може да се отповика</strong>, дури ни од администраторите на базата. Затоа, осигурајте се дека ова навистина е ознаката што сакате да ја избришете.",
+ "tags-delete-explanation-active": "<strong>Ознаката „$1“ сè уште е активна и во иднина ќе продолжи да се применува.</strong> За да го запрете ова, одете на местото/тата на кои ѝ е зададено да се применува и оневозможете ја таму.",
+ "tags-delete-reason": "Причина:",
+ "tags-delete-submit": "Неповратно избриши ја ознакава",
+ "tags-delete-not-allowed": "Ознаките зададени од додаток не можат да се бришат освен ако тоа не е изрично дозволено од додатокот.",
+ "tags-delete-not-found": "Ознаката „$1“ не постои.",
+ "tags-delete-too-many-uses": "Ознаката „$1“ се применува во повеќе од {{PLURAL:$2|една преработка|$2 преработки}}, што значи дека не може да се избрише.",
+ "tags-delete-warnings-after-delete": "Ознаката „$1“ е успешно избришана, но наидов на {{PLURAL:$2|следново предупредување|следниве предупредувања}}:",
+ "tags-activate-title": "Активирај ознака",
+ "tags-activate-question": "На пат сте да ја активирате ознаката „$1“.",
+ "tags-activate-reason": "Причина:",
+ "tags-activate-not-allowed": "Не можам да ја активирам ознаката „$1“.",
+ "tags-activate-not-found": "Ознаката „$1“ не постои.",
+ "tags-activate-submit": "Активирај",
+ "tags-deactivate-title": "Деактивирај ознака",
+ "tags-deactivate-question": "На пат сте да ја деактивирате ознаката „$1“.",
+ "tags-deactivate-reason": "Причина:",
+ "tags-deactivate-not-allowed": "Не можам да ја деактивирам ознаката „$1“.",
+ "tags-deactivate-submit": "Декативирај",
"comparepages": "Спореди страници",
"compare-page1": "Страница 1",
"compare-page2": "Страница 2",
@@ -3089,8 +3157,8 @@
"compare-revision-not-exists": "Наведената преработка не постои.",
"dberr-problems": "Жалиме! Ова мрежно место се соочува со технички потешкотии.",
"dberr-again": "Почекајте неколку минути и обидете се повторно.",
- "dberr-info": "(Не може да се добие опслужувачот на базата на податоци: $1)",
- "dberr-info-hidden": "(Не може да се добие опслужувачот на базата на податоци)",
+ "dberr-info": "(Не можам да пристапам кон базата: $1)",
+ "dberr-info-hidden": "(Не можам да пристапам кон базата)",
"dberr-usegoogle": "Во меѓувреме можете да се обидете да пребарувате со Google.",
"dberr-outofdate": "Да напоменеме дека нивните индекси на нашата содржина можат да бидат застарени.",
"dberr-cachederror": "Следнава содржина е меѓускладиран примерок на бараната страница, кој може да е застарен.",
@@ -3131,6 +3199,14 @@
"revdelete-uname-unhid": "корисничкото име е скриено",
"revdelete-restricted": "применети ограничувања на администратори",
"revdelete-unrestricted": "отстранети ограничувања за систем оператори",
+ "logentry-block-block": "$1 {{GENDER:$2|го блокираше}} корисникот {{GENDER:$4|$3}} со истек $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|го блокираше}} корисникот {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|го измени}} блокот на {{GENDER:$4|$3}} со истек $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|го блокираше}} {{GENDER:$4|$3}} со истек $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|го измени}} блокот на {{GENDER:$4|$3}} со истек $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|ја увезе}} $3 со податотечно подигање",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|ја увезе}} $3 од друго вики",
+ "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 презапишувајќи врз пренасочување",
@@ -3148,20 +3224,37 @@
"logentry-upload-upload": "$1 {{GENDER:$2|ја подигна}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|подигна}} нова верзија на $3",
"logentry-upload-revert": "$1 {{GENDER:$2|ја подигна}} $3",
+ "log-name-managetags": "Дневник на раководство со ознаки",
+ "log-description-managetags": "На страницава се наведени раководните задачи што се однесуваат на [[Special:Tags|ознаки]]. Дневникот содржи само дејства извршени рачно од администратор; ознаките можат да се создаваат и бришат од википрограмот без да се заведуваат во дневников.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|ја создаде}} ознаката „$4“",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|ја избриша}} ознаката „$4“ (отстранета од {{PLURAL:$5|една преработка или дневнички запис|$5 преработки и/или дневнички записи}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|ја активираше}} ознаката „$4“ за употреба од корисници и ботови",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|ја деактивираше}} ознаката „$4“ за употреба од корисници и ботови",
"rightsnone": "(нема)",
+ "revdelete-summary": "опис на уредување",
+ "feedback-adding": "Го додавам искажаното мислење во страницата...",
+ "feedback-back": "Назад",
+ "feedback-bugcheck": "Одлично! Само проверете да не е една од [$1 веќе познатите грешки].",
+ "feedback-bugnew": "Проверив. Пријави ја како нова грешка.",
"feedback-bugornote": "Ако сте спремни подробно да го опишете техничкиот проблем, тогаш [$1 пријавете грешка]. \nВо спротивно, послужете се со едноставниот образец подолу. Вашиот коментар ќе стои на страницата „[$3 $2]“, заедно со корисничкото име и прелистувачот што го користите.",
- "feedback-subject": "Наслов:",
- "feedback-message": "Порака:",
"feedback-cancel": "Откажи",
- "feedback-submit": "Поднеси мислење",
- "feedback-adding": "Го додавам искажаното мислење во страницата...",
- "feedback-error1": "Грешка: Непрепознаен резултат од прилогот (API)",
+ "feedback-close": "Готово",
+ "feedback-external-bug-report-button": "Поднеси техничка задача",
+ "feedback-dialog-title": "Поднеси мислење",
+ "feedback-dialog-intro": "Послужете се со едноставниот образец подолу за да го поднесете вашето мислење. Коментарот ќе ви биде додаден на страницата „$1“, заедно со вашето корисничко име.",
+ "feedback-error-title": "Грешка",
+ "feedback-error1": "Грешка: Непрепознаен резултат од извршникот",
"feedback-error2": "Грешка: Уредувањето не успеа",
- "feedback-error3": "Грешка: Прилогот (API) не одговара",
+ "feedback-error3": "Грешка: Извршникот не одговара",
+ "feedback-error4": "Грешка: Не можам да објавам под дадениот наслов",
+ "feedback-message": "Порака:",
+ "feedback-subject": "Наслов:",
+ "feedback-submit": "Поднеси",
+ "feedback-terms": "Разбирам дека моите информации за кориснички вршител вклучуваат податоци за точната верзија на прелистувачот и оператиниот систем и дека истите ќе бидат јавно прикажани заедно со моето мислење.",
+ "feedback-termsofuse": "Се согласувам да давам мислење во склад со Условите на употреба.",
"feedback-thanks": "Благодариме! Вашиот одѕив е објавен на страницата „[$2 $1]“.",
- "feedback-close": "Готово",
- "feedback-bugcheck": "Одлично! Само проверете да не е една од [$1 веќе познатите грешки].",
- "feedback-bugnew": "Проверив. Пријави ја како нова грешка.",
+ "feedback-thanks-title": "Ви благодариме!",
+ "feedback-useragent": "Кориснички вршител:",
"searchsuggest-search": "Пребарување",
"searchsuggest-containing": "содржи...",
"api-error-badaccess-groups": "Не ви е дозволено да подигате податотеки на ова вики.",
@@ -3197,6 +3290,13 @@
"api-error-stashfailed": "Внатрешна грешка: Опслужувачот не успеа да ја складира привремената податотека.",
"api-error-publishfailed": "Внатрешна грешка: Опслужувачот не успеа да ја објави привремената податотека.",
"api-error-stasherror": "Се јави грешка при подигањето на податотеката во складот.",
+ "api-error-stashedfilenotfound": "Не ја најдов наплстената податотека при обидот да ја подигнам од пластот.",
+ "api-error-stashpathinvalid": "Патеката кајшто требаше да се најде складираната податотека е неважечка.",
+ "api-error-stashfilestorage": "Се јави грешка при ставањето на податотеката во складот.",
+ "api-error-stashzerolength": "Опслужувачот не можеше да ја складира податотеката бидејќи има нулта должина.",
+ "api-error-stashnotloggedin": "Мора да се најавени за да зачувувате податотеки во складот на подигнати.",
+ "api-error-stashwrongowner": "Податотеката во складот до која сакате да дојдете не ви припаѓа вам.",
+ "api-error-stashnosuchfilekey": "Клучот на податотеката во складот до кој сакате да дојдете не постои.",
"api-error-timeout": "Опслужувачот не одговори во очекуваното време.",
"api-error-unclassified": "Се појави непозната грешка.",
"api-error-unknown-code": "Непозната грешка: „$1“",
@@ -3241,6 +3341,8 @@
"expand_templates_generate_xml": "Прикажи XML-дрво на расчленувањето",
"expand_templates_generate_rawhtml": "Прикажувај сиров HTML",
"expand_templates_preview": "Преглед",
+ "expand_templates_preview_fail_html": "<em>Бидејќи {{SITENAME}} има овозможено сиров HTML и се јави губиток на седнички податоци, прегледот е скриен како мерка на претпазливост против напади со JavaScript.</em>\n\n<strong>Ако ова е е легитимен обид за преглед, тогаш обидете се повторно.</strong>\nАко не работи и тогаш, [[Special:UserLogout|одјавете се]] и повторно најавете се.",
+ "expand_templates_preview_fail_html_anon": "<em>Бидејќи {{SITENAME}} има овозможено сиров HTML, а вие не сте најавени, прегледот е скриен како мерка на претпазливост против напади со JavaScript.</em>\n\n<strong>Ако ова е е легитимен обид за преглед, тогаш обидете се повторно.</strong>\nАко не работи и тогаш, [[Special:UserLogout|одјавете се]] и повторно најавете се.",
"pagelanguage": "Изборник за јазик на страницата",
"pagelang-name": "Страница",
"pagelang-language": "Јазик",
@@ -3251,8 +3353,8 @@
"log-name-pagelang": "Дневник на менување на јазикот",
"log-description-pagelang": "Ова е дневник на менувања на јазикот на страницата.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|го смени}} јазикот на страницата $3 од $4 на $5.",
- "default-skin-not-found": "За жал, основното руво на вашето вики оопределено во <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code> не е достапно.\n\nВашата воспоставка ги опфаќа следниве рува. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n* Клонирајќи едно од складиштата <code>mediawiki/skins/*</code> преку git во папката <code dir=\"ltr\">skins/</code> на вашата воспоставка на МедијаВики.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 1.24 и поновите верзии повеќе не ги вклучуваат воспоставените рува автоматски (погл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Прирачник: Самооткривање на рува]). Можете да ги прекопирате следниве редови во <code>LocalSettings.php</code> за да ги вклучите сите моментално воспоставени рува:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ако штотуку го имате изменето <code>LocalSettings.php</code>:\n: Проверете дали правилно се напишани називите на рувата.",
- "default-skin-not-found-no-skins": "За жал, основното руво на вашето вики, определено во <code>$wgDefaultSkin</code> како <code>$1</code>, не е достапно.\n\nНемате воспоставено ниедно руво.\n\n; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code dir=\"ltr\">skins/</code> од него.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.",
+ "default-skin-not-found": "За жал, основното руво на вашето вики оопределено во <code dir=\"ltr\">$wgDefaultSkin</code> како <code>$1</code> не е достапно.\n\nВашата воспоставка ги опфаќа следниве рува. Погледајте [https://www.mediawiki.org/wiki/Manual:Skin_configuration Прирачник: Поставување на рува] за да дознаете како да ги вклучите и како да го изберете основното.\n\n$2\n\n; Ако штотуку го имате воспоставено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code>skins/</code> од него.\n:* Преземање на tarball-и за рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n* Клонирајќи едно од складиштата <code>mediawiki/skins/*</code> преку git во папката <code dir=\"ltr\">skins/</code> на вашата воспоставка на МедијаВики.\n: Ова не би требало да прави пречки на вашето git-складиште ако сте програмер на МедијаВики.\n\n; Ако штотуку го имате надградено МедијаВики:\n: МедијаВики 1.24 и поновите верзии повеќе не ги вклучуваат воспоставените рува автоматски (погл. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Прирачник: Самооткривање на рува]). Можете да ги прекопирате следниве редови во <code>LocalSettings.php</code> за да ги вклучите сите моментално воспоставени рува:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ако штотуку го имате изменето <code>LocalSettings.php</code>:\n: Проверете дали правилно се напишани називите на рувата.",
+ "default-skin-not-found-no-skins": "За жал, основното руво на вашето вики, определено во <code>$wgDefaultSkin</code> како <code>$1</code>, не е достапно.\n\nНемате воспоставено ниедно руво.\n\n; Ако штотуку го имате воспоставено или надградено МедијаВики:\n: Веројатно сте го воспоставиле од git, или пак непосредно од изворниот код на некој друг начин. Ова е очекувано. МедијаВики 1.24 и поновите верзии немаат рува во главното складиште. Пробајте да воспоставите некои рува од [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's именикот на рува] вака:\n:* Со преземање на [https://www.mediawiki.org/wiki/Download tarball-воспоставувачот], кој самиот содржи неколку рува и додатоци. Можете да ја прекопирате папката <code dir=\"ltr\">skins/</code> од него.\n:* Преземање на tarball-и за поединечни рува од [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n: Ова не би требало да прави пречки на вашето 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 ('''исклучено''')",
"mediastatistics": "Статистики за слики и снимки",
@@ -3271,5 +3373,38 @@
"mediastatistics-header-office": "Биротехнички",
"mediastatistics-header-text": "Текстуални",
"mediastatistics-header-executable": "Извршни",
- "mediastatistics-header-archive": "Збиени формати"
+ "mediastatistics-header-archive": "Збиени формати",
+ "json-warn-trailing-comma": "{{PLURAL:$1|Отстранета е една завршна запирка|Отстранети се $1 завршни запирки}} од JSON",
+ "json-error-unknown": "Се јави проблем со JSON. Грешка: $1.",
+ "json-error-depth": "Надмината е максималната дозволена длабочина на пластот",
+ "json-error-state-mismatch": "Неважечки или погрешно срочен JSON",
+ "json-error-ctrl-char": "Грешка во контролниот знак. Можеби е неисправно кодиран",
+ "json-error-syntax": "Синтаксна грешка",
+ "json-error-utf8": "Неисправно срочени UTF-8-знаци. Може да се неисправно кодирани",
+ "json-error-recursion": "Има една или повеќе повторниви наводи во вредноста што треба да се кодираат",
+ "json-error-inf-or-nan": "Има една или повеќе NAN- или INF-вредности што треба да се кодираат",
+ "json-error-unsupported-type": "Зададена е вредност од тип што не може да се кодира",
+ "headline-anchor-title": "Врска до поднасловов",
+ "special-characters-group-latin": "Латиница",
+ "special-characters-group-latinextended": "Латиница-проширено",
+ "special-characters-group-ipa": "МФА",
+ "special-characters-group-symbols": "Симболи",
+ "special-characters-group-greek": "Грчки",
+ "special-characters-group-cyrillic": "Кирилица",
+ "special-characters-group-arabic": "Арапски",
+ "special-characters-group-arabicextended": "Арапски-проширено",
+ "special-characters-group-persian": "персиски",
+ "special-characters-group-hebrew": "Хебрејски",
+ "special-characters-group-bangla": "Бенгалски",
+ "special-characters-group-tamil": "тамилски",
+ "special-characters-group-telugu": "Телугу",
+ "special-characters-group-sinhala": "Синхалски",
+ "special-characters-group-gujarati": "Гуџарати",
+ "special-characters-group-devanagari": "деванагари",
+ "special-characters-group-thai": "Тајландски",
+ "special-characters-group-lao": "Лаошки",
+ "special-characters-group-khmer": "Кмерски",
+ "special-characters-title-endash": "цртичка",
+ "special-characters-title-emdash": "тире",
+ "special-characters-title-minus": "минус"
}
diff --git a/languages/i18n/ml.json b/languages/i18n/ml.json
index 466591c6..1c560f3e 100644
--- a/languages/i18n/ml.json
+++ b/languages/i18n/ml.json
@@ -55,7 +55,7 @@
"tog-shownumberswatching": "ശ്രദ്ധിക്കുന്ന ഉപയോക്താക്കളുടെ എണ്ണം കാണിക്കുക",
"tog-oldsig": "നിലവിലുള്ള ഒപ്പ്:",
"tog-fancysig": "ഒപ്പ് ഒരു വിക്കി എഴുത്തായി പരിഗണിക്കുക (കണ്ണി സ്വയം ചേർക്കേണ്ടതില്ല)",
- "tog-uselivepreview": "തത്സമയ പ്രിവ്യൂ ഉപയോഗപ്പെടുത്തുക (പരീക്ഷണാടിസ്ഥാനം)",
+ "tog-uselivepreview": "തത്സമയ പ്രിവ്യൂ ഉപയോഗപ്പെടുത്തുക",
"tog-forceeditsummary": "തിരുത്തുകളുടെ ചുരുക്കം നൽകിയില്ലെങ്കിൽ എന്നെ ഓർമ്മിപ്പിക്കുക",
"tog-watchlisthideown": "ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് എന്റെ തിരുത്തുകൾ മറയ്ക്കുക",
"tog-watchlisthidebots": "ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്ന് യന്ത്രങ്ങൾ വരുത്തിയ തിരുത്തുകൾ മറയ്ക്കുക",
@@ -243,6 +243,7 @@
"pool-queuefull": "പൂൾ ക്യൂ നിറഞ്ഞിരിക്കുന്നു",
"pool-errorunknown": "അപരിചിതമായ പിഴവ്",
"pool-servererror": "പൂൾ കൗണ്ടർ സേവനം ലഭ്യമല്ല ($1).",
+ "poolcounter-usage-error": "ഉപയോഗ പിഴവ്: $1",
"aboutsite": "{{SITENAME}} സം‌രംഭത്തെക്കുറിച്ച്",
"aboutpage": "Project:വിവരണം",
"copyright": "പ്രത്യേകം പറയാത്ത പക്ഷം ഉള്ളടക്കം $1 പ്രകാരം ലഭ്യം.",
@@ -252,6 +253,7 @@
"disclaimers": "നിരാകരണങ്ങൾ",
"disclaimerpage": "Project:പൊതുനിരാകരണം",
"edithelp": "തിരുത്തൽ സഹായി",
+ "helppage-top-gethelp": "സഹായം",
"mainpage": "പ്രധാന താൾ",
"mainpage-description": "പ്രധാന താൾ",
"policy-url": "Project:നയം",
@@ -332,10 +334,13 @@
"readonly_lag": " കീഴ്-വിവരശേഖര സെർവറുകൾ മാസ്റ്റർ വരെ എത്തിയതിനാൽ വിവരശേഖരം സ്വയം ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു",
"internalerror": "ആന്തരിക പിഴവ്",
"internalerror_info": "ആന്തരിക പിഴവ്: $1",
+ "internalerror-fatal-exception": "\"$1\" തരത്തിലുള്ള ഗുരുതരമായ എക്സെപ്ഷൻ",
"filecopyerror": "\"$1\" എന്ന പ്രമാണം \"$2\" എന്നതിലേയ്ക്ക് പകർത്താൻ സാധിച്ചില്ല.",
"filerenameerror": "പ്രമാണം \"$1\", \"$2\" എന്ന തലക്കെട്ടിലേയ്ക്ക് മാറ്റാൻ സാധിച്ചില്ല.",
"filedeleteerror": "\"$1\" നീക്കം ചെയ്യാൻ സാധിച്ചില്ല.",
"directorycreateerror": "\"$1\" എന്ന ഡയറക്റ്ററി സൃഷ്ടിക്കാൻ സാധിച്ചില്ല.",
+ "directoryreadonlyerror": "\"$1\" എന്ന ഡയറക്ടറി വായിക്കാൻ-മാത്രം പറ്റുന്നതാണ്.",
+ "directorynotreadableerror": "\"$1\" എന്ന ഡയറക്ടറി വായിക്കാനാവുന്നില്ല.",
"filenotfound": "\"$1\" എന്ന പ്രമാണം കണ്ടെത്താനായില്ല.",
"unexpected": "പ്രതീക്ഷിക്കാത്ത മൂല്യം: \"$1\"=\"$2\".",
"formerror": "പിഴവ്: ഫോം സമർപ്പിക്കുവാൻ പറ്റിയില്ല",
@@ -357,7 +362,8 @@
"viewsourcetext": "താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
"viewyourtext": "താങ്കൾക്ക് ഈ താളിലെ '''താങ്കളുടെ തിരുത്തുകളുടെ''' മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
"protectedinterface": "ഈ താൾ ഈ വിക്കിയുടെ സോഫ്റ്റ്‌വെയറിന്റെ സമ്പർക്കമുഖ എഴുത്തുകൾ നൽകുന്നു, അതുകൊണ്ട് ദുരുപയോഗം തടയാൻ ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു. എല്ലാ വിക്കികൾക്കുമായി പരിഭാഷ കൂട്ടിച്ചേർക്കാനോ, പരിഭാഷയിൽ മാറ്റം വരുത്താനോ, ദയവായി മീഡിയവിക്കി പ്രാദേശീകരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുക.",
- "editinginterface": "'''മുന്നറിയിപ്പ്:''' സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്.\nഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താക്കൾ വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം.\nമീഡിയവിക്കി സന്ദേശങ്ങളുടെ പരിഭാഷകൾ കൂട്ടിച്ചേർക്കാനും മാറ്റംവരുത്താനും മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
+ "editinginterface": "<strong>മുന്നറിയിപ്പ്:<strong> സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്.\nഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താക്കൾ വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം.",
+ "translateinterface": "എല്ലാ വിക്കികൾക്കും ഉപയോഗിക്കാനാവുംവിധം പരിഭാഷകൾ കൂട്ടിച്ചേർക്കാനും മാറ്റംവരുത്താനും മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
"cascadeprotected": "നിർഝരിത (cascading) സൗകര്യം ഉപയോഗിച്ച് തിരുത്തൽ നടത്തുന്നതിനു സം‌രക്ഷണം ഏർപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|താഴെ കൊടുത്തിട്ടുള്ള താളിന്റെ|താഴെ കൊടുത്തിട്ടുള്ള താളുകളുടെ}} ഭാഗമാണ്‌ ഈ താൾ. അതിനാൽ ഈ താൾ തിരുത്താൻ സാധിക്കില്ല:\n$2",
"namespaceprotected": "'''$1''' നാമമേഖലയിലുള്ള താളുകൾ തിരുത്താൻ താങ്കൾക്ക് അനുവാദമില്ല.",
"customcssprotected": "ഈ സി.എസ്.എസ്. താളിൽ മറ്റൊരു ഉപയോക്താവിന്റെ സ്വകാര്യസജ്ജീകരണങ്ങൾ ഉൾക്കൊള്ളുന്നു, അതിനാൽ താങ്കൾക്ക് ഈ താൾ തിരുത്താൻ അനുവാദമില്ല.",
@@ -392,7 +398,7 @@
"createacct-yourpasswordagain": "രഹസ്യവാക്ക് സ്ഥിരീകരിക്കുക",
"createacct-yourpasswordagain-ph": "രഹസ്യവാക്ക് വീണ്ടും നൽകുക",
"remembermypassword": "എന്റെ പ്രവേശനം ഈ ബ്രൗസറിൽ ({{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}) ഓർത്തുവെക്കുക",
- "userlogin-remembermypassword": "ഞാൻ പ്രവേശിച്ചതായി തന്നെ നിലനിർത്തുക",
+ "userlogin-remembermypassword": "ഞാൻ പ്രവേശിച്ചതായിത്തന്നെ ഓർത്തിരിക്കുക",
"userlogin-signwithsecure": "സുരക്ഷിത കണക്ഷൻ ഉപയോഗിക്കുക",
"yourdomainname": "താങ്കളുടെ ഡൊമെയിൻ:",
"password-change-forbidden": "ഈ വിക്കിയിൽ രഹസ്യവാക്കുകൾ മാറ്റാനാവില്ല.",
@@ -414,6 +420,8 @@
"userlogin-resetlink": "താങ്കളുടെ ലോഗിൻ വിവരങ്ങൾ മറന്നു പോയോ?",
"userlogin-resetpassword-link": "താങ്കൾ രഹസ്യവാക്ക് മറന്നോ?",
"userlogin-helplink2": "പ്രവേശിക്കാൻ സഹായമാവശ്യമെങ്കിൽ",
+ "userlogin-loggedin": "താങ്കൾ ഇപ്പോൾ തന്നെ {{GENDER:$1|$1}} ആയി പ്രവേശിച്ചിരിക്കുന്നു.\nതാഴെ ഉള്ള ഫോം ഉപയോഗിച്ച് മറ്റൊരു ഉപയോക്താവായി പ്രവേശിക്കാവുന്നതാണ്.",
+ "userlogin-createanother": "മറ്റൊരു അംഗത്വമെടുക്കുക",
"createacct-emailrequired": "ഇമെയിൽ വിലാസം",
"createacct-emailoptional": "ഇമെയിൽ വിലാസം (നിർബന്ധമില്ല)",
"createacct-email-ph": "താങ്കളുടെ ഇമെയിൽ വിലാസം നൽകുക",
@@ -572,6 +580,7 @@
"anoneditwarning": "<strong>മുന്നറിയിപ്പ്:</strong> താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. താങ്കൾ തിരുത്തുകളെന്തെങ്കിലും ചെയ്യുകയാണെങ്കിൽ താങ്കളുടെ ഐ.പി. വിലാസം എല്ലാവർക്കും ലഭ്യമായിരിക്കും. താങ്കൾ <strong>[$1 ലോഗിൻ ചെയ്യുകയോ]</strong> <strong>[$2 അംഗത്വമെടുക്കുകയോ]</strong> ചെയ്യുന്നതുവഴി മറ്റ് ഗുണങ്ങളോടൊപ്പം താങ്കളുടെ തിരുത്തുകൾ ഉപയോക്തൃനാമത്തിലാവും അറിയപ്പെടുക.",
"anonpreviewwarning": "''താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. സേവ് ചെയ്യുമ്പോൾ താളിന്റെ തിരുത്തൽ ചരിത്രത്തിൽ താങ്കളുടെ ഐ.പി. വിലാസം ചേർത്തു സൂക്ഷിക്കപ്പെടും.''",
"missingsummary": "'''ഓർമ്മക്കുറിപ്പ്:''' താങ്കൾ തിരുത്തലിന്റെ ചുരുക്കരൂപം നൽകിയിട്ടില്ല. ''സേവ് ചെയ്യുക'' ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ താങ്കൾ വരുത്തിയ മാറ്റം കാത്തുസൂക്ഷിക്കുന്നതാണ്.",
+ "selfredirect": "<strong>മുന്നറിയിപ്പ്:</strong> ഈ താളിലേക്ക് തന്നെയുള്ള തിരിച്ചുവിടലാണ് താങ്കൾ സൃഷ്ടിക്കുന്നത്.\nതിരിച്ചുവിടലിനു താങ്കൾ നൽകിയ ലക്ഷ്യം തെറ്റിയിരിക്കാം അല്ലെങ്കിൽ താങ്കൾ തിരുത്തുന്നത് തെറ്റായ താൾ ആയിരിക്കാം.\nഎന്തായാലും, വീണ്ടും \"{{int:savearticle}}\" അമർത്തിയാൽ, തിരിച്ചുവിടൽ സൃഷ്ടിക്കപ്പെടുന്നതാണ്.",
"missingcommenttext": "താങ്കളുടെ അഭിപ്രായം ദയവായി താഴെ രേഖപ്പെടുത്തുക.",
"missingcommentheader": "'''ഓർമ്മക്കുറിപ്പ്:''' ഈ കുറിപ്പിന് താങ്കൾ വിഷയം/തലക്കെട്ട് നൽകിയിട്ടില്ല. ''{{int:savearticle}}'' എന്ന ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ വിഷയം/തലക്കെട്ട് ഇല്ലാതെ തന്നെ കാത്തുസൂക്ഷിക്കുന്നതാവും.",
"summary-preview": "ചുരുക്കരൂപം എങ്ങനെയുണ്ടെന്നു കാണുക:",
@@ -670,6 +679,8 @@
"content-model-text": "വെറും എഴുത്ത്",
"content-model-javascript": "ജാവാസ്ക്രിപ്റ്റ്",
"content-model-css": "സി.എസ്.എസ്.",
+ "duplicate-args-category": "ഫലകങ്ങൾ വിളിക്കുമ്പോൾ ചരങ്ങൾ ആവർത്തിച്ചുപയോഗിക്കുന്ന താളുകൾ",
+ "duplicate-args-category-desc": "താളിൽ ഫലകങ്ങൾ വിളിക്കുമ്പോൾ ചരങ്ങൾ അതായത് <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> അല്ലെങ്കിൽ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code> എന്ന രീതിയിൽ.",
"expensive-parserfunction-warning": "'''മുന്നറിയിപ്പ്:''' ഈ താളിൽ വളരെക്കൂടുതൽ പാഴ്സർ ഫങ്ഷനുകൾ വിളിച്ചിരിക്കുന്നു.\n\n{{PLURAL:$2|ഒരു വിളി|$2 വിളികൾ}} മാത്രമുണ്ടാകേണ്ടയിടത്ത്, ഇപ്പോൾ {{PLURAL:$1|ഒരു വിളി|$1 വിളികൾ}} ഉണ്ട്.",
"expensive-parserfunction-category": "വളരെയധികം ചിലവേറിയ പാഴ്സർ ഫങ്ഷൻ വിളികൾ ഉൾക്കൊള്ളുന്ന താളുകൾ",
"post-expand-template-inclusion-warning": "'''അറിയിപ്പ്:''' ഫലകം ഉൾപ്പെടുത്താവുന്ന വലിപ്പത്തിലും വളരെ കൂടുതൽ ആയിരിക്കുന്നു.\nചില ഫലകങ്ങൾ ഉൾപ്പെടുത്തുകയില്ല.",
@@ -724,7 +735,7 @@
"history-feed-empty": "താങ്കൾ തിരഞ്ഞ താൾ നിലവിലില്ല.\nപ്രസ്തുത താൾ വിക്കിയിൽ നിന്നു ഒഴിവാക്കിയിരിക്കാനോ പുനർനാമകരണം ചെയ്തിരിക്കാനോ സാദ്ധ്യത ഉണ്ട്.\nബന്ധപ്പെട്ട പുതിയ താളുകൾ കണ്ടെത്താൻ [[Special:Search|വിക്കിയിലെ തിരച്ചിൽ]] എന്ന താൾ ഉപയോഗിക്കുക.",
"rev-deleted-comment": "(തിരുത്തലിന്റെ ചുരുക്കം ഒഴിവാക്കിയിരിക്കുന്നു)",
"rev-deleted-user": "(ഉപയോക്തൃനാമം ഒഴിവാക്കിയിരിക്കുന്നു)",
- "rev-deleted-event": "(പ്രവൃത്തിയുടെ രേഖ ഒഴിവാക്കിയിരിക്കുന്നു)",
+ "rev-deleted-event": "(രേഖാ വിവരങ്ങൾ ഒഴിവാക്കിയിരിക്കുന്നു)",
"rev-deleted-user-contribs": "[ഉപയോക്തൃനാമം അഥവാ ഐ.പി. വിലാസം ഒഴിവാക്കപ്പെട്ടിരിക്കുന്നു - തിരുത്തൽ സേവനങ്ങളിൽ നിന്നും മറച്ചിരിക്കുന്നു]",
"rev-deleted-text-permission": "താളിന്റെ ഈ നാൾപ്പതിപ്പ് '''മായ്ച്ചിരിക്കുന്നു'''.\nകൂടുതൽ വിവരങ്ങൾ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} മായ്ക്കൽ രേഖയിൽ] കാണാവുന്നതാണ്.",
"rev-suppressed-text-permission": "താളിന്റെ ഈ സംശോധനം <strong>ഒതുക്കിയിരിക്കുന്നു</strong>.\nകൂടുതൽ വിവരങ്ങൾ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ഒതുക്കൽ രേഖയിൽ] ഉണ്ട്.",
@@ -758,7 +769,7 @@
"revdelete-legend": "നാൾപ്പതിപ്പിന്റെ ദർശനീയത സജ്ജീകരിക്കുക",
"revdelete-hide-text": "നാൾപ്പതിപ്പിലെ എഴുത്ത്",
"revdelete-hide-image": "പ്രമാണത്തിന്റെ ഉള്ളടക്കം മറയ്ക്കുക",
- "revdelete-hide-name": "പ്രവൃത്തിയും ലക്ഷ്യവും മറയ്ക്കുക",
+ "revdelete-hide-name": "ലക്ഷ്യവും ചരങ്ങളും മറയ്ക്കുക",
"revdelete-hide-comment": "തിരുത്തലിന്റെ ചുരുക്കം",
"revdelete-hide-user": "തിരുത്തുന്ന ആളുടെ ഉപയോക്തൃനാമം/ഐ.പി. വിലാസം",
"revdelete-hide-restricted": "വിവരങ്ങളുടെ നിയന്ത്രണം മറ്റുള്ളവരെ പോലെ കാര്യനിർവാഹകർക്കും ബാധകമാക്കുക",
@@ -812,7 +823,6 @@
"mergehistory-same-destination": "സ്രോതസ്സ് - ലക്ഷ്യ താളുകൾക്ക് ഒരേ പേര്‌ ഉണ്ടാകാൻ പാടില്ല",
"mergehistory-reason": "കാരണം:",
"mergelog": "താളുകൾ സം‌യോജിപ്പിച്ചതിന്റെ രേഖകൾ",
- "pagemerge-logentry": "[[$1]] എന്ന താൾ [[$2]] എന്ന താളിലേയ്ക്ക് സംയോജിപ്പിച്ച് കൂട്ടിച്ചേർത്തു ($3 വരെയുള്ള പതിപ്പുകൾ)",
"revertmerge": "വിയോജിപ്പിക്കുക",
"mergelogpagetext": "രണ്ടു താളുകളുടെ നാൾവഴികൾ തമ്മിൽ സം‌യോജിപ്പിച്ചതിന്റെ പ്രവർത്തനരേഖകളുടെ ഏറ്റവും പുതിയ പട്ടിക താഴെ കാണാം.",
"history-title": "\"$1\" എന്ന താളിന്റെ നാൾവഴി",
@@ -853,6 +863,7 @@
"search-result-category-size": "{{PLURAL:$1|ഒരു അംഗം|$1 അംഗങ്ങൾ}} ({{PLURAL:$2|ഒരു ഉപവർഗ്ഗം|$2 ഉപവർഗ്ഗങ്ങൾ}}, {{PLURAL:$3|ഒരു പ്രമാണം|$3 പ്രമാണങ്ങൾ}})",
"search-redirect": "(തിരിച്ചുവിടൽ താൾ $1)",
"search-section": "(വിഭാഗം $1)",
+ "search-category": "(വർഗ്ഗം $1)",
"search-file-match": "(പ്രമാണ ഉള്ളടക്കവുമായി ഒത്തുപോകുന്നുണ്ട്)",
"search-suggest": "താങ്കൾ ഉദ്ദേശിച്ചത് $1 എന്നാണോ",
"search-interwiki-caption": "സഹോദര സംരംഭങ്ങൾ",
@@ -886,6 +897,11 @@
"prefs-personal": "എന്നെപ്പറ്റി",
"prefs-rc": "സമീപകാല മാറ്റങ്ങൾ",
"prefs-watchlist": "ശ്രദ്ധിക്കുന്നവ",
+ "prefs-editwatchlist": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക തിരുത്തുക",
+ "prefs-editwatchlist-label": "താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയിലെ ഉൾപ്പെടുത്തലുകൾ തിരുത്തുക:",
+ "prefs-editwatchlist-edit": "താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയിലെ തലക്കെട്ടുകൾ കാണുക നീക്കംചെയ്യുക",
+ "prefs-editwatchlist-raw": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയുടെ മൂലരൂപം തിരുത്തുക",
+ "prefs-editwatchlist-clear": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക ശൂന്യമാക്കുക",
"prefs-watchlist-days": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ പ്രദർശിപ്പിക്കേണ്ട പരമാവധി ദിവസങ്ങൾ:",
"prefs-watchlist-days-max": "പരമാവധി {{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസങ്ങൾ}}",
"prefs-watchlist-edits": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയുടെ വികസിത രൂപത്തിൽ പ്രദർശിപ്പിക്കേണ്ട പരമാവധി മാറ്റങ്ങൾ:",
@@ -955,7 +971,7 @@
"gender-female": "സ്ത്രീ",
"prefs-help-gender": "ഈ സജ്ജീകരണം നിർബന്ധമല്ല.\nസോഫ്റ്റ്‌വെയർ ഉപയോഗിച്ച് സ്ത്രീകളേയും പുരുഷന്മാരേയും ശരിയായി സംബോധന ചെയ്യാൻ ഉപയോഗിക്കുന്നു.\nഈ വിവരം പരസ്യമായി ലഭ്യമായിരിക്കുന്നതാണ്‌.",
"email": "ഇമെയിൽ",
- "prefs-help-realname": "താങ്കളുടെ യഥാർത്ഥ പേര്‌ നൽകണമെന്നു നിർബന്ധമില്ല. എങ്കിലും അങ്ങനെ ചെയ്താൽ താങ്കളുടെ സംഭാവനകൾ ആ പേരിൽ അംഗീകരിക്കപ്പെടും.",
+ "prefs-help-realname": "താങ്കളുടെ യഥാർത്ഥ പേര്‌ നൽകണമെന്നു നിർബന്ധമില്ല.\nഎന്നാൽ അങ്ങനെ ചെയ്താൽ താങ്കളുടെ സംഭാവനകൾ ആ പേരിൽ അംഗീകരിക്കപ്പെടുന്നതാണ്.",
"prefs-help-email": "ഇമെയിൽ വിലാസം നൽകണമെന്ന് നിർബന്ധമില്ല, പക്ഷേ താങ്കൾ രഹസ്യവാക്ക് മറന്നാൽ പുതിയത് അയച്ചു തരാൻ വിലാസം ആവശ്യമാണ്.",
"prefs-help-email-others": "താങ്കൾക്കായുള്ള താളിൽ നിന്നോ, താങ്കൾക്കുള്ള സന്ദേശങ്ങളുടെ താളിൽ നിന്നോ മറ്റുപയോക്താക്കൾക്ക് താങ്കളുടെ വ്യക്തിത്വം മനസ്സിലാക്കാതെ തന്നെ താങ്കൾക്ക് സന്ദേശങ്ങളയയ്ക്കാനും ഈ സം‌വിധാനം അവസരം നൽകുന്നു.",
"prefs-help-email-required": "ഇമെയിൽ വിലാസം ആവശ്യമാണ്‌.",
@@ -976,6 +992,7 @@
"prefs-tokenwatchlist": "ചീട്ട്",
"prefs-diffs": "വ്യത്യാസങ്ങൾ",
"prefs-help-prefershttps": "താങ്കൾ അടുത്ത പ്രാവശ്യം പ്രവേശിക്കുമ്പോൾ ഇവ ഫലത്തിൽ വരുന്നതാണ്.",
+ "prefswarning-warning": "താങ്കളുടെ ക്രമീകരണങ്ങളിൽ താങ്കൾ വരുത്തിയ മാറ്റങ്ങൾ ഇതുവരെ സേവ് ചെയ്തിട്ടില്ല.\n\"$1\" ഞെക്കാതെയാണ് താങ്കൾ ഈ താളിൽ നിന്നും പോകുന്നതെങ്കിൽ താങ്കളുടെ ക്രമീകരണങ്ങൾ സേവ് ചെയ്യപ്പെടുന്നതല്ല.",
"prefs-tabs-navigation-hint": "സൂചന: ടാബുകളുടെ പട്ടികയിലെ ടാബുകളിലൂടെ നീങ്ങാൻ ഇടത്തും വലത്തും ആരോ കീകൾ ഉപയോഗിക്കാവുന്നതാണ്.",
"email-address-validity-valid": "സാധുതയുള്ളതെന്ന് തോന്നുന്നു",
"email-address-validity-invalid": "സാധുതയുള്ള വിലാസം ആവശ്യമാണ്!",
@@ -1061,6 +1078,7 @@
"right-protect": "സംരക്ഷണ മാനത്തിൽ മാറ്റം വരുത്തുക, നിർഝരിത മാർഗ്ഗത്തിൽ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്ന താളുകൾ തിരുത്തുക",
"right-editprotected": "\"{{int:protect-level-sysop}}\" എന്ന് അടയാളപ്പെടുത്തി സംരക്ഷിച്ചിട്ടുള്ള താളുകൾ തിരുത്തുക",
"right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" എന്നടയാളപ്പെടുത്തി സംരക്ഷിച്ചിട്ടുള്ള താളുകൾ തിരുത്തുക",
+ "right-editcontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക",
"right-editinterface": "ഉപയോക്തൃ സമ്പർക്കമുഖത്തിൽ മാറ്റം വരുത്തുക",
"right-editusercssjs": "മറ്റ് ഉപയോക്താക്കളുടെ CSS, JS പ്രമാണങ്ങൾ തിരുത്തുക",
"right-editusercss": "മറ്റ് ഉപയോക്താക്കളുടെ CSS പ്രമാണങ്ങൾ തിരുത്തുക",
@@ -1088,6 +1106,7 @@
"right-override-export-depth": "കണ്ണിവത്കരിക്കപ്പെട്ട താളുകളുടെ ആഴം 5 വരെയുള്ള താളുകൾ കയറ്റുമതി ചെയ്യുക",
"right-sendemail": "മറ്റുപയോക്താക്കൾക്ക് ഇമെയിൽ അയയ്ക്കുക",
"right-passwordreset": "രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കാനുള്ള ഇമെയിലുകൾ കാണുക",
+ "right-managechangetags": "ഡേറ്റാബേസിൽ നിന്നുള്ള [[Special:Tags|ടാഗുകൾ]] സൃഷ്ടിക്കുക അല്ലെങ്കിൽ മായ്ക്കുക",
"newuserlogpage": "ഉപയോക്തൃ സൃഷ്ടിയുടെ രേഖ",
"newuserlogpagetext": "പുതിയതായി അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ പട്ടിക താഴെ കാണാം.",
"rightslog": "ഉപയോക്തൃ അവകാശ രേഖ",
@@ -1133,6 +1152,8 @@
"action-viewmywatchlist": "താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക കാണുക",
"action-viewmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ കാണുക",
"action-editmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ തിരുത്തുക",
+ "action-editcontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക",
+ "action-managechangetags": "ഡേറ്റാബേസിൽ നിന്നുള്ള ടാഗുകൾ സൃഷ്ടിക്കുക അല്ലെങ്കിൽ മായ്ക്കുക",
"nchanges": "{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}",
"enhancedrc-since-last-visit": "കഴിഞ്ഞ സന്ദർശനത്തിനു ശേഷം {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}}",
"enhancedrc-history": "നാൾവഴി",
@@ -1203,9 +1224,9 @@
"uploaderror": "അപ്‌ലോഡ് പിഴവ്",
"upload-recreate-warning": "'''ശ്രദ്ധിക്കുക: ഇതേ പേരിലുള്ള ഒരു പ്രമാണം മായ്ക്കുകയോ മാറ്റുകയോ ചെയ്തിരിക്കുന്നു.'''\n\nഈ താളിന്റെ മായ്ക്കൽ രേഖയും മാറ്റൽ രേഖയും സ്ഥിരീകരിക്കുന്നതിനായി നൽകിയിരിക്കുന്നു:",
"uploadtext": "താഴെ കാണുന്ന ഫോം പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുവാൻ വേണ്ടി ഉപയോഗിക്കുക.\nനിലവിൽ അപ്‌ലോഡ് ചെയ്തിരിക്കുന്ന പ്രമാണങ്ങൾ കാണുവാൻ [[Special:FileList|അപ്‌ലോഡ് ചെയ്ത പ്രമാണങ്ങളുടെ പട്ടിക]] സന്ദർശിക്കുക. (പുതുക്കിയ) അപ്‌‌ലോഡുകൾ [[Special:Log/upload|അപ്‌ലോഡ് രേഖ]], മായ്ക്കപ്പെട്ടവ [[Special:Log/delete|മായ്ക്കൽ രേഖയിലും]] കാണാവുന്നതാണ്‌.\n\nപ്രമാണം താളിൽ പ്രദർശിപ്പിക്കുവാൻ താഴെ കാണുന്ന ഒരു വഴി സ്വീകരിക്കുക\n\n*'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki>''' പൂർണ്ണരൂപത്തിലുള്ള പ്രമാണം ഉപയോഗിക്കാൻ\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' 200 പിക്സൽ ഉള്ള പെട്ടിയിൽ പകരമുള്ള എഴുത്തടക്കം ഉപയോഗിക്കാൻ\n*'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>''' പ്രമാണം കാട്ടാതെ പ്രമാണത്തെ നേരിട്ടു കണ്ണി ചേർക്കാൻ",
- "upload-permitted": "അനുവദനീയമായ പ്രമാണ തരങ്ങൾ: $1.",
- "upload-preferred": "പ്രോത്സാഹിപ്പിക്കുന്ന പ്രമാണ തരങ്ങൾ: $1.",
- "upload-prohibited": "നിരോധിക്കപ്പെട്ട തരം പ്രമാണങ്ങൾ: $1.",
+ "upload-permitted": "അനുവദനീയമായ പ്രമാണ {{PLURAL:$2|തരം|തരങ്ങൾ}}: $1.",
+ "upload-preferred": "പ്രോത്സാഹിപ്പിക്കുന്ന പ്രമാണ {{PLURAL:$2|തരം|തരങ്ങൾ}}: $1.",
+ "upload-prohibited": "നിരോധിക്കപ്പെട്ട {{PLURAL:$2|തരം|തരങ്ങളിലുള്ള}} പ്രമാണങ്ങൾ: $1.",
"uploadlogpage": "അപ്‌ലോഡ് രേഖ",
"uploadlogpagetext": "സമീപകാലത്ത് അപ്‌ലോഡ് ചെയ്ത പ്രമാണങ്ങളുടെ പട്ടിക താഴെ കാണാം.",
"filename": "പ്രമാണത്തിന്റെ പേര്",
@@ -1463,7 +1484,6 @@
"statistics": "സ്ഥിതിവിവരക്കണക്കുകൾ",
"statistics-header-pages": "താൾ സ്ഥിതിവിവരക്കണക്കുകൾ",
"statistics-header-edits": "തിരുത്തൽ സ്ഥിതിവിവരക്കണക്കുകൾ",
- "statistics-header-views": "സന്ദർശനങ്ങളുടെ സ്ഥിതിവിവരക്കണക്കുകൾ",
"statistics-header-users": "ഉപയോക്താക്കളുടെ സ്ഥിതിവിവരക്കണക്കുകൾ",
"statistics-header-hooks": "മറ്റു സ്ഥിതിവിവരക്കണക്കുകൾ",
"statistics-articles": "ലേഖനങ്ങൾ",
@@ -1472,13 +1492,9 @@
"statistics-files": "അപ്‌ലോഡ് ചെയ്തിട്ടുള്ള പ്രമാണങ്ങൾ",
"statistics-edits": "{{SITENAME}} സം‌രംഭത്തിന്റെ തുടക്കം മുതലുള്ള തിരുത്തുകൾ",
"statistics-edits-average": "ഒരു താളിലെ ശരാശരി തിരുത്തുകൾ",
- "statistics-views-total": "ആകെ സന്ദർശനങ്ങൾ",
- "statistics-views-total-desc": "നിലവില്ലാത്ത താളുകളിലും പ്രത്യേക താളുകളിലും ഉള്ള എടുത്തുനോക്കലുകൾ ഉൾപ്പെടുത്തിയിട്ടില്ല",
- "statistics-views-peredit": "ഓരോ തിരുത്തലിലും ഉള്ള എടുത്തുനോട്ടങ്ങൾ",
"statistics-users": "അംഗത്വമെടുത്തിട്ടുള്ള [[Special:ListUsers|ഉപയോക്താക്കൾ]]",
"statistics-users-active": "സജീവ ഉപയോക്താക്കൾ",
"statistics-users-active-desc": "കഴിഞ്ഞ {{PLURAL:$1|ദിവസം|$1 ദിവസങ്ങൾക്കുള്ളിൽ}} പ്രവർത്തിച്ചിട്ടുള്ള ഉപയോക്താക്കൾ",
- "statistics-mostpopular": "ഏറ്റവുമധികം സന്ദർശിക്കപ്പെട്ട താളുകൾ",
"pageswithprop": "താളിന്റെ സവിശേഷതകളുള്ള താളുകൾ",
"pageswithprop-legend": "ഒരു താൾ സവിശേഷതയുള്ള താളുകൾ",
"pageswithprop-prop": "ഗുണം:",
@@ -1516,9 +1532,9 @@
"uncategorizedtemplates": "വർഗ്ഗീകരിക്കാത്ത ഫലകങ്ങൾ",
"unusedcategories": "ഉപയോഗത്തിലില്ലാത്ത വർഗ്ഗങ്ങൾ",
"unusedimages": "ഉപയോഗിക്കപ്പെടാത്ത പ്രമാണങ്ങൾ",
- "popularpages": "ജനപ്രിയ താളുകൾ",
"wantedcategories": "അവശ്യ വർഗ്ഗങ്ങൾ",
"wantedpages": "അവശ്യ താളുകൾ",
+ "wantedpages-summary": "മറ്റുതാളുകളിൽ നിന്ന് ഏറ്റവുമധികം കണ്ണിചേർത്തിരിക്കുന്ന നിലവിലില്ലാത്ത താളുകളുടെ പട്ടികയാണിത്, തിരിച്ചുവിടലുകൾ മാത്രം കണ്ണി ചേർത്തിരിക്കുന്നവ ഒഴിവാക്കിയിരിക്കുന്നു. തിരിച്ചുവിടലുകൾ കണ്ണി ചേർത്തിരിക്കുന്ന നിലവിലില്ലാത്ത താളുകളുടെ പട്ടികയ്ക്ക് [[{{#special:BrokenRedirects}}]] കാണുക.",
"wantedpages-badtitle": "ഫലങ്ങളുടെ ഗണത്തിൽ അസാധുവായ തലക്കെട്ട്: $1",
"wantedfiles": "ആവശ്യമുള്ള പ്രമാണങ്ങൾ",
"wantedfiletext-cat": "താഴെക്കൊടുത്തിരിക്കുന്ന പ്രമാണങ്ങൾ ഉപയോഗിച്ചിട്ടുണ്ടെങ്കിലും നിലവിലില്ല. ബാഹ്യ റെപ്പോസിറ്ററികളിൽ നിന്നുള്ള പ്രമാണങ്ങൾ നിലവിലുണ്ടെങ്കിലും പട്ടികയിൽ ഉൾപ്പെട്ടിട്ടുണ്ടാവാം. അത്തരത്തിൽ തെറ്റായി ഉൾപ്പെടുത്തിയിരിക്കുന്നവ <del>വെട്ടിക്കളയുക</del>. കൂടുതലായി, നിലവിലില്ലാത്ത പ്രമാണങ്ങൾ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ കാണാൻ [[:$1]] സന്ദർശിക്കുക.",
@@ -1578,10 +1594,12 @@
"pager-older-n": "{{PLURAL:$1|പഴയ 1|പഴയ $1}}",
"suppress": "മേൽനോട്ടം",
"querypage-disabled": "പ്രവർത്തനമികവിനെ ബാധിക്കുന്ന കാരണങ്ങളാൽ ഈ പ്രത്യേക താൾ പ്രവർത്തന രഹിതമാക്കിയിരിക്കുന്നു.",
+ "apihelp": "എ.പി.ഐ. സഹായം",
+ "apihelp-no-such-module": "ഘടകം \"$1\" കണ്ടെത്താനായില്ല.",
"booksources": "പുസ്തക സ്രോതസ്സുകൾ",
"booksources-search-legend": "പുസ്തകസ്രോതസ്സുകൾക്കായി തിരയുക",
"booksources-isbn": "ഐ.എസ്.ബി.എൻ.:",
- "booksources-go": "പോകൂ",
+ "booksources-search": "തിരയുക",
"booksources-text": "പുതിയതും ഉപയോഗിച്ചതുമായ പുസ്തകങ്ങൾ വിൽക്കുന്ന സൈറ്റുകളിലേക്കുള്ള ലിങ്കുകളുടെ പട്ടിക ആണ്‌ താഴെ. താങ്കൾ തിരയുന്ന പുസ്തകത്തെ പറ്റിയുള്ള കൂടുതൽ വിവരങ്ങൾ ഈ പട്ടികയിൽ നിന്നു ലഭിച്ചേക്കാം:",
"booksources-invalid-isbn": "തന്നിരിക്കുന്ന ഐ.എസ്.ബി.എൻ. സാധുവാണെന്നു തോന്നുന്നില്ല; യഥാർത്ഥ സ്രോതസ്സിൽ നിന്നും പകർത്തിയപ്പോൾ തെറ്റുപറ്റിയോ എന്നു പരിശോധിക്കുക",
"specialloguserlabel": "നടപ്പിലാക്കിയയാൾ:",
@@ -1717,7 +1735,7 @@
"wlheader-enotif": "ഇമെയിൽ അറിയിപ്പുകൾ സജ്ജമാക്കിയിരിക്കുന്നു.",
"wlheader-showupdated": "താങ്കളുടെ അവസാന സന്ദർശനത്തിനു ശേഷം മാറ്റം വന്ന താളുകൾ '''കടുപ്പിച്ച്''' കാണിച്ചിരിക്കുന്നു",
"wlnote": "$3, $4-നു കഴിഞ്ഞ {{PLURAL:$2|മണിക്കൂറിൽ|<strong>$2</strong> മണിക്കൂറിൽ}} നടന്ന {{PLURAL:$1|ഒരു പുതിയ മാറ്റം|<strong>$1</strong> പുതിയ മാറ്റങ്ങൾ}} താഴെ പ്രദർശിപ്പിച്ചിരിക്കുന്നു.",
- "wlshowlast": "ഒടുവിലത്തെ $1 മണിക്കൂറുകൾ $2 ദിനങ്ങൾ, $3 പ്രദർശിപ്പിക്കുക",
+ "wlshowlast": "ഒടുവിലത്തെ $1 മണിക്കൂറുകൾ $2 ദിനങ്ങൾ, പ്രദർശിപ്പിക്കുക",
"watchlist-options": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ സജ്ജീകരണങ്ങൾ",
"watching": "ശ്രദ്ധിക്കുന്നു...",
"unwatching": "അവഗണിക്കുന്നു...",
@@ -1766,7 +1784,6 @@
"deleteprotected": "ഈ താൾ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്നതിനാൽ താങ്കൾക്കിത് മായ്ക്കാനാവില്ല.",
"deleting-backlinks-warning": "'''മുന്നറിയിപ്പ്:''' മറ്റു താളുകളിൽ നിന്നും [[Special:WhatLinksHere/{{FULLPAGENAME}}|താളിലേയ്ക്കുള്ള കണ്ണികൾ]] അല്ലെങ്കിൽ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ താങ്കൾ മായ്ക്കാൻ പോവുകയാണ്.",
"rollback": "തിരുത്തുകൾ റോൾബാക്ക് ചെയ്യുക",
- "rollback_short": "റോൾബാക്ക്",
"rollbacklink": "റോൾബാക്ക്",
"rollbacklinkcount": "{{PLURAL:$1|ഒരു തിരുത്ത്|$1 തിരുത്തുകൾ}} മുൻപ്രാപനം ചെയ്യുക",
"rollbacklinkcount-morethan": "{{PLURAL:$1|ഒന്നിലധികം തിരുത്തുകൾ|$1 എണ്ണത്തിലധികം തിരുത്തുകൾ}} മുൻപ്രാപനം ചെയ്യുക",
@@ -1816,6 +1833,7 @@
"protect-othertime": "മറ്റ് കാലാവധി:",
"protect-othertime-op": "മറ്റു കാലയളവ്",
"protect-existing-expiry": "നിലവിലെ കാലാവധി: $3, $2",
+ "protect-existing-expiry-infinity": "നിലവിലെ കാലഹരണപ്പെടൽ കാലാവധി: അനന്തം",
"protect-otherreason": "മറ്റ്/കൂടുതൽ കാരണം:",
"protect-otherreason-op": "മറ്റ് കാരണം",
"protect-dropdown": "*സംരക്ഷിക്കാനുള്ള കാരണങ്ങൾ\n** അമിതമായ നശീകരണപ്രവർത്തനങ്ങൾ\n** അമിതമായ പാഴെഴുത്ത് ഉൾപ്പെടുത്തൽ\n** സൃഷ്ടിപരമല്ലാതെ ഭവിക്കുന്ന തിരുത്തൽ യുദ്ധം\n** സന്ദർശകരുടെ എണ്ണം വളരെ കൂടുതലായ താൾ",
@@ -1875,6 +1893,7 @@
"namespace": "നാമമേഖല:",
"invert": "വിപരീതം തിരഞ്ഞെടുക്കുക",
"tooltip-invert": "തിരഞ്ഞെടുക്കുന്ന നാമമേഖലയിലെ (ശരി ചേർത്തിട്ടുണ്ടെങ്കിൽ കൂടെ അനുബന്ധ നാമമേഖലയിലേയും) താളുകളിലെ മാറ്റങ്ങൾ മറയ്ക്കാൻ ഈ പെട്ടിയിൽ ശരി ചേർക്കുക",
+ "tooltip-whatlinkshere-invert": "തിരഞ്ഞെടുത്ത നാമമേഖലയിലെ താളുകളിലേക്കുള്ള കണ്ണികൾ മറയ്ക്കുന്നതിനായി ഇവിടെ ശരി ചേർക്കുക.",
"namespace_association": "അനുബന്ധനാമമേഖലകൾ",
"tooltip-namespace_association": "താങ്കൾ തിരഞ്ഞെടുത്ത നാമമേഖലയുടെ കൂടെ സംവാദം അല്ലെങ്കിൽ വിഷയ നാമമേഖലയും കൂടെ ചേർക്കണമെങ്കിൽ ഇവിടെ ശരി ചേർക്കുക",
"blanknamespace": "(മുഖ്യം)",
@@ -2139,13 +2158,14 @@
"thumbnail-temp-create": "താത്കാലിക ലഘുചിത്ര പ്രമാണം സൃഷ്ടിക്കാനായില്ല",
"thumbnail-dest-create": "ലഘുചിത്രം ലക്ഷ്യത്തിൽ സേവ് ചെയ്യാനായില്ല",
"thumbnail_invalid_params": "ലഘുചിത്രത്തിനാവശ്യമായ ചരങ്ങൾ അസാധുവാണ്",
+ "thumbnail_toobigimagearea": "$1 വലിപ്പത്തിലും കൂടുതലുള്ള പ്രമാണം",
"thumbnail_dest_directory": "ലക്ഷ്യ ഡയറക്ടറി സൃഷ്ടിക്കുവാൻ സാധിച്ചില്ല",
"thumbnail_image-type": "ചിത്രത്തിന്റെ തരം പിന്തുണക്കപ്പെട്ടതല്ല",
"thumbnail_gd-library": "അപൂർണ്ണമായ ജി.ഡി. ലൈബ്രറി ക്രമീകരണം: ഫങ്ഷൻ $1 ലഭ്യമല്ല",
"thumbnail_image-missing": "പ്രമാണം ലഭ്യമല്ലെന്നു കാണുന്നു: $1",
"thumbnail_image-failure-limit": "ഈ ലഘുചിത്രം സൃഷ്ടിക്കാൻ നിരവധി പരാജയപ്പെട്ട ശ്രമങ്ങൾ ($1 അല്ലെങ്കിൽ കൂടുതൽ) നടന്നിട്ടുണ്ട്. ദയവായി പിന്നീട് ശ്രമിക്കുക.",
"import": "താളുകൾ ഇറക്കുമതി ചെയ്യുക",
- "importinterwiki": "അന്തർവിക്കി ഇറക്കുമതി",
+ "importinterwiki": "മറ്റൊരു വിക്കിയീൽ നിന്നും ഇറക്കുമതി ചെയ്യുക",
"import-interwiki-text": "വിക്കിയും ഇറക്കുമതി ചെയ്യാനുള്ള താളും തിരഞ്ഞെടുക്കുക.\nപുതുക്കൽ തീയതികളും തിരുത്തിയ ആളുകളുടെ പേരും സൂക്ഷിക്കപ്പെടും.\nഅന്തർവിക്കി ഇറക്കുമതിയുടെ എല്ലാ വിവരങ്ങളും [[Special:Log/import|ഇറക്കുമതി പ്രവർത്തനരേഖ]] എന്ന താളിൽ ശേഖരിക്കപ്പെടും.",
"import-interwiki-sourcewiki": "സ്രോതസ്സ് വിക്കി:",
"import-interwiki-sourcepage": "സ്രോതസ്സ് താൾ:",
@@ -2166,7 +2186,7 @@
"importcantopen": "ഇറക്കുമതി പ്രമാണം തുറക്കാൻ കഴിഞ്ഞില്ല",
"importbadinterwiki": "മോശമായ അന്തർവിക്കി കണ്ണി",
"importsuccess": "ഇറക്കുമതി ചെയ്തുകഴിഞ്ഞു!",
- "importnosources": "ട്രാൻസ്‌‌വിക്കി ഇറക്കുമതി സ്രോതസ്സുകളൊന്നും നിർവചിച്ചിട്ടില്ല, നേരിട്ടുള്ള നാൾവഴി അപ്‌‌ലോഡുകൾ പ്രവർത്തനരഹിതവുമാക്കിയിരിക്കുന്നു.",
+ "importnosources": "ഇറക്കുമതി സ്രോതസ്സുകളായ വിക്കികളൊന്നും നിർവചിച്ചിട്ടില്ല, നേരിട്ടുള്ള നാൾവഴി അപ്‌‌ലോഡുകൾ പ്രവർത്തനരഹിതവുമാക്കിയിരിക്കുന്നു.",
"importnofile": "ഇറക്കുമതി പ്രമാണങ്ങളൊന്നും അപ്‌‌ലോഡ് ചെയ്തിട്ടില്ല.",
"importuploaderrorsize": "ഇറക്കുമതി ചെയ്ത പ്രമാണത്തിന്റെ അപ്‌‌ലോഡ് പരാജയപ്പെട്ടു.\nപ്രമാണം അപ്‌‌ലോഡിങ്ങിനനുവദിക്കപ്പെട്ടിരിക്കുന്ന അളവിലും വലുതാണ്.",
"importuploaderrorpartial": "ഇറക്കുമതി ചെയ്ത പ്രമാണത്തിന്റെ അപ്‌‌ലോഡ് പരാജയപ്പെട്ടു.\nപ്രമാണം ഭാഗികമായി അപ്‌‌ലോഡ് ചെയ്യപ്പെട്ടിരിക്കുന്നു.",
@@ -2183,23 +2203,21 @@
"import-error-interwiki": "ബാഹ്യ കണ്ണിചേർക്കലിനു (അന്തർവിക്കി) കരുതിവെച്ചിരിക്കുന്ന പേര് ആയതിനാൽ, \"$1\" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.",
"import-error-special": "താളുകൾ അനുവദിക്കാത്ത പ്രത്യേക നാമമേഖലയിൽ പെടുന്നതായതിനാൽ \"$1\" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.",
"import-error-invalid": "ഇറക്കുമതി ചെയ്യപ്പെട്ടാൽ പേര് ഈ വിക്കിയിൽ അസാധുവാകുമെന്നതിനാൽ \"$1\" എന്ന താൾ ഇറക്കുമതി ചെയ്തില്ല.",
+ "import-error-bad-location": "ഉള്ളടക്ക മാതൃക $3 ഉപയോഗിക്കുന്ന $2 നാൾപ്പതിപ്പ്, ഈ വിക്കിയിലെ \"$1\" എന്ന താളിൽ ആ മാതൃക പിന്തുണയ്ക്കുന്നില്ലാത്തതിനാൽ ഉപയോഗിക്കാനാവില്ല.",
"import-options-wrong": "തെറ്റായ {{PLURAL:$2|ഐച്ഛികം|ഐച്ഛികങ്ങൾ}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "നൽകിയ മൂലതാൾ അസാധുവാണ്.",
"import-rootpage-nosubpage": "മൂലതാളിന്റെ നാമമേഖലയായ \"$1\" ഉപതാളുകൾ അനുവദിക്കുന്നില്ല.",
"importlogpage": "ഇറക്കുമതി പ്രവർത്തനരേഖ",
"importlogpagetext": "മറ്റു വിക്കികളിൽ നിന്ന് താളുകൾ നാൾവഴിയടക്കം എടുക്കുന്ന കാര്യനിർവാഹക ഇറക്കുമതി.",
- "import-logentry-upload": "പ്രമാണ അപ്‌‌ലോഡ് വഴി [[$1]] ഇറക്കുമതി ചെയ്തിരിക്കുന്നു",
"import-logentry-upload-detail": "{{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} ഇറക്കുമതി ചെയ്തു",
- "import-logentry-interwiki": "$1 അന്തർവിക്കി ഇറക്കുമതി ചെയ്തു",
"import-logentry-interwiki-detail": "$2 എന്നതിൽ നിന്ന് {{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} ഇറക്കുമതി ചെയ്തു",
"javascripttest": "ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണം",
- "javascripttest-title": "$1 പരീക്ഷണങ്ങൾ നടക്കുന്നുണ്ട്",
"javascripttest-pagetext-noframework": "ഈ താൾ ജാവാസ്ക്രിപ്റ്റ് പരീക്ഷണങ്ങൾ നടത്താനായി മാറ്റിവെച്ചിരിക്കുന്നതാണ്.",
"javascripttest-pagetext-unknownframework": "അപരിചിതമായ പരീക്ഷണ ചട്ടക്കൂട് \"$1\".",
+ "javascripttest-pagetext-unknownaction": "അജ്ഞാതമായ പ്രവൃത്തി \"$1\".",
"javascripttest-pagetext-frameworks": "താഴെക്കൊടുത്തിരിക്കുന്നവയിൽ ഒരു പരീക്ഷണ ചട്ടക്കൂട് തിരഞ്ഞെടുക്കുക: $1",
"javascripttest-pagetext-skins": "പരീക്ഷണങ്ങൾ നടത്താനുള്ള ദൃശ്യരൂപം തിരഞ്ഞെടുക്കുക:",
"javascripttest-qunit-intro": "mediawiki.org-ലെ [$1 പരീക്ഷണ സഹായി] കാണുക.",
- "javascripttest-qunit-heading": "മീഡിയവിക്കി ജാവാസ്ക്രിപ്റ്റ് ക്യൂയൂണിറ്റ് പരീക്ഷണോപാധി",
"tooltip-pt-userpage": "താങ്കളുടെ ഉപയോക്തൃതാൾ",
"tooltip-pt-anonuserpage": "താങ്കളുടെ ഐ.പി. വിലാസത്തിന്റെ ഉപയോക്തൃതാൾ",
"tooltip-pt-mytalk": "താങ്കളുടെ സംവാദം താൾ",
@@ -2209,6 +2227,7 @@
"tooltip-pt-mycontris": "താങ്കളുടെ സേവനങ്ങളുടെ പട്ടിക",
"tooltip-pt-login": "ലോഗിൻ ചെയ്യുവാൻ താല്പര്യപ്പെടുന്നു; പക്ഷേ നിർബന്ധമല്ല",
"tooltip-pt-logout": "ലോഗൗട്ട് ചെയ്യാനുള്ള കണ്ണി",
+ "tooltip-pt-createaccount": "നിർബന്ധമില്ലെങ്കിലും, താങ്കൾ ഒരു അംഗത്വമെടുക്കണമെന്നും പ്രവേശിക്കണമെന്നും താത്പര്യപ്പെടുന്നു",
"tooltip-ca-talk": "വിവരദായക താളിനെക്കുറിച്ചുള്ള ചർച്ച",
"tooltip-ca-edit": "താങ്കൾക്ക് ഈ താൾ തിരുത്താവുന്നതാണ്. തിരുത്തിയ താൾ സേവ് ചെയ്യൂന്നതിനു മുൻപ് പ്രിവ്യൂ കാണുക.",
"tooltip-ca-addsection": "പുതിയ വിഭാഗം തുടങ്ങുക",
@@ -2238,6 +2257,7 @@
"tooltip-feed-atom": "ഈ താളിന്റെ ആറ്റം ഫീഡ്",
"tooltip-t-contributions": "ഉപയോക്താവിന്റെ സംഭാവനകളുടെ പട്ടിക കാണുക",
"tooltip-t-emailuser": "ഈ ഉപയോക്താവിനു ഇമെയിൽ അയക്കുക",
+ "tooltip-t-info": "ഈ താളിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾ",
"tooltip-t-upload": "പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുവാൻ",
"tooltip-t-specialpages": "പ്രത്യേകതാളുകളുടെ പട്ടിക",
"tooltip-t-print": "ഈ താളിന്റെ അച്ചടി രൂപം",
@@ -2310,7 +2330,6 @@
"pageinfo-robot-policy": "റോബോട്ടുകളുടെ സൂചികാവത്കരണം",
"pageinfo-robot-index": "അനുവദിച്ചിരിക്കുന്നു",
"pageinfo-robot-noindex": "അനുവദിച്ചിട്ടില്ല",
- "pageinfo-views": "എടുത്തുനോക്കലുകളുടെ എണ്ണം",
"pageinfo-watchers": "താൾ ശ്രദ്ധിക്കുന്നവരുടെ എണ്ണം",
"pageinfo-few-watchers": "{{PLURAL:$1|ശ്രദ്ധിക്കുന്നയാളുടെ|ശ്രദ്ധിക്കുന്നവരുടെ}} എണ്ണം $1 എണ്ണത്തിലും കുറവാണ്",
"pageinfo-redirects-name": "ഈ താളിലേക്കുള്ള തിരിച്ചുവിടലുകളുടെ എണ്ണം",
@@ -2758,7 +2777,6 @@
"exif-urgency-low": "താഴ്‌ന്നത് ($1)",
"exif-urgency-high": "ഉന്നതം ($1)",
"exif-urgency-other": "ഉപയോക്തൃ-നിർവചിത മുൻഗണന ($1)",
- "watchlistall2": "എല്ലാം",
"namespacesall": "എല്ലാം",
"monthsall": "എല്ലാം",
"confirmemail": "ഇമെയിൽ വിലാസം സ്ഥിരീകരിക്കൽ",
@@ -2854,7 +2872,6 @@
"watchlisttools-edit": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക കാണുക, തിരുത്തുക",
"watchlisttools-raw": "താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയുടെ മൂലരൂപം തിരുത്തുക",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|സംവാദം]])",
- "unknown_extension_tag": "അജ്ഞാതമായ അനുബന്ധ റ്റാഗ് \"$1\"",
"duplicate-defaultsort": "'''മുന്നറിയിപ്പ്:''' ക്രമപ്പെടുത്താനുള്ള ചാവിയായ \"$2\" മുമ്പ് ക്രമപ്പെടുത്താനുള്ള ചാവിയായിരുന്ന \"$1\" എന്നതിനെ അതിലംഘിക്കുന്നു.",
"duplicate-displaytitle": "<strong>മുന്നറിയിപ്പ്:</strong> പ്രദർശിപ്പിക്കുന്ന തലക്കെട്ട് \"$2\" മുമ്പ് പ്രദർശിപ്പിച്ചിരുന്ന തലക്കെട്ട് \"$1\" എന്നതിനെ അതിലംഘിക്കുന്നു.",
"version": "പതിപ്പ്",
@@ -2872,7 +2889,7 @@
"version-hook-name": "കൊളുത്തിന്റെ പേര്",
"version-hook-subscribedby": "വരിക്കാരനായത്",
"version-version": "($1)",
- "version-no-ext-name": "[[പേര് നൽകിയിട്ടില്ല]",
+ "version-no-ext-name": "[പേര് നൽകിയിട്ടില്ല]",
"version-license": "മീഡിയവിക്കി ഉപയോഗാനുമതി",
"version-ext-license": "അനുമതി",
"version-ext-colheader-name": "അനുബന്ധം",
@@ -2898,6 +2915,9 @@
"version-entrypoints-header-url": "യു.ആർ.എൽ.",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath ലേഖനപഥം]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath സ്ക്രിപ്റ്റ് പഥം]",
+ "version-libraries": "ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ലൈബ്രറികൾ",
+ "version-libraries-library": "ലൈബ്രറി",
+ "version-libraries-version": "പതിപ്പ്",
"redirect": "പ്രമാണത്താൽ, ഉപയോക്താവിനാൽ, താളിനാൽ അഥവാ നാൾപ്പതിപ്പ് ഐ.ഡി.യാൽ ചെയ്യുന്ന തിരിച്ചുവിടൽ",
"redirect-legend": "ഒരു പ്രമാണത്തിലോട്ടോ താളിലോട്ടോ ഉള്ള തിരിച്ചുവിടൽ",
"redirect-summary": "ഈ പ്രത്യേക താൾ ഒരു പ്രമാണത്തിലേയ്ക്കോ (പ്രമാണത്തിന്റെ പേര് തന്നിട്ടുണ്ട്), ഒരു താളിലേയ്ക്കോ (നാൾപ്പതിപ്പിന്റെ ഐ.ഡി. അല്ലെങ്കിൽ താൾ തന്നിട്ടുണ്ട്), അല്ലെങ്കിൽ ഒരു ഉപയോക്തൃതാളിലേയ്ക്കോ (ഉപയോക്താവിന്റെ സംഖ്യാ ഐ.ഡി. തന്നിട്ടുണ്ട്) തിരിച്ചുവിടുന്നു. ഉപയോഗം: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], അല്ലെങ്കിൽ [[{{#Special:Redirect}}/user/101]].",
@@ -2933,6 +2953,7 @@
"specialpages-group-wiki": "വിവരങ്ങളും ഉപകരണങ്ങളും",
"specialpages-group-redirects": "തിരിച്ചുവിടൽ സംബന്ധിച്ച പ്രത്യേക താളുകൾ",
"specialpages-group-spam": "പാഴെഴുത്ത് ഉപകരണങ്ങൾ",
+ "specialpages-group-developer": "വികസന ഉപകരണങ്ങൾ",
"blankpage": "ശൂന്യതാൾ",
"intentionallyblankpage": "ഈ താൾ മനഃപൂർവ്വം ശൂന്യമായി ഇട്ടിരിക്കുന്നതാണ്‌.",
"external_image_whitelist": "#ഈ വരി ഇതേ പോലെ സൂക്ഷിക്കുക <pre>\n#റെഗുലർ എക്സ്പ്രെഷൻ ഘടകങ്ങൾ (ഭാഗം // എന്നതിന്റെയുള്ളിൽ ആയിരിക്കുന്ന വിധത്തിൽ) താഴെ ചേർക്കുക\n#ഇത് പുറത്തുനിന്നുള്ള (ഹോട്ട്ലിങ്ക്ഡ്) ചിത്രങ്ങളുടെ യൂ.ആർ.എല്ലുമായി ഒത്തുനോക്കുന്നതാണ്.\n#പൊരുത്തപ്പെട്ടു പോകുന്ന യൂ.ആർ.എല്ലുകൾ മാത്രം പ്രദർശിപ്പിക്കും, അല്ലാത്തവ ചിത്രത്തിലേയ്ക്കുള്ള കണ്ണിയായി കാണും\n#കുറിപ്പുകളായി കണക്കാക്കാൻ വരികളുടെയാദ്യം # ചേർക്കുക\n#ഇത് കേസ് സെൻസിറ്റീവ് ആണ്\n\n#എല്ലാ റെജെക്സ് ഘടകങ്ങളും ഈ വരിക്ക് മേലേയായി ചേർക്കുക. ഈ വരി ഇതേ പോലെ നിലനിർത്തുക </pre>",
@@ -2945,12 +2966,33 @@
"tags-tag": "റ്റാഗിന്റെ പേര്‌",
"tags-display-header": "മാറ്റങ്ങളുടെ പട്ടികകളിലെ രൂപം",
"tags-description-header": "അർത്ഥത്തിന്റെ പൂർണ്ണ വിവരണം",
+ "tags-source-header": "സ്രോതസ്സ്",
"tags-active-header": "സീജീവമാണോ?",
"tags-hitcount-header": "അനുബന്ധമുള്ള മാറ്റങ്ങൾ",
+ "tags-actions-header": "പ്രവൃത്തികൾ",
"tags-active-yes": "അതെ",
"tags-active-no": "അല്ല",
+ "tags-source-extension": "ഒരു അനുബന്ധം നിർവ്വചിച്ചിരിക്കുന്നത് പ്രകാരം",
+ "tags-source-manual": "ഉപയോക്താക്കളോ ബോട്ടോ നേരിട്ട് ചെയ്തിട്ടുള്ളവ",
+ "tags-source-none": "ഇപ്പോൾ ഉപയോഗത്തിലില്ല",
"tags-edit": "തിരുത്തുക",
+ "tags-delete": "മായ്ക്കുക",
+ "tags-activate": "സജ്ജമാക്കുക",
+ "tags-deactivate": "പ്രവർത്തനരഹിതമാക്കുക",
"tags-hitcount": "{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}",
+ "tags-manage-no-permission": "മാറ്റ ടാഗുകൾ കൈകാര്യം ചെയ്യാനുള്ള അനുവാദം താങ്കൾക്കില്ല.",
+ "tags-create-heading": "പുതിയൊരു ടാഗ് സൃഷ്ടിക്കുക",
+ "tags-create-explanation": "സ്വതേ, പുതിയതായി സൃഷ്ടിക്കുന്ന ടാഗുകൾ ഉപയോക്താക്കൾക്കും ബോട്ടുകൾക്കും ലഭ്യമായിരിക്കും.",
+ "tags-create-tag-name": "റ്റാഗിന്റെ പേര്‌:",
+ "tags-create-reason": "കാരണം:",
+ "tags-create-submit": "സൃഷ്ടിക്കുക",
+ "tags-create-no-name": "റ്റാഗിന്റെ പേര് വ്യക്തമാക്കേണ്ടതുണ്ട്.",
+ "tags-create-warnings-above": "\"$1\" എന്ന ടാഗ് സൃഷ്ടിക്കാൻ ശ്രമിക്കുമ്പോൾ താഴെക്കൊടുത്തിരിക്കുന്ന {{PLURAL:$2|മുന്നറിയിപ്പ്|മുന്നറിയിപ്പുകൾ}} വന്നു:",
+ "tags-delete-reason": "കാരണം:",
+ "tags-activate-reason": "കാരണം:",
+ "tags-activate-submit": "സജ്ജമാക്കുക",
+ "tags-deactivate-reason": "കാരണം:",
+ "tags-deactivate-submit": "പ്രവർത്തനരഹിതമാക്കുക",
"comparepages": "താളുകൾ താരതമ്യപ്പെടുത്തുക",
"compare-page1": "താൾ 1",
"compare-page2": "താൾ 2",
@@ -2962,8 +3004,8 @@
"compare-revision-not-exists": "താങ്കൾ വ്യക്തമാക്കിയ നാൾപ്പതിപ്പ് നിലവിലില്ല.",
"dberr-problems": "ക്ഷമിക്കണം! ഈ സൈറ്റിൽ സാങ്കേതിക തകരാറുകൾ അനുഭവപ്പെടുന്നുണ്ട്.",
"dberr-again": "കുറച്ച് മിനിട്ടുകൾ കാത്തിരുന്ന് വീണ്ടും തുറക്കുവാൻ ശ്രമിക്കുക.",
- "dberr-info": "(വിവരശേഖര സെർവറുമായി ബന്ധപ്പെടാൻ പറ്റിയില്ല: $1)",
- "dberr-info-hidden": "(ഡേറ്റാബേസ് സെർവറുമായി ബന്ധപ്പെടരുത്)",
+ "dberr-info": "(വിവരശേഖരം എടുക്കാൻ പറ്റിയില്ല: $1)",
+ "dberr-info-hidden": "(വിവരശേഖരം എടുക്കാനാവില്ല)",
"dberr-usegoogle": "അതേസമയം താങ്കൾക്ക് ഗൂഗിൾ വഴി തിരയുവാൻ ശ്രമിക്കാവുന്നതാണ്.",
"dberr-outofdate": "അവരുടെ പക്കലുള്ള നമ്മുടെ ഉള്ളടക്കത്തിന്റെ സൂചികകൾ കാലഹരണപ്പെട്ടതാകാമെന്ന് ഓർക്കുക.",
"dberr-cachederror": "ആവശ്യപ്പെട്ട താളിന്റെ കാഷ് ചെയ്യപ്പെട്ട പകർപ്പാണിത്, ഇത് ഇപ്പോഴുള്ളതാകണമെന്നില്ല.",
@@ -3004,6 +3046,12 @@
"revdelete-uname-unhid": "ഉപയോക്തൃനാമം മറച്ചത് ഒഴിവാക്കിയിരിക്കുന്നു",
"revdelete-restricted": "കാര്യനിർവാഹകർക്ക് പ്രവർത്തന അതിരുകൾ ഏർപ്പെടുത്തിയിരിക്കുന്നു",
"revdelete-unrestricted": "കാര്യനിർവാഹകർക്ക് ഏർപ്പെടുത്തിയ പ്രവർത്തന അതിരുകൾ നീക്കം ചെയ്തിരിക്കുന്നു",
+ "logentry-block-block": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തെ $1 {{GENDER:$2|തടഞ്ഞിരിക്കുന്നു}}",
+ "logentry-block-unblock": "{{GENDER:$4|$3}} എന്ന അംഗത്വത്തെ $1 {{GENDER:$2|തടഞ്ഞിരിക്കുന്നു}}",
+ "logentry-block-reblock": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തിന്റെ തടയൽ സജ്ജീകരണങ്ങൾ $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
+ "logentry-suppress-block": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തെ $1 {{GENDER:$2|തടഞ്ഞിരിക്കുന്നു}}",
+ "logentry-suppress-reblock": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തിന്റെ തടയൽ സജ്ജീകരണങ്ങൾ $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
+ "logentry-merge-merge": "$3 എന്ന താൾ $4 എന്നതിലേക്ക് ($5 നാൾപ്പതിപ്പ് വരെ), $1 {{GENDER:$2|ലയിപ്പിച്ചു}}",
"logentry-move-move": "$1 എന്ന ഉപയോക്താവ് $3 എന്ന താൾ $4 എന്നാക്കി {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
"logentry-move-move-noredirect": "$3 എന്ന താൾ $4 എന്ന തലക്കെട്ടിലേയ്ക്ക് തിരിച്ചുവിടലില്ലാതെ $1 {{GENDER:$2|മാറ്റി}}",
"logentry-move-move_redir": "$3 എന്ന താൾ $4 എന്ന താളിനു മുകളിലേയ്ക്ക്, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
@@ -3015,26 +3063,36 @@
"logentry-newusers-create2": "$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}",
"logentry-newusers-byemail": "$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}, രഹസ്യവാക്ക് ഇമെയിൽ വഴി അയച്ചു",
"logentry-newusers-autocreate": "$1 എന്ന ഉപയോക്തൃ അംഗത്വം സ്വയം {{GENDER:$2|സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു}}",
- "logentry-rights-rights": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്കു, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
+ "logentry-rights-rights": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്ക്, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
"logentry-rights-rights-legacy": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
"logentry-rights-autopromote": "$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയമേവ {{GENDER:$2|ഉയർത്തപ്പെട്ടിരിക്കുന്നു}}",
"logentry-upload-upload": "$1 $3 {{GENDER:$2|അപ്‌ലോഡ് ചെയ്തു}}",
"logentry-upload-overwrite": "$1 ഒരു പുതിയ പതിപ്പ് $3 {{GENDER:$2|അപ്‌ലോഡ് ചെയ്തു}}",
"logentry-upload-revert": "$1 $3 {{GENDER:$2|അപ്‌ലോഡ് ചെയ്തു}}",
"rightsnone": "(ഒന്നുമില്ല)",
+ "revdelete-summary": "തിരുത്തലിന്റെ ചുരുക്കം",
+ "feedback-adding": "താങ്കളുടെ അഭിപ്രായങ്ങൾ താളിലേയ്ക്ക് ചേർക്കുന്നു...",
+ "feedback-back": "പുറകോട്ട്",
+ "feedback-bugcheck": "കൊള്ളാം! [$1 അറിയാവുന്ന ബഗുകളിൽ] ഒന്നല്ല എന്ന് ഒന്നു പരിശോധിച്ചേക്കുക.",
+ "feedback-bugnew": "ഞാൻ പരിശോധിച്ചു. പുതിയൊരു ബഗ് ചേർക്കുക",
"feedback-bugornote": "സാങ്കേതിക പ്രശ്നം എന്താണെന്ന് വിവരിച്ചെഴുതാൻ താങ്കൾ തയ്യാറാണെങ്കിൽ [$1 ബഗ് അറിയിക്കുക].\nഅല്ലെങ്കിൽ താങ്കൾക്ക് താഴെ എളുപ്പത്തിനായി നൽകിയിരിക്കുന്ന ഫോം ഉപയോഗിക്കാം. താങ്കളുടെ കുറിപ്പ് \"[$3 $2]\" താളിൽ, താങ്കളുടെ ഉപയോക്തൃനാമത്തിന്റെയും ഉപയോഗിക്കുന്ന ബ്രൗസറിന്റെ പേരിന്റെയും ഒപ്പം ചേർക്കുന്നതായിരിക്കും.",
- "feedback-subject": "വിഷയം:",
- "feedback-message": "സന്ദേശം:",
"feedback-cancel": "റദ്ദാക്കുക",
- "feedback-submit": "അഭിപ്രായം സമർപ്പിക്കുക",
- "feedback-adding": "താങ്കളുടെ അഭിപ്രായങ്ങൾ താളിലേയ്ക്ക് ചേർക്കുന്നു...",
+ "feedback-close": "ചെയ്തു കഴിഞ്ഞു.",
+ "feedback-external-bug-report-button": "ഒരു സാങ്കേതിക കർത്തവ്യം ചേർക്കുക",
+ "feedback-dialog-title": "അഭിപ്രായം സമർപ്പിക്കുക",
+ "feedback-dialog-intro": "താങ്കളുടെ അഭിപ്രായം സമർപ്പിക്കാൻ താങ്കൾക്ക് താഴെയുള്ള ലളിതമായ ഫോം ഉപയോഗിക്കാം. താങ്കളുടെ കുറിപ്പ് \"$1\" എന്ന താളിൽ താങ്കളുടെ ഉപയോക്തൃനാമത്തോടൊപ്പം ചേർക്കപ്പെടുന്നതാണ്.",
+ "feedback-error-title": "പിഴവ്",
"feedback-error1": "പിഴവ്: എ.പി.ഐ.യിൽ നിന്നും തിരിച്ചറിയാനാകാത്ത ഫലം",
"feedback-error2": "പിഴവ്: തിരുത്തൽ പരാജയപ്പെട്ടു",
"feedback-error3": "പിഴവ്: എ.പി.ഐ.യിൽ നിന്നും യാതൊരു പ്രതികരണവുമില്ല",
+ "feedback-message": "സന്ദേശം:",
+ "feedback-subject": "വിഷയം:",
+ "feedback-submit": "സമർപ്പിക്കുക",
+ "feedback-terms": "എന്റെ ബ്രൗസറും ഓപ്പറേറ്റിങ് സിസ്റ്റവും ഏതാണെന്നും പതിപ്പെന്തെന്നും കൃത്യമായി ഉൾപ്പെട്ടതാണ് എന്റെ യൂസർ ഏജന്റ് വിവരം എന്നും അത് എന്റെ അഭിപ്രായത്തോടൊപ്പം സാർവ്വജനികമായി ലഭ്യമാകത്തക്കവിധത്തിൽ പങ്കുവെയ്ക്കപ്പെടുമെന്നും ഞാൻ മനസ്സിലാക്കുന്നു.",
+ "feedback-termsofuse": "ഉപയോഗനിബന്ധനകൾക്ക് അനുസൃതമായാണ് ഈ അഭിപ്രായം നൽകുന്നതെന്ന് ഞാൻ സമ്മതിക്കുന്നു.",
"feedback-thanks": "നന്ദി! താങ്കളുടെ പ്രതികരണം \"[$2 $1]\" എന്ന താളിൽ പ്രസിദ്ധീകരിച്ചിട്ടുണ്ട്.",
- "feedback-close": "ചെയ്തു കഴിഞ്ഞു.",
- "feedback-bugcheck": "കൊള്ളാം! [$1 അറിയാവുന്ന ബഗുകളിൽ] ഒന്നല്ല എന്ന് ഒന്നു പരിശോധിച്ചേക്കുക.",
- "feedback-bugnew": "ഞാൻ പരിശോധിച്ചു. പുതിയൊരു ബഗ് ചേർക്കുക",
+ "feedback-thanks-title": "നന്ദി!",
+ "feedback-useragent": "യൂസർ ഏജന്റ്:",
"searchsuggest-search": "തിരയുക",
"searchsuggest-containing": "ഉൾപ്പെടുന്നവ...",
"api-error-badaccess-groups": "ഈ വിക്കിയിൽ പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യാൻ താങ്കൾക്കനുവാദമില്ല.",
@@ -3114,6 +3172,8 @@
"expand_templates_generate_xml": "എക്സ്.എം.എൽ. പാഴ്‌സർ ട്രീ പ്രദർശിപ്പിക്കുക",
"expand_templates_generate_rawhtml": "അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ. പ്രദർശിപ്പിക്കുക",
"expand_templates_preview": "എങ്ങനെയുണ്ടെന്നു കാണുക",
+ "expand_templates_preview_fail_html": "<em>{{SITENAME}} സംരംഭത്തിൽ അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ സജ്ജമാക്കിയിരിക്കുന്നതിനാൽ, സെഷൻ വിവരങ്ങൾ നഷ്ടപ്പെട്ടിരിക്കുന്നു, ജാവാസ്ക്രിപ്റ്റ് ആക്രമണങ്ങൾക്കെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ എങ്ങനെയുണ്ടെന്ന് കാണൽ മറച്ചിരിക്കുകയാണ്.</em>\n\n<strong>ഇത് എങ്ങനെയുണ്ടെന്ന് കാണാനുള്ള യഥാർത്ഥശ്രമമാണെങ്കിൽ വീണ്ടും ശ്രമിക്കുക.</strong>\nഇപ്പോഴും പ്രവർത്തിക്കുന്നില്ലെങ്കിൽ, [[Special:UserLogout|പുറത്ത് കടന്ന്]] വീണ്ടും പ്രവേശിച്ച ശേഷം പരീക്ഷിക്കുക.",
+ "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} സംരംഭത്തിൽ അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ സജ്ജമാക്കിയിരിക്കുന്നതിനാൽ, സെഷൻ വിവരങ്ങൾ നഷ്ടപ്പെട്ടിരിക്കുന്നു, ജാവാസ്ക്രിപ്റ്റ് ആക്രമണങ്ങൾക്കെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ എങ്ങനെയുണ്ടെന്ന് കാണൽ മറച്ചിരിക്കുകയാണ്.</em>\n\n<strong>ഇത് എങ്ങനെയുണ്ടെന്ന് കാണാനുള്ള യഥാർത്ഥശ്രമമാണെങ്കിൽ [[Special:UserLogin|പ്രവേശിച്ച ശേഷം]] വീണ്ടും ശ്രമിക്കുക.</strong>",
"pagelanguage": "താളിന്റെ ഭാഷാ തിരഞ്ഞെടുപ്പ് സൗകര്യം",
"pagelang-name": "താൾ",
"pagelang-language": "ഭാഷ",
@@ -3124,8 +3184,57 @@
"log-name-pagelang": "ഭാഷ മാറ്റലിന്റെ രേഖ",
"log-description-pagelang": "താളുകളുടെ ഭാഷകൾ മാറ്റിയതിന്റെ രേഖകൾ ഇവിടെക്കാണാം.",
"logentry-pagelang-pagelang": "$3 എന്ന താളിന്റെ ഭാഷയായിരുന്ന $4, $1 $5 ആയി {{GENDER:$2|മാറ്റി}}.",
- "default-skin-not-found": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കളുടെ ഇൻസ്റ്റലേഷനിൽ താഴെക്കൊടുക്കുന്ന ദൃശ്യരൂപങ്ങൾ ഉണ്ടാകേണ്ടതാണ്. അവ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.\n\n$2\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല.\n\n; മീഡിയവിക്കി താങ്കൾ അപ്ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: മീഡിയവിക്കി 1.24 ഒപ്പം അതിനു ശേഷമുള്ളവയും ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ദൃശ്യരൂപങ്ങൾ സ്വതേ സജ്ജമാക്കുന്നില്ല ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery ദൃശ്യരൂപം ഓട്ടോഡിസ്കവറി സഹായം] കാണുക). ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ദൃശ്യരൂപങ്ങൾ സജ്ജമാക്കുന്നതിനായി ഇനിക്കൊടുക്കുന്ന വരികൾ <code>LocalSettings.php</code> എന്നതിലോട്ട് പകർത്തുക:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code> താളിൽ മാറ്റം വരുത്തിയതേയുള്ളുവെങ്കിൽ:\n: ദൃശ്യരൂപങ്ങളുടെ പേരിൽ അക്ഷരപിശകുകളുണ്ടോയെന്ന് ആവർത്തിച്ച് പരിശോധിക്കുക.",
- "default-skin-not-found-no-skins": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കൾ ദൃശ്യരൂപങ്ങളൊന്നും ഇൻസ്റ്റോൾ ചെയ്തിട്ടില്ല.\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ അല്ലെങ്കിൽ അപ്‌ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല. ദൃശ്യരൂപങ്ങൾ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.",
+ "default-skin-not-found": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കളുടെ ഇൻസ്റ്റലേഷനിൽ താഴെക്കൊടുക്കുന്ന ദൃശ്യരൂപങ്ങൾ ഉണ്ടാകേണ്ടതാണ്. അവ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.\n\n$2\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* ഓരോരോ ദൃശ്യരൂപങ്ങളും ടാർബോളുകളായി ഒറ്റയ്ക്കൊറ്റയ്ക്കും [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org സംരംഭത്തിൽ] നിന്നും ഡൗൺലോഡ് ചെയ്യാവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല.\n\n; മീഡിയവിക്കി താങ്കൾ അപ്ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: മീഡിയവിക്കി 1.24 ഒപ്പം അതിനു ശേഷമുള്ളവയും ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ദൃശ്യരൂപങ്ങൾ സ്വതേ സജ്ജമാക്കുന്നില്ല ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery ദൃശ്യരൂപം ഓട്ടോഡിസ്കവറി സഹായം] കാണുക). ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ദൃശ്യരൂപങ്ങൾ സജ്ജമാക്കുന്നതിനായി ഇനിക്കൊടുക്കുന്ന വരികൾ <code>LocalSettings.php</code> എന്നതിലോട്ട് പകർത്തുക:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code> താളിൽ മാറ്റം വരുത്തിയതേയുള്ളുവെങ്കിൽ:\n: ദൃശ്യരൂപങ്ങളുടെ പേരിൽ അക്ഷരപിശകുകളുണ്ടോയെന്ന് ആവർത്തിച്ച് പരിശോധിക്കുക.",
+ "default-skin-not-found-no-skins": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കൾ ദൃശ്യരൂപങ്ങളൊന്നും ഇൻസ്റ്റോൾ ചെയ്തിട്ടില്ല.\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ അല്ലെങ്കിൽ അപ്‌ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* ഓരോരോ ദൃശ്യരൂപങ്ങളും ടാർബോളുകളായി ഒറ്റയ്ക്കൊറ്റയ്ക്കും [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org സംരംഭത്തിൽ] നിന്നും ഡൗൺലോഡ് ചെയ്യാവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല. ദൃശ്യരൂപങ്ങൾ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [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 ('''സജ്ജമല്ല''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''സജ്ജമല്ല''')",
+ "mediastatistics": "മീഡിയ സ്ഥിതിവിവരക്കണക്കുകൾ",
+ "mediastatistics-summary": "അപ്‌ലോഡ് ചെയ്തിട്ടുള്ള പ്രമാണ തരങ്ങളെക്കുറിച്ചുള്ള സ്ഥിതിവിവരക്കണക്കുകൾ. ഇത് പ്രമാണത്തിന്റെ ഏറ്റവും പുതിയ പതിപ്പ് മാത്രമേ ഉൾക്കൊള്ളുന്നുള്ളു. പഴയ അഥവാ മായ്ക്കപ്പെട്ട പ്രമാണപതിപ്പുകൾ ഉൾക്കൊള്ളുന്നില്ല.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|ഒരു ബൈറ്റ്|$1 ബൈറ്റ്}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "മൈം(MIME) തരം",
+ "mediastatistics-table-extensions": "സാദ്ധ്യതയുള്ള എക്സ്റ്റെൻഷനുകൾ",
+ "mediastatistics-table-count": "പ്രമാണങ്ങളുടെ എണ്ണം",
+ "mediastatistics-table-totalbytes": "ആകെ വലിപ്പം",
+ "mediastatistics-header-unknown": "അജ്ഞാതം",
+ "mediastatistics-header-bitmap": "ബിറ്റ്മാപ് ചിത്രങ്ങൾ",
+ "mediastatistics-header-drawing": "വരകൾ (വെക്റ്റർ ചിത്രങ്ങൾ)",
+ "mediastatistics-header-audio": "ശബ്ദം",
+ "mediastatistics-header-video": "ചലച്ചിത്രങ്ങൾ",
+ "mediastatistics-header-multimedia": "റിച്ച് മീഡിയ",
+ "mediastatistics-header-office": "ആപ്പീസ്",
+ "mediastatistics-header-text": "എഴുത്ത്",
+ "mediastatistics-header-executable": "എക്സിക്യൂട്ടബിളുകൾ",
+ "mediastatistics-header-archive": "ചുരുക്കിയ ഫയൽതരങ്ങൾ",
+ "json-warn-trailing-comma": "ജെസണിൽ നിന്നും $1 എന്നതിന്റെ പിന്നാലെയുള്ള {{PLURAL:$1|കോമ|കോമകൾ}} നീക്കി",
+ "json-error-unknown": "ജെസണിൽ ഒരു പ്രശ്നമുണ്ടായി. പിഴവ്: $1",
+ "json-error-depth": "സ്റ്റാക്കിന്റെ പരമാവധി ആഴം അധികരിച്ചിരിക്കുന്നു",
+ "json-error-state-mismatch": "അസാധുവായ അല്ലെങ്കിൽ തെറ്റായവിധത്തിലുള്ള ജെസൺ",
+ "json-error-ctrl-char": "കണ്ട്രോൾ കാരക്ടർ പിഴവ്, മിക്കവാറും തെറ്റായി എൻകോഡ് ചെയ്യപ്പെട്ടത്",
+ "json-error-syntax": "എഴുത്തുരീതിയിൽ പിഴവ്",
+ "json-error-utf8": "തെറ്റായരൂപത്തിലുള്ള UTF-8 അക്ഷരങ്ങൾ, മിക്കവാറും തെറ്റായി എൻകോഡ് ചെയ്യപ്പെട്ടവ",
+ "json-error-recursion": "എൻകോഡ് ചെയ്യേണ്ട വിലയിൽ ഒന്നോ അതിലധികമോ പുനരാവർത്തിത സൂചകങ്ങൾ",
+ "json-error-inf-or-nan": "എൻകോഡ് ചെയ്യേണ്ട വിലയിൽ ഒന്നോ അതിലധികമോ NAN അല്ലെങ്കിൽ INF വിലകൾ",
+ "headline-anchor-title": "ഈ ഭാഗത്തേക്കുള്ള കണ്ണി",
+ "special-characters-group-latin": "ലാറ്റിൻ",
+ "special-characters-group-latinextended": "ലാറ്റിൻ വിപുലം",
+ "special-characters-group-ipa": "ഐ.പി.എ.",
+ "special-characters-group-symbols": "ചിഹ്നങ്ങൾ",
+ "special-characters-group-greek": "ഗ്രീക്ക്",
+ "special-characters-group-cyrillic": "സിറിലിക്",
+ "special-characters-group-arabic": "അറബിക്",
+ "special-characters-group-arabicextended": "അറബി വിപുലം",
+ "special-characters-group-persian": "പേർഷ്യൻ",
+ "special-characters-group-hebrew": "ഹീബ്രു",
+ "special-characters-group-bangla": "ബംഗ്ലാ",
+ "special-characters-group-tamil": "തമിഴ്",
+ "special-characters-group-telugu": "തെലുങ്ക്",
+ "special-characters-group-sinhala": "സിംഹള",
+ "special-characters-group-gujarati": "ഗുജറാത്തി",
+ "special-characters-group-devanagari": "ദേവനാഗരി",
+ "special-characters-group-thai": "തായ്",
+ "special-characters-group-lao": "ലാവോ",
+ "special-characters-group-khmer": "ഖെമർ",
+ "special-characters-title-endash": "ഇം ഡാഷ്",
+ "special-characters-title-emdash": "എം ഡാഷ്",
+ "special-characters-title-minus": "വ്യവകലന ചിഹ്നം"
}
diff --git a/languages/i18n/mn.json b/languages/i18n/mn.json
index e60c7dc7..7fe9c722 100644
--- a/languages/i18n/mn.json
+++ b/languages/i18n/mn.json
@@ -382,6 +382,8 @@
"gotaccountlink": "Нэвтрэх",
"userlogin-resetlink": "Нэвтрэх мэдээллээ мартаа юу?",
"userlogin-resetpassword-link": "Нууц үгээ мартсан уу?",
+ "userlogin-loggedin": "Та {{GENDER:$1|$1}} нэрээр нэвтэрсэн байна.\nӨөр нэрээр нэвтрэх бол доорх маягтыг ашиглана уу.",
+ "userlogin-createanother": "Өөр бүртгэл үүсгэх",
"createacct-emailrequired": "Цахим шуудангийн хаяг",
"createacct-email-ph": "Цахим шуудангийн хаягаа оруулна уу",
"createacct-another-email-ph": "Цахим шуудангийн хаяг оруулна уу",
@@ -482,7 +484,6 @@
"passwordreset-emailsent-capture": "Доор харуулснаар цахим шуудангийн сануулгыг явууллаа.",
"passwordreset-emailerror-capture": "Цахим шуудангийн сануулга доор харуулсны дагуу хийгдсан боловч $1 хэрэглэгчид хүрч чадсангүй, алдаа гарлаа.",
"changeemail": "Цахим шуудангийн хаяг солих",
- "changeemail-header": "Цахим шуудангийн бүртгэлийн хаяг солих",
"changeemail-text": "Энэ маягтийг бөглөж цахим шуудангийн хаягаа солино уу. Өөрчлөлт хийхийн тулд нууц үгээ оруулна уу.",
"changeemail-no-info": "Энэ хуудсыг үзэхэд хэрэглэгчийн нэрээр орсон байх шаардлагатай.",
"changeemail-oldemail": "Одоогийн цахим шуудан:",
@@ -490,7 +491,6 @@
"changeemail-none": "(байхгүй)",
"changeemail-password": "{{SITENAME}} дахь таны нууц үг:",
"changeemail-submit": "Цахим шуудан солих",
- "changeemail-cancel": "Цуцал",
"bold_sample": "Тодруулсан бичиг",
"bold_tip": "Тодруулсан бичиг",
"italic_sample": "Налуу бичиг",
@@ -731,7 +731,6 @@
"mergehistory-same-destination": "Эх үүсвэр ба зорих хуудсууд ижил байж болохгүй",
"mergehistory-reason": "Шалтгаан:",
"mergelog": "Нэгтгэлийн лог",
- "pagemerge-logentry": "[[$1]]-г [[$2]] руу нэгтгэлээ ($3 хүртэлх засварууд)",
"revertmerge": "Нэгтгэлийг буцаах",
"mergelogpagetext": "Доорх нь нэг хуудасны түүхийг өөр түүхтэй нэгтгэсэн хамгийн сүүлийн нэгтгэлүүд юм.",
"history-title": "\"$1\"-н хянасан түүх",
@@ -776,7 +775,6 @@
"searchrelated": "холбоотой",
"searchall": "бүгдийг",
"showingresults": "Доор #'''$2'''-с эхлэсэн '''$1''' илэрцийг үзүүлж байна.",
- "showingresultsheader": "'''$4''' хайлтын {{PLURAL:$5|'''$3'''-н '''$1''' үр дүн|'''$3'''-н '''$1 - $2''' үр дүн}}",
"search-nonefound": "Хайлтад таарсан үр дүн илэрсэнгүй.",
"powersearch-legend": "Сонгосон хайлт",
"powersearch-ns": "Дараах нэрний зайнуудад хайх:",
@@ -1317,7 +1315,6 @@
"statistics": "Статистик мэдээлэл",
"statistics-header-pages": "Хуудасны статистик",
"statistics-header-edits": "Засварын статистик",
- "statistics-header-views": "Статистикийг үзэх",
"statistics-header-users": "Хэрэглэгчийн статистик",
"statistics-header-hooks": "Өөр статистик",
"statistics-articles": "Агуулгын хуудас",
@@ -1326,12 +1323,9 @@
"statistics-files": "Оруулсан файл",
"statistics-edits": "{{SITENAME}} ашиглаланд орсоноос хойших хуудасны засварын тоо",
"statistics-edits-average": "Хуудас тутмын дундаж засварын тоо",
- "statistics-views-total": "Нийт үзсэн тоо",
- "statistics-views-peredit": "Засвар тутмыг үзсэн тоо",
"statistics-users": "Бүртгэгдсэн [[Special:ListUsers|хэрэглэгч]]",
"statistics-users-active": "Байнгын оролцоотой хэрэглэгч",
"statistics-users-active-desc": "Сүүлийн {{PLURAL:$1|өдөрт|$1 өдөрт}} үйлдэл хийсэн хэрэглэгчид",
- "statistics-mostpopular": "Хамгийн олон удаа үзсэн хуудсууд",
"doubleredirects": "Давхар чиглүүлэгчүүд",
"doubleredirectstext": "Энэ хуудсанд өөр хуудсуудыг давхар заасан хуудсуудыг жагсаасан байна\nМөр тус бүр нь эхний заасан болон түүний дараах заасан хуудсуудыг жагсаан бичсэний сацуу уг хоёр хуудсын эцсийн чиглүүлсэн \"жинхэнэ\" хуудсыг үзүүлсэн байна.",
"double-redirect-fixed-move": "[[$1]] зөөгдөж, [[$2]] руух чиглүүлэгч боллоо",
@@ -1361,7 +1355,6 @@
"uncategorizedtemplates": "Ангилагдаагүй загварууд",
"unusedcategories": "Хоосон анги",
"unusedimages": "Ашиглагдаагүй файлууд",
- "popularpages": "Эрэлттэй хуудсууд",
"wantedcategories": "Хэрэгцээт ангиллууд",
"wantedpages": "Хэрэгцээтэй хуудсууд",
"wantedpages-badtitle": "Үр дүнд хүчингүй гарчиг байв: $1",
@@ -1406,7 +1399,6 @@
"suppress": "Хянан зохицуулагч",
"booksources": "Номон эх сурвалжууд",
"booksources-search-legend": "Номын эх сурвалж хайх",
- "booksources-go": "Үзэх",
"booksources-text": "Доорх нь шинэ, хуучин ном зардаг өөр сайт руу очих холбоосуудын жагсаалт бөгөөд таны хайж буй номнуудын тухай дэлгэрэнгүй мэдээлэл байх магадлалтай:",
"booksources-invalid-isbn": "Өгөгдсөн ISBN хүчингүй юм шиг байна; эх сурвалжаас зөв хуулсан эсэхээ шалгана уу.",
"specialloguserlabel": "Гүйцэтгэсэн:",
@@ -1520,7 +1512,7 @@
"wlheader-enotif": "И-мэйл мэдэгдэл хүчинтэй боллоо.",
"wlheader-showupdated": "Таны хамгийн сүүлд айлчилснаас хойш өөрчлөгдсөн хуудсууд '''тодоор''' бичигдсэн байгаа",
"wlnote": "Энд нь {{PLURAL:$2|цагийн|'''$2''' цагийн}} өмнө хамгийн сүүлд хийсэн {{PLURAL:$1|өөрчлөлт| '''$1''' өөрчлөлтүүд}} байна.",
- "wlshowlast": "Сүүлийн $1 цагийн $2 өдрийн $3-г харуул",
+ "wlshowlast": "Сүүлийн $1 цагийн $2 өдрийн -г харуул",
"watchlist-options": "Хянаж буй хуудсуудын жагсаалтны сонголтууд",
"watching": "Хянаж байна...",
"unwatching": "Хянахаа больж байна...",
@@ -1557,7 +1549,6 @@
"delete-warning-toobig": "Энэ хуудасны засварын түүх маш том байгаа бөгөөд {{PLURAL:$1| гаруй засвар| гаруй засварууд}} байна.\nУстгавал {{SITENAME}}-н мэдээллийн сангийн үйл ажиллагаанд нөлөөлж магадгүй тул та анхаарна уу.",
"deleteprotected": "Энэ хуудас хамгаалалттай тул устгаж болохгүй.",
"rollback": "Засваруудыг буцаах",
- "rollback_short": "Буцаах",
"rollbacklink": "буцаах",
"rollbackfailed": "Буцааж чадсангүй",
"cantrollback": "Засварласан хэсгийг хуучин төлөвт шилжүүлж чадсангүй;\nсүүлчийн засварыг хийгч нь энэ хуудасны цорын ганц бичигч байна.",
@@ -1951,7 +1942,6 @@
"import-logentry-interwiki": "$1-г транс-викидлээ",
"import-logentry-interwiki-detail": "$2-с авсан $1 засвар",
"javascripttest": "JavaScript туршилт",
- "javascripttest-title": "$1 теёт хийж байна",
"javascripttest-pagetext-noframework": "Уг хуудсыг JavaScript тест хийхэд ашиглана.",
"javascripttest-pagetext-unknownframework": "\"$1\" мэдэхгүй тест фреймворк байна.",
"tooltip-pt-userpage": "Таны хэрэглэгчийн хуудас",
@@ -2047,7 +2037,6 @@
"pageinfo-default-sort": "Үндсэн ангилах түлхүүр",
"pageinfo-length": "Хуудасны урт (байтаар)",
"pageinfo-article-id": "Хуудасны ID",
- "pageinfo-views": "Харагдацуудын тоо",
"pageinfo-watchers": "Хуудас хянагчдын тоо",
"pageinfo-subpages-name": "Үүний дэд хуудас",
"pageinfo-firstuser": "Хуудас үүсгэсэн",
@@ -2393,7 +2382,6 @@
"exif-iimcategory-spo": "Спорт",
"exif-iimcategory-war": "Дайн, мөргөлдөөн ба үймээн самуун",
"exif-iimcategory-wea": "Цаг агаар",
- "watchlistall2": "бүгдийг",
"namespacesall": "бүгдийг",
"monthsall": "бүх сар",
"confirmemail": "Мэйл хаягийг баталгаажуулах",
@@ -2466,7 +2454,6 @@
"watchlisttools-view": "Холбогдох өөрчлөлтүүдийг үзэх",
"watchlisttools-edit": "Хянаж буй хуудсуудын жагсаалтаа үзэж засварлах",
"watchlisttools-raw": "Хянаж буй хуудсуудын жагсаалтаа текстээр засварлах",
- "unknown_extension_tag": "Үл мэдэгдэх өргөтгөл таг: \"$1\"",
"duplicate-defaultsort": "'''Анхаар:''' \"$2\" гэсэн default sort key нь \"$1\" гэсэн өмнөх key-н дээгүүр бичигдэх болж байна.",
"version": "Хувилбар",
"version-extensions": "Суулгасан өргөтгөлүүд",
@@ -2482,7 +2469,7 @@
"version-parser-function-hooks": "Парсер функцийн тагууд",
"version-hook-name": "Хүүкийн нэр",
"version-hook-subscribedby": "Захиалсан:",
- "version-version": "(Хувилбар $1)",
+ "version-version": "($1)",
"version-license": "Лиценз",
"version-poweredby-credits": "Энэхүү викиг '''[https://www.mediawiki.org/ MediaWiki]''' програмаар ажиллуулдаг, зохиогчийн эрх © 2001-$1 $2.",
"version-poweredby-others": "бусад",
@@ -2561,6 +2548,7 @@
"logentry-rights-rights-legacy": "$1 $3 дэхь грүпийн гишүүнчлэлээ сольсон",
"logentry-rights-autopromote": "$1 $4 аас $5 руу автоматаар дэвшигдлээ",
"rightsnone": "(байхгүй)",
+ "revdelete-summary": "засварын товч агуулга",
"feedback-cancel": "Болих",
"feedback-close": "Болсон",
"searchsuggest-search": "Хайх",
diff --git a/languages/i18n/mo.json b/languages/i18n/mo.json
index 2b258aae..64e73ff9 100644
--- a/languages/i18n/mo.json
+++ b/languages/i18n/mo.json
@@ -3,9 +3,12 @@
"authors": [
"Comp1089",
"Node ue",
- "לערי ריינהארט"
+ "לערי ריינהארט",
+ "TheChampionMan1234",
+ "아라"
]
},
+ "tog-hideminor": "Аскунде модификэриле миноре ын щимбэре реченте",
"sun": "Дум",
"january": "януарие",
"february": "фебруарие",
@@ -92,7 +95,7 @@
"disclaimers": "Деклараций",
"disclaimerpage": "Project:Декларацие ӂенералэ",
"edithelp": "Ажутор пентру едитаре",
- "mainpage": "Прима паӂина",
+ "mainpage": "Паӂина принчипалэ",
"mainpage-description": "Прима паӂина",
"privacy": "Политика де интимитате",
"privacypage": "Project:Политика де интимитате",
@@ -104,7 +107,7 @@
"editlink": "едитязэ",
"viewsourcelink": "везь сурса",
"editsectionhint": "Едитязэ секциуня: $1",
- "toc": "Таблэ де материй",
+ "toc": "Купринс",
"showtoc": "аратэ",
"hidetoc": "аскунде",
"site-rss-feed": "$1 Агрегат RSS",
@@ -195,7 +198,6 @@
"search-interwiki-more": "(май мулт)",
"powersearch-legend": "Кэутаре авансатэ",
"powersearch-ns": "Кэутаре ын спацииле де нуме:",
- "powersearch-redir": "Афишазэ редиректэриле",
"preferences": "Преферинце",
"mypreferences": "Преферинцеле меле",
"group-sysop": "Администраторь",
@@ -206,7 +208,7 @@
"recentchanges": "Скимбэрь реченте",
"recentchanges-legend": "Опциунь скимбэрь реченте",
"recentchanges-feed-description": "Привеште челе май реченте скимбэрь фолосинд ачест агрегат.",
- "rclistfrom": "Аратэ модификэриле ынчепынд де ла $1",
+ "rclistfrom": "Аратэ модификэриле ынчепынд де ла $3 $2",
"rcshowhideminor": "$1 модификэриле миноре",
"rcshowhidebots": "$1 ботурь",
"rcshowhideliu": "$1 утилизаторь аутентификаць",
@@ -230,7 +232,6 @@
"recentchangeslinked-page": "Нумеле паӂиний:",
"recentchangeslinked-to": "Афишазэ скимбэриле ын паӂиниле каре се лягэ де паӂина датэ",
"upload": "Тримите фишиер",
- "uploadedimage": "а ынкэркат «[[$1]]»",
"file-anchor-link": "Фишиер",
"filehist": "Историкул фишиерулуй",
"filehist-help": "Апасэ пе '''Дата ши ора''' пентру а ведя версиуня тримисэ атунчь.",
@@ -255,10 +256,8 @@
"pager-newer-n": "{{PLURAL:$1|1 май ноу|$1 май ной}}",
"pager-older-n": "{{PLURAL:$1|1|$1}} май векь",
"booksources": "Сурсе де кэрць",
- "booksources-go": "Ду-те",
"log": "Журнале",
"allpages": "Тоате паӂиниле",
- "alphaindexline": "$1 пынэ ла $2",
"prevpage": "Паӂина антериоарэ ($1)",
"allpagesfrom": "Афишазэ паӂиниле порнинд де ла:",
"allpagesto": "Афишазэ паӂиниле терминынд де ла:",
@@ -272,7 +271,7 @@
"watch": "Привеште",
"watchthispage": "Привеште ачастэ паӂинэ",
"unwatch": "Ну май привеште",
- "wlshowlast": "Аратэ ултимеле $1 оре $2 зиле $3",
+ "wlshowlast": "Аратэ ултимеле $1 оре $2 зиле",
"watchlist-options": "Опциуниле листей де паӂинь привите",
"watching": "Привинд...",
"unwatching": "Ну май привинд...",
@@ -408,7 +407,6 @@
"metadata-help": "Ачест фишиер концине информаций суплиментаре, интродусе пробабил де апаратул фотографик диӂитал сау сканерул каре л-а ӂенерат.\nДакэ фишиерул а фост модификат ынтре тимп, есте посибил ка унеле деталий сэ ну май фие валабиле.",
"metadata-expand": "Афишазэ деталий суплиментаре",
"metadata-collapse": "Аскунде деталий суплиментаре",
- "watchlistall2": "тоате",
"namespacesall": "тоате",
"monthsall": "тоате",
"watchlisttools-view": "Везь скимбэриле релеванте",
diff --git a/languages/i18n/mr.json b/languages/i18n/mr.json
index 942ddb76..ead4fefd 100644
--- a/languages/i18n/mr.json
+++ b/languages/i18n/mr.json
@@ -42,7 +42,12 @@
"प्रतिमा",
"शࣿरीहरि",
"संतोष दहिवळ",
- "아라"
+ "아라",
+ "BPositive",
+ "Darshan kandolkar",
+ "Steinsplitter",
+ "Macofe",
+ "Nemo bis"
]
},
"tog-underline": "दुव्यांचे अधोरेखन:",
@@ -242,6 +247,7 @@
"otherlanguages": "इतर भाषांत",
"redirectedfrom": "($1 पासून पुनर्निर्देशित)",
"redirectpagesub": "पुनर्निर्देशनाचे पान",
+ "redirectto": "येथे पुनर्निर्देशित करा:",
"lastmodifiedat": "या पानातील शेवटचा बदल $1 रोजी $2 वाजता केला गेला.",
"viewcount": "हे पान {{PLURAL:$1|एकदा|$1 वेळा}} बघितले गेलेले आहे.",
"protectedpage": "सुरक्षित पृष्ठ",
@@ -419,6 +425,7 @@
"gotaccountlink": "सनोंद-प्रवेश करा",
"userlogin-resetlink": "सनोंद-प्रवेश तपशील विसरला असाल तर येथे टिचकी मारा.",
"userlogin-resetpassword-link": "आपला परवलीचा शब्द विसरलात?",
+ "userlogin-helplink2": "सनोंद प्रवेशासंबंधी मदत",
"userlogin-loggedin": "आपण पुर्वीच {{GENDER:$1|$1}} म्हणून सनोंद प्रवेशित आहात.वेगळ्या सदस्यनावाने सनोंद प्रवेशासाठी खालील आवेदन वापरा.",
"userlogin-createanother": "दुसरे नवीन खाते तयार करा",
"createacct-emailrequired": "विपत्र पत्ता(ई-मेल)",
@@ -486,6 +493,8 @@
"suspicious-userlogout": "तुमच्या सनोंद-निर्गमनास नकार दिल्या गेला कारण असे दिसते की ती विनंती अन-अनुबंधित(डिसकनेक्टेड) न्याहाळकाद्वारे पाठवल्या गेली.",
"createacct-another-realname-tip": "आपले खरे नाव टाकणे वैकल्पिक आहे.\nजर आपण ते द्यायचे ठरविले तर,ते आपल्या कामाचा मूळ स्रोत म्णून देण्यास वापरले जाईल.",
"pt-login": "सनोंद-प्रवेश करा",
+ "pt-login-button": "सनोंद-प्रवेश करा",
+ "pt-createaccount": "खाते बनवा",
"pt-userlogout": "सनोंद-निर्गम",
"php-mail-error-unknown": "पीएचपीच्या विपत्र() पर्यायात अज्ञात चूक",
"user-mail-no-addy": "ईमेल पत्त्या विना ईमेल पाठवण्यचा प्रयत्न केला",
@@ -526,7 +535,6 @@
"passwordreset-emailsent-capture": "'परवलीचा शब्द' पुनर्स्थापनेबाबत एक विपत्र पाठवण्यात आले आहे जे खाली दर्शविण्यात आले आहे.",
"passwordreset-emailerror-capture": "'परवलीचा शब्द' पुनर्स्थापनेबाबत एक विपत्र निर्माण करण्यात आले, जे खाली दर्शविण्यात आले आहे.परंतु,{{GENDER:$2|सदस्य}}ला पाठविणे असफल झाले: $1",
"changeemail": "ई-मेल पत्ता बदला",
- "changeemail-header": "आपल्या खात्याचा ईमेल पत्ता बदला.",
"changeemail-text": "आपला ई-मेल पत्त बदलण्यासाठी हे आवेदनपत्र भरा. या बदलाची पुष्टी करण्यासाठी तुम्हाला तुमचा परवलीचा शब्द टाकावा लागेल.",
"changeemail-no-info": "हे पान थेट बघण्यासठी तुम्हाला सनोंद-प्रवेशित असावे लागेल.",
"changeemail-oldemail": "सध्याचा ईमेल पत्ता :",
@@ -534,7 +542,6 @@
"changeemail-none": "(काहीही नाही)",
"changeemail-password": "तुमचा {{SITENAME}} संकेतांक:",
"changeemail-submit": "ईमेल बदला",
- "changeemail-cancel": "रद्द करा",
"changeemail-throttled": "तुम्ही नुकतेच सनोंद- प्रवेशासाठी अनेक प्रयत्न केले आहेत.\nकृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.",
"resettokens": "ओळखचिन्ह(टोकन) पुनर्स्थापित करा",
"resettokens-text": "येथे आपल्या खात्यात असलेला व्यक्तिगत मजकूरापर्यंत पोचण्यासाठी आपण ओळखचिन्ह(टोकन) पुनर्स्थापित करू शकता.\nआपण जर तो अपघाताने कोणासमवेत सहभागीला असेल किंवा आपले खात्याची आपण तडजोड केली असल्यास, हे करावयास हवे.",
@@ -616,7 +623,7 @@
"token_suffix_mismatch": "'''तुमचे संपादन रद्द करण्यात आलेले आहे कारण तुमच्या क्लायंटनी तुमच्या संपादनातील उद्गारवाचक चिन्हांमध्ये (punctuation) बदल केलेले आहेत.\nपानातील मजकूर खराब होऊ नये यासाठी संपादन रद्द करण्यात आलेले आहे.\nअसे कदाचित तुम्ही अनामिक proxy वापरत असल्याने होऊ शकते.'''",
"edit_form_incomplete": "'''तुमच्या संपादनाचा काही भाग सर्व्हरपर्यंत पोचला नाही; तुमचे संपादन पूर्ण आहे का याची पुन्हा खात्री करा व पुन्हा प्रयत्न करा.'''",
"editing": "$1 चे संपादन होत आहे.",
- "creating": "$1 ची निर्मिती सुरू आहे",
+ "creating": "$1 या लेखाची निर्मिती सुरू आहे",
"editingsection": "$1 (विभाग) संपादन",
"editingcomment": "$1 चे संपादन (प्रतिक्रिया)",
"editconflict": "संपादन मतभेद: $1",
@@ -638,7 +645,7 @@
"templatesusedpreview": "या झलकेमध्ये {{PLURAL:$1|वापरलेला साचा|वापरलेले साचे}}:",
"templatesusedsection": "या विभागामध्ये {{PLURAL:$1|वापरलेला साचा|वापरलेले साचे}}:",
"template-protected": "(सुरक्षित)",
- "template-semiprotected": "(अर्ध-सुरक्षीत)",
+ "template-semiprotected": "(अर्ध-सुरक्षित)",
"hiddencategories": "हे पान खालील {{PLURAL:$1|एका लपविलेल्या वर्गामध्ये|$1 लपविलेल्या वर्गांमध्ये}} आहे:",
"nocreatetext": "{{SITENAME}}वर नवीन लेख लिहिण्यास मज्जाव करण्यात आलेला आहे. आपण परत जाऊन अस्तित्वात असलेल्या लेखांचे संपादन करू शकता अथवा [[Special:UserLogin|नवीन सदस्यत्व घ्या/ प्रवेश करा]].",
"nocreate-loggedin": "येथे तुम्हाला नवीन पाने बनवण्याची परवानगी नाही.",
@@ -796,7 +803,6 @@
"mergehistory-same-destination": "स्रोत व लक्ष्यपाने सारखीच असू शकत नाहीत",
"mergehistory-reason": "कारण:",
"mergelog": "नोंदी एकत्र करा",
- "pagemerge-logentry": "[[$2]]मध्ये[[$1]] समाविष्ट केले ($3पर्यंतची आवर्तने)",
"revertmerge": "अविलीन करा",
"mergelogpagetext": "एका पानाचा इतिहास इतर पानात टाकून अगदी अलीकडे एकत्रित केलेली एकत्रिकरणे निम्न्दर्शीत सूचीमध्ये आहेत.",
"history-title": "\"$1\" चा संपादन इतिहास",
@@ -844,7 +850,6 @@
"searchall": "सर्व",
"showingresults": "#'''$2'''पासून {{PLURAL:$1|'''1'''पर्यंतचा निकाल|'''$1'''पर्यंतचे निकाल}} खाली दाखवले आहे.",
"showingresultsinrange": "खाली #<strong>$2</strong> ते #<strong>$3</strong> पर्यंतच्या कक्षेतील {{PLURAL:$1|<strong>१</strong> निकाल दाखविला आहे|<strong>$1</strong> निकाल दाखविले आहेत}}.",
- "showingresultsheader": "'''$4''' साठी {{PLURAL:$5|'''$3'''पैकी '''$1''' निकाल|'''$3''' पैकी '''$1 - $2''' निकाल}}",
"search-nonefound": "दिलेल्या पृच्छेशी जुळणारे निकाल नाहीत.",
"powersearch-legend": "प्रगत शोध",
"powersearch-ns": "नामविश्वांमध्ये शोधा:",
@@ -1423,14 +1428,11 @@
"randomincategory": "वर्गातील अनियत पान",
"randomincategory-invalidcategory": "\"$1\" हे अधिकृत वर्गाचे नाव नाही.",
"randomincategory-nopages": "[[:Category:$1]] यात काहीच पाने नाहीत.",
- "randomincategory-selectcategory": "वर्ग: $1 $2 मधून अनियत पान उपलब्ध करा.",
- "randomincategory-selectcategory-submit": "जा",
"randomredirect": "अविशिष्ट पुनर्निर्देशन",
"randomredirect-nopages": "$1 या नामविश्वात कोणतीही पुर्ननिर्देशने नाहीत.",
"statistics": "सांख्यिकी",
"statistics-header-pages": "पृष्ठ सांख्यिकी",
"statistics-header-edits": "संपादन सांख्यिकी",
- "statistics-header-views": "सांख्यिकी पहा",
"statistics-header-users": "सदस्य सांख्यिकी",
"statistics-header-hooks": "इतर सांख्यिकी",
"statistics-articles": "आशय पाने",
@@ -1439,13 +1441,9 @@
"statistics-files": "अपभारीत संचिका",
"statistics-edits": "{{SITENAME}} च्या सुरुवातीपासूनची पानांची संपादने",
"statistics-edits-average": "प्रतिपान सरासरी संपादने",
- "statistics-views-total": "सर्व दाखवते",
- "statistics-views-total-desc": "अस्तित्वात नसलेली पाने व विशेष पाने यांची दृष्यता यात अंतर्भूत नाही",
- "statistics-views-peredit": "प्रति संपादनामागे पाहणे",
"statistics-users": "नोंदणीकृत [[Special:ListUsers|सदस्य]]",
"statistics-users-active": "कार्यरत सदस्य",
"statistics-users-active-desc": "{{PLURAL:$1|शेवटच्या दिवसात|शेवटच्या $1 दिवसांत}} एकतरी संपादन केलेले सदस्य",
- "statistics-mostpopular": "सर्वाधिक बघितली जाणारी पाने",
"pageswithprop": "'पृष्ठ गुणधर्म' असणारी पाने",
"pageswithprop-legend": "पृष्ठ गुणधर्म असणारी पाने",
"pageswithprop-text": "या पानावर अश्या पानांची यादी आहे जे एक विशिष्ट 'पृष्ठ गुणधर्म' वापरतात.",
@@ -1486,7 +1484,6 @@
"uncategorizedtemplates": "अवर्गीकृत साचे",
"unusedcategories": "न वापरलेले वर्ग",
"unusedimages": "न वापरलेल्या संचिका",
- "popularpages": "प्रसिद्ध पाने",
"wantedcategories": "पाहिजे असलेले वर्ग",
"wantedpages": "पाहिजे असलेले लेख",
"wantedpages-badtitle": "परिणामाच्या यादीत अवैध शीर्षक: $1",
@@ -1548,7 +1545,7 @@
"querypage-disabled": "हे विषेश पान कार्यमापन (performance) करणांमुळे प्रतिबंधित करण्यात आले आहे.",
"booksources": "पुस्तक स्रोत",
"booksources-search-legend": "पुस्तक स्रोत शोधा",
- "booksources-go": "चला",
+ "booksources-search": "शोधा",
"booksources-text": "खालील यादीत नवी आणिजुनी पुस्तके विकणाऱ्या संकेतस्थळाचे दुवे आहेत,आणि त्यात कदाचित आपण शोधू पहात असलेल्या पुस्तकाची अधिक माहिती असेल:",
"booksources-invalid-isbn": "दिलेला आयएसबीएन वैध नाही; मूळ स्रोतातून उतरवताना झालेल्या चुकांचे निरसन करा.",
"specialloguserlabel": "कार्यकर्ता:",
@@ -1665,7 +1662,7 @@
"wlheader-enotif": "विपत्र अधिसूचना सुविधा शक्य केली.",
"wlheader-showupdated": "ती पाने, जी आपण दिलेल्या शेवटच्या भेटीनंतर बदललेली आहेत, '''ठळक''' दाखवली आहेत.",
"wlnote": "खाली $3, $4 पर्यंतचे गेल्या {{PLURAL:$2| '''१''' तासातील|'''$2''' तासातील}} {{PLURAL:$1|शेवटचा बदल दिला आहे|शेवटाचे '''$1'''बदल दिले आहेत}}.",
- "wlshowlast": "मागील $1 तास $2 दिवस $3 पहा",
+ "wlshowlast": "मागील $1 तास $2 दिवस पहा",
"watchlist-options": "पहाऱ्याच्या सूचीचे पर्याय",
"watching": "पहारा देत आहे...",
"unwatching": "पहारा काढत आहे...",
@@ -1713,7 +1710,6 @@
"delete-warning-toobig": "या पानाला, $1 {{PLURAL:$1|आवृत्ती|आवृत्त्यां}}मुळे तयार झालेला खूप मोठा संपादन इतिहास आहे.त्याचे वगळण्याने {{SITENAME}} वर डाटाबेसच्या क्रियांची उलथापालथ होऊ शकते; सावधगिरीने पुढे जा.",
"deleting-backlinks-warning": "'''ईशारा:''' आपण वगळत असणाऱ्या पानास दुसरी पाने जोडलेली किंवा आंतरविन्यासित आहेत.",
"rollback": "बदल वेगात माघारी न्या",
- "rollback_short": "द्रुतमाघार",
"rollbacklink": "द्रुतमाघार",
"rollbacklinkcount": "उलटवा $1 {{PLURAL:$1|संपादन|संपादने}}",
"rollbacklinkcount-morethan": "$1 पेक्षा अधिक {{PLURAL:$1|संपादन|संपादने}} उलटवा",
@@ -2086,7 +2082,6 @@
"import": "पाने आयात करा",
"importinterwiki": "आंतरविकि आयात",
"import-interwiki-text": "आयात करण्याकरिता एक विकि आणि पानाचा मथळा निवडा.\nआवर्तनांच्या तारखा आणि संपादकांची नावे जतन केली जातील.\nसर्व आंतरविकि आयात क्रिया [[Special:Log/import|आयात नोंदीत]] दाखल केल्या आहेत.",
- "import-interwiki-source": "स्रोत विकी / पान:",
"import-interwiki-history": "या पानाकरिताची साऱ्या इतिहास आवर्तनांची नक्कल करा",
"import-interwiki-templates": "साचे आंतरभूत करा",
"import-interwiki-submit": "आयात",
@@ -2127,18 +2122,14 @@
"import-rootpage-nosubpage": "\"$1\" नामविश्वाची मुल पाने, उपपानास परवानगी देत नाही.",
"importlogpage": "ईम्पोर्ट सूची",
"importlogpagetext": "इतर विकिक्डून पानांची, संपादकीय इतिहासासहीत, प्रबंधकीय आयात.",
- "import-logentry-upload": "संचिका चढवल्याने [[$1]] आयात",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|आवर्तन|आवर्तने}}",
- "import-logentry-interwiki": "आंतरविकिकरण $1",
"import-logentry-interwiki-detail": "$2 पासून $1 {{PLURAL:$1|आवर्तन|आवर्तने}}",
"javascripttest": "जावा स्क्रिप्ट तपासणी",
- "javascripttest-title": "$1 टेस्ट चालू आहेत",
"javascripttest-pagetext-noframework": "हे पान जावा स्क्रिप्ट तपासणी साठी सुरक्षित केले आहे",
"javascripttest-pagetext-unknownframework": "अज्ञात तपासणीचे ठिकाण $1",
"javascripttest-pagetext-frameworks": "कृपया टेस्टिंग साठी पुढील पैकी व्यवस्था / पद्धत निवडावी: $1",
"javascripttest-pagetext-skins": "टेस्ट करण्यासाठी योग्य ती स्कीन निवडावी",
"javascripttest-qunit-intro": "mediawiki.org वर [$1 testing documentation] पहा",
- "javascripttest-qunit-heading": "मीडिया विकी जावा स्क्रिप्ट कयू यूनिट टेस्ट ची जागा",
"tooltip-pt-userpage": "तुमचे सदस्य पान",
"tooltip-pt-anonuserpage": "तुम्ही ज्या अंकपत्त्यान्वये संपादित करत आहात त्याकरिता हे सदस्य पान",
"tooltip-pt-mytalk": "तुमचे चर्चा पान",
@@ -2237,7 +2228,6 @@
"pageinfo-robot-policy": "यंत्रमानवाद्वारे अनुक्रमन",
"pageinfo-robot-index": "अनुमती दिली",
"pageinfo-robot-noindex": "अनुमती दिल्या जात नाही",
- "pageinfo-views": "अभिप्रायांची संख्या",
"pageinfo-watchers": "पानावर पहारा देणाऱ्यांची संख्या",
"pageinfo-few-watchers": "$1 पेक्षा कमी {{PLURAL:$1|पहारेदार}}",
"pageinfo-redirects-name": "या पानास असलेली पुनर्निर्देशनांची संख्या",
@@ -2403,7 +2393,7 @@
"exif-aperturevalue": "रन्ध्र",
"exif-brightnessvalue": "झळाळी",
"exif-exposurebiasvalue": "प्रभावन अभिनत (एक्सपोजर बायस)",
- "exif-maxaperturevalue": "महत्तम जमिनी रन्ध्र(लॅंड ऍपर्चर)",
+ "exif-maxaperturevalue": "महत्तम जमिनी रन्ध्र(लँड ऍपर्चर)",
"exif-subjectdistance": "गोष्टीपासूनचे अंतर",
"exif-meteringmode": "मीटरींग मोड",
"exif-lightsource": "प्रकाश स्रोत",
@@ -2555,7 +2545,7 @@
"exif-exposureprogram-5": "क्रियेटीव्ह कार्यक्रम(विषयाच्या खोलीस बायस्ड)",
"exif-exposureprogram-6": "कृती कार्यक्रम(द्रूत आवर्तद्वार(शटर) वेग कडे बायस्ड)",
"exif-exposureprogram-7": "व्यक्तिचित्र स्थिती(क्लोजप छायाचित्रांकरिता आऊट ऑफ फोकस बॅकग्राऊंड सहीत)",
- "exif-exposureprogram-8": "लॅंडस्केप स्थिती (लॅंडस्केप छायाचित्रांकरिता बॅकग्राऊंड इन फोकस सहीत)",
+ "exif-exposureprogram-8": "लँडस्केप स्थिती (लँडस्केप छायाचित्रांकरिता बॅकग्राऊंड इन फोकस सहीत)",
"exif-subjectdistance-value": "$1 मीटर",
"exif-meteringmode-0": "अज्ञात",
"exif-meteringmode-1": "सरासरी",
@@ -2690,7 +2680,6 @@
"exif-urgency-low": "नीचतम ($1)",
"exif-urgency-high": "उच्चतम ($1)",
"exif-urgency-other": "($1) उपयोगकर्ता-निश्चित प्राधान्य",
- "watchlistall2": "सर्व",
"namespacesall": "सर्व",
"monthsall": "सर्व",
"confirmemail": "ई-मेल पत्ता पडताळून पहा",
@@ -2768,7 +2757,6 @@
"watchlisttools-edit": "पहाऱ्याची सूची पहा आणि संपादित करा",
"watchlisttools-raw": "नित्य पहाण्याची कच्ची-सूची संपादित करा",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|चर्चा]])",
- "unknown_extension_tag": "अज्ञात विस्तार खूण \"$1\"",
"duplicate-defaultsort": "'''ताकिद:''' डिफॉल्ट सॉर्ट की \"$2\" ओवर्राइड्स अर्लीयर डिफॉल्ट सॉर्ट की \"$1\".",
"version": "आवृत्ती",
"version-extensions": "स्थापित विस्तार",
@@ -2778,7 +2766,7 @@
"version-variables": "चल",
"version-antispam": "उत्पात प्रतिबंधन",
"version-other": "इतर",
- "version-mediahandlers": "मिडिया हॅंडलर",
+ "version-mediahandlers": "मिडिया हँडलर",
"version-hooks": "अंकुश",
"version-parser-extensiontags": "पृथकक विस्तारीत खूणा",
"version-parser-function-hooks": "पृथकक कार्य अंकुश",
@@ -2923,19 +2911,20 @@
"logentry-rights-rights-legacy": "$1 ने $3 साठी गट सदस्यता {{GENDER:$2|बदलली}}",
"logentry-rights-autopromote": "$1 ला स्वयंचलितरित्या $4 वरुन $5 ला {{GENDER:$2|बढती दिल्या गेली}}",
"rightsnone": "(काहीही नाही)",
+ "revdelete-summary": "संपादन माहिती",
+ "feedback-adding": "आपला पश्चप्रदाय (फिडबॅक) जोडत आहोत या पानास.......",
+ "feedback-bugcheck": "उत्तम! फक्त एकदा खात्री करा की हा [$1 अगोदरच माहिती असलेला बग] तर नाहीये.",
+ "feedback-bugnew": "मी तपासले आहे. हा एक नवीन बग म्हणून नोंद करावी",
"feedback-bugornote": "जर आपण तांत्रिक प्रश्न विस्तृतपणे मांडण्यास तयार असाल तर कृपया [$1 गणकदोष वृतांत] पाठवा. नपेक्षा, खाली देण्यात आलेले सोपे आवेदनपत्र वापरा. आपली टिप्पणी \"[$3 $2]\" या पानास आपले सदस्यनाव व आपण कोणता ब्राउजर वापरता यासह जोडण्यात येईल.",
- "feedback-subject": "विषय:",
- "feedback-message": "संदेश:",
"feedback-cancel": "रद्द करा",
- "feedback-submit": "प्रतिक्रिया द्या",
- "feedback-adding": "आपला पश्चप्रदाय (फिडबॅक) जोडत आहोत या पानास.......",
+ "feedback-close": "झाले",
"feedback-error1": "चूक: API कडून अनोळखी परिणाम",
"feedback-error2": "त्रुटी: संपादन रद्द",
"feedback-error3": "त्रुटी:एपीआय तर्फे काहीच प्रत्युत्तर नाही",
+ "feedback-message": "संदेश:",
+ "feedback-subject": "विषय:",
+ "feedback-submit": "सादर करा",
"feedback-thanks": " \"[$2 $1]\" या पानात आपला पश्चप्रदाय (फिडबॅक) टाकत आहोत.",
- "feedback-close": "झाले",
- "feedback-bugcheck": "उत्तम! फक्त एकदा खात्री करा की हा [$1 अगोदरच माहिती असलेला बग] तर नाहीये.",
- "feedback-bugnew": "मी तपासले आहे. हा एक नवीन बग म्हणून नोंद करावी",
"searchsuggest-search": "शोधा",
"searchsuggest-containing": ".......हे असलेले",
"api-error-badaccess-groups": "आपणास ह्या विकिवर संचिका चढवण्याची परवानगी नाही",
@@ -3005,5 +2994,25 @@
"expand_templates_remove_comments": "शेरा हटवा",
"expand_templates_remove_nowiki": "निकालात <nowiki>खूणपतका दाखवू नका",
"expand_templates_generate_xml": "XML चा पार्स (parse) वृक्ष दाखवा",
- "expand_templates_preview": "झलक"
+ "expand_templates_preview": "झलक",
+ "special-characters-group-latin": "लॅटीन",
+ "special-characters-group-latinextended": "विस्तारीत लॅटीन भाषा",
+ "special-characters-group-ipa": "आंतरराष्ट्रीय उच्चारानुरूप अक्षरपद्धती",
+ "special-characters-group-symbols": "चिन्ह",
+ "special-characters-group-greek": "ग्रीक भाषा",
+ "special-characters-group-cyrillic": "सिरिलीक",
+ "special-characters-group-arabic": "अरेबिक भाषा",
+ "special-characters-group-arabicextended": "अरबी विस्तारित",
+ "special-characters-group-persian": "फार्सी",
+ "special-characters-group-hebrew": "हिब्रू भाषा",
+ "special-characters-group-bangla": "बंगाली भाषा",
+ "special-characters-group-tamil": "तमिळ",
+ "special-characters-group-telugu": "तेलगु भाषा",
+ "special-characters-group-sinhala": "सिंहला",
+ "special-characters-group-gujarati": "गुजराती भाषा",
+ "special-characters-group-devanagari": "देवनागरी",
+ "special-characters-group-thai": "थाई भाषा",
+ "special-characters-group-lao": "लाऒ भाषा",
+ "special-characters-group-khmer": "ख्मेर",
+ "special-characters-title-minus": "ॠण चिन्ह"
}
diff --git a/languages/i18n/mrj.json b/languages/i18n/mrj.json
index d78e552d..bf16968e 100644
--- a/languages/i18n/mrj.json
+++ b/languages/i18n/mrj.json
@@ -324,7 +324,6 @@
"pager-older-n": "{{PLURAL:$1|тоштырак|тоштыраквлӓ гӹц|тоштыраквлӓ}} $1",
"booksources": "Книгӓн кӹлвлӓжӹ (источник)",
"booksources-search-legend": "Книгӓ гишӓн информацим кӹчӓлмӓш",
- "booksources-go": "Моаш",
"log": "Журналвлӓ",
"allpages": "Цилӓ ӹлӹштӓш",
"prevpage": "Анзыл ӹлӹштӓш ($1)",
@@ -343,7 +342,7 @@
"watchthispage": "Ти ӹлӹштӓшӹм вӓнгӓш",
"unwatch": "Вӓнгӓш агыл",
"watchlist-details": "Тӓмдӓн вӓнгӹмӹ списокыштыда $1 {{PLURAL:$1|ӹлӹштӓш|ӹлӹштӓш|ӹлӹштӓшвлӓ}}, Кӓнгӓшӹмӓш ӹлыштӓшвлӓ гӹц пасна.",
- "wlshowlast": "Анжыкташ эртӹш $1 час $2 кечӹвлӓн $3",
+ "wlshowlast": "Анжыкташ эртӹш $1 час $2 кечӹвлӓн",
"watchlist-options": "Вӓнгӹмӹ списокын настройкыжы",
"watching": "Вӓнгӹмӹ списокыш пырташ...",
"unwatching": "Вӓнгӹмӹ список гӹц карангдаш...",
@@ -496,7 +495,6 @@
"metadata-expand": "Дополнительный информацим анжыкташ",
"metadata-collapse": "Дополнительный информацим шӹлтӓш",
"metadata-fields": "Ти списокышты ылшы метадатывлӓн нырыштым изображенин ӹлӹштӓшӹштӹ анжыктымы лиэш, весӹвлӓжӹ шӹлтӹмӹ лит.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "цилӓ",
"namespacesall": "цилӓ",
"monthsall": "цилӓ",
"watchlisttools-view": "Список гӹц нӓлмӹ ӹлӹштӓшӹштӹш вашталтымашвлӓ",
diff --git a/languages/i18n/ms.json b/languages/i18n/ms.json
index c0b59939..14b518c4 100644
--- a/languages/i18n/ms.json
+++ b/languages/i18n/ms.json
@@ -18,7 +18,8 @@
"Zamwan",
"לערי ריינהארט",
"아라",
- "Pizza1016"
+ "Pizza1016",
+ "Macofe"
]
},
"tog-underline": "Garis bawah pautan:",
@@ -46,7 +47,7 @@
"tog-shownumberswatching": "Tunjukkan bilangan pemantau",
"tog-oldsig": "Tanda tangan yang sedia ada:",
"tog-fancysig": "Anggap tandatangan sebagai teks wiki (tanpa pautan automatik)",
- "tog-uselivepreview": "Gunakan pralihat langsung (dalam percubaan)",
+ "tog-uselivepreview": "Gunakan prebiu langsung",
"tog-forceeditsummary": "Tanya saya jika ringkasan suntingan kosong",
"tog-watchlisthideown": "Sembunyikan suntingan saya daripada senarai pantau",
"tog-watchlisthidebots": "Sembunyikan suntingan bot daripada senarai pantau",
@@ -234,6 +235,7 @@
"pool-queuefull": "Giliran kolam telah penuh",
"pool-errorunknown": "Ralat tak diketahui",
"pool-servererror": "Perkhidmatan kaunter tabung tidak disediakan ($1).",
+ "poolcounter-usage-error": "Ralat penggunaan: $1",
"aboutsite": "Perihal {{SITENAME}}",
"aboutpage": "Project:Perihal",
"copyright": "Kandungan disediakan di bawah $1 melainkan dinyatakan sebaliknya.",
@@ -329,6 +331,8 @@
"filerenameerror": "Nama fail \"$1\" tidak dapat ditukarkan kepada \"$2\".",
"filedeleteerror": "Fail \"$1\" tidak dapat dihapuskan.",
"directorycreateerror": "Direktori \"$1\" gagal diciptakan.",
+ "directoryreadonlyerror": "Direktori \"$1\" boleh dibaca sahaja.",
+ "directorynotreadableerror": "Direktori \"$1\" tidak boleh dibaca.",
"filenotfound": "Fail \"$1\" tidak dijumpai.",
"unexpected": "Nilai tanpa diduga: \"$1\"=\"$2\".",
"formerror": "Ralat: Borang tidak dapat dikirim.",
@@ -350,7 +354,8 @@
"viewsourcetext": "Anda boleh melihat dan menyalin sumber bagi laman ini:",
"viewyourtext": "Anda boleh melihat dan menyalin sumber '''suntingan anda''' kepada laman ini:",
"protectedinterface": "Laman ini menyediakan teks antara muka bagi perisian ini, akan tetapi dikunci untuk menghalang penyalahgunaan.\nUntuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].",
- "editinginterface": "'''Amaran:''' Anda sedang menyunting laman yang digunakan untuk menghasilkan teks antara muka bagi perisian ini. Sebarang perubahan terhadap laman ini akan menjejaskan rupa antara muka bagi pengguna-pengguna lain di wiki ini.\nUntuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].",
+ "editinginterface": "<strong>Amaran:</strong> Anda sedang menyunting halaman yang digunakan untuk menyediakan teks antaramuka untuk perisian berkenaan.\nSebarang suntingan ke atas halaman ini akan memberikan kesan kepada penampilan antaramuka pengguna bagi pengguna-pengguna lain wiki ini.",
+ "translateinterface": "Untuk menambah atau menyunting terjemahan untuk kesemua wiki, sila gunakan [//translatewiki.net/ translatewiki.net], iaitu projek penyetempatan MediaWiki.",
"cascadeprotected": "Laman ini telah dilindungi daripada penyuntingan oleh pengguna selain penyelia, kerana ia termasuk dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi dengan secara \"melata\": $2",
"namespaceprotected": "Anda tidak mempunyai keizinan untuk menyunting laman dalam ruang nama '''$1'''.",
"customcssprotected": "Anda tidak dibenarkan menyunting laman JavaScript ini kerana ia mengandungi tetapan peribadi pengguna lain.",
@@ -407,6 +412,8 @@
"userlogin-resetlink": "Lupa nama pengguna/kata laluan anda?",
"userlogin-resetpassword-link": "Lupa kata laluan anda?",
"userlogin-helplink2": "Bantuan untuk log masuk",
+ "userlogin-loggedin": "Anda sudah log masuk sebagai {{GENDER:$1|$1}}. Gunakan borang di bawah untuk log masuk sebagai pengguna lain.",
+ "userlogin-createanother": "Buka satu lagi akaun",
"createacct-emailrequired": "Alamat e-mel",
"createacct-emailoptional": "Alamat e-mel (pilihan)",
"createacct-email-ph": "Isikan alamt e-mel anda",
@@ -469,6 +476,7 @@
"createaccount-text": "Seseorang telah membuka akaun untuk\nalamat e-mel anda di {{SITENAME}} ($4) dengan nama \"$2\" dan kata laluan \"$3\".\nAnda boleh log masuk dan tukar kata laluan anda sekarang.\n\nSila abaikan mesej ini jika anda tidak meminta untuk membuka akaun tersebut.",
"login-throttled": "Anda telah mencuba log masuk berulang kali.\nSila tunggu $1 dan cuba lagi.",
"login-abort-generic": "Log masuk anda tidak berjaya, dan terpaksa dibatalkan",
+ "login-migrated-generic": "Akaun anda telah dipindahkan dan nama pengguna anda tidak lagi wujud di wiki ini.",
"loginlanguagelabel": "Bahasa: $1",
"suspicious-userlogout": "Permintaan anda untuk log keluar ditolak kerana ia kelihatan seperti dihantar oleh pelayar rosak atau proksi pengagregatan.",
"createacct-another-realname-tip": "Nama sebenar adalah tidak wajib.\nJika anda memilih untuk menyatakannya, ini akan digunakan untuk memberikan atribusi kepada pengguna atas sumbangan mereka.",
@@ -564,9 +572,10 @@
"showpreview": "Paparkan pralihat",
"showdiff": "Lihat perubahan",
"blankarticle": "<strong>Amaran:</strong> Laman yang anda sedang menciptakan adalah kosong.\nJika akan menklik \"{{int:savearticle}}\" sekali lagi, laman ini akan diciptakan tanpa sebarang kandungan.",
- "anoneditwarning": "'''Amaran:''' Anda tidak log masuk. Alamat IP anda akan direkodkan dalam sejarah suntingan laman ini.",
+ "anoneditwarning": "<strong>Amaran:</strong> Anda tidak log masuk. Alamat IP anda akan disiarkan kepada umum jika anda membuat sebarang suntingan. Jika anda <strong>[$1 log masuk]</strong> atau <strong>[$2 membuka akaun]</strong>, suntingan anda akan diatribusikan kepada nama pengguna anda di samping manfaat-manfaat lain.",
"anonpreviewwarning": "''Anda belum log masuk. Jika anda menyimpan laman ini, alamat IP anda akan direkodkan dalam sejarah penyuntingan laman ini.''",
"missingsummary": "'''Peringatan:''' Anda tidak menyatakan ringkasan suntingan. Klik '''Simpan''' sekali lagi untuk menyimpan suntingan ini tanpa ringkasan.",
+ "selfredirect": "<strong>Amaran:</strong> Anda sedang melencongkan laman ini kepada dirinya sendiri.\nMungkin anda telah menyatakan sasaran yang salah untuk lencongan ini ataupun sedang tersalah menyunting halaman.\nJika anda mengklik \"{{int:savearticle}}\" semula, maka lencongan tetap akan dihasilkan.",
"missingcommenttext": "Sila masukkan komen dalam ruangan di bawah.",
"missingcommentheader": "'''Peringatan:''' Anda tidak menyatakan tajuk bagi komen ini. Klik '''{{int:savearticle}}''' sekali lagi untuk menyimpan suntingan ini tanpa tajuk.",
"summary-preview": "Pralihat ringkasan:",
@@ -666,6 +675,10 @@
"content-model-text": "teks biasa",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Objek kosong",
+ "content-json-empty-array": "Tatasusunan kosong",
+ "duplicate-args-category": "Laman yang menggunakan argumen pendua dalam panggilan templat",
+ "duplicate-args-category-desc": "Laman ini mengandungi panggilan templat yang menggunakan pendua argumen seperti <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> atau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Amaran: Laman ini mengandungi terlalu banyak panggilan fungsi penghurai yang intensif.\n\nHad panggilan ialah $2, sekarang terdapat $1 panggilan.",
"expensive-parserfunction-category": "Laman yang mengandungi terlalu banyak panggilan fungsi penghurai yang intensif",
"post-expand-template-inclusion-warning": "Amaran: Saiz penyertaan templat terlalu besar.\nSesetengah templat tidak akan disertakan.",
@@ -720,7 +733,7 @@
"history-feed-empty": "Laman yang diminta tidak wujud.\nMungkin ia telah dihapuskan atau namanya telah ditukar.\nCuba [[Special:Search|cari]] laman lain yang mungkin berkaitan.",
"rev-deleted-comment": "(ringkasan suntingan dibuang)",
"rev-deleted-user": "(nama pengguna dibuang)",
- "rev-deleted-event": "(entri dibuang)",
+ "rev-deleted-event": "(butiran log terpadam)",
"rev-deleted-user-contribs": "[nama pengguna atau alamat IP dibuang - suntingan disembunyikan daripada sumbangan]",
"rev-deleted-text-permission": "Semakan laman ini telah '''dihapuskan'''.\nPerinciannya mungkin ada di dalam [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log penghapusan].",
"rev-suppressed-text-permission": "Semakan bagi laman ini telah <strong>diselindungkan</strong>.\nButiran boleh didapati dalam [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log penyelindungan].",
@@ -754,7 +767,7 @@
"revdelete-legend": "Tetapkan batasan:",
"revdelete-hide-text": "Teks semakan",
"revdelete-hide-image": "Sembunyikan kandungan fail",
- "revdelete-hide-name": "Sembunyikan tindakan dan sasaran",
+ "revdelete-hide-name": "Sembunyikan sasaran dan parameter",
"revdelete-hide-comment": "Ringkasan suntingan",
"revdelete-hide-user": "Nama pengguna/IP penyunting",
"revdelete-hide-restricted": "Sekat data daripada penyelia dan pengguna lain",
@@ -808,7 +821,6 @@
"mergehistory-same-destination": "Laman sasaran tidak boleh sama dengan laman sumber",
"mergehistory-reason": "Sebab:",
"mergelog": "Log penggabungan",
- "pagemerge-logentry": "menggabungkan [[$1]] ke dalam [[$2]] (semakan sehingga $3)",
"revertmerge": "Pisahkan",
"mergelogpagetext": "Yang berikut ialah senarai terkini bagi penggabungan sejarah sesebuah laman ke dalam laman yang lain.",
"history-title": "Sejarah semakan bagi \"$1\"",
@@ -849,6 +861,7 @@
"search-result-category-size": "$1 {{PLURAL:$1|ahli|ahli}} ($2 {{PLURAL:$2|subkategori|subkategori}}, $3 {{PLURAL:$3|fail|fail}})",
"search-redirect": "(pelencongan $1)",
"search-section": "(bahagian $1)",
+ "search-category": "(kategori $1)",
"search-file-match": "(sepadan dengan kandungan fail)",
"search-suggest": "Maksud anda, $1?",
"search-interwiki-caption": "Projek-projek lain",
@@ -859,6 +872,7 @@
"searchall": "semua",
"showingresults": "Yang berikut ialah '''$1''' hasil bermula daripada yang {{PLURAL:$2|pertama|ke-'''$2'''}}.",
"showingresultsinrange": "Yang berikut adalah {{PLURAL:$1|<strong>satu</strong> hasil|sebanyak <strong>$1</strong> hasil}} dalam julat #<strong>$2</strong> hingga #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Hasil <strong>$1</strong> / <strong>$3</strong>|Hasil <strong>$1 - $2</strong> / <strong>$3</strong>}}",
"search-nonefound": "Tiada hasil yang sepadan dengan pertanyaan.",
"powersearch-legend": "Carian lanjutan",
"powersearch-ns": "Cari dalam ruang nama:",
@@ -952,7 +966,7 @@
"gender-female": "Perempuan",
"prefs-help-gender": "Pilihan: Digunakan oleh perisian ini untuk merujuk jantina anda dengan betul. Maklumat ini akan didedahkan kepada awam.",
"email": "E-mel",
- "prefs-help-realname": "Nama sebenar adalah tidak wajib. Jika dinyatakan, ia akan digunakan untuk mengiktiraf karya anda.",
+ "prefs-help-realname": "Nama sebenar adalah tidak wajib.\n\nJika dinyatakan, ia akan digunakan untuk mengiktiraf karya anda.",
"prefs-help-email": "Alamat e-mail adalah tidak wajib, tapi diperlukan untuk set semula kata laluan jika anda terlupa kata laluan anda.",
"prefs-help-email-others": "Anda juga boleh memilih untuk membolehkan pengguna lain menghubungi anda melalui e-mel melalui sebuah pautan pada laman pengguna atau perbincangan anda.\nAlamat e-mel anda tidak didedahkan apabila pengguna lain menghubungi anda.",
"prefs-help-email-required": "Alamat e-mel adalah wajib.",
@@ -973,6 +987,7 @@
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Beza",
"prefs-help-prefershttps": "Keutamaan inu akan berkuatkuasa pada lain kali anda log masuk.",
+ "prefswarning-warning": "Anda telah mengubah suai keutamaan anda yang belum disimpan.\nJika anda meninggalkan laman ini tanpa mengklik \"$1\", keutamaan anda tidak akan disimpan.",
"prefs-tabs-navigation-hint": "Petua: Anda boleh menggunakan kekunci anak panah kiri atau kanan untuk beralihan dari tab ke tab pada senarai tab.",
"email-address-validity-valid": "Alamat e-mel adalah sah",
"email-address-validity-invalid": "Sila masukkan alamat e-mel yang sah",
@@ -1059,6 +1074,7 @@
"right-protect": "Mengubah tahap perlindungan serta menyunting halaman yang dilindungi lata",
"right-editprotected": "Menyunting halaman-halaman yang dilindungi sebagai \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Menyunting halaman-halaman yang dilindungi sebagai \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Menyunting model kandungan laman",
"right-editinterface": "Menyunting antara muka pengguna",
"right-editusercssjs": "Menyunting fail CSS dan JavaScript pengguna lain",
"right-editusercss": "Menyunting fail CSS pengguna lain",
@@ -1086,6 +1102,7 @@
"right-override-export-depth": "Mengeksport laman termasuk laman dipaut sehingga kedalaman 5",
"right-sendemail": "Mengirim e-mel kepada pengguna-pengguna lain",
"right-passwordreset": "Lihat e-mel set semula kata laluan",
+ "right-managechangetags": "Mencipta dan menghapuskan [[Special:Tags|teg]] dari pangkalan data",
"newuserlogpage": "Log akaun baru",
"newuserlogpagetext": "Yang berikut ialah log penciptaan pengguna.",
"rightslog": "Log hak pengguna",
@@ -1131,6 +1148,8 @@
"action-viewmywatchlist": "melihat senarai pantau sendiri",
"action-viewmyprivateinfo": "melihat maklumat peribadi sendiri",
"action-editmyprivateinfo": "menyunting maklumat peribadi sendiri",
+ "action-editcontentmodel": "menyunting model kandungan laman",
+ "action-managechangetags": "mencipta dan menghapuskan teg dari pangkalan data",
"nchanges": "$1 perubahan",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sejak lawatan terakhir}}",
"enhancedrc-history": "sejarah",
@@ -1464,7 +1483,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Statistik halaman",
"statistics-header-edits": "Statistik suntingan",
- "statistics-header-views": "Statistik pandangan",
"statistics-header-users": "Statistik pengguna",
"statistics-header-hooks": "Statistik lain",
"statistics-articles": "Laman kandungan",
@@ -1473,13 +1491,9 @@
"statistics-files": "Fail dimuat naik",
"statistics-edits": "Suntingan laman sejak {{SITENAME}} dibuka",
"statistics-edits-average": "Purata suntingan bagi setiap laman",
- "statistics-views-total": "Jumlah pandangan",
- "statistics-views-total-desc": "Paparan ke laman-laman yang tidak wujud dan laman-laman khas tidak disertakan",
- "statistics-views-peredit": "Pandangan setiap suntingan",
"statistics-users": "[[Special:ListUsers|Pengguna]] berdaftar",
"statistics-users-active": "Pengguna aktif",
"statistics-users-active-desc": "Pengguna yang aktif sejak {{PLURAL:$1|semalam|$1 hari lalu}}",
- "statistics-mostpopular": "Laman dilihat terbanyak",
"pageswithprop": "Laman dengan sifat laman",
"pageswithprop-legend": "Laman dengan sifat laman",
"pageswithprop-text": "Halaman ini menyenaraikan halaman-halaman yang menggunakan sifat halaman yang tertentu.",
@@ -1520,7 +1534,6 @@
"uncategorizedtemplates": "Templat tanpa kategori",
"unusedcategories": "Kategori tidak digunakan",
"unusedimages": "Imej tidak digunakan",
- "popularpages": "Laman popular",
"wantedcategories": "Kategori dikehendaki",
"wantedpages": "Laman dikehendaki",
"wantedpages-badtitle": "Tajuk tidak sah dalam set keputusan: $1",
@@ -1582,9 +1595,11 @@
"pager-older-n": "{{PLURAL:$1|$1 sebelumnya}}",
"suppress": "Kawalan",
"querypage-disabled": "Laman khas ini dilumpuhkan atas sebab-sebab prestasi.",
+ "apihelp": "Bantuan API",
+ "apihelp-no-such-module": "Modul \"$1\" tidak dijumpai.",
"booksources": "Sumber buku",
"booksources-search-legend": "Cari sumber buku",
- "booksources-go": "Pergi",
+ "booksources-search": "Cari",
"booksources-text": "Yang berikut ialah senarai pautan ke tapak web lain yang menjual buku baru dan terpakai,\nserta mungkin mempunyai maklumat lanjut mengenai buku yang anda cari:",
"booksources-invalid-isbn": "ISBN yang dinyatakan tidak sah. Sila semak sekali lagi.",
"specialloguserlabel": "Pelaku:",
@@ -1720,7 +1735,7 @@
"wlheader-enotif": "Pemberitahuan melalui e-mel dibolehkan.",
"wlheader-showupdated": "Laman-laman yang telah diubah sejak kunjungan terakhir anda dipaparkan dalam '''teks tebal'''.",
"wlnote": "Yang berikut ialah <strong>$1</strong> perubahan terakhir sejak $2 jam yang lalu, sehingga $3, $4.",
- "wlshowlast": "Tunjukkan $1 jam / $2 hari yang lalu / $3.",
+ "wlshowlast": "Tunjukkan $2 hari $1 jam yang lalu",
"watchlist-options": "Pilihan senarai pantau",
"watching": "Memantau...",
"unwatching": "Menyahpantau...",
@@ -1769,7 +1784,6 @@
"deleteprotected": "Anda tidak boleh menghapuskan laman ini kerana ia telah dilindungi.",
"deleting-backlinks-warning": "'''Amaran:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Terdapat laman lain]] yang berpaut atau bertransklusi dengan laman yang hendak anda hapus ini.",
"rollback": "Undurkan suntingan.",
- "rollback_short": "Undur",
"rollbacklink": "undur",
"rollbacklinkcount": "mengundurkan $1 {{PLURAL:$1|suntingan}}",
"rollbacklinkcount-morethan": "mengundurkan lebih daripada $1 {{PLURAL:$1|suntingan}}",
@@ -1819,6 +1833,7 @@
"protect-othertime": "Waktu lain:",
"protect-othertime-op": "waktu lain",
"protect-existing-expiry": "Waktu tamat yang telah ditetapkan: $2, $3",
+ "protect-existing-expiry-infinity": "Waktu tamat tempoh sedia ada: tidak terhingga",
"protect-otherreason": "Sebab lain/tambahan:",
"protect-otherreason-op": "Sebab lain",
"protect-dropdown": "*Sebab lazim\n** Laku musnah berlebihan\n** Spam berlebihan\n** Perang sunting yang tidak membina\n** Laman yang terlalu ramai pelawat",
@@ -1963,6 +1978,7 @@
"unblocked": "[[User:$1|$1]] telah dinyahsekat",
"unblocked-range": "$1 telah dinyahsekat",
"unblocked-id": "Sekatan $1 telah dibuang",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] telah dinyahsekat.",
"blocklist": "Pengguna yang disekat",
"ipblocklist": "Alamat IP dan nama pengguna yang disekat",
"ipblocklist-legend": "Cari pengguna yang disekat",
@@ -2141,6 +2157,7 @@
"thumbnail-temp-create": "Fail gambar kenit sementara tidak dapat dibuat",
"thumbnail-dest-create": "Gambar kenit tidak dapat disimpan dalam destinasi",
"thumbnail_invalid_params": "Parameter gambar kenit tidak sah",
+ "thumbnail_toobigimagearea": "Fail dengan dimensi melebihi $1",
"thumbnail_dest_directory": "Direktori destinasi gagal diwujudkan",
"thumbnail_image-type": "Jenis imej tidak disokong",
"thumbnail_gd-library": "Tatarajah perpustakaan GD tidak lengkap: kehilangan fungsi $1",
@@ -2197,13 +2214,12 @@
"import-logentry-interwiki": "$1 dipindahkan ke wiki lain",
"import-logentry-interwiki-detail": "$1 semakan diimportkan daripada $2",
"javascripttest": "Ujian JavaScript",
- "javascripttest-title": "Ujian $1 sedang dijalankan",
"javascripttest-pagetext-noframework": "Laman ini ditempah untuk menjalankan ujian JavaScript.",
"javascripttest-pagetext-unknownframework": "Kerangka \"$1\" tidak dikenali.",
+ "javascripttest-pagetext-unknownaction": "Tindakan \"$1\" tidak dikenali.",
"javascripttest-pagetext-frameworks": "Sila pilih salah satu kerangka yang berikut: $1",
"javascripttest-pagetext-skins": "Sila pilih satu kulit untuk menjalankan ujian:",
"javascripttest-qunit-intro": "Lihat [$1 pendokumenan ujian] di mediawiki.org.",
- "javascripttest-qunit-heading": "Suit ujian MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "Laman pengguna anda",
"tooltip-pt-anonuserpage": "Laman pengguna bagi alamat IP anda",
"tooltip-pt-mytalk": "Laman perbincangan anda",
@@ -2213,6 +2229,7 @@
"tooltip-pt-mycontris": "Senarai sumbangan anda",
"tooltip-pt-login": "Walaupun tidak wajib, anda digalakkan supaya log masuk.",
"tooltip-pt-logout": "Log keluar",
+ "tooltip-pt-createaccount": "Anda digalakkan untuk membuka akaun dan log masuk; namun begitu ianya tidak diwajibkan",
"tooltip-ca-talk": "Perbincangan mengenai laman kandungan",
"tooltip-ca-edit": "Anda boleh menyunting laman ini. Sila tekan butang 'pralihat' terlebih dahulu sebelum menyimpan.",
"tooltip-ca-addsection": "Buka bahagian baru",
@@ -2242,6 +2259,7 @@
"tooltip-feed-atom": "Suapan Atom bagi laman ini",
"tooltip-t-contributions": "Lihat senarai sumbangan pengguna ini",
"tooltip-t-emailuser": "Kirim e-mel kepada pengguna ini",
+ "tooltip-t-info": "Maklumat lanjut mengenai laman ini",
"tooltip-t-upload": "Muat naik imej atau fail media",
"tooltip-t-specialpages": "Senarai laman khas",
"tooltip-t-print": "Versi boleh cetak bagi laman ini",
@@ -2317,7 +2335,6 @@
"pageinfo-robot-policy": "Indeks oleh robot",
"pageinfo-robot-index": "Dibenarkan",
"pageinfo-robot-noindex": "Tidak dibenarkan",
- "pageinfo-views": "Bilangan kunjungan",
"pageinfo-watchers": "Bilangan pemantau halaman",
"pageinfo-few-watchers": "Kurang daripada $1 orang pemantau",
"pageinfo-redirects-name": "Jumlah lencongan ke laman ini",
@@ -2770,7 +2787,6 @@
"exif-urgency-low": "Rendah ($1)",
"exif-urgency-high": "Tinggi ($1)",
"exif-urgency-other": "Keutamaan tentuan pengguna ($1)",
- "watchlistall2": "semua",
"namespacesall": "semua",
"monthsall": "semua",
"confirmemail": "Sahkan alamat e-mel",
@@ -2869,9 +2885,9 @@
"hijri-calendar-m11": "Zulkaedah",
"hijri-calendar-m12": "Zulhijah",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|bincang]])",
- "unknown_extension_tag": "Tag penyambung \"$1\" tidak dikenali",
"duplicate-defaultsort": "'''Amaran''': Kunci susunan asali \"$2\" membatalkan kunci susunan asali \"$1\" yang sebelumnya.",
"duplicate-displaytitle": "<strong>Amaran:</strong> Tajuk paparan \"$2\" mengatasi tajuk paparan awal \"$1\".",
+ "invalid-indicator-name": "<strong>Ramat:</strong> Atribut <code>name</code> penanda status halaman tidak boleh dibiarkan kosong.",
"version": "Versi",
"version-extensions": "Penyambung yang dipasang",
"version-skins": "Rupa-rupa yang telah dipasangkan",
@@ -2886,7 +2902,7 @@
"version-parser-function-hooks": "Penyangkuk fungsi penghurai",
"version-hook-name": "Nama penyangkuk",
"version-hook-subscribedby": "Dilanggan oleh",
- "version-version": "(Versi $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[tiada nama]",
"version-license": "Lesen MediaWiki",
"version-ext-license": "Lesen",
@@ -2913,6 +2929,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Laluan rencana]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Laluan skrip]",
+ "version-libraries": "Perpustakaan terpasang",
+ "version-libraries-library": "Perpustakaan",
+ "version-libraries-version": "Versi",
"redirect": "Lencongkan mengikut ID fail, pengguna, halaman atau semakan",
"redirect-legend": "Lencongkan ke fail atau halaman",
"redirect-summary": "Halaman khas ini melencong kepada fail (dengan nama fail), halaman (dengan ID semakan atau ID halaman) atau halaman pengguna (dengan ID pengguna berangka). Penggunaan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], atau [[{{#Special:Redirect}}/user/101]].",
@@ -2948,6 +2967,7 @@
"specialpages-group-wiki": "Data dan peralatan",
"specialpages-group-redirects": "Laman khas yang melencong",
"specialpages-group-spam": "Alatan spam",
+ "specialpages-group-developer": "Alatan pembangun",
"blankpage": "Laman kosong",
"intentionallyblankpage": "Laman ini sengaja dibiarkan kosong dan digunakan untuk kerja-kerja ujian dan sebagainya.",
"external_image_whitelist": " #Jangan ubah baris ini<pre>\n#Letakkan senarai ungkapan nalar (tidak termasuk apitan //) di baris kosong di bawah\n#Setiap ungkapan akan dipadankan dengan pautan imej luar\n#Pautan yang sepadan sahaja akan dijadikan imej, jika tidak hanya pautan kepada imej akan muncul\n#Baris yang bermula dengan aksara # diabaikan\n#Ini sensitif kepada atur huruf\n\n#Jangan letak ungkapan nalar di bawah baris ini dan jangan ubah baris ini</pre>",
@@ -2960,12 +2980,44 @@
"tags-tag": "Nama label",
"tags-display-header": "Rupa dalam senarai perubahan",
"tags-description-header": "Keterangan makna",
+ "tags-source-header": "Sumber",
"tags-active-header": "Aktif?",
"tags-hitcount-header": "Perubahan",
+ "tags-actions-header": "Tindakan",
"tags-active-yes": "Ya",
"tags-active-no": "Tidak",
+ "tags-source-extension": "Ditetapkan oleh suatu sambungan",
+ "tags-source-manual": "Digunakan secara manual oleh pengguna dan bot",
+ "tags-source-none": "Tidak digunakan lagi",
"tags-edit": "sunting",
+ "tags-delete": "hapuskan",
+ "tags-activate": "hidupkan",
+ "tags-deactivate": "matikan",
"tags-hitcount": "$1 perubahan",
+ "tags-create-explanation": "Secara asali, teg-teg yang baru dicipta akan dibuka untuk kegunaan pengguna dan juga bot.",
+ "tags-create-tag-name": "Nama teg:",
+ "tags-create-reason": "Sebab:",
+ "tags-create-submit": "Cipta",
+ "tags-create-no-name": "Anda mesti menyebut satu nama teg.",
+ "tags-create-invalid-chars": "Nama teg tidak boleh mengandungi tanda koma (<code>,</code>) atau tanda miring (<code>/</code>).",
+ "tags-create-already-exists": "Teg \"$1\" sudah wujud.",
+ "tags-create-warnings-above": "{{PLURAL:$2|Amaran|Amaran-amaran}} berikut ditemui ketika cuba mencipta teg \"$1\":",
+ "tags-create-warnings-below": "Adakah anda hendak bersambung mencipta teg ini?",
+ "tags-delete-explanation-initial": "Anda bakal menghapuskan teg \"$1\" dari pangkalan data.",
+ "tags-delete-explanation-active": "<strong>Teg \"$1\" masih aktif dan akan terus dijalankan di masa akan datang.</strong> Untuk menghentikannya, pergi ke tempat(-tempat) di mana teg ini disetkan untuk dijalankan, dan matikannya di sana.",
+ "tags-delete-reason": "Sebab:",
+ "tags-delete-not-allowed": "Teg-teg yang ditakrifkan oleh sambungan tidak boleh dihapuskan melainkan dibenarkan khususnya oleh sambungan berkenaan.",
+ "tags-delete-not-found": "Teg \"$1\" tidak wujud.",
+ "tags-activate-title": "Hidupkan teg",
+ "tags-activate-question": "Anda bakal menghidupkan teg \"$1\".",
+ "tags-activate-reason": "Sebab:",
+ "tags-activate-not-found": "Teg \"$1\" tidak wujud.",
+ "tags-activate-submit": "Hidupkan",
+ "tags-deactivate-title": "Matikan teg",
+ "tags-deactivate-question": "Anda bakal mematikan teg \"$1\".",
+ "tags-deactivate-reason": "Sebab:",
+ "tags-deactivate-not-allowed": "Teg \"$1\" tidak boleh dimatikan.",
+ "tags-deactivate-submit": "Matikan",
"comparepages": "Perbandingan laman",
"compare-page1": "Laman 1",
"compare-page2": "Laman 2",
@@ -2977,8 +3029,8 @@
"compare-revision-not-exists": "Semakan yang anda nyatakan tidak wujud.",
"dberr-problems": "Harap maaf. Tapak web ini dilanda masalah teknikal.",
"dberr-again": "Cuba tunggu selama beberapa minit dan muat semula.",
- "dberr-info": "(Tidak dapat menghubungi pelayan pangkalan data: $1)",
- "dberr-info-hidden": "(Pelayan pangkalan data tidak dapat dihubungi)",
+ "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.",
@@ -3019,6 +3071,7 @@
"revdelete-uname-unhid": "nama pengguna terdedah",
"revdelete-restricted": "mengenakan sekatan pada penyelia",
"revdelete-unrestricted": "menarik sekatan daripada penyelia",
+ "logentry-merge-merge": "$1 telah {{GENDER:$2|menggabungkan}} $3 ke dalam $4 (pindaan sehingga $5)",
"logentry-move-move": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4",
"logentry-move-move-noredirect": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4 tanpa meninggalkan lencongan",
"logentry-move-move_redir": "$1 telah {{GENDER:$2|memindahkan}} laman $3 ke $4 melalui lencongan",
@@ -3036,20 +3089,26 @@
"logentry-upload-upload": "$1 telah {{GENDER:$2|muat naik}} $3",
"logentry-upload-overwrite": "$1 telah {{GENDER:$2|muat naik}} versi baru $3",
"logentry-upload-revert": "$1 telah {{GENDER:$2|muat naik}} $3",
+ "log-name-managetags": "Log pengurusan teg",
+ "logentry-managetags-create": "$1 {{GENDER:$2|mencipta}} teg \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|menghapuskan}} teg \"$4\" (digugurkan dari $5 {{PLURAL:$5|semakan atau entri log}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|menghidupkan}} teg \"$4\" untuk kegunaan pengguna dan bot",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|mematikan}} teg \"$4\" untuk kegunaan pengguna dan bot",
"rightsnone": "(tiada)",
+ "revdelete-summary": "ringkasan",
+ "feedback-adding": "Maklum balas sedang diisikan ke dalam laman...",
+ "feedback-bugcheck": "Bagus! Cuma pastikan itu bukan salah satu [$1 pepijat] yang sedia diketahui.",
+ "feedback-bugnew": "Saya dah semak. Laporkan pepijat baru",
"feedback-bugornote": "Jika anda bersedia untuk menerangkan masalah teknikal secara terperinci, sila [$1 laporkan pepijat]. \nAtaupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dicatatkan pada laman \"[$3 $2]\", beserta nama pengguna anda dan pelayar yang anda gunakan.",
- "feedback-subject": "Perkara:",
- "feedback-message": "Pesanan:",
"feedback-cancel": "Batalkan",
- "feedback-submit": "Hantar Maklum Balas",
- "feedback-adding": "Maklum balas sedang diisikan ke dalam laman...",
+ "feedback-close": "Siap",
"feedback-error1": "Perhatian: Hasil dari API tidak dikenali",
"feedback-error2": "Perhatian: Penyuntingan gagal",
"feedback-error3": "Perhatian: Tiada gerak balas dari API",
+ "feedback-message": "Pesanan:",
+ "feedback-subject": "Perkara:",
+ "feedback-submit": "Hantar",
"feedback-thanks": "Terima kasih! Maklum balas anda telah dicatatkan pada laman \"[$2 $1]\".",
- "feedback-close": "Siap",
- "feedback-bugcheck": "Bagus! Cuma pastikan itu bukan salah satu [$1 pepijat] yang sedia diketahui.",
- "feedback-bugnew": "Saya dah semak. Laporkan pepijat baru",
"searchsuggest-search": "Cari",
"searchsuggest-containing": "mengandungi...",
"api-error-badaccess-groups": "Anda tidak dibenarkan memuat naik fail di wiki ini.",
@@ -3085,6 +3144,10 @@
"api-error-stashfailed": "Ralat dalaman: pelayan tidak dapat menyimpan fail sementara.",
"api-error-publishfailed": "Ralat dalaman: Pelayan tidak dapat menerbitkan fail sementara.",
"api-error-stasherror": "Terdapat ralat ketika menyimpan fail yang dimuat naik.",
+ "api-error-stashedfilenotfound": "Fail yang disimpan tidak dijumpai apabila cuba untuk memuat naik dari simpanan.",
+ "api-error-stashpathinvalid": "Laluan di mana fail disimpan sepatutnya didapati tidak sah.",
+ "api-error-stashfilestorage": "Terdapat ralat semasa menyimpan fail dalam simpanan.",
+ "api-error-stashzerolength": "Pelayan tidak dapat menyimpan fail, kerana ia mempunyai panjang sifar.",
"api-error-timeout": "Pelayan tidak bergerak balas dalam tempoh yang diharapkan.",
"api-error-unclassified": "Berlakunya ralat yang tidak diketahui",
"api-error-unknown-code": "Ralat tidak diketahui: \"$1\"",
@@ -3139,8 +3202,35 @@
"log-name-pagelang": "Log perubahan bahasa",
"log-description-pagelang": "Ini adalah log untuk perubahan-perubahan bahasa laman.",
"logentry-pagelang-pagelang": "$1 telah {{GENDER:$2|mengubahkan}} bahasa untuk laman $3 dari $4 ke $5.",
- "default-skin-not-found": "Whoops! Rupa asli untuk wiki anda (<code>$wgDefaultSkin</code>), <code>$1</code>, tidak disediakan.\n\nPasangan anda kelihatan untuk mempunyai rupa-rupa berikut. Lihat [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] untuk maklumat cara membolehkan mereka dan memilih yang asli.\n\n$2\n\n; Jika anda baru sahaja memasang MediaWiki:\n: Anda kemungkinan memasang dari git, atau terus dari kod sumber melalui cara lain. Ini adalah dijangka. Cubalah memasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins panduan rupa mediawiki.org], dengan:\n:* Memuat turun [https://www.mediawiki.org/wiki/Download pemasang tarball] yang terlengkap dengan beberapa rupa dan sambungan. Anda boleh menyalin dan menampal direktori <code>skins/</code> terus darinya.\n:* Mengeklon salah satu repositori <code>mediawiki/skins/*</code> melalui git ke dalam direktori <code>skins/</code> pasangan MediaWiki anda.\n: Perbuatan ini tidak patut mengganggu repositori git anda jika anda seorang pembangun MediaWiki.\n\n; Jika anda baru sahaja menaik taraf MediaWiki:\n: MediaWiki 1.24 dan ke atas tidak lagi membolehkan rupa-rupa yang dipasang secara automatik (lihat [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:Skin autodiscovery]). Anda boleh menampalkan baris-baris berikut ke dalam <code>LocalSettings.php</code> untuk membolehkan semua rupa yang semasa dipasang:\n\n<pre>$3</pre>\n\n; Jika anda baru sahaja mengubah <code>LocalSettings.php</code>:\n: Semakkan lagi nama-nama rupa untuk kesalahan ejaan.",
- "default-skin-not-found-no-skins": "Whoops! Rupa asli untuk wiki anda (<code>$wgDefaultSkin</code>), <code>$1</code>, tidak disediakan.\n\nAnda tidak mempunyai rupa-rupa yang dipasang.\n\n; Jika anda baru sahaja memasang atau menaik taraf MediaWiki:\n: Anda kemungkinan memasang dari git, atau terus dari kod sumber melalui cara lain. Ini adalah dijangka. MediaWiki 1.24 dan ke atas tidak memasuki sebarang rupa dalam repositori utama. Cubalah memasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins panduan rupa mediawiki.org], dengan:\n:* Memuat turun [https://www.mediawiki.org/wiki/Download pemasang tarball] yang terlengkap dengan beberapa rupa dan sambungan. Anda boleh menyalin dan menampal direktori <code>skins/</code> terus darinya.\n:* Mengeklon salah satu repositori <code>mediawiki/skins/*</code> melalui git ke dalam direktori <code>skins/</code> pasangan MediaWiki anda.\n: Perbuatan ini tidak patut mengganggu repositori git anda jika anda seorang pembangun MediaWiki. Lihat [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] untuk maklumat cara membolehkan mereka dan memilih yang asli.",
+ "default-skin-not-found": "Whoops! Rupa asli untuk wiki anda yang tertakrif dalam <code dir=\"ltr\">$wgDefaultSkin</code> sebagai <code>$1</code>, tidak disediakan.\n\nPasangan anda kelihatan untuk mempunyai rupa-rupa berikut. Lihat [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] untuk maklumat cara membolehkan mereka dan memilih yang asli.\n\n$2\n\n; Jika anda baru sahaja memasang MediaWiki:\n: Anda kemungkinan memasang dari git, atau terus dari kod sumber melalui cara lain. Ini adalah dijangka. Cubalah memasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins panduan rupa mediawiki.org], dengan:\n:* Memuat turun [https://www.mediawiki.org/wiki/Download pemasang tarball] yang terlengkap dengan beberapa rupa dan sambungan. Anda boleh menyalin dan menampal direktori <code>skins/</code> terus darinya.\n:* Mengklonkan salah satu repositori <code>mediawiki/skins/*</code> melalui git ke dalam direktori <code dir=\"ltr\">skins/</code> pasangan MediaWiki anda.\n: Perbuatan ini tidak patut mengganggu repositori git anda jika anda seorang pembangun MediaWiki.\n\n; Jika anda baru sahaja menaik taraf MediaWiki:\n: MediaWiki 1.24 dan ke atas tidak lagi membolehkan rupa-rupa yang dipasang secara automatik (lihat [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:Skin autodiscovery]). Anda boleh menampalkan baris-baris berikut ke dalam <code>LocalSettings.php</code> untuk membolehkan semua rupa yang semasa dipasang:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Jika anda baru sahaja mengubah <code>LocalSettings.php</code>:\n: Semakkan lagi nama-nama rupa untuk kesalahan ejaan.",
+ "default-skin-not-found-no-skins": "Whoops! Rupa asli untuk wiki anda yang tertakrif dalam <code dir=\"ltr\">$wgDefaultSkin</code> sebagai <code>$1</code>, tidak disediakan.\n\nAnda tidak mempunyai rupa-rupa yang dipasang.\n\n; Jika anda baru sahaja memasang atau menaik taraf MediaWiki:\n: Anda kemungkinan memasang dari git, atau terus dari kod sumber melalui cara lain. Ini adalah dijangka. MediaWiki 1.24 dan ke atas tidak memasuki sebarang rupa dalam repositori utama. Cubalah memasang beberapa rupa dari [https://www.mediawiki.org/wiki/Category:All_skins panduan rupa mediawiki.org], dengan:\n:* Memuat turun [https://www.mediawiki.org/wiki/Download pemasang tarball] yang terlengkap dengan beberapa rupa dan sambungan. Anda boleh menyalin dan menampal direktori <code>skins/</code> terus darinya.\n:* Mengeklon salah satu repositori <code>mediawiki/skins/*</code> melalui git ke dalam direktori <code dir=\"ltr\">skins/</code> pasangan MediaWiki anda.\n: Perbuatan ini tidak patut mengganggu repositori git anda jika anda seorang pembangun MediaWiki. Lihat [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] untuk maklumat cara membolehkan mereka dan memilih yang asli.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (dibolehkan)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dimatikan''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dimatikan''')",
+ "mediastatistics": "Statistik media",
+ "mediastatistics-summary": "Statistik mengenai jenis-jenis fail yang dimuat naik. Ini hanya mencakupi versi terbaru setiap fail. Versi-versi fail yang lama atau terpadam tidak disertakan.",
+ "mediastatistics-nbytes": "$1 bait ($2; $3%)",
+ "mediastatistics-table-mimetype": "Jenis MIME",
+ "mediastatistics-table-extensions": "Sambungan yang dibolehkan",
+ "mediastatistics-table-count": "Bilangan fail",
+ "mediastatistics-table-totalbytes": "Jumlah saiz",
+ "mediastatistics-header-unknown": "Tidak dikenali",
+ "mediastatistics-header-bitmap": "Gambar bitmap",
+ "mediastatistics-header-drawing": "Lukisan (gambar vektor)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Video",
+ "mediastatistics-header-multimedia": "Media kaya",
+ "mediastatistics-header-office": "Office",
+ "mediastatistics-header-text": "Tekstual",
+ "mediastatistics-header-executable": "Fail boleh laksana",
+ "mediastatistics-header-archive": "Format mampat",
+ "json-warn-trailing-comma": "$1 koma pengekor telah digugurkan dari JSON",
+ "json-error-unknown": "Terdapat masalah dengan JSON. Ralat: $1",
+ "json-error-depth": "Kedalaman tindakan maksimum telah dicecah",
+ "json-error-state-mismatch": "JSON tidak sah atau cacat",
+ "json-error-ctrl-char": "Ralat aksara kawalan, mungkin salah dikodkan",
+ "json-error-syntax": "Ralat sintaks",
+ "json-error-utf8": "Aksara UTF-8 cacat, mungkin salah dikodkan",
+ "json-error-recursion": "Sekurang-kurangnya satu rujukan rekursif untuk dikodkan di dalam nilai berkenaan",
+ "json-error-inf-or-nan": "Sekurang-kurangnya satu nilai NAN atau INF untuk dikodkan di dalam nilai berkenaan",
+ "json-error-unsupported-type": "Diberikannya nilai jenis yang tidak boleh dikodkan"
}
diff --git a/languages/i18n/mt.json b/languages/i18n/mt.json
index 1f9e32ab..3c55d64f 100644
--- a/languages/i18n/mt.json
+++ b/languages/i18n/mt.json
@@ -9,7 +9,8 @@
"Urhixidur",
"아라",
"CharlieTheCabbie",
- "Leli Forte"
+ "Leli Forte",
+ "Macofe"
]
},
"tog-underline": "Ħoloq sottolinjati:",
@@ -26,6 +27,7 @@
"tog-watchdefault": "Żid il-paġni u l-fajls li nimmodifika fil-lista ta' osservazzjoni personali",
"tog-watchmoves": "Żid il-paġni u fajls li mmexxi fil-lista ta' osservazzjoni tiegħi",
"tog-watchdeletion": "Żid il-paġni u fajls li nħassar mal-lista ta' osservazzjoni tiegħi",
+ "tog-watchrollback": "Żid il-paġni fejn għamilt treġġigħ lura lejn il-paġna ta' segwimenti tiegħi",
"tog-minordefault": "Immarka awtomatikament kull modifika bħala waħda minuri",
"tog-previewontop": "Uri dehra proviżorja tal-paġna fuq il-kaxxa tal-immodifikar",
"tog-previewonfirst": "Uri dehra proviżorja mal-ewwel modifika",
@@ -211,6 +213,7 @@
"otherlanguages": "F'lingwi oħrajn",
"redirectedfrom": "(Rindirizzat minn $1)",
"redirectpagesub": "Paġna ta' rindirizz",
+ "redirectto": "Rindirizza lejn:",
"lastmodifiedat": "L-aħħar modifika fuq il-paġna: $2, $1.",
"viewcount": "Din il-paġna ġiet aċċessata {{PLURAL:$1|darba|$1 darba}}.",
"protectedpage": "Paġna protetta",
@@ -263,6 +266,9 @@
"hidetoc": "aħbi",
"collapsible-collapse": "Aħbi",
"collapsible-expand": "Espandi",
+ "confirmable-confirm": "Inti{{GENDER:$1|żgur|żgura}}?",
+ "confirmable-yes": "Iva",
+ "confirmable-no": "Le",
"thisisdeleted": "Uri jew ġib lura $1?",
"viewdeleted": "Ara $1?",
"restorelink": "{{PLURAL:$1|waħda mill-modifiki mħassra|$1 modifiki mħassra}}",
@@ -311,6 +317,8 @@
"filerenameerror": "Il-fajl \"$1\" ma setax jiġi msemmi mill-ġdid għal \"$2\".",
"filedeleteerror": "Il-fajl \"$1\" ma setax jiġi mħassar.",
"directorycreateerror": "Id-direttorju \"$1\" ma setax jiġi maħluq.",
+ "directoryreadonlyerror": "Id-direttorju \"$1\" hu għall-qari biss",
+ "directorynotreadableerror": "Id-direttorju \"$1\" ma jistax jinqara.",
"filenotfound": "Il-fajl \"$1\" ma nstabx.",
"unexpected": "Valur mhux mistenni: \"$1\"=\"$2\".",
"formerror": "Problema: il-formula ma setgħatx tiġi proċessata",
@@ -321,22 +329,24 @@
"no-null-revision": "Ma setghitx tinħoloq reviżjoni nulla ġdida għall-paġna \"$1\"",
"badtitle": "Titlu ħażin",
"badtitletext": "It-titlu tal-paġna rikjesta huwa invalidu, vojt, jew ġej minn żball fil-ħolqa bejn siti wiki differenti jew verżjonijiet ta' lingwi differenti tal-istess sit. Jista' wkoll ikollu wieħed jew aktar karattri li ma jistgħux jintużaw għat-titli.",
- "perfcached": "L-informazzjoni li jmiss huwa kopja ''cache'' u jista' ma jkunx aġġornat. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
- "perfcachedts": "Id-dati segwenti huma estratt ta' kopja cache tad-database. L-aħħar aġġornament: $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+ "perfcached": "L-informazzjoni li jmiss ġejja minn kopja ''cache'' u tista' ma tkunx aġġornata. Massimu ta' {{PLURAL:$1|riżultat wieħed hu|$1 riżultati huma}} disponibbli fil-\"cache\".",
+ "perfcachedts": "Id-dejta li jmiss ġejja minn kopja \"cache\" u l-aħħar aġġornament kien: $1. Mhux aktar minn {{PLURAL:$4|riżultat wieħed hu|$4 riżultati huma}} disponibbli fil-\"cache\".",
"querypage-no-updates": "Aġġornamenti għal din il-paġna huma temporalment sospesi. L-Informazzjoni hawnhekk preżentament mhux qiegħed jiġi aġġornat.",
"viewsource": "Ara s-sors",
"viewsource-title": "Ara s-sors ta' $1",
"actionthrottled": "Azzjoni miżmuma",
"actionthrottledtext": "Bħala miżura għal kontra l-ispam, inti limitat li tagħmel din l-azzjoni għal ħafna drabi f'spazju ta' ħin żgħir, u inti qbiżt dan il-limitu.\nJekk jogħġbok erġa' prova fi ftit minuti oħra.",
- "protectedpagetext": "Din il-paġna ġiet protetta sabiex twaqqaf kull tip ta' modifika.",
+ "protectedpagetext": "Din il-paġna ġiet protetta sabiex ma ssirx xi modifika jew xi azzjoni oħra.",
"viewsourcetext": "Tista' tara u tikkopja s-sors ta' din il-paġna:",
"viewyourtext": "Tista' tara u tikkopja s-sors tal-'''modifiki tiegħek''' fuq din il-paġna:",
- "protectedinterface": "Din il-paġna għanda element li tagħmel parti mill-interfaċċa tal-utent tas-software, u għaldaqstant ġiet protetta sabiex ma jkunx hemm abbuż.",
- "editinginterface": "'''Avviż:''' Qiegħed tagħmel modifiki lejn paġna li qiegħda tintuża biex tipprovdi interfaċċa għall-messaġġi tas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-faċċata tal-utenti kollha. Għat-traduzzjonijiet, ikkunsidra l-possibilità li tuża [//translatewiki.net/wiki/Main_Page?setlang=mt translatewiki.net], il-proġett MediaWiki għal-lokalizzazzjoni.",
+ "protectedinterface": "Din il-paġna tipprovdi test ta' interfaċċa għas-softwer fuq dan il-wiki, u għaldaqstant ġiet protetta sabiex ma jkunx hemm abbuż.\nBiex iżżid jew tibdel traduzzjonijiet għall-wikijiet kollha uża [//translatewiki.net/ translatewiki.net], il-proġett ta' lokalizzazzjoni ta' MediaWiki.",
+ "editinginterface": "'''Avviż:''' Qiegħed timmodifika paġna li qiegħda tintuża biex tipprovdi test ta' interfaċċa għas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-interfaċċata tal-utenti kollha ta' dan il-wiki.",
+ "translateinterface": "Biex iżżid jew tibdel it-traduzzjonijiet fuq il-wikijiet kollha, jekk jogħġbok uża [//translatewiki.net/ translatewiki.net], il-proġett ta' lokalizzazzjoni tal-MediaWiki.",
"cascadeprotected": "Din il-paġna ġiet protetta mill-modifiki, minħabba li tinkludi {{PLURAL:$1|paġni, li huwa|paġni, li huma}} protetti bil-preferenza tal-\"kaskata\" mixewla:\n$2",
"namespaceprotected": "Inti m'għandhekx il-permess li timodifika paġni fin-''namespace'' '''$1''.",
"customcssprotected": "M'għandekx il-permessi neċessarji sabiex timmodifika din il-paġna tas-CSS, minħabba li għandha tqegħid personali ta' utent ieħor.",
"customjsprotected": "M'għandekx il-permessi neċessarji sabiex timmodifika din il-paġna tal-JavaScript, minħabba li għandha tqegħid personali ta' utent ieħor.",
+ "mycustomcssprotected": "Ma għandekx permess biex timmodifika din il-paġna CSS.",
"mycustomjsprotected": "Ma għandekx permess li teditja din il-paġna JavaScript.",
"myprivateinfoprotected": "Ma għandekx permess li teditja l-informazzjoni privata tiegħek.",
"mypreferencesprotected": "Ma għandekx permess li teditja l-preferenzi tiegħek.",
@@ -346,7 +356,7 @@
"invalidtitle-knownnamespace": "Titolu validu bin-namespace \"$2\" u t-test\"$3\"",
"invalidtitle-unknownnamespace": "Titolu validu b'numru tan-namespace mhux magħruf $1 u t-test \"$2\"",
"exception-nologin": "Mhux qiegħed fil-kont",
- "exception-nologin-text": "Jekk jogħġbok [[Special:Userlogin|idħol fil-kont tiegħek]] biex tkun tista' taċċessa din il-paġna jew din l-azzjoni.",
+ "exception-nologin-text": "Jekk jogħġbok idħol fil-kont tiegħek biex tkun tista' taċċessa din il-paġna jew din l-azzjoni.",
"exception-nologin-text-manual": "Jekk jogħġbok $1 sabiex tkuu tista' taċċessa din il-paġna jew din l-azzjoni.",
"virus-badscanner": "Problema fil-konfigurazzjoni: antivirus mhux magħruf: ''$1''",
"virus-scanfailed": "Tfittxija falliet (kodiċi $1)",
@@ -388,6 +398,8 @@
"userlogin-resetlink": "Insejt kif tidħol fil-kont tiegħek?",
"userlogin-resetpassword-link": "Insejt il-kelma tad-dħul (password)?",
"userlogin-helplink2": "Għajnuna biex tidħol fil-kont",
+ "userlogin-loggedin": "Diġà dħalt fil-kont bħala {{GENDER:$1|$1}}.\nUża l-formola t'hawn taħt biex tidħol bħala utent ieħor",
+ "userlogin-createanother": "Oħloq kont ieħor",
"createacct-emailrequired": "Indirizz elettroniku",
"createacct-emailoptional": "Indirizz elettroniku (mhux obbligatorju)",
"createacct-email-ph": "Daħħal l-indirizz elettroniku tiegħek",
@@ -433,11 +445,11 @@
"passwordsent": "Il-password il-ġdida ntbagħtet fl-indirizz tal-posta elettronika ta' \"$1\".\nJekk jogħġbok, għamel aċċess wara li tasallek.",
"blocked-mailpassword": "L-indirizz tal-IP tiegħek huwa bblokkjat u miżmum milli jwettaq modifiki. Għaldaqstant, mhuwiex possibli għalik li tuża l-funzjoni sabiex iġġib lura l-password, u dan sabiex ma jkunx hemm abbużi.",
"eauthentsent": "Intbagħtetlek konferma b'permezz ta' messaġġ elettroniku fl-indirizz speċifikat.\nQabel ma tinbagħat xi posta elettronika oħra fuq il-kont, trid issegwi l-istruzzjonijiet indikati fil-messaġġ, sabiex tikkonferma li l-kont huwa tassew tiegħek.",
- "throttled-mailpassword": "Posta elettronika sabiex tfakrek il-password ġiet postjata, fl-aħħar {{PLURAL:$1|siegħa|$1 siegħat}}.\nSabiex jitnaqqas l-abbuż, waħda biss tista' tiġi postjata f'kull {{PLURAL:$1|siegħa|$1 siegħat}}.",
+ "throttled-mailpassword": "Diġà nbagħtitlek messaġġ elettroniku biex ifakkrek il-password, fl-aħħar {{PLURAL:$1|siegħa|$1 sigħat}}.\nSabiex jiġi evitat l-abbuż, password waħda biss tista' tinbagħat kull {{PLURAL:$1|siegħa|$1 sigħat}}.",
"mailerror": "Problema bil-postar tal-messaġġ: $1",
"acct_creation_throttle_hit": "L-utenti ta' din il-wiki li jużaw l-indirizz IP tiegħek ħolqu {{PLURAL:$1|kont|$1 kontijiet}} fl-aħħar ġurnata, li hu n-numru massimu permess f'dan il-perjodu ta' żmien.\nBħala riżultat, il-viżitaturi li jużaw dan l-IP ma jistgħux għall-mument, joħoloqu aktar kontijiet.",
- "emailauthenticated": "L-indirizz tal-posta elettronika tiegħek ġiet konfermat nhar il-$2, fil-$3.",
- "emailnotauthenticated": "L-indirizz tal-posta elettronika tiegħek għadu ma ġiex konfermat. L-ebda posta elettronika mhi se tintbagħat għall-ebda minn dawn il-funzjonijiet elenkati hawn taħt.",
+ "emailauthenticated": "L-indirizz tal-posta elettronika tiegħek ġie kkonfermat nhar il-$2, fil-$3.",
+ "emailnotauthenticated": "L-indirizz tal-posta elettronika tiegħek għadu ma ġiex konfermat. L-ebda posta elettronika mhi se tinbagħat għall-funzjonijiet elenkati hawn taħt.",
"noemailprefs": "Speċifika indirizz ta' posta elettronika sabiex dawn il-faċċilitajiet jaħdmu.",
"emailconfirmlink": "Ikkonferma l-indirizz tal-posta elettronika tiegħek",
"invalidemailaddress": "L-indirizz tal-posta elettronika ma jistax jiġi aċċettat għax jidher li għandu format ħażin.\nJekk jogħġbok daħħal indirizz validu jew inkella ħassru.",
@@ -447,8 +459,9 @@
"accountcreatedtext": "Il-kont tal-utent għal [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskussjoni]]) ġie maħluq.",
"createaccount-title": "Ħolqien tal-kont għal {{SITENAME}}",
"createaccount-text": "Xi ħadd ħoloq kont għall-indirizz tal-posta elettronika tiegħek fuq {{SITENAME}} ($4) bl-isem \"$2\", bil-password: \"$3\".\nHuwa opportun li tidħol issa u tbiddel il-password tiegħek mill-ewwel.\n\nJekk trid tista' ma tagħtix każ dan il-messaġġ, jekk dan il-kont ġie maħluq bi żball.",
- "login-throttled": "Saru ħafna tentattivi riċenti fuq il-password ta' dan il-kont.\nJekk jogħġbok stenna qabel ma terġa' tipprova.",
+ "login-throttled": "Ippruvajt tidħol fl-kont wisq drabi\nJekk jogħġbok stenna $1 qabel ma terġa' tipprova.",
"login-abort-generic": "Il-login ma kienx suċċess - Imħassar",
+ "login-migrated-generic": "Il-kont tiegħek tmexxa u ismek ta' utent m'għadux jeżisti fuq dan il-wiki.",
"loginlanguagelabel": "Lingwa: $1",
"suspicious-userlogout": "Ir-rikjesta tiegħek li toħroġ barra mill-kont tiegħek ġiet miċħuda minħabba li jidher li din intbagħtet minn browser li ma jaħdimx jew minn proxy ta' caching.",
"pt-login": "Idħol",
@@ -499,7 +512,6 @@
"passwordreset-emailsent-capture": "Intbagħtet ittra-e għall-ssettjar mill-ġdid tal-password u l-kontenut jidher hawn taħt.",
"passwordreset-emailerror-capture": "Ġiet ġenerata ittra-e ta' tfakkira, li l-kontenut tagħha jidher hawn taħt. Madanakollu, il-posta ma ntbagħtitx lill-utent: $1",
"changeemail": "Biddel l-indirizz elettroniku",
- "changeemail-header": "Biddel l-indirizz elettroniku tal-kont",
"changeemail-text": "Kompli din il-formola sabiex tbiddel l-indirizz elettroniku. Trid iddaħħal il-password biex tikkonferma din il-bidla.",
"changeemail-no-info": "Trid tkun dħalt fil-kont tiegħek sabiex taċċessa direttament din il-paġna.",
"changeemail-oldemail": "Indirizz elettroniku attwali:",
@@ -507,9 +519,9 @@
"changeemail-none": "(xejn)",
"changeemail-password": "Il-password tiegħek fuq {{SITENAME}}:",
"changeemail-submit": "Biddel l-indirizz elettroniku",
- "changeemail-cancel": "Annulla",
"changeemail-throttled": "Ippruvajt tidħol wisq drabi.\nJekk jogħġbok stenna $1 qabel ma terġa' tipprova.",
"resettokens": "Irrisettja t-tokens",
+ "resettokens-token-label": "$1 (valur attwali: $2)",
"bold_sample": "Tipa ħoxna",
"bold_tip": "Tipa ħoxna",
"italic_sample": "Tipa korsiva",
@@ -536,6 +548,7 @@
"preview": "Dehra proviżorja",
"showpreview": "Dehra proviżorja",
"showdiff": "Uri t-tibdiliet",
+ "blankarticle": "<strong>Attenzjoni:</strong> Il-paġna li qed toħloq vojta.\nMeta terġa' tikklikkja fuq \"{{int:savearticle}}\", il-paġna tinħoloq bla ebda kontenut.",
"anoneditwarning": "'''Attenzjoni:''' Ma dħaltx f'kontok.\nL-indirizz tal-IP tiegħek se jkun jidher pubblikament meta tagħmel xi modifika. Jekk <strong>[$1 tidħol f'kontok]</strong> jew <strong>[$2 toħloq kont]</strong>, il-modifiki li tagħmel jiġu attribwiti lill-ismek ta' utent, flimkien ma benefiċċji oħra.",
"anonpreviewwarning": "''Bħalissa mintix fil-kont tiegħek. Jekk issalva xi modifiki tiegħek, fil-kronoloġija tal-paġna se jiġi reġistrat l-indirizz IP tiegħek.''",
"missingsummary": "'''Twissija:''' Ma pprovdejt l-ebda taqsira dwar il-modifika.\nJekk terġa' tagħfas Modifika, l-modifika se tiġi salvata mingħajr waħda.",
@@ -555,12 +568,12 @@
"loginreqlink": "li tidħol fil-kont tiegħek",
"loginreqpagetext": "Int trid ikollhok $1 sabiex tkun tista' tara paġni oħrajn.",
"accmailtitle": "Il-password intbagħtet.",
- "accmailtext": "Password ġenerata każwalment għal [[User talk:$1|$1]] intbagħtet lil $2.<br />\n\nIl-password għal dan il-kont il-ġdid tista' titbiddel fil-paġna għat-''[[Special:ChangePassword|tibdil tal-password]]''.",
+ "accmailtext": "Intbagħtet lil $2 password iġġenerata każwalment għal [[User talk:$1|$1]] .\nTista' tinbidel fuq il-paġna għat-<em>[[Special:ChangePassword|tibdil tal-password]]</em> wara d-dħul fil-kont.",
"newarticle": "(Ġdid)",
"newarticletext": "Inti segwejt link għal paġna li għadha ma ġietx maħluqa.\nSabiex toħloq il-paġna, ikteb fil-kaxxa li tinsab hawn taħt (ara [$1 paġna tal-għajnuna] għal aktar informazzjoni).\nJekk wasalt hawn biż-żball, agħfas il-buttuna '''lura''' (''back'') fuq il-browser tiegħek.",
"anontalkpagetext": "----''Din hija l-paġna ta' diskussjoni ta' utent anonimu li għadu ma ħoloqx kont, jew inkella li ma jużahx.\nGħaldaqstant biex nidentifikawh ikollna nużaw l-indirizz tal-IP tiegħu/tagħha.\nL-istess indirizz tal-IP jista' jkun użat minn bosta utenti differenti.\nJekk int utent anonimu u tħoss li qiegħed tirċievi kummenti irrelevanti jew li ma jagħmlux sens, jekk jogħġbok [[Special:UserLogin|idħol fil-kont tiegħek]] jew [[Special:UserLogin/signup|oħloq wieħed]] sabiex tevita li fil-futur tiġi konfuż ma' utenti anonimi oħra.''",
"noarticletext": "Bħalissa m'hemm l-ebda test f'din il-paġna.\nInti tista' [[Special:Search/{{PAGENAME}}|tfittex it-titlu ta' din il-paġna]] f'paġni oħra, jew <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati], jew [{{fullurl:{{FULLPAGENAME}}|action=edit}} timmodifika din il-paġna]</span>.",
- "noarticletext-nopermission": "Bħalissa m'hemm l-ebda test f'din il-paġna. Inti tista' [[Special:Search/{{PAGENAME}}|tfittex għal dan it-titlu tal-paġna]] f'paġni oħra, jew <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fittex ir-reġistri relatati]</span>.",
+ "noarticletext-nopermission": "Bħalissa m'hemm l-ebda test f'din il-paġna. Inti tista' [[Special:Search/{{PAGENAME}}|tfittex dan it-titlu tal-paġna]] f'paġni oħra, jew <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati]</span>, imma m'għandikx permess toħloq dil-paġna.",
"missing-revision": "Ir-reviżjoni #$1 tal-paġna bl-isem \"{{FULLPAGENAME}}\" ma teżistix.\n\nDan ħafna drabi jiġri minħabba li tkun segwejt ħolqa lejn paġna mħassra, f'kronoloġija li mhix aġġornata.\nId-detallji tista' ssibhom fir-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} reġistru tat-tħassir].",
"userpage-userdoesnotexist": "Il-kont tal-utent \"<nowiki>$1</nowiki>\" mhux reġistrat.\nJekk jogħġbok, ara jekk verament tridx toħloq/timodifika din il-paġna.",
"userpage-userdoesnotexist-view": "Il-kont tal-utent \"$1\" mhuwiex reġistrat.",
@@ -596,7 +609,7 @@
"copyrightwarning": "Jekk jogħġbok innota li kull kontribuzzjoni li tagħmel lil {{SITENAME}} hija konsidrata li ġiet postjata taħt l-$2 (ara $1 għal aktar informazzjoni).\nJekk inti tixtieq li l-kitba tiegħek ma tiġiex modifikata jew mqassma, jekk jogħġbok tagħmilx modifiki hawnhekk.<br />\nInti qiegħed ukoll qiegħed twiegħed li ktibt dan ix-xogħol int, jew ġibtu minn dominazzjoni pubblika jew resorsi b'xejn simili. <br />\n<br />\n'''TAGĦMILX MODIFIKI LI JINKLUDU XOGĦOL TA' ĦADDIEĦOR BLA PERMESS!'''",
"copyrightwarning2": "Jekk jogħġbok innota li kull kontribuzzjoni li tagħmel lil {{SITENAME}} tista' tiġi modifikata, inbidla, jew imħassra minn kontributuri oħrajn.\nJekk inti tixtieq li l-kitba tiegħek ma tiġiex modifikata jew mqassma, jekk jogħġbok tagħmilx modifiki hawnhekk.<br />\nInti qiegħed ukoll qiegħed twiegħed li ktibt dan ix-xogħol int, jew ġibtu minn dominazzjoni pubblika jew resorsi b'xejn simili. (ara $1 għal aktar informazzjoni) <br />\n<br />\n'''TAGĦMILX MODIFIKI LI JINKLUDU XOGĦOL TA' ĦADDIEĦOR BLA PERMESS!'''",
"longpageerror": "'''PROBLEMA: Il-modifika li għamilt hija twila {{PLURAL:$1|kilobyte waħda|$1 kilobytes}}, li hija iktar mill-massimu ta' {{PLURAL:$1|kilobyte waħda|$2 kilobytes}}.''' Il-modifika ma tistax tiġi salvata.",
- "readonlywarning": "'''TWISSIJA: Id-databażi ġiet imblukkata għall-manutenzjoni, u għaldaqstant m'huwiex possibbli li ssalva l-modifiki tiegħek dal-ħin. Biex ma titlifhomx, għalissa salva xogħlok ġo fajl u ġaladarba terġa' tinfetaħ id-databażi, ikkopja kollox. Grazzi.'''\n\nL-amministratur li mblokkaha offra din ir-raġuni: $1",
+ "readonlywarning": "<strong>Attenzjoni: Il-bażi tad-dejta ġiet imblukkata għall-manutenzjoni, allura ma tistax tissejvja l-modifiki bħalissa.</strong>\nBiex ma titlifhomx tista' tikkopja u tinkolla t-test tiegħek ġo fajl testwali u tissejvjah għal aktar tard.\n\nL-amministratur li mblokkaha offra din ir-raġuni: $1",
"protectedpagewarning": "'''Twissija: Din il-paġna ġiet imblukkata b'tali mod li l-utenti li għandhom il-privileġġi ta' amministratur biss jistgħu jimmodifikawha.'''<br/ >\nL-aħħar daħla fir-reġistru hija disponibbli hawn taħt għar-referenza:",
"semiprotectedpagewarning": "'''Nota:''' Din il-paġna ġiet imblukkata b'tali mod li l-utenti reġistrati biss jistgħu jimmodifikawha. L-aħħar daħla fir-reġistru hija disponibbli hawn taħt bħala referenza:",
"cascadeprotectedwarning": "'''Twissija:''' Din il-paġna ġiet imblukkata sabiex l-utenti li għandhom il-privileġġi ta' amministratur biss ikunu jistgħu jimmodifikawha, minħabba li hija inkluża fil-{{PLURAL:$1|paġna segwenti, li ġiet protetta|paġni segwenti li ġew protetti}}, bil-protezzjoni \"rikorsiva\" tiġi magħżula:",
@@ -623,6 +636,7 @@
"edit-conflict": "Kunflitt tal-editjar.",
"edit-no-change": "Il-modifika li għamilt ġiet injorata, minħabba li ebda bidla ma saret lejn it-test.",
"postedit-confirmation-created": "Il-paġna ġiet maħluqa.",
+ "postedit-confirmation-restored": "Il-paġna ġġeddet.",
"postedit-confirmation-saved": "Il-modifika tiegħek ġiet salvata.",
"edit-already-exists": "Ma tistax tinħoloq din il-paġna.\nDin teżisti diġà.",
"editwarning-warning": "Jekk tħalli din il-paġna jista' jwassal sabiex titlef kwalunkwe tibdil li tkun għamilt. Jekk int tinsab fil-kont tiegħek, tista' tneħħi dan l-avviż fis-sezzjoni \"Modifiki\" tal-preferenzi tiegħek.",
@@ -752,7 +766,6 @@
"mergehistory-same-destination": "Il-paġni tas-sors u tad-destinazzjoni ma jistgħux ikunu l-istess",
"mergehistory-reason": "Raġuni:",
"mergelog": "Twaħħid",
- "pagemerge-logentry": "waħħad [[$1]] ma' [[$2]] (reviżjonijiet sa $3)",
"revertmerge": "Infired",
"mergelogpagetext": "Hawn taħt hawn lista ta' l-aktar tgħaqqid riċenti ta' paġna waħda ta' storja f'oħra.",
"history-title": "Kronoloġija tal-modifiki ta' \"$1\"",
@@ -797,7 +810,6 @@
"searchrelated": "relatati",
"searchall": "kollha",
"showingresults": "Hawn taħt ġie inkluż massimu ta' {{PLURAL:$1|riżultat '''1''' li jibda|'''$1''' riżultat li jibdew}} bin-numru '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Riżultat '''$1''' minn '''$3'''|Riżultati '''$1 - $2''' minn '''$3'''}} għal '''$4'''",
"search-nonefound": "It-tfittxija ma tat l-ebda riżultat.",
"powersearch-legend": "Tfittxija avvanzata",
"powersearch-ns": "Fittex fl-ispazju tal-isem:",
@@ -1309,7 +1321,6 @@
"statistics": "Statistika",
"statistics-header-pages": "Statistika tal-paġna",
"statistics-header-edits": "Statistika tal-immodifikar",
- "statistics-header-views": "Statistika tal-viżwalizzazzjoni",
"statistics-header-users": "Statistika tal-utent",
"statistics-header-hooks": "Statistika oħra",
"statistics-articles": "Paġni ta' kontenut",
@@ -1318,13 +1329,9 @@
"statistics-files": "Fajls imtellgħa",
"statistics-edits": "Total ta' modifiki minn mindu {{SITENAME}} bdiet fil-funzjon",
"statistics-edits-average": "Medja ta' modifiki għal kull paġna",
- "statistics-views-total": "Total ta' viżti",
- "statistics-views-total-desc": "Viżti lejn paġni li ma jeżistux u paġna speċjali mhumiex inklużi.",
- "statistics-views-peredit": "Viżti għal kull modifika",
"statistics-users": "[[Special:ListUsers|Utenti]] reġistrati",
"statistics-users-active": "Utenti attivi",
"statistics-users-active-desc": "Utenti li wettqu azzjoni fl-aħħar {{PLURAL:$1|ġurnata|$1 ġurnata}}",
- "statistics-mostpopular": "Il-paġni l-aktar miżjura",
"pageswithprop": "Paġni bi proprjetà ta' paġna",
"pageswithprop-legend": "Paġni bi proprjetà ta' paġna",
"pageswithprop-text": "Din il-paġna telenka paġni li jużaw proprjetà ta' paġna partikulari.",
@@ -1362,7 +1369,6 @@
"uncategorizedtemplates": "Templates mhux ikkategorizzati",
"unusedcategories": "Kategoriji mhux użati",
"unusedimages": "Fajls mhux użati",
- "popularpages": "L-iktar paġni popolari",
"wantedcategories": "Kategoriji rikjesti",
"wantedpages": "Paġni rikjesti",
"wantedpages-badtitle": "Titlu invalidu fil-grupp ta' riżultati: $1",
@@ -1411,7 +1417,7 @@
"booksources": "Sorsi tal-kotba",
"booksources-search-legend": "Fittex għal sorsi tal-kotba",
"booksources-isbn": "Kodiċi ISBN:",
- "booksources-go": "Mur",
+ "booksources-search": "Fittex",
"booksources-text": "Hawn taħt hawn lista ta' ħoloq għal siti oħrajn li jbiegħu kotba ġodda u wżati, u jistgħu jkollhom aktar informazzjoni dwar il-kotba li qiegħed tfittex:",
"booksources-invalid-isbn": "L-ISBN li ngħata jidher li mhuwiex validu; iċċekkja għal xi żbalji mis-sors oriġinali.",
"specialloguserlabel": "Azzjoni effettwata minn:",
@@ -1527,7 +1533,7 @@
"wlheader-enotif": "In-notifikazzjoni bl-użu tal-posta elettronika hija attivata.",
"wlheader-showupdated": "Il-paġni li ġew editjati wara l-aħħar żjara tiegħek qed jiġu murija b'tipa '''ħoxna'''",
"wlnote": "Hawn taħt hawn {{PLURAL:$1|l-aħħar modifika|l-aħħar '''$1''' modifiki}} fl-aħħar {{PLURAL:$2|siegħa|'''$2''' siegħat}}, sal-$3, fil-$4.",
- "wlshowlast": "Uri l-aħħar $1 siegħat $2 ġranet $3",
+ "wlshowlast": "Uri l-aħħar $1 siegħat $2 ġranet",
"watchlist-options": "Opzjonijiet tal-lista ta' osservazzjoni",
"watching": "Imsegwi...",
"unwatching": "Mhux osservat aktar...",
@@ -1574,7 +1580,6 @@
"delete-toobig": "Din il-paġna għandha kronoloġija ta' modifikar kbira, l-fuq minn $1 {{PLURAL:$1|reviżjoni|reviżjonijiet}}.\nTħassir ta' dawn il-paġni huwa limitat sabiex tnaqqas il-ħolqien aċċidentalment ta' problemi fil-funżjoni tad-database ta' {{SITENAME}}.",
"delete-warning-toobig": "Din il-paġna għandha kronoloġija ta' modifikar kbira, l-fuq minn $1 {{PLURAL:$1|reviżjoni|reviżjonijiet}}.\nTħassara tista' toħloq problema ta' funżjoni fid-database ta' {{SITENAME}}; moħħok hemm.",
"rollback": "Ħassar il-modifiki",
- "rollback_short": "Rollback",
"rollbacklink": "rollback",
"rollbackfailed": "Rollback ma ħadmitx",
"cantrollback": "Impossibli tħassar il-modifiki; l-utent li wettaqhom huwa l-unika li għamel kontributi lil din il-paġna.",
@@ -1618,6 +1623,7 @@
"protect-othertime": "Ħin ieħor:",
"protect-othertime-op": "ħin ieħor",
"protect-existing-expiry": "Skadenza attwali: $2, $3",
+ "protect-existing-expiry-infinity": "Ħin ta' skadenza eżistenti: infinit",
"protect-otherreason": "Raġunijiet oħra/addizzjonali:",
"protect-otherreason-op": "Raġuni oħra",
"protect-dropdown": "*Raġunijiet komuni għall-protezzjoni\n** Vandaliżmu eċċessiv\n** Spamming eċċessiv\n** Gwerrer tal-editjar kontinwi\n** Paġna wżata ħafna",
@@ -1969,9 +1975,7 @@
"import-error-invalid": "Il-paġna \"$1\" ma ġietx impurtata minħabba li isimha hi invalida.",
"importlogpage": "Importazzjoni",
"importlogpagetext": "Importi amministrativi ta' paġni b'kronoloġiji ta' modifiki minn wikis oħrajn.",
- "import-logentry-upload": "importajt [[$1]] bl-użu ta' upload.",
"import-logentry-upload-detail": "{{PLURAL:$1|reviżjoni|$1 reviżjonijiet}}",
- "import-logentry-interwiki": "Trasferixxejt minn wiki ieħor il-paġna $1",
"import-logentry-interwiki-detail": "{{PLURAL:$1|reviżjoni|$1 reviżjonijiet}} minn $2",
"javascripttest": "Testjar tal-JavaScript",
"javascripttest-pagetext-noframework": "Din il-paġna hi riservata għall-eżekuzzjoni tat-testijiet tal-JavaScript.",
@@ -2075,7 +2079,6 @@
"pageinfo-robot-policy": "Stat għall-muturi tat-tfittxija",
"pageinfo-robot-index": "Indiċjabbli",
"pageinfo-robot-noindex": "Mhux indiċjabbli",
- "pageinfo-views": "Numru ta' viżti",
"pageinfo-watchers": "Numru ta' osservaturi tal-paġna",
"pageinfo-redirects-name": "Rindirizzi lejn din il-paġna",
"pageinfo-subpages-name": "Sottopaġni ta' din il-paġna",
@@ -2492,7 +2495,6 @@
"exif-urgency-low": "Baxx ($1)",
"exif-urgency-high": "Għoli ($1)",
"exif-urgency-other": "Prijorità definita mill-utent ($1)",
- "watchlistall2": "kollha",
"namespacesall": "kollha",
"monthsall": "kollha",
"confirmemail": "Ikkonferma l-indirizz tal-posta elettronika",
@@ -2579,7 +2581,6 @@
"iranian-calendar-m9": "Azar",
"iranian-calendar-m10": "Dey",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskussjoni]])",
- "unknown_extension_tag": "Estensjoni tat-tag mhux magħrufa \"$1\"",
"duplicate-defaultsort": "'''Twissija:''' iċ-ċavetta tal-issortjar oriġinali \"$2\" tissostitwixxi dik preċedenti \"$1\".",
"version": "Verżjoni",
"version-extensions": "Estensjonijiet installati",
@@ -2595,7 +2596,7 @@
"version-parser-function-hooks": "''Hooks'' għal funzjonijiet tal-''parser''",
"version-hook-name": "Isem tal-hook",
"version-hook-subscribedby": "Reġistrat minn",
- "version-version": "(Verżjoni $1)",
+ "version-version": "($1)",
"version-license": "Liċenzja",
"version-poweredby-credits": "Din il-wiki hija operata minn '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "oħrajn",
@@ -2622,14 +2623,15 @@
"specialpages-group-other": "Paġni speċjali oħrajn",
"specialpages-group-login": "Idħol / oħloq kont",
"specialpages-group-changes": "L-Aħħar modifiki u reġistri",
- "specialpages-group-media": "Fajls multimedjali - rapporti u tellgħar",
+ "specialpages-group-media": "Fajls multimedjali - tlugħ u rapporti",
"specialpages-group-users": "Utenti u drittijiet",
"specialpages-group-highuse": "Paġni użati ħafna",
- "specialpages-group-pages": "Elenki ta' paġni",
+ "specialpages-group-pages": "Listi ta' paġni",
"specialpages-group-pagetools": "Għodda tal-paġna",
"specialpages-group-wiki": "Għodda u informazzjoni fuq il-proġett",
"specialpages-group-redirects": "Paġni speċjali ta' rindirizz",
"specialpages-group-spam": "Għodda kontra l-ispam",
+ "specialpages-group-developer": "Għodda tal-iżviluppatur",
"blankpage": "Paġna vojta",
"intentionallyblankpage": "Din il-paġna tħalliet vojta ataposta",
"external_image_whitelist": "#Ħalli din il-linja eżattament kif inhi<pre>\n#Daħħal frammenti tal-espressjonijiet regolari (dik il-parti bejn // biss) hawn taħt\n#Dawn jiġu mqabbla mal-URLs ta' stampi esterni (''hotlinked'')\n#Dawk li jaqblu jidhru bħala stampi, inkella jintwera biss ħolqa lejn l-istampa\n#Linji li jibdew b'# huma kkunsidrati bħala kummenti\n#Id-differenza bejn ittri kapitali u dawk żgħar mhix importanti\n\n#Daħħal il-frammenti kollha tar-regex qabel din il-linja. Ħalli din il-linja hekk kif inhi</pre>",
@@ -2694,18 +2696,19 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|biddel|biddlet}} is-sħubija fil-gruppi ta' $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|ġie|ġiet}} awtomatikament {{GENDER:$2|promoss|promossa}} minn $4 għal $5",
"rightsnone": "(xejn)",
+ "revdelete-summary": "Taqsira tal-modifika",
+ "feedback-bugcheck": "Tajjeb ħafna! Ivverifika li mhux diġà fost id-[$1 difetti magħrufa].",
+ "feedback-bugnew": "Ikkontrollajt. Irrapporta d-difett",
"feedback-bugornote": "Jekk int lest biex tiddeskrivi problema teknika fid-dettall, jekk jogħbok [$1 irraporta l-bug].\nInkella, tista' tuża l-formola sempliċi t'hawn taħt. Il-kumment tiegħek se jiżdied mal-paġna \"[$3 $2]\", flimkien ma' isem l-utent tiegħek.",
- "feedback-subject": "Suġġett:",
- "feedback-message": "Messaġġ:",
"feedback-cancel": "Annulla",
- "feedback-submit": "Ibgħat il-messaġġ",
+ "feedback-close": "Lest",
"feedback-error1": "Żball: Riżultat mhux rikonoxxut mill-API",
"feedback-error2": "Żball: Modifika mhux esegwita",
"feedback-error3": "Żball: L-ebda risposta mill-API",
+ "feedback-message": "Messaġġ:",
+ "feedback-subject": "Suġġett:",
+ "feedback-submit": "Ibgħat",
"feedback-thanks": "Grazzi! Ir-rispons tiegħek ġie ippubblikat fuq il-paġna \"[$2 $1]\".",
- "feedback-close": "Lest",
- "feedback-bugcheck": "Tajjeb ħafna! Ivverifika li mhux diġà fost id-[$1 difetti magħrufa].",
- "feedback-bugnew": "Ikkontrollajt. Irrapporta d-difett",
"searchsuggest-search": "Fittex",
"searchsuggest-containing": "li tinkludi...",
"api-error-fileexists-forbidden": "Fajl bl-isem \"$1\" diġà jeżisti, u ma jistax jiġi miktub fuqu.",
@@ -2737,5 +2740,41 @@
"expand_templates_remove_comments": "Neħħi l-kummenti",
"expand_templates_remove_nowiki": "Ħassar it-''tags'' <nowiki> fir-riżultat",
"expand_templates_generate_xml": "Uri siġra sintattika XML",
- "expand_templates_preview": "Dehra proviżorja"
+ "expand_templates_preview": "Dehra proviżorja",
+ "mediastatistics": "Statistika tal-midja",
+ "mediastatistics-summary": "L-istatistika dwar it-tipi ta' fajls imtellgħin. Din tinkludi biss il-verżjoni l-aktar reċenti t' fajl. Il-verżjonijiet antiki jew imħassrin tal-fajls tħallew barra.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tip MIME",
+ "mediastatistics-table-extensions": "Estensjonijiet possibbli",
+ "mediastatistics-table-count": "Numru ta' fajls",
+ "mediastatistics-table-totalbytes": "Daqs totali",
+ "mediastatistics-header-unknown": "Mhux magħruf",
+ "mediastatistics-header-bitmap": "Stampi bil-Bitmap",
+ "mediastatistics-header-drawing": "Tpinġijiet (vector images)",
+ "mediastatistics-header-audio": "Awdjo",
+ "mediastatistics-header-video": "Vidjows",
+ "mediastatistics-header-multimedia": "Midja rikka",
+ "mediastatistics-header-office": "Uffiċċju",
+ "mediastatistics-header-text": "Fajls testwali",
+ "mediastatistics-header-executable": "Fajls eżegwitabbli",
+ "mediastatistics-header-archive": "Formats kompressati",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Latin estiż",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simboli",
+ "special-characters-group-greek": "Grieg",
+ "special-characters-group-cyrillic": "Ċirilliku",
+ "special-characters-group-arabic": "Għarbi",
+ "special-characters-group-arabicextended": "Għarbi estiż",
+ "special-characters-group-persian": "Persjan",
+ "special-characters-group-hebrew": "Ebrajk",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinħaliż",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Tajlandiż",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/mwl.json b/languages/i18n/mwl.json
index 3e81d22d..c02ff038 100644
--- a/languages/i18n/mwl.json
+++ b/languages/i18n/mwl.json
@@ -526,7 +526,6 @@
"randomredirect": "Ancaminamiento al calhas",
"statistics": "Statísticas",
"statistics-pages": "Páiginas",
- "statistics-views-total": "Total de bejitas",
"statistics-users-active": "Outelizadores atibos",
"doubleredirects": "Ancaminamientos duplos",
"brokenredirects": "Ancaminamientos scachados",
@@ -545,7 +544,6 @@
"uncategorizedtemplates": "Modelos sin catadorie",
"unusedcategories": "Catadories nun outelizadas",
"unusedimages": "Fexeiros nun outelizados",
- "popularpages": "Páiginas populares",
"wantedcategories": "Catadories pedidas",
"wantedpages": "Páiginas pedidas",
"mostlinked": "Páiginas mais lhigadas",
@@ -568,7 +566,6 @@
"pager-older-n": "{{PLURAL:$1|1 atrasada|$1 atrasadas}}",
"booksources": "Fuontes de lhibros",
"booksources-search-legend": "Percurar por fuontes de libros",
- "booksources-go": "Bota",
"specialloguserlabel": "Outelizador:",
"speciallogtitlelabel": "Títalo:",
"log": "Registros",
@@ -598,7 +595,7 @@
"watchthispage": "Begiar esta páigina",
"unwatch": "Zantressar-se",
"watchlist-details": "{{PLURAL:$1|$1 páigina begiada|$1 páiginas begiadas}}, fuora las páiginas de çcuçon.",
- "wlshowlast": "Ber redadeiras $1 horas $2 dies $3",
+ "wlshowlast": "Ber redadeiras $1 horas $2 dies",
"watchlist-options": "Oupçones de la lista de begiados",
"watching": "A begiar...",
"unwatching": "A deixar de begiar...",
@@ -795,7 +792,6 @@
"exif-sharpness-1": "Suabe",
"exif-sharpness-2": "Duro",
"exif-subjectdistancerange-0": "Çcoincido",
- "watchlistall2": "todas",
"namespacesall": "todas",
"monthsall": "todos",
"confirm_purge_button": "Stá bien",
diff --git a/languages/i18n/my.json b/languages/i18n/my.json
index 66206079..cfffb37b 100644
--- a/languages/i18n/my.json
+++ b/languages/i18n/my.json
@@ -502,7 +502,6 @@
"mergehistory-same-destination": "ရင်းမြစ်နှင့် သတ်မှတ်ထားသော စာမျက်နှာတို့သည် အတူတူ မဖြစ်ရ",
"mergehistory-reason": "​ကြောင်း​ပြ​ချက် -",
"mergelog": "ပေါင်းလိုက်သော မှတ်တမ်း",
- "pagemerge-logentry": "[[$1]] ကို [[$2]] သို့ ပေါင်းပြီး ($3 ရက်နေ့အထိ မူများ)",
"revertmerge": "ပြန်ခွဲထုတ်ရန်",
"history-title": "\"$1\" ၏ တည်းဖြတ်မူ ရာဇဝင်များ",
"difference-multipage": "(စာမျက်နှာများကြားမှ ကွဲပြားချက်များ)",
@@ -543,7 +542,6 @@
"searchrelated": "ဆက်နွယ်သော",
"searchall": "အားလုံး",
"showingresults": "'''$2''' နှင့်စသော ရလဒ် {{PLURAL:$1|'''1''' ခု|'''$1''' ခု}}ထိကို အောက်တွင် ပြထားသည်။",
- "showingresultsheader": "'''$4''' အတွက် {{PLURAL:$5|ရလဒ် '''$3''' ခု အနက်မှ '''$1'''|ရလဒ် '''$3'''ခု အနက်မှ '''$1 - $2'''}}",
"search-nonefound": "စုံစမ်းမှုနှင့်ကိုက်ညီသော ရလဒ်မရှိပါ။",
"powersearch-legend": "အထူးပြု ရှာဖွေရန်",
"powersearch-ns": "အမည်ညွှန်းတို့တွင် ရှာရန် -",
@@ -894,7 +892,6 @@
"statistics": "စာရင်းအင်း",
"statistics-header-pages": "စာမျက်နှာစာရင်းအင်း",
"statistics-header-edits": "တည်းဖြတ်မှုစာရင်းအင်း",
- "statistics-header-views": "စာရင်းအင်းတို့ကို ကြည့်ရန်",
"statistics-header-users": "အသုံးပြုသူစာရင်းအင်း",
"statistics-header-hooks": "အခြားစာရင်းအင်းများ",
"statistics-articles": "မာတိကာစာမျက်နှာများ",
@@ -903,11 +900,8 @@
"statistics-files": "တင်ထားသောဖိုင်များ",
"statistics-edits": "{{SITENAME}} စတည်ထောင်ပြီးကတည်းက စာမျက်နှာတည်းဖြတ်မှုပေါင်း",
"statistics-edits-average": "စာတစ်မျက်နှာလျှင် ပျမ်းမျှတည်းဖြတ်မှုနှုန်း",
- "statistics-views-total": "စုစုပေါင်းကို ကြည့်ရန်",
- "statistics-views-peredit": "တစ်မျက်နှာလျှင်တည်းဖြတ်မှုမည်မျှရှိသည်ကို ကြည့်ရန်",
"statistics-users": "မှတ်ပုံတင်ထားသော [[Special:ListUsers|အသုံးပြုသူများ]]",
"statistics-users-active": "လက်ရှိလုပ်ကိုင်နေသော အသုံးပြုသူများ",
- "statistics-mostpopular": "အများဆုံးကြည့်သော စာမျက်နှာများ",
"doubleredirects": "နှစ်ဆင့်ပြန် ပြန်ညွှန်းများ",
"double-redirect-fixed-move": "[[$1]] ကို ရွှေ့ပြောင်းပြီးဖြစ်သည်။ ယခုအခါ [[$2]] သို့ ပြန်ညွှန်းထားသည်။",
"brokenredirects": "ကျိုးပျက်နေသော ပြန်ညွှန်းများ",
@@ -927,7 +921,6 @@
"uncategorizedtemplates": "အမျိုးအစား ခွဲမထားသော တမ်းပလိတ်များ",
"unusedcategories": "အသုံးပြုမထားသော ကဏ္ဍများ",
"unusedimages": "အသုံးပြုမထားသော ဖိုင်များ",
- "popularpages": "လူကြိုက်များသော စာမျက်နှာများ",
"wantedcategories": "အလိုရှိသော ကဏ္ဍများ",
"wantedpages": "အလိုရှိသော စာမျက်နှာများ",
"wantedfiles": "အလိုရှိသော ဖိုင်များ",
@@ -953,7 +946,6 @@
"pager-older-n": "{{PLURAL:$1|ပိုဟောင်းသော တစ်ခု|ပိုဟောင်းသော $1 ခု}}",
"booksources": "မှီငြမ်း စာအုပ်များ",
"booksources-search-legend": "စာအုပ်ရင်းမြစ်များကို ရှာရန်",
- "booksources-go": "သွား​ပါ​",
"specialloguserlabel": "အသုံးပြုသူ -",
"speciallogtitlelabel": "ခေါင်းစဉ် -",
"log": "မှတ်​တမ်း​များ​",
@@ -1027,7 +1019,7 @@
"unwatchthispage": "စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန်",
"notanarticle": "မာတိကာစာမျက်နှာတစ်ခု မဟုတ်",
"watchlist-details": "{{PLURAL:$1|စာမျက်နှာ $1 ခု|စာမျက်နှာ $1 ခု}} သည် သင့်စောင့်ကြည့်စာရင်းတွင် ရှိသည်။ ဆွေးနွေးချက်စာမျက်နှာများကို ထည့်တွက် မထားပါ။",
- "wlshowlast": "နောက်ဆုံး $1 နာရီ $2 ရက် $3 ကိုပြရန်",
+ "wlshowlast": "နောက်ဆုံး $1 နာရီ $2 ရက် ကိုပြရန်",
"watchlist-options": "စောင့်ကြည့်စာရင်းအတွက် ရွေးချယ်စရာများ",
"watching": "စောင့်ကြည့်လျက်ရှိ...",
"unwatching": "စောင့်မကြည့်တော့...",
@@ -1366,7 +1358,6 @@
"exif-subjectdistancerange-1": "မက်ကရို",
"exif-gpslongitude-w": "အနောက်လောင်ဂျီကျု",
"exif-gpsspeed-m": "တစ်နာရီလျှင် ရှိသည့် မိုင်နှုန်း",
- "watchlistall2": "အားလုံး",
"namespacesall": "အားလုံး",
"monthsall": "အားလုံး",
"confirmemail": "အီးမေးကိုအတည်ပြုပါ",
@@ -1441,6 +1432,7 @@
"revdelete-restricted": "အက်ဒမင်များသို့ ကန့်သတ်ချက်များ သက်ရောက်ရန်",
"revdelete-unrestricted": "အက်ဒမင်များအတွက် ကန့်သတ်ချက်များကို ဖယ်ရှားရန်",
"rightsnone": "(ဘာမှမရှိ)",
+ "revdelete-summary": "အကျဉ်းချုပ်ကို တည်းဖြတ်ရန်",
"api-error-filename-tooshort": "ဖိုင်အမည်သည် တိုလွန်းသည်။",
"api-error-filetype-banned": "ဤဖိုင်အမျိုးအစားကို တားမြစ်ထားသည်။",
"api-error-http": "အတွင်းပိုင်းအမှား - ဆာဗာကို မဆက်သွယ်နိုင်ပါ။",
diff --git a/languages/i18n/myv.json b/languages/i18n/myv.json
index c280363c..da14248b 100644
--- a/languages/i18n/myv.json
+++ b/languages/i18n/myv.json
@@ -340,6 +340,7 @@
"gotaccountlink": "Совамс",
"userlogin-resetlink": "Совамо эрявикстнэнь стувтыть?",
"userlogin-resetpassword-link": "Салававалот стувтовсь?",
+ "userlogin-createanother": "Шкак од совамотарка",
"createaccountmail": "Тейть кодамо понгсь салававал, кучик сонзэ ало максозь е-сёрмапаргонтень",
"createaccountreason": "Тувталось:",
"createacct-reason": "Тувтал",
@@ -404,7 +405,6 @@
"changeemail-none": "(арась мезе невтемс)",
"changeemail-password": "«{{SITENAME}}» проектэнь салававалот:",
"changeemail-submit": "Полавтомс е-сёрмапаргот",
- "changeemail-cancel": "Саемс мекев",
"bold_sample": "Эчке текст",
"bold_tip": "Эчке текст",
"italic_sample": "Комавтонь текст",
@@ -586,7 +586,6 @@
"search-relatedarticle": "Малавикс",
"searchrelated": "малавикс",
"searchall": "весе",
- "showingresultsheader": "{{PLURAL:$5|муевсь <strong>$1</strong> вана <strong>$3</strong>-тнень эйстэ|муевсть <strong>$1 - $2</strong> <strong>$3</strong>-тнень эйстэ}} <strong>$4</strong> вешнеманть лангс",
"search-nonefound": "Те вешнема лангс мезеяк эзь муеве.",
"powersearch-legend": "Седе келейстэ вешнема",
"powersearch-ns": "Вешнемс не лемпотмотнестэ:",
@@ -898,16 +897,12 @@
"statistics": "Статистикат",
"statistics-header-pages": "Лопань статистикат",
"statistics-header-edits": "Статистикань витнеме-петнеме",
- "statistics-header-views": "Статистикань ваномо",
"statistics-header-users": "Теицянь статистика",
"statistics-header-hooks": "Лия статистика",
"statistics-articles": "Потмо марто лопат",
"statistics-pages": "Лопат",
"statistics-files": "Йовкстань файлат",
- "statistics-views-total": "Ваннома потмотнеде весемезэ",
- "statistics-views-peredit": "Зяроксть ванозь апак витне апак петне",
"statistics-users-active": "Чистэ лисийть-совийть",
- "statistics-mostpopular": "Весемеде сеедьстэ ванозь лопат",
"doubleredirects": "Кавксть ютавтозь",
"double-redirect-fixer": "Печтевтемс витнема-петнема пель",
"brokenredirects": "Сезезь ёнксось",
@@ -931,7 +926,6 @@
"uncategorizedtemplates": "Категориявтомо лопа парцунт",
"unusedcategories": "Тевс апак нолда категорият",
"unusedimages": "Тевс апак нолда файлат",
- "popularpages": "Раське ютксо вечкевикс лопат",
"wantedcategories": "Вешень категорият",
"wantedpages": "Вешень лопат",
"wantedfiles": "Вешезь файлат",
@@ -968,7 +962,6 @@
"suppress": "А ванома",
"booksources": "Кинигань лисьмапрят",
"booksources-search-legend": "Вешнемс кинигань лисьмапрят",
- "booksources-go": "Адя",
"specialloguserlabel": "Топавтыцясь:",
"speciallogtitlelabel": "Норавоматарка (коняксозо эли теицязо):",
"log": "Совамо-лисема тевть (регистрациясь)",
@@ -1036,7 +1029,7 @@
"unwatchthispage": "Лоткамс ванстомадонзо",
"notvisiblerev": "Лиякстомтомась нардазь",
"watchlist-details": "Ванома лемрисьмесэть $1 {{PLURAL:$1|лопа|лопат}}, кортнема лопатнень лангс апак вано.",
- "wlshowlast": "Невтемс мельсе $1 цяст $2 чить $3",
+ "wlshowlast": "Невтемс мельсе $1 цяст $2 чить",
"watchlist-options": "Ванома потмонь аравтнемат",
"watching": "Ванома...",
"unwatching": "Аванома...",
@@ -1066,7 +1059,6 @@
"deletereason-dropdown": "*Нардамонь сех вастневиця тувталтнэ\n** Теицянть вешемазо\n** Теицянь видечинть коламозо\n** Вандализма",
"delete-edit-reasonlist": "Витнемс-петнемс нардамонь тувталтнэнь",
"rollback": "Кевердемс витнематнень-петнематнень мекев",
- "rollback_short": "Мекев кевердема",
"rollbacklink": "кевердемс",
"rollbackfailed": "Мекев кевердемась эзь лисе",
"protectlogpage": "Ванстомань совамо-кемекстамо",
@@ -1348,7 +1340,6 @@
"pageinfo-header-edits": "Витнемс-петнемс юронзо-путовксонзо",
"pageinfo-header-properties": "Лопанть уликсчинзэ",
"pageinfo-display-title": "Коняксонть таргамс лангс",
- "pageinfo-views": "Зяро ванома потмонзо",
"pageinfo-subpages-name": "Те лопанть явкслопанзо",
"pageinfo-edits": "Зяроксть витнезь-петнезь",
"pageinfo-authors": "Весемезэ зяро авторонзо",
@@ -1521,7 +1512,6 @@
"exif-urgency-normal": "Куншка видень ($1)",
"exif-urgency-low": "Аламо ($1)",
"exif-urgency-high": "Ламо ($1)",
- "watchlistall2": "весе",
"namespacesall": "весе",
"monthsall": "весе",
"confirmemail": "Кемекстамс е-почтань сёрмапаргот",
@@ -1564,7 +1554,7 @@
"version-hooks": "Кечказт",
"version-hook-name": "Кечказонть лемезэ",
"version-hook-subscribedby": "Сёрмадстызе",
- "version-version": "(Версия $1)",
+ "version-version": "($1)",
"version-license": "Лицензия",
"version-software": "Нолдань программат",
"version-software-product": "Шкавкс-нолдавкс",
@@ -1597,10 +1587,11 @@
"htmlform-reset": "Саемс мекев полавтоматнень",
"htmlform-selectorother-other": "Лия",
"rightsnone": "(арасть)",
- "feedback-subject": "Мезде:",
- "feedback-message": "Пачтямнэсь:",
+ "revdelete-summary": "витнемадо-петнемадо нурькине йовтавкс",
"feedback-cancel": "А теемс",
"feedback-close": "Анок",
+ "feedback-message": "Пачтямнэсь:",
+ "feedback-subject": "Мезде:",
"searchsuggest-search": "Вешнемс",
"api-error-filename-tooshort": "Керьмазлементь а саты кувалмозо",
"api-error-illegal-filename": "Керьмазлемесь а маштови.",
diff --git a/languages/i18n/mzn.json b/languages/i18n/mzn.json
index b93f2873..e6704e3a 100644
--- a/languages/i18n/mzn.json
+++ b/languages/i18n/mzn.json
@@ -149,7 +149,7 @@
"tagline": "{{SITENAME}} جه",
"help": "راهنما",
"search": "بگردستن",
- "searchbutton": "چرخ‌هایی",
+ "searchbutton": "چرخه‌تو",
"go": "بـور",
"searcharticle": "بور",
"history": "صفحه‌ی تاریخچه",
@@ -204,8 +204,8 @@
"aboutpage": "Project:درباره",
"copyright": "این صفحه ره بَنوشته‌ئون $1 زیر شِمه دسـت دَرنه.",
"copyrightpage": "{{ns:project}}:کـوپـی‌راسـت‌ئون",
- "currentevents": "اسایی دکته‌ئون",
- "currentevents-url": "Project:اسایی دکته‌ئون",
+ "currentevents": "خـَوِرون",
+ "currentevents-url": "Project:خورون",
"disclaimers": "تکذیب‌نومه‌ئون",
"disclaimerpage": "Project:تکذیب‌نومه",
"edithelp": "دچی‌ین رانما",
@@ -339,7 +339,6 @@
"changeemail-newemail": "ترنه ایمیل آدرس:",
"changeemail-none": "(هچّی)",
"changeemail-submit": "ایمیل ره عوض هاکردن",
- "changeemail-cancel": "ول هاکردن",
"bold_sample": "ضخیم",
"bold_tip": "ضخیم",
"italic_sample": "کژ",
@@ -495,7 +494,6 @@
"specialpage-empty": "این صفحه دله هچّی دَنی‌یه",
"unusedcategories": "کـار نـأزو رج‌ئون",
"unusedimages": "کـار نأزو فایل‌ئون",
- "popularpages": "خاسگار هدار صفحه‌ئون",
"wantedpages": "صفحه‌ئونی که خامبی",
"prefixindex": "تموم صفحه‌ئون پیشوند دار",
"shortpages": "پچیک صفحه‌ئون",
@@ -508,7 +506,6 @@
"pager-newer-n": "{{PLURAL:$1|أتـا نـه‌ته‌ر|$1 تـا نـه‌ته‌ر}}",
"pager-older-n": "{{PLURAL:$1|أتـا کـوهـنـه‌ته‌ر|$1 تـا کوهـنـه‌ته‌ر}}",
"booksources-search-legend": "بگردستن منابع کتاب",
- "booksources-go": "بـور",
"booksources-text": "زیر فهرستی از لینکا به وبگاه‌ئون دیگه دره که کتاب‌ئون نو و دست دوم روشنّه و ممکنه اطلاعات ویشتری راجع به کتاب مورد نظر دارِن:",
"specialloguserlabel": "کارور:",
"allpages": "همه صفحه‌ئون",
@@ -546,7 +543,6 @@
"exbeforeblank": "قبل اینکه صفحه محتوا خالی بوه ونه محتوا وِ بیه: «$1»",
"dellogpage": "وه ره بییته‌ئون گوزارش",
"rollback": "دچی‌یه‌ئون ره واچی‌ین",
- "rollback_short": "واچی‌ین",
"rollbacklink": "واچی‌ین",
"revertpage": "\"چـیـزونی که [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) دأچـیـه ده‌گـه‌ره‌س بـأیـه هـأمونـتـایی که [[User:$1|$1]] ای وألگ ده‌لـه، پـایـانی بـار هـه‌کـارده\"",
"revertpage-nouser": "\"چیزونی که (ونـه کـاروری نـوم پـاک بَیّه) دچی‌یه دگـاردسته بیّه همونتایی که [[User:$1|$1]] آخرسری دچی‌ین دلـه هاکرده\"",
@@ -570,7 +566,7 @@
"sp-contributions-newbies": "نـه وا بـأیـه ئـه‌کـانـت‌ئون دأچـیـه‌ن‌ئون ره نـه‌شـون هـاده",
"sp-contributions-talk": "گپ",
"sp-contributions-username": "IP نـه‌شـونـی یا کـاروری‌نوم",
- "sp-contributions-submit": "چـأرخـه‌تـو",
+ "sp-contributions-submit": "چرخه‌تو",
"whatlinkshere": "لینک‌ئون ِاینتا صفحه",
"whatlinkshere-title": "وألـگ‌ئونی که \"$1\" ره لـیـنک هه‌دانه",
"whatlinkshere-page": "صفحه:",
@@ -614,7 +610,7 @@
"tooltip-ca-history": "کهنه دگاردسته‌ئونی که این صفحه دله دکته",
"tooltip-ca-delete": "این صفحه ره پاک هاکردن",
"tooltip-ca-watch": "این صفحه ره شه دمبال‌هاکردن لیست دله بی‌یشتن",
- "tooltip-search": "{{SITENAME}} ره چـأرخـه‌تـو",
+ "tooltip-search": "{{SITENAME}} ره چرخه‌تو",
"tooltip-search-go": "بـور اتـا ولـگـی کـه وه‌نـه نـوم هـأمـیـنـتـا بـوئـه",
"tooltip-search-fulltext": "ولـگ‌ئـون ره ایـنـتـا تـه‌کـسـت وه‌سـه چـأرخ بـأزوئـه‌ن",
"tooltip-p-logo": "گَت صفحه ره بَدی‌ین",
@@ -626,7 +622,7 @@
"tooltip-n-randompage": "اتت شانسی صفحه بَدی‌ین",
"tooltip-n-help": "أتـا جـا کـه...",
"tooltip-t-whatlinkshere": "هأمو ولـگ‌ئونی که ایجه ره لینک هه‌دانه",
- "tooltip-t-recentchangeslinked": "اسایی دگاردسته‌ئون صفحه‌ئونی دله، که این صفحه جه لینک دارنه",
+ "tooltip-t-recentchangeslinked": "اِسایی دِگاردسته‌ئون ِصفحه‌ئون که این صفحه جه لینک دارنه",
"tooltip-feed-rss": "RSS خوراک این صفحه وسّه",
"tooltip-feed-atom": "Atom خوراک این صفحه وسّه",
"tooltip-t-emailuser": "ای کـارور ره اتـا ئـه‌لـه‌کـتـه‌رونـیـکـی‌نـومـه راهـی هـه‌کـارده‌ن",
@@ -664,7 +660,6 @@
"exif-orientation-1": "معمولی",
"exif-orientation-3": "180 درجه چرخ بزوئن",
"exif-orientation-4": "عمودی په‌شت ئو روبئی",
- "watchlistall2": "همه",
"namespacesall": "همه",
"monthsall": "همه ماه‌ئون",
"confirmemail_body_changed": "ات نفر، احتمالاً خاد شمِا، از نشونی آی‌پی $1 نشونی پوست ایلکتورونیک حیساب «$2» {{SITENAME}} ره تغییر هدائه.\n\nبرای تایید این که این حیساب واقعاً شمه شه و فعال هکردن دبارهٔ ویژگی پوست ایلکتورونیک {{SITENAME}}، پیوند زیر دله ره شه مرورگر دله وا هکنین:\n\n$3\n\nاگه این حساب شه مه نی‌یه، پیوند زیر ره دنبال هکنین تا تغییر پوست ایلیکتورونیک ره لغو هکنین:\n\n$5\n\nاین تایید یه در $4 منقضی وانه.",
diff --git a/languages/i18n/na.json b/languages/i18n/na.json
index fedb292c..9a0349ad 100644
--- a/languages/i18n/na.json
+++ b/languages/i18n/na.json
@@ -1,67 +1,67 @@
{
- "@metadata": {
- "authors": [
- "Belgian man",
- "CdaMVvWgS",
- "Node ue"
- ]
- },
- "sunday": "Tondak",
- "monday": "Mondak",
- "tuesday": "Dintak",
- "wednesday": "Mitwok",
- "thursday": "Donertak",
- "friday": "Preidak",
- "saturday": "Tadurdei",
- "moredotdotdot": "Iyuw...",
- "and": "&#32;me",
- "qbedit": "Kiwiwid",
- "errorpagetitle": "Dairinaiya",
- "help": "Ipuok",
- "search": "Kanani",
- "go": "Nuwa ko!",
- "history_short": "Ekadaedaenigawae",
- "edit": "Kiwiwid",
- "delete": "Iyababa",
- "unprotect": "Eab oberei",
- "toolbox": "Dabadi n bwait makur",
- "currentevents": "Imwin",
- "currentevents-url": "Project:Imwin",
- "edithelp": "Oomo/edar Ipuok",
- "mainpage": "Bwiema peij",
- "mainpage-description": "Bwiema peij",
- "editsection": "Kiwiwid",
- "showtoc": "oduwen",
- "hidetoc": "ewewin",
- "nstab-help": "Ipuok",
- "error": "Dairinaiya",
- "login": "Metu",
- "logout": "Meta",
- "userlogout": "Meta",
- "bold_sample": "Eõ mangiyungiy",
- "bold_tip": "Eõ mangiyungiy",
- "image_sample": "Ekar.jpg",
- "savearticle": "Otsimor",
- "newarticle": "(Etsimeduw)",
- "editing": "Oomo/edar $1",
- "editingsection": "Oomo/edar $1 (itubwang)",
- "prefs-skin": "Witsin",
- "searchresultshead": "Anani ko",
- "yourlanguage": "Edorer",
- "recentchanges": "Iwiwidit tsimeduw",
- "hist": "eka",
- "hide": "witsit imin gogoro",
- "show": "oduwen",
- "randompage": "Tamo peij",
- "move": "Memori",
- "allpagessubmit": "nuwa ko",
- "emailuser": "Emaileiy amune",
- "emailfrom": "Atsiu",
- "emailto": "Animwen",
- "emailsend": "Oiyon",
- "watch": "Aea",
- "unwatch": "Eab krak",
- "confirm": "Oebwigaga",
- "contributions": "Mana engame totow inne",
- "ilsubmit": "Anani ko"
+ "@metadata": {
+ "authors": [
+ "Belgian man",
+ "CdaMVvWgS",
+ "Node ue"
+ ]
+ },
+ "sunday": "Tondak",
+ "monday": "Mondak",
+ "tuesday": "Dintak",
+ "wednesday": "Mitwok",
+ "thursday": "Donertak",
+ "friday": "Preidak",
+ "saturday": "Tadurdei",
+ "moredotdotdot": "Iyuw...",
+ "and": "&#32;me",
+ "qbedit": "Kiwiwid",
+ "errorpagetitle": "Dairinaiya",
+ "help": "Ipuok",
+ "search": "Kanani",
+ "go": "Nuwa ko!",
+ "history_short": "Ekadaedaenigawae",
+ "edit": "Kiwiwid",
+ "delete": "Iyababa",
+ "unprotect": "Eab oberei",
+ "toolbox": "Dabadi n bwait makur",
+ "currentevents": "Imwin",
+ "currentevents-url": "Project:Imwin",
+ "edithelp": "Oomo/edar Ipuok",
+ "mainpage": "Bwiema peij",
+ "mainpage-description": "Bwiema peij",
+ "editsection": "Kiwiwid",
+ "showtoc": "oduwen",
+ "hidetoc": "ewewin",
+ "nstab-help": "Ipuok",
+ "error": "Dairinaiya",
+ "login": "Metu",
+ "logout": "Meta",
+ "userlogout": "Meta",
+ "bold_sample": "Eõ mangiyungiy",
+ "bold_tip": "Eõ mangiyungiy",
+ "image_sample": "Ekar.jpg",
+ "savearticle": "Otsimor",
+ "newarticle": "(Etsimeduw)",
+ "editing": "Oomo/edar $1",
+ "editingsection": "Oomo/edar $1 (itubwang)",
+ "prefs-skin": "Witsin",
+ "searchresultshead": "Anani ko",
+ "yourlanguage": "Edorer",
+ "recentchanges": "Iwiwidit tsimeduw",
+ "hist": "eka",
+ "hide": "witsit imin gogoro",
+ "show": "oduwen",
+ "randompage": "Tamo peij",
+ "move": "Memori",
+ "allpagessubmit": "nuwa ko",
+ "emailuser": "Emaileiy amune",
+ "emailfrom": "Atsiu",
+ "emailto": "Animwen",
+ "emailsend": "Oiyon",
+ "watch": "Aea",
+ "unwatch": "Eab krak",
+ "confirm": "Oebwigaga",
+ "contributions": "Mana engame totow inne",
+ "ilsubmit": "Anani ko"
}
diff --git a/languages/i18n/nah.json b/languages/i18n/nah.json
index 6426b3a9..cbe21989 100644
--- a/languages/i18n/nah.json
+++ b/languages/i18n/nah.json
@@ -659,13 +659,11 @@
"statistics": "Tlapōhualiztli",
"statistics-header-pages": "Zāzaniltin tlapōhualli",
"statistics-header-edits": "Tlapatlaliztli tlapōhualli",
- "statistics-header-views": "Tlahpololiztli tlapōhualli",
"statistics-header-users": "Tlatequitiltilīlli ītlapōhualiz",
"statistics-articles": "Tlapiyaliztli zāzanilli",
"statistics-pages": "Zāzaniltin",
"statistics-pages-desc": "Mochīntīn zāzaniltin huiquipan, mopiyah tēixnāmiquiliztli, tlacuepaliztli, etz.",
"statistics-files": "Tlahcuilōlli ōmoquetz",
- "statistics-views-peredit": "Tlahpololiztli ic tlapatlaliztli",
"doubleredirects": "Ōntetl tlacuepaliztli",
"brokenredirects": "Tzomoc tlacuepaliztli",
"brokenredirects-edit": "ticpatlāz",
@@ -685,7 +683,6 @@
"uncategorizedtemplates": "Nemachiòmë âmò tlatlaìxmatkàtlàlìltìn",
"unusedcategories": "Tlaìxmatkàtlàlilòmë tlèn âmò mokìntekìuhtia",
"unusedimages": "Ìxiptìn tlèn âmò mokìntekìuhtia",
- "popularpages": "Màsèwàltlaìxtlapaltìn",
"wantedcategories": "Ìtech kineki tlaìxmatkàtlàlilòtl",
"wantedpages": "Zāzaniltin moēlēhuiah",
"wantedfiles": "Ìpan moneki èwaltìn",
@@ -710,7 +707,6 @@
"pager-newer-n": "{{PLURAL:$1|1 yancuīc|$1 yancuīc}}",
"pager-older-n": "{{PLURAL:$1|1 huēhuetl|$1 huēhueh}}",
"booksources": "āmoxmēyalli",
- "booksources-go": "Yāuh",
"specialloguserlabel": "Tlatequitiltilīlli:",
"speciallogtitlelabel": "Tōcāitl:",
"log": "Tlahcuilōlloh",
@@ -748,7 +744,7 @@
"watchthispage": "Tictlachiyāz inīn zāzanilli",
"unwatch": "Ahtictlachiyāz",
"watchlist-details": "{{PLURAL:$1|$1 zāzanilli|$1 zāzaniltin}} motlachiyaliz, ahmo mopōhua tēixnāmiquiliztli.",
- "wlshowlast": "Tiquinttāz tlapatlaliztli īhuīcpa achto $1 yēmpohualminuhtli, $2 tōnaltin $3",
+ "wlshowlast": "Tiquinttāz tlapatlaliztli īhuīcpa achto $1 yēmpohualminuhtli, $2 tōnaltin",
"watching": "Tlachiyacah...",
"unwatching": "Ahtlachiyacah...",
"enotif_impersonal_salutation": "tlatequitiltilīlli īpan {{SITENAME}}",
@@ -1018,7 +1014,6 @@
"exif-gpslatitude-s": "Huiztlān",
"exif-gpslongitude-e": "Tlāpcopa huehtlatzīncāyōtl",
"exif-gpslongitude-w": "Cihuātlāmpa huehtlatzīncāyōtl",
- "watchlistall2": "mochīntīn",
"namespacesall": "mochīntīn",
"monthsall": "(mochīntīn)",
"confirmemail": "Ticchicāhuāz e-mail",
@@ -1072,6 +1067,7 @@
"blankpage": "Iztāc zāzanilli",
"htmlform-selectorother-other": "Occē",
"rightsnone": "ahtlein",
+ "revdelete-summary": "ticpatlāz tlahcuilōltōn",
"searchsuggest-search": "Tlatēmoliztli",
"api-error-ok-but-empty": "Tlâtek îtlakawilistli: Âmò tènankilia in tlatèmakani.",
"api-error-overwrite": "Awel motlâkuilnepanòltis sè èwalli tlèn yi katki.",
diff --git a/languages/i18n/nan.json b/languages/i18n/nan.json
index 9a04abbc..b59fb15a 100644
--- a/languages/i18n/nan.json
+++ b/languages/i18n/nan.json
@@ -21,7 +21,7 @@
"tog-watchdefault": "Kā goá pian-chi̍p kòe ê ia̍h kah tóng-àn ka-ji̍p kàm-sī-toaⁿ lāi-té",
"tog-watchmoves": "Kā goá soá ê ia̍h kah tóng-àn ka-ji̍p kàm-sī-toaⁿ",
"tog-watchdeletion": "Kā goá thâi tiāu ê ia̍h kah tóng-àn ka-ji̍p kàm-sī-toaⁿ",
- "tog-minordefault": "Chiām-tēng bī-lâi ê siu-kái lóng sī sió-siu-ká",
+ "tog-minordefault": "Chiām-tēng bī-lâi ê siu-kái lóng sī sió siu-kái",
"tog-previewontop": "Sûn-khoàⁿ ê lōe-iông tī pian-chi̍p keh-á thâu-chêng",
"tog-previewonfirst": "Thâu-pái pian-chi̍p seng khoàⁿ-māi",
"tog-enotifwatchlistpages": "Kam-sī-tuann ū ē bûn-tsiunn nā ū kái-piàn, kià tiān-tsú-phue hōo guá.",
@@ -83,7 +83,7 @@
"february-gen": "Jī-goe̍h",
"march-gen": "Saⁿ-goe̍h",
"april-gen": "Sì-goe̍h",
- "may-gen": "Gō·-goe̍h",
+ "may-gen": "Gō͘-goe̍h",
"june-gen": "La̍k-goe̍h",
"july-gen": "Chhit-goe̍h",
"august-gen": "Peh-goe̍h",
@@ -121,7 +121,7 @@
"category-media-header": "Tī lūi-pia̍t \"$1\" ê mûi-thé",
"category-empty": "''Chit-má chit ê lūi-pia̍t bô ia̍h ia̍h-sī mûi-thé.''",
"hidden-categories": "{{PLURAL:$1|Hidden category|Chhàng khí-lâi ê lūi-pia̍t}}",
- "hidden-category-category": "Chhàng khí--lâi ê lūi piat",
+ "hidden-category-category": "Chhàng--khí-lâi ê lūi piat",
"category-subcat-count": "{{PLURAL:$2|Chit ê lūi-piat chí-ū ē-bīn ê ē-lūi-pia̍t.|Chit ê lūi-piat ū ē-bīn {{PLURAL:$1| ê ē-lūi-piat|$1 ê ē-lūi-piat}}, choân-pō͘ $2 ê.}}",
"category-subcat-count-limited": "Chit ê lūi-piat ū ē-bīn ê {{PLURAL:$1| ē-lūi-pia̍t|$1 ē-lūi-pia̍t}}.",
"category-article-count": "{{PLURAL:$2|Chit ê lūi-piat chí-ū ē-bīn ê ia̍h.|Ē-bīn {{PLURAL:$1|bīn ia̍h sī|$1bīn ia̍h sī}} tī chit lūi-pia̍t, choân-pō͘ $2 bīn ia̍h}}",
@@ -129,7 +129,7 @@
"category-file-count": "{{PLURAL:$2|Chit ê lūi-piat chí-ū ē-bīn ê tóng-àn.|Ē-bīn {{PLURAL:$1| ê tóng-àn sī|$1 ê tóng-àn sī}} tī chit lūi-pia̍t, choân-pō͘ $2 ê tóng-àn}}",
"category-file-count-limited": "Chit-má chit-ê lūi-pia̍t ū {{PLURAL:$1| ê tóng-àn}}",
"listingcontinuesabbrev": "(chiap-sòa thâu-chêng)",
- "index-category": "Ū sik-ín ê ia̍h",
+ "index-category": "Ū sek-ín ê ia̍h",
"noindex-category": "Bī sik-ín ê ia̍h.",
"broken-file-category": "Sit-khì tóng-àn liân-kiat ê ia̍h.",
"about": "Koan-hē",
@@ -143,7 +143,7 @@
"anontalk": "Chit ê IP ê thó-lūn-ia̍h",
"navigation": "Se̍h chām",
"and": "&#32;kap",
- "qbfind": "Chhoé",
+ "qbfind": "Chhōe",
"qbbrowse": "Liū-lám",
"qbedit": "Siu-kái",
"qbpageoptions": "Chit ia̍h",
@@ -206,6 +206,7 @@
"otherlanguages": "Kî-thaⁿ ê gí-giân",
"redirectedfrom": "(Tùi $1 choán--lâi)",
"redirectpagesub": "Choán-ia̍h",
+ "redirectto": "跳去:",
"lastmodifiedat": "Chit ia̍h tī $1, $2 ū kái--koè",
"viewcount": "Chit ia̍h kàu taⁿ, hō͘ lâng khoàⁿ $1 pái.",
"protectedpage": "Siū pó-hō͘ ê ia̍h",
@@ -258,6 +259,9 @@
"hidetoc": "siu",
"collapsible-collapse": "Siu",
"collapsible-expand": "Khui",
+ "confirmable-confirm": "{{GENDER:$1|你}}敢確定唅?",
+ "confirmable-yes": "著啦",
+ "confirmable-no": "無啦!毋是!",
"thisisdeleted": "Khoàⁿ a̍h-sī kiù $1?",
"viewdeleted": "Beh khoàⁿ $1?",
"restorelink": "{{PLURAL:$1|chi̍t ê thâi-tiàu ê pian-chi̍p|$1 thâi-tiàu ê pian-chi̍p}}",
@@ -328,6 +332,7 @@
"viewyourtext": "你會使看<strong>你改的</strong>原始碼,並且khop去這頁:",
"protectedinterface": "Chit ia̍h thê-kiong nńg-thé kài-bīn ēng ê bûn-jī. Ūi beh ī-hông lâng chau-that, só͘-í ū siū tio̍h pó-hō͘. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [//translatewiki.net/ translatewiki.net] hiâ.",
"editinginterface": "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h. Jīn-hô kái-piàn to ē éng-hióng tio̍h kî-thaⁿ iōng-chiá ê sú-iōng kài-bīn. Nā beh kái hoan-e̍k, chhiaⁿ khì Ûi-ki Mûi-thé chāi-tē-hoà sū-kang [//translatewiki.net/ translatewiki.net] hiâ.",
+ "translateinterface": "欲改抑是加維基的翻譯,請去維基媒體的在地化專案:[//translatewiki.net/ 翻譯維基網]。",
"cascadeprotected": "Chit-ê ia̍h í-keng hông pó-hō͘ bē kái tit. In-ūi i tī ē-bīn {{PLURAL:$1|ê|ê}} liân-só pó-hō͘ lāi-té:\n$2",
"namespaceprotected": "Lí bô khoân-lī kái '''$1''' miâ-khong-kan ê ia̍h",
"customcssprotected": "你無受權去改這个 CSS頁,因為這个頁有包括別个用者的個人設定。",
@@ -339,8 +344,10 @@
"ns-specialprotected": "特殊頁袂得改。",
"titleprotected": "這个標題已經予[[User:$1|$1]]保護起來,袂得提來用。\n原因是 \"<em>$2</em>。",
"filereadonlyerror": "因為檔案庫這馬只會使看,所以袂得改 \"$1\"這个檔案。\n鎖檔案庫的管理員講是因為:\"$3\"。",
+ "invalidtitle-knownnamespace": "佇名空間 \"$2\"佮文字\"$3\"的標題袂使得。",
+ "invalidtitle-unknownnamespace": "名空間編號 $1(毋知名)的\"$2\"文字標題袂使用。",
"exception-nologin": "Bô teng-ji̍p",
- "exception-nologin-text": "請先[[Special:Userlogin|登入]]了才有法度看這頁抑對這頁做動作。",
+ "exception-nologin-text": "請先登入,才有法度看這頁抑對這頁做動作。",
"exception-nologin-text-manual": "請先$1,才有法度看這頁抑對這頁做動作。",
"virus-badscanner": "設定毋著:你的病毒掃描程式阮毋知:<em>$1</em>",
"virus-scanfailed": "掃病毒無成功(代碼$1)",
@@ -382,6 +389,8 @@
"userlogin-resetlink": "你敢袂記得你登入的資料?",
"userlogin-resetpassword-link": "袂記得你的密碼?",
"userlogin-helplink2": "協助你登入",
+ "userlogin-loggedin": "你已經用{{GENDER:$1|$1}}登入,用下跤的表,登入別个名。",
+ "userlogin-createanother": "開另外一个口座",
"createacct-emailrequired": "電子批地址",
"createacct-emailoptional": "電子批地址(無一定愛寫)",
"createacct-email-ph": "拍你的電子批地址",
@@ -389,6 +398,7 @@
"createaccountmail": "Iōng chi̍t-ê lîm-sî loān-sò͘ sán-seng ê bi̍t-bé , kià khì goá chí-tēng ê tiān-chú-phoe tē-chí.",
"createacct-realname": "真正的名",
"createaccountreason": "Lí-iû:",
+ "createacct-reason": "理由:",
"createacct-reason-ph": "為啥物你欲開一另外一个口座?",
"createacct-captcha": "安全檢驗",
"createacct-imgcaptcha-ph": "共下跤你看著的字拍入來",
@@ -405,13 +415,19 @@
"createaccounterror": "Bô hoat-tō͘ khui kháu-chō: $1",
"nocookiesnew": "你的用者口座已經開好矣,毋過你猶未登入,{{SITENAME}}有用Cookies做記錄登入的用者,你無允准用Cookies,請先共阻擋提掉,才閣用你的用者名稱佮密碼登入。",
"nocookieslogin": "{{SITENAME}}有用cookies做記錄用者,毋過你無允準用cookies,等你改做會當了後,才閣試。",
+ "nocookiesfornew": "因為不明的原因,阮無法度建立用者的口座。\n請先確定你的cookie會使用,閣重進入這頁,閣試一擺。",
+ "noname": "你提供的用者名稱袂使用。",
"loginsuccesstitle": "Teng-ji̍p sêng-kong",
"loginsuccess": "Lí hiān-chhú-sî í-keng teng-ji̍p {{SITENAME}} chò \"$1\".",
"nosuchuser": "Chia bô iōng-chiá hō-chò \"$1\".\nIiōng-chiá hō-chò ū hun toā-jī sè-jī.\nChhiáⁿ kiám-cha lí ê phèng-im, a̍h-sī [[Special:UserLogin/signup|khui sin iōng-chiá ê kháu-chō.]]",
"nosuchusershort": "Bô \"$1\" chit ê iōng-chiá miâ.\nTùi khoàⁿ-māi, lí phah--ê.",
"nouserspecified": "Lí ài chí-tēng chi̍t ê iōng-chiá miâ.",
+ "login-userblocked": "這個用者已經予人封鎖,袂使登入。",
"wrongpassword": "Lí su-ji̍p ê bi̍t-bé ū têng-tâⁿ. Chhiáⁿ têng chhì.",
"wrongpasswordempty": "Bi̍t-bé keh-á khang-khang. Chhiáⁿ têng chhì.",
+ "passwordtooshort": "密碼上少愛{{PLURAL:$1|1字|$1字}}",
+ "password-name-match": "你的密碼愛佮你的用者名稱無仝。",
+ "password-login-forbidden": "這个用者名稱佮密碼已經禁止用。",
"mailmypassword": "Têng siat bi̍t-bé",
"passwordremindertitle": "{{SITENAME}} the-chheN li e bit-be",
"noemail": "Kì-lo̍k bô iōng-chiá \"$1\" ê e-mail chū-chí.",
@@ -441,7 +457,6 @@
"changeemail": "Kái tiān-chú-phoe ê tē-chí",
"changeemail-oldemail": "Chit-má ê E-mail tē-chí:",
"changeemail-newemail": "Sin E-mail ê chū-chí:",
- "changeemail-cancel": "Chhú-siau",
"bold_sample": "Chho·-thé bûn-jī",
"bold_tip": "Chho·-thé jī",
"italic_sample": "Chhú-thé ê bûn-jī",
@@ -556,7 +571,6 @@
"search-section": "(toān-lo̍h $1)",
"searchall": "choân-pō·",
"showingresults": "Ē-kha tùi #<b>$2</b> khai-sí hián-sī <b>$1</b> hāng kiat-kó.",
- "showingresultsheader": "對'''$4'''的{{PLURAL:$5|第 '''$1''' 到第 '''$3''' 項結果|第 '''$1 - $2''' 項,總共 '''$3''' 項結果}}",
"powersearch-legend": "Kiám-sek",
"preferences": "Siat-tēng",
"mypreferences": "Góa ê siat-tēng",
@@ -680,7 +694,6 @@
"uncategorizedtemplates": "Bô lūi-pia̍t ê pang-bô͘",
"unusedcategories": "Bô iōng ê lūi-pia̍t",
"unusedimages": "Bô iōng ê iáⁿ-siōng",
- "popularpages": "Sî-kiâⁿ ê ia̍h",
"wantedcategories": "wantedcategories",
"wantedpages": "Beh ti̍h ê ia̍h",
"mostlinked": "Siōng chia̍p liân-kiat ê ia̍h",
@@ -747,7 +760,7 @@
"unwatchthispage": "Mài koh kàm-sī",
"watchlist-details": "Kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.",
"wlnote": "$3 $4: Ē-kha sī <strong>$2</strong> tiám-cheng í-lāi siōng sin ê <strong>$1</strong> ê kái-piàn.",
- "wlshowlast": "Hián-sī chêng $1 tiám-cheng $2 ji̍t $3",
+ "wlshowlast": "Hián-sī chêng $1 tiám-cheng $2 ji̍t",
"deletepage": "Thâi ia̍h",
"confirm": "Khak-tēng",
"excontent": "lōe-iông sī: '$1'",
@@ -911,7 +924,6 @@
"bydate": "chiàu ji̍t-kî",
"metadata-expand": "Hián-sī iù-chiat",
"metadata-collapse": "Am iù-chiat",
- "watchlistall2": "choân-pō͘",
"namespacesall": "choân-pō·",
"monthsall": "choân-pō͘",
"confirmemail": "Khak-jīn e-mail chū-chí",
diff --git a/languages/i18n/nap.json b/languages/i18n/nap.json
index fa495265..e7922b4a 100644
--- a/languages/i18n/nap.json
+++ b/languages/i18n/nap.json
@@ -9,7 +9,9 @@
"PiRSquared17",
"SabineCretella",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Candalua",
+ "Macofe"
]
},
"tog-underline": "Sottolinia 'e jonte:",
@@ -28,7 +30,7 @@
"tog-watchdeletion": "Azzecca 'e paggene e li files scancellate a l'elenco 'e cuntrollo",
"tog-watchrollback": "Azzecca 'e paggene addò aggio fatto nu rollback a l'elenco 'e cuntrollo",
"tog-minordefault": "Indica ogne cagnamento comme piccerillo (predefinito)",
- "tog-previewontop": "Vide previsióne primma d&#39;'a casella 'e modifica",
+ "tog-previewontop": "Vide previsióne primma d' 'a casella 'e modifica",
"tog-previewonfirst": "Vide previsióne 'a primma vota",
"tog-enotifwatchlistpages": "Famme na mmasciata mail quanno na paggena o nu file dint'a l'elenco 'e cuntrollo se fosse cagnàta",
"tog-enotifusertalkpages": "Famme na masciata mail quanno 'a paggena 'e cchiacchiera mmia se fosse cagnàta",
@@ -37,15 +39,15 @@
"tog-shownumberswatching": "Fa' vedé 'o nummero d'utente che teneno 'a paggena cuntrullata",
"tog-oldsig": "Firma 'e mmo:",
"tog-fancysig": "Piglia 'a firma comme fosse nu wikitesto (senza fà link automatico)",
- "tog-uselivepreview": "Abilita 'o \"Live preview\" (sperimentale)",
+ "tog-uselivepreview": "Abbìa 'o \"Live preview\"",
"tog-forceeditsummary": "Chiere a mme quanno se sta azzeccanno nu campo oggetto abbacante",
- "tog-watchlisthideown": "Annascunne 'e cagnamiente d&#39;'a lista 'e cuntrollo mia",
- "tog-watchlisthidebots": "Annasconne 'e cagnamiènte d&#39;'e bot ncopp'a l'elenco 'e cuntrollo",
- "tog-watchlisthideminor": "Annascunne 'e cagnamiente piccerille d&#39;'a lista 'e cuntrollo mia",
+ "tog-watchlisthideown": "Annascunne 'e cagnamiente d' 'a lista 'e cuntrollo mia",
+ "tog-watchlisthidebots": "Annasconne 'e cagnamiènte d' 'e bot ncopp'a l'elenco 'e cuntrollo",
+ "tog-watchlisthideminor": "Annascunne 'e cagnamiente piccerille d' 'a lista 'e cuntrollo mia",
"tog-watchlisthideliu": "Annascunne 'e cagnamiénte 'e l'utente riggistrate 'a l'elenco 'e cuntrollo",
"tog-watchlisthideanons": "Annascunne 'e cagnamiente fatte d'anonime 'a l'elenco 'e cuntrollo",
"tog-watchlisthidepatrolled": "Annascunne 'e modifiche cuntrullate 'a l'elenco 'e cuntrollo",
- "tog-ccmeonemails": "Famme na masciata pùre c&#39;'a copia 'e le mail mannate a l'ati utente",
+ "tog-ccmeonemails": "Famme na masciata pùre c' 'a copia 'e le mail mannate a l'ati utente",
"tog-diffonly": "Nun me fà vedé cuntenute aropp'o cunfronto nfra verziune",
"tog-showhiddencats": "Fa' vedé 'e categurie annascunnute",
"tog-norollbackdiff": "Nun fà vedé 'o cunfronto nfra verziune quanno se fà nu rollback",
@@ -225,6 +227,7 @@
"pool-queuefull": "A córa 'e fatiche è chiena",
"pool-errorunknown": "Errore scanusciuto",
"pool-servererror": "'O servizio contatore d''e fatiche nun è a disposizióne ($1).",
+ "poolcounter-usage-error": "Errore d'uso: $1",
"aboutsite": "'Nfrummazione ncòpp'a {{SITENAME}}",
"aboutpage": "Project:'Nfrummazione",
"copyright": "Cuntenute suggiette a licienza 'e auso $1 se nun fuje ritto atro.",
@@ -234,6 +237,7 @@
"disclaimers": "Avvertimiènte",
"disclaimerpage": "Project:Avvertimiènte generale",
"edithelp": "Guida",
+ "helppage-top-gethelp": "Ajùto",
"mainpage": "Paggena prencepale",
"mainpage-description": "Paggena prencepale",
"policy-url": "Project:Policy",
@@ -312,15 +316,18 @@
"readonly_lag": "'O database s'è bloccato automaticamente pe' tramente ca 'e servers 'e database schiave sincronizzano c' 'o server masto.",
"internalerror": "Errore 'nterno",
"internalerror_info": "Errore 'nterno: $1",
+ "internalerror-fatal-exception": "Errore irreversibbele 'e tipo \"$1\"",
"filecopyerror": "Nun se può copiare 'o file \"$1\" int'a \"$2\".",
"filerenameerror": "Nun se può rinnummenare 'o file \"$1\" into \"$2\".",
"filedeleteerror": "Nun se pô scancellà 'o file \"$1\"",
"directorycreateerror": "Nun se può crià 'a cartella \"$1\".",
+ "directoryreadonlyerror": "'A cartella \"$1\" è de lettura surtanto.",
+ "directorynotreadableerror": "'A cartella \"$1\" nun se può liegge.",
"filenotfound": "Nun se può truvà 'o file \"$1\".",
"unexpected": "Valore imprevisto: \"$1\"=\"$2\".",
"formerror": "Sbàglio: nun se può mannà 'o modulo",
"badarticleerror": "Chest'azione nun se può fà int'a sta paggena.",
- "cannotdelete": "Nun è possibbele scassà 'a paggena o 'a fiura $1 addamannata. Putria éssere stato già scancellato.",
+ "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-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\"",
@@ -337,7 +344,8 @@
"viewsourcetext": "Putisse vedé e copià 'o codece surgiva 'e sta paggena:",
"viewyourtext": "Putisse vedé e copià 'o codice surgiva d' 'e <strong>cagnamiénte tuoje</strong> a sta paggena:",
"protectedinterface": "Sta paggena nce appruviggióna 'e n'interfaccia testo p' 'o software dint'a sta wiki, e s'è prutetta pe' nce scanzà 'e cocch'abbuso.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
- "editinginterface": "'''Attenziò:''' 'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
+ "editinginterface": "<strong>Attenziò:</strong> 'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.",
+ "translateinterface": "Si se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
"cascadeprotected": "Sta paggena è stata prutetta 'a 'o cangamento pecché sta dint'a {{PLURAL:$1|sta paggena, che è prutetta|sti paggene, che songo prutette}} quann' 'a l'ozione \"ricurziva\" è attiva:\n$2",
"namespaceprotected": "Nun avite permesso a cagnà 'e paggene dint'a stu namespace '''$1'''.",
"customcssprotected": "Nun v'è permesso 'a cagnà sta paggena CSS, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
@@ -394,17 +402,19 @@
"userlogin-resetlink": "V'avite scurdato 'e dettaglie d'acciesso vuoste?",
"userlogin-resetpassword-link": "Te sì scurdat' 'a password?",
"userlogin-helplink2": "Aiuto cu l'accieso",
+ "userlogin-loggedin": "Sì già connesso comme {{GENDER:$1|$1}}.\nUsa 'o modulo ccà abbascio pe trasì com'a n'atu utente.",
+ "userlogin-createanother": "Cria n'at'account",
"createacct-emailrequired": "Indirizzo email",
"createacct-emailoptional": "Indirizzo 'e posta elettronica (ozzionale)",
- "createacct-email-ph": "Scrive 'o nderizzo mail tuo",
- "createacct-another-email-ph": "Scrive nderizzo mail",
+ "createacct-email-ph": "Scrivite 'o nderizzo mail vuosto",
+ "createacct-another-email-ph": "Scrivite nderizzo mail",
"createaccountmail": "Usa na password qualunque temporanea e manna sta password a l'indirizzo 'e posta e-mail specificato",
"createacct-realname": "Nomme riale (ozzionale)",
"createaccountreason": "Mutivo:",
"createacct-reason": "Mutivo",
"createacct-reason-ph": "Pecché staje crianno n'at'utenza",
"createacct-captcha": "Cuntrollo 'e sicurezza",
- "createacct-imgcaptcha-ph": "Scrive 'o testo ca vire ncoppa",
+ "createacct-imgcaptcha-ph": "Scrivite 'o testo ca vedite ncoppa",
"createacct-submit": "Cria 'a toja utenza",
"createacct-another-submit": "Cria 'n atro account",
"createacct-benefit-heading": "{{SITENAME}} è fatta 'e perzone comme te.",
@@ -429,6 +439,7 @@
"wrongpassword": "'A password nzertàta nun è bbona.\nPe' piacere pruvate n'ata vota.",
"wrongpasswordempty": "'A password nzertàta è abbacante.\nPe' piacere pruvate n'ata vota.",
"passwordtooshort": "'E password hann'avé minimo {{PLURAL:$1|nu carattere|$1 carattere}}.",
+ "passwordtoolong": "'E password nun ponno essere cchiù luonghe 'e {{PLURAL:$1|nu carattere|$1 carattere}}.",
"password-name-match": "'A password adda essere diverza 'a 'o nomme utente.",
"password-login-forbidden": "L'uso 'e stu nomme utente e password è stato proibito.",
"mailmypassword": "Riabbìa 'a password",
@@ -446,7 +457,7 @@
"emailnotauthenticated": "'O ndirizzo 'e posta elettronica nun è stat'ancora cunfermato.\nNun se mannarranno mmasciate e-mail p' ' funzione ccà abbascio.",
"noemailprefs": "Avite 'a specificà nu ndirizzo e-mail pe ll'attivà sti funzione.",
"emailconfirmlink": "Cunferma 'o nderizzo mail d' 'o tujo.",
- "invalidemailaddress": "'O nderizzo e-mail scritto nun se può accettà pecché nun tene nu furmatto buono.\nScrive n'ata vota nu nderizzo bbuono o abbacanta 'a casella.",
+ "invalidemailaddress": "'O nderizzo e-mail scritto nun se può accettà pecché nun tene nu furmatto buono.\nScrivite n'ata vota nu nderizzo bbuono o abbacantate 'a casciulella.",
"cannotchangeemail": "'E ccunte mail nun se ponno cagnà dint'a sta wiki.",
"emaildisabled": "Chistu sito nun può mannà mmasciate e-mail.",
"accountcreated": "Cunto criato",
@@ -552,10 +563,12 @@
"anoneditwarning": "'''Attenzione:''' Nun avite fatto l'acciesso. 'A cronologgia d' 'a vosta sarrà visibbele pubbrecamente si facite cocche cagnamiento. Si <strong>[$1 tràse]</strong> o <strong>[$2 crìe nu cunto]</strong>, 'e cagnamiente vuoste ve sarranno attribbuite a vvuje, nzieme a n'ati migliuramente.",
"anonpreviewwarning": "''Nun avite fatto 'o login. Sarvann' 'a paggena, l'indirizzo IP d' 'o vuosto sarrà riggistrato dint'a cronologgia.''",
"missingsummary": "'''Attenziò:''' nun s'è specificato l'oggetto 'e stu cagnamiento. Clicann' 'a \"{{int:savearticle}}\" n'ata vota 'o cagnamiento sarrà sarvato cu l'oggetto abbacante.",
+ "selfredirect": "<strong>Attenziò:</strong> State crianno nu redirect a 'o stesso articolo.\nPuò darse c'avites specificato 'o pizzo sbagliato p' 'o redirect, o ca stavate cagnanno 'o pizzo sbagliato.\nSi cliccate \"{{int:savearticle}}\" n'ata vota, si criarrà 'o redirect.",
"missingcommenttext": "Pe' piacere scrivete nu commento ccà abbascio.",
"missingcommentheader": "'''Attenziò:''' nun s'è specificato l'oggetto/titolo 'e stu commento. Clicann' 'a \"{{int:savearticle}}\" n'ata vota 'o cagnamiento sarrà sarvato c' 'o titolo abbacante.",
"summary-preview": "Anteprimma'e l'oggetto:",
"subject-preview": "Anteprima 'e l'oggetto/intestazione:",
+ "previewerrortext": "È succiesso n'errore quanno se steva a ffà pre-veré 'e cagnamiente vuoste.",
"blockedtitle": "Utente bloccato.",
"blockedtext": "<strong>'O nomme utente o ll'IP vuosto è stato bloccato.</strong>\n\n'O blocco è stato mpustato 'a $1. 'O mutivo d' 'o blocco è chesto: ''$2''\n\n* Abbiàta d' 'o blocco: $8\n* Ammaturità d' 'o blocco: $6\n* Tiempo 'e blocco: $7\n\nPutite cuntattà $1 o n'atu [[{{MediaWiki:Grouppage-sysop}}|ammenistratore]] pe' discutere 'o blocco.\n\nVedite c' 'a funzione 'Scrivete a ll'utente' nun è attiva si nun s'è riggistrato 'o ndirizzo e-mail buono dint' 'e [[Special:Preferences|preferenze]] o pùre si ll'uso 'e tale funzione è stato bloccato.\n\n'O ndirizzo IP attuale è $3, 'o nummero ID d' 'o blocco è #$5.\nPe' piacere avite 'e specificà tutte sti dettaglie ccà ncoppa quanno facite cocche dumanna.",
"autoblockedtext": "Ll'IP vuosto è stato bloccato pecché 'o steva piglianno n'atu utente, ch'è stato bloccato pe' $1.\n\n'O mutivo d' 'o blocco è chesto:\n\n:''$2''\n\n* Abbiàta d' 'o blocco: $8\n* Ammaturità d' 'o blocco: $6\n* Tiempo 'e blocco: $7\n\nPutite cuntattà $1 o n'atu [[{{MediaWiki:Grouppage-sysop}}|ammenistratore]] pe' discutere 'o blocco.\n\nVedite c' 'a funzione 'Scrivete a ll'utente' nun è attiva si nun s'è riggistrato 'o ndirizzo e-mail buono dint' 'e [[Special:Preferences|preferenze]] o pùre si ll'uso 'e tale funzione è stato bloccato.\n\n'O ndirizzo IP attuale è $3, 'o nummero ID d' 'o blocco è #$5.\nPe' piacere avite 'e specificà tutte sti dettaglie ccà ncoppa quanno facite cocche dumanna.",
@@ -649,6 +662,10 @@
"content-model-text": "testo nurmale",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Oggetto abbacante",
+ "content-json-empty-array": "Array abbacante",
+ "duplicate-args-category": "Paggene c'ausano argomiente dupprecate dint' 'e chiammate a 'e mudelle",
+ "duplicate-args-category-desc": "'A paggena tene chiammate a mudelle c'ausassero argomiente dupprecate, comme p'esempio <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Attenziò:''' Sta paggena cuntene troppe chiammate a 'e funzione parser.\n\nN'avesse 'a tené meno 'e $2, p' 'o mumento ce ne {{PLURAL:$1|stà $1|stanno $1}}.",
"expensive-parserfunction-category": "Paggene cu troppe chiammate a 'e funzione parser",
"post-expand-template-inclusion-warning": "'''Attenzione:''' 'a diminsiona d' 'e template ionte ccà è troppo grossa.\nCocche template se lassarrà fore.",
@@ -703,7 +720,7 @@
"history-feed-empty": "'A paggena addimannata nun esiste.\nPuò darsi ca è stata scancellata d' 'a wiki, o s'è cagnato 'o nomme.\nProva a vedé [[Special:Search|dint' 'a wiki]] si ce stanno nnove paggene.",
"rev-deleted-comment": "(Oggetto d' 'o cagnamiento luvato)",
"rev-deleted-user": "(nomme utente luvato)",
- "rev-deleted-event": "(azione d' 'o log luvata)",
+ "rev-deleted-event": "(dettaglie d' 'o log luvate)",
"rev-deleted-user-contribs": "[nomme utente o indirizzo IP luvato - cagnamiento annascunnuto d' 'a cronologgia]",
"rev-deleted-text-permission": "Sta verziona d' 'a paggena è stata '''scancellata'''.\nAscìa dint' 'o [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} riggistro d' 'e scancellamiente] pe ne sapé 'e cchiù.",
"rev-suppressed-text-permission": "Sta verziona d' 'a paggena è stata '''luvata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.",
@@ -728,21 +745,21 @@
"revdelete-selected-text": "{{PLURAL:$1|Verziona scigliuta|Verziune scigliute}} 'e [[:$2]]:",
"revdelete-selected-file": "{{PLURAL:$1|Verzione scigliuta|Verziune scigliute}} d' 'o file 'e [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Fatto scigliuto d' 'o riggistro|Fatte scigliute d' 'o riggistro}}:",
- "revdelete-text-text": "'E verziune scancellate cumpareno ancora dint' 'a cronologgia d' 'a paggena, ma na parte d' 'o cuntenuto lloro nun sarrà disponibbele a 'o pubbreco.",
- "revdelete-text-file": "'E verziune 'e file scancellate cumpareno ancora dint' 'a cronologgia d' 'o file, ma parte d' 'o cuntenuto lloro nun sarrà disponibbele a 'o pubbreco.",
- "logdelete-text": "'E fatte 'e riggistro scancellate cumpareno ancora dint' 'a cronologgia 'e riggistro, ma na parte d' 'o cuntenuto lloro nun sarrà disponibbele a 'o pubbreco.",
+ "revdelete-text-text": "'E verziune scancellate cumpareno ancora dint' 'a cronologgia d' 'a paggena, ma na parte d' 'o cuntenuto lloro nun sarrà a disposizione a 'o pubbreco.",
+ "revdelete-text-file": "'E verziune 'e file scancellate cumpareno ancora dint' 'a cronologgia d' 'o file, ma parte d' 'o cuntenuto lloro nun sarrà a disposizione a 'o pubbreco.",
+ "logdelete-text": "'E fatte 'e riggistro scancellate cumpareno ancora dint' 'a cronologgia 'e riggistro, ma na parte d' 'o cuntenuto lloro nun sarrà a disposizione a 'o pubbreco.",
"revdelete-text-others": "Ll'at'ammenistrature puterranno ancora trasì e arrepiglià 'e cuntenute annascunnute, si nun so' state mpustate cchiù restrizziune.",
"revdelete-confirm": "Pe' piacere cunfermate ca overo vulite ffà chesto, ca cunuscete 'e cunseguenze, e ca state facenno chesto rispettanno 'e [[{{MediaWiki:Policy-url}}|linee guida]].",
"revdelete-suppress-text": "Sti luvamiente hana essere fatte '''unicamente''' dint' 'e situaziune ccà abbascio:\n* nfurmaziune potenzialmente diffamatorie\n* date perzunale inopportune\n*: ''indirizze, nummeri 'e telefono, codece fiscale, ecc.''",
"revdelete-legend": "Miette 'e limmete 'e visibilità",
"revdelete-hide-text": "Testo d' 'a verziona",
"revdelete-hide-image": "Annascunne 'e cuntenute d' 'o file",
- "revdelete-hide-name": "Annascunne aziona e l'oggetto 'e cchesta",
+ "revdelete-hide-name": "Annascunne l'oggetto e parametre",
"revdelete-hide-comment": "Modifeca oggetto",
"revdelete-hide-user": "Nomme o indirizzo IP 'e ll'autore",
"revdelete-hide-restricted": "Annascunne 'e nfurmaziune 'nnecate pure a l'ammenistrature",
"revdelete-radio-same": "(nun cagnà)",
- "revdelete-radio-set": "Nasconde",
+ "revdelete-radio-set": "Annascunnuto",
"revdelete-radio-unset": "Faje vedé",
"revdelete-suppress": "Annascunne 'e nfurmaziune pure a l'ammenistrature",
"revdelete-unsuppress": "Scancella 'e limmete ncopp' 'e verziune arripigliate",
@@ -761,7 +778,7 @@
"revdelete-modify-missing": "Nun se può cagnà l'oggetto cu l'ID $1 pecché nun è prisente int' 'o database.",
"revdelete-no-change": "'''Attenziò:''' l'oggetto cu data $2, $1 teneva già 'e mpustaziune 'e visibbilità addimannate.",
"revdelete-concurrent-change": "Nun se può cagnà l'oggetto cu data $2, $1: 'O status 'e chisto pare ch'è stato cagnato pe cocch'utente pe' tramente ca 'o stavate a cagnà.\nPe' piacere cuntrullate 'o riggistro.",
- "revdelete-only-restricted": "Errore quanno s'annasconneva l'oggetto cu data $2, $1: Nun può luvà oggette d' 'a vista 'e ll'ammenistratore senza scegliere manco una 'e l'at'opziune 'e visibbelità.",
+ "revdelete-only-restricted": "Errore pe' tramente ca s'annasconneva l'oggetto cu data $2, $1: Nun può luvà oggette d' 'a vista 'e ll'ammenistratore senza scegliere manco una 'e l'at'opziune 'e visibbelità.",
"revdelete-reason-dropdown": "* Mutive comune pe' ffà scancellamiento\n** Violazione d' 'o copyright\n** Cummente o nfurmaziune perzunale inappropriate\n** Nomme utente inappropriato\n** Nfurmazione potenzialmente diffamatoria",
"revdelete-otherreason": "Ati/cchiù ragiune:",
"revdelete-reasonotherlist": "Ati ragiune",
@@ -791,7 +808,6 @@
"mergehistory-same-destination": "'E paggene d'origgine e destinazione nun ponno essere eguale",
"mergehistory-reason": "Mutivo:",
"mergelog": "Riggistro d'aunione",
- "pagemerge-logentry": "song'aunite [[$1]] int'a [[$2]] (verziune nfin'a $3)",
"revertmerge": "Annulla aunione",
"mergelogpagetext": "Ccà abbascio ce sta na lista cu ll'urdeme aunione int'a cronologgia d' 'e ddoje paggene.",
"history-title": "$1: cronologgia d' 'e cagnamiente",
@@ -814,6 +830,8 @@
"notextmatches": "Voce addemannata nun truvata dint' 'e teste 'e articulo",
"prevn": "{{PLURAL:$1|precedente|precedente $1}}",
"nextn": "{{PLURAL:$1|successivo|successive $1}}",
+ "prev-page": "paggena 'e primma",
+ "next-page": "paggena aroppo",
"prevn-title": "{{PLURAL:$1|Risultato precediente|$1 risultate precedenti}}",
"nextn-title": "{{PLURAL:$1|Risultato successivo|$1 risultate successive}}",
"shown-title": "Fa vere {{PLURAL:$1|'nu risultato|$1 risultate}} ppe paggena",
@@ -832,6 +850,7 @@
"search-result-category-size": "{{PLURAL:$1|1 utente|$1 utente}} ({{PLURAL:$2|1 sottocategurìa|$2 sottocategurìe}}, {{PLURAL:$3|1 file|$3 files}})",
"search-redirect": "(redirect $1)",
"search-section": "(sezzione $1)",
+ "search-category": "(categurìa $1)",
"search-file-match": "(currispunnenza dint' 'e cuntenute d' 'o file)",
"search-suggest": "Prova chisto: $1",
"search-interwiki-caption": "Prugiette frate",
@@ -865,6 +884,11 @@
"prefs-personal": "Profilo utente",
"prefs-rc": "Urdeme nove",
"prefs-watchlist": "Asservate speciale",
+ "prefs-editwatchlist": "Cagna l'elenco 'e paggene cuntrullate",
+ "prefs-editwatchlist-label": "Cagna ll'elemente 'e l'elenco 'e paggene cuntrullate",
+ "prefs-editwatchlist-edit": "Vide e lèva titule dint' 'a l'elenco 'e paggene cuntrullate vuosto",
+ "prefs-editwatchlist-raw": "Cagna l'elenco 'e paggene cuntrullate ncruro",
+ "prefs-editwatchlist-clear": "Sbacanta l'elenco 'e paggene cuntrullate",
"prefs-watchlist-days": "Nummero 'e juorne 'a mmustà dint'a l'elenco 'e cuntrollo:",
"prefs-watchlist-days-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}",
"prefs-watchlist-edits": "Numero massimo 'e cagnamiente 'a mmustà ch' 'e funziune avanzate:",
@@ -934,7 +958,7 @@
"gender-female": "È riggistrata ncopp' 'a {{SITENAME}}",
"prefs-help-gender": "Mpizzà sta preferenza è ozzionale.\n'O software aúsa stu valore pe' se vutà a vuje e v'anummenà a l'ati utente ausanno 'o gennere grammatecale buono.\nCheste nfurmaziune sarranno pubbreche.",
"email": "E-mail",
- "prefs-help-realname": "'O nomme overo vuosto è ozzionale.\nSi sciglite 'e nzertà 'o nomme overo, chesto s'ausarrà pe' dà l'utente l'attribuzione d' 'a fatica fatta.",
+ "prefs-help-realname": "'O nomme overo vuosto è opzionale.\nSi 'o scrivete, se putesse ausà pe' ve dà l'attribuzione d' 'a fatica fatta.",
"prefs-help-email": "L'e-mail vuosto è ozzionale, ma permettesse 'e ricevere 'a password propria quanno v' 'a scurdate.",
"prefs-help-email-others": "Putite pure scegliere 'e lassà che l'at'utente ve mannassero mmasciate via e-mail cu nu cullegamiento â paggena d'utente o chiacchiera.\nLl'indirizzo e-mail vuosto nun è scummigliato quanno l'at'utente ve cuntattano.",
"prefs-help-email-required": "L'indirizzo e-mail è obbligatorio.",
@@ -955,6 +979,7 @@
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Differenze",
"prefs-help-prefershttps": "Sta preferenza averrà affetto 'a 'o prossimo acciesso vuosto.",
+ "prefswarning-warning": "Avite fatto cagnamiente a 'e preferenze d' 'e vuoste ca nun so' stat'ancora sarvate.\nSi ascite 'a sta paggena senza clickà \"$1\" 'e preferenze d' 'e vuoste nun sarranno agghiurnate.",
"prefs-tabs-navigation-hint": "Suggerimento: se ponno ausà 'e buttòne 'e freccia a manca e a dritta pe' ve muovere nfra 'e schede dint'a l'alenco d' 'e schede.",
"email-address-validity-valid": "L'indirizzo e-mail pare valido",
"email-address-validity-invalid": "Nzerta n'indirizzo e-mail valido",
@@ -1040,6 +1065,7 @@
"right-protect": "Cagna 'e livelle 'e prutezione 'e cagna paggene prutette ricurzivamente",
"right-editprotected": "Cagna 'e paggene prutette cu \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Cagna 'e paggene prutette cu \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Cagna 'o modello 'e cuntenute 'e na paggena",
"right-editinterface": "Modifeca 'a nterfaccia utente",
"right-editusercssjs": "Cagna 'e file CSS e JS e l'at'utente",
"right-editusercss": "Cagna 'e file CSS 'e l'at'utente",
@@ -1051,7 +1077,7 @@
"right-viewmyprivateinfo": "Vide 'e proprie date private (e.g. e-mail, nomme overo)",
"right-editmyprivateinfo": "Cagna 'e date perzunale proprie (p'esempio: e-mail, nomme overo)",
"right-editmyoptions": "Cagna 'e preferenze proprie",
- "right-rollback": "Annulla ampresso 'e cagnamiente 'e ll'urdem'utente c'avesse cagnato na paggena particolare",
+ "right-rollback": "Annulla ampresso 'e cagnamiente 'e ll'urdem'utente c'avesse cagnato na paggena particulare",
"right-markbotedits": "Nzégna 'e cagnamiente suggette a rollback comme affettuate 'a nu bot",
"right-noratelimit": "Nun suggetto a lemmeto d'aziune",
"right-import": "Carreca paggene 'a n'ati wiki",
@@ -1067,6 +1093,7 @@
"right-override-export-depth": "Esporta 'e paggene azzeccanno 'e paggene cullegate nfin'a na profondità 'e 5",
"right-sendemail": "Manna na mail a ll'at'utente",
"right-passwordreset": "Vide 'e mmasciate 'e rimpustazione d' 'a password",
+ "right-managechangetags": "Crìa e scancella 'e [[Special:Tags|tag]] d' 'o database",
"newuserlogpage": "Riggistro 'e nuove utente",
"newuserlogpagetext": "Chest'è nu riggistro 'e criazione d'utenze.",
"rightslog": "Deritte 'e ll'utente",
@@ -1097,7 +1124,7 @@
"action-suppressionlog": "vide stu riggistro privato",
"action-block": "blocca 'e cagnamiente 'a parte 'e st'utente",
"action-protect": "cagna 'e livelle 'e prutezione pe' sta paggena",
- "action-rollback": "annulla ampresso 'e cagnamiente 'e ll'urdem'utente c'avesse cagnato na paggena particolare",
+ "action-rollback": "annulla ampresso 'e cagnamiente 'e ll'urdem'utente c'avesse cagnato na paggena particulare",
"action-import": "carreca paggene 'a n'ata wiki",
"action-importupload": "carreca paggene 'a n'upload 'e file",
"action-patrol": "nzegna 'e cagnamiente 'e l'ati utente comme cuntrullate",
@@ -1112,6 +1139,8 @@
"action-viewmywatchlist": "vide l'alenco 'e cuntrollo proprio",
"action-viewmyprivateinfo": "vide 'e date perzunale",
"action-editmyprivateinfo": "cagnà 'e proprie date perzunale",
+ "action-editcontentmodel": "càgna 'o mudelo 'e cuntenute 'e na paggena",
+ "action-managechangetags": "crìa e scancella 'e tag d' 'o database",
"nchanges": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|'a ll'urdema visita}}",
"enhancedrc-history": "cronologgia",
@@ -1144,7 +1173,7 @@
"rcshowhidepatr": "$1 cagnamiente cuntrullate",
"rcshowhidepatr-show": "Faje vedé",
"rcshowhidepatr-hide": "Annascunne",
- "rcshowhidemine": "$1 'e ffatiche mmee",
+ "rcshowhidemine": "$1 'e ffatiche mieie",
"rcshowhidemine-show": "Faje vedé",
"rcshowhidemine-hide": "Annascunne",
"rclinks": "Faje vedé ll'urdeme $1 cagnamiente dint' ll'urdeme $2 juorne<br />$3",
@@ -1181,9 +1210,9 @@
"uploaderror": "Errore a carrecà",
"upload-recreate-warning": "'Attenziò'': nu file cu stu nomme è stato scancellato o spustato.'''\n'O riggistro d' 'e scancellamiente e d' 'e spustamiente 'e sta paggena è stato scritto ccà abbascio pe' ffà comodo:",
"uploadtext": "Ausà 'o modulo ccà sotto pe' carrecà file nuove. Pe' vedé o ascià 'e file carrecate già, vide 'o [[Special:FileList|riggistro 'e file carrecate]]. Càrreche 'e file e virzione nove d' 'e file songo riggistrate dint' 'o [[Special:Log/upload|riggistro d'upload]], 'e scancellamiente dint' 'o [[Special:Log/delete|riggistro ccà]].\n\nPe' nzertà nu file dint'a na paggena, allora facite nu cullegamento 'e stu tipo:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' p'ausà a verziona cumpleta d' 'o file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativo]]</nowiki></code>''' p'ausà na verziona luonga 200 pixel nzertata dint'a na cascia, allineata a manca e cu nu 'testo alternativo' comme didascalia\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pe' crià nu cullegamento diretto a 'o file senza 'o fà vedé",
- "upload-permitted": "Tipe 'e file permesse: $1.",
- "upload-preferred": "Tipe 'e file cunzigliate: $1.",
- "upload-prohibited": "Tipe 'e file nun permesse: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tipo 'e file permesso|Tipe 'e file permesse}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipo 'e file cunzigliato|Tipe 'e file cunzigliate}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipo 'e file nun permesso|Tipe 'e file nun permesse}}: $1.",
"uploadlogpage": "Riggistro 'e carreche",
"uploadlogpagetext": "Ccà abbascio song'alencate l'urdeme file carrecate.\nCuntrullate 'a [[Special:NewFiles|gallaria d' 'e file nuove]] pe' ve ffà na guardata cchiù visuale 'e tutto.",
"filename": "Nomme d' 'o file",
@@ -1252,7 +1281,7 @@
"filewasdeleted": "Nu file ca se chiamave cumm'a chillo c'avete primma carrecato e pò è stato scancellato.\nVedite 'e cuntrullà 'o $1 apprimma ca cuntinuate c' 'a carreca.",
"filename-bad-prefix": "'O nomme d' 'o file ca state a carrecà accummencia pe' ''\"$1\"''', ca nurmalmente è 'o nomme c'assegnasse na machina fotografeca automatecamente ed è nu nomme nun descrittivo.\nPe' piacere scigliete n'atu nomme ca fosse cchiù descrittivo.",
"upload-success-subj": "Carreca ngarrata",
- "upload-success-msg": "'A carreca tuja d' 'o [$2] è asciuta bona. Mò è disponibbele ccà: [[:{{ns:file}}:$1]]",
+ "upload-success-msg": "'A carreca tuja d' 'o [$2] è asciuta bona. Mò è a disposizione ccà: [[:{{ns:file}}:$1]]",
"upload-failure-subj": "Probblema c' 'a carreca",
"upload-failure-msg": "Ce steva nu probblema c' 'a carreca 'a [$2]:\n\n$1",
"upload-warning-subj": "Avviso 'e carreca",
@@ -1340,7 +1369,7 @@
"license-header": "Licenza",
"nolicense": "Nisciuna licienza scigliuta",
"licenses-edit": "Càgna opzziune 'e licenza",
- "license-nopreview": "(Anteprimma nun disponibbele)",
+ "license-nopreview": "('Anteprimma nun se trova a disposizione)",
"upload_source_url": "(nu file 'a n'URL valido e accessibbele pubblecamente)",
"upload_source_file": "(nu file d' 'o computer 'o tuojo)",
"listfiles-delete": "scancèlla",
@@ -1376,7 +1405,7 @@
"filehist-comment": "Commento",
"imagelinks": "Jonte ê ffiure",
"linkstoimage": "{{PLURAL:$1|Sta paggena cullega|$1 'e sti paggene cullegano}} a stu file:",
- "linkstoimage-more": "Cchiù 'e $1 {{PLURAL:$1|paggene cullegano|paggene cullegano}} a stu file.<br />\nL'alenco ccà abbascio fà vedé {{PLURAL:$1|'a primma paggena ca cullega|'e primme $1 paggene ca cullegano}} sulamente a stu file.<br />\nNa [[Special:WhatLinksHere/$2|lista completa]] è disponibbele.",
+ "linkstoimage-more": "Cchiù 'e $1 {{PLURAL:$1|paggene cullegano|paggene cullegano}} a stu file.<br />\nL'alenco ccà abbascio fà vedé {{PLURAL:$1|'a primma paggena ca cullega|'e primme $1 paggene ca cullegano}} sulamente a stu file.<br />\nNa [[Special:WhatLinksHere/$2|lista completa]] è a disposizione.",
"nolinkstoimage": "Nisciuna paggena cullega a stu file.",
"morelinkstoimage": "Vide [[Special:WhatLinksHere/$1|cchiù cullegamiente]] a stu file.",
"linkstoimage-redirect": "$1 (redirezionamiente d' 'o file) $2",
@@ -1440,7 +1469,6 @@
"statistics": "Statistiche",
"statistics-header-pages": "Statistiche d' 'e paggene",
"statistics-header-edits": "Cagna 'e statistiche",
- "statistics-header-views": "Vide 'e statistiche",
"statistics-header-users": "Statistiche 'e l'utente",
"statistics-header-hooks": "Ati statistiche",
"statistics-articles": "Paggene 'e cuntenute",
@@ -1449,16 +1477,12 @@
"statistics-files": "File carrecate",
"statistics-edits": "Cagnamiente d' 'e paggene 'a che {{SITENAME}} s'è accumminciata",
"statistics-edits-average": "Cagnamiente medie pe' paggena",
- "statistics-views-total": "Visite 'n totale",
- "statistics-views-total-desc": "'E vviste a paggene ca nun esisteno e paggene speciale nun cuntano",
- "statistics-views-peredit": "Visite pe' cagnamiento",
"statistics-users": "[[Special:ListUsers|Utente riggistrate]]",
"statistics-users-active": "Utente attive",
"statistics-users-active-desc": "Utente c'hanno fatto coccosa dint' 'a {{PLURAL:$1|l'urdemo juorno|l'urdeme $1 juorne}}",
- "statistics-mostpopular": "Pàggene cchiù visitate",
"pageswithprop": "Paggene cu na prupietà 'e paggena",
"pageswithprop-legend": "Paggene cu na prupietà 'e paggena",
- "pageswithprop-text": "Sta paggena alenca 'e paggene c'ausano na prupietà particolare 'e paggena.",
+ "pageswithprop-text": "Sta paggena alenca 'e paggene c'ausano na prupietà particulare 'e paggena.",
"pageswithprop-prop": "Nomme d' 'a prupietà:",
"pageswithprop-submit": "Vàje",
"pageswithprop-prophidden-long": "valore d' 'a prupietà d' 'o testo luongo annascunnuto ($1)",
@@ -1496,9 +1520,9 @@
"uncategorizedtemplates": "Template senza categurìa",
"unusedcategories": "Categurìe ca nun s'ausano",
"unusedimages": "File ca nun s'ausano",
- "popularpages": "Paggene cchiù 'speziunate",
"wantedcategories": "Categurìe addimannate",
"wantedpages": "Paggene cchiù addemannate",
+ "wantedpages-summary": "Elenco 'e paggene nun esistente ca teneno na parte assaje d' 'e link ca spuntassero a chiste. Pe' na lista 'e paggene nun esistente ca teneno redirect ca spuntassero a chiste, vide [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Titolo invalido mmiez' 'o nzieme 'e risultate: $1",
"wantedfiles": "File addimannate",
"wantedfiletext-cat": "Chisti file s'ausano ma nun esisteno. 'E file ca veneno 'e n'archivio 'e fore s'alencano ccà senza cuntrullà l'esistenza suja. Sti fauze pusitive sarranno <del>nzignate</del>. 'E paggene ca teneno sti file ca nun esisteno song'alencate dint'a [[:$1]].",
@@ -1554,20 +1578,22 @@
"notargettext": "Nun avete specificato na paggena o n'utente 'e destinazione pe' putè fa sta operazione.",
"nopagetitle": "Nisciuna paggena 'e destinazione",
"nopagetext": "'A paggena 'e destinazione c'avite specificato nun esiste.",
- "pager-newer-n": "{{PLURAL:$1|1 cchiù viecchio|$1 cchiù viecchie}}",
+ "pager-newer-n": "{{PLURAL:$1|1 cchiù nova|$1 cchiù nnove}}",
"pager-older-n": "{{PLURAL:$1|1 cchiù viecchio|$1 cchiù viecchie}}",
"suppress": "Supervisione",
"querypage-disabled": "Sta paggena speciale è stutata pe' mutive 'e prestaziune.",
+ "apihelp": "Ajuto cu l'API",
+ "apihelp-no-such-module": "'O modulo \"$1\" nun se trova.",
"booksources": "Funte libbrarie",
"booksources-search-legend": "Ascìa 'e fonte ncopp' 'e libbre",
- "booksources-go": "Vàje",
+ "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.",
"specialloguserlabel": "Mplementatore:",
"speciallogtitlelabel": "Destinazione (titolo o utente):",
"log": "Logs",
"all-logs-page": "Tutte l'archivie pubbleche",
- "alllogstext": "Visualizzazione mmescata 'e tutte 'e riggistre disponibbele ncopp'a {{SITENAME}}.\nPutite restringere 'a vista a sicondo 'o tipo 'e riggistro, 'o nomme utente (sensibbele a 'e maiuscole), o 'e paggene coinvolte (pure chiste songo sensibbele a 'e maiuscole).",
+ "alllogstext": "Visualizzazione mmescata 'e tutte 'e riggistre a disposizione ncopp'a {{SITENAME}}.\nPutite restringere 'a vista a sicondo 'o tipo 'e riggistro, 'o nomme utente (sensibbele a 'e maiuscole), o 'e paggene coinvolte (pure chiste songo sensibbele a 'e maiuscole).",
"logempty": "Nun ce sta n'elemento dint' 'o riggistro azzeccato â ricerca.",
"log-title-wildcard": "Ascìa titole c'accummencieno cu stu testo",
"showhideselectedlogentries": "Cagna visibbelità d' 'e riggistre scigliute",
@@ -1696,7 +1722,7 @@
"wlheader-enotif": "'A funzione 'e notifiche e-mail è appicciata.",
"wlheader-showupdated": "* 'E paggene cca so' state cagnate a l'urdema visita avevano so' nzignate ccà 'n '''grassetto'''.",
"wlnote": "Ccà abbascio {{PLURAL:$1|è elencato 'o cagnamiento cchiù ricente|songo elencate 'e <strong>$1</strong> cagnamiente cchiù recente}} {{PLURAL:$2|int'a ll'urdema ora|int' 'e ll'urdeme <strong>$2</strong> ore}}; 'e date songo agghiurnate 'o $3, $4.",
- "wlshowlast": "Mmusta ll'urdeme $1 ore $2 ghiuorne $3",
+ "wlshowlast": "Mmusta ll'urdeme $1 ore $2 ghiuorne",
"watchlist-options": "Opziune 'a l'elenco 'e paggene cuntrullate",
"watching": "Cuntrullanno...",
"unwatching": "Lassanno 'e cuntrullà...",
@@ -1744,7 +1770,6 @@
"deleteprotected": "Nun putite scancellà sta paggena pecché è stata prutetta.",
"deleting-backlinks-warning": "'''Attenzione:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|ati paggene]] cunteneno cullegamiente o paggene appennute â n'ata paggena ca state pe' scancellà.",
"rollback": "Ausa na revizione 'e primma",
- "rollback_short": "Annulla",
"rollbacklink": "a vascio",
"rollbacklinkcount": "annulla {{PLURAL:$1|nu cagnamiento|$1 cagnamiente}}",
"rollbacklinkcount-morethan": "annulla cchiù 'e {{PLURAL:$1|nu cagnamiento|$1 cagnamiente}}",
@@ -1790,7 +1815,7 @@
"protect-expiring-local": "ammatura 'o $1",
"protect-expiry-indefinite": "indefinite",
"protect-cascade": "Prutegge paggene appennute dint'a sta paggena (spanne 'a prutezione a tutt' 'e paggene appennute ccà).",
- "protect-cantedit": "Nun è possibbele cagnà 'e livelle e prutezione 'e sta paggena, pecchè nun tenite deritto o permesse pe' ne fà 'o cagnamiento.",
+ "protect-cantedit": "Nun è pussibbele cagnà 'e livelle e prutezione 'e sta paggena, pecchè nun tenite deritto o permesse pe' ne fà 'o cagnamiento.",
"protect-othertime": "N'ata durata:",
"protect-othertime-op": "ati durate",
"protect-existing-expiry": "'O tiempo d'ammaturamiento esistente: $3, $2",
@@ -1822,7 +1847,7 @@
"undeleterevisions": "$1 {{PLURAL:$1|verzione|verziune}} archiviate",
"undeletehistory": "Si arrepiglie 'a paggena, tutte 'e verziune sarrann'arrepigliate nziem'a chista.\nSi na paggena nova c' 'o stesso nomme è stata criata 'a che s'è fatto 'o scancellamiento, 'e verziune arripigliate cumparerranno comme cchiù viecchie dint' 'a cronologgia.",
"undeleterevdel": "L'arripiglio nun sarrà affettuato si determina 'o scancellamiento parziale d' 'a verzione 'e mo d' 'a paggena o file.\nInt'a sti case, avite 'e smarcà o annasconnere 'e verziune scancellate cchiù nove.",
- "undeletehistorynoadmin": "Sta paggena è stata scancellata.\n'O mutivo d' 'o scancellamiento 'o truvate scritto dint' 'a 'o riepilego ccà abbascio, nzieme ch' 'e dettaglie 'e l'utente c'hanno cagnato sta paggena apprimma 'e se fà 'o scancellamiento.\n'O testo 'e mo 'e sti verziune è disponibbele sulamente a l'ammenistrature.",
+ "undeletehistorynoadmin": "Sta paggena è stata scancellata.\n'O mutivo d' 'o scancellamiento 'o truvate scritto dint' 'a 'o riepilego ccà abbascio, nzieme ch' 'e dettaglie 'e l'utente c'hanno cagnato sta paggena apprimma 'e se fà 'o scancellamiento.\n'O testo 'e mo 'e sti verziune è a disposizione sulamente a l'ammenistrature.",
"undelete-revision": "Verziune scancellata 'a $1 (comme 'e $4, a $5) 'a $3:",
"undeleterevision-missing": "Verziona invalida o mancante.\nPutisseve avé nu cullegamiento sbagliato o 'a verzione, può darse, ca fosse arrepigliata o scancellata 'e l'archivio.",
"undelete-nodiff": "Nun s'è truvata nisciuna verzione 'e primma.",
@@ -1846,14 +1871,15 @@
"undelete-bad-store-key": "Nun se può arrepiglià 'a verzione d' 'o file cu orario $1: 'o file è stato sperduto apprimma d' 'o scancellamiento.",
"undelete-cleanup-error": "Errore scancellanno n'archivio 'e file nun ausate \"$1\".",
"undelete-missing-filearchive": "Non se può arrepiglià l'archivie cu l'ID $1 pecché nun ce stanno dint' 'o database.\nPò darse ca songo già state arrepigliate.",
- "undelete-error": "Errore quanno s'arrepigliava na paggena",
- "undelete-error-short": "Errore quanno s'arrepigliava na paggena: $1",
- "undelete-error-long": "Errore quanno s'arrepigliava na paggena:\n\n$1",
+ "undelete-error": "Errore pe' tramente ca s'arrepigliava na paggena",
+ "undelete-error-short": "Errore pe' tramente ca s'arrepigliava na paggena: $1",
+ "undelete-error-long": "Errore pe' tramente ca s'arrepigliava na paggena:\n\n$1",
"undelete-show-file-confirm": "Site sicuro/a ca vulite veré 'a verziona scancellata d' 'o file \"<nowiki>$1</nowiki>\" d' 'o $2 a 'e $3?",
"undelete-show-file-submit": "Sì",
"namespace": "Namespace:",
"invert": "abbarruca 'a sceveta",
"tooltip-invert": "Nzegna sta casciulella p'annaconnere 'e cagnamiente a 'e paggene ca stanno dint' 'o namespace c'avite scigliuto (e 'o namespace stesso si l'avite scigliuto)",
+ "tooltip-whatlinkshere-invert": "Nzignate sta casciulella pe' putè annaconnere 'e link 'e paggene dint' 'o namespace scigliuto.",
"namespace_association": "Namespace associate",
"tooltip-namespace_association": "Nzegna sta casciulella pe ncludere 'e cchiacchiere o l'oggetto d' 'o namespace associato c' 'o namespace scigliuto",
"blanknamespace": "(Prencepale)",
@@ -1873,7 +1899,7 @@
"sp-contributions-suppresslog": "contribbute utente scancellate",
"sp-contributions-deleted": "contribbute d'utente scancellate",
"sp-contributions-uploads": "carreche",
- "sp-contributions-logs": "registre",
+ "sp-contributions-logs": "riggistre",
"sp-contributions-talk": "Chiàcchiera",
"sp-contributions-userrights": "gestione d' 'e permesse 'e l'utente",
"sp-contributions-blocked-notice": "St'utente è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:",
@@ -2081,7 +2107,7 @@
"move-over-sharedrepo": "== 'O file esiste ==\n[[:$1]] esiste ncopp'a l'archivio spartuto. Spustanno 'o file ncopp'a stu titolo sovrascreverrà 'o file spartuto.",
"file-exists-sharedrepo": "'O nomme d' 'o file c'avite scigliuto se sta ausanno dint'a l'archivio spartuto.\nPe' piacere, scigliete n'atu nomme.",
"export": "Spurta 'e ppaggene",
- "exporttext": "Vuje putite espurtà 'e teste e cagnà 'a cronologgia 'e na paggena particolare o n'inzieme 'e paggena ca stessero dint' 'a cocche XML.\nChisto po' essere 'mpurtato int'a n'ata wiki ausanno [[Special:Import|mporta pàggene]] 'e MediaWiki.\n\nPe' spurtà paggene, mettite 'o titolo dint' 'e casciulelle ccà abbascio, nu titolo pe' linea e sciglite si vulite 'a verziona 'e mò cu tutt' 'e verziun' 'assieme, o pùre sulamente 'a verziona 'e mò c' 'a nfurmaziona ncopp' 'a ll'urdemo cagnamiento.\n\nComme urtema possibbiletà, putite pure ausà nu cullegamento, p'esempio [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] p' 'a pàggena \"[[{{MediaWiki:Mainpage}}]]\".",
+ "exporttext": "Vuje putite espurtà 'e teste e cagnà 'a cronologgia 'e na paggena particulare o n'inzieme 'e paggena ca stessero dint' 'a cocche XML.\nChisto po' essere 'mpurtato int'a n'ata wiki ausanno [[Special:Import|mporta pàggene]] 'e MediaWiki.\n\nPe' spurtà paggene, mettite 'o titolo dint' 'e casciulelle ccà abbascio, nu titolo pe' linea e sciglite si vulite 'a verziona 'e mò cu tutt' 'e verziun' 'assieme, o pùre sulamente 'a verziona 'e mò c' 'a nfurmaziona ncopp' 'a ll'urdemo cagnamiento.\n\nComme urtema possibbiletà, putite pure ausà nu cullegamento, p'esempio [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] p' 'a pàggena \"[[{{MediaWiki:Mainpage}}]]\".",
"exportall": "Spurta tutt' 'e paggene",
"exportcuronly": "Appenne sulamente 'a verziona 'e mo, e nun tutt' 'a cronologgia",
"exportnohistory": "----\n'''Vedite bbuono:''' 'A funzione 'esportazione d' 'a storia sana d' 'e paggene, ausanno stu modulo, è stata stutata pe' mutive 'e prestaziune.",
@@ -2118,14 +2144,15 @@
"thumbnail-temp-create": "Nun se può crià na miniatura temporanea d' 'o file",
"thumbnail-dest-create": "Nun se può astipà 'a miniatura dint' 'a destinazione",
"thumbnail_invalid_params": "Parametre 'e miniatura invalide",
+ "thumbnail_toobigimagearea": "Diminziona d' 'o File cchiù grossa d'$1",
"thumbnail_dest_directory": "Nun se può crià 'a cartella 'e destinazione",
"thumbnail_image-type": "'O tipo d'immaggene nun è suppurtato",
"thumbnail_gd-library": "Configurazione d' 'a libbreria GD incompleta: funziona perza $1",
"thumbnail_image-missing": "'O file pare ca nun se trova: $1",
"thumbnail_image-failure-limit": "Se so' fatte troppe tentative senza ngarrata ($1 o cchiù) 'a generà sta miniatura. Pruvate n'ata vota cchiù tarde.",
"import": "Mpurta paggene",
- "importinterwiki": "Mpurtazione transkwiki",
- "import-interwiki-text": "Scigliete na wiki e nu titolo 'e paggena 'a mpurtà.\n'E date e l'editore s'astiparranno.\nTutte l'aziune 'e mpurtaziune nfra 'e wiki songo riggistrate dint' 'e [[Special:Log/import|riggistre 'e mpurtazione]].",
+ "importinterwiki": "Carreca paggene 'a n'ata wiki",
+ "import-interwiki-text": "Scigliete na wiki e nu titolo 'e paggena 'a mpurtà.\n'E date e l'editore s'astiparranno.\nTutt' 'e mpurtaziune 'a n'ati wiki songo riggistrate dint' 'e [[Special:Log/import|riggistre 'e mpurtazione]].",
"import-interwiki-sourcewiki": "Wiki d'origgene:",
"import-interwiki-sourcepage": "Paggena d'origgene:",
"import-interwiki-history": "Copia tutt' 'a storia d' 'e verziune 'e sta paggena",
@@ -2145,7 +2172,7 @@
"importcantopen": "Nun se può arapì 'o file 'e mpurtaziona",
"importbadinterwiki": "Cullegamiento interwiki errato",
"importsuccess": "Mpurtaziona fernuta!",
- "importnosources": "Nisciuna fonte p' 'a mpurtaziona transwiki è stata definita; 'e carreche dirette 'e cronologgia nun songo attivate.",
+ "importnosources": "Nisciuna wiki, d' 'a quale s'avess'a mpurtà, è stata definita; 'e carreche dirette 'e cronologgia nun songo attivate.",
"importnofile": "Nisciunu file 'e mpurtazione è stato carrecato.",
"importuploaderrorsize": "'A carreca d' 'o file 'e mpurtazione nun è riuscita.\n'O file è cchiù gruosso d' 'a dimenziona massima 'e carreca.",
"importuploaderrorpartial": "'A carreca d' 'o file mpurtato è fallita.\nNa parta d' 'o file file è stata carrecata ma nun a nu piezzo sano sano.",
@@ -2163,83 +2190,1055 @@
"import-error-special": "'A paggena \"$1\" nun è stata mpurtata pecché appartene a nu namespace specifico ca nun permette sti paggene.",
"import-error-invalid": "'A paggena \"$1\" nun è stata mpurtata pecché 'o nomme 'e mpurtazione nun è bbuono ncopp'a sta wiki.",
"import-error-unserialize": "'A verzione $2 d' 'a paggena \"$1\" nun se può deserializzà. 'A virziona è stata reportata p'ausà 'o mudello 'e cuntenute $3 serializzate cumme $4.",
+ "import-error-bad-location": "'A verzione $2 aúsa nu mudello 'e cuntenuto $3 ca nun se può memorizzà ncopp'a \"$1\" 'e stu wiki, pecché 'a paggena nun supporta stu mudello.",
+ "import-options-wrong": "{{PLURAL:$2|opzione sbagliata|opziune sbagliate}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "'A paggena princepale c'avite dato tène nu titolo invalido.",
"import-rootpage-nosubpage": "'O namespace \"$1\" d' 'a pàggena princepale nun permette 'e sottopaggene.",
"importlogpage": "Riggistro 'e mpurtaziune",
"importlogpagetext": "Mpurtaziune ammenistrative 'e paggene c' 'a storia 'e cagnamiente 'e l'ati wiki.",
- "import-logentry-upload": "ha mpurtato [[$1]] trammeto upload",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|verzione|verziune}} mpurtate",
- "import-logentry-interwiki": "trasferito 'a n'ata wiki 'a paggena $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|verzione|verziune}} mpurtate 'a $2",
"javascripttest": "Test JavaScript",
- "javascripttest-title": "Secutanno test pe' $1",
+ "javascripttest-pagetext-noframework": "Sta paggena è riservata pe' l'esecuziune d' 'e test 'e Javascript.",
+ "javascripttest-pagetext-unknownframework": "Ambiente 'e test scanusciuto \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Azione scanusciuta \"$1\".",
+ "javascripttest-pagetext-frameworks": "Pe' piacere sciglite uno 'e ll'ambiente 'e test ccà abbascio: $1",
+ "javascripttest-pagetext-skins": "Sciglite nu skin pe' ne fà 'e test:",
+ "javascripttest-qunit-intro": "Vedite 'a [$1 documentaziona d' 'o test] ncopp'a mediawiki.org.",
"tooltip-pt-userpage": "A toja paggena utente",
+ "tooltip-pt-anonuserpage": "'A paggena utente pe l'IP ca vuje state cagnanno cumme",
"tooltip-pt-mytalk": "A toja paggena 'e discussione",
+ "tooltip-pt-anontalk": "Chiacchieria ncopp' 'e cagnamiente 'a st'indirizzo IP",
"tooltip-pt-preferences": "Preferenze d''e mmeje",
+ "tooltip-pt-watchlist": "'A lista d' 'e paggene ca state a cuntrullà",
"tooltip-pt-mycontris": "Elenco dde tuje contributte",
"tooltip-pt-login": "A reggistrazione è cunsigliata",
"tooltip-pt-logout": "Jésce (logout)",
+ "tooltip-pt-createaccount": "Pigliateve curaggio e criate n'utente e trasìte; ancora ca chisto nun s'avesse 'a ffà pe' fforza",
"tooltip-ca-talk": "Vede e discussione rilative a chista paggena",
"tooltip-ca-edit": "Puo modifica chista paggena. Ppe favore usa 'o pulsante 'e anteprimma primma 'e salva",
"tooltip-ca-addsection": "Cummincia 'na nova sezzione",
"tooltip-ca-viewsource": "Chista paggena è prutetta, ma puo vere 'o codice sorgente",
"tooltip-ca-history": "Vversione precedente 'e chista paggena",
"tooltip-ca-protect": "Prutegge chesta paggena",
+ "tooltip-ca-unprotect": "Càgna 'a prutezzione 'e chesta paggena",
"tooltip-ca-delete": "Scancèlla chista paggena",
+ "tooltip-ca-undelete": "Arrepiglia 'e cagnamiente fatte 'a sta paggena apprimma ca fuieno scancellate",
"tooltip-ca-move": "Spusta chista paggena",
+ "tooltip-ca-watch": "Azzecca sta paggena int' 'a lista 'e paggene cuntrullate vuosta",
+ "tooltip-ca-unwatch": "Lèva sta paggena d' 'a lista 'e paggene cuntrullate vuosta",
"tooltip-search": "Truova dint'ô {{SITENAME}}",
+ "tooltip-search-go": "Vaje â paggena cu stu nomme si esiste",
"tooltip-search-fulltext": "Ascià 'o testo indicato dint'e paggene",
"tooltip-p-logo": "Visita a paggena prencepale",
"tooltip-n-mainpage": "Visita a paggena prencepale",
"tooltip-n-mainpage-description": "Visita a paggena prencepale",
- "tooltip-n-portal": "Descrizione d&#39;'o prugietto, che po' ffa, addò truvà 'e ccose",
+ "tooltip-n-portal": "Descrizione d' 'o prugietto, che po' ffa, addò truvà 'e ccose",
+ "tooltip-n-currentevents": "Ascìa 'e nfurmaziune ncopp' 'e fatte succiesse mò mò",
"tooltip-n-recentchanges": "Ennece dde urdeme cagnamiénte ddo sito",
"tooltip-n-randompage": "Na paggena qualsiase",
"tooltip-n-help": "Paggena 'e ajùto",
"tooltip-t-whatlinkshere": "'Na lista 'e tutte e paggene ca song cullegate a chista",
"tooltip-t-recentchangeslinked": "Urdeme cagnamiénte dde paggene ca cullegano a chesta",
+ "tooltip-feed-rss": "RSS feed pe sta pàggena",
+ "tooltip-feed-atom": "Atom feed pe sta pàggena",
"tooltip-t-contributions": "Lista dde contributte 'e chisto utente",
"tooltip-t-emailuser": "Manna 'nu email a chisto utente",
+ "tooltip-t-info": "Cchiù nfurmaziune ncopp'a sta paggena",
"tooltip-t-upload": "Careca file",
"tooltip-t-specialpages": "Lista 'e tutte e paggene speciale",
"tooltip-t-print": "Vversione pe' stampa 'e chista paggena",
"tooltip-t-permalink": "Jonta permanente a chista vversione dda paggena",
"tooltip-ca-nstab-main": "Vere a paggena e contenuto",
"tooltip-ca-nstab-user": "Vere a paggena utente",
+ "tooltip-ca-nstab-media": "Vide 'a pàggena d' 'e media",
"tooltip-ca-nstab-special": "Chista è 'na paggena speciale, nun può essere càgnata",
"tooltip-ca-nstab-project": "Vere a paggena 'e servizio",
"tooltip-ca-nstab-image": "Vere a paggena ddo file",
+ "tooltip-ca-nstab-mediawiki": "Vide 'a mmasciata d' 'o sistema",
"tooltip-ca-nstab-template": "Vere 'o modello",
+ "tooltip-ca-nstab-help": "Vide 'a paggena d'aiuto",
"tooltip-ca-nstab-category": "Vere a paggena d\"a categurìa",
"tooltip-minoredit": "Rénne chìsto cagnamiénto cchiù ppiccirìllo.",
"tooltip-save": "Sàrva 'e cagnamiénte.",
"tooltip-preview": "Primma 'e sarvà, vìre primma chille ca hê cagnàte!",
+ "tooltip-diff": "Fà vedé 'e cagnamiente c'avite fatto ô testo",
+ "tooltip-compareselectedversions": "Fà vedé 'e differenze nfra tutt' 'e dduje verziune scigliute 'e sta paggena",
+ "tooltip-watch": "Azzecca sta paggena int' 'a lista 'e paggene cuntrullate vuosta",
+ "tooltip-watchlistedit-normal-submit": "Lèva 'e titule",
+ "tooltip-watchlistedit-raw-submit": "Agghiurna l'elenco 'e paggene cuntrullate",
+ "tooltip-recreate": "Arricrèa 'e paggene pure si so state scancellate",
+ "tooltip-upload": "Accummencia 'a carreca",
"tooltip-rollback": "\"A vascio\" annulla 'e modefeche 'e chista paggena ell'ultimo contributore cu n' uneco click",
+ "tooltip-undo": "\"Annulla\" annulla stu cagnamiento e arape 'u form 'e cagnamiento facenno vedé l'anteprimma.\nPermette azzeccà nu mutivo dint' 'o riepilego.",
+ "tooltip-preferences-save": "Riggistra 'e preferenze",
+ "tooltip-summary": "Miette nu riepilego piccerillo",
+ "anonymous": "{{PLURAL:$1|utente|utente}} anonime 'e {{SITENAME}}",
+ "siteuser": "Utente 'e {{SITENAME}} $1",
+ "anonuser": "Utente anonime 'e {{SITENAME}} $1",
+ "lastmodifiedatby": "Sta paggena è stata cagnata l'urdema vota 'e $2, d' 'o $1 da $3.",
+ "othercontribs": "Basata ncopp' 'a fatica 'e $1.",
"others": "ate",
+ "siteusers": "{{PLURAL:$2|utente|utente}} 'e {{SITENAME}} $1",
+ "anonusers": "{{PLURAL:$2|utente|utente}} anonime 'e {{SITENAME}} $1",
+ "creditspage": "Auture d' 'a paggena",
+ "nocredits": "Nun ce stanno nfurmaziune ncopp'a l'auture 'e sta paggena.",
+ "spamprotectiontitle": "Filtro 'e prutezione anti-spam",
+ "spamprotectiontext": "'A paggena ca vulite astipà è stata bloccata p' 'o filtro anti-spam.\nChesto è succiesso pecché avite miso nu link 'e chille ca stanno dint' 'a lista nira 'e site 'e fore.",
+ "spamprotectionmatch": "'O testo ccà abbascio è stato nzignato p' 'o filtro anti-spam: $1",
+ "spambot_username": "Sistema MediaWiki 'e pulezzia anti-spam",
+ "spam_reverting": "Arrepiglianno l'urdema verziona ca nun cuntene 'e link a $1",
+ "spam_blanking": "Tutt' 'e verziune cuntenenno cullegamiente a $1, pulezzate e sbacantate",
+ "spam_deleting": "Tutt' 'e verziune cuntenenno cullegamiente a $1, scancellanno",
+ "simpleantispam-label": "Cuntrollo anti-spam.\n<strong>NUN</strong> ghienchere!",
+ "pageinfo-title": "Nfurmaziune pe' \"$1\"",
+ "pageinfo-not-current": "Scusate, nun se ponno piglià sti nfurmaziune p' 'e verziune viecchie.",
+ "pageinfo-header-basic": "Nfurmaziune bbase",
+ "pageinfo-header-edits": "Cronologgia d' 'e cagnamiente",
+ "pageinfo-header-restrictions": "Càgna prutezione",
+ "pageinfo-header-properties": "Proprietà d' 'a paggena",
+ "pageinfo-display-title": "Fà vedé 'o titolo",
+ "pageinfo-default-sort": "Chiave d'ordinamento 'e bbase",
+ "pageinfo-length": "Llonghezza d' 'a paggena ('n byte)",
+ "pageinfo-article-id": "ID d' 'a paggena",
+ "pageinfo-language": "Lengua d' 'a paggena 'e cuntenute",
+ "pageinfo-content-model": "Mudello 'e cuntenute d' 'a paggena",
+ "pageinfo-robot-policy": "Indicizzate 'a 'e robbot",
+ "pageinfo-robot-index": "Permesso",
+ "pageinfo-robot-noindex": "Nun permesso",
+ "pageinfo-watchers": "Nummero 'e visite â paggena",
+ "pageinfo-few-watchers": "Meno 'e $1 {{PLURAL:$1|visita|visite}}",
+ "pageinfo-redirects-name": "Nummero 'e redirect a sta paggena",
+ "pageinfo-subpages-name": "Nummero 'e sottopaggene 'e sta paggena",
+ "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect}}; $3 {{PLURAL:$3|nun redirect}})",
+ "pageinfo-firstuser": "Criatore d' 'a paggena",
+ "pageinfo-firsttime": "Data 'e criazione d' 'a paggena",
+ "pageinfo-lastuser": "Urdemo cuntribbutore",
+ "pageinfo-lasttime": "Data 'e ll'urdemo cagnamiento",
+ "pageinfo-edits": "Nummero totale 'e cagnamiente",
+ "pageinfo-authors": "Nummero totale d'auture differénte",
+ "pageinfo-recent-edits": "Nummero 'e cagnamiente 'e poco tempo fà (ind'a ll'urdeme $1)",
+ "pageinfo-recent-authors": "Nummero d'auture differénte pe' cagnamiente fatte poco tempo fà",
+ "pageinfo-magic-words": "{{PLURAL:$1|Parola maggica|Parole maggiche}} ($1)",
+ "pageinfo-hidden-categories": "{{PLURAL:$1|Categurìa annascunnuta|Categurìe annascunnute}} ($1)",
+ "pageinfo-templates": "Template {{PLURAL:$1|appennuto|appennute}} ($1)",
+ "pageinfo-transclusions": "{{PLURAL:$1|Paggena appennuta|Paggene appennute}} ncopp'a ($1)",
+ "pageinfo-toolboxlink": "Nfurmaziune d' 'a paggena",
+ "pageinfo-redirectsto": "Reindirizza a",
+ "pageinfo-redirectsto-info": "nfurmaziune",
+ "pageinfo-contentpage": "Cuntata comme na paggena 'e cuntenute",
+ "pageinfo-contentpage-yes": "Sì",
+ "pageinfo-protect-cascading": "Prutezione 'n cascata 'a ccà",
+ "pageinfo-protect-cascading-yes": "Sì",
+ "pageinfo-protect-cascading-from": "'E pruteziune veneno 'n cascata 'a",
+ "pageinfo-category-info": "Nfurmaziune ncopp' 'a categurìa",
+ "pageinfo-category-pages": "Nummero 'e paggene",
+ "pageinfo-category-subcats": "Nummero 'e sottocategurìe",
+ "pageinfo-category-files": "Nummero 'e file",
+ "markaspatrolleddiff": "Nzègna comme cuntrullata",
+ "markaspatrolledtext": "Nzegna sta paggena comme cuntrullata",
+ "markedaspatrolled": "Nzegnata comme cuntrullata",
+ "markedaspatrolledtext": "'A verziona scigliuta 'e [[:$1]] è stata nzegnata comme cuntrullata.",
+ "rcpatroldisabled": "Funzione cuntrollo 'e ll'urdeme cagnamiente stutata",
+ "rcpatroldisabledtext": "'A funzione 'e cuntrolle 'e ll'urdeme cagnamiente è stutata mo.",
+ "markedaspatrollederror": "Nun se può nzignà comme cuntrullata",
+ "markedaspatrollederrortext": "Avite 'a specificà na verziona a nzegnà comme cuntrullata.",
+ "markedaspatrollederror-noautopatrol": "Nun avite permesso 'a nzegnà 'e cagnamiente vuoste comme cuntrullate.",
+ "markedaspatrollednotify": "Stu cagnamiento a $1 è stato nzegnato comme cuntrullato.",
+ "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.",
+ "log-show-hide-patrol": "$1 riggistro 'e cuntrolle",
+ "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",
+ "filedelete-missing": "'O file \"$1\" nun se può scancellà pecche nun esiste proprio.",
+ "filedelete-old-unregistered": "'A verziona d' 'o file specificato \"$1\" nun se trova dint' 'o database.",
+ "filedelete-current-unregistered": "'O file specificato \"$1\" nun ce sta dint' 'o database.",
+ "filedelete-archive-read-only": "'A cartella d'archiviazione \"$1\" nun se può scrivere dint' 'o server.",
"previousdiff": "← Càgnamiento cchiù viecchio",
"nextdiff": "Cagnamiénte successivo →",
+ "mediawarning": "<strong>Attenziò:</strong> Stu file putesse cuntenè codece malegno.\nSi 'o secutate, 'o sistema vuosto se putesse scassà.",
+ "imagemaxsize": "Lemmeto â dimenzione 'e l'immaggene:<br /><em>(p' 'e paggene 'e descrizione d' 'o file)</em>",
+ "thumbsize": "Dimenziona d' 'a miniatura:",
+ "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|paggena|paggene}}",
+ "file-info": "dimenziona d' 'o file: $1, tipo MIME: $2",
"file-info-size": "$1 × $2 pixel, dimenzione ddo file: $3, tipo MIME: $4",
+ "file-info-size-pages": "$1 × $2 pixel, dimenzione d' 'o file: $3, tipe 'e MIME: $4, $5 {{PLURAL:$5|paggena|paggene}}",
+ "file-nohires": "Nun ce sta na risoluzione cchiù auta.",
+ "svg-long-desc": "File SVG, dimenziune nommenale $1 × $2 pixel, dimenzione d' 'o file: $3",
+ "svg-long-desc-animated": "File SVG animato, dimenziune nommenale $1 × $2 pixel, dimenzione d' 'o file: $3",
+ "svg-long-error": "File SVG invalido: $1",
"show-big-image": "File 'e origgine",
+ "show-big-image-preview": "Dimenziune 'e sta anteprimma: $1.",
+ "show-big-image-other": "{{PLURAL:$2|N'ata resoluzione|Ati resoluziune}}: $1.",
+ "show-big-image-size": "$1 x $2 pixel",
+ "file-info-gif-looped": "ciclico",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|frame|frame}}",
+ "file-info-png-looped": "ciclico",
+ "file-info-png-repeat": "curruto $1 {{PLURAL:$1|vota|vote}}",
+ "file-info-png-frames": "$1 {{PLURAL:$1|frame|frame}}",
+ "file-no-thumb-animation": "<strong>Vedite bbuono: Pe' bbia 'e lemmetaziune tecniche, 'e miniature 'e stu file nun sarrann'animate.</strong>",
+ "file-no-thumb-animation-gif": "<strong>Vedite bbuono: Pe' bbia 'e lemmetaziune tecniche, 'e miniature 'e auta resoluzione 'e nu file GIF comm'a chesta nun sarrann'animate.</strong>",
+ "newimages": "Galleria 'e file nuove",
+ "imagelisttext": "Ccà abbascio ce sta na lista 'e '''$1''' {{PLURAL:$1|file|file}} arrecetate $2.",
+ "newimages-summary": "Sta paggena speciale fà vedé tuttequante l'urdeme file carrecate.",
+ "newimages-legend": "Filtro",
+ "newimages-label": "Nomme d' 'o file (o nu piezz' 'e chesto):",
+ "newimages-showbots": "Mmusta cárreche 'e robbot",
"noimages": "Nun nc'è nind' 'a veré.",
"ilsubmit": "Truova",
+ "bydate": "pe' data",
+ "sp-newimages-showfrom": "Faje vedé 'e file nuove fatte a partì 'a $3 $2",
+ "seconds": "{{PLURAL:$1|secondo|seconde}}",
+ "minutes": "{{PLURAL:$1|$1 minuto|$1 minute}}",
+ "hours": "{{PLURAL:$1|n'ora|$1 ore}}",
+ "days": "{{PLURAL:$1|$1 juorno|$1 ghiuorne}}",
+ "weeks": "{{PLURAL:$1|$1 semmana|$1 semmane}}",
+ "months": "{{PLURAL:$1|$1 mese|$1 mese}}",
+ "years": "{{PLURAL:$1|$1 anno|$1 anne}}",
+ "ago": "$1 fà",
+ "just-now": "mò mò",
+ "hours-ago": "$1 {{PLURAL:$1|ora|ore}} fà",
+ "minutes-ago": "$1 {{PLURAL:$1|minuto|minute}} fà",
+ "seconds-ago": "$1 {{PLURAL:$1|secondo|seconde}} fà",
+ "monday-at": "Lunnerì a 'e $1",
+ "tuesday-at": "Marterì a 'e $1",
+ "wednesday-at": "Miercurì a 'e $1",
+ "thursday-at": "Gioverì a 'e $1",
+ "friday-at": "Viernarì a 'e $1",
+ "saturday-at": "Sàbbato a 'e $1",
+ "sunday-at": "Dummeneca a 'e $1",
+ "yesterday-at": "Aiere a 'e $1",
+ "bad_image_list": "'O formato è chesto:\n\nSulamente l'elemente d' 'a lista ('e righe c'accummenciano cu *) songhe cunziderate.\n'O primmo cullegamiento ncopp'a na linea qualunque adda essere nu cullegamiento a nu file ca nun è bbuono.\nTutte l'ati link ca spuntano â stessa riga songhe cunziderate eccezziune, p.e. 'e paggene addò 'o file se putesse richiamà normalmente.",
"metadata": "Metadate",
+ "metadata-help": "Stu file cuntene nfurmaziune agghiunte, probabilmente 'a na fotocamera o nu scanner ausate pe' crià o digitalizà.\nSi 'o file è stato cagnato 'a 'o stato origginale suojo, certi dettaglie può darse ca nun se vedeno ncopp' 'o file già cagnato.",
+ "metadata-expand": "Fa vedè 'e dettaglie spannute",
+ "metadata-collapse": "Annascunne 'e dettaglie spannute",
+ "metadata-fields": "'E metadata 'e l'immaggene ccà mmustate sarranno azzeccate dint' 'a mmosta d' 'a paggena quanno 'a tabbella 'e metadata è collassata.\nL'ati sarranno normalmente annascunnute.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "exif-imagewidth": "Larghezza",
+ "exif-imagelength": "Autezza",
+ "exif-bitspersample": "Bit pe' componente",
+ "exif-compression": "Schema 'e compressione",
+ "exif-photometricinterpretation": "Composizione d' 'e pixel",
+ "exif-orientation": "Orientamento",
+ "exif-samplesperpixel": "Nummero 'e componente",
+ "exif-planarconfiguration": "Arricietto 'e date",
+ "exif-ycbcrsubsampling": "Rapporto 'e campiunamiento Y / C",
+ "exif-ycbcrpositioning": "Mpizzamento d' Y e C",
+ "exif-xresolution": "Resoluzione orizzontale",
+ "exif-yresolution": "Resoluzione verticale",
+ "exif-stripoffsets": "Pizzo addò sta l'immaggine",
+ "exif-rowsperstrip": "Nummero 'e righe pe' striscia",
+ "exif-stripbytecounts": "Byte pe' striscia compressa",
+ "exif-jpeginterchangeformat": "Distanza 'a SOI JPEG",
+ "exif-jpeginterchangeformatlength": "Byte 'e date JPEG",
+ "exif-whitepoint": "Cromaticetà d' 'o punto janco",
+ "exif-primarychromaticities": "Cromaticetà d' 'e culore primmarie",
+ "exif-ycbcrcoefficients": "Coefficiente d' 'a matrice 'e trasformazione d' 'o spazio 'e culore",
+ "exif-referenceblackwhite": "Paro 'e riferimento 'e valore janche e nire",
+ "exif-datetime": "Data e ora 'e cagnamiento d' 'o file",
+ "exif-imagedescription": "Titulo 'e l'immaggene",
+ "exif-make": "Frabbeca ca muntaje 'a camera",
+ "exif-model": "Mudello d' 'a camera",
+ "exif-software": "Software ausàto",
+ "exif-artist": "Autore",
+ "exif-copyright": "Titolare d' 'o Copyright",
+ "exif-exifversion": "Verzione d'Exif",
+ "exif-flashpixversion": "Verziona Flashpix suppurtata",
+ "exif-colorspace": "Spazio d' 'e culore",
+ "exif-componentsconfiguration": "Significato d'ogne componente",
+ "exif-compressedbitsperpixel": "Modo 'e compressione 'e l'immaggene",
+ "exif-pixelydimension": "Larghezza 'e l'immaggene",
+ "exif-pixelxdimension": "Autezza 'e l'immaggene",
+ "exif-usercomment": "Note 'e ll'utente",
+ "exif-relatedsoundfile": "File audio cullegato",
+ "exif-datetimeoriginal": "Data e ora d' 'a criazione d' 'e date",
+ "exif-datetimedigitized": "Data e ora 'e digitalizzazziona",
+ "exif-subsectime": "DateTime centeseme",
+ "exif-subsectimeoriginal": "DateTimeOriginal centeseme",
+ "exif-subsectimedigitized": "DateTimeDigitized centeseme",
+ "exif-exposuretime": "Tiempo d'esposizione",
+ "exif-exposuretime-format": "$1 sec ($2)",
+ "exif-fnumber": "Nummero p' 'o F",
+ "exif-exposureprogram": "Prugramma d'esposizione",
+ "exif-spectralsensitivity": "Senzitività spettrale",
+ "exif-isospeedratings": "Senzibbiletà ISO",
+ "exif-shutterspeedvalue": "Velocità d' 'o nchiuretore APEX",
+ "exif-aperturevalue": "Apertura APEX",
+ "exif-brightnessvalue": "Lumenosetà APEX",
+ "exif-exposurebiasvalue": "Correzzione d'esposizione APEX",
+ "exif-maxaperturevalue": "Apiertura massima",
+ "exif-subjectdistance": "Distanza d' 'o soggetto",
+ "exif-meteringmode": "Metodo 'e mmisura",
+ "exif-lightsource": "Sorgente 'e luce",
+ "exif-flash": "Flash",
+ "exif-focallength": "Distanza focale d' 'a lente",
+ "exif-subjectarea": "Area d' 'o soggetto",
+ "exif-flashenergy": "Putenza d' 'o flash",
+ "exif-focalplanexresolution": "Resoluzione X ncopp' 'o piano focale",
+ "exif-focalplaneyresolution": "Resoluzione Y ncopp' 'o piano focale",
+ "exif-focalplaneresolutionunit": "Unità 'e resoluzione d' 'o piano focale",
+ "exif-subjectlocation": "Pizzo addò stà 'o soggetto",
+ "exif-exposureindex": "Innece d'esposizione",
+ "exif-sensingmethod": "Sistema 'e rilevazione",
+ "exif-filesource": "Origgene d' 'o file",
+ "exif-scenetype": "Tipo 'e scena",
+ "exif-customrendered": "Prucesso d' 'a immaggene",
+ "exif-exposuremode": "Modo d'esposizione",
+ "exif-whitebalance": "Valanza 'e janco",
+ "exif-digitalzoomratio": "Rapporto zoom diggitale",
+ "exif-focallengthin35mmfilm": "Focale eguale a 35 mm",
+ "exif-scenecapturetype": "Tipo d'acquisizziona",
+ "exif-gaincontrol": "Cuntrollo d' 'a scena",
+ "exif-contrast": "Contrasto",
+ "exif-saturation": "Saturazione",
+ "exif-sharpness": "Nitidezza",
+ "exif-devicesettingdescription": "Descrizione d' 'e mpustaziune d' 'o dispositivo",
+ "exif-subjectdistancerange": "Scala distanza soggetto",
+ "exif-imageuniqueid": "ID 'e l'immaggine univoco",
+ "exif-gpsversionid": "Verzione d' 'e tag GPS",
+ "exif-gpslatituderef": "Latitudine nord o sud",
+ "exif-gpslatitude": "Latitudine",
+ "exif-gpslongituderef": "Longitudine est o ovest",
+ "exif-gpslongitude": "Longitudine",
+ "exif-gpsaltituderef": "Riferimento pe' l'autezza",
+ "exif-gpsaltitude": "Autezza",
+ "exif-gpstimestamp": "orario d' 'o GPS (rilorgio atomico)",
+ "exif-gpssatellites": "Satellite ausate p' 'e mmisure",
+ "exif-gpsstatus": "Stato d' 'o ricevitore",
+ "exif-gpsmeasuremode": "Modo 'e mmisura",
+ "exif-gpsdop": "Precisione d' 'a mmisura",
+ "exif-gpsspeedref": "Unità 'e mmisura",
+ "exif-gpsspeed": "Velocità d' 'o ricevitore GPS",
+ "exif-gpstrackref": "Riferimento p' 'a direzzione d' 'o movimento",
+ "exif-gpstrack": "Direzzione d' 'o movimento",
+ "exif-gpsimgdirectionref": "Riferimento p' 'a direzzione 'e ll'immaggene",
+ "exif-gpsimgdirection": "Direzzione 'e ll'immaggene",
+ "exif-gpsmapdatum": "Rilevamento geodetico ausato",
+ "exif-gpsdestlatituderef": "Riferimento p' 'a latitudine 'e destinazione",
+ "exif-gpsdestlatitude": "Latitudine 'e destinazione",
+ "exif-gpsdestlongituderef": "Riferimento p' 'a longitudine 'e destinazione",
+ "exif-gpsdestlongitude": "Longitudine 'e destinazione",
+ "exif-gpsdestbearingref": "Riferimento p' 'a direzzione 'e destinazione",
+ "exif-gpsdestbearing": "Direzione 'e destinazzione",
+ "exif-gpsdestdistanceref": "Riferimento p' 'a latitudine 'e destinazione",
+ "exif-gpsdestdistance": "Distanza d' 'a destinazione",
+ "exif-gpsprocessingmethod": "Nomme d' 'o metodo 'e prucesso GPS",
+ "exif-gpsareainformation": "Nomme 'e ll'area GPS",
+ "exif-gpsdatestamp": "Data d' 'o GPS",
+ "exif-gpsdifferential": "Currezzione differenziale d' 'o GPS",
+ "exif-jpegfilecomment": "Commento d' 'o file JPEG",
+ "exif-keywords": "Parole chiave",
+ "exif-worldregioncreated": "Reggione d' 'o munno addò è stata scattata sta foto",
+ "exif-countrycreated": "Paese d' 'o munno addò è stata scattata sta foto",
+ "exif-countrycodecreated": "Codece p' 'o paese addò è stata scattata sta foto",
+ "exif-provinceorstatecreated": "Pruvincia o Stato addò è stata scattata sta foto",
+ "exif-citycreated": "Città addò è stata scattata sta foto",
+ "exif-sublocationcreated": "Sottolocazione d' 'a cettà addò è stata scattata sta foto",
+ "exif-worldregiondest": "Reggiune d' 'o munno ca se sta mmustanno",
+ "exif-countrydest": "Paise ca se stanno mmustanno",
+ "exif-countrycodedest": "Codece p' 'e paise ca se stanno mmustanno",
+ "exif-provinceorstatedest": "Pruvince o state ca se stanno mustanno",
+ "exif-citydest": "Città ca se stà mustanno",
+ "exif-sublocationdest": "Sottolocazione d' 'a città ca se stà mmustanno",
+ "exif-objectname": "Titolo curto",
+ "exif-specialinstructions": "Struziune speciale",
+ "exif-headline": "Ntestazzione",
+ "exif-credit": "Credite/Fornitore",
+ "exif-source": "Funte",
+ "exif-editstatus": "Stato editoriale 'e ll'immaggene",
+ "exif-urgency": "Priorità",
+ "exif-fixtureidentifier": "Nomme d' 'accunciamiento",
+ "exif-locationdest": "Locazione raffigurata",
+ "exif-locationdestcode": "Codece 'e lloco raffigurato",
+ "exif-objectcycle": "Orario d' 'o juorno p' 'o quale è stato pruggettato stu media",
+ "exif-contact": "Nfurmaziune 'e cuntatto",
+ "exif-writer": "Scrittore",
+ "exif-languagecode": "Lengua",
+ "exif-iimversion": "Verziona IIM",
+ "exif-iimcategory": "Categurìa",
+ "exif-iimsupplementalcategory": "Categurìe supplementarie",
+ "exif-datetimeexpires": "Nun ausà aroppo",
+ "exif-datetimereleased": "Relassato 'o",
+ "exif-originaltransmissionref": "Codece d' 'a locazione d' 'a trasmissione origgenale",
+ "exif-identifier": "Identificatore",
+ "exif-lens": "Lunghezze ausate",
+ "exif-serialnumber": "Nummero seriale d' 'a fotocamera",
+ "exif-cameraownername": "Titolare d' 'a fotocamera",
+ "exif-label": "Etichetta",
+ "exif-datetimemetadata": "Data de l'urdemo cagnamiento a 'e metadata",
+ "exif-nickname": "Nomme nfurmale 'e ll'immaggene",
+ "exif-rating": "Punteggio ('e 5)",
+ "exif-rightscertificate": "Certificato 'e gestione d' 'e deritte",
+ "exif-copyrighted": "Stato d' 'o copyright",
+ "exif-copyrightowner": "Titolare d' 'o Copyright",
+ "exif-usageterms": "Termine d'auso",
+ "exif-webstatement": "Affermazione d' 'o copyright on line",
+ "exif-originaldocumentid": "ID unico d' 'o documento origgenale",
+ "exif-licenseurl": "URL p' 'a licienza d' 'o copyright",
+ "exif-morepermissionsurl": "Nfurmaziune 'e licienza alternative",
+ "exif-attributionurl": "Quanno s'ausasse n'ata vota sta fatica, pe' piaccere falla spunta cu nu link ccà a",
+ "exif-preferredattributionname": "Quanno s'ausasse n'ata vota sta fatica, pe' piacere dincette chi l'ha fatta",
+ "exif-pngfilecomment": "Commento d' 'o file PNG",
+ "exif-disclaimer": "Avvertimiènto",
+ "exif-contentwarning": "Avvertimiènto ncopp' 'e cuntenute",
+ "exif-giffilecomment": "Commento d' 'o file GIF",
+ "exif-intellectualgenre": "Tipo d'elemento",
+ "exif-subjectnewscode": "Codece d' 'o suggetto",
+ "exif-scenecode": "Codece 'e scena IPTC",
+ "exif-event": "Fatto raffigurato",
+ "exif-organisationinimage": "Organizzazione raffigurata",
+ "exif-personinimage": "Perzona raffigurata",
+ "exif-originalimageheight": "Autezza 'e ll'immaggene apprimma ca fosse rintagliata",
+ "exif-originalimagewidth": "Larghezza 'e ll'immaggene apprimma ca fosse rintagliata",
+ "exif-compression-1": "Senza cumprimì",
+ "exif-compression-2": "Gruppe CCITT 3 Decodifeche 'Esecuzione d' 'a lunghezza 1-Dimenzionale Cagnate 'a Huffman",
+ "exif-compression-3": "Gruppe CCITT 3 'e decodifeche d' 'o fax",
+ "exif-compression-4": "Codifeca fax CCITT gruppo 4",
+ "exif-copyrighted-true": "Prutetto 'a copyright",
+ "exif-copyrighted-false": "Status d' 'o copyright nun mpustato",
+ "exif-unknowndate": "Data scanusciuta",
+ "exif-orientation-1": "Nurmale",
+ "exif-orientation-2": "Revutato orizzontalmente",
+ "exif-orientation-3": "Votato a 180°",
+ "exif-orientation-4": "Revutato verticalmente",
+ "exif-orientation-5": "Votato a 90º 'n senzo cuntrario a l'aco d' 'o rilorgio e revutato verticalmente",
+ "exif-orientation-6": "Votato a 90° 'n senzo cuntrario a l'aco d' 'o rilorgio",
+ "exif-orientation-7": "Votato a 90º 'n senzo 'e l'aco d' 'o rilorgio e revutato verticalmente",
+ "exif-orientation-8": "Votato a 90° 'n senzo 'e l'aco d' 'o rilorgio",
+ "exif-planarconfiguration-1": "furmato 'e blocche",
+ "exif-planarconfiguration-2": "furmato lineare",
"exif-xyresolution-i": "$1 punte pe pollice (dpi)",
+ "exif-colorspace-65535": "Nun calibbrato",
+ "exif-componentsconfiguration-0": "nun esiste",
+ "exif-exposureprogram-0": "Nun definito",
+ "exif-exposureprogram-1": "Manuale",
+ "exif-exposureprogram-2": "Programma nurmale",
+ "exif-exposureprogram-3": "Priorità d'apertura",
+ "exif-exposureprogram-4": "Priorità 'e sposizione",
+ "exif-exposureprogram-5": "Programma ccreativo (basato ncopp' 'o profunno d' 'o campo)",
+ "exif-exposureprogram-6": "Prugramma d'azione (basato ncopp' 'a velocità 'e riprese)",
+ "exif-exposureprogram-7": "Modo ritratto (soggette vicine c' 'o sfondo fore 'o foco)",
+ "exif-exposureprogram-8": "Panurama (soggette luntane c' 'o sfondo int' 'o foco)",
+ "exif-subjectdistance-value": "$1 metre",
"exif-meteringmode-0": "Scanusciuto",
+ "exif-meteringmode-1": "Medio",
+ "exif-meteringmode-2": "Medie Pesate Centrate",
+ "exif-meteringmode-3": "Spot",
+ "exif-meteringmode-4": "Multi Spot",
+ "exif-meteringmode-5": "Pattern",
+ "exif-meteringmode-6": "Parziale",
"exif-meteringmode-255": "Ato",
"exif-lightsource-0": "Scanusciuta",
+ "exif-lightsource-1": "Luce d' 'o ghiuorno",
+ "exif-lightsource-2": "Fluorescente",
+ "exif-lightsource-3": "Tungsteno (luce cavera cavera)",
+ "exif-lightsource-4": "Flash",
+ "exif-lightsource-9": "Tiempi belle",
"exif-lightsource-10": "'Ntruvulato",
"exif-lightsource-11": "Aumbruso",
+ "exif-lightsource-12": "Florescenza a 'a luce d' 'o juorno (D 5700 - 7100K)",
+ "exif-lightsource-13": "Florescenza a 'o janco d' 'o juorno (N 4600 - 5400K)",
+ "exif-lightsource-14": "Florescenza a 'o janco friddo (W 3900 - 4500K)",
+ "exif-lightsource-15": "Florescenza janca (WW 3200 - 3700K)",
+ "exif-lightsource-17": "Luce standàrd A",
+ "exif-lightsource-18": "Luce standàrd B",
+ "exif-lightsource-19": "Luce standàrd C",
+ "exif-lightsource-24": "Luce 'e studio ISO ô tungsteno",
+ "exif-lightsource-255": "N'ata sorgente 'e luce",
+ "exif-flash-fired-0": "'O flash nun è scattato",
+ "exif-flash-fired-1": "Flash scattato",
+ "exif-flash-return-0": "nisciuna funzione ncopp' 'o ritorno d' 'a luce stroboscopeca",
+ "exif-flash-return-2": "luce stroboscopeca 'e ritorno nun scummigliata",
+ "exif-flash-return-3": "luce stroboscopeca 'e ritorno scummigliata",
+ "exif-flash-mode-1": "flash forzato apicciato",
+ "exif-flash-mode-2": "flash forzato stutato",
+ "exif-flash-mode-3": "modo automateco",
+ "exif-flash-function-1": "Nisciuna funzione flash",
+ "exif-flash-redeye-1": "modalità pe' luvà ll'uocchie russe",
+ "exif-focalplaneresolutionunit-2": "pollece",
+ "exif-sensingmethod-1": "Indefinite",
+ "exif-sensingmethod-2": "Sensore d'area 'e culore a unu-chip",
+ "exif-sensingmethod-3": "Sensore d'area 'e culore a ddoje-chip",
+ "exif-sensingmethod-4": "Sensore d'area 'e culore a tre-chip",
+ "exif-sensingmethod-5": "Sensore 'e culore sequenziale",
+ "exif-sensingmethod-7": "Sensore trilineare",
+ "exif-sensingmethod-8": "Sensore 'e culore sequenziale e lineare",
+ "exif-filesource-3": "Camera diggitale",
+ "exif-scenetype-1": "Fotografia diretta",
+ "exif-customrendered-0": "Prucesso normale",
+ "exif-customrendered-1": "Prucesso personalizzato",
+ "exif-exposuremode-0": "Auto esposizione",
+ "exif-exposuremode-1": "Esposizione a mmano",
+ "exif-exposuremode-2": "Bracketing automateco",
+ "exif-whitebalance-0": "Valanzamiento d' 'e janche automateco",
+ "exif-whitebalance-1": "Valanzamiento d' 'e janche manuale",
+ "exif-scenecapturetype-0": "Standard",
+ "exif-scenecapturetype-1": "Panorama",
+ "exif-scenecapturetype-2": "Ritratto",
+ "exif-scenecapturetype-3": "Scena 'e notte",
"exif-gaincontrol-0": "Nisciuno",
+ "exif-gaincontrol-1": "Vascio aumento d' 'o guadagno",
+ "exif-gaincontrol-2": "Aveto aumento d' 'o guadagno",
+ "exif-gaincontrol-3": "Vascio acalamento d' 'o guadagno",
+ "exif-gaincontrol-4": "Aveto acalamento d' 'o guadagno",
+ "exif-contrast-0": "Nurmale",
+ "exif-contrast-1": "Muscio",
+ "exif-contrast-2": "Tuosto",
+ "exif-saturation-0": "Nurmale",
+ "exif-saturation-1": "Saturazione vascia",
+ "exif-saturation-2": "Saturazione aveta",
+ "exif-sharpness-0": "Nurmale",
+ "exif-sharpness-1": "Muscio",
+ "exif-sharpness-2": "Tuosto",
"exif-subjectdistancerange-0": "Scanusciuta",
- "watchlistall2": "tutte",
+ "exif-subjectdistancerange-1": "Macro",
+ "exif-subjectdistancerange-2": "Vista 'e vicino",
+ "exif-subjectdistancerange-3": "Vista 'e luntano",
+ "exif-gpslatitude-n": "Latitudine nord",
+ "exif-gpslatitude-s": "Latitudine sud",
+ "exif-gpslongitude-e": "Longitudine est",
+ "exif-gpslongitude-w": "Longitudine ovest",
+ "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metro|metre}} 'a copp' 'o livello d' 'o mare",
+ "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metro|metre}} abbascio 'o livello d' 'o mare",
+ "exif-gpsstatus-a": "Mmisure ncurzo",
+ "exif-gpsstatus-v": "Mmisure nteroperabbele",
+ "exif-gpsmeasuremode-2": "Mmisure a ddoje-dimenziune",
+ "exif-gpsmeasuremode-3": "Mmisure a tre-dimenziune",
+ "exif-gpsspeed-k": "Chilometre a l'ora",
+ "exif-gpsspeed-m": "Miglie pe' ora",
+ "exif-gpsspeed-n": "Nurece",
+ "exif-gpsdestdistance-k": "Chilometre",
+ "exif-gpsdestdistance-m": "Miglie",
+ "exif-gpsdestdistance-n": "Miglie nauteche",
+ "exif-gpsdop-excellent": "Eccellente ($1)",
+ "exif-gpsdop-good": "Bbuono ($1)",
+ "exif-gpsdop-moderate": "Apposto ($1)",
+ "exif-gpsdop-fair": "Discreto ($1)",
+ "exif-gpsdop-poor": "Puveriello ($1)",
+ "exif-objectcycle-a": "Sulamente 'a matina",
+ "exif-objectcycle-p": "Sulamente 'a sera",
+ "exif-objectcycle-b": "Tutt' 'e dduje matina e sera",
+ "exif-gpsdirection-t": "Direziona overa",
+ "exif-gpsdirection-m": "Direziona magnetica",
+ "exif-ycbcrpositioning-1": "Centrato",
+ "exif-ycbcrpositioning-2": "Co-mpizzato",
+ "exif-dc-contributor": "Contribbuture",
+ "exif-dc-coverage": "Scopo spaziale o temporale d' 'o media",
+ "exif-dc-date": "Data (e)",
+ "exif-dc-publisher": "Editore",
+ "exif-dc-relation": "Media cullegate",
+ "exif-dc-rights": "Deritte",
+ "exif-dc-source": "Media sorgente",
+ "exif-dc-type": "Tipe 'e media",
+ "exif-rating-rejected": "Scartate",
+ "exif-isospeedratings-overflow": "Cchiù granne 'e 65535",
+ "exif-iimcategory-ace": "Arte, cultura e spassatiempe",
+ "exif-iimcategory-clj": "Crimine e legge",
+ "exif-iimcategory-dis": "Guaie e brutte fatte",
+ "exif-iimcategory-fin": "Economia e affare",
+ "exif-iimcategory-edu": "Studie",
+ "exif-iimcategory-evn": "Ambiente",
+ "exif-iimcategory-hth": "Salute",
+ "exif-iimcategory-hum": "Nteresse umano",
+ "exif-iimcategory-lab": "Fatica",
+ "exif-iimcategory-lif": "Stile 'e vita e tiempo libbero",
+ "exif-iimcategory-pol": "Puliteca",
+ "exif-iimcategory-rel": "Religgione e crerenze",
+ "exif-iimcategory-sci": "Scienze e tecnologgie",
+ "exif-iimcategory-soi": "Teme suggiale",
+ "exif-iimcategory-spo": "Sport",
+ "exif-iimcategory-war": "Uerra, cunflitte e arrevuòte",
+ "exif-iimcategory-wea": "Meteo",
+ "exif-urgency-normal": "Normale ($1)",
+ "exif-urgency-low": "Vascia ($1)",
+ "exif-urgency-high": "Aveta ($1)",
+ "exif-urgency-other": "Priorità definite 'a l'utente ($1)",
"namespacesall": "Tutte",
"monthsall": "tutte",
+ "confirmemail": "Cunfermate 'o nderizzo mail",
+ "confirmemail_noemail": "Nun tenite nu nderizzo e-mail bbuono pe' ve putè configurà ncopp' 'e [[Special:Preferences|preferenze vuoste]].",
+ "confirmemail_text": "{{SITENAME}} bbuò ca vuje validasseve 'o nderizzo e-mail vuosto apprimm' 'e putè ausà 'e ffunziune 'e-mail.\nSpremmete 'o buttone 'e sotto pe' mannà na mmasciata e-mail 'e cunferma a l'indirizzo vuosto.\n'A mmasciata e-mail ca v'arreverrà tenesse nu cullegamento cu nu codece; carrecate 'o cullegamiento dint' 'a nu navigatóre web pe' ve putè cunfermà cu stu ndirizzo e nce ffà assapé 'o sito ch' 'è bbuono.",
+ "confirmemail_pending": "Nu codece 'e cunferma è stato gia mannato a l'email vuosto;\nSi mò mò nu cunto utente avite criato, allora putite aspettà cocche minuto ca chist'arriva, apprimm' 'e pruvà n'ata vota 'addimannà nu codece nuovo.",
+ "confirmemail_send": "Manna nu codece 'e cunferma",
+ "confirmemail_sent": "Mmasciata e-mail 'e cunferma mannata.",
+ "confirmemail_oncreate": "'O codece 'e cunferma è stato mannato al'indirizzo e-mail d' 'o vuosto.\nStu codece nun è addimannato pe' ve putè fà trasì, ma vuje n'avite abbesuogno 'e l'avé apprimm' 'e putè ausà cocche funziune 'e chille ca facessero l'uso d' 'o cunto e-mail ncopp'a sta wiki.",
+ "confirmemail_sendfailed": "{{SITENAME}} nun può mannà 'a mmasciata e-mail d' 'a vuosta 'e cunferma.\nPe' piacere cuntrullate si 'o nderizzo e-mail c'avite scritto tenesse cocche carattere nvalido.\n\nMmasciata d'errore a 'o mailer: $1",
+ "confirmemail_invalid": "'O codece 'e cunferma nun è bbuono.\n'O codece fosse ammaturato.",
"confirmemail_needlogin": "Abbesognate $1 pe cunfirmà 'o nnerizzo 'e e-mail d''o vuosto.",
+ "confirmemail_success": "'O ndirizzo e-mail d' 'o vuosto è stato cunfermato.\nVuje mò ne putite [[Special:UserLogin|trasì]] e ve putite spassà ncopp' 'a wiki.",
"confirmemail_loggedin": "'O nnerizzo 'e e-mail è vàleto",
+ "confirmemail_subject": "Indirizzo e-mail 'e cunferma pe' {{SITENAME}}",
+ "confirmemail_body": "Coccheruno, può darse ca site vuje, 'a l'indirizzo IP $1,\nha riggistrato nu cunto utente \"$2\" cu st'indirizzo e-mail ncopp'a {{SITENAME}}.\n\nPe' putè cunfermà ca stu cunto è stato overo criato e vuje e ve putè apiccià 'a funziona e-mail 'e {{SITENAME}}, arapite stu cullegamento dint' 'o navigatóre web d' 'o vuosto:\n\n$3\n\nSi vuje *NUN* avite riggistrato 'o cunto utente, secutate stu cullegamento pe' ve scancellà st'indirizzo e-mail utente:\n\n$5\n\nStu codece 'e cunferma murarrà 'o $4.",
+ "confirmemail_body_changed": "Coccheruno, può darse ca site vuje, 'a l'indirizzo IP $1,\nha cagnato l'indirizzo e-mail d' 'o cunto utente \"$2\" cu st'indirizzo e-mail ncopp'a {{SITENAME}}.\n\nPe' putè cunfermà ca stu cunto è stato overo criato e vuje e ve putè apiccià n'ata vota 'a funziona e-mail 'e {{SITENAME}}, arapite stu cullegamento dint' 'o navigatóre web d' 'o vuosto:\n\n$3\n\nSi vuje *NUN* avite riggistrato 'o cunto utente, secutate stu cullegamento pe' ve scancellà st'indirizzo e-mail utente:\n\n$5\n\nStu codece 'e cunferma murarrà 'o $4.",
+ "confirmemail_body_set": "Coccheruno, può darse ca site vuje, 'a l'indirizzo IP $1,\nha mpustato nu cunto utente \"$2\" cu st'indirizzo e-mail ncopp'a {{SITENAME}}.\n\nPe' putè cunfermà ca stu cunto è stato overo criato e vuje e ve putè apiccià 'a funziona e-mail 'e {{SITENAME}}, arapite stu cullegamento dint' 'o navigatóre web d' 'o vuosto:\n\n$3\n\nSi vuje *NUN* avite riggistrato 'o cunto utente, secutate stu cullegamento pe' ve scancellà st'indirizzo e-mail utente:\n\n$5\n\nStu codece 'e cunferma murarrà 'o $4.",
+ "confirmemail_invalidated": "Cunferma 'e l'indirizze e-mail scangelleta",
+ "invalidateemail": "Scancella 'a cunferma 'e l'e-mail",
+ "scarytranscludedisabled": "['A funziona cullegamiento nfra site wiki è stata stutata]",
+ "scarytranscludefailed": "[L'analisi d' 'o template s'è scassato pe' $1]",
+ "scarytranscludefailed-httpstatus": "[L'analisi d' 'o template s'è scassato pe' $1: HTTP $2]",
+ "scarytranscludetoolong": "[URL è troppo luonga]",
"deletedwhileediting": "Attenziòne: quaccherùno have scancellàto chesta pàggena doppo ca tu accuminciàste â scrìvere!",
+ "confirmrecreate": "L'utente [[User:$1|$1]] ([[User talk:$1|Chiacchiera]]) ha scancellato sta paggena aroppo ca l'avite accumminciato a cagnà, cu stu mutivo:\n: <em>$2</em>\nPe' piacere cunfermate ca vulite overamente crià sta paggena n'ata vota.",
+ "confirmrecreate-noreason": "L'utente [[User:$1|$1]] ([[User talk:$1|Chiacchiera]]) ha scancellato sta paggena aroppo ca l'avite accumminciato a cagnà. Pe' piacere cunfermate ca vulite overamente crià sta paggena n'ata vota.",
+ "recreate": "Crìa n'ata vota",
+ "confirm_purge_button": "OK",
+ "confirm-purge-top": "Pulezza 'a cache 'e sta paggena?",
+ "confirm-purge-bottom": "Pulezzanno 'a cache d' 'a paggena se può vedè 'a verziona cchiù agghiurnata d' 'a paggena.",
+ "confirm-watch-button": "OK",
+ "confirm-watch-top": "Vulite azzeccà sta paggena int' 'a lista 'e paggene cuntrullate vuosta?",
+ "confirm-unwatch-button": "OK",
+ "confirm-unwatch-top": "Vulite luvà sta paggena d' 'a lista 'e paggene cuntrullate vuosta?",
+ "quotation-marks": "\"$1\"",
+ "imgmultipageprev": "← paggena 'e primma",
+ "imgmultipagenext": "paggena successiva →",
+ "imgmultigo": "Vaje!",
+ "imgmultigoto": "Vaje ncopp' 'a paggena $1",
+ "img-lang-default": "(lengua predefinita)",
+ "img-lang-info": "Fà addeventà sta paggena comm'a $1. $2",
+ "img-lang-go": "Vaje",
+ "ascending_abbrev": "crisc",
+ "descending_abbrev": "dicrisc",
+ "table_pager_next": "Paggena successiva",
+ "table_pager_prev": "Paggena 'e primma",
+ "table_pager_first": "Primma paggena",
+ "table_pager_last": "Urdema paggena",
+ "table_pager_limit": "Mmusta $1 elemente pe' paggena",
+ "table_pager_limit_label": "Elemente pe' paggena:",
+ "table_pager_limit_submit": "Vaje",
+ "table_pager_empty": "Nisciuno resultato",
+ "autosumm-blank": "Pulezza 'a paggena",
+ "autosumm-replace": "Cuntenute scagnate cu '$1'",
"autoredircomment": "Redirect â paggena [[$1]]",
"autosumm-new": "Paggena criate ch''o: $1",
+ "autosumm-newblank": "Criata na paggena abbacante",
+ "lag-warn-normal": "'E cagnamiente cchiù nuove 'e $1 {{PLURAL:$1|secondo|seconde}} può darse ca nun se ponno vedé int'a sta lista.",
+ "lag-warn-high": "Pe' bbìa ca 'o server d' 'o database trica, 'e cagnamiente cchiù nuove 'e $1 {{PLURAL:$1|secondo|seconde}} può darse ca nun se ponno vedé dint'a sta lista.",
+ "watchlistedit-normal-title": "Cagna l'elenco 'e paggene cuntrullate",
+ "watchlistedit-normal-legend": "Lèva titule 'a l'elenco 'e paggene cuntrullate",
+ "watchlistedit-normal-explain": "'E titule ncopp'a l'elenco 'e paggene cuntrullate se mmustano ccà abbascio.\nPe' ne luvà nu titolo, ghienchite 'a casciulella ca se trova annanz' 'a cchesto, e fà click \"{{int:Watchlistedit-normal-submit}}\".\nPutite pure [[Special:EditWatchlist/raw|cagnà 'a lista a mmano]].",
+ "watchlistedit-normal-submit": "Lèva 'e titule",
+ "watchlistedit-normal-done": "{{PLURAL:$1|1 titolo è stato|$1 titule so' state}} luvate 'a l'elenco 'e paggene cuntrullate d' 'o vuosto:",
+ "watchlistedit-raw-title": "Cagna l'elenco 'e paggene cuntrullate ncruro",
+ "watchlistedit-raw-legend": "Cagna l'elenco 'e paggene cuntrullate ncruro",
+ "watchlistedit-raw-explain": "'E titule ncopp'a l'elenco 'e paggene cuntrullate se ponno cagnà si se lèvano 'a l'elenco;\nnu titolo ogne linea.\nQuanno è fernuto, clickate ncopp'a \"{{int:Watchlistedit-raw-submit}}\".<br />\nPutite pure [[Special:EditWatchlist|ausà 'o cagnatore standard]].",
+ "watchlistedit-raw-titles": "Titule:",
+ "watchlistedit-raw-submit": "Agghiurna l'elenco 'e paggene cuntrullate",
+ "watchlistedit-raw-done": "L'elenco 'e paggene cuntrullate è stato agghiurnato.",
+ "watchlistedit-raw-added": "{{PLURAL:$1|nu titolo è|$1 titule so'}} stat'azzeccate:",
+ "watchlistedit-raw-removed": "{{PLURAL:$1|nu titolo è stato luvato|$1 titule so' state luvate}}:",
+ "watchlistedit-clear-title": "Elenco 'e cuntrollo pulezzato",
+ "watchlistedit-clear-legend": "Pulezza l'elenco 'e paggene cuntrullate",
+ "watchlistedit-clear-explain": "Tutte sti titule se luvarranno 'a l'elenco 'e paggene cuntrullate vuosto",
+ "watchlistedit-clear-titles": "Titule:",
+ "watchlistedit-clear-submit": "Pulezza l'elenco 'e paggene cuntrullate (Chesto è pe' sempe!)",
+ "watchlistedit-clear-done": "L'elenco 'e paggene cuntrullate vuosto è stat'abbacantato.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|nu titolo è stato luvato|$1 titule so' state luvate}}:",
+ "watchlistedit-too-many": "Ce stanno troppe paggene 'a veré ccà.",
+ "watchlisttools-clear": "Abbacanta l'elenco 'e paggene cuntrullate",
+ "watchlisttools-view": "Vide 'e cagnamiente mpurtante",
+ "watchlisttools-edit": "Vide e cagna l'elenco 'e paggene cuntrullate",
+ "watchlisttools-raw": "Cagna l'elenco 'e paggene cuntrullate ncruro",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|chiacchiere]])",
+ "duplicate-defaultsort": "<strong>Attenziò:</strong> A chiave d'arricetto \"$2\" se miette ncuollo a nu valore 'e primma \"$1\".",
+ "duplicate-displaytitle": "<strong>Attenziò:</strong> A chiave d'arricetto \"$2\" se scagna p' 'o valore 'e primma \"$1\".",
+ "invalid-indicator-name": "<strong>Errore:</strong> attribbuto <code>name</code> 'e ll'innecature d' 'o stato d' 'a paggena nu può rummanè abbacante.",
+ "version": "Verziona",
+ "version-extensions": "Estenziune installate",
+ "version-skins": "Skin installate",
+ "version-specialpages": "Paggene speciale",
+ "version-parserhooks": "Hook analizzature",
+ "version-variables": "Variabbele",
+ "version-antispam": "Funziune pe' se scanzà 'o spam",
+ "version-other": "Ato",
+ "version-mediahandlers": "Gestore d' 'e cuntenute multimediale",
+ "version-hooks": "Hook",
+ "version-parser-extensiontags": "Tag pe' l'estenziune 'e l'analizzatore",
+ "version-parser-function-hooks": "Funziune hook 'e l'analizzatore",
+ "version-hook-name": "Nomme d' 'o hook",
+ "version-hook-subscribedby": "Sottoscritto 'a",
+ "version-no-ext-name": "[nisciuno nomme]",
+ "version-license": "Licienza MediaWiki",
+ "version-ext-license": "Licienza",
+ "version-ext-colheader-name": "Stenzione",
+ "version-skin-colheader-name": "Aspetto grafeco (skin)",
+ "version-ext-colheader-version": "Verzione",
+ "version-ext-colheader-license": "Licienza",
+ "version-ext-colheader-description": "Descrizzione",
+ "version-ext-colheader-credits": "Auture",
+ "version-license-title": "Licienza pe' $1",
+ "version-license-not-found": "Pe' cheste stenziune nun ce sta nisciuna nfurmazione ndettaglio ncopp' 'a licienza.",
+ "version-credits-title": "Credite pe' $1",
+ "version-credits-not-found": "Pe' cheste stenziune nun ce sta nisciuna nfurmazione ndettaglio ncopp' 'e credite.",
+ "version-poweredby-credits": "Sta wiki funziona pe' bbìa 'e <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
+ "version-poweredby-others": "ati",
+ "version-poweredby-translators": "tradutture 'e translatewiki.net",
+ "version-credits-summary": "Nuje vulessemo tené a mmente 'e perzune ccà abbascio pe' purtà rispetto a 'e cuntribbute 'e lloro ncopp'a [[Special:Version|MediaWiki]].",
+ "version-license-info": "MediaWiki è nu software libbero; vuje 'o putite redestribbuì e/o cagnà sott' 'e termine d' 'a licienza GNU GPL ('a Licienza Pubbreca Generale) comme pubbrecata d' 'a Free Software Foundation; o pure 'a verziona 2 d' 'a Licienza, o pure (comme vulite vuje) 'a n'ata verziona cchiù nnova.\n\nMediaWiki è destribbuita c' 'a speranza d'essere utile, ma SENZA NISCIUNA GARANZIA; senza manco 'a garanzia p' 'a CUMMERCIABBELETÀ O IDONIETÀ PE' NU SCOPO PARTICULARE. Iate a vedé 'a GNU GPL pe' n'avé cchiù nfurmaziune.\n\nAvísseve 'a ricevere [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia d' 'a Licienza GNU GPL] cu stu prugramma; si nò, scrivete â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html liggite sta paggena ncopp' 'a l'Internet].",
+ "version-software": "Software installato",
+ "version-software-product": "Prodotto",
+ "version-software-version": "Verziona",
+ "version-entrypoints": "Punte 'e trasuta 'e l'URL",
+ "version-entrypoints-header-entrypoint": "Punto 'e trasuta",
+ "version-entrypoints-header-url": "URL",
+ "version-libraries": "Bibblioteche installate",
+ "version-libraries-library": "Bibblioteca",
+ "version-libraries-version": "Verziona",
+ "redirect": "Rediretto 'a nu file, n'utente, na paggena o n'ID 'e na verziona",
+ "redirect-legend": "Rediretto ca spuntasse a nu file o na paggena",
+ "redirect-summary": "Sta pàggena speciale redireziona a nu file (dato 'o nomme d' 'o file), na pàggene (dato n'ID 'e verziona), o 'na pàggene utente (dato n'ID nummereca 'e l'utende). Ause: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
+ "redirect-submit": "Vaje",
+ "redirect-lookup": "Ascìa:",
+ "redirect-value": "Valore:",
+ "redirect-user": "ID utenza",
+ "redirect-page": "ID d' 'a paggena",
+ "redirect-revision": "Sarva revisione",
+ "redirect-file": "Nomme d\"o file",
+ "redirect-not-exists": "Valore nun accucchiato",
+ "fileduplicatesearch": "Ascìa 'e file duprecate",
+ "fileduplicatesearch-summary": "Circa pe' file duprecate cu bbase 'o valore hash.",
+ "fileduplicatesearch-legend": "Circa pe' nu duprecato",
+ "fileduplicatesearch-filename": "Nomme d' 'o file",
+ "fileduplicatesearch-submit": "Truova",
+ "fileduplicatesearch-info": "$1 × $2 pixel, dimenzione d' 'o file: $3<br />tipo MIME: $4",
+ "fileduplicatesearch-result-1": "'O file \"$1\" non ce tene nu duprecato eguale eguale.",
+ "fileduplicatesearch-result-n": "'O file \"$1\" tène {{PLURAL:$2|1 dupricazione|$2 dupricaziune}} eguale eguale.",
+ "fileduplicatesearch-noresults": "Nisciuno file chiamato \"$1\" è stato accucchiato.",
"specialpages": "Paggene speciale",
+ "specialpages-note-top": "Liggenda",
+ "specialpages-note": "* Paggene speciale normale.\n* <span class=\"mw-specialpagerestricted\">Paggene speciale ch' 'e restriziune.</span>",
+ "specialpages-group-maintenance": "Report 'e manutenzione",
+ "specialpages-group-other": "Ati paggene speciale",
+ "specialpages-group-login": "Tràse o cria n'acciesso novo",
+ "specialpages-group-changes": "Cagnamiente 'e mò mò e riggistre",
+ "specialpages-group-media": "Riepileghe 'e media e carreche",
+ "specialpages-group-users": "Utente e deritte",
+ "specialpages-group-highuse": "Pàggene ausate assaje proprio",
+ "specialpages-group-pages": "Lista d' 'e paggene",
+ "specialpages-group-pagetools": "Strumiente p' 'e paggene",
+ "specialpages-group-wiki": "Data e strumiente",
+ "specialpages-group-redirects": "Redirezionamiente d' 'e paggene speciale",
+ "specialpages-group-spam": "Strumiente p' 'o spam",
+ "specialpages-group-developer": "Strumiente p' 'e sviluppature",
+ "blankpage": "Paggene abbacante",
+ "intentionallyblankpage": "Sta paggena s'è lassata abbacante apposta",
+ "external_image_whitelist": " #Lassate sta linea accussì accussì comme sta<pre>\n#Mettete piezze 'espressione regolare (chilla parta nfra 'e //) sotto\n#Chille s'azzeccano ch' 'e ndirizze URL 'e l'immaggine 'e fore (collegamiente cavere)\n#Chille cu nu cunfronto positivo sarranno mmustate comme immaggene, o pure comme a nu link a l'immaggine ca mmustano\n#Linee c'accumenciano pe' # songo trattate comme commente\n#Chist'è insenzitivo p' 'e maiuscole e minuscole\n\n#Mettete tutt' 'e piezze regex ncopp' 'a stalinea. Lassate sta linea eguale eguale comme 'a verite</pre>",
+ "tags": "Tag 'e cagnamiento valide",
"tag-filter": "Filtra ppe [[Special:Tags|etichetta]]:",
- "rightsnone": "(nisciuno)"
+ "tag-filter-submit": "Filtra",
+ "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",
+ "tags-display-header": "Comme cumpàreno ncopp' 'a lista 'e cagnamiente",
+ "tags-description-header": "Descrizione sana d' 'o significato",
+ "tags-source-header": "Funte",
+ "tags-active-header": "Attivo?",
+ "tags-hitcount-header": "Cagnamiente etichettate",
+ "tags-actions-header": "Aziune",
+ "tags-active-yes": "Sì",
+ "tags-active-no": "No",
+ "tags-source-extension": "Definito 'a na stensione",
+ "tags-source-manual": "Apprecato manualmente 'a ll'utente e re bot",
+ "tags-source-none": "Nun cchiù ausato",
+ "tags-edit": "càgna",
+ "tags-delete": "scancèlla",
+ "tags-activate": "appiccia",
+ "tags-deactivate": "stuta",
+ "tags-hitcount": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}}",
+ "tags-manage-no-permission": "Nun tenite 'o permesso pe' cagnà 'e tag.",
+ "tags-create-heading": "Crìa nu tag nuovo",
+ "tags-create-explanation": "Comme predefinito, 'e tag criate nuove nuove se farranno disponibbele pe ll'ausà ll'utente e re bot",
+ "tags-create-tag-name": "Nomme 'e ll'etichetta ('o tag):",
+ "tags-create-reason": "Mutivo:",
+ "tags-create-submit": "Crìa",
+ "tags-create-no-name": "Avite 'a specificà nu nomme p' 'o tag.",
+ "tags-create-invalid-chars": "'E nomme d' 'e tag nun avesser'a cuntenè comme (<code>,</code>) o pallicche (<code>/</code>).",
+ "tags-create-invalid-title-chars": "'E nomme d' 'e tag nun avesser'a cuntenè carattere ca nun se stann'ausanno dint' 'e titule d' 'e paggene.",
+ "tags-create-already-exists": "'O tag \"$1\" esiste già.",
+ "tags-create-warnings-above": "{{PLURAL:$2|Chist'avviso s'è truvato|Chist'avvise se so' truvate}} pe' tramente ca se steva a crià 'o tag \"$1\":",
+ "tags-create-warnings-below": "Vulite cuntinuà a crià 'o tag?",
+ "tags-delete-title": "Scancella tag",
+ "tags-delete-explanation-initial": "State pe' scancellà 'o tag \"$1\" d' 'o database.",
+ "tags-delete-explanation-in-use": "Sarrà luvato d' 'o {{PLURAL:$2|$2 verziona o d' 'o riggistro|tutt' 'e verziune $2 e/o 'e nutarelle int' 'o riggistro}} ô quale fosse azzeccato mò mò.",
+ "tags-delete-explanation-warning": "St'aziona è <strong>irreversibbele</strong> e <strong>nun se pò turnà arreto</strong>, pure 'a ll'ammenistrature d' 'o database. Faciteve capace ca stu tag è chillu ca vulite scancellà.",
+ "tags-delete-explanation-active": "<strong>'O tag \"$1\" è ancora attivo, e sarrà apprecato int' 'o futuro.</strong> Pe' fernì cu st'attività, jate, a lloco addò 'o tag s'è apprecato, e stutate llànno.",
+ "tags-delete-reason": "Mutivo:",
+ "tags-delete-submit": "Scancellà 'e manera irreversibbele stu tag",
+ "tags-delete-not-allowed": "'E tag ca se so' definite 'a na stensiona nun se ponno scancellà si nun è c' 'a stensiona 'o premmettesse.",
+ "tags-delete-not-found": "'O tag $1 nun esiste.",
+ "tags-delete-too-many-uses": "'O tag \"$1\" è apprecato a cchiù 'e $2 {{PLURAL:$2|verziona|verziune}}, cosa ca vulesse dicere ca nun se ò scancellà.",
+ "tags-delete-warnings-after-delete": "'O tag \"$1\" s'è scancellato buono, ma {{PLURAL:$2|s'è ncuntrato ll'avviso|se songhe ncuntrate ll'avise}} ccà:",
+ "tags-activate-title": "Appiccia 'o tag",
+ "tags-activate-question": "Vuje state p'appiccià 'o tag \"$1\".",
+ "tags-activate-reason": "Mutivo:",
+ "tags-activate-not-allowed": "Nun se pò appiccià 'o tag \"$1\".",
+ "tags-activate-not-found": "'O tag \"$1\" nun esiste.",
+ "tags-activate-submit": "Appicia",
+ "tags-deactivate-title": "Stuta tag",
+ "tags-deactivate-question": "Vuje state pe' stutà 'o tag \"$1\".",
+ "tags-deactivate-reason": "Mutivo:",
+ "tags-deactivate-not-allowed": "Nun se pò stutà 'o tag \"$1\".",
+ "tags-deactivate-submit": "Stuta",
+ "comparepages": "Miette a cunfronto 'e paggene",
+ "compare-page1": "Paggena 1",
+ "compare-page2": "Paggena 2",
+ "compare-rev1": "Vversione 1",
+ "compare-rev2": "Vversione 2",
+ "compare-submit": "Miette a cunfronto",
+ "compare-invalid-title": "'O titolo c'avite miso nun è bbuono.",
+ "compare-title-not-exists": "'O file c'avite specificato nun esiste.",
+ "compare-revision-not-exists": "'A verziona c'avite specificato nun esiste.",
+ "dberr-problems": "Scusatece! Stu sito sta passanno nu mumento tecnico malamente.",
+ "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 l'indice lloro d' 'e cuntenute nuoste ponno nun essere agghiurnate mò mò.",
+ "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-float-invalid": "'O valore c'avite specificato nun è nu nummero.",
+ "htmlform-int-toolow": "'O valore c'avite specificato sta pe' sott' 'o minimo 'e $1.",
+ "htmlform-int-toohigh": "'O valore c'avite specificato sta pe' copp' 'o massimo 'e $1.",
+ "htmlform-required": "Stu valore ce vuò.",
+ "htmlform-submit": "Manna",
+ "htmlform-reset": "Annulla 'e cagnamiente",
+ "htmlform-selectorother-other": "Ato",
+ "htmlform-no": "No",
+ "htmlform-yes": "Sì",
+ "htmlform-chosen-placeholder": "Scigliete n'opzione",
+ "htmlform-cloner-create": "Azzecca 'e cchiù",
+ "htmlform-cloner-delete": "Lèva",
+ "htmlform-cloner-required": "Servesse al minimo nu valore.",
+ "sqlite-has-fts": "$1 cu supporto 'e ricerche full-text",
+ "sqlite-no-fts": "$1 senza supporto 'e ricerche full-text",
+ "logentry-delete-delete": "$1 {{GENDER:$2|scancellaje}} 'a paggena $3",
+ "logentry-delete-restore": "$1 {{GENDER:$2|arrepigliaje}} 'a paggena $3",
+ "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 'a $3: $4",
+ "logentry-delete-event-legacy": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e l'aziune dint' 'o riggistro ncopp' 'a $3: $4",
+ "logentry-delete-revision-legacy": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà d' 'e 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",
+ "logentry-suppress-revision": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|na verziona|$5 verziune}} ncopp' 'a 'a $3: $4",
+ "logentry-suppress-event-legacy": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà 'e l'aziune 'e riggistro ncopp' 'a $3",
+ "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà d' 'e verziune ncopp' 'a $3",
+ "revdelete-content-hid": "cuntenute annascunnute",
+ "revdelete-summary-hid": "riepilego 'e cagnamiente annascunnute",
+ "revdelete-uname-hid": "nomme utente annascunnuto",
+ "revdelete-content-unhid": "cuntenute fatte avvedè",
+ "revdelete-summary-unhid": "riepilego 'e cagnamiente fatte avvedè",
+ "revdelete-uname-unhid": "nomme utente fatto avvedè",
+ "revdelete-restricted": "restriziune apprecate a ll'ammenistrature",
+ "revdelete-unrestricted": "restriziune luvate a ll'ammenistrature",
+ "logentry-block-block": "$1 {{GENDER:$2|ave bluccato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|ave sbluccato}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|ave cagnato}} 'e mpustaziune 'e blocco pe' {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|ave bluccato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|cagnaje}} 'e mpustaziune 'e blocco 'e {{GENDER:$4|$3}} ch' 'ammaturasse a nu $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|ave mpurtato}} $3 pe' bbìa d' 'a carreca",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|ave mpurtato}} $3 pe' bbìa 'e n'atu wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|aunito|aunita}} $3 int' 'a $4 (verziune nzin' 'a $5)",
+ "logentry-move-move": "$1 {{GENDER:$2|muvette}} paggena $3 a $4",
+ "logentry-move-move-noredirect": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 senza lassà nu redirezionamiento",
+ "logentry-move-move_redir": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 pe' copp' 'a nu redirezionamiento",
+ "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 pe' copp' 'a nu redirezionamiento senza lassà nu redirezionamiento",
+ "logentry-patrol-patrol": "$1 verziona {{GENDER:$2|signata}} $4 'e paggena cuntrullata $3",
+ "logentry-patrol-patrol-auto": "$1 verziona automatecamente {{GENDER:$2|signata}} $4 'e paggena cuntrullata $3",
+ "logentry-newusers-newusers": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}}",
+ "logentry-newusers-create": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}}",
+ "logentry-newusers-create2": "'O cunto utente $3 fuje {{GENDER:$2|criato|criata}} pe' $1",
+ "logentry-newusers-byemail": "'O cunto utente $3 fuje {{GENDER:$2|criato|criata}} pe' $1 e 'a passuor è stata mannata pe' bbìa 'e na mmasciata e-mail",
+ "logentry-newusers-autocreate": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}} automatecamente",
+ "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3 'a $4 a $5",
+ "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3",
+ "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa}} automatecamente 'a $4 a $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|ave carrecato}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|ave carrecato}} na verziona nnova 'e $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|ave carrecato}} $3",
+ "log-name-managetags": "Riggistro 'e ggistione d' 'e tag",
+ "log-description-managetags": "Sta paggena accucchiasse ll'aziune 'e ggistione azzeccate a [[Special:Tags|tagge]]. 'O riggistro cuntene surtanto ll'aziune ca se fanno manualmente 'a n'ammenistratore; 'e tag s'avesser'a crià o scancellà p' 'o software wiki senza na nutarella nzignata int'a stu riggistro.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|criaje}} 'o tag \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|scancellaje}} 'o tag \"$4\" (luvato 'a $5 {{PLURAL:$5|verziona o nutarella 'e riggistro|verziune o nutarelle 'e riggistro}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|appicciaje}} 'o tag \"$4\" pe ll'uso 'a ll'utente e re bot",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|stutaje}} 'o tag \"$4\" pe' ll'uso d'utente e re bot",
+ "rightsnone": "(nisciuno)",
+ "revdelete-summary": "cagna 'o riepilego",
+ "feedback-adding": "Azzecca nu feedback/na segnalazione â paggena..",
+ "feedback-back": "Arreto",
+ "feedback-bugcheck": "Tutt'appost! Avite surtanto 'a cuntrullà ca chisto nun è unu d' 'e [$1 bug canusciute].",
+ "feedback-bugnew": "Aggio cuntrullato. Manna nu bug nuovo.",
+ "feedback-bugornote": "Si site pronto/a a descrivere nu probblema tecnico ch' 'e dettaglie, pe' piacere [$1 mannate nu bug].\nSi nun site pronto/a, allora putite ausà 'o modulo semprice ca vedite ccà abbascio. 'O commento vuosto sarrà mpezzato dint' 'a paggena [$3 $2]\", seguenno 'o nomme utente vuosto e 'o navigatóre web ca state ausanno.",
+ "feedback-cancel": "Canciella",
+ "feedback-close": "Fatto",
+ "feedback-external-bug-report-button": "Archivia na fatica tecnica",
+ "feedback-dialog-title": "Manna 'o feedback",
+ "feedback-dialog-intro": "Putite ausà sempricemente 'o modulo ccà abbascio pe' putè mannà 'o feedback vuosto. 'O cummento sarrà azzeccato â paggena \"$1\", nziem' 'o nomme vuosto.",
+ "feedback-error-title": "Errore",
+ "feedback-error1": "Errore: Risultato nun aspettato 'a ll'API",
+ "feedback-error2": "Errore: Cagnamiento scassato",
+ "feedback-error3": "Errore: Ll'API nun risponne",
+ "feedback-message": "Mmasciata:",
+ "feedback-subject": "Suggietto:",
+ "feedback-submit": "Manna",
+ "feedback-terms": "Me so' fatto/a capace ca ll'aggente 'e nfurmaziune 'e cunto ave accesso a nfurmaziune ncopp'a 'o navigatore e 'o browser ca stongo 'ausà e ca chisto sarrà spartuto pubbrecamente c' 'o feedback mio.",
+ "feedback-termsofuse": "So' d'accordo ca sto a mannà nu feedback cu sti térmene d'uso.",
+ "feedback-thanks": "Grazie! 'O feedback vuosto s'è mpizzato dint' 'a paggena \"[$2 $1]\".",
+ "feedback-thanks-title": "Ve ringraziammo!",
+ "feedback-useragent": "Aggente utente:",
+ "searchsuggest-search": "Truova",
+ "searchsuggest-containing": "tène...",
+ "api-error-badaccess-groups": "Tun putite carrecà file ncopp' 'a sta wiki.",
+ "api-error-badtoken": "Errore interno: 'O token nun è buono.",
+ "api-error-copyuploaddisabled": "'A funzione carrcà 'e n'URL nun è appicciata dint'a stu server.",
+ "api-error-duplicate": "Nce {{PLURAL:$1|stà [$2 n'atu file]|stanno [$2 ati file]}} ncopp' 'o sito ch' 'e stisse cuntenute.",
+ "api-error-duplicate-archive": "Nce {{PLURAL:$1|steva [$2 n'atu file]|stevano [$2 ati file]}} già ncopp' 'o sito ch' 'e stisse cuntenute, però {{PLURAL:$1|è stato|so' state}} scancellate.",
+ "api-error-duplicate-archive-popup-title": "File duprecat{{PLURAL:$1|o che è già stato scancellato|e che songo già state scancellati}}",
+ "api-error-duplicate-popup-title": "Dupreche {{PLURAL:$1|file|file}}",
+ "api-error-empty-file": "'O file ch'avite mannato è abbacante.",
+ "api-error-emptypage": "'A criazione 'e paggene nuove abbacante nun è permessa.",
+ "api-error-fetchfileerror": "Errore interno: Coccosa ascette stuorta quanno se steva 'analizzà stu file.",
+ "api-error-fileexists-forbidden": "Nu file c' 'o nomme \"$1\" esiste già, e chisto nun pò essere sovrascritto.",
+ "api-error-fileexists-shared-forbidden": "Nu file c' 'o nomme \"$1\" esiste già dint' 'a l'archivio 'e file, e chisto nun pò essere sovrascritto.",
+ "api-error-file-too-large": "'O file ch'avite mannato è troppo gruosso.",
+ "api-error-filename-tooshort": "'O nomme d' 'o file è troppo curto.",
+ "api-error-filetype-banned": "Stu tipo 'e file nun è permesso.",
+ "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nun è nu tipo 'e file permesso|nun songo tipe 'e file permesse}}. {{PLURAL:$3|'O tipo 'e file permesso è|'E tipe 'e file permesse songo}} $2.",
+ "api-error-filetype-missing": "Stu file nun tene estensione.",
+ "api-error-hookaborted": "'O cagnamiento c'avite pruvato 'e fà è stato spezzato 'a na stensione.",
+ "api-error-http": "Errore interno: Nun putimmo ngarrà a nce cullegà a 'o server.",
+ "api-error-illegal-filename": "'O nomme d' 'o file nun è permesso.",
+ "api-error-internal-error": "Errore interno: Coccosa ascette male pe' tramente ca se steva processanno 'a carreca dint'a stu wiki.",
+ "api-error-invalid-file-key": "Errore interno: 'O file nun se pò truvà dint' 'a memoria temporanea.",
+ "api-error-missingparam": "Errore interno: nun se trovano 'e parametre pe' ne putè fà 'a richiesta.",
+ "api-error-missingresult": "Errore interno: Nun se pò sapè si 'a copia ascette bbona.",
+ "api-error-mustbeloggedin": "Avite 'a trasì ô sito si vulite carrecà file.",
+ "api-error-mustbeposted": "Errore interno: 'A richiesta vole HTTP POST.",
+ "api-error-noimageinfo": "A carreca ngarraje, ma 'o server nun ce ha pututo dà nisciuna nformazione ncopp' 'o file.",
+ "api-error-nomodule": "Errore interno: Nisciuno modulo 'e carreca mpustato.",
+ "api-error-ok-but-empty": "Errore interno: Nisciuna resposta 'a 'o server.",
+ "api-error-overwrite": "Sovrascrivere nu file ch'esiste già nun è permesso.",
+ "api-error-stashfailed": "Errore interno: 'O server nun ngarraje a s'astipà 'o file temporaneo.",
+ "api-error-publishfailed": "Errore interno: 'O server nun ngarraje a pubbrecà 'o file temporaneo.",
+ "api-error-stasherror": "'A carreca d' 'o file 'n stash è asciuta male, ce sta n'errore.",
+ "api-error-stashedfilenotfound": "'O file 'n stash nun è stato truvato pe' tramente ca se faceva 'a prova 'e carreca d' 'o stash.",
+ "api-error-stashpathinvalid": "'O cullegamento a 'o pizzo addò avesse stà 'o file 'e stash nun è bbuono.",
+ "api-error-stashfilestorage": "L'astipamento d' 'o file 'n stash è asciuto male, ce sta n'errore.",
+ "api-error-stashzerolength": "'O server nun può nzertà 'o file dint'a 'o stash, pecché è luongo zero zero.",
+ "api-error-stashnotloggedin": "Avisseve 'a trasì pe' ne putè astipà 'e file din' 'o stash 'e càrreca.",
+ "api-error-stashwrongowner": "'O file addò stavate a trasì dint' 'o stash nun v'appartene.",
+ "api-error-stashnosuchfilekey": "'A chiave d' 'o file addò stavate a trasì dint' 'o stash nun esiste.",
+ "api-error-timeout": "'O server nun rispunnette dint'a 'o tiempo stabbelito.",
+ "api-error-unclassified": "È capitato n'errore scanusciuto.",
+ "api-error-unknown-code": "Errore scanusciuto: \"$1\"",
+ "api-error-unknown-error": "Errore interno: Coccosa jette a fernì malalamente quano facisteve 'a carreca d' 'o file vuosto.",
+ "api-error-unknown-warning": "Avvertimento scanusciute: $1",
+ "api-error-unknownerror": "Errore scanusciuto: \"$1\"",
+ "api-error-uploaddisabled": "'E carreche so' stutate dint'a sta siki.",
+ "api-error-verification-error": "Stu file putesse stà nguacchiato, o tene n'estensione sbagliata.",
+ "duration-seconds": "$1 {{PLURAL:$1|secondo|seconde}}",
+ "duration-minutes": "$1 {{PLURAL:$1|minuto|minute}}",
+ "duration-hours": "$1 {{PLURAL:$1|ora|ore}}",
+ "duration-days": "$1 {{PLURAL:$1|juorno|juorne}}",
+ "duration-weeks": "$1 {{PLURAL:$1|semmana|semmane}}",
+ "duration-years": "$1 {{PLURAL:$1|anno|anne}}",
+ "duration-decades": "$1 {{PLURAL:$1|decade|decade}}",
+ "duration-centuries": "$1 {{PLURAL:$1|seculo|secule}}",
+ "duration-millennia": "$1 {{PLURAL:$1|millennio|millennia}}",
+ "rotate-comment": "Immaggine rotata $1 {{PLURAL:$1|grade}} 'n senzo orario",
+ "limitreport-title": "Analizzatore d' 'e date d' 'a profilazione:",
+ "limitreport-cputime": "Tiempo d'uso d' 'o CPU",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|secondo|seconde}}",
+ "limitreport-walltime": "Tiempo riale d'uso",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|secondo|seconde}}",
+ "limitreport-ppvisitednodes": "Nummero e nurece 'e preprucessore visetate",
+ "limitreport-ppgeneratednodes": "Nummero 'e nurece generate d' 'o preprocessore",
+ "limitreport-postexpandincludesize": "Diminziona d'inclusiune Post-Espanzione",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|byte}}",
+ "limitreport-templateargumentsize": "Dimenzione d' 'o parametro d' 'o template",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|byte}}",
+ "limitreport-expansiondepth": "Funno massimo 'e spanzione",
+ "limitreport-expensivefunctioncount": "Funzione analizzatore ca costasse assaje 'e prucessà",
+ "expandtemplates": "Template spannute",
+ "expand_templates_intro": "Sta pàggena speciale piglia cocche testo e spanne tutt' 'e template ca stann'a dinto recurzivamente.<br />\nChista spanne pure le funziune d'analise comme<br />\n<code><nowiki>{{</nowiki>#language:…}}</code>, e variabbele comme <br />\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.<br />\nIn pratica tutte chille ca stessero dint'a le doppie parentesi graffe.<br />",
+ "expand_templates_title": "Titole contestuale pe' {{FULLPAGENAME}}, ecc.:",
+ "expand_templates_input": "Testo d'input:",
+ "expand_templates_output": "Risultato",
+ "expand_templates_xml_output": "Output XML",
+ "expand_templates_html_output": "Risultato HTML cruro",
+ "expand_templates_ok": "OK",
+ "expand_templates_remove_comments": "Lèva 'e commente",
+ "expand_templates_remove_nowiki": "Lèva 'e tag <nowiki> 'a int' 'e resultate",
+ "expand_templates_generate_xml": "Fà vedè l'arvero 'e l'analisi XML",
+ "expand_templates_generate_rawhtml": "Fà verè 'o codece HTML 'n cruro",
+ "expand_templates_preview": "Anteprimma",
+ "expand_templates_preview_fail_html": "<em>Siccomme {{SITENAME}} téne 'o HTML 'ncruro appicciato e se songhe spierze 'e date d' 'a sessiona, 'a previsualizzaziona s'è annascunnuta comm'a na prutezione annanz'e uerre 'e JavaScript.</em>\n\n<strong>Si chist'è nu tentativo giustificato 'e previsualizzaziona, pe' piacere facite n'ata vota.</strong>\nSi nun funziona ancora, facite d'[[Special:UserLogout|ascì]] e trasì n'ata vota.",
+ "expand_templates_preview_fail_html_anon": "<em>Siccomme {{SITENAME}} téne 'o HTML 'ncruro e vuje nun site trasute 'o sito, 'a previsualizzaziona s'è annascunnuta comm'a na prutezione annanz'e uerre 'e JavaScript.</em>\n\n<strong>Si chist'è nu tentativo giustificato 'e previsualizzaziona, pe' piacere facite d'[[Special:UserLogout|ascì]] e trasì n'ata vota.</strong>",
+ "pagelanguage": "Scigliete 'a lengua d' 'a paggena pe' bbìa e stu strumiento",
+ "pagelang-name": "Paggena",
+ "pagelang-language": "Lengua",
+ "pagelang-use-default": "Aùsa 'a lengua predefinita",
+ "pagelang-select-lang": "Selezziona lengua",
+ "right-pagelang": "Cagnate 'a lengua d' 'a paggena",
+ "action-pagelang": "càgna 'a lengua d' 'a paggena",
+ "log-name-pagelang": "Càgna 'o riggistro 'e llengue",
+ "log-description-pagelang": "Chest'è nu riggistro 'e cagnamiente 'e lengua d' 'e paggene.",
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ave cagnato}} 'a lengua d' 'a paggena $3 'a $4 a $5.",
+ "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse 'e skin ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera 'e ll'abbià o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copiare 'e linee ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià tutt' 'e skin installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
+ "default-skin-not-found-no-skins": "Oops! 'A skin predefinita p' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\nNun avite installato nisciuno skin.\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonanno uno 'e chiste repository <code>mediawiki/skins/*</code> pe' bbìa d' 'o git dint' 'a directory <code>skins/</code> d' 'a installazione MediaWiki vosta.\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]) pe n'avè nfurmaziune ncopp' 'a maniera d'appiccià e scegliere chella predefinita.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (funzione appicciata)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''funzione stutata''')",
+ "mediastatistics": "Statistiche d' 'e media",
+ "mediastatistics-summary": "Statistiche ncopp' 'e tipe d' 'e file carrecate. Ce truvate azzeccata sulamente 'a verziona cchiù recente d' 'o file. Verziune viecchie o scancellate se so' luvate.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tipo 'e MIME",
+ "mediastatistics-table-extensions": "Estenziune pussibbele",
+ "mediastatistics-table-count": "Nummero 'e file",
+ "mediastatistics-table-totalbytes": "Dimenziona cumbinata",
+ "mediastatistics-header-unknown": "Scanusciuto",
+ "mediastatistics-header-bitmap": "Immaggene bitmap",
+ "mediastatistics-header-drawing": "Disegne (immaggene vetturiale)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Video",
+ "mediastatistics-header-multimedia": "Cuntenute ricche multimediale",
+ "mediastatistics-header-office": "Ufficio",
+ "mediastatistics-header-text": "Testuale",
+ "mediastatistics-header-executable": "File eseguetàbbele",
+ "mediastatistics-header-archive": "Furmate compresse",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgola finale è stata luvata|virgule finale so' state luvate}} 'a 'o JSON",
+ "json-error-unknown": "Ce sta nu probblema c' 'o JSON. Errore: $1",
+ "json-error-depth": "'O funno massimo 'e stack è stato appassàto",
+ "json-error-state-mismatch": "Valore malamente furmato o nun buono p' 'o JSON",
+ "json-error-ctrl-char": "Errore dint' 'o carattere 'e cuntrollo, può darse ca s'avesse codefecato male",
+ "json-error-syntax": "Errore 'e sintasse",
+ "json-error-utf8": "'E carattere UTF-8 furmate malamente, probbabilmente nun se songhe ncodifecate bbuone",
+ "json-error-recursion": "Uno o cchiù riferimente recurzive dint' 'o valore a codefecare",
+ "json-error-inf-or-nan": "Uno o cchiù valure NAN o INF dint' 'o valore 'a codefecare",
+ "json-error-unsupported-type": "S'è dato nu valore pe' nu tipo ca nun se può ncodifecà",
+ "headline-anchor-title": "Cullega a sta sezziona",
+ "special-characters-group-latin": "Latino",
+ "special-characters-group-latinextended": "Latino spannuto",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simmule",
+ "special-characters-group-greek": "Grieco",
+ "special-characters-group-cyrillic": "Cirillico",
+ "special-characters-group-arabic": "Arabo",
+ "special-characters-group-arabicextended": "Arabo spannuto",
+ "special-characters-group-persian": "Perziano",
+ "special-characters-group-hebrew": "Abbrejo",
+ "special-characters-group-bangla": "Bangladesciano",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugo",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "trattino enne",
+ "special-characters-title-emdash": "trattino emme",
+ "special-characters-title-minus": "segno meno"
}
diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json
index 18674608..9d2d63f5 100644
--- a/languages/i18n/nb.json
+++ b/languages/i18n/nb.json
@@ -40,7 +40,10 @@
"Teak",
"Wouterkoch",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Chameleon222",
+ "Helland",
+ "Macofe"
]
},
"tog-underline": "Strek under lenker:",
@@ -68,7 +71,7 @@
"tog-shownumberswatching": "Vis antall brukere som overvåker",
"tog-oldsig": "Nåværende signatur:",
"tog-fancysig": "Behandle signaturen som wikitekst (uten automatisk lenke)",
- "tog-uselivepreview": "Bruk levende forhåndsvisning (eksperimentelt)",
+ "tog-uselivepreview": "Bruk levende forhåndsvisning",
"tog-forceeditsummary": "Advar meg når jeg ikke gir noen redigeringsforklaring",
"tog-watchlisthideown": "Skjul mine endringer fra overvåkningslisten",
"tog-watchlisthidebots": "Skjul robotendringer fra overvåkningslisten",
@@ -210,7 +213,7 @@
"edit": "Rediger",
"edit-local": "Rediger lokal beskrivelse",
"create": "Opprett",
- "create-local": "Legg til lokal beskrivelse",
+ "create-local": "Opprett lokal beskrivelse",
"editthispage": "Rediger siden",
"create-this-page": "Opprett denne siden",
"delete": "Slett",
@@ -243,6 +246,7 @@
"otherlanguages": "På andre språk",
"redirectedfrom": "(Omdirigert fra $1)",
"redirectpagesub": "Omdirigeringsside",
+ "redirectto": "Omdirigering til:",
"lastmodifiedat": "Denne siden ble sist endret $1 kl. $2.",
"viewcount": "Denne siden er vist {{PLURAL:$1|én gang|$1 ganger}}.",
"protectedpage": "Låst side",
@@ -255,6 +259,7 @@
"pool-queuefull": "Prosesskøen er full",
"pool-errorunknown": "Ukjent feil",
"pool-servererror": "'Pool counter'-tjenesten er ikke tilgjengelig ($1).",
+ "poolcounter-usage-error": "Bruksfeil: $1",
"aboutsite": "Om {{SITENAME}}",
"aboutpage": "Project:Om",
"copyright": "Innholdet er tilgjengelig under $1 med mindre annet er spesifikt angitt.",
@@ -264,6 +269,7 @@
"disclaimers": "Forbehold",
"disclaimerpage": "Project:Generelle forbehold",
"edithelp": "Redigeringshjelp",
+ "helppage-top-gethelp": "Hjelp",
"mainpage": "Forside",
"mainpage-description": "Forside",
"policy-url": "Project:Retningslinjer",
@@ -342,10 +348,13 @@
"readonly_lag": "Databasen er automatisk skrivebeskyttet så slavetjenerne kan ta igjen mestertjeneren",
"internalerror": "Intern feil",
"internalerror_info": "Intern feil: $1",
+ "internalerror-fatal-exception": "Uhåndterlig unntak av typen «$1»",
"filecopyerror": "Klarte ikke å kopiere filen «$1» til «$2».",
"filerenameerror": "Klarte ikke å døpe om filen «$1» til «$2».",
"filedeleteerror": "Klarte ikke å slette filen «$1».",
"directorycreateerror": "Klarte ikke å opprette mappe «$1».",
+ "directoryreadonlyerror": "Folder \"$1\" er skrivebeskyttet.",
+ "directorynotreadableerror": "Folder \"$1\" er ikke lesbar.",
"filenotfound": "Klarte ikke å finne filen «$1».",
"unexpected": "Uventet verdi: «$1»=«$2».",
"formerror": "Feil: klarte ikke å sende skjema",
@@ -367,7 +376,8 @@
"viewsourcetext": "Du kan se og kopiere kilden til denne siden:",
"viewyourtext": "Du kan se og kopiere kilden til '''dine endringer''' på denne siden:",
"protectedinterface": "Denne siden kontrollerer brukergrensesnittekst for programvaren, og er låst for å hindre misbruk.",
- "editinginterface": "'''Advarsel:''' Du redigerer en side som brukes til å kontrollere grensesnittekst for programvaren.\nEndringer av denne siden vil påvirke hvordan grensesnittet vil se ut for andre brukere.\nFor oversettelser er det best om du bruker [//translatewiki.net/wiki/Main_Page?setlang=nb translatewiki.net], prosjektet for oversettelse av MediaWiki.",
+ "editinginterface": "<strong>Advarsel:</strong> Du redigerer en side som brukes til å kontrollere grensesnittekst for programvaren.\nEndringer av denne siden vil påvirke hvordan grensesnittet vil se ut for andre brukere på denne wikien.",
+ "translateinterface": "For å legge til eller endre oversettelser for alle wikier bruk [//translatewiki.net/ translatewiki.net], MediaWikis lokaliseringsprosjekt.",
"cascadeprotected": "Denne siden er låst for redigering fordi den inkluderes på følgende sider som har dypbeskyttelse slått på:<!--{{PLURAL:$1}}-->\n$2",
"namespaceprotected": "Du har ikke tillatelse til å redigere sider i navnerommet '''$1'''.",
"customcssprotected": "Du har ikke tillatelse til å redigere denne CSS-siden fordi den inneholder en annen brukers personlige innstillinger.",
@@ -424,6 +434,8 @@
"userlogin-resetlink": "Har du glemt påloggingsdetaljene dine?",
"userlogin-resetpassword-link": "Glemt passordet?",
"userlogin-helplink2": "Hjelp med innlogging",
+ "userlogin-loggedin": "Du er allerede logget inn som {{GENDER:$1|$1}}.\nBruk skjemaet nedenfor for å logge inn som en annen bruker.",
+ "userlogin-createanother": "Opprett ny konto",
"createacct-emailrequired": "E-postadresse",
"createacct-emailoptional": "E-postadresse (valgfritt)",
"createacct-email-ph": "Skriv inn e-postadressen din",
@@ -485,6 +497,7 @@
"createaccount-text": "Noen opprettet en konto for din e-postadresse på {{SITENAME}} ($4) med navnet «$2», med «$3» som passord. Du burde logge inn og endre passordet nå.\n\nDu kan ignorere denne beskjeden dersom kontoen ble opprettet ved en feil.",
"login-throttled": "Du har prøvd å logge inn for mange ganger.\nVent $1 før du prøver på nytt.",
"login-abort-generic": "Innleggingen ble avbrutt.",
+ "login-migrated-generic": "Kontoen din har blitt globalisert, og brukernavnet ditt finnes ikke lenger på denne wikien.",
"loginlanguagelabel": "Språk: $1",
"suspicious-userlogout": "Din forespørsel om å logge ut ble nektet fordi den så ut til å ha bli sendt av en ødelagt nettleser eller en mellomtjener.",
"createacct-another-realname-tip": "Det er frivillig å oppgi ditt egentlige navn.\nHvis du velger å oppgi det, vil det blir anvendt for å gi deg som bruker anerkjennelse",
@@ -536,7 +549,6 @@
"passwordreset-emailsent-capture": "Passordtilbakestillingseposten vist under har blitt sendt ut.",
"passwordreset-emailerror-capture": "En passordtilbakestillingsepost ble laget, men det lyktes ikke å sende denne til {{GENDER:$2|brukeren}}: $1",
"changeemail": "Endre e-postadresse",
- "changeemail-header": "Endre kontoens e-postadresse",
"changeemail-text": "Fyll ut dette skjemaet for å endre din e-postadresse. Du må oppgi ditt passord for å bekrefte endringen.",
"changeemail-no-info": "Du må være innlogget for å få direkte tilgang til denne siden.",
"changeemail-oldemail": "Nåværende e-postadresse:",
@@ -544,7 +556,6 @@
"changeemail-none": "(ingen)",
"changeemail-password": "Ditt passord på {{SITENAME}}:",
"changeemail-submit": "Endre e-post",
- "changeemail-cancel": "Avbryt",
"changeemail-throttled": "Du har foretatt for mange innloggingsforsøk. Vær vennlig å vente $1 før du prøver igjen.",
"resettokens": "Nullstill merker",
"resettokens-text": "Du kan nullstille nøklene som gir adgang til visse private data knyttet til din konto.\n\nOg du burde gjøre det hvis du har avslørt nøklene for noen.",
@@ -582,13 +593,15 @@
"showpreview": "Forhåndsvisning",
"showdiff": "Vis endringer",
"blankarticle": "<strong>Advarsel:</strong> Siden du er i ferd med å opprette er tom.\nHvis du trykker \"{{int:savearticle}}\" en gang til, vil siden opprettes uten innhold.",
- "anoneditwarning": "'''Advarsel:''' Du er ikke logget inn.\nIP-adressen din blir bevart i sidens redigeringshistorikk.",
- "anonpreviewwarning": "''Du er ikke logget inn. Lagring vil registrere din IP-adresse i sidens redigeringshistorikk.''",
+ "anoneditwarning": "<strong>Advarsel:</strong> Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du <strong>[$1 logger inn]</strong> eller <strong>[$2 oppretter en konto]</strong> vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.",
+ "anonpreviewwarning": "<em>Du er ikke logget inn. Ved lagring vil IP-adressen din lagres i sidens redigeringshistorikk.</em>",
"missingsummary": "'''Påminnelse:''' Du har ikke lagt inn en redigeringsforklaring.\nVelger du ''Lagre siden'' en gang til blir endringene lagret uten forklaring.",
+ "selfredirect": "<strong>Advarsel:</strong> Du omdirigerer denne siden til seg selv. Du kan ha oppgitt feil mål for omdirigeringen, eller kanskje du redigerer feil side. Om du klikker «{{int:savearticle}}» igjen vil omdirigeringen bli opprettet uansett.",
"missingcommenttext": "Vennligst legg inn en kommentar under.",
"missingcommentheader": "'''Påminnelse:''' Du har ikke angitt et emne/overskrift for denne kommentaren.\nOm du trykker «{{int:savearticle}}» igjen vil redigeringen din bli lagret uten forklaring.",
"summary-preview": "Forhåndsvisning av redigeringsforklaring:",
"subject-preview": "Forhåndsvisning av emne/overskrift:",
+ "previewerrortext": "En feil oppsto mens dine endringer skulle forhåndsvises.",
"blockedtitle": "Brukeren er blokkert",
"blockedtext": "'''Ditt brukernavn eller din IP-adresse har blitt blokkert.'''\n\nBlokkeringen ble utført av $1. Grunnen som ble oppgitt var ''$2''.\n\n* Blokkeringen begynte: $8\n* Blokkeringen utgår: $6\n* Blokkering ment på: $7\n\nDu kan kontakte $1 eller en annen [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringen.\nDu kan ikke bruke «E-post til denne brukeren»-funksjonen med mindre du har oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]] og du ikke er blokkert fra å sende e-post.\nDin nåværende IP-adresse er $3, og blokkerings-ID-en er #$5.\nVennligst ta all denne informasjonen ved henvendelser.",
"autoblockedtext": "Din IP-adresse har blitt automatisk blokkert fordi den ble brukt av en annen bruker som ble blokkert av $1.\nDen oppgitte grunnen var:\n\n:'''$2'''\n\n* Blokkeringen begynte: $8\n* Blokkeringen utgår: $6\n* Blokkeringen er ment for: $7\n\nDu kan kontakte $1 eller en av de andre [[{{MediaWiki:Grouppage-sysop}}|administratorene]] for å diskutere blokkeringen.\n\nMerk at du ikke kan bruke «E-post til denne brukeren»-funksjonen med mindre du har registrert en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].\n\nDin IP-adresse er $3, og blokkerings-ID-en er #$5.\nVennligst ta med all denne informasjonen ved henvendelser.",
@@ -598,7 +611,7 @@
"nosuchsectiontitle": "Finner ikke avsnittet",
"nosuchsectiontext": "Du prøvde å redigere et avsnitt som ikke eksisterer.\nDet kan ha blitt flyttet eller slettet mens du så på siden.",
"loginreqtitle": "Innlogging kreves",
- "loginreqlink": "logge inn",
+ "loginreqlink": "logg inn",
"loginreqpagetext": "Du må $1 for å se andre sider.",
"accmailtitle": "Passord sendt.",
"accmailtext": "Et tilfeldig passord for [[User talk:$1|$1]] har blitt sendt til $2. Det kan endres på [[Special:ChangePassword|passordendringssiden]] under innlogging.",
@@ -606,7 +619,7 @@
"newarticletext": "Du har fulgt en lenke til en side som ikke finnes ennå.\nFor å opprette siden, begynn å skrive i boksen under (se [$1 hjelpesiden] for mer informasjon).\nOm du havnet her ved en feil, trykk '''tilbake''' i nettleseren.",
"anontalkpagetext": "----\n''Dette er en diskusjonsside for en uregistrert bruker som ikke har opprettet konto eller ikke er logget inn.\nVi er derfor nødt til å bruke den numeriske IP-adressen til å identifisere ham eller henne.\nEn IP-adresse kan være delt mellom flere brukere.\nHvis du er en uregistrert bruker og synes at du har fått irrelevante kommentarer på en slik side, [[Special:UserLogin/signup|opprett en konto]] eller [[Special:UserLogin|logg inn]] så vi unngår fremtidige forvekslinger med andre uregistrerte brukere.''",
"noarticletext": "Det er for tiden ingen tekst på denne siden.\nDu kan [[Special:Search/{{PAGENAME}}|søke etter denne sidetittelen]] på andre sider,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relaterte logger],\neller [{{fullurl:{{FULLPAGENAME}}|action=edit}} opprette siden]</span>.",
- "noarticletext-nopermission": "Det er for tiden ingen tekst på denne siden.\nDu kan [[Special:Search/{{PAGENAME}}|søke etter sidens tittel]] blant andre sider, eller <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relevante logger]</span>.",
+ "noarticletext-nopermission": "Det er for tiden ingen tekst på denne siden.\nDu kan [[Special:Search/{{PAGENAME}}|søke etter sidens tittel]] blant andre sider, eller <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søke i relevante logger]</span>, men du har ikke tillatelse til å opprette denne siden.",
"missing-revision": "Revisjonen #$1 av siden med navnet \"{{FULLPAGENAME}}\" eksisterer ikke.\n\nDette skyldes som regel at en gammel historikklenke er fulgt til en side som er slettet.\nDetaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
"userpage-userdoesnotexist": "Brukerkontoen «$1» er ikke registrert.\nSjekk om du ønsker å opprette/redigere denne siden.",
"userpage-userdoesnotexist-view": "Kontoen «$1» er ikke registrert.",
@@ -683,6 +696,10 @@
"content-model-text": "Ren tekst",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Tomt objekt",
+ "content-json-empty-array": "Tom matrise",
+ "duplicate-args-category": "Sider med like argumenter i malkall",
+ "duplicate-args-category-desc": "Denne siden inneholder malkall med duplikate parametre, slik som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Advarsel: Denne siden inneholder for mange prosesskrevende parserfunksjoner.\n\nDet burde være mindre enn {{PLURAL:$2|$2|$2}}, men er nå {{PLURAL:$1|$1|$1}}..",
"expensive-parserfunction-category": "Sider med for mange prosesskrevende parserfunksjoner",
"post-expand-template-inclusion-warning": "Advarsel: Størrelsen på inkluderte maler er for stor.\nNoen maler vil ikke bli inkludert.",
@@ -737,7 +754,7 @@
"history-feed-empty": "Den etterspurte siden finnes ikke.\nDen kan ha blitt slettet fra wikien, eller fått et nytt navn.\nPrøv å [[Special:Search|søke]] etter beslektede sider.",
"rev-deleted-comment": "(redigeringskommentar fjernet)",
"rev-deleted-user": "(brukernavn fjernet)",
- "rev-deleted-event": "(fjernet loggoppføring)",
+ "rev-deleted-event": "(loggoppføring fjernet)",
"rev-deleted-user-contribs": "[brukernavn eller IP-adresse fjernet – redigeringen vises ikke blant bidragene]",
"rev-deleted-text-permission": "Denne revisjonen har blitt '''slettet'''.\nDet kan være detaljer i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} slettingsloggen].",
"rev-suppressed-text-permission": "Denne siderevisjonen har blitt <strong>skjult</strong>.\nDetaljer finnes i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} skjulingsloggen].",
@@ -771,7 +788,7 @@
"revdelete-legend": "Fastsett synlighetsbegrensninger",
"revdelete-hide-text": "Skjul revisjonstekst",
"revdelete-hide-image": "Skjul filinnhold",
- "revdelete-hide-name": "Skjul handling og mål",
+ "revdelete-hide-name": "Skjul handling og parametre",
"revdelete-hide-comment": "Skjul redigeringsforklaring",
"revdelete-hide-user": "Skjul bidragsyters brukernavn eller IP-adresse",
"revdelete-hide-restricted": "La disse begrensningene gjelde for administratorer også",
@@ -825,7 +842,6 @@
"mergehistory-same-destination": "Kilde- og målside kan ikke være den samme.",
"mergehistory-reason": "Årsak:",
"mergelog": "Flettingslogg",
- "pagemerge-logentry": "flettet [[$1]] til [[$2]] (revisjoner fram til $3)",
"revertmerge": "Omgjør fletting",
"mergelogpagetext": "Nedenfor er en liste over de nyligste flettingene av sidehistorikker.",
"history-title": "Revisjonshistorikk for «$1»",
@@ -837,7 +853,7 @@
"showhideselectedversions": "Vis/skjul valgte versjoner",
"editundo": "fjern",
"diff-empty": "(Ingen forskjell)",
- "diff-multi-sameuser": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av samme bruker vises ikke)",
+ "diff-multi-sameuser": "({{PLURAL:$1|Én mellomliggende revisjon|$1 mellomliggende revisjoner}} av samme bruker vises ikke)",
"diff-multi-otherusers": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av {{PLURAL:$2|en annen bruker|$2 brukere}} er ikke vist)",
"diff-multi-manyusers": "({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)",
"difference-missing-revision": "{{PLURAL:$2|En revisjon|$2 revisjoner}} av denne forskjellen ($1) {{PLURAL:$2|ble|ble}} ikke funnet.\n\nDette skyldes som regel at en gammel forskjell-lenke er fulgt til en side som er slettet.\nDetaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
@@ -853,7 +869,7 @@
"shown-title": "Vis $1 {{PLURAL:$1|resultat|resultater}} per side",
"viewprevnext": "Vis ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "* Siden '''[[$1]]'''",
- "searchmenu-new": "'''Opprett siden ''[[:$1]]'' på denne wikien.'''\n<strong>Opprett siden \"[[:$1]]\" på denne wikien!</strong> {{PLURAL:$2|0=|Se også siden oppnådd gjennom søket ditt.|Se også de oppnådde søkeresultatene.}}",
+ "searchmenu-new": "<strong>Opprett siden \"[[:$1]]\" på denne wikien!</strong> {{PLURAL:$2|0=|Se også siden oppnådd gjennom søket ditt.|Se også de oppnådde søkeresultatene.}}",
"searchprofile-articles": "Innholdssider",
"searchprofile-images": "Multimedia",
"searchprofile-everything": "Alt",
@@ -866,6 +882,7 @@
"search-result-category-size": "{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})",
"search-redirect": "(omdirigering $1)",
"search-section": "(avsnitt $1)",
+ "search-category": "(kategori $1)",
"search-file-match": "(matcher filinnhold)",
"search-suggest": "Mente du: $1",
"search-interwiki-caption": "Søsterprosjekter",
@@ -875,7 +892,8 @@
"searchrelated": "relatert",
"searchall": "alle",
"showingresults": "Nedenfor vises opptil {{PLURAL:$1|'''ett''' resultat|'''$1''' resultater}} fra og med nummer <b>$2</b>.",
- "showingresultsinrange": "Nedenfor vises opptil {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resulter}} i området #<strong>$2</strong> til #<strong>$3</strong>.",
+ "showingresultsinrange": "Nedenfor vises opptil {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resulter}} i mellom nummer <strong>$2</strong> og nummer <strong>$3</strong>.",
+ "search-showingresults": "Resultat <strong>{{PLURAL:$4|$1|$1–$2}}</strong> av <strong>$3</strong>",
"search-nonefound": "Ingen resultater passet til søket.",
"powersearch-legend": "Avansert søk",
"powersearch-ns": "Søk i navnerom:",
@@ -898,6 +916,11 @@
"prefs-personal": "Brukerdata",
"prefs-rc": "Siste endringer",
"prefs-watchlist": "Overvåkningsliste",
+ "prefs-editwatchlist": "Rediger overvåkningsliste",
+ "prefs-editwatchlist-label": "Rediger elementer på overvåkningslista di:",
+ "prefs-editwatchlist-edit": "Vis og fjern titler fra overvåkningslista di",
+ "prefs-editwatchlist-raw": "Rediger rå overvåkningsliste",
+ "prefs-editwatchlist-clear": "Slett overvåkningslista di",
"prefs-watchlist-days": "Dager som skal vises i overvåkningslisten:",
"prefs-watchlist-days-max": "Maksimalt $1 {{PLURAL:$1|dag|dager}}",
"prefs-watchlist-edits": "Antall redigeringer som skal vises i utvidet overvåkningsliste:",
@@ -952,7 +975,7 @@
"youremail": "E-post:",
"username": "{{GENDER:$1|Brukernavn}}:",
"prefs-memberingroups": "{{GENDER:$2|Medlem}} i følgende {{PLURAL:$1|gruppe|grupper}}:",
- "prefs-registration": "Registreringstid:",
+ "prefs-registration": "Registreringstidspunkt:",
"yourrealname": "Virkelig navn:",
"yourlanguage": "Språk:",
"yourvariant": "Språkvariant for innhold:",
@@ -967,7 +990,7 @@
"gender-female": "Hun redigerer wikisider",
"prefs-help-gender": "Det er valgfritt å angi dette.\nProgramvaren bruker verdien for å anvende riktig grammatikalsk kjønn ved henvendelser til deg og i omtale av deg for andre brukere.\nInformasjonen vil være offentlig.",
"email": "E-post",
- "prefs-help-realname": "* Virkelig navn (valgfritt): dersom du velger å oppgi navnet, vil det bli brukt til å kreditere deg for ditt arbeid.",
+ "prefs-help-realname": "Virkelig navn er valgfritt.\nDersom angitt, kan det komme til å bli brukt til å kreditere deg for ditt arbeid.",
"prefs-help-email": "Å angi e-postadresse er valgfritt, men er nødvendig for å få tilsendt nytt passord om du skulle glemme det gamle.",
"prefs-help-email-others": "Du kan også velge å la andre brukere kontakte deg via brukersiden din uten å røpe identiteten din.",
"prefs-help-email-required": "E-postadresse er påkrevd.",
@@ -988,6 +1011,7 @@
"prefs-tokenwatchlist": "Merke",
"prefs-diffs": "Forskjeller",
"prefs-help-prefershttps": "Denne preferansen vil virke etter neste innlogging.",
+ "prefswarning-warning": "Du har gjort endringer i dine innstillinger som ikke er lagret ennå.\nDersom du forlater denne siden utenk å klikke på \"$1\" blir ikke innstillingene dine oppdatert.",
"prefs-tabs-navigation-hint": "Tips: Du kan bruke venstre- og høyrepiltastene for å navigere mellom fanene i fanelisten",
"email-address-validity-valid": "E-postadressen ser gyldig ut",
"email-address-validity-invalid": "Skriv inn en gyldig e-postadresse",
@@ -1074,6 +1098,7 @@
"right-protect": "Endre beskyttelsesnivåer og redigere beskyttete sider",
"right-editprotected": "Redigere beskyttede sider som «{{int:protect-level-sysop}}»",
"right-editsemiprotected": "Redigere beskyttede sider som «{{int:protect-level-autoconfirmed}}»",
+ "right-editcontentmodel": "Rediger innholdsmodellen til en side",
"right-editinterface": "Redigere brukergrensesnittet",
"right-editusercssjs": "Redigere andre brukeres CSS- og JS-filer",
"right-editusercss": "Redigere andre brukeres CSS-filer",
@@ -1101,6 +1126,7 @@
"right-override-export-depth": "Eksporter sider inkludert lenkede sider til en dypde på 5",
"right-sendemail": "Send e-post til andre brukere",
"right-passwordreset": "Vis e-poster over tilbakestilte passord",
+ "right-managechangetags": "Opprette og slette [[Special:Tags|tagger]] fra databasen",
"newuserlogpage": "Brukeropprettelseslogg",
"newuserlogpagetext": "Dette er en logg over brukeropprettelser.",
"rightslog": "Brukerrettighetslogg",
@@ -1146,6 +1172,8 @@
"action-viewmywatchlist": "Vis din overvåkningsliste",
"action-viewmyprivateinfo": "vise din private informasjon",
"action-editmyprivateinfo": "rediger din private informasjon",
+ "action-editcontentmodel": "rediger innholdsmodellen til en side",
+ "action-managechangetags": "opprette og slette tagger fra databasen",
"nchanges": "$1 {{PLURAL:$1|endring|endringer}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|siden forrige besøk}}",
"enhancedrc-history": "historikk",
@@ -1158,9 +1186,9 @@
"recentchanges-label-minor": "Dette er en mindre endring",
"recentchanges-label-bot": "Denne redigeringen ble gjort av en bot",
"recentchanges-label-unpatrolled": "Denne redigeringen har ikke blitt patruljert ennå",
- "recentchanges-label-plusminus": "Sidestørrelsen er endra med dette antallet byte",
+ "recentchanges-label-plusminus": "Sidestørrelsen ble endret med dette antallet byte",
"recentchanges-legend-heading": "'''Tegnforklaring:'''",
- "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste av nye sider]])",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste over nye sider]])",
"recentchanges-legend-plusminus": "«(±123)»",
"rcnotefrom": "Nedenfor er vist {{PLURAL:$5|endringen|endringene}} som er gjort siden <strong>$3, $4</strong> (frem til <strong>$1</strong>).",
"rclistfrom": "Vis nye endringer fra og med $3 $2",
@@ -1210,15 +1238,15 @@
"reuploaddesc": "Avbryt opplasting og gå tilbake til opplastingsskjemaet",
"upload-tryagain": "Send inn endret filbeskrivelse",
"uploadnologin": "Ikke logget inn",
- "uploadnologintext": "Du må $1 for å laste opp filer.",
+ "uploadnologintext": "Du må $1 for å kunne laste opp filer.",
"upload_directory_missing": "Oppplastingsmappen ($1) mangler og kunne ikke opprettes av tjeneren.",
"upload_directory_read_only": "Opplastingsmappa ($1) er ikke skrivbar for tjeneren.",
"uploaderror": "Feil under opplasting av fil",
"upload-recreate-warning": "'''Advarsel: En fil med det navnet har blitt slettet eller flyttet.'''\n\nSlette- og flytteloggen for denne siden gjengis her:",
"uploadtext": "Bruk skjemaet nedenfor for å laste opp filer.\nFor å se eller søke i eksisterende filer, gå til [[Special:FileList|listen over filer]]. Opplastinger lagres også i [[Special:Log/upload|opplastingsloggen]] og slettinger i [[Special:Log/delete|sletteloggen]].\n\nFor å inkludere en fil på en side, bruk en slik lenke:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Filnavn.jpg]]</nowiki></code>''' for å bruke bildet i opprinnelig form\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Filnavn.png|200px|thumb|left|Alternativ tekst]]</nowiki></code>''' for å bruke bildet med en bredde på 200&nbsp;piksler, venstrestilt og med «Alternativ tekst» som beskrivelse\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Filnavn.ogg]]</nowiki></code>''' for å lenke direkte til filen uten å vise den",
- "upload-permitted": "Tillatte filtyper: $1.",
- "upload-preferred": "Foretrukne filtyper: $1",
- "upload-prohibited": "Forbudte filtyper: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tillatt filtype|Tillatte filtyper}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Foretrukket filtype|Foretrukne filtyper}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Forbudt filtype|Forbudte filtyper}}: $1.",
"uploadlogpage": "Opplastingslogg",
"uploadlogpagetext": "Her er en liste over de siste opplastede filene.\nSe [[Special:NewFiles|galleriet over nye filer]] for en mer visuell visning",
"filename": "Filnavn",
@@ -1476,7 +1504,6 @@
"statistics": "Statistikk",
"statistics-header-pages": "Sidestatistikk",
"statistics-header-edits": "Redigeringsstatistikk",
- "statistics-header-views": "Visningsstatistikk",
"statistics-header-users": "Brukerstatistikk",
"statistics-header-hooks": "Øvrig statistikk",
"statistics-articles": "Innholdssider",
@@ -1485,13 +1512,9 @@
"statistics-files": "Opplastede filer",
"statistics-edits": "Redigeringer siden {{SITENAME}} ble opprettet",
"statistics-edits-average": "Gjennomsnittlig antall redigeringer per side",
- "statistics-views-total": "Totalt antall visninger",
- "statistics-views-total-desc": "Visninger av ikke-eksisterende sider og spesielsider inkluderes ikke",
- "statistics-views-peredit": "Visninger per redigering",
"statistics-users": "Registrerte [[Special:ListUsers|brukere]]",
"statistics-users-active": "Aktive brukere",
"statistics-users-active-desc": "Brukere som har utført handlinger {{PLURAL:$1|det siste døgnet|de siste $1 dagene}}",
- "statistics-mostpopular": "Mest viste sider",
"pageswithprop": "Sider med sideverdi",
"pageswithprop-legend": "Sider med en sideverdi",
"pageswithprop-text": "Denne siden lister opp sider som bruker en viss sideverdi.",
@@ -1513,7 +1536,7 @@
"withoutinterwiki-legend": "Prefiks",
"withoutinterwiki-submit": "Vis",
"fewestrevisions": "Artikler med færrest revisjoner",
- "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+ "nbytes": "$1 {{PLURAL:$1|byte}}",
"ncategories": "$1 {{PLURAL:$1|kategori|kategorier}}",
"ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikier}}",
"nlinks": "$1 {{PLURAL:$1|lenke|lenker}}",
@@ -1532,9 +1555,9 @@
"uncategorizedtemplates": "Ukategoriserte maler",
"unusedcategories": "Ubrukte kategorier",
"unusedimages": "Ubrukte filer",
- "popularpages": "Populære sider",
"wantedcategories": "Ønskede kategorier",
"wantedpages": "Etterspurte sider",
+ "wantedpages-summary": "Liste av ikke-eksisterende sider med flest lenker mot dem, bortsett fra omdirigeringer. Den siste gruppen finnes gjennom [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Ugyldig tittel i resultatene: $1",
"wantedfiles": "Ønskede filer",
"wantedfiletext-cat": "Følgende filer refereres, men eksisterer ikke. Filer fra fremmede samlinger kan listes selv om de ikke finnes. Alle slik falske treff vil <del>strykes</del>. I tillegg er sider som har innebygde, ikke-eksisterende filer listet opp i [[:$1]].",
@@ -1594,9 +1617,11 @@
"pager-older-n": "{{PLURAL:$1|1 eldre|$1 eldre}}",
"suppress": "Historikkrydding",
"querypage-disabled": "Denne spesialsiden er deaktivert av ytelsesårsaker.",
+ "apihelp": "API hjelp",
+ "apihelp-no-such-module": "Modulen «$1» ikke funnet.",
"booksources": "Bokkilder",
"booksources-search-legend": "Søk etter bokkilder",
- "booksources-go": "Søk",
+ "booksources-search": "Søk",
"booksources-text": "Under er en liste over lenker til andre sider som selger nye og brukte bøker, og kan også ha videre informasjon om bøker du leter etter:",
"booksources-invalid-isbn": "Det gitte ISBN-nummeret er ugyldig; sjekk om du har angitt det riktig.",
"specialloguserlabel": "Utøver:",
@@ -1732,7 +1757,7 @@
"wlheader-enotif": "E-postvarsling er slått på.",
"wlheader-showupdated": "Sider som har blitt endret siden du besøkte dem sist vises med '''fet skrift'''.",
"wlnote": "Nedenfor er {{PLURAL:$1|den siste endringen|de siste <strong>$1</strong> endringene}} {{PLURAL:$2|den siste timen|de siste <strong>$2</strong> timene}}, per $3 kl. $4",
- "wlshowlast": "Vis siste $1 timer $2 dager $3",
+ "wlshowlast": "Vis siste $1 timer $2 dager",
"watchlist-options": "Alternativ for overvåkningslisten",
"watching": "Overvåker…",
"unwatching": "Fjerner fra overvåkningsliste…",
@@ -1762,7 +1787,7 @@
"exbeforeblank": "innholdet før siden ble tømt var: «$1»",
"delete-confirm": "Slett «$1»",
"delete-legend": "Slett",
- "historywarning": "<strong>Advarsel:</strong> Siden du er i ferd med å slete har en historikk med $1 {{PLURAL:$1|revisjon|revisjoner}}:",
+ "historywarning": "<strong>Advarsel:</strong> Siden du er i ferd med å slette har en historikk med $1 {{PLURAL:$1|revisjon|revisjoner}}:",
"confirmdeletetext": "Du holder på å slette en side sammen med historikken.\nBekreft at du virkelig vil slette denne siden, at du forstår konsekvensene og at du gjør det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinjene]].",
"actioncomplete": "Gjennomført",
"actionfailed": "Handling mislyktes",
@@ -1781,7 +1806,6 @@
"deleteprotected": "Du kan ikke slette denne siden fordi den er beskyttet.",
"deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] lenker til eller inkluderer siden du er i ferd med å slette.",
"rollback": "Fjern redigeringer",
- "rollback_short": "Tilbakestill",
"rollbacklink": "tilbakestill",
"rollbacklinkcount": "tilbakestill {{PLURAL:$1|én endring|$1 endringer}}",
"rollbacklinkcount-morethan": "tilbakestill mer enn $1 {{PLURAL:$1|endring|endringer}}",
@@ -1831,6 +1855,7 @@
"protect-othertime": "Annen tid:",
"protect-othertime-op": "annen tid",
"protect-existing-expiry": "Gjeldende utløpstid: $3 $2",
+ "protect-existing-expiry-infinity": "Gjeldende utløpstid: uendelig",
"protect-otherreason": "Annen/utdypende grunn:",
"protect-otherreason-op": "Annen grunn",
"protect-dropdown": "*Vanlige låsingsårsaker\n** Gjentatt hærverk\n** Gjentatt spam\n** Redigeringskrig\n** Side med mange besøkende",
@@ -1890,6 +1915,7 @@
"namespace": "Navnerom:",
"invert": "Inverter valg",
"tooltip-invert": "Kryss av denne boksen for å skjule endringer på sider i det valgte navnerommet (og tilhørende navnerom hvis de er avkrysset også)",
+ "tooltip-whatlinkshere-invert": "Merk av denne boksen for å skjule lenker fra sider i valgte navnerom.",
"namespace_association": "Tilknyttet navnerom",
"tooltip-namespace_association": "Kryss av denne boksen for å også inkludere diskusjons- eller emnenavnerommet som er tilknyttet det valgte navnerommet",
"blanknamespace": "(Hoved)",
@@ -1975,6 +2001,7 @@
"unblocked": "[[User:$1|$1]] ble avblokkert",
"unblocked-range": "$1 har fått løftet blokkeringen",
"unblocked-id": "Blokkering $1 ble fjernet",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] har blitt avblokkert.",
"blocklist": "Blokkerte brukere",
"ipblocklist": "Blokkerte IP-adresser og brukernavn",
"ipblocklist-legend": "Finn en blokkert bruker",
@@ -2005,7 +2032,7 @@
"change-blocklink": "endre blokkering",
"contribslink": "bidrag",
"emaillink": "send e-post",
- "autoblocker": "Du ble automatisk blokkert fordi din IP-adresse nylig ble brukt av «[[User:$1|$1]]». Grunnen som ble gitt til at «$1» ble blokkert var: «$2».",
+ "autoblocker": "Du ble automatisk blokkert fordi IP-adressen din nylig ble brukt av «[[User:$1|$1]]». Grunnen som ble gitt til at «$1» ble blokkert var: «$2».",
"blocklogpage": "Blokkeringslogg",
"blocklog-showlog": "Denne brukeren har blitt blokkert før.\nBlokkeringsloggen vises nedenfor.",
"blocklog-showsuppresslog": "Denne brukeren har tidligere blitt blokkert og skjult.\nSkjulingsloggen vises nedenfor.",
@@ -2034,7 +2061,7 @@
"ip_range_toolarge": "Blokkering av IP-serier større enn /$1 er ikke tillatt.",
"proxyblocker": "Proxyblokker",
"proxyblockreason": "IP-adressen din ble blokkert fordi den er en åpen proxy. Kontakt internettleverandøren din eller teknisk støtte og informer dem om dette alvorlige sikkerhetsproblemet.",
- "sorbsreason": "Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}.",
+ "sorbsreason": "IP-adressen din er listet som en åpen proxy i DNSBL-en brukt av {{SITENAME}}.",
"sorbs_create_account_reason": "Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}. Du kan ikke opprette en konto",
"xffblockreason": "En IP-adresse som er tilstede i X-Forwarded-For-headeren, enten din eller en som tilhører en proxyserver du bruker, har blitt blokkert. Den opprinnelige blokkeringsgrunnen var: $1",
"cant-see-hidden-user": "Brukeren du prøver å blokkere har allerede blitt blokkert og skjult. Ettersom du ikke har rett til å skjule brukere (hideuser), kan du ikke se eller endre brukerens blokkering.",
@@ -2153,14 +2180,15 @@
"thumbnail-temp-create": "Kan ikke opprette midlertidig miniatyrbildefil",
"thumbnail-dest-create": "Kan ikke lagre miniatyrbilde til målbanen",
"thumbnail_invalid_params": "Ugyldige miniatyrparametere, eller PNG-fil med flere piksler enn 12,5 millioner.",
+ "thumbnail_toobigimagearea": "Fil med dimensjoner større enn $1",
"thumbnail_dest_directory": "Klarte ikke å opprette målmappe",
"thumbnail_image-type": "Bildetypen støttes ikke",
"thumbnail_gd-library": "Ufullstendig konfigurering av GD library: mangler funksjonen $1",
"thumbnail_image-missing": "Filen ser ut til å mangle: $1",
"thumbnail_image-failure-limit": "Det har vært for mange nylige forsøk ($1 eller flere) på å gjengi dette miniatyrbildet. Vennligst prøv igjen senere.",
"import": "Importer sider",
- "importinterwiki": "Transwiki-importering",
- "import-interwiki-text": "Velg en wiki og en side å importere. Revisjonsdatoer og bidragsyteres navn blir bevart. Alle transwiki-importeringer listes i [[Special:Log/import|importloggen]].",
+ "importinterwiki": "Importere fra en annen wiki",
+ "import-interwiki-text": "Velg en wiki og en side å importere.\nRevisjonsdatoer og bidragsyteres navn blir bevart. Alle transwiki-importeringer listes i [[Special:Log/import|importloggen]].",
"import-interwiki-sourcewiki": "Kildewiki:",
"import-interwiki-sourcepage": "Kildeside:",
"import-interwiki-history": "Kopier all historikk for denne siden",
@@ -2204,18 +2232,15 @@
"import-rootpage-nosubpage": "Navnerommet \"$1\" til grunnsiden tillater ikke undersider.",
"importlogpage": "Importlogg",
"importlogpagetext": "Administrativ import av sider med redigeringshistorikk fra andre wikier.",
- "import-logentry-upload": "importerte [[$1]] ved opplasting",
"import-logentry-upload-detail": "{{PLURAL:$1|\\Én revisjon|$1 revisjoner}} er importert",
- "import-logentry-interwiki": "transwikiimporterte $1",
"import-logentry-interwiki-detail": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} er importert fra $2",
"javascripttest": "JavaScript-testing",
- "javascripttest-title": "Kjører $1 tester",
"javascripttest-pagetext-noframework": "Denne siden er reservert for å kjøre JavaScript-tester.",
"javascripttest-pagetext-unknownframework": "Ukjent testerammeverk \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Ukjent handling «$1».",
"javascripttest-pagetext-frameworks": "Vennligst velg en av følgende testerammeverk: $1",
"javascripttest-pagetext-skins": "Velg et utseende for testene:",
"javascripttest-qunit-intro": "Se [$1 testedokumentasjonen] på mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit testsuite",
"tooltip-pt-userpage": "Din brukerside",
"tooltip-pt-anonuserpage": "Brukersiden for IP-adressen du redigerer fra",
"tooltip-pt-mytalk": "Din diskusjonsside",
@@ -2225,6 +2250,7 @@
"tooltip-pt-mycontris": "Liste over dine bidrag",
"tooltip-pt-login": "Du oppfordres til å logge inn, men det er ikke obligatorisk",
"tooltip-pt-logout": "Logg ut",
+ "tooltip-pt-createaccount": "Du oppfordres til å opprette en konto og logge inn, men det er ikke obligatorisk.",
"tooltip-ca-talk": "Diskusjon om innholdssiden",
"tooltip-ca-edit": "Du kan redigere denne siden. Vennligst bruk forhåndsvisningsknappen før du lagrer.",
"tooltip-ca-addsection": "Start et nytt avsnitt",
@@ -2240,7 +2266,7 @@
"tooltip-search": "Søk i {{SITENAME}}",
"tooltip-search-go": "Gå til en side med dette navnet om den finnes",
"tooltip-search-fulltext": "Søk etter sider som innholder denne teksten",
- "tooltip-p-logo": "Hovedside",
+ "tooltip-p-logo": "Gå til hovedsiden",
"tooltip-n-mainpage": "Gå til hovedsiden",
"tooltip-n-mainpage-description": "Gå til hovedsiden",
"tooltip-n-portal": "Om prosjektet, hva du kan gjøre, hvor du kan finne ting",
@@ -2254,6 +2280,7 @@
"tooltip-feed-atom": "Atom-mating for denne siden",
"tooltip-t-contributions": "Vis liste over bidrag fra denne brukeren",
"tooltip-t-emailuser": "Send en e-post til denne brukeren",
+ "tooltip-t-info": "Mer informasjon om denne siden",
"tooltip-t-upload": "Last opp filer",
"tooltip-t-specialpages": "Liste over alle spesialsider",
"tooltip-t-print": "Utskriftsvennlig versjon av denne siden",
@@ -2318,7 +2345,6 @@
"pageinfo-robot-policy": "Bot-indeksering",
"pageinfo-robot-index": "Tillatt",
"pageinfo-robot-noindex": "Ikke tillatt",
- "pageinfo-views": "Antall visninger",
"pageinfo-watchers": "Antall overvåkere av siden",
"pageinfo-few-watchers": "Færre enn $1 {{PLURAL:$1|overvåker|overvåkere}}",
"pageinfo-redirects-name": "Antall omdirigeringer til denne siden",
@@ -2768,7 +2794,6 @@
"exif-urgency-low": "Lav ($1)",
"exif-urgency-high": "Høy ($1)",
"exif-urgency-other": "Brukerdefinert prioritet ($1)",
- "watchlistall2": "alle",
"namespacesall": "alle",
"monthsall": "alle",
"confirmemail": "Bekreft e-postadresse",
@@ -2883,9 +2908,9 @@
"hebrew-calendar-m11-gen": "Ab",
"hebrew-calendar-m12-gen": "Elúl",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusjon]])",
- "unknown_extension_tag": "Ukjent tilleggsmerking «$1»",
"duplicate-defaultsort": "Advarsel: Standardsorteringen «$2» tar over for den tidligere sorteringen «$1».",
"duplicate-displaytitle": "<strong>Advarsel:</strong> Visningstittel \"$2\" erstatter tidligere visningstittel \"$1\".",
+ "invalid-indicator-name": "<p>Feil:</strong> Sidestatus-indikatornes <code>navn</code>-attributt kan ikke være tomt.",
"version": "Versjon",
"version-extensions": "Installerte utvidelser",
"version-skins": "Installerte drakter",
@@ -2900,7 +2925,7 @@
"version-parser-function-hooks": "Parserfunksjoner",
"version-hook-name": "Navn",
"version-hook-subscribedby": "Brukes av",
- "version-version": "(versjon $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[uten navn]",
"version-license": "Lisens",
"version-ext-license": "Lisens",
@@ -2925,6 +2950,9 @@
"version-entrypoints": "Inngangspunkts-URL-er",
"version-entrypoints-header-entrypoint": "Inngangspunkt",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Installerte biblioteker",
+ "version-libraries-library": "Bibliotek",
+ "version-libraries-version": "Versjon",
"redirect": "Omdiriger via filnavn, bruker eller versjonsid",
"redirect-legend": "Omdiriger til en fil eller side",
"redirect-summary": "Denne spesialsiden omdirigerer til en fil (hvis et filnavn angis), en side (hvis et redigeringsnummer angis) eller en brukerside (hvis en numerisk brukeridentifikator angis).\nEksempler:[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
@@ -2960,6 +2988,7 @@
"specialpages-group-wiki": "Data og verktøy",
"specialpages-group-redirects": "Omdirigerende spesialsider",
"specialpages-group-spam": "Spamverktøy",
+ "specialpages-group-developer": "Utviklerverktøy",
"blankpage": "Tom side",
"intentionallyblankpage": "Denne siden er tom med vilje",
"external_image_whitelist": "#La denne linja være som den er<pre>\n#Skriv fragmenter av regulære uttrykk (delen som går mellom //) nedenfor\n#Disse vil sjekkes mot adresser til bilder fra eksterne sider\n#De som blir godkjent vil vises, ellers vil det gis en lenke til bildet\n#Linjer som begynner med # anses som kommentarer\n#Det skilles ikke mellom store og små bokstaver\n\n#Skriv alle fragmenter av regulære uttrykk over denne lina. La denne linja være som den er</pre>",
@@ -2972,12 +3001,54 @@
"tags-tag": "Taggnavn",
"tags-display-header": "Utseende på endringslister",
"tags-description-header": "Fullstendig betydning",
+ "tags-source-header": "Kilde",
"tags-active-header": "Aktive?",
"tags-hitcount-header": "Taggede endringer",
+ "tags-actions-header": "Handlinger",
"tags-active-yes": "Ja",
"tags-active-no": "Nei",
+ "tags-source-extension": "Definert av en utvidelse",
+ "tags-source-manual": "Brukes manuelt av brukere og roboter",
+ "tags-source-none": "Brukes ikke lenger",
"tags-edit": "rediger",
+ "tags-delete": "slett",
+ "tags-activate": "aktiver",
+ "tags-deactivate": "deaktiver",
"tags-hitcount": "{{PLURAL:$1|én endring|$1 endringer}}",
+ "tags-manage-no-permission": "Du har ikke tillatelse til å behandle tagger.",
+ "tags-create-heading": "Opprett ny tagg",
+ "tags-create-explanation": "Som standard vil nyopprettede tagger være tilgjengelige for brukere og roboter.",
+ "tags-create-tag-name": "Taggnavn:",
+ "tags-create-reason": "Årsak:",
+ "tags-create-submit": "Opprett",
+ "tags-create-no-name": "Du må oppgi et taggnavn.",
+ "tags-create-invalid-chars": "Taggnavn kan ikke inneholde kommaer (<code>,</code>) eller skråstreker (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Taggnavn kan ikke inneholde tegn som ikke kan brukes i sidetitler.",
+ "tags-create-already-exists": "Taggen «$1» finnes fra før.",
+ "tags-create-warnings-above": "Vi fikk følgende {{PLURAL:$2|advarsel|advarsler}} da vi prøvde å opprette taggen «$1»:",
+ "tags-create-warnings-below": "Ønsker du å fortsette å opprette taggen?",
+ "tags-delete-title": "Slett tagen",
+ "tags-delete-explanation-initial": "Du er i ferd med å slette taggen «$1» fra databasen.",
+ "tags-delete-explanation-in-use": "Den vil bli fjernet fra {{PLURAL:$2|$2 revisjon eller loggoppføring|alle $2 revisjoner og/eller loggoppføringer}} der den er i bruk.",
+ "tags-delete-explanation-warning": "Derne handlingen <strong>kan ikke gjøres om</strong>, ikke engang av administratorer. Vær helt sikker på at dette er taggen du mente å slette.",
+ "tags-delete-explanation-active": "<strong>Taggen «$1» er fortsatt aktiv, og vil fortsatt bli brukt i framtiden.</strong> For å hindre dette fra å skje, gå til stedet/stedene der taggen er satt til å brukes, og slå den av derfra.",
+ "tags-delete-reason": "Årsak:",
+ "tags-delete-submit": "Slett denne taggen",
+ "tags-delete-not-allowed": "Tagger definert av utvidelser kan ikke slettes med mindre utvidelsen tillater det.",
+ "tags-delete-not-found": "Taggen «$1» finnes ikke.",
+ "tags-delete-too-many-uses": "Taggen «$1» brukes på mer enn $2 {{PLURAL:$2|revisjon|revisjoner}}, hvilket betyr at den ikke kan slettes.",
+ "tags-delete-warnings-after-delete": "Taggen «$1» ble slettet, men følgende {{PLURAL:$2|advarsel|advarsler}} dukket opp:",
+ "tags-activate-title": "Aktiver taggen",
+ "tags-activate-question": "Du er i ferd med å aktivere taggen «$1».",
+ "tags-activate-reason": "Årsak:",
+ "tags-activate-not-allowed": "Det er ikke mulig å aktivere taggen «$1».",
+ "tags-activate-not-found": "Taggen «$1» finnes ikke.",
+ "tags-activate-submit": "Aktiver",
+ "tags-deactivate-title": "Deaktiver taggen",
+ "tags-deactivate-question": "Du er i ferd med å deaktivere taggen «$1».",
+ "tags-deactivate-reason": "Årsak:",
+ "tags-deactivate-not-allowed": "Det er ikke mulig å deaktivere taggen «$1».",
+ "tags-deactivate-submit": "Deaktiver",
"comparepages": "Sammenlign sider",
"compare-page1": "Side 1",
"compare-page2": "Side 2",
@@ -3031,6 +3102,13 @@
"revdelete-uname-unhid": "brukernavn synlig",
"revdelete-restricted": "begrensninger gjelder også administratorer",
"revdelete-unrestricted": "fjernet begrensninger for administratorer",
+ "logentry-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} med en utløpstid på $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|opphevet blokkeringen av}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingen av {{GENDER:$4|$3}} 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",
+ "logentry-merge-merge": "$1 {{GENDER:$2|slo sammen}} $3 i $4 (versjonene t.o.m. $5)",
"logentry-move-move": "$1 {{GENDER:$2|flyttet}} siden $3 til $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|flyttet}} siden $3 til $4 uten å etterlate en omdirigering",
"logentry-move-move_redir": "$1 {{GENDER:$2|flyttet}} siden $3 til $4 over en omdirigering",
@@ -3048,20 +3126,33 @@
"logentry-upload-upload": "$1 {{GENDER:$2|lastet opp}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|lastet opp}} en ny versjon av $3",
"logentry-upload-revert": "$1 {{GENDER:$2|lastet opp}} $3",
+ "log-name-managetags": "Taggbehandlingslogg",
+ "log-description-managetags": "Denne siden lister opp behandlingsoppgaver i forbindelse med [[Special:Tags|tagger]]. Loggen inneholder bare handlinger som er blitt gjort manuelt av en administrator; tagger kan opprettes eller slettes av programvaren uten at det kommer et oppslag i denne loggen.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|opprettet}} taggen «$4»",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|slettet}} taggen «$4» (fjernet fra $5 {{PLURAL:$5|revisjon eller loggoppføring|revisjoner og/eller loggoppføringer}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|aktiverte}} taggen «$4» for bruke av brukere og roboter",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|deaktiverte}} taggen «$4» for bruk av brukere og roboter",
"rightsnone": "(ingen)",
+ "revdelete-summary": "redigeringssammendrag",
+ "feedback-adding": "Tilføyer tilbakmelding til side ...",
+ "feedback-back": "Tilbake",
+ "feedback-bugcheck": "Suprert! Bare sjekk at den ikke er en av de [$1 kjente feilene]",
+ "feedback-bugnew": "Jeg sjekket. Rapporter en ny bug.",
"feedback-bugornote": "Hvis du er klar til å sende inn en detaljert feilrapport, vennligst [$1 rapporter en feil].\nOm det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. Kommentaren din vil bli lagt til siden \"[$3 $2]\", sammen med brukernavnet ditt og informasjon om hvilken nettleser du bruker.",
- "feedback-subject": "Emne:",
- "feedback-message": "Melding:",
"feedback-cancel": "Avbryt",
- "feedback-submit": "Send tilbakemelding",
- "feedback-adding": "Tilføyer tilbakmelding til side ...",
+ "feedback-close": "Utført",
+ "feedback-external-bug-report-button": "Registrer en teknisk sak",
+ "feedback-dialog-title": "Send tilbakemelding",
+ "feedback-error-title": "Feil",
"feedback-error1": "Feil: Ukjent resultat fra API",
"feedback-error2": "Feil: Redigering feilet",
"feedback-error3": "Feil: Ingen respons fra API",
+ "feedback-message": "Melding:",
+ "feedback-subject": "Emne:",
+ "feedback-submit": "Send",
"feedback-thanks": "Din tilbakemelding til siden \"[ $2 $1 ]\" er sendt. Takk skal du ha!",
- "feedback-close": "Utført",
- "feedback-bugcheck": "Suprert! Bare sjekk at den ikke er en av de [$1 kjente feilene]",
- "feedback-bugnew": "Jeg sjekket. Rapporter en ny bug.",
+ "feedback-thanks-title": "Takk!",
+ "feedback-useragent": "Brukeragent",
"searchsuggest-search": "Søk",
"searchsuggest-containing": "inneholder …",
"api-error-badaccess-groups": "Du har ikke tillatelse til å laste opp filer til denne wikien.",
@@ -3097,6 +3188,13 @@
"api-error-stashfailed": "Internal error: tjeneren greide ikke å lagre midlertidig fil.",
"api-error-publishfailed": "Intern feil: Tjeneren greide ikke å publisere midlertidig fil.",
"api-error-stasherror": "Det oppstod en feil mens filen ble lastet opp til stash.",
+ "api-error-stashedfilenotfound": "Den temporære filen ble ikke funnet ved forsøk på å laste den opp fra lageret.",
+ "api-error-stashpathinvalid": "Stien som den temporære filen skulle vært funnet via var ugyldig.",
+ "api-error-stashfilestorage": "Det oppsto en feil når filen skulle lastes opp til lageret.",
+ "api-error-stashzerolength": "Tjenermaskinen kunne i lagre den temporære filen fordi den hadde null lengde.",
+ "api-error-stashnotloggedin": "Du må være innlogget for å lagre filene i opplastingslageret.",
+ "api-error-stashwrongowner": "Filen du prøvde å få tilgang til tilhører ikke deg.",
+ "api-error-stashnosuchfilekey": "Filnøkkelen du prøvde å få tilgang til finnes ikke.",
"api-error-timeout": "Serveren svarte ikke innenfor forventet tid.",
"api-error-unclassified": "En ukjent feil har oppstått",
"api-error-unknown-code": "Ukjent feil: \"$1\"",
@@ -3141,6 +3239,8 @@
"expand_templates_generate_xml": "Vis parsetre som XML",
"expand_templates_generate_rawhtml": "Vis ubehandlet HTML",
"expand_templates_preview": "Forhåndsvisning",
+ "expand_templates_preview_fail_html": "<em>Fordi {{SITENAME}} har slått på rå HTML og sesjonsdata ble tapt er forhåndsvisningen skjult for å beskytte mot JavaScript-angrep.</em>\n\n<strong>Om dette er et legitimt forsøk på å forhåndsvise, prøv igjen.</strong> Om det fortsatt ikke fungerer, prøv å [[Special:UserLogout|logge ut]] og logge inn igjen.",
+ "expand_templates_preview_fail_html_anon": "<em>Fordi {{SITENAME}} har slått på rå HTML og du ikke er logget inn er forhåndsvisningen skjult for å beskytte mot JavaScript-angrep.</em>\n\n<strong>Om dette er et legitimt forsøk på å forhåndsvise, [[Special:UserLogin|logg inn]] og prøv igjen.</strong>",
"pagelanguage": "Valg av sidespråk",
"pagelang-name": "Side",
"pagelang-language": "Språk",
@@ -3151,7 +3251,58 @@
"log-name-pagelang": "Endre språklogg",
"log-description-pagelang": "Dette er en logg som viser endringer i sidespråk",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|endret}} sidespråk for $3 fra $4 til $5.",
- "default-skin-not-found": "Ops! Standarddrakten for wikien din (<code>$wgDefaultSkin</code>), <code>$1</code>, er ikke tilgjengelig.\n\nInstallasjonen din ser ut til å inneholde følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du kan slå disse på eller heller velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org sin draktbase] ved å\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* klone en av <code>mediawiki/skins/*</code>-lagrene via git inn i <code>skins/</code> -mappen av din MediaWiki-installasjon.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger på automatisk installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Du kan lime inn følgende linjer i <code>LocalSettings.php</code> for å slå på alle installerte drakter:\n\n<pre>$3</pre>\n\n; Om du nettopp har endret <code>LocalSettings.php</code>:\n: Dobbelsjekk draktnavnene for skrivefeil.",
+ "default-skin-not-found": "Ops! Standarddrakten for wikien din, definert i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, er ikke tilgjengelig.\n\nInstallasjonen din ser ut til å inneholde følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du kan slå disse på eller heller velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org sin draktbase] ved å\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* laste ned individuelle drakter fra [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* klone en av <code>mediawiki/skins/*</code>-lagrene via git inn i <code>skins/</code> -mappen av din MediaWiki-installasjon.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger på automatisk installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Du kan lime inn følgende linjer i <code>LocalSettings.php</code> for å slå på alle installerte drakter:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du nettopp har endret <code>LocalSettings.php</code>:\n: Dobbelsjekk draktnavnene for skrivefeil.",
+ "default-skin-not-found-no-skins": "Ops! Standarddrakten for wikien din, definert i <code>$wgDefaultSkin</code> som <code>$1</code>, er ikke tilgjengelig.\n\nDu har ingen installerte drakter.\n\n;Om du nettopp har installert eller oppgradert MediaWiki:\n: Du installerte trolig fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. MediaWiki 1.24 og nyere inkluderer ingen drakter i hovedarkivet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgs draktmappe], ved å:\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med mange drakter og tillegg. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* laste ned individuelle drakt-tarballer fra [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* klone en av <code>mediawiki/skins/*</code>-arkivene via git til <code dir=\"ltr\">skins/</code>-mappa i din MediaWiki-installasjon.\n: Å gjøre dette vil ikke forstyrre ditt git-arkiv om du er en MediaWiki-utvikler. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] for informasjon om hvordan du slår på drakter og velger en standarddrakt.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (slått på)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''slått av''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''slått av''')",
+ "mediastatistics": "Mediestatistikk",
+ "mediastatistics-summary": "Statistikk over opplastede filtyper. Dette inkluderer bare den nyeste versjonen av hver fil. Eldre eller slettede versjoner av filene er eksludert.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3 %)",
+ "mediastatistics-table-mimetype": "MIME-type",
+ "mediastatistics-table-extensions": "Mulige filtyper",
+ "mediastatistics-table-count": "Antall filer",
+ "mediastatistics-table-totalbytes": "Kombinert størrelse",
+ "mediastatistics-header-unknown": "Ukjent",
+ "mediastatistics-header-bitmap": "Bitmap-bilder",
+ "mediastatistics-header-drawing": "Tegninger (vektor-bilder)",
+ "mediastatistics-header-audio": "Lyd",
+ "mediastatistics-header-video": "Videoer",
+ "mediastatistics-header-multimedia": "Rikt media",
+ "mediastatistics-header-office": "Kontor",
+ "mediastatistics-header-text": "Tekstlig",
+ "mediastatistics-header-executable": "Kjørbare filer",
+ "mediastatistics-header-archive": "Komprimerte formater",
+ "json-warn-trailing-comma": "$1 etterfølgende {{PLURAL:$1|komma|kommaer}} ble fjernet fra JSON",
+ "json-error-unknown": "Det var et problem med JSON. Feil: $1",
+ "json-error-depth": "Maksimal stakkdybde har blitt overskredet",
+ "json-error-state-mismatch": "Ugyldig JSON",
+ "json-error-ctrl-char": "Kontrolltegnfeil, muligens feilaktig kodet",
+ "json-error-syntax": "Syntaksfeil",
+ "json-error-utf8": "Feilaktige UTF-8-tegn, muligens feilkodet",
+ "json-error-recursion": "En eller flere rekursive referanser i verdien som skal kodes",
+ "json-error-inf-or-nan": "En eller flere NAN- eller INF-verdier i verdien som skal kodes",
+ "json-error-unsupported-type": "En verdi av en type som ikke kan kodes ble angitt",
+ "headline-anchor-title": "Lenke til denne seksjonen",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Utvidet Latin",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symboler",
+ "special-characters-group-greek": "Gresk",
+ "special-characters-group-cyrillic": "Kyrillisk",
+ "special-characters-group-arabic": "Arabisk",
+ "special-characters-group-arabicextended": "Utvidet arabisk",
+ "special-characters-group-persian": "Persisk",
+ "special-characters-group-hebrew": "Hebraisk",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-tamil": "Tamilsk",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalesisk",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Laotisk",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "tankestrek",
+ "special-characters-title-emdash": "lang tankestrek",
+ "special-characters-title-minus": "minustegn"
}
diff --git a/languages/i18n/nds-nl.json b/languages/i18n/nds-nl.json
index 63be8615..f54cc789 100644
--- a/languages/i18n/nds-nl.json
+++ b/languages/i18n/nds-nl.json
@@ -15,7 +15,8 @@
"Ævar Arnfjörð Bjarmason <avarab@gmail.com>",
"לערי ריינהארט",
"아라",
- "Kolega2357"
+ "Kolega2357",
+ "Macofe"
]
},
"tog-underline": "Verwiezingen onderstrepen",
@@ -32,6 +33,7 @@
"tog-watchdefault": "Spul wa'k bewarke op mien volglieste zetten",
"tog-watchmoves": "Spul wa'k herneume op mien volglieste zetten",
"tog-watchdeletion": "Spul wa'k vortdo op mien volglieste zetten",
+ "tog-watchrollback": "Ziejen waorvan ik bewarkingen weerummedreid hebbe automaties volgen",
"tog-minordefault": "Markeer alle veraanderingen as 'kleine wieziging'",
"tog-previewontop": "De naokiekzied boven t bewarkingsveld zetten",
"tog-previewonfirst": "Naokieken bie eerste wieziging",
@@ -42,7 +44,7 @@
"tog-shownumberswatching": "t Antal gebrukers bekieken die disse zied volgt",
"tog-oldsig": "Bestaonde haandtekening:",
"tog-fancysig": "Ondertekening zien as wikitekste (zonder automatiese verwiezing)",
- "tog-uselivepreview": "Gebruuk \"rechtstreeks naokieken\" (experimenteel)",
+ "tog-uselivepreview": "Gebruuk \"rechtstreeks naokieken\"",
"tog-forceeditsummary": "Geef n melding bie n lege samenvatting",
"tog-watchlisthideown": "Verbarg mien eigen bewarkingen",
"tog-watchlisthidebots": "Verbarg botgebrukers",
@@ -182,7 +184,9 @@
"view": "Lezen",
"view-foreign": "Bekieken op $1",
"edit": "Bewarken",
+ "edit-local": "Lokale beschrieving bewarken",
"create": "Anmaken",
+ "create-local": "Lokale beschrieving derbie doon",
"editthispage": "Disse zied bewarken",
"create-this-page": "Disse zied anmaken",
"delete": "Vortdoon",
@@ -215,6 +219,7 @@
"otherlanguages": "Aandere talen",
"redirectedfrom": "(deurestuurd vanaof \"$1\")",
"redirectpagesub": "Deurverwieszied",
+ "redirectto": "Deurverwiezen naor:",
"lastmodifiedat": "Disse zied is t lest ewiezigd op $1 um $2.",
"viewcount": "Disse zied is $1 {{PLURAL:$1|keer|keer}} bekeken.",
"protectedpage": "Beveiligden zied",
@@ -222,9 +227,11 @@
"jumptonavigation": "navigasie",
"jumptosearch": "zeuk",
"view-pool-error": "De servers bin op heden overbelast.\nTe veule gebrukers proberen disse zied te bekieken.\nWacht effen veurda'j opniej toegang proberen te kriegen tot disse zied.\n\n$1",
+ "generic-pool-error": "De servers bin op heden overbelast.\nTe veule gebrukers proberen disse zied te bekieken.\nWacht effen veurda'j opniej toegang proberen te kriegen tot disse zied.",
"pool-timeout": "De maximumwachttied veur databankvergrendeling is verleupen.",
"pool-queuefull": "De wachtrie van de poel is vol",
"pool-errorunknown": "Onbekende fout",
+ "pool-servererror": "De dienst \"pool counter\" is niet beschikbaor ($1).",
"aboutsite": "Over {{SITENAME}}",
"aboutpage": "Project:Info",
"copyright": "De inhoud is beschikbaor onder de $1 as der niks aanders an-egeven is.",
@@ -260,7 +267,7 @@
"editlink": "bewark",
"viewsourcelink": "brontekste bekieken",
"editsectionhint": "Bewarkingsveld: $1",
- "toc": "Kömp an bod",
+ "toc": "Inhold",
"showtoc": "Bekieken",
"hidetoc": "Verbarg",
"collapsible-collapse": "Inklappen",
@@ -316,13 +323,15 @@
"filerenameerror": "Bestaandsnaamwieziging \"$1\" naor \"$2\" niet meugelik.",
"filedeleteerror": "Kon bestaand \"$1\" niet vortdoon.",
"directorycreateerror": "Map \"$1\" kon niet an-emaakt wörden.",
+ "directoryreadonlyerror": "De map \"$1\" is allinnig-lezen.",
+ "directorynotreadableerror": "De map \"$1\" kan niet elezen wörden.",
"filenotfound": "Kon bestaand \"$1\" niet vienen.",
"unexpected": "Onverwachten weerde: \"$1\"=\"$2\".",
"formerror": "Fout: kon formulier niet versturen",
"badarticleerror": "Disse haandeling kan op disse zied niet uutevoerd wörden.",
"cannotdelete": "De zied of t bestaand \"$1\" kon niet vortedaon wörden.\nt Kan ween dat n aander t al vortedaon hef.",
"cannotdelete-title": "Zied \"$1\" kan niet vortedaon wörden",
- "delete-hook-aborted": "t Vortdoon wörden in t wiere eschopt deur n MediaWiki-programmatuuruutbreiding.\nDer is gien veerdere informasie beschikbaor.",
+ "delete-hook-aborted": "t Vortdoon wördt in t wiere eschopt deur n toepassige van MediaWiki.\nDer is gien veerdere informasie beschikbaor.",
"no-null-revision": "Kon gien lege nieje versie maken veur de zied \"$1\"",
"badtitle": "Ongeldige naam",
"badtitletext": "De naam van de op-evreugen zied is niet geldig, leeg, of n interwiki-verwiezing naor n onbekende of ongeldige wiki.",
@@ -336,8 +345,8 @@
"protectedpagetext": "Disse zied is beveiligd. Bewarken of aandere haandelingen bin niet meugelik.",
"viewsourcetext": "Je kunnen de brontekste van disse zied bewarken en bekieken:",
"viewyourtext": "Je kunnen '''joew bewarkingen''' an de brontekste van disse zied bekieken en kopiëren:",
- "protectedinterface": "Op disse zied steet tekste die gebruukt wörden veur systeemteksten van disse wiki. Allinnig beheerders kunnen disse zied bewarken.\nUm vertalingen veur alle wiki's derbie te zetten of te wiezigen, gebruuk [//translatewiki.net/ translatewiki.net], t vertaalprojekt veur MediaWiki.",
- "editinginterface": "'''Waorschuwing:''' je bewarken n zied die gebruukt wörden deur de programmatuur. Wa'j hier wiezigen, is van invleud op de hele wiki. Um vertalingen derbie te zetten of te wiezigen veur alle wiki's, gebruuk [//translatewiki.net/wiki/Main_Page?setlang=nds-nl translatewiki.net], t vertalingsprojekt veur MediaWiki.",
+ "protectedinterface": "Op disse zied steet tekste die gebruukt wördt veur systeemteksten van disse wiki. Allinnig beheerders kunnen disse zied bewarken.\nUm vertalingen veur alle wiki's derbie te zetten of te wiezigen, gebruuk [//translatewiki.net/ translatewiki.net], t vertaalprojekt veur MediaWiki.",
+ "editinginterface": "<strong>Waorschuwing:</strong> je bewarken n zied die gebruukt wörden deur de programmatuur. Wa'j hier wiezigen, is van invleud op de hele wiki. Um vertalingen derbie te zetten of te wiezigen veur alle wiki's, gebruuk [//translatewiki.net/wiki/Main_Page?setlang=nds-nl translatewiki.net], t vertalingsprojekt veur MediaWiki.",
"cascadeprotected": "Disse zied is beveiligd umdat t veurkömp in de volgende {{PLURAL:$1|zied|ziejen}}, die beveiligd {{PLURAL:$1|is|bin}} mit de \"kaskade\"-opsie:\n$2",
"namespaceprotected": "Je maggen gien ziejen in de '''$1'''-naamruumte bewarken.",
"customcssprotected": "Je kunnen disse CSS-zied niet bewarken, umdat der persoonlike instellingen van n aandere gebruker in staon.",
@@ -419,7 +428,7 @@
"createaccounterror": "Kon de gebrukersnaam niet anmaken: $1",
"nocookiesnew": "De gebrukersnaam is an-emaakt, mer je bin niet an-emeld.\n{{SITENAME}} gebruuk scheumbestaanden (cookies) um gebrukers an te melden.\nJe hebben disse scheumbestaanden uutezet.\nZet ze an, en meld daornao an mit de nieje gegevens.",
"nocookieslogin": "t Anmelden is mislokt umdat de webkieker gien scheumbestaanden (cookies) an hef staon. Probeer t aksepteren van scheumbestaanden an te zetten en daornao opniej an te melden.",
- "nocookiesfornew": "De gebruker is niet an-emaakt, umdat de bron niet bevestigd kon wörden.\nZörg derveur da'j scheumbestaanden (cookies) an hebben staon, herlaoj disse zied en probeer t opniej.",
+ "nocookiesfornew": "De gebruker is niet an-emaakt, umdat de bron niet bevestigd kon wörden.\nZörg derveur da'j scheumbestaanden (cookies) an hebben staon, herlaoi disse zied en probeer t opniej.",
"noname": "Je mutten n gebrukersnaam opgeven.",
"loginsuccesstitle": "Suksesvol an-emeld",
"loginsuccess": "Je bin noen an-emeld bie {{SITENAME}} as \"$1\".",
@@ -492,7 +501,7 @@
"passwordreset-username": "Gebruker:",
"passwordreset-domain": "Domein:",
"passwordreset-capture": "De resulterende netpost bekieken?",
- "passwordreset-capture-help": "A'j dit vakjen anvinken, dan krie'j t netpostbericht (mit t tiedelike wachtwoord) te zien en t wörden naor de gebruker estuurd.",
+ "passwordreset-capture-help": "A'j dit vakjen anvinken, dan krie'j t netpostbericht te zien (mit t tiejelike wachtwoord) en t wördt naor de gebruker estuurd.",
"passwordreset-email": "Netpostadres:",
"passwordreset-emailtitle": "Gebrukersgegevens op {{SITENAME}}",
"passwordreset-emailtext-ip": "Der hef der ene, waorschienlik jie zelf vanaof t IP-adres $1, n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen.\nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
@@ -502,7 +511,6 @@
"passwordreset-emailsent-capture": "Der is n bericht verstuurd um joew wachtwoord opniej in te stellen. Dit ku'j hieronder lezen.",
"passwordreset-emailerror-capture": "Der is n bericht veur t opniej opstellen van joew wachwoord an-emaakt, dit ku'j hieronder lezen. t Versturen naor de {{GENDER:$2|gebruker}} is mislokt um de volgende reden: $1",
"changeemail": "Wiezig netpostadres",
- "changeemail-header": "Netpostadres wiezigen",
"changeemail-text": "Vul dit formulier in um joew netpostadres te wiezigen. Um disse wieziging te bevestigen mu'j je wachtwoord invoeren.",
"changeemail-no-info": "Je mutten an-emeld ween um drekt toegang te hebben tot disse zied.",
"changeemail-oldemail": "t Ouwe netpostadres:",
@@ -510,7 +518,6 @@
"changeemail-none": "(gien)",
"changeemail-password": "Joew wachtwoord veur {{SITENAME}}:",
"changeemail-submit": "Netpostadres wiezigen",
- "changeemail-cancel": "Aofbreken",
"resettokens": "Tokens ongedaonmaken",
"resettokens-text": "Je kunnen hier tokens opniej instellen die toegang geven tot bepaolde persoonlike gegevens die ekoppeld bin an joew gebruker.\n\nDo dit a'j ze per ongelok mit ene edeeld hebben of as onbevoegden toegang ekregen hebben tot joew gebruker.",
"resettokens-no-tokens": "Der bin gien tokens um ongedaon te maken.",
@@ -541,7 +548,7 @@
"summary": "Samenvatting:",
"subject": "Onderwarp:",
"minoredit": "kleine wieziging",
- "watchthis": "Volg disse zied",
+ "watchthis": "volg disse zied",
"savearticle": "Zied opslaon",
"preview": "Naokieken",
"showpreview": "Bewarking naokieken",
@@ -555,7 +562,7 @@
"subject-preview": "Onderwarp/kop naokieken:",
"blockedtitle": "Gebruker is eblokkeerd",
"blockedtext": "'''Joew gebrukersnaam of IP-adres is eblokkeerd.'''\n\nJe bin eblokkeerd deur: $1.\nDe op-egeven reden is: ''$2''.\n\n* Eblokkeerd vanaof: $8\n* Eblokkeerd tot: $6\n* Bedoeld um te blokkeren: $7\n\nJe kunnen kontakt opnemen mit $1 of n aandere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] um de blokkering te bepraoten.\nJe kunnen gien gebruukmaken van de funksie 'een bericht sturen', behalven a'j n geldig netpostadres op-egeven hebben in joew [[Special:Preferences|veurkeuren]] en t gebruuk van disse funksie niet eblokkeerd is.\nt IP-adres da'j noen gebruken is $3 en t blokkeringsnummer is #$5.\nVermeld t allebeie a'j argens op disse blokkering reageren.",
- "autoblockedtext": "Joew IP-adres is automaties eblokkeerd umdat t gebruukt wörden deur n aandere gebruker, die eblokkeerd wörden deur $1.\nDe reden hierveur was:\n\n:''$2''\n\n* Begint: $8\n* Löp of nao: $6\n* Wee eblokkeerd wörden: $7\n\nJe kunnen kontakt opnemen mit $1 of n van de aandere\n[[{{MediaWiki:Grouppage-sysop}}|beheerders]] um de blokkering te bepraoten.\n\nNB: je kunnen de opsie \"n bericht sturen\" niet gebruken, behalven a'j n geldig netpostadres op-egeven hebben in de [[Special:Preferences|gebrukersveurkeuren]] en je niet eblokkeerd bin.\n\nJoew IP-adres is $3 en joew blokkeernummer is $5.\nGeef disse nummers deur a'j kontakt mit ene opnemen over de blokkering.",
+ "autoblockedtext": "Joew IP-adres is automaties eblokkeerd umdat t gebruukt wördt deur n aandere gebruker, die eblokkeerd wördt deur $1.\nDe reden hierveur was:\n\n:''$2''\n\n* Begint: $8\n* Löp of nao: $6\n* Wee eblokkeerd wördt: $7\n\nJe kunnen kontakt opnemen mit $1 of n van de aandere\n[[{{MediaWiki:Grouppage-sysop}}|beheerders]] um de blokkering te bepraoten.\n\nNB: je kunnen de opsie \"n bericht sturen\" niet gebruken, behalven a'j n geldig netpostadres op-egeven hebben in de [[Special:Preferences|gebrukersveurkeuren]] en je niet eblokkeerd bin.\n\nJoew IP-adres is $3 en joew blokkeernummer is $5.\nGeef disse nummers deur a'j kontakt mit ene opnemen over de blokkering.",
"blockednoreason": "gien reden op-egeven",
"whitelistedittext": "Um ziejen te kunnen wiezigen, mu'j $1 ween",
"confirmedittext": "Je mutten je netpostadres bevestigen veurda'j bewarken kunnen. Vul je adres in en bevestig t via [[Special:Preferences|mien veurkeuren]].",
@@ -629,7 +636,7 @@
"moveddeleted-notice": "Disse zied is vortedaon.\nHieronder steet de informasie uut t vortdologboek en t herneumlogboek.",
"log-fulllog": "t Hele logboek bekieken",
"edit-hook-aborted": "De bewarking is aofebreuken deur n hook.\nDer is gien reden op-egeven.",
- "edit-gone-missing": "De zied kon niet bie-ewörken wörden.\nt Schient dat t vortedaon is.",
+ "edit-gone-missing": "De zied kon niet bie-ewörken wörden.\nt Lik derop as of t vortedaon is.",
"edit-conflict": "Tegelieke bewörken.",
"edit-no-change": "Joew bewarking is enegeerd, umdat der gien wieziging an de tekste edaon is.",
"postedit-confirmation-saved": "Joew bewarking is op-esleugen",
@@ -647,7 +654,7 @@
"expensive-parserfunction-category": "Ziejen die te veule kostbaore parserfunksies gebruken",
"post-expand-template-inclusion-warning": "Waorschuwing: de grootte van de in-evoegden mal is te groot.\nSommigen mallen wörden niet in-evoegd.",
"post-expand-template-inclusion-category": "Ziejen die over de maximumgrootte veur in-evoegden mallen hinne gaon",
- "post-expand-template-argument-warning": "Waorschuwing: disse zied gebruuk tenminsten één parameter in n mal, die te groot is as t uuteklap wörden. Disse parameters wörden vorteleuten.",
+ "post-expand-template-argument-warning": "Waorschuwing: disse zied gebruukt tenminsten een parameter in n mal, die te groot is as t uuteklapt wördt. Disse parameters wörden vorteleuten.",
"post-expand-template-argument-category": "Ziejen mit ontbrekende malelementen",
"parser-template-loop-warning": "Der is n kringloop in mallen waoreneumen: [[$1]]",
"parser-template-recursion-depth-warning": "Der is over de rekursiediepte veur mallen is hinne gaon ($1)",
@@ -662,7 +669,7 @@
"undo-success": "De bewarking kan weerummedreid wörden. Kiek de vergelieking hieronder nao um der wisse van de ween dat alles goed is, en slao de de zied op um de bewarking weerumme te dreien.",
"undo-failure": "De wieziging kon niet weerummedreid wörden umdat t ondertussen awweer ewiezigd is.",
"undo-norev": "De bewarking kon niet weerummedreid wörden, umdat t niet besteet of vortedaon is.",
- "undo-summary": "Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) weerummedreid.",
+ "undo-summary": "Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) weerummedreid",
"undo-summary-username-hidden": "Versie $1 deur n verbörgen gebruker weerummedreid",
"cantcreateaccounttitle": "Anmaken van n gebrukersprofiel is niet meugelik",
"cantcreateaccount-text": "t Anmaken van gebrukers van dit IP-adres (<b>$1</b>) is eblokkeerd deur [[User:$3|$3]].\n\nDe deur $3 op-egeven reden is ''$2''",
@@ -715,6 +722,9 @@
"revdelete-show-file-confirm": "Bi'j der wisse van da'j de vortedaone versie van t bestaand \"<nowiki>$1</nowiki>\" van $2 um $3 bekieken willen?",
"revdelete-show-file-submit": "Ja",
"logdelete-selected": "{{PLURAL:$1|Ekeuzen logboekboekaksie|Ekeuzen logboekaksies}}:",
+ "revdelete-text-text": "Vortedaone versies bin nog altied zichtbaor in de geschiedenisse, mer delen van de inhoud bin niet openbaor.",
+ "revdelete-text-file": "Vortedaone versies bin nog altied zichtbaor in de bestaandsgeschiedenisse, mer delen van de inhoud bin niet openbaor.",
+ "revdelete-text-others": "Aandere beheerders kunnen de verbörgen inhoud nog altied inzien en weer zichtbaor maken, behalven as der anvullende beparkingen in-esteld bin.",
"revdelete-confirm": "Bevestig da'j dit doon wollen, da'j de gevolgen dervan begriepen en da'j t doon in overeenstemming mit t geldende [[{{MediaWiki:Policy-url}}|beleid]].",
"revdelete-suppress-text": "Onderdrokken ma'j '''allinnig''' gebruken in de volgende gevallen:\n* Ongepassen persoonlike informasie\n*: ''adressen en tillefoonnummers, burgerservicenummers, en gao zo mer deur.''",
"revdelete-legend": "Stel versiebeparkingen in:",
@@ -753,7 +763,7 @@
"suppressionlog": "Verbargingslogboek",
"suppressionlogtext": "In de onderstaande lieste staon de vortedaone ziejen en blokkeringen die veur beheerders verbörgen bin. \nIn de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toepassige bin, te bekieken.",
"mergehistory": "Geschiedenisse van ziejen bie mekaar doon",
- "mergehistory-header": "Via disse zied ku'j versies uut de geschiedenisse van n bronzied mit n niejere zied samenvoegen. Zörg derveur dat disse versies uut de geschiedenisse histories juus bin.",
+ "mergehistory-header": "Via disse zied ku'j versies uut de geschiedenisse van n bronzied mit n niejere zied samenvoegen. Zörg derveur dat disse versies uut de geschiedenisse histories juust bin.",
"mergehistory-box": "Geschiedenisse van twee ziejen bie mekaar doon:",
"mergehistory-from": "Bronzied:",
"mergehistory-into": "Bestemmingszied:",
@@ -773,7 +783,6 @@
"mergehistory-same-destination": "De bronzied en doelzied kunnen niet t zelfde ween",
"mergehistory-reason": "Reden:",
"mergelog": "Samenvoegingslogboek",
- "pagemerge-logentry": "voegen [[$1]] naor [[$2]] samen (versies tot en mit $3)",
"revertmerge": "Samenvoeging weerummedreien",
"mergelogpagetext": "Hieronder zie'j n lieste van de leste samenvoegingen van n ziedgeschiedenisse naor n aandere.",
"history-title": "Versiegeschiedenisse van \"$1\"",
@@ -820,7 +829,6 @@
"searchrelated": "verwaant",
"searchall": "alles",
"showingresults": "Hieronder {{PLURAL:$1|steet '''1''' resultaot|staon '''$1''' resultaoten}} <b>$1</b> vanaof nummer <b>$2</b>.",
- "showingresultsheader": "{{PLURAL:$5|Resultaot '''$1''' van '''$3'''|Resultaoten '''$1 - $2''' van '''$3'''}} veur '''$4'''",
"search-nonefound": "Der bin gien resultaoten veur de zeukopdrachte.",
"powersearch-legend": "Uutebreid zeuken",
"powersearch-ns": "Zeuken in naamruumten:",
@@ -841,6 +849,8 @@
"prefs-personal": "Gebrukersgegevens",
"prefs-rc": "Leste wiezigingen",
"prefs-watchlist": "Volglieste",
+ "prefs-editwatchlist-label": "Onderwarpen op joew volglieste bewarken:",
+ "prefs-editwatchlist-edit": "Onderwarpen op mien volgliesten bekieken en vortdoon",
"prefs-watchlist-days": "Antal dagen in de volglieste bekieken:",
"prefs-watchlist-days-max": "Hooguut $1 {{PLURAL:$1|dag|dagen}}",
"prefs-watchlist-edits": "Antal wiezigingen in de uutebreiden volglieste:",
@@ -976,7 +986,7 @@
"right-edit": "Ziejen bewarken",
"right-createpage": "Ziejen anmaken",
"right-createtalk": "Overlegziejen anmaken",
- "right-createaccount": "Nieje gebrukers anmaken",
+ "right-createaccount": "Nieje gebrukerskonto anmaken",
"right-minoredit": "Bewarkingen markeren as klein",
"right-move": "Ziejen herneumen",
"right-move-subpages": "Ziejen samen mit de ziejen die deronder hangen verplaotsen",
@@ -987,7 +997,7 @@
"right-reupload": "n Bestaond bestaand overschrieven",
"right-reupload-own": "Bestaanden overschrieven die'j der zelf bie ezet hebben",
"right-reupload-shared": "Media uut de edeelden mediadatabanke plaotselik overschrieven",
- "right-upload_by_url": "Bestaanden inlaojen via n webadres",
+ "right-upload_by_url": "Bestaanden oplaojen via n webadres",
"right-purge": "t Tussengeheugen van n zied legen",
"right-autoconfirmed": "Uutezonderd van IP-adres-ebaseerden tiedsaofhankelike beparkingen",
"right-bot": "Behaandeld wörden as n eautomatiseerd preces",
@@ -1057,7 +1067,7 @@
"action-upload": "dit bestaand opsturen",
"action-reupload": "dit bestaonde bestaand overschrieven",
"action-reupload-shared": "n aander bestaand over dit bestaand uut de edeelden mediadatabanke hinne zetten.",
- "action-upload_by_url": "dit bestaand vanaof n webadres inlaojen",
+ "action-upload_by_url": "dit bestaand vanaof n webadres oplaojen",
"action-writeapi": "de schrief-API bewarken",
"action-delete": "disse zied vortdoon",
"action-deleterevision": "disse versie vortdoon",
@@ -1138,7 +1148,7 @@
"recentchangeslinked-feed": "Volg verwiezigingen",
"recentchangeslinked-toolbox": "Volg verwiezigingen",
"recentchangeslinked-title": "Wiezigingen verwaant an $1",
- "recentchangeslinked-summary": "Op disse spesiale zied steet n lieste mit de leste wieziginen op ziejen waornaor verwezen wörden. Ziejen op [[Special:Watchlist|joew volglieste]] staon '''vet-edrokt'''.",
+ "recentchangeslinked-summary": "Op disse spesiale zied steet n lieste mit de leste wieziginen op ziejen waornaor verwezen wördt. Ziejen op [[Special:Watchlist|joew volglieste]] staon '''vet'''.",
"recentchangeslinked-page": "Ziednaam:",
"recentchangeslinked-to": "Bekiek wiezigingen op ziejen mit verwiezingen naor disse zied",
"upload": "Bestaand opsturen",
@@ -1149,14 +1159,14 @@
"uploadnologintext": "Je mutten $1 ween um bestaanden op te kunnen sturen.",
"upload_directory_missing": "De inlaojmap veur bestaanden ($1) is vort en kon niet an-emaakt wörden deur de webserver.",
"upload_directory_read_only": "Op t moment ku'j gien bestaanden opsturen vanwegen techniese problemen ($1).",
- "uploaderror": "Fout bie t inlaojen van t bestaand",
+ "uploaderror": "Fout bie t oplaojen van t bestaand",
"upload-recreate-warning": "'''Waorschuwing: der is n bestaand mit disse naam vortedaon of herneumd.'''\n\nHieronder steet t vortdologboek en t herneumlogboek veur disse zied:",
- "uploadtext": "Gebruuk t formulier hieronder um bestaanden op te sturen.\nUm bestaanden te bekieken of te zeuken die eerder al op-estuurd bin, ku'j naor de [[Special:FileList|bestaandslieste]] gaon.\nBestaanden en media die nao t vortdoon opniej op-estuurd wörden ku'j in de smiezen houwen in t [[Special:Log/upload|logboek mit nieje bestaanden]] en t [[Special:Log/delete|vortdologboek]].\n\nUm t bestaand in te voegen in n zied ku'j één van de volgende kodes gebruken:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.jpg]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternatieve tekste]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestaand.ogg]]</nowiki>''' drekte verwiezing naor n bestaand.",
+ "uploadtext": "Gebruuk t formulier hieronder um bestaanden op te sturen.\nUm bestaanden te bekieken of te zeuken die eerder al op-estuurd bin, ku'j naor de [[Special:FileList|bestaandslieste]] gaon.\nBestaanden en media die nao t vortdoon opniej op-estuurd wörden ku'j in de smiezen houwen in t [[Special:Log/upload|logboek mit nieje bestaanden]] en t [[Special:Log/delete|vortdologboek]].\n\nUm t bestaand in te voegen in n zied ku'j een van de volgende kodes gebruken:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.jpg]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternatieve tekste]]</nowiki>'''\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestaand.ogg]]</nowiki>''' drekte verwiezing naor n bestaand.",
"upload-permitted": "Toe-estaone bestaandstypes: $1.",
"upload-preferred": "An-ewezen bestaandstypes: $1.",
"upload-prohibited": "Verbeujen bestaandstypes: $1.",
"uploadlogpage": "Logboek mit nieje bestaanden",
- "uploadlogpagetext": "Hieronder steet n lieste mit bestaanden die net niej bin.\nZie de [[Special:NewFiles|uutstalling mit media]] veur n overzichte.",
+ "uploadlogpagetext": "Hieronder steet n lieste mit bestaanden die net niej bin.\nZie de [[Special:NewFiles|uutstalling mit media]] veur n overzicht.",
"filename": "Bestaandsnaam",
"filedesc": "Beschrieving",
"fileuploadsummary": "Beschrieving:",
@@ -1197,8 +1207,8 @@
"file-thumbnail-no": "De bestaandsnaam begint mit <strong>$1</strong>.\nDit is warschienlik n verkleinde aofbeelding ''(overzichsaofbeelding)''.\nA'j disse aofbeelding in volle grootte hebben voeg t dan toe, wiezig aanders de bestaandsnaam.",
"fileexists-forbidden": "n Bestaand mit disse naam besteet al, en kan niet overschreven wörden.\nVoeg t bestaand toe onder n aandere naam.\n[[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "Der besteet al n bestaand mit disse naam in de gezamenlike bestaandslokasie.\nA'j t bestaand evengoed op willen sturen, gao dan weerumme en kies n aandere naam.\n[[File:$1|thumb|center|$1]]",
- "file-exists-duplicate": "Dit bestaand is liek alleens as {{PLURAL:$1|t volgende bestaand|de volgende bestaanden}}:",
- "file-deleted-duplicate": "n Bestaand dat liek alleens is an dit bestaand ([[:$1]]) is eerder al vortedaon.\nBekiek t vortdologboek veurda'j veurdan gaon.",
+ "file-exists-duplicate": "Dit bestaand is gelieke an {{PLURAL:$1|t volgende bestaand|de volgende bestaanden}}:",
+ "file-deleted-duplicate": "n Bestaand dat gelieke is an dit bestaand ([[:$1]]) is eerder al vortedaon.\nBekiek t vortdologboek veurda'j vedan gaon.",
"uploadwarning": "Waorschuwing",
"uploadwarning-text": "Pas de bestaandsbeschrieving hieronder an en probeer t opniej",
"savefile": "Bestaand opslaon",
@@ -1208,7 +1218,7 @@
"php-uploaddisabledtext": "t Opsturen van PHP-bestaanden is uutezet. Kiek de instellingen veur t opsturen van bestaanden effen nao.",
"uploadscripted": "In dit bestaand steet HTML- of skriptkode die verkeerd elezen kan wörden deur de webkieker.",
"uploadvirus": "In dit bestaand zit n virus! Gegevens: $1",
- "uploadjava": "t Bestaand is n ZIP-bestaand waor n Java .class-bestaand in zit.\nt Inlaojen van Java-bestaanden is niet toe-estaon umdat hiermee beveiligingsinstellingen ummezeild kunnen wörden.",
+ "uploadjava": "t Bestaand is n ZIP-bestaand waor n Java .class-bestaand in zit.\nt Oplaojen van Java-bestaanden is niet toe-estaon umdat hiermee beveiligingsinstellingen umzeild kunnen wörden.",
"upload-source": "Bronbestaand",
"sourcefilename": "Bestaandsnaam op de hardeschieve:",
"sourceurl": "Bronwebadres:",
@@ -1221,16 +1231,16 @@
"filename-bad-prefix": "De naam van t bestaand da'j opsturen, begint mit '''\"$1\"''', dit is n niet-beschrievende naam die meestentieds automaties deur n digitale kamera egeven wörden. Kies n dudelike naam veur t bestaand.",
"upload-success-subj": "t Bestaand is op-estuurd",
"upload-success-msg": "t Bestaand [$2] steet derop. Je kunnen t hier vienen: [[:{{ns:file}}:$1]]",
- "upload-failure-subj": "Probleem bie t inlaojen van t bestaand",
- "upload-failure-msg": "Der was n probleem bie t inlaojen van [$2]:\n\n$1",
+ "upload-failure-subj": "Probleem bie t oplaojen van t bestaand",
+ "upload-failure-msg": "Der was n probleem bie t oplaojen van [$2]:\n\n$1",
"upload-warning-subj": "Waorschuwing veur t opsturen van bestaanden",
- "upload-warning-msg": "Der was n probleem mit t inlaojen van t bestaand [$2].\nGao weerumme naor t [[Special:Upload/stash/$1|opstuurformulier]] um dit probleem te verhelpen.",
+ "upload-warning-msg": "Der was n probleem mit t oplaojen van t bestaand [$2].\nGao weerumme naor t [[Special:Upload/stash/$1|opstuurformulier]] um dit probleem te verhelpen.",
"upload-proto-error": "Verkeerd protokol",
"upload-proto-error-text": "Um op disse maniere bestaanden toe te voegen mutten webadressen beginnen mit <code>http://</code> of <code>ftp://</code>.",
"upload-file-error": "Interne fout",
"upload-file-error-text": "Bie ons gung der effen wat fout to n tiedelik bestaand op de server an-emaakt wörden. Neem kontakt op mit n [[Special:ListUsers/sysop|beheerder]].",
- "upload-misc-error": "Onbekende fout bie t inlaojen van joew bestaand",
- "upload-misc-error-text": "Der is bie t inlaojen van t bestaand n onbekende fout op-etrejen. \nKiek effen nao of de verwiezing t wel döt en probeer t opniej. \nAs t probleem zo blif, neem dan kontakt op mit één van de [[Special:ListUsers/sysop|beheerders]].",
+ "upload-misc-error": "Onbekende fout bie t oplaojen van joew bestaand",
+ "upload-misc-error-text": "Der is bie t oplaojen van t bestaand n onbekende fout op-etrejen. \nKiek effen nao of de verwiezing t wel dut en probeer t opniej. \nAs t probleem zo blif, neem dan kontakt op mit één van de [[Special:ListUsers/sysop|beheerders]].",
"upload-too-many-redirects": "Der zatten te veule deurverwiezingen in de URL.",
"upload-http-error": "Der is n HTTP-fout op-etrejen: $1",
"upload-copy-upload-invalid-domain": "Bestaanden per kopie opsturen is niet beschikbaor vanuut dit domein.",
@@ -1346,7 +1356,7 @@
"nolinkstoimage": "Bestaand is niet in gebruuk.",
"morelinkstoimage": "[[Special:WhatLinksHere/$1|Meer verwiezingen]] naor dit bestaand bekieken.",
"linkstoimage-redirect": "$1 (bestaandsdeurverwiezing) $2",
- "duplicatesoffile": "{{PLURAL:$1|t Volgende bestaand is|De volgende $1 bestaanden bin}} liek alleens as dit bestaand ([[Special:FileDuplicateSearch/$2|meer informasie]]):",
+ "duplicatesoffile": "{{PLURAL:$1|t Volgende bestaand is|De volgende $1 bestaanden bin}} gelieke an dit bestaand ([[Special:FileDuplicateSearch/$2|meer informasie]]):",
"sharedupload": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten.",
"sharedupload-desc-there": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. Bekiek de [$2 beschrieving van t bestaand] veur meer informasie.",
"sharedupload-desc-here": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. De [$2 beschrieving van t bestaand] dergindse, steet hieronder.",
@@ -1385,7 +1395,7 @@
"mimesearch": "Zeuken op MIME-type",
"mimesearch-summary": "Op disse spesiale zied kunnen de bestaanden naor t MIME-type efiltreerd wörden. In de invoer mut altied t media- en subtype staon, bieveurbeeld: <code>aofbeelding/jpeg</code>.",
"mimetype": "MIME-type:",
- "download": "binnenhaolen",
+ "download": "neerlaojen",
"unwatchedpages": "Ziejen die niet evolgd wörden",
"listredirects": "Lieste van deurverwiezingen",
"listduplicatedfiles": "Lieste mit bestaanden mit duplikaoten",
@@ -1397,14 +1407,11 @@
"randomincategory": "Netzelde welke zied in n kategorie",
"randomincategory-invalidcategory": "\"$1\" is gien geldige kategorienaam.",
"randomincategory-nopages": "Der bin gien ziejen in [[:Category:$1]].",
- "randomincategory-selectcategory": "Netzelde welke zied uut de kategorie: $1 $2",
- "randomincategory-selectcategory-submit": "Laot kulen",
"randomredirect": "Netzelde welke deurverwiezing",
"randomredirect-nopages": "Der staon gien deurverwiezingen in de naamruumte \"$1\".",
"statistics": "Staotistieken",
"statistics-header-pages": "Ziedstaotistieken",
"statistics-header-edits": "Bewarkingsstaotistieken",
- "statistics-header-views": "Staotistieken bekieken",
"statistics-header-users": "Gebrukerstaotistieken",
"statistics-header-hooks": "Overige staotistieken",
"statistics-articles": "Inhouwelike ziejen",
@@ -1413,13 +1420,9 @@
"statistics-files": "Bestaanden",
"statistics-edits": "Ziedbewarkingen vanaof t begin van {{SITENAME}}",
"statistics-edits-average": "Gemiddeld antal bewarkingen per zied",
- "statistics-views-total": "Totaal antal weeregeven ziejen",
- "statistics-views-total-desc": "t Bekieken van niet-bestaonde ziejen en spesiale ziejen zitten der niet bie in",
- "statistics-views-peredit": "Weeregeven ziejen per bewarking",
"statistics-users": "In-eschreven [[Special:ListUsers|gebrukers]]",
"statistics-users-active": "Aktieve gebrukers",
"statistics-users-active-desc": "Gebrukers die de veurbieje {{PLURAL:$1|dag|$1 dagen}} n haandeling uutevoerd hebben",
- "statistics-mostpopular": "Meestbekeken ziejen",
"pageswithprop": "Ziejen mit n ziedeigenschap",
"pageswithprop-legend": "Ziejen mit n zied-eigenschap",
"pageswithprop-text": "Op disse zied staon ziejen mit n bepaolde ziedeigenschap.",
@@ -1452,14 +1455,13 @@
"ntransclusions": "wörden op {{PLURAL:$1|één zied|$1 ziejen}} gebruukt",
"specialpage-empty": "Disse zied is leeg.",
"lonelypages": "Weesziejen",
- "lonelypagestext": "Naor disse ziejen wörden niet verwezen vanuut {{SITENAME}} en ze bin oek nargens in-evoegd.",
+ "lonelypagestext": "Naor disse ziejen wördt niet verwezen vanuut {{SITENAME}}, en ze bin oek nargens as mal op-eneumen.",
"uncategorizedpages": "Ziejen zonder kategorie",
"uncategorizedcategories": "Kategorieën zonder kategorie",
"uncategorizedimages": "Bestaanden zonder kategorie",
"uncategorizedtemplates": "Mallen zonder kategorie",
"unusedcategories": "Ongebruukten kategorieën",
"unusedimages": "Ongebruukten bestaanden",
- "popularpages": "Populaere artikels",
"wantedcategories": "Gewunste kategorieën",
"wantedpages": "Gewunste ziejen",
"wantedpages-badtitle": "Ongeldige ziednaam in resultaot: $1",
@@ -1467,7 +1469,7 @@
"wantedfiletext-cat": "De volgende bestaanden wörden gebruukt mer bestaon niet. Bestaanden van externe databanken kunnen op-eneumen ween in de lieste, ondanks dat ze bestaon. Soortgelieke vals positieven wörden <del>deurehaold weeregeven</del>. Ziejen die niet-bestaonde bestaanden insluten staon op de zied [[:$1]].",
"wantedfiletext-nocat": "De volgende bestaanden wörden gebruukt mer bestaon niet. Bestaanden van externe databanken kunnen op-eneumen ween in de lieste, ondanks dat ze bestaon. Soortgelieke vals positieven wörden <del>deurehaold weeregeven</del>.",
"wantedtemplates": "Gewunste mallen",
- "mostlinked": "Ziejen waor t meest naor verwezen wörden",
+ "mostlinked": "Ziejen waor t meest naor verwezen wördt",
"mostlinkedcategories": "Meestgebruukten kategorieën",
"mostlinkedtemplates": "Meestgebruukten mallen",
"mostcategories": "Artikels mit de meeste kategorieën",
@@ -1510,7 +1512,6 @@
"querypage-disabled": "Disse spesiale zied is uutezet um prestasieredens.",
"booksources": "Boekinformasie",
"booksources-search-legend": "Zeuk informasie over n boek",
- "booksources-go": "Zeuk",
"booksources-text": "Hieronder steet n lieste mit verwiezingen naor aandere websteeën die nieje of wat ouwere boeken verkopen, en daor hebben ze warschienlik meer informasie over t boek da'j zeuken:",
"booksources-invalid-isbn": "De op-egeven ISBN klop niet; kiek effen nao o'j gien fout emaakt hebben bie de invoer.",
"specialloguserlabel": "Uutvoerende gebruker:",
@@ -1626,9 +1627,9 @@
"notvisiblerev": "Bewarking is vortedaon",
"watchlist-details": "Der {{PLURAL:$1|steet één zied|staon $1 ziejen}} op joew volglieste, zonder de overlegziejen mee-erekend.",
"wlheader-enotif": "Je kriegen bericht per netpost",
- "wlheader-showupdated": "Ziejen die sinds joew leste bezeuk bie-ewörken bin, staon '''vet-edrokt'''.",
+ "wlheader-showupdated": "Ziejen die sinds joew leste bezeuk bie-ewörken bin staon '''vet'''.",
"wlnote": "Hieronder {{PLURAL:$1|steet de leste wieziging|staon de leste $1 wiezigingen}} in {{PLURAL:$2|t aofgeleupen ure|de leste $2 uren}} vanaof $3 um $4.",
- "wlshowlast": "Laot de veurbieje $1 uur $2 dagen $3 zien",
+ "wlshowlast": "Laot de veurbieje $1 uur $2 dagen zien",
"watchlist-options": "Opsies veur de volglieste",
"watching": "Volg...",
"unwatching": "Niet volgen...",
@@ -1675,8 +1676,7 @@
"delete-toobig": "Disse zied hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.\nt Vortdoon van dit soort ziejen is mit rechten bepark um t per ongelok versteuren van de warking van {{SITENAME}} te veurkoemen.",
"delete-warning-toobig": "Disse zied hef n lange bewarkingsgeschiedenisse, meer as $1 {{PLURAL:$1|versie|versies}}.\nWoart je: t vortdoon van disse zied kan de warking van de databanke van {{SITENAME}} versteuren.\nWees veurzichtig",
"rollback": "Wiezigingen herstellen",
- "rollback_short": "Weerummedreien",
- "rollbacklink": "Weerummedreien",
+ "rollbacklink": "weerummedreien",
"rollbacklinkcount": "{{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien",
"rollbacklinkcount-morethan": "Meer as {{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien",
"rollbackfailed": "Wieziging herstellen is mislokt",
@@ -1689,12 +1689,12 @@
"sessionfailure-title": "Sessiefout",
"sessionfailure": "Der is n probleem mit joew anmeldsessie. De aksie is stop-ezet uut veurzörg tegen n beveiligingsrisico (dat besteet uut t meugelike \"kraken\" van disse sessie). Gao weerumme naor de veurige zied, laoj disse zied opniej en probeer t nog es.",
"protectlogpage": "Beveiligingslogboek",
- "protectlogtext": "Hieronder staon de leste wiezigingen veur t blokkeren en vriegeven van artikels en ziejen.\nZie de [[Special:ProtectedPages|lieste mit ziejen die beveiligd bin]] veur t hele overzichte.",
+ "protectlogtext": "Hieronder staon de leste wiezigingen veur t blokkeren en vriegeven van artikels en ziejen.\nZie de [[Special:ProtectedPages|lieste mit ziejen die beveiligd bin]] veur t hele overzicht.",
"protectedarticle": "[[$1]] is beveiligd",
"modifiedarticleprotection": "beveiligingsnivo van \"[[$1]]\" ewiezigd",
"unprotectedarticle": "hef de beveiliging van \"[[$1]]\" deraof ehaold",
"movedarticleprotection": "hef de beveiligingsinstellingen over-ezet van \"[[$2]]\" naor \"[[$1]]\"",
- "protect-title": "Instellen van beveiligingsnivo veur \"$1\"",
+ "protect-title": "Beveiligingsnivo instellen veur \"$1\"",
"protect-title-notallowed": "Beveiligingsnivo veur \"$1\" bekieken",
"prot_1movedto2": "[[$1]] is ewiezigd naor [[$2]]",
"protect-badnamespace-title": "Niet te beveiligen naamruumte",
@@ -1711,7 +1711,7 @@
"protect-locked-blocked": "Je kunnen beveiligingsnivo's niet wiezigen terwiel je eblokkeerd bin. Hier bin de instellingen zo as ze noen bin veur de zied '''$1''':",
"protect-locked-dblock": "Beveiligingsnivo's kunnen effen niet ewiezigd wörden umdat de databanke noen beveiligd is.\nHier staon de instellingen zo as ze noen bin veur de zied '''$1''':",
"protect-locked-access": "Je hebben gien rechten um t beveilingsnivo van ziejen te wiezigen.\nHier staon de instellingen zo as ze noen bin veur de zied '''$1''':",
- "protect-cascadeon": "Disse zied wörden beveiligd, umdat t op-eneumen is in de volgende {{PLURAL:$1|zied|ziejen}} die beveiligd {{PLURAL:$1|is|bin}} mit de kaskadeopsie. Wiezigingen in t beveiligingsnivo van disse zied hebben gien invleud op de kaskadebeveiliging.",
+ "protect-cascadeon": "Disse zied wördt beveiligd, umdat t op-eneumen is in de volgende {{PLURAL:$1|zied|ziejen}} die beveiligd {{PLURAL:$1|is|bin}} mit de kaskadeopsie. Wiezigingen in t beveiligingsnivo van disse zied hebben gien invleud op de kaskadebeveiliging.",
"protect-default": "Veur alle gebrukers",
"protect-fallback": "Allinnig gebrukers mit t recht \"$1\" toestaon",
"protect-level-autoconfirmed": "Allinnig automaties bevestigden gebrukers toestaon",
@@ -1765,7 +1765,7 @@
"undeletedrevisions-files": "{{PLURAL:$1|1 versie|$1 versies}} en {{PLURAL:$2|1 bestaand|$2 bestaanden}} bin weerummeplaotst",
"undeletedfiles": "{{PLURAL:$1|1 bestaand|$1 bestaanden}} weerummeplaotst",
"cannotundelete": "t Weerummeplaotsen is mislokt:\n$1",
- "undeletedpage": "'''$1 is weerummeplaotst'''\n\nBekiek t [[Special:Log/delete|vortdologboek]] veur n overzichte van ziejen die kortens vortedaon en weerummeplaotst bin.",
+ "undeletedpage": "'''$1 is weerummeplaotst'''\n\nBekiek t [[Special:Log/delete|vortdologboek]] veur n overzicht van ziejen die kortens vortedaon en weerummeplaotst bin.",
"undelete-header": "Zie t [[Special:Log/delete|vortdologboek ]] veur spul dat krek vortedaon is.",
"undelete-search-title": "Vortedaone ziejen zeuken",
"undelete-search-box": "Deurzeuk vortedaone ziejen",
@@ -1773,7 +1773,7 @@
"undelete-search-submit": "Zeuk",
"undelete-no-results": "Gien ziejen evunnen in t archief mit vortedaone ziejen.",
"undelete-filename-mismatch": "Bestaandsversie van t tiedstip $1 kon niet hersteld wörden: bestaandsnaam kloppen niet",
- "undelete-bad-store-key": "Bestaandsversie van t tiedstip $1 kon niet hersteld wörden: t bestaand was der al niet meer veurdat t vortedaon wörden.",
+ "undelete-bad-store-key": "Bestaandsversie van t tiedstip $1 kon niet hersteld wörden: t bestaand was der al niet meer veurdat t vortedaon wördden.",
"undelete-cleanup-error": "Fout bie t herstellen van t ongebruukten archiefbestaand \"$1\".",
"undelete-missing-filearchive": "t Lokten niet um ID $1 weerumme te plaotsen umdat t niet in de databanke is.\nMisschien is t al weerummeplaotst.",
"undelete-error": "Der is wat fout egaon bie t vortdoon van de zied",
@@ -1809,6 +1809,7 @@
"sp-contributions-search": "Zeuken naor biedragen",
"sp-contributions-username": "IP-adres of gebrukersnaam:",
"sp-contributions-toponly": "Allinnig de niejste versie laoten zien",
+ "sp-contributions-newonly": "Allinnig nieje ziejen laoten zien",
"sp-contributions-submit": "Zeuk",
"whatlinkshere": "Verwiezingen naor disse zied",
"whatlinkshere-title": "Ziejen die verwiezen naor \"$1\"",
@@ -1932,7 +1933,7 @@
"ipbnounblockself": "Je maggen je eigen niet deblokkeren",
"lockdb": "Databanke blokkeren",
"unlockdb": "Databanke vriegeven",
- "lockdbtext": "Waorschuwing: a'j de databanke blokkeren dan kan der gienene meer ziejen bewarken, zien veurkeuren wiezingen of wat aanders doon waorveur der wiezigingen in de databanke neudig bin.",
+ "lockdbtext": "Waorschuwing: a'j de databanke blokkeren dan kan der gienene meer ziejen bewarken, zien veurkeuren wiezigen of wat aanders doon waorveur der wiezigingen in de databanke neudig bin.",
"unlockdbtext": "Vriegeven van de databanke maak alle bewarkingen weer meugelik.\nMut de databanke vrie-egeven wörden?",
"lockconfirm": "Ja, ik wille de databanke blokkeren.",
"unlockconfirm": "Ja, ik wille de databanke vriegeven.",
@@ -1949,8 +1950,8 @@
"move-page": "Herneum \"$1\"",
"move-page-legend": "Zied herneumen",
"movepagetext": "Mit dit formulier ku'j de zied n nieje naam geven, de geschiedenisse geet dan vanzelf mee.\nDe ouwe naam zal automaties n deurverwiezing wörden naor de nieje zied.\nDeurverwiezingen naor de ouwe naam kunnen automaties ewiezigd wörden.\nA'j derveur kiezen um dat niet te doon, kiek t dan effen nao of der [[Special:DoubleRedirects|dubbele]] en [[Special:BrokenRedirects|ebreuken deurverwiezingen]] bin ontstaon.\nt Is an joe um derveur te zörgen dat de deurverwiezingen naor de goeie naam gaon.\n\nn Zied kan '''allinnig''' herneumd wörden as de nieje naam niet besteet of t n deurverwiezing is zonder veerdere geschiedenisse.\nDit betekent da'j n zied weer naor de ouwe naam kunnen herneumen, a'j bieveurbeeld n fout emaakt hebben, zonder da'j de bestaonde zied overschrieven.\n\n'''WAORSCHUWING!'''\nVeur populaere ziejen kan t herneumen drastiese en onveurziene gevolgen hebben.\nZörg derveur da'j de gevolgen overzien veurda'j veerder gaon.",
- "movepagetext-noredirectfixer": "Mit dit formulier ku'j de zied n nieje naam geven, de geschiedenisse geet dan vanzelf mee.\nDe ouwe naam zal automaties n deurverwiezing wörden naor de nieje zied.\nKiek oek effen nao of der gien [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|ebreuken deurverwiezingen]] bin ontstaon.\nt Is an joe um derveur te zörgen dat de deurverwiezingen naor de goeie naam gaon.\n\nn Zied kan '''allinnig''' herneumd wörden as de nieje naam niet besteet of t n deurverwiezing is zonder veerdere geschiedenisse.\nDit betekent da'j n zied weer naor de ouwe naam kunnen herneumen, a'j bieveurbeeld n fout emaakt hebben, zonder da'j de bestaonde zied overschrieven.\n\n'''WAORSCHUWING!'''\nVeur populaere ziejen kan t herneumen drastiese en onveurziene gevolgen hebben.\nZörg derveur da'j de gevolgen overzien veurda'j veerder gaon.",
- "movepagetalktext": "De overlegzied die derbie heurt krig oek n nieje titel, mer '''niet''' in de volgende gevallen:\n* As de zied in n aandere naamruumte eplaotst wörden\n* As der al n niet-lege overlegzied besteet onder de aandere naam\n* a'j t onderstaonde vinkjen vorthaolen",
+ "movepagetext-noredirectfixer": "Mit dit formulier ku'j de zied n nieje naam geven, de geschiedenisse geet dan vanzelf mee.\nDe ouwe naam zal automaties n deurverwiezing wörden naor de nieje zied.\nKiek oek effen nao of der gien [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|ebreuken deurverwiezingen]] bin ontstaon.\nt Is an joe um derveur te zörgen dat de deurverwiezingen naor de goeie naam gaon.\n\nn Zied kan '''allinnig''' herneumd wörden as de nieje naam niet besteet of t n deurverwiezing is zonder veerdere geschiedenisse.\nDit betekent da'j n zied weer naor de ouwe naam herneumen kunnen, a'j bieveurbeeld n fout emaakt hebben, zonder da'j de bestaonde zied overschrieven.\n\n'''WAORSCHUWING!'''\nVeur ziejen die vake bekeken wörden kan t herneumen drastiese en onveurziene gevolgen hebben.\nZörg derveur da'j de gevolgen overzien veurda'j veerder gaon.",
+ "movepagetalktext": "De overlegzied die derbie heurt krig oek n nieje titel, mer '''niet''' in de volgende gevallen:\n* As der al n niet-lege overlegzied besteet onder de aandere naam, of\n* A'j de opsie hieronder uutzetten.\n\nAs dat zo is dan mu'j de zied haandmaotig herneumen of samenvoegen.",
"movearticle": "Herneum",
"moveuserpage-warning": "'''Waorschuwing:''' Je staon op t punt um n gebrukerszied te herneumen. Allinnig disse zied zal herneumd wörden, '''niet''' de gebruker.",
"movenologintext": "Je mutten [[Special:UserLogin|an-emeld]] ween um de naam van n zied te wiezigen.",
@@ -1959,7 +1960,7 @@
"cant-move-user-page": "Je hebben gien rechten um gebrukersziejen te herneumen.",
"cant-move-to-user-page": "Je hebben gien rechten um n zied naor n gebrukerszied te herneumen. Herneumen naor n zied die deronder völt ma'j wel doon.",
"newtitle": "Nieje naam",
- "move-watch": "volg disse zied",
+ "move-watch": "Volg disse zied",
"movepagebtn": "Herneum",
"pagemovedsub": "Naamwieziging suksesvol",
"movepage-moved": "'''\"$1\" is ewiezigd naor \"$2\"'''",
@@ -1980,9 +1981,9 @@
"movesubpagetext": "De {{PLURAL:$1|zied die onder disse zied hank|$1 ziejen die onder disse zied hangen}} vie'j hieronder.",
"movenosubpage": "Onder disse zied hangen gien aandere ziejen.",
"movereason": "Reden:",
- "revertmove": "Weerummedreien",
+ "revertmove": "weerummedreien",
"delete_and_move": "Vortdoon en herneumen",
- "delete_and_move_text": "==Mut vortedaon wörden==\n<div style=\"color: red\"> Onder de nieje naam \"[[:$1]]\" besteet al n artikel. Wi'j t vortdoon um plaotse te maken veur t herneumen?</div>",
+ "delete_and_move_text": "==Mut vortedaon wörden==\n<div style=\"color: red\"> De zied \"[[:$1]]\" besteet al. Wi'j t vortdoon um te kunnen herneumen?</div>",
"delete_and_move_confirm": "Ja, disse zied vortdoon",
"delete_and_move_reason": "Vortedaon vanwegen de herneuming van \"[[$1]]\"",
"selfmove": "De naam kan niet ewiezigd wörden naor de naam die t al hef.",
@@ -2046,7 +2047,8 @@
"import": "Ziejen invoeren",
"importinterwiki": "Transwiki-invoer",
"import-interwiki-text": "Kies n wiki en ziednaam um in te voeren.\nVersie- en auteursgegevens blieven hierbie beweerd.\nAlle transwiki-invoerhaandelingen wörden op-esleugen in t [[Special:Log/import|invoerlogboek]].",
- "import-interwiki-source": "Bronwiki/zied:",
+ "import-interwiki-sourcewiki": "Bronwiki:",
+ "import-interwiki-sourcepage": "Bronzied:",
"import-interwiki-history": "Kopieer de hele geschiedenisse veur disse zied",
"import-interwiki-templates": "Alle mallen opnemen",
"import-interwiki-submit": "Invoeren",
@@ -2064,7 +2066,7 @@
"importcantopen": "Kon t invoerbestaand niet los doon",
"importbadinterwiki": "Foute interwikiverwiezing",
"importsuccess": "Invoeren suksesvol!",
- "importnosources": "Gien transwiki-invoerbronnen vastesteld en t drek inlaojen van versies is eblokkeerd.",
+ "importnosources": "Gien transwiki-invoerbronnen vastesteld en t drek oplaojen van versies is eblokkeerd.",
"importnofile": "Der is gien invoerbestaand op-estuurd.",
"importuploaderrorsize": "t Opsturen van t invoerbestaand is mislokt.\nt Bestaand is groter as de in-estelde limiet.",
"importuploaderrorpartial": "t Opsturen van t invoerbestaand is mislokt.\nt Bestaand is mer gedeeltelik an-ekeumen.",
@@ -2087,64 +2089,61 @@
"import-rootpage-nosubpage": "In de naamruumte \"$1\" van de baosiszied is t anmaken van onderziejen niet meugelik.",
"importlogpage": "Invoerlogboek",
"importlogpagetext": "Administratieve invoer van ziejen mit geschiedenisse van aandere wiki's.",
- "import-logentry-upload": "hef [[$1]] in-evoerd",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|versie|versies}}",
- "import-logentry-interwiki": "transwiki $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} van $2",
"javascripttest": "JavaScript testen",
- "javascripttest-title": "Tests uutvoeren veur $1",
"javascripttest-pagetext-noframework": "Disse zied is ereserveerd veur t uutvoeren van JavaScript-testen.",
"javascripttest-pagetext-unknownframework": "Onbekend testraamwark \"$1\".",
"javascripttest-pagetext-frameworks": "Kies een van de volgende testraamwarken: $1",
"javascripttest-pagetext-skins": "Kies n vormgeving um de tests mee uut te voeren:",
"javascripttest-qunit-intro": "Zie de [$1 testdokumentasie] op mediawiki.org.",
- "javascripttest-qunit-heading": "QUnit testsuite veur MediaWiki JavaScript",
- "tooltip-pt-userpage": "Oew gebroekersbladziede",
+ "tooltip-pt-userpage": "Oew gebroekersziede",
"tooltip-pt-anonuserpage": "Gebroekersbladziede vuur t IP-adres da'j broekt",
"tooltip-pt-mytalk": "Oew oaverlegbladziede",
"tooltip-pt-anontalk": "Oaverlegbladziede van n naamlozen gebroeker van dit IP-adres",
"tooltip-pt-preferences": "Miene vuurkeuren",
- "tooltip-pt-watchlist": "Lieste van bladzieden die op miene volglieste stoan",
+ "tooltip-pt-watchlist": "Lieste van zieden die op miene volglieste stoan",
"tooltip-pt-mycontris": "Liest van oew biejdraegen",
"tooltip-pt-login": "Iej wördt van harte oetneugd um oe an te melden as gebroeker, mer t is nich verplicht",
"tooltip-pt-logout": "Ofmaelden",
- "tooltip-ca-talk": "Loat n oaverlegtekst oaver disse bladziede zeen",
- "tooltip-ca-edit": "Bewaerk disse bladziede",
+ "tooltip-ca-talk": "Loat n oaverlegtekst oaver disse ziede zeen",
+ "tooltip-ca-edit": "Bewaerk disse ziede",
"tooltip-ca-addsection": "Niej oonderwaerp tovogen",
- "tooltip-ca-viewsource": "Disse bladziede is beveiligd taegen veraanderen. Iej könt wal kieken noar de bladziede",
- "tooltip-ca-history": "Oaldere versies van disse bladziede",
- "tooltip-ca-protect": "Beveilig disse bladziede taegen veraanderen",
- "tooltip-ca-unprotect": "De beveiliging vuur disse bladziede wiezigen",
- "tooltip-ca-delete": "Smiet disse bladziede vort",
- "tooltip-ca-undelete": "Haal n inhoald van disse bladziede oet n emmer",
- "tooltip-ca-move": "Gef disse bladziede nen aanderen titel",
- "tooltip-ca-watch": "Voog disse bladziede to an oewe volglieste",
- "tooltip-ca-unwatch": "Smiet disse bladziede van oewe voalglieste",
- "tooltip-search": "{{SITENAME}} duurzeukn",
- "tooltip-search-go": "Noar n bladziede mit disse naam goan as t besteet",
- "tooltip-search-fulltext": "Zeuk noar ziedn woar disse tekst in steet",
+ "tooltip-ca-viewsource": "Disse ziede is beveiligd taegen veraanderen. Iej könt wal kieken noar de ziede",
+ "tooltip-ca-history": "Oaldere versies van disse ziede",
+ "tooltip-ca-protect": "Beveilig disse ziede taegen veraanderen",
+ "tooltip-ca-unprotect": "De beveiliging vuur disse ziede wiezigen",
+ "tooltip-ca-delete": "Smiet disse ziede vort",
+ "tooltip-ca-undelete": "Haal n inhoald van disse ziede oet n emmer",
+ "tooltip-ca-move": "Gef disse ziede nen aanderen titel",
+ "tooltip-ca-watch": "Voog disse ziede to an oewe volglieste",
+ "tooltip-ca-unwatch": "Smiet disse ziede van oewe voalglieste",
+ "tooltip-search": "{{SITENAME}} duurzeuken",
+ "tooltip-search-go": "Noar n ziede mit disse naam goan as t besteet",
+ "tooltip-search-fulltext": "Zeuk noar zieden woar disse tekst in steet",
"tooltip-p-logo": "Goa noar t vuurblad",
"tooltip-n-mainpage": "Goa noar t vuurblad",
"tooltip-n-mainpage-description": "Goa noar t vuurblad",
"tooltip-n-portal": "Informoasie oaver t projekt: wel, wat, ho en woarum",
"tooltip-n-currentevents": "Achtergroondinformoasie oaver dinge in t niejs",
"tooltip-n-recentchanges": "Lieste van pas verrichte veraanderingen",
- "tooltip-n-randompage": "Loat ne willekeurige bladziede zeen",
+ "tooltip-n-randompage": "Loat ne willekeurige ziede zeen",
"tooltip-n-help": "Hölpinformoasie oaver {{SITENAME}}",
- "tooltip-t-whatlinkshere": "Lieste van alle bladzieden die hiernoar verwiezen",
- "tooltip-t-recentchangeslinked": "Pas verrichte veraanderingen die noar disse bladziede verwiezen",
- "tooltip-feed-rss": "RSS-voer vuur disse bladziede",
- "tooltip-feed-atom": "Atom-voer vuur disse bladziede",
+ "tooltip-t-whatlinkshere": "Lieste van alle zieden die hiernoar verwiezen",
+ "tooltip-t-recentchangeslinked": "Pas verrichte veraanderingen die noar disse ziede verwiezen",
+ "tooltip-feed-rss": "RSS-voer vuur disse ziede",
+ "tooltip-feed-atom": "Atom-voer vuur disse ziede",
"tooltip-t-contributions": "Lieste met biejdraegen van disse gebroeker",
"tooltip-t-emailuser": "Stuur disse gebroeker n netpostbericht",
+ "tooltip-t-info": "Meer informasie over disse zied",
"tooltip-t-upload": "Laad ofbeeldingen en/of geluudsmateriaal",
- "tooltip-t-specialpages": "Lieste van alle biejzeundere bladzieden",
- "tooltip-t-print": "De ofdrukboare versie van disse bladziede",
- "tooltip-t-permalink": "Verbeending vuur altied noar de versie van disse bladziede van vandaag-an-n-dag",
+ "tooltip-t-specialpages": "Lieste van alle biejzeundere zieden",
+ "tooltip-t-print": "De ofdrukboare versie van disse ziede",
+ "tooltip-t-permalink": "Verbeending vuur altied noar de versie van disse ziede van vandaag-an-n-dag",
"tooltip-ca-nstab-main": "Loat n tekst van t artikel zeen",
"tooltip-ca-nstab-user": "Loat de gebroekersbladziede zeen",
"tooltip-ca-nstab-media": "Loat n mediatekst zeen",
- "tooltip-ca-nstab-special": "Dit is ne biejzeundere bladziede die'j nich könt veraanderen",
+ "tooltip-ca-nstab-special": "Dit is ne biejzeundere ziede die'j nich könt veraanderen",
"tooltip-ca-nstab-project": "Loat de projektbladziede zeen",
"tooltip-ca-nstab-image": "Loat de bestaandsbladziede zeen",
"tooltip-ca-nstab-mediawiki": "Loat de systeemtekstbladziede zeen",
@@ -2156,13 +2155,13 @@
"tooltip-preview": "Bekiek oew versie vuurda'j t opsloan (anbeveulen)!",
"tooltip-diff": "Bekiek oew aegen wiezigingen",
"tooltip-compareselectedversions": "Bekiek de verschillen tussen de ekeuzen versies.",
- "tooltip-watch": "Voog disse bladziede to an oew volglieste",
+ "tooltip-watch": "Voog disse ziede to an oew volglieste",
"tooltip-watchlistedit-normal-submit": "Ziejen vortdoon",
"tooltip-watchlistedit-raw-submit": "Volglieste biewarken",
- "tooltip-recreate": "Disse bladziede opniej anmaken, ondanks t feit dat t vortdoan is.",
- "tooltip-upload": "Bestaanden tovogen",
- "tooltip-rollback": "Mit \"weerummedreien\" kö'j mit één klik de bewaerking(en) van n leste gebroeker dee disse bladziede bewaerkt hef terugdraeien.",
- "tooltip-undo": "A'j op \"weerummedreien\" klikken geet t bewaerkingsvaenster lös en kö'j ne vurige versie terugzetten.\nIej könt in de bewearkingssamenvatting n reden opgeven.",
+ "tooltip-recreate": "Disse ziede opniej anmaken, ondanks t feit dat t vortdoan is.",
+ "tooltip-upload": "Bestaanden opsturen",
+ "tooltip-rollback": "Mit \"weerummedreien\" kö'j mit één klik de bewaerking(en) van n leste gebroeker dee disse ziede bewaerkt hef terugdraeien.",
+ "tooltip-undo": "A'j op \"weerummedreien\" klikken geet t bewaerkingsvaenster lös en kö'j ne vurige versie terugzetten.\nIej könt in de bewaerkingssamenvatting n reden opgeven.",
"tooltip-preferences-save": "Vuurkeuren opsloan",
"tooltip-summary": "Voer ne korte samenvatting in",
"interlanguage-link-title": "$1 – $2",
@@ -2199,7 +2198,6 @@
"pageinfo-robot-policy": "Indexering deur bots",
"pageinfo-robot-index": "Toe-estaon",
"pageinfo-robot-noindex": "Niet toe-estaon",
- "pageinfo-views": "Antal keer bekeken",
"pageinfo-watchers": "Antal ziedvolgers",
"pageinfo-few-watchers": "Minder as {{PLURAL:$1|één volger|$1 volgers}}",
"pageinfo-redirects-name": "t Antal deurverwiezingen naor disse zied",
@@ -2647,7 +2645,6 @@
"exif-urgency-low": "Leeg ($1)",
"exif-urgency-high": "Hoog ($1)",
"exif-urgency-other": "Deur gebruker in-estelde prioriteit ($1)",
- "watchlistall2": "alles",
"namespacesall": "alles",
"monthsall": "alles",
"confirmemail": "Bevestig netpostadres",
@@ -2718,11 +2715,11 @@
"watchlistedit-raw-done": "Joew volglieste is bie-ewörken.",
"watchlistedit-raw-added": "Der {{PLURAL:$1|is 1 zied|bin $1 ziejen}} bie edaon:",
"watchlistedit-raw-removed": "Der {{PLURAL:$1|is 1 zied|bin $1 ziejen}} vortedaon:",
+ "watchlisttools-clear": "Volglieste leegmaken",
"watchlisttools-view": "Wiezigingen bekieken",
"watchlisttools-edit": "Volglieste bekieken en bewarken",
- "watchlisttools-raw": "Roewe volglieste bewarken",
+ "watchlisttools-raw": "Volglieste as tekstlieste bewarken",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|overleg]])",
- "unknown_extension_tag": "Onbekende tag \"$1\"",
"duplicate-defaultsort": "Waorschuwing: de standardsortering \"$2\" krig veurrang veur de sortering \"$1\".",
"version": "Versie",
"version-extensions": "Uutbreidingen die installeerd bin",
@@ -2739,9 +2736,13 @@
"version-parser-function-hooks": "Parserfunksiehoeken",
"version-hook-name": "Hooknaam",
"version-hook-subscribedby": "In-eschreven deur",
- "version-version": "(Versie $1)",
+ "version-version": "($1)",
"version-license": "MediaWiki-lisensie",
- "version-poweredby-credits": "Disse wiki wörden an-estuurd deur '''[https://www.mediawiki.org/ MediaWiki]''', auteursrecht © 2001-$1 $2.",
+ "version-ext-colheader-version": "Versie",
+ "version-ext-colheader-license": "Lisensie",
+ "version-ext-colheader-description": "Beschrieving",
+ "version-ext-colheader-credits": "Auteurs",
+ "version-poweredby-credits": "Disse wiki wördt an-estuurd deur '''[https://www.mediawiki.org/ MediaWiki]''', auteursrecht © 2001-$1 $2.",
"version-poweredby-others": "aanderen",
"version-poweredby-translators": "vertalers van translatewiki.net",
"version-credits-summary": "Wulen erkennen grege de volgende personen veur der biedrage an [[Special:Version|MediaWiki]].",
@@ -2754,7 +2755,7 @@
"version-entrypoints-header-url": "Webadres",
"redirect": "Deurverwiezen op bestaandsnaam, gebrukersnummer, ziednummer of versienummer",
"redirect-legend": "Deurverwiezen naor n bestaand of zied",
- "redirect-summary": "Disse spesiale zied verwis deur naor n bestaand (as de bestaandsnaam op-egeven wörden), n zied (as n zied- of versienummer op-egeven wörden) of n gebrukerszied (as t gebrukersnummer op-egeven wörden). Gebruuk: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], of [[{{#Special:Redirect}}/user/101]].",
+ "redirect-summary": "Disse spesiale zied verwis deur naor n bestaand (as de bestaandsnaam op-egeven wördt), n zied (as n zied- of versienummer op-egeven wördt) of n gebrukerszied (as t gebrukersnummer op-egeven wördt). Gebruuk: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], of [[{{#Special:Redirect}}/user/101]].",
"redirect-submit": "Zeuk",
"redirect-lookup": "Opzeuken:",
"redirect-value": "Weerde:",
@@ -2768,10 +2769,11 @@
"fileduplicatesearch-filename": "Bestaandsnaam:",
"fileduplicatesearch-submit": "Zeuken",
"fileduplicatesearch-info": "$1 × $2 beeldpunten<br />Bestaandsgrootte: $3<br />MIME-type: $4",
- "fileduplicatesearch-result-1": "Der bin gien bestaanden die liek alleens bin as \"$1\".",
- "fileduplicatesearch-result-n": "Der {{PLURAL:$2|is één bestaand|bin $2 bestaanden}} die liek alleens bin as \"$1\".",
+ "fileduplicatesearch-result-1": "Der bin gien bestaanden die gelieke bin an \"$1\".",
+ "fileduplicatesearch-result-n": "Der {{PLURAL:$2|is één bestaand|bin $2 bestaanden}} die gelieke bin an \"$1\".",
"fileduplicatesearch-noresults": "Der is gien bestaand mit de naam \"$1\" evunnen.",
"specialpages": "Spesiale ziejen",
+ "specialpages-note-top": "Legenda",
"specialpages-note": "* Normale spesiale ziejen.\n* <span class=\"mw-specialpagerestricted\">Beparkt toegankelike spesiale ziejen.</span>",
"specialpages-group-maintenance": "Onderhoudsliesten",
"specialpages-group-other": "Aandere spesiale ziejen",
@@ -2787,7 +2789,7 @@
"specialpages-group-spam": "Spam-hulpmiddels",
"blankpage": "Lege zied",
"intentionallyblankpage": "Disse zied is bewust leeg eleuten.",
- "external_image_whitelist": " #Laot disse regel onveraanderd<pre>\n#Hieronder kunnen delen van reguliere uutdrokkingen (t deel tussen //) an-egeven wörden.\n#t Wörden mit de webadressen van aofbeeldingen uut bronnen van butenof vergeleken\n#n Positief vergeliekingsresultaot zörgt derveur dat de aofbeelding weeregeven wörden, aanders wörden de aofbeelding allinnig as verwiezing weeregeven\n#Regels die mit n # beginnen, wörden as kommentaar behaandeld\n#De regels in de lieste bin niet heufdlettergeveulig\n\n#Delen van reguliere uutdrokkingen boven disse regel plaotsen. Laot disse regel onveraanderd</pre>",
+ "external_image_whitelist": " #Laot disse regel onveraanderd<pre>\n#Hieronder kunnen delen van reguliere uutdrokkingen (t deel tussen //) an-egeven wörden.\n#t Wördt mit de webadressen van aofbeeldingen uut bronnen van butenof vergeleken\n#n Positief vergeliekingsresultaot zörgt derveur dat de aofbeelding weeregeven wördt, aanders wördt de aofbeelding allinnig as verwiezing weeregeven\n#Regels die mit n # beginnen, wörden as kommentaar behaandeld\n#De regels in de lieste bin niet heufdlettergeveulig\n\n#Delen van reguliere uutdrokkingen boven disse regel plaotsen. Laot disse regel onveraanderd</pre>",
"tags": "Geldige wiezigingsetiketten",
"tag-filter": "[[Special:Tags|Etiketfilter]]:",
"tag-filter-submit": "Filtreren",
@@ -2853,6 +2855,8 @@
"revdelete-uname-unhid": "gebrukersnaam zichtbaor emaakt",
"revdelete-restricted": "hef beparkingen an beheerders op-eleg",
"revdelete-unrestricted": "hef beparkingen veur beheerders deraof ehaold",
+ "logentry-block-block": "$1 {{GENDER:$2|hef}} {{GENDER:$4|$3}} eblokkeerd veur de duur van $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|hef}} {{GENDER:$4|$3}} eblokkeerd veur de duur van $5 $6",
"logentry-move-move": "$1 hef de zied $3 {{GENDER:$2|herneumd}} naor $4",
"logentry-move-move-noredirect": "$1 hef de zied $3 {{GENDER:$2|herneumd}} naor $4 zonder n deurverwiezing achter te laoten",
"logentry-move-move_redir": "$1 hef de zied $3 {{GENDER:$2|herneumd}} naor $4 over n deurverwiezing heer",
@@ -2868,22 +2872,23 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|hef}} t groepslidmaotschap ewiezigd veur $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automaties bevorderd van $4 tot $5",
"rightsnone": "(gien)",
+ "revdelete-summary": "samenvatting bewarken",
+ "feedback-adding": "Joew kommentaar wörden op de zied ezet...",
+ "feedback-bugcheck": "Mooi! Kiek nao of t niet al één van de [$1 bekende problemen] is.",
+ "feedback-bugnew": "Ik heb t nao-ekeken. Meld n nieje programmafout",
"feedback-bugornote": "A'j zovere bin um n technies probleem nauwkeurig te beschrieven, [$1 meld dan n programmafout].\nAanders ku'j oek t eenvoudige formulier hieronder gebruken. Joew kommentaar zal op de zied \"[$3 $2]\" ezet wörden, samen mit joew gebrukersnaam en de webkieker die'j gebruken.",
- "feedback-subject": "Onderwarp:",
- "feedback-message": "Bericht:",
"feedback-cancel": "Aofbreken",
- "feedback-submit": "Kommentaar geven",
- "feedback-adding": "Joew kommentaar wörden op de zied ezet...",
+ "feedback-close": "Ree",
"feedback-error1": "Fout: onbekend resultaot uut de API",
"feedback-error2": "Fout: de bewarking is mislokt",
"feedback-error3": "Fout: gien reaksie van de API",
+ "feedback-message": "Bericht:",
+ "feedback-subject": "Onderwarp:",
+ "feedback-submit": "Opslaon",
"feedback-thanks": "Bedankt! Joew kommentaar is op de zied \"[$2 $1]\" ezet.",
- "feedback-close": "Ree",
- "feedback-bugcheck": "Mooi! Kiek nao of t niet al één van de [$1 bekende problemen] is.",
- "feedback-bugnew": "Ik heb t nao-ekeken. Meld n nieje programmafout",
"searchsuggest-search": "Zeuken / zuken / zuiken",
"searchsuggest-containing": "bevat...",
- "api-error-badaccess-groups": "Je maggen gien bestaanden in disse wiki inlaojen.",
+ "api-error-badaccess-groups": "Je maggen gien bestaanden in disse wiki oplaojen.",
"api-error-badtoken": "Interne fout: t token klopt niet.",
"api-error-copyuploaddisabled": "Bestaanden opsturen via n webadres is uutezet op disse server.",
"api-error-duplicate": "Der {{PLURAL:$1|steet al [$2 n bestaand]|staon al [$2 bestaanden]}} mit de zelfde inhoud in de wiki.",
@@ -2956,5 +2961,32 @@
"expand_templates_remove_comments": "Opmarking vorthaolen",
"expand_templates_remove_nowiki": "Etiketten <nowiki> in resultaot onderdrokken",
"expand_templates_generate_xml": "XML-parserboom bekieken",
- "expand_templates_preview": "Naokieken"
+ "expand_templates_preview": "Naokieken",
+ "pagelang-language": "Taal",
+ "mediastatistics": "Mediastaotistieken",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Video's",
+ "mediastatistics-header-multimedia": "Interaktieve media",
+ "special-characters-group-latin": "Latien",
+ "special-characters-group-latinextended": "Latien uutebreid",
+ "special-characters-group-ipa": "Internasionaal Klankeschrift",
+ "special-characters-group-symbols": "Symbolen",
+ "special-characters-group-greek": "Grieks",
+ "special-characters-group-cyrillic": "Kyrillies",
+ "special-characters-group-arabic": "Arabies",
+ "special-characters-group-arabicextended": "Arabies uutebreid",
+ "special-characters-group-persian": "Perzies",
+ "special-characters-group-hebrew": "Hebreeuws",
+ "special-characters-group-bangla": "Bengaals",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalees",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Laotiaans",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "liggend streepjen",
+ "special-characters-title-emdash": "gedachtenstreepjen",
+ "special-characters-title-minus": "minteken"
}
diff --git a/languages/i18n/nds.json b/languages/i18n/nds.json
index 109f0ff7..f8301c32 100644
--- a/languages/i18n/nds.json
+++ b/languages/i18n/nds.json
@@ -11,7 +11,8 @@
"Zylbath",
"לערי ריינהארט",
"아라",
- "Kolega2357"
+ "Kolega2357",
+ "Servien"
]
},
"tog-underline": "Verwies ünnerstrieken",
@@ -312,7 +313,11 @@
"virus-unknownscanner": "Unbekannten Virenscanner:",
"logouttext": "'''Du büst nu afmellt.'''\n\nDu kannst {{SITENAME}} nu anonym wiederbruken oder di ünner dissen oder en annern Brukernaam wedder <span class='plainlinks'>[$1 anmellen]</span>.\nDenk dor an, dat welk Sieden ünner Ümstänn noch jümmer so wiest warrn köönt, as wenn du anmellt weerst. Dat ännert sik, wenn du den Cache vun dien Browser leddig maakst.",
"yourname": "Dien Brukernaam",
+ "userlogin-yourname": "Brukernaam",
"yourpassword": "Dien Passwoort",
+ "userlogin-yourpassword": "Passwoort",
+ "userlogin-yourpassword-ph": "Passwoort ingeven",
+ "createacct-yourpassword-ph": "Passwoort ingeven",
"yourpasswordagain": "Passwoort nochmal ingeven",
"remembermypassword": "Mit dissen Browser duersam inloggen (för maximal $1 {{PLURAL:$1|Dag|Daag}})",
"yourdomainname": "Diene Domään:",
@@ -324,14 +329,18 @@
"logout": "Afmellen",
"userlogout": "Afmellen",
"notloggedin": "Nich anmellt",
+ "userlogin-joinproject": "Bi {{SITENAME}} anmellen",
"nologin": "Wenn du noch keen Brukerkonto hest, denn kannst di anmellen: $1.",
"nologinlink": "Brukerkonto inrichten",
"createaccount": "Nieg Brukerkonto anleggen",
"gotaccount": "Hest Du al en Brukerkonto? '''$1'''.",
"gotaccountlink": "Anmellen",
"userlogin-resetlink": "De Anmelldaten vergaten?",
+ "userlogin-resetpassword-link": "Passwoort vergeten?",
+ "userlogin-helplink2": "Hülp bi dat anmellen",
"createaccountmail": "över E-Mail",
"createaccountreason": "Grund:",
+ "createacct-submit": "Brukerkonto inrichten",
"badretype": "De beiden Passwöör stimmt nich övereen.",
"userexists": "Disse Brukernaam is al weg. Bitte söök di en annern ut.",
"loginerror": "Fehler bi dat Anmellen",
@@ -376,6 +385,10 @@
"login-abort-generic": "Dien Anmellen harr keen Spood. Dat is afbroken worrn.",
"loginlanguagelabel": "Spraak: $1",
"suspicious-userlogout": "Dien Anfraag, di aftomellen, worr aflehnt, wieldat se vermoodlich vun en Browser oder Cache-Proxy sennt worrn is, de nich mehr funkschoneert.",
+ "pt-login": "Anmellen",
+ "pt-login-button": "Anmellen",
+ "pt-createaccount": "Brukerkonto inrichten",
+ "pt-userlogout": "Afmellen",
"php-mail-error-unknown": "Unbekennten Fehler in PHP sien mail()-Funkschoon",
"user-mail-no-addy": "Versöch en E-Mail ahn E-Mail-Adress to sennen.",
"changepassword": "Passwoort ännern",
@@ -399,7 +412,6 @@
"passwordreset-email": "E-Mail-Adress:",
"changeemail": "E-Mail-Adress ännern",
"changeemail-newemail": "Nee E-Mail-Adress:",
- "changeemail-cancel": "Afbreken",
"bold_sample": "Fetten Text",
"bold_tip": "Fetten Text",
"italic_sample": "Kursiven Text",
@@ -609,7 +621,6 @@
"mergehistory-same-destination": "De Sied, vun de schaven warrt un op de schaven warrt, dröfft nich desülve wesen",
"mergehistory-reason": "Grund:",
"mergelog": "Tohoopföhr-Logbook",
- "pagemerge-logentry": "[[$1]] mit [[$2]] tohoopföhrt (Versionen bet $3)",
"revertmerge": "Tohoopbringen trüchdreihn",
"mergelogpagetext": "Dit is dat Logbook över de tohoopföhrten Versionshistorien.",
"history-title": "Verschoonsgeschicht vun „$1“",
@@ -651,7 +662,6 @@
"searchrelated": "verwandt",
"searchall": "all",
"showingresults": "Hier {{PLURAL:$1|is een Resultat|sünd '''$1''' Resultaten}}, anfungen mit #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Resultaat '''$1''' vun '''$3'''|Resultaten '''$1 - $2''' vun '''$3'''}} för '''$4'''",
"search-nonefound": "För de Söökanfraag geev dat keen Resultaten.",
"powersearch-legend": "Betere Söök",
"powersearch-ns": "Söök in Naamrüüm:",
@@ -708,7 +718,7 @@
"timezoneregion-indian": "Indisch Ozean",
"timezoneregion-pacific": "Pazifisch Ozean",
"allowemail": "Nettbreven vun annere Brukers annehmen",
- "prefs-searchoptions": "Söökopschonen",
+ "prefs-searchoptions": "Söken",
"prefs-namespaces": "Naamrüüm",
"default": "Standard",
"prefs-files": "Datein",
@@ -718,7 +728,7 @@
"prefs-reset-intro": "Du kannst disse Sied bruken, dien Instellungen al op de Standardinstellung trüchtosetten.\nDat kann nich wedder ungeschehn maakt warrn.",
"prefs-emailconfirm-label": "E-Mail-Bestätigung:",
"youremail": "Dien E-Mail (kene Plicht) *",
- "username": "Brukernaam:",
+ "username": "{{GENDER:$1|Brukernaam}}:",
"prefs-memberingroups": "Liddmaten vun de {{PLURAL:$1|Grupp|Gruppen}}:",
"prefs-registration": "Tied vun dat Anmellen:",
"yourrealname": "Dien echten Naam (kene Plicht)",
@@ -1071,7 +1081,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Siedenstatistik",
"statistics-header-edits": "Änner-Statistik",
- "statistics-header-views": "Siedenweddergaav-Statistik",
"statistics-header-users": "Brukerstatistik",
"statistics-header-hooks": "Annere Statistiken",
"statistics-articles": "Inholtssieden",
@@ -1080,12 +1089,9 @@
"statistics-files": "Hoochlaadt Datein",
"statistics-edits": "Ännern, siet dat {{SITENAME}} gifft",
"statistics-edits-average": "Dörsnittlich Ännern je Sied",
- "statistics-views-total": "Weddergeven Sieden alltohoop",
- "statistics-views-peredit": "Weddergeven Sieden je Ännern",
"statistics-users": "Anmellt [[Special:ListUsers|Brukers]]",
"statistics-users-active": "Aktive Brukers",
"statistics-users-active-desc": "Brukers, de {{PLURAL:$1|in de vergahn 24 Stünnen|in de vergahn $1 Daag}} wat daan hebbt",
- "statistics-mostpopular": "opmehrst ankekene Sieden",
"pageswithprop-submit": "Los",
"doubleredirects": "Dubbelte Wiederleiden",
"doubleredirectstext": "<b>Wohrscho:</b> Disse List kann „falsche Positive“ bargen.\nDat passeert denn, wenn en Wiederleiden blangen de Wiederleiden-Verwies noch mehr Text mit annere Verwiesen hett.\nDe schallen denn löscht warrn. Elk Reeg wiest de eerste un tweete Wiederleiden un de eerste Reeg Text ut de Siet,\nto den vun den tweeten Wiederleiden wiest warrt, un to den de eerste Wiederleiden mehrst wiesen schall.",
@@ -1115,7 +1121,6 @@
"uncategorizedtemplates": "Vörlagen ahn Kategorie",
"unusedcategories": "Kategorien ahn insorteerte Artikels oder Ünnerkategorien",
"unusedimages": "Weetbiller",
- "popularpages": "Faken opropene Sieden",
"wantedcategories": "Kategorien, de veel bruukt warrt, aver noch keen Text hebbt (nich anleggt sünd)",
"wantedpages": "Sieden, de noch fehlt",
"wantedpages-badtitle": "Ungülligen Titel in Resultaat: $1",
@@ -1159,7 +1164,7 @@
"suppress": "Oversight",
"booksources": "Bookhannel",
"booksources-search-legend": "Na Böker bi Bookhökers söken",
- "booksources-go": "Los",
+ "booksources-search": "Söken",
"booksources-text": "Hier staht Lenken na Websteden, woneem dat Böker to köpen gifft, de mitünner ok mehr Informatschonen to dat Book anbeden doot:",
"booksources-invalid-isbn": "Süht ut, as wenn de angeven ISBN ungüllig is. Villicht hett dat en Fehler bi’t Afschrieven oder Koperen geven.",
"specialloguserlabel": "Bruker:",
@@ -1266,7 +1271,7 @@
"wlheader-enotif": "Benarichtigen per E-Mail is anstellt.",
"wlheader-showupdated": "Sieden, de siet dien letzten Besöök ännert worrn sünd, warrt '''fett''' wiest.",
"wlnote": "Ünnen {{PLURAL:$1|steiht de letzte Ännern|staht de letzten $1 Ännern}} vun de {{PLURAL:$2|letzte Stünn|letzten '''$2''' Stünnen}}.",
- "wlshowlast": "Wies de letzten $1 Stünnen $2 Daag $3",
+ "wlshowlast": "Wies de letzten $1 Stünnen $2 Daag",
"watchlist-options": "Optionen för de Oppasslist",
"watching": "warrt op de Oppasslist ropsett...",
"unwatching": "warrt vun de Oppasslist rünnernahmen...",
@@ -1302,7 +1307,6 @@
"delete-toobig": "Disse Siet hett en temlich lange Versionsgeschicht vun mehr as {{PLURAL:$1|ene Version|$1 Versionen}}. Dat Wegsmieten kann de Datenbank vun {{SITENAME}} för längere Tied utlasten un den Bedriev vun dat Wiki stöörn.",
"delete-warning-toobig": "Disse Siet hett en temlich lange Versionsgeschicht vun mehr as {{PLURAL:$1|ene Version|$1 Versionen}}. Dat Wegsmieten kann de Datenbank vun {{SITENAME}} för längere Tied utlasten un den Bedriev vun dat Wiki stöörn.",
"rollback": "Trüchnahm vun de Ännern",
- "rollback_short": "Trüchnehmen",
"rollbacklink": "Trüchnehmen",
"rollbackfailed": "Trüchnahm hett kenen Spood",
"cantrollback": "De Ännern kann nich trüchnahmen warrn; de letzte Autor is de eenzige.",
@@ -1609,7 +1613,6 @@
"import": "Import vun Sieden",
"importinterwiki": "Transwiki-Import",
"import-interwiki-text": "Wähl en Wiki un en Siet för dat Importeren ut.\nDe Versionsdaten un Brukernaams blievt dor bi vörhannen.\nAll Transwiki-Import-Akschonen staht later ok in dat [[Special:Log/import|Import-Logbook]].",
- "import-interwiki-source": "Bornwiki/sied:",
"import-interwiki-history": "Importeer all Versionen vun disse Siet",
"import-interwiki-templates": "All Vörlagen inslaten",
"import-interwiki-submit": "Rinhalen",
@@ -1640,9 +1643,7 @@
"import-invalid-interwiki": "Ut dat angevene Wiki is en Import nich mööglich.",
"importlogpage": "Import-Logbook",
"importlogpagetext": "Administrativen Import vun Sieden mit Versionsgeschicht vun annere Wikis.",
- "import-logentry-upload": "hett „[[$1]]“ ut Datei importeert",
"import-logentry-upload-detail": "{{PLURAL:$1|ene Version|$1 Versionen}}",
- "import-logentry-interwiki": "hett „$1“ importeert (Transwiki)",
"import-logentry-interwiki-detail": "{{PLURAL:$1|ene Version|$1 Versionen}} vun $2",
"tooltip-pt-userpage": "Dien Brukersied",
"tooltip-pt-anonuserpage": "De Brukersiet för de IP-Adress ünner de du schriffst",
@@ -2023,7 +2024,6 @@
"exif-iimcategory-sci": "Wetenschap un Technologie",
"exif-iimcategory-spo": "Sport",
"exif-iimcategory-wea": "Wedder",
- "watchlistall2": "alle",
"namespacesall": "alle",
"monthsall": "alle",
"confirmemail": "Nettbreefadress bestätigen",
@@ -2092,7 +2092,6 @@
"watchlisttools-edit": "Oppasslist ankieken un ännern",
"watchlisttools-raw": "Oppasslist as Textlist ännern",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskusschoon]])",
- "unknown_extension_tag": "Unbekannt Extension-Tag „$1“",
"duplicate-defaultsort": "Wohrschau: De DEFAULTSORTKEY „$2“ överschrifft den vörher bruukten Slötel „$1“.",
"version": "Version",
"version-extensions": "Installeerte Extensions",
@@ -2106,7 +2105,7 @@
"version-parser-function-hooks": "Parser-Funkschonen",
"version-hook-name": "Hook-Naam",
"version-hook-subscribedby": "Opropen vun",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-license": "Lizenz",
"version-poweredby-credits": "Dit Wiki bruukt '''[https://www.mediawiki.org/ MediaWiki]''', Copyright © 2001–$1 $2.",
"version-poweredby-others": "annere",
@@ -2136,6 +2135,7 @@
"specialpages-group-wiki": "Systemdaten un Warktüüch",
"specialpages-group-redirects": "Redirect-Spezialsieden",
"specialpages-group-spam": "Spam-Warktüüch",
+ "specialpages-group-developer": "Developer-Warktüüch",
"blankpage": "Leddige Sied",
"intentionallyblankpage": "Disse Sied is mit Afsicht leddig.",
"external_image_whitelist": " #Disse Reeg nich ännern<pre>\n#Ünnen köönt Delen vun reguläre Utdrück (de Deel twischen de //) angeven warrn.\n#De warrt mit de URLs vun Biller ut externe Borns vergleken\n#En positiv Vergliek föhrt dorto, dat dat Bild wiest warrt, ans warrt dat Bild blot as Lenk wiest\n#Regen, de mit en # anfangt, warrt as Kommentar behannelt\n#De List maakt keen Ünnerscheed bi grote un lütte Bookstaven\n\n#Delen vun reguläre Utdrück na disse Reeg indragen. Disse Reeg nich ännern</pre>",
@@ -2176,7 +2176,11 @@
"sqlite-no-fts": "$1 ahn Stöhn för Vulltext-Söök",
"revdelete-restricted": "Inschränkungen för Administraters instellt",
"revdelete-unrestricted": "Inschränkungen för Administraters rutnahmen",
+ "logentry-block-block": "$1 {{GENDER:$2|block}} {{GENDER:$4|$3}} för en Tiedruum vun $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|block}} {{GENDER:$4|$3}} för en Tiedruum vun $5 $6",
"rightsnone": "(kene)",
+ "revdelete-summary": "Tosamenfaten",
+ "searchsuggest-search": "Söken",
"expandtemplates": "Vörlagen oplösen",
"expand_templates_intro": "Mit disse Spezialsied köönt Vörlagen in ingeven Text in Wikitext ümwannelt warrn.\nOk Parserfunkschonen so as\n<nowiki>{{</nowiki>#language:…}}, un Variabeln so as\n<nowiki>{{</nowiki>CURRENTDAY}} warrt ümwannelt. Also so temlich allens, wat twischen swiefte Klammern steit.\nDorto warrt de nödigen Parser-Phasen in MediaWiki direkt opropen.",
"expand_templates_title": "Kontexttitel, för {{FULLPAGENAME}} etc.:",
diff --git a/languages/i18n/ne.json b/languages/i18n/ne.json
index 80dca86c..6e78ef2a 100644
--- a/languages/i18n/ne.json
+++ b/languages/i18n/ne.json
@@ -14,7 +14,10 @@
"Reedy",
"ne.wikipedia.org sysops",
"सरोज कुमार ढकाल",
- "아라"
+ "아라",
+ "Steinsplitter",
+ "Macofe",
+ "बिप्लब आनन्द"
]
},
"tog-underline": "सम्बन्ध निम्न रेखाङ्कन:",
@@ -41,7 +44,7 @@
"tog-shownumberswatching": "निगरानी गरिरहेका प्रयोगकर्ताहरुको संख्या देखाउने",
"tog-oldsig": "वर्तमान हस्ताक्षर:",
"tog-fancysig": "मेरो दस्तखतलाई विकि पाठको रुपमा लिने(स्वत सम्वन्ध बिना)",
- "tog-uselivepreview": "प्रत्यक्ष पूर्वरुप प्रयोग गर्नुहोस् (प्रयोगात्मक)",
+ "tog-uselivepreview": "प्रत्यक्ष पूर्वरुप प्रयोग गर्नुहोस",
"tog-forceeditsummary": "खाली सम्पादन सार प्रविष्टि गरेमा मलाई सोध्ने",
"tog-watchlisthideown": "मेरा सम्पादनहरू निगनारी सूचीबाट लुकाउने",
"tog-watchlisthidebots": "बोट सम्पादनहरू निगरानी सूचीबाट लुकाउने",
@@ -89,10 +92,10 @@
"october": "अक्टोबर",
"november": "नोभेम्बर",
"december": "डिसेम्बर",
- "january-gen": "जेनवरी",
+ "january-gen": "जनवरी",
"february-gen": "फेब्रुअरी",
"march-gen": "मार्च",
- "april-gen": "एप्रील",
+ "april-gen": "अप्रिल",
"may-gen": "मे",
"june-gen": "जुन",
"july-gen": "जुलाई",
@@ -176,11 +179,11 @@
"history_short": "पृष्ठको इतिहास",
"updatedmarker": "मेरो अन्तिम भ्रमण पछि अद्यतन गरिएको",
"printableversion": "छाप्नयोग्य संस्करण",
- "permalink": "स्थायीलिङ्क",
+ "permalink": "स्थायी लिङ्क",
"print": "छाप्नुहोस्",
"view": "अवलोकन गर्ने",
"view-foreign": " $1 हेर्नुहोस",
- "edit": "परिवर्तन",
+ "edit": "सम्पादन",
"edit-local": "स्थानिय वर्णन सम्पादन गर्नुहोस्",
"create": "सृजना गर्नुहोस्",
"create-local": "स्थानीय वर्णन थप्नुहोस",
@@ -216,6 +219,7 @@
"otherlanguages": "अरु भाषामा",
"redirectedfrom": "($1 बाट पठाइएको)",
"redirectpagesub": "अनुप्रेषित पृष्ठ",
+ "redirectto": "अनुप्रेषित पृष्ठ:",
"lastmodifiedat": "यो पृष्ठलाई अन्तिमपटक $2, $1 मा परिवर्तन गरिएको थियो।",
"viewcount": "यो पृष्ठ हेरिएको थियो {{PLURAL:$1|एकपटक|$1 पटक}}",
"protectedpage": "सुरक्षित गरिएका पृष्ठहरू",
@@ -236,8 +240,9 @@
"disclaimers": "अस्विकारोक्तिहरु",
"disclaimerpage": "Project:सामान्य अस्वीकारोक्ति",
"edithelp": "सम्पादन सहायता",
- "mainpage": "मुख्य पृष्ठ",
- "mainpage-description": "मुख्य पृष्ठ",
+ "helppage-top-gethelp": "सहायता",
+ "mainpage": "गृह पृष्ठ",
+ "mainpage-description": "गृह पृष्ठ",
"policy-url": "Project:निति",
"portal": "सामाजिक पोर्टल",
"portal-url": "Project:सामाजिक पोर्टल",
@@ -270,6 +275,9 @@
"hidetoc": "लुकाउनुहोस्",
"collapsible-collapse": "खुम्च्याउने",
"collapsible-expand": "फैलाउ",
+ "confirmable-confirm": "तपाईं {{GENDER:$1|लिङ्ग}} हो?",
+ "confirmable-yes": "हो",
+ "confirmable-no": "होइन",
"thisisdeleted": "$1 हेर्ने या पूर्वरुपमा फर्काउने हो ?",
"viewdeleted": "$1 हेर्ने ?",
"restorelink": "{{PLURAL:$1|एक मेटिएको सम्पादन |$1 मेटिएका सम्पादनहरू}}",
@@ -410,7 +418,7 @@
"createacct-benefit-heading": "{{SITENAME}} तपाईँ जस्तै मानिसहरूद्वारा सिर्जना गरिएको हो ।",
"createacct-benefit-body1": "{{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
"createacct-benefit-body2": "{{PLURAL:$1|पृष्ठ|पृष्ठहरू}}",
- "createacct-benefit-body3": "हालैका {{PLURAL:$1|योगदान कर्ता|योगदान कर्ताहरू}}",
+ "createacct-benefit-body3": "हालैका {{PLURAL:$1|योगदानकर्ता|योगदानकर्ताहरू}}",
"badretype": "तपाईंले दिनुभएको पासवर्ड मिल्दैन।",
"userexists": "तपाईले प्रविष्ट गर्नुभएको प्रयोगकर्ताको नाम पहिले देखिनै प्रयोगमा छ ।\nकृपया फरक नाम छान्नुहोस् ।",
"loginerror": "प्रवेश त्रुटि",
@@ -458,7 +466,7 @@
"login-abort-generic": "तपाईंको प्रवेश असफल भयो - छोड़ियो",
"loginlanguagelabel": "भाषा: $1",
"suspicious-userlogout": "तपाईंको निर्गमन अनुरोध अस्विकार गरिन्छ किन कि यो खराब ब्राउजर वा क्यासिङ प्रोक्सिले पठाएको जस्तो देखिन्छ।",
- "pt-login": "प्रवेश",
+ "pt-login": "प्रवेश (लग ईन)",
"pt-login-button": "प्रवेश",
"pt-createaccount": "खाता खोल्नुहोस्",
"pt-userlogout": "निर्गमन (लग आउट)",
@@ -494,14 +502,14 @@
"passwordreset-emailsent": "पासवर्ड परिवर्तनको लागि इमेल पठाइएको छ।",
"passwordreset-emailsent-capture": "पासवर्ड परिवर्तनको लागि इमेल पठाइयो, जुन तल देखाइएकोछ।",
"changeemail": "इमेल ठेगाना परिवर्तन गर्नुहोस",
- "changeemail-header": "खाताको इमेल ठेगाना परिवर्तन गर्नुहोस",
"changeemail-text": "आफ्नो इमेल ठेगाना परिवर्तन गर्न यो फारम भर्नुहोस। यसलाई पुष्टि गर्न तपाईले आफ्नो पासवर्ड हाल्नु पर्नेछ।",
"changeemail-no-info": "यस पृष्ठमा सिधै जानको लागि प्रवेश गर्नु पर्ने हुन्छ ।",
"changeemail-oldemail": "हालको इमेल-ठेगाना:",
"changeemail-newemail": "नयाँ इमेल-ठेगाना:",
"changeemail-none": "(कुनै पनि हैन)",
+ "changeemail-password": "तपाईंको {{SITENAME}} पासवर्ड:",
"changeemail-submit": "इमेल परिवर्तन गर्ने",
- "changeemail-cancel": "रद्द गर्ने",
+ "changeemail-throttled": "तपाईंले भर्खरै धेरै पल्ट प्रवेशको निम्ति प्रयास गर्नुभएको छ।\nकृपया $1 पर्खेर मात्र प्रयास गर्नुहोस्।",
"resettokens": "टोकन पूर्वरुपमा फर्काउने",
"resettokens-no-tokens": "पूर्वरुपमा फर्काउन कुनै पनि टोकन छैन ।",
"resettokens-legend": "टोकनहरू पूर्वरुपमा फर्काउने",
@@ -517,8 +525,8 @@
"extlink_tip": "बाह्य लिङ्क (सम्झनुहोस् http:// prefix)",
"headline_sample": "शीर्षक अक्षर",
"headline_tip": "दोस्रो स्तर शीर्षपंक्ति",
- "nowiki_sample": "प्रारुप नभएको पाठ यहाँ दिनुहोस्",
- "nowiki_tip": "विकि फरम्याटिङ्लाइ वास्ता नगर्ने (इग्नोर गर्ने)",
+ "nowiki_sample": "प्रारुप नभएको पाठ यहाँ दिनुहोस्",
+ "nowiki_tip": "विकि फरम्याटिङ्लाई वास्ता नगर्ने",
"image_sample": "उदाहरण.jpg",
"image_tip": "इम्बेडेड(जडान गरिएको) फाइल",
"media_sample": "उदाहरण.ogg",
@@ -529,11 +537,11 @@
"subject": "विषय/शीर्षक:",
"minoredit": "यो सानो सम्पादन हो",
"watchthis": "यो पृष्ठ अवलोकन गर्नुहोस्",
- "savearticle": "संग्रह गर्ने",
+ "savearticle": "सङ्ग्रह गर्ने",
"preview": "पूर्वावलोकन",
"showpreview": "पूर्वालोकन देखाउनुहोस्",
"showdiff": "परिवर्तन देखाउनुहोस्",
- "anoneditwarning": "'''चेतावनी:''' तपाईँले प्रवेश गर्नु भएको छैन।\nतपाईँको IP ठेगाना पृष्ठसम्पादन इतिहासमा दर्तागरिने छ ।",
+ "anoneditwarning": "<strong>चेतावनी:</strong> तपाईँले प्रवेश गर्नु भएको छैन । तपाईँको आइपि ठेगाना पृष्ठ सम्पादन इतिहासमा दर्ता गरिने छ र यो सबैले हेर्न सक्छन । यदि तपाईं <strong>[$1 लगईन]</strong> वा <strong>[$2 नयाँ खाता बनाउने] गर्नुभयो भने तपाईंद्वारा गरिएको सम्पादन तपाईंको प्रयोगकर्तानाममा जोडिनेछ।",
"anonpreviewwarning": "''तपाईंले प्रवेश गर्नु भएको छैन। संग्रह (Save) गरेको खण्डमा पृष्ठको इतिहासमा तपाईंको IP ठेगाना अंकित गरिनेछ।''",
"missingsummary": "'''यादगर्नुहोस् :''' तपाईले सम्पादन सारांश दिनुभएको छैन ।\nयदि तपाईले संग्रहगर्नुहोस् थिच्नुभयो भने , सारांश बिना नै संग्रहित गरिने छ ।",
"missingcommenttext": "कृपया टिप्पणी प्रविष्ठ गर्नुहोस् ।",
@@ -572,6 +580,7 @@
"updated": "नवीन",
"note": "'''सूचना:'''",
"previewnote": "'''याद राख्नुहोस् यो केवल पूर्वावलोकन मात्र हो; तपाईंका परिवर्तनहरू संग्रहित भएका छैनन्!'''",
+ "continue-editing": "सम्पादन क्षेत्रमा जानुहोस",
"previewconflict": "यस पूर्वावलोकनले संपादन क्षेत्र को माथिल्लो भागको पाठ परिवर्तन गर्ने ठाउँको पाठलाइ देखाउँछ अनि तपाइले यसलाइ सेभ गरेपछि देखापर्छ।",
"session_fail_preview": "'''माफ गर्नुहोस्! सत्र-आँकड़ा (session data) हराउनाले हामीले तपाईंको सम्पादन प्रक्रिया अघि बढाउन सकेनौं।.'''\nकृपया पुनः प्रयास गर्नुहोस्।\nयदि फेरि पनि काम भएन भनें, [[Special:UserLogout|बाहिर गई(लग आउट गरी)]] फेरि प्रवेश गर्नुहोस्।",
"session_fail_preview_html": "'''माफ गर्नुहोला! सत्र को डेटा को नोकसान को कारण ले गर्दा तपाइको सम्पादन लाइ जारी राख्न सकिएन।'''\n\n''जावास्क्रिप्ट हमलाहरु रोक्नको लागि यो पूर्वावलोकन लाइ देखाइएको छैन किन कि {{SITENAME}} मा काँचो HTML को प्रयोग गर्न मिल्ने बनाइएको छ।''\n\n'''यदि यो एक वैध प्रयास हो भने, कृपया पुन: प्रयास गर्नुहोला.'''\nयदि अझै पनि काम गरेन भने [[Special:UserLogout|निर्गमन(logging out)]] र पुन:आगमन(login) गर्ने प्रयास गर्नुहोला।",
@@ -648,11 +657,11 @@
"currentrev": "हालको संस्करण",
"currentrev-asof": "$1को रुपमा हालको पुनरावलोकनहरु",
"revisionasof": "$1 जस्तै गरी पुनरावलोकन",
- "revision-info": "$2द्वारा $1को संशोधन",
+ "revision-info": "{{GENDER:$6|$2}}$7 द्वारा $1को संशोधन",
"previousrevision": "← पुरानो संशोधन",
"nextrevision": "नयाँ संशोधन →",
"currentrevisionlink": "हालको पुनरावलोकन",
- "cur": "cur पृष्ठको लिंक इतिहास",
+ "cur": "वर्तमान पृष्ठको लिङ्क इतिहास",
"next": "अर्को",
"last": "अघिल्लो",
"page_first": "पहिलो",
@@ -670,7 +679,7 @@
"history-feed-empty": "अनुरोध गरिएको पृष्ठ छैन।\nविकिबाट यो मेटिएको अथवा यसको नयाँ नाम राखिएको हुनसक्छ।\nप्रासंगिक नयाँ पृष्ठकोलागि [[Special:Search|विकिमा खोज्नुहोस्]]।",
"rev-deleted-comment": "(सम्पादन सारांश हटाइयो)",
"rev-deleted-user": "(प्रयोगकर्ता नाम हटाइयो)",
- "rev-deleted-event": "(लग कार्य हटाइयो)",
+ "rev-deleted-event": "(लग विवरण हटाइयो)",
"rev-deleted-user-contribs": "[प्रयोगकर्ताको नाम अथवा IP ठेगाना हटाइयो - योगदानहरुबाट सम्पादन लुकाइयो]",
"rev-deleted-text-permission": "यस पृष्ठको पुनरावलोकन '''मेटिएकोछ'''।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटिएको लगमा पाउन सकिन्छ]।",
"rev-deleted-text-unhide": "यस पृष्ठको संशोधन '''मेटिएकोछ'''।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} को मेटिएको लगमा पाउन सकिन्छ].\nयदि चाहनु भयो भनें [$1 संशोधन हेर्न] सक्नुहुन्छ।",
@@ -694,7 +703,7 @@
"revdelete-legend": "दृष्टि बन्देज मिलाउने",
"revdelete-hide-text": "पुनरावलोकन पाठ",
"revdelete-hide-image": "फाइल कमेन्ट लुकाउने",
- "revdelete-hide-name": "कार्य र गन्तब्य लुकाउने",
+ "revdelete-hide-name": "कार्य र प्यारामिटर लुकाउने",
"revdelete-hide-comment": "सम्पादन टिप्पणी",
"revdelete-hide-user": "सम्पादकको प्रयोगकर्ता नाम/IP ठेगाना",
"revdelete-hide-restricted": "प्रवन्धक वा अरुबाट डेटा कम लिने",
@@ -725,7 +734,7 @@
"revdelete-edit-reasonlist": "मेट्ने कार्यहरु सम्पादन गर्ने",
"revdelete-offender": "संशोधन कर्ता:",
"suppressionlog": "कमगरेको लग",
- "suppressionlogtext": "मेट्नको र रोककको निम्ती निम्न सुची रहेको छ जसमा प्रवन्धकबाट लुकाइएका सामग्री समेत रहेका छन।\nकृपया हाल प्रयोगमा रहेका रोक र रोकावटको सुचीका लागि[[Special:BlockList|IP रोक सुची]] हेर्नुहोला ।",
+ "suppressionlogtext": "मेट्न र रोक्नका निमित्त निम्न सुची रहेको छ जसमा प्रवन्धकबाट लुकाइएका सामग्री समेत रहेका छन।\nकृपया हाल प्रयोगमा रहेका रोक र रोकावटको सुचीका लागि [[Special:BlockList|रोक सुची]] हेर्नुहोला।",
"mergehistory": "पृष्ठ इतिहासहरु मिसाउने",
"mergehistory-box": "दुई पृष्ठहरुको पुनरावलोकन जोड्नुहोस् :",
"mergehistory-from": "स्रोत पृष्ठ:",
@@ -745,10 +754,11 @@
"mergehistory-same-destination": "स्रोत र गन्तव्य पृष्ठ एउटै हुनसक्दैनन्",
"mergehistory-reason": "कारण :",
"mergelog": "जोडेको लग",
- "pagemerge-logentry": "[[$1]] लाई [[$2]] मा जोडियो ( $3 सम्म पुनरावलोकन)",
"revertmerge": "नमिलाउने",
"mergelogpagetext": "एउटा पृष्ठको इतिहास अर्कोमा भर्खरै मिलाइएको सूची तल दिइन्छ।",
"history-title": "\"$1\" को पुनरावृत्ति इतिहास",
+ "difference-title": "\"$1\" को बिचमा भिन्नता",
+ "difference-title-multipage": "\"$1\" तथा \"$2\" को बिचमा भिन्नता",
"difference-multipage": "(पृष्ठहरूमा भिन्नता)",
"lineno": "पंक्ति $1:",
"compareselectedversions": "छानिएका संस्करणहरू दाँज्नुहोस्",
@@ -763,24 +773,28 @@
"notextmatches": "अक्षरस् पेज भेटिएन",
"prevn": "पहिलेको {{PLURAL:$1|$1}}",
"nextn": "अर्को {{PLURAL:$1|$1}}",
+ "prev-page": "अघिल्लो पृष्ठ",
+ "next-page": "अर्को पृष्ठ",
"prevn-title": "पहिलेको $1 {{PLURAL:$1|नतिजा|नतिजाहरु}}",
"nextn-title": "यस पछिको $1 {{PLURAL:$1|नतिजा |नतिजाहरु}}",
"shown-title": "देखाउने $1 {{PLURAL:$1|नतिजा|नतिजाहरु}} प्रति पृष्ठ",
"viewprevnext": "हेर्नुहोस् ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "''' \"[[:$1]]\" नाम गरेको पृष्ठ यो विकीमा रहेको छ'''",
- "searchmenu-new": "'''यस विकिमा \"[[:$1]]\" शीर्षक भएको पृष्ठ बनाउनुहोस् !'''",
+ "searchmenu-new": "<strong>\"[[:$1]]\" पृष्ठ यस विकिमा बनाउनुहोस्!</strong> {{PLURAL:$2|0=|तपाईंले खोज गरी भटिएको पृष्ठ पनि मिलान गर्नुहोस्।|तपाईंको खोज परिणाम पनि हेर्नुहोस।}}",
"searchprofile-articles": "सामग्री पृष्ठहरू",
"searchprofile-images": "मल्टिमिडिया(श्रव्य दृश्य)",
"searchprofile-everything": "सब थोक",
"searchprofile-advanced": "उन्नत",
"searchprofile-articles-tooltip": "$1 मा खोज्ने",
"searchprofile-images-tooltip": "फाइलहरु खोज्ने",
- "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने(वार्तालाप समेत )",
+ "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने (वार्तालाप समेत )",
"searchprofile-advanced-tooltip": "अनुकुल नेमस्पेसमा खोज्ने",
"search-result-size": "$1 ({{PLURAL:$2|1 शव्द|$2 शव्दहरु}})",
"search-result-category-size": "{{PLURAL:$1|एक सदस्य|$1 सदस्यहरु}} ({{PLURAL:$2|1 उपश्रेणी|$2 उपश्रेणीहरु}}, {{PLURAL:$3|एउटा फाइल|$3 फाइलहरु}})",
"search-redirect": "(जाने $1)",
"search-section": "(खण्ड $1)",
+ "search-category": "(श्रेणी $1)",
+ "search-file-match": "(भेटिएका फाइल सामाग्री)",
"search-suggest": "के तपाईको खोजाई : $1 हो?",
"search-interwiki-caption": "भगिनी आयोजना",
"search-interwiki-default": "$1देखिका नतिजाहरू:",
@@ -789,7 +803,6 @@
"searchrelated": "सम्बन्धित",
"searchall": "सबै",
"showingresults": "देखाउँदै {{PLURAL:$1|'''१''' नतिजा|'''$1''' नतिजाहरू }} , #'''$2''' बाट सुरुहुने ।",
- "showingresultsheader": "{{PLURAL:$5|नतिजा '''$1''' को '''$3'''|नतिजाहरु '''$1 - $2''' को'''$3'''}} ,'''$4''' को लागि",
"search-nonefound": "तपाईँको क्वेरीसँग मेल खाने नतिजाहरू भेटिएनन्",
"powersearch-legend": "उन्नत खोज",
"powersearch-ns": "नेमस्पेसेजहरुमा खोज्ने :",
@@ -809,6 +822,7 @@
"prefs-personal": "प्रयोगकर्ताको विवरण",
"prefs-rc": "नयाँ परिवर्तनहरू",
"prefs-watchlist": "अवलोकन पृष्ठ",
+ "prefs-editwatchlist-clear": "तपाईंको अवलोकनसूची मेट्नुहोस",
"prefs-watchlist-days": "निगरानी सूचीमा देखाउन दिनहरु:",
"prefs-watchlist-days-max": "धेरैमा $1 {{PLURAL:$1|दिन|दिन}}",
"prefs-watchlist-edits": "उच्चतम परिवर्तन संख्या बढाइएको निगरानी सूचीमा देखाउनको लागि :",
@@ -947,6 +961,7 @@
"right-move": "पृष्ठहरू सार्ने",
"right-move-subpages": "तिनीहरुको सह-पृष्ठसहित पृष्ठहरु सार्ने",
"right-move-rootuserpages": "मूल(root) प्रयोगकर्ताको पृष्ठहरु सार्ने",
+ "right-move-categorypages": "श्रेणी पृष्ठ सार्नुहोस",
"right-movefile": "फाइलहरु सार्ने",
"right-suppressredirect": "पृष्ठ सार्दा स्रोत पृष्ठबाट पठाउने लिंक नबनाउने",
"right-upload": "फाइलहरु उर्ध्वभरण गर्ने",
@@ -955,7 +970,7 @@
"right-reupload-shared": "साझा मिडिया भण्डारमा स्थानियरुपमा फाइलहरु अधिक्रमण गर्ने",
"right-upload_by_url": "URL बाट फाइल उर्ध्वभरण गर्ने",
"right-purge": "साइटको क्याश( cache) निश्चित नगरिकनै पर्ज(Purge) गर्ने",
- "right-autoconfirmed": "अर्ध-सुरक्षित पृष्ठहरु सम्पादन गर्ने",
+ "right-autoconfirmed": "आइपी दर सीमाले असर नपार्ने",
"right-bot": "स्वाचालित कार्यको रुपमा व्यवहार गर्ने",
"right-apihighlimits": "API खोजको लागि उच्च सीमा प्रयोग गर्नुहोस्",
"right-writeapi": "लेखन API प्रयोग गर्ने",
@@ -1051,7 +1066,8 @@
"recentchanges-label-newpage": "यो सम्पादनले नयाँ पृष्ठ निर्माण गरेको छ",
"recentchanges-label-minor": "यो साधारण सम्पादन हो",
"recentchanges-label-bot": "यो सम्पादन बोटद्वारा गरिएको थियो",
- "recentchanges-label-unpatrolled": "यो सम्पादन अहिले सम्म पट्रोल गरिएको छैन",
+ "recentchanges-label-unpatrolled": "यो सम्पादन अहिले सम्म गस्ती गरिएको छैन",
+ "recentchanges-legend-heading": "'''आदर्श वाक्य:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|list of new pages]] यो पनि हेर्नुहोस्)",
"recentchanges-legend-plusminus": "(''±१२३'')",
"rcnotefrom": "'''$2''' देखिका परिवर्तनहरु तल ('''$1''' सम्मका देखाइन्छ)।",
@@ -1095,8 +1111,8 @@
"recentchangeslinked": "सम्बन्धित परिवर्तनहरू",
"recentchangeslinked-feed": "सम्बन्धित परिवर्तनहरू",
"recentchangeslinked-toolbox": "सम्बन्धित परिवर्तनहरू",
- "recentchangeslinked-title": "\"$1\"सम्वन्धित परिवर्तनसँग",
- "recentchangeslinked-summary": "यो सूची निर्दिष्ट पृष्ठ (वा निर्दिष्ट श्रेणी)सित जोड़िएका भर्खरै परिवर्तन भएका पृष्ठको हो। [[Special:Watchlist|तपाईँको निगरानी सूची]]का पृष्ठहरु '''गाढा अक्षरमा''' छन्।",
+ "recentchangeslinked-title": "\"$1\" सँग सम्बन्धित परिवर्तन",
+ "recentchangeslinked-summary": "यो सूची निर्दिष्ट पृष्ठ (वा निर्दिष्ट श्रेणी)सित जोडिएका भर्खरै परिवर्तन भएका पृष्ठको हो। [[Special:Watchlist|तपाईँको ध्यानसूची]]का पृष्ठहरु <strong>गाढा अक्षरमा</strong> छन्।",
"recentchangeslinked-page": "पृष्ठ नाम:",
"recentchangeslinked-to": "यसको सट्टा यो पृष्ठसँग जोडिएका पृष्ठहरुको परिवर्तन देखाउने",
"upload": "फाइल उर्ध्वभरण",
@@ -1212,7 +1228,9 @@
"license-header": "अनुज्ञा प्राप्त गर्दै",
"nolicense": "केहिपनि छानिएन",
"license-nopreview": "(पूर्वरुप उपलब्ध छैन)",
- "upload_source_file": " (तपाईँको कम्प्युटरमा रहेको एक फाइल)",
+ "upload_source_file": "(तपाईँले आफ्नो कम्प्युटरबाट छानेको फाइल)",
+ "listfiles-delete": "मेट्ने",
+ "listfiles-summary": "यस विशेष पृष्ठले उर्ध्वभरण गरिका सबै फाइलहरु देखाउँछ।",
"listfiles_search_for": "मिडिया नामको लागि खोज्नुहोस:",
"imgfile": "फाइल",
"listfiles": "फाइल सूची",
@@ -1281,13 +1299,12 @@
"unusedtemplateswlh": "अन्य कड़ीहरु",
"randompage": "कुनै एक लेख",
"randompage-nopages": "{{PLURAL:$2| $1 नाम भएको कुनै पृष्ट छैन|$1 नाम भएका कुनै पृष्टहरु छैनन्}}",
- "randomincategory-selectcategory-submit": "जाने",
+ "randomincategory-category": "श्रेणी:",
"randomredirect": "कुनै एउटा अनुप्रेषितमा जाने",
"randomredirect-nopages": "\"$1\" नामस्थानमा अनुप्रेषित छैन।",
"statistics": "तथ्यांक",
"statistics-header-pages": "पृष्ठहरुको तथ्याङ्क",
"statistics-header-edits": "सम्पादनहरुको तथ्याङ्क",
- "statistics-header-views": "तथ्याङ्क देखाउनुहोस्",
"statistics-header-users": "प्रयोगकर्ता तथ्याङ्कहरू",
"statistics-header-hooks": "अन्य तथ्याङ्कहरु",
"statistics-articles": "सामग्री पृष्ठहरू",
@@ -1296,12 +1313,9 @@
"statistics-files": "उर्ध्वभरण गरिएका फाइलहरु",
"statistics-edits": "{{SITENAME}} स्थापना भए देखिको पृष्ठ सम्पादन",
"statistics-edits-average": "प्रतिपृष्ठ औसत सम्पादन",
- "statistics-views-total": "जम्मा हेर्नुहोस्",
- "statistics-views-peredit": "प्रति पृष्ठ सम्पादन",
"statistics-users": "दर्तागरिएको [[Special:ListUsers|प्रयोगकर्ताहरु]]",
"statistics-users-active": "सकृय प्रयोगकर्ताहरु",
"statistics-users-active-desc": "प्रयोगकर्ताहरु जो{{PLURAL:$1|बितेको एक दिन|बितेका $1 दिनहरु}}देखि जो सक्रिय छन्",
- "statistics-mostpopular": "सबैभन्दा धेरै हेरिएको पृष्ठहरु",
"pageswithprop-submit": "जाने",
"doubleredirects": "दोहोरो अनुप्रेषण",
"double-redirect-fixed-move": "[[$1]] सारिएको छ।\nयसले [[$2]] तिर अनुप्रेषित गर्दछ।",
@@ -1332,7 +1346,6 @@
"uncategorizedtemplates": "श्रेणीकरण नभएका टेम्प्लेटहरु",
"unusedcategories": "प्रयोग नभएका श्रेणीहरू",
"unusedimages": "प्रयोग नभएका फाइलहरु",
- "popularpages": "धेरै रूचाईएका पृष्ठहरू",
"wantedcategories": "माग भएका श्रेणीहरू",
"wantedpages": "खोजिएका पृष्ठहरू",
"wantedpages-badtitle": "नतिजा सूचीमा अमान्य शीर्षक:$1",
@@ -1382,7 +1395,7 @@
"suppress": "अतिदृष्टि",
"booksources": "किताबका श्रोतहरु",
"booksources-search-legend": "किताबका श्रोतहरु खोज्ने",
- "booksources-go": "जाउ",
+ "booksources-search": "खोज",
"specialloguserlabel": "निष्पादक:",
"speciallogtitlelabel": "लक्ष्य (शीर्षक वा प्रयोगकर्ता)",
"log": "लगहरु",
@@ -1490,7 +1503,7 @@
"wlheader-enotif": "ईमेल जानकारी सक्रिय गरियो ।",
"wlheader-showupdated": "तपाईँले पछिल्लो पल्ट भ्रमण गरेपछि परिवर्तन भएका पृष्ठहरूलाई <strong>गाढा<strong> गरेर देखाइएको छ ।",
"wlnote": "$3 र $4 अनुसार विगत {{PLURAL:$2|घण्टामा|'''$2''' घण्टाहरुमा}} {{PLURAL:$1|गरिएको अन्तिम परिवर्तन तल दिइएकोछ|गरिएका अन्तिम '''$1''' परिवर्तनहरु तल दिइएका छन्}}।",
- "wlshowlast": "पछिल्ला $2 दिनहरूका $3 $1 घण्टाहरूका देखाउनुहोस्",
+ "wlshowlast": "पछिल्ला $2 दिनहरूका $1 घण्टाहरूका देखाउनुहोस्",
"watchlist-options": "निगरानि सूची विकल्प",
"watching": "निगरानी गर्दै...",
"unwatching": "निगरानीबाट हटाउँदै...",
@@ -1527,8 +1540,8 @@
"delete-toobig": "यो पृष्ठको सम्पादन इतिहास धेरै र $1 {{PLURAL:$1|पुनरावलोक|पुनरावलोकहरु}}भन्दा बढी रहेको छ।\n {{SITENAME}}मा दुर्घटनाको कारणले गडबडी आउनसक्ने कुरालाई रोक्न यस्ता पृष्ठहरुलाई मेट्नबाट निषेध गरिएको छ ।",
"delete-warning-toobig": "This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.\nDeleting it may disrupt database operations of {{SITENAME}};\nproceed with caution.",
"rollback": "सम्पादनहरु पछाडि लाने",
- "rollback_short": "रोलब्याक",
"rollbacklink": "पहिलेको रुपमा फर्काउने",
+ "rollbacklinkcount": "रोल्ब्याक $1 {{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
"rollbackfailed": "रोलब्याक असफल",
"cantrollback": "फर्काउन सकिंदैन;\nअन्तिम योगदान कर्ता मात्र यस पृष्ठका लेखक थिए।",
"editcomment": "सम्पादन सारांश : \"''$1''\" ।",
@@ -1661,7 +1674,7 @@
"whatlinkshere-prev": "{{PLURAL:$1|पहिलो|पहिलो $1}}",
"whatlinkshere-next": "{{PLURAL:$1|अर्को|अर्को $1}}",
"whatlinkshere-links": "← लिंकहरु",
- "whatlinkshere-hideredirs": "$1 रिडाइरेक्ट हुन्छ",
+ "whatlinkshere-hideredirs": "$1 अनुप्रेषित हुन्छ",
"whatlinkshere-hidetrans": "$1 पारदर्शन",
"whatlinkshere-hidelinks": "$1 लिङ्कहरु",
"whatlinkshere-hideimages": "$1 तस्वीर लिंकहरु",
@@ -1862,7 +1875,6 @@
"thumbnail_image-missing": "फाइल हराएको भान भइरहेछ: $1",
"import": "पृष्ठहरू आयात गर्नुहोस्",
"importinterwiki": "Transwiki आयात",
- "import-interwiki-source": "स्रोत विकि/ पृष्ठ :",
"import-interwiki-history": "यो पृष्ठकोलागि सबै इतिहास संशोधनहरु प्रतिलिपि गर्ने",
"import-interwiki-templates": "सबै टेम्प्लेटहरु(नमुना) समेट्ने",
"import-interwiki-submit": "आयात",
@@ -1890,7 +1902,6 @@
"import-invalid-interwiki": "खुलाइएको विकिबाट आयात गर्न सकिएन",
"importlogpage": "आयात सूची",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरु}}",
- "import-logentry-interwiki": " $1लाई अन्तरविकिकरण गरियो",
"import-logentry-interwiki-detail": "$2 देखि $1 {{PLURAL:$1|पुनरावलोकन|पुनरावलोकनहरु}}",
"tooltip-pt-userpage": "तपाईको प्रयोगकर्ता पृष्ठ",
"tooltip-pt-anonuserpage": "तपाईले जुन IP ठेगानाको रुपमा सम्पादन गर्दै हुनुहुन्छ , त्यसको प्रयोगकर्ता पृष्ठ निम्न छ :",
@@ -1901,8 +1912,9 @@
"tooltip-pt-mycontris": "तपाईको योगदानको सूची",
"tooltip-pt-login": "तपाईँलाई प्रवेशगर्न सुझाव दिइन्छ ; तर यो जरुरी भने छैन",
"tooltip-pt-logout": "निर्गमन (लग आउट) गर्नुहोस्",
+ "tooltip-pt-createaccount": "तपाईंलाई खाता बनाउन र लग इन गर्न हामि प्रोत्साहित गर्छौ; तथापि, यो अनिवार्य भने छैन।",
"tooltip-ca-talk": "सामग्री पृष्ठबारेमा छलफल",
- "tooltip-ca-edit": "तपाईँले यो पृष्ठ सम्पादन गर्न सक्नुहुन्छ ।\nकृपया संग्रह ‍पहिले पूर्वावलोकन बटन प्रयोग गर्नुहोला ।",
+ "tooltip-ca-edit": "तपाईँले यो पृष्ठ सम्पादन गर्न सक्नुहुन्छ । कृपया सङ्ग्रह ‍गर्नु पूर्व पूर्वावलोकन बटन प्रयोग गर्नुहोला ।",
"tooltip-ca-addsection": "नयाँ खण्ड सुरु गर्नुहोस्",
"tooltip-ca-viewsource": "यो पृष्ठ सुरक्षित गरिएको छ। यसको श्रोत हेर्न सक्नुहुन्छ।",
"tooltip-ca-history": "यस पृष्ठको पहिलेका पुनरावलोकनहरु",
@@ -1920,14 +1932,14 @@
"tooltip-n-mainpage": "मुख्य पृष्ठमा जाने",
"tooltip-n-mainpage-description": "मुख्य पृष्ठमा जानुहो्स्",
"tooltip-n-portal": "आयोजनाका बारेमा , तपाईँ के गर्न सक्नुहुन्छ , सामग्री कहाँ भेट्टाउने",
- "tooltip-n-currentevents": "हालैको घटनाको बारेमा पृष्ठभूमि जानकारी पत्तालगाउनुहोस्",
+ "tooltip-n-currentevents": "हालैको घटनाको बारेमा पृष्ठभूमि जानकारी पत्ता लगाउनुहोस्",
"tooltip-n-recentchanges": "विकिमा गरिएका हालैका परिवर्तनहरुको सूची",
"tooltip-n-randompage": "जुन कुनै पृष्ठ खोल्ने",
"tooltip-n-help": "पत्तालगाउनु पर्ने स्थान",
- "tooltip-t-whatlinkshere": "यो सित जोड़िएका सबै विकि पृष्ठहरुको सूची",
+ "tooltip-t-whatlinkshere": "यो सँग जोडिएका सबै विकि पृष्ठहरुको सूची",
"tooltip-t-recentchangeslinked": "यस पृष्ठमा जोडिएका पृष्ठहरुमा हालैको परिवर्तन",
"tooltip-feed-rss": "यो पृष्ठको लागि RSS फिड",
- "tooltip-feed-atom": "यो पृष्ठको लागि Atom फिड",
+ "tooltip-feed-atom": "यो पृष्ठको लागि एटम फिड",
"tooltip-t-contributions": "यस प्रयोगकर्ताका योगदानहरूको सूची हेर्नुहोस्",
"tooltip-t-emailuser": "यो प्रयोगकर्तालाई इमेल पठाउनुहोस्",
"tooltip-t-upload": "फाइल अपलोड गर्ने",
@@ -1976,13 +1988,13 @@
"spambot_username": "MediaWiki स्पाम सर-सफाइ",
"spam_reverting": "$1 मा कडीहरू नभएका पुरानो अवतरणमा पुनर्स्थापित गर्दै",
"spam_blanking": "$1 का सबै अवतरणहरूमा कडीहरू भेटिए, मेटाएर खालि गर्दै",
+ "simpleantispam-label": "ऐन्टी-स्प्याम जाँच।\nयसलाई <strong>नहीं</strong> भर्ने!",
"pageinfo-title": " \"$1\"को लागि जाकारी",
"pageinfo-header-basic": "साधारण जानकारी",
"pageinfo-header-edits": "सम्पादन इतिहास",
"pageinfo-header-restrictions": "पृष्ठ सुरक्षा",
"pageinfo-header-properties": "पृष्ठ गुणहरू",
"pageinfo-display-title": "प्रदर्शन शिर्षक",
- "pageinfo-views": "अवलोकन संख्या",
"pageinfo-watchers": "पृष्ठ निगरानी कर्ताहरुको संख्या",
"pageinfo-edits": "कुल सम्पादन संख्या",
"pageinfo-authors": "कुल फरक सम्पादकरूको संख्या",
@@ -2026,9 +2038,9 @@
"file-info-size-pages": "$1 × $2 पिक्सेलहरु, फाइल आकार: $3, MIME प्रकार: $4, $5 {{PLURAL:$5|पृष्ठ|पृष्ठहरु}}",
"file-nohires": "उच्च रिजोल्युशन अनुपलब्ध",
"svg-long-desc": "SVG फाइल,साधारण $1 × $2 पिक्सेलहरु, फाइल आकार: $3",
- "show-big-image": "पूरा रिजोल्युशन",
- "show-big-image-preview": "यस पूर्व रुपको आकार: $1.",
- "show-big-image-other": "अरु रिजोल्युशनहरु: $1।",
+ "show-big-image": "मूल फाइल",
+ "show-big-image-preview": "यस पूर्व रुपको आकार: $1।",
+ "show-big-image-other": "अरु {{PLURAL:$2|resolution|रिजोल्युशनहरु}}: $1।",
"show-big-image-size": "$1 × $2 पिक्सल",
"file-info-gif-looped": "चकृय गरिएको",
"file-info-gif-frames": "$1 {{PLURAL:$1|फ्रेम|फ्रेमहरु}}",
@@ -2398,7 +2410,6 @@
"exif-urgency-low": "न्युन ($1)",
"exif-urgency-high": "उच्च ($1)",
"exif-urgency-other": "प्रयोगकर्ताले निर्धारण गरेको प्राथमिकता ($1)",
- "watchlistall2": "सबै",
"namespacesall": "सबै",
"monthsall": "सबै",
"confirmemail": "इमेल ठेगाना पक्का गर्नुहोस्",
@@ -2541,7 +2552,6 @@
"hebrew-calendar-m12-gen": "एलल्",
"signature": "[[{{ns:user}}:$1|$2]]",
"timezone-utc": "युटिसी(UTC)",
- "unknown_extension_tag": "अज्ञात एक्सटेन्सन ट्याग \"$1\"",
"duplicate-defaultsort": "'''चेतावनी:''' पूर्व निर्धारित छोटकरी \"$2\" ले पुरानो पूर्वनिर्धारित छोटकरी\"$1\"लाई विस्थापन गरेको छ ।",
"version": "संस्करण",
"version-extensions": "स्थापना गरिएका एक्सटेन्सनहरु",
@@ -2558,7 +2568,7 @@
"version-parser-function-hooks": "पार्सर फङ्सन हुक",
"version-hook-name": "हुक नाम",
"version-hook-subscribedby": "ग्राह्यता गर्ने",
- "version-version": "(संस्करण $1)",
+ "version-version": "($1)",
"version-svn-revision": "(r$2)",
"version-license": "इजाजतपत्र",
"version-poweredby-credits": "यो विकी '''[https://www.mediawiki.org/ मिडियाविकि]''' द्वारा सशक्तिकरण गरिएको छ, copyright © सन् २००१-$1 $2.",
@@ -2619,7 +2629,7 @@
"dberr-problems": "क्षमा पाउँ! यो साइटमा तकनीकी गड़बड़ी आइपरेकोछ।",
"dberr-again": "केही समय पर्खिएर पुन: लोड हुन दिनुहोस् ।",
"dberr-info": "(डेटाबेस सर्वर $1सित सम्पर्क साध्न सकिंदैन)",
- "dberr-info-hidden": "(डेटावेस सर्भरमा सम्पर्क स्थापना गर्न सकिएन)",
+ "dberr-info-hidden": "(डेटाबेसमा सम्पर्क स्थापना गर्न सकिएन)",
"dberr-usegoogle": "तपाईले अहिले गुगलबाट खोज गर्न प्रयास गर्न सक्नुहुन्छ।",
"dberr-outofdate": "कृपया स्मरणमा राख्नुहोस् हाम्रा लेखहरूको सूची जुन उनीहरूले राखेका छन् त्यो अद्यावधिक नहुन सक्छ ।",
"dberr-cachederror": "यो अनुरोध गरिएको पृष्ठको क्याशमा रहेका प्रतिलिपी हो , र अद्यावधिक नहुन सक्छ ।",
@@ -2638,7 +2648,7 @@
"htmlform-chosen-placeholder": "एक विकल्प छान्नुहोस्",
"sqlite-has-fts": "$1 पूरा पाठ खोज समर्थन सहित",
"sqlite-no-fts": "$1 पूरा पाठ खोज समर्थन बिना",
- "logentry-delete-restore": "$3 पृष्ठ $1ले पुनर्स्थापित गरेको हो",
+ "logentry-delete-restore": "$3 पृष्ठ $1ले {{GENDER:$2|पुनर्स्थापित}} गरेको हो",
"revdelete-content-hid": "सामग्री लुकाइएको",
"revdelete-summary-hid": "सम्पादन सारांस लुकाइएको",
"revdelete-uname-hid": "प्रयोगकर्ताको नाम लुकाइयो",
@@ -2647,14 +2657,18 @@
"revdelete-uname-unhid": "प्रयोगकर्ता देखाइएको",
"revdelete-restricted": "प्रबन्धकहरुमाथि सीमितता लागू गरियो",
"revdelete-unrestricted": "प्रवन्धककोलागि निषेधहरु हटाइयो ।",
- "logentry-move-move": "$1 द्वारा $3 पृष्ठलाई $4 मा सारियो",
+ "logentry-move-move": "$1 {{GENDER:$2|द्वारा}} $3 पृष्ठलाई $4 मा सारियो",
"rightsnone": "(कुनैपनि होइन)",
- "feedback-subject": "विषय:",
- "feedback-message": "सन्देश:",
+ "revdelete-summary": "सम्पादन सारांश",
"feedback-cancel": "रद्द गर्ने",
- "feedback-submit": "प्रतिकृया बुझाउनुहोस्",
- "feedback-error2": "त्रुटि: सम्पादन असफल",
"feedback-close": "गरियो",
+ "feedback-error-title": "त्रुटि",
+ "feedback-error2": "त्रुटि: सम्पादन असफल",
+ "feedback-message": "सन्देश:",
+ "feedback-subject": "विषय:",
+ "feedback-submit": "बुझाउने",
+ "feedback-thanks-title": "धन्यवाद!",
+ "feedback-useragent": "प्रयोगकर्ता एजेन्ट:",
"searchsuggest-search": "खोज",
"api-error-badaccess-groups": "यस विकिमा तपाईंलाई फाइल अपलोड गर्ने अनुमति छैन।",
"api-error-copyuploaddisabled": "यस सर्वरमा URL द्वारा अपलोड गर्ने व्यवस्था निस्क्रिय गरिएकोछ।",
diff --git a/languages/i18n/new.json b/languages/i18n/new.json
index 73314c60..95b66b25 100644
--- a/languages/i18n/new.json
+++ b/languages/i18n/new.json
@@ -1,361 +1,348 @@
{
- "@metadata": {
- "authors": [
- "Eukesh",
- "आलोक"
- ]
- },
- "tog-underline": "लिङ्कतेत अन्दरलाइन यानादिसँ:",
- "tog-hideminor": "न्हुगु हिलेज्याय् चिधंगु सम्पादन सुचुकादिसँ",
- "tog-extendwatchlist": "वाचलिस्टयात परिमार्जित याना सकल स्वेज्युगु हिलेज्या क्यनादिसँ, दकले लिपाया जक्क मखु",
- "tog-usenewrc": "एन्ह्यान्स्ड् न्हुगु हिलेज्या (जाभास्क्रिप्ट)",
- "tog-numberheadings": "अटो-ल्याखँ हेडिङ",
- "tog-showtoolbar": "सम्पादन टुलबार क्यनादिसँ (जाभास्क्रिप्ट)",
- "tog-editondblclick": "दबल क्लिकय् पौ सम्पादन यानादिसँ (जाभास्क्रिप्ट)",
- "tog-editsectiononrightclick": "सेक्सनया छ्यँआखले राइट क्लिक याना सेक्सन सम्पादन यायेज्युगु यानादिसँ (जाभास्क्रिप्ट)",
- "tog-rememberpassword": "जिगु लग इन थ्व कम्प्युतरय् लुमंकादिसँ (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "tog-watchcreations": "जिं देकागु / न्ह्यथनागु पौयात जिगु दृष्टिधलः(watchlist)य् तयादिसँ",
- "tog-watchdefault": "जिं सम्पादन यानागु पौयात जिगु वाचलिस्टय् तयादिसँ",
- "tog-watchmoves": "जिं संकागु (move) पौयात जिगु वाचलिस्टय् तयादिसँ",
- "tog-watchdeletion": "जिं हुयागु (delete) पौयात जिगु वाचलिस्टय् तयादिसँ",
- "tog-minordefault": "सकल सम्पादनतेत डिफल्टं चीधंगु यानादिसँ",
- "tog-previewontop": "सम्पादन सन्दुक स्वया न्ह्यः प्रिभ्यु क्यनादिसँ",
- "tog-previewonfirst": "न्हापाँगु सम्पादन स्वया न्ह्यः प्रिभ्यु क्यनादिसँ",
- "tog-enotifwatchlistpages": "जिगु वाचलिस्टया पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ",
- "tog-enotifusertalkpages": "जिगु खँल्हाबल्हा पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ",
- "tog-enotifminoredits": "पौया चीधंगु सम्पादनया निंतिं नं जितः इ-मेल यानादिसँ",
- "tog-enotifrevealaddr": "जिगु इ-मेल थाय्‌बाय्‌ नोटिफिकेसन इ-मेलय् क्यनादिसँ",
- "tog-shownumberswatching": "स्वयाच्वंपिं छ्यलामितेगु ल्याखँ क्यनादिसँ",
- "tog-fancysig": "कच्चा हस्ताक्षर (अटोम्याटिक लिङ्क मदेःकः)",
- "tog-uselivepreview": "लाइभ प्रिभ्यु (जाभास्क्रिप्ट) इनेबल यानादिसँ (परिक्षणकाल)",
- "tog-forceeditsummary": "सम्पादन सार खालि त्वतिबिले जित सशंकित यानादिसँ",
- "tog-watchlisthideown": "जिगु सम्पादन वाचलिस्टय् सुचुकादिसँ",
- "tog-watchlisthidebots": "वाचलिस्टं बोत सम्पादन सुचुकादिसँ",
- "tog-watchlisthideminor": "वाचलिस्टं चीधंगु सम्पादन सुचुकादिसँ",
- "tog-watchlisthideliu": "वाचलिस्टं लग्ड इन छ्यलामितेगु सम्पादन सुचुकादिसँ",
- "tog-watchlisthideanons": "वाचलिस्टं अज्ञात छ्यलामिया सम्पादन सुचुकादिसँ",
- "tog-ccmeonemails": "जिं मेपिं छ्यलामितेगु छ्वइगु इ-मेलतेगु कपि जित नं छ्वयादिसँ",
- "tog-diffonly": "पाःगु (diffs) स्वया क्वेया पौया कण्टेण्ट क्यनादिमते",
- "tog-showhiddencats": "सुचुकातगु पुचःत क्यनादिसँ",
- "tog-noconvertlink": "लिङ्क शिर्षक हिलेज्या डिजेबल यानादिसँ",
- "underline-always": "न्ह्याबिलें",
- "underline-never": "नेभर",
- "underline-default": "डिफल्ट ब्राउज यानादिसँ",
- "sunday": "आइतबाः",
- "monday": "सोमबाः",
- "tuesday": "मङ्गलबाः",
- "wednesday": "बुधबाः",
- "thursday": "बिहिबाः",
- "friday": "शुक्रबाः",
- "saturday": "शनिबाः",
- "sun": "आइत",
- "mon": "सोम",
- "tue": "मङ्गल",
- "wed": "बुध",
- "thu": "बिहि",
- "fri": "शुक्र",
- "sat": "शनि",
- "january": "ज्यानुवरी",
- "february": "फेब्रुवरी",
- "march": "मार्च",
- "april": "अप्रिल",
- "may_long": "मे",
- "june": "जुन",
- "july": "जुलाइ",
- "august": "अगस्ट",
- "september": "सेप्टेम्बर",
- "october": "अक्टोबर",
- "november": "नोभेम्बर",
- "december": "डिसेम्बर",
- "january-gen": "ज्यानुवरी",
- "february-gen": "फ्रेब्रुवरी",
- "march-gen": "मार्च",
- "april-gen": "अप्रिल",
- "may-gen": "मे",
- "june-gen": "जुन",
- "july-gen": "जुलाइ",
- "august-gen": "अगस्ट",
- "september-gen": "सेप्टेम्बर",
- "october-gen": "अक्टोबर",
- "november-gen": "नोभेम्बर",
- "december-gen": "डिसेम्बर",
- "jan": "ज्यानु",
- "feb": "फेब्",
- "mar": "मार्",
- "apr": "अप्रि",
- "may": "मे",
- "jun": "जुन",
- "jul": "जुल",
- "aug": "अग",
- "sep": "सेप्",
- "oct": "अक्ट्",
- "nov": "नोभ",
- "dec": "डिस",
- "pagecategories": "{{PLURAL:$1|पुचः|पुचःतः}}",
- "category_header": "पुचः \"$1\"य् दुगु पौतः",
- "subcategories": "उपपुचःतः",
- "category-media-header": "पुचः \"$1\"य् दुगु मिडिया",
- "category-empty": "''थ्व पुचले आःईले पौ वा मिदिया मदु।''",
- "hidden-categories": "{{PLURAL:$1|गुप्त पुचः|गुप्त पुचःतः}}",
- "hidden-category-category": "गुप्त पुचःतः",
- "category-subcat-count": "{{PLURAL:$2|थ्व पुचले बियातःगु उपपुचः जक्क दु।|थ्व पुचले $2 सकलय् बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःतः}} दु।}}",
- "category-subcat-count-limited": "थ्व पुचले बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःत}} दु।",
- "category-article-count": "{{PLURAL:$2|थ्व पुचले क्वे बियातःगु पौ दु।|$2 सकलय् थ्व बियातःगु {{PLURAL:$1|पौ|$1 पौस}} थ्व पुचले दु।}}",
- "category-article-count-limited": "थ्व बियातःगु {{PLURAL:$1|पौ|$1 पौस}} थ्व पुचले दु।",
- "category-file-count": "{{PLURAL:$2|थ्व पुचले थ्व जक्क फाइल दु।|सकल $2य् क्वे बियातःगु {{PLURAL:$1|फाइल|$1 फाइलत}} थ्व पुचले दु।}}",
- "about": "विषयक",
- "article": "कण्टेण्ट पौ",
- "moredotdotdot": "अप्व॰॰॰",
- "mypage": "जिगु पौ",
- "mytalk": "जिगु खं",
- "anontalk": "थ्व IPया निंतिं खँल्हाबल्हा",
- "navigation": "परिवहन",
- "and": "&#32;व",
- "qbfind": "मालादिसँ",
- "qbedit": "सम्पादन",
- "qbpageoptions": "थ्व पौ",
- "qbmyoptions": "जिगु पौ",
- "faq": "आपालं न्यनिगु न्ह्यसः (FAQ)",
- "faqpage": "Project:आपालं न्यनिगु न्ह्यसःत (FAQ)",
- "vector-action-move": "संकादिसँ",
- "vector-view-create": "दयेकादिसँ",
- "vector-view-edit": "सम्पादन",
- "vector-view-history": "इतिहास स्वयादिसँ",
- "vector-view-view": "ब्वनादिसँ",
- "returnto": "$1य् लिहाँझासँ।",
- "tagline": "{{SITENAME}}नं",
- "help": "ग्वहालि",
- "search": "मालादिसँ",
- "searchbutton": "मालादिसँ",
- "go": "झासँ",
- "searcharticle": "झासँ",
- "history": "पौया इतिहास",
- "history_short": "इतिहास",
- "updatedmarker": "जिं दक्ले लिपा पौ स्वे धुंकाया अपडेट",
- "printableversion": "ध्वायेज्युगु संस्करण",
- "permalink": "स्थायी लिङ्क",
- "print": "ध्वानादिसँ",
- "view": "क्यनादिसँ",
- "edit": "सम्पादन",
- "create": "दयेकादिसँ",
- "editthispage": "थ्व पौ सम्पादन यानादिसं",
- "create-this-page": "थ्व पौ दयेकादिसँ",
- "delete": "हुयादिसँ (दिलित)",
- "deletethispage": "थ्व पौ हुयादिसँ (दिलित)",
- "newpage": "न्हुगु पौ",
- "talkpagelinktext": "खँल्हाबँल्हा",
- "specialpage": "विषेश पौ",
- "personaltools": "निजी ज्याब्व",
- "talk": "खँलाबँला",
- "toolbox": "ज्याब्व सन्दुक",
- "projectpage": "ज्याखँ पौ क्येनादिसँ",
- "otherlanguages": "मेमेगु भाषाय्",
- "jumpto": "थन झासँ:",
- "jumptosearch": "मालादिसँ",
- "pool-errorunknown": "मस्युगु इरर",
- "aboutsite": "{{SITENAME}}या बारेय्",
- "aboutpage": "Project:बारेय्",
- "copyright": "कण्टेण्ट $1 कथं उपलब्ध दु।",
- "copyrightpage": "{{ns:project}}:लेखाधिकार",
- "currentevents": "जुयाच्वँगु घटना",
- "currentevents-url": "Project:जुयाच्वँगु घटना",
- "disclaimers": "डिस्क्लेमर्स",
- "disclaimerpage": "Project:साधारण डिस्क्लेमर्स",
- "edithelp": "सम्पादन ग्वहालि",
- "mainpage": "मू पौ",
- "mainpage-description": "मू पौ",
- "policy-url": "Project:नीति",
- "portal": "सामाजिक मूलुखा",
- "portal-url": "Project:सामाजिक मूलुखा",
- "privacy": "दुबिस्ता नियम",
- "privacypage": "Project:गुप्तता नियम",
- "badaccess": "पर्मिसन इरर",
- "badaccess-group0": "छिं अनुरोध यानादिगु ज्या छिं याये मछिं।",
- "badaccess-groups": "छिं अनुरोध यानादिगु ज्या {{PLURAL:$2|पुचः|पुचःतः}}: $1या छ्यलामिं जक्क याये दु।",
- "versionrequired": "मिडियाविकिया $1 संस्करण माःगु",
- "versionrequiredtext": "थ्व पौ छ्यले यात मिडियाविकिया $1 संस्करण माः।\nस्वयादिसँ [[विशेष:संस्करण|संस्करण पौ]]।",
- "ok": "ज्यु",
- "youhavenewmessagesmulti": "$1य् छित न्हुगु सन्देश वगु दु",
- "editsection": "सम्पादन",
- "editold": "सम्पादन",
- "editlink": "सम्पादन",
- "editsectionhint": "खण्ड सम्पादन: $1",
- "showtoc": "क्यनादिसँ",
- "hidetoc": "सुचुकादिसँ",
- "collapsible-expand": "चायेकादिसँ",
- "red-link-title": "$1 (पौ मदु)",
- "nstab-main": "पौ",
- "nstab-user": "छ्य्‌लामि पौ",
- "nstab-media": "मिडिया पौ",
- "nstab-special": "विशेष",
- "nstab-project": "ज्याझ्वः पौ",
- "nstab-image": "फाइल",
- "nstab-mediawiki": "सन्देश",
- "nstab-template": "टेम्प्लेट",
- "nstab-help": "ग्वहालि पौ",
- "nstab-category": "पुचः",
- "nosuchaction": "थन्यागु ज्या मदु",
- "nosuchactiontext": "URLनं या धाःगु ज्या विकिं मस्यु",
- "nosuchspecialpage": "थन्यागु विशेष पौ मदु",
- "nospecialpagetext": "<strong>छिं मदुगु विशेष पौया माग तयादिल।</strong>\n\nअस्थित्वय् दुगु विशेष पौया धलः [[विशेष:विशेषपौ|{{int:specialpages}}]]य् दु।",
- "databaseerror": "डेटाबेस इरर",
- "laggedslavemode": "चेतावनी: पतिइ न्हुगु अपदेत मदेफु ।",
- "readonly": "देताबेस संरक्षित",
- "enterlockreason": "पौ कुनातयेगुया निंतिं कारण बियादिसँ, नापं पौ गब्ले चायेकिगु जुइफु उकिया अनुमान नं बियादिसँ",
- "readonlytext": "थ्व डेटाबेस आःया ईले, सम्भवतः नियमित डेटाबेस मेन्टेनेन्सया निंतिं, न्हूगु एन्ट्रि व मेमेगु हिलेज्याया यायेमछिंकः कुनातःगु दु। थ्व धुंका हानं डेटाबेस साधारण जुइ।\n\nथ्व डेटाबेस कुनाःतम्ह प्रबन्धकं थ्व वर्णन ब्यूगु दु: $1",
- "internalerror": "इन्तरनल इरर",
- "viewsource": "स्रोत स्वयादिसँ",
- "welcomeuser": "लसकुस, $1जु!",
- "yourname": "छ्य्‌लामि नां:",
- "yourpassword": "दुथखँग्वः (पासवर्द):",
- "yourpasswordagain": "दुथखँग्वः हानं तियादिसँ:",
- "yourdomainname": "छिगु दोमेन:",
- "login": "दुहां वनेगु",
- "nav-login-createaccount": "दुहां वनेगु / खाता चायेकिगु",
- "userlogin": "दुहां वनेगु / खाता चायेकिगु",
- "logout": "पिने झासँ",
- "userlogout": "पिने झासँ",
- "nologinlink": "खाता न्ह्यथनादिसँ",
- "createaccount": "खाता चायेकादिसँ",
- "gotaccountlink": "दुहां झासँ",
- "badretype": "छिं तियादिगु पासवर्द पाय्‌छि मजु।",
- "loginsuccesstitle": "लग इन सफल जुल",
- "emaildisabled": "थ्व फाइलं इमेल छ्वयेमफु।",
- "accountcreated": "खाता न्ह्येथन",
- "accountcreatedtext": "$1या निंतिं छ्य्‌लामि खाता चायेकूगु दु।",
- "loginlanguagelabel": "भाषा: $1",
- "changepassword": "पासवर्द हिलादिसँ",
- "changeemail-submit": "इ-मेल हिलादिसँ",
- "changeemail-cancel": "खारेज",
- "bold_sample": "गाढा आखः",
- "bold_tip": "गाढा आखः",
- "italic_sample": "बेक्वःगु आखः",
- "italic_tip": "बेक्वःगु आखः",
- "link_tip": "आन्तरिक लिंक",
- "summary": "सारांश:",
- "minoredit": "थ्व चिधंगु सम्पादन ख",
- "watchthis": "थ्व पौ स्वयादिसँ",
- "savearticle": "पौ स्वथनादिसँ",
- "preview": "न्हेकिपा",
- "showpreview": "न्हेकिपा क्यनादिसँ",
- "showlivepreview": "जुथें (लाइभ) न्हेकिपा",
- "showdiff": "हिसुझ्वः क्यनादिसँ",
- "anoneditwarning": "'''न्ह्यःखँ:''' छि लग्द इन मदु। \nछिगु IP address पौया सम्पादन इतिहासय् स्वथनिगु जुइ।",
- "anonpreviewwarning": "''छि लग्द इन मदु। थ्व पौ स्वथनादिल धाःसा छिगु IP address थ्व पौया इतिहासय् स्वथनिगु जुइ।''",
- "loginreqtitle": "लग इन माःगु",
- "loginreqpagetext": "मेमेगु पौ स्वयेत छिं $1 यायेमा/जुइमा।",
- "accmailtitle": "पासवर्द छ्वल।",
- "newarticle": "(न्हु)",
- "note": "'''होस यानादिसँ:'''",
- "previewnote": "'''थ्व पूर्वालोकन जक्क ख। छिं यानादिगु सम्पादन स्वथंगु मदुनि!'''",
- "editing": "$1 सम्पादन जुयाच्वँगु दु",
- "editconflict": "सम्पादन द्वंगु दु: $1",
- "yourtext": "छिगु आखः",
- "storedversion": "स्वथनातगु संस्करण",
- "content-model-text": "सादा आखः",
- "revisionasof": "$1 तक्कया संस्करण",
- "previousrevision": "←पुलांगु संस्करण",
- "searchprofile-everything": "दक्वं",
- "search-result-size": "$1 ({{PLURAL:$2|1 खँग्वः |$2 खँग्वःत}})",
- "searchrelated": "स्वापू दुःगु",
- "searchall": "सकल",
- "mypreferences": "जिगु प्राथमिकता",
- "prefs-skin": "भुँसा",
- "prefs-datetime": "दिं व ई",
- "prefs-personal": "छ्य्‌लामि प्रोफाइल",
- "prefs-rc": "न्हुगु हिलेज्या",
- "saveprefs": "स्वथनादिसँ",
- "youremail": "इ-मेल:",
- "username": "छ्य्‌लामि नां:",
- "yourrealname": "वास्तविक नां:",
- "yourlanguage": "भाषा:",
- "gender-male": "मिजं",
- "gender-female": "मिसा",
- "email": "इ-मेल",
- "userrights-user-editname": "छपू छ्य्‌लामि नां तयादिसँ:",
- "group": "पुचः",
- "group-user": "छ्य्‌लामित",
- "group-bot": "बोत",
- "recentchanges": "नकतिनिया हिसुझ्वः",
- "show": "क्यनादिसँ",
- "upload": "फाइल अपलोद यानादिसँ",
- "file-anchor-link": "फाइल",
- "filehist-user": "छ्य्‌लामि",
- "randompage": "छगु च्वसुइ येंकादिसं",
- "statistics": "तथ्याङ्क",
- "withoutinterwiki-submit": "क्यनादिसँ",
- "newpages-username": "छ्येलेमि नां:",
- "allpages": "सकल पौत",
- "nextpage": "मेगु पौ ($1)",
- "allarticles": "सकल च्वसुत",
- "allpagessubmit": "झासँ",
- "categories": "पुचःत",
- "emailusername": "छ्य्‌लामि नां (युजर नेम) :",
- "restriction-edit": "सम्पादन",
- "namespace": "नेमस्पेस:",
- "blanknamespace": "(मू)",
- "mycontris": "जिगु योगदान",
- "sp-contributions-talk": "खँल्हाबँल्हा",
- "whatlinkshere": "थन छु स्वाई",
- "contribslink": "योगदान",
- "movereason": "कारण:",
- "tooltip-search": "{{SITENAME}} मालादिसं",
- "tooltip-search-fulltext": "थ्व खँग्वःया निंतिं पौस मालादिसं",
- "tooltip-p-logo": "मू पौय् झासँ",
- "tooltip-n-mainpage": "मू पौ भ्रमण यानादिसँ",
- "tooltip-n-portal": "ज्याझ्वःया बारेय्, छिं छु यायेछिं, गन खँ सीकिगु",
- "tooltip-n-currentevents": "जुयाच्वँगु घटनाया लिधँसा तथ्य मालादिसँ",
- "tooltip-n-recentchanges": "थ्व विकिया न्हुगु हिलेज्याया धलः।",
- "tooltip-n-randompage": "न्ह्याःगु छगू पौ क्यनादिसँ",
- "tooltip-n-help": "खँ सीकिगु थाय्।",
- "tooltip-t-whatlinkshere": "थन स्वाइगु सकल विकिपौया धलः",
- "tooltip-t-recentchangeslinked": "थ्व पौ नाप स्वाःगु पौतेगु न्हुगु हिलेज्या",
- "tooltip-feed-rss": "थ्व पौया RSS फीड",
- "tooltip-feed-atom": "थ्व पौया Atom फीड",
- "tooltip-t-contributions": "थ्व छ्य्‌लामिया योगदानया धलः क्यनादिसँ",
- "tooltip-t-emailuser": "थ्व छ्य्‌लामियात इ-मेल छ्वयादिसँ",
- "tooltip-t-upload": "फाइल अपलोद यानादिसँ",
- "tooltip-t-specialpages": "सकल विशेष पौस धलः",
- "tooltip-t-print": "थ्व पौस ध्वायेज्युगु संस्करण",
- "tooltip-t-permalink": "थ्व पौस थ्व संस्करणया पर्मानेन्ट लिङ्क",
- "tooltip-ca-nstab-main": "कन्टेन्ट पौ स्वयादिसँ",
- "tooltip-ca-nstab-user": "छ्य्‌लामिपौ स्वयादिसँ",
- "tooltip-ca-nstab-media": "मिडिया पौ स्वयादिसँ",
- "tooltip-ca-nstab-special": "थ्व छगू विशेष पौ ख ; थ्व पौयात छिं सम्पादन याये मछिं।",
- "tooltip-ca-nstab-project": "ज्याझ्वः पौ स्वयादिसँ",
- "tooltip-ca-nstab-image": "फाइल पौ स्वयादिसँ",
- "tooltip-ca-nstab-mediawiki": "व्यवस्थापन सन्देश स्वयादिसँ",
- "tooltip-ca-nstab-template": "टेम्प्लेट स्वयादिसँ",
- "tooltip-ca-nstab-help": "ग्वहालि पौ स्वयादिसँ",
- "tooltip-ca-nstab-category": "पुचः पौ स्वयादिसँ",
- "tooltip-minoredit": "थ्व छगू चिधंगु सम्पादन ख",
- "tooltip-save": "छिगु परिवर्तन स्वथनादिसँ",
- "tooltip-preview": "छिगु परिवर्तन पुर्वालोकन यानादिसँ, कृपया स्वथने न्ह्यः थ्व छ्य्‌लादिसँ!",
- "tooltip-diff": "छिं पतीइ यानादिगु हिलेज्या क्यनादिसँ।",
- "tooltip-compareselectedversions": "निगु ल्ययातःगु संस्करणया दथुइ भिन्नता स्वयादिसँ।",
- "tooltip-watch": "थ्व पौयात छिगु वाचलिस्टय् तनादिसँ",
- "tooltip-recreate": "थ्व पौ हुयाछ्वेधुंकुगु जुसां पुनर्निर्माण यानादिसँ",
- "tooltip-upload": "अपलोड न्ह्यथनादिसँ",
- "tooltip-rollback": "\"रोलब्याकं\" छगू क्लिकय् थ्व पौयात न्हापाया छ्य्‌लामिं याःगु परिवर्तनय् हिलाछ्वइ।",
- "tooltip-undo": "\"Undo\" नं थ्व सम्पादनयात खारेज याना सम्पादन फर्म यात प्रिभ्यु मोडय् चायेकी।\nथुकिलिं सारांशय् कारण तनेछिंकी।",
- "common.css": "/* थन तःगु CSS सकल स्किनय् छ्य्‌लिगु जुइ */",
- "cologneblue.css": "/* थन तःगु CSS नं कोलोन ब्लु स्किनया छ्य्‌लामितेत असर याइ */",
- "monobook.css": "/* थन तःगु CSS नं मोनोबुक स्किनया छ्य्‌लामितेत असर याइ */",
- "modern.css": "/* थन तःगु CSS नं मोडर्न स्किनया छ्य्‌लामितेत असर याइ */",
- "print.css": "/* थन तःगु CSS नं प्रिन्ट आउटपुटयात असर याइ */",
- "others": "मेमेगु",
- "exif-imagewidth": "ब्याः",
- "exif-imagelength": "जाः",
- "exif-imagedescription": "किपाया नां",
- "exif-make": "किपासाः दयेकामि",
- "exif-model": "किपासाः मोदेल",
- "exif-software": "छ्यलातःगु सफ्तवेयर",
- "exif-artist": "च्वमि",
- "exif-copyright": "लेखाधिकार थुवा",
- "exif-pixelydimension": "किपा ब्याः",
- "exif-pixelxdimension": "किपा जाः",
- "exif-dc-date": "तिथि",
- "namespacesall": "सकल",
- "autosumm-new": "न्हुगु पौ: $1",
- "specialpages": "विषेश पौत:"
+ "@metadata": {
+ "authors": [
+ "Eukesh",
+ "आलोक"
+ ]
+ },
+ "tog-underline": "लिङ्कतेत अन्दरलाइन यानादिसँ:",
+ "tog-hideminor": "न्हुगु हिलेज्याय् चिधंगु सम्पादन सुचुकादिसँ",
+ "tog-extendwatchlist": "वाचलिस्टयात परिमार्जित याना सकल स्वेज्युगु हिलेज्या क्यनादिसँ, दकले लिपाया जक्क मखु",
+ "tog-usenewrc": "एन्ह्यान्स्ड् न्हुगु हिलेज्या (जाभास्क्रिप्ट)",
+ "tog-numberheadings": "अटो-ल्याखँ हेडिङ",
+ "tog-showtoolbar": "सम्पादन टुलबार क्यनादिसँ (जाभास्क्रिप्ट)",
+ "tog-editondblclick": "दबल क्लिकय् पौ सम्पादन यानादिसँ (जाभास्क्रिप्ट)",
+ "tog-editsectiononrightclick": "सेक्सनया छ्यँआखले राइट क्लिक याना सेक्सन सम्पादन यायेज्युगु यानादिसँ (जाभास्क्रिप्ट)",
+ "tog-watchcreations": "जिं देकागु / न्ह्यथनागु पौयात जिगु दृष्टिधलः(watchlist)य् तयादिसँ",
+ "tog-watchdefault": "जिं सम्पादन यानागु पौयात जिगु वाचलिस्टय् तयादिसँ",
+ "tog-watchmoves": "जिं संकागु (move) पौयात जिगु वाचलिस्टय् तयादिसँ",
+ "tog-watchdeletion": "जिं हुयागु (delete) पौयात जिगु वाचलिस्टय् तयादिसँ",
+ "tog-minordefault": "सकल सम्पादनतेत डिफल्टं चीधंगु यानादिसँ",
+ "tog-previewontop": "सम्पादन सन्दुक स्वया न्ह्यः प्रिभ्यु क्यनादिसँ",
+ "tog-previewonfirst": "न्हापाँगु सम्पादन स्वया न्ह्यः प्रिभ्यु क्यनादिसँ",
+ "tog-enotifwatchlistpages": "जिगु वाचलिस्टया पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ",
+ "tog-enotifusertalkpages": "जिगु खँल्हाबल्हा पौ सम्पादन जुइबिले जितः इ-मेल यानादिसँ",
+ "tog-enotifminoredits": "पौया चीधंगु सम्पादनया निंतिं नं जितः इ-मेल यानादिसँ",
+ "tog-enotifrevealaddr": "जिगु इ-मेल थाय्‌बाय्‌ नोटिफिकेसन इ-मेलय् क्यनादिसँ",
+ "tog-shownumberswatching": "स्वयाच्वंपिं छ्यलामितेगु ल्याखँ क्यनादिसँ",
+ "tog-fancysig": "कच्चा हस्ताक्षर (अटोम्याटिक लिङ्क मदेःकः)",
+ "tog-uselivepreview": "लाइभ प्रिभ्यु (जाभास्क्रिप्ट) इनेबल यानादिसँ (परिक्षणकाल)",
+ "tog-forceeditsummary": "सम्पादन सार खालि त्वतिबिले जित सशंकित यानादिसँ",
+ "tog-watchlisthideown": "जिगु सम्पादन वाचलिस्टय् सुचुकादिसँ",
+ "tog-watchlisthidebots": "वाचलिस्टं बोत सम्पादन सुचुकादिसँ",
+ "tog-watchlisthideminor": "वाचलिस्टं चीधंगु सम्पादन सुचुकादिसँ",
+ "tog-watchlisthideliu": "वाचलिस्टं लग्ड इन छ्यलामितेगु सम्पादन सुचुकादिसँ",
+ "tog-watchlisthideanons": "वाचलिस्टं अज्ञात छ्यलामिया सम्पादन सुचुकादिसँ",
+ "tog-ccmeonemails": "जिं मेपिं छ्यलामितेगु छ्वइगु इ-मेलतेगु कपि जित नं छ्वयादिसँ",
+ "tog-diffonly": "पाःगु (diffs) स्वया क्वेया पौया कण्टेण्ट क्यनादिमते",
+ "tog-showhiddencats": "सुचुकातगु पुचःत क्यनादिसँ",
+ "underline-always": "न्ह्याबिलें",
+ "underline-never": "नेभर",
+ "underline-default": "डिफल्ट ब्राउज यानादिसँ",
+ "sunday": "आइतबाः",
+ "monday": "सोमबाः",
+ "tuesday": "मङ्गलबाः",
+ "wednesday": "बुधबाः",
+ "thursday": "बिहिबाः",
+ "friday": "शुक्रबाः",
+ "saturday": "शनिबाः",
+ "sun": "आइत",
+ "mon": "सोम",
+ "tue": "मङ्गल",
+ "wed": "बुध",
+ "thu": "बिहि",
+ "fri": "शुक्र",
+ "sat": "शनि",
+ "january": "ज्यानुवरी",
+ "february": "फेब्रुवरी",
+ "march": "मार्च",
+ "april": "अप्रिल",
+ "may_long": "मे",
+ "june": "जुन",
+ "july": "जुलाइ",
+ "august": "अगस्ट",
+ "september": "सेप्टेम्बर",
+ "october": "अक्टोबर",
+ "november": "नोभेम्बर",
+ "december": "डिसेम्बर",
+ "january-gen": "ज्यानुवरी",
+ "february-gen": "फ्रेब्रुवरी",
+ "march-gen": "मार्च",
+ "april-gen": "अप्रिल",
+ "may-gen": "मे",
+ "june-gen": "जुन",
+ "july-gen": "जुलाइ",
+ "august-gen": "अगस्ट",
+ "september-gen": "सेप्टेम्बर",
+ "october-gen": "अक्टोबर",
+ "november-gen": "नोभेम्बर",
+ "december-gen": "डिसेम्बर",
+ "jan": "ज्यानु",
+ "feb": "फेब्",
+ "mar": "मार्",
+ "apr": "अप्रि",
+ "may": "मे",
+ "jun": "जुन",
+ "jul": "जुल",
+ "aug": "अग",
+ "sep": "सेप्",
+ "oct": "अक्ट्",
+ "nov": "नोभ",
+ "dec": "डिस",
+ "pagecategories": "{{PLURAL:$1|पुचः|पुचःतः}}",
+ "category_header": "पुचः \"$1\"य् दुगु पौतः",
+ "subcategories": "उपपुचःतः",
+ "category-media-header": "पुचः \"$1\"य् दुगु मिडिया",
+ "category-empty": "''थ्व पुचले आःईले पौ वा मिदिया मदु।''",
+ "hidden-categories": "{{PLURAL:$1|गुप्त पुचः|गुप्त पुचःतः}}",
+ "hidden-category-category": "गुप्त पुचःतः",
+ "category-subcat-count": "{{PLURAL:$2|थ्व पुचले बियातःगु उपपुचः जक्क दु।|थ्व पुचले $2 सकलय् बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःतः}} दु।}}",
+ "category-subcat-count-limited": "थ्व पुचले बियातःगु {{PLURAL:$1|उपपुचः|$1 उपपुचःत}} दु।",
+ "category-article-count": "{{PLURAL:$2|थ्व पुचले क्वे बियातःगु पौ दु।|$2 सकलय् थ्व बियातःगु {{PLURAL:$1|पौ|$1 पौस}} थ्व पुचले दु।}}",
+ "category-article-count-limited": "थ्व बियातःगु {{PLURAL:$1|पौ|$1 पौस}} थ्व पुचले दु।",
+ "category-file-count": "{{PLURAL:$2|थ्व पुचले थ्व जक्क फाइल दु।|सकल $2य् क्वे बियातःगु {{PLURAL:$1|फाइल|$1 फाइलत}} थ्व पुचले दु।}}",
+ "about": "विषयक",
+ "article": "कण्टेण्ट पौ",
+ "moredotdotdot": "अप्व॰॰॰",
+ "mypage": "जिगु पौ",
+ "mytalk": "जिगु खं",
+ "anontalk": "थ्व IPया निंतिं खँल्हाबल्हा",
+ "navigation": "परिवहन",
+ "and": "&#32;व",
+ "qbfind": "मालादिसँ",
+ "qbedit": "सम्पादन",
+ "qbpageoptions": "थ्व पौ",
+ "qbmyoptions": "जिगु पौ",
+ "faq": "आपालं न्यनिगु न्ह्यसः (FAQ)",
+ "faqpage": "Project:आपालं न्यनिगु न्ह्यसःत (FAQ)",
+ "returnto": "$1य् लिहाँझासँ।",
+ "tagline": "{{SITENAME}}नं",
+ "help": "ग्वहालि",
+ "search": "मालादिसँ",
+ "searchbutton": "मालादिसँ",
+ "go": "झासँ",
+ "searcharticle": "झासँ",
+ "history": "पौया इतिहास",
+ "history_short": "इतिहास",
+ "updatedmarker": "जिं दक्ले लिपा पौ स्वे धुंकाया अपडेट",
+ "printableversion": "ध्वायेज्युगु संस्करण",
+ "permalink": "स्थायी लिङ्क",
+ "print": "ध्वानादिसँ",
+ "view": "क्यनादिसँ",
+ "edit": "सम्पादन",
+ "create": "दयेकादिसँ",
+ "editthispage": "थ्व पौ सम्पादन यानादिसं",
+ "create-this-page": "थ्व पौ दयेकादिसँ",
+ "delete": "हुयादिसँ (दिलित)",
+ "deletethispage": "थ्व पौ हुयादिसँ (दिलित)",
+ "newpage": "न्हुगु पौ",
+ "talkpagelinktext": "खँल्हाबँल्हा",
+ "specialpage": "विषेश पौ",
+ "personaltools": "निजी ज्याब्व",
+ "talk": "खँलाबँला",
+ "toolbox": "ज्याब्व सन्दुक",
+ "projectpage": "ज्याखँ पौ क्येनादिसँ",
+ "otherlanguages": "मेमेगु भाषाय्",
+ "jumpto": "थन झासँ:",
+ "jumptosearch": "मालादिसँ",
+ "pool-errorunknown": "मस्युगु इरर",
+ "aboutsite": "{{SITENAME}}या बारेय्",
+ "aboutpage": "Project:बारेय्",
+ "copyright": "कण्टेण्ट $1 कथं उपलब्ध दु।",
+ "copyrightpage": "{{ns:project}}:लेखाधिकार",
+ "currentevents": "जुयाच्वँगु घटना",
+ "currentevents-url": "Project:जुयाच्वँगु घटना",
+ "disclaimers": "डिस्क्लेमर्स",
+ "disclaimerpage": "Project:साधारण डिस्क्लेमर्स",
+ "edithelp": "सम्पादन ग्वहालि",
+ "mainpage": "मू पौ",
+ "mainpage-description": "मू पौ",
+ "policy-url": "Project:नीति",
+ "portal": "सामाजिक मूलुखा",
+ "portal-url": "Project:सामाजिक मूलुखा",
+ "privacy": "दुबिस्ता नियम",
+ "privacypage": "Project:गुप्तता नियम",
+ "badaccess": "पर्मिसन इरर",
+ "badaccess-group0": "छिं अनुरोध यानादिगु ज्या छिं याये मछिं।",
+ "badaccess-groups": "छिं अनुरोध यानादिगु ज्या {{PLURAL:$2|पुचः|पुचःतः}}: $1या छ्यलामिं जक्क याये दु।",
+ "versionrequired": "मिडियाविकिया $1 संस्करण माःगु",
+ "versionrequiredtext": "थ्व पौ छ्यले यात मिडियाविकिया $1 संस्करण माः।\nस्वयादिसँ [[विशेष:संस्करण|संस्करण पौ]]।",
+ "ok": "ज्यु",
+ "youhavenewmessagesmulti": "$1य् छित न्हुगु सन्देश वगु दु",
+ "editsection": "सम्पादन",
+ "editold": "सम्पादन",
+ "editlink": "सम्पादन",
+ "editsectionhint": "खण्ड सम्पादन: $1",
+ "showtoc": "क्यनादिसँ",
+ "hidetoc": "सुचुकादिसँ",
+ "collapsible-expand": "चायेकादिसँ",
+ "red-link-title": "$1 (पौ मदु)",
+ "nstab-main": "पौ",
+ "nstab-user": "छ्य्‌लामि पौ",
+ "nstab-media": "मिडिया पौ",
+ "nstab-special": "विशेष",
+ "nstab-project": "ज्याझ्वः पौ",
+ "nstab-image": "फाइल",
+ "nstab-mediawiki": "सन्देश",
+ "nstab-template": "टेम्प्लेट",
+ "nstab-help": "ग्वहालि पौ",
+ "nstab-category": "पुचः",
+ "nosuchaction": "थन्यागु ज्या मदु",
+ "nosuchactiontext": "URLनं या धाःगु ज्या विकिं मस्यु",
+ "nosuchspecialpage": "थन्यागु विशेष पौ मदु",
+ "nospecialpagetext": "<strong>छिं मदुगु विशेष पौया माग तयादिल।</strong>\n\nअस्थित्वय् दुगु विशेष पौया धलः [[विशेष:विशेषपौ|{{int:specialpages}}]]य् दु।",
+ "databaseerror": "डेटाबेस इरर",
+ "laggedslavemode": "चेतावनी: पतिइ न्हुगु अपदेत मदेफु ।",
+ "readonly": "देताबेस संरक्षित",
+ "enterlockreason": "पौ कुनातयेगुया निंतिं कारण बियादिसँ, नापं पौ गब्ले चायेकिगु जुइफु उकिया अनुमान नं बियादिसँ",
+ "readonlytext": "थ्व डेटाबेस आःया ईले, सम्भवतः नियमित डेटाबेस मेन्टेनेन्सया निंतिं, न्हूगु एन्ट्रि व मेमेगु हिलेज्याया यायेमछिंकः कुनातःगु दु। थ्व धुंका हानं डेटाबेस साधारण जुइ।\n\nथ्व डेटाबेस कुनाःतम्ह प्रबन्धकं थ्व वर्णन ब्यूगु दु: $1",
+ "internalerror": "इन्तरनल इरर",
+ "viewsource": "स्रोत स्वयादिसँ",
+ "welcomeuser": "लसकुस, $1जु!",
+ "yourname": "छ्य्‌लामि नां:",
+ "yourpassword": "दुथखँग्वः (पासवर्द):",
+ "yourpasswordagain": "दुथखँग्वः हानं तियादिसँ:",
+ "yourdomainname": "छिगु दोमेन:",
+ "login": "दुहां वनेगु",
+ "nav-login-createaccount": "दुहां वनेगु / खाता चायेकिगु",
+ "userlogin": "दुहां वनेगु / खाता चायेकिगु",
+ "logout": "पिने झासँ",
+ "userlogout": "पिने झासँ",
+ "nologinlink": "खाता न्ह्यथनादिसँ",
+ "createaccount": "खाता चायेकादिसँ",
+ "gotaccountlink": "दुहां झासँ",
+ "badretype": "छिं तियादिगु पासवर्द पाय्‌छि मजु।",
+ "loginsuccesstitle": "लग इन सफल जुल",
+ "emaildisabled": "थ्व फाइलं इमेल छ्वयेमफु।",
+ "accountcreated": "खाता न्ह्येथन",
+ "accountcreatedtext": "$1या निंतिं छ्य्‌लामि खाता चायेकूगु दु।",
+ "loginlanguagelabel": "भाषा: $1",
+ "changepassword": "पासवर्द हिलादिसँ",
+ "changeemail-submit": "इ-मेल हिलादिसँ",
+ "bold_sample": "गाढा आखः",
+ "bold_tip": "गाढा आखः",
+ "italic_sample": "बेक्वःगु आखः",
+ "italic_tip": "बेक्वःगु आखः",
+ "link_tip": "आन्तरिक लिंक",
+ "summary": "सारांश:",
+ "minoredit": "थ्व चिधंगु सम्पादन ख",
+ "watchthis": "थ्व पौ स्वयादिसँ",
+ "savearticle": "पौ स्वथनादिसँ",
+ "preview": "न्हेकिपा",
+ "showpreview": "न्हेकिपा क्यनादिसँ",
+ "showdiff": "हिसुझ्वः क्यनादिसँ",
+ "anoneditwarning": "'''न्ह्यःखँ:''' छि लग्द इन मदु। \nछिगु IP address पौया सम्पादन इतिहासय् स्वथनिगु जुइ।",
+ "anonpreviewwarning": "''छि लग्द इन मदु। थ्व पौ स्वथनादिल धाःसा छिगु IP address थ्व पौया इतिहासय् स्वथनिगु जुइ।''",
+ "loginreqtitle": "लग इन माःगु",
+ "loginreqpagetext": "मेमेगु पौ स्वयेत छिं $1 यायेमा/जुइमा।",
+ "accmailtitle": "पासवर्द छ्वल।",
+ "newarticle": "(न्हु)",
+ "note": "'''होस यानादिसँ:'''",
+ "previewnote": "'''थ्व पूर्वालोकन जक्क ख। छिं यानादिगु सम्पादन स्वथंगु मदुनि!'''",
+ "editing": "$1 सम्पादन जुयाच्वँगु दु",
+ "editconflict": "सम्पादन द्वंगु दु: $1",
+ "yourtext": "छिगु आखः",
+ "storedversion": "स्वथनातगु संस्करण",
+ "content-model-text": "सादा आखः",
+ "revisionasof": "$1 तक्कया संस्करण",
+ "previousrevision": "←पुलांगु संस्करण",
+ "searchprofile-everything": "दक्वं",
+ "search-result-size": "$1 ({{PLURAL:$2|1 खँग्वः |$2 खँग्वःत}})",
+ "searchrelated": "स्वापू दुःगु",
+ "searchall": "सकल",
+ "mypreferences": "जिगु प्राथमिकता",
+ "prefs-skin": "भुँसा",
+ "prefs-personal": "छ्य्‌लामि प्रोफाइल",
+ "prefs-rc": "न्हुगु हिलेज्या",
+ "saveprefs": "स्वथनादिसँ",
+ "youremail": "इ-मेल:",
+ "username": "छ्य्‌लामि नां:",
+ "yourrealname": "वास्तविक नां:",
+ "yourlanguage": "भाषा:",
+ "gender-male": "मिजं",
+ "gender-female": "मिसा",
+ "email": "इ-मेल",
+ "userrights-user-editname": "छपू छ्य्‌लामि नां तयादिसँ:",
+ "group": "पुचः",
+ "group-user": "छ्य्‌लामित",
+ "group-bot": "बोत",
+ "recentchanges": "नकतिनिया हिसुझ्वः",
+ "show": "क्यनादिसँ",
+ "upload": "फाइल अपलोद यानादिसँ",
+ "file-anchor-link": "फाइल",
+ "filehist-user": "छ्य्‌लामि",
+ "randompage": "छगु च्वसुइ येंकादिसं",
+ "statistics": "तथ्याङ्क",
+ "withoutinterwiki-submit": "क्यनादिसँ",
+ "newpages-username": "छ्येलेमि नां:",
+ "allpages": "सकल पौत",
+ "nextpage": "मेगु पौ ($1)",
+ "allarticles": "सकल च्वसुत",
+ "allpagessubmit": "झासँ",
+ "categories": "पुचःत",
+ "emailusername": "छ्य्‌लामि नां (युजर नेम) :",
+ "restriction-edit": "सम्पादन",
+ "namespace": "नेमस्पेस:",
+ "blanknamespace": "(मू)",
+ "mycontris": "जिगु योगदान",
+ "sp-contributions-talk": "खँल्हाबँल्हा",
+ "whatlinkshere": "थन छु स्वाई",
+ "contribslink": "योगदान",
+ "movereason": "कारण:",
+ "tooltip-search": "{{SITENAME}} मालादिसं",
+ "tooltip-search-fulltext": "थ्व खँग्वःया निंतिं पौस मालादिसं",
+ "tooltip-p-logo": "मू पौय् झासँ",
+ "tooltip-n-mainpage": "मू पौ भ्रमण यानादिसँ",
+ "tooltip-n-portal": "ज्याझ्वःया बारेय्, छिं छु यायेछिं, गन खँ सीकिगु",
+ "tooltip-n-currentevents": "जुयाच्वँगु घटनाया लिधँसा तथ्य मालादिसँ",
+ "tooltip-n-recentchanges": "थ्व विकिया न्हुगु हिलेज्याया धलः।",
+ "tooltip-n-randompage": "न्ह्याःगु छगू पौ क्यनादिसँ",
+ "tooltip-n-help": "खँ सीकिगु थाय्।",
+ "tooltip-t-whatlinkshere": "थन स्वाइगु सकल विकिपौया धलः",
+ "tooltip-t-recentchangeslinked": "थ्व पौ नाप स्वाःगु पौतेगु न्हुगु हिलेज्या",
+ "tooltip-feed-rss": "थ्व पौया RSS फीड",
+ "tooltip-feed-atom": "थ्व पौया Atom फीड",
+ "tooltip-t-contributions": "थ्व छ्य्‌लामिया योगदानया धलः क्यनादिसँ",
+ "tooltip-t-emailuser": "थ्व छ्य्‌लामियात इ-मेल छ्वयादिसँ",
+ "tooltip-t-upload": "फाइल अपलोद यानादिसँ",
+ "tooltip-t-specialpages": "सकल विशेष पौस धलः",
+ "tooltip-t-print": "थ्व पौस ध्वायेज्युगु संस्करण",
+ "tooltip-t-permalink": "थ्व पौस थ्व संस्करणया पर्मानेन्ट लिङ्क",
+ "tooltip-ca-nstab-main": "कन्टेन्ट पौ स्वयादिसँ",
+ "tooltip-ca-nstab-user": "छ्य्‌लामिपौ स्वयादिसँ",
+ "tooltip-ca-nstab-media": "मिडिया पौ स्वयादिसँ",
+ "tooltip-ca-nstab-special": "थ्व छगू विशेष पौ ख ; थ्व पौयात छिं सम्पादन याये मछिं।",
+ "tooltip-ca-nstab-project": "ज्याझ्वः पौ स्वयादिसँ",
+ "tooltip-ca-nstab-image": "फाइल पौ स्वयादिसँ",
+ "tooltip-ca-nstab-mediawiki": "व्यवस्थापन सन्देश स्वयादिसँ",
+ "tooltip-ca-nstab-template": "टेम्प्लेट स्वयादिसँ",
+ "tooltip-ca-nstab-help": "ग्वहालि पौ स्वयादिसँ",
+ "tooltip-ca-nstab-category": "पुचः पौ स्वयादिसँ",
+ "tooltip-minoredit": "थ्व छगू चिधंगु सम्पादन ख",
+ "tooltip-save": "छिगु परिवर्तन स्वथनादिसँ",
+ "tooltip-preview": "छिगु परिवर्तन पुर्वालोकन यानादिसँ, कृपया स्वथने न्ह्यः थ्व छ्य्‌लादिसँ!",
+ "tooltip-diff": "छिं पतीइ यानादिगु हिलेज्या क्यनादिसँ।",
+ "tooltip-compareselectedversions": "निगु ल्ययातःगु संस्करणया दथुइ भिन्नता स्वयादिसँ।",
+ "tooltip-watch": "थ्व पौयात छिगु वाचलिस्टय् तनादिसँ",
+ "tooltip-recreate": "थ्व पौ हुयाछ्वेधुंकुगु जुसां पुनर्निर्माण यानादिसँ",
+ "tooltip-upload": "अपलोड न्ह्यथनादिसँ",
+ "tooltip-rollback": "\"रोलब्याकं\" छगू क्लिकय् थ्व पौयात न्हापाया छ्य्‌लामिं याःगु परिवर्तनय् हिलाछ्वइ।",
+ "tooltip-undo": "\"Undo\" नं थ्व सम्पादनयात खारेज याना सम्पादन फर्म यात प्रिभ्यु मोडय् चायेकी।\nथुकिलिं सारांशय् कारण तनेछिंकी।",
+ "common.css": "/* थन तःगु CSS सकल स्किनय् छ्य्‌लिगु जुइ */",
+ "print.css": "/* थन तःगु CSS नं प्रिन्ट आउटपुटयात असर याइ */",
+ "others": "मेमेगु",
+ "exif-imagewidth": "ब्याः",
+ "exif-imagelength": "जाः",
+ "exif-imagedescription": "किपाया नां",
+ "exif-make": "किपासाः दयेकामि",
+ "exif-model": "किपासाः मोदेल",
+ "exif-software": "छ्यलातःगु सफ्तवेयर",
+ "exif-artist": "च्वमि",
+ "exif-copyright": "लेखाधिकार थुवा",
+ "exif-pixelydimension": "किपा ब्याः",
+ "exif-pixelxdimension": "किपा जाः",
+ "exif-dc-date": "तिथि",
+ "namespacesall": "सकल",
+ "autosumm-new": "न्हुगु पौ: $1",
+ "specialpages": "विषेश पौत:"
}
diff --git a/languages/i18n/niu.json b/languages/i18n/niu.json
index 7cbd573c..2f99b4fe 100644
--- a/languages/i18n/niu.json
+++ b/languages/i18n/niu.json
@@ -1,174 +1,173 @@
{
- "@metadata": {
- "authors": [
- "Jose77",
- "Rotemliss",
- "Sioneholof"
- ]
- },
- "sunday": "Aho Tapu",
- "monday": "Aho Gofua",
- "tuesday": "Aho Ua",
- "wednesday": "Aho Lotu",
- "thursday": "Aho Tuloto",
- "friday": "Aho Falaile",
- "saturday": "Aho Faiumu",
- "january": "Ianuali",
- "february": "Fepuali",
- "march": "Masi",
- "april": "Apelila",
- "may_long": "Me",
- "june": "Iuni",
- "july": "Iulai",
- "august": "Aokuso",
- "september": "Sepetema",
- "october": "Oketopa",
- "november": "Novema",
- "december": "Tesemo",
- "january-gen": "Ianuali",
- "february-gen": "Fepuali",
- "march-gen": "Masi",
- "april-gen": "Apelila",
- "may-gen": "Me",
- "june-gen": "Iuni",
- "july-gen": "Iulai",
- "august-gen": "Aokuso",
- "september-gen": "Sepetema",
- "october-gen": "Oketopa",
- "november-gen": "Novema",
- "december-gen": "Tesemo",
- "may": "Me",
- "article": "Tohi Tala",
- "cancel": "Tiaki",
- "mytalk": "Haaku tutala",
- "navigation": "Navikati",
- "qbedit": "Fakahakohako",
- "help": "Lagomatai",
- "search": "Kumi",
- "searchbutton": "Kumi",
- "go": "Fano",
- "searcharticle": "Fano",
- "history_short": "Liu onoono atu ki tua",
- "printableversion": "Mitaki lolomi",
- "permalink": "Matutakiaga mautumau",
- "edit": "Fakahakohako",
- "delete": "Tamate",
- "protect": "Puipui",
- "talkpagelinktext": "Tutala",
- "talk": "Fakatutala",
- "toolbox": "Puha Mena Gahua",
- "otherlanguages": "Ke he falu vagahau",
- "jumptonavigation": "navikati",
- "jumptosearch": "kumi",
- "aboutsite": "Hagaao ke he {{SITENAME}}",
- "aboutpage": "Project: Hagaao",
- "currentevents": "Tau Fakaholoaga Mogonei",
- "edithelp": "Lagomatai ke he Fakahakohako",
- "mainpage": "Matapatu Lau",
- "mainpage-description": "Matapatu Lau",
- "portal": "Maaga ke Matutaki",
- "portal-url": "Project:Ko e lau auloa ma maaga",
- "privacy": "Ko e puipuiaga ke he tau talahauaga mo e talahauaga fakatagata",
- "youhavenewmessages": "Fai $1 ($2).",
- "youhavenewmessagesmulti": "Fai tohi foou a koe he $1",
- "editsection": "fakahakohako",
- "editold": "fakahakohako",
- "editsectionhint": "Hiki e vala e: $1",
- "red-link-title": "$1 (nakai fai lau pihia i i loto e)",
- "nstab-main": "Lau",
- "nstab-user": "Lau he tagata",
- "viewsource": "Kitekite ke mouaga",
- "yourname": "Matahigoa he tagata:",
- "yourpassword": "Kupu fufu:",
- "yourpasswordagain": "Liu lolomi e kupu fufu:",
- "remembermypassword": "Manatu e haaku loko ini (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "Hu ki loto",
- "nav-login-createaccount": "Hu ki loto / talaga e poko",
- "userlogin": "Hu ki loto / talaga e poko",
- "logout": "Hu mai ki tua",
- "userlogout": "Hu mai ki tua",
- "notloggedin": "Ai la hu ki loto",
- "createaccount": "Talaga e poko",
- "gotaccountlink": "Hu ki loto",
- "passwordreset-username": "Matahigoa he tagata",
- "summary": "Fakakatoakatoa:",
- "minoredit": "Ko e fakahakohako fakatote",
- "watchthis": "Onoono e lau e",
- "savearticle": "Taofi e lau",
- "showpreview": "Fakakite e foliga",
- "showdiff": "Fakakite e tau hikihiki",
- "loginreqlink": "hu ki loto",
- "currentrev": "Kitekiteaga mogonei",
- "currentrevisionlink": "Kitekiteaga mogonei",
- "editundo": "Liuaki",
- "mypreferences": "Haaku a tau manako",
- "prefs-rc": "Hikihikiaga mogoia",
- "searchresultshead": "Kumi",
- "youremail": "Meli hila:",
- "username": "Matahigoa he tagata:",
- "email": "Meli hila",
- "recentchanges": "Hikihikiaga mogoia",
- "hist": "Liu onoono atu ki tua",
- "recentchangeslinked": "Falu hikihiki",
- "recentchangeslinked-feed": "Falu hikihiki",
- "recentchangeslinked-toolbox": "Falu hikihiki",
- "upload": "Fakafano e faila",
- "uploadbtn": "Fakafano e faila",
- "uploadnologin": "Ai la hu ki loto",
- "filedesc": "Fakakatoakatoa",
- "fileuploadsummary": "Fakakatoakatoa:",
- "watchthisupload": "Onoono e lau e",
- "filehist-deleteone": "tamate",
- "filedelete-submit": "Tamate",
- "randompage": "Lau fifili",
- "brokenredirects-edit": "fakahakohako",
- "brokenredirects-delete": "tamate",
- "newpages-username": "Matahigoa he tagata:",
- "move": "Une",
- "movethispage": "Une e lau e",
- "booksources-go": "Fano",
- "linksearch-ok": "Kumi",
- "watchlist": "Ko e haaku lau kitekite",
- "mywatchlist": "Ko e haaku lau kitekite",
- "watchnologin": "Ai la hu ki loto",
- "watch": "Kitekite",
- "watchthispage": "Onoono e lau e",
- "delete-legend": "Tamate",
- "prot_1movedto2": "[[$1]] kua une ke he [[$2]]",
- "restriction-edit": "Fakahakohako",
- "restriction-move": "Une",
- "undelete-search-submit": "Kumi",
- "contributions": "Tau lagomatai tagata",
- "mycontris": "Haaku a tau lagomatai",
- "sp-contributions-submit": "Kumi",
- "whatlinkshere": "Ko e tau matutakiaga he mena e",
- "ipbreason": "Kakano:",
- "ipblocklist-submit": "Kumi",
- "move-watch": "Onoono e lau e",
- "movereason": "Kakano:",
- "allmessages": "Tau fakailoaga",
- "tooltip-pt-preferences": "Haaku a tau manako",
- "tooltip-pt-login": "Kua lata ia koe ke loko ini, kae pule ni e a koe, ai pehe ko e masi a koe ke loko ini",
- "tooltip-pt-logout": "Hu mai ki tua",
- "tooltip-ca-talk": "Tutala ke he tau matapatu lau",
- "tooltip-ca-edit": "Maeke ia koe ke hiki, uta kehe mo e lalafi atu falu mena ke he lau nei. Fakamolemole ti fakaaoga e PREVIEW patani to taofi mau.",
- "tooltip-search": "Kumi {{SITENAME}}",
- "tooltip-search-fulltext": "Kumi ke he tau lau oti e kupu e",
- "tooltip-p-logo": "Matapatu Lau",
- "tooltip-n-mainpage-description": "Fano ke he matapatu lau",
- "tooltip-n-portal": "Hagao ke he gahua lahi, ko e heigoa kua lata a koe ke taute, mo e moua mai i fe e tau mena",
- "tooltip-n-currentevents": "Kumi e tau vala tala kehekehe hagao ke he tau mena tutupu",
- "tooltip-n-recentchanges": "Hae e tau hikihiki foou he wiki",
- "tooltip-n-randompage": "Tuku mai noa ni e ha lau",
- "tooltip-n-help": "Ko e matakavi ke kumi ki ai",
- "tooltip-t-whatlinkshere": "Ko e tau lau wiki oti ne fai matutaki mai ke he lau e",
- "tooltip-t-upload": "Fakahu ki loto e tau faila",
- "tooltip-t-specialpages": "Ko e tau lau oti kua kehekehe",
- "ilsubmit": "Kumi",
- "bad_image_list": "Ko e tau mena ni ne fakakite mai ka onoono ki ai (ko e tau laini ne kamata aki e *).\nKo e liniki fakamua he laini ko e liniki ke he faila kelea.\nKo e tau liniki foki i lalo he laini taha ko e tau laini fifili pauaki, i.e. ko e tau lau ne fai faila i loto he laini ia.",
- "imgmultigo": "Fano!",
- "table_pager_limit_submit": "Fano",
- "version-specialpages": "Tau Lau Mahuiga",
- "fileduplicatesearch-submit": "Kumi",
- "specialpages": "Tau Lau Mahuiga"
+ "@metadata": {
+ "authors": [
+ "Jose77",
+ "Rotemliss",
+ "Sioneholof"
+ ]
+ },
+ "sunday": "Aho Tapu",
+ "monday": "Aho Gofua",
+ "tuesday": "Aho Ua",
+ "wednesday": "Aho Lotu",
+ "thursday": "Aho Tuloto",
+ "friday": "Aho Falaile",
+ "saturday": "Aho Faiumu",
+ "january": "Ianuali",
+ "february": "Fepuali",
+ "march": "Masi",
+ "april": "Apelila",
+ "may_long": "Me",
+ "june": "Iuni",
+ "july": "Iulai",
+ "august": "Aokuso",
+ "september": "Sepetema",
+ "october": "Oketopa",
+ "november": "Novema",
+ "december": "Tesemo",
+ "january-gen": "Ianuali",
+ "february-gen": "Fepuali",
+ "march-gen": "Masi",
+ "april-gen": "Apelila",
+ "may-gen": "Me",
+ "june-gen": "Iuni",
+ "july-gen": "Iulai",
+ "august-gen": "Aokuso",
+ "september-gen": "Sepetema",
+ "october-gen": "Oketopa",
+ "november-gen": "Novema",
+ "december-gen": "Tesemo",
+ "may": "Me",
+ "article": "Tohi Tala",
+ "cancel": "Tiaki",
+ "mytalk": "Haaku tutala",
+ "navigation": "Navikati",
+ "qbedit": "Fakahakohako",
+ "help": "Lagomatai",
+ "search": "Kumi",
+ "searchbutton": "Kumi",
+ "go": "Fano",
+ "searcharticle": "Fano",
+ "history_short": "Liu onoono atu ki tua",
+ "printableversion": "Mitaki lolomi",
+ "permalink": "Matutakiaga mautumau",
+ "edit": "Fakahakohako",
+ "delete": "Tamate",
+ "protect": "Puipui",
+ "talkpagelinktext": "Tutala",
+ "talk": "Fakatutala",
+ "toolbox": "Puha Mena Gahua",
+ "otherlanguages": "Ke he falu vagahau",
+ "jumptonavigation": "navikati",
+ "jumptosearch": "kumi",
+ "aboutsite": "Hagaao ke he {{SITENAME}}",
+ "aboutpage": "Project: Hagaao",
+ "currentevents": "Tau Fakaholoaga Mogonei",
+ "edithelp": "Lagomatai ke he Fakahakohako",
+ "mainpage": "Matapatu Lau",
+ "mainpage-description": "Matapatu Lau",
+ "portal": "Maaga ke Matutaki",
+ "portal-url": "Project:Ko e lau auloa ma maaga",
+ "privacy": "Ko e puipuiaga ke he tau talahauaga mo e talahauaga fakatagata",
+ "youhavenewmessages": "Fai $1 ($2).",
+ "youhavenewmessagesmulti": "Fai tohi foou a koe he $1",
+ "editsection": "fakahakohako",
+ "editold": "fakahakohako",
+ "editsectionhint": "Hiki e vala e: $1",
+ "red-link-title": "$1 (nakai fai lau pihia i i loto e)",
+ "nstab-main": "Lau",
+ "nstab-user": "Lau he tagata",
+ "viewsource": "Kitekite ke mouaga",
+ "yourname": "Matahigoa he tagata:",
+ "yourpassword": "Kupu fufu:",
+ "yourpasswordagain": "Liu lolomi e kupu fufu:",
+ "remembermypassword": "Manatu e haaku loko ini (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "Hu ki loto",
+ "nav-login-createaccount": "Hu ki loto / talaga e poko",
+ "userlogin": "Hu ki loto / talaga e poko",
+ "logout": "Hu mai ki tua",
+ "userlogout": "Hu mai ki tua",
+ "notloggedin": "Ai la hu ki loto",
+ "createaccount": "Talaga e poko",
+ "gotaccountlink": "Hu ki loto",
+ "passwordreset-username": "Matahigoa he tagata",
+ "summary": "Fakakatoakatoa:",
+ "minoredit": "Ko e fakahakohako fakatote",
+ "watchthis": "Onoono e lau e",
+ "savearticle": "Taofi e lau",
+ "showpreview": "Fakakite e foliga",
+ "showdiff": "Fakakite e tau hikihiki",
+ "loginreqlink": "hu ki loto",
+ "currentrev": "Kitekiteaga mogonei",
+ "currentrevisionlink": "Kitekiteaga mogonei",
+ "editundo": "Liuaki",
+ "mypreferences": "Haaku a tau manako",
+ "prefs-rc": "Hikihikiaga mogoia",
+ "searchresultshead": "Kumi",
+ "youremail": "Meli hila:",
+ "username": "Matahigoa he tagata:",
+ "email": "Meli hila",
+ "recentchanges": "Hikihikiaga mogoia",
+ "hist": "Liu onoono atu ki tua",
+ "recentchangeslinked": "Falu hikihiki",
+ "recentchangeslinked-feed": "Falu hikihiki",
+ "recentchangeslinked-toolbox": "Falu hikihiki",
+ "upload": "Fakafano e faila",
+ "uploadbtn": "Fakafano e faila",
+ "uploadnologin": "Ai la hu ki loto",
+ "filedesc": "Fakakatoakatoa",
+ "fileuploadsummary": "Fakakatoakatoa:",
+ "watchthisupload": "Onoono e lau e",
+ "filehist-deleteone": "tamate",
+ "filedelete-submit": "Tamate",
+ "randompage": "Lau fifili",
+ "brokenredirects-edit": "fakahakohako",
+ "brokenredirects-delete": "tamate",
+ "newpages-username": "Matahigoa he tagata:",
+ "move": "Une",
+ "movethispage": "Une e lau e",
+ "linksearch-ok": "Kumi",
+ "watchlist": "Ko e haaku lau kitekite",
+ "mywatchlist": "Ko e haaku lau kitekite",
+ "watchnologin": "Ai la hu ki loto",
+ "watch": "Kitekite",
+ "watchthispage": "Onoono e lau e",
+ "delete-legend": "Tamate",
+ "prot_1movedto2": "[[$1]] kua une ke he [[$2]]",
+ "restriction-edit": "Fakahakohako",
+ "restriction-move": "Une",
+ "undelete-search-submit": "Kumi",
+ "contributions": "Tau lagomatai tagata",
+ "mycontris": "Haaku a tau lagomatai",
+ "sp-contributions-submit": "Kumi",
+ "whatlinkshere": "Ko e tau matutakiaga he mena e",
+ "ipbreason": "Kakano:",
+ "ipblocklist-submit": "Kumi",
+ "move-watch": "Onoono e lau e",
+ "movereason": "Kakano:",
+ "allmessages": "Tau fakailoaga",
+ "tooltip-pt-preferences": "Haaku a tau manako",
+ "tooltip-pt-login": "Kua lata ia koe ke loko ini, kae pule ni e a koe, ai pehe ko e masi a koe ke loko ini",
+ "tooltip-pt-logout": "Hu mai ki tua",
+ "tooltip-ca-talk": "Tutala ke he tau matapatu lau",
+ "tooltip-ca-edit": "Maeke ia koe ke hiki, uta kehe mo e lalafi atu falu mena ke he lau nei. Fakamolemole ti fakaaoga e PREVIEW patani to taofi mau.",
+ "tooltip-search": "Kumi {{SITENAME}}",
+ "tooltip-search-fulltext": "Kumi ke he tau lau oti e kupu e",
+ "tooltip-p-logo": "Matapatu Lau",
+ "tooltip-n-mainpage-description": "Fano ke he matapatu lau",
+ "tooltip-n-portal": "Hagao ke he gahua lahi, ko e heigoa kua lata a koe ke taute, mo e moua mai i fe e tau mena",
+ "tooltip-n-currentevents": "Kumi e tau vala tala kehekehe hagao ke he tau mena tutupu",
+ "tooltip-n-recentchanges": "Hae e tau hikihiki foou he wiki",
+ "tooltip-n-randompage": "Tuku mai noa ni e ha lau",
+ "tooltip-n-help": "Ko e matakavi ke kumi ki ai",
+ "tooltip-t-whatlinkshere": "Ko e tau lau wiki oti ne fai matutaki mai ke he lau e",
+ "tooltip-t-upload": "Fakahu ki loto e tau faila",
+ "tooltip-t-specialpages": "Ko e tau lau oti kua kehekehe",
+ "ilsubmit": "Kumi",
+ "bad_image_list": "Ko e tau mena ni ne fakakite mai ka onoono ki ai (ko e tau laini ne kamata aki e *).\nKo e liniki fakamua he laini ko e liniki ke he faila kelea.\nKo e tau liniki foki i lalo he laini taha ko e tau laini fifili pauaki, i.e. ko e tau lau ne fai faila i loto he laini ia.",
+ "imgmultigo": "Fano!",
+ "table_pager_limit_submit": "Fano",
+ "version-specialpages": "Tau Lau Mahuiga",
+ "fileduplicatesearch-submit": "Kumi",
+ "specialpages": "Tau Lau Mahuiga"
}
diff --git a/languages/i18n/nl-informal.json b/languages/i18n/nl-informal.json
index 7db61803..64585756 100644
--- a/languages/i18n/nl-informal.json
+++ b/languages/i18n/nl-informal.json
@@ -1,290 +1,288 @@
{
- "@metadata": {
- "authors": [
- "HanV",
- "MarkvA",
- "Siebrand",
- "Tedjuh10"
- ]
- },
- "view-pool-error": "De servers zijn op het moment helaas overbelast.\nTe veel gebruikers proberen deze pagina te bekijken.\nWacht even voordat je opnieuw toegang probeert te krijgen tot deze pagina.\n\n$1",
- "badaccess-group0": "Je hebt geen rechten om de gevraagde handeling uit te voeren.",
- "youhavenewmessages": "Je hebt $1 ($2).",
- "youhavenewmessagesfromusers": "Je hebt $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).",
- "youhavenewmessagesmanyusers": "Je hebt $1 van een groot aantal gebruikers ($2).",
- "youhavenewmessagesmulti": "Je hebt nieuwe berichten op $1",
- "nosuchactiontext": "De opdracht in de URL is ongeldig.\nMogelijk heb je een typefout gemaakt in de URL of een onjuiste koppeling gevolgd.\nHet kan ook wijzen op een fout in de software van {{SITENAME}}.",
- "nospecialpagetext": "<strong>Je hebt een onbestaande speciale pagina opgevraagd.</strong>\n\nEen lijst met bestaande speciale pagina’s staat op [[Special:SpecialPages|speciale pagina’s]].",
- "missing-article": "In de database is geen inhoud aangetroffen voor de pagina \"$1\" die er wel zou moeten zijn ($2).\n\nDit kan voorkomen als je een verouderde koppeling naar het verschil tussen twee versies van een pagina volgt of een versie opvraagt die is verwijderd.\n\nAls dit niet het geval is, heb je wellicht een fout in de software gevonden.\nMaak hiervan melding bij een [[Special:ListUsers/sysop|beheerder]] van {{SITENAME}} en vermeld daarbij de URL van deze pagina.",
- "actionthrottledtext": "Als maatregel tegen spam is het aantal keren per tijdseenheid dat je deze handeling kunt verrichten beperkt.\nDe limiet is overschreden.\nProbeer het over een aantal minuten opnieuw.",
- "viewsourcetext": "Je kunt de brontekst van deze pagina bekijken en kopiëren:",
- "viewyourtext": "Je kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
- "editinginterface": "'''Waarschuwing:''' je bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
- "namespaceprotected": "Je hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
- "customcssprotected": "Je kunt deze CSS-pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
- "customjsprotected": "Je kunt deze JavaScriptpagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
- "exception-nologin-text": "Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet je aangemeld zijn bij deze wiki.",
- "logouttext": "'''Je bent nu afgemeld.'''\n\nJe kunt {{SITENAME}} nu anoniem gebruiken of weer <span class='plainlinks'>[$1 aanmelden]</span> als dezelfde of een andere gebruiker.\nMogelijk worden nog een aantal pagina's weergegeven alsof je aangemeld bent totdat je de cache van uw browser leegt.",
- "welcomecreation-msg": "Je gebruiker is aangemaakt.\nVergeet niet je [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.",
- "yourpasswordagain": "Geef je wachtwoord opnieuw in:",
- "yourdomainname": "Je domein:",
- "password-change-forbidden": "Je kunt je wachtwoord niet wijzigen in deze wiki.",
- "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of je hebt geen toestemming je externe gebruiker bij te werken.",
- "loginprompt": "Je moet cookies ingeschakeld hebben om je te kunnen aanmelden bij {{SITENAME}}.",
- "gotaccount": "Heb je al een gebruikersnaam? '''$1'''.",
- "userlogin-resetlink": "Ben je je aanmeldgegevens vergeten?",
- "nocookiesnew": "De gebruiker is geregistreerd, maar jij bent niet aangemeld.\n{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nSchakel die in en meld daarna aan met je nieuwe gebruikersnaam en wachtwoord.",
- "nocookieslogin": "{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nCookies zijn uitgeschakeld in je browser.\nSchakel deze optie aan en probeer het opnieuw.",
- "nocookiesfornew": "De gebruiker is niet gemaakt omdat de bron niet bevestigd kon worden.\nZorg ervoor dat je cookies hebt ingeschakeld, herlaad deze pagina en probeer het opnieuw.",
- "noname": "Je hebt geen geldige gebruikersnaam opgegeven.",
- "loginsuccess": "'''Je bent nu aangemeld bij {{SITENAME}} als \"$1\".'''",
- "nouserspecified": "Geef een gebruikersnaam op.",
- "password-name-match": "Je wachtwoord en uw gebruikersnaam mogen niet overeenkomen.",
- "passwordremindertext": "Iemand, waarschijnlijk jijzelf, heeft vanaf IP-adres $1 een verzoek\ngedaan tot het toezenden van een nieuw wachtwoord voor {{SITENAME}}\n($4). Er is een tijdelijk wachtwoord aangemaakt voor gebruiker \"$2\":\n\"$3\". Als dat je bedoeling was, meld je dan nu aan en kies een nieuw\nwachtwoord.\nJe tijdelijke wachtwoord vervalt over {{PLURAL:$5|$5 dag|$5 dagen}}.\n\nAls iemand anders dan jij dit verzoek heeft gedaan of als je zich inmiddels het\nwachtwoord herinnert en het niet langer wilt wijzigen, negeer dit bericht\ndan en blijf je bestaande wachtwoord gebruiken.",
- "noemailcreate": "Je moet een geldig e-mailadres opgeven",
- "passwordsent": "Het wachtwoord is verzonden naar het e-mailadres voor \"$1\".\nMeld je aan nadat je het hebt ontvangen.",
- "blocked-mailpassword": "Je IP-adres is geblokkeerd voor het maken van wijzigingen.\nOm misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.",
- "eauthentsent": "Er is ter bevestiging een e-mail naar het opgegeven e-mailadres gezonden.\nVolg de aanwijzingen in de e-mail om aan te geven dat het jouw e-mailadres is.\nTot die tijd worden er geen e-mails naar het e-mailadres gezonden.",
- "acct_creation_throttle_hit": "Bezoekers van deze wiki met hetzelfde IP-adres als jij hebben de afgelopen dag al $1 gebruiker{{PLURAL:$1||s}} geregistreerd, wat het maximale aantal in deze periode is.\nDaarom kan je vanaf je IP-adres op dit moment geen nieuwe gebruikers registreren.",
- "emailauthenticated": "Je e-mailadres is bevestigd op $2 om $3.",
- "emailnotauthenticated": "Je e-mailadres is niet bevestigd.\nJe ontvangt geen e-mail voor de onderstaande functies.",
- "noemailprefs": "Geef een e-mailadres op in je voorkeuren om deze functies te gebruiken.",
- "emailconfirmlink": "Bevestig je e-mailadres",
- "createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en jouw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld je aan en wijzig je wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder jouw medeweten is aangemaakt.",
- "login-throttled": "Je hebt recentelijk te vaak geprobeerd aan te melden met een onjuist wachtwoord.\nWacht even voordat je het opnieuw probeert.",
- "login-abort-generic": "Je bent niet aangemeld. De procedure is afgebroken.",
- "suspicious-userlogout": "Je verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.",
- "resetpass_announce": "Je bent aangemeld met een tijdelijke code die je per e-mail is toegezonden.\nVoer een nieuw wachtwoord in om het aanmelden te voltooien:",
- "changepassword-success": "Je wachtwoord is gewijzigd.\nBezig met aanmelden…",
- "resetpass-no-info": "Je moet aangemeld zijn voordat je deze pagina kunt gebruiken.",
- "resetpass-wrong-oldpass": "Het huidige of tijdelijke wachtwoord is ongeldig.\nMogelijk heb je je wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.",
- "passwordreset-capture-help": "Als je dit vakje aanvinkt, wordt de e-mail (met het tijdelijke wachtwoord) naar de gebruiker verzonden en ook aan jou weergegeven.",
- "passwordreset-emailtext-ip": "Iemand, waarschijnlijk jij, heeft vanaf het IP-adres $1 je gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.\nDe volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld je aan en wijzig het wachtwoord nu. Als je dit verzoek niet zelf hebt gedaan, of als je het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf je oude wachtwoord gebruiken.",
- "passwordreset-emailtext-user": "Gebruiker $1 op de site {{SITENAME}} heeft je gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.\nDe volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld je aan en wijzig het wachtwoord nu. Als je dit verzoek niet zelf hebt gedaan, of als je het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf je oude wachtwoord gebruiken.",
- "changeemail-text": "Vul dit formulier in om je e-mailadres te wijzigen. Je moet je wachtwoord invoeren om deze wijziging te bevestigen.",
- "changeemail-no-info": "Je moet aangemeld zijn om rechtstreeks toegang te hebben tot deze pagina.",
- "changeemail-password": "Jouw wachtwoord voor {{SITENAME}}:",
- "sig_tip": "Je handtekening met datum en tijd",
- "anoneditwarning": "'''Waarschuwing:''' je bent niet aangemeld.\nJe IP-adres wordt opgeslagen als je wijzigingen op deze pagina maakt.",
- "anonpreviewwarning": "''Je bent niet aangemeld.''\n''Door je bewerking op te slaan wordt je IP-adres opgeslagen in de paginageschiedenis.''",
- "missingsummary": "'''Let op:''' je hebt geen samenvatting opgegeven voor je bewerking.\nAls je nogmaals op ''Pagina opslaan'' klikt wordt de bewerking zonder samenvatting opgeslagen.",
- "missingcommenttext": "Plaats je reactie hieronder.",
- "missingcommentheader": "'''Let op:''' Je hebt geen onderwerp/kop voor deze reactie opgegeven.\nAls je opnieuw op \"{{int:savearticle}}\" klikt, wordt je wijziging zonder een onderwerp of koptekst opgeslagen.",
- "blockedtext": "'''Je gebruiker of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nJe kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nJe kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij je een geldig e-mailadres hebt opgegeven in je [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nJe huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.",
- "autoblockedtext": "Je IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nJe kunt deze blokkade bespreken met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]].\n\nJe kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij je een geldig e-mailadres hebt opgegeven in je [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet is geblokkeerd.\n\nJe huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.",
- "whitelistedittext": "Je moet $1 om pagina's te bewerken.",
- "confirmedittext": "Je moet je e-mailadres bevestigen voor je kunt bewerken.\nVoer je e-mailadres in en bevestig het via je [[Special:Preferences|voorkeuren]].",
- "nosuchsectiontext": "Je probeerde een subkopje te bewerken dat niet bestaat.\nWellicht is het verplaatst of verwijderd terwijl je de pagina aan het bekijken was.",
- "loginreqpagetext": "Je moet je $1 om andere pagina's te kunnen bekijken.",
- "newarticletext": "Deze pagina bestaat niet.\nTyp in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [[{{MediaWiki:Helppage}}|hulppagina]]).\nGebruik de knop '''vorige''' in je browser als je hier per ongeluk terecht bent gekomen.",
- "anontalkpagetext": "----''Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvang je hier berichten die niet voor je bedoeld zijn.\nAls je dat wilt voorkomen, [[Special:UserLogin/signup|registreer je]] of [[Special:UserLogin|meld je aan]] om verwarring met andere anonieme gebruikers te voorkomen.''",
- "noarticletext": "Deze pagina bevat geen tekst.\nJe kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.",
- "noarticletext-nopermission": "Deze pagina bevat geen tekst.\nJe kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar je mag de pagina niet aanmaken.",
- "userpage-userdoesnotexist": "Je bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker \"$1\").\nControleer of je deze pagina wel wilt aanmaken/bewerken.",
- "clearyourcache": "'''Let op!''' Nadat je de wijzigingen hebt opgeslagen is het wellicht nodig je browsercache te legen.\n* '''Firefox / Safari:''' houd ''Shift'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-Shift-R'' op een Mac)\n* '''Google Chrome:''' druk op ''Ctrl-Shift-R'' (''⌘-Shift-R'' op een Mac)\n* '''Internet Explorer:''' houd ''Ctrl'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5''\n* '''Opera:''' leeg je cache in ''Extra → Voorkeuren''",
- "usercssyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om je nieuwe CSS te testen alvorens op te slaan.",
- "userjsyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om je nieuwe JavaScript te testen alvorens op te slaan.",
- "usercsspreview": "'''Dit is alleen een voorvertoning van je persoonlijke CSS.\nDeze is nog niet opgeslagen!'''",
- "userjspreview": "'''Let op: je test nu je persoonlijke JavaScript.'''\n'''De pagina is niet opgeslagen!'''",
- "userinvalidcssjstitle": "'''Waarschuwing:''' er is geen uiterlijk \"$1\".\nJe eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld {{ns:user}}:Naam/vector.css in plaats van {{ns:user}}:Naam/Vector.css.",
- "previewnote": "'''Let op: dit is een controlepagina.'''\nJe tekst is niet opgeslagen!",
- "previewconflict": "Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als je deze opslaat.",
- "session_fail_preview": "'''Je bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan.\nProbeer het opnieuw.\nAls het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
- "session_fail_preview_html": "'''Je bewerking is niet verwerkt, omdat sessiegegevens verloren zijn gegaan.'''\n\n''Omdat in {{SITENAME}} ruwe HTML is ingeschakeld, is een voorvertoning niet mogelijk als bescherming tegen aanvallen met JavaScript.''\n\n'''Als dit een legitieme bewerking is, probeer het dan opnieuw.\nAls het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
- "token_suffix_mismatch": "'''Je bewerking is geweigerd, omdat je browser de leestekens in het bewerkingstoken onjuist heeft behandeld.'''\nDe bewerking is geweigerd om verminking van de paginatekst te voorkomen.\nDit gebeurt soms als er een webgebaseerde proxydienst wordt gebruikt die fouten bevat.",
- "edit_form_incomplete": "'''Sommige onderdelen van het bewerkingsformulier hebben de server niet bereikt. Controleer of je bewerkingen intact zijn en probeer het opnieuw.'''",
- "explainconflict": "Een andere gebruiker heeft deze pagina bewerkt sinds je met je bewerking bent begonnen.\nIn het bovenste deel van het venster staat de tekst van de huidige pagina.\nJe bewerking staat in het onderste gedeelte.\nJe dient je bewerkingen in te voegen in de bestaande tekst.\n'''Alleen''' de tekst in het bovenste gedeelte wordt opgeslagen als je op \"{{int:savearticle}}\" klikt.",
- "yourtext": "Je tekst",
- "nonunicodebrowser": "'''Waarschuwing: je browser kan niet goed overweg met Unicode.'''\nHiermee wordt door de MediaWiki-software rekening gehouden zodat je toch zonder problemen pagina's kunt bewerken: niet-ASCII tekens worden in het bewerkingsveld weergegeven als hexadecimale codes.",
- "editingold": "'''Waarschuwing: je bewerkt een oude versie van deze pagina.'''\nAls je je bewerking opslaat, gaan alle wijzigingen verloren die na deze versie zijn gemaakt.",
- "copyrightwarning": "Let op: alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de $2 (zie $1 voor details).\nAls je niet wilt dat je tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor \"Pagina opslaan\".<br />\nHierbij beloof je ons tevens dat je deze tekst zelf hebt geschreven of overgenomen uit een vrije, openbare bron.<br />\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij je daarvoor toestemming hebt!'''",
- "copyrightwarning2": "Al je bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers.\nAls je niet wilt dat je teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.<br />\nJe belooft ook dat je de oorspronkelijke auteur bent van dit materiaal of dat je het hebt gekopieerd uit een bron in het publieke domein of een soortgelijke vrije bron (zie $1 voor details).\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij je daarvoor toestemming hebt!'''",
- "longpageerror": "'''Fout: de tekst die je hebt toegevoegd is {{PLURAL:$1|één kilobyte|$1 kilobyte}} groot, wat groter is dan het maximum van {{PLURAL:$2|één kilobyte|$2 kilobyte}}.'''\nOpslaan is niet mogelijk.",
- "readonlywarning": "'''Waarschuwing: je kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.'''\nHet is misschien verstandig om je tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.\n\nEen beheerder heeft de database geblokkeerd om de volgende reden: $1",
- "nocreatetext": "{{SITENAME}} heeft de mogelijkheid om nieuwe pagina's te maken beperkt.\nJe kunt reeds bestaande pagina's wijzigen of je kunt [[Special:UserLogin|jezelf aanmelden of registreren]].",
- "nocreate-loggedin": "Je hebt geen rechten om nieuwe pagina's te maken.",
- "permissionserrorstext": "Je hebt geen rechten om dit te doen om de volgende {{PLURAL:$1|reden|redenen}}:",
- "permissionserrorstext-withaction": "Je hebt geen rechten om $2 om de volgende {{PLURAL:$1|reden|redenen}}:",
- "recreate-moveddeleted-warn": "'''Waarschuwing: je bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.'''\n\nOverweeg of het terecht is dat je verder werkt aan deze pagina.\nVoor je gemak staan hieronder het verwijderingslogboek en het hernoemingslogboek voor deze pagina:",
- "edit-no-change": "Je bewerking is genegeerd, omdat er geen wijziging aan de tekst is gemaakt.",
- "editwarning-warning": "Als je deze pagina verlaat verlies je mogelijk wijzigingen die je hebt gemaakt.\nAls je bent aangemeld, kan je deze waarschuwing uitschakelen in het tabblad \"Bewerken\" in je voorkeuren.",
- "rev-deleted-text-unhide": "Deze paginaversie is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls je wilt kan je [$1 deze versie bekijken].",
- "rev-suppressed-text-unhide": "Deze paginaversie is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].\nAls je wilt kan je [$1 deze versie bekijken].",
- "rev-deleted-text-view": "Deze paginaversie is '''verwijderd'''.\nJe kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
- "rev-suppressed-text-view": "Deze paginaversie is '''onderdrukt'''.\nJe kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].",
- "rev-deleted-no-diff": "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.\nAchtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
- "rev-suppressed-no-diff": "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.",
- "rev-deleted-unhide-diff": "Een van de bewerkingen voor de verschillen die je hebt opgevraagd is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls je wilt kan je [$1 de verschillen bekijken].",
- "rev-suppressed-unhide-diff": "Een van de versies in deze verschillen is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].\nAls je wilt kan je [$1 deze versie bekijken].",
- "rev-deleted-diff-view": "Een van de versies van de verschillen die je hebt opgevraagd is verwijderd, \nJe kunt deze verschillen bekijken. Mogelijk zijn details zichtbaar in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
- "rev-suppressed-diff-view": "Een van de bewerkingen voor de verschillen die u hebt opgevraagd, is '''onderdrukt'''.\nJe kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].",
- "revdelete-nooldid-text": "Je hebt geen doelversie(s) voor deze handeling opgegeven, de opgegeven versie bestaat niet of je probeert de laatste versie te verbergen.",
- "revdelete-show-file-confirm": "Weet je zeker dat je de verwijderde versie van het bestand \"<nowiki>$1</nowiki>\" van $2 om $3 wilt bekijken?",
- "revdelete-confirm": "Bevestig dat je dit wilde doen, dat je de consequenties begrijpt en dat je dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].",
- "revdelete-show-no-access": "Er is een fout opgetreden tijdens het weergeven van het object van $1 om $2: dit object is gemarkeerd als \"beschermd\".\nJe hebt geen toegang tot dit object.",
- "revdelete-modify-no-access": "Er is een fout opgetreden tijdens het wijzigen van het object van $1 om $2: dit object is gemarkeerd als \"beschermd\".\nJe hebt geen toegang tot dit object.",
- "revdelete-only-restricted": "Er is een fout opgetreden tijdens het verbergen van het item van $1, $2: je kunt geen items onderdrukken uit het zicht van beheerders zonder ook een van de andere zichtbaarheidsopties te selecteren.",
- "mergehistory-header": "Via deze pagina kan je versies van de geschiedenis van een bronpagina naar een nieuwere pagina samenvoegen.\nZorg dat deze wijziging de geschiedenis van de pagina behoudt.",
- "search-suggest": "Bedoelde je: $1",
- "searchdisabled": "Zoeken in {{SITENAME}} is niet mogelijk.\nJe kunt gebruik maken van Google.\nDe gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.",
- "savedprefs": "Je voorkeuren zijn opgeslagen.",
- "prefs-reset-intro": "Gebruik deze functie om je voorkeuren te herstellen naar de standaardinstellingen.\nDeze handeling kan niet ongedaan gemaakt worden.",
- "youremail": "E-mailadres:",
- "prefs-help-variant": "Jouw voorkeursvariant of -spelling om de inhoudspagina's van deze wiki in weer te geven.",
- "prefs-help-signature": "Reacties op de overlegpagina's worden meestal ondertekend met \"<nowiki>~~~~</nowiki>\".\nDe tildes worden omgezet in je ondertekening en een datum en tijd van de bewerking.",
- "badsiglength": "Je ondertekening is te lang.\nDeze moet minder dan $1 {{PLURAL:$1|teken|tekens}} bevatten.",
- "prefs-help-realname": "Echte naam is optioneel.\nAls je deze opgeeft, kan deze naam gebruikt worden om je erkenning te geven voor je werk.",
- "prefs-help-email": "E-mailadres is optioneel, maar maakt het mogelijk om jou je wachtwoord te e-mailen als je het bent vergeten.",
- "prefs-help-email-others": "Je kunt ook anderen in staat stellen per e-mail contact met je op te nemen via een koppeling op uw gebruikers- en overlegpagina zonder dat je je identiteit prijsgeeft.",
- "userrights-groups-help": "Je kunt de groepen wijzigen waar deze gebruiker lid van is.\n* Een aangekruist vakje betekent dat de gebruiker lid is van de groep.\n* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.\n* Een \"*\" betekent dat je een gebruiker niet uit een groep kunt verwijderen nadat je die hebt toegevoegd of vice versa.",
- "userrights-no-interwiki": "Je hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.",
- "userrights-nologin": "Je moet [[Special:UserLogin|aangemeld]] zijn met een gebruiker met de juiste rechten om gebruikersrechten toe te wijzen.",
- "userrights-notallowed": "Je hebt geen rechten om gebruikersrechten toe te voegen of te verwijderen.",
- "userrights-changeable-col": "Groepen die je kunt beheren",
- "userrights-unchangeable-col": "Groepen die je niet kunt beheren",
- "recentchangeslinked-summary": "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een opgegeven pagina of op pagina's in een opgegeven categorie.\nPagina's die op [[Special:Watchlist|uw volglijst]] staan worden '''vet''' weergegeven.",
- "uploadnologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn om bestanden te uploaden.",
- "empty-file": "Het bestand dat je probeerde te uploaden had geen inhoud.",
- "file-too-large": "Het bestand dat je probeerde te uploaden was te groot.",
- "hookaborted": "De wijziging die je probeerde te maken is afgebroken door een uitbreiding.",
- "emptyfile": "Het bestand dat je hebt geüpload lijkt leeg te zijn.\nDit zou kunnen komen door een typefout in de bestandsnaam.\nGa na of je dit bestand werkelijk bedoelde te uploaden.",
- "fileexists": "Er bestaat al een bestand met deze naam.\nControleer <strong>[[:$1]]</strong> als je niet zeker weet of je het huidige bestand wilt overschrijven.\n[[$1|thumb]]",
- "filepageexists": "De beschrijvingspagina voor dit bestand bestaat al op <strong>[[:$1]]</strong>, maar er bestaat geen bestand met deze naam.\nDe samenvatting die je hebt opgegeven verschijnt niet op de beschrijvingspagina.\nBewerk de pagina handmatig om je beschrijving daar weer te geven.\n[[$1|miniatuur]]",
- "file-thumbnail-no": "De bestandsnaam begint met <strong>$1</strong>.\nHet lijkt een verkleinde afbeelding te zijn ''(miniatuurafbeelding)''.\nAls je deze afbeelding in volledige resolutie hebt, upload die afbeelding dan.\nWijzig anders de bestandsnaam.",
- "fileexists-forbidden": "Er bestaat al een bestand met deze naam, en dat kan niet overschreven worden.\nUpload je bestand onder een andere naam.\n[[File:$1|thumb|center|$1]]",
- "fileexists-shared-forbidden": "Er bestaat al een bestand met deze naam bij de gedeelde bestanden.\nAls je het bestand alsnog wilt uploaden, ga dan terug en kies een andere naam.\n[[File:$1|thumb|center|$1]]",
- "file-deleted-duplicate": "Een bestand dat identiek is aan dit bestand ([[:$1]]) is voorheen verwijderd.\nRaadpleeg het verwijderingslogboek voordat je verder gaat.",
- "uploadfromurl-queued": "Je upload is in de wachtrij geplaatst.",
- "filewasdeleted": "Er is eerder een bestand met deze naam verwijderd.\nRaadpleeg het $1 voordat je het opnieuw toevoegt.",
- "filename-bad-prefix": "De naam van het bestand dat je aan het uploaden bent begint met '''\"$1\"''', wat een niet-beschrijvende naam is die meestal automatisch door een digitale camera wordt gegeven.\nKies een duidelijke naam voor je bestand.",
- "upload-success-msg": "Je upload van [$2] is geslaagd en is beschikbaar: [[:{{ns:file}}:$1]]",
- "upload-failure-msg": "Er was een probleem met je upload van [$2]:\n\n$1",
- "upload-warning-msg": "Er was een probleem met je upload van [$2].\nGa terug naar het [[Special:Upload/stash/$1|uploadformulier]] om dit probleem te verhelpen.",
- "uploadstash-badtoken": "Het uitvoeren van de handeling is mislukt. Dit komt mogelijk doordat je bewerkingsreferenties zijn verlopen. Probeer het opnieuw.",
- "img-auth-nopathinfo": "PATH_INFO mist.\nJe server is niet ingesteld om deze gegevens door te geven.\nMisschien gebruikt deze CGI, en dan wordt img_auth niet ondersteund.\nZie https://www.mediawiki.org/wiki/Manual:Image_Authorization voor meer informatie.",
- "img-auth-nologinnWL": "Je bent niet aangemeld en \"$1\" staat niet op de witte lijst.",
- "img-auth-isdir": "Je probeert de map \"$1\" te benaderen.\nAlleen toegang tot bestanden is toegestaan.",
- "upload-curl-error28-text": "Het duurde te lang voordat de website antwoordde.\nControleer of de website beschikbaar is, wacht even en probeer het dan opnieuw.\nJe kunt het misschien proberen als het minder druk is.",
- "upload_source_file": "(een bestand op je computer)",
- "sharedupload-desc-edit": "Dit bestand komt van $1 en kan ook in andere projecten gebruikt worden.\nJe kunt de [$2 pagina met de bestandsbeschrijving] daar bewerken.",
- "sharedupload-desc-create": "Dit bestand komt van $1 en kan ook in andere projecten gebruikt worden.\nJe kunt de beschrijving bewerken op de [$2 pagina met de bestandsbeschrijving].",
- "filepage-nofile-link": "Er bestaat geen bestand met deze naam, maar je kunt het [$1 uploaden].",
- "upload-disallowed-here": "Je kunt dit bestand niet overschrijven.",
- "filerevert-intro": "Je bent '''[[Media:$1|$1]]''' aan het terugdraaien tot de [$4 versie op $2, $3].",
- "filedelete-intro": "Je staat op het punt om het bestand '''[[Media:$1|$1]]''' te verwijderen, inclusief alle eerdere versies.",
- "filedelete-intro-old": "Je bent de versie van '''[[Media:$1|$1]]''' van [$4 $3, $2] aan het verwijderen.",
- "notargettext": "Je hebt niet opgegeven voor welke pagina of gebruiker je deze handeling wilt uitvoeren.",
- "nopagetext": "De pagina die je wilt hernoemen bestaat niet.",
- "booksources-text": "Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat je zoekt hebben:",
- "alllogstext": "Dit is het gecombineerde logboek van {{SITENAME}}.\nJe kunt ook kiezen voor specifieke logboeken en filteren op gebruiker (hoofdlettergevoelig) en paginanaam (hoofdlettergevoelig).",
- "cachedspecial-viewing-cached-ttl": "Je bekijkt een cacheversie van deze pagina, die maximaal $1 oud is.",
- "cachedspecial-viewing-cached-ts": "Je bekijkt een cacheversie van deze pagina, die mogelijk niet volledig is bijgewerkt.",
- "mailnologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn en een geldig e-mailadres in je [[Special:Preferences|voorkeuren]] vermelden om andere gebruikers te kunnen e-mailen.",
- "emailpagetext": "Via dit formulier kan je een e-mail aan {{GENDER:$1|deze gebruiker}} verzenden.\nHet e-mailadres dat je hebt opgegeven bij [[Special:Preferences|je voorkeuren]] wordt als afzender gebruikt.\nDe ontvanger kan dus direct naar je reageren.",
- "usermaildisabledtext": "Je kunt geen e-mail verzenden naar andere gebruikers op deze wiki",
- "emailccsubject": "Kopie van je bericht aan $1: $2",
- "emailsenttext": "Je e-mail is verzonden.",
- "nowatchlist": "Je volglijst is leeg.",
- "watchlistanontext": "Om je volglijst te bekijken of te bewerken moet je je $1.",
- "watchnologintext": "Je dient [[Special:UserLogin|aangemeld]] te zijn om je volglijst te bewerken.",
- "addedwatchtext": "De pagina \"[[:$1]]\" is toegevoegd aan je [[Special:Watchlist|volglijst]].\nToekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden op daar weergegeven.",
- "removedwatchtext": "De pagina \"[[:$1]]\" is van [[Special:Watchlist|je volglijst]] verwijderd.",
- "watchlist-details": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op je volglijst, exclusief overlegpagina's.",
- "wlheader-showupdated": "Pagina's die zijn bewerkt sinds je laatste bezoek worden '''vet''' weergegeven",
- "watchlistcontains": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op je volglijst.",
- "watcherrortext": "Er is een fout opgetreden tijdens het wijzigen van je volglijstinstellingen voor \"$1\".",
- "enotif_lastvisited": "Zie $1 voor alle wijzigingen sinds je laatste bezoek.",
- "enotif_body": "Hoi $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSamenvatting van de wijziging: $PAGESUMMARY $PAGEMINOREDIT\n\nContactgegevens van de auteur:\nE-mailadres: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nTenzij je deze pagina bezoekt, komen er geen verdere berichten. Op je volglijst kan je voor alle gevolgde pagina's de waarschuwingsinstellingen opschonen.\n\nGroet van je {{SITENAME}}-waarschuwingssysteem.\n\n--\nJe kunt je e-mailinstellingen wijzigen op:\n{{canonicalurl:{{#special:Preferences}}}}\n\nJe kunt je volglijstinstellingen wijzigen op:\n{{canonicalurl:Special:Watchlist/edit}}\n\nJe kunt de pagina van je volglijst verwijderen via de volgende koppeling:\n$UNWATCHURL\n\nTerugkoppeling en verdere assistentie:\n{{canonicalurl:{{MediaWiki:Helppage}}}}",
- "historywarning": "'''Waarschuwing:''' de pagina die je wilt verwijderen heeft ongeveer $1 {{PLURAL:$1|versie|versies}}:",
- "confirmdeletetext": "Je staat op het punt een pagina te verwijderen, inclusief de geschiedenis.\nBevestig hieronder dat dit inderdaad je bedoeling is, dat je de gevolgen begrijpt en dat de verwijdering overeenstemt met het [[{{MediaWiki:Policy-url}}|beleid]].",
- "sessionfailure": "Er lijkt een probleem te zijn met je aanmeldsessie.\nJe handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke \"hijacking\" van deze sessie).\nGa een pagina terug, laad die pagina opnieuw en probeer het nog eens.",
- "protect-text": "Hier kun je het beveiligingsniveau voor de pagina '''$1''' bekijken en wijzigen.",
- "protect-locked-blocked": "Je kunt het beveiligingsniveau niet wijzigen terwijl je geblokkeerd bent.\nHier zijn de huidige instellingen voor de pagina '''$1''':",
- "protect-locked-access": "Je hebt geen rechten om het beveiligingsniveau te wijzigen.\nDit zijn de huidige instellingen voor de pagina '''$1''':",
- "protect-cantedit": "Je kunt het beveiligingsniveau van deze pagina niet wijzigen, omdat je geen rechten hebt om het te bewerken.",
- "undeletehistory": "Als je een pagina terugplaatst, worden alle versies hersteld.\nAls er al een nieuwe pagina met dezelfde naam is aangemaakt sinds de pagina is verwijderd, worden de eerder verwijderde versies teruggeplaatst en blijft de huidige versie intact.",
- "undeleterevision-missing": "Ongeldige of missende versie.\nMogelijk heb je een verkeerde koppeling of is de versie hersteld of verwijderd uit het archief.",
- "undelete-show-file-confirm": "Weet je zeker dat je een verwijderde versie van het bestand \"<nowiki>$1</nowiki>\" van $2 om $3 wilt bekijken?",
- "ipb-blockingself": "Je staat op het punt jezelf te blokkeren. Weet je zeker dat je dat wilt doen?",
- "ipb-confirmhideuser": "Je staat op het punt een verborgen gebruiker te blokkeren. Hiervoor worden gebruikersnamen in alle lijsten en logboekregels verborgen. Weet je het zeker?",
- "ipb-needreblock": "$1 is al geblokkeerd.\nWil je de instellingen wijzigen?",
- "unblock-hideuser": "Je kunt deze gebruiker niet deblokkeren, omdat de gebruikersnaam verborgen is.",
- "proxyblockreason": "Dit is een automatische preventieve blokkade, omdat je gebruik maakt van een open proxyserver.\nNeem contact op met je internetprovider of je helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.",
- "sorbsreason": "Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.",
- "sorbs_create_account_reason": "Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.\nJe kunt geen gebruiker registreren.",
- "cant-see-hidden-user": "De gebruiker die je probeert te blokken is al geblokkeerd en verborgen.\nOmdat je het recht \"hideuser\" niet hebt, kun je de blokkade van de gebruiker niet bekijken of bewerken.",
- "ipbblocked": "Je kunt geen andere gebruikers (de)blokkeren, omdat je zelf geblokkeerd bent",
- "ipbnounblockself": "Je mag jezelf niet deblokkeren",
- "lockdbtext": "Waarschuwing: de database blokkeren heeft tot gevolg dat geen enkele gebruiker meer in staat is pagina's te bewerken, voorkeuren te wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.\nBevestig dat je deze handeling wilt uitvoeren en dat je de database vrijgeeft nadat het onderhoud is uitgevoerd.",
- "unlockdbtext": "Na het vrijgeven van de database kunnen gebruikers weer pagina's bewerken, hun voorkeuren wijzigen of iets anders te doen waarvoor er wijzigingen in de database nodig zijn.\nBevestig dat je deze handeling wil uitvoeren.",
- "locknoconfirm": "Je hebt je keuze niet bevestigd via het vinkvakje.",
- "lockdbsuccesstext": "De database is afgesloten.<br />\nVergeet niet de [[Special:UnlockDB|database vrij te geven]] zodra je klaar bent met je onderhoud.",
- "movepagetext": "Door middel van het onderstaande formulier kan je een pagina hernoemen.\nDe geschiedenis gaat mee naar de nieuwe pagina.\n* De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\n* Koppelingen naar de oude pagina worden niet aangepast.\n* De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt.\nAls je dit niet wilt, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\n\n'''Waarschuwing!'''\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.",
- "movepagetext-noredirectfixer": "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen.\nDe oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\nControleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\nJe kunt dus een pagina die per ongeluk is hernoemd terug hernoemen en je kunt een bestaande pagina niet overschrijven. \n\n'''Waarschuwing:''' voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.",
- "movepagetalktext": "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':\n* De overlegpagina onder de nieuwe naam al bestaat;\n* Je het onderstaande vinkje deselecteert.\n\nIn die gevallen moet je de pagina handmatig hernoemen of samenvoegen.",
- "moveuserpage-warning": "'''Waarschuwing:''' Je gaat een gebruikerspagina hernoemen.\nHoud er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
- "movenologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.",
- "movenotallowed": "Je hebt geen rechten om pagina's te hernoemen.",
- "movenotallowedfile": "Je hebt geen rechten om bestanden te hernoemen.",
- "cant-move-user-page": "Je hebt geen rechten om gebruikerspagina's te hernoemen (met uitzondering van subpagina's).",
- "cant-move-to-user-page": "Je hebt geen rechten om een pagina naar een gebruikerspagina te hernoemen. Hernoemen naar een subpagina is wel mogelijk.",
- "cantmove-titleprotected": "Je kunt geen pagina naar deze naam hernoemen, omdat deze naam beveiligd is tegen het aanmaken ervan.",
- "delete_and_move_text": "==Verwijdering nodig==\nOnder de naam \"[[:$1]]\" bestaat al een pagina.\nWil je deze verwijderen om plaats te maken voor de te hernoemen pagina?",
- "exporttext": "Je kunt de tekst en geschiedenis van een pagina of pagina's exporteren naar XML.\nDit exportbestand is daarna te importeren in een andere MediaWiki via de [[Special:Import|importpagina]].\n\nGeef in het onderstaande veld de namen van de te exporteren pagina's op, één pagina per regel, en geef aan of je alle versies met de bewerkingssamenvatting of alleen de huidige versies met de bewerkingssamenvatting wilt exporteren.\n\nIn het laatste geval kan je ook een koppeling gebruiken, bijvoorbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] voor de pagina \"[[{{MediaWiki:Mainpage}}]]\".",
- "allmessagestext": "Hieronder staan de systeemberichten uit de MediaWiki-naamruimte.\nGa naar [https://www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als je wilt bijdragen aan de algemene vertaling voor MediaWiki.",
- "importtext": "Gebruik de [[Special:Export|exportfunctie]] in de wiki waar de informatie vandaan komt.\nSla de uitvoer op je eigen computer op, en voeg die daarna hier toe.",
- "import-error-edit": "De pagina \"$1\" is niet geïmporteerd omdat je niet de rechten hebt om die te bewerken.",
- "import-error-create": "De pagina \"$1\" is niet geïmporteerd omdat je niet de rechten hebt om die aan te maken.",
- "tooltip-pt-userpage": "Jouw gebruikerspagina",
- "tooltip-pt-anonuserpage": "Gebruikerspagina voor je IP-adres",
- "tooltip-pt-mytalk": "Jouw overlegpagina",
- "tooltip-pt-watchlist": "Overzicht van pagina's die je volgt",
- "tooltip-pt-mycontris": "Overzicht van je bijdragen",
- "tooltip-pt-login": "Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht",
- "tooltip-ca-edit": "Je kunt deze pagina bewerken.\nGebruik de voorbeeldweergaveknop alvorens te bewaren.",
- "tooltip-ca-viewsource": "Deze pagina is beveiligd.\nJe kunt wel de broncode bekijken.",
- "tooltip-ca-nstab-special": "Dit is een speciale pagina, je kunt de pagina zelf niet bewerken",
- "tooltip-save": "Je wijzigingen opslaan",
- "tooltip-preview": "Een voorvertoning maken. Gebruik dit voordat je opslaat!",
- "tooltip-watch": "Deze pagina aan je volglijst toevoegen",
- "notacceptable": "De wikiserver kan de gegevens niet leveren in een vorm die je browser kan lezen.",
- "spamprotectiontext": "De pagina die je wilde opslaan is geblokkeerd door het spamfilter.\nMeestal wordt dit door een externe koppeling op een zwarte lijst veroorzaakt.",
- "markedaspatrollederror-noautopatrol": "Je kunt je eigen wijzigingen niet als gecontroleerd markeren.",
- "mediawarning": "'''Waarschuwing''': dit bestandstype bevat mogelijk programmacode die je systeem schade kan berokkenen.",
- "confirmemail_noemail": "Je hebt geen geldig e-mailadres opgegeven in je [[Special:Preferences|gebruikersvoorkeuren]].",
- "confirmemail_text": "{{SITENAME}} eist bevestiging van je e-mailadres voordat je de e-mailmogelijkheden kunt gebruiken.\nKlik op de onderstaande knop om een bevestigingsbericht te ontvangen.\nDit bericht bevat een koppeling met een code.\nOpen die koppeling om je e-mailadres te bevestigen.",
- "confirmemail_pending": "Er is al een bevestigingsbericht aan je verzonden.\nAls je recentelijk je gebruiker hebt aangemaakt, wacht dan een paar minuten totdat die aankomt voordat je opnieuw een e-mail laat sturen.",
- "confirmemail_oncreate": "Er is een bevestigingscode naar je e-mailadres verzonden.\nDeze code is niet nodig om je aan te melden, maar je dient deze wel te bevestigen voordat je de e-mailmogelijkheden van deze wiki kunt gebruiken.",
- "confirmemail_sendfailed": "{{SITENAME}} kon je bevestigingscode niet verzenden.\nControleer je e-mailadres op ongeldige tekens.\n\nHet e-mailprogramma meldde: $1",
- "confirmemail_needlogin": "Je moet $1 om je e-mailadres te bevestigen.",
- "confirmemail_success": "Je e-mailadres is bevestigd.\nJe kunt jezelf nu [[Special:UserLogin|aanmelden]] en {{SITENAME}} gebruiken.",
- "confirmemail_loggedin": "Je e-mailadres is nu bevestigd.",
- "confirmemail_body": "Iemand, waarschijnlijk jijzelf, met het IP-adres $1,\nheeft zich met dit e-mailadres geregistreerd als gebruiker \"$2\" op {{SITENAME}}.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:\n\n$3\n\nAls je jezelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van je e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
- "confirmemail_body_changed": "Iemand, waarschijnlijk jijzelf, met het IP-adres $1,\nheeft het het e-mailadres geregistreerd voor gebruiker \"$2\" op {{SITENAME}} gewijzigd naar dit e-mailadres.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls je jezelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van je e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
- "confirmemail_body_set": "Iemand, waarschijnlijk jij, met het IP-adres $1,\nheeft het het e-mailadres voor gebruiker \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat jij deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls jij deze wijziging *niet* hebt gemaakt, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
- "deletedwhileediting": "'''Let op''': deze pagina is verwijderd terwijl je bezig was met je bewerking!",
- "confirmrecreate": "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd met opgave van de volgende reden:\n: ''$2''\nBevestig dat je de pagina opnieuw wilt aanmaken.",
- "confirmrecreate-noreason": "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd.\nBevestig dat je de pagina opnieuw wilt aanmaken.",
- "confirm-watch-top": "Deze pagina toevoegen aan je volglijst?",
- "confirm-unwatch-top": "Deze pagina verwijderen uit je volglijst?",
- "watchlistedit-numitems": "Je volglijst bevat {{PLURAL:$1|1 pagina|$1 pagina’s}}, zonder overlegpagina’s.",
- "watchlistedit-noitems": "Je volglijst bevat geen pagina’s.",
- "watchlistedit-normal-explain": "Hieronder worden de pagina’s op je volglijst weergegeven.\nKlik op het vierkantje ernaast en daarna op \"{{int:Watchlistedit-normal-submit}}\" om een pagina te verwijderen.\nJe kunt ook de [[Special:EditWatchlist/raw|ruwe lijst bewerken]].",
- "watchlistedit-normal-done": "Er {{PLURAL:$1|is één pagina|zijn $1 pagina’s}} verwijderd van je volglijst:",
- "watchlistedit-raw-explain": "Hieronder staan pagina’s op je volglijst.\nJe kunt de lijst bewerken door pagina’s te verwijderen en toe te voegen.\nEén pagina per regel.\nAls je klaar bent, klik dan op \"{{int:Watchlistedit-raw-submit}}\".\nJe kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].",
- "watchlistedit-raw-done": "Je volglijst is bijgewerkt.",
- "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.",
- "api-error-badaccess-groups": "Je mag geen bestanden uploaden in deze wiki.",
- "api-error-empty-file": "Het bestand dat je hebt geüpload is leeg.",
- "api-error-file-too-large": "Het bestand dat je hebt geüpload is te groot.",
- "api-error-hookaborted": "De wijziging die je probeert te maken is afgebroken door een uitbreiding.",
- "api-error-internal-error": "Interne fout: er is iets misgegaan tijdens het verwerken van je upload door de wiki.",
- "api-error-mustbeloggedin": "Je moet aangemeld zijn om bestanden te kunnen uploaden.",
- "api-error-unknown-error": "Interne fout: er is iets misgegaan tijdens het uploaden van je bestand."
+ "@metadata": {
+ "authors": [
+ "HanV",
+ "MarkvA",
+ "Siebrand",
+ "Tedjuh10",
+ "Southparkfan"
+ ]
+ },
+ "view-pool-error": "De servers zijn op het moment helaas overbelast.\nTe veel gebruikers proberen deze pagina te bekijken.\nWacht even voordat je opnieuw toegang probeert te krijgen tot deze pagina.\n\n$1",
+ "generic-pool-error": "De servers zijn op het moment helaas overbelast.\nTe veel gebruikers proberen deze pagina te bekijken.\nWacht even voordat je opnieuw toegang probeert te krijgen tot deze pagina.",
+ "badaccess-group0": "Je hebt geen rechten om de gevraagde handeling uit te voeren.",
+ "youhavenewmessages": "Je hebt $1 ($2).",
+ "youhavenewmessagesfromusers": "Je hebt $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).",
+ "youhavenewmessagesmanyusers": "Je hebt $1 van een groot aantal gebruikers ($2).",
+ "youhavenewmessagesmulti": "Je hebt nieuwe berichten op $1",
+ "nosuchactiontext": "De opdracht in de URL is ongeldig.\nMogelijk heb je een typefout gemaakt in de URL of een onjuiste koppeling gevolgd.\nHet kan ook wijzen op een fout in de software van {{SITENAME}}.",
+ "nospecialpagetext": "<strong>Je hebt een onbestaande speciale pagina opgevraagd.</strong>\n\nEen lijst met bestaande speciale pagina’s staat op [[Special:SpecialPages|speciale pagina’s]].",
+ "missing-article": "In de database is geen inhoud aangetroffen voor de pagina \"$1\" die er wel zou moeten zijn ($2).\n\nDit kan voorkomen als je een verouderde koppeling naar het verschil tussen twee versies van een pagina volgt of een versie opvraagt die is verwijderd.\n\nAls dit niet het geval is, heb je wellicht een fout in de software gevonden.\nMaak hiervan melding bij een [[Special:ListUsers/sysop|beheerder]] van {{SITENAME}} en vermeld daarbij de URL van deze pagina.",
+ "actionthrottledtext": "Als maatregel tegen spam is het aantal keren per tijdseenheid dat je deze handeling kunt verrichten beperkt.\nDe limiet is overschreden.\nProbeer het over een aantal minuten opnieuw.",
+ "viewsourcetext": "Je kunt de brontekst van deze pagina bekijken en kopiëren:",
+ "viewyourtext": "Je kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
+ "editinginterface": "'''Waarschuwing:''' je bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
+ "namespaceprotected": "Je hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
+ "customcssprotected": "Je kunt deze CSS-pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
+ "customjsprotected": "Je kunt deze JavaScriptpagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
+ "exception-nologin-text": "Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet je aangemeld zijn bij deze wiki.",
+ "logouttext": "<strong>Je bent nu afgemeld.</strong>\n\nMogelijk worden nog een aantal pagina's weergegeven alsof je aangemeld bent totdat je de cache van je browser leegt.",
+ "welcomecreation-msg": "Je gebruiker is aangemaakt.\nVergeet niet je [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.",
+ "userlogin-yourname-ph": "Geef je gebruikersnaam op",
+ "userlogin-yourpassword-ph": "Geef je wachtwoord op",
+ "yourpasswordagain": "Geef je wachtwoord opnieuw in:",
+ "yourdomainname": "Je domein:",
+ "password-change-forbidden": "Je kunt je wachtwoord niet wijzigen in deze wiki.",
+ "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of je hebt geen toestemming je externe gebruiker bij te werken.",
+ "gotaccount": "Heb je al een gebruikersnaam? '''$1'''.",
+ "userlogin-resetlink": "Ben je je aanmeldgegevens vergeten?",
+ "createacct-email-ph": "Geef je e-mailadres op",
+ "nocookiesnew": "De gebruiker is geregistreerd, maar jij bent niet aangemeld.\n{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nSchakel die in en meld daarna aan met je nieuwe gebruikersnaam en wachtwoord.",
+ "nocookieslogin": "{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nCookies zijn uitgeschakeld in je browser.\nSchakel deze optie aan en probeer het opnieuw.",
+ "nocookiesfornew": "De gebruiker is niet gemaakt omdat de bron niet bevestigd kon worden.\nZorg ervoor dat je cookies hebt ingeschakeld, herlaad deze pagina en probeer het opnieuw.",
+ "noname": "Je hebt geen geldige gebruikersnaam opgegeven.",
+ "loginsuccess": "'''Je bent nu aangemeld bij {{SITENAME}} als \"$1\".'''",
+ "nouserspecified": "Geef een gebruikersnaam op.",
+ "password-name-match": "Je wachtwoord en uw gebruikersnaam mogen niet overeenkomen.",
+ "passwordremindertext": "Iemand, waarschijnlijk jijzelf, heeft vanaf IP-adres $1 een verzoek\ngedaan tot het toezenden van een nieuw wachtwoord voor {{SITENAME}}\n($4). Er is een tijdelijk wachtwoord aangemaakt voor gebruiker \"$2\":\n\"$3\". Als dat je bedoeling was, meld je dan nu aan en kies een nieuw\nwachtwoord.\nJe tijdelijke wachtwoord vervalt over {{PLURAL:$5|$5 dag|$5 dagen}}.\n\nAls iemand anders dan jij dit verzoek heeft gedaan of als je zich inmiddels het\nwachtwoord herinnert en het niet langer wilt wijzigen, negeer dit bericht\ndan en blijf je bestaande wachtwoord gebruiken.",
+ "noemailcreate": "Je moet een geldig e-mailadres opgeven",
+ "passwordsent": "Het wachtwoord is verzonden naar het e-mailadres voor \"$1\".\nMeld je aan nadat je het hebt ontvangen.",
+ "blocked-mailpassword": "Je IP-adres is geblokkeerd voor het maken van wijzigingen.\nOm misbruik te voorkomen is het niet mogelijk om een nieuw wachtwoord aan te vragen.",
+ "eauthentsent": "Er is ter bevestiging een e-mail naar het opgegeven e-mailadres gezonden.\nVolg de aanwijzingen in de e-mail om aan te geven dat het jouw e-mailadres is.\nTot die tijd worden er geen e-mails naar het e-mailadres gezonden.",
+ "acct_creation_throttle_hit": "Bezoekers van deze wiki met hetzelfde IP-adres als jij hebben de afgelopen dag al $1 gebruiker{{PLURAL:$1||s}} geregistreerd, wat het maximale aantal in deze periode is.\nDaarom kan je vanaf je IP-adres op dit moment geen nieuwe gebruikers registreren.",
+ "emailauthenticated": "Je e-mailadres is bevestigd op $2 om $3.",
+ "emailnotauthenticated": "Je e-mailadres is niet bevestigd.\nJe ontvangt geen e-mail voor de onderstaande functies.",
+ "noemailprefs": "Geef een e-mailadres op in je voorkeuren om deze functies te gebruiken.",
+ "emailconfirmlink": "Bevestig je e-mailadres",
+ "createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en jouw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld je aan en wijzig je wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder jouw medeweten is aangemaakt.",
+ "login-throttled": "Je hebt recentelijk te vaak geprobeerd aan te melden met een onjuist wachtwoord.\nWacht even voordat je het opnieuw probeert.",
+ "login-abort-generic": "Je bent niet aangemeld. De procedure is afgebroken.",
+ "suspicious-userlogout": "Je verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.",
+ "resetpass_announce": "Voer een nieuw wachtwoord in om het aanmelden te voltooien:",
+ "changepassword-success": "Je wachtwoord is gewijzigd.",
+ "resetpass-no-info": "Je moet aangemeld zijn voordat je deze pagina kunt gebruiken.",
+ "resetpass-wrong-oldpass": "Het huidige of tijdelijke wachtwoord is ongeldig.\nMogelijk heb je je wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.",
+ "passwordreset-capture-help": "Als je dit vakje aanvinkt, wordt de e-mail (met het tijdelijke wachtwoord) naar de gebruiker verzonden en ook aan jou weergegeven.",
+ "passwordreset-emailtext-ip": "Iemand, waarschijnlijk jij, heeft vanaf het IP-adres $1 je gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.\nDe volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld je aan en wijzig het wachtwoord nu. Als je dit verzoek niet zelf hebt gedaan, of als je het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf je oude wachtwoord gebruiken.",
+ "passwordreset-emailtext-user": "Gebruiker $1 op de site {{SITENAME}} heeft je gebruikersgegevens voor {{SITENAME}} ($4) opgevraagd.\nDe volgende {{PLURAL:$3|gebruiker is|gebruikers zijn}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tijdelijke wachtwoord vervalt|Deze tijdelijke wachtwoorden vervallen}} over {{PLURAL:$5|een dag|$5 dagen}}.\nMeld je aan en wijzig het wachtwoord nu. Als je dit verzoek niet zelf hebt gedaan, of als je het oorspronkelijke wachtwoord nog kent en het niet wilt wijzigen, negeer dit bericht dan en blijf je oude wachtwoord gebruiken.",
+ "changeemail-text": "Vul dit formulier in om je e-mailadres te wijzigen. Je moet je wachtwoord invoeren om deze wijziging te bevestigen.",
+ "changeemail-no-info": "Je moet aangemeld zijn om rechtstreeks toegang te hebben tot deze pagina.",
+ "changeemail-password": "Jouw wachtwoord voor {{SITENAME}}:",
+ "sig_tip": "Je handtekening met datum en tijd",
+ "anoneditwarning": "'''Waarschuwing:''' je bent niet aangemeld.\nJe IP-adres wordt opgeslagen als je wijzigingen op deze pagina maakt.",
+ "anonpreviewwarning": "''Je bent niet aangemeld.''\n''Door je bewerking op te slaan wordt je IP-adres opgeslagen in de paginageschiedenis.''",
+ "missingsummary": "'''Let op:''' je hebt geen samenvatting opgegeven voor je bewerking.\nAls je nogmaals op ''Pagina opslaan'' klikt wordt de bewerking zonder samenvatting opgeslagen.",
+ "missingcommenttext": "Plaats je reactie hieronder.",
+ "missingcommentheader": "'''Let op:''' Je hebt geen onderwerp/kop voor deze reactie opgegeven.\nAls je opnieuw op \"{{int:savearticle}}\" klikt, wordt je wijziging zonder een onderwerp of koptekst opgeslagen.",
+ "blockedtext": "'''Je gebruiker of IP-adres is geblokkeerd.'''\n\nDe blokkade is uitgevoerd door $1.\nDe opgegeven reden is ''$2''.\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nJe kunt contact opnemen met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] om de blokkade te bespreken.\nJe kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij je een geldig e-mailadres hebt opgegeven in je [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet geblokkeerd is.\nJe huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.",
+ "autoblockedtext": "Je IP-adres is automatisch geblokkeerd, omdat het is gebruikt door een andere gebruiker, die is geblokkeerd door $1.\nDe opgegeven reden is:\n\n:''$2''\n\n* Aanvang blokkade: $8\n* Einde blokkade: $6\n* Bedoeld te blokkeren: $7\n\nJe kunt deze blokkade bespreken met $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheerder]].\n\nJe kunt geen gebruik maken van de functie \"Deze gebruiker e-mailen\", tenzij je een geldig e-mailadres hebt opgegeven in je [[Special:Preferences|voorkeuren]] en het gebruik van deze functie niet is geblokkeerd.\n\nJe huidige IP-adres is $3 en het blokkadenummer is #$5.\nVermeld alle bovenstaande gegevens als je ergens op deze blokkade reageert.",
+ "whitelistedittext": "Je moet $1 om pagina's te bewerken.",
+ "confirmedittext": "Je moet je e-mailadres bevestigen voor je kunt bewerken.\nVoer je e-mailadres in en bevestig het via je [[Special:Preferences|voorkeuren]].",
+ "nosuchsectiontext": "Je probeerde een subkopje te bewerken dat niet bestaat.\nWellicht is het verplaatst of verwijderd terwijl je de pagina aan het bekijken was.",
+ "loginreqpagetext": "Je moet je $1 om andere pagina's te kunnen bekijken.",
+ "newarticletext": "Deze pagina bestaat niet.\nTyp in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [$1 hulppagina]).\nGebruik de knop '''vorige''' in je browser als je hier per ongeluk terecht bent gekomen.",
+ "anontalkpagetext": "----''Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvang je hier berichten die niet voor je bedoeld zijn.\nAls je dat wilt voorkomen, [[Special:UserLogin/signup|registreer je]] of [[Special:UserLogin|meld je aan]] om verwarring met andere anonieme gebruikers te voorkomen.''",
+ "noarticletext": "Deze pagina bevat geen tekst.\nJe kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.",
+ "noarticletext-nopermission": "Deze pagina bevat geen tekst.\nJe kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar je mag de pagina niet aanmaken.",
+ "userpage-userdoesnotexist": "Je bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker \"$1\").\nControleer of je deze pagina wel wilt aanmaken/bewerken.",
+ "clearyourcache": "'''Let op!''' Nadat je de wijzigingen hebt opgeslagen is het wellicht nodig je browsercache te legen.\n* '''Firefox / Safari:''' houd ''Shift'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-Shift-R'' op een Mac)\n* '''Google Chrome:''' druk op ''Ctrl-Shift-R'' (''⌘-Shift-R'' op een Mac)\n* '''Internet Explorer:''' houd ''Ctrl'' ingedrukt terwijl je op ''Vernieuwen'' klikt of druk op ''Ctrl-F5''\n* '''Opera:''' leeg je cache in ''Extra → Voorkeuren''",
+ "usercssyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om je nieuwe CSS te testen alvorens op te slaan.",
+ "userjsyoucanpreview": "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om je nieuwe JavaScript te testen alvorens op te slaan.",
+ "usercsspreview": "'''Dit is alleen een voorvertoning van je persoonlijke CSS.\nDeze is nog niet opgeslagen!'''",
+ "userjspreview": "'''Let op: je test nu je persoonlijke JavaScript.'''\n'''De pagina is niet opgeslagen!'''",
+ "userinvalidcssjstitle": "'''Waarschuwing:''' er is geen uiterlijk \"$1\".\nJe eigen .css- en .js-pagina's beginnen met een kleine letter, bijvoorbeeld {{ns:user}}:Naam/vector.css in plaats van {{ns:user}}:Naam/Vector.css.",
+ "previewnote": "'''Let op: dit is een controlepagina.'''\nJe tekst is niet opgeslagen!",
+ "previewconflict": "Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als je deze opslaat.",
+ "session_fail_preview": "'''Je bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan.\nProbeer het opnieuw.\nAls het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
+ "session_fail_preview_html": "'''Je bewerking is niet verwerkt, omdat sessiegegevens verloren zijn gegaan.'''\n\n''Omdat in {{SITENAME}} ruwe HTML is ingeschakeld, is een voorvertoning niet mogelijk als bescherming tegen aanvallen met JavaScript.''\n\n'''Als dit een legitieme bewerking is, probeer het dan opnieuw.\nAls het dan nog niet lukt, [[Special:UserLogout|meld jezelf dan af]] en weer aan.'''",
+ "token_suffix_mismatch": "'''Je bewerking is geweigerd, omdat je browser de leestekens in het bewerkingstoken onjuist heeft behandeld.'''\nDe bewerking is geweigerd om verminking van de paginatekst te voorkomen.\nDit gebeurt soms als er een webgebaseerde proxydienst wordt gebruikt die fouten bevat.",
+ "edit_form_incomplete": "'''Sommige onderdelen van het bewerkingsformulier hebben de server niet bereikt. Controleer of je bewerkingen intact zijn en probeer het opnieuw.'''",
+ "explainconflict": "Een andere gebruiker heeft deze pagina bewerkt sinds je met je bewerking bent begonnen.\nIn het bovenste deel van het venster staat de tekst van de huidige pagina.\nJe bewerking staat in het onderste gedeelte.\nJe dient je bewerkingen in te voegen in de bestaande tekst.\n'''Alleen''' de tekst in het bovenste gedeelte wordt opgeslagen als je op \"{{int:savearticle}}\" klikt.",
+ "yourtext": "Je tekst",
+ "nonunicodebrowser": "'''Waarschuwing: je browser kan niet goed overweg met Unicode.'''\nHiermee wordt door de MediaWiki-software rekening gehouden zodat je toch zonder problemen pagina's kunt bewerken: niet-ASCII tekens worden in het bewerkingsveld weergegeven als hexadecimale codes.",
+ "editingold": "'''Waarschuwing: je bewerkt een oude versie van deze pagina.'''\nAls je je bewerking opslaat, gaan alle wijzigingen verloren die na deze versie zijn gemaakt.",
+ "copyrightwarning": "Let op: alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de $2 (zie $1 voor details).\nAls je niet wilt dat je tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor \"Pagina opslaan\".<br />\nHierbij beloof je ons tevens dat je deze tekst zelf hebt geschreven of overgenomen uit een vrije, openbare bron.<br />\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij je daarvoor toestemming hebt!'''",
+ "copyrightwarning2": "Al je bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers.\nAls je niet wilt dat je teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.<br />\nJe belooft ook dat je de oorspronkelijke auteur bent van dit materiaal of dat je het hebt gekopieerd uit een bron in het publieke domein of een soortgelijke vrije bron (zie $1 voor details).\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij je daarvoor toestemming hebt!'''",
+ "longpageerror": "'''Fout: de tekst die je hebt toegevoegd is {{PLURAL:$1|één kilobyte|$1 kilobyte}} groot, wat groter is dan het maximum van {{PLURAL:$2|één kilobyte|$2 kilobyte}}.'''\nOpslaan is niet mogelijk.",
+ "readonlywarning": "'''Waarschuwing: je kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.'''\nHet is misschien verstandig om je tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.\n\nEen beheerder heeft de database geblokkeerd om de volgende reden: $1",
+ "nocreatetext": "{{SITENAME}} heeft de mogelijkheid om nieuwe pagina's te maken beperkt.\nJe kunt reeds bestaande pagina's wijzigen of je kunt [[Special:UserLogin|jezelf aanmelden of registreren]].",
+ "nocreate-loggedin": "Je hebt geen rechten om nieuwe pagina's te maken.",
+ "permissionserrorstext": "Je hebt geen rechten om dit te doen om de volgende {{PLURAL:$1|reden|redenen}}:",
+ "permissionserrorstext-withaction": "Je hebt geen rechten om $2 om de volgende {{PLURAL:$1|reden|redenen}}:",
+ "recreate-moveddeleted-warn": "'''Waarschuwing: je bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.'''\n\nOverweeg of het terecht is dat je verder werkt aan deze pagina.\nVoor je gemak staan hieronder het verwijderingslogboek en het hernoemingslogboek voor deze pagina:",
+ "edit-no-change": "Je bewerking is genegeerd, omdat er geen wijziging aan de tekst is gemaakt.",
+ "editwarning-warning": "Als je deze pagina verlaat verlies je mogelijk wijzigingen die je hebt gemaakt.\nAls je bent aangemeld, kan je deze waarschuwing uitschakelen in het tabblad \"Bewerken\" in je voorkeuren.",
+ "rev-deleted-text-unhide": "Deze paginaversie is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls je wilt kan je [$1 deze versie bekijken].",
+ "rev-suppressed-text-unhide": "Deze paginaversie is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].\nAls je wilt kan je [$1 deze versie bekijken].",
+ "rev-deleted-text-view": "Deze paginaversie is '''verwijderd'''.\nJe kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+ "rev-suppressed-text-view": "Deze paginaversie is '''onderdrukt'''.\nJe kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].",
+ "rev-deleted-no-diff": "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.\nAchtergronden zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+ "rev-suppressed-no-diff": "Je kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.",
+ "rev-deleted-unhide-diff": "Een van de bewerkingen voor de verschillen die je hebt opgevraagd is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls je wilt kan je [$1 de verschillen bekijken].",
+ "rev-suppressed-unhide-diff": "Een van de versies in deze verschillen is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].\nAls je wilt kan je [$1 deze versie bekijken].",
+ "rev-deleted-diff-view": "Een van de versies van de verschillen die je hebt opgevraagd is verwijderd, \nJe kunt deze verschillen bekijken. Mogelijk zijn details zichtbaar in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+ "rev-suppressed-diff-view": "Een van de bewerkingen voor de verschillen die u hebt opgevraagd, is '''onderdrukt'''.\nJe kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].",
+ "revdelete-nooldid-text": "Je hebt geen doelversie(s) voor deze handeling opgegeven, de opgegeven versie bestaat niet of je probeert de laatste versie te verbergen.",
+ "revdelete-show-file-confirm": "Weet je zeker dat je de verwijderde versie van het bestand \"<nowiki>$1</nowiki>\" van $2 om $3 wilt bekijken?",
+ "revdelete-confirm": "Bevestig dat je dit wilde doen, dat je de consequenties begrijpt en dat je dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].",
+ "revdelete-show-no-access": "Er is een fout opgetreden tijdens het weergeven van het object van $1 om $2: dit object is gemarkeerd als \"beschermd\".\nJe hebt geen toegang tot dit object.",
+ "revdelete-modify-no-access": "Er is een fout opgetreden tijdens het wijzigen van het object van $1 om $2: dit object is gemarkeerd als \"beschermd\".\nJe hebt geen toegang tot dit object.",
+ "revdelete-only-restricted": "Er is een fout opgetreden tijdens het verbergen van het item van $1, $2: je kunt geen items onderdrukken uit het zicht van beheerders zonder ook een van de andere zichtbaarheidsopties te selecteren.",
+ "mergehistory-header": "Via deze pagina kan je versies van de geschiedenis van een bronpagina naar een nieuwere pagina samenvoegen.\nZorg dat deze wijziging de geschiedenis van de pagina behoudt.",
+ "search-suggest": "Bedoelde je: $1",
+ "searchdisabled": "Zoeken in {{SITENAME}} is niet mogelijk.\nJe kunt gebruik maken van Google.\nDe gegevens over {{SITENAME}} zijn mogelijk niet bijgewerkt.",
+ "savedprefs": "Je voorkeuren zijn opgeslagen.",
+ "prefs-reset-intro": "Gebruik deze functie om je voorkeuren te herstellen naar de standaardinstellingen.\nDeze handeling kan niet ongedaan gemaakt worden.",
+ "youremail": "E-mailadres:",
+ "prefs-help-variant": "Jouw voorkeursvariant of -spelling om de inhoudspagina's van deze wiki in weer te geven.",
+ "prefs-help-signature": "Reacties op de overlegpagina's worden meestal ondertekend met \"<nowiki>~~~~</nowiki>\".\nDe tildes worden omgezet in je ondertekening en een datum en tijd van de bewerking.",
+ "badsiglength": "Je ondertekening is te lang.\nDeze moet minder dan $1 {{PLURAL:$1|teken|tekens}} bevatten.",
+ "prefs-help-realname": "Echte naam is optioneel.\nAls je deze opgeeft, kan deze naam gebruikt worden om je erkenning te geven voor je werk.",
+ "prefs-help-email": "E-mailadres is optioneel, maar maakt het mogelijk om jou je wachtwoord te e-mailen als je het bent vergeten.",
+ "prefs-help-email-others": "Je kunt ook anderen in staat stellen per e-mail contact met je op te nemen via een koppeling op uw gebruikers- en overlegpagina zonder dat je je identiteit prijsgeeft.",
+ "userrights-groups-help": "Je kunt de groepen wijzigen waar deze gebruiker lid van is.\n* Een aangekruist vakje betekent dat de gebruiker lid is van de groep.\n* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.\n* Een \"*\" betekent dat je een gebruiker niet uit een groep kunt verwijderen nadat je die hebt toegevoegd of vice versa.",
+ "userrights-no-interwiki": "Je hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.",
+ "userrights-nologin": "Je moet [[Special:UserLogin|aangemeld]] zijn met een gebruiker met de juiste rechten om gebruikersrechten toe te wijzen.",
+ "userrights-notallowed": "Je hebt geen rechten om gebruikersrechten toe te voegen of te verwijderen.",
+ "userrights-changeable-col": "Groepen die je kunt beheren",
+ "userrights-unchangeable-col": "Groepen die je niet kunt beheren",
+ "recentchangeslinked-summary": "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een opgegeven pagina of op pagina's in een opgegeven categorie.\nPagina's die op [[Special:Watchlist|uw volglijst]] staan worden '''vet''' weergegeven.",
+ "uploadnologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn om bestanden te uploaden.",
+ "empty-file": "Het bestand dat je probeerde te uploaden had geen inhoud.",
+ "file-too-large": "Het bestand dat je probeerde te uploaden was te groot.",
+ "hookaborted": "De wijziging die je probeerde te maken is afgebroken door een uitbreiding.",
+ "emptyfile": "Het bestand dat je hebt geüpload lijkt leeg te zijn.\nDit zou kunnen komen door een typefout in de bestandsnaam.\nGa na of je dit bestand werkelijk bedoelde te uploaden.",
+ "fileexists": "Er bestaat al een bestand met deze naam.\nControleer <strong>[[:$1]]</strong> als je niet zeker weet of je het huidige bestand wilt overschrijven.\n[[$1|thumb]]",
+ "filepageexists": "De beschrijvingspagina voor dit bestand bestaat al op <strong>[[:$1]]</strong>, maar er bestaat geen bestand met deze naam.\nDe samenvatting die je hebt opgegeven verschijnt niet op de beschrijvingspagina.\nBewerk de pagina handmatig om je beschrijving daar weer te geven.\n[[$1|miniatuur]]",
+ "file-thumbnail-no": "De bestandsnaam begint met <strong>$1</strong>.\nHet lijkt een verkleinde afbeelding te zijn ''(miniatuurafbeelding)''.\nAls je deze afbeelding in volledige resolutie hebt, upload die afbeelding dan.\nWijzig anders de bestandsnaam.",
+ "fileexists-forbidden": "Er bestaat al een bestand met deze naam, en dat kan niet overschreven worden.\nUpload je bestand onder een andere naam.\n[[File:$1|thumb|center|$1]]",
+ "fileexists-shared-forbidden": "Er bestaat al een bestand met deze naam bij de gedeelde bestanden.\nAls je het bestand alsnog wilt uploaden, ga dan terug en kies een andere naam.\n[[File:$1|thumb|center|$1]]",
+ "file-deleted-duplicate": "Een bestand dat identiek is aan dit bestand ([[:$1]]) is voorheen verwijderd.\nRaadpleeg het verwijderingslogboek voordat je verder gaat.",
+ "filewasdeleted": "Er is eerder een bestand met deze naam verwijderd.\nRaadpleeg het $1 voordat je het opnieuw toevoegt.",
+ "filename-bad-prefix": "De naam van het bestand dat je aan het uploaden bent begint met '''\"$1\"''', wat een niet-beschrijvende naam is die meestal automatisch door een digitale camera wordt gegeven.\nKies een duidelijke naam voor je bestand.",
+ "upload-success-msg": "Je upload van [$2] is geslaagd en is beschikbaar: [[:{{ns:file}}:$1]]",
+ "upload-failure-msg": "Er was een probleem met je upload van [$2]:\n\n$1",
+ "upload-warning-msg": "Er was een probleem met je upload van [$2].\nGa terug naar het [[Special:Upload/stash/$1|uploadformulier]] om dit probleem te verhelpen.",
+ "uploadstash-badtoken": "Het uitvoeren van de handeling is mislukt. Dit komt mogelijk doordat je bewerkingsreferenties zijn verlopen. Probeer het opnieuw.",
+ "img-auth-nopathinfo": "PATH_INFO mist.\nJe server is niet ingesteld om deze gegevens door te geven.\nMisschien gebruikt deze CGI, en dan wordt img_auth niet ondersteund.\nZie https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization voor meer informatie.",
+ "img-auth-nologinnWL": "Je bent niet aangemeld en \"$1\" staat niet op de witte lijst.",
+ "img-auth-isdir": "Je probeert de map \"$1\" te benaderen.\nAlleen toegang tot bestanden is toegestaan.",
+ "upload-curl-error28-text": "Het duurde te lang voordat de website antwoordde.\nControleer of de website beschikbaar is, wacht even en probeer het dan opnieuw.\nJe kunt het misschien proberen als het minder druk is.",
+ "upload_source_file": "(een bestand op je computer)",
+ "sharedupload-desc-edit": "Dit bestand komt van $1 en kan ook in andere projecten gebruikt worden.\nJe kunt de [$2 pagina met de bestandsbeschrijving] daar bewerken.",
+ "sharedupload-desc-create": "Dit bestand komt van $1 en kan ook in andere projecten gebruikt worden.\nJe kunt de beschrijving bewerken op de [$2 pagina met de bestandsbeschrijving].",
+ "filepage-nofile-link": "Er bestaat geen bestand met deze naam, maar je kunt het [$1 uploaden].",
+ "upload-disallowed-here": "Je kunt dit bestand niet overschrijven.",
+ "filerevert-intro": "Je bent '''[[Media:$1|$1]]''' aan het terugdraaien tot de [$4 versie op $2, $3].",
+ "filedelete-intro": "Je staat op het punt om het bestand '''[[Media:$1|$1]]''' te verwijderen, inclusief alle eerdere versies.",
+ "filedelete-intro-old": "Je bent de versie van '''[[Media:$1|$1]]''' van [$4 $3, $2] aan het verwijderen.",
+ "notargettext": "Je hebt niet opgegeven voor welke pagina of gebruiker je deze handeling wilt uitvoeren.",
+ "nopagetext": "De pagina die je wilt hernoemen bestaat niet.",
+ "booksources-text": "Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat je zoekt hebben:",
+ "alllogstext": "Dit is het gecombineerde logboek van {{SITENAME}}.\nJe kunt ook kiezen voor specifieke logboeken en filteren op gebruiker (hoofdlettergevoelig) en paginanaam (hoofdlettergevoelig).",
+ "cachedspecial-viewing-cached-ttl": "Je bekijkt een cacheversie van deze pagina, die maximaal $1 oud is.",
+ "cachedspecial-viewing-cached-ts": "Je bekijkt een cacheversie van deze pagina, die mogelijk niet volledig is bijgewerkt.",
+ "mailnologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn en een geldig e-mailadres in je [[Special:Preferences|voorkeuren]] vermelden om andere gebruikers te kunnen e-mailen.",
+ "emailpagetext": "Via dit formulier kan je een e-mail aan {{GENDER:$1|deze gebruiker}} verzenden.\nHet e-mailadres dat je hebt opgegeven bij [[Special:Preferences|je voorkeuren]] wordt als afzender gebruikt.\nDe ontvanger kan dus direct naar je reageren.",
+ "usermaildisabledtext": "Je kunt geen e-mail verzenden naar andere gebruikers op deze wiki",
+ "emailccsubject": "Kopie van je bericht aan $1: $2",
+ "emailsenttext": "Je e-mail is verzonden.",
+ "nowatchlist": "Je volglijst is leeg.",
+ "watchlistanontext": "Om je volglijst te bekijken of te bewerken moet je je $1.",
+ "addedwatchtext": "De pagina \"[[:$1]]\" is toegevoegd aan je [[Special:Watchlist|volglijst]].\nToekomstige bewerkingen van deze pagina en de bijbehorende overlegpagina worden op daar weergegeven.",
+ "removedwatchtext": "De pagina \"[[:$1]]\" is van [[Special:Watchlist|je volglijst]] verwijderd.",
+ "watchlist-details": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op je volglijst, exclusief overlegpagina's.",
+ "wlheader-showupdated": "Pagina's die zijn bewerkt sinds je laatste bezoek worden '''vet''' weergegeven",
+ "watcherrortext": "Er is een fout opgetreden tijdens het wijzigen van je volglijstinstellingen voor \"$1\".",
+ "enotif_lastvisited": "Zie $1 voor alle wijzigingen sinds je laatste bezoek.",
+ "enotif_body": "Hoi $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSamenvatting van de wijziging: $PAGESUMMARY $PAGEMINOREDIT\n\nContactgegevens van de auteur:\nE-mailadres: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nTenzij je deze pagina bezoekt, komen er geen verdere berichten. Op je volglijst kan je voor alle gevolgde pagina's de waarschuwingsinstellingen opschonen.\n\nGroet van je {{SITENAME}}-waarschuwingssysteem.\n\n--\nJe kunt je e-mailinstellingen wijzigen op:\n{{canonicalurl:{{#special:Preferences}}}}\n\nJe kunt je volglijstinstellingen wijzigen op:\n{{canonicalurl:Special:Watchlist/edit}}\n\nJe kunt de pagina van je volglijst verwijderen via de volgende koppeling:\n$UNWATCHURL\n\nTerugkoppeling en verdere assistentie:\n$HELPPAGE",
+ "historywarning": "'''Waarschuwing:''' de pagina die je wilt verwijderen heeft ongeveer $1 {{PLURAL:$1|versie|versies}}:",
+ "confirmdeletetext": "Je staat op het punt een pagina te verwijderen, inclusief de geschiedenis.\nBevestig hieronder dat dit inderdaad je bedoeling is, dat je de gevolgen begrijpt en dat de verwijdering overeenstemt met het [[{{MediaWiki:Policy-url}}|beleid]].",
+ "sessionfailure": "Er lijkt een probleem te zijn met je aanmeldsessie.\nJe handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke \"hijacking\" van deze sessie).\nGa een pagina terug, laad die pagina opnieuw en probeer het nog eens.",
+ "protect-text": "Hier kun je het beveiligingsniveau voor de pagina '''$1''' bekijken en wijzigen.",
+ "protect-locked-blocked": "Je kunt het beveiligingsniveau niet wijzigen terwijl je geblokkeerd bent.\nHier zijn de huidige instellingen voor de pagina '''$1''':",
+ "protect-locked-access": "Je hebt geen rechten om het beveiligingsniveau te wijzigen.\nDit zijn de huidige instellingen voor de pagina '''$1''':",
+ "protect-cantedit": "Je kunt het beveiligingsniveau van deze pagina niet wijzigen, omdat je geen rechten hebt om het te bewerken.",
+ "undeletehistory": "Als je een pagina terugplaatst, worden alle versies hersteld.\nAls er al een nieuwe pagina met dezelfde naam is aangemaakt sinds de pagina is verwijderd, worden de eerder verwijderde versies teruggeplaatst en blijft de huidige versie intact.",
+ "undeleterevision-missing": "Ongeldige of missende versie.\nMogelijk heb je een verkeerde koppeling of is de versie hersteld of verwijderd uit het archief.",
+ "undelete-show-file-confirm": "Weet je zeker dat je een verwijderde versie van het bestand \"<nowiki>$1</nowiki>\" van $2 om $3 wilt bekijken?",
+ "ipb-blockingself": "Je staat op het punt jezelf te blokkeren. Weet je zeker dat je dat wilt doen?",
+ "ipb-confirmhideuser": "Je staat op het punt een verborgen gebruiker te blokkeren. Hiervoor worden gebruikersnamen in alle lijsten en logboekregels verborgen. Weet je het zeker?",
+ "ipb-needreblock": "$1 is al geblokkeerd.\nWil je de instellingen wijzigen?",
+ "unblock-hideuser": "Je kunt deze gebruiker niet deblokkeren, omdat de gebruikersnaam verborgen is.",
+ "proxyblockreason": "Dit is een automatische preventieve blokkade, omdat je gebruik maakt van een open proxyserver.\nNeem contact op met je internetprovider of je helpdesk en stel die op de hoogte van dit ernstige beveiligingsprobleem.",
+ "sorbsreason": "Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.",
+ "sorbs_create_account_reason": "Je IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.\nJe kunt geen gebruiker registreren.",
+ "cant-see-hidden-user": "De gebruiker die je probeert te blokken is al geblokkeerd en verborgen.\nOmdat je het recht \"hideuser\" niet hebt, kun je de blokkade van de gebruiker niet bekijken of bewerken.",
+ "ipbblocked": "Je kunt geen andere gebruikers (de)blokkeren, omdat je zelf geblokkeerd bent",
+ "ipbnounblockself": "Je mag jezelf niet deblokkeren",
+ "lockdbtext": "Waarschuwing: de database blokkeren heeft tot gevolg dat geen enkele gebruiker meer in staat is pagina's te bewerken, voorkeuren te wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.\nBevestig dat je deze handeling wilt uitvoeren en dat je de database vrijgeeft nadat het onderhoud is uitgevoerd.",
+ "unlockdbtext": "Na het vrijgeven van de database kunnen gebruikers weer pagina's bewerken, hun voorkeuren wijzigen of iets anders te doen waarvoor er wijzigingen in de database nodig zijn.\nBevestig dat je deze handeling wil uitvoeren.",
+ "locknoconfirm": "Je hebt je keuze niet bevestigd via het vinkvakje.",
+ "lockdbsuccesstext": "De database is afgesloten.<br />\nVergeet niet de [[Special:UnlockDB|database vrij te geven]] zodra je klaar bent met je onderhoud.",
+ "movepagetext": "Door middel van het onderstaande formulier kan je een pagina hernoemen.\nDe geschiedenis gaat mee naar de nieuwe pagina.\n* De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\n* Koppelingen naar de oude pagina worden niet aangepast.\n* De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt.\nAls je dit niet wilt, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\n\n'''Waarschuwing!'''\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.",
+ "movepagetext-noredirectfixer": "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen.\nDe oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\nControleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\nJe kunt dus een pagina die per ongeluk is hernoemd terug hernoemen en je kunt een bestaande pagina niet overschrijven. \n\n'''Waarschuwing:''' voor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat je die gevolgen overziet voordat je deze handeling uitvoert.",
+ "movepagetalktext": "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':\n* De overlegpagina onder de nieuwe naam al bestaat;\n* Je het onderstaande vinkje deselecteert.\n\nIn die gevallen moet je de pagina handmatig hernoemen of samenvoegen.",
+ "moveuserpage-warning": "'''Waarschuwing:''' Je gaat een gebruikerspagina hernoemen.\nHoud er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
+ "movenologintext": "Je moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.",
+ "movenotallowed": "Je hebt geen rechten om pagina's te hernoemen.",
+ "movenotallowedfile": "Je hebt geen rechten om bestanden te hernoemen.",
+ "cant-move-user-page": "Je hebt geen rechten om gebruikerspagina's te hernoemen (met uitzondering van subpagina's).",
+ "cant-move-to-user-page": "Je hebt geen rechten om een pagina naar een gebruikerspagina te hernoemen. Hernoemen naar een subpagina is wel mogelijk.",
+ "cantmove-titleprotected": "Je kunt geen pagina naar deze naam hernoemen, omdat deze naam beveiligd is tegen het aanmaken ervan.",
+ "delete_and_move_text": "==Verwijdering nodig==\nOnder de naam \"[[:$1]]\" bestaat al een pagina.\nWil je deze verwijderen om plaats te maken voor de te hernoemen pagina?",
+ "exporttext": "Je kunt de tekst en geschiedenis van een pagina of pagina's exporteren naar XML.\nDit exportbestand is daarna te importeren in een andere MediaWiki via de [[Special:Import|importpagina]].\n\nGeef in het onderstaande veld de namen van de te exporteren pagina's op, één pagina per regel, en geef aan of je alle versies met de bewerkingssamenvatting of alleen de huidige versies met de bewerkingssamenvatting wilt exporteren.\n\nIn het laatste geval kan je ook een koppeling gebruiken, bijvoorbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] voor de pagina \"[[{{MediaWiki:Mainpage}}]]\".",
+ "allmessagestext": "Hieronder staan de systeemberichten uit de MediaWiki-naamruimte.\nGa naar [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als je wilt bijdragen aan de algemene vertaling voor MediaWiki.",
+ "importtext": "Gebruik de [[Special:Export|exportfunctie]] in de wiki waar de informatie vandaan komt.\nSla de uitvoer op je eigen computer op, en voeg die daarna hier toe.",
+ "import-error-edit": "De pagina \"$1\" is niet geïmporteerd omdat je niet de rechten hebt om die te bewerken.",
+ "import-error-create": "De pagina \"$1\" is niet geïmporteerd omdat je niet de rechten hebt om die aan te maken.",
+ "tooltip-pt-userpage": "Jouw gebruikerspagina",
+ "tooltip-pt-anonuserpage": "Gebruikerspagina voor je IP-adres",
+ "tooltip-pt-mytalk": "Jouw overlegpagina",
+ "tooltip-pt-watchlist": "Overzicht van pagina's die je volgt",
+ "tooltip-pt-mycontris": "Overzicht van je bijdragen",
+ "tooltip-pt-login": "Je wordt van harte uitgenodigd om je aan te melden als gebruiker, maar dit is niet verplicht",
+ "tooltip-ca-edit": "Je kunt deze pagina bewerken.\nGebruik de voorbeeldweergaveknop alvorens te bewaren.",
+ "tooltip-ca-viewsource": "Deze pagina is beveiligd.\nJe kunt wel de broncode bekijken.",
+ "tooltip-ca-nstab-special": "Dit is een speciale pagina, je kunt de pagina zelf niet bewerken",
+ "tooltip-save": "Je wijzigingen opslaan",
+ "tooltip-preview": "Een voorvertoning maken. Gebruik dit voordat je opslaat!",
+ "tooltip-watch": "Deze pagina aan je volglijst toevoegen",
+ "spamprotectiontext": "De pagina die je wilde opslaan is geblokkeerd door het spamfilter.\nMeestal wordt dit door een externe koppeling op een zwarte lijst veroorzaakt.",
+ "markedaspatrollederror-noautopatrol": "Je kunt je eigen wijzigingen niet als gecontroleerd markeren.",
+ "mediawarning": "'''Waarschuwing''': dit bestandstype bevat mogelijk programmacode die je systeem schade kan berokkenen.",
+ "confirmemail_noemail": "Je hebt geen geldig e-mailadres opgegeven in je [[Special:Preferences|gebruikersvoorkeuren]].",
+ "confirmemail_text": "{{SITENAME}} eist bevestiging van je e-mailadres voordat je de e-mailmogelijkheden kunt gebruiken.\nKlik op de onderstaande knop om een bevestigingsbericht te ontvangen.\nDit bericht bevat een koppeling met een code.\nOpen die koppeling om je e-mailadres te bevestigen.",
+ "confirmemail_pending": "Er is al een bevestigingsbericht aan je verzonden.\nAls je recentelijk je gebruiker hebt aangemaakt, wacht dan een paar minuten totdat die aankomt voordat je opnieuw een e-mail laat sturen.",
+ "confirmemail_oncreate": "Er is een bevestigingscode naar je e-mailadres verzonden.\nDeze code is niet nodig om je aan te melden, maar je dient deze wel te bevestigen voordat je de e-mailmogelijkheden van deze wiki kunt gebruiken.",
+ "confirmemail_sendfailed": "{{SITENAME}} kon je bevestigingscode niet verzenden.\nControleer je e-mailadres op ongeldige tekens.\n\nHet e-mailprogramma meldde: $1",
+ "confirmemail_needlogin": "Je moet $1 om je e-mailadres te bevestigen.",
+ "confirmemail_success": "Je e-mailadres is bevestigd.\nJe kunt jezelf nu [[Special:UserLogin|aanmelden]] en {{SITENAME}} gebruiken.",
+ "confirmemail_loggedin": "Je e-mailadres is nu bevestigd.",
+ "confirmemail_body": "Iemand, waarschijnlijk jijzelf, met het IP-adres $1,\nheeft zich met dit e-mailadres geregistreerd als gebruiker \"$2\" op {{SITENAME}}.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:\n\n$3\n\nAls je jezelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van je e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+ "confirmemail_body_changed": "Iemand, waarschijnlijk jijzelf, met het IP-adres $1,\nheeft het het e-mailadres geregistreerd voor gebruiker \"$2\" op {{SITENAME}} gewijzigd naar dit e-mailadres.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat je deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls je jezelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van je e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+ "confirmemail_body_set": "Iemand, waarschijnlijk jij, met het IP-adres $1,\nheeft het het e-mailadres voor gebruiker \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nOpen de volgende koppeling in je webbrowser om te bevestigen dat jij deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls jij deze wijziging *niet* hebt gemaakt, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+ "deletedwhileediting": "'''Let op''': deze pagina is verwijderd terwijl je bezig was met je bewerking!",
+ "confirmrecreate": "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd met opgave van de volgende reden:\n: ''$2''\nBevestig dat je de pagina opnieuw wilt aanmaken.",
+ "confirmrecreate-noreason": "Nadat je begonnen bent met je wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd.\nBevestig dat je de pagina opnieuw wilt aanmaken.",
+ "confirm-watch-top": "Deze pagina toevoegen aan je volglijst?",
+ "confirm-unwatch-top": "Deze pagina verwijderen uit je volglijst?",
+ "watchlistedit-normal-explain": "Hieronder worden de pagina’s op je volglijst weergegeven.\nKlik op het vierkantje ernaast en daarna op \"{{int:Watchlistedit-normal-submit}}\" om een pagina te verwijderen.\nJe kunt ook de [[Special:EditWatchlist/raw|ruwe lijst bewerken]].",
+ "watchlistedit-normal-done": "Er {{PLURAL:$1|is één pagina|zijn $1 pagina’s}} verwijderd van je volglijst:",
+ "watchlistedit-raw-explain": "Hieronder staan pagina’s op je volglijst.\nJe kunt de lijst bewerken door pagina’s te verwijderen en toe te voegen.\nEén pagina per regel.\nAls je klaar bent, klik dan op \"{{int:Watchlistedit-raw-submit}}\".\nJe kunt ook [[Special:EditWatchlist|het standaard bewerkingsscherm gebruiken]].",
+ "watchlistedit-raw-done": "Je volglijst is bijgewerkt.",
+ "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.",
+ "api-error-badaccess-groups": "Je mag geen bestanden uploaden in deze wiki.",
+ "api-error-empty-file": "Het bestand dat je hebt geüpload is leeg.",
+ "api-error-file-too-large": "Het bestand dat je hebt geüpload is te groot.",
+ "api-error-hookaborted": "De wijziging die je probeert te maken is afgebroken door een uitbreiding.",
+ "api-error-internal-error": "Interne fout: er is iets misgegaan tijdens het verwerken van je upload door de wiki.",
+ "api-error-mustbeloggedin": "Je moet aangemeld zijn om bestanden te kunnen uploaden.",
+ "api-error-unknown-error": "Interne fout: er is iets misgegaan tijdens het uploaden van je bestand."
}
diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json
index c7a8b4b0..8cd91784 100644
--- a/languages/i18n/nl.json
+++ b/languages/i18n/nl.json
@@ -59,7 +59,15 @@
"Mar(c)",
"Calak",
"Arg",
- "NCoppens"
+ "NCoppens",
+ "Josse.Cottenier",
+ "Macofe",
+ "Mirolith",
+ "Akoopal",
+ "Sikjes",
+ "Robin0van0der0vliet",
+ "Kthoelen",
+ "Mbch331"
]
},
"tog-underline": "Koppelingen onderstrepen:",
@@ -77,7 +85,7 @@
"tog-watchmoves": "Pagina’s en bestanden die ik hernoem automatisch volgen",
"tog-watchdeletion": "Pagina’s en bestanden die ik verwijder automatisch volgen",
"tog-watchrollback": "Pagina's waarop ik heb teruggedraaid automatisch volgen",
- "tog-minordefault": "Mijn bewerkingen standaard als ‘klein’ markeren",
+ "tog-minordefault": "Mijn bewerkingen standaard als kleine bewerking markeren",
"tog-previewontop": "Voorvertoning boven bewerkingsveld weergeven",
"tog-previewonfirst": "Voorvertoning bij eerste bewerking weergeven",
"tog-enotifwatchlistpages": "Mij e-mailen bij bewerkingen van pagina’s of bestanden op mijn volglijst",
@@ -87,7 +95,7 @@
"tog-shownumberswatching": "Het aantal gebruikers weergeven dat deze pagina volgt",
"tog-oldsig": "Bestaande ondertekening:",
"tog-fancysig": "Als wikitekst behandelen (zonder automatische koppeling)",
- "tog-uselivepreview": "\"Live voorvertoning\" gebruiken (experimenteel)",
+ "tog-uselivepreview": "\"Live voorvertoning\" gebruiken",
"tog-forceeditsummary": "Een melding geven bij een lege bewerkingssamenvatting",
"tog-watchlisthideown": "Eigen bewerkingen op mijn volglijst verbergen",
"tog-watchlisthidebots": "Botbewerkingen op mijn volglijst verbergen",
@@ -206,7 +214,7 @@
"qbmyoptions": "Mijn pagina's",
"faq": "Veelgestelde vragen",
"faqpage": "Project:Veelgestelde vragen",
- "actions": "Acties",
+ "actions": "Handelingen",
"namespaces": "Naamruimten",
"variants": "Varianten",
"navigation-heading": "Navigatiemenu",
@@ -275,6 +283,7 @@
"pool-queuefull": "De wachtrij van de poel is vol",
"pool-errorunknown": "Er is een onbekende fout opgetreden",
"pool-servererror": "De dienst \"pool counter\" is niet beschikbaar ($1).",
+ "poolcounter-usage-error": "Gebruiksfout: $1",
"aboutsite": "Over {{SITENAME}}",
"aboutpage": "Project:Info",
"copyright": "De inhoud is beschikbaar onder de $1 tenzij anders aangegeven.",
@@ -284,6 +293,7 @@
"disclaimers": "Voorbehoud",
"disclaimerpage": "Project:Algemeen voorbehoud",
"edithelp": "Hulp bij bewerken",
+ "helppage-top-gethelp": "Help",
"mainpage": "Hoofdpagina",
"mainpage-description": "Hoofdpagina",
"policy-url": "Project:Beleid",
@@ -362,10 +372,13 @@
"readonly_lag": "De database is automatisch vergrendeld terwijl de ondergeschikte databaseservers synchroniseren met de hoofdserver.",
"internalerror": "Interne fout",
"internalerror_info": "Interne fout: $1",
+ "internalerror-fatal-exception": "Fatale fout van type \"$1\"",
"filecopyerror": "Bestand \"$1\" kon niet naar \"$2\" gekopieerd worden.",
"filerenameerror": "\"$1\" kon niet hernoemd worden naar \"$2\".",
"filedeleteerror": "Bestand \"$1\" kon niet verwijderd worden.",
"directorycreateerror": "De map \"$1\" kon niet aangemaakt worden.",
+ "directoryreadonlyerror": "De map \"$1\" is alleen-lezen.",
+ "directorynotreadableerror": "De map \"$1\" kan niet gelezen worden.",
"filenotfound": "Bestand \"$1\" kon niet gevonden worden.",
"unexpected": "Onverwachte waarde: \"$1\"=\"$2\".",
"formerror": "Fout: formulier kon niet verzonden worden",
@@ -387,7 +400,8 @@
"viewsourcetext": "U kunt de brontekst van deze pagina bekijken en kopiëren:",
"viewyourtext": "U kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
"protectedinterface": "Deze pagina bevat tekst voor berichten van de software op deze wiki en is beveiligd om misbruik te voorkomen.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen voor alle wiki's toe te voegen of te wijzigen.",
- "editinginterface": "'''Waarschuwing:''' u bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
+ "editinginterface": "<strong>Waarschuwing:</strong> u bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
+ "translateinterface": "Om vertalingen voor alle wiki's toe te voegen of te wijzigen kunt u gebruik maken van [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
"cascadeprotected": "Deze pagina kan niet bewerkt worden, omdat die is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:\n$2",
"namespaceprotected": "U hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
"customcssprotected": "U kunt deze CSS-pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
@@ -426,7 +440,7 @@
"userlogin-signwithsecure": "Beveiligde verbinding gebruiken",
"yourdomainname": "Uw domein:",
"password-change-forbidden": "U kunt uw wachtwoord niet wijzigen in deze wiki.",
- "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe account bij te werken.",
+ "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe gebruiker bij te werken.",
"login": "Aanmelden",
"nav-login-createaccount": "Aanmelden / registreren",
"userlogin": "Aanmelden / registreren",
@@ -439,11 +453,13 @@
"nologin": "Hebt u geen account? $1.",
"nologinlink": "Registreren",
"createaccount": "Registreren",
- "gotaccount": "Hebt u al een account? $1.",
+ "gotaccount": "Hebt u al een gebruiker? $1.",
"gotaccountlink": "Aanmelden",
"userlogin-resetlink": "Bent u uw aanmeldgegevens vergeten?",
"userlogin-resetpassword-link": "Wachtwoord vergeten?",
"userlogin-helplink2": "Hulp bij aanmelden",
+ "userlogin-loggedin": "U bent al aangemeld als {{GENDER:$1|$1}}.\nGebruik het onderstaande formulier om aan te melden als een andere gebruiker.",
+ "userlogin-createanother": "Een andere gebruiker aanmaken",
"createacct-emailrequired": "E-mailadres",
"createacct-emailoptional": "E-mailadres (optioneel)",
"createacct-email-ph": "Geef uw e-mailadres op",
@@ -472,7 +488,7 @@
"noname": "U hebt geen geldige gebruikersnaam opgegeven.",
"loginsuccesstitle": "Aanmelden geslaagd",
"loginsuccess": "'''U bent nu aangemeld bij {{SITENAME}} als \"$1\".'''",
- "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuw account aan]].",
+ "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuw gebruiker aan]].",
"nosuchusershort": "De gebruiker \"$1\" bestaat niet.\nControleer de schrijfwijze.",
"nouserspecified": "Geef een gebruikersnaam op.",
"login-userblocked": "Deze gebruiker is geblokkeerd.\nAanmelden is niet mogelijk.",
@@ -500,11 +516,12 @@
"cannotchangeemail": "Het e-mailadres voor een gebruiker kan op deze wiki niet gewijzigd worden.",
"emaildisabled": "Deze site kan geen e-mails verzenden.",
"accountcreated": "Account aangemaakt",
- "accountcreatedtext": "Het gebruikersaccount voor [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|overleg]]) is aangemaakt.",
+ "accountcreatedtext": "Het gebruikersaccount [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|overleg]]) is aangemaakt.",
"createaccount-title": "Gebruikers registreren voor {{SITENAME}}",
"createaccount-text": "Iemand heeft een gebruiker op {{SITENAME}} ($4) aangemaakt met de naam \"$2\" en uw e-mailadres.\nHet wachtwoord voor \"$2\" is \"$3\".\nMeld u aan en wijzig uw wachtwoord.\n\nNegeer dit bericht als deze gebruiker zonder uw medeweten is aangemaakt.",
"login-throttled": "U heeft recentelijk te veel mislukte aanmeldpogingen gedaan.\nWacht alstublieft $1 voordat u het opnieuw probeert.",
"login-abort-generic": "U bent niet aangemeld. De procedure is afgebroken.",
+ "login-migrated-generic": "Uw gebruikersnaam is hernoemd, en uw gebruikersnaam bestaat niet langer op deze wiki.",
"loginlanguagelabel": "Taal: $1",
"suspicious-userlogout": "Uw verzoek om af te melden is genegeerd, omdat het lijkt alsof het verzoek is verzonden door een browser of cacheproxy die stuk is.",
"createacct-another-realname-tip": "Echte naam is optioneel.\nAls u deze opgeeft, wordt deze naam gebruikt worden om u erkenning te geven voor uw werk.",
@@ -516,7 +533,7 @@
"user-mail-no-addy": "Geprobeerd een e-mail te verzenden zonder een e-mailadres.",
"user-mail-no-body": "Er is geprobeerd een e-mail te verzenden zonder inhoud of met een hele korte inhoud.",
"changepassword": "Wachtwoord wijzigen",
- "resetpass_announce": "Voer een nieuw wachtwoord in om het aanmelden te voltooien:",
+ "resetpass_announce": "Voer een nieuw wachtwoord in om het aanmelden te voltooien.",
"resetpass_text": "<!-- Voeg hier tekst toe -->",
"resetpass_header": "Wachtwoord wijzigen",
"oldpassword": "Huidige wachtwoord:",
@@ -530,8 +547,8 @@
"resetpass-submit-loggedin": "Wachtwoord wijzigen",
"resetpass-submit-cancel": "Annuleren",
"resetpass-wrong-oldpass": "Het huidige of tijdelijke wachtwoord is ongeldig.\nMogelijk hebt u uw wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.",
- "resetpass-recycled": "Gelieve uw wachtwoord op iets anders dan uw huidige wachtwoord in te stellen.",
- "resetpass-temp-emailed": "U bent aangemeld met een tijdelijk code die u per e-mail hebt ontvangen.\nOm het inloggen te voltooien moet u hier een nieuw wachtwoord instellen:",
+ "resetpass-recycled": "Wijzig uw wachtwoord naar iets anders dan uw huidige wachtwoord.",
+ "resetpass-temp-emailed": "U bent aangemeld met een tijdelijk code die u per e-mail hebt ontvangen.\nOm het aanmelden te voltooien moet u hier een nieuw wachtwoord instellen:",
"resetpass-temp-password": "Tijdelijk wachtwoord:",
"resetpass-abort-generic": "De wachtwoordwijziging is afgebroken door een uitbreiding.",
"resetpass-expired": "Uw wachtwoord is verlopen. Stel een nieuw wachtwoord om aan te melden.",
@@ -600,9 +617,10 @@
"showpreview": "Bewerking ter controle bekijken",
"showdiff": "Wijzigingen bekijken",
"blankarticle": "<strong>Waarschuwing:</strong> de pagina die u wilt aanmaken is leeg.\nAls u opnieuw op \"{{int:savearticle}}\" klikt, wordt de pagina aangemaakt zonder enige inhoud.",
- "anoneditwarning": "'''Waarschuwing:''' u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt.",
+ "anoneditwarning": "<strong>Waarschuwing:</strong> u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 aanmeldt]</strong> of <strong>[$2 een gebruiker aanmaakt]</strong verschijnen uw bewerkingen onder uw gebruikersnaam, naast andere voordelen.",
"anonpreviewwarning": "''U bent niet aangemeld.''\n''Door uw bewerking op te slaan wordt uw IP-adres opgeslagen in de paginageschiedenis.''",
"missingsummary": "'''Let op:''' u hebt geen bewerkingssamenvatting opgegeven.\nAls u nogmaals op \"{{int:savearticle}}\" klikt wordt de bewerking zonder samenvatting opgeslagen.",
+ "selfredirect": "<strong>Waarschuwing:</strong>U heeft een doorverwijzing gemaakt naar dezelfde pagina. Mogelijk heeft u de verkeerde bestemming voor de doorverwijzing gebruikt, of bewerkt u de verkeerde pagina. Door alsnog op \"{{int:savearticle}}\" te klikken word de doorverwijzing alsnog aangemaakt.",
"missingcommenttext": "Plaats uw reactie hieronder.",
"missingcommentheader": "'''Let op:''' u hebt geen onderwerp/kop voor deze opmerking opgegeven.\nAls u opnieuw op \"{{int:savearticle}}\" klikt, wordt uw wijziging zonder een onderwerp/kop opgeslagen.",
"summary-preview": "Bewerkingssamenvatting nakijken:",
@@ -625,7 +643,7 @@
"anontalkpagetext": "----''Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvangt u hier berichten die niet voor u bedoeld zijn.\nAls u dat wilt voorkomen, [[Special:UserLogin/signup|registreer u]] of [[Special:UserLogin|meld u aan]] om verwarring met andere anonieme gebruikers te voorkomen.''",
"noarticletext": "Deze pagina bevat geen tekst.\nU kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.",
"noarticletext-nopermission": "Deze pagina bevat geen tekst.\nU kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar u mag de pagina niet aanmaken.",
- "missing-revision": "De versie #$1 van de pagina \"{{FULLPAGENAME}} bestaat niet.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling naar een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+ "missing-revision": "De versie #$1 van de pagina \"{{FULLPAGENAME}}\" bestaat niet.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling naar een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
"userpage-userdoesnotexist": "U bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker \"$1\").\nControleer of u deze pagina wel wilt aanmaken of bewerken.",
"userpage-userdoesnotexist-view": "De gebruiker \"$1\" is niet geregistreerd.",
"blocked-notice-logextract": "Deze gebruiker is op het moment geblokkeerd.\nDe laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:",
@@ -696,11 +714,15 @@
"content-not-allowed-here": "De inhoud \"$1\" is niet toegestaan op pagina [[$2]].",
"editwarning-warning": "Als u deze pagina verlaat verliest u mogelijk wijzigingen die u hebt gemaakt.\nAls u bent aangemeld, kunt u deze waarschuwing uitschakelen in het tabblad \"{{int:prefs-editing}}\" in uw voorkeuren.",
"editpage-notsupportedcontentformat-title": "Inhoudsformaat niet ondersteund",
- "editpage-notsupportedcontentformat-text": "Het inhoudsformaat $1 wordt niet ondersteund door het inhoudsmodel $2.",
+ "editpage-notsupportedcontentformat-text": "Het inhoudstype $1 wordt niet ondersteund door het inhoudsmodel $2.",
"content-model-wikitext": "wikitekst",
"content-model-text": "tekst zonder opmaak",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Leeg object",
+ "content-json-empty-array": "Lege reeks",
+ "duplicate-args-category": "Pagina's met dubbele sjabloonparameters",
+ "duplicate-args-category-desc": "De pagina bevat aanroepen van sjablonen waarin hetzelfde argument meerdere keren wordt gebruikt, bijvoorbeeld <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> of <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Waarschuwing:''' deze pagina gebruikt te veel kostbare parserfuncties.\n\nNu {{PLURAL:$1|is|zijn}} het er $1, terwijl het er minder dan $2 {{PLURAL:$2|moet|moeten}} zijn.",
"expensive-parserfunction-category": "Pagina's die te veel kostbare parserfuncties gebruiken",
"post-expand-template-inclusion-warning": "Waarschuwing: de maximale transclusiegrootte voor sjablonen is overschreden.\nSommige sjablonen worden niet getranscludeerd.",
@@ -733,7 +755,7 @@
"currentrev": "Huidige versie",
"currentrev-asof": "Huidige versie van $2 om $3",
"revisionasof": "Versie van $2 om $3",
- "revision-info": "Versie door {{GENDER:$6|$2}} op $4 om $5 $7",
+ "revision-info": "Versie door {{GENDER:$6|$2}} op $4 om $5$7",
"previousrevision": "← Oudere versie",
"nextrevision": "Nieuwere versie →",
"currentrevisionlink": "Huidige versie",
@@ -758,6 +780,7 @@
"rev-deleted-event": "(logboekregel verwijderd)",
"rev-deleted-user-contribs": "[gebruikersnaam of IP-adres verwijderd - bewerking verborgen in bijdragen]",
"rev-deleted-text-permission": "Deze bewerking is '''verwijderd'''.\nEr kunnen details aanwezig zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+ "rev-suppressed-text-permission": "Deze paginaversie is <strong>verwijderd</strong>. Meer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verwijderlogboek].",
"rev-deleted-text-unhide": "Deze paginaversie is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls u wilt kunt u [$1 deze versie bekijken].",
"rev-suppressed-text-unhide": "Deze paginaversie is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek onderdrukte versies].\nAls u wilt kunt u [$1 deze versie bekijken].",
"rev-deleted-text-view": "Deze paginaversie is '''verwijderd'''.\nU kunt deze bekijken; er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
@@ -766,7 +789,7 @@
"rev-suppressed-no-diff": "U kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.",
"rev-deleted-unhide-diff": "Een van de bewerkingen voor de verschillen die u hebt opgevraagd is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls u wilt kunt u [$1 de verschillen bekijken].",
"rev-suppressed-unhide-diff": "Een van de versies in deze verschillen is '''onderdrukt'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].\nAls u wilt kunt u [$1 deze versie bekijken].",
- "rev-deleted-diff-view": "Een van de versies voor de verschillen die u hebt opgevraagd, is '''verwijderd'''.\nU kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+ "rev-deleted-diff-view": "Een van de versies voor de verschillen die u hebt opgevraagd, is '''verwijderd'''.\nU kunt deze verschillen bekijken. Meer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
"rev-suppressed-diff-view": "Een van de bewerkingen voor de verschillen die u hebt opgevraagd, is '''onderdrukt'''.\nU kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].",
"rev-delundel": "weergeven/verbergen",
"rev-showdeleted": "weergeven",
@@ -784,7 +807,7 @@
"logdelete-text": "Verwijderde logboekregels zijn nog zichtbaar in de logboeken, maar delen van de inhoud zijn niet openbaar.",
"revdelete-text-others": "Andere beheerders kunnen de verborgen inhoud nog steeds inzien en weer zichtbaar maken, tenzij er aanvullende beperkingen zijn ingesteld.",
"revdelete-confirm": "Bevestig dat u dit wilde doen, dat u de consequenties begrijpt en dat u dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].",
- "revdelete-suppress-text": "Gebruik versies verbergen '''alleen''' in de volgende gevallen:\n* Mogelijk smadelijke informatie;\n* Ongepaste persoonlijke gegevens, zoals:\n*: ''adres, telefoonnummers, identificatienummer, enzovoort.''",
+ "revdelete-suppress-text": "Gebruik versies verbergen <strong>alleen</strong> in de volgende gevallen:\n* Mogelijk smadelijke informatie;\n* Ongepaste persoonlijke gegevens, zoals:\n*: <em>adres, telefoonnummers, nationaal identificatienummer, enzovoort.</em>",
"revdelete-legend": "Zichtbaarheidsbeperkingen instellen",
"revdelete-hide-text": "Versietekst",
"revdelete-hide-image": "Bestandsinhoud verbergen",
@@ -801,7 +824,7 @@
"revdelete-submit": "Toepassen op de geselecteerde {{PLURAL:$1|bewerking|bewerkingen}}",
"revdelete-success": "'''De zichtbaarheid van de wijziging is bijgewerkt.'''",
"revdelete-failure": "'''De zichtbaarheid van de wijziging kon niet bijgewerkt worden:'''\n$1",
- "logdelete-success": "'''Zichtbaarheid van de gebeurtenis succesvol ingesteld.'''",
+ "logdelete-success": "<strong>Zichtbaarheid van de gebeurtenis ingesteld.</strong>",
"logdelete-failure": "'''De zichtbaarheid van de logboekregel kon niet ingesteld worden:'''\n$1",
"revdel-restore": "Zichtbaarheid wijzigen",
"pagehist": "Geschiedenis",
@@ -830,9 +853,9 @@
"mergehistory-go": "Samenvoegbare bewerkingen bekijken",
"mergehistory-submit": "Versies samenvoegen",
"mergehistory-empty": "Er zijn geen versies die samengevoegd kunnen worden.",
- "mergehistory-success": "$3 {{PLURAL:$3|versie|versies}} van [[:$1]] zijn succesvol samengevoegd naar [[:$2]].",
+ "mergehistory-success": "$3 {{PLURAL:$3|versie|versies}} van [[:$1]] zijn samengevoegd naar [[:$2]].",
"mergehistory-fail": "Kan geen geschiedenis samenvoegen, controleer opnieuw de pagina- en tijdinstellingen.",
- "mergehistory-fail-toobig": "Niet in staat om geschiedenis samen te voegen omdat meer dan de limiet van $1 {{PLURAL:$1|revisie zou|revisies zouden}} worden verplaatst.",
+ "mergehistory-fail-toobig": "Niet in staat om geschiedenis samen te voegen omdat meer dan de limiet van $1 {{PLURAL:$1|versie wordt|versie worden}} verplaatst.",
"mergehistory-no-source": "De bronpagina $1 bestaat niet.",
"mergehistory-no-destination": "De bestemmingspagina $1 bestaat niet.",
"mergehistory-invalid-source": "De bronpagina moet een geldige paginanaam zijn.",
@@ -842,7 +865,6 @@
"mergehistory-same-destination": "De bronpagina en doelpagina kunnen niet hetzelfde zijn",
"mergehistory-reason": "Reden:",
"mergelog": "Samenvoegingslogboek",
- "pagemerge-logentry": "heeft [[$1]] naar [[$2]] samengevoegd (versies tot en met $3)",
"revertmerge": "Samenvoeging ongedaan maken",
"mergelogpagetext": "Hieronder ziet u een lijst van recente samenvoegingen van een paginageschiedenis naar een andere.",
"history-title": "$1: versiegeschiedenis",
@@ -854,8 +876,8 @@
"showhideselectedversions": "Geselecteerde versies weergeven/verbergen",
"editundo": "ongedaan maken",
"diff-empty": "(geen verschil)",
- "diff-multi-sameuser": "({{PLURAL:$1|Een tussenliggende revisie|$1 tussenliggende revisies}} door dezelfde gebruiker niet weergegeven)",
- "diff-multi-otherusers": "({{PLURAL:$1|Een tussenliggende revisie|$1 tussenliggende revisies}} door {{PLURAL:$2|een andere gebruiker|$2 gebruikers}} niet weergegeven)",
+ "diff-multi-sameuser": "({{PLURAL:$1|Een tussenliggende versie|$1 tussenliggende versies}} door dezelfde gebruiker niet weergegeven)",
+ "diff-multi-otherusers": "({{PLURAL:$1|Een tussenliggende versie|$1 tussenliggende versies}} door {{PLURAL:$2|een andere gebruiker|$2 gebruikers}} niet weergegeven)",
"diff-multi-manyusers": "($1 tussenliggende {{PLURAL:$1|versie|versies}} door meer dan $2 {{PLURAL:$2|gebruiker|gebruikers}} worden niet weergegeven)",
"difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van deze verschillen ($1) {{PLURAL:$2|is|zijn}} niet aangetroffen.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling verschillen voor een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
"searchresults": "Zoekresultaten",
@@ -883,6 +905,7 @@
"search-result-category-size": "{{PLURAL:$1|1 categorielid|$1 categorieleden}} ({{PLURAL:$2|1 ondercategorie|$2 ondercategorieën}}, {{PLURAL:$3|1 bestand|$3 bestanden}})",
"search-redirect": "(doorverwijzing $1)",
"search-section": "(subkop $1)",
+ "search-category": "(categorie $1)",
"search-file-match": "(komt overeen met de inhoud van het bestand)",
"search-suggest": "Bedoelde u: $1",
"search-interwiki-caption": "Zusterprojecten",
@@ -893,6 +916,7 @@
"searchall": "alle",
"showingresults": "Hieronder {{PLURAL:$1|staat '''1''' resultaat|staan '''$1''' resultaten}} vanaf #'''$2'''.",
"showingresultsinrange": "Hieronder {{PLURAL:$1|wordt|worden}} maximaal {{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1 </strong>resultaten}} weergegeven in het bereik #<strong>$2</strong> tot #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> van <strong>$2</strong>|Resultaten <strong>$1 - $2</strong> van <strong>$3</strong>}}",
"search-nonefound": "Er zijn geen resultaten voor uw zoekopdracht.",
"powersearch-legend": "Uitgebreid zoeken",
"powersearch-ns": "Zoeken in naamruimten:",
@@ -915,6 +939,11 @@
"prefs-personal": "Gebruikersprofiel",
"prefs-rc": "Recente wijzigingen",
"prefs-watchlist": "Volglijst",
+ "prefs-editwatchlist": "Volglijst bewerken",
+ "prefs-editwatchlist-label": "Items op uw volglijst bewerken:",
+ "prefs-editwatchlist-edit": "Items op uw volglijsten bekijken en verwijderen",
+ "prefs-editwatchlist-raw": "Ruwe volglijst bewerken",
+ "prefs-editwatchlist-clear": "Volglijst wissen",
"prefs-watchlist-days": "Dagen weer te geven in de volglijst:",
"prefs-watchlist-days-max": "Maximaal $1 {{PLURAL:$1|dag|dagen}}",
"prefs-watchlist-edits": "Maximaal aantal bewerkingen in de uitgebreide volglijst:",
@@ -1005,7 +1034,8 @@
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Verschillen",
"prefs-help-prefershttps": "Deze voorkeur wordt toegepast bij de volgende keer aanmelden.",
- "prefs-tabs-navigation-hint": "Tip: U kunt de pijltjestoetsen naar links en naar rechts gebruiken om te navigeren tussen de tabbladen in de lijst.",
+ "prefswarning-warning": "U heeft deze wijzigingen gemaakt in uw voorkeuren die nog niet opgeslagen zijn. Wanneer u de pagina verlaat zonder op \"$1\" te klikken worden uw voorkeuren niet bijgewerkt.",
+ "prefs-tabs-navigation-hint": "Tip: u kunt de pijltjestoetsen naar links en naar rechts gebruiken om te navigeren tussen de tabbladen in de lijst.",
"email-address-validity-valid": "Het e-mailadres lijkt geldig",
"email-address-validity-invalid": "Geef een geldig e-mailadres op",
"userrights": "Gebruikersrechtenbeheer",
@@ -1079,7 +1109,7 @@
"right-browsearchive": "Verwijderde pagina's zoeken",
"right-undelete": "Verwijderde pagina's terugplaatsen",
"right-suppressrevision": "Specifieke versies bekijken, verbergen en weer zichtbaar maken op pagina's van elke gebruiker",
- "right-viewsuppressed": "Bekijk versies verborgen door elke gebruiker",
+ "right-viewsuppressed": "Versies verborgen door elke gebruiker bekijken",
"right-suppressionlog": "Niet-openbare logboeken bekijken",
"right-block": "Andere gebruikers de mogelijkheid ontnemen te bewerken",
"right-blockemail": "Een gebruiker het recht ontnemen om e-mail te versturen",
@@ -1162,6 +1192,7 @@
"action-viewmywatchlist": "uw eigen volglijst te bekijken",
"action-viewmyprivateinfo": "uw eigen privégegevens te bekijken",
"action-editmyprivateinfo": "uw eigen privégegevens te bewerken",
+ "action-managechangetags": "labels aanmaken en verwijderen",
"nchanges": "$1 {{PLURAL:$1|bewerking|bewerkingen}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sinds uw laatste bezoek}}",
"enhancedrc-history": "geschiedenis",
@@ -1232,9 +1263,9 @@
"uploaderror": "Uploadfout",
"upload-recreate-warning": "'''Waarschuwing: er is een bestand met deze naam verwijderd of hernoemd.'''\n\nHieronder worden het verwijderingslogboek en het hernoemingslogboek voor deze pagina weergegeven:",
"uploadtext": "Gebruik het onderstaande formulier om bestanden te uploaden.\nOm eerder toegevoegde bestanden te bekijken of te zoeken kunt u naar de [[Special:FileList|bestandslijst]] gaan.\nUploads en bestanden die na verwijdering opnieuw worden toegevoegd zijn na te zien in het [[Special:Log/upload|uploadlogboek]].\nVerwijderde bestanden worden bijgehouden in het [[Special:Log/delete|verwijderingslogboek]].\n\nOm het bestand in te voegen in een pagina kunt u een van de volgende vormen gebruiken, al naar gelang het bestandsformaat dat van toepassing is:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestand.jpg]]</nowiki>''' om de volledige versie van het bestand te gebruiken;\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestand.png|200px|thumb|left|alternatieve tekst]]</nowiki>''' om een 200-pixels brede afbeelding links weer te geven met een rand en met \"alternatieve tekst\" als beschrijving;\n* '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestand.ogg]]</nowiki>''' om naar het bestand te verwijzen zonder het weer te geven.",
- "upload-permitted": "Toegelaten bestandstypes: $1.",
- "upload-preferred": "Aangewezen bestandstypes: $1.",
- "upload-prohibited": "Verboden bestandstypes: $1.",
+ "upload-permitted": "Toegelaten {{PLURAL:$2|bestandstype|bestandstypes}}: $1.",
+ "upload-preferred": "Aangewezen {{PLURAL:$2|bestandstype|bestandstypes}}: $1.",
+ "upload-prohibited": "Verboden {{PLURAL:$2|bestandstype|bestandstypes}}: $1.",
"uploadlogpage": "Uploadlogboek",
"uploadlogpagetext": "Hieronder staan de nieuwste bestanden.\nZie de [[Special:NewFiles|galerij met nieuwe bestanden]] voor een visueler overzicht.",
"filename": "Bestandsnaam",
@@ -1289,7 +1320,7 @@
"php-uploaddisabledtext": "Het uploaden van bestanden is uitgeschakeld in PHP.\nControleer de instelling \"file_uploads\".",
"uploadscripted": "Dit bestand bevat HTML- of scriptcode die foutief door uw browser kan worden weergegeven.",
"uploadscriptednamespace": "Dit SVG-bestand bevat een ongeldige naamruimte \"$1\".",
- "uploadinvalidxml": "De XML in het geüploade bestand kon niet worden geparst.",
+ "uploadinvalidxml": "De XML in het geüploade bestand kon niet worden verwerkt.",
"uploadvirus": "Het bestand bevat een virus! Details: $1",
"uploadjava": "Het bestand is een ZIP-bestand dat een Java .class-bestand bevat.\nHet uploaden van Java-bestanden is niet toegestaan omdat hiermee beveiligingsinstellingen omzeild kunnen worden.",
"upload-source": "Bronbestand",
@@ -1312,9 +1343,9 @@
"upload-proto-error": "Verkeerd protocol",
"upload-proto-error-text": "Uploads via deze methode vereisen URL's die beginnen met <code>http://</code> of <code>ftp://</code>.",
"upload-file-error": "Interne fout",
- "upload-file-error-text": "Er is een interne fout opgetreden tijdens het aanmaken van een tijdelijk bestaan op de server.\nNeem contact op met een [[Special:ListUsers/sysop|moderator]].",
+ "upload-file-error-text": "Er is een interne fout opgetreden tijdens het aanmaken van een tijdelijk bestaan op de server.\nNeem contact op met een [[Special:ListUsers/sysop|beheerder]].",
"upload-misc-error": "Onbekende uploadfout",
- "upload-misc-error-text": "Er is tijdens het uploaden een onbekende fout opgetreden.\nControleer of de URL correct en beschikbaar is en probeer het opnieuw.\nAls het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop|moderator]].",
+ "upload-misc-error-text": "Er is tijdens het uploaden een onbekende fout opgetreden.\nControleer of de URL correct en beschikbaar is en probeer het opnieuw.\nAls het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop|beheerder]].",
"upload-too-many-redirects": "De URL bevatte te veel doorverwijzingen",
"upload-http-error": "Er is een HTTP-fout opgetreden: $1",
"upload-copy-upload-invalid-domain": "Uploaden per kopie is niet beschikbaar vanuit dit domein.",
@@ -1357,7 +1388,7 @@
"lockmanager-fail-svr-release": "Het was niet mogelijk om de vergrendeling voor de server $1 op te heffen.",
"zip-file-open-error": "Er is een fout opgetreden bij het openen van het bestand voor de ZIP-controle.",
"zip-wrong-format": "Het opgegeven bestand was geen ZIP-bestand.",
- "zip-bad": "Het bestand is een corrupt of onleesbare ZIP-bestand.\nDe veiligheid kan niet worden gecontroleerd.",
+ "zip-bad": "Het bestand is een beschadigd of onleesbaar ZIP-bestand.\nDe veiligheid kan niet worden gecontroleerd.",
"zip-unsupported": "Het bestand is een ZIP-bestand dat gebruik maakt van ZIP-mogelijkheden die MediaWiki niet ondersteunt.\nDe veiligheid kan niet worden gecontroleerd.",
"uploadstash": "Verborgen uploads",
"uploadstash-summary": "Deze pagina biedt toegang tot bestanden die geüpload zijn of nog geüpload worden maar nog niet beschikbaar gemaakt zijn in de wiki. Deze bestanden zijn alleen zichtbaar voor de gebruiker die ze uploadt.",
@@ -1393,7 +1424,7 @@
"nolicense": "Maak een keuze",
"licenses-edit": "Licentieopties bewerken",
"license-nopreview": "(Voorvertoning niet beschikbaar)",
- "upload_source_url": "(een bestanden van een geldige, publiek toegankelijke URL)",
+ "upload_source_url": "(een bestand van een geldige, openbare URL)",
"upload_source_file": "(een bestand op uw computer)",
"listfiles-delete": "verwijderen",
"listfiles-summary": "Op deze speciale pagina zijn alle toegevoegde bestanden te bekijken.",
@@ -1480,7 +1511,7 @@
"listduplicatedfiles-summary": "Dit is een lijst met bestanden waarvan de laatste versie een duplicaat is van de meest recente versie van een ander bestand. Er wordt alleen gerapporteerd over lokale bestanden.",
"listduplicatedfiles-entry": "[[:File:$1|$1]] heeft [[$3|{{PLURAL:$2|één duplicaat|$2 duplicaten}}]].",
"unusedtemplates": "Ongebruikte sjablonen",
- "unusedtemplatestext": "Deze pagina geeft alle pagina's weer in de naamruimte {{ns:template}} die op geen enkele pagina gebruikt worden.\nVergeet niet de \"Koppelingen naar deze pagina\" te controleren alvorens dit sjabloon te verwijderen.",
+ "unusedtemplatestext": "Deze pagina geeft alle pagina's weer in de naamruimte {{ns:template}} die op geen enkele pagina gebruikt worden.\nVergeet niet de koppelingen naar deze pagina te controleren alvorens deze sjabloon te verwijderen.",
"unusedtemplateswlh": "andere koppelingen",
"randompage": "Willekeurige pagina",
"randompage-nopages": "Er zijn geen pagina's in de volgende {{PLURAL:$2|naamruimte|naamruimten}}: $1.",
@@ -1494,7 +1525,6 @@
"statistics": "Statistieken",
"statistics-header-pages": "Paginastatistieken",
"statistics-header-edits": "Bewerkingsstatistieken",
- "statistics-header-views": "Paginaweergavestatistieken",
"statistics-header-users": "Gebruikersstatistieken",
"statistics-header-hooks": "Overige statistieken",
"statistics-articles": "Inhoudelijke pagina's",
@@ -1503,13 +1533,9 @@
"statistics-files": "Bestanden",
"statistics-edits": "Paginabewerkingen sinds het begin van {{SITENAME}}",
"statistics-edits-average": "Gemiddeld aantal bewerkingen per pagina",
- "statistics-views-total": "Totaal aantal weergegeven pagina's",
- "statistics-views-total-desc": "Het bekijken van niet-bestaande pagina's en speciale pagina's is niet inbegrepen",
- "statistics-views-peredit": "Weergegeven pagina's per bewerking",
"statistics-users": "Geregistreerde [[Special:ListUsers|gebruikers]]",
"statistics-users-active": "Actieve gebruikers",
"statistics-users-active-desc": "Gebruikers die in de afgelopen {{PLURAL:$1|dag|$1 dagen}} een handeling hebben uitgevoerd",
- "statistics-mostpopular": "Meest bekeken pagina's",
"pageswithprop": "Pagina's met een pagina-eigenschap",
"pageswithprop-legend": "Pagina's met een pagina-eigenschap",
"pageswithprop-text": "Op deze pagina worden pagina's weergegeven met een bepaalde pagina-eigenschap.",
@@ -1550,7 +1576,6 @@
"uncategorizedtemplates": "Niet-gecategoriseerde sjablonen",
"unusedcategories": "Ongebruikte categorieën",
"unusedimages": "Ongebruikte bestanden",
- "popularpages": "Veel bekeken pagina's",
"wantedcategories": "Niet-bestaande categorieën met de meeste koppelingen",
"wantedpages": "Niet-bestaande pagina's met koppelingen",
"wantedpages-badtitle": "Ongeldige paginanaam in resultaat: $1",
@@ -1582,7 +1607,7 @@
"protectedpagesempty": "Er zijn momenteel geen pagina's beveiligd die aan deze voorwaarden voldoen.",
"protectedpages-timestamp": "Tijdstip",
"protectedpages-page": "Pagina",
- "protectedpages-expiry": "Verloopt",
+ "protectedpages-expiry": "Vervalt",
"protectedpages-performer": "Beveiligd door",
"protectedpages-params": "Beveiligingsopties",
"protectedpages-reason": "Reden",
@@ -1612,9 +1637,11 @@
"pager-older-n": "{{PLURAL:$1|1 oudere|$1 oudere}}",
"suppress": "Toezicht",
"querypage-disabled": "Deze speciale pagina is uitgeschakeld om performanceredenen.",
+ "apihelp": "API-hulp",
+ "apihelp-no-such-module": "Module \"$1\" niet gevonden.",
"booksources": "Boekinformatie",
"booksources-search-legend": "Bronnen en gegevens over een boek zoeken",
- "booksources-go": "OK",
+ "booksources-search": "Zoeken",
"booksources-text": "Hieronder staat een lijst met koppelingen naar andere websites die nieuwe of gebruikte boeken verkopen, en die wellicht meer informatie over het boek dat u zoekt hebben:",
"booksources-invalid-isbn": "Het opgegeven ISBN lijkt niet geldig te zijn.\nControleer of u wellicht een fout hebt gemaakt bij de invoer.",
"specialloguserlabel": "Uitvoerende gebruiker:",
@@ -1652,7 +1679,7 @@
"linksearch-pat": "Zoekpatroon:",
"linksearch-ns": "Naamruimte:",
"linksearch-ok": "Zoeken",
- "linksearch-text": "Wildcards zoals \"*.wikipedia.org\" of \"*.org\" zijn toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: <code>$1</code> (wordt \"http://\" als er geen protocol wordt opgegeven).",
+ "linksearch-text": "Het jokerteken gebruiken, zoals \"*.wikipedia.org\" of \"*.org\" is toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: <code>$1</code> (wordt \"http://\" als er geen protocol wordt opgegeven).",
"linksearch-line": "$1 heeft een koppeling in $2",
"linksearch-error": "Wildcards zijn alleen toegestaan aan het begin van een hostnaam.",
"listusersfrom": "Gebruikers bekijken vanaf:",
@@ -1750,7 +1777,7 @@
"wlheader-enotif": "U wordt per e-mail gewaarschuwd.",
"wlheader-showupdated": "Pagina's die zijn bewerkt sinds uw laatste bezoek worden '''vet''' weergegeven.",
"wlnote": "Hieronder {{PLURAL:$1|staat de laaste wijziging|staan de laatste $1 wijzigingen}} in {{PLURAL:$2|het laatste uur|de laatste $2 uur}} per $3 om $4.",
- "wlshowlast": "Laatste $1 uur, $2 dagen bekijken ($3)",
+ "wlshowlast": "Laatste $1 uur, $2 dagen bekijken",
"watchlist-options": "Opties voor volglijst",
"watching": "Bezig met plaatsen op volglijst…",
"unwatching": "Bezig met verwijderen van volglijst…",
@@ -1799,7 +1826,6 @@
"deleteprotected": "U kunt deze pagina niet verwijderen omdat hij is beveiligd.",
"deleting-backlinks-warning": "'''Waarschuwing:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere pagina's]] gebruiken of verwijzen naar de pagina die u wilt verwijderen.",
"rollback": "Wijzigingen ongedaan maken",
- "rollback_short": "Terugdraaien",
"rollbacklink": "terugdraaien",
"rollbacklinkcount": "{{PLURAL:$1|één bewerking|$1 bewerkingen}} terugdraaien",
"rollbacklinkcount-morethan": "Meer dan {{PLURAL:$1|één bewerking|$1 bewerkingen}} terugdraaien",
@@ -1849,6 +1875,7 @@
"protect-othertime": "Andere duur:",
"protect-othertime-op": "andere duur",
"protect-existing-expiry": "Bestaande vervaldatum: $2 om $3",
+ "protect-existing-expiry-infinity": "Bestaande vervaldatum: oneindig",
"protect-otherreason": "Overige/additionele reden:",
"protect-otherreason-op": "andere reden",
"protect-dropdown": "*Veel voorkomende redenen voor beveiliging\n** Vandalisme\n** Spam\n** Bewerkingsoorlog\n** Preventieve beveiliging veelbezochte pagina",
@@ -1872,7 +1899,7 @@
"viewdeletedpage": "Verwijderde pagina's bekijken",
"undeletepagetext": "Hieronder {{PLURAL:$1|staat de pagina die verwijderd is|staan pagina's die zijn verwijderd}} en vanuit het archief teruggeplaatst {{PLURAL:$1|kan|kunnen}} worden.",
"undelete-fieldset-title": "Versies terugplaatsen",
- "undeleteextrahelp": "Laat alle vakjes leeg en klik op '''''Terugplaatsen''''' om de hele pagina inclusief alle eerdere versies terug te plaatsen.\nVink de terug te plaatsen versies aan en klik op '''''Terugplaatsen''''' om bepaalde versies terug te plaatsen.",
+ "undeleteextrahelp": "Laat alle vakjes leeg en klik op <strong><em>Terugplaatsen</em></strong> om de hele pagina inclusief alle eerdere versies terug te plaatsen.\nVink de terug te plaatsen versies aan en klik op <strong><em>Terugplaatsen</em></strong> om bepaalde versies terug te plaatsen.",
"undeleterevisions": "$1 {{PLURAL:$1|versie|versies}} gearchiveerd",
"undeletehistory": "Als u een pagina terugplaatst, worden alle versies hersteld.\nAls er al een nieuwe pagina met dezelfde naam is aangemaakt sinds de pagina is verwijderd, worden de eerder verwijderde versies teruggeplaatst en blijft de huidige versie intact.",
"undeleterevdel": "Herstellen is niet mogelijk als daardoor de meest recente versie van de pagina of het bestand gedeeltelijk wordt verwijderd.\nVerwijder in die gevallen de meest recent verwijderde versie uit de selectie.",
@@ -1993,6 +2020,7 @@
"unblocked": "Blokkade van [[User:$1|$1]] is opgeheven",
"unblocked-range": "$1 is gedeblokkeerd",
"unblocked-id": "Blokkade $1 is opgeheven",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] is gedeblokkeerd.",
"blocklist": "Geblokkeerde gebruikers",
"ipblocklist": "Geblokkeerde gebruikers",
"ipblocklist-legend": "Een geblokkeerde gebruiker zoeken",
@@ -2041,7 +2069,7 @@
"range_block_disabled": "De mogelijkheid voor beheerders om een groep IP-adressen te blokkeren is uitgeschakeld.",
"ipb_expiry_invalid": "Ongeldige duur.",
"ipb_expiry_temp": "Blokkades voor verborgen gebruikers moeten permanent zijn.",
- "ipb_hide_invalid": "Het is niet mogelijk deze gebruiker te verbergen; deze heeft meer dan {{PLURAL:$1|een bewerking|$1 bewerkingen}} gedaan.",
+ "ipb_hide_invalid": "Het is niet mogelijk deze gebruiker te verbergen; deze heeft meer dan {{PLURAL:$1|een bewerking|$1 bewerkingen}} uitgevoerd.",
"ipb_already_blocked": "\"$1\" is al geblokkeerd",
"ipb-needreblock": "$1 is al geblokkeerd.\nWilt u de instellingen wijzigen?",
"ipb-otherblocks-header": "Andere {{PLURAL:$1|blokkade|blokkades}}",
@@ -2081,7 +2109,7 @@
"movepagetalktext": "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':\n* De overlegpagina onder de nieuwe naam al bestaat;\n* U het onderstaande vinkje deselecteert.\n\nIn die gevallen moet u de pagina handmatig hernoemen of samenvoegen.",
"movearticle": "Te hernoemen pagina:",
"moveuserpage-warning": "'''Waarschuwing:''' u gaat een gebruikerspagina hernoemen. Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
- "movecategorypage-warning": "<strong>Waarschuwing:</strong> U staat op het punt een categoriepagina te hernoemen. Houdt u er rekening mee dat alleen de categoriepagina zelf hernoemd zal worden; pagina's in de oude categorie zullen <em>niet</em> automatisch naar de nieuwe worden verplaatst.",
+ "movecategorypage-warning": "<strong>Waarschuwing:</strong> U staat op het punt een categoriepagina te hernoemen. Houdt u er rekening mee dat alleen de categoriepagina zelf hernoemd wordt; pagina's in de oude categorie worden <em>niet</em> automatisch naar de nieuwe verplaatst.",
"movenologintext": "U moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.",
"movenotallowed": "U hebt geen rechten om pagina's te hernoemen.",
"movenotallowedfile": "U hebt geen rechten om bestanden te hernoemen.",
@@ -2151,7 +2179,7 @@
"allmessagesname": "Naam",
"allmessagesdefault": "Standaardinhoud",
"allmessagescurrent": "Huidige inhoud",
- "allmessagestext": "Hieronder staan de systeemberichten uit de MediaWiki-naamruimte.\nGa naar [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als u wilt bijdragen aan de algemene vertaling voor MediaWiki.",
+ "allmessagestext": "Hieronder staan de systeemberichten uit de MediaWikinaamruimte.\nGa naar [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWikilokalisatie] en [https://translatewiki.net translatewiki.net] als u wilt bijdragen aan de algemene vertaling voor MediaWiki.",
"allmessagesnotsupportedDB": "Deze pagina kan niet worden gebruikt, omdat '''$wgUseDatabaseMessages''' is uitgeschakeld.",
"allmessages-filter-legend": "Filter",
"allmessages-filter": "Filteren op aangepast:",
@@ -2177,8 +2205,8 @@
"thumbnail_image-missing": "Het bestand lijkt niet aanwezig te zijn: $1",
"thumbnail_image-failure-limit": "Het maken van een miniatuurafbeelding is te vaak mislukt ($1 keer of vaker). Probeer het later nog eens.",
"import": "Pagina's importeren",
- "importinterwiki": "Transwiki-import",
- "import-interwiki-text": "Selecteer een wiki en paginanaam om te importeren.\nVersie- en auteursgegevens blijven hierbij bewaard.\nAlle transwiki-importhandelingen worden opgeslagen in het [[Special:Log/import|importlogboek]].",
+ "importinterwiki": "Pagina's importeren vanuit een andere wiki",
+ "import-interwiki-text": "Selecteer een wiki en paginanaam om te importeren.\nVersie- en auteursgegevens blijven hierbij bewaard.\nAlle importhandelingen worden opgeslagen in het [[Special:Log/import|importlogboek]].",
"import-interwiki-sourcewiki": "Bronwiki:",
"import-interwiki-sourcepage": "Bronpagina:",
"import-interwiki-history": "Volledige geschiedenis van deze pagina ook kopiëren",
@@ -2198,14 +2226,14 @@
"importcantopen": "Kon het importbestand niet openen",
"importbadinterwiki": "Verkeerde interwikikoppeling",
"importsuccess": "Import afgerond!",
- "importnosources": "Er zijn geen transwiki-importbronnen gedefinieerd en directe geschiedenis-uploads zijn uitgeschakeld.",
+ "importnosources": "Er zijn geen wiki's van waaruit geïmporteerd kan worden vastgelegd. Directe geschiedenis-uploads zijn uitgeschakeld.",
"importnofile": "Er is geen importbestand geüpload.",
"importuploaderrorsize": "Upload van het importbestand in mislukt.\nHet bestand is groter dan de ingestelde limiet.",
"importuploaderrorpartial": "Upload van het importbestand in mislukt.\nHet bestand is slechts gedeeltelijk aangekomen.",
"importuploaderrortemp": "Upload van het importbestand in mislukt.\nEen tijdelijke map is niet aanwezig.",
"import-parse-failure": "Fout bij het verwerken van de XML-import",
"import-noarticle": "Er zijn geen te importeren pagina's!",
- "import-nonewrevisions": "Geen revisies geïmporteerd (alle waren al aanwezig, of overgeslagen vanwege fouten).",
+ "import-nonewrevisions": "Geen versies geïmporteerd (alle waren al aanwezig, of overgeslagen vanwege fouten).",
"xml-error-string": "$1 op regel $2, kolom $3 (byte $4): $5",
"import-upload": "XML-gegevens uploaden",
"import-token-mismatch": "De sessiegegevens zijn verloren gegaan. Probeer het opnieuw.",
@@ -2216,24 +2244,21 @@
"import-error-special": "Pagina \"$1\" is niet geïmporteerd omdat deze is geplaatst in een speciale naamruimte waar geen pagina's in geplaatst kunnen worden.",
"import-error-invalid": "De pagina\" \"$1\" is niet geïmporteerd omdat de naam ongeldig is.",
"import-error-unserialize": "Versie $2 van de pagina \"$1\" kon niet verwerkt worden. De versie hoort contentmodel $3 te gebruiken met een serialisatie als $4.",
- "import-error-bad-location": "Revisie $2 met behulp van model $3 kan niet worden opgeslagen als \"$1\" op deze wiki, aangezien dat model niet ondersteund wordt op die pagina.",
+ "import-error-bad-location": "Versie $2 met behulp van model $3 kan niet worden opgeslagen als \"$1\" op deze wiki, aangezien dat model niet ondersteund wordt op die pagina.",
"import-options-wrong": "Verkeerde {{PLURAL:$2|optie|opties}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "De opgegeven basispagina is ongeldig.",
"import-rootpage-nosubpage": "In de naamruimte \"$1\" van de basispagina is het aanmaken van subpagina's niet mogelijk.",
"importlogpage": "Importlogboek",
"importlogpagetext": "Administratieve import van pagina's met geschiedenis van andere wiki's.",
- "import-logentry-upload": "heeft [[$1]] geïmporteerd via een bestandsupload",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|versie|versies}} geïmporteerd",
- "import-logentry-interwiki": "importeerde $1 via transwiki",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} geïmporteerd uit $2",
"javascripttest": "JavaScript testen",
- "javascripttest-title": "Tests uitvoeren voor $1",
"javascripttest-pagetext-noframework": "Deze pagina is gereserveerd voor het uitvoeren van JavaScripttesten.",
"javascripttest-pagetext-unknownframework": "Onbekend testframework \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Onbekende actie \"$1\".",
"javascripttest-pagetext-frameworks": "Kies een van de volgende testframeworks: $1",
"javascripttest-pagetext-skins": "Kies een vormgeving om de tests mee uit te voeren:",
"javascripttest-qunit-intro": "Zie de [$1 testdocumentatie] op mediawiki.org.",
- "javascripttest-qunit-heading": "QUnit testsuite voor MediaWiki JavaScript",
"tooltip-pt-userpage": "Uw gebruikerspagina",
"tooltip-pt-anonuserpage": "Gebruikerspagina voor uw IP-adres",
"tooltip-pt-mytalk": "Uw overlegpagina",
@@ -2241,8 +2266,9 @@
"tooltip-pt-preferences": "Mijn voorkeuren",
"tooltip-pt-watchlist": "Overzicht van pagina's die u volgt",
"tooltip-pt-mycontris": "Overzicht van uw bijdragen",
- "tooltip-pt-login": "U wordt van harte uitgenodigd om u aan te melden als gebruiker, maar dit is niet verplicht",
+ "tooltip-pt-login": "U wordt van harte uitgenodigd om in te loggen, maar dit is niet verplicht",
"tooltip-pt-logout": "Afmelden",
+ "tooltip-pt-createaccount": "Registreer u vooral en meld u aan. Dit is echter niet vereist.",
"tooltip-ca-talk": "Overleg over deze pagina",
"tooltip-ca-edit": "U kunt deze pagina bewerken. Gebruik de knop \"Bewerking ter controle bekijken\" voordat u de pagina opslaat",
"tooltip-ca-addsection": "Nieuw kopje toevoegen",
@@ -2261,9 +2287,9 @@
"tooltip-p-logo": "Naar de hoofdpagina gaan",
"tooltip-n-mainpage": "Naar de hoofdpagina gaan",
"tooltip-n-mainpage-description": "Naar de hoofdpagina gaan",
- "tooltip-n-portal": "Informatie over het project: wie, wat, hoe en waarom",
+ "tooltip-n-portal": "Informatie over het project: wat je kunt doen, waar je dingen kunt vinden",
"tooltip-n-currentevents": "Achtergrondinformatie over actuele zaken",
- "tooltip-n-recentchanges": "De lijst met recente wijzigingen in deze wiki.",
+ "tooltip-n-recentchanges": "Een lijst met recente wijzigingen in deze wiki.",
"tooltip-n-randompage": "Een willekeurige pagina bekijken",
"tooltip-n-help": "Hulpinformatie over deze wiki",
"tooltip-t-whatlinkshere": "Lijst met alle pagina's die naar deze pagina verwijzen",
@@ -2272,6 +2298,7 @@
"tooltip-feed-atom": "Atom-feed voor deze pagina",
"tooltip-t-contributions": "Een lijst met bijdragen van deze gebruiker",
"tooltip-t-emailuser": "Een e-mail naar deze gebruiker verzenden",
+ "tooltip-t-info": "Meer informatie over deze pagina",
"tooltip-t-upload": "Bestanden uploaden",
"tooltip-t-specialpages": "Lijst met alle speciale pagina's",
"tooltip-t-print": "Printvriendelijke versie van deze pagina",
@@ -2332,7 +2359,7 @@
"spam_reverting": "Teruggedraaid naar de laatste versie die geen koppeling bevat naar $1",
"spam_blanking": "Alle versies bevatten een koppeling naar $1. Pagina leeggemaakt",
"spam_deleting": "Alle versies bevatten koppelingen naar $1. Pagina verwijderd",
- "simpleantispam-label": "Antispamcontrole.\nVul dit veld '''NIET''' in!",
+ "simpleantispam-label": "Antispamcontrole.\nVul dit veld <strong>niet</strong> in!",
"pageinfo-title": "Informatie over \"$1\"",
"pageinfo-not-current": "Deze gegevens zijn alleen beschikbaar voor de huidige versie.",
"pageinfo-header-basic": "Basisgegevens",
@@ -2348,7 +2375,6 @@
"pageinfo-robot-policy": "Indexering door robots",
"pageinfo-robot-index": "Toegestaan",
"pageinfo-robot-noindex": "Niet toegestaan",
- "pageinfo-views": "Aantal weergaven",
"pageinfo-watchers": "Aantal paginavolgers",
"pageinfo-few-watchers": "Minder dan {{PLURAL:$1|één volger|$1 volgers}}",
"pageinfo-redirects-name": "Aantal doorverwijzingen naar deze pagina",
@@ -2799,7 +2825,6 @@
"exif-urgency-low": "Laag ($1)",
"exif-urgency-high": "Hoog ($1)",
"exif-urgency-other": "Door gebruiker gedefinieerde prioriteit ($1)",
- "watchlistall2": "alles",
"namespacesall": "alle",
"monthsall": "alle",
"confirmemail": "E-mailadres bevestigen",
@@ -2816,8 +2841,8 @@
"confirmemail_loggedin": "Uw e-mailadres is nu bevestigd.",
"confirmemail_subject": "Bevestiging e-mailadres voor {{SITENAME}}",
"confirmemail_body": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft zich met dit e-mailadres geregistreerd als gebruiker \"$2\" op {{SITENAME}}.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:\n\n$3\n\nAls u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
- "confirmemail_body_changed": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft het het e-mailadres geregistreerd voor gebruiker \"$2\" op {{SITENAME}} gewijzigd naar dit e-mailadres.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
- "confirmemail_body_set": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft het het e-mailadres voor gebruiker \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nKlik op de volgende koppeling of open deze in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls deze gebruiker *niet* aan u toebehoort, klik dan op de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+ "confirmemail_body_changed": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft het e-mailadres geregistreerd voor gebruiker \"$2\" op {{SITENAME}} gewijzigd naar dit e-mailadres.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+ "confirmemail_body_set": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft het e-mailadres voor gebruiker \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls deze gebruiker *niet* aan u toebehoort, klik dan op de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
"confirmemail_invalidated": "De e-mailbevestiging is geannuleerd",
"invalidateemail": "E-mailbevestiging annuleren",
"scarytranscludedisabled": "[Interwiki-invoeging van sjablonen is uitgeschakeld]",
@@ -2876,8 +2901,8 @@
"watchlistedit-raw-removed": "Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina's}} verwijderd:",
"watchlistedit-clear-title": "Volglijst gewist",
"watchlistedit-clear-legend": "Volglijst wissen",
- "watchlistedit-clear-explain": "Alle titels zullen van uw volglijst worden verwijderd",
- "watchlistedit-clear-titles": "Titels:",
+ "watchlistedit-clear-explain": "Alle pagina's worden van uw volglijst verwijderd",
+ "watchlistedit-clear-titles": "Pagina's:",
"watchlistedit-clear-submit": "Volglijst wissen (dit is definitief!)",
"watchlistedit-clear-done": "Uw volglijst is gewist.",
"watchlistedit-clear-removed": "Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina's}} verwijderd:",
@@ -2899,9 +2924,9 @@
"iranian-calendar-m11": "Elfde Perzische maand",
"iranian-calendar-m12": "Twaalfde Perzische maand",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|overleg]])",
- "unknown_extension_tag": "Onbekende tag \"$1\"",
"duplicate-defaultsort": "'''Waarschuwing:''' de standaardsortering \"$2\" krijgt voorrang voor de sortering \"$1\".",
"duplicate-displaytitle": "<strong>Waarschuwing:</strong>Titelweergave \"$2\" overschrijft eerdere titelweergave \"$1\".",
+ "invalid-indicator-name": "<strong>Fout:</strong> de eigenschap <code>name</code> van de paginastatusindicators mag niet leeg zijn.",
"version": "Versie",
"version-extensions": "Geïnstalleerde uitbreidingen",
"version-skins": "Geïnstalleerde vormgevingen",
@@ -2943,6 +2968,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Paginapad]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Scriptpad]",
+ "version-libraries": "Geïnstalleerde bibliotheken",
+ "version-libraries-library": "Bibliotheek",
+ "version-libraries-version": "Versie",
"redirect": "Doorverwijzen op bestandsnaam, gebruikersnummer, paginanummer, of versienummer",
"redirect-legend": "Doorverwijzen naar een bestand of pagina",
"redirect-summary": "Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een paginanummer of versienummer wordt opgegeven) of een gebruikerspagina (als een gebruikersnummer wordt opgegeven). Gebruik: [[{{#Special:Redirect}}/file/Voorbeeld.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/user/101]].",
@@ -2978,6 +3006,7 @@
"specialpages-group-wiki": "Gegevens en -hulpmiddelen",
"specialpages-group-redirects": "Doorverwijzende speciale pagina's",
"specialpages-group-spam": "Spamhulpmiddelen",
+ "specialpages-group-developer": "Hulpmiddelen voor ontwikkelaars",
"blankpage": "Lege pagina",
"intentionallyblankpage": "Deze pagina is bewust leeg gelaten en wordt gebruikt voor benchmarks, enzovoort.",
"external_image_whitelist": " #Laat deze regel onveranderd<pre>\n#Zet hieronder reguliere expressiefragmenten (alleen het deel dat tussen de // staat)\n#Deze worden gehouden tegen de URL's van externe (gehotlinkte) afbeeldingen\n#Als de reguliere expressie van toegang is, wordt een afbeelding weergegeven, anders wordt alleen een koppeling weergegeven\n#Regels die beginnen met \"#\" worden als opmerking behandeld\n#Regels in de witte lijst zijn niet hoofdlettergevoelig.\n\n#Zet alle reguliere expressiefragmenten boven deze regel. Laat deze regel onveranderd</pre>",
@@ -2990,12 +3019,39 @@
"tags-tag": "Labelnaam",
"tags-display-header": "Weergave in wijzigingslijsten",
"tags-description-header": "Volledige beschrijving van betekenis",
+ "tags-source-header": "Bron",
"tags-active-header": "Actief?",
"tags-hitcount-header": "Gelabelde bewerkingen",
+ "tags-actions-header": "Acties",
"tags-active-yes": "Ja",
"tags-active-no": "Nee",
+ "tags-source-extension": "Door een extensie toegevoegd",
+ "tags-source-manual": "Handmatig toegevoegd door gebruikers en bots",
+ "tags-source-none": "Niet meer in gebruik",
"tags-edit": "bewerken",
+ "tags-delete": "verwijderen",
+ "tags-activate": "activeren",
+ "tags-deactivate": "deactiveren",
"tags-hitcount": "$1 {{PLURAL:$1|wijziging|wijzigingen}}",
+ "tags-manage-no-permission": "U hebt geen rechten om labels te beheren.",
+ "tags-create-heading": "Een nieuw label aanmaken",
+ "tags-create-explanation": "Standaard worden nieuw aangemaakte labels beschikbaar gesteld voor gebruik door gebruikers en bots.",
+ "tags-create-tag-name": "Labelnaam:",
+ "tags-create-reason": "Reden:",
+ "tags-create-submit": "Aanmaken",
+ "tags-create-no-name": "U moet een labelnaam opgeven.",
+ "tags-create-already-exists": "Het label \"$1\" bestaat al.",
+ "tags-delete-title": "Label verwijderen",
+ "tags-delete-reason": "Reden:",
+ "tags-delete-not-found": "Het label \"$1\" bestaat niet.",
+ "tags-activate-title": "Label activeren",
+ "tags-activate-reason": "Reden:",
+ "tags-activate-not-found": "Het label \"$1\" bestaat nog niet.",
+ "tags-activate-submit": "Activeren",
+ "tags-deactivate-title": "Label deactiveren",
+ "tags-deactivate-question": "U staat op het punt om het label \"$1\" te deactiveren.",
+ "tags-deactivate-reason": "Reden:",
+ "tags-deactivate-submit": "Deactiveren",
"comparepages": "Pagina's vergelijken",
"compare-page1": "Pagina 1",
"compare-page2": "Pagina 2",
@@ -3049,6 +3105,12 @@
"revdelete-uname-unhid": "gebruikersnaam zichtbaar gemaakt",
"revdelete-restricted": "heeft beperkingen aan beheerders opgelegd",
"revdelete-unrestricted": "heeft beperkingen voor beheerders opgeheven",
+ "logentry-block-block": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} geblokkeerd voor de duur van $5 $6",
+ "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-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-merge-merge": "$1 {{GENDER:$2|heeft}} $3 samengevoegd naar $4 (versies tot en met $5)",
"logentry-move-move": "$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|heeft}} de pagina $3 hernoemd naar $4 zonder een doorverwijzing achter te laten",
"logentry-move-move_redir": "$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4 over een doorverwijzing",
@@ -3057,29 +3119,33 @@
"logentry-patrol-patrol-auto": "$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 automatisch gemarkeerd als gecontroleerd",
"logentry-newusers-newusers": "Gebruiker $1 {{GENDER:$2|is}} aangemaakt",
"logentry-newusers-create": "Gebruikersaccount $1 {{GENDER:$2|is}} aangemaakt",
- "logentry-newusers-create2": "Gebruikersaccount $3 {{GENDER:$2|is}} aangemaakt door $1",
+ "logentry-newusers-create2": "Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1",
"logentry-newusers-byemail": "Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1 en het wachtwoord is per e-mail verzonden",
"logentry-newusers-autocreate": "Gebruikersaccount $1 {{GENDER:$2|is}} automatisch aangemaakt",
"logentry-rights-rights": "$1 {{GENDER:$2|heeft}} groepslidmaatschap voor $3 gewijzigd van $4 naar $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|heeft}} het groepslidmaatschap gewijzigd voor $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automatisch gepromoveerd van $4 naar $5",
- "logentry-upload-upload": "$1 heeft $3 {{GENDER:$2|geupload}}",
+ "logentry-upload-upload": "$1 heeft $3 {{GENDER:$2|geüpload}}",
"logentry-upload-overwrite": "$1 {{GENDER:$2|heeft}} een nieuwe versie van $3 geüpload",
"logentry-upload-revert": "$1 heeft $3 {{GENDER:$2|geupload}}",
+ "logentry-managetags-create": "$1 heeft het label \"$4\" {{GENDER:$2|aangemaakt}}",
"rightsnone": "(geen)",
+ "revdelete-summary": "bewerkingssamenvatting",
+ "feedback-adding": "Uw terugkoppeling wordt aan de pagina toegevoegd...",
+ "feedback-back": "Terug",
+ "feedback-bugcheck": "Geweldig! Controleer even of het niet al één van de [$1 bekende problemen] is.",
+ "feedback-bugnew": "Heb ik gecontroleerd; nieuw probleem melden",
"feedback-bugornote": "Als u zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].\nAnders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt dan toegevoegd aan de pagina \"[$3 $2]\", samen met uw gebruikersnaam en de browser die u gebruikt.",
- "feedback-subject": "Onderwerp:",
- "feedback-message": "Bericht:",
"feedback-cancel": "Annuleren",
- "feedback-submit": "Terugkoppeling opslaan",
- "feedback-adding": "Uw terugkoppeling wordt aan de pagina toegevoegd...",
+ "feedback-close": "Afgerond",
"feedback-error1": "Fout: onbekend resultaat uit de API",
"feedback-error2": "Fout: de bewerking is mislukt",
"feedback-error3": "Fout: geen reactie van de API",
+ "feedback-message": "Bericht:",
+ "feedback-subject": "Onderwerp:",
+ "feedback-submit": "Opslaan",
"feedback-thanks": "Bedankt! Uw terugkoppeling is op de pagina \"[$2 $1]\" geplaatst.",
- "feedback-close": "Afgerond",
- "feedback-bugcheck": "Geweldig! Controleer even of het niet al één van de [$1 bekende problemen] is.",
- "feedback-bugnew": "Heb ik gecontroleerd; nieuw probleem melden",
+ "feedback-thanks-title": "Bedankt!",
"searchsuggest-search": "Zoeken",
"searchsuggest-containing": "bevat...",
"api-error-badaccess-groups": "U mag geen bestanden uploaden in deze wiki.",
@@ -3115,6 +3181,13 @@
"api-error-stashfailed": "Interne fout: de server kon het tijdelijke bestand niet opslaan.",
"api-error-publishfailed": "Interne fout: de server kon het tijdelijke bestand niet publiceren.",
"api-error-stasherror": "Er is een fout opgetreden tijdens het uploaden van het bestand naar de tijdelijke opslagruimte.",
+ "api-error-stashedfilenotfound": "Het opgeslagen bestand is niet aangetroffen tijdens het uploaden vanuit de stash.",
+ "api-error-stashpathinvalid": "Het pad waar het bestand in de stash werd verwacht is ongeldig.",
+ "api-error-stashfilestorage": "Er is een fout opgetreden tijdens het opslaan van het bestand in de stash.",
+ "api-error-stashzerolength": "De server kon het bestand niet opslaan in de stash, omdat het een lengte van nul had.",
+ "api-error-stashnotloggedin": "U moet aangemeld zijn om bestanden te kunnen opslaan in de stash.",
+ "api-error-stashwrongowner": "U bent geen eigenaar van het bestand waar u toegang tot probeerde te krijgen.",
+ "api-error-stashnosuchfilekey": "Het sleutelbestand in de stash waar u toegang tot probeert te krijgen bestaat niet.",
"api-error-timeout": "De server heeft niet binnen de verwachte tijd geantwoord.",
"api-error-unclassified": "Er is een onbekende fout opgetreden",
"api-error-unknown-code": "Interne fout: \"$1\"",
@@ -3159,16 +3232,68 @@
"expand_templates_generate_xml": "XML-parserboom bekijken",
"expand_templates_generate_rawhtml": "Ruwe HTML weergeven",
"expand_templates_preview": "Voorvertoning",
- "pagelanguage": "Taal pagina kiezen",
+ "pagelanguage": "Paginataal kiezen",
"pagelang-name": "Pagina",
"pagelang-language": "Taal",
- "pagelang-use-default": "Gebruik standaard taal",
+ "pagelang-use-default": "Standaard taal gebruiken",
"pagelang-select-lang": "Taal selecteren",
- "right-pagelang": "Taal van de pagina wijzigen",
- "action-pagelang": "Taal van de pagina wijzigen",
- "log-name-pagelang": "Logboek van taalwijzigingen",
+ "right-pagelang": "Paginataal wijzigen",
+ "action-pagelang": "paginataal te wijzigen",
+ "log-name-pagelang": "Logboek taalwijzigingen",
"log-description-pagelang": "Dit is een logboek van wijzigingen van de taal van pagina's.",
- "logentry-pagelang-pagelang": "$1 wijzigde de taal van de pagina '$3' van $4 naar $5.",
+ "logentry-pagelang-pagelang": "$1 heeft de taal van de pagina \"$3\" gewijzigd van $4 naar $5.",
+ "default-skin-not-found": "Het standaard uiterlijk voor de wiki, dat is ingesteld in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is niet beschikbaar.\n\nUw installatie heeft de volgende uiterlijken. Zie See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Handboek: uiterlijk instellen] voor meer informatie over hoe u het uiterlijk instelt en een standaard uiterlijk aangeeft.\n\n$2\n\n; Als u MediaWiki zojuist hebt geïnstalleerd:\n: U hebt waarschijnlijk geïnstalleerd via git, or direct vanuit de broncode via een andere methode. Deze melding is verwacht. Installeer één of meer van de [https://www.mediawiki.org/wiki/Category:All_skins beschikbare uiterlijken op mediawiki.org], door:\n:* De [https://www.mediawiki.org/wiki/Download tarball te downloaden], die meerdere uiterlijken en uitbreidingen bevat. U kunt de map <code>skins/</code> daar uit kopiëren;\n:* Een van de repositories <code>mediawiki/skins/*</code> te klonen via git in de map <code dir=\"ltr\">skins/</code> van uw installatie van MediaWiki.\n: Als u dit doet en u bent MediaWikiontwikkelaar, heeft dit geen invloed op uw gitrepository.\n\n; Als u MediaWiki net hebt bijgewerkt:\n: In MediaWiki 1.24 en nieuwere versies worden geïnstalleerde uiterlijken niet langer automatisch ingeschakeld (zie [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Handboek: uiterlijken automatisch vinden]). U kunt de volgende regels kopieren naar <code>LocalSettings.php</code> om alle op dit moment geïnstalleerde uiterlijken in te schakelen:\n\n<pre dir=\"ltr\">$3</pre>\n\n; In het geval u zojuist <code>LocalSettings.php</code> hebt aangepast:\n: Controleer de namen van de uiterlijken op spelfouten.",
+ "default-skin-not-found-no-skins": "Het standaard uiterlijk voor uw wiki, als aangegeven in <code>$wgDefaultSkin</code> als <code>$1</code>, is niet beschikbaar.\n\nU hebt geen geïnstalleerde uiterlijken.\n\n; Als u MediaWiki zojuist hebt geïnstalleerd:\n: U hebt waarschijnlijk geïnstalleerd via git, or direct vanuit de broncode via een andere methode. Deze melding is verwacht. Installeer één of meer van de [https://www.mediawiki.org/wiki/Category:All_skins beschikbare uiterlijken op mediawiki.org], door:\n:* De [https://www.mediawiki.org/wiki/Download tarball te downloaden], die meerdere uiterlijken en uitbreidingen bevat. U kunt de map <code>skins/</code> daar uit kopiëren;\n:* Een van de repositories <code>mediawiki/skins/*</code> te klonen via git in de map <code dir=\"ltr\">skins/</code> van uw installatie van MediaWiki.\n: Als u dit doet en u bent MediaWikiontwikkelaar, heeft dit geen invloed op uw gitrepository.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ingeschakeld)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>uitgeschakeld</strong>)"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>uitgeschakeld</strong>)",
+ "mediastatistics": "Mediastatistieken",
+ "mediastatistics-summary": "Statistieken over geüploade bestandstypen. Dit overzicht bevat alleen de meest recente versie van een bestand. Oude of verwijderde versies worden niet meegeteld.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-type",
+ "mediastatistics-table-extensions": "Mogelijke extensies",
+ "mediastatistics-table-count": "Aantal bestanden",
+ "mediastatistics-table-totalbytes": "Gecombineerde grootte",
+ "mediastatistics-header-unknown": "Onbekend",
+ "mediastatistics-header-bitmap": "Bitmapafbeeldingen",
+ "mediastatistics-header-drawing": "Tekeningen (vectorbestanden)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Video's",
+ "mediastatistics-header-multimedia": "Interactieve media",
+ "mediastatistics-header-office": "Kantoorbestanden",
+ "mediastatistics-header-text": "Tekstbestanden",
+ "mediastatistics-header-executable": "Uitvoerbare bestanden",
+ "mediastatistics-header-archive": "Gecomprimeerde bestanden",
+ "json-warn-trailing-comma": "Er {{PLURAL:$1|is $1 komma|zijn $1 komma's}} aan het einde van de regel verwijderd uit de JSON",
+ "json-error-unknown": "Er is een fout opgetreden met de JSON. Foutmelding: $1",
+ "json-error-depth": "De maximale stackdiepte is overschreden",
+ "json-error-state-mismatch": "Ongeldige of onjuiste JSON",
+ "json-error-ctrl-char": "Fout in controlekarakter, mogelijk verkeerd gecodeerd",
+ "json-error-syntax": "Er zit een fout in de syntaxis",
+ "json-error-utf8": "Ongeldige UTF-8-tekens, mogelijk verkeerd gecodeerd",
+ "json-error-recursion": "Een of meer recursieve verwijzingen in de waarde die moet worden gecodeerd",
+ "json-error-inf-or-nan": "Een of meer NAN- of INF-waarden in de waarde die moet worden gecodeerd",
+ "json-error-unsupported-type": "Er is een waarde opgegeven van een type dat niet kan worden gecodeerd",
+ "headline-anchor-title": "Koppeling naar deze sectie maken",
+ "special-characters-group-latin": "Latijn",
+ "special-characters-group-latinextended": "Latijn uitgebreid",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symbolen",
+ "special-characters-group-greek": "Grieks",
+ "special-characters-group-cyrillic": "Cyrillisch",
+ "special-characters-group-arabic": "Arabisch",
+ "special-characters-group-arabicextended": "Uitgebreid Arabisch",
+ "special-characters-group-persian": "Farsi",
+ "special-characters-group-hebrew": "Hebreeuws",
+ "special-characters-group-bangla": "Bengaals",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalees",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Laotiaans",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "liggend streepje",
+ "special-characters-title-emdash": "gedachtenstreepje",
+ "special-characters-title-minus": "minteken"
}
diff --git a/languages/i18n/nn.json b/languages/i18n/nn.json
index 3d761c75..b9aa6fb3 100644
--- a/languages/i18n/nn.json
+++ b/languages/i18n/nn.json
@@ -20,7 +20,9 @@
"Pcoombe",
"Ranveig",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Gaute",
+ "Macofe"
]
},
"tog-underline": "Strek under lenkjer:",
@@ -47,7 +49,7 @@
"tog-shownumberswatching": "Vis kor mange som overvakar sida",
"tog-oldsig": "Noverande signatur:",
"tog-fancysig": "Handsam signaturar som wikitekst (utan automatisk lenking)",
- "tog-uselivepreview": "Bruk levande førehandsvising (eksperimentelt)",
+ "tog-uselivepreview": "Bruk levande førehandsvising",
"tog-forceeditsummary": "Spør meg når eg ikkje har skrive noko i endringssamandraget",
"tog-watchlisthideown": "Gøym endringane mine i overvakingslista",
"tog-watchlisthidebots": "Gøym endringar gjorde av robotar i overvakingslista",
@@ -222,6 +224,7 @@
"otherlanguages": "På andre språk",
"redirectedfrom": "(Omdirigert frå $1)",
"redirectpagesub": "Omdirigeringsside",
+ "redirectto": "Omdirigering til:",
"lastmodifiedat": "Sida vart sist endra $1 kl. $2.",
"viewcount": "Sida er vist {{PLURAL:$1|éin gong|$1 gonger}}.",
"protectedpage": "Verna side",
@@ -270,7 +273,7 @@
"toc": "Innhaldsliste",
"showtoc": "vis",
"hidetoc": "gøym",
- "collapsible-collapse": "Slå saman.",
+ "collapsible-collapse": "Slå saman",
"collapsible-expand": "Vid ut",
"confirmable-confirm": "Er {{GENDER:$1|du}} viss på dette?",
"confirmable-yes": "Ja",
@@ -304,7 +307,9 @@
"nospecialpagetext": "Du har bede om ei spesialside som ikkje finst. Lista over spesialsider finn du [[Special:SpecialPages|her]].",
"error": "Feil",
"databaseerror": "Databasefeil",
- "databaseerror-text": "Ein spørjefeil mot databasa har oppstått.\nDette kan indikere ein feil i programvara.",
+ "databaseerror-text": "Ein spørjefeil mot databasen har oppstått.\nDette kan indikere ein feil i programvara.",
+ "databaseerror-query": "Spørjing: $1",
+ "databaseerror-function": "Funksjon: $1",
"databaseerror-error": "Feil: $1",
"laggedslavemode": "Åtvaring: Det er mogleg at sida ikkje er heilt oppdatert.",
"readonly": "Databasen er skriveverna",
@@ -320,6 +325,8 @@
"filerenameerror": "Kunne ikkje døype om fila frå «$1» til «$2».",
"filedeleteerror": "Kunne ikkje slette fila «$1».",
"directorycreateerror": "Kunne ikkje opprette mappa «$1».",
+ "directoryreadonlyerror": "Mappa «$1» er skriveverna.",
+ "directorynotreadableerror": "Mappa «$1» kan ikkje lesast.",
"filenotfound": "Kunne ikkje finne fila «$1».",
"unexpected": "Uventa verdi: «$1»=«$2».",
"formerror": "Feil: Kunne ikkje sende skjema",
@@ -395,11 +402,14 @@
"gotaccountlink": "Logg inn",
"userlogin-resetlink": "Har du gløymd påloggingsopplysingane dine?",
"userlogin-resetpassword-link": "Gløymt passordet ditt?",
+ "userlogin-helplink2": "Hjelp med innlogging",
+ "userlogin-loggedin": "Du er alt innlogga som {{GENDER:$1|$1}}.\nNytt skjemaet nedanfor for å logga inn som ein annan brukar.",
+ "userlogin-createanother": "Opprett ein annan konto",
"createacct-emailrequired": "E-postadresse:",
"createacct-emailoptional": "E-postadresse (valfritt)",
"createacct-email-ph": "Skriv inn e-postadressa di",
"createacct-another-email-ph": "Skriv inn e-postadresse",
- "createaccountmail": "Bruk eit mellombels tilfeldig passord og send det til e-postadressa som er oppgjeven under",
+ "createaccountmail": "Bruk eit mellombels tilfeldig passord og send det til den oppgjevne e-postadressa",
"createacct-realname": "Sant namn (valfritt)",
"createaccountreason": "Årsak:",
"createacct-reason": "Årsak",
@@ -495,11 +505,10 @@
"passwordreset-emailtext-ip": "Nokon (sannsynlegvis deg, frå IP-adressa $1) bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:\n\n$2\n\n{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.\nDu bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.",
"passwordreset-emailtext-user": "Brukaren $1 på {{SITENAME}} bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:\n\n$2\n\n{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.\nDu bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.",
"passwordreset-emailelement": "↓Brukarnamn: $1\nMellombels passord: $2",
- "passwordreset-emailsent": "↓Ei påminning har vorte sendt på e-post.",
- "passwordreset-emailsent-capture": "Eposten under er sendt ut som ei påminning.",
- "passwordreset-emailerror-capture": "Ein påminnings-e-post vart oppretta, og er vist nedanfor; men det lukkast ikkje å senda han til brukaren: $1",
+ "passwordreset-emailsent": "Ein e-post for attendestilling av passord er vorten send",
+ "passwordreset-emailsent-capture": "Ein e-post om attendestilling av passord - vist under - er vorten send",
+ "passwordreset-emailerror-capture": "Ein e-post om attendestilling av passord vart oppretta, og er vist nedanfor; men det lukkast ikkje å senda han til {{GENDER:$2|brukaren}}: $1",
"changeemail": "↓Endre e-postadresse",
- "changeemail-header": "↓Endre kontoen si e-postadresse",
"changeemail-text": "↓Fyll ut dette skjemaet for å endra di e-postadresse. Du må oppgje passordet ditt for å stadfesta endringa.",
"changeemail-no-info": "↓Du må vera pålogga for å få tilgang direkte til denne sida.",
"changeemail-oldemail": "↓Noverande e-postadresse:",
@@ -507,7 +516,7 @@
"changeemail-none": "↓(ingen)",
"changeemail-password": "{{SITENAME}}-passordet ditt:",
"changeemail-submit": "↓Endre e-post",
- "changeemail-cancel": "↓Avbryt",
+ "changeemail-throttled": "Du har freista for mange gonger å logga inn. Du lyt venta $1 før du kan freista på nytt.",
"bold_sample": "Halvfeit skrift",
"bold_tip": "Halvfeit skrift",
"italic_sample": "Kursivskrift",
@@ -631,6 +640,7 @@
"content-model-text": "Rein tekst",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Tomt objekt",
"expensive-parserfunction-warning": "Åtvaring: Denne sida inneheld for mange prosesskrevande parserfunksjonar.\n\nDet burde vere færre enn {{PLURAL:$2|$2|$2}}, men er no {{PLURAL:$1|$1|$1}}.",
"expensive-parserfunction-category": "Sider med for mange prosesskrevande parserfunksjonar",
"post-expand-template-inclusion-warning": "Åtvaring: Storleiken på malar som er inkluderte er for stor.\nNokre malar vert ikkje inkluderte.",
@@ -705,7 +715,7 @@
"revdelete-confirm": "Stadfest at du ynskjer å gjera dette, at du skjønar konsekvensane, og at du gjer det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinene]].",
"revdelete-suppress-text": "Løyning av sideversjonar bør '''berre''' nyttast i desse tilfella:\n* Mogeleg ærekrenkjande informasjon\n* Upassanda personleg informasjon\n*: ''heimeadresser og -telefonnummer, personnummer, osb.''",
"revdelete-legend": "Vel avgrensing for synlegdom",
- "revdelete-hide-text": "Gøym versjonsteksten",
+ "revdelete-hide-text": "Versjonstekst",
"revdelete-hide-image": "Skjul filinnhald",
"revdelete-hide-name": "Gøym handling og sidenamn",
"revdelete-hide-comment": "Gøym endringssamandraga",
@@ -760,7 +770,6 @@
"mergehistory-same-destination": "Kjelde- og målside kan ikkje vere den same.",
"mergehistory-reason": "Årsak:",
"mergelog": "Flettelogg",
- "pagemerge-logentry": "fletta [[$1]] til [[$2]] (versjonar fram til $3)",
"revertmerge": "Fjern fletting",
"mergelogpagetext": "Nedanfor finn du ei liste over dei siste flettingane av ein sidehistorikk til ein annan.",
"history-title": "$1: Versjonshistorikk",
@@ -801,6 +810,7 @@
"search-result-category-size": "{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategoriar}}, {{PLURAL:$3|1 fil|$3 filer}})",
"search-redirect": "(omdirigering $1)",
"search-section": "(bolken $1)",
+ "search-category": "(kategorien $1)",
"search-suggest": "Meinte du: «$1»",
"search-interwiki-caption": "Systerprosjekt",
"search-interwiki-default": "Resultat frå $1:",
@@ -966,6 +976,7 @@
"right-move": "Flytte sider",
"right-move-subpages": "Flytte sider med undersider",
"right-move-rootuserpages": "Flytte hovudbrukarsider",
+ "right-move-categorypages": "Flytta kategorisider",
"right-movefile": "Flytta filer",
"right-suppressredirect": "Treng ikkje lage omdirigering frå det gamle namnet når sida vert flytta",
"right-upload": "Laste opp filer",
@@ -1030,10 +1041,12 @@
"action-createpage": "opprette sider",
"action-createtalk": "opprette diskusjonssider",
"action-createaccount": "opprette denne brukarkontoen",
+ "action-history": "sjå historikken til denne sida",
"action-minoredit": "merke denne endringa som småplukk",
"action-move": "flytte denne sida",
"action-move-subpages": "flytte denne sida og undersidene hennar",
"action-move-rootuserpages": "flytte hovudbrukarsider",
+ "action-move-categorypages": "flytta kategorisider",
"action-movefile": "flytta denne fila",
"action-upload": "laste opp denne fila",
"action-reupload": "skrive over den noverande fila",
@@ -1050,8 +1063,8 @@
"action-block": "blokkere denne brukaren frå å gjere endringar",
"action-protect": "endre vernenivået til sida",
"action-rollback": "snøgt rulla attende endringane til den siste brukaren som endra ei viss side",
- "action-import": "importere denne sida frå ein annan wiki",
- "action-importupload": "importere denne sida frå ei opplasta fil",
+ "action-import": "importera sider frå ein annan wiki",
+ "action-importupload": "importera sider frå ei filopplasting",
"action-patrol": "merke andre endringar av andre brukar som patruljert",
"action-autopatrol": "merke endringane dine som partuljert",
"action-unwatchedpages": "vise lista over uovervaka sider",
@@ -1062,7 +1075,10 @@
"action-sendemail": "senda e-postar",
"action-editmywatchlist": "endra overvakingslista di",
"action-viewmywatchlist": "sjå overvakingslista di",
+ "action-viewmyprivateinfo": "sjå den private informasjonen din",
+ "action-editmyprivateinfo": "endra den private informasjonen din",
"nchanges": "{{PLURAL:$1|Éi endring|$1 endringar}}",
+ "enhancedrc-history": "historikk",
"recentchanges": "Siste endringar",
"recentchanges-legend": "Alternativ for siste endringar",
"recentchanges-summary": "På denne sida ser du dei sist endra sidene i {{SITENAME}}.",
@@ -1288,6 +1304,7 @@
"license-nopreview": "(Førehandsvising er ikkje tilgjengeleg)",
"upload_source_url": " (ei gyldig, offentleg tilgjengeleg nettadresse)",
"upload_source_file": " (ei fil på datamaskina di)",
+ "listfiles-delete": "slett",
"listfiles-summary": "Spesialsida viser alle opplasta filer.\nNår ho er filtrert etter brukar, vert berre filene der brukaren lasta opp den siste versjonen viste.",
"listfiles_search_for": "Søk etter filnamn:",
"imgfile": "fil",
@@ -1299,6 +1316,9 @@
"listfiles_size": "Storleik",
"listfiles_description": "Skildring",
"listfiles_count": "Versjonar",
+ "listfiles-latestversion": "Gjeldande versjon",
+ "listfiles-latestversion-yes": "Ja",
+ "listfiles-latestversion-no": "Nei",
"file-anchor-link": "Fil",
"filehist": "Filhistorikk",
"filehist-help": "Klikk på dato/klokkeslett for å sjå fila slik ho var på det tidspunktet.",
@@ -1373,12 +1393,13 @@
"randomincategory": "Tilfeldig side frå kategori",
"randomincategory-invalidcategory": "«$1» er ikkje eit gildt kategorinamn.",
"randomincategory-nopages": "Det er ingen sider i kategorien [[:Category:$1|$1]].",
+ "randomincategory-category": "Kategori:",
+ "randomincategory-legend": "Tilfeldig side frå kategori",
"randomredirect": "Tilfeldig omdirigering",
"randomredirect-nopages": "Det finst ingen omdirigeringar i namnerommet «$1».",
"statistics": "Statistikk",
"statistics-header-pages": "Sidestatistikk",
"statistics-header-edits": "Endringsstatistikk",
- "statistics-header-views": "Visingsstatistikk",
"statistics-header-users": "Brukarstatistikk",
"statistics-header-hooks": "Anna statistikk",
"statistics-articles": "Innhaldssider",
@@ -1387,13 +1408,9 @@
"statistics-files": "Opplasta filer",
"statistics-edits": "Endringar sidan {{SITENAME}} vart oppretta",
"statistics-edits-average": "Gjennomsnittleg tal på endringar per side",
- "statistics-views-total": "Totalt visningstal",
- "statistics-views-total-desc": "Visingar av sider som ikkje finst og spesialsider er ikkje tekne med",
- "statistics-views-peredit": "Visingar per endring",
"statistics-users": "Registrerte [[Special:ListUsers|brukarar]]",
"statistics-users-active": "Aktive brukarar",
"statistics-users-active-desc": "Brukarar som har utført handlingar {{PLURAL:$1|i dag|dei siste $1 dagane}}",
- "statistics-mostpopular": "Mest viste sider",
"pageswithprop": "Sider med ein sideeigenskap",
"pageswithprop-legend": "Sider med ein sideeigenskap",
"pageswithprop-text": "Denne sida listar opp sider som nyttar ein viss sideeigenskap.",
@@ -1431,32 +1448,44 @@
"uncategorizedtemplates": "Ukategoriserte malar",
"unusedcategories": "Ubrukte kategoriar",
"unusedimages": "Ubrukte filer",
- "popularpages": "Populære sider",
"wantedcategories": "Etterspurde kategoriar",
"wantedpages": "Etterspurde sider",
"wantedpages-badtitle": "Ugyldig tittel mellom resultata: $1",
"wantedfiles": "Etterspurde filer",
"wantedfiletext-cat": "Desse filene er nytta men finst ikkje. Filer frå utannettstadlege samlingar kan vera lista opp sjølv om dei finst. Slike falske positivar vert <del>strokne ut</del>. Sider som nyttar filer som ikkje finst vert lista opp i [[:$1]].",
"wantedfiletext-nocat": "Desse filene er nytta men finst ikkje. Filer frå utannettstadlege samlingar kan vera lista opp sjølv om dei finst. Slike falske positivar vert <del>strokne ut</del>.",
+ "wantedfiletext-nocat-noforeign": "Desse filene vert nytta, men finst ikkje.",
"wantedtemplates": "Etterspurde malar",
"mostlinked": "Sidene med flest lenkjer til seg",
"mostlinkedcategories": "Mest brukte kategoriar",
- "mostlinkedtemplates": "Mest brukte malar",
+ "mostlinkedtemplates": "Mest inkluderte sider",
"mostcategories": "Sidene med flest kategoriar",
"mostimages": "Mest brukte filer",
"mostinterwikis": "Sidene med flest interwikiar",
"mostrevisions": "Sidene med flest endringar",
"prefixindex": "Alle sider med forstaving",
"prefixindex-namespace": "Alle sider med førefeste ($1-namnerommet)",
+ "prefixindex-strip": "Fjern førefestet i lista",
"shortpages": "Korte sider",
"longpages": "Lange sider",
"deadendpages": "Blindvegsider",
"deadendpagestext": "Desse sidene har ikkje lenkjer til andre sider på {{SITENAME}}.",
"protectedpages": "Verna sider",
"protectedpages-indef": "Berre vern på uavgrensa tid",
+ "protectedpages-summary": "Sida listar opp sider som finst og er verna. For ei liste over titlar som er verna mot oppretting, sjå [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
"protectedpages-cascade": "Berre djupvern",
+ "protectedpages-noredirect": "Gøym omdirigeringar",
"protectedpagesempty": "Ingen sider er verna på den valde måten akkurat no.",
+ "protectedpages-timestamp": "Tidsmerke",
+ "protectedpages-page": "Side",
+ "protectedpages-expiry": "Endar",
+ "protectedpages-performer": "Brukar som verna",
+ "protectedpages-params": "Vernestode",
+ "protectedpages-reason": "Årsak",
+ "protectedpages-unknown-timestamp": "Ukjent",
+ "protectedpages-unknown-performer": "Ukjend brukar",
"protectedtitles": "Verna sidenamn",
+ "protectedtitles-summary": "Sida listar opp titlar som er verna mot oppretting. For ei liste over sider som finst og er verna, sjå [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
"protectedtitlesempty": "Ingen sider er verna på den valde måten akkurat no.",
"listusers": "Brukarliste",
"listusers-editsonly": "Vis berre brukarar med endringar",
@@ -1480,7 +1509,7 @@
"querypage-disabled": "Spesialsida er slegen av for skuld yting.",
"booksources": "Bokkjelder",
"booksources-search-legend": "Søk etter bokkjelder",
- "booksources-go": "Gå",
+ "booksources-search": "Søk",
"booksources-text": "Nedanfor finn du ei liste over lenkjer til andre nettstader som sel nye og brukte bøker, og desse kan ha meir informasjon om bøker du leitar etter:",
"booksources-invalid-isbn": "Det oppgjevne ISBN-nummeret er ugyldig; sjekk med kjelda di om du har oppgjeve det rett.",
"specialloguserlabel": "Utøvar:",
@@ -1553,6 +1582,7 @@
"trackingcategories-name": "Meldingsnamn",
"trackingcategories-desc": "Inkluderingsgrunnlag",
"noindex-category-desc": "Sida vert ikkje indeksert av robotar av di ho inneheld trylleordet <code><nowiki>__NOINDEX__</nowiki></code> og er i eit namnerom der dette flagget er tillate.",
+ "trackingcategories-nodesc": "Inga skilding er tilgjengeleg.",
"trackingcategories-disabled": "Kategorien er avslegen",
"mailnologin": "Inga avsendaradresse",
"mailnologintext": "Du lyt vera [[Special:UserLogin|innlogga]] og ha ei gyldig e-postadresse sett i [[Special:Preferences|brukarinnstillingane]] for å sende e-post åt andre brukarar.",
@@ -1606,7 +1636,7 @@
"wlheader-enotif": "Funksjonen for endringsmeldingar per e-post er på.",
"wlheader-showupdated": "Sider som har vorte endra sidan du sist såg på dei er '''utheva'''",
"wlnote": "Nedanfor er {{PLURAL:$1|den siste endringa|dei siste '''$1''' endringane}} {{PLURAL:$2|den siste timen|dei siste '''$2''' timane}}, for $3, kl. $4.",
- "wlshowlast": "Vis siste $1 timane $2 dagane $3",
+ "wlshowlast": "Vis siste $1 timane $2 dagane",
"watchlist-options": "Alternativ for overvakingslista",
"watching": "Overvakar...",
"unwatching": "Fjernar frå overvakinglista...",
@@ -1654,7 +1684,6 @@
"delete-warning-toobig": "Denne sida har ein lang endringshistorikk, med meir enn {{PLURAL:$1|$1&nbsp;endring|$1&nbsp;endringar}}. Dersom du slettar henne kan det forstyrre handlingar i databasen til {{SITENAME}}, ver varsam.",
"deleting-backlinks-warning": "'''Åtvaring''': Andre sider lenkjer til eller inkluderer sida du er i ferd med å sletta.",
"rollback": "Rull attende endringar",
- "rollback_short": "Rull attende",
"rollbacklink": "rull attende",
"rollbacklinkcount": "rull attende {{PLURAL:$1|éi endring|$1 endringar}}",
"rollbacklinkcount-morethan": "rull attende meir enn {{PLURAL:$1|éi endring|$1 endringar}}",
@@ -1879,7 +1908,7 @@
"blocklogpage": "Blokkeringslogg",
"blocklog-showlog": "Denne brukaren har tidlegare vorte blokkert.\nBlokkeringsloggen er sett opp nedanfor, som referanse.",
"blocklog-showsuppresslog": "Denne brukaren har tidlegare vorte blokkert og skjult.\nLoggføringa er synt nedanfor som referanse:",
- "blocklogentry": "Blokkerte «[[$1]]» med opphøyrstid $2 $3",
+ "blocklogentry": "blokkerte [[$1]] med opphøyrstid $2 $3",
"reblock-logentry": "endra blokkeringsinnstillingar for [[$1]] med tida $2 $3",
"blocklogtext": "Dette er ein logg over blokkeringar og oppheving av blokkeringar gjorde.\nIP-adresser som blir automatisk blokkerte er ikkje lista her. Sjå [[Special:BlockList|blokkeringslista]] for alle aktive blokkeringar.",
"unblocklogentry": "oppheva blokkering av «$1»",
@@ -2010,6 +2039,7 @@
"allmessages-prefix": "Filtrer etter prefiks:",
"allmessages-language": "Språk:",
"allmessages-filter-submit": "Gå",
+ "allmessages-filter-translate": "Set om",
"thumbnail-more": "Forstørr",
"filemissing": "Fila manglar",
"thumbnail_error": "Feil ved oppretting av miniatyrbilete: $1",
@@ -2025,6 +2055,8 @@
"import": "Importer sider",
"importinterwiki": "Transwikiimport",
"import-interwiki-text": "Vel ei wiki og ei side å importere. Endringssdatoer og brukarar som har medverka vert bevart. Alle transwiki-importeringar vert vist i [[Special:Log/import|importloggen]].",
+ "import-interwiki-sourcewiki": "Kjeldewiki:",
+ "import-interwiki-sourcepage": "Kjeldeside:",
"import-interwiki-history": "Kopier all historikken for denne sida",
"import-interwiki-templates": "Inkluder alle malar",
"import-interwiki-submit": "Importer",
@@ -2065,18 +2097,15 @@
"import-rootpage-nosubpage": "Namnerommet «$1» til rotsida tillèt ikkje undersider.",
"importlogpage": "Importeringslogg",
"importlogpagetext": "Administrativ import av sider med endringshistorikk frå andre wikiar.",
- "import-logentry-upload": "importerte [[$1]] frå opplasta fil",
"import-logentry-upload-detail": "{{PLURAL:$1|Éin versjon|$1 versjonar}}",
- "import-logentry-interwiki": "overførte $1 mellom wikiar",
"import-logentry-interwiki-detail": "{{PLURAL:$1|Éin versjon|$1 versjonar}} frå $2",
"javascripttest": "JavaScript-utrøyning",
- "javascripttest-title": "Køyrer $1-utrøyningar",
"javascripttest-pagetext-noframework": "Sida er reservert for køyring av JavaScript-utrøyningar.",
"javascripttest-pagetext-unknownframework": "Ukjent utrøyningsrammeverk: «$1».",
+ "javascripttest-pagetext-unknownaction": "Ukjend handling \"$1\".",
"javascripttest-pagetext-frameworks": "Vel eitt av dei fylgjande utrøyningsrammeverka: $1",
"javascripttest-pagetext-skins": "Vel ei drakt som utrøyningane skal køyrast med:",
"javascripttest-qunit-intro": "Sjå [$1 utrøyningsdokumentasjon] på mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit testsuite",
"tooltip-pt-userpage": "Brukarsida di",
"tooltip-pt-anonuserpage": "Brukarsida for ip-adressa du endrar under",
"tooltip-pt-mytalk": "Diskusjonssida di",
@@ -2129,7 +2158,7 @@
"tooltip-ca-nstab-template": "Vis mal",
"tooltip-ca-nstab-help": "Vis hjelpeside",
"tooltip-ca-nstab-category": "Vis kategoriside",
- "tooltip-minoredit": "Merk dette som småplukk",
+ "tooltip-minoredit": "Merk endringa som småplukk",
"tooltip-save": "Lagra endringane dine",
"tooltip-preview": "Førehandsvis endringane dine. Helst brukar du denne funksjonen før du lagrar.",
"tooltip-diff": "Sjå kva endringar du gjorde i teksten",
@@ -2163,7 +2192,7 @@
"spam_reverting": "Attenderullar til siste versjon utan lenkje til $1",
"spam_blanking": "Alle versjonar inneheldt lenkje til $1, tømmer sida",
"spam_deleting": "Alle versjonane inneheldt lenkjer til $1, slettar.",
- "simpleantispam-label": "Antispam-kontroll.\n'''IKKJE''' fyll ut dette feltet!",
+ "simpleantispam-label": "Antispam-kontroll.\n<strong>IKKJE</strong> fyll ut dette feltet!",
"pageinfo-title": "Informasjon om «$1»",
"pageinfo-not-current": "Diverre er det umogeleg å gje ut denne informasjonen for gamle versjonar.",
"pageinfo-header-basic": "Grunnleggjande informasjon",
@@ -2178,7 +2207,6 @@
"pageinfo-robot-policy": "Botindeksering",
"pageinfo-robot-index": "Tillate",
"pageinfo-robot-noindex": "Ikkje tillate",
- "pageinfo-views": "Tal på visningar",
"pageinfo-watchers": "Tal på overvakarar av sida",
"pageinfo-few-watchers": "Færre enn $1 {{PLURAL:$1|som overvakar}}",
"pageinfo-redirects-name": "Tal på omdirigeringar til sida",
@@ -2626,7 +2654,6 @@
"exif-urgency-low": "Låg ($1)",
"exif-urgency-high": "Høg ($1)",
"exif-urgency-other": "Brukardefinert prioritet ($1)",
- "watchlistall2": "alle",
"namespacesall": "alle",
"monthsall": "alle",
"confirmemail": "Stadfest e-postadresse",
@@ -2662,10 +2689,14 @@
"confirm-watch-top": "Legg denne sida til i overvakingslista di?",
"confirm-unwatch-button": "OK",
"confirm-unwatch-top": "Fjern denne sida frå overvakingslista di?",
+ "quotation-marks": "«$1»",
"imgmultipageprev": "← førre sida",
"imgmultipagenext": "neste side →",
"imgmultigo": "Gå!",
"imgmultigoto": "Gå til sida $1",
+ "img-lang-default": "(standardspråk)",
+ "img-lang-info": "Teikn biletet på $1. $2",
+ "img-lang-go": "Gjer det",
"ascending_abbrev": "stigande",
"descending_abbrev": "synkande",
"table_pager_next": "Neste side",
@@ -2680,6 +2711,7 @@
"autosumm-replace": "Erstattar innhaldet på sida med «$1»",
"autoredircomment": "Omdirigerer til [[$1]]",
"autosumm-new": "Oppretta sida med «$1»",
+ "autosumm-newblank": "Oppretta tom side",
"lag-warn-normal": "Endringar som er nyare enn {{PLURAL:$1|sekund|sekund}} er ikkje viste på denne lista.",
"lag-warn-high": "På grunn av stor databaseforseinking, er ikkje endringar som er nyare enn {{PLURAL:$1|sekund|sekund}} viste på denne lista.",
"watchlistedit-normal-title": "Endre overvakingslista",
@@ -2708,11 +2740,10 @@
"watchlisttools-edit": "Vis og endre overvakingslista",
"watchlisttools-raw": "Endre på overvakingslista i råformat",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusjon]])",
- "unknown_extension_tag": "Ukjend tilleggsmerking «$1»",
"duplicate-defaultsort": "Åtvaring: Standardsorteringa «$2» tar over for den tidlegare sorteringa «$1».",
"version": "Versjon",
"version-extensions": "Installerte utvidingar",
- "version-skins": "Draktar",
+ "version-skins": "Installerte drakter",
"version-specialpages": "Spesialsider",
"version-parserhooks": "Parsertillegg",
"version-variables": "Variablar",
@@ -2724,9 +2755,17 @@
"version-parser-function-hooks": "Parserfunksjonstillegg",
"version-hook-name": "Namn på tillegg",
"version-hook-subscribedby": "Brukt av",
- "version-version": "(versjon $1)",
- "version-license": "Lisens",
+ "version-version": "($1)",
+ "version-no-ext-name": "[utan namn]",
+ "version-license": "MediaWiki-lisens",
+ "version-ext-license": "Lisens",
+ "version-ext-colheader-name": "Utviding",
+ "version-skin-colheader-name": "Drakt",
+ "version-ext-colheader-version": "Versjon",
+ "version-ext-colheader-license": "Lisens",
+ "version-ext-colheader-description": "Skildring",
"version-ext-colheader-credits": "Forfattarar",
+ "version-license-title": "Lisens for $1",
"version-poweredby-credits": "Denne wikien er driven av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "andre",
"version-poweredby-translators": "translatewiki.net-omsetjarar",
@@ -2738,6 +2777,9 @@
"version-entrypoints": "URL-ar til inngangspunkt",
"version-entrypoints-header-entrypoint": "Inngangspunkt",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Installerte bibliotek",
+ "version-libraries-library": "Bibliotek",
+ "version-libraries-version": "Versjon",
"redirect": "Omdiriger etter filnamn, brukar- eller versjons-ID",
"redirect-legend": "Omdiriger til ei fil eller ei side",
"redirect-summary": "Denne spesialsida omdirigerer til ei fil (med eit filnamn), ei side (med ein versjons-ID) eller ei brukarside (med eit brukartal).",
@@ -2773,6 +2815,7 @@
"specialpages-group-wiki": "Data og verktøy",
"specialpages-group-redirects": "Omdirigerande spesialsider",
"specialpages-group-spam": "Spamverktøy",
+ "specialpages-group-developer": "Utviklarverktøy",
"blankpage": "Tom side",
"intentionallyblankpage": "Denne sida er tom med vilje",
"external_image_whitelist": " #La denne linja vere som ho er<pre>\n#Skriv fragment av regulære uttrykk (delen som går mellom //) nedanfor\n#Desse vil verte sjekka mot adresser til bilete frå eksterne sider\n#Dei som vert godkjend vil visast, elles vil det verte gjeve ei lenkje til bilete\n#Linjer som byrjar med # vert rekna som kommentarar\n#Det vert ikkje skilt mellom små og store bokstavar\n\n#Skriv alle fragment av regulære uttrykk over denne lina. La denne linja vere som ho er</pre>",
@@ -2785,12 +2828,27 @@
"tags-tag": "Merkenamn",
"tags-display-header": "Utsjånad på endringslister",
"tags-description-header": "Tyding",
+ "tags-source-header": "Kjelde",
"tags-active-header": "Verksamt?",
"tags-hitcount-header": "Merkte endringar",
+ "tags-actions-header": "Handlingar",
"tags-active-yes": "Ja",
"tags-active-no": "Nei",
+ "tags-source-extension": "Definert av ei utviding",
+ "tags-source-manual": "Brukt manuelt av brukarar og robotar",
+ "tags-source-none": "Ikkje lenger i bruk",
"tags-edit": "endra",
+ "tags-delete": "slett",
+ "tags-activate": "slå på",
+ "tags-deactivate": "slå av",
"tags-hitcount": "{{PLURAL:$1|éi endring|$1 endringar}}",
+ "tags-manage-no-permission": "Du har ikkje løyve til å handsama endringsmerke.",
+ "tags-create-heading": "Opprett nytt merke",
+ "tags-create-explanation": "Som standard vert nyoppretta merke gjorde tilgjengelege for brukarar og robotar.",
+ "tags-create-tag-name": "Merkenamn:",
+ "tags-create-reason": "Årsak:",
+ "tags-create-submit": "Opprett",
+ "tags-create-no-name": "Du må oppgje eit merkenamn.",
"comparepages": "Samanlikna sider",
"compare-page1": "Side 1",
"compare-page2": "Side 2",
@@ -2807,7 +2865,7 @@
"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 finst problem med innskrivinga di",
+ "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.",
"htmlform-float-invalid": "Verdien du valde er ikkje eit tal.",
@@ -2856,19 +2914,20 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|endra}} gruppemedlemskap for $3",
"logentry-rights-autopromote": "$1 vart automatisk {{GENDER:$2|forfremja}} frå $4 til $5",
"rightsnone": "(ingen)",
+ "revdelete-summary": "Samandrag",
+ "feedback-adding": "Legg til attendemeldinga til sida...",
+ "feedback-bugcheck": "Bra! No lyt du berre sjå etter om han er ein av dei [$1 kjende feila].",
+ "feedback-bugnew": "Eg såg etter. Rapporter ein ny feil",
"feedback-bugornote": "Er du klar til å skildra ein teknisk vanske i detalj, gjer vel å [$1 rapportera inn ein feil].\nOm ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på sida «[$3 $2]», i lag med brukarnamnet ditt og kva for nettlesar du nyttar.",
- "feedback-subject": "Emne:",
- "feedback-message": "Melding:",
"feedback-cancel": "Bryt av",
- "feedback-submit": "Send attendemelding",
- "feedback-adding": "Legg til attendemeldinga til sida...",
+ "feedback-close": "Gjort",
"feedback-error1": "Feil: Ukjent resultat frå API",
"feedback-error2": "Feil: Brigdinga gjekk ikkje",
"feedback-error3": "Feil: Saknar svar frå API",
+ "feedback-message": "Melding:",
+ "feedback-subject": "Emne:",
+ "feedback-submit": "Send",
"feedback-thanks": "Takk! Attendemeldinga di er lagd inn på sida «[$2 $1]».",
- "feedback-close": "Gjort",
- "feedback-bugcheck": "Bra! No lyt du berre sjå etter om han er ein av dei [$1 kjende feila].",
- "feedback-bugnew": "Eg såg etter. Rapporter ein ny feil",
"searchsuggest-search": "Søk",
"searchsuggest-containing": "som inneheld …",
"api-error-badaccess-groups": "Du har ikkje løyve til å lasta opp filer til wikien.",
@@ -2943,5 +3002,40 @@
"expand_templates_remove_nowiki": "Ikkje vis <nowiki>-merke i resultatet",
"expand_templates_generate_xml": "Vis parsertre som XML",
"expand_templates_generate_rawhtml": "Vis rå HTML",
- "expand_templates_preview": "Førehandsvising"
+ "expand_templates_preview": "Førehandsvising",
+ "pagelang-name": "Side",
+ "pagelang-language": "Språk",
+ "pagelang-use-default": "Bruk standardspråk",
+ "pagelang-select-lang": "Vel språk",
+ "right-pagelang": "Endra sidespråk",
+ "action-pagelang": "endra sidespråket",
+ "log-name-pagelang": "Språkendringslogg",
+ "log-description-pagelang": "Dette er ein logg over endringar i sidespråk.",
+ "mediastatistics-table-mimetype": "MIME-type",
+ "mediastatistics-table-extensions": "Mogelege filendingar",
+ "mediastatistics-table-count": "Tal filer",
+ "mediastatistics-header-unknown": "Ukjende",
+ "mediastatistics-header-audio": "Lyd",
+ "mediastatistics-header-video": "Videoar",
+ "mediastatistics-header-multimedia": "Rike media",
+ "mediastatistics-header-office": "Kontor",
+ "mediastatistics-header-text": "Tekstformat",
+ "mediastatistics-header-executable": "Kan køyrast",
+ "mediastatistics-header-archive": "Komprimerte format",
+ "json-error-syntax": "Syntaksfeil",
+ "headline-anchor-title": "Lenk til denne bolken",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Utvida latin",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symbol",
+ "special-characters-group-greek": "Gresk",
+ "special-characters-group-cyrillic": "Kyrillisk",
+ "special-characters-group-arabic": "Arabisk",
+ "special-characters-group-arabicextended": "Utvida arabisk",
+ "special-characters-group-persian": "Persisk",
+ "special-characters-group-hebrew": "Hebraisk",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalesisk",
+ "special-characters-group-gujarati": "Gujarati"
}
diff --git a/languages/i18n/nov.json b/languages/i18n/nov.json
index c516f05a..7b3241a0 100644
--- a/languages/i18n/nov.json
+++ b/languages/i18n/nov.json
@@ -1,323 +1,314 @@
{
- "@metadata": {
- "authors": [
- "BRG (on nov.wikipedia.org)",
- "Chrisportelli",
- "MF-Warburg",
- "Malafaya",
- "Nov ialiste",
- "Wayne (on nov.wikipedia.org)"
- ]
- },
- "sunday": "sundie",
- "monday": "lundie",
- "tuesday": "mardie",
- "wednesday": "merkurdie",
- "thursday": "jodie",
- "friday": "venerdie",
- "saturday": "saturdie",
- "sun": "sun",
- "mon": "lun",
- "tue": "mar",
- "wed": "mer",
- "thu": "jod",
- "fri": "ven",
- "sat": "sat",
- "january": "januare",
- "february": "februare",
- "march": "marte",
- "april": "aprile",
- "may_long": "maye",
- "june": "june",
- "july": "julie",
- "august": "auguste",
- "september": "septembre",
- "october": "oktobre",
- "november": "novembre",
- "december": "desembre",
- "january-gen": "de januare",
- "february-gen": "de februare",
- "march-gen": "de marte",
- "april-gen": "de aprile",
- "may-gen": "de maye",
- "june-gen": "de june",
- "july-gen": "de julie",
- "august-gen": "de auguste",
- "september-gen": "de septembre",
- "october-gen": "de oktobre",
- "november-gen": "de novembre",
- "december-gen": "de desembre",
- "jan": "jan",
- "feb": "feb",
- "mar": "mar",
- "apr": "apr",
- "may": "maye",
- "jun": "jun",
- "jul": "jul",
- "aug": "aug",
- "sep": "sep",
- "oct": "okt",
- "nov": "nov",
- "dec": "des",
- "pagecategories": "{{PLURAL:$1|Kategorie|Kategories}}",
- "category_header": "Artikles in kategorie \"$1\"",
- "subcategories": "Subkategories",
- "about": "Pri",
- "article": "Pagine de kontenaje",
- "newwindow": "(aperta in novi fenestre)",
- "cancel": "Nihilisa",
- "moredotdotdot": "Plu...",
- "mypage": "Men pagine",
- "mytalk": "Men parla-pagine",
- "anontalk": "Parlo por disi IP",
- "navigation": "Navigatione",
- "and": "&#32;e",
- "qbfind": "Trova",
- "qbedit": "Modifika",
- "qbpageoptions": "Disi pagine",
- "qbmyoptions": "Men pagines",
- "vector-action-delete": "Ekarta",
- "vector-view-edit": "Modifika",
- "vector-view-view": "Lekte",
- "returnto": "Rivada a $1.",
- "tagline": "Fro {{SITENAME}}",
- "help": "Helpo",
- "search": "Sercha",
- "searchbutton": "Sercha",
- "go": "Vada",
- "searcharticle": "Vada",
- "history": "Historie del pagine",
- "history_short": "Historie",
- "printableversion": "Printindi versione",
- "permalink": "Permananti linke",
- "print": "Printa",
- "edit": "Immodifika",
- "editthispage": "Modifika disi pagine",
- "delete": "Ekarta",
- "deletethispage": "Ekarta disi pagine",
- "protect": "Protekte",
- "protectthispage": "Protekte disi pagine",
- "newpage": "Novi pagine",
- "talkpage": "Diskuse disi pagine",
- "talkpagelinktext": "Diskusione",
- "specialpage": "Spesial Pagine",
- "articlepage": "Regarda pagine de kontenaje",
- "talk": "Diskusione",
- "toolbox": "Utensiles",
- "userpage": "Vida useren pagine",
- "imagepage": "Regarda imajal pagine",
- "mediawikipage": "Regarda mesajal pagine",
- "templatepage": "Vida shablonal pagine",
- "categorypage": "Regarda kategorial pagine",
- "otherlanguages": "Altri lingues",
- "lastmodifiedat": "Disi pagine blid lastim modifika: $2 ye $1.",
- "jumptonavigation": "navigatione",
- "jumptosearch": "sercha",
- "aboutsite": "Pri {{SITENAME}}",
- "aboutpage": "Project:Pri",
- "currentevents": "Nuni eventes",
- "currentevents-url": "Project:Nuni eventes",
- "edithelp": "Helpo pri modifiko de pagines",
- "mainpage": "Chefi pagine",
- "mainpage-description": "Chefi pagine",
- "portal": "Li komun chambre",
- "portal-url": "Project:Li komun chambre",
- "badaccess": "Permisione erore",
- "youhavenewmessages": "Vu have $1 ($2).",
- "youhavenewmessagesmulti": "Vu have novi mesajes pri $1",
- "editsection": "modifika",
- "editold": "modifika",
- "editlink": "modifika",
- "restorelink": "{{PLURAL:$1|unu ekartati modifiko|$1 ekartati modifikos}}",
- "red-link-title": "$1 (pagine non exista)",
- "nstab-main": "Artikle",
- "nstab-user": "Useren pagine",
- "nstab-special": "Spesial pagine",
- "nstab-project": "Projetal pagine",
- "nstab-mediawiki": "Mesaje",
- "nstab-template": "Shablone",
- "nstab-help": "Helpo-pagine",
- "nstab-category": "Kategorie",
- "error": "Erore",
- "badtitle": "Mali title",
- "badtitletext": "Li pregati pagine esed non-valid, vakui, o non-korektim linkat inter-lingue o inter-wiki title. Lu povud kontena un o plusi karakteres kel on non pove usa in titles.",
- "logouttext": "'''Vu es nun eksignatat.'''\n\nVu pove kontinua usa {{SITENAME}} anonimim, o vu pove riensignata kom li sami o altri usere.",
- "yourname": "Usere-nome:",
- "yourpassword": "Pasa-vorde:",
- "remembermypassword": "Memora men pasa-vorde (kun kuke) (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "Ensignata",
- "loginprompt": "Vu mus lasa cookies de ensignata en {{SITENAME}}.",
- "userlogin": "Ensignata / krea usere-registre",
- "logout": "Eksignata",
- "userlogout": "Eksignata",
- "notloggedin": "Non ensignatat",
- "nologin": "Ob vu non have registre? '''$1'''.",
- "nologinlink": "Krea usere-registre",
- "gotaccountlink": "Ensignata",
- "loginerror": "Erore de ensignato",
- "loginsuccesstitle": "Ensignato suksesosi",
- "loginsuccess": "'''Vu es nun ensignatat a {{SITENAME}} nomisat \"$1\".'''",
- "mailmypassword": "E-posta men pasa-vorde",
- "acct_creation_throttle_hit": "Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.\nAs a result, visitors using this IP address cannot create any more accounts at the moment.",
- "accountcreated": "Registre kreat",
- "accountcreatedtext": "Li usere-registre por $1 ha bli krea.",
- "bold_sample": "Diki texte",
- "image_sample": "Exemple.jpg",
- "summary": "Resume:",
- "minoredit": "Dise es mikri modifiko",
- "watchthis": "Observa disi pagine",
- "savearticle": "Spara pagine",
- "showpreview": "Montra previdatu",
- "showdiff": "Montra chanjos",
- "loginreqtitle": "Ensignato Postulat",
- "loginreqlink": "ensignata",
- "accmailtitle": "Pasa-vorde sendat.",
- "accmailtext": "Li pasa-vorde por \"$1\" ha bli senda a $2.",
- "yourtext": "Vun texte",
- "currentrev": "Nuni revisione",
- "currentrevisionlink": "Nuni revisione",
- "histfirst": "Maxim frui",
- "histlast": "Maxim resenti",
- "history-feed-title": "Historie de revisiones",
- "history-feed-description": "Historie de revisiones de disi pagine sur li wiki",
- "history-feed-empty": "Li petit pagine non exista.\nForsan lu ha bli ekarta fro li wiki, o rinomat.\nProba [[Special:Search|sercho sur li wiki]] por relatet pagines.",
- "lineno": "Linie $1:",
- "compareselectedversions": "Kompara selektet versiones",
- "searchresults": "Resultes de sercho",
- "prevn": "lasti {{PLURAL:$1|$1}}",
- "nextn": "sekuenti {{PLURAL:$1|$1}}",
- "viewprevnext": "Vida ($1 {{int:pipe-separator}} $2) ($3).",
- "search-result-size": "$1 ({{PLURAL:$2|1 vorde|$2 vordes}})",
- "showingresults": "Montrant subu {{PLURAL:$1|'''1''' resulte|'''$1''' resultes}} amaxim komensant fro #'''$2'''.",
- "showingresultsnum": "Montrant subu {{PLURAL:$3|'''1''' result|'''$3''' results}} komensant fro #'''$2'''.",
- "preferences": "Preferos",
- "mypreferences": "Men preferos",
- "prefs-rc": "Resenti chanjos",
- "searchresultshead": "Sercha",
- "timezoneregion-africa": "Afrika",
- "nchanges": "$1 {{PLURAL:$1|chanjo|chanjos}}",
- "recentchanges": "Resenti chanjos",
- "rcshowhideminor": "$1 minori modifikos",
- "rcshowhideanons": "$1 anonimi useres",
- "rcshowhidemine": "$1 men modifikos",
- "rclinks": "Montra lasti $1 chanjes in lasti $2 dies<br />$3",
- "hist": "hist",
- "hide": "Kasha",
- "show": "Montra",
- "minoreditletter": "m",
- "newpageletter": "N",
- "recentchangeslinked": "Afini chanjos",
- "recentchangeslinked-feed": "Afini chanjos",
- "recentchangeslinked-toolbox": "Afini chanjos",
- "upload": "Enporta",
- "uploadnologin": "Non ensignatat",
- "filedesc": "Resume",
- "fileuploadsummary": "Resume:",
- "watchthisupload": "Observa disi pagine",
- "listfiles_search_for": "Sercha imaje nome:",
- "listfiles_name": "Nome",
- "listfiles_user": "Usere",
- "listfiles_size": "Grandeso (bites)",
- "listfiles_description": "Deskriptione",
- "filehist-user": "Usere",
- "imagelinks": "Linkes",
- "randompage": "Arbitriari pagine",
- "brokenredirects": "Rupteti ri-adresos",
- "brokenredirectstext": "Li sekuenti ri-adresos linka a non-existanti pagines:",
- "brokenredirects-edit": "editja",
- "fewestrevisions": "Artikles kun minim multi revisiones",
- "ncategories": "$1 {{PLURAL:$1|kategorie|kategories}}",
- "lonelypages": "Pagines kel non bli kupla",
- "lonelypagestext": "Disi pagines non es kuplat fro altri pagines in {{SITENAME}}.",
- "uncategorizedpages": "Pagines sin kategorie",
- "uncategorizedcategories": "Kategories sin kategorie",
- "uncategorizedimages": "Imajes sin kategorie",
- "popularpages": "Popular pagines",
- "mostcategories": "Artikles kun maxim multi kategories",
- "mostrevisions": "Artikles kun maxim multi revisiones",
- "shortpages": "Kurti pagines",
- "longpages": "Longi pagines",
- "deadendpages": "Pagines sin kuplures",
- "listusers": "Liste de useres",
- "newpages": "Novi pagines",
- "ancientpages": "Maxim ansieni pagines",
- "move": "Mova",
- "movethispage": "Mova (rinomisa) disi pagine",
- "booksources": "Libral fontes",
- "booksources-search-legend": "Sercha libral fontes",
- "booksources-go": "Vada",
- "specialloguserlabel": "Usere:",
- "allpages": "Omni pagines",
- "alphaindexline": "$1 a $2",
- "allarticles": "Omni artikles",
- "allinnamespace": "Omni pagines ($1 nome-spatie)",
- "allpagessubmit": "Vada",
- "categories": "Kategories",
- "categoriespagetext": "Li sekuenti {{PLURAL:$1|kategorie|kategories}} exista in li wiki.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
- "linksearch-ok": "Sercha",
- "watchlist": "Men liste de observos",
- "mywatchlist": "Men liste de observos",
- "nowatchlist": "Vu have nuli koses in vun liste de observos.",
- "watchnologin": "Non ensignatat",
- "addedwatchtext": "Li pagine \"[[:$1]]\" ha bli adi a vun [[Special:Watchlist|observa-liste]].\nFuturi chanjos a disi pagine e lun asosiati Parla-pagine sal bli lista tilok, e li pagine sal apari '''diki''' in li [[Special:RecentChanges|liste de resenti chanjos]] por ke on trova lu plu fasilim.\n\nSi vu voli plu tardim ekarta li pagine fro vun observa-liste, klikta \"Desobserva\" in li lateral kolumne.",
- "watch": "Observa",
- "watchthispage": "Observa disi pagine",
- "unwatch": "Desobserva",
- "unwatchthispage": "Des-observa disi pagine",
- "enotif_lastvisited": "Regarda $1 por vida omni chanjes depos vun lasti visite.",
- "changed": "chanjati",
- "confirm": "Konfirma",
- "excontent": "kontenaje esed: '$1'",
- "excontentauthor": "kontenaje esed: '$1' (e li soli kontribuere esed '[[Special:Contributions/$2|$2]]')",
- "exblank": "pagine esed vakui",
- "actioncomplete": "Akto kompleti",
- "dellogpage": "Loge de ekartos",
- "dellogpagetext": "Subu es liste del maxim resenti ekartos.",
- "deletionlog": "registre de ekartos",
- "deletecomment": "Resone:",
- "revertpage": "Riverted modifikos da [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]); restaurad lasti versione da [[User:$1|$1]]",
- "prot_1movedto2": "[[$1]] movat a [[$2]]",
- "protect-legend": "Konfirma protektione",
- "protect-level-sysop": "Sisopes nur",
- "blanknamespace": "(Chefi)",
- "contributions": "Useren kontributiones",
- "mycontris": "Men kontributiones",
- "sp-contributions-newbies": "Montra kontributiones nur de novi useres",
- "sp-contributions-talk": "Diskusione",
- "sp-contributions-search": "Sercha kontributiones",
- "sp-contributions-submit": "Sercha",
- "whatlinkshere": "Tum kel kupla hir",
- "whatlinkshere-page": "Pagine:",
- "whatlinkshere-links": "← linkes",
- "ipbreason": "Resone:",
- "badipaddress": "Non-valid IP adrese",
- "contribslink": "Kontributiones",
- "movearticle": "Mova pagine",
- "move-watch": "Observa disi pagine",
- "movereason": "Resone:",
- "delete_and_move": "Ekarta e mova",
- "delete_and_move_confirm": "Yes, ekarta li pagine",
- "delete_and_move_reason": "Ekartat por fa spatie por movo \"[[$1]]\"",
- "allmessages": "Sisteme mesajes",
- "allmessagesname": "Nome",
- "allmessagesdefault": "Non-spesifikati texte",
- "allmessagescurrent": "Nuni texte",
- "allmessagestext": "Dise es liste de sistemen mesajes obtenabli in li MediaWiki nomal spatie.",
- "tooltip-pt-mytalk": "Vun parla-pagine",
- "tooltip-pt-preferences": "Men preferos",
- "tooltip-pt-logout": "Eksignata",
- "tooltip-p-logo": "Chefi pagine",
- "ilsubmit": "Sercha",
- "bydate": "segun date",
- "exif-imagewidth": "Larjeso",
- "exif-imagelength": "Alteso",
- "exif-imagedescription": "Title de imaje",
- "exif-imageuniqueid": "Unik imaje ID",
- "autosumm-replace": "Remplasant pagine kun '$1'",
- "autoredircomment": "Ri-adresant a [[$1]]",
- "autosumm-new": "Novi pagine: $1",
- "version": "Versione",
- "version-specialpages": "Spesial pagines",
- "version-software-version": "Versione",
- "specialpages": "Spesial pagines"
+ "@metadata": {
+ "authors": [
+ "BRG (on nov.wikipedia.org)",
+ "Chrisportelli",
+ "MF-Warburg",
+ "Malafaya",
+ "Nov ialiste",
+ "Wayne (on nov.wikipedia.org)"
+ ]
+ },
+ "sunday": "sundie",
+ "monday": "lundie",
+ "tuesday": "mardie",
+ "wednesday": "merkurdie",
+ "thursday": "jodie",
+ "friday": "venerdie",
+ "saturday": "saturdie",
+ "sun": "sun",
+ "mon": "lun",
+ "tue": "mar",
+ "wed": "mer",
+ "thu": "jod",
+ "fri": "ven",
+ "sat": "sat",
+ "january": "januare",
+ "february": "februare",
+ "march": "marte",
+ "april": "aprile",
+ "may_long": "maye",
+ "june": "june",
+ "july": "julie",
+ "august": "auguste",
+ "september": "septembre",
+ "october": "oktobre",
+ "november": "novembre",
+ "december": "desembre",
+ "january-gen": "de januare",
+ "february-gen": "de februare",
+ "march-gen": "de marte",
+ "april-gen": "de aprile",
+ "may-gen": "de maye",
+ "june-gen": "de june",
+ "july-gen": "de julie",
+ "august-gen": "de auguste",
+ "september-gen": "de septembre",
+ "october-gen": "de oktobre",
+ "november-gen": "de novembre",
+ "december-gen": "de desembre",
+ "jan": "jan",
+ "feb": "feb",
+ "mar": "mar",
+ "apr": "apr",
+ "may": "maye",
+ "jun": "jun",
+ "jul": "jul",
+ "aug": "aug",
+ "sep": "sep",
+ "oct": "okt",
+ "nov": "nov",
+ "dec": "des",
+ "pagecategories": "{{PLURAL:$1|Kategorie|Kategories}}",
+ "category_header": "Artikles in kategorie \"$1\"",
+ "subcategories": "Subkategories",
+ "about": "Pri",
+ "article": "Pagine de kontenaje",
+ "newwindow": "(aperta in novi fenestre)",
+ "cancel": "Nihilisa",
+ "moredotdotdot": "Plu...",
+ "mypage": "Men pagine",
+ "mytalk": "Men parla-pagine",
+ "anontalk": "Parlo por disi IP",
+ "navigation": "Navigatione",
+ "and": "&#32;e",
+ "qbfind": "Trova",
+ "qbedit": "Modifika",
+ "qbpageoptions": "Disi pagine",
+ "qbmyoptions": "Men pagines",
+ "returnto": "Rivada a $1.",
+ "tagline": "Fro {{SITENAME}}",
+ "help": "Helpo",
+ "search": "Sercha",
+ "searchbutton": "Sercha",
+ "go": "Vada",
+ "searcharticle": "Vada",
+ "history": "Historie del pagine",
+ "history_short": "Historie",
+ "printableversion": "Printindi versione",
+ "permalink": "Permananti linke",
+ "print": "Printa",
+ "edit": "Immodifika",
+ "editthispage": "Modifika disi pagine",
+ "delete": "Ekarta",
+ "deletethispage": "Ekarta disi pagine",
+ "protect": "Protekte",
+ "protectthispage": "Protekte disi pagine",
+ "newpage": "Novi pagine",
+ "talkpage": "Diskuse disi pagine",
+ "talkpagelinktext": "Diskusione",
+ "specialpage": "Spesial Pagine",
+ "articlepage": "Regarda pagine de kontenaje",
+ "talk": "Diskusione",
+ "toolbox": "Utensiles",
+ "userpage": "Vida useren pagine",
+ "imagepage": "Regarda imajal pagine",
+ "mediawikipage": "Regarda mesajal pagine",
+ "templatepage": "Vida shablonal pagine",
+ "categorypage": "Regarda kategorial pagine",
+ "otherlanguages": "Altri lingues",
+ "lastmodifiedat": "Disi pagine blid lastim modifika: $2 ye $1.",
+ "jumptonavigation": "navigatione",
+ "jumptosearch": "sercha",
+ "aboutsite": "Pri {{SITENAME}}",
+ "aboutpage": "Project:Pri",
+ "currentevents": "Nuni eventes",
+ "currentevents-url": "Project:Nuni eventes",
+ "edithelp": "Helpo pri modifiko de pagines",
+ "mainpage": "Chefi pagine",
+ "mainpage-description": "Chefi pagine",
+ "portal": "Li komun chambre",
+ "portal-url": "Project:Li komun chambre",
+ "badaccess": "Permisione erore",
+ "youhavenewmessages": "Vu have $1 ($2).",
+ "youhavenewmessagesmulti": "Vu have novi mesajes pri $1",
+ "editsection": "modifika",
+ "editold": "modifika",
+ "editlink": "modifika",
+ "restorelink": "{{PLURAL:$1|unu ekartati modifiko|$1 ekartati modifikos}}",
+ "red-link-title": "$1 (pagine non exista)",
+ "nstab-main": "Artikle",
+ "nstab-user": "Useren pagine",
+ "nstab-special": "Spesial pagine",
+ "nstab-project": "Projetal pagine",
+ "nstab-mediawiki": "Mesaje",
+ "nstab-template": "Shablone",
+ "nstab-help": "Helpo-pagine",
+ "nstab-category": "Kategorie",
+ "error": "Erore",
+ "badtitle": "Mali title",
+ "badtitletext": "Li pregati pagine esed non-valid, vakui, o non-korektim linkat inter-lingue o inter-wiki title. Lu povud kontena un o plusi karakteres kel on non pove usa in titles.",
+ "logouttext": "'''Vu es nun eksignatat.'''\n\nVu pove kontinua usa {{SITENAME}} anonimim, o vu pove riensignata kom li sami o altri usere.",
+ "yourname": "Usere-nome:",
+ "yourpassword": "Pasa-vorde:",
+ "remembermypassword": "Memora men pasa-vorde (kun kuke) (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "Ensignata",
+ "userlogin": "Ensignata / krea usere-registre",
+ "logout": "Eksignata",
+ "userlogout": "Eksignata",
+ "notloggedin": "Non ensignatat",
+ "nologin": "Ob vu non have registre? '''$1'''.",
+ "nologinlink": "Krea usere-registre",
+ "gotaccountlink": "Ensignata",
+ "loginerror": "Erore de ensignato",
+ "loginsuccesstitle": "Ensignato suksesosi",
+ "loginsuccess": "'''Vu es nun ensignatat a {{SITENAME}} nomisat \"$1\".'''",
+ "mailmypassword": "E-posta men pasa-vorde",
+ "acct_creation_throttle_hit": "Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last day, which is the maximum allowed in this time period.\nAs a result, visitors using this IP address cannot create any more accounts at the moment.",
+ "accountcreated": "Registre kreat",
+ "accountcreatedtext": "Li usere-registre por $1 ha bli krea.",
+ "bold_sample": "Diki texte",
+ "image_sample": "Exemple.jpg",
+ "summary": "Resume:",
+ "minoredit": "Dise es mikri modifiko",
+ "watchthis": "Observa disi pagine",
+ "savearticle": "Spara pagine",
+ "showpreview": "Montra previdatu",
+ "showdiff": "Montra chanjos",
+ "loginreqtitle": "Ensignato Postulat",
+ "loginreqlink": "ensignata",
+ "accmailtitle": "Pasa-vorde sendat.",
+ "accmailtext": "Li pasa-vorde por \"$1\" ha bli senda a $2.",
+ "yourtext": "Vun texte",
+ "currentrev": "Nuni revisione",
+ "currentrevisionlink": "Nuni revisione",
+ "histfirst": "Maxim frui",
+ "histlast": "Maxim resenti",
+ "history-feed-title": "Historie de revisiones",
+ "history-feed-description": "Historie de revisiones de disi pagine sur li wiki",
+ "history-feed-empty": "Li petit pagine non exista.\nForsan lu ha bli ekarta fro li wiki, o rinomat.\nProba [[Special:Search|sercho sur li wiki]] por relatet pagines.",
+ "lineno": "Linie $1:",
+ "compareselectedversions": "Kompara selektet versiones",
+ "searchresults": "Resultes de sercho",
+ "prevn": "lasti {{PLURAL:$1|$1}}",
+ "nextn": "sekuenti {{PLURAL:$1|$1}}",
+ "viewprevnext": "Vida ($1 {{int:pipe-separator}} $2) ($3).",
+ "search-result-size": "$1 ({{PLURAL:$2|1 vorde|$2 vordes}})",
+ "showingresults": "Montrant subu {{PLURAL:$1|'''1''' resulte|'''$1''' resultes}} amaxim komensant fro #'''$2'''.",
+ "preferences": "Preferos",
+ "mypreferences": "Men preferos",
+ "prefs-rc": "Resenti chanjos",
+ "searchresultshead": "Sercha",
+ "timezoneregion-africa": "Afrika",
+ "nchanges": "$1 {{PLURAL:$1|chanjo|chanjos}}",
+ "recentchanges": "Resenti chanjos",
+ "rcshowhideminor": "$1 minori modifikos",
+ "rcshowhideanons": "$1 anonimi useres",
+ "rcshowhidemine": "$1 men modifikos",
+ "rclinks": "Montra lasti $1 chanjes in lasti $2 dies<br />$3",
+ "hist": "hist",
+ "hide": "Kasha",
+ "show": "Montra",
+ "minoreditletter": "m",
+ "newpageletter": "N",
+ "recentchangeslinked": "Afini chanjos",
+ "recentchangeslinked-feed": "Afini chanjos",
+ "recentchangeslinked-toolbox": "Afini chanjos",
+ "upload": "Enporta",
+ "uploadnologin": "Non ensignatat",
+ "filedesc": "Resume",
+ "fileuploadsummary": "Resume:",
+ "watchthisupload": "Observa disi pagine",
+ "listfiles_search_for": "Sercha imaje nome:",
+ "listfiles_name": "Nome",
+ "listfiles_user": "Usere",
+ "listfiles_size": "Grandeso (bites)",
+ "listfiles_description": "Deskriptione",
+ "filehist-user": "Usere",
+ "imagelinks": "Linkes",
+ "randompage": "Arbitriari pagine",
+ "brokenredirects": "Rupteti ri-adresos",
+ "brokenredirectstext": "Li sekuenti ri-adresos linka a non-existanti pagines:",
+ "brokenredirects-edit": "editja",
+ "fewestrevisions": "Artikles kun minim multi revisiones",
+ "ncategories": "$1 {{PLURAL:$1|kategorie|kategories}}",
+ "lonelypages": "Pagines kel non bli kupla",
+ "lonelypagestext": "Disi pagines non es kuplat fro altri pagines in {{SITENAME}}.",
+ "uncategorizedpages": "Pagines sin kategorie",
+ "uncategorizedcategories": "Kategories sin kategorie",
+ "uncategorizedimages": "Imajes sin kategorie",
+ "mostcategories": "Artikles kun maxim multi kategories",
+ "mostrevisions": "Artikles kun maxim multi revisiones",
+ "shortpages": "Kurti pagines",
+ "longpages": "Longi pagines",
+ "deadendpages": "Pagines sin kuplures",
+ "listusers": "Liste de useres",
+ "newpages": "Novi pagines",
+ "ancientpages": "Maxim ansieni pagines",
+ "move": "Mova",
+ "movethispage": "Mova (rinomisa) disi pagine",
+ "booksources": "Libral fontes",
+ "booksources-search-legend": "Sercha libral fontes",
+ "specialloguserlabel": "Usere:",
+ "allpages": "Omni pagines",
+ "allarticles": "Omni artikles",
+ "allinnamespace": "Omni pagines ($1 nome-spatie)",
+ "allpagessubmit": "Vada",
+ "categories": "Kategories",
+ "categoriespagetext": "Li sekuenti {{PLURAL:$1|kategorie|kategories}} exista in li wiki.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+ "linksearch-ok": "Sercha",
+ "watchlist": "Men liste de observos",
+ "mywatchlist": "Men liste de observos",
+ "nowatchlist": "Vu have nuli koses in vun liste de observos.",
+ "watchnologin": "Non ensignatat",
+ "addedwatchtext": "Li pagine \"[[:$1]]\" ha bli adi a vun [[Special:Watchlist|observa-liste]].\nFuturi chanjos a disi pagine e lun asosiati Parla-pagine sal bli lista tilok, e li pagine sal apari '''diki''' in li [[Special:RecentChanges|liste de resenti chanjos]] por ke on trova lu plu fasilim.\n\nSi vu voli plu tardim ekarta li pagine fro vun observa-liste, klikta \"Desobserva\" in li lateral kolumne.",
+ "watch": "Observa",
+ "watchthispage": "Observa disi pagine",
+ "unwatch": "Desobserva",
+ "unwatchthispage": "Des-observa disi pagine",
+ "enotif_lastvisited": "Regarda $1 por vida omni chanjes depos vun lasti visite.",
+ "changed": "chanjati",
+ "confirm": "Konfirma",
+ "excontent": "kontenaje esed: '$1'",
+ "excontentauthor": "kontenaje esed: '$1' (e li soli kontribuere esed '[[Special:Contributions/$2|$2]]')",
+ "actioncomplete": "Akto kompleti",
+ "dellogpage": "Loge de ekartos",
+ "dellogpagetext": "Subu es liste del maxim resenti ekartos.",
+ "deletionlog": "registre de ekartos",
+ "deletecomment": "Resone:",
+ "revertpage": "Riverted modifikos da [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]); restaurad lasti versione da [[User:$1|$1]]",
+ "prot_1movedto2": "[[$1]] movat a [[$2]]",
+ "protect-legend": "Konfirma protektione",
+ "protect-level-sysop": "Sisopes nur",
+ "blanknamespace": "(Chefi)",
+ "contributions": "Useren kontributiones",
+ "mycontris": "Men kontributiones",
+ "sp-contributions-newbies": "Montra kontributiones nur de novi useres",
+ "sp-contributions-talk": "Diskusione",
+ "sp-contributions-search": "Sercha kontributiones",
+ "sp-contributions-submit": "Sercha",
+ "whatlinkshere": "Tum kel kupla hir",
+ "whatlinkshere-page": "Pagine:",
+ "whatlinkshere-links": "← linkes",
+ "ipbreason": "Resone:",
+ "badipaddress": "Non-valid IP adrese",
+ "contribslink": "Kontributiones",
+ "movearticle": "Mova pagine",
+ "move-watch": "Observa disi pagine",
+ "movereason": "Resone:",
+ "delete_and_move": "Ekarta e mova",
+ "delete_and_move_confirm": "Yes, ekarta li pagine",
+ "delete_and_move_reason": "Ekartat por fa spatie por movo \"[[$1]]\"",
+ "allmessages": "Sisteme mesajes",
+ "allmessagesname": "Nome",
+ "allmessagesdefault": "Non-spesifikati texte",
+ "allmessagescurrent": "Nuni texte",
+ "allmessagestext": "Dise es liste de sistemen mesajes obtenabli in li MediaWiki nomal spatie.",
+ "tooltip-pt-mytalk": "Vun parla-pagine",
+ "tooltip-pt-preferences": "Men preferos",
+ "tooltip-pt-logout": "Eksignata",
+ "tooltip-p-logo": "Chefi pagine",
+ "ilsubmit": "Sercha",
+ "bydate": "segun date",
+ "exif-imagewidth": "Larjeso",
+ "exif-imagelength": "Alteso",
+ "exif-imagedescription": "Title de imaje",
+ "exif-imageuniqueid": "Unik imaje ID",
+ "autosumm-replace": "Remplasant pagine kun '$1'",
+ "autoredircomment": "Ri-adresant a [[$1]]",
+ "autosumm-new": "Novi pagine: $1",
+ "version": "Versione",
+ "version-specialpages": "Spesial pagines",
+ "version-software-version": "Versione",
+ "specialpages": "Spesial pagines"
}
diff --git a/languages/i18n/nso.json b/languages/i18n/nso.json
index fa563b26..449d7a17 100644
--- a/languages/i18n/nso.json
+++ b/languages/i18n/nso.json
@@ -9,9 +9,9 @@
},
"tog-underline": "Tsenya mothalafase go dihlomaganyo:",
"tog-hideminor": "Fihla diphetogo tše nnyenyane",
- "tog-showtoolbar": "Bontšha ''toolbar'' yago fetola (JavaScript)",
- "tog-editondblclick": "Fetola matlakala ka go thathapa gabedi (JavaScript)",
- "tog-editsectiononrightclick": "Dumella go fetola sekgao ka thathapa ka lagoja thaetlele ya sekgao (JavaScript)",
+ "tog-showtoolbar": "Bontšha ''toolbar'' yago fetola",
+ "tog-editondblclick": "Fetola matlakala ka go thathapa gabedi",
+ "tog-editsectiononrightclick": "Dumella go fetola sekgao ka thathapa ka lagoja thaetlele ya sekgao",
"tog-watchcreations": "Tsenya matlaka a mafsa ao ke a ngwalago go lenano laka la ditlhapetšo",
"tog-watchdefault": "Tsenya matlaka ao ke a fetolago go lenano laka la ditlhapetšo",
"tog-watchmoves": "Tsenya matlaka ao ke a hudušago go lenano laka la ditlhapetšo",
@@ -97,8 +97,8 @@
"newwindow": "(e bula lefastere le lempsha)",
"cancel": "Khansela",
"moredotdotdot": "Tše dingwe...",
- "mypage": "Letlakala la ka",
- "mytalk": "Dipolelo tša ka",
+ "mypage": "Letlakala",
+ "mytalk": "Bolela",
"anontalk": "Poledišano ya IP ye",
"navigation": "Tšwelotšo",
"and": "&#32;le",
@@ -142,7 +142,7 @@
"articlepage": "Nyakoretša letlakala la mateng",
"talk": "Poledišano",
"views": "Dinyakorêtšo",
- "toolbox": "Lepokisi la dithulusu",
+ "toolbox": "Dithulusu",
"userpage": "Nyakorela letlakala la mošomiši",
"projectpage": "Nyakoretša letlakala la tirotherwa",
"imagepage": "Nyakoretša letlakala la ''file''",
@@ -184,7 +184,7 @@
"versionrequiredtext": "Version $1 ya MediaWiki ea hlokega go šomiša letlakala le. Lebelela [[Special:Version|letlakala la version]].",
"retrievedfrom": "Le tšwa go \"$1\"",
"youhavenewmessages": "O na le $1 ($2).",
- "newmessagesdifflinkplural": "l{{PLURAL:$1|Phetogo tša|Diphetogo ya}}go feta",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|Phetogo tša|Diphetogo ya}} go feta",
"youhavenewmessagesmulti": "O nale melaetša ye mefsa go $1",
"editsection": "lokiša",
"editold": "fetola",
@@ -247,7 +247,7 @@
"gotaccount": "O šetše o nale tšhupaleloko? '''$1'''.",
"gotaccountlink": "Tsena",
"userlogin-resetlink": "O lebetše dintlha tšago tsena?",
- "createaccountmail": "ka e-mail",
+ "createaccountmail": "Re šomiše ditlhaka-tša-siphiri tša sebakanyana tšeo re di kgethilego re di romele ka e-mail",
"createaccountreason": "Lebaka:",
"badretype": "Ditlhaka-tša-siphiri tše o di šomišitšego ga di swane.",
"noname": "Gawa fana ka leina la mošomiši la go loka.",
@@ -259,26 +259,26 @@
"wrongpassword": "O loketše ditlhaka-tša-siphiri tšeo e sego tšona. Ka kgopelo, leka gape.",
"wrongpasswordempty": "Ga wa lokela ditlhaka-tša-siphiri. Ka kgopelo, leka gape.",
"passwordtooshort": "Ditlhaka-tša-siphiri tša gago ga tša dumelega goba di kopana.\nGo nyakega gore e be le {{PLURAL:$1|tlhaka ye tee|$1 ya ditlhaka}} gape e seke ya swana le leina la gago (''username'').",
- "mailmypassword": "Romela ditlhaka-tša-siphiri tše mpšha ka e-mail",
+ "mailmypassword": "Fetola ditlhaka-tša-siphiri",
"passwordremindertitle": "''Password'' ye mphsa ya nakonyana go {{SITENAME}}",
- "passwordremindertext": "Motho yo mongwe (goba wena, gotšwa IP atrese $1) o\nkgopetše gore re moromele Ditlhaka-tša-siphiri tše mfsa tša {{SITENAME}} ($4).\n\nDitlhaka-tša-siphiri tša mošomiši \"$2\" go tloga bjale ke \"$3\".\nEya go {{SITENAME}} o e fetole.\n\nGa eba motho yo mongwe esego wena o dirile kgopelo ye, goba o gopola Ditlhaka-tša-siphiri gomme ga o sa\nhloka gore e fetolwe, hlokomologa molaetša wo, o tšwele pele o šumiše Ditlhaka-tša-siphiri tša kgale.",
+ "passwordremindertext": "Motho yo mongwe (goba wena, gotšwa IP atrese $1) o\nkgopetše gore re moromele Ditlhaka-tša-siphiri tše mfsa tša {{SITENAME}} ($4).\n\nDitlhaka-tša-siphiri tša mošomiši \"$2\" go tloga bjale ke \"$3\".\n\nDitlhaka-tša-siphiri di tla šoma {{PLURAL:$5|letšatši|matšatši a $5}}.\n\nGa eba motho yo mongwe esego wena o dirile kgopelo ye, goba o gopola Ditlhaka-tša-siphiri gomme ga o sa\nhloka gore e fetolwe, hlokomologa molaetša wo, o tšwele pele o šumiše Ditlhaka-tša-siphiri tša kgale.",
"noemail": "Ga gona e-mail atrese ya mošomiši \"$1\".",
"passwordsent": "\nDihlaka tša siphiri (''password'') tše mphsa di rometšwe go e-mail atrese ya \"$1\".\nRe kgopela gore o tsene ge fetša go e hwetša.",
"blocked-mailpassword": "IP atrese ya gago e thibetšwe go dira diphetogo, ka fao ga wa dumellwa\ngo šomiša thulusu ya go hwetša Ditlhaka-tša-siphiri go thibela go hlapanya.",
"eauthentsent": "Molaetša wa go tiišetša o rometšwe go e-mail atrese.\n\nPele re romela melaetša ye mengwe go atrese ye, o kgopelwa go latela ditaelo tšeo dilego molaetšeng go tiišetša gore atrese ke ya gago.",
- "throttled-mailpassword": "Kgopotšo ya ditlhaka-tša-siphiri e rometšwe {{PLURAL:$1|iring|diiring tše $1}} tša gofeta.\nGo thibela go hlapanya/kgobošo, kgopotšo e tee ka {{PLURAL:$1|iri|diiri tše $1}} e tla romellwa.",
+ "throttled-mailpassword": "Kgopelo ya go fetola ditlhaka-tša-siphiri e rometšwe {{PLURAL:$1|iring|diiring tše $1}} tša gofeta.\nGo thibela go hlapanya/kgobošo, kgopotšo e tee ka {{PLURAL:$1|iri|diiri tše $1}} e tla romellwa.",
"mailerror": "Gobile le phošo go romeleng molaetša : $1",
- "acct_creation_throttle_hit": "Ka maswabi, o tlhomile {{PLURAL:$1|tšhupaleloko|$1 tša ditšhupaleloko}}.\nGa wa dumelwa go tlhoma tše dingwe.",
- "emailauthenticated": "E-mail atrese ya gago e kgonthišitšwe ka $2, $3.",
+ "acct_creation_throttle_hit": "Ka maswabi, IP Aterese ya gago e tlhomile {{PLURAL:$1|tšhupaleloko|$1 tša ditšhupaleloko}} e se kgale.\nGa wa dumelwa go tlhoma tše dingwe ka se sebaka.",
+ "emailauthenticated": "E-mail atrese ya gago e kgonthišitšwe ka $2 $3.",
"accountcreated": "Tšhupaleloko (Account) e tlhodilwe",
- "accountcreatedtext": "Tšhupaleloko (account) ya modiri $1 e tlhodilwe.",
+ "accountcreatedtext": "Tšhupaleloko (account) ya modiri [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) e tlhodilwe.",
"loginlanguagelabel": "Polelo: $1",
"changepassword": "Fetola ditlhaka-tša-siphiri",
"resetpass_text": "<!-- Tsenya ditlhaka mo -->",
"oldpassword": "Ditlhaka-tša-siphiri tša kgale:",
"newpassword": "Ditlhaka-tša-siphiri tše mpsha:",
"retypenew": "Tlanya ditlhaka tše mphsa tša siphiri gape:",
- "changepassword-success": "Ditlhaka tša siphiri di fetotšwe ka katlego! Bjale o kgona go tsena...",
+ "changepassword-success": "Ditlhaka tša siphiri di fetotšwe ka katlego!",
"bold_sample": "Mongwalo wa '''Bold'''",
"bold_tip": "Ditlhaka tše Bold",
"italic_sample": "Ditlhaka tše Italic",
@@ -305,7 +305,7 @@
"preview": "Lebelela",
"showpreview": "Laetša sebopego sa letlaka",
"showdiff": "Laetša diphetogo",
- "anoneditwarning": "'''Temošo''' Gawa ''tsena'', IP ya gago e tla šumišwa go histori ya diphetogo tša letlakala",
+ "anoneditwarning": "<strong>Temošo:</strong> Gawa ''tsena'', IP ya gago e tla šumišwa go histori ya diphetogo tša letlakala. Ge o ka <strong>[$1 tsena]</strong> goba wa <strong>[$2 tlhoma tšhupaleloko]</strong>,diphetogo tša gago di tla šumiša leina la gago.",
"summary-preview": "Lebelela kakaretšo:",
"blockedtitle": "Mošomiši o thibilwe",
"blockedtext": "'''Leina la gago la mošomiši goba IP atrese e thibilwe.'''\n\nO thibilwe ke $1. Makaba a go thiba ke ''$2''.\n\n* Go thoma gago thiba: $8\n* Fetatšatši yago thiba: $6\n* Mothibiwa: $7\n\nO ka leka go boledišana le $1 goba [[{{MediaWiki:Grouppage-sysop}}|molaudi]] ka go thibiwa go.\nO ka se kgone go šumiša thulusu ya 'romela mošomiši molaetša' ka ntle gage o loketše e-mail ya gago go\n[[Special:Preferences|dikgatlhegelo]] gape ge o sa thibelwa go e šomiša.\nIP atrese ya gago ke $3, ge ID ya go thiba ele #$5. Ka kgopelo šumiša ID le IP go dipoledišano ka moka tšeo dilego mabapi le go go thiba.",
@@ -318,7 +318,7 @@
"loginreqlink": "tsena",
"loginreqpagetext": "O swanela ke go $1 go nyakorela matlakala a mangwe.",
"accmailtitle": "Ditlhaka tša siphiri di rometšwe.",
- "accmailtext": "Ditlhaka-tša-siphiri tša \"$1\" di rometšwe go $2.",
+ "accmailtext": "Ditlhaka-tša-siphiri tša [[User talk:$1|$1]] di rometšwe go $2. Di ka fetolwa go letlaka la <em>[[Special:ChangePassword|go fetola ditlhaka-tša-siphiri ]]</em> ge o tsena.",
"newarticle": "(mpsha)",
"newarticletext": "O latetše hlomaganyo go letlakala leo le sego gona ka se sebaka.\nGo tlhola letlakala, thoma go ngwalo lepokising le letelago\n(lebelela [$1 letlakala la thušo] go hwetša šedi).\nGa eba o le fa ka phošo, o ka boela morago ka go šumiša konopo ya '''back''' go ''browser'' ya gago.",
"noarticletext": "Ga gona ditlhaka letlakaleng le, oka [[Special:Search/{{PAGENAME}}|fetleka leina la letlakala]] matlakaleng a mangwe, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fetleka \"logs\"], goba [{{fullurl:{{FULLPAGENAME}}|action=edit}} wa fetola letlakala le]</span>.",
@@ -353,7 +353,7 @@
"currentrev": "Poeletšo tša bjale",
"currentrev-asof": "Thumeletšo tša seswa go tloga ka $1",
"revisionasof": "Thumeletšo go tloga ka $1",
- "revision-info": "Poeletšo go tloga $1 ka $2",
+ "revision-info": "Poeletšo go tloga $1 ka {{GENDER:$6|$2}}$7",
"previousrevision": "←Poeletšo tša kgalenyana",
"nextrevision": "Peletšo tše dimphsanyana→",
"currentrevisionlink": "Poeletšo ya bjale",
@@ -365,7 +365,7 @@
"histlegend": "Tlhaolo ya diphapano: swaya lepokisi la phetogo go bapetša ke moka o thwanye ''enter'' tlase-tlase<br />\nNane: (bjale) = phapang le diphetogo tša bjale,\n(mafelelo) = phapang le diphetogo tša pele, M = diphetogo tše nyenyane.",
"history-fieldset-title": "Laotša histori",
"history-show-deleted": "Tša go phumulwa fela",
- "histfirst": "Pelepele",
+ "histfirst": "Pelepeleng",
"histlast": "Ntshwantshwa",
"historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
"history-feed-title": "Histori ya poeletšo",
@@ -373,7 +373,7 @@
"history-feed-item-nocomment": "$1 go $2",
"history-feed-empty": "Letlakala lewe ga le gona.\nMohlomongwe le phumutšwe go wiki, goba le fetotšwe leina.\nLeka [[Special:Search|go fetleka wikii]] go humana matlakala a mapsha.",
"rev-delundel": "Bontšha/Fihla",
- "revdelete-hide-text": "Fihla dihlaka tša poeletšo",
+ "revdelete-hide-text": "Dihlaka tša poeletšo",
"revdelete-log": "Lebaka:",
"revdel-restore": "\nfetola tshenolo",
"pagehist": "Histori ya letlakala",
@@ -395,7 +395,7 @@
"shown-title": "Laetša $1 {{PLURAL:$1|sepheto| tša dipheto}} ka letlakala",
"viewprevnext": "Lebelela ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''Go ena le letlaka la leina la \"[[:$1]]\" go wiki ye.'''",
- "searchmenu-new": "'''Hlola letlakala \"[[:$1]]\" go wiki ye!'''",
+ "searchmenu-new": "<strong>Hlola letlakala \"[[:$1]]\" go wiki ye!</strong>",
"searchprofile-articles": "Matlakala a diteng",
"searchprofile-images": "Diphatlalatši tša \"multi\"",
"searchprofile-everything": "Ka moka",
@@ -410,16 +410,15 @@
"search-section": "(sekga $1)",
"search-suggest": "O be o nyaka gore: $1",
"search-interwiki-caption": "Diprojeke tša moloko",
- "search-interwiki-default": "$1 diphetho:",
+ "search-interwiki-default": "Dipheto gotšwa $1:",
"search-interwiki-more": "(gape)",
"searchrelated": "tswalana",
"searchall": "tšohle",
- "showingresultsheader": "{{PLURAL:$5|Sepheto '''$1''' tša '''$3'''|Dipheto '''$1 - $2''' tša '''$3'''}} tša '''$4'''",
"search-nonefound": "Gago dipheto tšago sepelelana le \"query\".",
"powersearch-legend": "Fetleka ya tšwetše",
"powersearch-ns": "Fetleka go di \"namespace\"",
"preferences": "Dikgatlhegelo",
- "mypreferences": "Dikgatlhegelo tša ka",
+ "mypreferences": "Dikgatlhegelo",
"prefs-edits": "Palo ya diphetogo:",
"skin-preview": "Ponopele",
"prefs-rc": "Diphetogo tša bjale",
@@ -431,8 +430,8 @@
"allowemail": "Dumella melaetša ya e-mail go tšwa go bašomiši ba bangwe",
"prefs-files": "Difaele",
"youremail": "E-Poso",
- "username": "Mošomiši:",
- "prefs-memberingroups": "Leloko la {{PLURAL:$1|ya sehlopha|ya dihlopha}}:",
+ "username": "{{GENDER:$1|Mošomiši}}:",
+ "prefs-memberingroups": "{{GENDER:$2|Leloko}} la {{PLURAL:$1|ya sehlopha|ya dihlopha}}:",
"yourrealname": "Leina la mmakgonthe:",
"yourlanguage": "Polelo:",
"yournick": "Tshaeno:",
@@ -467,11 +466,11 @@
"recentchanges-label-minor": "Ye ke phetogo ye nnyenyane",
"recentchanges-label-bot": "Phetogo ye e dirilwe ke \"bot\"",
"recentchanges-label-unpatrolled": "Phetogo ye ga ese e \"patrollwe\"",
- "rcnotefrom": "Tlase ke diphetogo go tloga ka '''$2''' (go fihla ka '''$1''').",
+ "rcnotefrom": "Tlase ke diphetogo go tloga ka <strong>$3, $4</strong> (go fihla ka <strong>$1</strong>).",
"rclistfrom": "Laêtša dipheto tše mfsa go thoma go $3 $2",
"rcshowhideminor": "$1 ya diphetogo tše nnyenyane",
"rcshowhidebots": "$1 bots",
- "rcshowhideliu": "$1 bašumiši bao batsenego",
+ "rcshowhideliu": "$1 bašumiši bao batsebjawago",
"rcshowhideanons": "$1 bašumiši bago se tsebege",
"rcshowhidepatr": "$1 diphetogo tše ''patrolled''",
"rcshowhidemine": "$1 diphetogo tsa ka",
@@ -484,7 +483,7 @@
"newpageletter": "N",
"boteditletter": "b",
"newsectionsummary": "/* $1 */ sekgao se sempsha",
- "rc-enhanced-expand": "Laetša ka bophara (e nyaka \"JavaScript\")",
+ "rc-enhanced-expand": "Laetša ka bophara",
"rc-enhanced-hide": "Fihla bophara bja sedi",
"recentchangeslinked": "Diphetogo tša go tswalana",
"recentchangeslinked-feed": "Diphetogo tša go tswalana",
@@ -504,7 +503,7 @@
"license": "Laesense/Tumello:",
"license-header": "Laesense",
"license-nopreview": "(Ponopele ga e gona)",
- "upload_source_file": "(faele go khomphuthara ya gago)",
+ "upload_source_file": "(faele yeo o kgethilego go khomphuthara ya gago)",
"imgfile": "faele",
"listfiles": "Lenano la difaele",
"listfiles_date": "Letšatšikgwedi",
@@ -535,7 +534,7 @@
"filerevert-defaultcomment": "Boela go poeletšo ya go tloga go $2, $1",
"filedelete": "Phumula $1",
"filedelete-legend": "Phumula faele",
- "filedelete-intro": "O phumula '''[[Media:$1|$1]]'''.",
+ "filedelete-intro": "O phumula <strong>[[Media:$1|$1]]</strong> le histori ya yona.",
"filedelete-comment": "Lebaka:",
"filedelete-submit": "Phumula",
"filedelete-success": "'''$1''' e phumutšwe.",
@@ -568,12 +567,11 @@
"uncategorizedtemplates": "''Templates'' tšago sebe le magoro",
"unusedcategories": "Dihlopha tša go se šomišwe",
"unusedimages": "Difaele tša go se šomišwe",
- "popularpages": "Matlakala a go tuma",
"wantedcategories": "Dihlopha tšago nyakega",
"wantedpages": "Matlakala ago nyakega",
"mostlinked": "Matlakala a go hlomaganya go feta a mangwe",
"mostlinkedcategories": "Dihlopha tša go hlomaganya go feta tše dingwe",
- "mostlinkedtemplates": "''templates'' tša go hlomaganya go feta tše dingwe",
+ "mostlinkedtemplates": "Matlakala a go hlomaganya go feta a mangwe",
"mostcategories": "Matlakala a goba le dihlopha tše dintšhi",
"mostimages": "Faele tša go hlomaganya go feta tše dingwe",
"mostrevisions": "Matlakala a goba le diphetogo tše dintšhi",
@@ -592,7 +590,6 @@
"pager-older-n": "{{PLURAL:$1|1 ya kgale|$1 tša kgale}}",
"booksources": "Dipuku tša mothopo",
"booksources-search-legend": "Fetleka mothopo wa dipuku",
- "booksources-go": "Sepela",
"specialloguserlabel": "Modiri:",
"speciallogtitlelabel": "Thaetlele (goba mošumiši):",
"log": "Di-''log''",
@@ -624,8 +621,8 @@
"emailccsubject": "Kopi ya molaetša wa gago goya go $1: $2",
"emailsent": "E-mail e rometšwe",
"emailsenttext": "Molaetša wa gago wa email gawa romelwa.",
- "watchlist": "Lenano la ditlhapetšo tša ka",
- "mywatchlist": "Lenano la ditlhapetšo tša ka",
+ "watchlist": "Lenano la ditlhapetšo",
+ "mywatchlist": "Lenano la ditlhapetšo",
"watchlistfor2": "Ya $1 $2",
"addedwatchtext": "Letlakala \"[[:$1]]\" le tsene go [[Special:Watchlist|watchlist]] ya gago.\nGo tloga bjale, diphetogo letlakaleng le, le letlakaleng la dipoledišano la gona, di tla bontšhwa ka mongalo wa '''bold''' gare ga [[Special:RecentChanges|list of recent changes]] gore go be bonolo gore oa bone.\n\nGa eba o nyaka go hloša letlaka le go lenano la ditlhapetšo tša gago, šomiša \"Tloša tlhapetšo\" go sidebar.",
"removedwatchtext": "Letlakala \"[[:$1]]\" letlošitšwe go [[Special:Watchlist|lenano la gago la ditlhapetšo]].",
@@ -633,7 +630,7 @@
"watchthispage": "Tlhapetša letlakala le",
"unwatch": "Tloša tlhapešo",
"watchlist-details": "{{PLURAL:$1|$1 ya letlakala|$1 ya matlakala}} a lenano la ditlhapetšo tša gago, re sa bale matlakala a dipoledišano (dipolelo).",
- "wlshowlast": "Laetša $1 diiri $2 matšatši $3 tša gofeta",
+ "wlshowlast": "Laetša $1 diiri $2 matšatši tša gofeta",
"watchlist-options": "Dikgatlego tša lenano la ditlhapetšo",
"watching": "Tlhapeditše...",
"unwatching": "Tlhapetšo eya tlošwa ...",
@@ -646,7 +643,7 @@
"deletepage": "Phumula letlakala",
"excontent": "mateng ebe e le: '$1'",
"delete-legend": "Phumula",
- "historywarning": "'''Temošo:''' Letlakala leo o lekago go lephumula le nale histori le {{:$1|phetogo|diphetogo}}:",
+ "historywarning": "<strong>Temošo:</strong> Letlakala leo o lekago go lephumula le nale histori le {{PLURAL:$1|phetogo|diphetogo tše $1}}:",
"confirmdeletetext": "O phumula letlakala le histori ka moka ya lona.\nKa kgopela sitlediša gore ke se o nyakago go sedira, le gore o kwešiša ditla morago tša se, le gore seo o se dirago se latela melawana le ditaelo go ya ka [[{{MediaWiki:Policy-url}}|polisi]].",
"actioncomplete": "Kgopelo e phetilwe ka katlego",
"actionfailed": "Tiro e padile",
@@ -856,7 +853,6 @@
"exif-componentsconfiguration-0": "Ga e gona",
"exif-subjectdistance-value": "$1 metara",
"exif-meteringmode-1": "Palogare",
- "watchlistall2": "ka moka",
"namespacesall": "ka moka",
"monthsall": "ka moka",
"imgmultipageprev": "← letlakala la go feta",
diff --git a/languages/i18n/nv.json b/languages/i18n/nv.json
index 69410b4e..6eedbb15 100644
--- a/languages/i18n/nv.json
+++ b/languages/i18n/nv.json
@@ -1,259 +1,255 @@
{
- "@metadata": {
- "authors": [
- "Reedy",
- "Seb az86556",
- "לערי ריינהארט"
- ]
- },
- "sunday": "Damóogo",
- "monday": "Damóo biiskání",
- "tuesday": "Damóodóó naakiską́o",
- "wednesday": "Damóodóó tágí jį́",
- "thursday": "Damóodóó dį́į́' yiską́o",
- "friday": "Nda'iiníísh",
- "saturday": "Yiską́ damóo",
- "january": "Yas Niłtʼees",
- "february": "Atsá Biyáázh",
- "march": "Wóózhchʼį́į́d",
- "april": "Tʼą́ą́chil",
- "may_long": "Tʼą́ą́tsoh",
- "june": "Yaʼiishjááshchilí",
- "july": "Yaʼiishjáástsoh",
- "august": "Biniʼantʼą́ą́tsʼózí",
- "september": "Biniʼantʼą́ą́tsoh",
- "october": "Ghąąjį",
- "november": "Níłchʼitsʼósí",
- "december": "Níłchʼitsoh",
- "january-gen": "Yas Niłtʼees",
- "february-gen": "Atsá Biyáázh",
- "march-gen": "Wóózhchʼį́į́d",
- "april-gen": "Tʼą́ą́chil",
- "may-gen": "Tʼą́ą́tsoh",
- "june-gen": "Yaʼiishjááshchilí",
- "july-gen": "Yaʼiishjáástsoh",
- "august-gen": "Biniʼantʼą́ą́tsʼózí",
- "september-gen": "Biniʼantʼą́ą́tsoh",
- "october-gen": "Ghąąjį",
- "november-gen": "Níłchʼitsʼósí",
- "december-gen": "Níłchʼitsoh",
- "jan": "Ynts",
- "feb": "Atsb",
- "mar": "Wozh",
- "apr": "Tchi",
- "may": "Ttso",
- "jun": "Yjsh",
- "jul": "Yjts",
- "aug": "Btsz",
- "sep": "Btsx",
- "oct": "Ghąj",
- "nov": "Ntss",
- "dec": "Ntsx",
- "pagecategories": "{{PLURAL:$1|Naaltsoos biiʼ sinilí|Naaltsoos biiʼ sinilí}}",
- "category_header": "Naaltsoos biiʼ sinilí \"$1\" biyiʼ dahólónígíí",
- "subcategories": "Hanálzhoʼí",
- "hidden-categories": "{{PLURAL:$1|Naaltsoos biiʼ sinilí (doo yitʼínii)|Naaltsoos biiʼ sinilí (doo yitʼínii)}}",
- "category-subcat-count": "{{PLURAL:$2|1 Hanálzhoʼí.|{{PLURAL:$1|1 Hanálzhoʼí|$2 Hanálzhoʼí}} - ($1).}}",
- "category-article-count": "{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ.|{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ|'''$2 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ dahólǫ}} - ($1)}}",
- "listingcontinuesabbrev": "nááná...",
- "cancel": "tʼóó ánássįįh",
- "mytalk": "haneʼ shichʼįʼ ályaaígíí",
- "navigation": "naaltsoosígíí",
- "errorpagetitle": "adziih",
- "tagline": "''{{SITENAME}}'' bitsʼą́ą́dę́ę́ʼ",
- "help": "Anáʼálwoʼ",
- "search": "hanishtá nisin",
- "searchbutton": "tʼáá yíní átʼéegi",
- "searcharticle": "díí saad tʼéiyá",
- "history": "łahgo ályaaígíí",
- "history_short": "łahgo ályaaígíí",
- "printableversion": "\"Print\" áshłééh nisin",
- "permalink": "Díí naaltsoos bi-\"url\"",
- "edit": "Łahgo áshłééh",
- "create": "áshłééh nisin",
- "editthispage": "díí naaltsoos łahgo áshłééh",
- "delete": "sisxé (delete)",
- "protect": "bich'ą́ą́h iishááh nisin (protect)",
- "newpage": "Naaltsoos ániidí",
- "talkpage": "díí kweʼé naaltsoos baa yáshtiʼ nisin",
- "talkpagelinktext": "bichʼįʼ yáshtiʼ",
- "specialpage": "Naaltsoos spéshelígíí",
- "personaltools": "bee naashnishí",
- "talk": "baa yáshtiʼ nisin",
- "views": "naaltsoosígíí",
- "toolbox": "bee naʼanishí",
- "otherlanguages": "saad",
- "redirectedfrom": "(\"$1\"dę́ę́ʼ)",
- "redirectpagesub": "dah astsihígíí",
- "lastmodifiedat": "Díí naaltsoos $1/$2 łahgo ályaa.",
- "aboutsite": "{{SITENAME}} baa haneʼ",
- "aboutpage": "Project: baa haneʼ",
- "copyright": "Díí naaltsoos bikáaʼgi saad shijaaʼígíí \"$1\" beehazʼą́ąnii bikʼehgo choidííłįįł",
- "edithelp": "anáʼálwoʼ",
- "mainpage": "Íiyisíí Naaltsoos",
- "mainpage-description": "Íiyisíí Naaltsoos",
- "retrievedfrom": "\"$1\" bitsʼą́ą́dę́ę́ʼ",
- "youhavenewmessages": "Háíshį́į́ $1 nichʼįʼ áyiilaa. <small>($2)</small>",
- "editsection": "łahgo áshłééh",
- "editold": "łahgo áshłééh",
- "editlink": "łahgo áshłééh",
- "viewsourcelink": "XML yishʼį́ nisin",
- "toc": "bikáaʼgi hólónígíí",
- "showtoc": "yishʼį́ nisin",
- "hidetoc": "doo yishʼį́ nisin da",
- "site-rss-feed": "$1 biRSS Feed",
- "site-atom-feed": "$1 biAtom Feed",
- "page-rss-feed": "\"$1\" biRSS Feed",
- "page-atom-feed": "\"$1\" biAtom Feed",
- "red-link-title": "$1 (ádin)",
- "nstab-main": "naaltsoos",
- "nstab-user": "choyoołʼįįhí binaaltsoos",
- "nstab-special": "Naaltsoos spéshelígíí",
- "nstab-project": "wikiibíídiiya binaaltsoos",
- "nstab-image": "eʼelyaaígíí",
- "nstab-mediawiki": "haneʼ",
- "nstab-template": "bee álnééhí",
- "nstab-help": "anáʼálwoʼ",
- "nstab-category": "Naaltsoos biiʼ sinilí",
- "missingarticle-rev": "(łahgo ályaaígíí #$1)",
- "viewsource": "XML yishʼį́ nisin",
- "yourname": "Choyoołʼįįhí bizhiʼ:",
- "yourpassword": "Passwordígíí:",
- "remembermypassword": "shipassword béédíínih (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "nav-login-createaccount": "Log in / accountígíí ádíílííł",
- "nologinlink": "Accountígíí ádíílííł",
- "mailmypassword": "passwordígíí ániidí shichʼįʼ ádíílííł (e-mail)",
- "link_sample": "Linkígíí",
- "extlink_sample": "http://www.example.com linkígíí",
- "minoredit": "tʼáá áłtsʼíísígo tʼéiyá naaltsoos łahgo áshłaa",
- "watchthis": "shinááł nisin",
- "savearticle": "✔ bee lą́ ashłeeh",
- "preview": "dooleełígíí",
- "showpreview": "dooleełígíí yishʼį́ nisin",
- "showdiff": "łahgo áshłaaígíí yishʼį́ nisin",
- "anoneditwarning": "<div style=\"background:#aaddff; text-align:center;\">'''Doo \"login\" íinilaa da.''' Éí biniinaa nizhiʼ doo ééhozin da áádóó ni-''IP'' naaltsoos bikááʼ náázhdíyóosoh.<br /><small>('''You are not logged in.''' Your name is thus unknown, and your IP will be recorded.)</small></div>",
- "newarticle": "(Naaltsoos ániidí)",
- "previewnote": "'''Díí kweʼé éí \"dooleełígíí\" tʼéiyá átʼé!'''\n::<small>'''(This is only a preview.)'''</small>",
- "editing": "\"$1\" łahgo áshłééh...",
- "templatesused": "\"bee álnééhé\" naaltsoos bikáaʼgi hólǫ́:",
- "templatesusedpreview": "\"bee álnééhé\" naaltsoos bikáaʼgi dooleełígíí:",
- "template-protected": "(administratorsígíí tʼéiyá)",
- "template-semiprotected": "(chodayoołʼįįhí doo ééhozinii díí naaltsoos doo łahgo ádayóleʼ átʼée da)",
- "hiddencategories": "Díí kweʼé naaltsoos éí {{PLURAL:$1|1 Naaltsoos biiʼ sinilí (doo yitʼínii)|$1 Naaltsoos biiʼ sinilí (doo yitʼínii)}} yiiʼ siʼą́:",
- "viewpagelogs": "logsígíí yishʼį́ nisin",
- "nohistory": "\"łahgo ályaaígíí\" doo hólǫ́ǫ da/ádin.",
- "currentrev-asof": "kʼadígíí ($1)",
- "revisionasof": "$1 yę́ędą́ą́ʼ",
- "currentrevisionlink": "kʼadígíí",
- "cur": "kʼadígíí",
- "histfirst": "bee hodeeshzhiizh",
- "histlast": "bee nihoolʼá",
- "rev-delundel": "yishʼį́ nisin/doo yishʼį́ nisin da",
- "history-title": "łahgo ályaaígíí: \"$1\"",
- "editundo": "ńdíídleeł!",
- "viewprevnext": "($1) ($2) ($3) shinááł",
- "search-result-size": "$1 ({{PLURAL:$2|1 saad bikáaʼgi hólǫ́|$2 saad bikáaʼgi dahólǫ́}})",
- "search-redirect": "(\"$1\"dę́ę́ʼ)",
- "search-suggest": "\"$1\" hainítáásh shį́į́?",
- "search-interwiki-more": "(nááná...)",
- "powersearch-redir": "dah astsihígíí yishʼį́ nisin.",
- "mypreferences": "siłkidígíí",
- "group-sysop": "Administratorsígíí",
- "grouppage-sysop": "{{ns:project}}:Administratorsígíí",
- "nchanges": "$1 {{PLURAL:$1|łahgo ályaaígíí|łahgo ályaaígíí}}",
- "recentchanges": "Áníídí łahgo ályaaígíí",
- "recentchanges-feed-description": "áníídí łahgo ályaaígíí",
- "rcshowhideminor": "naaltsoos tʼáá áłtsʼíísígo łahgo ályaaígíí $1",
- "rcshowhidebots": "''bots''ígíí $1",
- "rcshowhideliu": "chodayoołʼįįhí ééhozinígíí $1",
- "rcshowhideanons": "chodayoołʼįįhí doo ééhozinii (IP) $1",
- "rcshowhidemine": "akʼeʼshełchínígíí $1",
- "rclinks": "*($1) łahgo ályaaígíí\n*($2) yiskánídą́ą́ʼ kojįʼ <br />\n$3",
- "hist": "łgá",
- "hide": "doo yishʼį́ nisin da.",
- "show": "yishʼį́ nisin.",
- "minoreditletter": "tʼ",
- "newpageletter": "NÁ",
- "recentchangeslinked-page": "naaltsoos:",
- "upload": "Eʼelyaaígíí biiʼ hééł áshłééh nisin",
- "uploadedimage": "\"[[$1]]\" biiʼ hééł áyiilaa",
- "filehist": "łahgo ályaaígíí",
- "filehist-current": "kʼadígíí",
- "filehist-thumb": "thumbnailígíí",
- "filehist-thumbtext": "thumbnailígíí ($1)",
- "filehist-user": "Choyoołʼįįhí",
- "filehist-dimensions": "naaniigo/náásee",
- "filehist-comment": "haneʼ",
- "imagelinks": "naaltsoos díí kweʼé eʼelyaaígíí chodayoołʼįįhígíí",
- "linkstoimage": "{{PLURAL:$1|1 naaltsoos díí eʼelyaaígíí choyoołʼįįh|$1 naaltsoos díí eʼelyaaígíí chodayoołʼįįh}}:",
- "sharedupload": "Díí kweʼé eʼelyaaígíí $1 bitsʼą́ą́dę́ę́ʼ.",
- "nbytes": "$1 {{PLURAL:$1|byte átʼé|bytes átʼé}}",
- "newpages": "Naaltsoos ániidí",
- "move": "hidishnááh nisin",
- "movethispage": "díí naaltsoos hidishnááh nisin",
- "allpages": "naaltsoosígíí tʼáá ałtso",
- "allarticles": "naaltsoosígíí tʼáá ałtso",
- "linksearch": "linksígíí tłʼóoʼdi siʼánígíí",
- "emailuser": "E-mail bichʼįʼ áshłééh nisin",
- "watchlist": "bikʼi déshʼį́į́ʼígíí",
- "mywatchlist": "bikʼi déshʼį́į́ʼígíí",
- "addedwatchtext": "[[Special:Watchlist|Naaltsoos bikʼi díníʼį́į́ʼígíí]] bíhiniidééh. \"[[:$1]]\" kʼad bikʼi díníʼį́į́ʼ.<br />Nááná [[Special:RecentChanges|\"áníídí łahgo ályaaígíí\"]] bikáaʼgi díí naaltsoos kʼad kodóó '''ditą́ą''' dooleeł.",
- "removedwatchtext": "\"[[:$1]]\" kʼad doo [[Special:Watchlist|bikʼi díníʼį́į]] da.",
- "watch": "bikʼi déshʼį́į́ʼ nisin",
- "watchthispage": "díí naaltsoos bikʼi déshʼį́į́ʼ nisin",
- "unwatch": "doo bikʼi déshʼį́įʼ nisin da",
- "watchlist-details": "{{PLURAL:$1|$1 naaltsoos|$1 naaltsoos}} bikʼi díníʼį́į́ʼ",
- "wlshowlast": "<small>\n* ( $1 ) ahééʼílkidę́ędą́ą́ʼ kojįʼ\n* ( $2 ) yiskánídą́ą́ʼ kojįʼ\n* ( $3 )</small>",
- "watchlist-options": "✔",
- "watching": "(...)",
- "unwatching": "(...)",
- "protectedarticle": "\"[[$1]]\" bichʼą́ą́h ííyá.",
- "modifiedarticleprotection": "\"[[$1]]\" biprotection level łahgo ályaa",
- "namespace": "Naaltsoos bizhiʼ:",
- "invert": "binaashii",
- "blanknamespace": "(Íiyisíí)",
- "contributions": "akʼeʼeeshchínígíí",
- "contributions-title": "$1 akʼeʼeeshchínígíí",
- "mycontris": "akʼeʼshełchínígíí",
- "contribsub2": "$1 akʼeʼeeshchínígíí ($2)",
- "uctop": "(← bee nihoolʼá)",
- "sp-contributions-newbies": "ádaaniidí akʼeʼeeshchínígíí tʼéiyá",
- "sp-contributions-search": "akʼeʼeeshchínígíí hanishtá nisin",
- "sp-contributions-username": "IP/Choyoołʼįįhí bizhiʼ:",
- "sp-contributions-submit": "hanishtá",
- "whatlinkshere": "linksígíí díí naaltsoos baa atiin",
- "whatlinkshere-title": "linksígíí \"$1\" baa atiin",
- "whatlinkshere-page": "Naaltsoos:",
- "linkshere": "'''[[:$1]]''' baa atiinígíí:",
- "nolinkshere": "'''\"[[:$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
- "nolinkshere-ns": "'''\"[[:$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
- "isredirect": "dah astsihígíí",
- "istemplate": "bee álnééhí",
- "isimage": "eʼelyaaígíí",
- "whatlinkshere-prev": "{{PLURAL:$1|←|← $1}}",
- "whatlinkshere-next": "{{PLURAL:$1|→|→ $1}}",
- "whatlinkshere-links": "← linkígíí",
- "whatlinkshere-hideredirs": "dah astsihígíí $1",
- "whatlinkshere-hidetrans": "transclusions $1",
- "whatlinkshere-hidelinks": "linksígíí $1",
- "whatlinkshere-filters": "bee agháʼníldéhí",
- "contribslink": "akʼeʼeeshchínígíí",
- "blocklogentry": "[[$1]] bichʼą́ą́h niiníyá ($2 $3)",
- "movearticle": "naaltsoos:",
- "newtitle": "naaltsoos bizhiʼ ániidí:",
- "move-watch": "shinááł",
- "movepagebtn": "✔ bee lą́ ashłeeh",
- "movepage-moved": "'''\"$1\" kʼad \"$2\" wolyé'''",
- "revertmove": "ńdíídleeł!",
- "skinname-monobook": "NaaltsoosŁáa'ígíí",
- "metadata": "Metadataígíí",
- "metadata-expand": "yishʼį́ nisin",
- "metadata-collapse": "doo yishʼį́ nisin da",
- "watchlistall2": "tʼáá ałtso",
- "namespacesall": "tʼáá ałtso",
- "monthsall": "tʼáá ałtso",
- "watchlisttools-view": "łahgo ályaaígíí yishʼį́ nisin",
- "watchlisttools-edit": "naaltsoos bikʼi déshʼį́į́ʼígíí bikáaʼgi hólónígíí yishʼį́ dóó łahgo áshłééh nisin",
- "watchlisttools-raw": "XML yishʼį́ dóó łahgo áshłééh nisin",
- "specialpages": "Naaltsoos spéshelígíí"
+ "@metadata": {
+ "authors": [
+ "Reedy",
+ "Seb az86556",
+ "לערי ריינהארט"
+ ]
+ },
+ "sunday": "Damóogo",
+ "monday": "Damóo biiskání",
+ "tuesday": "Damóodóó naakiską́o",
+ "wednesday": "Damóodóó tágí jį́",
+ "thursday": "Damóodóó dį́į́' yiską́o",
+ "friday": "Nda'iiníísh",
+ "saturday": "Yiską́ damóo",
+ "january": "Yas Niłtʼees",
+ "february": "Atsá Biyáázh",
+ "march": "Wóózhchʼį́į́d",
+ "april": "Tʼą́ą́chil",
+ "may_long": "Tʼą́ą́tsoh",
+ "june": "Yaʼiishjááshchilí",
+ "july": "Yaʼiishjáástsoh",
+ "august": "Biniʼantʼą́ą́tsʼózí",
+ "september": "Biniʼantʼą́ą́tsoh",
+ "october": "Ghąąjį",
+ "november": "Níłchʼitsʼósí",
+ "december": "Níłchʼitsoh",
+ "january-gen": "Yas Niłtʼees",
+ "february-gen": "Atsá Biyáázh",
+ "march-gen": "Wóózhchʼį́į́d",
+ "april-gen": "Tʼą́ą́chil",
+ "may-gen": "Tʼą́ą́tsoh",
+ "june-gen": "Yaʼiishjááshchilí",
+ "july-gen": "Yaʼiishjáástsoh",
+ "august-gen": "Biniʼantʼą́ą́tsʼózí",
+ "september-gen": "Biniʼantʼą́ą́tsoh",
+ "october-gen": "Ghąąjį",
+ "november-gen": "Níłchʼitsʼósí",
+ "december-gen": "Níłchʼitsoh",
+ "jan": "Ynts",
+ "feb": "Atsb",
+ "mar": "Wozh",
+ "apr": "Tchi",
+ "may": "Ttso",
+ "jun": "Yjsh",
+ "jul": "Yjts",
+ "aug": "Btsz",
+ "sep": "Btsx",
+ "oct": "Ghąj",
+ "nov": "Ntss",
+ "dec": "Ntsx",
+ "pagecategories": "{{PLURAL:$1|Naaltsoos biiʼ sinilí|Naaltsoos biiʼ sinilí}}",
+ "category_header": "Naaltsoos biiʼ sinilí \"$1\" biyiʼ dahólónígíí",
+ "subcategories": "Hanálzhoʼí",
+ "hidden-categories": "{{PLURAL:$1|Naaltsoos biiʼ sinilí (doo yitʼínii)|Naaltsoos biiʼ sinilí (doo yitʼínii)}}",
+ "category-subcat-count": "{{PLURAL:$2|1 Hanálzhoʼí.|{{PLURAL:$1|1 Hanálzhoʼí|$2 Hanálzhoʼí}} - ($1).}}",
+ "category-article-count": "{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ.|{{PLURAL:$2|'''1 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ hólǫ|'''$2 naaltsoos''' díí naaltsoos biiʼ sinilí biyiʼ dahólǫ}} - ($1)}}",
+ "listingcontinuesabbrev": "nááná...",
+ "cancel": "tʼóó ánássįįh",
+ "mytalk": "haneʼ shichʼįʼ ályaaígíí",
+ "navigation": "naaltsoosígíí",
+ "errorpagetitle": "adziih",
+ "tagline": "''{{SITENAME}}'' bitsʼą́ą́dę́ę́ʼ",
+ "help": "Anáʼálwoʼ",
+ "search": "hanishtá nisin",
+ "searchbutton": "tʼáá yíní átʼéegi",
+ "searcharticle": "díí saad tʼéiyá",
+ "history": "łahgo ályaaígíí",
+ "history_short": "łahgo ályaaígíí",
+ "printableversion": "\"Print\" áshłééh nisin",
+ "permalink": "Díí naaltsoos bi-\"url\"",
+ "edit": "Łahgo áshłééh",
+ "create": "áshłééh nisin",
+ "editthispage": "díí naaltsoos łahgo áshłééh",
+ "delete": "sisxé (delete)",
+ "protect": "bich'ą́ą́h iishááh nisin (protect)",
+ "newpage": "Naaltsoos ániidí",
+ "talkpage": "díí kweʼé naaltsoos baa yáshtiʼ nisin",
+ "talkpagelinktext": "bichʼįʼ yáshtiʼ",
+ "specialpage": "Naaltsoos spéshelígíí",
+ "personaltools": "bee naashnishí",
+ "talk": "baa yáshtiʼ nisin",
+ "views": "naaltsoosígíí",
+ "toolbox": "bee naʼanishí",
+ "otherlanguages": "saad",
+ "redirectedfrom": "(\"$1\"dę́ę́ʼ)",
+ "redirectpagesub": "dah astsihígíí",
+ "lastmodifiedat": "Díí naaltsoos $1/$2 łahgo ályaa.",
+ "aboutsite": "{{SITENAME}} baa haneʼ",
+ "aboutpage": "Project: baa haneʼ",
+ "copyright": "Díí naaltsoos bikáaʼgi saad shijaaʼígíí \"$1\" beehazʼą́ąnii bikʼehgo choidííłįįł",
+ "edithelp": "anáʼálwoʼ",
+ "mainpage": "Íiyisíí Naaltsoos",
+ "mainpage-description": "Íiyisíí Naaltsoos",
+ "retrievedfrom": "\"$1\" bitsʼą́ą́dę́ę́ʼ",
+ "youhavenewmessages": "Háíshį́į́ $1 nichʼįʼ áyiilaa. <small>($2)</small>",
+ "editsection": "łahgo áshłééh",
+ "editold": "łahgo áshłééh",
+ "editlink": "łahgo áshłééh",
+ "viewsourcelink": "XML yishʼį́ nisin",
+ "toc": "bikáaʼgi hólónígíí",
+ "showtoc": "yishʼį́ nisin",
+ "hidetoc": "doo yishʼį́ nisin da",
+ "site-rss-feed": "$1 biRSS Feed",
+ "site-atom-feed": "$1 biAtom Feed",
+ "page-rss-feed": "\"$1\" biRSS Feed",
+ "page-atom-feed": "\"$1\" biAtom Feed",
+ "red-link-title": "$1 (ádin)",
+ "nstab-main": "naaltsoos",
+ "nstab-user": "choyoołʼįįhí binaaltsoos",
+ "nstab-special": "Naaltsoos spéshelígíí",
+ "nstab-project": "wikiibíídiiya binaaltsoos",
+ "nstab-image": "eʼelyaaígíí",
+ "nstab-mediawiki": "haneʼ",
+ "nstab-template": "bee álnééhí",
+ "nstab-help": "anáʼálwoʼ",
+ "nstab-category": "Naaltsoos biiʼ sinilí",
+ "missingarticle-rev": "(łahgo ályaaígíí #$1)",
+ "viewsource": "XML yishʼį́ nisin",
+ "yourname": "Choyoołʼįįhí bizhiʼ:",
+ "yourpassword": "Passwordígíí:",
+ "remembermypassword": "shipassword béédíínih (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "nav-login-createaccount": "Log in / accountígíí ádíílííł",
+ "nologinlink": "Accountígíí ádíílííł",
+ "mailmypassword": "passwordígíí ániidí shichʼįʼ ádíílííł (e-mail)",
+ "link_sample": "Linkígíí",
+ "extlink_sample": "http://www.example.com linkígíí",
+ "minoredit": "tʼáá áłtsʼíísígo tʼéiyá naaltsoos łahgo áshłaa",
+ "watchthis": "shinááł nisin",
+ "savearticle": "✔ bee lą́ ashłeeh",
+ "preview": "dooleełígíí",
+ "showpreview": "dooleełígíí yishʼį́ nisin",
+ "showdiff": "łahgo áshłaaígíí yishʼį́ nisin",
+ "anoneditwarning": "<div style=\"background:#aaddff; text-align:center;\">'''Doo \"login\" íinilaa da.''' Éí biniinaa nizhiʼ doo ééhozin da áádóó ni-''IP'' naaltsoos bikááʼ náázhdíyóosoh.<br /><small>('''You are not logged in.''' Your name is thus unknown, and your IP will be recorded.)</small></div>",
+ "newarticle": "(Naaltsoos ániidí)",
+ "previewnote": "'''Díí kweʼé éí \"dooleełígíí\" tʼéiyá átʼé!'''\n::<small>'''(This is only a preview.)'''</small>",
+ "editing": "\"$1\" łahgo áshłééh...",
+ "templatesused": "\"bee álnééhé\" naaltsoos bikáaʼgi hólǫ́:",
+ "templatesusedpreview": "\"bee álnééhé\" naaltsoos bikáaʼgi dooleełígíí:",
+ "template-protected": "(administratorsígíí tʼéiyá)",
+ "template-semiprotected": "(chodayoołʼįįhí doo ééhozinii díí naaltsoos doo łahgo ádayóleʼ átʼée da)",
+ "hiddencategories": "Díí kweʼé naaltsoos éí {{PLURAL:$1|1 Naaltsoos biiʼ sinilí (doo yitʼínii)|$1 Naaltsoos biiʼ sinilí (doo yitʼínii)}} yiiʼ siʼą́:",
+ "viewpagelogs": "logsígíí yishʼį́ nisin",
+ "nohistory": "\"łahgo ályaaígíí\" doo hólǫ́ǫ da/ádin.",
+ "currentrev-asof": "kʼadígíí ($1)",
+ "revisionasof": "$1 yę́ędą́ą́ʼ",
+ "currentrevisionlink": "kʼadígíí",
+ "cur": "kʼadígíí",
+ "histfirst": "bee hodeeshzhiizh",
+ "histlast": "bee nihoolʼá",
+ "rev-delundel": "yishʼį́ nisin/doo yishʼį́ nisin da",
+ "history-title": "łahgo ályaaígíí: \"$1\"",
+ "editundo": "ńdíídleeł!",
+ "viewprevnext": "($1) ($2) ($3) shinááł",
+ "search-result-size": "$1 ({{PLURAL:$2|1 saad bikáaʼgi hólǫ́|$2 saad bikáaʼgi dahólǫ́}})",
+ "search-redirect": "(\"$1\"dę́ę́ʼ)",
+ "search-suggest": "\"$1\" hainítáásh shį́į́?",
+ "search-interwiki-more": "(nááná...)",
+ "mypreferences": "siłkidígíí",
+ "group-sysop": "Administratorsígíí",
+ "grouppage-sysop": "{{ns:project}}:Administratorsígíí",
+ "nchanges": "$1 {{PLURAL:$1|łahgo ályaaígíí|łahgo ályaaígíí}}",
+ "recentchanges": "Áníídí łahgo ályaaígíí",
+ "recentchanges-feed-description": "áníídí łahgo ályaaígíí",
+ "rcshowhideminor": "naaltsoos tʼáá áłtsʼíísígo łahgo ályaaígíí $1",
+ "rcshowhidebots": "''bots''ígíí $1",
+ "rcshowhideliu": "chodayoołʼįįhí ééhozinígíí $1",
+ "rcshowhideanons": "chodayoołʼįįhí doo ééhozinii (IP) $1",
+ "rcshowhidemine": "akʼeʼshełchínígíí $1",
+ "rclinks": "*($1) łahgo ályaaígíí\n*($2) yiskánídą́ą́ʼ kojįʼ <br />\n$3",
+ "hist": "łgá",
+ "hide": "doo yishʼį́ nisin da.",
+ "show": "yishʼį́ nisin.",
+ "minoreditletter": "tʼ",
+ "newpageletter": "NÁ",
+ "recentchangeslinked-page": "naaltsoos:",
+ "upload": "Eʼelyaaígíí biiʼ hééł áshłééh nisin",
+ "filehist": "łahgo ályaaígíí",
+ "filehist-current": "kʼadígíí",
+ "filehist-thumb": "thumbnailígíí",
+ "filehist-thumbtext": "thumbnailígíí ($1)",
+ "filehist-user": "Choyoołʼįįhí",
+ "filehist-dimensions": "naaniigo/náásee",
+ "filehist-comment": "haneʼ",
+ "imagelinks": "naaltsoos díí kweʼé eʼelyaaígíí chodayoołʼįįhígíí",
+ "linkstoimage": "{{PLURAL:$1|1 naaltsoos díí eʼelyaaígíí choyoołʼįįh|$1 naaltsoos díí eʼelyaaígíí chodayoołʼįįh}}:",
+ "sharedupload": "Díí kweʼé eʼelyaaígíí $1 bitsʼą́ą́dę́ę́ʼ.",
+ "nbytes": "$1 {{PLURAL:$1|byte átʼé|bytes átʼé}}",
+ "newpages": "Naaltsoos ániidí",
+ "move": "hidishnááh nisin",
+ "movethispage": "díí naaltsoos hidishnááh nisin",
+ "allpages": "naaltsoosígíí tʼáá ałtso",
+ "allarticles": "naaltsoosígíí tʼáá ałtso",
+ "linksearch": "linksígíí tłʼóoʼdi siʼánígíí",
+ "emailuser": "E-mail bichʼįʼ áshłééh nisin",
+ "watchlist": "bikʼi déshʼį́į́ʼígíí",
+ "mywatchlist": "bikʼi déshʼį́į́ʼígíí",
+ "addedwatchtext": "[[Special:Watchlist|Naaltsoos bikʼi díníʼį́į́ʼígíí]] bíhiniidééh. \"[[:$1]]\" kʼad bikʼi díníʼį́į́ʼ.<br />Nááná [[Special:RecentChanges|\"áníídí łahgo ályaaígíí\"]] bikáaʼgi díí naaltsoos kʼad kodóó '''ditą́ą''' dooleeł.",
+ "removedwatchtext": "\"[[:$1]]\" kʼad doo [[Special:Watchlist|bikʼi díníʼį́į]] da.",
+ "watch": "bikʼi déshʼį́į́ʼ nisin",
+ "watchthispage": "díí naaltsoos bikʼi déshʼį́į́ʼ nisin",
+ "unwatch": "doo bikʼi déshʼį́įʼ nisin da",
+ "watchlist-details": "{{PLURAL:$1|$1 naaltsoos|$1 naaltsoos}} bikʼi díníʼį́į́ʼ",
+ "wlshowlast": "( $1 ) ahééʼílkidę́ędą́ą́ʼ kojįʼ, ( $2 ) yiskánídą́ą́ʼ kojįʼ",
+ "watchlist-options": "✔",
+ "watching": "(...)",
+ "unwatching": "(...)",
+ "protectedarticle": "\"[[$1]]\" bichʼą́ą́h ííyá.",
+ "modifiedarticleprotection": "\"[[$1]]\" biprotection level łahgo ályaa",
+ "namespace": "Naaltsoos bizhiʼ:",
+ "invert": "binaashii",
+ "blanknamespace": "(Íiyisíí)",
+ "contributions": "akʼeʼeeshchínígíí",
+ "contributions-title": "$1 akʼeʼeeshchínígíí",
+ "mycontris": "akʼeʼshełchínígíí",
+ "contribsub2": "$1 akʼeʼeeshchínígíí ($2)",
+ "uctop": "(← bee nihoolʼá)",
+ "sp-contributions-newbies": "ádaaniidí akʼeʼeeshchínígíí tʼéiyá",
+ "sp-contributions-search": "akʼeʼeeshchínígíí hanishtá nisin",
+ "sp-contributions-username": "IP/Choyoołʼįįhí bizhiʼ:",
+ "sp-contributions-submit": "hanishtá",
+ "whatlinkshere": "linksígíí díí naaltsoos baa atiin",
+ "whatlinkshere-title": "linksígíí \"$1\" baa atiin",
+ "whatlinkshere-page": "Naaltsoos:",
+ "linkshere": "'''[[:$1]]''' baa atiinígíí:",
+ "nolinkshere": "'''\"[[:$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
+ "nolinkshere-ns": "'''\"[[:$1]]\"''' baa atiinígíí doo hólǫ́ǫ da.",
+ "isredirect": "dah astsihígíí",
+ "istemplate": "bee álnééhí",
+ "isimage": "eʼelyaaígíí",
+ "whatlinkshere-prev": "{{PLURAL:$1|←|← $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|→|→ $1}}",
+ "whatlinkshere-links": "← linkígíí",
+ "whatlinkshere-hideredirs": "dah astsihígíí $1",
+ "whatlinkshere-hidetrans": "transclusions $1",
+ "whatlinkshere-hidelinks": "linksígíí $1",
+ "whatlinkshere-filters": "bee agháʼníldéhí",
+ "contribslink": "akʼeʼeeshchínígíí",
+ "blocklogentry": "[[$1]] bichʼą́ą́h niiníyá ($2 $3)",
+ "movearticle": "naaltsoos:",
+ "newtitle": "naaltsoos bizhiʼ ániidí:",
+ "move-watch": "shinááł",
+ "movepagebtn": "✔ bee lą́ ashłeeh",
+ "movepage-moved": "'''\"$1\" kʼad \"$2\" wolyé'''",
+ "revertmove": "ńdíídleeł!",
+ "metadata": "Metadataígíí",
+ "metadata-expand": "yishʼį́ nisin",
+ "metadata-collapse": "doo yishʼį́ nisin da",
+ "namespacesall": "tʼáá ałtso",
+ "monthsall": "tʼáá ałtso",
+ "watchlisttools-view": "łahgo ályaaígíí yishʼį́ nisin",
+ "watchlisttools-edit": "naaltsoos bikʼi déshʼį́į́ʼígíí bikáaʼgi hólónígíí yishʼį́ dóó łahgo áshłééh nisin",
+ "watchlisttools-raw": "XML yishʼį́ dóó łahgo áshłééh nisin",
+ "specialpages": "Naaltsoos spéshelígíí"
}
diff --git a/languages/i18n/oc.json b/languages/i18n/oc.json
index d46b17ad..4f1471ea 100644
--- a/languages/i18n/oc.json
+++ b/languages/i18n/oc.json
@@ -22,9 +22,9 @@
"tog-extendwatchlist": "Espandir la lista de seguiment per afichar totas las modificacions e non pas solament las mai recentas",
"tog-usenewrc": "Agropar los cambiaments per pagina dins los darrièrs cambiaments e la lista de seguiment",
"tog-numberheadings": "Numerotar automaticament los títols",
- "tog-showtoolbar": "Far veire la barra de menú",
- "tog-editondblclick": "Modificar las paginas amb un clic doble",
- "tog-editsectiononrightclick": "Modificar una seccion en fasent un clic drech suls títols de seccion",
+ "tog-showtoolbar": "Far veire la barra d'aisinas de modificacion (necessita JavaScript)",
+ "tog-editondblclick": "Modificar de paginas amb un clic doble (necessita JavaScript)",
+ "tog-editsectiononrightclick": "Activar la modificacion de seccions en fasent un clic drech suls títols (necessita JavaScript)",
"tog-watchcreations": "Apondre las paginas que creï e los fichièrs qu'impòrti a ma lista de seguiment",
"tog-watchdefault": "Apondre las paginas que modifiqui e los fichièrs qu'impòrti a ma lista de seguiment",
"tog-watchmoves": "Apondre las paginas e los fichièrs que tòrni nomenar a ma lista de seguiment",
@@ -38,9 +38,9 @@
"tog-enotifminoredits": "M’avertir per corrièr electronic quitament en cas de modificacions menoras de las paginas o dels fichièrs",
"tog-enotifrevealaddr": "Afichar mon adreça electronica dins la los corrièrs electronics d’avertiment",
"tog-shownumberswatching": "Afichar lo nombre d'utilizaires que seguisson aquesta pagina",
- "tog-oldsig": "Apercebut de la signatura existenta :",
+ "tog-oldsig": "Signatura existenta :",
"tog-fancysig": "Tractar la signatura coma de wikitèxte (sens ligam automatic)",
- "tog-uselivepreview": "Utilizar l’apercebut rapid (experimental)",
+ "tog-uselivepreview": "Utilizar l’apercebut rapid",
"tog-forceeditsummary": "M'avertir quand ai pas completat lo contengut de la bóstia de comentaris",
"tog-watchlisthideown": "Amagar mas pròprias modificacions dins la lista de seguiment",
"tog-watchlisthidebots": "Amagar los cambiaments faches pels bòts dins la lista de seguiment",
@@ -215,6 +215,7 @@
"otherlanguages": "Autras lengas",
"redirectedfrom": "(Redirigit dempuèi $1)",
"redirectpagesub": "Pagina de redireccion",
+ "redirectto": "Redirigir cap a :",
"lastmodifiedat": "Darrièr cambiament d'aquesta pagina lo $1, a $2.",
"viewcount": "Aquesta pagina es estada consultada {{PLURAL:$1|un còp|$1 còps}}.",
"protectedpage": "Pagina protegida",
@@ -227,6 +228,7 @@
"pool-queuefull": "La fila de trabalh es plena",
"pool-errorunknown": "Error desconeguda",
"pool-servererror": "Lo servici de comptatge de la reserva es pas disponible ($1).",
+ "poolcounter-usage-error": "Error d’utilizacion : $1",
"aboutsite": "A prepaus de {{SITENAME}}",
"aboutpage": "Project:A prepaus",
"copyright": "Lo contengut es disponible jos licéncia $1 levat mencion contrària.",
@@ -236,6 +238,7 @@
"disclaimers": "Avertiments",
"disclaimerpage": "Project:Avertiments generals",
"edithelp": "Ajuda",
+ "helppage-top-gethelp": "Ajuda",
"mainpage": "Acuèlh",
"mainpage-description": "Acuèlh",
"policy-url": "Project:Règlas",
@@ -314,10 +317,12 @@
"readonly_lag": "La banca de donadas es estada automaticament clavada pendent que los servidors segondaris ratrapan lor retard sul servidor principal.",
"internalerror": "Error intèrna",
"internalerror_info": "Error intèrna: $1",
+ "internalerror-fatal-exception": "Error fatala de tipe \"$1\"",
"filecopyerror": "Impossible de copiar lo fichièr « $1 » cap a « $2 ».",
"filerenameerror": "Impossible de tornar nomenar lo fichièr « $1 » en « $2 ».",
"filedeleteerror": "Impossible de suprimir lo fichièr « $1 ».",
"directorycreateerror": "Impossible de crear lo dorsièr « $1 ».",
+ "directoryreadonlyerror": "Lo repertòri « $1 » es en lectura sola.",
"filenotfound": "Impossible de trobar lo fichièr « $1 ».",
"unexpected": "Valor imprevista : « $1 » = « $2 ».",
"formerror": "Error: Impossible de sometre lo formulari",
@@ -339,7 +344,7 @@
"viewsourcetext": "Podètz veire e copiar lo contengut de l’article per poder trabalhar dessús :",
"viewyourtext": "Podètz veire e copiar lo contengut de '''vòstras modificacions''' a aquesta pagina :",
"protectedinterface": "Aquesta pagina provesís de tèxte d’interfàcia pel logicial susaqueste wiki, e es protegida per evitar los abuses.\nPer apondre o modificar de traduccions sus totes los wikis, utilizatz [//translatewiki.net/ translatewiki.net], lo projècte de localizacion de MediaWiki.",
- "editinginterface": "'''Atencion :''' sètz a mand de modificar una pagina utilizada per crear lo tèxte de l’interfàcia del logicial. Los cambiaments sus aquesta pagina se repercutaràn sus l'aparéncia de l'interfàcia d'utilizaire pels autres utilizaires d'aqueste wiki. Per apondre o modificar de traduccions per totes los wikis, utilizatz [//translatewiki.net/translatewiki.net], lo projècte MediaWiki d'internacionalizacion dels messatges .",
+ "editinginterface": "<strong>Atencion :<strong> sètz a mand de modificar una pagina utilizada per crear lo tèxte de l’interfàcia del logicial.\nLos cambiaments sus aquesta pagina se repercutaràn sus l'aparéncia de l'interfàcia d'utilizaire pels autres utilizaires d'aqueste wiki.",
"cascadeprotected": "Aquesta pagina es actualament protegida perque es inclusa dins {{PLURAL:$1|la pagina seguenta|las paginas seguentas}}, {{PLURAL:$1|qu'es estada protegida|que son estadas protegidas}} amb l’opcion « proteccion en cascada » activada :\n$2",
"namespaceprotected": "Avètz pas la permission de modificar las paginas de l’espaci de noms « '''$1''' ».",
"customcssprotected": "Avètz pas la permission d'editar aquesta pagina CSS perque conten de preferéncias d’autres utilizaires.",
@@ -396,6 +401,8 @@
"userlogin-resetlink": "Avètz doblidat vòstres detalhs de connexion ?",
"userlogin-resetpassword-link": "Senhal doblidat ?",
"userlogin-helplink2": "Ajuda a la connexion",
+ "userlogin-loggedin": "Sètz ja connectat en tant que {{GENDER:$1|$1}}.\nUtilizatz lo formulari çaijós per vos connectar amb un autre utilizaire.",
+ "userlogin-createanother": "Crear un autre compte",
"createacct-emailrequired": "Adreça electronica",
"createacct-emailoptional": "Adreça de corrièr electronic (facultativa)",
"createacct-email-ph": "Entratz vòstra adreça de corrièr electronic",
@@ -508,7 +515,6 @@
"passwordreset-emailsent-capture": "Un corrièr electronic de reïnicializacion senhal es estat mandat, qu'es afichat çaijós.",
"passwordreset-emailerror-capture": "Un corrièr electronic de reïnicializacion de senhal es estat generat, qu'es afichat çaijós, mas lo mandadís a l'{{GENDER:$2|utilizaire}} a fracassat : $1",
"changeemail": "Cambiar l'adreça electronica:",
- "changeemail-header": "Cambiar l'adreça electronica del compte",
"changeemail-text": "Emplenatz aqueste formulari per cambiar vòstra adreça de corrièr electronic. Vos cal entrar vòstre senhal per confirmar aqueste cambiament.",
"changeemail-no-info": "Vos cal èsser connectat per aver accès a aquesta pagina.",
"changeemail-oldemail": "Adreça electronica actuala:",
@@ -516,7 +522,6 @@
"changeemail-none": "(pas cap)",
"changeemail-password": "Vòstre senhal sus {{SITENAME}} :",
"changeemail-submit": "Cambiar l'adreça electronica:",
- "changeemail-cancel": "Anullar",
"changeemail-throttled": "Avètz fach tròp de temptativas de connexion.\nEsperatz $1 abans d’ensajar tornarmai.",
"resettokens": "Reïnicializar los getons",
"resettokens-text": "Aici, podètz reïnicializar los getons que permeton d’accedir a d'unas donadas privadas associadas a vòstre compte.\n\nLo vos caldriá far se las avètz partejats accidentalament amb qualqu'un o se vòstre compte es estat compromés.",
@@ -554,7 +559,7 @@
"showpreview": "Previsualizacion",
"showdiff": "Veire los cambiaments",
"blankarticle": "<strong>Atencion :</strong> La pagina que creatz es voida.\nSe clicatz tornarmai sus « {{int:savearticle}} », la pagina serà creada sens cap de contengut.",
- "anoneditwarning": "'''Atencion :''' sètz pas identificat(ada).\nVòstra adreça IP serà enregistrada dins l’istoric d'aquesta pagina.",
+ "anoneditwarning": "<strong>Atencion :<strong> sètz pas connectat.\nVòstra adreça IP serà visibla per tot lo monde se fasètz de modificacions. Se <strong>[$1 vos connectatz]</strong> o <strong>[$2 creatz un compte]</strong>, vòstras modificacions seràn atribuidas a vòstre nom d’utilizaire, entre autres avantatges.",
"anonpreviewwarning": "''Sètz pas identificat. Salvar enregistrarà vòstra adreça IP dins l’istoric de las modificacions de la pagina.''",
"missingsummary": "'''Atencion :''' avètz pas modificat lo resumit de vòstra modificacion. Se clicatz tornarmai sul boton « Salvar », lo salvament serà fach sens avertiment mai.",
"missingcommenttext": "Mercé de metre un comentari çaijós.",
@@ -655,6 +660,8 @@
"content-model-text": "tèxte brut",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Objècte void",
+ "content-json-empty-array": "Tablèu void",
"expensive-parserfunction-warning": "Atencion : Aquesta pagina conten tròp d’apèls dispendioses de foncions del parser.\n\nI deurià aver mens de {{PLURAL:$2|ampèl|ampèls}}, e actualament {{PLURAL:$1|i a $1 ampèl|i a $1 ampèls}}..",
"expensive-parserfunction-category": "Paginas amb tròp d’apèls dispendioses de foncions parsaires",
"post-expand-template-inclusion-warning": "Atencion : Aquesta pagina conten tròp d'inclusions de modèls.\nD'unas inclusions seràn pas efectuadas.",
@@ -709,7 +716,7 @@
"history-feed-empty": "La pagina demandada existís pas.\nBenlèu es estada escafada o renomenada.\nEnsajatz de [[Special:Search|recercar sul wiki]] per trobar de paginas en rapòrt.",
"rev-deleted-comment": "(resumit de comentari suprimit)",
"rev-deleted-user": "(nom d’utilizaire suprimit)",
- "rev-deleted-event": "(entrada suprimida)",
+ "rev-deleted-event": "(detalhs de l'entrada suprimida)",
"rev-deleted-user-contribs": "[nom d'utilizaire o adreça IP suprimida - modificacion amagada sus las contribucions]",
"rev-deleted-text-permission": "Aquesta version de la pagina es estada '''escafada'''.\nI pòt aver de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal dels escafaments].",
"rev-suppressed-text-permission": "Aquesta version de la page es estada <strong>suprimida</strong>.\nLos detalhs se tròban dins lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de las supressions].",
@@ -743,7 +750,7 @@
"revdelete-legend": "Metre en plaça de restriccions de version :",
"revdelete-hide-text": "Tèxte de la revision",
"revdelete-hide-image": "Amagar lo contengut del fichièr",
- "revdelete-hide-name": "Amagar l’accion e la cibla",
+ "revdelete-hide-name": "Amagar la cibla e los paramètres",
"revdelete-hide-comment": "Modificar lo resumit",
"revdelete-hide-user": "Nom d’utilizaire/Adreça IP de l’editor",
"revdelete-hide-restricted": "Suprimir aquestas donadas als administrators e mai als autres",
@@ -797,7 +804,6 @@
"mergehistory-same-destination": "Las paginas d'origina e de destinacion pòdon pas èsser la meteissa",
"mergehistory-reason": "Motiu :",
"mergelog": "Istoric de las fusions",
- "pagemerge-logentry": "[[$1]] fusionada amb [[$2]] (revisions fins al $3)",
"revertmerge": "Separar",
"mergelogpagetext": "Vaquí, çaijós, la lista de las fusions las mai recentas de l'istoric d'una pagina amb una autra.",
"history-title": "$1 : Istoric de las versions",
@@ -838,6 +844,7 @@
"search-result-category-size": "$1 membre{{PLURAL:$1||s}} ($2 soscategoria{{PLURAL:$2||s}}, $3 fichièr{{PLURAL:$3||s}})",
"search-redirect": "(redireccion cap a $1)",
"search-section": "(seccion $1)",
+ "search-category": "(categoria $1)",
"search-file-match": "(correspond al contengut del fichièr)",
"search-suggest": "Avètz volgut dire : $1",
"search-interwiki-caption": "Projèctes fraires",
@@ -848,7 +855,7 @@
"searchall": "Totes",
"showingresults": "Afichatge de <b>$1</b> resultat{{PLURAL:$1||s}} a partir del n°<b>$2</b>.",
"showingresultsinrange": "Afichar çaijós fins a {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultats}} dins la seria #<strong>$2</strong> a #<strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5|Resultat '''$1'''|Resultats '''$1 - $2'''}} de '''$3''' per '''$4'''",
+ "search-showingresults": "{{PLURAL:$4|Resultat <strong>$1</strong> demest <strong>$3</strong>|Resultats <strong>$1 a $2</strong> demest <strong>$3</strong>}}",
"search-nonefound": "I a pas cap de resultat correspondent a la requèsta.",
"powersearch-legend": "Recèrca avançada",
"powersearch-ns": "Recercar dins los espacis de nom :",
@@ -940,7 +947,7 @@
"gender-female": "Modifica de paginas del wiki",
"prefs-help-gender": "Definir aquesta preferéncia es facultatiu.\nAqueste logicial utiliza sa valor per s’adreçar a vos e vos mencionar als autres en utilizant lo bon genre gramatical.\nAquesta informacion serà publica.",
"email": "Corrièr electronic",
- "prefs-help-realname": "(facultatiu) : se l'especificatz, serà utilizat per vos atribuir vòstras contribucions.",
+ "prefs-help-realname": "Lo nom vertadièr es facultatiu.\nSe l'especificatz, serà utilizat per vos atribuir vòstras contribucions.",
"prefs-help-email": "L’adreça de corrièr electronic es facultativa mas vos permet de reçaupre lo senhal se lo doblidatz.\nTanben podètz causir de permetre a d’autres de vos contactar per vòstra pagina d’utilizaire o la de discussion sens sofracha de desvelar vòstra idenditat.",
"prefs-help-email-others": "Tanben podètz causir de daissar los autres vos contactar sus vòstra pagina de discussion d'utilizaire sens que siá necessari de revelar vòstra identitat.",
"prefs-help-email-required": "Una adreça de corrièr electronic es requesa.",
@@ -1187,9 +1194,9 @@
"uploaderror": "Error",
"upload-recreate-warning": "'''Atencion : Un fichièr amb aqueste nom es estat suprimit o desplaçat.'''\n\nLo jornal de las supressions e lo dels desplaçaments d'aquesta pagina son afichats aicí per informacion :",
"uploadtext": "Utilizatz lo formulari çaijós per importar de fichièrs sul servidor.\nPer veire o recercar d'imatges mandats precedentament, consultatz [[Special:FileList|la lista dels imatges]]. Las còpias e las supressions tanben son enregistradas dins l'[[Special:Log/upload|istoric dels impòrts]], las supressions dins l’[[Special:Log/delete|istoric de las supressions]].\n\nPer inclure un imatge dins una pagina, utilizatz un ligam de la forma\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichièr.jpg]]</nowiki></code>''',\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichièr.png|200px|thumb|left|tèxte descriptiu]]</nowiki></code>''' per utilizar una miniatura de 200 pixèls de larg dins una bóstia a esquèrra amb 'tèxte descriptiu' coma descripcion\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:fichièr.ogg]]</nowiki></code>''' per ligar dirèctament cap al fichièr sens l'afichar.",
- "upload-permitted": "Formats de fichièrs autorizats : $1.",
- "upload-preferred": "Formats de fichièrs preferits : $1.",
- "upload-prohibited": "Formats de fichièrs interdiches : $1.",
+ "upload-permitted": "{{PLURAL:$2|Tipe|Tipes}} de fichièrs autorizats : $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipe|Tipes}} de fichièrs preferits : $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipe|Tipes}} de fichièrs interdiches : $1.",
"uploadlogpage": "Istoric de las importacions de fichièrs multimèdia",
"uploadlogpagetext": "Aquí la lista dels darrièrs fichièrs copiats sul servidor.\nVejatz la [[Special:NewFiles|galariá dels imatges novèls]] per una presentacion mai visuala.",
"filename": "Nom del fichièr",
@@ -1442,7 +1449,6 @@
"statistics": "Estatisticas",
"statistics-header-pages": "Estatisticas de las paginas",
"statistics-header-edits": "Estatisticas sus las edicions",
- "statistics-header-views": "Estatisticas sus las visitas",
"statistics-header-users": "Estatisticas d'utilizaire",
"statistics-header-hooks": "Autras estatisticas",
"statistics-articles": "Paginas de contengut",
@@ -1451,13 +1457,9 @@
"statistics-files": "Fichièrs importats",
"statistics-edits": "Modificacions de paginas dempuèi que {{SITENAME}} foguèt installat",
"statistics-edits-average": "Modificacions mejanas per pagina",
- "statistics-views-total": "Visitas totalas",
- "statistics-views-total-desc": "Las vistas de las paginas non existentas e de las paginas especialas son pas inclusas",
- "statistics-views-peredit": "Visitas per modificacions",
"statistics-users": "[[Special:ListUsers|Utilizaires]] enregistrats",
"statistics-users-active": "Utilizaires actius",
"statistics-users-active-desc": "Utilizaires qu'an fach al mens una accion durant {{PLURAL:$1|lo darrièr jorn|los $1 darrièrs jorns}}",
- "statistics-mostpopular": "Paginas mai consultadas",
"pageswithprop": "Paginas amb una proprietat de pagina",
"pageswithprop-legend": "Paginas amb una proprietat de pagina",
"pageswithprop-text": "Aquesta pagina fa la lista de las paginas qu'utilizan una proprietat de pagina particulara.",
@@ -1498,9 +1500,9 @@
"uncategorizedtemplates": "Modèls sens categoria",
"unusedcategories": "Categorias inutilizadas",
"unusedimages": "Imatges orfanèls",
- "popularpages": "Paginas mai consultadas",
"wantedcategories": "Categorias mai demandadas",
"wantedpages": "Paginas mai demandadas",
+ "wantedpages-summary": "Aquesta pagina compta totes los ligams, encluses los inserits via de modèls de navigacion. Per una lista dels articles mai demandats, vejatz articles mai demandats, que comptabiliza pas que las referéncias que provenon de l'espaci de nom dels articles. Vejatz tanben lo '''articles mai demandats'''.",
"wantedpages-badtitle": "Títol invalid dins los resultats : $1",
"wantedfiles": "Fichièrs desirats",
"wantedfiletext-cat": "Los fichièrs seguents son utilizats, mas existisson pas localament. Se se tròban sus un depaus partejat, pòdon èsser listats aicí, mentre que sián, de fach, ja disponibles. Totes aqueles falses positius seràn <del>raiats</del>. Amai, las paginas qu'intègran de fichièrs qu'existisson pas son repertoriadas dins [[:$1]].",
@@ -1558,10 +1560,12 @@
"pager-older-n": "{{PLURAL:$1|1 mai anciana|$1 mai ancianas}}",
"suppress": "Supervisor",
"querypage-disabled": "Aquesta pagina especiala es desactivada per de rasons de performàncias.",
+ "apihelp": "Ajuda de l'API",
+ "apihelp-no-such-module": "Lo modul « $1 » es introbable.",
"booksources": "Obratges de referéncia",
"booksources-search-legend": "Recercar demest d'obratges de referéncia",
"booksources-isbn": "ISBN :",
- "booksources-go": "Validar",
+ "booksources-search": "Recercar",
"booksources-text": "Vaquí una lista de ligams cap a d’autres sites que vendon de libres nòus e d’ocasion e suls quals trobaretz benlèu d'entresenhas suls obratges que cercatz. {{SITENAME}} es pas ligada a cap d'aquestas societats, a pas l’intencion de ne far la promocion.",
"booksources-invalid-isbn": "Lo numèro ISBN balhat sembla pas èsser valid ; verificatz s'avètz fach una error al moment de la còpia dempuèi la font.",
"specialloguserlabel": "Autor :",
@@ -1645,7 +1649,7 @@
"emailpagetext": "Podètz utilizar lo formulari çaijós per mandar un corrièr electronic a {{GENDER:$1|aqueste utilizaire|aquesta utilizaira}}.\nL'adreça electronica qu'avètz indicada dins [[Special:Preferences|vòstras preferéncias]] apareisserà dins lo camp « Expeditor » de vòstre messatge. E mai, lo destinatari vos poirà respondre dirèctament.",
"defemailsubject": "{{SITENAME}} Corrièl de l'utilizaire « $1 »",
"usermaildisabled": "Lo mandadís de corrièrs electronics entre utilizairers es desactivat",
- "usermaildisabledtext": "Podètz pas mandar de corrièrs electronics a d'autres utilizaires sur aquel wiki",
+ "usermaildisabledtext": "Podètz pas mandar de corrièrs electronics a d'autres utilizaires sus aquel wiki",
"noemailtitle": "Pas d'adreça electronica",
"noemailtext": "Aqueste utilizaire a pas especificat d'adreça electronica valida.",
"nowikiemailtext": "Aqueste utilizaire a causit de recebre pas de corrièr electronic de la part d'autres utilizaires.",
@@ -1688,7 +1692,7 @@
"wlheader-enotif": "La notificacion per corrièr electronic es activada.",
"wlheader-showupdated": "Las paginas que son estadas modificadas dempuèi vòstra darrièra visita son afichadas en '''gras'''.",
"wlnote": "Çaijós {{PLURAL:$1|figura la darrièra modificacion efectuada|figuran las <strong>$1</strong> darrièras modificacions efectuadas}} pendent {{PLURAL:$2|la darrièra ora|las <strong>$2</strong> darrièras oras}}, dempuèi $3, $4.",
- "wlshowlast": "Far veire las darrièras $1 oras, los darrièrs $2 jorns, o $3.",
+ "wlshowlast": "Far veire las darrièras $1 oras, los darrièrs $2 jorns",
"watchlist-options": "Opcions de la lista de seguiment",
"watching": "Seguit...",
"unwatching": "Fin del seguit...",
@@ -1736,7 +1740,6 @@
"delete-warning-toobig": "Aquesta pagina dispausa d'un istoric important, depassant {{PLURAL:$1|revision|revisions}}.\nLa suprimir pòt perturbar lo foncionament de la banca de donada de {{SITENAME}}.\nD'efectuar amb prudéncia.",
"deleteprotected": "Podètz pas suprimir aquesta pagina perque es estada protegida.",
"rollback": "Anullar las modificacions",
- "rollback_short": "Anullar",
"rollbacklink": "anullar",
"rollbacklinkcount": "revocar $1 {{PLURAL:$1|modificacion|modificacions}}",
"rollbacklinkcount-morethan": "revocar mai de $1 {{PLURAL:$1|modificacion|modificacions}}",
@@ -1768,10 +1771,10 @@
"protect_expiry_invalid": "Lo temps d’expiracion es invalid",
"protect_expiry_old": "Lo temps d’expiracion ja es passat.",
"protect-unchain-permissions": "Desvarrolhar ancara mai d'opcions de proteccion",
- "protect-text": "Podètz consultar e modificar lo nivèl de proteccion de la pagina '''$1'''. Asseguratz-vos que seguissètz las règlas intèrnas.",
- "protect-locked-blocked": "Podètz pas modificar lo nivèl de proteccion tant que sètz blocat. Vaquí los reglatges actuals de la pagina '''$1''' :",
- "protect-locked-dblock": "Lo nivèl de proteccion pòt pas èsser modificat perque la banca de donadas es blocada. Vaquí los reglatges actuals de la pagina '''$1''' :",
- "protect-locked-access": "Avètz pas los dreches necessaris per modificar la proteccion de la pagina. Vaquí los reglatges actuals de la pagina '''$1''' :",
+ "protect-text": "Podètz consultar e modificar lo nivèl de proteccion de la pagina «$1».",
+ "protect-locked-blocked": "Podètz pas modificar los nivèls de proteccion tant que sètz bloca{{GENDER:||t|ada}}.. Vaquí los reglatges actuals de la pagina <strong>$1</strong> :",
+ "protect-locked-dblock": "Lo nivèl de proteccion pòt pas èsser modificat perque la banca de donadas es varrolhada.\nVaquí los reglatges actuals de la pagina <strong>$1</strong> :",
+ "protect-locked-access": "Avètz pas los dreches necessaris per modificar los nivèls de proteccion de las paginas.\nVaquí los reglatges actuals de la pagina <strong>$1</strong> :",
"protect-cascadeon": "Aquesta pagina es protegida perque es inclusa dins {{PLURAL:$1|la pagina seguenta qu'es estada protegida|las paginas seguentas que son estadas protegidas}}, amb l’opcion « proteccion en cascada » activada. Podètz cambiar lo nivèl de proteccion d'aquesta pagina sens qu'aquò afècte la proteccion en cascada.",
"protect-default": "Autorizar totes los utilizaires",
"protect-fallback": "Autorizar unicament los utilizaires amb lo drech « $1 »",
@@ -1786,6 +1789,7 @@
"protect-othertime": "Autra expiracion :",
"protect-othertime-op": "Autra expiracion",
"protect-existing-expiry": "Durada d’expiracion existenta : $2 a $3",
+ "protect-existing-expiry-infinity": "Relambi d’expiracion existent : infinit",
"protect-otherreason": "Motiu suplementari o autre :",
"protect-otherreason-op": "Autra rason",
"protect-dropdown": "*Motius de proteccion mai corrents\n** Vandalisme excessiu\n** Spam excessiu\n** Guèrra d'edicion\n** Pagina de trafic fòrt",
@@ -1826,7 +1830,7 @@
"undeletedrevisions-files": "{{PLURAL:$1|1 revision|$1 revisions}} e {{PLURAL:$2|1 fichièr restablit|$2 fichièrs restablits}}",
"undeletedfiles": "$1 {{PLURAL:$1|fichièr restablit|fichièrs restablits}}",
"cannotundelete": "Fracàs del restabliment :\n$1",
- "undeletedpage": "'''La pagina $1 es estada restablida'''.\n\nConsultatz l’[[Special:Log/delete|istoric de las supressions]] per veire las paginas recentament suprimidas e restablidas.",
+ "undeletedpage": "<strong>La pagina $1 es estada restablida</strong>.\n\nConsultatz l’[[Special:Log/delete|istoric de las supressions]] per veire la lista de las supressions e dels restabliments recents.",
"undelete-header": "Consultatz l’[[Special:Log/delete|istoric de las supressions]] per veire las paginas recentament suprimidas.",
"undelete-search-title": "Recercar las paginas suprimidas",
"undelete-search-box": "Cercar una pagina suprimida",
@@ -1844,7 +1848,9 @@
"undelete-show-file-submit": "Òc",
"namespace": "Espaci de noms :",
"invert": "Inversar la seleccion",
+ "tooltip-invert": "Marcatz aquesta casa per amagar las modificacions de las paginas dins l'espaci de noms seleccionat (e l'espaci de noms associat se marcat)",
"namespace_association": "Espaci de nom associat",
+ "tooltip-namespace_association": "Marcatz aquesta casa per inclure tanben l'espaci de noms de discussion associat a l'espaci de noms seleccionat",
"blanknamespace": "(Principal)",
"contributions": "Contribucions de l'{{GENDER:$1|utilizaire|utilizaira}}",
"contributions-title": "Lista de las contribucions de l’utilizaire $1",
@@ -1861,7 +1867,7 @@
"sp-contributions-blocklog": "Istoric dels blocatges",
"sp-contributions-suppresslog": "contribucions suprimidas d’un utilizaire",
"sp-contributions-deleted": "contribucions suprimidas",
- "sp-contributions-uploads": "importat",
+ "sp-contributions-uploads": "impòrts",
"sp-contributions-logs": "jornals",
"sp-contributions-talk": "Discutir",
"sp-contributions-userrights": "gerir los dreches",
@@ -1869,7 +1875,7 @@
"sp-contributions-blocked-notice-anon": "Aquesta adreça IP es actualament blocada.\nLa darrièra intrada del jornal dels blocatges es indicada çaijós a títol d’informacion :",
"sp-contributions-search": "Cercar las contribucions",
"sp-contributions-username": "Adreça IP o nom d’utilizaire :",
- "sp-contributions-toponly": "Mostrar sonque las contribucions que son lo darrièr cambiament",
+ "sp-contributions-toponly": "Mostrar sonque las contribucions que son las darrièras dels articles",
"sp-contributions-newonly": "Afichar unicament las modificacions que son de creacions de pagina",
"sp-contributions-submit": "Cercar",
"whatlinkshere": "Paginas ligadas a aquesta",
@@ -1880,7 +1886,7 @@
"nolinkshere-ns": "Cap de pagina conten pas de ligam cap a '''[[:$1]]''' dins l’espaci de nom causit.",
"isredirect": "pagina de redireccion",
"istemplate": "inclusion",
- "isimage": "Paginas ligadas al fichièr",
+ "isimage": "ligam cap al fichièr",
"whatlinkshere-prev": "{{PLURAL:$1|precedent|$1 precedents}}",
"whatlinkshere-next": "{{PLURAL:$1|seguent|$1 seguents}}",
"whatlinkshere-links": "← ligams",
@@ -1898,7 +1904,7 @@
"ipaddressorusername": "Adreça IP o nom d’utilizaire :",
"ipbexpiry": "Durada del blocatge :",
"ipbreason": "Motiu :",
- "ipbreason-dropdown": "* Motius de blocatge mai frequents\n** Vandalisme\n** Insercion d’informacions faussas\n** Supression de contengut sens justificacion\n** Insercion repetida de ligams extèrnes publicitaris (spam)\n** Insercion de contengut sens cap de sens\n** Temptativa d’intimidacion o agarriment\n** Abús d’utilizacion de comptes multiples\n** Nom d’utilizaire inacceptable, injuriós o difamant",
+ "ipbreason-dropdown": "* Motius de blocatge mai frequents\n** Insercion d’informacions faussas\n** Supression injustificada de contengut de las paginas\n** Insercion repetida de ligams extèrnes publicitaris (spam)\n** Insercion de contengut sens cap de sens e de bordilhas dins las paginas\n** Temptativa d’intimidacion o agarriment\n** Abús d’utilizacion de comptes multiples\n** Nom d’utilizaire inacceptable, injuriós o difamant",
"ipb-hardblock": "Empachar los utilizaires connectats de modificar en utilizant aquesta adreça IP",
"ipbcreateaccount": "Empachar la creacion de compte",
"ipbemailban": "Empachar l’utilizaire de mandar de corrièrs electronics",
@@ -1926,8 +1932,8 @@
"unblocked": "[[User:$1|$1]] es estat desblocat",
"unblocked-range": "$1 es estat desblocat",
"unblocked-id": "Lo blocatge $1 es estat levat",
- "blocklist": "Utilizaires o adreças IP blocats",
- "ipblocklist": "Utilizaires o adreças IP blocats",
+ "blocklist": "Utilizaires blocats",
+ "ipblocklist": "Utilizaires blocats",
"ipblocklist-legend": "Cercar un utilizaire blocat",
"blocklist-userblocks": "Amagar los blocatges de comptes",
"blocklist-tempblocks": "Amagar los blocatges temporaris",
@@ -1955,7 +1961,7 @@
"unblocklink": "desblocar",
"change-blocklink": "modificar lo blocatge",
"contribslink": "contribucions",
- "emaillink": "mandar un messatge",
+ "emaillink": "Mandar un corrièr electronic",
"autoblocker": "Sètz estat blocat automaticament perque vòstra adreça IP es estada utilizada recentament per « [[User:$1|$1]] ».\nLo motiu provesit pel blocatge de $1 es « $2 »",
"blocklogpage": "Istoric dels blocatges",
"blocklog-showlog": "Aqueste utilizaire es estat blocat precedentament. Lo jornal dels blocatges es disponible çaijós :",
@@ -2012,17 +2018,17 @@
"movepagetalktext": "La pagina de discussion associada, se presenta, serà automaticament desplaçada amb ''' levat se :'''\n*Desplaçatz una pagina cap a un autre espaci,\n*Una pagina de discussion ja existís amb lo nom novèl, o\n*Avètz deseleccionat lo boton çaijós.\n\nDins aqueste cas, vos caldrà desplaçar o fusionar la pagina manualament se o volètz.",
"movearticle": "Tornar nomenar l'article",
"moveuserpage-warning": "'''Atencion :''' Sètz a mand de tornar nomenar una pagina d’utilizaire. Notatz que sola la pagina serà renomenada e que l’utilizaire '''ne''' serà '''pas''' renomenat.",
- "movenologintext": "Per poder tornar nomenar un article, vos cal èsser [[Special:UserLogin|connectat(ada)]]\nen tant qu'utilizaire enregistrat.",
- "movenotallowed": "Avètz pas la permission de tornar nomenar de paginas.",
+ "movenologintext": "Per poder renomenar una pagina, vos cal èsser [[Special:UserLogin|indentific{{GENDER:||t|da)}}]]\nen tant qu'utilizaire enregistrat amb pro d'ancianetat.",
+ "movenotallowed": "Avètz pas la permission de renomenar de paginas.",
"movenotallowedfile": "Avètz pas la permission de desplaçar los fichièrs.",
- "cant-move-user-page": "Avètz pas la permission de tornar nomenar de paginas d'utilizaires raices sus aqueste wiki.",
+ "cant-move-user-page": "Avètz pas la permission de renomenar las paginas principalas d'utilizaires.",
"cant-move-to-user-page": "Avètz pas la permission de tornar nomenar una pagina cap a una pagina d'utilizaire (a l'excepcion d'una sospagina).",
"cant-move-category-page": "Avètz pas la permission de renomenar las paginas de categorias.",
"newtitle": "Títol novèl",
"move-watch": "Seguir aquesta pagina",
"movepagebtn": "Tornar nomenar l'article",
"pagemovedsub": "Cambiament de nom capitat",
- "movepage-moved": "La pagina « $1 » es estada renomenada en « $2 ».",
+ "movepage-moved": "'''« $1 » es estada renomenada en « $2 »'''",
"movepage-moved-redirect": "Una redireccion es estada creada.",
"movepage-moved-noredirect": "La creacion de la redireccion es estada suprimida.",
"articleexists": "Existís ja un article que pòrta aqueste títol, o lo títol qu'avètz causit es pas valid.\nCausissètz-ne un autre.",
@@ -2080,7 +2086,7 @@
"allmessagesdefault": "Messatge per defaut",
"allmessagescurrent": "Messatge actual",
"allmessagestext": "Aquò es la lista de totes los messatges disponibles dins l’espaci MediaWiki.\nVisitatz la [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Localizacion MediaWiki] e [//translatewiki.net translatewiki.net] se desiratz contribuir a la localizacion MediaWiki generica.",
- "allmessagesnotsupportedDB": "'''{{ns:special}}:Allmessages''' es pas disponible perque '''$wgUseDatabaseMessages''' es desactivat.",
+ "allmessagesnotsupportedDB": "Aquesta pagina '''{{ns:special}}:Allmessages''' es pas utilizabla perque '''$wgUseDatabaseMessages''' es estat desactivat.",
"allmessages-filter-legend": "Filtre",
"allmessages-filter": "Filtrar per estat de modificacion :",
"allmessages-filter-unmodified": "Pas modificat",
@@ -2104,7 +2110,7 @@
"thumbnail_gd-library": "Configuracion incompleta de la bibliotèca GD : foncion $1 introbabla",
"thumbnail_image-missing": "Lo fichièr seguent es introbable : $1",
"import": "Importar de paginas",
- "importinterwiki": "Impòrt interwiki",
+ "importinterwiki": "Importar a partir d'un autre wiki",
"import-interwiki-text": "Seleccionatz un wiki e un títol de pagina d'importar.\nLas datas de las versions e los noms dels editors seràn preservats.\nTotas las accions d’importacion interwiki son conservadas dins lo [[Special:Log/import|jornal d’impòrt]].",
"import-interwiki-sourcewiki": "Wiki font :",
"import-interwiki-sourcepage": "Pagina font :",
@@ -2120,7 +2126,7 @@
"import-revision-count": "$1 {{PLURAL:$1|version|versions}}",
"importnopages": "Cap de pagina d'importar.",
"imported-log-entries": "$1 {{PLURAL:$1|entrada|entradas}} del jornal {{PLURAL:$1|importada|importadas}}.",
- "importfailed": "Fracàs de l’impòrt : $1",
+ "importfailed": "Fracàs de l'importacion : <nowiki>$1</nowiki>",
"importunknownsource": "Tipe de la font d’impòrt desconegut",
"importcantopen": "Impossible de dobrir lo fichièr d'importar",
"importbadinterwiki": "Ligam interwiki marrit",
@@ -2145,18 +2151,15 @@
"import-rootpage-nosubpage": "L'espaci de noms « $1 » de la pagina raiç autoriza pas las sospaginas.",
"importlogpage": "Istoric de las importacions de paginas",
"importlogpagetext": "Impòrts administratius de paginas amb l’istoric a partir dels autres wikis.",
- "import-logentry-upload": "a importat (telecargament) [[$1]]",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}}",
- "import-logentry-interwiki": "a importat (transwiki) $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}} dempuèi $2",
"javascripttest": "Tèst de JavaScript",
- "javascripttest-title": "Execucion dels tèsts $1",
"javascripttest-pagetext-noframework": "Aquesta pagina es reservada per l'execucion dels tèsts JavaScript.",
"javascripttest-pagetext-unknownframework": "Estructura « $1 » desconeguda.",
+ "javascripttest-pagetext-unknownaction": "Accion « $1 » desconeguda.",
"javascripttest-pagetext-frameworks": "Causissètz una de las estructuras de tèst seguentas : $1",
"javascripttest-pagetext-skins": "Causissètz un abilhatge amb lo qual cal aviar los tèsts :",
"javascripttest-qunit-intro": "Veire [$1 la documentacion de tèst] sus mediawiki.org.",
- "javascripttest-qunit-heading": "Seguida de tèst QUnit de JavaScript sus MediaWiki",
"tooltip-pt-userpage": "Vòstra pagina d'utilizaire",
"tooltip-pt-anonuserpage": "La pagina d'utilizare de l’IP amb la quala contribuissètz",
"tooltip-pt-mytalk": "Vòstra pagina de discussion",
@@ -2166,6 +2169,7 @@
"tooltip-pt-mycontris": "Lista de vòstras contribucions",
"tooltip-pt-login": "Sètz convidat(ada) a vos identificar, mas es pas obligatòri.",
"tooltip-pt-logout": "Se desconnectar",
+ "tooltip-pt-createaccount": "Vos es conselhat de crear un compte e de vos connectar ; pasmens, es pas obligatòri",
"tooltip-ca-talk": "Discussion a prepaus d'aquesta pagina",
"tooltip-ca-edit": "Podètz modificar aquesta pagina. Mercé de previsualizar abans d’enregistrar.",
"tooltip-ca-addsection": "Començar una seccion novèla",
@@ -2234,7 +2238,7 @@
"others": "autres",
"siteusers": "{{PLURAL:$2|utilizaire|utilizaires}} $1 de {{SITENAME}}",
"anonusers": "{{PLURAL:$2|l'utilizaire anonim|los utilizaires anonims}} $1 de {{SITENAME}}",
- "creditspage": "Pagina de crèdits",
+ "creditspage": "Crèdits de la pagina",
"nocredits": "I a pas d’entresenhas d’atribucion disponiblas per aquesta pagina.",
"spamprotectiontitle": "Pagina protegida automaticament per causa de spam",
"spamprotectiontext": "La pagina qu'avètz ensajat de publicar es estada blocada pel filtre antispam.\nAquò es probablament causat per un ligam sus lista negra que punta cap a un site extèrne.",
@@ -2259,7 +2263,6 @@
"pageinfo-robot-policy": "Indexacion per robòts",
"pageinfo-robot-index": "Autorizada",
"pageinfo-robot-noindex": "Interdicha",
- "pageinfo-views": "Nombre de vistas",
"pageinfo-watchers": "Nombre de contributors qu'an la pagina dins lor lista de seguiment",
"pageinfo-few-watchers": "Mens de $1 {{PLURAL:$1|observator|observators}}",
"pageinfo-redirects-name": "Nombre de redireccions cap a aquesta pagina",
@@ -2302,7 +2305,7 @@
"markedaspatrollederrornotify": "Fracàs del marcatge coma contrarotlat.",
"patrol-log-page": "Istoric de las versions patrolhadas",
"patrol-log-header": "Vaquí un jornal de las versions patrolhadas.",
- "log-show-hide-patrol": "$1 l'istoric de las versions patrolhadas",
+ "log-show-hide-patrol": "$1 l'istoric de las relecturas",
"deletedrevision": "La version anciana $1 es estada suprimida.",
"filedeleteerror-short": "Error al moment de la supression del fichièr : $1",
"filedeleteerror-long": "D'errors son estadas rencontradas al moment de la supression del fichièr :\n\n$1",
@@ -2312,14 +2315,14 @@
"filedelete-archive-read-only": "Lo dorsièr d’archivatge « $1 » es pas modificable pel servidor.",
"previousdiff": "← Cambiament precedent",
"nextdiff": "Cambiament seguent →",
- "mediawarning": "'''Atencion :''' Aqueste fichièr pòt conténer de còde malvolent.\nSe l'executatz, vòstre sistèma pòt èsser compromés.",
+ "mediawarning": "<strong>Atencion :</strong> Aqueste tipe de fichièr pòt conténer de còde malvolent.\nSe l'executatz, vòstre sistèma pòt èsser compromés.",
"imagemaxsize": "Format maximal dels imatges :<br />''(per las paginas de descripcion d’imatges)''",
"thumbsize": "Talha de la miniatura :",
"widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pagina|paginas}}",
"file-info": "Talha del fichièr: $1, tipe MIME: $2",
"file-info-size": "$1 × $2 pixèl, talha del fichièr: $3, tipe MIME: $4",
"file-info-size-pages": "$1 × $2 pixèls, talha de fichièr: $3, tipe MIME: $4, $5 {{PLURAL:$5|pagina|paginas}}",
- "file-nohires": "Pas de resolucion mai nauta disponibla.",
+ "file-nohires": "Pas de resolucion mai nauta de disponibla.",
"svg-long-desc": "Fichièr SVG, resolucion de $1 × $2 pixèls, talha : $3",
"svg-long-desc-animated": "Fichièr SVG animat, talha $1 x $2 pixèls, talha del fichièr : $3",
"svg-long-error": "Fichièr SVG invalid : $1",
@@ -2362,14 +2365,14 @@
"saturday-at": "Dissabte a $1",
"sunday-at": "Dimenge a $1",
"yesterday-at": "Ièr a $1",
- "bad_image_list": "Lo format es lo seguent :\n\nSolas las listas d'enumeracion (las linhas començant per *) son presas en compte. Lo primièr ligam d'una linha deu èsser cap a un imatge marrit.\nLos autres ligams sus la meteissa linha son considerats coma d'excepcions, per exemple d'articles sulsquals l'imatge deu aparéisser.",
+ "bad_image_list": "Lo format es lo seguent :\n\nSolas las listas d'enumeracion (las linhas començant per *) son presas en compte. Lo primièr ligam d'una linha deu èsser cap a un imatge marrit.\nLos autres ligams sus la meteissa linha son considerats coma d'excepcions, per exemple de paginas sus las quals l'imatge deu aparéisser.",
"variantname-kk-arab": "kk-arabi",
"variantname-ku-arab": "ku-Arabi",
"metadata": "Metadonadas",
"metadata-help": "Aqueste fichièr conten d'entresenhas suplementàrias probablament apondudas per l’aparelh de fòto numeric o l'escanèr que las a aquesas. Se lo fichièr es estat modificat dempuèi son estat original, d'unes detalhs pòdon reflectir pas entièrament l’imatge modificat.",
"metadata-expand": "Far veire las entresenhas detalhadas",
"metadata-collapse": "Amagar las entresenhas detalhadas",
- "metadata-fields": "Los camps de metadonadas d’EXIF listats dins aqueste message seràn incluses dins la pagina de descripcion de l’imatge quand la taula de metadonadas serà reducha. Los autres camps seràn amagats per manca.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-fields": "Los camps de metadonadas d’EXIF listats dins aqueste messatge seràn incluses dins la pagina de descripcion de l’imatge quand la taula de metadonadas serà redusida. Los autres camps seràn amagats per defaut.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "Largor",
"exif-imagelength": "Nautor",
"exif-bitspersample": "Bits per compausanta",
@@ -2696,26 +2699,25 @@
"exif-iimcategory-evn": "Environament",
"exif-iimcategory-hth": "Santat",
"exif-iimcategory-hum": "Interès uman",
- "exif-iimcategory-lab": "Tribailh",
+ "exif-iimcategory-lab": "Trabalh",
"exif-iimcategory-lif": "Mòde de vida e de lésers",
- "exif-iimcategory-pol": "Politic",
+ "exif-iimcategory-pol": "Politica",
"exif-iimcategory-rel": "Religion e cresenças",
"exif-iimcategory-sci": "Sciéncia e tecnologia",
"exif-iimcategory-soi": "Questions socialas",
"exif-iimcategory-spo": "Espòrts",
- "exif-iimcategory-war": "Guèrra, conflictes",
+ "exif-iimcategory-war": "Guèrra, conflictes e borrolhs",
"exif-iimcategory-wea": "Metèo",
"exif-urgency-normal": "Normala ($1)",
"exif-urgency-low": "Febla ($1)",
"exif-urgency-high": "Nauta ($1)",
"exif-urgency-other": "Urgéncia definida per l'utilizaire ($1)",
- "watchlistall2": "tot",
"namespacesall": "Totes",
"monthsall": "totes",
"confirmemail": "Confirmar l'adreça de corrièr electronic",
"confirmemail_noemail": "L’adreça de corrièr electronic configurada dins vòstras [[Special:Preferences|preferéncias]] es pas valida.",
"confirmemail_text": "{{SITENAME}} necessita la verificacion de vòstra adreça de corrièr electronic abans de poder utilizar tota foncion de messatjariá. Utilizatz lo boton çaijós per mandar un corrièr electronic de confirmacion a vòstra adreça. Lo corrièr contendrà un ligam contenent un còde, cargatz aqueste ligam dins vòstre navigador per validar vòstra adreça.",
- "confirmemail_pending": "Un còde de confirmacion ja vos es estat mandat per corrièr electronic ; se venètz de crear vòstre compte, esperatz qualques minutas que l’e-mail arribe abans de demandar un còde novèl.",
+ "confirmemail_pending": "Un còde de confirmacion ja vos es estat mandat per corrièr electronic ;\nse venètz de crear vòstre compte, esperatz qualques minutas que l’e-mail arribe abans de demandar un còde novèl.",
"confirmemail_send": "Mandar un còde de confirmacion",
"confirmemail_sent": "Corrièr electronic de confirmacion mandat.",
"confirmemail_oncreate": "Un còde de confirmacion es estat mandat a vòstra adreça de corrièr electronic.\nAqueste còde es pas requerit per se connectar, mas n'aurètz besonh per activar las foncionalitats ligadas als corrièrs electronics sus aqueste wiki.",
@@ -2741,10 +2743,10 @@
"confirm_purge_button": "Confirmar",
"confirm-purge-top": "Volètz refrescar aquesta pagina (purgar l'escondedor) ?",
"confirm-purge-bottom": "Purgar una pagina vioda l'escondedor e fòrça la darrièra version a èsser afichada.",
- "confirm-watch-button": "Confirmar",
- "confirm-watch-top": "Apondre aquesta pagina a vòstra lista de seguiment?",
- "confirm-unwatch-button": "Confirmar",
- "confirm-unwatch-top": "Levar aquesta pagina de vòstra lista de seguiment?",
+ "confirm-watch-button": "D'acòrdi",
+ "confirm-watch-top": "Apondre aquesta pagina a vòstra lista de seguiment ?",
+ "confirm-unwatch-button": "D'acòrdi",
+ "confirm-unwatch-top": "Levar aquesta pagina de vòstra lista de seguiment ?",
"colon-separator": "&nbsp;:&#32;",
"quotation-marks": "« $1 »",
"imgmultipageprev": "← pagina precedenta",
@@ -2761,7 +2763,7 @@
"table_pager_first": "Primièra pagina",
"table_pager_last": "Darrièra pagina",
"table_pager_limit": "Far veire $1 elements per pagina",
- "table_pager_limit_label": "Elements per pagina:",
+ "table_pager_limit_label": "Resultats per pagina :",
"table_pager_limit_submit": "Accedir",
"table_pager_empty": "Cap de resultat",
"autosumm-blank": "Blanquiment de la pagina",
@@ -2777,12 +2779,12 @@
"lag-warn-high": "En rason d’una fòrta carga de las bancas de donadas, los cambiaments que datan de mens de $1 {{PLURAL:$1|segonda|segondas}} pòdon aparéisser pas dins aquesta lista.",
"watchlistedit-normal-title": "Modificacion de la lista de seguiment",
"watchlistedit-normal-legend": "Levar de paginas de la lista de seguiment",
- "watchlistedit-normal-explain": "Las paginas que seguissètz son visiblas çaijós, classadas per espaci de noms. Per levar una pagina (e sa pagina de discussion) de la lista, seleccionatz la casa al costat puèi clicatz sul boton en bas. Tanben la podètz [[Special:EditWatchlist/raw|modificar en mòde brut]].",
+ "watchlistedit-normal-explain": "Las paginas que seguissètz son visiblas çaijós, classadas per espaci de noms.\nPer levar una pagina (e sa pagina de discussion) de la lista, seleccionatz la casa al costat puèi clicatz sul boton en bas.\nTanben la podètz [[Special:EditWatchlist/raw|modificar en mòde brut]].",
"watchlistedit-normal-submit": "Levar las paginas seleccionadas",
"watchlistedit-normal-done": "{{PLURAL:$1|Una pagina es estada levada|$1 paginas son estadas levadas}} de vòstra lista de seguiment :",
"watchlistedit-raw-title": "Modificacion de la lista de seguiment (mòde brut)",
"watchlistedit-raw-legend": "Modificacion de la lista de seguiment en mòde brut",
- "watchlistedit-raw-explain": "!!FLa lista de las paginas que seguissètz es afichada çaijós, sens las paginas de discussion (enclusas automaticament) e triadas per espaci de noms. Podètz modificar la lista, apondètz las paginas que volètz seguir (pauc impòrta ont), una pagina per linha, e levatz las paginas que volètz pas mai seguir. Tanlèu acabat, clicatz sul boton en bas per metre la lista a jorn. Tanben podètz utilizar [[Special:EditWatchlist|l’editor normal]].",
+ "watchlistedit-raw-explain": "Los títols de vòstra lista de seguiment son afichats çaijós e pòdon èsser modificats en los apondent o los levant de la lista (un títol per linha). Quand avètz acabat, clicatz sul boton « {{int:Watchlistedit-raw-submit}} » en bas. Tanben podètz [[Special:EditWatchlist|utilizar l'editor normal]].",
"watchlistedit-raw-titles": "Títols :",
"watchlistedit-raw-submit": "Metre la lista a jorn",
"watchlistedit-raw-done": "Vòstra lista de seguiment es estada mesa a jorn.",
@@ -2801,7 +2803,6 @@
"watchlisttools-edit": "Veire e modificar la lista de seguiment",
"watchlisttools-raw": "Modificar la lista (mòde brut)",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])",
- "unknown_extension_tag": "Balisa d'extension « $1 » desconeguda",
"duplicate-defaultsort": "Atencion : La clau de triada per defaut « $2 » espotís la mai recenta « $1 ».",
"duplicate-displaytitle": "<strong>Atencion :</strong> Lo títol d'afichatge «$2» remplaça l'ancian títol d'afichatge «$1».",
"version": "Version",
@@ -2818,7 +2819,7 @@
"version-parser-function-hooks": "Croquets de las foncions del parser",
"version-hook-name": "Nom del croquet",
"version-hook-subscribedby": "Definit per",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[sens nom]",
"version-license": "Licéncia de MediaWiki",
"version-ext-license": "Licéncia",
@@ -2832,7 +2833,7 @@
"version-license-not-found": "Cap d'informacion detalhada de la licéncia es pas estada trobada per aquesta extension.",
"version-credits-title": "Mercejaments per $1",
"version-credits-not-found": "Cap d'informacion detalhada dels mercejaments es pas estada trobada per aquesta extension.",
- "version-poweredby-credits": "Aqueste wiki fonciona gràcias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+ "version-poweredby-credits": "Aqueste wiki fonciona gràcias a <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
"version-poweredby-others": "autres",
"version-poweredby-translators": "traductors de translatewiki.net",
"version-software": "Logicial installat",
@@ -2841,6 +2842,9 @@
"version-entrypoints": "URL dels punts d'entrada",
"version-entrypoints-header-entrypoint": "Punt d'entrada",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Bibliotècas installadas",
+ "version-libraries-library": "Bibliotèca",
+ "version-libraries-version": "Version",
"redirect": "Redirigit per fichièr, utilizaire, pagina o ID de revision.",
"redirect-legend": "Redirigir cap a una pagina o un fichièr",
"redirect-submit": "Validar",
@@ -2852,7 +2856,7 @@
"redirect-file": "Nom del fichièr",
"redirect-not-exists": "Valor pas trobada",
"fileduplicatesearch": "Recèrca dels fichièrs en doble",
- "fileduplicatesearch-summary": "Recèrca per de fichièrs en doble sus la banca de valors fragmentàrias.",
+ "fileduplicatesearch-summary": "Recèrca de las còpias de fichièrs identics d'aprèp lor emprenta de hachatge.",
"fileduplicatesearch-legend": "Recèrca d’un doble",
"fileduplicatesearch-filename": "Nom del fichièr :",
"fileduplicatesearch-submit": "Recercar",
@@ -2875,9 +2879,10 @@
"specialpages-group-wiki": "Donadas e aisinas",
"specialpages-group-redirects": "Redireccions",
"specialpages-group-spam": "Aisinas antispam",
+ "specialpages-group-developer": "Aisinas del desvolopaire",
"blankpage": "Pagina voida",
"intentionallyblankpage": "Aquesta pagina es intencionalament voida e es utilizada coma un tèst de performància, eca.",
- "external_image_whitelist": " #Daissatz aquesta linha exactament coma es<pre>\n#Indicatz los fragments d’expression regularas (sonque la partida indicada entre los //) çaijós\n#Correspondràn amb las URLs dels imatges (fòrt ligadas) extèrnes\n#Las que correspondon s'aficharàn coma d'imatges, siquenon solament un ligam cap a l'imatge serà afichat\n#Las linhas que començan amb # seràn consideradas coma de comentaris\n#Aquesta linha es pas sensibla a la cassa\n\n#Metetz totes los fragments d’expressions regularas al dessús d'aquesta linha. Daissatz aquesta darrièra linha exactament coma es.</pre>",
+ "external_image_whitelist": " #Daissatz aquesta linha exactament coma es.<pre>\n#Indicatz los fragments d’expression racionalas (sonque la partida indicada entre los //) çaijós.\n#Correspondràn amb las URLs dels imatges extèrnes\n#Los que correspondon s'aficharàn coma d'imatges, siquenon solament un ligam cap a l'imatge serà afichat.\n#Las linhas que començan amb un # seràn consideradas coma de comentaris.\n#Aquesta linha es pas sensibla a la cassa.\n\n#Metètz totes los fragments d’expressions racionalas al dessús d'aquesta linha. Daissatz aquesta darrièra linha exactament coma es.</pre>",
"tags": "Balisas de las modificacions validas",
"tag-filter": "Filtrar las [[Special:Tags|balisas]] :",
"tag-filter-submit": "Filtrar",
@@ -2904,8 +2909,8 @@
"compare-revision-not-exists": "La revision qu'avètz especificada existís pas.",
"dberr-problems": "O planhèm ! Aqueste site rencontra de dificultats tecnicas.",
"dberr-again": "Ensajatz d'esperar qualques minutas e tornatz cargar.",
- "dberr-info": "(Se pòt pas connectar al servidor de la banca de donadas : $1)",
- "dberr-info-hidden": "(Connexion al servidor de la banca de donadas impossibla)",
+ "dberr-info": "(Accès a la banca de donadas impossible : $1)",
+ "dberr-info-hidden": "(Accès a la banca 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.",
@@ -2946,6 +2951,7 @@
"revdelete-uname-unhid": "nom d’utilizaire afichat",
"revdelete-restricted": "aplicar las restriccions als administrators",
"revdelete-unrestricted": "restriccions levadas pels administrators",
+ "logentry-merge-merge": "$1 {{GENDER:$2|a fusionat}} $3 en $4 (revisions fins a $5)",
"logentry-move-move": "$1 {{GENDER:$2|a desplaçat}} la pagina $3 cap a $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|a desplaçat}} la pagina $3 cap a $4 sens daissar cap de redireccion",
"logentry-move-move_redir": "$1 {{GENDER:$2|a desplaçat}} la pagina $3 cap a $4 per dessús una redireccion",
@@ -2964,18 +2970,19 @@
"logentry-upload-overwrite": "$1 {{GENDER:$2|a telecargat}} una novèla version de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|a telecargat}} $3",
"rightsnone": "(cap)",
- "feedback-subject": "Subjècte :",
- "feedback-message": "Messatge :",
- "feedback-cancel": "Anullar",
- "feedback-submit": "Mandar vòstres comentaris",
+ "revdelete-summary": "modificar lo somari",
"feedback-adding": "Apondon de vòstres comentaris a la pagina...",
+ "feedback-bugcheck": "Remirable ! Verificatz simplament qu'es pas un dels [$1 bugs ja coneguts].",
+ "feedback-bugnew": "Ai verificat. Senhalar un bug novèl",
+ "feedback-cancel": "Anullar",
+ "feedback-close": "Fach",
"feedback-error1": "Error : Resultat de l'IPA pas reconegut",
"feedback-error2": "Error : la modificacion a fracassat",
"feedback-error3": "Error : pas cap de responsa de l'API",
+ "feedback-message": "Messatge :",
+ "feedback-subject": "Subjècte :",
+ "feedback-submit": "Mandar",
"feedback-thanks": "Mercé ! Vòstre comentari es estat publicat sus la pagina \"[$2 $1]\".",
- "feedback-close": "Fach",
- "feedback-bugcheck": "Remirable ! Verificatz simplament qu'es pas un dels [$1 bugs ja coneguts].",
- "feedback-bugnew": "Ai verificat. Senhalar un bug novèl",
"searchsuggest-search": "Recercar",
"searchsuggest-containing": "que conten...",
"api-error-badaccess-groups": "Sètz pas autorizat a cargar de fichièrs sus aqueste wiki.",
@@ -3044,7 +3051,7 @@
"limitreport-expensivefunctioncount": "Nombre de foncions d’analisi costosas",
"expandtemplates": "Espandiment dels modèls",
"expand_templates_intro": "Aquesta pagina especiala accèpta un tèxte wiki source e permet de realizar recursivament l’espandiment dels modèls que conten.\nRealiza tanben l’espandiment de las foncions del parser talas coma\n<code><nowiki>{{</nowiki>#language:...}}</code> e de variablas coma\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nEn fach, realiza l'espandiment de gaireben tot çò qu'es enquadrat per d'acoladas doblas.",
- "expand_templates_title": "Títol de l’article, util per exemple se lo modèl utiliza {{FULLPAGENAME}} :",
+ "expand_templates_title": "Títol de la pagina, se lo còde utiliza {{FULLPAGENAME}}, etc. :",
"expand_templates_input": "Picatz vòstre tèxte aicí :",
"expand_templates_output": "Visualizatz lo resultat :",
"expand_templates_xml_output": "Sortida XML",
@@ -3066,5 +3073,44 @@
"log-description-pagelang": "Aquò es un jornal dels cambiaments dins las lengas de las paginas.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|a cambiat}} la lenga de la pagina $3 de $4 a $5.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activat)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivat''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivat''')",
+ "mediastatistics": "Estatisticas suls mèdias",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%)",
+ "mediastatistics-table-mimetype": "Tipe MIME",
+ "mediastatistics-table-extensions": "Extensions possiblas",
+ "mediastatistics-table-count": "Nombre de fichièrs",
+ "mediastatistics-table-totalbytes": "Talha combinada",
+ "mediastatistics-header-unknown": "Desconegut",
+ "mediastatistics-header-bitmap": "Imatges Bitmap",
+ "mediastatistics-header-drawing": "Dessenhs (imatges vectorials)",
+ "mediastatistics-header-audio": "Àudio",
+ "mediastatistics-header-video": "Vidèos",
+ "mediastatistics-header-multimedia": "Mèdia ric",
+ "mediastatistics-header-office": "Burotica",
+ "mediastatistics-header-text": "Textual",
+ "mediastatistics-header-executable": "Executables",
+ "mediastatistics-header-archive": "Formats compressats",
+ "json-error-syntax": "Error de sintaxi",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Latin espandit",
+ "special-characters-group-ipa": "API",
+ "special-characters-group-symbols": "Simbòls",
+ "special-characters-group-greek": "Grèc",
+ "special-characters-group-cyrillic": "Cirillic",
+ "special-characters-group-arabic": "Arabi",
+ "special-characters-group-arabicextended": "arabi espandit",
+ "special-characters-group-persian": "Pèrse",
+ "special-characters-group-hebrew": "Ebrieu",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tamol",
+ "special-characters-group-telugu": "Telogó",
+ "special-characters-group-sinhala": "Cingalés",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Tai",
+ "special-characters-group-lao": "Laocian",
+ "special-characters-group-khmer": "Cmèr",
+ "special-characters-title-endash": "jonhent anglés",
+ "special-characters-title-emdash": "jonhent em",
+ "special-characters-title-minus": "signe mens"
}
diff --git a/languages/i18n/om.json b/languages/i18n/om.json
index 572e4edb..aae5efd4 100644
--- a/languages/i18n/om.json
+++ b/languages/i18n/om.json
@@ -1,70 +1,72 @@
{
- "@metadata": {
- "authors": [
- "Diroma Elias (on om.wikipedia.org)",
- "Johannes Rohr (on om.wikipedia.org)",
- "Malafaya",
- "Node ue"
- ]
- },
- "sunday": "Dilbata",
- "monday": "Wiixata",
- "tuesday": "Qibxata",
- "wednesday": "Roobii",
- "thursday": "Kamiisa",
- "friday": "Jimaata",
- "saturday": "Sanbata",
- "sun": "Dil",
- "mon": "Wix",
- "tue": "Qib",
- "wed": "Rob",
- "thu": "Kam",
- "fri": "Jim",
- "sat": "San",
- "january": "Amajjii",
- "february": "Guraandhala",
- "march": "Bitooteessa",
- "april": "Elba",
- "may_long": "Caamsa",
- "june": "Waxabajjii",
- "july": "Adooleessa",
- "august": "Hagayya",
- "september": "Fuulbana",
- "october": "Onkololeessa",
- "november": "Sadaasa",
- "december": "Muddee",
- "about": "Wa'ee",
- "article": "Kutaa",
- "and": "&#32;fi",
- "help": "Qarqarsa",
- "go": "Fufi",
- "history": "Seena",
- "history_short": "Seena",
- "edit": "Barressu",
- "aboutsite": "Wa'ee {{SITENAME}}",
- "aboutpage": "Project:Wa'ee",
- "currentevents": "Gocha amma",
- "edithelp": "Qarqarsa Barressu",
- "mainpage": "Fuula Dura",
- "mainpage-description": "Fuula Dura",
- "yourname": "Maqaa-Tajajilamma:",
- "yourdomainname": "Maqaa domain kankee:",
- "gotaccountlink": "Seenu",
- "accountcreated": "Accountiin banamerra",
- "loginlanguagelabel": "Afaan: $1",
- "yourtext": "Barrefama kee",
- "yourdiff": "Garagarumma",
- "yourrealname": "Maqaa Dhugaa:",
- "yourlanguage": "Afaan:",
- "yourvariant": "Jijjirama:",
- "upload": "File Galchu",
- "filerevert-comment": "Sababa:",
- "filedelete-comment": "Sababa:",
- "allarticles": "Kutta hunda",
- "actioncomplete": "Gochaan dhumattera",
- "deletecomment": "Sababa:",
- "ipbreason": "Sababa:",
- "movereason": "Sababa:",
- "allmessagesname": "Maqaa",
- "allmessages-language": "Afaan:"
+ "@metadata": {
+ "authors": [
+ "Diroma Elias (on om.wikipedia.org)",
+ "Johannes Rohr (on om.wikipedia.org)",
+ "Malafaya",
+ "Node ue",
+ "Tumsaa"
+ ]
+ },
+ "sunday": "Dilbata",
+ "monday": "Wiixata",
+ "tuesday": "Qibxata",
+ "wednesday": "Roobii",
+ "thursday": "Kamiisa",
+ "friday": "Jimaata",
+ "saturday": "Sanbata",
+ "sun": "Dil",
+ "mon": "Wix",
+ "tue": "Qib",
+ "wed": "Rob",
+ "thu": "Kam",
+ "fri": "Jim",
+ "sat": "San",
+ "january": "Amajjii",
+ "february": "Guraandhala",
+ "march": "Bitooteessa",
+ "april": "Elba",
+ "may_long": "Caamsa",
+ "june": "Waxabajjii",
+ "july": "Adooleessa",
+ "august": "Hagayya",
+ "september": "Fuulbana",
+ "october": "Onkololeessa",
+ "november": "Sadaasa",
+ "december": "Muddee",
+ "about": "Wa'ee",
+ "article": "Kutaa",
+ "and": "&#32;fi",
+ "help": "Qarqarsa",
+ "go": "Fufi",
+ "history": "Seena",
+ "history_short": "Seena",
+ "edit": "Barressu",
+ "aboutsite": "Wa'ee {{SITENAME}}",
+ "aboutpage": "Project:Wa'ee",
+ "currentevents": "Gocha amma",
+ "edithelp": "Qarqarsa Barressu",
+ "mainpage": "Fuula Dura",
+ "mainpage-description": "Fuula Dura",
+ "yourname": "Maqaa-Tajajilamma:",
+ "yourdomainname": "Maqaa domain kankee:",
+ "gotaccountlink": "Seenu",
+ "accountcreated": "Accountiin banamerra",
+ "loginlanguagelabel": "Afaan: $1",
+ "yourtext": "Barrefama kee",
+ "yourdiff": "Garagarumma",
+ "yourrealname": "Maqaa Dhugaa:",
+ "yourlanguage": "Afaan:",
+ "yourvariant": "Jijjirama:",
+ "upload": "File Galchu",
+ "filerevert-comment": "Sababa:",
+ "filedelete-comment": "Sababa:",
+ "booksources-search": "Barbaadi",
+ "allarticles": "Kutta hunda",
+ "actioncomplete": "Gochaan dhumattera",
+ "deletecomment": "Sababa:",
+ "ipbreason": "Sababa:",
+ "movereason": "Sababa:",
+ "allmessagesname": "Maqaa",
+ "allmessages-language": "Afaan:"
}
diff --git a/languages/i18n/or.json b/languages/i18n/or.json
index 074b9c7d..a89a2292 100644
--- a/languages/i18n/or.json
+++ b/languages/i18n/or.json
@@ -11,7 +11,8 @@
"Sambiwiki",
"Shisir 1945",
"ଶିତିକଣ୍ଠ ଦାଶ",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "ତଳେ ଥିବା ଲିଙ୍କ:",
@@ -28,6 +29,7 @@
"tog-watchdefault": "ମୁଁ ବଦଳେଇଥିବା ପୃଷ୍ଠା ଏବଂ ଫାଇଲଗୁଡ଼ିକୁ ମୋର ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ନ୍ତୁ",
"tog-watchmoves": "ମୁଁ ଘୁଞ୍ଚାଇଥିବା ପୃଷ୍ଠା ଏବଂ ଫାଇଲଗୁଡ଼ିକୁ ମୋର ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ନ୍ତୁ",
"tog-watchdeletion": "ମୁଁ ଲିଭାଇଥିବା ପୃଷ୍ଠା ଏବଂ ଫାଇଲଗୁଡ଼ିକୁ ମୋର ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ନ୍ତୁ",
+ "tog-watchrollback": "ମୁଁ ପଛକୁ ଫେରାଇଦେଇଥିବା ମୋ ଦେଖଣାତାଲିକାର ପୃଷ୍ଠାସବୁକୁ ଯୋଡ଼ନ୍ତୁ",
"tog-minordefault": "ସବୁଯାକ ସମ୍ପାଦନାକୁ ଛାଏଁ ଛୋଟ ବଦଳ ଭାବରେ ସୂଚିତ କରିବେ",
"tog-previewontop": "ଏଡ଼ିଟ ବାକ୍ସ ଆଗରୁ ଦେଖଣା ଦେଖାଇବେ",
"tog-previewonfirst": "ପ୍ରଥମ ବଦଳର ଦେଖଣା ଦେଖାଇବେ",
@@ -213,6 +215,7 @@
"otherlanguages": "ଅଲଗା ଭାଷାରେ",
"redirectedfrom": "($1 ରୁ ଲେଉଟି ଆସିଛି)",
"redirectpagesub": "ଆଉଥରେ ଫେରିବା ପୃଷ୍ଠା",
+ "redirectto": "କେଉଁଠାକୁ ଲେଉଟାଣି:",
"lastmodifiedat": "ଏହି ପୃଷ୍ଠାଟି $1 ତାରିଖ $2 ବେଳେ ବଦଳାଯାଇଥିଲା ।",
"viewcount": "ଏହି ପୃଷ୍ଠାଟି {{PLURAL:$1|ଥରେ|$1 ଥର}} ଖୋଲାଯାଇଛି ।",
"protectedpage": "କିଳାଯାଇଥିବା ପୃଷ୍ଠା",
@@ -220,9 +223,11 @@
"jumptonavigation": "ଦିଗବାରେଣିକୁ",
"jumptosearch": "ଖୋଜିବେ",
"view-pool-error": "କ୍ଷମା କରିବେ, ସର୍ଭରସବୁ ଏବେ ମନ୍ଦ ହୋଇଯାଇଅଛନ୍ତି ।\nଅନେକ ସଭ୍ୟ ଏହି ଏକା ପୃଷ୍ଠାଟି ଦେଖିବାକୁ ଚେଷ୍ଟାକରୁଅଛନ୍ତି ।\nଏହି ପୃଷ୍ଠାକୁ ଆଉଥରେ ଖୋଲିବା ଆଗରୁ ଦୟାକରି କିଛି କ୍ଷଣ ଅପେକ୍ଷା କରନ୍ତୁ ।\n$1",
+ "generic-pool-error": "କ୍ଷମା କରିବେ, ସର୍ଭରସବୁ ଏବେ ଓଭରଲୋଡ଼ ଯାଇଛନ୍ତି ।\nଅନେକ ସଭ୍ୟ ଏହି ଏକା ପୃଷ୍ଠାଟି ଦେଖିବାକୁ ଚେଷ୍ଟା କରୁଛନ୍ତି ।\nଏହି ପୃଷ୍ଠାକୁ ଆଉଥରେ ଖୋଲିବା ଆଗରୁ ଦୟାକରି କିଛି କ୍ଷଣ ଅପେକ୍ଷା କରନ୍ତୁ ।",
"pool-timeout": "ତାଲା ଖୋଲାଯିବା ପାଇଁ ଅପେକ୍ଷା କରୁକରୁ ସମୟ ସରିଗଲା",
"pool-queuefull": "ପୁଲ ଧାଡ଼ିଟି ଭରିଯାଇଅଛି",
"pool-errorunknown": "ଅଜଣା ଅସୁବିଧା",
+ "pool-servererror": "ଏହି ପୁଲ କାଉଣ୍ଟର ସର୍ଭିସ ଉପଲବ୍ଧ ($1) ନାହିଁ ।",
"aboutsite": "{{SITENAME}} ବାବଦରେ",
"aboutpage": "Project:ବାବଦରେ",
"copyright": "ଯଦି ଉଲ୍ଲେଖ ହୋଇନାହିଁ ଏହା $1 ଅଧୀନରେ ବିତରିତ ।",
@@ -263,6 +268,9 @@
"hidetoc": "ଲୁଚାନ୍ତୁ",
"collapsible-collapse": "ଲୁଚାଇବେ",
"collapsible-expand": "ଦେଖାଇବେ",
+ "confirmable-confirm": "{{GENDER:$1|ଆପଣ}} ନିଶ୍ଚିତ କି?",
+ "confirmable-yes": "ହଁ",
+ "confirmable-no": "ନାଁ",
"thisisdeleted": "$1 କୁ ଦେଖିବେ ଅବା ପୁନସ୍ଥାପନ କରିବେ?",
"viewdeleted": "ଦେଖିବା $1?",
"restorelink": "{{PLURAL:$1|ଗୋଟିଏ ଲିଭାଯାଇଥିବା ବଦଳ|$1ଟି ଲିଭାଯାଇଥିବା ବଦଳ}}",
@@ -273,7 +281,7 @@
"site-atom-feed": "$1 ଆଟମ ଫିଡ଼",
"page-rss-feed": "$1 ଟି ଆରେସେସ ଫିଡ଼",
"page-atom-feed": "$1 ଟି ଆଟମ ଫିଡ଼",
- "red-link-title": " $1 (ପୃଷ୍ଠାଟି ନାହିଁ)",
+ "red-link-title": "$1 (ପୃଷ୍ଠାଟି ନାହିଁ)",
"sort-descending": "ବଡ଼ରୁ ସାନ କ୍ରମେ ସଜାନ୍ତୁ",
"sort-ascending": "ସାନରୁ ବଡ଼ କ୍ରମେ ସଜାନ୍ତୁ",
"nstab-main": "ପୃଷ୍ଠା",
@@ -318,6 +326,7 @@
"cannotdelete": "\"$1\" ପୃଷ୍ଠା ବା ଫାଇଲଟି ଲିଭାଯାଇପାରିବ ନାହିଁ । ଏହା ଆଗରୁ କାହା ଦେଇ ବୋଧେ ଲିଭାଇ ଦିଆଯାଇଛି ।",
"cannotdelete-title": "\"$1\" ପୃଷ୍ଠାଟି ଲିଭଯାଇପାରିବ ନାହିଁ",
"delete-hook-aborted": "ସମ୍ପାଦନା ଏକ ହୁକ (hook) ଦେଇ ବାରଣ କରାଗଲା ।\nଏହା କିଛି ବି କାରଣ ଦେଇନାହିଁ ।",
+ "no-null-revision": "\"$1\" ପୃଷ୍ଠାଟି ପାଇଁ ଫାଙ୍କା ସଂସ୍କରଣଟିଏ ତିଆରି କରିପାରିଲୁ ନାହିଁ",
"badtitle": "ଖରାପ ନାଆଁ",
"badtitletext": "ଆପଣ ଅନୁରୋଧ କରିଥିବା ପୃଷ୍ଠାଟି ଭୁଲ, ଖାଲି ଅଛି ବା ବାକି ଭାଷା ସାଙ୍ଗରେ ଭୁଲରେ ଯୋଡ଼ା ଯାଇଛି ବା ଭୁଲ ଇଣ୍ଟର ଉଇକି ନାମ ଦିଆଯାଇଛି ।\nଏଥିରେ ଥିବା ଗୋଟିଏ ବା ଦୁଇଟି ଅକ୍ଷର ଶିରୋନାମା ଭାବରେ ବ୍ୟବହାର କରାଯାଇ ପାରିବ ନାହିଁ ।",
"perfcached": "ତଳଲିଖିତ ତଥ୍ୟଗୁଡିକୁ ଅସ୍ଥାୟୀ ଭାବେ ରଖାଗଲା ଏବଂ ଏହା ଅପଡେଟ ନ ହୋଇପାରେ । ଅତିବେଶିରେ {{PLURAL:$1|ଫଳ|$1ଫଳଗୁଡିକ }} ଅସ୍ଥାୟୀ ରୂପେ ରହି ପାରିବ ।",
@@ -336,13 +345,17 @@
"namespaceprotected": "ଆପଣଙ୍କୁ ଏହି '''$1''' ନେମସ୍ପେସ ଥିବା ପୃଷ୍ଠାରେ ସମ୍ପାଦନା କରିବା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ ।",
"customcssprotected": "ଆପଣଙ୍କୁ ଏହି CSS ପୃଷ୍ଠାର ସମ୍ପାଦନା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ, କାରଣ ଏଥିରେ ଆଉଜଣେ ସଭ୍ୟଙ୍କର ବ୍ୟକ୍ତିଗତ ସଜାଣି ରହିଅଛି ।",
"customjsprotected": "ଆପଣଙ୍କୁ ଏହି ଜାଭାସ୍କ୍ରିପ୍ଟ ପୃଷ୍ଠାର ସମ୍ପାଦନା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ, କାରଣ ଏଥିରେ ଆଉଜଣେ ସଭ୍ୟଙ୍କର ବ୍ୟକ୍ତିଗତ ସଜାଣି ରହିଅଛି ।",
+ "mycustomcssprotected": "ଏହି CSS ପୃଷ୍ଠାଟି ସମ୍ପାଦନା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
+ "mycustomjsprotected": "ଏହି JavaScript ପୃଷ୍ଠାଟି ସମ୍ପାଦନା କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
+ "myprivateinfoprotected": "ନିଜର ଗୋପନୀୟ ସୂଚନା ସମ୍ପାଦନା କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
+ "mypreferencesprotected": "ନିଜର ପସନ୍ଦ ସମ୍ପାଦନା କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
"ns-specialprotected": "ବିଶେଷ ପୃଷ୍ଠାସବୁକୁ ବଦଳାଯାଇପାରିବ ନାହିଁ ।",
"titleprotected": "ଏହି ନାମଟି [[User:$1|$1]]ଙ୍କ ଦେଇ ନୂଆ ତିଆରିହେବାରୁ କିଳାଯାଇଅଛି ।\nଏହାର କାରଣ ହେଲା \"''$2''\" ।",
"filereadonlyerror": "ଫାଇଲ ଧାରକ \"$2\"ଟି ଖାଲି ପଢିବା ହେବାଭଳି ରହିଥିବା ହେତୁ ଏଥିରେ ଥିବା $1 ପାଇଲଟିକୁ ବଦଳା ଯାଇପାରିବ ନାହିଁ ।\n\nଯେଉଁ ପରିଚ୍ଛା ଏହାକୁ ବନ୍ଦ କରିଛନ୍ତି ସେ ଏହି ବିବରଣୀ ଦେଇଛନ୍ତି: \"$3\"",
"invalidtitle-knownnamespace": "\"$2\" ନେମସ୍ପେସ ଏବଂ \"$3\" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।",
"invalidtitle-unknownnamespace": "\"$1\" ନେମ୍ସ୍ପେସ ଏବଂ \"$2\" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।",
"exception-nologin": "ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି",
- "exception-nologin-text": "ଏହି ପୃଷ୍ଠା ପଢ଼ିବା ପାଇଁ ଦୟାକରି [[Special:Userlogin|ଲଗ ଇନ]] କରନ୍ତୁ ।",
+ "exception-nologin-text": "ଏହି ପୃଷ୍ଠା ପଢ଼ିବା ପାଇଁ ଦୟାକରି ଲଗ ଇନ କରନ୍ତୁ ।",
"exception-nologin-text-manual": "ଏହି ପୃଷ୍ଠା ଦେଖିବା ନିମନ୍ତେ $1 କରନ୍ତୁ ।",
"virus-badscanner": "ମନ୍ଦ ସଂରଚନା: ଅଜଣା ଭାଇରସ ସ୍କାନର: ''$1''",
"virus-scanfailed": "ସ୍କାନ କରିବା ବିଫଳ ହେଲା (କୋଡ଼ $1)",
@@ -447,6 +460,7 @@
"createaccount-text": "କେହି ଜଣେ ଆପଣଙ୍କ ଇ-ମେଲ ଠିକଣାରେ {{SITENAME}} ($4) ରେ \"$2\" ନାମରେ, \"$3\" ପାସୱାର୍ଡ଼ରେ ଖାତାଟିଏ ତିଆରି କରିଅଛି ।\nଆପଣ ଏବେ ଲଗ ଇନ କରି ନିଜର ପାସବାର୍ଡ଼ଟିକୁ ବଦଳାଇଦିଅନ୍ତୁ ।\n\nଯଦି ଭୁଲରେ ଏହି ଖାତାଟି ତିଆରି କରାଯାଇଥାଏ, ତେବେ ଏହି ସୂଚନାଟିକୁ ଅଣଦେଖା କରିବେ ।",
"login-throttled": "ଆପଣ ନିକଟରେ ଖୁବ ଅଧିକ ଥର ଲଗ ଇନ କରିବାକୁ ଚେଷ୍ଟା କରିଛନ୍ତି ।\nଆଉ ଅଧିକ ଥର ଚେଷ୍ଟା କରିବା ଆଗରୁ ଦୟାକରି $1 ପାଇଁ ଅପେକ୍ଷା କରନ୍ତୁ ।",
"login-abort-generic": "ଆପଣଙ୍କ ଲଗ ଇନ ଅସଫଳ ହେଲା - ନାକଚ କରିଦିଆଗଲା",
+ "login-migrated-generic": "ଆପନଙ୍କ ଖାତା ଘୁଞ୍ଚାଯାଇଛି ଏବଂ ଏହି ଉଇକିରେ ଏହା ଆଉ ନାହିଁ ।",
"loginlanguagelabel": "ଭାଷା: $1",
"suspicious-userlogout": "ଲଗ ଆଉଟ କରିବା ନିମନ୍ତେ ଆପଣ କରିଥିବା ଆବେଦନ ନାକଚ କରିଦିଆଗଲା କାରଣ ଲାଗୁଅଛି ଯେ ଏହା ଏକ ଅସ୍ଥିର ବ୍ରାଉଜରରୁ ପଠାଯାଇଅଛି ଅବା ପ୍ରକ୍ସି ଧରାଯାଇଅଛି ।",
"createacct-another-realname-tip": "ପ୍ରକୃତ ନାମ ଦେବା ଆପଣଙ୍କ ଉପରେ ନିର୍ଭର କରେ ।\nଯଦି ଆପଣ ଏହା ଦିଅନ୍ତି, ତେବେ ଏହା ଆପଣଙ୍କ କାମ ପାଇଁ ଶ୍ରେୟ ଦେବାରେ ବ୍ୟବହାର କରାଯାଇପାରିବ ।",
@@ -476,8 +490,11 @@
"resetpass-temp-password": "ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼:",
"resetpass-abort-generic": "ଏକ ଏକ୍ସଟେନସନ ଦ୍ୱାରା ପାସୱାର୍ଡ଼ ବଦଳ କରିବା ରଦ୍ଦ କରାଯାଇଛି ।",
"resetpass-expired": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ ଅଚଳ ହୋଇଯାଇଛି । ଦୟାକରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ଦିଅନ୍ତୁ ।",
+ "resetpass-expired-soft": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ର ଅବଧି ସରିଯାଇଛି ଓ ଆଉଥରେ ବଦଳାଇବାକୁ ପଡ଼ିବ । ଦୟାକରି ଏବେ ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ବାଛନ୍ତୁ କିମ୍ବା \"{{int:resetpass-submit-cancel}}\"ରେ କ୍ଲିକ କରି ପରେ ରିସେଟ କରନ୍ତୁ ।",
+ "resetpass-validity-soft": "ଆପଣଙ୍କ ପାସୱାର୍ଡ଼ ବୈଧ ନୁହେଁ: $1\n\nଦୟାକରି ନୂଆ ପାସୱାର୍ଡ଼ଟିଏ ତିଆରି କରନ୍ତୁ, କିମ୍ବା ପରେ ରିସେଟ କରିବା ପାଇଁ \"{{int:resetpass-submit-cancel}}\"ରେ କ୍ଲିକ କରନ୍ତୁ ।",
"passwordreset": "ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ କରନ୍ତୁ",
"passwordreset-text-one": "ଏକ ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ ପାଇବା ପାଇଁ ଏହି ଫର୍ମଟି ସମ୍ପୂର୍ଣ୍ଣ ଭାବେ ପୂରଣ କରନ୍ତୁ ।",
+ "passwordreset-text-many": "{{PLURAL:$1|ଇମେଲ ଯୋଗେ ଏକ ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ ପାଇବା ପାଇଁ ତଳ ଘର ମଧ୍ୟରୁ ଗୋଟେ ଭରନ୍ତୁ ।}}",
"passwordreset-legend": "ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ କରନ୍ତୁ",
"passwordreset-disabled": "ପାସୱାର୍ଡ଼କୁ ପୁରାପୁରି ମୂଳକୁ ଫେରାଇବା ଏହି ଉଇକିରେ ଅଚଳ କରାଯାଇଅଛି ।",
"passwordreset-emaildisabled": "ଏହି ଉଇକିରେ ଇମେଲ ସୁବିଧା ଅଚଳ କରାଯାଇଅଛି ।",
@@ -494,7 +511,6 @@
"passwordreset-emailsent-capture": "ତଳେ ଦେଖାଯାଉଥିବା ଭଳି, ପାସୱାର୍ଡ଼ ପୁନଃସ୍ଥାପନ ଇମେଲଟିଏ ପଠାଇଦିଆଯାଇଛି ।",
"passwordreset-emailerror-capture": "ପାସୱାର୍ଡ଼ ବଦଳାଇବା ସୂଚନା ସହ ଇମେଲଟିଏ ତିଆରି ହୋଇଛି, ଯାହା ତଳେ ଦେଖିପାରିବେ । କିନ୍ତୁ ଏହାକୁ {{GENDER:$2|ସଭ୍ୟ}}ଙ୍କୁ ପଠାଇବାରେ ବିଫଳ ହେଲୁ, କାରଣ: $1",
"changeemail": "ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
- "changeemail-header": "ଖାତା ଇ-ମେଲ ଠିକଣା ବଦଳାଇବେ",
"changeemail-text": "ଆପଣା ଇ-ମେଲ ଠିକଣା ବଦଳାଇବା ନିମନ୍ତେ ଏହି ଆବେଦନ ପତ୍ରଟି ପୂରଣ କରନ୍ତୁ । ଆପଣଙ୍କୁ ଏହି ବଦଳ ଥୟ କରିବା ପାଇଁ ନିଜର ପାସୱାର୍ଡ଼ ଦେବାକୁ ପଡ଼ିବ ।",
"changeemail-no-info": "ଏହି ପୃଷ୍ଠାଟିକୁ ସିଧା ଖୋଲିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଲଗ ଇନ କରିବାକୁ ପଡ଼ିବ ।",
"changeemail-oldemail": "ଏବେକାର ଇ-ମେଲ ଠିକଣା:",
@@ -502,13 +518,14 @@
"changeemail-none": "(କିଛି ନାହିଁ)",
"changeemail-password": "ଆପଣଙ୍କ {{SITENAME}} ପାସୱାର୍ଡ",
"changeemail-submit": "ଇ-ମେଲ ପରିର୍ବତ୍ତନ କରନ୍ତୁ",
- "changeemail-cancel": "ନାକଚ",
"changeemail-throttled": "ଆପଣ ଏକାଧିକ ଥର ଲଗ ଇନ କରିବାକୁ ଚେଷ୍ଟା କରିଥାଇପାରନ୍ତି ।\nଆଉଥରେ ଚେଷ୍ଟା କରିବା ଆଗରୁ ଦୟାକରି $1 ଅପେକ୍ଷା କରନ୍ତୁ ।",
"resettokens": "ଟୋକନ ରିସେଟ କରନ୍ତୁ",
+ "resettokens-text": "ଏଠାରେ, ନିଜର ଖାତା ସହ ଯୋଡ଼ା କେତେକ ଗୋପନୀୟ ତଥ୍ୟ ଜାଣିବାକୁ ଲୋଡ଼ା ପଡ଼ୁଥିବା ଟୋକନ ରିସେଟ କରିପାରିବେ ।\n\nଆପଣ ଯଦି ଦୈବାତ କେବେ ନିଜର ଟୋକନ ଆଉ କାହାକୁ ଜଣାଇଥାନ୍ତି କିମ୍ବା ଆପଣଙ୍କ ଖାତା ଆଉ କାହା ଦେଇ ଖୋଲାଯାଇଥିଲେ ନିଶ୍ଚିତ ରିସେଟ କରନ୍ତୁ ।",
"resettokens-no-tokens": "ରିସେଟ କରିବା ପାଇଁ ଆଉ ଟୋକନ ନାହିଁ ।",
"resettokens-legend": "ଟୋକନ ରିସେଟ କରନ୍ତୁ",
"resettokens-tokens": "ଟୋକନମାନ:",
"resettokens-token-label": "$1 (ବର୍ତ୍ତମାନ: $2)",
+ "resettokens-watchlist-token": "[[Special:Watchlist|ନିଜର ଦେଖଣାତାଲିକରେ ହେଉଥିବା ବଦଳ]]ର ୱେବ ଫିଡ଼ ପାଇଁ ଟୋକନ (ଆଟମ/RSS)",
"resettokens-done": "ଟୋକନ ରିସେଟ ହେଲା ।",
"resettokens-resetbutton": "ବଛାଯାଇଥିବା ଟୋକନ ରିସେଟ କରନ୍ତୁ",
"bold_sample": "ମୋଟା ଲେଖା",
@@ -535,7 +552,8 @@
"preview": "ସାଇତିବା ଆଗରୁ ଦେଖନ୍ତୁ",
"showpreview": "ଦେଖଣା [Preview]",
"showdiff": "ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
- "anoneditwarning": "'''ସାବଧାନ:''' ଆପଣ ଲଗ-ଇନ କରିନାହାନ୍ତି ।\nଏହି ପୃଷ୍ଠାର ଇତିହାସରେ ଆପଣଙ୍କ IP Address ଟି ସାଇତା ହୋଇଯିବ ।",
+ "blankarticle": "<strong>ଚେତାବନୀ:</strong> ଆପଣ ସମ୍ପାଦନା କରୁଥିବା ଏହି ପୃଷ୍ଠାଟି ଫାଙ୍କା ଅଛି ।\nଯଦି ଆପଣ \"{{int:savearticle}}\" ଉପରେ ଆଉଥରେ କ୍ଲିକ କରନ୍ତି, ପୃଷ୍ଠାଟି କୌଣସି ବିଷୟବସ୍ତୁ ନଥାଇ ତିଆରି ହୋଇଯିବ ।",
+ "anoneditwarning": "<strong>ସାବଧାନ:</strong> ଆପଣ ଲଗ-ଇନ କରିନାହାନ୍ତି । ଅଧିକ ସମ୍ପାଦନା କଲେ ଆପଣଙ୍କ IP Address ଟି ସମସ୍ତଙ୍କୁ ଦେଖାଯିବ । <strong>[$1ଲଗ ଇନ କଲେ]</strong> କିମ୍ବା <strong>[$2 ନୂଆ ଖାତାଟିଏ ତିଆରି କଲେ]</strong>, ଆପଣଙ୍କ ସମ୍ପାଦନାର ଶ୍ରେୟ ଅନ୍ୟାନ୍ୟ ସୁବିଧା ସହିତ ଆପଣଙ୍କ ଇଉଜର ନାମରେ ଦିଆହେବ ।",
"anonpreviewwarning": "''ଆପଣ ଲଗ ଇନ କରି ନାହାନ୍ତି । ବଦଳକରି ସାଇତିଲେ ଆପଣଙ୍କର IP ଠିକଣା ଏହି ପୃଷ୍ଠାର ଇତିହାସରେ ସାଇତା ହୋଇଯିବ ।''",
"missingsummary": "'''ଚେତାବନୀ:''' ଆପଣ ଏକ ସମ୍ପାଦନା ସାରକଥା ଦେଇନାହାନ୍ତି ।\nଯଦି ଆପଣ \"{{int:savearticle}}\"ରେ ଆଉଥରେ କ୍ଲିକ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ବଦଳ ସାରକଥା ବିନା ସାଇତା ହୋଇଯିବ ।",
"missingcommenttext": "ଦୟାକରି ତଳେ ଏକ ମତାମତ ଦିଅନ୍ତୁ ।",
@@ -630,6 +648,7 @@
"content-not-allowed-here": "\"$1\" ବିଷୟଗୁଡିକ [[$2]]ପୃଷ୍ଠାରେ ରହିପାରିବ ନାହିଁ",
"editwarning-warning": "ଏହି ପୃଷ୍ଠାଟି ଛାଡ଼ି ଚାଲିଗଲେ ଆପଣ ଆଗରୁ କରିଥିବା ସମ୍ପାଦନା ହରାଇବେ । ଯଦି ଆପଣ ଲଗ ଇନ କରିଥାନ୍ତି ନିଜ ପସନ୍ଦ ପୃଷ୍ଠାର \"{{int:prefs-editing}}\" ବିଭାଗରେ ଏହି ଚେତାବନୀଟି ନିଷ୍କ୍ରିୟ କରିପାରିବେ ।",
"editpage-notsupportedcontentformat-title": "କଣ୍ଟେଣ୍ଟର ସଂରଚନା ସମର୍ଥିତ ନୁହେଁ",
+ "editpage-notsupportedcontentformat-text": "$1ର ବିଷୟବସ୍ତୁର ସଜାଣି $2ର ବିଷୟବସ୍ତୁ ମଡ଼େଲ ସହିତ ମେଳ ଖାଉନାହିଁ ।",
"content-model-wikitext": "ଉଇକିଟେକ୍ସଟ",
"content-model-text": "ଖାଲି ଲେଖା",
"content-model-javascript": "ଜାଭାସ୍କ୍ରିପ୍ଟ",
@@ -644,8 +663,10 @@
"parser-template-recursion-depth-warning": "ଛାଞ୍ଚର ବାରମ୍ବାର ପ୍ରତୀତ ହେବା କ୍ଷମତା ପାର ହୋଇଅଛି ($1)",
"language-converter-depth-warning": "ଭାଷା ରୂପାନ୍ତରଣ କ୍ଷମତା ସରିଯାଇଅଛି ($1)",
"node-count-exceeded-category": "ପୃଷ୍ଠାଗୁଡିକ ଯେଉଁଠି ନୋଡ-ଗଣନା ଅତ୍ୟଧିକ ହୋଇଯାଇଛି",
+ "node-count-exceeded-category-desc": "ଏହି ପୃଷ୍ଠା ସର୍ବାଧିକ ନୋଡ଼ ଗଣନାରୁ ବଳିଗଲା ।",
"node-count-exceeded-warning": "ପୃଷ୍ଠାଟି ନୋଡ-ଗଣନାରୁ ଅଧିକ ହୋଇଗଲା",
"expansion-depth-exceeded-category": "ଯେଉଁ ପୃଷ୍ଠାଗୁଡିକରେ ବିସ୍ତ୍ରୁତ ଗଭୀରତା ଅତ୍ୟଧିକ ହୋଇଯାଇଛି",
+ "expansion-depth-exceeded-category-desc": "ଏହି ପୃଷ୍ଠାର ସର୍ବାଧିକ ଲମ୍ବା ହେବା ଠାରୁ ବଳିଗଲାଣି",
"expansion-depth-exceeded-warning": "ପୃଷ୍ଠାଟି ବିସ୍ତ୍ରୁତ ଗଭୀରତାରୁ ଅଧିକ ହୋଇଗଲା",
"parser-unstrip-loop-warning": "ଅଜଣା ଲୁପ ଜଣାପଡିଲା",
"parser-unstrip-recursion-limit": "ଅଜଣା ଚକ୍ରର ସୀମା ଅତ୍ୟଧିକ ହୋଇଗଲା ($1)",
@@ -658,12 +679,13 @@
"undo-summary-username-hidden": "ଜଣେ ଅଜଣା ସଭ୍ୟଙ୍କ ଦେଇ ହୋଇଥିବା $1 ସଂସ୍କରଣଟି ପଛକୁ ଫେରାନ୍ତୁ",
"cantcreateaccounttitle": "ଖାତାଟିଏ ତିଆରି କରାଯାଇପାରିବ ନାହିଁ",
"cantcreateaccount-text": "[[User:$3|$3]]ଙ୍କ ଦେଇ ('''$1''') IP ଠିକଣାରୁ ଖାତା ଖୋଲିବାକୁ ବାରଣ କରାଯାଇଅଛି ।\n\n$3ଙ୍କ ଦେଇ ଦିଆଯାଇଥିବା କାରଣ ହେଲା ''$2''",
+ "cantcreateaccount-range-text": "ଆପଣଙ୍କ IP Address ('''$4''') ସମେତ '''$1''' ସୀମା ଭିତରେ ଥିବା IP Address ରୁ [[User:$3|$3]]ଙ୍କ ଦ୍ୱାରା ନୂଆ ଖାତା ତିଆରିକୁ ଅଟକାଯାଇଛି ।\n\n$3ଙ୍କ ଦ୍ୱାରା ଏହାର କାରଣ ଦିଆଯାଇଛି: ''$2''",
"viewpagelogs": "ଏହି ପୃଷ୍ଠା ପାଇଁ ଲଗଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ ।",
"nohistory": "ଏହି ପୃଷ୍ଠା ନିମନ୍ତେ କିଛି ବି ସମ୍ପାଦନା ଇତିହାସ ନାହିଁ ।",
"currentrev": "ନଗଦ ସଙ୍କଳନ",
"currentrev-asof": "$1 ହୋଇଥିବା ରିଭିଜନ",
"revisionasof": "$1 ଅନୁସାରେ କରାଯାଇଥିବା ବଦଳ",
- "revision-info": "$2ଙ୍କ ଦେଇ $1 ସୁଦ୍ଧା ହୋଇଥିବା ସଙ୍କଳନ",
+ "revision-info": "$1 ବେଳେ {{GENDER:$6|$2}}$7 ଙ୍କ ଦେଇ ହୋଇଥିବା ସଂସ୍କରଣ",
"previousrevision": "ପୁରୁଣା ସଙ୍କଳନ",
"nextrevision": "ନୂଆ ସଙ୍କଳନ",
"currentrevisionlink": "ନଗଦ ସଙ୍କଳନ",
@@ -688,6 +710,7 @@
"rev-deleted-event": "(ଲଗ କାମ ବାହାର କରିଦିଆଗଲା)",
"rev-deleted-user-contribs": "[ଇଉଜର ନାମ ବା IP ଠିକଣା ବାହାର କରିଦିଆଗଲା - ଅବଦାନସମୂହରୁ ଲୁଚାଯାଇଥିବା ସମ୍ପାଦନା]",
"rev-deleted-text-permission": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣ '''ଲିଭାଇଦିଆଯାଇଛି'''।\nସବିଶେଷ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ଲିଭାଯିବା ଇତିହାସ]ରୁ ମିଳିପାରିବ ।",
+ "rev-suppressed-text-permission": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣକୁ <strong>ଦବାଇଦିଆଯାଇଛି</strong> ।\nଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ଦବାଯାଇଥିବା ଇତିହାସ]ରୁ ପଢ଼ିପାରିବେ ।",
"rev-deleted-text-unhide": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣ '''ଲିଭାଇଦିଆଯାଇଛି''' ।\nସବିଶେଷ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ଲିଭାଇବା ଇତିହାସ]ରୁ ମିଳିପାରିବ ।\nତଥାପି ଆଗକୁ ବଢ଼ିବାକୁ ଚାହୁଁଥିଲେ ଆପଣ [$1 ଏହି ସଂସ୍କରଣଟି] ଦେଖିପାରିବେ ।",
"rev-suppressed-text-unhide": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣ '''ଦବାଇଦିଆଯାଇଛି''' ।\nସବିଶେଷ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ଦବାଯାଇଥିବା ଇତିହାସ]ରୁ ମିଳିପାରିବ ।\nତଥାପି ଆଗକୁ ବଢ଼ିବାକୁ ଚାହୁଁଥିଲେ ଆପଣ [$1 ଏହି ସଂସ୍କରଣଟି] ଦେଖିପାରିବେ ।",
"rev-deleted-text-view": "ଏହି ପୃଷ୍ଠାର ସଂସ୍କରଣ '''ଲିଭାଇଦିଆଯାଇଛି'''।\nଆପଣ ଏହାକୁ ଦେଖିପାରିବେ; ସବିଶେଷ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ଲିଭାଯିବା ଇତିହାସ]ରୁ ମିଳିପାରିବ ।",
@@ -706,9 +729,15 @@
"revdelete-no-file": "ଆପଣ ସୂଚିତ କରିଥିବା ଫାଇଲଟି ନାହିଁ ।",
"revdelete-show-file-confirm": "$2 ତାରିଖ $3 ବେଳେ \"<nowiki>$1</nowiki>\" ଫାଇଲର ଏକ ଲିଭାଯାଇଥିବା ସଙ୍କଳନକୁ ଦେଖିବାକୁ ଚାହାନ୍ତି ବୋଲି ଆପଣ ନିଶ୍ଚିତ କି ?",
"revdelete-show-file-submit": "ହଁ",
+ "revdelete-selected-text": "[[:$2]]ର {{PLURAL:$1|Selected revision|ବଛାଯାଇଥିବା ସଂସ୍କରଣ}}:",
+ "revdelete-selected-file": "[[:$2]]ର {{PLURAL:$1|Selected file version|ବଛାଯାଇଥିବା ଫାଇଲ ସଂସ୍କରଣ}}:",
"logdelete-selected": "{{PLURAL:$1|ବଛା ଲଗ ଘଟଣା|ବଛା ଲଗ ଘଟଣାବଳୀ}}:",
+ "revdelete-text-text": "ଲିଭାଯାଇଥିବା ସଂସ୍କରଣ ପୃଷ୍ଠାର ଇତିହାସରେ ଦେଖାଯାଇପାରିବ, କିନ୍ତୁ ଏହାର କିଛି ଭାଗ ଜନସାଧାରଣଙ୍କ ପାଇଁ ଉପଲବ୍ଧ ହେବନାହିଁ ।",
+ "revdelete-text-file": "ଲିଭାଯାଇଥିବା ଫାଇଲର ସଂସ୍କରଣ ପୃଷ୍ଠାର ଇତିହାସରେ ଦେଖାଯାଇପାରିବ, କିନ୍ତୁ ଏହାର କିଛି ଭାଗ ଜନସାଧାରଣଙ୍କ ପାଇଁ ଉପଲବ୍ଧ ହେବନାହିଁ ।",
+ "logdelete-text": "ଲିଭାଯାଇଥିବା ଘଟଣାବଳୀ ଇତିହାସରେ ଦେଖାଯାଇପାରିବ, କିନ୍ତୁ ଏହାର କିଛି ଭାଗ ଜନସାଧାରଣଙ୍କ ପାଇଁ ଉପଲବ୍ଧ ହେବନାହିଁ ।",
+ "revdelete-text-others": "କିଛି ଅଧିକ କଟକଣା ନଥିଲେ ବାକି ପରିଚାଳକମାନେ ଲୁଚାଯାଇଥିବା ବିଷୟବସ୍ତୁ ଦେଖିପାରିବେ ଏବଂ ଲିଭାଯାଇଥିବା ବିଷୟବସ୍ତୁକୁ ପଛକୁ ଫେରାଇ ପାରିବେ ।",
"revdelete-confirm": "ଦୟାକରି ଥୟ କରନ୍ତୁ ଯେ ଆପଣ ଏହା କରିବାକୁ ଚାହୁଁଛନ୍ତି, ଆପଣ ଏହାର ପରିଣାମ ଜାଣନ୍ତି ଓ ଆପଣ [[{{MediaWiki:Policy-url}}|ନୀତି]] ଅନୁସାରେ ଏହା କରୁଛନ୍ତି ।",
- "revdelete-suppress-text": "ଦବାଇ ରଖିବା '''କେବଳ''' ଏହି ତଳଲିଖିତ କ୍ଷେତ୍ରରେ ବ୍ୟବହାର କରାଯିବ:\n* ସମ୍ଭାବିତ ଅପମାନଜଣକ ତଥ୍ୟ\n* ଭୁଲ ବ୍ୟକ୍ତିଗତ ତଥ୍ୟ\n*: ''ଘର ଠିକଣା ଓ ଟେଲିଫୋନ ନମ୍ବର, ଭୋଟର ପରିଚୟ ନମ୍ବର, ଆଦି''",
+ "revdelete-suppress-text": "ଦବାଇ ରଖିବା <strong>କେବଳ</strong>ଏହି ତଳଲିଖିତ କ୍ଷେତ୍ରରେ ବ୍ୟବହାର କରାଯିବ:\n* ସମ୍ଭାବିତ ଅପମାନଜଣକ ତଥ୍ୟ\n* ଭୁଲ ବ୍ୟକ୍ତିଗତ ତଥ୍ୟ\n*: <em>ଘର ଠିକଣା ଓ ଟେଲିଫୋନ ନମ୍ବର, ଭୋଟର ପରିଚୟ ନମ୍ବର, ଆଦି</em>",
"revdelete-legend": "ଦେଖଣା ବାରଣ ସବୁ ଥୟ କରନ୍ତୁ",
"revdelete-hide-text": "ସଂସ୍କରଣ ଲେଖା",
"revdelete-hide-image": "ଫାଇଲ ଭିତର ପଦାର୍ଥସବୁ ଲୁଚାଇଦିଅନ୍ତୁ",
@@ -756,6 +785,7 @@
"mergehistory-empty": "କୌଣସିଟି ବି ସଙ୍କଳାନ ମିଶାଯାଇପାରିବ ନାହିଁ ।",
"mergehistory-success": "[[:$1]]ର $3 {{PLURAL:$3|ଟି ସଙ୍କଳନ|ଟି ସଙ୍କଳନ}} [[:$2]] ସାଙ୍ଗରେ ଠିକଭାବେ ମିଶାଇ ଦିଆଗଲା ।",
"mergehistory-fail": "ଇତିହାସ ମିଶାଇବାରେ ବିଫଳ ହେଲୁ, ଦୟାକରି ପୃଷ୍ଠା ଓ ସମୟ ନିର୍ଣ୍ଣାୟକ ଦେଖନ୍ତୁ ।",
+ "mergehistory-fail-toobig": "$1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}} ଘୁଞ୍ଚାଇଦିଆଯିବା ହେତୁ ଅଧିକ ପୃଷ୍ଠାର ଇତିହାସ ମିଶାଇବାରେ ବିଫଳ ହେଲୁ ।",
"mergehistory-no-source": "ମୂଳ ପୃଷ୍ଠା $1ଟି ନାହିଁ ।",
"mergehistory-no-destination": "ଅନ୍ତ ପୃଷ୍ଠା $1 ଟି ନାହିଁ ।",
"mergehistory-invalid-source": "ମୂଳ ପୃଷ୍ଠାଟି ଏକ ଠିକ ନାମ ହୋଇଥିବା ଉଚିତ ।",
@@ -765,7 +795,6 @@
"mergehistory-same-destination": "ମୂଳାଧାର ଓ ଅନ୍ତ ପୃଷ୍ଠା ସମାନ ହୋଇପାରିବ ନାହିଁ",
"mergehistory-reason": "କାରଣ:",
"mergelog": "ମିଶ୍ରଣ ଲଗ୍",
- "pagemerge-logentry": "[[$2]] ସହିତ [[$1]]କୁ ଯୋଡ଼ି ଦିଆଗଲା ($3 ଯାଏଁ ସଙ୍କଳନ)",
"revertmerge": "ମିଶାଇବା ନାହିଁ",
"mergelogpagetext": "ତଳେ ସବୁଠାରୁ ନଗଦ ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠାର ଇତିହାସ ଆଉ ଗୋଟିଏ ସହ ଦିଆଯାଇଅଛି ।",
"history-title": "\"$1\" ର ପୁନରାବୃତି ଇତିହାସ",
@@ -777,6 +806,8 @@
"showhideselectedversions": "ବଛା ହୋଇଥିବା ସଙ୍କଳନ ଗୁଡ଼ିକୁ ଦେଖାଇବେ/ଲୁଚାଇବେ",
"editundo": "ପଛକୁ ଫେରିବା",
"diff-empty": "(କିଛି ବି ଫରକ ନାହିଁ)",
+ "diff-multi-sameuser": "ସେହି ସମାନ ବ୍ୟବହାରକାରୀଙ୍କ ({{PLURAL:$1|ମଝି ସଂସ୍କରଣ|$1ଟି ସଂସ୍କରଣ}} ଦେଖାଉ ନାହିଁ)",
+ "diff-multi-otherusers": "({{PLURAL:$2|ଆଉ ଜଣେ ବ୍ୟବହାରକାରୀଙ୍କ|$2 ଜଣ ବ୍ୟବହାରକାରୀଙ୍କ}} ଦ୍ୱାରା ହୋଇଥିବା {{PLURAL:$1|ମଝି ସଂସ୍କରଣଟିଏ|$1ଟି ମଝି ସଂସ୍କରଣ}} ଦେଖା ଯାଉନାହିଁ)",
"diff-multi-manyusers": "($2 {{PLURAL:$2|ଜଣ|ଜଣ}} ସଭ୍ୟଙ୍କ ଦେଇ କରାଯାଇଥିବା {{PLURAL:$1|ଗୋଟିଏ ମଝି ସଂସ୍କରଣ|$1 ଗୋଟି ମଝି ସଂସ୍କରଣମାନ}} ଦେଖାଯାଉ ନାହିଁ)",
"difference-missing-revision": "($1) {{PLURAL:$2|was|were}}ର ଭିନ୍ନତା {{PLURAL:$2|One revision|$2 revisions}} ମିଳିଲା ନାହିଁ ।\n\nପୁରୁଣା ହୋଇଯାଇଥିବା ଇତିହାସ ଲିଙ୍କ ଯାହା ଏକ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଦିଆଯାଇଥିବାରୁ ଏହା ସାଧାରଣତଃ ହୋଇଥାଏ ।\nଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]ରେ ମିଳିପାରିବ ।",
"searchresults": "ଖୋଜା ଫଳାଫଳ",
@@ -791,7 +822,7 @@
"shown-title": "$1 ପ୍ରତି ପୃଷ୍ଠାର {{PLURAL:$1|ଫଳାଫଳ|ଫଳାଫଳ}} ଦେଖାଇବେ ।",
"viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) ଟି ଦେଖିବେ",
"searchmenu-exists": "'''ଏହି ଉଇକିରେ \"[[:$1]]\" ନାଆଁରେ ପୃଷ୍ଠାଟିଏ ଅଛି ।'''",
- "searchmenu-new": "'''ଏହି ପ୍ରସଙ୍ଗଟି ଆଗରୁ ନାହିଁ, ତେଣୁ ''[[:$1]]'' ନାମରେ ପ୍ରସଙ୍ଗଟିଏ ଏଠାରେ ଗଢ଼ନ୍ତୁ!'''",
+ "searchmenu-new": "<strong>\"[[:$1]]\" ନାମରେ ପ୍ରସଙ୍ଗଟିଏ ଏହି ଉଇକିରେ ଗଢ଼ନ୍ତୁ!</strong> {{PLURAL:$2|0=|ଆପଣଙ୍କ ଖୋଜା ସମ୍ବନ୍ଧିତ ବାକି ପୃଷ୍ଠା ଦେଖନ୍ତୁ ।|ମିଳିଥିବା ଖୋଜା ଫଳାଫଳ ଦେଖନ୍ତୁ ।}}",
"searchprofile-articles": "ସୂଚୀ ପୃଷ୍ଠା",
"searchprofile-images": "ମଲ୍ଟିମିଡ଼ିଆ",
"searchprofile-everything": "ସବୁକିଛି",
@@ -800,10 +831,11 @@
"searchprofile-images-tooltip": "ଫାଇଲ ସବୁ ପାଇଁ ଖୋଜିବେ",
"searchprofile-everything-tooltip": "ପ୍ରସଙ୍ଗ ସବୁକୁ ଖୋଜିବେ (ଆଲୋଚନା ସହ)",
"searchprofile-advanced-tooltip": "ନିଜେ ତିଆରିକରିହେବା ଭଳି ନେମସ୍ପେସରେ ଖୋଜିବେ",
- "search-result-size": "$1 ({{PLURAL:$2|1 ଶବ୍ଦ|$2 ଶବ୍ଦ}})",
+ "search-result-size": "$1 ({{PLURAL:$2|ଗୋଟେ ଶବ୍ଦ|$2 ଟି ଶବ୍ଦ}})",
"search-result-category-size": "{{PLURAL:$1|ଜଣେ ସଭ୍ୟ|$1 ଜଣ ସଭ୍ୟ}} ({{PLURAL:$2|ଗୋଟିଏ ଶ୍ରେଣୀy|$2ଟି ଶ୍ରେଣୀ ସମୂହ}}, {{PLURAL:$3|ଗୋଟିଏ ଫାଇଲ|$3ଟି ଫାଇଲ}})",
"search-redirect": "($1 କୁ ଆଗକୁ ବଢେଇନିଅ )",
"search-section": "(ଭାଗ $1)",
+ "search-file-match": "(ଫାଇଲରେ ଥିବା ବିଷୟବସ୍ତୁ ସାଙ୍ଗେ ମେଳ)",
"search-suggest": "ଆପଣ $1 ଭାବି ଖୋଜିଥିଲେ କି?",
"search-interwiki-caption": "ସାଙ୍ଗରେ ଚାଲିଥିବା ବାକି ପ୍ରକଳ୍ପସବୁ",
"search-interwiki-default": "$1 ରୁ ଫଳାଫଳ:",
@@ -812,18 +844,22 @@
"searchrelated": "ଯୋଡ଼ା",
"searchall": "ସବୁ",
"showingresults": "ତଳେ {{PLURAL:$1|'''ଗୋଟିଏ''' ଫଳାଫଳ|'''$1'''ଟି ଫଳାଫଳ}} ଦେଖାଉଛୁ ଯାହା #'''$2'''ରେ ଆରମ୍ଭ ହୋଇଅଛି ।",
- "showingresultsheader": "'''$4''' ପାଇଁ {{PLURAL:$5|'''$3'''ର '''$1''' ଫଳ |'''$3'''ର '''$1 - $2''' ଫଳ }}",
+ "showingresultsinrange": "#<strong>$2</strong> ରୁ #<strong>$3</strong> ଭିତରେ ଥିବା ପାଖାପାଖି {{PLURAL:$1|<strong>ଗୋଟେ</strong> ଫଳାଫଳ|<strong>$1</strong>ଟି ଫଳାଫଳ}} ତଳେ ଦେଖାଉଛୁ ।",
+ "search-showingresults": "{{PLURAL:$4|ଫଳାଫଳ (<strong>$3</strong>ର <strong>$1</strong>) |ଫଳାଫଳ (<strong>$3</strong>ର <strong>$1 - $2</strong>}}",
"search-nonefound": "ଆପଣ ଖୋଜିଥିବା ପ୍ରଶ୍ନ ପାଇଁ କିଛି ଫଳ ମିଳିଲା ନାହିଁ ।",
"powersearch-legend": "ଗହିର ଖୋଜା",
"powersearch-ns": "ନେମସ୍ପେସରେ ଖୋଜିବେ",
"powersearch-togglelabel": "ଯାଞ୍ଚ କରିବା:",
"powersearch-toggleall": "ସବୁ",
"powersearch-togglenone": "କିଛି ନାହିଁ",
+ "powersearch-remember": "ନିଜର ଆଗାମୀ ଖୋଜିବା ମନେରଖନ୍ତୁ",
"search-external": "ବାହାରେ ଖୋଜା",
"searchdisabled": "{{SITENAME}} ଖୋଜା ଅଚଳ କରାଗଲା ।\nଆପଣ ଏହି ଭିତରେ ଗୁଗଲ ଦେଖିପାରନ୍ତି ।\nଜାଣିରଖନ୍ତୁ ଯେ {{SITENAME}}ର ବିଷୟ ସୂଚି ପୁରାତନ ହୋଇଥାଇପାରେ ।",
+ "search-error": "ଖୋଜିଲା ବେଳେ ଅସୁବିଧାଟିଏ ଘଟିଲା: $1",
"preferences": "ପସନ୍ଦ",
"mypreferences": "ପସନ୍ଦ",
"prefs-edits": "ସମ୍ପାଦନା ସଂଖ୍ୟା:",
+ "prefsnologintext2": "ନିଜର ପସନ୍ଦ ବଦଲାଇବା ପାଇଁ ଲଗ ଇନ କରନ୍ତୁ ।",
"prefs-skin": "ବହିରାବରଣ",
"skin-preview": "ସାଇତା ଆଗରୁ ଦେଖଣା",
"datedefault": "କୌଣସି ପସନ୍ଦ ନାହିଁ",
@@ -855,6 +891,7 @@
"recentchangesdays-max": "ସବୁଠାରୁ ଅଧିକ ହେଲେ $1 {{PLURAL:$1|ଦିନ|ଦିନ}}",
"recentchangescount": "ଆପେଆପେ ଦେଖାଯାଉଥିବା ବଦଳର ସଂଖ୍ୟା:",
"prefs-help-recentchangescount": "ଏଥିରେ ନଗଦ ବଦଳ, ପୃଷ୍ଠାର ଇତିହାସ ଓ ଲଗ ଇତିହାସ ରହିଅଛି ।",
+ "prefs-help-watchlist-token2": "ଆପଣଙ୍କ ଦେଖଣାତାଲିକାର ୱେବ ଫିଡ଼ ପାଇଁ ଏହା ଏକ ଗୋପନ ଚାବି ।\nଏହା ଜାଣିପାରିଲେ ଯେ କୌଣସି ବ୍ୟକ୍ତି ଆପଣଙ୍କ ଦେଖଣାତାଲିକା ପଢ଼ିପାରିବ, ତେଣୁ ଏହାକୁ କାହାକୁ ଜଣାନ୍ତୁ ନାହିଁ ।\nଚାହିଁଲେ ଏହାକୁ [[Special:ResetTokens|ରିସେଟ ମଧ୍ୟ କରିପାରିବେ]] ।",
"savedprefs": "ଆପଣଙ୍କ ପସନ୍ଦସବୁ ସାଇତାଗଲା ।",
"timezonelegend": "ସମୟ ମଣ୍ଡଳ:",
"localtime": "ସ୍ଥାନୀୟ ସମୟ:",
@@ -894,7 +931,7 @@
"prefs-help-signature": "ଆଲୋଚନା ପୃଷ୍ଠାରେ ଦିଆଯାଉଥିବା ମତାମତରେ \"<nowiki>~~~~</nowiki>\" ଦେଇଦେଲେ ତାହା ସେଠାରେ ଆପେ ଆପେ ଆପଣଙ୍କ ନାମ ଓ ସମୟକୁ ବଦଳିଯିବ ।",
"badsig": "ମୂଳ ସନ୍ତକଟି ଅଚଳ ଅଟେ ।\nHTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।",
"badsiglength": "ଆପଣଙ୍କ ସନ୍ତକଟି ଖୁବ ଲମ୍ବା ।\nଏହା ବୋଧ ହୁଏ $1 {{PLURAL:$1|ଗୋଟି ଅକ୍ଷର|ଗୋଟି ଅକ୍ଷର}}ରୁ ଅଧିକ ।",
- "yourgender": "ଲିଙ୍ଗ:",
+ "yourgender": "ଆପଣ କେଉଁଭଳି ବଖଣାହେବାକୁ ଚାହାଁନ୍ତି?",
"gender-unknown": "ଜଣାଇବାକୁ ଚାହେଁ ନାହିଁ",
"gender-male": "ସେ (ପୁରୁଷ) ଉଇକିପୃଷ୍ଠା ସମ୍ପାଦନା କରନ୍ତି",
"gender-female": "ସେ (ନାରୀ) ଉଇକିପୃଷ୍ଠା ସମ୍ପାଦନା କରନ୍ତି",
@@ -921,6 +958,8 @@
"prefs-tokenwatchlist": "ଟୋକନ୍‌",
"prefs-diffs": "ତଫାତସବୁ",
"prefs-help-prefershttps": "ଏହି ପସନ୍ଦ ଆପଣଙ୍କ ଲଗ୍ଇନ୍ କରିବାପରେ କାର୍ଯ୍ୟକ୍ଷମ ହେବ ।",
+ "prefswarning-warning": "ଆପଣ ନିଜ \"ପସନ୍ଦ\"ରେ କରିଥିବା ବଦଳ ଏଯାଏ ସାଇତା ଯାଇନାହିଁ ।\nଯଦି ଆପଣ \"$1\"ରେ କ୍ଲିକ ନ କରି ଏହି ପୃଷ୍ଠା ଛାଡ଼ି ଚାଲିଗଲେ ଆପଣଙ୍କର ପସନ୍ଦ ଅପଡେଟ ହେବ ନାହିଁ ।",
+ "prefs-tabs-navigation-hint": "ସୂଚନା: ବାମ ଓ ଡାହାଣ ଆରୋ କି ବ୍ୟବହାର କରି ଆପଣ ଗୋଟେ ଟ୍ୟାବରୁ ଆଉ ଗୋଟେ ଟ୍ୟାବକୁ ଯାଇପାରିବ ।",
"email-address-validity-valid": "ଇ-ମେଲ ଠିକଣା ବୈଧ ଭଳି ଲାଗୁଅଛି",
"email-address-validity-invalid": "ଏକ ସଠିକ ଇ-ମେଲ ଠିକଣା ଦିଅନ୍ତୁ",
"userrights": "ସଭ୍ୟ ଅଧିକାର ପରିଚାଳନା",
@@ -940,6 +979,8 @@
"userrights-notallowed": "ଆପଣଙ୍କ ଖାତାରେ ସଭ୍ୟ ଅଧିକାର ଯୋଡ଼ିବା ବା କାଢ଼ିବାର ଅନୁମତି ନାହିଁ ।",
"userrights-changeable-col": "ଆପଣ ବଦଳାଇପାରିବା ଗୋଠସମୂହ",
"userrights-unchangeable-col": "ଯେଉଁ ଗୋଠସବୁ ଆପଣ ବଦଳାଇପାରିବେ ନାହିଁ",
+ "userrights-conflict": "ସଭ୍ୟଙ୍କ ଅଧିକାର ବଦଳାଇବାରେ ମତଭେଦ! କରିଥିବା ବଦଳକୁ ପରଖି ନିଶ୍ଚିତ କରନ୍ତୁ ।",
+ "userrights-removed-self": "ଆପଣ ସଫଳ ଭାବେ ନିଜର ଅଧିକାର କାଢ଼ିଦେଲେ । ଆଗକୁ ଆପଣ ଆଉ ଏହା ଦେଖିପାରିବେ ନାହିଁ ।",
"group": "ଗୋଠ:",
"group-user": "ବ୍ୟବହାରକାରୀଗଣ",
"group-autoconfirmed": "ଆପେଆପେ ଥୟ କରା ସଭ୍ୟ",
@@ -991,7 +1032,8 @@
"right-deletedtext": "ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଓ ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଭିତରର ସଙ୍କଳନର ବଦଳ ଦେଖିବେ",
"right-browsearchive": "ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାସବୁକୁ ଖୋଜିବେ",
"right-undelete": "ଲିଭାଇ ଦିଆଯାଇଥିବା ପୃଷ୍ଠାଟିଏକୁ ଫେରାଇ ଆଣିବେ",
- "right-suppressrevision": "ପରିଚାଳକମାନଙ୍କଠାରୁ ଲୁଚାଯାଇଥିବା ସଙ୍କଳନ ପରଖିବେ ଓ ଲେଉଟାଇବେ",
+ "right-suppressrevision": "କୌଣସି ସଭ୍ୟଙ୍କୁ ନିର୍ଦ୍ଦିଷ୍ଟ ସଂସ୍କରଣ ଦେଖନ୍ତୁ, ଲୁଚାନ୍ତୁ ଓ ଲୁଚାଯାଇଥିବା ସଂସ୍କରଣ ଦେଖାନ୍ତୁ",
+ "right-viewsuppressed": "କୌଣସି ସଭ୍ୟଙ୍କଠାରୁ ଲୁଚାଯାଇଥିବା ସଂସ୍କରଣମାନ ଲୁଚାନ୍ତୁ",
"right-suppressionlog": "ବ୍ୟକ୍ତିଗତ ଲଗ ଦେଖାଇବେ",
"right-block": "ବାକି ସଭ୍ୟମାନଙ୍କୁ ସମ୍ପାଦନାରୁ ବାରଣ କରିବେ",
"right-blockemail": "ଇ-ମେଲ ପଠାଇବାରୁ ଜଣେ ସଭ୍ୟଙ୍କୁ ବାରଣ କରିବେ",
@@ -1001,10 +1043,18 @@
"right-unblockself": "ଜଣଙ୍କୁ ଅଟକରୁ ଚାଡ଼କରିବେ",
"right-protect": "ନିରାପତ୍ତା ବଢ଼ାଇ କ୍ୟାସକେଡ଼-ନିରାପତ୍ତା ପୃଷ୍ଠାମାନଙ୍କୁ ବଦଳାନ୍ତୁ",
"right-editprotected": "କିଳାଯାଇଥିବା ପୃଷ୍ଠାମାନଙ୍କର ସମ୍ପାଦନା କରିବେ (କ୍ୟାସକେଡ଼କରା କିଳଣା ବିନା)",
+ "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" ଭାବେ ଲୁଚାଯାଇଥିବା ପୃଷ୍ଠାସବୁ ସମ୍ପାଦନା କରନ୍ତୁ",
"right-editinterface": "ସଭ୍ୟଙ୍କ ଇଣ୍ଟରଫେସ ବଦଳାଇବେ",
"right-editusercssjs": "ବାକି ସଭ୍ୟମାନଙ୍କର CSS ଓ ଜାଭାସ୍କ୍ରିପ୍ଟ ଫାଇଲ ସବୁକୁ ବଦଳାଇବେ",
"right-editusercss": "ବାକି ସଭ୍ୟମାନଙ୍କ CSS ଫାଇଲସବୁ ବଦଳାଇବେ",
"right-edituserjs": "ବାକି ସଭ୍ୟମାନଙ୍କର ଜାଭାସ୍କ୍ରିପ୍ଟ ଫାଇଲ ସବୁକୁ ବଦଳାଇବେ",
+ "right-editmyusercss": "ନିଜ ସଭ୍ୟ CSS ଫାଇଲସବୁ ସମ୍ପାଦନା କରନ୍ତୁ",
+ "right-editmyuserjs": "ନିଜର ସଭ୍ୟ JavaScript ଫାଇଲ ସମ୍ପାଦନା କରନ୍ତୁ",
+ "right-viewmywatchlist": "ନିଜର ଦେଖଣାତାଲିକା ଦେଖନ୍ତୁ",
+ "right-editmywatchlist": "ନିଜ ଦେଖଣାତାଲିକା ଦେଖନ୍ତୁ । ଜାଣିରଖନ୍ତୁ ଯେ ଏହି ଅଧିକାର ବିନା ମଧ୍ୟ କିଛି କାମ ଅଧିକ ପୃଷ୍ଠା ଯୋଡ଼ୁଥିବ ।",
+ "right-viewmyprivateinfo": "ନିଜର ଗୋପନୀୟ ତଥ୍ୟ ଦେଖନ୍ତୁ (ଯଥା ଇମେଲ ଠିକଣା, ପ୍ରକୃତ ନାମ)",
+ "right-editmyprivateinfo": "ନିଜର ଗୋପନୀୟ ତଥ୍ୟ ସମ୍ପାଦନ କରନ୍ତୁ (ଯଥା ଇମେଲ ଠିକଣା, ପ୍ରକୃତ ନାମ)",
+ "right-editmyoptions": "ନିଜର ପସନ୍ଦ ସମ୍ପାଦନା କରନ୍ତୁ",
"right-rollback": "ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ପୃଷ୍ଠାକୁ ବଦଳାଇଥିବା ଶେଷ ସଭ୍ୟଙ୍କ ସମ୍ପାଦନାକୁ ସଙ୍ଗେସଙ୍ଗେ ପୁରାପୁରି ପଛକୁ ଫେରାଇଦେବେ",
"right-markbotedits": "ପୁରାପୁରି ପଛକୁ ଫେରାଇବା ବଦଳଗୁଡ଼ିକ ଆପେ ଆପେ କରା ବଦଳ ବୋଲି ଗଣିବେ",
"right-noratelimit": "ବିରଳ ସୀମା ଦେଇ ପ୍ରଭାବିତ ହୋଇ ନଥିବା",
@@ -1030,10 +1080,12 @@
"action-createpage": "ପୃଷ୍ଠାଟିଏ ତିଆରିବା",
"action-createtalk": "ଆଲୋଚନା ପୃଷ୍ଠାସବୁ ଗଢ଼ିବେ",
"action-createaccount": "ଏହି ନୂଆ ସଭ୍ୟ ଖାତାଟିଏ ଗଢ଼ିବେ",
+ "action-history": "ଏହି ପୃଷ୍ଠାର ଇତିହାସ ଦେଖାନ୍ତୁ",
"action-minoredit": "ଏହି ବଦଳଟିକୁ ଟିକେ ବଦଳ ଭାବରେ ଚିହ୍ନିତ କରନ୍ତୁ",
"action-move": "ଏହି ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବେ",
"action-move-subpages": "ଏହି ପୃଷ୍ଠାଟିକୁ ତାହାର ଉପପୃଷ୍ଠା ସହିତ ଘୁଞ୍ଚାଇବେ ।",
"action-move-rootuserpages": "ମୂଳ ସଭ୍ୟ ପୃଷ୍ଠାସବୁକୁ ଘୁଞ୍ଚାଇଦେବେ",
+ "action-move-categorypages": "ଶ୍ରେଣୀ ପୃଷ୍ଠାସବୁକୁ ଘୁଞ୍ଚାନ୍ତୁ",
"action-movefile": "ଏହି ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବେ",
"action-upload": "ଏହି ଫାଇଲଟି ଅପଲୋଡ଼ କରିବେ",
"action-reupload": "ଆଗରୁ ଥିବା ଫାଇଲ ଉପରେ ମଡ଼ାଇ ଦେବେ",
@@ -1060,17 +1112,26 @@
"action-userrights-interwiki": "ବାକି ଉଇକିର ସଭ୍ୟମାନଙ୍କ ସଭ୍ୟ ଅଧିକାର ବଦଳାଇବେ",
"action-siteadmin": "ଡାଟାବେସକୁ କିଳିବେ ଓ ଖୋଲିବେ",
"action-sendemail": "ଇ-ମେଲ ପଠାଇବେ",
+ "action-editmywatchlist": "ନିଜର ଦେଖଣାତାଲିକା ସମ୍ପାଦନା କରନ୍ତୁ",
+ "action-viewmywatchlist": "ନିଜ ଦେଖଣାତାଲିକା ଦେଖନ୍ତୁ",
+ "action-viewmyprivateinfo": "ନିଜର ଗୋପନୀୟ ତଥ୍ୟ ଦେଖନ୍ତୁ",
+ "action-editmyprivateinfo": "ନିଜର ଗୋପନୀୟ ତଥ୍ୟ ସମ୍ପାଦନ କରନ୍ତୁ",
"nchanges": "$1 {{PLURAL:$1|ବଦଳ|ବଦଳସବୁ}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ଶେଷଥର ଦେଖିବା ପରଠାରୁ}}",
"enhancedrc-history": "ଇତିହାସ",
"recentchanges": "ନଗଦ ବଦଳ",
"recentchanges-legend": "ଏବେ କରାଯାଇଥିବା ଅଦଳବଦଳ",
"recentchanges-summary": "ଏହି ପୃଷ୍ଠାରେ ଏହି ଉଇକିରେ ନଗଦ ବଦଳର ନିଘା ରଖିବେ",
+ "recentchanges-noresult": "ଏହି ସମୟକାଳ ଭିତରେ ଏହି ମାନଦଣ୍ଡ ସହ ଖାପ ଖାଇବା ଭଳି କିଛି ବଦଳ ହୋଇନାହିଁ ।",
"recentchanges-feed-description": "ଏହି ଉଇକିରେ ଏହି ଫିଡ଼ଟିର ନଗଦ ବଦଳ ଦେଖାଇବେ ।",
"recentchanges-label-newpage": "ଏହି ସମ୍ପାଦନା ଯୋଗୁଁ ନୂଆ ପୃଷ୍ଠାଟିଏ ତିଆରି ହେଲା",
"recentchanges-label-minor": "ଏହା ଏକ ସାମାନ୍ୟ ସମ୍ପାଦନା",
"recentchanges-label-bot": "ଏହି ବଦଳଟି ଜଣେ '''ବଟ'''ଙ୍କ ଦେଇ କରାଯାଇଥିଲା",
"recentchanges-label-unpatrolled": "ଏହି ବଦଳଟିକୁ ଏ ଯାଏଁ ପରଖା ଯାଇନାହିଁ",
- "rcnotefrom": "<strong>$2</strong> ପର ଠାରୁ (<strong>$1</strong> ଯାଏଁ ଏଠାରେ ଅଛି) ସମସ୍ତ ବଦଳ ତଳେ ଦେଖିପାରିବେ:",
+ "recentchanges-label-plusminus": "ଏହି ବାଇଟ ତଥ୍ୟରୁ ଏଇ ପୃଷ୍ଠାର ଆକାର ବଦଳ",
+ "recentchanges-legend-heading": "'''ଆକଳନ:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ଆହୁରି ଦେଖନ୍ତୁ: [[Special:NewPages|ନୂଆ ପୃଷ୍ଠାମାନଙ୍କ ତାଲିକା]])",
+ "rcnotefrom": "<strong>$3, $4</strong> ପରଠାରୁ {{PLURAL:$5|ବଦଳଟି|ବଦଳଗୁଡ଼ିକ}} ତଳେ ଦିଆଗଲା (<strong>$1</strong> ଯାଏ ଦିଆଗଲା) ।",
"rclistfrom": "$3 $2ରୁ ଆରମ୍ଭ କରି ନୂଆ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
"rcshowhideminor": "ଛୋଟମୋଟ ବଦଳ $1",
"rcshowhideminor-show": "ଦେଖାଇବେ",
@@ -1162,15 +1223,16 @@
"largefileserver": "ଏହି ସର୍ଭରର ଅନୁମୋଦିତ ସଂରଚନା ଠାରୁ ଏହି ଫାଇଲଟି ବଡ଼ ।",
"emptyfile": "ଆପଣ ଅପଲୋଡ଼ କରିଥିବା ଫାଇଲଟି ଫାଙ୍କା ବୋଲି ବୋଧ ହୁଏ ।\nଏହା ହୁଏତ ଫାଇଲ ନାମରେ କିଛି ଭୁଲ ଜନିତ ହୋଇଥାଇପାରେ ।\nସତରେ ଆପଣ ଏହି ଫାଇଲଟି ଅପଲୋଡ଼ କରିବାକୁ ଚାହାନ୍ତି କି ନାଁ ଠାରେ ପରଖି ନିଅନ୍ତୁ ।",
"windows-nonascii-filename": "ଏହି ଉଇକି ବିଶେଷ ସଂକେତ ଥିବା ଫାଇଲ ନାମକୁ ଅନୁମତି ଦିଏ ନାହିଁ ।",
- "fileexists": "ଏହି ଏକା ନାଆଁରେ ଆଗରୁ ଫାଇଲଟିଏ ଅଛି , ସତରେ ଆପଣ ଏହାକୁ ଅପଲୋଡ଼ କରିବାକୁ ଚାହାନ୍ତି କି ନାଁ ଦୟାକରି <strong>[[:$1]]</strong> ପରଖି ନିଅନ୍ତୁ ।\n[[$1|thumb]]",
+ "fileexists": "ଏହି ଏକା ନାମରେ ଆଗରୁ ଫାଇଲଟିଏ ଅଛି, ଯଦି {{GENDER:|ଆପଣ}} ନିଶ୍ଚିତ ନୁହଁନ୍ତି ତେବେ <strong>[[:$1]]</strong> ଫାଇଲଟି ପରଖିନିଅନ୍ତି । [[$1|ଥମ୍ବ]]",
"filepageexists": "ଏହି ଫାଇଲର ବିବରଣୀ ପୃଷ୍ଠାଟି <strong>[[:$1]]</strong> ଠାରେ ତିଆରି କରାଯାଇଅଛି, କିନ୍ତୁ ଏହି ନାମରେ ଗୋଟିଏ ବି ଫାଇଲ ନାହିଁ ।\nବିବରଣୀ ପୃଷ୍ଠାରେ ଆପଣ ଦେଇଥିବା ସାରକଥା ଦେଖାଯିବ ନାହିଁ ।\nଆପଣଙ୍କ ବିବରଣୀ ସେଠାରେ ଦେଖାଇବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ନିଜେ ଏହା ବଦଳାଇବାକୁ ପଡ଼ିବ ।\n[[$1|thumb]]",
- "fileexists-extension": "ଏକାପରି ନାଆଁ ଥିବା ଫାଇଲଟିଏ ଆଗରୁ ଅଛି: [[$2|thumb]]\n* ଅପଲୋଡ଼ କରାଯାଉଥିବା ଫାଇଲର ନାମ: <strong>[[:$1]]</strong>\n* ଆଗରୁ ଥିବା ଫାଇଲର ନାମ: <strong>[[:$2]]</strong>\nଦୟାକରି ଅଲଗା ନାମଟିଏ ବାଛନ୍ତୁ ।",
+ "fileexists-extension": "ଏକାପରି ନାମ ଥିବା ଫାଇଲଟିଏ ଆଗରୁ ଅଛି: [[$2|thumb]]\n* ଅପଲୋଡ଼ କରାଯାଉଥିବା ଫାଇଲର ନାମ: <strong>[[:$1]]</strong>\n* ଆଗରୁ ଥିବା ଫାଇଲର ନାମ: <strong>[[:$2]]</strong>\nଆପଣ ଆଉ ଟିକେ ନିର୍ଦ୍ଦିଷ୍ଟ ନାମ ବାଛିବେ କି?",
"fileexists-thumbnail-yes": "ଫାଇଲଟି ଏକ ସାନ ଆକାରର ଛବି ବୋଲି ବୋଧ ହୁଏ ''(ନଖଦେଖଣା)''.\n[[$1|thumb]]\nଦୟାକରି <strong>[[:$1]]</strong> ଫାଇଲଟି ପରଖି ନିଅନ୍ତୁ ।\nଯଦି ବଛା ଫାଇଲଟି ମୂଳ ଫାଇଲ ଆକାରର ହୋଇଥାଏ ତେବେ ଆଉ ଗୋଟିଏ ନଖଦେଖଣା ସାନ ଛବି ଅପଲୋଡ଼ କରିବାକୁ ପଡ଼ିବ ।",
"file-thumbnail-no": "ଫାଇଲ ନାମ <strong>$1</strong>ରେ ଆରମ୍ଭ ହୋଇଥାଏ ।\nଏହା ଏକ ଛୋଟ ଆକାରର ଛବି ଭଳି ବୋଧ ହୁଏ ''(ଛୋଟଦେଖଣା)'' ।\nଯଦି ଆପଣଙ୍କ ପାଖରେ ପୁରା ରେଜୋଲୁସନର ଛବିଟିଏ ଅଛି ତେବେ ତାହା ଅପଲୋଡ଼ କରନ୍ତୁ କିମ୍ବା ଫାଇଲ ନାମ ବଦଳାଇ ଦିଅନ୍ତୁ ।",
"fileexists-forbidden": "ଏହି ନାମରେ ଫାଇଲଟିଏ ଆଗରୁ ଅଛି ଯାହା ଉପରେ ଆଉଥରେ ମଡ଼ାଯାଇପାରିବ ନାହିଁ ।\nତଥାପି ଯଦି ଆପଣ ଫାଇଲ ଅପଲୋଡ଼ କରିବାକୁ ଚାହୁଁଥାନ୍ତି ତେବେ ପଛକୁ ଯାଇ ନୂଆ ନାମଟିଏ ଦିଅନ୍ତୁ ।\n[[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "ଏହି ନାମରେ ଫାଇଲଟିଏ ଆଗରୁ ବଣ୍ଟାଯାଇଥିବା ଫାଇଲ ଭଣ୍ଡାରରେ ଅଛି ।\nଯଦି ଆପଣ ନିଜର ଫାଇଲଟିଏ ଅପଲୋଡ କରିବାକୁ ଚାହୁଁଥିବେ ତାହାହେଲେ ପଛକୁ ଫେରି ନୂଆ ନାମଟିଏ ଦିଅନ୍ତୁ ।\n[[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "ଏହି ଫାଇଲଟି ଏହି {{PLURAL:$1|ଫାଇଲଟି|ଫାଇଲ ମାନଙ୍କ}}ର ଏକ ନକଲ ଅଟେ:",
"file-deleted-duplicate": "([[:$1]]) ସଙ୍ଗେ ସମାନ ଫାଇଲଟି ଆଗରୁ ଲିଭାଇଦିଆଗଲା ।\nଆପଣ ଫାଇଲଟିକୁ ଆଉଥରେ ଅପଲୋଡ଼ କରିବା ଆଗରୁ ତାହାର ଲିଭାଇବା ଇତିହାସ ଦେଖିନିଅନ୍ତୁ ।",
+ "file-deleted-duplicate-notitle": "ଏହି ଫାଇଲ ଭଳି ଆଉ ଏକ ଫାଇଲ ଲିଭାଇ ଦିଆଯାଇଛି ଓ ନାମଟିକୁ ଦବାଇଦିଆଯାଇଛି । ଆଉଥରେ ଅପଲୋଡ଼ କରିବା ପାଇଁ ଆଗକୁ ବଢ଼ିବା ଆଗରୁ ଏ ପରିସ୍ଥିତର ସମୀକ୍ଷା କରିବା ପାଇଁ ଦବାଯାଇଥିବା ଫାଇଲ ନାମକୁ ଦେଖାଇବା କ୍ଷମତା ଥିବା ଆଉ କାହାକୁ ପଚାରନ୍ତୁ ।",
"uploadwarning": "ଅପଲୋଡ଼ ଚେତାବନୀ",
"uploadwarning-text": "ତଳେ ଥିବା ଫାଇଲର ବିବରଣୀ ବଦଳାଇ ଆଉ ଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।",
"savefile": "ଫାଇଲ ସାଇତିବା",
@@ -1179,6 +1241,8 @@
"uploaddisabledtext": "ଫାଇଲ ଅପଲୋଡ଼ ଅଚଳ କରାଯାଇଅଛି ।",
"php-uploaddisabledtext": "PHPରେ ଫାଇଲ ଅପଲୋଡ଼କୁ ଅଚଳ କରାଯାଇଅଛି ।\nଦୟାକରି ଫାଇଲ_ଅପଲୋଡ଼ ସଜାଣିକୁ ପରଖି ନିଅନ୍ତୁ ।",
"uploadscripted": "ଏହି ଫାଇଲଟିରେ HTML ବା ସ୍କ୍ରିପ୍ଟ କୋଡ଼ ଥିବାରୁ ଏକ ବେବ ବ୍ରାଉଜରରେ ଅଲଗା ରଖିବେ ।",
+ "uploadscriptednamespace": "ଏହି SVG ଫାଇଲରେ ଏକ ଅନୀତିକର ନେମସ୍ପେସ \"$1\" ରହିଛି ।",
+ "uploadinvalidxml": "ଅପଲୋଡ଼ ହୋଇଥିବା ଫାଇଲରେ XML ପାର୍ସ ହୋଇପାରିବ ନାହିଁ ।",
"uploadvirus": "ଏହି ଫାଇଲଟିରେ ଏକ ଭାଇରସ ରହିଅଛି!\nସବିଶେଷ: $1",
"uploadjava": "ଏହି ଫାଇଲଟି ଏକ ZIP ଫାଇଲ ଯେଉଁଥିରେ Java .class ଫାଇଲ ଅଛି ।\nJava ଫାଇଲ ଅପଲୋଡ଼ କରିବା ଅନୁମୋଦିତ ନୁହେଁ କାରଣ ସେସବୁ ସୁରକ୍ଷା ବଳୟକୁ ନଷ୍ଟ କରିଦିଅନ୍ତି ।",
"upload-source": "ଉତ୍ସ ଫାଇଲ",
@@ -1279,9 +1343,11 @@
"license": "ସତ୍ଵ:",
"license-header": "ସତ୍ଵ",
"nolicense": "ଗୋଟିଏ ବି ବଛାଯାଇନାହିଁ",
+ "licenses-edit": "ଲାଇସେନ୍ସ ଅପସନ ସମ୍ପାଦନା କରନ୍ତୁ",
"license-nopreview": "(ସାଇତିବା ଆଗଦେଖଣା ମିଳୁନାହିଁ)",
- "upload_source_url": "(ଏକ ବୈଧ ସାଧାରଣରେ ଖୋଲାଯାଇପାରୁଥିବା URL)",
- "upload_source_file": "(ଆପଣଙ୍କ କମ୍ପୁଟରରେ ଥିବା ଏକ ଫାଇଲ)‌",
+ "upload_source_url": "(ଏକ ବୈଧ ସର୍ବସାଧାରଣରେ ଖୋଲାଯାଇ ପାରୁଥିବା ଆପଣଙ୍କ ବଛା URL)",
+ "upload_source_file": "(ନିଜ କମ୍ପ୍ୟୁଟରରୁ ଆପଣ ବାଛିଥିବା ଫାଇଲ)",
+ "listfiles-delete": "ଲିଭାନ୍ତୁ",
"listfiles-summary": "ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ଅପଲୋଡ଼ ହୋଇଥିବା ସମସ୍ତ ଫାଇଲ ଦେଖାଇଥାଏ ।",
"listfiles_search_for": "ମାଧ୍ୟମ ନାମଟି ଖୋଜିବେ:",
"imgfile": "ଫାଇଲ",
@@ -1293,6 +1359,7 @@
"listfiles_size": "ଆକାର",
"listfiles_description": "ବିବରଣୀ",
"listfiles_count": "ସଂସ୍କରଣ",
+ "listfiles-show-all": "ଛବିର ପୁରୁଣା ସଂସ୍କରଣ ରଖନ୍ତୁ",
"listfiles-latestversion": "ବର୍ତ୍ତମାନର ସଂସ୍କରଣ",
"listfiles-latestversion-yes": "ହଁ",
"listfiles-latestversion-no": "ନାଁ",
@@ -1354,22 +1421,29 @@
"filedelete-maintenance": "ରକ୍ଷଣାବେକ୍ଷଣ ନିମନ୍ତେ ଫାଇଲ ଲିଭାଇବା ଓ ପୁନସ୍ଥାପନ କିଛି କାଳ ପାଇଁ ଅଚଳ କରିଦିଆଯାଇଛି ।",
"filedelete-maintenance-title": "ଏହି ଫାଇଲକୁ ଲିଭାଯାଇପାରିବ ନାହି",
"mimesearch": "MIME ଖୋଜା",
- "mimesearch-summary": "ଏହି ପୃଷ୍ଠାଟି ଫାଇଲ ମାନଙ୍କର MIME ପ୍ରକାରକୁ ଛଣିବାରେ ସହଯୋଗ କରିଥାଏ ।\nଇନପୁଟ: ବିଷୟ ଶ୍ରେଣୀ/ଉପ ଶ୍ରେଣ, ଯଥା: <code>image/jpeg</code> ।",
+ "mimesearch-summary": "ଏହି ପୃଷ୍ଠାଟି ଫାଇଲମାନଙ୍କର MIME ଅନୁସାରେ ସେମାନଙ୍କୁ ବାଛିଥାଏ ।\nଇନପୁଟ: contenttype/subtype କିମ୍ବା contenttype/*, ଯଥା: <code>image/jpeg</code> ।",
"mimetype": "MIME ପ୍ରକାର:",
"download": "ଡାଉନଲୋଡ଼",
"unwatchedpages": "ଦେଖାହୋଇନଥିବା ପୃଷ୍ଠା",
"listredirects": "ପୁନପ୍ରେରଣ ପୃଷ୍ଠାସମୂହର ତାଲିକା",
+ "listduplicatedfiles": "ଦୁଇଟି ଲେଖାଏ ବା ଅଧିକ ପ୍ରତିରୂପ ଥିବା ଫାଇଲ ତାଲିକା",
+ "listduplicatedfiles-summary": "ଏକ ଫାଇଲର ନଗଦ ସଂସ୍କରଣ ଆଉ ଏକ ଫାଇଲର ନଗଦ ସଂସ୍କରଣ ସହ ପୂରା ସମାନଥିବା ଫାଇଲମାନଙ୍କର ଏହା ଏକ ତାଲିକା । କେବଳ ସ୍ଥାନୀୟ ଫାଇଲକୁ ଏଥିରେ ଅନ୍ତର୍ଭୁକ୍ତ କରାଯାଇଛି ।",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]]ର [[$3|{{PLURAL:$2|ଏକ ନକଲ|$2ଟି ନକଲ}} ଆଗରୁ ଅଛି]] ।",
"unusedtemplates": "ବ୍ୟବହାର ହୋଇନଥିବା ଛାଞ୍ଚ",
"unusedtemplatestext": "ଏହି ପୃଷ୍ଠାରେ {{ns:template}} ନେମସ୍ପେସରେ ଥିବା ସବୁ ପୃଷ୍ଠାର ତାଲିକା ତିଆରି କରିଥାଏ ଯାହା ଆଉ ଏକ ପୃଷ୍ଠା ଭିତରେ ନାହିଁ ।\nଲିଭାଇବା ଆଗରୁ ଛାଞ୍ଚ ପାଇଁ ଥିବା ବାକି ଲିଙ୍କ ସବୁ ପରଖି ନିଅନ୍ତୁ ।",
"unusedtemplateswlh": "ଅନ୍ୟ ସଂଯୋଗ",
"randompage": "ଯାହିତାହି ପୃଷ୍ଠା",
"randompage-nopages": "ତଳେ ଥିବା {{PLURAL:$2|ନେମସ୍ପେସ|ନେମସ୍ପେସ}}: $1ରେ ଗୋଟିଏ ବି ପୃଷ୍ଠା ନାହିଁ ।",
+ "randomincategory": "ଶ୍ରେଣୀରେ ଥିବା ଯାହିତାହି ପୃଷ୍ଠା",
+ "randomincategory-invalidcategory": "\"$1\" ଏକ ବୈଧ ଶ୍ରେଣୀର ନାମ ନୁହେଁ ।",
+ "randomincategory-nopages": "[[:Category:$1|$1]] ଶ୍ରେଣୀରେ କୌଣସିଟି ପୃଷ୍ଠା ନାହିଁ ।",
+ "randomincategory-category": "ଶ୍ରେଣୀ:",
+ "randomincategory-legend": "ଶ୍ରେଣୀରେ ଥିବା ଯାହିତାହି ପୃଷ୍ଠା",
"randomredirect": "ଯାହିତାହି ପୁନପ୍ରେରଣ",
"randomredirect-nopages": "\"$1\" ନାମରେ ଗୋଟିଏ ବି ପୁନପ୍ରେରଣ ନାହିଁ ।",
"statistics": "ହିସାବ",
"statistics-header-pages": "ପୃଷ୍ଠା ପରିସଙ୍ଖ୍ୟାନ",
"statistics-header-edits": "ପରିସଙ୍ଖ୍ୟାନ ସମ୍ପାଦନା",
- "statistics-header-views": "ପରିସଙ୍ଖ୍ୟାନ ଦେଖିବେ",
"statistics-header-users": "ସଭ୍ୟ ପରିସଙ୍ଖ୍ୟାନ",
"statistics-header-hooks": "ବାକି ପରିସଙ୍ଖ୍ୟାନ",
"statistics-articles": "ସୂଚୀ ପୃଷ୍ଠାସମୂହ",
@@ -1378,14 +1452,16 @@
"statistics-files": "ଫାଇଲସବୁ ଅପଲୋଡ଼ କରାଗଲା",
"statistics-edits": "{{SITENAME}} ତିଆରିହେବା ବେଳରୁ ପୃଷ୍ଠାର ନାମ",
"statistics-edits-average": "ପୃଷ୍ଠାପ୍ରତି ହାରାହାରି ସମ୍ପାଦନା",
- "statistics-views-total": "ମୋଟ ଦେଖଣା",
- "statistics-views-total-desc": "ଅଚଳ ପୃଷ୍ଠା ଓ ବିଶେଷ ପୃଷ୍ଠାର ଦେଖଣା ଏହା ଭିତରେ ଦିଆଯାଇନାହିଁ",
- "statistics-views-peredit": "ସମ୍ପାଦନା ପ୍ରତି ଦେଖା",
"statistics-users": "ପଞ୍ଜିକରଣ କରିଥିବା [[Special:ListUsers|ସଭ୍ୟଗଣ]]",
"statistics-users-active": "ସଚଳ ସଭ୍ୟ",
"statistics-users-active-desc": "ବିଗତ {{PLURAL:$1|ଦିନରେ|$1 ଦିନରେ}} କିଛି କାମ କରିଥିବା ସଭ୍ୟଗଣ",
- "statistics-mostpopular": "ସବୁଠାରୁ ଅଧିକ ଦେଖାଯାଇଥିବା ପୃଷ୍ଠା",
+ "pageswithprop": "ପୃଷ୍ଠା ବିବରଣୀ ଥିବା ପୃଷ୍ଠାମାନ",
+ "pageswithprop-legend": "ପୃଷ୍ଠା ବିବରଣୀଟିଏ ଥିବା ପୃଷ୍ଠାମାନ",
+ "pageswithprop-text": "ଏହୁ ପୃଷ୍ଠାରେ ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ପୃଷ୍ଠାର ଗୁଣଥିବା ପୃଷ୍ଠାମାନଙ୍କର ତାଲିକା ରହିଛି ।",
+ "pageswithprop-prop": "ଗୁଣ ନାମ:",
"pageswithprop-submit": "ଯିବା",
+ "pageswithprop-prophidden-long": "ଲମ୍ବା ଟେକ୍ସଟର ଗୁଣର ମୂଲ୍ୟ ଅଧିକ କାଳ ଧରି ଲୁଚିରହିଥିବା ($1)",
+ "pageswithprop-prophidden-binary": "ବାଇନାରି ଗୁଣ ମୂଲ୍ୟ ଲୁଚାଯାଇଛି ($1)",
"doubleredirects": "ଯୋଡ଼ା ପୁନପ୍ରେରଣ",
"doubleredirectstext": "ଏହି ପୃଷ୍ଠା ବାକି ବହୁବିକଳ୍ପ ପୃଷ୍ଠାମାନଙ୍କ ସହ ଯୋଡ଼ିଥାଏ ।\nପ୍ରତ୍ୟେକ ଧାଡ଼ିରେ ପ୍ରଥମ ଓ ଶେଷ ପୁନପ୍ରେରଣ ସହ ଯୋଡ଼ିବା ଲିଙ୍କ ରହିଥାଏ, ଆହୁରି ମଧ୍ୟ ଏଥିରେ ଦ୍ଵିତୀୟ ପୁନପ୍ରେରଣର ଲକ୍ଷ ସହ ଯୋଡ଼ିବାର ଲିଙ୍କ ଥାଏ , ଯାହାକି ସାଧାରଣତ \"ପ୍ରକୃତ\" ଲକ୍ଷ ପୃଷ୍ଠା ହୋଇଥାଏ, ଯାହାକୁ ପ୍ରଥମ ପୁନପ୍ରେରଣ ପୃଷ୍ଠା ଯୋଡ଼ିଥାଏ ।\n<del>କଟାହୋଇଥିବା</del> ନିବେଶସବୁ ସଜଡ଼ାଗଲା ।",
"double-redirect-fixed-move": "[[$1]]କୁ ଘୁଞ୍ଚାଯାଇଅଛି ।\nଏବେ ଆପେ ଆପେ ଅପଡେଟ ହୋଇଥାଏ ଏବଂ ଏବେ [[$2]]କୁ ପୁନପ୍ରେରିତ ହୋଇଛି ।",
@@ -1405,6 +1481,7 @@
"ninterwikis": "{{PLURAL:$1|interwiki|interwikis}} $1",
"nlinks": "$1 ଟି {{PLURAL:$1|ଲିଙ୍କ|ଲିଙ୍କ}}",
"nmembers": "$1 {{PLURAL:$1|member|ସଭ୍ୟ}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|ସଭ୍ୟ|ସଭ୍ୟଗଣ}}",
"nrevisions": "$1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}",
"nviews": "$1 ଟି {{PLURAL:$1|ଦେଖଣା|ଦେଖଣା}}",
"nimagelinks": "$1 ଟି {{PLURAL:$1|ପୃଷ୍ଠା|ପୃଷ୍ଠା}}ରେ ବ୍ୟବହାର କରାଯାଇଅଛି",
@@ -1418,40 +1495,50 @@
"uncategorizedtemplates": "ଶ୍ରେଣୀହିନ ଛାଞ୍ଚସବୁ",
"unusedcategories": "ବ୍ୟବହାର ହେଉନଥିବା ଶ୍ରେଣୀସମୂହ",
"unusedimages": "ବ୍ୟବହାର ହେଉନଥିବା ଫାଇଲସମୂହ",
- "popularpages": "ଜଣାଶୁଣା ପୃଷ୍ଠାସମୂହ",
"wantedcategories": "ଦରକାରୀ ଶ୍ରେଣୀସମୂହ",
"wantedpages": "ଦରକାରି ପୃଷ୍ଠା",
"wantedpages-badtitle": "$1 ଉତ୍ତରସବୁରେ ଥିବା ଭୁଲ ଟାଇଟଲ",
"wantedfiles": "ଦରକାରି ଫାଇଲ",
"wantedfiletext-cat": "ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ <del>struck out</del> ହେଇଯିବ । ଅଧିକନ୍ତୁ, ପ୍ରକୃତରେ ନଥିବା ଫାଇଲଗୁଡିକର ପୃଷ୍ଠାଗୁଡିକ [[:$1]]ରେ ତାଲିକାଭୁକ୍ତ ହୋଇଛି ।",
+ "wantedfiletext-cat-noforeign": "ଏହି ଫାଇଲସବୁ ତିଆରି ନ କରାଯାଇ ବ୍ୟବହାର କରାଯାଇଛି । ଏଥି ସହିତ, ତିଆରି ହୋଇନଥିବା ଫାଇଲକୁ ଏମବେଡ଼ କରିଥିବା ପୃଷ୍ଠାସବୁର ତାଲିକା [[:$1]]ରେ ରହିଛି ।",
"wantedfiletext-nocat": "ନିମ୍ନଲିଖିତ ଫାଇଲଗୁଡିକ ବ୍ୟବହୃତ ହେଇଛି ହଲେ ନାହିଁ । ରହିଥିବା ଫାଇଲ ବଦଳରେ ବାହାରେ ଥିବା ଫାଇଲଗୁଡିକ ତାଲିକାଭୁକ୍ତ ହେଇଛି । ଏହିଭଳି ଭୁଲ ସତ୍ୟଗୁଡିକ <del>struck out</del> ହେଇଯିବ ।",
+ "wantedfiletext-nocat-noforeign": "ଏହି ଫାଇଲସବୁ ବ୍ୟବହୃତ ହୋଇଥିଲେ ମଧ୍ୟ ତିଆରି କରାଯାଇନାହିଁ ।",
"wantedtemplates": "ଦରକାରୀ ଛାଞ୍ଚ",
"mostlinked": "ଅଧିକ ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠା",
"mostlinkedcategories": "ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଶ୍ରେଣୀ",
- "mostlinkedtemplates": "ବେଶୀ ଯୋଡ଼ାଯାଇଥିବା ଛାଞ୍ଚ",
+ "mostlinkedtemplates": "ବେଶି ଯୋଡ଼ାଯାଇଥିବା ପୃଷ୍ଠା",
"mostcategories": "ଅଧିକ ଶ୍ରେଣୀ ଥିବା ପୃଷ୍ଠା",
"mostimages": "ଫାଇଲରେ ବେଶି ଯୋଡ଼ାଯାଇଥିବା ଥିବା",
"mostinterwikis": "ସବୁଠାରୁ ଅଧିକ ଉଇକିଥିବା ପୃଷ୍ଠାଗୁଡିକ",
"mostrevisions": "ସବୁଠାରୁ ଅଧିକ ସଙ୍କଳନ ଥିବା ପୃଷ୍ଠାସମୂହ",
"prefixindex": "ଆଗରୁ କିଛି ଯୋଡ଼ା ସହ ଥିବା ସବୁ ଫରଦସବୁ",
"prefixindex-namespace": "ଉପସର୍ଗ ଲାଗିଥିବା ସବୁଯାକ ପୃଷ୍ଠା ($1 ଗୋଟି ନେମସ୍ପେସ)",
+ "prefixindex-strip": "ତାଲିକାରୁ ନାମ ଆଗରୁ ଲାଗୁଥିବା ଶବ୍ଦ ହଟାନ୍ତୁ",
"shortpages": "ଛୋଟ ପୃଷ୍ଠାସମୂହ",
"longpages": "ଲମ୍ବା ପୃଷ୍ଠା",
"deadendpages": "ଆଗକୁ ଯାଇପାରୁନଥିବା ପୃଷ୍ଠା",
"deadendpagestext": "ଏହି ପୃଷ୍ଠାସବୁ {{SITENAME}}ର ବାକି ପୃଷ୍ଠାମାନଙ୍କ ସଙ୍ଗେ ଯୋଡ଼ା ହୋଇ ନାହାନ୍ତି ।",
"protectedpages": "କିଳାଯାଇଥିବା ପୃଷ୍ଠାମାନ",
"protectedpages-indef": "କେବଳ ଆସିମୀତ କାଳ ପାଇଁ କିଳିବା",
+ "protectedpages-summary": "ଏହି ପୃଷ୍ଠାରେ କିଳା ହୋଇଥିବା ଆଗରୁ ତିଆରି ହୋଇ ରହିଥିବା ପୃଷ୍ଠାସବୁର ତାଲିକା ଅଛି । ତିଆରି ହେବାରୁ ରୋକାଯାଇଥିବା ନାମମାନଙ୍କର ତାଲିକା ପାଇଁ [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] ଦେଖନ୍ତୁ ।",
"protectedpages-cascade": "କିଲାଯାଇଥିବା ପୃଷ୍ଠାସବୁକୁ ଏକାଠି ସଜାଇ ରଖୁଅଛୁଁ",
+ "protectedpages-noredirect": "ଲେଉଟାଣି ଲୁଚାନ୍ତୁ",
"protectedpagesempty": "ଏହି ସବୁ ସଜାଣି ସହ ଗୋଟିଏ ବି ପୃଷ୍ଠା ଏବେ କିଳାଯାଇ ନାହିଁ ।",
"protectedpages-timestamp": "ସମୟ",
"protectedpages-page": "ପୃଷ୍ଠା",
"protectedpages-expiry": "ଅଚଳ ହେବ",
+ "protectedpages-performer": "ସଭ୍ୟଙ୍କୁ କିଳିବେ",
+ "protectedpages-params": "ଅଟକ ଗୁଣାବଳୀ",
+ "protectedpages-reason": "କାରଣ",
+ "protectedpages-unknown-timestamp": "ଅଜଣା",
"protectedpages-unknown-performer": "ଅଜଣା ସଭ୍ୟ",
"protectedtitles": "କିଳାଯାଇଥିବା ଶିରୋନାମାମାନ",
+ "protectedtitles-summary": "ଏହି ପୃଷ୍ଠାରେ ତିଆରି କରିବାରୁ ଅଟକାଯାଇଥିବା ନାମସବୁର ତାଲିକା ରହିଛି । ଉପଲବ୍ଧ ଥିବା ଓ କିଳାଯାଇଥିବା ପୃଷ୍ଠାର ତାଲିକା ପାଇଁ [[{{#special:ProtectedPages}}|{{int:protectedpages}} ଦେଖନ୍ତୁ]] ।",
"protectedtitlesempty": "ଏହି ସବୁ ସଜାଣି ସହ ଗୋଟିଏ ବି ପୃଷ୍ଠା ଏବେ କିଳାଯାଇ ନାହିଁ ।",
"listusers": "ବ୍ୟବହାରକାରୀଙ୍କ ତାଲିକା",
"listusers-editsonly": "କେବଳ କିଛି ସମ୍ପାଦନା କରିଥିବା ସଭ୍ୟମାନଙ୍କୁ ଦେଖାଇବେ",
"listusers-creationsort": "ତିଆରି ତାରିଖ ଅନୁସାରେ ସଜାଇବେ",
+ "listusers-desc": "ଅବରୋହୀ କ୍ରମରେ ସଜାନ୍ତୁ",
"usereditcount": "$1 ଗୋଟି {{PLURAL:$1|ସମ୍ପାଦନା|ସମ୍ପାଦନା}}",
"usercreated": "$1 ତାରିଖ ଦିନ $2 ବେଳେ {{GENDER:$3|ତିଆରି କରାଗଲା}}",
"newpages": "ନୂଆ ପୃଷ୍ଠା",
@@ -1471,7 +1558,7 @@
"querypage-disabled": "ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ଦେଖଣା କାରଣରୁ ଅଚଳ କରାଯାଇଅଛି ।",
"booksources": "ବହିର ମୁଳାଧାର",
"booksources-search-legend": "ବହିର ସ୍ରୋତସବୁକୁ ଖୋଜିବେ",
- "booksources-go": "ଯିବା",
+ "booksources-search": "ଖୋଜିବେ",
"booksources-text": "ତଳଲିଖିତ ତାଲିକାଟିରେ ନୂଆ ଓ ପୁରୁଣା ବହି ବିକୁଥିବା ସାଇଟମାନଙ୍କର ତାଲିକା ରହିଅଛି, ଆଉ ଆପଣ ଖୋଜୁଥିବା ବହିର ତଥ୍ୟ ବି ଏଥିରେ ଥାଇପାରେ ।",
"booksources-invalid-isbn": "ଏହି ISBN ଟି ବୈଧ ବୋଲି ବୋଧ ହେଉନାହିଁ; ନକଲ କରିଥିବା ମୂଳ ସ୍ଥାନରେ ଆଉଥରେ ପରଖିନିଅନ୍ତୁ ।",
"specialloguserlabel": "ଯୋଗଦାନକାରୀ:",
@@ -1538,10 +1625,21 @@
"listgrouprights-removegroup-self": "{{PLURAL:$2|ଗୋଠଟିଏ|ଗୋଟି ଗୋଠ}} ନିଜ ଖାତାରୁ ହଟାଇବେ: $1",
"listgrouprights-addgroup-self-all": "ନିଜ ଖାତାରେ ସବୁଯାକ ଗୋଠ ଯୋଡ଼ିବେ",
"listgrouprights-removegroup-self-all": "ନିଜ ଖାତାରୁ ସବୁଯାକ ଗୋଠ ହଟାଇଦେବେ",
+ "listgrouprights-namespaceprotection-header": "ନେମସ୍ପେସ ଅଟକା",
"listgrouprights-namespaceprotection-namespace": "ନେମସ୍ପେସ",
"listgrouprights-namespaceprotection-restrictedto": "ସଭ୍ୟଙ୍କୁ ସମ୍ପାଦନା ପାଇଁ ଦିଆଯାଇଥିବା ଅଧିକାର",
"trackingcategories": "ଶ୍ରେଣୀମାନ ତଦାରଖ କରାଯାଉଛି",
+ "trackingcategories-summary": "MediaWiki ସଫ୍ଟଓଏର ଦ୍ୱାରା ଆପେ ଆପେ ତିଆରି ହେଉଥିବା ଶ୍ରେଣୀସବୁର ତାଲିକା ଏହି ପୃଷ୍ଠାରେ ରହିଛି । {{ns:8}} ନେମସ୍ପେସରେ ସିଷ୍ଟମ ମେସେଜସବୁ ବଦଳାଇ ସେମାନଙ୍କ ନାମ ବଦଳା ଯାଇପାରିବ ।",
+ "trackingcategories-msg": "ଶ୍ରେଣୀ ଉପରେ ନିଘା",
"trackingcategories-name": "ନାମ ମେସେଜ କରନ୍ତୁ",
+ "trackingcategories-desc": "ଶ୍ରେଣୀ ଅନ୍ତର୍ଗତ କରିବା ଗୁଣ",
+ "noindex-category-desc": "<code><nowiki>__NOINDEX__</nowiki></code> ମ୍ୟାଜିକ ୱାର୍ଡ଼ ଥିବାରୁ ଏହି ପୃଷ୍ଠାଟି ରୋବଟମାନଙ୍କ ଦ୍ୱାରା ସୂଚୀକରଣ କରାଯାଇନାହିଁ । ପୃଷ୍ଠାଟି ଏକ ରୋବଟ ସୂଚକ ଅନୁମୋଦିତ ଥିବା ନେମସ୍ପେସରେ ରହିଛି ।",
+ "index-category-desc": "ଏହି ପୃଷ୍ଠାରେ ଏକ <code><nowiki>__INDEX__</nowiki></code> ରହିଛି (ଏବଂ ଏହା ସୂଚକଟି ଅନୁମୋଦିତ ଥିବା ଏକ ନେମସ୍ପେସରେ ରହିଛି), ଏବଂ ଏଣୁ ଏହା ରୋବଟମାନଙ୍କ ସହିତ ଶ୍ରେଣୀଭୁକ୍ତ ହୋଇଛି, ସାଧାରଣତଃ ଏହା ସେଠାରେ ରହେ ନାହିଁ ।",
+ "post-expand-template-inclusion-category-desc": "ସବୁ ଛାଞ୍ଚ ବଢ଼ାଇଲା ପରେ ଏହି ପୃଷ୍ଠାର ଆକାର <code>$wgMaxArticleSize</code>ରୁ ବଡ଼, ତେଣୁ କିଛି ଛାଞ୍ଚଙ୍କ ବାବଦରେ ବତାଯାଇନଥିଲା ।",
+ "post-expand-template-argument-category-desc": "ଛାଞ୍ଚର ଯୁକ୍ତିଟିଏ ବଢ଼ାଇଲା ପରେ ଏହି ପୃଷ୍ଠାର ଆକାର <code>$wgMaxArticleSize</code>ରୁ ବଡ଼ ହୋଇଗଲା (ବେଳେବେଳେ <code>{{{Foo}}}</code> ଭଳି ତିନୋଟି କୁଟିଳ ବନ୍ଧନୀରେ ଦେଖହିବାକୁ ମିଳେ) ।",
+ "expensive-parserfunction-category-desc": "ଏହି ପୃଷ୍ଠାଟି କିଛି ଜଟିଳ ପାର୍ସ ଫଙ୍କସନ ବ୍ୟବହାର କରେ (ଯଥା <code>#ifexist</code>) । [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] ଦେଖନ୍ତୁ ।",
+ "broken-file-category-desc": "ଏହି ପୃଷ୍ଠାରେ ଏକ ଅକାମୀ ଫାଇଲର ଲିଙ୍କ ରହିଛି (ଫାଇଲ ନଥାଇ ତାହାକୁ ଏମବେଡ଼ କରିବା ପାଇଁ ଲିଙ୍କ ଦିଆଯାଇଛି) ।",
+ "hidden-category-category-desc": "ବିଷୟବସ୍ତୁରେ ଶ୍ରେଣୀଟିରେ <code><nowiki>__HIDDENCAT__</nowiki></code> ରହିଛି, ଯାହା ତାହାକୁ ଆପେଆପେ ଶ୍ରେଣୀ ଲିଙ୍କ ଘରେ ଦେଖାଇବାରୁ ରୋକେ ।",
"trackingcategories-nodesc": "କୌଣସି ବିବରଣ ନାହିଁ ।",
"trackingcategories-disabled": "ଶ୍ରେଣୀ ନିଷ୍କ୍ରିୟ କରାଯାଇଛି",
"mailnologin": "ଗୋଟିଏ ବି ପଠାଇବା ଠିକଣା ନାହିଁ",
@@ -1578,7 +1676,7 @@
"mywatchlist": "ଦେଖଣାତାଲିକା",
"watchlistfor2": "$1 $2 ପାଇଁ",
"nowatchlist": "ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାରେ କିଛି ବି ଜିନିଷ ନାହିଁ ।",
- "watchlistanontext": "ଆପଣା ଦେଖଣାତାଲିକାରେ କିଛି ସମ୍ପାଦନା କରିବା ନିମନ୍ତେ ଦୟାକରି $1 କରନ୍ତୁ ।",
+ "watchlistanontext": "ନିଜ ଦେଖଣାତାଲିକାକୁ ଦେଖିବା କିମ୍ବା ସମ୍ପାଦନା କରିବା ପାଇଁ ଲଗ ଇନ କରନ୍ତୁ ।",
"watchnologin": "ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି",
"addwatch": "ଦେଖଣାତାଲିକାରେ ଯୋଡ଼ିବେ",
"addedwatchtext": "\"[[:$1]]\" ପୃଷ୍ଠାଟି ଆପଣଙ୍କ [[Special:Watchlist|ଦେଖଣାତାଲିକା]]ରେ ଯୋଡ଼ିଦିଆଗଲା ।\nଏହି ପୃଷ୍ଠାରେ ଭବିଷ୍ୟତର ଅଦଳ ବଦଳ ଓ ତାହା ସହ ଯୋଡ଼ା ଆଲୋଚନା ପୃଷ୍ଠା ସେଠାରେ ଦିଆଯିବ ।",
@@ -1595,8 +1693,8 @@
"watchlist-details": "ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାରେ {{PLURAL:$1|$1 ଟି ପୃଷ୍ଠା|$1 ଟି ପୃଷ୍ଠା}} ଅଛି, ଆଲୋଚନା ପୃଷ୍ଠାମାନଙ୍କୁ ଅଲଗା ଗଣାଯାଇନାହିଁ ।",
"wlheader-enotif": "ଇମେଲ ସୂଚନା ସଚଳ କରାଗଲା ।",
"wlheader-showupdated": "ଆପଣ ଶେଷଥର ଦେଖିଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ '''ମୋଟା ଅକ୍ଷର'''ରେ ଦେଖାଯାଉଅଛି ।",
- "wlnote": "$3, $4 ସୁଦ୍ଧା ବିଗତ {{PLURAL:$2|ଘଣ୍ଟେ ଭିତରେ|'''$2''' ଘଣ୍ଟା ଭିତରେ}} ଘଟିଥିବା {{PLURAL:$1|ଶେଷ ବଦଳଟି ଅଛି|ଶେଷ '''$1''' ଟି ବଦଳ}} ତଳେ ଦିଆଯାଇଛି ।",
- "wlshowlast": "ଶେଷ $1 ଘଣ୍ଟା $2 ଦିନ $3 ଦେଖାଇବେ",
+ "wlnote": "$3, $4 ଅନୁସାରେ ବିଗତ {{PLURAL:$2|ଘଣ୍ଟାକରେ|<strong>$2</strong> ଘଣ୍ଟାରେ}}{{PLURAL:$1|ଶେଷ ବଦଳ|ଶେଷ <strong>$1</strong> ବଦଳ ତଳେ ଦିଆଗଲା}} ।",
+ "wlshowlast": "ଗତ $1 ଘଣ୍ଟା $2 ଦିନ ଦେଖାନ୍ତୁ",
"watchlist-options": "ଦେଖଣା ବିକଳ୍ପସବୁ",
"watching": "ଦେଖୁଛି...",
"unwatching": "ଦେଖୁନାହିଁ...",
@@ -1616,7 +1714,7 @@
"enotif_lastvisited": "ଆପଣଙ୍କ ଶେଷ ଦେଖଣା ପରେ ହୋଇଥିବା ବଦଳସବୁକୁ ଦେଖିବା ନିମନ୍ତେ $1 ଦେଖନ୍ତୁ ।",
"enotif_lastdiff": "ଏହି ବଦଳ ଦେଖିବା ପାଇଁ $1 ଦେଖନ୍ତୁ ।",
"enotif_anon_editor": "ବେନାମି ସଭ୍ୟ $1",
- "enotif_body": "ପ୍ରିୟ $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nଏହି {{SITENAME}} $PAGETITLE ପୃଷ୍ଠାଟି $PAGEEDITOR ଙ୍କ ଦେଇ $PAGEEDITDATE ବେଳେ $CHANGEDORCREATE, ନଗଦ ସଂସ୍କରଣ ପାଇଁ $PAGETITLE_URL ଦେଖନ୍ତୁ ।\n\n$NEWPAGE\n\nସମ୍ପାଦକଙ୍କ ସାରକଥା: $PAGESUMMARY $PAGEMINOREDIT\n\nସମ୍ପାଦକଙ୍କ ସହିତ ଯୋଗାଯୋଗ:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nଭବିଷ୍ୟତରେ ଆପଣ ପୃଷ୍ଠାଟିକୁ ନ ଦେଖିବା ଯାଏ ଆଉ କିଛି ବି ସୂଚନା ରହିବ ନାହିଁ ।ଆପଣା ଦେଖଣାତାଲିକାରୁ ଆପଣ ସବୁଯାକ ସୂଚନା ଫଳକକୁ ମୂଳ ଅବସ୍ଥାକୁ ଫେରାଇ ଦେଇପାରିବେ ।\n\n\t\t\t ଆପଣଙ୍କର ହିତକାରୀ {{SITENAME}} ସୂଚନା ପ୍ରଣାଳୀ\n\n--\nଆପଣା ଇ-ମେଲ ସୂଚନା ସଜାଣି ଦେଖିବା ନିମନ୍ତେ\n{{canonicalurl:{{#special:Preferences}}}} ଦେଖନ୍ତୁ",
+ "enotif_body": "Dear $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nଉଇକିଆଳିଙ୍କ ସୂଚନା: $PAGESUMMARY $PAGEMINOREDIT\n\nଉଇକିଆଳିଙ୍କୁ ଜଣାନ୍ତୁ:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nକିଛି କାମ ହେଲେ ମଧ୍ୟ ଭବିଷ୍ୟତରେ ଆପଣ ଲଗ ଇନ କରି ପୃଷ୍ଠାଟିକୁ ନ ଦେଖିବା ଯାଏ ଆଉ କିଛି ବି ସୂଚନା ରହିବ ନାହିଁ । ଆପଣ ନିଜର ଦେଖଣାତାଲିକାରେ ଥିବା ସବୁ ପୃଷ୍ଠାମାନଙ୍କ ସୂଚନା ସୂଚକମାନଙ୍କୁ ରିସେଟ କରିପାରିବେ।\n\nଆପଣଙ୍କ ହିତକାରୀ {{SITENAME}} ସୂଚନା ବ୍ୟବସ୍ଥା\n\n--\nନିଜର ଇମେଲ ସୂଚନା ସଂରଚନା ବଦଳାଇବା ପାଇଁ\n{{canonicalurl:{{#special:Preferences}}}} ଦେଖନ୍ତୁ\n\nନିଜର ଦେଖଣାତାଲିକା ସୂଚନା ସଂରଚନା ବଦଳାଇବା ପାଇଁ\n{{canonicalurl:{{#special:EditWatchlist}}}} ଦେଖନ୍ତୁ\n\nଏହି ପୃଷ୍ଠାଟିକୁ ନିଜର ଦେଖଣାତାଲିକାରୁ ହଟାଇବା ପାଇଁ\n$UNWATCHURL\n\nମତାମତ ଓ ଅଧିକ ସହଯୋଗ:\n$HELPPAGE",
"created": "ତିଆରି କରାଗଲା",
"changed": "ବଦଳାଗଲା",
"deletepage": "ପୃଷ୍ଠାଟି ଲିଭାଇଦେବେ",
@@ -1626,7 +1724,7 @@
"exbeforeblank": "ଖାଲିକରିବା ଆଗରୁ ଭିତରେ \"$1\" ଥିଲା",
"delete-confirm": "ଲିଭେଇବେ \"$1\"",
"delete-legend": "ଲିଭାଇବେ",
- "historywarning": "'''ଚେତାବନୀ:''' ଆପଣ ଲିଭାଇବାକୁ ଯାଉଥିବା ଏହି ପୃଷ୍ଠାଟିର ପାଖାପାଖି $1 {{PLURAL:$1|ଟି ସଙ୍କଳନ|ଗୋଟି ସଙ୍କଳନ}} ରହିଅଛି:",
+ "historywarning": "<strong>ଚେତାବନୀ:</strong> ଆପଣ ଲିଭାଇବାକୁ ଯାଉଥିବା ପୃଷ୍ଠାଟିରେ $1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}}ର ଇତିହାସ ରହିଛି:",
"confirmdeletetext": "ଆପଣ ଗୋଟିଏ ପୃଷ୍ଠାର ଇତିହାସ ସହ ତାହାକୁ ଲିଭାଇବାକୁ ଯାଉଛନ୍ତି ।\nଏହା ଥୟ କରନ୍ତୁ ଯେ ଆପଣ ଏହାର ପରିଣତି ଜାଣିଛନ୍ତି ଓ ଏହା [[{{MediaWiki:Policy-url}}|ମିଡ଼ିଆଉଇକିର ନିୟମ]] ଅନୁସାରେ କରୁଛନ୍ତି ।",
"actioncomplete": "କାମଟି ପୁରା ହେଲା",
"actionfailed": "କାମଟି ଅସଫଳ ହୋଇଗଲା",
@@ -1638,12 +1736,13 @@
"deletecomment": "କାରଣ:",
"deleteotherreason": "ବାକି/ଅଧିକ କାରଣ:",
"deletereasonotherlist": "ଅଲଗା କାରଣ",
- "deletereason-dropdown": "*ସାଧାରଣ ଲିଭାଇବା କାରଣ\n** ଲେଖକ ଅନୁରୋଧ\n** ସତ୍ଵାଧିକାର ଉଲଂଘନ\n** ଅନୀତିକର କାମ",
+ "deletereason-dropdown": "* *ସାଧାରଣ ଲିଭାଇବା କାରଣ\n** ସ୍ପାମ\n** ଅନୀତିକର କାମ\n** ସତ୍ଵାଧିକାର ଉଲଂଘନ\n** ଲେଖକ ଅନୁରୋଧ\n** ଅକାମୀ ଲେଉଟାଣି",
"delete-edit-reasonlist": "ଲିଭାଇବା କାରଣମାନ ବଦଳାଇବେ",
"delete-toobig": "ଏହି ପୃଷ୍ଠାର ଏକ ଲମ୍ବା ସମ୍ପାଦନା ଇତିହାସ ଅଛି, ଯେଉଁଥିରେ $1 {{PLURAL:$1|ଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ରହିଛି ।\n{{SITENAME}}ରେ ଦୁର୍ଘଟଣାବଶତ ଅସୁବିଧାକୁ ଏଡ଼ାଇବା ପାଇଁ ଏହାକୁ ଲିଭାଇବାରୁ ବାରଣ କରାଯାଇଛି ।",
"delete-warning-toobig": "ଏହି ପୃଷ୍ଠାର ଏକ ଲମ୍ବ ସମ୍ପାଦନ ଇତିହାସ ରହିଛି, ଯେଉଁଥିରେ $1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ରହିଛି ।\nଏହାକୁ ଲିଭାଇଲେ {{SITENAME}}ରେ ଅସୁବିଧା ହୋଇପାରେ ।\nସାବଧାନତାର ସହ ଆଗକୁ ବଢ଼ନ୍ତୁ ।",
+ "deleteprotected": "ଏହି ପୃଷ୍ଠାଟି କିଳାଯାଇଥିବାରୁ ଆପଣ ଏହାକୁ ଲିଭାଇପାରିବେ ନାହିଁ ।",
+ "deleting-backlinks-warning": "''' ଚେତାବନୀ:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|ବାକି ପୃଷ୍ଠା]] ଆପଣ ଲିଭାଇବାକୁ ଯାଉଥିବା ପୃଷ୍ଠାଟି ସହିତ ଲିଙ୍କ କରନ୍ତୁ କିମ୍ବା ତାହାକୁ କାଢ଼ନ୍ତୁ ।",
"rollback": "ପୁରାପୁରି ପଛକୁ ଫେରିବା ବଦଳ",
- "rollback_short": "ପୂରାପୂରି ପଛକୁ ଫେରିଯିବେ",
"rollbacklink": "ପୂରାପୂରି ପଛକୁ ଫେରିଯିବେ",
"rollbacklinkcount": "{{PLURAL:$1|edit|edits}} $1 ପଛକୁ ଫେରାଇବେ",
"rollbacklinkcount-morethan": "{{PLURAL:$1|edit|edits}} $1ରୁ ଅଧିକ ପଛକୁ ଫେରାଇବେ",
@@ -1652,7 +1751,7 @@
"alreadyrolled": "[[User:$2|$2]]([[User talk:$2|talk]] {{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])ଙ୍କ ଦେଇ [[:$1]]ରେ ହୋଇଥିବା ଶେଷ ବଦଳକୁ ପଛକୁ ଫେରାଯାଇପାରିବ ନାହିଁ ;\nଏହାକୁ ଆଉ କେହି ସମ୍ପାଦନା କରିଛି ବା ପୁରାପୁରି ପଛକୁ ଫେରାଇଦେଇଛି ।\n\nଏହି ପୃଷ୍ଠାର ଶେଷ ସମ୍ପାଦନା [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ଙ୍କ ଦେଇ ହୋଇଥିଲା ।",
"editcomment": "ସମ୍ପାଦନାର ସାରକଥା ଥିଲା: \"''$1''\" ।",
"revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ଆଲୋଚନା]])ଙ୍କ ଦେଇ କରାଯାଇଥିବା ବଦଳକୁ [[User:$1|$1]]ଙ୍କ ଦେଇ କରାଯାଇଥିବା ଶେଷ ବଦଳକୁ ଫେରାଇ ଦିଆଗଲା",
- "revertpage-nouser": "(ଇଉଜର ନାମ ବାହାର କରିଦିଆଯାଇଅଛି)ଙ୍କ ଦେଇ କରାଯାଇଥିବା ବଦଳକୁ [[User:$1|$1]]ଙ୍କ ଦେଇ କରାଯାଇଥିବା ଶେଷ ବଦଳକୁ ଲେଉଟାଇଦିଆଗଲା",
+ "revertpage-nouser": "{{GENDER:$1|[[User:$1|$1]]}}ଙ୍କ ଦେଇ ଜଣେ ଅଜଣା ସଭ୍ୟଙ୍କ ସମ୍ପାଦନାକୁ ପଛକୁ ଫେରଗଲା",
"rollback-success": "$1ଙ୍କ ଦେଇ ହୋଇଥିବା ସମ୍ପାଦନାକୁ ପୁରାପୁରି ପଛକୁ ଲେଉଟାଇ ଦିଆଗଲା;\n$2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କରଣକୁ ବଦଳାଇ ଦିଆଗଲା ।",
"sessionfailure-title": "ଅବଧି ବିଫଳ",
"sessionfailure": "ଆପଣଙ୍କ ଲଗଇନ ଅବଧିରେ କିଛି ଅସୁବିଧା ହୋଇଛି;\nଅବଶ୍ୟ ଚୋରା ବିରୋଧରେ ଏହି କାମଟି ନାକଚ କରିଦିଆଗଲା ।\nଆଗ ପୃଷ୍ଠାକୁ ଲେଉଟିଯାଇ ପୃଷ୍ଠାଟି ଆଉଥରେ ଲୋଡ଼ କରନ୍ତୁ ।",
@@ -1679,7 +1778,7 @@
"protect-locked-blocked": "ଆପଣଙ୍କୁ ଅଟକାଯାଇଥିବାରୁ ଆପଣ ପ୍ରତିରକ୍ଷା ସ୍ତରକୁ ବଦଳାଇ ପାରିବେ ନାହିଁ ।\n'''$1''' ପୃଷ୍ଠା ପାଇଁ ଏବେକାର ସଜାଣି ଦେଖନ୍ତୁ:",
"protect-locked-dblock": "ଏକ ସଚଳ ଡାଟାବେସ କିଳାଯାଇଥିବା ହେତୁ ପ୍ରତିରକ୍ଷା ସ୍ତରକୁ ବଦଳଯାଇପାରିବ ନାହିଁ ।\n'''$1''' ପୃଷ୍ଠା ପାଇଁ ଏବେକାର ସଜାଣି ଏଠାରେ ଦିଆଗଲା:",
"protect-locked-access": "ଆପଣଙ୍କ ଖାତାରେ ପ୍ରତିରକ୍ଷା ସ୍ତରକୁ ବଦଳାଇବା ନିମନ୍ତେ ଅନୁମତି ନାହିଁ ।\n'''$1''' ପୃଷ୍ଠା ପାଇଁ ଏବେକାର ସଜାଣି ଏଠାରେ ଦିଆଗଲା:",
- "protect-cascadeon": "ଏହି ପୃଷ୍ଠାଟି ଏବେ ପାଇଁ କିଳାଯାଇଛି {{PLURAL:$1|ପୃଷ୍ଠା, ଯେଉଁଥିରେ|ପୃଷ୍ଠମାନ, ଯେଉଁସବୁରେ}} କାସକେଡ଼କରା ସୁରକ୍ଷା ସଚଳ ଥିଲା ।\nଆପଣ ପୃଷ୍ଠାଟିର ପ୍ରତିରକ୍ଷା ସ୍ତର ବଦଳାଇ ପାରିବେ, କିନ୍ତୁ ଏହା କାସକେଡ଼ ପ୍ରତିରକ୍ଷାକୁ ପ୍ରଭାବିତ କରିନଥାଏ ।",
+ "protect-cascadeon": "ଏହି {{PLURAL:$1|ପୃଷ୍ଠାଟିରେ|ପୃଷ୍ଠାମାନଙ୍କରେ}} କ୍ୟାସକେଡ଼ କିଳିବା ସକ୍ରିୟ ହୋଇଥିବାରୁ ଏହି ପୃଷ୍ଠାଟି ଏବେ କିଳାଯାଇଛି ।\nଏହି ପୃଷ୍ଠାର କିଳାଯିବା ଅବସ୍ଥା ବଦଳିଲେ ଏହାର କ୍ୟାସକେଡ଼ କିଳିବା ବଦଳିବ ନାହିଁ ।",
"protect-default": "ସବୁ ଇଉଜରଙ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ",
"protect-fallback": "କେବଳ \"$1\" ଅନୁମତି ଥିବା ବ୍ୟବହାରକାରୀ ମାନଙ୍କୁ ଛାଡିବେ",
"protect-level-autoconfirmed": "କେବଳ ଆପେ ଆପେ ସହମତ ହୋଇଥିବା ବ୍ୟବହାରକାରୀ ମାନଙ୍କୁ ଛାଡିବେ",
@@ -1693,6 +1792,7 @@
"protect-othertime": "ବାକି ସମୟ:",
"protect-othertime-op": "ବାକି ସମୟ",
"protect-existing-expiry": "ମିଆଦ ପୁରିବା କାଳ: $3, $2",
+ "protect-existing-expiry-infinity": "ଏବେକାର ଅବଧି: ଅସୀମିତ କାଳ",
"protect-otherreason": "ବାକି/ଅଧିକ କାରଣ:",
"protect-otherreason-op": "ଅଲଗା କାରଣ",
"protect-dropdown": "*ସାଧାରଣ ପ୍ରତିରକ୍ଷା କାରଣ\n** ଅତି ଅଧିକ ଅପବ୍ୟବହାର\n** ଅତି ଅଧିକ ଅଦରକାରୀ ଚିଜ ପୁରାଇବା\n** ନକାରାତ୍ମକ ସମ୍ପାଦନା ତାଗିଦା\n** ଅଧିକ ଦେଖାଯାଉଥିବା ପୃଷ୍ଠା",
@@ -1758,7 +1858,7 @@
"contributions": "{{GENDER:$1|User}}ଙ୍କ ଅବଦାନ",
"contributions-title": "$1 ପାଇଁ ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ",
"mycontris": "ଅବଦାନ",
- "contribsub2": "$1 ($2) ପାଇଁ",
+ "contribsub2": "{{GENDER:$3|$1}} ପାଇଁ ($2)",
"contributions-userdoesnotexist": "ଇଉଜର ନାମ \"$1\" ତିଆରି କରାଯାଇ ନାହିଁ ।",
"nocontribs": "ଏହି ନିର୍ଣ୍ଣାୟକବଳୀ ନିମନ୍ତେ କିଛି ବି ବଦଳ ମେଳ ଖାଇଲା ନାହିଁ ।",
"uctop": "(ଏବେକାର)",
@@ -1779,6 +1879,7 @@
"sp-contributions-search": "ଅବଦାନ ପାଇଁ ଖୋଜନ୍ତୁ",
"sp-contributions-username": "ବ୍ୟବହାରକାରୀଙ୍କର IP ଠିକଣା ବା ଇଉଜର ନାମ:",
"sp-contributions-toponly": "ନଗଦ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
+ "sp-contributions-newonly": "କେବଳ ନୂଆ ପୃଷ୍ଠା ତିଆରିର ସମ୍ପାଦନା ଦେଖାନ୍ତୁ",
"sp-contributions-submit": "ଖୋଜନ୍ତୁ",
"whatlinkshere": "ଏଠାରେ ଥିବା ଲିଙ୍କ",
"whatlinkshere-title": "\"$1\" କୁ ପୃଷ୍ଠା ଲିଙ୍କ",
@@ -1800,7 +1901,7 @@
"autoblockid": "#$1ଙ୍କୁ ଆପେଆପେ ଅଟକାଇଦେବେ",
"block": "ସଭ୍ୟଙ୍କୁ ଅଟକାଇବେ",
"unblock": "ବାସନ୍ଦ ହୋଇଥିବା ସଭ୍ୟଙ୍କୁ ମୁକୁଳାଇବେ",
- "blockip": "ସଭ୍ୟଙ୍କୁ ଅଟକାଇବେ",
+ "blockip": "{{GENDER:$1|ଜଣ ସଭ୍ୟଙ୍କୁ}} ଅଟକାନ୍ତୁ",
"blockip-legend": "ସଭ୍ୟଙ୍କୁ ବାସନ୍ଦ କରିବେ",
"blockiptext": "ଏକ ନିର୍ଦିଷ୍ଟ IP ଠିକଣା ବା ବ୍ୟବହାରକାରୀଙ୍କ ଲେଖିବା ସୁବିଧାକୁ ବାରାଁ କରିବା ନିମନ୍ତେ ଏହି ତଳ ଫର୍ମଟି ବ୍ୟବହାର କରନ୍ତୁ ।\nଏହା କେବଳ ଅପବ୍ୟବହାରକୁ ରୋକିବା ନିମନ୍ତେ କରାଯାଇଥାଏ, ଏହା [[{{MediaWiki:Policy-url}}|ନୀତି]] ଅନୁସାରେ କରାଯାଇଥାଏ ।\nଏହା ତଳେ ଏକ ନିର୍ଦିଷ୍ଟ କାରଣ ଦିଅନ୍ତୁ (ଯଥା, ଯେଉଁସବୁ ପୃଷ୍ଠାରେ କିଛି ପ୍ରକାରର ଅପବ୍ୟବହାର କରାଯାଇଛି) ।",
"ipaddressorusername": "ବ୍ୟବହାରକାରୀଙ୍କର IP ଠିକଣା ବା ଇଉଜର ନାମ:",
@@ -1824,17 +1925,19 @@
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] ଅଟକାଯାଯାଇଛି.<br />\nଅଟକ ବାବଦରେ ଟିପ୍ପଣୀ ଦେବା ନିମନ୍ତେ [[Special:BlockList|block list]] ଦେଖନ୍ତୁ ।",
"ipb-blockingself": "ଆପଣ ନିଜକୁ ଅଟକାଇବାକୁ ଯାଉଛନ୍ତି ! ଆପଣ ପୁରାପୁରି ନିଶ୍ଚିତ ତ?",
"ipb-confirmhideuser": "ଆପଣ \"ବ୍ୟବହାରକାରୀଙ୍କୁ ଲୁଚାନ୍ତୁ\" ସଚଳ କରି ଜଣେ ବ୍ୟବହାରକାରୀଙ୍କୁ ଅଟକାଇବାକୁ ଯାଉଛନ୍ତି । ଏହା ବ୍ୟବହାରକାରୀଙ୍କ ନାମକୁ ସବୁଯାକ ତାଲିକାୟ ଇତିହାସରେ ଲୁଚାଇଦେବ । ତଥାପି ବି ଆପଣ ଏହା କରିବାକୁ ଚାହୁଁଛନ୍ତି କି?",
+ "ipb-confirmaction": "ଯଦି ଆପଣ ଏହା କରିବା ବାବଦରେ ପୂରା ନିଶ୍ଚିତ ତେବେ ଦୟାକରି ତଳେ {{PLURAL:$1|page, which has|pages, which have}} ଦେଖିନିଅନ୍ତୁ ।",
"ipb-edit-dropdown": "ସମ୍ପାଦନା ଅଟକ କାରଣମାନ",
"ipb-unblock-addr": "$1ଙ୍କୁ କିଳିବେ ନାହି",
"ipb-unblock": "ଏକ ଇଉଜର ନାମ ବା IP ଠିକଣାକୁ ବାସନ୍ଦରୁ ମୁକୁଳାଇବେ",
"ipb-blocklist": "ଏବେ ଥିବା ଅଟକମାନ ଦେଖାନ୍ତୁ",
- "ipb-blocklist-contribs": "$1 ପାଇଁ ଅବଦାନ",
+ "ipb-blocklist-contribs": "{{GENDER:$1|$1}} ପାଇଁ ଅବଦାନ",
"unblockip": "ବାସନ୍ଦ ହୋଇଥିବା ସଭ୍ୟଙ୍କୁ ମୁକୁଳାଇବେ",
"unblockiptext": "ଆଗରୁ ବାସନ୍ଦ କରାଯାଇଥିବା ଇଉଜର ନାମ ବା IP ଠିକଣା ମୁକୁଳାଇବା ନିମନ୍ତେ ତଳେ ଥିବା ଫର୍ମ ବ୍ୟବହାର କରନ୍ତୁ ।",
"ipusubmit": "ଏହି ବାସନ୍ଦଟିକୁ ଉଠାଇଦେବେ",
"unblocked": "[[User:$1|$1]] ନାମକ ସଭ୍ୟଜଣକ ବାସନ୍ଦରୁ ମୁକୁଳିଗଲେ",
"unblocked-range": "$1 ଅଟକରୁ ବାହାର କରିଦିଆଗଲା",
"unblocked-id": "$1 ଅଟକଟି ହଟାଇଦିଆଗଲା",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]]ଙ୍କୁ ଅଟକରୁ ମୁକୁଳାଗଲା ।",
"blocklist": "ବାସନ୍ଦ କରାଯାଇଥିବା ସଭ୍ୟ",
"ipblocklist": "ଅଟକାଯାଇଥିବା ସଭ୍ୟସମୂହ",
"ipblocklist-legend": "ଜଣେ ଅଟକାଯାଇଥିବା ସଭ୍ୟ ଖୋଜିବେ",
@@ -1865,7 +1968,7 @@
"change-blocklink": "ଓଗଳାକୁ ବଦଳାଇବେ",
"contribslink": "ଅବଦାନ",
"emaillink": "ଇ-ମେଲ ପଠାଇବେ",
- "autoblocker": "\"[[User:$1|$1]]\"ଙ୍କ ଦେଇ ଏହି ମାତ୍ର ଆପଣଙ୍କ IP ଠିକଣାଟି ଆପେଆପେ ଅଟକାଯାଇଅଛି ।\n$1ର ଅଟକ ପାଇଁ ଦିଆଯାଇଥିବା କାରଣଟି ହେଲା: \"$2\"",
+ "autoblocker": "\"[[User:$1|$1]]\"ଙ୍କ ଦେଇ ବ୍ୟବହାର ହେଉଥିବାରୁ ଆପଣଙ୍କ IP ଠିକଣାଟି ଆପେଆପେ ଅଟକାଯାଇଅଛି ।\n$1ର କାରଣ ହେଲା \"$2\"",
"blocklogpage": "ଲଗଟିକୁ ଅଟକାଇଦେବେ",
"blocklog-showlog": "ଏହି ସଭ୍ୟଜଣଙ୍କୁକ ଆଗରୁ ଅଟକାଯାଇଛି ।\nତଳେ ଅଟକ ଇତିହାସଟି ଅବଗତି ନିମନ୍ତେ ଦିଆଗଲା:",
"blocklog-showsuppresslog": "ଏହି ସଭ୍ୟଜଣଙ୍କୁ ଆଗରୁ ଅଟକାଯାଇଛି ବା ଲୁଚାଯାଇଛି ।\nତଳେ ଲୁଚାଇବା ଇତିହାସ ଅବଗତି ନିମନ୍ତେ ଦିଆଗଲା:",
@@ -1883,7 +1986,7 @@
"range_block_disabled": "ଏକାଧିକ ଅଟକ ପାଇଁ ପରିଛା ସୁବିଧାଟି ଅଚଳ କରାଯାଇଛି ।",
"ipb_expiry_invalid": "ଅଚଳ ହେବାର ବେଳା ଭୁଲ ।",
"ipb_expiry_temp": "ଲୁଚାଯାଇଥିବା ବ୍ୟବହାରକାରୀ ନାମ ଅଟକ ସବୁ ସ୍ଥାୟୀ ହେବ ଉଚିତ ।",
- "ipb_hide_invalid": "ଏହି ଖାତାଟିକୁ ଦବାଇବାରେ ବିଫଳ ହେଲୁ; ଏଥିରେ ଅନେକଗୁଡ଼ିଏ ସମ୍ପାଦନା ଥାଇପାରେ ।",
+ "ipb_hide_invalid": "ଏହି ଖାତାଟିକୁ ଦବାଇବାରେ ବିଫଳ ହେଲୁ; ଏଥିରେ {{PLURAL:$1|ଗୋଟେ ସମ୍ପାଦନା|$1ଟି ସମ୍ପାଦନା}} ରହିଛି ।",
"ipb_already_blocked": "\"$1\" ଆଗରୁ ଅଟକାଯାଇଅଛି",
"ipb-needreblock": "\"$1\" ଆଗରୁ ଅଟକାଯାଇଅଛି । ଆପଣ ସଜାଣିସବୁ ବଦଳାଇବାକୁ ଚାହାନ୍ତି କି?",
"ipb-otherblocks-header": "ବାକି {{PLURAL:$1|ଗୋଟି ଅଟକ|ଗୋଟି ଅଟକ}}",
@@ -1896,6 +1999,7 @@
"proxyblockreason": "ଏକ ଖୋଲା ପ୍ରକ୍ସି ହୋଇଥିବାରୁ ଆପଣଙ୍କ IP ଠିକଣାଟିକୁ ଅଟକାଇଦିଆଗଲା ।\nଦୟାକରି ଆପଣଙ୍କ ଇଣ୍ଟରନେଟ ସେବାପ୍ରଦାନକାରୀ, କାରିଗରି ସହଯୋଗ କିମ୍ବା ସଙ୍ଗଠନ ସହିତ କଥା ହୋଇ ଏହି ବିରାଟ ଅସୁବିଧା ବାବଦରେ ବତାଇଦିଅନ୍ତୁ ।",
"sorbsreason": "{{SITENAME}} ଦେଇ ଆପଣଙ୍କ IP ଠିକଣାଟି DNSBL ଭିତରେ ଏକ ଖୋଲା ପ୍ରକ୍ସି ଭାବରେ ନଥିଭୁକ୍ତ ହୋଇଅଛି ।",
"sorbs_create_account_reason": "{{SITENAME}} ଦେଇ ଆପଣଙ୍କ IP ଠିକଣାଟି DNSBL ଭିତରେ ଏକ ଖୋଲା ପ୍ରକ୍ସି ଭାବରେ ନଥିଭୁକ୍ତ ହୋଇଅଛି ।\nଆପଣ ନୂଆ ଖାତାଟିଏ ଖୋଲି ପାରିବେ ନାହିଁ",
+ "xffblockreason": "ଆପଣଙ୍କର କିମ୍ବା ଆପଣ ବ୍ୟବହାର କରୁଥିବା ପ୍ରକ୍ସି ସର୍ଭରର X-Forwarded-For ହେଡ଼ରରେ ଥିବାଏକ IP ଠିକଣାକୁ ଅଟକାଯାଇଛି । ଅଟକାଇବାର କାରଣ ହେଲା: $1",
"cant-see-hidden-user": "ଆପଣ ଅଟକାଇବାକୁ ଚାହୁଁଥିବା ସଭ୍ୟଜଣକ ଆଗରୁ ଅଟକାଯାଇଛନ୍ତି ଓ ଲୁଚାଯାଇଛନ୍ତି ।\nଯେହେତୁ ଆପଣଙ୍କ ପାଖରେ ସଭ୍ୟଙ୍କୁ ଲୁଚାଇବା ଅଧିକାର ନାହୀଁ, ଆପଣ ସଭ୍ୟଙ୍କର ଅଟକକୁ ଦେଖିପାରିବେ ବା ବଦଳାଇପାରିବେ ନାହିଁ ।",
"ipbblocked": "ଯେହେତୁ ଆପଣଙ୍କୁ ଅଟକାଯାଇଛି ଆପଣ ବାକି ସଭ୍ୟମାନଙ୍କୁ ଅଟକାଇ ବା ଅଟକରୁ ଛାଡ଼ କରିପାରିବେ ନାହିଁ ।",
"ipbnounblockself": "ଆପଣ ନିଜକୁ ଅଟକାଇପାରିବେ ନାହିଁ",
@@ -1922,11 +2026,14 @@
"movepagetalktext": "ଯଦି:\n*ଗୋଟିଏ ଖାଲି ଆଲୋଚନା ପୃଷ୍ଠା ସେହି ନାଆଁରେ ଥାଏ\n*ଆପଣ ତଳ ବାକ୍ସକୁ ନ ବାଛନ୍ତି\nତେବେ ଏହି ପ୍ରୁଷ୍ଠା ସହ ଯୋଡାଯାଇଥିବା ଆଲୋଚନା ପ୍ରୁଷ୍ଠାକୁ ଆପେ ଆପେ ଘୁଞ୍ଚାଇଦିଆଯିବ ।\nସେହି ଯାଗାରେ, ଆପଣଙ୍କୁ ପ୍ରୁଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବାକୁ/ମିଶାଇବାକୁ ପଡ଼ିବ ।",
"movearticle": "ପୃଷ୍ଠା ଘୁଞ୍ଚେଇବା:",
"moveuserpage-warning": "'''ସୂଚନା:''' ଆପଣ ଏକ ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାକୁ ଘୁଞ୍ଚାଇବାକୁ ଯାଉଛନ୍ତି । ଦୟାକରି ଜାଣିରଖନ୍ତୁ ଯେ ପୃଷ୍ଠାଟି କେବଳ ଘୁଞ୍ଚିଯିବ ଓ ବ୍ୟବହାରକାରୀ ''ଘୁଞ୍ଚିବେ ନାହିଁ'' ।",
+ "movecategorypage-warning": "<strong>ଚେତାବନୀ:</strong> ଆପଣ ଏକ ଶ୍ରେଣୀ ପୃଷ୍ଠାକୁ ଘୁଞ୍ଚାଇବାକୁ ଯାଉଛନ୍ତି । କେବଳ ପୃଷ୍ଠାଟି ଘୁଞ୍ଚିଯିବ ଏବଂ ପୁରୁଣା ଶ୍ରେଣୀର କୌଣସି ପୃଷ୍ଠା ନୂଆ ଶ୍ରେଣୀଭୁକ୍ତ ହେବନାହିଁ <em>ଜାଣିରଖନ୍ତୁ</em> ।",
"movenologintext": "ଏହି ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବା ପାଇଁ ଆପଣ ନିହାତି ଜଣେ ପଞ୍ଜୀକୃତ ସଭ୍ୟ ହୋଇଥିବେ ଏବଂ [[Special:UserLogin|logged in]]",
"movenotallowed": "ଆପଣଙ୍କର ପୃଷ୍ଠାଗୁଡିକୁ ଘୁଞ୍ଚାଇବା ଅଧିକାର ନହିଁ ।",
"movenotallowedfile": "ଆପଣଙ୍କର ଫାଇଲ ଘୁଞ୍ଚାଇବାର ଅଧିକାର ନହିଁ ।",
"cant-move-user-page": "ଆପଣଙ୍କୁ ଏହି ସଭ୍ୟ ପୃଷ୍ଠାଟିକୁ ଘୁଞ୍ଚାଇବା ଲାଗି ଅନୁମତି ମିଳିନାହିଁ, କିନ୍ତୁ ନିଜର ଉପପୃଷ୍ଠା ସବୁ ଘୁଞ୍ଚାଇ ପାରିବେ ।",
"cant-move-to-user-page": "ଆପଣଙ୍କର ଗୋଟିଏ ପୃଷ୍ଠାକୁ ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାକୁ ଘୁଞ୍ଚାଇବାର ଅଧିକାର ନହିଁ ।",
+ "cant-move-category-page": "ଆପଣଙ୍କୁ ଶ୍ରେଣୀ ପୃଷ୍ଠାଟିଏ ଘୁଞ୍ଚାଇବା ନିମନ୍ତେ ଅନୁମତି ମିଳିନାହିଁ ।",
+ "cant-move-to-category-page": "ପୃଷ୍ଠାଟିଏକୁ ଶ୍ରେଣୀ ପୃଷ୍ଠାକୁ ଘୁଞ୍ଚାଇବା ଲାଗି ଆପଣଙ୍କୁ ଅନୁମତି ମିଳିନାହିଁ ।",
"newtitle": "ନୂଆ ନାଆଁକୁ:",
"move-watch": "ମୂଳ ପୃଷ୍ଠା ଓ ବଦଳାଇବାକୁ ଚାହୁଁଥିବା ପୃଷ୍ଠା ଦେଖାଇବେ",
"movepagebtn": "ପୃଷ୍ଠା ଘୁଞ୍ଚେଇବେ",
@@ -2003,6 +2110,7 @@
"thumbnail-more": "ବିସ୍ତାର",
"filemissing": "ଫାଇଲ ମିଳୁନାହିଁ",
"thumbnail_error": "ନଖଦେଖଣା ତିଆରିବାରେ ଅସୁବିଧା: $1",
+ "thumbnail_error_remote": "$1ରୁ ତ୍ରୁଟି ମେସେଜ:\n$2",
"djvu_page_error": "DjVu ପୃଷ୍ଠା ସୀମା ବାହାରେ ରହିଅଛି",
"djvu_no_xml": "DjVu ଫାଇଲ ନିମନ୍ତେ XML ଆଣିବାରେ ବିଫଳ ହେଲୁଁ",
"thumbnail-temp-create": "ଏକ ଅସ୍ଥାୟୀ ଛୋଟଦେଖଣା ଫାଇଲ ତିଆରି କରିବାରେ ବିଫଳ ହେଲୁ",
@@ -2012,9 +2120,12 @@
"thumbnail_image-type": "ଛବିର ପ୍ରକାର ଅନୁମୋଦିତ ନୁହେଁ",
"thumbnail_gd-library": "ଅଧାଗଢ଼ା GD ପାଠାଗାର ସଜାଣି: $1 ମିଳୁନାହିଁ",
"thumbnail_image-missing": "ଫାଇଲଟି ନଥିଲା ଭଳି ଲାଗୁଛି : $1",
+ "thumbnail_image-failure-limit": "ଏହି ଥମ୍ବନେଲ ରେଣ୍ଡର କରିବା ପାଇଁ ନିକଟରେ ଅନେକ ($1 କିମ୍ବା ଅଧିକ) ବିଫଳ ଚେଷ୍ଟା କରାଯାଇଛି । ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।",
"import": "ପୃଷ୍ଠା ଆମଦାନି କରିବେ",
"importinterwiki": "ଟ୍ରାନ୍ସଉଇକି ଈମ୍ପୋର୍ଟ",
"import-interwiki-text": "ଏକ ଉଇକି ଓ ପୃଷ୍ଠା ନାମ ଆମଦାନି କରିବା ନିମନ୍ତେ ଦିଅନ୍ତୁ ।\nସଂସ୍କରଣ ତାରିଖ ଓ ସମ୍ପାଦକଙ୍କ ନାମ ସାଇତା ହୋଇ ରହିବ ।\nଅନ୍ତଉଇକି ଆମଦାନି କାମସବୁ [[Special:Log/import|ଆମଦାନି ଇତିହାସ]]ରେ ସାଇଟ ହୋଇ ରହିଛି ।",
+ "import-interwiki-sourcewiki": "ମୂଳ ଉଇକି:",
+ "import-interwiki-sourcepage": "ମୂଳ ପୃଷ୍ଠା:",
"import-interwiki-history": "ଏହି ପୃଷ୍ଠା ନିମନ୍ତେ ସବୁଯାକ ସଂସ୍କରଣ ଇତିହାସ ନକଲ କରିନିଅନ୍ତୁ",
"import-interwiki-templates": "ସବୁଯାକ ଛାଞ୍ଚ ଏହା ଭିତରେ ରଖିବେ",
"import-interwiki-submit": "ଆମଦାନୀ",
@@ -2039,34 +2150,31 @@
"importuploaderrortemp": "ଫାଇଲ ଆମଦାନି ବିଫଳ ହେଲା ।\nଅସ୍ଥାୟୀ ଫୋଲଡରଟିଏ ନାହିଁ ।",
"import-parse-failure": "XML ଆମଦାନି ପାର୍ସ ବିଫଳ",
"import-noarticle": "ଆମଦାନି କରିବା ନିମନ୍ତେ ପୃଷ୍ଠା ନାହିଁ !",
- "import-nonewrevisions": "ସବୁଯାକ ସଂସ୍କରଣ ଆଗରୁ ଆମଦାନି କରାସରିଛି ।",
+ "import-nonewrevisions": "ଗୋଟାଏ ବି ସଂସ୍କରଣ ଆମଦାନି କରା ହୋଇନାହିଁ । (ସବୁଯାକ ଆଗରୁ ଅଛି, କିମ୍ବା ଭୁଲକୁ ଏଡ଼ାଇବା ପାଇଁ ନିଆଯାଇନାହିଁ ।)",
"xml-error-string": "$1 $2 ଧାଡ଼ିରେ ଅଛି, $3 ସ୍ତମ୍ଭ ($4 ବାଇଟ): $5",
"import-upload": "XML ତଥ୍ୟ ଅପଲୋଡ଼",
"import-token-mismatch": "ଅବଧି ତଥ୍ୟ ଲୋପପାଇଗଲାଣି ।\nଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରନ୍ତୁ ।",
"import-invalid-interwiki": "ଦିଆଯାଇଥିବା ଉଇକିରୁ ଆହରଣ କରାଯାଇପାରିବ ନାହିଁ ।",
- "import-error-edit": "\"$1\" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ କାରଣ ଆପଣଙ୍କର ଏହାକୁ ବଦଳାଇବା ଅଧିକାର ନାହିଁ ।",
- "import-error-create": "\"$1\" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ କାରଣ ଆପଣଙ୍କର ଏହାକୁ ତିଆରିକରିବା ଅଧିକାର ନାହିଁ ।",
- "import-error-interwiki": "\"$1\"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହାର ନାମ ବାହାରଲିଙ୍କରେ ଆଗରୁ ଅଛି(ଉଇକିଗୁଡିକ ମଧ୍ୟରେ) ।",
- "import-error-special": "\"$1\"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହା ଏକ ବିଶେଷ ନେମସ୍ପେସରେ ଅଛି ଯାହା ପୃଷ୍ଠାଗୁଡିକୁ ଅନୁମତି ଦିଏ ନାହିଁ ।",
- "import-error-invalid": "\"$1\"ପୃଷ୍ଠାକୁ ଆମଦାନୀ କରିହେଲାନି କାରଣ ଏହାର ନାମଟି ଅବୈଧ ।",
+ "import-error-edit": "ଆପଣଙ୍କର ଏହାକୁ ବଦଳାଇବା ଅଧିକାର ନ ଥିବାରୁ \"$1\" ପୃଷ୍ଠାଟି ଆଣିହେଲା ନାହିଁ ।",
+ "import-error-create": "ଆପଣଙ୍କର ଏହାକୁ ଗଢ଼ିବା ଅଧିକାର ନ ଥିବାରୁ \"$1\" ପୃଷ୍ଠାଟି ଅଣାଯାଇନାହିଁ ।",
+ "import-error-interwiki": "ଏହାର ନାମ ବାହାର ଲିଙ୍କ ପାଇଁ ସାଇତାଯାଇ ଥିବାରୁ \"$1\"ପୃଷ୍ଠାଟିକୁ ଆଣିହେଲା ନାହିଁ (ଇଣ୍ଟର ଉଇକି)",
+ "import-error-special": "ଅନୁମତି ନ ଥିବା ଏକ ବିଶେଷ ନେମସ୍ପେସରେ ଥିବାରୁ \"$1\"ପୃଷ୍ଠାକୁ ଆଣି ହେଲାନାହିଁ ।",
+ "import-error-invalid": "ଏହି ଉଇକିରେ ଅଣାଯିବା ନୂଆ ନାମଟି ଅବୈଧ ଥିବାରୁ \"$1\" ପୃଷ୍ଠାଟିକୁ ଆଣିହେଲା ନାହିଁ ।",
"import-error-unserialize": "\"$1\"ପୃଷ୍ଠାର $2 ପୁନରାବୃତିଟି ଅଣତାଲିକାଭୁକ୍ତ କରାଯାଇପାରିବ ନାହିଁ । ପୁନରାବୃତିଟି $3 ପ୍ରକାର ବ୍ୟବାହର କରିବା ପାଇଁ $4ରେ ତାଲିକାଭୁକ୍ତ ହୋଇଛି ।",
+ "import-error-bad-location": "ଏହି ମଡ଼େଲଟି ପୃଷ୍ଠାରେ $3 କଣ୍ଟେଣ୍ଟ ମଡ଼େଲ ବ୍ୟବହାର କରି $2 ସଂସ୍କରଣଟି ଏହି ଉଇକିରେ ସାଇତାଯାଇପାରିବ ନାହିଁ ।",
"import-options-wrong": "ଭୁଲ {{PLURAL:$2|option|options}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "ଦିଆଯାଇଥିବା ମୂଳ ପୃଷ୍ଠାର ଶୀର୍ଷକଟି ଅବୈଧ ଅଟେ ।",
"import-rootpage-nosubpage": "ମୂଳ ପୃଷ୍ଠାର \"$1\" ନେମସ୍ପେସ ଉପପୃଷ୍ଠାର ଅନୁମତି ଦିଏନାହିଁ ।",
"importlogpage": "ଇତିହାସ ଆହରଣ",
"importlogpagetext": "ଅନ୍ୟ ଉଇକିରୁ ପରିଛାଙ୍କ ଦେଇ ସମ୍ପାଦନା ଇତିହାସ ସହ କରାହୋଇଥିବା ପୃଷ୍ଠା ଆମଦାନି ।",
- "import-logentry-upload": "ଫାଇଲ ଅପଲୋଡ଼ ଦେଇ [[$1]] ଆମଦାନି କରାଯାଇଛି",
- "import-logentry-upload-detail": "$1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}",
- "import-logentry-interwiki": "$1 କୁ ଟ୍ରାନ୍ସଉଇକି କରାଗଲା",
- "import-logentry-interwiki-detail": "$2 ଭିତରୁ $1 ଗୋଟି {{PLURAL:$1|ସଂସ୍କରଣ|ସଂସ୍କରଣ}}",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ଅଣାଗଲା",
+ "import-logentry-interwiki-detail": "$2ରୁ $1 {{PLURAL:$1|ଗୋଟି ସଂସ୍କରଣ|ଗୋଟି ସଂସ୍କରଣ}} ଅଣାଗଲା",
"javascripttest": "ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ",
- "javascripttest-title": "ଚାଲୁଥିବା $1 ପରଖଗୁଡିକ",
"javascripttest-pagetext-noframework": "ଏହି ପୃଷ୍ଠାଟି ଜାଭାସ୍କ୍ରିପ୍ଟ ପରଖ ପାଇଁ ସଂରକ୍ଷଣ କରି ରଖାଯାଇଛି ।",
"javascripttest-pagetext-unknownframework": "\"$1\" ଅଜଣା ପରଖ ଗତିବିଧି ।",
"javascripttest-pagetext-frameworks": "ଦୟାକରି ନିମ୍ନରେ ଥିବା ଏକ ପରଖ ପ୍ରକ୍ରିୟାକୁ ବାଛନ୍ତୁ :$1",
"javascripttest-pagetext-skins": "ଏହି ପରଖକୁ ଚାଲୁ କରିବା ପାଇଁ ଏକ ଆବରଣ ବାଛନ୍ତୁ ।",
"javascripttest-qunit-intro": "mediawiki.orgରେ [$1 testing documentation]କୁ ଦେଖନ୍ତୁ ।",
- "javascripttest-qunit-heading": "ମେଡିଆଉଇକି ଜାଭାସ୍କ୍ରିପ୍ଟ Qunit ପରଖ ପ୍ରକ୍ରିୟା",
"tooltip-pt-userpage": "ଆପଣଙ୍କ ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠା",
"tooltip-pt-anonuserpage": "ଆପଣ ଯେଉଁ IP ଠିକଣାର ବ୍ୟବହାରକାରୀ ପୃଷ୍ଠାଟି ବଦଳାଇବା ପାଇଁ ଚେଷ୍ଟା କରୁଛନ୍ତି",
"tooltip-pt-mytalk": "ଆପଣଙ୍କ ଆଲୋଚନା ପୃଷ୍ଠା",
@@ -2150,7 +2258,7 @@
"spam_reverting": "$1 ସହ ଯୋଡ଼ା ନଥିବା ଶେଷ ସଂସ୍କରଣକୁ ଲେଉଟାଇ ଦେଉଅଛୁଁ",
"spam_blanking": "$1 ସହ ଯୋଡ଼ାଥିବା ସବୁଯାକ ସଂସ୍କରଣ ଖାଲି କରିଦିଆଗଲା",
"spam_deleting": "$1 ସହ ଯୋଡ଼ାଥିବା ସବୁଯାକ ସଂସ୍କରଣ ଖାଲି କରିଦିଆଗଲା",
- "simpleantispam-label": "ସ୍ପାମ-ବିରୋଧି ପରଖ ।\nଏହାକୁ ଭରନ୍ତୁ '''ନାହିଁ''' !",
+ "simpleantispam-label": "ଆଣ୍ଟି-ସ୍ପାମ ପରଖ ।\nଏହାକୁ ଭରନ୍ତୁ <strong>ନାହିଁ</strong>!",
"pageinfo-title": "\"$1\"ର ବିବରଣୀ",
"pageinfo-not-current": "ଦୁଖିତଃ, ପୁରୁଣା ସଂସ୍କରଣଗୁଡିକର ଏହି ତଥ୍ୟ ଦେବା ସମ୍ଭବ ନୁହେଁ ।",
"pageinfo-header-basic": "ସାଧାରଣ ଜାଣିବା କଥା",
@@ -2162,10 +2270,10 @@
"pageinfo-length": "ପୃଷ୍ଠା ଲମ୍ବ(ବାଇଟରେ)",
"pageinfo-article-id": "ପୃଷ୍ଠା ଆଇଡ଼ି",
"pageinfo-language": "ପୃଷ୍ଠା ବିଷୟବସ୍ତୁର ଭାଷା",
+ "pageinfo-content-model": "ପୃଷ୍ଠା ବିଷୟବସ୍ତୁ ମଡ଼େଲ",
"pageinfo-robot-policy": "ସ୍ୱୟଂଚାଳକ&nbsp;(Bot) ଦ୍ୱାରା ସୂଚୀ ନିର୍ମାଣ",
"pageinfo-robot-index": "ଅନୁମୋଦିତ",
"pageinfo-robot-noindex": "ଅନୁନମୋଦିତ",
- "pageinfo-views": "ଦେଖଣା ସଂଖ୍ୟା",
"pageinfo-watchers": "ପୃଷ୍ଠା ଦେଖଣାହାରି ସଂଖ୍ୟା",
"pageinfo-few-watchers": "$1ରୁ କମ {{PLURAL:$1|ଦେଖଣାକାରୀ|ଦେଖଣାକାରୀଗଣ}}",
"pageinfo-redirects-name": "ଏହି ପୃଷ୍ଠା ସହ ସମ୍ବନ୍ଧିତ ପୁନର୍ପ୍ରେରଣ",
@@ -2245,6 +2353,7 @@
"newimages-summary": "ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ଶେଷ ଅପଲୋଡ଼ ହୋଇଥିବା ଫାଇଲମାନ ଦେଖାଇଥାଏ ।",
"newimages-legend": "ଛାଣିବା",
"newimages-label": "ଫାଇଲ ନାମ (କିମ୍ବା ତାହାର ଏକ ଭାଗ):",
+ "newimages-showbots": "ବଟ ଦ୍ୱାରା ଅପଡେଟ",
"noimages": "ଦେଖିବାକୁ କିଛି ନାହିଁ ।",
"ilsubmit": "ଖୋଜନ୍ତୁ",
"bydate": "ତାରିଖ ଅନୁସାରେ",
@@ -2253,6 +2362,7 @@
"minutes": "{{PLURAL:$1|$1 ମିନିଟ|$1 ମିନିଟ}}",
"hours": "{{PLURAL:$1|$1 ଘଣ୍ଟା|$1 ଘଣ୍ଟା}}",
"days": "{{PLURAL:$1|$1 ଦିନ|$1 ଦିନ}}",
+ "weeks": "{{PLURAL:$1|$1 ସପ୍ତାହ|$1 ସପ୍ତାହ}}",
"months": "{{PLURAL:$1|$1 month|$1 months}}",
"years": "{{PLURAL:$1|$1 year|$1 years}}",
"ago": "$1 ଆଗରୁ",
@@ -2612,7 +2722,6 @@
"exif-urgency-low": "ଉଣା ($1)",
"exif-urgency-high": "ଅଧିକ ($1)",
"exif-urgency-other": "ବ୍ୟବହାରକାରୀ ଦେଇ ଦିଆହୋଇଥିବା ଗୁରୁତ୍ଵ ($1)",
- "watchlistall2": "ସବୁ",
"namespacesall": "ସବୁ",
"monthsall": "ସବୁ",
"confirmemail": "ଆପଣଙ୍କ ଇମେଲ ଠିକଣା ଟି ଠିକ ବୋଲି ଥୟ କରନ୍ତୁ",
@@ -2630,7 +2739,7 @@
"confirmemail_subject": "{{SITENAME}} ଇମେଲ ଠିକଣା ନିଶ୍ଚିତ କରିବା",
"confirmemail_body": "କେହିଜଣେ, ବୋଧହୁଏ ଆପଣ ହିଁ $1 ଆଇ.ପି. ଠିକଣାରୁ,\nଏହି ଇ-ମେଲ ଆଇ.ଡି.ରେ \"$2\" ନାଆଁରେ {{SITENAME}} ଠାରେ ଖାତାଟିଏ ଖୋଲିଛନ୍ତି ।\n\nଏହି ଖାତାଟି ସତରେ ଆପଣଙ୍କର ବୋଲି ଥୟ କରିବା ପାଇଁ ଓ {{SITENAME}}ରେ ଇ-ମେଲ ସୁବିଧାସବୁ ସଚଳ କରିବାପାଇଁ, ଏହି ଲିଙ୍କ୍ଟିକୁ ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ:\n\n$3\n\nଯଦି ଆପଣ ଖାତାଟିଏ ଆଗରୁ ଖୋଲି *ନାହାନ୍ତି* ତେବେ ଏହି ଲିଙ୍କକୁ ଯାଇ ଇ-ମେଲ ଆ.ଡି. ଥୟ କରିବାକୁ ନାକଚ କରିଦିଅନ୍ତୁ:\n\n$5\n\nଏହି କନଫର୍ମେସନ କୋଡ଼ $4 ବେଳେ ଅଚଳ ହୋଇଯିବ ।",
"confirmemail_body_changed": "କେହିଜଣେ, ବୋଧହୁଏ ଆପଣ ହିଁ $1 ଆଇ.ପି. ଠିକଣାରୁ,\nଏହି ଇ-ମେଲ ଆଇ.ଡି.ରେ \"$2\" ନାଆଁରେ {{SITENAME}} ଠାରେ ଖାତାଟିଏ ଖୋଲିଛନ୍ତି ।\n\nଏହି ଖାତାଟି ସତରେ ଆପଣଙ୍କର ବୋଲି ଥୟ କରିବା ପାଇଁ ଓ {{SITENAME}}ରେ ଇ-ମେଲ ସୁବିଧାସବୁ ସଚଳ କରିବାପାଇଁ, ଏହି ଲିଙ୍କ୍ଟିକୁ ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ:\n\n$3\n\nଯଦି ଆପଣ ଖାତାଟିଏ ଆଗରୁ ଖୋଲି *ନାହାନ୍ତି* ତେବେ ଏହି ଲିଙ୍କକୁ ଯାଇ ଇ-ମେଲ ଆ.ଡି. ଥୟ କରିବାକୁ ନାକଚ କରିଦିଅନ୍ତୁ:\n\n$5\n\nଏହି କନଫର୍ମେସନ କୋଡ଼ $4 ବେଳେ ଅଚଳ ହୋଇଯିବ ।",
- "confirmemail_body_set": "କେହିଜଣେ, ବୋଧହୁଏ ଆପଣ ହିଁ $1 ଆଇ.ପି. ଠିକଣାରୁ,\nଏହି ଇ-ମେଲ ଆଇ.ଡି.ରେ \"$2\" ନାଆଁରେ {{SITENAME}} ଠାରେ ଖାତାଟିଏ ଖୋଲିଛନ୍ତି ।\n\nଏହି ଖାତାଟି ସତରେ ଆପଣଙ୍କର ବୋଲି ଥୟ କରିବା ପାଇଁ ଓ {{SITENAME}}ରେ ଇ-ମେଲ ସୁବିଧାସବୁ ସଚଳ କରିବାପାଇଁ, ଏହି ଲିଙ୍କ୍ଟିକୁ ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ:\n\n$3\n\nଯଦି ଆପଣ ଖାତାଟିଏ ଆଗରୁ ଖୋଲି *ନାହାନ୍ତି* ତେବେ ଏହି ଲିଙ୍କକୁ ଯାଇ ଇ-ମେଲ ଆ.ଡି. ଥୟ କରିବାକୁ ନାକଚ କରିଦିଅନ୍ତୁ:\n\n$5\n\nଏହି କନଫର୍ମେସନ କୋଡ଼ $4 ବେଳେ ଅଚଳ ହୋଇଯିବ ।",
+ "confirmemail_body_set": "କେହିଜଣେ, ବୋଧହୁଏ ଆପଣ ହିଁ $1 IP ଠିକଣାରୁ,\n\"$2\" ଖାତା ପାଇଁ {{SITENAME}}ରେ ଇମେଲ ଦେଇଛନ୍ତି ।\n\nଏହି ଖାତାଟି ଆପଣଙ୍କର ବୋଲି ଥୟ କରି {{SITENAME}}ରେ ଇମେଲ ସୁବିଧାସବୁ ସକ୍ରିୟ କରିବାପାଇଁ, ଏହି ଲିଙ୍କଟି ଆପଣଙ୍କ ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ:\n\n$3\n\nଯଦି ଖାତାଟିଏ ଆପଣଙ୍କର ନୁହେଁ ତେବେ ଏହି ଲିଙ୍କକୁ ଯାଇ ଇମେଲ ଥୟ କରିବା ନାକଚ କରିଦିଅନ୍ତୁ:\n\n$5\n\nକନଫର୍ମେସନ କୋଡ଼ଟି $4ରେ ଅକାମୀ ହୋଇଯିବ ।",
"confirmemail_invalidated": "ଇମେଲ ଠିକଣା ଥୟ କରିବା ନାକଚ କରିଦଗଲା",
"invalidateemail": "ଇ-ମେଲ ଠିକଣା ଥୟ କରିବା",
"scarytranscludedisabled": "[ଉଇକି-ଉଇକି ଭିତରେ ଟ୍ରାନ୍ସକ୍ଲୁଡ଼ିଙ୍ଗ ଅଚଳ କରାଯାଇଛି]",
@@ -2648,11 +2757,14 @@
"confirm-watch-top": "ଏହି ପୃଷ୍ଠାଟିକୁ ଆପଣଙ୍କ ଦେଖିଥିବା ତାଲିକାରେ ଯୋଡନ୍ତୁ ?",
"confirm-unwatch-button": "ଠିକ ଅଛି",
"confirm-unwatch-top": "ନିଜ ଦେଖଣାତାଲିକାରୁ ଏହି ପୃଷ୍ଠାଟି ବାହାର କରିଦେବେ କି?",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "ଆଗ ପୃଷ୍ଠା",
"imgmultipagenext": "ପର ପୃଷ୍ଠା →",
"imgmultigo": "ଯିବା!",
"imgmultigoto": "$1 ପୃଷ୍ଠାକୁ ଯିବେ",
"img-lang-default": "(ଡିଫଲ୍ଟ ଭାଷା)",
+ "img-lang-info": "$1ରେ ଏହି ଛବିଟି ରେଣ୍ଡର କରନ୍ତୁ । $2",
+ "img-lang-go": "ଯାଆନ୍ତୁ",
"ascending_abbrev": "ସାନରୁ ବଡ କ୍ରମରେ",
"descending_abbrev": "ବଖାଣ",
"table_pager_next": "ପର ପୃଷ୍ଠା",
@@ -2667,6 +2779,7 @@
"autosumm-replace": "ବିଷୟବସ୍ତୁକୁ \"$1\" ଦେଇ ପ୍ରତିବଦଳ କଲେ",
"autoredircomment": "[[$1]]କୁ ପୃଷ୍ଠାଟି ଘୁଞ୍ଚାଇଦିଆଗଲା",
"autosumm-new": "\"$1\" ନାଆଁରେ ପୃଷ୍ଠାଟିଏ ତିଆରିକଲେ",
+ "autosumm-newblank": "ଫାଙ୍କା ପୃଷ୍ଠାଟିଏ ତିଆରି କରାଗଲା",
"lag-warn-normal": "$1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}}ରୁ ନୂଆ ବଦଳ ଏହି ତାଲିକାରେ ଦେଖାଯାଉ ନାହିଁ ।",
"lag-warn-high": "ଅଧିକ ଡାଟାବେସ ସର୍ଭର ପଛୁଆ ଅବସ୍ଥା ହେତୁ $1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}}ରୁ ନୂଆ ବଦଳସବୁ ଏହି ତାଲିକାରେ ଦେଖାଯିବ ନାହିଁ ।",
"watchlistedit-normal-title": "ଦେଖଣାତାଲିକା ସମ୍ପାଦନା କରିବେ",
@@ -2682,16 +2795,24 @@
"watchlistedit-raw-done": "ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାଟି ଅପଡେଟ ହେଇଯାଇଛି ।",
"watchlistedit-raw-added": "{{PLURAL:$1|ନାମଟିଏ|$1 ଗୋଟି ନାମ}} ଯୋଗ କରାଗଲା:",
"watchlistedit-raw-removed": "{{PLURAL:$1|ନାମଟିଏ|$1 ଗୋଟି ନାମ}} କାଢ଼ିଦିଆଗଲା:",
+ "watchlistedit-clear-title": "ଦେଖଣାତାଲିକାଟିଏ ତିଆରି କରାଗଲା",
+ "watchlistedit-clear-legend": "ଦେଖଣାତାଲିକା ସଫାକରନ୍ତୁ",
+ "watchlistedit-clear-explain": "ଆପଣଙ୍କ ଦେଖଣାତାଲିକାରୁ ସବୁ ନାମ ହଟାଇଦିଆଯିବ",
"watchlistedit-clear-titles": "ନାମ:",
+ "watchlistedit-clear-submit": "ନିଜର ଦେଖଣାତାଲିକା ସଫାକରିବେ (ଏହା ଚିରସ୍ଥାୟୀ!)",
+ "watchlistedit-clear-done": "ଆପଣଙ୍କର ଦେଖଣାତାଲିକା ସଫାକରାଗଲା ।",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|1 ନାମଟି|$1 ନାମସବୁ}} ହଟାଇ ଦିଆଗଲା:",
+ "watchlistedit-too-many": "ଏଠାରେ ଦେଖାଇବା ପାଇଁ ଅନେକ ଗୁଡ଼ିଏ ପୃଷ୍ଠା ରହିଛି ।",
+ "watchlisttools-clear": "ଦେଖଣାତାଲିକା ସଫାକରନ୍ତୁ",
"watchlisttools-view": "ଦରକାରୀ ବଦଳଗୁଡ଼ିକ ଦେଖାଇବେ",
"watchlisttools-edit": "ଦେଖିବା ତାଲିକାଟିକୁ ଦେଖିବେ ଓ ବଦଳାଇବେ",
"watchlisttools-raw": "ଫାଙ୍କା ଦେଖଣା ତାଲିକାଟିର ସମ୍ପାଦନା କରିବେ",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ମୋ ଆଲୋଚନା]])",
- "unknown_extension_tag": "ଅଜଣା ଏକ୍ସଟେନସନ ଚିହ୍ନ \"$1\"",
"duplicate-defaultsort": "'''ସୂଚନା:''' ଆପେଆପେ କାମକରୁଥିବା \"$2\" ଆଗରୁ ଆପେ ଆପେ ସଜାଡୁଥିବା \"$1\"କୁ ବନ୍ଦ କରିଦେଇଛି ।",
+ "duplicate-displaytitle": "<strong>ଚେତାବନୀ:</strong> \"$2\" ନାମଟି \"$1\" ନାମ ଉପରେ ଚଢ଼ାଇ ଦେଖାନ୍ତୁ ।",
"version": "ସଂସ୍କରଣ",
"version-extensions": "ଇନଷ୍ଟଲ କରାହୋଇଥିବା ଏକ୍ସଟେନସନସବୁ",
- "version-skins": "ବହିରାବରଣ",
+ "version-skins": "ଇନଷ୍ଟଲ ହୋଇଥିବା ସ୍କିନ",
"version-specialpages": "ବିଶେଷ ପୃଷ୍ଠା",
"version-parserhooks": "ପାର୍ସର ହୁକ",
"version-variables": "ଚଳ",
@@ -2703,16 +2824,23 @@
"version-parser-function-hooks": "ପାର୍ସର କାମ ହୁକ",
"version-hook-name": "ହୁକ ନାମ",
"version-hook-subscribedby": "କାହା ଦେଇ ମଗାଯାଇଛି",
- "version-version": "(ଭାଗ $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[କୌଣସି ନାମ ନାହିଁ]",
"version-license": "ମିଡ଼ିଆଉଇକି ସ୍ୱତ୍ୱ",
"version-ext-license": "ଲାଇସେନ୍ସ",
"version-ext-colheader-name": "ଏକ୍ସଟେନସନ",
+ "version-skin-colheader-name": "ସ୍କିନ",
"version-ext-colheader-version": "ସଂସ୍କରଣ",
"version-ext-colheader-license": "ଲାଇସେନ୍ସ",
"version-ext-colheader-description": "ବର୍ଣନା",
"version-ext-colheader-credits": "ଲେଖକମାନେ",
+ "version-license-title": "$1 ପାଇଁ ଲାଇସେନ୍ସ",
+ "version-license-not-found": "ଏହି ଏକ୍ସଟେନସନରେ କୌଣସି ସବିଶେଷ ସୂଚନା ନାହିଁ ।",
+ "version-credits-title": "$1 ପାଇଁ ଶ୍ରେୟ",
+ "version-credits-not-found": "ଏହି ଏକ୍ସଟେନସନରୁ କୌଣସି କ୍ରେଡ଼ିଟ ସୂଚନା ମିଳିଲା ନାହିଁ ।",
"version-poweredby-credits": "ଏହି ଉଇକିଟି '''[https://www.mediawiki.org/ ମିଡ଼ିଆଉଇକି]''' ଦେଇ ପରିଚାଳିତ, ସତ୍ଵାଧିକାର © ୨୦୦୧-$1 $2 ।",
"version-poweredby-others": "ବାକିସବୁ",
+ "version-poweredby-translators": "translatewiki.net ଅନୁବାଦକଗଣ",
"version-credits-summary": "ଆମେ ଏହି ଲୋକମାନଙ୍କୁ [[Special:Version|MediaWiki]]ରେ ସେମାନକର ଅବଦାନ ପାଇଁ ଚିହ୍ନିବାକୁ ଚାହୁଁଛୁ ।",
"version-license-info": "MediaWiki ଏକ ମାଗଣା ସଫ୍ଟୱାର; ଆପଣ ଏହାକୁ ପୁନବଣ୍ଟନ କରିପାରିବେ ବା GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଅଧିନରେ ବଦଳାଇପାରିବେ ଯାହା ଫ୍ରି ସଫ୍ଟୱାର ଫାଉଣ୍ଡେସନ ଦେଇ ପ୍ରକାଶିତ ହୋଇଥିବ।\n\nMediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯାଇଥାଏ, କିନ୍ତୁ ଏହା କୌଣସି ଲିଖିତ ପଟା ସହ ଆସିନଥାଏ; ଏହା ବିକ୍ରୟଯୋଗ୍ୟତା ବା ଏକ ନିର୍ଦିଷ୍ଟ କାମପାଇଁ ବାଧ୍ୟତାମୂଳକ ପଟା ସହ ଆସିନଥାଏ । ଅଧିକ ଜାଣିବା ନିମନ୍ତେ ଦୟାକରି GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସ ଦେଖନ୍ତୁ ।\n\nଆପଣ [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU ଜେନେରାଲ ପବ୍ଲିକ ଲାଇସେନ୍ସର ନକଲଟିଏ] ଏହି ସଫ୍ଟୱାର ସହିତ ପାଇଥିବା ଜରୁରି; ଯଦି ପାଇନଥିବେ, ଫ୍ରି ସଫ୍ଟୱାର ଫାଉଣ୍ଡେସନ, Inc., ୫୧ ଫ୍ରାଙ୍କଲୀନ ଷ୍ଟ୍ରିଟ, ୫ମ ମହଲା, ବଷ୍ଟନ, ମାସାଚୁସେଟସ ୦୨୧୧୦-୧୩୦୧, ଯୁକ୍ତରାଷ୍ଟ୍ର ଆମେରିକା କିମ୍ବା [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ଅନଲାଇନ] ପଢ଼ିନିଅନ୍ତୁ ।",
"version-software": "ଇନଷ୍ଟଲ ହୋଇଥିବା ସଫ୍ଟୱାର",
@@ -2721,6 +2849,9 @@
"version-entrypoints": "ନିବେଶ ହେଉଥିବା ସ୍ଥାନର URLଗୁଡିକ",
"version-entrypoints-header-entrypoint": "ପ୍ରବେଶ ବିନ୍ଦୁ",
"version-entrypoints-header-url": "ଇଉଆରଏଲ",
+ "redirect": "ଫାଇଲ, ସଭ୍ୟ, ପୃଷ୍ଠା କିମ୍ବା ସଂସ୍କରଣ ID ଅନୁସାରେ ପୁନପ୍ରେରଣ",
+ "redirect-legend": "ଏକ ଫାଇଲ କିମ୍ବା ପୃଷ୍ଠାକୁ ପୁନପ୍ରେରଣ କରନ୍ତୁ",
+ "redirect-summary": "(ଫାଇଲ ନାମ ଥିଲେ), (ଏକ ସଂସ୍କରଣ ID କିମ୍ବା ପୃଷ୍ଠା ID ଥିଲେ) କିମ୍ବା ଏକ ସଭ୍ୟ ଖାତା ଥିଲେ (ଏକ ସାଂଖିକ ସଭ୍ୟ ID)ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ଏକ ଫାଇଲକୁ ଲେଉଟାଇ ଦେଇଥାଏ । ବ୍ୟବହାର: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], କିମ୍ବା [[{{#Special:Redirect}}/user/101]].",
"redirect-submit": "ଯାଆନ୍ତୁ",
"redirect-lookup": "ଖୋଜନ୍ତୁ:",
"redirect-value": "ମୂଲ୍ୟ:",
@@ -2753,12 +2884,14 @@
"specialpages-group-wiki": "ତଥ୍ୟ ଓ ଉପକରଣ",
"specialpages-group-redirects": "ବିଶେଷ ପୃଷ୍ଠାକୁ ପୁନପ୍ରେରଣ କରିବା",
"specialpages-group-spam": "ଅଯଥା ଉପକରଣ",
+ "specialpages-group-developer": "ଡେଭେଲପର ଟୁଲ",
"blankpage": "ଖାଲି ପୃଷ୍ଠା",
"intentionallyblankpage": "ଏହି ପୃଷ୍ଠାଟିକୁ ଜାଣିଶୁଣି ଫାଙ୍କା ଛଡା ଯାଇଛି ।",
"external_image_whitelist": " #ଏହି ଧାଡ଼ିଟି ଯେମିତି ଅଛି ସେମିତି ରଖିଦିଅନ୍ତୁ<pre>\n#ସାଧାରଣ ଖଣ୍ଡିତ ଲେଖାସମୂହ (କେବଳ // ଧାଡ଼ି ତଳେ ଥିବା ଭାଗ) ତଳେ ରଖିବେ\n#ଏହା ବାହାରେ ଥିବା ଛବି (hotlinked) ସହ ଏହାକୁ ମେଳାଯିବ\n#ଯେଉଁସବୁ ମେଳଖାଇବ ତାହା ଛବି ଭାବରେ ଦେଖାଯିବ, ନହେଲେ ଛବିପାଇଁ କେବଳ ଲିଙ୍କଟିଏ ଦେଖାଯିବ\n#ଯେଉଁ ଧାଡ଼ିର ଆଗରେ # ଚିହ୍ନ ଥିବ ତାହାକୁ ମତାମତ ବୋଲି ଗଣାଯିବ\n#ଏସବୁ ଇଂରାଜୀ ବଡ଼ ଓ ସାନ ଅକ୍ଷର ପାଇଁ ଅଲଗା\n\n#ସବୁଯାକ ସାଧାରଣ ବିବରଣୀ ଖଣ୍ଡ (regex fragments)ଏହି ରେଖା ଉପରେ ରଖିବେ । ସେସବୁ ଯେମିତି ଅଛି ସେମିତି ହିଁ ରଖିବେ</pre>",
"tags": "ବୈଧ ସମ୍ପାଦନା ଚିହ୍ନ",
"tag-filter": "[[Special:Tags|ଟାଗ]] ଛଣା:",
"tag-filter-submit": "ଛାଣିବା",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ଗୋଟି ଟ୍ୟାଗ|ଗୋଟି ଟ୍ୟାଗ}}]]: $2)",
"tags-title": "ସୂଚକ",
"tags-intro": "ଏହି ପୃଷ୍ଠା ସଫ୍ଟୱାର ଏକ ବଦଳ ଭାବେ ଚିହ୍ନିତ କରୁଥିବା ଚିହ୍ନସବୁର ମାନେ ସହ ତାଲିକା ତିଆରି କରିଥାଏ ।",
"tags-tag": "ଚିହ୍ନ ନାମ",
@@ -2806,15 +2939,15 @@
"sqlite-no-fts": "ପୁରା ଟେକ୍ସ୍ଟ ଖୋଜା ସହଯୋଗ ବିନା $1",
"logentry-delete-delete": "$1, $3 ପୃଷ୍ଠାଟି {{GENDER:$2|ଲିଭାଇଦେଲେ}}",
"logentry-delete-restore": "$1, $3 ପୃଷ୍ଠାଟି {{GENDER:$2|ପୁନସ୍ଥାପନ କଲେ}}",
- "logentry-delete-event": "$1 $3 ବେଳେ {{PLURAL:$5|ଏକ ଇତିହାସର ଘଟଣାର|$5 ଇତିହାସର ଘଟଣାମାନଙ୍କର}} ଦେଖଣା ବଦଳାଇ ଦେଲେ: $4",
- "logentry-delete-revision": "$1 $3 ପୃଷ୍ଠାରେ {{PLURAL:$5|ସଙ୍କଳନଟିଏର|$5 ସଙ୍କଳନମାନଙ୍କର}} ଦେଖଣା ବଦଳାଇ ଦେଲେ: $4",
- "logentry-delete-event-legacy": "$1 $3 ରେ ଇତିହାସର ଘଟଣାସବୁର ଦେଖଣା ବଦଳାଇଦେଲେ",
- "logentry-delete-revision-legacy": "$1 $3 ପୃଷ୍ଠାରେ ଇତିହାସର ଘଟଣାସବୁର ଦେଖଣା ବଦଳାଇଦେଲେ",
- "logentry-suppress-delete": "$1 $3 ପୃଷ୍ଠାଟିକୁ ଚପାଇଦେଲେ",
- "logentry-suppress-event": "$3 ବେଳେ $1 ଗୋପନ ଭାବରେ {{PLURAL:$5|ଇତିହାସର ଘଟଣାଟିଏର|$5 ଇତିହାସର ଘଟଣାବଳୀର}} ଦେଖଣା ବଦଳାଇଦେଲେ: $4",
- "logentry-suppress-revision": "$1 ଗୋପନ ଭାବରେ $3 ପୃଷ୍ଠାରେ {{PLURAL:$5|ଇତିହାସର ଘଟଣାଟିଏର|$5 ଇତିହାସର ଘଟଣାବଳୀର}} ଦେଖଣା ବଦଳାଇଦେଲେ: $4",
- "logentry-suppress-event-legacy": "$1 ଗୋପନ ଭାବରେ ବଦଳାଇଦେଲେ $3ରେ ଥିବା ଇତିହାସ ଘଟଣାମାନଙ୍କର ଦେଖଣା ବଦଳାଇଦେଲେ",
- "logentry-suppress-revision-legacy": "$1 ଗୋପନ ଭାବରେ ବଦଳାଇଦେଲେ $3 ପୃଷ୍ଠାରେ ଥିବା ଇତିହାସ ଘଟଣାମାନଙ୍କର ଦେଖଣା ବଦଳାଇଦେଲେ",
+ "logentry-delete-event": "$1 {{PLURAL:$5|ଲଗ ଘଟଣାଟିଏ|$5 ଗୋଟି ଲଗ ଘଟଣା}}ର ଦେଖଣା $3 ପୃଷ୍ଠାରେ {{GENDER:$2|ବଦଳାଇଲେ}}: $4",
+ "logentry-delete-revision": "$1 {{PLURAL:$5|ସଂସ୍କରଣଟିଏ|$5 ଗୋଟି ସଂସ୍କରଣ}}ର ଦେଖଣା $3 ପୃଷ୍ଠାରେ {{GENDER:$2|ବଦଲାଇଲେ}}: $4",
+ "logentry-delete-event-legacy": "$1 $3 ପୃଷ୍ଠାର ଲଗ ଘଟଣାଗୁଡ଼ିକର ଦେଖଣା {{GENDER:$2|ବଦଳାଇଲେ}}",
+ "logentry-delete-revision-legacy": "$1 $3 ପୃଷ୍ଠାରେ ଥିବା ଲଗ ଘଟଣାଗୁଡ଼ିକର ଦେଖଣା ସଂସ୍କରଣମାନ {{GENDER:$2|ବଦଳାଇଲେ}}",
+ "logentry-suppress-delete": "$1 $3 ପୃଷ୍ଠାଟିକୁ {{GENDER:$2|ଦବାଇଦେଲେ}}",
+ "logentry-suppress-event": "$1 $3 ପୃଷ୍ଠାରେ ଗୋପନୀୟ ଭାବରେ {{PLURAL:$5|ଲଗ ଇଭେଣ୍ଟଟିଏର|$5 ଗୋଟି ଲଗ ଇଭେଣ୍ଟର}} ଦେଖଣା {{GENDER:$2|ବଦଳାଇଦେଲେ}}: $4",
+ "logentry-suppress-revision": "$1 ଗୋପନ ଭାବେ $3 ପୃଷ୍ଠାରେ {{PLURAL:$5|ସଂସ୍କରଣଟିଏର|$5 ଗୋଟି ସଂସ୍କରଣର}} ଦେଖଣା {{GENDER:$2|ବଦଳାଇଦେଲେ}}: $4",
+ "logentry-suppress-event-legacy": "$1 ଗୋପନ ଭାବେ $3ରେ ଥିବା ଲଗ ଇଭେଣ୍ଟମାନଙ୍କର ଦେଖଣା {{GENDER:$2|ବଦଳାଇଦେଲେ}}",
+ "logentry-suppress-revision-legacy": "$1 ଗୋପନ ଭାବେ $3 ପୃଷ୍ଠାରେ ଥିବା ସଂସ୍କରଣମାନଙ୍କର ଦେଖଣା {{GENDER:$2|ବଦଳାଇଦେଲେ}}",
"revdelete-content-hid": "ଭିତର ଭାଗ ଲୁଚାଯାଇଅଛି",
"revdelete-summary-hid": "ସମ୍ପାଦନା ସାରକଥା ଲୁଚାଯାଇଅଛି",
"revdelete-uname-hid": "ଇଉଜର ନାମ ଲୁଚାଯାଇଅଛି",
@@ -2823,34 +2956,38 @@
"revdelete-uname-unhid": "ଲୁଚାଯାଇଥିବା ଇଉଜର ନାମ ଦେଖାଇବେ",
"revdelete-restricted": "ପରିଛାମାନଙ୍କ ନିମନ୍ତେ ଥିବା ବାରଣ",
"revdelete-unrestricted": "ପରିଛାମାନଙ୍କ ନିମନ୍ତେ ଥିବା ବାରଣ ବାହାର କରିଦିଆଗଲା",
- "logentry-move-move": "$1 $3 ପୃଷ୍ଠାଟି $4କୁ ଘୁଞ୍ଚାଇଲେ",
- "logentry-move-move-noredirect": "$1 $3 ପୃଷ୍ଠାଟି $4କୁ ପୁନପ୍ରେରଣ ବିନା ଘୁଞ୍ଚାଇଲେ",
- "logentry-move-move_redir": "$1 $3 ପୃଷ୍ଠାଟି $4କୁ ପୁନପ୍ରେରଣ ଛାଡ଼ି ଘୁଞ୍ଚାଇଲେ",
- "logentry-move-move_redir-noredirect": "$1 $3 ପୃଷ୍ଠାଟି $4କୁ ପୁନପ୍ରେରଣକୁ ଛାଡ଼ି ପୁନପ୍ରେରଣ ବିନା ଘୁଞ୍ଚାଇଲେ",
- "logentry-patrol-patrol": "$1 $3 ପୃଷ୍ଠାର $4 ତମ ସଙ୍କଳନକୁ ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କଲେ",
- "logentry-patrol-patrol-auto": "$1 ଆପେଆପେ $3 ପୃଷ୍ଠାର $4 ତମ ସଙ୍କଳନକୁ ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କଲେ",
+ "logentry-move-move": "$1 ପୃଷ୍ଠାଟିକୁ $3ରୁ $4କୁ {{GENDER:$2|ଘୁଞ୍ଚାଇଲେ}}",
+ "logentry-move-move-noredirect": "$1 $3 ପୃଷ୍ଠାଟି $4କୁ ପୁନପ୍ରେରଣ ବିନା {{GENDER:$2|ଘୁଞ୍ଚାଇଲେ}}",
+ "logentry-move-move_redir": "$1 $3 ପୃଷ୍ଠାଟି $4କୁ {{GENDER:$2|ଲେଉଟାଇଲେ}}",
+ "logentry-move-move_redir-noredirect": "$1 ପୁନପ୍ରେରଣ ବିନା $3 ପୃଷ୍ଠାଟି $4କୁ {{GENDER:$2|ଘୁଞ୍ଚାଇଲେ}}",
+ "logentry-patrol-patrol": "$1 $3 ପୃଷ୍ଠାର $4 ତମ ସଂସ୍କରଣ ଜଗାଯାଇଅଛି ବୋଲି {{GENDER:$2|ଚିହ୍ନିତ କଲେ}}",
+ "logentry-patrol-patrol-auto": "$1 ଆପେଆପେ $3 ପୃଷ୍ଠାର $4 ତମ ସଂସ୍କରଣ ଜଗାଯାଇଅଛି ବୋଲି {{GENDER:$2|ଚିହ୍ନିତ କଲେ}}",
"logentry-newusers-newusers": "ସଭ୍ୟ ଖାତା $1 {{GENDER:$2|ତିଆରି}} କରାଗଲା",
"logentry-newusers-create": "ସଭ୍ୟ ଖାତା $1 {{GENDER:$2|ତିଆରି}} କରାଗଲା",
- "logentry-newusers-create2": "ସଭ୍ୟ ଖାତା $3ଟି $1 ଦ୍ଵାରା ତିଆରି କରାଗଲା",
- "logentry-newusers-byemail": "$1ଙ୍କ ଦ୍ଵାରା $3 ବ୍ୟବହାରକାରୀ ଖାତାଟି ଖୋଳାଗଲା ଏବଂ ପାସୱାର୍ଡଟି ଇ-ମେଲ ଦ୍ଵାରା ପଠାଗଲା",
+ "logentry-newusers-create2": "$3 ସଭ୍ୟ ଖାତାଟି $1ଙ୍କ ଦ୍ଵାରା {{GENDER:$2|ଗଢ଼ାଗଲା}}",
+ "logentry-newusers-byemail": "ସଭ୍ୟ ଖାତା $3, $1ଙ୍କ ଦ୍ଵାରା {{GENDER:$2|ଖୋଲାଗଲା}} ଏବଂ ପାସୱାର୍ଡଟି ଇମେଲ ଦ୍ଵାରା ପଠାଗଲା",
"logentry-newusers-autocreate": "ବ୍ୟବହାରକାରୀ ଖାତା $1 ଆପେଆପେ {{GENDER:$2|ତିଆରିହେଲା}}",
- "logentry-rights-rights": "$1, $3 ପାଇଁ $4ରୁ $5କୁ ସଭ୍ୟପଦ ବଦଳାଇଲେ",
+ "logentry-rights-rights": "$1, $3 ପାଇଁ $4ରୁ $5କୁ କୋଠ ସଭ୍ୟପଦ {{GENDER:$2|ବଦଳାଇଲେ}}",
"logentry-rights-rights-legacy": "$1 ଗୋଷ୍ଠୀ ସଭ୍ୟପଦ $3 ପାଇଁ {{GENDER:$2|ବଦଳିଗଲା}}",
- "logentry-rights-autopromote": "$1 ଆପେ ଆପେ $4ରୁ $5କୁ ଗଲେ",
+ "logentry-rights-autopromote": "$1 ଆପେ ଆପେ $4ରୁ $5କୁ {{GENDER:$2|ପଦୋନ୍ନତ କରାଗଲା}}",
+ "logentry-upload-upload": "$1, $3 {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
+ "logentry-upload-overwrite": "$1, $3ର ଏକ ନୂଆ ସଂସ୍କରଣ {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
+ "logentry-upload-revert": "$1, $3 {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
"rightsnone": "(କିଛି ନାହିଁ)",
+ "revdelete-summary": "ସାରକଥା ସମ୍ପାଦନା",
+ "feedback-adding": "ପୃଷ୍ଠାରେ ମତାମତ ଦେଉଛି...",
+ "feedback-bugcheck": "ବହୁତ ଭଲ ! ଖାଲି ଦେଖିଦିଅନ୍ତୁ ଯେ ଏହା ଆଗରୁ ଥିବା [$1 known bugs] ମଧ୍ୟରୁ ନୁହେଁ ତ ।",
+ "feedback-bugnew": "ମୁଁ ଯାଞ୍ଚ କରିଦେଲି । ନୂତନ ଅସୁବିଧାର ବିବରଣ କରନ୍ତୁ ।",
"feedback-bugornote": "ଦୟାକରି ଆପଣ ଏକ କାରିଗରି ଅସୁବିଧାଟିଏ ଜଣାଇବା ପାଇଁ ଚାହୁଁଥିଲେ ଦୟାକରି [$1 ଏଠାରେ ଅସୁବିଧାଟି ଜଣାନ୍ତୁ] । \nଅଥବା, ଆପଣ ତଳେ ଠିଆ ସହଜ ଆବେଦନ ପତ୍ରଟି ପୁରଣ କରିପାରିବେ । ଆପଣଙ୍କ ବ୍ୟବହାରକାରୀ ନାମ ଓ ଆପଣ ବ୍ୟବହାର କରୁଥିବା ବ୍ରାଉଜର ଅନୁସାରେ ଆପଣଙ୍କ ମତାମତ \"[$3 $2]\"ରେ ଯୋଡ଼ାଯିବ ।",
- "feedback-subject": "ବିଷୟ:",
- "feedback-message": "ଖବର:",
"feedback-cancel": "ନାକଚ",
- "feedback-submit": "ମତାମତ ଦିଅନ୍ତୁ",
- "feedback-adding": "ପୃଷ୍ଠାରେ ମତାମତ ଦେଉଛି...",
+ "feedback-close": "ହୋଇଗଲା",
"feedback-error1": "ଭୁଲ: API ରୁ ଅଚିହ୍ନା ଫଳାଫଳ",
"feedback-error2": "ଅସୁବିଧା: ସମ୍ପାଦନା ବିଫଳ ହେଲା",
"feedback-error3": "ଅସୁବିଧା: API ରୁ କିଛି ଉତ୍ତର ମିଳିଲା ନାହିଁ",
+ "feedback-message": "ଖବର:",
+ "feedback-subject": "ବିଷୟ:",
+ "feedback-submit": "ଦାଖଲ କରିବା",
"feedback-thanks": "ଧନ୍ୟବାଦ ! ଆପଣଙ୍କର ମତାମତ \"[$2 $1]\" ପୃଷ୍ଠାରେ ଦର୍ଶାଯାଇଛି ।",
- "feedback-close": "ହୋଇଗଲା",
- "feedback-bugcheck": "ବହୁତ ଭଲ ! ଖାଲି ଦେଖିଦିଅନ୍ତୁ ଯେ ଏହା ଆଗରୁ ଥିବା [$1 known bugs] ମଧ୍ୟରୁ ନୁହେଁ ତ ।",
- "feedback-bugnew": "ମୁଁ ଯାଞ୍ଚ କରିଦେଲି । ନୂତନ ଅସୁବିଧାର ବିବରଣ କରନ୍ତୁ ।",
"searchsuggest-search": "ଖୋଜନ୍ତୁ",
"searchsuggest-containing": "ଖୋଜୁଛି...",
"api-error-badaccess-groups": "ଆପଣଙ୍କୁ ଏହି ଉଇକିରେ ଅପଲୋଡ଼ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ ।",
@@ -2885,6 +3022,7 @@
"api-error-overwrite": "ଆଗରୁଥିବା ଏକ ଫାଇଲ ଉପରେ ମଡ଼ାଇବା ଅନୁମୋଦିତ ନୁହେଁ ।",
"api-error-stashfailed": "ଭିତର ଅସୁବିଧା: ସର୍ଭର ଅସ୍ଥାୟୀ ଫାଇଲକୁ ସାଇତି ପାରିଲା ନାହିଁ ।",
"api-error-publishfailed": "ଭିତର ଅସୁବିଧା: ସର୍ଭର ଅସ୍ଥାୟୀ ଫାଇଲକୁ ପ୍ରକାଶ କରିପାରିଲା ନାହିଁ ।",
+ "api-error-stasherror": "ଫାଇଲଟିକୁ ଷ୍ଟାସରେ ଅପଲୋଡ଼ କଲାବେଳେ ତ୍ରୁଟିଟିଏ ପରିଲକ୍ଷିତ ହେଲା ।",
"api-error-timeout": "ସର୍ଭର ଏକ ସୀମିତ କାଳ ଭିତରେ ଉତ୍ତର ଦେଲାନାହିଁ ।",
"api-error-unclassified": "ଏକ ଅଜଣା ଅସୁବିଧା ଘଟିଲା ।",
"api-error-unknown-code": "ଅଜଣା ତୃଟି: \"$1\"",
@@ -2902,9 +3040,94 @@
"duration-decades": "$1 {{PLURAL:$1|decade|decades}}",
"duration-centuries": "$1 {{PLURAL:$1|century|centuries}}",
"duration-millennia": "$1 {{PLURAL:$1|millennium|millennia}}",
+ "rotate-comment": "$1ଙ୍କ ଦ୍ୱାରା ଛବିଟିକୁ ଘଣ୍ଟା କଣ୍ଟାର ସମାନ ଦିଗରେ {{PLURAL:$1|ଡିଗ୍ରି|ଡିଗ୍ରି}} ବୁଲାଇଦିଆଗଲା",
+ "limitreport-title": "ପାର୍ସର ପ୍ରୋଫାଇଲିଙ୍ଗ ଡାଟା:",
+ "limitreport-cputime": "CPU ସମୟ ବ୍ୟବହାର",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}}",
+ "limitreport-walltime": "ରିଏଲ ଟାଇମ ବ୍ୟବହାର",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}}",
+ "limitreport-ppvisitednodes": "ପ୍ରିପୋସେସର ନୋଡ଼ କାଉଣ୍ଟ ଦେଖିଲେ",
+ "limitreport-ppgeneratednodes": "ପ୍ରିପୋସେସର ନୋଡ଼ କାଉଣ୍ଟ ତିଆରି କଲେ",
+ "limitreport-postexpandincludesize": "ବଢ଼ାଇବା ପରେ ଆକାର ରଖନ୍ତୁ",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|ବାଇଟ|ବାଇଟ}}",
+ "limitreport-templateargumentsize": "ଛାଞ୍ଚ ଆର୍ଗୁମେଣ୍ଟ ଆକାର",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|ବାଇଟ|ବାଇଟ}}",
+ "limitreport-expansiondepth": "ସର୍ବୋଚ୍ଚ ବଢ଼ାଇବା ଗଭୀରତା",
+ "limitreport-expensivefunctioncount": "ଭାରୀ ପାର୍ସର ଫଙ୍କସନ ଆକଳନ",
+ "expandtemplates": "ଛାଞ୍ଚ ବଢ଼ାଇବା",
+ "expand_templates_intro": "ଏହି ବିଶେଷ ପୃଷ୍ଠାଟି ସବୁ ଲେଖା ନେଇ ଛାଞ୍ଚକୁ ବାରମ୍ବାର ବଢ଼ାଇଦିଏ ।\nଏହା <code><nowiki>{{</nowiki>#language:…}}</code> ଭଳି ପାର୍ସର ଫଙ୍କସନମାନଙ୍କୁ\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code> ଭଳି ଭେରିଏବଲମାନଙ୍କୁ ବଢ଼ାଏ ।\nଅଧିକନ୍ତୁ, ଏହା <code><nowiki>{{</nowiki> }}</code>ରେ ଥିବା ସବୁ କିଛି ବଢ଼ାଇଥାଏ ।",
+ "expand_templates_title": "{{FULLPAGENAME}} ଆଦି ପାଇଁ ପ୍ରସଙ୍ଗ ନାମ:",
"expand_templates_input": "ଇନପୁଟ ବିଷୟ:",
"expand_templates_output": "ପରିଣାମ",
+ "expand_templates_xml_output": "XML ଫଳାଫଳ",
+ "expand_templates_html_output": "ଖାଲି HTML ଫଳାଫଳ",
"expand_templates_ok": "ଠିକ ଅଛି",
"expand_templates_remove_comments": "ମତାମତ ହଟାନ୍ତୁ",
- "expand_templates_preview": "ଦେଖଣା"
+ "expand_templates_remove_nowiki": "ଫଳାଫଳରେ <nowiki> ଟ୍ୟାଗମାନଙ୍କୁ ଦବାଇଦିଅନ୍ତୁ",
+ "expand_templates_generate_xml": "XML ପାର୍ସ ସଂରଚନା ଦେଖାନ୍ତୁ",
+ "expand_templates_generate_rawhtml": "କେବଳ HTML କୋଡ଼ ଦେଖାନ୍ତୁ",
+ "expand_templates_preview": "ଦେଖଣା",
+ "pagelanguage": "ପୃଷ୍ଠା ଭାଷା ବଛା",
+ "pagelang-name": "ପୃଷ୍ଠା",
+ "pagelang-language": "ଭାଷା",
+ "pagelang-use-default": "ଡିଫଲ୍ଟ ଭାଷା ବ୍ୟବହାର କରନ୍ତୁ",
+ "pagelang-select-lang": "ଭାଷା ବାଛନ୍ତୁ",
+ "right-pagelang": "ପୃଷ୍ଠାର ଭାଷା ବାଛନ୍ତୁ",
+ "action-pagelang": "ପୃଷ୍ଠାର ଭାଷା ବଦଳାନ୍ତୁ",
+ "log-name-pagelang": "ଭାଷା ଇତିହାସ ବଦଳାନ୍ତୁ",
+ "log-description-pagelang": "ପୃଷ୍ଠା ଭାଷା ବଦଳର ଏ ଏକ ଇତିହାସ",
+ "logentry-pagelang-pagelang": "$1 $3 ପୃଷ୍ଠାର ଭାଷା $4 ରୁ $5କୁ {{GENDER:$2|ବଦଳାଇଦେଲେ}} ।",
+ "default-skin-not-found": "<code dir=\"ltr\">$wgDefaultSkin</code>ରେ ଦିଆଯାଇଥିବା <code>$1</code>ଏହି ଉଇକିର ଡିଫଲ୍ଟ ସ୍କିନ ମିଳିଲାନାହିଁ ।\n\nଆପଣଙ୍କ ଇନଷ୍ଟଲେସନରେ ତଳଲିଖିତ ସ୍କିନ ରହିଛି । ସେମାନଙ୍କୁ କିପରି ସକ୍ରିୟ କରିବେ ଓ ଡିଫଲ୍ଟ ଭାବେ ବାଛିବେ ଜାଣିବା ପାଇଁ [https://www.mediawiki.org/wiki/Manual:Skin_configuration ମାନୁଆଲ: ସ୍କିନ ସଂରଚନା] ଦେଖନ୍ତୁ ।\n\n$2\n\n; ଯଦି ଆପଣ ଏହି ଏବେ MediaWiki ଇନଷ୍ଟଲ କରିଥାନ୍ତି:\n: ଆପଣ ବୋଧେ git ରୁ ସିଧା, କିମ୍ବା ସୋର୍ସ କୋଡ଼ରୁ କିମ୍ବା ଆଉ କେଉଁଠାରୁ ଇନଷ୍ଟଲ କରିଛନ୍ତି । ଏହା ଆଶାନୁରୂପ । [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgର ]ରୁ ଆଉ କିଛି ସ୍କିନ ଇନଷ୍ଟଲ କରିପାରିବେ:\n:* ବିଭିନ୍ନ ସ୍କିନ ଓ ଏକ୍ସଟେନସନ ସହିତ ଆସୁଥିବା [https://www.mediawiki.org/wiki/Download ଟାରବଲ ଇନଷ୍ଟଲର] ଡାଉନଲୋଡ଼ କରାଯାଉଛି । ଆପଣ <code>skins/</code> ଡାଇରେକ୍ଟରି ଏଠାରୁ କପି କରି ପେଷ୍ଟ କରିପାରିବେ । \n:* git ଦେଇ <code>mediawiki/skins/*</code> ରେପୋଜିଟରିରୁ ଗୋଟେ ସ୍କିନ ଆପଣଙ୍କର MediaWiki ଇନଷ୍ଟଲେସନର <code dir=\"ltr\">skins/</code> ଡାଇରେକ୍ଟରିକୁ କପି କରାଯାଉଛି ।\n: ଆପଣ ଯଦି ଜଣେ MediaWiki ଡେଭେଲପର ହୋଇଥାନ୍ତି ତାହେଲେ ଏହା କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର git ରେପୋଜିଟୋରିରେ କିଛି ବାଧା ଉପୁଜିବା ଅନୁଚିତ ।\n\n; ଆପଣ ଯଦି ଏହି ମାତ୍ର MediaWiki ଅପଗ୍ରେଡ଼ କରିଥାନ୍ତି ତେବେ:\n: MediaWiki 1.24 ଏବଂ ନୂଆ ସଂସ୍କରଣମାନ ଆପେଆପେ ଇନଷ୍ଟଲ ହୋଇଥିବା ସ୍କିନ ସକ୍ରିୟ କରି ନଥାନ୍ତି ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]) ଦେଖନ୍ତୁ । ଏବେ ଇନଷ୍ଟଲ ହୋଇଥିବା ସମସ୍ତ ସ୍କିନ ପାଇଁ ଆପଣ ଏହି ଧାଡ଼ିଟି <code>LocalSettings.php</code>ରେ ପେଷ୍ଟ କରିପାରିବେ:\n\n<pre dir=\"ltr\">$3</pre>\n\n; ଯଦି ଆପଣ ଏହି ମାତ୍ର <code>LocalSettings.php</code> ବଦଳାଇ ଦେଇଥାନ୍ତି:\n: ବନାନ ପରଖିବା ପାଇଁ ସ୍କିନର ନାମ ଆଉଥରେ ପରଖିନିଅନ୍ତୁ ।",
+ "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 ଟାରବଲ ଇନଷ୍ଟଲର] ଡାଉନଲୋଡ଼ କରାଯାଉଛି । ଆପଣ <code>skins/</code> ଡାଇରେକ୍ଟରି ଏଠାରୁ କପି କରି ପେଷ୍ଟ କରି । \n:* git ଦେଇ <code>mediawiki/skins/*</code> ରେପୋଜିଟରିରୁ ଗୋଟେ ସ୍କିନ ଆପଣଙ୍କର MediaWiki ଇନଷ୍ଟଲେସନର <code dir=\"ltr\">skins/</code> ଡାଇରେକ୍ଟରିକୁ କପି କରି ।\n: ଆପଣ ଯଦି ଜଣେ MediaWiki ଡେଭେଲପର ହୋଇଥାନ୍ତି ତାହେଲେ ଏହା କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର git ରେପୋଜିଟୋରିରେ କିଛି ବାଧା ଉପୁଜିବା ଅନୁଚିତ । ସ୍କିନ ସକ୍ରିୟ କରିବା ଓ ଡିଫଲ୍ଟ ଭାବେ ବାଛିବା ବାବଦରେ ଅଧିକ ସୂଚନା ପାଇଁ [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] ଦେଖନ୍ତୁ ।",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ସକ୍ରିୟ କରାଗଲା)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ନିକ୍ରିୟ କରାଗଲା''')",
+ "mediastatistics": "ମିଡ଼ିଆ ଆକଳନ",
+ "mediastatistics-summary": "ଅପଲୋଡ଼ ହୋଇଥିବା ଫାଇଲର ପ୍ରକାର ବାବଦରେ ଆକଳନ । ଏଥିରେ ଏକ ଫାଇଲର ନିକଟତମ ସଂସ୍କରଣ ରହିଛି । ପୁରୁଣା କିମ୍ବା ଅପସାରିତ ସଂସ୍କରଣ ଏଥିରେ ରଖାଯାଇନାହିଁ ।",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 ବାଇଟ|$1 ବାଇଟ}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME ପ୍ରକାର",
+ "mediastatistics-table-extensions": "ସମ୍ଭାବିତ ଏକ୍ସଟେନସନ",
+ "mediastatistics-table-count": "ଫାଇଲ ସଂଖ୍ୟା",
+ "mediastatistics-table-totalbytes": "ସମ୍ମିଳିତ ଆକାର",
+ "mediastatistics-header-unknown": "ଅଜଣା",
+ "mediastatistics-header-bitmap": "ବିଟମ୍ୟାପ ଛବି",
+ "mediastatistics-header-drawing": "ଅଙ୍କନ (ଭେକ୍ଟର ଛବି)",
+ "mediastatistics-header-audio": "ଅଡ଼ିଓ",
+ "mediastatistics-header-video": "ଭିଡ଼ିଓ",
+ "mediastatistics-header-multimedia": "ରିଚ ମିଡ଼ିଆ",
+ "mediastatistics-header-office": "ଅଫିସ",
+ "mediastatistics-header-text": "ଲେଖା",
+ "mediastatistics-header-executable": "ଏକ୍ସକିଉଟ କରିହେବା ଭଳି",
+ "mediastatistics-header-archive": "କମ୍ପ୍ରେସ ହୋଇଥିବା ଫର୍ମାଟ",
+ "json-warn-trailing-comma": "$1 ପରର {{PLURAL:$1|କମାଟି|କମା ସବୁ}} JSONରୁ ହଟାଇ ଦିଆଯାଇଛି",
+ "json-error-unknown": "JSONରେ କିଛି ତ୍ରୁଟି ଥିଲା । ତ୍ରୁଟି: $1",
+ "json-error-depth": "ସର୍ବାଧିକ ଷ୍ଟାକ ଗଭୀରତା ଟପିଯାଇଛି",
+ "json-error-state-mismatch": "ଅବୈଧ କିମ୍ବା ଅସୁବିଧାଜନକ JSON",
+ "json-error-ctrl-char": "କଣ୍ଟ୍ରୋଲ କ୍ୟାରେକ୍ଟର ତ୍ରୁଟି, ଭୁଲ ଭାବେ ଏନକୋଡ଼ କରାଯାଇଥିବା ହେତୁ ହୋଇପାରେ",
+ "json-error-syntax": "ସିଣ୍ଟାକ୍ସ ଭୁଲ",
+ "json-error-utf8": "UTF-8 କ୍ୟାରେକ୍ଟର ଅସଜଡ଼ା, ଭୁଲ ଭାବେ ଏନକୋଡ଼ କରାଯାଇଥିବା ହେତୁ ହୋଇପାରେ",
+ "json-error-recursion": "ଏନକୋଡ଼ ହେବାକୁ ଥିବା ଭାଲ୍ୟୁରେ ଏକରୁ ଅଧିକ ରିକର୍ସିଭ ଆଧାର",
+ "json-error-inf-or-nan": "ଭାଲ୍ୟୁରେ ଏକରୁ ଅଧିକ NAN କିମ୍ବା INF ମୂଲ୍ୟ ଏନକୋଡ଼ କରିବାକୁ ହେବ",
+ "json-error-unsupported-type": "ଏନକୋଡ଼ ହୋଇନପାରିବା ଭଳି ଏକ ପ୍ରକାରର ମୂଲ୍ୟ ଦିଆଗଲା",
+ "special-characters-group-latin": "ଲାଟିନ",
+ "special-characters-group-latinextended": "ଲାଟିନ ଅଧିକ ଅକ୍ଷର",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "ସଙ୍କେତ",
+ "special-characters-group-greek": "ଗ୍ରୀକ",
+ "special-characters-group-cyrillic": "ସିରିଲିକ",
+ "special-characters-group-arabic": "ଆରବୀ",
+ "special-characters-group-arabicextended": "ଆରବୀ ଅଧିକ ଅକ୍ଷର",
+ "special-characters-group-persian": "ପାରସୀ",
+ "special-characters-group-hebrew": "ହିବ୍ରୁ",
+ "special-characters-group-bangla": "ବଙ୍ଗଳା",
+ "special-characters-group-tamil": "ତାମିଲ",
+ "special-characters-group-telugu": "ତେଲୁଗୁ",
+ "special-characters-group-sinhala": "ସିଂହଳୀ",
+ "special-characters-group-gujarati": "ଗୁଜୁରାଟୀ",
+ "special-characters-group-devanagari": "ଦେବନାଗରୀ",
+ "special-characters-group-thai": "ଥାଇ",
+ "special-characters-group-lao": "ଲାଓ",
+ "special-characters-group-khmer": "ଖମେର ଭାଷା",
+ "special-characters-title-endash": "en ଡ୍ୟାସ",
+ "special-characters-title-emdash": "em dash",
+ "special-characters-title-minus": "ମେନୁଗୁଡିକର ଚିହ୍ନ"
}
diff --git a/languages/i18n/os.json b/languages/i18n/os.json
index 9ff15c20..89ef183a 100644
--- a/languages/i18n/os.json
+++ b/languages/i18n/os.json
@@ -237,7 +237,7 @@
"editlink": "ивын",
"viewsourcelink": "Код кæсын",
"editsectionhint": "Хай ивын: $1",
- "toc": "Сæртæ",
+ "toc": "Сæргæндтæ",
"showtoc": "равдисын",
"hidetoc": "бамбæхсын",
"collapsible-collapse": "Стухын",
@@ -354,7 +354,7 @@
"gotaccount": "Регистрацигонд дæ? $1.",
"gotaccountlink": "Бахизын",
"userlogin-resetlink": "Ферох дæ сты дæ бахизæнтæ?",
- "userlogin-resetpassword-link": "Дæ пароль ногæй сæвæр",
+ "userlogin-resetpassword-link": "Ферох и дæ пароль?",
"createacct-emailrequired": "Электрон посты адрис",
"createacct-emailoptional": "Электрон посты адрис (фæндон)",
"createacct-email-ph": "Бафысс дæ электрон посты адрис",
@@ -416,6 +416,7 @@
"login-abort-generic": "Нæ дын бантыст бахизын. Урæд.",
"loginlanguagelabel": "Æвзаг: $1",
"suspicious-userlogout": "Дæ рахизыны домæн нæ сæххæст ис, уымæн æмæ хæлд браузерæй кæнæ кешгæнæг проксийæ æрвысты хуызæн у.",
+ "pt-userlogout": "Рахизын",
"php-mail-error-unknown": "Нæбæрæг рæдыд PHP-йы mail() функцийы.",
"user-mail-no-addy": "Е-mail æрвыста æнæ e-mail адрисæй.",
"user-mail-no-body": "Фæлварста афтид кæнæ æнæбары мидисимæ фыстæг арвитын.",
@@ -452,7 +453,6 @@
"passwordreset-emailsent-capture": "Ног пароль сæвæрыны фыстæг æрвыст æрцыд æмæ бындæр æвдыст у.",
"passwordreset-emailerror-capture": "Ног пароль сæвæрыны фыстæг арæзт æрцыд æмæ бындæр æвдыст у. Фæлæ йæ {{grammar:allative|{{GENDER:$2|user}}}} арвитын нæ бантыстис: $1",
"changeemail": "E-mail адрис фæивын",
- "changeemail-header": "Аккаунты e-mail адрис фæивын",
"changeemail-text": "Байдзаг кæн ацы формæ, цæмæй дæ e-mail адрис фæивай. Уый тыххæй дын хъæудзæн дæ пароль бафыссын.",
"changeemail-no-info": "Ды хъуамæ системæмæ хызт уай, цæмæй ацы фарсмæ комкоммæ бавналай.",
"changeemail-oldemail": "Нырыккон e-mail адрис:",
@@ -460,7 +460,6 @@
"changeemail-none": "(нæй)",
"changeemail-password": "Дæ {{grammar:genitive|{{SITENAME}}}} пароль:",
"changeemail-submit": "E-mail фæивын",
- "changeemail-cancel": "Ныууадзын",
"bold_sample": "Бæзджын текст",
"bold_tip": "Бæзджын текст",
"italic_sample": "Курсив",
@@ -634,7 +633,6 @@
"search-relatedarticle": "Хæстæг",
"searchrelated": "хæстæг",
"searchall": "иууылдæр",
- "showingresultsheader": "{{PLURAL:$5|Фæстиуæг '''$1''' '''$3'''-йæ|Фæстиуджытæ '''$1 - $2''' '''$3'''-йæ}} '''{{grammar:dative|$4}}'''",
"search-nonefound": "Ницы разындис домæнæн",
"powersearch-legend": "Сæрмагонд агуырд",
"powersearch-toggleall": "Иууылдæр",
@@ -837,7 +835,6 @@
"statistics": "Статистикæ",
"statistics-header-pages": "Фарсы статистикæ",
"statistics-header-edits": "Ивдтыты статистикæ",
- "statistics-header-views": "Бакастыты статистикæ",
"statistics-header-users": "Архайджыты статистикæ",
"statistics-header-hooks": "Æндæр статистикæтæ",
"statistics-articles": "Мидисы фæрстæ",
@@ -859,7 +856,6 @@
"uncategorizedpages": "Æнæкатегори фæрстæ",
"uncategorizedimages": "Æнæкатегори файлтæ",
"uncategorizedtemplates": "Æнæкатегори хуызæгтæ",
- "popularpages": "Популярон фæрстæ",
"wantedcategories": "Хъæугæ категоритæ",
"wantedpages": "Хъæугæ фæрстæ",
"wantedfiles": "Хъæугæ файлтæ",
@@ -881,7 +877,6 @@
"pager-older-n": "{{PLURAL:$1|раздæр иу|раздæр $1}}",
"booksources": "Чиныгисæнтæ",
"booksources-search-legend": "Агурын чингуыты равзæрæнтæ",
- "booksources-go": "Агурын",
"specialloguserlabel": "Гæнæг:",
"speciallogtitlelabel": "Мил (ном кæнæ архайæг):",
"log": "Логтæ",
@@ -917,7 +912,7 @@
"unwatch": "Нал дарын цæст",
"watchlist-details": "{{PLURAL:$1|$1 фарсмæ|$1 фарсмæ}} дæ цæст дарыс, тæрхоны фæрстæ нæ нымайгæйæ.",
"wlnote": "Дæлæ афæстаг '''$2 сахаты дæргъы''' цы $1 {{PLURAL:$1|ивддзинад|ивддзинады}} æрцыди.",
- "wlshowlast": "Фæстæг $1 сахаты, $2 боны дæргъы; $3.",
+ "wlshowlast": "Фæстæг $1 сахаты, $2 боны дæргъы; .",
"watchlist-options": "Цæстдард рæгъы фадæттæ",
"watching": "Цæстдард фæрсты номхыгъдмæ афтауын...",
"unwatching": "Цæстдард фæрсты номхыгъдæй аиуварс кæнын...",
@@ -1118,7 +1113,6 @@
"exif-datetimereleased": "Рауагъды датæ",
"exif-identifier": "Бæрæггæнæн",
"exif-gaincontrol-0": "Нæй",
- "watchlistall2": "иууылдæр",
"namespacesall": "иууылдæр",
"monthsall": "иууылдæр",
"confirm_purge_button": "Афтæ уæд!",
@@ -1139,7 +1133,7 @@
"size-gigabytes": "$1 ГБ",
"watchlistedit-normal-title": "Цæстдард ивæн",
"watchlistedit-normal-submit": "Схафын фыстытæ",
- "watchlistedit-raw-titles": "Сæртæ:",
+ "watchlistedit-raw-titles": "Фæрстæ:",
"watchlistedit-raw-submit": "Номхыгъд бафснай",
"watchlisttools-view": "Баст ивдтытæ фен",
"watchlisttools-edit": "Бакæсын æмæ ивын цæстдард рæгъ",
@@ -1149,7 +1143,7 @@
"version": "Фæлтæр",
"version-skins": "Цъар",
"version-other": "Æндæр",
- "version-version": "(Фæлтæр $1)",
+ "version-version": "($1)",
"version-license": "Лицензи",
"version-poweredby-credits": "Ацы викийæн тых радта '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "æндæртæ",
@@ -1170,10 +1164,11 @@
"logentry-delete-delete": "$1 схафта фарс $3",
"logentry-delete-restore": "$1 рацарæзта фарс $3",
"rightsnone": "(нæй)",
- "feedback-subject": "Сæр:",
- "feedback-message": "Фыстæг:",
+ "revdelete-summary": "ивддзинады мидис",
"feedback-cancel": "Ныууадзын",
"feedback-close": "Æххæст",
+ "feedback-message": "Фыстæг:",
+ "feedback-subject": "Сæр:",
"searchsuggest-search": "Агурын",
"api-error-missingparam": "Мидæггаг рæдыд: Курдиаты параметртæ нæй.",
"api-error-missingresult": "Мидæггаг рæдыд: Нæ рауадис сбæрæг кæнын къопи кæнын куыд бантыстис.",
diff --git a/languages/i18n/pa.json b/languages/i18n/pa.json
index 868b4e2c..1c96f7dc 100644
--- a/languages/i18n/pa.json
+++ b/languages/i18n/pa.json
@@ -20,7 +20,8 @@
"Xqt",
"Ævar Arnfjörð Bjarmason",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "ਲਿੰਕ ਹੇਠ-ਲਾਈਨ:",
@@ -60,6 +61,7 @@
"tog-showhiddencats": "ਲੁਕਵੀਆਂ ਸ਼੍ਰੇਣੀਆਂ ਵਖਾਓ",
"tog-norollbackdiff": "\"ਵਾਪਸ ਮੋੜੋ\" ਅਮਲ ਵਿਚ ਲਿਆਣ ਮਗਰੋਂ ਫ਼ਰਕ ਨਾ ਵਖਾਓ",
"tog-useeditwarning": "ਜਦੋਂ ਮੈਂ ਅਣ-ਸਾਂਭੀਆਂ ਸੋਧਾਂ ਵਾਲਾ ਸਫ਼ਾ ਛੱਡਾਂ ਤਾਂ ਮੈਨੂੰ ਖ਼ਬਰ ਦਿਉ",
+ "tog-prefershttps": "ਦਾਖ਼ਲ ਹੋਣ 'ਤੇ ਹਮੇਸ਼ਾਂ ਸੁਰੱਖਿਅਤ ਜੋੜ ਵਰਤੋ",
"underline-always": "ਹਮੇਸ਼ਾਂ",
"underline-never": "ਕਦੇ ਨਹੀਂ",
"underline-default": "ਸਕਿਨ ਜਾਂ ਬਰਾਊਜ਼ਰ ਮੂਲ",
@@ -180,7 +182,7 @@
"history": "ਸਫ਼ੇ ਦਾ ਅਤੀਤ",
"history_short": "ਅਤੀਤ",
"updatedmarker": "ਮੇਰੀ ਆਖਰੀ ਫੇਰੀ ਤੋਂ ਬਾਅਦ ਦੇ ਅੱਪਡੇਟ",
- "printableversion": "ਛਪਣਯੋਗ ਵਰਜਨ",
+ "printableversion": "ਛਪਣਯੋਗ ਰੂਪ",
"permalink": "ਪੱਕੀ ਲਿੰਕ",
"print": "ਛਾਪੋ",
"view": "ਵੇਖੋ",
@@ -188,6 +190,7 @@
"edit": "ਸੋਧੋ",
"edit-local": "ਲੋਕਲ ਵੇਰਵਾ ਸੋਧੋ",
"create": "ਬਣਾਓ",
+ "create-local": "ਕੋਈ ਸਥਾਨੀ ਵੇਰਵਾ ਜੋੜੋ",
"editthispage": "ਇਹ ਸਫ਼ਾ ਸੋਧੋ",
"create-this-page": "ਇਹ ਸਫ਼ਾ ਬਣਾਓ",
"delete": "ਹਟਾਓ",
@@ -217,9 +220,10 @@
"viewhelppage": "ਮਦਦ ਸਫ਼ਾ ਵੇਖੋ",
"categorypage": "ਸ਼੍ਰੇਣੀ ਸਫ਼ਾ ਵੇਖੋ",
"viewtalkpage": "ਚਰਚਾ ਵੇਖੋ",
- "otherlanguages": "ਹੋਰ ਭਾਸ਼ਾਵਾਂ ਵਿਚ",
+ "otherlanguages": "ਹੋਰ ਬੋਲੀਆਂ ਵਿਚ",
"redirectedfrom": "($1 ਤੋਂ ਰੀਡਿਰੈਕਟ)",
"redirectpagesub": "ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ",
+ "redirectto": "ਇਸ ਵੱਲ ਮੋੜੋ:",
"lastmodifiedat": "ਇਸ ਸਫ਼ੇ ਵਿੱਚ ਆਖ਼ਰੀ ਸੋਧ $1 ਨੂੰ $2 ਵਜੇ ਹੋਈ।",
"viewcount": "ਇਹ ਸਫ਼ਾ {{PLURAL:$1|ਇੱਕ ਵਾਰ|$1 ਵਾਰ}} ਵੇਖਿਆ ਗਿਆ।",
"protectedpage": "ਸੁਰੱਖਿਅਤ ਸਫ਼ਾ",
@@ -232,7 +236,7 @@
"pool-errorunknown": "ਅਣਜਾਣ ਗਲਤੀ",
"aboutsite": "{{SITENAME}} ਬਾਰੇ",
"aboutpage": "Project:ਬਾਰੇ",
- "copyright": "ਸਮੱਗਰੀ $1 ਹੇਠ ਉਪਲੱਬਧ ਹੈ।",
+ "copyright": "ਕੁਝ ਹੋਰ ਨਾ ਲਿਖੇ ਜਾਣ 'ਤੇ ਸਮੱਗਰੀ $1 ਹੇਠ ਮੌਜੂਦ ਹੈ।",
"copyrightpage": "{{ns:project}}:ਕਾਪੀਰਾਈਟ",
"currentevents": "ਹਾਲ ਦੀਆਂ ਘਟਨਾਵਾਂ",
"currentevents-url": "Project:ਹਾਲ ਦੀਆਂ ਘਟਨਾਵਾਂ",
@@ -244,8 +248,8 @@
"policy-url": "Project:ਨੀਤੀ",
"portal": "ਭਾਈਚਾਰਕ ਸੱਥ",
"portal-url": "Project:ਸੱਥ",
- "privacy": "ਪਰਾਈਵੇਸੀ ਪਾਲਸੀ",
- "privacypage": "Project:ਪਰਾਈਵੇਸੀ ਪਾਲਸੀ",
+ "privacy": "ਪਰਦਾ ਨੀਤੀ",
+ "privacypage": "Project:ਪਰਦਾ ਨੀਤੀ",
"badaccess": "ਮਨਜ਼ੂਰੀ ਗਲਤੀ",
"badaccess-group0": "ਤੁਹਾਨੂੰ ਉਹ ਕਾਰਵਾਈ ਕਰਨ ਦੀ ਮਨਜ਼ੂਰੀ ਨਹੀਂ ਜਿਹਦੀ ਤੁਸੀਂ ਮੰਗ ਕੀਤੀ ਹੈ।",
"badaccess-groups": "ਜੋ ਕਾਰਵਾਈ ਤੁਸੀਂ ਕਰਨੀ ਚਾਹੀ ਹੈ ਓਹ {{PLURAL:$2|ਇਸ ਸਮੂਹ|ਇਹਨਾਂ ਸਮੂਹਾਂ}} ਦੇ ਮੈਂਬਰ ਹੀ ਕਰ ਸਕਦੇ ਹਨ: $1",
@@ -256,8 +260,8 @@
"youhavenewmessages": "ਤੁਹਾਡੇ ਲਈ $1। ($2)",
"youhavenewmessagesfromusers": "{{PLURAL:$3|ਇੱਕ ਵਰਤੋਂਕਾਰ|$3 ਵਰਤੋਂਕਾਰਾਂ}} ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।",
"youhavenewmessagesmanyusers": "ਕਈ ਯੂਜ਼ਰ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।",
- "newmessageslinkplural": "{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}",
- "newmessagesdifflinkplural": "ਆਖ਼ਰੀ {{PLURAL:$1|ਤਬਦੀਲੀ|ਤਬਦੀਲੀਆਂ}}",
+ "newmessageslinkplural": "{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|999=ਨਵੇਂ ਸੁਨੇਹੇ}}",
+ "newmessagesdifflinkplural": "ਆਖ਼ਰੀ {{PLURAL:$1|ਤਬਦੀਲੀ|999=ਤਬਦੀਲੀਆਂ}}",
"youhavenewmessagesmulti": "$1 ’ਤੇ ਤੁਹਾਡੇ ਲਈ ਨਵੇਂ ਸੁਨੇਹੇ ਹਨ",
"editsection": "ਸੋਧੋ",
"editold": "ਸੋਧ",
@@ -270,6 +274,7 @@
"hidetoc": "ਓਹਲੇ",
"collapsible-collapse": "ਸਮੇਟੋ",
"collapsible-expand": "ਫੈਲਾਓ",
+ "confirmable-confirm": "ਕੀ {{GENDER:$1|ਤੁਹਾਨੂੰ}} ਪੂਰਾ ਵਿਸ਼ਵਾਸ ਹੈ?",
"confirmable-yes": "ਹਾਂ",
"confirmable-no": "ਨਹੀਂ",
"thisisdeleted": "$1 ਵੇਖੋ ਜਾਂ ਮੁੜ ਸਟੋਰ ਕਰੋ",
@@ -286,7 +291,7 @@
"sort-descending": "ਘਟਦਾ ਕ੍ਰਮ",
"sort-ascending": "ਵਧਦਾ ਕ੍ਰਮ",
"nstab-main": "ਸਫ਼ਾ",
- "nstab-user": "ਯੂਜ਼ਰ ਸਫ਼ਾ",
+ "nstab-user": "ਵਰਤੋਂਕਾਰ ਵਰਕਾ",
"nstab-media": "ਮੀਡੀਆ ਸਫ਼ਾ",
"nstab-special": "ਖ਼ਾਸ ਸਫ਼ਾ",
"nstab-project": "ਪਰੋਜੈਕਟ ਸਫ਼ਾ",
@@ -301,6 +306,8 @@
"nospecialpagetext": "<strong>ਤੁਸੀਂ ਇੱਕ ਗ਼ਲਤ ਖ਼ਾਸ ਸਫ਼ੇ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਹੈ।</strong>\nਸਹੀ ਖ਼ਾਸ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ [[Special:SpecialPages|{{int:specialpages}}]] ’ਤੇ ਵੇਖੀ ਜਾ ਸਕਦੀ ਹੈ।",
"error": "ਗ਼ਲਤੀ",
"databaseerror": "ਡਾਟਾਬੇਸ ਗਲਤੀ",
+ "databaseerror-text": "ਡਾਟਾਬੇਸ ਦੀ ਪੁੱਛ ਸਬੰਧੀ ਕੋਈ ਦੋਸ਼ ਵਾਪਰਿਆ ਹੈ।\nਇਹ ਸਾਫ਼ਟਵੇਅਰ ਵਿਚਲੇ ਕਿਸੇ ਮਾਂਙਣੂ ਵੱਲ ਇਸ਼ਾਰਾ ਹੋ ਸਕਦਾ ਹੈ।",
+ "databaseerror-textcl": "ਡਾਟਾਬੇਸ ਦੀ ਪੁੱਛ ਸਬੰਧੀ ਕੋਈ ਦੋਸ਼ ਵਾਪਰਿਆ ਹੈ।",
"databaseerror-query": "ਪੁੱਛ-ਗਿੱਛ: $1",
"databaseerror-function": "ਕਰਤੱਵ: $1",
"databaseerror-error": "ਦੋਸ਼: $1",
@@ -349,11 +356,11 @@
"mypreferencesprotected": "ਤੁਹਾਨੂੰ ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਵਿੱਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
"ns-specialprotected": "ਖ਼ਾਸ ਸਫ਼ਿਆਂ ’ਚ ਫੇਰ-ਬਦਲ ਨਹੀਂ ਹੋ ਸਕਦੇ।",
"titleprotected": "ਇਹ ਸਿਰਲੇਖ [[User:$1|$1]] ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦਿੱਤਾ ਹੋਇਆ ਕਾਰਨ ਹੈ, \"''$2''\"।",
- "filereadonlyerror": "\"$1\" ਫ਼ਾਈਲ ਵਿੱਚ ਤਬਦੀਲੀ ਨਹੀਂ ਹੋ ਸਕਦੀ ਕਿਉਂਕਿ ਫ਼ਾਈਲ ਭੰਡਾਰ \"$2\" ਸਿਰਫ਼ ਵੇਖਣਯੋਗ ਰੂਪ ਵਿਚ ਹੈ।\n\nਉਹ ਪ੍ਰਬੰਧਕ, ਜਿਹਨੇ ਇਹ ਰੋਕ ਲਾਈ ਹੈ, ਦਾ ਕਹਿਣਾ ਹੈ: ''$3''",
+ "filereadonlyerror": "\"$1\" ਫ਼ਾਈਲ ਵਿੱਚ ਤਬਦੀਲੀ ਨਹੀਂ ਹੋ ਸਕਦੀ ਕਿਉਂਕਿ ਫ਼ਾਈਲ ਭੰਡਾਰ \"$2\" ਸਿਰਫ਼ ਵੇਖਣਯੋਗ ਰੂਪ ਵਿਚ ਹੈ।\n\nਉਹ ਪ੍ਰਬੰਧਕ, ਜਿਸਨੇ ਇਹ ਰੋਕ ਲਾਈ ਹੈ, ਦਾ ਕਹਿਣਾ ਹੈ: ''$3''",
"invalidtitle-knownnamespace": "ਥਾਂ-ਨਾਮ \"$2\" ਅਤੇ ਲਿਖਤ \"$3\" ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
"invalidtitle-unknownnamespace": "ਅਣਜਾਣ ਨਾਂ-ਸਥਾਨ ਗਿਣਤੀ $1 ਅਤੇ ਲਿਖਤ $2 ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ",
"exception-nologin": "ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ",
- "exception-nologin-text": "ਇਹ ਸਫ਼ਾ ਜਾਂ ਕਾਰਵਾਈ ਤੁਹਾਡਾ ਇਸ ਵਿਕੀ ’ਤੇ ਲਾਗਇਨ ਕੀਤਾ ਹੋਣਾ ਲੋੜਦੀ ਹੈ।",
+ "exception-nologin-text": "ਇਸ ਸਫ਼ੇ ਜਾਂ ਕਾਰਵਾਈ ਤੁੱਕ ਪੁੱਜਣ ਵਾਸਤੇ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਦਾਖ਼ਲ ਹੋਵੋ।",
"virus-badscanner": "ਮੰਦਾ ਪ੍ਰਬੰਧ: ਅਣਜਾਣ ਵਾਇਰਸ ਸਕੈਨਰ: ''$1''",
"virus-scanfailed": "ਸਕੈਨ ਫੇਲ੍ਹ ਹੈ (ਕੋਡ $1)",
"virus-unknownscanner": "ਅਣਪਛਾਤਾ ਐਂਟੀਵਾਇਰਸ:",
@@ -361,9 +368,9 @@
"welcomeuser": "$1 ਜੀ ਆਇਆਂ ਨੂੰ!",
"welcomecreation-msg": "ਤੁਹਾਡਾ ਖਾਤਾ ਬਣ ਚੁੱਕਾ ਹੈ। ਆਪਣੀਆਂ [[Special:Preferences|{{SITENAME}} ਪਸੰਦ]] ਬਦਲਣੀ ਨਾ ਭੁੱਲੋ।",
"yourname": "ਵਰਤੋਂਕਾਰ-ਨਾਂ:",
- "userlogin-yourname": "ਯੂਜ਼ਰ-ਨਾਂ",
- "userlogin-yourname-ph": "ਆਪਣਾ ਯੂਜ਼ਰ-ਨਾਂ ਭਰੋ",
- "createacct-another-username-ph": "ਯੂਜ਼ਰ ਨਾਂ ਦਿਓ",
+ "userlogin-yourname": "ਵਰਤੋਂਕਾਰ ਨਾਂ",
+ "userlogin-yourname-ph": "ਆਪਣਾ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਭਰੋ",
+ "createacct-another-username-ph": "ਵਰਤੋਂਕਾਰ-ਨਾਂ ਭਰੋ",
"yourpassword": "ਪਾਸਵਰਡ:",
"userlogin-yourpassword": "ਪਾਸਵਰਡ",
"userlogin-yourpassword-ph": "ਆਪਣਾ ਪਾਸਵਰਡ ਦਿਉ",
@@ -381,8 +388,8 @@
"nav-login-createaccount": "ਲਾਗਇਨ/ਖਾਤਾ ਬਣਾਓ",
"userlogin": "ਲਾਗਇਨ/ਖਾਤਾ ਬਣਾਓ",
"userloginnocreate": "ਲਾਗਇਨ",
- "logout": "ਲਾਗ ਆਉਟ",
- "userlogout": "ਲਾਗ ਆਉਟ",
+ "logout": "ਵਿਦਾਈ ਲਉ",
+ "userlogout": "ਵਿਦਾਈ ਲਉ",
"notloggedin": "ਲਾਗਇਨ ਨਹੀਂ ਹੋ",
"userlogin-noaccount": "ਖਾਤਾ ਨਹੀਂ ਹੈ?",
"userlogin-joinproject": "{{SITENAME}} ਦਾ ਹਿੱਸਾ ਬਣੋ",
@@ -393,6 +400,8 @@
"gotaccountlink": "ਲਾਗਇਨ",
"userlogin-resetlink": "ਆਪਣੀ ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਭੁੱਲ ਗਏ ਹੋ?",
"userlogin-resetpassword-link": "ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ?",
+ "userlogin-helplink2": "ਦਾਖ਼ਲ ਹੋਣ ਵਿਚ ਮਦਦ",
+ "userlogin-loggedin": "ਤੁਸੀਂ ਪਹਿਲੋਂ ਹੀ {{GENDER:$1|$1}} ਵਜੋਂ ਦਾਖ਼ਲ ਹੋ ਚੁੱਕੇ ਹੋਂ।\nਕਿਸੇ ਹੋਰ ਵਰਤੋਂਕਾਰ ਵਜੋਂ ਦਾਖ਼ਲ ਹੋਣ ਵਾਸਤੇ ਹੇਠ ਦਿੱਤਾ ਫਾਰਮ ਭਰੋ।",
"userlogin-createanother": "ਹੋਰ ਖਾਤਾ ਬਣਾਓ",
"createacct-emailrequired": "ਈਮੇਲ ਪਤਾ",
"createacct-emailoptional": "ਈਮੇਲ ਪਤਾ (ਚੋਣਵਾਂ)",
@@ -412,11 +421,11 @@
"createacct-benefit-body2": "{{PLURAL:$1|ਸਫ਼ਾ|ਸਫ਼ੇ}}",
"createacct-benefit-body3": "ਹਾਲੀਆ {{PLURAL:$1|ਯੋਗਦਾਨੀ}}",
"badretype": "ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੇ ਪਾਸਵਰਡ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।",
- "userexists": "ਯੂਜ਼ਰ-ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ।",
+ "userexists": "ਵਰਤੋਂਕਾਰ-ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ।",
"loginerror": "ਲਾਗਇਨ ਗ਼ਲਤੀ",
"createacct-error": "ਖਾਤਾ ਬਣਾਉਣ ਵਿਚ ਗਲਤੀ",
"createaccounterror": "ਖਾਤਾ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: $1",
- "nocookiesnew": "ਯੂਜ਼ਰ ਅਕਾਊਂਟ ਬਣਾਇਆ ਗਿਆ ਹੈ, ਪਰ ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੈ।{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.",
+ "nocookiesnew": "ਵਰਤੋਂKਆਰ ਖਾਤਾ ਬਣਾਇਆ ਗਿਆ ਸੀ ਪਰ ਤੁਸੀਂ ਦਾਖ਼ਲ ਨਹੀਂ ਹੋਏ।{{SITENAME}} ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਦਾਖ਼ਲ ਕਰਨ ਵਾਸਤੇ ਕੁੱਕੀਆਂ ਵਰਤਦੀ ਹੈ। ਤੁਸੀਂ ਕੁੱਕੀਆਂ ਬੰਦ ਕੀਤੀਆਂ ਹੋਈਆਂ ਹਨ। ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਇਹਨਾਂ ਨੂੰ ਚਲਾਉ, ਫੇਰ ਆਪਣੇ ਨਵੇਂ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਨਾਲ਼ ਦਾਖ਼ਲ ਹੋਵੋ।",
"nocookieslogin": "{{SITENAME}} ਯੂਜ਼ਰਾਂ ਨੂੰ ਲਾਗਇਨ ਕਰਨ ਲਈ ਕੂਕੀਜ਼ ਵਰਤਦੀ ਹੈ। ਤੁਹਾਡੇ ਕੂਕੀਜ਼ ਆਯੋਗ ਕੀਤੇ ਹੋਏ ਹਨ। ਉਨ੍ਹਾਂ ਨੂੰ ਯੋਗ ਕਰਕੇ ਮੁੜ ਟਰਾਈ ਕਰੋ।",
"nocookiesfornew": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਨਹੀਂ ਬਣਾਇਆ ਗਿਆ ਕਿਉਂਕਿ ਅਸੀਂ ਇਹਦੇ ਸਰੋਤ ਨੂੰ ਤਸਦੀਕ ਨਹੀਂ ਕਰ ਸਕੇ।\nਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡੀਆਂ ਕੁਕੀਆਂ ਕੰਮ ਕਰ ਰਹੀਆਂ ਹਨ, ਸਫ਼ਾ ਫੇਰ ਲੋਡ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।",
"noname": "ਤੁਸੀਂ ਇੱਕ ਸਹੀ ਯੂਜ਼ਰ-ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ।",
@@ -429,7 +438,7 @@
"wrongpassword": "ਗ਼ਲਤ ਪਾਸਵਰਡ ਦਿੱਤਾ ਹੈ। ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।",
"wrongpasswordempty": "ਖ਼ਾਲੀ ਪਾਸਵਰਡ ਦਿੱਤਾ ਹੈ। ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।",
"passwordtooshort": "ਪਾਸਵਰਡ {{PLURAL:$1|1 ਅੱਖਰ|$1 ਅੱਖਰਾਂ}} ਦਾ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ।",
- "password-name-match": "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਤੁਹਾਡੇ ਯੂਜ਼ਰ ਨਾਂ ਤੋਂ ਵੱਖਰਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
+ "password-name-match": "ਤੁਹਾਡਾ ਪਛਾਣ-ਸ਼ਬਦ ਤੁਹਾਡੇ ਵਰਤੋਂਕਾਰ ਨਾਂ ਤੋਂ ਵੱਖਰਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
"password-login-forbidden": "ਇਹ ਯੂਜ਼ਰ-ਨਾਂ ਅਤੇ ਪਾਸਵਰਡ ਵਰਤਣ ਦੀ ਮਨਾਹੀ ਹੈ।",
"mailmypassword": "ਨਵਾਂ ਪਾਸਵਰਡ ਈ-ਮੇਲ ਕਰੋ",
"passwordremindertitle": "{{SITENAME}} ਲਈ ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ",
@@ -455,49 +464,57 @@
"createaccount-text": "ਕਿਸੇ ਨੇ \"$2\" ਮੈਂਬਰ-ਨਾਮ ਅਤੇ \"$3\" ਪਾਸਵਰਡ ਨਾਲ਼ {{SITENAME}} ($4) ਤੇ, ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਵਰਤਦੇ ਹੋਏ, ਖਾਤਾ ਬਣਾਇਆ ਹੈ।\nਤੁਹਾਨੂੰ ਹੁਣੇ ਲਾਗਇਨ ਕਰਕੇ ਆਪਣਾ ਪਾਸਵਰਡ ਬਦਲਣਾ ਚਾਹੀਦਾ ਹੈ।\n\nਜੇ ਇਹ ਖਾਤਾ ਗ਼ਲਤੀ ਨਾਲ਼ ਬਣ ਗਿਆ ਹੈ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਸਕਦੇ ਹੋ।",
"login-throttled": "ਤੁਸੀਂ ਬਹੁਤ ਸਾਰੀਆਂ ਤਾਜ਼ਾ ਲਾਗਇਨ ਕੋਸ਼ਿਸ਼ਾਂ ਕੀਤੀਆਂ ਹਨ।\nਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ $1 ਉਡੀਕ ਕਰੋ ਜੀ।",
"login-abort-generic": "ਤੁਹਾਡਾ ਦਾਖ਼ਲਾ ਨਾਕਾਮ ਸੀ - ਅਧੂਰਾ ਛੱਡਿਆ",
+ "login-migrated-generic": "ਤੁਹਾਡੇ ਖਾਤੇ ਦੀ ਥਾਂ ਬਦਲ ਦਿੱਤੀ ਗਈ ਹੈ ਅਤੇ ਤੁਹਾਡਾ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਹੁਣ ਇਸ ਵਿਕੀ 'ਤੇ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
"loginlanguagelabel": "ਭਾਸ਼ਾ: $1",
"suspicious-userlogout": "ਤੁਹਾਡੀ ਵਿਦਾਇਗੀ ਦੀ ਬੇਨਤੀ ਨਕਾਰ ਦਿੱਤੀ ਗਈ ਕਿਉਂਕਿ ਲੱਗਦਾ ਹੈ ਕਿ ਇਹ ਕਿਸੇ ਟੁੱਟੇ ਹੋਏ ਬਰਾਊਜ਼ਰ ਜਾਂ ਕੈਸ਼ ਹੋਈ ਪ੍ਰਾਕਸੀ ਤੋਂ ਭੇਜੀ ਗਈ ਸੀ।",
"createacct-another-realname-tip": "ਅਸਲੀ ਨਾਂ ਚੋਣਵਾਂ ਹੈ।\nਜੇਕਰ ਤੁਸੀਂ ਇਹ ਦਿੱਤਾ ਹੈ ਤਾਂ ਤੁਹਾਡੇ ਕੰਮ ਵਾਸਤੇ ਗੁਣ ਦੇ ਤੌਰ ਉੱਤੇ ਵਰਤਿਆ ਜਾਵੇਗਾ।",
"pt-login": "ਲਾਗ ਇਨ",
"pt-login-button": "ਲਾਗ ਇਨ",
"pt-createaccount": "ਖਾਤਾ ਬਣਾਓ",
- "pt-userlogout": "ਲਾਗ ਆਉਟ",
+ "pt-userlogout": "ਬਾਹਰ ਆਉ",
"php-mail-error-unknown": "PHP ਦੇ ਮੇਲ() ਕਰਜ ਵਿੱਚ ਅਣਜਾਣ ਦੋਸ਼",
"user-mail-no-addy": "ਬਿਨਾਂ ਈ-ਮੇਲ ਪਤਾ ਦਿੱਤੇ ਈ-ਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ।",
"user-mail-no-body": "ਖ਼ਾਲੀ ਜਾਂ ਬਹੁਤੀ ਛੋਟੀ ਸਮੱਗਰੀ ਨਾਲ਼ ਈਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਗਈ",
- "changepassword": "ਪਾਸਵਰਡ ਬਦਲੋ",
+ "changepassword": "ਪਛਾਣ-ਸ਼ਬਦ ਬਦਲੋ",
"resetpass_announce": "ਲਾਗਇਨ ਪੂਰਾ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਨਵਾਂ ਪਾਸਵਰਡ ਬਣਾਉਣਾ ਪਵੇਗਾ।",
- "resetpass_header": "ਅਕਾਊਂਟ ਪਾਸਵਰਡ ਬਦਲੋ",
- "oldpassword": "ਪੁਰਾਣਾ ਪਾਸਵਰਡ:",
+ "resetpass_header": "ਖਾਤੇ ਦਾ ਪਛਾਣ-ਸ਼ਬਦ ਬਦਲੋ",
+ "oldpassword": "ਪੁਰਾਣਾ ਪਛਾਣ-ਸ਼ਬਦ:",
"newpassword": "ਨਵਾਂ ਪਾਸਵਰਡ:",
"retypenew": "ਨਵਾਂ ਪਾਸਵਰਡ ਮੁੜ-ਲਿਖੋ:",
"resetpass_submit": "ਪਾਸਵਰਡ ਸੈੱਟ ਕਰੋ ਅਤੇ ਲਾਗਇਨ ਕਰੋ",
"changepassword-success": "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਠੀਕ ਤਰ੍ਹਾਂ ਬਦਲਿਆ ਜਾ ਚੁੱਕਾ ਹੈ!",
+ "changepassword-throttled": "ਤੁਸੀਂ ਦਾਖ਼ਲ ਹੋਣ ਦੀਆਂ ਬਹੁਤ ਸਾਰੀਆਂ ਤਾਜ਼ਾ ਕੋਸ਼ਿਸ਼ਾਂ ਕੀਤੀਆਂ ਹਨ।\nਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ $1 ਉਡੀਕ ਕਰੋ ਜੀ।",
"resetpass_forbidden": "ਪਾਸਵਰਡ ਬਦਲਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ",
"resetpass-no-info": "ਇਸ ਸਫ਼ੇ ਨੂੰ ਸਿੱਧੇ ਹੀ ਵੇਖਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨਾ ਪਵੇਗਾ।",
- "resetpass-submit-loggedin": "ਪਾਸਵਰਡ ਬਦਲੋ",
+ "resetpass-submit-loggedin": "ਪਛਾਣ-ਸ਼ਬਦ ਬਦਲੋ",
"resetpass-submit-cancel": "ਰੱਦ ਕਰੋ",
"resetpass-wrong-oldpass": "ਗ਼ਲਤ ਆਰਜ਼ੀ ਜਾਂ ਚਾਲੂ ਪਾਸਵਰਡ।\nਸ਼ਾਇਦ ਤੁਸੀਂ ਕਾਮਯਾਬੀ ਨਾਲ਼ ਆਪਣਾ ਪਾਸਵਰਡ ਬਦਲ ਚੁੱਕੇ ਹੋ ਜਾਂ ਆਰਜ਼ੀ ਪਾਸਵਰਡ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਸੀ।",
+ "resetpass-recycled": "ਆਪਣਾ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਮੌਜੂਦਾ ਪਛਾਣ-ਸ਼ਬਦ ਤੋਂ ਵੱਖਰਾ ਬਣਾਉ ਜੀ।",
+ "resetpass-temp-emailed": "ਤੁਸੀਂ ਈਮੇਲ ਕੀਤੇ ਇੱਕ ਆਰਜ਼ੀ ਕੋਡ ਨਾਲ਼ ਦਾਖ਼ਲ ਹੋਏ।\nਦਾਖ਼ਲਾ ਕਾਰਵਾਈ ਮੁਕਾਉਣ ਵਾਸਤੇ ਤੁਹਾਨੂੰ ਇੱਥੇ ਇੱਕ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਬਣਾਉਣਾ ਪਵੇਗਾ:",
"resetpass-temp-password": "ਆਰਜ਼ੀ ਪਾਸਵਰਡ:",
"resetpass-abort-generic": "ਇੱਕ ਐਕਸਟੈਂਸ਼ਨ ਵੱਲੋਂ ਪਾਸਵਰਡ ਦੀ ਤਬਦੀਲੀ ਰੱਦ ਕੀਤੀ ਗਈ",
+ "resetpass-expired": "ਤੁਹਾਡੇ ਪਛਾਣ-ਸ਼ਬਦ ਦੀ ਮਿਆਦ ਮੁੱਕ ਗਈ ਹੈ। ਦਾਖ਼ਲ ਹੋਣ ਲਈ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਬਣਾਉ।",
+ "resetpass-expired-soft": "ਤੁਹਾਡੇ ਪਛਾਣ-ਸ਼ਬਦ ਦੀ ਮਿਆਦ ਮੁੱਕ ਗਈ ਹੈ ਅਤੇ ਨਵਾਂ ਬਣਾਉਣਾ ਪਵੇਗਾ। ਕੋਈ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਚੁਣੋ ਜੀ ਜਾਂ ਬਾਅਦ 'ਚ ਬਣਾਉਣ ਵਾਸਤੇ \"{{int:resetpass-submit-cancel}}\" ਦੱਬੋ।",
+ "resetpass-validity-soft": "ਤੁਹਾਡਾ ਪਛਾਣ-ਸ਼ਬਦ ਸਹੀ ਨਹੀਂ ਹੈ: $1\n\nਮਿਹਰਬਾਨੀ ਕਰਕੇ ਕੋਈ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਚੁਣੋ ਜਾਂ ਬਾਅਦ 'ਚ ਬਣਾਉਣ ਵਾਸਤੇ \"{{int:resetpass-submit-cancel}}\" ਦੱਬੋ।",
"passwordreset": "ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਕਰੋ",
"passwordreset-text-one": "ਪਾਸਵਰਡ ਦੁਬਾਰਾ ਬਣਾਉਣ ਲਈ ਇਹ ਫ਼ਾਰਮ ਭਰੋ।",
"passwordreset-text-many": "{{PLURAL:$1|ਈ-ਮੇਲ ਜ਼ਰੀਏ ਆਪਣਾ ਆਰਜ਼ੀ ਪਾਸਵਰਡ ਹਾਸਲ ਕਰਨ ਲਈ ਕੋਈ ਇੱਕ ਥਾਂ ਭਰੋ।}}",
"passwordreset-legend": "ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਕਰੋ",
"passwordreset-disabled": "ਇਸ ਵਿਕੀ ਤੇ ਪਾਸਵਰਡ ਰੀਸੈੱਟ ਬੰਦ ਕੀਤੇ ਗਏ ਹਨ।",
"passwordreset-emaildisabled": "ਇਹ ਵਿਕਿ ਉੱਤੇ ਈਮੇਲ ਫੀਚਰ ਬੰਦ ਕੀਤਾ ਹੋਇਆ ਹੈ।",
- "passwordreset-username": "ਯੂਜ਼ਰ-ਨਾਂ:",
+ "passwordreset-username": "ਵਰਤੋਂਕਾਰ ਨਾਂ:",
"passwordreset-domain": "ਡੋਮੇਨ:",
"passwordreset-capture": "ਨਤੀਜੇ ਵਜੋਂ ਬਣਦੀ ਈਮੇਲ ਵੇਖੋ?",
"passwordreset-capture-help": "ਜੇਕਰ ਤੁਸੀਂ ਇਹ ਬਕਸਾ ਸਹੀ ਕਰਦੇ ਹੋ ਤਾਂ ਇਹ ਈਮੇਲ (ਅਸਥਾਈ ਪਾਸਵਰਡ ਸਮੇਤ) ਤੁਹਾਨੂੰ ਵਿਖਾਈ ਜਾਵੇਗੀ ਅਤੇ ਵਰਤੋਂਕਾਰ ਨੂੰ ਵੀ ਭੇਜੀ ਜਾਵੇਗੀ।",
"passwordreset-email": "ਈਮੇਲ ਐਡਰੈੱਸ:",
"passwordreset-emailtitle": "{{SITENAME}} ਤੇ ਖਾਤੇ ਦੀ ਜਾਣਕਾਰੀ",
"passwordreset-emailtext-ip": "ਕਿਸੇ ਨੇ (ਸ਼ਾਇਦ ਤੁਸੀਂ, IP ਪਤਾ $1 ਤੋਂ) {{SITENAME}}\n($4) ਲਈ ਖਾਤਾ ਤਫ਼ਸੀਲ ਯਾਦ-ਦਹਾਨੀ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਇਹ {{PLURAL:\n$3|ਖਾਤਾ ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ਼ ਜੁੜਿਆ ਹੈ|ਖਾਤੇ ਇਸ ਈ-ਮੇਲ ਪਤੇ ਨਾਲ਼ ਜੁੜੇ ਹਨ}}:\n$2\n\nਇਹ ਆਰਜ਼ੀ ਪਾਸਵਰਡ\n{{PLURAL:$5|ਇੱਕ ਦਿਨ|$5 ਦਿਨਾਂ}} ਵਿਚ ਖ਼ਤਮ ਹੋ {{PLURAL:$3|ਜਾਵੇਗਾ|ਜਾਣਗੇ}}।\nਤੁਹਾਨੂੰ ਹੁਣੇ ਲਾਗਇਨ ਕਰਕੇ ਨਵਾਂ ਪਾਸਵਰਡ ਬਣਾਉਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਕਿਸੇ ਹੋਰ ਨੇ ਇਹ ਬੇਨਤੀ ਕੀਤੀ ਸੀ ਜਾਂ ਜੇ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਯਾਦ ਹੈ ਅਤੇ ਤੁਸੀਂ ਇਸਨੂੰ ਬਦਲਣਾ ਨਹੀਂ ਚਾਹੁੰਦੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਕੇ ਆਪਣਾ ਪੁਰਾਣਾ ਪਾਸਵਰਡ ਵਰਤਣਾ ਜਾਰੀ ਰੱਖ ਸਕਦੇ ਹੋ।",
+ "passwordreset-emailtext-user": "{{SITENAME}} 'ਤੇ User $1 ਨੇ ਤੁਹਾਡੇ {{SITENAME}} ($4) ਉਤਲੇ ਪਛਾਣ-ਸ਼ਬਦ ਨੂੰ ਮੁੜ-ਬਣਾਉਣ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਇਸ ਈਮੇਲ ਪਤੇ ਨਾਲ਼ ਹੇਠ ਲਿਖੇ {{PLURAL:$3|ਖਾਤੇ|ਖਾਤਿਆਂ}} ਦਾ ਵਾਸਤਾ ਹੈ:\n\n$2\n\n{{PLURAL:$3|ਇਸ ਆਰਜ਼ੀ ਪਛਾਣ-ਸ਼ਬਦ|ਇਹਨਾਂ ਆਰਜ਼ੀ ਪਛਾਣ-ਸ਼ਬਦਾਂ}} ਦੀ ਮਿਆਦ {{PLURAL:$5|ਇੱਕ ਦਿਨ|$5 ਦਿਨਾਂ}} 'ਚ ਮੁੱਕ ਜਾਵੇਗੀ।\nਤੁਹਾਨੂੰ ਹੁਣੇ ਦਾਖ਼ਲ ਹੋ ਕੇ ਕੋਈ ਨਵਾਂ ਪਛਾਣ-ਸ਼ਬਦ ਬਣਾ ਲੈਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇਕਰ ਕਿਸੇ ਹੋਰ ਨੇ ਇਹ ਬੇਨਤੀ ਕੀਤੀ ਹੈ ਜਾਂ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਹਿਲਾ ਪਛਾਣ-ਸ਼ਬਦ ਯਾਦ ਆ ਗਿਆ ਹੈ ਅਤੇ ਹੁਣ ਤੁਸੀਂ ਉਹਨੂੰ ਬਦਲ਼ਨਾ ਨਹੀਂ ਲੋਚਦੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰ ਕੇ ਆਪਣਾ ਪੁਰਾਣਾ ਪਛਾਣ-ਸ਼ਬਦ ਵਰਤਦੇ ਰਹਿ ਸਕਦੇ ਹੋ।",
"passwordreset-emailelement": "ਯੂਜ਼ਰ-ਨਾਂ: $1\nਆਰਜ਼ੀ ਪਾਸਵਰਡ: $2",
"passwordreset-emailsent": "ਇੱਕ ਪਾਸਵਰਡ ਮੁੜ-ਸੈੱਟ ਈ-ਮੇਲ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।",
"passwordreset-emailsent-capture": "ਇੱਕ ਯਾਦ-ਦਹਾਨੀ ਈ-ਮੇਲ, ਜਿਹੜੀ ਕਿ ਹੇਠਾਂ ਦਿੱਸ ਰਹੀ ਹੈ, ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।",
+ "passwordreset-emailerror-capture": "ਪਛਾਣ-ਸ਼ਬਦ ਮੁੜ ਬਣਾਉਣ ਵਾਸਤੇ ਈਮੇਲ ਤਿਆਰ ਹੋ ਗਈ ਸੀ, ਜੋ ਹੇਠਾਂ ਵਿਖਾਈ ਗਈ ਹੈ, ਪਰ ਇਹਨੂੰ {{GENDER:$2|ਵਰਤੋਂਕਾਰ}} ਵੱਲ ਨਹੀਂ ਘੱਲਿਆ ਜਾ ਸਕਿਆ: $1",
"changeemail": "ਈ-ਮੇਲ ਸਿਰਨਾਵਾਂ ਬਦਲੋ",
- "changeemail-header": "ਖਾਤੇ ਵਾਲਾ ਈ-ਮੇਲ ਸਿਰਨਾਵਾਂ ਬਦਲੋ",
"changeemail-text": "ਆਪਣਾ ਈ-ਮੇਲ ਪਤਾ ਬਦਲਣ ਲਈ ਇਹ ਫ਼ਾਰਮ ਮੁਕੰਮਲ ਕਰੋ। ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਤਸਦੀਕ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖ਼ਲ ਕਰਨਾ ਪਵੇਗਾ।",
"changeemail-no-info": "ਇਸ ਸਫ਼ੇ ਨੂੰ ਸਿੱਧੇ ਹੀ ਵੇਖਣ ਲਈ ਤੁਹਾਨੂੰ ਲਾਗਇਨ ਕਰਨਾ ਪਵੇਗਾ।",
"changeemail-oldemail": "ਮੌਜੂਦਾ ਈਮੇਲ ਸਿਰਨਾਵਾਂ:",
@@ -505,10 +522,14 @@
"changeemail-none": "(ਕੋਈ ਨਹੀਂ)",
"changeemail-password": "ਤੁਹਾਡਾ {{SITENAME}} ਪਾਸਵਰਡ:",
"changeemail-submit": "ਈ-ਮੇਲ ਬਦਲੋ",
- "changeemail-cancel": "ਰੱਦ ਕਰੋ",
+ "changeemail-throttled": "ਤੁਸੀਂ ਦਾਖ਼ਲ ਹੋਣ ਦੀਆਂ ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਕੀਤੀਆਂ ਹਨ।\nਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ $1 ਉਡੀਕ ਕਰੋ ਜੀ।",
"resettokens": "ਟੋਕਨ ਮੁੜ-ਸੈੱਟ ਕਰੋ",
+ "resettokens-text": "ਤੁਸੀਂ ਆਪਣੀਆਂ ਨਿਸ਼ਾਨੀਆਂ, ਜੋ ਤੁਹਾਡੇ ਖਾਤੇ ਨਾਲ਼ ਜੁੜੇ ਖ਼ਾਸ ਨਿੱਜੀ ਅੰਕੜਿਆਂ ਤੱਕ ਪੁੱਜਣ ਵਾਸਤੇ ਇਜਾਜ਼ਤ ਦਿੰਦੀਆਂ ਹਨ, ਨੂੰ ਇੱਥੇ ਮੁੜ-ਬਣਾ ਸਕਦੇ ਹੋ।\n\nਤੁਹਾਨੂੰ ਇਹ ਤਾਂ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ ਜੇਕਰ ਤੁਸੀਂ ਇਹਨਾਂ ਨੂੰ ਰੱਬ-ਸਬੱਬੀ ਕਿਸੇ ਨਾਲ਼ ਸਾਂਝਾ ਕਰ ਦਿੱਤਾ ਜਾਂ ਤੁਹਾਡਾ ਖਾਤਾ ਖ਼ਤਰੇ ਵਿੱਚ ਆ ਗਿਆ ਹੈ।",
+ "resettokens-no-tokens": "ਨਵੀਆਂ ਬਣਾਉਣ ਵਾਸਤੇ ਕੋਈ ਨਿਸ਼ਾਨੀਆਂ ਨਹੀਂ ਹਨ।",
+ "resettokens-legend": "ਨਿਸ਼ਾਨੀਆਂ ਮੁੜ ਬਣਾਉ",
"resettokens-tokens": "ਟੋਕਨ:",
"resettokens-token-label": "$1 (ਚਾਲੂ ਮੁੱਲ: $2)",
+ "resettokens-done": "ਨਿਸ਼ਾਨੀਆਂ ਮੁੜ ਬਣਾਈਆਂ ਗਈਆਂ।",
"resettokens-resetbutton": "ਚੁਣੇ ਹੋਏ ਟੋਕਨ ਮੁੜ ਸੈੱਟ ਕਰੋ",
"bold_sample": "ਗੂੜੀ ਲਿਖਤ",
"bold_tip": "ਗੂੜੇ ਅੱਖਰ",
@@ -530,11 +551,11 @@
"subject": "ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ:",
"minoredit": "ਇਹ ਇੱਕ ਛੋਟੀ ਸੋਧ ਹੈ",
"watchthis": "ਇਸ ਸਫ਼ੇ ’ਤੇ ਨਜ਼ਰ ਰੱਖੋ",
- "savearticle": "ਸਫ਼ਾ ਸੰਭਾਲੋ",
+ "savearticle": "ਸਫ਼ਾ ਸਾਂਭੋ",
"preview": "ਝਲਕ",
"showpreview": "ਝਲਕ ਵਿਖਾਓ",
- "showdiff": "ਤਬਦੀਲੀਆਂ ਵਖਾਓ",
- "anoneditwarning": "'''ਖ਼ਬਰਦਾਰ:''' ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੋਇਆ। ਤੁਹਾਡਾ IP ਪਤਾ ਇਸ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਵਿੱਚ ਰਿਕਾਰਡ ਕੀਤਾ ਜਾਵੇਗਾ।",
+ "showdiff": "ਤਬਦੀਲੀਆਂ ਵਿਖਾਉ",
+ "anoneditwarning": "'''ਖ਼ਬਰਦਾਰ:''' ਤੁਸੀਂ ਦਾਖ਼ਲ ਨਹੀਂ ਹੋ। ਕੋਈ ਵੀ ਸੋਧ ਕਰਨ 'ਤੇ ਤੁਹਾਡਾ ਆਈ.ਪੀ. ਪਤਾ ਲੋਕਾਂ ਨੂੰ ਵਿਖਾਈ ਦੇਵੇਗਾ। ਜੇਕਰ ਤੁਸੀਂ <strong>[$1 ਦਾਖ਼ਲ ਹੁੰਦੇ ਹੋ]</strong> ਜਾਂ <strong>[$2 ਖਾਤਾ ਬਣਾਉਂਦੇ ਹੋ]</strong> ਤਾਂ ਤੁਹਾਡੀਆਂ ਸੋਧਾਂ ਦਾ ਸਿਹਰਾ, ਹੋਰ ਫ਼ਾਇਦਿਆਂ ਸਮੇਤ, ਤੁਹਾਡੇ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਸਿਰ ਦਿੱਤਾ ਜਾਵੇਗਾ।",
"anonpreviewwarning": "''ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੋਇਆ। ਤਬਦੀਲੀ ਸਾਂਭਣ ਨਾਲ਼ ਤੁਹਾਡਾ IP ਪਤਾ ਸਫ਼ੇ ਦੇ ਸੋਧ ਅਤੀਤ ਵਿਚ ਰਿਕਾਰਡ ਹੋ ਜਾਵੇਗਾ।''",
"missingsummary": "'''ਯਾਦ-ਦਹਾਨੀ:''' ਤੁਸੀਂ ਸੋਧ ਸਾਰ ਮੁਹੱਈਆ ਨਹੀਂ ਕਰਵਾਇਆ। ਜੇ ਤੁਸੀਂ \"{{int:savearticle}}\" ਤੇ ਦੁਬਾਰਾ ਕਲਿੱਕ ਕੀਤਾ ਤਾਂ ਤੁਹਾਡਾ ਸਫ਼ਾ ਇਸਦੇ ਬਿਨਾਂ ਹੀ ਸਾਂਭਿਆ ਜਾਵੇਗਾ।",
"missingcommenttext": "ਹੇਠਾਂ ਇੱਕ ਟਿੱਪਣੀ ਦਿਓ।",
@@ -585,7 +606,7 @@
"semiprotectedpagewarning": "'''ਨੋਟ:''' ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਹੈ ਤਾਂ ਕਿ ਸਿਰਫ਼ ਰਜਿਸਟਰ ਹੋਏ ਮੈਂਬਰ ਹੀ ਇਸ ਨੂੰ ਸੋਧ ਸਕਣ।\nਚਿੱਠੇ ਵਿਚਲਾ ਨਵਾਂ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
"titleprotectedwarning": "'''ਖ਼ਬਰਦਾਰ: ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਹੈ ਸੋ ਇਸਨੂੰ ਬਣਾਉਣ ਲਈ [[Special:ListGroupRights|ਖ਼ਾਸ ਹੱਕਾਂ]] ਦੀ ਲੋੜ ਹੈ।'''\nਚਿੱਠੇ ਦਾ ਨਵਾਂ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
"templatesused": "ਇਸ ਪੰਨੇ ’ਤੇ {{PLURAL:$1|ਵਰਤਿਆ ਸਾਂਚਾ|ਵਰਤੇ ਸਾਂਚੇ}}:",
- "templatesusedpreview": "{{PLURAL:$1|ਟੈਪਲੇਟ|ਟੈਪਲੇਟ}} ਇਹ ਝਲਕ 'ਚ ਵਰਤੇ ਜਾਂਦੇ ਹਨ:",
+ "templatesusedpreview": "ਏਸ ਝਾਤ 'ਚ {{PLURAL:$1|ਵਰਤਿਆ ਗਿਆ ਫਰਮਾ|ਵਰਤੇ ਗਏ ਫਰਮੇ}}:",
"templatesusedsection": "ਇਹ ਭਾਗ ਵਿੱਚ {{PLURAL:$1|ਸਾਂਚਾ|ਸਾਂਚੇ}} ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ:",
"template-protected": "(ਸੁਰੱਖਿਅਤ)",
"template-semiprotected": "(ਨੀਮ-ਸੁਰੱਖਿਅਤ)",
@@ -608,7 +629,7 @@
"postedit-confirmation-restored": "ਸਫ਼ੇ ਨੂੰ ਮੁੜ-ਸਟੋਰ ਕੀਤਾ ਗਿਆ।",
"postedit-confirmation-saved": "ਤੁਹਾਡੀ ਸੋਧ ਸਾਂਭੀ ਗਈ ਹੈ।",
"edit-already-exists": "ਨਵਾਂ ਸਫ਼ਾ ਨਹੀਂ ਬਣਾਇਆ ਜਾ ਸਕਿਆ।\nਇਹ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।",
- "defaultmessagetext": "ਮੂਲ ਸੰਦੇਸ਼ ਲਿਖਤ",
+ "defaultmessagetext": "ਮੂਲ ਸੁਨੇਹਾ ਲਿਖਤ",
"invalid-content-data": "ਗ਼ਲਤ ਸਮੱਗਰੀ",
"content-not-allowed-here": "\"$1\" ਸਮੱਗਰੀ ਨੂੰ [[$2]] ਉੱਤੇ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ",
"editwarning-warning": "ਇਹ ਸਫ਼ਾ ਛੱਡਣ ਕਰਕੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਕੀਤੀਆਂ ਸੋਧਾਂ ਗੁੰਮ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ ਦਾਖ਼ਲਾ ਲਿਆ ਹੋਇਆ ਹੈ ਤਾਂ ਤੁਸੀਂ ਇਸ ਚਿਤਾਵਨੀ ਨੂੰ ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਦੇ \"ਸੰਪਾਦਨ\" ਭਾਗ ਵਿਚ ਜਾ ਕੇ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ।",
@@ -641,7 +662,7 @@
"last": "ਪਿਛਲਾ",
"page_first": "ਪਹਿਲਾਂ",
"page_last": "ਆਖ਼ਰੀ",
- "histlegend": "ਫ਼ਰਕ ਵੇਖੋ:\nਮੁਕਾਬਲਾ ਕਰਨ ਲਈ ਰੀਵਿਜਨਾਂ ਦੇ ਰੇਡੀਓ ਬਟਨਾਂ ਵਿੱਚ ਨਿਸ਼ਾਨ ਲਾਓ ਅਤੇ \"ਜਾਓ\" ਜਾਂ ਸਭ ਤੋਂ ਥੱਲੇ ਵਾਲੇ ਬਟਨ ਤੇ ਕਲਿੱਕ ਕਰੋ। <br />\nਲੈਜਅੰਡ:\n'''({{int:cur}})''' = ਨਵੇਂ ਰੀਵਿਜਨ ਨਾਲੋਂ ਫ਼ਰਕ, '''({{int:last}})''' = ਪਿਛਲੇ ਰੀਵਿਜਨ ਨਾਲੋਂ ਫ਼ਰਕ, '''({{int:minoreditletter}})''' = ਛੋਟੀ ਤਬਦੀਲੀ।",
+ "histlegend": "ਫ਼ਰਕ ਵੇਖੋ:\nਮੁਕਾਬਲਾ ਕਰਨ ਲਈ ਦੁਹਰਾਈਆਂ ਦੇ ਰੇਡੀਓ ਬਟਨਾਂ ਵਿੱਚ ਨਿਸ਼ਾਨ ਲਾਓ ਅਤੇ \"ਜਾਓ\" ਜਾਂ ਸਭ ਤੋਂ ਥੱਲੇ ਵਾਲੇ ਬਟਨ ਨੂੰ ਨੱਪੋ। <br />\nਟੀਕਾ:\n'''({{int:cur}})''' = ਨਵੀਂ ਦੁਹਰਾਈ ਨਾਲ਼ੋਂ ਫ਼ਰਕ, '''({{int:last}})''' = ਪਿਛਲੀ ਦੁਹਰਾਈ ਨਾਲ਼ੋਂ ਫ਼ਰਕ, '''({{int:minoreditletter}})''' = ਛੋਟੀ ਤਬਦੀਲੀ।",
"history-fieldset-title": "ਬਰਾਊਜ਼ਰ ਅਤੀਤ",
"history-show-deleted": "ਸਿਰਫ਼ ਮਿਟਾਏ ਗਏ",
"histfirst": "ਸਭ ਤੋਂ ਪੁਰਾਣੇ",
@@ -691,6 +712,7 @@
"pagehist": "ਸਫ਼ਾ ਅਤੀਤ",
"deletedhist": "ਹਟਾਇਆ ਗਿਆ ਅਤੀਤ",
"revdelete-hide-current": "ਤਾਰੀਖ $2, $1 ਦੀ ਚੀਜ਼ ਲੁਕਾਉਣ ਵਿਚ ਗ਼ਲਤੀ: ਇਹ ਮੌਜੂਦਾ ਦੁਹਰਾਈ ਹੈ।\nਇਹ ਲੁਕਾਈ ਨਹੀਂ ਜਾ ਸਕਦੀ।",
+ "revdelete-modify-missing": "$1 ਸ਼ਨਾਖ਼ਤ ਵਾਲ਼ੀ ਚੀਜ਼ ਬਦਲਦਿਆਂ ਦੋਸ਼ ਆਇਆ: ਇਹ ਤੱਥ-ਅਧਾਰ 'ਚ ਹੈ ਹੀ ਨਹੀਂ!",
"revdelete-otherreason": "ਹੋਰ/ਵਾਧੂ ਕਾਰਨ:",
"revdelete-reasonotherlist": "ਹੋਰ ਕਾਰਨ",
"revdelete-edit-reasonlist": "ਮਿਟਾਏ ਜਾਣ ਦੇ ਕਾਰਨ ਸੋਧੋ",
@@ -706,6 +728,7 @@
"mergehistory-empty": "ਕੋਈ ਰੀਵਿਜ਼ਨ ਰਲ਼ਾਈ ਨਹੀ ਜਾ ਸਕਦੀ।",
"mergehistory-success": "[[:$1]] {{PLURAL:|ਦੀ|ਦੀਆਂ}} $3 {{PLURAL:$3|ਰੀਵਿਜ਼ਨ|ਰੀਵਿਜ਼ਨਾਂ}} ਕਾਮਯਾਬੀ ਨਾਲ਼ [[:$2]] ਵਿਚ {{PLURAL:$3|ਰਲ਼ਾਈ|ਰਲ਼ਾਈਆਂ}}।",
"mergehistory-no-source": "ਸਰੋਤ ਸਫ਼ਾ $1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
+ "mergehistory-no-destination": "ਨੀਯਤ ਸਫ਼ਾ $1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
"mergehistory-invalid-source": "ਸਰੋਤ ਸਫ਼ਾ ਇੱਕ ਸਹੀ ਸਿਰਲੇਖ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
"mergehistory-invalid-destination": "ਮੰਜ਼ਿਲ ਸਫ਼ਾ ਇੱਕ ਸਹੀ ਸਿਰਲੇਖ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
"mergehistory-autocomment": "[[:$1]] ਨੂੰ [[:$2]] ਵਿੱਚ ਰਲ਼ਾਇਆ",
@@ -713,7 +736,6 @@
"mergehistory-same-destination": "ਸਰੋਤ ਸਫ਼ਾ ਅਤੇ ਮੰਜ਼ਿਲ ਸਫ਼ਾ ਇੱਕੋ ਜਿਹੇ ਨਹੀਂ ਹੋ ਸਕਦੇ",
"mergehistory-reason": "ਕਾਰਨ:",
"mergelog": "ਰਲ਼ਾਉਣ ਦਾ ਚਿੱਠਾ",
- "pagemerge-logentry": "[[$1]] ਨੂੰ [[$2]] ਵਿੱਚ ਰਲ਼ਾਇਆ ($3 ਤੱਕ ਦੀਆ ਰੀਵਿਜ਼ਨਾਂ)",
"revertmerge": "ਅਨ-ਮਰਜ",
"mergelogpagetext": "ਹੇਠਾਂ ਇੱਕ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਨੂੰ ਦੂਜੇ ਦੇ ਅਤੀਤ ਵਿਚ ਰਲ਼ਾਉਣ ਦੀ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਲਿਸਟ ਹੈ।",
"history-title": "\"$1\" ਦੇ ਰੀਵਿਜਨ ਦਾ ਅਤੀਤ",
@@ -722,7 +744,7 @@
"difference-multipage": "(ਦੋ ਸਫ਼ਿਆਂ ਵਿਚਕਾਰ ਫ਼ਰਕ)",
"lineno": "ਲਾਈਨ $1:",
"compareselectedversions": "ਚੁਣੇ ਵਰਜਨਾਂ ਦੀ ਤੁਲਨਾ",
- "showhideselectedversions": "ਚੁਣੇ ਰੀਵਿਜ਼ਨ ਵਖਾਓ/ਲੁਕਾਓ",
+ "showhideselectedversions": "ਚੁਣੀਆਂ ਸੁਧਾਈਆਂ ਦੀ ਦਿਸਣਯੋਗਤਾ ਬਦਲੋ",
"editundo": "ਰੱਦ ਕਰੋ",
"diff-empty": "(ਕੋਈ ਫ਼ਰਕ ਨਹੀਂ)",
"searchresults": "ਖੋਜ ਨਤੀਜੇ",
@@ -750,33 +772,35 @@
"search-result-category-size": "{{PLURAL:$1|1 ਮੈਂਬਰ|$1 ਮੈਂਬਰ}} ({{PLURAL:$2|1 ਉਪਸ਼੍ਰੇਣੀ|$2 ਉਪਸ਼੍ਰੇਣੀਆਂ}}, {{PLURAL:$3|1 ਫ਼ਾਈਲ|$3 ਫ਼ਾਈਲਾਂ}})",
"search-redirect": "($1 ਰੀਡਿਰੈਕਟ)",
"search-section": "(ਹਿੱਸਾ $1)",
+ "search-file-match": "(ਫ਼ਾਈਲ ਦੀ ਸਮੱਗਰੀ ਨਾਲ਼ ਰਲ਼ਦਾ-ਮਿਲ਼ਦਾ)",
"search-suggest": "ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਸੀ: $1",
"search-interwiki-caption": "ਸਾਥੀ ਪ੍ਰੋਜੈਕਟ",
- "search-interwiki-default": "$1 ਨਤੀਜੇ:",
+ "search-interwiki-default": "$1 ਤੋਂ ਨਤੀਜੇ:",
"search-interwiki-more": "(ਹੋਰ)",
"search-relatedarticle": "ਸਬੰਧਤ",
"searchrelated": "ਸਬੰਧਤ",
"searchall": "ਸਭ",
"showingresults": "ਹੇਠਾਂ #'''$2''' ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ {{PLURAL:\n$1|'''1''' ਨਤੀਜਾ|'''$1''' ਤੱਕ ਨਤੀਜੇ}} ਵਖਾਓ।",
- "showingresultsheader": "'''$4''' ਵਾਸਤੇ {{PLURAL:$5|'''$3''' ਵਿੱਚੋਂ '''$1''' ਨਤੀਜੇ|'''$3''' ਵਿੱਚੋਂ '''$1 - $2''' ਨਤੀਜੇ}}",
"search-nonefound": "ਤੁਹਾਡੀ ਖੋਜ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ ਮਿਲੇ।",
"powersearch-legend": "ਤਕਨੀਕੀ ਖੋਜ",
"powersearch-ns": "ਨੇਮ-ਸਪੇਸ ਵਿੱਚ ਖੋਜ:",
"powersearch-togglelabel": "ਜਾਂਚੋ:",
"powersearch-toggleall": "ਸਭ",
"powersearch-togglenone": "ਕੋਈ ਨਹੀਂ",
+ "powersearch-remember": "ਇਸ ਚੋਣ ਨੂੰ ਅੱਗੋਂ ਦੀਆਂ ਭਾਲ਼ਾਂ ਵਾਸਤੇ ਯਾਦ ਰੱਖੋ",
"search-external": "ਬਾਹਰੀ ਖੋਜ",
"search-error": "ਖੋਜ ਕਰਦੇ ਵਕਤ ਇੱਕ ਦੋਸ਼ ਮਿਲਿਆ:$1",
- "preferences": "ਪਸੰਦਾਂ",
- "mypreferences": "ਪਸੰਦਾਂ",
+ "preferences": "ਤਰਜੀਹਾਂ",
+ "mypreferences": "ਤਰਜੀਹਾਂ",
"prefs-edits": "ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:",
+ "prefsnologintext2": "ਆਪਣੀਆਂ ਤਰਜੀਹਾਂ ਬਦਲਣ ਵਾਸਤੇ ਦਾਖ਼ਲ ਹੋਵੋ।",
"prefs-skin": "ਸਕਿਨ",
"skin-preview": "ਝਲਕ",
"datedefault": "ਕੋਈ ਪਸੰਦ ਨਹੀਂ",
"prefs-labs": "ਲੈਬ ਫੀਚਰ",
"prefs-user-pages": "ਵਰਤੋਂਕਾਰ ਸਫ਼ੇ",
- "prefs-personal": "ਯੂਜ਼ਰ ਪਰੋਫਾਇਲ",
- "prefs-rc": "ਤਾਜ਼ਾ ਬਦਲਾਅ",
+ "prefs-personal": "ਵਰਤੋਂਕਾਰ ਪ੍ਰੋਫ਼ਾਈਲ",
+ "prefs-rc": "ਹਾਲੀਆ ਤਬਦੀਲੀਆਂ",
"prefs-watchlist": "ਨਿਗਰਾਨ-ਸੂਚੀ",
"prefs-watchlist-days": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਦਿਖਾਉਣ ਲਈ ਦਿਨ:",
"prefs-watchlist-days-max": "ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨ}}",
@@ -784,13 +808,13 @@
"prefs-watchlist-edits-max": "ਵੱਧ ਤੋਂ ਵੱਧ ਨੰਬਰ: ੧੦੦੦",
"prefs-watchlist-token": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਟੋਕਨ:",
"prefs-misc": "ਫੁਟਕਲ",
- "prefs-resetpass": "ਪਾਸਵਰਡ ਬਦਲੋ",
+ "prefs-resetpass": "ਪਛਾਣ-ਸ਼ਬਦ ਬਦਲੋ",
"prefs-changeemail": "ਈ-ਮੇਲ ਪਤਾ ਬਦਲੋ",
"prefs-setemail": "ਈ-ਮੇਲ ਪਤਾ ਸੈੱਟ ਕਰੋ",
"prefs-email": "ਈਮੇਲ ਚੋਣਾਂ",
"prefs-rendering": "ਦਿੱਖ",
"saveprefs": "ਸੰਭਾਲੋ",
- "restoreprefs": "ਸਭ ਮੂਲ ਸੈਟਿੰਗਾਂ ਮੋੜ ਲਿਆਓ",
+ "restoreprefs": "ਸਾਰੀਆਂ ਮੂਲ ਸੈਟਿੰਗਾਂ ਬਹਾਲ ਕਰੋ (ਸਾਰੇ ਹਿੱਸਿਆਂ ਵਿੱਚ)",
"prefs-editing": "ਸੋਧ ਜਾਰੀ",
"rows": "ਕਤਾਰਾਂ:",
"columns": "ਕਾਲਮ:",
@@ -800,7 +824,7 @@
"recentchangesdays-max": "ਵੱਧ ਤੋਂ ਵੱਧ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨ}}",
"recentchangescount": "ਮੂਲ ਤੌਰ 'ਤੇ ਵਿਖਾਈਆਂ ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:",
"prefs-help-recentchangescount": "ਇਸ ਵਿਚ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ, ਸਫ਼ਿਆਂ ਦੇ ਅਤੀਤ ਅਤੇ ਚਿੱਠੇ ਸ਼ਾਮਲ ਹਨ।",
- "savedprefs": "ਤੁਹਾਡੀਆਂ ਪਸੰਦਾਂ ਸਾਂਭੀਆਂ ਗਈਆਂ ਹੈ।",
+ "savedprefs": "ਤੁਹਾਡੀਆਂ ਤਰਜੀਹਾਂ ਸਾਂਭੀਆਂ ਗਈਆਂ ਹੈ।",
"timezonelegend": "ਸਮਾਂ ਜੋਨ:",
"localtime": "ਸਥਾਨਕ ਸਮਾਂ:",
"timezoneuseserverdefault": "ਵਿਕੀ ਮੂਲ ($1) ਵਰਤੋ",
@@ -827,8 +851,8 @@
"prefs-common-css-js": "ਸਾਰੀਆਂ ਸਕਿਨਾਂ ਲਈ ਸਾਂਝਾ CSS/ਜਾਵਾਸਕਰਿਪਟ:",
"prefs-emailconfirm-label": "ਈ-ਮੇਲ ਪੁਸ਼ਟੀ:",
"youremail": "ਈ-ਮੇਲ:",
- "username": "{{GENDER:$1|ਯੂਜ਼ਰਨਾਂ}}:",
- "prefs-memberingroups": "{{PLURAL:$1|ਗਰੁੱਪ|ਗਰੁੱਪਾਂ}} ਦਾ ਮੈਂਬਰ:",
+ "username": "{{GENDER:$1|ਵਰਤੋਂਕਾਰ ਦਾ ਨਾਂ}}:",
+ "prefs-memberingroups": "{{PLURAL:$1|ਢਾਣੀ|ਢਾਣੀਆਂ}} ਦਾ {{GENDER:$2|ਮੈਂਬਰ}}:",
"prefs-registration": "ਰਜਿਸਟਰੇਸ਼ਨ ਸਮਾਂ:",
"yourrealname": "ਅਸਲੀ ਨਾਂ:",
"yourlanguage": "ਭਾਸ਼ਾ:",
@@ -847,7 +871,7 @@
"prefs-help-email-others": "ਤੁਸੀਂ ਇਹ ਵੀ ਚੁਣ ਸਕਦੇ ਹੋ ਕਿ ਤੁਹਾਡੇ ਵਰਤੋਂਕਾਰ ਜਾਂ ਚਰਚਾ ਪੰਨੇ ਤੋਂ ਹੋਰ ਵਰਤੋਂਕਾਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜ ਸਕਣ?\nਜਦੋਂ ਹੋਰ ਵਰਤੋਂਕਾਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜਦੇ ਹਨ ਤਾਂ ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।",
"prefs-help-email-required": "ਈ-ਮੇਲ ਪਤਾ ਚਾਹੀਦਾ ਹੈ।",
"prefs-info": "ਮੁਢਲੀ ਜਾਣਕਾਰੀ",
- "prefs-i18n": "ਅੰਤਰਰਾਸ਼ਟਰੀਕਰਨ",
+ "prefs-i18n": "ਕੌਮਾਂਤਰੀਕਰਨ",
"prefs-signature": "ਦਸਤਖ਼ਤ",
"prefs-dateformat": "ਮਿਤੀ ਦਾ ਅੰਦਾਜ਼",
"prefs-timeoffset": "ਸਮੇਂ ਦਾ ਆਫ਼ਸੈੱਟ",
@@ -865,7 +889,7 @@
"prefs-help-prefershttps": "ਇਹ ਪਸੰਦ ਤੁਹਾਡੇ ਅਗਲੇ ਦਾਖ਼ਲੇ ਤੋਂ ਚਾਲੂ ਹੋ ਜਾਵੇਗੀ।",
"email-address-validity-valid": "ਈ-ਮੇਲ ਪਤਾ ਸਹੀ ਲਗਦਾ ਹੈ",
"email-address-validity-invalid": "ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦਾਖ਼ਲ ਕਰੋ",
- "userrights": "ਵਰਤੋਂਕਾਰ ਦੇ ਅਧਿਕਾਰਾਂ ਦਾ ਰੱਖ-ਰਖਾਓ",
+ "userrights": "ਵਰਤੋਂਕਾਰੀ ਹੱਕਾਂ ਦਾ ਪ੍ਰਬੰਧ",
"userrights-lookup-user": "ਵਰਤੋਂਕਾਰ ਸਮੂਹਾਂ ਦੀ ਦੇਖਭਾਲ",
"userrights-user-editname": "ਇੱਕ ਵਰਤੋਂਕਾਰ ਨਾਂ ਭਰੋ:",
"editusergroup": "ਵਰਤੋਂਕਾਰ ਸਮੂਹਾਂ ਦੀ ਸੋਧ",
@@ -877,10 +901,10 @@
"userrights-reason": "ਕਾਰਨ:",
"userrights-no-interwiki": "ਤੁਹਾਨੂੰ ਦੂਜੇ ਵਿਕੀਆਂ ਤੇ ਮੈਂਬਰਾਂ ਦੇ ਹੱਕਾਂ ਵਿਚ ਤਬਦੀਲੀ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
"userrights-nodatabase": "ਡੈਟਾਬੇਸ $1 ਮੌਜੂਦ ਨਹੀਂ ਜਾਂ ਮਕਾਮੀ ਨਹੀਂ ਹੈ।",
- "userrights-notallowed": "ਤੁਹਾਨੂੰ ਨੂੰ ਯੂਜ਼ਰ ਹੱਕ ਦੇਣ ਜਾਂ ਖੋਹਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
+ "userrights-notallowed": "ਤੁਹਾਡੇ ਕੋਲ਼ ਵਰਤੋਂਕਾਰ ਹੱਕ ਦੇਣ ਜਾਂ ਖੋਹਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
"userrights-changeable-col": "ਉਹ ਸਮੂਹ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਬਦਲ ਸਕਦੇ ਹੋ",
"userrights-unchangeable-col": "ਉਹ ਸਮੂਹ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਬਦਲ ਨਹੀਂ ਸਕਦੇ",
- "group": "ਸਮੂਹ:",
+ "group": "ਟੋਲੀ:",
"group-user": "ਵਰਤੋਂਕਾਰ",
"group-autoconfirmed": "ਖ਼ੁਦ-ਤਸਦੀਕਸ਼ੁਦਾ ਮੈਂਬਰ",
"group-bot": "ਬੌਟ",
@@ -890,6 +914,9 @@
"group-all": "(ਸਭ)",
"group-user-member": "{{GENDER:$1|ਵਰਤੋਂਕਾਰ}}",
"group-bot-member": "ਬੌਟ",
+ "group-sysop-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}}:ਬੌਟ",
@@ -904,10 +931,14 @@
"right-minoredit": "ਸੋਧਾਂ ਦੇ ਛੋਟਾ ਹੋਣ ਲਈ ਨਿਸ਼ਾਨ ਲਾਉਣਾ",
"right-move": "ਸਫ਼ੇ ਭੇਜਣਾ",
"right-move-subpages": "ਉਪ-ਸਫ਼ਿਆਂ ਸਮੇਤ ਸਫ਼ੇ ਭੇਜੋ",
+ "right-move-categorypages": "ਵਰਗਾਂ ਦੇ ਸਫ਼ੇ ਭੇਜੋ",
"right-movefile": "ਫਾਇਲਾਂ ਭੇਜਣੀਆਂ",
"right-upload": "ਫਾਇਲਾਂ ਅੱਪਲੋਡ",
+ "right-reupload": "ਮੌਜੂਦਾ ਫ਼ਾਈਲਾਂ ਉੱਤੇ ਲਿਖੋ",
+ "right-reupload-own": "ਆਪ ਚੜ੍ਹਾਈਆਂ ਮੌਜੂਦਾ ਫ਼ਾਈਲਾਂ ਉੱਤੇ ਲਿਖੋ",
"right-upload_by_url": "URL ਤੋਂ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ",
"right-autoconfirmed": "ਨੀਮ-ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧਣਾ",
+ "right-bot": "ਇੱਕ ਸਵੈ-ਚਾਲਤ ਅਮਲ ਵਜੋਂ ਗਿਣਿਆ ਜਾਣਾ",
"right-delete": "ਸਫ਼ੇ ਹਟਾਓ",
"right-bigdelete": "ਵੱਡੇ ਅਤੀਤ ਵਾਲੇ ਪੰਨੇ ਮਿਟਾਉਣੇ",
"right-browsearchive": "ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ",
@@ -924,7 +955,7 @@
"right-editmyuserjs": "ਆਪਣੀਆਂ ਵਰਤੋਂਕਾਰ ਜਾਵਾਸਕਰਿਪਟ ਫ਼ਾਈਲਾਂ ਸੋਧੋ",
"right-viewmywatchlist": "ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵੇਖੋ",
"right-editmywatchlist": "ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਸੋਧੋ। ਧਿਆਨ ਦਿਓ ਕਿ ਕੁਝ ਸਫ਼ੇ ਇਸ ਹੱਕ ਤੋਂ ਬਿਨਾਂ ਵੀ ਜੁੜਨਗੇ।",
- "right-editmyoptions": "ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਸੋਧੋ",
+ "right-editmyoptions": "ਆਪਣੀਆਂ ਤਰਜੀਹਾਂ ਸੋਧੋ",
"right-unwatchedpages": "ਨਜ਼ਰ ਨਾ ਰੱਖੇ ਜਾ ਰਹੇ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ ਵੇਖਣੀ",
"right-mergehistory": "ਸਫ਼ਿਆਂ ਦੇ ਅਤੀਤਾਂ ਨੂੰ ਰਲ਼ਾਉਣਾ",
"right-userrights": "ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਦੇ ਹੱਕ ਬਦਲਣੇ",
@@ -941,11 +972,13 @@
"action-createpage": "ਸਫ਼ੇ ਬਣਾਓ",
"action-createtalk": "ਚਰਚਾ ਸਫ਼ੇ ਬਣਾਉਣ",
"action-createaccount": "ਇਹ ਵਰਤੋਂਕਾਰ ਖਾਤਾ ਬਣਾਓ",
+ "action-history": "ਇਸ ਸਫ਼ੇ ਦਾ ਅਤੀਤ ਵੇਖੋ",
"action-minoredit": "ਇਹ ਸੋਧ ਨੂੰ ਛੋਟੀ ਤੌਰ ਉੱਤੇ ਮੰਨੋ",
"action-move": "ਇਹ ਸਫ਼ਾ ਭੇਜੋ",
"action-move-subpages": "ਇਹ ਸਫ਼ਾ ਤੇ ਇਸ ਦੇ ਅਧੀਨ-ਸਫ਼ਿਆਂ ਨੂੰ ਭੇਜੋ",
+ "action-move-categorypages": "ਵਰਗਾਂ ਦੇ ਸਫ਼ੇ ਭੇਜੋ",
"action-movefile": "ਇਹ ਫ਼ਾਈਲ ਭੇਜੋ",
- "action-upload": "ਇਹ ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਕਰੋ",
+ "action-upload": "ਇਹ ਫ਼ਾਈਲ ਚੜ੍ਹਾਉ",
"action-reupload": "ਇਹ ਮੌਜੂਦਾ ਫ਼ਾਈਲ ਉੱਤੇ ਲਿਖੋ",
"action-reupload-shared": "ਇਸ ਫ਼ਾਈਲ ਨੂੰ ਸਾਂਝੀ ਕੀਤੀ ਰਿਪੋਜ਼ਟਰੀ ਉੱਤੇ ਧਰੋ",
"action-upload_by_url": "ਇਹ ਫ਼ਾਈਲ ਨੂੰ ਇੱਕ URL ਤੋਂ ਅੱਪਲੋਡ ਕਰੋ",
@@ -982,7 +1015,8 @@
"recentchanges-label-minor": "ਇਹ ਇੱਕ ਛੋਟੀ ਸੋਧ ਹੈ",
"recentchanges-label-bot": "ਇਹ ਸੋਧ ਇੱਕ ਬੋਟ ਦੁਆਰਾ ਕੀਤੀ ਗਈ ਸੀ",
"recentchanges-label-unpatrolled": "ਇਹ ਫੇਰ-ਬਦਲ ਹਾਲੇ ਵੇਖਿਆ ਨਹੀਂ ਗਿਆ",
- "recentchanges-legend-newpage": "$1 - ਨਵਾਂ ਸਫ਼ਾ",
+ "recentchanges-legend-heading": "'''ਟੀਕਾ:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ਨਵੇਂ ਸਫ਼ਿਆਂ ਦੀ ਸੂਚੀ]] ਵੀ ਵੇਖੋ)",
"recentchanges-legend-plusminus": "(''±੧੨੩'')",
"rcnotefrom": "'''$2''' ਤੱਕ ('''$1''' ਤੱਕ ਦਿੱਸਦੇ) ਬਦਲਾਵ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
"rclistfrom": "$3 $2 ਤੋਂ ਸ਼ੁਰੂ ਕਰਕੇ ਨਵੀਆਂ ਸੋਧਾਂ ਵਖਾਓ",
@@ -1008,7 +1042,7 @@
"diff": "ਫ਼ਰਕ",
"hist": "ਅਤੀਤ",
"hide": "ਲੁਕਾਓ",
- "show": "ਵਖਾਓ",
+ "show": "ਵਿਖਾਉ",
"minoreditletter": "ਛੋ",
"newpageletter": "ਨ",
"boteditletter": "ਬੋਟ",
@@ -1025,14 +1059,17 @@
"recentchangeslinked-summary": "ਇਹ ਕਿਸੇ ਖ਼ਾਸ ਸਫ਼ੇ ਤੋਂ ਲਿੰਕ ਕੀਤੇ ਸਫ਼ਿਆਂ (ਜਾਂ ਕਿਸੇ ਖ਼ਾਸ ਸ਼੍ਰੇਣੀ ਦੇ ਮੈਂਬਰਾਂ) ਵਿੱਚ ਹੋਈਆਂ ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ ਦੀ ਲਿਸਟ ਹੈ। [[Special:Watchlist|ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ]] ਵਿੱਚ ਮੌਜੂਦ ਸਫ਼ੇ ਮੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਵਖਾਈ ਦੇਣਗੇ।",
"recentchangeslinked-page": "ਸਫ਼ੇ ਦਾ ਨਾਂ:",
"recentchangeslinked-to": "ਇਹਦੇ ਬਦਲੇ ਇਸ ਸਫ਼ੇ ਨਾਲ ਜੁੜੇ ਸਫ਼ਿਆਂ ਵਿੱਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਵਿਖਾਓ",
- "upload": "ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਕਰੋ",
- "uploadbtn": "ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਕਰੋ",
+ "upload": "ਫ਼ਾਈਲ ਚੜ੍ਹਾਉ",
+ "uploadbtn": "ਫ਼ਾਈਲ ਚੜ੍ਹਾਉ",
"reuploaddesc": "ਅੱਪਲੋਡ ਫਾਰਮ ਉੱਤੇ ਜਾਓ।",
"upload-tryagain": "ਬਦਲਿਆ ਹੋਇਆ ਫ਼ਾਈਲ ਵੇਰਵਾ ਪੇਸ਼ ਕਰੋ",
"uploadnologin": "ਦਾਖ਼ਲ ਨਹੀਂ ਹੋ",
"uploadnologintext": "ਫ਼ਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਤੁਹਾਨੂੰ $1 ਕਰਨਾ ਪਵੇਗਾ।",
"uploaderror": "ਅੱਪਲੋਡ ਗਲਤੀ",
"upload-recreate-warning": "'''ਖ਼ਬਰਦਾਰ: ਇਸ ਨਾਮ ਦੀ ਫ਼ਾਈਲ ਮਿਟਾਈ ਜਾਂ ਹੋਰ ਨਾਮ ਤੇ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।'''\nਮਿਟਾਉਣ ਅਤੇ ਭੇਜੇ ਜਾਣ ਦਾ ਚਿੱਠਾ ਸਹੂਲਤ ਲਈ ਇੱਥੇ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
+ "upload-permitted": "ਫ਼ਾਈਲਾਂ ਦੀਆਂ ਮਨਜ਼ੂਰ ਕਿਸਮਾਂ: $1।",
+ "upload-preferred": "ਫ਼ਾਈਲਾਂ ਦੀਆਂ ਤਰਜੀਹੀ ਕਿਸਮਾਂ :$1।",
+ "upload-prohibited": "ਫ਼ਾਈਲਾਂ ਦੀਆਂ ਨਾ-ਮਨਜ਼ੂਰ ਕਿਸਮਾਂ: $1।",
"uploadlogpage": "ਅਪਲੋਡਾਂ ਦਾ ਚਿੱਠਾ",
"filename": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ:",
"filedesc": "ਸਾਰ",
@@ -1052,9 +1089,11 @@
"filetype-banned": "ਇਸ ਕਿਸਮ ਦੀ ਫ਼ਾਈਲ ਦੀ ਮਨਾਹੀ ਹੈ।",
"verification-error": "ਇਹ ਫ਼ਾਈਲ ਫ਼ਾਈਲ-ਜਾਂਚ 'ਤੇ ਖ਼ਰੀ ਨਾ ਉੱਤਰ ਸਕੀ।",
"illegal-filename": "ਇਸ ਫ਼ਾਈਲ-ਨਾਂ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
+ "overwrite": "ਮੌਜੂਦਾ ਫ਼ਾਈਲ ਉੱਤੇ ਲਿਖਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
"unknown-error": "ਅਣਜਾਣ ਗ਼ਲਤੀ ਆਈ ਹੈ।",
"tmp-create-error": "ਆਰਜ਼ੀ ਫ਼ਾਈਲ ਬਣਾਈ ਨਾ ਜਾ ਸਕੀ।",
"tmp-write-error": "ਆਰਜ਼ੀ ਫ਼ਾਈਲ ਲਿਖਣ ਲਈ ਗ਼ਲਤੀ ਆਈ।",
+ "large-file": "ਫ਼ਾਈਲਾਂ $1 ਤੋਂ ਵੱਡੀਆਂ ਨਾ ਹੋਣ ਦੀ ਸਲਾਹ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ;\nਇਹ ਫ਼ਾਈਲ $2 ਦੀ ਹੈ।",
"windows-nonascii-filename": "ਵਿਕੀ ਖ਼ਾਸ ਚਿੰਨ੍ਹਾਂ ਵਾਲੇ ਫ਼ਾਈਲ ਨਾਮਾਂ ਨੂੰ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੰਦਾ।",
"fileexists": "ਇਹ ਫ਼ਾਈਲ ਨਾਂ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ। ਜੇ ਤੁਸੀਂ ਇਹਨੂੰ ਬਦਲਣ ਬਾਰੇ ਦ੍ਰਿੜ ਨਹੀਂ ਹੋ ਤਾਂ <strong>[[:$1]]</strong> ਵੇਖੋ ਜੀ। [[$1|thumb]]",
"fileexists-extension": "ਇਸ ਨਾਂ ਨਾਲ਼ ਰਲਦੀ ਫ਼ਾਈਲ ਮੌਜੂਦ ਹੈ: [[$2|thumb]]\n* ਅੱਪਲੋਡ ਕੀਤੀ ਜਾਂਦੀ ਫ਼ਾਈਲ ਦਾ ਨਾਂ: <strong>[[:$1]]</strong>\n* ਮੌਜੂਦ ਫ਼ਾਈਲ ਦਾ ਨਾਂ: <strong>[[:$2]]</strong>\nਕੋਈ ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ।",
@@ -1065,6 +1104,7 @@
"uploaddisabled": "ਅੱਪਲੋਡ ਆਯੋਗ ਹੈ",
"copyuploaddisabled": "URL ਰਾਹੀਂ ਅੱਪਲੋਡ ਰੋਕੇ ਹੋਏ ਹਨ।",
"uploaddisabledtext": "ਫ਼ਾਈਲਾਂ ਦੇ ਅੱਪਲੋਡ ਰੋਕੇ ਹੋਏ ਹਨ।",
+ "uploadscriptednamespace": "ਇਸ ਐੱਸ.ਵੀ.ਜੀ. ਫ਼ਾਈਲ ਵਿੱਚ ਇੱਕ ਗ਼ੈਰ-ਕਨੂੰਨੀ ਨਾਂ-ਥਾਂ \"$1\" ਹੈ।",
"uploadvirus": "ਇਹ ਫਾਇਲ ਵਿੱਚ ਵਾਇਰਸ ਹੈ! ਵੇਰਵੇ ਲਈ ਵੇਖੋ: $1",
"upload-source": "ਸਰੋਤ ਫਾਇਲ",
"sourcefilename": "ਸੋਰਸ ਫਾਇਲ ਨਾਂ:",
@@ -1092,6 +1132,7 @@
"backend-fail-closetemp": "ਆਰਜ਼ੀ ਫ਼ਾਈਲ ਬੰਦ ਨਹੀਂ ਹੋਈ।",
"backend-fail-read": "\"$1\" ਫ਼ਾਈਲ ਪੜ੍ਹੀ ਨਾ ਜਾ ਸਕੀ।",
"backend-fail-create": "\"$1\" ਫ਼ਾਈਲ ਲਿਖੀ ਨਾ ਜਾ ਸਕੀ।",
+ "zip-wrong-format": "ਦੱਸੀ ਗਈ ਫ਼ਾਈਲ ਜ਼ਿੱਪ ਫ਼ਾਈਲ ਨਹੀਂ ਸੀ।",
"uploadstash-refresh": "ਫ਼ਾਈਲਾਂ ਦੀ ਲਿਸਟ ਨੂੰ ਤਾਜ਼ਾ ਕਰੋ",
"img-auth-accessdenied": "ਪਹੁੰਚ ਨਕਾਰੀ ਗਈ",
"img-auth-nofile": "ਫ਼ਾਈਲ \"$1\" ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
@@ -1101,6 +1142,7 @@
"license": "ਲਸੰਸ:",
"license-header": "ਲਸੰਸ",
"nolicense": "ਕੁਝ ਵੀ ਚੁਣਿਆ",
+ "licenses-edit": "ਲਸੰਸ ਦੀਆਂ ਚੋਣਾਂ ਸੋਧੋ",
"license-nopreview": "(ਝਲਕ ਉਪਲੱਬਧ ਨਹੀਂ)",
"upload_source_file": " (ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਉੱਤੇ ਇੱਕ ਫਾਇਲ)",
"listfiles-delete": "ਹਟਾਓ",
@@ -1114,6 +1156,7 @@
"listfiles_size": "ਆਕਾਰ",
"listfiles_description": "ਵੇਰਵਾ",
"listfiles_count": "ਵਰਜਨ",
+ "listfiles-show-all": "ਤਸਵੀਰਾਂ ਦੇ ਪੁਰਾਣੇ ਰੂਪ ਸ਼ਾਮਲ ਕਰੋ",
"listfiles-latestversion": "ਮੌਜੂਦਾ ਵਰਜਨ",
"listfiles-latestversion-yes": "ਹਾਂ",
"listfiles-latestversion-no": "ਨਹੀਂ",
@@ -1145,6 +1188,8 @@
"filepage-nofile-link": "ਇਸ ਨਾਮ ਦੀ ਕੋਈ ਫ਼ਾਈਲ ਮੌਜੂਦ ਨਹੀਂ ਹੈ ਪਰ ਤੁਸੀਂ [$1 ਇਸਨੂੰ ਅੱਪਲੋਡ ਕਰ] ਸਕਦੇ ਹੋ।",
"uploadnewversion-linktext": "ਇਸ ਫਾਇਲ ਦਾ ਇੱਕ ਨਵਾਂ ਵਰਜਨ ਅੱਪਲੋਡ ਕਰੋ",
"shared-repo-from": "$1 ਤੋਂ",
+ "shared-repo": "ਕੋਈ ਸਾਂਝਾ ਕੀਤਾ ਭੰਡਾਰ",
+ "upload-disallowed-here": "ਤੁਸੀਂ ਇਸ ਫ਼ਾਈਲ ਉੱਤੇ ਨਹੀਂ ਨਹੀਂ ਲਿਖ ਸਕਦੇ।",
"filerevert": "$1 ਰੀਵਰਟ",
"filerevert-legend": "ਫਾਇਲ ਰੀਵਰਟ",
"filerevert-comment": "ਕਾਰਨ:",
@@ -1168,6 +1213,7 @@
"download": "ਡਾਊਨਲੋਡ",
"unwatchedpages": "ਨਜ਼ਰ ਹੇਠ ਨਾ ਰੱਖੇ ਗਏ ਸਫ਼ੇ",
"listredirects": "ਰੀਡਾਇਰੈਕਟਾਂ ਦੀ ਲਿਸਟ",
+ "listduplicatedfiles": "ਨਕਲ ਵਾਲ਼ੀਆਂ ਫ਼ਾਈਲਾਂ ਦੀ ਸੂਚੀ",
"unusedtemplates": "ਅਣ-ਵਰਤੇ ਫਰਮੇ",
"unusedtemplateswlh": "ਹੋਰ ਕੜੀਆਂ",
"randompage": "ਰਲ਼ਵਾਂ ਸਫ਼ਾ",
@@ -1175,11 +1221,12 @@
"randomincategory": "ਸ਼੍ਰੇਣੀ ਵਿਚਲਾ ਰਲ਼ਵਾਂ ਸਫ਼ਾ",
"randomincategory-invalidcategory": "\"$1\" ਕੋਈ ਸਹੀ ਸ਼੍ਰੇਣੀ ਦਾ ਨਾਂ ਨਹੀਂ ਹੈ।",
"randomincategory-nopages": "[[:Category:$1|$1]] ਸ਼੍ਰੇਣੀ ਵਿਚ ਕੋਈ ਸਫ਼ਾ ਨਹੀਂ ਹੈ।",
+ "randomincategory-category": "ਵਰਗ:",
+ "randomincategory-legend": "ਵਰਗ ਵਿਚਲਾ ਰਲ਼ਵਾਂ ਸਫ਼ਾ",
"randomredirect": "ਰਲ਼ਵਾਂ ਰੀਡਿਰੈਕਟ",
"statistics": "ਅੰਕੜੇ",
"statistics-header-pages": "ਸਫ਼ਾ ਅੰਕੜੇ",
"statistics-header-edits": "ਸੋਧ ਅੰਕੜੇ",
- "statistics-header-views": "ਅੰਕੜੇ ਵਿਖਾਓ",
"statistics-header-users": "ਵਰਤੋਂਕਾਰ ਅੰਕੜੇ",
"statistics-header-hooks": "ਹੋਰ ਅੰਕੜੇ",
"statistics-articles": "ਸਮੱਗਰੀ ਸਫ਼ੇ",
@@ -1187,12 +1234,10 @@
"statistics-pages-desc": "ਇਸ ਵਿਕੀ ਦੇ ਸਾਰੇ ਸਫ਼ੇ, ਗੱਲ-ਬਾਤ ਸਫ਼ਿਆਂ, ਰੀਡਾਇਰੈਕਟਾਂ ਇਤਿਆਦਿ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋਏ",
"statistics-files": "ਅਪਲੋਡ ਕੀਤੀਆਂ ਗਈਆਂ ਫਾਈਲਾਂ",
"statistics-edits-average": "ਪ੍ਰਤੀ ਸਫ਼ਾ ਔਸਤ ਸੋਧਾਂ",
- "statistics-views-total": "ਕੁੱਲ ਫੇਰੀਆਂ",
- "statistics-views-peredit": "ਪ੍ਰਤੀ ਸੋਧ ਫੇਰੀਆਂ",
"statistics-users": "ਰਜਿਸਟਰਡ [[Special:ListUsers|ਵਰਤੋਂਕਾਰ]]",
"statistics-users-active": "ਸਰਗਰਮ ਵਰਤੋਂਕਾਰ",
"statistics-users-active-desc": "ਮੈਂਬਰ, ਜਿੰਨ੍ਹਾ ਨੇ ਆਖ਼ਰੀ {{PLURAL:$1|ਦਿਨ|$1 ਦਿਨਾਂ}} ਵਿਚ ਕੋਈ ਕੰਮ ਕੀਤਾ ਹੈ।",
- "statistics-mostpopular": "ਸਭ ਤੋਂ ਵੱਧ ਵੇਖੇ ਸਫ਼ੇ",
+ "pageswithprop-prop": "ਗੁਣ ਦਾ ਨਾਂ:",
"pageswithprop-submit": "ਜਾਉ",
"doubleredirects": "ਦੋਹਰੇ ਰੀਡਿਰੈਕਟ",
"brokenredirects": "ਟੁੱਟੇ ਹੋਏ ਰੀਡਿਰੈਕਟ",
@@ -1220,7 +1265,6 @@
"uncategorizedtemplates": "ਬਗ਼ੈਰ ਕੈਟੇਗਰੀਆਂ ਵਾਲ਼ੇ ਸਾਂਚੇ",
"unusedcategories": "ਅਣਵਰਤੀਆਂ ਕੈਟਾਗਰੀਆਂ",
"unusedimages": "ਅਣਵਰਤੀਆਂ ਫਾਇਲਾਂ",
- "popularpages": "ਹਰਮਨਪਿਆਰੇ ਸਫ਼ੇ",
"wantedcategories": "ਚਾਹੀਦੀਆਂ ਕੈਟੇਗਰੀਆਂ",
"wantedpages": "ਚਾਹੀਦੇ ਸਫ਼ੇ",
"wantedfiles": "ਚਾਹੀਦੀਆਂ ਫਾਇਲਾਂ",
@@ -1229,16 +1273,21 @@
"prefixindex": "ਇਸ ਅਗੇਤਰ ਵਾਲੇ ਸਾਰੇ ਸਫ਼ੇ",
"shortpages": "ਛੋਟੇ ਸਫ਼ੇ",
"longpages": "ਲੰਮੇ ਸਫ਼ੇ",
+ "deadendpages": "ਬੰਦ ਗਲ਼ੀ ਵਾਲ਼ੇ ਸਫ਼ੇ",
"protectedpages": "ਸੁਰੱਖਿਅਤ ਸਫ਼ੇ",
+ "protectedpages-noredirect": "ਮੋੜ ਲੁਕਾਉ",
+ "protectedpages-timestamp": "ਵਕਤ ਦੀ ਮੋਹਰ",
"protectedpages-page": "ਸਫ਼ਾ",
"protectedpages-expiry": "ਮਿਆਦ",
"protectedpages-reason": "ਕਾਰਨ",
"protectedpages-unknown-timestamp": "ਅਣਜਾਣ",
- "protectedpages-unknown-performer": "ਅਣਜਾਣ ਯੂਜ਼ਰ",
+ "protectedpages-unknown-performer": "ਅਣਪਛਾਤੇ ਵਰਤੋਂਕਾਰ",
"protectedtitles": "ਸੁਰੱਖਿਅਤ ਸਿਰਲੇਖ",
- "listusers": "ਯੂਜ਼ਰ ਲਿਸਟ",
+ "listusers": "ਵਰਤੋਂਕਾਰ ਸੂਚੀ",
"listusers-editsonly": "ਸਿਰਫ਼ ਸੋਧਾਂ ਵਾਲੇ ਵਰਤੋਂਕਾਰ ਵਿਖਾਓ",
"listusers-creationsort": "ਬਣਾਉਣ ਦੀ ਮਿਤੀ ਮੁਤਾਬਕ ਤਰਤੀਬ ਵਿਚ ਕਰੋ",
+ "listusers-desc": "ਲਹਿੰਦੀ ਤਰਤੀਬ 'ਚ ਰੱਖੋ",
+ "usereditcount": "$1 {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}}",
"usercreated": "$1 ਨੂੰ $2 ’ਤੇ {{GENDER:$3|ਬਣਾਇਆ}}",
"newpages": "ਨਵੇਂ ਸਫ਼ੇ",
"newpages-username": "ਵਰਤੋਂਕਾਰ ਨਾਂ:",
@@ -1250,9 +1299,10 @@
"nopagetitle": "ਕੋਈ ਅਜਿਹਾ ਨਿਸ਼ਾਨਾ ਸਫ਼ਾ ਨਹੀਂ ਹੈ",
"pager-newer-n": "{{PLURAL:$1|1 ਨਵਾਂ|$1 ਨਵੇਂ}}",
"pager-older-n": "{{PLURAL:$1|1 ਪੁਰਾਣਾ|$1 ਪੁਰਾਣੇ}}",
+ "suppress": "ਨਿਗਰਾਨ",
"booksources": "ਪੁਸਤਕਾਂ ਦੇ ਸਰੋਤ",
"booksources-search-legend": "ਕਿਤਾਬਾਂ ਦੇ ਸਰੋਤ ਖੋਜੋ",
- "booksources-go": "ਜਾਓ",
+ "booksources-search": "ਭਾਲ਼",
"booksources-invalid-isbn": "ਦਿੱਤਾ ਗਿਆ ISBN ਸਹੀ ਨਹੀਂ ਲਗਦਾ, ਅਸਲੀ ਸਰੋਤ ਤੋਂ ਨਕਲ ਕਰਦੇ ਵਕਤ ਹੋਈਆਂ ਗ਼ਲਤੀਆਂ ਜਾਂਚੋ।",
"specialloguserlabel": "ਕਰਤਾ:",
"speciallogtitlelabel": "ਸਿਰਲੇਖ:",
@@ -1307,13 +1357,20 @@
"listgrouprights-removegroup-all": "ਸਾਰੇ ਸਮੂਹ ਹਟਾਓ",
"listgrouprights-addgroup-self-all": "ਆਪਣੇ ਖਾਤੇ ਵਿਚ ਸਾਰੇ ਸਮੂਹ ਜੋੜੋ",
"listgrouprights-removegroup-self-all": "ਆਪਣੇ ਖਾਤੇ ਤੋਂ ਸਾਰੇ ਸਮੂਹ ਹਟਾਓ",
+ "listgrouprights-namespaceprotection-header": "ਨਾਂ-ਥਾਂ ਦੀਆਂ ਬੰਧੇਜਾਂ",
+ "listgrouprights-namespaceprotection-namespace": "ਨਾਂ-ਥਾਂ",
+ "trackingcategories": "ਵਰਗਾਂ ਦੀ ਪੈੜ",
+ "trackingcategories-msg": "ਵਰਗ ਦੀ ਪੈੜ",
+ "trackingcategories-name": "ਸੁਨੇਹੇ ਦਾ ਨਾਂ",
+ "trackingcategories-desc": "ਵਰਗ ਮਿਲਾਉਣ ਦੇ ਮਾਪਦੰਡ",
"trackingcategories-nodesc": "ਕੋਈ ਵੇਰਵਾ ਉਪਲੱਬਧ ਨਹੀਂ।",
+ "trackingcategories-disabled": "ਵਰਗ ਬੰਦ ਹੈ",
"mailnologin": "ਭੇਜਣ ਲਈ ਕੋਈ ਪਤਾ ਨਹੀਂ",
"mailnologintext": "ਦੂਜੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਭੇਜਣ ਲਈ ਤੁਹਾਨੂੰ [[Special:UserLogin|ਦਾਖ਼ਲ]] ਹੋਣਾ ਪਵੇਗਾ ਅਤੇ ਆਪਣੀਆਂ [[Special:Preferences|ਪਸੰਦਾਂ]] ਵਿਚ ਇੱਕ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦੇਣਾ ਪਵੇਗਾ।",
"emailuser": "ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ",
"emailuser-title-target": "ਇਹ {{GENDER:$1|ਯੂਜ਼ਰ}} ਨੂੰ ਈਮੇਲ ਭੇਜੋ",
- "emailuser-title-notarget": "ਯੂਜ਼ਰ ਨੂੰ ਈਮੇਲ",
- "emailpage": "ਯੂਜ਼ਰ ਨੂੰ ਈਮੇਲ ਕਰੋ",
+ "emailuser-title-notarget": "ਵਰਤੋਂਕਾਰ ਨੂੰ ਈਮੇਲ ਕਰੋ",
+ "emailpage": "ਵਰਤੋਂਕਾਰ ਨੂੰ ਈਮੇਲ ਕਰੋ",
"defemailsubject": "{{SITENAME}} ਈਮੇਲ",
"usermaildisabled": "ਵਰਤੋਂਕਾਰ ਦੀ ਈ-ਮੇਲ ਬੰਦ ਹੈ",
"usermaildisabledtext": "ਇਸ ਵਿਕੀ ’ਤੇ ਤੁਸੀਂ ਦੂਜੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਈ-ਮੇਲ ਨਹੀਂ ਭੇਜ ਸਕਦੇ",
@@ -1341,7 +1398,7 @@
"mywatchlist": "ਨਿਗਰਾਨੀ-ਲਿਸਟ",
"watchlistfor2": "$1 $2 ਲਈ",
"nowatchlist": "ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਕੋਈ ਚੀਜ਼ ਨਹੀਂ ਹੈ।",
- "watchlistanontext": "ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚਲੀਆਂ ਚੀਜ਼ਾਂ ਵੇਖਣ ਜਾਂ ਸੋਧਣ ਲਈ ਮਿਹਰਬਾਨੀ ਕਰਕੇ $1।",
+ "watchlistanontext": "ਆਪਣੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚਲੀਆਂ ਚੀਜ਼ਾਂ ਵੇਖਣ ਜਾਂ ਸੋਧਣ ਲਈ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਦਾਖ਼ਲ ਹੋਵੋ।",
"watchnologin": "ਲਾਗਇਨ ਨਹੀਂ",
"addwatch": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ’ਚ ਜੋੜੋ",
"addedwatchtext": "ਪੰਨਾ \"[[:$1]]\" ਤੁਹਾਡੀ [[Special:Watchlist|ਧਿਆਨਸੂਚੀ]] ’ਚ ਜੁੜ ਚੁੱਕਾ ਹੈ।\nਇਸ ਅਤੇ ਇਸਦੇ ਚਰਚਾ ਪੰਨੇ ’ਚ ਹੋਈਆਂ ਬਦਲੀਆਂ ਓਥੇ ਵਖਾਈ ਦੇਣਗੀਆਂ ਅਤੇ ਵੇਖਣ ਦੀ ਸੌਖ ਲਈ [[Special:RecentChanges|ਹਾਲ ਹੀ ’ਚ ਹੋਈਆਂ ਬਦਲੀਆਂ]] ਵਿੱਚ ਇਹ ਪੰਨਾ '''ਗੂੜ੍ਹਾ''' ਦਿਖਾਈ ਦੇਵੇਗਾ।",
@@ -1354,12 +1411,14 @@
"notanarticle": "ਕੋਈ ਸਮੱਗਰੀ ਸਫ਼ਾ ਨਹੀਂ ਹੈ",
"notvisiblerev": "ਇੱਕ ਵੱਖਰੇ ਮੈਂਬਰ ਦੀ ਬਣਾਈ ਆਖ਼ਰੀ ਰੀਵਿਜ਼ਨ ਮਿਟਾਈ ਜਾ ਚੁੱਕੀ ਹੈ",
"watchlist-details": "ਗੱਲ-ਬਾਤ ਸਫ਼ੇ ਨਾ ਗਿਣਦੇ ਹੋਏ, ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਸੂਚੀ ਵਿਚ{{PLURAL:$1|$1 ਸਫ਼ਾ ਹੈ|$1 ਸਫ਼ੇ ਹਨ}}।",
+ "wlheader-enotif": "ਈਮੇਲ ਸੂਚਨਾ ਚਾਲੂ ਹੈ।",
"wlnote": "$3, $4 ਮੁਤਾਬਕ ਆਖ਼ਰੀ {{PLURAL:$2|ਘੰਟੇ|'''$2''' ਘੰਟਿਆਂ}} ਵਿਚ {{PLURAL:\n$1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆਂ}}, ਹੇਠਾਂ ਵੇਖੋ।",
- "wlshowlast": "ਪਿਛਲੇ $1 ਘੰਟੇ $2 ਦਿਨ $3 ਵਖਾਓ",
+ "wlshowlast": "ਪਿਛਲੇ $1 ਘੰਟੇ $2 ਦਿਨ ਵਖਾਓ",
"watchlist-options": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਦੀਆਂ ਚੋਣਾਂ",
"watching": "ਨਿਗ੍ਹਾ (ਵਾਚ) ਰੱਖੀ ਜਾ ਰਹੀ ਹੈ...",
"unwatching": "ਨਿਗ੍ਹਾ ਰੱਖਣੀ (ਵਾਚ) ਬੰਦ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..",
- "enotif_impersonal_salutation": "{{SITENAME}} ਯੂਜ਼ਰ",
+ "enotif_reset": "ਫੇਰੀ ਪਾਏ ਸਾਰੇ ਸਫ਼ਿਆਂ ਨੂੰ ਨਿਸ਼ਾਨੀ ਲਾਉ",
+ "enotif_impersonal_salutation": "{{SITENAME}} ਵਰਤੋਂਕਾਰ",
"enotif_lastvisited": "ਤੁਹਾਡੀ ਆਖ਼ਰੀ ਆਮਦ ਤੋਂ ਲੈ ਕੇ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।",
"enotif_lastdiff": "ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਵੇਖਣ ਲਈ $1 ਵੇਖੋ।",
"enotif_anon_editor": "ਗੁਮਨਾਮ ਵਰਤੋਂਕਾਰ $1",
@@ -1368,10 +1427,11 @@
"deletepage": "ਸਫ਼ਾ ਹਟਾਓ",
"confirm": "ਪੁਸ਼ਟੀ",
"excontent": "ਸਮੱਗਰੀ ਸੀ: '$1'",
+ "excontentauthor": "ਲਿਖਤ ਸੀ: \"$1\" (ਅਤੇ ਇੱਕੋ-ਇੱਕ ਯੋਗਦਾਨੀ \"[[Special:Contributions/$2|$2]]\" ਸੀ)",
"exbeforeblank": "ਖ਼ਾਲੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸਮੱਗਰੀ ਸੀ: \"$1\"",
"delete-confirm": "\"$1\" ਹਟਾਓ",
"delete-legend": "ਹਟਾਓ",
- "historywarning": "'''ਖ਼ਬਰਦਾਰ:''' ਜੋ ਸਫ਼ਾ ਤੁਸੀਂ ਮਿਟਾਉਣ ਜਾ ਰਹੇ ਹੋ ਉਸਦਾ ਅਤੀਤ ਤਕਰੀਬਨ $1 {{PLURAL:$1|ਰੀਵਿਜ਼ਨ|ਰੀਵਿਜ਼ਨਾਂ}} ਦਾ ਹੈ:",
+ "historywarning": "<strong>ਖ਼ਬਰਦਾਰ:</strong> ਜੋ ਸਫ਼ਾ ਤੁਸੀਂ ਮਿਟਾਉਣ ਜਾ ਰਹੇ ਹੋ ਉਹਦਾ ਅਤੀਤ $1 {{PLURAL:$1|ਸੁਧਾਈ|ਸੁਧਾਈਆਂ}} ਦਾ ਹੈ:",
"actioncomplete": "ਕਾਰਵਾਈ ਪੂਰੀ ਹੋਈ",
"actionfailed": "ਕਾਰਵਾਈ ਨਾਕਾਮ",
"deletedtext": "\"$1\" ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।\nਤਾਜ਼ੀਆਂ ਮਿਟਾਉਣਾਂ ਦੇ ਰਿਕਾਰਡ ਲਈ $2 ਵੇਖੋ।",
@@ -1385,7 +1445,6 @@
"deletereason-dropdown": "*ਮਿਟਾਉਣ ਦੇ ਆਮ ਕਾਰਨ\n**ਲੇਖਕ ਦੇ ਕਹਿਣ ’ਤੇ\n**ਕਾਪੀਰਾਈਟ ਦੀ ਉਲੰਘਣਾ\n**ਵੰਦਾਲਿਜ਼ਮ",
"delete-edit-reasonlist": "ਮਿਟਾਉਣ ਦੇ ਕਾਰਨ ਸੋਧੋ",
"rollback": "ਸੋਧਾਂ ਵਾਪਸ ਮੋੜੋ",
- "rollback_short": "ਰੋਲਬੈਕ",
"rollbacklink": "ਵਾਪਸ ਮੋੜੋ",
"rollbacklinkcount": "$1 {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}} ਵਾਪਸ ਮੋੜੋ",
"rollbacklinkcount-morethan": "$1 ਤੋਂ ਜ਼ਿਆਦਾ {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}} ਵਾਪਸ ਮੋੜੋ",
@@ -1401,6 +1460,7 @@
"prot_1movedto2": "[[$1]] ਨੂੰ [[$2]] ’ਤੇ ਭੇਜਿਆ",
"protect-badnamespace-title": "ਗ਼ੈਰ-ਸੁਰੱਖਿਆਯੋਗ ਨਾਂ-ਥਾਂ",
"protect-badnamespace-text": "ਇਸ ਥਾਂ-ਨਾਮ ਵਿਚਲੇ ਸਫ਼ੇ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ।",
+ "protect-norestrictiontypes-title": "ਨਾ-ਬਚਾਉਣਯੋਗ ਸਫ਼ਾ",
"protect-legend": "ਸੁਰੱਖਿਆ ਤਸਦੀਕੀ",
"protectcomment": "ਕਾਰਨ:",
"protectexpiry": "ਮਿਆਦ:",
@@ -1474,6 +1534,7 @@
"sp-contributions-search": "ਯੋਗਦਾਨ ਖੋਜੋ",
"sp-contributions-username": "IP ਪਤਾ ਜਾਂ ਵਰਤੋਂਕਾਰਨਾਮ:",
"sp-contributions-toponly": "ਸਿਰਫ ਉਹ ਸੋਧਾਂ ਵਿਖਾਓ ਜੋ ਸਭ ਤੋਂ ਤਾਜ਼ੀਆਂ ਰਿਵੀਜਨਾਂ ਹਨ",
+ "sp-contributions-newonly": "ਸਿਰਫ਼ ਉਹ ਸੋਧਾਂ ਵਿਖਾਉ ਜਿਹਨਾਂ ਨਾਲ਼ ਨਵੇਂ ਸਫ਼ੇ ਬਣੇ ਹਨ",
"sp-contributions-submit": "ਖੋਜ",
"whatlinkshere": "ਇੱਥੇ ਕੀ ਆ ਕੇ ਜੁੜਦਾ ਹੈ",
"whatlinkshere-title": "$1 ਨਾਲ ਜੋੜਨ ਵਾਲੇ ਸਫ਼ੇ",
@@ -1493,14 +1554,14 @@
"whatlinkshere-filters": "ਫਿਲਟਰ",
"block": "ਵਰਤੋਂਕਾਰ 'ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
"unblock": "ਵਰਤੋਂਕਾਰ 'ਤੇ ਲੱਗੀ ਪਾਬੰਦੀ ਹਟਾਓ",
- "blockip": "ਵਰਤੋਂਕਾਰ ’ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
+ "blockip": "{{GENDER:$1|ਵਰਤੋਂਕਾਰ}} 'ਤੇ ਰੋਕ ਲਾਉ",
"blockip-legend": "ਵਰਤੋਂਕਾਰ 'ਤੇ ਪਾਬੰਦੀ ਲਾਓ",
"ipaddressorusername": "IP ਐਡਰੈਸ ਜਾਂ ਯੂਜ਼ਰ ਨਾਂ:",
"ipbexpiry": "ਮਿਆਦ:",
"ipbreason": "ਕਾਰਨ:",
"ipbcreateaccount": "ਖਾਤਾ ਬਣਾਉਣ 'ਤੇ ਰੋਕ ਲਾਓ",
"ipbemailban": "ਵਰਤੋਂਕਾਰ ਉੱਤੇ ਈਮੇਲ ਭੇਜਣ ਦੀ ਰੋਕ ਲਾਓ",
- "ipbsubmit": "ਇਹ ਯੂਜ਼ਰ ਲਈ ਪਾਬੰਦੀ",
+ "ipbsubmit": "ਇਸ ਵਰਤੋਂਕਾਰ 'ਤੇ ਰੋਕ ਲਾਉ",
"ipbother": "ਹੋਰ ਟਾਈਮ:",
"ipboptions": "2 ਘੰਟੇ:2 hours, 1 ਦਿਨ:1 day, 3 ਦਿਨ:3 days, 1 ਹਫ਼ਤਾ:1 week, 2 ਹਫ਼ਤੇ:2 weeks, 2 ਮਹੀਨਾ:1 month, 3 ਮਹੀਨੇ:3 months, 6 ਮਹੀਨੇ:6 months, 1 ਸਾਲ:1 year, ਹਮੇਸ਼ਾਂ ਲਈ:infinite",
"ipbhidename": "ਸੋਧਾਂ ਅਤੇ ਕੜੀਆਂ ਤੋਂ ਵਰਤੋਂਕਾਰ ਦਾ ਨਾਂ ਲੁਕਾਓ",
@@ -1514,7 +1575,7 @@
"ipb-unblock": "ਇੱਕ ਯੂਜ਼ਰ ਨਾਂ ਜਾਂ IP ਐਡਰੈੱਸ ਅਣ-ਬਲਾਕ ਕਰੋ",
"ipb-blocklist": "ਮੌਜੂਦਾ ਪਾਬੰਦੀਆਂ ਵੇਖੋ",
"ipb-blocklist-contribs": "$1 ਦੇ ਯੋਗਦਾਨ",
- "unblockip": "ਯੂਜ਼ਰ ਅਣ-ਬਲਾਕ ਕਰੋ",
+ "unblockip": "ਵਰਤੋਂਕਾਰ ਤੋਂ ਰੋਕ ਹਟਾਉ",
"ipusubmit": "ਇਹ ਪਾਬੰਦੀ ਹਟਾਓ",
"unblocked": "[[User:$1|$1]] ਪਾਬੰਦੀ ਮੁਕਤ ਹੋ ਚੁੱਕਾ ਹੈ",
"unblocked-range": "$1 ਪਾਬੰਦੀ ਮੁਕਤ ਹੋ ਚੁੱਕੀ ਹੈ",
@@ -1553,6 +1614,7 @@
"unblocklogentry": "$1 ਤੋਂ ਪਾਬੰਦੀ ਹਟਾਈ",
"block-log-flags-anononly": "ਸਿਰਫ਼ ਗੁੰਮਨਾਮ ਮੈਂਬਰ",
"block-log-flags-nocreate": "ਖਾਤਾ ਬਣਾਉਣ ’ਤੇ ਪਾਬੰਦੀ ਹੈ",
+ "block-log-flags-noemail": "ਈਮੇਲ ਬੰਦ ਹੈ",
"block-log-flags-nousertalk": "ਆਪਣਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ ਨਹੀਂ ਸੋਧ ਸਕਦਾ",
"block-log-flags-hiddenname": "ਵਰਤੋਂਕਾਰ ਨਾਂ ਲੁਕਾਇਆ ਹੋਇਆ",
"ipb_expiry_invalid": "ਖ਼ਤਮ ਹੋਣ ਦਾ ਸਮਾਂ ਗ਼ਲਤ।",
@@ -1564,10 +1626,13 @@
"ipbblocked": "ਤੁਸੀਂ ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਪਾਬੰਦੀਸ਼ੁਦਾ ਜਾਂ ਪਾਬੰਦੀ-ਮੁਕਤ ਨਹੀਂ ਕਰ ਸਕਦੇ ਕਿਉਂਕਿ ਤੁਸੀਂ ਖ਼ੁਦ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੋ",
"ipbnounblockself": "ਤੁਹਾਨੂੰ ਖ਼ੁਦ ਨੂੰ ਪਾਬੰਦੀ-ਮੁਕਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ",
"lockdb": "ਡਾਟਾਬੇਸ ਲਾਕ",
+ "unlockdb": "ਤੱਥ-ਅਧਾਰ ਖੋਲ੍ਹੋ",
+ "unlockconfirm": "ਹਾਂ, ਮੈਂ ਸੱਚੀਂ ਤੱਥ-ਅਧਾਰ ਖੋਲ੍ਹਣਾ ਹੈ।",
"move-page": "$1 ਭੇਜੋ",
"move-page-legend": "ਸਫ਼ਾ ਭੇਜੋ",
"movearticle": "ਸਫ਼ਾ ਭੇਜੋ:",
"movenologintext": "ਇਕ ਸਫ਼ੇ ਦਾ ਸਿਰਲੇਖ ਬਦਲਣ ਲਈ ਤੁਸੀਂ ਰਜਿਸਟਰਡ ਮੈਂਬਰ ਹੋਣੇ ਚਾਹੀਦੇ ਹੋ ਅਤੇ [[Special:UserLogin|ਲਾਗਇਨ]] ਕੀਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।",
+ "movenotallowed": "ਤੁਹਾਡੇ ਕੋਲ਼ ਸਫ਼ੇ ਹਿਲਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
"movenotallowedfile": "ਤੁਹਾਨੂੰ ਫ਼ਾਈਲਾਂ ਭੇਜਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
"cant-move-user-page": "ਤੁਹਾਨੂੰ ਵਰਤੋਂਕਾਰ ਸਫ਼ਿਆਂ (ਉਪ-ਸਫ਼ਿਆਂ ਤੋਂ ਛੁੱਟ) ਨੂੰ ਭੇਜਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
"newtitle": "ਨਵੇਂ ਟਾਈਟਲ ਲਈ:",
@@ -1588,8 +1653,8 @@
"delete_and_move_confirm": "ਹਾਂ, ਸਫ਼ਾ ਮਿਟਾ ਦੇਵੋ",
"immobile-source-page": "ਇਹ ਸਫ਼ਾ ਭੇਜਣ ਯੋਗ ਨਹੀਂ ਹੈ।",
"move-leave-redirect": "ਪਿੱਛੇ ਇਕ ਰੀਡਿਰੈਕਟ ਛੱਡੋ",
- "export": "ਸਫ਼ੇ ਨਿਰਯਾਤ ਕਰੋ",
- "exportall": "ਸਾਰੇ ਸਫ਼ਿਆਂ ਦਾ ਨਿਰਯਾਤ ਕਰੋ",
+ "export": "ਜੁਗਤਾਂ ਦੀ ਬਰਾਮਦ",
+ "exportall": "ਸਾਰੇ ਸਫ਼ਿਆਂ ਦੀ ਬਰਾਮਦ",
"exportcuronly": "ਸਿਰਫ਼ ਮੌਜੂਦਾ ਰੀਵਿਜ਼ਨ ਸ਼ਾਮਲ ਕਰੋ, ਸਾਰਾ ਅਤੀਤ ਨਹੀਂ",
"export-submit": "ਐਕਸਪੋਰਟ",
"export-addcattext": "ਇਸ ਸ਼੍ਰੇਣੀ ਤੋਂ ਸਫ਼ੇ ਜੋੜੋ",
@@ -1607,7 +1672,7 @@
"allmessages-filter-all": "ਸਭ",
"allmessages-filter-modified": "ਬਦਲਿਆ ਗਿਆ",
"allmessages-prefix": "ਇਸ ਅਗੇਤਰ ਨਾਲ਼ ਛਾਣੋ:",
- "allmessages-language": "ਭਾਸ਼ਾ:",
+ "allmessages-language": "ਬੋਲੀ:",
"allmessages-filter-submit": "ਜਾਓ",
"allmessages-filter-translate": "ਤਰਜਮਾ ਕਰੋ",
"thumbnail-more": "ਵਧਾਓ",
@@ -1615,8 +1680,11 @@
"thumbnail_error": "ਨਮੂਨਾ ਬਣਾਉਣ ਵਿੱਚ ਗਲਤੀ ਹੋਈ ਹੈ: $1",
"import": "ਸਫ਼ੇ ਮੰਗਾਓ",
"importinterwiki": "ਅੰਤਰ-ਵਿਕੀ ਮੰਗ",
+ "import-interwiki-sourcewiki": "ਮੁੱਢਲਾ ਵਿਕੀ:",
+ "import-interwiki-sourcepage": "ਮੁੱਢਲਾ ਸਫ਼ਾ:",
"import-interwiki-templates": "ਸਾਰੇ ਫਰਮੇ ਸ਼ਾਮਲ ਕਰੋ",
"import-interwiki-submit": "ਮੰਗਾਓ",
+ "import-interwiki-namespace": "ਨੀਯਤ ਨਾਂ-ਥਾਂ:",
"import-upload-filename": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ:",
"import-comment": "ਟਿੱਪਣੀ:",
"importstart": "ਪੇਜ ਇੰਪੋਰਟ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ...",
@@ -1632,15 +1700,15 @@
"import-token-mismatch": "ਇਸ ਇਜਲਾਸ ਦਾ ਡਾਟਾ ਉੱਡ ਗਿਆ।\nਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।",
"import-invalid-interwiki": "ਦੱਸੇ ਹੋਏ ਵਿਕੀ ਤੋਂ ਮੰਗਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।",
"importlogpage": "ਮੰਗਾਉਣ ਦਾ ਚਿੱਠਾ",
- "import-logentry-upload-detail": "$1 ਰੀਵਿਜਨ",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|ਸੁਧਾਈ|ਸੁਧਾਈਆਂ}} ਦੀ ਦਰਾਮਦ ਹੋਈ",
"tooltip-pt-userpage": "ਤੁਹਾਡਾ ਵਰਤੋਂਕਾਰ ਸਫ਼ਾ",
"tooltip-pt-mytalk": "ਤੁਹਾਡਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ",
"tooltip-pt-anontalk": "ਇਸ IP ਪਤੇ ਤੋਂ ਹੋਈਆਂ ਸੋਧਾਂ ਬਾਰੇ ਚਰਚਾ",
- "tooltip-pt-preferences": "ਤੁਹਾਡੀਆਂ ਪਸੰਦਾਂ",
+ "tooltip-pt-preferences": "ਤੁਹਾਡੀਆਂ ਤਰਜੀਹਾਂ",
"tooltip-pt-watchlist": "ਉਹਨਾਂ ਸਫ਼ਿਆਂ ਦੀ ਸੂਚੀ ਜਿਹਨਾਂ ਦੀਆਂ ਤਬਦੀਲੀਆਂ 'ਤੇ ਤੁਸੀਂ ਅੱਖ ਰੱਖ ਰਹੇ ਹੋ",
"tooltip-pt-mycontris": "ਤੁਹਾਡੇ ਯੋਗਦਾਨਾਂ ਦੀ ਸੂਚੀ",
"tooltip-pt-login": "ਤੁਹਾਨੂੰ ਦਾਖ਼ਲ ਹੋਣ ਲਈ ਪ੍ਰੇਰਿਆ ਜਾਂਦਾ ਹੈ; ਪਰ ਇਹ ਕੋਈ ਲਾਜ਼ਮੀ ਨਹੀਂ",
- "tooltip-pt-logout": "ਸਾਈਟ ਤੋਂ ਵਿਦਾਈ ਲਓ",
+ "tooltip-pt-logout": "ਸਾਈਟ ਤੋਂ ਬਾਹਰ ਆਉ",
"tooltip-ca-talk": "ਸਮਗੱਰੀ ਸਫ਼ੇ ਬਾਰੇ ਚਰਚਾ",
"tooltip-ca-edit": "ਤੁਸੀਂ ਇਹ ਸਫ਼ਾ ਸੋਧ ਸਕਦੇ ਹੋ। ਕਿਰਪਾ ਕਰਕੇ ਤਬਦੀਲੀ ਸਾਂਭਣ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖੋ।",
"tooltip-ca-addsection": "ਨਵਾਂ ਭਾਗ ਸ਼ੁਰੂ ਕਰੋ",
@@ -1671,7 +1739,7 @@
"tooltip-t-emailuser": "ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ",
"tooltip-t-upload": "ਫ਼ਾਈਲਾਂ ਅਪਲੋਡ ਕਰੋ",
"tooltip-t-specialpages": "ਸਾਰੇ ਖ਼ਾਸ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ",
- "tooltip-t-print": "ਇਸ ਸਫ਼ੇ ਦਾ ਛਪਣਯੋਗ ਵਰਜਨ",
+ "tooltip-t-print": "ਇਸ ਸਫ਼ੇ ਦਾ ਛਪਣਯੋਗ ਰੂਪ",
"tooltip-t-permalink": "ਸਫ਼ੇ ਦੇ ਇਸ ਰੀਵਿਜਨ ਲਈ ਪੱਕੀ ਕੜੀ",
"tooltip-ca-nstab-main": "ਸਮੱਗਰੀ ਸਫ਼ਾ ਵੇਖੋ",
"tooltip-ca-nstab-user": "ਵਰਤੋਂਕਾਰ ਸਫ਼ਾ ਵੇਖੋ",
@@ -1696,27 +1764,40 @@
"tooltip-undo": "\"ਉਧੇੜਨਾ\" ਇਸ ਤਬਦੀਲੀ ਨੂੰ ਰੱਦ ਕਰਕੇ ਸੋਧ ਫਾਰਮ ਨੂੰ ਝਲਕ ਦੇ ਅੰਦਾਜ਼ ਵਿੱਚ ਦਿਖਾਉਂਦਾ ਹੈ।\nਇੰਝ \"ਸਾਰ\" ਵਿੱਚ ਤਬਦੀਲੀ ਨਕਾਰਨ ਦਾ ਕਾਰਨ ਲਿਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।",
"tooltip-preferences-save": "ਪਸੰਦ ਸੰਭਾਲੋ",
"tooltip-summary": "ਸੰਖੇਪ ਸਾਰ ਦਰਜ ਕਰੋ",
+ "siteuser": "{{SITENAME}} ਵਰਤੋਂਕਾਰ $1",
+ "anonuser": "{{SITENAME}} ਬੇਨਾਮ ਵਰਤੋਂਕਾਰ $1",
"lastmodifiedatby": "ਇਹ ਸਫ਼ਾ ਆਖ਼ਰੀ ਵਾਰ $1 ਨੂੰ $2 ’ਤੇ $3 ਨੇ ਸੋਧਿਆ ਸੀ।",
+ "othercontribs": "$1 ਦੇ ਕਾਰਜ 'ਤੇ ਅਧਾਰਤ।",
"others": "ਹੋਰ",
"siteusers": "{{SITENAME}} {{PLURAL:$2|ਵਰਤੋਂਕਾਰ|ਵਰਤੋਂਕਾਰਾਂ}} $1",
+ "anonusers": "{{SITENAME}} ਬੇਨਾਮ {{PLURAL:$2|ਵਰਤੋਂਕਾਰ|ਵਰਤੋਂਕਾਰ}} $1",
"creditspage": "ਸਫ਼ੇ ਬਾਬਤ ਕਰਜ਼",
"spamprotectiontitle": "Spam ਸੁਰੱਖਿਆ ਫਿਲਟਰ",
+ "pageinfo-title": "\"$1\" ਵਾਸਤੇ ਜਾਣਕਾਰੀ",
+ "pageinfo-not-current": "ਅਫ਼ਸੋਸ, ਪੁਰਾਣੀਆਂ ਸੁਧਾਈਆਂ ਵਾਸਤੇ ਇਹ ਜਾਣਕਾਰੀ ਦੇਣੀ ਅਸੰਭਵ ਹੈ।",
"pageinfo-header-basic": "ਮੁੱਢਲੀ ਜਾਣਕਾਰੀ",
"pageinfo-header-edits": "ਸੋਧਾਂ ਦਾ ਅਤੀਤ",
"pageinfo-header-restrictions": "ਸਫ਼ੇ ਦੀ ਸੁਰੱਖਿਆ",
"pageinfo-header-properties": "ਸਫ਼ਾ ਵਿਸ਼ੇਸ਼ਤਾ",
+ "pageinfo-display-title": "ਨੁਮਾਇਸ਼ੀ ਸਿਰਲੇਖ",
"pageinfo-length": "ਸਫ਼ੇ ਦੀ ਲੰਬਾਈ (ਬਾਈਟਾਂ ਵਿਚ)",
"pageinfo-article-id": "ਸਫ਼ੇ ਦੀ ਸ਼ਨਾਖ਼ਤ",
"pageinfo-language": "ਸਫ਼ੇ ਦੀ ਸਮੱਗਰੀ ਦੀ ਭਾਸ਼ਾ",
"pageinfo-robot-policy": "ਇੰਜਨ ਦੀ ਹਾਲਤ ਖੋਜੋ",
"pageinfo-robot-index": "ਮਨਜ਼ੂਰ ਹੈ",
"pageinfo-robot-noindex": "ਨਾ-ਮਨਜ਼ੂਰ",
- "pageinfo-views": "ਵਖਾਵਿਆਂ ਦੀ ਗਿਣਤੀ",
"pageinfo-watchers": "ਸਫ਼ੇ ’ਤੇ ਨਜ਼ਰ ਰੱਖਣ ਵਾਲਿਆਂ ਦੀ ਗਿਣਤੀ",
"pageinfo-subpages-name": "ਇਸ ਸਫ਼ੇ ਦੇ ਉਪ-ਸਫ਼ੇ",
+ "pageinfo-firstuser": "ਸਫ਼ੇ ਦਾ ਉਸਰਈਆ",
+ "pageinfo-firsttime": "ਸਫ਼ਾ ਬਣਨ ਦੀ ਮਿਤੀ",
"pageinfo-lastuser": "ਸਭ ਤੋਂ ਨਵਾਂ ਸੰਪਾਦਕ",
"pageinfo-lasttime": "ਸਭ ਤੋਂ ਨਵੀਂ ਸੋਧ ਦੀ ਮਿਤੀ",
"pageinfo-edits": "ਕੁੱਲ ਸੋਧਾਂ",
+ "pageinfo-authors": "ਨਿਵੇਕਲੇ ਲੇਖਕਾਂ ਦੀ ਕੁੱਲ ਗਿਣਤੀ",
+ "pageinfo-recent-edits": "ਸੋਧਾਂ ਦੀ ਹਾਲੀਆ ਗਿਣਤੀ (ਪਿਛਲੇ $1 ਵਿੱਚ)",
+ "pageinfo-recent-authors": "ਨਿਵੇਕਲੇ ਲੇਖਕਾਂ ਦੀ ਹਾਲੀਆ ਗਿਣਤੀ",
+ "pageinfo-magic-words": "ਜਾਦੂਈ {{PLURAL:$1|ਸ਼ਬਦ|ਸ਼ਬਦ}} ($1)",
+ "pageinfo-hidden-categories": "{{PLURAL:$1|ਲੁਕੀ ਸ਼੍ਰੇਣੀ|ਲੁਕੀਆਂ ਸ਼੍ਰੇਣੀਆਂ}} ($1)",
"pageinfo-toolboxlink": "ਸਫ਼ੇ ਬਾਬਤ ਜਾਣਕਾਰੀ",
"pageinfo-redirectsto-info": "ਜਾਣਕਾਰੀ",
"pageinfo-contentpage": "ਸਮੱਗਰੀ ਸਫ਼ੇ ਵਜੋਂ ਗਿਣਿਆ ਗਿਆ",
@@ -1726,6 +1807,14 @@
"pageinfo-category-pages": "ਸਫ਼ਿਆਂ ਦੀ ਗਿਣਤੀ",
"pageinfo-category-subcats": "ਉਪ-ਸ਼੍ਰੇਣੀਆਂ ਦੀ ਗਿਣਤੀ",
"pageinfo-category-files": "ਫ਼ਾਈਲਾਂ ਦੀ ਗਿਣਤੀ",
+ "markaspatrolleddiff": "ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਉ",
+ "markaspatrolledtext": "ਇਸ ਸਫ਼ੇ ਉੱਤੇ ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਉ",
+ "markedaspatrolled": "ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨ ਲਾਇਆ",
+ "markedaspatrollederror": "ਗਸ਼ਤ ਕੀਤੇ ਵਜੋਂ ਨਿਸ਼ਾਨ ਨਹੀਂ ਲਾਇਆ ਜਾ ਸਕਦਾ",
+ "patrol-log-page": "ਗਸ਼ਤ ਦਾ ਇੰਦਰਾਜ",
+ "patrol-log-header": "ਇਹ ਗਸ਼ਤ ਕੀਤੀਆਂ ਸੁਧਾਈਆਂ ਦਾ ਇੰਦਰਾਜ ਹੈ।",
+ "deletedrevision": "ਪੁਰਾਣੀ ਸੁਧਾਈ $1 ਮਿਟਾਈ ਗਈ",
+ "filedeleteerror-short": "ਇਹ ਫ਼ਾਈਲ ਮਿਟਾਉਣ 'ਚ ਦੋਸ਼: $1",
"previousdiff": "← ਪੁਰਾਣੀ ਤਬਦੀਲੀ",
"nextdiff": "ਨਵੀਂ ਤਬਦੀਲੀ →",
"thumbsize": "ਥੰਮਨੇਲ ਆਕਾਰ:",
@@ -1735,9 +1824,12 @@
"file-nohires": "ਇਸ ਤੋਂ ਵੱਡੀ ਤਸਵੀਰ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
"svg-long-desc": "SVG ਫ਼ਾਈਲ, ਆਮ ਤੌਰ ’ਤੇ $1 × $2 ਪਿਕਸਲ, ਫ਼ਾਈਲ ਦਾ ਅਕਾਰ: $3",
"show-big-image": "ਅਸਲ ਫਾਈਲ",
+ "show-big-image-preview": "ਇਸ ਝਾਤ ਦਾ ਅਕਾਰ: $1.",
"show-big-image-size": "$1 × $2 ਪਿਕਸਲ",
"newimages": "ਨਵੀਆਂ ਫ਼ਾਈਲਾਂ ਦੀ ਗੈਲਰੀ",
"newimages-legend": "ਫਿਲਟਰ",
+ "newimages-label": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ (ਜਾਂ ਉਹਦਾ ਕੋਈ ਹਿੱਸਾ):",
+ "newimages-showbots": "ਮਸ਼ੀਨਾਂ ਦੇ ਚੜ੍ਹਾਵੇ ਵਿਖਾਉ",
"noimages": "ਵੇਖਣ ਲਈ ਕੁਝ ਨਹੀਂ",
"ilsubmit": "ਖੋਜ",
"bydate": "ਮਿਤੀ ਨਾਲ",
@@ -1770,19 +1862,33 @@
"metadata-fields": "ਇਸ ਸੁਨੇਹੇ ਵਿੱਚ ਸੂਚੀਬੱਧ ਖੇਤਰ ਚਿੱਤਰ ਪੰਨੇ ’ਚ ਸ਼ਾਮਲ ਕੀਤੇ ਜਾਣਗੇ ਜੋ ਉਦੋਂ ਦਿੱਸਦੇ ਹਨ ਜਦੋ ਮੈਟਾਡੈਟਾ ਖਾਕਾ ਬੰਦ ਹੋਵੇ। ਬਾਕੀ ਉਂਞ ਹੀ ਲੁਕੇ ਹੋਣਗੇ।",
"exif-imagewidth": "ਚੌੜਾਈ",
"exif-imagelength": "ਉਚਾਈ",
+ "exif-compression": "ਨਪੀੜਨ ਦੀ ਜੁਗਤ",
+ "exif-photometricinterpretation": "ਪਿਕਸਲਾਂ ਦੀ ਬਣਤਰ",
+ "exif-orientation": "ਦਿਸ਼ਾਮਾਨ",
"exif-samplesperpixel": "ਭਾਗਾਂ ਦੀ ਗਿਣਤੀ",
+ "exif-planarconfiguration": "ਅੰਕੜਿਆਂ ਦਾ ਇੰਤਜ਼ਾਮ",
+ "exif-ycbcrpositioning": "Y ਅਤੇ C ਦਾ ਟਿਕਾਣਾ",
+ "exif-xresolution": "ਲੇਟਵੀਂ ਨੁਕਤਾ-ਗਿਣਤੀ",
+ "exif-yresolution": "ਖੜ੍ਹਵੀਂ ਨੁਕਤਾ-ਗਿਣਤੀ",
+ "exif-stripoffsets": "ਤਸਵੀਰੀ ਅੰਕੜਿਆਂ ਦਾ ਟਿਕਾਣਾ",
"exif-rowsperstrip": "ਪ੍ਰਤੀ ਪੱਟੀ ਕਤਾਰਾਂ ਦੀ ਗਿਣਤੀ",
+ "exif-stripbytecounts": "ਹਰੇਕ ਨਪੀੜੀ ਪੱਟੀ 'ਚ ਬਾਈਟ",
"exif-jpeginterchangeformatlength": "JPEG ਸਮੱਗਰੀ ਦੇ ਬਾਈਟ",
+ "exif-whitepoint": "ਚਿੱਟੀ ਬਿੰਦੀ ਦੀ ਰੰਗਤ",
+ "exif-primarychromaticities": "ਮੁੱਢਲਿਆਂ ਦੀ ਰੰਗਤ",
+ "exif-datetime": "ਫ਼ਾਈਲ ਤਬਦੀਲੀ ਦੀ ਮਿਤੀ ਅਤੇ ਸਮਾਂ",
"exif-imagedescription": "ਚਿੱਤਰ ਟਾਇਟਲ",
"exif-make": "ਕੈਮਰਾ ਨਿਰਮਾਤਾ",
"exif-model": "ਕੈਮਰਾ ਮਾਡਲ",
"exif-software": "ਵਰਤਿਆ ਸਾਫਟਵੇਅਰ",
"exif-artist": "ਲੇਖਕ",
"exif-copyright": "ਕਾਪੀਰਾਈਟ ਟਾਇਟਲ",
+ "exif-exifversion": "ਐਗਜ਼ਿਫ਼ ਦਾ ਰੂਪ",
"exif-pixelydimension": "ਤਸਵੀਰ ਦੀ ਚੌੜਾਈ",
"exif-pixelxdimension": "ਤਸਵੀਰ ਦੀ ਲੰਬਾਈ",
"exif-usercomment": "ਵਰਤੋਂਕਾਰ ਦੀਆਂ ਟਿੱਪਣੀਆਂ",
"exif-relatedsoundfile": "ਮਿਲਦੀ-ਜੁਲਦੀ ਆਡੀਓ ਫ਼ਾਈਲ",
+ "exif-datetimedigitized": "ਅੰਕਰੂਪ ਕਰਨ ਦੀ ਮਿਤੀ ਅਤੇ ਸਮਾਂ",
"exif-fnumber": "ਐੱਫ਼ ਨੰਬਰ",
"exif-subjectdistance": "ਵਿਸ਼ੇ ਦੀ ਵਿੱਥ",
"exif-lightsource": "ਚਾਨਣ ਦਾ ਸਰੋਤ",
@@ -1790,8 +1896,15 @@
"exif-focallength": "ਲੈਨਜ਼ ਦੀ ਫੋਕਲ-ਲੰਬਾਈ",
"exif-subjectarea": "ਵਿਸ਼ਾ ਖੇਤਰ",
"exif-flashenergy": "ਫ਼ਲੈਸ਼ ਦੀ ਊਰਜਾ",
+ "exif-subjectlocation": "ਵਿਸ਼ੇ ਦਾ ਟਿਕਾਣਾ",
+ "exif-exposureindex": "ਉਘਾੜ ਸੂਚਕ",
"exif-filesource": "ਫ਼ਾਈਲ ਦਾ ਸਰੋਤ",
"exif-scenetype": "ਸੀਨ ਦੀ ਕਿਸਮ",
+ "exif-whitebalance": "ਚਿੱਟਾ ਸੰਤੁਲਨ",
+ "exif-contrast": "ਵਖਰੇਵਾਂ",
+ "exif-saturation": "ਰਜਾਓ",
+ "exif-sharpness": "ਤਿੱਖਾਪਣ",
+ "exif-devicesettingdescription": "ਜੰਤਰ ਦੀਆਂ ਸੈਟਿੰਗਾਂ ਦਾ ਵੇਰਵਾ",
"exif-gpslatituderef": "ਉੱਤਰੀ ਜਾਂ ਦੱਖਣੀ ਅਕਸ਼ਾਂਸ਼",
"exif-gpslatitude": "ਅਕਸ਼ਾਂਸ਼",
"exif-gpslongituderef": "ਪੂਰਬੀ ਜਾਂ ਪੱਛਮੀ ਰੇਖਾਂਸ਼",
@@ -1800,43 +1913,61 @@
"exif-gpsaltitude": "ਉਚਾਈ",
"exif-gpstimestamp": "ਜੀ੦ਪੀ੦ਐੱਸ ਸਮਾਂ (ਪ੍ਰਮਾਣੂ ਘੜੀ)",
"exif-gpssatellites": "ਮਿਣਨ ਲਈ ਵਰਤੇ ਗਏ ਉਪਗ੍ਰਹਿ",
+ "exif-gpsstatus": "ਵਸੂਲੀਏ ਦੀ ਹਾਲਤ",
+ "exif-gpsmeasuremode": "ਨਾਪ ਦਾ ਤਰੀਕਾ",
+ "exif-gpsdop": "ਨਾਪ ਦਾ ਸਹੀਪੁਣਾ",
"exif-gpsspeedref": "ਗਤੀ ਦੀ ਇਕਾਈ",
+ "exif-gpsspeed": "ਜੀ.ਪੀ.ਐੱਸ. ਵਸੂਲੀਏ ਦੀ ਰਫ਼ਤਾਰ",
"exif-gpstrack": "ਚਾਲ ਦੀ ਦਿਸ਼ਾ",
"exif-gpsimgdirection": "ਤਸਵੀਰ ਦੀ ਦਿਸ਼ਾ",
+ "exif-gpsdestdistance": "ਮੰਜ਼ਲ ਤੱਕ ਦੂਰੀ",
+ "exif-gpsprocessingmethod": "ਜੀ.ਪੀ.ਐੱਸ. ਕਾਰਵਾਈ ਦੇ ਤਰੀਕੇ ਦਾ ਨਾਂ",
"exif-gpsareainformation": "ਜੀਪੀਐੱਸ ਖੇਤਰ ਦਾ ਨਾਂ",
"exif-gpsdatestamp": "GPS ਮਿਤੀ",
+ "exif-keywords": "ਖ਼ਾਸ ਲਫ਼ਜ਼",
+ "exif-worldregioncreated": "ਦੁਨੀਆਂ ਦਾ ਉਹ ਇਲਾਕਾ ਜਿੱਥੇ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
"exif-countrycreated": "ਉਹ ਦੇਸ਼ ਜਿਸ ਵਿਚ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
"exif-countrycodecreated": "ਉਸ ਦੇਸ਼ ਦਾ ਕੋਡ ਜਿਸ ਵਿਚ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
"exif-provinceorstatecreated": "ਸੂਬਾ ਜਾਂ ਰਾਜ ਜਿਸ ਵਿਚ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
"exif-citycreated": "ਸ਼ਹਿਰ ਜਿਸ ਵਿਚ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
+ "exif-sublocationcreated": "ਸ਼ਹਿਰ ਦਾ ਉਹ ਟਿਕਾਣਾ ਜਿੱਥੇ ਇਹ ਤਸਵੀਰ ਲਈ ਗਈ ਸੀ",
"exif-worldregiondest": "ਦਰਸਾਇਆ ਗਿਆ ਦੁਨਿਆਵੀ ਖੇਤਰ",
"exif-countrydest": "ਦਰਸਾਇਆ ਗਿਆ ਦੇਸ਼",
"exif-countrycodedest": "ਦਰਸਾਏ ਗਏ ਦੇਸ਼ ਲਈ ਕੋਡ",
"exif-provinceorstatedest": "ਦਰਸਾਇਆ ਗਿਆ ਸੂਬਾ ਜਾਂ ਰਾਜ",
"exif-citydest": "ਦਰਸਾਇਆ ਗਿਆ ਸ਼ਹਿਰ",
+ "exif-sublocationdest": "ਵਿਖਾਏ ਗਏ ਸ਼ਹਿਰ ਦਾ ਟਿਕਾਣਾ",
"exif-objectname": "ਛੋਟਾ ਸਿਰਲੇਖ",
"exif-specialinstructions": "ਖ਼ਾਸ ਹਦਾਇਤਾਂ",
"exif-headline": "ਸਿਰਨਾਵਾਂ",
"exif-source": "ਸਰੋਤ",
"exif-editstatus": "ਤਸਵੀਰ ਦਾ ਸੰਪਾਦਕੀ ਰੁਤਬਾ",
+ "exif-urgency": "ਲੋੜਵੰਦੀ",
+ "exif-fixtureidentifier": "ਜੜਤ ਦਾ ਨਾਂ",
"exif-locationdest": "ਦਰਸਾਈ ਗਈ ਥਾਂ",
"exif-locationdestcode": "ਦਰਸਾਈ ਥਾਂ ਦਾ ਕੋਡ",
"exif-contact": "ਰਾਬਤੇ ਦੀ ਜਾਣਕਾਰੀ",
"exif-writer": "ਲੇਖਕ",
- "exif-languagecode": "ਭਾਸ਼ਾ",
+ "exif-languagecode": "ਬੋਲੀ",
"exif-iimversion": "IIM ਵਰਜ਼ਨ",
"exif-iimcategory": "ਸ਼੍ਰੇਣੀ",
+ "exif-iimsupplementalcategory": "ਪੂਰਕ ਸ਼੍ਰੇਣੀਆਂ",
+ "exif-datetimeexpires": "ਇਸ ਮਗਰੋਂ ਨ ਵਰਤੋ",
+ "exif-identifier": "ਸ਼ਨਾਖ਼ਤਕਾਰ",
"exif-lens": "ਵਰਤਿਆ ਗਿਆ ਲੈਨਜ਼",
"exif-serialnumber": "ਕੈਮਰੇ ਦਾ ਸੀਰੀਅਲ ਨੰਬਰ",
"exif-cameraownername": "ਕੈਮਰੇ ਦਾ ਮਾਲਕ",
"exif-label": "ਲੇਬਲ",
"exif-datetimemetadata": "ਮੈਟਾਡਾਟਾ ਦੀ ਆਖ਼ਰੀ ਤਬਦੀਲੀ ਦੀ ਮਿਤੀ",
"exif-nickname": "ਤਸਵੀਰ ਦਾ ਗ਼ੈਰ-ਰਸਮੀ ਨਾਂ",
+ "exif-rating": "ਦਰਜਾ (੫ ਵਿੱਚੋਂ)",
"exif-rightscertificate": "ਹੱਕਾਂ ਦੇ ਪ੍ਰਬੰਧ ਦਾ ਪ੍ਰਮਾਣ-ਪੱਤਰ",
"exif-copyrighted": "ਕਾਪੀਰਾਈਟ ਦਰਜਾ",
"exif-copyrightowner": "ਕਾਪੀਰਾਈਟ ਦਾ ਮਾਲਕ",
"exif-usageterms": "ਵਰਤੋਂ ਦੀਆਂ ਸ਼ਰਤਾਂ",
"exif-webstatement": "ਕਾਪੀਰਾਈਟ ਦਾ ਆਨਲਾਈਨ ਬਿਆਨ",
+ "exif-originaldocumentid": "ਮੂਲ ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਲੱਖਣ ਸ਼ਨਾਖ਼ਤ",
+ "exif-licenseurl": "ਨਕਲ-ਹੱਕ ਲਸੰਸ ਵਾਸਤੇ ਯੂ.ਆਰ.ਐੱਲ.",
"exif-pngfilecomment": "PNG ਫ਼ਾਈਲ ਦੀ ਟਿੱਪਣੀ",
"exif-disclaimer": "ਦਾਅਵੇ",
"exif-contentwarning": "ਸਮੱਗਰੀ ਸਬੰਧੀ ਚਿਤਾਵਨੀ",
@@ -1849,9 +1980,13 @@
"exif-personinimage": "ਦਰਸਾਇਆ ਗਿਆ ਇਨਸਾਨ",
"exif-originalimageheight": "ਕੱਟਣ ਤੋਂ ਪਹਿਲਾਂ ਤਸਵੀਰ ਦੀ ਉਚਾਈ",
"exif-originalimagewidth": "ਕੱਟਣ ਤੋਂ ਪਹਿਲਾਂ ਤਸਵੀਰ ਦੀ ਚੌੜਾਈ",
+ "exif-compression-1": "ਬੇਨਪੀੜਿਆ",
+ "exif-copyrighted-true": "ਨਕਲ-ਹੱਕ ਹੇਠ",
"exif-unknowndate": "ਅਣਪਛਾਤੀ ਮਿਤੀ",
"exif-orientation-1": "ਸਧਾਰਨ",
+ "exif-orientation-2": "ਲੇਟਵੇਂ ਲੋਟ ਤੁਣਕਿਆ",
"exif-orientation-3": "੧੮੦° ਘੁਮਾਇਆ ਗਿਆ",
+ "exif-orientation-4": "ਖੜ੍ਹੇ ਲੋਟ ਤੁਣਕਿਆ",
"exif-orientation-6": "90° ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਇਆ",
"exif-orientation-7": "90° ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਇਆ ਅਤੇ ਖੜ੍ਹਵੇਂ ਰੂਪ ਵਿੱਚ ਪਲਟਿਆ",
"exif-orientation-8": "90° ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਇਆ",
@@ -1862,17 +1997,34 @@
"exif-subjectdistance-value": "$1 ਮੀਟਰ",
"exif-meteringmode-0": "ਅਣਪਛਾਤਾ",
"exif-meteringmode-1": "ਔਸਤ",
+ "exif-meteringmode-3": "ਡੱਬ",
+ "exif-meteringmode-4": "ਬਹੁ-ਡੱਬ",
"exif-meteringmode-5": "ਪੈਟਰਨ",
+ "exif-meteringmode-6": "ਅਧੂਰਾ",
"exif-meteringmode-255": "ਹੋਰ",
"exif-lightsource-0": "ਅਣਜਾਣ",
+ "exif-lightsource-1": "ਦਿਨ ਦਾ ਚਾਨਣ",
+ "exif-lightsource-2": "ਫ਼ਲੋਰਚਾਨਣ",
+ "exif-lightsource-3": "ਟੰਗਸਟੱਨ (ਭਖਦਾ ਚਾਨਣ)",
"exif-lightsource-4": "ਫ਼ਲੈਸ਼",
"exif-lightsource-9": "ਵਧੀਆ ਮੌਸਮ",
"exif-lightsource-10": "ਬੱਦਲ ਵਾਲਾ ਮੌਸਮ",
+ "exif-lightsource-11": "ਛਾਂ",
"exif-lightsource-17": "ਮਿਆਰੀ ਚਾਨਣ A",
"exif-lightsource-18": "ਮਿਆਰੀ ਚਾਨਣ B",
"exif-lightsource-19": "ਮਿਆਰੀ ਚਾਨਣ C",
"exif-lightsource-255": "ਚਾਨਣ ਦਾ ਹੋਰ ਸਰੋਤ",
+ "exif-flash-fired-0": "ਲਿਸ਼ਕ ਨਹੀਂ ਵੱਜੀ",
+ "exif-flash-fired-1": "ਲਿਸ਼ਕ ਵੱਜੀ",
+ "exif-flash-mode-1": "ਲਿਸ਼ਕ ਦਾ ਲਾਜ਼ਮੀ ਵੱਜਣਾ",
+ "exif-flash-mode-2": "ਲਿਸ਼ਕ ਲਾਜ਼ਮੀ ਬੰਦ ਹੋਣੀ",
+ "exif-flash-mode-3": "ਆਪ-ਮੁਹਾਰਾ ਢੰਗ",
"exif-focalplaneresolutionunit-2": "ਇੰਚ",
+ "exif-sensingmethod-1": "ਬੇਪਰਿਭਾਸ਼ਤ",
+ "exif-customrendered-0": "ਆਮ ਕਾਰਵਾਈ",
+ "exif-customrendered-1": "ਲੋੜ ਮੁਤਾਬਕ ਕਾਰਵਾਈ",
+ "exif-exposuremode-0": "ਸਵੈ-ਉਘਾੜ",
+ "exif-exposuremode-1": "ਹੱਥੀਂ ਉਘਾੜ",
"exif-scenecapturetype-0": "ਸਟੈਂਡਰਡ",
"exif-scenecapturetype-1": "ਲੈਂਡਸਕੇਪ",
"exif-scenecapturetype-2": "ਪੋਰਟਰੇਟ",
@@ -1882,6 +2034,8 @@
"exif-contrast-1": "ਕੂਲ਼ਾ",
"exif-contrast-2": "ਕਰੜਾ",
"exif-saturation-0": "ਸਧਾਰਨ",
+ "exif-saturation-1": "ਘੱਟ ਰਜਾਓ",
+ "exif-saturation-2": "ਭਾਰੀ ਰਜਾਓ",
"exif-sharpness-0": "ਸਧਾਰਨ",
"exif-sharpness-1": "ਕੂਲਾ",
"exif-sharpness-2": "ਕਰੜਾ",
@@ -1904,8 +2058,10 @@
"exif-gpsdestdistance-k": "ਕਿਲੋਮੀਟਰ",
"exif-gpsdestdistance-m": "ਮੀਲ",
"exif-gpsdestdistance-n": "ਸਮੁੰਦਰੀ ਮੀਲ",
+ "exif-gpsdop-excellent": "ਉੱਤਮ ($1)",
"exif-gpsdop-good": "ਵਧੀਆ ($1)",
"exif-gpsdop-moderate": "ਠੀਕ-ਠਾਕ ($1)",
+ "exif-gpsdop-fair": "ਠੀਕ-ਠਾਕ ($1)",
"exif-gpsdop-poor": "ਘਟੀਆ ($1)",
"exif-objectcycle-a": "ਸਿਰਫ਼ ਸਵੇਰ",
"exif-objectcycle-p": "ਸਿਰਫ਼ ਸ਼ਾਮ",
@@ -1943,13 +2099,13 @@
"exif-urgency-normal": "ਸਧਾਰਨ ($1)",
"exif-urgency-low": "ਨੀਵਾਂ ($1)",
"exif-urgency-high": "ਉੱਚਾ ($1)",
- "watchlistall2": "ਸਭ",
"namespacesall": "ਸਭ",
"monthsall": "ਸਭ",
"confirmemail": "ਈ-ਮੇਲ ਪਤਾ ਤਸਦੀਕ ਕਰੋ",
"confirmemail_send": "ਇੱਕ ਤਸਦੀਕੀ ਕੋਡ ਭੇਜੋ",
"confirmemail_sent": "ਤਸਦੀਕੀ ਈਮੇਲ ਭੇਜੀ ਗਈ।",
"confirmemail_invalid": "ਗਲਤ ਪੁਸ਼ਟੀ ਕੋਡ ਹੈ। ਕੋਡ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਹੋ ਸਕਦੀ ਹੈ।",
+ "confirmemail_needlogin": "ਆਪਣਾ ਈਮੇਲ ਪਤਾ ਤਸਦੀਕ ਕਰਾਉਣ ਵਾਸਤੇ $1 ਜੀ।",
"confirmemail_success": "ਤੁਹਾਡਾ ਈਮੇਲ ਪਤਾ ਤਸਦੀਕ ਹੋ ਚੁੱਕਾ ਹੈ।\nਤੁਸੀਂ ਹੁਣ [[Special:UserLogin|ਲਾਗਇਨ]] ਕਰ ਕੇ ਵਿਕੀ ਦਾ ਮਜ਼ਾ ਸਕਦੇ ਹੋ।",
"confirmemail_loggedin": "ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਹੁਣ ਤਸਦੀਕ ਹੋ ਚੁੱਕਾ ਹੈ।",
"confirmemail_subject": "{{SITENAME}} ਈ-ਮੇਲ ਪਤਾ ਤਸਦੀਕ",
@@ -1983,6 +2139,7 @@
"table_pager_empty": "ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ",
"autosumm-blank": "ਸਫ਼ੇ ਨੂੰ ਖ਼ਾਲੀ ਕੀਤਾ",
"autosumm-new": "\"$1\" ਨਾਲ਼ ਸਫ਼ਾ ਬਣਾਇਆ",
+ "autosumm-newblank": "ਖ਼ਾਲੀ ਸਫ਼ਾ ਬਣਾਇਆ",
"watchlistedit-normal-title": "ਨਿਗਰਾਨੀ-ਲਿਸਟ ਸੋਧੋ",
"watchlistedit-normal-legend": "ਸਿਰਲੇਖਾਂ ਨੂੰ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿੱਚੋਂ ਹਟਾਓ",
"watchlistedit-normal-submit": "ਸਿਰਲੇਖ ਹਟਾਓ",
@@ -1995,17 +2152,26 @@
"watchlistedit-raw-done": "ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਅੱਪਡੇਟ ਹੋ ਗਈ ਹੈ।",
"watchlistedit-raw-added": "{{PLURAL:$1|1 ਸਿਰਲੇਖ ਸ਼ਾਮਲ ਕੀਤਾ|$1 ਸਿਰਲੇਖ ਸ਼ਾਮਲ ਕੀਤੇ}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 ਸਿਰਲੇਖ ਹਟਾਇਆ|$1 ਸਿਰਲੇਖ ਹਟਾਏ}}:",
+ "watchlistedit-clear-titles": "ਸਿਰਲੇਖ:",
+ "watchlistedit-clear-submit": "ਨਿਗਰਾਨ-ਸੂਚੀ ਸਾਫ਼ ਕਰੋ (ਇਹ ਪੱਕੇ ਤੌਰ 'ਤੇ ਹੈ!)",
+ "watchlistedit-clear-done": "ਤੁਹਾਡੀ ਨਿਗਰਾਨ-ਸੂਚੀ ਸਾਫ਼ ਕਰ ਦਿੱਤੀ ਗਈ ਹੈ।",
+ "watchlistedit-too-many": "ਇੱਥੇ ਵਿਖਾਉਣ ਵਾਸਤੇ ਬਾਹਲੇ ਸਫ਼ੇ ਹਨ।",
+ "watchlisttools-clear": "ਨਿਗਰਾਨ-ਸੂਚੀ ਸਾਫ਼ ਕਰੋ।",
"watchlisttools-view": "ਸਬੰਧਤ ਤਬਦੀਲੀਆਂ ਵੇਖੋ",
"watchlisttools-edit": "ਨਿਗਰਾਨੀ-ਸੂਚੀ ਵੇਖੋ ’ਤੇ ਸੋਧੋ",
"watchlisttools-raw": "ਕੱਚੀ ਨਿਗਰਾਨ-ਸੂਚੀ ਸੋਧੋ",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ਗੱਲ-ਬਾਤ]])",
"duplicate-defaultsort": "ਪੁਰਾਣੀ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $1 ਦੇ ਬਜਾਏ ਹੁਣ ਮੂਲ ਕਰਮਾਂਕਨ ਕੁੰਜੀ $2 ਹੋਵੇਗੀ।",
"version": "ਵਰਜਨ",
- "version-skins": "ਸਕਿਨਾਂ",
+ "version-skins": "ਥਾਪੀਆਂ ਖੱਲਾਂ",
"version-specialpages": "ਖ਼ਾਸ ਸਫ਼ੇ",
+ "version-variables": "ਬਦਲਣਹਾਰ",
+ "version-antispam": "ਫ਼ਜ਼ੂਲ ਮਨਾਹੀ",
"version-other": "ਹੋਰ",
"version-hooks": "ਹੁੱਕਾਂ",
"version-hook-name": "ਹੁੱਕ ਦਾ ਨਾਂ",
- "version-license": "ਲਸੰਸ",
+ "version-no-ext-name": "[ਕੋਈ ਨਾਂ ਨਹੀਂ]",
+ "version-license": "ਮੀਡੀਆਵਿਕੀ ਲਸੰਸ",
"version-ext-license": "ਲਸੰਸ",
"version-ext-colheader-name": "ਇਕਸਟੈਨਸ਼ਨ",
"version-skin-colheader-name": "ਸਕਿਨ",
@@ -2027,6 +2193,7 @@
"redirect-lookup": "ਲੱਭੋ:",
"redirect-value": "ਮੁੱਲ:",
"redirect-user": "ਵਰਤੋਂਕਾਰ ਦੀ ਆਈ.ਡੀ.",
+ "redirect-page": "ਸਫ਼ੇ ਦੀ ਸ਼ਨਾਖ਼ਤ",
"redirect-revision": "ਸਫ਼ੇ ਦੀ ਦੁਹਰਾਈ",
"redirect-file": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ",
"redirect-not-exists": "ਮੁੱਲ ਲੱਭਿਆ ਨਹੀਂ",
@@ -2052,14 +2219,14 @@
"blankpage": "ਖ਼ਾਲੀ ਸਫ਼ਾ",
"intentionallyblankpage": "ਇਹ ਸਫ਼ਾ ਜਾਣ-ਬੁੱਝ ਕੇ ਖ਼ਾਲੀ ਛੱਡਿਆ ਗਿਆ ਹੈ।",
"external_image_whitelist": " #ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ <pre>\n#ਹੇਠਾਂ ਓਹੀ ਐਕਸਪ੍ਰੈਸ਼ਨ ਪਾਓ (ਜਿਹੜਾ ਹਿੱਸਾ // ਦੇ ਵਿਚਾਲੇ ਹੈ)\n#ਇਹ ਬਾਹਰੀ ਤਸਵੀਰਾਂ ਦੇ URLs (ਹੌਟਲਿੰਕਡ) ਨਾਲ ਮਿਲਣਗੀਆਂ\n#ਜਿਹੜੀਆਂ ਮਿਲਣਗੀਆਂ ਓਹ ਬਤੌਰ ਤਸਵੀਰਾਂ ਦਿੱਸਣਗੀਆਂ ਨਹੀਂ ਤਾਂ ਤਸਵੀਰ ਦਾ ਸਿਰਫ਼ ਲਿੰਕ ਨਜ਼ਰ ਆਵੇਗਾ\n#'#' ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੀਆਂ ਲਾਈਨਾਂ ਟਿੱਪਣੀਆਂ ਵਾਂਗ ਲਈਆਂ ਜਾਂਦੀਆਂ ਹਨ\n#ਇਹ ਕੇਸ-ਇਨਸੈਂਸਟਿਵ ਹੈ\n\n#ਸਾਰੇ ਰੈਜੈਕਸ ਫ਼ਰੈਗਮੈਂਟ ਇਸ ਲਾਈਨ ਤੋਂ ਉੱਪਰ ਪਾਓ। ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ </pre>",
- "tag-filter": "[[Special:Tags|ਟੈਗ]] ਫਿਲਟਰ:",
+ "tag-filter": "[[Special:Tags|ਨਿਸ਼ਾਨ]] ਪੌਣੀ:",
"tag-filter-submit": "ਛਾਨਣੀ",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ਟੈਗ}}]]: $2)",
"tags-title": "ਟੈਗ",
"tags-tag": "ਟੈਗ ਦਾ ਨਾਮ",
"tags-description-header": "ਅਰਥ ਦਾ ਪੂਰਾ ਬਿਓਰਾ",
"tags-active-header": "ਸਰਗਰਮ?",
- "tags-hitcount-header": "ਟੈਗ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ",
+ "tags-hitcount-header": "ਨਿਸ਼ਾਨਦੇਹ ਤਬਦੀਲੀਆਂ",
"tags-active-yes": "ਹਾਂ",
"tags-active-no": "ਨਹੀਂ",
"tags-edit": "ਸੋਧੋ",
@@ -2088,6 +2255,7 @@
"htmlform-chosen-placeholder": "ਕੋਈ ਚੋਣ ਚੁਣੋ",
"htmlform-cloner-create": "ਹੋਰ ਜੋੜੋ",
"htmlform-cloner-delete": "ਹਟਾਓ",
+ "htmlform-cloner-required": "ਘੱਟੋ-ਘੱਟ ਇੱਕ ਮੁੱਲ ਚਾਹੀਦਾ ਹੈ।",
"logentry-delete-delete": "$1 ਨੇ ਸਫ਼ਾ $3 ਮਿਟਾਇਆ",
"revdelete-content-hid": "ਸਮੱਗਰੀ ਲੁਕਾਈ ਹੋਈ",
"revdelete-summary-hid": "ਸੋਧ ਸਾਰ ਲੁਕਾਈ ਹੋਈ",
@@ -2100,15 +2268,16 @@
"logentry-newusers-create": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ $1 ਬਣਾਇਆ ਗਿਆ",
"logentry-newusers-create2": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ $3, $1 ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਸੀ",
"rightsnone": "(ਕੋਈ ਨਹੀਂ)",
- "feedback-subject": "ਵਿਸ਼ਾ:",
- "feedback-message": "ਸੁਨੇਹਾ:",
- "feedback-cancel": "ਰੱਦ ਕਰੋ",
- "feedback-submit": "ਵਿਚਾਰ ਦਿਓ",
+ "revdelete-summary": "ਸੰਖੇਪ ਸੋਧ",
"feedback-adding": "ਸਫ਼ੇ ਨਾਲ਼ ਵਿਚਾਰ ਜੁੜ ਰਹੇ ਹਨ...",
+ "feedback-bugnew": "ਮੈਂ ਚੈੱਕ ਕੀਤਾ। ਇੱਕ ਨਵੇਂ ਦੋਸ਼ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
+ "feedback-cancel": "ਰੱਦ ਕਰੋ",
+ "feedback-close": "ਹੋ ਗਿਆ",
"feedback-error2": "ਦੋਸ਼:ਸੋਧ ਫੇਲ੍ਹ ਹੋਈ",
"feedback-error3": "ਦੋਸ਼:API ਵੱਲੋਂ ਕੋਈ ਜੁਆਬ ਨਹੀਂ",
- "feedback-close": "ਹੋ ਗਿਆ",
- "feedback-bugnew": "ਮੈਂ ਚੈੱਕ ਕੀਤਾ। ਇੱਕ ਨਵੇਂ ਦੋਸ਼ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
+ "feedback-message": "ਸੁਨੇਹਾ:",
+ "feedback-subject": "ਵਿਸ਼ਾ:",
+ "feedback-submit": "ਹਵਾਲੇ ਕਰੋ",
"searchsuggest-search": "ਖੋਜ",
"api-error-badaccess-groups": "ਤੁਹਾਨੂੰ ਇਸ ਵਿਕੀ ਉੱਤੇ ਫ਼ਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
"api-error-badtoken": "ਅੰਦਰੂਨੀ ਦੋਸ਼: ਗ਼ਲਤ ਟੋਕਨ",
@@ -2145,11 +2314,47 @@
"duration-centuries": "$1 {{PLURAL:$1|ਸਦੀ|ਸਦੀਆਂ}}",
"duration-millennia": "$1 {{PLURAL:$1|ਸਾਹਸ਼ਤਾਬਦੀ|ਸਾਹਸ਼ਤਾਬਦੀਆਂ}}",
"rotate-comment": "ਤਸਵੀਰ ਨੂੰ ਘੜੀ ਦੇ ਰੁਖ ਵਿਚ $1 {{PLURAL:$1|ਡਿਗਰੀ|ਡਿਗਰੀਆਂ}} ਨਾਲ਼ ਘੁਮਾਇਆ ਗਿਆ",
+ "limitreport-walltime": "ਹਕੀਕੀ ਸਮੇਂ ਦੀ ਵਰਤੋਂ",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|ਸਕਿੰਟ|ਸਕਿੰਟ}}",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|ਬਾਈਟ|ਬਾਈਟ}}",
+ "expand_templates_output": "ਨਤੀਜਾ",
"expand_templates_ok": "ਠੀਕ ਹੈ",
"expand_templates_remove_comments": "ਟਿੱਪਣੀਆਂ ਹਟਾਓ",
"expand_templates_preview": "ਝਲਕ",
"pagelang-name": "ਸਫ਼ਾ",
"pagelang-language": "ਭਾਸ਼ਾ",
"pagelang-use-default": "ਮੂਲ ਭਾਸ਼ਾ ਵਰਤੋਂ",
- "pagelang-select-lang": "ਭਾਸ਼ਾ ਚੁਣੋ"
+ "pagelang-select-lang": "ਭਾਸ਼ਾ ਚੁਣੋ",
+ "right-pagelang": "ਸਫ਼ੇ ਦੀ ਭਾਸ਼ਾ ਬਦਲੋ",
+ "action-pagelang": "ਸਫ਼ੇ ਦੀ ਭਾਸ਼ਾ ਬਦਲੋ",
+ "mediastatistics-table-count": "ਫ਼ਾਈਲਾਂ ਦੀ ਗਿਣਤੀ",
+ "mediastatistics-table-totalbytes": "ਮਿਲ਼ਵਾਂ ਅਕਾਰ",
+ "mediastatistics-header-unknown": "ਅਣਪਛਾਤਾ",
+ "mediastatistics-header-audio": "ਆਡੀਓ",
+ "mediastatistics-header-video": "ਵੀਡੀਓਆਂ",
+ "mediastatistics-header-office": "ਦਫ਼ਤਰ",
+ "mediastatistics-header-text": "ਲਿਖਤੀ",
+ "json-error-syntax": "ਵਾਕ-ਵਿਉਂਤ 'ਚ ਦੋਸ਼",
+ "special-characters-group-latin": "ਲਾਤੀਨੀ",
+ "special-characters-group-latinextended": "ਲਾਤੀਨੀ ਤੋਂ ਛੁੱਟ",
+ "special-characters-group-ipa": "ਆਈ੦ਪੀ੦ਏ",
+ "special-characters-group-symbols": "ਨਿਸ਼ਾਨ",
+ "special-characters-group-greek": "ਯੂਨਾਨੀ",
+ "special-characters-group-cyrillic": "ਸਿਰੀਲਿਕ",
+ "special-characters-group-arabic": "ਅਰਬੀ",
+ "special-characters-group-arabicextended": "ਅਰਬੀ ਵਿਸਥਾਰੀ",
+ "special-characters-group-persian": "ਫ਼ਾਰਸੀ",
+ "special-characters-group-hebrew": "ਹਿਬਰੂ",
+ "special-characters-group-bangla": "ਬਾਂਗਲਾ",
+ "special-characters-group-tamil": "ਤਾਮਿਲ",
+ "special-characters-group-telugu": "ਤੇਲਗੂ",
+ "special-characters-group-sinhala": "ਸਿਨਹਾਲਾ",
+ "special-characters-group-gujarati": "ਗੁਜਰਾਤੀ",
+ "special-characters-group-devanagari": "ਦੇਵਨਾਗਰੀ",
+ "special-characters-group-thai": "ਥਾਈ",
+ "special-characters-group-lao": "ਲਾਓ",
+ "special-characters-group-khmer": "ਖ਼ਮੇਰ",
+ "special-characters-title-endash": "ਅੰਗਰੇਜ਼ੀ ਡੈਸ਼",
+ "special-characters-title-emdash": "em ਡੈਸ਼",
+ "special-characters-title-minus": "ਘਟਾਓ ਦਾ ਨਿਸ਼ਾਨ"
}
diff --git a/languages/i18n/pag.json b/languages/i18n/pag.json
index 57e52a5b..e7e7896f 100644
--- a/languages/i18n/pag.json
+++ b/languages/i18n/pag.json
@@ -1,256 +1,246 @@
{
- "@metadata": {
- "authors": [
- "Arikasikis",
- "Spacebirdy"
- ]
- },
- "tog-enotifwatchlistpages": "Manpa-awit na e-mail ed siak no abalo may sakey ya bolong ya babantayan ko",
- "underline-always": "Naynay",
- "underline-never": "Andin-balot",
- "category_header": "Saray artikulo ed category ya \"$1\"",
- "about": "Nipakar ed",
- "article": "Bolong na laman",
- "cancel": "I-tonda",
- "mypage": "Say bolong ko",
- "mytalk": "Say tongtongan ko",
- "anontalk": "Tongtongan para ed sayan IP",
- "and": "&#32;san",
- "qbpageoptions": "Ayan bolong",
- "returnto": "Impawel ed $1.",
- "help": "Tolong",
- "search": "Anapen",
- "searchbutton": "Anapen",
- "go": "Ula",
- "searcharticle": "Ula",
- "history": "Awaran na sayan bolong",
- "history_short": "awaran na sayan bolong",
- "printableversion": "Naigalot ya bersion",
- "permalink": "Masiansian gawing",
- "edit": "Baloen o dagdagan",
- "delete": "Buralen",
- "deletethispage": "Buralen so ayan page",
- "protect": "Iyagel",
- "protectthispage": "Iyagel yan bolong",
- "unprotect": "aga la iyagel",
- "unprotectthispage": "Aga la iyagel yan bolong",
- "newpage": "Balon bolong",
- "talkpage": "Pantongtongan yan bolong",
- "specialpage": "Niduman Bolong",
- "articlepage": "Nengnengen so content page",
- "talk": "Tongtongan",
- "userpage": "Basaen so bolong na manag-usar",
- "mediawikipage": "Nengnengen so bolong na pakabat",
- "viewhelppage": "Nengnengen so bolong na tolong",
- "categorypage": "Nengnengen so bolong na saray category",
- "viewtalkpage": "Nengnengen so tongtongan",
- "otherlanguages": "Diad arom ran salita",
- "lastmodifiedat": "Say ayan bolong: otet ya binalo nen $2, $1.",
- "protectedpage": "Iyayagel yan bolong",
- "jumptosearch": "anapen",
- "aboutsite": "Nipakar ed {{SITENAME}}",
- "aboutpage": "Project:Nipaakar",
- "currentevents": "Saray nagagawa natan",
- "currentevents-url": "Project:Saray nagagawa natan",
- "edithelp": "Tolong nipakar ed panagbalo na artikulo",
- "mainpage": "Arapan ya Bolong",
- "mainpage-description": "Arapan ya Bolong",
- "portal": "Pwerta na komyunidad",
- "portal-url": "Project:Pwerta na Komyunidad",
- "badaccess-group0": "Agmo sarag ya gaween so action ya kekerewen mo.",
- "youhavenewmessages": "Walay $1 ($2).",
- "youhavenewmessagesmulti": "Walay balo ran pakabat mo ed $1",
- "viewdeleted": "Nengnengen so $1?",
- "nstab-user": "Bolong na manag-usar",
- "nstab-mediawiki": "Pakabat",
- "badarticleerror": "Aga sarag ya gaween so ayan action ed sayan bolong.",
- "cannotdelete": "Aga nabural so nibagan bolong o file. (Sarag ton abural la na arom.)",
- "badtitle": "Aga sarag ya titulo",
- "viewsource": "Nengnengen so pinanlapuan",
- "viewsourcetext": "Sarag mon nengnengen san kopyaen so pinanlapuan na ayan bolong:",
- "yourdomainname": "Say domain mo",
- "login": "Onloob",
- "logout": "Paway",
- "userlogout": "Paway",
- "createaccount": "Mangawa na account",
- "gotaccountlink": "Onloob",
- "badretype": "Aga parehas so en-type mo ran password.",
- "acct_creation_throttle_hit": "Sorry, nangawala ka la na $1 account. Agka la makapangawa na account.",
- "accountcreated": "Agawa so account",
- "accountcreatedtext": "Agawa la so user account para $1.",
- "changepassword": "Salatan so password",
- "newpassword": "Balon password:",
- "link_tip": "Gawing ed loob",
- "minoredit": "Melag yan edit.",
- "watchthis": "Bantayan yan bolong",
- "preview": "Nengnengen",
- "showdiff": "Ipanengneng so binalo",
- "anoneditwarning": "'''Pasakbay:''' Agka ni limmoob. Aka-record so IP address mo ed agawgawa ed bolong.",
- "blockedtitle": "Sebel ed sayan manag-usar",
- "blockednoreason": "anggapon katunungan so inter",
- "whitelistedittext": "Nakaukulan mo ya $1 umpian nabalo o nadagdagan ray bolobolong.",
- "loginreqtitle": "Nakaukulan kan Onloob",
- "loginreqlink": "onloob",
- "loginreqpagetext": "Nakaukulan kan $1 umpian nanengneng so arom ran bolobolong.",
- "accmailtitle": "Say Password impawet la.",
- "accmailtext": "Empawet ed $2 so password para ed $1.",
- "newarticle": "(Balo)",
- "editing": "Babaloen so $1",
- "yourdiff": "Saray niduma",
- "copyrightwarning": "Tandaan komon ya amin ya contribution para ed {{SITENAME}} et nonoten ya pinaolian onong ed $2 (nengnengen so $1 para ed detalye).\nNo ag mo labay ya say inkorit mo ed sarag ya baloen odino ibonog ed anggan siopa, ag mo ipapalima dia.<br />\nSan ipropromisam met ya insulat mo yan dili o kinopyam ya manlapo ed sakey ya public domain odino parehas ya libren resource.\n'''AG MANPALIMA NA KIMEY YA WALAY COPYRIGHT TO YA ANGGAPOY ABOLOY!'''",
- "cantcreateaccounttitle": "Aga makagawa na account",
- "last": "sampot",
- "histfirst": "Sankaunaan",
- "histlast": "Sankautetan",
- "mypreferences": "Saray preference ko",
- "datedefault": "Anggapoy preference",
- "prefs-datetime": "Bilang na agew san oras",
- "prefs-rc": "Sampot ran binalo",
- "prefs-watchlist": "Listaan na babantayan",
- "prefs-editing": "Babaloen",
- "searchresultshead": "Anapen",
- "yourrealname": "Tuwan ngaran:",
- "badsiglength": "Andukey ya maong so nickname. Say dukey to dapat mas daiset en say $1 ya character.",
- "userrights-user-editname": "Isulat so username:",
- "recentchanges": "Sampot ran binalo",
- "hide": "Yamot",
- "show": "Ipanengneng",
- "recentchangeslinked": "Kabiangan ran binalo",
- "recentchangeslinked-feed": "Kabiangan ran binalo",
- "recentchangeslinked-toolbox": "Kabiangan ran binalo",
- "upload": "Mangisigep na file",
- "uploadlog": "Isigep so log",
- "filesource": "Pinanlapuan:",
- "uploadedfiles": "Insegep ran file",
- "badfilename": "Binalo so ngaran na file, umpian \"$1\" so balon ngaran to.",
- "sourcefilename": "Filename na pinanlapuan:",
- "watchthisupload": "Bantayan yan bolong",
- "listfiles_name": "Ngaran",
- "imagelinks": "Saray Gawing",
- "download": "mangileksab (download)",
- "unusedtemplateswlh": "arom ran gawing",
- "randompage": "Random ya bolong",
- "randompage-nopages": "Anggapoy bolong ya wadya ed ayan namespace.",
- "withoutinterwiki": "Saray bolobolong ya anggapoy gawing ya language",
- "withoutinterwiki-summary": "Anggapoy gawin paulad version na arum ran salita so ontombok ran bolobolong:",
- "shortpages": "Antikey ran bolong",
- "longpages": "Andokoy ran bolong",
- "protectedpages": "Iyayagel ran bolobolong",
- "newpages": "Balo ran bolong",
- "ancientpages": "Sankadaanan ran bolobolong",
- "move": "Iyales",
- "movethispage": "Iyales yan bolong",
- "booksources": "Saray liblibron pinanlapuan",
- "booksources-search-legend": "Mananap na saray libron pinanlapuan",
- "booksources-go": "Ula",
- "all-logs-page": "Amin ran log",
- "allpages": "Amin ya bolobolong",
- "alphaindexline": "$1 anggad $2",
- "nextpage": "Ontombok ya page ($1)",
- "allpagesfrom": "Ipanengneng ray bolobolong ya manlapod:",
- "allarticles": "Amin ran bolobolong",
- "allinnamespace": "Amin ya bolobolong ($1 namespace)",
- "allpagessubmit": "Ula",
- "allpagesprefix": "Ipanengneng so saray bolobolong ya walay prefix:",
- "linksearch": "Anapen ramay gawing ed web",
- "linksearch-pat": "Anapen so pattern:",
- "linksearch-ok": "Anapen",
- "emailuser": "E-mail so ayan user",
- "emailfrom": "Manlapud",
- "emailto": "Para ed",
- "emailmessage": "Pakabat",
- "emailsend": "Paawit",
- "emailsent": "Say e-mail impawet la",
- "emailsenttext": "Impawit la so e-mail message mo.",
- "mywatchlist": "Listaan na babantayan ko",
- "watchnologin": "Agka ni akaloob",
- "addedwatchtext": "Impila so bolong ya \"[[:$1]]\" diad [[Special:Watchlist|listaan na babantayan]] mo. Isulat diman so saray ontombok ran idagdag o panagbalo ed sayan bolong san diad bolong na tongtongan. San akasulat ran '''mapatnag''' (bolded) ed [[Special:RecentChanges|listaan na saray sampot ran binalo]] umpian mas maganom ya nanengneng.\n\nNo labay mon ekalen may bolong diad listaan na babantayan, tapik mo labat so \"ekalen ed babantayan\" (unwatch) diad gilig ya bar.",
- "watch": "bantayan",
- "watchthispage": "Bantayan yan bolong",
- "watching": "Babantayan...",
- "created": "agawa",
- "changed": "asalatan",
- "deletepage": "Buralen so bolong",
- "confirm": "Paletan",
- "exblank": "Anggapoy laman na bolong",
- "actioncomplete": "Asumpal lan agawa",
- "deletedtext": "Abural lay \"$1\".\nPinengneng so $2 para ed listaan na saray abural ran balo.",
- "deletecomment": "Katonongan",
- "prot_1movedto2": "say [[$1]] enyales paula ed [[$2]]",
- "protect-legend": "Palitaen so pangiyagel",
- "protect-level-sysop": "Sysops labat",
- "undelete": "Nengnengen so inekal ran bolobolong",
- "viewdeletedpage": "Nengnengen so inekal ran bolong",
- "undelete-search-box": "Anapen ramay binural ran bolobolong",
- "undelete-search-prefix": "Ipanengneng ray bolobolong ya mangagapo ed:",
- "undelete-search-submit": "Anapen",
- "contributions": "Saray contribution na user",
- "mycontris": "Saray entolong ko",
- "year": "Taon:",
- "sp-contributions-newbies-sub": "Para balo ran account",
- "sp-contributions-submit": "Anapen",
- "whatlinkshere": "Antoray akaturo dia",
- "whatlinkshere-title": "Saray bolong ya aka-gawing ed $1",
- "whatlinkshere-page": "Bolong:",
- "blockip": "Isara ed para ayan manag-usar",
- "ipbreason": "Katonongan",
- "ipbsubmit": "Isebel ed sayan manag-usar",
- "badipaddress": "Aga nayarin IP address",
- "ipusubmit": "Aga la isebel so ayan address",
- "ipblocklist": "Listaan na saray sebel ran IP address san username",
- "ipblocklist-submit": "Anapen",
- "expiringblock": "nabalang no $1 $2",
- "blocklink": "isara",
- "contribslink": "saray entolong to",
- "move-page-legend": "Iyales so bolong",
- "movearticle": "Iyales so bolong",
- "movepagebtn": "Iyales so bolong",
- "pagemovedsub": "Asumpal lan inyales",
- "articleexists": "Wala lay bolong to may ngaran ya atan, odino aga valid so pinilim ya ngaran. Pili ka pa na arom ya ngaran.",
- "movereason": "Katonongan",
- "delete_and_move": "Buralen san iyales",
- "delete_and_move_confirm": "On, buralen yan page",
- "export-submit": "Ipaawit",
- "export-addcat": "Iyarom",
- "allmessages": "Saray pakabat na oksoy",
- "allmessagesname": "Ngaran",
- "allmessagestext": "Aya so listaan na amin ya pakabat na oksoy ya naanap ed MediaWiki namespace.",
- "filemissing": "Nababalang so file",
- "importnotext": "Andilugan odino anggapoy laman ton text",
- "tooltip-pt-logout": "Paway",
- "tooltip-ca-viewsource": "Iya-yagel yan bolong. Sarag mon nengnengen so pinanlapuan to.",
- "tooltip-ca-protect": "Iyagel yan bolong",
- "tooltip-ca-move": "Iyales so ayan bolong",
- "tooltip-search": "Anapen {{SITENAME}}",
- "tooltip-p-logo": "Arapan ya Bolong",
- "tooltip-t-specialpages": "Listaan na amin ran niduman bolobolong",
- "tooltip-ca-nstab-user": "Nengnengen so bolong na manag-usar",
- "tooltip-ca-nstab-mediawiki": "Nengnengen so pakabat na oksoy",
- "lastmodifiedatby": "Sampot ya binalo yan bolong nen agew ya $2, $1 nen $3.",
- "ilsubmit": "Anapen",
- "exif-filesource": "File na pinanlapuan",
- "watchlistall2": "amin",
- "namespacesall": "amin",
- "monthsall": "amin",
- "confirmemail": "Kumpirmaen so E-mail address",
- "confirmemail_sent": "Empawet so confirmation e-mail.",
- "confirmemail_needlogin": "Nakaukulan mo ya $1 umpian nakompirma so email address mo.",
- "confirmemail_success": "Akompirma so e-mail address mo. Sarag mo lay man-log-in san panliketan so wiki.",
- "confirmemail_loggedin": "Akompira la so e-mail address mo.",
- "deletedwhileediting": "Pasakbay: Abural yan bolong nen ginapuan mon baloen!",
- "confirm-purge-top": "Ekalen so cache na sayan bolong?",
- "imgmultipagenext": "ontombok ya bolong →",
- "imgmultigo": "Ula!",
- "table_pager_next": "Ontombok ya bolong",
- "table_pager_prev": "Embeneg ya bolong",
- "table_pager_first": "Unaan ya bolong",
- "table_pager_last": "Otet ya bolong",
- "table_pager_limit_submit": "Ula",
- "autosumm-blank": "Ekalen so amin ya laman na bolong",
- "autosumm-replace": "Salatan yan bolong na '$1'",
- "autoredircomment": "Ituturo paulad [[$1]]",
- "autosumm-new": "Balon bolong: $1",
- "livepreview-loading": "Ilulugan…",
- "livepreview-ready": "Ilulugan… Akaparaan!",
- "specialpages": "Niduma ran bolobolong"
+ "@metadata": {
+ "authors": [
+ "Arikasikis",
+ "Spacebirdy"
+ ]
+ },
+ "tog-enotifwatchlistpages": "Manpa-awit na e-mail ed siak no abalo may sakey ya bolong ya babantayan ko",
+ "underline-always": "Naynay",
+ "underline-never": "Andin-balot",
+ "category_header": "Saray artikulo ed category ya \"$1\"",
+ "about": "Nipakar ed",
+ "article": "Bolong na laman",
+ "cancel": "I-tonda",
+ "mypage": "Say bolong ko",
+ "mytalk": "Say tongtongan ko",
+ "anontalk": "Tongtongan para ed sayan IP",
+ "and": "&#32;san",
+ "qbpageoptions": "Ayan bolong",
+ "returnto": "Impawel ed $1.",
+ "help": "Tolong",
+ "search": "Anapen",
+ "searchbutton": "Anapen",
+ "go": "Ula",
+ "searcharticle": "Ula",
+ "history": "Awaran na sayan bolong",
+ "history_short": "awaran na sayan bolong",
+ "printableversion": "Naigalot ya bersion",
+ "permalink": "Masiansian gawing",
+ "edit": "Baloen o dagdagan",
+ "delete": "Buralen",
+ "deletethispage": "Buralen so ayan page",
+ "protect": "Iyagel",
+ "protectthispage": "Iyagel yan bolong",
+ "unprotect": "aga la iyagel",
+ "unprotectthispage": "Aga la iyagel yan bolong",
+ "newpage": "Balon bolong",
+ "talkpage": "Pantongtongan yan bolong",
+ "specialpage": "Niduman Bolong",
+ "articlepage": "Nengnengen so content page",
+ "talk": "Tongtongan",
+ "userpage": "Basaen so bolong na manag-usar",
+ "mediawikipage": "Nengnengen so bolong na pakabat",
+ "viewhelppage": "Nengnengen so bolong na tolong",
+ "categorypage": "Nengnengen so bolong na saray category",
+ "viewtalkpage": "Nengnengen so tongtongan",
+ "otherlanguages": "Diad arom ran salita",
+ "lastmodifiedat": "Say ayan bolong: otet ya binalo nen $2, $1.",
+ "protectedpage": "Iyayagel yan bolong",
+ "jumptosearch": "anapen",
+ "aboutsite": "Nipakar ed {{SITENAME}}",
+ "aboutpage": "Project:Nipaakar",
+ "currentevents": "Saray nagagawa natan",
+ "currentevents-url": "Project:Saray nagagawa natan",
+ "edithelp": "Tolong nipakar ed panagbalo na artikulo",
+ "mainpage": "Arapan ya Bolong",
+ "mainpage-description": "Arapan ya Bolong",
+ "portal": "Pwerta na komyunidad",
+ "portal-url": "Project:Pwerta na Komyunidad",
+ "badaccess-group0": "Agmo sarag ya gaween so action ya kekerewen mo.",
+ "youhavenewmessages": "Walay $1 ($2).",
+ "youhavenewmessagesmulti": "Walay balo ran pakabat mo ed $1",
+ "viewdeleted": "Nengnengen so $1?",
+ "nstab-user": "Bolong na manag-usar",
+ "nstab-mediawiki": "Pakabat",
+ "badarticleerror": "Aga sarag ya gaween so ayan action ed sayan bolong.",
+ "cannotdelete": "Aga nabural so nibagan bolong o file. (Sarag ton abural la na arom.)",
+ "badtitle": "Aga sarag ya titulo",
+ "viewsource": "Nengnengen so pinanlapuan",
+ "viewsourcetext": "Sarag mon nengnengen san kopyaen so pinanlapuan na ayan bolong:",
+ "yourdomainname": "Say domain mo",
+ "login": "Onloob",
+ "logout": "Paway",
+ "userlogout": "Paway",
+ "createaccount": "Mangawa na account",
+ "gotaccountlink": "Onloob",
+ "badretype": "Aga parehas so en-type mo ran password.",
+ "acct_creation_throttle_hit": "Sorry, nangawala ka la na $1 account. Agka la makapangawa na account.",
+ "accountcreated": "Agawa so account",
+ "accountcreatedtext": "Agawa la so user account para $1.",
+ "changepassword": "Salatan so password",
+ "newpassword": "Balon password:",
+ "link_tip": "Gawing ed loob",
+ "minoredit": "Melag yan edit.",
+ "watchthis": "Bantayan yan bolong",
+ "preview": "Nengnengen",
+ "showdiff": "Ipanengneng so binalo",
+ "anoneditwarning": "'''Pasakbay:''' Agka ni limmoob. Aka-record so IP address mo ed agawgawa ed bolong.",
+ "blockedtitle": "Sebel ed sayan manag-usar",
+ "blockednoreason": "anggapon katunungan so inter",
+ "whitelistedittext": "Nakaukulan mo ya $1 umpian nabalo o nadagdagan ray bolobolong.",
+ "loginreqtitle": "Nakaukulan kan Onloob",
+ "loginreqlink": "onloob",
+ "loginreqpagetext": "Nakaukulan kan $1 umpian nanengneng so arom ran bolobolong.",
+ "accmailtitle": "Say Password impawet la.",
+ "accmailtext": "Empawet ed $2 so password para ed $1.",
+ "newarticle": "(Balo)",
+ "editing": "Babaloen so $1",
+ "yourdiff": "Saray niduma",
+ "copyrightwarning": "Tandaan komon ya amin ya contribution para ed {{SITENAME}} et nonoten ya pinaolian onong ed $2 (nengnengen so $1 para ed detalye).\nNo ag mo labay ya say inkorit mo ed sarag ya baloen odino ibonog ed anggan siopa, ag mo ipapalima dia.<br />\nSan ipropromisam met ya insulat mo yan dili o kinopyam ya manlapo ed sakey ya public domain odino parehas ya libren resource.\n'''AG MANPALIMA NA KIMEY YA WALAY COPYRIGHT TO YA ANGGAPOY ABOLOY!'''",
+ "cantcreateaccounttitle": "Aga makagawa na account",
+ "last": "sampot",
+ "histfirst": "Sankaunaan",
+ "histlast": "Sankautetan",
+ "mypreferences": "Saray preference ko",
+ "datedefault": "Anggapoy preference",
+ "prefs-rc": "Sampot ran binalo",
+ "prefs-watchlist": "Listaan na babantayan",
+ "prefs-editing": "Babaloen",
+ "searchresultshead": "Anapen",
+ "yourrealname": "Tuwan ngaran:",
+ "badsiglength": "Andukey ya maong so nickname. Say dukey to dapat mas daiset en say $1 ya character.",
+ "userrights-user-editname": "Isulat so username:",
+ "recentchanges": "Sampot ran binalo",
+ "hide": "Yamot",
+ "show": "Ipanengneng",
+ "recentchangeslinked": "Kabiangan ran binalo",
+ "recentchangeslinked-feed": "Kabiangan ran binalo",
+ "recentchangeslinked-toolbox": "Kabiangan ran binalo",
+ "upload": "Mangisigep na file",
+ "filesource": "Pinanlapuan:",
+ "badfilename": "Binalo so ngaran na file, umpian \"$1\" so balon ngaran to.",
+ "sourcefilename": "Filename na pinanlapuan:",
+ "watchthisupload": "Bantayan yan bolong",
+ "listfiles_name": "Ngaran",
+ "imagelinks": "Saray Gawing",
+ "download": "mangileksab (download)",
+ "unusedtemplateswlh": "arom ran gawing",
+ "randompage": "Random ya bolong",
+ "randompage-nopages": "Anggapoy bolong ya wadya ed ayan namespace.",
+ "withoutinterwiki": "Saray bolobolong ya anggapoy gawing ya language",
+ "withoutinterwiki-summary": "Anggapoy gawin paulad version na arum ran salita so ontombok ran bolobolong:",
+ "shortpages": "Antikey ran bolong",
+ "longpages": "Andokoy ran bolong",
+ "protectedpages": "Iyayagel ran bolobolong",
+ "newpages": "Balo ran bolong",
+ "ancientpages": "Sankadaanan ran bolobolong",
+ "move": "Iyales",
+ "movethispage": "Iyales yan bolong",
+ "booksources": "Saray liblibron pinanlapuan",
+ "booksources-search-legend": "Mananap na saray libron pinanlapuan",
+ "all-logs-page": "Amin ran log",
+ "allpages": "Amin ya bolobolong",
+ "nextpage": "Ontombok ya page ($1)",
+ "allpagesfrom": "Ipanengneng ray bolobolong ya manlapod:",
+ "allarticles": "Amin ran bolobolong",
+ "allinnamespace": "Amin ya bolobolong ($1 namespace)",
+ "allpagessubmit": "Ula",
+ "allpagesprefix": "Ipanengneng so saray bolobolong ya walay prefix:",
+ "linksearch": "Anapen ramay gawing ed web",
+ "linksearch-pat": "Anapen so pattern:",
+ "linksearch-ok": "Anapen",
+ "emailuser": "E-mail so ayan user",
+ "emailfrom": "Manlapud",
+ "emailto": "Para ed",
+ "emailmessage": "Pakabat",
+ "emailsend": "Paawit",
+ "emailsent": "Say e-mail impawet la",
+ "emailsenttext": "Impawit la so e-mail message mo.",
+ "mywatchlist": "Listaan na babantayan ko",
+ "watchnologin": "Agka ni akaloob",
+ "addedwatchtext": "Impila so bolong ya \"[[:$1]]\" diad [[Special:Watchlist|listaan na babantayan]] mo. Isulat diman so saray ontombok ran idagdag o panagbalo ed sayan bolong san diad bolong na tongtongan. San akasulat ran '''mapatnag''' (bolded) ed [[Special:RecentChanges|listaan na saray sampot ran binalo]] umpian mas maganom ya nanengneng.\n\nNo labay mon ekalen may bolong diad listaan na babantayan, tapik mo labat so \"ekalen ed babantayan\" (unwatch) diad gilig ya bar.",
+ "watch": "bantayan",
+ "watchthispage": "Bantayan yan bolong",
+ "watching": "Babantayan...",
+ "created": "agawa",
+ "changed": "asalatan",
+ "deletepage": "Buralen so bolong",
+ "confirm": "Paletan",
+ "actioncomplete": "Asumpal lan agawa",
+ "deletedtext": "Abural lay \"$1\".\nPinengneng so $2 para ed listaan na saray abural ran balo.",
+ "deletecomment": "Katonongan",
+ "prot_1movedto2": "say [[$1]] enyales paula ed [[$2]]",
+ "protect-legend": "Palitaen so pangiyagel",
+ "protect-level-sysop": "Sysops labat",
+ "undelete": "Nengnengen so inekal ran bolobolong",
+ "viewdeletedpage": "Nengnengen so inekal ran bolong",
+ "undelete-search-box": "Anapen ramay binural ran bolobolong",
+ "undelete-search-prefix": "Ipanengneng ray bolobolong ya mangagapo ed:",
+ "undelete-search-submit": "Anapen",
+ "contributions": "Saray contribution na user",
+ "mycontris": "Saray entolong ko",
+ "year": "Taon:",
+ "sp-contributions-newbies-sub": "Para balo ran account",
+ "sp-contributions-submit": "Anapen",
+ "whatlinkshere": "Antoray akaturo dia",
+ "whatlinkshere-title": "Saray bolong ya aka-gawing ed $1",
+ "whatlinkshere-page": "Bolong:",
+ "blockip": "Isara ed para ayan manag-usar",
+ "ipbreason": "Katonongan",
+ "ipbsubmit": "Isebel ed sayan manag-usar",
+ "badipaddress": "Aga nayarin IP address",
+ "ipusubmit": "Aga la isebel so ayan address",
+ "ipblocklist": "Listaan na saray sebel ran IP address san username",
+ "ipblocklist-submit": "Anapen",
+ "expiringblock": "nabalang no $1 $2",
+ "blocklink": "isara",
+ "contribslink": "saray entolong to",
+ "move-page-legend": "Iyales so bolong",
+ "movearticle": "Iyales so bolong",
+ "movepagebtn": "Iyales so bolong",
+ "pagemovedsub": "Asumpal lan inyales",
+ "articleexists": "Wala lay bolong to may ngaran ya atan, odino aga valid so pinilim ya ngaran. Pili ka pa na arom ya ngaran.",
+ "movereason": "Katonongan",
+ "delete_and_move": "Buralen san iyales",
+ "delete_and_move_confirm": "On, buralen yan page",
+ "export-submit": "Ipaawit",
+ "export-addcat": "Iyarom",
+ "allmessages": "Saray pakabat na oksoy",
+ "allmessagesname": "Ngaran",
+ "allmessagestext": "Aya so listaan na amin ya pakabat na oksoy ya naanap ed MediaWiki namespace.",
+ "filemissing": "Nababalang so file",
+ "tooltip-pt-logout": "Paway",
+ "tooltip-ca-viewsource": "Iya-yagel yan bolong. Sarag mon nengnengen so pinanlapuan to.",
+ "tooltip-ca-protect": "Iyagel yan bolong",
+ "tooltip-ca-move": "Iyales so ayan bolong",
+ "tooltip-search": "Anapen {{SITENAME}}",
+ "tooltip-p-logo": "Arapan ya Bolong",
+ "tooltip-t-specialpages": "Listaan na amin ran niduman bolobolong",
+ "tooltip-ca-nstab-user": "Nengnengen so bolong na manag-usar",
+ "tooltip-ca-nstab-mediawiki": "Nengnengen so pakabat na oksoy",
+ "lastmodifiedatby": "Sampot ya binalo yan bolong nen agew ya $2, $1 nen $3.",
+ "ilsubmit": "Anapen",
+ "exif-filesource": "File na pinanlapuan",
+ "namespacesall": "amin",
+ "monthsall": "amin",
+ "confirmemail": "Kumpirmaen so E-mail address",
+ "confirmemail_sent": "Empawet so confirmation e-mail.",
+ "confirmemail_needlogin": "Nakaukulan mo ya $1 umpian nakompirma so email address mo.",
+ "confirmemail_success": "Akompirma so e-mail address mo. Sarag mo lay man-log-in san panliketan so wiki.",
+ "confirmemail_loggedin": "Akompira la so e-mail address mo.",
+ "deletedwhileediting": "Pasakbay: Abural yan bolong nen ginapuan mon baloen!",
+ "confirm-purge-top": "Ekalen so cache na sayan bolong?",
+ "imgmultipagenext": "ontombok ya bolong →",
+ "imgmultigo": "Ula!",
+ "table_pager_next": "Ontombok ya bolong",
+ "table_pager_prev": "Embeneg ya bolong",
+ "table_pager_first": "Unaan ya bolong",
+ "table_pager_last": "Otet ya bolong",
+ "table_pager_limit_submit": "Ula",
+ "autosumm-blank": "Ekalen so amin ya laman na bolong",
+ "autosumm-replace": "Salatan yan bolong na '$1'",
+ "autoredircomment": "Ituturo paulad [[$1]]",
+ "autosumm-new": "Balon bolong: $1",
+ "specialpages": "Niduma ran bolobolong"
}
diff --git a/languages/i18n/pam.json b/languages/i18n/pam.json
index 010179a5..81c2ba3d 100644
--- a/languages/i18n/pam.json
+++ b/languages/i18n/pam.json
@@ -6,7 +6,8 @@
"Katimawan2005",
"Urhixidur",
"Val2397",
- "아라"
+ "아라",
+ "Leeheonjin"
]
},
"tog-underline": "Gulisan lang panglalam deng suglung:",
@@ -192,6 +193,7 @@
"disclaimers": "Pamananggi",
"disclaimerpage": "Project:Pangkabilugan a pamananggi",
"edithelp": "Saup pamanalili",
+ "helppage-top-gethelp": "Saup",
"mainpage": "Pun Bulung",
"mainpage-description": "Pun Bulung",
"policy-url": "Project:Tuntunan",
@@ -515,7 +517,6 @@
"mergehistory-autocomment": "Pisamut ing [[:$1]] keng [[:$2]]",
"mergehistory-comment": "Misanib ya ing [[:$1]] king [[:$2]]: $3",
"mergelog": "Piyabe ing log",
- "pagemerge-logentry": "misanib ya ing [[$1]] king [[$2]] (deng pamagbayu angga king $3)",
"revertmerge": "Episamut",
"mergelogpagetext": "Makabili la king lalam deng pekabayung pamisanib da reng amlat bulung (page history).",
"history-title": "↓Amlat ning pamagbayu king \"$1\"",
@@ -544,6 +545,7 @@
"search-result-size": "$1 ({{PLURAL:$2|1 a kataya|$2 kataya}})",
"search-redirect": "(pamanalis direksiun $1)",
"search-section": "(seksion $1)",
+ "search-category": "(kategorya $1)",
"search-suggest": "Ing buri mung sabian: $1",
"search-interwiki-caption": "Kapatad a proyektu",
"search-interwiki-default": "$1 linual/resulta:",
@@ -680,10 +682,12 @@
"right-userrights": "I-edit la ngan deng katulirang talagamit (user rights)",
"right-userrights-interwiki": "I-edit la reng katulirang talagamit (user rights) da reng talagamit kareng aliwang karinan a wiki",
"right-siteadmin": "Isara ya ampong ibusni ing database",
+ "right-managechangetags": "Maglalang at magbura [[Special:Tags|tags]] ibat database",
"newuserlogpage": "Tala ning pamaglalang talagamit (''User creation log'')",
"rightslog": "Tala da reng katulirang talagamit (user rights log)",
"rightslogtext": "Ini tala de reng miyalilan king katulirang talagamit (user rights).",
"action-edit": "i-edit/alilan ya ing bulung a ini",
+ "action-managechangetags": "maglalang at magbura tags ibat database",
"nchanges": "$1 {{PLURAL:$1|miyalilan|miyalilan}}",
"recentchanges": "Bayung mengayalili",
"recentchanges-legend": "Pipamilinan kareng bayung mengayalili",
@@ -847,7 +851,6 @@
"randomredirect-nopages": "Alang pamanalis direksiun (redirect) king pirinan lagyung (namespace) ini.",
"statistics": "Deng datos (Statistics)",
"statistics-header-users": "Talagamit statistics",
- "statistics-mostpopular": "Bulung a pekamaralas dang linawe",
"doubleredirects": "Dobling pamanaliling direksiun",
"doubleredirectstext": "Pakalista la king bulung a ini deng bulung a makayalis direksiun (redirect) kareng aliwang bulung pamanalis direksiun. Atin yang suglung ing balang dane (row) king mumuna ampong kaduang pamanalis direksiun, ampo king tuturu (target) ning kaduang pamanalis direksiun, a keraklan ya ing \"tagana\" o \"tutung\" bulung a tuturu, nung nu ya dapat tambing makaturu ing mumunang pamanalis direksiun.",
"brokenredirects": "Meputut a pamanaliling direksiun",
@@ -874,7 +877,6 @@
"uncategorizedtemplates": "Modelung (template) alang kategoriya",
"unusedcategories": "Kategoriyang e megamit",
"unusedimages": "Simpan a e megamit",
- "popularpages": "Sikat a bulung",
"wantedcategories": "Kategoriyang paintunan (wanted)",
"wantedpages": "Bulung a kailangan (wanted pages)",
"mostlinked": "Dakal dili suglung kareng bulung",
@@ -908,7 +910,6 @@
"suppress": "Alakton (oversight)",
"booksources": "Aklat a pikuanan",
"booksources-search-legend": "Panintunan la reng aklat penibatan",
- "booksources-go": "Sige",
"booksources-text": "Makabili la king lalam deng suglung kareng aliwang karinan o site a mamisaling librung bayu at megamit na, at mapalyaring atin la muring aliwang informaciun kareng librung paintunan mu.",
"specialloguserlabel": "Talagamit:",
"speciallogtitlelabel": "Bansag:",
@@ -979,7 +980,7 @@
"wlheader-enotif": "Makasalangi (enabled) ing pamipabalu kapamilatan ning e-mail.",
"wlheader-showupdated": "'''Makapal''' la pangasulat deng bulung a miyalilan manibat aniang tauli mu lang pintalan.",
"wlnote": "{{PLURAL:$1|Ing makatuki ing tauling|Ding makatuki ring tauling '''$1''' miyalilan}} kilub {{PLURAL:$2|ning tauling metung a oras|ding tauling '''$2''' oras}}.",
- "wlshowlast": "Pakit la reng tauling $1 oras $2 aldo $3",
+ "wlshowlast": "Pakit la reng tauling $1 oras $2 aldo",
"watchlist-options": "Deng maliaring gawan kareng listaan da reng babanten (''watchlist'')",
"watching": "Babanten...",
"unwatching": "E ne babanten...",
@@ -1014,7 +1015,6 @@
"delete-toobig": "Maki maragul yang amlat ning pamag-edit ing bulung a ini, nung nu maigit lang $1 deng miyalilan.\nMe-limita ing pamamura kareng bulung a anti kaniti, bang e maliliari ing e sasarian a kaguluan o pamag-distorbu king {{SITENAME}}.",
"delete-warning-toobig": "Makaba ya ing amlat ding mibayu/me-edit ning bulung a ini, maigit la king $1 ding pamagbayu.\nPosibling miyapektuan ing palakad ning database ning {{SITENAME}};\npakakalale ka.",
"rollback": "Iurung la retang me-edit",
- "rollback_short": "Iurung",
"rollbacklink": "i-urung",
"rollbackfailed": "E melaus ing pamanurung",
"cantrollback": "E malyaring ibalik itang miyalilan; bukud mung ing tawling minambag yang sinulat king bulung a ini.",
@@ -1254,7 +1254,7 @@
"thumbnail_invalid_params": "E la matatanggap deng sukad a thumbnail (thumbnail parameters)",
"thumbnail_dest_directory": "E makapaglalang piyakitan da reng puntalan (destination directory)",
"import": "Maglub bulung",
- "importinterwiki": "Pamaglub a transwiki (transwiki import)",
+ "importinterwiki": "Maglub (mag-import) ibat aliwang wiki",
"import-interwiki-text": "Mamili kang wiki ampong bansag bulung a ilub.\nManatili la reng petsa ring pamagbayu ampo reng lagyu ring editor.\nMaka-login la reng eganaganang pamaglub a transwiki (transwiki import actions) ketang [[Special:Log/import|import log]].",
"import-interwiki-history": "Kopian la reng eganaganang bersion ning amlat para king bulung a ini.",
"import-interwiki-submit": "Maglub (import)",
@@ -1563,7 +1563,6 @@
"exif-gpsspeed-k": "Kilometru balang oras",
"exif-gpsspeed-m": "Milla balang oras",
"exif-gpsdirection-t": "Tutung direksiun",
- "watchlistall2": "eganagana",
"namespacesall": "ila ngan",
"monthsall": "eganagana",
"confirmemail": "Patutwan mung keka ya itang e-mail address",
@@ -1614,7 +1613,7 @@
"version": "Bersion",
"version-specialpages": "Bulung a makabukud",
"version-other": "Aliwa",
- "version-version": "(Bersion $1)",
+ "version-version": "($1)",
"version-license": "Lisensia",
"version-software-product": "Produktu",
"version-software-version": "Bersion",
@@ -1630,7 +1629,30 @@
"specialpages-group-media": "Ulat king media ampong pamaglulan (uploads)",
"specialpages-group-users": "Talagamit ampong katuliran",
"specialpages-group-highuse": "Deng bulung a magamitan",
+ "tags-source-header": "Pikwanan",
+ "tags-actions-header": "Deng aksyun",
+ "tags-source-none": "Ali ne gagamitan",
+ "tags-delete": "buran",
+ "tags-activate": "iyaktiba",
+ "tags-create-heading": "Maglalang ning bayung tag",
+ "tags-create-tag-name": "Tag lagyu",
+ "tags-create-reason": "Dayilan:",
+ "tags-create-submit": "Maglalang",
+ "tags-create-already-exists": "Ati yu ne ing tag \"$1\".",
+ "tags-delete-title": "Buran ya ing tag",
+ "tags-delete-reason": "Sangkan:",
+ "tags-activate-title": "Iyaktiba ing tag",
+ "tags-activate-reason": "Sangkan:",
+ "tags-activate-not-found": "Ala yu ing tag \"$1\"",
+ "tags-activate-submit": "Iyaktiba",
+ "tags-deactivate-reason": "Sangkan:",
"revdelete-restricted": "ipairal la reng limitasiun kareng sysop",
"revdelete-unrestricted": "ilako la reng makabawal kareng sysops",
- "rightsnone": "(ala)"
+ "rightsnone": "(ala)",
+ "revdelete-summary": "sampulung da reng mibayu (edit summary)",
+ "feedback-back": "Mibalik",
+ "feedback-error-title": "Mali",
+ "feedback-submit": "I-sumiti",
+ "feedback-thanks-title": "Salamat pu!",
+ "headline-anchor-title": "Ing suglung king seksyun a ini"
}
diff --git a/languages/i18n/pap.json b/languages/i18n/pap.json
index d6905939..a82bf867 100644
--- a/languages/i18n/pap.json
+++ b/languages/i18n/pap.json
@@ -1,278 +1,273 @@
{
- "@metadata": {
- "authors": [
- "Delaraha (on pap.wikipedia.org)",
- "Kamizu",
- "Sdm1985",
- "לערי ריינהארט"
- ]
- },
- "underline-always": "Semper",
- "underline-never": "Niunka",
- "sunday": "djadomingu",
- "monday": "djaluna",
- "tuesday": "djamars",
- "wednesday": "djarason",
- "thursday": "djaweps",
- "friday": "djabièrne",
- "saturday": "djasabra",
- "january": "yanüari",
- "february": "febrüari",
- "march": "mart",
- "april": "aprel",
- "may_long": "mei",
- "june": "yüni",
- "july": "yüli",
- "august": "ougùstùs",
- "september": "sèptèmber",
- "october": "òktober",
- "november": "novèmber",
- "december": "desèmber",
- "jan": "yan",
- "feb": "feb",
- "mar": "mrt",
- "apr": "apr",
- "may": "mei",
- "jun": "yün",
- "jul": "yül",
- "aug": "oug",
- "sep": "sep",
- "oct": "okt",
- "nov": "nov",
- "dec": "des",
- "category_header": "Artíkulonan den kategoria \"$1\"",
- "subcategories": "Supkategorianan",
- "about": "Info",
- "article": "Artíkulo",
- "cancel": "Kanselá",
- "moredotdotdot": "Mas...",
- "mypage": "Mi página",
- "mytalk": "Mi diskushon",
- "anontalk": "Diskushon pa e IP aki",
- "navigation": "Nabegashon",
- "and": "&#32;i",
- "faq": "Preguntanan mas Puntrá",
- "faqpage": "Project:Preguntanan mas Puntrá",
- "errorpagetitle": "Eror",
- "returnto": "Bai bèk $1.",
- "tagline": "Di {{SITENAME}}",
- "help": "Ayudo",
- "search": "Buska",
- "history": "Historia di página",
- "history_short": "Historia",
- "edit": "Editá",
- "editthispage": "Editá e página aki",
- "delete": "Kita",
- "protect": "Protehá",
- "unprotect": "stop di protehá",
- "unprotectthispage": "Stop di protehá e página aki",
- "talkpagelinktext": "Papia",
- "specialpage": "Página Spesial",
- "personaltools": "Hèrmèntnan Personal",
- "postcomment": "Sekshon Nobo",
- "articlepage": "Wak página di kontenido",
- "talk": "Diskushon",
- "views": "Kantidat di biaha mirá",
- "toolbox": "Kaha di Hèrmènt",
- "userpage": "Wak página di uzadó",
- "projectpage": "Wak página di e proyekto",
- "imagepage": "Mira página di e dokumento",
- "mediawikipage": "Mira paginanan di mensahe",
- "templatepage": "Mira malchi di e página",
- "viewhelppage": "Mira página di yudansa",
- "categorypage": "Mira e página di kategoria",
- "viewtalkpage": "Wak diskushon",
- "otherlanguages": "Na otro idioma",
- "redirectedfrom": "(Bo a yega akinan pa via di e página $1)",
- "redirectpagesub": "Página ku ta sirbi komo portal",
- "lastmodifiedat": "E páginá aki a wòrdu kambiá ultimo biaha riba $1, ora $2.",
- "viewcount": "E paginá aki a wòrdu mirá {{PLURAL:$1|biaha|$1 biaha}}.",
- "protectedpage": "Página Protehá",
- "jumpto": "Bai na:",
- "jumptonavigation": "Nabegashon",
- "jumptosearch": "Buska",
- "aboutsite": "Tokante {{SITENAME}}",
- "aboutpage": "Project:Info",
- "copyright": "E kontenido ta disponibel bou di $1.",
- "copyrightpage": "{{ns:project}}:Derechinan di outor",
- "currentevents": "Eventonan aktual",
- "currentevents-url": "Project:Eventonan aktual",
- "disclaimers": "Deklarashon di Liberashon for di Responsabilidatnan",
- "disclaimerpage": "Project:Deklarashon di Liberashon for di Responsabilidat General",
- "edithelp": "Ayudo ku editamentu",
- "mainpage": "Página Prinsipal",
- "mainpage-description": "Página Prinsipal",
- "policy-url": "Project:Pólisa",
- "portal": "Portal di komunidat",
- "portal-url": "Project:Portal di komunidat",
- "privacy": "Pólisa di Privasidat",
- "privacypage": "Project:Pólisa di Privasidat",
- "badaccess": "Eror di outorisashon",
- "badaccess-group0": "Bo no tin outorisashon pa ehekutá e akshon ku bo a skohe.",
- "youhavenewmessages": "Bo tin $1 ($2).",
- "youhavenewmessagesmulti": "Bo tin mensahe nobo riba $1",
- "editsection": "editá",
- "toc": "Kontenido",
- "showtoc": "mustra",
- "hidetoc": "skonde",
- "nstab-main": "Artíkulo",
- "nstab-user": "Página personal",
- "nstab-media": "Media",
- "nstab-special": "Spesial",
- "nstab-image": "Imagen",
- "nstab-mediawiki": "Mensahe",
- "nstab-template": "Predefinishon",
- "nstab-help": "Ayudo",
- "nstab-category": "Kategoria",
- "nosuchspecialpage": "E página spesial no ta eksistí",
- "nospecialpagetext": "<strong>Bo a pidi un página spesial inválido.</strong>\n\nBo por haña un lista di tur [[Special:SpecialPages|{{int:specialpages}}]].",
- "error": "Eror",
- "internalerror": "Eror interno",
- "cannotdelete": "No por a kita e página òf imagen spesifiká. (Por ta e kaso ku un otro hende a kita e kaba.)",
- "badtitle": "Título inválido",
- "badtitletext": "E título di e página ku bo a pidi tabata inválido, bashí, òf un link pa un inter-idioma òf inter-wiki inkorekto.",
- "viewsource": "Wak fuente",
- "yourname": "Nòmber di uzadó",
- "yourpassword": "Kontraseña",
- "yourpasswordagain": "Hinka kontraseña atrobe",
- "remembermypassword": "Kordá mi (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "userlogin": "Traha un kuenta nobo òf outentiká",
- "userlogout": "Terminá sesion",
- "badretype": "E kontraseñanan hinká no ta kuadra.",
- "wrongpassword": "Kontraseña no ta korekto. Por fabor purba atrobe.",
- "wrongpasswordempty": "Kontraseña tabata bashí. Por fabor purba atrobe.",
- "acct_creation_throttle_hit": "Bishitantenan na uzando bo IP adrès a traha $1 kuenta den e último 24 ora, lokual ta e máksimo permití den e periodo aki. Esaki ta nifiká ku hendenan uzando e IP adrès aki no por traha mas kuenta na e momentu aki.",
- "emailauthenticated": "Bo e-mail adrès tabata outentiká riba $1.",
- "emailnotauthenticated": "Bo e-mail adrès no ta outentiká ahinda. Lo siguiente funkshonnan lo no ta disponibel.",
- "emailconfirmlink": "Konfirmá bo e-mail adrès.",
- "accountcreated": "Kuenta trahá",
- "accountcreatedtext": "E kuenta di uzadó pa $1 tabata trahá.",
- "changepassword": "Kambia kontraseña",
- "watchthis": "Observá e página aki",
- "anoneditwarning": "Bo no a outentiká bo mes.\nBo por kambia página libremente, pero tene kuenta ku lo nota bo IP adrès den e historia di kambionan hasí na e página aki.",
- "blockedtitle": "Uzadó ta blokiá",
- "confirmedittext": "Bo mester konfirmá bo e-mail adrès promé ku bo editá página. Por fabor duna i validá bo e-mail adrès via bo [[Special:Preferences|preferensianan]].",
- "accmailtitle": "Kontraseña mandá.",
- "accmailtext": "E kontraseña pa '$1' tabata mandá pa $2.",
- "newarticle": "(Nobo)",
- "anontalkpagetext": "----''Esaki ta e página di diskushon pa un uzadó anonimo ku no a traha un kuenta ahinda, òf no sa uza e. Ta pa e rason aki nos tin ku uza IP adrès pa identifiká e persona. Diferente uzadó por uza e IP adrès aki. Si bo ta un uzadó anonimo i ta sinti ku komentario irelevante tabata mandá pa bo, por fabor [[Special:UserLogin|registrá un kuenta nobo òf outentiká bo mes]] pa evitá konfushon den futuro.''",
- "yourtext": "Bo teksto",
- "yourdiff": "Diferensianan",
- "currentrev": "Revishon aktual",
- "currentrevisionlink": "wak revishon aktual",
- "cur": "akt",
- "next": "siguiente",
- "last": "prev",
- "histlegend": "Leyenda: (akt) = diferensia ku vershon aktual,\n(prev) = diferensia ku vershon previo, m = editashon menor",
- "histfirst": "Promé",
- "histlast": "Último",
- "nextn": "siguiente {{PLURAL:$1|$1}}",
- "preferences": "Preferensianan",
- "mypreferences": "Mi preferensianan",
- "timezonelegend": "Zona di tempu",
- "allowemail": "Akseptá e-mail di otro uzadó",
- "youremail": "E-mail:",
- "username": "Nòmber di uzadó:",
- "uid": "ID di uzadó:",
- "yourrealname": "Nòmber berdadero:",
- "yourlanguage": "Idioma:",
- "yourvariant": "Variante:",
- "yournick": "Nòmber di kariño:",
- "badsig": "Firma inválido; kontrolá e HTML uzá.",
- "recentchanges": "Kambionan resien",
- "recentchanges-summary": "Sigui e kambionan mas resien na {{SITENAME}} riba e página aki.",
- "rclistfrom": "Mustra kambionan nobo kuminsando for di $1",
- "rcshowhideminor": "$1 kambionan menor",
- "rcshowhidebots": "$1 botnan",
- "rcshowhideanons": "$1 uzadónan anonimo",
- "rclinks": "Mustra último $1 kambionan den último $2 dianan<br />$3",
- "hide": "Skonde",
- "show": "Mustra",
- "file-anchor-link": "Imagen",
- "unwatchedpages": "Páginanan no observá",
- "statistics": "Estadístika",
- "statistics-header-users": "Estadístika di uzadónan",
- "ncategories": "$1 {{PLURAL:$1|kategoria|kategorianan}}",
- "uncategorizedpages": "Páginanan no kategorisá",
- "uncategorizedcategories": "Kategorianan no kategorisá",
- "unusedcategories": "Kategorianan no uzá",
- "wantedcategories": "Kategorianan deseá",
- "wantedpages": "Páginanan deseá",
- "ancientpages": "Páginanan mas bieu",
- "unusedcategoriestext": "E siguiente kategorianan ta eksistí pero ningun artíkulo òf kategoria ta hasi uzo di nan.",
- "alllogstext": "Esaki ta un bista kombiná di registronan.\nBo por skohe un tipo di registro tambe, òf filtrá e bista ku un nòmber di uzadó òf un título di un artíkulo.",
- "allpages": "Tur página",
- "alphaindexline": "$1 pa $2",
- "allpagesfrom": "Mustra páginanan kuminsando na:",
- "allarticles": "Tur artíkulo",
- "allinnamespace": "Tur página (dominio $1)",
- "allpagesprefix": "Mustra páginanan kuminsando ku e prefiho:",
- "categories": "Kategorianan",
- "categoriespagetext": "Esaki ta e kategorianan ku ta eksistí den {{SITENAME}}.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
- "emailuser": "Manda e-mail pa e uzadó aki",
- "emailpage": "Manda e-mail",
- "emailpagetext": "E formulario aki lo manda un e-mail pa e uzadò aki.\nBo e-mail adrès (manera ta pará den bo preferensianan) lo aparesé den e e-mail pa e resipiente por respondé na bo direktamente.",
- "defemailsubject": "E-mail di {{SITENAME}}",
- "emailfrom": "Di:",
- "emailto": "Pa:",
- "emailsubject": "Tópiko:",
- "emailmessage": "Mensahe:",
- "emailsend": "Manda",
- "emailsent": "E-mail mandá",
- "emailsenttext": "Bo e-mail tabata mandá.",
- "watchlist": "Mi lista di observashon",
- "nowatchlist": "Bo lista di observashon ta bashí.",
- "watchnologintext": "Bo mester [[Special:UserLogin|outentiká bo mes]] pa modifiká bo lista di observashon.",
- "addedwatchtext": "E página \"[[:$1]]\" tabata añadí na bo [[Special:Watchlist|lista di observashon]].\nLo lista kambionan hasí na e página aki i su página di diskushon einan,\ni e página lo aparesé '''vet''' den e [[Special:RecentChanges|lista di kambionan resien]] pa\ne ta mas fásil pa bo mira.\n\nSi despues bo ke kita e página for di bo lista di observashon, primi \"Stop di observá\" den e menú ariba.",
- "watch": "Observá",
- "watchthispage": "Observá e página aki",
- "unwatch": "Stop di observá",
- "unwatchthispage": "Stop di observá",
- "watchlistcontains": "Bo lista di observashon tin $1 {{PLURAL:$1|página|páginanan}}.",
- "wlshowlast": "Mustra último $1 oranan $2 dianan $3",
- "created": "trahá",
- "changed": "kambiá",
- "confirm": "Konfirmá",
- "actioncomplete": "Akshon kompletá",
- "prot_1movedto2": "[[$1]] mové pa [[$2]]",
- "protect-legend": "Konfirmá protekshon",
- "undelete": "Wak páginanan kitá",
- "invert": "Invertí selekshon",
- "blanknamespace": "(Prinsipal)",
- "contributions": "Kontribushonnan di uzadó",
- "mycontris": "Mi kontribushonnan",
- "whatlinkshere": "Kiko ta link aki",
- "blockip": "Blokia uzadó",
- "badipaddress": "IP adrès ta inválido",
- "blockipsuccesssub": "Blokeo eksitoso",
- "blockipsuccesstext": "[[Special:Contributions/$1|$1]] tabata blokiá.<br />\nWak e [[Special:BlockList|lista di blokeonan]] pa wak tur blokeo aktivo.",
- "unblockip": "Desblokia uzadó",
- "blocklink": "blokia",
- "unblocklink": "desblokia",
- "contribslink": "kontrib'nan",
- "autoblocker": "Bo tabata outomatikamente blokiá pasombra \"[[User:$1|$1]]\" a uza e IP adrès aki resientemente. E rason ku $1 tabata blokiá ta: \"'''$2'''\"",
- "unblocklogentry": "a desblokia $1",
- "articleexists": "Tin un página ku e título ei kaba, òf e\ntítulo ku bo a skohe no ta válido.\nPor fabor skohe un otro título.",
- "allmessages": "Mensahenan di sistema",
- "allmessagesname": "Nòmber",
- "allmessagesdefault": "Teksto predeterminá",
- "allmessagescurrent": "Teksto aktual",
- "allmessagestext": "Esaki ta un lista di mensahe di sistema disponibel den e dominio di MediaWiki.",
- "anonymous": "Uzadó(nan) anonimo di {{SITENAME}}",
- "previousdiff": "← Diferensia anterior",
- "nextdiff": "Siguiente diferensia →",
- "watchlistall2": "tur",
- "namespacesall": "tur",
- "confirmemail": "Konfirmá e-mail adrès",
- "confirmemail_text": "Bo mester validá bo e-mail adrès pa uza funkshonnan di e-mail.\nPrimi e boton abou pa manda un e-mail di konfirmashon pa bo e-mail adrès.\nOra bo haña e e-mail, bo ta sigui e instrukshonnan aden.\nPa kontrolá si bo ta konfirmá kaba, wak bo preferensianan.",
- "confirmemail_send": "Manda un kódigo di konfirmashon via e-mail.",
- "confirmemail_sent": "E-mail pa konfirmashon mandá.",
- "confirmemail_invalid": "Kódigo di konfirmashon inválido. Ta posibel ku e kódigo a kaduká.",
- "confirmemail_needlogin": "Bo mester $1 pa konfirmá bo e-mail adrès.",
- "confirmemail_success": "Bo e-mail adrès tabata konfirmá. Bo por outentiká bo mes i gosa di {{SITENAME}}.",
- "confirmemail_loggedin": "Bo e-mail adrès ta konfirmá.",
- "confirmemail_subject": "{{SITENAME}}: Konfirmashon di e-mail adrès",
- "confirmemail_body": "Un hende, probablemente abo, di IP adrès $1, a registrá e\nkuenta \"$2\" ku e e-mail adrès aki riba {{SITENAME}}.\n\nPa konfirmá ku e kuenta aki en berdat ta di bo i pa aktivá\nfunkshonnan di e-mail riba {{SITENAME}}, por fabor habri e link aki:\n\n$3\n\nSi esaki *no* ta abo, por fabor no habri e link.\nFollow this link to cancel the e-mail address confirmation:\n\n$5\n\nE kódigo di konfirmashon aki lo kaduká riba $4.",
- "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|diskushon]]) a kita e artíkulo aki despues ku bo ta kuminsá editá. E rason ta:\n: ''$2''\nPor fabor konfirmá ku bo ke traha e artíkulo aki di nobo.",
- "specialpages": "Páginanan Spesial"
+ "@metadata": {
+ "authors": [
+ "Delaraha (on pap.wikipedia.org)",
+ "Kamizu",
+ "Sdm1985",
+ "לערי ריינהארט",
+ "아라"
+ ]
+ },
+ "underline-always": "Semper",
+ "underline-never": "Niunka",
+ "sunday": "djadomingu",
+ "monday": "djaluna",
+ "tuesday": "djamars",
+ "wednesday": "djarason",
+ "thursday": "djaweps",
+ "friday": "djabièrne",
+ "saturday": "djasabra",
+ "january": "yanüari",
+ "february": "febrüari",
+ "march": "mart",
+ "april": "aprel",
+ "may_long": "mei",
+ "june": "yüni",
+ "july": "yüli",
+ "august": "ougùstùs",
+ "september": "sèptèmber",
+ "october": "òktober",
+ "november": "novèmber",
+ "december": "desèmber",
+ "jan": "yan",
+ "feb": "feb",
+ "mar": "mrt",
+ "apr": "apr",
+ "may": "mei",
+ "jun": "yün",
+ "jul": "yül",
+ "aug": "oug",
+ "sep": "sep",
+ "oct": "okt",
+ "nov": "nov",
+ "dec": "des",
+ "category_header": "Artíkulonan den kategoria \"$1\"",
+ "subcategories": "Supkategorianan",
+ "about": "Info",
+ "article": "Artíkulo",
+ "cancel": "Kanselá",
+ "moredotdotdot": "Mas...",
+ "mypage": "Mi página",
+ "mytalk": "Mi diskushon",
+ "anontalk": "Diskushon pa e IP aki",
+ "navigation": "Nabegashon",
+ "and": "&#32;i",
+ "faq": "Preguntanan mas Puntrá",
+ "faqpage": "Project:Preguntanan mas Puntrá",
+ "errorpagetitle": "Eror",
+ "returnto": "Bai bèk $1.",
+ "tagline": "Di {{SITENAME}}",
+ "help": "Ayudo",
+ "search": "Buska",
+ "history": "Historia di página",
+ "history_short": "Historia",
+ "edit": "Editá",
+ "editthispage": "Editá e página aki",
+ "delete": "Kita",
+ "protect": "Protehá",
+ "unprotect": "stop di protehá",
+ "unprotectthispage": "Stop di protehá e página aki",
+ "talkpagelinktext": "Papia",
+ "specialpage": "Página Spesial",
+ "personaltools": "Hèrmèntnan Personal",
+ "articlepage": "Wak página di kontenido",
+ "talk": "Diskushon",
+ "views": "Kantidat di biaha mirá",
+ "toolbox": "Kaha di Hèrmènt",
+ "userpage": "Wak página di uzadó",
+ "projectpage": "Wak página di e proyekto",
+ "imagepage": "Mira página di e dokumento",
+ "mediawikipage": "Mira paginanan di mensahe",
+ "templatepage": "Mira malchi di e página",
+ "viewhelppage": "Mira página di yudansa",
+ "categorypage": "Mira e página di kategoria",
+ "viewtalkpage": "Wak diskushon",
+ "otherlanguages": "Na otro idioma",
+ "redirectedfrom": "(Bo a yega akinan pa via di e página $1)",
+ "redirectpagesub": "Página ku ta sirbi komo portal",
+ "lastmodifiedat": "E páginá aki a wòrdu kambiá ultimo biaha riba $1, ora $2.",
+ "viewcount": "E paginá aki a wòrdu mirá {{PLURAL:$1|biaha|$1 biaha}}.",
+ "protectedpage": "Página Protehá",
+ "jumpto": "Bai na:",
+ "jumptonavigation": "Nabegashon",
+ "jumptosearch": "Buska",
+ "aboutsite": "Tokante {{SITENAME}}",
+ "aboutpage": "Project:Info",
+ "copyright": "E kontenido ta disponibel bou di $1.",
+ "copyrightpage": "{{ns:project}}:Derechinan di outor",
+ "currentevents": "Eventonan aktual",
+ "currentevents-url": "Project:Eventonan aktual",
+ "disclaimers": "Deklarashon di Liberashon for di Responsabilidatnan",
+ "disclaimerpage": "Project:Deklarashon di Liberashon for di Responsabilidat General",
+ "edithelp": "Ayudo ku editamentu",
+ "mainpage": "Página Prinsipal",
+ "mainpage-description": "Página Prinsipal",
+ "policy-url": "Project:Pólisa",
+ "portal": "Portal di komunidat",
+ "portal-url": "Project:Portal di komunidat",
+ "privacy": "Pólisa di Privasidat",
+ "privacypage": "Project:Pólisa di Privasidat",
+ "badaccess": "Eror di outorisashon",
+ "badaccess-group0": "Bo no tin outorisashon pa ehekutá e akshon ku bo a skohe.",
+ "youhavenewmessages": "Bo tin $1 ($2).",
+ "youhavenewmessagesmulti": "Bo tin mensahe nobo riba $1",
+ "editsection": "editá",
+ "toc": "Kontenido",
+ "showtoc": "mustra",
+ "hidetoc": "skonde",
+ "nstab-main": "Artíkulo",
+ "nstab-user": "Página personal",
+ "nstab-media": "Media",
+ "nstab-special": "Spesial",
+ "nstab-image": "Imagen",
+ "nstab-mediawiki": "Mensahe",
+ "nstab-template": "Predefinishon",
+ "nstab-help": "Ayudo",
+ "nstab-category": "Kategoria",
+ "nosuchspecialpage": "E página spesial no ta eksistí",
+ "nospecialpagetext": "<strong>Bo a pidi un página spesial inválido.</strong>\n\nBo por haña un lista di tur [[Special:SpecialPages|{{int:specialpages}}]].",
+ "error": "Eror",
+ "internalerror": "Eror interno",
+ "cannotdelete": "No por a kita e página òf imagen spesifiká. (Por ta e kaso ku un otro hende a kita e kaba.)",
+ "badtitle": "Título inválido",
+ "badtitletext": "E título di e página ku bo a pidi tabata inválido, bashí, òf un link pa un inter-idioma òf inter-wiki inkorekto.",
+ "viewsource": "Wak fuente",
+ "yourname": "Nòmber di uzadó",
+ "yourpassword": "Kontraseña",
+ "yourpasswordagain": "Hinka kontraseña atrobe",
+ "remembermypassword": "Kordá mi (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "userlogin": "Traha un kuenta nobo òf outentiká",
+ "userlogout": "Terminá sesion",
+ "badretype": "E kontraseñanan hinká no ta kuadra.",
+ "wrongpassword": "Kontraseña no ta korekto. Por fabor purba atrobe.",
+ "wrongpasswordempty": "Kontraseña tabata bashí. Por fabor purba atrobe.",
+ "acct_creation_throttle_hit": "Bishitantenan na uzando bo IP adrès a traha $1 kuenta den e último 24 ora, lokual ta e máksimo permití den e periodo aki. Esaki ta nifiká ku hendenan uzando e IP adrès aki no por traha mas kuenta na e momentu aki.",
+ "emailauthenticated": "Bo e-mail adrès tabata outentiká riba $1.",
+ "emailnotauthenticated": "Bo e-mail adrès no ta outentiká ahinda. Lo siguiente funkshonnan lo no ta disponibel.",
+ "emailconfirmlink": "Konfirmá bo e-mail adrès.",
+ "accountcreated": "Kuenta trahá",
+ "accountcreatedtext": "E kuenta di uzadó pa $1 tabata trahá.",
+ "changepassword": "Kambia kontraseña",
+ "watchthis": "Observá e página aki",
+ "anoneditwarning": "Bo no a outentiká bo mes.\nBo por kambia página libremente, pero tene kuenta ku lo nota bo IP adrès den e historia di kambionan hasí na e página aki.",
+ "blockedtitle": "Uzadó ta blokiá",
+ "confirmedittext": "Bo mester konfirmá bo e-mail adrès promé ku bo editá página. Por fabor duna i validá bo e-mail adrès via bo [[Special:Preferences|preferensianan]].",
+ "accmailtitle": "Kontraseña mandá.",
+ "accmailtext": "E kontraseña pa '$1' tabata mandá pa $2.",
+ "newarticle": "(Nobo)",
+ "anontalkpagetext": "----''Esaki ta e página di diskushon pa un uzadó anonimo ku no a traha un kuenta ahinda, òf no sa uza e. Ta pa e rason aki nos tin ku uza IP adrès pa identifiká e persona. Diferente uzadó por uza e IP adrès aki. Si bo ta un uzadó anonimo i ta sinti ku komentario irelevante tabata mandá pa bo, por fabor [[Special:UserLogin|registrá un kuenta nobo òf outentiká bo mes]] pa evitá konfushon den futuro.''",
+ "yourtext": "Bo teksto",
+ "yourdiff": "Diferensianan",
+ "currentrev": "Revishon aktual",
+ "currentrevisionlink": "wak revishon aktual",
+ "cur": "akt",
+ "next": "siguiente",
+ "last": "prev",
+ "histlegend": "Leyenda: (akt) = diferensia ku vershon aktual,\n(prev) = diferensia ku vershon previo, m = editashon menor",
+ "histfirst": "Promé",
+ "histlast": "Último",
+ "nextn": "siguiente {{PLURAL:$1|$1}}",
+ "preferences": "Preferensianan",
+ "mypreferences": "Mi preferensianan",
+ "timezonelegend": "Zona di tempu",
+ "allowemail": "Akseptá e-mail di otro uzadó",
+ "youremail": "E-mail:",
+ "username": "Nòmber di uzadó:",
+ "yourrealname": "Nòmber berdadero:",
+ "yourlanguage": "Idioma:",
+ "yourvariant": "Variante:",
+ "yournick": "Nòmber di kariño:",
+ "badsig": "Firma inválido; kontrolá e HTML uzá.",
+ "recentchanges": "Kambionan resien",
+ "recentchanges-summary": "Sigui e kambionan mas resien na {{SITENAME}} riba e página aki.",
+ "rclistfrom": "Mustra kambionan nobo kuminsando for di $3 $2",
+ "rcshowhideminor": "$1 kambionan menor",
+ "rcshowhidebots": "$1 botnan",
+ "rcshowhideanons": "$1 uzadónan anonimo",
+ "rclinks": "Mustra último $1 kambionan den último $2 dianan<br />$3",
+ "hide": "Skonde",
+ "show": "Mustra",
+ "file-anchor-link": "Imagen",
+ "unwatchedpages": "Páginanan no observá",
+ "statistics": "Estadístika",
+ "statistics-header-users": "Estadístika di uzadónan",
+ "ncategories": "$1 {{PLURAL:$1|kategoria|kategorianan}}",
+ "uncategorizedpages": "Páginanan no kategorisá",
+ "uncategorizedcategories": "Kategorianan no kategorisá",
+ "unusedcategories": "Kategorianan no uzá",
+ "wantedcategories": "Kategorianan deseá",
+ "wantedpages": "Páginanan deseá",
+ "ancientpages": "Páginanan mas bieu",
+ "unusedcategoriestext": "E siguiente kategorianan ta eksistí pero ningun artíkulo òf kategoria ta hasi uzo di nan.",
+ "alllogstext": "Esaki ta un bista kombiná di registronan.\nBo por skohe un tipo di registro tambe, òf filtrá e bista ku un nòmber di uzadó òf un título di un artíkulo.",
+ "allpages": "Tur página",
+ "allpagesfrom": "Mustra páginanan kuminsando na:",
+ "allarticles": "Tur artíkulo",
+ "allinnamespace": "Tur página (dominio $1)",
+ "allpagesprefix": "Mustra páginanan kuminsando ku e prefiho:",
+ "categories": "Kategorianan",
+ "categoriespagetext": "Esaki ta e kategorianan ku ta eksistí den {{SITENAME}}.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+ "emailuser": "Manda e-mail pa e uzadó aki",
+ "emailpage": "Manda e-mail",
+ "emailpagetext": "E formulario aki lo manda un e-mail pa e uzadò aki.\nBo e-mail adrès (manera ta pará den bo preferensianan) lo aparesé den e e-mail pa e resipiente por respondé na bo direktamente.",
+ "defemailsubject": "E-mail di {{SITENAME}}",
+ "emailfrom": "Di:",
+ "emailto": "Pa:",
+ "emailsubject": "Tópiko:",
+ "emailmessage": "Mensahe:",
+ "emailsend": "Manda",
+ "emailsent": "E-mail mandá",
+ "emailsenttext": "Bo e-mail tabata mandá.",
+ "watchlist": "Mi lista di observashon",
+ "nowatchlist": "Bo lista di observashon ta bashí.",
+ "addedwatchtext": "E página \"[[:$1]]\" tabata añadí na bo [[Special:Watchlist|lista di observashon]].\nLo lista kambionan hasí na e página aki i su página di diskushon einan,\ni e página lo aparesé '''vet''' den e [[Special:RecentChanges|lista di kambionan resien]] pa\ne ta mas fásil pa bo mira.\n\nSi despues bo ke kita e página for di bo lista di observashon, primi \"Stop di observá\" den e menú ariba.",
+ "watch": "Observá",
+ "watchthispage": "Observá e página aki",
+ "unwatch": "Stop di observá",
+ "unwatchthispage": "Stop di observá",
+ "wlshowlast": "Mustra último $1 oranan $2 dianan",
+ "created": "trahá",
+ "changed": "kambiá",
+ "confirm": "Konfirmá",
+ "actioncomplete": "Akshon kompletá",
+ "prot_1movedto2": "[[$1]] mové pa [[$2]]",
+ "protect-legend": "Konfirmá protekshon",
+ "undelete": "Wak páginanan kitá",
+ "invert": "Invertí selekshon",
+ "blanknamespace": "(Prinsipal)",
+ "contributions": "Kontribushonnan di uzadó",
+ "mycontris": "Mi kontribushonnan",
+ "whatlinkshere": "Kiko ta link aki",
+ "blockip": "Blokia uzadó",
+ "badipaddress": "IP adrès ta inválido",
+ "blockipsuccesssub": "Blokeo eksitoso",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] tabata blokiá.<br />\nWak e [[Special:BlockList|lista di blokeonan]] pa wak tur blokeo aktivo.",
+ "unblockip": "Desblokia uzadó",
+ "blocklink": "blokia",
+ "unblocklink": "desblokia",
+ "contribslink": "kontrib'nan",
+ "autoblocker": "Bo tabata outomatikamente blokiá pasombra \"[[User:$1|$1]]\" a uza e IP adrès aki resientemente. E rason ku $1 tabata blokiá ta: \"'''$2'''\"",
+ "unblocklogentry": "a desblokia $1",
+ "articleexists": "Tin un página ku e título ei kaba, òf e\ntítulo ku bo a skohe no ta válido.\nPor fabor skohe un otro título.",
+ "allmessages": "Mensahenan di sistema",
+ "allmessagesname": "Nòmber",
+ "allmessagesdefault": "Teksto predeterminá",
+ "allmessagescurrent": "Teksto aktual",
+ "allmessagestext": "Esaki ta un lista di mensahe di sistema disponibel den e dominio di MediaWiki.",
+ "anonymous": "Uzadó(nan) anonimo di {{SITENAME}}",
+ "previousdiff": "← Diferensia anterior",
+ "nextdiff": "Siguiente diferensia →",
+ "namespacesall": "tur",
+ "confirmemail": "Konfirmá e-mail adrès",
+ "confirmemail_text": "Bo mester validá bo e-mail adrès pa uza funkshonnan di e-mail.\nPrimi e boton abou pa manda un e-mail di konfirmashon pa bo e-mail adrès.\nOra bo haña e e-mail, bo ta sigui e instrukshonnan aden.\nPa kontrolá si bo ta konfirmá kaba, wak bo preferensianan.",
+ "confirmemail_send": "Manda un kódigo di konfirmashon via e-mail.",
+ "confirmemail_sent": "E-mail pa konfirmashon mandá.",
+ "confirmemail_invalid": "Kódigo di konfirmashon inválido. Ta posibel ku e kódigo a kaduká.",
+ "confirmemail_needlogin": "Bo mester $1 pa konfirmá bo e-mail adrès.",
+ "confirmemail_success": "Bo e-mail adrès tabata konfirmá. Bo por outentiká bo mes i gosa di {{SITENAME}}.",
+ "confirmemail_loggedin": "Bo e-mail adrès ta konfirmá.",
+ "confirmemail_subject": "{{SITENAME}}: Konfirmashon di e-mail adrès",
+ "confirmemail_body": "Un hende, probablemente abo, di IP adrès $1, a registrá e\nkuenta \"$2\" ku e e-mail adrès aki riba {{SITENAME}}.\n\nPa konfirmá ku e kuenta aki en berdat ta di bo i pa aktivá\nfunkshonnan di e-mail riba {{SITENAME}}, por fabor habri e link aki:\n\n$3\n\nSi esaki *no* ta abo, por fabor no habri e link.\nFollow this link to cancel the e-mail address confirmation:\n\n$5\n\nE kódigo di konfirmashon aki lo kaduká riba $4.",
+ "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|diskushon]]) a kita e artíkulo aki despues ku bo ta kuminsá editá. E rason ta:\n: ''$2''\nPor fabor konfirmá ku bo ke traha e artíkulo aki di nobo.",
+ "specialpages": "Páginanan Spesial"
}
diff --git a/languages/i18n/pcd.json b/languages/i18n/pcd.json
index 2c500964..a2293109 100644
--- a/languages/i18n/pcd.json
+++ b/languages/i18n/pcd.json
@@ -392,7 +392,6 @@
"search-interwiki-more": "(pus)",
"searchrelated": "relaté",
"searchall": "tout",
- "showingresultsheader": "{{PLURAL:$5|Résultat '''$1'''|Résultats '''$1–$2'''}} éd '''$3''' pour '''$4'''",
"search-nonefound": "Y a autchun résultat pour chol dmanne.",
"powersearch-legend": "Érvue avanchée",
"powersearch-ns": "Tracher din chés éspaches éd chés noms:",
@@ -543,7 +542,6 @@
"pager-older-n": "{{PLURAL:$1|pus viu 1|pus vius $1}}",
"booksources": "Sources dech live",
"booksources-search-legend": "Tracher chés référinches d'chés lives",
- "booksources-go": "Aler",
"log": "Gasètes",
"allpages": "Tertous chés paches",
"prevpage": "Pache édvant ($1)",
@@ -572,7 +570,7 @@
"watchthispage": "Suire l'pache-lo",
"unwatch": "N'poin suire",
"watchlist-details": "{{PLURAL:$1|$1 pache|$1 paches}} din vote lisse à suire, chés paches éd disqhuchon n'sont poin conptées.",
- "wlshowlast": "Montrer darin $1 eûres $2 jours $3",
+ "wlshowlast": "Montrer darin $1 eûres $2 jours",
"watchlist-options": "Opchons del lisse à suire",
"watching": "Suire…",
"unwatching": "n'poin suire…",
@@ -752,7 +750,6 @@
"metadata-expand": "Montrer chés métadatas del imache",
"metadata-collapse": "Mucher chés métadatas del imache",
"metadata-fields": "Chés cans d'chés métadonnées EXIF afiqués din ch'messache-lo is s'ront mis din l'pache d'édvisse éd l'image quant el tabe d'chés métadonnées ale s'ro rapetichée.<br />\nChés eutes cans is s'ront muchés pèr défeut.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "tertous",
"namespacesall": "tous",
"monthsall": "tertous",
"imgmultipageprev": "← pache édvant",
diff --git a/languages/i18n/pdc.json b/languages/i18n/pdc.json
index caf85e57..0ca450f6 100644
--- a/languages/i18n/pdc.json
+++ b/languages/i18n/pdc.json
@@ -5,7 +5,8 @@
"Krinkle",
"Shirayuki",
"Xqt",
- "לערי ריינהארט"
+ "לערי ריינהארט",
+ "아라"
]
},
"tog-underline": "Gleecher unnerleine:",
@@ -478,7 +479,6 @@
"movethispage": "Blatt ziehe",
"pager-newer-n": "{{PLURAL:$1|neegscht|neegscht $1}}",
"pager-older-n": "{{PLURAL:$1|letscht|letscht $1}}",
- "booksources-go": "Uffgucke",
"specialloguserlabel": "Yuuser:",
"speciallogtitlelabel": "Titel:",
"log": "Logbicher",
@@ -520,7 +520,7 @@
"unwatchthispage": "Nimmi watsche",
"notanarticle": "Ken Blatt",
"watchlist-details": "{{PLURAL:$1|$1 Blatt|$1 Bledder}} uff dei Watch-Lischt, ohne Gschwetz-Bledder",
- "wlshowlast": "Zeig die Enneringe vun de letscht $1 Schtund, $2 Daag odder $3.",
+ "wlshowlast": "Zeig die Enneringe vun de letscht $1 Schtund, $2 Daag odder .",
"watching": "Watsche…",
"unwatching": "Nimmi watsche...",
"enotif_impersonal_salutation": "{{SITENAME}}-Yuuser",
@@ -681,7 +681,6 @@
"exif-meteringmode-255": "Naett bekannt",
"exif-gaincontrol-0": "Ken",
"exif-iimcategory-sci": "Wisseschaft unn Waerkzeichheet‎",
- "watchlistall2": "all",
"namespacesall": "all",
"monthsall": "all",
"scarytranscludetoolong": "[URL iss zu lang]",
@@ -708,7 +707,7 @@
"version-specialpages": "Besunnere Bledder",
"version-other": "Anneres",
"version-mediahandlers": "Media-Haendlers",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-poweredby-others": "annere",
"version-software-version": "Version",
"fileduplicatesearch-filename": "Feilnaame:",
diff --git a/languages/i18n/pdt.json b/languages/i18n/pdt.json
index c8d1d7bd..9ac3ca72 100644
--- a/languages/i18n/pdt.json
+++ b/languages/i18n/pdt.json
@@ -17,7 +17,6 @@
"tog-showtoolbar": "Instrumente-Leist wiese (JavaScript)",
"tog-editondblclick": "Siede mett Dobbeltklick beoabeide (JavaScript)",
"tog-editsectiononrightclick": "Eenzelne Aufschnette mett eenem Rajsch-Klick beoabeide (JavaScript)",
- "tog-rememberpassword": "Login bewoare, dee Brucka blift aun disem Computer aunjemaldt",
"tog-previewontop": "Wies Preview bowe em Beoabeide-Fensta",
"tog-showhiddencats": "Wies fe'stoakne Kategorien",
"underline-always": "Emma",
@@ -116,7 +115,6 @@
"talkpagelinktext": "Beredsied",
"specialpage": "Spezialsied",
"personaltools": "Perseenliche Instrumente",
- "postcomment": "Kommentar moake",
"talk": "Beredsied",
"views": "Aunsechte",
"toolbox": "Instrumente",
@@ -196,7 +194,6 @@
"yourname": "Bruckanome:",
"yourpassword": "Pauswot:",
"nav-login-createaccount": "Aunmalde",
- "loginprompt": "Tom Aunmalde motte Cookies bie {{SITENAME}} aktiviet senne.",
"userlogin": "Aunmalde",
"logout": "Rut hia",
"userlogout": "Rut hia",
@@ -219,7 +216,6 @@
"savearticle": "Sied bewoare",
"preview": "Preview",
"showpreview": "Wies Preview",
- "showlivepreview": "Live-Preview",
"showdiff": "Endanisse wiese",
"anoneditwarning": "'''Paus opp:''' Du best nich aunjemaldt. Diene IP-Adras woat enne Versioonsjeschicht oppbewoat en es emma to seene.",
"missingsummary": "'''Dentj draun:''' Du hast tjeene Toopfotinj jemoakt. Wan du wada opp Bewoare klickst, woat diene Endanis ohne Toopfotinj ewanohme.",
@@ -251,7 +247,6 @@
"mypreferences": "Miene Ennstalinje",
"youremail": "Email:",
"username": "Bruckanome:",
- "uid": "Brucka-ID:",
"prefs-memberingroups": "Mettjliet von {{PLURAL:$1|group|groups}}:",
"yourrealname": "Ajchta Nome:",
"yourlanguage": "Sproak:",
@@ -309,7 +304,6 @@
"speciallogtitlelabel": "Tietel:",
"all-logs-page": "Aule Berejchte",
"allpages": "Aule Siede",
- "alphaindexline": "$1 bott $2",
"allpagesfrom": "Wies Siede fonn auf:",
"allarticles": "Aule Siede",
"mywatchlist": "Miene Oppaussied",
@@ -415,15 +409,8 @@
"tooltip-rollback": "\"Rollback\" dreit dee Endarung(e) von dise Sied mett eenem Klick wada tridj bettem latsten Biedrach.",
"tooltip-undo": "Moakt bloos dise eene Endarung tridj en wiest daut Resultaut en eenem Eschtmolseene-Fensta, doamett enne Toopfotinj een Grunt jenant woare kaun.",
"common.css": "/* CSS opp dise Sted woat opp aula Skins wirtje */",
- "cologneblue.css": "/* CSS opp dise Sted wirtjt opp daut Keloonsch-Blau-Skin */",
- "monobook.css": "/* CSS opp dise Sted wirtjt opp daut Monobook-Skin */",
- "modern.css": "/* CSS opp dise Sted wirtjt opp daut Modern-Skin */",
"print.css": "/* CSS opp dise Sted woat daut Utkome vom Dretje aundasch moake */",
"common.js": "/* Daut neachste JavaScript woat fe aula Brucka jelode. */",
- "cologneblue.js": "/* Daut neachste JavaScript woat fe Brucka mett Keloonsch-Blau-Skin jelode */",
- "monobook.js": "/* Daut neachste JavaScript woat fe Brucka mett Monobook-Skin jelode */",
- "modern.js": "/* Daut neachste JavaScript woat fe Brucka mett Modern-Skin jelode. */",
- "notacceptable": "Dee Wiki-Server kaun dee Dote nich soo reedmoake, daut dien Jereetschauft dee lese kaun.",
"anonymous": "Onbekaunda Brucka {{PLURAL:$1|user|users}} von {{SITENAME}}",
"siteuser": "{{SITENAME}}-Brucka $1",
"lastmodifiedatby": "Dise Sied word daut latste Mol aum $1, Klock $2 von $3 je'endat.",
@@ -444,7 +431,6 @@
"markedaspatrolledtext": "Dee utjewehlde Sied-Versioon es aus kontrolliet markiet.",
"bad_image_list": "Format:\n\nBloos items, woone mett eenem * aunfange, woare jenome. Dee eschta Link no dem * mott een Link opp een schlajchtet Dokument (file) senne. Dee Links, woone dan kome, wiese opp Utnohme, aulsoo soone Siede, woo daut Dokument (file) jewese en jeseene woare kaun.",
"metadata": "Meta-Dote",
- "watchlistall2": "aule",
"namespacesall": "aule",
"monthsall": "aule",
"specialpages": "Spezialsiede"
diff --git a/languages/i18n/pfl.json b/languages/i18n/pfl.json
index f60e1dc9..007387b6 100644
--- a/languages/i18n/pfl.json
+++ b/languages/i18n/pfl.json
@@ -10,13 +10,13 @@
"아라"
]
},
- "tog-underline": "Lingg unnaschdraische",
- "tog-hideminor": "Vaschdegg klääne Bearwaidunge",
- "tog-hidepatrolled": "Vaschdegg gsischdede Ännarunge",
- "tog-extendwatchlist": "Zaisch alle Ännarunge unn ned nur die ledschde",
- "tog-showtoolbar": "Wergzaisch fas Schaffe zaische",
- "tog-previewontop": "Vorbligg owwahalwb vum Beaawaidungsfenschda zaische",
- "tog-previewonfirst": "Zaischen Vorbligg baim erschdemol Schaffe",
+ "tog-underline": "Ling'g unnaschdraische",
+ "tog-hideminor": "Vaschdeggl klääne Beawaidunge vunde „Ledschde Ännarunge“",
+ "tog-hidepatrolled": "Vaschdeggl gsischdede Ännarunge inde „Ledschde Ännarunge“",
+ "tog-extendwatchlist": "Zaisch alle Ännarunge unn nedd nua die ledschde",
+ "tog-showtoolbar": "Weagzaisch fas Schaffe zaische",
+ "tog-previewontop": "VoAbligg owwahalwb vum Beawaidungsfenschda zaische",
+ "tog-previewonfirst": "Zaischn VoAbligg baim erschdemol Schaffe",
"tog-oldsig": "Voahonneni Unnaschrifd",
"tog-uselivepreview": "Uuvazeschada Vorbligg (vasugswais)",
"tog-showhiddencats": "Zaisch vaschdeglde Grubbe",
@@ -31,7 +31,7 @@
"wednesday": "Middwoch",
"thursday": "Dunnaschdaach",
"friday": "Fraidaach",
- "saturday": "Sõmschdaach",
+ "saturday": "Soamschdaach",
"sun": "Su",
"mon": "Mo",
"tue": "Di",
@@ -41,7 +41,7 @@
"sat": "So",
"january": "Janua",
"february": "Februa",
- "march": "März",
+ "march": "Mäaz",
"april": "Abril",
"may_long": "Mai",
"june": "Juni",
@@ -53,7 +53,7 @@
"december": "Dezemba",
"january-gen": "Janua",
"february-gen": "Februa",
- "march-gen": "März",
+ "march-gen": "Mäaz",
"april-gen": "Abril",
"may-gen": "Mai",
"june-gen": "Juni",
@@ -65,7 +65,7 @@
"december-gen": "Dezemba",
"jan": "Jan",
"feb": "Feb",
- "mar": "Mär",
+ "mar": "Mäa",
"apr": "Abr",
"may": "Mai",
"jun": "Jun",
@@ -81,6 +81,7 @@
"april-date": "$1. Abril",
"may-date": "$1. Mai",
"june-date": "$1. Juni",
+ "july-date": "$1. Juli",
"august-date": "$1. Auguschd",
"september-date": "$1. Sebdemba",
"october-date": "$1. Ogdowa",
@@ -91,19 +92,19 @@
"subcategories": "Unnagrubbe",
"category-media-header": "Medje indɐ Sachgrubb „$1“",
"category-empty": "\"Die Sachgrubb hodd kä Said odda Medje.\"",
- "hidden-categories": "{{PLURAL:$1|Vaschdegldi Sachgrubb|Vaschdeglde Sachgrubbe}}",
+ "hidden-categories": "{{PLURAL:$1|Vaschdeggldi Sachgrubb|Vaschdegglde Sachgrubbe}}",
"hidden-category-category": "Verschdegelde Grubbe",
"category-subcat-count": "{{PLURAL:$2|Die Sachgrubb hodd die Unnagrubb.|Die Sachgrubb hodd {{PLURAL:$1|Unnagrubb|$1 Unnagrubbe}}, vun gsomd $2.}}",
"category-subcat-count-limited": "Die Sachgrubb hod die {{PLURAL:$1|Unagrubb|$1 Unagrubbe}}.",
"category-article-count": "{{PLURAL:$2|Die Sachgrubb hodd bloß die Said.|Die {{PLURAL:$1|Said|$1 Saide}} gibbds inde Sachgrubb, vun gsomd $2.}}",
"category-article-count-limited": "Die {{PLURAL:$1|Said|$1 Saide}} hodds inde Sachgrubb.",
- "category-file-count": "{{PLURAL:$2|Die Sachgrubb hodd ä Said.|Die {{PLURAL:$1|Said isch änni vun $2 Saide:|S'werren $1 vun gsomd $2 Saide gzaischd:}}}}",
+ "category-file-count": "{{PLURAL:$2|Die Sachgrubb hoddä Said.|Die {{PLURAL:$1|Said isch änni vun $2 Saide:|S'werren $1 vun gsomd $2 Saide gzaischd:}}}}",
"category-file-count-limited": "Die {{PLURAL:$1|Dadai|$1 Dadije}} hodds inde Sachgrubb.",
"listingcontinuesabbrev": "(Waida)",
"index-category": "Eafassdi Saide",
"noindex-category": "Saide, wu ned im Vazaischnis sinn",
"about": "Iwwa",
- "newwindow": "(werd innem naije Fenschda uffgmachd)",
+ "newwindow": "(wead innem naije Fenschda uffgmachd)",
"cancel": "Abbresche",
"moredotdotdot": "Mea …",
"mypage": "Said",
@@ -116,26 +117,29 @@
"qbpageoptions": "Die Said",
"qbmyoptions": "Moi Saide",
"faq": "Ofd gschdeldi Froche",
- "actions": "Maßnõhme",
- "namespaces": "Nõmensreum",
+ "actions": "Maßnoahme",
+ "namespaces": "Noamensreum",
"variants": "Tibbe",
+ "navigation-heading": "Nawigadzionsmeni",
"errorpagetitle": "Irrdumm",
- "returnto": "Zrick zu $1.",
+ "returnto": "Zrick uff $1.",
"tagline": "Vun {{SITENAME}}",
- "help": "Unaschdidzung",
+ "help": "Unnaschdidzung",
"search": "Nochgugge",
"searchbutton": "Gugg",
"go": "Ausfiere",
"searcharticle": "Ausfiare",
"history": "Gschischd vunde Said",
"history_short": "Gschischd",
- "printableversion": "Drugg-Õsischd",
- "permalink": "Schdendischa Lingg",
+ "printableversion": "Drugg-Oasischd",
+ "permalink": "Schdendischa Ling'g",
"print": "Drugge",
- "view": "Ogugge",
+ "view": "Oagugge",
+ "view-foreign": "Uff $1 oagugge",
"edit": "Schaffe",
"edit-local": "Gugg uff $1",
- "create": "Õleesche",
+ "create": "Oaleesche",
+ "create-local": "Fiesch hiesischi B'schraiwung dzu",
"editthispage": "Onde Said schaffe",
"create-this-page": "Mach die Said",
"delete": "Lesche",
@@ -150,24 +154,25 @@
"newpage": "Naiji Said",
"talkpage": "Iwwa die Said dischbediere",
"talkpagelinktext": "Dischbediere",
- "specialpage": "Schbezielli Said",
- "personaltools": "Persenlischs Wergzaisch",
- "articlepage": "Inhald õgugge",
+ "specialpage": "Schbezjelli Said",
+ "personaltools": "Persenlischs Weagzaisch",
+ "articlepage": "Inhald oagugge",
"talk": "Dischbediere",
"views": "Uffruf",
- "toolbox": "Wergzaisch",
- "userpage": "Middawaidasaid õgugge",
- "projectpage": "Brojegdsaid õgugge",
- "imagepage": "Dadaisaid õgugge",
- "mediawikipage": "Nochrischd õgugge",
- "templatepage": "Voalach õgugge",
- "viewhelppage": "Hilf õgugge",
+ "toolbox": "Weagzaisch",
+ "userpage": "Middawaidasaid oagugge",
+ "projectpage": "Brojegdsaid oagugge",
+ "imagepage": "Dadaisaid oagugge",
+ "mediawikipage": "Nochrischd oagugge",
+ "templatepage": "Voalach oagugge",
+ "viewhelppage": "Hilf oagugge",
"categorypage": "Zaisch die Kadegorie",
"viewtalkpage": "Zaischs Gbabbl",
- "otherlanguages": "In õnnare Schbroche",
+ "otherlanguages": "In oannare Schbroche",
"redirectedfrom": "(Nochgschiggd worre vun $1)",
"redirectpagesub": "Nochschigg-Said",
- "lastmodifiedat": "Die Said ischs ledschde Mol gännad worre õm $1, õm $2.",
+ "redirectto": "Umlaidung uff:",
+ "lastmodifiedat": "Die Said ischs ledschde Mol g'ännad worre uff $1, om $2.",
"viewcount": "Die Said isch bis jedz {{PLURAL:$1|ämol1|$1 mol}} uffgrufe worre.",
"protectedpage": "Said schidze",
"jumpto": "Hubs uff:",
@@ -178,17 +183,18 @@
"aboutsite": "Iwwa {{SITENAME}}",
"aboutpage": "Project:Iwwa",
"copyright": "Was do drin schded isch unna $1 vafieschba, wonn nedd onnaschda vameagd.",
- "copyrightpage": "{{ns:project}}:Urhewareschd",
+ "copyrightpage": "{{ns:project}}:Uahewareschd",
"currentevents": "Aggduelli Gscheniss",
"currentevents-url": "Project: Leschdi Gschneniss",
"disclaimers": "Hafdungsausschluß",
"disclaimerpage": "Project:Impressum",
- "edithelp": "Unaschdizung fas Schaffe",
+ "edithelp": "Unnaschdizung fas Schaffe",
+ "helppage-top-gethelp": "Hilf",
"mainpage": "Schdadsaid",
"mainpage-description": "Schdadsaid",
"policy-url": "Project:Grundsedz",
- "portal": "{{SITENAME}}-Bordal",
- "portal-url": "Project:Gmoinschafdsbordal",
+ "portal": "{{SITENAME}}-Boadal",
+ "portal-url": "Project:Gmoinschafdsboadal",
"privacy": "Daadeschuds",
"privacypage": "Project:Daadeschuds",
"badaccess": "Ned genuch Reschd",
@@ -197,18 +203,20 @@
"youhavenewmessages": "Du hoschd $1 ($2).",
"newmessagesdifflinkplural": "ledschdi {{PLURAL:$1|Ännarung|999=Ännarunge}}",
"youhavenewmessagesmulti": "Do hoschd ä Nochrischd grischd: $1",
- "editsection": "schaffe",
- "editold": "schaffe",
- "viewsourceold": "Gwelltegschd õgugge",
+ "editsection": "Schaffe",
+ "editold": "Schaffe",
+ "viewsourceold": "Gwelltegschd oagugge",
"editlink": "schaffe",
- "viewsourcelink": "Gwell õgugge",
+ "viewsourcelink": "Gwell oagugge",
"editsectionhint": "Deel ännare: $1",
"toc": "Inhald",
"showtoc": "zaische",
"hidetoc": "vaschdeggle",
"collapsible-collapse": "Oiglabbe",
"collapsible-expand": "Uffglabbe",
- "thisisdeleted": "$1 õgugge odda widdaheaschdelle?",
+ "confirmable-yes": "Ja",
+ "confirmable-no": "Nä",
+ "thisisdeleted": "$1 oagugge odda widdaheaschdelle?",
"viewdeleted": "$1 zaische?",
"restorelink": "{{PLURAL:$1|ä gleschdi Ännarung|$1 gleschde Ännarunge}}",
"site-rss-feed": "$1 RSS-Feed",
@@ -219,17 +227,18 @@
"nstab-main": "Said",
"nstab-user": "Middawaidasaid",
"nstab-media": "Medije",
- "nstab-special": "Schbezialsaid",
+ "nstab-special": "Sondasaid",
"nstab-project": "Bordal",
"nstab-image": "Dadai",
"nstab-mediawiki": "Middeelung",
- "nstab-template": "Vorlach",
+ "nstab-template": "Vorlaach",
"nstab-help": "Unaschdidzung",
"nstab-category": "Sachgrubb",
"nosuchaction": "Des hodds nedd",
"nosuchspecialpage": "Schbezialsaid hodds nedd",
"error": "Irrdumm",
"databaseerror": "Daadebongg-Irrdumm",
+ "databaseerror-query": "Abfroche: $1",
"databaseerror-error": "Fehla: $1",
"laggedslavemode": "<strong>Baßma uff:</strong> Die Said hodd viellaischd die ledschde Ännarunge nedd.",
"readonly": "Daadebongg blogiead",
@@ -247,17 +256,17 @@
"formerror": "Irrdumm: hoddma nedd mache kenne.",
"badarticleerror": "Des geed nedd uffde Said.",
"cannotdelete-title": "\"$1\" komma nedd lesche",
- "badtitle": "Schleschde Didl",
- "badtitletext": "De Tidl vunde õgfordad Said isch nedd gildisch, lea, oddan nedd gildische Lingg vunem õnnare Wiki.\nS konn soi, dasses ä odda mea Zaische drin hodd, wu im Tidl vunde Said nedd gbrauchd werre dirfn.",
- "viewsource": "Gwelltegschd õgugge",
- "viewsource-title": "D'Tegschd vun $1 õgugge",
- "viewsourcetext": "Konschdas õgugge un abschraiwe",
- "viewyourtext": "Konschda doi Eawed uff de Said õgugge un abschraiwe:",
- "ns-specialprotected": "Do komma nedd drõ schaffe",
- "exception-nologin": "Bischd nedd õgmeld",
+ "badtitle": "Schleschda Didl",
+ "badtitletext": "De Tidl vunde oagfoadad Said isch nedd gildisch, lea, oddan nedd gildische Ling'g vunnem oannare Wiki.\nS'konn soi, dasses ä odda mea Zaische drin hodd, wu im Tidl vunde Said nedd gbrauchd werre diafn.",
+ "viewsource": "Gwelltegschd oagugge",
+ "viewsource-title": "D'Tegschd vun $1 oagugge",
+ "viewsourcetext": "Konschdas oagugge un abschraiwe",
+ "viewyourtext": "Konschda <strong>doi Eawed</strong> uffde Said oagugge un abschraiwe:",
+ "ns-specialprotected": "Do komma nedd droa schaffe",
+ "exception-nologin": "Bischd nedd oagmeld",
"virus-unknownscanner": "Uubekonnda Viresucha:",
"welcomeuser": "Willkumme, $1!",
- "yourname": "Middawaidanõme:",
+ "yourname": "Middawaidanoame:",
"userlogin-yourname": "Middawaida",
"userlogin-yourname-ph": "Gebb doin Nome oi",
"createacct-another-username-ph": "Middawaida",
@@ -269,89 +278,121 @@
"createacct-yourpasswordagain": "Password bschdedische",
"createacct-yourpasswordagain-ph": "Bschdedisch doi Password",
"remembermypassword": "Moi Kennword uffm Brausa merge (hegschdns fa $1 {{PLURAL:$1|Daach|Daach}})",
- "login": "Õmelde",
- "nav-login-createaccount": "Õmelde / Kondo õleesche",
- "userlogin": "Õmelde / Kondo õleesche",
+ "userlogin-remembermypassword": "Oagmeld blaiwe",
+ "login": "Oamelde",
+ "nav-login-createaccount": "Oamelde / Kondo oaleesche",
+ "userlogin": "Oamelde / Kondo oaleesche",
"userloginnocreate": "Oilogge",
"logout": "Uffhere",
"userlogout": "Uffhere",
+ "notloggedin": "Bischd nedd oagmeld",
"userlogin-noaccount": "Hoschd kä Kondo?",
+ "userlogin-joinproject": "Bai {{SITENAME}} oamelde",
"nologin": "Hoschd noch kä Kondo? $1",
- "nologinlink": "E Kondo õleesche",
- "createaccount": "Kondo õleesche",
+ "nologinlink": "Ä Kondo oaleesche",
+ "createaccount": "Kondo oaleesche",
"gotaccount": "Hoschd schun ä Kondo? $1",
- "gotaccountlink": "Õmelde",
+ "gotaccountlink": "Oamelde",
"userlogin-resetlink": "Hoschd doi Daade vagesse?",
+ "userlogin-resetpassword-link": "Hoschd doi Kennwoad vagesse?",
+ "userlogin-helplink2": "Hilf baim Oamelde",
+ "userlogin-createanother": "Leschda nochä Kondo oa",
+ "createacct-emailrequired": "E-Mail-Address",
+ "createacct-emailoptional": "E-Mail-Adress (fraiwillisch)",
+ "createacct-email-ph": "Gebb doi E-Mail-Adress oi",
+ "createacct-another-email-ph": "Gebb doi E-Mail-Adress oi",
+ "createacct-realname": "Wie heschd (mugschds awwa nedd)",
"createaccountreason": "Grund:",
+ "createacct-reason": "Bgrindung",
+ "createacct-captcha": "Sischahaidsbriefung",
+ "createacct-imgcaptcha-ph": "Gebbde Tegschd oi, wu owwe seje duschd",
+ "createacct-submit": "Leschda ä Kondo oa",
+ "createacct-another-submit": "Leschda ä onnares Kondo oa",
+ "createacct-benefit-heading": "{{SITENAME}} wead vun Laid wie dia gmachd.",
+ "createacct-benefit-body1": "{{PLURAL:$1|B'waidung|B'waidunge}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|Said|Saide}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|Ledscha|Ledsche}} Middawaida",
"badretype": "Kennword bassd nedd",
"userexists": "De Middawaida hodds schun.\nNemmen onnare.",
- "loginerror": "Irrdumm baim Õmelde",
+ "loginerror": "Irrdumm baim Oamelde",
"createaccounterror": "Kondo $1 komma nedd mache",
"loginsuccesstitle": "Konschd schaffe",
"login-userblocked": "De Middawaida deaf do nemme schaffe.",
"wrongpasswordempty": "Hoschds Kennword vagesse. Mags nomol.",
"passwordtooshort": "Kennword muss {{PLURAL:$1|1 Zaische|$1 Zaische}} hawe.",
"password-name-match": "Doi Kennword deaf nedd so heese wie du.",
- "password-login-forbidden": "De Nõme uns Kennword sinn fabode.",
+ "password-login-forbidden": "De Noame uns Kennword sinn fabode.",
"mailmypassword": "Kennword zriggsedze",
- "accountcreated": "Kondo õgleeschd",
+ "accountcreated": "Kondo oagleeschd",
"login-abort-generic": "Hodd nedd gklabbd - Abgbroche",
"loginlanguagelabel": "Schbrooch: $1",
+ "pt-login": "Oilogge",
+ "pt-login-button": "Oilogge",
+ "pt-createaccount": "Kondo oaleesche",
+ "pt-userlogout": "Uffhere",
+ "changepassword": "Passwoad weggsle",
+ "resetpass_header": "Passwoad weggsle",
"oldpassword": "Alds Kennword",
"newpassword": "Naijes Kennword",
"retypenew": "Naijes Kennword nomol oigewe:",
+ "changepassword-success": "Doi Passwoad isch gweggsld worre!",
"resetpass_forbidden": "Kennwerda komma nedd wegsle",
"resetpass-submit-loggedin": "Password wegsle",
"resetpass-submit-cancel": "Uffhere",
"resetpass-temp-password": "Bschrengds Kennword",
+ "resetpass-abort-generic": "S'Passwoad weggsle isch vunna Eawaidarung unnabroche worre.",
+ "resetpass-expired": "Doi Passwoad isch abgloffe. Gebbä naijes Passwoad oi.",
"passwordreset": "Kennword zriggsedze",
"passwordreset-legend": "Kennword zriggsedze",
"passwordreset-username": "Middawaida:",
"passwordreset-capture": "E-Mail õgugge?",
+ "changeemail": "E-Mail-Adress ännare",
"changeemail-none": "(käni)",
- "changeemail-cancel": "Uffhere",
+ "changeemail-submit": "E-Mail-Adress ännare",
+ "resettokens-token-label": "$1 (jedzischa Wead: $2)",
"bold_sample": "Feddi Schrifd",
"bold_tip": "Feddi Schrifd",
"italic_sample": "Schebbi Schrifd",
"italic_tip": "Schebbi Schrifd",
"link_sample": "Schdischwoad",
- "link_tip": "Inderna Lingg",
- "extlink_sample": "http://www.example.com Linggtegschd",
- "extlink_tip": "Exderna Lingg (uff http:// uffbasse)",
+ "link_tip": "Inderna Ling'g",
+ "extlink_sample": "http://www.example.com Ling'gtegschd",
+ "extlink_tip": "Exderna Ling'g (uff http:// uffbasse)",
"headline_sample": "Schlaachzail",
"headline_tip": "Iwwaschrifd Ewene 2",
- "nowiki_sample": "Gebb do'n Tegschd oi, wu nedd uffberaid werd",
- "nowiki_tip": "Wiki-Formatierunge ned beachde",
+ "nowiki_sample": "Gebb do'n Tegschd oi, wu nedd uffb'raid wead",
+ "nowiki_tip": "Wiki-Formatierunge nedd beachde",
"image_tip": "Bildvawais",
- "media_tip": "Dadailingg",
- "sig_tip": "Doi Unnaschrifd midena Zaidõgawb",
- "hr_tip": "Waagreschdi Linje (schbaasõm vawende)",
+ "media_tip": "Dadailing'g",
+ "sig_tip": "Doi Unnaschrifd midd ena Zaidoagawb",
+ "hr_tip": "Waagreschdi Linje (schbaasoam vawende)",
"summary": "Iwwabligg:",
"subject": "Bedreff:",
- "minoredit": "Des ische glänni Beawaidung",
+ "minoredit": "Des ischä glänni Beawaidung",
"watchthis": "Die Said im Aach palde",
- "savearticle": "Said schbaischere",
+ "savearticle": "Said schbaischare",
"preview": "Voaschau",
"showpreview": "Voaschau zaische",
"showdiff": "Ännarunge zaische",
- "anoneditwarning": "'''Baßma uff:''' Du bischd ned õgemeld. Doi IP-Adress werd inde Gschischd vum Adiggl gschbaischad.",
+ "anoneditwarning": "'''Baßma uff:''' Du bischd ned oagemeld. Doi IP-Adress wead inde Gschischd vum Adiggl gschbaischad, wonn schaffe duschd. Wonn<strong>[$1 oilogschd]</strong> oddan <strong>[$2 Account magschd]</strong>, werren doi Eawede unna doim Benudzanoame gzaischd, newe onnare Voadel.",
+ "anonpreviewwarning": "''Du bischd nedd oagmeld. Baim Schbaischare wead doi IP-Adress inde Gschischd vameagd.''",
"summary-preview": "Iwwabligg:",
"blockedtitle": "Middawaida isch gschbead",
"blockednoreason": "s'hod kän Grund",
"whitelistedittext": "Mugschd disch $1 fas schaffe",
"loginreqtitle": "Mugschd disch õmelde",
- "loginreqlink": "Õmelde",
+ "loginreqlink": "Oamelde",
"loginreqpagetext": "Mugschd disch $1 fas õgugge.",
"accmailtitle": "Kennword gschiggd",
"newarticle": "(Naij)",
- "newarticletext": "Du bischdm Lingg nochgõnge zu enna Said, wus ganedd hodd.\nFa die Said õzleesche, konnschd do im Käschdl unne õfonge mid schraiwe (gugg [$1 Hilf] fa mea Auskinfd).\nWonn do nedd hoschd heakumme wolle, drigg uff Browser uff '''Zrigg'''.",
- "noarticletext": "Uffde Said hods noch kän Tegschd. Du konnschd uff õnnare Saide nochm [[Special:Search/{{PAGENAME}}|Oidrach gugge]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Logbuchaidrach gugge, wu dezu kead],\nodda [{{fullurl:{{FULLPAGENAME}}|action=edit}} die Said beawaide]</span>.",
- "noarticletext-nopermission": "Do hods känn Tegschd.\nDu konschd uff onnare Saide [[Special:Search/{{PAGENAME}}|faden Tidl gugge]], odda <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} in alle Logs gugge]</span>, awwa du hoschd kä Ealauwnis die Said zu mache.",
+ "newarticletext": "Du bischdm Ling'g nochgoange zu enna Said, wus ganedd hodd.\nFa die Said oazleesche, konnschd do im Käschdl unne oafonge midd schraiwe (gugg [$1 Hilf] fa mea Auskinfd).\nWonn do nedd hoschd heakumme wolle, drigg uffm Browser uff '''Zrigg'''.",
+ "noarticletext": "Uffde Said hodds noch kän Tegschd. Konnschd uff oannare Saide nochm [[Special:Search/{{PAGENAME}}|Oidrach gugge]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Logbuchoidrach gugge, wu dzu kead],\nodda [{{fullurl:{{FULLPAGENAME}}|action=edit}} die Said b'awaide]</span>.",
+ "noarticletext-nopermission": "Do hodds känn Tegschd.\nDu konschd uff oannare Saide [[Special:Search/{{PAGENAME}}|faden Tidl gugge]], odda <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} in alle Logs gugge]</span>, awwa hoschd kä Ealauwbnis die Said zu mache.",
"updated": "(Gännad)",
"note": "'''Hiwes:'''",
"previewnote": "'''Deng'g drõõ, dasses nua e Vorschau isch.'''\nDoi Ännarunge sinn noch nedd gschbaischadd worre!",
- "editing": "Õm $1 schaffe",
- "creating": "Magsch $1",
+ "editing": "Oam $1 schaffe",
+ "creating": "Magschd $1",
"editingsection": "$1 schaffe (Deel)",
"editingcomment": "$1 schaffe (Deel)",
"editconflict": "Schdraid ums Ännare: $1",
@@ -359,28 +400,33 @@
"storedversion": "Gschbaischerdi Version",
"yourdiff": "Unaschied",
"copyrightwarning": "Baß uff, dass alli Baidräch fa {{SITENAME}} unna $2 vaeffendlischd werren (gugg $1 fa mea Enzlhaide).\nWonnsda ned basse dud, dass des wu gschriwwe hoschd, gännad un kopiead werre konn, donn duus do ned noischraiwe.<br />\nDu gibbschd do a zu, dasses selwaschd gschriwwe hoschd odda vuna effendlischi, fraiji Gwell ('''public domain''') odda vuna ähnlichi fraiji Gwell hawe duschd.\n'''Du do nix noi schraiwe, wa unnam Uahewareschd gschizd isch!'''",
- "templatesused": "{{PLURAL:$1|Vorlach wu uffde Said gbrauchd werd|Vorlache wu uffde Saide gbrauchd werren}}:",
+ "templatesused": "{{PLURAL:$1|Vorlach wu uffde Said gbrauchd wead|Vorlache wu uffde Saide gbrauchd werren}}:",
"templatesusedpreview": "{{PLURAL:$1|Vorlach wu inde Vorschau gbrauchd werd|Vorlache wu inde Vorschau gbrauchd werren}}:",
"template-protected": "(gschizd)",
"template-semiprotected": "(halwa-gschizd)",
- "hiddencategories": "Die Said kerd zu vaschdeggelde {{PLURAL:$1|1 Sachgrubb|$1 Sachgrubbe}}:",
+ "hiddencategories": "Die Said kead zude vaschdeggelde {{PLURAL:$1|1 Sachgrubb|$1 Sachgrubbe}}:",
+ "permissionserrors": "Uugnieschnd Reschde",
"permissionserrorstext-withaction": "Du därfschd nedd $2, weesch{{PLURAL:$1|m Grund|ede Grind}}:",
"recreate-moveddeleted-warn": "'''Baßma uff: Du maggschd do ä Said, wuma frija schumol geleschd kabd hod.'''",
- "moveddeleted-notice": "Die Said isch gleschd worre.\nDe Leschoidrach fa die Said isch do unne als Gwell õgewwe.",
+ "moveddeleted-notice": "Die Said isch g'leschd worre. De Leschoidraach fa die Said isch do unne als Gwell oagewwe.",
"log-fulllog": "Alli Oidräsch vunde Logbischa õgugge",
"edit-conflict": "Schdraid ums Ännare.",
"content-model-text": "Glaategschd",
+ "content-model-javascript": "JavaScript",
"content-model-css": "CSS",
"post-expand-template-inclusion-warning": "'''Baßma uff:''' Greeß vunde Vorlach isch iwwaschridde. Oinischi Vorlache werren ned bnuzd.",
"post-expand-template-inclusion-category": "Saide mid Vorlache, wu die Greeß iwwaschridde worre isch",
"post-expand-template-argument-warning": "'''Baßma uff:''' Die Said hodd wenigschdns ä Vorlach midä Kenngreeß, wu groß werre dud. Die Kenngreeß wead do nedd õgeguggd.",
"post-expand-template-argument-category": "Saide, wu wegfallene Vorlachewead hawen.",
- "viewpagelogs": "Lochbischa fa die Said õgugge",
+ "undo-nochange": "Die Ännarung isch schunmol rigg'gängisch g'machd worre.",
+ "cantcreateaccounttitle": "Konn kä Kondo mache",
+ "viewpagelogs": "Lochbischa fa die Said oagugge",
+ "nohistory": "Vunde Said hodds kä Gschischd.",
"currentrev": "Ledschdi Änarung",
- "currentrev-asof": "Agduell Ausgab vun $1",
- "revisionasof": "Iwwaawaidung vun $1",
+ "currentrev-asof": "Agduell Ausgawb vun $1",
+ "revisionasof": "Iwwa'awaidung vun $1",
"revision-info": "Ännarung vun $1 duasch $2",
- "previousrevision": "← Älderi Beawaidung",
+ "previousrevision": "← Äldere Beawaidung",
"nextrevision": "Naijari Ausgawb →",
"currentrevisionlink": "Agduelli Ausgawb",
"cur": "jedzischi",
@@ -395,15 +441,23 @@
"histlast": "naijschde",
"historyempty": "(lea)",
"history-feed-title": "Ännarungsgschischd",
+ "history-feed-description": "Gschischd vunde Said uff {{SITENAME}}",
"history-feed-item-nocomment": "$1 õm $2",
- "rev-delundel": "zaisch/vaschdeggl",
+ "rev-deleted-comment": "(Zsommefassung gleschd)",
+ "rev-deleted-user": "(Middawaidnoame gleschd)",
+ "rev-deleted-event": "(Logbuchänzlhaid gleschd)",
+ "rev-deleted-user-contribs": "[Middawaid- odda IP-Adress gleschd – Bawaidung aus Baidräch vaschdeggd]",
+ "rev-delundel": "änna Sischdbakaid",
"rev-showdeleted": "zaische",
"revisiondelete": "Lesche/Heaschdelle vun Ännarunge",
"revdelete-show-file-submit": "Ja",
+ "revdelete-text-text": "Gleschdi Ännarunge blaiwen inde Gschischd, awwa Deel dvu sinn fa die Effendlischkaid vaschdeggld.",
+ "revdelete-text-file": "Gleschde Ännarunge blaiwen inde Gschischd, awwa Deel dvu sinn fa die Effendlischkaid vaschdeggld.",
"revdelete-hide-image": "Vaschdegglde Inhald",
- "revdelete-hide-name": "Vaschdeggls",
+ "revdelete-hide-name": "Vaschdeggls Ziel unn Kenngreeß",
"revdelete-hide-comment": "Ännas Resimee",
"revdelete-hide-user": "Middawaidanome/IP-Address",
+ "revdelete-hide-restricted": "Daade voa Adminischdradore unn a Middawaid unnadrigge",
"revdelete-radio-same": "(dudo nix ännare)",
"revdelete-radio-set": "Vaschdegld",
"revdelete-radio-unset": "Sischdba",
@@ -412,22 +466,33 @@
"revdel-restore": "Sischdbakaid ännare",
"pagehist": "Gschischd vunde Said",
"deletedhist": "Gleschde Gschischde",
- "revdelete-reasonotherlist": "Õnnare Grund",
- "mergehistory": "Gschischde zõmmefiere",
+ "revdelete-reasonotherlist": "Oannare Grund",
+ "mergehistory": "Gschischde zoammefiere",
+ "mergehistory-header": "Midde Said konschd Gschischde vunna Said innä onnari Said bringe. Bass uff, dass die Gschischd vunde Said rischdisch isch.",
+ "mergehistory-box": "Gschischde vun ywee Saide zsommefiare:",
+ "mergehistory-list": "Gschischde, wuma zsommebringe konn",
"mergehistory-go": "Zaisch, wasma vaoinische konn",
"mergehistory-submit": "Gschischde zõmmefiere",
+ "mergehistory-fail": "Gschischde zsommebringen hodd nedd gklabd, gugg nomol uffde Saide unn uffde Zaidoagawe.",
+ "mergehistory-fail-toobig": "S'Zsommefiare vunde Saide konn nedd klabbe, sunschd deedn mea als {{PLURAL:$1|eine Version|$1 Gschischde}} vaschowe werre.",
+ "mergehistory-autocomment": "„[[:$1]]“ midd „[[:$2]]“ vabinne",
+ "mergehistory-comment": "„[[:$1]]“ midd „[[:$2]]“ vabinne: $3",
"mergehistory-reason": "Grund:",
"revertmerge": "Zõmmefiehrung rigggängisch mache",
+ "mergelogpagetext": "Unne hoddsä Lischd midde ledschde Zsommefiarunge vun Gschischde.",
"history-title": "Ännarungsgschischd vun \"$1\"",
+ "difference-title": "Unnaschied vunde Gschischde vun \"$1\"",
"lineno": "Zail $1:",
"compareselectedversions": "Ausgawe midnonna vaglaische",
"showhideselectedversions": "Zaisch/Vaschdeggl gwehldi Ausgawe",
"editundo": "zriggnemme",
+ "diff-empty": "(kän Unnaschied)",
+ "diff-multi-sameuser": "({{PLURAL:$1|Ä dzwischelischndi Ännarung vum selwe Middawaid wead|$1 dzwischelischnde Ännarunge vum selwe Middawaid werren}} nedd gzaischd)",
"searchresults": "Eagewnis nochgugge",
"searchresults-title": "Eagewnis gugge fa \"$1\"",
"notextmatches": "Kä Iwwaoinschdimmunge midm Tegschd",
- "prevn": "ledschda {{PLURAL:$1|$1}}",
- "nextn": "negschd {{PLURAL:$1|$1}}",
+ "prevn": "{{PLURAL:ledschd $1|ledschde $1}}",
+ "nextn": "{{PLURAL:negschd $1|negschde $1}}",
"prevn-title": "Frijari $1 {{PLURAL:$1|Eagewniss|Eagewnisse}}",
"nextn-title": "Negschdi $1 {{PLURAL:$1|Eagewniss|Eagewnisse}}",
"shown-title": "Zaisch $1 {{PLURAL:$1|Eagewnis}} bro Said",
@@ -440,9 +505,9 @@
"searchprofile-advanced": "Foadgschridde",
"searchprofile-articles-tooltip": "In $1 gugge",
"searchprofile-images-tooltip": "Gugg noch Bilda",
- "searchprofile-everything-tooltip": "Such iwwaraal (a wuma dischbedierd)",
- "searchprofile-advanced-tooltip": "Gugg in õnnare Nõmensreum",
- "search-result-size": "$1 ({{PLURAL:$2|1 Word|$2 Wärda}})",
+ "searchprofile-everything-tooltip": "Such iwwaraal (a wuma dischbediead)",
+ "searchprofile-advanced-tooltip": "Gugg in oannare Noamensreum",
+ "search-result-size": "$1 ({{PLURAL:$2|1 Woad|$2 Wäada}})",
"search-result-category-size": "{{PLURAL:$1|1 Said|$1 Saide}} ({{PLURAL:$2|1 Sachgrubb|$2 Sachgrubbe}}, {{PLURAL:$3|1 Dadai|$3 Dadaije}})",
"search-redirect": "(Waidalaidung $1)",
"search-section": "(Abschnidd $1)",
@@ -453,8 +518,8 @@
"search-relatedarticle": "Vawond",
"searchrelated": "vawond",
"searchall": "alle",
- "showingresultsheader": "{{PLURAL:$5|Eagewnis '''$1''' vun '''$3'''|Eagewnis '''$1–$2''' vun '''$3'''}} fa '''$4'''",
- "search-nonefound": "Kä Eagewnis vunde Õfroch.",
+ "search-showingresults": "{{PLURAL:$4|Resuldad <strong>$1</strong> vun <strong>$3</strong>|Resuldad <strong>$1 - $2</strong> vun <strong>$3</strong>}}",
+ "search-nonefound": "Kä Eagewnis vunde Oafroch.",
"powersearch-legend": "Erwaiterte Such",
"powersearch-ns": "In de Namensraim suche:",
"powersearch-togglelabel": "Wehl:",
@@ -462,10 +527,19 @@
"powersearch-togglenone": "Kään",
"preferences": "Obzione",
"mypreferences": "Oischdellunge",
+ "prefs-edits": "Oazahl vunde B'awaidunge:",
+ "prefsnologintext2": "Logdisch oi unn änna doi Oischdellunge",
+ "prefs-skin": "Ausseje",
+ "skin-preview": "Voaschau",
"datedefault": "Kä Oischdellunge",
+ "prefs-user-pages": "Middawaidasaides",
+ "prefs-rc": "Ledschdi Ännarunge",
"prefs-watchlist": "Beowachdungslischd",
- "prefs-watchlist-edits-max": "Hegschdi Õzahl: 1000",
+ "prefs-watchlist-edits-max": "Hegschdi Oazahl: 1000",
"prefs-misc": "Schunschdisches",
+ "prefs-resetpass": "Passwoad weggsle",
+ "prefs-changeemail": "E-Mail-Adress ännare",
+ "prefs-email": "E-Mail-Oischdellunge",
"prefs-rendering": "Uffdridd",
"saveprefs": "Oischdellunge schbaischere",
"prefs-editing": "Schaffe",
@@ -473,31 +547,39 @@
"columns": "Schbalde",
"searchresultshead": "Nochgugge",
"stub-threshold-disabled": "Abgschdeld",
+ "recentchangesdays": "Oazahl vunde Daach inde ledschde Ännarunge:",
+ "recentchangesdays-max": "Hegschdgrens $1 {{PLURAL:$1|Daach|Daache}}",
"guesstimezone": "Aus em Browser iwwernemme",
"timezoneregion-africa": "Afrika",
- "timezoneregion-america": "Õmerika",
- "timezoneregion-antarctica": "Õngdagdika",
+ "timezoneregion-america": "Oamerika",
+ "timezoneregion-antarctica": "Oangdaagdika",
"timezoneregion-arctic": "Aadigk",
"timezoneregion-asia": "Asije",
- "timezoneregion-atlantic": "Adlõndischa Ozeõn",
+ "timezoneregion-atlantic": "Adloendischa Ozean",
"timezoneregion-australia": "Auschdralije",
"timezoneregion-europe": "Oirobba",
- "timezoneregion-indian": "Indischa Ozeõn",
- "timezoneregion-pacific": "Pazifischa Ozeõn",
+ "timezoneregion-indian": "Indischa Ozean",
+ "timezoneregion-pacific": "Pazifischa Ozean",
"prefs-searchoptions": "Nochgugge",
"default": "Schdondad",
+ "prefs-files": "Dadaije",
"youremail": "E-Mail:",
"username": "{{GENDER:$1|Middawaida}}:",
"prefs-memberingroups": "{{GENDER:$2|Middglied}} vun {{PLURAL:$1|Grubb|Grubbe}}:",
- "yourrealname": "Birschalischa Nõme:",
+ "yourrealname": "Birschalischa Noame:",
"yourlanguage": "Schbrooch:",
"yournick": "Naiji Unnaschfrid",
"yourgender": "Wasfa'ä Gschleschd bischdn?",
"gender-unknown": "Do saach isch nix",
"gender-male": "Isch binnen Monn",
"gender-female": "Isch binä Fraa",
+ "email": "E-Mail",
"prefs-help-email": "E-mail muss ned soi, awwa wead fas naijsedze vum Kennwoad bneedischd, wonns vagesse hoschd.",
"prefs-help-email-others": "Konschd a wehle, ob õnnare disch iwwan Lingg uff doina Dischbedier-Said õschbresche kennen.\nDoi Address werd ned gzaischd, wõnse midda babbln.",
+ "prefs-advancedrc": "Waidari Meschlischkaide",
+ "prefs-advancedrendering": "Waidari Meschlischkaide",
+ "prefs-advancedsearchoptions": "Waidari Meschlischkaide",
+ "prefs-advancedwatchlist": "Waidari Meschlischkaide",
"prefs-diffs": "Unaschied",
"userrights-groupsmember": "Midglied vun:",
"userrights-reason": "Grund:",
@@ -512,60 +594,107 @@
"group-bureaucrat-member": "{{GENDER:$1|Birokrad}}",
"grouppage-sysop": "{{ns:project}}:Adminischtratore",
"right-read": "Saide leese",
- "right-edit": "Õnde Saide schaffe",
+ "right-edit": "Oande Saide schaffe",
"right-createpage": "Saide mache",
"right-createtalk": "Dischbediersaide mache",
"right-move": "Said bwesche",
"right-move-subpages": "Said midde Unasaide bwesche",
"right-movefile": "Saide vaschiewe",
+ "right-suppressredirect": "Kä Umleidunge mache womma Saide vaschiewe dud",
"right-upload": "Dadaije nufflade",
+ "right-reupload": "Iwwaschraiwb ä Said, wus gibd",
"right-upload_by_url": "Dadaije vunna Address nufflaade",
+ "right-writeapi": "Vawendung vum API fas Schraiwe",
"right-delete": "Saide lesche",
+ "right-deletedhistory": "Glesche Ännarunge inde Gschischd ohne Tegschd oagugge",
"right-undelete": "Said widdaheaschdelle",
- "newuserlogpage": "Naijõmeldungs-Logbuch",
+ "right-unblockself": "Enschberr Disch",
+ "right-mergehistory": "Gschischde vun Saide zsommefiare",
+ "newuserlogpage": "Naijoameldungs-Logbuch",
"rightslog": "Middawaidareschd-Logbuch",
+ "action-read": "Lees die Said",
"action-edit": "onde Said schaffe",
+ "action-createpage": "Mach Saide",
+ "action-createtalk": "Mach Dischbediersaide",
+ "action-createaccount": "Machä Middawaidakondo",
+ "action-history": "Guggda die Gschischd vunde Said oa",
+ "action-move": "Die Said vaschiewe",
+ "action-move-subpages": "Die Said unn alle Unnasaide vaschiewe",
+ "action-move-categorypages": "Grubbesaide vaschiewe",
+ "action-movefile": "Die Said vaschiewe",
+ "action-upload": "Saide nufflaade",
+ "action-reupload": "Iwwaschraiwb die Said, wus schun hodd",
+ "action-delete": "Lesch die Said",
+ "action-deleterevision": "Lesch die Ännarung",
+ "action-deletedhistory": "guggda die gleschd Gschischd vunde Said oa",
+ "action-browsearchive": "Gugg noch gleschde Saide",
+ "action-undelete": "Said widdaheaschdelle",
+ "action-suppressrevision": "Vaschdeggelde Ännarunge oagugge unn widdaheaschdelle",
+ "action-mergehistory": "Gschisch vunde Said zsommefiere",
+ "action-sendemail": "E-Mails schigge",
"nchanges": "$1 {{PLURAL:$1|Ännarung|Ännarunge}}",
- "recentchanges": "Ledschdi Ännarunge",
- "recentchanges-legend": "Wehl ä Õzaisch fa die ledschde Ännarunge",
+ "enhancedrc-history": "Gschischd",
+ "recentchanges": "Ledschde Ännarunge",
+ "recentchanges-legend": "Wehl ä Oazaisch fa die ledschde Ännarunge",
+ "recentchanges-summary": "Do konschd die ledschde Ännarunge vunde {{SITENAME}} vafolsche.",
"recentchanges-feed-description": "Ledschde Ännarunge vun {{SITENAME}} im Feed oigewwe.",
"recentchanges-label-newpage": "Domid magschd ä naiji Said",
"recentchanges-label-minor": "S'ische glenni Beawaidung",
"recentchanges-label-bot": "Ännarunge duaschn Bod",
"recentchanges-label-unpatrolled": "Die Ännarung isch noch nedd iwwabriefd worre",
+ "recentchanges-label-plusminus": "Ännarung vunde Saidegreeß in Bytes",
+ "recentchanges-legend-heading": "'''Bildtegschd:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (gugg a uff [[Special:NewPages|Lischd vun naije Saide]])",
"rcnotefrom": "Unne sinn Ännarunge said <strong>$2<-strong> (bis <strong>$1<-strong>).",
"rclistfrom": "Zaisch die ledschde Ännarunge ab $3 $2",
"rcshowhideminor": "Glenni Ännarunge $1",
+ "rcshowhideminor-show": "Zaische",
+ "rcshowhideminor-hide": "Vaschdeggle",
"rcshowhidebots": "Bots $1",
- "rcshowhideliu": "Õgmelde Middawaida $1",
- "rcshowhideanons": "Ned õgmelda Middawaida $1",
+ "rcshowhidebots-show": "Zaische",
+ "rcshowhidebots-hide": "Vaschdeggle",
+ "rcshowhideliu": "Oagmelde Middawaida $1",
+ "rcshowhideliu-show": "Zaische",
+ "rcshowhideliu-hide": "Vaschdeggle",
+ "rcshowhideanons": "Nedd oagmelda Middawaida $1",
+ "rcshowhideanons-show": "Zaische",
+ "rcshowhideanons-hide": "Vaschdeggle",
"rcshowhidepatr": "$1 iwabriefde Ännarunge",
+ "rcshowhidepatr-show": "Zaische",
+ "rcshowhidepatr-hide": "Vaschdeggle",
"rcshowhidemine": "Moi Beawaidunge $1",
+ "rcshowhidemine-show": "Zaische",
+ "rcshowhidemine-hide": "Vaschdeggle",
"rclinks": "Zaisch die ledschde $1 Ännarunge inde ledschde $2 Daach<br />$3",
"diff": "Unnaschied",
"hist": "Gschischd",
"hide": "vaschdeggle",
- "show": "zaische",
+ "show": "Zaische",
"minoreditletter": "k",
"newpageletter": "N",
"boteditletter": "B",
"rc_categories": "Oigschrengd uff Sachgrubbe (abgdeeld middm \"|\")",
"rc_categories_any": "Ebbes",
+ "rc-change-size-new": "$1 {{PLURAL:$1|Byte}} nochde Ännarung",
"rc-enhanced-expand": "Änzlhaide zaische",
- "rc-enhanced-hide": "Õgawe vaschdeggle",
- "recentchangeslinked": "Was õn valinggde Saide gännad worre isch",
+ "rc-enhanced-hide": "Oagawe vaschdeggle",
+ "recentchangeslinked": "Was oan valingde Saide gännad worre isch",
"recentchangeslinked-feed": "Ännarunge on valinggde Saide",
"recentchangeslinked-toolbox": "Ännarunge uff verlingde Saide",
- "recentchangeslinked-title": "Ännarunge õn Saide, wu „$1“ druff verlinggd",
- "recentchangeslinked-summary": "Die Lischd zaischd ledschdi Ännarunge, vunna bschdimmde Said, wu do valinggd isch (odda ä Midglied vunna bschdimmde Sachgrubb isch).\nSaide uff [[Special:Watchlist|Doina Beowachdungslischd]] sinn '''fedd'''.",
+ "recentchangeslinked-title": "Ännarunge oan Saide, wu „$1“ druff valingd",
+ "recentchangeslinked-summary": "Die Lischd zaischd ledschde Ännarunge, vunna bschdimmde Said, wu do valinggd isch (odda ä Midglied vunna bschdimmde Sachgrubb isch).\nSaide uff [[Special:Watchlist|Doina Beowachdungslischd]] sinn <strong>fedd</strong>.",
"recentchangeslinked-page": "Saide:",
- "recentchangeslinked-to": "Zaisch Ännarunge uff Saide, wu do her valinggd sinn",
- "upload": "Nufflade",
+ "recentchangeslinked-to": "Zaisch Ännarunge uff Saide, wu dohea valingd sinn",
+ "upload": "Nufflaade",
"uploadbtn": "Dadai nufflade",
+ "uploadnologin": "Bischd nedd oagmeld",
"uploadlogpage": "Dadaije-Logbuch",
"filedesc": "Iwwabligg",
"fileuploadsummary": "Iwwabligg:",
+ "badfilename": "D'Dadainoame hodd sisch uff \"$1\" g'ännad.",
+ "file-deleted-duplicate": "Ä Dadai, wu glaisch isch wie die do ([[:$1]]), hoddma schunmol gleschd kabd. Guggdas Logbuch oa, bvoase nufflaade duschd.",
"savefile": "Dadai schbaischere",
+ "backend-fail-alreadyexists": "Die Dadai \"$1\" hodds schunn.",
"lockmanager-notlocked": "„$1“ hod ned uffgmachd were kenne, s'isch ganed gschberd gwesd.",
"lockmanager-fail-closelock": "Die gbscherd Dadai „$1“ hod ned gschlosse were kenne.",
"lockmanager-fail-deletelock": "Die gbscherd Dadai „$1“ hod ned gleschd were kenne.",
@@ -574,19 +703,25 @@
"lockmanager-fail-releaselock": "„$1“ konn ned fraigewe werre.",
"license": "Bwillischung",
"license-header": "Bwillischung",
+ "nolicense": "Nix ausgweeld",
+ "listfiles-delete": "lesche",
+ "imgfile": "Dadai",
"listfiles_name": "Nome",
+ "listfiles_user": "Middawaida",
"listfiles_size": "Greeß",
"listfiles_count": "Versione",
+ "listfiles-latestversion-yes": "Ja",
+ "listfiles-latestversion-no": "Nä",
"file-anchor-link": "Dadai",
"filehist": "Dadaigschischd",
- "filehist-help": "Drigg uffn Zaidpunggd zum õzaische, wies dord ausgseje hodd.",
+ "filehist-help": "Drigg uffn Zaidpungd zum oazaische, wies doad ausgseje hodd.",
"filehist-deleteall": "alles lesche",
"filehist-deleteone": "lesche",
"filehist-revert": "zriggsedze",
"filehist-current": "agduell",
"filehist-datetime": "Zaidpungd",
"filehist-thumb": "Gleenes Bild",
- "filehist-thumbtext": "Skizz fa die Ausgab vum $1",
+ "filehist-thumbtext": "Skizz fa die Ausgawb vum $1",
"filehist-user": "Middawaida",
"filehist-dimensions": "Maß",
"filehist-comment": "Oißarung",
@@ -594,17 +729,22 @@
"linkstoimage": "Die {{PLURAL:$1|Said vawaisd|$1 Saide vawaisn}} uff die Dadai:",
"nolinkstoimage": "Do hodds kä Said, wu dohea zaischd.",
"sharedupload": "Die Datei isch vun $1 un s kann sai, dass se ach vun annere Projekt gebraucht werd.",
- "sharedupload-desc-here": "Die Dadai isch vun $1 un konn a wuonaschda bnuzd werre.\nÄ Bschraiwung finschd [$2 Dadaibschraiwungssaid] unne.",
+ "sharedupload-desc-here": "Die Dadai isch vun $1 unn konn a wuonaschda bnuzd werre.\nÄ Bschraiwung finschd [$2 Dadaibschraiwungssaid] unne.",
"uploadnewversion-linktext": "E naiere Version vun derre Datei hochlade",
+ "shared-repo-from": "vun $1",
+ "upload-disallowed-here": "Du konschd do nix iwwaschraiwe.",
"filedelete": "Lesch $1",
"filedelete-legend": "Dadai lesche",
+ "filedelete-intro": "Du bischd drummunndroa die Said '''„[[Media:$1|$1]]“''' midde Gschischd zu lesche.",
"filedelete-submit": "Lesche",
"filedelete-success": "'''$1''' isch gleschd worre.",
"filedelete-maintenance-title": "Dadai konnned gleschd werre",
"download": "Runalaade",
- "randompage": "Irschndn Adiggl",
+ "randompage": "Iaschnd n'Adiggl",
+ "randomincategory-category": "Sachgrubb:",
"statistics": "Schdadischdigge",
"statistics-pages": "Saide",
+ "doubleredirects": "Dobblde Waidalaidung",
"brokenredirects-edit": "schaffe",
"brokenredirects-delete": "lesche",
"withoutinterwiki-submit": "Zaische",
@@ -616,18 +756,18 @@
"nrevisions": "$1 {{PLURAL:$1|Ännarung|Ännarunge}}",
"nimagelinks": "Used on $1 {{PLURAL:$1|Said|Saide}}",
"ntransclusions": "oigsedzd uff $1 {{PLURAL:$1|Said|Saide}}",
+ "lonelypages": "Vawaide Saide",
"uncategorizedpages": "Said ohne Sachgrubb",
"uncategorizedcategories": "Sachgrubb ohne Sachgrubb",
"uncategorizedimages": "Dadai ohne Sachgrubb",
"uncategorizedtemplates": "Vorlach ohne Sachgrubb",
"unusedcategories": "Vawaisdi Sachgrubb",
"unusedimages": "Vawaisde Dadaije",
- "popularpages": "Bliewbde Saide",
"wantedcategories": "Gwinschde Sachgrubbe",
"wantedpages": "Gwinschde Saide",
"mostlinkedcategories": "Nizlischi Sachgrubbe",
- "mostlinkedtemplates": "Niylischi Vorlache",
- "mostcategories": "Saide midd õm maigschde Sachgrubbe",
+ "mostlinkedtemplates": "Maischdoigbunnene Saide",
+ "mostcategories": "Saide midd oam maigschde Sachgrubbe",
"prefixindex": "Alle Saide (midd Voasilw)",
"listusers-editsonly": "Zaisch bloß Bnudza mid Baidräsch",
"usercreated": "{{GENDER:$3|Gmachd}} vun $1 om $2",
@@ -639,28 +779,31 @@
"pager-older-n": "{{PLURAL:$1|vorisch 1|vorische $1}}",
"booksources": "Buchgwelle",
"booksources-search-legend": "Noch Buchgwelle gugge",
- "booksources-go": "Geh",
+ "booksources-search": "Gugg",
"log": "Logbischa",
"allpages": "Alle Saide",
+ "nextpage": "Negschd Said ($1)",
"prevpage": "Voriche Said ($1)",
"allpagesfrom": "Saide aazaische wu aafange mid:",
"allpagesto": "Saide aazaische wu ufhere mid:",
"allarticles": "Alle Saide",
"allpagessubmit": "Zaische",
+ "allpages-hide-redirects": "Waidalaidunge vaschdeggle",
"categories": "Sachgrubbe",
"categoriespagetext": "Folschndi {{PLURAL:$1|Sachgrubb hodd|Sachgrubbe hawen}} Saide odda Dadaije. [[Special:UnusedCategories|Ubnudze Sachgrubbe]] werren do nedd gzaischd. Gugg a uffde [[Special:WantedCategories|gwinschde Sachgrubbe]].",
- "categoriesfrom": "Zaisch Sachgrubbe õgfonge middt:",
+ "categoriesfrom": "Zaisch Sachgrubbe oagfonge middt:",
"sp-deletedcontributions-contribs": "Baidräsch",
"linksearch": "Exderne Lings",
"linksearch-pat": "Suchmuschda",
+ "linksearch-ok": "Gugge",
"linksearch-line": "$1 isch vun $2 valinggd",
"listusers-submit": "Zaische",
"listusers-noresult": "Kä Middawaida gfunne",
"listusers-blocked": "(gschberd)",
"listgrouprights-group": "Grubb",
"listgrouprights-members": "(Midgliedalischd)",
- "emailuser": "E-Mail õnde Middawaida",
- "emailusername": "Middawaidanõme:",
+ "emailuser": "E-Mail oande Middawaida",
+ "emailusername": "Middawaidanoame:",
"emailfrom": "Vum:",
"emailto": "Fa:",
"emailsubject": "Bdreff:",
@@ -675,7 +818,7 @@
"watchthispage": "Die Said beowachde",
"unwatch": "Nemme beowachde",
"watchlist-details": "S hodd {{PLURAL:$1|$1 Said|$1 Saide}} uff doina Beowachdungslischd, Dischbediersaide zeeln nedd gdrennd.",
- "wlshowlast": "Die ledschde $1 Schdunnd $2 Daach $3 zaische",
+ "wlshowlast": "Die ledschde $1 Schdunnd $2 Daach zaische",
"watchlist-options": "Meschlischkaide vunde Beowachdungslischd",
"watching": "Beowachde ...",
"unwatching": "Nimmi beowachde ...",
@@ -683,6 +826,7 @@
"deletepage": "Said lesche",
"confirm": "Beschdedische",
"delete-legend": "Lesche",
+ "historywarning": "<strong>Bassma uff:</strong> Die Said, wu lesche wilschd, hoddä Gschischd midd {{PLURAL:$1|äna Ännarung|$1 Ännarunge}}:",
"confirmdeletetext": "Du bisch debai e Said z lesche mid alle Versione.\nBitte du bstätiche, dass Du des wllscht du, dass Du verstehsch, was des hääßt, un dass Du des machscht in Iwweraistimmung mit de [[{{MediaWiki:Policy-url}}|Richtline]].",
"actioncomplete": "Maßnohm ferdisch",
"actionfailed": "Maßnohm gschaidad",
@@ -691,7 +835,11 @@
"deletecomment": "Grund:",
"deleteotherreason": "Annere/zusätzliche Grund:",
"deletereasonotherlist": "Annere Grund",
+ "delete-toobig": "Die Said hodd midd mea als $1 {{PLURAL:$1|Ännarung|Ännarunge}} ä longi Gschischd. S'Lesche vun denne Saide isch bschrengd, domidd de Seava nedd aus Vaseje zsommekrache dud.",
+ "delete-warning-toobig": "Die Said hodd midd mea als $1 {{PLURAL:$1|Ännarung|Ännarunge}} ä longi Gschischd. S'Lesche konn zu Schderunge inde Daadebong'g fiare.",
"rollbacklink": "Zriggsedze",
+ "rollbacklinkcount": "{{PLURAL:$1|Ä Ännarung|$1 Ännarunge}} z'riggsedze",
+ "rollbackfailed": "Zriggsedze hodd nedd g'klabbd",
"protectlogpage": "Saideschudz-Logbuch",
"protectedarticle": "hodd \"[[$1]]\" gschizd",
"modifiedarticleprotection": "hot de Schutzstatus vun \"[[$1]]\" gännert",
@@ -704,24 +852,37 @@
"protect-cascadeon": "Die Said isch gschizd, wail se {{PLURAL:$1|zu derre Said kead|zu denne Saide kead}}, wuä Kaskadeschberrung gild.\nÄnnarunge vum Saideschudz hodd awwa kän Oifluß uff die Kaskadeschberrung.",
"protect-default": "Alle Middawaida erlauwe",
"protect-fallback": "Bloß fa Laid mid \"$1\" Bereschdischung",
- "protect-level-autoconfirmed": "Naiji un nedd õgmeld Middawaida schberre",
+ "protect-level-autoconfirmed": "Naiji un nedd oagmeld Middawaida schberre",
"protect-level-sysop": "Bloß fa Adminischdradore",
"protect-summary-cascade": "Kaskade",
"protect-expiring": "bis $1 (UTC)",
"protect-expiring-local": "bis $1",
+ "protect-expiry-indefinite": "uubschdimmd",
"protect-cascade": "Kaskadesperrung – alle aigebunnene Vorlache sinn midgsperrd.",
"protect-cantedit": "Du kannscht de Schutzstatus vun derre Said nit ännere, wail Du nid d Berechdichung dezu hoscht.",
+ "protect-othertime": "Onnari Dauwa",
"restriction-type": "Berechdichung:",
"restriction-level": "Schudsewene:",
"restriction-edit": "Schaffe",
"restriction-move": "Verschiewe",
+ "restriction-create": "Oaleesche",
+ "restriction-upload": "Nufflaade",
"undelete": "Widderherschdelle",
+ "undeleteextrahelp": "Domidd die Said kombledd midde Gschischd widdaheagschdeld werre konn, gligg alles weg un gligg uff <strong<em>{{int:undeletebtn}}</em></strong>.\nDomidd bschdimmdi Ännarunge zriggkrische duschd, gliggschd die endschbreschende Käschde oa unn glischd donn uff <strong><em>{{int:undeletebtn}}</em></strong>.",
+ "undeleterevisions": "$1 {{PLURAL:$1|Ännarung|Ännarunge}} aschiviad",
+ "undeletehistory": "Wonn die Said zriggholschd, kummen alle Ännarunge midd.\nWonnä naiji Said middm selwe Noame oageleschd wead, saidse gleschd worre isch, easchoinen die Ännarunge middm Zrigghole inde Gschischd.",
"undeletebtn": "Widderherschdelle",
- "undeletelink": "õgugge/widda herschdelle",
- "undeleteviewlink": "Õgugge",
+ "undeletelink": "oagugge/widda herschdelle",
+ "undeleteviewlink": "Oagugge",
+ "undelete-search-title": "Gugg noch g'leschde Saide",
+ "undelete-search-box": "Gugg noch g'leschde Saide",
+ "undelete-search-submit": "Gugge",
"undelete-show-file-submit": "Ja",
- "namespace": "Nõmensraum",
+ "namespace": "Noamensraum",
"invert": "Wahl dausche",
+ "tooltip-invert": "Gligg uffde Auswahlkaschde, um Ännarunge im gwehlde Noamensraum unn, wonns gwehld hoschd, em endschbreschende zukehrische Noamensraum zum Vaschwinde zu bringe",
+ "namespace_association": "Zukehrische Noamensraum",
+ "tooltip-namespace_association": "De Kaschde oagligge, um a's Dischbediere vum zukearisch Noamensraum zu krische.",
"blanknamespace": "(Schdadsaid)",
"contributions": "{{GENDER:$1|Wassa gemachd hodd}}",
"contributions-title": "Middawaidabaidräsch vun $1",
@@ -736,43 +897,46 @@
"sp-contributions-logs": "Logbischa",
"sp-contributions-talk": "Dischbediere",
"sp-contributions-search": "Noch Baidräsch gugge",
- "sp-contributions-username": "IP-Adress odda Middawaidanõme:",
+ "sp-contributions-username": "IP-Adress odda Middawaidanoame:",
"sp-contributions-toponly": "Bloß agduelli Ännarunge zaische",
"sp-contributions-submit": "Gugge",
- "whatlinkshere": "Was doher zaische dud",
- "whatlinkshere-title": "Saide wu uff \"$1\" valinggn",
+ "whatlinkshere": "Was dohea zaische dud",
+ "whatlinkshere-title": "Saide wu uff \"$1\" valing'gn",
"whatlinkshere-page": "Said:",
- "linkshere": "Die Saide valinggn uff '''[[:$1]]''':",
+ "linkshere": "Die Saide valing'gn uff '''[[:$1]]''':",
"nolinkshere": "Kä Said zaischd uff '''[[:$1]]'''.",
"isredirect": "Waidalaidungsaid",
"istemplate": "Vorlacheoibindung",
- "isimage": "Dadailingg",
+ "isimage": "Dadailing'g",
"whatlinkshere-prev": "{{PLURAL:$1|vorisch|vorische $1}}",
"whatlinkshere-next": "{{PLURAL:$1|negschd|negschde $1}}",
- "whatlinkshere-links": "← Linggs",
+ "whatlinkshere-links": "← Ling'gs",
"whatlinkshere-hideredirs": "$1 Waidalaidunge",
"whatlinkshere-hidetrans": "$1 Vorlacheoibindunge",
- "whatlinkshere-hidelinks": "$1 Linggs",
+ "whatlinkshere-hidelinks": "$1 Ling'gs",
"whatlinkshere-hideimages": "$1 Dadailinggs",
"whatlinkshere-filters": "Filda",
"blockip": "Middawaida bloggiere",
"ipbsubmit": "Middawaida bloggiere",
+ "ipbother": "Onnari Dauwa:",
"ipboptions": "2 Schdunne:2 hours,1 Daach:1 day,3 Daach:3 days,1 Woch:1 week,2 Woche:2 weeks,1 Monad:1 month,3 Monad:3 months,6 Monad:6 months,1 Johr:1 year,Fa imma:infinite",
+ "ipb-unblock-addr": "Fraigewwe $1",
"ipusubmit": "Die Adreß fraigewwe",
- "ipblocklist": "Gschberrdi IP-Adress un Middawaidanõme",
+ "ipblocklist": "Gschberrdi IP-Adress un Middawaidanoame",
"infiniteblock": "ubgrensd",
- "blocklink": "schberre",
+ "blocklink": "Schberre",
"unblocklink": "Sperr uffhewe",
"change-blocklink": "Schberr ännare",
"contribslink": "Baidräsch",
"blocklogpage": "Schberrlogbuch",
"blocklogentry": "hodd [[$1]] gschberrd fa'n Zaidraum vun $2 $3",
"unblocklogentry": "hot d Sperr vun $1 uffghowwe",
- "block-log-flags-nocreate": "Õleesche vun Konde isch gschberrd",
- "lockbtn": "Dadebongg schberre",
- "unlockbtn": "Dadebongg fraigewwe",
+ "block-log-flags-nocreate": "Oaleesche vun Konde isch gschberrd",
+ "lockbtn": "Dadebong'g schberre",
+ "unlockbtn": "Dadebong'g fraigewwe",
"move-page-legend": "Said vaschiewe",
"movepagetext": "Midm Formad konnschd ä Said en naije Nome gewwe, debai werrem alli alde Ausgawe uffde nai Nome vaschowe.\nAusm alde Nome werd e Waidalaidungssaid zum naije Nome.\nWaidalaidungssaide, wu uffde ald Nome umlaide dun, konnschd vun allä uffde naischde Schdond bringe.\nWonndes ned willschd, guggschd uff [[Special:DoubleRedirects|dobbldi]] odda [[Special:BrokenRedirects|kabuddi Waidalaidunge]].\nSoasch dfia, dass Linggs waida uffdie rischdische Saide fiehan.\n\nGebb Achd, dass die Said '''ned''' vaschowe werd, wonns schunä Said midm naije Nome hod, außa wonnse lea isch odda e Waidalaidung.\nDes heeßd, Du konnschd ke Said, wus schun gibbd, iwwaschraiwe.\n\n'''BAßMAUFF!'''\nDes isch e wischdischi Ännarung fa e Said un konn zimlisch uuerwaaded soi fa wischdischi Saide;\nmach des bloß, wonn die Folsche vunde Maßnohm a abschedze konnschd.",
+ "movepagetext-noredirectfixer": "Middm Foamula unne koschd die Said nai bnenne, wonnse midde gonse Gschischd uffn naije Noame bwesche duschd.\nDe ald Tidl weadä Said midd änna Waidalaidung uff die Said werre.\nBass uff unn gugg uff [[Special:DoubleRedirects|dobbelde]] odda [[Special:BrokenRedirects|kabudde Waidalaidunge]]. Du bischd dvoa vaondwoadlisch, dass Ling'gs uffs rischdische zaische dun.\n\nBass uff, die Said wead <strong>nedd</strong> vaschowe, wonns schun ä Said gewwe dud, wude selwe Noame hodd, aussa, s'isch ä Waidalaidung ohne Gschischd.\nDes heesd, wonnän Fehla gmschd hoschd, konschd ä Said zrigg. Awwa konschd kä Said iwwaschraiwe, wus schun hodd.\n\n<strong>Bassma uff, Beaschl!</strong>\nDes konn schlimme Folsche fa b'liewde Saide hawwe. Saida wiaglisch sischa, dass a alles was do due wilschd, a vaschdonne hoschd. Odda losses sunschd bessa soi.",
"movepagetalktext": "D Dischbediersaid werd ach mid verschowe, '''ausser:'''\n* Du verschiebsch die Saide in e annere Namensraum, odder\n* s gebbt schun e Dischbediersaid mi dem Name, orrer\n* Du wählsch unne d Option, se nid z verschiewe.\n\nIn denne Fäll misst mer d Dischbediersaid vun Hand kopiere.",
"movearticle": "Said vaschiewe:",
"newtitle": "Zum naije Didl:",
@@ -787,13 +951,14 @@
"revertmove": "Zurigg vaschiewe",
"delete_and_move": "Lesche un Verschiewe",
"delete_and_move_confirm": "Ja, Said lesche",
- "export": "Saide rausgewe",
+ "export": "Saide rausgewwe",
+ "exportcuronly": "Bloß die ledschd Ännarung vunde Said exboadiere",
"export-submit": "Saide exbordiere",
"export-addcattext": "Saide vunde Sachgrubb dzufiesche:",
- "allmessagesname": "Nõme",
- "allmessagesdefault": "Vorgewene Tegschd",
+ "allmessagesname": "Noame",
+ "allmessagesdefault": "Voagewene Tegschd",
"allmessages-filter-modified": "Vaännad",
- "thumbnail-more": "Mags greßa",
+ "thumbnail-more": "Mags greeßa",
"thumbnail_error": "Baim Voaschaubild ischwas falsch glaafe: $1",
"import-interwiki-submit": "Impordiere",
"tooltip-pt-userpage": "Doi Miaddawaidasaid",
@@ -801,91 +966,120 @@
"tooltip-pt-preferences": "Doi Oischdellunge",
"tooltip-pt-watchlist": "Lischd vun Saide, wu beowachde duschd",
"tooltip-pt-mycontris": "Lischd vun doine Baidräsch",
- "tooltip-pt-login": "Du konnschd disch õmelde, awwa mugschd ned",
+ "tooltip-pt-login": "Du konnschd disch oamelde, mugschd awwa ned",
"tooltip-pt-logout": "Uffhere",
- "tooltip-ca-talk": "Iwwa d Inhaldssaid dischbediere",
- "tooltip-ca-edit": "Du konnschd onde Said schaffe.\nBidde nemmde Vorschau-Gnobb vorm Schbaischare",
- "tooltip-ca-addsection": "N'naije Abschnidd õleche",
- "tooltip-ca-viewsource": "Die Said isch gschizd. Du konnschdda de Gwelltegschd õgugge.",
- "tooltip-ca-history": "Ledschdi Ausgawe vunde Said",
+ "tooltip-pt-createaccount": "Fiel disch eamudischd da ä Middawaidakondo oazuleesche unn disch oazumelde. Mugschd awwa nedd.",
+ "tooltip-ca-talk": "Iwwa d'Inhaldssaid dischbediere",
+ "tooltip-ca-edit": "Du konnschd onde Said schaffe.\nBidde nemmde Vorschau-Gnobb voam Schbaischare",
+ "tooltip-ca-addsection": "N'naije Abschnidd oaleche",
+ "tooltip-ca-viewsource": "Die Said isch gschizd. Du konnschdda de Gwelltegschd oagugge.",
+ "tooltip-ca-history": "Ledschde Ausgawe vunde Said",
"tooltip-ca-protect": "Die Said schidze",
"tooltip-ca-delete": "Die Said lesche",
"tooltip-ca-move": "Die Said vaschiewe",
"tooltip-ca-watch": "Die Said zu doina Beowachdungslischd dzufiesche",
"tooltip-ca-unwatch": "Die Said vun doina Beowachdunschlischd wegnemme",
"tooltip-search": "Gugg uff {{SITENAME}} fa",
- "tooltip-search-go": "Geh zude Said midm Nõme, wonnses hodd",
+ "tooltip-search-go": "Geh zude Said midm Noame, wonnses hodd",
"tooltip-search-fulltext": "Gugg inde Said nochm Tegschd",
"tooltip-p-logo": "Schdadsaid",
"tooltip-n-mainpage": "Uff d'Schdadsaid geje",
- "tooltip-n-mainpage-description": "Haubdsaid õgugge",
+ "tooltip-n-mainpage-description": "Haubdsaid oagugge",
"tooltip-n-portal": "Iwwas Brojegd, wu mache konnschd, wu ebbes finne duschd",
"tooltip-n-currentevents": "Finn Auskinfd iwwas Naijischde",
"tooltip-n-recentchanges": "Lischd vunde ledschde Ännarunge im Wiki",
- "tooltip-n-randompage": "Laad e zufellischi Said",
+ "tooltip-n-randompage": "Laad ä zufellischi Said",
"tooltip-n-help": "Do konschds rausfinne",
"tooltip-t-whatlinkshere": "Lischd vun alle Wikisaide, wu dohie verlingd sinn",
- "tooltip-t-recentchangeslinked": "Ledschdi Ännarunge in Saide, wu vun do verlinggd sinn",
+ "tooltip-t-recentchangeslinked": "Ledschde Ännarunge in Saide, wu vun do verlingd sinn",
"tooltip-feed-rss": "RSS feed fer die Said",
"tooltip-feed-atom": "Atom-Feed fa die Said",
- "tooltip-t-contributions": "Ledschdi Baidräsch vum Middawaida õgugge",
+ "tooltip-t-contributions": "Ledschde Baidräsch vum Middawaida oagugge",
"tooltip-t-emailuser": "Dem Middawaida e E-Mail schigge",
- "tooltip-t-upload": "Dadaije nufflade",
- "tooltip-t-specialpages": "Lischd vunde Schbezialsaide",
- "tooltip-t-print": "Druggausgab vunde Said",
- "tooltip-t-permalink": "N'dauwahafde Lingg uff die Ausgab vunde Said",
- "tooltip-ca-nstab-main": "Inhald õgugge",
- "tooltip-ca-nstab-user": "Middawaidasaid õgugge",
- "tooltip-ca-nstab-special": "Des isch e Spezialsaid, du konnschd d Said selwaschd nedd ännare",
- "tooltip-ca-nstab-project": "Brojegdsaid õgugge",
- "tooltip-ca-nstab-image": "Dadaisaid õgugge",
- "tooltip-ca-nstab-template": "Vorlach õgugge",
- "tooltip-ca-nstab-category": "Sachgrubbsaid õgugge",
+ "tooltip-t-upload": "Dadaije nufflaade",
+ "tooltip-t-specialpages": "Lischd vunde Sondasaide",
+ "tooltip-t-print": "Druggausgawb vunde Said",
+ "tooltip-t-permalink": "N'dauwahafde Ling'g uff die Ausgawb vunde Said",
+ "tooltip-ca-nstab-main": "Inhald oagugge",
+ "tooltip-ca-nstab-user": "Middawaidasaid oagugge",
+ "tooltip-ca-nstab-special": "Des ischä Sondasaid, du konnschd die Said selwa nedd ännare",
+ "tooltip-ca-nstab-project": "Brojegdsaid oagugge",
+ "tooltip-ca-nstab-image": "Dadaisaid oagugge",
+ "tooltip-ca-nstab-template": "Vorlaach oagugge",
+ "tooltip-ca-nstab-category": "Sachgrubbsaid oagugge",
"tooltip-minoredit": "Als gleeni Ännarung makiere",
"tooltip-save": "Doi Ännarunge schbaischare",
- "tooltip-preview": "Guggda doi Ännarunge inde Vorschau õ, bvor uff Schbaischare drigschd!",
- "tooltip-diff": "Gugg, welschi Ännarunge im Tegschd gmachd hoschd",
+ "tooltip-preview": "Guggda doi Ännarunge inde Vorschau oa, bvor uff Schbaischare driggschd!",
+ "tooltip-diff": "Gugg, welsche Ännarunge im Tegschd gmachd hoschd",
"tooltip-compareselectedversions": "D Unnaschied zwische denne zwee gwehlde Ausgawe õgugge",
"tooltip-watch": "Die Said zu doina Beowachdunglischd zufiesche",
- "tooltip-rollback": "„Zriggsedze“ machd alli Beawaidunge vum ledschde Middawaida rigg'gängisch",
- "tooltip-undo": "„Zrigg“ machd nua die Ännarung rigg'gängich un zaischd ä Vorschau õ.\nKonnschdn Grund inde Zommefassung õgewwe.",
- "tooltip-summary": "Gebä koaz Resimee",
+ "tooltip-rollback": "„Zriggsedze“ machd alle Beawaidunge vum ledschde Middawaida rigg'gängisch",
+ "tooltip-undo": "„Zrigg“ machd nua die Ännarung rigg'gängich unn zaischdä Vorschau.\nKonnschdn Grund inde Zommefassung oagewwe.",
+ "tooltip-summary": "Gebb ä koaz Resimee",
+ "simpleantispam-label": "Schbämschudzpriefung.\nDo <strong>NIX</strong> oidraache!",
"pageinfo-hidden-categories": "{{PLURAL:$1|Vaschdeggldi Sachgrubb|Vaschdegglde Sachgrubbe}} ($1)",
- "pageinfo-category-info": "Sachgrubb-Õgawe",
- "pageinfo-category-subcats": "Õzahl vun Unnagrubbe",
- "previousdiff": "← Äldari Beawaidung",
+ "pageinfo-toolboxlink": "Auskinfd zude Said",
+ "pageinfo-contentpage-yes": "Ja",
+ "pageinfo-protect-cascading-yes": "Ja",
+ "pageinfo-category-info": "Sachgrubb-Oagawe",
+ "pageinfo-category-subcats": "Oazahl vun Unnagrubbe",
+ "previousdiff": "← Äldare Beawaidung",
"nextdiff": "Naijari Beawaidung →",
"file-info-size": "$1 × $2 Pixels, Dadaigreß: $3, MIME-Type: $4",
- "file-nohires": "Ke heheri Ufflesung vafieschba.",
+ "file-nohires": "Kä hejari Ufflesung vafieschba.",
"svg-long-desc": "SVG-Datei, Grundgreß $1 × $2 Pixels, Dadaigreß: $3",
"show-big-image": "Uaschbringlischi Dadai",
+ "show-big-image-preview": "Greeß vunde Voaschau: $1.",
+ "show-big-image-other": "Waidari {{PLURAL:$2|Uffleesung|Uffleesunge}}: $1.",
+ "show-big-image-size": "$1 × $2 Pixl",
"ilsubmit": "Such",
"bad_image_list": "Uffbau: bloß Zaile, wu midm * õfonge werren briggsischdischd.\nDe erschd Lingg mussn Lingg zu änna uuerwinschde Dadai soi.\nÕnnare Linggs inde glaische Zail werren als Ausnõhm gnumme, des heesd, Saide, wu inde Dadai vorkumme dirfn.",
"metadata": "Medadaade",
- "metadata-help": "Die Dadai hodd waidari Õgawe, waschoinlisch vunde Digidalkõmara odda vum Skänna, wumase mid gmachd hodd.\nWonn die Dadai vaännad worre isch, donn konns soi, daß zusedzlischi Õgawe fa die vaännad Dadai nemme rischdisch sinn.",
+ "metadata-help": "Die Dadai hodd waidare Oagawe, waschoinlisch vunde Digidalkomara odda vum Skänna, wumase midd gmachd hodd.\nWonn die Dadai vaännad worre isch, konns soi, daß zusedzlischi Oagawe nemme rischdisch sinn.",
"metadata-expand": "Erwaiterte Details aazaiche",
"metadata-collapse": "Erwaiterte Details versteckeln",
- "metadata-fields": "Die EXIF-Medadaade werren inde Bild-Bschraiwung a õgzaischd, wonn die Medadaade-Tabell vaschdegld isch.\nÕnnare Medadaade sinn noamalawais vaschdegld.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-fields": "Die EXIF-Medadaade werrn inde Bild-Bschraiwung a oagzaischd, wonn die Medadaade-Tabell vaschdeggld isch.\nOannare Medadaade sinn noamalawais vaschdeggld.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "exif-orientation": "Ausrischdung",
+ "exif-xresolution": "Waagreschdi Ufflesung",
+ "exif-yresolution": "Seng'greschdi Ufflesung",
+ "exif-datetime": "Schbaischazaidpungd",
+ "exif-make": "Kamaraheaschdella",
+ "exif-model": "Kamaramodel",
+ "exif-software": "Sofdwaa",
+ "exif-exifversion": "Exif-Veasion",
+ "exif-colorspace": "Fawe",
+ "exif-datetimeoriginal": "Zaidpungd vunde Eafassung",
+ "exif-datetimedigitized": "Zaidpungd vunde Digidalisierung",
"exif-iimcategory": "Sachgrubb",
"exif-iimsupplementalcategory": "Ergenzndi Sachgrubbe",
+ "exif-orientation-1": "Noamal",
"exif-gaincontrol-0": "Kään",
- "watchlistall2": "alle",
"namespacesall": "alle",
"monthsall": "alle",
- "watchlisttools-view": "Die wischdische Ännarunge õgugge",
- "watchlisttools-edit": "Beowachdunglischd õgugge un drõ schaffe",
- "watchlisttools-raw": "Im große Tegschdfeld schaffe",
+ "watchlisttools-view": "Die wischdische Ännarunge oagugge",
+ "watchlisttools-edit": "Beowachdunglischd oagugge un droa schaffe",
+ "watchlisttools-raw": "Im große Tegschdkaschde schaffe",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Gbabbl]])",
"duplicate-defaultsort": "'''Baßma uff:''' De Schlissl \"$2\" dudde frijare Schlissl \"$1\" iwwaschraiwe.",
- "specialpages": "Schbezialsaide",
+ "specialpages": "Sondasaide",
"specialpages-group-other": "Onare bsundare Saide",
"specialpages-group-pagetools": "Wergzaisch fa Saide",
"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)",
+ "tags-active-yes": "Ja",
+ "tags-active-no": "Nä",
"tags-edit": "bearwaide",
+ "htmlform-no": "Nä",
+ "htmlform-yes": "Ja",
+ "logentry-delete-delete": "$1 {{GENDER:$2|hodd}} Said $3 gleschd",
+ "logentry-move-move": "$1 {{GENDER:$2|hodd}} die Said $3 noch $4 vaschowe",
+ "logentry-newusers-create": "Middawaidakondo $1 isch {{GENDER:$2|easchdelld}} worre",
+ "logentry-upload-upload": "$1 {{GENDER:$2|hodd}} $3 nuffg'laade",
"rightsnone": "(-)",
"feedback-close": "Erledischd",
- "searchsuggest-search": "Suche",
+ "searchsuggest-search": "Gugg",
"api-error-unknownerror": "Uubekonde Irrdumm: \"$1\".",
"duration-seconds": "$1 {{PLURAL:$1|Sekund|Sekunde}}",
"duration-minutes": "$1 {{PLURAL:$1|Minud|Minude}}",
diff --git a/languages/i18n/pi.json b/languages/i18n/pi.json
index 22ffb43b..bfa517f6 100644
--- a/languages/i18n/pi.json
+++ b/languages/i18n/pi.json
@@ -1,71 +1,69 @@
{
- "@metadata": {
- "authors": [
- "Eukesh (on pi.wikipedia.org)",
- "Hemant wikikosh1",
- "Vibhijain"
- ]
- },
- "january": "ज्यानुवरी",
- "february": "फ़रवरी",
- "march": "मार्च",
- "april": "अप्रैल",
- "may_long": "मई",
- "june": "जून",
- "july": "जुलाई",
- "august": "अगस्त",
- "september": "सेप्टेम्बर",
- "october": "ओक्टोबर",
- "november": "नवम्बर",
- "december": "दिसम्बर",
- "article": "लेख पत्त",
- "vector-view-create": "रचेतु",
- "help": "सहायता",
- "search": "अन्वेसना",
- "searchbutton": "खोज",
- "searcharticle": "गच्छामि",
- "create": "रचेतु",
- "talkpagelinktext": "सम्भासनं",
- "talk": "सम्भासनं",
- "aboutsite": "{{SITENAME}} इच्चस्स विसये",
- "disclaimers": "पच्चाक्खानं",
- "mainpage": "पमुख पत्त",
- "mainpage-description": "पमुख पत्त",
- "portal": "समुदायद्वारं",
- "portal-url": "Project:समुदायद्वारं",
- "privacy": "गोपनीयता-नीति",
- "editsection": "सम्पादेतु",
- "editsectionhint": "एतं विभागं सम्पादेतु",
- "red-link-title": "$1 (पिट्ठं न वत्तति)",
- "nstab-main": "पिट्ठं",
- "post-expand-template-inclusion-warning": "'''पबोधो:''' फलकानं योजनस्स आकारो अतिविसालो वत्तति।\nकानिचन फलकानि योजेतुं न सक्कन्ति ।",
- "currentrev-asof": "वत्तमाना आवुत्ति $1 इति समये",
- "previousrevision": "↓← पुरातनं अवतरणं",
- "searchmenu-new": "अस्मिं विकियं \"[[:$1]]\" इति पिट्ठं रचेतु।",
- "search-result-size": "$1 ({{PLURAL:$2|1 सद्दो|$2 सद्दा}})",
- "recentchanges": "सज्जोजातानि परिवत्तनानि",
- "hide": "गोपेतु",
- "show": "दस्सेतु",
- "randompage": "यदिच्छकपिट्ठं",
- "nbytes": "$1 {{PLURAL:$1|बाइटं|बाइटानि}}",
- "booksources-go": "गच्छामि",
- "allarticles": "सब्ब लेखा",
- "allpagessubmit": "गच्छामि",
- "contribslink": "योगदानानि",
- "export": "पिट्ठानं निय्यातं करोतु",
- "allmessagesname": "नाम",
- "tooltip-ca-talk": "पिट्ठन्तग्गतविसये सम्भासनं",
- "tooltip-ca-move": "इदं पिट्ठं चालेतु",
- "tooltip-ca-watch": "इदं पिट्ठं भवतो अवेक्खणसूचियं योजेतु",
- "tooltip-search": "{{SITENAME}} इच्चेत्थ अन्विस्सतु",
- "tooltip-search-fulltext": "एतं वचनं पिट्ठेसु अन्विस्सतु",
- "tooltip-p-logo": "मुखपिट्ठं गच्छतु",
- "tooltip-n-recentchanges": "सज्जोजातानं परिवत्तनानं सूची",
- "tooltip-n-randompage": "यदिच्छकं पिट्ठं गच्छतु",
- "tooltip-n-help": "अन्वेसनठानं",
- "tooltip-t-specialpages": "सब्बेसं पमुखानं पिट्ठानं सूची",
- "tooltip-summary": "संखित्तं सारंसं योजेतु",
- "exif-gpslatitude": "अक्षांश",
- "exif-gpslongitude": "देशान्तर",
- "exif-sensingmethod-1": "अपरिभाषित"
+ "@metadata": {
+ "authors": [
+ "Eukesh (on pi.wikipedia.org)",
+ "Hemant wikikosh1",
+ "Vibhijain"
+ ]
+ },
+ "january": "ज्यानुवरी",
+ "february": "फ़रवरी",
+ "march": "मार्च",
+ "april": "अप्रैल",
+ "may_long": "मई",
+ "june": "जून",
+ "july": "जुलाई",
+ "august": "अगस्त",
+ "september": "सेप्टेम्बर",
+ "october": "ओक्टोबर",
+ "november": "नवम्बर",
+ "december": "दिसम्बर",
+ "article": "लेख पत्त",
+ "help": "सहायता",
+ "search": "अन्वेसना",
+ "searchbutton": "खोज",
+ "searcharticle": "गच्छामि",
+ "create": "रचेतु",
+ "talkpagelinktext": "सम्भासनं",
+ "talk": "सम्भासनं",
+ "aboutsite": "{{SITENAME}} इच्चस्स विसये",
+ "disclaimers": "पच्चाक्खानं",
+ "mainpage": "पमुख पत्त",
+ "mainpage-description": "पमुख पत्त",
+ "portal": "समुदायद्वारं",
+ "portal-url": "Project:समुदायद्वारं",
+ "privacy": "गोपनीयता-नीति",
+ "editsection": "सम्पादेतु",
+ "editsectionhint": "एतं विभागं सम्पादेतु",
+ "red-link-title": "$1 (पिट्ठं न वत्तति)",
+ "nstab-main": "पिट्ठं",
+ "post-expand-template-inclusion-warning": "'''पबोधो:''' फलकानं योजनस्स आकारो अतिविसालो वत्तति।\nकानिचन फलकानि योजेतुं न सक्कन्ति ।",
+ "currentrev-asof": "वत्तमाना आवुत्ति $1 इति समये",
+ "previousrevision": "↓← पुरातनं अवतरणं",
+ "searchmenu-new": "अस्मिं विकियं \"[[:$1]]\" इति पिट्ठं रचेतु।",
+ "search-result-size": "$1 ({{PLURAL:$2|1 सद्दो|$2 सद्दा}})",
+ "recentchanges": "सज्जोजातानि परिवत्तनानि",
+ "hide": "गोपेतु",
+ "show": "दस्सेतु",
+ "randompage": "यदिच्छकपिट्ठं",
+ "nbytes": "$1 {{PLURAL:$1|बाइटं|बाइटानि}}",
+ "allarticles": "सब्ब लेखा",
+ "allpagessubmit": "गच्छामि",
+ "contribslink": "योगदानानि",
+ "export": "पिट्ठानं निय्यातं करोतु",
+ "allmessagesname": "नाम",
+ "tooltip-ca-talk": "पिट्ठन्तग्गतविसये सम्भासनं",
+ "tooltip-ca-move": "इदं पिट्ठं चालेतु",
+ "tooltip-ca-watch": "इदं पिट्ठं भवतो अवेक्खणसूचियं योजेतु",
+ "tooltip-search": "{{SITENAME}} इच्चेत्थ अन्विस्सतु",
+ "tooltip-search-fulltext": "एतं वचनं पिट्ठेसु अन्विस्सतु",
+ "tooltip-p-logo": "मुखपिट्ठं गच्छतु",
+ "tooltip-n-recentchanges": "सज्जोजातानं परिवत्तनानं सूची",
+ "tooltip-n-randompage": "यदिच्छकं पिट्ठं गच्छतु",
+ "tooltip-n-help": "अन्वेसनठानं",
+ "tooltip-t-specialpages": "सब्बेसं पमुखानं पिट्ठानं सूची",
+ "tooltip-summary": "संखित्तं सारंसं योजेतु",
+ "exif-gpslatitude": "अक्षांश",
+ "exif-gpslongitude": "देशान्तर",
+ "exif-sensingmethod-1": "अपरिभाषित"
}
diff --git a/languages/i18n/pih.json b/languages/i18n/pih.json
index 3aabf752..bfc1a128 100644
--- a/languages/i18n/pih.json
+++ b/languages/i18n/pih.json
@@ -1,42 +1,42 @@
{
- "@metadata": {
- "authors": [
- "Pall Mall (on pih.wikipedia.org)"
- ]
- },
- "january": "Jaenyuweri",
- "february": "Febyuweri",
- "march": "Maach",
- "april": "Ieprel",
- "may_long": "Mieh",
- "june": "Juun",
- "july": "Juulai",
- "january-gen": "Jaenyuweri",
- "february-gen": "Febyuweri",
- "march-gen": "Maach",
- "april-gen": "Ieprel",
- "may-gen": "Mieh",
- "june-gen": "Juun",
- "july-gen": "Juulai",
- "may": "Mieh",
- "help": "Hiiwp",
- "history_short": "Histrei",
- "edit": "Edet",
- "talk": "diskushun",
- "currentevents": "Dem Kurent Iwent",
- "currentevents-url": "Project:Dem Kurent Iwent",
- "mainpage": "Mien Paij",
- "mainpage-description": "Mien Paij",
- "portal": "Trii'nohlij",
- "editold": "edet",
- "nstab-main": "Artikal",
- "nstab-help": "Hiiwp Paij",
- "prefs-rc": "Dem Riisent Chayng",
- "recentchanges": "Dem Riisent Chayng",
- "recentchangeslinked": "Dem Riilated Chayng",
- "recentchangeslinked-feed": "Dem Riilated Chayng",
- "recentchangeslinked-toolbox": "Dem Riilated Chayng",
- "upload": "Upload Faail",
- "randompage": "Raandum Paij",
- "whatlinkshere": "Wata link hiia"
+ "@metadata": {
+ "authors": [
+ "Pall Mall (on pih.wikipedia.org)"
+ ]
+ },
+ "january": "Jaenyuweri",
+ "february": "Febyuweri",
+ "march": "Maach",
+ "april": "Ieprel",
+ "may_long": "Mieh",
+ "june": "Juun",
+ "july": "Juulai",
+ "january-gen": "Jaenyuweri",
+ "february-gen": "Febyuweri",
+ "march-gen": "Maach",
+ "april-gen": "Ieprel",
+ "may-gen": "Mieh",
+ "june-gen": "Juun",
+ "july-gen": "Juulai",
+ "may": "Mieh",
+ "help": "Hiiwp",
+ "history_short": "Histrei",
+ "edit": "Edet",
+ "talk": "diskushun",
+ "currentevents": "Dem Kurent Iwent",
+ "currentevents-url": "Project:Dem Kurent Iwent",
+ "mainpage": "Mien Paij",
+ "mainpage-description": "Mien Paij",
+ "portal": "Trii'nohlij",
+ "editold": "edet",
+ "nstab-main": "Artikal",
+ "nstab-help": "Hiiwp Paij",
+ "prefs-rc": "Dem Riisent Chayng",
+ "recentchanges": "Dem Riisent Chayng",
+ "recentchangeslinked": "Dem Riilated Chayng",
+ "recentchangeslinked-feed": "Dem Riilated Chayng",
+ "recentchangeslinked-toolbox": "Dem Riilated Chayng",
+ "upload": "Upload Faail",
+ "randompage": "Raandum Paij",
+ "whatlinkshere": "Wata link hiia"
}
diff --git a/languages/i18n/pl.json b/languages/i18n/pl.json
index 87af2688..64a84f46 100644
--- a/languages/i18n/pl.json
+++ b/languages/i18n/pl.json
@@ -66,11 +66,22 @@
"Wedkarski",
"아라",
"Matik7",
- "Vengir"
+ "Vengir",
+ "Darellur",
+ "Michał Sobkowski",
+ "Py64",
+ "Nanaki",
+ "Alan ffm",
+ "Macofe",
+ "Devwebtel",
+ "VerMa",
+ "Ency",
+ "Kszapsza",
+ "Openbk"
]
},
"tog-underline": "Podkreślenie linków:",
- "tog-hideminor": "Ukryj drobne edycje w ostatnich zmianach",
+ "tog-hideminor": "Ukryj drobne edycje z ostatnich zmian",
"tog-hidepatrolled": "Ukryj sprawdzone edycje w ostatnich zmianach",
"tog-newpageshidepatrolled": "Ukryj sprawdzone strony na liście nowych stron",
"tog-extendwatchlist": "Pokaż na liście obserwowanych wszystkie zmiany, nie tylko ostatnie",
@@ -94,7 +105,7 @@
"tog-shownumberswatching": "Pokaż liczbę użytkowników obserwujących stronę",
"tog-oldsig": "Twój obecny podpis:",
"tog-fancysig": "Traktuj podpis jako wikikod (nie linkuj automatycznie całości)",
- "tog-uselivepreview": "Używaj dynamicznego podglądu (eksperymentalny)",
+ "tog-uselivepreview": "Używaj dynamicznego podglądu",
"tog-forceeditsummary": "Informuj o niewypełnieniu opisu zmian",
"tog-watchlisthideown": "Ukryj moje edycje na liście obserwowanych",
"tog-watchlisthidebots": "Ukryj edycje botów na liście obserwowanych",
@@ -182,7 +193,7 @@
"category_header": "Strony w kategorii „$1”",
"subcategories": "Podkategorie",
"category-media-header": "Pliki w kategorii „$1”",
- "category-empty": "<em>Obecnie w tej kategorii brak stron oraz plików.</em>",
+ "category-empty": "<em>Obecnie w tej kategorii nie ma stron ani plików.</em>",
"hidden-categories": "{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie}}",
"hidden-category-category": "Ukryte kategorie",
"category-subcat-count": "{{PLURAL:$2|Ta kategoria ma tylko jedną podkategorię.|Poniżej wyświetlono $1 spośród wszystkich $2 podkategorii tej kategorii.}}",
@@ -256,7 +267,7 @@
"personaltools": "Osobiste",
"articlepage": "Artykuł",
"talk": "Dyskusja",
- "views": "Widok",
+ "views": "Wyświetleń",
"toolbox": "Narzędzia",
"userpage": "Strona użytkownika",
"projectpage": "Strona projektu",
@@ -274,14 +285,15 @@
"viewcount": "Tę stronę obejrzano {{PLURAL:$1|tylko raz|$1 razy}}.",
"protectedpage": "Strona zabezpieczona",
"jumpto": "Skocz do:",
- "jumptonavigation": "nawigacji",
- "jumptosearch": "wyszukiwania",
+ "jumptonavigation": "nawigacja",
+ "jumptosearch": "szukaj",
"view-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić tę stronę.\nPoczekaj chwilę przed ponowną próbą dostępu do tej strony.\n\n$1",
- "generic-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić tę stronę.\nPoczekaj chwilę przed ponowną próbą dostępu do tej strony.",
+ "generic-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić ten zasób.\nPoczekaj chwilę przed ponowną próbą dostępu do tego zasobu.",
"pool-timeout": "Zbyt długi czas oczekiwania na blokadę",
"pool-queuefull": "Kolejka zadań jest pełna",
"pool-errorunknown": "Błąd nieznany",
"pool-servererror": "Usługa licznika nie jest dostępna ($1).",
+ "poolcounter-usage-error": "Błąd użycia: $1",
"aboutsite": "O {{GRAMMAR:MS.lp|{{SITENAME}}}}",
"aboutpage": "Project:O {{GRAMMAR:MS.lp|{{SITENAME}}}}",
"copyright": "Treść udostępniana na licencji $1, jeśli nie podano inaczej.",
@@ -291,6 +303,7 @@
"disclaimers": "Informacje prawne",
"disclaimerpage": "Project:Informacje prawne",
"edithelp": "Pomoc w edycji",
+ "helppage-top-gethelp": "Pomoc",
"mainpage": "Strona główna",
"mainpage-description": "Strona główna",
"policy-url": "Project:Zasady",
@@ -305,7 +318,7 @@
"versionrequiredtext": "Użycie tej strony wymaga oprogramowania MediaWiki w wersji $1. Zobacz stronę [[Special:Version|wersja oprogramowania]].",
"ok": "OK",
"pagetitle": "$1 – {{SITENAME}}",
- "retrievedfrom": "Źródło „$1”",
+ "retrievedfrom": "Źródło: „$1”",
"youhavenewmessages": "Masz $1 ($2).",
"youhavenewmessagesfromusers": "Masz $1 od {{PLURAL:$3|innego użytkownika|$3 użytkowników}} ($2).",
"youhavenewmessagesmanyusers": "Masz $1 od wielu użytkowników ($2).",
@@ -371,10 +384,13 @@
"readonly_lag": "Baza danych została automatycznie zablokowana na czas potrzebny do wykonania synchronizacji zmian między serwerem głównym i serwerami pośredniczącymi.",
"internalerror": "Błąd wewnętrzny",
"internalerror_info": "Błąd wewnętrzny – $1",
+ "internalerror-fatal-exception": "Krytyczny wyjątek typu \"$1\"",
"filecopyerror": "Nie można skopiować pliku „$1” do „$2”.",
"filerenameerror": "Nie można zmienić nazwy pliku „$1” na „$2”.",
"filedeleteerror": "Nie można usunąć pliku „$1”.",
"directorycreateerror": "Nie udało się utworzyć katalogu „$1”.",
+ "directoryreadonlyerror": "Ścieżka \"$1\" jest tylko do odczytu.",
+ "directorynotreadableerror": "Ścieżka \"$1\" nie jest odczytywalna.",
"filenotfound": "Nie można znaleźć pliku „$1”.",
"unexpected": "Nieoczekiwana wartość „$1”=„$2”.",
"formerror": "Błąd – nie można wysłać formularza",
@@ -385,8 +401,8 @@
"no-null-revision": "Nie można utworzyć zerowej wersji strony \"$1\"",
"badtitle": "Niepoprawny tytuł",
"badtitletext": "Podano niepoprawny tytuł strony. Prawdopodobnie jest pusty lub zawiera znaki, których użycie jest zabronione.",
- "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. Maksymalnie {{PLURAL:$1|jeden wynik jest|$1 wyniki są|$1 wyników jest}} w pamięci podręcznej.",
- "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się $1. Maksymalnie {{PLURAL:$4|jeden wynik jest|$4 wyniki są|$4 wyników jest}} w pamięci podręcznej.",
+ "perfcached": "Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. W pamięci podręcznej {{PLURAL:$1|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$1|jeden wynik|$1 wyniki|$1 wyników}}.",
+ "perfcachedts": "Poniższe dane są kopią z pamięci podręcznej. Ostatnia aktualizacja odbyła się $1. W pamięci podręcznej {{PLURAL:$4|znajduje|znajdują|znajduje}} się maksymalnie {{PLURAL:$4|jeden wynik|$4 wyniki|$4 wyników}}.",
"querypage-no-updates": "Uaktualnienia dla tej strony są obecnie wyłączone. Znajdujące się tutaj dane nie zostaną odświeżone.",
"viewsource": "Tekst źródłowy",
"viewsource-title": "Tekst źródłowy strony $1",
@@ -396,7 +412,8 @@
"viewsourcetext": "Tekst źródłowy strony można podejrzeć i skopiować.",
"viewyourtext": "Tekst źródłowy '''zmodyfikowanej''' przez Ciebie strony możesz podejrzeć i skopiować",
"protectedinterface": "Ta strona zawiera tekst interfejsu oprogramowania wiki i jest zabezpieczona przed nadużyciami.\nBy dodać lub zmienić tłumaczenia wszystkich serwisów wiki, użyj [//translatewiki.net/ translatewiki.net], projektu lokalizacji MediaWiki.",
- "editinginterface": "'''Ostrzeżenie:''' Edytujesz stronę, która zawiera tekst interfejsu oprogramowania.\nZmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników tej wiki.\nBy dodać lub zmienić tłumaczenia wszystkich wiki, użyj [//translatewiki.net/wiki/Main_Page?setlang=pl translatewiki.net], specjalizowany projekt lokalizacji oprogramowania MediaWiki.",
+ "editinginterface": "<strong>Ostrzeżenie:</strong> Edytujesz stronę, która zawiera tekst interfejsu oprogramowania.\nZmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników tej wiki.",
+ "translateinterface": "Aby dodać lub zmienić tłumaczenia wszystkich wiki, użyj [//translatewiki.net/ translatewiki.net], projekt lokalizacji oprogramowania MediaWiki.",
"cascadeprotected": "Ta strona została zabezpieczona przed edycją, ponieważ jest ona zawarta na {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia:\n$2",
"namespaceprotected": "Nie masz uprawnień do edytowania stron w przestrzeni nazw '''$1'''.",
"customcssprotected": "Nie jesteś uprawniony do edytowania tej strony CSS, ponieważ zawiera ona ustawienia osobiste innego użytkownika.",
@@ -453,6 +470,8 @@
"userlogin-resetlink": "Zapomniałeś danych do zalogowania się?",
"userlogin-resetpassword-link": "Nie pamiętasz hasła?",
"userlogin-helplink2": "Pomoc przy logowaniu",
+ "userlogin-loggedin": "Zalogowano jako {{GENDER:$1|$1}}.\nUżyj poniższego formularza, aby zalogować się jako inny użytkownik.",
+ "userlogin-createanother": "Załóż nowe konto",
"createacct-emailrequired": "Adres e‐mail",
"createacct-emailoptional": "Adres e-mail (opcjonalnie)",
"createacct-email-ph": "Wpisz swój adres e-mail",
@@ -488,6 +507,7 @@
"wrongpassword": "Podane hasło jest nieprawidłowe. Spróbuj jeszcze raz.",
"wrongpasswordempty": "Wprowadzone hasło jest puste. Spróbuj ponownie.",
"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}}.",
"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",
@@ -610,13 +630,15 @@
"showpreview": "Pokaż podgląd",
"showdiff": "Podgląd zmian",
"blankarticle": "<strong>Uwaga:</strong> Strona, którą masz zamiar utworzyć jest pusta.\nJeżeli klikniesz \"{{int:savearticle}}\" ponownie, strona zostanie utworzona bez jakiejkolwiek treści.",
- "anoneditwarning": "'''Uwaga:''' Nie jesteś {{GENDER:|zalogowany|zalogowana}}.\nTwój adres IP zostanie zapisany w historii edycji strony.",
+ "anoneditwarning": "<strong>Uwaga:</strong> Nie jesteś zalogowany. Twój adres IP będzie publicznie widoczny jeśli zrobisz dowolną zmianę. Jeśli <strong>[$1 zalogujesz się]</strong> lub <strong>[$2 stworzysz konto]</strong>, Twoje zmiany zostaną przypisane do konta, wraz z innymi korzyściami.",
"anonpreviewwarning": "''Nie jesteś zalogowany. Jeśli zapiszesz zmiany, w historii edycji strony zostanie umieszczony Twój adres IP.''",
"missingsummary": "'''Uwaga:''' Nie wprowadz{{GENDER:|iłeś|iłaś|ono}} opisu zmian.\nJeżeli nie chcesz go wprowadzać, naciśnij przycisk „Zapisz” jeszcze raz.",
+ "selfredirect": "<strong>Ostrzeżenie:</strong> Przekierowujesz tę stronę do niej samej.\nByć może został przez Ciebie wybrany zły cel przekierowania lub edytujesz niewłaściwą stronę.\nJeżeli ponownie klikniesz „{{int:savearticle}}”, przekierowanie zostanie utworzone.",
"missingcommenttext": "Wprowadź komentarz poniżej.",
"missingcommentheader": "'''Uwaga''' – treść tytułu lub nagłówka komentarza jest pusta.\nJeśli ponownie klikniesz „{{int:savearticle}}“, zmiany zostaną zapisane bez niego.",
"summary-preview": "Podgląd opisu:",
"subject-preview": "Podgląd nagłówka:",
+ "previewerrortext": "Wystąpił błąd podczas próby podglądu Twoich zmian.",
"blockedtitle": "Użytkownik jest zablokowany",
"blockedtext": "'''Twoje konto lub adres IP zostały zablokowane.'''\n\nBlokada została nałożona przez $1.\nPodany powód to: ''$2''.\n\n* Początek blokady: $8\n* Wygaśnięcie blokady: $6\n* Zablokowany został: $7\n\nW celu wyjaśnienia przyczyny zablokowania możesz się skontaktować z $1 lub innym [[{{MediaWiki:Grouppage-sysop}}|administratorem]].\nNie możesz użyć funkcji „Wyślij e‐mail do tego użytkownika”, jeśli brak jest poprawnego adresu e‐mail w Twoich [[Special:Preferences|preferencjach]] lub jeśli taka możliwość została Ci zablokowana.\nTwój obecny adres IP to $3, a numer identyfikacyjny blokady to $5.\nProsimy o podanie obu tych informacji przy wyjaśnianiu blokady.",
"autoblockedtext": "Ten adres IP został zablokowany automatycznie, gdyż korzysta z niego inny użytkownik, zablokowany przez administratora $1.\nPowód blokady:\n\n:''$2''\n\n* Początek blokady: $8\n* Wygaśnięcie blokady: $6\n* Zablokowany został: $7\n\nMożesz skontaktować się z $1 lub jednym z pozostałych [[{{MediaWiki:Grouppage-sysop}}|administratorów]] w celu uzyskania informacji o blokadzie.\n\nNie możesz użyć funkcji „Wyślij e‐mail do tego użytkownika”, jeśli brak jest poprawnego adresu e‐mail w Twoich [[Special:Preferences|preferencjach]] lub jeśli taka możliwość została Ci zablokowana.\n\nTwój obecny adres IP to $3, a numer identyfikacyjny blokady to $5.\nProsimy o podanie obu tych numerów przy wyjaśnianiu blokady.",
@@ -711,6 +733,10 @@
"content-model-text": "zwykły tekst",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Pusty obiekt",
+ "content-json-empty-array": "Pusta tablica",
+ "duplicate-args-category": "Strony zawierające wywołania szablonów z parametrami o takich samych nazwach",
+ "duplicate-args-category-desc": "Strona zawiera szablony, które używają duplikatów argumentów, jak <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> lub <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Uwaga! Ta strona zawiera zbyt wiele wywołań złożonych obliczeniowo funkcji parsera.\n\nPowinno być mniej niż $2 {{PLURAL:$2|wywołanie|wywołania|wywołań}}, a obecnie {{PLURAL:$1|jest $1 wywołanie|są $1 wywołania|jest $1 wywołań}}.",
"expensive-parserfunction-category": "Strony ze zbyt dużą liczbą wywołań kosztownych funkcji parsera",
"post-expand-template-inclusion-warning": "Uwaga – zbyt duża wielkość wykorzystanych szablonów.\nNiektóre szablony nie zostaną użyte.",
@@ -765,7 +791,7 @@
"history-feed-empty": "Wybrana strona nie istnieje.\nMogła zostać usunięta lub jej nazwa została zmieniona.\nSpróbuj [[Special:Search|poszukać]] tej strony.",
"rev-deleted-comment": "(usunięto opis zmian)",
"rev-deleted-user": "(nazwa użytkownika usunięta)",
- "rev-deleted-event": "(wpis usunięty)",
+ "rev-deleted-event": "(szczegóły usunięte)",
"rev-deleted-user-contribs": "[nazwa użytkownika lub adres IP usunięte – edycja ukryta we wkładzie]",
"rev-deleted-text-permission": "Ta wersja strony została '''usunięta'''.\nSzczegółowe informacje mogą znajdować się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze usunięć].",
"rev-suppressed-text-permission": "Ta wersja strony została <strong>ukryta</strong>.\nSzczegóły można odnaleźć w [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejestrze ukryć].",
@@ -799,7 +825,7 @@
"revdelete-legend": "Ustaw ograniczenia widoczności",
"revdelete-hide-text": "Tekst wersji",
"revdelete-hide-image": "Ukryj zawartość pliku",
- "revdelete-hide-name": "Ukryj akcję i cel",
+ "revdelete-hide-name": "Ukryj cel i parametry",
"revdelete-hide-comment": "Opis zmian",
"revdelete-hide-user": "Nazwa użytkownika/adres IP",
"revdelete-hide-restricted": "Ukryj informacje przed administratorami tak samo jak przed innymi",
@@ -853,10 +879,9 @@
"mergehistory-same-destination": "Strona źródłowa i docelowa nie mogą być takie same",
"mergehistory-reason": "Powód",
"mergelog": "Scalone",
- "pagemerge-logentry": "scala [[$1]] z [[$2]] (historia zmian aż do $3)",
"revertmerge": "Rozdziel",
"mergelogpagetext": "Poniżej znajduje się lista ostatnich scaleń historii zmian stron.",
- "history-title": "$1: Historia wersji",
+ "history-title": "Historia i autorzy strony „$1”",
"difference-title": "$1: Różnice pomiędzy wersjami",
"difference-title-multipage": "Różnica pomiędzy stronami \"$1\" i \"$2\"",
"difference-multipage": "(Różnica między stronami)",
@@ -876,6 +901,8 @@
"notextmatches": "Nie znaleziono w treści stron",
"prevn": "{{PLURAL:$1|poprzedni|poprzednie $1}}",
"nextn": "{{PLURAL:$1|następny|następne $1}}",
+ "prev-page": "poprzednia strona",
+ "next-page": "następna strona",
"prevn-title": "{{PLURAL:$1|Poprzedni|Poprzednie}} $1 {{PLURAL:$1|wynik|wyniki|wyników}}",
"nextn-title": "{{PLURAL:$1|Następny|Następne}} $1 {{PLURAL:$1|wynik|wyniki|wyników}}",
"shown-title": "Pokaż po $1 {{PLURAL:$1|wyniku|wyniki|wyników}} na stronę",
@@ -894,6 +921,7 @@
"search-result-category-size": "{{PLURAL:$1|1 element|$1 elementy|$1 elementów}} ({{PLURAL:$2|1 kategoria|$2 kategorie|$2 kategorii}}, {{PLURAL:$3|1 plik|$3 pliki|$3 plików}})",
"search-redirect": "(przekierowanie $1)",
"search-section": "(sekcja $1)",
+ "search-category": "(kategoria $1)",
"search-file-match": "(odpowiada zawartości pliku)",
"search-suggest": "Czy chodziło Ci o: $1",
"search-interwiki-caption": "Projekty siostrzane",
@@ -914,7 +942,7 @@
"powersearch-remember": "Zapamiętaj wybór dla kolejnych wyszukiwań",
"search-external": "Wyszukiwanie zewnętrzne",
"searchdisabled": "Wyszukiwanie w {{GRAMMAR:MS.lp|{{SITENAME}}}} zostało wyłączone.\nW międzyczasie możesz skorzystać z wyszukiwania Google.\nJednak informacje o treści {{GRAMMAR:D.lp|{{SITENAME}}}} mogą być w Google nieaktualne.",
- "search-error": "Wystąpił błąd podczas wyszukiwania:$1",
+ "search-error": "Wystąpił błąd podczas wyszukiwania: $1",
"preferences": "Preferencje",
"mypreferences": "Preferencje",
"prefs-edits": "Liczba edycji:",
@@ -927,6 +955,11 @@
"prefs-personal": "Dane użytkownika",
"prefs-rc": "Ostatnie zmiany",
"prefs-watchlist": "Obserwowane",
+ "prefs-editwatchlist": "Edycja listy obserwowanych",
+ "prefs-editwatchlist-label": "Edytuj wpisy na Twojej liście obserwowanych:",
+ "prefs-editwatchlist-edit": "Przejrzyj i usuń strony z listy obserwowanych",
+ "prefs-editwatchlist-raw": "Tekstowy edytor obserwowanych",
+ "prefs-editwatchlist-clear": "Wyczyść listę obserwowanych",
"prefs-watchlist-days": "Liczba dni widocznych na liście obserwowanych:",
"prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|dzień|dni}}",
"prefs-watchlist-edits": "Liczba edycji pokazywanych w rozszerzonej liście obserwowanych:",
@@ -950,7 +983,7 @@
"recentchangesdays-max": "(maksymalnie $1 {{PLURAL:$1|dzień|dni}})",
"recentchangescount": "Domyślna liczba wyświetlanych edycji:",
"prefs-help-recentchangescount": "Uwzględnia ostatnie zmiany, historię stron i rejestry.",
- "prefs-help-watchlist-token2": "To jest tajny klucz umożliwiający dostęp do kanału internetowego zmian w obserwowanych przez ciebie stronach.\nKażdy, kto go zna, będzie mógł je zobaczyć, więc zachowaj go dla siebie.\n[[Special:ResetTokens|Kliknij tu, jeśli musisz go zresetować]].",
+ "prefs-help-watchlist-token2": "To jest tajny klucz umożliwiający dostęp do kanału internetowego zmian w obserwowanych przez Ciebie stronach.\nKażdy, kto go zna, będzie mógł je zobaczyć, więc zachowaj go dla siebie.\n[[Special:ResetTokens|Kliknij tu, jeśli musisz go zresetować]].",
"savedprefs": "Twoje preferencje zostały zapisane.",
"timezonelegend": "Strefa czasowa:",
"localtime": "Czas lokalny:",
@@ -996,7 +1029,7 @@
"gender-female": "kobieta",
"prefs-help-gender": "Podanie płci nie jest obowiązkowe. Jeśli zdecydujesz się ją określić, oprogramowanie dostosuje do niej interfejs. Informacja o Twojej płci będzie widoczna dla wszystkich.",
"email": "E‐mail",
- "prefs-help-realname": "Wpisanie imienia i nazwiska nie jest obowiązkowe.\nJeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje autorstwo.",
+ "prefs-help-realname": "Imię i nazwisko jest opcjonalne.\nJeśli je podasz, to może być stosowane w celu przypisania Twojej pracy.",
"prefs-help-email": "Podanie adresu e‐mail nie jest obowiązkowe, lecz jest konieczne do zresetowania zapomnianego hasła.",
"prefs-help-email-others": "Możesz również umożliwić innym użytkownikom wysłanie do Ciebie e‐maila poprzez Twoją stronę użytkownika lub stronę dyskusji (bez ujawniania Twojego adresu).",
"prefs-help-email-required": "Wymagany jest adres e‐mail.",
@@ -1017,10 +1050,11 @@
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Zmiany",
"prefs-help-prefershttps": "Ta opcja zacznie działać przy twoim następnym zalogowaniu.",
+ "prefswarning-warning": "Niektóre z dokonanych zmian w preferencjach nie zostały jeszcze zapisane. Jeśli wyjdziesz bez wciśnięcia „$1”, Twoje zmiany zostaną utracone.",
"prefs-tabs-navigation-hint": "Wskazówka: do poruszania się między zakładkami możesz użyć klawiszy strzałek w lewo i w prawo",
"email-address-validity-valid": "Wygląda na prawidłowy",
"email-address-validity-invalid": "Wymagany jest prawidłowy adres!",
- "userrights": "Zarządzaj uprawnieniami użytkowników",
+ "userrights": "Zarządzanie uprawnieniami użytkowników",
"userrights-lookup-user": "Zarządzaj grupami użytkownika",
"userrights-user-editname": "Wprowadź nazwę użytkownika",
"editusergroup": "Edytuj grupy użytkownika",
@@ -1090,7 +1124,7 @@
"right-deletedtext": "Podgląd usuniętego tekstu i zmian pomiędzy usuniętymi wersjami",
"right-browsearchive": "Przeszukiwanie usuniętych stron",
"right-undelete": "Odtwarzanie usuniętych stron",
- "right-suppressrevision": "Podgląd i odtwarzanie wersji ukrytych przed administratorami",
+ "right-suppressrevision": "Podgląd, ukrywanie i odkrywanie wersji ukrytych przed wszystkimi",
"right-viewsuppressed": "Umożliwia zobaczenie wersji ukrytych przed każdym użytkownikiem",
"right-suppressionlog": "Podgląd rejestru ukrywania",
"right-block": "Blokowanie użytkownikom możliwości edycji",
@@ -1102,6 +1136,7 @@
"right-protect": "Zmiana poziomu zabezpieczenia i edycja stron zabezpieczonych kaskadowo",
"right-editprotected": "Edycja stron zabezpieczonych na poziomie „{{int:protect-level-sysop}}”",
"right-editsemiprotected": "Edycja stron zabezpieczonych na poziomie „{{int:protect-level-autoconfirmed}}”",
+ "right-editcontentmodel": "Edycja modelu zawartości strony",
"right-editinterface": "Edycja interfejsu użytkownika",
"right-editusercssjs": "Edycja plików CSS i JS innych użytkowników",
"right-editusercss": "Edycja plików CSS innych użytkowników",
@@ -1129,6 +1164,7 @@
"right-override-export-depth": "Eksport stron wraz z linkowanymi do głębokości 5 linków",
"right-sendemail": "Wysyłanie e‐maili do innych użytkowników",
"right-passwordreset": "Sprawdzanie treści e‐maila o resetowaniu hasła",
+ "right-managechangetags": "Tworzenie i usuwanie [[Special:Tags|znaczników]] z bazy danych",
"newuserlogpage": "Nowi użytkownicy",
"newuserlogpagetext": "To jest rejestr ostatnio utworzonych kont użytkowników",
"rightslog": "Uprawnienia",
@@ -1174,6 +1210,8 @@
"action-viewmywatchlist": "zobaczenia swojej listy obserwowanych stron",
"action-viewmyprivateinfo": "zobaczenia swoich prywatnych danych",
"action-editmyprivateinfo": "edycji swoich prywatnych danych",
+ "action-editcontentmodel": "edycji modelu zawartości strony",
+ "action-managechangetags": "utwórz lub usuń znaczniki z bazy danych",
"nchanges": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od ostatniej wizyty}}",
"enhancedrc-history": "historia",
@@ -1190,7 +1228,7 @@
"recentchanges-legend-heading": "'''Legenda:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zobacz też [[Special:NewPages|listę nowych stron]])",
"recentchanges-legend-plusminus": "(''±123'')",
- "rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} wykonane po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
+ "rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} {{PLURAL:$5|wykonaną|wykonane}} po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
"rclistfrom": "Pokaż nowe zmiany od $3 $2",
"rcshowhideminor": "$1 drobne zmiany",
"rcshowhideminor-show": "Pokaż",
@@ -1244,9 +1282,9 @@
"uploaderror": "Błąd wysyłania",
"upload-recreate-warning": "'''Uwaga: plik o tej nazwie został wcześniej usunięty lub przeniesiony.''' \n\nPoniżej znajduje się rejestr usunięć i zmian nazwy tej strony:",
"uploadtext": "Użyj poniższego formularza do przesłania plików.\nJeśli chcesz przejrzeć lub przeszukać dotychczas przesłane pliki, przejdź do [[Special:FileList|listy plików]]. Każde przesłanie zostaje odnotowane w [[Special:Log/upload|rejestrze przesyłanych plików]], a usunięcie w [[Special:Log/delete|rejestrze usuniętych]].\n\nPlik pojawi się na stronie, jeśli użyjesz linku według jednego z następujących wzorów:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Plik.jpg]]</nowiki></code>''' pokaże plik w pełnej postaci\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Plik.png|200px|thumb|left|podpis grafiki]]</nowiki></code>''' pokaże szeroką na 200 pikseli miniaturkę umieszczoną przy lewym marginesie, otoczoną ramką, z podpisem „podpis grafiki”\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Plik.ogg]]</nowiki></code>''' utworzy bezpośredni link do pliku bez wyświetlania samego pliku",
- "upload-permitted": "Dopuszczalne formaty plików: $1.",
- "upload-preferred": "Zalecane formaty plików: $1.",
- "upload-prohibited": "Zabronione formaty plików: $1.",
+ "upload-permitted": "{{PLURAL:$2|Dopuszczalny format|Dopuszczalne formaty}} plików: $1.",
+ "upload-preferred": "{{PLURAL:$2|Zalecany format|Zalecane formaty}} plików: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Zabroniony format|Zabronione formaty}} plików: $1.",
"uploadlogpage": "Przesłane",
"uploadlogpagetext": "Lista ostatnio przesłanych plików.\nPrzejdź na stronę [[Special:NewFiles|galerii nowych plików]], by zobaczyć pliki jako miniaturki.",
"filename": "Nazwa pliku",
@@ -1261,7 +1299,7 @@
"illegalfilename": "Nazwa pliku „$1” zawiera znaki niedozwolone w tytułach stron.\nZmień nazwę pliku i prześlij go ponownie.",
"filename-toolong": "Nazwy plików nie mogą być dłuższe niż 240 bajtów.",
"badfilename": "Nazwa pliku została zmieniona na „$1”.",
- "filetype-mime-mismatch": "Rozszerzenie pliku „.$1“ nie pasuje do wykrytego typu MIME $2.",
+ "filetype-mime-mismatch": "Rozszerzenie pliku „.$1” nie pasuje do wykrytego typu MIME $2.",
"filetype-badmime": "Przesyłanie plików z typem MIME „$1” jest niedozwolone.",
"filetype-bad-ie-mime": "Nie można załadować tego pliku, ponieważ Internet Explorer wykryje go jako „$1”, a taki typ pliku jest zabronioniony jako potencjalnie niebezpieczny.",
"filetype-unwanted-type": "'''„.$1”''' nie jest zalecanym typem pliku. Pożądane są pliki w {{PLURAL:$3|formacie|formatach}} $2.",
@@ -1505,7 +1543,6 @@
"statistics": "Statystyki",
"statistics-header-pages": "Statystyka stron",
"statistics-header-edits": "Statystyka edycji",
- "statistics-header-views": "Statystyka odwiedzin",
"statistics-header-users": "Statystyka użytkowników",
"statistics-header-hooks": "Inne statystyki",
"statistics-articles": "Strony",
@@ -1514,13 +1551,9 @@
"statistics-files": "Przesłane pliki",
"statistics-edits": "Edycje wykonane od powstania {{GRAMMAR:D.lp|{{SITENAME}}}}",
"statistics-edits-average": "Średnia liczba edycji na stronę",
- "statistics-views-total": "Całkowita liczba odwiedzin",
- "statistics-views-total-desc": "Odsłony stron nieistniejących oraz specjalnych nie zostały uwzględnione.",
- "statistics-views-peredit": "Liczba odwiedzin na edycję",
"statistics-users": "Zarejestrowanych [[Special:ListUsers|użytkowników]]",
"statistics-users-active": "Aktywnych użytkowników",
"statistics-users-active-desc": "Użytkownicy, którzy byli aktywni w ciągu {{PLURAL:$1|ostatniego dnia|ostatnich $1 dni}}",
- "statistics-mostpopular": "Najczęściej odwiedzane strony",
"pageswithprop": "Strony z właściwościami",
"pageswithprop-legend": "Strony z właściwościami",
"pageswithprop-text": "Ta strona zawiera listę stron korzystających z właściwości.",
@@ -1553,7 +1586,7 @@
"nimagelinks": "Używane na $1 {{PLURAL:$1|stronie|stronach}}",
"ntransclusions": "używany na $1 {{PLURAL:$1|stronie|stronach}}",
"specialpage-empty": "Ta strona raportu jest pusta.",
- "lonelypages": "Porzucone strony",
+ "lonelypages": "Osierocone strony",
"lonelypagestext": "Do poniższych stron nie linkuje żadna inna strona lub nie są one dołączone do innych stron w {{GRAMMAR:MS.lp|{{SITENAME}}}}.",
"uncategorizedpages": "Nieskategoryzowane strony",
"uncategorizedcategories": "Nieskategoryzowane kategorie",
@@ -1561,9 +1594,9 @@
"uncategorizedtemplates": "Nieskategoryzowane szablony",
"unusedcategories": "Puste kategorie",
"unusedimages": "Nieużywane pliki",
- "popularpages": "Najpopularniejsze strony",
"wantedcategories": "Brakujące kategorie",
"wantedpages": "Najpotrzebniejsze strony",
+ "wantedpages-summary": "Najczęściej linkowane nieistniejące strony, z wyłączeniem stron, do których linkują wyłącznie przekierowania. Lista nieistniejących stron, do których linkują przekierowania, znajduje się na [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Nieprawidłowy tytuł wśród wyników – $1",
"wantedfiles": "Potrzebne pliki",
"wantedfiletext-cat": "Następujące pliki są używane, ale nie istnieją. Pliki z obcych repozytoriów mogą być wymienione pomimo istnienia. Takie fałszywe wyniki zostaną <del>przekreślone</del>. Ponadto strony, które osadzają pliki, które nie istnieją, są wymienione w [[:$1]].",
@@ -1585,7 +1618,7 @@
"longpages": "Najdłuższe strony",
"deadendpages": "Strony bez linków wewnętrznych",
"deadendpagestext": "Poniższe strony nie posiadają odnośników do innych stron znajdujących się w {{GRAMMAR:MS.lp|{{SITENAME}}}}.",
- "protectedpages": "Strony zabezpieczone",
+ "protectedpages": "Zabezpieczone strony",
"protectedpages-indef": "Tylko strony zabezpieczone na zawsze",
"protectedpages-summary": "Ta strona zawiera listę stron, które są obecnie chronione. Aby uzyskać listę tytułów, których utworzenie jest zabronione, zobacz: [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
"protectedpages-cascade": "Tylko strony zabezpieczone rekursywnie",
@@ -1623,9 +1656,11 @@
"pager-older-n": "{{PLURAL:$1|1 starszy|$1 starsze|$1 starszych}}",
"suppress": "Rewizor",
"querypage-disabled": "Ta strona specjalna została wyłączona ze względu na ograniczenia wydajności.",
+ "apihelp": "Pomoc API",
+ "apihelp-no-such-module": "Moduł \"$1\" nie znaleziony.",
"booksources": "Książki",
"booksources-search-legend": "Szukaj informacji o książkach",
- "booksources-go": "Pokaż",
+ "booksources-search": "Szukaj",
"booksources-text": "Poniżej znajduje się lista odnośników do innych witryn, które pośredniczą w sprzedaży nowych i używanych książek, a także mogą posiadać dalsze informacje na temat poszukiwanej przez Ciebie książki.",
"booksources-invalid-isbn": "Podany numer ISBN został rozpoznany jako nieprawidłowy. Sprawdź czy podany numer zgadza się z numerem zaczerpniętym ze źródła.",
"specialloguserlabel": "Kto",
@@ -1761,7 +1796,7 @@
"wlheader-enotif": "Wysyłanie powiadomień na adres e‐mail jest włączone.",
"wlheader-showupdated": "'''Wytłuszczone''' zostały strony, które zostały zmodyfikowane od Twojej ostatniej wizyty na nich.",
"wlnote": "Poniżej pokazano {{PLURAL:$1|zmianę wykonaną|<strong>$1</strong> zmiany wykonane|<strong>$1</strong> zmian wykonanych}} w ciągu {{PLURAL:$2|ostatniej godziny|ostatnich <strong>$2</strong> godzin}}, licząc od $4 dnia $3.",
- "wlshowlast": "Pokaż ostatnie $1 godzin, $2 dni ($3)",
+ "wlshowlast": "Pokaż ostatnie $1 godzin, $2 dni",
"watchlist-options": "Opcje obserwowanych",
"watching": "Dodaję do obserwowanych...",
"unwatching": "Przestaję obserwować...",
@@ -1810,7 +1845,6 @@
"deleteprotected": "Nie możesz usunąć tej strony, ponieważ została zabezpieczona.",
"deleting-backlinks-warning": "''' Uwaga:''' Do strony, którą masz zamiar usunąć, odwołują się [[Special:WhatLinksHere/{{FULLPAGENAME}}|inne strony]].",
"rollback": "Cofnij edycję",
- "rollback_short": "Cofnij",
"rollbacklink": "cofnij",
"rollbacklinkcount": "cofnij $1 {{PLURAL:$1|edycję|edycje|edycji}}",
"rollbacklinkcount-morethan": "cofnij więcej niż $1 {{PLURAL:$1|edycję|edycje|edycji}}",
@@ -1920,6 +1954,7 @@
"namespace": "Przestrzeń nazw",
"invert": "odwróć wybór",
"tooltip-invert": "Zaznacz to pole, aby ukryć zmiany na stronach w wybranych przestrzeniach nazw (oraz związanych z nimi innymi przestrzeniami nazw, jeśli zaznaczono)",
+ "tooltip-whatlinkshere-invert": "Zaznacz to pole, aby ukryć linki do stron z wybranej przestrzeni nazw.",
"namespace_association": "powiązana przestrzeń nazw",
"tooltip-namespace_association": "Zaznacz to pole, aby uwzględnić strony dyskusji i tematu związane z wybranymi przestrzeniami nazw",
"blanknamespace": "(Główna)",
@@ -1936,7 +1971,7 @@
"sp-contributions-newbies-sub": "Dla nowych użytkowników",
"sp-contributions-newbies-title": "Wkład nowych użytkowników",
"sp-contributions-blocklog": "blokady",
- "sp-contributions-suppresslog": "stłumiony wkład użytkownika",
+ "sp-contributions-suppresslog": "utajniony wkład użytkownika",
"sp-contributions-deleted": "usunięty wkład użytkownika",
"sp-contributions-uploads": "przesłane pliki",
"sp-contributions-logs": "rejestry",
@@ -2184,13 +2219,14 @@
"thumbnail-temp-create": "Nie można utworzyć pliku tymczasowego miniatury",
"thumbnail-dest-create": "Nie można zapisać miniatury do miejsca docelowego",
"thumbnail_invalid_params": "Nieprawidłowe parametry miniatury",
+ "thumbnail_toobigimagearea": "Plik z wymiarami większymi niż $1",
"thumbnail_dest_directory": "Nie można utworzyć katalogu docelowego",
"thumbnail_image-type": "Grafika tego typu nie jest obsługiwana",
"thumbnail_gd-library": "Niekompletna konfiguracja biblioteki GD – brak funkcji $1",
"thumbnail_image-missing": "Chyba brakuje pliku $1",
"thumbnail_image-failure-limit": "Ostatnio było zbyt wielu nieudanych prób ($1 lub więcej) utworzenia miniaturki. Spróbuj ponownie później.",
"import": "Import stron",
- "importinterwiki": "Import transwiki",
+ "importinterwiki": "Import z innej wiki",
"import-interwiki-text": "Wybierz wiki i nazwę strony do importowania.\nDaty oraz nazwy autorów zostaną zachowane.\nWszystkie operacje importu transwiki są odnotowywane w [[Special:Log/import|rejestrze importu]].",
"import-interwiki-sourcewiki": "Źródłowa wiki:",
"import-interwiki-sourcepage": "Strona źródłowa:",
@@ -2211,7 +2247,7 @@
"importcantopen": "Nie można otworzyć importowanego pliku",
"importbadinterwiki": "Błędny link interwiki",
"importsuccess": "Import zakończony powodzeniem!",
- "importnosources": "Możliwość bezpośredniego importu historii została wyłączona, ponieważ nie zdefiniowano źródła.",
+ "importnosources": "Możliwość bezpośredniego importu historii została wyłączona, ponieważ nie zdefiniowano żadnych wiki, z których można byłoby importować.",
"importnofile": "Importowany plik nie został przesłany.",
"importuploaderrorsize": "Przesyłanie pliku importowanego zawiodło. Jest większy niż dopuszczalny rozmiar dla przesyłanych plików.",
"importuploaderrorpartial": "Przesyłanie pliku importowanego zawiodło. Został przesłany tylko częściowo.",
@@ -2235,18 +2271,15 @@
"import-rootpage-nosubpage": "Przestrzeń nazw \"$1\" strony głównej nie dopuszcza stron podrzędnych.",
"importlogpage": "Rejestr importu",
"importlogpagetext": "Rejestr przeprowadzonych importów stron z innych serwisów wiki.",
- "import-logentry-upload": "zaimportował(a) [[$1]] przez pobieranie plików",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|wersja|wersje|wersji}}",
- "import-logentry-interwiki": "zaimportował(a) $1 używając transwiki",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersja|wersje|wersji}} z $2",
"javascripttest": "Testowanie JavaScript",
- "javascripttest-title": "Uruchamianie testów $1",
"javascripttest-pagetext-noframework": "Ta strona jest zarezerwowana dla wykonywania testów JavaScript.",
"javascripttest-pagetext-unknownframework": "Nieznany framework testowania „$1”.",
+ "javascripttest-pagetext-unknownaction": "Nieznana akcja \"$1\".",
"javascripttest-pagetext-frameworks": "Wybierz jeden z następujących frameworków testowania: $1",
"javascripttest-pagetext-skins": "Wybierz skórkę, na której chcesz uruchomić testy:",
"javascripttest-qunit-intro": "Zobacz [$1 dokumentację testów] na mediawiki.org.",
- "javascripttest-qunit-heading": "Pakiet testów JavaScriptu MediaWiki QUnit",
"tooltip-pt-userpage": "Moja osobista strona",
"tooltip-pt-anonuserpage": "Strona użytkownika dla adresu IP, spod którego edytujesz",
"tooltip-pt-mytalk": "Moja strona dyskusji",
@@ -2256,6 +2289,7 @@
"tooltip-pt-mycontris": "Lista moich edycji",
"tooltip-pt-login": "Zachęcamy do zalogowania się, choć nie jest to obowiązkowe.",
"tooltip-pt-logout": "Wyloguj",
+ "tooltip-pt-createaccount": "Zachęcamy do stworzenia konta i zalogowania, ale nie jest to konieczne.",
"tooltip-ca-talk": "Dyskusja o zawartości tej strony",
"tooltip-ca-edit": "Możesz edytować tę stronę. Przed zapisaniem zmian użyj przycisku podgląd.",
"tooltip-ca-addsection": "Dodaj nowy wątek.",
@@ -2277,7 +2311,7 @@
"tooltip-n-portal": "O projekcie, co możesz zrobić, gdzie możesz znaleźć informacje",
"tooltip-n-currentevents": "Informacje o aktualnych wydarzeniach",
"tooltip-n-recentchanges": "Lista ostatnich zmian na {{GRAMMAR:MS.lp|{{SITENAME}}}}.",
- "tooltip-n-randompage": "Pokaż stronę wybraną losowo",
+ "tooltip-n-randompage": "Załaduj losową stronę",
"tooltip-n-help": "Tutaj możesz się dowiedzieć wielu rzeczy.",
"tooltip-t-whatlinkshere": "Pokaż listę wszystkich stron linkujących do tej strony",
"tooltip-t-recentchangeslinked": "Ostatnie zmiany w stronach, do których ta strona linkuje",
@@ -2285,7 +2319,8 @@
"tooltip-feed-atom": "Kanał Atom dla tej strony",
"tooltip-t-contributions": "Pokaż listę edycji tego użytkownika",
"tooltip-t-emailuser": "Wyślij e‐mail do tego użytkownika",
- "tooltip-t-upload": "Prześlij plik",
+ "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-print": "Wersja do wydruku",
"tooltip-t-permalink": "Stały link do tej wersji strony",
@@ -2340,7 +2375,7 @@
"spam_blanking": "Wszystkie wersje zawierały odnośniki do $1. Czyszczenie strony.",
"spam_deleting": "Wszystkie wersje zawierały linki do $1, usuwam.",
"simpleantispam-label": "Filtr antyspamowy.\n'''NIE''' wpisuj tu nic!",
- "pageinfo-title": "Informacje o „$1“",
+ "pageinfo-title": "Informacje o „$1”",
"pageinfo-not-current": "Niestety, te informacje nie są dostępne dla starych wersji stron.",
"pageinfo-header-basic": "Podstawowe informacje",
"pageinfo-header-edits": "Historia edycji",
@@ -2355,7 +2390,6 @@
"pageinfo-robot-policy": "Indeksowanie przez roboty",
"pageinfo-robot-index": "Dozwolone",
"pageinfo-robot-noindex": "Niedozwolone",
- "pageinfo-views": "Odsłon",
"pageinfo-watchers": "Liczba obserwujących",
"pageinfo-few-watchers": "Mniej niż $1 {{PLURAL:$1|obserwujący|obserwujących}}",
"pageinfo-redirects-name": "Liczba przekierowań do tej strony",
@@ -2811,7 +2845,6 @@
"exif-urgency-low": "Niski ($1)",
"exif-urgency-high": "Wysoki ($1)",
"exif-urgency-other": "Priorytet zdefiniowany przez użytkownika ($1)",
- "watchlistall2": "wszystkie",
"namespacesall": "wszystkie",
"monthsall": "wszystkie",
"confirmemail": "Potwierdzanie adresu e‐mail",
@@ -2936,9 +2969,9 @@
"hebrew-calendar-m9-gen": "Siwan",
"hebrew-calendar-m11-gen": "Aw",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|dyskusja]])",
- "unknown_extension_tag": "Nieznany znacznik rozszerzenia „$1”",
"duplicate-defaultsort": "Uwaga: Domyślnym kluczem sortowania będzie „$2” i zastąpi on wcześniej wykorzystywany klucz „$1”.",
"duplicate-displaytitle": "<strong>Uwaga:</strong> Wyświetlenie tytułu „$2” powoduje nadpisanie wcześniej wyświetlanego tytułu „$1”.",
+ "invalid-indicator-name": "<strong>Błąd:</strong> Atrybut stanu strony <code>name</code> nie może być pusty.",
"version": "Wersja oprogramowania",
"version-extensions": "Zainstalowane rozszerzenia",
"version-skins": "Zainstalowane skórki",
@@ -2953,7 +2986,7 @@
"version-parser-function-hooks": "Funkcje haków analizatora składni (ang. parser function hooks)",
"version-hook-name": "Nazwa haka (ang. hook name)",
"version-hook-subscribedby": "Zapotrzebowany przez",
- "version-version": "(Wersja $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[bez nazwy]",
"version-license": "Licencja MediaWiki",
"version-ext-license": "Licencja",
@@ -2978,6 +3011,9 @@
"version-entrypoints": "Adres URL punktu wejścia",
"version-entrypoints-header-entrypoint": "Punkt wejścia",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Zainstalowane biblioteki",
+ "version-libraries-library": "Biblioteka",
+ "version-libraries-version": "Wersja",
"redirect": "Przekierowanie według pliku, użytkownika, strony lub identyfikatora wersji",
"redirect-legend": "Przekieruj do pliku lub strony",
"redirect-summary": "Ta strona specjalna przekierowuje do: pliku (o podanej nazwie), do strony (o podanym numerze wersji lub identyfikatorze strony) albo do strony użytkownika (o podanym identyfikatorze numerycznym). Sposób użycia: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] albo [[{{#Special:Redirect}}/user/101]].",
@@ -3013,11 +3049,12 @@
"specialpages-group-wiki": "Informacje i narzędzia",
"specialpages-group-redirects": "Specjalne strony przekierowujące",
"specialpages-group-spam": "Narzędzia do walki ze spamem",
+ "specialpages-group-developer": "Narzędzia dewelopera",
"blankpage": "Pusta strona",
- "intentionallyblankpage": "Ta strona umyślnie pozostała pusta",
+ "intentionallyblankpage": "Tę stronę umyślnie pozostawiono pustą.",
"external_image_whitelist": " #Pozostaw tę linię dokładnie tak, jak jest.<pre>\n#Wstaw poniżej fragmenty wyrażeń regularnych (tylko to, co znajduje się między //).\n#Wyrażenia te zostaną dopasowane do adresów URL zewnętrznych (bezpośrednio linkowanych) grafik.\n#Dopasowane adresy URL zostaną wyświetlone jako grafiki, w przeciwnym wypadku będzie pokazany jedynie link do grafiki.\n#Linie zaczynające się od # są traktowane jako komentarze.\n#We wpisach ma znaczenie wielkość znaków.\n\n#Wstaw wszystkie deklaracje wyrażeniami regularnymi poniżej tej linii. Pozostaw tę linię dokładnie tak, jak jest.</pre>",
"tags": "Sprawdź zmiany w oparciu o wzorce tekstu",
- "tag-filter": "Filtr [[Special:Tags|wzorców tekstu]]",
+ "tag-filter": "Filtr [[Special:Tags|znaczników]]",
"tag-filter-submit": "Filtr",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Znacznik|Znaczniki}}]]: $2)",
"tags-title": "Znaczniki",
@@ -3025,12 +3062,54 @@
"tags-tag": "Nazwa znacznika",
"tags-display-header": "Wystąpienia na listach zmian",
"tags-description-header": "Pełny opis znaczenia",
+ "tags-source-header": "Źródło",
"tags-active-header": "Aktywny?",
"tags-hitcount-header": "Oznaczone zmiany",
+ "tags-actions-header": "Działania",
"tags-active-yes": "Tak",
"tags-active-no": "Nie",
+ "tags-source-extension": "Określony przez rozszerzenie",
+ "tags-source-manual": "Są wprowadzane ręcznie przez uczestników i boty",
+ "tags-source-none": "Nieużywany",
"tags-edit": "edytuj",
+ "tags-delete": "usuń",
+ "tags-activate": "aktywuj",
+ "tags-deactivate": "dezaktywuj",
"tags-hitcount": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}",
+ "tags-manage-no-permission": "Nie masz uprawnień do zarządzaniem zmianami znaczników.",
+ "tags-create-heading": "Utwórz nowy znacznik",
+ "tags-create-explanation": "Nowe znaczniki będą dostępne domyślnie dla użytkowników i botów.",
+ "tags-create-tag-name": "Nazwa znacznika:",
+ "tags-create-reason": "Powód:",
+ "tags-create-submit": "Utwórz",
+ "tags-create-no-name": "Musisz podać nazwę znacznika.",
+ "tags-create-invalid-chars": "Nazwy znaczników nie mogą zawierać przecinków (<code>,</code>) ani ukośników (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Nazwy znaczników nie mogą zawierać znaków, które nie mogą być używane w tytułach stron.",
+ "tags-create-already-exists": "Znacznik „$1” już istnieje.",
+ "tags-create-warnings-above": "Następujące {{PLURAL:$2|ostrzeżenie jest |ostrzeżenia są}} wynikiem próby utworzenia znacznika \"$1\":",
+ "tags-create-warnings-below": "Czy chcesz kontynuować tworzenie znacznika?",
+ "tags-delete-title": "Usuwanie znacznika",
+ "tags-delete-explanation-initial": "Zamierzasz usunąć znacznik „$1” z bazy danych.",
+ "tags-delete-explanation-in-use": "It will be removed from {{PLURAL:$2|$2 revision or log entry|all $2 revisions and/or log entries}} to which it is currently applied.",
+ "tags-delete-explanation-warning": "To działanie jest <strong>nieodwracalne</strong> i <strong>nie może być wycofane</strong>, nawet przez administratorów bazy danych. Upewnij się, że chcesz usunąć te dane.",
+ "tags-delete-explanation-active": "<strong>Znacznik \"$1\" wciąż jest aktywny i będzie stosowany w przyszłości. </strong> Dla zaprzestania jego stosowania należy przejść do miejsca, w którym znacznik określono jako stosowany i usunąć tam to wskazanie.",
+ "tags-delete-reason": "Powód:",
+ "tags-delete-submit": "Nieodwracalnie usuń ten znacznik",
+ "tags-delete-not-allowed": "Znaczniki zdefiniowane przez rozszerzenie nie mogą być usunięte chyba że dane rozszerzenie jawnie nas to zezwala.",
+ "tags-delete-not-found": "Znacznik „$1” nie istnieje.",
+ "tags-delete-too-many-uses": "Znacznik „$1” jest stosowany w więcej niż {{PLURAL:$2|jednej wersji|$2 wersjach}}, co oznacza, że nie może być usunięty.",
+ "tags-delete-warnings-after-delete": "Znacznik \"$1\" został usunięty pomyślnie, ale {{PLURAL:$2|stwierdzono następujące ostrzeżenie|stwierdzono następujące ostrzeżenia}}:",
+ "tags-activate-title": "Aktywacja znacznika",
+ "tags-activate-question": "Zamierzasz aktywować znacznik „$1”.",
+ "tags-activate-reason": "Powód:",
+ "tags-activate-not-allowed": "Nie można aktywować znacznika „$1”.",
+ "tags-activate-not-found": "Znacznik „$1” nie istnieje.",
+ "tags-activate-submit": "Aktywuj",
+ "tags-deactivate-title": "Dezaktywacja znacznika",
+ "tags-deactivate-question": "Zamierzasz dezaktywować znacznik „$1”.",
+ "tags-deactivate-reason": "Powód:",
+ "tags-deactivate-not-allowed": "Nie można dezaktywować znacznika „$1”.",
+ "tags-deactivate-submit": "Dezaktywuj",
"comparepages": "Porównanie stron",
"compare-page1": "Strona 1",
"compare-page2": "Strona 2",
@@ -3042,8 +3121,8 @@
"compare-revision-not-exists": "Wybrana wersja nie istnieje.",
"dberr-problems": "Przepraszamy! Witryna ma problemy techniczne.",
"dberr-again": "Spróbuj przeładować stronę za kilka minut.",
- "dberr-info": "(Brak komunikacji z serwerem bazy danych – $1)",
- "dberr-info-hidden": "(Nie można skontaktować się z serwerem bazy danych)",
+ "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.",
@@ -3084,6 +3163,14 @@
"revdelete-uname-unhid": "wycofano ukrycie nazwy użytkownika",
"revdelete-restricted": "ograniczono widoczność dla administratorów",
"revdelete-unrestricted": "wycofano ograniczenie widoczności dla administratorów",
+ "logentry-block-block": "$1 {{GENDER:$2|zablokował|zablokowała|zablokował(a)}} {{GENDER:$4|$3}}, czas blokady: $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|zdjął|zdjęła}} blokadę z {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia blokady dla {{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",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|zaimportował|zaimportowała}} $3 z innej wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|scalił|scaliła}} stronę $3 do $4 (wersje do $5)",
"logentry-move-move": "$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 do $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 na $4, bez pozostawienia przekierowania pod starym tytułem",
"logentry-move-move_redir": "$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 na $4 w miejsce przekierowania",
@@ -3101,24 +3188,40 @@
"logentry-upload-upload": "$1 {{GENDER:$2|przesłał|przesłała}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|przesłał|przesłała}} nową wersję $3",
"logentry-upload-revert": "$1 {{GENDER:$2|przesłał|przesłała}} $3",
+ "log-name-managetags": "Rejestr zarządzania znacznikami",
+ "log-description-managetags": "Na tej stronie są wymienione zadania związane z zarządzaniem [[Special:Tags|znacznikami]]. Dziennik (log) zawiera tylko działania wykonane ręcznie przez administratora; znaczniki mogą być tworzone lub usuwane przez oprogramowanie wiki bez dodawania wpisów w dzienniku (logu).",
+ "logentry-managetags-create": "$1 {{GENDER:$2|utworzył|utworzyła}} znacznik „$4”",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|usunął|usunęła}} znacznik \"$4\" (wykluczony z $5 {{PLURAL:$5|wersji lub wpisu dziennika|wersji i/lub wpisów dziennika}})",
+ "logentry-managetags-activate": "$1 aktywował{{GENDER:$2||a}} znacznik \"$4\" do korzystania przez uczestników i boty",
+ "logentry-managetags-deactivate": "$1 wyłączył{{GENDER:$2||a}} znacznik \"$4\" z korzystania przez uczestników i boty",
"rightsnone": "brak",
+ "revdelete-summary": "opis zmian",
+ "feedback-adding": "Dodawanie opinii do strony...",
+ "feedback-back": "Wstecz",
+ "feedback-bugcheck": "Świetnie! Tylko sprawdź, czy nie jest to jeden z już [$1 znanych błędów].",
+ "feedback-bugnew": "Sprawdziłam(łem). Zgłoś nowy błąd",
"feedback-bugornote": "Jeśli jesteś w stanie szczegółowo opisać problem techniczny, proszę [$1 zgłoś błąd].\nW przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zostanie dodany do strony \"[$3 $2]\", wraz z nazwą użytkownika.",
- "feedback-subject": "Temat",
- "feedback-message": "Wiadomość:",
"feedback-cancel": "Anuluj",
- "feedback-submit": "Prześlij opinię",
- "feedback-adding": "Dodawanie opinii do strony...",
+ "feedback-close": "Gotowe",
+ "feedback-external-bug-report-button": "Zgłoś problem techniczny",
+ "feedback-dialog-title": "Prześlij opinię",
+ "feedback-dialog-intro": "Możesz użyć tego prostego formularza w celu zgłoszenia swojej opinii. Twój komentarz, wraz z Twoją nazwą użytkownika (albo numerem IP) pojawi się na stronie $1.",
+ "feedback-error-title": "Błąd",
"feedback-error1": "Błąd – nierozpoznana odpowiedź API",
"feedback-error2": "Błąd – edycja nieudana",
"feedback-error3": "Błąd – brak odpowiedzi API",
+ "feedback-message": "Wiadomość:",
+ "feedback-subject": "Temat",
+ "feedback-submit": "Wyślij",
+ "feedback-terms": "Rozumiem, że mój identyfikator User Agenta zawiera informacje o wersjach mojej przeglądarki i systemu operacyjnego oraz że będzie udostępniony publicznie wraz z moim komentarzem.",
+ "feedback-termsofuse": "Zgadzam się udostępnić komentarz zgodnie z warunkami korzystania.",
"feedback-thanks": "Dziękujemy! Twoja opinia została opublikowana na stronie \"[$2 $1]\".",
- "feedback-close": "Gotowe",
- "feedback-bugcheck": "Świetnie! Tylko sprawdź, czy nie jest to jeden z już [$1 znanych błędów].",
- "feedback-bugnew": "Sprawdziłam(łem). Zgłoś nowy błąd",
+ "feedback-thanks-title": "Dziękujemy!",
+ "feedback-useragent": "Aplikacja klienta:",
"searchsuggest-search": "Szukaj",
"searchsuggest-containing": "zawierające...",
"api-error-badaccess-groups": "Nie masz uprawnień aby przesyłać pliki do tej wiki.",
- "api-error-badtoken": "Błąd wewnętrzny – żeton wykorzystywany do identyfikacji użytkownika jest nieprawidłowy.",
+ "api-error-badtoken": "Błąd wewnętrzny – nieprawidłowy kod weryfikacyjny (token).",
"api-error-copyuploaddisabled": "Przesyłanie poprzez podanie adresu URL zostało na tym serwerze wyłączone.",
"api-error-duplicate": "{{PLURAL:$1|Jest już [$2 inny plik]|Są już [$2 inne pliki]}} o tej samej zawartości",
"api-error-duplicate-archive": "{{PLURAL:$1|Był już [$2 inny plik]|Były już [$2 inne pliki]}} o takiej samej zawartości, ale {{PLURAL:$1|został usunięty|zostały usunięte}}.",
@@ -3150,6 +3253,13 @@
"api-error-stashfailed": "Błąd wewnętrzny – serwer nie mógł zapisać pliku tymczasowego.",
"api-error-publishfailed": "Błąd wewnętrzny: serwer nie mógł zapisać pliku tymczasowego.",
"api-error-stasherror": "Wystąpił błąd podczas przesyłania pliku.",
+ "api-error-stashedfilenotfound": "Nie odnaleziono pliku zapasowego podczas próby jego pobrania z archiwum.",
+ "api-error-stashpathinvalid": "Ścieżka do pliku zapasowego jest błędna.",
+ "api-error-stashfilestorage": "Wystąpił błąd podczas przesyłania pliku do archiwum.",
+ "api-error-stashzerolength": "Serwer nie może zapisać pliku zapasowego do archiwum, gdyż ma on zerową długość.",
+ "api-error-stashnotloggedin": "Musisz się zalogować, aby móc zapisać plik zapasowy do archiwum.",
+ "api-error-stashwrongowner": "Plik w archiwum, do którego próbujesz uzyskać dostęp, nie należy do ciebie.",
+ "api-error-stashnosuchfilekey": "Klucz zbioru w archiwum, do którego próbujesz uzyskać dostęp, nie należy do ciebie.",
"api-error-timeout": "Serwer nie odpowiedział w oczekiwanym czasie.",
"api-error-unclassified": "Wystąpił nieznany błąd",
"api-error-unknown-code": "Błąd nieznany – „$1”",
@@ -3194,6 +3304,7 @@
"expand_templates_generate_xml": "Pokaż drzewo analizatora składni w formacie XML",
"expand_templates_generate_rawhtml": "Pokaż surowy HTML",
"expand_templates_preview": "Podgląd",
+ "expand_templates_preview_fail_html": "<em>Ponieważ {{SITENAME}} ma włączony surowy kod HTML i zaistniała strata danych z sesji, podgląd jest ukryty jako zabezpieczenie przed atakiem JavaScript.</em>\n\n<strong>Jeśli to jest próba słusznego podglądu, proszę spróbować ponownie.</strong>\nJeśli to nadal nie działa, spróbuj [[Special:UserLogout|wylogować się]] i zalogować się z powrotem.",
"pagelanguage": "Wybór języka strony",
"pagelang-name": "Strona",
"pagelang-language": "Język",
@@ -3206,7 +3317,11 @@
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|zmienił|zmieniła}} język strony $3 z „$4” na „$5”.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (włączone)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''wyłączone''')",
+ "mediastatistics": "Statystyki mediów",
+ "mediastatistics-summary": "Statystyki dotyczące przesłanych typów plików. Dotyczą one tylko najnowszej wersji pliku. Starsze lub usunięte wersje plików nie są uwzględniane.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajty|$1 bajtów}} ($2; $3%)",
"mediastatistics-table-mimetype": "Typ MIME",
+ "mediastatistics-table-extensions": "Możliwe rozszerzenia",
"mediastatistics-table-count": "Liczba plików",
"mediastatistics-table-totalbytes": "Łączny rozmiar",
"mediastatistics-header-unknown": "Nieznane",
@@ -3214,6 +3329,41 @@
"mediastatistics-header-drawing": "Rysunki (obrazy wektorowe)",
"mediastatistics-header-audio": "Audio",
"mediastatistics-header-video": "Filmy",
+ "mediastatistics-header-multimedia": "Mieszane multimedia",
+ "mediastatistics-header-office": "Biuro",
+ "mediastatistics-header-text": "Tekstowe",
"mediastatistics-header-executable": "Pliki wykonywalne",
- "mediastatistics-header-archive": "Formaty skompresowane"
+ "mediastatistics-header-archive": "Formaty skompresowane",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|końcowy przecinek został usunięty|końcowe przecinki zostały usunięte}} z JSON",
+ "json-error-unknown": "Wystąpił problem z JSON. Błąd: $1",
+ "json-error-depth": "Została przekroczona maksymalna głębokość stosu",
+ "json-error-state-mismatch": "Niewłaściwy lub nieprawidłowo sformułowany JSON",
+ "json-error-ctrl-char": "Błąd znaku control, ewentualnie błędnie zakodowane.",
+ "json-error-syntax": "Błąd składni",
+ "json-error-utf8": "Nieprawidłowe znaki UTF-8, prawdopodobnie niepoprawnie zakodowane",
+ "json-error-recursion": "Jedno lub więcej rekurencyjnych odniesień musi być zakodowane.",
+ "json-error-unsupported-type": "Podano wartość typu, która nie mogła być kodowana",
+ "headline-anchor-title": "Link do tej sekcji",
+ "special-characters-group-latin": "Łacińskie",
+ "special-characters-group-latinextended": "Łacińskie (rozszerzony)",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symbole",
+ "special-characters-group-greek": "Greckie",
+ "special-characters-group-cyrillic": "Cyrylica",
+ "special-characters-group-arabic": "Arabskie",
+ "special-characters-group-arabicextended": "Arabskie (rozszerzony)",
+ "special-characters-group-persian": "Perskie",
+ "special-characters-group-hebrew": "Hebrajskie",
+ "special-characters-group-bangla": "Bengalski",
+ "special-characters-group-tamil": "Tamilski",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Syngaleskie",
+ "special-characters-group-gujarati": "Gudźarackie",
+ "special-characters-group-devanagari": "Dewanagari",
+ "special-characters-group-thai": "Tajskie",
+ "special-characters-group-lao": "Laotańskie",
+ "special-characters-group-khmer": "Khmerskie",
+ "special-characters-title-endash": "krótka kreska",
+ "special-characters-title-emdash": "długa kreska",
+ "special-characters-title-minus": "minus"
}
diff --git a/languages/i18n/pms.json b/languages/i18n/pms.json
index 83185edc..1878fe73 100644
--- a/languages/i18n/pms.json
+++ b/languages/i18n/pms.json
@@ -42,7 +42,7 @@
"tog-shownumberswatching": "Smon-e ël nùmer d'utent che as ten-o la pàgina sot-euj",
"tog-oldsig": "Firma esistenta:",
"tog-fancysig": "Traté la firma com dël test wiki (sensa n'anliura automàtica)",
- "tog-uselivepreview": "Dovré la fonsion ''Preuva dal viv'' (sperimental)",
+ "tog-uselivepreview": "Dovré la fonsion ''Preuva dal viv''",
"tog-forceeditsummary": "Ciamé conferma se ël resumé dla modìfica a l'é veujd",
"tog-watchlisthideown": "Stërmé mie modìfiche ant la ròba che im ten-o sot-euj",
"tog-watchlisthidebots": "Stërmé le modìfiche fàite daj trigomiro ant la lista dle ròbe che im ten-o sot-euj",
@@ -230,6 +230,7 @@
"pool-queuefull": "La coa ëd travaj a l'é pien-a",
"pool-errorunknown": "Eror pa conossù",
"pool-servererror": "Ël servissi ëd conteur dl'arzerva a l'é nen disponìbil ($1).",
+ "poolcounter-usage-error": "Eror d'utilisassion: $1",
"aboutsite": "A propòsit ëd {{SITENAME}}",
"aboutpage": "Project:A propòsit",
"copyright": "Ël contnù a resta disponìbil sota $1 gavà ch'a sia marcà an n'àutra manera.",
@@ -239,6 +240,7 @@
"disclaimers": "Avertense",
"disclaimerpage": "Project:Avertense generaj",
"edithelp": "Agiut a la modìfica",
+ "helppage-top-gethelp": "Agiut",
"mainpage": "Intrada",
"mainpage-description": "Intrada",
"policy-url": "Project:Régole",
@@ -317,10 +319,13 @@
"readonly_lag": "La base ëd dat a l'é staita blocà n'automàtich antramentr che le màchine dël sircùit secondari as buto an pari con cole dël prinsipal",
"internalerror": "Eror intern",
"internalerror_info": "Eror antern: $1",
+ "internalerror-fatal-exception": "Ecession fatal ëd tipo «$1»",
"filecopyerror": "A l'é pa stàit possìbil copié l'archivi «$1» coma «$2».",
"filerenameerror": "A l'é pa podusse cangeje nòm a l'archivi «$1» an «$2».",
"filedeleteerror": "A l'é pa podusse scancelé l'archivi «$1».",
"directorycreateerror": "A l'é pa podusse creé ël dossié «$1».",
+ "directoryreadonlyerror": "Ël dossié «$1» a l'é mach an letura.",
+ "directorynotreadableerror": "Ël dossié «$1» as peul nen les-se.",
"filenotfound": "A l'é pa trovasse l'archivi «$1».",
"unexpected": "Valor che i së spetavo pa: «$1»=«$2».",
"formerror": "Eror: A l'é nen podusse mandé ël formolari.",
@@ -342,7 +347,8 @@
"viewsourcetext": "A peul vardé e copié la sorgiss dë sta pàgina:",
"viewyourtext": "A peul vëdde e copié la sorgiss ëd '''soe modìfiche''' a costa pàgina-sì:",
"protectedinterface": "Costa pàgina-sì a l'ha andrinta un cheicòs che a fa part dl'antërfacia dël programa che a deuvro tùit; donca a l'é proteta për evité che a-i rivo dle ròbe brute.\nPër gionté o modifiché dle tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
- "editinginterface": "'''Dossman!''' A l'é dapress ch'a modìfica na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. \nLe modìfiche a sta pàgina a toco l'aparensa ëd l'antërfacia utent a tuti j'utent dzora a sta wiki. \nPër gionté o cangé dle tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
+ "editinginterface": "<strong>Dossman!</strong> A l'é dapress ch'a modìfica na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. \nLe modìfiche a sta pàgina a toco l'aparensa ëd l'antërfacia utent a tuti j'utent dzora a sta wiki.",
+ "translateinterface": "Për gionté o modifiché le tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
"cascadeprotected": "Ant sta pàgina-sì as peulo pa fé ëd modìfiche, përché a-i intra ant {{PLURAL:$1|la pàgina|le pàgine}} butà sot a protession con la fonsion «a tombé» viscà ansima a: $2",
"namespaceprotected": "A l'ha nen ël përmess dë feje dle modìfiche a le pàgine dlë spassi nominal '''$1'''.",
"customcssprotected": "Ch'a varda ch'a l'ha pa ël përmess ëd modifiché sta pàgina ëd CSS, për via ch'a l'ha andrinta ij gust ëd n'àutr utent.",
@@ -399,6 +405,8 @@
"userlogin-resetlink": "A l'ha dësmentià ij sò detaj për intré ant ël sistema?",
"userlogin-resetpassword-link": "Ciav dësmentià?",
"userlogin-helplink2": "Agiut a la conession",
+ "userlogin-loggedin": "A l'é già rintrà an ël sistema tanme {{GENDER:$1|$1}}.\nCh'a deuvra ël formolari sì-sota për rintré coma n'àutr n'utent.",
+ "userlogin-createanother": "Creé n'àutr cont",
"createacct-emailrequired": "Adrëssa ëd pòsta eletrònica",
"createacct-emailoptional": "Adrëssa ëd pòsta eletrònica (opsional)",
"createacct-email-ph": "Ch'a buta soa adrëssa ëd pòsta eletrònica",
@@ -434,6 +442,7 @@
"wrongpassword": "La ciav batùa a l'é pa giusta.\nChe a preuva torna, për piasì.",
"wrongpasswordempty": "A l'ha butà na ciav veujda. Për piasì, che a preuva torna.",
"passwordtooshort": "Le ciav a devo avèj almanch {{PLURAL:$1|1 caràter|$1 caràter}}.",
+ "passwordtoolong": "Le ciav a peulo nen esse pi longhe che {{PLURAL:$1|1 caràter|$1 caràter}}.",
"password-name-match": "Soa ciav a dev esse diferenta da sò stranòm.",
"password-login-forbidden": "L'usagi ëd së stranòm d'utent e ëd sa ciav a son ëstàit proibì.",
"mailmypassword": "Riamposté la ciav",
@@ -559,10 +568,12 @@
"anoneditwarning": "<strong>Atension:<strong> A l'é nen rintrà ant ël sistema. Soa adrëssa IP a së sc-iairërà s'a fà dle modìfiche. Si chiel a <strong>[$1 rintra ant ël sistema]</strong> o <strong>[$2 a crea an cont]</strong>, soe modìfiche a saran atribuìe a sò stranòm, ansema a d'àutri vantagg.",
"anonpreviewwarning": "''A l'é nen rintrà ant ël sistema. An salvand a sarà memorisà soa adrëssa IP ant la stòria dle modìfiche ëd sa pàgina.''",
"missingsummary": "'''Nòta:''' a l'ha butà gnun resumé dla modìfica. Se a sgnaca «{{int:savearticle}}» n'àutra vira, soa modìfica a resterà salvà sensa resumé.",
+ "selfredirect": "<strong>Atension:</strong> A l'é an camin ch'a ridiression-a sa pàgina a chila-midema.\nMiraco a l'ha spessificà ël bërsaj sbalià për la ridiression, opura a l'é an camin ch'a modìfica la pàgina sbalià.\nS'a sgnaca torna ansima a «{{int:savearticle}}», la ridiression a sarà creà istess.",
"missingcommenttext": "Për piasì, che a buta un coment sì-sota.",
"missingcommentheader": "'''Ch'a arcòrda:''' A l'ha pa dàit ëd soget o d'intestassion për cost coment.\nSe a sgnaca torna «{{int:savearticle}}», soa modìfica a sarà salvà sensa gnun-a intestassion.",
"summary-preview": "Preuva dël resumé:",
"subject-preview": "Preuva dl'oget/intestassion:",
+ "previewerrortext": "A l'é rivaje n'eror durant ël tentativ ëd previsualisassion ëd soe modìfiche.",
"blockedtitle": "L'utent a l'é blocà.",
"blockedtext": "'''Sò stranòm ò pura adrëssa IP a l'é stàit blocà.'''\n\nËl blocagi a l'é stàit fàit da $1.\nComa rason a l'ha butà ''$2''.\n\n* Blocà a parte dal: $8\n* Fin al: $6\n* As veul blochesse: $7\n\nA peul butesse an contat con $1 ò pura n'àotr [[{{MediaWiki:Grouppage-sysop}}|aministrator]] për discute ëd sò blocagi.\nCh'a ten-a present ch'a podrà dovré la fonsion «mandeje un messagi ëd pòsta eletrònica a l'utent» mach s'a l'ha specificà n'adrëssa ëd vàlida ant [[Special:Preferences|sò gust]] e se sta fonsion a l'é nen ëstàita blocà 'cò chila.\nSoa adrëssa IP corenta a l'é $3, e l'identificativ dël blocagi a l'é #$5.\nPër piasì, ch'a-j buta tut e doj ant soe comunicassion ant sta question-sì.",
"autoblockedtext": "Soa adrëssa IP a l'è stàita blocà n'automàtich ën essend ch'a l'era dovrà da n'àutr utent, che a l'é stàit blocà da $1.\nLa rason ësmonùa a l'é\n\n:''$2''\n\n* Ël blocagi a part dai: $8\n* A va a la fin ai: $6\n* As veul blochesse: $7\n\nA peul contaté $1 ò pura n'àotr dj'[[{{MediaWiki:Grouppage-sysop}}|aministrator]] për discute d'ës blocagi.\n\nCh'a varda mach ch'a peul nen dovré l'opsion ëd «mandeje un mëssagi a l'utent» se a l'ha nen n'adrëssa ëd pòsta eletrònica vàlida registrà ant [[Special:Preferences|sò gust]] o se chiel a l'é stàit blocà ëdcò dal dovrela.\n\nSoa adrëssa IP corenta a l'é $3, e sò nùmer ëd blocagi a l'é $5.\nPër piasì, ch'a buta sempe tùit ij detaj an tute j'arceste ch'a farà.",
@@ -657,6 +668,10 @@
"content-model-text": "mach test",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Oget veuid",
+ "content-json-empty-array": "Tàula veuida",
+ "duplicate-args-category": "Pàgine ch'a deuvro d'argoment dobi ant j'arceste dë stamp",
+ "duplicate-args-category-desc": "La pàgina a conten cj'arceste dë stamp che deuvro ëd duplicà d'argoment, tanme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Atension:''' Costa pàgina a l'ha tròpe ciamà costose a le fonsions d'anàlisi sintàtica.\n\nA dovrìa essnie men che {{PLURAL:$2|$2}}, adess a-i na j'é {{PLURAL:$1|$1}}.",
"expensive-parserfunction-category": "Pàgine con tròpe ciamà costose ëd fonsion ëd l'analisator sintàtich",
"post-expand-template-inclusion-warning": "'''Atension:''' La dimension dj'anseriment dë stamp a l'é tròp gròssa.\nChèich stamp a saran nen anserì.",
@@ -711,7 +726,7 @@
"history-feed-empty": "La pàgina che a l'ha ciamà a-i é pa; a podrìa esse stàita scancelà da 'nt ël sit, ò pura tramudà a n'àutr nòm.\n\nChe a verìfica con la [[Special:Search|pàgina d'arserca]] se a-i fusso mai dj'àutre pàgine che a podèisso andeje bin.",
"rev-deleted-comment": "(resumé dla modìfica gavà)",
"rev-deleted-user": "(stranòm gavà)",
- "rev-deleted-event": "(assion dël registr gavà)",
+ "rev-deleted-event": "(detaj dël registr gavà)",
"rev-deleted-user-contribs": "[nòm utent o adrëssa IP gavà - modìfica stërmà ai contributor]",
"rev-deleted-text-permission": "Sta revision-sì dla pàgina a l'é staita '''scancelà'''.\nA-i peulo essnie dle marche ant ël [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registr ëd jë scancelament].",
"rev-suppressed-text-permission": "Costa revision dla pàgina-sì a l'é stàita <stong>gavà via<strong>.\nIj detaj as treuvo ant ël [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registr ëd jë scancelament].",
@@ -745,7 +760,7 @@
"revdelete-legend": "But-je coste limitassion-sì a le version scancelà:",
"revdelete-hide-text": "Test dla revision",
"revdelete-hide-image": "Stërma ël contnù dl'archivi",
- "revdelete-hide-name": "Stërma assion e oget",
+ "revdelete-hide-name": "Stërmé ël bërsaj e ij paràmeter",
"revdelete-hide-comment": "Resumé dla modìfica",
"revdelete-hide-user": "Stranòm/adrëssa IP dl'utent",
"revdelete-hide-restricted": "Stërmé j'anformassion a j'aministrator tan-me a j'àutri",
@@ -799,7 +814,6 @@
"mergehistory-same-destination": "La pagina ëd partensa e cola d'ariv a peulo nen esse le mideme",
"mergehistory-reason": "Rason:",
"mergelog": "Registr dj'union",
- "pagemerge-logentry": "a l'ha butà [[$1]] ansema a [[$2]] (revision fin-a a la $3)",
"revertmerge": "Gavé da ansema",
"mergelogpagetext": "Ambelessì sota a-i é na lista dj'ùltime vire che la stòria ëd na pàgina a l'é stàita butà ansema a cola 'd n'àutra.",
"history-title": "$1: Cronologìa dle modìfiche",
@@ -822,6 +836,8 @@
"notextmatches": "La vos che a l'ha ciamà a l'é pa trovasse antrames aj test dj'artìcoj",
"prevn": "ij {{PLURAL:$1|$1}} prima",
"nextn": "ij {{PLURAL:$1|$1}} peuj",
+ "prev-page": "pàgina andré",
+ "next-page": "pàgina anans",
"prevn-title": "$1 {{PLURAL:$1|arzultà|arzultà}} prima",
"nextn-title": "$1 {{PLURAL:$1|arzultà|arzultà}} apress",
"shown-title": "Smon-e $1 {{PLURAL:$1|arzultà|arzultà}} për pàgina",
@@ -840,6 +856,7 @@
"search-result-category-size": "{{PLURAL:$1|1 mèmber|$1 mèmber}} ({{PLURAL:$2|1 sot-categorìa|$2 sot-categorìe}}, {{PLURAL:$3|1 archivi|$3 archivi}})",
"search-redirect": "(ridiression $1)",
"search-section": "(session $1)",
+ "search-category": "(categorìa $1)",
"search-file-match": "(a corëspond al contnù d'archivi)",
"search-suggest": "Vorìi-lo pa dì: $1",
"search-interwiki-caption": "Proget frej",
@@ -873,6 +890,11 @@
"prefs-personal": "Profil dl'utent",
"prefs-rc": "Ùltime modìfiche",
"prefs-watchlist": "Ròba che as ten sot euj",
+ "prefs-editwatchlist": "Modifiché la lista ëd lòn ch'as ten sot-euj",
+ "prefs-editwatchlist-label": "Modifiché dle vos ëd la lista ëd lòn ch'as ten sot-euj:",
+ "prefs-editwatchlist-edit": "Vëdde e gavé dle vos ëd la lista ëd lòn ch'as ten sot-euj",
+ "prefs-editwatchlist-raw": "Modìfica lesta ëd la lista ëd lòn ch'as ten sot-euj",
+ "prefs-editwatchlist-clear": "Dësvujdé la lista ëd lòn ch'as ten sot-euj",
"prefs-watchlist-days": "Vàire dì che a veul ës-ciairé an soa lista ëd lòn che as ten sot euj:",
"prefs-watchlist-days-max": "Al pì $1 {{PLURAL:$1|di|di}}",
"prefs-watchlist-edits": "Vàire modìfiche che a veul ës-ciairé con le funsion avansà:",
@@ -944,7 +966,7 @@
"gender-female": "Chila a modìfica dle pàgine dla wiki",
"prefs-help-gender": "Definì coste preferense a l'é opsional.\nËl programa a deuvra sò valor për adressesse a chiel e massionelo a j'àutri an dovrand ël géner gramatical giust.\nCosta anformassion a sarà pùblica.",
"email": "Pòsta eletrònica",
- "prefs-help-realname": "* Nòm vèir (opsional): se i sërne da butelo ambelessì a sarà dovrà për deve mérit ëd vòstr travaj.",
+ "prefs-help-realname": "Ël nòm ver a l'é opsional).\nSe a l'é butà, a podrà esse dovrà për deje mérit ëd sò travaj.",
"prefs-help-email": "L'adrëssa ëd pòsta eletrònica a l'é opsional, ma a-i n'a j'é dabzògn për torna amposté la ciav, s'a dovèissa dësmentié soa ciav.",
"prefs-help-email-others": "A peul ëdcò serne ëd lassé che j'àutri a lo contato a travers soa pàgina utent o ëd ciaciarada sensa ch'a-i sia da manca d'arvelé soa identità.",
"prefs-help-email-required": "A-i va l'adrëssa ëd pòsta eletrònica.",
@@ -965,6 +987,7 @@
"prefs-tokenwatchlist": "Geton",
"prefs-diffs": "Diferense",
"prefs-help-prefershttps": "Costa preferensa a ancaminrà a marcé a soa pròssima conession.",
+ "prefswarning-warning": "A l'ha fàit dle modìfiche ai sò gust ch'a son ancor nen ëstàire argistrà.\nS'a chita sa pàgina sensa sgnaché «$1» ij sò gust a saran pa agiorné.",
"prefs-tabs-navigation-hint": "Astussia: A peul dovré le flece a snistra e a drita për navighé antra le schede ant la lista dle schede.",
"email-address-validity-valid": "A smija bon",
"email-address-validity-invalid": "A-i é da manca ëd n'adrëssa bon-a!",
@@ -1051,6 +1074,7 @@
"right-protect": "Cambié ij livej ëd protession e modifiché le pàgine protegiùe an cascada",
"right-editprotected": "Modifiché le pàgine protegiùe con «{{int:protect-level-sysop}}»",
"right-editsemiprotected": "Modifiché le pàgine protegiùe con «{{int:protect-level-autoconfirmed}}»",
+ "right-editcontentmodel": "Modifiché ël model ëd contnù ëd na pàgina",
"right-editinterface": "Modifiché l'antërfacia utent",
"right-editusercssjs": "Modifiché j'archivi CSS e JavaScript d'àutri utent",
"right-editusercss": "Modifiché j'archivi CSS d'àutri utent",
@@ -1078,6 +1102,7 @@
"right-override-export-depth": "Esporté le pàgine ancludend le pàgine colegà fin-a a na profondeur ëd 5",
"right-sendemail": "Mandé un mëssagi an pòsta eletrònica a j'àutri utent",
"right-passwordreset": "Vëdde ij mëssagi ëd pòsta eletrònica ëd riampostassion dle ciav",
+ "right-managechangetags": "Creé e dëscancelé dle [[Special:Tags|tichëtte]] da la base ëd dàit",
"newuserlogpage": "Registr dla creassion dj'utent",
"newuserlogpagetext": "Sossì a l'é un registr andova ch'as marco le creassion dj'utent.",
"rightslog": "Argistr dij drit ëd j'utent",
@@ -1123,6 +1148,8 @@
"action-viewmywatchlist": "vëdde la lista ëd la ròba ch'as ten sot-euj",
"action-viewmyprivateinfo": "vëdde soe anformassion përsonaj",
"action-editmyprivateinfo": "modifiché soe anformassion përsonaj",
+ "action-editcontentmodel": "modifiché ël model ëd contnù ëd na pàgina",
+ "action-managechangetags": "creé e dëscancelé dle tichëtte da la base ëd dàit",
"nchanges": "$1 {{PLURAL:$1|modìfica|modìfiche}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|da l'ùltima visita}}",
"enhancedrc-history": "stòria",
@@ -1193,9 +1220,9 @@
"uploaderror": "Eror dëmentré che as cariava",
"upload-recreate-warning": "'''Atension: n'archivi con col nòm a l'é già stàit ëscancelà o tramudà.'''\n\nËl registr dle scancelassion e dij tramud për sta pàgina a l'é butà ambelessì për comodità:",
"uploadtext": "Dovra ël formolari sì-sota për carié dj'archivi.\nPër vardé ò sërché dle figure già carià, ch'a vada an sla [[Special:FileList|lista dle figure]], ij (ri)càrich a son ëdcò registrà ant ël [[Special:Log/upload|registr dij càrich]], jë scancelament ant ël [[Special:Log/delete|registr djë scancelament]].\n\nPër buté na figura ant n'artìcol, dovré n'anliura ant un-a dle forme sì sota:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' për dovré la version pien-a dla figura\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' për dovré na dimension ëd 200 pontin ant un quàder a la bordura snistra con 'alt text' com descrission\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' për coleghé diretament la figura sensa fé vëdde l'archivi",
- "upload-permitted": "Sòrt d'archivi consentìe: $1.",
- "upload-preferred": "Sòrt d'archivi preferìe: $1.",
- "upload-prohibited": "Sòrt d'archivi proibìe: $1.",
+ "upload-permitted": "Sòrt d'archivi {{PLURAL:$2|consentìa|consentìe}}: $1.",
+ "upload-preferred": "Sòrt d'archivi {{PLURAL:$2|preferì|preferìe}}: $1.",
+ "upload-prohibited": "Sòrt d'archivi {{PLURAL:$2:proibì|proibìe}}: $1.",
"uploadlogpage": "Registr dij càrich",
"uploadlogpagetext": "Ambelessì-sota a-i é na lista dj'ùltim archivi carià.\nBeiché la [[Special:NewFiles|galarìa dj'archivi neuv]] për na presentassion pì visual.",
"filename": "Nòm dl'archivi",
@@ -1454,7 +1481,6 @@
"statistics": "Statìstiche",
"statistics-header-pages": "Statìstiche dla pàgina",
"statistics-header-edits": "Statìstiche dle modìfiche",
- "statistics-header-views": "Statìstiche dle visualisassion",
"statistics-header-users": "Statìstiche ëd {{SITENAME}}",
"statistics-header-hooks": "Àutre statìstiche",
"statistics-articles": "Pàgine ëd contnù",
@@ -1463,13 +1489,9 @@
"statistics-files": "Archivi carià",
"statistics-edits": "Pàgine modificà da quand ël {{SITENAME}} a l'é stàit tirà su",
"statistics-edits-average": "Media dle modìfiche për pàgina",
- "statistics-views-total": "Total dle visualisassion",
- "statistics-views-total-desc": "Le visualisassion ëd le pàgine pa esistente e ëd le pàgine speciaj a son nen comprèise",
- "statistics-views-peredit": "Visualisassion për modìfica",
"statistics-users": "[[Special:ListUsers|Utent]] argistrà",
"statistics-users-active": "Utent ativ",
"statistics-users-active-desc": "Utent che a l'han fàit n'assion ant {{PLURAL:$1|l'ùltim di|j'ùltim $1 di}}",
- "statistics-mostpopular": "Pàgine ch'a 'ncontro dë pì",
"pageswithprop": "Pàgine con na propietà ëd pàgina",
"pageswithprop-legend": "Pàgine con na propietà ëd pàgina",
"pageswithprop-text": "Costa pàgina a lista le pàgine ch'a deuvro na propietà 'd pàgina particolar.",
@@ -1510,9 +1532,9 @@
"uncategorizedtemplates": "Stamp sensa pa 'd categorìe",
"unusedcategories": "Categorìe nen dovrà",
"unusedimages": "Figure nen dovrà",
- "popularpages": "Pàgine pì s-ciairà",
"wantedcategories": "Categorìe dont a fa da manca",
"wantedpages": "Artìcoj pì ciamà",
+ "wantedpages-summary": "Lista ëd pàgine nen esistente con ël pi grand nùmer ëd liure vers ëd lor, gavà le pàgine vers le quaj a ponto mach dle ridiression. Për na lista dle pàgine nen esistente a le quaj a ponto dle ridiression, vëdde [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Tìtol nen vàlid ant l'ansema dj'arzultà: $1",
"wantedfiles": "Archivi pì ciamà",
"wantedfiletext-cat": "J'archivi ch'a ven-o a son dovrà ma a esisto pa. J'archivi dai sò depòsit estern a peulo esse listà sensa consideré l'esistensa. Chèich fàuss positiv a saran <del>sganfà</del>. An pi, le pàgine ch'a conten-o dj'archivi ch'a esisto pa a son listà an [[:$1]].",
@@ -1572,9 +1594,11 @@
"pager-older-n": "{{PLURAL:$1|1|$1}} pì vej",
"suppress": "Supervisor",
"querypage-disabled": "Sta pàgina special a l'é disabilità për dle rason ëd prestassion.",
+ "apihelp": "Agiut ëd l'API",
+ "apihelp-no-such-module": "Ël mòdol «$1» as treuva nen.",
"booksources": "Andoa trové dij lìber",
"booksources-search-legend": "Sërché antra ij lìber d'arferiment",
- "booksources-go": "Andé",
+ "booksources-search": "Arserché",
"booksources-text": "Ambelessì sota a-i é na lista d'àotri sit che a vendo dij lìber neuv e dë sconda man, e che a peulo ëdcò smon-e dj'anformassion rësgoard ai test che a l'é antramentr che a sërca:",
"booksources-invalid-isbn": "L'ISBN dàit a smija che a sia pa vàlid; ch'a contròla s'a-i é n'eror an copiand da la sorgiss original.",
"specialloguserlabel": "Esecutor:",
@@ -1710,7 +1734,7 @@
"wlheader-enotif": "La notìfica për pòsta eletrònica a l'é abilità.",
"wlheader-showupdated": "Le pàgine che a son ëstàite modificà da quand che a l'é passaje ansima l'ùltima vira a resto marcà an '''grassèt'''",
"wlnote": "Ambelessì sota a-i {{PLURAL:$1|é l'ùltima modìfica|son j'ùltime <strong>$1</strong> modìfiche}} ant {{PLURAL:$2|l'ùltima ora|j'ùltime <strong>$2</strong> ore}}, a parte da $3, $4.",
- "wlshowlast": "Smon-e j'ùltime $1 ore $2 dì $3",
+ "wlshowlast": "Smon-e j'ùltime $1 ore $2 di",
"watchlist-options": "Opsion ëd la lista dla ròba ch'as ten sot-euj",
"watching": "Sot-euj...",
"unwatching": "Ën gavand da lòn ch'as ten sot-euj...",
@@ -1759,7 +1783,6 @@
"deleteprotected": "A peul nen ëscancelé costa pàgina përchè a l'é proteta.",
"deleting-backlinks-warning": "'''Avis:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|D'àutre pàgine]] a l'han na liura o a transcludo la pàgina che chiel a veul ëscancelé.",
"rollback": "Gavé via le modìfiche",
- "rollback_short": "Ripristiné",
"rollbacklink": "ripristiné j'archivi",
"rollbacklinkcount": "tiré andré $1 {{PLURAL:$1|modìfica|modìfiche}}",
"rollbacklinkcount-morethan": "tiré andré pi che $1 {{PLURAL:$1|modìfica|modìfiche}}",
@@ -1809,6 +1832,7 @@
"protect-othertime": "N'àutra durà:",
"protect-othertime-op": "N'àutra durà",
"protect-existing-expiry": "Scadensa esistenta:$3, $2",
+ "protect-existing-expiry-infinity": "Durà: infinìa",
"protect-otherreason": "Rason àutra/adissional:",
"protect-otherreason-op": "Àutra rason",
"protect-dropdown": "*Rason comun-e ëd protession\n** Tròp vandalism\n** Tròpa rumenta\n** Guère ëd modìfiche danose\n** Pàgina con motobin ëd tràfich",
@@ -1868,6 +1892,7 @@
"namespace": "Spassi nominal:",
"invert": "Anvertì la selession",
"tooltip-invert": "Ch'a selession-a sta casela për stërmé le modìfiche a le pàgine ant lë spassi nominal selessionà (e ant lë spassi nominal associà se selessionà)",
+ "tooltip-whatlinkshere-invert": "Ch'a selession-a sa casela për ëstërmé le liure dle pàgine ant lë spassi nominal selessionà.",
"namespace_association": "Spassi nominal associà",
"tooltip-namespace_association": "Ch'a selession-a sta casela për anserì ëdcò la discussion o lë spassi nominal dël soget associà a lë spassi nomina selessionà",
"blanknamespace": "(Prinsipal)",
@@ -2132,14 +2157,15 @@
"thumbnail-temp-create": "Pa bon a creé l'archivi ëd miniadura temporania",
"thumbnail-dest-create": "Pa bon a salvé na miniadura sla destinassion",
"thumbnail_invalid_params": "Paràmetro dla figurin-a pa giust",
+ "thumbnail_toobigimagearea": "Archivi con dimension pi granda che $1",
"thumbnail_dest_directory": "As peul pa fesse ël dossié ëd destinassion",
"thumbnail_image-type": "Sòrt ëd figura nen gestì",
"thumbnail_gd-library": "Configurassion incompleta dla biblioteca GD: Fonsion $1 mancanta",
"thumbnail_image-missing": "L'archivi a smija ch'a manca: $1",
"thumbnail_image-failure-limit": "A-i son ëstaje ëd recent tròpi tentativ falì ($1 o pi) ëd rende costa plancia. Për piasì, ch'a preuva torna pi tard.",
"import": "Amportassion ëd pàgine",
- "importinterwiki": "Amportassion da wiki diferente",
- "import-interwiki-text": "Che a selession-a na wiki e ël tìtol dla pàgina da amporté.\nDate dle revision e stranòm dj'editor a resteran piàjit sù 'cò lor.\nTute j'amportassion antra wiki diferente a resto marcà ant ël [[Special:Log/import|Registr dj'amportassion]].",
+ "importinterwiki": "Amportassion da n'àutra wiki",
+ "import-interwiki-text": "Che a selession-a na wiki e ël tìtol dla pàgina da amporté.\nDate dle revision e stranòm dj'editor a resteran piàjit sù 'cò lor.\nTute j'amportassion da d'àutre wiki a resto marcà ant ël [[Special:Log/import|Registr dj'amportassion]].",
"import-interwiki-sourcewiki": "Wiki sorgiss:",
"import-interwiki-sourcepage": "Pàgina sorgiss:",
"import-interwiki-history": "Copié tute le revision ëd la stòria ëd costa pàgina",
@@ -2159,7 +2185,7 @@
"importcantopen": "L'archivi da amporté a l'é pa podusse deurbe",
"importbadinterwiki": "Liura antra wiki diferente cioca",
"importsuccess": "Amportassion finìa!",
- "importnosources": "A l'é pa stàita definìa gnun-a sorgiss d'amportassion da na wiki diferenta, e carié mach le stòrie as peul nen.",
+ "importnosources": "A l'é stàita definìa gnun-a wiki da la qual amporté, e carié mach le stòrie as peul nen.",
"importnofile": "Pa gnun archivi d'amportassion carià.",
"importuploaderrorsize": "A l'é falìe la caria dl'archivi d'amporté. L'archivi a resta pì gròss che lòn ch'as peul cariesse.",
"importuploaderrorpartial": "A l'é falìe la caria dl'archivi d'amporté. L'archivi a resta carià mach për un tòch.",
@@ -2172,10 +2198,10 @@
"import-token-mismatch": "Pèrdita dij dat ëd session.\nPër piasì, ch'a preuva torna.",
"import-invalid-interwiki": "As peul pa amportesse da la wiki spessificà.",
"import-error-edit": "La pàgina «$1» a l'era pa stàita amportà përchè chiel a peul pa modifichela.",
- "import-error-create": "La pàgina «$1» a l'é pa stàita amportà përchè chiel a peul pa creela.",
- "import-error-interwiki": "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é arzervà për na liura esterna (antërwiki).",
- "import-error-special": "La pàgina «$1» a l'é pa amportà përchè a ponta a në spassi nominal ch'a përmët pa dle pàgine.",
- "import-error-invalid": "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é pa bon.",
+ "import-error-create": "La pàgina «$1» a l'era pa stàita amportà përchè chiel a peul pa creela.",
+ "import-error-interwiki": "La pàgina «$1» a l'era pa stàita amportà përchè sò nòm a l'é arzervà për na liura esterna (antërwiki).",
+ "import-error-special": "La pàgina «$1» a l'era pa amportà përchè a aparten a në spassi nominal ch'a përmët pa dle pàgine.",
+ "import-error-invalid": "La pàgina «$1» a l'é pa stàita amportà përchè ël nòm sota 'l qual a sarìa stàita amportà a va nen bin su costa wiki.",
"import-error-unserialize": "La revision $2 dla pagina «$1» a peul pa esse desserialisà. La revision a l'era arportà përchè a deuvra ël model ëd contnù $3 serialisà com $4.",
"import-error-bad-location": "La revision $2, ch'a deuvra ël model ëd contnù $3 a peul nen esse guernà su «$1» su costa wiki, dagià che col model a l'é nen mantnù su cola pàgina.",
"import-options-wrong": "{{PLURAL:$2|Opsion|Opsion}} sbalià: <nowiki>$1</nowiki>",
@@ -2183,18 +2209,15 @@
"import-rootpage-nosubpage": "Lë spassi nominal «$1» ëd la pàgina prinsipal a përmët pa dle sot-pagine.",
"importlogpage": "Registr dj'amportassion",
"importlogpagetext": "Amportassion aministrative ëd pàgine e ëd soa stòria da dj'àutre wiki.",
- "import-logentry-upload": "a l'ha amportà [[$1]] con un càrich d'archivi",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision|revision}}",
- "import-logentry-interwiki": "Amportà da n'àutra wiki $1",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision|revision}} da $2",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision}} amportà",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision}} amportà da $2",
"javascripttest": "Preuva ëd JavaScript",
- "javascripttest-title": "Fé dle preuve $1",
"javascripttest-pagetext-noframework": "Costa pàgina a l'é arservà për fé dle preuve JavaScript.",
"javascripttest-pagetext-unknownframework": "Strutura ëd preuva pa conossùa «$1».",
+ "javascripttest-pagetext-unknownaction": "Assion nen conossùa «$1».",
"javascripttest-pagetext-frameworks": "Për piasì, ch'a serna un-a dle struture ëd preuva sì-dapress: $1",
"javascripttest-pagetext-skins": "Ch'a serna na pel për fé le preuve:",
"javascripttest-qunit-intro": "Vëdde [$1 la documentassion dle preuve] dzora a mediawiki.org.",
- "javascripttest-qunit-heading": "Sequensa ëd preuve QUnit ëd JavaScript su MediaWiki",
"tooltip-pt-userpage": "Soa pàgina utent",
"tooltip-pt-anonuserpage": "La pàgina utent për l'IP con ël qual chiel a contribuiss",
"tooltip-pt-mytalk": "Soa pàgina ëd discussion e ciaciarade",
@@ -2204,6 +2227,7 @@
"tooltip-pt-mycontris": "Lista ëd soe contribussion",
"tooltip-pt-login": "Un a l'é nen obligà a rintré ant al sistema, ma se a lo fa a l'é mej",
"tooltip-pt-logout": "Seurte da",
+ "tooltip-pt-createaccount": "I-j consejoma ëd creé un cont e ëd rintré ant ël sistema; però a l'é nen obligatòri",
"tooltip-ca-talk": "Discussion ansima a sta pàgina ëd contnù.",
"tooltip-ca-edit": "A peul modifiché sa pàgina-sì. Për piasì, che as fasa na preuva anans che salvé.",
"tooltip-ca-addsection": "Ancaminé na neuva session",
@@ -2233,6 +2257,7 @@
"tooltip-feed-atom": "Fluss Atom për costa pàgina.",
"tooltip-t-contributions": "Vardé la lista dle contribussion ëd cost utent",
"tooltip-t-emailuser": "Mandeje un mëssagi ëd pòsta a st'utent",
+ "tooltip-t-info": "Pi d'anformassio su costa pàgina",
"tooltip-t-upload": "Carié n'archivi ëd figure ò son.",
"tooltip-t-specialpages": "Lista ëd tute le pàgine speciaj.",
"tooltip-t-print": "Version bon-a da stampé dë sta pàgina",
@@ -2296,7 +2321,6 @@
"pageinfo-robot-policy": "Indicisassion con robò",
"pageinfo-robot-index": "Autorisà",
"pageinfo-robot-noindex": "Vietà",
- "pageinfo-views": "Nùmer ëd vìsite",
"pageinfo-watchers": "Vàire utent ch'a ten-o sot-euj la pàgina",
"pageinfo-few-watchers": "Men ëd $1 {{PLURAL:$1|osservator}}",
"pageinfo-redirects-name": "Nùmer ëd ridiression vers costa pàgina-sì",
@@ -2376,6 +2400,7 @@
"newimages-summary": "Sta pàgina special-sì a la smon j'ùltim archivi carià.",
"newimages-legend": "Filtror",
"newimages-label": "Nòm ëd l'archivi (o na soa part):",
+ "newimages-showbots": "Smon-e j'amportassion dij trigomiro",
"noimages": "Pa gnente da vëdde.",
"ilsubmit": "Arserché",
"bydate": "për data",
@@ -2750,7 +2775,6 @@
"exif-urgency-low": "Bassa ($1)",
"exif-urgency-high": "Àuta ($1)",
"exif-urgency-other": "Priorità definìa da l'utent ($1)",
- "watchlistall2": "tute",
"namespacesall": "tùit",
"monthsall": "tuti",
"confirmemail": "Confermé l'adrëssa postal",
@@ -2808,6 +2832,7 @@
"autosumm-replace": "Pàgina cambià con '$1'",
"autoredircomment": "Ridiression anvers a [[$1]]",
"autosumm-new": "Creà la pàgina con '$1'",
+ "autosumm-newblank": "Pàgina veuida creà",
"size-bytes": "$1 Byte",
"size-kilobytes": "$1 KByte",
"size-megabytes": "$1 MByte",
@@ -2827,6 +2852,15 @@
"watchlistedit-raw-done": "La lista ëd lòn ch'as ten sot-euj a l'é stàita agiornà.",
"watchlistedit-raw-added": "{{PLURAL:$1|A l'é|As son}} giontasse {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|A l'é|As son}} gavasse via {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
+ "watchlistedit-clear-title": "Lista dla ròba ch'as ten sot-euj dësvujdà.",
+ "watchlistedit-clear-legend": "Scancelé la lista dla ròba ch'as ten sot-euj",
+ "watchlistedit-clear-explain": "Tuti ij tìtoj a saran ësganfà da la lista dla ròba che as ten sot-euj",
+ "watchlistedit-clear-titles": "Tìtoj:",
+ "watchlistedit-clear-submit": "Scancelé la lista dla ròba ch'as ten sot-euj (sossì a l'é definitiv!)",
+ "watchlistedit-clear-done": "La lista ëd lòn ch'as ten sot-euj a l'é stàita scancelà.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|A l'é|As son}} gavasse via {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
+ "watchlistedit-too-many": "A-i é tròpe pàgine da smon-e ambelessì.",
+ "watchlisttools-clear": "Scancelé la lista dla ròba ch'as ten sot-euj",
"watchlisttools-view": "S-ciairé le modifiché amportante",
"watchlisttools-edit": "Vardé e modifiché la lista ëd lòn ch'as ten sot-euj",
"watchlisttools-raw": "Modifiché ampressa la lista ëd lòn ch'as ten sot-euj",
@@ -2843,11 +2877,12 @@
"iranian-calendar-m11": "Mèis Jalāli ch'a fa óndes",
"iranian-calendar-m12": "Meis Jalāli ch'a fa dódes",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ciaciarade]])",
- "unknown_extension_tag": "Tichëtta d'estension «$1» pa conossùa",
"duplicate-defaultsort": "'''Atension:''' La ciav d'ordinament ëstàndard «$2» a pija ël pòst ëd cola ëd prima «$1».",
+ "duplicate-displaytitle": "<strong>Warning:</strong> ël tìtol ëd visualisassion «$2» a rampiassa ëd vej tìtol ëd visualisassion «$1».",
+ "invalid-indicator-name": "<strong>Eror:</strong> l'atribù <code>name</code> dj'andicator dlë statù dla pàgina a peul nen esse veuid.",
"version": "Version",
"version-extensions": "Estension anstalà",
- "version-skins": "Pej",
+ "version-skins": "Pel anstalà",
"version-specialpages": "Pàgine speciaj",
"version-parserhooks": "Gancio dël dëscompositor",
"version-variables": "Variàbij",
@@ -2860,9 +2895,11 @@
"version-hook-name": "Nòm dël gancio",
"version-hook-subscribedby": "A son scrivusse",
"version-version": "($1)",
+ "version-no-ext-name": "[gnun nòm]",
"version-license": "Licensa MediaWiki",
"version-ext-license": "Licensa",
"version-ext-colheader-name": "Estension",
+ "version-skin-colheader-name": "Pel",
"version-ext-colheader-version": "Version",
"version-ext-colheader-license": "Licensa",
"version-ext-colheader-description": "Descrission",
@@ -2883,6 +2920,9 @@
"version-entrypoints-header-entrypoint": "Pont d'intrada",
"version-entrypoints-header-url": "Adrëssa an sl'aragnà",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Senté d'artìcol]",
+ "version-libraries": "Biblioteche anstalà",
+ "version-libraries-library": "Biblioteca",
+ "version-libraries-version": "Version",
"redirect": "Ridirigiù da archivi, utent, pàgina o ID ëd revision",
"redirect-legend": "Ridirige a n'archivi o na pàgina",
"redirect-summary": "Costa pàgina special a ponta a n'archivi (dàit ël nòm dl'archivi), na pàgina (dàit n'ID ëd revision o n'ID ëd pàgina) o na pàgina d'utent (dàit n'identificativ numérich a l'utent). Usagi: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
@@ -2918,6 +2958,7 @@
"specialpages-group-wiki": "Dat e utiss",
"specialpages-group-redirects": "Pàgine speciaj ëd ridiression",
"specialpages-group-spam": "Utiss contra la rumenta",
+ "specialpages-group-developer": "Utiss dël dësvlupador",
"blankpage": "Pàgina bianca",
"intentionallyblankpage": "Costa pàgina a l'é lassà veuida a pòsta.",
"external_image_whitelist": " #Lassé costa riga-sì pròpi 'me ch'a l'é<pre>\n#Buté ij fragment d'espression regolar (mach la part che a va antra le //) sì-sota\n#Coste-sì a saran confrontà con le liure dle figure esterne\n#Cole che as cobio a saran visualisà com figure, dësnò a sarà mach mostrà na liura a la figura\n#Le linie che a ancamin-o con # a saran tratà com coment\n#La lista a l'é indiferenta a minùscol o majùscol\n\n#Buté tùit ij fragment d'espression regolar sota sta linia-sì. Lassé costa linia pròpi com a l'é</pre>",
@@ -2930,12 +2971,54 @@
"tags-tag": "Nòm ëd la tichëtta",
"tags-display-header": "Aparensa ant la lista dle modìfiche",
"tags-description-header": "Descrission completa dël significà",
+ "tags-source-header": "Sorgiss",
"tags-active-header": "Ativ?",
"tags-hitcount-header": "Modìfiche con tichëtta",
+ "tags-actions-header": "Assion",
"tags-active-yes": "Bò",
"tags-active-no": "Nò",
+ "tags-source-extension": "Definì da n'estension",
+ "tags-source-manual": "Aplicà a man da utent e trigomiro",
+ "tags-source-none": "Pi nen dovrà",
"tags-edit": "modifiché",
+ "tags-delete": "dëscancelé",
+ "tags-activate": "ativé",
+ "tags-deactivate": "disativé",
"tags-hitcount": "$1 {{PLURAL:$1|cambiament|cambiament}}",
+ "tags-manage-no-permission": "A l'ha nen ël përmess ëd gestì le modìfiche dle tichëtte.",
+ "tags-create-heading": "Creé na neuva tichëtta",
+ "tags-create-explanation": "Për sòlit, le neuve tichëtte creà a saran disponìbij për esse dovrà da j'utent e dai trigomiro.",
+ "tags-create-tag-name": "Nòm ëd la tichëtta",
+ "tags-create-reason": "Rason:",
+ "tags-create-submit": "Creé",
+ "tags-create-no-name": "A dev spessifiché un nòm ëd tichëtta.",
+ "tags-create-invalid-chars": "Ij nòm ëd tichëtta a devo nen conten-e ëd còme (<code>,</code>) nì ëd bare anans (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Ij nòm ëd tichëtta a devo nen conten-e dij caràter ch'a peulo nen esse dovrà ant ij tìtok dle pàgine.",
+ "tags-create-already-exists": "La tichëtta «$1» a esist già.",
+ "tags-create-warnings-above": "{{PLURAL:$2|L'avertensa|J'avertense}} sì-dapress a son ëstàite rancontrà durant ël tentativ ëd creassion ëd la tichëtta «$1»:",
+ "tags-create-warnings-below": "Veul-lo andé anans ant la creassion dla tichëtta?",
+ "tags-delete-title": "Dëscancelé la tichëtta",
+ "tags-delete-explanation-initial": "A l'é a brus ëd dëscancelé la tichëtta «$1» da la base ëd dàit.",
+ "tags-delete-explanation-in-use": "A sarà gavà da {{PLURAL:$2|$2 revision|tute le $2 revisions}} o vos d'argistr a la quaj a l'é atualman aplicà.",
+ "tags-delete-explanation-warning": "Costa assion a l'é <strong>ireversìbij</strong> e <strong>a peul nen esse anulà</strong>, gnanca da l'aministrator ëd base ëd dàit. Ch'a sia sigur che costa a l'é la tichëtta ch'a veul eliminé.",
+ "tags-delete-explanation-active": "<strong>La tichëtta «$1» a l'é ancor ativa, e a seghitrà a esse aplicà ant l'avnì.</strong> Për fé chité sòn, ch'a vada ant ij pòst andoa la tichëtta a l'é aplicà, e ch'a la disativa ambelelà.",
+ "tags-delete-reason": "Rason:",
+ "tags-delete-submit": "Eliminé costa tichëtta ëd fasson ireversìbil",
+ "tags-delete-not-allowed": "Le tichëtte definìe da n'estension a peulo nen esse dëscancelà, gavà che l'estension a lo permëtta ëd fasson esplìssita.",
+ "tags-delete-not-found": "La tichëtta «$1» a esist pa.",
+ "tags-delete-too-many-uses": "La tichëtta «$1» a l'é aplicà a pi che $2 {{PLURAL:$2|revision}}, lòn ch'a veul dì ch'a peul nen esse eliminà.",
+ "tags-delete-warnings-after-delete": "La tichëtta «$1» a l'é stàita eliminà për da bin, ma {{PLURAL:$2|a l'é rancontrasse l'|as son rancontrasse j'}}avis sì-dapress:",
+ "tags-activate-title": "Ativé la tichëtta",
+ "tags-activate-question": "A l'é a brus d'ativé la tichëtta «$1».",
+ "tags-activate-reason": "Rason:",
+ "tags-activate-not-allowed": "A l'é nen possìbil ativé la tichëtta «$1».",
+ "tags-activate-not-found": "La tichëtta «$1» a esist nen.",
+ "tags-activate-submit": "Ativé",
+ "tags-deactivate-title": "Disativé la tichëtta",
+ "tags-deactivate-question": "A sta për disativé la tichëtta «$1».",
+ "tags-deactivate-reason": "Rason:",
+ "tags-deactivate-not-allowed": "A l'é nen possìbil disativé la tichëtta «$1».",
+ "tags-deactivate-submit": "Disativé",
"comparepages": "Confronté dle pàgine",
"compare-page1": "Pàgina 1",
"compare-page2": "Pàgina 2",
@@ -2947,8 +3030,8 @@
"compare-revision-not-exists": "La revision che a l'ha spessificà a esist pa.",
"dberr-problems": "An dëspias! Ës sit a l'ha dle dificoltà técniche.",
"dberr-again": "Ch'a speta chèiche minute e ch'a preuva torna a carié.",
- "dberr-info": "(Conession al servent ëd base ëd dàit impossìbil: $1)",
- "dberr-info-hidden": "(Conession al servent ëd base ëd dàit impossìbil)",
+ "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à.",
@@ -2965,6 +3048,9 @@
"htmlform-no": "Nò",
"htmlform-yes": "É",
"htmlform-chosen-placeholder": "Serne n'opsion",
+ "htmlform-cloner-create": "Gionté 'd pi",
+ "htmlform-cloner-delete": "Gavé",
+ "htmlform-cloner-required": "A-i é damanca d'almanch un valor.",
"sqlite-has-fts": "$1 con arserca an test pien mantnùa",
"sqlite-no-fts": "$1 sensa arserca an test pien mantnùa",
"logentry-delete-delete": "$1 a l'ha {{GENDER:$2|scancelà}} la pàgina $3",
@@ -2986,6 +3072,14 @@
"revdelete-uname-unhid": "stranòm dëscoatà",
"revdelete-restricted": "restrission aplicà a j'aministrator",
"revdelete-unrestricted": "restrission për j'aministrator gavà",
+ "logentry-block-block": "$1 {{GENDER:$2|a l'ha blocà}} {{GENDER:$4|$3}} për na durà ëd $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|a l'ha dësblocà}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|a l'ha modificà}} ij paràmeter ëd blocagi për {{GENDER:$4|$3}} con na durà ëd $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|a l'ha blocà}} {{GENDER:$4|$3}} për na durà ëd $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|a l'ha modificà}} ij paràmeter ëd blocagi për {{GENDER:$4|$3}} con na durà ëd $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|a l'ha amportà}} $3 an cariand d'archivi",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|a l'ha amportà}} $3 da n'àutra wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|a l'ha gionzù}} $3 an $4 (revision fin-a a $5)",
"logentry-move-move": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4 sensa lassé na ridiression",
"logentry-move-move_redir": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4 ansima a na ridiression",
@@ -3000,20 +3094,39 @@
"logentry-rights-rights": "$1 {{GENDER:$2|a l'ha modificà}} l'apartenensa a la partìa për $3 da $4 a $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|a l'ha modificà}} l'apartenensa a la partìa për $3",
"logentry-rights-autopromote": "$1 a l'é {{GENDER:$2|stàit promovù}} an automàtich da $4 a $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|a l'ha carià}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|a l'ha carià}} na neuva version ëd $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|a l'ha carià}} $3",
+ "log-name-managetags": "Argistr dle modìfiche ëd tichëtte",
+ "log-description-managetags": "Costa pàgina a lista ij travaj ëd manutension gropà a le [[Special:Tags|tichëtte]]. L'argistr a conten mach j'assion fàite a man da n'aministrator; le tichëtte a peulo esse creà o eliminà dal programa wiki sensa che l'assion a sia marcà an s'argistr.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|a l'ha creà}} la tichëtta « $4 ».",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|a l'ha dëscancelà}} la tichëtta « $4 » (gavà da {{PLURAL:$5|na revision o vos d'argistr|$5 revision o vos d'argistr}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|a l'ha ativà}} la tichëtta \"$4\" për l’usagi dj'utent e dij trigomiro",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|a l'ha disativà}} la tichËtta « $4 » pour l’usagi dj'utent e dij trigomiro",
"rightsnone": "(gnun)",
+ "revdelete-summary": "resumé dla modìfica",
+ "feedback-adding": "Gionta dij coment a la pàgina...",
+ "feedback-back": "André",
+ "feedback-bugcheck": "Bin fàit! Ch'a contròla mach ch'a sia pa già un dij [$1 bigat conossù].",
+ "feedback-bugnew": "I l'heu controlà. Signalé n'eror neuv.",
"feedback-bugornote": "S'a l'é pront a descrive un problema técnich an detaj, për piasì ch'a [$1 signala un bigat]. \nDësnò, a peul dovré ël formolari semplificà sì-sota. Sò coment a sarà giontà a la pàgina «[$3 $2]», con sò stranòm.",
- "feedback-subject": "Soget:",
- "feedback-message": "Mëssagi:",
"feedback-cancel": "Anulé",
- "feedback-submit": "Spedì ij coment",
- "feedback-adding": "Gionta dij coment a la pàgina...",
+ "feedback-close": "Fàit",
+ "feedback-external-bug-report-button": "Presenta un travaj tècnich",
+ "feedback-dialog-title": "Spedì ij coment",
+ "feedback-dialog-intro": "A peul dovré ël formolari sempi sì-sota për spedì ij sò coment. Ij sò coment a saran giontà a la pàgina «$1», ansema a sò stranòm.",
+ "feedback-error-title": "Eror",
"feedback-error1": "Eror: Arzultà ëd l'API nen arconossù",
"feedback-error2": "Eror: Modìfica falìa",
"feedback-error3": "Eror: gnun-e rispòste da l'API",
+ "feedback-message": "Mëssagi:",
+ "feedback-subject": "Soget:",
+ "feedback-submit": "Spediss",
+ "feedback-terms": "I capisso che j'anformassion ëd mè agent d'utent a conten-o d'anformassion an sla version precisa ëd mè navigador e sistema operativ e a saran condividùe publicament ansema ai mè coment.",
+ "feedback-termsofuse": "I son d'acòrdi a dé ij coment an acòrd con le Condission d'Usagi.",
"feedback-thanks": "Mersì! Sò coment a l'é stàit publicà an sla pàgina \"[$2 $1]\".",
- "feedback-close": "Fàit",
- "feedback-bugcheck": "Bin fàit! Ch'a contròla mach ch'a sia pa già un dij [$1 bigat conossù].",
- "feedback-bugnew": "I l'heu controlà. Signalé n'eror neuv.",
+ "feedback-thanks-title": "Mersì!",
+ "feedback-useragent": "Agent d'utent:",
"searchsuggest-search": "Arserché",
"searchsuggest-containing": "contenent ...",
"api-error-badaccess-groups": "Chiel a peul pa carié d'archivi su costa wiki.",
@@ -3049,6 +3162,13 @@
"api-error-stashfailed": "Eror antern: ël servent a l'ha pa podù memorisé l'archivi a temp.",
"api-error-publishfailed": "Eror antern: Ël servent a l'ha pa podù publiché l'archivi provisòri.",
"api-error-stasherror": "A-i é staje n'eror durant ël cariament dl'archivi da stërmé.",
+ "api-error-stashedfilenotfound": "L'archivi stërmà a l'é nen trovasse durant ël tentativ ëd carielo da sò strem.",
+ "api-error-stashpathinvalid": "Ël përcors anté ch'a l'avrìa dovù trovesse l'archivi stërmà a l'era nen bon.",
+ "api-error-stashfilestorage": "A-ié staje n'eror an rangiand l'archivi an sò strem.",
+ "api-error-stashzerolength": "Ël servent a l'ha nen podù stërmé l'archivi, përchè a l'era ëd taja nula.",
+ "api-error-stashnotloggedin": "A dev esse rintrà ant ël sistema për argistré dj'archivi ant lë strem ëd cariament.",
+ "api-error-stashwrongowner": "L'archivi al qual a sërcava d'acede ant lë strem a l'é nen sò.",
+ "api-error-stashnosuchfilekey": "La ciav dl'archivi al qual a sërcava d'acede ant lë strem a esist pa.",
"api-error-timeout": "Ël servent a l'ha pa rëspondù ant ël temp ëspetà.",
"api-error-unclassified": "A l'é capitaje n'eror nen conossù.",
"api-error-unknown-code": "Eror sconossù: «$1».",
@@ -3092,5 +3212,71 @@
"expand_templates_remove_nowiki": "Gava ij tag <nowiki> ant l'arzultà",
"expand_templates_generate_xml": "Mosta l'erbo ëd parse XML",
"expand_templates_generate_rawhtml": "Smon-e l'HTML sempi",
- "expand_templates_preview": "Preuva"
+ "expand_templates_preview": "Preuva",
+ "expand_templates_preview_fail_html": "<em>Dagià che {{SITENAME}} a l'ha l'HTML ëd base abilità e a-i é staje na pèrdita ëd dàit ëd session, la previsualisassion a l'é stërmà për precaussion contra dj'atach ëd JavaScript.</em>\n\n<strong>Si cost a l'é un tentativ ëd previsualisassion legìtim, për piasì ch'a preuva torna.</strong>\nS'a marcia ancor nen, ch'a preuva a [[Special:UserLogout|seurte dal sistema]] e a rintré torna.",
+ "expand_templates_preview_fail_html_anon": "<em>Dagià che {{SITENAME}} a l'ha l'HTML ëd base abilità e chiel a l'é nen rintrà ant ël sistema, la previsualisassion a l'é stërmà coma precaussion contra j'atach ëd JavaScript.</em>\n\n<strong>Si cost a l'é un tentativ ëd previsualisassion legìtim, për piasì [[Special:UserLogin|ch'a rintra ant ël sistema]] e ch'a preuva torna.</strong>",
+ "pagelanguage": "Seletor ëd lenga dla pàgina",
+ "pagelang-name": "Pàgina",
+ "pagelang-language": "Lenga",
+ "pagelang-use-default": "Dovré la lenga predefinìa",
+ "pagelang-select-lang": "Serne la lenga",
+ "right-pagelang": "Cangé la lenga dla pàgina",
+ "action-pagelang": "cangé la lenga dla pàgina",
+ "log-name-pagelang": "Argistr dij cangiament ëd lenga",
+ "log-description-pagelang": "Cost-sì a l'é n'argistr dij cangiament ant le lenghe dle pàgine.",
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a l'ha cangià}} la lenga dla pàgina $3 da $4 a $5.",
+ "default-skin-not-found": "Tension! La pel predeterminà për soa wiki, definìa an <code dir=\"ltr\">$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nSoa anstalassion a smija anclude le pel sì-dapress. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration ël manual ëd configurassion dle pel] për d'anformassion su coma abiliteje e serne cola predefinìa.\n\n$2\n\n; S'a l'ha pen-a anstalà MediaWiki:\n: A l'é probàbil che a l'abia anstalalo da git, o diretaman dal còdes sorgiss an n'àutra manera. A l'é normal. Ch'a preuva a anstalé dle pej da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org], parèj:\n:* Dëscariand l' [https://www.mediawiki.org/wiki/Download archivi tar ëd l'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista dle <code>pel/</code> d'ambelelà.\n:* Dëscariand j'archivi tar për pel sìngole da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Sòn a dovrìa nen antërferì con sò depòsit git si chiel a l'é un dësvlupador ëd MediaWiki.\n\n; S'a l'ha pen-a agiornà MediaWiki:\n: MediaWiki 1.24 e pi neuv a përmet pi nen an automàtich le pel anstalà (ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery manual an sla dëscuverta automàtica dle pel]). A peul copié le linie sì-dapress an <code>LocalSettings.php</code> për abilité tute le pel ch'a son anstalà al moment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; S'a l'ha pen-a modificà <code>LocalSettings.php</code>:\n: Ch'a verìfica torna ël nòm ëd dle pej për evité ij boro.",
+ "default-skin-not-found-no-skins": "Darmagi! La pel dë stàndard për soa wiki, definìa da <code>$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nChiel a l'ha gnun-a pel anstalà.\n\n; S'a l'ha pen-a anstalà o agiornà MediaWiki:\n: A l'é probàbil ch'a l'abia falo da git, o diret dal còdes sorgiss an n'àutra manera. A l'é normal. MediaWiki 1.24 e pi recent doesn't a ancludo gnun-a pel ant ël depòsit prinsipal. Ch'a preuva a anstalé chèiche pel da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org]:\n:* Dëscariand [https://www.mediawiki.org/wiki/Download l'archivi tar dl'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista <code>skins/</code> da là.\n:* Dëscariand j'archivi tar ëd pel sìngole da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Fé sòn a dovrìa nen antërferì con sò depòsit git se chiel a l'é un dësvlupador ëd MediaWiki. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: ël manual dla configurassion dle pel] për d'anformassion su coma ativé le pel e serne cola predefinìa.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilità)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilità''')",
+ "mediastatistics": "Statìstiche an sij mojen",
+ "mediastatistics-summary": "Statìstiche an sle sòrt d'archivi carià. A ancludo mach la version pi recent ëd n'archivi. Le version veje o dëscancelà dj'archivi a son escludùe.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 otet}} ($2 ; $3%)",
+ "mediastatistics-table-mimetype": "Sòrt MIME",
+ "mediastatistics-table-extensions": "Estension possìbij",
+ "mediastatistics-table-count": "Nùmer d'archivi",
+ "mediastatistics-table-totalbytes": "Taja combinà",
+ "mediastatistics-header-unknown": "Nen conossù",
+ "mediastatistics-header-bitmap": "Plance bitmap",
+ "mediastatistics-header-drawing": "Dissegn (plance vetoriaj)",
+ "mediastatistics-header-audio": "Sonor",
+ "mediastatistics-header-video": "Filmà",
+ "mediastatistics-header-multimedia": "Mojen rich",
+ "mediastatistics-header-office": "Ufissi",
+ "mediastatistics-header-text": "Testual",
+ "mediastatistics-header-executable": "Eseguìbij",
+ "mediastatistics-header-archive": "Formà compress",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|coma final a l'é stàita|còme finaj a son ëstàite}} gavà dal JSON",
+ "json-error-unknown": "A-i é staje un problema con ël JSON. Eror: $1",
+ "json-error-depth": "La dimension màssima dël baron a l'é stàita sorpassà",
+ "json-error-state-mismatch": "JSON nen bon o mal formà",
+ "json-error-ctrl-char": "Eror ëd caràter ëd contròl, miraco mal codificà",
+ "json-error-syntax": "Eror ëd sintassi",
+ "json-error-utf8": "Caràter UTF-8 mal formà, miraco mal codificà",
+ "json-error-recursion": "Un-a o pi rëspondense ant ël valor da codifiché",
+ "json-error-inf-or-nan": "Un o pi valor NAN o INF ant ël valor da codifiché",
+ "json-error-unsupported-type": "A l'é stàit dàit un valor ëd na sòrt ch'a peul nen esse codificà",
+ "headline-anchor-title": "Liura a sta session",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Latin ëspantià",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Sìmboj",
+ "special-characters-group-greek": "Grech",
+ "special-characters-group-cyrillic": "Sirìlich",
+ "special-characters-group-arabic": "Àrabo",
+ "special-characters-group-arabicextended": "Àrabo spantià",
+ "special-characters-group-persian": "Persian",
+ "special-characters-group-hebrew": "Ebréo",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalèis",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "tratin en",
+ "special-characters-title-emdash": "tratin em",
+ "special-characters-title-minus": "segn meno"
}
diff --git a/languages/i18n/pnb.json b/languages/i18n/pnb.json
index edf2a8e9..f1252884 100644
--- a/languages/i18n/pnb.json
+++ b/languages/i18n/pnb.json
@@ -7,7 +7,8 @@
"Rachitrali",
"Reedy",
"ZaDiak",
- "아라"
+ "아라",
+ "Amire80"
]
},
"tog-underline": "حوڑ تھلے لین:",
@@ -131,7 +132,7 @@
"mytalk": "میریاں گلاں",
"anontalk": "اس آئی پی آسطے گل کرو",
"navigation": "کھوج",
- "and": "&#32;and",
+ "and": "&#32;تے",
"qbfind": "کھوج",
"qbbrowse": "لبو",
"qbedit": "لکھو",
@@ -153,8 +154,8 @@
"history": "پچھلے کم",
"history_short": "ریکارڈ",
"updatedmarker": "میرے پچھلی وار آن توں مگروں دیاں تبدیلیاں",
- "printableversion": "چھپن آلا صفحہ",
- "permalink": "پکا تعلق",
+ "printableversion": "چھپن جوگا صفہ",
+ "permalink": "پکا جوڑ",
"print": "چھاپو",
"view": "وکھالہ",
"edit": "لکھو",
@@ -193,8 +194,8 @@
"lastmodifiedat": "This page was last modified on $1, at $2.\nاس صفحے نوں آخری آری $1 تریخ نوں $2 وجے بدلیا گیا۔",
"viewcount": "اس صفحے نوں {{PLURAL:$1|اک واری|$1 واری}} کھولیا گیا اے۔",
"protectedpage": "بجایا صفحہ",
- "jumpto": "جاو:",
- "jumptonavigation": "مدد",
+ "jumpto": "جاؤ:",
+ "jumptonavigation": "پاندھ",
"jumptosearch": "کھوج",
"view-pool-error": "$1",
"pool-timeout": "تالے لئی انتظار",
@@ -213,9 +214,9 @@
"mainpage-description": "پہلا صفہ",
"policy-url": "Project:پالیسی",
"portal": "بیٹھک",
- "portal-url": "Project:بیٹھک",
- "privacy": "حفاظتی پالیسی",
- "privacypage": "Project:حفاظتی پالیسی",
+ "portal-url": "ویونت:بیٹھک",
+ "privacy": "بچاؤ پالیسی",
+ "privacypage": "Project:بچاؤ پالیسی",
"badaccess": "اجازت دے وچ غلطی اے",
"badaccess-group0": "تھاونوں ایس کم دی اجازت نیں جیہڑا تسیں آکھیا اے۔",
"badaccess-groups": "جیڑا کم تسی کرنا چا رۓ او اوہ صرف {{PLURAL:$2|اس گروپ|ایناں گروپاں}} دے ورتن آلے کر سکدے نیں: $1۔",
@@ -232,7 +233,7 @@
"viewsourcelink": "لکھائی وکھاؤ",
"editsectionhint": "حصہ لکھو: $1",
"toc": "حصے",
- "showtoc": "کھولو",
+ "showtoc": "وکھاؤ",
"hidetoc": "چھپاؤ",
"collapsible-collapse": "ڈگنا",
"collapsible-expand": "ودھاؤ",
@@ -406,14 +407,12 @@
"passwordreset-emailsent-capture": "اک یاد کران والی ای-میل پیج دتی گئی اے، جیہڑی تھلے دسی گئی اے۔",
"passwordreset-emailerror-capture": "اک یادکراؤ ای-میل بنائی گئی اے، جیہڑی کہ تھلے دسی گئی اے، پر ورتن والے تک پیجنا نئیں ہوسکیا:$1",
"changeemail": "ای-میل پتہ بدلو",
- "changeemail-header": "کھاتے دا ای-میل پتہ بدلو",
"changeemail-text": "اس فارم نوں پورا کر کے ای-میل پتہ بدلو۔ اس کم نوں پورا کرن واسطے توانوں اپنی کنجی لکھنی پۓ گی۔",
"changeemail-no-info": "تسی لاگ ان ہوکے ای اس صفحے نوں ویکھ سکدے او۔",
"changeemail-oldemail": "ہلے دا ای-میل پتہ:",
"changeemail-newemail": "نواں ای-میل پتہ:",
"changeemail-none": "(کوئی نئیں)",
"changeemail-submit": "ای-میل بدلو",
- "changeemail-cancel": "ختم",
"bold_sample": "موٹی لکھائی",
"bold_tip": "موٹی لکھائی",
"italic_sample": "ترچھی لکھائی",
@@ -430,7 +429,7 @@
"media_tip": "فائل دا جوڑ",
"sig_tip": "تواڈے دستخط ویلے دے نال",
"hr_tip": "سدھی لکیر",
- "summary": "خلاصہ:",
+ "summary": "ویروا:",
"subject": "موضوع/شہ سرخی:",
"minoredit": "اے نکا جیا کم اے",
"watchthis": "اس صفحے تے نظر رکھو",
@@ -546,7 +545,7 @@
"previousrevision": "← اوس توں پچھلا کم",
"nextrevision": "نویں تبدیلی →",
"currentrevisionlink": "موجودہ حالت",
- "cur": "موجودہ",
+ "cur": "ہنوالا",
"next": "اگلا",
"last": "آخری",
"page_first": "پہلا",
@@ -644,7 +643,6 @@
"mergehistory-same-destination": "سورس تے لبن والے صفے اک نئیں ہوسکدے۔",
"mergehistory-reason": "وجہ:",
"mergelog": "لاگ رلاؤ",
- "pagemerge-logentry": "[[$1]] رلایا [[$2]] چ (ریوین $3)",
"revertmerge": "وکھریاں کرو",
"mergelogpagetext": "تھلے اک صفے والے کٹھے کیتے گۓ صفے دی لسٹ اے۔",
"history-title": "\"$1\" دا ریکارڈ",
@@ -687,7 +685,6 @@
"searchrelated": "جڑیا",
"searchall": "سارے",
"showingresults": "تھلیوں دسے گۓ {{PLURAL:$1|'''1''' نتیجہ|'''$1''' نتیجے}} شروع #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|نتیجہ '''$1''' دا '''$3'''|نتیجے '''$1 - $2''' دے '''$3'''}} لئی '''$4'''",
"search-nonefound": "سوال نال رلدے کوئی نتارے نئیں سن۔",
"powersearch-legend": "ہور کھوج",
"powersearch-ns": "ناں الیاں جگہاں چ لبو:",
@@ -1141,7 +1138,7 @@
"listfiles_description": "تفصیل",
"listfiles_count": "ورژن",
"file-anchor-link": "فائل",
- "filehist": "پچھلی حالت",
+ "filehist": "فائل ورتن",
"filehist-help": "فائل نو اس ویلے دی حالت وچ ویکھن واسطے تاریخ/ویلے تے کلک کرو۔",
"filehist-deleteall": "سب نوں مٹاؤ",
"filehist-deleteone": "مٹاؤ",
@@ -1210,7 +1207,6 @@
"statistics": "آنکڑے",
"statistics-header-pages": "صفے دے آنکڑے",
"statistics-header-edits": "تبدیلیاں دا آنکڑہ",
- "statistics-header-views": "ویکھن دا سعاب کتاب",
"statistics-header-users": "ورتن آلیاں دا سعاب کتاب",
"statistics-header-hooks": "دوجے سعاب کتاب",
"statistics-articles": "لسٹ صفے",
@@ -1219,13 +1215,9 @@
"statistics-files": "اتے چڑھائیاں گئیاں فائلاں",
"statistics-edits": "صفہ تبدیلیاں {{سائٹناں}} تون بنائی گئی۔",
"statistics-edits-average": "اوسط تبدیلی اک صفے تے۔",
- "statistics-views-total": "کل وکھالے۔",
- "statistics-views-total-desc": "ناں ہون والے صفیاں تے خاص صفیاں دے وکھالے نئیں ہیگے۔",
- "statistics-views-peredit": "تبدیلی سعاب نال وکھالے",
"statistics-users": "رجسٹر [[Special:ListUsers|ورتنوالا]]",
"statistics-users-active": "اجکل دے کامے",
"statistics-users-active-desc": "ورتنوالے جناں نیں پچھلے {{PLURAL:$1|دن|$1 دناں}} چ کم کیتا اے۔",
- "statistics-mostpopular": "سب توں بوتے ویکھے گۓ صفے",
"doubleredirects": "دوہری ریڈیرکٹس",
"doubleredirectstext": "ایس صفے تے اوناں صفیاں دی لسٹ اے جیہڑے ریڈائرکٹ کردے نیں دوجے ریڈائرکٹ صفیاں ول۔\nہر قطار چ جوڑ نیں پہلے تے دوجے ریڈائرکٹ نال ، نال دوجے دیڑائرکٹ ول دا تارگٹ نیں جیہڑا کے ٹھیک تارگٹ صفہ ہوندا اے جیہڑا کہ پہلے ریڈائرکٹ نوں اشارہ کرنا چائیدا اے۔\n<del>کراسڈ</del> اینٹریاں حل ہوگیاں نیں۔",
"double-redirect-fixed-move": "[[$1]] نوں بدل دتا گیا اے۔\nاے ہن [[$2]] نوں ریڈائرکٹ اے۔",
@@ -1257,7 +1249,6 @@
"uncategorizedtemplates": "بغیر کیٹاگریاں آلے سچے",
"unusedcategories": "نا استعمال ہوئیاں کیٹاگریاں",
"unusedimages": "نا استعمال ہوئیاں فائلاں",
- "popularpages": "مشہور صفے",
"wantedcategories": "چاھیدیاں کیٹاگریاں",
"wantedpages": "چائیدے صفحے",
"wantedpages-badtitle": "ناں منیا جان والا سرناواں رزلٹ سیٹ چ:$1",
@@ -1305,7 +1296,6 @@
"querypage-disabled": "اے صفہ ناکارہ کیتا گیا پرفارمنس وجہ توں۔",
"booksources": "کتاب توں اتہ پتہ",
"booksources-search-legend": "اس مضمون تے کتاباں لبو",
- "booksources-go": "جاؤ",
"booksources-text": "تھلے اوناں جوڑاں دی لسٹ اے جتھے نویاں تے پرانیاں کتاباں وکدیاں نیں، تے ہور وی جانکاری ہوسکدی اے کتاباں بارے تسیں ویکھدے او:",
"booksources-invalid-isbn": "دتی گئی آئی ایس بی این چلدی نئیں لکدی ؛ اصل سورس نوں چیک کرو کاپی کرن توں پہلے۔",
"specialloguserlabel": "کرن والا:",
@@ -1405,9 +1395,9 @@
"addedwatchtext": "اے صفحہ \"[[:$1]] تواڈیاں اکھاں تھلے آگیا اے۔<br />\nمستقبل وچ اس صفحہ تے ایدے بارے چ گل بات نویاں تبدیلیاں وچ موٹے نظر آن گے تا کہ آسانی نال کھوجیا جا سکے۔",
"removewatch": "اکھ تھلیوں ہٹاؤ",
"removedwatchtext": "ایہ صفہ \"[[:$1]]\" [[Special:Watchlist|تہاڈی اکھ ]]تھلوں ہٹا لیتا گیا اے۔",
- "watch": "نظر رکھو",
+ "watch": "اکھ تھلے رکھو",
"watchthispage": "اس صفے تے اکھ رکھو",
- "unwatch": "نظر ھٹاؤ",
+ "unwatch": "اکھ تھلے توں ھٹاؤ",
"unwatchthispage": "اکھ رکھنا چھڈو",
"notanarticle": "لکھن صفہ نئیں۔",
"notvisiblerev": "آخری ریوین کسے ہور ورتن والے دی مٹادتی گئی اے۔",
@@ -1415,10 +1405,10 @@
"wlheader-enotif": "ای-میل نوٹیفیکیشن قابل",
"wlheader-showupdated": " صفے جیہڑے بدلے کۓ تھواڈے آخری وار آن مکرون اونان نوں موٹا کرکے دسیا گیا اے۔",
"wlnote": "تھلے {{PLURAL:$1|آخری تبدیلی|آخری تبدیلیاں '''1$''' }} آخر تے {{PLURAL:$2|کینٹہ|'''2$''' کینٹے}} 3$، 4$.",
- "wlshowlast": "آخری $1 گھنٹے $2 دن $3 وکھاؤ",
+ "wlshowlast": "آخری $1 گھنٹے $2 دن وکھاؤ",
"watchlist-options": "نظر تھلے رکھن دیاں راہواں",
- "watching": "نظر تھلے۔۔۔۔",
- "unwatching": "نظروں اولے",
+ "watching": "اکھ تھلے۔۔۔۔",
+ "unwatching": "اولے",
"watcherrortext": "\"$1\" دی سیٹنگ بد دیاں اک غلطی ہوئی جے",
"enotif_reset": "سارے ویکھے گۓ صفحیاں تے نشان لاؤ",
"enotif_impersonal_salutation": "{{SITENAME}} ورتن والا",
@@ -1452,7 +1442,6 @@
"delete-toobig": "ایس صفے دی اک لمبی تبدیلی دی تریخ اے $1 توں ود {{PLURAL:$1|ریوین|ریویناں}}\nایے صفیاں دے مٹان تے کج روک اے {{SITENAME }} دی اچانک خرابی توں بچن لئی۔",
"delete-warning-toobig": "ایس صفے دی تبدیلی دی اک لمی تریخ اے۔ $1 توں ود {{PLURAL:$1|ریوین|ریویناں}}۔\nاینوں مٹان تے {{SITENAME}} دے ڈیٹا اوپریشنز چ مسلہ بن سکدا اے۔\nسوچ سمج کے اگے ودو۔",
"rollback": "لکھائیاں واپس کرو",
- "rollback_short": "واپس کرو",
"rollbacklink": "واپس",
"rollbackfailed": "واپس کرن ناکام",
"cantrollback": "تبدیلی واپس نئیں ہوسکدی؛\nآخری لکھاری ای ایدا اکو لکھاری سی۔",
@@ -1562,7 +1551,7 @@
"blanknamespace": "(خاص)",
"contributions": "ورتن آلے دا حصہ",
"contributions-title": "$1 دے کم",
- "mycontris": "میرا کم",
+ "mycontris": "میرے کم",
"contribsub2": "$1 آستے ($2)",
"nocontribs": "ایناں ناپاں نال رلدیاں کوئی تبدیلیاں نئیں لبیاں۔",
"uctop": "(اتے)",
@@ -1583,7 +1572,7 @@
"sp-contributions-username": "آئی پی پتہ یا ورتن آلا ناں:",
"sp-contributions-toponly": "صرف اوہ تبدیلیاں وکھاؤ جیہڑیاں سب توں نیڑے ویلے ہویاں نیں۔",
"sp-contributions-submit": "کھوجو",
- "whatlinkshere": "ایتھے کیدا تعلق اے",
+ "whatlinkshere": "ایتھے کیدا جوڑ اے",
"whatlinkshere-title": "او صفحات جیڑے \"$1\" نال جڑے نے",
"whatlinkshere-page": "صفہ:",
"linkshere": "تھلے دتے گۓ صفے اس دے نال جڑدے نے '''[[:$1]]''':",
@@ -1816,7 +1805,6 @@
"import": "صفحے لیاؤ",
"importinterwiki": "ٹرانسوکی امپورٹ",
"import-interwiki-text": "اک وکی تے صفہ سرناواں لیاں لئی چنو۔\nریوین تریخاں تے لکھاری ناں بچا لۓ جان گۓ۔\nسارے وکیاں وشکار لیان کم [[Special:Log/import|لیان لاگ]] تے لاگڈ نیں۔",
- "import-interwiki-source": "سورس وکی/صفہ:",
"import-interwiki-history": "ایس صفے لئی سارا ریرین ریکارڈ کاپی کرو۔",
"import-interwiki-templates": "سارے سچے رلاؤ",
"import-interwiki-submit": "لے آؤ",
@@ -1857,13 +1845,11 @@
"import-logentry-interwiki": "ٹرانسوکیڈ $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ریوین|ریویناں }} $2 توں",
"javascripttest": "JavaScript ٹیسٹنگ",
- "javascripttest-title": "ٹیسٹ $1 چلدا اے۔",
"javascripttest-pagetext-noframework": "ایہ صفہ JavaScript ٹیسٹاں لئی بچایا گیا اے۔",
"javascripttest-pagetext-unknownframework": "\"$1\" انجانا ٹیسٹنگ فریمورک۔",
"javascripttest-pagetext-frameworks": "مہربانی کرکے تھلے دتے گۓ ٹیسٹ فریمورکاں چوں اک چنو : $1",
"javascripttest-pagetext-skins": "اپنی پسند دا کوئی نمونہ چنو جیدے تے ٹیسٹ چلن:",
"javascripttest-qunit-intro": "mediawiki.org تے [$1 ٹسٹنگ ڈوکومنٹیشن] ویکھو۔",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
"tooltip-pt-userpage": "میرا صفہ",
"tooltip-pt-anonuserpage": "ورتن صفہ IP پتے لئی تسی تبدیل کر رۓ او۔۔۔",
"tooltip-pt-mytalk": "میریاں گلاں",
@@ -1871,10 +1857,10 @@
"tooltip-pt-preferences": "میریاں تانگاں",
"tooltip-pt-watchlist": "او صفحے جنہاں وچ تبدیلیاں تسی ویکھ رہے او",
"tooltip-pt-mycontris": "میرے کم",
- "tooltip-pt-login": "اے بہتر اے کہ لاگ ان ہو جاؤ، لیکن فیر وی اے لازمی نئیں۔",
+ "tooltip-pt-login": "ایہ بہتر اے کہ لاگ ان ہو جاؤ، فیر وی ایہ لازمی نئیں۔",
"tooltip-pt-logout": "باہر آؤ",
- "tooltip-ca-talk": "اس صفحے دے بار وچ گل بات",
- "tooltip-ca-edit": "تسیں اس صفے تے لکھ سکدے او۔\nمحفوظ کرن توں پہلاں کچے کم نوں ویکھ لو۔",
+ "tooltip-ca-talk": "اس صفے بارے گل بات",
+ "tooltip-ca-edit": "تسیں اس صفے تے لکھ سکدے او۔\nبچان توں پہلاں کچے کم نوں ویکھ لو۔",
"tooltip-ca-addsection": "اس گل بات وچ حصہ لے لو۔",
"tooltip-ca-viewsource": "اے صفحہ بچایا گیا اے۔\nتسی اینو صرف ویکھ سکدے او۔",
"tooltip-ca-history": "اس صفحے دا پرانہ ورژن۔",
@@ -1889,21 +1875,21 @@
"tooltip-search-go": "اس ناں دے صفحے تے چلو، اگر اے ہے گا اے",
"tooltip-search-fulltext": "اس لفظ نوں صفحیاں چ لبو",
"tooltip-p-logo": "پہلا صفہ",
- "tooltip-n-mainpage": "پہلے صفحے دی سیر",
+ "tooltip-n-mainpage": "پہلے صفے نوں ویکھو",
"tooltip-n-mainpage-description": "پہلے ورقے تے جاؤ",
- "tooltip-n-portal": "منصوبے دے بارے وچ، توسی کی کر سکدے او تے کنج کھوج سکدے او",
+ "tooltip-n-portal": "پربندھ بارے ، تسیں کی کر سکدے او تے کنج کھوج سکدے او",
"tooltip-n-currentevents": "موجودہ حالات تے پچھلیاں معلومات دیکھو",
"tooltip-n-recentchanges": "وکی تے نویاں تبدیلیاں۔",
- "tooltip-n-randompage": "بیترتیب صفے کھولو۔",
+ "tooltip-n-randompage": "کوئی صفہ کھولو۔",
"tooltip-n-help": "مدد لینے آلی جگہ۔",
- "tooltip-t-whatlinkshere": "اس نال جڑے سارے وکی صفحے۔",
+ "tooltip-t-whatlinkshere": "اس نال جڑے سارے وکی صفے۔",
"tooltip-t-recentchangeslinked": "اس صفحے توں جڑے صفحیاں چ نویاں تبدیلیاں",
"tooltip-feed-rss": "RSS feed for this page",
"tooltip-feed-atom": "Atom feed for this page",
"tooltip-t-contributions": "اس ورتن والے دے کم ویکھو",
"tooltip-t-emailuser": "اس ورتن والے نو ای میل کرو",
"tooltip-t-upload": "فائل چڑھاؤ",
- "tooltip-t-specialpages": "سارے خاص صفحے",
+ "tooltip-t-specialpages": "سارے خاص صفیاں دی اک لسٹ",
"tooltip-t-print": "اس صفے دا چھپنے آلا ورژن ویکھو",
"tooltip-t-permalink": "اس صفحے دے اس ورژن نال پرماننٹ لنک",
"tooltip-ca-nstab-main": "مواد آلا صفحہ ویکھو",
@@ -1949,7 +1935,6 @@
"simpleantispam-label": "سپام روک پھاٹک\nایدے تے ناں لکھو۔",
"pageinfo-title": "\"$1\" لئی جانکاری",
"pageinfo-header-edits": "تبدیلیاں",
- "pageinfo-views": "را‎ ۓ گنتی",
"pageinfo-watchers": "ویکھن والے",
"pageinfo-edits": "تبدیلیاں گنتی",
"pageinfo-authors": "وکھرے لکھاریاں دی گنتی",
@@ -2350,7 +2335,6 @@
"exif-urgency-low": "تھلے کرکے ($1)",
"exif-urgency-high": "اچا ($1)",
"exif-urgency-other": "($1) ورتن ڈیفائینڈ پراورٹی",
- "watchlistall2": "سارے",
"namespacesall": "سارے",
"monthsall": "سارے",
"confirmemail": "ای میل پتہ پکا کرو",
@@ -2422,7 +2406,6 @@
"watchlisttools-edit": "اکھ تھلے رکھے ہوۓ صفحیاں نوں ویکھو تے تبدیل کرو",
"watchlisttools-raw": "کچی اکھ تھلے رکھی ہوئی نو تبدیل کرو",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
- "unknown_extension_tag": "انجان ایکسٹنشن ٹیگ \"$1\"",
"duplicate-defaultsort": "'''خبردار:''' ڈیفالٹ چابی \"$2\" پہلی ڈیفالٹ چابی \"$1\" دے اتے لگ گئی اے۔",
"version": "ورژن",
"version-extensions": "انسٹالڈ کیتیاں گیاں ایکسٹنشن",
@@ -2438,7 +2421,7 @@
"version-parser-function-hooks": "پاسر فنکشن ہکز",
"version-hook-name": "ہک ناں",
"version-hook-subscribedby": "جینے لئی",
- "version-version": "(ورین $1)",
+ "version-version": "($1)",
"version-license": "لائیسنس",
"version-poweredby-credits": "ایس وکی نوں '''[https://www.mediawiki.org/ میڈیاوکی]''', copyright © 2001-$1 $2. چلاندا اے۔",
"version-poweredby-others": "دوجے",
@@ -2540,19 +2523,20 @@
"logentry-newusers-create2": "$1 {{جنس:$2|بنایا}} {{جنس:$4|اک ورتن کھاتہ}} $3",
"logentry-newusers-autocreate": "کھاتہ $1 اپنے آپ ای {{جنس:$2|بنایا گیا}} بنایا گیا۔",
"rightsnone": "(کوئی وی نئیں)",
+ "revdelete-summary": "لکھائی دا خلاصہ",
+ "feedback-adding": "مشورہ صفے تے دیو۔۔۔۔۔۔۔",
+ "feedback-bugcheck": "بعوت ودیا ! صرف ایہ ویکھو جے کیا ایہ پہلے لبے ہوۓ [$1 known bugs] چو اک تے نئیں۔",
+ "feedback-bugnew": "میں ویکھیا اے۔ نویں بگ دی رپورٹ کرو۔",
"feedback-bugornote": "اگر تسیں اک تکنیکی مسلے نوں پوری طراں دسن لئی تیار او تے فیر مہربانی کرکے [$1 بگ بارے دسو]۔ ںئیں تے تسیں تھلے دتا گیا فارم ورتو۔ تواڈی گل صفہ \"[$3 $2]\" تے جڑے گی، تواڈے ورتن والے ناں تے براؤزر جیہڑا تسیں ورت رۓ او۔",
- "feedback-subject": "آرٹیکل",
- "feedback-message": "سنیعہ:",
"feedback-cancel": "واپس",
- "feedback-submit": "مشورہ دیو",
- "feedback-adding": "مشورہ صفے تے دیو۔۔۔۔۔۔۔",
+ "feedback-close": "ہوگیا۔",
"feedback-error1": "غلطی: اے پی آئی توں ناں پچھانے گۓ نتارے۔",
"feedback-error2": "غلطی: تبدیلی نئیں چلی",
"feedback-error3": "غلطی: اے پی آئی توں کوئی جواب نئیں۔",
+ "feedback-message": "سنیعہ:",
+ "feedback-subject": "آرٹیکل",
+ "feedback-submit": "مشورہ دیو",
"feedback-thanks": "شکریہ ! تواڈی صلاع صفہ \"[$2 $1]\" تے چاڑ دتی گئی اے۔",
- "feedback-close": "ہوگیا۔",
- "feedback-bugcheck": "بعوت ودیا ! صرف ایہ ویکھو جے کیا ایہ پہلے لبے ہوۓ [$1 known bugs] چو اک تے نئیں۔",
- "feedback-bugnew": "میں ویکھیا اے۔ نویں بگ دی رپورٹ کرو۔",
"searchsuggest-search": "کھوج",
"searchsuggest-containing": "بند کر ریا اے۔۔۔",
"api-error-badaccess-groups": "تھوانوں ایس وکی تے فائلاں چڑھان دی اجازت نئیں۔",
diff --git a/languages/i18n/pnt.json b/languages/i18n/pnt.json
index b51b8713..bf6af7a6 100644
--- a/languages/i18n/pnt.json
+++ b/languages/i18n/pnt.json
@@ -636,7 +636,6 @@
"suppress": "Επόπτες",
"booksources": "Βιβλιογραφικά πηγάς",
"booksources-search-legend": "Αράεμαν τη βιβλίων",
- "booksources-go": "Δέβα",
"specialloguserlabel": "Χρήστες:",
"speciallogtitlelabel": "Τίτλος:",
"log": "Αρχεία",
@@ -675,7 +674,7 @@
"unwatch": "Τέλεμαν τ' ωριαγματί",
"unwatchthispage": "Τέλεμαν ωριαγματί",
"watchlist-details": "{{PLURAL:$1|$1 σελίδα|$1 σελίδας}} ωριάσκουνταν, θέγα τα σελίδας καλατσεματί.",
- "wlshowlast": "Φανέρωμαν τ' υστερναίων $1 ωρίων $2 ημερίων $3",
+ "wlshowlast": "Φανέρωμαν τ' υστερναίων $1 ωρίων $2 ημερίων",
"watchlist-options": "Επιλογάς ωριαγματί",
"watching": "Ωριάζω...",
"unwatching": "'κ ωριάζω...",
@@ -949,7 +948,6 @@
"exif-gpsstatus-v": "Διαλειτουργικότητα μετρησίων",
"exif-gpsspeed-m": "Μίλιαν την ώραν",
"exif-gpsspeed-n": "Κορδίλαι",
- "watchlistall2": "ούλαι",
"namespacesall": "ούλαι",
"monthsall": "ούλαι",
"recreate": "Ποίσον αξάν",
@@ -996,5 +994,6 @@
"htmlform-reset": "Κλώσον τ'αλλαγάς",
"htmlform-selectorother-other": "Άλλον",
"rightsnone": "(τιδέν)",
+ "revdelete-summary": "σύνοψην",
"searchsuggest-search": "Αράεμαν"
}
diff --git a/languages/i18n/prg.json b/languages/i18n/prg.json
index f4f403e0..d0b33ead 100644
--- a/languages/i18n/prg.json
+++ b/languages/i18n/prg.json
@@ -539,7 +539,6 @@
"mergehistory-same-destination": "Kakīnslis be appus pāusan ni mazzi būtwei ainawīdan",
"mergehistory-reason": "Brewīnsli:",
"mergelog": "Senlaītan istōrija",
- "pagemerge-logentry": "senlīja [[$1]] sen [[$2]] (kitawīdinsnan istōrija ērgi $3)",
"revertmerge": "Etwārtai padelīs",
"mergelogpagetext": "Zemmais ast listi stēisan panzdauman senlaīsenin stēisan kitawīdinsnan istōrijan.",
"history-title": "Redigīsnas istōrija stesse \"$1\"",
@@ -978,7 +977,6 @@
"statistics": "Statistiki",
"statistics-header-pages": "Pāusan statistiki",
"statistics-header-edits": "Redigīsenin statistiki",
- "statistics-header-views": "Kāimalukisenin statistiki",
"statistics-header-users": "Tērpautajan statistiki",
"statistics-header-hooks": "Kitā statistiki",
"statistics-articles": "Ēnturas pāusai",
@@ -987,12 +985,9 @@
"statistics-files": "Enkraūtai zūrbrukei",
"statistics-edits": "Pāusas redigīsnas ezze tikseņu stesse {{SITENAME}}",
"statistics-edits-average": "Sirzds gīrbis stēisan redigīsenin per pāusan",
- "statistics-views-total": "Gīrbis wisēisan kāimalukisenei:",
- "statistics-views-peredit": "Gīrbis stēisan kāimalukisenin per redigīsenin",
"statistics-users": "Registrītai [[Special:ListUsers|tērpautajai]]",
"statistics-users-active": "Aktīwai tērpautajai",
"statistics-users-active-desc": "Tērpautajai sēntei aktīwai en {{PLURAL:$1|panzdauman dēinan|panzdaumans dēinans}}",
- "statistics-mostpopular": "Ukadeznimai kāimalukitai pāusai",
"doubleredirects": "Dwigubbai prawessenei",
"doubleredirectstext": "Zemmais ast listi wisēisan pāusan sen prawessenins en pāusans, kawīdai prawedda en kittan pāusan.\nErainā rindā turri ēn sen autengīnsenins en pirman be āntran prawessenin, tīt dīgi autengīnsenin kwēi wedda āntars prawessenis. Jāuku panzdaums autengīnsenin wedda en pāusan, en kawīdan prawerru prawestun pirmasmu pāusan.\n<del>Praglaubātai</del> prawessenei ast reparītan.",
"double-redirect-fixed-move": "pāusan [[$1]] pastāi praskajjintan.\nTeinū tennan prawedda prei [[$2]].",
@@ -1021,7 +1016,6 @@
"uncategorizedtemplates": "Nikategōrizitas šablōnis",
"unusedcategories": "Nitērpautas kategōrijas",
"unusedimages": "Nitērpautai zūrbrukei",
- "popularpages": "Ukapōpularai pāusai",
"wantedcategories": "Palaipsītas kategōrijas",
"wantedpages": "Palaipsītai pāusai",
"wantedpages-badtitle": "Nitikrōmiskas tītels sirzdau rezultātans: $1",
@@ -1064,7 +1058,6 @@
"pager-older-n": "{{PLURAL:$1|wūraisis 1|wūraišai $1}}",
"booksources": "Lāiskai",
"booksources-search-legend": "Laukīs lāiskiskans appuns",
- "booksources-go": "Waidinnais",
"booksources-text": "Zemmais ast listi stēisan autengīnsenin prei kittans pāusans, kawīdai perdāst nāunans be tērpautans lāiskans be mazzi turītun talāisins infōrmaciōnins ezze lāiskan laukītan pra tin:",
"booksources-invalid-isbn": "Padatā ISBN nummeri ast erzinātan kāigi nitikrōmiska. Izbandais, anga padatā nummeri preitāra prei nummerin īmtan iz appun.",
"specialloguserlabel": "Tērpautajs:",
@@ -1160,7 +1153,7 @@
"wlheader-enotif": "E-mail pawakīsenei ast enklaūtan.",
"wlheader-showupdated": "Pastāi '''pastarīntan''' pāusai, kawīdai bēi kitawīdintan ezze Twajjai panzdauman tenēisan kāimalukisnan..",
"wlnote": "Zemmais pawaidinnā di {{PLURAL:$1|panzdauman kitawīdinsnan|panzdaumans '''$1''' kitawīdinsnans}} en {{PLURAL:$2|panzdauman stundin|'''$2''' panzdaumans stundins}}.",
- "wlshowlast": "Waidinnais panzdaumans $1 stūndins, $2 dēinans ($3)",
+ "wlshowlast": "Waidinnais panzdaumans $1 stūndins, $2 dēinans ()",
"watchlist-options": "Nadirītan listis mazīngiskwas",
"watching": "As nadirēi...",
"unwatching": "As wanginna nadirītwei...",
@@ -1194,7 +1187,6 @@
"delete-edit-reasonlist": "Redigīs āupausinsenes brewīnslins",
"delete-toobig": "Šin pāusan turri spārtai ilgan istōrijan stēisan redigīsenin, kīrsa $1 {{PLURAL:$1|kitawīdisnan|kitawīdisnans}}.\nTenesse āupausinsenins mazīlai dīlintun ārdisenins en dīlasnan stesse {{SITENAME}} be pastāi arāikintan.",
"rollback": "Etwārtai wartinnais redigīsenin",
- "rollback_short": "Etwārtai wartinnais",
"rollbacklink": "etwārtai wartinnais",
"rollbackfailed": "Kitawīdisnas etwārtai wartīnsna ni izpalla",
"cantrollback": "Ni mazīngi etwārtai wartīntun redigīsenin, beggi ast tēr aīna šisse pāusas wersiōni.",
@@ -1492,7 +1484,6 @@
"import": "Impōrtis pāusans",
"importinterwiki": "Transwiki impōrts",
"import-interwiki-text": "Etrīnkais wiki be pāusas tītelin per impōrtisnan.\nWeriōnin dātai be autōras pabilīsnas wīrst būwušas erlaikātan.\nWisāi transwikis impōrtas dīlasenei ast enpeisātan en [[Special:Log/import|impōrtas registeŗu]].",
- "import-interwiki-source": "Aps šisses wiki/pāusan:",
"import-interwiki-history": "Kōpis wissans šisse pāusas redigīsnas istōrijan",
"import-interwiki-templates": "Ebimmais wissans šablōnins",
"import-interwiki-submit": "Impōrtis",
@@ -1848,7 +1839,6 @@
"exif-gpsspeed-n": "Winzalai",
"exif-gpsdirection-t": "Arwis līnkis",
"exif-gpsdirection-m": "Magnetiskas līnkis",
- "watchlistall2": "wisāi",
"namespacesall": "wisāi",
"monthsall": "wisāi",
"confirmemail": "Padrūktinais e-mail adressin",
@@ -1909,7 +1899,6 @@
"watchlisttools-view": "Waidinnais kitawīdinsnans en listin stēisan nadirītan",
"watchlisttools-edit": "Wīdais be redigīs listin stēisan nadirītan",
"watchlisttools-raw": "Redigīs listis appun sen tekstas ēnrankin",
- "unknown_extension_tag": "NIwaīsts plattinsenes zentlitajs \"$1\"",
"version": "Wersiōni",
"version-extensions": "Instalītai plattinsenei",
"version-specialpages": "Speciālai pāusai",
@@ -1920,7 +1909,7 @@
"version-parser-extensiontags": "Parseras plattinsenes zentlitajai",
"version-parser-function-hooks": "Parseras funkciōnis ānsai",
"version-hook-name": "Ānsas pabilisnā",
- "version-version": "(Wersiōni $1)",
+ "version-version": "($1)",
"version-license": "Licēnci",
"version-software": "Instalītas prōgraminis",
"version-software-version": "Wersiōni",
@@ -1974,5 +1963,6 @@
"htmlform-selectorother-other": "Kitā",
"revdelete-restricted": "ensadinnais arāikinsenins per perwaldītajans",
"revdelete-unrestricted": "āupausinais arāikinsenins per perwaldītajans",
- "rightsnone": "(nisātausna)"
+ "rightsnone": "(nisātausna)",
+ "revdelete-summary": "kitawīdisnan ebpeisāsenis"
}
diff --git a/languages/i18n/ps.json b/languages/i18n/ps.json
index dc004017..cade0ad8 100644
--- a/languages/i18n/ps.json
+++ b/languages/i18n/ps.json
@@ -4,7 +4,8 @@
"Ahmed-Najib-Biabani-Ibrahimkhel",
"Kaganer",
"Umherirrender",
- "아라"
+ "아라",
+ "عثمان خان شاہ"
]
},
"tog-underline": "کرښنې تړنې:",
@@ -31,7 +32,7 @@
"tog-shownumberswatching": "د کتونکو کارنانو شمېر ښکاره کول",
"tog-oldsig": "اوسنی لاسليک:",
"tog-fancysig": "لاسليک د ويکي متن په توگه په پام کې نيول (د خپلکاره تړن د تړلو پرته)",
- "tog-uselivepreview": "ژوندۍ مخليدنه کارول (آزمېښتي)",
+ "tog-uselivepreview": "ژوندۍ مخليدنه کارول",
"tog-forceeditsummary": "د يوه تش سمون لنډيز په ورکولو سره دې خبر راکړل شي",
"tog-watchlisthideown": "په کتنلړ کې زما سمونې پټول",
"tog-watchlisthidebots": "په کتنلړ کې د روباټ سمونې پټول",
@@ -206,6 +207,7 @@
"otherlanguages": "په نورو ژبو کې",
"redirectedfrom": "(له $1 نه مخ گرځېدلی)",
"redirectpagesub": "د مخ گرځونې مخ",
+ "redirectto": "نوې مخ گرځېدنه:",
"lastmodifiedat": "دا مخ وروستی ځل په $2، $1 بدلون موندلی.",
"viewcount": "همدا مخ {{PLURAL:$1|يو وار|$1 واره}} کتل شوی.",
"protectedpage": "ژغورلی مخ",
@@ -215,6 +217,7 @@
"view-pool-error": "اوبخښۍ، دم گړۍ پالنگران د ډېر بارېدو ستونزې سره مخامخ شوي.\nډېر زيات کارنان د همدې مخ د کتلو په هڅه کې دي.\nلطفاً د دې مخ د کتلو د بيا هڅې نه دمخه يو څو شېبې صبر وکړۍ.\n\n$1",
"pool-queuefull": "د بهير صف ډک دی",
"pool-errorunknown": "ناجوته ستونزه",
+ "poolcounter-usage-error": "د کارېدلو تېروتنه: $1",
"aboutsite": "د {{SITENAME}} په اړه",
"aboutpage": "Project:په اړه",
"copyright": "دا مېنځپانگه د $1 له مخې ستاسې لاسرسي ته پرته ده، خو هغه څه چې په خلاف يې وييل شوي.",
@@ -224,6 +227,7 @@
"disclaimers": "ردادعاليکونه",
"disclaimerpage": "Project:ټولگړی ردادعاليک",
"edithelp": "د لارښود سمون",
+ "helppage-top-gethelp": "لارښود",
"mainpage": "لومړی مخ",
"mainpage-description": "لومړی مخ",
"policy-url": "Project:تگلاره",
@@ -255,6 +259,8 @@
"hidetoc": "پټول",
"collapsible-collapse": "پرځول",
"collapsible-expand": "غځول",
+ "confirmable-yes": "هو",
+ "confirmable-no": "نه",
"thisisdeleted": "$1 کتل او يا بيازېرمل؟",
"viewdeleted": "$1 کتل؟",
"restorelink": "{{PLURAL:$1|يو ړنگ شوی سمون|$1 ړنگ شوي سمونونه}}",
@@ -284,6 +290,8 @@
"nospecialpagetext": "<strong>تاسې د يو ناسم ځانگړي مخ غوښتنه کړې.</strong>\n\nتاسې کولای شی چې د سمو ځانگړو مخونو لړليک په [[Special:SpecialPages|{{int:specialpages}}]] کې ومومۍ.",
"error": "تېروتنه",
"databaseerror": "د ډاټابېز تېروتنه",
+ "databaseerror-query": "تپوس: $1",
+ "databaseerror-function": "کړنه: $1",
"databaseerror-error": "تېروتنه: $1",
"laggedslavemode": "'''گواښنه:''' په دې مخ کې کېدای شي تازه اوسمهالېدنې نه وي.",
"readonly": "توکبنسټ تړل شوی",
@@ -313,7 +321,7 @@
"viewsourcetext": "تاسې د دې مخ سرچينه کتلی او لمېسلی شی:",
"viewyourtext": "تاسې په دې مخ کې د '''خپلو سمونونو''' سرچينه کتلی او لمېسلی شی:",
"protectedinterface": "دا مخ د دې ويکي د ساوترې د ليدنمخ متن لري، او د ورانکارۍ په خاطر ژغورل شوی.\nپه ټولو ويکي گانو کې د ژباړې د ورگډولو او يا هم د ژباړې د سمون او بدلون لپاره د مېډياويکي د ځايتابه پروژه [//translatewiki.net/ translatewiki.net] وکاروۍ.",
- "editinginterface": "'''گواښنه:''' تاسو په يوه داسې مخ کې بدلون راولی کوم چې د يوې پوستکالی د ليدنمخ متن په توگه کارېږي.\nپه همدې مخ کې بدلون راوستل به د نورو کارنانو د ليدنمخ بڼه اغېزمنه کړي.\nد ژباړې د ورگډولو او بدلون لپاره، مهرباني وکړی د [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]، وېبځي ته ولاړ شی. دا وېبځی د ميډياويکي د ځايتابه پروژه ده.",
+ "editinginterface": "<strong>گواښنه:</strong> تاسې چې په دې مخ کې بدلون راولۍ همدا مخ د يوې ساوترې د ليدنمخ متن په توگه کارېږي.\nد دې مخ بدلون به د ټولو کارنانو لپاره د ليدنمخ بڼه اغېزمنه کړي.",
"namespaceprotected": "تاسې د '''$1''' په نوم-تشيال کې د مخونو د سمولو اجازه نه لرۍ.",
"customcssprotected": "تاسې د دې CSS مخ د سمولو اجازه نه لرۍ، دا ځکه چې دا مخ د بل کارن شخصي امستنې لري.",
"customjsprotected": "تاسې د دې جاواسکرېپټ مخ د سمولو اجازه نه لرۍ، دا ځکه چې دا مخ د بل کارن شخصي امستنې لري.",
@@ -455,7 +463,6 @@
"passwordreset-emailsent": "د پټنوم بيا پرځای کېدنې لپاره برېښليک درولېږل شو.",
"passwordreset-emailsent-capture": "د پټنوم بياپرځای کېدنې لپار مو يو برېښليک درولېږه، برېښليک په لاندې توگه ښودل شوی.",
"changeemail": "برېښليک پته بدلول",
- "changeemail-header": "د گڼون برېښليک پته بدلول",
"changeemail-text": "د برېښليک پتې بدلولو لپاره مو همدا فورمه ډکه کړۍ. د دې بدلون د تاييد لپاره بايد پټنوم مو ورکړۍ.",
"changeemail-no-info": "دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.",
"changeemail-oldemail": "اوسنۍ برېښليک پته:",
@@ -463,7 +470,7 @@
"changeemail-none": "(هېڅ)",
"changeemail-password": "ستاسې د{{SITENAME}} پټنوم:",
"changeemail-submit": "برېښليک بدلول",
- "changeemail-cancel": "ناگارل",
+ "changeemail-throttled": "تاسې څو واره هڅه کړې چې غونډال ته ورننوځۍ.\nلطفاً د بيا هڅې نه مخکې $1 شېبې تم شۍ.",
"bold_sample": "زغرد متن",
"bold_tip": "زغرد متن",
"italic_sample": "رېوند متن",
@@ -488,11 +495,11 @@
"preview": "مخليدنه",
"showpreview": "مخليدنه",
"showdiff": "بدلونونه ښکاره کول",
- "anoneditwarning": "'''يادونه:''' تاسې غونډال ته نه ياست ننوتي. ستاسې IP پته به د دې مخ د سمونونو په پېښليک کې ثبت شي.",
+ "anoneditwarning": "<strong>گواښنه:</strong> تاسې غونډال کې نه ياست ننوتي. که تاسې کوم سمونونه ترسره کوۍ نو ستاسې IP پته به ټولو ته د دې مخ د سمونونو په پېښليک کې ښکاري. که تاسې په خپل نوم <strong>[$1 کې ننوځئ]</strong> يا <strong>[$2 يو گڼون جوړ کړئ]</strong>، نو ستاسې سمونونه به ستاسې کارن-نوم اړونده ثبت شي چې ډېرې نورې گټې هم لري.",
"anonpreviewwarning": "''تاسې غونډال ته نه ياست ننوتي. خوندي کولو سره به ستاسې IP پته به د دې مخ د سمونونو په پېښليک کې ثبت شي.''",
"missingcommenttext": "لطفاً تبصره لاندې وليکۍ.",
"summary-preview": "د لنډيز مخليدنه:",
- "subject-preview": "موضوع/سرليک مخکتنه:",
+ "subject-preview": "سکالو/سرليک مخکتنه:",
"blockedtitle": "پر کارن بنديز لگېدلی",
"blockedtext": "'''ستاسې د کارن-نوم يا آی پي پتې مخنيوی شوی.'''\n\nهمدا بنديز د $1 له خوا پر تاسې لږېدلی. او د همدې کړنې سبب ''$2'' دی.\n\n* د بنديز د پېل نېټه: $8\n* د بنديز د پای نېټه: $6\n* بنديزونه دي پر: $7\n\nتاسې کولای شی چې د $1 او يا هم د يو بل [[{{MediaWiki:Grouppage-sysop}}|پازوال]] سره اړيکې ټينگې کړی او د بنديز ستونزې مو هوارې کړی.\nتاسې نه شی کولای چې د 'کارن ته برېښلک لېږل' کړنې نه گټه پورته کړی تر څو چې تاسې د خپل گڼون په [[Special:Preferences|غوره توبونو]] کې يوه کره برېښليک پته نه وي ځانگړې کړې او تر دې بريده چې پر تاسې د هغې د کارولو بنديز نه وي لگېدلی.\nستاسې د دم مهال آی پي پته $3 ده، او ستاسې د بنديز پېژند #$5 دی. مهرباني وکړۍ د خپلې يادونې پر مهال د دغو دوو څخه د يوه او يا هم د دواړو ورکول مه هېروۍ.",
"autoblockedtext": "په خپلکاريزه توگه ستاسې پر IP پتې بنديز لگېدلی، دا د دې په خاطر چې ستاسې پته د بل چا له خوا چې $1 پرې بنديز لگولی، کارېدلې.\nاو د بنديز سبب يې دا دی:\n\n:''$2''\n\n* د بنديز د پيل نېټه: $8\n* د بنديز د پای نېټه: $6\n* د بنديز د موخې سړی: $7\n\nتاسې کولای شی چې د $1 سره او يا هم د [[{{MediaWiki:Grouppage-sysop}}|پازوالانو]] له ډلې نه يو چا سره اړيکې ټينگې کړی او د بنديز په اړه مو ورسره خبرې وکړۍ.\n\nدا مه هېروۍ چې تاسې د \"کارن ته برېښليک لېږل\" له اسانتياوؤ نه ګټه نه شی اخيستلای تر څو چې ستاسې د نومليکنې په وخت کې يا [[Special:Preferences|ستاسې د غوره توبونو په امستنو]] کې يوه کره برېښليک پته نه وي ځانگړې شوې، او يا هم د برېښليک لېږلو د چارو په کارولو مو بنديز نه وي لگېدلی.\n\nستاسې IP پته $3 ده او ستاسې د بنديز پېژند #$5 دی.\nد بنديز اړونده د اړيکو نيولو په وخت کې لطفاً د پورتني مالوماتو يادونه وکړۍ.",
@@ -554,6 +561,8 @@
"edit-gone-missing": "د دې مخ اوسمهالول و نه کړای شول.\nداسې ښکاري چې دا مخ ړنگ شوی.",
"edit-conflict": "د سمولو خنډ",
"edit-no-change": "ستاسې سمون بابېزه وګڼل شو، دا ځکه چې تاسې په متن کې کوم بدلون نه دی راوستلی.",
+ "postedit-confirmation-created": "مخ جوړ شوی.",
+ "postedit-confirmation-restored": "مخ بيازېرمل شوی.",
"postedit-confirmation-saved": "ستاسې سمون خوندي شو.",
"edit-already-exists": "په دې نوم يو نوی مخ جوړ نه شو.\nپدې نوم د پخوا نه يو مخ شته.",
"defaultmessagetext": "تلواليزه پيغام متن",
@@ -572,7 +581,7 @@
"currentrev": "اوسنۍ بڼه",
"currentrev-asof": "د $1 پورې تازه بڼه",
"revisionasof": "د $1 بڼه",
- "revision-info": "د $1 پورې شته مخليدنه، د $2 لخوا ترسره شوې",
+ "revision-info": "تر $1 پورې شته مخليدنه، د {{GENDER:$6|$2}}$7 لخوا ترسره شوې",
"previousrevision": "← زړه بڼه",
"nextrevision": "← نوې بڼه",
"currentrevisionlink": "اوسنۍ بڼه",
@@ -593,7 +602,7 @@
"history-feed-empty": "ستاسې غوښتلی مخ نه شته.\nکېدای شي چې دا له ويکي نه ړنگ شوی وي، او يا هم په بل نوم بدل شوی وي.\nتاسې په دې ويکي د اړوندو نوؤ مخونو لپاره [[Special:Search|د پلټنې هڅه وکړۍ]].",
"rev-deleted-comment": "(د سمون لنډيز لرې شو)",
"rev-deleted-user": "(کارن-نوم ليري شوی)",
- "rev-delundel": "ښکاره کول/ پټول",
+ "rev-delundel": "ښکارېدنه بدلول",
"rev-showdeleted": "ښکاره کول",
"revisiondelete": "د ړنگولو/ناړنگولو مخکتنې",
"revdelete-no-file": "ځانگړې شوې دوتنه نشته.",
@@ -601,7 +610,7 @@
"revdelete-legend": "د ښکارېدنې محدوديتونه ټاکل",
"revdelete-hide-text": "د مخکتنې متن",
"revdelete-hide-image": "د دوتنې مېنځپانگه پټول",
- "revdelete-hide-name": "کړنه او موخه پټول",
+ "revdelete-hide-name": "کړنې او موخې پټول",
"revdelete-hide-comment": "د سمون لنډيز",
"revdelete-hide-user": "د سمونگر کارن-نوم/آی پي پته",
"revdelete-radio-same": "(مه بدلوه)",
@@ -610,7 +619,7 @@
"revdelete-log": "سبب:",
"revdel-restore": "ښکارېدنه بدلول",
"pagehist": "د مخ پېښليک",
- "deletedhist": "د ړنگولو پېښليک",
+ "deletedhist": "ړنگېدلی پېښليک",
"revdelete-reason-dropdown": "*د ړنگولو ټولگړي سببونه\n** د خپرېدو د رښتو سرغړونه\n** ناسم شخصي مالومات\n** پارونکي او بلواگر مالومات",
"revdelete-otherreason": "بل/اضافي سبب:",
"revdelete-reasonotherlist": "بل سبب",
@@ -625,9 +634,11 @@
"mergehistory-invalid-source": "د سرچينې مخ بايد يو سم سرليک وي.",
"mergehistory-invalid-destination": "د موخې مخ بايد يو سم سرليک وي.",
"mergehistory-reason": "سبب:",
+ "mergelog": "د اخږلو يادښت",
"revertmerge": "بېلول",
"history-title": "د \"$1\" د مخليدنې پېښليک",
"difference-title": "د \"$1\" د بڼو تر مېنځ توپير",
+ "difference-title-multipage": "د \"$1\" او \"$2\" مخونو تر مېنځ توپير",
"difference-multipage": "(د مخونو تر مېنځ توپير)",
"lineno": "$1 کرښه:",
"compareselectedversions": "ټاکلې بڼې سره پرتلل",
@@ -657,8 +668,10 @@
"searchprofile-advanced-tooltip": "د خپل خوښې په نوم-تشيالونو کې پلټل",
"search-result-size": "$1 ({{PLURAL:$2|1 ويی|$2 وييونه}})",
"search-result-category-size": "{{PLURAL:$1|1 غړی|$1 غړي}} ({{PLURAL:$2|1 څېرمه وېشنيزه|$2 څېرمه وېشنيزې}}، {{PLURAL:$3|1 دوتنه|$3 دوتنې}})",
- "search-redirect": "(د $1 مخ ګرځونه)",
+ "search-redirect": "(د $1 مخ گرځېدنه)",
"search-section": "(برخه $1)",
+ "search-category": "(وېشنيزه $1)",
+ "search-file-match": "(د دوتنو مېنځپانگې سره ورته دي)",
"search-suggest": "آيا همدا مو موخه وه: $1",
"search-interwiki-caption": "خورلڼې پروژې",
"search-interwiki-default": "پايلې له $1 څخه:",
@@ -667,18 +680,20 @@
"searchrelated": "اړونده",
"searchall": "ټول",
"showingresults": "دلته لاندې تر {{PLURAL:$1|'''1''' پايله|'''$1''' پايلې}} ښکاره شوي پيل له #'''$2''' شوی.",
- "showingresultsheader": "د «'''$4'''» لپاره {{PLURAL:$5|له '''$1''' نه تر '''$3''' پايله|له '''$1 نه تر $2''' پايلې، ټولې پايلې '''$3''' }}",
+ "showingresultsinrange": "دلته لاندې د #<strong>$2</strong> تر #<strong>$3</strong> حدونو پورې {{PLURAL:$1|<strong>1</strong> پايله|<strong>$1</strong> پايلې}} ښکارېږي.",
+ "search-showingresults": "{{PLURAL:$4|<strong>$1</strong> پايله، ټولټال <strong>$3</strong>|<strong>$1 - $2</strong> پايلې، ټولټال <strong>$3</strong>}}",
"search-nonefound": "ستاسې دغوښتنې اړونده پايلې و نه موندل شوې.",
"powersearch-legend": "ژوره پلټنه",
"powersearch-ns": "په نوم-تشيالونو کې پلټنه:",
"powersearch-togglelabel": "نښه کول:",
"powersearch-toggleall": "ټول",
"powersearch-togglenone": "هېڅ",
+ "powersearch-remember": "د راتلونکو پلټنو لپاره همدا ټاکنې په ياد ساتل",
"search-external": "باندنۍ پلټنه",
"preferences": "غوره توبونه",
"mypreferences": "غوره توبونه",
"prefs-edits": "د سمونو شمېر:",
- "prefsnologintext2": "د غوره توبونو بدلون لپاره مو $1 ترسره کړئ.",
+ "prefsnologintext2": "د غوره توبونو بدلولو لپاره مو غونډال ته ننوځئ.",
"prefs-skin": "پوښۍ",
"skin-preview": "مخکتنه",
"datedefault": "هېڅ نه ټاکل",
@@ -687,6 +702,7 @@
"prefs-personal": "د کارن پېژنليک",
"prefs-rc": "وروستي بدلونونه",
"prefs-watchlist": "کتنلړ",
+ "prefs-editwatchlist": "کتنلړ سمول",
"prefs-watchlist-days": "د ورځو شمېر چې په کتنلړ کې به ښکاري:",
"prefs-watchlist-days-max": "حد اکثر $1 {{PLURAL:$1|ورځ|ورځې}}",
"prefs-watchlist-edits-max": "د شمېر اکثر بريد: 1000",
@@ -746,7 +762,7 @@
"gender-male": "نارينه",
"gender-female": "ښځينه",
"email": "برېښليک",
- "prefs-help-realname": "د آر نوم ليکل ستاسې په خوښه دی خو که تاسې خپل آر نوم وټاکۍ پدې سره به ستاسې ټول کارونه او ونډې ستاسې د نوم په اړوندولو کې وکارېږي.",
+ "prefs-help-realname": "آر نوم ورکول ستاسې د خوښې کار دی.\nکه تاسې خپل آر نوم ورکړۍ، نو ستاسې ټولې کړنې به ستاسې په نوم اړوندې شي.",
"prefs-help-email": "د برېښليک ورکړه ستاسې په خوښه ده، خو په ورکړې سره به يې د يوه نوي پټنوم د لېږلو چار آسانه کړي هغه هم کله چې تاسې نه خپل پټنوم هېر شوی وي.",
"prefs-help-email-others": "تاسې دا هم ټاکلی شی چې نور کارنان ستاسې د خبرو اترو او يا د کارن مخ يوې تړنې له لارې له تاسې سره برېښليکي اړيکه ونيسي.\nد اړيکو ټينگولو په وخت کې به ستاسې برېښليک پته نورو کارنانو ته نه ښکاري.",
"prefs-help-email-required": "ستاسو د برېښليک پته پکار ده.",
@@ -809,6 +825,7 @@
"right-minoredit": "سمونونه واړه په نخښه کول",
"right-move": "مخونه لېږدول",
"right-move-subpages": "مخونه د خپلو څېرمه مخونو سره لېږدول",
+ "right-move-categorypages": "د وېشنيزې مخونه لېږدول",
"right-movefile": "دوتنې لېږدول",
"right-upload": "دوتنې پورته کول",
"right-upload_by_url": "د يو URL نه دوتنې پورته کول",
@@ -844,6 +861,7 @@
"action-createaccount": "دا گڼون جوړول",
"action-minoredit": "دا سمون وړوکی په نخښه کول",
"action-move": "همدا مخ لېږدول",
+ "action-move-categorypages": "د وېشنيزې مخونه لېږدول",
"action-movefile": "همدا دوتنه لېږدول",
"action-upload": "همدا دوتنه پورته کول",
"action-upload_by_url": "دا دوتنه له يوه URL نه پورته کول",
@@ -872,6 +890,7 @@
"recentchanges": "وروستي بدلونونه",
"recentchanges-legend": "د ورستي بدلونو خوښنې",
"recentchanges-summary": "په دې مخ د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ.",
+ "recentchanges-noresult": "د ټاکلې مودې بدلونونه کې يو يې هم د دغو معيارونو سره همغاړي نه دي.",
"recentchanges-feed-description": "همدلته د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ او وگورۍ چې څه پېښ شوي.",
"recentchanges-label-newpage": "دغه سمون يو نوی مخ جوړ کړی",
"recentchanges-label-minor": "دا يو وړکی سمون دی",
@@ -881,7 +900,7 @@
"recentchanges-legend-heading": "'''لنډونونه:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|د نويو مخونو لړليک]] هم وگورئ)",
"rcnotefrom": "دلته لاندې د <strong>$2</strong> څخه راپدېخوا پېښ شوي بدلونونه راغلي (تر <strong>$1</strong> پورې ښکاري).",
- "rclistfrom": "هغه نوي بدلونونه ښکاره کول چې له $3 $2 نه پيلېږي",
+ "rclistfrom": "نوي بدلونونه چې له $3، $2 څخه پيلېږي ښکاره کول",
"rcshowhideminor": "وړې سمونې $1",
"rcshowhideminor-show": "ښکاره کول",
"rcshowhideminor-hide": "پټول",
@@ -908,7 +927,8 @@
"minoreditletter": "و",
"newpageletter": "ن",
"boteditletter": "ر",
- "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کارن|کارنان}} يې ګوري]",
+ "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کتونکی کارن|کتونکي کارنان}}]",
+ "rc_categories": "د وېشنيزو بريدونه (په \"|\" بېلول)",
"rc_categories_any": "هر يو",
"rc-change-size-new": "$1 {{PLURAL:$1|بايټ|بايټونه}} د بدلون وروسته",
"newsectionsummary": "/* $1 */ نوې برخه",
@@ -930,9 +950,9 @@
"uploadnologintext": "د دوتنې پورته کولو لپاره بايد $1",
"uploaderror": "د پورته کولو ستونزه",
"uploadtext": "د دوتنې د پورته کېدو لپاره لاندينی چوکاټ وکاروۍ.\nکه چېرته د پخونيو پورته شويو دوتنو کتل او پلټل غواړۍ نو [[Special:FileList|د پورته شويو دوتنو لړليک]] ته ورشۍ، [[Special:Log/upload|د (بيا) پورته شويو دوتنو يادښتونه]] او [[Special:Log/delete|د ړنگېدو يادښتونه]] هم کتلای شی.\n\nددې لپاره چې يوه مخ ته انځور ورواچوی، نو بيا پدې ډول تړنې (لېنک) وکاروی\n* د يوې دوتنې د بشپړې بڼې د کارولو په موخه د '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' کوډ وکاروۍ.\n* د '۲۰۰ پېکسل' په کچه د 'بټنوک' په توگه د يوې دوتنې کارول چې د مخ کيڼې څنډې کې او ترلاندې 'د انځور څرگندونې' ولري، نو د دې موخې لپاره د '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|بټنوک|کيڼ|د انځور څرگندونې]]</nowiki></code>''' کوډ وکاروۍ.\n* د انځور د ښودلو نه پرته، د دوتنې سره د سيخې تړنې لپاره د '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' کوډ وکاروۍ.",
- "upload-permitted": "د پرېښودلو دوتنو ډولونه: $1.",
- "upload-preferred": "د غوره دوتنو ډولونه: $1.",
- "upload-prohibited": "د منع شويو دوتنو ډولونه: $1.",
+ "upload-permitted": "د پرېښلې {{PLURAL:$2|دوتنې ډول|دوتنو ډولونه}}: $1.",
+ "upload-preferred": "د غوره {{PLURAL:$2|دوتنې ډول|دوتنو ډول}}: $1.",
+ "upload-prohibited": "د ناپرېښلې {{PLURAL:$2|دوتنې ډول|دوتنو ډولونه}}: $1.",
"uploadlogpage": "د پورته شويو دوتنو يادښت",
"uploadlogpagetext": "دا لاندې د نوو پورته شوو دوتنو لړليک دی.",
"filename": "د دوتنې نوم",
@@ -954,8 +974,8 @@
"illegal-filename": "د دوتنې نوم نه دی پرېښل شوی.",
"unknown-error": "يوه ناڅرګنده تېروتنه رامېنځته شوه.",
"tmp-create-error": "لنډمهاله دوتنه جوړېدای نه شي",
- "fileexists": "د پخوا نه پدې نوم يوه دوتنه شته، که تاسو ډاډه نه ياست او يا هم که تاسو غواړۍ چې بدلون پکې راولۍ، لطفاً <strong>[[:$1]]</strong> وگورۍ.\n[[$1|بټنوک]]",
- "fileexists-extension": "په همدې نوم يوه بله دوتنه د پخوا نه شته: [[$2|thumb]]\n* د پورته کېدونکې دوتنې نوم: <strong>[[:$1]]</strong>\n* د پخوا نه شته دوتنه: <strong>[[:$2]]</strong>\nلطفاً يو داسې نوم وټاکی چې د پخوانۍ دوتنې سره توپير ولري.",
+ "fileexists": "د پخوا څخه پدې نوم يوه دوتنه شته، که {{GENDER:|تاسې}} پرې ډاډمن نه ياست چې بدلون پکې راولۍ، نو لطفاً <strong>[[:$1]]</strong> وگورئ.\n[[$1|بټنوک]]",
+ "fileexists-extension": "په دې نوم يوه بله دوتنه د پخوا څخه شته: [[$2|بټنوک]]\n* د پورته کېدونکې دوتنې نوم: <strong>[[:$1]]</strong>\n* د پخوانۍ موجودې دوتنې نوم: <strong>[[:$2]]</strong>\nآيا تاسې غواړۍ چې يو داسې بېل نوم ټاکۍ چې د پخوانۍ دوتنې سره توپير ولري؟",
"fileexists-forbidden": "د پخوا نه پدې نوم يوه دوتنه شته، او په دې نوم بله دوتنه نه پورته کېږي.\nکه تاسې بيا هم د خپلې دوتنې پورته کول غواړۍ، نو لطفاً بېرته وګرځۍ او همدغه دوتنه بيا په يوه نوي نوم پورته کړی.\n[[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "همدا دوتنه د {{PLURAL:$1|لاندينۍ دوتنې|لاندينيو دوتنو}} غبرگه لمېسه ده:",
"uploadwarning": "د پورته کولو گواښ",
@@ -976,13 +996,17 @@
"upload-warning-subj": "د پورته کولو گواښ",
"upload-proto-error": "ناسم پروتوکول",
"upload-file-error": "کورنۍ ستونزه",
+ "upload-misc-error": "د پورته کېدنې نامالومه تېروتنه",
"upload-http-error": "د HTTP يوه ستونزه رامېنځ ته شوې: $1",
"backend-fail-notexists": "د $1 په نوم دوتنه نشته.",
"backend-fail-delete": "د \"$1\" دوتنه ړنګه نه شوه.",
"backend-fail-alreadyexists": "د $1 دوتنه له پخوا نه شته.",
+ "backend-fail-move": "د \"$1\" دوتنه \"$2\" ته و نه ليږدېده.",
+ "backend-fail-opentemp": "لنډمهاله دوتنه و نه پرانيستل شوه.",
"backend-fail-read": "د \"$1\" دوتنه نه شي لوستل کېدای.",
"backend-fail-create": "د \"$1\" په دوتنه کې نور څه و نه ليکل شول.",
"zip-wrong-format": "ځانگړې شوې دوتنه يوه ZIP دوتنه نه وه.",
+ "uploadstash-refresh": "د دوتنو لړليک بياتازه کول",
"img-auth-accessdenied": "لاسرسی رد شو",
"img-auth-nofile": "د $1 په نوم کومه دوتنه نشته.",
"http-invalid-url": "ناسم URL: $1",
@@ -994,7 +1018,8 @@
"license-header": "منښتليک:",
"nolicense": "هېڅ نه دي ټاکل شوي",
"license-nopreview": "(مخليدنه نشته)",
- "upload_source_file": "(ستاسو په کمپيوټر کې يوه دوتنه)",
+ "upload_source_file": "(ستاسې کمپيوټر کې ستاسې ټاکلې دوتنه)",
+ "listfiles-delete": "ړنگول",
"listfiles-summary": "همدا ځانگړی مخ ټولې پورته شوې دوتنې ښکاره کوي.",
"listfiles_search_for": "د رسنۍ نوم پلټنه:",
"imgfile": "دوتنه",
@@ -1006,6 +1031,7 @@
"listfiles_size": "کچه (بايټونه)",
"listfiles_description": "څرگندونه",
"listfiles_count": "بڼې",
+ "listfiles-show-all": "د انځورونو زړې بڼې شاملول",
"listfiles-latestversion": "اوسنۍ بڼه",
"listfiles-latestversion-yes": "هو",
"listfiles-latestversion-no": "نه",
@@ -1034,7 +1060,10 @@
"filepage-nofile-link": "په دې نوم کومه دوتنه نشته، خو تاسې يې [$1 پورته کولی شی].",
"uploadnewversion-linktext": "د همدغې دوتنې نوې بڼه پورته کول",
"shared-repo-from": "د $1 لخوا",
+ "shared-repo-name-wikimediacommons": "ويکيمېډيا کامنز",
"upload-disallowed-here": "تاسې د دې دوتنې دپاسه نشی ليکلی.",
+ "filerevert": "$1 بيااړول",
+ "filerevert-legend": "دوتنه بيااړول",
"filerevert-comment": "سبب:",
"filerevert-submit": "په څټ گرځول",
"filedelete": "$1 ړنگول",
@@ -1054,18 +1083,18 @@
"download": "ښکته کول",
"unwatchedpages": "ناکتلي مخونه",
"listredirects": "د ورگرځېدنو لړليک",
+ "listduplicatedfiles": "د دوه گونو دوتنو لړليک",
"unusedtemplates": "ناکارېدلې کينډۍ",
"unusedtemplateswlh": "نور تړنونه",
"randompage": "ناټاکلی مخ",
"randompage-nopages": "په لانديني {{PLURAL:$2|نوم-تشيال|نوم-تشيالونو}} کې هېڅ کوم مخ نشته: $1.",
"randomincategory": "په وېشنيزه کې ناټاکلی مخ",
- "randomincategory-selectcategory": "يو ناټاکلی مخ له وېشنيزې موندل: $1 $2.",
- "randomincategory-selectcategory-submit": "ورځه",
+ "randomincategory-category": "وېشنيزه:",
+ "randomincategory-legend": "په وېشنيزه کې ناټاکلی مخ",
"randomredirect": "ناټاکلی ورگرځېدنه",
"statistics": "شمار",
"statistics-header-pages": "د مخونو شمار",
"statistics-header-edits": "د سمونو شمار",
- "statistics-header-views": "د کتنو شمار",
"statistics-header-users": "د کارنانو شمار",
"statistics-header-hooks": "بل شمار",
"statistics-articles": "مېنځپانگيز مخونه",
@@ -1074,12 +1103,9 @@
"statistics-files": "پورته شوې دوتنې",
"statistics-edits": "د {{SITENAME}} د جوړېدو راهيسې د مخونو سمون",
"statistics-edits-average": "پر يوه مخ د سمون منځوۍ کچه",
- "statistics-views-total": "ټولټال کتنې",
- "statistics-views-peredit": "د هر سمون په سر کتنې",
"statistics-users": "ثبت شوي [[Special:ListUsers|کارنان]]",
"statistics-users-active": "فعاله کارنان",
"statistics-users-active-desc": "هغه کارنان چې په {{PLURAL:$1|وروستۍ ورځ|وروستيو $1 ورځو}} کې فعاله ونډه لرلې",
- "statistics-mostpopular": "ډېر کتل شوي مخونه",
"pageswithprop": "د مخ ځانتياو څخه برخمن مخونه",
"pageswithprop-legend": "د مخ ځانتياو څخه برخمن مخونه",
"pageswithprop-prop": "د ځانتيا نوم:",
@@ -1109,7 +1135,6 @@
"uncategorizedtemplates": "ناوېشلې کينډۍ",
"unusedcategories": "ناکارېدلې وېشنيزې",
"unusedimages": "ناکارېدلې دوتنې",
- "popularpages": "نامتو مخونه",
"wantedcategories": "غوښتلې وېشنيزې",
"wantedpages": "غوښتلي مخونه",
"wantedfiles": "غوښتلې دوتنې",
@@ -1135,6 +1160,7 @@
"protectedpages-expiry": "پای نېټه",
"protectedpages-reason": "سبب",
"protectedpages-unknown-timestamp": "ناجوت",
+ "protectedpages-unknown-performer": "ناڅرگنده کارن",
"protectedtitles": "ژغورلي سرليکونه",
"listusers": "کارن لړليک",
"listusers-editsonly": "يوازې هغه کارنان چې سمونونه يې کړي ښکاره کول",
@@ -1150,12 +1176,13 @@
"unusedimagestext": "دا لاندينۍ دوتنې په هېڅ کوم مخ کې نه دي ټومبېدلي. لطفاً په پام کې وساتۍ چې نور وېبځايونه به د دغو دوتنو له يو دوتنې سره يو راسن يو آر ال (URL) ولري او لا تر اوسه به دوتنه د فعالې کارېدنې سره سره دلته پرته وي.",
"notargettitle": "بې موخې",
"nopagetitle": "داسې کوم مخ نشته",
+ "nopagetext": "کوم مخ مو چې وښوده هغه نشته.",
"pager-newer-n": "{{PLURAL:$1|نوی 1|نوي $1}}",
"pager-older-n": "{{PLURAL:$1|زوړ 1|زاړه $1}}",
"suppress": "څارن",
"booksources": "د کتاب سرچينې",
"booksources-search-legend": "د کتابي سرچينو پلټنه",
- "booksources-go": "ورځه",
+ "booksources-search": "پلټل",
"booksources-text": "دا لاندې د هغه وېبځايونو د تړنو لړليک دی چېرته چې نوي او زاړه کتابونه پلورل کېږي، او يا هم کېدای شي چې د هغه کتاب په هکله مالومات ولري کوم چې تاسو ورپسې لټېږۍ:",
"specialloguserlabel": "ترسره کوونکی:",
"speciallogtitlelabel": "موخه (سرليک يا کارن):",
@@ -1215,6 +1242,7 @@
"listgrouprights-addgroup-self-all": "خپل گڼون کې ټولې ډلې ورگډول",
"listgrouprights-removegroup-self-all": "خپل گڼون نه ټولې ډلې ليري کول",
"listgrouprights-namespaceprotection-namespace": "نوم-تشيال",
+ "trackingcategories": "موندونکې وېشنيزې",
"trackingcategories-name": "پيغام نوم",
"mailnologin": "د لېږلو پته نشته",
"emailuser": "کارن ته برېښليک لېږل",
@@ -1261,7 +1289,7 @@
"wlheader-enotif": "برېښليک خبرونه چارنه شوې.",
"wlheader-showupdated": "هغه مخونه چې ستاسې د کتلو نه وروسته بدلون موندلی په '''روڼ''' ليک په نښه شوي.",
"wlnote": "دلته لاندې {{PLURAL:$1|وروستی بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په {{PLURAL:$2|تېر ساعت|تېرو '''$2''' ساعتونو}} کې تر $3 نېټې او $4 بجو پېښ شوي.",
- "wlshowlast": "وروستي $1 ساعتونه $2 ورځې $3 ښکاره کړه",
+ "wlshowlast": "وروستي $1 ساعتونه $2 ورځې ښکاره کول",
"watchlist-options": "د کتنلړ خوښنې",
"watching": "د کتلو په حال کې...",
"unwatching": "د نه کتلو په حال کې...",
@@ -1302,7 +1330,6 @@
"deletereasonotherlist": "بل سبب",
"deletereason-dropdown": "*د ړنگولو ټولگړی سبب\n** چټيات\n** د پوهې سره دښمني\n** د رښتو تېری\n** د ليکوال غوښتنه\n** ناسمه مخ گرځېدنه",
"delete-edit-reasonlist": "د ړنگولو سببونه سمول",
- "rollback_short": "په شابېول",
"rollbacklink": "په شابېول",
"rollbacklinkcount": "$1 {{PLURAL:$1|سمون|سمونونه}} پرشابېول",
"protectlogpage": "د ژغورنې يادښت",
@@ -1367,6 +1394,7 @@
"undelete-show-file-submit": "هو",
"namespace": "نوم-تشيال:",
"invert": "ټاکنې سرچپه کول",
+ "tooltip-invert": "په ټاکلو نومتشيالونو کې (او اړونده نومتشيال کې که په نښه شوی وي) د مخونو بدلونونو د پټولو لپاره دا بکس په نښه کړئ",
"namespace_association": "مل نومتشيال",
"blanknamespace": "(آرنی)",
"contributions": "{{GENDER:$1|کارن}} ونډې",
@@ -1397,7 +1425,7 @@
"linkshere": "دغه لانديني مخونه د '''[[:$1]]''' سره تړنې لري:",
"nolinkshere": "د '''[[:$1]]''' سره هېڅ يو مخ هم تړنې نه لري .",
"isredirect": "د مخ گرځونې مخ",
- "istemplate": "ورګډېدنه",
+ "istemplate": "ورگډېدنه",
"isimage": "د دوتنې تړنه",
"whatlinkshere-prev": "{{PLURAL:$1|پخوانی|پخواني $1}}",
"whatlinkshere-next": "{{PLURAL:$1|راتلونکی|راتلونکي $1}}",
@@ -1409,7 +1437,7 @@
"whatlinkshere-filters": "چاڼگرونه",
"block": "په کارن بنديز لگول",
"unblock": "کارن له بنديزه وېستل",
- "blockip": "په کارن بنديز لگول",
+ "blockip": "په {{GENDER:$1|کارن}} بنديز لگول",
"blockip-legend": "په کارن بنديز لگول",
"ipaddressorusername": "IP پته يا کارن نوم",
"ipbexpiry": "د پای نېټه:",
@@ -1431,7 +1459,7 @@
"ipb-unblock-addr": "له $1 بنديز ليرې کول",
"ipb-unblock": "له يوه کارن-نوم يا IP پتې بنديز ليري کول",
"ipb-blocklist": "شته بنديزونه کتل",
- "ipb-blocklist-contribs": "د $1 ونډې",
+ "ipb-blocklist-contribs": "د {{GENDER:$1|$1}} ونډې",
"unblockip": "کارن له بنديزه وېستل",
"unblockiptext": "د لاندې فورمې په کارولو سره يو بنديز شوي کارن يا آی پي پتې ته د ليکلو لاسرسی ورکولی شی.",
"ipusubmit": "دا بنديز ليرې کول",
@@ -1502,6 +1530,8 @@
"movepage-moved-redirect": "يو مخ گرځونی جوړ شو.",
"articleexists": "په همدې نوم يوه بله پاڼه د پخوا نه شته او يا خو دا نوم چې تاسې ټاکلی سم نه دی. لطفاً يو بل نوم وټاکۍ.",
"movetalk": "د خبرو اترو اړونده مخ ورسره لېږدول",
+ "movepage-page-moved": "د $1 مخ $2 ته ولېږدل شو.",
+ "movepage-page-unmoved": "د $1 مخ $2 ته و نه لېږدل شو.",
"movelogpage": "د لېږدولو يادښت",
"movelogpagetext": "دا لاندې د لېږدول شوو مخونو لړليک دی.",
"movesubpage": "{{PLURAL:$1|څېرمه مخ|څېرمه مخونه}}",
@@ -1510,6 +1540,7 @@
"movereason": "سبب:",
"revertmove": "په څټ گرځول",
"delete_and_move": "ړنگول او لېږدول",
+ "delete_and_move_text": "== د ړنگولو اړتيا ==\nد \"[[:$1]]\" په نوم مخ له پخوا څخه شته.\nآيا د دې په ړنگولو سره لېږدولو ته لاره هوارول غواړۍ؟",
"delete_and_move_confirm": "هو, دا مخ ړنگ کړه",
"immobile-source-page": "دا مخ نه لېږدېدنونکی دی",
"imageinvalidfilename": "د موخنې دوتنې نوم سم نه دی",
@@ -1541,15 +1572,18 @@
"thumbnail-more": "لويول",
"filemissing": "دوتنه ورکه ده",
"thumbnail_error": "د بټنوک د جوړېدنې ستونزه: $1",
- "import-interwiki-source": "سرچينيز ويکي/مخ:",
+ "import-interwiki-sourcewiki": "د ويکي سرچينه:",
+ "import-interwiki-sourcepage": "د سرچينې مخ:",
"import-interwiki-history": "د دې مخ د پېښليک ټولې بڼې لمېسل",
"import-interwiki-templates": "ټولې کينډۍ نغاړل",
+ "import-interwiki-submit": "رالېږدول",
"import-interwiki-namespace": "د موخې نوم-تشيال:",
"import-upload-filename": "د دوتنې نوم:",
"import-comment": "تبصره:",
"import-revision-count": "$1 {{PLURAL:$1|بڼه|بڼې}}",
+ "importnopages": "د رالېږدولو لپاره مخونه نشته.",
"importlogpage": "د واردولو يادښت",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|بڼه|بڼې}}",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|بڼه|بڼې}} راولېږدېدې",
"javascripttest": "د جاوا سکرېپټ آزمېښت",
"tooltip-pt-userpage": "ستاسې کارن مخ",
"tooltip-pt-mytalk": "ستاسې د خبرواترو مخ",
@@ -1558,6 +1592,7 @@
"tooltip-pt-mycontris": "ستاسې د ونډو لړليک",
"tooltip-pt-login": "تاسې ته په غونډال کې د ننوتلو سپارښتنه کوو، که څه هم چې دا يو اړين کار نه دی.",
"tooltip-pt-logout": "وتل",
+ "tooltip-pt-createaccount": "تاسې ته د يو گڼون د جوړولو او بيا غونډال کې ورننوتلو سپارښتنه کېږي؛ که څه هم چې دا يو اړين کار نه دی",
"tooltip-ca-talk": "د مخ د مېنځپانگې په اړه خبرې اترې",
"tooltip-ca-edit": "تاسې همدا مخ سمولای شی. لطفاً د ليکنې د خوندي کولو دمخه، د همدې ليکنې مخليدنه وگورۍ.",
"tooltip-ca-addsection": "يوه نوې برخه پيلول",
@@ -1621,26 +1656,33 @@
"siteusers": "د {{SITENAME}} {{PLURAL:$2|کارن|کارنان}} $1",
"anonusers": "د {{SITENAME}} {{PLURAL:$2|ورکنومی کارن|ورکنومي کارنان}} $1",
"creditspage": "د دې مخ کرېډټونه",
+ "simpleantispam-label": "سپام-ضد څارنه.\nدا برخه <strong>مه </strong> ډکوئ!",
"pageinfo-title": "د \"$1\" مالومات",
"pageinfo-header-basic": "بنسټيز مالومات",
"pageinfo-header-edits": "د سمون پېښليک",
"pageinfo-header-restrictions": "مخ ژغورنه",
"pageinfo-header-properties": "د مخ ځانتياوې",
"pageinfo-display-title": "ښکارېدونکی سرليک",
+ "pageinfo-default-sort": "تلواليزه اوډن کونجۍ",
"pageinfo-length": "مخ اوږدوالی (په بايټونو)",
"pageinfo-article-id": "د مخ پېژند",
"pageinfo-language": "د مخ د مېنځپانگې ژبه",
+ "pageinfo-content-model": "د مخ مېنځپانگې جوړښت",
"pageinfo-robot-policy": "ليکلړ اوډنه د روباټونو لخوا",
"pageinfo-robot-index": "پرېښل",
"pageinfo-robot-noindex": "ناپرېښل",
- "pageinfo-views": "د کتنو شمېر",
"pageinfo-watchers": "د مخ د کتونکو شمېر",
+ "pageinfo-few-watchers": "له $1 څخه لږ {{PLURAL:$1|کتونکی|کتونکي}}",
"pageinfo-redirects-name": "دې مخ ته د ورگرځونو شمېر",
"pageinfo-subpages-name": "دې مخ ته څېرمه مخونه",
"pageinfo-firstuser": "مخ جوړونکی",
"pageinfo-firsttime": "د مخ جوړېدنې نېټه",
"pageinfo-lastuser": "وروستنی سمونگر",
+ "pageinfo-lasttime": "د سمون وروستنۍ نېټه",
"pageinfo-edits": "د ټولو سمونونو شمېر",
+ "pageinfo-authors": "د بېلابېلو ليکوالو ټولټال شمېر",
+ "pageinfo-recent-edits": "د وروستني سمونونو شمېر (په تېرو $1 کې)",
+ "pageinfo-recent-authors": "د بېلابېلو ليکوالو وروستنی شمېر",
"pageinfo-toolboxlink": "د مخ مالومات",
"pageinfo-redirectsto-info": "مالومات",
"pageinfo-contentpage": "مېنځپانگيز مخ کې شمېرل شوی",
@@ -1663,8 +1705,9 @@
"file-info-size": "$1 × $2 پېکسل, د دوتنې کچه: $3, MIME بڼه: $4",
"file-nohires": "تر دې کچې لوړې بېلن نښې نشته.",
"svg-long-desc": "SVG دوتنه، نومېنلي $1 × $2 پېکسل، د دوتنې کچه: $3",
- "show-big-image": "آرنۍ دوتنه",
+ "show-big-image": "اصلي دوتنه",
"show-big-image-preview": "د همدې ليدنې کچه: $1.",
+ "show-big-image-other": "{{PLURAL:$2|بل ژورليد|نورې ژورليدنې}}: $1.",
"show-big-image-size": "$1 × $2 پېکسل",
"file-info-gif-frames": "$1 {{PLURAL:$1|چوکاټ|چوکاټونه}}",
"file-info-png-repeat": "$1 {{PLURAL:$1|ځل|ځله}} وغږېده",
@@ -1678,7 +1721,7 @@
"ilsubmit": "پلټل",
"bydate": "د نېټې له مخې",
"sp-newimages-showfrom": "هغه نوې دوتنې چې په $1 په $2 بجو پيلېږي ښکاره کول",
- "hours-abbrev": "$1ګ",
+ "hours-abbrev": "$1 گ",
"seconds": "{{PLURAL:$1|$1 ثانيه|$1 ثانيې}}",
"minutes": "{{PLURAL:$1|$1 دقيقه|$1 دقيقې}}",
"hours": "{{PLURAL:$1|$1 ساعت|$1 ساعتونه}}",
@@ -1692,6 +1735,7 @@
"minutes-ago": "$1 {{PLURAL:$1|دقيقه|دقيقې}} دمخه",
"seconds-ago": "$1 {{PLURAL:$1|ثانيه|ثانيې}} دمخه",
"monday-at": "Monday at $1",
+ "yesterday-at": "پرون په $1",
"bad_image_list": "بڼه يې په لاندې توگه ده:\n\nيواځې د لړليک توکي (هغه کرښې چې پېلېږي پر *) په پام کې نيول شوي.\nبايد چې په يوه کرښه کې لومړنۍ تړنه د يوې خرابې دوتنې سره وي.\nپه يوې کرښې باندې هر ډول وروستۍ تړنې به د استثنا په توگه وگڼلای شي، د ساري په توگه هغه مخونو کې چې يوه دوتنه پر کرښه پرته وي.",
"metadata": "مېټاډاټا",
"metadata-help": "همدا دوتنه نور اضافه مالومات هم لري، چې کېدای شي ستاسې د گڼياليزې کامرې او يا هم د ځيرڅار په کارولو سره د گڼيالېدنې په وخت کې ورسره مل شوي.\nکه همدا دوتنه د خپل آرني دريځ څخه بدله شوې وي نو ځينې تفصيلونه به په بدل شوي دوتنه کې په بشپړه توگه نه وي.",
@@ -1700,6 +1744,9 @@
"metadata-fields": "د انځور مېټاډاټا ډگرونه چې لړليک يې په همدې پيغام کې په لاندې توگه راغلی د انځور مخ په ښکارېدنه کې به هغه وخت ورگډ شي کله چې د مېټاډاټا لښتيال غځېږي.\nنور څه به په تلواليزه توگه پټ پاتې وي.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "سوروالی",
"exif-imagelength": "لوړوالی",
+ "exif-orientation": "لورموندنه",
+ "exif-xresolution": "څنډيز ژورليد",
+ "exif-yresolution": "ولاړيز ژورليد",
"exif-stripoffsets": "د انځور مالوماتځی",
"exif-datetime": "د دوتنې د بدلون وخت او نېټه",
"exif-imagedescription": "انځور سرليک",
@@ -1708,11 +1755,13 @@
"exif-software": "کارېدلې ساوترۍ",
"exif-artist": "ليکوال",
"exif-copyright": "د رښتو خاوند",
+ "exif-exifversion": "Exif بڼه",
"exif-colorspace": "رنگ تشيال",
"exif-pixelydimension": "د انځور سور",
"exif-pixelxdimension": "د انځور جگوالی",
"exif-usercomment": "د کارن تبصرې",
"exif-relatedsoundfile": "اړونده غږيزه دوتنه",
+ "exif-datetimeoriginal": "د اومتوک د جوړېدنې وخت او نېټه",
"exif-datetimedigitized": "د گڼياليز کېدنې وخت او نېټه",
"exif-fnumber": "F شمېره",
"exif-lightsource": "د رڼا سرچينه",
@@ -1831,7 +1880,6 @@
"exif-urgency-normal": "نورمال ($1)",
"exif-urgency-low": "لږ ($1)",
"exif-urgency-high": "ډېر ($1)",
- "watchlistall2": "ټول",
"namespacesall": "ټول",
"monthsall": "ټول",
"confirmemail": "برېښليک پته تاييدول",
@@ -1852,7 +1900,7 @@
"percent": "$1%",
"parentheses": "($1)",
"brackets": "[$1]",
- "imgmultipageprev": "← پخوانی مخ",
+ "imgmultipageprev": "→ تېر مخ",
"imgmultipagenext": "راتلونکی مخ →",
"imgmultigo": "ورځه!",
"imgmultigoto": "د $1 مخ ته ورځه",
@@ -1929,14 +1977,16 @@
"duplicate-defaultsort": "'''گواښنه:'''د \"$2\" تلواليزه اوډون تڼۍ تر دې پخوا ټاکلې تلواليزه اوډون تڼۍ \"$1\" پر ځای چارنه کېږي.",
"version": "بڼه",
"version-extensions": "لگېدلي شاتاړي",
- "version-skins": "پوښۍ",
+ "version-skins": "نصب شوې پوښۍ",
"version-specialpages": "ځانگړي مخونه",
"version-other": "بل",
"version-hooks": "کونډۍ",
"version-hook-name": "کونډۍ نوم",
- "version-version": "(بڼه $1)",
+ "version-version": "($1)",
"version-license": "مېډياويکي منښتليک",
"version-ext-license": "منښتليک",
+ "version-skin-colheader-name": "پوښۍ",
+ "version-ext-colheader-version": "بڼه",
"version-ext-colheader-license": "منښتليک",
"version-ext-colheader-description": "څرگندونه",
"version-ext-colheader-credits": "ليکوالان",
@@ -1949,6 +1999,9 @@
"version-software-product": "اېبره",
"version-software-version": "بڼه",
"version-entrypoints-header-url": "يو آر اېل",
+ "version-libraries-library": "کتابتون",
+ "version-libraries-version": "بڼه",
+ "redirect": "د دوتنې، کارن، مخ يا بڼې پېژند له مخې ورگرځېدنې",
"redirect-submit": "ورځه",
"redirect-value": "ارزښت:",
"redirect-user": "کارن پېژند",
@@ -1981,11 +2034,24 @@
"tag-filter-submit": "چاڼگر",
"tags-display-header": "د بدلون په لړليکونو کې ښکارېدنه",
"tags-description-header": "د مانا بشپړه څرگندونه",
+ "tags-source-header": "سرچينه",
"tags-active-header": "فعال؟",
+ "tags-actions-header": "کړنې",
"tags-active-yes": "هو",
"tags-active-no": "نه",
+ "tags-source-none": "نور نه کارېږي",
"tags-edit": "سمول",
+ "tags-delete": "ړنگول",
+ "tags-activate": "فعالول",
+ "tags-deactivate": "نافعالول",
"tags-hitcount": "$1 {{PLURAL:$1|بدلون|بدلونونه}}",
+ "tags-create-reason": "سبب:",
+ "tags-create-submit": "جوړول",
+ "tags-delete-reason": "سبب:",
+ "tags-activate-reason": "سبب:",
+ "tags-activate-submit": "فعالول",
+ "tags-deactivate-reason": "سبب:",
+ "tags-deactivate-submit": "نافعالول",
"comparepages": "مخونه پرتلل",
"compare-page1": "۱ مخ",
"compare-page2": "۲ مخ",
@@ -2006,6 +2072,8 @@
"htmlform-selectorother-other": "بل",
"htmlform-no": "نه",
"htmlform-yes": "هو",
+ "htmlform-cloner-create": "نور ورگډول",
+ "htmlform-cloner-delete": "غورځول",
"logentry-delete-delete": "$1 د $3 مخ {{GENDER:$2|ړنگ کړ}}",
"revdelete-content-hid": "مېنځپانگه پټېدلې",
"revdelete-uname-hid": "کارن نوم پټ شوی",
@@ -2013,15 +2081,21 @@
"revdelete-uname-unhid": "ښکاره کارن-نوم",
"logentry-move-move": "$1 د $3 مخ $4 ته {{GENDER:$2|ولېږداوه}}",
"logentry-move-move-noredirect": "$1 پرته له دې چې يو مخ گرځونی پرېږدي له $3 څخه $4 ته مخ {{GENDER:$2|ولېږداوه}}",
+ "logentry-move-move_redir": "$1 د $3 مخ $4 ته د مخ گرځونې له لارې {{GENDER:$2|ولېږداوه}}.",
"logentry-move-move_redir-noredirect": "$1 پرته له دې چې يو مخ گرځونی پرېږدي له $3 څخه $4 ته مخ {{GENDER:$2|ولېږداوه}}",
"logentry-newusers-newusers": "د $1 کارن گڼون {{GENDER:$2|جوړ شو}}",
"logentry-newusers-create": "د $1 کارن گڼون {{GENDER:$2|جوړ شو}}",
"logentry-newusers-autocreate": "د $1 گڼون په اتوماتيک ډول {{GENDER:$2|جوړ شو}}",
+ "logentry-upload-upload": "$1 $3 {{GENDER:$2|ورپورته يې کړ}}",
"rightsnone": "(هېڅ)",
- "feedback-subject": "سکالو:",
- "feedback-message": "پيغام:",
+ "revdelete-summary": "لنډيز سمول",
"feedback-cancel": "ناگارل",
"feedback-close": "ترسره شو",
+ "feedback-error-title": "تېروتنه",
+ "feedback-message": "پيغام:",
+ "feedback-subject": "سکالو:",
+ "feedback-submit": "سپارل",
+ "feedback-thanks-title": "مننه!",
"searchsuggest-search": "پلټل",
"api-error-duplicate-popup-title": "غبرګونې {{PLURAL:$1|دوتنه|دوتنې}}.",
"api-error-empty-file": "کومه دوتنه چې تاسې دلته سپارلې هغه تشه ده.",
@@ -2048,11 +2122,54 @@
"limitreport-walltime": "اصلي وخت کارېدنه",
"limitreport-walltime-value": "$1 {{PLURAL:$1|ثانيه|ثانيې}}",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بايټ|بايټونه}}",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بايټ|بايټونه}}",
"expandtemplates": "کينډۍ غځول",
"expand_templates_input": "ځايونکی متن:",
"expand_templates_output": "پايله",
"expand_templates_ok": "ښه",
+ "expand_templates_remove_comments": "تبصرې غورځول",
"expand_templates_remove_nowiki": "په پايلو کې د <nowiki> نښلنونه ځپل",
"expand_templates_generate_rawhtml": "خام HTML ښکاره کول",
- "expand_templates_preview": "مخکتنه"
+ "expand_templates_preview": "مخکتنه",
+ "pagelanguage": "د مخ ژبټاکونکی",
+ "pagelang-name": "مخ",
+ "pagelang-language": "ژبه",
+ "pagelang-use-default": "تلواليزه ژبه کارول",
+ "pagelang-select-lang": "ژبه ټاکل",
+ "right-pagelang": "د مخ ژبه بدلول",
+ "action-pagelang": "د مخ ژبه بدلول",
+ "log-name-pagelang": "ژبيادښت بدلول",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (چارن)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ناچارن''')",
+ "mediastatistics": "د رسنيو شمار",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 بايټ|$1 بايټونه}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME بڼه",
+ "mediastatistics-table-count": "د دوتنو شمېر",
+ "mediastatistics-header-unknown": "ناجوت",
+ "mediastatistics-header-bitmap": "بېټ مپ انځورونه",
+ "mediastatistics-header-drawing": "رسمونه (وېکټور انځورونه)",
+ "mediastatistics-header-audio": "غږ",
+ "mediastatistics-header-video": "ويډيوگانې",
+ "mediastatistics-header-multimedia": "بډايه رسنۍ",
+ "mediastatistics-header-office": "دفتر",
+ "mediastatistics-header-text": "متني",
+ "special-characters-group-latin": "لاتين",
+ "special-characters-group-latinextended": "غځېدلی لاتين",
+ "special-characters-group-ipa": "ن.غ.ا",
+ "special-characters-group-symbols": "سمبولونه",
+ "special-characters-group-greek": "يوناني",
+ "special-characters-group-cyrillic": "سرېليک",
+ "special-characters-group-arabic": "عربي",
+ "special-characters-group-arabicextended": "غځېدلې عربي",
+ "special-characters-group-persian": "پارسي",
+ "special-characters-group-hebrew": "عبراني",
+ "special-characters-group-bangla": "بنګالي",
+ "special-characters-group-tamil": "تاميلي",
+ "special-characters-group-telugu": "تېلوګو",
+ "special-characters-group-sinhala": "سېنهالي",
+ "special-characters-group-gujarati": "ګجراتي",
+ "special-characters-group-devanagari": "دېوانګري",
+ "special-characters-group-thai": "تايلنډي",
+ "special-characters-group-lao": "لاوي",
+ "special-characters-group-khmer": "خمري"
}
diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json
index d9522102..26634b19 100644
--- a/languages/i18n/pt-br.json
+++ b/languages/i18n/pt-br.json
@@ -71,7 +71,15 @@
"לערי ריינהארט",
"555",
"Fabsouza1",
- "아라"
+ "아라",
+ "Jefersonmoraes",
+ "Marcos dias de oliveira",
+ "He7d3r",
+ "PauloEduardo",
+ "Webysther",
+ "Fasouzafreitas",
+ "RosaMafalda17",
+ "Macofe"
]
},
"tog-underline": "Sublinhar links:",
@@ -99,7 +107,7 @@
"tog-shownumberswatching": "Mostrar o número de usuários que estão vigiando",
"tog-oldsig": "Assinatura existente:",
"tog-fancysig": "Tratar assinatura como wikitexto (sem link automático)",
- "tog-uselivepreview": "Utilizar pré-visualização em tempo real (experimental)",
+ "tog-uselivepreview": "Utilizar pré-visualização em tempo real",
"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",
@@ -274,6 +282,7 @@
"otherlanguages": "Em outros idiomas",
"redirectedfrom": "(Redirecionado de $1)",
"redirectpagesub": "Página de redirecionamento",
+ "redirectto": "Redirecionar para:",
"lastmodifiedat": "Esta página foi modificada pela última vez à(s) $2 de $1.",
"viewcount": "Esta página foi acessada {{PLURAL:$1|uma vez|$1 vezes}}.",
"protectedpage": "Página protegida",
@@ -286,6 +295,7 @@
"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).",
+ "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.",
@@ -295,6 +305,7 @@
"disclaimers": "Exoneração de responsabilidade",
"disclaimerpage": "Project:Aviso_geral",
"edithelp": "Ajuda de edição",
+ "helppage-top-gethelp": "Ajuda",
"mainpage": "Página principal",
"mainpage-description": "Página principal",
"policy-url": "Project:Políticas",
@@ -373,10 +384,13 @@
"readonly_lag": "O banco de dados foi automaticamente bloqueado enquanto os servidores secundários se sincronizam com o principal",
"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",
@@ -399,6 +413,7 @@
"viewyourtext": "Pode ver e copiar o código fonte '''das suas edições''' nesta página:",
"protectedinterface": "Esta página fornece texto de interface ao software deste wiki, se encontrando protegida para prevenir abusos.\n\nPara adicionar ou alterar traduções em todos os wikis, utilize o [//translatewiki.net/ translatewiki.net], projeto de traduções do MediaWiki.",
"editinginterface": "'''Aviso:''' Você se encontra prestes a editar uma página que é utilizada para fornecer texto de interface ao software.\nAlterações nesta página irão afetar a aparência da interface de usuário para outros usuários deste wiki.\nPara alterar ou adicionar traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt-br translatewiki.net], um projeto destinado para a tradução do MediaWiki.",
+ "translateinterface": "Para adicionar ou modificar traduções para todas as wikis, por favor use [//translatewiki.net/ translatewiki.net], o projeto de localização do MediaWiki.",
"cascadeprotected": "Esta página foi protegida contra edições por estar incluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de \"proteção progressiva\" ativada):\n$2",
"namespaceprotected": "Você não possui permissão para editar páginas no espaço nominal '''$1'''.",
"customcssprotected": "Você não tem permissão para editar esta página CSS, porque ele contém configurações pessoais de outro usuário.",
@@ -422,7 +437,7 @@
"welcomeuser": "Bem-vindo, $1!",
"welcomecreation-msg": "A sua conta foi criada.\nNão se esqueça de personalizar as suas [[Special:Preferences|preferências no wiki {{SITENAME}}]].",
"yourname": "Nome de usuário:",
- "userlogin-yourname": "Nome de usuário",
+ "userlogin-yourname": "Nome de usuário(a)",
"userlogin-yourname-ph": "Escreva seu nome de usuário",
"createacct-another-username-ph": "Forneça o nome de usuário",
"yourpassword": "Senha:",
@@ -455,6 +470,8 @@
"userlogin-resetlink": "Esqueceu-se do seu nome de usuário ou da senha?",
"userlogin-resetpassword-link": "Esqueceu sua senha?",
"userlogin-helplink2": "Ajuda com o login",
+ "userlogin-loggedin": "Você já está conectado como {{GENDER:$1|$1}}.\nUse o formulário abaixo para iniciar sessão como outro usuário.",
+ "userlogin-createanother": "Crie uma outra conta",
"createacct-emailrequired": "Endereço de e-mail",
"createacct-emailoptional": "Endereço de e-mail (opcional)",
"createacct-email-ph": "Confirme seu endereço de e-mail",
@@ -516,6 +533,7 @@
"createaccount-text": "Alguém criou uma conta de nome $2 para o seu endereço de email no wiki {{SITENAME}} ($4), tendo como senha \"$3\".\nVocê deve se autenticar e alterar sua senha.\n\nIgnore esta mensagem caso a conta tenha sido criada por engano.",
"login-throttled": "Você recentemente tentou iniciar sessão muitas vezes.\nPor favor aguarde $1 antes de tentar novamente.",
"login-abort-generic": "A sua autenticação não teve êxito - Abortada",
+ "login-migrated-generic": "A sua conta foi migrada e o seu nome de usuário já não existe nesta wiki.",
"loginlanguagelabel": "Idioma: $1",
"suspicious-userlogout": "Sua solicitação para sair foi negada porque aparentemente foi enviada por um navegador danificado ou por um servidor proxy com cache.",
"createacct-another-realname-tip": "O nome verdadeiro é opcional.\nSe você optar por fornecê-lo, este nome será utilizado para dar ao usuário a atribuição de seu trabalho.",
@@ -567,7 +585,6 @@
"passwordreset-emailsent-capture": "Foi enviado um e-mail de lembrete, que é mostrado abaixo.",
"passwordreset-emailerror-capture": "Foi gerado um e-mail de recuperação da senha, conforme mostrado abaixo, mas o envio {{GENDER:$2|ao usuário|à usuária}} falhou. $1",
"changeemail": "Alterar o endereço de e-mail",
- "changeemail-header": "Alterar o endereço de e-mail da conta",
"changeemail-text": "Preencha este formulário para alterar o endereço de e-mail. Para confirmar esta alteração terá de introduzir a sua senha.",
"changeemail-no-info": "Para acessar diretamente esta página você tem de estar autenticado.",
"changeemail-oldemail": "Endereço de e-mail atual:",
@@ -575,7 +592,6 @@
"changeemail-none": "(nenhum)",
"changeemail-password": "Sua senha para o wiki {{SITENAME}}:",
"changeemail-submit": "Alterar e-mail",
- "changeemail-cancel": "Cancelar",
"changeemail-throttled": "Você realizou demasiadas tentativas de se registrar.\nPor favor, aguarde $1 antes de tentar novamente.",
"resettokens": "Reiniciar os tokens",
"resettokens-text": "Você pode reiniciar os tokens, que permitem o acesso a certos dados privados associados à sua conta, aqui.\n\nVocê só deve reiniciá-los se compartilhou-os com alguém ou se a sua conta foi comprometida.",
@@ -616,6 +632,7 @@
"anoneditwarning": "'''Atenção''': Você não se encontra autenticado.\nO seu endereço de IP será registrado no histórico de edições desta página.",
"anonpreviewwarning": "''Você não está logado. Gravar registará o seu endereço IP no histórico de edições desta página.''",
"missingsummary": "'''Lembrete:''' Você não introduziu um sumário de edição. Se clicar novamente em Salvar, a sua edição será salva sem um sumário.",
+ "selfredirect": "<strong>Aviso:</strong> Você esta redirecionando esta pagina para ela mesmo. Você pode ter especificado o caminho errado para redirecionar, ou você pode estar editando a pagina errada. Se você clicar \"{{int:savearticle}}\" novamente, o redirecionamento será criado de qualquer modo.",
"missingcommenttext": "Por favor, introduzida um comentário abaixo.",
"missingcommentheader": "'''Lembrete:''' Você não introduziu um assunto/título para este comentário.\nSe você clicar novamente \"{{int:savearticle}}\", a sua edição será salva sem um assunto/título.",
"summary-preview": "Previsão de sumário:",
@@ -714,6 +731,10 @@
"content-model-text": "texto simples",
"content-model-javascript": "Javascript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Objeto vazio",
+ "content-json-empty-array": "Array vazia",
+ "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições",
+ "duplicate-args-category-desc": "A pagina contem modelos que usam argumentos duplicados, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Aviso: Esta página contém muitas chamadas a funções do analisador \"parser\".\n\nDeveria ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento {{PLURAL:$1|há $1 chamada|existem $1 chamadas}}.",
"expensive-parserfunction-category": "Páginas com muitas chamadas a funções do analisador \"parser\"",
"post-expand-template-inclusion-warning": "'''Aviso''': a soma do tamanho de inclusão de predefinições é muito grande.\nAlgumas predefinições não serão processadas.",
@@ -752,7 +773,7 @@
"currentrevisionlink": "Revisão atual",
"cur": "atu",
"next": "prox",
- "last": "ult",
+ "last": "ant",
"page_first": "primeira",
"page_last": "última",
"histlegend": "Como selecionar: marque as caixas de seleção das versões que deseja comparar e pressione enter ou clique no botão na parte inferior do formulário.<br />\nLegenda: '''({{int:cur}})''' = diferenças em relação a última versão, '''({{int:last}})''' = diferenças em relação a versão anterior, '''{{int:minoreditletter}}''' = edição menor.",
@@ -768,7 +789,7 @@
"history-feed-empty": "A página requisitada não existe.\nPoderá ter sido eliminada do wiki ou renomeada.\nTente [[Special:Search|pesquisar no wiki]] por páginas relevantes.",
"rev-deleted-comment": "(resumo da edição suprimido)",
"rev-deleted-user": "(nome de usuário removido)",
- "rev-deleted-event": "(entrada removida)",
+ "rev-deleted-event": "(registros de detalhes eliminados)",
"rev-deleted-user-contribs": "[nome de usuário ou endereço de IP eliminado - edição ocultada das contribuições]",
"rev-deleted-text-permission": "Esta revisão desta página foi '''eliminada'''.\nPodem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminações].",
"rev-suppressed-text-permission": "A revisão desta página foi '''eliminada'''.\nVocê pode visualizá-la; podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de eliminação].",
@@ -802,7 +823,7 @@
"revdelete-legend": "Definir restrições de visualização",
"revdelete-hide-text": "Texto de revisão",
"revdelete-hide-image": "Ocultar conteúdos do arquivo",
- "revdelete-hide-name": "Ocultar ação e alvo",
+ "revdelete-hide-name": "Ocultar destino e parâmetros",
"revdelete-hide-comment": "Sumário de edição",
"revdelete-hide-user": "Nome de usuário/endereço IP",
"revdelete-hide-restricted": "Suprimir dados de administradores assim como de outros",
@@ -840,12 +861,13 @@
"mergehistory-from": "Página de origem:",
"mergehistory-into": "Página de destino:",
"mergehistory-list": "Histórico de edições habilitadas para fusão",
- "mergehistory-merge": "As edições de [[:$1]] a seguir poderão ser fundidas em [[:$2]]. Utilize a coluna de botões de opção para fundir apenas as edições feitas entre o intervalo de tempo especificado. Note que ao utilizar os links de navegação esta coluna será retornada a seus valores padrão.",
+ "mergehistory-merge": "As edições de [[:$1]] a seguir poderão ser fundidas em [[:$2]]. Utilize a coluna de botões de opção para fundir apenas as edições feitas até a que for selecionada. Note que ao utilizar os links de navegação esta coluna será retornada a seus valores padrão.",
"mergehistory-go": "Exibir edições habilitadas a serem fundidas",
"mergehistory-submit": "Fundir revisões",
"mergehistory-empty": "Não existem edições habilitadas a serem fundidas.",
"mergehistory-success": "$3 {{PLURAL:$3|revisão|revisões}} de [[:$1]] fundidas em [[:$2]] com sucesso.",
"mergehistory-fail": "Não foi possível fundir os históricos; por gentileza, verifique a página e os parâmetros de tempo.",
+ "mergehistory-fail-toobig": "Não é possível fundir o histórico, já que um número de revisão(ões) acima do limite ($1 {{PLURAL:$1|revisão|revisões}}) seriam movidos.",
"mergehistory-no-source": "A página de origem ($1) não existe.",
"mergehistory-no-destination": "A página de destino ($1) não existe.",
"mergehistory-invalid-source": "A página de origem precisa ser um título válido.",
@@ -855,7 +877,6 @@
"mergehistory-same-destination": "As páginas de origem e de destino não podem ser as mesmas",
"mergehistory-reason": "Motivo:",
"mergelog": "Registro de fusão de históricos",
- "pagemerge-logentry": "[[$1]] foi fundida em [[$2]] (até a edição $3)",
"revertmerge": "Desfazer fusão",
"mergelogpagetext": "Segue-se um registro das mais recentes fusões de históricos de páginas.",
"history-title": "Histórico de edições de \"$1\"",
@@ -882,7 +903,7 @@
"nextn-title": "{{PLURAL:$1|próximo|próximos}} $1 {{PLURAL:$1|resultado|resultados}}",
"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]]\" neste wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados da pesquisa encontrados.}}",
+ "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 das pesquisas encontradas.}}",
"searchprofile-articles": "Páginas de conteúdo",
"searchprofile-images": "Multimídia",
@@ -896,6 +917,7 @@
"search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 arquivo|$3 arquivos}})",
"search-redirect": "(redirecionamento de $1)",
"search-section": "(seção $1)",
+ "search-category": "(categoria $1)",
"search-file-match": "(coincide com o conteúdo do arquivo)",
"search-suggest": "Você quis dizer: $1",
"search-interwiki-caption": "Projetos irmãos",
@@ -905,6 +927,8 @@
"searchrelated": "relacionados",
"searchall": "todos",
"showingresults": "A seguir {{PLURAL:$1|é mostrado '''um''' resultado|são mostrados até '''$1''' resultados}}, iniciando no '''$2'''º.",
+ "showingresultsinrange": "Apresenta-se abaixo {{PLURAL:$1|<strong>1</strong> resultado|até <strong>$1</strong> resultados}} no intervalo #<strong>$2</strong> a #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Resultado <strong>$1</strong> de <strong>$3</strong>|Resultados <strong>$1 - $2</strong> de <strong>$3</strong>}}",
"search-nonefound": "Não há resultados que correspondam à consulta.",
"powersearch-legend": "Pesquisa avançada",
"powersearch-ns": "Pesquisar nos espaços nominais:",
@@ -927,6 +951,11 @@
"prefs-personal": "Dados do usuário",
"prefs-rc": "Mudanças recentes",
"prefs-watchlist": "Lista de páginas vigiadas",
+ "prefs-editwatchlist": "Editar lista de páginas vigiadas",
+ "prefs-editwatchlist-label": "Editar entradas na sua lista de páginas vigiadas:",
+ "prefs-editwatchlist-edit": "Visualizar e remover títulos da sua lista de páginas vigiadas",
+ "prefs-editwatchlist-raw": "Edição crua da lista de páginas vigiadas",
+ "prefs-editwatchlist-clear": "Limpar sua lista de páginas vigiadas",
"prefs-watchlist-days": "Dias a mostrar na lista de páginas vigiadas:",
"prefs-watchlist-days-max": "Máximo $1 {{PLURAL:$1|dia|dias}}",
"prefs-watchlist-edits": "Número de edições mostradas na lista de páginas vigiadas expandida:",
@@ -1017,6 +1046,7 @@
"prefs-tokenwatchlist": "Senha",
"prefs-diffs": "Diferenças",
"prefs-help-prefershttps": "Esta preferência terá efeito no seu próximo início de sessão.",
+ "prefswarning-warning": "Você fez alterações em suas preferências, que não foram salvas ainda. \nSe você sair desta página sem clicar em \"$1\" suas preferências não serão atualizado.",
"prefs-tabs-navigation-hint": "Dica: Você pode usar as teclas de seta esquerda e direita para navegar entre as abas da lista de abas.",
"email-address-validity-valid": "Parece válido",
"email-address-validity-invalid": "Forneça um endereço de e-mail válido",
@@ -1024,7 +1054,7 @@
"userrights-lookup-user": "Administrar grupos de usuários",
"userrights-user-editname": "Forneça um nome de usuário:",
"editusergroup": "Editar grupos de usuários",
- "editinguser": "Modificando privilégios do usuário '''[[User:$1|$1]]''' $2",
+ "editinguser": "Modificando privilégios d{{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} '''[[User:$1|$1]]''' $2",
"userrights-editusergroup": "Editar grupos do usuário",
"saveusergroups": "Salvar grupos do usuário",
"userrights-groupsmember": "Membro de:",
@@ -1048,9 +1078,9 @@
"group-suppress": "Oversights",
"group-all": "(todos)",
"group-user-member": "{{GENDER:$1|usuário|usuária}}",
- "group-autoconfirmed-member": "{{GENDER:$1|usuário autoconfirmado|usuária autoconfirmada}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|usuário autoconfirmado|usuária autoconfirmada|usuário(a) autoconfirmado(a)}}",
"group-bot-member": "robô",
- "group-sysop-member": "{{GENDER:$1|administrador|administradora}}",
+ "group-sysop-member": "{{GENDER:$1|administrador|administradora|administrador(a)}}",
"group-bureaucrat-member": "burocrata",
"group-suppress-member": "{{GENDER:$1|supressor|supressora}}",
"grouppage-user": "{{ns:project}}:Usuários",
@@ -1091,6 +1121,7 @@
"right-browsearchive": "Buscar páginas eliminadas",
"right-undelete": "Restaurar páginas",
"right-suppressrevision": "Rever e restaurar edições indisponíveis a administradores",
+ "right-viewsuppressed": "Ver revisões escondidas de qualquer usuário",
"right-suppressionlog": "Ver registros privados",
"right-block": "Impedir outros usuários de editarem",
"right-blockemail": "Impedir um usuário de enviar email",
@@ -1101,6 +1132,7 @@
"right-protect": "Mudar níveis de proteção e editar páginas protegidas em cascata",
"right-editprotected": "Editar páginas protegidas como \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Editar páginas protegidas como \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Editar o modelo de uma pagina",
"right-editinterface": "Editar a interface de usuário",
"right-editusercssjs": "Editar os arquivos CSS e JS de outros usuários",
"right-editusercss": "Editar os arquivos CSS de outros usuários",
@@ -1128,6 +1160,7 @@
"right-override-export-depth": "Exportar páginas incluindo páginas ligadas até uma profundidade de 5",
"right-sendemail": "Enviar email a outros usuários",
"right-passwordreset": "Ver todos os e-mails de reposição de senhas",
+ "right-managechangetags": "Criar e apagar [[Special:Tags|tags]] na base de dados",
"newuserlogpage": "Registro de criação de usuários",
"newuserlogpagetext": "Este é um registro de novas contas de usuário",
"rightslog": "Registro de privilégios de usuário",
@@ -1173,6 +1206,8 @@
"action-viewmywatchlist": "veja sua lista de páginas vigiadas",
"action-viewmyprivateinfo": "veja suas informações privadas",
"action-editmyprivateinfo": "modifique suas informações privadas",
+ "action-editcontentmodel": "editar o conteudo do modelo de uma pagina",
+ "action-managechangetags": "Criar e apagar etiquetas da base de dados",
"nchanges": "$1 {{PLURAL:$1|alteração|alterações}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde a última visita}}",
"enhancedrc-history": "histórico",
@@ -1189,7 +1224,7 @@
"recentchanges-legend-heading": "'''Legenda''':",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veja também a [[Special:NewPages|lista de páginas novas]])",
"recentchanges-legend-plusminus": "(''±123'')",
- "rcnotefrom": "Abaixo estão mostradas as alterações desde <strong>$2</strong> (até <strong>$1</strong>).",
+ "rcnotefrom": "Abaixo {{PLURAL:$5|é a mudança|são as mudanças}} desde <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
"rclistfrom": "Mostrar as novas alterações a partir das $2 de $3",
"rcshowhideminor": "$1 edições menores",
"rcshowhideminor-show": "Exibir",
@@ -1243,9 +1278,9 @@
"uploaderror": "Erro ao enviar arquivo",
"upload-recreate-warning": "'''Aviso: Um arquivo com este nome foi eliminado ou movido.'''\n\nPara sua conveniência, segue o registro de eliminação e de movimentação:",
"uploadtext": "Use o formulário abaixo para enviar arquivos.\nPara ver ou pesquisar arquivos já enviados, consulte a [[Special:FileList|lista de arquivos enviados]]. Re-envios também são registrados no [[Special:Log/upload|registro de uploads]]; eliminações no [[Special:Log/delete|registro de eliminações]]\n\nPara incluir o arquivo em uma página, use um link em um dos seguintes formatos:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Arquivo.jpg]]</nowiki></code>''' para utilizar a versão completa do arquivo;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Arquivo.png|200px|thumb|left|texto]]</nowiki></code>''' para utilizar uma renderização de 200 pixels dentro de uma caixa posicionada à margem esquerda, contendo 'texto' como descrição;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Arquivo.ogg]]</nowiki></code>''' para um link direto ao arquivo sem que ele seja exibido.",
- "upload-permitted": "Tipos de arquivos permitidos: $1.",
- "upload-preferred": "Tipos de arquivos preferidos: $1.",
- "upload-prohibited": "Tipos de arquivo proibidos: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tipo|Tipos}} de {{PLURAL:$2|arquivo|arquivos}} {{PLURAL:$2|permitido|permitidos}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipo|Tipos}} de {{PLURAL:$2|arquivo|arquivos}} {{PLURAL:$2|preferido|preferidos}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipo|Tipos}} de {{PLURAL:$2|arquivo|arquivos}} {{PLURAL:$2|proibido|proibidos}}: $1.",
"uploadlogpage": "Registro de uploads",
"uploadlogpagetext": "Segue listagem dos uploads de arquivos mais recentes.\nA [[Special:NewFiles|galeria de arquivos novos]] oferece uma listagem mais visual.",
"filename": "Nome do arquivo",
@@ -1504,7 +1539,6 @@
"statistics": "Estatísticas",
"statistics-header-pages": "Estatísticas de páginas",
"statistics-header-edits": "Estatísticas de edições",
- "statistics-header-views": "Ver estatísticas",
"statistics-header-users": "Estatísticas dos usuários",
"statistics-header-hooks": "Outras estatísticas",
"statistics-articles": "Páginas de conteúdo",
@@ -1513,13 +1547,9 @@
"statistics-files": "Arquivos carregados",
"statistics-edits": "Edições de página desde que {{SITENAME}} foi instalado",
"statistics-edits-average": "Média de edições por página",
- "statistics-views-total": "Total de visualizações",
- "statistics-views-total-desc": "Visualizações de páginas não existentes e páginas especiais não estão incluídas",
- "statistics-views-peredit": "Visualizações por edição",
"statistics-users": "[[Special:ListUsers|Usuários]] registrados",
"statistics-users-active": "Usuários ativos",
"statistics-users-active-desc": "Usuários que efetuaram uma ação {{PLURAL:$1|no último dia|nos últimos $1 dias}}",
- "statistics-mostpopular": "Páginas mais visitadas",
"pageswithprop": "Páginas com uma propriedade de página",
"pageswithprop-legend": "Páginas com uma propriedade de página",
"pageswithprop-text": "Esta página lista as páginas que usam uma determinada propriedade de página.",
@@ -1560,17 +1590,18 @@
"uncategorizedtemplates": "Predefinições não categorizadas",
"unusedcategories": "Categorias não utilizadas",
"unusedimages": "Arquivos não utilizados",
- "popularpages": "Páginas populares",
"wantedcategories": "Categorias pedidas",
"wantedpages": "Páginas pedidas",
"wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
"wantedfiles": "Arquivos pedidos",
"wantedfiletext-cat": "Os seguintes arquivos são usados, mas não existem. Arquivos de repositórios externos podem acabar sendo listados apesar de existirem. Esses falsos positivos aparecerão <del>riscados</del>. As páginas que incluem arquivos inexistentes são listadas em [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Os arquivos seguintes são usados mas não existem. Além disso, as paginas que incorporam arquivos que não existem estão listadas em [[:$1]].",
"wantedfiletext-nocat": "Os seguintes arquivos são usados, mas não existem. Arquivos de repositórios externos podem acabar sendo listados apesar de existirem. Esses falsos positivos aparecerão <del>riscados</del>.",
+ "wantedfiletext-nocat-noforeign": "Os seguintes arquivos são usados, mas não existem.",
"wantedtemplates": "Predefinições pedidas",
"mostlinked": "Páginas com mais afluentes",
"mostlinkedcategories": "Categorias com mais membros",
- "mostlinkedtemplates": "Páginas com mais transclusões",
+ "mostlinkedtemplates": "Páginas mais transcluídas",
"mostcategories": "Páginas de conteúdo com mais categorias",
"mostimages": "Imagens com mais afluentes",
"mostinterwikis": "Páginas com mais interwikis",
@@ -1620,9 +1651,11 @@
"pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
"suppress": "Supervisor",
"querypage-disabled": "Esta página especial está desativada para não prejudicar o desempenho.",
+ "apihelp": "Ajuda de API",
+ "apihelp-no-such-module": "Modulo \"$1\" não foram achados.",
"booksources": "Fontes bibliográficas",
"booksources-search-legend": "Pesquisar referências bibliográficas",
- "booksources-go": "Ir",
+ "booksources-search": "Pesquisar",
"booksources-text": "É exibida a seguir uma listagem de links para outros sites que vendem livros novos e usados e que possam possuir informações adicionais sobre os livros que você está pesquisando:",
"booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique se houve erros ao copiar da fonte original.",
"specialloguserlabel": "Executor:",
@@ -1698,7 +1731,12 @@
"trackingcategories-name": "Nome da mensagem",
"trackingcategories-desc": "Critérios de inclusão de categoria",
"noindex-category-desc": "A página não é indexada por robôs, porque possui a palavra mágica <code><nowiki>__NOINDEX__</nowiki></code> e está em um namespace onde a flag é permitida.",
+ "index-category-desc": "A página contém a palavra mágica <code><nowiki>__INDEX__</nowiki></code> (e está num domínio em que essa marca é permitida) e, portanto, será indexada pelos robôs mesmo quando normalmente não o seria.",
"post-expand-template-inclusion-category-desc": "O tamanho da página é superior a <code>$wgMaxArticleSize</code>, após a expansão de todas as predefinições, pelo que algumas predefinições não foram expandidas.",
+ "post-expand-template-argument-category-desc": "O tamanho da página é superior a <code>$wgMaxArticleSize</code>, após a expansão de um argumento de predefinição (algo em chavetas triplas, como <code>{{{Foo}}}</code>).",
+ "expensive-parserfunction-category-desc": "A página tem demasiadas funções do analisador custosas (como <code>#ifexist</code>) incluídas. Consulte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "A página contém um link de arquivo quebrado (um link para incorporar quando o arquivo não existe).",
+ "hidden-category-category-desc": "Esta é uma categoria com a marca <code><nowiki>__HIDDENCAT__</nowiki></code>, que faz com que ela não apareça na caixa de ligações de categoria nas páginas, por omissão.",
"trackingcategories-nodesc": "Nenhuma descrição disponível.",
"trackingcategories-disabled": "A categoria está desabilitada",
"mailnologin": "Nenhum endereço de envio",
@@ -1752,8 +1790,8 @@
"watchlist-details": "{{PLURAL:$1|$1 página|$1 páginas}} na sua lista de páginas vigiadas, excluindo as páginas de discussão.",
"wlheader-enotif": "A notificação por email encontra-se ativada.",
"wlheader-showupdated": "Páginas modificadas desde a sua última visita são mostradas em '''negrito'''",
- "wlnote": "A seguir {{PLURAL:$1|está a última alteração ocorrida|estão as últimas '''$1''' alterações ocorridas}} {{PLURAL:$2|na última hora|nas últimas '''$2''' horas}} a partir de $3, $4.",
- "wlshowlast": "Ver últimas $1 horas $2 dias $3",
+ "wlnote": "A seguir {{PLURAL:$1|está a última alteração ocorrida|estão as últimas <strong>$1</strong> alterações ocorridas}} {{PLURAL:$2|na última hora|nas últimas <strong>$2</strong> horas}} até $3, $4.",
+ "wlshowlast": "Ver últimas $1 horas $2 dias",
"watchlist-options": "Opções da lista de páginas vigiadas",
"watching": "Vigiando...",
"unwatching": "Deixando de vigiar...",
@@ -1783,7 +1821,7 @@
"exbeforeblank": "o conteúdo antes de esvaziar era: '$1'",
"delete-confirm": "Eliminar \"$1\"",
"delete-legend": "Eliminar",
- "historywarning": "'''Atenção:''' A página que você está prestes a eliminar possui um histórico com aproximadamente $1 {{PLURAL:$1|revisão|revisões}}:",
+ "historywarning": "<strong>Aviso:</strong> A página que está prestes a eliminar tem um histórico com aproximadamente $1 {{PLURAL:$1|revisão|revisões}}:",
"confirmdeletetext": "Encontra-se prestes a eliminar permanentemente uma página ou uma imagem e todo o seu histórico.\nPor favor, confirme que possui a intenção de fazer isto, que compreende as consequências e que encontra-se a fazer isto de acordo com as [[{{MediaWiki:Policy-url}}|políticas]] do projeto.",
"actioncomplete": "Ação concluída",
"actionfailed": "Falha na ação",
@@ -1799,9 +1837,9 @@
"delete-edit-reasonlist": "Editar motivos de eliminação",
"delete-toobig": "Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.\nA eliminação de tais páginas foi restrita, a fim de se evitarem problemas acidentais em {{SITENAME}}.",
"delete-warning-toobig": "Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.\nEliminá-la poderá causar problemas na base de dados de {{SITENAME}};\nprossiga com cuidado.",
+ "deleteprotected": "Não é possível eliminar esta página porque foi protegida.",
"deleting-backlinks-warning": "'''Cuidado:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Outras páginas]] se ligam ou redirecionam para a página que você está prestes a deletar.",
"rollback": "Reverter edições",
- "rollback_short": "Reverter",
"rollbacklink": "reverter",
"rollbacklinkcount": "reverter $1 {{PLURAL:$1|edição|edições}}",
"rollbacklinkcount-morethan": "reverter mais de $1 {{PLURAL:$1|edição|edições}}",
@@ -1851,6 +1889,7 @@
"protect-othertime": "Outra duração:",
"protect-othertime-op": "outra duração",
"protect-existing-expiry": "A proteção atual expirará às $3 de $2",
+ "protect-existing-expiry-infinity": "Existente tempo de expiração: infinito",
"protect-otherreason": "Outro motivo/motivo adicional:",
"protect-otherreason-op": "Outro motivo",
"protect-dropdown": "*Motivos comuns para proteção\n** Vandalismo excessivo\n** Inserção excessiva de ''spams''\n** Guerra de edições improdutiva\n** Página bastante acessada",
@@ -1910,6 +1949,7 @@
"namespace": "Espaço nominal:",
"invert": "Inverter seleção",
"tooltip-invert": "Marque esta caixa para esconder as alterações a páginas no espaço nominal selecionado (e no espaço nominal associado, se escolheu fazê-lo)",
+ "tooltip-whatlinkshere-invert": "Marque esta caixa de seleção para ocultar ligações de páginas dentro do domínio selecionado.",
"namespace_association": "Espaço nominal associado",
"tooltip-namespace_association": "Marque esta caixa para incluir também o espaço nominal de conteúdo ou de discussão associado à sua seleção",
"blanknamespace": "(Principal)",
@@ -1937,7 +1977,7 @@
"sp-contributions-search": "Navegar pelas contribuições",
"sp-contributions-username": "Endereço de IP ou usuário:",
"sp-contributions-toponly": "Mostrar somente as edições que sejam a última alteração",
- "sp-contributions-newonly": "Mostrar somente as edições que criaram uma nova página.",
+ "sp-contributions-newonly": "Mostrar somente as criações de páginas",
"sp-contributions-submit": "Pesquisar",
"whatlinkshere": "Páginas afluentes",
"whatlinkshere-title": "Páginas que têm links para \"$1\"",
@@ -1950,7 +1990,7 @@
"isimage": "link para o arquivo",
"whatlinkshere-prev": "{{PLURAL:$1|anterior|$1 anteriores}}",
"whatlinkshere-next": "{{PLURAL:$1|próximo|próximos $1}}",
- "whatlinkshere-links": "← links",
+ "whatlinkshere-links": "← afluentes",
"whatlinkshere-hideredirs": "$1 redirecionamentos",
"whatlinkshere-hidetrans": "$1 transclusões",
"whatlinkshere-hidelinks": "$1 links",
@@ -1959,7 +1999,7 @@
"autoblockid": "Autobloqueio #$1",
"block": "Bloquear usuário",
"unblock": "Desbloquear usuário",
- "blockip": "Bloquear {{GENDER:$1|utilizador|utilizadora}}",
+ "blockip": "Bloquear {{GENDER:$1|usuário|usuária}}",
"blockip-legend": "Bloquear usuário",
"blockiptext": "Utilize o formulário abaixo para bloquear o acesso à escrita de um endereço específico de IP ou nome de usuário.\nIsto só deve ser feito para prevenir vandalismo, e de acordo com a [[{{MediaWiki:Policy-url}}|política]]. Preencha com um motivo específico a seguir (por exemplo, citando páginas que sofreram vandalismo).",
"ipaddressorusername": "Endereço de IP ou nome de usuário:",
@@ -1995,6 +2035,7 @@
"unblocked": "[[User:$1|$1]] foi desbloqueado",
"unblocked-range": "$1 foi desbloqueado",
"unblocked-id": "O bloqueio de $1 foi removido com sucesso",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] foi desbloqueado.",
"blocklist": "Usuários bloqueados",
"ipblocklist": "Usuários bloqueados",
"ipblocklist-legend": "Procurar por um usuário bloqueado",
@@ -2083,6 +2124,7 @@
"movepagetalktext": "A página de \"discussão\" associada, se existir, será automaticamente movida, '''a não ser que:'''\n*Uma página de discussão com conteúdo já exista sob o novo título, ou\n*Você não marque a caixa abaixo.\n\nNestes casos, você terá que mover ou mesclar a página manualmente, se assim desejar.",
"movearticle": "Mover página",
"moveuserpage-warning": "'''Aviso:''' Você irá mover uma página de usuário. Note que apenas a página será movida, ''sem'' alterar o nome do usuário.",
+ "movecategorypage-warning": "<strong>Aviso:</strong> Você está prestes a mover uma página de categoria. Por favor, note que apenas a página será transferida e quaisquer páginas da categoria antiga <em>não</em> serão recategorizadas para o novo.",
"movenologintext": "Você precisa ser um usuário registrado e [[Special:UserLogin|autenticado]] para poder mover uma página.",
"movenotallowed": "Você não possui permissão para mover páginas.",
"movenotallowedfile": "Você não possui permissão para mover arquivos.",
@@ -2120,7 +2162,7 @@
"selfmove": "O título fonte e o título destinatário são os mesmos; não é possível mover uma página para ela mesma.",
"immobile-source-namespace": "Não é possível mover páginas no espaço nominal \"$1\"",
"immobile-target-namespace": "Não é possível mover páginas para o espaço nominal \"$1\"",
- "immobile-target-namespace-iw": "Uma ligação interwiki não é um destino válido para uma movimentação de página.",
+ "immobile-target-namespace-iw": "Um link interwiki não é um destino válido para movimentação de página.",
"immobile-source-page": "Esta página não pode ser movida.",
"immobile-target-page": "Não é possível mover para esse título de destino.",
"bad-target-model": "O destino especificado usa um modelo de conteúdo diferente. Não é possível converter $1 para $2.",
@@ -2172,13 +2214,14 @@
"thumbnail-temp-create": "Não foi possível criar o arquivo temporário de miniatura",
"thumbnail-dest-create": "Não foi possível salvar a miniatura no destino",
"thumbnail_invalid_params": "Parâmetros de miniatura inválidos",
+ "thumbnail_toobigimagearea": "Arquivo com dimensões maiores que $1",
"thumbnail_dest_directory": "Não foi possível criar o diretório de destino",
"thumbnail_image-type": "Tipo de imagem não suportado",
"thumbnail_gd-library": "Configuração da biblioteca GD incompleta: função $1 não encontrada",
"thumbnail_image-missing": "Arquivo aparentemente inexistente: $1",
"thumbnail_image-failure-limit": "Houveram muitas tentativas falhas recentemente ($1 ou mais) de criação desta miniatura. Por favor, tente novamente mais tarde.",
"import": "Importar páginas",
- "importinterwiki": "Importação transwiki",
+ "importinterwiki": "importar páginas a partir de outra wiki",
"import-interwiki-text": "Selecione um wiki e um título de página para importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwiki são registradas no [[Special:Log/import|Registro de importações]].",
"import-interwiki-sourcewiki": "Fonte wiki:",
"import-interwiki-sourcepage": "Página de origem:",
@@ -2197,7 +2240,7 @@
"importfailed": "A importação falhou: $1",
"importunknownsource": "Tipo de fonte de importação desconhecida",
"importcantopen": "Não foi possível abrir o arquivo de importação",
- "importbadinterwiki": "Ligação de interwiki incorreta",
+ "importbadinterwiki": "Link de interwiki incorreto",
"importsuccess": "Importação completa!",
"importnosources": "Não foram definidas fontes de importação transwiki e o carregamento direto de históricos encontra-se desativado.",
"importnofile": "Nenhum arquivo de importação foi carregado.",
@@ -2223,18 +2266,15 @@
"import-rootpage-nosubpage": "O espaço nominal $1 da página principal não permite subpáginas.",
"importlogpage": "Registro de importações",
"importlogpagetext": "Importações administrativas de páginas com a preservação do histórico de edição de outros wikis.",
- "import-logentry-upload": "importou [[$1]] através de arquivo de importação",
"import-logentry-upload-detail": "{{PLURAL:$1|uma edição|$1 edições}}",
- "import-logentry-interwiki": "transwiki $1",
"import-logentry-interwiki-detail": "{{PLURAL:$1|$1 edição|$1 edições}} de $2",
"javascripttest": "Teste de JavaScript",
- "javascripttest-title": "Executando testes para $1",
"javascripttest-pagetext-noframework": "Esta página é exclusiva para testes de JavaScript.",
"javascripttest-pagetext-unknownframework": "A estrutura de testes \"$1\" é desconhecida.",
+ "javascripttest-pagetext-unknownaction": "Ação desconhecida de $1",
"javascripttest-pagetext-frameworks": "Escolha uma das seguintes estruturas de teste: $1",
"javascripttest-pagetext-skins": "Escolha o tema para executar os testes:",
"javascripttest-qunit-intro": "Veja a [$1 documentação de testes] no mediawiki.org.",
- "javascripttest-qunit-heading": "Suíte de ferramentas de teste JavaScript QUnit para MediaWiki",
"tooltip-pt-userpage": "Sua página de usuário",
"tooltip-pt-anonuserpage": "A página de usuário para o ip com o qual você está editando",
"tooltip-pt-mytalk": "Sua página de discussão",
@@ -2244,6 +2284,7 @@
"tooltip-pt-mycontris": "Listagem de suas contribuições",
"tooltip-pt-login": "Você é encorajado a autenticar-se, apesar disso não ser obrigatório.",
"tooltip-pt-logout": "Sair",
+ "tooltip-pt-createaccount": "É recomendado que você crie uma conta e inicie uma seção; todavia, isto não é obrigatório",
"tooltip-ca-talk": "Discussão sobre o conteúdo da página",
"tooltip-ca-edit": "Você pode editar esta página. Use o botão \"Mostrar previsão\" antes de salvar.",
"tooltip-ca-addsection": "Iniciar uma nova seção",
@@ -2273,6 +2314,7 @@
"tooltip-feed-atom": "Feed Atom desta página",
"tooltip-t-contributions": "Ver as contribuições deste usuário",
"tooltip-t-emailuser": "Enviar um e-mail a este usuário",
+ "tooltip-t-info": "Mais informações sobre esta página",
"tooltip-t-upload": "Enviar arquivos",
"tooltip-t-specialpages": "Lista de páginas especiais",
"tooltip-t-print": "Versão para impressão desta página",
@@ -2314,7 +2356,7 @@
"creditspage": "Créditos da página",
"nocredits": "Não há informações disponíveis sobre os créditos desta página.",
"spamprotectiontitle": "Filtro de proteção contra spam",
- "spamprotectiontext": "A página que deseja salvar foi bloqueada pelo filtro de spam.\nTal bloqueio foi provavelmente causado por uma ligação para um ''website'' externo que conste na lista negra.",
+ "spamprotectiontext": "O texto que deseja salvar foi bloqueado pelo filtro de spam.\nIsso é provavelmente causado por um link para um site externo que está na lista negra.",
"spamprotectionmatch": "O seguinte texto ativou o filtro de spam: $1",
"spambot_username": "MediaWiki limpeza de spam",
"spam_reverting": "Revertendo para a última versão que não contém links para $1",
@@ -2336,7 +2378,6 @@
"pageinfo-robot-policy": "Indexado por robôs",
"pageinfo-robot-index": "Autorizado",
"pageinfo-robot-noindex": "Desautorizado",
- "pageinfo-views": "Número de visitas",
"pageinfo-watchers": "Número de vigilantes da página",
"pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vigilante|vigilantes}}",
"pageinfo-redirects-name": "Número de redirecionamentos para esta página",
@@ -2785,7 +2826,6 @@
"exif-urgency-low": "Baixa ($1)",
"exif-urgency-high": "Alta ($1)",
"exif-urgency-other": "Prioridade definida pelo usuário ($1)",
- "watchlistall2": "todas",
"namespacesall": "todos",
"monthsall": "todos",
"confirmemail": "Confirmar endereço de E-mail",
@@ -2801,7 +2841,7 @@
"confirmemail_success": "O seu endereço de e-mail foi confirmado. Pode agora se ligar.",
"confirmemail_loggedin": "O seu endereço de e-mail foi agora confirmado.",
"confirmemail_subject": "{{SITENAME}} confirmação de endereço de e-mail",
- "confirmemail_body": "Alguém, provavelmente você, com o endereço de IP $1,\nregistrou uma conta \"$2\" com este endereço de e-mail em {{SITENAME}}.\n\nPara confirmar que esta conta realmente é sua, e para ativar\nas funcionalidades de e-mail em {{SITENAME}},\nabra o seguinte endereço no seu navegador:\n\n$3\n\nSe você *não* registrou a conta, siga a seguinte ligação\npara cancelar a confirmação do endereço de e-mail:\n\n$5\n\nEste código de confirmação irá expirar em $4.",
+ "confirmemail_body": "Alguém, provavelmente você, com o endereço de IP $1,\nregistrou uma conta \"$2\" com este endereço de email em {{SITENAME}}.\n\nPara confirmar que esta conta realmente é sua, e para ativar\nas funcionalidades de email em {{SITENAME}},\nabra o seguinte endereço no seu navegador:\n\n$3\n\nSe você *não* registrou a conta, clique neste link\npara cancelar a confirmação do endereço de email:\n\n$5\n\nEste código de confirmação irá expirar em $4.",
"confirmemail_body_changed": "Alguém, provavelmente você com o endereço de IP $1,\nalterou o endereço de e-mail da conta \"$2\" para este em {{SITENAME}}.\n\nPara confirmar que esta conta é realmente sua e reativar\nas funcionalidades de e-mail em {{SITENAME}},\nabra o seguinte link no seu navegador:\n\n$3\n\nCaso a conta *não* lhe pertença, siga o seguinte link\npara cancelar a confirmação do endereço de e-mail:\n\n$5\n\nEste código de confirmação irá expirar em $4.",
"confirmemail_body_set": "Alguém, provavelmente você, com o endereço de IP $1,\ndefiniu o endereço de e-mail da conta \"$2\" para este em {{SITENAME}}.\n\nPara confirmar que esta conta é realmente sua e reativar\nas funcionalidades de email em {{SITENAME}},\nabra o seguinte link no seu navegador:\n\n$3\n\nCaso a conta *não* lhe pertença, siga o seguinte link\npara cancelar a confirmação do endereço de e-mail:\n\n$5\n\nEste código de confirmação irá expirar em $4.",
"confirmemail_invalidated": "Confirmação de endereço de e-mail cancelada",
@@ -2835,7 +2875,7 @@
"table_pager_prev": "Página anterior",
"table_pager_first": "Primeira página",
"table_pager_last": "Última página",
- "table_pager_limit": "Mostrar $1 items por página",
+ "table_pager_limit": "Mostrar $1 itens por página",
"table_pager_limit_label": "Itens por página:",
"table_pager_limit_submit": "Ir",
"table_pager_empty": "Sem resultados",
@@ -2872,7 +2912,6 @@
"watchlisttools-edit": "Ver e editar a lista de páginas vigiadas",
"watchlisttools-raw": "Edição crua da lista de páginas vigiadas",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussão]])",
- "unknown_extension_tag": "\"$1\" é uma tag de extensão desconhecida",
"duplicate-defaultsort": "Aviso: A chave de ordenação padrão \"$2\" sobrepõe-se à anterior chave de ordenação padrão \"$1\".",
"version": "Versão",
"version-extensions": "Extensões instaladas",
@@ -2888,7 +2927,7 @@
"version-parser-function-hooks": "Funções \"hooks\" de \"parser\"",
"version-hook-name": "Nome do hook",
"version-hook-subscribedby": "Subscrito por",
- "version-version": "(Versão $1)",
+ "version-version": "($1)",
"version-license": "Licença do MediaWiki",
"version-ext-license": "Licença",
"version-ext-colheader-name": "Extensão",
@@ -2912,6 +2951,9 @@
"version-entrypoints": "URLs dos pontos de entrada",
"version-entrypoints-header-entrypoint": "Ponto de entrada",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Bibliotecas instaladas",
+ "version-libraries-library": "Biblioteca",
+ "version-libraries-version": "Versão",
"redirect": "Redirecionar por arquivo, usuário ou ID de revisão",
"redirect-legend": "Redirecionar para um arquivo ou página",
"redirect-summary": "Esta página especial redireciona a um arquivo (dado o nome do arquivo), a uma página (dado um ID de revisão ou ID da página) ou a uma página de usuário (dado o ID do usuário). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
@@ -2947,6 +2989,7 @@
"specialpages-group-wiki": "Dados e ferramentas",
"specialpages-group-redirects": "Páginas especiais redirecionadas",
"specialpages-group-spam": "Ferramentas anti-spam",
+ "specialpages-group-developer": "Ferramentas de desenvolvimento",
"blankpage": "Página em branco",
"intentionallyblankpage": "Esta página foi intencionalmente deixada em branco e é usada para medições de performance, etc.",
"external_image_whitelist": " # Deixe esta linha exatamente como ela está <pre>\n# Insira uma expressão regular (apenas a parte que vai entre o //) a seguir\n# Estas serão casadas com as URLs de imagens externas (''hotlinked'')\n# Aquelas que corresponderem serão exibidas como imagens; caso contrário, apenas um link para a imagem será mostrado\n# As linhas que começam com # são tratadas como comentários\n# Isto não é sensível à capitalização\n\n# Coloque todos os fragmentos de ''regex'' acima dessa linha. Deixe esta linha exatamente como ela está</pre>",
@@ -2959,12 +3002,39 @@
"tags-tag": "Nome da etiqueta",
"tags-display-header": "Aparência nas listas de modificações",
"tags-description-header": "Descrição completa do significado",
+ "tags-source-header": "Fonte",
"tags-active-header": "Ativo?",
"tags-hitcount-header": "Modificações etiquetadas",
+ "tags-actions-header": "Ações",
"tags-active-yes": "Sim",
"tags-active-no": "Não",
+ "tags-source-extension": "Definida por uma extensão",
+ "tags-source-manual": "Aplicado manualmente pelos usuários e pelos robôs",
+ "tags-source-none": "Não mais em uso",
"tags-edit": "editar",
+ "tags-delete": "Apagar",
+ "tags-activate": "Ativar",
+ "tags-deactivate": "Desativar",
"tags-hitcount": "$1 {{PLURAL:$1|modificação|modificações}}",
+ "tags-manage-no-permission": "Você não possui permissão para gerenciar alterações de etiquetas",
+ "tags-create-heading": "Criar uma nova etiqueta",
+ "tags-create-explanation": "Por padrão, etiquetas recém-criadas serão disponibilizadas para usuários e robôs",
+ "tags-create-tag-name": "Nome de etiqueta",
+ "tags-create-reason": "Razão:",
+ "tags-create-submit": "Criar",
+ "tags-create-no-name": "Você deve especificar um nome de etiqueta",
+ "tags-create-invalid-chars": "Nomes de etiquetas não devem conter vírgulas (<code>,</code>) ou barras (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Nomes de etiqueta não devem conter caracteres que não possam ser utilizados em títulos de páginas.",
+ "tags-create-already-exists": "A etiqueta \"$1\" já existe.",
+ "tags-create-warnings-below": "Você deseja continuar a criar a etiqueta?",
+ "tags-delete-title": "Apagar etiqueta",
+ "tags-delete-submit": "Apagar irreversivelmente esta etiqueta",
+ "tags-delete-not-allowed": "Etiquetas definidas por uma extensão não podem ser apagadas a menos que a extensão especificamente o permita.",
+ "tags-delete-not-found": "A etiqueta \"$1\" não existe.",
+ "tags-activate-title": "Ativar etiqueta",
+ "tags-activate-submit": "Ativar",
+ "tags-deactivate-title": "Desativar etiqueta",
+ "tags-deactivate-submit": "Desativar",
"comparepages": "Comparar páginas",
"compare-page1": "Página 1",
"compare-page2": "Página 2",
@@ -2976,7 +3046,7 @@
"compare-revision-not-exists": "A revisão que você especificou não existe.",
"dberr-problems": "Desculpe! Este sítio está passando por dificuldades técnicas.",
"dberr-again": "Experimente esperar alguns minutos e atualizar.",
- "dberr-info": "(Não foi possível contatar o servidor de base de dados: $1)",
+ "dberr-info": "(Não pode acessar a base de dados: $1)",
"dberr-info-hidden": "(Não foi possível contatar o banco de dados do servidor)",
"dberr-usegoogle": "Você pode tentar pesquisar no Google entretanto.",
"dberr-outofdate": "Note que os seus índices relativos ao nosso conteúdo podem estar desatualizados.",
@@ -3032,20 +3102,22 @@
"logentry-rights-rights": "$1 alterou os grupos de usuário de $3 de $4 para $5",
"logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
"logentry-rights-autopromote": "$1 foi promovido automaticamente de $4 para $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|carregado}} $3",
"rightsnone": "(nenhum)",
+ "revdelete-summary": "sumário de edição",
+ "feedback-adding": "Adicionando os comentários na página...",
+ "feedback-bugcheck": "Perfeito! Apenas verifique se não é um dos [$1 bugs já conhecidos].",
+ "feedback-bugnew": "Eu verifiquei. Relatar um bug novo",
"feedback-bugornote": "Se você está preparado para descrever detalhadamente um problema técnico, [$1 relate um bug].\nCaso contrário, você poderá usar o formulário simplificado a seguir. Seu comentário será adicionado à página \"[$3 $2]\", junto com o seu nome de usuário e o navegador que estiver usando neste momento.",
- "feedback-subject": "Assunto:",
- "feedback-message": "Mensagem:",
"feedback-cancel": "Cancelar",
- "feedback-submit": "Enviar Comentários",
- "feedback-adding": "Adicionando os comentários na página...",
+ "feedback-close": "Feito",
"feedback-error1": "Erro: O resultado da API não foi reconhecido",
"feedback-error2": "Erro: A edição falhou",
"feedback-error3": "Erro: A API não responde",
+ "feedback-message": "Mensagem:",
+ "feedback-subject": "Assunto:",
+ "feedback-submit": "Enviar",
"feedback-thanks": "Obrigado! O seu comentário foi adicionado à página \"[$2 $1]\".",
- "feedback-close": "Feito",
- "feedback-bugcheck": "Perfeito! Apenas verifique se não é um dos [$1 bugs já conhecidos].",
- "feedback-bugnew": "Eu verifiquei. Relatar um bug novo",
"searchsuggest-search": "Pesquisa",
"searchsuggest-containing": "contendo...",
"api-error-badaccess-groups": "Você não tem permissão para enviar arquivos para este wiki.",
@@ -3125,11 +3197,54 @@
"expand_templates_generate_xml": "Mostrar árvore de análise (parse) do XML",
"expand_templates_generate_rawhtml": "Mostrar HTML puro",
"expand_templates_preview": "Pré-visualização",
+ "pagelanguage": "Seletor de idioma de página",
"pagelang-name": "Página",
"pagelang-language": "Idioma",
"pagelang-use-default": "Idioma padrão de uso",
"pagelang-select-lang": "Selecionar idioma",
"right-pagelang": "Mudar idioma da página",
"action-pagelang": "mudar idioma da página",
- "log-name-pagelang": "Mudar idioma do log"
+ "log-name-pagelang": "Mudar idioma do log",
+ "mediastatistics": "Estatísticas de mídia",
+ "mediastatistics-summary": "Estatísticas sobre os tipos de arquivos carregados. Inclui apenas a versão mais recente do arquivo. Versões antigas ou apagadas são excluídas.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tipo MIME",
+ "mediastatistics-table-extensions": "Possíveis extensões",
+ "mediastatistics-table-count": "Número de arquivos",
+ "mediastatistics-table-totalbytes": "Tamanho combinado",
+ "mediastatistics-header-unknown": "Desconhecido",
+ "mediastatistics-header-bitmap": "Imagens de bitmap",
+ "mediastatistics-header-drawing": "Desenhos (imagens vetoriais)",
+ "mediastatistics-header-audio": "Áudio",
+ "mediastatistics-header-video": "Vídeos",
+ "mediastatistics-header-multimedia": "Mídia enriquecida",
+ "mediastatistics-header-office": "Documento",
+ "mediastatistics-header-text": "Textuais",
+ "mediastatistics-header-executable": "Executáveis",
+ "mediastatistics-header-archive": "Formatos compactados",
+ "json-error-state-mismatch": "JSON inválido ou malformado",
+ "json-error-ctrl-char": "Erro de caractere de controle, possivelmente codificada incorretamente",
+ "json-error-syntax": "Erro de sintaxe",
+ "json-error-utf8": "Caracteres UTF-8 malformados, possivelmente a codificação está incorreta.",
+ "json-error-recursion": "Uma ou mais referências recursivas no valor a ser codificado",
+ "json-error-unsupported-type": "Um valor de um tipo que não pode ser codificado foi dado",
+ "special-characters-group-latin": "Latino",
+ "special-characters-group-latinextended": "Latino estendido",
+ "special-characters-group-ipa": "AFI (IPA)",
+ "special-characters-group-symbols": "Símbolos",
+ "special-characters-group-greek": "Grego",
+ "special-characters-group-cyrillic": "Cirílico",
+ "special-characters-group-arabic": "Árabe",
+ "special-characters-group-arabicextended": "Árabe estendido",
+ "special-characters-group-persian": "Persa",
+ "special-characters-group-hebrew": "Hebraico",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tâmil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Cingalês",
+ "special-characters-group-gujarati": "Guzerate",
+ "special-characters-group-devanagari": "Devanágari",
+ "special-characters-group-thai": "Tailandês",
+ "special-characters-group-lao": "Laociano",
+ "special-characters-group-khmer": "Cambojano"
}
diff --git a/languages/i18n/pt.json b/languages/i18n/pt.json
index 236cfbf6..3a0e736e 100644
--- a/languages/i18n/pt.json
+++ b/languages/i18n/pt.json
@@ -62,7 +62,9 @@
"555",
"아라",
"Leon saudanha",
- "Macofe"
+ "Macofe",
+ "He7d3r",
+ "Ti4goc"
]
},
"tog-underline": "Sublinhar ligações:",
@@ -90,7 +92,7 @@
"tog-shownumberswatching": "Mostrar o número de utilizadores a vigiar",
"tog-oldsig": "Assinatura atual:",
"tog-fancysig": "Tratar assinatura como texto wiki (sem hiperligações automáticas)",
- "tog-uselivepreview": "Usar a antevisão ao vivo (experimental)",
+ "tog-uselivepreview": "Usar a antevisão ao vivo",
"tog-forceeditsummary": "Avisar-me se deixar o resumo da edição vazio",
"tog-watchlisthideown": "Esconder as minhas edições ao listar mudanças às páginas vigiadas",
"tog-watchlisthidebots": "Esconder edições de robôs ao listar mudanças às páginas vigiadas",
@@ -278,6 +280,7 @@
"pool-queuefull": "A fila de processos está cheia",
"pool-errorunknown": "Erro desconhecido",
"pool-servererror": "O serviço ''pool counter'' não está disponível ($1).",
+ "poolcounter-usage-error": "Erro de uso: $1",
"aboutsite": "Sobre a {{SITENAME}}",
"aboutpage": "Project:Sobre",
"copyright": "Conteúdo disponibilizado nos termos da $1, salvo indicação em contrário.",
@@ -287,6 +290,7 @@
"disclaimers": "Exoneração de responsabilidade",
"disclaimerpage": "Project:Aviso_geral",
"edithelp": "Ajuda de edição",
+ "helppage-top-gethelp": "Ajuda",
"mainpage": "Página principal",
"mainpage-description": "Página principal",
"policy-url": "Project:Políticas",
@@ -369,6 +373,8 @@
"filerenameerror": "Não foi possível alterar o nome do ficheiro \"$1\" para \"$2\".",
"filedeleteerror": "Não foi possível eliminar o ficheiro \"$1\".",
"directorycreateerror": "Não foi possível criar o diretório \"$1\".",
+ "directoryreadonlyerror": "O diretório \"$1\" é apenas de leitura.",
+ "directorynotreadableerror": "O diretório \"$1\" não é legível.",
"filenotfound": "Não foi possível encontrar o ficheiro \"$1\".",
"unexpected": "Valor não esperado: \"$1\"=\"$2\".",
"formerror": "Erro: Não foi possível enviar o formulário",
@@ -390,7 +396,8 @@
"viewsourcetext": "Pode ver e copiar o conteúdo desta página:",
"viewyourtext": "Pode ver e copiar o código-fonte das '''suas edições''' desta página:",
"protectedinterface": "Esta página fornece o texto da interface ao software, e está protegida para prevenir abusos.",
- "editinginterface": "'''Aviso:''' Está a editar uma página usada para fornecer texto de interface ao software. Alterações a esta página afetarão a aparência da interface de utilizador para os outros utilizadores. Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt translatewiki.net], um projeto destinado à tradução do MediaWiki.",
+ "editinginterface": "<strong>Aviso:</strong> Está a editar uma página usada para fornecer texto de interface ao software. Alterações a esta página afetarão a aparência da interface de utilizador para os outros utilizadores.",
+ "translateinterface": "Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt translatewiki.net], um projeto destinado à tradução do MediaWiki.",
"cascadeprotected": "Esta página foi protegida contra edições por estar incluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de proteção \"em cascata\" ativada):\n$2",
"namespaceprotected": "Não tem permissão para editar páginas no domínio '''$1'''.",
"customcssprotected": "Não tem permissão para editar esta página de CSS porque esta contém as configurações pessoais de outro utilizador.",
@@ -428,7 +435,7 @@
"userlogin-remembermypassword": "Manter-me autenticado",
"userlogin-signwithsecure": "Usar uma ligação segura",
"yourdomainname": "O seu domínio:",
- "password-change-forbidden": "Não pode alterar palavras-chave nesta wiki.",
+ "password-change-forbidden": "Não pode alterar palavras-passe nesta wiki.",
"externaldberror": "Ocorreu um erro externo à base de dados durante a autenticação ou não lhe é permitido atualizar a sua conta externa.",
"login": "Entrar",
"nav-login-createaccount": "Entrar / criar conta",
@@ -447,6 +454,8 @@
"userlogin-resetlink": "Esqueceu-se do seu nome de utilizador ou da palavra-passe?",
"userlogin-resetpassword-link": "Esqueceu-se da sua palavra-passe?",
"userlogin-helplink2": "Ajuda para iniciar sessão",
+ "userlogin-loggedin": "Já está {{GENDER:$1|autenticado|autenticada|autenticado}} com o nome $1.\nUse o formulário abaixo para iniciar sessão com outro nome.",
+ "userlogin-createanother": "Criar outra conta",
"createacct-emailrequired": "Endereço de correio eletrónico",
"createacct-emailoptional": "Endereço de correio eletrónico (opcional)",
"createacct-email-ph": "Digite o seu endereço de correio eletrónico",
@@ -482,6 +491,7 @@
"wrongpassword": "A palavra-passe que introduziu é inválida. Tente novamente, por favor.",
"wrongpasswordempty": "A palavra-passe não foi introduzida. \nIntroduza-a, por favor.",
"passwordtooshort": "A palavra-passe deve ter no mínimo $1 {{PLURAL:$1|carácter|caracteres}}.",
+ "passwordtoolong": "A palavra-passe deve exceder $1 {{PLURAL:$1|carácter|caracteres}}.",
"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",
@@ -607,6 +617,7 @@
"anoneditwarning": "<strong>Aviso</strong>: Não iniciou sessão. O seu endereço IP será registado no histórico de edições desta página. Se <strong>[$1 iniciar sessão]</strong> ou <strong>[$2 criar uma conta]</strong>, as suas edições serão registadas com o seu nome de utilizador(a), bem como usufruir de outros benefícios.",
"anonpreviewwarning": "''Não iniciou sessão. Ao gravar, registará o seu endereço IP no histórico de edições da página.''",
"missingsummary": "'''Atenção:''' Não introduziu um resumo da edição.\nSe clicar novamente \"Gravar página\" a sua edição será gravada sem resumo.",
+ "selfredirect": "<strong>Aviso:</strong> Está a redirecionar esta página para si mesma.\nPode ter especificado o destino errado para a página ou até a editar a página errada.\nSe clicar em \"{{int:savearticle}}\" novamente, o redirecionamento será criado na mesma.",
"missingcommenttext": "Introduza um comentário abaixo, por favor.",
"missingcommentheader": "'''Atenção:''' Não introduziu um assunto ou cabeçalho para este comentário.\nSe clicar novamente \"{{int:savearticle}}\", a sua edição será gravada sem assunto ou cabeçalho.",
"summary-preview": "Antevisão do resumo:",
@@ -705,6 +716,10 @@
"content-model-text": "texto simples",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Objeto vazio",
+ "content-json-empty-array": "Matriz vazia",
+ "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições",
+ "duplicate-args-category-desc": "A página contém campos de predefinições que utilizam duplicatas de argumentos, tais como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Aviso:''' Esta página contém demasiadas chamadas de funções exigentes do analisador sintático.\n\nDevia ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento tem $1 {{PLURAL:$1|chamada|chamadas}}.",
"expensive-parserfunction-category": "Páginas com demasiadas chamadas a funções exigentes",
"post-expand-template-inclusion-warning": "Aviso: O tamanho de inclusão de predefinições é demasiado grande, algumas predefinições não serão incluídas.",
@@ -759,7 +774,7 @@
"history-feed-empty": "A página solicitada não existe.\nPode ter sido eliminada da wiki ou o nome sido alterado.\nTente [[Special:Search|pesquisar na wiki]] novas páginas relevantes.",
"rev-deleted-comment": "(resumo da edição suprimido)",
"rev-deleted-user": "(nome de utilizador removido)",
- "rev-deleted-event": "(entrada removida)",
+ "rev-deleted-event": "(registos de detalhes eliminados)",
"rev-deleted-user-contribs": "[nome de utilizador ou IP removido - edição ocultada das contribuições]",
"rev-deleted-text-permission": "Esta revisão de página foi <strong>eliminada</strong>.\nEncontrará detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].",
"rev-suppressed-text-permission": "Esta revisão de página foi <strong>suprimida</strong>.\nPode consultar os detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].",
@@ -793,7 +808,7 @@
"revdelete-legend": "Definir restrições de visibilidade",
"revdelete-hide-text": "Revisão do texto",
"revdelete-hide-image": "Ocultar conteúdo do ficheiro",
- "revdelete-hide-name": "Ocultar operação e destino",
+ "revdelete-hide-name": "Ocultar destino e parâmetros",
"revdelete-hide-comment": "Resumo da edição",
"revdelete-hide-user": "Nome de utilizador/endereço de IP",
"revdelete-hide-restricted": "Ocultar dados dos administradores e de todos os outros",
@@ -847,7 +862,6 @@
"mergehistory-same-destination": "As páginas de origem e de destino não podem ser a mesma",
"mergehistory-reason": "Motivo:",
"mergelog": "Registo de fusão de históricos",
- "pagemerge-logentry": "[[$1]] foi fundida em [[$2]] (até a edição $3)",
"revertmerge": "Desfazer fusão",
"mergelogpagetext": "Segue-se um registo das mais recentes fusões de históricos de páginas.",
"history-title": "Histórico de edições de \"$1\"",
@@ -870,6 +884,8 @@
"notextmatches": "Não foi possível localizar, no conteúdo das páginas, o termo pesquisado",
"prevn": "{{PLURAL:$1|anterior|$1 anteriores}}",
"nextn": "{{PLURAL:$1|posterior|$1 posteriores}}",
+ "prev-page": "página anterior",
+ "next-page": "página seguinte",
"prevn-title": "$1 {{PLURAL:$1|resultado anterior|resultados anteriores}}",
"nextn-title": "{{PLURAL:$1|próximo|próximos}} $1 {{PLURAL:$1|resultado|resultados}}",
"shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
@@ -888,6 +904,7 @@
"search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 ficheiro|$3 ficheiros}})",
"search-redirect": "(redirecionamento de $1)",
"search-section": "(seção $1)",
+ "search-category": "(categoria $1)",
"search-file-match": "(coincide com o conteúdo do ficheiro)",
"search-suggest": "Será que quis dizer: $1",
"search-interwiki-caption": "Projetos irmãos",
@@ -921,6 +938,11 @@
"prefs-personal": "Dados do utilizador",
"prefs-rc": "Mudanças recentes",
"prefs-watchlist": "Páginas vigiadas",
+ "prefs-editwatchlist": "Editar lista de páginas vigiadas",
+ "prefs-editwatchlist-label": "Editar entradas na sua lista de páginas vigiadas:",
+ "prefs-editwatchlist-edit": "Ver e remover títulos da sua lista de páginas vigiadas",
+ "prefs-editwatchlist-raw": "Editar lista de páginas vigiadas em forma de texto",
+ "prefs-editwatchlist-clear": "Limpar lista de páginas vigiadas",
"prefs-watchlist-days": "Dias a mostrar nas mudanças às páginas vigiadas:",
"prefs-watchlist-days-max": "Máximo: $1 {{PLURAL:$1|dia|dias}}",
"prefs-watchlist-edits": "Número de edições a mostrar na listagem expandida:",
@@ -990,7 +1012,7 @@
"gender-female": "Ela edita páginas wiki",
"prefs-help-gender": "Esta preferência é opcional.\nO software usa o seu valor para o endereçar e para o mencionar a outros usando o género gramatical apropriado.\nEsta informação será pública.",
"email": "Correio eletrónico",
- "prefs-help-realname": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu trabalho.",
+ "prefs-help-realname": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, será utilizado para atribuir-lhe crédito pelo seu trabalho.",
"prefs-help-email": "Opcional: o endereço de correio eletrónico é opcional, mas será necessário para redefinir a palavra-passe caso esqueça a antiga.",
"prefs-help-email-others": "Também pode optar por permitir que outros entrem em contacto consigo por correio eletrónico, através de uma ligação nas suas páginas de utilizador ou de discussão, sem revelar o seu endereço de correio eletrónico.",
"prefs-help-email-required": "É necessário o endereço de correio eletrónico.",
@@ -1072,7 +1094,7 @@
"right-reupload-shared": "Sobrescrever localmente ficheiros no repositório partilhado de imagens",
"right-upload_by_url": "Carregar um ficheiro de um endereço URL",
"right-purge": "Limpar a ''cache'' de uma página no servidor sem confirmação",
- "right-autoconfirmed": "Editar páginas semi-protegidas",
+ "right-autoconfirmed": "Não ser afetado pelos limites de frequência baseados no número de IP",
"right-bot": "Ser tratado como um processo automatizado",
"right-nominornewtalk": "Não despoletar o aviso de mensagens novas ao fazer edições menores a páginas de discussão",
"right-apihighlimits": "Usar limites superiores nas consultas ''(queries)'' via API",
@@ -1097,6 +1119,7 @@
"right-protect": "Mudar níveis de proteção e editar páginas protegidas em cascata",
"right-editprotected": "Editar páginas protegidas como \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Editar páginas protegidas como \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Editar o modelo de conteúdo de uma página",
"right-editinterface": "Editar a interface de utilizador",
"right-editusercssjs": "Editar os ficheiros CSS e JS de outros utilizadores",
"right-editusercss": "Editar os ficheiros CSS de outros utilizadores",
@@ -1124,6 +1147,7 @@
"right-override-export-depth": "Exportar páginas incluindo páginas ligadas até uma profundidade de 5",
"right-sendemail": "Enviar correio eletrónico a outros utilizadores",
"right-passwordreset": "Ver mensagens de redefinição da palavra-passe",
+ "right-managechangetags": "Criar e eliminar [[Special:Tags|etiquetas]] da base de dados",
"newuserlogpage": "Registo de criação de utilizadores",
"newuserlogpagetext": "Este é um registo de novas contas de utilizador",
"rightslog": "Registo de privilégios de utilizador",
@@ -1169,6 +1193,8 @@
"action-viewmywatchlist": "ver a sua lista de páginas vigiadas",
"action-viewmyprivateinfo": "ver a sua informação privada",
"action-editmyprivateinfo": "editar a sua informação privada",
+ "action-editcontentmodel": "editar o modelo de conteúdo de uma página",
+ "action-managechangetags": "criar e eliminar etiquetas da base de dados",
"nchanges": "$1 {{PLURAL:$1|alteração|alterações}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde a última visita}}",
"enhancedrc-history": "histórico",
@@ -1239,9 +1265,9 @@
"uploaderror": "Erro ao carregar",
"upload-recreate-warning": "'''Aviso: Um ficheiro com esse nome foi eliminado ou movido.'''\n\nPara sua conveniência, é apresentado de seguida o registo de eliminação e de movimento da página:",
"uploadtext": "Utilize o formulário abaixo para fazer o carregamento de novos ficheiros.\nPara ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]].\nOs reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de carregamentos]] e as eliminações no [[Special:Log/delete|registo de eliminações]].\n\nPara utilizar um ficheiro numa página, depois de ter feito o carregamento, insira uma ligação com um dos seguintes formatos:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.jpg]]</nowiki></code>''' para mostrar uma imagem nas suas dimensões originais;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.png|200px|thumb|left|texto]]</nowiki></code>''' para mostrar uma imagem com a dimensão horizontal de 200 pixels, dentro de uma caixa, na margem esquerda, contendo 'texto' como descrição (pode usar subconjuntos destas características);\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:ficheiro.ogg]]</nowiki></code>''' para apresentar uma ligação direta para o ficheiro em vez de mostrá-lo, quer este tenha por conteúdo uma imagem ou outros dados.",
- "upload-permitted": "Tipos de ficheiro permitidos: $1.",
- "upload-preferred": "Tipos de ficheiro preferidos: $1.",
- "upload-prohibited": "Tipos de ficheiro proibidos: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|permitido|permitidos}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|preferido|preferidos}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|proibido|proibidos}}: $1.",
"uploadlogpage": "Registo de carregamento",
"uploadlogpagetext": "Segue-se uma lista dos carregamentos mais recentes.\nConsulte a [[Special:NewFiles|galeria de novos ficheiros]] para visioná-los.",
"filename": "Nome do ficheiro",
@@ -1499,7 +1525,6 @@
"statistics": "Estatísticas",
"statistics-header-pages": "Estatísticas de páginas",
"statistics-header-edits": "Estatísticas de edições",
- "statistics-header-views": "Ver estatísticas",
"statistics-header-users": "Estatísticas de utilizadores",
"statistics-header-hooks": "Outras estatísticas",
"statistics-articles": "Páginas de conteúdo",
@@ -1508,13 +1533,9 @@
"statistics-files": "Ficheiros carregados",
"statistics-edits": "Edições de páginas desde que a {{SITENAME}} foi instalada",
"statistics-edits-average": "Média de edições por página",
- "statistics-views-total": "Total de visionamentos",
- "statistics-views-total-desc": "Não estão incluídos os visionamentos de páginas inexistentes e páginas especiais",
- "statistics-views-peredit": "Visionamentos por edição",
"statistics-users": "[[Special:ListUsers|Utilizadores]] registados",
"statistics-users-active": "Utilizadores ativos",
"statistics-users-active-desc": "Utilizadores que efectuaram uma operação {{PLURAL:$1|no último dia|nos últimos $1 dias}}",
- "statistics-mostpopular": "Páginas mais vistas",
"pageswithprop": "Páginas com uma propriedade",
"pageswithprop-legend": "Páginas com uma propriedade",
"pageswithprop-text": "Esta página lista páginas que usam uma propriedade em particular.",
@@ -1555,7 +1576,6 @@
"uncategorizedtemplates": "Predefinições não categorizadas",
"unusedcategories": "Categorias não utilizadas",
"unusedimages": "Ficheiros não utilizados",
- "popularpages": "Páginas populares",
"wantedcategories": "Categorias desejadas",
"wantedpages": "Páginas desejadas",
"wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
@@ -1567,7 +1587,7 @@
"wantedtemplates": "Predefinições desejadas",
"mostlinked": "Páginas com mais afluentes",
"mostlinkedcategories": "Categorias com mais membros",
- "mostlinkedtemplates": "Páginas com mais afluentes",
+ "mostlinkedtemplates": "Páginas mais transcluídas",
"mostcategories": "Páginas com mais categorias",
"mostimages": "Ficheiros com mais afluentes",
"mostinterwikis": "Páginas com mais interlínguas",
@@ -1617,9 +1637,11 @@
"pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
"suppress": "Supervisor",
"querypage-disabled": "Esta página especial está desativada para não prejudicar o desempenho.",
+ "apihelp": "Ajuda API",
+ "apihelp-no-such-module": "Módulo \"$1\" não encontrado.",
"booksources": "Fontes bibliográficas",
"booksources-search-legend": "Pesquisar referências bibliográficas",
- "booksources-go": "Ir",
+ "booksources-search": "Pesquisar",
"booksources-text": "É apresentada abaixo uma lista de ligações para outros sítios na Internet que vendem livros novos e usados e talvez possuam informações adicionais sobre os livros que procura:",
"booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique a existência de erros ao copiar da fonte original.",
"specialloguserlabel": "Executante:",
@@ -1689,7 +1711,7 @@
"listgrouprights-namespaceprotection-header": "Restrições do domínio",
"listgrouprights-namespaceprotection-namespace": "Domínio",
"listgrouprights-namespaceprotection-restrictedto": "Direito(s) do utilizador para editar",
- "trackingcategories": "Monitoramento de categorias",
+ "trackingcategories": "Categorias de monitorização",
"trackingcategories-summary": "Esta página lista as categorias monitoradas que foram geradas automaticamente pelo software MediaWiki. Os seus nomes podem ser alterados ao editar sua mensagem correspondente no domínio {{ns:8}}.",
"trackingcategories-msg": "Categoria monitorada",
"trackingcategories-name": "Nome da mensagem",
@@ -1730,7 +1752,7 @@
"emailccsubject": "Cópia da sua mensagem para $1: $2",
"emailsent": "Mensagem enviada",
"emailsenttext": "A sua mensagem foi enviada.",
- "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 através da opção \"Contactar este utilizador\" em {{SITENAME}}.",
+ "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 através da opção \"{{int:emailpage}}\" em {{SITENAME}}.",
"usermessage-summary": "Deixar mensagem de sistema.",
"usermessage-editor": "Editor de mensagens de sistema",
"watchlist": "Páginas vigiadas",
@@ -1755,7 +1777,7 @@
"wlheader-enotif": "A notificação por correio eletrónico está ativa.",
"wlheader-showupdated": "As páginas modificadas desde a última vez que as visitou aparecem destacadas a '''negrito'''.",
"wlnote": "A seguir {{PLURAL:$1|está a última alteração ocorrida|estão as últimas <strong>$1</strong> alterações ocorridas}} {{PLURAL:$2|na última hora|nas últimas <strong>$2</strong> horas}} até $3, $4.",
- "wlshowlast": "Ver últimas $1 horas $2 dias $3",
+ "wlshowlast": "Ver últimas $1 horas $2 dias",
"watchlist-options": "Opções da lista de páginas vigiadas",
"watching": "A vigiar...",
"unwatching": "A deixar de vigiar...",
@@ -1804,7 +1826,6 @@
"deleteprotected": "Não é possível eliminar esta página porque foi protegida.",
"deleting-backlinks-warning": "'''Aviso:''' Existem [[Special:WhatLinksHere/{{FULLPAGENAME}}|páginas]] que contêm ligações para a página que está prestes a eliminar ou que a transcluem.",
"rollback": "Reverter edições",
- "rollback_short": "Reverter",
"rollbacklink": "reverter",
"rollbacklinkcount": "reverter $1 {{PLURAL:$1|edição|edições}}",
"rollbacklinkcount-morethan": "reverter mais do que $1 {{PLURAL:$1|edição|edições}}",
@@ -1854,6 +1875,7 @@
"protect-othertime": "Outra duração:",
"protect-othertime-op": "outra duração",
"protect-existing-expiry": "A proteção atual expirará às $3 de $2",
+ "protect-existing-expiry-infinity": "Existente tempo de expiração: infinito",
"protect-otherreason": "Outro motivo/motivo adicional:",
"protect-otherreason-op": "Outro motivo",
"protect-dropdown": "*Motivos comuns para proteção\n** Vandalismo excessivo\n** ''Spam'' excessivo\n** Guerra de edições improdutiva\n** Página muito visitada",
@@ -1913,6 +1935,7 @@
"namespace": "Domínio:",
"invert": "Inverter seleção",
"tooltip-invert": "Marque esta caixa para esconder as alterações a páginas no domínio selecionado (e no domínio associado, se escolheu fazê-lo)",
+ "tooltip-whatlinkshere-invert": "Marque esta caixa de seleção para ocultar ligações de páginas dentro do domínio selecionado.",
"namespace_association": "Domínio associado",
"tooltip-namespace_association": "Marque esta caixa para incluir também o domínio de conteúdo ou de discussão associado à sua seleção",
"blanknamespace": "(Principal)",
@@ -1939,7 +1962,7 @@
"sp-contributions-blocked-notice-anon": "Este endereço IP está bloqueado neste momento.\nPara referência é apresentado abaixo o último registo de bloqueio:",
"sp-contributions-search": "Pesquisar contribuições",
"sp-contributions-username": "Endereço de IP ou utilizador(a):",
- "sp-contributions-toponly": "Mostrar somente as revisões mais recentes",
+ "sp-contributions-toponly": "Mostrar apenas as edições mais recentes",
"sp-contributions-newonly": "Mostrar só edições que são criações de páginas",
"sp-contributions-submit": "Pesquisar",
"whatlinkshere": "Páginas afluentes",
@@ -1953,7 +1976,7 @@
"isimage": "ligação para ficheiro",
"whatlinkshere-prev": "{{PLURAL:$1|anterior|$1 anteriores}}",
"whatlinkshere-next": "{{PLURAL:$1|próximo|próximos $1}}",
- "whatlinkshere-links": "← ligações",
+ "whatlinkshere-links": "← afluentes",
"whatlinkshere-hideredirs": "$1 redirecionamentos",
"whatlinkshere-hidetrans": "$1 transclusões",
"whatlinkshere-hidelinks": "$1 ligações",
@@ -2177,14 +2200,15 @@
"thumbnail-temp-create": "Não foi possível criar o ficheiro temporário da miniatura",
"thumbnail-dest-create": "Não é possível gravar a miniatura no destino",
"thumbnail_invalid_params": "Parâmetros de miniatura inválidos",
+ "thumbnail_toobigimagearea": "Ficheiro com dimensões superiores a $1",
"thumbnail_dest_directory": "Não foi possível criar o diretório de destino",
"thumbnail_image-type": "Tipo de imagem não suportado",
"thumbnail_gd-library": "Configuração da biblioteca GD incompleta: função $1 em falta",
"thumbnail_image-missing": "Ficheiro em falta: $1",
"thumbnail_image-failure-limit": "Ocorreram demasiadas tentativas recentes ($1 ou mais) de criação desta miniatura. Tente novamente mais tarde, por favor.",
"import": "Importar páginas",
- "importinterwiki": "Importação transwikis",
- "import-interwiki-text": "Selecione uma wiki e um título de página a importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwikis são registadas no [[Special:Log/import|Registo de importações]].",
+ "importinterwiki": "Importar de uma outra wiki",
+ "import-interwiki-text": "Selecione uma wiki e um título de página a importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação a partir de outras wikis são registadas no [[Special:Log/import|registo de importações]].",
"import-interwiki-sourcewiki": "Wiki de origem:",
"import-interwiki-sourcepage": "Página de origem:",
"import-interwiki-history": "Copiar todo o histórico de revisões desta página",
@@ -2228,18 +2252,15 @@
"import-rootpage-nosubpage": "O domínio \"$1\" da página de raiz não permite subpáginas.",
"importlogpage": "Registo de importações",
"importlogpagetext": "Importações administrativas de páginas com a preservação do histórico de edição de outras wikis.",
- "import-logentry-upload": "importou [[$1]] por carregamento de ficheiro",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|edição importada|edições importadas}}",
- "import-logentry-interwiki": "transwikis $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|edição importada|edições importadas}} de $2",
"javascripttest": "Teste de JavaScript",
- "javascripttest-title": "A executar os testes $1",
"javascripttest-pagetext-noframework": "Esta página é reservada para a execução de testes de JavaScript.",
"javascripttest-pagetext-unknownframework": "Estrutura de testes \"$1\" desconhecida.",
+ "javascripttest-pagetext-unknownaction": "Ação \"$1\" desconhecida.",
"javascripttest-pagetext-frameworks": "Escolha, por favor, uma das seguintes estruturas de teste: $1",
"javascripttest-pagetext-skins": "Escolher um tema para executar os testes com:",
"javascripttest-qunit-intro": "Consulte a [ $1 documentação de testes] no mediawiki.org.",
- "javascripttest-qunit-heading": "Pacote de ferramentas de teste de JavaScript QUnit do MediaWiki",
"tooltip-pt-userpage": "A sua página de utilizador",
"tooltip-pt-anonuserpage": "A página de utilizador para o endereço IP que está a usar",
"tooltip-pt-mytalk": "A sua página de discussão",
@@ -2249,6 +2270,7 @@
"tooltip-pt-mycontris": "Lista das suas contribuições",
"tooltip-pt-login": "É encorajado que inicie sessão, apesar de não ser obrigatório.",
"tooltip-pt-logout": "Sair da conta",
+ "tooltip-pt-createaccount": "É encorajado a criar uma conta e iniciar sessão; no entanto, não é obrigatório",
"tooltip-ca-talk": "Discussão sobre o conteúdo da página",
"tooltip-ca-edit": "Pode editar esta página.\nUtilize o botão de antevisão do resultado antes de gravar, por favor.",
"tooltip-ca-addsection": "Iniciar uma nova seção",
@@ -2278,6 +2300,7 @@
"tooltip-feed-atom": "''Feed'' Atom desta página",
"tooltip-t-contributions": "Ver as contribuições deste utilizador",
"tooltip-t-emailuser": "Enviar uma mensagem de correio a este utilizador",
+ "tooltip-t-info": "Mais informações sobre esta página",
"tooltip-t-upload": "Carregar ficheiros",
"tooltip-t-specialpages": "Lista de páginas especiais",
"tooltip-t-print": "Versão para impressão desta página",
@@ -2345,7 +2368,6 @@
"pageinfo-robot-policy": "Indexação por robôs",
"pageinfo-robot-index": "Permitida",
"pageinfo-robot-noindex": "Não permitida",
- "pageinfo-views": "Número de visitas",
"pageinfo-watchers": "Número de vigilantes da página",
"pageinfo-few-watchers": "Menos do que $1 {{PLURAL:$1|vigilante|vigilantes}}",
"pageinfo-redirects-name": "Número de redirecionamentos para esta página",
@@ -2794,7 +2816,6 @@
"exif-urgency-low": "Baixa ($1)",
"exif-urgency-high": "Alta ($1)",
"exif-urgency-other": "Prioridade definida pelo utilizador ($1)",
- "watchlistall2": "todas",
"namespacesall": "todos",
"monthsall": "todos",
"confirmemail": "Confirmar endereço de correio eletrónico",
@@ -2881,9 +2902,9 @@
"watchlisttools-edit": "Ver e editar a lista de páginas vigiadas",
"watchlisttools-raw": "Editar a lista de páginas vigiadas em forma de texto",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussão]])",
- "unknown_extension_tag": "\"$1\" é uma marca de extensão desconhecida",
"duplicate-defaultsort": "<strong>Aviso:</strong> A chave de ordenação padrão \"$2\" sobrepõe-se à anterior \"$1\".",
"duplicate-displaytitle": "<strong>Aviso:</strong> Exibir título \"$2\" substituindo o título anteriormente em exibição \"$1\".",
+ "invalid-indicator-name": "<strong>Erro:</strong> O atributo <code>name</code>, da página de estados, não deve estar em branco.",
"version": "Versão",
"version-extensions": "Extensões instaladas",
"version-skins": "Temas instalados",
@@ -2898,7 +2919,7 @@
"version-parser-function-hooks": "''Hooks'' das funções do analisador sintático",
"version-hook-name": "Nome do hook",
"version-hook-subscribedby": "Subscrito por",
- "version-version": "(Versão $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[sem nome]",
"version-license": "Licença do MediaWiki",
"version-ext-license": "Licença",
@@ -2923,6 +2944,9 @@
"version-entrypoints": "URL de ponto de entrada",
"version-entrypoints-header-entrypoint": "Ponto de entrada",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Bibliotecas instaladas",
+ "version-libraries-library": "Biblioteca",
+ "version-libraries-version": "Versão",
"redirect": "Redireccionar pelo ID do ficheiro, do utilizador ou da revisão",
"redirect-legend": "Redirecionar para um ficheiro ou página",
"redirect-summary": "Esta página especial redirecciona para um ficheiro (dado o nome do ficheiro), para uma página (dado um ID de revisão ou página) ou para uma página de utilizador (dado um ID numérico do utilizador). Utilização: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] ou [[{{#Special:Redirect}}/user/101]].",
@@ -2956,8 +2980,9 @@
"specialpages-group-pages": "Listas de páginas",
"specialpages-group-pagetools": "Ferramentas de páginas",
"specialpages-group-wiki": "Dados e ferramentas",
- "specialpages-group-redirects": "Pesquisas e aleatoriedade",
+ "specialpages-group-redirects": "Redirecionar páginas especiais",
"specialpages-group-spam": "Ferramentas anti-spam",
+ "specialpages-group-developer": "Ferramentas de desenvolvimento",
"blankpage": "Página em branco",
"intentionallyblankpage": "Esta página foi intencionalmente deixada em branco",
"external_image_whitelist": " # Deixe esta linha exatamente como ela está<pre>\n# Coloque fragmentos de expressões regulares (apenas a parte entre //) abaixo\n# Estas serão comparadas com as URL das imagens externas (com ligação direta)\n# As que corresponderem serão apresentadas como imagens, caso contrário apenas será apresentado um link para a imagem\n# As linhas que começam com um símbolo de cardinal (#) são tratadas como comentários\n# Esta lista não distingue maiúsculas de minúsculas\n\n# Coloque todos os fragmentos de expressões regulares (regex) acima desta linha. Deixe esta linha exatamente como ela está</pre>",
@@ -2970,12 +2995,54 @@
"tags-tag": "Nome da etiqueta",
"tags-display-header": "Aparência nas listas de modificações",
"tags-description-header": "Descrição completa do significado",
+ "tags-source-header": "Origem",
"tags-active-header": "Ativa?",
"tags-hitcount-header": "Modificações etiquetadas",
+ "tags-actions-header": "Ações",
"tags-active-yes": "Sim",
"tags-active-no": "Não",
+ "tags-source-extension": "Definida por uma extensão",
+ "tags-source-manual": "Aplicada manualmente pelos utilizadores e robôs",
+ "tags-source-none": "Já não está em uso",
"tags-edit": "editar",
+ "tags-delete": "eliminar",
+ "tags-activate": "ativar",
+ "tags-deactivate": "desativar",
"tags-hitcount": "$1 {{PLURAL:$1|modificação|modificações}}",
+ "tags-manage-no-permission": "Não possui permissão para gerir alterações de etiquetas.",
+ "tags-create-heading": "Criar nova etiqueta",
+ "tags-create-explanation": "Por definição, etiquetas recém-criadas estarão disponíveis para utilização por utilizadores e robôs.",
+ "tags-create-tag-name": "Nome da etiqueta:",
+ "tags-create-reason": "Motivo:",
+ "tags-create-submit": "Criar",
+ "tags-create-no-name": "Deve especificar um nome para a etiqueta.",
+ "tags-create-invalid-chars": "Os nomes das etiquetas não devem conter vírgulas (<code>,</code>) ou barras (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Os nomes das etiquetas não devem conter caracteres que não podem ser usados em títulos de página.",
+ "tags-create-already-exists": "A etiqueta \"$1\" já existe.",
+ "tags-create-warnings-above": "{{PLURAL:$2|O seguinte aviso foi encontrado|Os seguintes avisos foram encontrados}} ao tentar criar a etiqueta \"$1\":",
+ "tags-create-warnings-below": "Pretende continuar com a criação da etiqueta?",
+ "tags-delete-title": "Eliminar etiqueta",
+ "tags-delete-explanation-initial": "Está prestes a eliminar a etiqueta \"$1\" da base de dados.",
+ "tags-delete-explanation-in-use": "Será removida de {{PLURAL:$2|$2 edição ou entrada de registo|todas as $2 edições e/ou entradas de registo}} em que está atualmente aplicada.",
+ "tags-delete-explanation-warning": "Esta ação é <strong>irreversível</strong> e <strong>não pode ser desfeita</strong>, nem mesmo por administradores da base de dados. Tenha a certeza de que é esta etiqueta que pretende eliminar.",
+ "tags-delete-explanation-active": "<strong>A etiqueta \"$1\" ainda está ativa e continuará a ser aplicada no futuro.</strong> Para prevenir que isto aconteça, deve dirigir-se ao(s) local(is) em que a etiqueta é aplicada, e a partir daí, desativá-la.",
+ "tags-delete-reason": "Motivo:",
+ "tags-delete-submit": "Eliminar irreversivelmente esta etiqueta",
+ "tags-delete-not-allowed": "Etiquetas definidas por uma extensão não podem ser eliminadas, a menos que a extensão, especificamente, o permita.",
+ "tags-delete-not-found": "A etiqueta \"$1\" não existe.",
+ "tags-delete-too-many-uses": "A etiqueta \"$1\" está aplicada em mais que $2 {{PLURAL:$2|edição|edições}}, o que significa que não pode ser eliminada.",
+ "tags-delete-warnings-after-delete": "A etiqueta \"$1\" foi eliminada com sucesso, mas {{PLURAL:$2|o seguinte aviso foi encontrado|os seguintes avisos foram encontrados}}:",
+ "tags-activate-title": "Ativar etiqueta",
+ "tags-activate-question": "Está prestes a ativar a etiqueta \"$1\".",
+ "tags-activate-reason": "Motivo:",
+ "tags-activate-not-allowed": "Não é possível ativar a etiqueta \"$1\".",
+ "tags-activate-not-found": "A etiqueta \"$1\" não existe.",
+ "tags-activate-submit": "Ativar",
+ "tags-deactivate-title": "Desativar etiqueta",
+ "tags-deactivate-question": "Está prestes a desativar a etiqueta \"$1\".",
+ "tags-deactivate-reason": "Motivo:",
+ "tags-deactivate-not-allowed": "Não é possível desativar a etiqueta \"$1\".",
+ "tags-deactivate-submit": "Desativar",
"comparepages": "Comparar páginas",
"compare-page1": "Página 1",
"compare-page2": "Página 2",
@@ -2987,8 +3054,8 @@
"compare-revision-not-exists": "A revisão que especificou não existe.",
"dberr-problems": "Desculpe! Este sítio está com dificuldades técnicas.",
"dberr-again": "Experimente esperar alguns minutos e atualizar.",
- "dberr-info": "(Não foi possível contactar o servidor da base de dados: $1)",
- "dberr-info-hidden": "(Não foi possível contactar o servidor de base de dados)",
+ "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.",
@@ -3029,6 +3096,12 @@
"revdelete-uname-unhid": "utilizador desocultado",
"revdelete-restricted": "restrições a administradores aplicadas",
"revdelete-unrestricted": "restrições a administradores removidas",
+ "logentry-block-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com expiração a $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueou}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $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-merge-merge": "$1 {{GENDER:$2|fundiu}} $3 com $4 (edições até $5)",
"logentry-move-move": "$1 moveu a página $3 para $4",
"logentry-move-move-noredirect": "$1 moveu a página $3 para $4 sem deixar um redirecionamento",
"logentry-move-move_redir": "$1 {{GENDER:$2|moveu}} a página $3 para $4 sobre um redirecionamento",
@@ -3046,20 +3119,34 @@
"logentry-upload-upload": "$1 {{GENDER:$2|carregou}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|carregou}} uma nova versão de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|carregou}} $3",
+ "log-name-managetags": "Registo de gestão de etiquetas",
+ "log-description-managetags": "Esta página lista as tarefas de gestão relacionadas com [[Special:Tags|etiquetas]]. O registo contém apenas ações realizadas manualmente por um administrador; etiquetas podem ser criadas ou eliminadas pelo ''software'' da wiki sem uma entrada a ser gravada neste registo.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|criou}} a etiqueta \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|eliminou}} a etiqueta \"$4\" (removida de $5 {{PLURAL:$5|edição ou entrada de registo|edições e/ou entradas de registo}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|ativou}} a etiqueta \"$4\" para uso de utilizadores e robôs.",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|desativou}} a etiqueta \"$4\" para uso de utilizadores e robôs.",
"rightsnone": "(nenhum)",
+ "revdelete-summary": "editar resumo",
+ "feedback-adding": "A acrescentar os comentários à página...",
+ "feedback-back": "Retroceder",
+ "feedback-bugcheck": "Perfeito! Verifique apenas que não é já um dos [$1 defeitos conhecidos].",
+ "feedback-bugnew": "Eu verifiquei. Comunicar um novo defeito.",
"feedback-bugornote": "Se está pronto para descrever um problema técnico em detalhe, por favor, [$1 comunique o defeito].\nCaso contrário, pode facilmente usar o formulário abaixo. O seu comentário será adicionado à página \"[$3 $2]\", junto com o seu nome de utilizador e o navegador que está a usar.",
- "feedback-subject": "Assunto:",
- "feedback-message": "Mensagem:",
"feedback-cancel": "Cancelar",
- "feedback-submit": "Enviar Comentários",
- "feedback-adding": "A acrescentar os comentários à página...",
+ "feedback-close": "Feito",
+ "feedback-dialog-title": "Enviar opinião",
+ "feedback-dialog-intro": "Pode usar o fácil formulário abaixo para enviar os seus comentários. A sua opinião será adicionada à página \"$1\", juntamente com o seu nome de utilizador(a).",
+ "feedback-error-title": "Erro",
"feedback-error1": "Erro: O resultado da API não foi reconhecido",
"feedback-error2": "Erro: A edição falhou",
"feedback-error3": "Erro: A API não responde",
+ "feedback-error4": "Erro: Não foi possível enviar o seu comentário sobre o título selecionado",
+ "feedback-message": "Mensagem:",
+ "feedback-subject": "Assunto:",
+ "feedback-submit": "Enviar",
+ "feedback-termsofuse": "Concordo em fornecer comentários de acordo com as Condições de Uso.",
"feedback-thanks": "Obrigado! O seu comentário foi adicionado à página \"[$2 $1]\".",
- "feedback-close": "Feito",
- "feedback-bugcheck": "Perfeito! Verifique apenas que não é já um dos [$1 defeitos conhecidos].",
- "feedback-bugnew": "Eu verifiquei. Comunicar um novo defeito.",
+ "feedback-thanks-title": "Obrigado!",
"searchsuggest-search": "Pesquisa",
"searchsuggest-containing": "contendo...",
"api-error-badaccess-groups": "Não tem permissão para enviar ficheiros para esta wiki.",
@@ -3095,6 +3182,13 @@
"api-error-stashfailed": "Erro interno: O servidor não conseguiu armazenar o ficheiro temporário.",
"api-error-publishfailed": "Erro interno: Servidor não conseguiu publicar ficheiro temporário.",
"api-error-stasherror": "Ocorreu um erro no carregamento do ficheiro escondido.",
+ "api-error-stashedfilenotfound": "O escondido ficheiro não foi encontrado ao tentar carregar a pasta do stash.",
+ "api-error-stashpathinvalid": "O caminho no qual o ficheiro escondido deveria ter sido encontrado era inválido.",
+ "api-error-stashfilestorage": "Ocorreu um erro no carregamento do ficheiro escondido.",
+ "api-error-stashzerolength": "O servidor não pôde esconder o ficheiro, porque ele tinha de comprimento zero.",
+ "api-error-stashnotloggedin": "Você deve estar com sessão iniciaca para gravar ficheiros no carregamento do stash.",
+ "api-error-stashwrongowner": "O ficheiro que estava a tentar aceder o stash não pertence a você.",
+ "api-error-stashnosuchfilekey": "O ficheiro de chave que está a tentar aceder no stash não existe.",
"api-error-timeout": "O servidor não respondeu no prazo esperado.",
"api-error-unclassified": "Ocorreu um erro desconhecido",
"api-error-unknown-code": "Erro desconhecido: \"$1\"",
@@ -3139,6 +3233,8 @@
"expand_templates_generate_xml": "Mostrar a árvore de análise sintáctica do XML",
"expand_templates_generate_rawhtml": "Mostrar o HTML puro",
"expand_templates_preview": "Antevisão do resultado",
+ "expand_templates_preview_fail_html": "<em>Devido ao fato de {{SITENAME}} possuir código HTML puro ativado e de ter havido perda de dados da sessão, a pré-visualização ficará oculta como precaução contra ataques do JavaScript.</em>\n\n<strong>Se esta é uma legítima tentativa de visualização, por favor tente novamente.</strong> Se não resultar, experimente [[Special:UserLogout|sair]] e iniciar sessão de novo.",
+ "expand_templates_preview_fail_html_anon": "<em>Devido ao fato de {{SITENAME}} possuir código HTML puro ativado e de não ter sessão iniciada, a pré-visualização ficará oculta como precaução contra ataques do JavaScript.</em>\n\n<strong>Se esta é uma legítima tentativa de visualização, por favor [[Especial:UserLogin|inicie sessão]] e tente novamente.</strong>",
"pagelanguage": "Seletor de idioma da página",
"pagelang-name": "Página",
"pagelang-language": "Idioma",
@@ -3159,8 +3255,45 @@
"mediastatistics-table-count": "Número de ficheiros",
"mediastatistics-table-totalbytes": "Tamanho combinado",
"mediastatistics-header-unknown": "Desconhecido",
+ "mediastatistics-header-bitmap": "Imagens de mapa de bits",
+ "mediastatistics-header-drawing": "Desenhos (imagens vetoriais)",
"mediastatistics-header-audio": "Áudio",
"mediastatistics-header-video": "Vídeo",
+ "mediastatistics-header-office": "Documentos",
+ "mediastatistics-header-text": "Textuais",
"mediastatistics-header-executable": "Executáveis",
- "mediastatistics-header-archive": "Formatos compactados"
+ "mediastatistics-header-archive": "Formatos compactados",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|vírgula desnecessária foi removida|vírgulas desnecessárias foram removidas}} do código JSON",
+ "json-error-unknown": "Houve um problema com o JSON. Erro: $1",
+ "json-error-depth": "A profundidade máxima da pilha foi excedida",
+ "json-error-state-mismatch": "Código JSON inválido ou mal formatado",
+ "json-error-ctrl-char": "Erro de carácter de controlo, possivelmente codificado incorretamente",
+ "json-error-syntax": "Erro de sintaxe",
+ "json-error-utf8": "Caracteres UTF-8 mal formatados, possivelmente codificado incorretamente",
+ "json-error-recursion": "Uma ou mais referências recursivas no valor a ser codificado",
+ "json-error-inf-or-nan": "Um ou mais valores NaN ou INF no valor a ser codificado",
+ "json-error-unsupported-type": "Foi dado um valor de um tipo que não pode ser codificado",
+ "headline-anchor-title": "Ligação para esta seção",
+ "special-characters-group-latin": "Latim",
+ "special-characters-group-latinextended": "Latim expandido",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Símbolos",
+ "special-characters-group-greek": "Grego",
+ "special-characters-group-cyrillic": "Cirílico",
+ "special-characters-group-arabic": "Árabe",
+ "special-characters-group-arabicextended": "Arábico estendido",
+ "special-characters-group-persian": "Persa",
+ "special-characters-group-hebrew": "Hebraico",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-tamil": "Tâmil",
+ "special-characters-group-telugu": "Telugo",
+ "special-characters-group-sinhala": "Cingalês",
+ "special-characters-group-gujarati": "Guzerate",
+ "special-characters-group-devanagari": "Devanágari",
+ "special-characters-group-thai": "Tailandês",
+ "special-characters-group-lao": "Laociano",
+ "special-characters-group-khmer": "Cambojano",
+ "special-characters-title-endash": "hífen",
+ "special-characters-title-emdash": "travessão",
+ "special-characters-title-minus": "sinal de subtração"
}
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index 7ee37392..db301158 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -75,6 +75,7 @@
"MIKHEIL",
"Malafaya",
"MarkvA",
+ "marktraceur",
"Matma Rex",
"MaxSem",
"McDutchie",
@@ -161,7 +162,10 @@
"פוילישער",
"គីមស៊្រុន",
"아라",
- "Jdforrester"
+ "Jdforrester",
+ "Mar(c)",
+ "Pikne",
+ "Tacsipacsi"
]
},
"sidebar": "{{notranslate}}",
@@ -190,7 +194,7 @@
"tog-shownumberswatching": "Toggle option used in [[Special:Preferences]], in the section for recent changes. When this option is activated, the entries in recent changes includes the number of users who watch pages. {{Gender}}",
"tog-oldsig": "Used in [[Special:Preferences]], tab User profile. {{Gender}}",
"tog-fancysig": "In user preferences under the signature box. {{Gender}}",
- "tog-uselivepreview": "{{Gender}}\nToggle option used in [[Special:Preferences]].\n\nLive preview is an experimental feature (unavailable by default) to use edit preview without loading the page again.",
+ "tog-uselivepreview": "{{Gender}}\nToggle option used in [[Special:Preferences]].\n\nLive preview is a feature to use edit preview without loading the page again.",
"tog-forceeditsummary": "Toggle option used in [[Special:Preferences]] to force an edit ''{{msg-mw|summary}}''. {{Gender}}",
"tog-watchlisthideown": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide own edits from watchlist. {{Gender}}",
"tog-watchlisthidebots": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide bot edits from watchlist. {{Gender}}",
@@ -226,45 +230,45 @@
"thu": "Abbreviation for Thursday, a day of the week.",
"fri": "Abbreviation for Friday, a day of the week.",
"sat": "Abbreviation for Saturday, a day of the week.",
- "january": "The first month of the Gregorian calendar\n{{Identical|January}}",
- "february": "The second month of the Gregorian calendar\n{{Identical|February}}",
- "march": "The third month of the Gregorian calendar\n{{Identical|March}}",
- "april": "The fourth month of the Gregorian calendar\n{{Identical|April}}",
- "may_long": "The fifth month of the Gregorian calendar\n{{Identical|May}}",
- "june": "The sixth month of the Gregorian calendar\n{{Identical|June}}",
- "july": "The seventh month of the Gregorian calendar\n{{Identical|July}}",
- "august": "The eighth month of the Gregorian calendar\n{{Identical|August}}",
- "september": "The ninth month of the Gregorian calendar\n{{Identical|September}}",
- "october": "The tenth month of the Gregorian calendar\n{{Identical|October}}",
- "november": "The eleventh month of the Gregorian calendar\n{{Identical|November}}",
- "december": "The twelfth month of the Gregorian calendar\n{{Identical|December}}",
- "january-gen": "The first month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|January}}",
- "february-gen": "The second month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|February}}",
- "march-gen": "The third month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|March}}",
- "april-gen": "The fourth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|April}}",
- "may-gen": "The fifth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|May}}",
- "june-gen": "The sixth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|June}}",
- "july-gen": "The seventh month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|July}}",
- "august-gen": "The eighth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|August}}",
- "september-gen": "The nineth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|September}}",
- "october-gen": "The tenth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|October}}",
- "november-gen": "The eleventh month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|November}}",
- "december-gen": "The twelfth month of the Gregorian calendar. Must be in genitive, if the language has a genitive case.\n{{Identical|December}}",
- "jan": "Abbreviation of January, the first month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "feb": "Abbreviation of February, the second month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "mar": "Abbreviation of March, the third month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "apr": "Abbreviation of April, the fourth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "may": "''Abbreviation'' of May, the fifth month of the Gregorian calendar.\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.\n\n{{doc-important|This is not the full name of May, which resides at {{msg-mw|May long}}}}\n\n{{Identical|May}}",
- "jun": "Abbreviation of June, the sixth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "jul": "Abbreviation of July, the seventh month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "aug": "Abbreviation of August, the eighth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "sep": "Abbreviation of September, the ninth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "oct": "Abbreviation of October, the tenth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "nov": "Abbreviation of November, the eleventh month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "dec": "Abbreviation of December, the twelfth month of the Gregorian calendar\n\nOne of the set: {{msg-mw|Jan}}, {{msg-mw|Feb}}, {{msg-mw|Mar}}, {{msg-mw|Apr}}, {{msg-mw|May}}, {{msg-mw|Jun}}, {{msg-mw|Jul}}, {{msg-mw|Aug}}, {{msg-mw|Sep}}, {{msg-mw|Oct}}, {{msg-mw|Nov}}, {{msg-mw|Dec}}.",
- "january-date": "A date in the Gregorian month of January. $1 is the numerical date, for example \"23\".",
- "february-date": "A date in the Gregorian month of February. $1 is the numerical date, for example \"23\".",
- "march-date": "A date in the Gregorian month of March. $1 is the numerical date, for example \"23\".",
+ "january": "{{doc-months|1}}\n{{Identical|January}}",
+ "february": "{{doc-months|2}}\n{{Identical|February}}",
+ "march": "{{doc-months|3}}\n{{Identical|March}}",
+ "april": "{{doc-months|4}}\n{{Identical|April}}",
+ "may_long": "{{doc-months|5}}\n{{Identical|May}}",
+ "june": "{{doc-months|6}}\n{{Identical|June}}",
+ "july": "{{doc-months|7}}\n{{Identical|July}}",
+ "august": "{{doc-months|8}}\n{{Identical|August}}",
+ "september": "{{doc-months|9}}\n{{Identical|September}}",
+ "october": "{{doc-months|10}}\n{{Identical|October}}",
+ "november": "{{doc-months|11}}\n{{Identical|November}}",
+ "december": "{{doc-months|12}}\n{{Identical|December}}",
+ "january-gen": "{{doc-months|1|genitive}}\n{{Identical|January}}",
+ "february-gen": "{{doc-months|2|genitive}}\n{{Identical|February}}",
+ "march-gen": "{{doc-months|3|genitive}}\n{{Identical|March}}",
+ "april-gen": "{{doc-months|4|genitive}}\n{{Identical|April}}",
+ "may-gen": "{{doc-months|5|genitive}}\n{{Identical|May}}",
+ "june-gen": "{{doc-months|6|genitive}}\n{{Identical|June}}",
+ "july-gen": "{{doc-months|7|genitive}}\n{{Identical|July}}",
+ "august-gen": "{{doc-months|8|genitive}}\n{{Identical|August}}",
+ "september-gen": "{{doc-months|9|genitive}}\n{{Identical|September}}",
+ "october-gen": "{{doc-months|10|genitive}}\n{{Identical|October}}",
+ "november-gen": "{{doc-months|11|genitive}}\n{{Identical|November}}",
+ "december-gen": "{{doc-months|12|genitive}}\n{{Identical|December}}",
+ "jan": "{{doc-months|1|short}}",
+ "feb": "{{doc-months|2|short}}",
+ "mar": "{{doc-months|3|short}}",
+ "apr": "{{doc-months|4|short}}",
+ "may": "{{doc-months|5|short}}",
+ "jun": "{{doc-months|6|short}}",
+ "jul": "{{doc-months|7|short}}",
+ "aug": "{{doc-months|8|short}}",
+ "sep": "{{doc-months|9|short}}",
+ "oct": "{{doc-months|10|short}}",
+ "nov": "{{doc-months|11|short}}",
+ "dec": "{{doc-months|12|short}}",
+ "january-date": "A date in the Gregorian month of January. $1 is the numerical date, for example \"23\".\n{{Identical|January}}",
+ "february-date": "A date in the Gregorian month of February. $1 is the numerical date, for example \"23\".\n{{Identical|February}}",
+ "march-date": "A date in the Gregorian month of March. $1 is the numerical date, for example \"23\".\n{{Identical|March}}",
"april-date": "A date in the Gregorian month of April. $1 is the numerical date, for example \"23\".",
"may-date": "A date in the Gregorian month of May. $1 is the numerical date, for example \"23\". The month name is not abbreviated.\n{{Identical|May}}",
"june-date": "A date in the Gregorian month of June. $1 is the numerical date, for example \"23\".",
@@ -384,6 +388,7 @@
"pool-queuefull": "Part of {{msg-mw|view-pool-error}}\n\n\"Pool\" refers to a pool of processes.",
"pool-errorunknown": "Part of {{msg-mw|view-pool-error}}.\n{{Identical|Unknown error}}",
"pool-servererror": "Error message. Parameters:\n* $1 - list of server addresses\n\nSee e.g. {{msg-mw|Poolcounter-desc}} (and the Pool Counter extension in general) for translation hints for “pool counter service”.",
+ "poolcounter-usage-error": "Used as error message. Parameters:\n* $1 - non-localized string describing usage mistake.",
"aboutsite": "Used as the label of the link that appears at the footer of every page on the wiki (in most of the skins) and leads to the page that contains the site description. The link target is {{msg-mw|aboutpage}}.\n\n[[mw:Manual:Interface/Aboutsite|MediaWiki manual]].\n\n{{doc-important|Do not change <nowiki>{{SITENAME}}</nowiki>.}}\n\n{{Identical|About}}",
"aboutpage": "Used as the target of the link that appears at the footer of every page on the wiki (in most of the skins) and leads to the page that contains the site description. Therefore the content should be the same with the page name of the site description page. Only the message in the [[mw:Manual:$wgLanguageCode|site language]] ([[MediaWiki:Aboutpage]]) is used. The link label is {{msg-mw|aboutsite}}.\n\n{{doc-important|Do not translate \"Project:\" part, for this is the namespace prefix.}}",
"copyright": "Parameters:\n* $1 - license name\n'''See also'''\n* {{msg-mw|Mobile-frontend-copyright}}",
@@ -395,6 +400,7 @@
"edithelp": "This is the text that appears on the editing help link that is near the bottom of the editing page",
"edithelppage": "The help page displayed when a user clicks on editing help link which is present on the right of Show changes button.\n{{doc-important|Do not change the \"<tt>Help:</tt>\" part.}}",
"helppage": "{{ignored}}\nThe link destination used by default in the sidebar, and in {{msg-mw|Noarticletext}}.",
+ "helppage-top-gethelp": "Link to some MediaWiki.org help page or tutorial.\n{{Identical|Help}}",
"mainpage": "Defines the link and display name of the main page of the wiki. Shown as the top link in the navigation part of the interface. Please do not change it too often, that could break things!\n\nSee also:\n* {{msg-mw|Mainpage}}\n* {{msg-mw|Accesskey-n-mainpage}}\n* {{msg-mw|Tooltip-n-mainpage}}\n{{Identical|Main page}}",
"mainpage-description": "The same as {{msg-mw|mainpage}}, used as link text on [[MediaWiki:Sidebar]].\n\nThis makes it possible to the change the link destination (the message \"mainpage\") without changing the link text or without disabling translations.\n\nSee also:\n* {{msg-mw|Mainpage-description}}\n* {{msg-mw|Accesskey-n-mainpage-description}}\n* {{msg-mw|Tooltip-n-mainpage-description}}\n{{Identical|Main page}}",
"policy-url": "{{doc-important|Do not change the <code>Project:</code> part.}}\nThe URL of the project page describing the policies of the wiki.\n\nThis is shown below every page (the left link).",
@@ -456,7 +462,7 @@
"nstab-media": "The name for the tab of the media namespace. Example: [[Media:Example]]\n\nSee also:\n* {{msg-mw|Nstab-media}}\n* {{msg-mw|Accesskey-ca-nstab-media}}\n* {{msg-mw|Tooltip-ca-nstab-media}}",
"nstab-special": "The name for the tab of the special namespace. Example: [[Special:Version]]\n\nSee also:\n* {{msg-mw|Nstab-special}}\n* {{msg-mw|Tooltip-ca-nstab-special}}\n{{Identical|Special page}}",
"nstab-project": "The name for the tab of the project namespace. Example: [[Project:Example]]\n\nSee also:\n* {{msg-mw|Nstab-project}}\n* {{msg-mw|Accesskey-ca-nstab-project}}\n* {{msg-mw|Tooltip-ca-nstab-project}}",
- "nstab-image": "The name for the tab of the File namespace. Example: [[Image:Example]]\n\nSee also:\n* {{msg-mw|Nstab-image}}\n* {{msg-mw|Accesskey-ca-nstab-image}}\n* {{msg-mw|Tooltip-ca-nstab-image}}\n{{Identical|File}}",
+ "nstab-image": "The name for the tab of the File namespace. Example: [[:File:Example]]\n\nSee also:\n* {{msg-mw|Nstab-image}}\n* {{msg-mw|Accesskey-ca-nstab-image}}\n* {{msg-mw|Tooltip-ca-nstab-image}}\n{{Identical|File}}",
"nstab-mediawiki": "The name for the tab of the MediaWiki namespace. Example: [[MediaWiki:Example]]\n\nSee also:\n* {{msg-mw|Nstab-mediawiki}}\n* {{msg-mw|Accesskey-ca-nstab-mediawiki}}\n* {{msg-mw|Tooltip-ca-nstab-mediawiki}}\n{{Identical|Message}}",
"nstab-template": "The name for the tab of the template namespace. Example: [[Template:Example]]\n\nSee also:\n* {{msg-mw|Nstab-template}}\n* {{msg-mw|Accesskey-ca-nstab-template}}\n* {{msg-mw|Tooltip-ca-nstab-template}}\n{{Identical|Template}}",
"nstab-help": "The name for the tab of the help namespace. Example: [[Help:Rollback]]\n\nSee also:\n* {{msg-mw|Nstab-help}}\n* {{msg-mw|Accesskey-ca-nstab-help}}\n* {{msg-mw|Tooltip-ca-nstab-help}}",
@@ -483,10 +489,13 @@
"readonly_lag": "Error message displayed when the database is locked.",
"internalerror": "{{Identical|Internal error}}",
"internalerror_info": "Parameters:\n* $1 - error message",
+ "internalerror-fatal-exception": "Error message displayed by MediaWiki itself when the request failed, inside an error box which also contains a code, a timestamp and a colon before this message.\nParameters:\n* $1 - proper name of the kind of error\n* $2 - alphanumeric code identifying the error in the server logs\n* $3 - URL which resulted in the error\n$2 and $3 are not used by default and only available for wiki customisations, because they are useful for communication to the wiki system administrator.",
"filecopyerror": "Parameters:\n* $1 - source file name\n* $2 - destination file name",
"filerenameerror": "Parameters:\n* $1 - old file name\n* $2 - new file name",
"filedeleteerror": "Parameters:\n* $1 - file name",
- "directorycreateerror": "Parameters:\n* $1 - directory name",
+ "directorycreateerror": "Error message returned when the directory cannot be created. Parameters:\n* $1 - directory name",
+ "directoryreadonlyerror": "Error message returned when the directory is read-only. Parameters:\n* $1 - directory name",
+ "directorynotreadableerror": "Error message returned when the directory isn't readable. Parameters:\n* $1 - directory name",
"filenotfound": "Parameters:\n* $1 - file name",
"unexpected": "This message indicates the value $2 is unexpected for $1. Parameters:\n* $1 - name\n* $2 - value",
"formerror": "Generic error message show to a user when they try to submit information that could not be processed for any reason.",
@@ -509,6 +518,7 @@
"viewyourtext": "Same as {{msg-mw|viewsourcetext}} but when showing the text submitted by the user, this happens e.g. when the user was blocked while he is editing the page",
"protectedinterface": "Message shown if a user without the \"editinterface\" right tries to edit a page in the MediaWiki namespace.\n\nSee also {{msg-mw|editinginterface}}. Parameters:\n* $1 - (Unused) the action the user attempted to perform",
"editinginterface": "A message shown when editing pages in the namespace MediaWiki:.\n\nSee also {{msg-mw|protectedinterface}}.",
+ "translateinterface": "A message shown when editing pages in the namespace MediaWiki:, which have a default message text.\n\nSee also:\n* {{msg-mw|Protectedinterface}}\n* {{msg-mw|Editinginterface}}",
"cascadeprotected": "Parameters:\n* $1 - number of cascade-protected pages, used for PLURAL\n* $2 - list of cascade-protected pages\n* $3 - (Unused) the action the user attempted to perform",
"namespaceprotected": "Parameters:\n* $1 - namespace name\n* $2 - (Unused) the action the user attempted to perform",
"customcssprotected": "Used as error message. Parameters:\n* $1 - (Unused) the action the user attempted to perform",
@@ -569,6 +579,8 @@
"userlogin-resetpassword-link": "Used as link text in the login form.\n\nThe link points to the local page [[Special:PasswordReset]].\n\nSee example: [[Special:UserLogin]]\n\nuserlogin-resetpassword-link may have to be shorter than the old {{msg-mw|userlogin-resetlink}}.\n{{Identical|Forgot your password}}",
"helplogin-url": "{{doc-important|Do not translate the namespace name <code>Help</code>.}}\nUsed as name of the page that provides information about logging into the wiki.\n\nUsed as a link target in the message {{msg-mw|Userlogin-helplink}}.",
"userlogin-helplink2": "Label for a link to login help.\n\nSee example: [[Special:UserLogin]]\n\nSee also:\n* {{msg-mw|Helplogin-url}}",
+ "userlogin-loggedin": "Used as warning on [[Special:UserLogin]] when the current user is already logged in.\n\nFollowed by the Login form.\n\nSee example: [[Special:UserLogin]].\n\nParameters:\n* $1 - user name (used for display and for gender support)\nSee also:\n* {{msg-mw|Mobile-frontend-userlogin-loggedin-register}}",
+ "userlogin-createanother": "Used as label for the button on [[Special:UserLogin]] shown when the current user is already logged in.\n{{Identical|Create another account}}",
"createacct-emailrequired": "Label in create account form for email field when it is required.\n\nSee also:\n* {{msg-mw|Createacct-emailoptional}}\n{{Identical|E-mail address}}",
"createacct-emailoptional": "Label in vertical-layout create account form for email field when it is optional.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nSee also:\n* {{msg-mw|Createacct-emailrequired}}",
"createacct-email-ph": "Placeholder in vertical-layout create account form for email field.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
@@ -624,11 +636,8 @@
"blocked-mailpassword": "Used as error message in password recovery.",
"eauthentsent": "This message appears after entering an email address in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}, then clicking on \"{{int:saveprefs}}\".",
"throttled-mailpassword": "Used in [[Special:PasswordReset]]. Parameters:\n* $1 - password reset email resend time (in hours)",
- "loginstart": "{{notranslate}}",
- "loginend": "{{notranslate}}",
- "loginend-https": "{{notranslate}}",
- "signupstart": "{{notranslate}}\nDefault:\n* {{msg-mw|Loginstart}}",
- "signupend": "{{notranslate}}\nDefault:\n* {{msg-mw|Loginend}}",
+ "signupstart": "{{notranslate}}",
+ "signupend": "{{notranslate}}",
"signupend-https": "{{notranslate}}",
"mailerror": "Used as error message in sending confirmation mail to user. Parameters:\n* $1 - new mail address",
"acct_creation_throttle_hit": "Error message at [[Special:CreateAccount]].\n\n\"in the last day\" precisely means: during the lasts 86400 seconds (24 hours) ending right now.\n\nParameters:\n* $1 - number of accounts",
@@ -664,7 +673,7 @@
"changepassword-summary": "{{ignored}}",
"resetpass_announce": "Used in [[Special:UserLogin]].",
"resetpass_text": "{{optional}}",
- "resetpass_header": "Header on box on special page [[Special:ChangePassword]].\n\n{{Identical|Reset password}}",
+ "resetpass_header": "Header on box on special page [[Special:ChangePassword]].\n\n{{Identical|Change password}}",
"oldpassword": "Used on the 'User profile' tab of 'my preferences'. This is the text next to an entry box for the old password in the 'change password' section.\n{{Identical|Old password}}",
"newpassword": "{{Identical|New password}}",
"retypenew": "Appears on the 'User profile' tab of the 'Preferences' special page in the 'Change password' section. It appears next to the text box for entering the new password a second time.",
@@ -724,7 +733,7 @@
"bold_sample": "This is the sample text that you get when you press the first button on the left on the edit toolbar.\n\n{{Identical|Bold text}}",
"bold_tip": "This is the text that appears when you hover the mouse over the first button on the left of the edit toolbar.\n\n{{Identical|Bold text}}",
"italic_sample": "The sample text that you get when you press the second button from the left on the edit toolbar.\n\n{{Identical|Italic text}}",
- "italic_tip": "This is the text that appears when you hover the mouse over the second button from the left on the edit toolbar.\n\n{{Identical|Italic text}}",
+ "italic_tip": "This is the tooltip that appears when the user points to the \"Italic\" button in the edit toolbar.\n\n{{Identical|Italic text}}",
"link_sample": "This is the default text in the internal link that is created when you press the third button from the left on the edit toolbar (the \"Ab\" icon).",
"link_tip": "Tip for internal links.\n{{Identical|Internal link}}",
"extlink_sample": "This message appears when clicking on the fourth button of the edit toolbar. You can translate \"link title\". Because many of the localisations had urls that went to domains reserved for advertising, it is recommended that the link is left as-is. All customised links were replaced with the standard one, that is reserved in the standard and will never have ads or something.",
@@ -735,8 +744,8 @@
"nowiki_tip": "This is the text that appears when you hover the mouse over the third button from the right on the edit toolbar.",
"image_sample": "{{optional}}\nUsed in text generated by Picture button in toolbar.\n{{Identical|Example}}",
"image_tip": "This is the text that appears when you hover the mouse over the sixth (middle) button on the edit toolbar.\n\n{{Identical|Embedded file}}",
- "media_sample": "{{optional}}",
- "media_tip": "This is the text that appears when you hover the mouse over the fifth button from the right in the edit toolbar.",
+ "media_sample": "{{optional}}\n{{Identical|Example}}",
+ "media_tip": "This is the text that appears when you hover the mouse over the fifth button from the right in the edit toolbar.\n{{Identical|File link}}",
"sig_tip": "This is the text that appears when you hover the mouse over the second key from the right on the edit toolbar.\n{{Identical|Signature with timestamp}}",
"hr_tip": "This is the text that appears when you hover the mouse over the first button on the right on the edit toolbar.",
"summary": "The Summary text beside the edit summary field\n\nSee also:\n* {{msg-mw|Subject}}\nSee also:\n* {{msg-mw|Accesskey-summary}}\n* {{msg-mw|Tooltip-summary}}\n{{Identical|Summary}}",
@@ -751,10 +760,12 @@
"anoneditwarning": "Shown when editing a page anonymously.\n\nParameters:\n* $1 – A link to log in, <nowiki>{{fullurl:Special:UserLogin|returnto={{FULLPAGENAMEE}}}}</nowiki>\n* $2 – A link to sign up, <nowiki>{{fullurl:Special:UserLogin/signup|returnto={{FULLPAGENAMEE}}}}</nowiki>\n\nSee also:\n* {{msg-mw|mobile-frontend-editor-anoneditwarning}}",
"anonpreviewwarning": "See also:\n* {{msg-mw|Anoneditwarning}}",
"missingsummary": "The text \"edit summary\" is in {{msg-mw|Summary}}.\n\nSee also:\n* {{msg-mw|Missingcommentheader}}\n* {{msg-mw|Savearticle}}",
+ "selfredirect": "Notice displayed once after the user tries to create a redirect to the same article.",
"missingcommenttext": "This message is shown, when the textbox by a new-section is empty.",
"missingcommentheader": "Edit summary that is shown if you enable \"Prompt me when entering a blank summary\" and add a new section without headline to a talk page.\n\nSee also:\n* {{msg-mw|Missingsummary}}\n* {{msg-mw|Savearticle}}",
"summary-preview": "Preview of the edit summary, shown under the edit summary itself.\nShould match: {{msg-mw|summary}}.",
"subject-preview": "Should match {{msg-mw|subject}}",
+ "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}}",
"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}}",
"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}}",
@@ -802,6 +813,7 @@
"editingsection": "This message displays at the top of the page when a user is editing a page section. Parameters:\n* $1 - page name\n{{Related|Editing}}",
"editingcomment": "This message displays at the top of the page when a user is creating a new section. Parameters:\n* $1 - page name\n{{Related|Editing}}",
"editconflict": "Used as title of error message. Parameters:\n* $1 - page title",
+ "editnotice-notext": "{{ignored}}\nCustom message on top of the edit page if no edit notices apply to this page.",
"explainconflict": "Appears at the top of a page when there is an edit conflict.\n\nSee also:\n* {{msg-mw|Savearticle}}",
"yourtext": "Used in Diff Preview page. The diff is between {{msg-mw|currentrev}} and {{msg-mw|yourtext}}.\n\nAlso used in Edit Conflict page; the diff between {{msg-mw|yourtext}} and {{msg-mw|storedversion}}.",
"storedversion": "This is used in an edit conflict as the label for the top revision that has been stored, as opposed to your version {{msg-mw|yourtext}} that has not been stored which is shown at the bottom of the page.",
@@ -858,6 +870,11 @@
"content-model-text": "Name for the plain text content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}\n{{Identical|Plain text}}",
"content-model-javascript": "Name for the JavaScript content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}",
"content-model-css": "Name for the CSS content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}",
+ "content-model-json": "Name for the JSON content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}",
+ "content-json-empty-object": "Used to represent an object with no properties on a JSON content model page.",
+ "content-json-empty-array": "Used to represent an array with no values on a JSON content model page.",
+ "duplicate-args-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages are placed automatically if they contain template calls that use duplicates of arguments, such as <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+ "duplicate-args-category-desc": "Duplicate arguments category description. Shown on [[Special:TrackingCategories]].\n\nSee also:\n* {{msg-mw|Duplicate-args-category}}",
"expensive-parserfunction-warning": "On some (expensive) [[MetaWikipedia:Help:ParserFunctions|parser functions]] (e.g. <code><nowiki>{{#ifexist:}}</nowiki></code>) there is a limit of how many times it may be used. This is an error message shown when the limit is exceeded.\n\nParameters:\n* $1 - the current number of parser function calls\n* $2 - the allowed number of parser function calls\nSee also [[:mw:Manual:$wgExpensiveParserFunctionLimit|$wgExpensiveParserFunctionLimit in the MediaWiki manual]].\n\nSee also:\n* {{msg-mw|Expensive-parserfunction-category}}",
"expensive-parserfunction-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages are placed automatically if they contain too many calls to expensive parser functions.\n\nSee also:\n* {{msg-mw|Expensive-parserfunction-category-desc}}\n* {{msg-mw|Expensive-parserfunction-warning}}",
"post-expand-template-inclusion-warning": "When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.\n\n\nSee also:\n* {{msg-mw|Post-expand-template-inclusion-category}}",
@@ -914,6 +931,7 @@
"history-feed-description": "Used as subtitle (description) of the RSS/Atom feed for a page history. See [{{canonicalurl:Main_Page|feed=atom&action=history}} example].",
"history-feed-item-nocomment": "Title for each revision when viewing the RSS/Atom feed for a page history.\n\nParameters:\n* $1 - username\n* $2 - date/time\n* $3 - (Optional) date\n* $4 - (Optional) time",
"history-feed-empty": "Used as summary of the RSS/Atom feed for a page history when the feed is empty.\nSee [{{canonicalurl:x|feed=atom&action=history}} example].",
+ "history-edit-tags": "Text of button used to access change tagging interface. For more information on tags see [[mw:Manual:Tags]].",
"rev-deleted-comment": "Apparently this can also be about the reason of a log action, not only an edit summary. See also:\n*{{msg-mw|revdelete-hide-comment}}",
"rev-deleted-user": "See also:\n* {{msg-mw|Rev-deleted-event}}",
"rev-deleted-event": "See also:\n* {{msg-mw|Rev-deleted-user}}",
@@ -1005,7 +1023,7 @@
"mergehistory-reason": "{{Identical|Reason}}",
"mergehistory-revisionrow": "{{Optional}}\nA revision row in the merge history page. Parameters:\n* $1 - a radio button to indicate a merge point\n* $2 - a link to the last revision of a page ({{msg-mw|Last}})\n* $3 - a page link\n* $4 - a user link\n* $5 - a revision size\n* $6 - a revision comment",
"mergelog": "{{doc-logpage}}\n\nThis is the name of a log of merge actions done on [[Special:MergeHistory]]. This special page and this log is not enabled by default.",
- "pagemerge-logentry": "This log message is used in a merge log entry.\n\nParameters:\n* $1 - the page name of the source of the content to be merged\n* $2 - the page into which the content is merged\n* $3 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
+ "pagemerge-logentry": "{{ignored}}This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the page name of the source of the content to be merged\n* $2 - the page into which the content is merged\n* $3 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
"revertmerge": "Used as link text",
"mergelogpagetext": "Description of the [{{canonicalurl:Special:Log|type=merge&user=&page=&year=&month=-1}} merge log], on the log. The associated [[Special:MergeHistory|Merge]] special page is not enabled by default.",
"history-title": "Displayed as page title when you click on the \"history\" tab. Parameters:\n* $1 - the normal page title",
@@ -1028,7 +1046,9 @@
"textmatches": "When displaying search results",
"notextmatches": "Error message when there are no results",
"prevn": "This is part of the navigation message on the top and bottom of Special pages (lists of things in alphabetical order, i.e. the '[[Special:Categories]]' page), where it is used as the first argument of {{msg-mw|Viewprevnext}}.\nIt is also used by Category pages (which do ''not'' use {{msg-mw|Viewprevnext}}).\n{{PLURAL:$1|$1}} is the number of items shown per page. It is not used when {{PLURAL:$1|$1}} is zero; not sure what happens when {{PLURAL:$1|$1}} is one.\n[[Special:WhatLinksHere|Whatlinkshere]] pages use {{msg-mw|Whatlinkshere-prev}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\n{{Identical|Previous}}",
- "nextn": "This is part of the navigation message on the top and bottom of Special pages (lists of things in alphabetical order, i.e. the '[[Special:Categories]]' page), where it is used as the second argument of {{msg-mw|Viewprevnext}}.\n\nIt is also used by Category pages (which do ''not'' use {{msg-mw|Viewprevnext}}).\n\nParameters:\n* $1 - the number of items shown per page. It is not used when $1 is zero; not sure what happens when $1 is one.\n[[Special:WhatLinksHere|Whatlinkshere]] pages use {{msg-mw|Whatlinkshere-next}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\n{{Identical|Next $1}}",
+ "nextn": "This is part of the navigation message on the top and bottom of Special pages (lists of things in alphabetical order, i.e. the '[[Special:Categories]]' page), where it is used as the second argument of {{msg-mw|Viewprevnext}}.\n\nIt is also used by Category pages (which do ''not'' use {{msg-mw|Viewprevnext}}).\n\nParameters:\n* $1 - the number of items shown per page. It is not used when $1 is zero; not sure what happens when $1 is one.\n[[Special:WhatLinksHere|Whatlinkshere]] pages use {{msg-mw|Whatlinkshere-next}} instead (still as an argument to {{msg-mw|Viewprevnext}}).\n\n{{Identical|Next}}",
+ "prev-page": "This is part of the navigation message on the top and bottom of Category pages which links to the previous page\n{{Identical|Previous page}}",
+ "next-page": "This is part of the navigation message on the top and bottom of Category pages which links to the next page\n{{Identical|Next page}}",
"prevn-title": "Parameters:\n* $1 - number of search results\nSee also:\n* {{msg-mw|Viewprevnext}}",
"nextn-title": "Parameters:\n* $1 - number of search results\nSee also:\n* {{msg-mw|Viewprevnext}}",
"shown-title": "Parameters:\n* $1 - number of search results",
@@ -1046,8 +1066,9 @@
"searchprofile-advanced-tooltip": "Used as tooltip for the option {{msg-mw|Searchprofile-advanced}} in [[Special:Search]].\n\nSee also:\n* {{msg-mw|Searchprofile-advanced|message}}\n* {{msg-mw|Searchprofile-advanced-tooltip|tooltip}}",
"search-result-size": "Shown per line of a [[Special:Search|search result]]\n* $1 - the size of the page in bytes, but no need to add \"byte\" or similar as the unit is added by special function\n* $2 - the sum of all words in this page",
"search-result-category-size": "Parameters:\n* $1 - number of members in this category. $1 is equal to $2+$3.\n* $2 - number of subcategories\n* $3 - number of files",
- "search-redirect": "\"Redirect\" is a noun here, not a verb.\n\nParameters:\n* $1 - a link to the redirect to the page (so, $1 is the page that the search result is redirected '''from''')",
+ "search-redirect": "\"Redirect\" is a noun here, not a verb.\n\nParameters:\n* $1 - a link to the redirect to the page (so, $1 is the page that the search result is redirected '''from''')\n{{Identical|Redirect}}",
"search-section": "This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that section is more relevant than the rest of the page. $1 is a section title.\n{{Identical|Section}}",
+ "search-category": "This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that the page being in a particular category is relevant.\n\nParameters:\n* $1 - the category's name with any matching portion highlighted\n{{Identical|Category}}",
"search-file-match": "This text will be shown on the search result listing after the page title of a result if the search engine got search results from the contents of files, rather than the pages.",
"search-suggest": "Used for \"Did you mean\" suggestions:\n* $1 - suggested link",
"search-interwiki-caption": "Used in [[Special:Search]], when showing search results from other wikis.",
@@ -1085,6 +1106,11 @@
"prefs-personal": "Title of a tab in [[Special:Preferences]].\n{{Identical|User profile}}",
"prefs-rc": "Used in user preferences.\n\n{{Identical|Recent changes}}",
"prefs-watchlist": "Used in user preferences.\n{{Identical|Watchlist}}",
+ "prefs-editwatchlist": "Used in [[Special:Preferences]], tab \"Watchlist\".",
+ "prefs-editwatchlist-label": "Used in [[Special:Preferences]], tab \"Watchlist\".",
+ "prefs-editwatchlist-edit": "Used in [[Special:Preferences]], tab \"Watchlist\". Link to [[Special:EditWatchlist]]\n\nSee also:\n* {{msg-mw|prefs-editwatchlist-clear}}\n* {{msg-mw|prefs-editwatchlist-raw}}",
+ "prefs-editwatchlist-raw": "Used in [[Special:Preferences]], tab \"Watchlist\". Link to [[Special:EditWatchlist/raw]].\n\nSee also:\n* {{msg-mw|prefs-editwatchlist-edit}}\n* {{msg-mw|prefs-editwatchlist-clear}}\n{{Identical|Edit raw watchlist}}",
+ "prefs-editwatchlist-clear": "Used in [[Special:Preferences]], tab \"Watchlist\". Link to [[Special:EditWatchlist/clear]].\n\nSee also:\n* {{msg-mw|prefs-editwatchlist-edit}}\n* {{msg-mw|prefs-editwatchlist-raw}}\n{{Identical|Clear watchlist}}",
"prefs-watchlist-days": "Used in [[Special:Preferences]], tab \"Watchlist\".",
"prefs-watchlist-days-max": "Shown as hint in [[Special:Preferences]], tab \"Watchlist\". Parameters:\n* $1 - number of days\nSee also:\n* {{msg-mw|Recentchangesdays-max}}",
"prefs-watchlist-edits": "Used in [[Special:Preferences]], tab \"Watchlist\".",
@@ -1175,7 +1201,7 @@
"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-tokenwatchlist": "Section heading.\nUsed in [[Special:Preferences]], tab \"Watchlist\".\n{{Identical|Token}}",
- "prefs-diffs": "Used in [[Special:Preferences]], tab \"Misc\".",
+ "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]].",
"prefswarning-warning": "Warning shown (except in Firefox) when attempting to leave [[Special:Preferences]] with unsaved changes.\n\nParameters:\n* $1 - Text of {{msg-mw|saveprefs}}, as <nowiki>{{int:saveprefs}}</nowiki> cannot be used directly.",
"prefs-tabs-navigation-hint": "Hint message that explains the arrow key navigation for the tabs on [[Special:Preferences]] to screenreader users.",
@@ -1294,6 +1320,9 @@
"right-override-export-depth": "{{doc-right|override-export-depth}}",
"right-sendemail": "{{doc-right|sendemail}}",
"right-passwordreset": "{{doc-right|passwordreset}}",
+ "right-managechangetags": "{{doc-right|managechangetags}}",
+ "right-applychangetags": "{{doc-right|applychangetags}}",
+ "right-changetags": "{{doc-right|changetags}}",
"newuserlogpage": "{{doc-logpage}}\n\nPart of the \"Newuserlog\" extension. It is both the title of [[Special:Log/newusers]] and the link you can see in [[Special:RecentChanges]].",
"newuserlogpagetext": "Part of the \"Newuserlog\" extension. It is the description you can see on [[Special:Log/newusers]].",
"rightslog": "{{doc-logpage}}\n\nIn [[Special:Log]]",
@@ -1334,12 +1363,15 @@
"action-userrights": "{{Doc-action|userrights}}\n\nThis action allows editing of all of the \"user rights\", not just the rights of the group \"all users\".",
"action-userrights-interwiki": "{{Doc-action|userrights-interwiki}}",
"action-siteadmin": "{{Doc-action|siteadmin}}",
- "action-sendemail": "{{doc-action|sendemail}}",
+ "action-sendemail": "{{doc-action|sendemail}}\n{{Identical|E-mail}}",
"action-editmywatchlist": "{{doc-action|editmywatchlist}}\n{{Identical|Edit your watchlist}}",
"action-viewmywatchlist": "{{doc-action|viewmywatchlist}}\n{{Identical|View your watchlist}}",
"action-viewmyprivateinfo": "{{doc-action|viewmyprivateinfo}}",
"action-editmyprivateinfo": "{{doc-action|editmyprivateinfo}}",
"action-editcontentmodel": "{{doc-action|editcontentmodel}}",
+ "action-managechangetags": "{{doc-action|managechangetags}}",
+ "action-applychangetags": "{{doc-action|applychangetags}}",
+ "action-changetags": "{{doc-action|changetags}}",
"nchanges": "Appears on enhanced watchlist and recent changes when page has more than one change on given date, linking to a diff of the changes.\n\nParameters:\n* $1 - the number of changes on that day (2 or more)\nThree messages are shown side-by-side: ({{msg-mw|Nchanges}} | {{msg-mw|Enhancedrc-since-last-visit}} | {{msg-mw|Enhancedrc-history}}).",
"enhancedrc-since-last-visit": "Appears on enhanced watchlist and recent changes when page has more than one change on given date and at least one that the user hasn't seen yet, linking to a diff of the unviewed changes.\n\nParameters:\n* $1 - the number of unviewed changes (1 or more)\nThree messages are shown side-by-side: ({{msg-mw|nchanges}} | {{msg-mw|enhancedrc-since-last-visit}} | {{msg-mw|enhancedrc-history}}).",
"enhancedrc-history": "Appears on enhanced watchlist and recent changes when page has more than one change on given date, linking to its history.\n\nThis is the same as {{msg-mw|hist}}, but not abbreviated.\n\nThree messages are shown side-by-side: ({{msg-mw|nchanges}} | {{msg-mw|enhancedrc-since-last-visit}} | {{msg-mw|enhancedrc-history}}).\n{{Identical|History}}",
@@ -1369,7 +1401,7 @@
"rcshowhidebots": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhidebots-show}} or {{msg-mw|rcshowhidebots-hide}}\n{{Identical|$1 bots}}",
"rcshowhidebots-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-show}}\n{{Identical|Show}}",
"rcshowhidebots-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidebots}}.\n\nSee also:\n* {{msg-mw|rcshowhidebots-hide}}\n{{Identical|Hide}}",
- "rcshowhideliu": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - any one of the following messages:\n** {{msg-mw|rcshowhideliu-show}}\n** {{msg-mw|rcshowhideliu-hide}}",
+ "rcshowhideliu": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - any one of the following messages:\n** {{msg-mw|rcshowhideliu-show}}\n** {{msg-mw|rcshowhideliu-hide}}\n{{Identical|Registered user}}",
"rcshowhideliu-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideliu}}.\n\nSee also:\n* {{msg-mw|rcshowhideliu-hide}}\n{{Identical|Show}}",
"rcshowhideliu-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideliu}}.\n\nSee also:\n* {{msg-mw|rcshowhideliu-show}}\n{{Identical|Hide}}",
"rcshowhideanons": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|Rcshowhideanons-show}} or {{msg-mw|Rcshowhideanons-hide}}\n{{Identical|Anonymous user}}",
@@ -1382,7 +1414,7 @@
"rcshowhidemine-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidemine}}.\n\nSee also:\n* {{msg-mw|rcshowhidemine-hide}}\n{{Identical|show}}",
"rcshowhidemine-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidemine}}.\n\nSee also:\n* {{msg-mw|rcshowhidemine-show}}\n{{Identical|hide}}",
"rclinks": "Used on [[Special:RecentChanges]].\n* $1 - a list of different choices with number of pages to be shown.<br />&nbsp;Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\".\n* $2 - a list of clickable links with a number of days for which recent changes are to be displayed.<br />&nbsp;Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\".\n* $3 - a block of text that consists of other messages.<br />&nbsp;Example: \"''Hide minor edits{{int:pipe-separator}}Show bots{{int:pipe-separator}}Hide anonymous users{{int:pipe-separator}}Hide logged-in users{{int:pipe-separator}}Hide patrolled edits{{int:pipe-separator}}Hide my edits''\"\nList elements are separated by {{msg-mw|Pipe-separator}} each. Each list element is, or contains, a link.",
- "diff": "Short form of \"differences\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...",
+ "diff": "Short form of \"differences\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...\n{{Identical|Diff}}",
"hist": "Short form of \"history\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...",
"hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].\n\nSee also:\n* {{msg-mw|Show}}\n{{Identical|Hide}}",
"show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].\n\nSee also:\n* {{msg-mw|Hide}}\n{{Identical|Show}}",
@@ -1419,9 +1451,9 @@
"upload-summary": "{{doc-specialpagesummary|upload}}",
"upload-recreate-warning": "Used as warning in [[Special:Upload]].",
"uploadtext": "{{doc-important|<code>thumb</code> and <code>left</code> are magic words. Leave them untranslated!}}\nText displayed when uploading a file using [[Special:Upload]].",
- "upload-permitted": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileExtensions|$wgFileExtensions]]\nSee also:\n* {{msg-mw|Upload-preferred}}\n* {{msg-mw|Upload-prohibited}}",
- "upload-preferred": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileExtensions|$wgFileExtensions]]\nSee also:\n* {{msg-mw|Upload-permitted}}\n* {{msg-mw|Upload-prohibited}}",
- "upload-prohibited": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileBlacklist|$wgFileBlacklist]]\nSee also:\n* {{msg-mw|Upload-permitted}}\n* {{msg-mw|Upload-preferred}}",
+ "upload-permitted": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileExtensions|$wgFileExtensions]]\n* $2 - count of items in $1 - for use in plural\nSee also:\n* {{msg-mw|Upload-preferred}}\n* {{msg-mw|Upload-prohibited}}",
+ "upload-preferred": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileExtensions|$wgFileExtensions]]\n* $2 - count of items in $1 - for use in plural\nSee also:\n* {{msg-mw|Upload-permitted}}\n* {{msg-mw|Upload-prohibited}}",
+ "upload-prohibited": "Used in [[Special:Upload]]. Parameters:\n* $1 - list of file types, defined in the variable [[mw:Special:MyLanguage/Manual:$wgFileBlacklist|$wgFileBlacklist]]\n* $2 - count of items in $1 - for use in plural\nSee also:\n* {{msg-mw|Upload-permitted}}\n* {{msg-mw|Upload-preferred}}",
"uploadfooter": "{{notranslate}}",
"upload-default-description": "{{ignored}}Custom default upload description. The contents of this message be will inserted in the field \"Summary\" on [[Special:Upload]].",
"uploadlogpage": "{{doc-logpage}}\n\nPage title of [[Special:Log/upload]].",
@@ -1562,7 +1594,7 @@
"img-auth-nopathinfo": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Missing PATH_INFO - see english description\n{{Doc-important|This is plain text. Do not use any wiki syntax.}}",
"img-auth-notindir": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: When the specified path is not in upload directory.",
"img-auth-badtitle": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Bad title, $1 is the invalid title",
- "img-auth-nologinnWL": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Logged in and file not whitelisted. $1 is the file not in whitelist.",
+ "img-auth-nologinnWL": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Logged in and file not whitelisted. $1 is the file not in whitelist.",
"img-auth-nofile": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Non existent file, $1 is the file that does not exist.",
"img-auth-isdir": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Trying to access a directory instead of a file, $1 is the directory.",
"img-auth-streaming": "[[mw:Manual:Image Authorization|Manual:Image Authorization]]: Is now streaming file specified by $1.",
@@ -1692,7 +1724,6 @@
"statistics-summary": "{{doc-specialpagesummary|statistics}}",
"statistics-header-pages": "Used in [[Special:Statistics]]",
"statistics-header-edits": "Used in [[Special:Statistics]]",
- "statistics-header-views": "Used in [[Special:Statistics]]",
"statistics-header-users": "Used in [[Special:Statistics]].\n{{Identical|User statistics}}",
"statistics-header-hooks": "Header of a section on [[Special:Statistics]] containing data provided by MediaWiki extensions",
"statistics-articles": "Used in [[Special:Statistics]].\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\n{{Identical|Content page}}",
@@ -1701,13 +1732,9 @@
"statistics-files": "Used in [[Special:Statistics]].\n{{Identical|Uploaded file}}",
"statistics-edits": "Used in [[Special:Statistics]]",
"statistics-edits-average": "Used in [[Special:Statistics]]",
- "statistics-views-total": "Used in [[Special:Statistics]]",
- "statistics-views-total-desc": "This message follows the message {{msg-mw|statistics-views-total}}, in [[Special:Statistics]].",
- "statistics-views-peredit": "Used in [[Special:Statistics]]",
"statistics-users": "{{doc-important|Do not translate \"Special:ListUsers\"}}\nUsed in [[Special:Statistics]].",
"statistics-users-active": "Used in [[Special:Statistics]]",
"statistics-users-active-desc": "Description shown beneath ''Active users'' in [[Special:Statistics]]. Parameters:\n* $1 - Value of <code>$wgRCMaxAge</code> in days",
- "statistics-mostpopular": "Used in [[Special:Statistics]]",
"statistics-footer": "{{notranslate}}",
"pageswithprop": "{{doc-special|PagesWithProp}}\n{{Identical|Page with page property}}",
"pageswithprop-summary": "{{doc-specialpagesummary|pageswithprop}}",
@@ -1760,8 +1787,6 @@
"unusedcategories-summary": "{{doc-specialpagesummary|unusedcategories}}",
"unusedimages": "{{doc-special|UnusedImages}}",
"unusedimages-summary": "{{doc-specialpagesummary|unusedimages}}",
- "popularpages": "{{doc-special|PopularPages}}",
- "popularpages-summary": "{{doc-specialpagesummary|popularpages}}",
"wantedcategories": "{{doc-special|WantedCategories}}",
"wantedcategories-summary": "{{doc-specialpagesummary|wantedcategories}}",
"wantedpages": "{{doc-special|WantedPages}}\n{{Identical|Wanted page}}",
@@ -1842,23 +1867,28 @@
"pager-older-n": "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the first argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.",
"suppress": "{{Identical|Oversight}}",
"querypage-disabled": "On special pages that use expensive database queries but are not cacheable, this message is displayed when 'miser mode' is on (i.e. no expensive queries allowed).",
+ "apihelp": "{{doc-special|ApiHelp}}",
+ "apihelp-summary": "{{doc-specialpagesummary|ApiHelp}}",
+ "apihelp-no-such-module": "Used as an error message if the requested API module is not found.\n\nParameters:\n* $1 - Requested module name",
+ "apihelp-link": "{{notranslate}} Used to construct a link to [[Special:ApiHelp]]\n\nParameters:\n* $1 - module to link\n* $2 - link text",
"booksources": "{{doc-special|BookSources}}\n\n'''This message shouldn't be changed unless it has serious mistakes.'''\n\nIt's used as the page name of the configuration page of [[Special:BookSources]]. Changing it breaks existing sites using the default version of this message.\n\nSee also:\n* {{msg-mw|Booksources|title}}\n* {{msg-mw|Booksources-text|text}}",
"booksources-summary": "{{doc-specialpagesummary|booksources}}",
"booksources-search-legend": "Box heading on [[Special:BookSources|book sources]] special page. The box is for searching for places where a particular book can be bought or viewed.",
"booksources-isbn": "{{optional}}\nThis is a label that appears before a text input field on the Special:BookSources page.\n{{Identical|ISBN}}",
- "booksources-go": "Name of button in [[Special:BookSources]]\n\n{{Identical|Go}}",
+ "booksources-search": "Search button in [[Special:BookSources]]\n\n{{Identical|Search}}",
"booksources-text": "Used in [[Special:BookSources/1]].\n\nThis message is followed by a list of links to other sites.\n\nSee also:\n* {{msg-mw|Booksources|title}}\n* {{msg-mw|Booksources-text|text}}",
"booksources-invalid-isbn": "This message is displayed after an invalid ISBN is entered on [[Special:Booksources]].",
"rfcurl": "{{notranslate}}\nParameters:\n* $1 - RFC number\nSee also:\n* {{msg-mw|Pubmedurl}}",
"pubmedurl": "{{notranslate}}\nParameters:\n* $1 - Pubmed number\nSee also:\n* {{msg-mw|Rfcurl}}",
"specialloguserlabel": "Used in [[Special:Log]] as a label for an input field with which the log can be filtered for entries describing actions ''performed'' by the specified user. \"Carried out\" and \"done\" are possible alternatives for \"performed\".",
"speciallogtitlelabel": "Used in [[Special:Log]] as a label for an input field with which the log can be filtered. This filter selects for pages or users on which a log action was performed.",
- "log": "{{doc-special|Log}}",
+ "log": "{{doc-special|Log}}\n{{Identical|Log}}",
"all-logs-page": "{{doc-logpage}}\nTitle of [[Special:Log]].",
"alllogstext": "Header of [[Special:Log]]",
"logempty": "Used as warning when there are no items to show.",
"log-title-wildcard": "* Appears in: [[Special:Log]]\n* Description: A check box to enable prefix search option",
"showhideselectedlogentries": "Text of the button which brings up the [[mw:RevisionDelete|RevisionDelete]] menu on [[Special:Log]].",
+ "log-edit-tags": "Text of button used to access change tagging interface. For more information on tags see [[mw:Manual:Tags]].", "allpages": "{{doc-special|AllPages}}\nFirst part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]].\nThe other parts are {{msg-mw|Prevpage}} and {{msg-mw|Nextpage}}.\n{{Identical|All pages}}",
"allpages": "{{doc-special|AllPages}}\nFirst part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]].\nThe other parts are {{msg-mw|Prevpage}} and {{msg-mw|Nextpage}}.\n{{Identical|All pages}}",
"allpages-summary": "{{doc-specialpagesummary|allpages}}",
"nextpage": "Third part of the navigation bar for the special page [[Special:AllPages]] and [[Special:PrefixIndex]]. $1 is a page title. The other parts are {{msg-mw|Allpages}} and {{msg-mw|Prevpage}}.\n\n{{Identical|Next page}}",
@@ -1971,7 +2001,7 @@
"usermessage-summary": "This message is used as an edit summary for any message that is posted because of a system event. Translate \"leaving a message\" in the sense of: to give a message to someone; to deliver a message somewhere; to deposit.",
"usermessage-editor": "The user name for the user that is the editor of system messages. See [{{canonicalurl:Thread:Support/Message_info_please}} discussion on Support].",
"usermessage-template": "{{optional}}",
- "watchlist": "{{Identical|Watchlist}}",
+ "watchlist": "Title of the Special:Watchlist page.\n\n{{Identical|Watchlist}}",
"watchlist-summary": "{{doc-specialpagesummary|watchlist}}",
"mywatchlist": "Link at the upper right corner of the screen.\n\nSee also:\n* {{msg-mw|Mywatchlist}}\n* {{msg-mw|Accesskey-pt-watchlist}}\n* {{msg-mw|Tooltip-pt-watchlist}}\n{{Identical|Watchlist}}",
"watchlistfor2": "Subtitle on [[Special:Watchlist]].\nParameters:\n* $1 - Username of current user\n* $2 - Tool links (View relevant changes | View and edit watchlist | Edit raw watchlist)\n{{Identical|For $1}}",
@@ -1994,7 +2024,7 @@
"wlheader-enotif": "Message at the top of [[Special:Watchlist]], after {{msg-mw|watchlist-details}}. Has to be a full sentence.\n\nSee also:\n* {{msg-mw|Watchlist-options|fieldset}}\n* {{msg-mw|enotif reset|Submit button text}}",
"wlheader-showupdated": "Message at the top of [[Special:Watchlist]], after {{msg-mw|watchlist-details}}. Has to be a full sentence.",
"wlnote": "Used on [[Special:Watchlist]] when a maximum number of hours or days is specified.\n\nParameters:\n* $1 - the number of changes shown\n* $2 - the number of hours for which the changes are shown\n* $3 - a date alone\n* $4 - a time alone",
- "wlshowlast": "Appears on [[Special:Watchlist]]. Parameters:\n* $1 - a choice of different numbers of hours (\"1 | 2 | 6 | 12\")\n* $2 - a choice of different numbers of days (\"1 | 3 | 7\")\n* $3 - {{msg-mw|watchlistall2}}\nClicking on your choice changes the list of changes you see (without changing the default in my preferences).",
+ "wlshowlast": "Appears on [[Special:Watchlist]]. Parameters:\n* $1 - a choice of different numbers of hours (\"1 | 2 | 6 | 12\")\n* $2 - a choice of different numbers of days (\"1 | 3 | 7\" and the maximum number of days available)\nClicking on your choice changes the list of changes you see (without changing the default in my preferences).",
"watchlist-options": "Legend of the fieldset of [[Special:Watchlist]]\n\nSee also:\n* {{msg-mw|Watchlist-details|watchlist header}}\n* {{msg-mw|Wlheader-enotif|watchlist header}}\n* {{msg-mw|enotif reset|Submit button text}}",
"watching": "Text displayed when clicked on the watch tab: {{msg-mw|Watch}}. It means the wiki is adding that page to your watchlist.",
"unwatching": "Text displayed when clicked on the unwatch tab: {{msg-mw|Unwatch}}. It means the wiki is removing that page from your watchlist.",
@@ -2043,7 +2073,6 @@
"deleteprotected": "Used as error message when deleting the page.\n\n\"If protection keeps them from editing, they shouldn't be able to delete.\"",
"deleting-backlinks-warning": "A warning shown when a page that is being deleted has at least one link to it or is transcluded in at least one page.",
"rollback": "{{Identical|Rollback}}",
- "rollback_short": "{{Identical|Rollback}}",
"rollbacklink": "{{Doc-actionlink}}\nThis link text appears on the recent changes page to users who have the \"rollback\" right.\nThis message has a tooltip {{msg-mw|tooltip-rollback}}\n{{Identical|Rollback}}",
"rollbacklinkcount": "{{doc-actionlink}}\nText of the rollback link showing the number of edits to be rolled back. See also {{msg-mw|rollbacklink}}.\n\nParameters:\n* $1 - the number of edits that will be rolled back. If $1 is over the value of <code>$wgShowRollbackEditCount</code> (default: 10) {{msg-mw|rollbacklinkcount-morethan}} is used.\n\nThe rollback link is displayed with a tooltip {{msg-mw|Tooltip-rollback}}",
"rollbacklinkcount-morethan": "{{doc-actionlink}}\nText of the rollback link when a greater number of edits is to be rolled back. See also {{msg-mw|rollbacklink}}.\n\nWhen the number of edits rolled back is smaller than [[mw:Special:MyLanguage/Manual:$wgShowRollbackEditCount|$wgShowRollbackEditCount]], {{msg-mw|rollbacklinkcount}} is used instead.\n\nParameters:\n* $1 - number of edits",
@@ -2156,6 +2185,7 @@
"namespace": "This message is located at [[Special:Contributions]].\n{{Identical|Namespace}}",
"invert": "Displayed in [[Special:RecentChanges|RecentChanges]], [[Special:RecentChangesLinked|RecentChangesLinked]] and [[Special:Watchlist|Watchlist]].\n\nThis message means \"Invert selection of namespace\".\n\nThis message has a tooltip {{msg-mw|tooltip-invert}}\n{{Identical|Invert selection}}",
"tooltip-invert": "Used in [[Special:Recentchanges]] as a tooltip for the invert checkbox. See also the message {{msg-mw|invert}}",
+ "tooltip-whatlinkshere-invert": "Used in [[Special:Whatlinkshere]] as a tooltip for the invert checkbox.\n\nSee also:\n* {{msg-mw|tooltip-invert}}\n* {{msg-mw|invert}}",
"namespace_association": "Used in [[Special:Recentchanges]] with a checkbox which selects the associated namespace to be added to the selected namespace, so that both are searched (or excluded depending on another checkbox selection). The association is between a namespace and its talk namespace.\n\nThis message has a tooltip {{msg-mw|tooltip-namespace association}}",
"tooltip-namespace_association": "Used in [[Special:Recentchanges]] as a tooltip for the associated namespace checkbox.\n\nSee also:\n* {{msg-mw|Namespace association}}",
"blanknamespace": "Name for main namespace (blank namespace) in drop-down menus at [[Special:RecentChanges]] and other special pages.\n{{Identical|Main}}",
@@ -2166,7 +2196,7 @@
"contribsub2": "Contributions for \"user\" (links). Parameters:\n* $1 is an IP address or a username, with a link which points to the user page (if registered user).\n* $2 is list of tool links. The list contains a link which has text {{msg-mw|Sp-contributions-talk}}.\n* $3 is a plain text username used for GENDER.\n{{Identical|For $1}}",
"contributions-userdoesnotexist": "This message is used in [[Special:Contributions]]. It is used to tell the user that the name he searched for doesn't exists.\n\nParameters:\n* $1 - a username\n\n{{identical|userdoesnotexist}}",
"nocontribs": "Used in [[Special:Contributions]] and [[Special:DeletedContributions]].\n\nSee examples: [[Special:Contributions/x]] and [[Special:DeletedContributions/x]].\n\nParameters:\n* $1 - (Unused) the user name",
- "uctop": "This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename‎ (edit summary) (current)\n{{Identical|Top}}",
+ "uctop": "This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename‎ (edit summary) (current)\n{{Identical|Current}}",
"month": "Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg-mw|year}}.",
"year": "Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for an input box to select a specific year to view the edits made in that year, and the earlier years.\n\nSee also:\n* {{msg-mw|month}}",
"sp-contributions-newbies": "Text of radio button on special page [[Special:Contributions]].",
@@ -2236,7 +2266,7 @@
"blockipsuccesstext": "Used in [[Special:Block]].\nThe title (subject) for this message is {{msg-mw|Blockipsuccesssub}}.\n\nParameters:\n* $1 - username, can be used for GENDER",
"ipb-blockingself": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-confirmhideuser}}",
"ipb-confirmhideuser": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-blockingself}}",
- "ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.",
+ "ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.\n\n<code>to check</code> refers here to a check box with the text \"{{int:ipb-confirm}}\"",
"ipb-edit-dropdown": "Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.\n\nSee also:\n* {{msg-mw|Delete-edit-reasonlist}}\n* {{msg-mw|Protect-edit-reasonlist}}",
"ipb-unblock-addr": "Used as page title in [[Special:Block]], if the target user is specified.\n\nParameters:\n* $1 - target username\n\nSee also:\n* {{msg-mw|Ipb-unblock}}\n{{Identical|Unblock}}",
"ipb-unblock": "Used as page title in [[Special:Block]], if the target user is not specified.\n\nSee also:\n* {{msg-mw|Ipb-unblock-addr}}",
@@ -2284,10 +2314,10 @@
"blocklogpage": "{{doc-logpage}}\n\nThe page name of [[Special:Log/block]]. Also appears in the drop down menu of [[Special:Log]] pages and in the action links of Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\n{{Identical|Block log}}",
"blocklog-showlog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER\nSee also:\n* {{msg-mw|Blocklog-showsuppresslog}}\n* {{msg-mw|Globalblocking-showlog}}",
"blocklog-showsuppresslog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER",
- "blocklogentry": "This is the text of an entry in the Block log, and recent changes, after hour (and date, only in the Block log) and sysop name:\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
- "reblock-logentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
+ "blocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
+ "reblock-logentry": "This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
"blocklogtext": "Appears on top of [[Special:Log/block]].",
- "unblocklogentry": "This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name:\n* $1 is the user being unblocked",
+ "unblocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 is the user being unblocked",
"block-log-flags-anononly": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Anononlyblock}}\n{{Related|Block-log-flags}}",
"block-log-flags-nocreate": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Createaccountblock}}\n{{Related|Block-log-flags}}",
"block-log-flags-noautoblock": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n{{Related|Block-log-flags}}\n{{Identical|Autoblock disabled}}",
@@ -2434,6 +2464,7 @@
"thumbnail-temp-create": "Used as thumbnail error message.\n\nSee also:\n* {{msg-mw|Thumbnail-dest-create}}\n* {{msg-mw|Thumbnail invalid params}}\n* {{msg-mw|Thumbnail dest directory}}",
"thumbnail-dest-create": "Used as thumbnail error message.\n\nSee also:\n* {{msg-mw|Thumbnail error}}\n* {{msg-mw|Thumbnail-temp-create}}\n* {{msg-mw|Thumbnail invalid params}}\n* {{msg-mw|Thumbnail dest directory}}",
"thumbnail_invalid_params": "Used as thumbnail error message.\n\nSee also:\n* {{msg-mw|Thumbnail-temp-create}}\n* {{msg-mw|Thumbnail-dest-create}}\n* {{msg-mw|Thumbnail dest directory}}",
+ "thumbnail_toobigimagearea": "Used as thumbnail error message.\n\n* $1 - Size in pixel (see {{msg-mw|size-megapixel}} and friends)",
"thumbnail_dest_directory": "Used as thumbnail error message.\n\nSee also:\n* {{msg-mw|Thumbnail error}}\n* {{msg-mw|Thumbnail-temp-create}}\n* {{msg-mw|Thumbnail-dest-create}}\n* {{msg-mw|Thumbnail invalid params}}",
"thumbnail_image-type": "This is the parameter 1 of the message {{msg-mw|thumbnail error}}",
"thumbnail_gd-library": "This is the parameter 1 of the message {{msg-mw|thumbnail error}}.\n*$1 is a function name of the GD library",
@@ -2486,9 +2517,9 @@
"import-rootpage-nosubpage": "Used on [[Special:Import]], when the import namespace does not support subpages. Parameters:\n* $1 is a namespace name.",
"importlogpage": "{{doc-logpage}}",
"importlogpagetext": "This text appears at the top of the [{{canonicalurl:Special:Log|type=import}} import log] special page.",
- "import-logentry-upload": "This is the text of an entry in the Import log (and Recent Changes), after hour (and date, only in the Import log) and sysop name:\n* $1 is the name of the imported file",
+ "import-logentry-upload": "{{ignored}}This is ''logentry'' message only used on IRC.\n* $1 is the name of the imported file",
"import-logentry-upload-detail": "Used as success message and log entry. Parameters:\n* $1 - number of succeeded revisions\nSee also:\n* {{msg-mw|Import-logentry-interwiki-detail}}",
- "import-logentry-interwiki": "Used as action listed in the log. Parameters:\n* $1 - page title",
+ "import-logentry-interwiki": "{{ignored}}This is ''logentry'' message only used on IRC. Parameters:\n* $1 - page title",
"import-logentry-interwiki-detail": "Used as success message and log entry. Parameters:\n* $1 - number of succeeded revisions\n* $2 - interwiki name\nSee also:\n* {{msg-mw|Import-logentry-upload-detail}}",
"javascripttest": "Title of the special page [[Special:JavaScriptTest]].\n\nSee also:\n* {{msg-mw|Javascripttest|title}}\n* {{msg-mw|Javascripttest-pagetext-noframework|summary}}\n* {{msg-mw|Javascripttest-pagetext-unknownframework|error message}}",
"javascripttest-backlink": "{{optional}}\nUsed as subtitle in [[Special:JavaScriptTest]]. Parameters:\n* $1 - page title",
@@ -2509,6 +2540,7 @@
"accesskey-pt-mycontris": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Mycontris}}\n* {{msg-mw|Accesskey-pt-mycontris}}\n* {{msg-mw|Tooltip-pt-mycontris}}",
"accesskey-pt-login": "{{doc-accesskey}}",
"accesskey-pt-logout": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Logout}}\n* {{msg-mw|Accesskey-pt-logout}}\n* {{msg-mw|Tooltip-pt-logout}}",
+ "accesskey-pt-createaccount": "{{doc-accesskey}}",
"accesskey-ca-talk": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Talk}}\n* {{msg-mw|Accesskey-ca-talk}}\n* {{msg-mw|Tooltip-ca-talk}}",
"accesskey-ca-edit": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Edit}}\n* {{msg-mw|Accesskey-ca-edit}}\n* {{msg-mw|Tooltip-ca-edit}}",
"accesskey-ca-addsection": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Addsection}}\n* {{msg-mw|Accesskey-ca-addsection}}\n* {{msg-mw|Tooltip-ca-addsection}}",
@@ -2538,6 +2570,7 @@
"accesskey-feed-atom": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Feed-atom}}\n* {{msg-mw|Accesskey-feed-atom}}\n* {{msg-mw|Tooltip-feed-atom}}",
"accesskey-t-contributions": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Contributions}}\n* {{msg-mw|Accesskey-t-contributions}}\n* {{msg-mw|Tooltip-t-contributions}}",
"accesskey-t-emailuser": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Emailuser}}\n* {{msg-mw|Accesskey-t-emailuser}}\n* {{msg-mw|Tooltip-t-emailuser}}",
+ "accesskey-t-info": "{{doc-accesskey}}",
"accesskey-t-permalink": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Permalink}}\n* {{msg-mw|Accesskey-t-permalink}}\n* {{msg-mw|Tooltip-t-permalink}}",
"accesskey-t-print": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Printableversion}}\n* {{msg-mw|Accesskey-t-print}}\n* {{msg-mw|Tooltip-t-print}}",
"accesskey-t-upload": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Upload}}\n* {{msg-mw|Accesskey-t-upload}}\n* {{msg-mw|Tooltip-t-upload}}",
@@ -2574,8 +2607,9 @@
"tooltip-pt-preferences": "Tooltip shown when hovering over the {{msg-mw|Mypreferences}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Mypreferences}}\n* {{msg-mw|Accesskey-pt-preferences}}\n* {{msg-mw|Tooltip-pt-preferences}}\n{{Identical|Preferences}}",
"tooltip-pt-watchlist": "Tooltip shown when hovering over the {{msg-mw|Mywatchlist}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Mywatchlist}}\n* {{msg-mw|Accesskey-pt-watchlist}}\n* {{msg-mw|Tooltip-pt-watchlist}}",
"tooltip-pt-mycontris": "Tooltip shown when hovering over the {{msg-mw|Mycontris}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Mycontris}}\n* {{msg-mw|Accesskey-pt-mycontris}}\n* {{msg-mw|Tooltip-pt-mycontris}}",
- "tooltip-pt-login": "Tooltip shown when hovering over the link 'Log in / create account' in the upper right corner show on all pages while not logged in.",
+ "tooltip-pt-login": "Tooltip shown when hovering over the link 'Log in' in the upper right corner show on all pages while not logged in.",
"tooltip-pt-logout": "Tooltip shown when hovering over the {{msg-mw|Logout}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Logout}}\n* {{msg-mw|Accesskey-pt-logout}}\n* {{msg-mw|Tooltip-pt-logout}}\n{{Identical|Log out}}",
+ "tooltip-pt-createaccount": "Tooltip shown when hovering over the link 'Create account' in the upper right corner show on all pages while not logged in.",
"tooltip-ca-talk": "Tooltip shown when hovering over the {{msg-mw|Talk}} tab.\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For a technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\nSee also:\n* {{msg-mw|Talk}}\n* {{msg-mw|Accesskey-ca-talk}}\n* {{msg-mw|Tooltip-ca-talk}}\n{{Identical|Content page}}",
"tooltip-ca-edit": "The tooltip when hovering over the {{msg-mw|Edit}} tab.\n\nSee also:\n* {{msg-mw|Edit}}\n* {{msg-mw|Accesskey-ca-edit}}\n* {{msg-mw|Tooltip-ca-edit}}",
"tooltip-ca-addsection": "Tooltip shown when hovering over the \"addsection\" tab (shown on talk pages).\n\nSee also:\n* {{msg-mw|Addsection}}\n* {{msg-mw|Accesskey-ca-addsection}}\n* {{msg-mw|Tooltip-ca-addsection}}",
@@ -2588,7 +2622,7 @@
"tooltip-ca-move": "See also:\n* {{msg-mw|Move}}\n* {{msg-mw|Accesskey-ca-move}}\n* {{msg-mw|Tooltip-ca-move}}\n{{Identical|Move this page}}",
"tooltip-ca-watch": "See also:\n* {{msg-mw|Watch}}\n* {{msg-mw|Accesskey-ca-watch}}\n* {{msg-mw|Tooltip-ca-watch}}\n{{Identical|Add this page to your watchlist}}",
"tooltip-ca-unwatch": "Tooltip shown when hovering over the {{msg-mw|Unwatch}} tab.\n\nSee also:\n* {{msg-mw|Unwatch}}\n* {{msg-mw|Accesskey-ca-unwatch}}\n* {{msg-mw|Tooltip-ca-unwatch}}",
- "tooltip-search": "The tooltip when hovering over the search menu.\n\nSee also:\n* {{msg-mw|Search}}\n* {{msg-mw|Accesskey-search}}\n* {{msg-mw|Tooltip-search}}",
+ "tooltip-search": "The tooltip when hovering over the search menu.\n\nSee also:\n* {{msg-mw|Search}}\n* {{msg-mw|Accesskey-search}}\n* {{msg-mw|Tooltip-search}}\n{{Identical|Search}}",
"tooltip-search-go": "This is the text of the tooltip displayed when hovering the mouse over the {{msg-mw|Go}} button next to the search box.\n\nSee also:\n* {{msg-mw|Go}}\n* {{msg-mw|Accesskey-search-go}}\n* {{msg-mw|Tooltip-search-go}}",
"tooltip-search-fulltext": "This is the text of the tooltip displayed when hovering the mouse over the {{msg-mw|Search}} button under the search box.\n\nSee also:\n* {{msg-mw|Search}}\n* {{msg-mw|Accesskey-search-fulltext}}\n* {{msg-mw|Tooltip-search-fulltext}}",
"tooltip-p-logo": "Tool tip shown when hovering the mouse over the logo that links to [[Main Page]].\n\nSee also:\n* {{msg-mw|Accesskey-p-logo}}\n* {{msg-mw|Tooltip-p-logo}}\n{{Identical|Visit the main page}}",
@@ -2605,6 +2639,7 @@
"tooltip-feed-atom": "Used as tooltip for Atom feed link.\n\nSee also:\n* {{msg-mw|Feed-atom}}\n* {{msg-mw|Accesskey-feed-atom}}\n* {{msg-mw|Tooltip-feed-atom}}",
"tooltip-t-contributions": "Tooltip shown when hovering over {{msg-mw|Contributions}} in the toolbox.\n\nSee also:\n* {{msg-mw|Contributions}}\n* {{msg-mw|Accesskey-t-contributions}}\n* {{msg-mw|Tooltip-t-contributions}}",
"tooltip-t-emailuser": "Tooltip shown when hovering over the {{msg-mw|Emailuser}} link in the toolbox (sidebar, below).\n\nSee also:\n* {{msg-mw|Emailuser}}\n* {{msg-mw|Accesskey-t-emailuser}}\n* {{msg-mw|Tooltip-t-emailuser}}",
+ "tooltip-t-info": "Tooltip shown when hovering over the {{msg-mw|pageinfo-toolboxlink}} link in the toolbox (sidebar, below).",
"tooltip-t-upload": "Tooltip shown when hovering over the link to upload files shown in the side bar menu on all pages.\n\nSee also:\n* {{msg-mw|Upload}}\n* {{msg-mw|Accesskey-t-upload}}\n* {{msg-mw|Tooltip-t-upload}}\n{{Identical|Upload file}}",
"tooltip-t-specialpages": "The tooltip when hovering over the link {{msg-mw|Specialpages}} going to a list of all special pages available in the wiki.\n\nSee also:\n* {{msg-mw|Specialpages}}\n* {{msg-mw|Accesskey-t-specialpages}}\n* {{msg-mw|Tooltip-t-specialpages}}",
"tooltip-t-print": "Tooltip shown when hovering over the link to printable version shown in the side bar menu on all pages.\n\nSee also:\n* {{msg-mw|Printableversion}}\n* {{msg-mw|Accesskey-t-print}}\n* {{msg-mw|Tooltip-t-print}}",
@@ -2683,9 +2718,8 @@
"pageinfo-language": "Language in which the page content is written.",
"pageinfo-content-model": "The model in which the page content is written.\n\nUsed as label at [{{fullurl:Main Page|action=info}} action=info]. Followed by 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-text}}",
"pageinfo-robot-policy": "The search engine status of the page.\n\nUsed as label. Followed by any one of the following messages:\n*{{msg-mw|Pageinfo-robot-index}}\n*{{msg-mw|Pageinfo-robot-noindex}}",
- "pageinfo-robot-index": "An indication that the page is indexable by search engines, that is listed in their search results.\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.",
+ "pageinfo-robot-index": "An indication that the page is indexable by search engines, that is listed in their search results.\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.\n{{Identical|Allowed}}",
"pageinfo-robot-noindex": "An indication that the page is not indexable (that is, is not listed on the results page of a search engine).\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.",
- "pageinfo-views": "The number of times the page has been viewed.",
"pageinfo-watchers": "Header of the row in the first table of the info action.",
"pageinfo-few-watchers": "Message displayed when there are fewer than $wgUnwatchedPageThreshold watchers. $1 is the value of $wgUnwatchedPageThreshold.",
"pageinfo-redirects-name": "Header of the row in the first table of the info action.\n\nFollowed by {{msg-mw|Pageinfo-redirects-value}}.\n\nUsed as link text. The link points to \"{{int:Whatlinkshere-title}}\" page ([[Special:WhatLinksHere]]).\n\nSee example: [{{canonicalurl:Main page|action=info}} Main page?action=info]",
@@ -2732,8 +2766,9 @@
"patrol-log-page": "{{doc-logpage}}",
"patrol-log-header": "Text that appears above the log entries on the [[Special:log|patrol log]].",
"log-show-hide-patrol": "Used in [[Special:Log]]. Parameters:\n* $1 - link text; one of {{msg-mw|Show}} or {{msg-mw|Hide}}\n{{Related|Log-show-hide}}",
+ "log-show-hide-tag": "Used in [[Special:Log]]. Parameters:\n* $1 - link text; one of {{msg-mw|Show}} or {{msg-mw|Hide}}\n{{Related|Log-show-hide}}",
"deletedrevision": "Used as log comment. Parameters:\n* $1 - archive name of old image",
- "filedeleteerror-short": "Used as error message. Parameters:\n* $1 - page title\nSee also:\n* {{msg-mw|Filedeleteerror-long}}",
+ "filedeleteerror-short": "Used as error message. Parameters:\n* $1 – There are two uses: 1) filename or 2) more specific error message like {{msg-mw|Backend-fail-internal}}.\nSee also:\n* {{msg-mw|Filedeleteerror-long}}",
"filedeleteerror-long": "Used as error message. Parameters:\n* $1 - ...\nSee also:\n* {{msg-mw|Filedeleteerror-short}}",
"filedelete-missing": "Used as error message. Parameters:\n* $1 - filename\nSee also:\n* {{msg-mw|Filedelete-old-unregistered}}\n* {{msg-mw|Filedelete-current-unregistered}}",
"filedelete-old-unregistered": "Used as error message. Parameters:\n* $1 - name\nSee also:\n* {{msg-mw|Filedelete-current-unregistered}}\n* {{msg-mw|Filedelete-missing}}",
@@ -2757,11 +2792,11 @@
"show-big-image-preview": "Message shown under the image description page thumbnail.\n\nCan be followed by {{msg-mw|Show-big-image-other}}.\n\nParameters:\n* $1 - a link which points to the thumbnail. Its text is {{msg-mw|Show-big-image-size}}",
"show-big-image-other": "Message shown under the image description page thumbnail.\n\nPreceded by {{msg-mw|Show-big-image-preview}}, if the image is in high resolution.\n\nParameters:\n* $1 - list of resolutions (pipe-separated)\n* $2 - number of resolutions",
"show-big-image-size": "Parameters:\n* $1 - the width of the image(s) in pixels\n* $2 - the height of the image(s) in pixels",
- "file-info-gif-looped": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page. Looped means repeating in the context of an animated gif. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop. For example of message in use see [[:File:Mouse10.gif]].",
- "file-info-gif-frames": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page.\n\nParameters:\n* $1 - number of frames",
- "file-info-png-looped": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page. Looped means repeating indefinetly in the context of an animated png. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop.",
+ "file-info-gif-looped": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page. Looped means repeating in the context of an animated gif. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop. For example of message in use see [[:File:Mouse10.gif]].\n{{Identical|Looped}}",
+ "file-info-gif-frames": "Part of the information provided about a [[w:Gif|.gif file]] on its file description page.\n\nParameters:\n* $1 - number of frames\n{{Identical|Frame}}",
+ "file-info-png-looped": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page. Looped means repeating indefinetly in the context of an animated png. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop.\n{{Identical|Looped}}",
"file-info-png-repeat": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page. The sequence of images is repeating a limited amount of time. It is a sequence of images, each displayed after the other, and the first one displayed after the last, for $1 times.",
- "file-info-png-frames": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page.\n\nThe variable $1 is the number of individual frames in an animated gif file.\n\nFor example of message in use see [[:File:Mouse10.gif]].",
+ "file-info-png-frames": "Part of the information provided about a [[w:APNG|.apng file]] on its file description page.\n\nThe variable $1 is the number of individual frames in an animated gif file.\n\nFor example of message in use see [[:File:Mouse10.gif]].\n{{Identical|Frame}}",
"file-no-thumb-animation": "We cannot animate thumbnails of this file.\n\nThis notice is shown on the image description page on animated svg files just below {{msg-mw|File-info-size}}.\n\nThis message may be overridden by a more specific message:\n* {{msg-mw|File-no-thumb-animation-gif}}.",
"file-no-thumb-animation-gif": "Cannot animate thumbnails of this gif file, because it has too big a resolution. The cut off resolution can vary between wikis ([[mw:manual:$wgMaxAnimatedGifArea|$wgMaxAnimatedGifArea]]). Note that resolution is calculated as width times height times number of frames. See {{msg-mw|file-no-thumb-animation}}.",
"newimages": "Page title of [[Special:NewImages]].",
@@ -2977,7 +3012,7 @@
"exif-sublocationdest": "Sub-location of city shown. This could be an address, a street, an area of town, etc.",
"exif-objectname": "This is a short name for the image or other media. (As compared to {{msg-mw|exif-imagedescription}} which is a long description of the image).\n\nThis is sometimes an ID number used to identify the photo, or a (short) title of the photo.\n\nThis property is extracted based on XMP's dc:title property ( http://www.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/XMPSpecificationPart1.pdf ), PNG's title keyword ( http://www.w3.org/TR/PNG/#11keywords ), or IPTC-iim 2:05 Object name property ( http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf ).",
"exif-specialinstructions": "Special instructions for how to use the image/media. This might include embargo notices, or other warnings.\n\nThis is IPTC-iim property 2:40. See http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf for details.",
- "exif-headline": "A short version of the image caption. The IPTC4XMP standard is clear that \"this is not the same thing as title [ {{msg-mw|exif-objectname}} ]\".\n\nThis is extracted from XMP's photoshop:headline ( http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf ) and IPTC-iim: 2:105 Headline tag ( http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf ).",
+ "exif-headline": "A short version of the image caption. The IPTC4XMP standard is clear that \"this is not the same thing as title [ {{msg-mw|exif-objectname}} ]\".\n\nThis is extracted from XMP's photoshop:headline ( http://www.iptc.org/std/photometadata/specification/IPTC-PhotoMetadata-201007_1.pdf ) and IPTC-iim: 2:105 Headline tag ( http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf ).\n{{Identical|Headline}}",
"exif-credit": "Provider/credit.\n\nWho gave us the image. This might be different from the creator of the image. This is IPTC-iim property 2:110",
"exif-source": "See IPTC-iim standard 2:115 - http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf.\n\nThis is who originally owned the image (a person, stock photo agency, etc). This does not refer to the image this image is based on.\n{{Identical|Source}}",
"exif-editstatus": "Editorial status of image. This is more intended for use with people making news papers. This denotes whether the image is on the main page, is part of a correction, etc. See 2:07 of http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf",
@@ -3216,7 +3251,6 @@
"exif-urgency-low": "Parameters:\n* $1 - numeric priority (6-8 for low)\n{{Related|Exif-urgency}}",
"exif-urgency-high": "Parameters:\n* $1 - numeric priority (1-4 for high)\n{{Related|Exif-urgency}}",
"exif-urgency-other": "Parameters:\n* $1 - numeric priority. Most specs define 0 and 9 to either be reserved or not allowed. However the exiftool documentation defines 0 to be reserved and 9 to be user-defined priority.\n{{Related|Exif-urgency}}",
- "watchlistall2": "Appears on [[Special:Watchlist]].\n\nUsed as <code>$3</code> in the message {{msg-mw|Wlshowlast}}.\n{{Identical|All}}",
"namespacesall": "In special page [[Special:WhatLinksHere]]. Drop-down box option for namespace.\n\n{{Identical|All}}",
"monthsall": "Used in a drop-down box on [[Special:Contributions]] as an option for \"all months\". See also {{msg-mw|Month}}.\n{{Identical|All}}",
"confirmemail": "Title of [[Special:ConfirmEmail]] page.",
@@ -3297,6 +3331,15 @@
"size-exabytes": "{{optional}}\nSize (of a file, typically) in exbibytes (1 exbibytes = 1024×1024×1024×1024×1024×1024 bytes).",
"size-zetabytes": "{{optional}}\nSize (of a file, typically) in zebibytes (1 zebibytes = 1024×1024×1024×1024×1024×1024×1024 bytes).",
"size-yottabytes": "{{optional}}\nSize (of a file, typically) in yobibytes (1 yobibytes = 1024×1024×1024×1024×1024×1024×1024×1024 bytes).",
+ "size-pixel": "{{optional}}\nSize (of a file, typically) in pixel.",
+ "size-kilopixel": "{{optional}}\nSize (of a file, typically) in kilopixel (1 kilopixel = 1000 pixel).",
+ "size-megapixel": "{{optional}}\nSize (of a file, typically) in megapixel (1 megapixel = 1000×1000 pixel).",
+ "size-gigapixel": "{{optional}}\nSize (of a file, typically) in gigapixel (1 gigapixel = 1000×1000×1000 pixel).",
+ "size-terapixel": "{{optional}}\nSize (of a file, typically) in terapixel (1 terapixel = 1000×1000×1000×1000 pixel).",
+ "size-petapixel": "{{optional}}\nSize (of a file, typically) in petapixel (1 petapixel = 1000×1000×1000×1000×1000 pixel).",
+ "size-exapixel": "{{optional}}\nSize (of a file, typically) in exapixel (1 exapixel = 1000×1000×1000×1000×1000×1000 pixel).",
+ "size-zetapixel": "{{optional}}\nSize (of a file, typically) in zetapixel (1 zetapixel = 1000×1000×1000×1000×1000×1000×1000 pixel).",
+ "size-yottapixel": "{{optional}}\nSize (of a file, typically) in yottapixel (1 yottapixel = 1000×1000×1000×1000×1000×1000×1000×1000 pixel).",
"bitrate-bits": "{{optional}}\nBitrate (of a file, typically) in bits.",
"bitrate-kilobits": "{{optional}}\nBitrate (of a file, typically) in kilobits (1 kilobit = 1000 bits).",
"bitrate-megabits": "{{optional}}\nBitrate (of a file, typically) in megabits (1 megabits = 1000×1000 bits).",
@@ -3389,9 +3432,9 @@
"signature": "This will be substituted in the signature (~<nowiki></nowiki>~~ or ~~<nowiki></nowiki>~~ excluding timestamp).\n\nParameters:\n* $1 - the username that is currently login\n* $2 - the customized signature which is specified in [[Special:Preferences|user's preferences]] as non-raw\nUse your language default parentheses ({{msg-mw|parentheses}}), but not use the message direct.\n\nSee also:\n* {{msg-mw|Signature-anon}} - signature for anonymous user",
"signature-anon": "{{notranslate}}\nUsed as signature for anonymous user. Parameters:\n* $1 - username (IP address?)\n* $2 - nickname (IP address?)\nSee also:\n* {{msg-mw|Signature}} - signature for registered user",
"timezone-utc": "{{optional}}",
- "unknown_extension_tag": "This is an error shown when you use an unknown extension tag name.\n\nThis feature allows tags like <code><nowiki><pre></nowiki></code> to be called with a parser like <code><nowiki>{{#tag:pre}}</nowiki></code>.\n\nParameters:\n* $1 - the unknown extension tag name",
"duplicate-defaultsort": "See definition of [[w:Sorting|sort key]] on Wikipedia. Parameters:\n* $1 - old default sort key\n* $2 - new default sort key",
"duplicate-displaytitle": "Warning shown when a page has its display title set multiple times. Parameters:\n* $1 - old display title\n* $2 - new display title",
+ "invalid-indicator-name": "Warning shown when the [https://www.mediawiki.org/wiki/Help:Page_status_indicators &lt;indicator name=\"''unique-identifier''\">''content''&lt;/indicator>] parser tag is used incorrectly.",
"version": "{{doc-special|Version}}\n{{Identical|Version}}",
"version-summary": "{{doc-specialpagesummary|version}}",
"version-extensions": "Header on [[Special:Version]].",
@@ -3424,7 +3467,7 @@
"version-credits-title": "Page title for an about/credits page for a MediaWiki extension.\n\nUsed as heading in credits page. e.g. [[Special:Version/Credits]] and [[Special:Version/Credits/UniversalLanguageSelector]]\n\nParameters:\n* $1 - the name of the extension",
"version-credits-not-found": "Descriptive error used when detailed about/credits for an extension are not available.\n\nSee example: [[Special:Version/Credits/Foo]]",
"version-poweredby-credits": "Message shown on [[Special:Version]]. Parameters:\n* $1 - the current year\n* $2 - a list of selected MediaWiki authors",
- "version-poweredby-others": "Used at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there's a long list of selected MediaWiki authors, then a comma and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.",
+ "version-poweredby-others": "Used at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there's a long list of selected MediaWiki authors, then a comma and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.\n{{Identical|Other}}",
"version-poweredby-translators": "Used as label for a link to [[Translating:MediaWiki/Credits]].\n\nPreceded by {{msg-mw|version-poweredby-others}} and {{msg-mw|and}}.\n\nUsed at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]].",
"version-credits-summary": "Summary of the [[Special:Version/Credits]] sub page, which lists all developers etc. who contributed to MediaWiki. Shown at the top.",
"version-license-info": "[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See //www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.",
@@ -3446,6 +3489,9 @@
"version-entrypoints-index-php": "A short description of the index.php entry point. Links to the mediawiki.org documentation page for index.php.",
"version-entrypoints-api-php": "A short description of the api.php entry point. Links to the mediawiki.org documentation page for api.php.",
"version-entrypoints-load-php": "A short description of the load.php entry point. Links to the mediawiki.org documentation page for load.php.",
+ "version-libraries": "Header on [[Special:Version]] above a table that lists installed external libraries and their version numbers.",
+ "version-libraries-library": "Column header for the library's name\n{{Identical|Library}}",
+ "version-libraries-version": "Column header for the library's version number\n{{Identical|Version}}",
"redirect": "{{doc-special|Redirect}}\nThis means \"Redirect by file'''name''', user '''ID''', page '''ID''', or revision ID\".",
"redirect-legend": "Legend of fieldset around input box in [[Special:Redirect]]",
"redirect-text": "Inside fieldset for [[Special:Redirect]]",
@@ -3483,6 +3529,7 @@
"specialpages-group-wiki": "{{doc-special-group|like=[[Special:Version]], [[Special:Statistics]], [[Special:LockDB]], etc}}",
"specialpages-group-redirects": "{{doc-special-group|that=redirect to another location|like=[[Special:Randompage]], [[Special:Mypage]], [[Special:Mytalk]], etc}}",
"specialpages-group-spam": "{{doc-special-group}}",
+ "specialpages-group-developer": "{{doc-special-group|that=are related to tools for developers}}",
"blankpage": "{{doc-special|BlankPage|unlisted=1}}\nSee also:\n* {{msg-mw|Intentionallyblankpage|text}}",
"intentionallyblankpage": "Text displayed in [[Special:BlankPage]].\n\nSee also:\n* {{msg-mw|Intentionallyblankpage|page title}}",
"external_image_whitelist": "As usual please leave all the wiki markup, including the spaces, as they are. You can translate the text, including 'Leave this line exactly as it is'. The first line of this messages has one (1) leading space.\n\nSee definition of [[w:Regular_expression|regular expression]] on Wikipedia.",
@@ -3496,12 +3543,86 @@
"tags-tag": "Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].",
"tags-display-header": "Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].",
"tags-description-header": "Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].",
+ "tags-source-header": "Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].\n{{Identical|Source}}",
"tags-active-header": "Caption of a column in [[Special:Tags]]. Values are \"Yes\" or \"No\" to indicate if a tag that was ever used is current still registered.\n\nSee example: [[mw:Special:Tags]].\n\nFor more information on tags see [[mw:Manual:Tags|MediaWiki]].\n{{Identical|Active}}",
"tags-hitcount-header": "Caption of a column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].",
+ "tags-actions-header": "Caption of a column in [[Special:Tags]]. The column contains action links like \"delete\". For more information on tags see [[mw:Manual:Tags|MediaWiki]].\n{{Identical|Action}}",
"tags-active-yes": "Table cell contents if given tag is \"active\".\n\nSee also:\n* {{msg-mw|Tags-active-no}}\n{{Identical|Yes}}",
"tags-active-no": "Table cell contents if given tag is not \"active\".\n\nSee also:\n* {{msg-mw|Tags-active-yes}}\n{{Identical|No}}",
+ "tags-source-extension": "Table cell contents if given tag can be applied automatically by a software [[mw:Manual:Extensions|extension]].\n\nSee also:\n* {{msg-mw|Tags-source-manual}}\n* {{msg-mw|Tags-source-none}}",
+ "tags-source-manual": "Table cell contents if given tag can be applied by users or bots.\n\nSee also:\n* {{msg-mw|Tags-source-extension}}\n* {{msg-mw|Tags-source-none}}",
+ "tags-source-none": "Table cell contents if given tag is no longer in use. (It was applied in the past, but it is currently not applied.)\n\nSee also:\n* {{msg-mw|Tags-source-extension}}\n* {{msg-mw|Tags-source-manual}}",
"tags-edit": "Used on [[Special:Tags]]. Verb. Used as display text on a link to create/edit a description.\n{{Identical|Edit}}",
+ "tags-delete": "Used on [[Special:Tags]]. Verb. Used as display text on a link to delete a tag.\n{{Identical|Delete}}",
+ "tags-activate": "Used on [[Special:Tags]]. Verb. Used as display text on a link to activate a tag.\n{{Identical|Activate}}",
+ "tags-deactivate": "Used on [[Special:Tags]]. Verb. Used as display text on a link to deactivate a tag.\n{{Identical|Delete}}",
"tags-hitcount": "Shown in the \"{{msg-mw|Tags-hitcount-header}}\" column in [[Special:Tags]]. For more information on tags see [[mw:Manual:Tags|MediaWiki]].\n\nParameters:\n* $1 - the number of changes marked with the tag",
+ "tags-manage-no-permission": "Error message on [[Special:Tags]]",
+ "tags-create-heading": "The title of a fieldset, beneath which lies a form used to create a tag. For more information on tags see [[mw:Manual:Tags|MediaWiki]].",
+ "tags-create-explanation": "The first paragraph of an explanation to tell users what they are about to do.",
+ "tags-create-tag-name": "Form field label for the name of the tag to be created.",
+ "tags-create-reason": "{{Identical|Reason}}",
+ "tags-create-submit": "The label of the form \"submit\" button when the user is about to create a tag.\n{{Identical|Create}}",
+ "tags-create-no-name": "Error message on [[Special:Tags]]",
+ "tags-create-invalid-chars": "Error message on [[Special:Tags]]",
+ "tags-create-invalid-title-chars": "Error message on [[Special:Tags]]",
+ "tags-create-already-exists": "Error message on [[Special:Tags]]",
+ "tags-create-warnings-above": "Explanation placed before warning messages upon creating a tag.\n\nParameters:\n* $1 - the code name of the tag that the user is attempting to create\n* $2 - the number of warnings",
+ "tags-create-warnings-below": "Question placed after warning messages upon creating a tag.",
+ "tags-delete-title": "The title of a page used to delete a tag. For more information on tags see [[mw:Manual:Tags|MediaWiki]].",
+ "tags-delete-explanation-initial": "The first paragraph of an explanation to tell users what they are about to do.\n\nParameters:\n* $1 - the code name of the tag that is about to be deleted",
+ "tags-delete-explanation-in-use": "The second paragraph (not always shown) of an explanation to tell users what they are about to do.\n\nParameters:\n* $1 - the code name of the tag that is about to be deleted\n*$2 - the number of places the tag is used. The value is the sum of (revisions + log entries) where the tag is used.",
+ "tags-delete-explanation-warning": "The third paragraph of an explanation to tell users what they are about to do.\n\nParameters:\n* $1 - the code name of the tag that is about to be deleted",
+ "tags-delete-explanation-active": "The fourth paragraph (not always shown) of an explanation to tell users what they are about to do.\n\nParameters:\n* $1 - the code name of the tag that is about to be deleted\n*$2 - the number of places the tag is used. The value is the sum of (rev",
+ "tags-delete-reason": "{{Identical|Reason}}",
+ "tags-delete-submit": "The label of the form \"submit\" button when the user is about to delete a tag. The word \"irreversibly\" is used to emphasise that the action destroys some data and is impossible to undo, even by server administrators.",
+ "tags-delete-not-allowed": "Error message on [[Special:Tags]]",
+ "tags-delete-not-found": "Error message on [[Special:Tags]]",
+ "tags-delete-too-many-uses": "Error message on [[Special:Tags]]",
+ "tags-delete-warnings-after-delete": "Warning shown after deleting a tag.\n\nParameters:\n* $1 - the code name of the tag that was deleted\n* $2 - the number of warnings",
+ "tags-activate-title": "The title of a page used to activate a tag. For more information on tags see [[mw:Manual:Tags|MediaWiki]].",
+ "tags-activate-question": "An explanation to tell users what they are about to do.\n\nParameters:\n* $1 - the code name of the tag that is about to be activated",
+ "tags-activate-reason": "{{Identical|Reason}}",
+ "tags-activate-not-allowed": "Error message on [[Special:Tags]]",
+ "tags-activate-not-found": "Error message on [[Special:Tags]]",
+ "tags-activate-submit": "The label of the form \"submit\" button when the user is about to activate a tag.\n{{Identical|Activate}}",
+ "tags-deactivate-title": "The title of a page used to deactivate a tag. For more information on tags see [[mw:Manual:Tags|MediaWiki]].",
+ "tags-deactivate-question": "An explanation to tell users what they are about to do.\n\nParameters:\n* $1 - the code name of the tag that is about to be deactivated",
+ "tags-deactivate-reason": "{{Identical|Reason}}",
+ "tags-deactivate-not-allowed": "Error message on [[Special:Tags]]",
+ "tags-deactivate-submit": "The label of the form \"submit\" button when the user is about to deactivate a tag.\n{{Identical|Deactivate}}",
+ "tags-apply-no-permission": "Error message seen via the API when a user lacks the permission to apply change tags.",
+ "tags-apply-not-allowed-one": "Error message seen via the API when a user tries to apply a single tag that is not properly defined. This message is only ever used in the case of 1 tag.\n\nParameters:\n* $1 - tag name",
+ "tags-apply-not-allowed-multi": "Error message seen via the API when a user tries to apply more than one tag that is not properly defined.\n\nParameters:\n* $1 - comma-separated list of tag names\n* $2 - number of tags",
+ "tags-update-no-permission": "Error message seen via the API when a user lacks the permission to add or remove change tags after the fact.",
+ "tags-update-add-not-allowed-one": "Error message seen via the API when a user tries to add a single tag that is not properly defined. This message is only ever used in the case of 1 tag.\n\nParameters:\n* $1 - tag name",
+ "tags-update-add-not-allowed-multi": "Error message seen via the API when a user tries to add more than one tag that is not properly defined.\n\nParameters:\n* $1 - comma-separated list of tag names\n* $2 - number of tags",
+ "tags-update-remove-not-allowed-one": "Error message seen via the API when a user tries to remove a single tag that is not properly defined. This message is only ever used in the case of 1 tag.\n\nParameters:\n* $1 - tag name",
+ "tags-update-remove-not-allowed-multi": "Error message seen via the API when a user tries to remove more than one tag that is not properly defined.\n\nParameters:\n* $1 - comma-separated list of tag names\n* $2 - number of tags",
+ "tags-edit-title": "The title of a page where tags can be added or removed from selected revisions or log entries.\nFor more information on tags see [[mw:Manual:Tags]].",
+ "tags-edit-manage-link": "Text of a link to [[Special:Tags]], in imperative mood. Refers to the same thing as {{msg-mw|log-name-managetags}}.",
+ "tags-edit-revision-selected": "{{Identical|revdelete-selected-text}}\n\nSee also:\n* {{msg-mw|tags-edit-logentry-selected}}",
+ "tags-edit-logentry-selected": "{{Identical|logdelete-selected}}\n\nSee also:\n* {{msg-mw|tags-edit-revision-selected}}",
+ "tags-edit-revision-explanation": "Leave blank.\n\nSee also:\n* {{msg-mw|tags-edit-logentry-explanation}}",
+ "tags-edit-logentry-explanation": "Leave blank.\n\nSee also:\n* {{msg-mw|tags-edit-revision-explanation}}",
+ "tags-edit-revision-legend": "Form legend.\n\nSee also:\n* {{msg-mw|tags-edit-logentry-legend}}",
+ "tags-edit-logentry-legend": "Form legend.\n\nSee also:\n* {{msg-mw|tags-edit-revision-legend}}",
+ "tags-edit-existing-tags": "Heading beneath which a list of tags already applied to the revision or log entry is presented.",
+ "tags-edit-existing-tags-none": "Shown when no tags are applied. Should be formatted differently (italicised or parenthesised).",
+ "tags-edit-new-tags": "Heading beneath which the user chooses which tags should be attached to the revision or log entry. They may add or remove tags.",
+ "tags-edit-add": "Heading beneath which the user picks which tags to add to the revision or log entry.",
+ "tags-edit-remove": "Heading beneath which the user picks which tags to remove from the revision or log entry.",
+ "tags-edit-remove-all-tags": "Check box label that the user selects when they want to remove all the tags from the revision or log entry.",
+ "tags-edit-reason": "{{Identical|Reason}}",
+ "tags-edit-revision-submit": "Text of the submission button of the edit tag form for revisions.\n\nSee also:\n* {{msg-mw|tags-edit-logentry-submit}}",
+ "tags-edit-logentry-submit": "Text of the submission button of the edit tag form for log entries.\n\nSee also:\n* {{msg-mw|tags-edit-revision-submit}}",
+ "tags-edit-success": "Success message for the edit tag form.",
+ "tags-edit-failure": "Error message wrapper for the edit tag form.\n\nParameters:\n* $1 - additional error messages",
+ "tags-edit-nooldid-title": "Title for an error message ({{msg-mw|tags-edit-nooldid-text}}) for the edit tag form.",
+ "tags-edit-nooldid-text": "Error message for the edit tag form.\n\nSee also:\n* {{msg-mw|tags-edit-nooldid-title}}",
+ "tags-edit-none-selected": "Error message for the edit tag form.",
+ "tags-edit-chosen-placeholder": "Placeholder text on the jQuery Chosen input box where users can select zero or more tags.",
+ "tags-edit-chosen-no-results": "Message displayed by the jQuery Chosen input box when the user enters a string which doesn't match a known tag.\n\nDue to technical limitations, the user's input is not passed as a parameter to this message. The string the user entered is wrapped in quotation marks (\") and appended to the end of this string.",
"comparepages": "The title of [[Special:ComparePages]]",
"comparepages-summary": "{{doc-specialpagesummary|comparepages}}",
"compare-page1": "Label for the field of the 1st page in the comparison for [[Special:ComparePages]]\n{{Identical|Page}}",
@@ -3556,6 +3677,14 @@
"revdelete-uname-unhid": "Used on\n* {{msg-mw|logentry-delete-event}}\n* {{msg-mw|logentry-delete-revision}}\n* {{msg-mw|logentry-suppress-event}}\n* {{msg-mw|logentry-suppress-event}}",
"revdelete-restricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
"revdelete-unrestricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
+ "logentry-block-block": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Blocklogentry}}",
+ "logentry-block-unblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n\nCf. {{msg-mw|Unblocklogentry}}",
+ "logentry-block-reblock": "{{Logentry|[[Special:Log/block]]}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string\n\nCf. {{msg-mw|Reblock-logentry}}",
+ "logentry-suppress-block": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
+ "logentry-suppress-reblock": "{{Logentry}}\n* $4 - user name for gender or empty string for autoblocks\n* $5 - the block duration, localized and formatted with the english tooltip\n* $6 - block detail flags or empty string",
+ "logentry-import-upload": "{{Logentry|[[Special:Log/import]]}}",
+ "logentry-import-interwiki": "{{Logentry|[[Special:Log/import]]}}",
+ "logentry-merge-merge": "{{Logentry|[[Special:Log/merge]]}}\n* $4 - the page into which the content is merged\n* $5 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
"logentry-move-move": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
"logentry-move-move-noredirect": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
"logentry-move-move_redir": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
@@ -3573,6 +3702,20 @@
"logentry-upload-upload": "{{Logentry|[[Special:Log/upload]]}}",
"logentry-upload-overwrite": "{{Logentry|[[Special:Log/upload]]}}",
"logentry-upload-revert": "{{Logentry|[[Special:Log/upload]]}}",
+ "log-name-managetags": "The title of a log which contains entries related to the management of change tags. This includes creation and deletion of the tags themselves. \"Tag\" here refers to the same thing as {{msg-mw|tags-tag}}.",
+ "log-description-managetags": "The description of the tag management log. \"Tag\" here refers to the same thing as {{msg-mw|tags-tag}}.",
+ "logentry-managetags-create": "{{Logentry|[[Special:Log/managetags]]}}\n*$4 - tag name",
+ "logentry-managetags-delete": "{{Logentry|[[Special:Log/managetags]]}}\n*$4 - tag name\n* $5 - number of revisions + log entries that were tagged with the tag",
+ "logentry-managetags-activate": "{{Logentry|[[Special:Log/managetags]]}}\n*$4 - tag name",
+ "logentry-managetags-deactivate": "{{Logentry|[[Special:Log/managetags]]}}\n*$4 - tag name",
+ "log-name-tag": "The title of a log which contains entries related to applying and removing change tags from individual revisions or log entries. \"Tag\" here refers to the same thing as {{msg-mw|tags-tag}}.",
+ "log-description-tag": "The description of the tag log. \"Tag\" here refers to the same thing as {{msg-mw|tags-tag}}.",
+ "logentry-tag-update-add-revision": "{{Logentry|[[Special:Log/tag]]}}\n*$4 - revision ID\n* $6 - list of tags that were added, separated by {{msg-mw|Comma-separator}}\n* $7 - number of added tags",
+ "logentry-tag-update-add-logentry": "{{Logentry|[[Special:Log/tag]]}}\n*$5 - log entry ID\n* $6 - list of tags that were added, separated by {{msg-mw|Comma-separator}}\n* $7 - number of added tags",
+ "logentry-tag-update-remove-revision": "{{Logentry|[[Special:Log/tag]]}}\n*$4 - revision ID\n* $8 - list of tags that were removed, separated by {{msg-mw|Comma-separator}}\n* $9 - number of removed tags",
+ "logentry-tag-update-remove-logentry": "{{Logentry|[[Special:Log/tag]]}}\n*$5 - log entry ID\n* $8 - list of tags that were removed, separated by {{msg-mw|Comma-separator}}\n* $9 - number of removed tags",
+ "logentry-tag-update-revision": "{{Logentry|[[Special:Log/tag]]}}\n*$4 - revision ID\n* $6 - list of tags that were added, separated by {{msg-mw|Comma-separator}}\n* $7 - number of added tags\n* $8 - list of tags that were removed, separated by {{msg-mw|Comma-separator}}\n* $9 - number of removed tags",
+ "logentry-tag-update-logentry": "{{Logentry|[[Special:Log/tag]]}}\n*$5 - log entry ID\n* $6 - list of tags that were added, separated by {{msg-mw|Comma-separator}}\n* $7 - number of added tags\n* $8 - list of tags that were removed, separated by {{msg-mw|Comma-separator}}\n* $9 - number of removed tags",
"rightsnone": "Default rights for registered users.\n\n{{Identical|None}}",
"revdelete-logentry": "{{RevisionDelete}}\nThis is the message for the log entry in [[Special:Log/delete]] when changing visibility restrictions for page revisions.\n\nFollowed by the message {{msg-mw|revdelete-log-message}} in brackets.\n\nPreceded by the name of the user doing this task.\n\nParameters:\n* $1 - the page name\nSee also:\n* {{msg-mw|Logdelete-logentry}}",
"logdelete-logentry": "{{RevisionDelete}}\nThis is the message for the log entry in [[Special:Log/delete]] when changing visibility restrictions for log events.\n\nFollowed by the message {{msg-mw|logdelete-log-message}} in brackets.\n\nPreceded by the name of the user who did this task.\n\nParameters:\n* $1 - the log name in brackets\nSee also:\n* {{msg-mw|Revdelete-logentry}}",
@@ -3583,7 +3726,7 @@
"revdelete-unhid": "This message is used as <code>$1</code>:\n* in {{msg-mw|Revdelete-log-message}} when unhiding revisions\n* in {{msg-mw|Logdelete-log-message}} when unhiding information in the log entry about unhiding revisions\nParameters:\n* $1 - any one of the following:\n** {{msg-mw|Revdelete-content}} (when unhiding the page content)\n** {{msg-mw|Revdelete-summary}} (when unhiding the edit summary)\n** {{msg-mw|Revdelete-uname}} (when unhiding the user name)\n** a combination of these three messages\nSee also:\n* {{msg-mw|Revdelete-hid}}",
"revdelete-log-message": "This log message is used together with {{msg-mw|revdelete-logentry}} in the deletion or suppression logs when changing visibility restrictions for page revisions.\n\nParameters:\n* $1 - any one of the following\n** {{msg-mw|revdelete-hid}} (when hiding data)\n** {{msg-mw|revdelete-unhid}} (when unhiding data)\n** {{msg-mw|revdelete-restricted}} (when applying restrictions for sysops)\n** {{msg-mw|revdelete-unrestricted}} (when removing restrictions for sysops)\n** a combination of those messages\n* $2 - the number of revisions for which the restrictions are changed\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.\n\nSee also:\n* {{msg-mw|Logdelete-log-message}}",
"logdelete-log-message": "This log message appears in brackets after the message {{msg-mw|logdelete-logentry}} in the deletion or suppression logs when changing the visibility of a log entry for events. For a brief description of the process of changing the visibility of events and their log entries see this [http://www.mediawiki.org/wiki/RevisionDelete mediawiki explanation].\n\nParameters:\n* $1 - any one of the following\n** {{msg-mw|revdelete-hid}} (when hiding data)\n** {{msg-mw|revdelete-unhid}} (when unhiding data)\n** {{msg-mw|revdelete-restricted}} (when applying restrictions for sysops)\n** {{msg-mw|revdelete-unrestricted}} (when removing restrictions for sysops)\n** a combination of those messages\n* $2 - the number of events for which the restrictions are changed\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.\n\nSee also:\n* {{msg-mw|Revdelete-log-message}}",
- "deletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - deleted page name",
+ "deletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - deleted page name\n{{Identical|Deleted}}",
"suppressedarticle": "Part of a [[mw:Manual:RevisionDelete|RevisionDelete]] log entry. Parameters:\n* $1 - suppressed page name\n{{Identical|Suppressed}}",
"undeletedarticle": "This is a ''logentry'' message. Parameters:\n* $1 - restored (undeleted) page name",
"patrol-log-line": "Text of notes on entries in the [http://translatewiki.net/w/i.php?title=Special%3ALog&type=patrol&user=&page=&year=&month=-1 patrol log].\nParameters:\n* $1 - the link whose text is {{msg-mw|patrol-log-diff}}\n* $2 - the name of the page\n* $3 - appears to be {{msg-mw|Patrol-log-auto}} (at least sometimes)\n\nThe message appears after the name of the patroller.",
@@ -3597,19 +3740,29 @@
"newuserlog-autocreate-entry": "This message is used in the [[:mw:Extension:Newuserlog|new user log]] to mark an account that was created by MediaWiki as part of a [[:mw:Extension:CentralAuth|CentralAuth]] global account.",
"rightslogentry": "This message is displayed in the [[Special:Log/rights|User Rights Log]] when a bureaucrat changes the user groups for a user.\n\nParameters:\n* $1 - the username\n* $2 - list of user groups or {{msg-mw|Rightsnone}}\n* $3 - list of user groups or {{msg-mw|Rightsnone}}\n\nThe name of the bureaucrat who did this task appears before this message.\n\nSimilar to {{msg-mw|Gur-rightslog-entry}}",
"rightslogentry-autopromote": "This message is displayed in the [[Special:Log/rights|User Rights Log]] when a user is automatically promoted to a user group.\n\nParameters:\n* $1 - (Unused)\n* $2 - a comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $3 - a comma separated list of new user groups",
+ "feedback-adding": "Progress notice",
+ "feedback-back": "Button to go back to the previous action in the feedback dialog.\n{{Identical|Back}}",
+ "feedback-bugcheck": "Message that appears before the user submits a bug, reminding them to check for known bugs.\n\nParameters:\n* $1 - bug list page URL",
+ "feedback-bugnew": "Button label - asserts that the user has checked for existing bugs. When clicked will launch an external form to add a new bug in a new tab or window",
"feedback-bugornote": "When feedback dialog box is opened, this introductory message in small print explains the options to report a bug or add simple feedback.\n\nWe expect that people in a hurry will not read this.\n\nParameters:\n* $1 - Bug note URL\n* $2 - \"Feedback\"\n* $3 - Feedback page URL",
- "feedback-subject": "Label for a text input\n{{Identical|Subject}}",
- "feedback-message": "Label for a textarea; signature referrs to a Wikitext signature.\n{{Identical|Message}}",
"feedback-cancel": "Button label\n{{Identical|Cancel}}",
- "feedback-submit": "Button label\n{{Identical|Submit}}",
- "feedback-adding": "Progress notice",
+ "feedback-close": "Button label\n{{Identical|Done}}",
+ "feedback-external-bug-report-button": "A button for submitting an external technical bug report.",
+ "feedback-dialog-title": "Title of the feedback dialog",
+ "feedback-dialog-intro": "An introduction at the top of the feedback dialog. $1 - Feedback page link",
+ "feedback-error-title": "{{Identical|Error}}",
"feedback-error1": "Error message, appears when an unknown error occurs submitting feedback",
"feedback-error2": "Error message, appears when we could not add feedback",
"feedback-error3": "Error message, appears when we lose our connection to the wiki",
+ "feedback-error4": "Error message, appears when mediawiki.feedback or one of its dependencies is misconfigured or there is a problem fetching one of the modules",
+ "feedback-message": "Label for a textarea; signature refers to a Wikitext signature.\n{{Identical|Message}}",
+ "feedback-subject": "Label for a text input\n{{Identical|Subject}}",
+ "feedback-submit": "Button label\n{{Identical|Submit}}",
+ "feedback-terms": "Label for a checkbox asking for permissions to submit browser information.",
+ "feedback-termsofuse": "Label with an agreement about the terms of use.",
"feedback-thanks": "Thanks message, appears if feedback was successful. Parameters:\n* $1 - \"Feedback\"\n* $2 - Feedback page URL",
- "feedback-close": "Button label\n{{Identical|Done}}",
- "feedback-bugcheck": "Message that appears before the user submits a bug, reminding them to check for known bugs.\n\nParameters:\n* $1 - bug list page URL",
- "feedback-bugnew": "Button label - asserts that the user has checked for existing bugs. When clicked will launch a bugzilla form to add a new bug in a new tab or window",
+ "feedback-thanks-title": "The title of the thank you dialog at the end of the submission process.\n{{Identical|Thank you}}",
+ "feedback-useragent": "A label denoting the user agent in the feedback that is posted to the feedback page.",
"searchsuggest-search": "Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)\n\n{{Identical|Search}}",
"searchsuggest-containing": "Label used in the special item of the search suggestions list which gives the user an option to perform a full text search for the term.",
"api-error-badaccess-groups": "API error message that can be used for client side localisation of API errors.",
@@ -3645,6 +3798,13 @@
"api-error-stashfailed": "API error message that can be used for client side localisation of API errors.",
"api-error-publishfailed": "API error message that can be used for client side localisation of API errors.",
"api-error-stasherror": "API error message that can be used for client side localisation of API errors.",
+ "api-error-stashedfilenotfound": "API error message that can be used for client side localisation of API errors.",
+ "api-error-stashpathinvalid": "API error message that can be used for client side localisation of API errors.",
+ "api-error-stashfilestorage": "API error message that can be used for client side localisation of API errors.",
+ "api-error-stashzerolength": "API error message that can be used for client side localisation of API errors.",
+ "api-error-stashnotloggedin": "API error message that can be used for client side localisation of API errors.",
+ "api-error-stashwrongowner": "API error message that can be used for client side localisation of API errors.",
+ "api-error-stashnosuchfilekey": "API error message that can be used for client side localisation of API errors.",
"api-error-timeout": "API error message that can be used for client side localisation of API errors.",
"api-error-unclassified": "API error message that can be used for client side localisation of API errors.",
"api-error-unknown-code": "API error message that can be used for client side localisation of API errors.\n\nParameters:\n* $1 - may contain more error details\n{{Identical|Unknown error}}",
@@ -3710,31 +3870,54 @@
"default-skin-not-found-row-enabled": "One row of the list of installed skins shown as a part of the following message (for an enabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-disabled}}",
"default-skin-not-found-row-disabled": "One row of the list of installed skins shown as a part of the following message (for a disabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-enabled}}",
"mediastatistics": "{{doc-special|MediaStatistics}}",
- "mediastatistics-summary": "{{doc-specialpagesummary|MediaStatistics}}\nUsed to explain that this page only does statistics over current versions of files. \"Old\" versions of files and deleted files are not counted.",
+ "mediastatistics-summary": "Used to explain that this page only does statistics over current versions of files. \"Old\" versions of files and deleted files are not counted.",
"mediastatistics-nfiles": "{{optional}}\nEntry in table on [[Special:MediaStatistics]] that gives total number of files. $1 - number of files. $2 - percentage of total files that is this type (percent will be formatted to have about 3 interesting digits. e.g. 0.121 or 10.2)",
- "mediastatistics-nbytes": "{{optional}}\nCombined space of this type of file. Bytes and \"human units\" are shown so that users can better get a sense of magnitude when making comparisions.\n*$1 - total space in bytes.\n*$2 - total space in \"human units\" (i.e. KB, MB, GB, etc)\n*$3 - What percentage of the space all uploads take up does this file take up.",
+ "mediastatistics-nbytes": "Combined space of this type of file. Bytes and \"human units\" are shown so that users can better get a sense of magnitude when making comparisons.\n*$1 - total space in bytes.\n*$2 - total space in \"human units\" (i.e. KB, MB, GB, etc)\n*$3 - What percentage of the space all uploads take up does this file take up.",
"mediastatistics-table-mimetype": "Header for table on Special:MediaStatistics. Column that lists MIME types (The values in this column will look like 'image/jpeg', and be linked to Special:MIMESearch).",
"mediastatistics-table-extensions": "Header for column in tables on [[Special:MediaStatistics]] that lists possible extensions for a given file type. (The values in this column will be a comma separated list of file extensions, such as '.webm' or '.png, .apng').",
"mediastatistics-table-count": "Column header on Special:MediaStatistics for the number of files column. The headers in this column use {{msg-mw|mediastatistics-nfiles}}.",
"mediastatistics-table-totalbytes": "Column header on Special:MediaStatistics for the number of bytes that this file type takes up. Values for this column use {{msg-mw|mediastatistics-nbytes}}",
- "mediastatistics-header-unknown": "Header on Special:MediaStatistics for file types that are in the unknown category",
+ "mediastatistics-header-unknown": "Header on Special:MediaStatistics for file types that are in the unknown category\n{{Identical|Unknown}}",
"mediastatistics-header-bitmap": "Header on [[Special:MediaStatistics]] for file types that are in the bitmap category. This includes raster graphics like PNG, JPEG, XCF, GIF etc. Vector graphics like SVG are considered \"drawings\" ({{msg-mw|mediastatistics-header-drawing}})",
"mediastatistics-header-drawing": "Header on [[Special:MediaStatistics]] for file types that are in the drawing category. This includes vector images like SVGs. Some chemical markup formats may also be included here.",
- "mediastatistics-header-audio": "Header on [[Special:MediaStatistics]] for file types that are in the audio category",
- "mediastatistics-header-video": "Header on [[Special:MediaStatistics]] for file types that are in the video category",
+ "mediastatistics-header-audio": "Header on [[Special:MediaStatistics]] for file types that are in the audio category\n{{Identical|Audio}}",
+ "mediastatistics-header-video": "Header on [[Special:MediaStatistics]] for file types that are in the video category\n{{Identical|Video}}",
"mediastatistics-header-multimedia": "Header on [[Special:MediaStatistics]] for file types that are in the multimedia category. This does not include plain audio or video files, but more complex multimedia such as flash or vrml. This especially includes scripted multimedia. Ogg files in which MediaWiki cannot determine if it is an audio or video file (or something else) are included here.",
- "mediastatistics-header-office": "Header on [[Special:MediaStatistics]] for file types that are in the Office category. This includes PDFs, open office files, MSWord files, etc.",
+ "mediastatistics-header-office": "Header on [[Special:MediaStatistics]] for file types that are in the Office category. This includes PDFs, OpenDocument files, Microsoft Word files, etc.",
"mediastatistics-header-text": "Header on [[Special:MediaStatistics]] for file types that are in the text category. This includes simple text formats, including plain text formats, json, csv, and xml. Source code of compiled programming languages may be included here in the future, but isn't currently.",
"mediastatistics-header-executable": "Header on [[Special:MediaStatistics]] for file types that are in the executable category. This includes things like source files for interpreted programming language (Shell scripts, javascript, etc).",
"mediastatistics-header-archive": "Header on [[Special:MediaStatistics]] for file types that are in the archive category. Includes things like tar, zip, gzip etc.",
- "json-warn-trailing-comma": "A warning message notifying that JSON text was automatically corrected by removing erroneous commas.\n\nParameters:\n* $1 - number of commas that were removed",
- "json-error-unknown": "User error message when there’s an unknown error.\n{{Identical|Unknown error}}. This error is shown if we received an unexpected value from PHP. See http://php.net/manual/en/function.json-last-error.php\n\nParameters:\n* $1 - integer error code",
- "json-error-depth": "User error message when the maximum stack depth is exceeded.\nSee http://php.net/manual/en/function.json-last-error.php",
- "json-error-state-mismatch": "User error message when underflow or the modes mismatch.\n\n'''Underflow''': A data-processing error arising when the absolute value of a computed quantity is smaller than the limits of precision of the computing device, retaining at least one significant digit.\nSee http://php.net/manual/en/function.json-last-error.php",
- "json-error-ctrl-char": "User error message when an unexpected control character has been found.\nSee http://php.net/manual/en/function.json-last-error.php",
- "json-error-syntax": "User error message when there is a syntax error; a malformed JSON.\nSee http://php.net/manual/en/function.json-last-error.php",
- "json-error-utf8": "User error message when there are malformed UTF-8 characters, possibly incorrectly encoded.\nSee http://php.net/manual/en/function.json-last-error.php",
- "json-error-recursion": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php",
- "json-error-inf-or-nan": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php",
- "json-error-unsupported-type": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php"
+ "json-warn-trailing-comma": "A warning message notifying that JSON text was automatically corrected by removing erroneous commas.\n\nParameters:\n* $1 - number of commas that were removed\n{{Related|Json-error}}",
+ "json-error-unknown": "User error message when there’s an unknown error.\n\nThis error is shown if we received an unexpected value from PHP. See http://php.net/manual/en/function.json-last-error.php\n\nParameters:\n* $1 - integer error code\n{{Related|Json-error}}",
+ "json-error-depth": "User error message when the maximum stack depth is exceeded.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+ "json-error-state-mismatch": "User error message when underflow or the modes mismatch.\n\n'''Underflow''': A data-processing error arising when the absolute value of a computed quantity is smaller than the limits of precision of the computing device, retaining at least one significant digit.\n\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+ "json-error-ctrl-char": "User error message when an unexpected control character has been found.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+ "json-error-syntax": "User error message when there is a syntax error; a malformed JSON.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}\n{{Identical|Syntax error}}",
+ "json-error-utf8": "User error message when there are malformed UTF-8 characters, possibly incorrectly encoded.\nSee http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+ "json-error-recursion": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+ "json-error-inf-or-nan": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+ "json-error-unsupported-type": "PHP JSON encoding/decoding error. See http://php.net/manual/en/function.json-last-error.php\n{{Related|Json-error}}",
+ "headline-anchor-title": "Title tooltip for the section anchor symbol",
+ "special-characters-group-latin": "This is the name of a script, or alphabet, not a language.",
+ "special-characters-group-latinextended": "The name of the Latin Extended character set.",
+ "special-characters-group-ipa": "IPA means a script: \"international phonetic alphabet\" here, and not \"international phonetic association\", the organization behind it.",
+ "special-characters-group-symbols": "The section name for symbols\n\n{{Identical|Symbol}}",
+ "special-characters-group-greek": "This is the name of a script, or alphabet, not a language.",
+ "special-characters-group-cyrillic": "This is the name of a script, or a group of alphabets, used mainly in Eastern Europe and North and Central Asia.\n{{related|Special-characters-group}}",
+ "special-characters-group-arabic": "This is the name of a script, or alphabet, not a language.\n{{related|Special-characters-group}}",
+ "special-characters-group-arabicextended": "This is a description of the additional group of Arabic script characters for languages such as a Persian, Urdu, Pashto and others. This message is supposed to be similar to {{msg-mw|special-characters-group-latinextended}}.\n{{related|Special-characters-group}}",
+ "special-characters-group-persian": "The name of the Persian character set (alphabet).",
+ "special-characters-group-hebrew": "This is the name of a script, or alphabet, not a language.",
+ "special-characters-group-bangla": "The name of the [[w:Bengali alphabet|Bangla]] (a.k.a. Bengali) character set (alphabet).\n{{related|Special-characters-group}}",
+ "special-characters-group-tamil": "The name of the [[w:Tamil_Script#Numerals_and_symbols|Tamil]] numerals and symbols.",
+ "special-characters-group-telugu": "The name of the [[w:Telugu language#Alphabet|Telugu]] character set (alphabet).",
+ "special-characters-group-sinhala": "The name of the [[w:Sinhala alphabet|Sinhala]] character set (alphabet).",
+ "special-characters-group-gujarati": "The name of the [[w:Gujarati alphabet|Gujarati]] character set (alphabet).",
+ "special-characters-group-devanagari": "The name of the [[w:Devanagari]] character set (alphabet).\n{{related|Special-characters-group}}",
+ "special-characters-group-thai": "The name of the [[w:Thai alphabet|Thai]] character set (alphabet).",
+ "special-characters-group-lao": "{{Identical|Lao}}",
+ "special-characters-group-khmer": "{{Identical|Khmer}}",
+ "special-characters-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"
}
diff --git a/languages/i18n/qu.json b/languages/i18n/qu.json
index b55a995e..d91d0941 100644
--- a/languages/i18n/qu.json
+++ b/languages/i18n/qu.json
@@ -9,7 +9,8 @@
"The Evil IP address",
"לערי ריינהארט",
"아라",
- "Fitoschido"
+ "Fitoschido",
+ "Macofe"
]
},
"tog-underline": "T'inkikunata uranpi sikwiy",
@@ -503,7 +504,6 @@
"passwordreset-emailsent-capture": "Yaykuna rimata kutichina e-chaskiqa kachasqañam, kay qatiqpi rikunki.",
"passwordreset-emailerror-capture": "{{GENDER:$2|}}Yaykuna rimata kutichina e-chaskiqa rurasqa karqan, imatachus kay qatiqpi rikunki, ichataq kachasqa kaptin pantasqam tukurqan: $1",
"changeemail": "E-chaski imamaytata wakinchay",
- "changeemail-header": "Rakiqunap e-chaski imamaytanta wakinchay",
"changeemail-text": "Kay hunt'ana p'anqata hunt'ay e-chaski imamaytaykita hukchanaykipaq. Yaykuna rimaykita yaykuchinaykim tiyan kay hukchanata takyachinaykipaq.",
"changeemail-no-info": "Yaykunaykim tiyan kay p'anqata chiqalla aypanaykipaq.",
"changeemail-oldemail": "Kunan kachkaq e-chaski imamayta:",
@@ -511,7 +511,6 @@
"changeemail-none": "(mana ima)",
"changeemail-password": "{{SITENAME}} yaykuna rimayki:",
"changeemail-submit": "E-chaskita wakinchay",
- "changeemail-cancel": "Ama niy",
"changeemail-throttled": "Nisyu kutiñam yaykuykacharqunki.\nAma hina kaspa, $1 suyay manaraq musuqmanta yaykuykachaspayki.",
"resettokens": "Llawikunata kutichiy",
"resettokens-no-tokens": "Manam kanchu kutichina llawikuna.",
@@ -776,7 +775,6 @@
"mergehistory-same-destination": "Qallarinapas taripanapas p'anqakunaqa manam kaqlla kayta atinchu",
"mergehistory-reason": "Kayrayku:",
"mergelog": "Huñuy hallch'a",
- "pagemerge-logentry": "[[$1]]-ta [[$2]]-man huñusqa (llamk'apusqakuna $3-kama)",
"revertmerge": "Huñusqata kutichiy",
"mergelogpagetext": "Kay qatiqpiqa aswan ñaqha huk p'anqa wiñay kawsaymanta huk p'anqa wiñay kawsayman huñusqakunatam rikunki.",
"history-title": "«$1» p’anqata hukchasqakunap wiñay kawsaynin",
@@ -825,7 +823,7 @@
"searchall": "tukuy",
"showingresults": "Qhipanpiqa rikuchkanki {{PLURAL:$1|'''1''' tarisqatam|'''$1'''-kama tarisqakunatam}}, '''$2''' huchhawan qallarispa.",
"showingresultsinrange": "Qhipanpiqa rikuchkanki {{PLURAL:$1|<strong>1</strong>-kama tarisqatam|<strong>$1</strong>-kama tarisqakunatam}}, #<strong>$2</strong> huchhamanta #<strong>$3</strong> huchhakama.",
- "showingresultsheader": "{{PLURAL:$5|Taripasqa: '''$1''', '''$3'''-manta|Taripasqa: '''$1 - $2''', '''$3'''-manta}}, '''$4'''-paq",
+ "search-showingresults": "{{PLURAL:$4|Taripasqa <strong>$1</strong>, <strong>$3</strong>-pura|Taripasqakuna <strong>$1</strong>-manta <strong>$2</strong>-kama, <strong>$3</strong>-pura}}",
"search-nonefound": "Maskaypaq kay hina kachun nisqakamaqa manam kanchu taripasqakuna.",
"powersearch-legend": "Ñawparikusqa maskay",
"powersearch-ns": "Kay suti k'itikunapi maskay:",
@@ -1407,14 +1405,11 @@
"randomincategory": "Katiguriyapi kikinmanta p'anqa",
"randomincategory-invalidcategory": "\"$1\" nisqaqa katiguriyapaq manam allin sutinchu.",
"randomincategory-nopages": "[[:Category:$1|$1]] katiguriyapiqa manam p'anqakuna kanchu.",
- "randomincategory-selectcategory": "Katiguriyamanta kikinmanta p'anqata chaskiy: $1 $2.",
- "randomincategory-selectcategory-submit": "Riy",
"randomredirect": "Mayninpi pusapuna p'anqa",
"randomredirect-nopages": "Manam kanchu \"$1\" nisqa suti k'itipi pusapuna p'anqakuna.",
"statistics": "Ranuy (kanchachani)",
"statistics-header-pages": "P'anqakunamanta ranuy (kanchachani)",
"statistics-header-edits": "Llamk'apuymanta ranuy (kanchachani)",
- "statistics-header-views": "Qhawaymanta ranuy (kanchachani)",
"statistics-header-users": "Ruraqmanta ranuy",
"statistics-header-hooks": "Wakin ranuy (kanchachani)",
"statistics-articles": "Samiq p'anqakuna",
@@ -1423,13 +1418,9 @@
"statistics-files": "Churkusqa willañiqikuna",
"statistics-edits": "P'anqa llamk'apusqakuna {{SITENAME}}-pa paqarisqanmanta",
"statistics-edits-average": "Kuskanchaku llamk'apusqakuna p'anqaman",
- "statistics-views-total": "Tukuy qhawasqakuna",
- "statistics-views-total-desc": "Mana kaq p'anqakunataqa sapaq p'anqakunatapas kaypi manam rikunki",
- "statistics-views-peredit": "Qhawasqakuna llamk'apusqaman",
"statistics-users": "Rakiqunayuq [[Special:ListUsers|ruraqkuna]]",
"statistics-users-active": "Llamk'achkaq ruraqkuna",
"statistics-users-active-desc": "Ñaqha {{PLURAL:$1|p'unchawpi|$1 p'unchawkunapi}} llamk'apuq ruraqkuna",
- "statistics-mostpopular": "Lliwmanta astawan rikusqa p'anqakuna",
"pageswithprop": "Kaqninniyuq p'anqakuna",
"pageswithprop-legend": "Kaqninniyuq p'anqakuna",
"pageswithprop-text": "Kay p'anqapiqa sapaq kaqninniyuq p'anqakunatam sutisuyupi rikunki.",
@@ -1468,7 +1459,6 @@
"uncategorizedtemplates": "Katiguriyannaq plantillakuna",
"unusedcategories": "Mana llamk'achisqa katiguriyakuna",
"unusedimages": "Mana llamk'achisqa rikchakuna",
- "popularpages": "Munasqa p'anqakuna",
"wantedcategories": "Muchusqa katiguriyakuna",
"wantedpages": "Muchusqa p'anqakuna",
"wantedpages-badtitle": "Mana allin p'anqa suti kay taripay tawqapi: $1",
@@ -1526,7 +1516,6 @@
"querypage-disabled": "Kay sapaq p'anqamanqa ama nisqam allinta llamk'anapaq.",
"booksources": "Liwrukunapi pukyukuna",
"booksources-search-legend": "Liwrukunapi pukyukunata maskay",
- "booksources-go": "Riy",
"booksources-text": "Kay qatiqpiqa huk llika tiyaykunaman t'inkikunatam rikunki, musuq icha mawk'a liwrukunata qhatuq, maskasqayki liwrukunamantachá astawan willaq:",
"booksources-invalid-isbn": "ISBN huchhaqa manachá allinchu; pantasqata llanchiriy qallariy qillqamanta iskaychamuspa.",
"specialloguserlabel": "Rurapuq:",
@@ -1648,7 +1637,7 @@
"wlheader-enotif": "E-chaskimanta musyachinaman arí nisqañam.",
"wlheader-showupdated": "Qayna watukamusqaykimantapacha hukchasqa p'anqakunataqa '''yanasapa''' nisqapim rikunki.",
"wlnote": "Kay qatiqpiqa {{PLURAL:$1|qhipaq hukchasqam|'''$1''' qhipaq hukchasqakunam}} qhipaq {{PLURAL:$2|urapim|'''$2''' urakunapim}}, musuqchasqa $3, $4.",
- "wlshowlast": "$1 ura, $2 p'unchaw $3-mantapacha hukchasqakunata rikuchiy",
+ "wlshowlast": "$1 ura, $2 p'unchaw -mantapacha hukchasqakunata rikuchiy",
"watchlist-options": "Watiqana sutisuyupaq allinkachinakuna",
"watching": "Watiqasqakunaman yapaspa...",
"unwatching": "Watiqasqakunamanta qulluspa...",
@@ -1695,7 +1684,6 @@
"delete-toobig": "Kay p'anqaqa ancha wiñay kawsaysapa, $1-manta aswan {{PLURAL:$1|musuqchasqayuq|musuqchasqayuq}}. Kay hina p'anqakunata qulluyqa saywachasqam, {{SITENAME}}ta mana waqllinapaq.",
"delete-warning-toobig": "Kay p'anqaqa ancha wiñay kawsaysapa, $1-manta aswan {{PLURAL:$1|musuqchasqayuq|musuqchasqayuq}}. Kay hina p'anqata qulluspaykiqa, {{SITENAME}}ta waqllinkimanchá. Kay ruraymanta anchata yuyaychakuspa hamut'ay.",
"rollback": "Hukchasqakunata kutichiy",
- "rollback_short": "Kutichiy",
"rollbacklink": "Kutichiy",
"rollbacklinkcount": "$1 {{PLURAL:$1|hukchasqata}} kutichiy",
"rollbacklinkcount-morethan": "$1-manta aswan {{PLURAL:$1|hukchasqakunata}} kutichiy",
@@ -2069,7 +2057,6 @@
"import": "P'anqakunata hawamanta chaskiy",
"importinterwiki": "Huk wikimanta p'anqakunata chaskiy",
"import-interwiki-text": "Huk wikita p'anqap sutintapas akllay hawamanta chaskinapaq.\nLlamk'apusqap pachankunaqa ruraqpa sutinkunapas kakuspa hallch'asqam kanqa.\nTukuy hawa wikimanta chaskisqakunaqa [[Special:Log/import|hawamanta chaskiy hallch'api]] hallch'asqam kanqa.",
- "import-interwiki-source": "Qallariy wiki icha p'anqa:",
"import-interwiki-history": "Kay p'anqapaq tukuy wiñay kawsaynintinta iskaychay",
"import-interwiki-templates": "Tukuy plantillakunapas",
"import-interwiki-submit": "Hawamanta chaskiy",
@@ -2110,18 +2097,14 @@
"import-rootpage-nosubpage": "Saphi p'anqap \"$1\" sutisuyunpiqa urin p'anqakuna manam kanqachu.",
"importlogpage": "Hawamanta chaskiy hallch'a",
"importlogpagetext": "Huk wikikunamanta wiñay kawsayniyuq p'anqakunata kamachina chaskiykuna.",
- "import-logentry-upload": "hawamanta chaskisqa [[$1]] willañiqita churkuspa",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|hukchasqa|hukchasqakuna}}",
- "import-logentry-interwiki": "huk wikimanta chaskisqa $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|hukchasqa|hukchasqakuna}} $2-manta",
"javascripttest": "JavaScript llanchiy",
- "javascripttest-title": "$1 llanchiykunam richkan",
"javascripttest-pagetext-noframework": "Kay p'anqaqa JavaScript llanchina purichinallapaqmi kachun.",
"javascripttest-pagetext-unknownframework": "Mana riqsisqa \"$1\" nisqa llanchina inchu ruray",
"javascripttest-pagetext-frameworks": "Ama hina kaspa, kay qatiq llanchina inchu ruraykunamanta hukta akllay: $1",
"javascripttest-pagetext-skins": "Qarata akllay llanchiykunata paywan purichinaykipaq:",
"javascripttest-qunit-intro": "Qhaway [$1 llanchina yachachinapi], mediawiki.org nisqapi kaq.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit llanchina",
"tooltip-pt-userpage": "Qampa ruraqpa p'anqayki",
"tooltip-pt-anonuserpage": "IP huchhaykipaq ruraqpa p'anqan",
"tooltip-pt-mytalk": "Rimanakuy p'anqayki",
@@ -2222,7 +2205,6 @@
"pageinfo-robot-policy": "Maskana kuyuchinam yuyarinachan",
"pageinfo-robot-index": "Saqillasqa",
"pageinfo-robot-noindex": "Mana saqillasqa",
- "pageinfo-views": "Hayk'a qhawaykuna",
"pageinfo-watchers": "P'anqata hayk'a watiqaqkuna",
"pageinfo-few-watchers": "$1-manta aswan pisi {{PLURAL:$1|qhawaq|qhawaqkuna}}",
"pageinfo-redirects-name": "Kay p'anqaman hayk'a pusampuqkuna",
@@ -2670,7 +2652,6 @@
"exif-urgency-low": "Aslla ($1)",
"exif-urgency-high": "Hatun ($1)",
"exif-urgency-other": "Ruraqpa churasqan ñawpaqchay ($1)",
- "watchlistall2": "lliw",
"namespacesall": "tukuy",
"monthsall": "(tukuy)",
"confirmemail": "E-chaski imamaytaykita takyachiy",
@@ -2756,7 +2737,6 @@
"watchlisttools-edit": "Watiqana sutisuyuta qhawaspa llamk'apuy",
"watchlisttools-raw": "Chawa watiqana sutisuyuta llamk'apuy",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|rimanakuy]])",
- "unknown_extension_tag": "Mana riqsisqa \"$1\" mast'arina k'askana",
"duplicate-defaultsort": "Paqtataq: Kikinmanta allinchana llawi «$2» ñawpaq kikinmanta allinchana llawitam «$1» huknachan.",
"version": "Musuqchasqa",
"version-extensions": "Tiyachisqa mast'arinakuna",
@@ -2772,7 +2752,7 @@
"version-parser-function-hooks": "T'ikrana rurana ch'iwinakuna",
"version-hook-name": "Ch'iwinap sutin",
"version-hook-subscribedby": "Kay runap mañaykusqan:",
- "version-version": "(Musuqchasqa $1)",
+ "version-version": "($1)",
"version-license": "Saqillay",
"version-ext-license": "Saqillay",
"version-ext-colheader-name": "Mast'ariy",
@@ -2827,6 +2807,7 @@
"specialpages-group-wiki": "Willakuna llamk'anakunapas",
"specialpages-group-redirects": "Pusapunapaq sapaq p'anqakuna",
"specialpages-group-spam": "Spam nisqa millay rurayta hark'anapaq llamk'anakuna",
+ "specialpages-group-developer": "Kururachiqkunapaq llamk'anakuna",
"blankpage": "Ch'usaq p'anqa",
"intentionallyblankpage": "Kay p'anqaqa munaylla ch'usaqmi kachun",
"external_image_whitelist": " #Kay sinruta kay hinallatam saqiy<pre>\n#Ñiqilla hawanchana rakikunata churay (// nisqapura rakitam) urapi\n#Kaykunaqa hawa (q'uñilla t'inkisqa) rikchakunap URL tiyayninkunawanmi taripanachisqa kanqa\n#Taripasqakunaqa rikcha hinam rikurinqa, hukkunapaqtaq rikchaman t'inkillam rikurinqa\n#«#» nisqawan qallariq sinrukunaqa willapuy hinam llamk'apusqa kanqa\n#Kayqa manam musyanchu uchuy icha hatun sanancha kayta\n\n#Tukuy regex rakikunata kay siq'ip hananman churay. Kay sinruta kay hinallatam saqiy</pre>",
@@ -2910,19 +2891,20 @@
"logentry-rights-rights-legacy": "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3-pa huñuman kapuyninta hukchan",
"logentry-rights-autopromote": "{{GENDER:$2|}}$1 sutiyuq ruraqqa kikinmantam ñawparikun $4-manta $5-man",
"rightsnone": "(-)",
+ "revdelete-summary": "yuyarinata llamk'apuy",
+ "feedback-adding": "Willapuyniykita kay p'anqaman yapay: ...",
+ "feedback-bugcheck": "Allillanmi! Llanchirillay [$1 riqsisqapura huk pantasqañachu] mana kanmanchu.",
+ "feedback-bugnew": "Llanchisqañam. Musuq pantasqamanta willay",
"feedback-bugornote": "Allwiyapi sasachakuymanta imaymanachanta willayta munaspaykiqa, [$1 pantasqamanta willay].\nMana chayqa, kay qatiqpi kaq hunt'ana p'anqatam llamk'achiyta atinki. Willapuyniykiqa \"[$3 $2]\" sutiyuq p'anqamanmi yapasqa kanqa, hinallataqmi ruraqpa sutiykipas qampa llamk'achisqayki llika wamp'unapas.",
- "feedback-subject": "Yuyancha:",
- "feedback-message": "Willay:",
"feedback-cancel": "Ama niy",
- "feedback-submit": "Willapuyniykita kachay",
- "feedback-adding": "Willapuyniykita kay p'anqaman yapay: ...",
+ "feedback-close": "Rurasqañam",
"feedback-error1": "Pantasqa: API nisqamanta taripasqaqa manam riqsirisqachu",
"feedback-error2": "Pantasqa: Manam llamk'apuyta atinchu",
"feedback-error3": "Pantasqa: API nisqaqa manam kutipanchu",
+ "feedback-message": "Willay:",
+ "feedback-subject": "Yuyancha:",
+ "feedback-submit": "Kachay",
"feedback-thanks": "Añaychayki! Willapuyniykiqa \"[$2 $1]\" sutiyuq p'anqaman yapasqañam.",
- "feedback-close": "Rurasqañam",
- "feedback-bugcheck": "Allillanmi! Llanchirillay [$1 riqsisqapura huk pantasqañachu] mana kanmanchu.",
- "feedback-bugnew": "Llanchisqañam. Musuq pantasqamanta willay",
"searchsuggest-search": "Maskay",
"searchsuggest-containing": "kaykunayuq: ...",
"api-error-badaccess-groups": "Kay wikipiqa willañiqikunata manam churkuyta atinkichu.",
@@ -2987,5 +2969,27 @@
"expand_templates_ok": "Arí niy",
"expand_templates_remove_comments": "Willapusqakunata qichuy",
"expand_templates_generate_rawhtml": "Chawa HTML-ta rikuchiy",
- "expand_templates_preview": "Ñawpaqta qhawallay"
+ "expand_templates_preview": "Ñawpaqta qhawallay",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Latin mast'arisqa",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Sananchakuna",
+ "special-characters-group-greek": "Grigu",
+ "special-characters-group-cyrillic": "Kirilitsa",
+ "special-characters-group-arabic": "Arabya",
+ "special-characters-group-arabicextended": "Arabya mast'arisqa",
+ "special-characters-group-persian": "Pharsi",
+ "special-characters-group-hebrew": "Iwriyu",
+ "special-characters-group-bangla": "Banla",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Guyarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thay",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "kuru aspi",
+ "special-characters-title-emdash": "suni aspi",
+ "special-characters-title-minus": "qichuy sanancha"
}
diff --git a/languages/i18n/qug.json b/languages/i18n/qug.json
index 6c78c095..22560263 100644
--- a/languages/i18n/qug.json
+++ b/languages/i18n/qug.json
@@ -378,7 +378,6 @@
"search-interwiki-more": "(ashtawan)",
"searchrelated": "tinkishka",
"searchall": "tukuy",
- "showingresultsheader": "{{PLURAL:$5|Maskashka panka: '''$1''', '''$3'''-manta|Maskashka pankakuna: '''$1 - $2''', '''$3'''-manta}}, '''$4''' maskashpaka",
"search-nonefound": "Kikinka maskashka rimaykunaka mana tiyanchu.",
"powersearch-legend": "Ashtawan alli maskana",
"powersearch-ns": "Chay shutipak kitikunapi maskana :",
@@ -460,7 +459,6 @@
"pager-older-n": "{{PLURAL:$1|ashtawan ñawpak 1|ashtawan ñawpak $1}}",
"booksources": "Kamukunapi pukyukuna",
"booksources-search-legend": "Kamukunapi pukyukunata maskana",
- "booksources-go": "Rina",
"log": "Kamukuna",
"allpages": "Tukuy pankakuna",
"prevpage": "Ñawpak panka ($1)",
@@ -480,7 +478,7 @@
"watchthispage": "Kay pankata rikukuna",
"unwatch": "Ñamana rikuna",
"watchlist-details": "{{PLURAL:$1|$1 pankata|$1 pankakunata}} rikukunki (rimanakuy pankakunata mana yupakpika).",
- "wlshowlast": "$1 pachapi, $2 punchapi rurashka $3 mushuk killkaykunata rikuna",
+ "wlshowlast": "$1 pachapi, $2 punchapi rurashka mushuk killkaykunata rikuna",
"watchlist-options": "rikukushka pankakuna pankapa akllaykuna",
"watching": "Ñami chay pankata rikukukripanki...",
"unwatching": "Ñamana rikukuchishpa...",
@@ -635,7 +633,6 @@
"metadata-expand": "Uchilla willaykunata rikuchiy",
"metadata-collapse": "Uchilla willaykunata pakay",
"metadata-fields": "Kaypi killkashka rikchamanta willaykunaka wiñay paypa rikchawan rikuchishkami kanka. Shuk willaykunata pakashkami kanka. Shinapash shuk rurakka munakpika paykunaya rikunata ushanka.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "tukuy",
"namespacesall": "tukuy",
"monthsall": "tukuy",
"watchlisttools-view": "Mushuk killkaykunata rikuna",
diff --git a/languages/i18n/rgn.json b/languages/i18n/rgn.json
index 3e6c4212..6d75dedb 100644
--- a/languages/i18n/rgn.json
+++ b/languages/i18n/rgn.json
@@ -342,7 +342,6 @@
"pager-older-n": "{{PLURAL:$1|é piò vëc|i $1 piò vècc}}",
"booksources": "Va a truvè dj libar",
"booksources-search-legend": "A vut zarchè int j livar?",
- "booksources-go": "Và pu",
"log": "Regèstar",
"allpages": "Tot al pàgin",
"prevpage": "Pàgina prèma d'questa ($1)",
@@ -361,7 +360,7 @@
"watchthispage": "Ten d'öcc sta pagina",
"unwatch": "T'an stèga piò a t'nì d'öcc",
"watchlist-details": "J è, int la lèsta dal pàgin da tnì d'öcc, {{PLURAL:$1|$1 pàgina|$1 pàgin}}, senza cuntê al pàgin d'cunversaziòn.",
- "wlshowlast": "Fam avdé agl'ultum $1 ör $2 dè $3",
+ "wlshowlast": "Fam avdé agl'ultum $1 ör $2 dè",
"watchlist-options": "Scielt int la lèsta d'pàgin da tnì d'öcc",
"watching": "Mêt insèn al pàgin da t'nì d'öcc...",
"unwatching": "Scanzèla dal pàgin da t'nì d'öcc...",
@@ -514,7 +513,6 @@
"metadata-expand": "Fam avdé i particulèr",
"metadata-collapse": "Nascond i particulèr",
"metadata-fields": "I chêmp d'j metadata EXIF elenché in ste mesàg, j t' ven presenté int'la pàgina d'la figura, quènd la tabèla d'j metadata l'è ardòta znina. J ètar chèmp j srà nascost.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "tòt",
"namespacesall": "töt",
"monthsall": "tòt",
"watchlisttools-view": "Fam avdè al mudèfich impurtènti",
diff --git a/languages/i18n/rif.json b/languages/i18n/rif.json
index 98f29517..8d629e5f 100644
--- a/languages/i18n/rif.json
+++ b/languages/i18n/rif.json
@@ -348,7 +348,6 @@
"pager-newer-n": "{{PLURAL:$1|amynu 1|amynu $1}}",
"pager-older-n": "{{PLURAL:$1|aqbur 1|aqbur $1}}",
"booksources": "Ighbula n udlis",
- "booksources-go": "Uyur",
"specialloguserlabel": "Aseqdac:",
"speciallogtitlelabel": "isem:",
"log": "Aɣmis",
@@ -372,7 +371,7 @@
"watchthispage": "Ḥḍa tasna ya",
"unwatch": "Ur ḥṭṭa",
"watchlist-details": "{{PLURAL:$1|$1 n Tasniwin|$1 n Tasniwin}} Twaẓrent bla Tasniwin n usiwl.",
- "wlshowlast": "Sseml-ad $1 tisεεatin $2 ussan $3 inggura",
+ "wlshowlast": "Sseml-ad $1 tisεεatin $2 ussan inggura",
"watching": "Ḥṭṭigh...",
"unwatching": "Ur ḥṭṭigh...",
"deletepage": "Kks tasna",
@@ -528,7 +527,6 @@
"metadata-expand": "Sicen-d tilɣa nnumɣarent",
"metadata-collapse": "Snuffar tilgha innumgharn",
"metadata-fields": "Igran n EXIF metadata i yllan di tbrat a ad adfn di tasna n twlaft xmnni d-gha twḍa tflwit n metadata.\nInnḍni ad twaffrn dg umzwar.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "marra",
"namespacesall": "marra",
"monthsall": "marra",
"imgmultigo": "Raḥ ɣa!",
diff --git a/languages/i18n/rm.json b/languages/i18n/rm.json
index 4217e270..a94802cb 100644
--- a/languages/i18n/rm.json
+++ b/languages/i18n/rm.json
@@ -8,7 +8,9 @@
"Shirayuki",
"Urhixidur",
"לערי ריינהארט",
- "Davent"
+ "Davent",
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Suttastritgar colliaziuns:",
@@ -356,6 +358,8 @@
"gotaccountlink": "T'annunziar",
"userlogin-resetlink": "Emblidà tias datas per s'annunziar?",
"userlogin-resetpassword-link": "Has emblidà tes pled-clav?",
+ "userlogin-loggedin": "Ti es gia t'annunzià sco {{GENDER:$1|$1}}.\nDovra il suandant formular per t'annunziar cun in auter conto.",
+ "userlogin-createanother": "Crear in auter conto",
"createacct-emailrequired": "Adressa dad e-mail",
"createacct-emailoptional": "Adressa dad e-mail (opziunal)",
"createacct-email-ph": "Endatescha ti'adressa dad e-mail",
@@ -420,6 +424,9 @@
"loginlanguagelabel": "Lingua: $1",
"suspicious-userlogout": "Tia dumonda per partir è vegnida refusada perquai ch'i para ch'ella è vegnida tramessa d'in navigatur che funcziuna betg correctamain u d'in proxy da cache.",
"createacct-another-realname-tip": "Il num real è opziunal.\nSche ti l'inditgeschas, vegn el duvrà per attribuir las contribuziuns.",
+ "pt-login": "T'annunziar",
+ "pt-login-button": "T'annunziar",
+ "pt-createaccount": "Crear in conto d'utilisader",
"php-mail-error-unknown": "Errur nunenconuschenta en la funcziun mail() da PHP",
"user-mail-no-addy": "Empruvà da trametter in e-mail senza ina adressa dad e-mail.",
"changepassword": "Midar pled-clav",
@@ -452,7 +459,6 @@
"passwordreset-emailsent-capture": "In e-mail (sco mussà sutvart) per redefinir il pled-clav è vegnì tramess.",
"passwordreset-emailerror-capture": "In e-mail (sco mussà sutvart) per redefinir il pled-clav è vegnì generà ma n'ha betg pudì envià a l'{{GENDER:$2|utilisader|utilisadra}}: $1",
"changeemail": "Midar l'adressa dad e-mail",
- "changeemail-header": "Midar l'adressa dad e-mail dal conto",
"changeemail-text": "Cumpletescha quest formular per midar tia adressa dad e-mail. Ti stos endatar tes pled-clav per confermar questa midada.",
"changeemail-no-info": "Ti stos t'annunziar per acceder directamain questa pagina.",
"changeemail-oldemail": "Adressa dad e-mail actuala:",
@@ -460,7 +466,6 @@
"changeemail-none": "(nagina)",
"changeemail-password": "Tes pled-clav da {{SITENAME}}:",
"changeemail-submit": "Midar l'adressa dad e-mail",
- "changeemail-cancel": "Interrumper",
"bold_sample": "Text grass",
"bold_tip": "Text grass",
"italic_sample": "Text cursiv",
@@ -709,7 +714,6 @@
"mergehistory-same-destination": "Las paginas d'origin e da destinaziun na dastgan betg esser las medemas",
"mergehistory-reason": "Motiv:",
"mergelog": "Protocol da fusiuns",
- "pagemerge-logentry": "unì [[$1]] a [[$2]] (versiuns enfin $3)",
"revertmerge": "Revocar la fusiun",
"mergelogpagetext": "Sutvart è ina glista da las ultimas cronologias ch'èn vegnidas unidas cun autras.",
"history-title": "$1: Cronologia da las versiuns",
@@ -755,7 +759,6 @@
"searchrelated": "sumegliant",
"searchall": "tuts",
"showingresults": "Sutvart èn enfin {{PLURAL:$1|'''in''' resultat|'''$1''' resultats}} cumenzond cun il numer '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Resultat '''$1''' da '''$3'''|Resultats '''$1-$2''' da '''$3'''}} per '''$4'''",
"search-nonefound": "Per il term tschertgà èn nagins resultats vegnids chattads.",
"powersearch-legend": "Tschertga extendida",
"powersearch-ns": "Tschertgar en tips da pagina:",
@@ -1305,7 +1308,6 @@
"statistics": "Statisticas",
"statistics-header-pages": "Statistica da paginas",
"statistics-header-edits": "Statistica da modificaziuns",
- "statistics-header-views": "Statistica da las visitas",
"statistics-header-users": "Statisticas davart ils utilisaders",
"statistics-header-hooks": "Autras statisticas",
"statistics-articles": "Paginas da cuntegn",
@@ -1314,13 +1316,9 @@
"statistics-files": "Datotecas chargiadas si",
"statistics-edits": "Modificaziuns da paginas dapi l'installaziun da {{SITENAME}}",
"statistics-edits-average": "Media da modificaziuns per pagina",
- "statistics-views-total": "Visitas totalmain",
- "statistics-views-total-desc": "Visitas da paginas ch'existan betg u da paginas spezialas n'èn betg inclusas",
- "statistics-views-peredit": "Visitas per modificaziun",
"statistics-users": "[[Special:ListUsers|Utilisaders]] registrads",
"statistics-users-active": "Utilisaders activs",
"statistics-users-active-desc": "Utilisaders che han fatg almain ina acziun {{PLURAL:$1|l'ultim di|ils ultims $1 dis}}",
- "statistics-mostpopular": "Paginas visitadas il pli savens",
"doubleredirects": "Renviaments dubels",
"doubleredirectstext": "Questa glista mussa renviaments che mainan puspè a renviaments.\nMintga colonna cuntegna colliaziuns a l'emprim ed al segund renviaments, sco era la pagina finala dal segund renviament che è probablamain la pagina a la quala duess vegnir renvià.\nElements <del>stritgads</del> èn gia eliminads.",
"double-redirect-fixed-move": "[[$1]] è vegnì spustà.\nI renviescha uss a [[$2]].",
@@ -1353,7 +1351,6 @@
"uncategorizedtemplates": "Models betg categorisads",
"unusedcategories": "Categorias betg utilisadas",
"unusedimages": "Maletgs betg utilisads",
- "popularpages": "Paginas popularas",
"wantedcategories": "Categorias giavischadas",
"wantedpages": "Artitgels giavischads",
"wantedpages-badtitle": "Titel nunvalid en il resultat: $1",
@@ -1402,7 +1399,6 @@
"querypage-disabled": "Questa pagina speciala è deactivada ord motivs da prestaziun.",
"booksources": "Tschertga da ISBN",
"booksources-search-legend": "Tschertgar pussaivladad da cumpra per cudeschs",
- "booksources-go": "Leger",
"booksources-text": "Sutvart è ina glista da las colliaziuns ad autras paginas che vendan cudeschs novs ed utilisads e che pudessan avair dapli infurmaziuns davart ils cudeschs che ti tschertgas:",
"booksources-invalid-isbn": "Il numer ISBN na para betg dad esser valid; controllescha che ti n'has betg fatg errurs cun la scriver.",
"specialloguserlabel": "Acziun exequida da:",
@@ -1519,7 +1515,7 @@
"wlheader-enotif": "Il servetsch d'infurmaziun per e-mail è activà.",
"wlheader-showupdated": "Paginas ch'èn vegnidas modifitgadas suenter che ti has vis els la davosa giada èn mussads '''grass'''",
"wlnote": "Sutvart {{PLURAL:$1|è l'ultima midada|èn las ultimas '''$1''' midadas}} entaifer {{PLURAL:$2|l'ultima ura|las ultimas '''$2''' uras}}. Actualisà ils $3 las $4.",
- "wlshowlast": "Mussar: las ultimas $1 uras, ils ultims $2 dis u $3.",
+ "wlshowlast": "Mussar: las ultimas $1 uras, ils ultims $2 dis u .",
"watchlist-options": "Opziuns per la glista d'observaziun",
"watching": "observ...",
"unwatching": "observ betg pli...",
@@ -1566,7 +1562,6 @@
"delete-toobig": "Questa pagina ha in grond dumber da midadas (passa $1 {{PLURAL:$1|versiun|versiuns}}).\nLa funcziun da stizzar è vegnida restrenschida per talas paginas per evitar ch'il server da {{SITENAME}} vegni surchargià.",
"delete-warning-toobig": "Questa pagina ha in grond dumber da midadas (passa $1 {{PLURAL:$1|versiun|versiuns}}).\nStizzar ina tala pagina pudess surchargiar las operaziuns da la banca da datas da {{SITENAME}}.\nCuntinuescha cun precauziun.",
"rollback": "Revocar modificaziuns",
- "rollback_short": "Revocar",
"rollbacklink": "revocar",
"rollbacklinkcount": "revocar $1 {{PLURAL:$1|midada|midadas}}",
"rollbacklinkcount-morethan": "revocar dapli che $1 {{PLURAL:$1|midada|midadas}}",
@@ -1973,18 +1968,14 @@
"import-rootpage-nosubpage": "Il tip da pagina \"$1\" da la pagina principala na lubescha naginas sutpaginas.",
"importlogpage": "Protocol dals imports",
"importlogpagetext": "Import administrativ da paginas cun cronologia da modificaziuns dad autras wikis.",
- "import-logentry-upload": "ha importà [[$1]] cun chargiar si ina datoteca",
"import-logentry-upload-detail": "{{PLURAL:$1|Ina versiun|$1 versiuns}}",
- "import-logentry-interwiki": "ha importà $1 (transwiki)",
"import-logentry-interwiki-detail": "{{PLURAL:$1|Ina versiun|$1 versiuns}} da $2",
"javascripttest": "Test da JavaScript",
- "javascripttest-title": "Exequir tests da $1",
"javascripttest-pagetext-noframework": "Questa pagina è reservada per exequir tests da JavaScript.",
"javascripttest-pagetext-unknownframework": "Framework da test nunenconuschent \"$1\".",
"javascripttest-pagetext-frameworks": "Tscherna per plaschair in dals suandantas frameworks da test: $1",
"javascripttest-pagetext-skins": "Tscherna in skin che duai vegnir utilisà per ils tests:",
"javascripttest-qunit-intro": "Legia la [$1 documentaziun da tests] sin mediawiki.org.",
- "javascripttest-qunit-heading": "Collecziun da test da QUnit per JavaScript en MediaWiki",
"tooltip-pt-userpage": "Mussar tia pagina d'utilisader",
"tooltip-pt-anonuserpage": "La pagina d'utilisader per l'adressa IP cun la quala che ti fas modificaziuns",
"tooltip-pt-mytalk": "Mussar tia pagina da discussiun",
@@ -2083,7 +2074,6 @@
"pageinfo-robot-policy": "Status per maschinas da tschertgar",
"pageinfo-robot-index": "Lubì",
"pageinfo-robot-noindex": "Betg lubì",
- "pageinfo-views": "Dumber da visitas",
"pageinfo-watchers": "Dumber dad observaturs da la pagina",
"pageinfo-redirects-name": "Dumber da renviaments a questa pagina",
"pageinfo-subpages-name": "Sutpaginas da questa pagina",
@@ -2511,7 +2501,6 @@
"exif-urgency-low": "Bass ($1)",
"exif-urgency-high": "Aut ($1)",
"exif-urgency-other": "Prioritad definida da l'utilisader ($1)",
- "watchlistall2": "tut",
"namespacesall": "tuts",
"monthsall": "tuts",
"confirmemail": "Confermar l'adressa dad e-mail",
@@ -2584,7 +2573,6 @@
"watchlisttools-edit": "Mussar e modifitgar la glista d'observaziun",
"watchlisttools-raw": "Modifitgar il format da la glista (import/export)",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
- "unknown_extension_tag": "Tag d'extensiun nunenconuschent \"$1\"",
"duplicate-defaultsort": "'''Attenziun:''' La clav da zavrar da standard \"$2\" remplazza la clav da zavrar da standard veglia \"$1\".",
"version": "Versiun",
"version-extensions": "Extensiuns installadas",
@@ -2600,7 +2588,7 @@
"version-parser-function-hooks": "Hooks per funcziuns dal parser",
"version-hook-name": "Num dal hook",
"version-hook-subscribedby": "Abonnà da",
- "version-version": "(Versiun $1)",
+ "version-version": "($1)",
"version-license": "Licenza",
"version-poweredby-credits": "Questa wiki utilisescha '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "auters",
@@ -2710,19 +2698,20 @@
"logentry-rights-rights-legacy": "$1 ha {{GENDER:$2|midà}} la commembranza da gruppas per $3",
"logentry-rights-autopromote": "$1 è vegnì {{GENDER:$2|promovì|promovida}} automaticamain da $4 a $5",
"rightsnone": "(nagins)",
+ "revdelete-summary": "resumaziun da la midada",
+ "feedback-adding": "Agiuntar il resun a la pagina…",
+ "feedback-bugcheck": "Grondius! Controllescha simplamain che quai n'è betg gia in da las [$1 errurs enconuschentas].",
+ "feedback-bugnew": "Jau hai controllà. Rapportar ina nova errur.",
"feedback-bugornote": "Sche ti vuls descriver detagliadamain in problem techic, lura [$1 rapporta in bug].\nUschiglio pos ti utilisar il formular simpel sutvart. Tes commentari vegn agiuntà a la pagina \"[$3 $2]\" ensemen cun tes num d'utilisader.",
- "feedback-subject": "Object:",
- "feedback-message": "Messadi:",
"feedback-cancel": "Interrumper",
- "feedback-submit": "Trametter il resun",
- "feedback-adding": "Agiuntar il resun a la pagina…",
+ "feedback-close": "Terminà",
"feedback-error1": "Errur: Resultat nunenconuschent dal API",
"feedback-error2": "Errur: La modificaziun n'è betg reussida",
"feedback-error3": "Errur: Nagina resposta dal API",
+ "feedback-message": "Messadi:",
+ "feedback-subject": "Object:",
+ "feedback-submit": "Trametter",
"feedback-thanks": "Grazia! Tes resun è vegnì publitgà sin la pagina \"[$2 $1]\".",
- "feedback-close": "Terminà",
- "feedback-bugcheck": "Grondius! Controllescha simplamain che quai n'è betg gia in da las [$1 errurs enconuschentas].",
- "feedback-bugnew": "Jau hai controllà. Rapportar ina nova errur.",
"searchsuggest-search": "Tschertgar",
"searchsuggest-containing": "cuntegna…",
"api-error-badaccess-groups": "Ti na dastgas betg chargiar datotecas en quest wiki.",
diff --git a/languages/i18n/rmy.json b/languages/i18n/rmy.json
index 48873b64..fe972e0c 100644
--- a/languages/i18n/rmy.json
+++ b/languages/i18n/rmy.json
@@ -1,372 +1,366 @@
{
- "@metadata": {
- "authors": [
- "Desiphral",
- "לערי ריינהארט"
- ]
- },
- "underline-always": "Savaxt",
- "underline-never": "Ni ekhvar",
- "underline-default": "Browseresko standardo",
- "sunday": "purano kurko",
- "monday": "lui",
- "tuesday": "marci",
- "wednesday": "tetradī",
- "thursday": "zhoi",
- "friday": "parashtui",
- "saturday": "savato",
- "january": "pervonai",
- "february": "duitonai",
- "march": "tritonai",
- "april": "shtartonai",
- "may_long": "panjtonai",
- "june": "shovtonai",
- "july": "eftatonai",
- "august": "oxtotonai",
- "september": "enyatonai",
- "october": "deshtonai",
- "november": "deshuekhtonai",
- "december": "deshuduitonai",
- "jan": "perv",
- "feb": "dui",
- "mar": "tri",
- "apr": "shta",
- "may": "panj",
- "jun": "shov",
- "jul": "efta",
- "aug": "oxt",
- "sep": "enya",
- "oct": "desh",
- "nov": "dekh",
- "dec": "ddui",
- "subcategories": "Telekategoriye",
- "about": "Andar",
- "article": "Lekh",
- "newwindow": "(inklel aver filiyastra)",
- "cancel": "Mekh la",
- "mypage": "Miri patrin",
- "mytalk": "Mire vakyarimata",
- "navigation": "Phiripen",
- "and": "&#32;thai",
- "qbedit": "Editisar",
- "errorpagetitle": "Dosh",
- "returnto": "Ja palpale kai $1.",
- "help": "Zhutipen",
- "search": "Rod",
- "searchbutton": "Rod",
- "go": "Ja",
- "searcharticle": "Ja",
- "history": "Puraneder versiye",
- "history_short": "Puranipen",
- "printableversion": "Printisaripnaski versiya",
- "permalink": "Savaxtutno phandipen",
- "print": "Printisaripen",
- "edit": "Editisar i patrin",
- "editthispage": "Editisar i patrin",
- "delete": "Khosipen",
- "deletethispage": "Khos i patrin",
- "undelete_short": "Na mai khos le editisarimata $1",
- "protect": "Brakhipen",
- "unprotect": "Na mai brakh",
- "newpage": "Nevi patrin",
- "specialpage": "Uzalutni patrin",
- "personaltools": "Mire labne",
- "articlepage": "Dikh o lekh",
- "talk": "Vakyarimata",
- "toolbox": "Labnengo moxton",
- "userpage": "Dikh i jeneski patrin",
- "viewtalkpage": "Dikh i diskucia",
- "otherlanguages": "Avre ćhibande",
- "lastmodifiedat": "O palutno paruvipen $2, $1.",
- "viewcount": "Kadaya patrin dikhlilyas {{PLURAL:$1|one time|$1var}}.",
- "jumpto": "Ja kai:",
- "jumptonavigation": "phiripen",
- "jumptosearch": "rodipen",
- "aboutsite": "Andar {{SITENAME}}",
- "aboutpage": "Project:Andar",
- "copyright": "Ander dino tar o $1.",
- "copyrightpage": "{{ns:project}}:Autorenge xakaya (chachimata)",
- "currentevents": "Nevimata",
- "currentevents-url": "Project:Nevimata",
- "disclaimers": "Termenurya",
- "disclaimerpage": "Project:Termenurya",
- "edithelp": "Editisaripnasko zhutipen",
- "mainpage": "Sherutni patrin",
- "mainpage-description": "Sherutni patrin",
- "portal": "Maladipnasko than",
- "portal-url": "Project:Maladipnasko than",
- "privacy": "Pativyako forovipen",
- "retrievedfrom": "Lino katar \"$1\"",
- "editsection": "editisar",
- "editsectionhint": "Editisar o kotor: $1",
- "toc": "Ander",
- "showtoc": "dikh",
- "hidetoc": "garav",
- "nstab-main": "Lekh",
- "nstab-user": "Jeneski patrin",
- "nstab-media": "Mediya patrin",
- "nstab-special": "Uzalutno",
- "nstab-project": "Projekto",
- "nstab-image": "Chitro",
- "nstab-mediawiki": "Duma",
- "nstab-template": "Sikavno",
- "nstab-help": "Zhutipen",
- "nstab-category": "Shopni",
- "nospecialpagetext": "Manglyas ekh [[Special:SpecialPages|uzalutni patrin]] so na arakhel pes kai {{SITENAME}}.",
- "viewsource": "Dikh i sursa",
- "logouttext": "'''Akana san avryal i {{SITENAME}}.'''\n\nShai te labyares {{SITENAME}} sar ekh bijanglo jeno vai shai te prinjares tut palem sar o jeno le kadale navesa vai le aver navesa.",
- "yourname": "Tiro anav",
- "yourpassword": "O nakhavipnasko lav",
- "yourpasswordagain": "O nakhavipnasko lav de nevo",
- "externaldberror": "Sas ekh dosh kai datengi baza le avrutne prinjaripnyange vai nai tuke drom te akanutnisares o avrutno akonto.",
- "login": "Prinjaripen",
- "loginprompt": "Trebul te das drom le phandimatenge ''cookie'' te das andre kai {{SITENAME}}.",
- "userlogin": "Prinjaripen / Ker ek akount",
- "logout": "De avri",
- "userlogout": "De avri",
- "nologinlink": "Ker ek akount",
- "createaccount": "Ker ek nevo akount",
- "gotaccount": "Si tuke akana ekh akonto? '''$1'''.",
- "gotaccountlink": "De andre",
- "createaccountmail": "palal o e-mail",
- "badretype": "Le nakhavipnaske lava so lekhavdyan nai myazutne.",
- "loginerror": "Prinjaripnaski dosh",
- "nocookiesnew": "O tiro akont sas kerdo, pale tu nai prinjardo/i. {{SITENAME}} labyarel ''cookies'' te astarel le manusha prinjarde. O tiro browser na astarel le cookies. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var, labyarindoi o nav thai o nakhavipnaso lav.",
- "nocookieslogin": "{{SITENAME}} labyarel ''cookies'' te prinjaren le manusha so aven kathe. O tiro browser chi astarel len. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var.",
- "loginsuccesstitle": "Prinjaripen kerdo",
- "loginsuccess": "Akana san prijardo kai {{SITENAME}} sar \"$1\".",
- "wrongpassword": "O nakhavipnasko lav so thovdyan si doshalo. Mangas tuke te zumaves vi ekvar.",
- "mailmypassword": "Bichhal ma o nakhavipnasko lav e-mail-estar!",
- "passwordremindertitle": "Astaripen le tire nakhavipnaske lavesko kai {{SITENAME}}",
- "passwordremindertext": "Varekon (shai te aves tu, katar i adresa $1)\nmanglyas ek nevo nakahvipnasko lav katar {{SITENAME}}.\nO nakhavipnasko lav le jenesko \"$2\" akana si \"$3\".\nMishto si te jas kai {{SITENAME}} thai te paruves tiro lav sigo.",
- "noemail": "Nai ni ekh adresa e-mail prinjarde le jeneske \"$1\".",
- "eauthentsent": "Ekh prinjaripnasko e-mail bichhaldo kai tiri e-maileski adresa. Kashte avel tuke e-mailuya le avre jenendar trebul te prinjares tiri adresa (dikh buteder ando bichhaldo e-mail).",
- "mailerror": "Dosh kana sas bichhaldo o e-mail: $1",
- "acct_creation_throttle_hit": "Fal ame nasul, akana si tut $1 akounturya. Nashti te keres aver.",
- "emailauthenticated": "Tiro e-mail sas prinjardo kai $1.",
- "emailnotauthenticated": "Tiri e-maileski adresa <strong>nas prinjardi ji akana</strong>. Ni ekh e-mail nashti te avel tuke ji kana prinjares la.",
- "noemailprefs": "Thov ekh adresa e-mail te keren buti le kadale labne.",
- "emailconfirmlink": "Prinjar o e-mail",
- "invalidemailaddress": "Le e-maileski adresa nas lino anda kodoya ke nas lake ekh lachhi forma. Si mishto te thos ekh e-mail le lachhe formasa vai te khoses so lekhvdyas pe kodo than.",
- "accountcreated": "Akount kerdo",
- "accountcreatedtext": "Kerdo o akonto le jenesko ko $1.",
- "changepassword": "Paruv o nakhavipnasko lav",
- "oldpassword": "Purano nakahvipnasko lav",
- "newpassword": "Nevo nakhavipnasko lav:",
- "image_sample": "Misal.jpg",
- "summary": "Xarno xalyaripen:",
- "minoredit": "Kadava si ek tikno editisarimos",
- "watchthis": "Dikh kadaya patrin",
- "savearticle": "Uxtav i patrin",
- "showpreview": "Dikh sar avelas i patrin",
- "showlivepreview": "Jivutno angledikhipen",
- "showdiff": "Dikh le paruvimata",
- "whitelistedittext": "Trebul te [[Special:UserLogin|autentifikisares]] kashte editisares artikolurya.",
- "accmailtitle": "O nakhavipnasko lav bićhaldo.",
- "accmailtext": "O nakhavipnasko lav andar '$1' bićhaldo ko $2.",
- "newarticle": "(Nevo)",
- "newarticletext": "Avilyan kai ek patrin so na si.\nTe keres la, shai te shirdes (astares) te lekhaves ando telutno moxton (dikh [[{{MediaWiki:Helppage}}|zhutipnaski patrin]] te janes buteder).\nKana avilyan kathe doshatar, ja palpale.",
- "noarticletext": "Andi '''{{SITENAME}}''' nai ji akana ek lekh kadale anavesa.\n* Te shirdes (astares) te keres o lekh, ker klik '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} kathe]'''.",
- "editing": "Editisaripen $1",
- "yourtext": "Tiro teksto",
- "storedversion": "Akanutni versiya",
- "yourdiff": "Ververimata",
- "previousrevision": "← Purano paruvipen",
- "nextrevision": "Nevi paruvipen →",
- "cur": "akanutni",
- "last": "purani",
- "histlegend": "Xalyaripen: (akanutni) = ververimata mamui i akanutni versiya,\n(purani) = ververimata mamui i puraneder versiya, T = tikno editisaripen",
- "histfirst": "O mai purano",
- "histlast": "O mai nevo",
- "revdelete-submit": "Ker kadya le alosarde paruvimatenge",
- "compareselectedversions": "Dikh ververimata mashkar alosarde versiye",
- "prevn": "mai neve {{PLURAL:$1|$1}}",
- "nextn": "mai purane {{PLURAL:$1|$1}}",
- "viewprevnext": "Dikh ($1 {{int:pipe-separator}} $2) ($3).",
- "showingresults": "Tele si <b>$1</b> rezultaturya shirdindoi le ginestar <b>$2</b>.",
- "showingresultsnum": "Tele si <b>$3</b> rezultaturya shirdindoi le ginestar <b>$2</b>.",
- "preferences": "Kamimata",
- "prefs-skin": "Dikhimos",
- "datedefault": "Ni ekh kamipen",
- "prefs-datetime": "Dives thai chaso",
- "prefs-rc": "Neve paruvimata",
- "saveprefs": "Uxtav le kamimata",
- "columns": "Uche vortorina:",
- "localtime": "Thanutno vaxt",
- "guesstimezone": "Le les katar o browser",
- "allowemail": "De drom te aven e-mailurya katar aver jene",
- "defaultns": "Rod savaxt vi kai kadale riga:",
- "default": "acharuno",
- "prefs-files": "Failurya",
- "youremail": "Emailesko adress (kana kames)*",
- "yourrealname": "Tiro chacho anav*",
- "yourlanguage": "Ćhib:",
- "yournick": "I xarni versyunya, le semnaturenge",
- "badsig": "Bilachhi semnatura; dikh le tagurya HTML.",
- "editinguser": "Editisaripen '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
- "group": "Grupo:",
- "group-bot": "Boturya",
- "group-sysop": "Administratorurya",
- "group-bureaucrat": "Birokraturya:",
- "group-all": "(sa)",
- "group-sysop-member": "Administratoro",
- "group-bureaucrat-member": "Birokrato",
- "grouppage-bot": "{{ns:project}}:Boturya",
- "grouppage-sysop": "{{ns:project}}:Administratorurya",
- "grouppage-bureaucrat": "{{ns:project}}:Birokraturya",
- "recentchanges": "Neve paruvimata",
- "recentchanges-summary": "Andi kadaya patrin shai te dikhes le neve paruvimata andi romani {{SITENAME}}.",
- "rcnotefrom": "Tele si le averutnimata katar '''$2''' (inklen '''$1''' averutnimata, shai te paruves o gin alosarindoi aver tele).",
- "rclistfrom": "Dikh le paruvimata ji kai $1",
- "rcshowhideminor": "$1 tikne editisaripena",
- "rcshowhidebots": "$1 (ro)boturya",
- "rcshowhideliu": "$1 prinjarde jene",
- "rcshowhideanons": "$1 bijangle jene",
- "rcshowhidepatr": "$1 dikhle paruvimata",
- "rcshowhidemine": "$1 mire editisaripena",
- "rclinks": "Dikh le palutne $1 paruvimata andar le palutne $2 divesa.<br />$3",
- "diff": "ververipen",
- "hist": "puranipen",
- "hide": "garav",
- "show": "dikh",
- "minoreditletter": "t",
- "number_of_watching_users_pageview": "[$1 jeno/e kon len vurma e patrinyaki]",
- "rc_categories": "Numa le shopnya (rigyarde katar \"|\")",
- "rc_categories_any": "Savegodi",
- "recentchangeslinked": "Pashvipnaske paruvimata",
- "recentchangeslinked-feed": "Pashvipnaske paruvimata",
- "recentchangeslinked-toolbox": "Pashvipnaske paruvimata",
- "upload": "Bichhal file",
- "uploadbtn": "Bichhal file",
- "filedesc": "Xarno xalyaripen",
- "badfilename": "O chitrosko anav sas paruvdo; o nevo anav si \"$1\".",
- "savefile": "Uxtav file",
- "listfiles": "Patrinipen le chitrengo",
- "file-anchor-link": "Chitro",
- "imagelinks": "Chitroske phandimata",
- "unusedtemplates": "Bilabyarde sikavne",
- "unusedtemplateswlh": "aver phandimata",
- "randompage": "Ekh patrin savigodi",
- "statistics": "Beshimata",
- "wantedpages": "Kamle pajine",
- "shortpages": "Xarne patrya",
- "deadendpages": "Biphandimatenge patrya",
- "listusers": "Jenengo patrinipen",
- "newpages": "Neve patrya",
- "ancientpages": "E puraneder lekha",
- "move": "Ingerdipen",
- "allpages": "Savore patrya",
- "nextpage": "Anglutni patrin ($1)",
- "allarticles": "Sa le artikolurya",
- "allpagessubmit": "Ja",
- "emailuser": "Bichhal les/la e-mail",
- "emailfrom": "Katar",
- "emailto": "Karing",
- "emailsend": "Bichhal",
- "watchlist": "Dikhipnaske lekha",
- "mywatchlist": "Dikhipnaske lekha",
- "addedwatchtext": "I patrin \"[[:$1]]\" sas thovdi andi tiri lista [[Special:Watchlist|le artikolengi so dikhes len]].\nLe neve paruvimata andar kadale patrya thai andar lenge vakyarimatenge patrya thona kathe, vi dikhena pen le <b>thule semnurenca</b> andi patrin le [[Special:RecentChanges|neve paruvimatenge]].\n\nKana kamesa te khoses kadaya patrin andar tiri lista le patryange so arakhes len ker click kai \"Na mai arakh\" (opre, kana i patrin dikhel pes).",
- "removedwatchtext": "I patrin \"[[:$1]]\" sas khosli katar o patrinipen le dikhipnaske lekhenca (artikolurya).",
- "watch": "Dikh la",
- "unwatch": "Na mai dikh",
- "unwatchthispage": "Na mai dikh",
- "enotif_reset": "Thov semno kai patrya so dikhlem",
- "deletepage": "Khos i patrin",
- "confirm": "Ja",
- "excontent": "o ander sas: '$1'",
- "excontentauthor": "o ander sas: '$1' (thai o korkoro butyarno sas '$2')",
- "exblank": "i patrin sas chuchi",
- "historywarning": "Dikh! La patrya so kames to khoses la si la puranipen:",
- "actioncomplete": "Agorisardi buti",
- "deletedtext": "\"$1\" sas khosli.\nDikh ando $2 ek patrinipen le palutne butyange khosle.",
- "rollback_short": "Palemavilipen",
- "rollbacklink": "palemavilipen",
- "rollbackfailed": "O palemavilipen nashtisardyas te kerel pes.",
- "prot_1movedto2": "[[$1]] bichhaldo kai [[$2]]",
- "undelete": "Dikh le khosle patrya",
- "undeletebtn": "Le palpale",
- "namespace": "Rig:",
- "invert": "Bi rigyako:",
- "contributions": "Jeneske butya",
- "mycontris": "Mire butya",
- "contribsub2": "Katar $1 ($2)",
- "uctop": "(opre)",
- "whatlinkshere": "So phandel pes kathe",
- "nolinkshere": "Ni ek patrin phandel pes (avel) kathe.",
- "blockip": "De avri jenes/IP",
- "ipbsubmit": "De avri kadava jenes",
- "ipusubmit": "Na mai brakh i adresa",
- "contribslink": "butya",
- "lockbtn": "Brakh i database",
- "unlockbtn": "Na mai brakh i database",
- "movearticle": "Inger i patrin",
- "movepagebtn": "Inger i patrin",
- "pagemovedsub": "I patrin sas bićhaldi.",
- "delete_and_move": "Khos thai inger",
- "export-submit": "Bichhal avri",
- "allmessages": "Sistemoske duma",
- "allmessagesname": "Anav",
- "import-interwiki-submit": "Le andre",
- "tooltip-pt-userpage": "Miri labyarneski pajina",
- "tooltip-pt-anonuserpage": "Miri labyarneski pajina ki akanutni IP adress",
- "tooltip-pt-mytalk": "Miri diskuciyaki pajina",
- "tooltip-pt-anontalk": "Diskucie le editisarimatenge ki akanutni IP adress",
- "tooltip-pt-preferences": "Sar kamav te dikhel pes miri pajina",
- "tooltip-pt-watchlist": "I lista le pajinenge so dikhav lendar (monitorizav).",
- "tooltip-pt-mycontris": "Le mire editisarimata",
- "tooltip-pt-login": "Mishto si te identifikares tut, pale na si musai.",
- "tooltip-pt-logout": "Kathe aćhaves i sesiyunya",
- "tooltip-ca-talk": "Diskuciya le artikoleske",
- "tooltip-ca-edit": "Shai te editisares kadaya pajina. Mangas te paledikhes o teksto anglal te uxtaves les.",
- "tooltip-ca-addsection": "Kathe shai te thos ek komentaryo ki kadaya diskuciya.",
- "tooltip-ca-viewsource": "Kadaya pajina si brakhli. Shai numa te dikhes o source-code.",
- "tooltip-ca-history": "Purane versiune le dokumenteske.",
- "tooltip-ca-protect": "Brakh kadava dokumento.",
- "tooltip-ca-delete": "Khos kadava dokumento.",
- "tooltip-ca-undelete": "Palemthav le editisarimata kerdine le kadale dokumenteske sar sas anglal lesko khosipen.",
- "tooltip-ca-move": "Trade kadava dokumento.",
- "tooltip-ca-watch": "Thav kadava dokumento andi monitorizaripnaski lista.",
- "tooltip-ca-unwatch": "Khos kadava dokumento andar i monitorizaripnaski lista.",
- "tooltip-search": "Rod andi kadaya Wiki",
- "tooltip-p-logo": "I sherutni pajina",
- "tooltip-n-mainpage": "Dikh i sherutni pajina",
- "tooltip-n-portal": "O proyekto, so shai te keres, kai arakhes solucie.",
- "tooltip-n-currentevents": "Arakh janglimata le akanutne evenimenturenge",
- "tooltip-n-recentchanges": "I lista le neve paruvimatenge kerdini andi kadaya wiki.",
- "tooltip-n-randompage": "Ja ki ek aleatori pajina",
- "tooltip-n-help": "O than kai arakhes zhutipen.",
- "tooltip-t-whatlinkshere": "I lista sa le wiki pajinenge so aven (si phande) vi kathe",
- "tooltip-t-recentchangeslinked": "Neve paruvimata andi kadaya pajina",
- "tooltip-feed-rss": "Kathe te pravares o RSS flukso le kadale pajinyako",
- "tooltip-feed-atom": "Kathe te pravares o Atom flukso le kadale pajinyako",
- "tooltip-t-contributions": "Dikh i lista le editisarimatenge le kadale labyaresko",
- "tooltip-t-emailuser": "Bićhal ek emailo le kadale labyareske",
- "tooltip-t-upload": "Bićhal imajine vai media files",
- "tooltip-t-specialpages": "I lista sa le spechiale pajinengi",
- "tooltip-ca-nstab-main": "Dikh o artikolo",
- "tooltip-ca-nstab-user": "Dikh i labyarengi pajina",
- "tooltip-ca-nstab-media": "Dikh i pajina media",
- "tooltip-ca-nstab-special": "Kadaya si ek spechiali pajina, nashti te editisares la.",
- "tooltip-ca-nstab-project": "Dikh i pajina le proyekteski",
- "tooltip-ca-nstab-image": "Dikh i imajinyaki pajina",
- "tooltip-ca-nstab-mediawiki": "Dikh o mesajo le sistemesko",
- "tooltip-ca-nstab-template": "Dikh o formato",
- "tooltip-ca-nstab-help": "Dikh i zhutipnaski pajina",
- "tooltip-ca-nstab-category": "Dikh i kategoriya",
- "anonymous": "Bijangle labyarne kai {{SITENAME}}",
- "siteuser": "Jeno kai {{SITENAME}} $1",
- "lastmodifiedatby": "Kadaya patrin sas paruvdi agoreste $2, $1 katar $3.",
- "others": "aver",
- "siteusers": "Jeno/e kai {{SITENAME}} $1",
- "deletedrevision": "Khoslo o purano paruvipen $1",
- "previousdiff": "← Purano ververipen",
- "nextdiff": "Anglutno paruvipen →",
- "showhidebots": "($1 boturya)",
- "ilsubmit": "Rod",
- "watchlistall2": "savore",
- "namespacesall": "savore",
- "deletedwhileediting": "Dikh: Kadaya patrin sas khosli de kana shirdyas (astardyas) te editisares la!",
- "confirm_purge_button": "Va",
- "version": "Versiya",
- "specialpages": "Uzalutne patrya"
+ "@metadata": {
+ "authors": [
+ "Desiphral",
+ "לערי ריינהארט",
+ "아라"
+ ]
+ },
+ "underline-always": "Savaxt",
+ "underline-never": "Ni ekhvar",
+ "underline-default": "Browseresko standardo",
+ "sunday": "purano kurko",
+ "monday": "lui",
+ "tuesday": "marci",
+ "wednesday": "tetradī",
+ "thursday": "zhoi",
+ "friday": "parashtui",
+ "saturday": "savato",
+ "january": "pervonai",
+ "february": "duitonai",
+ "march": "tritonai",
+ "april": "shtartonai",
+ "may_long": "panjtonai",
+ "june": "shovtonai",
+ "july": "eftatonai",
+ "august": "oxtotonai",
+ "september": "enyatonai",
+ "october": "deshtonai",
+ "november": "deshuekhtonai",
+ "december": "deshuduitonai",
+ "jan": "perv",
+ "feb": "dui",
+ "mar": "tri",
+ "apr": "shta",
+ "may": "panj",
+ "jun": "shov",
+ "jul": "efta",
+ "aug": "oxt",
+ "sep": "enya",
+ "oct": "desh",
+ "nov": "dekh",
+ "dec": "ddui",
+ "subcategories": "Telekategoriye",
+ "about": "Andar",
+ "article": "Lekh",
+ "newwindow": "(inklel aver filiyastra)",
+ "cancel": "Mekh la",
+ "mypage": "Miri patrin",
+ "mytalk": "Mire vakyarimata",
+ "navigation": "Phiripen",
+ "and": "&#32;thai",
+ "qbedit": "Editisar",
+ "errorpagetitle": "Dosh",
+ "returnto": "Ja palpale kai $1.",
+ "help": "Zhutipen",
+ "search": "Rod",
+ "searchbutton": "Rod",
+ "go": "Ja",
+ "searcharticle": "Ja",
+ "history": "Puraneder versiye",
+ "history_short": "Puranipen",
+ "printableversion": "Printisaripnaski versiya",
+ "permalink": "Savaxtutno phandipen",
+ "print": "Printisaripen",
+ "edit": "Editisar i patrin",
+ "editthispage": "Editisar i patrin",
+ "delete": "Khosipen",
+ "deletethispage": "Khos i patrin",
+ "undelete_short": "Na mai khos le editisarimata $1",
+ "protect": "Brakhipen",
+ "unprotect": "Na mai brakh",
+ "newpage": "Nevi patrin",
+ "specialpage": "Uzalutni patrin",
+ "personaltools": "Mire labne",
+ "articlepage": "Dikh o lekh",
+ "talk": "Vakyarimata",
+ "toolbox": "Labnengo moxton",
+ "userpage": "Dikh i jeneski patrin",
+ "viewtalkpage": "Dikh i diskucia",
+ "otherlanguages": "Avre ćhibande",
+ "lastmodifiedat": "O palutno paruvipen $2, $1.",
+ "viewcount": "Kadaya patrin dikhlilyas {{PLURAL:$1|one time|$1var}}.",
+ "jumpto": "Ja kai:",
+ "jumptonavigation": "phiripen",
+ "jumptosearch": "rodipen",
+ "aboutsite": "Andar {{SITENAME}}",
+ "aboutpage": "Project:Andar",
+ "copyright": "Ander dino tar o $1.",
+ "copyrightpage": "{{ns:project}}:Autorenge xakaya (chachimata)",
+ "currentevents": "Nevimata",
+ "currentevents-url": "Project:Nevimata",
+ "disclaimers": "Termenurya",
+ "disclaimerpage": "Project:Termenurya",
+ "edithelp": "Editisaripnasko zhutipen",
+ "mainpage": "Sherutni patrin",
+ "mainpage-description": "Sherutni patrin",
+ "portal": "Maladipnasko than",
+ "portal-url": "Project:Maladipnasko than",
+ "privacy": "Pativyako forovipen",
+ "retrievedfrom": "Lino katar \"$1\"",
+ "editsection": "editisar",
+ "editsectionhint": "Editisar o kotor: $1",
+ "toc": "Ander",
+ "showtoc": "dikh",
+ "hidetoc": "garav",
+ "nstab-main": "Lekh",
+ "nstab-user": "Jeneski patrin",
+ "nstab-media": "Mediya patrin",
+ "nstab-special": "Uzalutno",
+ "nstab-project": "Projekto",
+ "nstab-image": "Chitro",
+ "nstab-mediawiki": "Duma",
+ "nstab-template": "Sikavno",
+ "nstab-help": "Zhutipen",
+ "nstab-category": "Shopni",
+ "nospecialpagetext": "Manglyas ekh [[Special:SpecialPages|uzalutni patrin]] so na arakhel pes kai {{SITENAME}}.",
+ "viewsource": "Dikh i sursa",
+ "logouttext": "'''Akana san avryal i {{SITENAME}}.'''\n\nShai te labyares {{SITENAME}} sar ekh bijanglo jeno vai shai te prinjares tut palem sar o jeno le kadale navesa vai le aver navesa.",
+ "yourname": "Tiro anav",
+ "yourpassword": "O nakhavipnasko lav",
+ "yourpasswordagain": "O nakhavipnasko lav de nevo",
+ "externaldberror": "Sas ekh dosh kai datengi baza le avrutne prinjaripnyange vai nai tuke drom te akanutnisares o avrutno akonto.",
+ "login": "Prinjaripen",
+ "userlogin": "Prinjaripen / Ker ek akount",
+ "logout": "De avri",
+ "userlogout": "De avri",
+ "nologinlink": "Ker ek akount",
+ "createaccount": "Ker ek nevo akount",
+ "gotaccount": "Si tuke akana ekh akonto? '''$1'''.",
+ "gotaccountlink": "De andre",
+ "createaccountmail": "palal o e-mail",
+ "badretype": "Le nakhavipnaske lava so lekhavdyan nai myazutne.",
+ "loginerror": "Prinjaripnaski dosh",
+ "nocookiesnew": "O tiro akont sas kerdo, pale tu nai prinjardo/i. {{SITENAME}} labyarel ''cookies'' te astarel le manusha prinjarde. O tiro browser na astarel le cookies. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var, labyarindoi o nav thai o nakhavipnaso lav.",
+ "nocookieslogin": "{{SITENAME}} labyarel ''cookies'' te prinjaren le manusha so aven kathe. O tiro browser chi astarel len. Si mishto te das les drom te astarel le ''cookies'' thai, palal kodya, te zumaves vi ekh var.",
+ "loginsuccesstitle": "Prinjaripen kerdo",
+ "loginsuccess": "Akana san prijardo kai {{SITENAME}} sar \"$1\".",
+ "wrongpassword": "O nakhavipnasko lav so thovdyan si doshalo. Mangas tuke te zumaves vi ekvar.",
+ "mailmypassword": "Bichhal ma o nakhavipnasko lav e-mail-estar!",
+ "passwordremindertitle": "Astaripen le tire nakhavipnaske lavesko kai {{SITENAME}}",
+ "passwordremindertext": "Varekon (shai te aves tu, katar i adresa $1)\nmanglyas ek nevo nakahvipnasko lav katar {{SITENAME}}.\nO nakhavipnasko lav le jenesko \"$2\" akana si \"$3\".\nMishto si te jas kai {{SITENAME}} thai te paruves tiro lav sigo.",
+ "noemail": "Nai ni ekh adresa e-mail prinjarde le jeneske \"$1\".",
+ "eauthentsent": "Ekh prinjaripnasko e-mail bichhaldo kai tiri e-maileski adresa. Kashte avel tuke e-mailuya le avre jenendar trebul te prinjares tiri adresa (dikh buteder ando bichhaldo e-mail).",
+ "mailerror": "Dosh kana sas bichhaldo o e-mail: $1",
+ "acct_creation_throttle_hit": "Fal ame nasul, akana si tut $1 akounturya. Nashti te keres aver.",
+ "emailauthenticated": "Tiro e-mail sas prinjardo kai $1.",
+ "emailnotauthenticated": "Tiri e-maileski adresa <strong>nas prinjardi ji akana</strong>. Ni ekh e-mail nashti te avel tuke ji kana prinjares la.",
+ "noemailprefs": "Thov ekh adresa e-mail te keren buti le kadale labne.",
+ "emailconfirmlink": "Prinjar o e-mail",
+ "invalidemailaddress": "Le e-maileski adresa nas lino anda kodoya ke nas lake ekh lachhi forma. Si mishto te thos ekh e-mail le lachhe formasa vai te khoses so lekhvdyas pe kodo than.",
+ "accountcreated": "Akount kerdo",
+ "accountcreatedtext": "Kerdo o akonto le jenesko ko $1.",
+ "changepassword": "Paruv o nakhavipnasko lav",
+ "oldpassword": "Purano nakahvipnasko lav",
+ "newpassword": "Nevo nakhavipnasko lav:",
+ "image_sample": "Misal.jpg",
+ "summary": "Xarno xalyaripen:",
+ "minoredit": "Kadava si ek tikno editisarimos",
+ "watchthis": "Dikh kadaya patrin",
+ "savearticle": "Uxtav i patrin",
+ "showpreview": "Dikh sar avelas i patrin",
+ "showdiff": "Dikh le paruvimata",
+ "whitelistedittext": "Trebul te [[Special:UserLogin|autentifikisares]] kashte editisares artikolurya.",
+ "accmailtitle": "O nakhavipnasko lav bićhaldo.",
+ "accmailtext": "O nakhavipnasko lav andar '$1' bićhaldo ko $2.",
+ "newarticle": "(Nevo)",
+ "newarticletext": "Avilyan kai ek patrin so na si.\nTe keres la, shai te shirdes (astares) te lekhaves ando telutno moxton (dikh [$1 zhutipnaski patrin] te janes buteder).\nKana avilyan kathe doshatar, ja palpale.",
+ "noarticletext": "Andi '''{{SITENAME}}''' nai ji akana ek lekh kadale anavesa.\n* Te shirdes (astares) te keres o lekh, ker klik '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} kathe]'''.",
+ "editing": "Editisaripen $1",
+ "yourtext": "Tiro teksto",
+ "storedversion": "Akanutni versiya",
+ "yourdiff": "Ververimata",
+ "previousrevision": "← Purano paruvipen",
+ "nextrevision": "Nevi paruvipen →",
+ "cur": "akanutni",
+ "last": "purani",
+ "histlegend": "Xalyaripen: (akanutni) = ververimata mamui i akanutni versiya,\n(purani) = ververimata mamui i puraneder versiya, T = tikno editisaripen",
+ "histfirst": "O mai purano",
+ "histlast": "O mai nevo",
+ "revdelete-submit": "Ker kadya le alosarde paruvimatenge",
+ "compareselectedversions": "Dikh ververimata mashkar alosarde versiye",
+ "prevn": "mai neve {{PLURAL:$1|$1}}",
+ "nextn": "mai purane {{PLURAL:$1|$1}}",
+ "viewprevnext": "Dikh ($1 {{int:pipe-separator}} $2) ($3).",
+ "showingresults": "Tele si <b>$1</b> rezultaturya shirdindoi le ginestar <b>$2</b>.",
+ "preferences": "Kamimata",
+ "prefs-skin": "Dikhimos",
+ "datedefault": "Ni ekh kamipen",
+ "prefs-rc": "Neve paruvimata",
+ "saveprefs": "Uxtav le kamimata",
+ "columns": "Uche vortorina:",
+ "localtime": "Thanutno vaxt",
+ "guesstimezone": "Le les katar o browser",
+ "allowemail": "De drom te aven e-mailurya katar aver jene",
+ "default": "acharuno",
+ "prefs-files": "Failurya",
+ "youremail": "Emailesko adress (kana kames)*",
+ "yourrealname": "Tiro chacho anav*",
+ "yourlanguage": "Ćhib:",
+ "yournick": "I xarni versyunya, le semnaturenge",
+ "badsig": "Bilachhi semnatura; dikh le tagurya HTML.",
+ "editinguser": "Editisaripen '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+ "group": "Grupo:",
+ "group-bot": "Boturya",
+ "group-sysop": "Administratorurya",
+ "group-bureaucrat": "Birokraturya:",
+ "group-all": "(sa)",
+ "group-sysop-member": "Administratoro",
+ "group-bureaucrat-member": "Birokrato",
+ "grouppage-bot": "{{ns:project}}:Boturya",
+ "grouppage-sysop": "{{ns:project}}:Administratorurya",
+ "grouppage-bureaucrat": "{{ns:project}}:Birokraturya",
+ "recentchanges": "Neve paruvimata",
+ "recentchanges-summary": "Andi kadaya patrin shai te dikhes le neve paruvimata andi romani {{SITENAME}}.",
+ "rcnotefrom": "Tele si le averutnimata katar '''$2''' (inklen '''$1''' averutnimata, shai te paruves o gin alosarindoi aver tele).",
+ "rclistfrom": "Dikh le paruvimata ji kai $3 $2",
+ "rcshowhideminor": "$1 tikne editisaripena",
+ "rcshowhidebots": "$1 (ro)boturya",
+ "rcshowhideliu": "$1 prinjarde jene",
+ "rcshowhideanons": "$1 bijangle jene",
+ "rcshowhidepatr": "$1 dikhle paruvimata",
+ "rcshowhidemine": "$1 mire editisaripena",
+ "rclinks": "Dikh le palutne $1 paruvimata andar le palutne $2 divesa.<br />$3",
+ "diff": "ververipen",
+ "hist": "puranipen",
+ "hide": "garav",
+ "show": "dikh",
+ "minoreditletter": "t",
+ "number_of_watching_users_pageview": "[$1 jeno/e kon len vurma e patrinyaki]",
+ "rc_categories": "Numa le shopnya (rigyarde katar \"|\")",
+ "rc_categories_any": "Savegodi",
+ "recentchangeslinked": "Pashvipnaske paruvimata",
+ "recentchangeslinked-feed": "Pashvipnaske paruvimata",
+ "recentchangeslinked-toolbox": "Pashvipnaske paruvimata",
+ "upload": "Bichhal file",
+ "uploadbtn": "Bichhal file",
+ "filedesc": "Xarno xalyaripen",
+ "badfilename": "O chitrosko anav sas paruvdo; o nevo anav si \"$1\".",
+ "savefile": "Uxtav file",
+ "listfiles": "Patrinipen le chitrengo",
+ "file-anchor-link": "Chitro",
+ "imagelinks": "Chitroske phandimata",
+ "unusedtemplates": "Bilabyarde sikavne",
+ "unusedtemplateswlh": "aver phandimata",
+ "randompage": "Ekh patrin savigodi",
+ "statistics": "Beshimata",
+ "wantedpages": "Kamle pajine",
+ "shortpages": "Xarne patrya",
+ "deadendpages": "Biphandimatenge patrya",
+ "listusers": "Jenengo patrinipen",
+ "newpages": "Neve patrya",
+ "ancientpages": "E puraneder lekha",
+ "move": "Ingerdipen",
+ "allpages": "Savore patrya",
+ "nextpage": "Anglutni patrin ($1)",
+ "allarticles": "Sa le artikolurya",
+ "allpagessubmit": "Ja",
+ "emailuser": "Bichhal les/la e-mail",
+ "emailfrom": "Katar",
+ "emailto": "Karing",
+ "emailsend": "Bichhal",
+ "watchlist": "Dikhipnaske lekha",
+ "mywatchlist": "Dikhipnaske lekha",
+ "addedwatchtext": "I patrin \"[[:$1]]\" sas thovdi andi tiri lista [[Special:Watchlist|le artikolengi so dikhes len]].\nLe neve paruvimata andar kadale patrya thai andar lenge vakyarimatenge patrya thona kathe, vi dikhena pen le <b>thule semnurenca</b> andi patrin le [[Special:RecentChanges|neve paruvimatenge]].\n\nKana kamesa te khoses kadaya patrin andar tiri lista le patryange so arakhes len ker click kai \"Na mai arakh\" (opre, kana i patrin dikhel pes).",
+ "removedwatchtext": "I patrin \"[[:$1]]\" sas khosli katar o patrinipen le dikhipnaske lekhenca (artikolurya).",
+ "watch": "Dikh la",
+ "unwatch": "Na mai dikh",
+ "unwatchthispage": "Na mai dikh",
+ "wlnote": "Tele si le palutne $1 paruvimata ande palutne <b>$2</b> ore.",
+ "enotif_reset": "Thov semno kai patrya so dikhlem",
+ "deletepage": "Khos i patrin",
+ "confirm": "Ja",
+ "excontent": "o ander sas: '$1'",
+ "excontentauthor": "o ander sas: '$1' (thai o korkoro butyarno sas '$2')",
+ "historywarning": "Dikh! La patrya so kames to khoses la si la puranipen:",
+ "actioncomplete": "Agorisardi buti",
+ "deletedtext": "\"$1\" sas khosli.\nDikh ando $2 ek patrinipen le palutne butyange khosle.",
+ "rollback_short": "Palemavilipen",
+ "rollbacklink": "palemavilipen",
+ "rollbackfailed": "O palemavilipen nashtisardyas te kerel pes.",
+ "prot_1movedto2": "[[$1]] bichhaldo kai [[$2]]",
+ "undelete": "Dikh le khosle patrya",
+ "undeletebtn": "Le palpale",
+ "namespace": "Rig:",
+ "invert": "Bi rigyako:",
+ "contributions": "Jeneske butya",
+ "mycontris": "Mire butya",
+ "contribsub2": "Katar $1 ($2)",
+ "uctop": "(opre)",
+ "whatlinkshere": "So phandel pes kathe",
+ "nolinkshere": "Ni ek patrin phandel pes (avel) kathe.",
+ "blockip": "De avri jenes/IP",
+ "ipbsubmit": "De avri kadava jenes",
+ "ipusubmit": "Na mai brakh i adresa",
+ "contribslink": "butya",
+ "lockbtn": "Brakh i database",
+ "unlockbtn": "Na mai brakh i database",
+ "movearticle": "Inger i patrin",
+ "movepagebtn": "Inger i patrin",
+ "pagemovedsub": "I patrin sas bićhaldi.",
+ "delete_and_move": "Khos thai inger",
+ "export-submit": "Bichhal avri",
+ "allmessages": "Sistemoske duma",
+ "allmessagesname": "Anav",
+ "import-interwiki-submit": "Le andre",
+ "tooltip-pt-userpage": "Miri labyarneski pajina",
+ "tooltip-pt-anonuserpage": "Miri labyarneski pajina ki akanutni IP adress",
+ "tooltip-pt-mytalk": "Miri diskuciyaki pajina",
+ "tooltip-pt-anontalk": "Diskucie le editisarimatenge ki akanutni IP adress",
+ "tooltip-pt-preferences": "Sar kamav te dikhel pes miri pajina",
+ "tooltip-pt-watchlist": "I lista le pajinenge so dikhav lendar (monitorizav).",
+ "tooltip-pt-mycontris": "Le mire editisarimata",
+ "tooltip-pt-login": "Mishto si te identifikares tut, pale na si musai.",
+ "tooltip-pt-logout": "Kathe aćhaves i sesiyunya",
+ "tooltip-ca-talk": "Diskuciya le artikoleske",
+ "tooltip-ca-edit": "Shai te editisares kadaya pajina. Mangas te paledikhes o teksto anglal te uxtaves les.",
+ "tooltip-ca-addsection": "Kathe shai te thos ek komentaryo ki kadaya diskuciya.",
+ "tooltip-ca-viewsource": "Kadaya pajina si brakhli. Shai numa te dikhes o source-code.",
+ "tooltip-ca-history": "Purane versiune le dokumenteske.",
+ "tooltip-ca-protect": "Brakh kadava dokumento.",
+ "tooltip-ca-delete": "Khos kadava dokumento.",
+ "tooltip-ca-undelete": "Palemthav le editisarimata kerdine le kadale dokumenteske sar sas anglal lesko khosipen.",
+ "tooltip-ca-move": "Trade kadava dokumento.",
+ "tooltip-ca-watch": "Thav kadava dokumento andi monitorizaripnaski lista.",
+ "tooltip-ca-unwatch": "Khos kadava dokumento andar i monitorizaripnaski lista.",
+ "tooltip-search": "Rod andi kadaya Wiki",
+ "tooltip-p-logo": "I sherutni pajina",
+ "tooltip-n-mainpage": "Dikh i sherutni pajina",
+ "tooltip-n-portal": "O proyekto, so shai te keres, kai arakhes solucie.",
+ "tooltip-n-currentevents": "Arakh janglimata le akanutne evenimenturenge",
+ "tooltip-n-recentchanges": "I lista le neve paruvimatenge kerdini andi kadaya wiki.",
+ "tooltip-n-randompage": "Ja ki ek aleatori pajina",
+ "tooltip-n-help": "O than kai arakhes zhutipen.",
+ "tooltip-t-whatlinkshere": "I lista sa le wiki pajinenge so aven (si phande) vi kathe",
+ "tooltip-t-recentchangeslinked": "Neve paruvimata andi kadaya pajina",
+ "tooltip-feed-rss": "Kathe te pravares o RSS flukso le kadale pajinyako",
+ "tooltip-feed-atom": "Kathe te pravares o Atom flukso le kadale pajinyako",
+ "tooltip-t-contributions": "Dikh i lista le editisarimatenge le kadale labyaresko",
+ "tooltip-t-emailuser": "Bićhal ek emailo le kadale labyareske",
+ "tooltip-t-upload": "Bićhal imajine vai media files",
+ "tooltip-t-specialpages": "I lista sa le spechiale pajinengi",
+ "tooltip-ca-nstab-main": "Dikh o artikolo",
+ "tooltip-ca-nstab-user": "Dikh i labyarengi pajina",
+ "tooltip-ca-nstab-media": "Dikh i pajina media",
+ "tooltip-ca-nstab-special": "Kadaya si ek spechiali pajina, nashti te editisares la.",
+ "tooltip-ca-nstab-project": "Dikh i pajina le proyekteski",
+ "tooltip-ca-nstab-image": "Dikh i imajinyaki pajina",
+ "tooltip-ca-nstab-mediawiki": "Dikh o mesajo le sistemesko",
+ "tooltip-ca-nstab-template": "Dikh o formato",
+ "tooltip-ca-nstab-help": "Dikh i zhutipnaski pajina",
+ "tooltip-ca-nstab-category": "Dikh i kategoriya",
+ "anonymous": "Bijangle labyarne kai {{SITENAME}}",
+ "siteuser": "Jeno kai {{SITENAME}} $1",
+ "lastmodifiedatby": "Kadaya patrin sas paruvdi agoreste $2, $1 katar $3.",
+ "others": "aver",
+ "siteusers": "Jeno/e kai {{SITENAME}} $1",
+ "deletedrevision": "Khoslo o purano paruvipen $1",
+ "previousdiff": "← Purano ververipen",
+ "nextdiff": "Anglutno paruvipen →",
+ "ilsubmit": "Rod",
+ "namespacesall": "savore",
+ "deletedwhileediting": "Dikh: Kadaya patrin sas khosli de kana shirdyas (astardyas) te editisares la!",
+ "confirm_purge_button": "Va",
+ "version": "Versiya",
+ "specialpages": "Uzalutne patrya"
}
diff --git a/languages/i18n/ro.json b/languages/i18n/ro.json
index bd4a46f2..a3e56eff 100644
--- a/languages/i18n/ro.json
+++ b/languages/i18n/ro.json
@@ -23,7 +23,9 @@
"Urhixidur",
"לערי ריינהארט",
"아라",
- "XXN"
+ "XXN",
+ "Fitoschido",
+ "Macofe"
]
},
"tog-underline": "Sublinierea legăturilor:",
@@ -51,7 +53,7 @@
"tog-shownumberswatching": "Arată numărul utilizatorilor care urmăresc",
"tog-oldsig": "Semnătură actuală:",
"tog-fancysig": "Tratează semnătura ca wikitext (fără o legătură automată)",
- "tog-uselivepreview": "Folosește previzualizarea în timp real (experimental)",
+ "tog-uselivepreview": "Folosește previzualizarea în timp real",
"tog-forceeditsummary": "Avertizează-mă când uit să descriu modificările",
"tog-watchlisthideown": "Ascunde modificările mele la lista mea de urmărire",
"tog-watchlisthidebots": "Ascunde modificările boților la lista mea de urmărire",
@@ -239,6 +241,7 @@
"pool-queuefull": "Coada de așteptare este plină",
"pool-errorunknown": "Eroare necunoscută",
"pool-servererror": "Serviciul de contorizare a rezervei nu este disponibil ($1).",
+ "poolcounter-usage-error": "Eroare de utilizare: $1",
"aboutsite": "Despre {{SITENAME}}",
"aboutpage": "Project:Despre",
"copyright": "Conținutul este disponibil sub $1, exceptând cazurile în care se specifică altfel.",
@@ -248,6 +251,7 @@
"disclaimers": "Termeni",
"disclaimerpage": "Project:Termeni",
"edithelp": "Ajutor pentru modificare",
+ "helppage-top-gethelp": "Ajutor",
"mainpage": "Pagina principală",
"mainpage-description": "Pagina principală",
"policy-url": "Project:Politică",
@@ -326,10 +330,13 @@
"readonly_lag": "Baza de date a fost închisă automatic în timp ce serverele secundare ale bazei de date îl urmează pe cel principal.",
"internalerror": "Eroare internă",
"internalerror_info": "Eroare internă: $1",
+ "internalerror-fatal-exception": "Excepție fatală pentru tipul „$1”",
"filecopyerror": "Fișierul \"$1\" nu a putut fi copiat la \"$2\".",
"filerenameerror": "Fișierul \"$1\" nu a putut fi mutat la \"$2\".",
"filedeleteerror": "Fișierul \"$1\" nu a putut fi șters.",
"directorycreateerror": "Nu se poate crea directorul \"$1\".",
+ "directoryreadonlyerror": "Dosarul „$1” este doar în citire.",
+ "directorynotreadableerror": "Dosarul „$1” nu poate fi citit.",
"filenotfound": "Fișierul „$1” nu a putut fi găsit.",
"unexpected": "Valoare neașteptată: „$1”=„$2”.",
"formerror": "Eroare: datele nu au putut fi trimise",
@@ -351,7 +358,8 @@
"viewsourcetext": "Se poate vizualiza și copia conținutul acestei pagini:",
"viewyourtext": "Se poate vizualiza și copia conținutul '''modificărilor dumneavoastră''' efectuate asupra acestei pagini:",
"protectedinterface": "Această pagină asigură textul interfeței pentru software și este protejată pentru a preveni abuzurile.\nPentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.",
- "editinginterface": "'''Avertizare''': Modificați o pagină care este folosită pentru a furniza textul interfeței software.\nModificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori ai acestui wiki.\nPentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.",
+ "editinginterface": "<strong>Avertizare</strong>: Modificați o pagină care este folosită pentru a furniza textul interfeței software.\nModificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori ai acestui wiki.",
+ "translateinterface": "Pentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki pentru localizare.",
"cascadeprotected": "Această pagină a fost protejată la scriere deoarece este inclusă în {{PLURAL:$1|următoarea pagină|următoarele pagini}}, care {{PLURAL:$1|este protejată|sunt protejate}} în cascadă:\n$2",
"namespaceprotected": "Nu aveți permisiunea de a modifica pagini din spațiul de nume '''$1'''.",
"customcssprotected": "Nu aveți permisiunea de a modifica această pagină CSS, deoarece conține setările personale ale altui utilizator.",
@@ -408,6 +416,8 @@
"userlogin-resetlink": "Ați uitat datele de autentificare?",
"userlogin-resetpassword-link": "V-ați uitat parola?",
"userlogin-helplink2": "Ajutor la autentificare",
+ "userlogin-loggedin": "Sunteți deja {{GENDER:$1|autentificat|autentificată}} ca {{GENDER:$1|$1}}.\nUtilizați formularul de mai jos pentru a vă autentifica cu alt nume de utilizator.",
+ "userlogin-createanother": "Creează un alt cont",
"createacct-emailrequired": "Adresă de e-mail",
"createacct-emailoptional": "Adresă de e-mail (opțională)",
"createacct-email-ph": "Introduceți adresa dumnevoastră de e-mail",
@@ -443,6 +453,7 @@
"wrongpassword": "Parola pe care ați introdus-o este incorectă. Vă rugăm să încercați din nou.",
"wrongpasswordempty": "Spațiul pentru introducerea parolei nu a fost completat. Vă rugăm să încercați din nou.",
"passwordtooshort": "Parola trebuie să aibă cel puțin {{PLURAL:$1|1 caracter|$1 caractere|$1 de caractere}}.",
+ "passwordtoolong": "Parolele nu pot fi mai lungi de {{PLURAL:$1|un caracter|$1 caractere|$1 de caractere}}.",
"password-name-match": "Parola dumneavoastră trebuie să fie diferită de numele de utilizator.",
"password-login-forbidden": "Utilizarea acestui nume de utilizator și a acestei parole este interzisă.",
"mailmypassword": "Resetează parola",
@@ -568,10 +579,12 @@
"anoneditwarning": "<strong>Atenție:</strong> Nu v-ați autentificat. Adresa dumneavoastră IP va fi vizibilă în mod public dacă efectuați modificări. Dacă vă <strong>[$1 autentificați]</strong> sau vă <strong>[$2 creați un cont]</strong>, modificările dumneavoastră vor fi asociate numelui de utilizator, pe lângă alte beneficii.",
"anonpreviewwarning": "''Nu v-ați autentificat. Dacă salvați pagina adresa dumneavoastră IP va fi înregistrată în istoric.''",
"missingsummary": "'''Atenție:''' Nu ați completat caseta „descriere modificări”. Dacă apăsați din nou butonul „salvează pagina” modificările vor fi salvate fără descriere.",
+ "selfredirect": "<strong>Atenție:</strong> Sunteți pe cale să redirecționați această pagină către ea însăși.\nProbabil ați greșit ținta redirecționării sau ați modificat pagina greșită.\nDacă apăsați din nou pe „{{int:savearticle}}”, redirecționarea va fi creată oricum.",
"missingcommenttext": "Vă rugăm să introduceți un comentariu.",
"missingcommentheader": "'''Atenție,''' nu ați pus titlu sau subiect la acest comentariu.\nDacă dați din nou clic pe „{{int:savearticle}}” modificarea va fi salvată fără titlu.",
"summary-preview": "Previzualizare descriere:",
"subject-preview": "Previzualizare subiect/titlu:",
+ "previewerrortext": "A survenit o eroare ca urmare a tentativei de previzualizare a modificărilor dumneavoastră.",
"blockedtitle": "Utilizatorul este blocat",
"blockedtext": "'''Adresa IP sau contul dumneavoastră de utilizator a fost blocat.'''\n\nBlocarea a fost făcută de $1.\nMotivul blocării este ''$2''.\n\n* Î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 oricare sau ambele informații în orice interogări.",
"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:''$2''\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 \"trimite e-mail\" 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 interogări pe care le faceți.",
@@ -611,12 +624,12 @@
"session_fail_preview_html": "'''Ne pare rău! Modificările dvs. nu au putut fi procesate din cauza pierderii datelor sesiunii.'''\n\n''Deoarece {{SITENAME}} are activat HTML brut, previzualizarea este ascunsă ca măsură de precauție împotriva atacurilor JavaScript.''\n\n'''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 încearcați să vă autentificați din nou.'''",
"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.'''",
"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",
+ "editing": "Modificare „$1”",
+ "creating": "Crearea paginii „$1”",
"editingsection": "modificare $1 (secțiune)",
"editingcomment": "Modificare $1 (secțiune nouă)",
"editconflict": "Conflict de modificare: $1",
- "explainconflict": "Altcineva a modificat această pagină de când ați început editarea.\nCaseta de text de sus conține pagina așa cum este ea acum (după editarea celeilalte persoane).\nPagina cu modificările dumneavoastră (așa cum ați încercat să o salvați) se află în caseta de jos.\nVa trebui să editați manual caseta de sus pentru a reflecta modificările pe care tocmai le-ați făcut în cea de jos.\n'''Numai''' textul din caseta de sus va fi salvat atunci când veți apăsa pe „{{int:savearticle}}”.",
+ "explainconflict": "Altcineva a modificat această pagină de când ați început editarea.\nZona de text din partea de sus conține pagina așa cum este ea acum (după editarea celeilalte persoane).\nModificările dumneavoastră sunt afișate în zona de text inferioară.\nVa trebui să vă uniți modificările cu textul deja existent.\n<strong>Doar</strong> textul din zona de text superioară va fi salvat atunci când veți apăsa „{{int:savearticle}}”.",
"yourtext": "Textul dumneavoastră",
"storedversion": "Versiunea curentă",
"nonunicodebrowser": "'''Atenție: Navigatorul dumneavoastră nu este compatibil cu Unicode.'''\nÎn schimb, există o soluție care vă permite să modificați paginile în siguranță: caracterele non-ASCII vor fi afișate în caseta de editare drept coduri hexazecimale.",
@@ -666,6 +679,10 @@
"content-model-text": "text simplu",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Obiect vid",
+ "content-json-empty-array": "Matrice vidă",
+ "duplicate-args-category": "Pagini care folosesc argumente duplicate în apelarea formatelor",
+ "duplicate-args-category-desc": "Pagina conține apelări ale formatelor care folosesc argumente duplicate, cum ar fi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> sau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Atenție: Această pagină conține prea multe apelări costisitoare ale funcțiilor parser.\n\nAr trebui să existe mai puțin de $2 {{PLURAL:$2|apelare|apelări}}, acolo există {{PLURAL:$1|$1 apelare|$1 apelări}}.",
"expensive-parserfunction-category": "Pagini cu prea multe apelări costisitoare de funcții parser",
"post-expand-template-inclusion-warning": "Atenție: Formatele incluse sunt prea mari.\nUnele formate nu vor fi incluse.",
@@ -720,7 +737,7 @@
"history-feed-empty": "Pagina solicitată nu există.\nE posibil să fi fost ștearsă sau redenumită.\nÎncearcă să [[Special:Search|cauți]] pe wiki pentru pagini noi semnificative.",
"rev-deleted-comment": "(descrierea modificării ștearsă)",
"rev-deleted-user": "(nume de utilizator șters)",
- "rev-deleted-event": "(intrare ștearsă)",
+ "rev-deleted-event": "(detaliile din jurnalul șterse)",
"rev-deleted-user-contribs": "[nume de utilizator sau adresă IP ștearsă - modificare ascunsă din contribuții]",
"rev-deleted-text-permission": "Această versiune a paginii a fost '''ștearsă'''.\nMai multe detalii în [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jurnalul ștergerilor].",
"rev-suppressed-text-permission": "Această versiune a paginii a fost <strong>suprimată</strong>.\nDetalii puteți găsi în [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jurnalul suprimărilor].",
@@ -748,13 +765,13 @@
"revdelete-text-text": "Versiunile șterse vor continua să fie vizibile în istoricul paginii, însă anumite părți ale conținutului acestora vor fi inaccesibile publicului.",
"revdelete-text-file": "Versiunile șterse ale fișierului vor continua să fie vizibile în istoricul fișierului, însă anumite părți ale conținutului acestora vor fi inaccesibile publicului.",
"logdelete-text": "Evenimentele șterse ale jurnalului vor continua să fie vizibile în jurnale, însă anumite părți ale conținutului acestora vor fi inaccesibile publicului.",
- "revdelete-text-others": "Alți administratori vor avea acces în continuare la conținutul ascuns și îl vor restaurarea acestuia, cu excepția cazurilor în care nu sunt activate și restricții suplimentare.",
+ "revdelete-text-others": "Alți administratori vor avea acces în continuare la conținutul ascuns și îl vor putea restaura, cu excepția cazurilor în care sunt activate restricții suplimentare.",
"revdelete-confirm": "Vă rugăm să confirmați că intenționați să faceți acest lucru, că înțelegeți consecințele și că faceți asta în conformitate cu [[{{MediaWiki:Policy-url}}|politica]].",
"revdelete-suppress-text": "Suprimarea trebuie folosită '''doar''' în următoarele cazuri:\n* Informații potențial calomnioase\n* Informații personale inadecvate\n*: ''adrese și numere de telefon personale, CNP, numere de securitate socială etc.''",
"revdelete-legend": "Restricții de afișare",
"revdelete-hide-text": "Textul versiunii",
"revdelete-hide-image": "Șterge conținutul fișierului",
- "revdelete-hide-name": "Șterge operația și obiectul",
+ "revdelete-hide-name": "Ascunde ținta și parametrii",
"revdelete-hide-comment": "Descrierea modificării",
"revdelete-hide-user": "Numele de utilizator sau adresa IP",
"revdelete-hide-restricted": "Ascunde informațiile față de administratori și față de alți utilizatori",
@@ -791,11 +808,11 @@
"mergehistory-box": "Combină reviziile a două pagini:",
"mergehistory-from": "Pagina sursă:",
"mergehistory-into": "Pagina destinație:",
- "mergehistory-list": "Istoricul la care se aplică combinarea",
- "mergehistory-merge": "Următoarele versiuni ale [[:$1]] pot fi combinate în [[:$2]].\nFolosiți coloana butonului radio pentru a combina doar versiunile create la și înainte de momentul specificat.\nFolosirea linkurilor de navigare va reseta această coloană.",
+ "mergehistory-list": "Istoricul la care se aplică unificarea",
+ "mergehistory-merge": "Următoarele versiuni ale paginii [[:$1]] pot fi unite în [[:$2]].\nFolosiți coloana butonului radio pentru a uni doar versiunile create la și înainte de momentul specificat.\nFolosirea legăturilor de navigare va reseta această coloană.",
"mergehistory-go": "Vezi modificările care pot fi combinate",
- "mergehistory-submit": "Unește reviziile",
- "mergehistory-empty": "Reviziile nu pot fi combinate.",
+ "mergehistory-submit": "Unește versiunile",
+ "mergehistory-empty": "Nicio versiune nu poate fi unită.",
"mergehistory-success": "$3 {{PLURAL:$3|versiune|versiuni|de versiuni}} ale [[:$1]] {{PLURAL:$3|a fost unită|au fost unite|au fost unite}} cu succes în [[:$2]].",
"mergehistory-fail": "Nu se poate executa combinarea istoricului, te rog verifică parametrii pagină și timp.",
"mergehistory-fail-toobig": "Nu s-a putut efectua unirea istoricelor întrucât s-ar fi depășit limita de $1 {{PLURAL:$1|versiune|versiuni|de versiuni}} mutat{{PLURAL:$1|ă|e}}.",
@@ -803,12 +820,11 @@
"mergehistory-no-destination": "Pagina de destinație $1 nu există.",
"mergehistory-invalid-source": "Pagina sursă trebuie să aibă un titlu valid.",
"mergehistory-invalid-destination": "Pagina de destinație trebuie să aibă un titlu valid.",
- "mergehistory-autocomment": "Combinat [[:$1]] în [[:$2]]",
+ "mergehistory-autocomment": "Unit [[:$1]] în [[:$2]]",
"mergehistory-comment": "Combinat [[:$1]] în [[:$2]]: $3",
"mergehistory-same-destination": "Paginile sursă și destinație nu pot fi identice",
"mergehistory-reason": "Motiv:",
"mergelog": "Jurnal unificări",
- "pagemerge-logentry": "combină [[$1]] cu [[$2]] (versiuni până la $3)",
"revertmerge": "Anulează îmbinarea",
"mergelogpagetext": "Mai jos este o listă a celor mai recente combinări ale istoricului unei pagini cu al alteia.",
"history-title": "Istoricul versiunilor pentru „$1”",
@@ -831,6 +847,8 @@
"notextmatches": "Nici un rezultat în textele articolelor",
"prevn": "anterioarele {{PLURAL:$1|$1}}",
"nextn": "următoarele {{PLURAL:$1|$1}}",
+ "prev-page": "pagina anterioară",
+ "next-page": "pagina următoare",
"prevn-title": "{{PLURAL:$1|anteriorul|anterioarele}} $1 {{PLURAL:$1|rezultat|rezultate}}",
"nextn-title": "{{PLURAL:$1|următorul|următoarele}} $1 {{PLURAL:$1|rezultat|rezultate}}",
"shown-title": "Arată $1 {{PLURAL:$1|rezultat|rezultate}} pe pagină",
@@ -849,6 +867,7 @@
"search-result-category-size": "$1 {{PLURAL:$1|element|elemente}} ($2 {{PLURAL:$2|categorie|categorii}}, $3 {{PLURAL:$3|fișier|fișiere}})",
"search-redirect": "(redirecționare de la $1)",
"search-section": "(secțiunea $1)",
+ "search-category": "(categoria $1)",
"search-file-match": "(se regăsește în conținutul fișierului)",
"search-suggest": "V-ați referit la: $1",
"search-interwiki-caption": "Proiecte înrudite",
@@ -882,6 +901,11 @@
"prefs-personal": "Informații personale",
"prefs-rc": "Schimbări recente",
"prefs-watchlist": "Listă de urmărire",
+ "prefs-editwatchlist": "Modifică lista de pagini urmărite",
+ "prefs-editwatchlist-label": "Modificați titluri din lista dumneavoastră de pagini urmărite:",
+ "prefs-editwatchlist-edit": "Vizualizați și eliminați titluri din lista dumneavoastră de pagini urmărite",
+ "prefs-editwatchlist-raw": "Modifică lista brută de pagini urmărite",
+ "prefs-editwatchlist-clear": "Goliți-vă lista de pagini urmărite",
"prefs-watchlist-days": "Numărul de zile care apar în lista paginilor urmărite:",
"prefs-watchlist-days-max": "Maxim $1 {{PLURAL:$1|zi|zile}}",
"prefs-watchlist-edits": "Numărul de modificări care apar în lista extinsă a paginilor urmărite:",
@@ -951,7 +975,7 @@
"gender-female": "Ea modifică pagini wiki",
"prefs-help-gender": "Stabilirea acestei preferințe este opțională.\nAcest software folosește datele pentru a vi se adresa și pentru a face referire la dumneavoastră utilizând genul gramatical corespunzător.\nAceastă informație va fi publică.",
"email": "E-mail",
- "prefs-help-realname": "Numele real este opțional.\nDacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.",
+ "prefs-help-realname": "Numele real este opțional.\nDacă este furnizat, ar putea fi folosit pentru a vă atribui munca.",
"prefs-help-email": "Adresa de e-mail este opțională, dar este necesară pentru recuperarea parolei în cazul în care o uitați.",
"prefs-help-email-others": "Puteți de asemenea permite altora să vă contacteze prin intermediul paginii dumneavoastră de utilizator fără a vă divulga identitatea.",
"prefs-help-email-required": "Adresa de e-mail este necesară.",
@@ -1058,6 +1082,7 @@
"right-protect": "Schimbă nivelurile de protejare și modifică pagini protejate în cascadă",
"right-editprotected": "Modifică pagini protejate ca „{{int:protect-level-sysop}}”",
"right-editsemiprotected": "Modifică pagini protejate ca „{{int:protect-level-autoconfirmed}}”",
+ "right-editcontentmodel": "Modifică modelul de conținut al unei pagini",
"right-editinterface": "Modifică interfața cu utilizatorul",
"right-editusercssjs": "Modifică fișierele CSS și JS ale altor utilizatori",
"right-editusercss": "Modifică fișierele CSS ale altor utilizatori",
@@ -1085,6 +1110,7 @@
"right-override-export-depth": "Exportă inclusiv paginile legate până la o adâncime de 5",
"right-sendemail": "Trimite e-mail altor utilizatori",
"right-passwordreset": "Vizualizează e-mailurile de reinițializare a parolelor",
+ "right-managechangetags": "Creează și șterge [[Special:Tags|etichete]] din baza de date",
"newuserlogpage": "Jurnal utilizatori noi",
"newuserlogpagetext": "Acesta este jurnalul creărilor conturilor de utilizator.",
"rightslog": "Jurnal permisiuni de utilizator",
@@ -1130,6 +1156,8 @@
"action-viewmywatchlist": "vă vizualizați lista de pagini urmărite",
"action-viewmyprivateinfo": "vă vizualizați informațiile personale",
"action-editmyprivateinfo": "să vă modificați informațiile personale",
+ "action-editcontentmodel": "modificați modelul de conținut al unei pagini",
+ "action-managechangetags": "creați și să ștergeți etichete din baza de date",
"nchanges": "$1 {{PLURAL:$1|modificare|modificări|de modificări}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|de la ultima vizită}}",
"enhancedrc-history": "istoric",
@@ -1202,9 +1230,9 @@
"uploaderror": "Eroare la trimitere fișier",
"upload-recreate-warning": "'''Atenție, un fișier cu același nume a fost șters sau redenumit.'''\nIată aici înregistrările relevante din jurnalul de ștergeri și redenumiri:",
"uploadtext": "Utilizați formularul de mai jos pentru a trimite fișiere.\nPentru a vizualiza sau căuta imagini deja trimise, mergeți la [[Special:FileList|lista cu imagini]]; (re)încărcările și ștergerile sunt de asemenea înregistrate în [[Special:Log/upload|jurnalul fișierelor trimise]], respectiv [[Special:Log/delete|jurnalul fișierelor șterse]].\n\nPentru a insera un fișier într-o pagină, folosiți o legătură de forma:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fișier.jpg]]</nowiki></code>''' pentru a include versiunea integrală a unui fișier\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Fișier.png|200px|thumb|left|informații]]</nowiki></code>''' pentru a introduce o imagine cu o lățime de 200 de pixeli într-un chenar plasat în partea stângă, având ca descriere textul „informații”\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Fișier.ogg]]</nowiki></code>''' pentru o legătură directă către fișier, fără a-l afișa",
- "upload-permitted": "Tipuri de fișiere permise: $1.",
- "upload-preferred": "Tipuri de fișiere preferate: $1.",
- "upload-prohibited": "Tipuri de fișiere interzise: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tip|Tipuri}} de fișiere permise: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tip|Tipuri}} de fișiere preferate: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tip|Tipuri}} de fișiere interzise: $1.",
"uploadlogpage": "Jurnal fișiere trimise",
"uploadlogpagetext": "Mai jos este afișată lista ultimelor fișiere trimise.\nVezi [[Special:NewFiles|galeria fișierelor noi]] pentru o mai bună vizualizare.",
"filename": "Nume fișier",
@@ -1277,7 +1305,7 @@
"upload-failure-subj": "Problemă la trimitere",
"upload-failure-msg": "A apărut o problemă cu încărcarea de la [$2]:\n\n$1",
"upload-warning-subj": "Avertizare la încărcare",
- "upload-warning-msg": "A apărut o problemă în timpul încărcării de la [$2]. Vă puteți întoarce la [[Special:Upload/stash/$1|formularul de trimitere]]pentru a corecta această problemă.",
+ "upload-warning-msg": "A apărut o problemă în timpul încărcării de la [$2]. Vă puteți întoarce la [[Special:Upload/stash/$1|formularul de trimitere]] pentru a corecta această problemă.",
"upload-proto-error": "Protocol incorect",
"upload-proto-error-text": "Importul de la distanță necesită adrese URL care încep cu <code>http://</code> sau <code>ftp://</code>.",
"upload-file-error": "Eroare internă",
@@ -1328,10 +1356,10 @@
"zip-wrong-format": "Fișierul specificat nu era un fișier de tip ZIP.",
"zip-bad": "Fișierul este un fișier corupt de tip ZIP, fiind imposibil de citit.\nNu poate fi verificat în mod corespunzător în vederea securității.",
"zip-unsupported": "Fișierul este unul de tip ZIP cu caracteristici neacceptate de MediaWiki.\nNu poate fi verificat în mod corespunzător în vederea securității.",
- "uploadstash": "Fișiere trimise în așteptare",
- "uploadstash-summary": "Această pagină oferă acces la fișierele care sunt încărcate (sau în curs de încărcare) dar nu sunt încă publicate pe wiki. Aceste fișiere nu sunt vizibile nimănui cu excepția celui care le-a încărcat.",
- "uploadstash-clear": "Șterge fișierele în așteptare",
- "uploadstash-nofiles": "Nu aveți fișiere în lista de așteptare.",
+ "uploadstash": "Fișiere în depozitul temporar",
+ "uploadstash-summary": "Această pagină oferă acces la fișierele care sunt încărcate sau sunt în curs de încărcare, dar nu sunt încă publicate pe wiki. Aceste fișiere nu sunt vizibile nimănui, cu excepția celui care le-a încărcat.",
+ "uploadstash-clear": "Șterge fișierele din depozitul temporar",
+ "uploadstash-nofiles": "Nu aveți fișiere în depozitul temporar.",
"uploadstash-badtoken": "Execuția acestei acțiuni nu a reușit, probabil deoarece informațiile dumneavoastră de identificare au expirat. Încercați din nou.",
"uploadstash-errclear": "Golirea fișierelor nu a reușit.",
"uploadstash-refresh": "Reîmprospătează lista de fișiere",
@@ -1461,7 +1489,6 @@
"statistics": "Statistici",
"statistics-header-pages": "Statistici pagini",
"statistics-header-edits": "Statistici modificări",
- "statistics-header-views": "Vizualizează statisticile",
"statistics-header-users": "Statistici utilizatori",
"statistics-header-hooks": "Alte statistici",
"statistics-articles": "Articole",
@@ -1470,13 +1497,9 @@
"statistics-files": "Fișiere încărcate",
"statistics-edits": "Modificări de la instalarea proiectului {{SITENAME}}",
"statistics-edits-average": "Media editărilor pe pagină",
- "statistics-views-total": "Număr de vizualizări",
- "statistics-views-total-desc": "Vizualizările paginilor inexistente și a paginilor speciale nu sunt incluse",
- "statistics-views-peredit": "Vizualizări pe editare",
"statistics-users": "[[Special:ListUsers|Utilizatori]] înregistrați",
"statistics-users-active": "Utilizatori activi",
"statistics-users-active-desc": "Utilizatori care au efectuat o acțiune în {{PLURAL:$1|ultima zi|ultimele $1 zile}}",
- "statistics-mostpopular": "Paginile cele mai vizualizate",
"pageswithprop": "Pagini cu o proprietate de pagină",
"pageswithprop-legend": "Pagini cu o proprietate de pagină",
"pageswithprop-text": "Această pagină listează paginile care utilizează o anumită proprietate de pagină.",
@@ -1517,9 +1540,9 @@
"uncategorizedtemplates": "Formate necategorizate",
"unusedcategories": "Categorii neutilizate",
"unusedimages": "Pagini neutilizate",
- "popularpages": "Pagini populare",
"wantedcategories": "Categorii dorite",
"wantedpages": "Pagini dorite",
+ "wantedpages-summary": "Lista paginilor inexistente către care trimite cel mai mare număr de legături, excluzând paginile către care trimit doar redirecționări. Pentru o listă a paginilor inexistente către care trimit doar redirecționări, accesați [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Titlu invalid în rezultatele : $1",
"wantedfiles": "Fișiere dorite",
"wantedfiletext-cat": "Următoarele fișiere sunt utilizate, dar nu există. Fișierele provenind din depozite externe pot apărea listate, în ciuda faptului că ele nu există. Orice astfel de pozitive false vor fi <del>tăiate</del>. În plus, paginile care încorporează astfel de fișiere inexistente sunt listate la [[:$1]].",
@@ -1579,9 +1602,11 @@
"pager-older-n": "{{PLURAL:$1|1|$1}} mai vechi",
"suppress": "Oversight",
"querypage-disabled": "Această pagină specială este dezactivată din motive de performanță.",
+ "apihelp": "Ajutor API",
+ "apihelp-no-such-module": "Modulul „$1” nu a fost găsit.",
"booksources": "Surse de cărți",
"booksources-search-legend": "Căutare surse pentru cărți",
- "booksources-go": "Salt",
+ "booksources-search": "Caută",
"booksources-text": "Mai jos se află o listă de legături înspre alte situri care vând cărți noi sau vechi și care pot oferi informații suplimentare despre cărțile pe care le căutați:",
"booksources-invalid-isbn": "Codul ISBN oferit nu este valid; verificați dacă a fost copiat corect de la sursa originală.",
"specialloguserlabel": "Executant:",
@@ -1699,7 +1724,7 @@
"mywatchlist": "Pagini urmărite",
"watchlistfor2": "Pentru $1 $2",
"nowatchlist": "Lista dumneavoastră de pagini urmărite nu conține nici o pagină.",
- "watchlistanontext": "Vă rugăm să vă autentificați pentru a vizualiza sau modifica elementele din lista dumneavoastră de pagini urmărite.",
+ "watchlistanontext": "Vă rugăm să vă autentificați pentru a consulta și modifica lista de pagini urmărite.",
"watchnologin": "Nu sunteți autentificat",
"addwatch": "Adăugă la lista de pagini urmărite",
"addedwatchtext": "Pagina „[[:$1]]” a fost adăugată în lista dumneavoastră de [[Special:Watchlist|pagini urmărite]].\nModificările viitoare efectuate asupra acestei pagini dar și asupra paginii de discuție asociată vor fi listate acolo.",
@@ -1717,7 +1742,7 @@
"wlheader-enotif": "Notificarea prin e-mail este activată.",
"wlheader-showupdated": "Paginile care au fost modificate după ultima dumneavoastră vizită sunt afișate '''îngroșat'''.",
"wlnote": "Mai jos se află {{PLURAL:$1|ultima schimbare|ultimele <strong>$1</strong> schimbări|ultimele <strong>$1</strong> de schimbări}} din {{PLURAL:$2|ultima oră|ultimele <strong>$2</strong> ore|ultimele <strong>$2</strong> de ore}}, așa cum era situația la $3, $4.",
- "wlshowlast": "Arată ultimele $1 ore $2 zile $3",
+ "wlshowlast": "Arată ultimele $1 ore $2 zile",
"watchlist-options": "Opțiuni listă de pagini urmărite",
"watching": "Se urmărește...",
"unwatching": "Așteptați...",
@@ -1766,7 +1791,6 @@
"deleteprotected": "Nu puteți șterge această pagină, deoarece este protejată.",
"deleting-backlinks-warning": "'''Atenție:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Alte pagini]] se leagă sau transclud pagina pe care doriți să o ștergeți.",
"rollback": "Editări de revenire",
- "rollback_short": "Revenire",
"rollbacklink": "revenire",
"rollbacklinkcount": "revenire asupra {{PLURAL:$1|unei modificări|a $1 modificări|a $1 de modificări}}",
"rollbacklinkcount-morethan": "revenire asupra a mai mult de {{PLURAL:$1|o modificare|$1 modificări|$1 de modificări}}",
@@ -1876,6 +1900,7 @@
"namespace": "Spațiu de nume:",
"invert": "Inversează selecția",
"tooltip-invert": "Bifați această căsuță pentru a ascunde modificările efectuate asupra paginilor din spațiul de nume selectat (și din spațiile de nume asociate, dacă s-a bifat și această opțiune)",
+ "tooltip-whatlinkshere-invert": "Bifați această casetă pentru a ascunde legăturile din paginile aparținând spațiilor de nume selectate.",
"namespace_association": "Spații de nume asociate",
"tooltip-namespace_association": "Bifați această căsuță pentru a include și spațiul de nume destinat discuțiilor care este asociat cu spațiul de nume deja selectat",
"blanknamespace": "Articole",
@@ -2140,14 +2165,15 @@
"thumbnail-temp-create": "Imposibil de creat miniatura temporară",
"thumbnail-dest-create": "Imposibil de salvat miniatura la destinație",
"thumbnail_invalid_params": "Parametrii invalizi ai imaginii miniatură",
+ "thumbnail_toobigimagearea": "Fișier cu dimensiuni mai mari de $1",
"thumbnail_dest_directory": "Nu poate fi creat directorul destinație",
"thumbnail_image-type": "Acest tip de imagine nu este suportat",
"thumbnail_gd-library": "Configurație incompletă a bibliotecii GD: lipsește funcția $1",
"thumbnail_image-missing": "Fișierul următor nu poate fi găsit: $1",
"thumbnail_image-failure-limit": "Recent au existat prea multe încercări nereușite ($1 sau mai multe) pentru a randa această miniatură. Încercați din nou mai târziu.",
"import": "Importare pagini",
- "importinterwiki": "Import transwiki",
- "import-interwiki-text": "Selectează un wiki și titlul paginii care trebuie importate. Datele reviziilor și numele editorilor vor fi salvate. Toate acțiunile de import transwiki pot fi găsite la [[Special:Log/import|log import]]",
+ "importinterwiki": "Importare din alt wiki",
+ "import-interwiki-text": "Selectați un wiki și titlul paginii care trebuie importate.\nData și ora versiunilor, precum și numele editorilor vor fi păstrate.\nToate acțiunile de importare din alte wikiuri se găsesc în [[Special:Log/import|jurnalul de importare]].",
"import-interwiki-sourcewiki": "Wikiul sursă:",
"import-interwiki-sourcepage": "Pagina sursă:",
"import-interwiki-history": "Copiază toate versiunile istoricului acestei pagini",
@@ -2167,7 +2193,7 @@
"importcantopen": "Fișierul importat nu a putut fi deschis",
"importbadinterwiki": "Legătură interwiki greșită",
"importsuccess": "Import reușit!",
- "importnosources": "Nici o sursă de import transwiki a fost definită și încărcările directe ale istoricului sunt oprite.",
+ "importnosources": "Nu a fost definită nici o sursă de import din alt wiki; încărcarea directă a istoricului este dezactivată.",
"importnofile": "Nici un fișier pentru import nu a fost încărcat.",
"importuploaderrorsize": "Încărcarea fișierului a eșuat.\nFișierul are o mărime mai mare decât limita de încărcare permisă.",
"importuploaderrorpartial": "Încărcarea fișierului a eșuat.\nFișierul a fost incărcat parțial.",
@@ -2191,18 +2217,15 @@
"import-rootpage-nosubpage": "Spațiul de nume „$1” al paginii rădăcină nu permite subpagini.",
"importlogpage": "Log import",
"importlogpagetext": "Imoprturi administrative de pagini de la alte wiki, cu istoricul editărilor.",
- "import-logentry-upload": "a importat [[$1]] prin încărcare de fișier",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|versiune importată|versiuni importate|de versiuni importate}}",
- "import-logentry-interwiki": "transwikificat $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versiune|versiuni|de versiuni}} importate de la $2",
"javascripttest": "Testare JavaScript",
- "javascripttest-title": "Rulare teste pentru $1",
"javascripttest-pagetext-noframework": "Această pagină este rezervată rulării testelor JavaScript.",
"javascripttest-pagetext-unknownframework": "Cadru de testare „$1” necunoscut.",
+ "javascripttest-pagetext-unknownaction": "Acțiunea „$1” necunoscută.",
"javascripttest-pagetext-frameworks": "Alegeți unul din următoarele cadre de testare: $1",
"javascripttest-pagetext-skins": "Alegeți un aspect pentru care să rulați teste:",
"javascripttest-qunit-intro": "A se vedea [$1 documentația de testare] pe mediawiki.org.",
- "javascripttest-qunit-heading": "Suita de test MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "Pagina dumneavoastră de utilizator",
"tooltip-pt-anonuserpage": "Pagina de utilizator pentru adresa IP curentă",
"tooltip-pt-mytalk": "Pagina dumneavoastră de discuții",
@@ -2212,6 +2235,7 @@
"tooltip-pt-mycontris": "Listă de contribuții",
"tooltip-pt-login": "Sunteți încurajat să vă autentificați, deși acest lucru nu este obligatoriu.",
"tooltip-pt-logout": "Închide sesiunea de lucru",
+ "tooltip-pt-createaccount": "Vă încurajăm să vă creați un cont și să vă autentificați; totuși, nu este obligatoriu",
"tooltip-ca-talk": "Discuții despre această pagină",
"tooltip-ca-edit": "Puteți modifica această pagină. Înainte de a o salva vă rugăm s-o previzualizați.",
"tooltip-ca-addsection": "Adaugă o nouă secțiune.",
@@ -2241,6 +2265,7 @@
"tooltip-feed-atom": "Alimentează fluxul Atom pentru această pagină",
"tooltip-t-contributions": "Vezi lista de contribuții ale acestui utilizator",
"tooltip-t-emailuser": "Trimite un e-mail acestui utilizator",
+ "tooltip-t-info": "Mai multe informații despre această pagină",
"tooltip-t-upload": "Încărcare de fișiere",
"tooltip-t-specialpages": "Lista tuturor paginilor speciale",
"tooltip-t-print": "Versiunea de tipărit a acestei pagini",
@@ -2306,7 +2331,6 @@
"pageinfo-robot-policy": "Indexare de către roboți",
"pageinfo-robot-index": "Permisă",
"pageinfo-robot-noindex": "Nepermisă",
- "pageinfo-views": "Număr de vizualizări",
"pageinfo-watchers": "Număr de utilizatori care urmăresc pagina",
"pageinfo-few-watchers": "Mai puțin de {{PLURAL:$1|un urmăritor|$1 urmăritori|$1 de urmăritori}}",
"pageinfo-redirects-name": "Număr de redirecționări către această pagină",
@@ -2757,7 +2781,6 @@
"exif-urgency-low": "Scăzut ($1)",
"exif-urgency-high": "Ridicat ($1)",
"exif-urgency-other": "Prioritate definită de utilizator ($1)",
- "watchlistall2": "toate",
"namespacesall": "toate",
"monthsall": "toate",
"confirmemail": "Confirmare adresă e-mail",
@@ -2845,9 +2868,9 @@
"watchlisttools-edit": "Vezi și modifică lista paginilor urmărite",
"watchlisttools-raw": "Modifică lista brută a paginilor urmărite",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discuție]])",
- "unknown_extension_tag": "Extensie etichetă necunoscută „$1”",
"duplicate-defaultsort": "'''Atenție:''' Cheia de sortare implicită („$2”) o înlocuiește pe precedenta („$1”).",
"duplicate-displaytitle": "<strong>Atenție:</strong> Titlul afișat „$2” înlocuieşte titlul afișat anterior, „$1”.",
+ "invalid-indicator-name": "<strong>Eroare:</strong> Parametrul <code>nume</code> al indicatorilor de stare a paginii nu trebuie să fie gol.",
"version": "Versiune",
"version-extensions": "Extensii instalate",
"version-skins": "Aspecte instalate",
@@ -2887,6 +2910,9 @@
"version-entrypoints": "URL-uri pentru puncte de intrare",
"version-entrypoints-header-entrypoint": "Punct de intrare",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Biblioteci instalate",
+ "version-libraries-library": "Bibliotecă",
+ "version-libraries-version": "Versiune",
"redirect": "Redirecționare după fișier, utilizator, ID-ul paginii sau al versiunii",
"redirect-legend": "Redirecționare către un fișier sau o pagină",
"redirect-summary": "Această pagină specială vă redirecționează către un fișier (dat fiind un nume de fișier), o pagină (dat fiind ID-ul unei versiuni sau ID-ul unei pagini) sau o pagină de utilizator (dat fiind un ID numeric al utilizatorului). Utilizare: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] sau [[{{#Special:Redirect}}/user/101]].",
@@ -2922,6 +2948,7 @@
"specialpages-group-wiki": "Date și instrumente",
"specialpages-group-redirects": "Pagini speciale de redirecționare",
"specialpages-group-spam": "Unelte spam",
+ "specialpages-group-developer": "Unelte pentru dezvolatori",
"blankpage": "Pagină goală",
"intentionallyblankpage": "Această pagină este goală în mod intenționat",
"external_image_whitelist": " #Lasă această linie exact așa cum este <pre>\n#Pune fragmentele expresiei regulate (doar partea care merge între //) mai jos\n#Acestea vor fi potrivite cu URL-uri de exterior (hotlinked)\n#Acelea care se potrivesc vor fi afișate ca imagini, altfel va fi afișat doar un link la imagine\n#Liniile care încep cu # sunt tratate ca comentarii\n#Acesta este insensibil la majuscule sau minuscule\n\n#Pune toate fragmentele regex deasupra aceastei linii. Lasă această linie exact așa cum este</pre>",
@@ -2934,12 +2961,54 @@
"tags-tag": "Numele etichetei",
"tags-display-header": "Apariția în listele cu schimbări",
"tags-description-header": "Descrierea completă a sensului",
+ "tags-source-header": "Sursă",
"tags-active-header": "Activă?",
"tags-hitcount-header": "Modificări etichetate",
+ "tags-actions-header": "Acțiuni",
"tags-active-yes": "Da",
"tags-active-no": "Nu",
+ "tags-source-extension": "Definită de o extensie",
+ "tags-source-manual": "Aplicată manual de utilizatori și roboți",
+ "tags-source-none": "Nu mai este în uz",
"tags-edit": "modificare",
+ "tags-delete": "șterge",
+ "tags-activate": "activează",
+ "tags-deactivate": "dezactivează",
"tags-hitcount": "$1 {{PLURAL:$1|modificare|modificări}}",
+ "tags-manage-no-permission": "Nu aveți permisiunea de a gestiona schimbarea etichetelor.",
+ "tags-create-heading": "Creare etichetă nouă",
+ "tags-create-explanation": "În mod implicit, etichetele nou create vor fi disponibile spre utilizarea de către utilizatori și roboți.",
+ "tags-create-tag-name": "Numele etichetei:",
+ "tags-create-reason": "Motiv:",
+ "tags-create-submit": "Creează",
+ "tags-create-no-name": "Trebuie să specificați un nume de etichetă.",
+ "tags-create-invalid-chars": "Numele etichetelor nu trebuie să conțină virgule (<code>,</code>) sau bare oblice (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Numele etichetelor nu trebuie să conțină caractere ce nu pot fi utilizate în titlurile paginilor.",
+ "tags-create-already-exists": "Eticheta „$1” există deja.",
+ "tags-create-warnings-above": "{{PLURAL:$2|Următorul avertisment a|Următoarele avertismente au}} fost {{PLURAL:$2|întâlnit|întâlnite}} în încercarea de a crea eticheta „$1”:",
+ "tags-create-warnings-below": "Doriți să continuați crearea etichetei?",
+ "tags-delete-title": "Ștergere etichetă",
+ "tags-delete-explanation-initial": "Sunteți pe cale să ștergeți eticheta „$1” din baza de date.",
+ "tags-delete-explanation-in-use": "Va fi eliminată {{PLURAL:$2|din cadrul unei versiuni sau intrări din jurnal căreia îi|din toate cele $2 versiuni și/sau intrări din jurnal cărora le|din toate cele $2 de versiuni și/sau intrări din jurnal cărora le}} este aplicată în acest moment.",
+ "tags-delete-explanation-warning": "Această acțiune este <strong>ireversibilă</strong> și <strong>nu poate fi anulată</strong>, nici chiar de către administratorii bazei de date. Asigurați-vă încă o dată că aceasta este eticheta pe care doriți să o ștergeți.",
+ "tags-delete-explanation-active": "<strong>Eticheta „$1” este încă activă și va continua să fie aplicată și pe viitor.</strong> Pentru a opri aplicarea ei, mergeți în locul(rile) în care este setată aplicarea acesteia și dezactivați-o de acolo.",
+ "tags-delete-reason": "Motiv:",
+ "tags-delete-submit": "Șterge ireversibil această etichetă",
+ "tags-delete-not-allowed": "Etichetele definite printr-o extensie pot fi șterse doar dacă extensia permite acest lucru în mod expres.",
+ "tags-delete-not-found": "Eticheta „$1” nu există.",
+ "tags-delete-too-many-uses": "Eticheta „$1” este aplicată pentru mai mult de $2 {{PLURAL:$2|versiune|versiuni|de versiuni}}, ceea ce înseamnă că nu poate fi ștearsă.",
+ "tags-delete-warnings-after-delete": "Eticheta „$1” a fost ștearsă cu succes, deși {{PLURAL:$2|s-a întâlnit următorul avertisment|s-au întâlnit următoarele avertismente}}:",
+ "tags-activate-title": "Activare etichetă",
+ "tags-activate-question": "Sunteți pe cale să activați eticheta „$1”.",
+ "tags-activate-reason": "Motiv:",
+ "tags-activate-not-allowed": "Nu este posibilă activarea etichetei „$1”.",
+ "tags-activate-not-found": "Eticheta „$1” nu există.",
+ "tags-activate-submit": "Activează",
+ "tags-deactivate-title": "Dezactivare etichetă",
+ "tags-deactivate-question": "Sunteți pe cale să dezactivați eticheta „$1”.",
+ "tags-deactivate-reason": "Motiv:",
+ "tags-deactivate-not-allowed": "Nu este posibilă dezactivarea etichetei „$1”.",
+ "tags-deactivate-submit": "Dezactivează",
"comparepages": "Comparație între pagini",
"compare-page1": "Pagina 1",
"compare-page2": "Pagina 2",
@@ -2951,8 +3020,8 @@
"compare-revision-not-exists": "Versiunea specificată nu există.",
"dberr-problems": "Ne cerem scuze! Acest site întâmpină dificultăți tehnice.",
"dberr-again": "Așteptați câteva minute și încercați din nou.",
- "dberr-info": "(Nu se poate contacta serverul bazei de date: $1)",
- "dberr-info-hidden": "(Nu se poate contacta serverul bazei de date)",
+ "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ă.",
@@ -2993,6 +3062,14 @@
"revdelete-uname-unhid": "numele de utilizator afișat",
"revdelete-restricted": "restricții aplicate administratorilor",
"revdelete-unrestricted": "restricții eliminate pentru administratori",
+ "logentry-block-block": "$1 {{GENDER:$2|a blocat}} utilizatorul {{GENDER:$4|$3}} pe o perioadă de $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|a deblocat}} utilizatorul {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|a schimbat}} parametrii blocării pentru utilizatorul {{GENDER:$4|$3}} cu o perioadă de expirare de $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|a blocat}} utilizatorul {{GENDER:$4|$3}} pe o perioadă de $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|a schimbat}} parametrii blocării pentru utilizatorul {{GENDER:$4|$3}} cu o perioadă de expirare de $5 $6",
+ "logentry-import-upload": "$1 {{GENDER:$2|a importat}} $3 prin încărcare de fișier",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|a importat}} $3 din alt wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|a unificat}} $3 cu $4 (versiuni de până la $5)",
"logentry-move-move": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 fără a lăsa o redirecționare în loc",
"logentry-move-move_redir": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 înlocuind redirecționarea",
@@ -3010,20 +3087,36 @@
"logentry-upload-upload": "$1 {{GENDER:$2|a încărcat}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|a încărcat}} o nouă versiune pentru $3",
"logentry-upload-revert": "$1 {{GENDER:$2|a încărcat}} $3",
+ "log-name-managetags": "Jurnal gestionare etichete",
+ "log-description-managetags": "Această pagină listează activitățile de gestionare în ceea ce privește [[Special:Tags|etichetele]]. Jurnalul conține numai acțiunile efectuate manual de către un administrator; etichetele pot fi create sau șterse de software-ul wiki fără ca vreo intrare să fie înregistrată în acest jurnal.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|a creat}} eticheta „$4”",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|a șters}} eticheta „$4” (eliminată din cadrul {{PLURAL:$5|unei versiuni sau intrări din jurnal|a $5 versiuni și/sau intrări din jurnal|a $5 de versiuni și/sau intrări din jurnal}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|a activat}} eticheta „$4” pentru utilizarea de către utilizatori și roboți",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|a dezactivat}} eticheta „$4” de la utilizarea de către utilizatori și roboți",
"rightsnone": "(niciunul)",
+ "revdelete-summary": "descrierea modificărilor",
+ "feedback-adding": "Se adaugă părerea pe pagină...",
+ "feedback-back": "Înapoi",
+ "feedback-bugcheck": "Minunat! Trebuie doar să verificați dacă nu cumva problema a fost [$1 deja înregistrată].",
+ "feedback-bugnew": "Am verificat. O raportez drept o problemă nouă",
"feedback-bugornote": "Dacă sunteți pregătit să descrieți o problemă tehnică în detaliu vă rugăm să [$1 raportați un bug].\nÎn caz contrar, puteți utiliza formularul de mai jos. Comentariul dumneavoastră va fi adăugat pe pagina „[$3 $2]”, împreună cu numele de utilizator și numele navigatorului pe care îl folosiți.",
- "feedback-subject": "Subiect:",
- "feedback-message": "Mesaj:",
"feedback-cancel": "Revocare",
- "feedback-submit": "Trimite părerea",
- "feedback-adding": "Se adaugă părerea pe pagină...",
+ "feedback-close": "Gata",
+ "feedback-external-bug-report-button": "Semnalare problemă tehnică",
+ "feedback-dialog-title": "Trimitere păreri",
+ "feedback-dialog-intro": "Puteți folosi formularul simplificat de mai jos pentru a vă trimite părerile. Comentariul dumneavoastră va fi adăugat în pagina „$1”, alături de numele dumneavoastră de utilizator.",
+ "feedback-error-title": "Eroare",
"feedback-error1": "Eroare: Rezultat necunoscut de la API",
"feedback-error2": "Eroare: editarea nu a reușit",
"feedback-error3": "Eroare: Niciun răspuns de la API",
+ "feedback-message": "Mesaj:",
+ "feedback-subject": "Subiect:",
+ "feedback-submit": "Trimite",
+ "feedback-terms": "Înțeleg că informațiile mele din agentul utilizator includ informații exacte despre navigatorul și versiunea sistemului de operare și că acestea vor fi făcute publice alături de comentariile mele.",
+ "feedback-termsofuse": "Sunt de acord să trimit păreri în acord cu Termenii de utilizare.",
"feedback-thanks": "Mulțumim! Comentariile dumneavoastră au fost publicate pe pagina „[ $2 $1 ]”.",
- "feedback-close": "Gata",
- "feedback-bugcheck": "Minunat! Trebuie doar să verificați dacă nu cumva problema a fost [$1 deja înregistrată].",
- "feedback-bugnew": "Am verificat. O raportez drept o problemă nouă",
+ "feedback-thanks-title": "Mulțumim!",
+ "feedback-useragent": "Agent utilizator:",
"searchsuggest-search": "Căutare",
"searchsuggest-containing": "conținând...",
"api-error-badaccess-groups": "Nu aveți dreptul să încărcați fișiere pe acest wiki.",
@@ -3058,6 +3151,14 @@
"api-error-overwrite": "Nu este permisă suprascrierea unui fișier existent.",
"api-error-stashfailed": "Eroare internă: serverul nu a putut stoca fișierul temporar.",
"api-error-publishfailed": "Eroare internă: serverul nu a putut publica fișierul temporar.",
+ "api-error-stasherror": "A apărut o eroare la încărcarea fișierului în depozitul temporar.",
+ "api-error-stashedfilenotfound": "Fișierul din depozitul temporar nu a fost găsit când s-a încercat încărcarea sa.",
+ "api-error-stashpathinvalid": "Calea unde ar fi trebuit să fie găsit fișierul din depozitul temporar nu este validă.",
+ "api-error-stashfilestorage": "A apărut o eroare la stocarea fișierului în depozitul temporar.",
+ "api-error-stashzerolength": "Serverul nu a putut depozita temporar fișierul, deoarece are o mărime egală cu zero.",
+ "api-error-stashnotloggedin": "Trebuie să vă autentificați pentru a salva fișiere în depozitul temporar.",
+ "api-error-stashwrongowner": "Fișierul pe care încercați să-l accesați din depozitul temporar nu vă aparține.",
+ "api-error-stashnosuchfilekey": "Cheia fișierului pe care încercați să-l accesați din depozitul temporar nu există.",
"api-error-timeout": "Serverul nu a răspuns în timp util.",
"api-error-unclassified": "A apărut o eroare necunoscută.",
"api-error-unknown-code": "Eroare necunoscută: „$1”",
@@ -3102,6 +3203,8 @@
"expand_templates_generate_xml": "Arată arborele de analiză XML",
"expand_templates_generate_rawhtml": "Arată HTML brut",
"expand_templates_preview": "Previzualizare",
+ "expand_templates_preview_fail_html": "<em>Întrucât la {{SITENAME}} este activat HTML brut și a avut loc o pierdere a sesiunii de date, previzualizarea a fost ascunsă ca măsură de precauție împotriva atacurilor prin JavaScript.</em>\n\n<strong>Dacă aceasta este o încercare legitimă de a previzualiza, încercați din nou.</strong>\nDacă nici astfel nu funcționează, încercați să [[Special:UserLogout|închideţi sesiunea]] şi să vă autentificaţi din nou.",
+ "expand_templates_preview_fail_html_anon": "<em>Întrucât la {{SITENAME}} este activat HTML brut și nu v-ați autentificat, previzualizarea a fost ascunsă ca măsură de precauție împotriva atacurilor prin JavaScript.</em>\n\n<strong>Dacă aceasta este o încercare legitimă de a previzualiza, [[Special:UserLogin|autentificați-vă]] și încercați din nou.</strong>",
"pagelanguage": "Selector limbă pagină",
"pagelang-name": "Pagină",
"pagelang-language": "Limbă",
@@ -3113,5 +3216,55 @@
"log-description-pagelang": "Acesta este un jurnal cu modificări ale limbii paginilor.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|a modificat}} limba paginii pentru $3 din $4 în $5.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activat)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dezactivat''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''dezactivat''')",
+ "mediastatistics": "Statistici multimedia",
+ "mediastatistics-summary": "Statistici despre tipurile fișierelor încărcate. Sunt incluse doar cele mai recente versiuni ale fișierelor. Versiunile mai vechi sau șterse ale fișierelor sunt excluse.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octeți|$1 de octeți}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tip MIME",
+ "mediastatistics-table-extensions": "Extensii posibile",
+ "mediastatistics-table-count": "Număr de fișiere",
+ "mediastatistics-table-totalbytes": "Dimensiune combinată",
+ "mediastatistics-header-unknown": "Necunoscut",
+ "mediastatistics-header-bitmap": "Imagini bitmap",
+ "mediastatistics-header-drawing": "Desene (imagini vectoriale)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Videoclipuri",
+ "mediastatistics-header-multimedia": "Multimedia complexe",
+ "mediastatistics-header-office": "Documente",
+ "mediastatistics-header-text": "Text",
+ "mediastatistics-header-executable": "Executabile",
+ "mediastatistics-header-archive": "Formate comprimate",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgulă|virgule|de virgule}} în exces înlăturat{{PLURAL:$1|ă|e}} din JSON",
+ "json-error-unknown": "A apărut o problemă cu JSON. Eroare: $1",
+ "json-error-depth": "S-a depășit adâncimea maximă a stivei",
+ "json-error-state-mismatch": "JSON deformat sau incorect",
+ "json-error-ctrl-char": "Eroare în caracterul de control, posibil incorect codificat",
+ "json-error-syntax": "Eroare de sintaxă",
+ "json-error-utf8": "Caractere UTF-8 deformate, posibil incorect codificate",
+ "json-error-recursion": "Una sau mai multe referințe recursive în valoarea pentru codificat",
+ "json-error-inf-or-nan": "Una sau mai valori NAN sau INF în valoarea pentru codificat",
+ "json-error-unsupported-type": "A fost furnizată o valoare de un tip care nu poate fi codificat",
+ "headline-anchor-title": "Legătură către această secțiune",
+ "special-characters-group-latin": "Latină",
+ "special-characters-group-latinextended": "Latină extinsă",
+ "special-characters-group-ipa": "AFI",
+ "special-characters-group-symbols": "Simboluri",
+ "special-characters-group-greek": "Greacă",
+ "special-characters-group-cyrillic": "Chirilică",
+ "special-characters-group-arabic": "Arabă",
+ "special-characters-group-arabicextended": "Arabă extinsă",
+ "special-characters-group-persian": "Persană",
+ "special-characters-group-hebrew": "Ebraică",
+ "special-characters-group-bangla": "Bengaleză",
+ "special-characters-group-tamil": "tamilă",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thailandeză",
+ "special-characters-group-lao": "Laoțiană",
+ "special-characters-group-khmer": "Khmeră",
+ "special-characters-title-endash": "linie de pauză (en dash)",
+ "special-characters-title-emdash": "linie de pauză (em dash)",
+ "special-characters-title-minus": "semnul minus"
}
diff --git a/languages/i18n/roa-tara.json b/languages/i18n/roa-tara.json
index 493c273e..35f80491 100644
--- a/languages/i18n/roa-tara.json
+++ b/languages/i18n/roa-tara.json
@@ -6,7 +6,8 @@
"McDutchie",
"Reder",
"아라",
- "C.R."
+ "C.R.",
+ "Macofe"
]
},
"tog-underline": "Collegaminde sottolinèate:",
@@ -33,7 +34,7 @@
"tog-shownumberswatching": "Fa vedè 'u numere de le utinde ca uardene",
"tog-oldsig": "Firme esistende:",
"tog-fancysig": "Firma grezze cumme a 'nu teste de Uicchi (senza collegamende automatiche)",
- "tog-uselivepreview": "Ause l'andeprime da 'u vive (Sperimendale)",
+ "tog-uselivepreview": "Ause l'andeprime da 'u vive",
"tog-forceeditsummary": "Ciércame conferme quanne stoche a 'nzerische 'nu riepighe vianghe",
"tog-watchlisthideown": "Scunne le cangiaminde mije da l'elenghe de le pàggene condrollate",
"tog-watchlisthidebots": "Scunne le cangiaminde de le bot da l'elenghe de le pàggene condrollate",
@@ -172,8 +173,11 @@
"permalink": "Collegamende ca remane pe sembre",
"print": "Stambe",
"view": "Vide",
+ "view-foreign": "'Ndruche sus a $1",
"edit": "Cange",
+ "edit-local": "Cange 'a descrizione locale",
"create": "Ccreje",
+ "create-local": "Aggiunge 'a descrizione locale",
"editthispage": "Cange sta pàgene",
"create-this-page": "Ccreje 'a pàgene",
"delete": "Scangìlle",
@@ -206,6 +210,7 @@
"otherlanguages": "Jndr'à l'otre lènghe",
"redirectedfrom": "(Riderette da $1)",
"redirectpagesub": "Pàgene de redirezione",
+ "redirectto": "Redirezione sus a:",
"lastmodifiedat": "Sta pàgene a state cangete l'urtema vote da $1, alle $2.",
"viewcount": "Sta pàggene ha state viste {{PLURAL:$1|'na vote|$1 vote}}.",
"protectedpage": "Pàgene prutette",
@@ -216,6 +221,7 @@
"pool-timeout": "Tiembe d'attese scadute pu 'u blocche",
"pool-queuefull": "'A code de le sondagge jè chiene",
"pool-errorunknown": "Errore scanusciute",
+ "poolcounter-usage-error": "Errore d'ause: $1",
"aboutsite": "Sus a {{SITENAME}}",
"aboutpage": "Project:Sus a",
"copyright": "'U condenute jè disponibile sotte a $1.",
@@ -225,6 +231,7 @@
"disclaimers": "No ne sacce ninde",
"disclaimerpage": "Project:Scareca uarrile",
"edithelp": "Cangianne l'ajute",
+ "helppage-top-gethelp": "Aijute",
"mainpage": "Pàgene Prengepàle",
"mainpage-description": "Pàgene Prengepàle",
"policy-url": "Project:Reghele",
@@ -259,6 +266,9 @@
"hidetoc": "scunne",
"collapsible-collapse": "Scunne",
"collapsible-expand": "Spanne",
+ "confirmable-confirm": "{{GENDER:$1|Sì}} secure?",
+ "confirmable-yes": "Sìne",
+ "confirmable-no": "None",
"thisisdeleted": "Vide o ripristine $1?",
"viewdeleted": "Vue ccu vide $1?",
"restorelink": "{{PLURAL:$1|'nu cangiamende scangellete|$1 cangiaminde scangellete}}",
@@ -305,6 +315,7 @@
"readonly_lag": "'U database ha state automaticamende blocchete purcè le server de le database ca depennene da 'u master onne sciute in eccezzione",
"internalerror": "Errore inderne",
"internalerror_info": "Errore inderne: $1",
+ "internalerror-fatal-exception": "Eccezzione fatale d'u tipe \"$1\"",
"filecopyerror": "Non ge pozze cupià 'u fail \"$1\" jndr'à \"$2\".",
"filerenameerror": "Non ge pozze cangià 'u nome d'u fail \"$1\" jndr'à \"$2\".",
"filedeleteerror": "Non ge pozze scangillà 'u fail \"$1\".",
@@ -330,7 +341,7 @@
"viewsourcetext": "Tu puè vedè e cupià 'a sorgente de sta pàgene:",
"viewyourtext": "Tu puè vedè e copià 'a sorgende de '''le cangiaminde tune''' a sta pàgene:",
"protectedinterface": "Sta pàgene dèje 'nu teste de l'inderfacce pu software de sta uicchi, e jè prutette pe prevenìe l'abbuse.\nPe aggiungere o cangià le traduziune pe tutte le uicchi, pe piacere ause [//translatewiki.net/ translatewiki.net], 'u proggette de localizzazzione de MediaUicchi.",
- "editinginterface": "'''Fà attenziò:''' Tu ste cange 'na pàgene ca jè ausate pe dà 'n'inderfacce de teste p'u software.\nLe cangiaminde de sta pàgene vonne a mettene mane sus a l'inderfacce utende pe l'otre utinde de sta Uicchi.\nPe aggiungere o cangià le traduziune, pe piacere vide ce ause [//translatewiki.net/ translatewiki.net], 'u pruggette de localizzazione de MediaUicchi.",
+ "editinginterface": "<strong>Fà attenziò:</strong> Tu ste cange 'na pàgene ca jè ausate pe dà 'n'inderfacce de teste p'u software.\nLe cangiaminde de sta pàgene vonne a mettene mane sus a l'inderfacce utende pe l'otre utinde de sta Uicchi.",
"cascadeprotected": "Sta pàgene ha state prutette da le cangiaminde, purcè jè ingluse jndr'à {{PLURAL:$1|seguende pàgene, ca jè|le seguende pàggene, ca sonde}} prutette cu l'opzione \"a caschete\":\n$2",
"namespaceprotected": "Non ge tine 'u permesse pe cangià pàggene d'u neimspeise '''$1'''.",
"customcssprotected": "Non ge tine 'u permesse pe cangià sta pàgene de CSS, purcè tène otre configurazione personale.",
@@ -345,7 +356,7 @@
"invalidtitle-knownnamespace": "Titole invalide cu 'u namespace \"$2\" e teste \"$3\"",
"invalidtitle-unknownnamespace": "Titele invalide cu numere de namespace scanusciute $1 e teste \"$2\"",
"exception-nologin": "Non ge sì collegate",
- "exception-nologin-text": "Pe piacere [[Special:Userlogin|tràse]] pe avè l'accesse a sta pàgene o a sta azione.",
+ "exception-nologin-text": "Pe piacere tràse pe avè l'accesse a sta pàgene o a sta azione.",
"virus-badscanner": "Configurazione ca fece schife: Virus scanner scanusciute: ''$1''",
"virus-scanfailed": "condrolle fallite (codece $1)",
"virus-unknownscanner": "antivirus scanusciute:",
@@ -385,6 +396,8 @@
"gotaccountlink": "Tràse",
"userlogin-resetlink": "T'è scurdate le dettaglie pe trasè?",
"userlogin-resetpassword-link": "T'è scurdate 'a passuord toje?",
+ "userlogin-loggedin": "Tu ste jndre ggià cumme a {{GENDER:$1|$1}}.\nAuse 'u module aqquà sotte pe trasè cumme a 'n'otre utende.",
+ "userlogin-createanother": "Ccreje 'n'otre cunde",
"createacct-emailrequired": "Indirizze email",
"createacct-emailoptional": "Indirizze email (opzionale)",
"createacct-email-ph": "Mitte l'indirizze email tune",
@@ -450,6 +463,10 @@
"loginlanguagelabel": "Lénga: $1",
"suspicious-userlogout": "'A richiesta toje de assè ha state bloccate purcè pare ca ha state mannate da 'nu browser scuasciate o da 'a cache de 'nu proxy.",
"createacct-another-realname-tip": "'U nome vere jè facoltative.\nCe tu scacchie de metterle, quiste avène ausate pe dà 'u giuste merite a 'a fatìe de l'utende.",
+ "pt-login": "Tràse",
+ "pt-login-button": "Tràse",
+ "pt-createaccount": "Ccreje 'nu cunde utende",
+ "pt-userlogout": "Isse",
"php-mail-error-unknown": "Errore scanusciute jndr'à funzione PHP mail()",
"user-mail-no-addy": "E' pruvate a mannà 'na mail senze 'u 'ndirizze mail",
"user-mail-no-body": "Pruvate a mannà 'na mail cu 'nu cuèrpe vacande o troppe curte.",
@@ -488,7 +505,6 @@
"passwordreset-emailsent-capture": "'Na e-mail pe azzeramende d'a passuord ha state mannate, ca jè fatte vedè aqquà sotte.",
"passwordreset-emailerror-capture": "'Na e-mail de azzeramende d'a passuord ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a {{GENDER:$2|l'utende}} ha fallite: $1",
"changeemail": "Cange 'u 'ndirizze e-mail",
- "changeemail-header": "Cange 'u 'ndirizze e-mail d'u cunde",
"changeemail-text": "Comblete stu module pe cangià 'u 'ndirizze mail tune. Tu è abbesogne de sckaffà 'a passuord toje pe confermà 'u cangiamende.",
"changeemail-no-info": "Tu a essere collegate pe accedere a sta pàgene direttamende.",
"changeemail-oldemail": "Indirizze e-mail de mò:",
@@ -496,7 +512,6 @@
"changeemail-none": "(ninde)",
"changeemail-password": "'A passuord tue de {{SITENAME}}:",
"changeemail-submit": "Cange e-mail",
- "changeemail-cancel": "Annulle",
"resettokens": "Azzere le gettone",
"resettokens-text": "Tu puè azzerà le gettone le quale te donne l'accesse a certe date private collegate cu 'u cunde tune aqquà.\n\nTu avissa farle ce pe sbaglie l'è condivise cu otre o ce 'u cunde tune ha state combromesse.",
"resettokens-no-tokens": "Non ge stonne gettone de azzerà.",
@@ -532,7 +547,7 @@
"preview": "Andeprime",
"showpreview": "Vide l'andeprime",
"showdiff": "Fa vedè le cangiaminde",
- "anoneditwarning": "'''Attenziò:''' Tu non ge sinde colleghete..\nL'indirizze IP tue avène reggistrete jndr'à le cangiaminde de sta pàgene.",
+ "anoneditwarning": "<strong>Attenziò:</strong> Tu non ge sì collegate..\nL'indirizze IP tune avène fatte vedè ce te face de le cangiaminde. Ce tu <strong>[$1 trase]</strong> o <strong>[$2 ccreje 'nu cunde utende]</strong>, le cangiaminde tune avènene attribbuite a 'u nome utende tune, 'nzieme a otre beneficie.",
"anonpreviewwarning": "''Tu non ge sì collegate. Reggistranne le cangiaminde jndr'à sta pàgene iesse l'indirizze IP tune jndr'à storie.''",
"missingsummary": "'''Arrecuèrdete:''' Tu non g'è provvedute a 'nu riepileghe de le cangiaminde.\nCe tu cazze Reggistre 'n'otra vote, 'u cangiamende tue avène memorizzete senze une.",
"missingcommenttext": "Pe piacere mitte 'nu commende aqquà sotte.",
@@ -640,7 +655,7 @@
"parser-template-recursion-depth-warning": "Ha state supranete 'u limite di ricorsione de le template ($1)",
"language-converter-depth-warning": "'U convertitore de lènghe ha subranate 'u limite de profonnetà ($1)",
"node-count-exceeded-category": "Pàggene addò 'u cunde de le node ha sbunnate",
- "node-count-exceeded-warning": "Pagene ha sbunnate 'u condegge de le node",
+ "node-count-exceeded-warning": "'A pàgene ha sbunnate 'u condegge de le node",
"expansion-depth-exceeded-category": "Pàggene addò 'a profonnetà de l'espanzione jè supranate",
"expansion-depth-exceeded-warning": "Pàggene ca sbonnane 'a profonnetà de espanzione",
"parser-unstrip-loop-warning": "Cicle infinite acchiate",
@@ -680,7 +695,7 @@
"history-feed-empty": "'A vosce ca è cerchete non g'esiste.\nPò essere ca ha state scangellete da Uicchi o ha state renomenate..\nPruève a [[Special:Search|cercò sus a Uicchi]] 'mbrà le vosce cchiù rilevande.",
"rev-deleted-comment": "(cangiamnde d'u riepileghe scangellate)",
"rev-deleted-user": "(nome utende scangillete)",
- "rev-deleted-event": "(azione de l'archivie scangillete)",
+ "rev-deleted-event": "(dettaglie de l'archivije scangellate)",
"rev-deleted-user-contribs": "[nome utende o indirizze IP luate - cangiamende scunnute da le condrebbute]",
"rev-deleted-text-permission": "Sta revisione d'a pàgene ha state '''scangellate'''.\nPuè acchijà cchiù 'mbormaziune sus a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} l'archivije de le scangellaminde].",
"rev-deleted-text-unhide": "Sta revisione d'a pàgene ha state '''scangellate'''.\nPuè acchijà cchiù 'mbormaziune sus a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} l'archivije de le scangellaminde].\nTu puè angore [$1 vedè sta revisiona] ce tu avveramende a vuè ccù vide.",
@@ -701,13 +716,13 @@
"revdelete-no-file": "'U file specificate non g'esiste.",
"revdelete-show-file-confirm": "Si secure ca vuè ccu vide 'a revisione scangellate d'u file \"<nowiki>$1</nowiki>\" 'u $2 a le $3?",
"revdelete-show-file-submit": "Sìne",
- "logdelete-selected": "{{PLURAL:$1|Fatte de l'archivije selezionete|Fatte de l'archivije selezionete}}:",
+ "logdelete-selected": "{{PLURAL:$1|Fatte de l'archivije scacchiate}}:",
"revdelete-confirm": "Pe piacere conferme ca tu vuè ccu face sta cose, ce tu è capite le conseguenze e ce quidde ca ste face jè in accorde cu le [[{{MediaWiki:Policy-url}}|reghele]] de Uicchipèdie.",
"revdelete-suppress-text": "'A soppressione adda essere ausate '''sulamende''' jndr'à le case seguende:\n* 'Mbormaziune potenzialmende offenzive\n* Date personale inopportune\n*: ''indirizze, numere de telefono, codece fiscale, ecc.''",
"revdelete-legend": "'Mboste le restriziune sus 'a visibbilità",
"revdelete-hide-text": "Teste d'a revisione",
"revdelete-hide-image": "Scunne 'u codenute d'u fail",
- "revdelete-hide-name": "Scunne azione e obbiettive",
+ "revdelete-hide-name": "Scunne obbiettive e parametre",
"revdelete-hide-comment": "Cange 'u riepiloghe",
"revdelete-hide-user": "Nome utende/IP de quidde ca ha fatte 'u cangiamende",
"revdelete-hide-restricted": "Live le date da l'amministratore cumme pe l'otre utinde",
@@ -761,7 +776,6 @@
"mergehistory-reason": "Mutive:",
"mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "Archivije de le scuagghiaminde",
- "pagemerge-logentry": "scuagghiate [[$1]] jndr'à [[$2]] (revisiune fine a $3)",
"revertmerge": "Squascie",
"mergelogpagetext": "Stte stè 'na liste de le cchiù recende scuagghiaminde de le cunde de le vosce jndr'à 'n'otre.",
"history-title": "$1: Cunde de le revisiune",
@@ -802,7 +816,7 @@
"search-section": "(sezione $1)",
"search-suggest": "Ce signifeche: $1",
"search-interwiki-caption": "Pruggette sorelle",
- "search-interwiki-default": "$1 resultete:",
+ "search-interwiki-default": "Resultate da $1:",
"search-interwiki-more": "(de cchiù)",
"search-relatedarticle": "Colleghete",
"searchrelated": "colleghete",
@@ -900,7 +914,7 @@
"gender-female": "Femmene",
"prefs-help-gender": "Opzionale: ausate pe l'indirizzamende corrette d'u sesse jndr'à 'u softwer. Sta 'mbormazione jè pubbleche.",
"email": "Poste",
- "prefs-help-realname": "'U nome vere (quidde d'u munne reale) jè facoltative.\nCe tu 'u mitte, a fatje ca è fatte t'avène ricanusciute.",
+ "prefs-help-realname": "'U nome vere jè facoltative.\nCe tu 'u mitte, a fatje ca è fatte t'avène recanusciute.",
"prefs-help-email": "L'indirizze e-mail jè facoltative ma te dè 'a possibbilità de mannarte 'na password nova nove ce tu te scuèrde quedde ca tenive.",
"prefs-help-email-others": "Tu puè pure scacchià de lassà a l'otre de condattarte ausanne 'a pàgene utende toje o quedde de le 'ngazzaminde senze ca onne abbesogne de dicere ce si tu.",
"prefs-help-email-required": "L'indirizze e-mail jè obbligatorie.",
@@ -993,7 +1007,7 @@
"right-deletedtext": "Vide 'u teste scangellate e le cangiaminde 'mbrà le versiune scangellate",
"right-browsearchive": "Cirche le pàggene scangellate",
"right-undelete": "Repristine 'na pàgene",
- "right-suppressrevision": "Revide e repristine le revisiune scunnete da l'amministrature",
+ "right-suppressrevision": "'Ndruche, scunne e fà assè le revisiune specifiche de le pàggene da l'otre utinde",
"right-suppressionlog": "Vide l'archivije privete",
"right-block": "Blocche otre utinde a fà le cangiaminde",
"right-blockemail": "Blocche l'utente a fà mannà le email",
@@ -1088,7 +1102,7 @@
"recentchanges-label-unpatrolled": "Stu cangiamende non g'à state angore condrollate",
"recentchanges-legend-heading": "'''Leggende:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ('ndruche pure [[Special:NewPages|elenghe de le pàggene nuève]])",
- "rcnotefrom": "Sotte stonne le cangiaminde da '''$2''' ('nzigne a '''$1''' fatte vedè).",
+ "rcnotefrom": "Sotte {{PLURAL:$5|ste 'u cangiamende|stonne le cangiaminde}} da <strong>$3, $4</strong> ('nzigne a <strong>$1</strong> fatte vedè).",
"rclistfrom": "Fà vedè le urteme cangiaminde partenne da $3 $2",
"rcshowhideminor": "$1 cangiaminde stuèdeche",
"rcshowhidebots": "$1 bot",
@@ -1132,9 +1146,9 @@
"uploaderror": "Errore de carecamende",
"upload-recreate-warning": "'''Attenziò: 'Nu file cu stu nome ha state scangellate o spustate.'''\n\nL'archivije de de scangellaminde e de le spustaminde pe sta pàgene le puè acchià aqquà:",
"uploadtext": "Ause 'u module aqquà sotte pe carecà le file.\nPe vedè o cercà le file carecate precedendemende veje a 'a [[Special:FileList|liste de le file carecate]], le carecaminde sonde pure reggistrate jndr'à l'[[Special:Log/upload|archivije de le carecaminde]], le scangellazziune jndr'à l'[[Special:Log/delete|archivije de le scangellaminde]].\n\nPe ingludere 'nu file jndr'à 'na pàgene, ause 'u collegamende jndr'à une de le forme seguende:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' pe ausà 'a versiona comblete d'u file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' pe ausà 'nu file cu 'a dimenziona massime de 200 pixel jndr'à 'na scatele ca se iacchie sus a 'u margine sinistre cu 'u teste 'alt text' cumme didascalìe.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pe appundà direttamende a 'u file senze ca face vedè 'u file",
- "upload-permitted": "Tipe de file permesse: $1.",
- "upload-preferred": "Tipe de file preferite: $1.",
- "upload-prohibited": "Tipe de file proibbite: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tipe}} de file permesse: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipe}} de file preferite: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipe}} de file proibbite: $1.",
"uploadlogpage": "Archivije de le carecaminde",
"uploadlogpagetext": "Sotte ste 'na liste de le cchiù recende file carechete.\nVide 'a [[Special:NewFiles|gallerie de le file nuève]] pe vedè l'otre andeprime.",
"filename": "Nome d'u fail",
@@ -1170,9 +1184,9 @@
"largefileserver": "Stu file jè troppe gruesse pe quidde ca 'a configurazione d'u server permette.",
"emptyfile": "'U file ca tu è carecate pare ca è vacande.\nPò essere ca è scritte male 'u nome d'u file e n'à carecate 'n'otre.\nPe piacere condrolle ce tu avveramende vuè cu careche stu file.",
"windows-nonascii-filename": "Sta Uicchi non ge supporte le nome de le file cu le carattere speciale.",
- "fileexists": "'Nu file cu stu nome esiste già, pe piacere verifiche <strong>[[:$1]]</strong> ce tu non ge sì secure no 'u sce cangianne.\n[[$1|thumb]]",
+ "fileexists": "'Nu file cu stu nome esiste già, pe piacere verifiche <strong>[[:$1]]</strong> ce {{GENDER:|tu}} non ge sì secure no 'u sce cangianne.\n[[$1|thumb]]",
"filepageexists": "'A pàgene de descrizione pe stu file ha state già ccreiate 'u <strong>[[:$1]]</strong>, ma nisciune file cu stu nome osce a die esiste.\n'U riepileghe ca tu è mise non ge iesse sus 'a pàgene de descrizione.\nPe fà assè 'u riepileghe tu tìne abbesogne de cangiarle a mane.\n[[$1|thumb]]",
- "fileexists-extension": "'Nu file cu 'nu nome simile esiste già: [[$2|thumb]]\n* Nome d'u file ca vuè cu careche: <strong>[[:$1]]</strong>\n* Nome d'u file ca già esiste: <strong>[[:$2]]</strong>\nPe piacere vide ce scacchie 'nu nome differende.",
+ "fileexists-extension": "'Nu file cu 'nu nome simile esiste già: [[$2|thumb]]\n* Nome d'u file ca vuè cu careche: <strong>[[:$1]]</strong>\n* Nome d'u file ca già esiste: <strong>[[:$2]]</strong>\nPe piacere vide ce scacchie 'nu nome 'nu picca diverse?",
"fileexists-thumbnail-yes": "'U file pare ca jè 'n'immaggine de dimenzione ridotte ''(miniature)''. [[$1|thumb]]\nPe piacere condrolle 'u file <strong>[[:$1]]</strong>.\nCe 'u file condrollete jè d'a stesse dimenzione de quedda originale allore non ge stè abbesogne de carecà 'na miniatura de cchiù.",
"file-thumbnail-no": "'U nome d'u file accumenze pe <strong>$1</strong>.\nPare ca jè 'n'immaggine piccenne ''(miniature)''.\nCe tu tìne sulamende st'immaggine da carecà apposte, ce nò vide ce cange 'u file.",
"fileexists-forbidden": "'U file cu stu nome già esiste e non ge pò essere sovrascritte.<br />\nCe tu vuè angore carecà 'u file tue, pe piacere tuèrne rrete e ause 'nu nome nuève. [[File:$1|thumb|center|$1]]",
@@ -1291,8 +1305,8 @@
"license-header": "Licenziate da",
"nolicense": "Ninde selezionete",
"license-nopreview": "(L'andeprime non g'è disponibbile)",
- "upload_source_url": " ('na URL, valide e accessibbile pubblicamende)",
- "upload_source_file": " ('nu fail sus a 'u combiuter tue)",
+ "upload_source_url": " ('u file tune scacchiate da 'na URL, valide e accessibbile pubblicamende)",
+ "upload_source_file": " ('nu fail sus a 'u combiuter tune)",
"listfiles-summary": "Sta pàgena speciale face vedè tutte le file carecate.<br />\nQuanne jè filtrate da l'utende, sulamende le file addò quidde utende ave carecate le versiune cchiù recende, avènene fatte vedè.",
"listfiles_search_for": "Cirche pe nome de le media:",
"imgfile": "file",
@@ -1368,7 +1382,7 @@
"filedelete-maintenance": "Scangellaminde e repristinaminde de le file jè temboraneamende disabbilitate duranne 'a manutenzione.",
"filedelete-maintenance-title": "Non ge se pò scangellà 'u file",
"mimesearch": "Ricerca jndr'à 'u MIME",
- "mimesearch-summary": "Sta pàgene abbilitesce 'u filtre sus a le file pu tipe de MIME.\nInput: contenttype/subtype, pe esembie <code>image/jpeg</code>.",
+ "mimesearch-summary": "Sta pàgene abbilitesce 'u filtre sus a le file pu tipe de MIME.\nInput: contenttype/subtype o contenttype/*, pe esembie <code>image/jpeg</code>.",
"mimetype": "Tipe de MIME:",
"download": "scareche",
"unwatchedpages": "Pàggene ca non ge ste condrolle",
@@ -1386,7 +1400,6 @@
"statistics": "Statisteche",
"statistics-header-pages": "Pàgene de le statisteche",
"statistics-header-edits": "Cange le statisteche",
- "statistics-header-views": "Vide le statisteche",
"statistics-header-users": "Statisteche de l'utende",
"statistics-header-hooks": "Otre statisteche",
"statistics-articles": "Pàggene de le condenute",
@@ -1395,13 +1408,9 @@
"statistics-files": "File carechete",
"statistics-edits": "Cangiaminde de le pàggene da quanne sta {{SITENAME}} ha state ccrejete",
"statistics-edits-average": "Cangiaminde medie pe pàgene",
- "statistics-views-total": "Visite totele",
- "statistics-views-total-desc": "Le viste cu le pàggene inesistende e le pàggene speciale non ge sonde ingluse",
- "statistics-views-peredit": "Visite pe cangiaminde",
"statistics-users": "[[Special:ListUsers|Utinde reggistrete]]",
"statistics-users-active": "Utinde attive",
"statistics-users-active-desc": "Sonde l'utinde ca onne fatte quacchecose jndr'à l'urteme {{PLURAL:$1|giurne|$1 giurne}}",
- "statistics-mostpopular": "Pàggene cchiù visitete",
"pageswithprop": "Pàggene cu 'na probbietà d'a pàgene",
"pageswithprop-legend": "Pàggene cu 'na probbietà d'a pàgene",
"pageswithprop-text": "Sta pàgene elenghe le pàggene ca ausane 'na particolare probbietà d'a pàgene.",
@@ -1411,8 +1420,8 @@
"pageswithprop-prophidden-binary": "valore probbietà binarie scunnute ($1)",
"doubleredirects": "Ridirezionaminde a doppie",
"doubleredirectstext": "Sta pàgene elenghe le pàggene ca se ridirezionane sus a otre pàggene de ridirezionaminde.\nOgne righe condene 'nu collegamende a 'u prime e a 'u seconde ridirezionamende pe fà vedè addò arrive 'u seconde ridirezionamende, 'u quale jè normalmende 'a pàgena de destinaziona \"rèale\", addò 'u prime ridirezionamende avesse appondà.\nLe situaziune de <del>ingrocie</del> onne state resolte.",
- "double-redirect-fixed-move": "[[$1]] ha state spustate.\nMò s'avène redirette a [[$2]].",
- "double-redirect-fixed-maintenance": "Aggiuste le doppie redirezionaminde da [[$1]] a [[$2]].",
+ "double-redirect-fixed-move": "[[$1]] ha state spustate.\nAvène aggiornate automaticamende e mò s'avène redirette a [[$2]].",
+ "double-redirect-fixed-maintenance": "Aggiuste le doppie redirezionaminde da [[$1]] a [[$2]] jndr'à 'na fatije de manutenzione.",
"double-redirect-fixer": "Correttore de redirezionaminde",
"brokenredirects": "Redirezionamninde scuasciete",
"brokenredirectstext": "Le ridirezionaminde ca seguene appondene a pàggene ca non g'esistene:",
@@ -1441,7 +1450,6 @@
"uncategorizedtemplates": "Template senza categorije",
"unusedcategories": "Categorije ca non ge sonde ausete",
"unusedimages": "Fail ca non g'avènene ausete",
- "popularpages": "Pàggene cchiù canusciute",
"wantedcategories": "Categorije cerchete",
"wantedpages": "Pàggene cchiù cerchete",
"wantedpages-badtitle": "Titele invalide in mmienze a l'inzieme de le resultate: $1",
@@ -1451,7 +1459,7 @@
"wantedtemplates": "Template cchiù ausete",
"mostlinked": "Pàggene cchiù appundete",
"mostlinkedcategories": "Categorije cchiù appundete",
- "mostlinkedtemplates": "Template cchiù appundete",
+ "mostlinkedtemplates": "Pàggene cchiù appundate",
"mostcategories": "Pàggene cu 'nu sacche de categorije",
"mostimages": "Fail cchiù appundete",
"mostinterwikis": "Pàggene cu cchiù interuicchi de tutte",
@@ -1493,7 +1501,7 @@
"booksources": "Sorgende de le libbre",
"booksources-search-legend": "Cirche pe le fonde de le libbre",
"booksources-isbn": "ISBN:",
- "booksources-go": "Veje",
+ "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.",
"specialloguserlabel": "'Mblemendatore:",
@@ -1597,7 +1605,7 @@
"mywatchlist": "Pàggene condrollate",
"watchlistfor2": "Pe $1 $2",
"nowatchlist": "Non ge tine pàggene jndr'à liste de le pàggene condrollete.",
- "watchlistanontext": "Pe piacere $1 pe vedè o cangià le vosce sus a liste de le pàggene condrollete.",
+ "watchlistanontext": "Pe piacere tràse pe 'ndrucà o cangià le vosce sus l'elenghe de le pàggene condrollate.",
"watchnologin": "Non ge sinde colleghete",
"addwatch": "Mitte jndr'à le pàggene condrollate",
"addedwatchtext": "'A pàgene \"[[:$1]]\" ha state aggiunde jndr'à le [[Special:Watchlist|pàggene condrollate]].\nLe cangiaminde future a sta pàgene e 'a pàgene de le 'ngazzaminde associete le puè acchià aqquà.",
@@ -1609,11 +1617,11 @@
"unwatchthispage": "No condrollà cchiù 'a pàgene",
"notanarticle": "Non g'è 'na vosce",
"notvisiblerev": "'A revisione ha state scangellete",
- "watchlist-details": "{{PLURAL:$1|$1 pàgene|$1 pàggene}} jndr'à liste de le pàggene condrollete, scartanne le pàggene de le 'ngazzaminde.",
+ "watchlist-details": "{{PLURAL:$1|$1 pàgene|$1 pàggene}} jndr'à l'elenghe de le pàggene condrollate, scartanne le pàggene de le 'ngazzaminde.",
"wlheader-enotif": "* Notifiche pe email abbilitate.",
"wlheader-showupdated": "* Le pàggene ca onne state cangiate da l'urtema visite avènene fatte vedè in '''grascette'''",
- "wlnote": "Aqquà sotte {{PLURAL:$1|ste l'urteme cangiamende|stonne l'urteme '''$1''' cangiaminde}} jndr'à {{PLURAL:$2|l'urtema ore|l'urteme '''$2''' ore}}, jndr'à $3, $4.",
- "wlshowlast": "Vide l'urteme $1 ore $2 sciurne $3",
+ "wlnote": "Aqquà sotte {{PLURAL:$1|ste l'urteme cangiamende|stonne l'urteme <strong>$1</strong> cangiaminde}} jndr'à {{PLURAL:$2|l'urtema ore|l'urteme <strong>$2</strong> ore}}, jndr'à $3, $4.",
+ "wlshowlast": "Vide l'urteme $1 ore $2 sciurne",
"watchlist-options": "Opzione d'a liste de le pàggene condrollete",
"watching": "Fà vedè...",
"unwatching": "No fà vedè...",
@@ -1643,7 +1651,7 @@
"exbeforeblank": "'u condenute apprime d'a pulizie ere: '$1'",
"delete-confirm": "Scangille \"$1\"",
"delete-legend": "Scangille",
- "historywarning": "'''Vide Bbuene:''' 'a pàgene ca ste scangille tène 'na storie de cangiaminde cu cchiù o mene $1 {{PLURAL:$1|revisione|revisiune}}:",
+ "historywarning": "<strong>Vide Bbuene:</strong> 'A pàgene ca ste scangille tène 'na storie de cangiaminde cu cchiù o mene $1 {{PLURAL:$1|revisione|revisiune}}:",
"confirmdeletetext": "Vide Bbuene, vide ca ste scangille 'na pàgene ca tène pure nu sbuenne de cangiaminde.\nConferme quidde ca ste face, ce si sicure ca è capite quidde ca ste cumbine e ce è corrette rispette a [[{{MediaWiki:Policy-url}}|le regole de scangellazione]], ce no statte quiete.",
"actioncomplete": "Aziona Combletete",
"actionfailed": "Aziona fallite",
@@ -1660,7 +1668,6 @@
"delete-toobig": "Sta pàgene tène 'na storie de cangiaminde troppe longhe, sus a $1 {{PLURAL:$1|revisione|revisiune}}.\n'U scangellamende de stuèzze de pàgene avène ristrette pe prevenì 'ngasinaminde accidentale de {{SITENAME}}.",
"delete-warning-toobig": "Sta pàgene tène 'na storie troppo longhe, sus a $1 {{PLURAL:$1|revisione|revisiune}}.\nScangellanne pò ccreja casine sus a le operazione d'u database de {{SITENAME}};\nvà cunge cunge!",
"rollback": "Annulle le cangiaminde",
- "rollback_short": "Annulle",
"rollbacklink": "annulle 'u cangiaminde",
"rollbacklinkcount": "annulle $1 {{PLURAL:$1|cangiamende|cangiaminde}}",
"rollbacklinkcount-morethan": "annulle cchiù de $1 {{PLURAL:$1|cangiamende|cangiaminde}}",
@@ -1696,7 +1703,7 @@
"protect-locked-blocked": "Tu non ge puè cangià le levèlle de protezzione quanne si bloccate.\nAqquà stonne le 'mbostaziune corrende pa pàgene '''$1''':",
"protect-locked-dblock": "Le levèlle de protezzione non ge ponne essere cangete purcè stè 'nu blocche d'u database.\nAqquà stonne le 'mbostaziune corrende pa pàgene '''$1''':",
"protect-locked-access": "Tu non ge tine le permesse pe putè cangià le levèlle de protezione de le pàggene.\nChiste sonde le configuraziune corrende p'a pàgene '''$1''':",
- "protect-cascadeon": "Sta pàgene mò jè prutette purcè jè ingluse jndr'à {{PLURAL:$1|'a seguende pàgene, ca tène|le seguende pàggene, ca tènene}} a protezione a cascata appizzechete.\nTu puè cangià 'u levèlle de protezione de sta pàgene ma stu cangiamende non ge tène effette a cascata.",
+ "protect-cascadeon": "Sta pàgene mò jè prutette purcè jè 'ngluse jndr'à {{PLURAL:$1|'a seguende pàgene, ca tène|le seguende pàggene, ca tènene}} a protezione a cascata appizzecate.\nTu puè cangià 'u levèlle de protezione de sta pàgene ma stu cangiamende non ge tène effette a cascata.",
"protect-default": "Permitte a tutte l'utinde",
"protect-fallback": "Richieste d'u permesse \"$1\"",
"protect-level-autoconfirmed": "Blocche l'utinde nuève e chidde non reggistrate",
@@ -1815,7 +1822,7 @@
"autoblockid": "Autoblocche #$1",
"block": "Bluècche l'utende",
"unblock": "Sbluècche l'utende",
- "blockip": "Blocche l'utende",
+ "blockip": "Blocche {{GENDER:$1|l'utende}}",
"blockip-legend": "Bluecche l'utende",
"blockiptext": "Ause 'a schermata de sotte pe bloccà l'accesse in scritture de 'nu specifiche indirizze IP o utende.\nQuiste avessa essere fatte sulamende pe prevenìe 'u vandalisme e in accorde cu [[{{MediaWiki:Policy-url}}|le reghele]].\nMitte pure 'nu mutive specifiche aqquà sotte (pe esembije, nnomene 'a pàgene addò è acchiate 'u vandalisme).",
"ipaddressorusername": "Indirizze IP o nome de l'utende:",
@@ -1843,7 +1850,7 @@
"ipb-unblock-addr": "Sblocche $1",
"ipb-unblock": "Sblocche nome utende o indirizze IP",
"ipb-blocklist": "Vide le blocche ca esistene",
- "ipb-blocklist-contribs": "Condrebbute pe $1",
+ "ipb-blocklist-contribs": "Condrebbute pe {{GENDER:$1|$1}}",
"unblockip": "Sblocche l'utende",
"unblockiptext": "Ause 'a maschera aqquà sotte pe repristinà l'accesse in scritture a le indirizze IP o a le cunde utinde ca apprime avèrene state bloccate.",
"ipusubmit": "Live stu blocche",
@@ -2031,8 +2038,8 @@
"thumbnail_gd-library": "Configurazione d'a libbrerie GD ingomblete: funziona perse $1",
"thumbnail_image-missing": "'U file pare ca non ge se iacchie: $1",
"import": "Pàggene 'mbortete",
- "importinterwiki": "'Mborte da Transuicchi",
- "import-interwiki-text": "Schacchie 'na Uicchi e 'nu titele de pàgene da 'mbortà.\nLe date d'a revisione e 'u nome de le cangiature avènene preservate.\nTutte le aziune de 'mbortaziune 'mbrà le Uicchi sonde reggistrate jndr'à l'[[Special:Log/import|archivije de le 'mbortaziune]].",
+ "importinterwiki": "'Mborte da 'n'otra uicchi",
+ "import-interwiki-text": "Schacchie 'na Uicchi e 'nu titole de pàgene da 'mbortà.\nLe date d'a revisione e 'u nome de le cangiature avènene preservate.\nTutte le aziune de 'mbortaziune 'mbrà le Uicchi sonde reggistrate jndr'à l'[[Special:Log/import|archivije de le 'mbortaziune]].",
"import-interwiki-history": "Copie tutte 'a sotrie de le versiune de sta pàgene",
"import-interwiki-templates": "Inglude tutte le template",
"import-interwiki-submit": "'Mborte",
@@ -2062,29 +2069,25 @@
"import-upload": "Careche le date in XML",
"import-token-mismatch": "S'à perse 'a sessione de le date. Pruève 'n'otra vote.",
"import-invalid-interwiki": "Non ge pozze 'mbortà da 'a Uicchi specificate.",
- "import-error-edit": "Pàgene \"$1\" non g' 'mbortate purcé tu non ge tìne le permesse pe cangiarle.",
- "import-error-create": "Pàgene \"$1\" non g' 'mbortate purcé tu non ge tìne le permesse pe ccrejarle.",
- "import-error-interwiki": "Pagene \"$1\" non g'ha state 'mbortate purcé 'u nome sue jè riservate pe collegaminde esterne (interuicchi).",
+ "import-error-edit": "Pàgene \"$1\" non g'ha state 'mbortate purcé tu non ge tìne le permesse pe cangiarle.",
+ "import-error-create": "Pàgene \"$1\" non g'ha state 'mbortate purcé tu non ge tìne le permesse pe ccrejarle.",
+ "import-error-interwiki": "Pagene \"$1\" non g'ha state 'mbortate purcé 'u nome sue jè riservate pe collegaminde de fore (interuicchi).",
"import-error-special": "'A pagena \"$1\" non g'ha state 'mbortate purcé apponde a 'nu namespace speciale ca non g'è permesse a le pàggene normale.",
- "import-error-invalid": "'A pàgene \"$1\" non g'ha state 'mbortate purcé 'u nome jè invalide.",
+ "import-error-invalid": "'A pàgene \"$1\" non g'ha state 'mbortate purcé 'u nome sus a 'u quale avessa essere 'mborate non g'è valide sus a sta uicchi.",
"import-error-unserialize": "'A revisione $2 d'a pàgene \"$1\" non ge pò essere deserializzate. 'A revisione ha state reportate pe ausà 'u modelle d'u condenute $3 serializzate cumme $4.",
"import-options-wrong": "{{PLURAL:$2|opzione|opziune}} sbagliate: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "'A pàgene radice date tène 'nu titole invalide.",
"import-rootpage-nosubpage": "Namespace \"$1\" d'a pàgene prengepàle non ge permette le sottopàggene.",
"importlogpage": "Archivie de le 'mbortaziune",
"importlogpagetext": "'Mbortaziune amministrative de pàggene cu 'a storie de le cangiaminde da otre Uicchi.",
- "import-logentry-upload": "'mbortete [[$1]] da 'u fail carechete",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisione|revisiune}}",
- "import-logentry-interwiki": "transuicchied $1",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisione|revisiune}} da $2",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisione|revisiune}} 'mbortate",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisione|revisiune}} 'mbortate da $2",
"javascripttest": "Test de JavaScript",
- "javascripttest-title": "Stoche a esegue $1 test",
"javascripttest-pagetext-noframework": "Sta pàgene jè riservate pe le esecuziune de le test de Javascript.",
"javascripttest-pagetext-unknownframework": "Ambiende de teste scanusciute \"$1\".",
"javascripttest-pagetext-frameworks": "Pe piacere scacchie une de le seguende ambiende de test: $1",
"javascripttest-pagetext-skins": "Scacchie 'n'aspette pe eseguì le test cu:",
"javascripttest-qunit-intro": "Vide 'a [$1 documendazione d'u test] sus a mediawiki.org.",
- "javascripttest-qunit-heading": "Ambiende de test MediaUicchi JavaScript QUnit",
"tooltip-pt-userpage": "'A pàgene utende meje",
"tooltip-pt-anonuserpage": "'A pàgene utende pe l'IP ca tu ste cange cumme",
"tooltip-pt-mytalk": "'Ngazzaminde mie",
@@ -2196,7 +2199,6 @@
"pageinfo-robot-policy": "Indicizzate da le robbot",
"pageinfo-robot-index": "Permesse",
"pageinfo-robot-noindex": "Non permesse",
- "pageinfo-views": "Numere de visite",
"pageinfo-watchers": "Numere de visitature d'a pàgene",
"pageinfo-few-watchers": "Mene de $1 {{PLURAL:$1|visitatore|visitature}}",
"pageinfo-redirects-name": "Numere de redirezionaminde a sta pàgene",
@@ -2715,7 +2717,6 @@
"exif-urgency-low": "Vasce ($1)",
"exif-urgency-high": "Ierte ($1)",
"exif-urgency-other": "Priorità definite da l'utende ($1)",
- "watchlistall2": "tutte",
"namespacesall": "tutte",
"monthsall": "tutte",
"confirmemail": "Conferme l'indirizze e-mail",
@@ -2731,8 +2732,8 @@
"confirmemail_success": "L'indirizze e-mail tue ha state confermate.\nTu, mò te puè [[Special:UserLogin|collegà]] e te puè devertì sus 'a Uicchipèdie.",
"confirmemail_loggedin": "L'indirizze e-mail tue ha state confermate.",
"confirmemail_subject": "Indirizze email de conferme pe {{SITENAME}}",
- "confirmemail_body": "Quacchedune, pò essere tu, fa l'indirizze IP $1,\nha reggistrate 'nu cunde utende \"$2\" cu st'indirizze email sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tue e pe attivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u borwser tue:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme more 'u $4.",
- "confirmemail_body_changed": "Quacchedune, pò essere tu, da l'indirizze IP $1,\nha cangiate l'indirizze e-mail d'u cunde utende \"$2\" cu st'indirizze e-mail sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tune e pe reattivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u borwser tune:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme scade 'u $4.",
+ "confirmemail_body": "Quacchedune, pò essere tu, fa l'indirizze IP $1,\nha reggistrate 'nu cunde utende \"$2\" cu st'indirizze email sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tue e pe attivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u browser tue:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme more 'u $4.",
+ "confirmemail_body_changed": "Quacchedune, pò essere tu, da l'indirizze IP $1,\nha cangiate l'indirizze e-mail d'u cunde utende \"$2\" cu st'indirizze e-mail sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tune e pe reattivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u browser tune:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme scade 'u $4.",
"confirmemail_body_set": "Quacchedune, pò essere tu, da l'indirizze IP $1,\nha cangiate l'indirizze e-mail d'u cunde utende \"$2\" cu st'indirizze e-mail sus a {{SITENAME}}.\n\nPe confermà ca stu cunde ète avveramende 'u tune e pe attivà 'a funzione email de {{SITENAME}}, iapre stu collegamende jndr'à 'u browser tune:\n\n$3\n\nCe tu *NON* g'è reggistrate 'u cunde utende, segue stu collegamende pe scangellà l'indirizze email de conferme:\n\n$5\n\nStu codece de conferme scade 'u $4.",
"confirmemail_invalidated": "Conferme de l'indirizze e-mail scangellete",
"invalidateemail": "Scangille 'a conferme de l'e-mail",
@@ -2870,11 +2871,10 @@
"hebrew-calendar-m12-gen": "Elul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|'ngazzaminde]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "Estenzione d'u tag scanuscite \"$1\"",
"duplicate-defaultsort": "'''Attenziò:''' 'A chiave de arrangamende de default \"$2\" sovrascrive quedda precedende \"$1\".",
"version": "Versione",
"version-extensions": "Estenziune installete",
- "version-skins": "Skin",
+ "version-skins": "Skin installate",
"version-specialpages": "Pàggene speciele",
"version-parserhooks": "Hook analizzature",
"version-variables": "Variabbele",
@@ -2887,7 +2887,7 @@
"version-parser-function-hooks": "Funziune hook de l'analizzatore",
"version-hook-name": "Nome de l'hook",
"version-hook-subscribedby": "Sottoscritte da",
- "version-version": "(Versione $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[nisciune nome]",
"version-svn-revision": "(r$2)",
"version-license": "Licenze",
@@ -2944,6 +2944,7 @@
"specialpages-group-wiki": "Date e struminde",
"specialpages-group-redirects": "Redirezionaminde de le pàggene speciele",
"specialpages-group-spam": "Struminde p'u spam",
+ "specialpages-group-developer": "Struminde pe le sviluppature",
"blankpage": "Pàgene vacande",
"intentionallyblankpage": "Sta pàgene ha state lassete vianghe apposte",
"external_image_whitelist": " #Lasse sta linèe satte satte a cumme ste<pre>\n#Mitte le frammende de l'espressione regolare (proprie 'a parte ca vè 'mbrà le //) sotte\n#Chidde ca se combrondene cu successe cu le immaggine de le URL esterne (collegaminde cavede)\n#Chidde ca cu 'u combronde avènene visualizzate cumme immaggine, oppure sulamende 'nu collegamende a l'immaggine avènene visualizzate\n#Linèe ca accumenzane pe # sonde trattate cumme commende\n#Quiste ète insenzitive pe le maiuscole e le minuscole\n\n#Mitte tutte le frammende regex sus a sta linèe. Lasse sta linèe satte satte a cumme ste</pre>",
@@ -2971,10 +2972,10 @@
"compare-invalid-title": "'U titele ca è specificate jè invalide.",
"compare-title-not-exists": "'U titele ca è specificate non g'esiste.",
"compare-revision-not-exists": "'A revisione ca è specificate non g'esiste.",
- "dberr-problems": "Simw spiacende! Stu site stè 'ngondre de le diffcoltà tecniche.",
+ "dberr-problems": "Sime spiacende! Stu site stè 'ngondre de le difficoltà tecniche.",
"dberr-again": "Aspitte quacche minute e pò recareche.",
- "dberr-info": "(Non ge riuscime a condattà 'u server d'u database: $1)",
- "dberr-info-hidden": "(Non ge pozze condattà 'u server d'u database)",
+ "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à.",
@@ -3027,19 +3028,20 @@
"logentry-rights-rights-legacy": "$1 ave {{GENDER:$2|cangiate}} 'u membre d'u gruppe pe $3",
"logentry-rights-autopromote": "$1 ha state {{GENDER:$2|promosse}} automaticamende da $4 a $5",
"rightsnone": "(ninde)",
+ "revdelete-summary": "cange 'u riepileghe",
+ "feedback-adding": "Aggiunge feedback a 'a pàgene...",
+ "feedback-bugcheck": "Granne! Appene verificate ca non g'è une de le [$1 bug canusciute].",
+ "feedback-bugnew": "Agghie verificate. Manne 'nu bug nuève",
"feedback-bugornote": "Ce tu si pronde a descrivere 'nu probbleme tecniche cu le dettaglie pe piacere [$1 manne 'nu bug].\nCe nò, tu puè ausà 'u module facile aqquà sotte. 'U commende tune avène aggiunde a 'a pàgene [$3 $2]\", seguenne 'u nome utende tune e ce browser tu ste ause.",
- "feedback-subject": "Oggette:",
- "feedback-message": "Messàgge:",
"feedback-cancel": "Annulle",
- "feedback-submit": "Conferme 'a segnalazione",
- "feedback-adding": "Aggiunge feedback a 'a pàgene...",
+ "feedback-close": "Fatte",
"feedback-error1": "Errore: resultate inaspettate da l'API",
"feedback-error2": "Errore: Cangiamende fallite",
"feedback-error3": "Errore: Nisciuna resposte da l'API",
+ "feedback-message": "Messàgge:",
+ "feedback-subject": "Oggette:",
+ "feedback-submit": "Conferme",
"feedback-thanks": "Grazie! 'A segnalaziona toje ha state mannate a 'a pàgene \"[$2 $1]\".",
- "feedback-close": "Fatte",
- "feedback-bugcheck": "Granne! Appene verificate ca non g'è une de le [$1 bug canusciute].",
- "feedback-bugnew": "Agghie verificate. Manne 'nu bug nuève",
"searchsuggest-search": "Cirche",
"searchsuggest-containing": "tène...",
"api-error-badaccess-groups": "Tu non ge puè carecà file sus a sta Uicchi.",
diff --git a/languages/i18n/ru.json b/languages/i18n/ru.json
index 41fc0f40..06b4b7ba 100644
--- a/languages/i18n/ru.json
+++ b/languages/i18n/ru.json
@@ -69,11 +69,21 @@
"Niklem",
"Agilight",
"Oleg3280",
- "Nirovulf"
+ "Nirovulf",
+ "Striking Blue",
+ "Fitoschido",
+ "MaxBioHazard",
+ "Tourorist",
+ "Purodha",
+ "Максим777",
+ "Sealle",
+ "Macofe",
+ "DonRumata",
+ "Mariya"
]
},
"tog-underline": "Подчёркивание ссылок:",
- "tog-hideminor": "Скрывать малые правки в списке свежих правок",
+ "tog-hideminor": "Скрывать малые правки из списка свежих правок",
"tog-hidepatrolled": "Скрывать патрулированные правки в списке свежих правок",
"tog-newpageshidepatrolled": "Скрывать отпатрулированные страницы в списке новых страниц",
"tog-extendwatchlist": "Расширенный список наблюдения, включающий все изменения, а не только последние",
@@ -97,7 +107,7 @@
"tog-shownumberswatching": "Показывать число участников, включивших страницу в свой список наблюдения",
"tog-oldsig": "Текущая подпись:",
"tog-fancysig": "Собственная вики-разметка подписи (без автоматической ссылки)",
- "tog-uselivepreview": "Использовать быстрый предварительный просмотр (экспериментально)",
+ "tog-uselivepreview": "Использовать быстрый предварительный просмотр",
"tog-forceeditsummary": "Предупреждать, когда не заполнено поле описания правки",
"tog-watchlisthideown": "Скрывать мои правки из списка наблюдения",
"tog-watchlisthidebots": "Скрывать правки ботов из списка наблюдения",
@@ -189,11 +199,11 @@
"hidden-categories": "{{PLURAL:$1|1=Скрытая категория|Скрытые категории}}",
"hidden-category-category": "Скрытые категории",
"category-subcat-count": "{{PLURAL:$2|1=Эта категория содержит только следующую подкатегорию.|В этой категории отображается $1 {{PLURAL:$1|подкатегория|подкатегорий|подкатегории}} из имеющихся $2.}}",
- "category-subcat-count-limited": "В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегорий|$1 подкатегории}}.",
- "category-article-count": "{{PLURAL:$2|1=Эта категория содержит единственную страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страниц|Показаны $1 страницы}} из $2, {{PLURAL:$2|находящейся|находящихся}} в данной категории.}}",
- "category-article-count-limited": "В этой категории {{PLURAL:$1|$1 страница|$1 страниц|$1 страницы|1=только одна страница}}.",
- "category-file-count": "{{PLURAL:$2|1=Эта категория содержит единственный файл.|{{PLURAL:$1|Показан $1 файл|Показано $1 файлов|Показаны $1 файла}} из $2, {{PLURAL:$2|находящегося|находящихся}} в данной категории.}}",
- "category-file-count-limited": "В этой категории {{PLURAL:$1|$1 файл|$1 файлов|$1 файла|1=только один файл}}.",
+ "category-subcat-count-limited": "В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегории|$1 подкатегорий}}.",
+ "category-article-count": "{{PLURAL:$2|1=Эта категория содержит единственную страницу.|{{PLURAL:$1|Показана $1 страница|Показаны $1 страницы|Показано $1 страниц}} из $2, {{PLURAL:$2|находящейся|находящихся}} в данной категории.}}",
+ "category-article-count-limited": "В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц|1=только одна страница}}.",
+ "category-file-count": "{{PLURAL:$2|1=Эта категория содержит единственный файл.|{{PLURAL:$1|Показан $1 файл|Показано $1 файла|Показаны $1 файлов}} из $2, {{PLURAL:$2|находящегося|находящихся}} в данной категории.}}",
+ "category-file-count-limited": "В этой категории {{PLURAL:$1|$1 файл|$1 файла|$1 файлов|1=только один файл}}.",
"listingcontinuesabbrev": "(продолжение)",
"index-category": "Индексируемые страницы",
"noindex-category": "Неиндексируемые страницы",
@@ -245,8 +255,8 @@
"delete": "Удалить",
"deletethispage": "Удалить эту страницу",
"undeletethispage": "Восстановить эту страницу",
- "undelete_short": "Восстановить {{PLURAL:$1|$1 правку|$1 правок|$1 правки|1=правку}}",
- "viewdeleted_short": "Просмотр {{PLURAL:$1|$1 удалённой правки|$1 удалённых правок|удалённой правки}}",
+ "undelete_short": "Восстановить {{PLURAL:$1|$1 правку|$1 правки|$1 правок|1=правку}}",
+ "viewdeleted_short": "Просмотр {{PLURAL:$1|$1 удалённой правки|удалённой правки|$1 удалённых правок}}",
"protect": "Защитить",
"protect_change": "изменить",
"protectthispage": "Защитить эту страницу",
@@ -274,7 +284,7 @@
"redirectpagesub": "Страница-перенаправление",
"redirectto": "Перенаправление на:",
"lastmodifiedat": "Последнее изменение этой страницы: $2, $1.",
- "viewcount": "К этой странице обращались $1 {{PLURAL:$1|раз|раз|раза}}.",
+ "viewcount": "К этой странице обращались $1 {{PLURAL:$1|раз|раза|раз}}.",
"protectedpage": "Защищённая страница",
"jumpto": "Перейти к:",
"jumptonavigation": "навигация",
@@ -285,6 +295,7 @@
"pool-queuefull": "Накопитель запросов полон",
"pool-errorunknown": "Неизвестная ошибка",
"pool-servererror": "Служба счётчика пула недоступна ($1).",
+ "poolcounter-usage-error": "Ошибка использования: $1",
"aboutsite": "Описание {{grammar:genitive|{{SITENAME}}}}",
"aboutpage": "Project:Описание",
"copyright": "Содержимое доступно по лицензии $1 (если не указано иное).",
@@ -294,6 +305,7 @@
"disclaimers": "Отказ от ответственности",
"disclaimerpage": "Project:Отказ от ответственности",
"edithelp": "Справка по редактированию",
+ "helppage-top-gethelp": "Помощь",
"mainpage": "Заглавная страница",
"mainpage-description": "Заглавная страница",
"policy-url": "Project:Правила",
@@ -331,7 +343,7 @@
"confirmable-no": "Нет",
"thisisdeleted": "Просмотреть или восстановить $1?",
"viewdeleted": "Просмотреть $1?",
- "restorelink": "{{PLURAL:$1|$1 удалённую правку|$1 удалённых правок|$1 удалённые правки|1=удалённую правку}}",
+ "restorelink": "{{PLURAL:$1|$1 удалённую правку|$1 удалённые правки|$1 удалённых правок|1=удалённую правку}}",
"feedlinks": "В виде:",
"feed-invalid": "Неправильный тип канала для подписки.",
"feed-unavailable": "Ленты синдикации недоступны",
@@ -373,10 +385,13 @@
"readonly_lag": "База данных автоматически заблокирована от изменений на время, пока вторичные сервера базы данных не синхронизируются с первичным.",
"internalerror": "Внутренняя ошибка",
"internalerror_info": "Внутренняя ошибка: $1",
+ "internalerror-fatal-exception": "Неустранимое исключение типа «$1»",
"filecopyerror": "Невозможно скопировать файл «$1» в «$2».",
"filerenameerror": "Невозможно переименовать файл «$1» в «$2».",
"filedeleteerror": "Невозможно удалить файл «$1».",
"directorycreateerror": "Невозможно создать директорию «$1».",
+ "directoryreadonlyerror": "Каталог «$1» доступен только для чтения.",
+ "directorynotreadableerror": "Каталог «$1» не читается.",
"filenotfound": "Невозможно найти файл «$1».",
"unexpected": "Неподходящее значение: «$1»=«$2».",
"formerror": "Ошибка: невозможно передать данные формы",
@@ -398,7 +413,8 @@
"viewsourcetext": "Вы можете просмотреть и скопировать исходный текст этой страницы:",
"viewyourtext": "Вы можете просмотреть и скопировать исходный текст '''ваших правок''' на этой странице:",
"protectedinterface": "Эта страница содержит интерфейсное сообщение программного обеспечения. Во избежание вандализма её изменение запрещено.\nЧтобы добавить или изменить перевод этого сообщения во всех вики, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net]",
- "editinginterface": "'''Внимание:''' Вы редактируете страницу, содержащую текст интерфейса программного обеспечения.\nЕё изменение повлияет на внешний вид интерфейса для других пользователей этой вики.\nЧтобы добавить или изменить перевод этого сообщения, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net].",
+ "editinginterface": "<strong>Внимание:</strong> Вы редактируете страницу, содержащую текст интерфейса программного обеспечения.\nЕё изменение повлияет на внешний вид интерфейса для других пользователей этой вики.",
+ "translateinterface": "Чтобы добавить или изменить перевод этого сообщения, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net].",
"cascadeprotected": "Страница защищена от изменений, поскольку она включена в {{PLURAL:$1|1=следующую страницу, для которой|следующие страницы, для которых}} включена каскадная защита:\n$2",
"namespaceprotected": "У вас нет разрешения редактировать страницы в пространстве имён «$1».",
"customcssprotected": "У вас нет разрешения редактировать эту CSS-страницу, так как она содержит личные настройки другого участника.",
@@ -455,6 +471,8 @@
"userlogin-resetlink": "Забыли данные для входа?",
"userlogin-resetpassword-link": "Сбросить ваш пароль?",
"userlogin-helplink2": "Помощь по входу",
+ "userlogin-loggedin": "Вы уже вошли как {{GENDER:$1|$1}}.\nИспользуйте форму ниже, чтобы войти под другой учётной записью.",
+ "userlogin-createanother": "Создать другую учётную запись",
"createacct-emailrequired": "Адрес электронной почты",
"createacct-emailoptional": "Адрес электронной почты (необязательно)",
"createacct-email-ph": "Введите свой адрес электронной почты",
@@ -469,9 +487,9 @@
"createacct-submit": "Создать учётную запись",
"createacct-another-submit": "Создать ещё одну запись",
"createacct-benefit-heading": "{{SITENAME}} — совместный труд таких же людей, как вы.",
- "createacct-benefit-body1": "{{PLURAL:$1|правка|правок|правки}}",
- "createacct-benefit-body2": "{{PLURAL:$1|статья|статей|статьи}}",
- "createacct-benefit-body3": "{{PLURAL:$1|участник|участников|участника}} за последнее время",
+ "createacct-benefit-body1": "{{PLURAL:$1|правка|правки|правок}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|статья|статьи|статей}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|участник|участника|участников}} за последнее время",
"badretype": "Введённые вами пароли не совпадают.",
"userexists": "Введённое имя участника уже используется.\nПожалуйста, выберите другое имя.",
"loginerror": "Ошибка опознавания участника",
@@ -490,6 +508,7 @@
"wrongpassword": "Введённый вами пароль неверен. Попробуйте ещё раз.",
"wrongpasswordempty": "Пожалуйста, введите непустой пароль.",
"passwordtooshort": "Пароль должен состоять не менее чем из $1 {{PLURAL:$1|символа|символов}}.",
+ "passwordtoolong": "Пароль не должен превышать символов.",
"password-name-match": "Введённый пароль должен отличаться от имени участника.",
"password-login-forbidden": "Использование этого имени участника и пароля запрещено.",
"mailmypassword": "Сбросить пароль",
@@ -561,7 +580,7 @@
"passwordreset-capture-help": "Если вы установите данную отметку, то вам будет показано письмо с временным паролем, отправляемое участнику.",
"passwordreset-email": "Адрес электронной почты:",
"passwordreset-emailtitle": "Сведения об учётной записи {{SITENAME}}",
- "passwordreset-emailtext-ip": "Кто-то (возможно, вы, с IP-адреса $1) запросил сброс пароля к вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дней|$5 дня|1=один день}}.\nВы должны представиться системе и выбрать новый пароль. \nЕсли вы не делали этого запроса, или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
+ "passwordreset-emailtext-ip": "Кто-то (возможно, вы, с IP-адреса $1) запросил сброс пароля к вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дня|$5 дней|1=один день}}.\nВы должны представиться системе и выбрать новый пароль. \nЕсли вы не делали этого запроса, или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
"passwordreset-emailtext-user": "Участник $1 из проекта {{SITENAME}} запросил сброс пароля для вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дней|$5 дня|1=один день}}.\nВы должны представиться системе и выбрать новый пароль.\nЕсли вы не делали этого запроса или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
"passwordreset-emailelement": "Имя участника: $1\nВременный пароль: $2",
"passwordreset-emailsent": "Отправлено электронное письмо с информацией о сбросе пароля.",
@@ -613,10 +632,12 @@
"anoneditwarning": "<strong>Внимание!</strong> Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы <strong>[$1 войдёте]</strong> или <strong>[$2 создадите учётную запись]</strong>, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.",
"anonpreviewwarning": "''Вы не представились системе. Сохранение приведёт к записи вашего IP-адреса в историю изменений страницы.''",
"missingsummary": "'''Напоминание.''' Вы не дали краткого описания изменений. При повторном нажатии на кнопку «{{int:savearticle}}», ваши изменения будут сохранены без комментария.",
+ "selfredirect": "<strong>Внимание:</strong> Вы создаёте перенаправление на ту же самую статью.\nВозможно, Вы выбрали неправильную целевую страницу для перенаправления или редактируете не ту страницу.\nЕсли Вы нажмёте кнопку «{{int:savearticle}}» ещё раз, перенаправление всё же будет создано.",
"missingcommenttext": "Пожалуйста, введите ниже ваше сообщение.",
"missingcommentheader": "'''Напоминание.''' Вы не указали тему/заголовок для этого комментария.\nПри повторном нажатии на кнопку «{{int:savearticle}}», ваша правка будет записана без заголовка.",
"summary-preview": "Описание будет:",
"subject-preview": "Заголовок будет:",
+ "previewerrortext": "При попытке отобразить предварительный просмотр ваших изменений произошла ошибка.",
"blockedtitle": "Участник заблокирован",
"blockedtext": "'''Ваша учётная запись или IP-адрес заблокированы.'''\n\nБлокировка произведена администратором $1.\nУказана следующая причина: «''$2''».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\nВаш IP-адрес — $3, идентификатор блокировки — $5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
"autoblockedtext": "Ваш IP-адрес автоматически заблокирован в связи с тем, что он ранее использовался кем-то из участников, заблокированных {{GENDER:$4|участником|участницей}} $1. \nБыла указана следующая причина блокировки:\n\n: «$2».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\n\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\n\nВаш IP-адрес — $3, идентификатор блокировки — #$5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
@@ -669,7 +690,7 @@
"yourdiff": "Различия",
"copyrightwarning": "Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии $2 (см. $1).\nЕсли вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.<br />\nВы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из\nисточника, допускающего свободное распространение и изменение своего содержимого.<br />\n'''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!'''",
"copyrightwarning2": "Пожалуйста, учтите, что любой ваш вклад в проект «{{SITENAME}}» может быть отредактирован или удалён другими участниками.\nЕсли вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.<br />\nВы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. $1).\n'''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!'''",
- "longpageerror": "'''ОШИБКА: записываемый вами текст имеет размер $1 {{PLURAL:$1|килобайт|килобайт|килобайта}}, что больше, чем установленный предел в $2 {{PLURAL:$2|килобайт|килобайт|килобайта}}. Страница не может быть сохранена.'''",
+ "longpageerror": "'''ОШИБКА: записываемый вами текст имеет размер $1 {{PLURAL:$1|килобайт|килобайта|килобайт}}, что больше, чем установленный предел в $2 {{PLURAL:$2|килобайт|килобайта|килобайт}}. Страница не может быть сохранена.'''",
"readonlywarning": "'''Предупреждение. База данных заблокирована в связи с процедурами обслуживания, поэтому вы не можете записать ваши изменения прямо сейчас.'''\nВозможно, вам следует скопировать этот текст в текстовый файл, чтобы сохранить его на будущее.\n\nАдминистратор, заблокировавший базу данных, оставил следующее объяснение: $1",
"protectedpagewarning": "'''Предупреждение. Эта страница защищена от изменений, её могут редактировать только участники с полномочиями администраторов.'''\nНиже для справки приведена последняя запись журнала:",
"semiprotectedpagewarning": "'''Замечание.''' Эта страница была защищена; редактировать её могут только зарегистрированные участники.\nНиже для справки приведена последняя запись журнала:",
@@ -711,6 +732,10 @@
"content-model-text": "обычный текст",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Пустой объект",
+ "content-json-empty-array": "Пустой массив",
+ "duplicate-args-category": "Страницы, использующие повторяющиеся аргументы в вызовах шаблонов",
+ "duplicate-args-category-desc": "Страницы, содержащие вызовы шаблонов, использующие повторяющиеся аргументы, такие как <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=bar}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Внимание!''' Эта страница содержит слишком много вызовов ресурсоёмких функций.\n\nДолжно быть не более {{PLURAL:$2|$2 вызова|$2 вызовов|1=одного вызова}}, в то время как сейчас здесь $1 {{PLURAL:$1|вызов|вызовов|вызова}}.",
"expensive-parserfunction-category": "Страницы со слишком большим количеством вызовов ресурсоёмких функций",
"post-expand-template-inclusion-warning": "Предупреждение: суммарный размер включаемых шаблонов слишком велик.\nНекоторые шаблоны не будут включены.",
@@ -757,7 +782,7 @@
"history-show-deleted": "Только удалённые",
"histfirst": "старейшие",
"histlast": "новейшие",
- "historysize": "($1 {{PLURAL:$1|байт|байт|байта}})",
+ "historysize": "($1 {{PLURAL:$1|байт|байта|байт}})",
"historyempty": "(пусто)",
"history-feed-title": "История изменений",
"history-feed-description": "История изменений этой страницы в вики",
@@ -765,7 +790,7 @@
"history-feed-empty": "Запрашиваемой страницы не существует.\nОна могла быть удалена или переименована.\nПопробуйте [[Special:Search|найти в вики]] похожие страницы.",
"rev-deleted-comment": "(описание правки удалено)",
"rev-deleted-user": "(имя автора стёрто)",
- "rev-deleted-event": "(запись удалена)",
+ "rev-deleted-event": "(детали журнала удалены)",
"rev-deleted-user-contribs": "[имя участника или IP-адрес удалены — правка скрыта со страницы вклада]",
"rev-deleted-text-permission": "Эта версия страницы была '''удалена'''.\nВозможно, объяснения даны в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
"rev-suppressed-text-permission": "Эта версия страницы была <strong>скрыта</strong>.\nОбъяснения удаления приведены в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} журнале сокрытий].",
@@ -799,7 +824,7 @@
"revdelete-legend": "Установить ограничения:",
"revdelete-hide-text": "Текст правки",
"revdelete-hide-image": "Скрыть содержимое файла",
- "revdelete-hide-name": "Скрыть действие и его объект",
+ "revdelete-hide-name": "Скрыть цель и параметры",
"revdelete-hide-comment": "Описание изменений",
"revdelete-hide-user": "Имя участника/IP-адрес",
"revdelete-hide-restricted": "Скрыть данные также и от администраторов",
@@ -843,7 +868,7 @@
"mergehistory-empty": "Не найдены правки для объединения.",
"mergehistory-success": "$3 {{PLURAL:$3|правка|правок|правки}} из [[:$1]] успешно {{PLURAL:$3|перенесена|перенесены}} в [[:$2]].",
"mergehistory-fail": "Не удалось произвести объединение историй страниц, пожалуйста, проверьте параметры страницы и времени.",
- "mergehistory-fail-toobig": "Не удаётся выполнить слияние истории, так как необходимо перенести больше допустимого лимита в $1 {{PLURAL:$1|версию|версий|версии}}.",
+ "mergehistory-fail-toobig": "Не удаётся выполнить слияние истории, так как необходимо перенести больше допустимого лимита в $1 {{PLURAL:$1|версию|версии|версий}}.",
"mergehistory-no-source": "Исходная страница «$1» не существует.",
"mergehistory-no-destination": "Целевая страница «$1» не существует.",
"mergehistory-invalid-source": "Источник должен иметь правильный заголовок.",
@@ -853,7 +878,6 @@
"mergehistory-same-destination": "Исходная и целевая страницы должны различаться",
"mergehistory-reason": "Причина:",
"mergelog": "Журнал объединений",
- "pagemerge-logentry": "объединена [[$1]] и [[$2]] (версии вплоть до $3)",
"revertmerge": "Разделить",
"mergelogpagetext": "Ниже приведён список последних объединений историй страниц.",
"history-title": "$1 — история изменений",
@@ -865,8 +889,8 @@
"showhideselectedversions": "Показать/скрыть выбранные версии",
"editundo": "отменить",
"diff-empty": "(нет различий)",
- "diff-multi-sameuser": "(не {{PLURAL:$1|показана одна промежуточная версия|показано $1 промежуточных версии|показаны $1 промежуточные версии}} этого же участника)",
- "diff-multi-otherusers": "(не {{PLURAL:$1|показана одна промежуточная версия|показано $1 промежуточных версии|показаны $1 промежуточные версии}} {{PLURAL:$2|ещё одного участника|$2 участников}})",
+ "diff-multi-sameuser": "(не {{PLURAL:$1|показана одна промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версий}} этого же участника)",
+ "diff-multi-otherusers": "(не {{PLURAL:$1|показана $1 промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версий}} {{PLURAL:$2|$2 участника|$2 участников}})",
"diff-multi-manyusers": "({{PLURAL:$1|не показана $1 промежуточная версия, сделанная|не показаны $1 промежуточных версий, сделанных|не показаны $1 промежуточные версии, сделанные}} более чем {{PLURAL:$2|$2 участником|$2 участниками}})",
"difference-missing-revision": "Не {{PLURAL:$2|1=найдена|найдены}} {{PLURAL:$2|$2 версия|$2 версий|$2 версии|1=одна из версий}} для этого сравнения ($1).\n\nТакое обычно случается при переходе по устаревшей ссылке сравнения версий для страницы, которая была удалена.\nПодробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
"searchresults": "Результаты поиска",
@@ -876,9 +900,11 @@
"notextmatches": "Нет совпадений в текстах страниц",
"prevn": "{{PLURAL:$1|1=предыдущая|предыдущие}} $1",
"nextn": "{{PLURAL:$1|1=следующая|следующие}} $1",
- "prevn-title": "{{PLURAL:$1|Предыдущая $1 запись|Предыдущие $1 записей|Предыдущие $1 записи}}",
- "nextn-title": "{{PLURAL:$1|Следующая $1 запись|Следующие $1 записей|Следующие $1 записи}}",
- "shown-title": "Показывать $1 {{PLURAL:$1|запись|записи|записей}} на странице",
+ "prev-page": "Предыдущая страница",
+ "next-page": "Следующая страница",
+ "prevn-title": "{{PLURAL:$1|Предыдущая $1 запись|Предыдущие $1 записи|Предыдущие $1 записей}}",
+ "nextn-title": "{{PLURAL:$1|Следующая $1 запись|Следующие $1 записи|Следующие $1 записей}}",
+ "shown-title": "Показывать $1 {{PLURAL:$1|запись|записей|записи}} на странице",
"viewprevnext": "Просмотреть ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''В этой вики есть страница «[[:$1]]»'''",
"searchmenu-new": "<strong>Создать страницу «[[:$1]]» в этом вики-проекте!</strong>\n{{PLURAL:$2|0=|См. также страницу, найденную по результатами вашего поиска.|См. также найденные результаты поиска.}}",
@@ -890,10 +916,11 @@
"searchprofile-images-tooltip": "Поиск файлов",
"searchprofile-everything-tooltip": "Поиск на всех страницах (включая страницы обсуждений)",
"searchprofile-advanced-tooltip": "Искать в заданных пространствах имён",
- "search-result-size": "$1 ({{PLURAL:$2|$2 слово|$2 слов|$2 слова}})",
- "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождений|вхождения}} ($2 {{PLURAL:$2|подкатегория|подкатегорий|подкатегории}}, $3 {{PLURAL:$3|файл|файлов|файла}})",
+ "search-result-size": "$1 ({{PLURAL:$2|$2 слово|$2 слова|$2 слов}})",
+ "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождения|вхождений}} ($2 {{PLURAL:$2|подкатегория|подкатегории|подкатегорий}}, $3 {{PLURAL:$3|файл|файла|файлов}})",
"search-redirect": "(перенаправление с $1)",
"search-section": "(раздел «$1»)",
+ "search-category": "(категория $1)",
"search-file-match": "(совпадает с содержимым файла)",
"search-suggest": "Возможно, вы имели в виду «$1».",
"search-interwiki-caption": "Родственные проекты",
@@ -902,8 +929,8 @@
"search-relatedarticle": "Связанный",
"searchrelated": "связанный",
"searchall": "все",
- "showingresults": "Ниже {{PLURAL:$1|1=показан результат|показаны результаты}} с № '''$2''' и вплоть до № '''$1'''.",
- "showingresultsinrange": "Ниже показано до {{PLURAL:$1|<strong>1</strong> результата|<strong>$1</strong> результатов|<strong>$1</strong> результата}} в диапазоне от <strong>$2</strong> до <strong>$3</strong>.",
+ "showingresults": "Ниже {{PLURAL:$1|1=показан <strong>1</strong> результат|показан <strong>$1</strong> результат|показано <strong>$1</strong> результата|показаны <strong>$1</strong> результатов}}, начиная с № <strong>$2</strong>.",
+ "showingresultsinrange": "Ниже показано до {{PLURAL:$1|<strong>1</strong> результата|<strong>$1</strong> результата|<strong>$1</strong> результатов}} в диапазоне от <strong>$2</strong> до <strong>$3</strong>.",
"search-showingresults": "{{PLURAL:$4|Результат <strong>$1</strong> из <strong>$3</strong>|Результаты <strong>$1 — $2</strong> из <strong>$3</strong>}}",
"search-nonefound": "Соответствий запросу не найдено.",
"powersearch-legend": "Расширенный поиск",
@@ -927,6 +954,11 @@
"prefs-personal": "Личные данные",
"prefs-rc": "Свежие правки",
"prefs-watchlist": "Список наблюдения",
+ "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-watchlist-edits": "Максимальное количество правок, отображаемых в расширенном списке наблюдения:",
@@ -989,14 +1021,14 @@
"yournick": "Новая подпись:",
"prefs-help-signature": "Комментарии на страницах обсуждений должны быть подписаны посредством добавления символов «<nowiki>~~~~</nowiki>», которые будут преобразованы в вашу подпись и время.",
"badsig": "Неверная подпись. Проверьте корректность HTML-тегов.",
- "badsiglength": "Слишком длинная подпись.\nПодпись не должна превышать $1 {{PLURAL:$1|символа|символов|символа}}.",
+ "badsiglength": "Слишком длинная подпись.\nПодпись не должна превышать $1 {{PLURAL:$1|символа|символа|символов}}.",
"yourgender": "Какое описание вам более подходит?",
"gender-unknown": "Я предпочитаю не указывать",
"gender-male": "Он редактирует страницы вики",
"gender-female": "Онa редактирует страницы вики",
- "prefs-help-gender": "Установка этой настройки необязательна.\nПрограммное обеспечение использует эту информацию чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
+ "prefs-help-gender": "Установка этой настройки необязательна.\nПО использует это значение, чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
"email": "Электронная почта",
- "prefs-help-realname": "Настоящее имя (необязательное поле).\nЕсли вы укажете его, то оно будет использовано для того, чтобы показать, кем была внесена правка страницы.",
+ "prefs-help-realname": "Вводить настоящее имя необязательно.\nЕсли вы заполните его, оно может быть использовано для указания авторства ваших работ.",
"prefs-help-email": "Адрес электронной почты указывать необязательно, но он будет необходим в том случае, если вы забудете пароль.",
"prefs-help-email-others": "Он также позволит другим участникам связаться с вами по электронной почте с помощью ссылки на вашей персональной странице или на вашей странице обсуждения. При этом ваш адрес электронной почты не будет никому раскрыт.",
"prefs-help-email-required": "Необходимо указать адрес электронной почты.",
@@ -1092,7 +1124,7 @@
"right-browsearchive": "поиск удалённых страниц",
"right-undelete": "восстановление страниц",
"right-suppressrevision": "просмотр, сокрытие и восстановление скрытых версий страниц",
- "right-viewsuppressed": "Просмотр версий, скрытых от всех участников",
+ "right-viewsuppressed": "просмотр версий, скрытых от всех участников",
"right-suppressionlog": "просмотр частных журналов",
"right-block": "установка ограничений на редактирование для других участников",
"right-blockemail": "установка запрета на отправку электронной почты",
@@ -1103,6 +1135,7 @@
"right-protect": "изменение уровня защиты страниц и правка каскадно защищённых страниц",
"right-editprotected": "правка страниц, защищённых как «{{int:protect-level-sysop}}»",
"right-editsemiprotected": "правка страниц, защищённых как «{{int:protect-level-autoconfirmed}}»",
+ "right-editcontentmodel": "Редактирование контентной модели страницы",
"right-editinterface": "изменение пользовательского интерфейса",
"right-editusercssjs": "правка CSS- и JS-файлов других участников",
"right-editusercss": "правка CSS-файлов других участников",
@@ -1130,6 +1163,7 @@
"right-override-export-depth": "экспортирование страниц, включая связанные страницы с глубиной до 5",
"right-sendemail": "отправка электронной почты другим участникам",
"right-passwordreset": "просмотр электронных писем с изменением пароля",
+ "right-managechangetags": "Создавать и удалять [[Special:Tags|метки]] из базы данных",
"newuserlogpage": "Журнал регистрации участников",
"newuserlogpagetext": "Список недавно зарегистрировавшихся участников",
"rightslog": "Журнал прав участника",
@@ -1175,7 +1209,9 @@
"action-viewmywatchlist": "просмотр вашего списка наблюдения",
"action-viewmyprivateinfo": "просмотр вашей частной информации",
"action-editmyprivateinfo": "редактирование вашей частной информации",
- "nchanges": "$1 {{PLURAL:$1|изменение|изменений|изменения}}",
+ "action-editcontentmodel": "редактирование контентной модели страницы",
+ "action-managechangetags": "создание и удаление меток из базы данных",
+ "nchanges": "$1 {{PLURAL:$1|изменение|изменения|изменений}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|с последнего посещения}}",
"enhancedrc-history": "история",
"recentchanges": "Свежие правки",
@@ -1187,7 +1223,7 @@
"recentchanges-label-minor": "Это незначительное изменение",
"recentchanges-label-bot": "Эта правка сделана ботом",
"recentchanges-label-unpatrolled": "Эта правка ещё никем не патрулировалась",
- "recentchanges-label-plusminus": "Размер страницы изменился на данное количество байт",
+ "recentchanges-label-plusminus": "изменение размера в байтах",
"recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (см. также [[Special:NewPages|список новых страниц]])",
"recentchanges-legend-plusminus": "(''±123'')",
@@ -1220,10 +1256,10 @@
"newpageletter": "Н",
"boteditletter": "б",
"unpatrolledletter": "!",
- "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|наблюдающий участник|наблюдающих участников|наблюдающих участника}}]",
+ "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|наблюдающий участник|наблюдающих участника|наблюдающих участников}}]",
"rc_categories": "Только из категорий (разделитель «|»)",
"rc_categories_any": "Любой",
- "rc-change-size-new": "Размер после изменения: $1 {{PLURAL:$1|байт|байт|байта}}",
+ "rc-change-size-new": "Размер после изменения: $1 {{PLURAL:$1|байт|байта|байт}}",
"newsectionsummary": "/* $1 */ новая тема",
"rc-enhanced-expand": "Показать подробности",
"rc-enhanced-hide": "Скрыть подробности",
@@ -1246,9 +1282,9 @@
"uploaderror": "Ошибка загрузки файла",
"upload-recreate-warning": "'''Внимание: файл с таким именем был удален или переименован.'''\n\nНиже представлены журналы удалений и переименований этой страницы:",
"uploadtext": "Воспользуйтесь этой формой для загрузки файлов на сервер.\nЧтобы просмотреть ранее загруженные файлы, обратитесь к [[Special:FileList|списку загруженных файлов]]. Загрузка файлов также записывается в [[Special:Log/upload|журнал загрузок]], данные об удалённых файлах можно найти в [[Special:Log/delete|журнале удалений]].\n\nДля включения файла в статью вы можете использовать строки вида:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' для вставки полной версии файла;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|описание]]</nowiki></code>''' для вставки слева от текста уменьшенной до 200 пикселей по ширине версии файла с выводом под ним указанного описания;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' для вставки ссылки на файл, без отображения его содержимого на странице.",
- "upload-permitted": "Разрешённые типы файлов: $1.",
- "upload-preferred": "Предпочтительные типы файлов: $1.",
- "upload-prohibited": "Запрещённые типы файлов: $1.",
+ "upload-permitted": "{{PLURAL:$2|Разрешённый тип|Разрешённые типы}} файлов: $1.",
+ "upload-preferred": "{{PLURAL:$2|Предпочтительный тип|Предпочтительные типы}} файлов: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Запрещённый тип|Запрещённые типы}} файлов: $1.",
"uploadlogpage": "Журнал загрузок",
"uploadlogpagetext": "Ниже представлен список последних загрузок файлов.\nСм. также [[Special:NewFiles|галерею новых файлов]], где сведения о новых загрузках представлены в более наглядном виде, и [[Special:ListFiles|все загруженные файлы]].",
"filename": "Имя файла",
@@ -1349,7 +1385,7 @@
"backend-fail-closetemp": "Не удаётся закрыть временный файл.",
"backend-fail-read": "Не удалось прочитать файл $1.",
"backend-fail-create": "Не удалось записать файл $1.",
- "backend-fail-maxsize": "Не удалось записать файл $1, так как его размер превышает $2 {{PLURAL:$2|байт|байт|байта}}.",
+ "backend-fail-maxsize": "Не удалось записать файл $1, так как его размер превышает $2 {{PLURAL:$2|байт|байта|байт}}.",
"backend-fail-readonly": "Хранилище «$1» сейчас находится в режиме «только чтение». Причина: «$2»",
"backend-fail-synced": "Файл «$1» находится в несогласованном состоянии во внутреннем хранилище",
"backend-fail-connect": "Не удалось подключиться к хранилищу «$1».",
@@ -1404,7 +1440,7 @@
"upload-curl-error28-text": "Сайт слишком долго не отвечает. Пожалуйста, проверьте что сайт работоспособен и после небольшого перерыва попробуйте ещё раз. Возможно, операцию следует провести в другое время, когда сайт менее нагружен.",
"license": "Лицензирование:",
"license-header": "Лицензирование",
- "nolicense": "Отсутствует",
+ "nolicense": "Ничего не выбрано",
"licenses-edit": "Изменить параметры лицензии",
"license-nopreview": "(Предпросмотр недоступен)",
"upload_source_url": "(вы выбрали правильный, публично доступный интернет-адрес)",
@@ -1441,12 +1477,12 @@
"filehist-filesize": "Размер файла",
"filehist-comment": "Примечание",
"imagelinks": "Использование файла",
- "linkstoimage": "{{PLURAL:$1|Следующая $1 страница ссылается|Следующие $1 страниц ссылаются|Следующие $1 страницы ссылаются}} на данный файл:",
- "linkstoimage-more": "Более $1 {{PLURAL:$1|страницы|страниц}} ссылаются на этот файл.\nВ данном списке {{PLURAL:$1|представлена только $1 ссылка|представлены только $1 ссылок|представлены только $1 ссылки}} на этот файл.\nДоступен также [[Special:WhatLinksHere/$2|полный список]].",
+ "linkstoimage": "{{PLURAL:$1|Следующая $1 страница ссылается|Следующие $1 страницы ссылаются|Следующие $1 страниц ссылаются}} на данный файл:",
+ "linkstoimage-more": "Более $1 {{PLURAL:$1|страницы|страниц}} ссылаются на этот файл.\nВ данном списке {{PLURAL:$1|представлена только $1 ссылка|представлены только $1 ссылки|представлены только $1 ссылок}} на этот файл.\nДоступен также [[Special:WhatLinksHere/$2|полный список]].",
"nolinkstoimage": "Нет страниц, ссылающихся на данный файл.",
"morelinkstoimage": "Просмотреть [[Special:WhatLinksHere/$1|остальные ссылки]] на этот файл.",
"linkstoimage-redirect": "$1 (файловое перенаправление) $2",
- "duplicatesoffile": "{{PLURAL:$1|Следующий файл является дубликатом|Следующие $1 файлов являются дубликатами|Следующие $1 файла являются дубликатами}} этого файла ([[Special:FileDuplicateSearch/$2|подробности]]):",
+ "duplicatesoffile": "{{PLURAL:$1|Следующий файл является дубликатом|Следующие $1 файла являются дубликатами|Следующие $1 файлов являются дубликатами}} этого файла ([[Special:FileDuplicateSearch/$2|подробности]]):",
"sharedupload": "Этот файл из $1 и может использоваться в других проектах.",
"sharedupload-desc-there": "Этот файл из $1 и может использоваться в других проектах.\nДополнительную информацию можно найти на [$2 странице описания файла].",
"sharedupload-desc-here": "Этот файл из $1 и может использоваться в других проектах.\nИнформация с его [$2 страницы описания] приведена ниже.",
@@ -1491,7 +1527,7 @@
"listredirects": "Список перенаправлений",
"listduplicatedfiles": "Список файлов с дубликатами",
"listduplicatedfiles-summary": "Это список файлов, где самая последняя версия файла считается дубликатом последней версии некоторых других файлов. Учитываются только локальные файлы.",
- "listduplicatedfiles-entry": "У файла [[:File:$1|$1]] — [[$3|{{PLURAL:$2|один дубликат|$2 дубликатов|$2 дубликата}}]].",
+ "listduplicatedfiles-entry": "У файла [[:File:$1|$1]] — [[$3|{{PLURAL:$2|один дубликат|$2 дубликата|$2 дубликатов}}]].",
"unusedtemplates": "Неиспользуемые шаблоны",
"unusedtemplatestext": "Здесь перечислены все страницы пространства имён «{{ns:template}}», не включённые ни в какие другие страницы.\nНе забывайте проверять отсутствие ссылок на шаблон перед его удалением.",
"unusedtemplateswlh": "другие ссылки",
@@ -1507,7 +1543,6 @@
"statistics": "Статистика",
"statistics-header-pages": "Статистика по страницам",
"statistics-header-edits": "Статистика правок",
- "statistics-header-views": "Статистика просмотров",
"statistics-header-users": "Статистика по участникам",
"statistics-header-hooks": "Другая статистика",
"statistics-articles": "Статей",
@@ -1516,13 +1551,9 @@
"statistics-files": "Загружено файлов",
"statistics-edits": "Число правок с момента установки {{grammar:genitive|{{SITENAME}}}}",
"statistics-edits-average": "Среднее число правок на страницу",
- "statistics-views-total": "Всего просмотров",
- "statistics-views-total-desc": "Не учитываются просмотры несуществующих и служебных страниц.",
- "statistics-views-peredit": "Просмотров на правку",
"statistics-users": "Зарегистрированные [[Special:ListUsers|участники]]",
"statistics-users-active": "Активные участники",
- "statistics-users-active-desc": "Участники, совершившие какое-либо действие за {{PLURAL:$1|последний $1 день|последние $1 дней|последние $1 дня}}",
- "statistics-mostpopular": "Наиболее часто просматриваемые страницы",
+ "statistics-users-active-desc": "Участники, совершившие какое-либо действие за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней}}",
"pageswithprop": "Страницы с переопределёнными свойствами",
"pageswithprop-legend": "Страницы с переопределёнными свойствами",
"pageswithprop-text": "Здесь перечислены страницы, у которых были вручную переопределены отдельные свойства.",
@@ -1544,14 +1575,14 @@
"withoutinterwiki-legend": "Префикс",
"withoutinterwiki-submit": "Показать",
"fewestrevisions": "Страницы с наименьшим количеством версий",
- "nbytes": "$1 {{PLURAL:$1|байт|байтов|байта}}",
- "ncategories": "$1 {{PLURAL:$1|категория|категорий|категории}}",
- "ninterwikis": "$1 {{PLURAL:$1|интервики-ссылка|интервики-ссылок|интервики-ссылки}}",
- "nlinks": "$1 {{PLURAL:$1|ссылка|ссылок|ссылки}}",
- "nmembers": "$1 {{PLURAL:$1|объект|объектов|объекта}}",
- "nmemberschanged": "$1 → $2 {{PLURAL:$2|объект|объектов|объекта}}",
- "nrevisions": "$1 {{PLURAL:$1|версия|версий|версии}}",
- "nviews": "$1 {{PLURAL:$1|просмотр|просмотров|просмотра}}",
+ "nbytes": "$1 {{PLURAL:$1|байт|байта|байтов}}",
+ "ncategories": "$1 {{PLURAL:$1|категория|категории|категорий}}",
+ "ninterwikis": "$1 {{PLURAL:$1|интервики-ссылка|интервики-ссылки|интервики-ссылок}}",
+ "nlinks": "$1 {{PLURAL:$1|ссылка|ссылки|ссылок}}",
+ "nmembers": "$1 {{PLURAL:$1|объект|объекта|объектов}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|объект|объекта|объектов}}",
+ "nrevisions": "$1 {{PLURAL:$1|версия|версии|версий}}",
+ "nviews": "$1 {{PLURAL:$1|просмотр|просмотра|просмотров}}",
"nimagelinks": "Используется на $1 {{PLURAL:$1|странице|страницах}}",
"ntransclusions": "используется на $1 {{PLURAL:$1|странице|страницах}}",
"specialpage-empty": "Запрос не дал результатов.",
@@ -1563,9 +1594,9 @@
"uncategorizedtemplates": "Некатегоризованные шаблоны",
"unusedcategories": "Неиспользуемые категории",
"unusedimages": "Неиспользуемые файлы",
- "popularpages": "Популярные страницы",
"wantedcategories": "Требуемые категории",
"wantedpages": "Требуемые страницы",
+ "wantedpages-summary": "Список несуществующих страниц с наибольшим количеством ссылок на них, за исключением страниц, у которых есть только страницы-перенаправления, указывающие на них. Для получения списка несуществующих страниц, у который есть перенаправления, ссылающиеся на них, см. [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Ошибочный заголовок в результатах запроса: $1",
"wantedfiles": "Требуемые файлы",
"wantedfiletext-cat": "Следующие файлы пытаются использовать, хотя их не существует. В этот список могут ошибочно попасть файлы, находящиеся во внешних хранилищах. Подобные ложные срабатывания будут отмечены <del>зачёркиванием</del>. Кроме того, страницы, содержащие несуществующие файлы, перечислены в [[:$1]].",
@@ -1608,7 +1639,7 @@
"listusers-editsonly": "Показать только тех участников, кто сделал хотя бы одну правку",
"listusers-creationsort": "Упорядочить по дате создания",
"listusers-desc": "Сортировать по убыванию",
- "usereditcount": "$1 {{PLURAL:$1|правка|правок|правки}}",
+ "usereditcount": "$1 {{PLURAL:$1|правка|правки|правок}}",
"usercreated": "{{GENDER:$3|зарегистрировался|зарегистрировалась}} $1 в $2",
"newpages": "Новые страницы",
"newpages-username": "Участник:",
@@ -1621,14 +1652,16 @@
"notargettext": "Вы не указали целевую страницу или участника для этого действия.",
"nopagetitle": "Нет такой целевой страницы",
"nopagetext": "Указанной целевой страницы не существует.",
- "pager-newer-n": "$1 более {{PLURAL:$1|новая|новых|новые}}",
- "pager-older-n": "$1 более {{PLURAL:$1|старая|старых|старые}}",
+ "pager-newer-n": "$1 более {{PLURAL:$1|новая|новые|новых}}",
+ "pager-older-n": "$1 более {{PLURAL:$1|старая|старые|старых}}",
"suppress": "Сокрытие",
"querypage-disabled": "Эта спецстраница отключена для повышения производительности.",
+ "apihelp": "Справка по API",
+ "apihelp-no-such-module": "Модуль «$1» не найден.",
"booksources": "Источники книг",
"booksources-search-legend": "Поиск информации о книге",
"booksources-isbn": "ISBN:",
- "booksources-go": "Найти",
+ "booksources-search": "Найти",
"booksources-text": "На этой странице приведён список ссылок на сайты, где вы, возможно, найдёте дополнительную информацию о книге. Это интернет-магазины и системы поиска в библиотечных каталогах.",
"booksources-invalid-isbn": "Указанный номер ISBN, судя по всему, содержит ошибку. Пожалуйста, проверьте, что при переносе номера из первоисточника не возникло искажений.",
"specialloguserlabel": "Исполнитель:",
@@ -1674,8 +1707,8 @@
"listusers-noresult": "Не найдено участников.",
"listusers-blocked": "(заблокирован{{GENDER:$1||а}})",
"activeusers": "Список активных участников",
- "activeusers-intro": "Это список участников, совершавших какие-либо действия за {{PLURAL:$1|последний $1 день|последние $1 дней|последние $1 дня|1=последний день}}.",
- "activeusers-count": "$1 {{PLURAL:$1|правка|правок|правки}} за {{PLURAL:$3|$3 последний день|последние $3 дней|последние $3 дня|1=последний день}}",
+ "activeusers-intro": "Это список участников, совершавших какие-либо действия за {{PLURAL:$1|последний $1 день|последние $1 дня|последние $1 дней|1=последний день}}.",
+ "activeusers-count": "$1 {{PLURAL:$1|правка|правки|правок}} за {{PLURAL:$3|$3 последний день|последние $3 дня|последние $3 дней|1=последний день}}",
"activeusers-from": "Показать участников, начиная с:",
"activeusers-hidebots": "Скрыть ботов",
"activeusers-hidesysops": "Скрыть администраторов",
@@ -1706,7 +1739,7 @@
"trackingcategories-name": "Имя сообщения",
"trackingcategories-desc": "Критерий включения в категорию",
"noindex-category-desc": "Страница не индексируются поисковыми роботами, потому что на ней имеется «волшебное слово» <code><nowiki>__NOINDEX__</nowiki></code>, и она находится в пространстве имён, где разрешён этот флаг).",
- "index-category-desc": "На странице имеется «волшебное слово» __INDEX__ (и страница находится в пространстве имён, где разрешён этот флаг), поэтому она индексируются поисковыми роботами в тех случаях, когда этого обычно не происходит.",
+ "index-category-desc": "На странице имеется «волшебное слово» <nowiki>__INDEX__</nowiki> (и страница находится в пространстве имён, где разрешён этот флаг), поэтому она индексируются поисковыми роботами в тех случаях, когда этого обычно не происходит.",
"post-expand-template-inclusion-category-desc": "Размер страницы станет больше <code>$wgMaxArticleSize</code> после показа всех шаблонов, поэтому некоторые из них не были показаны полностью.",
"post-expand-template-argument-category-desc": "Страница станет больше <code>$wgMaxArticleSize</code> после раскрытия аргумента шаблона (что-нибудь в тройных фигурных скобках, например, <code>{{{Foo}}})</code>).",
"expensive-parserfunction-category-desc": "На странице используется слишком много ресурсоёмких функций (таких, как <code>#ifexist</code>). Подробнее — на странице [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
@@ -1748,7 +1781,7 @@
"mywatchlist": "Список наблюдения",
"watchlistfor2": "Для $1 $2",
"nowatchlist": "Ваш список наблюдения пуст.",
- "watchlistanontext": "Вы должны войти, чтобы просмотреть или отредактировать элементы в списке наблюдения.",
+ "watchlistanontext": "Пожалуйста, войдите, чтобы просмотреть или отредактировать элементы в списке наблюдения.",
"watchnologin": "Нужно представиться системе",
"addwatch": "Добавить в список наблюдения",
"addedwatchtext": "Страница «[[:$1]]» была добавлена в ваш [[Special:Watchlist|список наблюдения]].\nТам будут отмечаться последующие изменения этой страницы, а также связанной с ней страницы обсуждения.",
@@ -1762,11 +1795,11 @@
"unwatchthispage": "Прекратить наблюдение",
"notanarticle": "Не статья",
"notvisiblerev": "Версия была удалена",
- "watchlist-details": "В вашем списке наблюдения $1 {{PLURAL:$1|страница|страниц|страницы}}, не считая страниц обсуждений.",
+ "watchlist-details": "В вашем списке наблюдения $1 {{PLURAL:$1|страница|страницы|страниц}}, не считая страниц обсуждений.",
"wlheader-enotif": "Уведомления по эл. почте включены.",
"wlheader-showupdated": "Страницы, изменившиеся с вашего последнего их посещения, выделены '''жирным''' шрифтом.",
- "wlnote": "Ниже {{PLURAL:$1|показано последнее изменение|показаны <strong>$1</strong> последних изменений|показаны <strong>$1</strong> последние изменения}} за {{PLURAL:$2|последний час|последние <strong>$2</strong> часов|последние <strong>$2</strong> часа}}, по состоянию на $3 $4.",
- "wlshowlast": "Показать за последние $1 часов $2 дней $3",
+ "wlnote": "Ниже {{PLURAL:$1|показано последнее изменение|показаны <strong>$1</strong> последние изменения|показаны <strong>$1</strong> последних изменений}} за {{PLURAL:$2|последний час|последние <strong>$2</strong> часа|последние <strong>$2</strong> часов}}, по состоянию на $3 $4.",
+ "wlshowlast": "Показать за последние $1 часов $2 дней",
"watchlist-options": "Настройки списка наблюдения",
"watching": "Добавление в список наблюдения…",
"unwatching": "Удаление из списка наблюдения…",
@@ -1815,10 +1848,9 @@
"deleteprotected": "Вы не можете удалить эту страницу, поскольку она защищена.",
"deleting-backlinks-warning": "'''Предупреждение.''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Другие страницы]] ссылаются на страницу, которую вы собираетесь удалить, или содержат её.",
"rollback": "Откатить изменения",
- "rollback_short": "Откат",
"rollbacklink": "откатить",
- "rollbacklinkcount": "откатить $1 {{PLURAL:$1|правку|правок|правки}}",
- "rollbacklinkcount-morethan": "откатить больше, чем $1 {{PLURAL:$1|правку|правок|правки}}",
+ "rollbacklinkcount": "откатить $1 {{PLURAL:$1|правку|правки|правок}}",
+ "rollbacklinkcount-morethan": "откатить больше, чем $1 {{PLURAL:$1|правку|правки|правок}}",
"rollbackfailed": "Ошибка при совершении отката",
"cantrollback": "Невозможно откатить изменения. Последний, кто вносил изменения, является единственным автором этой страницы.",
"alreadyrolled": "Невозможно откатить последние изменения страницы «[[:$1]]», совершённые [[User:$2|$2]] ([[User talk:$2|обсуждение]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]),\nпоскольку кто-то другой уже успел откатить эти правки или отредактировать страницу.\n\nПоследние изменения {{GENDER:$3|внёс|внесла}} [[User:$3|$3]] ([[User talk:$3|обсуждение]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
@@ -1903,7 +1935,7 @@
"undeleteinvert": "Обратить выделение",
"undeletecomment": "Причина:",
"undeletedrevisions": "{{PLURAL:$1|восстановлено|восстановлены}} $1 {{PLURAL:$1|изменение|изменений|изменения}}",
- "undeletedrevisions-files": "восстановлены $1 {{PLURAL:$1|версия|версий|версии}} и $2 {{PLURAL:$2|файл|файлов|файла}}",
+ "undeletedrevisions-files": "восстановлены $1 {{PLURAL:$1|версия|версии|версий}} и $2 {{PLURAL:$2|файл|файла|файлов}}",
"undeletedfiles": "{{PLURAL:$1|восстановлен|восстановлены}} $1 {{PLURAL:$1|файл|файлов|файла}}",
"cannotundelete": "Ошибка восстановления:\n$1",
"undeletedpage": "'''Страница «$1» была восстановлена.'''\n\nДля просмотра списка последних удалений и восстановлений см. [[Special:Log/delete|журнал удалений]].",
@@ -1925,6 +1957,7 @@
"namespace": "Пространство имён:",
"invert": "Обратить выбранное",
"tooltip-invert": "Установите эту отметку, чтобы скрыть изменения на страницах, в пределах выбранного пространства имён (и связанных пространств имён, если указано)",
+ "tooltip-whatlinkshere-invert": "Установите этот флажок, чтобы Скрыть ссылки от страниц в выбранном пространстве имен.",
"namespace_association": "Связанное пространство",
"tooltip-namespace_association": "Установите эту отметку, чтобы также включить пространство имён обсуждения (или предметное), связанное с выбранным пространством имён",
"blanknamespace": "(основное)",
@@ -2041,7 +2074,7 @@
"change-blocklink": "изменить блокировку",
"contribslink": "вклад",
"emaillink": "отправить письмо",
- "autoblocker": "Автоблокировка из-за того, что ваш IP-адрес недавно использовал «[[User:$1|$1]]».\nПричина блокировки $1ː «$2»",
+ "autoblocker": "Автоблокировка из-за того, что ваш IP-адрес недавно использовал «[[User:$1|$1]]».\nПричина блокировки $1: «$2»",
"blocklogpage": "Журнал блокировок",
"blocklog-showlog": "{{GENDER:$1|Этот участник уже блокировался|Эта участница уже блокировалась}} ранее.\nНиже приведён журнал блокировок:",
"blocklog-showsuppresslog": "{{GENDER:$1|Этот участник уже заблокирован и скрыт|Эта участница уже заблокирована и скрыта}}. Журнал сокрытий приведён ниже:",
@@ -2095,7 +2128,7 @@
"move-page": "$1 — переименование",
"move-page-legend": "Переименование страницы",
"movepagetext": "Воспользовавшись нижеприведённой формой, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nСтарое название станет перенаправлением на новое.\nВы можете автоматически обновить перенаправления, которые вели на старое название.\nЕсли вы этого не сделаете, пожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].\nВы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.\n\nОбратите внимание, что страница '''не будет''' переименована, если уже существует страница с названием, идентичным выбранному, кроме случаев, когда такая страница является перенаправлением или пуста, и при этом не имеет истории правок.\nЭто означает, что если вы сделали преименование ошибочно, вы можете переименовать страницу обратно в то название, которое у неё только что было, но вы не можете случайно затереть существующую страницу.\n\n'''Предупреждение!'''\nПереименование ''популярных'' страниц может привести к масштабным и неожиданным изменениям.\nПожалуйста, прежде чем продолжать, убедитесь, что понимаете все возможные последствия.",
- "movepagetext-noredirectfixer": "Воспользовавшись формой ниже, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nСтарое название станет перенаправлением на новое название.\nПожалуйста, проверьте наличие [[Special:DoubleRedirects|двойных]] и [[Special:BrokenRedirects|разорванных перенаправлений]].\nВы отвечаете за то, что бы ссылки продолжали и далее указывают туда, куда предполагалось.\n\nОбратите внимание, что страница '''не будет''' переименована, если страница с новым названием уже существует, кроме случаев, если она является перенаправлением или пуста и не имеет истории правок.\nЭто означает, что вы можете переименовать страницу обратно в то название, которое у него только что было, если вы переименовали по ошибке, но вы не можете случайно затереть существующую страницу.\n\n'''ПРЕДУПРЕЖДЕНИЕ!'''\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*Не пустая страница обсуждения уже существует под таким же именем или\n*Вы не поставили галочку в поле ниже.\n\nВ этих случаях, вы будете вынуждены переместить или объединить страницы вручную, если это нужно.",
"movearticle": "Переименовать страницу",
"moveuserpage-warning": "'''Внимание.''' Вы собираетесь переименовать страницу участника. Пожалуйста, обратите внимание, что переименована будет только страница, участник '''не''' будет переименован.",
@@ -2122,11 +2155,11 @@
"movepage-page-exists": "Страница $1 уже существует и не может быть автоматически перезаписана.",
"movepage-page-moved": "Страница $1 была переименована в $2.",
"movepage-page-unmoved": "Страница $1 не может быть переименована в $2.",
- "movepage-max-pages": "{{PLURAL:$1|Была переименована|Были переименованы|Было переименовано}} $1 {{PLURAL:$1|страница|страниц|страницы}} — это максимум; большее число страниц автоматически переименовать нельзя.",
+ "movepage-max-pages": "{{PLURAL:$1|Была переименована|Было переименовано|Были переименованы}} $1 {{PLURAL:$1|страница|страницы|страниц}} — это максимум; большее число страниц автоматически переименовать нельзя.",
"movelogpage": "Журнал переименований",
"movelogpagetext": "Ниже представлен список переименованных страниц.",
"movesubpage": "{{PLURAL:$1|1=Подстраница|Подстраницы}}",
- "movesubpagetext": "У этой страницы $1 {{PLURAL:$1|подстраница|подстраниц|подстраницы}}.",
+ "movesubpagetext": "У этой страницы $1 {{PLURAL:$1|подстраница|подстраницы|подстраниц}}.",
"movenosubpage": "У этой страницы нет подстраниц.",
"movereason": "Причина:",
"revertmove": "возврат",
@@ -2189,14 +2222,15 @@
"thumbnail-temp-create": "Не удаётся создать временный файл эскиза",
"thumbnail-dest-create": "Не удаётся сохранить эскиз по месту назначения",
"thumbnail_invalid_params": "Ошибочный параметр миниатюры",
+ "thumbnail_toobigimagearea": "Файл с размерами больше $1",
"thumbnail_dest_directory": "Невозможно создать целевую директорию",
"thumbnail_image-type": "Данный тип изображения не поддерживается",
"thumbnail_gd-library": "Неполная конфигурация библиотеки GD, отсутствует функция $1",
"thumbnail_image-missing": "По-видимому, отсутствует файл $1",
"thumbnail_image-failure-limit": "Было сделано слишком много неудачных попыток ($1 или больше) формирования этого эскиза. Пожалуйста, повторите попытку позже.",
"import": "Импортирование страниц",
- "importinterwiki": "Межвики импорт",
- "import-interwiki-text": "Укажите вики и название импортируемой страницы.\nДаты изменений и имена авторов будут сохранены.\nВсе операции межвики импорта регистрируются в [[Special:Log/import|соответствующем журнале]].",
+ "importinterwiki": "Импорт из другой вики",
+ "import-interwiki-text": "Укажите вики и название импортируемой страницы.\nДаты изменений и имена авторов будут сохранены.\nВсе операции импорта из других вики регистрируются в [[Special:Log/import|журнале импорта]].",
"import-interwiki-sourcewiki": "Исходный вики-проект:",
"import-interwiki-sourcepage": "Исходная страница:",
"import-interwiki-history": "Копировать всю историю изменений этой страницы",
@@ -2208,15 +2242,15 @@
"import-comment": "Примечание:",
"importtext": "Пожалуйста, экспортируйте страницу из исходной вики, используя [[Special:Export|соответствующий инструмент]]. Сохраните файл на диск, а затем загрузите его сюда.",
"importstart": "Импортирование страниц…",
- "import-revision-count": "$1 {{PLURAL:$1|версия|версий|версии}}",
+ "import-revision-count": "$1 {{PLURAL:$1|версия|версии|версий}}",
"importnopages": "Нет страниц для импортирования.",
- "imported-log-entries": "{{PLURAL:$1|Импортирована $1 запись|Импортировано $1 записей|Импортированы $1 записи}} журнала.",
+ "imported-log-entries": "{{PLURAL:$1|Импортирована $1 запись|Импортированы $1 записи|Импортировано $1 записей}} журнала.",
"importfailed": "Не удалось импортировать: $1",
"importunknownsource": "Неизвестный тип импортируемой страницы",
"importcantopen": "Невозможно открыть импортируемый файл",
"importbadinterwiki": "Неправильная интервики-ссылка",
"importsuccess": "Импортирование выполнено!",
- "importnosources": "Не был выбран источник межвики-импорта, прямая загрузка истории изменений отключена.",
+ "importnosources": "Не была выбрана вики, из которой должен быть произведён импорт, и прямая загрузка истории изменений отключена.",
"importnofile": "Файл для импорта не был загружен.",
"importuploaderrorsize": "Не удалось загрузить или импортировать файл. Размер файла превышает установленный предел.",
"importuploaderrorpartial": "Не удалось загрузить или импортировать файл. Он был загружен лишь частично.",
@@ -2240,18 +2274,15 @@
"import-rootpage-nosubpage": "В пространстве имён указанной корневой страницы «$1» подстраницы запрещены.",
"importlogpage": "Журнал импорта",
"importlogpagetext": "Импортирование администраторами страниц с историей изменений из других вики.",
- "import-logentry-upload": "«[[$1]]» — импорт из файла",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия импортирована|версий импортировано|версии импортировано}}",
- "import-logentry-interwiki": "«$1» — межвики импорт",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|версия импортирована|версий импортировано|версии импортировано}} из $2",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|версия импортирована|версии импортировано|версий импортировано}}",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|версия импортирована|версии импортировано|версий импортировано}} из $2",
"javascripttest": "Проверка JavaScript",
- "javascripttest-title": "Проводится проверка $1",
"javascripttest-pagetext-noframework": "Эта страница зарезервирована для запуска JavaScript-тестов.",
"javascripttest-pagetext-unknownframework": "Неизвестная среда тестирования «$1».",
+ "javascripttest-pagetext-unknownaction": "Неизвестное действие «$1».",
"javascripttest-pagetext-frameworks": "Пожалуйста, выберите одну из следующих сред тестирования: $1",
"javascripttest-pagetext-skins": "Выберите тему оформления для запуска тестов:",
"javascripttest-qunit-intro": "См. [$1 документацию по тестированию] на mediawiki.org.",
- "javascripttest-qunit-heading": "Набор тестов MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "Ваша страница участника",
"tooltip-pt-anonuserpage": "Страница участника для моего IP",
"tooltip-pt-mytalk": "Ваша страница обсуждения",
@@ -2261,6 +2292,7 @@
"tooltip-pt-mycontris": "Список ваших правок",
"tooltip-pt-login": "Здесь можно зарегистрироваться в системе, но это необязательно.",
"tooltip-pt-logout": "Завершить сеанс работы",
+ "tooltip-pt-createaccount": "Мы предлагаем вам создать учётную запись и войти в систему, хотя это и не обязательно.",
"tooltip-ca-talk": "Обсуждение основной страницы",
"tooltip-ca-edit": "Вы можете редактировать эту страницу. Перед тем, как записать свои изменения, воспользуйтесь, пожалуйста, кнопкой предварительного просмотра.",
"tooltip-ca-addsection": "Создать новый раздел",
@@ -2290,6 +2322,7 @@
"tooltip-feed-atom": "Трансляция в Atom для этой страницы",
"tooltip-t-contributions": "Список страниц, которые изменял этот участник",
"tooltip-t-emailuser": "Отправить письмо этому участнику",
+ "tooltip-t-info": "Подробнее об этой странице",
"tooltip-t-upload": "Загрузить файлы",
"tooltip-t-specialpages": "Список служебных страниц",
"tooltip-t-print": "Версия этой страницы для печати",
@@ -2364,13 +2397,12 @@
"pageinfo-robot-policy": "Индексация поисковыми роботами",
"pageinfo-robot-index": "Разрешено",
"pageinfo-robot-noindex": "Не разрешено",
- "pageinfo-views": "Количество просмотров",
"pageinfo-watchers": "Число наблюдающих",
"pageinfo-few-watchers": "Менее $1 {{PLURAL:$1|следящего|следящих}}",
"pageinfo-redirects-name": "Количество перенаправлений на эту страницу",
"pageinfo-redirects-value": "$1",
"pageinfo-subpages-name": "Подстраницы данной страницы",
- "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перенаправление|перенаправлений|перенаправления}}; $3 {{PLURAL:$3|обычная|обычных|обычные}})",
+ "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перенаправление|перенаправления|перенаправлений}}; $3 {{PLURAL:$3|обычная|обычные|обычных}})",
"pageinfo-firstuser": "Создатель страницы",
"pageinfo-firsttime": "Дата создания страницы",
"pageinfo-lastuser": "Последний редактор",
@@ -2422,23 +2454,23 @@
"imagemaxsize": "Ограничение на размер изображения:<br />''(для страницы описания файла)''",
"thumbsize": "Размер уменьшенной версии изображения:",
"widthheight": "$1 × $2",
- "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|страница|страниц|страницы}}",
+ "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|страница|страницы|страниц}}",
"file-info": "размер файла: $1, MIME-тип: $2",
- "file-info-size": "$1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}, размер файла: $3, MIME-тип: $4",
- "file-info-size-pages": "$1 × $2 пикселей, размер файла: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страниц|страницы}}",
+ "file-info-size": "$1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3, MIME-тип: $4",
+ "file-info-size-pages": "$1 × $2 пикселей, размер файла: $3, MIME-тип: $4, $5 {{PLURAL:$5|страница|страницы|страниц}}",
"file-nohires": "Нет версии с бо́льшим разрешением.",
- "svg-long-desc": "SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}, размер файла: $3",
- "svg-long-desc-animated": "Анимированный SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}, размер файла: $3",
+ "svg-long-desc": "SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3",
+ "svg-long-desc-animated": "Анимированный SVG-файл, номинально $1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}, размер файла: $3",
"svg-long-error": "неправильный SVG-файл: $1",
"show-big-image": "Исходный файл",
"show-big-image-preview": "Размер при предпросмотре: $1.",
"show-big-image-other": "{{PLURAL:$2|1=Другое разрешение|Другие разрешения}}: $1.",
"show-big-image-size": "$1 × $2 пикселей",
"file-info-gif-looped": "закольцованный",
- "file-info-gif-frames": "$1 {{PLURAL:$1|фрейм|фреймов|фрейма}}",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|фрейм|фрейма|фреймов}}",
"file-info-png-looped": "закольцованный",
- "file-info-png-repeat": "проигрывается $1 {{PLURAL:$1|раз|раз|раза}}",
- "file-info-png-frames": "$1 {{PLURAL:$1|кадр|кадров|кадра}}",
+ "file-info-png-repeat": "проигрывается $1 {{PLURAL:$1|раз|раза|раз}}",
+ "file-info-png-frames": "$1 {{PLURAL:$1|кадр|кадра|кадров}}",
"file-no-thumb-animation": "'''Примечание. По техническим причинам миниатюры этого файла не будет анимироваться.'''",
"file-no-thumb-animation-gif": "'''Примечание. По техническим причинам миниатюры подобных GIF-изображений высокого разрешения не анимируются.'''",
"newimages": "Галерея новых файлов",
@@ -2456,18 +2488,18 @@
"minutes-abbrev": "$1 м",
"hours-abbrev": "$1 ч",
"days-abbrev": "$1 д",
- "seconds": "{{PLURAL:$1|$1 секунда|$1 секунд|$1 секунды}}",
- "minutes": "{{PLURAL:$1|$1 минута|$1 минут|$1 минуты}}",
- "hours": "{{PLURAL:$1|$1 час|$1 часов|$1 часа}}",
- "days": "{{PLURAL:$1|$1 день|$1 дней|$1 дня}}",
- "weeks": "{{PLURAL:$1|$1 неделя|$1 недель|$1 недели}}",
- "months": "{{PLURAL:$1|$1 месяц|$1 месяцев|$1 месяца}}",
- "years": "{{PLURAL:$1|$1 год|$1 лет|$1 года}}",
+ "seconds": "{{PLURAL:$1|$1 секунда|$1 секунды|$1 секунд}}",
+ "minutes": "{{PLURAL:$1|$1 минута|$1 минуты|$1 минут}}",
+ "hours": "{{PLURAL:$1|$1 час|$1 часа|$1 часов}}",
+ "days": "{{PLURAL:$1|$1 день|$1 дня|$1 дней}}",
+ "weeks": "{{PLURAL:$1|$1 неделя|$1 недели|$1 недель}}",
+ "months": "{{PLURAL:$1|$1 месяц|$1 месяца|$1 месяцев}}",
+ "years": "{{PLURAL:$1|$1 год|$1 года|$1 лет}}",
"ago": "$1 назад",
"just-now": "только что",
- "hours-ago": "$1 {{PLURAL:$1|час|часов|часа}} назад",
- "minutes-ago": "$1 {{PLURAL:$1|минуту|минут|минуты}} назад",
- "seconds-ago": "$1 {{PLURAL:$1|секунду|секунд|секунды}} назад",
+ "hours-ago": "$1 {{PLURAL:$1|час|часа|часов}} назад",
+ "minutes-ago": "$1 {{PLURAL:$1|минуту|минуты|минут}} назад",
+ "seconds-ago": "$1 {{PLURAL:$1|секунду|секунды|секунд}} назад",
"monday-at": "в понедельник в $1",
"tuesday-at": "во вторник в $1",
"wednesday-at": "в среду в $1",
@@ -2689,7 +2721,7 @@
"exif-exposureprogram-6": "Спортивный режим (с минимальной выдержкой)",
"exif-exposureprogram-7": "Портретный режим (для снимков на близком расстоянии, с фоном не в фокусе)",
"exif-exposureprogram-8": "Пейзажный режим (для пейзажных снимков, с фоном в фокусе)",
- "exif-subjectdistance-value": "$1 {{PLURAL:$1|метр|метров|метра}}",
+ "exif-subjectdistance-value": "$1 {{PLURAL:$1|метр|метра|метров}}",
"exif-meteringmode-0": "Неизвестно",
"exif-meteringmode-1": "Средний",
"exif-meteringmode-2": "Центровзвешенный",
@@ -2768,8 +2800,8 @@
"exif-gpslatitude-s": "южной широты",
"exif-gpslongitude-e": "восточной долготы",
"exif-gpslongitude-w": "западной долготы",
- "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|метр|метров|метра}} над уровнем моря",
- "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|метр|метров|метра}} ниже уровня моря",
+ "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|метр|метра|метров}} над уровнем моря",
+ "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|метр|метра|метров}} ниже уровня моря",
"exif-gpsstatus-a": "Измерение не закончено",
"exif-gpsstatus-v": "Готов к передаче данных",
"exif-gpsmeasuremode-2": "Измерение 2-х координат",
@@ -2823,7 +2855,6 @@
"exif-urgency-low": "Низкая ($1)",
"exif-urgency-high": "Высокая ($1)",
"exif-urgency-other": "Определённый пользователем приоритет ($1)",
- "watchlistall2": "все",
"namespacesall": "все",
"monthsall": "все",
"confirmemail": "Подтверждение адреса электронной почты",
@@ -2902,22 +2933,22 @@
"watchlistedit-normal-legend": "Удаление записей из списка наблюдения",
"watchlistedit-normal-explain": "Ниже перечислены страницы, находящиеся в вашем списке наблюдения.\nДля удаления записей отметьте соответствующие позиции и нажмите кнопку «{{int:Watchlistedit-normal-submit}}».\nВы также можете [[Special:EditWatchlist/raw|править список как текст]].",
"watchlistedit-normal-submit": "Удалить записи",
- "watchlistedit-normal-done": "Из вашего списка наблюдения {{PLURAL:$1|была удалена|было удалено|были удалены}} $1 {{PLURAL:$1|запись|записей|записи}}:",
+ "watchlistedit-normal-done": "Из вашего списка наблюдения {{PLURAL:$1|была удалена|были удалены|было удалено}} $1 {{PLURAL:$1|запись|записи|записей}}:",
"watchlistedit-raw-title": "Редактирование списка наблюдения как текста",
"watchlistedit-raw-legend": "Редактирование списка наблюдения",
"watchlistedit-raw-explain": "Ниже перечислены страницы, находящиеся в вашем списке наблюдения. Вы можете изменять этот список, добавляя и удаляя из него строки с названиями, по одному названию на строке.\nПосле завершения правок нажмите кнопку «{{int:Watchlistedit-raw-submit}}».\nВы также можете [[Special:EditWatchlist|использовать стандартный редактор]].",
"watchlistedit-raw-titles": "Записи:",
"watchlistedit-raw-submit": "Сохранить список",
"watchlistedit-raw-done": "Ваш список наблюдения сохранён.",
- "watchlistedit-raw-added": "{{PLURAL:$1|Была добавлена|Было добавлено|Были добавлены}} $1 {{PLURAL:$1|запись|записей|записи}}:",
- "watchlistedit-raw-removed": "{{PLURAL:$1|Была удалена|Было удалено|Были удалены}} $1 {{PLURAL:$1|запись|записей|записи}}:",
- "watchlistedit-clear-title": "Очищение списка наблюдения",
+ "watchlistedit-raw-added": "{{PLURAL:$1|Была добавлена|Были добавлены|Было добавлено}} $1 {{PLURAL:$1|запись|записи|записей}}:",
+ "watchlistedit-raw-removed": "{{PLURAL:$1|Была удалена|Были удалены|Было удалено}} $1 {{PLURAL:$1|запись|записи|записей}}:",
+ "watchlistedit-clear-title": "Очистка списка наблюдения",
"watchlistedit-clear-legend": "Очистить список наблюдения",
"watchlistedit-clear-explain": "Все записи будут удалены из вашего списка наблюдения",
"watchlistedit-clear-titles": "Заголовки:",
"watchlistedit-clear-submit": "Очистить список наблюдения (это необратимо!)",
"watchlistedit-clear-done": "Ваш список наблюдения очищен.",
- "watchlistedit-clear-removed": "{{PLURAL:$1|Была удалена|Было удалено|Были удалены}} $1 {{PLURAL:$1|запись|записей|записи}}:",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|Была удалена|Были удалены|Было удалено}} $1 {{PLURAL:$1|запись|записи|записей}}:",
"watchlistedit-too-many": "Слишком много страниц для того, чтобы показать их здесь.",
"watchlisttools-clear": "Очистить список наблюдения",
"watchlisttools-view": "Изменения на страницах из списка",
@@ -2976,9 +3007,9 @@
"hebrew-calendar-m11-gen": "Ава",
"hebrew-calendar-m12-gen": "Элула",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|обсуждение]])",
- "unknown_extension_tag": "Неизвестный тег расширения «$1»",
"duplicate-defaultsort": "Внимание. Ключ сортировки по умолчанию «$2» переопределяет прежний ключ сортировки по умолчанию «$1».",
"duplicate-displaytitle": "<strong>Внимание:</strong> Отображаемое название «$2» переопределяет ранее заданное отображаемое название «$1».",
+ "invalid-indicator-name": "<strong>Ошибка:</strong> Атрибут <code>name</code> индикаторов состояния страницы не должен быть пустым.",
"version": "Версия",
"version-extensions": "Установленные расширения",
"version-skins": "Установленные темы оформления",
@@ -2993,7 +3024,7 @@
"version-parser-function-hooks": "Перехватчики функций синтаксического анализатора",
"version-hook-name": "Имя перехватчика",
"version-hook-subscribedby": "Подписан на",
- "version-version": "(Версия $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[без названия]",
"version-license": "Лицензия MediaWiki",
"version-ext-license": "Лицензия",
@@ -3020,6 +3051,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Путь к статье]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Путь к скрипту]",
+ "version-libraries": "Установленные библиотеки",
+ "version-libraries-library": "Библиотека",
+ "version-libraries-version": "Версия",
"redirect": "Перенаправление с файла, участника, страницы или идентификатора версии",
"redirect-legend": "Перенаправление на файл или страницу",
"redirect-summary": "Эта служебная страница перенаправляет на файл (с имени файла), страницу (с идентификатора версии или страницы) или страницу участника (с числового идентификатора участника). Использование: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] или [[{{#Special:Redirect}}/user/101]].",
@@ -3036,9 +3070,9 @@
"fileduplicatesearch-legend": "Поиск дубликатов",
"fileduplicatesearch-filename": "Имя файла:",
"fileduplicatesearch-submit": "Найти",
- "fileduplicatesearch-info": "$1 × $2 {{PLURAL:$2|пиксель|пикселей|пикселя}}<br />Размер файла: $3<br />MIME-тип: $4",
+ "fileduplicatesearch-info": "$1 × $2 {{PLURAL:$2|пиксель|пикселя|пикселей}}<br />Размер файла: $3<br />MIME-тип: $4",
"fileduplicatesearch-result-1": "Файл «$1» не имеет идентичных дубликатов.",
- "fileduplicatesearch-result-n": "Файл «$1» имеет $2 {{PLURAL:$2|идентичный дубликат|идентичных дубликатов|идентичных дубликата}}.",
+ "fileduplicatesearch-result-n": "Файл «$1» имеет $2 {{PLURAL:$2|идентичный дубликат|идентичных дубликата|идентичных дубликатов}}.",
"fileduplicatesearch-noresults": "Не найден файл с именем «$1».",
"specialpages": "Спецстраницы",
"specialpages-note-top": "Легенда",
@@ -3055,6 +3089,7 @@
"specialpages-group-wiki": "Данные и инструменты",
"specialpages-group-redirects": "Перенаправляющие служебные страницы",
"specialpages-group-spam": "Инструменты против спама",
+ "specialpages-group-developer": "Инструменты разработчика",
"blankpage": "Пустая страница",
"intentionallyblankpage": "Эта страница намеренно оставлена пустой",
"external_image_whitelist": " #Оставьте эту строчку такой, как она есть<pre>\n#Разместите здесь фрагменты регулярных выражений (ту часть, что находится между //)\n#они будут соотнесены с URL внешних изображений.\n#Подходящие будут показаны как изображения, остальные будут показаны как ссылки на изображения.\n#Строки, начинающиеся с # считаются комментариями.\n#Строки не чувствительны к регистру\n\n#Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>",
@@ -3067,12 +3102,50 @@
"tags-tag": "Имя метки",
"tags-display-header": "Отображение в списках изменений",
"tags-description-header": "Полное описание значения",
+ "tags-source-header": "Источник",
"tags-active-header": "Активна?",
"tags-hitcount-header": "Отмеченные правки",
+ "tags-actions-header": "Действия",
"tags-active-yes": "Да",
"tags-active-no": "Нет",
+ "tags-source-extension": "Определяется расширением",
+ "tags-source-manual": "Вносятся вручную участниками и ботами",
+ "tags-source-none": "Больше не используется",
"tags-edit": "править",
- "tags-hitcount": "$1 {{PLURAL:$1|изменение|изменений|изменения}}",
+ "tags-delete": "удалить",
+ "tags-activate": "активировать",
+ "tags-deactivate": "отключить",
+ "tags-hitcount": "$1 {{PLURAL:$1|изменение|изменения|изменений}}",
+ "tags-manage-no-permission": "У вас нет прав на управление изменениями меток.",
+ "tags-create-heading": "Создать новую метку",
+ "tags-create-explanation": "Вновь созданные метки по умолчанию будут созданы доступными для использования участниками и ботами.",
+ "tags-create-tag-name": "Название метки:",
+ "tags-create-reason": "Причина:",
+ "tags-create-submit": "Создать",
+ "tags-create-no-name": "Вы должны указать имя метки.",
+ "tags-create-invalid-chars": "Имена меток не должны содержать запятые (<code>,</code>) или символы косой черты (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Имена меток не должны содержать символы, которые не могут быть использованы в заголовках страниц.",
+ "tags-create-already-exists": "Метка «$1» уже существует.",
+ "tags-create-warnings-above": "При попытке создать метку «$1» обнаружен{{PLURAL:$2|о следующее предупреждение|ы следующие предупреждения}}:",
+ "tags-create-warnings-below": "Вы хотите продолжить создание метки?",
+ "tags-delete-title": "Удалить метку",
+ "tags-delete-explanation-initial": "Вы собираетесь удалить метку «$1» из базы данных.",
+ "tags-delete-reason": "Причина:",
+ "tags-delete-submit": "Безвозвратно удалить эту метку",
+ "tags-delete-not-allowed": "Метки, определённые расширением, не могут быть удалены, если только расширения явно не даёт возможности этого делать.",
+ "tags-delete-not-found": "Метка «$1» не существует.",
+ "tags-delete-warnings-after-delete": "Метка «$1» была удалена успешно, но {{PLURAL:$2|было обнаружено следующее предупреждение|были обнаружены следующие предупреждения}}:",
+ "tags-activate-title": "Активировать метку",
+ "tags-activate-question": "Вы собираетесь активировать метку «$1».",
+ "tags-activate-reason": "Причина:",
+ "tags-activate-not-allowed": "Невозможно активировать метку «$1».",
+ "tags-activate-not-found": "Метка «$1» не существует.",
+ "tags-activate-submit": "Активировать",
+ "tags-deactivate-title": "Отключить метку",
+ "tags-deactivate-question": "Вы собираетесь отключить метку «$1».",
+ "tags-deactivate-reason": "Причина:",
+ "tags-deactivate-not-allowed": "Невозможно отключить метку «$1».",
+ "tags-deactivate-submit": "Отключить",
"comparepages": "Сравнение страниц",
"compare-page1": "Первая страница",
"compare-page2": "Вторая страница",
@@ -3084,8 +3157,8 @@
"compare-revision-not-exists": "Указанной вами версии не существует.",
"dberr-problems": "Извините! На данном сайте возникли технические трудности.",
"dberr-again": "Попробуйте обновить страницу через несколько минут.",
- "dberr-info": "(невозможно соединиться с сервером баз данных: $1)",
- "dberr-info-hidden": "(Невозможно соединиться с сервером баз данных)",
+ "dberr-info": "(Нет доступа к базе данных: $1)",
+ "dberr-info-hidden": "(Нет доступа к базе данных)",
"dberr-usegoogle": "Пока вы можете попробовать поискать с помощью Google.",
"dberr-outofdate": "Но имейте в виду, что его индекс может оказаться устаревшим.",
"dberr-cachederror": "Ниже представлена закэшированная версия запрашиваемой страницы, возможно, она не отражает последних изменений.",
@@ -3126,6 +3199,12 @@
"revdelete-uname-unhid": "имя участника раскрыто",
"revdelete-restricted": "ограничения применяются к администраторам",
"revdelete-unrestricted": "ограничения сняты для администраторов",
+ "logentry-block-block": "$1 заблокировал{{GENDER:$2||а}} {{GENDER:$4|$3}} на период $5 $6",
+ "logentry-block-unblock": "$1 разблокировал{{GENDER:$2||а}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|изменил|изменила}} срок блокировки {{GENDER:$4|$3}} на период $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|заблокировал}} {{GENDER:$4|$3}} сроком на $5 $6",
+ "logentry-import-interwiki": "$1 импортировал{{GENDER:$2||а}} $3 из другой вики",
+ "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 поверх перенаправления",
@@ -3143,20 +3222,31 @@
"logentry-upload-upload": "$1 загрузил{{GENDER:$2||а}} $3",
"logentry-upload-overwrite": "$1 загрузил{{GENDER:$2||а}} новую версию $3",
"logentry-upload-revert": "$1 загрузил{{GENDER:$2||а}} $3",
+ "log-name-managetags": "Журнал управления метками",
+ "log-description-managetags": "На этой странице перечислены задачи, связанные с управлением [[Special:Tags|метками]]. Журнал содержит только действия, выполненные администратором вручную. Метки могут быть созданы или удалены с помощью программного обеспечения вики без добавления записей в этот журнал.",
+ "logentry-managetags-create": "$1 создал{{GENDER:$2||а}} метку «$4»",
+ "logentry-managetags-activate": "$1 активировал{{GENDER:$2||а}} метку «$4» для использования участниками и ботами",
+ "logentry-managetags-deactivate": "$1 отключил{{GENDER:$2||а}} метку «$4» для использования участниками и ботами",
"rightsnone": "(нет)",
+ "revdelete-summary": "описание изменений",
+ "feedback-adding": "Добавление отзыва на страницу…",
+ "feedback-back": "Назад",
+ "feedback-bugcheck": "Прекрасно! Только проверьте, что в списке [$1 известных ошибок] нет подобной записи.",
+ "feedback-bugnew": "Я проверил. Сообщить о новой ошибке",
"feedback-bugornote": "Если вы готовы подробно описать техническую проблему, пожалуйста, [$1 сообщите об ошибке].\nВ противном случае вы можете использовать данную простую форму. Ваш комментарий будет добавлен на страницу «[$3 $2]» вместе с вашим именем участника и используемым браузером.",
- "feedback-subject": "Тема:",
- "feedback-message": "Сообщение:",
"feedback-cancel": "Отмена",
- "feedback-submit": "Отправить отзыв",
- "feedback-adding": "Добавление отзыва на страницу…",
+ "feedback-close": "Готово",
+ "feedback-dialog-title": "Отправить отзыв",
+ "feedback-error-title": "Ошибка",
"feedback-error1": "Ошибка. Неизвестный результат из API",
"feedback-error2": "Ошибка. Сбой редактирования",
"feedback-error3": "Ошибка. Нет ответа от API",
+ "feedback-message": "Сообщение:",
+ "feedback-subject": "Тема:",
+ "feedback-submit": "Отправить",
"feedback-thanks": "Спасибо! Ваш отзыв размещён на странице «[$2 $1]».",
- "feedback-close": "Готово",
- "feedback-bugcheck": "Прекрасно! Только проверьте, что в списке [$1 известных ошибок] нет подобной записи.",
- "feedback-bugnew": "Я проверил. Сообщить о новой ошибке",
+ "feedback-thanks-title": "Спасибо!",
+ "feedback-useragent": "Браузер:",
"searchsuggest-search": "Поиск",
"searchsuggest-containing": "содержащие…",
"api-error-badaccess-groups": "Вам не разрешено загружать файлы в эту вики.",
@@ -3192,6 +3282,13 @@
"api-error-stashfailed": "Внутренняя ошибка: сервер не смог сохранить временный файл.",
"api-error-publishfailed": "Внутренняя ошибка: сервер не смог сохранить временный файл.",
"api-error-stasherror": "При загрузке файла в хранилище произошла ошибка.",
+ "api-error-stashedfilenotfound": "При попытке загрузить файл из временного хранилища исходный файл не найден.",
+ "api-error-stashpathinvalid": "Путь, по которому должен располагаться файл, загруженный во временное хранилище, некорректен.",
+ "api-error-stashfilestorage": "При загрузке файла во временное хранилище произошла ошибка.",
+ "api-error-stashzerolength": "Сервер не может сохранить файл во временное хранилище, поскольку тот имеет нулевую длину.",
+ "api-error-stashnotloggedin": "Вы должны войти в систему, чтобы иметь возможность сохранить файл во временное хранилище.",
+ "api-error-stashwrongowner": "Файл, который вы пытались открыть во временном хранилище, принадлежит не вам.",
+ "api-error-stashnosuchfilekey": "Ключ файла, к которому вы пытались получить доступ во временном хранилище, не существует.",
"api-error-timeout": "Сервер не отвечает в течение ожидаемого времени.",
"api-error-unclassified": "Произошла неизвестная ошибка",
"api-error-unknown-code": "Неизвестная ошибка: «$1»",
@@ -3200,27 +3297,27 @@
"api-error-unknownerror": "Неизвестная ошибка: «$1».",
"api-error-uploaddisabled": "В этой вики отключена возможность загрузки файлов.",
"api-error-verification-error": "Возможно, этот файл повреждён или имеет неправильное расширение.",
- "duration-seconds": "$1 {{PLURAL:$1|секунда|секунд|секунды}}",
- "duration-minutes": "$1 {{PLURAL:$1|минута|минут|минуты}}",
- "duration-hours": "$1 {{PLURAL:$1|час|часов|часа}}",
- "duration-days": "$1 {{PLURAL:$1|день|дней|дня}}",
- "duration-weeks": "$1 {{PLURAL:$1|неделя|недель|недели}}",
- "duration-years": "$1 {{PLURAL:$1|год|лет|года}}",
- "duration-decades": "$1 {{PLURAL:$1|десятилетие|десятилетий|десятилетия}}",
- "duration-centuries": "$1 {{PLURAL:$1|век|веков|века}}",
- "duration-millennia": "$1 {{PLURAL:$1|тысячелетие|тысячелетий|тысячелетия}}",
- "rotate-comment": "Изображение повёрнуто на $1 градус{{PLURAL:$1||ов|а}} по часовой стрелке",
+ "duration-seconds": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
+ "duration-minutes": "$1 {{PLURAL:$1|минута|минуты|минут}}",
+ "duration-hours": "$1 {{PLURAL:$1|час|часа|часов}}",
+ "duration-days": "$1 {{PLURAL:$1|день|дня|дней}}",
+ "duration-weeks": "$1 {{PLURAL:$1|неделя|недели|недель}}",
+ "duration-years": "$1 {{PLURAL:$1|год|года|лет}}",
+ "duration-decades": "$1 {{PLURAL:$1|десятилетие|десятилетия|десятилетий}}",
+ "duration-centuries": "$1 {{PLURAL:$1|век|века|веков}}",
+ "duration-millennia": "$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}",
+ "rotate-comment": "Изображение повёрнуто на $1 градус{{PLURAL:$1||а|ов}} по часовой стрелке",
"limitreport-title": "Данные анализатора:",
"limitreport-cputime": "Использование времени процессора",
- "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунд|секунды}}",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
"limitreport-walltime": "Использование в режиме реального времени",
- "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунд|секунды}}",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
"limitreport-ppvisitednodes": "Количество узлов, посещённых препроцессором",
"limitreport-ppgeneratednodes": "Количество сгенерированных препроцессором узлов",
"limitreport-postexpandincludesize": "Размер раскрытых включений",
- "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байт|байтов|байта}}",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байт|байта|байтов}}",
"limitreport-templateargumentsize": "Размер аргумента шаблона",
- "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байт|байтов|байта}}",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байт|байта|байтов}}",
"limitreport-expansiondepth": "Наибольшая глубина расширения",
"limitreport-expensivefunctioncount": "Количество «дорогих» функций анализатора",
"expandtemplates": "Развёртка шаблонов",
@@ -3241,13 +3338,63 @@
"pagelang-language": "Язык",
"pagelang-use-default": "Использовать язык по умолчанию",
"pagelang-select-lang": "Выберите язык",
- "right-pagelang": "Изменить язык страницы",
+ "right-pagelang": "изменение языка страницы",
"action-pagelang": "изменять язык страницы",
"log-name-pagelang": "Журнал изменения языка",
"log-description-pagelang": "Это журнал изменений в языках страницы.",
"logentry-pagelang-pagelang": "$1 изменил{{GENDER:$2||а}} язык страницы для $3 с $4 на $5.",
- "default-skin-not-found": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, похоже, содержит следующие темы оформления. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n\n\n$ 2\n\n\n; Если вы только что установили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* Скачав [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Склонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n; Если вы только что обновили MediaWiki:\n: MediaWiki версии 1.24 и более новых больше не включает автоматически установленные темы (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВы можете вставить следующие строчки в <code>LocalSettings.php</code>, чтобы включить все установленные темы оформления: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Если вы только что изменили <code>LocalSettings.php</code>:\n: Перепроверьте названия тем на наличие опечаток.",
- "default-skin-not-found-no-skins": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\n\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 архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Склонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.",
+ "default-skin-not-found": "Упс! Тема оформления по умолчанию для вашей вики <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, похоже, содержит следующие темы оформления. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n\n$ 2\n\n; Если вы только что установили MediaWiki:\n: Вы, видимо, сделали это с Git или непосредственно из исходного кода с использованием другого способа. Тогда такое возможно. Попробуйте установить некоторые темы из [https://www.mediawiki.org/wiki/Category:All_skins каталога тем оформления сайта mediawiki.org]:\n:* Загрузив [https://www.mediawiki.org/wiki/Download архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Загрузив архивы отдельных тем оформления с [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.\n; Если вы только что обновили MediaWiki:\n: MediaWiki версии 1.24 и новее больше не включает автоматически установленные темы (см. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВы можете вставить следующие строки в <code>LocalSettings.php</code>, чтобы включить все установленные темы оформления: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Если вы только что изменили <code>LocalSettings.php</code>:\n: Перепроверьте названия тем на наличие опечаток.",
+ "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 архив установочных файлов], который содержит несколько тем оформления и расширений. Вы можете скопировать папку <code>skins/</code> из него.\n:* Загрузив архивы отдельных тем оформления с [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Клонировав один из репозиториев <code>mediawiki/skins/*</code> через git в подпапку <code dir=\"ltr\">skins/</code> папки, куда установлена MediaWiki.\n: Это не должно навредить вашему репозиторию, если вы MediaWiki-разработчик. См. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для получения информации о том, как включить темы оформления и выбрать тему по умолчанию.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''отключено''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''отключено''')",
+ "mediastatistics": "Медиа-статистика",
+ "mediastatistics-summary": "Статистические данные о типах загруженных файлов. Она включает информацию только о последних версиях файлов. Более старые или удалённые версии файлов не учитываются.",
+ "mediastatistics-nbytes": "$1 байт{{PLURAL:$1||а|ов}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-тип",
+ "mediastatistics-table-extensions": "Возможные расширения",
+ "mediastatistics-table-count": "Количество файлов",
+ "mediastatistics-table-totalbytes": "Общий размер",
+ "mediastatistics-header-unknown": "Неизвестные",
+ "mediastatistics-header-bitmap": "Растровые изображения",
+ "mediastatistics-header-drawing": "Рисунки (векторные изображения)",
+ "mediastatistics-header-audio": "Аудио",
+ "mediastatistics-header-video": "Видео",
+ "mediastatistics-header-multimedia": "Мультимедиа",
+ "mediastatistics-header-office": "Офисные",
+ "mediastatistics-header-text": "Текстовые",
+ "mediastatistics-header-executable": "Исполняемые",
+ "mediastatistics-header-archive": "Сжатые форматы",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|лишняя запятая в конце была удалена|лишние запятые в конце были удалены|лишних запятых в конце были удалены}} из JSON",
+ "json-error-unknown": "Имеется проблема с JSON. Ошибка: $1",
+ "json-error-depth": "Превышена максимальная глубина стека",
+ "json-error-state-mismatch": "Недопустимый или неправильно составленный JSON",
+ "json-error-ctrl-char": "Ошибка управляющего символа, возможно, неверная кодировка",
+ "json-error-syntax": "Синтаксическая ошибка",
+ "json-error-utf8": "Некорректные символы UTF-8, возможно, неверная кодировка",
+ "json-error-recursion": "Должны быть закодированы одна или несколько рекурсивных ссылок в значении",
+ "json-error-inf-or-nan": "Должны быть закодированы одно или несколько NAN- или INF-значений",
+ "json-error-unsupported-type": "Было указано значение типа, который не может быть закодирован",
+ "headline-anchor-title": "Ссылка на этот раздел",
+ "special-characters-group-latin": "Латинские",
+ "special-characters-group-latinextended": "Латинские расширенные",
+ "special-characters-group-ipa": "МФА (IPA)",
+ "special-characters-group-symbols": "Символы",
+ "special-characters-group-greek": "Греческие",
+ "special-characters-group-cyrillic": "Кириллица",
+ "special-characters-group-arabic": "Арабские",
+ "special-characters-group-arabicextended": "Арабские расширенные",
+ "special-characters-group-persian": "Персидские",
+ "special-characters-group-hebrew": "Иврит",
+ "special-characters-group-bangla": "Бенгальские",
+ "special-characters-group-tamil": "Тамильский",
+ "special-characters-group-telugu": "Телугу",
+ "special-characters-group-sinhala": "Сингальские",
+ "special-characters-group-gujarati": "Гуджарати",
+ "special-characters-group-devanagari": "Деванагари",
+ "special-characters-group-thai": "Тайские",
+ "special-characters-group-lao": "Лаосские",
+ "special-characters-group-khmer": "Кхмерские",
+ "special-characters-title-endash": "среднее тире",
+ "special-characters-title-emdash": "длинное тире",
+ "special-characters-title-minus": "знак минус"
}
diff --git a/languages/i18n/rue.json b/languages/i18n/rue.json
index 84d0b222..dfa980a7 100644
--- a/languages/i18n/rue.json
+++ b/languages/i18n/rue.json
@@ -8,7 +8,9 @@
"Nemo bis",
"Reedy",
"Tkalyn",
- "아라"
+ "아라",
+ "Dicto23456",
+ "Macofe"
]
},
"tog-underline": "Підкреслёвати одказы:",
@@ -207,6 +209,7 @@
"otherlanguages": "Іншыма языками",
"redirectedfrom": "(Напрямленый з $1)",
"redirectpagesub": "Сторінка-напрямлїня",
+ "redirectto": "Напрямлїня на:",
"lastmodifiedat": "Послїдня зміна той сторінкы: $2, $1.",
"viewcount": "Сторінка была зображена {{PLURAL:$1|раз|$1разы|$1раз}}.",
"protectedpage": "Замкнута сторінка",
@@ -485,14 +488,13 @@
"passwordreset-capture-help": "Кідь означіте тото поличко, буде імейл (з дочасным геслом) оркем посланя хоснователёви указаный і вам.",
"passwordreset-email": "Адреса електронічной пошты:",
"passwordreset-emailtitle": "Детайлы конта на {{SITENAME}}",
- "passwordreset-emailtext-ip": "Дахто (може Вы, з IP адресы $1) попросив о наставлїня нового гесла до вашого конта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане наступне конто|суть повазяны слїдуючі конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло|Тоты дочасны гесла}} стануть неплатныма {{PLURAL:$5|за день|за $5 днї|за $5 днїв}}.\nТеперь бы хотїло, бы сьте ся приголосили та зволлил нове гесло. Кідь тоту просьбу післав хтось другый або сьте ся на старе гесло роспамнятали і не хочете го змінити, можете тото повідомлїня іґноровати та дале хосновати старе гесло.",
- "passwordreset-emailtext-user": "{{gender:$1|Хоснователь|Хоснователька|Хоснователь}} $1 {{grammar:2sg|{{SITENAME}}}} {{gender:$1|попросив|попросила|попросив}} о наставлїня нового гесла к вашому\nконту на {{grammar:6sg|{{SITENAME}}}} ($4). К тій адресї {{PLURAL:$3|є спряжене наступне конто|суть спряжены наступну конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло|Тоты дочасны гесла}} кінчать {{PLURAL:$5|о єден день|о $5 днї|о $5 днїв}}.\nНынї бы сьте ся мав(а) приголосити у зволити собі нове гесло. Кідь тоту пожадавку\nпослав дахто другый або сьте собі на своє старе гесло спомянув(а),і не хочете го\nзмінити, можете тото повідомлїня іґноровати і надале хосновати старе гесло.",
+ "passwordreset-emailtext-ip": "Дахто (може Вы, з IP адресы $1) попросив о наставлїня нового гесла до вашого конта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане слїдуюче конто|суть повязаны слїдуючі конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло стане неплатным|Тоты дочасны гесла стануть неплатныма}} {{PLURAL:$5|за день|за $5 днї|за $5 днїв}}.\nТеперь бы сьте ся мали приголосити і зволити собі нове гесло. Кідь тоту просьбу послав хтось другый або сьте собі на своє старе гесло спомянули і не хочете го змінити, можете тото повідомлїня іґноровати і дале хосновати старе гесло.",
+ "passwordreset-emailtext-user": "{{gender:$1|Хоснователь|Хоснователька|Хоснователь}} $1 {{grammar:2sg|{{SITENAME}}}} {{gender:$1|попросив|попросила|попросив}} о наставлїня нового гесла до вашого\nконта на {{grammar:6sg|{{SITENAME}}}} ($4). З тов адресов {{PLURAL:$3|є повязане наступне конто|суть повязаны наступны конта}}:\n\n$2\n\n{{PLURAL:$3|Тото дочасне гесло кінчить|Тоты дочасны гесла кінчать}} {{PLURAL:$5|о єден день|о $5 днї|о $5 днїв}}.\nТеперь бы сьте ся мали приголосити і зволити собі нове гесло. Кідь тоту пожадавку \nпослав дахто другый або сьте собі на своє старе гесло спомянули і не хочете го\nзмінити, можете тото повідомлїня іґноровати і надале хосновати старе гесло.",
"passwordreset-emailelement": "Імя хоснователя: $1\nДочасне гесло: $2",
"passwordreset-emailsent": "Імейл з геслом быв посланый.",
"passwordreset-emailsent-capture": "Быв выґенерованый імейл з геслом, што є вказаный ниже.",
"passwordreset-emailerror-capture": "Быв выґенерованый імейл з геслом, котрый є указаный ниже, але ся го не вдало загнати {{GENDER:$2|хоснователёви|хосновательцї}}: $1",
"changeemail": "Зміна імейловой адресы",
- "changeemail-header": "Зміна імейловой адресу ку конту",
"changeemail-text": "Выповнїнём того формуларя собі зміните імейлову адресу. Про потверджіня зміны будете мусити знову задати своє гесло.",
"changeemail-no-info": "Ку тій сторінцї мають прямый приступ лем приголошены хоснователї.",
"changeemail-oldemail": "Теперїшня імейлова адреса:",
@@ -500,7 +502,6 @@
"changeemail-none": "(жадне)",
"changeemail-password": "Ваше гесло на портал {{SITENAME}}:",
"changeemail-submit": "Змінити імейл",
- "changeemail-cancel": "Сторно",
"changeemail-throttled": "Зробили сьте дуже много спроб о приголошіня.\nПросиме Вас, почекайте $1 перед далшов спробов.",
"resettokens": "Реініціалізація клічів",
"resettokens-text": "На тій сторінцї можете реініціалізовати клічі, якы уможнюють приступ к даякым пріватным даным звязаным з вашым контом.\n\n{{GENDER:|Мав|Мала|Мали}} бы сьте то учінити тогды, колы сьте помылково дакому {{GENDER:|прозрадив|прозрадила|прозрадили}}, або ваше конто было зрушене.",
@@ -762,7 +763,6 @@
"mergehistory-same-destination": "Жрідлова і цілёва сторінка не можуть быти такы самы",
"mergehistory-reason": "Причіна:",
"mergelog": "Книга злучованя",
- "pagemerge-logentry": "злучує сторінку [[$1]] зо сторінков [[$2]] (верзії до $3)",
"revertmerge": "Роздїлити",
"mergelogpagetext": "Ниже є список найновшых злучінь історії єдной сторінкы з другов.",
"history-title": "$1: Історія змін",
@@ -809,13 +809,13 @@
"searchrelated": "звязаный",
"searchall": "вшыткы",
"showingresults": "Ниже {{PLURAL:$1|вказане|вказаны|вказаных}} '''$1''' {{PLURAL:$1|резултат|резултаты|резултатів}}, почінаючіх з №&nbsp;'''$2'''",
- "showingresultsheader": "{{PLURAL:$5|Резултат '''$1''' з '''$3'''|Резултаты '''$1 — $2''' з '''$3'''}} про '''$4'''",
"search-nonefound": "На вашу пожадавку не были найджены жадны резултаты.",
"powersearch-legend": "Росшырене гляданя",
"powersearch-ns": "Глядати у просторах назв:",
"powersearch-togglelabel": "Позначіти:",
"powersearch-toggleall": "Вшыткы",
"powersearch-togglenone": "Жадный",
+ "powersearch-remember": "Запамятати выбір про будучі гляданя",
"search-external": "Екстерне гляданя",
"searchdisabled": "<p>Перебачте. Повнотекстове гляданя є дочасно недоступне. Затля можете спробовати гляданя Google; є але можне, же ёго резултаты не мусять быти актуалны.</p>",
"search-error": "Як ся глядало трафіла ся хыба: $1",
@@ -1374,7 +1374,7 @@
"mimetype": "MIME-тіп:",
"download": "скачати",
"unwatchedpages": "Неслїдованы сторінкы",
- "listredirects": "Список напрямлинь",
+ "listredirects": "Список напрямлїнь",
"unusedtemplates": "Нехоснованы шаблоны",
"unusedtemplatestext": "Тота сторінка обсягує список вшыткых сторінок в простору назв {{ns:template}}, котры не суть вложены до жадной іншой сторінкы. Перед їх змазанём не забудьте перевірити іншы одказы.",
"unusedtemplateswlh": "іншы одказы",
@@ -1383,13 +1383,11 @@
"randomincategory": "Трафункова сторінка в катеґорії",
"randomincategory-invalidcategory": "\" $1 \" не є платна назва катеґорії.",
"randomincategory-nopages": "В [[:Category:$1|катеґорії $1]] не суть ниякы сторінкы.",
- "randomincategory-selectcategory": "Дістати трафункову сторінку з катеґорії: $1 $2.",
"randomredirect": "Трафункове напрямлїня",
"randomredirect-nopages": "Простор назв „$1“ не обсягує жадны напрямлїня.",
"statistics": "Штатістіка",
"statistics-header-pages": "Штатістіка сторінок",
"statistics-header-edits": "Штатістіка едітовань",
- "statistics-header-views": "Штатістіка зображіня",
"statistics-header-users": "Штатістіка хоснователїв",
"statistics-header-hooks": "Інша штатістіка",
"statistics-articles": "Обсяговы сторінкы",
@@ -1398,13 +1396,9 @@
"statistics-files": "Наладованы файлы",
"statistics-edits": "Чісло едітованя од основаня вікі {{SITENAME}}",
"statistics-edits-average": "Середнє чісло едітовань на сторінку",
- "statistics-views-total": "Вшыткых переглядів",
- "statistics-views-total-desc": "Зображіня неєствуючіх і шпеціалных сторінок ся не рахують",
- "statistics-views-peredit": "Чісло зображінь на едітованя",
"statistics-users": "Реґістрованы [[Special:ListUsers|хоснователї]]",
"statistics-users-active": "Актівны хоснователї",
"statistics-users-active-desc": "Хоснователї, котры в {{PLURAL:$1|минулого дня|минулых $1 днїв}} провели даяку операцію",
- "statistics-mostpopular": "Найчітанїшы сторінкы",
"pageswithprop": "Сторінкы з властностями",
"pageswithprop-legend": "Сторінкы з властностёв",
"pageswithprop-text": "Тота сторінка обсягує список сторінкы, што хоснують вызначену властность сторінкы.",
@@ -1444,7 +1438,6 @@
"uncategorizedtemplates": "Некатеґоризованы шаблоны",
"unusedcategories": "Нехоснованы катеґорії",
"unusedimages": "Нехоснованы файлы",
- "popularpages": "Популарны статї",
"wantedcategories": "Жаданы катеґорії",
"wantedpages": "Пожадованы статї",
"wantedpages-badtitle": "Резултаты обсягують неправилну назву: $1",
@@ -1499,7 +1492,6 @@
"querypage-disabled": "Тота шпеціална сторінка є заблокована про проблемы з выконом.",
"booksources": "Жрідла книг",
"booksources-search-legend": "Гляданя інформації про книгы",
- "booksources-go": "Выконати",
"booksources-text": "Ниже є список одказів на серверы продаваючі книгы, або котры можуть мати далшы інформації о книгах, котры глядате.",
"booksources-invalid-isbn": "Дане ISBN ся здасть быти неплатне. Перевірте го з оріґіналным жрідлом.",
"specialloguserlabel": "Супроводник:",
@@ -1616,7 +1608,7 @@
"wlheader-enotif": "Упозорнїня ел. поштов є запнуте.",
"wlheader-showupdated": "Сторінкы, котры ся змінили од вашой послїднёй навщівы суть вказаны '''грубо'''",
"wlnote": "Ниже є {{PLURAL:$1|остатня зміна|остатнї $1 зміны|остатнїх $1 змін}} за {{PLURAL:$2|остатнїй|остатнї|остатнїх}} <b>$2</b> {{PLURAL:$2|годину|годины|годин}} до do $4, $3.",
- "wlshowlast": "Вказати зміны за послїднїх $1 годин $2 днїв $3",
+ "wlshowlast": "Вказати зміны за послїднїх $1 годин $2 днїв",
"watchlist-options": "Наставлїна списку слїдованых",
"watching": "Придаваня до списку слїдованя...",
"unwatching": "Одобратя зо списку слїдованя...",
@@ -1662,8 +1654,8 @@
"delete-edit-reasonlist": "Едітовати причіны вымазаня",
"delete-toobig": "Тота сторінка має велику історію едітованя, через $1 {{PLURAL:$1|верзії|верзій|верзій}}. Мазаня такых сторінок є обмеджено, жебы ся заборонило нехоченому нарушіню {{grammar:2sg|{{SITENAME}}}}.",
"delete-warning-toobig": "Тота сторінка має велику історію едітацій, через $1 {{PLURAL:$1|верзії|верзій|верзій}}. Мазаня такых сторінок може нарушыти датабазовы операцім {{grammar:2sg|{{SITENAME}}}}; мерькуйте.",
+ "deleting-backlinks-warning": "'''Позірь:''' Сторінка, котру ся рыхтуєте вымазати, є одказована на [[Special:WhatLinksHere/{{FULLPAGENAME}}|іншых сторінках]] ці вложена до них.",
"rollback": "Вернути назад едітованя",
- "rollback_short": "Вернути назад",
"rollbacklink": "вернути назад",
"rollbacklinkcount": "вернутя $1 {{PLURAL:$1|едітованя|едітовань}} назад",
"rollbacklinkcount-morethan": "вернутя бівше як $1 {{PLURAL:$1|едітованя|едітовань}} назад",
@@ -1797,6 +1789,7 @@
"sp-contributions-search": "Глядати приспівкы",
"sp-contributions-username": "IP-адреса або імя хоснователя:",
"sp-contributions-toponly": "Вказати лем актуалны ревізії",
+ "sp-contributions-newonly": "Вказати лем ревізії, котры суть створїнями сторінок",
"sp-contributions-submit": "Найти",
"whatlinkshere": "Одказы на тоту сторінку",
"whatlinkshere-title": "Сторінкы, што ся одказують на \"$1\"",
@@ -2035,7 +2028,6 @@
"import": "Імпорт сторінок",
"importinterwiki": "Імпорт міджі вікі",
"import-interwiki-text": "Про імпорт звольте жрідлову вікі і назву сторінкы. Дата ревізій і мена авторів будуть захованы. Вшыткы імпорты ся зазначують до [[Special:Log/import|книгы імпортів]].",
- "import-interwiki-source": "Вікі/сторінка-жрідло",
"import-interwiki-history": "Копіровати вшыткы історічны верзії той сторінкы",
"import-interwiki-templates": "Загорнути вшыткы шаблоны",
"import-interwiki-submit": "Імпортовати",
@@ -2076,18 +2068,14 @@
"import-rootpage-nosubpage": "В просторї назв вказаной корїнёвой сторінкы «$1» не дозволены підсторінкы",
"importlogpage": "Книга імпортів",
"importlogpagetext": "На тій сторінцї ся зображують адміністраторскы імпорты сторінок враховано едітовань з іншых вікі.",
- "import-logentry-upload": "імпортовав [[$1]] наладованём файлу",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|ревізія|ревізії|ревізій}}",
- "import-logentry-interwiki": "міджівікі імпорт $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|ревізія|ревізії|ревізій}} з $2",
"javascripttest": "Тестованя JavaScript",
- "javascripttest-title": "Біжать тест в $1",
"javascripttest-pagetext-noframework": "Тота сторінка є резервована про тестованя JavaScript.",
"javascripttest-pagetext-unknownframework": "Незнаный фреймворк тестованя „$1“.",
"javascripttest-pagetext-frameworks": "Просиме, звольте єден з наступных фреймворків тестованя : $1",
"javascripttest-pagetext-skins": "Звольте взгляд під котрым ся мають тесты спустити:",
"javascripttest-qunit-intro": "Смотьте [$1 документацію тестованя] на mediawiki.org",
- "javascripttest-qunit-heading": "Сет тестів JavaScript в MediaWiki QUnit",
"tooltip-pt-userpage": "Ваша сторінка хоснователя",
"tooltip-pt-anonuserpage": "Сторінка хоснователя про IP-адресу, з котрой едітуєте",
"tooltip-pt-mytalk": "Ваша діскузна сторінка",
@@ -2186,7 +2174,6 @@
"pageinfo-robot-policy": "Індексованя роботами",
"pageinfo-robot-index": "Дозволено",
"pageinfo-robot-noindex": "Заказане",
- "pageinfo-views": "Чісло переглядів",
"pageinfo-watchers": "Кількость слїдуючіх сторінку",
"pageinfo-few-watchers": "Менше як $1 {{PLURAL:$1|слїдуючій|слїдуючі|слїдуючіх}}",
"pageinfo-redirects-name": "Чісло напрямлїнь на гевсю сторінку",
@@ -2634,7 +2621,6 @@
"exif-urgency-low": "Низка ($1)",
"exif-urgency-high": "Высока ($1)",
"exif-urgency-other": "Хоснователём дефінована пріоріта ($1)",
- "watchlistall2": "вшыткы",
"namespacesall": "вшыткы",
"monthsall": "вшыткы",
"confirmemail": "Потверджіня адресы ел. пошты",
@@ -2707,7 +2693,6 @@
"watchlisttools-edit": "Нагляд і едітованя списку",
"watchlisttools-raw": "Едітовати як текст",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|діскузія]])",
- "unknown_extension_tag": "Незнама значка росшырїня: „$1“",
"duplicate-defaultsort": "Увага: Імпліцітный ключ сортованя (DEFAULTSORTKEY) „$2“ переписує скоре наставлену годноту „$1“.",
"version": "Верзія",
"version-extensions": "Наіншталованы росшырїня",
@@ -2723,7 +2708,7 @@
"version-parser-function-hooks": "Функціа парсера",
"version-hook-name": "Назва припойного пункту",
"version-hook-subscribedby": "Підписаный на",
- "version-version": "(Верзія $1)",
+ "version-version": "($1)",
"version-license": "Ліценція",
"version-ext-license": "Ліценція",
"version-ext-colheader-name": "Росшырїня",
@@ -2777,6 +2762,7 @@
"specialpages-group-wiki": "Даны і інштрументы",
"specialpages-group-redirects": "Напрямлїня",
"specialpages-group-spam": "Протиспамовы інштрументы",
+ "specialpages-group-developer": "Інштрументы вывоя",
"blankpage": "Порожня сторінка",
"intentionallyblankpage": "Тота сторінка є порожня нароком.",
"external_image_whitelist": " #Тот рядок зохабте без зміны.<pre>\n#Ниже уведьте фраґменты реґуларных выразів (лем часть міджі //).\n#Тоты выразы ся аплікують на URL вкладаных екстерный образків.\n#Тоты, котры згодны, ся зобразять як образок; другы лем як екстерный одказ.\n#Рядкы зачінаючі знаком # ся поважують за коментарї.\n#На великости букв не залежыть.\n\n#Вшыткы реґуларны выразы зазначте над тым рядком. Тотрядок зохабте без зміны.</pre>",
@@ -2860,19 +2846,20 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$1|змінив|змінила}} членство в ґрупах про $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|быв автоматічно переведеный|была автоматічно переведана}} з $4 на $5",
"rightsnone": "(жадне)",
+ "revdelete-summary": "коментарь едітованя",
+ "feedback-adding": "Коментарь ся придавать на сторінку…",
+ "feedback-bugcheck": "Герешнї! Лем перевірьте, ці то не єдна з [$1 уж знамых хыб].",
+ "feedback-bugnew": "Перевірив(а) єм то. Хочу повідомити нову хыбу.",
"feedback-bugornote": "Кідь сьте прирыхтованый подробно описати технічный проблем, можете [$1 наголосити хыбу].\nІнакше можете схносновати простый формулать ниже. Ваш коментарь буде приданый на сторінку „[$3 $2]“ разом з вашым іменом хоснователя тай інформаціов о тім, якый бровсер хоснуєте.",
- "feedback-subject": "Предмет:",
- "feedback-message": "Повідомлїня:",
"feedback-cancel": "Сторно",
- "feedback-submit": "Одослати одозву",
- "feedback-adding": "Коментарь ся придавать на сторінку…",
+ "feedback-close": "Готово",
"feedback-error1": "Хыба: Нерозознаый резултат з API",
"feedback-error2": "Хыба: Едітованя ся не вдало",
"feedback-error3": "Хыба: API не вернуло жадну одповідь",
+ "feedback-message": "Повідомлїня:",
+ "feedback-subject": "Предмет:",
+ "feedback-submit": "Одослати",
"feedback-thanks": "Дякуєме! Ваш коментарь быв приданый на сторінку „[$2 $1]“.",
- "feedback-close": "Готово",
- "feedback-bugcheck": "Герешнї! Лем перевірьте, ці то не єдна з [$1 уж знамых хыб].",
- "feedback-bugnew": "Перевірив(а) єм то. Хочу повідомити нову хыбу.",
"searchsuggest-search": "Глядати",
"searchsuggest-containing": "обсягуючій...",
"api-error-badaccess-groups": "Не мате дозволено наладововати файлы на тоту вікі.",
@@ -2946,5 +2933,22 @@
"expand_templates_remove_comments": "Одстранити коментарї",
"expand_templates_remove_nowiki": "Іґноровати в резултатї значкы <nowiki>",
"expand_templates_generate_xml": "Указати сінтаксічный стром в XML",
- "expand_templates_preview": "Нагляд"
+ "expand_templates_preview": "Нагляд",
+ "special-characters-group-latin": "Латиньскы",
+ "special-characters-group-latinextended": "Росшырена латинка",
+ "special-characters-group-ipa": "МФА (IPA)",
+ "special-characters-group-symbols": "Сімболы",
+ "special-characters-group-greek": "Ґрецькы",
+ "special-characters-group-cyrillic": "Кірíліця",
+ "special-characters-group-arabic": "Арабськы",
+ "special-characters-group-arabicextended": "Росшырїня Аравчіны",
+ "special-characters-group-persian": "Перськы",
+ "special-characters-group-hebrew": "Гебрейскы",
+ "special-characters-group-bangla": "Бенгалскы",
+ "special-characters-group-telugu": "Телуґу",
+ "special-characters-group-sinhala": "Сінгалскы",
+ "special-characters-group-gujarati": "Ґуджараті",
+ "special-characters-group-thai": "Тайськы",
+ "special-characters-group-lao": "Лаоськы",
+ "special-characters-group-khmer": "Кгмерськы"
}
diff --git a/languages/i18n/rup.json b/languages/i18n/rup.json
index daff7f85..78924738 100644
--- a/languages/i18n/rup.json
+++ b/languages/i18n/rup.json
@@ -16,7 +16,7 @@
"tog-showtoolbar": "Aratâ bara di halati trâ alâxiri",
"tog-editondblclick": "Alâxeaști frândzâli pri-tu click duplo",
"tog-editsectiononrightclick": "Activeadzâ alâxirea a secțiuniloru pri-tu click ndreapta pi titlu a secțiunâľei",
- "tog-watchcreations": "Adavgâ frândzâli pi cari li adar și fișierele pi cari li ncari la lista a ńia di frândzâ avinati",
+ "tog-watchcreations": "Adavgâ frândzâli pi cari li adaru și fișierili pi cari li ancarcu la lista a ńia di frândzâ avinati",
"tog-watchdefault": "Adavgâ frândzâli și fișierili pi cari li alâxescu la lista a ńia di avinari",
"tog-watchmoves": "Adavgâ frândzâli și fișierili pi cari li dau numâ noao la lista a ńia di avinari",
"tog-watchdeletion": "Adavgâ frândzâli și fișierili pi cari li aștergu la lista a ńia di avinari",
@@ -168,6 +168,10 @@
"view-foreign": "Vedz la $1",
"edit": "Alâxire",
"edit-local": "Alâxeaști descrierea localâ",
+ "create": "Prindiri",
+ "create-local": "Adavgâ descrierea localâ",
+ "editthispage": "Alâxeaști aestâ frândzâ",
+ "create-this-page": "Adari aestâ frândzâ",
"delete": "Așcirḑire",
"deletethispage": "Așteardzi frândza",
"undeletethispage": "Aflâ frundza aștearsâ",
@@ -198,6 +202,7 @@
"otherlanguages": "Pi alanti limbi",
"redirectedfrom": "(yinitâ di la $1)",
"redirectpagesub": "Frândzâ di redirecționari",
+ "redirectto": "Purtari la:",
"lastmodifiedat": "Aestâ frândzâ fu alâxitâ di-tu soni pi $1, la $2.",
"viewcount": "Aestâ frândzâ fu mutritâ di {{PLURAL:$1|mași unâ oarâ|$1 ori}}.",
"protectedpage": "Frândzâ protejatâ",
@@ -256,6 +261,9 @@
"thisisdeleted": "Vedz icâ adu napoea $1?",
"viewdeleted": "Vedz $1?",
"restorelink": "Vedz {{PLURAL:$1|unâ alâxiri aștearsâ|$1 (di) alâxiri aștearsi}}",
+ "feedlinks": "Feed:",
+ "feed-invalid": "Turlii di feed invalidâ",
+ "feed-unavailable": "Nu suntu disponibili fluxuri web.",
"site-rss-feed": "$1 Abonari RSS",
"site-atom-feed": "$1 Abonari Atomu",
"page-rss-feed": "„$1” Abonari RSS",
@@ -274,16 +282,53 @@
"nstab-help": "Agiutoru",
"nstab-category": "Categorie",
"nosuchaction": "Aeastâ acțiuni nu easti",
+ "nosuchspecialpage": "Aestâ frândzâ maxusâ (specialâ) nu ari aoați",
+ "error": "Eroari (alatus)",
+ "databaseerror": "Alatus la baza di dati",
+ "databaseerror-text": "Apâru unu alatusu la interogarea bazâľei di dati. Aestâ poati s-hibâ trâ ațea câ ari unâ problemâ di software.",
+ "databaseerror-textcl": "Apâru unu alatusu la interogarea bazâľei di dati.",
+ "databaseerror-query": "Interogari: $1",
+ "databaseerror-function": "Funcție: $1",
"databaseerror-error": "Eroari (alutusu): $1",
+ "laggedslavemode": "<strong>Sacănu!</strong>: S-poati ca frândza s-nu aibâ actualizărili di-tu soni.",
"readonly": "Baza di dati easti blocatâ (ncľisâ) la nyrâpseari",
+ "missingarticle-rev": "(versiuniľea#: $1)",
+ "missingarticle-diff": "(Dif: $1, $2)",
+ "internalerror": "Sfalmâ di nuntru",
+ "internalerror_info": "Sfalmâ di nuntru: $1",
+ "filecopyerror": "Fișierlu \"$1\" nu putu s-hibâ copiatu \"$2\".",
+ "filerenameerror": "Fișierlu \"$1\" nu putu s-hibâ mutatu \"$2\".",
+ "filedeleteerror": "Fișierlu \"$1\" nu si putu s-hibâ aștersu.",
+ "directorycreateerror": "Nu s-poati si s-facâ directorlu \"$1\".",
+ "directoryreadonlyerror": "Directorlu \"$1\" easti mași trâ adghivâsiri.",
+ "directorynotreadableerror": "Directorlu \"$1\" nu s-poati si s-adghivâseascâ.",
+ "filenotfound": "Fișierlu \"$1\" nu si putu s-hibâ aflatu.",
+ "badtitle": "Titlu alatusu",
"viewsource": "Vez-u textu",
+ "viewsource-title": "Vedz ivurlu trâ $1",
+ "ns-specialprotected": "Frâdzâli maxusi (speciali) nu potu s-hibâ alâxiti.",
+ "exception-nologin": "Nu hii ligatu",
+ "exception-nologin-text": "Leagâ-ti ca sâ poț sâ u vedz aestâ frândzâ i acțiuni.",
+ "exception-nologin-text-manual": "Vâ pâlâcârsimu sâ $1 ca s-puteț s-u videț frândza i acțiunea aestâ.",
+ "virus-badscanner": "Configurațiľe alatusitâ: scaneru di virus nicunuscutu: \"$1\"",
+ "welcomeuser": "Ghini viniș, $1!",
+ "welcomecreation-msg": "Contulu (isape) a tău fu adratu.\nPoț s-lu alâxești [[Special:Preferences|Prutimisirli]] a tali ma câ vrei.",
"yourname": "Numa di utilizatoru:",
"userlogin-yourname": "Numa di utilizatoru:",
"userlogin-yourname-ph": "Bagâ-u numa a ta di utilizatoru",
"createacct-another-username-ph": "Bagâ-u numa di utilizatoru",
"yourpassword": "Zboru cľeae:",
+ "userlogin-yourpassword": "Zboru acrifo (parolâ)",
+ "userlogin-yourpassword-ph": "Bagâ-u parola (zboru acrifo)",
+ "createacct-yourpassword-ph": "Bagâ-u parola (zboru acrifo)",
"yourpasswordagain": "Bagâ-u cľeae diznou:",
+ "createacct-yourpasswordagain": "Apuchiruseaști zborlu mistico",
+ "createacct-yourpasswordagain-ph": "Bagâ-u parola diz-nou",
"remembermypassword": "Țâni minti ligâtura a mea pi browserlu aestu (cheari dupu $1 {{PLURAL:$1|dzuuâ|dzâli}})",
+ "userlogin-remembermypassword": "Pâstreadzâ ligarea",
+ "userlogin-signwithsecure": "Ufiliseaști unâ conexiuni sigurâ",
+ "yourdomainname": "Domeniulu a tău:",
+ "password-change-forbidden": "Nu poț s-li alâxești zboarâli mistico pi aestu wiki.",
"login": "Leagâ-ti",
"nav-login-createaccount": "Leagâ-ti / Fă contu (isape)",
"userlogin": "Leagâ-ti / Fă contu (isape)",
@@ -292,17 +337,52 @@
"userlogout": "Dizleagâ-ti",
"notloggedin": "Nu hii ligatu",
"userlogin-noaccount": "N-ai nicâ contu (isape)?",
+ "userlogin-joinproject": "Bagâ-ti la {{SITENAME}}",
"nologin": "N-ai nicâ contu (isape)? $1.",
"nologinlink": "Fă unu utilizatoru a tău tora",
"createaccount": "Fă contu (isape)",
+ "gotaccount": "Ai nicâ contu (isape)? $1.",
"gotaccountlink": "Leagâ-ti",
+ "userlogin-resetlink": "U agârșii parola i numa di utilizatoru?",
+ "userlogin-resetpassword-link": "U agârșii parola?",
+ "userlogin-helplink2": "Agiutoru la ligari",
+ "userlogin-createanother": "Adrari contu nou",
"createacct-emailrequired": "Adresâ di carti electronicâ",
"createacct-emailoptional": "Adresâ di carti electronicâ (opționalu)",
"createacct-email-ph": "Bagâ-u adresa a ta di carti electronicâ",
"createacct-another-email-ph": "Bagâ-u adresa di carti electronicâ",
+ "createaccountmail": "Ufiliseaști unâ parolâ (zboru acrifo) pirastica și u pitreați la adresa di e-mail cari u dzâț tini",
"createacct-realname": "Numa realâ (opționalu)",
"createaccountreason": "Furńie:",
"createacct-reason": "Furńie",
+ "createacct-reason-ph": "Câ ți feci altu contu",
+ "createacct-captcha": "Duchimie (provâ) di securitati",
+ "createacct-imgcaptcha-ph": "Bagâ lu textu pi cari lu vedz disuprâ",
+ "createacct-submit": "Adrari contu-ț",
+ "createacct-another-submit": "Adrari altu contu",
+ "createacct-benefit-heading": "{{SITENAME}} s-feasi cu oamińi ca tini.",
+ "createacct-benefit-body1": "{{PLURAL:$1|alâxiri|alâxiri|di alâxiri}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|frândzâ|frândzâ|de frândzâ}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|contribuitoru proaspitu|contribuitori proaspiț|di contribuitori proaspiț}}",
+ "badretype": "Zboarâli acrifo pi cari lâ bâgaș nu suntu unâ.",
+ "userexists": "Numa di utilizatoru pi cari u bâgaș ari nica aoa. Ti oru, ľea altâ numâ.",
+ "loginerror": "Sfalmâ di ligari",
+ "createacct-error": "Sfalmâ la adrarea a contlui",
+ "createaccounterror": "Nu s-putu si s-facâ contu: $1",
+ "loginsuccesstitle": "Ligarea s-bitisi ghini",
+ "loginsuccess": "'''Ti ligai la {{SITENAME}} ca „$1”.'''",
+ "loginlanguagelabel": "Limbâ: $1",
+ "pt-login": "Leagâ-ti",
+ "pt-login-button": "Leagâ-ti",
+ "pt-createaccount": "Fă contu (isape)",
+ "pt-userlogout": "Dizleagâ-ti",
+ "bold_sample": "Scriari groasâ (bold)",
+ "bold_tip": "Scriari groasâ (bold)",
+ "italic_sample": "Scriari aplicatâ (italic)",
+ "italic_tip": "Scriari aplicatâ (italic)",
+ "link_sample": "Titlu a ligâturiľei",
+ "link_tip": "Ligâturâ di nuntru",
+ "extlink_sample": "http://www.example.com titlu a ligâturiľei",
"summary": "Rezumatu:",
"minoredit": "Aestâ easti unâ alâxiri minorâ (ńicâ)",
"watchthis": "Mutrea-u frândzâ aestâ",
@@ -344,7 +424,6 @@
"newpages-username": "Numa di utilizatoru:",
"move": "Mutari",
"movethispage": "Mutâ frândza aestâ",
- "booksources-go": "Du-ti",
"allpagessubmit": "Du-ti",
"watchlist": "Frândzâ avinati",
"mywatchlist": "Frândzâ avinati",
diff --git a/languages/i18n/ruq-cyrl.json b/languages/i18n/ruq-cyrl.json
index 4972df2c..2262b832 100644
--- a/languages/i18n/ruq-cyrl.json
+++ b/languages/i18n/ruq-cyrl.json
@@ -1,254 +1,252 @@
{
- "@metadata": {
- "authors": [
- "Andrijko Z.",
- "Кумулај Маркус",
- "Макѕе",
- "Приетен тев"
- ]
- },
- "tog-underline": "Сублиниаере легајтулс:",
- "sun": "Дум",
- "mon": "Лун",
- "tue": "Мар",
- "wed": "Мие",
- "thu": "Јои",
- "fri": "Вин",
- "sat": "Сам",
- "january": "јануари",
- "february": "февруари",
- "march": "марти",
- "april": "априли",
- "may_long": "мај",
- "june": "јуни",
- "july": "јули",
- "august": "аугуст",
- "september": "септември",
- "october": "октомври",
- "november": "нојември",
- "december": "децембри",
- "january-gen": "јануари",
- "february-gen": "февруари",
- "march-gen": "марти",
- "april-gen": "априли",
- "may-gen": "мај",
- "june-gen": "јуни",
- "july-gen": "јули",
- "august-gen": "аугуст",
- "september-gen": "септември",
- "october-gen": "октомври",
- "november-gen": "нојември",
- "december-gen": "децември",
- "jan": "јан",
- "feb": "фев",
- "mar": "мар",
- "apr": "апр",
- "may": "мај",
- "jun": "јун",
- "jul": "јул",
- "aug": "ауг",
- "sep": "сеп",
- "oct": "окт",
- "nov": "нов",
- "dec": "дец",
- "category_header": "Пажус ен категориа \"$1\"",
- "subcategories": "Субкатегории",
- "listingcontinuesabbrev": "контину",
- "about": "Дајпул",
- "cancel": "ренунтаје",
- "mytalk": "Мај дискућу",
- "errorpagetitle": "Еру",
- "tagline": "Де {{SITENAME}}",
- "help": "ајутор",
- "search": "каутај",
- "searchbutton": "каутај",
- "searcharticle": "Лие",
- "history": "Хисториа пажус",
- "printableversion": "верцион принтаблу",
- "permalink": "Легајтул перманентул",
- "edit": "Едита",
- "editthispage": "Едита це пажу",
- "delete": "Делајре",
- "protect": "Ажатме",
- "newpage": "Пажи нови",
- "talkpagelinktext": "дискућу",
- "personaltools": "Алатки персоналу",
- "talk": "дискућу",
- "views": "Ви",
- "toolbox": "алатуникул",
- "redirectedfrom": "(Редирецћионат де ла $1)",
- "jumpto": "Лиа а:",
- "jumptonavigation": "навигацион",
- "jumptosearch": "каутај",
- "aboutsite": "дајпул {{SITENAME}}",
- "aboutpage": "Project:дајпул {{SITENAME}}",
- "copyrightpage": "{{ns:project}}:Права даутору",
- "currentevents": "Тебикору",
- "currentevents-url": "Project:Тебикору",
- "disclaimers": "Тајменулс",
- "disclaimerpage": "Project:тајменул",
- "edithelp": "Ајутор пентре едитаере",
- "mainpage": "Пажу принципу",
- "mainpage-description": "Пажу принципу",
- "privacy": "Политикмус де лижитул",
- "privacypage": "Project:политикмус де лижитул",
- "retrievedfrom": "адусе де \"$1\"",
- "youhavenewmessages": "Весес $1 ($2).",
- "editsection": "едитаере",
- "editold": "едита",
- "editsectionhint": "Едитаере ћисецион: $1",
- "toc": "Купринс",
- "showtoc": "аратај",
- "hidetoc": "аскунде",
- "site-rss-feed": "$1 RSS фитул",
- "site-atom-feed": "$1 Atom фитул",
- "page-rss-feed": "\"$1\" RSS Фитул",
- "page-atom-feed": "\"$1\" Atom Фитул",
- "nstab-user": "Пажу дутилизатору",
- "nstab-project": "Пројекту",
- "nstab-image": "фиширул",
- "nstab-category": "категориа",
- "viewsource": "баганаере",
- "yourname": "Ном дутилизатору:",
- "login": "Приласнаере",
- "nav-login-createaccount": "Приласнаере / Нажбе",
- "userlogin": "Приласнаере / креаре нутилизатору",
- "userlogout": "отластаере",
- "bold_sample": "Ескрире алдин",
- "bold_tip": "Ескрире алдин",
- "italic_sample": "Ескрире курсиве",
- "italic_tip": "Ескрире курсиве",
- "link_sample": "Ном с-легајтулс",
- "link_tip": "Легајтул интернул",
- "extlink_sample": "http://www.example.com ном с-легајтулс",
- "extlink_tip": "Легајтул ќстернул (вец префикс http://)",
- "headline_sample": "Ескрире с-титлус",
- "headline_tip": "Титлу де нивел 2",
- "nowiki_sample": "Интродуца но-Вики иси",
- "nowiki_tip": "Но-Бики клашу",
- "image_tip": "Сантигул инсерат",
- "media_tip": "Легајтул фиширул де медиа",
- "sig_tip": "Утилизаторуном ет дата ет темп",
- "hr_tip": "Линеа оризонтала (еснидивале)",
- "summary": "Сумар:",
- "subject": "Субјект / титлур:",
- "minoredit": "Ацеаста есте о едитаре минорај",
- "watchthis": "Клајаере це пажу",
- "showpreview": "Ратај превизуализаре",
- "showdiff": "Аратај шумбајрае",
- "newarticle": "(Нова)",
- "editing": "о $1 едитаере",
- "editingsection": "Едитаере $1 (секцион)",
- "copyrightwarning": "<!-- Гол деоцамдатај. Вертисментул се флај ен MediaWiki:Summary -->\nТе рог нотари ла дин контрибући ал {{SITENAME}} сунт консидераере релесават супра $2 (суах $1 дин детајс). Аџтеу несав те се тексти сунт едитаере деномерци дет редистрибутаере дин вент, хатае ици.<br /> Ту есте ностре промисаере бонти ус ту скрирсте це се, нега копиаере дин публик домен нега симилари ресорсуе. '''НЕ СУБМИТЕ КОПИЛЕГРУ СКРИЕ САС ПЕРМИћИОН!'''",
- "template-protected": "(ажатмат)",
- "template-semiprotected": "(семи-ажатмат)",
- "currentrev": "Верцион куренту",
- "revisionasof": "Верцион де дата $1",
- "previousrevision": "←Версиунеа нтериоарај",
- "cur": "актуалу",
- "last": "прецеденте",
- "history-title": "Едитаерехисториа пентру \"$1\"",
- "lineno": "линиа $1:",
- "compareselectedversions": "Компара верционс селектус",
- "editundo": "анулизаје",
- "viewprevnext": "Ву ($1 {{int:pipe-separator}} $2) ($3)",
- "mypreferences": "Мај префиренћу",
- "recentchanges": "шумбајрае рецентае",
- "rcshowhideminor": "$1 модификајриле миноре",
- "rcshowhidebots": "$1 роботи",
- "rcshowhideliu": "$1 утилизатори приласнаери",
- "rcshowhideanons": "$1 утилизатори аноними",
- "rcshowhidemine": "$1 мес модификационс",
- "rclinks": "Ратај ултимеле $1 модификајри дин ултимеле $2 зиле.<br />\n$3",
- "diff": "диференћу",
- "hist": "хисториа",
- "hide": "аскунде",
- "show": "Аратај",
- "minoreditletter": "м",
- "newpageletter": "Н",
- "boteditletter": "б",
- "recentchangeslinked": "Модификајри корелате",
- "recentchangeslinked-feed": "Модификајри корелате",
- "recentchangeslinked-toolbox": "Модификајри корелате",
- "upload": "тримиће фиширул",
- "file-anchor-link": "фиширул",
- "filehist": "Хисториа фиширулу",
- "filehist-current": "куренту",
- "filehist-datetime": "Дата/Темп",
- "filehist-user": "Утилизатору",
- "filehist-dimensions": "Дименционс",
- "filehist-comment": "коментарул",
- "imagelinks": "Легајтул фиширул де медиа",
- "linkstoimage": "Цес {{PLURAL:$1|page links||пажи легајтент}} а це фиширул:",
- "randompage": "алаећу",
- "nbytes": "$1 {{PLURAL:$1|бајтул|бајтулс}}",
- "nmembers": "$1 {{PLURAL:$1|мембру|мембри}}",
- "newpages": "Пажи нови",
- "booksources": "Сурсе де цајрћи",
- "allpages": "Тоатс пажи",
- "alphaindexline": "$1 во $2",
- "allarticles": "Тоат пажи",
- "allpagessubmit": "Треме",
- "watchlist": "Мај клајаеру",
- "mywatchlist": "Мај клајаере",
- "watch": "клајаере",
- "unwatch": "Деклајаера",
- "watching": "О клајаере...",
- "unwatching": "О деклајаере...",
- "rollbacklink": "ревенире",
- "namespace": "лСпаћи:",
- "invert": "Ќсклуда спаћул",
- "blanknamespace": "(Принципу)",
- "contributions": "Контрибући дутилизатори",
- "mycontris": "Мес контрибући",
- "contribsub2": "пентру $1 ($2)",
- "uctop": "(сусверф)",
- "sp-contributions-talk": "дискућу",
- "whatlinkshere": "Легајтул а це пажу",
- "whatlinkshere-title": "Пажус легајтулент а $1",
- "nolinkshere": "Пажи не легајтент а '''[[:$1]]'''.",
- "istemplate": "викулабе",
- "whatlinkshere-links": "← легајтулс",
- "blocklink": "блокуапаје",
- "contribslink": "контрибући",
- "revertmove": "ревенире",
- "export": "Ќспорта пажи",
- "thumbnail-more": "ќсинде",
- "thumbnail_error": "Еру вец лкреаре де тумбнел: $1",
- "tooltip-pt-userpage": "Мој пажу дутилизатору",
- "tooltip-pt-mytalk": "Мај пажу дискућус",
- "tooltip-pt-preferences": "Мај префиренћу",
- "tooltip-pt-watchlist": "Листа пажинилор пе царе ле мониторизез.",
- "tooltip-pt-mycontris": "Листа де мес контрибуционс",
- "tooltip-pt-login": "Путе приласнаере, не лест доист.",
- "tooltip-pt-logout": "отластаере",
- "tooltip-ca-talk": "Дискућие деспре артикол",
- "tooltip-ca-edit": "Поћи едита ацеатај пажинај. Те ругајм се превизуализези конћинутул енаинте де салваре.",
- "tooltip-ca-protect": "Ажатме це пажу",
- "tooltip-ca-delete": "Делајре це пажу",
- "tooltip-search": "Каутај ен {{SITENAME}}",
- "tooltip-n-mainpage": "Вижита лпажу принципу",
- "tooltip-n-portal": "Дајпул лпројецту, љуелљуес путе фараере, о трувес саби.",
- "tooltip-n-currentevents": "Гајсеште информаћии деспре евениментиќ куренте",
- "tooltip-n-recentchanges": "Листа дес шумбајрае рецентае ен лБики.",
- "tooltip-n-randompage": "Донаре нпажу алаетоаре",
- "tooltip-n-help": "Ајутор трувес иси.",
- "tooltip-t-whatlinkshere": "Листа тутурор пажинилор вики царе кондуц спре ацестај пажинај",
- "tooltip-t-contributions": "Ву листа де контрибући де цутилизатору",
- "tooltip-t-upload": "Тремер фиширул",
- "tooltip-t-specialpages": "Листа де тоат пажи специалус",
- "tooltip-ca-nstab-user": "Ву лпажу дутилизатору",
- "tooltip-ca-nstab-project": "Ву лпажу де пројекту",
- "tooltip-ca-nstab-category": "Ву лпажу де категориа",
- "tooltip-minoredit": "Це-ест нмодификацион минару",
- "tooltip-save": "Салваере тес модификационс",
- "tooltip-diff": "Ратај це модификајри аи фајцут текстулуи.",
- "file-nohires": "Це-н-ест нресолуцион маи мари.",
- "show-big-image": "Мареште ресолуцион",
- "bad_image_list": "Форматул есте урмајторул:\n\nНумај елементијле унеи листе сунт луате ен цонсидераере. (Аџестеа сунт линии це енцеп цу *)\n\nПрима легајтурај де пе линие требуие се фие спре ун фишиер дефецтуос.\n\nОрице легајтури це урмеазај пе аценаши линие сунт цонсидераете еџцепћии, дицај пажи унде фишиерул поате пајреа инцлус дирецт.",
- "metadata": "Метадата",
- "watchlistall2": "тоат",
- "namespacesall": "тоат",
- "monthsall": "тоат",
- "specialpages": "Пажи спецалус"
+ "@metadata": {
+ "authors": [
+ "Andrijko Z.",
+ "Кумулај Маркус",
+ "Макѕе",
+ "Приетен тев"
+ ]
+ },
+ "tog-underline": "Сублиниаере легајтулс:",
+ "sun": "Дум",
+ "mon": "Лун",
+ "tue": "Мар",
+ "wed": "Мие",
+ "thu": "Јои",
+ "fri": "Вин",
+ "sat": "Сам",
+ "january": "јануари",
+ "february": "февруари",
+ "march": "марти",
+ "april": "априли",
+ "may_long": "мај",
+ "june": "јуни",
+ "july": "јули",
+ "august": "аугуст",
+ "september": "септември",
+ "october": "октомври",
+ "november": "нојември",
+ "december": "децембри",
+ "january-gen": "јануари",
+ "february-gen": "февруари",
+ "march-gen": "марти",
+ "april-gen": "априли",
+ "may-gen": "мај",
+ "june-gen": "јуни",
+ "july-gen": "јули",
+ "august-gen": "аугуст",
+ "september-gen": "септември",
+ "october-gen": "октомври",
+ "november-gen": "нојември",
+ "december-gen": "децември",
+ "jan": "јан",
+ "feb": "фев",
+ "mar": "мар",
+ "apr": "апр",
+ "may": "мај",
+ "jun": "јун",
+ "jul": "јул",
+ "aug": "ауг",
+ "sep": "сеп",
+ "oct": "окт",
+ "nov": "нов",
+ "dec": "дец",
+ "category_header": "Пажус ен категориа \"$1\"",
+ "subcategories": "Субкатегории",
+ "listingcontinuesabbrev": "контину",
+ "about": "Дајпул",
+ "cancel": "ренунтаје",
+ "mytalk": "Мај дискућу",
+ "errorpagetitle": "Еру",
+ "tagline": "Де {{SITENAME}}",
+ "help": "ајутор",
+ "search": "каутај",
+ "searchbutton": "каутај",
+ "searcharticle": "Лие",
+ "history": "Хисториа пажус",
+ "printableversion": "верцион принтаблу",
+ "permalink": "Легајтул перманентул",
+ "edit": "Едита",
+ "editthispage": "Едита це пажу",
+ "delete": "Делајре",
+ "protect": "Ажатме",
+ "newpage": "Пажи нови",
+ "talkpagelinktext": "дискућу",
+ "personaltools": "Алатки персоналу",
+ "talk": "дискућу",
+ "views": "Ви",
+ "toolbox": "алатуникул",
+ "redirectedfrom": "(Редирецћионат де ла $1)",
+ "jumpto": "Лиа а:",
+ "jumptonavigation": "навигацион",
+ "jumptosearch": "каутај",
+ "aboutsite": "дајпул {{SITENAME}}",
+ "aboutpage": "Project:дајпул {{SITENAME}}",
+ "copyrightpage": "{{ns:project}}:Права даутору",
+ "currentevents": "Тебикору",
+ "currentevents-url": "Project:Тебикору",
+ "disclaimers": "Тајменулс",
+ "disclaimerpage": "Project:тајменул",
+ "edithelp": "Ајутор пентре едитаере",
+ "mainpage": "Пажу принципу",
+ "mainpage-description": "Пажу принципу",
+ "privacy": "Политикмус де лижитул",
+ "privacypage": "Project:политикмус де лижитул",
+ "retrievedfrom": "адусе де \"$1\"",
+ "youhavenewmessages": "Весес $1 ($2).",
+ "editsection": "едитаере",
+ "editold": "едита",
+ "editsectionhint": "Едитаере ћисецион: $1",
+ "toc": "Купринс",
+ "showtoc": "аратај",
+ "hidetoc": "аскунде",
+ "site-rss-feed": "$1 RSS фитул",
+ "site-atom-feed": "$1 Atom фитул",
+ "page-rss-feed": "\"$1\" RSS Фитул",
+ "page-atom-feed": "\"$1\" Atom Фитул",
+ "nstab-user": "Пажу дутилизатору",
+ "nstab-project": "Пројекту",
+ "nstab-image": "фиширул",
+ "nstab-category": "категориа",
+ "viewsource": "баганаере",
+ "yourname": "Ном дутилизатору:",
+ "login": "Приласнаере",
+ "nav-login-createaccount": "Приласнаере / Нажбе",
+ "userlogin": "Приласнаере / креаре нутилизатору",
+ "userlogout": "отластаере",
+ "bold_sample": "Ескрире алдин",
+ "bold_tip": "Ескрире алдин",
+ "italic_sample": "Ескрире курсиве",
+ "italic_tip": "Ескрире курсиве",
+ "link_sample": "Ном с-легајтулс",
+ "link_tip": "Легајтул интернул",
+ "extlink_sample": "http://www.example.com ном с-легајтулс",
+ "extlink_tip": "Легајтул ќстернул (вец префикс http://)",
+ "headline_sample": "Ескрире с-титлус",
+ "headline_tip": "Титлу де нивел 2",
+ "nowiki_sample": "Интродуца но-Вики иси",
+ "nowiki_tip": "Но-Бики клашу",
+ "image_tip": "Сантигул инсерат",
+ "media_tip": "Легајтул фиширул де медиа",
+ "sig_tip": "Утилизаторуном ет дата ет темп",
+ "hr_tip": "Линеа оризонтала (еснидивале)",
+ "summary": "Сумар:",
+ "subject": "Субјект / титлур:",
+ "minoredit": "Ацеаста есте о едитаре минорај",
+ "watchthis": "Клајаере це пажу",
+ "showpreview": "Ратај превизуализаре",
+ "showdiff": "Аратај шумбајрае",
+ "newarticle": "(Нова)",
+ "editing": "о $1 едитаере",
+ "editingsection": "Едитаере $1 (секцион)",
+ "copyrightwarning": "<!-- Гол деоцамдатај. Вертисментул се флај ен MediaWiki:Summary -->\nТе рог нотари ла дин контрибући ал {{SITENAME}} сунт консидераере релесават супра $2 (суах $1 дин детајс). Аџтеу несав те се тексти сунт едитаере деномерци дет редистрибутаере дин вент, хатае ици.<br /> Ту есте ностре промисаере бонти ус ту скрирсте це се, нега копиаере дин публик домен нега симилари ресорсуе. '''НЕ СУБМИТЕ КОПИЛЕГРУ СКРИЕ САС ПЕРМИћИОН!'''",
+ "template-protected": "(ажатмат)",
+ "template-semiprotected": "(семи-ажатмат)",
+ "currentrev": "Верцион куренту",
+ "revisionasof": "Верцион де дата $1",
+ "previousrevision": "←Версиунеа нтериоарај",
+ "cur": "актуалу",
+ "last": "прецеденте",
+ "history-title": "Едитаерехисториа пентру \"$1\"",
+ "lineno": "линиа $1:",
+ "compareselectedversions": "Компара верционс селектус",
+ "editundo": "анулизаје",
+ "viewprevnext": "Ву ($1 {{int:pipe-separator}} $2) ($3)",
+ "mypreferences": "Мај префиренћу",
+ "recentchanges": "шумбајрае рецентае",
+ "rcshowhideminor": "$1 модификајриле миноре",
+ "rcshowhidebots": "$1 роботи",
+ "rcshowhideliu": "$1 утилизатори приласнаери",
+ "rcshowhideanons": "$1 утилизатори аноними",
+ "rcshowhidemine": "$1 мес модификационс",
+ "rclinks": "Ратај ултимеле $1 модификајри дин ултимеле $2 зиле.<br />\n$3",
+ "diff": "диференћу",
+ "hist": "хисториа",
+ "hide": "аскунде",
+ "show": "Аратај",
+ "minoreditletter": "м",
+ "newpageletter": "Н",
+ "boteditletter": "б",
+ "recentchangeslinked": "Модификајри корелате",
+ "recentchangeslinked-feed": "Модификајри корелате",
+ "recentchangeslinked-toolbox": "Модификајри корелате",
+ "upload": "тримиће фиширул",
+ "file-anchor-link": "фиширул",
+ "filehist": "Хисториа фиширулу",
+ "filehist-current": "куренту",
+ "filehist-datetime": "Дата/Темп",
+ "filehist-user": "Утилизатору",
+ "filehist-dimensions": "Дименционс",
+ "filehist-comment": "коментарул",
+ "imagelinks": "Легајтул фиширул де медиа",
+ "linkstoimage": "Цес {{PLURAL:$1|page links||пажи легајтент}} а це фиширул:",
+ "randompage": "алаећу",
+ "nbytes": "$1 {{PLURAL:$1|бајтул|бајтулс}}",
+ "nmembers": "$1 {{PLURAL:$1|мембру|мембри}}",
+ "newpages": "Пажи нови",
+ "booksources": "Сурсе де цајрћи",
+ "allpages": "Тоатс пажи",
+ "allarticles": "Тоат пажи",
+ "allpagessubmit": "Треме",
+ "watchlist": "Мај клајаеру",
+ "mywatchlist": "Мај клајаере",
+ "watch": "клајаере",
+ "unwatch": "Деклајаера",
+ "watching": "О клајаере...",
+ "unwatching": "О деклајаере...",
+ "rollbacklink": "ревенире",
+ "namespace": "лСпаћи:",
+ "invert": "Ќсклуда спаћул",
+ "blanknamespace": "(Принципу)",
+ "contributions": "Контрибући дутилизатори",
+ "mycontris": "Мес контрибући",
+ "contribsub2": "пентру $1 ($2)",
+ "uctop": "(сусверф)",
+ "sp-contributions-talk": "дискућу",
+ "whatlinkshere": "Легајтул а це пажу",
+ "whatlinkshere-title": "Пажус легајтулент а $1",
+ "nolinkshere": "Пажи не легајтент а '''[[:$1]]'''.",
+ "istemplate": "викулабе",
+ "whatlinkshere-links": "← легајтулс",
+ "blocklink": "блокуапаје",
+ "contribslink": "контрибући",
+ "revertmove": "ревенире",
+ "export": "Ќспорта пажи",
+ "thumbnail-more": "ќсинде",
+ "thumbnail_error": "Еру вец лкреаре де тумбнел: $1",
+ "tooltip-pt-userpage": "Мој пажу дутилизатору",
+ "tooltip-pt-mytalk": "Мај пажу дискућус",
+ "tooltip-pt-preferences": "Мај префиренћу",
+ "tooltip-pt-watchlist": "Листа пажинилор пе царе ле мониторизез.",
+ "tooltip-pt-mycontris": "Листа де мес контрибуционс",
+ "tooltip-pt-login": "Путе приласнаере, не лест доист.",
+ "tooltip-pt-logout": "отластаере",
+ "tooltip-ca-talk": "Дискућие деспре артикол",
+ "tooltip-ca-edit": "Поћи едита ацеатај пажинај. Те ругајм се превизуализези конћинутул енаинте де салваре.",
+ "tooltip-ca-protect": "Ажатме це пажу",
+ "tooltip-ca-delete": "Делајре це пажу",
+ "tooltip-search": "Каутај ен {{SITENAME}}",
+ "tooltip-n-mainpage": "Вижита лпажу принципу",
+ "tooltip-n-portal": "Дајпул лпројецту, љуелљуес путе фараере, о трувес саби.",
+ "tooltip-n-currentevents": "Гајсеште информаћии деспре евениментиќ куренте",
+ "tooltip-n-recentchanges": "Листа дес шумбајрае рецентае ен лБики.",
+ "tooltip-n-randompage": "Донаре нпажу алаетоаре",
+ "tooltip-n-help": "Ајутор трувес иси.",
+ "tooltip-t-whatlinkshere": "Листа тутурор пажинилор вики царе кондуц спре ацестај пажинај",
+ "tooltip-t-contributions": "Ву листа де контрибући де цутилизатору",
+ "tooltip-t-upload": "Тремер фиширул",
+ "tooltip-t-specialpages": "Листа де тоат пажи специалус",
+ "tooltip-ca-nstab-user": "Ву лпажу дутилизатору",
+ "tooltip-ca-nstab-project": "Ву лпажу де пројекту",
+ "tooltip-ca-nstab-category": "Ву лпажу де категориа",
+ "tooltip-minoredit": "Це-ест нмодификацион минару",
+ "tooltip-save": "Салваере тес модификационс",
+ "tooltip-diff": "Ратај це модификајри аи фајцут текстулуи.",
+ "file-nohires": "Це-н-ест нресолуцион маи мари.",
+ "show-big-image": "Мареште ресолуцион",
+ "bad_image_list": "Форматул есте урмајторул:\n\nНумај елементијле унеи листе сунт луате ен цонсидераере. (Аџестеа сунт линии це енцеп цу *)\n\nПрима легајтурај де пе линие требуие се фие спре ун фишиер дефецтуос.\n\nОрице легајтури це урмеазај пе аценаши линие сунт цонсидераете еџцепћии, дицај пажи унде фишиерул поате пајреа инцлус дирецт.",
+ "metadata": "Метадата",
+ "namespacesall": "тоат",
+ "monthsall": "тоат",
+ "specialpages": "Пажи спецалус"
}
diff --git a/languages/i18n/ruq-latn.json b/languages/i18n/ruq-latn.json
index d3275f38..722e587c 100644
--- a/languages/i18n/ruq-latn.json
+++ b/languages/i18n/ruq-latn.json
@@ -1,254 +1,252 @@
{
- "@metadata": {
- "authors": [
- "Andrijko Z.",
- "Кумулај Маркус",
- "Макѕе",
- "Приетен тев"
- ]
- },
- "tog-underline": "Subliniaere legătuls:",
- "sun": "Dum",
- "mon": "Lun",
- "tue": "Mar",
- "wed": "Mie",
- "thu": "Joi",
- "fri": "Vin",
- "sat": "Sam",
- "january": "januari",
- "february": "februari",
- "march": "marti",
- "april": "aprili",
- "may_long": "mă",
- "june": "juni",
- "july": "juli",
- "august": "august",
- "september": "septembri",
- "october": "oktombri",
- "november": "nojembri",
- "december": "decembri",
- "january-gen": "januari",
- "february-gen": "februari",
- "march-gen": "marti",
- "april-gen": "aprili",
- "may-gen": "mai",
- "june-gen": "juni",
- "july-gen": "juli",
- "august-gen": "august",
- "september-gen": "septembri",
- "october-gen": "oktombri",
- "november-gen": "nojembri",
- "december-gen": "decembri",
- "jan": "jan",
- "feb": "feb",
- "mar": "mar",
- "apr": "apr",
- "may": "mai",
- "jun": "jun",
- "jul": "jul",
- "aug": "aug",
- "sep": "sep",
- "oct": "okt",
- "nov": "nov",
- "dec": "dec",
- "category_header": "Pažus en kategoria \"$1\"",
- "subcategories": "Subkategorii",
- "listingcontinuesabbrev": "kontinu",
- "about": "Dajpul",
- "cancel": "renuntǎe",
- "mytalk": "Maj diskuţu",
- "errorpagetitle": "Eru",
- "tagline": "De {{SITENAME}}",
- "help": "ajutor",
- "search": "kaută",
- "searchbutton": "kaută",
- "searcharticle": "Lie",
- "history": "Historia pažus",
- "printableversion": "vercion printablu",
- "permalink": "Legătul permanentul",
- "edit": "Edita",
- "editthispage": "Edita ce pažu",
- "delete": "Delăre",
- "protect": "Ažatme",
- "newpage": "Paži novi",
- "talkpagelinktext": "Diskuţu",
- "personaltools": "Alatki personalu",
- "talk": "Diskuţu",
- "views": "Vi",
- "toolbox": "alatunikul",
- "redirectedfrom": "(Redirecţionat de la $1)",
- "jumpto": "Lia a:",
- "jumptonavigation": "navigacion",
- "jumptosearch": "kaută",
- "aboutsite": "Dajpul {{SITENAME}}",
- "aboutpage": "Project:Dajpul {{SITENAME}}",
- "copyrightpage": "{{ns:project}}:Prava d'autoru",
- "currentevents": "Tebikoru",
- "currentevents-url": "Project:Tebikoru",
- "disclaimers": "tǎmenuls",
- "disclaimerpage": "Project:tǎmenul",
- "edithelp": "Ajutor pentru editaere",
- "mainpage": "Pažu principu",
- "mainpage-description": "Pažu principu",
- "privacy": "Politikmus de ližitul",
- "privacypage": "Project:Politikmus de ližitul",
- "retrievedfrom": "Aduse de \"$1\"",
- "youhavenewmessages": "Veses $1 ($2).",
- "editsection": "Editaere",
- "editold": "edita",
- "editsectionhint": "Editaere ţisecion: $1",
- "toc": "Kuprins",
- "showtoc": "arată",
- "hidetoc": "askunde",
- "site-rss-feed": "$1 RSS fitul",
- "site-atom-feed": "$1 Atom fitul",
- "page-rss-feed": "\"$1\" RSS Fitul",
- "page-atom-feed": "\"$1\" Atom Fitul",
- "nstab-user": "Pažu d'utilizatoru",
- "nstab-project": "Projektu",
- "nstab-image": "fişirul",
- "nstab-category": "kategoria",
- "viewsource": "Baganaere",
- "yourname": "Nom d'utilizatoru:",
- "login": "Prilasnaere",
- "nav-login-createaccount": "Prilasnaere / Nažbe",
- "userlogin": "Prilasnaere / kreare nutilizatoru",
- "userlogout": "otlastaere",
- "bold_sample": "Eskrire aldin",
- "bold_tip": "Eskrire aldin",
- "italic_sample": "Eskrire kursive",
- "italic_tip": "Eskrire kursive",
- "link_sample": "Nom s'legătuls",
- "link_tip": "Legătul internul",
- "extlink_sample": "http://www.example.com nom s'legătuls",
- "extlink_tip": "Legătul ķsternul (vec prefiks http://)",
- "headline_sample": "Eskrire s'titlus",
- "headline_tip": "Titlu de nivel 2",
- "nowiki_sample": "Intorduca no-Wiki isi",
- "nowiki_tip": "No-Wiki klaşu",
- "image_tip": "Santigul inserat",
- "media_tip": "Legătul fişirul de media",
- "sig_tip": "Utilizatorunom et data et temp",
- "hr_tip": "Linia orizontala (esnidivale)",
- "summary": "Sumar:",
- "subject": "Subjekt / titlur:",
- "minoredit": "Aceasta este o editare minoră",
- "watchthis": "klăaere ce pažu",
- "showpreview": "Rată previzualizare",
- "showdiff": "Arată şumbărae",
- "newarticle": "(Nova)",
- "editing": "o $1 editaere",
- "editingsection": "Editaere $1 (sekcion)",
- "copyrightwarning": "<!-- Gol deocamdată. Vertismentul se flă en MediaWiki:Summary -->\nTe rog notari la din kontribuţi al {{SITENAME}} sunt konsideraere relesavat supra $2 (suah $1 din detăs). Açteu nesav te se teksti sunt editaere denomerci det redistributaere din vent, hatae ici.<br /> Tu este nostre promisaere bonti us tu skrirste ce se, nega kopiaere din publik domen nega similari resorsua. '''NE SUBMITE KOPILEGRU SKRIE SAS PERMIŢION!'''",
- "template-protected": "(ažatmat)",
- "template-semiprotected": "(semi-ažatmat)",
- "currentrev": "Vercion kurentu",
- "revisionasof": "Vercion de data $1",
- "previousrevision": "←Versiunea nterioară",
- "cur": "aktualu",
- "last": "precedente",
- "history-title": "Editaerehistoria pentru \"$1\"",
- "lineno": "Linia $1:",
- "compareselectedversions": "Kompara vercion selektus",
- "editundo": "anulizăe",
- "viewprevnext": "Vu ($1 {{int:pipe-separator}} $2) ($3)",
- "mypreferences": "Maj prefirenţu",
- "recentchanges": "şumbărae recentae",
- "rcshowhideminor": "$1 modifikările minore",
- "rcshowhidebots": "$1 roboti",
- "rcshowhideliu": "$1 utilizatori prilasnaeri",
- "rcshowhideanons": "$1 utilizatori anonimi",
- "rcshowhidemine": "$1 mes modifikacions",
- "rclinks": "Rată ultimele $1 modifikări din ultimele $2 zile.<br />\n$3",
- "diff": "diferenţu",
- "hist": "historia",
- "hide": "askunde",
- "show": "Arată",
- "minoreditletter": "m",
- "newpageletter": "N",
- "boteditletter": "b",
- "recentchangeslinked": "Modifikări korelate",
- "recentchangeslinked-feed": "Modifikări korelate",
- "recentchangeslinked-toolbox": "Modifikări korelate",
- "upload": "trimiţe fişirul",
- "file-anchor-link": "Fişirul",
- "filehist": "Historia fişirulu",
- "filehist-current": "kurentu",
- "filehist-datetime": "Data/Temp",
- "filehist-user": "Utilizatoru",
- "filehist-dimensions": "Dimencions",
- "filehist-comment": "komentarul",
- "imagelinks": "Legătul fişirul de media",
- "linkstoimage": "Ces {{PLURAL:$1|paži legǎt|paži legǎtent}} a ce fişirul:",
- "randompage": "alaeţu",
- "nbytes": "$1 {{PLURAL:$1|bătul|bătuls}}",
- "nmembers": "$1 {{PLURAL:$1|membru|membri}}",
- "newpages": "Paži novi",
- "booksources": "Surse de cărţi",
- "allpages": "Toats paži",
- "alphaindexline": "$1 vo $2",
- "allarticles": "Toats paži",
- "allpagessubmit": "Treme",
- "watchlist": "Maj klăaeru",
- "mywatchlist": "Maj klăaere",
- "watch": "klăaere",
- "unwatch": "Deklăaera",
- "watching": "O klăaere...",
- "unwatching": "O deklăaere...",
- "rollbacklink": "revenire",
- "namespace": "lSpaţi:",
- "invert": "Ķskluda spaţul",
- "blanknamespace": "(Principu)",
- "contributions": "Kontribuţi d'utilizatori",
- "mycontris": "Mes kontribuţi",
- "contribsub2": "Pentru $1 ($2)",
- "uctop": "(susverf)",
- "sp-contributions-talk": "Diskuţu",
- "whatlinkshere": "Legǎtul a ce pažu",
- "whatlinkshere-title": "Paži legǎtulent a $1",
- "nolinkshere": "Paži ne legǎtent a '''[[:$1]]'''.",
- "istemplate": "vikulabe",
- "whatlinkshere-links": "← legătuls",
- "blocklink": "blokuapǎe",
- "contribslink": "kontribuţi",
- "revertmove": "revenire",
- "export": "Ķsporta paži",
- "thumbnail-more": "ķsinde",
- "thumbnail_error": "Eru vec kreare de thumbnail: $1",
- "tooltip-pt-userpage": "Moj pažu d'utilizatoru",
- "tooltip-pt-mytalk": "Maj pažu diskuţus",
- "tooltip-pt-preferences": "Maj prefirenţu",
- "tooltip-pt-watchlist": "Lista pažinilor pe care le monitorizez.",
- "tooltip-pt-mycontris": "Lista de mes kontribucions",
- "tooltip-pt-login": "Pute prilasnaere, ne l'est doist.",
- "tooltip-pt-logout": "otlastaere",
- "tooltip-ca-talk": "Diskuţie despre artikol",
- "tooltip-ca-edit": "Poţi edita această pažină. Te rugăm se previzualizezi konţinutul enainte de salvare.",
- "tooltip-ca-protect": "Ažatme ce pažu",
- "tooltip-ca-delete": "Delăre ce pažu",
- "tooltip-search": "Kaută en {{SITENAME}}",
- "tooltip-n-mainpage": "Visita l'pažu principu",
- "tooltip-n-portal": "Dajpul l'projectu, quelques pote faraere, o truves sabi.",
- "tooltip-n-currentevents": "Găseşte informaţii despre evenimentiķ kurente",
- "tooltip-n-recentchanges": "Lista des şumbǎrae recentae en l'wiki.",
- "tooltip-n-randompage": "Donare npažu alaetoare",
- "tooltip-n-help": "Ajutor truves isi.",
- "tooltip-t-whatlinkshere": "Lista tuturor pažinilor wiki care konduc spre această pažină",
- "tooltip-t-contributions": "Vu lista de kontribuţi de c'utilizatoru",
- "tooltip-t-upload": "Tremer fişirul",
- "tooltip-t-specialpages": "Lista de toat paži specialus",
- "tooltip-ca-nstab-user": "Vu l'pažu d'utilizatoru",
- "tooltip-ca-nstab-project": "Vu l'pažu de projektu",
- "tooltip-ca-nstab-category": "Vu l'pažu de kategoria",
- "tooltip-minoredit": "ce-est n'modifikacion minoru",
- "tooltip-save": "Salvaere tes modifikacions",
- "tooltip-diff": "Rată ce modifikări ai făcut tekstului.",
- "file-nohires": "Ce-n-est n'resolucion mai mari.",
- "show-big-image": "Mareşte resolucion",
- "bad_image_list": "Formatul este următorul:\n\nNumai elementîle unei liste sunt luate en consideraere. (Açestea sunt linii ce encep cu *)\n\nPrima legătură de pe linie trebuie se fie spre un fişier defectuos.\n\nOrice legături ce urmează pe acenaşi linie sunt consideraete excepţii, dică paži unde fişierul poate părea inclus direct.",
- "metadata": "Metadata",
- "watchlistall2": "toat",
- "namespacesall": "toat",
- "monthsall": "toat",
- "specialpages": "Paži specalus"
+ "@metadata": {
+ "authors": [
+ "Andrijko Z.",
+ "Кумулај Маркус",
+ "Макѕе",
+ "Приетен тев"
+ ]
+ },
+ "tog-underline": "Subliniaere legătuls:",
+ "sun": "Dum",
+ "mon": "Lun",
+ "tue": "Mar",
+ "wed": "Mie",
+ "thu": "Joi",
+ "fri": "Vin",
+ "sat": "Sam",
+ "january": "januari",
+ "february": "februari",
+ "march": "marti",
+ "april": "aprili",
+ "may_long": "mă",
+ "june": "juni",
+ "july": "juli",
+ "august": "august",
+ "september": "septembri",
+ "october": "oktombri",
+ "november": "nojembri",
+ "december": "decembri",
+ "january-gen": "januari",
+ "february-gen": "februari",
+ "march-gen": "marti",
+ "april-gen": "aprili",
+ "may-gen": "mai",
+ "june-gen": "juni",
+ "july-gen": "juli",
+ "august-gen": "august",
+ "september-gen": "septembri",
+ "october-gen": "oktombri",
+ "november-gen": "nojembri",
+ "december-gen": "decembri",
+ "jan": "jan",
+ "feb": "feb",
+ "mar": "mar",
+ "apr": "apr",
+ "may": "mai",
+ "jun": "jun",
+ "jul": "jul",
+ "aug": "aug",
+ "sep": "sep",
+ "oct": "okt",
+ "nov": "nov",
+ "dec": "dec",
+ "category_header": "Pažus en kategoria \"$1\"",
+ "subcategories": "Subkategorii",
+ "listingcontinuesabbrev": "kontinu",
+ "about": "Dajpul",
+ "cancel": "renuntǎe",
+ "mytalk": "Maj diskuţu",
+ "errorpagetitle": "Eru",
+ "tagline": "De {{SITENAME}}",
+ "help": "ajutor",
+ "search": "kaută",
+ "searchbutton": "kaută",
+ "searcharticle": "Lie",
+ "history": "Historia pažus",
+ "printableversion": "vercion printablu",
+ "permalink": "Legătul permanentul",
+ "edit": "Edita",
+ "editthispage": "Edita ce pažu",
+ "delete": "Delăre",
+ "protect": "Ažatme",
+ "newpage": "Paži novi",
+ "talkpagelinktext": "Diskuţu",
+ "personaltools": "Alatki personalu",
+ "talk": "Diskuţu",
+ "views": "Vi",
+ "toolbox": "alatunikul",
+ "redirectedfrom": "(Redirecţionat de la $1)",
+ "jumpto": "Lia a:",
+ "jumptonavigation": "navigacion",
+ "jumptosearch": "kaută",
+ "aboutsite": "Dajpul {{SITENAME}}",
+ "aboutpage": "Project:Dajpul {{SITENAME}}",
+ "copyrightpage": "{{ns:project}}:Prava d'autoru",
+ "currentevents": "Tebikoru",
+ "currentevents-url": "Project:Tebikoru",
+ "disclaimers": "tǎmenuls",
+ "disclaimerpage": "Project:tǎmenul",
+ "edithelp": "Ajutor pentru editaere",
+ "mainpage": "Pažu principu",
+ "mainpage-description": "Pažu principu",
+ "privacy": "Politikmus de ližitul",
+ "privacypage": "Project:Politikmus de ližitul",
+ "retrievedfrom": "Aduse de \"$1\"",
+ "youhavenewmessages": "Veses $1 ($2).",
+ "editsection": "Editaere",
+ "editold": "edita",
+ "editsectionhint": "Editaere ţisecion: $1",
+ "toc": "Kuprins",
+ "showtoc": "arată",
+ "hidetoc": "askunde",
+ "site-rss-feed": "$1 RSS fitul",
+ "site-atom-feed": "$1 Atom fitul",
+ "page-rss-feed": "\"$1\" RSS Fitul",
+ "page-atom-feed": "\"$1\" Atom Fitul",
+ "nstab-user": "Pažu d'utilizatoru",
+ "nstab-project": "Projektu",
+ "nstab-image": "fişirul",
+ "nstab-category": "kategoria",
+ "viewsource": "Baganaere",
+ "yourname": "Nom d'utilizatoru:",
+ "login": "Prilasnaere",
+ "nav-login-createaccount": "Prilasnaere / Nažbe",
+ "userlogin": "Prilasnaere / kreare nutilizatoru",
+ "userlogout": "otlastaere",
+ "bold_sample": "Eskrire aldin",
+ "bold_tip": "Eskrire aldin",
+ "italic_sample": "Eskrire kursive",
+ "italic_tip": "Eskrire kursive",
+ "link_sample": "Nom s'legătuls",
+ "link_tip": "Legătul internul",
+ "extlink_sample": "http://www.example.com nom s'legătuls",
+ "extlink_tip": "Legătul ķsternul (vec prefiks http://)",
+ "headline_sample": "Eskrire s'titlus",
+ "headline_tip": "Titlu de nivel 2",
+ "nowiki_sample": "Intorduca no-Wiki isi",
+ "nowiki_tip": "No-Wiki klaşu",
+ "image_tip": "Santigul inserat",
+ "media_tip": "Legătul fişirul de media",
+ "sig_tip": "Utilizatorunom et data et temp",
+ "hr_tip": "Linia orizontala (esnidivale)",
+ "summary": "Sumar:",
+ "subject": "Subjekt / titlur:",
+ "minoredit": "Aceasta este o editare minoră",
+ "watchthis": "klăaere ce pažu",
+ "showpreview": "Rată previzualizare",
+ "showdiff": "Arată şumbărae",
+ "newarticle": "(Nova)",
+ "editing": "o $1 editaere",
+ "editingsection": "Editaere $1 (sekcion)",
+ "copyrightwarning": "<!-- Gol deocamdată. Vertismentul se flă en MediaWiki:Summary -->\nTe rog notari la din kontribuţi al {{SITENAME}} sunt konsideraere relesavat supra $2 (suah $1 din detăs). Açteu nesav te se teksti sunt editaere denomerci det redistributaere din vent, hatae ici.<br /> Tu este nostre promisaere bonti us tu skrirste ce se, nega kopiaere din publik domen nega similari resorsua. '''NE SUBMITE KOPILEGRU SKRIE SAS PERMIŢION!'''",
+ "template-protected": "(ažatmat)",
+ "template-semiprotected": "(semi-ažatmat)",
+ "currentrev": "Vercion kurentu",
+ "revisionasof": "Vercion de data $1",
+ "previousrevision": "←Versiunea nterioară",
+ "cur": "aktualu",
+ "last": "precedente",
+ "history-title": "Editaerehistoria pentru \"$1\"",
+ "lineno": "Linia $1:",
+ "compareselectedversions": "Kompara vercion selektus",
+ "editundo": "anulizăe",
+ "viewprevnext": "Vu ($1 {{int:pipe-separator}} $2) ($3)",
+ "mypreferences": "Maj prefirenţu",
+ "recentchanges": "şumbărae recentae",
+ "rcshowhideminor": "$1 modifikările minore",
+ "rcshowhidebots": "$1 roboti",
+ "rcshowhideliu": "$1 utilizatori prilasnaeri",
+ "rcshowhideanons": "$1 utilizatori anonimi",
+ "rcshowhidemine": "$1 mes modifikacions",
+ "rclinks": "Rată ultimele $1 modifikări din ultimele $2 zile.<br />\n$3",
+ "diff": "diferenţu",
+ "hist": "historia",
+ "hide": "askunde",
+ "show": "Arată",
+ "minoreditletter": "m",
+ "newpageletter": "N",
+ "boteditletter": "b",
+ "recentchangeslinked": "Modifikări korelate",
+ "recentchangeslinked-feed": "Modifikări korelate",
+ "recentchangeslinked-toolbox": "Modifikări korelate",
+ "upload": "trimiţe fişirul",
+ "file-anchor-link": "Fişirul",
+ "filehist": "Historia fişirulu",
+ "filehist-current": "kurentu",
+ "filehist-datetime": "Data/Temp",
+ "filehist-user": "Utilizatoru",
+ "filehist-dimensions": "Dimencions",
+ "filehist-comment": "komentarul",
+ "imagelinks": "Legătul fişirul de media",
+ "linkstoimage": "Ces {{PLURAL:$1|paži legǎt|paži legǎtent}} a ce fişirul:",
+ "randompage": "alaeţu",
+ "nbytes": "$1 {{PLURAL:$1|bătul|bătuls}}",
+ "nmembers": "$1 {{PLURAL:$1|membru|membri}}",
+ "newpages": "Paži novi",
+ "booksources": "Surse de cărţi",
+ "allpages": "Toats paži",
+ "allarticles": "Toats paži",
+ "allpagessubmit": "Treme",
+ "watchlist": "Maj klăaeru",
+ "mywatchlist": "Maj klăaere",
+ "watch": "klăaere",
+ "unwatch": "Deklăaera",
+ "watching": "O klăaere...",
+ "unwatching": "O deklăaere...",
+ "rollbacklink": "revenire",
+ "namespace": "lSpaţi:",
+ "invert": "Ķskluda spaţul",
+ "blanknamespace": "(Principu)",
+ "contributions": "Kontribuţi d'utilizatori",
+ "mycontris": "Mes kontribuţi",
+ "contribsub2": "Pentru $1 ($2)",
+ "uctop": "(susverf)",
+ "sp-contributions-talk": "Diskuţu",
+ "whatlinkshere": "Legǎtul a ce pažu",
+ "whatlinkshere-title": "Paži legǎtulent a $1",
+ "nolinkshere": "Paži ne legǎtent a '''[[:$1]]'''.",
+ "istemplate": "vikulabe",
+ "whatlinkshere-links": "← legătuls",
+ "blocklink": "blokuapǎe",
+ "contribslink": "kontribuţi",
+ "revertmove": "revenire",
+ "export": "Ķsporta paži",
+ "thumbnail-more": "ķsinde",
+ "thumbnail_error": "Eru vec kreare de thumbnail: $1",
+ "tooltip-pt-userpage": "Moj pažu d'utilizatoru",
+ "tooltip-pt-mytalk": "Maj pažu diskuţus",
+ "tooltip-pt-preferences": "Maj prefirenţu",
+ "tooltip-pt-watchlist": "Lista pažinilor pe care le monitorizez.",
+ "tooltip-pt-mycontris": "Lista de mes kontribucions",
+ "tooltip-pt-login": "Pute prilasnaere, ne l'est doist.",
+ "tooltip-pt-logout": "otlastaere",
+ "tooltip-ca-talk": "Diskuţie despre artikol",
+ "tooltip-ca-edit": "Poţi edita această pažină. Te rugăm se previzualizezi konţinutul enainte de salvare.",
+ "tooltip-ca-protect": "Ažatme ce pažu",
+ "tooltip-ca-delete": "Delăre ce pažu",
+ "tooltip-search": "Kaută en {{SITENAME}}",
+ "tooltip-n-mainpage": "Visita l'pažu principu",
+ "tooltip-n-portal": "Dajpul l'projectu, quelques pote faraere, o truves sabi.",
+ "tooltip-n-currentevents": "Găseşte informaţii despre evenimentiķ kurente",
+ "tooltip-n-recentchanges": "Lista des şumbǎrae recentae en l'wiki.",
+ "tooltip-n-randompage": "Donare npažu alaetoare",
+ "tooltip-n-help": "Ajutor truves isi.",
+ "tooltip-t-whatlinkshere": "Lista tuturor pažinilor wiki care konduc spre această pažină",
+ "tooltip-t-contributions": "Vu lista de kontribuţi de c'utilizatoru",
+ "tooltip-t-upload": "Tremer fişirul",
+ "tooltip-t-specialpages": "Lista de toat paži specialus",
+ "tooltip-ca-nstab-user": "Vu l'pažu d'utilizatoru",
+ "tooltip-ca-nstab-project": "Vu l'pažu de projektu",
+ "tooltip-ca-nstab-category": "Vu l'pažu de kategoria",
+ "tooltip-minoredit": "ce-est n'modifikacion minoru",
+ "tooltip-save": "Salvaere tes modifikacions",
+ "tooltip-diff": "Rată ce modifikări ai făcut tekstului.",
+ "file-nohires": "Ce-n-est n'resolucion mai mari.",
+ "show-big-image": "Mareşte resolucion",
+ "bad_image_list": "Formatul este următorul:\n\nNumai elementîle unei liste sunt luate en consideraere. (Açestea sunt linii ce encep cu *)\n\nPrima legătură de pe linie trebuie se fie spre un fişier defectuos.\n\nOrice legături ce urmează pe acenaşi linie sunt consideraete excepţii, dică paži unde fişierul poate părea inclus direct.",
+ "metadata": "Metadata",
+ "namespacesall": "toat",
+ "monthsall": "toat",
+ "specialpages": "Paži specalus"
}
diff --git a/languages/i18n/sa.json b/languages/i18n/sa.json
index 3fb3add4..c3df68df 100644
--- a/languages/i18n/sa.json
+++ b/languages/i18n/sa.json
@@ -20,7 +20,8 @@
"Shubha",
"Vibhijain",
"రాకేశ్వర",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "परिसन्धेः अधो रेखाङ्कनम्:",
@@ -28,15 +29,16 @@
"tog-hidepatrolled": "सद्योजातानां परिवर्तनानां परिशीलितानि सम्पादनानि गोप्यन्ताम्",
"tog-newpageshidepatrolled": "नूतनपृष्ठानाम् आवलेः परिशीलितानि पृष्ठानि गोप्यन्त्ताम्",
"tog-extendwatchlist": "न केवलं सद्योजातानि अपि तु अवेक्षणाऽऽवलेः सर्वाणि परिवर्तनानि दृश्यन्ताम्",
- "tog-usenewrc": "सद्यपरिवर्तनावल्यां, अवेक्षणाऽऽवल्यां च पृष्ठानि विभागानुसारं प्रदर्श्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
- "tog-numberheadings": "शीर्षकान् स्वयमेव सक्रमाङ्कीकरोतु।",
+ "tog-usenewrc": "सद्यः परिवर्तनावल्यां, अवेक्षणाऽऽवल्यां च पृष्ठानि विभागानुसारं प्रदर्श्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
+ "tog-numberheadings": "शीर्षकाणि स्वयमेव यथाक्रमं करोतु",
"tog-showtoolbar": "उपकरण-पट्टिका दर्श्यताम्",
- "tog-editondblclick": "वारद्वयं क्लिक-करणेन पृष्ठानि सम्पाद्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
+ "tog-editondblclick": "वारद्वयं टक्टकायनेन (Click) पृष्ठानि सम्पाद्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
"tog-editsectiononrightclick": "विभागशीर्षकाणामुपरि दक्षिणक्लिक्-करणेन विभागः सम्पाद्यताम् ।",
"tog-watchcreations": "मया रचितानि पृष्ठानि मम अवेक्षणाऽऽवल्यां योज्यन्ताम् ।",
"tog-watchdefault": "मया सम्पादितानि पृष्ठानि मम अवेक्षणाऽऽवल्यां योज्यन्ताम्।",
"tog-watchmoves": "मया चालितानि पृष्ठानि मम अवेक्षणाऽऽवल्यां योज्यन्ताम्।",
"tog-watchdeletion": "मया अपाकृतानि पृष्ठानि मम अवेक्षणाऽऽवल्यां योज्यन्ताम्।",
+ "tog-watchrollback": "मया प्रत्यापन्नानि (rollback) पृष्ठानि मम अवेक्षणाऽऽवल्यां योज्यताम् ।",
"tog-minordefault": "मम सर्वाणि सम्पादनानि लघुत्वेन प्रदर्श्यन्ताम् ।",
"tog-previewontop": "सम्पादनात् पूर्वं प्राग्दृश्यं दर्श्यताम् ।",
"tog-previewonfirst": "प्रथमसम्पादनस्य प्राग्दृश्यं दर्श्यताम् ।",
@@ -44,11 +46,11 @@
"tog-enotifusertalkpages": "मम योजकसम्भाषणपृष्ठस्य परिवर्तने सति ई-पत्रद्वारा सूचयताम्",
"tog-enotifminoredits": "पृष्ठस्य सञ्चिकायाः वा लघुपरिवर्तनेषु सत्सु अपि ई-पत्रद्वारा सूच्यताम्",
"tog-enotifrevealaddr": "सूचना-ईपत्रेषु मम ई-पत्रसङ्केतः प्रदर्श्यताम्",
- "tog-shownumberswatching": "निरीक्षमाणानां योजकानां सङ्ख्या दर्श्यताम्",
+ "tog-shownumberswatching": "निरीक्ष्यमाणानां योजकानां सङ्ख्या दर्श्यताम्",
"tog-oldsig": "वर्तमानहस्ताक्षरम्:",
"tog-fancysig": "हस्ताक्षरं विकि-पाठवत् परिगण्यताम् (स्वचालित-परिसन्धिं विहाय)",
- "tog-uselivepreview": "सम्पादनेन सहैव प्राग्दृश्यं दर्शयतु (प्रयोगात्मकम्)।",
- "tog-forceeditsummary": "सम्पादनसारांशः न ददामि चेत् सूच्यताम्",
+ "tog-uselivepreview": "सम्पादनेन सहैव प्राग्दृश्यं दर्शयतु",
+ "tog-forceeditsummary": "सम्पादनसारांशं न ददामि चेत्, सूच्यताम्",
"tog-watchlisthideown": "अवेक्षणाऽऽवल्याः मम सम्पादनानि गोप्यन्ताम ।",
"tog-watchlisthidebots": "अवेक्षणाऽऽवल्याः बोट-द्वारा कृतानि सम्पादनानि गोप्यन्ताम्",
"tog-watchlisthideminor": "मम अवेक्षणाऽऽवल्याः लघुसम्पादनानि गोप्यन्ताम्",
@@ -57,9 +59,9 @@
"tog-watchlisthidepatrolled": "मम अवेक्षणाऽऽवल्याः पूर्वदृष्टानि सम्पादनानि गोप्यन्ताम्",
"tog-ccmeonemails": "अन्येभ्यः प्रेषितानाम् ई-पत्राणां प्रतिकृतिः मत्कृते प्रेष्यताम्",
"tog-diffonly": "संस्करणेषु भेदं दर्शयितुं लेखः गोप्यताम्",
- "tog-showhiddencats": "निगूढाः वर्गाः दर्श्यन्ताम्",
+ "tog-showhiddencats": "निगूहिताः वर्गाः दर्श्यन्ताम्",
"tog-norollbackdiff": "\"प्रमुञ्चतु\" इत्यस्य उपयोगानन्तरस्य भेदः गोप्यताम्",
- "tog-useeditwarning": "सम्पादनम् अरक्ष्य पृष्ठं त्यजामि चेत् सूच्यताम्",
+ "tog-useeditwarning": "सम्पादनम् अरक्षित्वा पृष्ठं त्यजामि चेत् सूच्यताम्",
"tog-prefershttps": "प्रेवेशानन्तरं सर्वदा संरक्षितसम्पर्कः एव उपयुज्याम्",
"underline-always": "सर्वदा",
"underline-never": "कदापि न",
@@ -136,7 +138,7 @@
"subcategories": "उपवर्गाः",
"category-media-header": "\"$1\" वर्गेऽस्मिन् विद्यमानं माध्यमम्",
"category-empty": "<em>वर्गेऽस्मिन् न किमपि पृष्ठं माध्यमं वा विद्यते ।</em>",
- "hidden-categories": "{{PLURAL:$1|निगूढः वर्गः|निगूढाः वर्गाः}}",
+ "hidden-categories": "{{PLURAL:$1|निहितः वर्गः|निहिताः वर्गाः}}",
"hidden-category-category": "निगूढाः वर्गाः",
"category-subcat-count": "$2 इत्येषु {{PLURAL:$2|वर्गेऽस्मिन् अधो लिखिताः उपवर्गाः विद्यन्ते |वर्गेऽस्मिन् {{PLURAL:$1|अधो लिखितः उपवर्गः अस्ति|अधो लिखिताः $1 उपवर्गाः सन्ति}}}}",
"category-subcat-count-limited": "अस्मिन् वर्गे {{PLURAL:$1|अधो लिखितः $1 वर्गः अस्ति|अधो लिखिताः $1 वर्गाः सन्ति}}",
@@ -222,18 +224,20 @@
"otherlanguages": "अन्यासु भाषासु",
"redirectedfrom": "($1 इत्यस्मात् पुनर्निर्दिष्टम्)",
"redirectpagesub": "पृष्ठम् अनुप्रेष्यताम्",
+ "redirectto": "इत्यत्र पुनर्निदिष्यताम्",
"lastmodifiedat": "$1 (तमे) दिनाङ्के अन्तिमसम्पादनं $2 समये अभवत्",
"viewcount": "एतत्पृष्ठं {{PLURAL:$1|एक वारं|$1 वारं}} दृष्टम् अस्ति",
"protectedpage": "संरक्षितपृष्ठम्",
"jumpto": "अत्र गम्यताम् :",
"jumptonavigation": "सञ्चरणं",
"jumptosearch": "अन्वेषणम्",
- "view-pool-error": "क्षम्यताम् ! सद्यः वितरकस्य (server) उपरि बहु कार्यभारः अस्ति । \nबहवः जनाः एतत् पृष्ठं पश्यन्तः सन्ति । \nएतत् पृष्ठं पुनर्द्रष्टुं पतिक्षा क्रियताम् । $1",
- "generic-pool-error": "क्षम्यताम् ! सद्यः वितरकस्य (server) उपरि बहु कार्यभारः अस्ति । \nबहवः जनाः एतत् पृष्ठं पश्यन्तः सन्ति । \nएतत् पृष्ठं पुनर्द्रष्टुं पतिक्षा क्रियताम् ।",
- "pool-timeout": "संरक्षणार्थं कालावधिः समाप्ता",
- "pool-queuefull": "Pool इति पङ्कतिः पूर्णा अस्ति ।",
+ "view-pool-error": "क्षम्यताम् ! सद्यः वितरकस्य (server) उपरि बहु कार्यभारः अस्ति । \nबहवः जनाः एतत् पृष्ठं पश्यन्तः सन्ति । \nएतत् पृष्ठं पुनर्द्रष्टुं प्रतीक्ष्यताम् । $1",
+ "generic-pool-error": "क्षम्यताम् ! सद्यः वितरकस्य (server) उपरि बहु कार्यभारः अस्ति । \nबहवः जनाः एतत् पृष्ठं पश्यन्तः सन्ति । \nएतत् पृष्ठं पुनर्द्रष्टुं प्रतीक्ष्यताम् ।",
+ "pool-timeout": "संरक्षणार्थं कालावधिः समाप्तः",
+ "pool-queuefull": "Pool इति पङ्क्तिः पूर्णा अस्ति ।",
"pool-errorunknown": "अज्ञातदोषः",
"pool-servererror": "Pool counter सेवा नोपलभ्यते ।",
+ "poolcounter-usage-error": "उपयोगत्रुटिः : $1",
"aboutsite": "{{SITENAME}} विषयकं",
"aboutpage": "Project:विषयकम्",
"copyright": "भिन्नोल्लखः न भवति तावत् $1 अत्र उल्लेखो भवति ।",
@@ -243,6 +247,7 @@
"disclaimers": "अस्वीकारः",
"disclaimerpage": "Project:सामान्याऽस्वीकरणम्",
"edithelp": "सम्पादनार्थं साहाय्यम्",
+ "helppage-top-gethelp": "साहाय्यम्",
"mainpage": "मुख्यपृष्ठम्",
"mainpage-description": "मुख्यपृष्ठम्",
"policy-url": "Project:नीतिः",
@@ -251,7 +256,7 @@
"privacy": "गोपनीयतानीतिः",
"privacypage": "Project:गोपनीयतानीतिः",
"badaccess": "अनुमतिदोषः",
- "badaccess-group0": "यस्याः क्रियायाः कृते भवान्/भवती उद्युक्ता, तस्यै क्रियायै अनुमति नास्ति ।",
+ "badaccess-group0": "यस्याः क्रियायाः कृते भवान्/भवती उद्युक्ता, तस्यै क्रियायै अनुमतिः नास्ति ।",
"badaccess-groups": "यस्याः क्रियायाः कृते भवान्/भवती उद्युक्ता, तस्यै क्रियायै $1 {{PLURAL:$2|अस्मिन् समूहे|एतेषु समूहेषु}} अनुमतिः नास्ति ।",
"versionrequired": "मीडीयाविक इत्यस्य $1 संस्करणम् आवश्यकम् ।",
"versionrequiredtext": "अस्य पृष्ठस्य उपयोगार्थं मीडीयाविकि इत्यस्य $1 संस्करणम् आवश्यकम् । पश्यतु [[Special:Version|version page]] ।",
@@ -275,6 +280,9 @@
"hidetoc": "गोप्यताम्",
"collapsible-collapse": "सङ्कुच्यताम्",
"collapsible-expand": "विस्तीर्यताम्",
+ "confirmable-confirm": "{{GENDER:$1|भवान्/भवती}} निःसंशयम् अस्ति खलु ?",
+ "confirmable-yes": "आम्",
+ "confirmable-no": "न",
"thisisdeleted": "$1 दृश्यतां पूर्वतनं क्रियतां वा ?",
"viewdeleted": "$1 दृश्यताम् ?",
"restorelink": "{{PLURAL:$1|एकम् अपाकृतं सम्पादनम्|$1 अपाकृतानि सम्पादनानि}}",
@@ -312,17 +320,20 @@
"laggedslavemode": "<strong>पूर्वसूचना :</strong>\nसद्यः परिवर्तनानि अत्र न स्युः ।",
"readonly": "दत्तांशनिधिः (database) कीलितः",
"enterlockreason": "कीलनस्य कारणं ददातु, कीलनं कियान् कालः भविष्यति इति च लिखतु ।",
- "readonlytext": "नवीनदत्तांशनिवेशार्थं (database entry) सद्यः दत्तांशः स्थिगितः । नियमितव्यवस्थिकरणानन्तरं पुनः निवेशाय अवकाशः भवति । $1",
+ "readonlytext": "नवीनदत्तांशप्रविष्ट्यै (database entry) सद्यः दत्तांशः स्थगितः । नियमितव्यवस्थिकरणानन्तरं पुनः निवेशाय अवकाशः भवति । $1",
"missing-article": "दत्तनिधौ (in database) $2 अन्तः कुत्रापि \"$1\" न प्राप्तम् ।\n\nप्रायः अपाकृतस्य पृष्ठस्य इतिहासदर्शनस्य चेष्टाकाले एवं भवति ।\n\nतादृशी स्थितिः यदि नास्ति, तर्हि तन्त्रांशे विद्यमाना त्रुटिः भवेत् । कृपया कमपि [[Special:ListUsers/sysop|प्रबन्धकम्]] अस्य पृष्ठस्य सार्वसङ्केतं (U.R.L.) सूच्यताम् ।",
"missingarticle-rev": "(संस्करणं# :$1)",
"missingarticle-diff": "(भेदः: $1, $2)",
"readonly_lag": "सहायकतन्त्रांशः (slave database) यावत् मुख्यतन्त्रांशात् किमपि स्वीकुर्यात्, तावत् मुख्यतन्त्रांशः तन्त्रांशमाध्यमेन स्वयमेव कीलितः अभवत्",
"internalerror": "आन्तरिकः दोषः",
"internalerror_info": "आन्तरिकः दोषः: $1",
+ "internalerror-fatal-exception": "\"$1\" प्रकारस्य घातकदोषः",
"filecopyerror": "Could not copy file \"$1\" to \"$2\".",
"filerenameerror": "$1 सञ्चिकायाः $2 इति पुनर्नामकरणं निष्फलम् ।",
"filedeleteerror": "$1 इति सञ्चिका अपाकर्तुं न शक्यते ।",
"directorycreateerror": "'''$1''' इति विभागः रचितुं न शक्यते ।",
+ "directoryreadonlyerror": "\"$1\" एषः विभागः पठ्यमात्रः अस्ति ।",
+ "directorynotreadableerror": "\"$1\" एषः विभागः अपठ्यः अस्ति ।",
"filenotfound": "'\"$1\"' सञ्चिका न लब्धा ।",
"unexpected": "अनपेक्षितं मूल्यम् : \"$1\"=\"$2\"",
"formerror": "दोषः : प्रपत्रं (form) न प्रेषितम्",
@@ -333,33 +344,34 @@
"no-null-revision": "\"$1\" एतस्मै पृष्ठाय नवीनं रिक्तं संस्करणं रचितुं न शक्यते",
"badtitle": "अशुद्धं शिरोनाम",
"badtitletext": "ईप्सितं शीर्षकम् अमान्यं, रिक्तम्, अयोग्यम्, अन्यभाषीयं, भाषान्तरात् विकि-जालस्थलात् च अस्ति । पृष्ठशीर्षकाय अयोग्यानि अक्षराणि चिह्नानि वा तस्मिन् भवेयुः ।",
- "perfcached": "अधो उल्लिखिताः सूचनाः पुरातनायाः उपस्मृत्याः (cached) गृह्णिताः, अतः तत्र दोषाः भवेयुः । अधिकाधिक{{PLURAL:$1|परिणाम|$1परिणामाः}} अत्र सन्ति ।",
- "perfcachedts": "अधो उल्लिखिताः सूचनाः पुरातनायाः उपस्मृत्याः (cached) गृह्णिताः । तस्यां उपस्मृत्यां $1 समये परिर्वतनम् अभूत् ।\nअधिकाधिक{{PLURAL:$1|परिणाम|$1परिणामाः}} अत्र सन्ति ।",
- "querypage-no-updates": "अस्मिन् पृष्ठे परिवर्तनं अधुना प्रतिबन्धितमस्ति । अत्रस्थां पुरातनसूचनां नवीनसूचनया सह अधुना परिर्वतयितुं न शक्यते ।",
+ "perfcached": "अधो उल्लिखिताः सूचनाः पुरातनायाः उपस्मृत्याः (cached) गृहीताः, अतः तत्र दोषाः भवेयुः । अधिकाधिक{{PLURAL:$1|परिणाम|$1परिणामाः}} अत्र सन्ति ।",
+ "perfcachedts": "अधो उल्लिखिताः सूचनाः पुरातन्याः उपस्मृत्याः (cached) गृह्णिताः । तस्यां उपस्मृत्यां $1 समये परिर्वतनम् अभूत् ।\nअधिकाधिक{{PLURAL:$1|परिणाम|$1परिणामाः}} अत्र सन्ति ।",
+ "querypage-no-updates": "अस्मिन् पृष्ठे परिवर्तनं अधुना प्रतिबन्धितमस्ति । अत्रत्यां पुरातनसूचनां नवीनसूचनया सह अधुना परिर्वतयितुं न शक्यते ।",
"viewsource": "स्रोतः दृश्यताम्",
"viewsource-title": "$1 इत्येतस्य स्रोतः दृश्यताम्",
"actionthrottled": "अकाले कार्यमेतत् अवरुद्धम् अभवत्",
"actionthrottledtext": "फल्गु(spam)-नियन्त्रणार्थम् एषा क्रिया मर्यादितवारं कर्तुं शक्यते । भवतः/भवत्याः सा मर्यादा समाप्ता । कृपया किञ्चित् कालानन्तरं प्रयत्नं करोतु ।",
- "protectedpagetext": "सम्पादनं, अन्यक्रियां च अवरोधयितुम् इदं पृष्ठं संरक्षितमस्ति ।",
+ "protectedpagetext": "सम्पादनं, अन्यक्रियां च अवरोद्धुम् इदं पृष्ठं संरक्षितमस्ति ।",
"viewsourcetext": "भवान्/भवती एतस्य पृष्ठस्य स्रोतः द्रष्टुं, मुद्रणं (print) कर्तुं च अर्हति ।",
"viewyourtext": "भवान्/भवती एतस्मिन् पृष्ठे '''स्वस्य सम्पादनानि'' द्रष्टुं अर्हति, तेषां प्रतिलिपिम् (copy) अपि कर्तुं अर्हति ।",
"protectedinterface": "एतत् पृष्ठं तन्त्रांशाय मध्यस्थपाठं (interface text) प्रयच्छति । इदञ्च पृष्ठम् अयोग्यसम्पादनात् संरक्षितमस्ति । \nविकि इत्यस्य सर्वेषु बन्धुप्रकल्पेषु अनुवादमिदं योजयितुं कृपया [//translatewiki.net/ translatewiki.net] इत्यस्य मिडीयाविकि-स्थानीयकरणस्य उपयोगं करोतु ।",
- "editinginterface": "<strong>पूर्वसूचना :</strong> तन्त्रांशाय मध्यस्थपाठं (interface text) प्रयच्छति तादृशस्य पृष्ठस्य भवता/भवत्या सम्पादनं क्रियमाणमस्ति । अस्य विकि-प्रकल्पस्य अन्ययोजकेभ्यः अपि अत्र कृतानि परिवर्तनानि भविष्यन्ति । \n\nविकि इत्यस्य सर्वेषु बन्धुप्रकल्पेषु अनुवादमिदं योजयितुं कृपया [//translatewiki.net/ translatewiki.net] इत्यस्य मिडीयाविकि-स्थानीयकरणस्य उपयोगं करोतु ।",
+ "editinginterface": "<strong>पूर्वसूचना :</strong> तन्त्रांशाय मध्यस्थपाठं (interface text) प्रयच्छति तादृशस्य पृष्ठस्य भवता/भवत्या सम्पादनं क्रियमाणमस्ति । अस्य विकि-प्रकल्पस्य अन्ययोजकेभ्यः अपि अत्र कृतानि परिवर्तनानि भविष्यन्ति ।",
+ "translateinterface": "विकि इत्यस्य सर्वेषु बन्धुप्रकल्पेषु अनुवादमिदं योजयितुं कृपया [//translatewiki.net/ translatewiki.net] इत्यस्य मिडीयाविकि-स्थानीयकरणस्य उपयोगं करोतु ।",
"cascadeprotected": "इदं पृष्ठं सम्पादनात् संरक्षितमस्ति । कारणम् एतत् पृष्ठं {{PLURAL:$1|तादृशे पृष्ठे|तादृशेषु पृष्ठेषु}} अन्तर्भवति, यादृशेषु पृष्ठेषु सोपानवत् सुरक्षा अस्ति : $2",
"namespaceprotected": "भवान्/भवती '''$1''' नामाकाशे अन्तर्भूतेषु पृष्ठेषु परिवर्तनं कर्तुं न शक्नोति ।",
- "customcssprotected": "भवान्/भवती इदं CSS पृष्ठं सम्पादयितुं न शक्नोति । कारणं अन्यस्य योजकस्य वैयक्तिकव्यवस्थापनानि (settings) अत्र सन्ति ।",
- "customjsprotected": "भवान्/भवती इदं JavaScript पृष्ठं सम्पादयितुं न शक्नोति । कारणं अन्यस्य योजकस्य वैयक्तिकव्यवस्थापनानि (settings) अत्र सन्ति ।",
+ "customcssprotected": "भवान्/भवती इदं CSS पृष्ठं सम्पादयितुं न शक्नोति । यतः अन्यस्य योजकस्य वैयक्तिकव्यवस्थापनानि (settings) अत्र सन्ति ।",
+ "customjsprotected": "भवान्/भवती इदं JavaScript पृष्ठं सम्पादयितुं न शक्नोति । यतः अन्यस्य योजकस्य वैयक्तिकव्यवस्थापनानि (settings) अत्र सन्ति ।",
"mycustomcssprotected": "भवान्/भवती इदं CSS पृष्ठं सम्पादयितुं न शक्नोति ।",
"mycustomjsprotected": "भवान्/भवती इदं JavaScript पृष्ठं सम्पादयितुं न शक्नोति ।",
"myprivateinfoprotected": "भवान्/भवती अत्र वैयक्तिकसूचनाः सम्पादयितुं न शक्नोति ।",
"mypreferencesprotected": "भवान्/भवती स्वस्य इष्टतमानि सम्पादयितुं न शक्नोति ।",
"ns-specialprotected": "विशिष्टानि पृष्ठानि सम्पादयितुं न शक्यन्ते ।",
- "titleprotected": "\"''$2''\" इति कारणत्वात् एतत् शीर्षकं (विषयः) [[User:$1|$1]] इत्यस्मै संरक्षितमस्ति ।",
+ "titleprotected": "\"''$2''\" इति हेतोः एतत् शीर्षकं (विषयः) [[User:$1|$1]] इत्यस्मात् संरक्षितमस्ति ।",
"filereadonlyerror": "\"$1\" सञ्चिकापरिवर्तितुं न शक्यते । \"$2\" कोषः अधुना केवलं पठनयोग्यः (read only) अस्ति । येन प्रबन्धकेन एवं कृतं, तेन निम्नकारणं प्रदत्तम् \"$3\"",
"invalidtitle-knownnamespace": "\"$2\" नमावकाशेन \"$3\" पाठेन च युक्तम् अयोग्यं शीर्षकम्",
"invalidtitle-unknownnamespace": "अयोग्येन नामवाकाशयुतेन, $1 सङ्ख्यया, \"$2\" पाठेन युक्तम् अयोग्यं शीर्षकम्",
"exception-nologin": "प्रवेशः न कृतः",
- "exception-nologin-text": "एतत् पृष्ठं सम्पादयितुं क्रियां कर्तुं वा [[Special:Userlogin|प्रविश्यताम्]] ।",
+ "exception-nologin-text": "एतत् पृष्ठं सम्पादयितुं क्रियां कर्तुं वा प्रविश्यताम् ।",
"exception-nologin-text-manual": "एतत् पृष्ठं सम्पादयितुं क्रियां कर्तुं वा कृपया $1",
"virus-badscanner": "अयोग्यं व्यवस्थापनम् : अज्ञातं विषाणुं (VIRUS) निरीक्षकः: ''$1''",
"virus-scanfailed": "निरीक्षणं विफलितम् (विध्यादेशः (code) $1)",
@@ -369,17 +381,17 @@
"welcomecreation-msg": "भवता/भवत्या सदस्यता प्राप्ता ।\nस्वस्य [[Special:Preferences|{{SITENAME}} इष्टतमानि]] परिवर्तयितुं मा विस्मरतु ।",
"yourname": "योजकनाम:",
"userlogin-yourname": "प्रयोक्तृनाम",
- "userlogin-yourname-ph": "स्वस्य प्रयोक्तृनाम दीयताम्",
- "createacct-another-username-ph": "प्रयोक्तृनाम दीयताम्",
+ "userlogin-yourname-ph": "स्वस्य प्रयोक्तृनाम लिख्यताम्",
+ "createacct-another-username-ph": "प्रयोक्तृनाम लिख्यताम्",
"yourpassword": "कूटशब्दः :",
"userlogin-yourpassword": "कूटशब्दः",
- "userlogin-yourpassword-ph": "स्वस्य कूटशब्दः दीयताम्",
- "createacct-yourpassword-ph": "कूटशब्दः दीयताम्",
+ "userlogin-yourpassword-ph": "स्वस्य कूटशब्दः लिख्यताम्",
+ "createacct-yourpassword-ph": "कूटशब्दः लिख्यताम्",
"yourpasswordagain": "कूटशब्दः पुनः लिख्यताम् :",
"createacct-yourpasswordagain": "कूटशब्दस्य पुष्टिं करोतु ।",
- "createacct-yourpasswordagain-ph": "कूटशब्दः पुनः दीयताम्",
+ "createacct-yourpasswordagain-ph": "कूटशब्दः पुनः लिख्यताम्",
"remembermypassword": "अस्मिन् सङ्गणके मम प्रवेशः स्मर्यताम् (अधिकतमम् $1 {{PLURAL:$1|दिनम्|दिनानि}})",
- "userlogin-remembermypassword": "अहं प्रविष्टमेव तिष्ठेयम्",
+ "userlogin-remembermypassword": "अहं प्रविष्ट एव स्याम्",
"userlogin-signwithsecure": "संरक्षितः सम्पर्कः (https) उपयुज्यताम्",
"yourdomainname": "भवतः प्रदेशः (domain) :",
"password-change-forbidden": "अस्मिन् विकि-जालस्थाने भवान्/भवती कूटशब्दान् परिर्वतयितुं न शक्नोति ।",
@@ -388,8 +400,8 @@
"nav-login-createaccount": "प्रविश्यताम् / सदस्यता प्राप्यताम्",
"userlogin": "प्रविश्यताम् / सदस्यता प्राप्यताम्",
"userloginnocreate": "प्रविश्यताम्",
- "logout": "निर्गमनम्",
- "userlogout": "निर्गमनम्",
+ "logout": "निर्गम्यताम्",
+ "userlogout": "निर्गम्यताम्",
"notloggedin": "नैव प्रविष्टः",
"userlogin-noaccount": "सदस्यता नास्ति किम् ?",
"userlogin-joinproject": "{{SITENAME}} सह योजनम्",
@@ -413,7 +425,7 @@
"createacct-reason": "कारणम्",
"createacct-reason-ph": "भवतः/भवत्याः अन्यसदस्यतां प्राप्तुं किं प्रयोजनमस्ति ?",
"createacct-captcha": "सुरक्षानिरीक्षणम्",
- "createacct-imgcaptcha-ph": "उपरि लिखिताः वर्णाः लिख्यताम्",
+ "createacct-imgcaptcha-ph": "उपरि लिखिताः वर्णाः लिख्यन्तादम्",
"createacct-submit": "स्वसदस्यता प्राप्यताम्",
"createacct-another-submit": "अन्यसदस्यता प्राप्यताम्",
"createacct-benefit-heading": "{{SITENAME}} इति भवत्सदृशैः जनैः रचितमस्ति ।",
@@ -427,14 +439,14 @@
"createaccounterror": "$1 सदस्यता न प्राप्ता :",
"nocookiesnew": "भवता/भवत्या सदस्यता प्राप्ता, परन्तु प्रवेशः न कृतः । {{SITENAME}} इत्यस्य कृते योजकज्ञापकम् (uses cookies) अनिवार्यम् अस्ति । \nभवता/भवत्या ज्ञापकव्यवस्था असमर्थिता अस्ति ।\nकृपया सा समर्थ्यताम्, ततश्च नवीनसदस्यतायाः प्रयोक्तृनाम्ना प्रविश्यताम् ।",
"nocookieslogin": "{{SITENAME}} इत्यत्र ज्ञापकेन (cookies) विना प्रवेशः न शक्यः । \nभवता/भवत्या ज्ञापकव्यवस्था असमर्थिता अस्ति ।\nकृपया सा समर्थ्यताम्, ततश्च पुनः प्रयासः क्रियताम् ।",
- "nocookiesfornew": "योजकसदस्यता न सिद्धा यतः स्रोतः प्रमाणीकृतं न जातम् । \nभवता कुक्कीस् इत्येतत् समर्थीकृतानि किम् इति परिशील्य इदं पृष्ठं पुनरारोप्य प्रयतताम् ।",
+ "nocookiesfornew": "योजकसदस्यता न सिद्धा यतः स्रोतः प्रमाणीकृतं न जातम् । \nभवता कुक्कीस् इत्येतत् समर्थितानि किम् इति परिशील्य इदं पृष्ठं पुनरारोप्य प्रयतताम् ।",
"noname": "भवता/भवत्या योग्यं प्रयोक्तृनाम न प्रदत्तम् ।",
"loginsuccesstitle": "स्वागतं ! प्रवेशः सिद्धः ।",
"loginsuccess": "भवता/भवत्या {{SITENAME}} इत्यत्र \"$1\"-योजकत्वेन प्रवेशः प्राप्तः ।",
"nosuchuser": "'''$1''' नाम्नः न कोऽपि योजकः विद्यते ।\n\nप्रयोक्तृनामानि पक्षानुगुणं (case sensitive) भवन्ति ।\n\nयत् टङ्कितं, तत् पश्यतु अथवा [[Special:UserLogin/signup|नूतनसदस्यता प्राप्यताम्]] ।",
"nosuchusershort": "'''$1''' नाम्नः न कोऽपि योजकः विद्यते ।\n\nयत् टङ्कितं, तत् पश्यतु ।",
"nouserspecified": "भवता/भवत्या एकं योग्यं प्रयोक्तृनाम अवश्यमेव दातव्यम् ।",
- "login-userblocked": "एषः योजकः प्रतिबन्धितः । प्रविष्टुम् अनुमतिः नास्ति ।",
+ "login-userblocked": "एषः योजकः प्रतिबन्धितः । प्रवेष्टुम् अनुमतिः नास्ति ।",
"wrongpassword": "भवता/भवत्या लिखितः कूटशब्दः त्रुटियुक्तः । \nकृपया पुनः लिख्यताम् ।",
"wrongpasswordempty": "कूटशब्दपेटिकायां कूटशब्दः न लिखितः ।\n\nकृपया पुनः प्रयासः क्रियताम् ।",
"passwordtooshort": "न्यूनातिन्यूनं {{PLURAL:$1| 1 अक्षरात्मकः|$1 अक्षरात्मकः}} कूटशब्दः भवेदेव ।",
@@ -448,7 +460,7 @@
"passwordsent": "\"$1\" इत्यस्य पञ्जीकृताय ई-पत्रसङ्केताय नवीनः कूटशब्दः प्रेषितः अस्ति । \n\nकृपया तस्य कूटशब्दस्य उपयोगेन पुनः प्रविश्यताम् ।",
"blocked-mailpassword": "भवतः/भवत्याः अन्तर्जालसंविद् (IP) प्रतिबन्धितः अस्ति । \nसम्पादनाय अनुमतिः नास्ति, अतः कूटशब्दस्य पुनःप्राप्तिः भवितुं नार्हति ।",
"eauthentsent": "अधिकृतपुष्टै भवता/भवत्या पञ्जीकृताय ई-पत्रसङ्केताय ई-पत्रं प्रेषितमस्ति । तस्य ई-पत्रसङ्केतस्यैव इतः परम् उपयोगः भवतु इति इच्छति चेत् प्रेषिते ई-पत्रे यथा लिखितमस्ति, तथा करोतु । एवं तस्य ई-पत्रसङ्केतस्य अधिकृतपुष्टता भविष्यति ।",
- "throttled-mailpassword": "कूटशब्दं परिर्वतितुं भवतः/भवत्याः पञ्जीकृताय ई-पत्रसङ्केताय अन्तिम{{PLURAL:$1|होरायां|$1 होरासु}} नूतनकूटशब्दः प्रेषितः अस्ति ।\n\nदुरुपयोगं वारयितुम् प्रति {{PLURAL:$1|होरायां|$1 होरासु}} केवलम् एकम् ई-पत्रं प्रेष्यते ।",
+ "throttled-mailpassword": "कूटशब्दं परिर्वतितुं भवतः/भवत्याः पञ्जीकृताय ई-पत्रसङ्केताय अन्तिम{{PLURAL:$1|होरायां|$1 होरासु}} नूतनकूटशब्दः प्रेषितः अस्ति ।\n\nदुरुपयोगं वारयितुम् प्रति {{PLURAL:$1|होरं|$1 होरं}} केवलम् एकम् ई-पत्रं प्रेष्यते ।",
"mailerror": "ई-पत्रसम्प्रेषणे दोषः : $1",
"acct_creation_throttle_hit": "चतु्र्विंशतिघण्टासु अस्य सङ्गणकस्य आन्तर्जालसंविदा (IP) {{PLURAL:$1|1 योजकः|$1 योजकाः}} सदस्यतां प्राप्तवान्/वन्तः । अद्य इतोपि अधिकसदस्याः प्राप्तुं न शक्यन्ते ।",
"emailauthenticated": "$2 दिनाङ्के $3 वादने भवतः/भवत्याः ई-पत्रसङ्केतः पुष्टितः ।",
@@ -461,16 +473,17 @@
"accountcreated": "सदस्यता प्राप्ता",
"accountcreatedtext": "[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) कृते \"योजसम्भाषणम्\" इति पृष्ठं रचितम् ।",
"createaccount-title": "{{SITENAME}} कृते सदस्यता प्राप्यताम्",
- "createaccount-text": "{{SITENAME}} ($4) इत्यत्र, \"$2\" नाम्ना, \"$3\" कूटशब्देन, च कोऽपि भवतः/भवत्याः ई-पत्रसङ्केतस्य उपयोगं कृत्वा सदस्यतां प्रापत् ।\nअधुना भवान्/भवती प्रवेशं कृत्वा गुप्तसङ्ख्यां परिवर्तयितं शक्नोति ।\nएषा सदस्यताप्राप्तिः क्षत्या अभवत् चेत्, एनं सन्देशम् अवगणोतु ।",
- "login-throttled": "भवता/भवत्या अत्यधिकाः प्रवेशप्रयासाः कृताः । \nकृपया $1 कालं यावत् प्रतिक्षां करोतु ।",
+ "createaccount-text": "{{SITENAME}} ($4) इत्यत्र, \"$2\" नाम्ना, \"$3\" कूटशब्देन, च कोऽपि भवतः/भवत्याः ई-पत्रसङ्केतस्य उपयोगं कृत्वा सदस्यतां प्रापत् ।\nअधुना भवान्/भवती प्रवेशं कृत्वा गुप्तसङ्ख्यां परिवर्तयितं शक्नोति ।\nएषा सदस्यताप्राप्तिः क्षत्या अभवत् चेत्, एनं सन्देशम् उपेक्षताम् ।",
+ "login-throttled": "भवता/भवत्या अत्यधिकाः प्रवेशप्रयासाः कृताः । \nकृपया $1 कालं यावत् प्रतीक्ष्यताम् ।",
"login-abort-generic": "भवतः/भवत्याः प्रवेशप्रयासः विफलीभूतः - परित्यक्तः",
+ "login-migrated-generic": "भवतः/भवत्याः सदस्यत्वं स्थानान्तरितं, येन भवतः/भवत्याः प्रयोक्तृनाम एतस्मिन् विकि-प्रकल्पे न विद्यते ।",
"loginlanguagelabel": "भाषा : $1",
- "suspicious-userlogout": "भवतः/भवत्याः \"निर्गमनम्\" इत्यस्य विनतिं स्वीकर्तुं न शक्यते । कारणं भवता/भवत्या एषा विनतिः तृटियुक्तगवेक्षणात् प्रतिनिधि(proxy)-तः वा कृता ।",
- "createacct-another-realname-tip": "वास्तविकनाम ऐच्छकम् अस्ति । भवान्/भवती एनं विकल्पं समर्थयति चेत्, भवतः/भवत्याः योगदानश्रेयस्य उल्लेखसमये अस्य उपयोगः भविष्यति ।",
+ "suspicious-userlogout": "भवतः/भवत्याः \"निर्गम्यताम्\" इत्यस्य विज्ञप्तिं स्वीकर्तुं न शक्यते । यतः भवता/भवत्या एषा विज्ञप्तिं तृटियुक्तगवेक्षणात् प्रतिनिधि(proxy)-तः वा कृता ।",
+ "createacct-another-realname-tip": "वास्तविकनाम ऐच्छिकम् अस्ति । भवान्/भवती एनं विकल्पं समर्थयति चेत्, भवतः/भवत्याः योगदानश्रेयस्य उल्लेखसमये अस्य उपयोगः भविष्यति ।",
"pt-login": "प्रविश्यताम्",
"pt-login-button": "प्रविश्यताम्",
"pt-createaccount": "सदस्यता प्राप्यताम्",
- "pt-userlogout": "निर्गमनम्",
+ "pt-userlogout": "निर्गम्यताम्",
"php-mail-error-unknown": "PHP लिप्याः मुख्यनियोगे (in main()) अज्ञातत्रुटिः प्राप्ता ।",
"user-mail-no-addy": "ई-पत्रसङ्केतं विना ई-पत्रप्रेषणस्य प्रयासः कृतः ।",
"user-mail-no-body": "भवता/भवत्या रिक्तं लघुसन्देशयुक्तं वा ई-पत्रं प्रेषणस्य प्रयासः कृतः ।",
@@ -483,7 +496,7 @@
"retypenew": "नूतनकूटशब्दः पुनः लिख्यताम् :",
"resetpass_submit": "कूटशब्दः योज्यतां, प्रविश्यतां च",
"changepassword-success": "भवतः/भवत्याः कूटशब्दः सफलतया परिवर्तितः ।",
- "changepassword-throttled": "भवता/भवत्या अत्यधिकाः प्रवेशप्रयासाः कृताः । \nकृपया $1 कालं यावत् प्रतिक्षां करोतु ।",
+ "changepassword-throttled": "भवता/भवत्या अत्यधिकाः प्रवेशप्रयासाः कृताः । \nकृपया $1 कालं यावत् प्रतीक्ष्यताम् ।",
"resetpass_forbidden": "कूटशब्दाः परिवर्तयितुं न शक्यन्ते",
"resetpass-no-info": "एतत् पृष्ठं सम्पादयितुं प्रवेशः अनिवार्यः ।",
"resetpass-submit-loggedin": "कूटशब्दः परिवर्त्यताम्",
@@ -492,6 +505,7 @@
"resetpass-recycled": "कूटशब्दं परिवर्तनावसरे नवीनकूटशब्दे पुरानतकूटशब्दस्य उपयोगं मा करोतु ।",
"resetpass-temp-emailed": "भवता/भवत्या अल्पकालीन(temporary)कूटशब्देन प्रवेशः प्राप्तः । \nसदस्यताप्रक्रियां पूर्णं कर्तुं नूतनः कूटशब्दः लेखनीयः एव ।",
"resetpass-temp-password": "अल्पकालीनकूटशब्दः :",
+ "resetpass-abort-generic": "केनचित् विस्तारकेन (extension) कूटशब्दस्य परिवर्तनं स्थगितम् अस्ति ।",
"resetpass-expired": "भवतः/भवत्याः कृटशब्दस्य अवधिः समाप्ता । प्रवेष्टुं नवीनकूटशब्दं निर्धारयतु ।",
"resetpass-expired-soft": "भवतः/भवत्याः कृटशब्दस्य अवधिः समाप्ता । कृपया नवीनकूटशब्दं निर्धारयतु । पश्चात् नवीनकूटशब्दं निर्धारयितुं \"{{int:resetpass-submit-cancel}}\" नुदतु ।",
"resetpass-validity-soft": "भवतः/भवत्याः कृटशब्दः अयोग्यः अस्ति । कृपया नवीनकूटशब्दं निर्धारयतु । पश्चात् नवीनकूटशब्दं निर्धारयितुं \"{{int:resetpass-submit-cancel}}\" नुदतु ।",
@@ -508,13 +522,12 @@
"passwordreset-email": "ई-पत्रसङ्केतः",
"passwordreset-emailtitle": "{{SITENAME}} इत्यत्र योजकविषये",
"passwordreset-emailtext-ip": "कोऽपि (कदाचित् भवान्/भवती, $1 अन्तर्जालसंविदः (from IP)) {{SITENAME}}($4) जालस्थानस्य कृते कूटशब्दपरिवर्तनस्य विनतिम् अकरोत् । निम्न{{PLURAL:$3|योजकः|योजकाः}} अनेन ई-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विनतिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
- "passwordreset-emailtext-user": "$1 योजकः {{SITENAME}}($4) जालस्थानस्य कृते कूटशब्दपरिवर्तनस्य विनतिम् अकरोत् । निम्न{{PLURAL:$3|योजकः|योजकाः}} अनेन ई-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विनतिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
+ "passwordreset-emailtext-user": "$1 योजकः {{SITENAME}}($4) जालस्थानस्य कृते कूटशब्दपरिवर्तनस्य विनतिम् अकरोत् । निम्न{{PLURAL:$3|योजकः|योजकाः}} अनेन ई-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विज्ञप्तिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
"passwordreset-emailelement": "प्रयोक्तृनाम : $1\nअल्पकालीनकूटशब्दः : $2",
"passwordreset-emailsent": "परिवर्तितकूटशब्दस्य ई-पत्रं प्रेषितम् अस्ति ।",
"passwordreset-emailsent-capture": "परिवर्तितकूटशब्दस्य ई-पत्रं प्रेषितम् अस्ति । तत् अधः द्रष्टुं शक्यते ।",
"passwordreset-emailerror-capture": "परिवर्तितकूटशब्दस्य ई-पत्रं निर्मितम् अस्ति । तत् अधः द्रष्टुं शक्यते । परन्तु {{GENDER:$2|योजकाय}} प्रेषणकाले तत् निरस्तम् अभवत् : $1",
"changeemail": "ई-पत्रसङ्केतः परिवर्त्यताम्",
- "changeemail-header": "प्रयोक्तृनाम्नः ई-पत्रसङ्केतः परिवर्त्यताम्",
"changeemail-text": "स्वस्य ई-पत्रसङ्केतं परिवर्तयितुम् अधः दत्तं प्रपत्रं पूरयतु । एतस्यै प्रक्रियायै कूटशब्दः आवश्यकः ।",
"changeemail-no-info": "एतत् पृष्ठं सम्पादयितुं प्रवेशः अनिवार्यः ।",
"changeemail-oldemail": "वर्तमानः ई-पत्रसङ्केतः",
@@ -522,7 +535,6 @@
"changeemail-none": "(न कोऽपि)",
"changeemail-password": "भवतः/भवत्याः {{SITENAME}} कूटशब्दः:",
"changeemail-submit": "ई-पत्रं परिवर्त्यताम्",
- "changeemail-cancel": "निरस्यताम्",
"changeemail-throttled": "भवता/भवत्या अत्यधिकाः प्रवेशप्रयासाः कृताः । \nकृपया $1 कालं यावत् प्रतिक्षां करोतु ।",
"resettokens": "चिह्नानि (tokens) परिवर्त्यताम्",
"resettokens-text": "भवतः/भवत्याः सदस्यतया सह सल्लग्नानि चिह्नानि () उपयोक्तुं शक्यन्ते । येन अनया सदस्यतया सह सल्लग्नाः काश्चन गुप्तसूचनाः ज्ञातुं शक्यन्ते ।",
@@ -544,7 +556,7 @@
"headline_sample": "शीर्षकम्",
"headline_tip": "द्वितीयस्तरीयं शीर्षकम्",
"nowiki_sample": "अप्रारूपितं पाठम् अत्र निवेश्यताम्",
- "nowiki_tip": "विकि-प्रारूपस्य अवगणनां करोतु",
+ "nowiki_tip": "विकि-प्रारूपम् उपेक्ष्यताम्",
"image_sample": "उदाहरणम्.jpg",
"image_tip": "अन्तर्निहिता सञ्चिका",
"media_sample": "उदाहरणम्.ogg",
@@ -559,13 +571,16 @@
"preview": "प्राग्दृश्यम्",
"showpreview": "प्राग्दृश्यं दृश्यताम्",
"showdiff": "परिवर्तनानि दृश्यन्ताम्",
- "anoneditwarning": "'''पूर्वसूचना''' भवता/भवत्या प्रवेशः न कृतः !\nअत्र सम्पादनं कर्तुं प्रवेशः अनिवार्यः । अन्यथा अस्य पृष्ठस्य इतिहासे भवतः/भवत्याः अन्तर्जालसंविदः (IP) सङ्ख्या अङ्किता भवति ।",
+ "blankarticle": "<strong>पूर्वसूचना : </strong> भवान्/भवती एकस्य रिक्तपृष्ठस्य निर्माणं करोति ।\nयदि भवान्/भवती \"{{int:savearticle}}\" इत्येतत् पुनः नोत्स्यति, तर्हि रिक्तपृष्ठस्य निर्माणं भविष्यति ।",
+ "anoneditwarning": "'''पूर्वसूचना''' भवता/भवत्या प्रवेशः न कृतः !\nअत्र सम्पादनं कर्तुं प्रवेशः अनिवार्यः । अन्यथा अस्य पृष्ठस्य इतिहासे भवतः/भवत्याः अन्तर्जालसंविदः (IP) सङ्ख्या अङ्किता भवति । यदि भवान्/भवती <strong>[$1 प्रविषचि]</strong> \nउत <strong>[$2 सदस्यातां प्राप्नोति]</strong>, तर्हि अन्यसुविधाभिः सह भवान्/भवती सम्पादनानां श्रेयम् अपि प्राप्स्यति ।",
"anonpreviewwarning": "''भवता/भवत्या प्रवेशः न स्वीकृतः । अस्य पृष्ठस्य परिवर्तनस्य इतिहासे भवतः/भवत्याः अन्तर्जालसंविदः (IP) उल्लेखो भविष्यति ।''",
- "missingsummary": "'''स्मरतु''' भवता/भवत्या सम्पादनस्य सारांशः न प्रदत्तः ।\n\"{{int:savearticle}}\" अत्र यदि भवान्/भवती द्वितीयवारं नुदिष्यति, तर्हि भवतः/भवत्याः सम्पादनसारांशात् ऋते परिवर्तनं रक्षितं भविष्यति ।",
+ "missingsummary": "'''स्मरतु''' भवता/भवत्या सम्पादनस्य सारांशः न प्रदत्तः ।\n\"{{int:savearticle}}\" अत्र यदि भवान्/भवती द्वितीयवारं नोत्स्यति, तर्हि भवतः/भवत्याः सम्पादनसारांशात् ऋते परिवर्तनं रक्षितं भविष्यति ।",
+ "selfredirect": "<strong>पूर्वसूचना :</strong> भवान्/भवती एतत् पृष्ठं एतत्पृष्ठं प्रत्येव प्रेषयति ।\nअनुप्रेषिणाय दोषपूर्णं लक्ष्यनिर्देशं भवितुम् अर्हति, अथवा तु भवान्/भवती अशुद्धपृष्ठस्य सम्पादनाय प्रयतते ।\n\"{{int:savearticle}}\" इत्ययत् भवान्/भवती पुनः नुदति चेत्, पुनर्नर्देशनं स्वयमेव भविष्यति ।",
"missingcommenttext": "कृपया अधः टिप्पणीं लिखतु ।",
- "missingcommentheader": "'''स्मरतु''' भवता/भवत्या अस्यै टिप्पण्यै विषयः/शीर्षकं न प्रदत्तम् ।\n\"{{int:savearticle}}\" अत्र यदि भवान्/भवती द्वितीयवारं नुदिष्यति, तर्हि भवतः/भवत्याः सम्पादनसारांशात् ऋते एतत् रक्षितं भविष्यति ।",
+ "missingcommentheader": "'''स्मरतु''' भवता/भवत्या अस्यै टिप्पण्यै विषयः/शीर्षकं न प्रदत्तम् ।\n\"{{int:savearticle}}\" अत्र यदि भवान्/भवती द्वितीयवारं नोत्स्यति, तर्हि भवतः/भवत्याः सम्पादनसारांशात् ऋते एतत् रक्षितं भविष्यति ।",
"summary-preview": "सारांशस्य प्राग्दृश्यम् :",
"subject-preview": "विषयस्य/शीर्षकस्य प्राग्दृश्यम्:",
+ "previewerrortext": "भवता/भवत्या कृतस्य परिवर्तनस्य प्राग्दृश्यस्य प्रदर्शनकाले दोषः अभवत् ।",
"blockedtitle": "प्रयोक्ता अवरुद्धः वर्तते",
"blockedtext": "<strong>भवतः/भवत्याः सदस्यता अन्तर्जालसंविद् वा प्रतिबन्धिता वर्तते ।</strong>\n\nप्रतिबन्धः $1 द्वारा अभवत् ।\nकारणं दत्तं यत्, <em>$2</em>.\n\n* प्रतिबन्धस्य प्रारम्भः : $8\n* प्रतिबन्धस्य समाप्तिः : $6\n* अभिप्रेतः अवरोध्यः : $7\n\n$1 अस्य सम्पर्कं कर्तुं शक्नोति । अथवा अन्य[[{{MediaWiki:Grouppage-sysop}}|प्रबन्धकेन]] सह प्रतिबन्धविषयकचर्चां कर्तुं शक्नोति ।\nभवान्/भवती \"ई-पत्रं प्रेष्यताम्\" विकल्पस्य उपयोगं कर्तुं न शक्नोति । भवतः/भवत्याः [[Special:Preferences|इष्टतमानि]] विकल्पे कोऽपि ई-पत्रसङ्केतः अस्ति, तस्य उपयोगाय च प्रतिबन्धः नास्ति चेत्, तस्य ई-पत्रस्य उपयोगं कर्तुं शक्नोति ।\n\nभवतः/भवत्याः वर्तमाना अन्तर्जालसंविद् $3, प्रतिबन्धितसदस्यता #$5 च अस्ति । \n\nयत्र कुत्रापि प्रबन्धसम्बद्धां चर्चां करोति, तत्र उक्तसूचनायाः उपयोगम् अवश्यं करोतु ।",
"autoblockedtext": "<strong>भवतः/भवत्याः अन्तर्जालसंविद् प्रतिबन्धिता वर्तते ।</strong>\n\nप्रतिबन्धः $1 द्वारा अभवत् ।\nकारणं दत्तं यत्, <em>$2</em>.\n\n* प्रतिबन्धस्य प्रारम्भः : $8\n* प्रतिबन्धस्य समाप्तिः : $6\n* अभिप्रेतः अवरोध्यः : $7\n\n$1 अस्य सम्पर्कं कर्तुं शक्नोति । अथवा अन्य[[{{MediaWiki:Grouppage-sysop}}|प्रबन्धकेन]] सह प्रतिबन्धविषयकचर्चां कर्तुं शक्नोति ।\nभवान्/भवती \"ई-पत्रं प्रेष्यताम्\" विकल्पस्य उपयोगं कर्तुं न शक्नोति । भवतः/भवत्याः [[Special:Preferences|इष्टतमानि]] विकल्पे कोऽपि ई-पत्रसङ्केतः अस्ति, तस्य उपयोगाय च प्रतिबन्धः नास्ति चेत्, तस्य ई-पत्रस्य उपयोगं कर्तुं शक्नोति ।\n\nभवतः/भवत्याः वर्तमाना अन्तर्जालसंविद् $3, प्रतिबन्धितसदस्यता #$5 च अस्ति । \n\nयत्र कुत्रापि प्रबन्धसम्बद्धां चर्चां करोति, तत्र उक्तसूचनायाः उपयोगम् अवश्यं करोतु ।",
@@ -578,16 +593,16 @@
"loginreqlink": "प्रविश्यताम्",
"loginreqpagetext": "अन्यानि पृष्ठानि द्रष्टुं $1 आवश्यकम् ।",
"accmailtitle": "कूटशब्दः प्रेषितः",
- "accmailtext": "[[User talk:$1|$1]] कृते अशृङ्खलितरीत्या (randomly) उत्पादितः कूटशब्दः $2 ई-पत्रसङ्केतं प्रति प्रषितः अस्ति । <em>[[Special:ChangePassword|कूटशब्दः परिवर्त्यताम्]]</em> अत्र तत् परिर्तयितुं शक्यते ।",
+ "accmailtext": "[[User talk:$1|$1]] कृते अशृङ्खलितरीत्या (randomly) उत्पादितः कूटशब्दः $2 ई-पत्रसङ्केतं प्रति प्रेषितः अस्ति । <em>[[Special:ChangePassword|कूटशब्दः परिवर्त्यताम्]]</em> अत्र तत् परिर्तयितुं शक्यते ।",
"newarticle": "(नूतनम्)",
- "newarticletext": "भवान्/भवती अनिर्मिते पृष्ठे अस्ति । \nपृष्ठं स्रष्टुम् अधः प्रदत्तायां पेटिकायां टङ्कनं प्रारभतु (साहाय्यार्थं [$1 अत्र]) नुदतु ।\nभवान्/भवती यदि क्षतिकारणात् एतत् पृष्ठं प्रति आगच्छत्, तर्हि अस्य गवेषकस्य (browser) Back नुदतु ।",
- "anontalkpagetext": "----\n<em>एतत् सम्भाषणपृष्ठम् अनामकयोजकेभ्यः अस्ति । एतत् तेभ्यः अनामकयोजकेभ्यः रचितमस्ति, यैः सदस्यता न प्राप्ता अस्ति तथा च अस्य पृष्ठस्य उपयोगं न कुर्वन्तः सन्ति ।</em>\nतेषां व्यक्तिगतसूचनां प्राप्तुमेव वयं तस्य/तस्याः अन्तर्जालसंविदः उपयोगं कुर्मः । केचन योजकाः स्वस्य अन्तर्जालसंविदम् अन्यान् योजकान् कथयन्ति । \nयद्यपि अनामकयोजकः अहं नास्मि, तथापि अयोग्यसूचनाः मम पार्श्वे आगच्छन्त्यः सन्ति इति यदि भवान्/भवती अनुवति, तर्हि एतत् [[Special:UserLogin/signup|create an account]] एतत् [[Special:UserLogin|log in]] वा कृत्वा भविष्यस्य अनामकयोजकनां सन्देशेभ्यः स्वस्य रक्षणं करोतु ।",
+ "newarticletext": "भवान्/भवती अनिर्मिते पृष्ठे अस्ति । \nपृष्ठं स्रष्टुम् अधः प्रदत्तायां पेटिकायां टङ्कनं प्रारभताम् (साहाय्यार्थं [$1 अत्र]) नुदतु ।\nभवान्/भवती यदि क्षतिकारणात् एतत् पृष्ठं प्रति आगच्छत्, तर्हि अस्य गवेषकस्य (browser) Back नुदतु ।",
+ "anontalkpagetext": "----\n<em>एतत् सम्भाषणपृष्ठम् अनामकयोजकेभ्यः अस्ति । एतत् तेभ्यः अनामकयोजकेभ्यः रचितमस्ति, यैः सदस्यता न प्राप्ता अस्ति तथा च अस्य पृष्ठस्य उपयोगं न कुर्वन्तः सन्ति ।</em>\nतेषां व्यक्तिगतसूचनां प्राप्तुमेव वयं तस्य/तस्याः अन्तर्जालसंविदः उपयोगं कुर्मः । केचन योजकाः स्वस्य अन्तर्जालसंविदम् अन्यान् योजकान् कथयन्ति । \nयद्यपि अनामकयोजकः अहं नास्मि, तथापि अयोग्यसूचनाः मम पार्श्वे आगच्छन्त्यः सन्ति इति यदि भवान्/भवती शङ्कते, तर्हि एतत् [[Special:UserLogin/signup|create an account]] एतत् [[Special:UserLogin|log in]] वा कृत्वा भविष्यस्य अनामकयोजकनां सन्देशेभ्यः स्वस्य रक्षणं करोतु ।",
"noarticletext": "अस्मिन् पृष्ठे अधुना किमपि न विद्यते । [[Special:Search/{{PAGENAME}}|एषः शब्दः]] येषु पृष्ठेषु अन्तर्भवति, तानि पृष्ठानि अन्वेष्टुं शक्यन्ते । \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} सम्बद्धेषु पृष्ठेषु अन्वेषणं]\n[{{fullurl:{{FULLPAGENAME}}|action=edit}} अस्य पृष्ठस्य सम्पादनं] वा शक्यम्</span>.",
"noarticletext-nopermission": "अस्मिन् पृष्ठे अधुना किमपि न विद्यते । [[Special:Search/{{PAGENAME}}|एषः शब्दः]] येषु पृष्ठेषु अन्तर्भवति, तानि पृष्ठानि अन्वेष्टुं शक्यन्ते । \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} सम्बद्धेषु पृष्ठेषु अन्वेषणं]\n[{{fullurl:{{FULLPAGENAME}}|action=edit}} अस्य पृष्ठस्य सम्पादनं] वा शक्यम्</span>.",
- "missing-revision": "\"{{FULLPAGENAME}}\" पृष्ठस्य संस्करणं #$1 नोपलभ्यत् ।\nयस्य पृष्ठस्य इतिहासे परिसन्धयः कालातीतान्यः सन्ति, तेषु पृष्ठेषु एवं भवति ।\nअधिकसूटनाः अत्र प्राप्तुं शक्यते [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलिः].",
- "userpage-userdoesnotexist": "\"$1\" इति प्रयोक्तृनाम पञ्जिकृतं न विद्यते । अस्य\nनवरचनायै/सम्पादनाय तत् पश्यतु ।",
- "userpage-userdoesnotexist-view": "\"$1\" इति प्रयोक्तृनाम पञ्जिकृतं न विद्यते ।",
- "blocked-notice-logextract": "अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते।\nनूतनतमा अवरोधाभिलेख-प्रविष्टिः सन्दर्भार्थम् अधस्तात् प्रदत्ताऽस्ति:",
+ "missing-revision": "\"{{FULLPAGENAME}}\" पृष्ठस्य संस्करणं #$1 नोपलभ्यम् ।\nयस्य पृष्ठस्य इतिहासे परिसन्धयः कालातीताः सन्ति, तेषु पृष्ठेषु एवं भवति ।\nअधिकसूचनाः अत्र प्राप्तुं शक्यते [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलिः].",
+ "userpage-userdoesnotexist": "\"$1\" इति प्रयोक्तृनाम पञ्जीकृतं न विद्यते । अस्य\nनवरचनायै/सम्पादनाय तत् पश्यतु ।",
+ "userpage-userdoesnotexist-view": "\"$1\" इति प्रयोक्तृनाम पञ्जीकृतं न विद्यते ।",
+ "blocked-notice-logextract": "अयं प्रयोक्ता सम्प्रति अवरुद्धः वर्तते ।\nसन्दर्भार्थम् अधः नूतनतमा अवरोधाभिलेख-प्रविष्टिः प्रदत्ताऽस्ति :",
"clearyourcache": "<strong>सूचना :</strong> भवता/भवत्या कृतानि सम्पादनानि संरक्ष्य तानि परिवर्तनेषु द्रष्टुं गवेषकस्य पृष्ठस्य पुनरारोपणम् (reload) आवश्यकं भवति ।\n* <strong>Firefox / Safari:</strong> <em>Shift</em>कुड्मलेन सह <em>Reload</em>कुड्मलं नुदतु । \n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R</em> नोदनेन पुनरारोपणं भवति । (<em>⌘-R</em> इति Mac तन्त्रांशप्रयोक्तॄभ्यः)\n* <strong>Internet Explorer:</strong> <em>Ctrl</em>कुड्मलेन सह <em>Refresh</em>कुड्मलं नुदतु, <em>Ctrl-F5</em> नुदतु वा ।\n* <strong>Opera:</strong> <em>Tools → Preferences</em> इत्यत्र गत्वा कर्तुं शक्नोति ।",
"usercssyoucanpreview": "'''सूचना :''' CSS नवीनलिप्याः संरक्षणं करणात् प्राक् एतत् \"{{int:showpreview}}\" नुद्य प्रयोगं करोतु ।",
"userjsyoucanpreview": "'''सूचना :''' JavaScript नवीनलिप्याः संरक्षणं करणात् प्राक् एतत् \"{{int:showpreview}}\" नुद्य प्रयोगं करोतु ।",
@@ -595,15 +610,15 @@
"userjspreview": "<strong>एतत् केवलं योजकस्य JabaScript इत्यस्य प्राग्दृश्यं वर्तते इति स्मरतु । भवता/भवत्या कृतानि परिवर्तनानि एतवता न रक्षितानि !</strong>",
"sitecsspreview": "<strong>एतत् केवलं CSS इत्यस्य प्राग्दृश्यं वर्तते इति स्मरतु । भवता/भवत्या कृतानि परिवर्तनानि एतवता न रक्षितानि !</strong>",
"sitejspreview": "<strong>एतत् केवलं JavaScript इत्यस्य प्राग्दृश्यं वर्तते इति स्मरतु । भवता/भवत्या कृतानि परिवर्तनानि एतवता न रक्षितानि !</strong>",
- "userinvalidcssjstitle": "'''पूर्वसूचना:''' \"$1\" इति त्वक् न विद्यते।\nयोजकपरिवर्तिते .css, .js सञ्चिके लघु-आङ्गावर्णमालायाः वर्णैः लिख्येते । उदा. {{ns:user}}:Foo/Vector.css एवं न लेखनीयम् । लघुवर्णैः {{ns:user}}:Foo/vector.css एवं लेखनीयम् ।",
+ "userinvalidcssjstitle": "'''पूर्वसूचना:''' \"$1\" इति त्वक् न विद्यते।\nयोजकपरिवर्तिते .css, .js सञ्चिके लघु-आङ्ग्लवर्णमालायाः वर्णैः लिख्येते । उदा. {{ns:user}}:Foo/Vector.css एवं न लेखनीयम् । लघुवर्णैः {{ns:user}}:Foo/vector.css एवं लेखनीयम् ।",
"updated": "(नवीकृतम् (updated))",
"note": "'''सूचना:'''",
"previewnote": "<strong>एतत् केवलं प्राग्दृश्यं वर्तते इति स्मरतु । भवता/भवत्या कृतानि परिवर्तनानि एतवता न रक्षितानि !</strong>",
"continue-editing": "सम्पादनविभागं गम्यताम्",
"previewconflict": "एतत् पृष्ठं यदि भवान्/भवती रक्षिष्यति, तर्हि अत्र प्राग्दृश्ये यथा दृश्यते, तथैव रक्षितं भविष्यति ।",
"session_fail_preview": "'''क्षम्यताम् ! प्रवेशसूचनायाः लोपत्वात् भवता/भवत्या कृतानि परिवर्तनानि रक्षितुं वयं न अशक्नुम ।\nअधुनापि यदि सा एव समस्या अस्ति, तर्हि [[Special:UserLogout|निर्गमनं कृत्वा]] पुनः प्रविश्यताम् ।",
- "session_fail_preview_html": "'''क्षम्यताम् ! प्रवेशसूचनायाः लोपत्वात् भवता/भवत्या कृतानि परिवर्तनानि रक्षितुं वयं न अशक्नुम ।\n\n<em>कारणं {{SITENAME}} इत्यत्र मूल-HTML-समर्थितं भवति । अतः JavaScript इत्यस्मात् रक्षितुं प्राग्दृश्यं निगूढं भवति ।</em>\n\n<strong>भवता/भवत्या कृतं सम्पादनं यदि उचितमस्ति, तर्हि पुनः प्रयासं करोतु ।</strong>\n\nअधुनापि यदि सा एव समस्या अस्ति, तर्हि [[Special:UserLogout|निर्गमनं कृत्वा]] पुनः प्रविश्यताम् ।",
- "token_suffix_mismatch": "'''भवता/भवत्या कृतानि परिवर्तनानि निरस्तानि कृतानि । कराणं भवतः/भवत्याः गवेषकेन (browser) सम्पादने कानिचन विरामचिह्नानि अस्तव्यस्तकृतानि ।'''\nलेखस्य पाठः असंस्कृतः न स्यात्, अतः भवतः/भवत्याः परिवर्तनानि निरस्तीकृतानि ।\nअयोग्यप्रतिनिधेः (proxy server) उपयोगेनापि कुत्रचित् एतादृशं भवति ।",
+ "session_fail_preview_html": "'''क्षम्यताम् ! प्रवेशसूचनायाः लोपत्वात् भवता/भवत्या कृतानि परिवर्तनानि रक्षितुं वयं न शक्तवन्तः ।\n\n<em>कारणं {{SITENAME}} इत्यत्र मूल-HTML-समर्थितं भवति । अतः JavaScript इत्यस्मात् रक्षितुं प्राग्दृश्यं निगूहितं भवति ।</em>\n\n<strong>भवता/भवत्या कृतं सम्पादनं यदि उचितमस्ति, तर्हि पुनः प्रयत्यताम् ।</strong>\n\nअधुनापि यदि सा एव समस्या अस्ति, तर्हि [[Special:UserLogout|निर्गमनं कृत्वा]] पुनः प्रविश्यताम् ।",
+ "token_suffix_mismatch": "'''भवता/भवत्या कृतानि परिवर्तनानि निरस्तानि कृतानि । यतः भवतः/भवत्याः गवेषकेन (browser) सम्पादने कानिचन विरामचिह्नानि अस्तव्यस्तकृतानि ।'''\nलेखस्य पाठः असंस्कृतः न स्यात्, अतः भवतः/भवत्याः परिवर्तनानि निरस्तीकृतानि ।\nअयोग्यप्रतिनिधेः (proxy server) उपयोगेनापि कुत्रचित् एतादृशं भवति ।",
"edit_form_incomplete": "'''सम्पादनस्य कतिचनांशाः वितरके (server) न रक्षिताः । भवता/भवत्या कृतानि सम्पादनानि योग्यानि चेत् पुनः प्रयतताम् ।'''",
"editing": "$1 सम्पाद्यते",
"creating": "$1 सृज्यते",
@@ -614,89 +629,95 @@
"yourtext": "भवतः/भवत्याः पाठः",
"storedversion": "रक्षितसंस्करणम्",
"nonunicodebrowser": "<strong>पूर्वसूचना : भवतः/भवत्याः गवेषकं (browser) Unicode न समर्थयति ।</strong>\nअत्र भवान्/भवती योग्यरीत्या सम्पादनं कर्तुं शक्ष्यति :\nये वर्णाः ASCII कूटे न भविष्यन्ति, ते hexadecimal वर्णत्वेन प्रदर्शयन्ते ।",
- "editingold": "<strong>पूर्वसूचना : भवता/भवत्या अस्य पृष्ठस्य कालातीत-आवृत्तिं समाद्यते । </strong>\nएतत् पृष्ठं यदि भवान्/भवती रक्षिष्यति, तर्हि सद्यः आवृत्ति-तः पुरा यानि परिवर्तनानि आसन्, तानि नशिष्यन्ति ।",
+ "editingold": "<strong>पूर्वसूचना : भवता/भवत्या अस्य पृष्ठस्य कालातीत-आवृत्तिं समाद्यते । </strong>\nएतत् पृष्ठं यदि भवान्/भवती रक्षिष्यति, तर्हि सद्यः आवृत्ति-तः पुरा यानि परिवर्तनानि आसन्, तानि नङ्क्ष्यन्ति ।",
"yourdiff": "भेदाः",
- "copyrightwarning": "कृपया ध्यानं ददातु यत्, {{SITENAME}} इत्यत्र कृतानि सर्वाणि योगदानानि $2 इत्यस्य नियनानुसारं भविष्यन्ति । (विस्तारेण ज्ञातुं $1 अत्र नुदतु)\nभवान्/भवती स्वस्य योगदानेषु परिवर्तन-पुनर्निर्देशन-आदिनि परिवर्तनानि द्रष्टुं न शक्नोति चेत्, अत्र योगदानं मा करोतु । (अत्र तु लिखिते निरन्तरं पिरवर्तनं भवत्येव इति भावः)\n<br />\n\nअस्मभ्यं भवता/भवत्या प्रतिज्ञा कर्तव्या यत्, \"अत्र यत्किमपि भवान्/भवती लेखिष्यति, तत् सर्वं स्वरचितं, सार्वजनीकं च भविष्यति । कुतस्मात् स्थानात् प्रतिलिपिकृतम् अपि सार्वजनीकमेव स्यात्\" इति । \n<strong>अन्यस्य सर्वाधिकारान्तर्गतं (copyright) यत् भवति, तत् विना अनुमत्या अत्र लिखतुं न शक्यते ।</strong>",
- "copyrightwarning2": "कृपया ध्यानं ददातु यत्, {{SITENAME}} इत्यत्र कृतानि सर्वाणि योगदानानि अन्ययोजकैः सम्पादयितुं, परिर्वतितुं, निष्काशयितुं च शक्यन्ते । \nभवान्/भवती स्वस्य योगदानेषु परिवर्तन-पुनर्निर्देशन-आदिनि परिवर्तनानि द्रष्टुं न शक्नोति चेत्, अत्र योगदानं मा करोतु । (अत्र तु लिखिते निरन्तरं पिरवर्तनं भवत्येव इति भावः)\n<br />\n\nअस्मभ्यं भवता/भवत्या प्रतिज्ञा कर्तव्या यत्, \"अत्र यत्किमपि भवान्/भवती लेखिष्यति, तत् सर्वं स्वरचितं, सार्वजनीकं च भविष्यति । कुतस्मात् स्थानात् प्रतिलिपिकृतम् अपि सार्वजनीकमेव स्यात्\" इति । \n<strong>अन्यस्य सर्वाधिकारान्तर्गतं (copyright) यत् भवति, तत् विना अनुमत्या अत्र लिखतुं न शक्यते ।</strong>",
+ "copyrightwarning": "कृपया ध्यानं ददातु यत्, {{SITENAME}} इत्यत्र कृतानि सर्वाणि योगदानानि $2 इत्यस्य नियनानुसारं भविष्यन्ति । (विस्तारेण ज्ञातुं $1 अत्र नुदतु)\nभवान्/भवती स्वस्य योगदानेषु परिवर्तन-पुनर्निर्देशन-आदीनि परिवर्तनानि द्रष्टुं न शक्नोति चेत्, अत्र योगदानं मा करोतु । (अत्र तु लिखिते निरन्तरं पिरवर्तनं भवत्येव इति भावः)\n<br />\n\nअस्मभ्यं भवता/भवत्या प्रतिज्ञा कर्तव्या यत्, \"अत्र यत्किमपि भवान्/भवती लेखिष्यति, तत् सर्वं स्वरचितं, सार्वजनिकं च भविष्यति । कुतश्चित् स्थानात् प्रतिलिपिकृतम् अपि सार्वजनिकमेव स्यात्\" इति । \n<strong>अन्यस्य सर्वाधिकारान्तर्गतं (copyright) यत् भवति, तत् विना अनुमत्या अत्र लेखितुं न शक्यते ।</strong>",
+ "copyrightwarning2": "कृपया ध्यानं ददातु यत्, {{SITENAME}} इत्यत्र कृतानि सर्वाणि योगदानानि अन्ययोजकैः सम्पादयितुं, परिर्वतितुं, निष्कासयितुं च शक्यन्ते । \nभवान्/भवती स्वस्य योगदानेषु परिवर्तन-पुनर्निर्देशन-आदीनि परिवर्तनानि द्रष्टुं न शक्नोति चेत्, अत्र योगदानं मा करोतु । (अत्र तु लिखिते सति निरन्तरं पिरवर्तनं भवत्येव इति भावः)\n<br />\n\nभवता/भवत्या अस्मभ्यं प्रतिज्ञा कर्तव्या यत्, \"अत्र यत्किमपि भवान्/भवती लेखिष्यति, तत् सर्वं स्वरचितं, सार्वजनिकं च भविष्यति । कुतश्चित् स्थानात् प्रतिलिपीकृतम् अपि सार्वजनिकमेव स्यात्\" इति । (अधिकं ज्ञातम् $1 एतत् पश्यतु)\n<strong>अन्यस्य सर्वाधिकारान्तर्गतं (copyright) यत् भवति, तत् विना अनुमत्या अत्र लेखितुं न शक्यते ।</strong>",
"longpageerror": "<strong>दोषः : भवता/भवत्या लिखितः पाठः {{PLURAL:$1|सहाष्टकं|$1 सहाष्टकानि}} दीर्घः अस्ति । एषः पाठः बृह्त्तमसीमया अपेक्षया {{PLURAL:$2|सहाष्टकं|$2 सहाष्टकानि}} दीर्घः अस्ति ।(सहस्राष्टकानि (kilobytes) इत्यस्य सङ्क्षेपः सहाष्टकम्)</strong>\nएतत् रक्षितुं न शक्यते ।",
"readonlywarning": "<strong>पूर्वसूचना : दत्तांशः (database) किलितः अस्ति । अतः अधुना भवान्/भवती स्वस्य सम्पादनं रक्षितुं न शक्नोति ।</strong>\nस्वस्य परिवर्तितस्य लेखस्य .txt .doc वा सञ्चिकां निर्माय किञ्चित् कालानन्तरं रक्षतु । \nदत्तांश-किलनस्य कारणं प्रबन्धकेन दत्तं यत्, : $1",
- "protectedpagewarning": "'''पूर्वसूचना : पृष्ठमेतत् संरक्षितं वर्तते । अतः केवलं प्रबन्धकाः अत्र सम्पादनं कर्तुं शक्नुवन्ति ।'''\n\nसद्यःकालीना संरक्षितावलिः (log) अधः दत्ता अस्ति :",
- "semiprotectedpagewarning": "'''पूर्वसूचना : पृष्ठमेतत् संरक्षितं वर्तते । अतः केवलं पञ्जिकृतयोजकाः अत्र सम्पादनं कर्तुं शक्नुवन्ति ।'''\n\nसद्यःकालीना संरक्षितावलिः (log) अधः दत्ता अस्ति :",
+ "protectedpagewarning": "'''पूर्वसूचना : पृष्ठमेतत् संरक्षितं वर्तते । अतः केवलं प्रबन्धकाः अत्र सम्पादनं कर्तुं शक्नुवन्ति ।'''\n\nसद्यःकालीना संरक्षिताऽऽवल्याः (log) प्रविष्टिः अधः दत्ता अस्ति :",
+ "semiprotectedpagewarning": "'''पूर्वसूचना : पृष्ठमेतत् संरक्षितं वर्तते । अतः केवलं पञ्जीकृतयोजकाः अत्र सम्पादनं कर्तुं शक्नुवन्ति ।'''\n\nसद्यःकालीना संरक्षिताऽऽवल्याः (log) प्रविष्टिः अधः दत्ता अस्ति :",
"cascadeprotectedwarning": "'''पूर्वसूचना :''' पृष्ठमेतत् संरक्षितं वर्तते । अतः केवलं प्रबन्धकाः अत्र सम्पादनं कर्तुं शक्नुवन्ति ।\nनिम्ननियमान्तर्गतम् एतत्{{PLURAL:$1|पृष्ठं रक्षितं|पृष्ठानि रक्षितानि}}:",
- "titleprotectedwarning": "'''पूर्वसूचना : एतत् पृष्ठं संरक्षितम् अस्ति । अतः अस्य सम्पादनं कर्तुं [[Special:ListGroupRights|विशेषाधिकारः]] अपेक्ष्यते ।'''\nसद्यःकालीना संरक्षितावलिः (log) अधः दत्ता अस्ति :",
+ "titleprotectedwarning": "'''पूर्वसूचना : एतत् पृष्ठं संरक्षितम् अस्ति । अतः अस्य सम्पादनं कर्तुं [[Special:ListGroupRights|विशेषाधिकारः]] अपेक्ष्यते ।'''\nसद्यःकालीना संरक्षिताऽऽवल्याः (log) प्रविष्टिः (Entry) अधः दत्ता अस्ति :",
"templatesused": "अस्मिन् पृष्ठे प्रयुक्त{{PLURAL:$1|फलकम्|फलकानि}}:",
"templatesusedpreview": "अस्मिन् प्राग्दृश्ये प्रयुक्त{{PLURAL:$1|फलकम्|फलकानि}}:",
"templatesusedsection": "अस्मिन् विभागे प्रयुक्त{{PLURAL:$1|फलकम्|फलकानि}}:",
"template-protected": "(संरक्षितम्)",
"template-semiprotected": "अर्धसंरक्षितम्",
- "hiddencategories": "इदं पृष्ठं {{PLURAL:$1|1 निगूढे वर्गे |$1 निगूढेषु वर्गेषु}} अन्तर्भवति :",
- "nocreatetext": "{{SITENAME}} जालस्थानेऽस्मिन् नवीनपृष्ठनिर्मातुम् अनुमतिः न विद्यते ।\nभवान्/भवती प्रतिगत्वा विद्यमानं पृष्ठं सम्पादयतु शक्नोति । सम्पादयितुं [[Special:UserLogin|प्रविश्यताम् सदस्यता प्राप्यताम् वा]].",
- "nocreate-loggedin": "भवतः/भवत्याः पार्श्वे नवीनपृष्ठं रचितुम् अनुमतिः नास्ति ।",
+ "hiddencategories": "इदं पृष्ठं {{PLURAL:$1|1 निगूहिते वर्गे |$1 निगूहितेषु वर्गेषु}} अन्तर्भवति :",
+ "nocreatetext": "{{SITENAME}} जालस्थानेऽस्मिन् नवीनपृष्ठनिर्मातुम् अनुमतिः न विद्यते ।\nभवान्/भवती प्रति गत्वा विद्यमानं पृष्ठं सम्पादयितुं शक्नोति । सम्पादयितुं [[Special:UserLogin|प्रविश्यताम् उत सदस्यता प्राप्यताम्]].",
+ "nocreate-loggedin": "भवतः/भवत्याः पार्श्वे नवीनपृष्ठं रचयितुम् अनुमतिः नास्ति ।",
"sectioneditnotsupported-title": "विभागस्य सम्पादनं शक्यं नास्ति",
"sectioneditnotsupported-text": "पृष्ठेऽस्मिन् विभागसम्पादनं शक्यं नास्ति ।",
"permissionserrors": "अनुमतिदोषः",
- "permissionserrorstext": "एतत् कर्तुं भवतः/भवत्याः पार्श्वे अनुमति नास्ति, निम्न{{PLURAL:$1|कारणम्|कारणानि}}:",
+ "permissionserrorstext": "एतत् कर्तुं भवतः/भवत्याः पार्श्वे अनुमतिः नास्ति, निम्न{{PLURAL:$1|कारणम्|कारणानि}}:",
"permissionserrorstext-withaction": "$1 निम्नकारणत्वात् $2 सम्पादनस्य अनुमतिः नास्ति ।\n{{PLURAL:$1|कारणम्|कारणानि}}:",
- "recreate-moveddeleted-warn": "'''पूर्वसूचना: पूर्वम् अपाकृतं पृष्टं भवता रच्यमानम् अस्ति ।'''\nअस्य पृष्ठस्य सम्पादनं करणात् प्राक् गभीरतया चिन्तनं करोतु ।\nअस्य पृष्ठस्य निर्माणं न्यायसङ्गतम् इति भवतः/भवत्याः मतमस्ति चेत्, अत्र परिवर्तनं करोतु । सौकर्यार्थं पृष्ठ-अपाकरणस्य प्राक्तनसम्पादनस्य आवलिः अत्र दीयते ।",
+ "recreate-moveddeleted-warn": "'''पूर्वसूचना : पूर्वम् अपाकृतं पृष्टं भवता रच्यमानम् अस्ति ।'''\nअस्य पृष्ठस्य सम्पादनं करणात् प्राक् गभीरतया चिन्तनं करोतु ।\nअस्य पृष्ठस्य निर्माणं न्यायसङ्गतम् इति भवतः/भवत्याः मतमस्ति चेत्, अत्र परिवर्तनं करोतु । सौकर्यार्थं पृष्ठ-अपाकरणस्य प्राक्तनसम्पादनस्य आवलिः अत्र दीयते ।",
"moveddeleted-notice": "इदं पृष्ठम् अपाकृतम् अस्ति।\nअस्य अपाकरणस्य, स्थानान्तरणस्य च विवरणम् अधः प्रदत्तम् ।",
- "log-fulllog": "पूर्णसंरक्षितावलिं दृश्यताम्",
+ "log-fulllog": "पूर्णसंरक्षितावलिः दृश्यताम्",
"edit-hook-aborted": "hook द्वारा सम्पादनक्रिया मध्ये एव स्थगिता । स्थगनस्य कारणं न दत्तम् ।",
"edit-gone-missing": "अस्मिन् पृष्ठे परिवर्तनं नाभूत् ।\nएतत् पृष्ठं पुरा एव केनापि अपाकृतम् इति भाति ।",
"edit-conflict": "सम्पादनयोः अन्तर्विरोधः ।",
"edit-no-change": "भवता/भवत्या कृतं सम्पादम् अवगणितम् । कारणं लेखे न किमपि परिवर्तनं जातमस्ति ।",
"postedit-confirmation-created": "नूतनपृष्ठस्य रचना अभवत् ।",
- "postedit-confirmation-restored": "एतत् पृष्ठं पुनः सङ्ग्रहितम् ।",
+ "postedit-confirmation-restored": "एतत् पृष्ठं पुनः सङ्गृहीतम् ।",
"postedit-confirmation-saved": "सम्पादनं रक्षितम् ।",
"edit-already-exists": "नूतनपृष्ठस्य निर्माणं नाभूत् ।\nपूर्वस्मादेव एतत् पृष्ठं विद्यते ।",
"defaultmessagetext": "मूलसन्देशः",
"content-failed-to-parse": "$1 कृते $2 इत्यस्य विभाजनं विफलम् अभवत् । दोषः : $3",
"invalid-content-data": "अयोग्यः लेखः",
"content-not-allowed-here": "[[$2]] पृष्ठे \"$1\" सामग्री स्थापितुम् अनुमतिः नास्ति",
- "editwarning-warning": "एतत् पृष्ठं त्यक्तवा यदि गमिष्यति, तर्हि भवता/भवत्या कृतस्य सम्पादनस्य रक्षणं न भविष्यति ।\n\nभवता/भवत्या यदि प्रवेशः प्राप्तः अस्ति, तर्हि एषा सूचना अत्र \"{{int:prefs-editing}}\" निगूढितुं शक्यते ।",
+ "editwarning-warning": "एतत् पृष्ठं त्यक्त्वा यदि गमिष्यति, तर्हि भवता/भवत्या कृतस्य सम्पादनस्य रक्षणं न भविष्यति ।\n\nभवता/भवत्या यदि प्रवेशः प्राप्तः अस्ति, तर्हि एषा सूचना अत्र \"{{int:prefs-editing}}\" निगूहितुं शक्यते ।",
"editpage-notsupportedcontentformat-title": "लेखस्य प्रारूपम् अयोग्यम्",
"editpage-notsupportedcontentformat-text": "लेखस्य सामग्र्याः $1 इति प्रारूपं $2 सामग्री-उदाहरणानुगुणं नास्ति ।",
"content-model-wikitext": "विकिपाठः",
"content-model-text": "शुद्धपाठः",
"content-model-javascript": "जावालिपिः",
"content-model-css": "सी-एस्-एस्",
- "expensive-parserfunction-warning": "<strong>पूर्वसूचना :</strong> अस्मिन् पृष्ठे बहवः विभाजिताः नियोजिताः (functions) विद्यन्ते ।\n\nअत्र न्यूनातिन्यूनं $2 {{PLURAL:$2|आह्वानं|आह्वानानि}} शक्यते । तत्र {{PLURAL:$1|अधुना $1 आह्वाहनं|अधिना $1 आह्वाहनानि}}",
+ "content-json-empty-object": "रिक्तं वस्तु (Object)",
+ "content-json-empty-array": "रिक्तः पङ्क्तिबन्धः (Array)",
+ "duplicate-args-category": "येषु फलकेषु एकाधिकानां तर्काणाम् उपयोगः अभवत्, तानि पृष्ठानि",
+ "duplicate-args-category-desc": "येषु फलकेषु एकाधिकानां तर्काणाम् उपयोगः अभवत्, ते पृष्ठेऽस्मिन् विद्यमानानि सन्ति । यथा <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> तथा च <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+ "expensive-parserfunction-warning": "<strong>पूर्वसूचना :</strong> अस्मिन् पृष्ठे बहवः विभाजिताः नियोजिताः (functions) विद्यन्ते ।\n\nअत्र न्यूनातिन्यूनं $2 {{PLURAL:$2|आह्वानं|आह्वानानि}} शक्यते । तत्र {{PLURAL:$1|अधुना $1 आह्वाानं|अधिना $1 आह्वानानि}}",
"expensive-parserfunction-category": "अस्मिन् पृष्ठे बहवः विभाजिताः नियोजिताः (functions) विद्यन्ते ।",
- "post-expand-template-inclusion-warning": "'''पूर्वसूचना:''' फलकस्य आकारः बृहत् वर्तते । कानिचन फलकानि नान्तर्भविष्यन्ति ।",
+ "post-expand-template-inclusion-warning": "'''पूर्वसूचना :''' फलकस्य आकारः बृहत् वर्तते । कानिचन फलकानि नान्तर्भविष्यन्ति ।",
"post-expand-template-inclusion-category": "सूचनाफलकस्य अपेक्षया पृष्ठं बृहत् वर्तते ।",
- "post-expand-template-argument-warning": "'''पूर्वसूचना''' अस्मिन् पृष्ठे स्थितस्य फलकस्य एकः विकल्पः बहु बृहत् वर्तते । तस्य विकल्पस्य अंशाः अपाकृताः ।",
+ "post-expand-template-argument-warning": "'''पूर्वसूचना :''' अस्मिन् पृष्ठे स्थितस्य फलकस्य एकः विकल्पः बहु बृहत् वर्तते । तस्य विकल्पस्य अंशाः अपाकृताः ।",
"post-expand-template-argument-category": "येषु पृष्ठेषु फलके स्थिताः विकल्पाः न पूरिताः तेषां पृष्ठानाम् आवलिः",
"parser-template-loop-warning": "फलकस्य परिक्रमः (loop) प्राप्तः : [[$1]]",
"parser-template-recursion-depth-warning": "फलक-प्रत्यावर्तनस्य (recursion) सीमा समाप्ता ($1)",
"language-converter-depth-warning": "भाषा-परिवर्तकस्य सीमा समाप्ता ($1)",
- "node-count-exceeded-category": "येषु सन्धेः (node) सीमा समाप्ता, तेषां पृष्ठानाम् आवलिः",
+ "node-count-exceeded-category": "येषु पृष्ठेषु सन्धेः (node) सीमा समाप्ता, तेषां पृष्ठानाम् आवलिः",
+ "node-count-exceeded-category-desc": "एतत् पृष्ठं सन्धेः (node) सीमाम् उल्लङ्घति",
"node-count-exceeded-warning": "पृष्ठेऽस्मिन् सन्धेः (node) सीमा समाप्ता",
"expansion-depth-exceeded-category": "येषु विस्तारसीमा समाप्ता, तेषां पृष्ठानाम् आवलिः",
+ "expansion-depth-exceeded-category-desc": "एतत् पृष्ठं विस्तारस्य सीमाम् अत्यक्रमत् ।",
"expansion-depth-exceeded-warning": "पृष्ठेऽस्मिन् विस्तारसीमा समाप्ता",
- "parser-unstrip-loop-warning": "Unstrap परिक्रमः (loop) प्राप्तः",
+ "parser-unstrip-loop-warning": "Unstrip परिक्रमः (loop) प्राप्तः",
"parser-unstrip-recursion-limit": "Unstrip इत्यस्य प्रत्यावर्तनस्य (recursion) सीमा समाप्ता ($1)",
"converter-manual-rule-error": "मानवीये भाषापरिवर्तने दोषः दृष्टः ।",
- "undo-success": "एतत् सम्पादनं पूर्ववत् कर्तुं शक्यते ।\nकृपया अधः दत्तयोः तुलनां कृत्वा यत् आवश्यकं, तत् संरक्षतु । ततः पूर्ववत्-करणप्रक्रिया समाप्तं भविष्यति ।",
- "undo-failure": "सम्पादनं पूर्ववत् कर्तुं न शक्यते । कारणं मध्ये परस्परविपरितानि सम्पादनानि अभवन् ।",
- "undo-norev": "सम्पादनमिदं पूर्ववत् कर्तुं न शक्यते । कारणं सम्पादनम् पूर्वमेव अपाकृतं अथवा न विद्यते ।",
+ "undo-success": "एतत् सम्पादनं पूर्ववत् कर्तुं शक्यते ।\nकृपया अधः दत्तयोः तुलनां कृत्वा यत् आवश्यकं, तत् परिवर्तनं संरक्षतु च । ततः पूर्ववत्-करणप्रक्रिया समाप्यताम् ।",
+ "undo-failure": "सम्पादनं पूर्ववत् कर्तुं न शक्यते । यतः मध्ये परस्परविपरितानि सम्पादनानि अभवन् ।",
+ "undo-norev": "सम्पादनमिदं पूर्ववत् कर्तुं न शक्यते । यतः सम्पादनं पूर्वमेव अपाकृतं अथवा न विद्यते ।",
"undo-nochange": "पूर्वमेव एतत् सम्पादनं पूर्ववत् कृतं स्यात् ।",
"undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) द्वारा कृता $1 पूर्ववत्-प्रक्रिया निरस्तीक्रियताम् ।",
- "undo-summary-username-hidden": "निगूढितयोजकद्वारा कृता $1 पूर्ववत्-प्रक्रिया निरस्तीक्रियताम् ।",
+ "undo-summary-username-hidden": "निगूहितयोजकद्वारा कृता $1 पूर्ववत्-प्रक्रिया निरस्तीक्रियताम् ।",
"cantcreateaccounttitle": "सदस्यता प्राप्तुं न शक्यते",
"cantcreateaccount-text": "(<strong>$1</strong>) इत्यस्य संविदः (IP) कृते सदस्यता प्राप्तुं न शक्यते । कारणं [[User:$3|$3]] द्वारा सा संवित्सङ्ख्या प्रतिबन्धिता अस्ति । \n\n$3 इत्यनेन कारणं दत्तं यत्, <em>$2</em>",
- "cantcreateaccount-range-text": "सदस्यताप्राप्तेः सीमा-आक्रान्तासु '''$1''' अन्तर्जालसंवित्सु (IP) भवतः/भवत्याः अन्तर्जालसंवद् ('''$4''') अन्तर्भवति । अतः [[User:$3|$3]] द्वारा भवतः/भवत्याः अन्तर्जालसंविद् प्रतिबन्धिता ।\n\n$3 इत्यनेन कारणं दत्तं यत्, ''$2''",
+ "cantcreateaccount-range-text": "सदस्यताप्राप्तेः सीमा-आक्रान्तृषु '''$1''' अन्तर्जालसंवित्सु (IP) भवतः/भवत्याः अन्तर्जालसंवद् ('''$4''') अन्तर्भवति । अतः [[User:$3|$3]] द्वारा भवतः/भवत्याः अन्तर्जालसंविद् प्रतिबन्धिता ।\n\n$3 इत्यनेन कारणं दत्तं यत्, ''$2''",
"viewpagelogs": "अस्य पृष्ठस्य संरक्षितावलिः (logs) दृश्यताम्",
"nohistory": "अस्य पृष्ठस्य इतिहासः न वर्तते ।",
"currentrev": "नूतनतमा आवृत्तिः",
"currentrev-asof": "$1 समयस्य संस्करणम्",
"revisionasof": "$1 इत्यस्य संस्करणं",
- "revision-info": "$1 पर्यन्तं $2 द्वारा जातानां परिवर्तनानाम् आवलिः",
+ "revision-info": "$1 पर्यन्तं {{GENDER:$6|$2}}$7 द्वारा जातानां परिवर्तनानाम् आवलिः",
"previousrevision": "← पुरातनं संस्करणम्",
"nextrevision": "नूतनतरा आवृत्तिः →",
"currentrevisionlink": "नूतनतमा आवृत्तिः",
"cur": "वर्तमानः",
- "next": "आगामि",
+ "next": "अग्रिमम्",
"last": "पूर्वतनम्",
- "page_first": "प्रथमम्",
+ "page_first": "प्रप्रथमम्",
"page_last": "अन्तिमम्",
"histlegend": "भेदस्य चयनम् : आवृत्तिभेदस्य दर्शनाय अग्रे प्रदत्ता रेडियो-मञ्जूषा नुद्यताम्, एण्टर्-कुड्मलं नुद्यताम्, अधः दत्तं कुड्मलं वा नुद्यताम् । <br />\nनूतनसंस्करणम् = नूतनासु आवृत्तिषु भेदः, \n(पूर्वतनम्) = पूर्वतनासु आवृत्तिषु भेदः, (लघु) = लघु सम्पादनम्",
"history-fieldset-title": "अन्वेषणस्य इतिहासः",
@@ -706,14 +727,15 @@
"historysize": "({{PLURAL:$1|1 अष्टकं|$1 अष्टकानि}})",
"historyempty": "(रिक्तम्)",
"history-feed-title": "संस्करणस्य इतिहासः",
- "history-feed-description": "अस्मिन् विकि-जालस्थाने तस्मै पृष्ठाय संस्करणेतिहासः",
+ "history-feed-description": "अस्मिन् विकि-जालस्थाने एतस्य पृष्ठस्य संस्करणेतिहासः",
"history-feed-item-nocomment": "$1 द्वारा $3 दिनाङ्के $4 समये",
- "history-feed-empty": "एतत् पृष्ठं न विद्यते । \nएतस्य पृष्ठस्य नामपरिवर्तनम्, अपाकरणं च कृतं स्यात् । \n अनेन सम्बद्धानि पृष्ठानि [[Special:Search|विकि-जालस्थाने अन्विष्यताम्]] ।",
+ "history-feed-empty": "एतत् पृष्ठं न विद्यते । \nएतस्य पृष्ठस्य नामपरिवर्तनम्, अपाकरणं च कृतं स्यात् । \n अनेन सम्बद्धानि पृष्ठानि [[Special:Search|विकि-जालस्थाने अन्विष्यन्ताम्]] ।",
"rev-deleted-comment": "(सम्पादनस्य सारः अपाकृतः)",
"rev-deleted-user": "(प्रयोक्तृनाम अपाकृतमस्ति)",
"rev-deleted-event": "(संरक्षिताऽऽवल्यः(log) अपाकृताः)",
- "rev-deleted-user-contribs": "[प्रयोक्तृनाम अन्तर्जालसंविद् वा अपाकृतम् - योगदानाऽऽवल्याम् एतानि परिवर्तनानि निगूढितानि सन्ति ।]",
- "rev-deleted-text-permission": "एतस्य पृष्ठस्य संस्करणम् <strong>अपाकृतमस्ति</strong> ।\nविस्तृतं ज्ञानम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+ "rev-deleted-user-contribs": "[प्रयोक्तृनाम अन्तर्जालसंविद् वा अपाकृतम् - योगदानाऽऽवल्याम् एतानि परिवर्तनानि निगूहितानि सन्ति ।]",
+ "rev-deleted-text-permission": "एतस्य पृष्ठस्य संस्करणम् <strong>अपाकृतमस्ति</strong> ।\nविस्तृतं विवरणम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
+ "rev-suppressed-text-permission": "एतस्य पृष्ठस्य संस्कृतम् <strong>अपाकृतम्</strong> । तस्य विस्तृतं विवकणं [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} गूहितऽऽवल्याः] प्राप्यते ।",
"rev-deleted-text-unhide": "एतस्य पृष्ठस्य संस्करणम् <strong>अपाकृतमस्ति</strong> ।\nविस्तृतं ज्ञानम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
"rev-suppressed-text-unhide": "एतस्य पृष्ठस्य संस्करणम् <strong>निषिद्धमस्ति</strong> ।\nविस्तृतं ज्ञानम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]. \n\nयदि इच्छति, तर्हि अत्रापि [$1 view this revision] द्रष्टुं शक्नोति ।",
"rev-deleted-text-view": "एतस्य पृष्ठस्य संस्करणम् <strong>अपाकृतमस्ति</strong> ।\nविस्तृतं ज्ञानम् अत्र प्राप्तुं शक्नोति... [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
@@ -727,8 +749,8 @@
"rev-delundel": "दृश्यताम्/गोप्यताम्",
"rev-showdeleted": "दर्श्यताम्",
"revisiondelete": "संस्करणानि निष्कासयतु/पुनस्स्थापयतु",
- "revdelete-nooldid-title": "अयोग्यलक्ष्यस्य संशोधनम्",
- "revdelete-nooldid-text": "एतत् कार्यं कर्तुं भवता/भवत्या लक्ष्य न निर्धारितम् एतत् संस्करणं न भवेत् वा । भवान्/भवती एतत् संस्करणं निगूढितुम् प्रयतति इत्यपि शक्यम् ।",
+ "revdelete-nooldid-title": "अयोग्यलक्ष्यस्य संस्करणम्",
+ "revdelete-nooldid-text": "एतत् कार्यं कर्तुं भवता/भवत्या लक्ष्यं न निर्धारितम् एतत् संस्करणं न भवेत् वा । भवान्/भवती एतत् संस्करणं निगूहितुम् प्रयतति इत्यपि शक्यम् ।",
"revdelete-no-file": "निर्दिष्टा सञ्चिका न विद्यते ।",
"revdelete-show-file-confirm": "$2 दिनाङ्कस्य $3 समयपर्यन्तस्य \"<nowiki>$1</nowiki>\" इत्यस्याः अपाकृतसञ्चिकायाः संस्करणाऽऽवलिं भवान्/भवती निश्चयेन द्रष्टुम् ईप्सति ?",
"revdelete-show-file-submit": "आम्",
@@ -738,19 +760,20 @@
"revdelete-text-text": "पृष्ठस्य इतिहासे अधुनापि अपाकृतानि संस्करणानि द्रष्टुं शक्यन्ते । परन्तु सामान्ययोजकेभ्यः तत्र परिवर्तनम् अशक्यम् ।",
"revdelete-text-file": "सञ्चिकायाः इतिहासे अधुनापि अपाकृतानां सञ्चिकानां संस्करणानि द्रष्टुं शक्यन्ते । परन्तु सामान्ययोजकेभ्यः तत्र परिवर्तनम् अशक्यम् ।",
"logdelete-text": "संरक्षिताऽऽवलीनां(log) संस्करणानि संरक्षिताऽऽवल्यां द्रष्टुं शक्यन्ते । परन्तु सामान्ययोजकेभ्यः तत्र परिवर्तनम् अशक्यम् ।",
- "revdelete-confirm": "एतस्याः [[{{MediaWiki:Policy-url}}|नीतेः]] अन्तर्गतं भवता/भवत्या एतत् कार्यं गभीरतया क्रियमाणम् अस्ति इत्यस्य पुष्टतां करोतु ।",
- "revdelete-suppress-text": "<strong>केवलं</strong> निम्नकारणेभ्यः निषेधः योग्यः....\n१ भयोत्पादकमाहिती स्यात्\n२ वैयक्तिकमाहिती स्यात्\n३ <em>गृहसङ्केतः, दूरभाषसङ्केतः, राष्ट्रियपरिचयपत्रस्य अङ्कः इत्यादीनि माहितयः स्युः ।</em>",
- "revdelete-legend": "दृश्यप्रतिबन्धं निश्चितं करोतु",
- "revdelete-hide-text": "संस्करणस्थं लेखनं (text)",
+ "revdelete-text-others": "यावत्पर्यन्तम् अतिरिक्तप्रतिबन्धस्य निर्धारणं न भविष्यति, तावत् अन्ये प्रशासकाः अपि गूहितविषयं दृष्टं पारयन्ति, तं पुनस्थापयितुम् अपि शक्नुवन्ति ।",
+ "revdelete-confirm": "एतस्याः [[{{MediaWiki:Policy-url}}|नीतेः]] अन्तर्गततया भवता/भवत्या एतत् कार्यं गभीरतया क्रियमाणम् अस्ति इत्यस्य पुष्टतां करोतु ।",
+ "revdelete-suppress-text": "<strong>केवलं</strong> निम्नकारणेभ्यः निषेधः योग्यः....\n१ भयोत्पादकसूचनाधारः स्यात्\n२ वैयक्तिकसूचनाधारः स्यात्\n३ <em>गृहसङ्केतः, दूरभाषसङ्केतः, राष्ट्रियपरिचयपत्रस्य अङ्कः इत्यादयः सूचनाधाराः स्युः ।</em>",
+ "revdelete-legend": "दृश्यप्रतिबन्धः निश्चीयताम्",
+ "revdelete-hide-text": "संस्करणस्थः पाठः (text)",
"revdelete-hide-image": "सञ्चिकाधेयं गोप्यताम्",
- "revdelete-hide-name": "प्रक्रियां, लक्ष्यं च गोप्यताम्",
- "revdelete-hide-comment": "सम्पादनसारं गोप्यताम्",
+ "revdelete-hide-name": "परिमितयः (parameters), लक्ष्यं च गोप्यताम्",
+ "revdelete-hide-comment": "सम्पादनसारः गोप्यताम्",
"revdelete-hide-user": "योजकस्य प्रयोकतृनाम/अन्तर्जालसंविद् (IP)",
- "revdelete-hide-restricted": "प्रबन्धकेभ्यः, अन्येभ्यश्च माहिती गोप्यताम्",
+ "revdelete-hide-restricted": "प्रबन्धकेभ्यः, अन्येभ्यश्च सूचनाधारः गोप्यताम्",
"revdelete-radio-same": "(मा परिवर्त्यताम्)",
- "revdelete-radio-set": "निगूढितम्",
+ "revdelete-radio-set": "निगूहितम्",
"revdelete-radio-unset": "प्रत्यक्षम्",
- "revdelete-suppress": "प्रबन्धकेभ्यः, अन्येभ्यश्च माहिती गोप्यताम्",
+ "revdelete-suppress": "प्रबन्धकेभ्यः, अन्येभ्यश्च सूचनाधारः गोप्यताम्",
"revdelete-unsuppress": "पुनस्स्थापितसंस्करणानां प्रतिबन्धः अपाक्रियताम्",
"revdelete-log": "कारणम् :",
"revdelete-submit": "{{PLURAL:$1|चित-संस्करणे|चित-संस्करणेषु}} प्रयोगं क्रियताम्",
@@ -761,42 +784,42 @@
"revdel-restore": "दृश्यताम्/गोप्यताम्",
"pagehist": "पृष्ठस्य इतिहासः",
"deletedhist": "अपाकृतः इतिहासः",
- "revdelete-hide-current": "$2 दिनाङ्कस्य $1 समये कस्यापि वस्तोः निगूढनकार्यं न सफलीभीतम् । एतत् सद्यःकालीनं संस्करणमस्ति । एतत् निगूढितुं शक्यते ।",
- "revdelete-show-no-access": "$2 दिनाङ्कस्य $1 समयस्य वस्तुनि दोषः दृष्टः । तत् वस्तुः निषिद्धावल्याम् अस्ति । भवान्/भवती तस्य परिवर्तनं कर्तुं न शक्नोति ।",
- "revdelete-modify-no-access": "$2 दिनाङ्कस्य $1 समयस्य परिवर्तितवस्तुनि दोषः दृष्टः । तत् वस्तुः निषिद्धावल्याम् अस्ति । भवान्/भवती तस्य परिवर्तनं कर्तुं न शक्नोति ।",
+ "revdelete-hide-current": "$2 दिनाङ्कस्य $1 समये कस्यापि वस्तोः निगूहितं कार्यं न सफलितम् । एतत् सद्यः कालीनं संस्करणमस्ति । एतत् निगूहितुं शक्यते ।",
+ "revdelete-show-no-access": "$2 दिनाङ्कस्य $1 समयस्य वस्तुनि दोषः दृष्टः । तत् वस्तु निषिद्धावल्याम् अस्ति । भवान्/भवती तत् परिवर्तितुं न शक्नोति ।",
+ "revdelete-modify-no-access": "$2 दिनाङ्कस्य $1 समयस्य परिवर्तितवस्तुनि दोषः दृष्टः । तत् वस्तु निषिद्धावल्याम् अस्ति । भवान्/भवती तत् परिवर्तितुं न शक्नोति ।",
"revdelete-modify-missing": "ID $1 इत्यस्य परिवर्तने दोषः : एतत् दत्तांशे न प्राप्तम् !",
"revdelete-no-change": "'''पूर्वसूचना :''' $2, $1 इत्यस्मिन् याचितवस्तूनि पूर्वस्मादेव विद्यन्ते ।",
"revdelete-concurrent-change": "$2 दिनाङ्कस्य $1 समयस्य परिवर्तनेषु दोषः दृष्टः । अस्य पृष्ठस्य यदा भवान्/भवती सम्पादनं करोति स्म, तदा अन्य कोऽपि अत्र परिवर्तनम् अकरोत् । अतः परिवर्तनस्य इतिहासे अन्यस्य नाम दृश्यते । \nकृपया स्वस्य संरक्षिताऽवलिं पश्यतु ।",
- "revdelete-only-restricted": "$2 दिनाङ्कस्य $1 समयस्य निगूढनकार्ये दोषः दृष्टः । भावान्/भवती दृश्यता-विकल्पे परिवर्तनं अकृत्वा प्रबन्धकेभ्यः एतत् परिवर्तनं निगूढितुं न शक्नोति ।",
- "revdelete-reason-dropdown": "* अपाकरणस्य सामान्यकारणानि\n** प्रतिकृत्यधिकारस्य उल्लङ्घनम्\n** अयोग्या टिप्पणी वैयक्तिकमाहिती वा\n** अयोग्यं सभ्यनाम\n** हानिकारकमाहिती",
+ "revdelete-only-restricted": "$2 दिनाङ्कस्य $1 समयस्य निगूढनकार्ये दोषः दृष्टः । भावान्/भवती दृश्यता-विकल्पे परिवर्तनं अकृत्वा प्रबन्धकेभ्यः एतत् परिवर्तनं निगूहितुं न शक्नोति ।",
+ "revdelete-reason-dropdown": "* अपाकरणस्य सामान्यकारणानि\n** प्रतिकृत्यधिकारस्य उल्लङ्घनम्\n** अयोग्या टिप्पणी वैयक्तिकसूचनाधारः वा\n** अयोग्यं योजकनाम\n** हानिकारकसूचनाधारः",
"revdelete-otherreason": "अपरं/अतिरिक्तं कारणम् :",
"revdelete-reasonotherlist": "अन्यानि कारणानि",
- "revdelete-edit-reasonlist": "सम्पादनस्य अपाकरणाय कारणानि",
+ "revdelete-edit-reasonlist": "सम्पादनस्य अपाकरणकारणानि",
"revdelete-offender": "संस्करणकर्ता",
"suppressionlog": "निग्रहणानां संरक्षणाऽऽवलिः",
- "suppressionlogtext": "अधः अवरोधितपृष्ठानाम्, अपाकरणीयपृष्ठानां च आवलिः अस्ति । एषा आवलिः प्रबन्धकेभ्यः निगूढिता अस्ति ।\nनूतनानाम् अवरोधितपृष्ठानाम्, अपाकरणीयपृष्ठानां च आवलिं द्रष्टुम् [[Special:BlockList|अवरोधितावलिः]] पश्यतु ।",
- "mergehistory": "पृष्ठयोः इतिहासस्य विलीनिकरणं करोतु",
- "mergehistory-header": "एकस्य पृष्ठस्य इतिहासेन सह नवीनपृष्ठस्य इतिहासम् एकत्रीकर्तुम् एतत् पृष्ठं साहाय्यं करोति । अत्र इतिहासः क्रमशः भवेत् इति अवधेयम् ।",
- "mergehistory-box": "द्वयोः पृष्ठयोः इतिहासः एकत्रीक्रियताम् :",
+ "suppressionlogtext": "अधः अवरोधितपृष्ठानाम्, अपाकरणीयपृष्ठानां च आवलिः अस्ति । एषा आवलिः प्रबन्धकेभ्यः निगूहिता अस्ति ।\nनूतनानाम् अवरोधितपृष्ठानाम्, अपाकरणीयपृष्ठानां च आवलिं द्रष्टुम् [[Special:BlockList|अवरोधितावलिं]] पश्यतु ।",
+ "mergehistory": "पृष्ठयोः इतिहासाः संयोज्यन्ताम्",
+ "mergehistory-header": "एकस्य पृष्ठस्य इतिहासेन सह नवीनपृष्ठस्य इतिहासम् क्रोडीकर्तुम् एतत् पृष्ठं साहाय्यं करोति । अत्र इतिहासः क्रमशः भवेत् इति अवधेयम् ।",
+ "mergehistory-box": "द्वयोः पृष्ठयोः इतिहासः क्रोडीक्रियताम् :",
"mergehistory-from": "स्रोतपृष्ठम् :",
"mergehistory-into": "लक्षितपृष्ठम् :",
"mergehistory-list": "विलीनयोग्यसम्पादनस्य इतिहासः",
- "mergehistory-merge": "[[:$1]] इत्यस्य निम्नसंस्करणानि [[:$2]] इत्यनेन सह संयोजयितुं शक्यन्ते । निर्दिष्टकालस्य, तस्मात् पूर्वतनस्य च संस्करणानि एकत्रीकर्तुं रेडियो-कुड्मलस्य उपयोगं करोतु । \nसूचनायाः, सञ्चरणस्य (navigation) च उपयोगकर्तारः एते स्तम्भाः पुनः पूर्ववत् भविष्यन्ति ।",
+ "mergehistory-merge": "[[:$1]] इत्यस्य निम्नसंस्करणानि [[:$2]] इत्यनेन सह संयोजयितुं शक्यन्ते । निर्दिष्टकालस्य, तस्मात् पूर्वतनस्य च संस्करणानि क्रोडीकर्तुं रेडियो-कुड्मलस्य उपयोगं करोतु । \nसूचनायाः, सञ्चरणस्य (navigation) च उपयोगकर्तारः एते स्तम्भाः पुनः पूर्ववत् भविष्यन्ति ।",
"mergehistory-go": "विलीनयोग्यसम्पादनानि दर्शयतु",
- "mergehistory-submit": "संस्करणानि संयोजयतु ।",
+ "mergehistory-submit": "संस्करणानि विलीनीकरोतु ।",
"mergehistory-empty": "अवतरणानि संयोजयितुं न शक्यते ।",
"mergehistory-success": "[[:$1]] इत्यस्य $3 {{PLURAL:$3|संस्करणं|संस्करणानि}} [[:$2]] इत्यत्र स्वस्ति (successfully) विलिनीकृतानि ।",
"mergehistory-fail": "इतिहासविलीनता नैव शक्यते । पृष्ठसम्बद्धानि, कालसम्बद्धानि विकल्पानि पुनः पश्यतु ।",
+ "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-comment": "[[:$1]] इत्येनं [[:$2]] इत्यस्मिन् विलीनं कृतम् : $3",
+ "mergehistory-autocomment": "[[:$1]] इत्येनं [[:$2]] इत्यस्मिन् विलीनीकृतम्",
+ "mergehistory-comment": "[[:$1]] इत्येतत् [[:$2]] इत्यस्मिन् विलीनीकृतम् : $3",
"mergehistory-same-destination": "मूलपृष्ठ-लक्षितपृष्ठे समाने न भवेताम् ।",
"mergehistory-reason": "कारणम् :",
"mergelog": "संस्करणं विलीयताम्",
- "pagemerge-logentry": "[[:$1]] इत्येनं [[:$2]] इत्यस्मिन् विलीनं कृतम् ($3 परिवर्तनानि)",
"revertmerge": "पृथक्क्रियताम्",
"mergelogpagetext": "येषां पृष्ठानाम् इतिहासः अधुना एव विलीनीकृतः, तेषां पृष्ठानाम् आवलिः अधः प्रदत्ता ।",
"history-title": "\"$1\" इत्यस्य आवर्तनेतिहासः",
@@ -811,7 +834,7 @@
"diff-multi-sameuser": "(अनेन योजकेनैव {{PLURAL:$1|कृतम् एकं संस्करणं न प्रदर्श्यते|क्रितानि $1 संस्करणानि न प्रदर्श्यन्ते}})",
"diff-multi-otherusers": "({{PLURAL:$2|एकेन अन्ययोजकेन|$2 योजकैः}} {{PLURAL:$1|कृतम् एकं संस्करणं न प्रदर्श्यते|क्रितानि $1 संस्करणानि न प्रदर्श्यन्ते}})",
"diff-multi-manyusers": "{{PLURAL:$2|एकेन योजकेन कृतं|$2 योजकैः कृतानि}} ({{PLURAL:$1|मध्यस्थम् एकं संस्करणं न प्रदर्शितम् ।|मध्यस्थानि $1 परिवर्तनानि न प्रदर्शितानि ।}})",
- "difference-missing-revision": "एतस्य भेदस्य {{PLURAL:$2|एकं संस्करणं|$2 संस्करणानि}} ($1) न {{PLURAL:$2|प्राप्तम्|प्राप्तानि}} ।\n\nअपाकृतानां पृष्ठानां संस्करणानाम् अन्वेषणकाले प्रायशः एतादृशं भवति । अधिकं ज्ञातुं [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलि)] पश्यतु ।",
+ "difference-missing-revision": "एतस्य भेदस्य {{PLURAL:$2|एकं संस्करणं|$2 संस्करणानि}} ($1) न {{PLURAL:$2|प्राप्तम्|प्राप्तानि}} ।\n\nअपाकृतानां पृष्ठानां संस्करणानाम् अन्वेषणकाले प्रायशः एतादृशं भवति । अधिकं ज्ञातुं [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} अपाकृतानाम् आवलिं] पश्यतु ।",
"searchresults": "अन्वेषणपरिणामाः",
"searchresults-title": "\"$1\" कृते अन्वेषणपरिणामाः",
"titlematches": "पृष्ठशीर्षकं मेलः (matches)",
@@ -828,7 +851,7 @@
"searchprofile-articles": "विषयसहितानि पृष्ठानि",
"searchprofile-images": "माध्यमसमुच्चयः",
"searchprofile-everything": "सर्वम्",
- "searchprofile-advanced": "प्रगतम्",
+ "searchprofile-advanced": "उन्नतम्",
"searchprofile-articles-tooltip": "$1 स्थले अन्विष्यताम्",
"searchprofile-images-tooltip": "सञ्चिकाः अन्विष्यन्ताम्",
"searchprofile-everything-tooltip": "सर्वत्र अन्विष्यताम् (चर्चापृष्ठानि अपि)",
@@ -837,6 +860,7 @@
"search-result-category-size": "{{PLURAL:$1|1 योजकः|$1 योजकाः}} ({{PLURAL:$2|1 उपवर्गः|$2 उपवर्गाः}}, {{PLURAL:$3|1 सञ्चिका|$3 सञ्चिकाः}})",
"search-redirect": "($1 तः अनुप्रेषितम्)",
"search-section": "(विभागः $1)",
+ "search-category": "(वर्गः $1)",
"search-file-match": "(सञ्चिकापाठेन सह मेलः अस्ति)",
"search-suggest": "किं भवतः/भवत्याः आशयः एवमस्ति : $1",
"search-interwiki-caption": "बन्धु-प्रकल्पाः",
@@ -847,33 +871,39 @@
"searchall": "सर्वाणि",
"showingresults": "#'''$2''' क्रमाङ्कात् आरभ्य {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
"showingresultsinrange": "#'''$2''' क्रमाङ्कात् आरभ्य #'''$3''' क्रमाङ्कपर्यन्तं {{PLURAL:$1|'''$1''' परिणामः अधः प्रदर्शितः|'''$1''' परिणामाः अधः प्रदर्शिताः}}।",
- "showingresultsheader": "'''$4''' इत्येतस्मै {{PLURAL:$5|'''$1''' परिणामः '''$3''' इत्येषु|'''$1 - $2''' परिणामाः '''$3''' इत्येषु}}",
- "search-nonefound": "भवतः/भवत्याः अपेक्षानुगुणं परिणामः न विद्यते ।",
- "powersearch-legend": "प्रगतम् अन्वेषणम्",
+ "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> इत्येतेभ्यः <strong>$1</strong> परिणामः|<strong>$3</strong> इत्येतेभ्यः परिणामाः <strong>$1 - $2</strong>}}",
+ "search-nonefound": "भवतः/भवत्याः अपेक्षानुगुणः परिणामः न विद्यते ।",
+ "powersearch-legend": "उन्नतम् अन्वेषणम्",
"powersearch-ns": "नामाकाशेषु अन्विष्यताम् :",
"powersearch-togglelabel": "परीक्ष्यताम् :",
"powersearch-toggleall": "सर्वम्",
"powersearch-togglenone": "नैकमपि",
+ "powersearch-remember": "भविष्यस्य अन्वेषणेभ्यः एतत् चयनं स्मरतु",
"search-external": "बाह्यान्वेषणम्",
- "searchdisabled": "{{SITENAME}} इत्यत्र अन्वेषणं कर्तुं न शक्यते ।\nतावता गुगल-माध्यमेन अन्वेषणं कर्तुं शक्यते ।\n'''पूर्वसूचना'''गुगल-जालस्थाने {{SITENAME}} इत्यस्य पुरातना सूचना भवितुम् अर्हति ।",
+ "searchdisabled": "{{SITENAME}} इत्यत्र अन्वेषणं कर्तुं न शक्यते ।\nतावता गूगल-माध्यमेन अन्वेषणं कर्तुं शक्यते ।\n'''पूर्वसूचना'''गूगल-जालस्थाने {{SITENAME}} इत्यस्य पुरातना सूचना भवितुम् अर्हति ।",
"search-error": "$1 इति अन्वेषणकाले दोषः प्राप्तः :",
"preferences": "इष्टतमानि",
"mypreferences": "इष्टतमानि",
- "prefs-edits": "सम्पादनानां सख्याः",
- "prefsnologintext2": "स्वस्य इष्टतमानि परिवर्तितुं कृपया $1 इत्येनं नुदतु ।",
+ "prefs-edits": "सम्पादनानां सङ्ख्याः :",
+ "prefsnologintext2": "स्वस्य इष्टतमानि परिवर्तितुं कृपया प्रविश्यताम् ।",
"prefs-skin": "त्वक्",
"skin-preview": "प्राग्दृश्यम्",
"datedefault": "इष्टतमानि न सन्ति",
"prefs-labs": "प्रयोगशालावैशिष्ट्यम्",
- "prefs-user-pages": "योजतपृष्ठानि",
+ "prefs-user-pages": "योजकपृष्ठानि",
"prefs-personal": "योजकस्य विवरणम्",
"prefs-rc": "सद्यो जातानि परिवर्तनानि",
- "prefs-watchlist": "अवेक्षणावलिः",
- "prefs-watchlist-days": "अनेक्षणावल्यां दर्शनियानि दिनानि :",
+ "prefs-watchlist": "अवेक्षणाऽऽवलिः",
+ "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-watchlist-edits": "अस्यां विस्तृत-अवेक्षणावल्यां प्रदर्शयितुं महत्तमपरिवर्तनानां सङ्ख्या :",
+ "prefs-watchlist-edits": "अस्यां विस्तृत-अवेक्षणाऽऽवल्यां प्रदर्शयितुं महत्तमपरिवर्तनानां सङ्ख्या :",
"prefs-watchlist-edits-max": "अधिकतमसङ्ख्याः : १०००",
- "prefs-watchlist-token": "अवेक्षणावल्याः प्रतीकः",
+ "prefs-watchlist-token": "अवेक्षणाऽऽवल्याः प्रतीकः :",
"prefs-misc": "विविधम्",
"prefs-resetpass": "कूटशब्दः परिवर्त्यताम्",
"prefs-changeemail": "ई-पत्रसङ्केतः परिवर्त्यताम्",
@@ -886,63 +916,63 @@
"rows": "पङ्कतयः :",
"columns": "स्तम्भाः :",
"searchresultshead": "अन्वेषणम्",
- "stub-threshold": "<a href=\"#\" class=\"stub\">stub link</a> इत्यस्य प्रारूपणस्य (formatting) कृते प्रारम्भिकसोपान formatting (bytes):",
+ "stub-threshold": "<a href=\"#\" class=\"stub\">stub link</a> इत्यस्य प्रारूपणस्य (formatting) कृते प्रारम्भिकसोपानम् (अष्टकानि) :",
"stub-threshold-disabled": "निष्क्रियः",
"recentchangesdays": "नूतनपरिवर्तनेषु प्रदर्शनीयानि दिनानि :",
"recentchangesdays-max": "$1 अधिकतम{{PLURAL:$1|दिनं|दिनानि}}",
"recentchangescount": "फलकेषु सामान्यतया यानि परिवर्तनानि अभवन्, तेषां सङ्ख्या :",
- "prefs-help-recentchangescount": "अत्र नूतनपरिवर्तनानि, पृष्ठेतिहासः, संरक्षितावल्यश्च अन्तर्भवन्ति ।",
- "prefs-help-watchlist-token2": "भवतः/भवत्याः अवेक्षणावल्याः वेब-करस्य (web feed) गुप्तकुञ्चिका अस्त्येषा । \nएषा कुञ्चिका यस्य पार्श्वे भविष्यति, सः तव अवेक्षणावलिं द्रष्टुं प्रभविष्यति । अतः एनां गुप्ततया स्थाप्यताम् ।\n[[Special:ResetTokens|गुप्तकुञ्चिकां परिवर्तयितुम् अत्र नुद्यताम् ।]]।",
+ "prefs-help-recentchangescount": "अत्र नूतनपरिवर्तनानि, पृष्ठेतिहासः, संरक्षिताऽऽवल्यश्च अन्तर्भवन्ति ।",
+ "prefs-help-watchlist-token2": "भवतः/भवत्याः अवेक्षणाऽऽवल्याः जालकरस्य (web feed) गुप्तकुञ्चिका अस्त्येषा । \nएषा कुञ्चिका यस्य पार्श्वे भविष्यति, सः भवतः/भवत्याः अवेक्षणाऽऽवलिं द्रष्टुं प्रभविष्यति । अतः एनां गुप्ततया स्थाप्यताम् ।\n[[Special:ResetTokens|गुप्तकुञ्चिकां परिवर्तयितुम् अत्र नुद्यताम् ।]]।",
"savedprefs": "भवतः/भवत्याः इष्टतमानि रक्षितानि ।",
"timezonelegend": "समयवलयः (time zone) :",
- "localtime": "स्थानीयसमय:",
+ "localtime": "स्थानीयसमयः :",
"timezoneuseserverdefault": "विकि-मूलविकल्पान् स्थापयन्तु ($1)",
- "timezoneuseoffset": "अन्यम् (समयान्तरं निर्दिशतु )",
+ "timezoneuseoffset": "अन्यम् (समयान्तरं निर्दिशतु)",
"servertime": "वितरकसमयः :",
"guesstimezone": "गवेक्षणे पूरयतु",
"timezoneregion-africa": "कालद्वीपः",
"timezoneregion-america": "अमेरिका",
"timezoneregion-antarctica": "अण्टार्कटिका",
- "timezoneregion-arctic": "आर्कटिक",
+ "timezoneregion-arctic": "आर्कटिक्",
"timezoneregion-asia": "जम्बुमहाद्वीपः",
- "timezoneregion-atlantic": "एटलाण्टिक-महासागरः",
+ "timezoneregion-atlantic": "एट्लाण्टिक्-महासागरः",
"timezoneregion-australia": "ऑस्ट्रेलिया",
"timezoneregion-europe": "यूरोप",
- "timezoneregion-indian": "हिन्द-महासागरः",
- "timezoneregion-pacific": "प्रशान्त-महासागरः",
- "allowemail": "अन्ययोजकैः प्रेषितानि ई-पत्राणि अनुमतिं ददातु",
+ "timezoneregion-indian": "हिन्दमहासागरः",
+ "timezoneregion-pacific": "प्रशान्तमहासागरः",
+ "allowemail": "अन्ययोजकैः प्रेषितेभ्यः ई-पत्रेभ्यः अनुमतिं ददातु",
"prefs-searchoptions": "अन्विष्यताम्",
"prefs-namespaces": "नामाकाशाः",
"default": "पूर्वनिर्दिष्टम्",
- "prefs-files": "सञ्चिका:",
- "prefs-custom-css": "स्वानुकुलसम्पादितं CSS",
- "prefs-custom-js": "स्वानुकुलसम्पादितं JavaScript",
+ "prefs-files": "सञ्चिकाः",
+ "prefs-custom-css": "स्वानुकूलसम्पादितं CSS",
+ "prefs-custom-js": "स्वानुकूलसम्पादितं JavaScript",
"prefs-common-css-js": "सर्वासां त्वचां (of skins) कृते CSS/JavaScript:",
"prefs-reset-intro": "भवान्/भवती अस्य पृष्ठस्य साहाय्येन स्वस्य इष्टतमविकल्पान् मूलविकि-विकल्पसदृशं स्थापयितुं (कर्तुं) शक्नोति ।\nपरन्तु ततः भवान्/भवती पूर्ववत् स्थितिं प्राप्तुं न शक्ष्यति ।",
"prefs-emailconfirm-label": "ई-पत्रं दृढीक्रियताम् :",
"youremail": "ई-पत्रसङ्केतः :",
"username": "{{GENDER:$1|योजकनाम}} :",
- "prefs-memberingroups": "{{PLURAL:$1|समूहस्य|समूहानां}} {{GENDER:$2|सदस्यः/सदस्याः}} :",
- "prefs-registration": "पञ्जीकरणस्य कालः :",
+ "prefs-memberingroups": "{{PLURAL:$1|समूहस्य|समूहानां}} {{GENDER:$2|योजकः/योजकाः}} :",
+ "prefs-registration": "पञ्जीकरणकालः :",
"yourrealname": "वास्तविकनाम :",
"yourlanguage": "भाषा :",
"yourvariant": "भाषायाः सामग्रीवैविध्यम् :",
- "prefs-help-variant": " विक्यां प्रदर्शितुं भवति ।",
+ "prefs-help-variant": "एतस्य विकि-जालस्य पृष्ठगतविषयेषु भवता/भवत्या इष्टः प्रकारः वर्णविन्यासो वा प्रदर्शितुम् ।",
"yournick": "नूतनहस्ताक्षरम् :",
"prefs-help-signature": "सम्भाषणपृष्ठेषु टिप्पणीं लिखित्वा अन्ते \"<nowiki>~~~~</nowiki>\" लिखतु । अनेन स्वस्य हस्ताक्षरेण सह टिप्पणीलेखनकालस्यापि उल्लेखः भविष्यति ।",
- "badsig": "अयोग्यं प्रारूपरहितं (raw) हस्ताक्षरम् ।\nHTML चिह्नं पश्यतु ।",
+ "badsig": "प्रारूपरहितं (raw) अयोग्यं हस्ताक्षरम् ।\nHTML चिह्नानि पश्यतु ।",
"badsiglength": "हस्ताक्षरं बहुलम्बमानम् अस्ति ।\nहस्ताक्षरं $1 {{PLURAL:$1|अक्षरात्|अक्षरेभ्यः}} दीर्घं न भवेत् ।",
"yourgender": "स्वपरिचयं कथं दातुम् इच्छति ?",
- "gender-unknown": "स्वपरिचयं दातुं नेच्छामि",
- "gender-male": "सः विकि-पृष्ठानि सम्पादयति",
- "gender-female": "सा विकि-पृष्ठानि सम्पादयति",
+ "gender-unknown": "स्वपरिचयं दातुं नेच्छामि ।",
+ "gender-male": "सः विकि-पृष्ठानि सम्पादयति ।",
+ "gender-female": "सा विकि-पृष्ठानि सम्पादयति ।",
"prefs-help-gender": "एतत् विवरणम् ऐच्छिकम् अस्ति । एतस्मिन् तन्त्रांशे\nलिङ्गाधारेण भवतः/भवत्याः सम्बोधनार्थम् अस्योपयोगः भवति ।\nएतत् विवरणं सार्वजनिकं भविष्यति ।",
"email": "ई-पत्रम्",
"prefs-help-realname": "वास्तविकनाम ऐच्छकम् अस्ति । भवान्/भवती एनं विकल्पं समर्थयति चेत्, भवतः/भवत्याः योगदानश्रेयस्य उल्लेखसमये अस्य उपयोगः भविष्यति ।",
- "prefs-help-email": "ई-पत्रसङ्केतः अनिवार्यः नास्ति । किन्तु कूटशब्दः विस्मर्यते चेत् तस्य परिवर्तनाय आवश्यकः भवति ।",
- "prefs-help-email-others": "योजकपृष्ठ-सम्भाषणपृष्ठयोः माध्यमेन, ई-पत्रमाध्यमेन वा अन्ये योजकाः भवतः/भवत्याः सम्पर्कं कर्तुं शक्नुयुः ।\nसम्पर्केऽस्मिन् भवतः/भवत्याः ई-पत्रसङ्केतम् अन्ययोजकाः ज्ञातुं न प्रभवतन्ति ।",
+ "prefs-help-email": "ई-पत्रसङ्केतः अनिवार्यः नास्ति । किन्तु कूटशब्दः विस्मर्यते चेत्, तस्य परिवर्तनाय आवश्यकः भवति ।",
+ "prefs-help-email-others": "योजकपृष्ठ-सम्भाषणपृष्ठयोः माध्यमेन, ई-पत्रमाध्यमेन वा अन्ये योजकाः भवतः/भवत्याः सम्पर्कं कर्तुं शक्नुयुः ।\nसम्पर्केऽस्मिन् भवतः/भवत्याः ई-पत्रसङ्केतम् अन्ययोजकाः ज्ञातुं न प्रभवन्ति ।",
"prefs-help-email-required": "ई-पत्रसङ्केतः अनिवार्यः ।",
- "prefs-info": "मूलसूचनाः",
+ "prefs-info": "मूलसूचना",
"prefs-i18n": "अन्ताराष्ट्रिकरणम्",
"prefs-signature": "हस्ताक्षरम्",
"prefs-dateformat": "दिनाङ्कस्य प्रारूपः",
@@ -959,8 +989,9 @@
"prefs-tokenwatchlist": "स्तोकम् (token)",
"prefs-diffs": "अन्तरम्",
"prefs-help-prefershttps": "आगामिप्रेवेशकाले एतत् परिवर्तनं सक्रियं भवष्यति ।",
- "prefs-tabs-navigation-hint": "परामर्शः : पट्टीकयोः (tabs) मध्ये गमनागमनं कर्तुं भवान्/भवती वामतीरकुड्मलस्य, दक्षिणतीरकुण्मलस्य च उपयोगं कर्तुं शक्नोति ।",
- "email-address-validity-valid": "ई-पत्रसङ्केतः मान्यः अस्ति इति प्रतियते",
+ "prefswarning-warning": "स्वस्य इष्टतमानि-पुष्ठे भवता/भवत्या यत्, परिवर्तं कृतं, तत् एतावता न रक्षितम् ।\n\"$1\" एतत् अनुदित्वा यदि भवान्/भवती एतत् पृष्ठं त्यक्ष्यति, तर्हि परिवर्तनं रक्षितं न भविष्यति ।",
+ "prefs-tabs-navigation-hint": "परामर्शः : प्लवनयोः (tabs) मध्ये गमनागमनं कर्तुं भवान्/भवती वामतीरकुड्मलस्य, दक्षिणतीरकुण्मलस्य च उपयोगं कर्तुं शक्नोति ।",
+ "email-address-validity-valid": "ई-पत्रसङ्केतः मान्यः अस्ति इति प्रतीयते",
"email-address-validity-invalid": "मान्यः ई-पत्रसङ्केतः लिख्यताम्",
"userrights": "योजकाधिकारस्य प्रबन्धनम्",
"userrights-lookup-user": "योजकसमूहस्य प्रबन्धनं करोतु",
@@ -970,13 +1001,13 @@
"userrights-editusergroup": "योजकसमूहः सम्पाद्यताम्",
"saveusergroups": "योजकसमूहः रक्ष्यताम्",
"userrights-groupsmember": "अस्य सदस्यः :",
- "userrights-groupsmember-auto": "निम्न{{PLURAL:$1|समूहस्य|समूहानाम्}} अन्तर्निहिः सदस्यः :",
+ "userrights-groupsmember-auto": "निम्न{{PLURAL:$1|समूहस्य|समूहानाम्}} अन्तर्निहितः सदस्यः :",
"userrights-groups-help": "अस्य सदस्यस्य समूहसदस्यत्वं परिवर्तयितुं शक्यते । \n* अङ्कनपेटिका (check box) अङ्किता चेत्, योजकः अस्य समूहस्य सदस्यः अस्ति ।\n* अङ्कनपेटिका अनङ्किता चेत्, योजकः अस्य समूहस्य सदस्यः नास्ति ।\n* एकवारं समूहः योजितः अपाकृतः वा चेत्, पुनः पूर्ववत् कर्तुं न शक्यते इति * चिह्नं सूचयति ।",
"userrights-reason": "कारणम् :",
"userrights-no-interwiki": "अन्यविकि-जालस्थानेषु योजकाधिकारं सम्पादयितुं ते अनुमतिः नास्ति ।",
- "userrights-nodatabase": "$1 दत्तांशनिधिः न विद्यते । अथवा तु सः स्थानीयः नास्ति ।",
- "userrights-nologin": "योजकान् अधिकारं दातुं प्रबन्धकत्वेन प्रवेशः आवश्यकः । [[Special:UserLogin|प्रविश्यताम्]]",
- "userrights-notallowed": "योजकेभ्यः अधिकारं दातम्, अपाकर्तुं च ते अनुमतिः नास्ति ।",
+ "userrights-nodatabase": "$1 दत्तांशनिधिः न विद्यते अथवा तु सः स्थानीयः नास्ति ।",
+ "userrights-nologin": "योजकेभ्यः अधिकारं दातुं प्रबन्धकत्वेन प्रवेशः आवश्यकः । [[Special:UserLogin|प्रविश्यताम्]]",
+ "userrights-notallowed": "योजकेभ्यः अधिकारं दातुं, योजकान् अपाकर्तुं च ते अनुमतिः नास्ति ।",
"userrights-changeable-col": "परिवर्तनार्हाः समूहाः",
"userrights-unchangeable-col": "परिवर्तनम् अनर्हाः समूहाः",
"userrights-conflict": "सदस्याधिकारस्य परिवर्तनेषु अन्तर्विरोधः अस्ति ! कृपया स्वकृतानि परिवर्तनानि पुनरवलोक्य संरक्ष्यताम् ।",
@@ -1001,74 +1032,76 @@
"grouppage-sysop": "{{ns:project}}:प्रबन्धकाः",
"grouppage-bureaucrat": "{{ns:project}}:अधिकारिणः",
"grouppage-suppress": "{{ns:project}}:अलक्ष्यम्",
- "right-read": "पृष्ठानि पठ्यताम्",
- "right-edit": "पृष्ठानि सम्पाद्यताम्",
- "right-createpage": "पृष्ठानि निर्मियताम् ।(येषां सम्भाषणपृष्ठं न स्यात् ।)",
- "right-createtalk": "सम्भाषणपृष्ठानि निर्मियताम्",
- "right-createaccount": "नूतनप्रयोक्तृवृत्तान्तं रच्यताम्",
+ "right-read": "पृष्ठानि पठ्यन्ताम्",
+ "right-edit": "पृष्ठानि सम्पाद्यन्ताम्",
+ "right-createpage": "पृष्ठानि निर्मियन्ताम् ।(येषां सम्भाषणपृष्ठं न स्यात् ।)",
+ "right-createtalk": "सम्भाषणपृष्ठानि निर्मियन्ताम्",
+ "right-createaccount": "नूतनप्रयोक्तृवृत्तान्तं रच्यन्ताम्",
"right-minoredit": "लघुसम्पादनत्वेन अङ्कितं करोतु",
"right-move": "पृष्ठं चाल्यताम्",
"right-move-subpages": "उपपृष्ठैः सह पृष्ठं चालयतु",
- "right-move-rootuserpages": "मूलयोजकपुष्ठानि चाल्यताम्",
- "right-move-categorypages": "वर्गपृष्ठानि चाल्यताम्",
- "right-movefile": "सञ्चिकाः चाल्यताम्",
+ "right-move-rootuserpages": "मूलयोजकपुष्ठानि चाल्यन्ताम्",
+ "right-move-categorypages": "वर्गपृष्ठानि चाल्यन्ताम्",
+ "right-movefile": "सञ्चिकाः चाल्यन्ताम्",
"right-suppressredirect": "पृष्ठं यदा चालयति, तदा मूलपृष्ठात् प्रतिप्रेषणं मास्तु ।",
"right-upload": "उपारोहण(upload)सञ्चिकाः",
- "right-reupload": "वर्तमानसञ्चिकाः नवीनसञ्चिकाभिः परिवर्त्यताम्",
- "right-reupload-own": "अन्येन उपारोहिताः (upload) सञ्चिकाः नवीनसञ्चिकाभिः परिवर्त्यताम्",
- "right-reupload-shared": "विभक्तमाध्यमेन (shared media) स्थानीय-उपारोहिताः सञ्चिकाः नवीनसञ्चाकाभिः परिवर्त्यताम्",
- "right-upload_by_url": "सर्वासङ्केतात् (URL) उपारोहिताः सञ्चिकाः",
+ "right-reupload": "वर्तमानसञ्चिकाः नवीनसञ्चिकाभिः परिवर्त्यन्ताम्",
+ "right-reupload-own": "अन्येन उपारोहिताः (upload) सञ्चिकाः नवीनसञ्चिकाभिः परिवर्त्यन्ताम्",
+ "right-reupload-shared": "विभक्तमाध्यमेन (shared media) स्थानीय-उपारोहिताः सञ्चिकाः नवीनसञ्चाकाभिः परिवर्त्यन्ताम्",
+ "right-upload_by_url": "सार्वसङ्केतात् (URL) उपारोहिताः सञ्चिकाः",
"right-purge": "पृष्ठस्य उपस्मृतिं (cache) रिक्तीक्रियताम्",
"right-autoconfirmed": "सार्वसङ्केत(IP)आधारितेन मूल्यनियन्त्रणेन सह अस्य सम्बन्धः नास्ति",
"right-bot": "स्वसञ्चालितप्रणालित्वेन एतां स्वीक्रियताम्",
"right-nominornewtalk": "सम्भाषणपृष्ठस्य लघुपरिवर्तनानां विषये मा सूच्यताम्",
- "right-apihighlimits": "API प्रश्नेषु उन्नतसीमाः उपयोज्यताम्",
- "right-writeapi": "योग्यस्य API इत्यस्य उपयोगं करोतु",
- "right-delete": "पृष्ठानि अपाक्रियताम्",
+ "right-apihighlimits": "विदत्तसम्पर्कानुरूपविधेः (API) प्रश्नेषु उन्नतसीमाः उपयुज्यताम्",
+ "right-writeapi": "योग्यस्य विदत्तसम्पर्कानुरूपविधेः (API) उपयोगं करोतु",
+ "right-delete": "पृष्ठानि अपाक्रियन्ताम्",
"right-bigdelete": "दीर्घेतिहासयुक्तपृष्ठानि अपाक्रियताम्",
- "right-deletelogentry": "योग्यसंरक्षितावल्याः निवेशान् (entries) अपाक्रियताम्, अनपाक्रियतां च",
- "right-deleterevision": "योग्यपृष्ठस्य संस्करणानि अपाक्रियताम्",
- "right-deletedhistory": "अपाकृत-निवेशानाम् इतिहासं पश्यतु (तत्सम्बद्धपाठं विना)",
- "right-deletedtext": "अपाकृतपाठाः, अपाकृतसंस्करणयोः परिवर्तनानि च पश्यतु",
- "right-browsearchive": "अपाकृतपृष्ठानि अन्विष्यताम्",
+ "right-deletelogentry": "योग्यसंरक्षिताऽऽवल्याः प्रविष्टयः (entries) अपाक्रियन्ताम्, पुनः स्थाप्यन्तां च",
+ "right-deleterevision": "योग्यपृष्ठस्य संस्करणानि अपाक्रियन्ताम्",
+ "right-deletedhistory": "अपाकृत-प्रविष्टीनाम् (Entry) इतिहासं पश्यतु (तत्सम्बद्धपाठं विना)",
+ "right-deletedtext": "अपाकृतपाठस्य, अपाकृतसंस्करणस्य च परिवर्तनानि च पश्यतु",
+ "right-browsearchive": "अपाकृतपृष्ठानि अन्विष्यन्ताम्",
"right-undelete": "इदं पृष्ठं न अपाक्रियताम्",
- "right-suppressrevision": "प्रबन्धकैः निगूढितानि संस्करणानि पुनःपश्यतु, पुनस्थापयतु च",
- "right-suppressionlog": "वैयक्तिकसंस्करणानि दृश्यताम्",
- "right-block": "अस्य योजकस्य सम्पादनानि अवरुध्यताम्",
- "right-blockemail": "ई-पत्रप्रेषयितुम् एनं योजकम् अवरुद्ध्यताम्",
+ "right-suppressrevision": "प्रबन्धकैः निगूहितानि, सम्मुखं स्थापितानि च विशिष्टसंस्करणानि पुनः पश्यतु, पुनस्थापयतु च",
+ "right-viewsuppressed": "अन्ययोजकैः गूहितं संस्कृरणं दृष्यताम्",
+ "right-suppressionlog": "वैयक्तिकसंस्करणानि दृश्यन्ताम्",
+ "right-block": "अस्य योजकस्य सम्पादनानि अवरुध्यन्ताम्",
+ "right-blockemail": "ई-पत्रप्रेषयितुम् एनं योजकम् अवरुद्ध्यन्ताम्",
"right-hideuser": "प्रयोक्तृनाम अवरुध्यताम्, तत् अन्ययोजकेभ्यः गोप्यतां च",
"right-ipblock-exempt": "स्वयम् अवरोधितं, समूहावरोधिम् अन्तर्जालसङ्केतम् (IP) अवगण्य अग्रे गच्छतु",
"right-proxyunbannable": "प्रतिनिधीनां (of prxies) स्वयम्-अवरोधान् अवगण्य अग्रे गच्छतु",
- "right-unblockself": "स्वं अनवरुध्यताम्",
+ "right-unblockself": "स्वम् अनवरुध्यताम्",
"right-protect": "सुरक्षास्तरं परिवर्त्यतां, क्रमबद्धानि सुरक्षितपृष्ठानि सम्पाद्यतां च",
- "right-editprotected": "\"{{int:protect-level-sysop}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यताम्",
- "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यताम्",
+ "right-editprotected": "\"{{int:protect-level-sysop}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यन्ताम्",
+ "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यन्ताम्",
+ "right-editcontentmodel": "एकस्य पृष्ठस्य विषयोदाहरणं सम्पाद्यताम्",
"right-editinterface": "योजकमाध्यमं सम्पाद्यताम्",
- "right-editusercssjs": "अन्यस्य योजकस्य CSS, JavaScript सञ्चिकाः सम्पाद्यताम्",
- "right-editusercss": "अन्यस्य योजकस्य CSS सञ्चिकाः सम्पाद्यताम्",
- "right-edituserjs": "अन्यस्य योजकस्य JavaScript सञ्चिकाः सम्पाद्यताम्",
- "right-editmyusercss": "स्वस्य CSS सञ्चिकाः सम्पाद्यताम्",
- "right-editmyuserjs": "स्वस्य JavaScript सञ्चिकाः सम्पाद्यताम्",
- "right-viewmywatchlist": "स्वस्य अवेक्षणावलिः दृष्यताम्",
- "right-editmywatchlist": "स्वस्य अवेक्षणावलिः सम्पाद्यताम् । अत्र ध्यातव्यं यत्, अन्यचेष्टाभिः विना अधिकारेण अत्र अन्यपुष्ठानि योजयितुम् अवसरः अस्ति ।",
- "right-viewmyprivateinfo": "स्वस्य व्यक्तिगतसूचनाः दृश्यताम् (उदा. ई-पत्रसन्देशः, वास्तविकनाम)",
- "right-editmyprivateinfo": "स्वस्य व्यक्तिगतसूचनाः सम्पाद्यताम् (उदा. ई-पत्रसन्देशः, वास्तविकनाम)",
- "right-editmyoptions": "स्वस्य इष्टतमानि सम्पाद्यताम्",
+ "right-editusercssjs": "अन्यस्य योजकस्य CSS, JavaScript सञ्चिकाः सम्पाद्यन्ताम्",
+ "right-editusercss": "अन्यस्य योजकस्य CSS सञ्चिकाः सम्पाद्यन्ताम्",
+ "right-edituserjs": "अन्यस्य योजकस्य JavaScript सञ्चिकाः सम्पाद्यन्ताम्",
+ "right-editmyusercss": "स्वस्य CSS सञ्चिकाः सम्पाद्यन्ताम्",
+ "right-editmyuserjs": "स्वस्य JavaScript सञ्चिकाः सम्पाद्यन्ताम्",
+ "right-viewmywatchlist": "स्वस्य अवेक्षणाऽऽवलिः दृष्यताम्",
+ "right-editmywatchlist": "स्वस्य अवेक्षणाऽऽवलिः सम्पाद्यताम् । अत्र ध्यातव्यं यत्, विना अधिकारेण अत्र अन्यपुष्ठानि योजयितुम् अवसरः अस्ति ।",
+ "right-viewmyprivateinfo": "स्वस्य व्यक्तिगतसूचनाः दृश्यन्ताम् (उदा. ई-पत्रसन्देशः, वास्तविकनाम)",
+ "right-editmyprivateinfo": "स्वस्य व्यक्तिगतसूचनाः सम्पाद्यन्ताम् (उदा. ई-पत्रसन्देशः, वास्तविकनाम)",
+ "right-editmyoptions": "स्वस्य इष्टतमानि सम्पाद्यन्ताम्",
"right-rollback": "कस्मिंश्चित् पृष्ठे येन अन्तिमयोजकेन परिवर्तनं कृतं, तत् परिवर्तनं शीर्घ्रं पूर्ववत् करोतु",
"right-markbotedits": "पूर्ववत् यानि सम्पादनानि कृतानि, तानि बॉट्-सम्पादनत्वेन अङ्कितं करोतु",
"right-noratelimit": "वेगस्य सीमायाः कारणेन परिवर्तनं न भवेत्",
- "right-import": "अन्यस्मात् विकि-जालस्थआनात् पृष्ठानि आयातं करोतु",
+ "right-import": "अन्यस्मात् विकि-जालस्थानात् पृष्ठानि आयातं करोतु",
"right-importupload": "उपारोहिताभ्यः (upload) सञ्चिकाभ्यः पृष्ठानि आयातं करोतु",
- "right-patrol": "अन्येषां सम्पादनानि निरिक्षितत्वेन अङ्क्यताम्",
- "right-autopatrol": "स्वस्य सम्पादनानि निरिक्षितत्वेन अङ्क्यताम्",
- "right-patrolmarks": "नूतनपरिवर्तनेषु निरिक्षित-अङ्कनं दृश्यताम्",
+ "right-patrol": "अन्येषां सम्पादनानि निरीक्षितत्वेन (patrolled) अङ्क्यन्ताम्",
+ "right-autopatrol": "स्वस्य सम्पादनानि निरीक्षितत्वेन अङ्क्यन्ताम्",
+ "right-patrolmarks": "नूतनपरिवर्तनेषु निरीक्षित-अङ्कनं दृश्यताम्",
"right-unwatchedpages": "अदृष्टपृष्टानाम् आवलिः दृश्यताम्",
- "right-mergehistory": "पृष्ठानाम् इतिहासम् एकीकरोतु",
+ "right-mergehistory": "पृष्ठानाम् इतिहासम् वलीयताम्",
"right-userrights": "सर्वयोजकाधिकारः सम्पाद्यताम्",
"right-userrights-interwiki": "अन्यविकि-जालस्थानानां योजकाधिकारः सम्पाद्यताम्",
"right-siteadmin": "दत्तांशनिधिं किलतु, अकिलितं च करोतु",
- "right-override-export-depth": "पञ्चस्तरपर्यन्तं संलग्नपुटानि निर्यातानि करोतु ।",
- "right-sendemail": "अन्ययोजकेभ्यः विद्युन्मानपत्राणि प्रेषयतु ।",
+ "right-override-export-depth": "यानि पुष्ठानि पञ्चस्तरपर्यन्तं संलग्नानि सन्ति, तेषां सर्वेषां निर्यातं करोतु ।",
+ "right-sendemail": "अन्ययोजकेभ्यः ई-पत्रं पत्रं प्रेषयतु",
"right-passwordreset": "निकुञ्चपुनारचितानां विद्युन्मानपत्राणाम् अवलोकनम् ।",
"newuserlogpage": "प्रयोक्तृ-सृजन-सूचिका",
"newuserlogpagetext": "अयं योजकनिर्माणास्य प्रवेशः ।",
@@ -1118,6 +1151,7 @@
"recentchanges-label-minor": "इदं लघु सम्पादनम्",
"recentchanges-label-bot": "बोट्-द्वारा कृतं सम्पादनमेतत्",
"recentchanges-label-unpatrolled": "एतावता अस्य सम्पादनस्य परिशीलिनं नाभूत् ।",
+ "recentchanges-label-plusminus": "पृष्ठस्य आकारः एतावद्भिः बैट्स्-संख्याभिः परिवर्तितः",
"recentchanges-legend-heading": "'''विकल्पविषयकम्'''",
"rcnotefrom": "<strong>$2</strong> तः आरभ्य (<strong>$1</strong> पर्यन्तं) जातानि परिवर्तनानि अधः प्रदर्शितानि ।",
"rclistfrom": "$3 $2 पश्चात् जातानि नूतनानि परिवर्तनानि दृश्यन्ताम्",
@@ -1415,7 +1449,6 @@
"statistics": "साङ्ख्यिकी",
"statistics-header-pages": "पुटसाङ्ख्यिकाः ।",
"statistics-header-edits": "सङ्ख्यिकाः सम्पादयतु ।",
- "statistics-header-views": "साङ्ख्यिकाः अवलोकयतु ।",
"statistics-header-users": "योजकसाङ्ख्यिकाः ।",
"statistics-header-hooks": "अन्यसाङ्ख्यिकाः ।",
"statistics-articles": "आधेयपुटानि ।",
@@ -1424,13 +1457,9 @@
"statistics-files": "उद्भारितसञ्चिकाः",
"statistics-edits": "{{SITENAME}} व्यवस्थापनपर्यन्तं पुटसम्पादनानि ।",
"statistics-edits-average": "प्रतिपुटं माध्यसम्पादनानि ।",
- "statistics-views-total": "अवलोकनयोगः ।",
- "statistics-views-total-desc": "असंवृत्तपुटानाम् अवलोकनानि । अपि च विशेषपुटानि नान्तर्गतानि ।",
- "statistics-views-peredit": "प्रतिसम्पादनम् अवलोकनम् ।",
"statistics-users": "पञ्जीकृतः [[Special:ListUsers|योजकः]]",
"statistics-users-active": "सक्रियाः सदस्याः",
"statistics-users-active-desc": "गतेषु {{PLURAL:$1|day|$1 दिनेषु}} सक्रियाः योजकाः ।",
- "statistics-mostpopular": "अत्यवलोकितपुटानि ।",
"pageswithprop": "प्रगुणविशेषयुतानि पृष्ठानि",
"pageswithprop-legend": "प्रगुणविशेषयुतानि पृष्ठानि",
"doubleredirects": "दुगुनी-अनुप्रेषिते",
@@ -1465,7 +1494,6 @@
"uncategorizedtemplates": "अवर्गीकृताः प्रकृतयः ।",
"unusedcategories": "अनुपयुक्ताः वर्गाः ।",
"unusedimages": "अनुपयुक्तानि पुटाणी ।",
- "popularpages": "प्रसिद्धानि पुटानि ।",
"wantedcategories": "आवश्यकाः वर्गाः ।",
"wantedpages": "आवश्यकपुटानि ।",
"wantedpages-badtitle": "$1 परिणामनिरूपणे अमान्यशीर्षकम् ।",
@@ -1514,7 +1542,6 @@
"querypage-disabled": "समाचरणकारणेन एतद्विशेषपुटं निष्क्रियम् ।",
"booksources": "ग्रन्थस्रोतः",
"booksources-search-legend": "ग्रन्थस्रोतः अन्विष्यताम्",
- "booksources-go": "गम्यताम्",
"booksources-text": "अधस्था आवली नूतनप्राचीनपुस्तकानां विक्रयकेन्द्रस्य अनुबन्धान् सूचयति । यत्र ते आवश्यकाः अन्यविषयाः अपि उपलभ्याः ।",
"booksources-invalid-isbn": "दत्तं ISBN मान्यम् इति न भाति । मूलस्रोततः प्रतिकृतीः कर्तुं परिशीलयतु ।",
"specialloguserlabel": "आचारी :",
@@ -1632,7 +1659,7 @@
"wlheader-enotif": "विद्युन्मानपत्रस्य सूचनाः सक्रियाः ।",
"wlheader-showupdated": "भवतः सन्दर्शनस्य पश्चात् परिवर्तितानि पुटानि स्थूलाक्षरैः निर्दिष्टानि ।",
"wlnote": "अधस्तात् {{PLURAL:$1|'''1''' परिवर्तनमस्ति|अन्तिमानि '''$1''' परिवर्तनानि सन्ति}},{{PLURAL:$2|गते दिवसे|'''$2''' गतेषु दिवसेषु}}, , $3, $4. इति",
- "wlshowlast": "अन्तिमाः $1 होराः, अन्तिमानि $2 दिनानि $3 दृश्यन्ताम्",
+ "wlshowlast": "अन्तिमाः $1 होराः, अन्तिमानि $2 दिनानि दृश्यन्ताम्",
"watchlist-options": "अवेक्षणाऽऽवलेः विकल्पाः",
"watching": "निरीक्षते...",
"unwatching": "निरीक्षाम् अपाकरोति...",
@@ -1679,7 +1706,6 @@
"delete-toobig": "अस्य पुटास्य सम्पादनेतिहासः$1तः अधिकः {{PLURAL:$1|पुनरावृत्तिः}} इति कारणेन बृहत् अस्ति । \n{{SITENAME}} इत्यस्य अकस्मात् प्रविदारणम् अवरोद्धुं तादृशपुटस्य अपमर्जनं निषिद्धम् ।",
"delete-warning-toobig": " $1 {{PLURAL:$1|पुनरावृत्तिः|पुनरावृत्तयः}} अस्मिन् पुटे विसृतः सम्पादनेतिहासः ।",
"rollback": "सम्पादनं निर्वर्तयतु ।",
- "rollback_short": "प्रत्याहरणम् ।",
"rollbacklink": "प्रत्याहरणं",
"rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादनम्|सम्पादनानि}} प्रत्याहरतु ।",
"rollbacklinkcount-morethan": "$1 {{PLURAL:$1|सम्पादनम्|सम्पादनानि}} अधिकं प्रत्याहरतु ।",
@@ -2085,18 +2111,14 @@
"import-rootpage-nosubpage": "मूलपुटस्य \"$1\" इति नामस्थाने उपपुटानि नानुमतानि ।",
"importlogpage": "आयातसूचिका ।",
"importlogpagetext": "अन्यविकितः सम्पादितेतिहाससहितानि प्रशासकानाम् आयातपुटानि ।",
- "import-logentry-upload": "सञ्चिकाम् उत्तारयित्वा [[$1]] इत्यस्य आयातः कृतः ।",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|पुनरावृत्तिः}}",
- "import-logentry-interwiki": "ट्रान्स्विकिकृतम् ।$1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|पुनरावृत्तिः}} $2 इत्येतस्मात् ।",
"javascripttest": "जावालिपिपरीक्षणम् ।",
- "javascripttest-title": "$1 परीक्षाप्रचलति ।",
"javascripttest-pagetext-noframework": "जावलिपिचालनपरीक्षार्थम् एतत्पुटम् आरक्षितम् ।",
"javascripttest-pagetext-unknownframework": "अज्ञातपरीक्षाप्रक्रिया $1",
"javascripttest-pagetext-frameworks": "अधो दत्तेषु कञ्चिदेकां परीक्षाप्रक्रियां चिनोतु : $1",
"javascripttest-pagetext-skins": "अनेन सह परीक्षां सञ्चालयितुं काचित् त्वक् चिनोतु ।",
"javascripttest-qunit-intro": "mediawiki.org. [$1 अभिलेखपरीक्षा] इत्यत्र पश्यतु ।",
- "javascripttest-qunit-heading": "मिडियाविक्याः जवालिपेः Qघटकस्य परीक्षाप्रणाली ।",
"tooltip-pt-userpage": "भवतः/भवत्याः योजकपृष्ठम्",
"tooltip-pt-anonuserpage": "ऐपिसङ्केतार्थं योजकपुटं भवान् सम्पादयति एवम्..",
"tooltip-pt-mytalk": "भवतः/भवत्याः सम्भाषणपृष्ठम्",
@@ -2195,7 +2217,6 @@
"pageinfo-robot-policy": "चालकयन्त्रस्थितिः अन्विष्यताम्",
"pageinfo-robot-index": "अङ्कनयोग्यम्",
"pageinfo-robot-noindex": "अङ्कनायोग्यम्",
- "pageinfo-views": "अवलोकनानां सङ्ख्या ।",
"pageinfo-watchers": "पृष्ठावलोककानां सङ्ख्या ।",
"pageinfo-redirects-name": "एतत् पृष्ठं प्रति पुनर्निर्दिश्यते",
"pageinfo-subpages-name": "अस्य पृष्ठस्य उपपृष्ठानि",
@@ -2627,7 +2648,6 @@
"exif-urgency-low": "मन्दम् ।$1",
"exif-urgency-high": "उन्नतम् ($1)",
"exif-urgency-other": "योजकनिरूपिता आद्यता : $1",
- "watchlistall2": "सर्वाणि",
"namespacesall": "सर्वाणि",
"monthsall": "सर्वाणि",
"confirmemail": "ईपत्रसङ्केतः प्रमाणीक्रियताम्",
@@ -2699,7 +2719,6 @@
"watchlisttools-edit": "अवेक्षणाऽऽवलिः दृश्यतां, सम्पाद्यतां च",
"watchlisttools-raw": "विवरणरहिता अवलोकनावलिः सम्पाद्यताम्",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|सम्भाषणम्]])",
- "unknown_extension_tag": "अज्ञातं वर्तमानसूत्रम् $1",
"duplicate-defaultsort": "'''पूर्वसूचना''' \"$1\" इति पुरातनं मूलक्रमाङ्कनकुड्मलं विहाय \"$2\" इति नवीनं मूलक्रमाङ्कनकुण्डलत्वेन स्वयमेव नयति एतत् ।",
"version": "आवृत्तिः",
"version-extensions": "अनुस्थापितानि विस्तरणानि ।",
@@ -2715,7 +2734,7 @@
"version-parser-function-hooks": "विन्यासकलापस्य आलम्बाः ।",
"version-hook-name": "आलम्बस्य नाम ।",
"version-hook-subscribedby": "सदस्यत्वम् अनेन प्राप्तम् ।",
- "version-version": "(आवृत्तिः$1)",
+ "version-version": "($1)",
"version-license": "अनुज्ञापत्रम्",
"version-poweredby-credits": "इयं विकिः अनेन सञ्चालिता '''[https://www.mediawiki.org/ MediaWiki]''', स्वामित्वम् © 2001 - $1 $2 ।",
"version-poweredby-others": "अन्य",
@@ -2824,19 +2843,20 @@
"logentry-rights-rights-legacy": "$1, $3 इत्यस्मै समूहसदस्यतां पर्यवर्तयत्",
"logentry-rights-autopromote": "$1 इत्ययं स्वचालितरूपेण $4 इत्यतः $5 इति यावत् पदोन्नतः",
"rightsnone": "(कतम)",
+ "revdelete-summary": "सम्पादनसांक्षेपिक",
+ "feedback-adding": "पृष्ठे प्रतिस्पन्दः योजनीयः ...",
+ "feedback-bugcheck": "उत्तमम् परिशीलयतु यत् [ $1 known bugs] पूर्वमेव नासीत् इति ।",
+ "feedback-bugnew": "अहं परीक्षितवान् । नूतनदोषं सूचयतु ।",
"feedback-bugornote": "यदि भवान् कस्याश्चित् तान्त्रिकसमस्यायाः विषये विशदीकर्तुम् इच्छति तर्हि [$1 मत्कुणसञ्चिकां करोतु ।]\nअन्यथा चेत् भवान् सरलप्रपत्रम् उपयोक्तुं शक्नोति । भवतः टीका योजकनाम्ना सह भवतः जालगवाक्षेन सह \"[$3 $2]\" इत्यस्मिन् पुटे योज्यते ।",
- "feedback-subject": "विषय:",
- "feedback-message": "संदेश:",
"feedback-cancel": "निवर्तयते",
- "feedback-submit": "प्रतिस्पन्दः प्रेष्यताम्",
- "feedback-adding": "पृष्ठे प्रतिस्पन्दः योजनीयः ...",
+ "feedback-close": "समापित",
"feedback-error1": "API इत्यस्मात् दोषः : अज्ञातः परिणामः ।",
"feedback-error2": "दोषः : सम्पादनं निष्फलं जातम्",
"feedback-error3": "दोषः : ए पि ऐ तः प्रतिस्पन्दः न प्राप्तः",
+ "feedback-message": "संदेश:",
+ "feedback-subject": "विषय:",
+ "feedback-submit": "उपस्थाप्यताम्",
"feedback-thanks": "धन्यवादः ! भवतः प्रतिस्पन्दः \"[ $2 $1 ]\" पृष्ठाय प्रेषितः अस्ति ।",
- "feedback-close": "समापित",
- "feedback-bugcheck": "उत्तमम् परिशीलयतु यत् [ $1 known bugs] पूर्वमेव नासीत् इति ।",
- "feedback-bugnew": "अहं परीक्षितवान् । नूतनदोषं सूचयतु ।",
"searchsuggest-search": "अन्वेषणम्",
"searchsuggest-containing": "विद्यन्ते......",
"api-error-badaccess-groups": "भवान् अस्यां वीक्यां सञ्चिकाः उत्तारयितुम् नानुमतः ।",
@@ -2889,5 +2909,24 @@
"duration-millennia": "$1 {{PLURAL:$1|सहस्राब्धः|सहस्राब्धाः}}",
"expand_templates_output": "परिणामम्",
"expand_templates_ok": "अस्तु",
- "expand_templates_preview": "प्राग्दृश्यम् दर्श्यताम्"
+ "expand_templates_preview": "प्राग्दृश्यम् दर्श्यताम्",
+ "special-characters-group-latin": "ल्याटिन्",
+ "special-characters-group-latinextended": "ल्याटिन्-विस्तारितम्",
+ "special-characters-group-ipa": "ऐपिए",
+ "special-characters-group-symbols": "प्रतीक",
+ "special-characters-group-greek": "ग्रीक",
+ "special-characters-group-cyrillic": "सिरिलिक्",
+ "special-characters-group-arabic": "अरबी",
+ "special-characters-group-arabicextended": "अरबीविस्तारितम्",
+ "special-characters-group-persian": "पर्शियन्",
+ "special-characters-group-hebrew": "हिब्रू",
+ "special-characters-group-bangla": "वङ्गलिपि",
+ "special-characters-group-tamil": "तमिल्",
+ "special-characters-group-telugu": "तेलुगु",
+ "special-characters-group-sinhala": "सिंहल",
+ "special-characters-group-gujarati": "गुजराती",
+ "special-characters-group-devanagari": "देवनागरी",
+ "special-characters-group-thai": "थाई",
+ "special-characters-group-lao": "लाओ",
+ "special-characters-group-khmer": "खमेर"
}
diff --git a/languages/i18n/sah.json b/languages/i18n/sah.json
index 63186ced..ca59d025 100644
--- a/languages/i18n/sah.json
+++ b/languages/i18n/sah.json
@@ -9,7 +9,10 @@
"Meno25",
"Nemo bis",
"Urhixidur",
- "아라"
+ "아라",
+ "Purodha",
+ "Krivoshapkina",
+ "Macofe"
]
},
"tog-underline": "Сигэлэри аннынан тардыы:",
@@ -37,7 +40,7 @@
"tog-shownumberswatching": "Сирэйи кэтээн көрөр дьон ахсаанын көрдөр",
"tog-oldsig": "Билиҥҥи илии баттааһын:",
"tog-fancysig": "Бэйэ илии баттааһына (сигэтэ суох)",
- "tog-uselivepreview": "Хайдах буолуохтааҕын тутатына эрдэ көрүү (тургутуу быһыытынан)",
+ "tog-uselivepreview": "Хайдах буолуохтааҕын тутатына эрдэ көрүүнү туттуу",
"tog-forceeditsummary": "Тугу уларыппытым туһунан суруйбатахпына сэрэт",
"tog-watchlisthideown": "Кэтээн көрүү тиһигэр бэйэм уларытыыларбын көрдөрүмэ",
"tog-watchlisthidebots": "Кэтээн көрүү тиһигэр робот уларытыытын көрдөрүмэ",
@@ -212,6 +215,7 @@
"otherlanguages": "Атын омук тылынан",
"redirectedfrom": "(Мантан: $1 көстө)",
"redirectpagesub": "Утаарар сирэй",
+ "redirectto": "Манна утаарыы:",
"lastmodifiedat": "Бу сирэй бүтэһигин $2, $1 уларыйбыта.",
"viewcount": "Бу сирэй {{PLURAL:$1|биирдэ|$1 төгүл}} көрүллүбүт.",
"protectedpage": "Уларытыллыбат сирэй",
@@ -224,6 +228,7 @@
"pool-queuefull": "Көрдөбүллэри хомуйуу туолбут",
"pool-errorunknown": "Биллибэт алҕас",
"pool-servererror": "Пул ааҕааччытын сулууспата үлэлээбэт($1).",
+ "poolcounter-usage-error": "Туһаныы алҕаһа: $1",
"aboutsite": "{{SITENAME}} туһунан",
"aboutpage": "Project:туһунан",
"copyright": "Маны туһанары $1 лиссиэнсийэ көҥүллүүр (атын ыйыллыбытах буоллаҕына).",
@@ -233,6 +238,7 @@
"disclaimers": "Бүк охсунуу",
"disclaimerpage": "Project:Бүк охсунуу",
"edithelp": "Уларытааччыларга көмө",
+ "helppage-top-gethelp": "Көмө",
"mainpage": "Сүрүн сирэй",
"mainpage-description": "Сүрүн сирэй",
"policy-url": "Project:Сиэрэ",
@@ -315,6 +321,8 @@
"filerenameerror": "\"$1\" диэн билэ аатын \"$2\" диэҥҥэ кыайан уларытыллыбат.",
"filedeleteerror": "\"$1\" диэн билэ кыайан сотторуллубат.",
"directorycreateerror": "\"$1\" диэн ыйдарыы кыайан оҥоһуллубата.",
+ "directoryreadonlyerror": "«$1» паапканы ааҕыахха эрэ сөп.",
+ "directorynotreadableerror": "«$1» паапка сатаан ааҕыллыбат.",
"filenotfound": "\"$1\" диэн билэни кыайан булбатым.",
"unexpected": "Барсыбат суолталаах: \"$1\"=\"$2\".",
"formerror": "Сыыһа: халыып кыайан ылыллыбата",
@@ -336,7 +344,8 @@
"viewsourcetext": "Эн бу сирэй төрдүн көрүөххүн уонна төгүллүөххүн сөп:",
"viewyourtext": "'''Бэйэҥ көннөрүүлэриҥ''' исходнигын бу сирэйгэ көрүөххүн уонна хатылаан ылыаххын сөп:",
"protectedinterface": "Бу сирэй бырагыраамма интерфейсын биллэриитин көрдөрөр, онон моһуогурууттан халытан хатанан турар.\nТылбааһын уларытыаххын баҕарар буоллаххына онно аналлаах тылбаас ситим-сирин туһан: MediaWiki [//translatewiki.net/ translatewiki.net]",
- "editinginterface": "'''Болҕой:''' Быраҕыраамма тас көстүүтүн (интерфейсын) хааччыйар тиэкиһи уларытаары гынан эрэҕин.\nБу сирэйи уларыттаххына атын кыттааччылар көрөллөрүгэр бырагыраамма көстүүтэ уларыйыа. \nТылбааһын уларытыаххын эбэтэр эбиэххин баҕарар буоллаххына Медиавики бырайыактарын тылбаастыыр сиргэ киир [//translatewiki.net/ translatewiki.net].",
+ "editinginterface": "<strong>Болҕой:</strong> Быраҕыраамма тас көстүүтүн (интерфейсын) хааччыйар тиэкиһи уларытаары гынан эрэҕин.\nБу сирэйи уларыттаххына атын кыттааччылар көрөллөрүгэр быраҕыраамма көстүүтэ уларыйыа.",
+ "translateinterface": "Бу биллэриини тылбаастыырга эбэтэр уларытарга, бука диэн, MediaWiki диэн анал тылбаастыыр сиргэ киир [//translatewiki.net/ translatewiki.net].",
"cascadeprotected": "Бу сирэй уларыйар кыаҕа суох, тоҕо диэтэххэ уларыйара бобуллубут (каскаднай көмүскэл холбоммут) {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр:\n$2",
"namespaceprotected": "Эн '''$1''' аат эйгэтигэр киирэр сирэйдэри уларытар кыаҕыҥ суох.",
"customcssprotected": "Эн бу CSS-сирэйи уларытар кыаҕыҥ суох, тоҕо диэтэххэ онтуҥ атын киһи тус бэйэтин туруорууларын таарыйар.",
@@ -393,6 +402,8 @@
"userlogin-resetlink": "Киирэр тылгын умнубуккун дуо?",
"userlogin-resetpassword-link": "Киирии тылгын санаттараҕын дуо?",
"userlogin-helplink2": "Киирэргэ көмө",
+ "userlogin-loggedin": "Маннык аатынан киирбиккин {{GENDER:$1|$1}}.\nАтын аатынан киирэргэ аллара көстөр форманы туһан.",
+ "userlogin-createanother": "Атын аатынан бэлиэтэн",
"createacct-emailrequired": "Email аадырыс",
"createacct-emailoptional": "Email аадырыс (булгуччута суох)",
"createacct-email-ph": "Эл аадырыскын суруй",
@@ -454,6 +465,7 @@
"createaccount-text": "Ким эрэ {{SITENAME}} бырайыакка ($4) саҥа $2 ааты бэлиэтээбит. \"$2\" киирии тыла \"$3\". Билигин киирэн киирии тылгын уларытыаххын наада.\n\nСаҥа аат сыыһа оҥоһуллубут буоллаҕына тугу да гыныа суоххун сөп.",
"login-throttled": "Ааккын аһара элбэхтик билиһиннэрэ сатаатыҥ.\nБука диэн $1 буолан баран өссө киирэн көрөөр.",
"login-abort-generic": "Бу аатынан сатаан киирбэтиҥ - быстан хаалла",
+ "login-migrated-generic": "Эн бэлиэ-аатыҥ көһөрүллүбүт, онон урукку аатыҥ бу биикигэ суох буолбут эбит.",
"loginlanguagelabel": "Омугун тыла: $1",
"suspicious-userlogout": "Сеансы түмүктүүр ыйытыгыҥ ылыныллыбата, тоҕо диэтэххэ браузер эбэтэр кээштыыр прокси алҕас ыыппыт ыйытыктарыгар майгынныыр.",
"createacct-another-realname-tip": "Дьиҥнээх аатыҥ булгуччута суох.\nЫйдаххына уларыппыт сирэйиҥ устуоруйатыгар көстөр буолуоҕа.",
@@ -505,7 +517,6 @@
"passwordreset-emailsent-capture": "Киирии тылы уларытар туһунан сурук аллара эмиэ көрдөрүлүннэ.",
"passwordreset-emailerror-capture": "Манна киирии тылы уларытар туһунан сурук көрдөрүлүннэ. Ол эрэн сурук бу төрүөттэн $2 кыттааччыга сатаан барбата: $1",
"changeemail": "Ааадырыһын уларыт",
- "changeemail-header": "Аадырыһын уларытыы",
"changeemail-text": "Бу форманы толорон аадырыскын уларыт. Уларытыыны бигэргэтэргэ киирии тылгын киллэриэхтээххин.",
"changeemail-no-info": "Бу сирэйгэ чопчу тиийэргэ, тиһиликкэ бэлиэтэммит ааккын этиэхтиэххин.",
"changeemail-oldemail": "Билиҥҥи аадырыс:",
@@ -513,7 +524,6 @@
"changeemail-none": "(суох)",
"changeemail-password": "{{SITENAME}} ситим-сиргэ киирэр тылыҥ:",
"changeemail-submit": "Аадырыһы уларыт",
- "changeemail-cancel": "Тохтот",
"changeemail-throttled": "Ааккын аһара элбэхтик билиһиннэрэ сатаатыҥ.\nБука диэн $1 буолан баран өссө киирэн көрөөр.",
"resettokens": "Токеннары бырах",
"resettokens-text": "Бу ситим-сиргэ бэлиэтэммит ааккын кытта ситимнээх токеннары сотуоххун сөп.\n\nАлҕас кимиэхэ эрэ биэрэн кэбиспит буоллаххына эбэтэр ким эрэ эн ааккынан алдьатан киирбит буоллаҕына маны туһаныахха сөп.",
@@ -551,9 +561,10 @@
"showpreview": "Уларытыах иннинэ көрүү",
"showdiff": "Уларытыылар",
"blankarticle": "<strong>Сэрэтии:</strong> Оҥорор сирэйиҥ кураанах.\nБу тимэҕи «{{int:savearticle}}» хос баттаатаххына кураанах сирэй оҥоһуллуо.",
- "anoneditwarning": "'''Болҕой:''' Системаҕа киирбэтэххин. Онон аатыҥ оннугар IP аадаырыһыҥ бу сирэй историятыгар киириэ.",
+ "anoneditwarning": "<strong>Болҕой:</strong> Киирбэтэххин. Онон тугу эрэ уларытар түгэҥҥэр аатыҥ оннугар IP аадырыһыҥ барыларыгар көстүө. бу сирэй историятыгар киириэ. Өскөтө <strong>[$1 киирдэххинэ]</strong> эбэтэр <strong>[$2 бэлиэтэннэххинэ]</strong> уларытыыларыҥ Эн ааккын кытта ситимнэниэхтэрэ, ону таһынан ол атын да көдьүүстэрдээх буолуоҕа.",
"anonpreviewwarning": "''Эн тиһиккэ ааккын эппэттэххин. Уларытыыгын бигэргэттэххинэ IP-аадырыһыҥ сирэй устуоруйатыгар суруллуо.''",
"missingsummary": "'''Санатыы:''' Уларыппытыҥ кылгас быһаарыытын суруйбатаххын. Уларытыыны бигэргэттэххинэ улартытыыҥ хос быһаарыыта суох барыа.",
+ "selfredirect": "<strong>Болҕой:</strong> Утаарыыны ыстатыйа бэйэтигэр оҥороору гынныҥ.\nБаҕар, утаарыы сирэйин атыны суруйаары гыммытыҥ буолуо эбэтэр атын сирэйи көннөрө олороҕун. \nОл да буоллар, өскө «{{int:savearticle}}» баттамы хат баттаатаххына, утаары оҥоһуллуо.",
"missingcommenttext": "Манна хос быһаарыыны суруй.",
"missingcommentheader": "'''Санатыы:''' Хос быһаарыы аатын суруйбатаххын.\n«{{int:savearticle}}» тимэҕи баттаан бигэргэттэххинэ быһаарыыҥ аата суох барыа.",
"summary-preview": "Хос быһаарыыны көрүү:",
@@ -652,6 +663,10 @@
"content-model-text": "көннөрү тиэкис",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Кураанах эбийиэк",
+ "content-json-empty-array": "Кураанах массив",
+ "duplicate-args-category": "Халыыптары ыҥырарга хатыланар аргуменнардаах сирэйдэр",
+ "duplicate-args-category-desc": "Халыыптары ыҥырарга хатыланар аргуменнардаах сирэйдэр, холобур маннык <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Болҕой. Бу сирэй наһаа элбэх көмпүүтэри ноҕуруускалыыр ресурсаларга сигэнэр.\n\n{{PLURAL:$2|Сигэнии ахсаана|Сигэниилэр ахсааннара}} мантан тахсыа суохтаах - $2, билигин {{PLURAL:$1|$1 сигэниилээх|$1 сигэниилэрдээх}}.",
"expensive-parserfunction-category": "Көмпүүтэри ноҕуруускалыыр ресурсаларга наһаа элбэхтик сигэнэр сирэйдэр",
"post-expand-template-inclusion-warning": "Болҕой: Киллэрэр халыыптарыҥ ыйааһыннара наһаа улахан.\nОнон сорох халыыптар киллэриллиэхтэрэ суоҕа.",
@@ -679,7 +694,7 @@
"cantcreateaccounttitle": "Саҥа ааты киллэрэр сатаммат",
"cantcreateaccount-text": "[[User:$3|$3]] кыттааччы бу IP-ттан ('''$1''') саҥа бэлиэтэниини бопто.\n\nБыһаарыыта: $3 - ''$2''",
"cantcreateaccount-range-text": "Бу IP-диапазонтан '''$1''' ааты бэлиэтиири [[User:$3|$3]] боппут. Эн IP-аадырыһыҥ ('''$4''') онно киирсэр эбит. \n\nЫйыллыбыт төрүөтэ: $2.",
- "viewpagelogs": "Бу сирэй историятын көрдөр",
+ "viewpagelogs": "Бу сирэй сурунаалларын көрүү",
"nohistory": "Бу сирэй историята суох эбит.",
"currentrev": "Билиҥҥи барыл",
"currentrev-asof": "Билиҥҥи торум манна: $1",
@@ -706,7 +721,7 @@
"history-feed-empty": "Көрдүүр сирэйиҥ суох эбит.\nБаҕар сотуллубута эбэтэр атын ааттаммыта буолуо.\nМанна майгынныыр сирэйдэри [[Special:Search|көрдөөн]] көр.",
"rev-deleted-comment": "(көннөрүү туһунан сурук сотуллунна)",
"rev-deleted-user": "(кыттааччы аата сотулунна)",
- "rev-deleted-event": "(бэлиэтээһин дьайыыта сотулунна)",
+ "rev-deleted-event": "(бэлиэтээһин сотулунна)",
"rev-deleted-user-contribs": "[кыттааччы аата эбэтэр IP-аадырыһа сотуллубуттар — уларытыы көстүбэт оҥоһуллубут]",
"rev-deleted-text-permission": "Сирэй бу барыла '''сотуллубут'''.\nБыһаарыыта [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} манна] баар буолуон сөп.",
"rev-suppressed-text-permission": "Сирэй бу барыла <strong>кистэммит</strong>.\nБыһаарыы [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} кистээһин сурунаалыгар] баар.",
@@ -740,7 +755,7 @@
"revdelete-legend": "Хааччахтары туруоруу:",
"revdelete-hide-text": "Уларытыы тиэкиһэ",
"revdelete-hide-image": "Билэ иһин кистээ",
- "revdelete-hide-name": "Дьайыыны уонна дьайыы сыалын кистээ.",
+ "revdelete-hide-name": "Дьайыыны уонна дьайыы соругун кистээ",
"revdelete-hide-comment": "Уларытыы туһунан",
"revdelete-hide-user": "Кыттааччы аата/IP-та",
"revdelete-hide-restricted": "Маны дьаһабыллартан эмиэ кистииргэ",
@@ -784,6 +799,7 @@
"mergehistory-empty": "Биир да барыл силлиһэр кыаҕа суох.",
"mergehistory-success": "$3 {{PLURAL:$3|барыл|барыллар}} [[:$1]] биир [[:$2]] барылга силлистилэр.",
"mergehistory-fail": "Сирэй устуоруйалара кыайан холбоспотулар, өссө биирдэ торумнар бириэмэлэрин уонна сирэй параметрдарын бэрэбиэркэлээ.",
+ "mergehistory-fail-toobig": "Устуоруйаны холбуур табыллыбата, тоҕо диэтэххэ $1 барылга көҥүллэнэр лимииттэн элбэҕи көһөрөр наада эбит.",
"mergehistory-no-source": "Бастакы $1 сирэй суох.",
"mergehistory-no-destination": "Баар буолуохтаах $1 сирэй суох.",
"mergehistory-invalid-source": "Источнигыҥ сөптөөх ааттаах буолуохтаах.",
@@ -793,7 +809,6 @@
"mergehistory-same-destination": "Саҕалыыр уонна түмүктүүр сирэйдэриҥ атын (уратылаах) буолуохтаахтар.",
"mergehistory-reason": "Төрүөтэ:",
"mergelog": "Силбэһиилэр сурунааллара",
- "pagemerge-logentry": "силбэстилэр [[$1]] уонна [[$2]] ($3 диэри торумнар)",
"revertmerge": "Араарыы",
"mergelogpagetext": "Манна сирэйдэр устуоруйаларын бүтэһик силлэһиилэрин тиһигэ бэриллэр.",
"history-title": "Көннөрүү сурунаала \"$1\"",
@@ -816,6 +831,8 @@
"notextmatches": "Ыстатыйалар истэрэ хатыламмат",
"prevn": "инники {{PLURAL:$1|$1}}",
"nextn": "аныгыскы {{PLURAL:$1|$1}}",
+ "prev-page": "инники сирэй",
+ "next-page": "аныгыскы сирэй",
"prevn-title": "Бу иннинээҕи $1 {{PLURAL:$1|сурук|суруктар}}",
"nextn-title": "Бу кэннинээҕи $1 {{PLURAL:$1|сурук|суруктар}}",
"shown-title": "Сирэйгэ $1 {{PLURAL:$1|суругу|суруктары}} көрдөр",
@@ -834,6 +851,7 @@
"search-result-category-size": "{{PLURAL:$1|$1 элэмиэн|$1 элэмиэннэр}} ({{PLURAL:$2|$2 субкатегория|$2 субкатегориялар}}, {{PLURAL:$3|$3 билэ|$3 билэлэр}})",
"search-redirect": "(утаарыы $1)",
"search-section": "($1 сиэксийэ)",
+ "search-category": "(категория $1)",
"search-file-match": "(билэ иһинээҕитин кытта сөп түбэһэр)",
"search-suggest": "Баҕар маннык диэри гыммытыҥ буолуо: $1",
"search-interwiki-caption": "Уруулуу бырайыактар",
@@ -844,20 +862,21 @@
"searchall": "бары",
"showingresults": "Манна {{PLURAL:$1|түмүк|түмүктэр}} {{PLURAL:$1|көрдөрүлүннэ|көрдөрүлүннүлэр}} <strong>$1</strong> , мантан саҕалаан №&nbsp;<strong>$2</strong>.",
"showingresultsinrange": "Манна {{PLURAL:$1|<strong>1</strong> түмүк|<strong>$1</strong> түмүк}} мантан саҕалаан <strong>$2</strong> маныаха дылы <strong>$3</strong> көрдөрүлүннэ.",
- "showingresultsheader": "'''$4''' анаммыт {{PLURAL:$5|мантан '''$3''' түмүгэ - '''$1'''|мантан '''$3''' түмүктэрэ '''$1 - $2'''}}",
+ "search-showingresults": "{{PLURAL:$4|Түмүк <strong>$1</strong> из <strong>$3</strong>|Түмүктэр <strong>$1 — $2</strong> мантан <strong>$3</strong>}}",
"search-nonefound": "Көрдөбүлгэ эппиэттиир билэлэр көстүбэтилэр.",
"powersearch-legend": "Дириҥэтэн көрдөөһүн",
"powersearch-ns": "Аат далыгар көрдөө:",
"powersearch-togglelabel": "Бэлиэтээ:",
"powersearch-toggleall": "Барытын",
"powersearch-togglenone": "Бэлиэтээмэ",
+ "powersearch-remember": "Кэлин көрдүүргэ маны туһан",
"search-external": "Тастан көрдөөһүн",
"searchdisabled": "{{SITENAME}} көрдүүр тэрилэ араарыллыбыт. Атын көрдүүр системаларынан наадыйар сирэйдэргитин көрдөтүөххүтүн сөп. Ол гынан баран поисковик кээһигэр баар торум эргэрбит буолуон сөп.",
"search-error": "Көрдүүр кэмҥэ алҕас таҕыста: $1",
"preferences": "Уларытыылар",
"mypreferences": "Туруоруулар",
"prefs-edits": "Көннөрүү ахсаана:",
- "prefsnologintext2": "Туруоруулары уларытарга $1 наада.",
+ "prefsnologintext2": "Туруоруулары уларытарга ааккынан киириэхтээххин.",
"prefs-skin": "Тас көстүү",
"skin-preview": "Хайдах буолара",
"datedefault": "Көннөрү көстүүтэ",
@@ -866,6 +885,11 @@
"prefs-personal": "Кыттааччы туруоруулара",
"prefs-rc": "Кэлиҥҥи уларытыылар",
"prefs-watchlist": "Кэтээһин",
+ "prefs-editwatchlist": "Кэтэбил тиһилигин уларытыы",
+ "prefs-editwatchlist-label": "Кэтэбилиҥ тиһилигин уларытыы:",
+ "prefs-editwatchlist-edit": "Кэтэбилиҥ тиһилигин көрүү, ааттары сотуу",
+ "prefs-editwatchlist-raw": "Кэтэбил тиһилигин тиэкис курдук уларытыы",
+ "prefs-editwatchlist-clear": "Кэтэбил тиһилигин ыраастаа",
"prefs-watchlist-days": "Хас хонуктааҕы уларыйыылар кэтээһин испииһэгэр көстөллөрө:",
"prefs-watchlist-days-max": "Уһаабыта {{PLURAL:$1|биир күн|$1 күн}}",
"prefs-watchlist-edits": "Хас уларытыыны тупсарыллыбыт кэтээһиҥҥэ көрдөрөрө:",
@@ -936,7 +960,7 @@
"gender-female": "Кини биики сирэйдэри уларытар",
"prefs-help-gender": "Маны туруорар булгуччута суох. \nБырагыраамма сорох дьоҥҥо туһаайыллыбыт биллэриилэригэр эбэтэр кинилэргэ сыһыаннаах этиилэригэр кытааччы дьахтарыттан эбэтэр эр киһититтэн көрөн этии тутулун уларытан биэриэн сөп. \nТуора дьоҥҥо көстөр бэлиэтээһин.",
"email": "Почта",
- "prefs-help-realname": "Сурукка киирбит аатыҥ (булгуччута суох): ким бу сирэйи уларыппытын көрдөрөргө туттуллар",
+ "prefs-help-realname": "Сурукка киирбит аатыҥ булгуччута суох. Суруйдаххына ааптар быһыытынан ыйыллар буолуоҥ.",
"prefs-help-email": "Электроннай аадырыһы суруйар булгуччута суох, ол эрээри киирии тылгын умуннаххына санатарга көмөлөһүө.",
"prefs-help-email-others": "Эбии. Атын кыттааччылар Эйигин кытта электроннай почтаҕын билбэккэ эрэ суруйсар кыахтаныахтара.",
"prefs-help-email-required": "E-mail баар буолуохтаах.",
@@ -954,8 +978,10 @@
"prefs-advancedwatchlist": "Дириҥэтиллибит туруоруулар",
"prefs-displayrc": "Туруоруулары көрдөр",
"prefs-displaywatchlist": "Көстүүтүн туруоруулара",
+ "prefs-tokenwatchlist": "Токен",
"prefs-diffs": "Уратылара",
"prefs-help-prefershttps": "Аныгыскы киириигэр үлэлиир буолуо.",
+ "prefswarning-warning": "Туруорууларгын уларыппыккын ол эрэн бигэргэппэтэххин.\nБу сирэйтэн «$1» баттамы баттаабакка таҕытаххына, барыта уруккутунан хаалыа.",
"prefs-tabs-navigation-hint": "Сүбэ: Көмпүүтэриҥ клаватууратын стрелкаларын туһанан кыбытыктан кыбытыкка көһүөххүн сөп.",
"email-address-validity-valid": "Сөп курдук көстөр",
"email-address-validity-invalid": "Алҕаһа суох аадырыс ирдэнэр",
@@ -1029,7 +1055,8 @@
"right-deletedtext": "Сотуллубут тиэкиһи уонна сотуллубут сирэйдэр бэйэ-бэйэлэрин ыккардыларыгар уратыларын көрүү",
"right-browsearchive": "Сотуллубут сирэйдэри көрдөөһүн",
"right-undelete": "Сотуллубут сирэйи хат киллэрии",
- "right-suppressrevision": "Администраатардартан кистэммит сирэйдэри көрүү уонна урукку барылларыгар төннөрүү",
+ "right-suppressrevision": "сирэйдэр кистэммит барылларын көрүү, кистээһин уонна көстөр гыныы",
+ "right-viewsuppressed": "бары кыттааччылартан кистэммит барыллары көрүү",
"right-suppressionlog": "Атын дьон сурунаалларын көрүү",
"right-block": "Атын кыттааччылар уларыталларын бобуу",
"right-blockemail": "Эл. суругу ыытары бобуу",
@@ -1040,6 +1067,7 @@
"right-protect": "Сирэйдэр көмүскэллэрин таһымын уонна каскаадынан көмүскэммит сирэйдэри уларытыы",
"right-editprotected": "Уларытыллар сирэйдэр \"{{int:protect-level-sysop}}\" таһымынан көмүскэммиттэр",
"right-editsemiprotected": "Уларытыллар сирэйдэр \"{{int:protect-level-autoconfirmed}}\" таһымынан көмүскэммиттэр",
+ "right-editcontentmodel": "Сирэй ис тутулун уларытыы",
"right-editinterface": "Кыттааччы интерфейсын уларытыы",
"right-editusercssjs": "Атын кыттааччылар CSS- и JS-билэлэрин уларытыы",
"right-editusercss": "Атын кыттааччылар CSS-билэлэрин уларытыы",
@@ -1067,6 +1095,7 @@
"right-override-export-depth": "сирэйдэри таһаарааһын (экспортааһын), ситимнээх сирэйдэри 5-с таһымҥа дылы холбоон туран",
"right-sendemail": "Атын кыттааччыларга эл. почтаны ыытарга",
"right-passwordreset": "Киирии тылы почта нөҥүө уларытыыны көрүү",
+ "right-managechangetags": "[[Special:Tags|Бэлиэлэри]] билии олоҕуттан ылыы уонна сотуу",
"newuserlogpage": "Кыттааччылары бэлиэтиир сурунаал",
"newuserlogpagetext": "Соторутааҕыта бэлиэтэммит кыттааччылар.",
"rightslog": "Кыттаачы бырааптарын сурунаала",
@@ -1112,6 +1141,8 @@
"action-viewmywatchlist": "кэтиир тиһиккин көрүү",
"action-viewmyprivateinfo": "бэйэҥ тускунан көрүү",
"action-editmyprivateinfo": "бэйэҥ тускунан суруллубуту уларыт",
+ "action-editcontentmodel": "сирэй ис тутулун уларытыы",
+ "action-managechangetags": "билии олоҕор бэлиэлэри оҥоруу уонна сотуу",
"nchanges": "$1 {{PLURAL:$1|уларытыы|уларытыылар}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|тиһэх сылдьыыгыттан}}",
"enhancedrc-history": "устуоруйата",
@@ -1127,7 +1158,7 @@
"recentchanges-label-plusminus": "Сирэй кээмэйэ бачча баайтынан уларыйбыт",
"recentchanges-legend-heading": "'''Легендата:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (өссө көр: [[Special:NewPages|Саҥа сирэйдэр тиһиктэрэ]])",
- "rcnotefrom": "Улартыылар бу кэмтэн ыла көрдөрүлүннүлэр: <strong>$2</strong> (мантан элбэх көрдөрүллүбэтэ: <strong>$1</strong>).",
+ "rcnotefrom": "Манна {{PLURAL:$5|уларытыы көрдөрүлүннэ|уларытыылар көһүннүлэр}} баччаттан <strong>$3, $4</strong> (баччаттан элбэх көстүбэт <strong>$1</strong>).",
"rclistfrom": "Бу кэм $3 $2 кэнниттэн оҥоһуллубуттары көрдөр",
"rcshowhideminor": "$1 кыра уларыйыылары",
"rcshowhideminor-show": "Көрдөр",
@@ -1181,9 +1212,9 @@
"uploaderror": "Билэ суруллубата",
"upload-recreate-warning": "'''Болҕой. Маннык ааттаах билэ хаһан эрэ сотуллубут эбэтэр аата уларытыллыбыт.''\n\nСотуу уонна аат уларытыытын сурунаала аллара көстөр:",
"uploadtext": "Бу форманы туһанан сиэрбэргэ билэлэри суруйуоххун сөп.\nУрут суруллубут билэлэри көрөргө манна тиий: [[Special:FileList|ойуулар тиһиктэрэ]]. Билэлэри суруйуу уонна иккистээн суруйуу устуоруйата [[Special:Log/upload|манна]], сотуу устуоруйата [[Special:Log/delete|манна]] көстөллөр.\n\nОйууну ыстатыйаҕа киллэрэргэ маннык суруйуллар:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' ойуу хайдах баарынан (кыччаппакка)\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|хос быһаарыы]]</nowiki></code>''' 200 пииксэл кэтиттээх аллараа өттүгэр быһаарыы суруктаах экран хаҥас кырыытыгар сыстар ойуу\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' - ойууну бэйэтин көрдөрбөккө сигэтин эрэ көрдөрүү.",
- "upload-permitted": "Көҥүллэммит билэ көрүҥнэрэ: $1.",
- "upload-preferred": "Маннык билэ көрүҥнэрин туһанар ордук: $1.",
- "upload-prohibited": "Маннык билэ көрүҥнэрэ бобуллубуттар: $1.",
+ "upload-permitted": "Көҥүллэммит билэ {{PLURAL:$2|көрүҥэ|көрүҥнэрэ}}: $1.",
+ "upload-preferred": "Билэ маннык {{PLURAL:$2|көрүҥүн|көрүҥнэрин}} туһанар ордук: $1.",
+ "upload-prohibited": "Билэ маннык {{PLURAL:$2|көрүҥэ бобуллубут|көрүҥнэрэ бобуллубуттар}}: $1.",
"uploadlogpage": "Уларытыы устуоруйата",
"uploadlogpagetext": "Манна бүтэһик уларытыылар тиһиктэрэ көстөр.\nӨссө [[Special:NewFiles|саҥа билэлэр]] тиһиктэрин көрүөххүн сөп.",
"filename": "Билэ аата",
@@ -1219,9 +1250,9 @@
"largefileserver": "Билэ ыйааһына көҥүллэммиттэн ордук.",
"emptyfile": "Суруйбут билэҥ арааһа кураанах быһылаах. Баҕар билэ аатын сыыһа суруйбутуҥ буолаарай. Өссө төгүл көр.",
"windows-nonascii-filename": "Бу биики ASCII табылыыссатыгар суох бэлиэлэри өйөөбөт..",
- "fileexists": "Инник ааттаах билэ бэлиэр баар эбит, ону уларытыаххын саарбахтыыр буоллаххына - маны көр <strong>[[:$1]]</strong>.\n[[$1|thumb]]",
+ "fileexists": "Маннык ааттаах билэ бэлиэр баар эбит, ону солбуйуоххун саарбахтыыр буоллаххына - маны көр <strong>[[:$1]]</strong>.\n[[$1|thumb]]",
"filepageexists": "Бу билэни быһаарар сирэй урут бу аатынан оҥоһуллубут эбит: <strong>[[:$1]]</strong>, ол гынан баран маннык ааттаах сирэй суох.\nКиллэрбит быһаарыыҥ быһаарыы сирэйигэр тахсыа суоҕа.\nСаҥа быһаарыыны эбэр буоллаххына илиигинэн уларытыаххын наада.\n[[$1|thumb]]",
- "fileexists-extension": "Майгынныыр ааттаах билэ баар: [[$2|thumb]]\n* Эн суруйбут билэҥ аата: <strong>[[:$1]]</strong>\n* Уруккуттан баар билэ аата: <strong>[[:$2]]</strong>\nАтын аатта таларыҥ буоллар.",
+ "fileexists-extension": "Майгынныыр ааттаах билэ баар: [[$2|thumb]]\n* Эн суруйбут билэҥ аата: <strong>[[:$1]]</strong>\n* Уруккуттан баар билэ аата: <strong>[[:$2]]</strong>\nОрдук уратылаах аатта талыаххын баҕарбаккын дуо?",
"fileexists-thumbnail-yes": "Ойуу арааһа кыччатыллыбыт ойуу (миниатюра) быһыылаах. [[$1|thumb]]\nКөр <strong>[[:$1]]</strong>.\nБу ойуу урукку ойуу кыччатыллыбыта буоллаҕына суруйар наадата суох.",
"file-thumbnail-no": "Билэ аата мантан саҕаланар <strong>$1</strong>.\nАрааһа ойуу кыра куоппуйата быһыылаах ''(миниатюра)''.\nБу ойуу толору барыйаана баар буоллаҕына ону манна суруй, эбэтэр аатын уларыт.",
"fileexists-forbidden": "Маннык ааттаах билэ баар, хат суруллар кыаҕа суох.\n\nСин биир бу билэни киллэриэххин баҕарар буоллаххына төннөн атыннык ааттаа. [[File:$1|thumb|center|$1]]",
@@ -1340,9 +1371,11 @@
"license": "Лицензиялааһын:",
"license-header": "Лицензиялааһын",
"nolicense": "Талыллыбатах",
+ "licenses-edit": "Лиссиэнсийэ ымпыгын-чымпыгын уларыт",
"license-nopreview": "(Уларытыыны бигэргэтиэх иннинэ көрүү сатаммат)",
- "upload_source_url": " (сөптөөх URL, ким баҕарбыт киирэр сирэ)",
- "upload_source_file": " (билэ көмпүүтэргэр баар)",
+ "upload_source_url": "(сөптөөх URL, ким баҕарбыт киирэр сирин талбыккын)",
+ "upload_source_file": "(көмпүүтэргэр баар билэни талбыккын)",
+ "listfiles-delete": "сотуу",
"listfiles-summary": "Бу анал сирэй киллэриллибит билэлэри барытын көрдөрөр.",
"listfiles_search_for": "Миэдьийэни (ойууну) аатынан көрдөтүү:",
"imgfile": "билэ",
@@ -1416,7 +1449,7 @@
"filedelete-maintenance": "Көрүү-истии үлэтин кэмигэр билэлэри сотуу уонна төннөрүү быстах кэмҥэ тохтотулунна.",
"filedelete-maintenance-title": "Билэни сотор табыллыбата",
"mimesearch": "MIME көрдөөһүн",
- "mimesearch-summary": "Бу сирэй MIME көрүҥнээх фильтрдааһыны көҥүллүүр. Киллэрии: contenttype/subtype, холобур <code>image/jpeg</code>.",
+ "mimesearch-summary": "Бу сирэй билэлэри MIME көрүҥнэринэн наардыыры хааччыйар. Киллэрии: contenttype/subtype, холобур <code>image/jpeg</code>.",
"mimetype": "MIME көрүҥэ:",
"download": "хачайдаан ылыы",
"unwatchedpages": "Ким да кэтээбэт сирэйдэрэ",
@@ -1432,12 +1465,13 @@
"randomincategory": "Категория түбэспиччэ ыстатыйата",
"randomincategory-invalidcategory": "\"$1\" диэн категория суох эбит.",
"randomincategory-nopages": "Бу категорияҕа [[:Category:$1]] киирэр ыстатыйалар суохтар.",
+ "randomincategory-category": "Категория:",
+ "randomincategory-legend": "Категория түбэспиччэ ыстатыйата",
"randomredirect": "Түбэспиччэ утаарыы",
"randomredirect-nopages": "Бу аат далыгар($1) көһөрөр ыйынньыктар суохтар.",
"statistics": "Статистика",
"statistics-header-pages": "Сирэй статиистиката",
"statistics-header-edits": "Көннөрүү статиистиката",
- "statistics-header-views": "Көрөөһүн статистиката",
"statistics-header-users": "Кыттааччылар статиистикалара",
"statistics-header-hooks": "Атын статистика",
"statistics-articles": "Ыстатыйалар ахсааннара",
@@ -1446,13 +1480,9 @@
"statistics-files": "Киллэриллибит билэлэр (ойуулар иҥин) ахсааннара",
"statistics-edits": "{{SITENAME}} оҥоһуллуоҕуттан көннөрүү ахсаана",
"statistics-edits-average": "Биир сирэйгэ ортотунан хас көннөрүү тиксэрэ",
- "statistics-views-total": "Көрүү ахсаана",
- "statistics-views-total-desc": "Суох уонна аналлаах сирэйдэри көрүү ааҕыллыбат",
- "statistics-views-peredit": "Биир улартыыга тиксэр көрүү ахсаана",
"statistics-users": "Бэлиэтэммит [[Special:ListUsers|кыттааччы]] ахсаана",
"statistics-users-active": "Көхтөөх кыттааччылар ахсааннара",
"statistics-users-active-desc": "Ааспыт {{PLURAL:$1|биир хонук иһигэр|$1 хонукка}} тугу эмэ оҥорбут кыттааччылар",
- "statistics-mostpopular": "Саамай элбэхтик көрүллэр ыстатыйалар",
"pageswithprop": "Эрдэттэн туруоруулаах сирэйдэр",
"pageswithprop-legend": "Уларытыллыбыт туруоруулаах сирэйдэр",
"pageswithprop-text": "Манна сорох туруоруулара уларытыллыбыт сирэйдэр көстүбүттэр.",
@@ -1493,7 +1523,6 @@
"uncategorizedtemplates": "Ханнык да категорияҕа киирбэтэх халыыптар",
"unusedcategories": "Туттуллубатах категориялар",
"unusedimages": "Туттулубатах билэлэр",
- "popularpages": "Элбэх киһи көрөр сирэйдэрэ",
"wantedcategories": "Көрдөнүллэр категориялар",
"wantedpages": "Көрдөнүллэр сирэйдэр",
"wantedpages-badtitle": "Көрдөбүл түмүгэр сыыһалаах аат баар: $1",
@@ -1555,7 +1584,7 @@
"querypage-disabled": "Бу анал сирэй тиһилик үлэтин түргэтэтээри араарыллыбыт.",
"booksources": "Кинигэлэр источниктара",
"booksources-search-legend": "Кинигэ туһунан көрдөө",
- "booksources-go": "Бул",
+ "booksources-search": "Бул",
"booksources-text": "Манна кинигэ туһунан атын саайтарга ыйынньыктар хомулуннулар, онно баҕар эбии информация көстүөҕэ.",
"booksources-invalid-isbn": "ISBN, арааһа, сыыһалаах. Нүөмэр көһөрөргө алҕас тахсыбатаҕын хат көр эрэ.",
"specialloguserlabel": "Толорооччу:",
@@ -1631,7 +1660,7 @@
"trackingcategories-name": "Этии аата",
"trackingcategories-desc": "Категорияҕа киирии киритиэрийэ",
"noindex-category-desc": "Бу сирэйи көрдүүр роботтар болҕомотоҕо ылбаттар, тоҕо диэтэххэ <code><nowiki>__NOINDEX__</nowiki></code> диэн «аптаах тыл» туттуллубут. Сирэй инньэ гынарга көҥүллэммит аат далыгар баар эбит.",
- "index-category-desc": "Сирэйгэ __INDEX__ диэн «аптаах тыл» баар эбит (сирэй ону көҥүллүүр аат далыгар баар эбит), онон көрдүүр роботтар кинини болҕомтоҕо ылыа да суох түгэннэргэ көрөллөр эбит.",
+ "index-category-desc": "Сирэйгэ <nowiki>__INDEX__</nowiki> диэн «аптаах тыл» баар эбит (сирэй ону көҥүллүүр аат далыгар баар эбит), онон көрдүүр роботтар кинини болҕомтоҕо ылыа да суох түгэннэргэ көрөллөр эбит.",
"post-expand-template-inclusion-category-desc": "Халыыптары барытын көрөдөрдөххө сирэй кээмэйэ маннааҕар улаатыа <code>$wgMaxArticleSize</code>, ол иһин сорох халыыптар көрдөрүллүбэтилэр.",
"post-expand-template-argument-category-desc": "Халыып аргуменын арыйдахха (фигурнай ускуопка иһигэр баары, холобур, <code>{{{Foo}}})</code>, сирэй маннааҕар улахан буолуо: <code>$wgMaxArticleSize</code>.",
"expensive-parserfunction-category-desc": "Сирэйгэ наһаа элбэх ресурсаны сиир функция туттуллубут (холобур, маннык <code>#ifexist</code>). Сиһилии — бу сирэйгэ: [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
@@ -1691,7 +1720,7 @@
"wlheader-enotif": "Эл. почтанан биллэрии холбоммут.",
"wlheader-showupdated": "Бүтэһик киирииҥ кэннэ уларыйбыт сирэйдэр '''модьу''' бичигинэн бэлиэтэннилэр.",
"wlnote": "Манна кэлиҥҥи {{PLURAL:$2|чаас|'''$2''' чаас}} иһигэр оҥоһуллубут бүтэһик $1 уларытыы көрдөрүлүннэ, бу кэмҥэ туругунан $3 $4.",
- "wlshowlast": "бүтэһик $1 чааска $2 күҥҥэ $3 көрдөр",
+ "wlshowlast": "бүтэһик $1 чааска $2 күҥҥэ көрдөр",
"watchlist-options": "Кэтээн көрүү туруоруутун уларытыы",
"watching": "Кэтээ...",
"unwatching": "Кэтээмэ...",
@@ -1739,7 +1768,6 @@
"delete-warning-toobig": "Бу сирэй уларыылара уһун историялаах, хас да ($1) {{PLURAL:$1|хат көрүүлээх|хат көрүүлэрдээх}}. Маны соттоххуна, {{SITENAME}} билэтин тиһигин алдьатыан сөп; салгыыр буоллаххына сэрэнэн үлэлээ.",
"deleting-backlinks-warning": "'''Сэрэтии.''' Сотоору гынар сирэйгэр [[Special:WhatLinksHere/{{FULLPAGENAME}}|атын сирэйдэр]] сигэнэллэр эбит.",
"rollback": "Уруккутугар төннөр",
- "rollback_short": "Төннөрүү",
"rollbacklink": "төннөр",
"rollbacklinkcount": "$1 көннөрүүнү суох гын",
"rollbacklinkcount-morethan": "$1 элбэх көннөрүүнү суох гын",
@@ -2159,18 +2187,14 @@
"import-rootpage-nosubpage": "\"$1\" тирэх сирэй аатын далыгар сирэй үөдүҥнэрэ (подстраницалар) көҥүллэммэттэр",
"importlogpage": "Импорт сурунаала",
"importlogpagetext": "Сирэйдэри историяларын кытта холбуу атын биикилэртэн импортааһын.",
- "import-logentry-upload": "[[$1]] - билэттэн импортааһын",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|барыл|барыл баар}}",
- "import-logentry-interwiki": "биикилэр ыккардыларынааҕы $1",
"import-logentry-interwiki-detail": "барыта $2 барылтан $1 барыл",
"javascripttest": "JavaScript тургутуу",
- "javascripttest-title": "$1 тургутуу бара турар",
"javascripttest-pagetext-noframework": "Бу сирэй JavaScript тургутууларга анаммыт.",
"javascripttest-pagetext-unknownframework": "\"$1\" тургутуу биллибэт эйгэтэ.",
"javascripttest-pagetext-frameworks": "Бука диэн, бу тургуутуу эйгэлэриттэн биирин тал: $1",
"javascripttest-pagetext-skins": "Тургутууну ыытарга тас көрүҥүн бастаан тал:",
"javascripttest-qunit-intro": "[$1 тургутуу документациятын] манна mediawiki.org көр.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit test suite",
"tooltip-pt-userpage": "Кыттааччы быһыытынан тус сирэйиҥ",
"tooltip-pt-anonuserpage": "Билигин киирбит IP-м сирэйэ",
"tooltip-pt-mytalk": "Кэпсэтэр-ырытар сириҥ",
@@ -2180,6 +2204,7 @@
"tooltip-pt-mycontris": "Суруйбут/уларыппыт сирэйдэриҥ тиһиктэрэ",
"tooltip-pt-login": "Манна бэйэҕин билиһиннэриэххин сөп (булгуччута суох).",
"tooltip-pt-logout": "Тахсыы",
+ "tooltip-pt-createaccount": "Манна киирэргэ бэлиэтэнэр уонна куруук ол аатынан киирэр ордук; ол булгуччута суох",
"tooltip-ca-talk": "Ыстатыйаны ырытыы",
"tooltip-ca-edit": "Бу сирэйи уларытыахха сөп. Бука диэн бастаан хайдах буоларын көрөн баран уларыт.",
"tooltip-ca-addsection": "Саҥа салааны саҕалааһын",
@@ -2272,7 +2297,6 @@
"pageinfo-robot-policy": "Роботтар көрдөөһүннэрин туруга",
"pageinfo-robot-index": "Көҥүллэммит",
"pageinfo-robot-noindex": "Араарыллыбыт",
- "pageinfo-views": "Көрүү ахсаана",
"pageinfo-watchers": "Кэтээнэр сирэйдэр ахсааннара",
"pageinfo-few-watchers": "$1 кыттааччыттан аҕыйах кэтээччи",
"pageinfo-redirects-name": "Бу сирэйгэ утаарыы ахсаана",
@@ -2725,7 +2749,6 @@
"exif-urgency-low": "Намыһах ($1)",
"exif-urgency-high": "Үрдүк ($1)",
"exif-urgency-other": "Кыттааччы эппит приоритета ($1)",
- "watchlistall2": "бары",
"namespacesall": "бары",
"monthsall": "бары",
"confirmemail": "Электроннай аадырыһы бигэргэтии",
@@ -2783,6 +2806,7 @@
"autosumm-replace": "Сирэй иһэ уларытыллыбыт: '$1'",
"autoredircomment": "Утаарыы: [[$1]]",
"autosumm-new": "'$1' ыйааһыннаах саҥа сирэй оҥоһулунна",
+ "autosumm-newblank": "Кураанах сирэй оҥоһулунна",
"size-bytes": "$1 байт",
"lag-warn-normal": "$1 {{PLURAL:$1|сөкүүндэ|сөкүүндэ}} иһинэн оҥоһуллубут уларытыылар манна көстүө суохтарын сөп.",
"lag-warn-high": "Синхронизация лаппа хойутуур буолан кэнники $1 {{PLURAL:$1|сөкүүндэ|сөкүүндэ}} иһинэн оҥоһуллубут уларытыылар манна көстүө суохтарын сөп.",
@@ -2812,7 +2836,6 @@
"watchlisttools-edit": "Кэтэбил испииһэгин көрүү/уларытыы",
"watchlisttools-raw": "\"Сиикэй\" испииһэги уларытыы",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ырытыы]])",
- "unknown_extension_tag": "Биллибэт тиэг \"$1\"",
"duplicate-defaultsort": "Болҕой: Наардааһын «$2» күлүүһэ урукку «$1» күлүүһү сабар (Ключ сортировки переопределяет прежний ключ).",
"version": "MediaWiki барыла (биэрсийэтэ)",
"version-extensions": "Туруоруллубут расширениялар",
@@ -2828,10 +2851,12 @@
"version-parser-function-hooks": "Синтаксииһы анаалыстыыр тэрил функциятын перехватчиктара",
"version-hook-name": "Перехватчик аата",
"version-hook-subscribedby": "Суруттарыыта:",
- "version-version": "(Торум $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[аата суох]",
"version-license": "MediaWiki лиссиэнсийэтэ",
"version-ext-license": "Лиссиэнсийэ",
"version-ext-colheader-name": "Кэтирэтии",
+ "version-skin-colheader-name": "Тас көстүү",
"version-ext-colheader-version": "Барыл",
"version-ext-colheader-license": "Лиссиэнсийэ",
"version-ext-colheader-description": "Быһаарыыта",
@@ -2851,6 +2876,8 @@
"version-entrypoints": "Киирэр аадырыстар (URL)",
"version-entrypoints-header-entrypoint": "Киирии сирэ",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Олордуллубут бибилэтиэкэлэр",
+ "version-libraries-library": "Бибилэтиэкэ",
"redirect": "Билэттэн, кыттааччыттан, сирэйтэн эбэтэр барыл идентификаторыттан утаарыы",
"redirect-legend": "Билэҕэ эбэтэр сирэйгэ утаарыы",
"redirect-summary": "Бу аналлаах сирэй билэҕэ (билэ аатыттан), сирэйгэ (барыл эбэтэр сирэй идентификааторыттан) эбэтэр кыттааччы сирэйигэр (кыттааччы идентификаторыттан) утаарар. Туһаныы: \n[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], \n[[{{#Special:Redirect}}/revision/328429]] эбэтэр\n[[{{#Special:Redirect}}/user/101]].",
@@ -2886,6 +2913,7 @@
"specialpages-group-wiki": "Дааннайдара уонна тэриллэрэ",
"specialpages-group-redirects": "Утаарар аналлаах сирэйдэр",
"specialpages-group-spam": "Спаамы утары үнүстүрүмүөннэр",
+ "specialpages-group-developer": "Оҥорооччу тэриллэрэ (үнүстүрүмүөннэрэ)",
"blankpage": "Кураанах сирэй",
"intentionallyblankpage": "Бу сирэй соруйан кураанах хаалларыллыбыт",
"external_image_whitelist": " #Бу устуруоканы хайдах баарынан хааллар<pre>\n#Разместите здесь фрагменты регулярных выражений (бу бэлиэлэр ыккардыларыгар баарын //)\n#Таска баар ойуулар URL-ларын кытта дьүөрэлэниэхтэрэ.\n#Сатанар буоллаҕына ойуу курдук көстүөхтэрэ, ол сатамматаҕына ойууга сигэ курдук.\n#Бу # бэлиэттэн саҕаланар строкаалар быһаарыы сурук курдук ааҕыллыахтара.\n#Устуруока буукуба улаханыттан-кыратыттан тутулуктаах\n\n#Размещайте фрагменты регулярных выражений над этой строчкой. Бу устуруоканы хайдах баарынан хааллар.</pre>",
@@ -2904,6 +2932,13 @@
"tags-active-no": "Суох",
"tags-edit": "уларытыы",
"tags-hitcount": "$1 {{PLURAL:$1|уларытыы|уларытыылар}}",
+ "tags-create-tag-name": "Бэлиэ аата:",
+ "tags-create-reason": "Төрүөтэ:",
+ "tags-create-submit": "Оҥоруу",
+ "tags-create-no-name": "Бэлиэ аатын суруйуохтааххын.",
+ "tags-create-invalid-chars": "Бэлиэ аатыгар сопутуой (<code>,</code>) эбэтэр слэш (<code>/</code>) буолуохтаах.",
+ "tags-create-invalid-title-chars": "Тиэк аатыгар сирэй баһыгар туттуллуо суохтаах бэлиэ киириэ суохтаах",
+ "tags-create-already-exists": "«$1» тиэк хайыы-үйэ баар эбит.",
"comparepages": "Сирэйдэри тэҥнииргэ",
"compare-page1": "Бастакы сирэй",
"compare-page2": "Иккис сирэй",
@@ -2971,20 +3006,22 @@
"logentry-rights-rights": "$3 бөлөхтөргө киириитин $1 уларыппыт: манныктан $4 манныкка $5",
"logentry-rights-rights-legacy": "$3 бөлөхтөргө киириитин $1 уларыппыт",
"logentry-rights-autopromote": "$1 мантан $4 манна $5 көһөрүллүбүт",
+ "logentry-upload-upload": "$1 {{GENDER:$2|укпут}} $3",
"rightsnone": "(суох)",
+ "revdelete-summary": "уларытыылар туһунан",
+ "feedback-adding": "Сирэй туһунан санаа этии...",
+ "feedback-bugcheck": "Бэрт! Ол гынан баран [$1 биллэр алҕастарын] тиһилигэр майгынныыр сурук суоҕун тургут.",
+ "feedback-bugnew": "Мин тургуттум. Атын алҕас туһунан",
"feedback-bugornote": "Туох кыһалҕаны көрсүбүккүн сиһилии суруйар кыахтаах буоллаххына, бука диэн [$1 алҕас туһунан биллэр].\nОл сатаммат буоллаҕына бу судургу форманы толор. Эн этииҥ ааккын уонна туһанар браузерыҥ аатын кытта манна «[$3 $2]» бэчээттэниэ.",
- "feedback-subject": "Тиэмэ:",
- "feedback-message": "Сурук:",
"feedback-cancel": "Салҕаама",
- "feedback-submit": "Санаа этиитэ",
- "feedback-adding": "Сирэй туһунан санаа этии...",
+ "feedback-close": "Сатанна",
"feedback-error1": "Алҕас: API биллибэт түмүгэ",
"feedback-error2": "Алҕас: Көннөрүү сатаммата",
"feedback-error3": "Алҕас: API хоруйдаабата",
+ "feedback-message": "Сурук:",
+ "feedback-subject": "Тиэмэ:",
+ "feedback-submit": "Ыыт",
"feedback-thanks": "Махтал! Эн санааҥ бу сирэйгэ \"[$2 $1]\" сурулунна.",
- "feedback-close": "Сатанна",
- "feedback-bugcheck": "Бэрт! Ол гынан баран [$1 биллэр алҕастарын] тиһилигэр майгынныыр сурук суоҕун тургут.",
- "feedback-bugnew": "Мин тургуттум. Атын алҕас туһунан",
"searchsuggest-search": "Көрдөөһүн",
"searchsuggest-containing": "тыл баар ыстатыйалара...",
"api-error-badaccess-groups": "Эн бу биикигэ билэ киллэрэриҥ хааччахтаммыт.",
@@ -3062,5 +3099,42 @@
"expand_templates_remove_nowiki": "Түмүккэ <nowiki> бэлиэни аахсыма",
"expand_templates_generate_xml": "XML-ы мас курдук көрдөр",
"expand_templates_generate_rawhtml": "HTML-ы көрдөр",
- "expand_templates_preview": "Холоон көрүү"
+ "expand_templates_preview": "Холоон көрүү",
+ "pagelang-name": "Сирэй",
+ "pagelang-language": "Омугун тыла",
+ "pagelang-use-default": "Сүрүн тылы тутун",
+ "pagelang-select-lang": "Тылы талыы",
+ "right-pagelang": "Сирэй тылын уларыт",
+ "action-pagelang": "сирэй тылын уларытар буол",
+ "log-name-pagelang": "Тылы уларытыы сурунаала",
+ "mediastatistics-nbytes": "$1 баайт ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME көрүҥэ",
+ "mediastatistics-table-count": "Билэ ахсаана",
+ "mediastatistics-table-totalbytes": "Барытын кээмэйэ",
+ "mediastatistics-header-unknown": "Биллибэт",
+ "mediastatistics-header-bitmap": "Растр ойуулар",
+ "mediastatistics-header-drawing": "Уруһуйдар (вектор ойуулар)",
+ "mediastatistics-header-audio": "Аудио",
+ "mediastatistics-header-video": "Видео",
+ "mediastatistics-header-office": "Офис",
+ "mediastatistics-header-text": "Тиэкис",
+ "mediastatistics-header-executable": "Толоруллар",
+ "mediastatistics-header-archive": "Ыгыллыбыт формааттар",
+ "json-warn-trailing-comma": "JSON иһиттэн $1 ордук соппутуой сотуллубут",
+ "special-characters-group-latin": "Латыынныы",
+ "special-characters-group-latinextended": "Латыынныы кэтирэтиллибиттэр",
+ "special-characters-group-ipa": "МФА (IPA)",
+ "special-characters-group-symbols": "Бэлиэлэр",
+ "special-characters-group-greek": "Гириэктии",
+ "special-characters-group-cyrillic": "Кириллица",
+ "special-characters-group-arabic": "Араабтыы",
+ "special-characters-group-persian": "Персия",
+ "special-characters-group-hebrew": "Иврит",
+ "special-characters-group-bangla": "Бенгаал",
+ "special-characters-group-telugu": "Телугу",
+ "special-characters-group-sinhala": "Сингаал",
+ "special-characters-group-gujarati": "Гудьараат",
+ "special-characters-group-thai": "Таай",
+ "special-characters-group-lao": "Лаос",
+ "special-characters-group-khmer": "Кхмер"
}
diff --git a/languages/i18n/sat.json b/languages/i18n/sat.json
index 08111901..f3d16061 100644
--- a/languages/i18n/sat.json
+++ b/languages/i18n/sat.json
@@ -396,14 +396,12 @@
"passwordreset-emailsent-capture": "Mit́ṭen disạ ruaṛaḱ e-mail dokulena, oka do latarre ńeloḱ kana.",
"passwordreset-emailerror-capture": "Disạ ruạṛ oco lạgit́te mit́ṭen e-mail tear hoelena, oka do latarre udugoḱkana, menkhan $1 beoharić ṭhen ṭhen baṅ kul hoe akana.",
"changeemail": "E-mail ṭhikạna do bodolme",
- "changeemail-header": "Ekaunṭ e-mail ṭhikạna do bodolme",
"changeemail-text": "Amaḱ e-mail ṭhikạna bodol lạgit́te noa forom purao me. Am do noa sariyaḱ lạgit́te amaḱ oku nambar em jạruṛtama.",
"changeemail-no-info": "Noa sakam sojhete laṛcaṛ lạgit́te am do bhitri boloḱ hoyoḱtama.",
"changeemail-oldemail": "Nitaḱ e-mail ṭhikạna:",
"changeemail-newemail": "Nãwã e-mail ṭhikạna:",
"changeemail-none": "(Okaṭaḱ hõ baṅ)",
"changeemail-submit": "E-mail bodolme",
- "changeemail-cancel": "Badme",
"bold_sample": "Moṭa onol",
"bold_tip": "Moṭa onol",
"italic_sample": "Beka onol",
@@ -565,7 +563,6 @@
"search-interwiki-more": "(Arhõ)",
"searchrelated": "songenko",
"searchall": "Sanam",
- "showingresultsheader": "'''$4''' lạgit́ {{PLURAL:$5|Pho̠l ńamoḱ́akan - '''$1''' of '''$3'''|Pho̠l ńamoḱ́akan '''$1 - $2''' of '''$3'''}}",
"search-nonefound": "Kupuli leka roṛruạṛ bạnuḱa",
"powersearch-togglelabel": "Sendra",
"powersearch-toggleall": "Sanamaḱ",
@@ -701,7 +698,6 @@
"pager-older-n": "{{PLURAL:$1 arhõ mare 1ṭen arhõ mare $1ṭen}}",
"booksources": "Puthi ńamoḱ ṭhại/jayga",
"booksources-search-legend": "Puthi reak ṭhai sendrayme",
- "booksources-go": "Calaḱme",
"log": "Cạbiko",
"allpages": "joto sakam",
"allarticles": "Sanam sakam",
@@ -731,7 +727,7 @@
"watch": "Ńelme",
"unwatch": "bang nelok' a",
"watchlist-details": "Baṅ purạo tạlikare {{PLURAL:$1ṭen sakam $1 ṭen sakam}} menaḱa (roṛ sakamko lekhare baṅ sapkate)",
- "wlshowlast": "Mucạtet́ udukmẽ $1 baje $2 maha $3",
+ "wlshowlast": "Mucạtet́ udukmẽ $1 baje $2 maha",
"watchlist-options": "Ńelok tạlika reak sonketko",
"watching": "Ńeloḱ kana...",
"changed": "Bodolena",
@@ -889,7 +885,6 @@
"exif-imagelength": "Usul",
"exif-datetime": "Rẽt bodol reaḱ tạrikh ar okte",
"exif-artist": "Onoliạ",
- "watchlistall2": "Sanam, sanamak, sanamko",
"namespacesall": "sanam",
"monthsall": "Sanamak",
"watchlisttools-view": "Jońgṛao bodolaḱko ńel",
diff --git a/languages/i18n/sc.json b/languages/i18n/sc.json
index 423ce386..4eb51675 100644
--- a/languages/i18n/sc.json
+++ b/languages/i18n/sc.json
@@ -16,18 +16,18 @@
"tog-hideminor": "Cua is acontzos minores in sa pàgina de is ùrtimas mudàntzias",
"tog-hidepatrolled": "Cua is mudas verificadas in is ùrtimos càmbios",
"tog-newpageshidepatrolled": "Cua sas pàginas verificadas dae sa lista de sas pàginas noas",
- "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totu sos càmbios, non sos prus reghentes ebbia",
+ "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totus sos càmbios, non sos prus reghentes ebbia",
"tog-usenewrc": "Pone in pare sos càmbios de cada pàgina in sos ùrtimos càmbios e in sa watchlist",
"tog-numberheadings": "Auto-numeratzione de sos tìtulos",
"tog-showtoolbar": "Ammustra sa mustra de sa barra de sas ainas",
"tog-editondblclick": "Càmbia pàginas cun duos click",
"tog-editsectiononrightclick": "Abìlita su càmbiu de sas setziones cun click de dereta in sos tìtulos de sas setziones",
- "tog-watchcreations": "Agiunghe sas pàginas chi apo creadu e sos documentos chi apo carrigadu in sa watchlist mea",
- "tog-watchdefault": "Agiunghe pàginas e documentos chi apo cambiadu in sa watchlist mea",
- "tog-watchmoves": "Agiunghe pàginas e documentos chi apo mòvidu in sa watchlist mea",
- "tog-watchdeletion": "Agiunghe pàginas e documentos chi apo fuliadu in sa watchlist mea",
+ "tog-watchcreations": "Annanghe is pàginas chi apo creadu e is documentos chi apo carrigadu in sa lista de pàginas annotadas mea",
+ "tog-watchdefault": "Annanghe pàginas e documentos chi apo cambiadu in sa lista de pàginas annotadas mea",
+ "tog-watchmoves": "Annanghe pàginas e documentos chi apo mòvidu in sa lista de pàginas annotadas mea",
+ "tog-watchdeletion": "Annanghe pàginas e documentos chi apo burradu in sa lista de pàginas annotadas mea",
"tog-watchrollback": "Pone is pàginas innue apo fatu su rollback in is pàginas annotadas",
- "tog-minordefault": "Marca comente minores pro difetu totu sos càmbios",
+ "tog-minordefault": "Marca comente minores pro difetu totus sos càmbios",
"tog-previewontop": "Ammustra s'anteprima in subra de sa casella de càmbiu e no in suta",
"tog-previewonfirst": "Ammustra s'anteprima pro sa prima muda",
"tog-enotifwatchlistpages": "Imbia·mi una post.el. cando b'at àpidu unu càmbiu in una pàgina o in unu documentu de sa watchlist mea",
@@ -36,7 +36,7 @@
"tog-enotifrevealaddr": "Faghe ischire s'indiritzu de sa post.el. mea in sas notìficas de sa post.els",
"tog-shownumberswatching": "Ammustra su nùmeru de is impitadores chi ant annotadu sa pàgina",
"tog-oldsig": "Firma atuale:",
- "tog-fancysig": "Trata sa firma comente unu testu wiki (sena ligàmenes automàticos)",
+ "tog-fancysig": "Trata sa firma comente unu testu wiki (sena ligòngios automàticos)",
"tog-uselivepreview": "Imprea sa funtzione \"anteprima bia\" (isperimentale)",
"tog-forceeditsummary": "Averte·mi si su campu ogetu est bòidu",
"tog-watchlisthideown": "Cua sas mudas meas dae sa watclist",
@@ -123,13 +123,13 @@
"december-date": "Nadale $1",
"pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
"category_header": "Pàginas in sa categoria \"$1\"",
- "subcategories": "Subcategorias",
+ "subcategories": "Sutacategorias",
"category-media-header": "Mèdios in sa categoria \"$1\"",
"category-empty": "''In custa categoria non ddu at peruna pàgina o documentu multimediale.''",
"hidden-categories": "{{PLURAL:$1|Categoria cuada|Categorias cuadas}}",
"hidden-category-category": "Categorias cuadas",
- "category-subcat-count": "{{PLURAL:$2|Custa categoria cuntenet un'ùnica subcategoria ammustrada in suta.|Custa categoria cuntenet {{PLURAL:$1|sa subcategoria indicada|$1 subcategorias indicadas}} in suta, dae $2 totales.}}",
- "category-subcat-count-limited": "Custa categoria tenet {{PLURAL:$1|una subcategoria, ammustrada|$1 subcategorias, ammustradas}} in suta.",
+ "category-subcat-count": "{{PLURAL:$2|Custa categoria cuntennet un'ùnica sutacategoria ammustrada in suta.|Custa categoria cuntenet {{PLURAL:$1|sa sutacategoria indicada|$1 sutacategorias indicadas}} in suta, dae $2 in totu.}}",
+ "category-subcat-count-limited": "Custa categoria tenet {{PLURAL:$1|una sutacategoria, ammustrada|$1 sutacategorias, ammustradas}} in suta.",
"category-article-count": "{{PLURAL:$2|Custa categoria cuntenet feti sa pàgina chi sighit.|Custa categoria cuntenet {{PLURAL:$1|sa pàgina indicada|is $1 pàginas indicadas}} in suta, dae unu totale de $2.}}",
"category-article-count-limited": "{{PLURAL:$1|Sa pàgina chi sighit est|Is $1 pàginas chi sighint sunt}} in custa categoria.",
"category-file-count": "{{PLURAL:$2|Custa categoria cuntenet feti su documentu chi sighit.|{{PLURAL:$1|Su documentu chi sighit est|Is $1 documentos chi sighint sunt}} in custa categoria, dae $2 totales.}}",
@@ -137,7 +137,7 @@
"listingcontinuesabbrev": "sighit",
"index-category": "Pàginas inditzizadas",
"noindex-category": "Pàginas no inditzitzadas",
- "broken-file-category": "Pàginas cun ligàmenes a sos documentos non funtzionantes",
+ "broken-file-category": "Pàginas chi ligant a documentos chi no esistint",
"about": "A propòsitu de",
"article": "Artìculu",
"newwindow": "(aberret in una bentana noa)",
@@ -179,7 +179,7 @@
"edit": "Càmbia",
"edit-local": "Càmbia sa descritzione locale",
"create": "Crea",
- "create-local": "Agiunghe descritzione locale",
+ "create-local": "Annanghe descritzione locale",
"editthispage": "Càmbia custa pàgina",
"create-this-page": "Crea custa pàgina",
"delete": "Burra",
@@ -296,7 +296,7 @@
"nstab-help": "Agiudu",
"nstab-category": "Categoria",
"nosuchaction": "No esistit custa atzione",
- "nosuchactiontext": "S'atzione ispetzificada in sa URL no est vàlida.\nEst possìbile chi sa URL siat istada carcada male, o si siat sighidu unu ligàmene non vàlidu.\nCustu diat pòdere èssere unu \"bug\" de {{SITENAME}}.",
+ "nosuchactiontext": "S'atzione ispetzificada in sa URL no est vàlida.\nEst possìbile chi sa URL siat istada carcada male, o si siat sighidu unu ligòngiu non vàlidu.\nCustu diat pòdere èssere unu \"bug\" de {{SITENAME}}.",
"nosuchspecialpage": "Custa pàgina ispetziale no esistit",
"nospecialpagetext": "<strong>As pedidu una pàgina ispetziale non vàlida.</strong>\n\nUna lista de pàginas ispetziales vàlidas dd'agatas in [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Faddina",
@@ -309,7 +309,7 @@
"laggedslavemode": "<strong>Atentzione:</strong> Sa pàgina podet non cuntènnere sos agiornamentos prus novos.",
"readonly": "Database bloccadu",
"enterlockreason": "Inserta su motivu de su blocu, ispetzifichende su momentu probàbile chi su blocu at a acabbare",
- "readonlytext": "In custu momentu su database est bloccadu dae aciunturas e àteras modificas, probabilmente pro ordinaria manutentzione a su database, a pustis de custas at a èssere normale torra.\n\nS'aministradore chi dd'at bloccadu at donadu custa ispiegatzione: $1",
+ "readonlytext": "In custu momentu su database est bloccadu dae aciunturas e àteras modificas, probabilmente pro ordinaria manutentzione a su database, a pustis de custas at a èssere normale torra.\n\nS'amministradore chi dd'at bloccadu at donadu custa ispiegatzione: $1",
"missing-article": "Su database no at agatadu su testu de una pàgina chi diat àere agatadu a suta de su nùmene \"$1\" $2.\n\nCustu a su sòlitu si verìficat cando bi est unu ligòngiu in s'istòria o in unu cunfrontu intre revisiones de una pàgina chi est istada fuliada.\n\nSi no est custu su casu, s'est agatada una faddina de su software.\nPro praghere signa s'acontèssidu a unu [[Special:ListUsers/sysop|amministradore]] ispetzifichende su URL de sa faddina.",
"missingarticle-rev": "(revisione nùmeru: $1)",
"missingarticle-diff": "(Dif: $1, $2)",
@@ -330,21 +330,34 @@
"no-null-revision": "Non si podet creare una versione lulla pro sa pàgina \"$1\"",
"badtitle": "Tìtulu malu",
"badtitletext": "Su tìtulu de sa pàgina chi as pregontadu est bùidu, isballiadu, o iscritu in is cullegamentus inter-wiki a manera non currègia.\nPodet cuntènnere uno o unos cantos caràteres no ammìtidos pro is tìtulos.",
+ "perfcached": "Is datos chi sighint sunt in sa memòria \"cache\" e podent èessere no agiornados. Unu màssimu de {{PLURAL:$1|unu resurtu est disponìbile|$1 resurtos sunt disponìbiles}} in sa memòria",
+ "perfcachedts": "Is datos chi sighint sunt in sa memòria \"cache\", s'ùrtimu agiornamentu est de su $2 a is $3. Unu màssimu de {{PLURAL:$4|unu resurtu est disponìbile|$4 resurtos sunt disponìbiles}} in sa memòria",
+ "querypage-no-updates": "Sos agiornamentos pro custa pàgina sunt temporaneamente sessadas.\nSos datos suos no ant a èssere agiornados.",
"viewsource": "Càstia mitza",
"viewsource-title": "Càstia sa mitza de $1",
"actionthrottled": "Atzione rimandada",
+ "actionthrottledtext": "Comente mesura de seguràntzia contra a s'ispam, non podes torrare a fàghere custa atzione tropu ispissu in unu tempus tropu curtzu, e tue as cabuladu custu lìmide.\nPro piaghere torra a proare a pustis de carchi minutos.",
"protectedpagetext": "Custa pàgina est istada amparada pro nde prevenner su càmbiu o àteras fatas.",
"viewsourcetext": "Podes bìere o copiare su còdighe mitza de custa pàgina:",
"viewyourtext": "Càstia e còpia su còdighe mitza de is <strong>mudàntzias tuas</strong> in custa pàgina:",
+ "protectedinterface": "Custa pàgina frunit testu pro s'interfàtzie de su programma de custa wiki, ed est amparada pro prevènnere abusos.\nPro annànghere o cambiare tradutziones pro totus sas wikis, pro piaghere imprea [//translatewiki.net/ translatewiki.net], su progetu MediaWiki de localizatzione.",
+ "editinginterface": "<strong>Atentzione:</strong> Ses modificande una pàgina chi est impreada pro frunire testu de s'interfàtzie pro su programma.\nCàmbios a custa pàgina ant a influentzare sa bisura de s'interfàtzie impitadore pro àteros impitadores in custa wiki.\nPro annànghere o cambiare tradutziones pro totus sas wikis, pro piaghere imprea [//translatewiki.net/ translatewiki.net], su progetu MediaWiki de localizatzione.",
+ "cascadeprotected": "Custa pàgina est istada amparada dae sas modìficas proite est incluida in {{PLURAL:$1|custa pàgina, chi est amparada|custas pàginas, chi sunt amparadas}} cun s'optzione \"a tzurru\" ativada:\n$2",
"namespaceprotected": "Non tenes su permissu de cambiare is pàginas in su nùmene-lugu '''$1'''.",
"customcssprotected": "Non tenes sos permissos pro cambiare custa pàgina CSS proite cuntènnidi sas impostaduras pessonales de un'àteru impitadore.",
"customjsprotected": "Non tenes sos permissos pro cambiare custa pàgina JavaScript proite cuntènnidi sas impostaduras pessonales de un'àteru impitadore.",
"mycustomcssprotected": "Non tenes sos permissos pro cambiare custa pàgina CSS.",
"mycustomjsprotected": "Non tenes sos permissos pro cambiare custa pàgina JavaScript.",
+ "myprivateinfoprotected": "Non tenes su permissu de cambiare is informatziones privadas tuas.",
+ "mypreferencesprotected": "Non tenes su permissu de cambiare is preferèntzias tuas.",
"ns-specialprotected": "Is pàginas ispetziales non podent èssere acontzadas.",
"titleprotected": "Sa creatzione de una pàgina cun custu tìtulu est istada arreada dae [[User:$1|$1]].\nSa motivatzione est \"<em>$2</em>\".",
+ "invalidtitle-knownnamespace": "Su tìtulu cun nùmene-logu \"$2\" e testu \"$3\" no est bàlidu",
+ "invalidtitle-unknownnamespace": "Su tìtulu cun nùmene-logu disconnotu de nùmeru $1 e testu \"$2\" no est bàlidu",
"exception-nologin": "Non ses intrau",
"exception-nologin-text": "Pro atzèdere a custa pàgina o atzione est netzessàriu a ti identificare.",
+ "exception-nologin-text-manual": "Pro piaghere $1 pro pòder'atzèdere a custa pàgina o atzione.",
+ "virus-badscanner": "Faddina de configuratzione: antivirus disconnotu: <em>$1</em>",
"virus-scanfailed": "scansione faddida (còdixe $1)",
"virus-unknownscanner": "antivirus disconnotu:",
"logouttext": "<strong>As acabadu sa sessione.</strong>\n\nTene contu ca is pàginas ki sunt giai abertas in àteras bentanas podent sighire a pàrrer comente cando fias identificadu, fintzas a cando non ddas renfriscas dae su browser tuo.",
@@ -380,8 +393,10 @@
"createaccount": "Crea contu",
"gotaccount": "Tenes giai unu contu? $1.",
"gotaccountlink": "Identìfica·ti",
+ "userlogin-resetlink": "As ismentigadu is datos pro s'atzessu?",
"userlogin-resetpassword-link": "As ismentigadu sa password?",
"userlogin-helplink2": "Agiudu pro s'atzessu",
+ "userlogin-createanother": "Crea un àteru contu",
"createacct-emailrequired": "Indirutzu Email",
"createacct-emailoptional": "Indiritzu email (optzionale)",
"createacct-email-ph": "Inserta s'indiritzu email tuo",
@@ -410,8 +425,9 @@
"loginsuccesstitle": "Ti ses identificadu",
"loginsuccess": "'''Immoe ses intradu in {{SITENAME}} cun su nùmene impitadore \"$1\".'''",
"nosuchuser": "Non b'at impitadore cun su nùmene \"$1\".\nIs nùmenes impitadore sunt sensìbiles a is lìteras mannas.\nVerìfica su nùmene insertadu o [[Special:UserLogin/signup|crea unu contu nou]].",
+ "nosuchusershort": "Non b'est perunu impitadore chi tenet \"$1\" comente nùmene.\nCòmpida su nùmene insertadu.",
"nouserspecified": "Depes ispetzificare unu nùmene impitadore.",
- "login-userblocked": "{{GENDER:$1|Custu impitadore est arreadu|Custa impidadora est arreada}}. Atzessu impossìbile.",
+ "login-userblocked": "{{GENDER:$1|Custu impitadore est arreadu|Custa impidadora est arreada}}. Atzessu no adduidu.",
"wrongpassword": "Sa paràula de òrdine insertada no est bona. Prova torra.",
"wrongpasswordempty": "No as iscritu sa paràula de òrdine.\nProva torra.",
"passwordtooshort": "Is passwords depent tènner a su mancu {{PLURAL:$1|1 caràtere|$1 caràteres}}.",
@@ -421,7 +437,9 @@
"passwordremindertitle": "Servìtziu Password Reminder de {{SITENAME}}",
"passwordremindertext": "Calicunu (probabilmenti tue, cun s'indiritzu IP $1) at pediu de arritziri una password noa pro intrare a {{SITENAME}} ($4).\nUna password temporanea pro s'impitadore \"$2\" est istada impostada a \"$3\".\nChi custu fiat ne is intentziones tuas, depis intrare (log in) e scioberari una password noa.\nSa password temporanea tua at a iscadiri in {{PLURAL:$5|una die|$5 dies}}.\n\nChi non ses istadu a pediri sa password, o chi as torrau a agatare sa password torra e non da depis cambiari prus, non cunsideras custu messagiu e sighi a impreare sa password beccia.",
"noemail": "Peruna email resurtat registrada pro s'impitadore \"$1\".",
+ "noemailcreate": "Bisòngiat a frunire un'indiritzu email vàlidu.",
"passwordsent": "Una password noa est stada mandada a s'indiritzu email de s'impitadore \"$1\".\nPro praxere, cando dda retzis identìfica·ti torra.",
+ "blocked-mailpassword": "Sos càmbios dae s'indiritzu IP tuo sunt arreados, e no est adduidu impreare sa funtzionalidade \"imbia password noa\".",
"mailerror": "Faddina imbiende su messàgiu: $1",
"emailauthenticated": "S'indiritzu e-mail tuo est istadu autenticau su $2 a is $3.",
"emailconfirmlink": "Cunfirma s'indiritzu e-mail tuo",
@@ -436,7 +454,10 @@
"pt-login-button": "Intra",
"pt-createaccount": "Registra·ti",
"pt-userlogout": "Essida",
+ "php-mail-error-unknown": "Errore disconnottu in sa funtzione mail() de PHP.",
+ "user-mail-no-addy": "As provadu a imbiare una email sena un indiritzu.",
"changepassword": "Càmbia password",
+ "resetpass_announce": "Pro cumprire s'intrada, depes insertare una password noa.",
"resetpass_header": "Càmbia sa password de su contu",
"oldpassword": "Password betza:",
"newpassword": "Password noa:",
@@ -447,11 +468,18 @@
"resetpass-no-info": "Depes èsser identificadu pro abèrrer custa pàgina deretu.",
"resetpass-submit-loggedin": "Càmbia password",
"resetpass-submit-cancel": "Burra",
+ "resetpass-recycled": "Pro piaghere inserta una password noa chi siat diferente dae sa password tua de como.",
"resetpass-temp-password": "Password temporànea:",
+ "resetpass-abort-generic": "Su càmbiu de sa password est istadu arreadu dae un'estensione.",
+ "resetpass-expired": "Sa password tua est iscadida. Pro piaghere inserta una password noa pro intrare.",
+ "resetpass-validity-soft": "Sa password password tua no est bàlida: $1\n\nPro piaghere issèbera una password noa como, o carca \"{{int:resetpass-submit-cancel}}\" pro lu fàghere prus a tardu.",
"passwordreset": "Reseta sa password",
"passwordreset-legend": "Reseta sa password",
+ "passwordreset-disabled": "Non si podent cambiare sas passwords in custa wiki.",
+ "passwordreset-emaildisabled": "Is funtzionalidades de email sunt istadas disabilitadas in custa wiki.",
"passwordreset-username": "Nùmene impitadore:",
"passwordreset-domain": "Domìniu:",
+ "passwordreset-capture": "Ammustrare su cuntènnidu de sa email?",
"passwordreset-email": "Indiritzu email:",
"passwordreset-emailtitle": "Particulares de s'impitadore in {{SITENAME}}",
"passwordreset-emailelement": "Nùmene impitadore: $1\nPassword temporànea: $2",
@@ -485,7 +513,7 @@
"subject": "Tema/tìtulu:",
"minoredit": "Custu est unu càmbiu minore",
"watchthis": "Annota custa pàgina",
- "savearticle": "Sarva sa pàgina",
+ "savearticle": "Sarba sa pàgina",
"preview": "Antiprima",
"showpreview": "Ammustra s'antiprima",
"showdiff": "Ammustra is càmbios",
@@ -495,22 +523,30 @@
"summary-preview": "Antiprima ogetu:",
"subject-preview": "Antiprima tema/tìtulu:",
"blockedtitle": "S'impitadore est istadu bloccadu",
- "blockedtext": "<strong>Custu nùmene impitadore o indiritzu IP est stadu bloccadu.</strong>\n\nSu bloccu est stadu postu dae $1.\nSu motivu de su bloccu est: <em>$2</em>.\n\n* Su bloccu incumentzat: $8\n* Su bloccu scadit: $6\n* Intervallu de bloccu: $7\n\nSi boles, podes tzerriare $1 o un'àteru [[{{MediaWiki:Grouppage-sysop}}|amministradore]] pro faeddare de su bloccu.\nNota ca sa funtzione 'Ispedi un'email a custu impitadore' no est ativa ki no est stadu registradu un'indiritzu email vàlidu in is [[Special:Preferences|preferèntzias]] tuas o ki s'usu de custa funtzione est stadu bloccadu.\nS'indiritzu IP atuale est $3, su nùmeru ID de su bloccu est #$5.\nPro praxere spetzìfica totu is particulares in antis in carche siat pregunta de acrarimentu.",
+ "blockedtext": "<strong>Custu nùmene impitadore o indiritzu IP est stadu bloccadu.</strong>\n\nSu bloccu est stadu postu dae $1.\nSu motivu de su bloccu est: <em>$2</em>.\n\n* Su bloccu incumentzat: $8\n* Su bloccu scadit: $6\n* Intervallu de bloccu: $7\n\nSi boles, podes tzerriare $1 o un'àteru [[{{MediaWiki:Grouppage-sysop}}|amministradore]] pro faeddare de su bloccu.\nNota ca sa funtzione 'Ispedi un'email a custu impitadore' no est ativa si no est istadu registradu un'indiritzu email vàlidu in is [[Special:Preferences|preferèntzias]] tuas o si s'impreu de custa funtzione est istadu arreadu.\nS'indiritzu IP atuale est $3, su nùmeru ID de su bloccu est #$5.\nPro praghere ispetzìfica totus is particulares in antis in cale siat pregonta de acrarimentu.",
"blockednoreason": "perunu motivu inditadu",
+ "whitelistedittext": "Pro cambiare is pàginas $1.",
"nosuchsectiontitle": "Impossìbile agatare sa setzione",
+ "nosuchsectiontext": "Ses proande a modificare una setzione chi non esistit.\nDiat poder'èssere istada iscostiada o burrada cando che fias bidende sa pàgina.",
"loginreqtitle": "Identificatzione rechesta",
"loginreqlink": "identìfica·ti",
"loginreqpagetext": "Depes èsser $1 pro bìer àteras pàginas.",
"accmailtitle": "Password ispedida.",
+ "accmailtext": "Una password ingendrada a manera casuale pro [[User talk:$1|$1]] est istada imbiada a $2. Podet èssere cambiada in sa pàgina de <em>[[Special:ChangePassword|càmbiu password]]</em> a pustis de èssere intradu in su contu tuo.",
"newarticle": "(Nou)",
- "newarticletext": "Custa pàgina no esistit galu.\nPro creare sa pàgina, iscrie in su box inoghe a suta (càstia sa [[{{MediaWiki:Helppage}}|pàgina de agiudu]] pro àteras informatziones).\nSi ses intradu inoghe pro isbàlliu, carca in su browser tuo su butone '''back/indietro'''.",
+ "newarticletext": "Custa pàgina no esistit galu.\nPro creare sa pàgina, iscrie in sa casella a suta (càstia sa [$1 pàgina de agiudu] pro àteras informatziones).\nSi ses intradu inoghe pro isbàlliu, carca su butone <strong>back/indietro</strong> in su navigadore tuo.",
"anontalkpagetext": "----\n<em>Custa est sa pàgina de cuntierra de unu impitadore anònimu ki no at creadu unu contu galu, o ki non dd'usat.</em>\nPro custu impreamus su nùmeru de indiritzos IP pro ddu identificare. Is indiritzos IP podent perou èsser cundivìdidos dae unos cantos impitadores. Si ses unu impitadore anònimu e ritenes ki custos cummentos non sunt diretos a tue, pro praxere [[Special:UserLogin/signup|crea unu contu]] o [[Special:UserLogin|identifica·ti (log in)]] pro evitare cunfusione cun àteros impitadore anònimos.''",
- "noarticletext": "In custu momentu sa pàgina est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in àteras pàginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is registros ligados] o puru [{{fullurl:{{FULLPAGENAME}}|action=edit}} cambiare sa pàgina como]</span>.",
+ "noarticletext": "In custu momentu sa pàgina est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in àteras pàginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is registros ligados] o puru [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare sa pàgina]</span>.",
"noarticletext-nopermission": "In custu tempu sa pàgina rechesta est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in is àteras pàginas, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is regìstros ligados]</span>, ma non tenes su permissu de creare custa pàgina.",
"userpage-userdoesnotexist": "Su contu de s'impitadore \"<nowiki>$1</nowiki>\" no est stadu registradu.\nPro praxere abbàida si boles a sèriu creare/cambiare custa pàgina.",
"userpage-userdoesnotexist-view": "Su contu de s'impitadore \"$1\" no est stadu registradu.",
+ "blocked-notice-logextract": "{{GENDER:.|Custu impitadore|Custa impitadora}} est {{GENDER:.|arreadu|arreada}}.\nS'ùrtimu elementu de su registru de sos arreamentos est marcadu inoghe in suta pro referèntzia:",
"usercssyoucanpreview": "<strong>Consìgiu:</strong> Imprea su butone \"{{int:showpreview}}\" pro testare su CSS nou in antis de sarvare.",
"userjsyoucanpreview": "<strong>Consìgiu:</strong> Imprea su butone \"{{int:showpreview}}\" pro testare su tuo JavaScript nou in antis de sarvare.",
+ "usercsspreview": "<strong>Ammentadi chi ses petzi bidende s'antiprima de su CSS impitadore tuo.\nNo est istadu galu sarbadu!</strong>",
+ "userjspreview": "<strong>Ammentadi chi ses petzi collaudande/bidende s'antiprima de su CSS impitadore tuo.\nNo est istadu galu sarbadu!</strong>",
+ "sitecsspreview": "<strong>Ammentadi chi ses petzi bidende s'antiprima de custu CSS.\nNo est istadu galu sarbadu!</strong>",
+ "sitejspreview": "<strong>Ammentadi chi ses petzi bidende s'antiprima de custu còdighe JavaScript.\nNo est istadu galu sarbadu!</strong>",
"updated": "(Atualizadu)",
"note": "'''Nota:'''",
"previewnote": "<strong>Regorda·ti ca custa est feti una ANTIPRIMA.</strong>\nIs mudàntzias tuas non sunt galu sarbadas!",
@@ -521,30 +557,42 @@
"editingsection": "Cambiende $1 (setzione)",
"editingcomment": "Modìfica de $1 (setzione noa)",
"editconflict": "Cunflitu de editzione: $1",
- "explainconflict": "Calicunu àteru at acontzadu custa pàgina in su tempus ki dda fias acontzende tue.\nS'àrea de testu de susu cuntènnet su testu de sa pàgina in sa forma atuale.\nIs mudàntzias tuas sunt ammustradas in s'àrea de testu de bàsciu.\nAs a dèper insertare is mudàntzias tuas in su testu atuale, e pro custu a ddas scrìer in s'àrea de susu.\n'''Solu''' su testu in s'àrea de susu at a èsser sarbadu si carcas su butone \"{{int:savearticle}}\".",
+ "explainconflict": "Calicunu àteru at cambiadu custa pàgina in su tempus chi dda fias cambiende tue.\nS'àrea de testu de susu cuntènnet su testu de sa pàgina in sa forma atuale.\nIs mudàntzias tuas sunt ammustradas in s'àrea de testu in suta.\nAs a dèper insertare is mudàntzias tuas in su testu atuale, e pro custu a ddas iscrìer in s'àrea de susu.\n<strong>Solu</strong> su testu in s'àrea de susu at a èsser sarbadu si carcas su butone \"{{int:savearticle}}\".",
"yourtext": "Su testu tuo",
"storedversion": "Revisione in archìviu",
- "editingold": "'''ATENTZIONE: Ses acontzende una revisione non-agiornada de sa pàgina.'''\nSi dda sarbas de aici, totu is acontzos fatos a pustis de custa revisione ant a bènner pèrdidos pro semper.",
+ "editingold": "<strong>Atentzione: Ses cambiende una versione non-agiornada de sa pàgina.</strong>\nSi dda sarbas de aici, totus is càmbios fatos a pustis de custa versione ant a bènnere pèrdidos pro semper.",
"yourdiff": "Diferèntzias",
- "copyrightwarning": "Abbàida, pro praghere, chi totu is contributos a {{SITENAME}} sunt cunsideradas lassadas a suta permissu de tipu $2 (càstia $1 pro nde ischire de prus). Si non boles chi s'iscritu tuo potzat èssere cambiadu e re-distribuidu dae chie si siat sena piedade e sena àteros lìmites, non ddu imbies a {{SITENAME}}.\nCun s'imbiu de custu iscritu ses garantende, a responsabilidade tua, si su iscritu ddu as cumpostu tue de persone e in originale, o puru si est istadu copiadu dae una fonte de domìniu pùblicu, o una fonte de gasi, o puru si as otentu permissu craru de impreare custu iscritu e si ddu podes dimustrare. '''NO IMPREARE MATERIALE COBERTU DAE DERETU DE AUTORE SENA PERMISSU CRARU!'''",
+ "copyrightwarning": "Abbàida, pro praghere, chi totus is contributos a {{SITENAME}} sunt cunsideradas lassadas a suta permissu de tipu $2 (càstia $1 pro nde ischire de prus). Si non boles chi s'iscritu tuo potzat èssere cambiadu e re-distribuidu dae chie si siat sena piedade e sena àteros lìmites, non ddu insartas inoghe.<br />\nCun s'imbiu de custu iscritu ses garantende, a responsabilidade tua, si su iscritu ddu as cumpostu tue de persone e in originale, o puru si est istadu copiadu dae una fonte de domìniu pùblicu, o una fonte de gasi, o puru si as otentu permissu craru de impreare custu iscritu e si ddu podes dimustrare. <strong>No impreare materiale cobertu dae deretu de autore sena permissu craru!</strong>",
+ "titleprotectedwarning": "<strong>Atentzione: Custa pàgina est istada amparada pro fàghere in modu chi ant a serbire [[Special:ListGroupRights|deretos dislindados]] pro la creare.</strong>\nS'ùrtimu elementu de su registru est marcadu inoghe in suta pro referèntzia:",
"templatesused": "{{PLURAL:$1|Template impreadu|Templates impreados}} in custa pàgina:",
"templatesusedpreview": "{{PLURAL:$1|Template impreadu|Templates impreados}} in custa antiprima:",
"templatesusedsection": "{{PLURAL:$1|Template impreadu|Templates impreados}} in custa setzione:",
"template-protected": "(bardadu)",
"template-semiprotected": "(mesu-bardadu)",
"hiddencategories": "Custa pàgina faghet parte de {{PLURAL:$1|1 categoria cuada|$1 categorias cuadas}}:",
+ "nocreatetext": "{{SITENAME}} at limitadu sa possibilidade de creare pàginas noas a sos impitadores registrados.\nPodes torrare in segus e modificare una pàgina esistente, o puru [[Special:UserLogin|intrare in su contu tuo o creare unu contu nou]].",
"nocreate-loggedin": "Non tenes su permissu de creare pàginas noas.",
+ "sectioneditnotsupported-title": "Modìfica de sas setziones non suportada",
+ "sectioneditnotsupported-text": "Modìfica de sas setziones non suportada in custa pàgina.",
"permissionserrors": "Faddina de permissos",
- "permissionserrorstext-withaction": "Non tenes su permissu de $2, pro {{PLURAL:$1|custu motivu|custus motivus}}:",
+ "permissionserrorstext": "Non tenes su permissu pro lu fàghere, pro {{PLURAL:$1|custa resone|custas resones}}:",
+ "permissionserrorstext-withaction": "Non tenes su permissu de $2, pro {{PLURAL:$1|custu motivu|custos motivos}}:",
"recreate-moveddeleted-warn": "<strong>Atentzione: Ses torrende a creare una pàgina chi est istada giai burrada.</strong>\n\nSinchera·ti chi siat pretzisu a sighire cambiende custa pàgina.\nSu registru de is burraduras e moviduras pro custa pàgina benit giùghedu inoghe:",
"moveddeleted-notice": "Custa pàgina est istada burrada.\nSu registru de is burraduras e moviduras de sa pàgina est ammustradu pro informatzione.",
"log-fulllog": "Abbista su registru intreu",
+ "edit-hook-aborted": "Sa modìfica est istada annuddada dae su hook de s'estensione.\nNo est istadu datu acrarimentu.",
+ "edit-gone-missing": "Impossìbile agiornare sa pàgina.\nParet chi siat istada burrada.",
"edit-conflict": "Cunflitu de editzione.",
+ "edit-no-change": "Su càmbiu tuo est istadu innoradu proite non b'est istada modìfica peruna a su testu.",
"postedit-confirmation-created": "Sa pàgina est stada creada",
"postedit-confirmation-restored": "Sa pàgina est stada restaurada",
- "postedit-confirmation-saved": "Su càmbiu tuo est stadu sarbadu",
+ "postedit-confirmation-saved": "Su càmbiu tuo est istadu sarbadu.",
+ "edit-already-exists": "No est possìbile creare una pàgina noa.\nEsistit giai.",
"defaultmessagetext": "Testu de su messàgiu predeterminadu",
"invalid-content-data": "Datos de cuntènnidu invàlidos",
+ "content-not-allowed-here": "Cuntènnidu a manera \"$1\" no adduidu in sa pàgina [[$2]]",
+ "editwarning-warning": "S'essida dae custa pàgina diat pòdere cajonare sa pèrdida de totus sos càmbios chi as fatu.\nSi ses autentificadu, podes disabilitare custu avisu in sa setzione \"{{int:prefs-editing}}\" de sas preferèntzias tuas.",
+ "editpage-notsupportedcontentformat-title": "Formadu de càbidu non suportadu",
"content-model-wikitext": "wikitestu",
"content-model-text": "testu normale",
"content-model-javascript": "JavaScript",
@@ -577,6 +625,7 @@
"history-feed-description": "Istòria de is revisiones de sa pàgina in custa wiki",
"history-feed-item-nocomment": "$1 su $2",
"rev-deleted-user": "(nùmene impitadore bogadu)",
+ "rev-deleted-unhide-diff": "Una de is versiones de custa cumparàntzia tra versiones est istada <strong>burrada</strong>.\nConsulta su [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} registru de is burraduras] pro àteros particulares.\nIs amministradores podent galu [$1 bìdere sa cumparàntzia] si est netzessàriu.",
"rev-delundel": "ammustra/cua",
"rev-showdeleted": "ammustra",
"revisiondelete": "Burra o reimprea versiones",
@@ -592,6 +641,7 @@
"revdelete-radio-set": "Cua",
"revdelete-radio-unset": "Ammustra",
"revdelete-log": "Motivu:",
+ "revdelete-submit": "Àplica a {{PLURAL:$1|sa versione seletzionada|is versiones seletzionadas}}",
"revdel-restore": "càmbia sa visibilidade",
"pagehist": "Istòria de sa pàgina",
"deletedhist": "Istòria fuliada",
@@ -605,6 +655,8 @@
"mergehistory-reason": "Motivu:",
"revertmerge": "Iscontza s'unione",
"history-title": "$1: Istòria de is revisiones",
+ "difference-title": "$1: diferèntzias tra is versiones",
+ "difference-title-multipage": "\"$1\" e \"$2\": diferèntzias tra is pàginas",
"difference-multipage": "(Diferèntzias intre pàginas)",
"lineno": "Lìnia $1:",
"compareselectedversions": "Cumpara versiones scioberadas",
@@ -632,7 +684,7 @@
"searchprofile-everything-tooltip": "Chirca in totue (inclùdidas is pàginas de cuntierra)",
"searchprofile-advanced-tooltip": "Chirca in nùmene-logos personalizados",
"search-result-size": "$1 ({{PLURAL:$2|1 paràula|$2 paràulas}})",
- "search-result-category-size": "{{PLURAL:$1|1 cumponente|$1 cumponentes}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 file|$3 files}})",
+ "search-result-category-size": "{{PLURAL:$1|1 membru|$1 membros}} ({{PLURAL:$2|1 sutacategoria|$2 sutacategorias}}, {{PLURAL:$3|1 documentu|$3 documentos}})",
"search-redirect": "(reindiritzadu $1)",
"search-section": "(setzione $1)",
"search-suggest": "Fortzis fias chirchende: $1",
@@ -662,16 +714,19 @@
"prefs-misc": "Àteras preferèntzias",
"prefs-resetpass": "Càmbia password",
"prefs-changeemail": "Càmbia indiritzu email",
+ "prefs-setemail": "Imposta un'indiritzu email",
"prefs-email": "Sèberos pro sa email",
"prefs-rendering": "Aparèntzia",
- "saveprefs": "Sarva preferèntzias",
- "restoreprefs": "Restàura totu is sèberos predefinidos (in totu is setziones)",
- "prefs-editing": "Box de acontzadura",
+ "saveprefs": "Sarba",
+ "restoreprefs": "Restàura totus is sèberos predefinidos (in totus is setziones)",
+ "prefs-editing": "Casella de modìfica",
"rows": "Lìnias:",
"columns": "Colunnas:",
"searchresultshead": "Chirca",
+ "stub-threshold": "Valore mìnimu pro is <a href=\"#\" class=\"stub\">ligòngios a is abotzos</a>, in bytes:",
"stub-threshold-disabled": "Disativadu",
"recentchangesdays": "Dies de ammustrare in ùrtimas mudàntzias:",
+ "recentchangesdays-max": "Màssimu $1 {{PLURAL:$1|die|dies}}",
"recentchangescount": "Nùmeru de acontzos de amostare pro definidura:",
"savedprefs": "Is preferèntzias tuas sunt stadas sarbadas.",
"timezonelegend": "Zona de oràriu:",
@@ -692,7 +747,7 @@
"prefs-files": "Files",
"prefs-emailconfirm-label": "Cunfirma de sa email:",
"youremail": "Email:",
- "username": "{{GENDER:$1|Nùmene impitadore}}:Nùmene impitadore",
+ "username": "{{GENDER:$1|Nùmene impitadore}}:",
"prefs-registration": "Ora de registratzione:",
"yourrealname": "Nùmene beru:",
"yourlanguage": "Limba:",
@@ -702,7 +757,7 @@
"gender-male": "Issu càmbiat pàginas wiki",
"gender-female": "Issa càmbiat pàginas wiki",
"email": "E-mail",
- "prefs-info": "Informatzione bàsica",
+ "prefs-info": "Informatziones de base",
"prefs-signature": "Firma",
"prefs-dateformat": "Formadu data",
"prefs-advancedediting": "Sèberos generales",
@@ -715,21 +770,22 @@
"prefs-diffs": "Diferèntzias",
"userrights-user-editname": "Inserta unu nùmene impitadore:",
"editinguser": "Cambiamentu de is deretos impitadore de s'impitadore <strong>[[User:$1|$1]]</strong> $2",
+ "userrights-editusergroup": "Cambiare is grupos de impitadores",
"userrights-groupsmember": "Membru de:",
"userrights-reason": "Motivu:",
"userrights-irreversible-marker": "$1*",
"group": "Grupu:",
- "group-user": "Usuàrios",
- "group-autoconfirmed": "Usuàrios autocunfirmadus",
+ "group-user": "Impitadores",
+ "group-autoconfirmed": "Impitadores autocunfirmadus",
"group-bot": "Bots",
"group-sysop": "Amministradores",
"group-bureaucrat": "Buròcrates",
"group-suppress": "Tzensores",
"group-all": "(totus)",
"group-user-member": "{{GENDER:$1|impitadore}}",
- "group-autoconfirmed-member": "{{GENDER:$1|usuàrios autocunfirmados}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|impitadores autocunfirmados}}",
"group-bot-member": "{{GENDER:$1|bot}}",
- "group-sysop-member": "{{GENDER:$1|aministradore}}",
+ "group-sysop-member": "{{GENDER:$1|amministradore}}",
"group-bureaucrat-member": "{{GENDER:$1|buròcrate}}",
"group-suppress-member": "{{GENDER:$1|tzensore}}",
"grouppage-user": "{{ns:project}}:Usuàrios",
@@ -746,7 +802,7 @@
"right-minoredit": "Marcare su càmbiu che minore",
"right-move": "Mòver pàginas",
"right-move-subpages": "Mòvere pàginas cun is suta-pàginas issoru",
- "right-move-rootuserpages": "Mòvere is pàginas base de is usuàrios",
+ "right-move-rootuserpages": "Mòvere is pàginas base de is impitadores",
"right-move-categorypages": "Mòvere pàginas de categorias",
"right-movefile": "Mòvere files",
"right-upload": "Carrigare files",
@@ -760,7 +816,7 @@
"right-suppressionlog": "Càstia is registros privados",
"right-siteadmin": "Bloccare e sbloccare su database",
"newuserlogpage": "Impitadores nous",
- "rightslog": "Deretos de is usuàrios",
+ "rightslog": "Deretos de is impitadores",
"action-read": "lègher custa pàgina",
"action-edit": "cambiare custa pàgina",
"action-createpage": "creare pàginas",
@@ -783,7 +839,7 @@
"recentchanges-feed-description": "Sighi is ùrtimas mudàntzias a sa wiki cun custu feed.",
"recentchanges-label-newpage": "Custu càmbiu at creadu una pàgina noa",
"recentchanges-label-minor": "Custu est unu càmbiu minore",
- "recentchanges-label-bot": "Custu càmbiu est stadu fatu dae unu bot",
+ "recentchanges-label-bot": "Custu càmbiu est istadu fatu dae unu bot",
"recentchanges-label-unpatrolled": "Custu càmbiu no est istadu cumprobadu",
"recentchanges-label-plusminus": "Sa muda de sa mannesa de sa pàgina dae su nùmeru de bytes",
"recentchanges-legend-heading": "'''Legenda:'''",
@@ -828,8 +884,8 @@
"recentchangeslinked-summary": "Custa est una lista de is mudàntzias fatas dae pagu a is pàginas ligadas a cussa spetzificada.\nIs pàginas [[Special:Watchlist|annotadas dae tue]] sunt in <strong>grassu</strong>.",
"recentchangeslinked-page": "Nùmene pàgina:",
"recentchangeslinked-to": "Ammustra feti mudàntzias a pàginas ligadas a cussa spetzificada",
- "upload": "Càrriga file",
- "uploadbtn": "Càrriga file",
+ "upload": "Càrriga documentu",
+ "uploadbtn": "Càrriga documentu",
"reuploaddesc": "Torra a su mòdulu pro su carrigamentu.",
"uploadnologin": "Non ses intrau",
"uploadnologintext": "Depes èsser $1 pro carrigare files.",
@@ -843,17 +899,24 @@
"filereuploadsummary": "Mudàntzias a su file:",
"filesource": "Orìgine:",
"badfilename": "Su nùmene de su file est stadu cunvertidu in \"$1\".",
+ "illegal-filename": "Su nùmene de su documentu no est adduidu.",
+ "overwrite": "Remplasare unu documentu esistente no est adduidu.",
"uploadwarning": "Avvisu de carrigamentu",
- "savefile": "Sarva file",
+ "savefile": "Sarba documentu",
"upload-source": "File de orìgine",
"sourcefilename": "Nùmene de su file de orìgine:",
"sourceurl": "Diretzione originària:",
"destfilename": "Nùmene de su file de destinatzione:",
"upload-description": "Descritzione de su file",
+ "upload-options": "Optziones de carrigamentu",
"watchthisupload": "Annota custu documentu",
"upload-success-subj": "Carrigamentu acabau",
"upload-failure-subj": "Problema de carrimentu",
+ "upload-warning-subj": "Avisu de carrigamentu",
"upload-file-error": "Faddina a intru",
+ "backend-fail-notexists": "Su documentu $1 no esistit.",
+ "backend-fail-alreadyexists": "Su documentu \"$1\" esistit giai.",
+ "uploadstash": "Càrriga stash",
"img-auth-nofile": "Su File \"$1\" no esistit.",
"img-auth-streaming": "Letura currente de \"$1\".",
"license": "Litzèntzia:",
@@ -862,6 +925,7 @@
"licenses-edit": "Càmbia su sèberu de sa licèntzia",
"upload_source_file": "(su file seberadu in su computer tuo)",
"listfiles-delete": "Cantzella",
+ "listfiles_search_for": "Chirca figuras pro nùmene:",
"imgfile": "file",
"listfiles": "Lista de is files",
"listfiles_thumb": "Miniatura",
@@ -910,7 +974,7 @@
"mimetype": "Genia MIME:",
"download": "scàrriga",
"unwatchedpages": "Pàginas no annotadas",
- "listredirects": "Lista de totu is redirects",
+ "listredirects": "Lista de totus is reindiritzamentos",
"listduplicatedfiles": "Lista de documentos dopios",
"unusedtemplates": "Templates no impreados",
"unusedtemplateswlh": "àteros ligòngios",
@@ -919,8 +983,7 @@
"statistics": "Statìsticas",
"statistics-header-pages": "Statìsticas subra is pàginas",
"statistics-header-edits": "Càmbia is statìsticas",
- "statistics-header-views": "Càstia is statìsticas",
- "statistics-header-users": "Statìsticas subra is usuàrios",
+ "statistics-header-users": "Statìsticas subra is impitadores",
"statistics-header-hooks": "Àteras statìsticas",
"statistics-articles": "Pàginas de càbidos",
"statistics-pages": "Pàginas",
@@ -929,7 +992,7 @@
"doubleredirects": "Redirects dòpios",
"doubleredirectstext": "Custa pàgina cuntenet una lista de pàginas ki re-indiritzant a àteras pàginas de re-indiritzamentu.\nOgni lìnia cuntenet ligàmines a su primu e a su de duos re-indiritzamentu, aici comente sa prima lìnia de sa de duos re-indiritzamentos, chi de sòlitu adòbiat s'artìculu \"beru\", a sa cale fintzas su primu re-indiritzamentu dia depet puntare.\nIs re-indiritzamentos <del>cantzellados</del> sunt stados curretos.",
"brokenredirects": "Redirects isballiaus",
- "brokenredirectstext": "Custus redirects ligant cun pàginas chi no esistint.",
+ "brokenredirectstext": "Custos redirects ligant cun pàginas chi no esistint.",
"brokenredirects-edit": "càmbia",
"brokenredirects-delete": "cantzella",
"withoutinterwiki-legend": "Prefissu",
@@ -937,7 +1000,7 @@
"nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
"ncategories": "$1 {{PLURAL:$1|categoria|categorias}}",
"ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
- "nlinks": "$1 {{PLURAL:$1|ligàmene|ligàmenes}}",
+ "nlinks": "$1 {{PLURAL:$1|ligòngiu|ligòngios}}",
"nmembers": "$1 {{PLURAL:$1|cumponente|cumponentes}}",
"nrevisions": "$1 {{PLURAL:$1|revisione|revisiones}}",
"nviews": "$1 {{PLURAL:$1|bisura|bisuras}}",
@@ -948,7 +1011,6 @@
"uncategorizedtemplates": "Templates chentza categoria",
"unusedcategories": "Categorias no impreadas",
"unusedimages": "Files no impreaus",
- "popularpages": "Pàginas populares",
"wantedcategories": "Categorias chircadas",
"wantedpages": "Artìculos prus chircados",
"wantedfiles": "Documentos chircados",
@@ -967,7 +1029,7 @@
"protectedpages-reason": "Motivu",
"protectedpages-unknown-timestamp": "Isconnottu",
"protectedtitles": "Tìtulus amparadus",
- "listusers": "Lista usuàrios",
+ "listusers": "Lista impitadores",
"usereditcount": "$1 {{PLURAL:$1|acontzu|acontzos}}",
"usercreated": "{{GENDER:$3|Creadu}} su $1 a is $2",
"newpages": "Pàginas noas",
@@ -982,16 +1044,15 @@
"booksources": "Fontes libràrias",
"booksources-search-legend": "Chirca fontes libràrias",
"booksources-isbn": "ISBN:",
- "booksources-go": "Bae",
"specialloguserlabel": "Atzione fata dae:",
"speciallogtitlelabel": "Atzione fata subra:",
"log": "Registros",
- "allpages": "Totu is pàginas",
+ "allpages": "Totus is pàginas",
"prevpage": "Pàgina in antis ($1)",
"allpagesfrom": "Ammustra pàginas a partire dae:",
"allpagesto": "Ammustra pàginas fintzas a:",
- "allarticles": "Totu is pàginas",
- "allinnamespace": "Totu is pàginas (nùmene-logu $1)",
+ "allarticles": "Totus is pàginas",
+ "allinnamespace": "Totus is pàginas (nùmene-logu $1)",
"allpagessubmit": "Bae",
"allpages-bad-ns": "Su nùmene-logu \"$1\" non esistit in {{SITENAME}}.",
"categories": "Categorias",
@@ -1008,7 +1069,7 @@
"listgrouprights-rights": "Deretos",
"listgrouprights-members": "(lista de is cumponentes)",
"listgrouprights-namespaceprotection-namespace": "Nùmene-logu",
- "mailnologintext": "Depes èsser [[Special:UserLogin|identificadu (login)]] e àer registradu un'indiritzu e-mail vàlidu in is [[Special:Preferences|preferèntzias tuas]] pro imbiare e-mail a àteros usuàrios.",
+ "mailnologintext": "Depes èsser [[Special:UserLogin|identificadu (login)]] e àere registradu un'indiritzu email vàlidu in is [[Special:Preferences|preferèntzias tuas]] pro imbiare email a àteros impitadores.",
"emailuser": "Imbia una email a custu impitadore",
"emailuser-title-notarget": "Ispedi una email a s'impitadore",
"emailpage": "Ispedi una email a s'impitadore",
@@ -1040,7 +1101,7 @@
"unwatchthispage": "Boga custa pàgina dae sa watchlist tua",
"notanarticle": "Custa pàgina no est unu artìculu",
"watchlist-details": "Tenes {{PLURAL:$1|$1 pàgina annotada paris a sa pagina de cuntierra sua|$1 pàginas annotadas paris a is pàginas de cuntierra issoro}}.",
- "wlshowlast": "Ammustra is ùrtimas $1 oras $2 dies $3",
+ "wlshowlast": "Ammustra is ùrtimas $1 oras, $2 dies",
"watchlist-options": "Optziones subra sa lista de pàginas annotadas",
"watching": "Giunghende a sa watchlist...",
"unwatching": "Boghende dae sa watchlist...",
@@ -1050,7 +1111,7 @@
"deletepage": "Fùlia pàgina",
"confirm": "Cunfima",
"excontent": "su cuntènnidu fiat: '$1'",
- "excontentauthor": "su cuntènnidu fiat: '$1' (e s'ùnicu contribudori fiat '[[Special:Contributions/$2|$2]]')",
+ "excontentauthor": "su cuntènnidu fiat: '$1' (e s'ùnicu contribudore fiat '[[Special:Contributions/$2|$2]]')",
"delete-confirm": "Fùlia \"$1\"",
"delete-legend": "Fuliare",
"confirmdeletetext": "Ses acanta de burrare una pàgina cun totu su stòria sua.\nPro praxere, cunfirma ca est intentzione tua fàgher custu, ca connosches is cosseguèntzias de s'atzione tua, a ca custa est cunforma a is [[{{MediaWiki:Policy-url}}|lìnias polìticas]].",
@@ -1080,7 +1141,7 @@
"protect-text": "Custu modulu serbit pro castiari e cambiari su livellu de amparadura de sa pàgina '''$1'''.",
"protect-locked-access": "Non tenes su permissu pro cambiare is livellus de amparadura de sa pàgina.\nIs impostatziones atuales pro sa pàgina '''$1''':",
"protect-cascadeon": "A su momentu custa pàgina est bardada pro ite est inclùdida {{PLURAL:$1|in sa pàgina indicada a suta, pro sa cale|in is pàginas indicadas a suta, pro is cales}} est ativa sa bardadura ricorsiva.\nEst possìbile cambiare su livellu de bardadura de custa pàgina, ma is efetos derivados dae sa bardadura ricorsiva non ant a èssere mudados.",
- "protect-default": "Autoritza totu is usuàrios",
+ "protect-default": "Autoriza totus is impitadores",
"protect-fallback": "Permìtidu feti a is impitadores cun su permissu \"$1\"",
"protect-level-autoconfirmed": "Permìtidu feti a is impitadores autocunfimados",
"protect-level-sysop": "Permìtidu feti a is amministradores",
@@ -1097,7 +1158,7 @@
"restriction-type": "Permissu:",
"restriction-level": "Livellu de restritzioni:",
"pagesize": "(bytes)",
- "restriction-edit": "Acontzadura",
+ "restriction-edit": "Modìfica",
"restriction-move": "Movimentu",
"restriction-create": "Creatzione",
"restriction-upload": "Carrigadroxiu",
@@ -1264,7 +1325,7 @@
"tooltip-pt-login": "Sa registratzione est cussigiada; mancari chi non siat obligatoria",
"tooltip-pt-logout": "Essida (log out)",
"tooltip-ca-talk": "Cuntierras a propòsitu de su cuntestu de sa pàgina",
- "tooltip-ca-edit": "Podes cambiare custa pàgina.\nPro praxere, prima de sarbare càstia s'antiprima",
+ "tooltip-ca-edit": "Podes modificare custa pàgina.\nPro praghere, prima de sarbare càstia s'antiprima",
"tooltip-ca-addsection": "Incumentza una setzione noa",
"tooltip-ca-viewsource": "Sa pàgina est bardada.\nPodes castiare sa mitza sua",
"tooltip-ca-history": "Versiones coladas de custa pàgina",
@@ -1290,19 +1351,19 @@
"tooltip-feed-atom": "Atom feed pro custa pàgina",
"tooltip-t-contributions": "Càstia sa lista de is contributos de custu impitadore",
"tooltip-t-emailuser": "Ispedi una email a custu impitadore",
- "tooltip-t-upload": "Càrriga file multimediale",
+ "tooltip-t-upload": "Càrriga documentu multimediale",
"tooltip-t-specialpages": "Lista de is pàginas ispetziales",
"tooltip-t-print": "Versione de custa pàgina pro s'imprenta",
"tooltip-t-permalink": "Ligòngiu permanente a custa versione de sa pàgina",
"tooltip-ca-nstab-main": "Càstia su cuntènnidu de sa pàgina",
"tooltip-ca-nstab-user": "Càstia sa pàgina impitadore",
- "tooltip-ca-nstab-special": "Custa est una pàgina ispetziale, non dda podes cambiare",
+ "tooltip-ca-nstab-special": "Custa est una pàgina ispetziale, non si podet modificare",
"tooltip-ca-nstab-project": "Càstia sa pàgina de servìtziu",
"tooltip-ca-nstab-image": "Càstia sa pàgina de su file",
"tooltip-ca-nstab-template": "Càstia su template",
"tooltip-ca-nstab-category": "Càstia sa pàgina de sa categoria",
"tooltip-minoredit": "Marca custa muda comente càmbiu minore",
- "tooltip-save": "Sarva is mudàntzias tuas",
+ "tooltip-save": "Sarba is càmbios tuos",
"tooltip-preview": "Antiprima de is mudas fatas, pro praghere usa custu prima de sarvare!",
"tooltip-diff": "Ammustra is mudàntzias chi as fatu a su testu",
"tooltip-compareselectedversions": "Càstia is diferèntzias de is duas versiones seberadas de custa pàgina",
@@ -1311,22 +1372,33 @@
"tooltip-upload": "Cumentza a carrigare",
"tooltip-rollback": "\"Rollback\" annudda is mudàntzias de custa pàgina fatas dae s'ùrtimu contribudore",
"tooltip-undo": "\"Annudda\" fùrriat custu càmbiu e aberit su mòdulu de càmbiu comente antiprima.\nPodes annànghere unu motivu in s'ogetu.",
- "tooltip-preferences-save": "Sarva preferèntzias",
+ "tooltip-preferences-save": "Sarba preferèntzias",
"tooltip-summary": "Inserta unu resumu curtzu",
"siteuser": "$1, impitadore de {{SITENAME}}",
"anonuser": "$1, impitadore anònimu de {{SITENAME}}",
"others": "àteros",
- "siteusers": "$1, {{PLURAL:$2|usuàriu|usuàrios}} de {{SITENAME}}",
- "anonusers": "$1, {{PLURAL:$2|usuàriu anònimu|usuàrios anònimos}} de {{SITENAME}}",
+ "siteusers": "$1, {{PLURAL:$2|impitadore|impitadores}} de {{SITENAME}}",
+ "anonusers": "$1, {{PLURAL:$2|impitadore anònimu|impitadores anònimos}} de {{SITENAME}}",
"creditspage": "Autores de sa pàgina",
+ "pageinfo-title": "Informatziones pro \"$1\"",
+ "pageinfo-header-basic": "Informatziones de base",
"pageinfo-header-edits": "Istòria de is mudàntzias",
+ "pageinfo-header-restrictions": "Protetzione de sa pàgina",
+ "pageinfo-display-title": "Tìtulu visadu",
+ "pageinfo-default-sort": "Critèriu de ordinamentu predefinidu",
+ "pageinfo-length": "Longària de sa pàgina (in bytes)",
"pageinfo-article-id": "ID pàgina",
+ "pageinfo-language": "Limba de su cuntènnidu de sa pàgina",
+ "pageinfo-content-model": "Modellu de su cuntènnidu de sa pàgina",
+ "pageinfo-robot-policy": "Inditzizatzione pro is robots",
+ "pageinfo-robot-index": "Adduida",
"pageinfo-firstuser": "Creadore de sa pàgina",
"pageinfo-firsttime": "Data de creatzione de sa pàgina",
"pageinfo-lastuser": "Ùrtimu contribudore",
"pageinfo-lasttime": "Data de s'ùrtimu càmbiu",
"pageinfo-edits": "Nùmeru totale de càmbios",
"pageinfo-authors": "Nùmeru totale de autores dislindados",
+ "pageinfo-toolboxlink": "Informatziones pro sa pàgina",
"pageinfo-redirectsto-info": "info",
"pageinfo-contentpage-yes": "Eja",
"pageinfo-protect-cascading-yes": "Eja",
@@ -1363,7 +1435,7 @@
"ago": "como $1",
"just-now": "immoe-immoe",
"hours-ago": "como $1 {{PLURAL:$1|ora|oras}}",
- "minutes-ago": "como $1 {{PLURAL:$1|minutu|minutos}}",
+ "minutes-ago": "$1 {{PLURAL:$1|minutu|minutos}} a como",
"seconds-ago": "como $1 {{PLURAL:$1|segundu|segundos}}",
"monday-at": "Lunis a is $1",
"tuesday-at": "Martis a is $1",
@@ -1413,9 +1485,8 @@
"exif-contrast-0": "Normale",
"exif-saturation-0": "Normale",
"exif-sharpness-0": "Normale",
- "watchlistall2": "totu",
- "namespacesall": "totu",
- "monthsall": "totu",
+ "namespacesall": "totus",
+ "monthsall": "totus",
"confirmemail": "Cunfirma s'indiritzu e-mail",
"confirm_purge_button": "OK",
"confirm-watch-button": "OK",
@@ -1450,10 +1521,11 @@
"watchlisttools-edit": "Càstia e càmbia sa lista de pàginas annotadas",
"watchlisttools-raw": "Acontza sa watchlist dae su testu",
"timezone-utc": "UTC",
+ "duplicate-displaytitle": "<strong>Atentzione:</strong> Su tìtulu visadu \"$2\" remplasat su tìtulu antepostu \"$1\".",
"version": "Versione",
"version-specialpages": "Pàginas ispetziales",
"version-other": "Àteru",
- "version-version": "(Versione $1)",
+ "version-version": "($1)",
"version-license": "Licèntzia MediaWiki",
"version-ext-license": "Licèntzia",
"version-ext-colheader-version": "Versione",
@@ -1489,10 +1561,11 @@
"logentry-upload-overwrite": "$1 {{GENDER:$2|carrigadu}} una versione noa de $3",
"logentry-upload-revert": "$1 {{GENDER:$2|carrigadu}} $3",
"rightsnone": "(nisciunu)",
- "feedback-subject": "Ogetu:",
- "feedback-message": "Messàgiu:",
+ "revdelete-summary": "ogetu de sa modìfica",
"feedback-cancel": "Annudda",
"feedback-close": "Fatu",
+ "feedback-message": "Messàgiu:",
+ "feedback-subject": "Ogetu:",
"searchsuggest-search": "Chirca",
"expand_templates_ok": "OK",
"expand_templates_preview": "Antiprima",
diff --git a/languages/i18n/scn.json b/languages/i18n/scn.json
index 1c40ffd1..39bcc39a 100644
--- a/languages/i18n/scn.json
+++ b/languages/i18n/scn.json
@@ -12,55 +12,58 @@
"Tonyfroio",
"Urhixidur",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Pippinu",
+ "Macofe"
]
},
- "tog-underline": "Suttalìnia li culligamenti:",
+ "tog-underline": "Suttalinia li culligamenti:",
"tog-hideminor": "Ammuccia li canciamenti nichi nta l'ùrtimi canciamenti",
- "tog-hidepatrolled": "Ammuccia li mudìfichi fatti ntâ l'ùrtimi canciamenti",
- "tog-newpageshidepatrolled": "Ammuccia li pàggini virificati di l'alencu dî pàgging cchiù novi",
- "tog-extendwatchlist": "Attiva tutti li funzioni avanzati pi l'ossirvati spiciali, nun sulu l'ultima",
- "tog-usenewrc": "Raggruppa li canci pi pàggina ntê canciamenti ricenti e ntâ lista dî taliati spiciali",
- "tog-numberheadings": "Nummirazzioni automàtica dî tìtuli di paràgrafu",
- "tog-showtoolbar": "Ammustra la barra dî strumenta pi lu canciamentu",
+ "tog-hidepatrolled": "Ammuccia li mudìfichi battugghiati nta l'ùrtimi canciamenti",
+ "tog-newpageshidepatrolled": "Ammuccia li pàggini battugghiati di l'alencu dî pàggini cchiu' novi",
+ "tog-extendwatchlist": "Ammustra tutti i canciamenti ntâ lista taliata, nun sulu u cchiu' ricenti",
+ "tog-usenewrc": "Raggruppa li canciamenti pi' pàggina ntâ lista dî canciamenti ricenti e ntâ lista taliata",
+ "tog-numberheadings": "Nummirazzioni autumàtica dî tìtuli di paràgrafu",
+ "tog-showtoolbar": "Ammustra la barra dî strumenta pû canciamentu",
"tog-editondblclick": "Duppiu click pi canciari l'artìculu",
- "tog-editsectiononrightclick": "Abbìlita lu canciamentu dî sizzioni tràmiti duppiu click a manu dritta supra lu tìtulu dâ sezzioni",
- "tog-watchcreations": "Agghiunci li pàggini criati e li files â lista dî taliati",
- "tog-watchdefault": "Agghiunci li pàggini canciati a l'ossirvati spiciali",
- "tog-watchmoves": "Agghiunci li pàggini spustati a l'ossirvati spiciali",
- "tog-watchdeletion": "Agghiunci li pàggini di mìa cancillati a l'ossirvati spiciali",
- "tog-minordefault": "Ìndica ogni canciamentu comu nicu (sulu comu pridifinitu)",
- "tog-previewontop": "Ammustra l'antiprima prima dâ casella di canciamentu e nun doppu",
- "tog-previewonfirst": "Ammustra l'antiprima supra lu primu canciamentu",
- "tog-enotifwatchlistpages": "Mànnami na e-mail siddu la pàggina subbisci canciamenti",
- "tog-enotifusertalkpages": "Mànnimi nu missaggiu email quannu la mè pàggina di discussioni è canciata",
- "tog-enotifminoredits": "Mànnami na e-mail macari pi li canciamenti nichi di sta pàggina",
- "tog-enotifrevealaddr": "Rivela lu mè ndirizzu e-mail ntê mail di nutificazzioni",
- "tog-shownumberswatching": "Ammustra lu nùmmiru di utenti ca sèquinu la pàggina",
+ "tog-editsectiononrightclick": "Attiva lu canciamentu di na sizzioni quannu si clicca cu' buttuni drittu supra a lu so tìtulu",
+ "tog-watchcreations": "Agghiunci li pàggini chi' creu e li file chi' càrricu â me lista taliata",
+ "tog-watchdefault": "Agghiunci li pàggini e li file chi' canciu â me lista taliata",
+ "tog-watchmoves": "Agghiunci li pàggini e li file chi' spostu â me lista taliata",
+ "tog-watchdeletion": "Agghiunci li pàggini e li file chi' cancellu â me lista taliata",
+ "tog-watchrollback": "Agghiunci li pàggini unni fici nu canciu n'arreri â me lista taliata",
+ "tog-minordefault": "Marca ogni' canciamentu comu nicu pi' mpustazzioni pridifinuta",
+ "tog-previewontop": "Ammustra l'antiprima avanti dâ casedda di canciamentu",
+ "tog-previewonfirst": "Ammustra l'antiprima ô primu canciamentu",
+ "tog-enotifwatchlistpages": "Mànnami nu missàggiu di posta elittrònica quannu na pàggina o nu file dâ me lista taliata subbìsciunu canciamenti",
+ "tog-enotifusertalkpages": "Mànnami nu missaggiu di posta elettrònica quannu la me pàggina di discussioni veni canciata",
+ "tog-enotifminoredits": "Mànnami nu missaggiu di posta elittrònica macari pi li canciamenti nichi di pàggini e file",
+ "tog-enotifrevealaddr": "Ammustra lu me nnirizzu di posta elittrònica ntê missaggi di nutifica",
+ "tog-shownumberswatching": "Ammustra lu nùmmiru di utenti ca talìunu la pàggina",
"tog-oldsig": "Firma attuali:",
- "tog-fancysig": "Interpitra li cumanna wiki nâ firma (senza liami automaticu)",
- "tog-uselivepreview": "Attiva la funzioni ''Live preview'' (richiedi JavaScript; spirimintali)",
- "tog-forceeditsummary": "Chiedi cunferma siddu l'uggettu dû canciamentu è vacanti",
- "tog-watchlisthideown": "Ammuccia li mè canciamenti nta l'ossirvati spiciali",
- "tog-watchlisthidebots": "Ammuccia li canciamenti dî bot nta l'ossirvati spiciali",
- "tog-watchlisthideminor": "Ammuccia li canciamenti nichi nta l'ossirvati spiciali",
- "tog-watchlisthideliu": "Ammuccia li canciamenti di l'utilizzatura riggistrati nti l'ussirvati spiciali",
- "tog-watchlisthideanons": "Ammuccia li canciamenti di l'utilizzatura anònimi nti l'ussirvati spiciali",
- "tog-watchlisthidepatrolled": "Ammuccia li mudìfichi virificati nta l'ussirvati spiciali",
- "tog-ccmeonemails": "Mànnami na copia dî missaggi spiditi a l'àutri utenti",
- "tog-diffonly": "Nun visualizzari lu cuntinutu dâ pàggina quannu s'esequi na ''diff'' tra dui virsioni",
- "tog-showhiddencats": "Ammustra li catigurìi ammucciati.",
- "tog-norollbackdiff": "Umettiri li ''diff'' doppu aviri fattu nu ''rollback''",
- "tog-useeditwarning": "Avvisa quannu si lasaa na paggina di canci cu canci nu sarbati",
- "tog-prefershttps": "Usa sempri na cunnissioni sicura quannu trasi",
- "underline-always": "sempri",
- "underline-never": "mai",
- "underline-default": "manteni li mpustazzioni dû browser o dû tema",
- "editfont-style": "Stili da casedda di canciamentu:",
- "editfont-default": "Pridifinitu dô Browser",
- "editfont-monospace": "Font monospaziu",
- "editfont-sansserif": "Font sans-serif",
- "editfont-serif": "Font serif",
+ "tog-fancysig": "Intèrpitra la firma comu wikitestu (senza liami automaticu)",
+ "tog-uselivepreview": "Attiva l'antiprima in diretta",
+ "tog-forceeditsummary": "Dumanna cunfirma siddu lu riassuntu dûn canciamentu è vacanti",
+ "tog-watchlisthideown": "Ammuccia li me canciamenti ntâ lista taliata",
+ "tog-watchlisthidebots": "Ammuccia li canciamenti dî bot ntâ lista taliata",
+ "tog-watchlisthideminor": "Ammuccia li canciamenti nichi ntâ lista taliata",
+ "tog-watchlisthideliu": "Ammuccia li canciamenti di l'utilizzatura riggistrati ntâ lista taliata",
+ "tog-watchlisthideanons": "Ammuccia li canciamenti di l'utilizzatura anònimi ntâ lista taliata",
+ "tog-watchlisthidepatrolled": "Ammuccia li mudìfichi battugghiati ntâ lista taliata",
+ "tog-ccmeonemails": "Mànnami na copia dî missaggi spiduti a l'àutri utenti",
+ "tog-diffonly": "Nun ammustrari lu cuntinutu dî pàggini sutta dî cunfrunti tra virsioni",
+ "tog-showhiddencats": "Ammustra li catigurìi ammucciati",
+ "tog-norollbackdiff": "Nun ammustrari u cunfruntu tra virsioni doppu aviri fattu nu canciu n'arreri",
+ "tog-useeditwarning": "Avvèrtimi quannu mi nni vaju di na pàggina cu' canciamenti nun sarvati",
+ "tog-prefershttps": "Adòpira sempri na cunnissioni sicura quannu si' trasutu",
+ "underline-always": "Sempri",
+ "underline-never": "Mai",
+ "underline-default": "Mpustazzioni pridifinuta dâ peddi o dû browser",
+ "editfont-style": "Stili dû caràttiri dâ casedda di canciamentu:",
+ "editfont-default": "Pridifinutu dô browser",
+ "editfont-monospace": "Tipu di caràttiri a' larghizza fissa",
+ "editfont-sansserif": "Tipu di caràttiri senza grazzî",
+ "editfont-serif": "Tipu di caràttiri cu' grazzî",
"sunday": "Duminicadìa",
"monday": "Lunidìa",
"tuesday": "Martidìa",
@@ -73,16 +76,16 @@
"tue": "mar",
"wed": "mer",
"thu": "jov",
- "fri": "vènn",
- "sat": "sabb",
- "january": "jinnaru",
+ "fri": "ven",
+ "sat": "sab",
+ "january": "Jinnaru",
"february": "Frivaru",
"march": "Marzu",
"april": "Aprili",
"may_long": "Maiu",
"june": "Giugnu",
"july": "Giugnettu",
- "august": "Austu",
+ "august": "Aùstu",
"september": "Sittèmmiru",
"october": "Uttùviru",
"november": "Nuvèmmiru",
@@ -90,44 +93,44 @@
"january-gen": "jinnaru",
"february-gen": "frivaru",
"march-gen": "marzu",
- "april-gen": "Aprili",
- "may-gen": "Maiu",
+ "april-gen": "aprili",
+ "may-gen": "maiu",
"june-gen": "giugnu",
"july-gen": "giugnettu",
- "august-gen": "Austu",
+ "august-gen": "austu",
"september-gen": "sittèmmiru",
"october-gen": "uttùviru",
"november-gen": "nuvèmmiru",
- "december-gen": "Dicèmmiru",
+ "december-gen": "dicèmmiru",
"jan": "jin",
- "feb": "Friv",
+ "feb": "friv",
"mar": "mar",
"apr": "apr",
- "may": "Maiu",
+ "may": "maiu",
"jun": "giu",
"jul": "giugn",
- "aug": "Au",
- "sep": "Sitt",
+ "aug": "aus",
+ "sep": "sit",
"oct": "utt",
"nov": "nuv",
- "dec": "Dic",
- "january-date": "$1 jinnaru",
- "february-date": "$1 frivaru",
+ "dec": "dic",
+ "january-date": "$1 di jinnaru",
+ "february-date": "$1 di frivaru",
"march-date": "$1 di marzu",
"april-date": "$1 di aprili",
"may-date": "$1 di maiu",
"june-date": "$1 di giugnu",
"july-date": "$1 di giugnettu",
- "august-date": "$1 di austu",
+ "august-date": "$1 di aùstu",
"september-date": "$1 di sittèmmiru",
"october-date": "$1 di uttùviru",
"november-date": "$1 di nuvèmmiru",
"december-date": "$1 di dicèmmiru",
"pagecategories": "{{PLURAL:$1|Catigurìa|Catigurìi}}",
- "category_header": "Artìculi ntâ catigurìa \"$1\"",
+ "category_header": "Pàggini ntâ catigurìa \"$1\"",
"subcategories": "Suttacatigurìi",
"category-media-header": "File multimidiali ntâ catigurìa \"$1\"",
- "category-empty": "''Sta catigurìa attuarmenti nun havi artìculi o \"media\".''",
+ "category-empty": "<em>Sta catigurìa pi' com'ora nun cunteni nudda pàggina e nuddu file multimidiali.</em>",
"hidden-categories": "{{PLURAL:$1|Catigurìa ammucciata|Catigurìi ammuciati}}",
"hidden-category-category": "Catigurìi ammucciati",
"category-subcat-count": "{{PLURAL:$2|Sta catigurìa cunteni na sula suttacatigurìa, nnicata ccà sutta.|Sta catigurìa cunteni {{PLURAL:$1|la suttacatigurìa|li $1 suttacatigurìi nnicati}} ccà sutta, sùpira nu tutali di $2.}}",
@@ -140,22 +143,22 @@
"index-category": "Pàggini nnicizzati",
"noindex-category": "Pàggini nun nnicizzati",
"broken-file-category": "Pàggini ca nclùdunu file inesistenti",
- "about": "pàggina",
- "article": "artìculu",
+ "about": "Nfurmazzioni",
+ "article": "Pàggina di cuntinutu",
"newwindow": "(grapi na finestra nova)",
- "cancel": "annulla",
+ "cancel": "Annulla",
"moredotdotdot": "Àutru...",
"morenotlisted": "Sta lista è ncumpreta",
"mypage": "Pàggina",
- "mytalk": "la mè pàggina di discussioni",
- "anontalk": "Discussione pi stu IP",
+ "mytalk": "La me pàggina di discussioni",
+ "anontalk": "Discussioni di stu nnirizzu IP",
"navigation": "Navigazzioni",
"and": "&#32;e",
"qbfind": "Attrova",
"qbbrowse": "Sfogghia",
"qbedit": "Cancia",
"qbpageoptions": "Opzioni pàggina",
- "qbmyoptions": "Li mè pàggini",
+ "qbmyoptions": "Li me pàggini",
"faq": "Dumanni cumuni",
"faqpage": "Project:Dumanni comuni",
"actions": "Azzioni",
@@ -163,70 +166,72 @@
"variants": "Varianti",
"navigation-heading": "Menù di navigazzioni",
"errorpagetitle": "Erruri",
- "returnto": "Ritorna a $1.",
+ "returnto": "Ritorna a' $1.",
"tagline": "Di {{SITENAME}}",
- "help": "Aiutu",
+ "help": "Guida",
"search": "Arriscedi",
- "searchbutton": "Va' cerca",
+ "searchbutton": "Va cerca",
"go": "Trova",
"searcharticle": "Vai",
- "history": "cronuluggìa",
- "history_short": "storia",
+ "history": "Crunuluggìa dâ pàggina",
+ "history_short": "Crunuluggìa",
"updatedmarker": "canciata dâ mè ùrtima vìsita",
"printableversion": "Virsioni stampàbbili",
"permalink": "Liami pirmanenti",
"print": "Stampa",
"view": "Talìa",
- "view-foreign": "Talìa supra $1",
- "edit": "cancia",
+ "view-foreign": "Talìa supra a' $1",
+ "edit": "Cancia",
"edit-local": "Cancia la discrizzioni lucali",
"create": "Crea",
- "create-local": "Junci na discrizzioni lucali",
+ "create-local": "Agghiunci na discrizzioni lucali",
"editthispage": "Cancia sta pàggina",
"create-this-page": "Crea sta pàggina",
- "delete": "elìmina",
- "deletethispage": "Elìmina sta pàggina",
- "undeletethispage": "Annulla la scancillazzioni di sta pàggina",
- "undelete_short": "Ricùpira {{PLURAL:$1|na rivisioni|$1 rivisioni}}",
+ "delete": "Cancella",
+ "deletethispage": "Cancella sta pàggina",
+ "undeletethispage": "Annulla la cancillazzioni di sta pàggina",
+ "undelete_short": "Annulla la cancillazzioni di {{PLURAL:$1|na virsioni|$1 virsioni}}",
"viewdeleted_short": "Talìa {{PLURAL:$1|nu canciamentu scancillatu|$1 canciamenti scancillati}}",
"protect": "Pruteggi",
"protect_change": "cancia",
"protectthispage": "Pruteggi sta pàggina",
"unprotect": "Cancia la prutizzioni",
- "unprotectthispage": "Cancia la prutizzioni a sta pàggina",
- "newpage": "pàggina nova",
- "talkpage": "Pàggina di discussioni",
+ "unprotectthispage": "Cancia la prutizzioni di sta pàggina",
+ "newpage": "Pàggina nova",
+ "talkpage": "Discussioni supra a' sta pàggina",
"talkpagelinktext": "Discussioni",
"specialpage": "Pàggina spiciali",
"personaltools": "Strumenta pirsunali",
- "articlepage": "artìculu",
- "talk": "discussioni",
+ "articlepage": "Vidi l'artìculu",
+ "talk": "Discussioni",
"views": "Vìsiti",
- "toolbox": "Strummenta",
- "userpage": "Visualizza la pàggina utenti",
- "projectpage": "Visualizza la pàggina di sirvizziu",
- "imagepage": "Visualizza la pàggina dô file",
- "mediawikipage": "Visualizza lu missaggiu",
- "templatepage": "Visualizza lu template",
- "viewhelppage": "Visualizza la pàggina d'aiutu",
- "categorypage": "Visualizza la catigurìa",
- "viewtalkpage": "Vidi discussioni",
- "otherlanguages": "Àutri lingui",
- "redirectedfrom": "(Rinnirizzata di $1)",
- "redirectpagesub": "Pàggina di rinnirizzamentu",
- "lastmodifiedat": "Sta pàggina fu canciata a $2 di lu $1.",
- "viewcount": "Sta pàggina hà statu liggiuta {{PLURAL:$1|una vota|$1 voti}}.",
- "protectedpage": "Pàggina bluccata",
- "jumpto": "Va' a:",
+ "toolbox": "Strumenta",
+ "userpage": "Talìa la pàggina di l'utenti",
+ "projectpage": "Talìa la pàggina di sirvizziu",
+ "imagepage": "Talìa la pàggina dû file",
+ "mediawikipage": "Talìa lu missaggiu",
+ "templatepage": "Talìa lu template",
+ "viewhelppage": "Talìa la pàggina dâ guida",
+ "categorypage": "Talìa la catigurìa",
+ "viewtalkpage": "Talìa la discussioni",
+ "otherlanguages": "Nta autri lingui",
+ "redirectedfrom": "(Rimannu a' pàrtiri di $1)",
+ "redirectpagesub": "Pàggina di rimannu",
+ "redirectto": "Rimanna a:",
+ "lastmodifiedat": "Sta pàggina fu' canciata l'ùltima vota a li $2 di lu $1.",
+ "viewcount": "Sta pàggina hâ statu liggiuta {{PLURAL:$1|na vota|$1 voti}}.",
+ "protectedpage": "Pàggina prutetta",
+ "jumpto": "Vai a':",
"jumptonavigation": "navigazzioni",
- "jumptosearch": "Va' cerca",
- "view-pool-error": "Ci spiaci, li server ni stu mumentu sunu troppu carichi. Troppi utenti stannu circannu di taliari sta pàggina. Aspetta n'anticchia prima di pruvari a ritaliari sta pàggina.\n\n$1",
- "generic-pool-error": "Ni spiaci, li server ni stu mumentu sunu troppu carrichi. Troppi utenti stannu circannu di taliari sta pàggina. Aspetta n'anticchia prima di pruvari a ritaliari sta pàggina.",
+ "jumptosearch": "cerca",
+ "view-pool-error": "Nni dispiaci, ma li server nta stu mumentu sunnu troppu carrichi.\nTroppi utenti stannu circannu di taliari sta pàggina.\nPi' favuri spetta n'anticchia prima di pruvari n'autra vota a taliari sta pàggina.\n\n$1",
+ "generic-pool-error": "Nni dispiaci, ma li server nta stu mumentu sunnu troppu càrrichi.\nTroppi utenti stannu circannu di taliari sta risorsa.\nPi' favuri spetta n'anticchia prima di pruvari n'autra vota a taliari sta risorsa.",
"pool-timeout": "Tempu scadutu aspittannu lu sbloccu",
"pool-queuefull": "La cuda dû pool è china",
"pool-errorunknown": "Erruri scanusciutu",
- "pool-servererror": "Lu sirivzzu di cuntaturi dâ riserva nun è dispunìbbili ($1)",
- "aboutsite": "Àutri nfurmazzioni supra {{SITENAME}}",
+ "pool-servererror": "Lu sirvizziu di cuntaturi dî pool nun è dispunìbbili ($1)",
+ "poolcounter-usage-error": "Erruri d'utilizzu: $1",
+ "aboutsite": "Nfurmazzioni supra a' {{SITENAME}}",
"aboutpage": "Project:Àutri nformazzioni",
"copyright": "Lu cuntinutu è utilizzàbbili secunnu la $1, sarvu minzioni cuntraria.",
"copyrightpage": "{{ns:project}}:Copyright",
@@ -234,7 +239,7 @@
"currentevents-url": "Project:Nutizzî",
"disclaimers": "Avvirtenzi",
"disclaimerpage": "Project:Avvirtenzi ginirali",
- "edithelp": "Guida",
+ "edithelp": "Guida pî canciamenti",
"mainpage": "Pàggina principali",
"mainpage-description": "Pàggina principali",
"policy-url": "Project:Policy",
@@ -242,30 +247,33 @@
"portal-url": "Project:Porta dâ cumunitati",
"privacy": "Pulìtica supra la privacy",
"privacypage": "Project:Pulìtica rilativa â privacy",
- "badaccess": "Pirmessi nun sufficienti",
- "badaccess-group0": "Nun hai li pirmessi nicissari p'esèquiri l'azzioni addumannata.",
+ "badaccess": "Erruri di pirmissu",
+ "badaccess-group0": "Nun hai lu pirmissu p'esèquiri l'azzioni chi' hai addumannatu.",
"badaccess-groups": "La funzioni addumannata è risirvata a l'utenti ca appartèninu {{PLURAL:$2|ô gruppu|a unu dî gruppi siquenti}}: $1.",
"versionrequired": "È nicissaria la virsioni $1 dû software MediaWiki",
"versionrequiredtext": "P'usari sta pàggina ci voli la virsioni $1 dû software MediaWiki. Talìa [[Special:Version|sta pàggina]]",
- "ok": "OK",
+ "ok": "Va' bonu",
"retrievedfrom": "Estrattu di \"$1\"",
- "youhavenewmessages": "Ricivìsti $1 ($2).",
- "youhavenewmessagesfromusers": "Hai $1 di {{PLURAL:$3|n'àutru utenti|$3 utenti}} ($2).",
- "youhavenewmessagesmanyusers": "Hai $1 di na pocu di utenti ($2).",
+ "youhavenewmessages": "Ricivisti $1 ($2).",
+ "youhavenewmessagesfromusers": "Ricivisti $1 di {{PLURAL:$3|n'autru utenti|$3 utenti}} ($2).",
+ "youhavenewmessagesmanyusers": "Ricivisti $1 di tanti utenti ($2).",
"newmessageslinkplural": "{{PLURAL:$1|nu missaggiu novu|999=missaggi novi}}",
- "newmessagesdifflinkplural": "{{PLURAL:$1|ùrtimu canciamenti|999=ùrtimi canciamenti}}",
- "youhavenewmessagesmulti": "Hai missaggi novi supra $1",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|ùrtimu canciamentu|999=ùrtimi canciamenti}}",
+ "youhavenewmessagesmulti": "Ricivisti missaggi novi supra a' $1",
"editsection": "cancia",
"editold": "cancia",
- "viewsourceold": "talìa la fonti",
+ "viewsourceold": "talìa u surgenti",
"editlink": "cancia",
- "viewsourcelink": "Talìa la funti",
- "editsectionhint": "Cancia la sezzioni $1",
- "toc": "Ìndici",
+ "viewsourcelink": "talìa u surgenti",
+ "editsectionhint": "Cancia la sizzioni $1",
+ "toc": "Ìnnici",
"showtoc": "ammustra",
"hidetoc": "ammuccia",
- "collapsible-collapse": "Cumprimi",
- "collapsible-expand": "Spanni",
+ "collapsible-collapse": "Strinci",
+ "collapsible-expand": "Llarga",
+ "confirmable-confirm": "Si' {{GENDER:$1|sicuru|sicura}}?",
+ "confirmable-yes": "Sì",
+ "confirmable-no": "No",
"thisisdeleted": "Vidi e/o riprìstina $1?",
"viewdeleted": "Vidi $1?",
"restorelink": "{{PLURAL:$1|nu canciamentu annullatu|$1 canciamenti annullati}}",
@@ -274,20 +282,20 @@
"feed-unavailable": "Nun sunnu dispunìbbili li feed",
"site-rss-feed": "Feed RSS di $1",
"site-atom-feed": "Feed Atom di $1",
- "page-rss-feed": "Feed RSS pi \"$1\"",
- "page-atom-feed": "Feed Atom pi \"$1\"",
- "red-link-title": "$1 (ancora nun scrivutu)",
- "sort-descending": "Urdinamenti dicriscenti",
- "sort-ascending": "Urdinamenti criscenti",
- "nstab-main": "artìculu",
- "nstab-user": "Pàggina d'utenti",
- "nstab-media": "File multimidiali",
- "nstab-special": "Spiciali",
- "nstab-project": "pàggina",
- "nstab-image": "mmàggini",
- "nstab-mediawiki": "missagiu",
- "nstab-template": "template",
- "nstab-help": "aiutu",
+ "page-rss-feed": "Feed RSS di \"$1\"",
+ "page-atom-feed": "Feed Atom di \"$1\"",
+ "red-link-title": "$1 (la pàggina nun esisti)",
+ "sort-descending": "Òrdina a' scìnniri",
+ "sort-ascending": "Òrdina a' nchianari",
+ "nstab-main": "Pàggina",
+ "nstab-user": "Pàggina di l'utenti",
+ "nstab-media": "Pàggina dû file multimidiali",
+ "nstab-special": "Pàggina spiciali",
+ "nstab-project": "Pàggina di sirvizziu",
+ "nstab-image": "File",
+ "nstab-mediawiki": "Missaggiu",
+ "nstab-template": "Template",
+ "nstab-help": "Pàggina di guida",
"nstab-category": "Catigurìa",
"nosuchaction": "Opirazzioni nun ricanusciuta",
"nosuchactiontext": "L'azzioni spicificata nâ URL nun è vailida.\nPoi aviri sbagghiatu a digitari â URL, o cliccatu supra nu link sbagghiatu.\nChistu putissi ndicari nu bug nô software usatu da {{SITENAME}}.",
@@ -297,61 +305,75 @@
"databaseerror": "Erruri dû database",
"databaseerror-text": "Si virificau n'erruri nti na dimanna dû databbasi.\nPutissi siri ca c'è nu bacu ntô prugramma.",
"databaseerror-textcl": "Si virificau n'erruri ntâ dimanna dû databasi",
- "databaseerror-query": "Dumannaä $1",
+ "databaseerror-query": "Query: $1",
"databaseerror-function": "Funzioni: $1",
"databaseerror-error": "Erruri: $1",
"laggedslavemode": "Accura: La pàggina putissi nun ripurtari l'aggiurnamenti cchiù ricenti.",
- "readonly": "Database bluccatu",
- "enterlockreason": "Ìnnica lu mutivu dû bloccu, spicificannu lu mumentu 'n cui è prisumìbbili ca veni rimossu.",
- "readonlytext": "Nta stu mumentu lu database è bluccatu e nun sunnu pussìbbili junti o canciamenti a li pàggini. Lu bloccu è di sòlitu lijatu a upirazzioni di manutinzioni urdinària, a lu tèrmini di lu quali lu database è di novu accissìbbili. L'amministraturi di sistema ca fici lu bloccu desi sta spiecazzioni: $1",
- "missing-article": "Lu database nun attruvau lu testu di na pàggina c'avìa attruvari sutta lu nomu di \"$1\" $2.\n\nChistu di sòlitu avveni quannu s'arrichiama, a partiri di la crunuluggìa o di lu cunfruntu tra rivisioni, nu cullicamentu a na pàggina scancillata, a nu cunfrontu tra rivisioni ca nun asìstunu o a nu cunfrontu tra rivisioni pulizziati di la crunuluggìa.\n\nNta lu casu ca non fussi accuddì, è fàcili ca si scuprìu nu sbagghiu di lu software MediaWiki.\nV'arringrazziamu si signaliati zoccu succidìu a nu [[Special:ListUsers/sysop|amministraturi]] spicificannu la URL 'n chistioni.",
- "missingarticle-rev": "(rivisioni#: $1)",
+ "readonly": "Basi di dati bluccata",
+ "enterlockreason": "Spiega lu mutivu dû bloccu, spicificannu na stima di quannu veniravi livatu.",
+ "readonlytext": "Com'ad ora la basi di dati è bluccata e nun sunnu pussìbbili junti o canciamenti; lu mutivu prubbabbili è la manutinzioni ordinària, finuta la quali la basi di dati turniravi normali.\n\nL'amministraturi chi la bluccau desi sta spiegazzioni: $1",
+ "missing-article": "La basi di dati nun attruvau lu testu di na pàggina ch'avìssi avutu a' attruvari, cu' nomu \"$1\" $2.\n\nSta cosa di sòlitu succedi quannu s'arrichiama, a' pàrtiri di na crunuluggìa o di nu cunfruntu tra virsioni, nu culligamentu a na pàggina chi' fu' cancillata.\n\nSi' nun è accussì, po' èssiri ca scupristi nu bug ntô software.\nPi' favuri signala stu fattu a' n'[[Special:ListUsers/sysop|amministraturi]], spicificannu l'URL.",
+ "missingarticle-rev": "(№ di virsioni: $1)",
"missingarticle-diff": "(Diff: $1, $2)",
- "readonly_lag": "Lu database hà statu bluccatu automaticamenti, mentri li server cu li database slave si sincrunìzzanu cu lu master",
+ "readonly_lag": "La basi di dati fu' bluccata autumaticamenti nta mentri ca li server di basi di dati slave si sincrunìzzanu cu' chiddu master",
"internalerror": "Erruri nternu",
"internalerror_info": "Erruri nternu: $1",
- "filecopyerror": "Mpussìbbili cupiari lu file \"$1\" n \"$2\".",
- "filerenameerror": "Mpussìbbili rinuminari lu file \"$1\" 'n \"$2\".",
- "filedeleteerror": "Mpussìbbili cancillari lu file \"$1\".",
- "directorycreateerror": "Mpussìbbili criari la directory \"$1\".",
- "filenotfound": "File \"$1\" nun attruvatu.",
- "unexpected": "Valuri mpruvistu: \"$1\"=\"$2\".",
- "formerror": "Erruri: mpussìbbili mannari lu mòdulu",
- "badarticleerror": "Opirazzioni nun cunzintita pi sta pàggina.",
- "cannotdelete": "Mpussìbbili cancillari la pàggina o lu file \"$1\" addumannatu. Putissi siri già cancillatu di quarcun'àutru.",
- "cannotdelete-title": "Mpussibbili eliminari la pàggina \"$1\"",
- "delete-hook-aborted": "Canciamentu nun arsciuttiattu di l'hook.\nNun desi nudda spiecazzioni.",
- "badtitle": "Tìtulu nun currettu",
- "badtitletext": "Lu tìtulu dâ pàggina addumannata è vacanti, erratu o cu caràttiri nun ammessi oppuru diriva di n'erruri ntê culligamenti tra siti wiki diversi o virsioni n lingui diversi dû stissu situ.",
- "perfcached": "'''Nota:''' li dati ca sèquinu sunnu stratti di na copia ''cache'' dû database, nun aggiurnati n tempu riali. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
- "perfcachedts": "Li dati ccà sutta foru attruvati e sunnu aggiurnati ô $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+ "filecopyerror": "Nun fu' pussìbbili cupiari lu file \"$1\" nta \"$2\".",
+ "filerenameerror": "Nun fu' pussìbbili canciari lu nomu dû file di \"$1\" a' \"$2\".",
+ "filedeleteerror": "Nun fu pussìbbili cancillari lu file \"$1\".",
+ "directorycreateerror": "Nun fu pussìbbili criari la cartella \"$1\".",
+ "directoryreadonlyerror": "La cartella \"$1\" è a' sula littura.",
+ "directorynotreadableerror": "La cartella \"$1\" nun è liggìbbili.",
+ "filenotfound": "Nun fu pussìbbili truvari lu file \"$1\".",
+ "unexpected": "Valuri nun privistu: \"$1\"=\"$2\".",
+ "formerror": "Erruri: Nun fu pussìbbili mannari lu mòdulu.",
+ "badarticleerror": "St'opirazzioni nun è cunsintuta nta sta pàggina.",
+ "cannotdelete": "Nun fu' pussìbbili cancillari la pàggina o lu file \"$1\".\nPutissi aviri statu già cancillatu di quarchidun'autru.",
+ "cannotdelete-title": "Nun è pussìbbili cancillari la pàggina \"$1\"",
+ "delete-hook-aborted": "Cancillazzioni annullata di n'hook.\nNun desi nudda spiegazzioni.",
+ "no-null-revision": "Non fu' pussibbili criari na virsioni nulla pâ paggina \"$1\"",
+ "badtitle": "Tìtulu nun bonu",
+ "badtitletext": "Lu tìtulu di pàggina addumannatu nun era vàlidu, era vacanti, o vinìa dûn culligamentu intir-linguìsticu o intir-wiki malu fattu.\nPutissi cuntèniri unu o cchiu' ssai caràttiri chi' nun su' cunsintuti ntê tìtula.",
+ "perfcached": "Li dati ca sèquinu sunnu stratti di na ''cache'' e putissiru nun èssiri aggiurnati. Ntâ ''cache'' {{PLURAL:$1|capi un risultatu|càpunu $1 risultati}} massimu.",
+ "perfcachedts": "Li dati ca sèquinu sunnu stratti di na ''cache'', e furu aggiurnati l'ultima vota ô $1. Ntâ ''cache'' {{PLURAL:$4|capi un risultatu|capunu $4 risultati}} massimu.",
"querypage-no-updates": "L'aggiurnamenti dâ pàggina sunnu timpuraniamenti suspisi. Li dati 'n chidda cuntinuti nun vèninu aggiurnati.",
- "viewsource": "Talìa la fonti",
- "viewsource-title": "Visualizza la surgenti di $1",
+ "viewsource": "Talìa lu surgenti",
+ "viewsource-title": "Talìa lu surgenti di $1",
"actionthrottled": "Azzioni ritardata",
"actionthrottledtext": "Comu misura di sicurezza contru lu spam, l'esecuzioni di alcuni azzionu è limitata a nu nùmmuru massimu di voti ni nu determinatu piriudu du tempu, limiti ca ni stu casu fu supiratu. Si prega di ripruvari tra qualchi minutu.",
- "protectedpagetext": "Sta pàggina fu bluccata pi privèniri li canciamenti.",
+ "protectedpagetext": "Sta pàggina fu bluccata pi privèniri canciamenti o autri opirazzioni.",
"viewsourcetext": "È pussìbbili visualizzari e cupiari lu còdici surgenti di sta pàggina:",
"viewyourtext": "È pussibbili visualizzarei cupiari lu còdici surgenti dî '''tò canciamenti''' nti sta pàggina:",
"protectedinterface": "Sta pàggina cunteni un elementu ca fà parti dâ nterfaccia utenti dû software eggh'è prutetta p'evitari pussìbbili abbusi. Pi jùnciri o canciari li traduzzioni pi tutti li wiki usari [//translatewiki.net/translatewiki.net] lu pruggettu di lucalizzazzioni di Mediawiki.",
- "editinginterface": "'''Accura:''' Lu testu di sta pàggina fà parti dî interfaccia utenti dû situ. Tutti li canciamenti appurtati a sta pàggina si riflèttinu supra li missaggi visualizzati pi tutti l'utenti. Pi li traduzioni, cunsidira â pussibilità di usari [//translatewiki.net/wiki/Main_Page?setlang=scn translatewiki.net], u prugettu di localizzazioni MediaWiki.",
+ "editinginterface": "<strong>Accura:</strong> Lu testu di sta pàggina fà parti di l'interfaccia utenti dû situ.\nTutti li canciamenti appurtati a sta pàggina si riflèttinu supra li missaggi visualizzati pi tutti l'utenti di sta wiki.",
+ "translateinterface": "Pi' agghiunciri o canciari traduzzioni pi' tutti i wiki, pi' favuri adupirati [//translatewiki.net/ translatewiki.net], lu pruggettu di lucalizzazzioni di MediaWiki.",
"cascadeprotected": "Supra sta pàggina nun è pussìbbili effittuari canciamenti pirchì veni nclusa nt{{PLURAL:$1|â pàggina siquenti, ca fu prutetta|ê pàggini siquenti, ca foru prutetti}} silizziunannu la prutizzioni \"ricursiva\":\n$2",
"namespaceprotected": "Nun hai lu pirmissu pi canciari li pàggini ntô namespace '''$1'''.",
+ "customcssprotected": "Nun hai lu pirmissu pi' canciari sta pàggina CSS picchì cunteni i mpustazzioni pirsunali di n'autru utenti.",
+ "customjsprotected": "Nun hai lu pirmissu pi' canciari sta pàggina JavaScript picchì cunteni i mpustazzioni pirsunali di n'autru utenti.",
+ "mycustomcssprotected": "Nun hai lu pirmissu pi' canciari sta paggina CSS.",
+ "mycustomjsprotected": "Nun hai lu pirmissu pi' canciari sta pàggina JavaScript.",
+ "myprivateinfoprotected": "Nun hai lu pirmissu pi' canciari li to nfurmazzioni risirvati.",
+ "mypreferencesprotected": "Nun hai lu pirmissu pi' canciari li to prifirenzi.",
"ns-specialprotected": "Li pàggini ntô namespace {{ns:special}} non ponnu èssiri canciati.",
"titleprotected": "La criazzioni di sta pàggina cu stu tìtulu fu bluccata da [[User:$1|$1]].\nLa mutivazzioni è chista: ''$2''.",
- "filereadonlyerror": "Nun fu pussìbbili canciari lu file \"$1\" pirchì lu repository di file \"$2\" è 'n mudalitati di sula littura.La mutivazzioni è \"''$3''\".",
+ "filereadonlyerror": "Nun fu pussìbbili canciari lu file \"$1\" pirchì lu repository di file \"$2\" è 'n mudalitati di sula littura.\n\nL'amministraturi chi' lu bluccau desi sta spiegazzioni: \"$3\".",
+ "invalidtitle-knownnamespace": "Tìtulu nun vàlidu cu' spazziu dî nomi \"$2\" e testu \"$3\"",
+ "invalidtitle-unknownnamespace": "Tìtulu nun vàlidu cu' nùmmiru di spazziu dî nomi scanusciutu $1 e testu \"$2\"",
"exception-nologin": "Nun trasutu",
- "exception-nologin-text": "Sta pàggina o stâzzioni havi abbisognu ca tu si cunnittutu a sta wiki",
+ "exception-nologin-text": "Pi' favuri trasi pi' putiri accèdiri a' sta pàggina o a' st'azzioni.",
+ "exception-nologin-text-manual": "Pi' favuri $1 pi' putiri accèdiri a' sta pàggina o a' st'azziòni.",
"virus-badscanner": "Sbagghiu di cunfigurazzioni: antivirus scanusciutu: ''$1''",
"virus-scanfailed": "scanzioni nun arrinisciuta (còdici $1)",
"virus-unknownscanner": "antivirus scanusciutu:",
- "logouttext": "'''Nisciuta. Ora siti fora.'''\n\nPoi cuntinuari a usari {{SITENAME}} di manera anònima, o poi <span class='plainlinks'>[$1 tràsiri n'àutra vota]</span> cu lu stissu o cu n'àutru nomu d'utenti.\nAccura chi quarchi pàggina pò cuntinuari a èssiri ammustrata comu si nun avissi nisciutu nzinu a quannu tu nun scancelli tutta la mimoria dû tò browser.",
+ "logouttext": "<strong>Nisciuta. Ora siti fora.</strong>\n\nAccura chi quarchi pàggina pò cuntinuari a èssiri ammustrata comu si nun avissi nisciutu nzinu a quannu tu nun scancelli tutta la mimoria dû tò browser.",
"welcomeuser": "Bommegna, $1!",
- "welcomecreation-msg": "Lu cuntu fu criatu. Nun ascurdàriti di pirsunalizzari li prifirenzi pi {{SITENAME}}",
- "yourname": "Lu tò nomu d'utenti (''user name'')",
+ "welcomecreation-msg": "U to cuntu fu' criatu.\nPoi canciari li to [[Special:Preferences|prifirenzi]] di {{SITENAME}} si' voi.",
+ "yourname": "Nomu utenti:",
"userlogin-yourname": "Nomu utenti",
"userlogin-yourname-ph": "Nzirìsci lu tò nomu utenti",
- "yourpassword": "La tò ''password''",
+ "createacct-another-username-ph": "Nzirisci lu nomu utenti",
+ "yourpassword": "Password:",
"userlogin-yourpassword": "Password",
"userlogin-yourpassword-ph": "Nzirisci la tò password",
"createacct-yourpassword-ph": "Nzirisci na password",
@@ -360,340 +382,452 @@
"createacct-yourpasswordagain-ph": "Nzirisci la password attorna",
"remembermypassword": "Arricorda la password supra stu computer (pi ô massimu $1 {{PLURAL:$1|jornu|jorna}})",
"userlogin-remembermypassword": "Mantènimi culligatu",
- "userlogin-signwithsecure": "Usa na cunnissioni sicura",
- "yourdomainname": "Lu tò dominiu",
- "password-change-forbidden": "Nun putiti canciari la password nti sta wiki",
+ "userlogin-signwithsecure": "Adopira na cunnissioni sicura",
+ "yourdomainname": "Lu to duminiu:",
+ "password-change-forbidden": "Nun poi canciari li password nta sta wiki.",
"externaldberror": "S'havi virificatu n'erruri cû server d'autinticazzioni sternu, oppuru nun si disponi di l'auturizzazzioni nicissari p'aggiurnari lu propiu accessu sternu.",
"login": "Trasi",
- "nav-login-createaccount": "Riggìstrati o trasi",
- "userlogin": "Riggìstrati o trasi",
+ "nav-login-createaccount": "Trasi / crea nu cuntu",
+ "userlogin": "Trasi / crea nu cuntu",
"userloginnocreate": "Trasi",
"logout": "Nesci",
"userlogout": "Nesci",
- "notloggedin": "Nun v'aviti riggistratu",
- "userlogin-noaccount": "Nun ci l'hai nu cuntu?",
- "userlogin-joinproject": "Scrìviti a {{SITENAME}}",
- "nologin": "Nun nn'aviti nu cuntu pi ccà? '''$1'''.",
- "nologinlink": "Arriggistràtivi",
- "createaccount": "Criati un cuntu novu",
- "gotaccount": "Hai già nu cuntu? '''$1'''.",
+ "notloggedin": "Nun trasutu",
+ "userlogin-noaccount": "Nun hai nu cuntu?",
+ "userlogin-joinproject": "Scrìviti a' {{SITENAME}}",
+ "nologin": "Nun hai nu cuntu? $1.",
+ "nologinlink": "Crea nu cuntu",
+ "createaccount": "Criazzioni dûn cuntu",
+ "gotaccount": "Già hai nu cuntu? $1.",
"gotaccountlink": "Trasi",
- "userlogin-resetlink": "T'ascurdasti li dittagli pâ trasuta?",
- "userlogin-resetpassword-link": "Reinizzializza la tò password",
- "userlogin-helplink2": "Aiutu pâ trasuta",
- "createacct-emailrequired": "Nnirizzu e-mail",
- "createacct-emailoptional": "Nnirizzu e-mail (facurtativu)",
- "createacct-email-ph": "Nzirisci lu tò nnirizzu e-mail",
- "createaccountmail": "Utilizzari na password timpurania casuali e mannàrila ô nnirizzu e-mail spicificatu ccàssutta",
- "createacct-realname": "Nomu riali (facurtativu)",
+ "userlogin-resetlink": "Ti scurdasti li dittagghî pâ trasuta?",
+ "userlogin-resetpassword-link": "Ti scurdasti la password?",
+ "userlogin-helplink2": "Ajutu pâ trasuta",
+ "userlogin-loggedin": "Già trasìsti comu {{GENDER:$1|$1}}.\nAdòpira lu mòdulu ccassutta pi' tràsiri comu n'autru utenti.",
+ "userlogin-createanother": "Crea n'autru cuntu",
+ "createacct-emailrequired": "Nnirizzu di posta elittrònica",
+ "createacct-emailoptional": "Nnirizzu di posta elittrònica (facurtativu)",
+ "createacct-email-ph": "Nzirisci lu to nnirizzu di posta elittrònica",
+ "createacct-another-email-ph": "Nzirisci u nnirizzu di posta elittrònica",
+ "createaccountmail": "Adòpira na password timpurania casuali e mànnila ô nnirizzu di posta elittrònica spicificatu",
+ "createacct-realname": "Nomu veru (facurtativu)",
"createaccountreason": "Mutivu:",
"createacct-reason": "Mutivu",
- "createacct-reason-ph": "Pirchì stai criannu n'àutru cuntu?",
- "createacct-captcha": "Cuntrollu di sicurezza",
+ "createacct-reason-ph": "Pirchì stai criannu n'àutru cuntu",
+ "createacct-captcha": "Cuntrollu di sicurizza",
"createacct-imgcaptcha-ph": "Nzirìsci lu testu ca vidi ccassupra",
- "createacct-submit": "Crèa nu cuntu",
- "createacct-another-submit": "Crèa n'autru cuntu",
- "createacct-benefit-heading": "{{SITENAME}} è fatta di pirsuni comu a tìa.",
+ "createacct-submit": "Crea lu to cuntu",
+ "createacct-another-submit": "Crea n'autru cuntu",
+ "createacct-benefit-heading": "{{SITENAME}} è fatta di pirsuni comu a' tìa.",
"createacct-benefit-body1": "{{PLURAL:$1|cuntribbutu|cuntribbuti}}",
"createacct-benefit-body2": "{{PLURAL:$1|pàggina|pàggini}}",
- "createacct-benefit-body3": "{{PLURAL:$1|cuntribbutuori ricenti|cuntribbutura ricenti}}",
- "badretype": "La ''password'' chi mittisti nun è bona.",
- "userexists": "Lu nomu utenti nzeritu è già usatu. Ti prijamu pirciò di vuliri scègghiri nu nomu utenti diversu.",
- "loginerror": "Erruri nta l'accessu",
- "createacct-error": "Erruri ntâ criazzioni di l'utenza",
- "createaccounterror": "Mpussibbili di criari l'account $1",
- "nocookiesnew": "Lu nomu utenti pi tràsiri fu criatu, ma nun hai effittuatu lu log in. {{SITENAME}} usa li cookies pi gistiri li log in. Lu tò browser havi li cookies disabbilitati. Abbìlita li cookies, appoi effèttua lu login cu li tò username e password novi.",
- "nocookieslogin": "{{SITENAME}} usa li cookies pi gistiri lu log in. Lu tò browser havi li cookies disabbilitati. Abbìlita li cookies, appoi effèttua lu login cu li tò username e password.",
- "noname": "Lu nomu utenti innicatu nun è vàlidu, nun è pussìbbili criari un account a stu nomu.",
+ "createacct-benefit-body3": "{{PLURAL:$1|cuntribbuturi ricenti|cuntribbutura ricenti}}",
+ "badretype": "Li password chi' mittisti nun currispùnnunu tra d'iddi.",
+ "userexists": "Lu nomu utenti nziritu è già usatu.\nTi prijamu pirciò di vuliri scègghîri nu nomu utenti diffirenti.",
+ "loginerror": "Erruri ntâ trasuta",
+ "createacct-error": "Erruri ntâ criazzioni dû cuntu",
+ "createaccounterror": "Nun fu pussìbbili criari u cuntu: $1",
+ "nocookiesnew": "Lu cuntu utenti fu' criatu, ma nun si' trasutu.\n{{SITENAME}} adòpira li cookie pi' gistiri li trasuti.\nTu hai i cookie disattivati.\nPi' favuri attìvili, e appoi trasi chî to nomu utenti e password novi.",
+ "nocookieslogin": "{{SITENAME}} adòpira li cookie pi' gistiri li trasuti.\nTu hai i cookie disattivati.\nPi' favuri attìvili e prova n'autra vota.",
+ "nocookiesfornew": "Lu cuntu utenti nun fu' criatu, picchì nun pòttimu cunfirmari la so orìggini.\nAssicuriti chi' hai i ''cookie'' attivati, ricarrica sta pàggina e prova n'autra vota.",
+ "noname": "Nun spicificasti nu nomu utenti vàlidu.",
"loginsuccesstitle": "Trasuta rinisciuta",
- "loginsuccess": "'''Ora trasisti nta {{SITENAME}} comu \"$1\".'''",
- "nosuchuser": "Nun è riggistratu nuddu utenti di nomu \"$1\".\nLi nnomi utenti sunu sinsitivi ê maiusculi.\nVirificari lu nomu nziritu o [[Special:UserLogin/signup|criari un novu accessu]].",
- "nosuchusershort": "Nun c'è nuddu utenti di nomu \"$1\". Cuntrolla l'ortugrafìa.",
- "nouserspecified": "È nicissariu spicificari un nomu utenti.",
- "login-userblocked": "St'utilizzaturi è bluccatu. Nun è pussibbili di tràsiri",
- "wrongpassword": "La ''password'' chi mittisti nun è giusta. Prova n'àutra vota.",
- "wrongpasswordempty": "Nun hà statu nzirita arcuna password. Ripruvari.",
- "passwordtooshort": "La tò password è troppu curta. Havi a cuntèniri armenu {{PLURAL:$1|1 caràttiri|$1 caràttiri}}.",
- "password-name-match": "La tò password havi a essiri diversa dû tò nomu d'utilizzaturi.",
- "mailmypassword": "Mànnimi n'àutra password",
- "passwordremindertitle": "Sirvizziu Password Reminder di {{SITENAME}}",
+ "loginsuccess": "<strong>Ora si' trasutu nta {{SITENAME}} comu \"$1\".</strong>",
+ "nosuchuser": "Nun è riggistratu nuddu utenti di nomu \"$1\".\nLi nomi di l'utenti fannu diffirenza tra majusculi e minusculi.\nCuntrolla chi' scrivisti lu nomu bonu, o puru [[Special:UserLogin/signup|crea un cuntu novu]].",
+ "nosuchusershort": "Nun è riggistratu nuddu utenti di nomu \"$1\".\nCuntrolla chi' scrivisti u nomu bonu.",
+ "nouserspecified": "Hâ' spicificari un nomu utenti.",
+ "login-userblocked": "St'utenti è bluccatu. Nun è pussìbbili di tràsiri.",
+ "wrongpassword": "La password chi' mittisti nun è giusta.\nPi' favuri prova n'àutra vota.",
+ "wrongpasswordempty": "La password chi' mittisti era vacanti.\nPi' favuri prova n'àutra vota.",
+ "passwordtooshort": "I password hannu a' èssiri longhi almenu {{PLURAL:$1|1 caràttiri|$1 caràttiri}}.",
+ "password-name-match": "La tò password havi a' èssiri diversa dû tò nomu utenti.",
+ "password-login-forbidden": "L'usu di stu nomu utenti e password fu' pruibbitu.",
+ "mailmypassword": "Azzera la password",
+ "passwordremindertitle": "Password nova timpurania pi' {{SITENAME}}",
"passwordremindertext": "Quarchidunu (prubbabbirmenti tu, cu nnirizzu IP $1) addumannau d'aviri mannata na password d'accessu nova a {{SITENAME}} ($4). La password pi l'utenti \"$2\" vinni mpustata a \"$3\".\nTi cummeni fari n'accessu quantu prima e canciari la password pi sùbbitu. La tò password timpuranea scadrà dopu {{PLURAL:$5|nu jornu|$5 jorna}}.\nSiddu nun fusti tu a fari la dumanna, oppuru arrittruvasti la password e nun addisìi cchiù canciàrila, poi non tèniri cuntu di stu missaggiu e cuntinuari a usari la password vecchia.",
"noemail": "Nuddu ndirizzu e-mail riggistratu pi l'utenti \"$1\".",
"noemailcreate": "Aviti a dari nu nnirizzu e-mail validu",
"passwordsent": "Na password nova hà statu mannata a lu ndirizzu e-mail riggistratu pi l'utenti \"$1\". Pi favuri, effèttua un accessu nun appena l'arricevi.",
"blocked-mailpassword": "Pi privèniri abbusi, nun è cunzititu usari la funzioni \"Nvia nova password\" d'un ndirizzu IP bluccatu.",
- "eauthentsent": "Un missaggiu e-mail di cunferma hà statu spiditu a lu ndirizzu ndicatu. Pi abbilitari la mannata di missaggi e-mail pi st'accessu è nicissariu sèquiri li istruzzioni ca vi sunnu ndicati, 'n modu di cunfirmari ca s'è li liggìttimi prupitari di lu ndirizzu",
- "throttled-mailpassword": "Na password nova hà già statu mannata di menu di {{PLURAL:$1|1 ura|$1 uri}}. Pi privèniri abbusi, la funzioni \"Manna password nova\" pò èssiri usata sulu una vota ogni {{PLURAL:$1|1 ura|$1 uri}}.",
+ "eauthentsent": "Nu missaggiu e-mail di cunfirma fu' spidutu a lu nnirizzu nnicatu.\nPrima chi' ponnu èssiri mannati autri missaggi e-mail a' stu cuntu, è nicissariu sèquiri li struzzioni ca vi sunnu scritti, 'n modu di cunfirmari di èssiri li liggìttimi prupietarî di lu cuntu.",
+ "throttled-mailpassword": "Nu missaggiu e-mail di azziramentu dâ password già havi statu mannatu nta {{PLURAL:$1|l'ultima ura|l'ultimi $1 uri}}. Pi' privèniri abbusi, si po' mannari nu missaggiu e-mail di azziramentu dâ password na vota sula ogni {{PLURAL:$1|ura|$1 uri}}.",
"mailerror": "Erruri nta lu mannu dû missaggiu: $1",
- "acct_creation_throttle_hit": "L'utenti di sta wiki ca utilizzanu stu ndirizzu IP hanu criatu {{PLURAL:$1|1 account|$1 account}} ni l'ultimu iornu, lu massimu pirmessu ni stu piriudu di tempu.\nPirciò, li utenti ca usunu stu ndirizzu IP nun ponu pi lu mumentu criari novi account.",
- "emailauthenticated": "Lu nnirizzu e-mail fu cunfirmatu lu $2 ê $3.",
- "emailnotauthenticated": "Lu tò ndrizzu imeil nun hà statu ancora autinticatu. Nun vannu a èssiri mannati missaggi imeil pi sti funzioni.",
- "noemailprefs": "Innicari un ndirizzu e-mail p'attivari sti funzioni.",
- "emailconfirmlink": "Cunfirmari lu tò ndrizzu imeil",
- "invalidemailaddress": "Lu nnirizzu email nun pò èssiri accittatu ca ci hà un furmatu nun vàlidu.\nPi favuri nziriti nu nnirizzu vàlidu o svacantati la casella.",
- "cannotchangeemail": "Li nnirizzi e-mail nun ponnu essiri canciati nti stu wiki.",
+ "acct_creation_throttle_hit": "Visitaturi di sta wiki cû to stissu nnirizzu IP già hannu criatu {{PLURAL:$1|un cuntu|$1 cunti}} nta sta jurnata, chi' è lu massimu pirmissu pi' stu pirìudu di tempu.\nPi' ciò, com'ad ora li visitaturi ca usunu stu nnirizzu IP nun ponnu criari autri cunti.",
+ "emailauthenticated": "Lu to nnirizzu di posta elittrònica fu' cunfirmatu lu $2 ê $3.",
+ "emailnotauthenticated": "Lu to nnirizzu di posta elittrònica ancora nun havi statu cunfirmatu.\nNun ti sarrannu mannati missaggi di posta elittrònica pi' sti funzioni.",
+ "noemailprefs": "Innicari nu nnirizzu di posta elittrònica p'attivari sti funzioni.",
+ "emailconfirmlink": "Cunfirmari lu to nnirizzu di posta elittrònica",
+ "invalidemailaddress": "Lu nnirizzu di posta elittrònica nun pò èssiri accittatu picchì pari chi havi un furmatu nun vàlidu.\nPi favuri nzirisci nu nnirizzu vàlidu o puru svacanta la casedda.",
+ "cannotchangeemail": "Li nnirizzi di posta elittrònica nun ponnu èssiri canciati nta sta wiki.",
+ "emaildisabled": "Stu situ nun po' mannari missaggi di posta elittrònica.",
"accountcreated": "Cuntu criatu",
- "accountcreatedtext": "Fu criatu n'accessu pi l'utenti $1.",
- "createaccount-title": "Criazzioni di n'accessu a {{SITENAME}}",
+ "accountcreatedtext": "Fu' criatu un cuntu novu pi' l'utenti [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|msg]]).",
+ "createaccount-title": "Criazzioni di nu cuntu pi' {{SITENAME}}",
"createaccount-text": "Qualcuno criau n'accessu a {{SITENAME}} ($4) a nomu di $2, associatu cu stu ndirizzu di posta elettronica. La password pi l'utenti \"$2\" è mpustata a \"$3\". È opportunu trasiri quantu prima e canciari la password subbutu.\n\nSi l'accessu fu criatu pi sbagghiu, si può gnurari stu missaggiu.",
- "login-throttled": "Facisti troppi tintativi.\nAspetta tanticchia prima di pruvari n'àutra vota.",
+ "login-throttled": "Hai fattu troppi tintativi di trasuta.\nPi' favuri spetta $1 prima di pruvari n'autra vota.",
"login-abort-generic": "La trasuta nun arriniscìu - Annullata",
+ "login-migrated-generic": "Lu to cuntu fu' migratu, e lu to nomu utenti nun esisti cchiù' nta sta wiki.",
"loginlanguagelabel": "Lingua: $1",
"suspicious-userlogout": "La tò dumanna di discunnissioni fu niàta prichì pari ca veni di nu browser nun funziunanti o nu proxy di caching.",
+ "createacct-another-realname-tip": "U nomu veru è opziunali.\nSi scegghî di furnìrilu, veni adupiratu pi' dari crèditu a' l'utenti pû so travagghiu.",
"pt-login": "Trasi",
"pt-login-button": "Trasi",
- "pt-createaccount": "Criati un cuntu novu",
+ "pt-createaccount": "Crea un cuntu novu",
"pt-userlogout": "Nesci",
+ "php-mail-error-unknown": "Erruri scanusciutu ntâ funzioni mail() dû PHP.",
+ "user-mail-no-addy": "Si pruvàu a' mannari nu missaggiu di posta elittrònica senza nu nnirizzu di posta elittrònica.",
+ "user-mail-no-body": "Si pruvàu a' mannari nu missaggiu di posta elittrònica cûn corpu vacanti o troppu curtu p'aviri significatu.",
"changepassword": "Cancia la password",
- "resetpass_announce": "Pi tirminari l'accessu, hai a nziriri na password nova ccà:",
+ "resetpass_announce": "Pi' cumplitari la trasuta, hâ' mpustari na password nova.",
"resetpass_text": "<!-- Agghiunci lu testu ccà -->",
- "resetpass_header": "Rimposta la password",
+ "resetpass_header": "Canciamentu dâ password",
"oldpassword": "Password vecchia:",
"newpassword": "Password nova:",
- "retypenew": "Scrivi n'àutra vota la password",
- "resetpass_submit": "Mposta la password e accedi",
- "changepassword-success": "Lu canciu password hà statu effittuatu cu successu!",
- "changepassword-throttled": "Facisti troppi tintativi.\nAspetta $1 prima d'arripruvari n'àutra vota.",
- "resetpass_forbidden": "Li password nun ponnu èssiri canciati sùpira sta wiki",
- "resetpass-no-info": "Pi tràsiri nta sta pàggina hà èssiri riggistratu",
+ "retypenew": "Scrivi n'àutra vota la password:",
+ "resetpass_submit": "Mposta la password e trasi",
+ "changepassword-success": "La to password fu canciata!",
+ "changepassword-throttled": "Hai fattu troppi tintativi di trasuta.\nPi' favuri spetta $1 prima di pruvari n'autra vota.",
+ "resetpass_forbidden": "Li password nun si ponnu canciari",
+ "resetpass-no-info": "Pi tràsiri nta sta pàggina hà' èssiri riggistratu.",
"resetpass-submit-loggedin": "Cancia la password",
"resetpass-submit-cancel": "Annulla",
- "resetpass-wrong-oldpass": "La password timpurrània nun è giusta.\nPò èssiri ca ggià canciasti cu successu la tò password o c'addumannasti na nova password timpurrània.",
- "resetpass-temp-password": "Password timpurrània:",
- "passwordreset": "Resetta la password",
- "passwordreset-text-one": "Jinchi stu mòdulu pi reimpostari la password",
- "changeemail-submit": "Cancia e-mail",
+ "resetpass-wrong-oldpass": "La password timpurania o attuali nun è giusta.\nPo' èssiri ca già riniscisti a' canciari la tò password, o puru ca già nn'addumannasti n'autra timpurania ancora.",
+ "resetpass-recycled": "Pi' favuri cancia a to password a' na cosa diffirenti dâ to password attuali.",
+ "resetpass-temp-emailed": "Trasisti cûn codici timpuraniu mannatu pi' posta elittrònica.\nPi' cumplitari a trasuta, hâ' mpustari na password nova cca:",
+ "resetpass-temp-password": "Password timpurania:",
+ "resetpass-abort-generic": "U canciu dâ password fu' annullatu di n'estinsioni.",
+ "resetpass-expired": "A to password scadìu. Pi' favuri mposta na password nova pi' trasiri.",
+ "resetpass-expired-soft": "A to password scadìu e s'havi a' azzirari. Pi' favuri scegghî na password nova ora, o puru clicca \"{{int:resetpass-submit-cancel}}\" p'azziràrila n'autra vota.",
+ "resetpass-validity-soft": "A to password nun è vàlida: $1\n\nPi' favuri scegghî na password nova ora, o puru clicca \"{{int:resetpass-submit-cancel}}\" p'azziràrila n'autra vota.",
+ "passwordreset": "Azziramentu dâ password",
+ "passwordreset-text-one": "Jinchi stu mòdulu pi' ricèviri na password timpurania pi' posta elittrònica.",
+ "passwordreset-text-many": "{{PLURAL:$1|Jinchi unu dî campi pi' ricèviri na password timpurania pi' posta elittrònica.}}",
+ "passwordreset-legend": "Azzera la password",
+ "passwordreset-disabled": "L'azziramentu dî password fu disattivatu nta sta wiki.",
+ "passwordreset-emaildisabled": "Li funzionalità di e-mail furu disattivati nta sta wiki.",
+ "passwordreset-username": "Nomu utenti:",
+ "passwordreset-domain": "Duminiu:",
+ "passwordreset-capture": "Ammustrari u missaggiu e-mail chi' veni cumpostu?",
+ "passwordreset-capture-help": "Si attivi sta casedda, u missaggiu e-mail (câ password timpurania) veni ammustratu a' tia sparti chi' veni mannatu a' l'utenti.",
+ "passwordreset-email": "Nnirizzu di posta elittrònica:",
+ "passwordreset-emailtitle": "Dittagghî dû cuntu supra a' {{SITENAME}}",
+ "passwordreset-emailtext-ip": "Quarchidunu (prubbabilmenti tu, di l'innirizzu IP $1) fici dumanna pi' l'azziramentu dâ to password pi' {{SITENAME}} ($4). {{PLURAL:$3|U siguenti cuntu utenti è assuciatu|I siguenti cunti utenti su' assuciati}} cu' stu nnirizzu di posta elittrònica:\n\n$2\n\n{{PLURAL:$3|Sta password timpurania|Sti password timpuranii}} scàdunu tra {{PLURAL:$5|un jornu|$5 jorna}}.\nOra tu avissi a' tràsiri e scègghîri na password nova. Si' fu' quarchidun'autru a' fari sta richiesta e nun tu, o si' ti ricurdasti a to password origginali e nâ voi canciari cchiu', poi gnurari stu missaggiu e cuntinuari a' adupirari a to password vecchia.",
+ "passwordreset-emailtext-user": "L'utenti $1 supra a' {{SITENAME}} fici dumanna pi' l'azziramentu dâ to password pi' {{SITENAME}} ($4). {{PLURAL:$3|U siguenti cuntu utenti è assuciatu|I siguenti cunti utenti su' assuciati}} cu' stu nnirizzu di posta elittrònica:\n\n$2\n\n{{PLURAL:$3|Sta password timpurania|Sti password timpuranii}} scàdunu tra {{PLURAL:$5|un jornu|$5 jorna}}.\nOra tu avissi a' tràsiri e scègghîri na password nova. Si' fu' quarchidun'autru a' fari sta richiesta e nun tu, o si' ti ricurdasti a to password origginali e nâ voi canciari cchiu', poi gnurari stu missaggiu e cuntinuari a' adupirari a to password vecchia.",
+ "passwordreset-emailelement": "Nomu utenti: $1\nPassword timpurania: $2",
+ "passwordreset-emailsent": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' mannatu.",
+ "passwordreset-emailsent-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' mannatu, cû cuntinutu chi' si po' taliari ccassutta.",
+ "passwordreset-emailerror-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu' cumpilatu, cû cuntinutu chi' si po' taliari ccassutta, però a so spidizzioni a' l'utenti {{GENDER:$2|user}} nun riniscìu: $1",
+ "changeemail": "Canciu dû nnirizzu di posta elittrònica",
+ "changeemail-text": "Jinchi stu mòdulu pi' canciari u to nnirizzu di posta elittrònica. Hâ' nziriri a to password pi' cunfirmari stu canciamentu.",
+ "changeemail-no-info": "Hâ' jèssiri trasutu p'aviri accessu direttu a' sta pàggina.",
+ "changeemail-oldemail": "Nnirizzu di posta elittrònica attuali:",
+ "changeemail-newemail": "Nnirizzu di posta elittrònica novu:",
+ "changeemail-none": "(nuddu)",
+ "changeemail-password": "A to password di {{SITENAME}}:",
+ "changeemail-submit": "Cancia nnirizzu",
+ "changeemail-throttled": "Hai fattu troppi tintativi di trasuta.\nPi' favuri spetta $1 prima di pruvari n'autra vota.",
+ "resettokens": "Azziramentu dî token",
+ "resettokens-text": "Cca poi azzirari i ''token'' chi' dùnunu accessu a' certi dati risirvati assuciati ô to cuntu.\n\nSta cosa s'avissi a' fari si' pi' sbagghiu i facisti sapiri a' quarchidunu o si' u to cuntu fu' cumprumisu.",
+ "resettokens-no-tokens": "Nun ci su' token di azzirari.",
+ "resettokens-legend": "Azziramentu dî token",
+ "resettokens-tokens": "Token:",
+ "resettokens-token-label": "$1 (valuri attuali: $2)",
+ "resettokens-watchlist-token": "Token pû feed web (Atom/RSS) dî [[Special:Watchlist|canciamenti ê pàggini ntâ to lista taliata]]",
+ "resettokens-done": "I token furu azzirati.",
+ "resettokens-resetbutton": "Azzera i token scigghiuti",
"bold_sample": "Grassettu",
"bold_tip": "Grassettu",
"italic_sample": "Cursivu",
"italic_tip": "Cursivu",
- "link_sample": "Nomu dû link",
- "link_tip": "Link nternu",
+ "link_sample": "Tìtulu dû culligamentu",
+ "link_tip": "Culligamentu nternu",
"extlink_sample": "http://www.example.com tìtulu dû culligamentu",
- "extlink_tip": "Culligamentu sternu (nutari lu prifissu http:// )",
+ "extlink_tip": "Culligamentu esternu (ricurdàrisi lu prifissu http://)",
"headline_sample": "Ntistazzioni",
"headline_tip": "Suttantistazzioni",
"nowiki_sample": "Nzirisci ccà lu testu nun furmattatu",
"nowiki_tip": "Gnora la furmattazzioni wiki",
"image_sample": "Asempiu.jpg",
- "image_tip": "Mmàggini ncurpurata",
+ "image_tip": "File ncurpuratu",
"media_sample": "Asempiu.ogg",
- "media_tip": "Culligamentu a file multimidiali",
- "sig_tip": "Firma cu data e ura",
- "hr_tip": "Lìnia urizzuntali (usari cu giudizziu)",
- "summary": "Discrizzioni:",
- "subject": "Suggettu/ntistazzioni:",
+ "media_tip": "Culligamentu a' file",
+ "sig_tip": "A to firma cu' data e ura",
+ "hr_tip": "Linia urizzuntali (usari cu' giudizziu)",
+ "summary": "Riassuntu:",
+ "subject": "Oggettu/ntistazzioni:",
"minoredit": "Chistu è nu canciamentu nicu",
- "watchthis": "talìa sta pàggina",
- "savearticle": "sarva la pàggina",
- "preview": "visuali",
- "showpreview": "ammustra la visuali prima di sarvari",
+ "watchthis": "Talìa sta pàggina",
+ "savearticle": "Sarva la pàggina",
+ "preview": "Antiprima",
+ "showpreview": "Ammustra l'antiprima",
"showdiff": "Ammustra li canciamenti",
- "anoneditwarning": "'''Accura''': nun hai esiquitu lu login. Lu tò ndirizzu IP veni riggistratu ntâ cronoluggìa di sta pàggina.",
+ "blankarticle": "<strong>Accura:</strong> La pàggina chi' stai criannu è vacanti.\nSi' clicchi \"{{int:savearticle}}\" n'autra vota, la pàggina veni criata senza nuddu cuntinutu.",
+ "anoneditwarning": "<strong>Accura:</strong> Nun si' trasutu. Lu to nnirizzu IP diventa visìbbili pubblicamenti quannu fai nu canciamentu. Si' <strong>[$1 trasi]</strong> o puru <strong>[$2 crei nu cuntu]</strong>, li canciamenti chi' fai vènunu attribbuiti ô to nomu utenti, sparti di autri vantaggi.",
"anonpreviewwarning": "''Nun trasisti comu utiliggaturi loggatu. Sarbannu, lu tò nnirizzu IP veni arriggistratu ntâ storia dî canciamenti.''",
"missingsummary": "'''Accura:''' Nun hà statu spicificatu l'uggettu di stu canciamentu. Primennu di novu '''Sarva''' lu canciamentu veni sarvatu cu l'uggettu vacanti.",
+ "selfredirect": "<strong>Accura:</strong> Stai rimannannu sta pàggina a' idda stissa.\nPo' èssiri chi' spicificasti na distinazzioni sbagghiata pû rimannu, o puru chi' stai canciannu a pàggina sbagghiata.\nSi' clicchi \"{{int:savearticle}}\" n'autra vota, u rimannu veni criatu u stissu.",
"missingcommenttext": "Nziriri un cummentu ccà sutta.",
- "missingcommentheader": "'''Accura:''' Nun hà statu spicificatu la ntistazzioni di stu cummentu. Primennu di novu '''Sarva''' lu canciamentu veni saravtu senza ntistazzioni.",
- "summary-preview": "Antiprima uggettu:",
- "subject-preview": "Antiprima suggettu/ntistazzioni:",
- "blockedtitle": "Utenti bluccatu.",
+ "missingcommentheader": "<strong>Accura:</strong> Nun havi statu spicificatu l'oggettu/ntistazzioni di stu cummentu. Primennu di novu \"{{int:savearticle}}\", lu canciamentu veni sarvatu senza avìrinni.",
+ "summary-preview": "Antiprima dû riassuntu:",
+ "subject-preview": "Antiprima di l'oggettu/ntistazzioni:",
+ "blockedtitle": "L'utenti è bluccatu",
"blockedtext": "'''Stu nomu d'utenti o nnirizzu IP havi statu bluccatu.'''\n\nLu bloccu fu fattu di $1. Lu mutivu dû bloccu è: ''$2''.\n\n* Accuminzata dû bloccu: $8\n* Fini dû bloccu: $6\n* Ntirvallu dû bloccu: $7\n\nPoi cuntattari a $1 o a n'àutru [[{{MediaWiki:Grouppage-sysop}}|amministraturi]] pi discùtiri dû bloccu.\n\nNun poi usari la carattirìstica 'manna n'email a st'utenti' siddu nun è spicificatu nu nnirizzu email vàlidu nta li toi [[Special:Preferences|prifirenzi]] e siddu nun hai statu bluccatu di l'usari.\n\nLu tò nnirizzu IP attuali è $3, e lu nùmmiru ID dû bloccu è #$5.\n\nSpicìfica tutti li dittagghi pricidenti nta quarsiasi addumannata di chiarimenti.",
"autoblockedtext": "Lu tò nnirizzu IP hà statu bluccatu automaticamenti pirchì fu usatu di n'àutru utenti, chi fu bluccatu di $1.\nLu mutivu è chistu:\n\n:''$2''\n\n* Accuminzata dû bloccu: $8\n* Fini dû bloccu: $6\n* Ntirvallu dû bloccu: $7\n\nPoi cuntattari a $1 o a n'àutru [[{{MediaWiki:Grouppage-sysop}}|amministraturi]] pi discùtiri dû bloccu.\n\nNun poi usari la carattirìstica 'manna n'email a st'utenti' siddu nun è spicificatu nu nnirizzu email vàlidu ntra li tòi [[Special:Preferences|prifirenzi]] e siddu nun fusti bluccatu di l'usari.\n\nLu tò nnirizzu IP attuali è $3, e l'ID dû bloccu è $5.\nPi favuri nclùdilu nta tutti li dumanni chi fai.",
- "blockednoreason": "nudda motivazioni ndicata",
- "whitelistedittext": "Hai a $1 pi canciari l'artìculi.",
- "confirmedittext": "P'èssiri abbilitati a lu canciamentu dî pàggini è nicissariu cunfirmari lu propiu ndirizzu e-mail. Pi mpustari e cunfirmari lu ndirizzu sirvìrisi dî [[Special:Preferences|prifirenzi]].",
- "nosuchsectiontitle": "Lu paràgrafu nun fu truvatu",
- "nosuchsectiontext": "Pruvasti a canciari na sezzioni chi nun esisti.\nForsi ca fu spustata o cancillata na mentri ca stàvutu taliannu la pàggina.",
- "loginreqtitle": "Login nicissariu",
- "loginreqlink": "esèquiri l'accessu",
- "loginreqpagetext": "Pi vìdiri àutri pàggini è nicissariu $1.",
- "accmailtitle": "Password nviata.",
- "accmailtext": "La password pi [[User talk:$1|$1]] fu nviata a lu ndirizzu $2.\n\nLa password pi stu novu account pò essiri canciata â accessu nâ pàggina pi [[Special:ChangePassword|canciari password]].",
+ "blockednoreason": "nuddu mutivu datu",
+ "whitelistedittext": "Pi' favuri $1 pi' canciari li pàggini.",
+ "confirmedittext": "Hâ' cunvalidari lu to nnirizzu di posta elittrònica avanti di putiri canciari li pàggini.\nPi' favuri mposta e cunvàlida lu nnirizzu passannu dî [[Special:Preferences|to prifirenzi]].",
+ "nosuchsectiontitle": "La sizzioni nun fu truvata",
+ "nosuchsectiontext": "Pruvasti a canciari na sizzioni chi' nun esisti.\nForsi ca fu' spustata o cancillata na mentri ca stàvutu taliannu la pàggina.",
+ "loginreqtitle": "S'havi a' tràsiri",
+ "loginreqlink": "trasi",
+ "loginreqpagetext": "Pi' favuri $1 pi' taliari autri pàggini.",
+ "accmailtitle": "Password mannata",
+ "accmailtext": "Na password ginirata casualmenti pi' [[User talk:$1|$1]] fu' spiduta a $2. Si po' canciari di la pàggina di <em>[[Special:ChangePassword|canciamentu dâ password]]</em> comu unu trasi.",
"newarticle": "(Novu)",
- "newarticletext": "Sta pàggina ancora nun esisti.\nPi criari na pàggina cu stu tìtulu, accumenza a scrìviri ccassutta (talìa la [$1 pàggina d'aiutu] pi aviri maiuri nfurmazzioni).\nSi agghicasti ccà pi sbagghiu, clicca lu buttuni ''''n arreri (back)''' dû tò browser.",
+ "newarticletext": "Siguisti nu culligamentu a' na pàggina ch'ancora nun esisti.\nPi' criari sta pàggina, accumenza a' scrìviri ccassutta (talìa la [$1 pàggina d'ajutu] p'aviri majuri nfurmazzioni).\nSi' agghicasti cca pi' sbagghiu, calca lu buttuni <strong>n' arreri</strong> dû to browser.",
"anontalkpagetext": "----''Chista è la pàggina di discussioni di n’utenti anònimu, ca nun criau ancora n’accessu o ca nun l’usa.\nP’idintificàrilu è pirciò nicissariu usari lu nùmmiru di lu sò nnirizzu IP.\nLi nnirizzi IP ponnu pirò èssiri spartuti di cchiù utenti.\nSiddu sî n’utenti anònimu e riteni ca li cummenti prisenti nta sta pàggina nun si rifirìscinu a tia, [[Special:UserLogin/signup|crea n’accessu novu]] o [[Special:UserLogin|trasi]] cu chiddu ca già hai p’evitari d’èssiri cunfusu cu àutri utenti anònimi ‘n futuru.''",
"noarticletext": "Nta stu mumentu la pàggina addumannata è vacanti. È pussìbbili [[Special:Search/{{PAGENAME}}|circari stu tìtulu]] nta l'àutri pàggini dû situ oppuru <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|action=edit}} circari ntê riggistra culligati] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} canciari la pàggina ora]</span>.",
"noarticletext-nopermission": "Nta stu mumentu la pàggina addumannata è vacanti. È pussibbili [[Special:Search/{{PAGENAME}}|circari stu titulu]] nti àutri pàggini dû situ o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} circari ntê riggistra culligati]</span>, ma nun hai li pirmissa pi criari sta pàggina.",
+ "missing-revision": "A virsioni #$1 dâ paggina ntitulata \"{{FULLPAGENAME}}\" nun esisti.\n\nStu fattu di sòlitu succedi quannu si segui nu culligamentu di crunuluggìa versu na pàggina chi' fu' cancillata.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
"userpage-userdoesnotexist": "L'account \"<nowiki>$1</nowiki>\" nun currispunni a n'utenti riggistratu. Virificari si si voli criari o canciari sta pàggina.",
- "blocked-notice-logextract": "Stu utenti è attualmenti bluccatu. L'ùrtimu elimentu dû riggistru dî blocca è ripurtatu ccà pi nfurnazzioni:",
- "clearyourcache": "'''Nota:''' doppu aviri sarvatu è nicissariu puliri la cache dû propiu browser pi vìdiri li canciamenti. Pi '''Mozilla / Firefox / Safari''': fari clic supra ''Ricarica'' tinnennu primutu lu tastu dî maiùsculi, oppuru prèmiri ''Ctrl-Maiusc-R'' (''Cmd-Maiusc-R'' supra Mac); pi '''Internet Explorer:''' mantèniri primutu lu tastu ''Ctrl'' mentri si premi lu pulsanti ''Aggiorna'' o prèmiri ''Ctrl-F5''; pi '''Konqueror''': prèmiri lu pulsanti ''Ricarica'' o lu tastu ''F5''; pi '''Opera''' pò èssiri nicissariu svacantari cumpletamenti la cache dû menu ''Strumenti → Preferenze''.",
- "usercssyoucanpreview": "'''Suggirimentu:''' Usa lu tastu 'Visualizza antiprima' pi pruvari li novi css/js prima di sarvàrili.",
- "userjsyoucanpreview": "'''Suggirimentu:''' Usa lu tastu 'Visualizza antiprima' pi pruvari li novi css/js prima di sarvàrili.",
+ "userpage-userdoesnotexist-view": "U cuntu utenti \"$1\" nun è riggistratu.",
+ "blocked-notice-logextract": "St'utenti pi' com'ora è bluccatu.\nComu rifirimentu ccassutta cc'è l'ùltima vuci dû riggìstru dî blocchi:",
+ "clearyourcache": "<strong>Nota:</strong> Doppu aviri sarvatu, po' giuvari cancillari la ''cache'' dû propiu browser pi' vìdiri li canciamenti.\n* <strong>Firefox / Safari:</strong> Cliccari <em>Ricarica</em> mantinnennu primutu lu tastu dî majùsculi, o puru prèmiri o <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> ntôn Mac)\n* <strong>Google Chrome:</strong> Prèmiri <em>Ctrl-Maiusc-R</em> (<em>⌘-Maiusc-R</em> ntôn Mac)\n* <strong>Internet Explorer:</strong> Cliccari <em>Aggiorna</em> mantinennu primutu lu tastu <em>Ctrl</em>, o puru prèmiri <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Svacantari la ''cache'' dû menù <em>Strumenti → Preferenze</em>",
+ "usercssyoucanpreview": "<strong>Cunsigghiu:</strong> Adòpira u buttuni \"{{int:showpreview}}\" pi' pruvari u to CSS novu prima di sarvàrilu.",
+ "userjsyoucanpreview": "<strong>Cunsigghiu:</strong> Adòpira u buttuni \"{{int:showpreview}}\" pi' pruvari u to JavaScript novu prima di sarvàrilu.",
"usercsspreview": "'''Arricorda ca stai sulu visualizzannu n'antiprima dû tò CSS pirsunali.'''\n'''Nun hà ancora statu sarvatu!'''",
"userjspreview": "'''Arricorda ca stai sulu tistanno/vidennu 'n antiprima lu tò javascript pirsunali, nun hà statu ancora sarvatu!'''",
+ "sitecsspreview": "<strong>Ricòrditi chi' chista è sulu n'antiprima di stu CSS. Ancora nun havi statu sarvatu!</strong>",
+ "sitejspreview": "<strong>Ricòrditi chi' chista è sulu n'antiprima di stu còdici JavaScript. Ancora nun havi statu sarvatu!</strong>",
"userinvalidcssjstitle": "'''Accura:''' Nun esisti arcuna skin cu nomu \"$1\". S'arricorda ca li pàggini pi li .css e .js pirsunalizzati hannu la nizziali dû tìtulu minùscula, p'asempiu {{ns:user}}:Asempiu/vector.js e nun {{ns:user}}:Asempiu/Vector.css.",
"updated": "(Aggiurnatu)",
- "note": "'''Accura:'''",
- "previewnote": "'''Ricurdàtivi ca chista è sulu n'antiprima.'''\nLi canci nun foru ancora sarvati!'''",
- "previewconflict": "L'antiprima currispunni a lu testu prisenti ntâ casella di canciamentu supiriuri e rapprisenta la pàggina comu appari siddu si scegghi di prèmiri 'Sarva' 'n stu mumentu.",
- "session_fail_preview": "'''Purtroppu nun hà statu pussìbbili sarvari li tò canciamenti pirchì li dati dâ sissioni hannu jutu pirduti. Pi favuri, riprova. Siddu arricevi stu missaggiu d'erruri cchiù voti, prova a sculligàriti e a culligàriti novamenti.'''",
+ "note": "<strong>Nota:</strong>",
+ "previewnote": "<strong>Ricòrditi ca chista è sulu n'antiprima.</strong>\nLi to canciamenti ancora nun foru sarvati!",
+ "continue-editing": "Vai a' l'aria di mudìfica",
+ "previewconflict": "St'antiprima currispunni a lu testu prisenti ntâ casedda di canciamentu cchiu' supra e rapprisenta la pàggina comu cumpariravi siddu scegghî di sarvàrila.",
+ "session_fail_preview": "<strong>Purtroppu nun hà statu pussìbbili sarvari li tò canciamenti pirchì li dati dâ sissioni hannu jutu pirduti.</strong>\nPi' favuri prova n'autra vota.\nSiddu ancora nun funziona, prova a' [[Special:UserLogout|nèsciri]] e tràsiri n'autra vota.",
"session_fail_preview_html": "'''Semu spiacenti, nun hà statu pussìbbili elabburari lu canciamentu pirchì hannu jutu pirduti li dati rilativi â sissioni.'''\n\n''Poichì nta stu situ è abbilitatu l'usu di HTML senza limitazzioni, l'antiprima nun veni visualizzata; si tratta di na misura di sicurizza contra l'attacchi JavaScript.''\n\n'''Siddu chistu è nu tintativu liggìttimu di canciamentu, arriprova. Siddu lu prubbrema pirsisti, si pò pruvari a [[Special:UserLogout|sculligàrisi]] e effittuari n'accessu novu.'''",
"token_suffix_mismatch": "'''Lu canciamentu nun fu sarvatu pirchì lu client ammustrau di gèstiri 'n modu sbagghiatu li caràttiri di puntiggiatura nta lu token assuciatu a iddu. P'evitari na curruzzioni pussìbbili dô testu dâ pàggina, fu rifiutatu tuttu lu canciamentu. Sta situazzioni pò virificàrisi, certi voti, quannu s'adòpiranu arcuni sirvizza di proxy anònimi via web chi prisèntanu bug.'''",
- "editing": "Canciu di la vuci \"$1\"",
- "creating": "Stai criannu $1",
- "editingsection": "Canciamentu di $1 (sezzioni)",
- "editingcomment": "Canciu di $1 (nova sizzioni)",
- "editconflict": "Cunflittu d'edizzioni supra $1",
+ "edit_form_incomplete": "<strong>Quarchi' parti dû mòdulu pâ mudìfica nun arrivau ô ''server''; cuntrolla bonu chi' tutti i to canciamenti su' ntatti e prova n'autra vota.</strong>",
+ "editing": "Canciamentu di $1",
+ "creating": "Criazzioni di $1",
+ "editingsection": "Canciamentu di $1 (sizzioni)",
+ "editingcomment": "Canciamentu di $1 (nova sizzioni)",
+ "editconflict": "Cunflittu d'edizzioni: $1",
"explainconflict": "N'àutru utenti havi sarvatu na virsioni nova dâ pàggina mentri stavi effittuannu li canciamenti.\nLa casella di canciamentu supiriuri cunteni lu testu dâ pàggina attuarmenti online, accussì comu hà statu aggiurnatu di l'àutru utenti.\nLa virsioni cu li tò canciamenti è mmeci ripurtata ntâ casella di canciamentu nfiriuri.\nSiddu addisìi cunfirmàrili, hai a ripurtari li tò canciamenti ntô testu asistenti (casella supiriuri).\nPrimennu lu pulsanti '{{int:savearticle}}', veni sarvatu '''sulu''' lu testu cuntinutu ntâ casella di canciamentu supiriuri.",
"yourtext": "Lu tò testu",
"storedversion": "La virsioni mimurizzata",
- "nonunicodebrowser": "''''''ACCURA: Lu tò browser nun supporta unicode, li caràttiri nun-ASCII appàrinu nta lu box di canciamentu comu còdici esadicimali.''''''",
+ "nonunicodebrowser": "<strong>Accura: Lu to browser nun supporta bonu l'Unicode.</strong>\nFu' attivata na contramisura pi' cunsintìriti di canciari li pàggini in sicurizza: li caràttiri nun-ASCII spuntirannu nta la casedda di mudìfica comu còdici esadicimali.",
"editingold": "'''Accura: si sta canciannu na virsioni nun aggiurnata dâ pàggina.<br /> Siddu si scegghi di sarvàrila, tutti li canciamenti appurtati doppu sta rivisioni vannu pirduti.'''",
"yourdiff": "Diffirenzi",
- "copyrightwarning": "Nutati chi tutti li cuntribbuti a {{SITENAME}} s'hannu a cunzidirari sutta la licenza d'usu $2 (talìa $1 pî dittagghi). Si nun vuliti chi lu vostru travagghiu curri lu rìsicu di vèniri ritravagghiatu e/o ridistribbuitu, nun suttamittìtilu ccà.<br />\nVuatri prumittiti puru chi lu scrivìstivu chî vostri palori, o chi lu cupiàstivu di nu duminiu pùbbricu o di risursi sìmili\n'''NUN SUTTAMITTÌTI MATIRIALI SUTTA COPYRIGHT SENZA PIRMISSU!'''",
- "copyrightwarning2": "Nota: tutti li cuntribbuti mannati a {{SITENAME}} ponnu èssiri mudificati o cancillati di parti di l'àutri participanti. Siddu nun addisìi ca li tò testi ponnu èssiri mudificati senza arcunu riguardu, nun mannàrili a stu situ.<br /> Cu la mannata dû testu dichiari noltri, sutta la tò rispunzabbilitati, ca lu testu hà statu scrittu di tia pirsunalmenti oppuru c'hà statu cupiatu di na fonti di pùbbricu dominiu o analucamenti lìbbira. (vidi $1 pi maiuri dittagghi) '''NUN MANNARI MATIRIALI CUPERTU DI DRITTU D'AUTURI SENZA AUTURIZZAZZIONI!'''",
- "longpageerror": "'''ERRURI: Lu testu ca hai suttamissu è longu $1 kilobyte, ch'è cchiù dû màssimu di $2 kilobyte. Nun pò èssiri sarvatu.'''",
- "readonlywarning": "'''ACCURA: Lu database è fermu pi manutinzioni, pirciò nun poi sarvari li tò canciamenti nta stu mumentu. La cosa megghia è fari un copia e ncolla dû testu nta n'àutru prugramma e sarvàrilu pi quannu lu database è accissìbbili.'''\n\nL'amministraturi ca bluccau lu database lu fici pi stu mutivu: $1",
- "protectedpagewarning": "'''ACCURA: Sta pàggina havi na prutizzioni spiciali e sulu l'utenti chi hannu lu status di amministraturi ponnu canciàrila.'''",
- "semiprotectedpagewarning": "'''ACCURA:''' Sta pàggina hà statu bluccata n modu ca sulu li utenti riggistrati ponnu canciàrila.",
- "cascadeprotectedwarning": "'''Accura:''' Sta pàggina havi stata bluccata n modu ca sulu li utenti cu privileggi di amministraturi ponnu mudificàrila, pirchì veni nclusa {{PLURAL:$1|nta siquente pàggina ca hà stata prutiggiuta|ntê siquenti pàggini ca hannu stati prutiggiuti}} silizziunannu la prutizzioni \"ricursiva\":",
- "titleprotectedwarning": "'''ATTENZIONI: Sta pàggina fu bluccata n modu tali ca sianu nicissari [[Special:ListGroupRights|diritti spicifici]] pi criarla.'''",
- "templatesused": "{{PLURAL:$1|Template utilizzatu|Template utilizzati}} nti sta pàggina:",
- "templatesusedpreview": "Template utilizzati 'n st'antiprima:",
- "templatesusedsection": "Template utilizzati 'n sta sezzioni:",
+ "copyrightwarning": "Pi' favuri nota ca tutti li cuntribbuti mannati a' {{SITENAME}} s'hannu a' cunsiddirari sutta â licenza d'usu $2 (talìa $1 pî dittagghî).\nSi' nun voi ca li to testi vènunu mudificati senza nuddu riguardu e ridistribbuùti a' vogghia, allura nê mannari cca.<br />\nMannannu lu to testu nni dichiari sparti chi' lu scrivisti tu pirsunalmenti, o puru ca lu cupiasti di na fonti di pùbblicu duminiu o analugamenti lìbbira.\n<strong>Nun mannari matiriali cupertu di drittu d'auturi senza auturizzazzioni!</strong>",
+ "copyrightwarning2": "Pi' favuri nota ca tutti li cuntribbuti mannati a' {{SITENAME}} ponnu vèniri canciati, altirati o cancillati di l'autri participanti.\nSi' nun voi ca li to testi vènunu mudificati senza nuddu riguardu, allura nê mannari cca.<br />\nMannannu lu to testu nni dichiari sparti ca lu scrivisti tu pirsunalmenti, o puru ca lu cupiasti di na fonti di pùbblicu duminiu o analugamenti lìbbira (talìa $1 pi' majuri dittagghî).\n<strong>Nun mannari matiriali cupertu di drittu d'auturi senza auturizzazzioni!</strong>",
+ "longpageerror": "<strong>Erruri: Lu testu ca hai suttamisu è longu {{PLURAL:$1|un kilobyte|$1 kilobyte}}, cchiù' ssai dû màssimu ca è di {{PLURAL:$2|un kilobyte|$2 kilobyte}}.</strong>\nNun si po' sarvari.",
+ "readonlywarning": "<strong>Accura: Lu database è fermu pi manutinzioni, pirciò nun poi sarvari li tò canciamenti nta stu mumentu.</strong>\nLa cosa megghia è fari un copia e ncodda dû testu nta n'àutru prugramma e sarvàrilu pi quannu lu database torna accissìbbili.\n\nL'amministraturi ca bluccau lu database desi sta spiegazzioni: $1",
+ "protectedpagewarning": "<strong>Accura: Sta pàggina fu' prutetta a' manera chi' sulu l'utenti cu' privileggi d'amministraturi a ponnu canciari.</strong>\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
+ "semiprotectedpagewarning": "<strong>Nota:</strong> Sta pàggina fu' prutetta a' manera chi' sulu l'utenti riggistrati la ponnu canciari.\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
+ "cascadeprotectedwarning": "<strong>Accura:</strong> Sta pàggina havi statu bluccata di manera ca sulu l'utenti cu' privileggi di amministraturi la ponnu canciari, pirchì veni nclusa {{PLURAL:$1|nta siquente pàggina ca havi statu prutiggiuta|ntê siquenti pàggini ca hannu statu prutiggiuti}} a' cascata:",
+ "titleprotectedwarning": "<strong>Accura: Sta pàggina fu' prutetta a' manera chi' giuvunu [[Special:ListGroupRights|privileggi spicìfici]] pi' criàrila.</strong>\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
+ "templatesused": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta sta pàggina:",
+ "templatesusedpreview": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta st'antiprima:",
+ "templatesusedsection": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta sta sizzioni:",
"template-protected": "(prutettu)",
"template-semiprotected": "(semiprutettu)",
- "hiddencategories": "Sta pàggina apparteni a {{PLURAL:$1|na catigurìa ammuciata|$1 catigurìi ammuciati}}:",
+ "hiddencategories": "Sta pàggina apparteni a' {{PLURAL:$1|na catigurìa ammucciata|$1 catigurìi ammucciati}}:",
"edittools": "<!-- Chistu testu cumpari sutta li moduli di canciu e carricamentu. -->",
- "nocreatetext": "La pussibbilitati di criari pàggini novi nta {{SITENAME}} è limitata a l'utenti riggistrati. Poi turnari 'n arreri e canciari na pàggina esistenti, oppuru [[Special:UserLogin|tràsiri o criari nu cuntu novu]].",
- "nocreate-loggedin": "Nun hai lu pirmissu pi criari pàggini novi ntâ {{SITENAME}}.",
+ "nocreatetext": "{{SITENAME}} limitau la pussibbilitati di criari pàggini novi.\nPoi turnari 'n arreri e canciari na pàggina già esistenti, o puru [[Special:UserLogin|tràsiri o criari nu cuntu novu]].",
+ "nocreate-loggedin": "Nun hai lu pirmissu pi' criari pàggini novi.",
+ "sectioneditnotsupported-title": "Nun è suppurtatu lu canciamentu pi' sizzioni",
+ "sectioneditnotsupported-text": "Nta sta pàggina nun è suppurtatu lu canciamentu pi' sizzioni.",
"permissionserrors": "Erruri di pirmissu",
- "permissionserrorstext": "Nun hai lu pirmissu pi fari chistu, pi {{PLURAL:$1|chistu motivu|sti mutivi}}:",
- "permissionserrorstext-withaction": "Nun hai lu pirmessu di fari $2, pi {{PLURAL:$1|lu siguenti mutivu|li siguenti mutivi}}:",
+ "permissionserrorstext": "Nun hai lu pirmissu di fari sta cosa, pi' {{PLURAL:$1|chistu motivu|chisti mutivi}}:",
+ "permissionserrorstext-withaction": "Nun hai lu pirmissu di $2, pi' {{PLURAL:$1|chistu mutivu|chisti mutivi}}:",
"recreate-moveddeleted-warn": "'''Accura: stai pi criari na pàggina chi fu cancillata 'n passatu.'''\n\nAccuràtivi ch'è uppurtunu cuntinuari a canciari sta pàggina.\nL'alencu dî cancillazzioni e spustamenti rilativi veni ripurtatu ccà pi cummudità:",
"moveddeleted-notice": "Sta pàggina fu scancillata. La lista di li scancillazzioni e spustamenti veni ammustrata di sècutu pi nfurmazzioni.",
- "log-fulllog": "Talìa log cumpletu",
- "edit-hook-aborted": "Canciamentu scancillatu di l'hook.\nNun desi nudda spiecazzioni.",
- "edit-gone-missing": "Mpussìbbili aggiurnari la pàggina.\nPari ca fu scancillata.",
- "edit-conflict": "Cunflittu di edizzioni.",
- "edit-no-change": "La mudifica fu ignurata pirchì nu foru appurtati canci ntô testu.",
- "postedit-confirmation-saved": "Lu canciamentu fu sarbatu.",
- "edit-already-exists": "Mpussìbbili criari na pàggina nova.\nEsisti ggià.",
+ "log-fulllog": "Talìa lu riggìstru cumpletu",
+ "edit-hook-aborted": "Canciamentu annullatu di n'hook.\nNun desi nudda spiegazzioni.",
+ "edit-gone-missing": "Nun si po' aggiurnari la pàggina.\nPari ca fu cancillata.",
+ "edit-conflict": "Cunflittu d'edizzioni.",
+ "edit-no-change": "La to mudìfica fu' gnurata pirchì nun foru appurtati canciamenti ntô testu.",
+ "postedit-confirmation-created": "La pàggina fu criata.",
+ "postedit-confirmation-restored": "La pàggina fu ripristinata.",
+ "postedit-confirmation-saved": "Lu to canciamentu fu sarvatu.",
+ "edit-already-exists": "Nun fu' pussìbbili criari na pàggina nova.\nGià esisti.",
+ "defaultmessagetext": "Testu dû missaggiu pridifinutu",
+ "content-failed-to-parse": "Anàlisi sintàttica dû cuntinutu $2 pû mudellu $1 nun rinisciuta: $3",
+ "invalid-content-data": "Dati nun vàlidi ntô cuntinutu",
+ "content-not-allowed-here": "U cuntinutu \"$1\" nun è cunsintutu ntâ pàggina [[$2]]",
+ "editwarning-warning": "Annannutìnni di sta pàggina poi pèrdiri i canciamenti ch'hai fattu.\nSi' si' trasutu, poi disattivari st'avvisu ntâ sizzioni \"{{int:prefs-editing}}\" dî to prifirenzi.",
+ "editpage-notsupportedcontentformat-title": "Furmatu di cuntinutu nun suppurtatu",
+ "editpage-notsupportedcontentformat-text": "U furmatu di cuntinutu $1 non è suppurtatu dû mudellu di cuntinutu $2.",
+ "content-model-wikitext": "wikitestu",
+ "content-model-text": "testu sìmplici",
+ "content-model-javascript": "JavaScript",
+ "content-json-empty-object": "Oggettu vacanti",
+ "content-json-empty-array": "Vitturi vacanti",
+ "duplicate-args-category": "Pàggini chi' cuntènunu chiamati a' template cu' argumenti duplicati",
+ "duplicate-args-category-desc": "A pàggina cunteni chiamati a' template chi' adòpirunu argumenti duplicati, comu <code><nowiki>{{pippu|plutu=1|plutu=2}}</nowiki></code> o <code><nowiki>{{pippu|plutu|1=papirinu}}</nowiki></code>.",
"expensive-parserfunction-warning": "Accura: Sta pàggina cunteni troppi chiamati ê parser functions.\n\nAvissi a èssiri menu di $2, ô mumentu ci {{PLURAL:$1|nn'è $1|nni sunnu $1}}.",
"expensive-parserfunction-category": "Pàggini cu troppi chiamati ê parser functions",
"post-expand-template-inclusion-warning": "Accura: la diminzioni di li template nziriti è troppu granni.\nArcuni template non vènunu nziriti.",
"post-expand-template-inclusion-category": "Pàggini unni la diminsioni dê template nclusi supira lu limiti cunsintutu",
"post-expand-template-argument-warning": "Attenzioni: Sta pàggina cunteni almenu n'argomentu di nu template ca havi na diminsioni troppu rossa pi essiri espansu. St'argomenti verrannu omessi.",
"post-expand-template-argument-category": "Pàggini ca cuntèninu template cu argumenti mancanti",
- "parser-template-loop-warning": "Fu truvatu nu loop di Template : [[$1]]",
- "parser-template-recursion-depth-warning": "Limiti di ricursioni funnuti di Template surpassatu ($1)",
+ "parser-template-loop-warning": "Rilivatu un cìrculu di di Template: [[$1]]",
+ "parser-template-recursion-depth-warning": "Passatu u lìmiti di funnu pâ ricursioni di template ($1)",
+ "language-converter-depth-warning": "Passatu u lìmiti di funnu dû cunvirtituri di lingua ($1)",
+ "node-count-exceeded-category": "Pàggini unni fu' passatu u nùmmiru màssimu di gruppi",
+ "node-count-exceeded-category-desc": "A pàggina passa u nùmmiru massimu di gruppi.",
+ "node-count-exceeded-warning": "Sta pàggina passau u nùmmiru màssimu di gruppi",
+ "expansion-depth-exceeded-category": "Pàggini unni fu' passatu u funnu màssimu di espansioni",
+ "expansion-depth-exceeded-category-desc": "A pàggina passa u funnu màssimu di espansioni.",
+ "expansion-depth-exceeded-warning": "Sta pàggina passau u funnu màssimu di espansioni",
+ "parser-unstrip-loop-warning": "Rilivatu un cìrculu di Unstrip",
+ "parser-unstrip-recursion-limit": "Passatu u lìmiti di ricursioni di Unstrip ($1)",
+ "converter-manual-rule-error": "Rilivatu n'erruri nta na règula manuali di cunvirsioni di lingua",
"undo-success": "Lu canciamentu pò essiri annullatu.\nVirificati lu paraguni ccà sutta p'accuràrivi ca lu cuntinutu è chiddu addisiatu e doppu sarvati la pàggina pi cumplitari l'annullamentu.",
"undo-failure": "Lu canciamentu nun pò èssiri annullatu a càusa d'un cunflittu cu li canciamenti ntirmedi.",
"undo-norev": "Lu canciamentu nun pò essiri annullatu pirchì nun esisti o fù cancillato.",
+ "undo-nochange": "Pari chi' lu canciamentu già fu annullatu.",
"undo-summary": "Annullatu lu canciamentu $1 di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussioni]])",
- "cantcreateaccounttitle": "Mpussìbbili riggistrari n'utenti",
- "cantcreateaccount-text": "La criazzioni di account di stu nnirizzu IP ('''$1''') fu bluccata di [[User:$3|$3]].\n\nLu mutivu è ''$2''",
- "viewpagelogs": "Vidi li log rilativi a sta pàggina",
- "nohistory": "Cronoluggìa dî virsioni di sta pàggina nun ripirìbbili.",
+ "undo-summary-username-hidden": "Annullata a virsioni $1 fatta di n'utenti ammucciatu",
+ "cantcreateaccounttitle": "Mpussìbbili criari un cuntu",
+ "cantcreateaccount-text": "La criazzioni di cunti a' pàrtiri di stu nnirizzu IP (<strong>$1</strong>), fu' bluccata di [[User:$3|$3]].\n\nLa spiegazzioni data di $3 è <em>$2</em>",
+ "cantcreateaccount-range-text": "La criazzioni di cunti a' pàrtiri dî nnirizzi IP nta l'intirvallu '''$1''', chi' cumprenni u to nnirizzu IP ('''$4'''), fu' bluccata di [[User:$3|$3]].\n\nLa spiegazzioni data di $3 è ''$2''",
+ "viewpagelogs": "Talìa li riggìstra di sta pàggina",
+ "nohistory": "Nun cc'è crunuluggìa dî canciamenti pi' sta pàggina.",
"currentrev": "Virsioni currenti",
- "currentrev-asof": "Virsioni currenti dû $1",
+ "currentrev-asof": "Virsioni currenti ô $1",
"revisionasof": "Virsioni dû $1",
- "revision-info": "Virsioni dû $1 di $2",
- "previousrevision": "← Virsioni menu ricenti",
- "nextrevision": "Virsioni cchiù ricenti →",
- "currentrevisionlink": "Virsioni currenti",
+ "revision-info": "Virsioni dû $1 di {{GENDER:$6|$2}}$7",
+ "previousrevision": "← Virsioni cchiu' vecchia",
+ "nextrevision": "Virsioni cchiu' nova →",
+ "currentrevisionlink": "Ùltima virsioni",
"cur": "curr",
"next": "pròssimu",
"last": "pric",
"page_first": "prima",
"page_last": "ùrtima",
- "histlegend": "Cunfrontu tra virsioni: silizziunari li caselli currispunnenti ê virsioni addisiati e prèmiri Mannu o lu pulsanti a basciu.<br /> Liggenna: (curr) = diffirenzi cu la virsioni attuali, (pric) = diffirenzi cu la virsioni pricidenti, '''m''' = canciamentu nicu",
+ "histlegend": "Pû cunfruntu tra virsioni: scègghîri li caseddi currispunnenti ê virsioni di cunfruntari e carcari Invio o lu buttuni ô funnu.<br />\nLegenda: <strong>({{int:cur}})</strong> = cunfruntari cu la virsioni currenti, <strong>({{int:last}})</strong> = cunfruntari cu la virsioni avanti d'idda, <strong>{{int:minoreditletter}}</strong> = canciamentu nicu",
"history-fieldset-title": "Scurri ntâ crunuluggìa",
- "history-show-deleted": "Sulu chiddi scancillati",
- "histfirst": "Prima",
- "histlast": "Ùrtima",
+ "history-show-deleted": "Sulu chiddi cancillati",
+ "histfirst": "i cchiu' vecchî",
+ "histlast": "i cchiu' novi",
"historysize": "({{PLURAL:$1|1 byte|$1 byte}})",
"historyempty": "(vacanti)",
- "history-feed-title": "Lista dî canciamenti",
- "history-feed-description": "Cronoluggìa dâ pàggina supra stu situ",
+ "history-feed-title": "Crunuluggìa dî canciamenti",
+ "history-feed-description": "Crunuluggìa dî canciamenti a' sta pàggina nta sta wiki",
"history-feed-item-nocomment": "$1 lu $2",
- "history-feed-empty": "La pàggina richiesta nun asisti; putissi aviri stata cancillata dû situ o rinuminata. Virificari cu la [[Special:Search|pàggina di ricerca]] siddu ci sunnu novi pàggini.",
- "rev-deleted-comment": "(cummentu rimussu)",
- "rev-deleted-user": "(nomu utenti rimussu)",
- "rev-deleted-event": "(elementu cancillatu)",
+ "history-feed-empty": "La pàggina chi' dumannasti nun esisti.\nPo' aviri statu cancillata dâ wiki, o puru canciata di nomu.\nProva a' [[Special:Search|circari ntâ wiki]] siddu cci sunnu pàggini novi chi' ti ponnu ntirissari.",
+ "rev-deleted-comment": "(riassuntu dû canciamentu rimossu)",
+ "rev-deleted-user": "(nomu utenti rimossu)",
+ "rev-deleted-event": "(dittagghî dû riggistru rimossi)",
+ "rev-deleted-user-contribs": "[nomu utenti o nnirizzu IP rimossi - canciamentu ammucciatu ntê cuntribbuti]",
"rev-deleted-text-permission": "Sta virsioni dâ pàggina hà statu '''cancillata'''.\nCunzurtari lu [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log di cancillazzioni] pi ultiriuri dittagghi.",
- "rev-deleted-text-unhide": "Sta virsioni da pàggina fu '''cancillata'''.\nTalìari lu [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log dê cancillazzioni] pi autri dittagli.\nAll'aministraturi ancora è cunsintutu [$1 talìari sta virsioni] si nicissariu.",
- "rev-suppressed-text-unhide": "Sta virsioni dâ pàggina fu '''rimossa'''.\nTalìari lu [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} log dê cancillazzioni] pi autri dittagli.\nAll'aministraturi ancora è cunsintutu [$1 talìari sta virsioni] si nicissariu.",
- "rev-deleted-text-view": "Sta virsioni dâ pàggina hà statu '''cancillata'''.\nLu testu pò èssiri visualizzatu surtantu di l'amministratura dû situ. Cunzurtari lu [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log di cancillazzioni] pi ultiriuri dittagghi.",
- "rev-suppressed-text-view": "Sta virsioni dâ paggina fu '''luvata'''.\nL'amministratura ponu ancora taliarla; taliari lu [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log di rimozzioni] pi autri dittagli.",
- "rev-deleted-no-diff": "Nun è possibili taliari stu cunfrontu tra virsioni pirchì na revisioni fu '''scancillata'''.\nCunzurtari lu [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log di cancillazzioni] pi ultiriuri dittagghi.",
- "rev-deleted-unhide-diff": "Una dê rivisioni di stu confrontu tra visrsioni fu '''cancillata'''.\nCunzurtari lu [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log di cancillazzioni] pi ultiriuri dittagghi.\nAll'amministratura è ancora possibili [$1 talìari lu confrontu] si nicissariu.",
- "rev-delundel": "ammustra/ammuccia",
+ "rev-suppressed-text-permission": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
+ "rev-deleted-text-unhide": "Sta virsioni dâ pàggina fu' <strong>cancillata</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 taliari sta virsioni] si' voi prucèdiri.",
+ "rev-suppressed-text-unhide": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 taliari sta virsioni] si' voi prucèdiri.",
+ "rev-deleted-text-view": "Sta virsioni dâ pàggina fu' <strong>cancillata</strong>.\nTu ancora a poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+ "rev-suppressed-text-view": "Sta virsioni dâ pàggina fu' <strong>supprimuta</strong>.\nTu ancora a poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
+ "rev-deleted-no-diff": "Nun si po' taliari stu cunfruntu tra virsioni pirchì na revisioni fu <strong>cancillata</strong>.\nSi ponnu a' vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+ "rev-suppressed-no-diff": "Non poi taliari sta diffirenza picchì una dî virsioni fu' <strong>cancillata</strong>.",
+ "rev-deleted-unhide-diff": "Una dî virsioni di sta diffirenza fu' <strong>cancillata</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].\nAncora poi [$1 taliari sta diffirenza] si' voi prucèdiri.",
+ "rev-suppressed-unhide-diff": "Una dî virsioni di sta diffirenza fu' <strong>supprimuta</strong>.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].\nAncora poi [$1 taliari sta diffirenza] si' voi prucèdiri.",
+ "rev-deleted-diff-view": "Una dî virsioni di sta diffirenza fu' <strong>cancillata</strong>.\nTu sta diffirenza ancora a poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+ "rev-suppressed-diff-view": "Una dî virsioni di sta diffirenza fu' <strong>supprimuta</strong>.\nTu sta diffirenza ancora la poi taliari; si ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistru dî supprissioni].",
+ "rev-delundel": "cancia la visibbilità",
"rev-showdeleted": "ammustra",
- "revisiondelete": "Cancella o riprìstina virsioni",
- "revdelete-nooldid-title": "Virsioni nun spicificata",
- "revdelete-nooldid-text": "Nun hà statu spicificata arcuna virsioni dâ pàggina supra cui esèquiri sta funzioni.",
+ "revisiondelete": "Cancella o annulla la cancillazzioni di virsioni",
+ "revdelete-nooldid-title": "Virsioni oggettu nun vàlida",
+ "revdelete-nooldid-text": "O nun spicificasti la virsioni chi' havi a' èssiri oggettu di sta funzioni, o a virsioni chi' spicificasti nun esisti, o puru stai pruvannu a' ammucciari a virsioni currenti.",
"revdelete-no-file": "Lu file spicificatu nun esisti.",
- "revdelete-show-file-confirm": "Si desidira talìari la virsioni cancillata dô file \"<nowiki>$1</nowiki>\" dô $2 ê $3?",
+ "revdelete-show-file-confirm": "Si' sicuru chi' voi talìari na virsioni cancillata dû file \"<nowiki>$1</nowiki>\" dû $2 ê $3?",
"revdelete-show-file-submit": "Sì",
+ "revdelete-selected-text": "{{PLURAL:$1|Virsioni scigghiuta|Virsioni scigghiuti}} di [[:$2]]:",
+ "revdelete-selected-file": "{{PLURAL:$1|Virsioni dû file scigghiuta|Virsioni dû file scigghiuti}} di [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Eventu dû riggistru silizziunatu|Eventi dû riggistru silizziunati}}:",
- "revdelete-suppress-text": "La rimozzioni havi a essiri utilizzata '''sulu''' ni sti casi:\n* Dati pirsonali inoppurtuni\n*: ''ndirizzi, nnummara di telefunu, codici fiscali, ecc.''",
+ "revdelete-text-text": "I virsioni cancillati spuntirannu ancora ntâ crunuluggìa dâ pàggina, però parti dû so cuntinutu sarannu inaccissìbbili ô pùbblicu.",
+ "revdelete-text-file": "I virsioni di file cancillati spuntirannu ancora ntâ crunuluggìa dû file, però parti dû so cuntinutu sarannu inaccissìbbili ô pùbblicu.",
+ "logdelete-text": "L'eventi cancillati spuntirannu ancora ntê riggistra, però parti dû so cuntinutu sarannu inaccissìbbili ô pùbblicu.",
+ "revdelete-text-others": "L'autri amministratura purrannu ancora aviri accessu ô cuntinutu ammucciatu e annullàrinni la cancillazzioni, a' menu chi' nun si pònunu autri ristrizzioni ancora.",
+ "revdelete-confirm": "Pi' favuri cunfirma chi' hai ntinzioni di fari sta cosa, chi' capisci quali su' i so cunsiguenzi, e chi' stai prucidennu ntô rispettu dî [[{{MediaWiki:Policy-url}}|linî guida]].",
+ "revdelete-suppress-text": "A supprissioni s'avissi a' adupirari <strong>sulu</strong> nta sti casi:\n* nfurmazzioni putenzialmenti diffamatorî\n* nfurmazzioni pirsunali inuppurtuni\n*: <em>nnirizzi di casa, nùmmira di tilèfunu, còdici fiscali, etc.</em>",
"revdelete-legend": "Mposta li limitazzioni siquenti supra li virsioni cancillati:",
- "revdelete-hide-text": "Ammuccia lu testu dâ virsioni",
+ "revdelete-hide-text": "Testu dâ virsioni",
"revdelete-hide-image": "Ammuccia lu cuntinutu dû file",
- "revdelete-hide-name": "Ammuccia azione e uggettu dâ stissa",
- "revdelete-hide-comment": "Ammuccia l'uggettu dû canciamentu",
- "revdelete-hide-user": "Ammuccia lu nomu o lu ndirizzu IP di l'auturi",
+ "revdelete-hide-name": "Ammuccia uggettu e paràmitri",
+ "revdelete-hide-comment": "Riassuntu dû canciamentu",
+ "revdelete-hide-user": "Nomu utenti o nnirizzu IP di l'auturi",
"revdelete-hide-restricted": "Ammuccia l'informazioni innicati macari a li amministratura",
"revdelete-radio-same": "(nun canciari)",
- "revdelete-radio-set": "Sè",
- "revdelete-radio-unset": "Nò",
+ "revdelete-radio-set": "Ammucciatu",
+ "revdelete-radio-unset": "Visìbbili",
"revdelete-suppress": "Ammuccia nformazioni puru all'amministratura",
"revdelete-unsuppress": "Elìmina le limitazzioni su li rivisioni ripristinati",
"revdelete-log": "Mutivu:",
- "revdelete-submit": "Àpplica â rivisioni silizziunata",
- "revdelete-success": "'''Visibbilitati dâ rivisioni mpustata currittamenti.'''",
- "revdelete-failure": "'''A visibilità dâ rivisioni nu pò essiri impustata:'''\n$1",
- "logdelete-success": "'''Visibbilitati de l'eventu mpustata currittamenti.'''",
+ "revdelete-submit": "Àpplica {{PLURAL:$1|â virsioni scigghiuta|ê virsioni scigghiuti}}",
+ "revdelete-success": "<strong>Visibbilitati dâ virsioni mpustata currittamenti.</strong>",
+ "revdelete-failure": "<strong>A visibbilitati dâ virsioni nun potti èssiri mpustata:</strong>\n$1",
+ "logdelete-success": "<strong>Visibbilitati di l'eventu mpustata currittamenti.</strong>",
"logdelete-failure": "'''La visibilità dû eventu nun po essiri impustata:'''\n$1",
- "revdel-restore": "Cancia la visibbilità",
- "pagehist": "Storia dâ pàggina",
- "deletedhist": "Storia cancillata",
- "revdelete-hide-current": "Impussibili ammucciari l'oggettu cu la data $1 $2 in quantu è la rivisoni currenti.",
+ "revdel-restore": "cancia la visibbilità",
+ "pagehist": "Crunuluggìa dâ pàggina",
+ "deletedhist": "Crunuluggìa cancillata",
+ "revdelete-hide-current": "Erruri ammucciannu l'elimentu a' data $1 $2: È la virsioni currenti.\nNun si po' ammucciari.",
"revdelete-show-no-access": "Impussibili ammustrari l'oggettu cu data $1 $2 in quantu fu identificatu comu \"riservatu\" e nun si disponi di lu rilativu accessu.",
"revdelete-modify-no-access": "Impussibili canciari l'oggettu cu data $1 $2 in quantu fu identificatu comu \"riservatu\" e nun si disponi di lu rilativu accessu.",
"revdelete-modify-missing": "Impossibili canciari l'oggettu cu ID $1 in quantu nun è presenti nô database.",
"revdelete-no-change": "'''Attenzioni:''' l'oggettu cu data $1 $2 aveva già l'impostazioni di visibilità richiesti.",
"revdelete-concurrent-change": "Impussibili canciari l'oggettu cu data $1 $2 in quantu lu sò statu fu canciatu da n'autru utenti mentri si tintava lu canciamentu.\nCuntrolla lu log.",
- "revdelete-only-restricted": "Nun poi ammucciari â vista di l'amministraturi senza silizziunari l'autri opzioni di supprissioni.",
+ "revdelete-only-restricted": "Erruri ntô mmucciamentu di l'elimentu datatu $2,$1: Non si ponnu livari elimenti dâ vista di l'amministratura senza puru scègghîri una di l'autri opzioni di visibbilitati.",
+ "revdelete-reason-dropdown": "* Mutivi cchiu' cumuni pâ cancillazzioni\n** Viulazzioni dû drittu d'auturi\n** Cummenti o nfurmazzioni pirsunali inuppurtuni\n** Nomu utenti inuppurtunu\n** Nfurmazzioni putenzialmenti diffamatorî",
+ "revdelete-otherreason": "Autru/ultiriuri mutivu:",
"revdelete-reasonotherlist": "Àutru mutivu",
"revdelete-edit-reasonlist": "Cancia li mutivazioni pi la cancillazzioni",
- "suppressionlog": "Log dê supprissioni",
- "suppressionlogtext": "Ccà veni prisintatu n'elencu dê cancillazioni e dê blocchi cchiù ricenti supra cuntinuti ammucciati d'amministraturi. Vidi l'[[Special:IPBlockList|elenco d'IP bloccati]] pi l'elencu dî ban e dî blocchi attivi.",
- "mergehistory": "Unioni storie",
- "mergehistory-header": "Sta pàggina fa junciri li rivisioni dâ storia di na pàggina (ditta macari pàggina d'origini) cu na pàggina cchiù ricenti.\nS'havi accirtari ca la cuntinuità storica di la pàggina nun veni altirata.",
+ "revdelete-offender": "Auturi dâ virsioni:",
+ "suppressionlog": "Riggistru dî supprissioni",
+ "suppressionlogtext": "Ccassutta veni prisintatu n'elencu dî cancillazzioni e dî blocchi chi' cumpòrtunu l'ammucciata di cuntinutu a' l'occhî di l'aministraturi.\nSi po' cunsultari a [[Special:BlockList|lista dî blocchi]] pi' canùsciri i furbanni e i blocchi in viguri pi' com'ora.",
+ "mergehistory": "Junciuta dî crunuluggìi",
+ "mergehistory-header": "Sta pàggina fa' jùnciri li crunuluggìi di du pàggini, abbuccannu li virsioni di na pàggina surgenti nta na pàggina cchiu' nova.\nAssicùriti ca stu canciamentu mantiniràvi la cuntinuità storica di la pàggina.",
"mergehistory-box": "Junci li storii di dui pàggini:",
- "mergehistory-from": "Pàggina di origgini:",
+ "mergehistory-from": "Pàggina d'orìggini:",
"mergehistory-into": "Pàggina di distinazioni:",
- "mergehistory-list": "Storia a cui è applicabili l'unioni",
- "mergehistory-merge": "È possibili junciri li rivisioni di [[:$1]] ndicati ccà â storia di [[:$2]]. Usari la colunna cu li pulsanti di opzioni pi junciri tutti li rivisioni finu â data e ura ndicati. Talìa ca si venunu usati li pulsanti di navigazzioni, la colonna di li pulsanti di opzioni veni azzirata.",
- "mergehistory-go": "Vidi li canciamenti ca ponu essiri junciuti",
- "mergehistory-submit": "Junci li rivisioni",
- "mergehistory-empty": "Nudda rivisioni da junciri.",
- "mergehistory-success": "{{PLURAL:$3|Na rivisioni di [[:$1]] fu junciuta|$3 rivisioni di [[:$1]] sunu stati junciuti}} â storia di [[:$2]].",
- "mergehistory-fail": "Impossibbili junciri li storii. Virificari la pàggina e li parametri temporali.",
- "mergehistory-no-source": "La pàggina di origgini $1 nun esisti.",
+ "mergehistory-list": "Crunuluggìa chi' si po' jùnciri",
+ "mergehistory-merge": "Si pònnu jùnciri li virsioni di [[:$1]] nnicati ccassutta â crunuluggìa di [[:$2]].\nAdòpira la culonna chî buttuni di opzioni pi' jùnciri sulu li virsioni fatti nfina â data e l'ura spicificati.\nGuàrditi ca s'adòpiri culligamenti di navigazzioni la culonna veni azzirata.",
+ "mergehistory-go": "Vidi li canciamenti ca ponnu èssiri junciuti",
+ "mergehistory-submit": "Junci li virsioni",
+ "mergehistory-empty": "Nudda virsioni di jùnciri.",
+ "mergehistory-success": "$3 {{PLURAL:$3|virsioni di [[:$1]] fu' junciuta|$3 virsioni di [[:$1]] furu junciuti}} â crunuluggìa di [[:$2]].",
+ "mergehistory-fail": "Nun fu' pussìbbili jùnciri li crunuluggìi, pi' favuri cuntrolla n'autra vota li paràmitri chi' spicìficunu li pàggini e li dati.",
+ "mergehistory-fail-toobig": "Nun fu' pussìbbili jùnciri li crunuluggìi picchì s'avìssuru a' spustari cchiu' ssai virsioni dû limiti chi' è $1.",
+ "mergehistory-no-source": "La pàggina d'orìggini $1 nun esisti.",
"mergehistory-no-destination": "La pàggina di distinazzioni $1 nun esisti.",
- "mergehistory-invalid-source": "La pàggina di origgini havi aviri nu titulu currettu.",
- "mergehistory-invalid-destination": "La pàggina di distinazzioni havi aviri nu tìtulu currettu.",
- "mergehistory-autocomment": "Unioni di [[:$1]] ni [[:$2]]",
- "mergehistory-comment": "Unioni di [[:$1]] in [[:$2]]: $3",
- "mergehistory-same-destination": "Li pàggini d'urìggini e di distinazioni non ponnu èssiri la stissa",
+ "mergehistory-invalid-source": "La pàggina d'orìggini havi a' aviri nu tìtulu vàlidu.",
+ "mergehistory-invalid-destination": "La pàggina di distinazzioni havi a' aviri nu tìtulu vàlidu.",
+ "mergehistory-autocomment": "Junciuta la crunuluggìa di [[:$1]] a' chidda di [[:$2]]",
+ "mergehistory-comment": "Junciuta la crunuluggìa di [[:$1]] a' chidda di [[:$2]]: $3",
+ "mergehistory-same-destination": "Li pàggini d'orìggini e di distinazioni nun ponnu èssiri la stissa",
"mergehistory-reason": "Mutivu:",
- "mergelog": "Log d'unioni",
- "pagemerge-logentry": "havi iunciutu [[$1]] a [[$2]] (rivisioni finu a $3)",
- "revertmerge": "Annulla unioni",
- "mergelogpagetext": "Appressu veni ammustrata na lista dî operazioni cchiù ricenti di unioni dâ storia di na pàggina ni n'autra.",
- "history-title": "$1: crunoluggìa dî canciamenti",
- "difference-title": "$1: diffirenzi ntra li virsiuni",
- "lineno": "Lìnia $1:",
- "compareselectedversions": "Fari lu paraguni",
- "showhideselectedversions": "Ammustra/ammuccia virsioni silizziunati",
+ "mergelog": "Riggìstru dî junciuti",
+ "revertmerge": "Annulla la junciuta",
+ "mergelogpagetext": "Appressu veni ammustrata na lista dî junciuti cchiu' ricenti dâ crunuluggìa di na pàggina cu' chidda di n'autra.",
+ "history-title": "Crunuluggìa dî canciamenti di \"$1\"",
+ "difference-title": "Cunfruntu tra virsioni di \"$1\"",
+ "difference-title-multipage": "Cunfruntu tra dî pàggini \"$1\" e \"$2\"",
+ "difference-multipage": "(Diffirenza tra dî pàggini)",
+ "lineno": "Riga $1:",
+ "compareselectedversions": "Cunfrunta li virsioni scigghiuti",
+ "showhideselectedversions": "Cancia la visibbilità dî virsioni scigghiuti",
"editundo": "annulla",
- "searchresults": "Risurtati dâ circata",
- "searchresults-title": "Risurtati dâ circata di \"$1\"",
- "titlematches": "Ntê tìtuli di l'artìculi",
- "textmatches": "Ntô testu di l'artìculi",
+ "diff-empty": "(Nudda diffirenza)",
+ "diff-multi-sameuser": "({{PLURAL:$1|Na diffirenza minzana|$1 diffirenzi minzani}} dû stissu utenti nun {{PLURAL:$1|mustrata|mustrati}})",
+ "diff-multi-otherusers": "({{PLURAL:$1|Na diffirenza minzana|$1 diffirenzi minzani}} di {{PLURAL:$2|n'autru utenti|autri $2 utenti}} nun {{PLURAL:$1|mustrata|mustrati}})",
+ "diff-multi-manyusers": "({{PLURAL:$1|Na diffirenza minzana|$1 diffirenzi minzani}} di cchiu' ssai di {{PLURAL:$2|n'autru utenti|autri $2 utenti}} nun {{PLURAL:$1|mustrata|mustrati}})",
+ "difference-missing-revision": "{{PLURAL:$2|Na virsioni|$2 virsioni}} di sta diffirenza ($1) {{PLURAL:$2|nun fu' truvata|nun furu truvati}}.\n\nStu fattu di sòlitu succedi quannu si segui nu culligamentu di diffirenza versu na pàggina chi' fu' cancillata.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+ "searchresults": "Risurtati dâ risciduta",
+ "searchresults-title": "Risurtati dâ risciduta di \"$1\"",
+ "titlematches": "Currispunnenzi ntê tìtuli dî pàggini",
+ "textmatches": "Currispunnenzi ntô testu dî pàggini",
"notextmatches": "Nudda currispunnenza ntô testu dî pàggini",
"prevn": "li pricidenti {{PLURAL:$1|$1}}",
"nextn": "li pròssimi {{PLURAL:$1|$1}}",
@@ -702,388 +836,558 @@
"shown-title": "Ammustra {{PLURAL:$1|nu risultatu|$1 risultati}} pi pàggina",
"viewprevnext": "Talìa ($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "* Pàggina '''[[$1]]'''",
- "searchmenu-new": "'''Crea la pàggina \"[[:$1]]\" supra sta wiki!'''",
+ "searchmenu-new": "<strong>Crea la pàggina \"[[:$1]]\" supra a' sta wiki!<strong> {{PLURAL:$2|0=|Talìa macari la pàggina truvata câ to risciduta.|Talìa macari li risultati dâ to risciduta.}}",
"searchprofile-articles": "Pàggini di cuntinutu",
- "searchprofile-images": "Multimedia",
+ "searchprofile-images": "File Multimidiali",
"searchprofile-everything": "Tuttu",
"searchprofile-advanced": "Avanzata",
- "searchprofile-articles-tooltip": "Cerca nti $1",
+ "searchprofile-articles-tooltip": "Cerca nta $1",
"searchprofile-images-tooltip": "Cerca file",
"searchprofile-everything-tooltip": "Cerca unnegghiè (puru ntî pàggini di discussioni)",
"searchprofile-advanced-tooltip": "Cerca ntê namespace pirsunalizzati",
"search-result-size": "$1 ({{PLURAL:$2|na parola|$2 paroli}})",
"search-result-category-size": "{{PLURAL:$1|1 utenti|$1 utenti}} ({{PLURAL:$2|1 suttacatigurìa|$2 suttacatigurìi}}, {{PLURAL:$3|1 file|$3 files}})",
- "search-redirect": "(redirect $1)",
+ "search-redirect": "(rimannu di $1)",
"search-section": "(sizzioni $1)",
+ "search-category": "(catigurìa $1)",
+ "search-file-match": "(currispunnenza ntô cuntinutu dûn file)",
"search-suggest": "Forsi circavutu: $1",
"search-interwiki-caption": "Pruggetti frati",
- "search-interwiki-default": "Risultati da $1:",
+ "search-interwiki-default": "Risultati di $1:",
"search-interwiki-more": "(cchiù)",
"search-relatedarticle": "Risultati currilati",
"searchrelated": "currilati",
"searchall": "tutti",
"showingresults": "Ammustra nzinu a {{PLURAL:$1|'''1''' risurtatu|'''$1''' risurtati}} a pàrtiri dô nùmmuru '''$2'''.",
+ "showingresultsinrange": "Ccassutta {{PLURAL:$1|è ammustratu <strong>1</strong> risultatu|sunnu ammustrati <strong>$1</strong> risultati}} nta l'intirvallu di #<strong>$2</strong> a' #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Risultatu <strong>$1</strong> di <strong>$3</strong>|Risultati <strong>$1 - $2</strong> di <strong>$3</strong>}}",
"search-nonefound": "La circata nun desi nuddu risurtatu.",
"powersearch-legend": "Ricerca avanzata",
"powersearch-ns": "Cerca ntê namespace:",
- "powersearch-togglelabel": "Silizziona:",
+ "powersearch-togglelabel": "Scègghîli:",
"powersearch-toggleall": "Tutti",
"powersearch-togglenone": "Nuddu",
+ "powersearch-remember": "Ricòrditi la scelta pî risciduti futuri",
"search-external": "Ricerca sterna",
"searchdisabled": "La circata nterna di {{SITENAME}} hà statu disabbilitata. Nta stu mentri, poi usari la circata supra Google o supra àutri muturi di circata. Accura ca li sò ìnnici dê cuntinuti di {{SITENAME}} ponnu nun èssiri aggiurnati.",
- "preferences": "prifirenzi",
- "mypreferences": "Li mè prifirenzi",
- "prefs-edits": "Nùmmuru di canciamenti:",
- "prefs-skin": "Aspettu",
+ "search-error": "Mmattìu n'erruri duranti a risciduta: $1",
+ "preferences": "Prifirenzi",
+ "mypreferences": "Li me prifirenzi",
+ "prefs-edits": "Nùmmiru di canciamenti:",
+ "prefsnologintext2": "Hâ' tràsiri pi' canciari i to prifirenzi.",
+ "prefs-skin": "Peddi",
"skin-preview": "Antiprima",
"datedefault": "Nudda prifirenza",
- "prefs-labs": "Funziunalità dî labboratoria",
- "prefs-personal": "Prufilu utenti",
+ "prefs-labs": "Funziunalità dî labburatorî",
+ "prefs-user-pages": "Pàggini di l'utenti",
+ "prefs-personal": "Prufilu di l'utenti",
"prefs-rc": "Ùrtimi canciamenti",
- "prefs-watchlist": "Ossirvati spiciali",
- "prefs-watchlist-days": "Nùmmiru di jorna ammustrati nta l'ossirvati spiciali:",
- "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
- "prefs-watchlist-edits": "Nùmmaru di canciamenti a ammustrari cu li funzioni avanzati:",
- "prefs-watchlist-edits-max": "(nùmmaru màssimu: 1000)",
- "prefs-watchlist-token": "Token lista taliata mia",
- "prefs-misc": "Vari",
+ "prefs-watchlist": "Lista taliata",
+ "prefs-watchlist-days": "Nùmmiru di jorna a' ammustrari ntâ lista taliata:",
+ "prefs-watchlist-days-max": "Màssimu $1 {{PLURAL:$1|jornu|jorna}}",
+ "prefs-watchlist-edits": "Nùmmiru di canciamenti a' ammustrari ntâ lista taliata estinnuta:",
+ "prefs-watchlist-edits-max": "Nùmmiru màssimu: 1000",
+ "prefs-watchlist-token": "Token dâ me lista taliata:",
+ "prefs-misc": "Varî",
"prefs-resetpass": "Cancia password",
- "prefs-email": "Opzioni email",
+ "prefs-changeemail": "Cancia nnirizzu di posta elittrònica",
+ "prefs-setemail": "Mposta nu nnirizzu di posta elittrònica",
+ "prefs-email": "Opzioni di posta elittrònica",
"prefs-rendering": "Aspettu",
- "saveprefs": "Sarva li prifirenzi",
- "restoreprefs": "Ripristina li mpustazzioni di default",
- "prefs-editing": "Cancia",
+ "saveprefs": "Sarva",
+ "restoreprefs": "Riprìstina tutti li mpustazzioni pridifinuti (nta tutti li sizzioni)",
+ "prefs-editing": "Canciamentu",
"rows": "Righi:",
"columns": "Culonni:",
- "searchresultshead": "Circata",
+ "searchresultshead": "Risciduta",
"stub-threshold": "Valuri minimu pî <a href=\"#\" class=\"stub\">liami a li stub</a>:",
- "stub-threshold-disabled": "Disabbìlitatu",
- "recentchangesdays": "Nùmmuru di jorna a ammustrari nte l'urtimi cancaiamenti:",
+ "stub-threshold-disabled": "Disattivatu",
+ "recentchangesdays": "Nùmmiru di jorna a' ammustrari nta l'ùrtimi cancaiamenti:",
"recentchangesdays-max": "(màssimu $1 {{PLURAL:$1|jornu|jorna}})",
- "recentchangescount": "Nùmmiru di canciamenti da ammustrari di default:",
- "prefs-help-recentchangescount": "Ciò includi li canciamenti ricenti, storii e riggistri.",
- "savedprefs": "Li tò prifirenzi foru sarvati.",
- "timezonelegend": "Fusu orariu:",
- "localtime": "Uràriu lucali",
- "timezoneuseserverdefault": "Usa uràriu dû server",
+ "recentchangescount": "Nùmmiru di canciamenti a' ammustrari comu mpustazzioni pridifinuta:",
+ "prefs-help-recentchangescount": "Si rifirisci a' l'ùrtimi canciamenti, li crunuluggìi e li riggistra.",
+ "prefs-help-watchlist-token2": "Chista è la chiavi sigreta pû feed web dâ to lista taliata.\nCu è jè ch'a canusci po' lèggiri la to lista taliata, dunca nâ diffunniri.\nSi' ti giuva, [[Special:ResetTokens|la poi azzirari]].",
+ "savedprefs": "Li to prifirenzi foru sarvati.",
+ "timezonelegend": "Fusu urariu:",
+ "localtime": "Ura lucali:",
+ "timezoneuseserverdefault": "Adòpira l'ura pridifinuta dâ wiki ($1)",
"timezoneuseoffset": "Àutru (spicificari diffirenza)",
- "servertime": "Uràriu dû server",
- "guesstimezone": "Usa l'ura dû tò browser",
- "timezoneregion-africa": "Africa",
- "timezoneregion-america": "America",
- "timezoneregion-antarctica": "Antartide",
- "timezoneregion-arctic": "Artide",
+ "servertime": "Ura dû server:",
+ "guesstimezone": "Pigghia chidda dû to browser",
+ "timezoneregion-africa": "Àfrica",
+ "timezoneregion-america": "Amèrica",
+ "timezoneregion-antarctica": "Antàrtidi",
+ "timezoneregion-arctic": "Àrtidi",
"timezoneregion-asia": "Asia",
- "timezoneregion-atlantic": "Oceanu Atlantico",
+ "timezoneregion-atlantic": "Ocèanu Atlànticu",
"timezoneregion-australia": "Australia",
"timezoneregion-europe": "Europa",
- "timezoneregion-indian": "Oceanu Indianu",
- "timezoneregion-pacific": "Oceanu Pacificu",
- "allowemail": "Cunzenti la ricezzioni di e-mail di àutri utenti",
- "prefs-searchoptions": "Opzioni di circata",
+ "timezoneregion-indian": "Ocèanu Innianu",
+ "timezoneregion-pacific": "Ocèanu Pacìficu",
+ "allowemail": "Cunzenti la ricizzioni di posta elittrònica di l'autri utenti",
+ "prefs-searchoptions": "Risciduta",
"prefs-namespaces": "Namespace",
- "default": "pridifinitu",
- "prefs-files": "Mmàggini",
- "prefs-custom-css": "CSS personalizzatu",
- "prefs-custom-js": "JS personalizzatu",
- "prefs-reset-intro": "È pussibili usari sta pàggina pi reimpustari li propri prifirenzi a chiddi pridifiniti dô situ.\nL'operazioni nun pò èssiri annullata.",
- "prefs-emailconfirm-label": "Conferma dâ e-mail:",
- "youremail": "Lu tò nnirizzu email:",
- "username": "Nomu d'utenti:",
- "prefs-memberingroups": "Cumpunenti {{PLURAL:$1|dû gruppu|dî gruppi}}:",
- "prefs-registration": "Data di riggistrazioni:",
- "yourrealname": "Lu tò nomu veru*",
- "yourlanguage": "Lingua dâ nterfaccia:",
- "yourvariant": "Varianti:",
- "yournick": "Suprannomu (nickname):",
- "prefs-help-signature": "Li cummenta nê pàggini di discussioni hanu essiri firmata cu \"<nowiki>~~~~</nowiki>\" ca virrannu cunvirtuta nâ propria firma cu appressu la data.",
- "badsig": "Erruri ntâ firma nun standard, virificari li tag HTML.",
- "badsiglength": "Lu Nickname è troppu longu. Nun pò aviri cchiù di $1 {{PLURAL:$1|caràttiri|caràttiri}}.",
- "yourgender": "Geniri:",
- "gender-unknown": "Nun specificatu",
- "gender-male": "Masculu",
- "gender-female": "Fimmina",
- "prefs-help-gender": "Opzionali: cunsenti di adattari li missaggi dô software in funzioni dô generi d'utenti. Sta nfurmazioni sarà pubblica.",
- "email": "Nnirizzu email",
- "prefs-help-realname": "* Nomu veru (upziunali): siddu scegghi di furnìrilu veni usatu pi dàriti crèditu dû tò travagghiu.",
- "prefs-help-email": "Lu nnirizzu e-mail è facurtativu, ma è abbisugnatu pi risittari la password, ntô casu n cui è scurdata.",
- "prefs-help-email-others": "Putiti videmma scegghiri di pirmèttiri ca l'autri ti cuntattanu pi posta elittronica cu nu culligamentu di la tò pàggina d'utilizzaturi o di discussioni. Lu tò nnirizzu nun veni rivilatu quannu l'àutri utilizzatura ti cuntattanu.",
- "prefs-help-email-required": "Lu nnirizzu email è nicissariu.",
- "prefs-info": "Informazzioni di basi",
- "prefs-i18n": "Internazionalizzazioni",
+ "default": "pridifinutu",
+ "prefs-files": "File",
+ "prefs-custom-css": "CSS pirsunalizzatu",
+ "prefs-custom-js": "JavaScript pirsunalizzatu",
+ "prefs-common-css-js": "CSS/JavaScript cunnivisu tra tutti li peddi:",
+ "prefs-reset-intro": "Poi adupirari sta pàggina pi' azzirari li to prifirenzi a' chiddi pridifinuti dû situ.\nSt'opirazzioni nun si po' annullari doppu ch'è fatta.",
+ "prefs-emailconfirm-label": "Cunvàlida dâ posta elittrònica:",
+ "youremail": "Nnirizzu di posta elittrònica:",
+ "username": "{{GENDER:$1|Nomu utenti}}:",
+ "prefs-memberingroups": "{{GENDER:$2|Membru|Membra}} {{PLURAL:$1|dû gruppu|dî gruppi}}:",
+ "prefs-registration": "Data dâ riggistrazioni:",
+ "yourrealname": "Nomu veru:",
+ "yourlanguage": "Lingua:",
+ "yourvariant": "Varianti dâ lingua pû cuntinutu:",
+ "prefs-help-variant": "L'ortugrafìa o varianti dâ lingua chi' prifirisci pi' mmustrari lu cuntinutu dî pàggini di sta wiki.",
+ "yournick": "Firma nova:",
+ "prefs-help-signature": "Li cummenta ntê pàggini di discussioni s'avìssiru a' firmari cu' \"<nowiki>~~~~</nowiki>\", ca veni cunvirtutu ntâ to firma cu' appressu la data.",
+ "badsig": "Firma grezza nun vàlida.\nCuntrolla l'etichetti HTML.",
+ "badsiglength": "La to firma è troppu longa.\nNun havi a' èssiri cchiu' longa di $1 {{PLURAL:$1|caràttiri|caràttiri}}.",
+ "yourgender": "Comu prifirisci èssiri discrivutu?",
+ "gender-unknown": "Nô vogghiu diri",
+ "gender-male": "N'auturi di pàggini dâ wiki",
+ "gender-female": "N'autrici di pàggini dâ wiki",
+ "prefs-help-gender": "Mpustari sta prifirenza è facultativu.\nU software adòpira u so valuri pi' parrari cu' tia, e di tia a' l'autri, facennu usu dû gèniri grammaticali currettu.\nSta nfurmazzioni sarravi pùbblica.",
+ "email": "Nnirizzu di posta elittrònica",
+ "prefs-help-realname": "Lu nomu veru è facultativu.\nSiddu scegghî di furnìrilu, veni adupiratu pi' dàriti crèditu dû tò travagghiu.",
+ "prefs-help-email": "Lu nnirizzu di posta elittrònica è facultativu, ma po' giuvari p'azzirari la password, ntô casu chi' tâ scordi.",
+ "prefs-help-email-others": "Poi videmma scègghîri di pirmèttiri ca l'autri ti cuntàttanu pi' posta elittrònica a' pàrtiri di culligamenti chi' si tròvanu ntê to pàggini d'utenti o di discussioni.\nLu tò nnirizzu nun veni rivilatu quannu l'àutri utenti ti cuntattanu.",
+ "prefs-help-email-required": "Lu nnirizzu di posta elittrònica è obbligatoriu.",
+ "prefs-info": "Nfurmazzioni essinziali",
+ "prefs-i18n": "Intirnazziunalizzazioni",
"prefs-signature": "Firma",
- "prefs-dateformat": "Furmatu data",
- "prefs-timeoffset": "Uri di diffirenza",
- "prefs-advancedediting": "Opzioni avanzati",
+ "prefs-dateformat": "Furmatu dâ data",
+ "prefs-timeoffset": "Diffirenza d'urariu",
+ "prefs-advancedediting": "Opzioni ginirali",
+ "prefs-editor": "Casedda di canciamentu",
+ "prefs-preview": "Antiprima",
"prefs-advancedrc": "Opzioni avanzati",
"prefs-advancedrendering": "Opzioni avanzati",
"prefs-advancedsearchoptions": "Opzioni avanzati",
"prefs-advancedwatchlist": "Opzioni avanzati",
- "prefs-displayrc": "Opzioni di visualizzazioni",
+ "prefs-displayrc": "Opzioni di visualizzazzioni",
+ "prefs-displaywatchlist": "Opzioni di visualizzazzioni",
+ "prefs-tokenwatchlist": "Token",
"prefs-diffs": "Diffirenzi",
- "userrights": "Gistioni dî dritti utenti",
+ "prefs-help-prefershttps": "Sta prifirenza faravi effettu â to pròssima trasuta.",
+ "prefswarning-warning": "Hai fattu canciamenti ê to prifirenzi chi' ancora nun furu sarvati.\nSi' ti nni vai di sta pàggina senza carcari \"$1\" i to prifirenzi nun sarannu sarvati.",
+ "prefs-tabs-navigation-hint": "Cunsigghiu: Poi adupirari i buttuni fileccia manca e' dritta pi' navigari tra dî linguetti ntâ lista.",
+ "email-address-validity-valid": "U nnirizzu e-mail pari bonu",
+ "email-address-validity-invalid": "Nsirisci nu nnirizzu e-mail bonu",
+ "userrights": "Gistioni dî dritti di l'utenti",
"userrights-lookup-user": "Gistisci li gruppi di l'utenti",
- "userrights-user-editname": "Trasi nu nomu d'utenti:",
- "editusergroup": "Cancia gruppi utenti",
- "editinguser": "Canciamentu dî dritti di l'utenti '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+ "userrights-user-editname": "Metti nu nomu utenti:",
+ "editusergroup": "Cancia li gruppi di l'utenti",
+ "editinguser": "Canciamentu dî dritti di l'utenti <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "Cancia li gruppi di l'utenti",
- "saveusergroups": "Sarva gruppi utenti",
+ "saveusergroups": "Sarva li gruppi di l'utenti",
"userrights-groupsmember": "Membru di:",
- "userrights-groups-help": "È pussibili canciari li gruppi cui è assegnatu l'utenti.\n* Na casedda di spunta silizzionata ndica l'appartinenza dill'utenti ô gruppu\n* Na casedda di spunta nun silizzionata ndica la sou mancata appartinenza ô gruppu.\n* Lu simbulu * ndica ca nun è pussibili livari l'appartinenza ô gruppo dopo avirla junciuta (o vici versa).",
+ "userrights-groupsmember-auto": "Membru implìcitu di:",
+ "userrights-groups-help": "Poi canciari li gruppi unni è assignatu l'utenti:\n* Na casedda scigghiuta voli diri chi' l'utenti fa' parti dû gruppu.\n* Na casedda nun scigghiuta voli diri chi' l'utenti nun fa' parti dû gruppu.\n* Lu sìmmulu * voli diri chi' nun si po' cchiu' luvari l'utenti dûn gruppu na vota chi' fu' agghiunciutu, o vici versa.",
"userrights-reason": "Mutivu:",
- "userrights-no-interwiki": "Nun si disponi di li pirmessi nicissari pi canciari li diritti di l'utenti ni autri siti.",
- "userrights-nodatabase": "Lu database $1 nu esisti o nun è lu database locali.",
- "userrights-nologin": "Pi assignari li diritti di l'utenti è nicissariu [[Special:UserLogin|trasiri]] comu amministraturi.",
- "userrights-notallowed": "L'utenti nun disponi dê pirmessi nicissari pi assignari diritti all'utenti.",
- "userrights-changeable-col": "Gruppi canciabili",
- "userrights-unchangeable-col": "Gruppi nun canciabili",
+ "userrights-no-interwiki": "Nun hai lu pirmissu di canciari li dritti di l'utenti nta l'autri wiki.",
+ "userrights-nodatabase": "La basi di dati $1 nun esisti o nun è lucali.",
+ "userrights-nologin": "Hâ' [[Special:UserLogin|tràsiri]] cûn cuntu d'amministraturi pi' putiri assignari li dritti di l'utenti.",
+ "userrights-notallowed": "Nun hai lu pirmissu di agghiùnciri o livàri diritti a' l'utenti.",
+ "userrights-changeable-col": "Gruppi chi' si ponnu canciari",
+ "userrights-unchangeable-col": "Gruppi chi' nun si ponnu canciari",
+ "userrights-conflict": "Cunflittu di canciamentu dî dritti di l'utenti! Pi' favuri cuntrolla e cunfirma li to canciamenti.",
+ "userrights-removed-self": "Riniscisti a' livàriti li to stissi dritti. Pi' chistu, nun hai cchiu' l'accessu a' sta pàggina.",
"group": "Gruppu:",
"group-user": "Utenti",
- "group-autoconfirmed": "Utenti autocunfirmati",
+ "group-autoconfirmed": "Utenti autu-cunfirmati",
"group-bot": "Bot",
"group-sysop": "Amministratura",
"group-bureaucrat": "Buròcrati",
- "group-suppress": "Oversight",
- "group-all": "Utenti",
- "group-user-member": "Utenti",
- "group-autoconfirmed-member": "Utenti autocunfirmatu",
- "group-bot-member": "Bot",
- "group-sysop-member": "Amministraturi",
- "group-bureaucrat-member": "Buròcrati",
- "group-suppress-member": "Oversight",
+ "group-suppress": "Supravisura",
+ "group-all": "(tutti)",
+ "group-user-member": "{{GENDER:$1|utenti}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|utenti autu-cunfirmatu|utenti autu-cunfirmata}}",
+ "group-bot-member": "{{GENDER:$1|bot}}",
+ "group-sysop-member": "{{GENDER:$1|amministraturi|amministratrici}}",
+ "group-bureaucrat-member": "{{GENDER:$1|buròcrati}}",
+ "group-suppress-member": "{{GENDER:$1|supravisuri|supravisura}}",
"grouppage-user": "{{ns:project}}:Utenti",
- "grouppage-autoconfirmed": "{{ns:project}}:Utenti autocunfirmati",
+ "grouppage-autoconfirmed": "{{ns:project}}:Utenti autu-cunfirmati",
"grouppage-bot": "{{ns:project}}:Bot",
"grouppage-sysop": "{{ns:project}}:Amministratura",
"grouppage-bureaucrat": "{{ns:project}}:Buròcrati",
- "grouppage-suppress": "{{ns:project}}:Oversight",
- "right-read": "Leggi pàggini",
- "right-edit": "Cancia pàggini",
- "right-createpage": "Crea pàggini",
- "right-createtalk": "Crea pàggini di discussioni",
- "right-createaccount": "Crea novi account utenti",
- "right-minoredit": "Segna li canciamenti comu nichi",
- "right-move": "Sposta pàggini",
- "right-move-subpages": "Sposta li pàggini nzemi a li rilativi suttapàggini",
- "right-move-rootuserpages": "Canciari li pàggini di l'utilizzaturi dâ ràdica",
- "right-movefile": "Movi file",
- "right-suppressredirect": "Cancella nu redirect quannu sposti na pàggina a du tìtulu",
- "right-upload": "Carica file",
- "right-reupload": "Sovrascrivi nu file esistenti",
- "right-reupload-own": "Sovrascrivi nu file esistenti caricatu dô stissu utenti",
- "right-reupload-shared": "Suprascrivi lucalmenti file prisenti nta l'archìviu cunnivisu",
- "right-upload_by_url": "Carica nu file da nu ndirizzu URL",
- "right-purge": "Purga la cache dû situ senza cunfirma",
- "right-autoconfirmed": "Cancia pàggini semiprotetti",
- "right-bot": "A trattari comu prucessu autumàticu",
- "right-nominornewtalk": "Fa di manera tali chi li canci nichi nun fannu cumpàriri l'avvisu di misaggiu novu.",
- "right-apihighlimits": "Usa limiti cchiù àuti pi li ntirrugazzioni API",
- "right-writeapi": "Usa l'API pi canciari lu wiki",
- "right-delete": "Scancella pàggini",
- "right-bigdelete": "Scancella pàggini cu la storia longa",
- "right-deleterevision": "Ammuccia e ammustra canci spicìfichi dî pàggini",
- "right-deletedhistory": "Visualizza li rivisioni dâ crunuluggìa cancillati senza lu testu assuciatu",
- "right-browsearchive": "Talìa pàggini cancillati",
- "right-undelete": "Riprìstina na pàggina",
- "right-suppressrevision": "Ritalìa e riprìstina virsioni ammucciati",
- "right-suppressionlog": "Talìa li log privati",
- "right-block": "Blocca li canciamenti da parti di autri utenti",
- "right-blockemail": "Mpidisci a n'utilizzaturi di mannari na mail",
- "right-hideuser": "Blocca nu nomu d'utilizzaturi, ammucciannulu ô pùbblicu",
- "right-ipblock-exempt": "Gnura li bloccatini di l'IP, chiddi autumàtici e chiddi di range di IP",
- "right-proxyunbannable": "Sàuta li blocchi supra li proxy",
- "right-protect": "Cancia li livedda di prutizzioni",
- "right-editprotected": "Cancia li pàggini prutiggiuti",
- "right-editinterface": "Cancia la ntirfaccia utilizzaturi",
- "right-editusercssjs": "Cancia li file CSS e JS di àutri utilizzatura",
- "right-editusercss": "Cancia li file CSS di àutri utilizzatura",
- "right-edituserjs": "Cancia li file JS di àutri utilizzatura",
- "right-rollback": "Canciu n'arreri ràpidu pi l'utilizzaturi chi canciau na pàggina particulari",
- "right-markbotedits": "Marca li canci spicìfichi comu bot",
- "right-noratelimit": "Nun suggettu ô limiti di azzioni",
- "right-import": "Mpùrta pàggini di àutri wiki",
- "right-importupload": "Mpùrta pàggini di nu carricamentu di file",
- "right-patrol": "Marca li canci di àutri utilizzatura comu virificati",
- "right-autopatrol": "Marca autumaticamenti li sò canci comu virificati",
- "right-patrolmarks": "Usa la funzioni di virifica di l'ùrtimi canci",
- "right-unwatchedpages": "Visualizza na lista di pàggini nun taliati",
- "right-mergehistory": "Funni la crunuluggìa dî pàggini",
- "right-userrights": "Cancia tutti li diritta di l'utilizzaturi",
- "right-userrights-interwiki": "Cancia li diritti di l'utilizzatura di àutri wiki",
- "right-siteadmin": "Blocca a sblocca lu databasi",
- "right-override-export-depth": "Esporta pàggini cumpresi li pàggini culligati finu ô quintu liveddu",
- "newuserlogpage": "Novi utenti",
- "newuserlogpagetext": "Di sècutu vènunu elincati li criazzioni di cunti novi (account).",
- "rightslog": "Dritti di l'utenti",
- "rightslogtext": "Chistu è un log dî canciamenti a li dritti di l'utenti.",
+ "grouppage-suppress": "{{ns:project}}:Supravisura",
+ "right-read": "Lèggiri pàggini",
+ "right-edit": "Canciari pàggini",
+ "right-createpage": "Criari pàggini (chi' nun sunnu di discussioni)",
+ "right-createtalk": "Criari pàggini di discussioni",
+ "right-createaccount": "Criari cunti novi di l'utenti",
+ "right-minoredit": "Marcari canciamenti comu nichi",
+ "right-move": "Spustari pàggini",
+ "right-move-subpages": "Spustari pàggini chî so suttapàggini",
+ "right-move-rootuserpages": "Spustari pàggini ràdica di l'utenti",
+ "right-move-categorypages": "Spustari pàggini di catigurìa",
+ "right-movefile": "Spustari file",
+ "right-suppressredirect": "Nun criari rimanni ô postu dâ pàggina origginali quannu si spostunu pàggini",
+ "right-upload": "Carricari file",
+ "right-reupload": "Suprascrìviri file esistenti",
+ "right-reupload-own": "Suprascrìviri file esistenti carricati dû stissu utenti",
+ "right-reupload-shared": "Suprascrìviri lucalmenti file prisenti ntô dipòsitu cunnivisu",
+ "right-upload_by_url": "Carricari file partennu di n'URL",
+ "right-purge": "Svacantari la cache dû situ di na pàggina senza cunfirma",
+ "right-autoconfirmed": "Nun èssiri suggettu ê lìmiti basati supra a' l'IP",
+ "right-bot": "Èssiri trattatu comu nu prucessu autumàticu",
+ "right-nominornewtalk": "Nun fari pàrtiri l'avvisu di misaggiu novu quannu si fannu canciamenti nichi ntê pàggini di discussioni",
+ "right-apihighlimits": "Avìri limiti cchiu' auti pi' li ntirrugazzioni a' menzu API",
+ "right-writeapi": "Aduprirari l'API in scrittura",
+ "right-delete": "Cancillari pàggini",
+ "right-bigdelete": "Cancillari pàggini cu la crunuluggìa longa",
+ "right-deletelogentry": "Cancillari e annullari la cancillazzioni di vuci di riggistru spicìfichi",
+ "right-deleterevision": "Cancillari e annullari la cancillazzioni di virsioni spicìfichi dî pàggini",
+ "right-deletedhistory": "Vìdiri vuci dâ crunuluggìa cancillati, senza dû so testu assuciatu",
+ "right-deletedtext": "Vìdiri lu testu cancillatu e li canciamenti tra dî virsioni cancillati",
+ "right-browsearchive": "Circari pàggini cancillati",
+ "right-undelete": "Annullari la cancillazzioni di pàggini",
+ "right-suppressrevision": "Vìdiri, ammucciari e ammustrari virsioni spicìfichi di pàggini di quali utenti è jè",
+ "right-viewsuppressed": "Vìdiri virsioni ammucciati a' quali utenti è jè",
+ "right-suppressionlog": "Taliari li riggistra privati",
+ "right-block": "Bluccari autri utenti pi' nun fàricci fari canciamenti",
+ "right-blockemail": "Bluccari n'utenti pi' nun fàricci mannari posta elittrònica",
+ "right-hideuser": "Bluccari nu nomu utenti, ammucciannulu ô pùbblicu",
+ "right-ipblock-exempt": "Sautari li blocchi di IP, autumàtici e di ntirvalli di IP",
+ "right-proxyunbannable": "Sautari li blocchi autumàtici dî proxy",
+ "right-unblockself": "Sbluccàrisi iddu stissu",
+ "right-protect": "Canciari li liveddi di prutizzioni e mudificari pàggini prutetti a' cascata",
+ "right-editprotected": "Canciari pàggini cu' prutizzioni \"{{int:protect-level-sysop}}\"",
+ "right-editsemiprotected": "Canciari pàggini cu' prutizzioni \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Canciari u mudellu di cuntinutu di na pàggina",
+ "right-editinterface": "Canciari la ntirfaccia utenti",
+ "right-editusercssjs": "Canciari li file CSS e JavaScript di l'autri utenti",
+ "right-editusercss": "Canciari li file CSS di l'àutri utenti",
+ "right-edituserjs": "Canciari li file JavaScript di l'àutri utenti",
+ "right-editmyusercss": "Canciari li file CSS dû propiu utenti",
+ "right-editmyuserjs": "Canciari li file JavaScript dû propiu utenti",
+ "right-viewmywatchlist": "Taliari la propia lista taliata",
+ "right-editmywatchlist": "Canciari la propia lista taliata. Nota chi' certi azzioni cci ponnu agghiùnciri pàggini macari senza di stu drittu.",
+ "right-viewmyprivateinfo": "Taliari li propî dati risirvati (ad esempiu lu nnirizzu di posta elittrònica e lu nomu veru)",
+ "right-editmyprivateinfo": "Canciari li propî dati risirvati (ad esempiu lu nnirizzu di posta elittrònica e lu nomu veru)",
+ "right-editmyoptions": "Canciari li propî prifirenzi",
+ "right-rollback": "Canciari lestu n'arreri li mudìfichi di l'ùltimu utenti chi' canciau na certa pàggina",
+ "right-markbotedits": "Marcari li canciamenti n'arreri comu fatti dî bot",
+ "right-noratelimit": "Nun èssiri suggettu ô limiti di azzioni",
+ "right-import": "Mpùrtari pàggini di autri wiki",
+ "right-importupload": "Mpùrtari pàggini di nu carricamentu di file",
+ "right-patrol": "Marcari li canciamenti di l'autri utenti comu battugghiati",
+ "right-autopatrol": "Marcari autumaticamenti li propî canciamenti comu battugghiati",
+ "right-patrolmarks": "Vìdiri li marcaturi di battugghia nta l'ùrtimi canciamenti",
+ "right-unwatchedpages": "Vìdiri na lista dî pàggini chi' nuddu talìa",
+ "right-mergehistory": "Jùnciri la crunuluggìa dî pàggini",
+ "right-userrights": "Canciari tutti li dritti di l'utenti",
+ "right-userrights-interwiki": "Canciari li dritti di l'utenti di autri wiki",
+ "right-siteadmin": "Bluccari e sbluccari la basi di dati",
+ "right-override-export-depth": "Espurtari pàggini cu li pàggini culligati nfina ô quintu liveddu",
+ "right-sendemail": "Mannari missaggi di posta elittrònica a' l'autri utenti",
+ "right-passwordreset": "Taliari li missaggi di posta elittrònica d'azziramentu dî password",
+ "newuserlogpage": "Riggistru di l'utenti novi",
+ "newuserlogpagetext": "Chistu è nu riggistru di li criazzioni di utenti novi.",
+ "rightslog": "Riggistru dî dritti di l'utenti",
+ "rightslogtext": "Chistu è nu riggistru dî canciamenti ê dritti di l'utenti.",
"action-read": "lèggiri sta pàggina",
"action-edit": "canciari sta pàggina",
"action-createpage": "criari pàggini",
- "action-createtalk": "creari pàggini di discussioni",
- "action-createaccount": "creari stu cuntu di utilizzaturi",
- "action-minoredit": "marcari stu canciu comu nicu",
+ "action-createtalk": "criari pàggini di discussioni",
+ "action-createaccount": "criari stu cuntu di l'utenti",
+ "action-history": "taliari la crunuluggìa di sta pàggina",
+ "action-minoredit": "marcari stu canciamentu comu nicu",
"action-move": "spustari sta pàggina",
- "action-move-subpages": "spustari sta pàggina e li rilativi suttapàggini",
- "action-move-rootuserpages": "spustari li pàggini di utilizzaturi dâ ràdica",
- "action-movefile": "mòviri chistu file",
+ "action-move-subpages": "spustari sta pàggina e li so suttapàggini",
+ "action-move-rootuserpages": "spustari li pàggini ràdica di l'utenti",
+ "action-move-categorypages": "spustari pàggini di catigurìa",
+ "action-movefile": "spustari stu file",
"action-upload": "carricari stu file",
- "action-reupload": "suprascriviri stu file esistenti",
- "action-reupload-shared": "suprascriviri stu file prisenti nti l'archiviu spartutu",
- "action-upload_by_url": "carricari stu file di nu nnirizzu URL",
- "action-writeapi": "usari li API n scrittura",
- "action-delete": "scancillari sta pàggina",
- "action-deleterevision": "scancillari sta virsioni",
- "action-deletedhistory": "talìa la crunuluggìa cancillata di sta pàggina",
- "action-browsearchive": "cercari pàggini scancillati",
- "action-undelete": "ricupirari sta pàggina",
- "action-suppressrevision": "rivìdiri e ripristinari li canci ammucciati",
- "action-suppressionlog": "visiunari stu log privatu",
- "action-block": "bluccari stu utenti n scrittura",
- "action-protect": "cancairi li livedda di prutizzioni pi sta pàggina",
- "action-import": "mpurtari sta pàggina di n'àutra wiki",
- "action-importupload": "mpurtari sta pàggina di nu carricamentu di file",
- "action-patrol": "marcari li canci li l'àutri utilizzatura comu virificati",
- "action-autopatrol": "marcari li tò canci comu virificati",
- "action-unwatchedpages": "visiunari la lista dî pàggini nun taliati",
+ "action-reupload": "suprascrìviri stu file esistenti",
+ "action-reupload-shared": "suprascrivìri stu file prisenti ntô dipòsitu cunnivisu",
+ "action-upload_by_url": "carricari stu file di n'URL",
+ "action-writeapi": "adupirari l'API pi' scrìviri",
+ "action-delete": "cancillari sta pàggina",
+ "action-deleterevision": "cancillari sta virsioni",
+ "action-deletedhistory": "taliari la crunuluggìa cancillata di sta pàggina",
+ "action-browsearchive": "circari pàggini cancillati",
+ "action-undelete": "annullari la cancillazzioni di sta pàggina",
+ "action-suppressrevision": "rivìdiri e ripristinari sta virsioni ammucciata",
+ "action-suppressionlog": "vìdiri stu riggìstru privatu",
+ "action-block": "bluccari st'utenti pi' nun fàricci fari canciamenti",
+ "action-protect": "canciari li livedda di prutizzioni di sta pàggina",
+ "action-rollback": "canciari lestu n'arreri li mudìfichi di l'ùltimu utenti chi' canciau na certa pàggina",
+ "action-import": "mpurtari pàggini di n'àutra wiki",
+ "action-importupload": "mpurtari pàggini di nu carricamentu di file",
+ "action-patrol": "marcari li canciamenti di l'autri utenti comu battugghiati",
+ "action-autopatrol": "marcari li tò canci comu battugghiati",
+ "action-unwatchedpages": "vìdiri la lista dî pàggini chi' nuddu talìa",
"action-mergehistory": "jùnciri la crunuluggìa di sta pàggina",
- "action-userrights": "canciari tutti li diritti di l'utilizzaturi",
- "action-userrights-interwiki": "cancia li diritti di l'utenti supra a àutri wiki",
- "action-siteadmin": "bluccari e sbluccari lu database",
+ "action-userrights": "canciari tutti li dritti di l'utenti",
+ "action-userrights-interwiki": "canciari li dritti di l'utenti supra a autri wiki",
+ "action-siteadmin": "bluccari e sbluccari la basi di dati",
+ "action-sendemail": "mannari missaggi di posta elittrònica",
+ "action-editmywatchlist": "canciari la to lista taliata",
+ "action-viewmywatchlist": "taliari la to lista taliata",
+ "action-viewmyprivateinfo": "taliari li to nfurmazzioni risirvati",
+ "action-editmyprivateinfo": "canciari li to nfurmazzioni risirvati",
+ "action-editcontentmodel": "canciari lu mudellu di cuntinutu di na pàggina",
"nchanges": "$1 {{PLURAL:$1|canciamentu|canciamenti}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|di l'ùltima vìsita}}",
+ "enhancedrc-history": "crunuluggìa",
"recentchanges": "Ùrtimi canciamenti",
- "recentchanges-legend": "Opzioni ùrtimi canciamenti",
- "recentchanges-summary": "Chista pàggina prisenta li canci cchiù ricenti ê cuntinuti dô situ.",
- "recentchanges-feed-description": "Stu feed riporta li canciamenti cchiù ricenti a li cuntinuti dû situ.",
- "recentchanges-label-newpage": "Stu canciu criau na pàggina nova",
+ "recentchanges-legend": "Opzioni pi' l'ùrtimi canciamenti",
+ "recentchanges-summary": "Sta pàggina prisenta li canciamenti cchiu' ricenti ê cuntinuti dâ wiki.",
+ "recentchanges-noresult": "Nuddu canciamentu ntô pirìudu spicificatu currispunni a' sti criteria.",
+ "recentchanges-feed-description": "Stu feed prisenta li canciamenti cchiu' ricenti ê cuntinuti dâ wiki.",
+ "recentchanges-label-newpage": "Stu canciamentu criau na pàggina nova",
"recentchanges-label-minor": "Chistu è nu canciamentu nicu",
- "recentchanges-label-bot": "Stu canciamentu fu fattu dû bot",
- "recentchanges-label-unpatrolled": "Stu canciamentu nun havi ancora statu virificatu",
- "recentchanges-label-plusminus": "La diminsioni dâ pàggina canciau di stu nùmmuru di bytes",
- "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (talìa [[Special:NewPages|li pàggini novi]])",
- "rcnotefrom": "Ccà sutta cci sunnu li canciamenti a pàrtiri dû <b>$2</b> (ammustrati nzinu ô <b>$1</b>).",
- "rclistfrom": "Ammustra li canciamenti novi a pàrtiri di $3 $2",
+ "recentchanges-label-bot": "Stu canciamentu fu fattu di nu bot",
+ "recentchanges-label-unpatrolled": "Stu canciamentu ancora nun havi statu battugghiatu",
+ "recentchanges-label-plusminus": "La grannizza dâ pàggina canciau di stu nùmmiru di byte",
+ "recentchanges-legend-heading": "'''Legenda:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (talìa puru [[Special:NewPages|la lista dî pàggini novi]])",
+ "rcnotefrom": "Ccassutta {{PLURAL:$5|cc'è lu canciamentu|cci su' li canciamenti}} a' pàrtiri dû <strong>$3, $4</strong> (nn'havi ammustrati nfina a' <strong>$1</strong>).",
+ "rclistfrom": "Ammustra li canciamenti novi a' pàrtiri dû $3 $2",
"rcshowhideminor": "$1 li canciamenti nichi",
+ "rcshowhideminor-show": "Ammustra",
+ "rcshowhideminor-hide": "Ammuccia",
"rcshowhidebots": "$1 li bot",
- "rcshowhideliu": "$1 l'utilizzatura cû nomu",
- "rcshowhideanons": "$1 l'utilizzatura anònimi",
- "rcshowhidepatr": "$1 li canciamenti cuntrullati",
- "rcshowhidemine": "$1 li mè canciamenti",
+ "rcshowhidebots-show": "Ammustra",
+ "rcshowhidebots-hide": "Ammuccia",
+ "rcshowhideliu": "$1 l'utenti riggistrati",
+ "rcshowhideliu-show": "Ammustra",
+ "rcshowhideliu-hide": "Ammuccia",
+ "rcshowhideanons": "$1 l'utenti anònimi",
+ "rcshowhideanons-show": "Ammustra",
+ "rcshowhideanons-hide": "Ammuccia",
+ "rcshowhidepatr": "$1 li canciamenti battugghiati",
+ "rcshowhidepatr-show": "Ammustra",
+ "rcshowhidepatr-hide": "Ammuccia",
+ "rcshowhidemine": "$1 li me canciamenti",
+ "rcshowhidemine-show": "Ammustra",
+ "rcshowhidemine-hide": "Ammuccia",
"rclinks": "Ammustra l'ùrtimi $1 canciamenti nta l'ùrtimi $2 jorna <br />$3",
"diff": "diff",
"hist": "storia",
- "hide": "ammuccia",
- "show": "ammustra",
+ "hide": "Ammuccia",
+ "show": "Ammustra",
"minoreditletter": "n",
"newpageletter": "N",
"boteditletter": "b",
- "number_of_watching_users_pageview": "[ossirvata di {{PLURAL:$1|nu utenti|$1 utenti}}]",
+ "number_of_watching_users_pageview": "[taliata di {{PLURAL:$1|nu utenti|$1 utenti}}]",
"rc_categories": "Lìmita a li catigurìi (siparati di \"|\")",
- "rc_categories_any": "Qualisiasi",
+ "rc_categories_any": "Quali è jè",
+ "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} appressu dû canciamentu",
"newsectionsummary": "/* $1 */ sizzioni nova",
- "rc-enhanced-expand": "Ammustra dittagghi (addumanna JavaScript)",
- "rc-enhanced-hide": "Ammuccia dittagghi",
+ "rc-enhanced-expand": "Ammustra li dittagghî",
+ "rc-enhanced-hide": "Ammuccia li dittagghî",
+ "rc-old-title": "criata ô principiu comu \"$1\"",
"recentchangeslinked": "Canciamenti culligati",
"recentchangeslinked-feed": "Canciamenti culligati",
"recentchangeslinked-toolbox": "Canciamenti culligati",
"recentchangeslinked-title": "Canciamenti culligati a \"$1\"",
"recentchangeslinked-summary": "Chista pàggina spiciali ammustra li canciamenti cchiù ricenti ê pàggini culligati a chidda spicificata. Li pàggini taliati ni la tou [[Special:Watchlist|lista taliata]] sunu evidenziati 'n '''grassettu'''.",
- "recentchangeslinked-page": "Nnomu dâ pàggina:",
- "recentchangeslinked-to": "Vidi sulu li canciamenti ê pàggini culligati a chidda spicificata",
+ "recentchangeslinked-page": "Nomu dâ pàggina:",
+ "recentchangeslinked-to": "Ammustra sulu li canciamenti ê pàggini culligati a' chidda spicificata",
"upload": "Càrrica nu file",
"uploadbtn": "Càrrica",
- "reuploaddesc": "Torna a lu mòdulu pi lu carricamentu.",
- "uploadnologin": "Accessu nun effittuatu",
- "uploadnologintext": "Hai a esèquiri [[Special:UserLogin|lu login]] pi carricari mmàggini o àutri files multimidiali.",
- "upload_directory_missing": "La directory di upload ($1) nun asisti e non pò èssiri criata dû webserver.",
- "upload_directory_read_only": "Lu server web nun è n gradu di scrìviri ntâ directory di upload ($1).",
+ "reuploaddesc": "Annulla lu carricamentu e torna a lu mòdulu dî carricamenti",
+ "upload-tryagain": "Manna la discrizzioni canciata dû file",
+ "uploadnologin": "Nun trasutu",
+ "uploadnologintext": "Hâ' $1 pi' putiri carricari file.",
+ "upload_directory_missing": "La cartella dî carricamenti ($1) nun esisti lu server web nun riniscìu a' criàrila.",
+ "upload_directory_read_only": "La cartella dî carricamenti ($1) nun è scrivìbbili dû server web.",
"uploaderror": "Erruri ntô carricamentu",
+ "upload-recreate-warning": "<strong>Accura: Nu file cu' ddu nomu fu' cancillatu o spustatu.</strong>\n\nPi' cummudità ccassutta cci su' li riggistra dî cancillazzioni e dî spustamenti di sta pàggina:",
"uploadtext": "Usa lu mòdulu ccà sutta pi carricari file novi. Pi vìdiri o circari li file già carricati, talìa lu [[Special:FileList|log dî file carricati]]. Carricamenti di file e di virsioni novi di file sunnu riggistrati ntô [[Special:Log/upload|log di l'upload]], li cancillazzioni di file sunnu\nriggistrati [[Special:Log/delete|ccà]].\n\nPi nziriri nu file nta na pàggina, fai nu lijami accussì:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' p'usari la virsioni ntera dû file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testu altirnativu]]</nowiki></code>''' p'usari na virsioni làrica 200 pixel nziruta nta nu box, alliniata a manu manca e cu 'testu altirnativu' comu didascalìa\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pi culligari direttamenti a lu file senza vidìrilu.",
- "upload-permitted": "Tipi di file cunzintiti: $1.",
- "upload-preferred": "Tipi di file cunsigghiati: $1.",
- "upload-prohibited": "Tipi di file pruibbiti: $1.",
- "uploadlogpage": "File carricati",
- "uploadlogpagetext": "Ccà sutta la lista di l'ùrtimi file carricati. Talìa la [[Special:NewFiles|gallarìa dî file novi]] pi na visioni ginirali.",
+ "upload-permitted": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunsintutu|cunsintuti}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|cunsigghiatu|cunsigghiati}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Tipu|tipi}} di file {{PLURAL:$2|pruibbutu|pruibbuti}}: $1.",
+ "uploadlogpage": "Riggistru dî file carricati",
+ "uploadlogpagetext": "Ccà sutta cc'è la lista di l'ùrtimi file carricati.\nTalìa la [[Special:NewFiles|gallarìa dî file novi]] pûn risucuntu cchiu' visuali.",
"filename": "Nomu dû file",
"filedesc": "Discrizzioni",
- "fileuploadsummary": "Discrizzioni (auturi, fonti, discrizzioni, licenza d'usu, noti) dû file:",
+ "fileuploadsummary": "Discrizzioni:",
"filereuploadsummary": "Canciamenti ô file:",
- "filestatus": "Nfurmazzioni supra lu copyright:",
+ "filestatus": "Statu dû drittu d'auturi:",
"filesource": "Fonti:",
- "ignorewarning": "Gnora l'avvisu e sarva comu è gghiè lu file. La virsioni asistenti veni suvrascritta.",
- "ignorewarnings": "Gnora li missaggi d'avvirtimentu dû sistema",
- "minlength1": "Lu nomu dô file hà a èssiri cumpostu di armenu na lìttera.",
- "illegalfilename": "Lu nomu \"$1\" cunteni dî caràttiri nun ammessi ntê tìtuli dî pàggini. Dari a lu file un nomu diversu e pruvari a carricàrilu di novu.",
- "badfilename": "Lu nomu dû file è statu cummirtutu n \"$1\".",
- "filetype-badmime": "Nun è cunzintitu carricari file di tipu MIME \"$1\".",
- "filetype-bad-ie-mime": "Mpussìbbili caricari lu file pirchì Internet Explorer lu canuscissi comu \"$1\", ca è nu tipu di file disattivatu e ca putissi èssiri piriculusu.",
- "filetype-unwanted-type": "Caricari file di tipu '''\".$1\"''' è scunsigghiatu. {{PLURAL:$3|Lu tipu di file cunsigghiatu è|Li tipi di file cunsigghiati sunnu}} $2.",
- "filetype-banned-type": "Caricari file di tipu '''\".$1\"''' non è cunzintitu. {{PLURAL:$3|Lu tipu di file cunzintitu è|Li tipi di file cunzintiti sunnu}} $2.",
- "filetype-missing": "Lu file è privu d'estinzioni (p'asèmpiu \".jpg\").",
- "unknown-error": "Ci fù un erruri scanusciutu",
- "large-file": "Si raccumanna di nun supirari li diminzioni di $1 pi ognunu file; stu file è granni $2.",
- "largefileserver": "Lu file sùpira li diminzioni cunzintiti dâ cunfigurazzioni dû server.",
- "emptyfile": "Lu file appena carricatu pari èssiri vacanti. Chistu putissi èssiri duvutu a n'erruri ntô nomu dû file. Virificari ca si ntenni riarmenti carricari stu file.",
- "fileexists": "Nu file cu stu nomu asisti già, pi favuri cuntrolla <strong>[[:$1]]</strong> siddu nun sî sicuru di vulìrilu suvrascrìviri.\n[[$1|thumb]]",
- "filepageexists": "La pàggina di discrizzioni di stu file fu ggià criata nnû nnirizzu <strong>[[:$1]]</strong>, macari si ancora non c'è nu file cu stu nomu. La discrizzioni di l'uggettu ca fu misa ntô mentri dû caricamentu non si vidi supra a la pàggina di discussioni. Pi fàrila cumpàriri ntâ pàggina di discussioni, c'è la nicissitati di mudificàrila a manu",
- "fileexists-extension": "Nu file cu nu nomu simili a chistu esisti già; l'unica diffirenza è l'usu dê maiusculi nte l'estensioni: [[$2|thumb]]\n* Nomu dû file carricatu: <strong>[[:$1]]</strong>\n* Nomu dû file esistenti: <strong>[[:$2]]</strong>\nPi favuri scegghiti n'àutru nomu.",
+ "ignorewarning": "Gnora l'avvisu e sarva lu file lu stissu",
+ "ignorewarnings": "Gnora l'avvirtimenti eventuali",
+ "minlength1": "Li nomi dî file hannu a' èssiri fatti di almenu na lìttra.",
+ "illegalfilename": "Lu nomu dû file \"$1\" cunteni caràttiri chi' nun su' cunsintuti ntê tìtuli dî pàggini.\nPi' favuri cancia nomu ô file e prova e càrriculu n'autra vota.",
+ "filename-toolong": "Li nomi dî file nun ponnu èssiri cchiù' longhi di 240 byte.",
+ "badfilename": "Lu nomu dû file fu' canciatu nta \"$1\".",
+ "filetype-mime-mismatch": "L'estinsioni dû file, \".$1\", nun currispunni ô tipu MIME rilivatu ntô file ($2).",
+ "filetype-badmime": "Nun è cunzintutu di carricari file di tipu MIME \"$1\".",
+ "filetype-bad-ie-mime": "Nun si po' carricari stu file pirchì Internet Explorer lu canuscissi comu \"$1\", ca è nu tipu di file nun cunsintutu e ca putissi èssiri piriculusu.",
+ "filetype-unwanted-type": "<strong>\".$1\"</strong> è nu tipu di file nun vulutu.\n{{PLURAL:$3|Lu tipu di file cunsigghiatu è|Li tipi di file cunsigghiati sunnu}} $2.",
+ "filetype-banned-type": "<strong>\".$1\"</strong> {{PLURAL:$4|nun è un tipu di file cunsintutu|nun su' tipi di file cunsintuti}}.\n{{PLURAL:$3|U tipu di file cunsintutu è|I tipi di file cunsintuti su'}} $2.",
+ "filetype-missing": "Lu file nun havi estinsioni (ad esempiu \".jpg\").",
+ "empty-file": "Lu file chi' mannasti era vacanti.",
+ "file-too-large": "Lu file chi' mannasti era troppu grossu.",
+ "filename-tooshort": "Lu nomu dû file è troppu curtu.",
+ "filetype-banned": "Stu tipu di file è sbannutu.",
+ "verification-error": "Stu file nun passau â virìfica.",
+ "hookaborted": "Lu canciamentu chi' stavi pruvannu a' fari fu' annullatu di n'estinsioni.",
+ "illegal-filename": "Stu nomu dû file nun è cunsintutu.",
+ "overwrite": "Suprascrìviri nu file chi' già esisti nun è cunsintutu.",
+ "unknown-error": "Mmattìu n'erruri scanusciutu.",
+ "tmp-create-error": "Nun fu pussìbbili criari u file timpuraniu.",
+ "tmp-write-error": "Erruri ntâ scrittura dû file timpuraniu.",
+ "large-file": "Si raccumanna di nun passari la grannizza di $1 p'ognin file; stu file è granni $2.",
+ "largefileserver": "Stu file è cchiu' grossu di quantu lu server è cunfiguratu a' accittari.",
+ "emptyfile": "Lu file chi' carricasti pari vacanti.\nChistu putissi èssiri pruvucatu di nu sbagghiu ntô nomu dû file.\nCuntrolla ca pi' davera voi carricari stu file.",
+ "windows-nonascii-filename": "Sta wiki nun supporta i nomi di file cu' caràttiri spiciali.",
+ "fileexists": "Nu file cu' stu nomu già esisti, pi' favuri cuntrolla <strong>[[:$1]]</strong> si' nun si' {{GENDER:|sicuru|sicura}} ch'u voi canciari.\n[[$1|thumb]]",
+ "filepageexists": "La pàggina dâ discrizzioni di stu file fu' ggià criata ô nnirizzu <strong>[[:$1]]</strong>, ma pi' com'ora nun c'è nuddu file cu' stu nomu.\nLu riassuntu chi' immetti nun cumpariravi ntâ pàggina dâ discrizzioni.\nPi' fàrilu cumpàriri, avirrai a' mudificari a' manu dda pàggina.\n[[$1|thumb]]",
+ "fileexists-extension": "Nu file cûn nomu simili già esisti: [[$2|thumb]]\n* Nomu dû file carricannu: <strong>[[:$1]]</strong>\n* Nomu dû file esistenti: <strong>[[:$2]]</strong>\nForsi voi scègghîri un nomu cchiù' distintivu?",
"fileexists-thumbnail-yes": "Lu file carricato sembra èssiri lu risurtatu di n'antiprima ''(thumbnail)''. [[$1|thumb]]\nVirificari, pi cunfruntu, lu file <strong>[[:$1]]</strong>.\nSiduu si tratta dâ stissa mmagini, nte dimenzioni urigginali, nun è nicissariu carricara àutri antiprimi.",
"file-thumbnail-no": "Lu nomu dô file accumenza cu <strong>$1</strong>.\nPari quinni èssiri lu risurtatu di n'antiprima ''(thumbnail)''.\nSiddu si disponi dâ mmàggini ntâ risuluzzioni urigginali, si prega di carricàrila. 'N casu cuntrariu, si prega di canciari lu nomu dô file.",
"fileexists-forbidden": "Nu file cu stu nomu asisti già e nun pò essiri sovrascrittu. Turnari n'arreri e canciari lu nomu cu lu quali carricari lu file. [[File:$1|thumb|center|$1]]",
"fileexists-shared-forbidden": "Nu file cu stu nomu asisti già nta l'archiviu dî risursi multimidiali cundivisi. Siddu voi ancora carricari lu file, pi favuri torna n'arreri e cancia lu nomu ca voi dari a lu file. [[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "Stu file è na copia duppiuni {{PLURAL:$1|dû|dî}} file ccà di sècutu:",
"file-deleted-duplicate": "Nu file lu stissu comu a chistu file ([[:$1]]) vinni scanciallatu prima di ora. S'aviss'a cuntrullari la stòria e lu picchì dâ scancillazzioni dû file prima di ri-caricàrilu.",
- "uploadwarning": "Avvisu di Upload",
- "uploadwarning-text": "Cancia cà sutta la discrizzioni di lu file e prova arré",
- "savefile": "Sarva file",
- "uploaddisabled": "Semu spiacenti, ma lu carricamentu di file è timpuraniamenti suspisu.",
- "uploaddisabledtext": "Lu carricamentu dî file nun è attivu supra a stu situ.",
- "php-uploaddisabledtext": "Li file PHP non sunnu abbilitati. Pi favuri cuntrolla li mpustazzioni dû file_uploads.",
- "uploadscripted": "Stu file cunteni còdici HTML o di script, ca putissi èssiri nterpritato erroniamenti d'un browser web.",
- "uploadvirus": "Lu file cunteni un virus! Ultiriuri nfurmazzioni: $1",
- "sourcefilename": "Nomu dû file d'orìggini:",
+ "file-deleted-duplicate-notitle": "Nu file idènticu a' chistu hâ statu cancillatu, e u tìtulu fu supprimutu.\nTu avissi a' dumannari a' quarchidunu chi' havi a pussibbilità di vìdiri u cuntinutu dû file suppressu di valutari a situazzioni, prima di prucèdiri a' carricàrilu n'autra vota.",
+ "uploadwarning": "Avvirtimentu pû carricamentu",
+ "uploadwarning-text": "Cancia ccassutta la discrizzioni dû file e prova n'autra vota.",
+ "savefile": "Sarva lu file",
+ "uploaddisabled": "Li carricamenti sunnu disattivati.",
+ "copyuploaddisabled": "Lu carricamentu pi' menzu di URL è disattivatu.",
+ "uploaddisabledtext": "Li carricamenti dî file sunnu disattivati.",
+ "php-uploaddisabledtext": "Li carricamenti dî file sunnu disattivati ntô PHP.\nPi' favuri cuntrolla la mpustazzioni file_uploads.",
+ "uploadscripted": "Stu file cunteni còdici HTML o di script, ca putissi èssiri ntirpitratu erruniamenti d'un browser web.",
+ "uploadscriptednamespace": "Stu file SVG cunteni nu namespace nun cunsintutu, \"$1\".",
+ "uploadinvalidxml": "L'XML ntô file carricatu nun potti èssiri analizzatu sintatticamenti.",
+ "uploadvirus": "Lu file cunteni un virus!\nDittagghî: $1",
+ "uploadjava": "Stu file è n'archiviu ZIP chi' cunteni nu file .class Java.\nCarricari file Java nun è cunsintutu picchì pirmèttunu d'aggirari li ristrizzioni di sicurezza.",
+ "upload-source": "File surgenti",
+ "sourcefilename": "Nomu dû file surgenti:",
+ "sourceurl": "URL surgenti:",
"destfilename": "Nomu dû file di distinazzioni:",
"upload-maxfilesize": "Diminzioni màssima dû file: $1",
+ "upload-description": "Discrizzioni dû file",
+ "upload-options": "Opzioni dû carricamentu",
"watchthisupload": "Talìa stu file",
"filewasdeleted": "Nu file cu stu nomu hà statu già carricatu e cancillatu n passatu. Virificari $1 prima di carricàrilu di novu.",
"filename-bad-prefix": "Lu nomu dô file chi stai carricannu ncigna cu '''\"$1\"''', chi è nu nomu non descrittivu assignatu, di solitu, automaticamenti dê màchini fotugràfici diggitali. Pi favuri scegghia nu nomu cchiù descrtittivu pi lu tò file.",
"filename-prefix-blacklist": " #<!-- dassa sta lìnia comu è già --> <pre>\n# Chista di sèquitu è la sintassi:\n# * Tutti li scritti a pàrtiri dô carattiri \"#\" sugnu commenti\n# * Tutti li lìnii non vacanti sugnu prefissi pi tipici nomi di file assignati automaticamenti dê màchini fotugràfici diggitali\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # arcuni cellulari\nIMG # genericu\nJD # Jenoptik\nMGP # Pentax\nPICT # arcuni\n #</pre> <!-- dassa sta lìnia comu è già -->",
- "upload-success-subj": "Carricamentu cumplitatu",
+ "upload-success-subj": "Carricamentu rinisciutu",
+ "upload-success-msg": "Lu to carricamentu di [$2] riniscìu. Ccà cc'è lu file carricatu: [[:{{ns:file}}:$1]]",
+ "upload-failure-subj": "Prubblema ntô carricamentu",
+ "upload-failure-msg": "Mmattìu un prubblema ntô to carricamentu di [$2]:\n\n$1",
+ "upload-warning-subj": "Avvirtimentu pû carricamentu",
+ "upload-warning-msg": "Mmattìu un prubblema ntô to carricamentu di [$2]. Poi turnari ô [[Special:Upload/stash/$1|mòdulu di carricamentu]] pi' currèggiri stu prubblema.",
"upload-proto-error": "Protucollu erratu",
"upload-proto-error-text": "Pi l'upload rimotu è nicissariu spicificari URL ca nìzzianu cu <code>http://</code> oppuru <code>ftp://</code>.",
"upload-file-error": "Erruri nternu",
- "upload-file-error-text": "S'hà virificatu un erruri nternu duranti la criazzioni d'un file timpuràniu supra lu server. Cuntattari un amministraturi di sistema.",
+ "upload-file-error-text": "S'hâ' virificatu n'erruri nternu duranti la criazzioni dûn file timpuraniu supra ô server.\nPi' favuri cuntatta n'[[Special:ListUsers/sysop|amministraturi di sistema]].",
"upload-misc-error": "Erruri nun idintificatu pi l'upload",
"upload-misc-error-text": "S'hà virificatu un erruri nun idintificatu duranti lu carricamentu dû file. Virificari ca la URL è curretta e accissìbbili e pruvari di novu. Siddu lu prubbrema pirsisti, cuntattari un amministraturi di sistema.",
"upload-too-many-redirects": "L'URL cuntineva troppi redirect",
- "upload-http-error": "Ci fù n'erruri HTTP: $1",
- "img-auth-accessdenied": "Nun pò trasiri",
- "upload-curl-error6": "URL nun ragghiuncìbbili",
- "upload-curl-error6-text": "Mpussìbbili ragghiùnciri la URL spicificata. Virificari ca la URL è scritta currettamenti e ca lu situ n chistioni è attivu.",
- "upload-curl-error28": "Tempu scadutu pi l'upload",
- "upload-curl-error28-text": "Lu situ rimotu hà mpiegatu troppu tempu a arrispùnniri. Virificari ca lu situ è attivu, attènniri quarchi minutu e pruvari di novu, eventuarmenti nta un mumentu di tràfficu nicu.",
+ "upload-http-error": "Mmattìu n'erruri HTTP: $1",
+ "upload-copy-upload-invalid-domain": "Lu carricamentu di copî nun è cunsintutu di stu duminiu.",
+ "backend-fail-stream": "Nun fu pussìbbili trasmèttiri lu file \"$1\".",
+ "backend-fail-backup": "Nun fu' pussìbbili fari na copia di riserva dû file \"$1\".",
+ "backend-fail-notexists": "Lu file $1 nun esisti.",
+ "backend-fail-hashes": "Nun fu' pussìbbili ottèniri l'hash dî file pi' fari lu cunfruntu.",
+ "backend-fail-notsame": "Già esisti un file nun idènticu a' \"$1\".",
+ "backend-fail-invalidpath": "\"$1\" nun è un caminu d'archiviazzioni vàlidu.",
+ "backend-fail-delete": "Nun fu pussìbbili cancillari lu file \"$1\".",
+ "backend-fail-describe": "Nun fu' pussìbbili canciari li metadati dû file \"$1\".",
+ "backend-fail-alreadyexists": "Lu file \"$1\" già esisti.",
+ "backend-fail-store": "Nun fu' pussìbbili mimurizzari lu file \"$1\" nta \"$2\".",
+ "backend-fail-copy": "Nun fu' pussìbbili cupiari lu file \"$1\" nta \"$2\".",
+ "backend-fail-move": "Nun fu' pussìbbili spustari lu file \"$1\" nta \"$2\".",
+ "backend-fail-opentemp": "Nun fu pussìbbili àpriri lu file timpuraniu.",
+ "backend-fail-writetemp": "Nun fu' pussìbbili scrìviri ntô file timpuraniu.",
+ "backend-fail-closetemp": "Nun fu pussìbbili chiùdiri lu file timpuraniu.",
+ "backend-fail-read": "Nun fu' pussìbbili lèggiri lu file \"$1\".",
+ "backend-fail-create": "Nun fu pussìbbili scrìviri lu file \"$1\".",
+ "backend-fail-maxsize": "Nun fu' pussìbbili scrìviri lu file \"$1\" picchì è cchiu' grossu di {{PLURAL:$2|un byte|$2 byte}}.",
+ "backend-fail-readonly": "U backend di mimurizzazzioni \"$1\" pi' com'ora è a' sula littura. La spiegazzioni data è: \"<em>$2</em>\"",
+ "backend-fail-synced": "Lu file \"$1\" si trova nta nu statu incoerenti tra dî backend di mimurizzazzioni interni.",
+ "backend-fail-connect": "Nun fu' pussìbbili culligàrisi ô backend di mimurizzazzioni \"$1\".",
+ "backend-fail-internal": "Mmattìu n'erruri scanusciutu ntô backend di mimurizzazzioni \"$1\".",
+ "backend-fail-contenttype": "Nun fu' pussìbbili ditirminari lu tipu di cuntinutu dû file di mimurizzari nta \"$1\".",
+ "backend-fail-batchsize": "U backend di mimurizzazzioni ricivìu na nfurnata di {{PLURAL:$1|una opirazzioni|$1 opirazzioni}} tra file; però lu so lìmiti è di {{PLURAL:$2|na sula opirazzioni|$2 opirazzioni}}.",
+ "backend-fail-usable": "Nun fu' pussìbbili lèggiri o scrìviri lu file \"$1\" pi' causa di pirmissi nsufficienti o cartelli/cuntinituri mancanti.",
+ "filejournal-fail-dbconnect": "Nun fu' pussìbbili culligàrisi â basi di dati giurnali dû backend di mimurizzazzioni \"$1\".",
+ "filejournal-fail-dbquery": "Nun fu' pussìbbili aggiurnari la basi di dati giurnali dû backend di mimurizzazzioni \"$1\".",
+ "lockmanager-notlocked": "Nun fu' pussìbbili sbluccari \"$1\"; nun è bluccatu.",
+ "lockmanager-fail-closelock": "Nun fu' pussìbbili chiùdiri lu file di bloccu di \"$1\".",
+ "lockmanager-fail-deletelock": "Nun fu' pussìbbili cancillari lu file di bloccu di \"$1\".",
+ "lockmanager-fail-acquirelock": "Nun fu' pussìbbili pigghiari pussèssu dû bloccu di \"$1\".",
+ "lockmanager-fail-openlock": "Nun fu' pussìbbili àpriri lu file di bloccu di \"$1\".",
+ "lockmanager-fail-releaselock": "Nun fu' pussibbili arrènniri lu bloccu di \"$1\".",
+ "lockmanager-fail-db-bucket": "Nun fu' pussìbbili cuntattàri abbastanza basi di dati di bloccu ntô bucket $1.",
+ "lockmanager-fail-db-release": "Nun fu' pussìbbili arrènniri li blocchi dâ basi di dati $1.",
+ "lockmanager-fail-svr-acquire": "Nun fu' pussìbbili pigghiari pussessu dî blocchi dû server $1.",
+ "lockmanager-fail-svr-release": "Nun fu' pussìbbili arrènniri li blocchi dû server $1.",
+ "zip-file-open-error": "Mmattìu n'erruri nta l'apirtura dû file pî cuntrolli di ZIP.",
+ "zip-wrong-format": "Lu file spicificatu nun era nu file ZIP.",
+ "zip-bad": "Lu file è nu file ZIP chi' è ruinatu o è illiggìbbili pi' quarchi' n'autru mutivu.\nNun si po' cuntrullari bona la so sicurizza.",
+ "zip-unsupported": "Lu file è nu file ZIP chi' cunteni carattirìstichi ZIP chi' nun su' suppurtati dâ MediaWiki.\nNun si po' cuntrullari bona la so sicurizza.",
+ "uploadstash": "Ammucciàgghia dî carricamenti",
+ "uploadstash-summary": "Sta pàggina duna accessu ê file chi' furu carricati, o si stannu carricannu, però ancora nun hannu statu pubblicati ntâ wiki. Sti file nun su' visìbbili a' nuddu sparti di cu li carricau.",
+ "uploadstash-clear": "Cancella li file nta l'ammucciagghia",
+ "uploadstash-nofiles": "Nun hai nuddu file nta l'ammucciagghia.",
+ "uploadstash-badtoken": "St'azzioni nun riniscìu, forsi picchì li to cridinziali di mudìfica scaderu. Prova n'autra vota.",
+ "uploadstash-errclear": "La cancillazzioni dî file nun riniscìu.",
+ "uploadstash-refresh": "Aggiorna la lista dî file",
+ "invalid-chunk-offset": "Offset ntô chunk nun vàlidu",
+ "img-auth-accessdenied": "Accessu nigatu",
+ "img-auth-nopathinfo": "Variàbbili PATH_INFO mancanti.\nLu to server nun è mpustatu pi' passari sta nfurmazzioni.\nPurrìa èssiri basatu supra a' CGI e nun po' suppurtari img_auth.\nTalìa https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+ "img-auth-notindir": "Lu caminu dumannatu nun è ntâ cartella cunfigurata pî carricamenti.",
+ "img-auth-badtitle": "Nun fu' pussìbbili custruiri nu tìtulu vàlidu a' pàrtiri di \"$1\".",
+ "img-auth-nologinnWL": "Nun si' trasutu e \"$1\" nun è ntâ lista janca.",
+ "img-auth-nofile": "Lu file \"$1\" nun esisti.",
+ "img-auth-isdir": "Stai pruvannu a' accèdiri a' na cartella, \"$1\".\nE' cunsintutu l'accessu sulu ê file.",
+ "img-auth-streaming": "Trasmissioni di \"$1\".",
+ "img-auth-public": "U prupòsitu di img_auth.php è di emèttiri file di na wiki privata.\nSta wiki è cunfigurata comu wiki pùbblica.\nPi' sicurezza, img_auth.php fu' disattivatu.",
+ "img-auth-noread": "L'utenti nun havi pirmissu di lèggiri \"$1\".",
+ "http-invalid-url": "URL nun validu: $1",
+ "http-invalid-scheme": "L'URL cu' schema \"$1\" nun su' suppurtati.",
+ "http-request-error": "A richiesta HTTP fallìu pi' causa di n'erruri scanusciutu.",
+ "http-read-error": "Erruri di littura HTTP.",
+ "http-timed-out": "La richiesta HTTP scadìu.",
+ "http-curl-error": "Erruri ntô scarricamentu di l'URL: $1",
+ "http-bad-status": "Mmattìu nu prubblema duranti la richiesta HTTP: $1 $2",
+ "upload-curl-error6": "Nun fu pussìbbili ragghiùnciri l'URL",
+ "upload-curl-error6-text": "Nun fu' pussìbbili ragghiùnciri l'URL ca spicificasti.\nCuntrolla megghiu ca l'URL è scritta bona e ca lu situ chi' la servi funziona.",
+ "upload-curl-error28": "Tempu scadutu pû carricamentu",
+ "upload-curl-error28-text": "Lu situ rimotu cci stesi troppu tempu a' rispùnniri.\nPi' favuri cuntrolla ca lu situ funziona, aspetta un pocu e ppoi prova n'autra vota.\nPoi cunsiddirari di pruvari ntôn mumentu quannu c'è cchiu' picca tràficu.",
"license": "Licenza d'usu:",
- "license-header": "Licenza d'usu:",
- "nolicense": "Nudda silizzioni",
- "license-nopreview": "(Antiprima nun disponibbili)",
- "upload_source_url": "(na URL curretta e accissìbbili)",
- "upload_source_file": "(un file supra lu propiu computer)",
- "listfiles-summary": "Sta pàggina spiciali ammustra tutti li file caricati.\nLi file caricati di cchiù picca tempu sunnu ammustrati ô princìpiu dâ lista.\nPi canciari l'urdinamentu, fari clic supra a la ntistazzioni dâ culonna scigghiuta.",
+ "license-header": "Licenza",
+ "nolicense": "Nudda spicificata",
+ "licenses-edit": "Cancia l'opzioni dâ licenza",
+ "license-nopreview": "(Antiprima nun dispunìbbili)",
+ "upload_source_url": "(lu file chi' scigghîsti di n'URL vàlida e pubblicamenti accissìbbili)",
+ "upload_source_file": "(lu file chi' scigghîsti supra ô to computer)",
+ "listfiles-delete": "cancella",
+ "listfiles-summary": "Sta pàggina spiciali ammustra tutti li file carricati.",
"listfiles_search_for": "Ricerca dâ mmàggini di nomu:",
"imgfile": "file",
"listfiles": "Alencu dî file",
+ "listfiles_thumb": "Miniatura",
"listfiles_date": "Data",
"listfiles_name": "Nomu",
"listfiles_user": "Utenti",
- "listfiles_size": "Diminzioni (bytes)",
+ "listfiles_size": "Grannizza",
"listfiles_description": "Discrizzioni",
"listfiles_count": "Virsioni",
- "file-anchor-link": "Mmàggini",
- "filehist": "Crunuluggìa dô file",
- "filehist-help": "Fari clic supra nu gruppu data/ura pi vìdiri lu file comu si prisintava ntô mumentu nnicatu.",
- "filehist-deleteall": "cancilla tuttu",
+ "listfiles-show-all": "Includi li virsioni vecchî dî mmàggini",
+ "listfiles-latestversion": "Virsioni attuali",
+ "listfiles-latestversion-yes": "Sì",
+ "listfiles-latestversion-no": "No",
+ "file-anchor-link": "File",
+ "filehist": "Crunuluggìa dû file",
+ "filehist-help": "Clicca na data/ura pi' vìdiri lu file comu si prisintava tannu.",
+ "filehist-deleteall": "cancella tuttu",
"filehist-deleteone": "cancella",
"filehist-revert": "riprìstina",
- "filehist-current": "correnti",
+ "filehist-current": "attuali",
"filehist-datetime": "Data/Ura",
"filehist-thumb": "Miniatura",
"filehist-thumbtext": "Miniatura di la virsioni dû $1",
@@ -1091,469 +1395,608 @@
"filehist-user": "Utenti",
"filehist-dimensions": "Diminsioni",
"filehist-filesize": "Dimensioni dû file",
- "filehist-comment": "Oggettu",
+ "filehist-comment": "Cummentu",
"imagelinks": "Usu dû file",
- "linkstoimage": "{{PLURAL:$1|La pàggina siquenti richiàma|Li $1 pàggini siquenti richiàmanu}} sta mmàggini:",
- "linkstoimage-more": "Chiossai di $1 {{PLURAL:$1|pàggina punta|pàggini pùntanu}} a stu file.\nDi sècutu sunnu alincati sulu {{PLURAL:$1|la prima pàggina ca punta|li primi $1 pàggini ca pùntanu}} a stu file.\nÈ dispunìbbilu nu [[Special:WhatLinksHere/$2|alencu cumpretu]].",
- "nolinkstoimage": "Nudda pàggina cunteni sta mmàggini.",
- "morelinkstoimage": "Visualizza [[Special:WhatLinksHere/$1|àutri link]] a stu file.",
- "duplicatesoffile": "{{PLURAL:$1|Chistu|Chisti $1}} file {{PLURAL:$1|è nu dupppiuni|sunnu duppiuni}} di stu file ([[Special:FileDuplicateSearch/$2|cchiù dittagli]]):",
- "sharedupload": "Stu file veni di $1 e pò èssiri utilizzatu di àutri pruggetti wiki.",
- "sharedupload-desc-there": "Stu file pruvieni da $1 e pò èssiri usatu da l'autri prugetti.\nTalìari la [$2 paggina di discrizzioni dô file] pi autri nfurmazioni.",
- "sharedupload-desc-here": "Stu file pruvieni da $1 e pò èssiri usatu da l'autri prugetti.\nAppressu veni ammustrata la discrizioni prisenti nâ [$2 paggina di discrizzioni dô file].",
- "filepage-nofile": "Nun esisti nu file cu stu nnomu.",
- "filepage-nofile-link": "Nun esisti nu file cu stu nnomu, ma è pussibili [$1 caricarlu].",
+ "linkstoimage": "{{PLURAL:$1|La pàggina siquenti richiàma|Li $1 pàggini siquenti richiàmanu}} stu file:",
+ "linkstoimage-more": "Cci su' cchiu' ssai di $1 {{PLURAL:$1|pàggina|pàggini}} ca richiàmunu stu file.\nLa lista ccassutta ammustra sulu {{PLURAL:$1|la prima pàggina|li primi $1 pàggini}}.\nSi po' puru a' vìdiri [[Special:WhatLinksHere/$2|na lista cumpleta]].",
+ "nolinkstoimage": "Nudda pàggina richiama stu file.",
+ "morelinkstoimage": "Ammustra [[Special:WhatLinksHere/$1|autri culligamenti]] a' stu file.",
+ "linkstoimage-redirect": "$1 (rimannu ô file) $2",
+ "duplicatesoffile": "{{PLURAL:$1|Stu|Sti $1}} file {{PLURAL:$1|è nu dupppiuni|sunnu duppiuni}} di st'autru file ([[Special:FileDuplicateSearch/$2|cchiù dittagli]]):",
+ "sharedupload": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.",
+ "sharedupload-desc-there": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.\nTalìari la so [$2 pàggina di discrizzioni] pi' autri nfurmazzioni.",
+ "sharedupload-desc-here": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.\nAppressu veni ammustrata la discrizioni prisenti ntâ so [$2 pàggina di discrizzioni].",
+ "sharedupload-desc-edit": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.\nForsi ti cunveni canciari la so discrizzioni ntâ so [$2 pàggina di discrizzioni] dda.",
+ "sharedupload-desc-create": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.\nForsi ti cunveni canciari a so discrizzioni ntâ so [$2 pàggina di discrizzioni] dda.",
+ "filepage-nofile": "Nun esisti nuddu file cu' stu nomu.",
+ "filepage-nofile-link": "Nun esisti nuddu file cu' stu nomu, però [$1 lu poi carricari].",
"uploadnewversion-linktext": "Càrrica na virsioni nova di stu file",
- "shared-repo-from": "da $1",
- "shared-repo": "n'archiviu cundivisu",
+ "shared-repo-from": "di $1",
+ "shared-repo": "nu dipòsitu cunnivisu",
+ "upload-disallowed-here": "Nun poi suprascrìviri stu file.",
"filerevert": "Riprìstina $1",
"filerevert-legend": "Riprìstina file",
"filerevert-intro": "Stai pi ripristinari lu file '''[[Media:$1|$1]]''' â [virsioni $4 dô $2, $3].",
- "filerevert-comment": "Oggettu:",
+ "filerevert-comment": "Mutivu:",
"filerevert-defaultcomment": "Ripristinata la virsioni dô $1, $2",
"filerevert-submit": "Riprìstina",
"filerevert-success": "'''Lu file [[Media:$1|$1]]''' hà statu ripristinatu â [$4 virsioni dô $2, $3].",
"filerevert-badversion": "Nun esistanu virsiona locali pricidenti dô file cû timestamp richiestu.",
"filedelete": "Cancella $1",
"filedelete-legend": "Cancella lu file",
- "filedelete-intro": "Stai pi cancillari û file '''[[Media:$1|$1]]''' cu tutta la sou storia.",
- "filedelete-intro-old": "Stai cancillannu la virsioni di '''[[Media:$1|$1]]''' dô [$4 $3, $2].",
+ "filedelete-intro": "Stai cancillannu lu file <strong>[[Media:$1|$1]]</strong> cu' tutta la so crunuluggìa.",
+ "filedelete-intro-old": "Stai cancillannu la virsioni di <strong>[[Media:$1|$1]]</strong> dû [$4 $2 ê $2].",
"filedelete-comment": "Mutivu:",
"filedelete-submit": "Cancella",
- "filedelete-success": "Lu file '''$1''' hà statu cancillatu.",
- "filedelete-success-old": "<span class=\"plainlinks\">La virsioni dô file '''[[Media:$1|$1]]''' dô $2, $3 hà statu cancillata.</span>",
- "filedelete-nofile": "Nta {{SITENAME}} nun c'è nuddu file $1",
- "filedelete-nofile-old": "'N archiviu nun ci sugnu virsioni di '''$1''' cu li carattiristichi nnicati.",
- "filedelete-otherreason": "Autra mutivazioni o mutivazioni n più:",
- "filedelete-reason-otherlist": "Autra mutivazioni",
- "filedelete-reason-dropdown": "*Mutivazzioni cchiù cumuni\n** Viulazzioni di copyright\n** File duplicatu",
- "filedelete-edit-reasonlist": "Cancia li mutivazioni pi la cancillazzioni",
- "mimesearch": "Circata 'n basi a lu tipu MIME",
- "mimesearch-summary": "Sta pàggina cunzenti di filtrari li file 'n basi a lu tipu MIME. Nziriri la stringa di ricerca ntâ forma tipu/suttatipu, p'asempiu <code>image/jpeg</code>.",
+ "filedelete-success": "Lu file <strong>$1</strong> fu cancillatu.",
+ "filedelete-success-old": "La virsioni dû file <strong>[[Media:$1|$1]]</strong> dû $2 ê $3 fu' cancillata.",
+ "filedelete-nofile": "<strong>$1</strong> nun esisti.",
+ "filedelete-nofile-old": "Nun cc'è archiviata nudda virsioni di <strong>$1</strong> chi' havi l'attribbuta spicificati.",
+ "filedelete-otherreason": "Autru o ultiriuri mutivu:",
+ "filedelete-reason-otherlist": "Autru mutivu",
+ "filedelete-reason-dropdown": "*Mutivi cchiu' cumuni pâ cancillazzioni\n** Viulazzioni dû drittu d'auturi\n** File duppiuni",
+ "filedelete-edit-reasonlist": "Cancia li mutivi dâ cancillazzioni",
+ "filedelete-maintenance": "La cancillazzioni e lu riprìstinu dî file su' timpuraniamenti disattivati duranti la manutinzioni.",
+ "filedelete-maintenance-title": "Impussìbbili cancillari lu file",
+ "mimesearch": "Risciduta pi' tipu MIME",
+ "mimesearch-summary": "Sta pàggina cunzenti di filtrari li file 'n basi a lu tipu MIME. Nziriri la stringa di ricerca ntâ forma tipu/suttatipu o tipu/*, p'asempiu <code>image/jpeg</code>.",
"mimetype": "Tipu MIME:",
- "download": "scarica",
+ "download": "scàrrica",
"unwatchedpages": "Pàggini nun taliati",
- "listredirects": "Alencu di tutti li redirect",
- "unusedtemplates": "Template nun utilizzati",
- "unusedtemplatestext": "Nta sta pàggina vèninu alincati tutti li template (pàggini dû namespace Template) ca nun sunnu nclusi n nudda pàggina. Prima di scancillàrili è megghiu virificari ca li sìnguli template nun hannu àutri culligamenti ca ci tràsunu.",
- "unusedtemplateswlh": "àutri liami",
- "randompage": "Na pàggina ammuzzu",
- "randompage-nopages": "Nudda pàggina ntô namespace \"$1\".",
- "randomredirect": "Un redirect a muzzu",
- "randomredirect-nopages": "Nuddu rinnirizzamentu ntô namespace \"$1\".",
+ "listredirects": "Alencu di tutti li rimanni",
+ "listduplicatedfiles": "Lista dî file cu' duppiuni",
+ "listduplicatedfiles-summary": "Chista è na lista dî file unni la virsioni cchiu' nova è nu duppiuni dâ virsioni cchiu' nova di quarchi' autru file. Sulu li file lucali su' pigghiati a' cunsiddirazzioni.",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]] havi [[$3|{{PLURAL:$2|nu duppiuni|$2 duppiuna}}]].",
+ "unusedtemplates": "Template nun usati",
+ "unusedtemplatestext": "Sta pàggina elenca tutti li pàggini nto namespace {{ns:template}} ca nun sunnu nclusi nta nudda autra pàggina.\nPrima di cancillàrili è megghiu cuntrullari ca nun hannu autri culligamenti ca cci tràsunu.",
+ "unusedtemplateswlh": "autri culligamenti",
+ "randompage": "Na pàggina a' muzzu",
+ "randompage-nopages": "Nun cci su' pàggini {{PLURAL:$2|nta stu namespace|nta sti namespace}}: $1.",
+ "randomincategory": "Na pàggina a' muzzu nta na catigurìa",
+ "randomincategory-invalidcategory": "\"$1\" nun è nu nomu di catigurìa vàlidu.",
+ "randomincategory-nopages": "Nun cci su' pàggini ntâ catigurìa [[:Category:$1|$1]].",
+ "randomincategory-category": "Catigurìa:",
+ "randomincategory-legend": "Pàggina a' muzzu nta na catigurìa",
+ "randomredirect": "Nu rimannu a' muzzu",
+ "randomredirect-nopages": "Nun cc'è nuddu rimannu ntô namespace \"$1\".",
"statistics": "Statìstichi",
- "statistics-header-pages": "Statistichi pî pàggini",
- "statistics-header-edits": "Statistichi pî canci",
- "statistics-header-views": "Statistichî pî taliàti",
- "statistics-header-users": "Li statìstichi di l'utilizzatura",
- "statistics-header-hooks": "Autri statistichi",
+ "statistics-header-pages": "Statìstichi dî pàggini",
+ "statistics-header-edits": "Statìstichi dî canciamenti",
+ "statistics-header-users": "Statìstichi di l'utenti",
+ "statistics-header-hooks": "Autri statìstichi",
"statistics-articles": "Pàggini di cuntinutu",
"statistics-pages": "Pàggini",
- "statistics-pages-desc": "Tutti li pàggini dâ wiki, cu puru chiddi di discussioni, li rinnirizzamenti, ecc.",
+ "statistics-pages-desc": "Tutti li pàggini dâ wiki, cu' puru chiddi di discussioni, li rimanni, etc.",
"statistics-files": "File carricati",
- "statistics-edits": "Canci a pàrtiri di la nstallazzioni di {{SITENAME}}",
- "statistics-edits-average": "Media dî canci pi pàggina",
- "statistics-views-total": "Visualizzazioni totali",
- "statistics-views-peredit": "Visualizzazioni pî canci",
- "statistics-users": "[[Special:ListUsers|Utilizzatura]] riggistrati",
- "statistics-users-active": "Utilizzatura attivi",
- "statistics-users-active-desc": "Utilizzatura chi fìciru n'azzioni {{PLURAL:$1|ni l'ultimu ionnu|nî l'ultimi $1 ionna}}",
- "statistics-mostpopular": "Pàggini cchiù visitati",
- "doubleredirects": "Rinnirizzamenti duppi",
- "doubleredirectstext": "Chista pàggina alenca li pàggini chi rinnirìzzanu a àutri pàggini di rinnirizzamentu.\nOgnuna riga cunteni li culligamenti a lu primu e a lu secunnu redirect, oltri â prima riga di testu dû secunnu redirect ca di sòlitu cunteni la pàggina di distinazzioni \"curretta\" â quali avissi a puntari macari lu primu redirect.\nLi redirect <del>cancillati</del> furunu curretti.",
- "double-redirect-fixed-move": "[[$1]] fu spustata 'n modu automàticu, ora è nu redirect a [[$2]]",
- "double-redirect-fixer": "Curritturi di redirect",
- "brokenredirects": "Riinnirizzamenti (''redirects'') rumputi.",
- "brokenredirectstext": "Li rinnirizzamenti siquenti pùntanu a pàggini ca nun asìstinu:",
+ "statistics-edits": "Pàggini canciati di quannu {{SITENAME}} fu armatu",
+ "statistics-edits-average": "Media dî canciamenti pi' pàggina",
+ "statistics-users": "[[Special:ListUsers|Utenti]] riggistrati",
+ "statistics-users-active": "Utenti attivi",
+ "statistics-users-active-desc": "Utenti ch'hannu fattu quarchi' azzioni {{PLURAL:$1|nta l'ùltimu jornu|nta l'ùltimi $1 jorna}}",
+ "pageswithprop": "Pàggini cu na prupietà di pàggina",
+ "pageswithprop-legend": "Pàggini cu na prupietà di pàggina",
+ "pageswithprop-text": "Sta pàggina elenca li pàggini chi' adòpirunu na particulari prupietà di pàggina.",
+ "pageswithprop-prop": "Nomu dâ prupietà:",
+ "pageswithprop-submit": "Vai",
+ "pageswithprop-prophidden-long": "valuri tistuali longu dâ prupietà ammucciatu ($1)",
+ "pageswithprop-prophidden-binary": "valuri binariu dâ prupietà ammucciatu ($1)",
+ "doubleredirects": "Rimanni duppî",
+ "doubleredirectstext": "Sta pàggina alenca li pàggini chi rimànnunu ad autri pàggini di rimannu.\nOgnin riga cunteni culligamenti a lu primu e a lu secunnu rimannu, sparti dâ distinazzioni dû secunnu rimannu, ca di sòlitu è la pàggina \"giusta\" unni avissi a' puntari macari lu primu rimannu.\nLi rimanni <del>sbarrati</del> hannu statu cunsati.",
+ "double-redirect-fixed-move": "[[$1]] fu spustata.\nFu aggiurnata autumaticamenti e ora rimanna a [[$2]].",
+ "double-redirect-fixed-maintenance": "Cunsatu autumaticamenti nu rimannu duppiu di [[$1]] a' [[$2]] ntôn sirvizzu di manutinzioni.",
+ "double-redirect-fixer": "Cunsaturi dî rimanni",
+ "brokenredirects": "Rimanni rutti",
+ "brokenredirectstext": "Li rimanni siguenti pùntanu a' pàggini ca nun esìstinu:",
"brokenredirects-edit": "cancia",
"brokenredirects-delete": "cancella",
- "withoutinterwiki": "Pàggini senza interwiki",
- "withoutinterwiki-summary": "Li pàggini nnicati ccà nun hànnu liami ê virsioni nta àutri lingui:",
+ "withoutinterwiki": "Pàggini senza culligamenti intir-linguìstici",
+ "withoutinterwiki-summary": "Li pàggini siguenti nun hànnu culligamenti ê virsioni nta autri lingui.",
"withoutinterwiki-legend": "Prifissu",
"withoutinterwiki-submit": "Ammustra",
- "fewestrevisions": "Pàggini cu menu rivisioni",
+ "fewestrevisions": "Pàggini cu' cchiu' picca virsioni",
"nbytes": "$1 {{PLURAL:$1|byte|byte}}",
"ncategories": "$1 {{PLURAL:$1|catigurìa|catigurìi}}",
+ "ninterwikis": "$1 {{PLURAL:$1|interwiki}}",
"nlinks": "$1 {{PLURAL:$1|culligamentu|culligamenti}}",
- "nmembers": "$1 {{PLURAL:$1|elementu|elementi}}",
+ "nmembers": "$1 {{PLURAL:$1|membru|membra}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|membru|membra}}",
"nrevisions": "$1 {{PLURAL:$1|rivisioni|rivisioni}}",
"nviews": "$1 {{PLURAL:$1|vìsita|vìsiti}}",
- "specialpage-empty": "Sta pàggina spiciali è attuarmenti vacanti.",
+ "nimagelinks": "Adupiratu nta $1 {{PLURAL:$1|pàggina|pàggini}}",
+ "ntransclusions": "adupiratu nta $1 {{PLURAL:$1|pàggina|pàggini}}",
+ "specialpage-empty": "Nun cci su' risultati pi' stu rennicuntu.",
"lonelypages": "Pàggini òrfani",
- "lonelypagestext": "Li pàggini nnicati ccà sutta nun hannu lijami ca vèninu d'àutri pàggini di {{SITENAME}}.",
+ "lonelypagestext": "Li pàggini ccassutta nun hannu culligamenti ca vèninu d'autri pàggini e nun su' trasclusi nta autri pàggini di {{SITENAME}}.",
"uncategorizedpages": "Pàggini nun catigurizzati",
"uncategorizedcategories": "Catigurìi nun catigurizzati",
- "uncategorizedimages": "Mmàggini nun catigurizzati",
- "uncategorizedtemplates": "Template senza catigurìi",
- "unusedcategories": "Catigurìi vacanti",
- "unusedimages": "File nun utilizzati",
- "popularpages": "Pàggini cchiù visitati",
+ "uncategorizedimages": "File nun catigurizzati",
+ "uncategorizedtemplates": "Template nun catigurizzati",
+ "unusedcategories": "Catigurìi nun usati",
+ "unusedimages": "File nun usati",
"wantedcategories": "Catigurìi addumannati",
- "wantedpages": "Artìculi cchiù addumannati",
- "wantedpages-badtitle": "Tìtulu nun validu nô gruppu di risultati: $1",
+ "wantedpages": "Pàggini addumannati",
+ "wantedpages-badtitle": "Tìtulu nun vàlidu ntô gruppu di risultati: $1",
"wantedfiles": "File addumannati",
+ "wantedfiletext-cat": "Li file ccassutta su' richiamati però nun esìstunu. Ntâ lista cci ponnu èssiri macari li file chi' stannu nta dipòsiti esterni, cu' tuttu chi' esìstunu. Sti fausi pusitivi sarrannu <del>sbarrati</del>. Sparti, li pàggini chi' nclùdunu file chi' nun esìstunu su' elincati nta [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Li file ccassutta su' richiamati però nun esìstunu. Sparti, li pàggini chi' nclùdunu file chi' nun esìstunu su' elincati nta [[:$1]].",
+ "wantedfiletext-nocat": "Li file ccassutta su' richiamati però nun esìstunu. Ntâ lista cci ponnu èssiri macari li file chi' stannu nta dipòsiti esterni, cu' tuttu chi' esìstunu. Sti fausi pusitivi sarrannu <del>sbarrati</del>.",
+ "wantedfiletext-nocat-noforeign": "Li file ccassutta su' richiamati però nun esìstunu.",
"wantedtemplates": "Template addumannati",
- "mostlinked": "Pàggini supra cui agghìcanu cchiù liami",
- "mostlinkedcategories": "Catigurìi cchiù richiamati",
- "mostlinkedtemplates": "Template cchiù usati",
- "mostcategories": "Artìculi urdinati secunnu chiddi chi hannu cchiù catigurìi",
- "mostimages": "Mmàggini cchiù richiamati",
- "mostrevisions": "Artìculi urdinati secunnu chiddi chi hannu cchiù canciamenti",
+ "mostlinked": "Pàggini cchiu' culligati",
+ "mostlinkedcategories": "Catigurìi Pcchiu' culligati",
+ "mostlinkedtemplates": "Pàggini cchiu' trasclusi",
+ "mostcategories": "Pàggini cu' cchiu' ssai catigurìi",
+ "mostimages": "File cchiu' culligati",
+ "mostinterwikis": "Pàggini cu' cchiu' ssai interwiki",
+ "mostrevisions": "Pàggini cu' cchiu' ssai virsioni",
"prefixindex": "Ìnnici secunnu un prifissu",
- "shortpages": "Artìculi urdinati secunnu la lunchizza (li cchiù curti prima)",
- "longpages": "Artìculi urdinati secunnu la lunchizza (li cchiù lonchi prima)",
+ "prefixindex-namespace": "Tutti li pàggini cûn prifissu (namespace $1)",
+ "prefixindex-strip": "Leva li prifissi nta l'elencu",
+ "shortpages": "Pàggini curti",
+ "longpages": "Pàggini longhi",
"deadendpages": "Pàggini senza nisciuta",
- "deadendpagestext": "Li pàggini ndicati di sèquitu sunnu privi di culligamenti versu àutri pàggini dû situ.",
+ "deadendpagestext": "Li pàggini siguenti sunnu privi di culligamenti versu autri pàggini di {{SITENAME}}.",
"protectedpages": "Pàggini prutetti",
- "protectedpages-indef": "Sulu prutizzioni nfiniti",
- "protectedpages-cascade": "Sulu prutizzioni ricursivi",
- "protectedpagesempty": "A lu mumentu nun ci sunnu pàggini prutetti",
- "protectedtitles": "Tituli prutiggiuti",
- "protectedtitlesempty": "Nta stu mumentu nun ci sunnu tìtuli prutetti ccu li paràmitri nnicati.",
- "listusers": "Lista di utilizzatura",
- "listusers-editsonly": "Ammustra sulu utenti cu cuntribbuti",
- "listusers-creationsort": "Ordina pi data di criazioni",
- "usereditcount": "$1 {{PLURAL:$1|cuntribbutu|cuntribbuti}}",
- "usercreated": "{{GENDER:$3|Criatu/a}} lu $1 ê $2",
- "newpages": "pàggini cchiù ricenti",
+ "protectedpages-indef": "Sulu prutizzioni a' tempu innitirminatu",
+ "protectedpages-summary": "Sta pàggina elenca li pàggini già esistenti chi' comu ad ora su' prutetti. Pi' na lista dî tìtuli prutetti, chî quali vèni pruibbutu criari pàggini novi, talìa [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+ "protectedpages-cascade": "Sulu prutizzioni a' cascata",
+ "protectedpages-noredirect": "Ammuccia li rimanni",
+ "protectedpagesempty": "Pi' com'ora nun cc'è nudda pàggina prutetta cu' sti paràmitri.",
+ "protectedpages-timestamp": "Data e ura",
+ "protectedpages-page": "Pàggina",
+ "protectedpages-expiry": "Scadenza",
+ "protectedpages-performer": "Prutiggiuta di l'utenti",
+ "protectedpages-params": "Paràmitri dâ prutizzioni",
+ "protectedpages-reason": "Mutivu",
+ "protectedpages-unknown-timestamp": "Scanusciuti",
+ "protectedpages-unknown-performer": "Utenti scanusciutu",
+ "protectedtitles": "Tìtuli prutetti",
+ "protectedtitles-summary": "Sta pàggina elenca li tìtuli prutetti, chî quali vèni pruibbutu criari pàggini novi. Pi' na lista dî pàggini già esistenti chi' su' prutetti, talìa [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+ "protectedtitlesempty": "Pi' com'ora nun cc'è nuddu tìtulu prutettu cu' sti paràmitri.",
+ "listusers": "Lista di l'utenti",
+ "listusers-editsonly": "Ammustra sulu l'utenti ca hannu cuntribbuti",
+ "listusers-creationsort": "Òrdina pi' data di criazzioni",
+ "listusers-desc": "Òrdina a' scìnniri",
+ "usereditcount": "$1 {{PLURAL:$1|cuntribbutu|cuntribbuta}}",
+ "usercreated": "{{GENDER:$3|Criatu}} lu $1 ê $2",
+ "newpages": "Pàggini novi",
"newpages-username": "Utenti:",
- "ancientpages": "pàggini cchiù vecchi",
- "move": "sposta",
+ "ancientpages": "Pàggini cchiu' vecchî",
+ "move": "Sposta",
"movethispage": "Sposta sta pàggina",
- "unusedimagestext": "Accura, è pussìbbili fari lijami a li file d'àutri siti, usannu direttamenti la URL;\nchisti putìssiru quinni èssiri utilizzati puru siddu cumpàrinu nta l'alencu.",
- "unusedcategoriestext": "Li siquenti pàggini dî catigurìi esìstinu, sibbeni li catigurìi currispunnenti sunnu vacanti.",
- "notargettitle": "Dati mancanti",
- "notargettext": "Nun hà statu innicata na pàggina o un utenti 'n rilazzioni a lu quali esèquiri l'opirazzioni addumannata.",
- "nopagetitle": "La pàggina di distinazzioni nun asisti",
- "nopagetext": "La pàggina c'addumannasti nun asisti.",
- "pager-newer-n": "{{PLURAL:$1|1 di cchiù picca tempu|$1 di cchiù picca tempu}}",
- "pager-older-n": "{{PLURAL:$1|1 di cchiù tempu|$1 di cchiù tempu}}",
- "suppress": "Oversight",
- "booksources": "Libbra secunnu lu còdici ISBN",
- "booksources-search-legend": "Ricerca di fonti libbrari",
+ "unusedimagestext": "Li file ccassutta esìstunu però nun sunnu ncurpurati nta nudda pàggina.\nAccura: autri siti web ponnu aviri culligamenti ôn file pi' menzu di URL diretti; li file addupirati a' sta manera putìssiru èssiri elincati ccassutta puru si' si nni fa' usu.",
+ "unusedcategoriestext": "Li siguenti pàggini di catigurìi esìstunu, però nudda autra pàggina o catigurìa nni fa' usu.",
+ "notargettitle": "Nudda distinazzioni",
+ "notargettext": "Nun spicificasti na pàggina o puru n'utenti comu distinazzioni di st'opirazzioni.",
+ "nopagetitle": "La pàggina di distinazzioni nun esisti",
+ "nopagetext": "La pàggina ca spicificasti comu distinazzioni nun esisti.",
+ "pager-newer-n": "{{PLURAL:$1|1 cchiu' novu|$1 cchiu' novi}}",
+ "pager-older-n": "{{PLURAL:$1|1 cchiu' vecchî|$1 cchiu' vecchî}}",
+ "suppress": "Supravisuri",
+ "querypage-disabled": "Sta pàggina spiciali fu' disattivata pi' mutivi di pristazzioni.",
+ "apihelp": "Guida a' l'API",
+ "apihelp-no-such-module": "Mòdulu \"$\" nun truvatu.",
+ "booksources": "Fonti libbrarî",
+ "booksources-search-legend": "Ricerca di fonti libbrarî",
"booksources-isbn": "Còdici ISBN:",
- "booksources-go": "Vai",
- "booksources-text": "Di sèquitu veni prisintatu n'alencu di culligamenti versu siti sterni ca vìnninu libbra novi e usati, attraversu li quali è pussìbbili ottèniri maiuri nfurmazzioni supra lu testu circatu:",
- "booksources-invalid-isbn": "L'ISBN datu pari ca nun è vàlidu; cuntrolla l'erruri di ricupiatura dâ surgenti urigginali.",
- "specialloguserlabel": "Utenti:",
- "speciallogtitlelabel": "Tìtulu:",
- "log": "Log",
- "all-logs-page": "Tutti li log pubblici",
- "alllogstext": "Prisintazzioni unificata di tutti li riggistri di {{SITENAME}}. Poi limitari li criteri di circata silizziunannu lu tipu di riggistru, l'utenti ca fici l'azzioni (case-sensitive), e/o la pàggina ntirissata (pur'idda case-sensitive).",
- "logempty": "Lu log nun cunteni elementi currispunnenti â ricerca.",
+ "booksources-search": "Va cerca",
+ "booksources-text": "Ccassutta cc'è n'elencu di culligamenti versu autri siti ca vìnninu libbra novi e usati, e ponnu aviri majuri nfurmazzioni a' prupòsitu dî libbra ca stai circannu:",
+ "booksources-invalid-isbn": "Lu còdici ISBN chi' spicificasti nun pari bonu; cuntrolla si' nun cci furu sbagghî di ricupiatura.",
+ "specialloguserlabel": "Fattu di l'utenti:",
+ "speciallogtitlelabel": "Oggettu (tìtulu o utenti):",
+ "log": "Riggistra",
+ "all-logs-page": "Tutti li riggistra pubblici",
+ "alllogstext": "Prisintazzioni cumminata di tutti li riggistra dispunìbbili di {{SITENAME}}.\nPoi ristrìnciri la visuali silizziunannu nu tipu di riggistru, l'utenti ca fici l'azzioni (cuntunu majusculi e minusculi), o la pàggina ntirissata (cuntunu majusculi e minusculi puru).",
+ "logempty": "Nudda vuci currispunnenti ntô riggistru.",
"log-title-wildcard": "Attrova tituli chi ncignanu cu",
- "allpages": "Tutti li paggini",
- "nextpage": "Pàggina doppu ($1)",
- "prevpage": "Pàggina pricidenti ($1)",
+ "showhideselectedlogentries": "Cancia la visibbilità dî vuci di riggistru scigghiuti",
+ "allpages": "Tutti li pàggini",
+ "nextpage": "Pàggina appressu ($1)",
+ "prevpage": "Pàggina avanti ($1)",
"allpagesfrom": "Ammustra li pàggini a pàrtiri di:",
"allpagesto": "Ammustra li pàggini nzinu a:",
- "allarticles": "Tutti l'artìculi",
+ "allarticles": "Tutti li pàggini",
"allinnamespace": "Tutti li pàggini dû namespace $1",
"allpagessubmit": "Vai",
- "allpagesprefix": "Ammustra li pàggini chi accumìnzanu cu:",
- "allpagesbadtitle": "Lu tìtulu ndicatu pi la pàggina nun è vàlidu o cunteni prifissi interlingua o interwiki. Putissi noltri cuntèniri unu o cchiù caràttiri lu cui usu nun è ammissu ntê tìtuli.",
- "allpages-bad-ns": "Lu namespace \"$1\" nun asisti supra {{SITENAME}}.",
+ "allpagesprefix": "Ammustra li pàggini chi' accumènzanu cu':",
+ "allpagesbadtitle": "Lu tìtulu di pàggina spicificatu nun era vàlidu o avìa nu prifissu intir-linguìsticu o intir-wiki.\nPutissi cuntèniri unu o cchiu' ssai caràttiri chi' nun su' cunsintuti ntê tìtula.",
+ "allpages-bad-ns": "Lu namespace \"$1\" nun asisti supra a' {{SITENAME}}.",
+ "allpages-hide-redirects": "Ammuccia li rimanni",
+ "cachedspecial-viewing-cached-ttl": "Stai taliannu na virsioni ntâ ''cache'' di sta pàggina, chi' po' èssiri vecchia nfinu a' $1.",
+ "cachedspecial-viewing-cached-ts": "Stai taliannu na virsioni ntâ ''cache'' di sta pàggina, chi' purrìa nun èssiri pirfittamenti aggiurnata.",
+ "cachedspecial-refresh-now": "Va talìa la cchiu' nova.",
"categories": "Catigurìi",
"categoriespagetext": "{{PLURAL:$1|La catigurìa ccassutta cunteni|Li catigurìi ccassutta cuntèninu}} pàggini o file multimidiali.\nLi [[Special:UnusedCategories|catigurìi vacanti]] nun sunnu ammustrati ccà.\nTalìa macari li [[Special:WantedCategories|catigurìi addumannati]].",
- "categoriesfrom": "Ammustra li catigurìi a pàrtiri di:",
- "special-categories-sort-count": "ordina pi nùmmuru",
+ "categoriesfrom": "Ammustra li catigurìi a' pàrtiri di:",
+ "special-categories-sort-count": "òrdina pi' cuntìggiu",
"special-categories-sort-abc": "ordina alfabbeticamenti",
- "deletedcontributions": "Cuntribbuti utenti scancillati",
- "deletedcontributions-title": "Cuntribbuti utenti scancillati",
- "sp-deletedcontributions-contribs": "cuntribbuti",
- "linksearch": "Lijami di fora",
- "linksearch-pat": "Mudellu di circata:",
+ "deletedcontributions": "Cuntribbuta di l'utenti cancillati",
+ "deletedcontributions-title": "Cuntribbuta di l'utenti cancillati",
+ "sp-deletedcontributions-contribs": "cuntribbuta",
+ "linksearch": "Risciduta dî culligamenti di fora",
+ "linksearch-pat": "Esprissioni di risciduta:",
"linksearch-ns": "Namespace:",
"linksearch-ok": "Arriscedi",
- "linksearch-text": "C'è la pussibbilitati di fari usu di metacaràttiri, p'asèmpiu \"*.wikipedia.org\".<br />\nProtucolli suppurtati: <code>$1</code>",
- "linksearch-line": "$1 prisenti ntâ pàggina $2",
- "linksearch-error": "Li metacaràttiri si ponnu usari sulu a lu princìpiu dû nnirizzu.",
- "listusersfrom": "Ammustra l'utenti a pàrtiri di:",
+ "linksearch-text": "Si ponnu adupirari li caràttiri matta, ad esempiu \"*.wikipedia.org\".\nCci voli almenu nu duminiu di primu liveddu, ad esempiu \"*.org\".<br />\n{{PLURAL:$2|Protucollu suppurtatu|Protucolli suppurtati}}: <code>$1</code> (è pridifinutu http:// si' nun si nni spicìfica)",
+ "linksearch-line": "$1 è culligatu dâ pàggina $2",
+ "linksearch-error": "Li caràttiri matta ponnu appariri sulu ô principiu dû nomu host.",
+ "listusersfrom": "Ammustra l'utenti a' pàrtiri di:",
"listusers-submit": "Ammustra",
- "listusers-noresult": "Nuddu utenti attruvatu. Virificari l'usu di caràttiri maiùsculi/minùsculi.",
- "listusers-blocked": "(bloccatu)",
- "activeusers": "Lista dî utenti attivi",
- "activeusers-count": "$1 {{PLURAL:$1|canciamentu|canciamenti}} nti {{PLURAL:$3|l'ùrtimu jornu| nti l'ùrtimi $3 jorna}}",
- "activeusers-from": "Ammustra li utenti a pàrtiri da:",
- "activeusers-hidebots": "Bot ammucciati",
- "activeusers-hidesysops": "Amministratura ammucciati",
- "activeusers-noresult": "Nussun utenti truvatu.",
- "listgrouprights": "Diritti dô gruppu utenti",
- "listgrouprights-summary": "Ccà sutta sunnu elincati li gruppi utenti difiniti pi sta wiki, cu li dritti d'accessu assuciati a iddi. Pi sapìrinni chiossai supra li dritti, lèggiti [[{{MediaWiki:Listgrouprights-helppage}}|sta pàggina]].",
- "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Dirittu assegnatu</span>\n* <span class=\"listgrouprights-revoked\">Dirittu revocatu</span>",
+ "listusers-noresult": "Nuddu utenti attruvatu.",
+ "listusers-blocked": "(bluccatu)",
+ "activeusers": "Lista di l'utenti attivi",
+ "activeusers-intro": "Chista è na lista di l'utenti chi' fìciru na quarchi' attività {{PLURAL:$1|nta l'ùltimu jornu|nta l'ùltimi $1 jorna}}.",
+ "activeusers-count": "$1 {{PLURAL:$1|azziòni|azziòna}} nta {{PLURAL:$3|l'ùltimu jornu|l'ùltimi $3 jorna}}",
+ "activeusers-from": "Ammustra l'utenti a' pàrtiri di:",
+ "activeusers-hidebots": "Ammuccia li bot",
+ "activeusers-hidesysops": "Ammuccia l'amministratura",
+ "activeusers-noresult": "Nuddu utenti truvatu.",
+ "listgrouprights": "Dritti di gruppa d'utenti",
+ "listgrouprights-summary": "Ccà sutta sunnu elincati li gruppa d'utenti difinuti nta sta wiki, cu li so dritti d'accessu.\nCci ponnu èssiri [[{{MediaWiki:Listgrouprights-helppage}}|autri nfurmazzioni]] a' prupòsitu di ciascunu drittu.",
+ "listgrouprights-key": "Legenda:\n* <span class=\"listgrouprights-granted\">Drittu cuncidutu</span>\n* <span class=\"listgrouprights-revoked\">Drittu rivucatu</span>",
"listgrouprights-group": "Gruppu",
- "listgrouprights-rights": "Diritti",
+ "listgrouprights-rights": "Dritti",
"listgrouprights-helppage": "Help:Diritti dô gruppu",
- "listgrouprights-members": "(Elencu di cu ni fa parti)",
- "listgrouprights-addgroup": "Pò jùnciri {{PLURAL:$2|lu gruppu|li gruppi}}: $1",
- "listgrouprights-removegroup": "Pò livari {{PLURAL:$2|lu gruppu|li gruppi}}: $1",
- "listgrouprights-addgroup-all": "Pò jùnciri a tutti li gruppi",
- "listgrouprights-removegroup-all": "Pò livari tutti li gruppi",
- "listgrouprights-addgroup-self": "Pò jùnciri {{PLURAL:$2|lu gruppu|li gruppi}} a lu propriu account: $1",
- "listgrouprights-removegroup-self": "Pò livari {{PLURAL:$2|nu gruppu|li gruppi}} da lu propriu account: $1",
- "listgrouprights-addgroup-self-all": "Junci tutti li gruppa ô propriu account",
- "listgrouprights-removegroup-self-all": "Può livari tutti li gruppi dô propriu account",
- "mailnologin": "Nuddu ndirizzu cui mannari lu missaggiu",
- "mailnologintext": "Hai a fari lu [[Special:UserLogin|login]] e aver riggistratu na casella e-mail vàlida ntê tò [[Special:Preferences|prifirenzi]] pi mannari posta alittrònica a àutri Utenti.",
- "emailuser": "Manna n'imail a stu utenti",
- "emailpage": "Manna un missaggiu e-mail a l'utenti",
- "emailpagetext": "Siddu st'utenti lassau nu nnirizzu email vàlidu ntê sò prifirenzi, ci putiti mannari nu missaggiu. Lu nnirizzu email ca lassasti ntê tò [[Special:Preferences|prifirenzi]] và a cumpàriri comu mittenti di lu email, di manera ca lu distinatariu ti pò arrispùnniri.",
- "defemailsubject": "Missaggiu di {{SITENAME}}",
- "noemailtitle": "Nuddu ndirizzu e-mail",
- "noemailtext": "St'utilizzaturi nun spicificau nu nnirizzu email vàlidu.",
- "nowikiemailtext": "St'utenti scigghìu di non aricèviri missaggi di posta alittrònica di l'àutri utenti.",
- "email-legend": "Manna n'e-mail a n'àutru utenti di {{SITENAME}}",
+ "listgrouprights-members": "(elencu di cu nni fa' parti)",
+ "listgrouprights-addgroup": "Agghiùnciri {{PLURAL:$2|ô gruppu|ê gruppa}}: $1",
+ "listgrouprights-removegroup": "Livari{{PLURAL:$2|dû gruppu|dî gruppa}}: $1",
+ "listgrouprights-addgroup-all": "Agghiùnciri a' tutti li gruppa",
+ "listgrouprights-removegroup-all": "Livari di tutti li gruppa",
+ "listgrouprights-addgroup-self": "Agghiùncirisi {{PLURAL:$2|ô gruppu|ê gruppa}}: $1",
+ "listgrouprights-removegroup-self": "Livàrisi {{PLURAL:$2|dû gruppu|dî gruppa}}: $1",
+ "listgrouprights-addgroup-self-all": "Agghiùncirisi a' tutti li gruppa",
+ "listgrouprights-removegroup-self-all": "Livàrisi di tutti li gruppa",
+ "listgrouprights-namespaceprotection-header": "Ristrizzioni pi' namespace",
+ "listgrouprights-namespaceprotection-namespace": "Namespace",
+ "listgrouprights-namespaceprotection-restrictedto": "Dritti chi' cunsentunu a' l'utenti di fari canciamenti",
+ "trackingcategories": "Catigurìi di tracciamentu",
+ "trackingcategories-summary": "Sta pàggina elenca i catigurìi di tracciamèntu chi' vènunu jincuti autumaticamenti dû software MediaWiki. I so nomi si ponnu canciari mudificannu i missaggi di sistema currispunnenti ntô namespace {{ns:8}}.",
+ "trackingcategories-msg": "Catigurìa di tracciamentu",
+ "trackingcategories-name": "Nomu dû missaggiu",
+ "trackingcategories-desc": "Criterî pâ nclusioni ntâ catigurìa",
+ "noindex-category-desc": "Sta pàggina nun veni innicizzata dî robot picchì cunteni la palora màggica <code><nowiki>__NOINDEX__</nowiki></code> e sta nta nu namespace unni sta marcatura è cunsintuta.",
+ "index-category-desc": "Sta pàggina cunteni la palora màggica <code><nowiki>__INDEX__</nowiki></code> (e sta nta nu namespace unni sta marcatura è cunsintuta), e pi' chistu veni innicizzata dî robot quannu nurmalmenti nô sarrìa.",
+ "post-expand-template-inclusion-category-desc": "La grannizza di sta pàggina passa <code>$wgMaxArticleSize</code> appressu a' l'espansioni di tutti li template, dunca certi template nun furu espannuti.",
+ "post-expand-template-argument-category-desc": "Sta pàggina veni cchiu' granni di <code>$wgMaxArticleSize</code> appressu chi' s'espànni l'argumentu dûn template (quarchi' cosa nta parèntisi graffi tripli, comu <code>{{{Pippu}}}</code>).",
+ "expensive-parserfunction-category-desc": "Sta pàggina adòpira troppi funzioni di l'analizzaturi sintatticu custusi (comu <code>#ifexist</code>). Talìa [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "Sta pàggina cunteni nu culligamentu a' file ruttu (nu culligamentu a' nu file chi' nun esisti).",
+ "hidden-category-category-desc": "Sta catigurìa cunteni <code><nowiki>__HIDDENCAT__</nowiki></code> ntô corpu dâ so pàggina, cosa chi' nâ fa' spuntari supra ê pàggini ntô riquatru dî culligamenti ê catigurìi comu mpustazzioni pridifinuta.",
+ "trackingcategories-nodesc": "Nudda discrizzioni dispunìbbili.",
+ "trackingcategories-disabled": "Sta catigurìa è disattivata",
+ "mailnologin": "Nuddu nnirizzu pi' mannari",
+ "mailnologintext": "Hâ' [[Special:UserLogin|tràsiri]] e aviri riggistratu nu nnirizzu di posta elittrònica vàlidu ntê to [[Special:Preferences|prifirenzi]] pi' putiri mannari posta elittrònica a' l'àutri utenti.",
+ "emailuser": "Manna nu missaggiu di posta elittrònica a' st'utenti",
+ "emailuser-title-target": "Mannari nu missaggiu di posta elittrònica a' {{GENDER:$1|stu utenti|sta utenti}}",
+ "emailuser-title-notarget": "Mannari nu missaggiu di posta elittrònica a' n'utenti",
+ "emailpage": "Mannari nu missaggiu di posta elittrònica a' l'utenti",
+ "emailpagetext": "Poi adupirari lu mòdulu ccassutta pi' mannari nu missaggiu di posta elittrònica a' {{GENDER:$1|stu utenti|sta utenti}}.\nLu nnirizzu di posta elittrònica ca mittisti ntê [[Special:Preferences|prifirenzi dû to utenti]] và a' cumpàriri comu mittenti dû missaggiu, di manera ca lu distinatariu ti pò arrispùnniri dirittamenti.",
+ "defemailsubject": "Missaggiu di {{SITENAME}} di l'utenti \"$1\"",
+ "usermaildisabled": "Missaggi di posta elittrònica a' l'utenti disattivati",
+ "usermaildisabledtext": "Nta sta wiki nun si ponnu mannari missaggi di posta elittrònica a' l'autri utenti",
+ "noemailtitle": "Nuddu nnirizzu di posta elittrònica",
+ "noemailtext": "St'utenti nun havi spicificatu nu nnirizzu di posta elittrònica vàlidu.",
+ "nowikiemailtext": "St'utenti scigghìu di nun ricèviri missaggi di posta elittrònica di l'autri utenti.",
+ "emailnotarget": "Spicificatu comu distinatariu un nomu utenti nun esistenti o nun vàlidu.",
+ "emailtarget": "Metti lu nomu utenti dû distinatariu",
+ "emailusername": "Nomu utenti:",
+ "emailusernamesubmit": "Manna",
+ "email-legend": "Manna posta elittrònica a n'autru utenti di {{SITENAME}}",
"emailfrom": "Di:",
"emailto": "A:",
"emailsubject": "Uggettu:",
"emailmessage": "Missaggiu:",
- "emailsend": "Mannari",
+ "emailsend": "Manna",
"emailccme": "Mànnami na copia dû missaggiu.",
- "emailccsubject": "Copia dû missaggiu mannatu a $1: $2",
- "emailsent": "Imeil mannata",
- "emailsenttext": "Lu tò missaggiu imeil ha statu mannatu.",
- "emailuserfooter": "Sta e-mail fu mannata di $1 a $2 attraversu la funzionu \"Manna nu missàggiu e-mail a l'utenti\" supra {{SITENAME}}.",
- "watchlist": "Taliati spiciali",
- "mywatchlist": "Lista taliata mia",
- "watchlistfor2": "Pi $1, $2",
- "nowatchlist": "Nun hai innicatu pàggini a tèniri d'occhiu.",
- "watchlistanontext": "Pi visualizzari e canciari l'alencu di l'ossirvati spiciali è nicissariu $1.",
- "watchnologin": "Nun hai effittuatu lu login",
- "addedwatchtext": "La pàggina \"[[:$1]]\" è stata agghiunciuta â propia [[Special:Watchlist|lista di l'ossirvati spiciali]]. D'ora n poi, li mudìfichi appurtati â pàggina e â sò discussioni vèninu alincati n chidda sedi; lu tìtulu dâ pàggina appari n '''grassettu''' ntâ pàggina di l' [[Special:RecentChanges|ùrtimi canciamenti]] pi rinnìrilu cchiù visìbbili. Siddu n un secunnu tempu s'addisìa eliminari la pàggina dâ lista di l'ossirvati spiciali, fari clic supra \"nun sèquiri\" ntâ barra n àutu.",
- "removedwatchtext": "La pàggina \"[[:$1]]\" hà statu eliminata dâ lista di l'ossirvati spiciali.",
- "watch": "talìa",
- "watchthispage": "talìa sta pàggina",
- "unwatch": "Nun taliari",
- "unwatchthispage": "Smetti di sèquiri",
- "notanarticle": "Nun è n'artìculu",
- "notvisiblerev": "La revisioni fu cancillata",
- "watchlist-details": "La lista dê pàggini taliati cunteni {{PLURAL:$1|na pàggina (cu la rispittiva pàggina di discussioni)|$1 pàggini (cu li rispittivi pàggini di discussioni)}}.",
- "wlheader-enotif": "La nutìfica via e-mail è attivata.",
- "wlheader-showupdated": "Li pàggini ca hannu statu canciati dâ tò ùrtima vìsita sunnu evidinziati 'n '''grassettu'''",
- "wlnote": "Sutta attrovi l'ùrtim{{PLURAL:$1|u canciamentu|i $1 canciamenti}}, nta l'ùrtim{{PLURAL:$1|a ura|i '''$2''' uri}}.",
- "wlshowlast": "Ammustra l'ùrtimi $1 uri $2 jorna $3",
- "watchlist-options": "Opzioni ussirvati spiciali",
- "watching": "Junta a l'ussirvati spiciali...",
- "unwatching": "Scancillazzioni di l'ussirvati spiciali...",
+ "emailccsubject": "Copia dû missaggiu ca mannasti a' $1: $2",
+ "emailsent": "Missaggiu di posta elittrònica mannatu",
+ "emailsenttext": "Lu to missaggiu di posta elittrònica fu' mannatu.",
+ "emailuserfooter": "Stu missaggiu fu' mannatu di $1 a' $2 attraversu dâ funzioni \"Manna nu missàggiu di posta elittrònica a' l'utenti\" supra a' {{SITENAME}}.",
+ "usermessage-summary": "Lassatu nu missaggiu di sistema.",
+ "usermessage-editor": "Missaggeri di sistema",
+ "watchlist": "Lista taliata",
+ "mywatchlist": "La me lista taliata",
+ "watchlistfor2": "Di $1, $2",
+ "nowatchlist": "Nun hai nudda vuci ntâ to lista taliata.",
+ "watchlistanontext": "Pi' vìdiri e canciari li vuci dâ to lista taliata hâ' tràsiri.",
+ "watchnologin": "Nun hai trasutu",
+ "addwatch": "Agghiunci â lista taliata",
+ "addedwatchtext": "La pàggina \"[[:$1]]\" fu' agghiunciuta â to [[Special:Watchlist|lista taliata]].\nI canciamenti futuri a' sta pàggina e â so pàggina di discussioni venirannu elincati cca.",
+ "addedwatchtext-short": "La pàggina \"$1\" fu' agghiunciuta â to lista taliata.",
+ "removewatch": "Leva dâ lista taliata",
+ "removedwatchtext": "La pàggina \"[[:$1]]\" fu' livata dâ [[Special:Watchlist|to lista taliata]].",
+ "removedwatchtext-short": "La pàggina \"$1\" fu' livata dâ to lista taliata.",
+ "watch": "Talìa",
+ "watchthispage": "Talìa sta pàggina",
+ "unwatch": "Nun taliari cchiu'",
+ "unwatchthispage": "Finisci di taliari",
+ "notanarticle": "Nun è na pàggina di cuntinutu",
+ "notvisiblerev": "L'ùltima virsioni fatta di n'utenti diffirenti fu' cancillata",
+ "watchlist-details": "{{PLURAL:$1|Cc'è na pàggina|Cci su' $1 pàggini}} ntâ to lista taliata, senza cuntari sparti li pàggini di discussioni.",
+ "wlheader-enotif": "La nutìfica via posta elittrònica è attivata.",
+ "wlheader-showupdated": "Li pàggini ca hannu statu canciati dâ tò ùrtima vìsita sunnu evidinziati 'n <strong>grassettu</strong>.",
+ "wlnote": "Sutta attrovi l'ùrtim{{PLURAL:$1|u canciamentu|i <strong>$1</strong> canciamenti}} fatti nta l'ùrtim{{PLURAL:$1|a ura|i <strong>$2</strong> uri}}, aggiurnati ê $4 dû $3.",
+ "wlshowlast": "Ammustra l'ùrtimi $1 uri $2 jorna",
+ "watchlist-options": "Opzioni dâ lista taliata",
+ "watching": "Agghiunciuta â lista taliata...",
+ "unwatching": "Cancillata dâ lista taliata...",
+ "watcherrortext": "Mmattìu n'erruri ntô canciari i to mpustazzioni dâ lista taliata di \"$1\".",
"enotif_reset": "Segna tutti li pàggini comu già visitati",
"enotif_impersonal_salutation": "Utenti di {{SITENAME}}",
+ "enotif_subject_deleted": "La pàggina $1 supra a {{SITENAME}} fu cancillata di $2",
+ "enotif_subject_created": "La pàggina $1 supra a' {{SITENAME}} fu' criata di $2",
+ "enotif_subject_moved": "La pàggina $1 supra a' {{SITENAME}} fu' spustata di $2",
+ "enotif_subject_restored": "La pàggina $1 supra a' {{SITENAME}} fu' ripristinata di $2",
+ "enotif_subject_changed": "La pàggina $1 supra a' {{SITENAME}} fu' canciata di $2",
+ "enotif_body_intro_deleted": "La pàggina $1 supra a' {{SITENAME}} fu' cancillata lu $PAGEEDITDATE di $2, talìa $3.",
+ "enotif_body_intro_created": "La pàggina $1 supra a' {{SITENAME}} fu' criata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
+ "enotif_body_intro_moved": "La pàggina $1 supra a' {{SITENAME}} fu' spustata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
+ "enotif_body_intro_restored": "La pàggina $1 supra a' {{SITENAME}} fu' ripristinata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
+ "enotif_body_intro_changed": "La pàggina $1 supra a' {{SITENAME}} fu' canciata lu $PAGEEDITDATE di $2, talìa la virsioni attuali nta $3.",
"enotif_lastvisited": "Cunzurta $1 pi vìdiri tutti li canciamenti dâ tò ùrtima vìsita.",
- "enotif_lastdiff": "Vìdiri $1 pi visualizzari lu canciamentu.",
+ "enotif_lastdiff": "Vidi $1 pi' taliari lu canciamentu.",
"enotif_anon_editor": "utenti anonimu $1",
- "enotif_body": "Gintili $WATCHINGUSERNAME,\n\nla pàggina $PAGETITLE di {{SITENAME}} hà stata $CHANGEDORCREATED 'n data $PAGEEDITDATE di $PAGEEDITOR; la virsioni attuali s'attrova a lu ndirizzu $PAGETITLE_URL.\n\n$NEWPAGE\n\nRiassuntu dû canciamentu, nziritu di l'auturi: $PAGESUMMARY $PAGEMINOREDIT\n\nCuntatta l'auturi dû canciamentu:\nvia e-mail: $PAGEEDITOR_EMAIL\nsupra lu situ: $PAGEEDITOR_WIKI\n\nNun vèninu mannati àutri canciamenti 'n caso di ultiriuri canciamenti, a menu ca tu nun vìsiti la pàggina. Noltri, è pussìbbili rimpustari l'avvisu di nutìfica pi tutti li pàggini ntâ lista di l'ussirvati spiciali.\n\n Lu sistema di nutìfica di {{SITENAME}}, a lu tò sirvizziu\n\n--\nPi mudificari li mpustazzioni dâ lista di l'ussirvati spiciali, vìsita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPi dari lu tò feedback e arricèviri ultiriuri assistenza:\n$HELPPAGE",
+ "enotif_body": "Gintili $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRiassuntu fattu di l'auturi: $PAGESUMMARY $PAGEMINOREDIT\n\nPi' cuntattari l'auturi:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNun ti mannamu autri nutìfichi 'n casu di ultiriuri attività a' menu ca nun vìsiti dda pàggina mentri chi' si' trasutu. Poi puru mpustari dâ to lista taliata l'avvisu di nutìfica pi' tutti li pàggini chi' cunteni.\n\nLu sistema di nutìfica di {{SITENAME}}, ô to sirvizziu\n\n--\nPi' canciari li to mpustazzioni di nutìfica via posta elittrònica, vìsita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPi' canciari li mpustazzioni dâ to lista taliata, vìsita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPi' livari sta pàggina dâ to lista taliata, vìsita\n$UNWATCHURL\n\nPi' lassari cummenti e arricèviri ultiriuri assistenza:\n$HELPPAGE",
"created": "criatu",
"changed": "canciatu",
- "deletepage": "Elìmina la pàggina",
- "confirm": "Cunferma",
- "excontent": "Lu cuntinutu era: '$1'",
- "excontentauthor": "Lu cuntinutu era: '$1' (e lu sulu cuntribbuturi era '[[Special:Contributions/$2|$2]]')",
- "exbeforeblank": "Lu cuntinutu prima dû svacantamentu era: '$1'",
+ "deletepage": "Cancella la pàggina",
+ "confirm": "Cunfirma",
+ "excontent": "lu cuntinutu era: \"$1\"",
+ "excontentauthor": "lu cuntinutu era: \"$1\" (e lu sulu cuntribbuturi era \"[[Special:Contributions/$2|$2]]\")",
+ "exbeforeblank": "lu cuntinutu prima dû svacantamentu era: \"$1\"",
"delete-confirm": "Cancella \"$1\"",
"delete-legend": "Cancella",
- "historywarning": "Accura: La pàggina ca stai pi cancillari havi na cronoluggìa:",
- "confirmdeletetext": "Stai cancillannu dû databbasi na pàggina o na mmàggini cu tutta la sò storia di manera pirmanenti. Pi fauri, cunferma ca tu ntenni fari sta cosa, ca tu hai caputu li cunziquenzi, e chi lu fai secunnu li linìi guida stabbiliti 'n [[{{MediaWiki:Policy-url}}]].",
+ "historywarning": "<strong>Accura:</strong> La pàggina ca stai pi' cancillari havi na crunuluggìa cu' $1 virsioni:",
+ "confirmdeletetext": "Stai cancillannu na pàggina cu' tutta la so crunuluggìa.\nPi' favuri, cunfirma ca ntenni fari sta cosa, ca hai caputu li cunsiguenzi, e chi' lu fai secunnu [[{{MediaWiki:Policy-url}}|li linî guida]].",
"actioncomplete": "Azzioni cumpritata",
"actionfailed": "Azioni fallita",
"deletedtext": "\"$1\" ha statu cancillatu.\nTalìa $2 pi na lista di cancillazzioni ricenti.",
- "dellogpage": "Cancillazzioni",
+ "dellogpage": "Riggistru dî cancillazzioni",
"dellogpagetext": "Di sèquitu sunnu alincati li pàggini cancillati di ricenti.",
- "deletionlog": "Log dî cancillazzioni",
+ "deletionlog": "riggistru dî cancillazzioni",
"reverted": "Ripristinata la virsioni pricidenti",
"deletecomment": "Mutivu:",
- "deleteotherreason": "Autra mutivazioni o mutivazioni in più:",
- "deletereasonotherlist": "Autra mutivazioni",
- "deletereason-dropdown": "*Mutivazzioni cchiù cumuni pi la cancillazzioni\n** Dumanna di l'auturi\n** Viulazzioni di copyright\n** Vannalismu",
- "delete-edit-reasonlist": "Cancia li mutivazzioni pi la cancillazioni",
- "delete-toobig": "La storia dî canciamenti di sta pàggina è assai longa (ortri $1 {{PLURAL:$1|rivisioni|rivisioni}}). La sò scancillazzioni vinni limitata pi scanzari la pussibbilitati di criari senza vulìrilu prubbremi di funziunamentu ô database di {{SITENAME}}.",
- "delete-warning-toobig": "La storia di sta pàggina è assai longa (ortri $1 {{PLURAL:$1|rivisioni|rivisioni}}). La sò scancillazzioni pò dari prubbremi di funziunamentu ô database di {{SITENAME}}; prucèdiri cu attinzioni.",
- "rollback": "Annulla li canciamenti",
- "rollback_short": "Canciu n'arreri",
+ "deleteotherreason": "Autru o ultiriuri mutivu:",
+ "deletereasonotherlist": "Autru mutivu",
+ "deletereason-dropdown": "* Mutivi cchiu' cumuni pâ cancillazzioni\n** Spam\n** Vannalismu\n** Viulazzioni di lu drittu d'auturi\n** Dumanna di l'auturi\n** Rimannu scassatu",
+ "delete-edit-reasonlist": "Cancia li mutivi dâ cancillazzioni",
+ "delete-toobig": "Sta pàggina havi na crunuluggìa dî canciamenti assai longa, cchiu' ssai di $1 {{PLURAL:$1|virsioni|virsioni}}).\nLa cancillazzioni dî pàggini comu a' chista è risirvata, pi' scansari la pussibbilitati di pruvucari senza vulìrilu prubblemi a' {{SITENAME}}.",
+ "delete-warning-toobig": "Sta pàggina havi na crunuluggìa dî canciamenti assai longa, cchiu' ssai di $1 {{PLURAL:$1|virsioni|virsioni}}).\nLa so cancillazzioni po' disturbari lu funziunamentu di {{SITENAME}}; prucedi cu' cautela.",
+ "deleteprotected": "Nun poi cancillari sta pàggina pirchì fu prutiggiuta.",
+ "deleting-backlinks-warning": "'''Accura:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Autri pàggini]] su' culligati o trascludunu la pàggina chi' stai cancillannu.",
+ "rollback": "Annullamentu di canciamenti",
"rollbacklink": "canciu n'arreri",
- "rollbackfailed": "Canciu 'n arreri fallitu",
- "cantrollback": "Mpussìbbili annullari li canciamenti; l'utenti ca l'effittuau è l'ùnicu a aviri cuntribbuiutu â pàggina.",
- "alreadyrolled": "Nun è pussìbbili annullari li canciamenti appurtati â pàggina [[:$1]] di parti di [[User:$2|$2]] ([[User talk:$2|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); n'àutru utenti hà già canciatu la pàggina oppuru hà effittuatu lu rollback.\n\nLu canciamentu cchiù ricenti â pàggina fu appurtata di [[User:$3|$3]] ([[User talk:$3|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
- "editcomment": "Â discrizzioni â mudìfica era: \"''$1''\".",
- "revertpage": "Canciu narrè di [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussioni]]) cu l'ùrtima virsioni di [[User:$1|$1]]",
- "rollback-success": "Annullati li canciamenti di $1; ritornata â virsioni pricidenti di $2.",
- "sessionfailure": "S'hà virificatu un prubbrema cu la tò sissioni di login;\nlu sistema nun hà esiquitu lu cumannu mpartitu pi pricauzzioni.\nPi favuri utilizza lu tastu \"'n arreri\" dû tò browser, ricàrrica la pàggina e riprova di novu.",
- "protectlogpage": "Pàggini prutetti",
- "protectlogtext": "Lista di prutezzioni/sprutezzioni dî pàggini. Vidi macari la [[Special:ProtectedPages|lista dî pàggini prutetti]].",
- "protectedarticle": "hà prutettu [[$1]]",
- "modifiedarticleprotection": "canciàu lu liveddu di prutizzioni di \"[[$1]]\"",
- "unprotectedarticle": "hà sprutettu [[$1]]",
- "movedarticleprotection": "spustau la prutizzioni di \"[[$2]]\" a \"[[$1]]\"",
- "protect-title": "Prutezzioni di \"$1\"",
- "prot_1movedto2": "[[$1]] spustatu a [[$2]]",
- "protect-legend": "Cunferma la prutezzioni",
+ "rollbacklinkcount": "cancia n'arreri $1 {{PLURAL:$1|mudìfica|mudìfichi}}",
+ "rollbacklinkcount-morethan": "cancia n'arreri cchiu' ssai di $1 {{PLURAL:$1|mudìfica|mudìfichi}}",
+ "rollbackfailed": "Lu canciu 'n arreri nun riniscìu",
+ "cantrollback": "Nun si po' annullari lu canciamentu;\nl'ùltimu cuntribbuturi è l'ùnicu auturi di sta pàggina.",
+ "alreadyrolled": "Nun si po' annullari l'ùltimu canciamentu â pàggina [[:$1]] fattu di [[User:$2|$2]] ([[User talk:$2|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nquarchidun'autru già hâ canciatu la pàggina o puru hâ fattu nu canciu n'arreri.\n\nL'ùltimu canciamentu â pàggina fu' fattu di [[User:$3|$3]] ([[User talk:$3|discussioni]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+ "editcomment": "Lu riassuntu dû canciamentu era: \"''$1''\".",
+ "revertpage": "Annullati li canciamenti fatti di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussioni]]) nfina a' l'ùltima virsioni di [[User:$1|$1]]",
+ "revertpage-nouser": "Annullati li canciamenti fatti di n'utenti ammucciatu nfina a' l'ùltima virsioni di {{GENDER:$1|[[User:$1|$1]]}}",
+ "rollback-success": "Annullati li canciamenti di $1;\nsi turnau a' l'ùltima virsioni di $2.",
+ "sessionfailure-title": "Erruri dâ sissioni",
+ "sessionfailure": "Pari chi' cc'è quarchi' prubblema câ to sissioni di trasuta;\nst'azzioni fu' annullata comu pricauzzioni contra dû furtu di sissioni.\nTorna â pàggina pricidenti, ricàrricala e prova n'autra vota.",
+ "protectlogpage": "Riggistru dî prutizzioni",
+ "protectlogtext": "Ccassutta c'è nu riggistru dî canciamenti â prutizzioni dî pàggini.\nVidi la [[Special:ProtectedPages|lista dî pàggini prutetti]] pi' canùsciri tutti i prutizzioni di pàggini chi' su' in viguri.",
+ "protectedarticle": "prutiggìu [[$1]]",
+ "modifiedarticleprotection": "canciau lu liveddu di prutizzioni di \"[[$1]]\"",
+ "unprotectedarticle": "livau la prutizzioni di \"[[$1]]\"",
+ "movedarticleprotection": "spustau la prutizzioni di \"[[$2]]\" a' \"[[$1]]\"",
+ "protect-title": "Canciamentu dû liveddu di prutizzioni di \"$1\"",
+ "protect-title-notallowed": "Vista dû liveddu di prutizzioni di \"$1\"",
+ "prot_1movedto2": "spustau [[$1]] nta [[$2]]",
+ "protect-badnamespace-title": "Namespace unni nun si po' prutèggiri",
+ "protect-badnamespace-text": "Li pàggini nta stu namespace nun si ponnu prutèggiri.",
+ "protect-norestrictiontypes-text": "Sta pàggina nun si po' prutèggiri picchì nun cc'è nudda sorta di ristrizzioni dispunìbbili.",
+ "protect-norestrictiontypes-title": "Pàggina chi' nun si po' prutèggiri",
+ "protect-legend": "Cunfirma la prutizzioni",
"protectcomment": "Mutivu:",
"protectexpiry": "Scadenza",
- "protect_expiry_invalid": "Scadenza nun vàlida.",
- "protect_expiry_old": "Scadenza già trascursa.",
- "protect-text": "Ccà poi vìdiri e canciari lu liveddu di prutezzioni pi la pàggina '''$1'''.",
- "protect-locked-blocked": "Nun pò canciari li liveddi di prutizzioni quannu sî bloccatu. Li mpostazzioni correnti pâ pàggina sugnu '''$1''':",
- "protect-locked-dblock": "Mpussibbili canciari li liveddi di prutizzioni pi nu bloccu dô database.\nLi mpostazzioni correnti pâ pàggina sugnu '''$1''':",
- "protect-locked-access": "Nun hai li pirmessi nicissari pi canciari li liveddi di prutizzioni dâ pàggina.\nLi mpostazzioni correnti pâ pàggina sugnu '''$1''':",
- "protect-cascadeon": "A lu mumentu sta pàggina è bluccata, poichì nclusa nt{{PLURAL:$1|â pàggina innicata di sèquitu, supra la quala|ê pàggini innicati di sèquitu, supra li quali}} hà statu attivata la prutezzioni ricursiva. È pussìbbili mudificari lu liveddu di prutezzioni di sta pàggina ma lu liveddu di prutezzioni arresta chiddu difinitu dâ prutezzioni ricursiva, siddu la stissa nun veni canciata.",
- "protect-default": "Auturizza tutti l'utenti",
- "protect-fallback": "Richiedi lu pirmissu \"$1\"",
- "protect-level-autoconfirmed": "Blocca l'utenti nun riggistrati",
- "protect-level-sysop": "Sulu li amministratura",
- "protect-summary-cascade": "ricursiva",
- "protect-expiring": "scadi a li $1 (UTC)",
- "protect-expiry-indefinite": "senza fini",
- "protect-cascade": "Prutezzioni ricursiva (pruteggi tutti li pàggini nclusi nta chista).",
- "protect-cantedit": "Nun è possibili canciari li livelli di prutizzioni pi la pàggina n quantu nun si disponi dî pirmessi necissari pi canciari la pàggina stissa.",
- "protect-othertime": "Durata non 'n alencu:",
- "protect-othertime-op": "durata non 'n alencu",
- "protect-existing-expiry": "Scadenza attuali: $2, $3",
- "protect-otherreason": "Àustri mutivi/dittagghi:",
- "protect-otherreason-op": "àutri mutivi/dittagghi",
- "protect-dropdown": "*Mutivi cumuni di prutizzioni\n** Vannalìsimi fatti cchiossai di na vota\n** Nzirimenti di spam fatti cchiossai di na vota\n** Edit war\n** Pàggina usata assai",
+ "protect_expiry_invalid": "L'ura di scadenza nun è vàlida.",
+ "protect_expiry_old": "L'ura di scadenza già havi passatu.",
+ "protect-unchain-permissions": "Sblocca autri opzioni di prutizzioni",
+ "protect-text": "Cca poi a' vìdiri e canciari lu liveddu di prutizzioni dâ pàggina <strong>$1</strong>.",
+ "protect-locked-blocked": "Nun si ponnu canciari li livedda di prutizzioni quannu unu è bluccatu.\nCca cci su' li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
+ "protect-locked-dblock": "Nun si ponnu canciari li livedda di prutizzioni picchì cc'è attivatu un bloccu dâ basi di dati.\nCca cci su' li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
+ "protect-locked-access": "Lu to cuntu nun havi lu pirmissu di canciari li livedda di prutizzioni.\nCca cci su' li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
+ "protect-cascadeon": "Com'ad ora sta pàggina è prutetta picchi' veni nclusa {{PLURAL:$1|ntâ pàggina innicata di sèquitu, supra â quali|ntê pàggini innicati di sèquitu, supra ê quali}} è attivata la prutizzioni a' cascata.\nI canciamenti fatti ô liveddu di prutizzioni di sta pàggina nun vannu a' canciari la prutizzioni a' cascata.",
+ "protect-default": "Cunsenti a' tutti l'utenti",
+ "protect-fallback": "Cunsenti sulu a' l'utenti cû pirmissu \"$1\"",
+ "protect-level-autoconfirmed": "Cunsenti sulu a' l'utenti autu-cunfirmati",
+ "protect-level-sysop": "Cunsenti sulu a' l'amministratura",
+ "protect-summary-cascade": "a' cascata",
+ "protect-expiring": "scadi lu $1 (UTC)",
+ "protect-expiring-local": "scadi lu $1",
+ "protect-expiry-indefinite": "a' tempu nditirminatu",
+ "protect-cascade": "Pruteggi li pàggini nclusi nta chista (prutizzioni a' cascata)",
+ "protect-cantedit": "Nun poi canciari li livedda di prutizzioni di sta pàggina picchì nun hai lu pirmissu di canciàrila.",
+ "protect-othertime": "Autra scadenza:",
+ "protect-othertime-op": "autra scadenza",
+ "protect-existing-expiry": "Scadenza attuali: $3 dû $3",
+ "protect-existing-expiry-infinity": "Scadenza attuali: infinitu",
+ "protect-otherreason": "Autru o ultiriuri mutivu:",
+ "protect-otherreason-op": "Autru mutivu",
+ "protect-dropdown": "*Mutivi cumuni pâ prutizzioni\n** Vannalìsimi ripituti\n** Spam ripitutu\n** Guerra di canciamenti cuntrapruduttiva\n** Pàggina di autu tràficu",
"protect-edit-reasonlist": "Cancia li mutivi pâ prutizzioni",
- "protect-expiry-options": "1 ura:1 hour,1 jornu:1 day,1 simana:1 week,2 simani:2 weeks,1 misi:1 month,3 misi:3 months,6 misi:6 months,1 annu:1 year,nfinitu:infinite",
- "restriction-type": "Pirmissu",
+ "protect-expiry-options": "1 ura:1 hour,1 jornu:1 day,1 simana:1 week,2 simani:2 weeks,1 misi:1 month,3 misi:3 months,6 misi:6 months,1 annu:1 year,infinitu:infinite",
+ "restriction-type": "Pirmissu:",
"restriction-level": "Liveddu di ristrizzioni:",
- "minimum-size": "Dimensioni minima",
- "maximum-size": "Dimensioni massima:",
+ "minimum-size": "Grannizza mìnima",
+ "maximum-size": "Grannizza màssima:",
"pagesize": "(byte)",
- "restriction-edit": "Cancia",
- "restriction-move": "Sposta",
- "restriction-create": "Criazioni",
- "restriction-upload": "Càrica",
+ "restriction-edit": "Canciamentu",
+ "restriction-move": "Spustamentu",
+ "restriction-create": "Criazzioni",
+ "restriction-upload": "Carricamentu",
"restriction-level-sysop": "prutetta",
"restriction-level-autoconfirmed": "semi-prutetta",
"restriction-level-all": "tutti li liveddi",
- "undelete": "Visualizza pàggini cancillati",
+ "undelete": "Talìa li pàggini cancillati",
"undeletepage": "Talìa e ricùpira li pàggini cancillati",
- "undeletepagetitle": "'''Quantu segui è compostu da rivisioni cancillati di [[:$1]]'''.",
+ "undeletepagetitle": "<strong>Quantu segui è cumpostu di virsioni cancillati di [[:$1|$1]]</strong>.",
"viewdeletedpage": "Talìa li pàggini cancillati",
- "undeletepagetext": "{{PLURAL:$1|La pàggina ndicata di sècutu fu scancillata|Li $1 pàggini foru scancillati}}, ma {{PLURAL:$1|è|sunnu}} ancora nti l'archìviu e picciò {{PLURAL:$1|pò èssiri arripigghiata|ponnu èssiri aripigghiati}}. L'archìviu pò èssiri svacantatu piriodicamenti.",
- "undelete-fieldset-title": "Ripigghia rivisioni",
- "undeleteextrahelp": "Pi ricupirari la storia ntera dâ pàggina, fari clic supra '''''Riprìstina''''' senza silizziunari nudda casella. P'effittuari un riprìstinu silittivu, silizziunari li caselli currispunnenti a li rivisioni a ripristinari e fari clic supra '''''Riprìstina'''''. Facennu clic supra '''''Reset''''' vèninu disilizziunati tutti li caselli e svacantatu lu spazziu pi lu cummentu.",
- "undeleterevisions": "{{PLURAL:$1|Na rivisioni|$1 rivisioni}} n archiviu",
- "undeletehistory": "Siddu ricùpiri st'artìculu, tutti li sò rivisioni vèninu ricupirati ntâ cronoluggìa rilativa. Siddu doppu la cancillazzioni na pàggina nova cu lu stissu tìtulu fu criata, li rivisioni ricupirati sunnu nziriti ntâ cronoluggìa e la virsioni attuarmenti online dâ pàggina nun veni canciata.",
- "undeleterevdel": "Lu riprìstinu nun è fattu siddu cancella parziarmenti la virsioni currenti dâ pàggina o dû file. Nta stu casu, è nicissariu livari lu signu di spunta o lu scuramentu dê rivisioni cancillati cchiù ricenti.",
- "undeletehistorynoadmin": "Sta pàggina hà statu cancillata. Lu mutivu dâ cancillazzioni è ammustratu ccà sutta, nzèmmula a li dittagghi di l'utenti c'hà canciatu sta pàggina prima dâ cancillazzioni. Lu testu cuntinutu ntê rivisioni cancillati è dispunìbbili sulu a li amministratura.",
- "undelete-revision": "Rivisioni scancillata di $1, nsiruta lu $4 ê $5 di $3:",
- "undeleterevision-missing": "Rivisioni errata o mancanti. Lu culligamentu è erratu oppuru la rivisioni hà statu già ripristinata o eliminata di l'archiviu.",
- "undelete-nodiff": "Nun s'havi attruvatu na rivisioni pricidenti.",
- "undeletebtn": "Riprìstina!",
- "undeletelink": "riprìstina",
+ "undeletepagetext": "{{PLURAL:$1|La siguenti pàggina fu' cancillata|Li siguenti $1 pàggini foru cancillati}}, però {{PLURAL:$1|è|sunnu}} ancora nta l'archiviu e pi' chistu si {{PLURAL:$1|po|ponnu}} ancora ricupirari.\nPiriudicamenti l'archìviu po' vèniri svacantatu.",
+ "undelete-fieldset-title": "Ricùpira virsioni",
+ "undeleteextrahelp": "Pi' ricupirari la storia sana dâ pàggina, cliccari <strong><em>{{int:undeletebtn}}</em></strong> senza scegghîri nudda casedda.\nPi' fari nu ricùpiru silittivu, scegghîri li caseddi currispunnenti ê virsioni di ripigghiari, e cliccari <strong><em>{{int:undeletebtn}}</em></strong>.",
+ "undeleterevisions": "$1 {{PLURAL:$1|virsioni|virsioni}} nta l'archiviu",
+ "undeletehistory": "Siddu ricùpiri sta pàggina, tutti li so virsioni vèninu ricupirati ntâ crunuluggìa.\nSiddu na pàggina nova havi statu criata cû stissu tìtulu di chidda di ricupirari doppu dâ so cancillazzioni, li virsioni ricupirati vannu a' finiri ntâ crunuluggìa passata.",
+ "undeleterevdel": "Lu ricùpiru nun veni fattu siddu pròvuca la cancillazzioni parziali dâ virsioni currenti dâ pàggina o dû file.\nNta stu casu, hai a' livari lu signu di spunta o l'ammucciamentu dâ virsioni cancillata cchiu' ricenti.",
+ "undeletehistorynoadmin": "Sta pàggina fu' cancillata.\nLu mutivu dâ cancillazzioni è ammustratu ccà sutta, nzèmmula ê dittagghî di l'utenti ca canciaru sta pàggina prima dâ so cancillazzioni.\nLu testu cuntinutu ntê virsioni cancillati è dispunìbbili sulu a' l'amministratura.",
+ "undelete-revision": "Virsioni cancillata di $1 (dû $4 ê $5) di $3:",
+ "undeleterevision-missing": "Virsioni nun vàlida o mancanti.\nPo' èssiri chi' hai un culligamentu sbagghiatu, o puru la virsioni hâ statu già ricupirata o livata di l'archiviu.",
+ "undelete-nodiff": "Nun fu attruvata nudda virsioni passata.",
+ "undeletebtn": "Ricùpira",
+ "undeletelink": "talìa/ricùpira",
"undeleteviewlink": "talìa",
- "undeleteinvert": "Scancia la silizzioni",
- "undeletecomment": "Cummentu:",
- "undeletedrevisions": "$1 rivisioni ricupirat{{PLURAL:$1|a|i}}",
- "undeletedrevisions-files": "{{PLURAL:$1|na rivisioni|$1 rivisioni}} e {{PLURAL:$2|nu file ricupiratu|$2 file ricupirati}}",
- "undeletedfiles": "{{PLURAL:$1|un file ricupiratu|$1 file ricupirati}}",
- "cannotundelete": "Lu ricùpiru nun è arrinisciutu: quarcunu àutru putissi aviri già ricupiratu la pàggina.",
- "undeletedpage": "'''La pàggina $1 hà statu ricupirata''' Cunzurta lu [[Special:Log/delete|log dî cancillazzioni]] pi vìdiri li cancillazzioni e li ricùpiri cchiù ricenti.",
- "undelete-header": "Vidi lu [[Special:Log/delete|log dî cancillazzioni]] pi li pàggini cancillati di ricenti.",
+ "undeleteinvert": "Inverti la silizzioni",
+ "undeletecomment": "Mutivu:",
+ "undeletedrevisions": "$1 {{PLURAL:$1|virsioni ricupirata|virsioni ricupirati}}",
+ "undeletedrevisions-files": "$1 {{PLURAL:$1|virsioni ricupirata|virsioni ricupirati}} e $2 {{PLURAL:$2|file ricupiratu|file ricupirati}}",
+ "undeletedfiles": "$1 {{PLURAL:$1|file ricupiratu|file ricupirati}}",
+ "cannotundelete": "L'annullamentu dâ cancillazzioni nun riniscìu:\n$1",
+ "undeletedpage": "<strong>La pàggina $1 fu' ricupirata</strong>\n\nCunzulta lu [[Special:Log/delete|riggistru dî cancillazzioni]] pi' vìdiri li cancillazzioni e li ricùpiri cchiu' ricenti.",
+ "undelete-header": "Talìa lu [[Special:Log/delete|riggistru dî cancillazzioni]] pî pàggini cancillati di ricenti.",
+ "undelete-search-title": "Cerca li pàggini cancillati",
"undelete-search-box": "Cerca li pàggini cancillati",
- "undelete-search-prefix": "Ammustra li pàggini lu cui tìtulu accumincia cu:",
+ "undelete-search-prefix": "Ammustra li pàggini unni lu tìtulu accumènza cu':",
"undelete-search-submit": "Cerca",
- "undelete-no-results": "Nuddu risurtatu attruvatu nta l'archìviu dî pàggini scancillati.",
- "undelete-filename-mismatch": "Mpussibbili annullari la cancillazzioni dâ rivisioni dô file cû timestamp $1: nomu file nun currispunnenti.",
- "undelete-bad-store-key": "Mpussibile annullari la cancillazzioni dâ rivisioni dû file cû timestamp $1: file nun dispunibbili prima dâ cancillazzioni.",
- "undelete-cleanup-error": "Erruri ntâ cancillazzioni dû file d'archiviu nun usatu \"$1\".",
- "undelete-missing-filearchive": "Mpussibbili ripristinari l'ID $1 de l'archiviu file picchì nun è ntô databbasi. Pò èssiri già statu ripristinatu.",
- "undelete-error-short": "Erruri ntô ripristinu dû file: $1",
+ "undelete-no-results": "Nudda pàggina currispunnentu fu' attruvata nta l'archiviu dî pàggini cancillati.",
+ "undelete-filename-mismatch": "Nun si po' annullari la cancillazzioni dâ virsioni dû file cu' data e ura $1: Nomu di file nun currispunnenti.",
+ "undelete-bad-store-key": "Nun si po' annullari la cancillazzioni dâ virsioni dû file cu' data e ura $1: Lu file mancava avanti dâ cancillazzioni.",
+ "undelete-cleanup-error": "Erruri ntâ cancillazzioni dû file d'archiviu nun adupiratu \"$1\".",
+ "undelete-missing-filearchive": "Nun si po' ricupirari l'ID $1 di l'archiviu dî file picchì nun è ntâ basi di dati. Po' già avìri statu ricupiratu.",
+ "undelete-error": "Erruri nta l'annullamentu dâ cancillazzioni dâ pàggina",
+ "undelete-error-short": "Erruri nta l'annullamentu dâ cancillazzioni dû file: $1",
"undelete-error-long": "Si virificaru erruri ntô tentativu di annullari la cancillazzioni dô file:\n\n$1",
- "undelete-show-file-confirm": "Si sicuru di vuliri taliari na rivisioni dû file scancillatu \"<nowiki>$1</nowiki>\" di $2 a $3?",
+ "undelete-show-file-confirm": "Si' sicuru chi' voi talìari la virsioni cancillata dû file \"<nowiki>$1</nowiki>\" dû $2 ê $3?",
"undelete-show-file-submit": "Si",
- "namespace": "Tipu di pàggina:",
- "invert": "scancia la silizzioni",
+ "namespace": "Namespace:",
+ "invert": "Inverti la silizzioni",
+ "tooltip-invert": "Scègghî sta casedda p'ammucciari li canciamenti chi' su' fatti a' pàggini dû namespace silizzunatu (e macari dû so namespace assuciatu, si' la casedda rilativa è scigghiuta)",
"namespace_association": "Namespace assuciatu",
+ "tooltip-namespace_association": "Scègghî sta casedda pi' nclùdiri macari u namespace di discussioni o principali assuciatu ô namespace silizzunatu",
"blanknamespace": "(Principali)",
- "contributions": "Cuntribbuti {{GENDER:$1|utenti}}",
- "contributions-title": "Cuntribbuti di $1",
- "mycontris": "Li mè cuntribbuti",
- "contribsub2": "Pi $1 ($2)",
- "nocontribs": "Secunnu sti criteri nun ci sunnu canci o cuntribbuti.",
+ "contributions": "Cuntribbuta di l'{{GENDER:$1|utenti}}",
+ "contributions-title": "Cuntribbuta di l'utenti $1",
+ "mycontris": "Li me cuntribbuta",
+ "contribsub2": "Di {{GENDER:$3|$1}} ($2)",
+ "contributions-userdoesnotexist": "Lu cuntu utenti \"$1\" nun è riggistratu.",
+ "nocontribs": "Nuddu canciamentu fu' truvatu chi' currispunni a' sti criterî.",
"uctop": "(attuali)",
- "month": "A pàrtiri dô mese (e pricidenti):",
- "year": "A pàrtiri di l'annu (e pricidenti):",
- "sp-contributions-newbies": "Ammustra sulu li cuntribbuti di l'utenti novi",
- "sp-contributions-newbies-sub": "Pi li utenti novi",
- "sp-contributions-newbies-title": "Cuntribbuti di l'utenti novi",
- "sp-contributions-blocklog": "log dî blocchi",
- "sp-contributions-deleted": "cuntribbuti utenti scancillati",
+ "month": "A' pàrtiri dû misi (e pricidenti):",
+ "year": "A' pàrtiri di l'annu (e pricidenti):",
+ "sp-contributions-newbies": "Ammustra sulu li cuntribbuta di l'utenti novi",
+ "sp-contributions-newbies-sub": "Di l'utenti novi",
+ "sp-contributions-newbies-title": "Cuntribbuta di l'utenti novi",
+ "sp-contributions-blocklog": "riggistru dî blocchi",
+ "sp-contributions-suppresslog": "cuntribbuta suppressi di l'utenti",
+ "sp-contributions-deleted": "cuntribbuta cancillati di l'utenti",
"sp-contributions-uploads": "file carricati",
- "sp-contributions-logs": "riggistri",
+ "sp-contributions-logs": "riggistra",
"sp-contributions-talk": "discussioni",
- "sp-contributions-userrights": "gistioni dî dritti utenti",
+ "sp-contributions-userrights": "gistioni dî dritti di l'utenti",
+ "sp-contributions-blocked-notice": "St'utenti pi' com'ora è bluccatu.\nComu rifirimentu ccassutta cc'è l'ùltima vuci dû riggistru dî blocchi:",
+ "sp-contributions-blocked-notice-anon": "Stu nnirizzu IP pi' com'ora è bluccatu.\nComu rifirimentu ccassutta cc'è l'ùltima vuci dû riggistru dî blocchi:",
"sp-contributions-search": "Ricerca cuntribbuti",
"sp-contributions-username": "Nnirizzu IP o nomu utenti:",
- "sp-contributions-toponly": "Ammuccia sulu li cuntribbuta ca sunnu l'ùrtimi rivisioni pâ pàggina",
+ "sp-contributions-toponly": "Ammustra sulu li canciamenti ca sunnu l'ùrtimi virsioni pâ pàggina",
+ "sp-contributions-newonly": "Ammustra sulu li canciamenti ca sunnu criazzioni di pàggini novi",
"sp-contributions-submit": "Risciduta",
- "whatlinkshere": "Chi punta ccà",
+ "whatlinkshere": "Chi' punta cca",
"whatlinkshere-title": "Pàggini ca pùntanu a \"$1\"",
"whatlinkshere-page": "Pàggina:",
"linkshere": "Sti pàggini hannu nu liami a '''[[:$1]]''':",
"nolinkshere": "Nudda pàggina havi nu liami a '''[[:$1]]'''.",
"nolinkshere-ns": "Nun ci sugnu pàggini chi puntano a '''[[:$1]]''' ntô namespace silizziunatu.",
"isredirect": "pàggina di rinnirizzamentu",
- "istemplate": "nchiusioni",
- "isimage": "liami dû file",
+ "istemplate": "trasclusioni",
+ "isimage": "culligamentu ô file",
"whatlinkshere-prev": "{{PLURAL:$1|pricidenti|pricidenti $1}}",
"whatlinkshere-next": "{{PLURAL:$1|succissivu|succissivi $1}}",
"whatlinkshere-links": "← liami",
- "whatlinkshere-hideredirs": "$1 redirect",
- "whatlinkshere-hidetrans": "$1 nclusioni",
- "whatlinkshere-hidelinks": "$1 link",
- "whatlinkshere-hideimages": "$1 liami di files",
+ "whatlinkshere-hideredirs": "$1 li rimanni",
+ "whatlinkshere-hidetrans": "$1 li trasclusioni",
+ "whatlinkshere-hidelinks": "$1 li culligamenti",
+ "whatlinkshere-hideimages": "$1 li culligamenti a' file",
"whatlinkshere-filters": "Filtri",
- "blockip": "Blocca l'utenti",
- "blockip-legend": "Blocca l'utenti",
+ "autoblockid": "Bloccu autumàticu #$1",
+ "block": "Bluccari a' n'utenti",
+ "unblock": "Sbluccari a' n'utenti",
+ "blockip": "Blocca a' {{GENDER:$1|stu utenti|sta utenti}}",
+ "blockip-legend": "Blocca a' l'utenti",
"blockiptext": "Usa lu mòdulu cassutta pi bluccari la pussibbilità di scrìviri pi n'utenti o pi nu ndirizzu IP spicìficu. Chistu s'havi a fari sulu pi privèniri lu vannalismu e secunnu la [[{{MediaWiki:Policy-url}}|pulìtica di {{SITENAME}}]]. Scrivi na raggiùni valida ccà sutta (pi asempiu, cita li pàggini chi foru vannalizzati).",
- "ipaddressorusername": "Ndirizzu IP o nomu utenti:",
+ "ipaddressorusername": "Nnirizzu IP o nomu utenti:",
"ipbexpiry": "Durata dû bloccu:",
"ipbreason": "Mutivu:",
"ipbreason-dropdown": "*Mutivi cchiù cumuni pî blocchi\n** Nzerimentu di nformazziuni falsi\n** Cancillazzioni di cuntinuti dê pàggini\n** Liami prumozziunalu a siti sterni\n** Nzserimentu di cuntinuti privi di sensu\n** Cumportamenti ntimidatori o molestie\n** Usu ndebitu di cchiù cunti\n** Nomu utenti nun accittabbili",
- "ipbcreateaccount": "Mpidisci la criazzioni di àutri account",
- "ipbemailban": "Mpedisci a l'utenti l'inviu di email",
- "ipbenableautoblock": "Blocca automaticamenti l'ùrtimu ndirizzu IP usatu di l'utenti e li succissivi cu cui vèninu tintati canciamenti",
- "ipbsubmit": "Blocca st'utenti",
- "ipbother": "Durata nun n alencu",
- "ipboptions": "2 uri:2 hours,1 jornu:1 day,3 jorna:3 days,1 simana:1 week,2 simani:2 weeks,1 misi:1 month,3 misi:3 months,6 misi:6 months,1 annu:1 year,nfinitu:infinite",
- "ipbhidename": "Ammuccia lu nomu utenti dê canciamenti e dê listi",
- "ipbwatchuser": "Talìa li pàggini e li discussioni utenti di st'utenti",
- "ipb-disableusertalk": "Nun pirmettiri a stu utilizzaturi di canciari la sò pàggina di discussioni na mentri ca è bluccatu",
- "ipb-change-block": "Ri-blocca l'utilizzaturi cu sti mpustazzioni",
- "badipaddress": "Ndirizzu IP nun vàlidu.",
- "blockipsuccesssub": "Bloccu esiquitu",
- "blockipsuccesstext": "[[Special:Contributions/$1|$1]] fu bluccatu.<br />\nPi maggiuri nfurmazzioni, talìa la [[Special:BlockList|lista di l'IP bluccati]] .",
- "ipb-edit-dropdown": "Mutivi pô bloccu",
- "ipb-unblock-addr": "Sblocca $1",
- "ipb-unblock": "Sblocca n'utenti o nu ndirizzu IP",
- "ipb-blocklist": "Alenca li blocchi attivi",
- "ipb-blocklist-contribs": "Cuntribbuti di $1",
- "unblockip": "Sblocca ndirizzu IP",
- "unblockiptext": "Usari lu mòdulu suttastanti pi ristituiri l'accessu n scrittura a un utenti o ndirizzu IP bluccatu.",
+ "ipb-hardblock": "Mpidisci a' l'utenti trasuti di fari canciamenti di stu nnirizzu IP",
+ "ipbcreateaccount": "Mpidisci la criazzioni di cunti",
+ "ipbemailban": "Mpidisci a' l'utenti di mannari posta elittrònica",
+ "ipbenableautoblock": "Blocca autumaticamenti l'ùltimu nnirizzu IP adupiratu di st'utenti, e li succissivi d'unni prova a' fari canciamenti",
+ "ipbsubmit": "Blocca a' st'utenti",
+ "ipbother": "Autra scadenza:",
+ "ipboptions": "2 uri:2 hours,1 jornu:1 day,3 jorna:3 days,1 simana:1 week,2 simani:2 weeks,1 misi:1 month,3 misi:3 months,6 misi:6 months,1 annu:1 year,infinitu:infinite",
+ "ipbhidename": "Ammuccia lu nomu utenti ntê canciamenti e ntê listi",
+ "ipbwatchuser": "Talìa li pàggini e li discussioni di st'utenti",
+ "ipb-disableusertalk": "Mpidisci a' st'utenti di canciari la sò pàggina di discussioni nta mentri ca è bluccatu",
+ "ipb-change-block": "Blocca di novu l'utenti cu' sti mpustazzioni",
+ "ipb-confirm": "Cunfirma lu bloccu",
+ "badipaddress": "Nnirizzu IP nun vàlidu",
+ "blockipsuccesssub": "Bloccu rinisciutu",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] fu' bluccatu.<br />\nTalìa la [[Special:BlockList|lista dî blocchi]] pi' rivìdiri li blocchi.",
+ "ipb-blockingself": "Stai bluccannu a' tia stissu! Si' sicuru chi' voi fari sta cosa?",
+ "ipb-confirmhideuser": "Stai bluccannu n'utenti chi' havi l'opzioni \"ammuccia utenti\" attivata. A' sta manera u nomu di st'utenti veni supprimutu nta tutti i listi e tutti i riggìstri. Si' sicuru chi' voi fari sta cosa?",
+ "ipb-confirmaction": "Si' si' pi' davera sicuru chi' voi fari sta cosa, scegghî a casedda \"{{int:ipb-confirm}}\" ccassutta.",
+ "ipb-edit-dropdown": "Cancia li mutivi dû bloccu",
+ "ipb-unblock-addr": "Sblocca a' $1",
+ "ipb-unblock": "Sblocca a' n'utenti o nu nnirizzu IP",
+ "ipb-blocklist": "Talìa li blocchi in viguri",
+ "ipb-blocklist-contribs": "Cuntribbuta di {{GENDER:$1|$1}}",
+ "unblockip": "Sblocca a' l'utenti",
+ "unblockiptext": "Adupirari lu mòdulu suttastanti pi' ristituiri l'accessu in scrittura a' nu nnirizzu IP o nomu utenti ca hâ statu bluccatu.",
"ipusubmit": "Leva stu bloccu",
- "unblocked": "L'utenti [[User:$1|$1]] hà statu sbluccatu",
- "unblocked-id": "Lu bloccu $1 hà statu cacciatu",
- "ipblocklist": "Utiloizzatura bluccati",
- "ipblocklist-legend": "Atrova n'utenti bluccatu",
+ "unblocked": "L'utenti [[User:$1|$1]] fu sbluccatu.",
+ "unblocked-range": "$1 fu sbluccatu.",
+ "unblocked-id": "Lu bloccu $1 fu livatu.",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] fu sbluccatu.",
+ "blocklist": "Utenti bluccati",
+ "ipblocklist": "Utenti bluccati",
+ "ipblocklist-legend": "Trova n'utenti bluccatu",
+ "blocklist-userblocks": "Ammuccia li blocchi di cunti",
+ "blocklist-tempblocks": "Ammuccia li blocchi timpuranii",
+ "blocklist-addressblocks": "Ammuccia li blocchi di IP singuli",
+ "blocklist-rangeblocks": "Ammuccia li blocchi di ntirvalli di IP",
+ "blocklist-timestamp": "Data e ura",
+ "blocklist-target": "Oggettu",
+ "blocklist-expiry": "Scadenza",
+ "blocklist-by": "Amministraturi chi' bluccau",
+ "blocklist-params": "Paràmitri dû bloccu",
+ "blocklist-reason": "Mutivu",
"ipblocklist-submit": "Risciduta",
- "infiniteblock": "nfinitu",
+ "ipblocklist-localblock": "Bloccu lucali",
+ "ipblocklist-otherblocks": "{{PLURAL:$1|Autru bloccu|Autri blocchi}}",
+ "infiniteblock": "infinitu",
"expiringblock": "scadi lu $1 ê $2",
"anononlyblock": "sulu anònimi",
- "noautoblockblock": "bloccu automàticu disabbilitatu",
- "createaccountblock": "criazzioni account bluccata",
- "emailblock": "email bluccati",
- "blocklist-nousertalk": "nun pò mudificari la sò pròpia pàggina di discussioni",
+ "noautoblockblock": "bloccu autumàticu disattivatu",
+ "createaccountblock": "criazzioni di cunti bluccata",
+ "emailblock": "posta elittrònica bluccata",
+ "blocklist-nousertalk": "nun po' canciari la so stissa pàggina di discussioni",
"ipblocklist-empty": "L'alencu dî blocchi è vacanti.",
"ipblocklist-no-results": "Lu nnirizzu IP o nomu utenti richiestu nun è bluccatu.",
"blocklink": "blocca",
"unblocklink": "sblocca",
"change-blocklink": "cancia bloccu",
- "contribslink": "cuntribbuti",
- "autoblocker": "Bluccatu automaticamenti pirchì lu ndirizzu IP è cundivisu cu l'utenti \"[[User:$1|$1]]\". Lu bloccu di l'utenti $1 fu mpostu pi lu siquenti mutivu: \"'''$2'''\".",
- "blocklogpage": "Blocchi",
+ "contribslink": "cuntribbuta",
+ "emaillink": "manna posta elittrònica",
+ "autoblocker": "Bluccatu autumaticamenti pirchì lu to nnirizzu IP havi statu adupiratu di picca tempu di l'utenti \"[[User:$1|$1]]\".\nLu mutivu datu pû bloccu di $1 è \"$2\"",
+ "blocklogpage": "Riggistru dî blocchi",
+ "blocklog-showlog": "St'utenti havi statu bluccatu ntô passatu.\nComu rifirimentu ccassutta cc'è lu riggìstru dî blocchi:",
+ "blocklog-showsuppresslog": "St'utenti havi statu bluccatu e ammucciatu ntô passatu.\nComu rifirimentu ccassutta cc'è lu riggistru dî supprissioni:",
"blocklogentry": "hà bluccatu [[$1]]; scadenza $2 $3",
"reblock-logentry": "Canciau li mpustazzioni dû bloccu pi [[$1]] cu na scadenza di $2 $3",
- "blocklogtext": "Chistu è l'alencu di l'azzioni di bloccu e sbloccu utenti. Li ndirizzi IP bluccati automaticamenti nun sunu alincati. Cunzurtari l'[[Special:BlockList|alencu IP bluccati]] pi l'alencu dî ndirizzi e noma utenti lu cui bloccu è opirativu.",
- "unblocklogentry": "hà sbluccatu \"$1\"",
+ "blocklogtext": "Chistu è l'alencu di l'azzioni di bloccu e sbloccu di l'utenti.\nLi nnirizzi IP bluccati autumaticamenti nun sunnu alincati.\nCunzurtari l'[[Special:BlockList|alencu dî blocchi]] pi' vìdiri i furbanni e' i blocchi chi' sunnu 'n viguri pi' com'ora.",
+ "unblocklogentry": "sbluccau a' \"$1\"",
"block-log-flags-anononly": "sulu utenti anònimi",
"block-log-flags-nocreate": "criazzioni account bluccata",
"block-log-flags-noautoblock": "bloccu automàticu disattivatu",
@@ -1564,42 +2007,54 @@
"range_block_disabled": "La pussibbilitati di bluccari ntervalli di ndirizzi IP è disattiva a lu mumentu.",
"ipb_expiry_invalid": "Durata o scadenza dû bloccu nun vàlida.",
"ipb_expiry_temp": "Li blocchi dê nomi utenti ammucciati avìssiru èssiri nfiniti",
- "ipb_hide_invalid": "Impussibili cancillari l'account; putissi aviri troppi canciamenti.",
+ "ipb_hide_invalid": "Nun si po' supprìmiri stu cuntu: havi cchiu' ssai di {{PLURAL:$1|nu canciamentu|$1 canciamenti}}.",
"ipb_already_blocked": "L'utenti \"$1\" è già bluccatu",
"ipb-needreblock": "$1 è già bluccatu. Vòi caciari li mpustazzioni?",
+ "ipb-otherblocks-header": "{{PLURAL:$1|Autru bloccu|Autri blocchi}}",
+ "unblock-hideuser": "Nun poi sbluccari st'utenti, picchì u so nomu utenti fu' ammucciatu.",
"ipb_cant_unblock": "Erruri: Mpussìbbili attruvari lu bloccu cu ID $1. Putissi aviri già statu sbluccatu.",
"ipb_blocked_as_range": "Sbagghiu: Lu ndirizzu IP $1 nun è suggettu a bloccu ndividuali e non pò èssiri sbloccatu. Lu bloccu è attivu mmeci a liveddu dû ntirvallu $2, ca pò èssiri sbluccatu.",
"ip_range_invalid": "Ntervallu di ndirizzi IP nun vàlidu.",
+ "ip_range_toolarge": "I blocchi di ntirvalli IP cchiu' granni di /$1 nun sunnu cunsintuti.",
"proxyblocker": "Blocca proxy",
"proxyblockreason": "Lu tò ndirizzu IP hà statu bluccatu pirchì è un open proxy. Pi favuri cuntatta lu tò furnituri d'accessu a Internet o lu supportu tècnicu e nfòrmali di stu gravi prubbrema di sicurizza.",
"sorbsreason": "Lu tò ndirizzu IP è alincatu comu proxy apertu ntâ lista DNSBL.",
"sorbs_create_account_reason": "Lu tò ndirizzu IP è alincatu comu open proxy ntâ DNSBL. Nun poi criari un utenti.",
+ "xffblockreason": "Nu nnirizzu IP chi' si trova nta na ntistazzioni X-Forwarded-For, o a toi o dûn server proxy chi' stai adupirannu, fu' bluccatu. U mutivu dû bloccu origginali era: $1",
+ "cant-see-hidden-user": "L'utenti chi' stai pruvannu a' bluccari già fu' bluccatu e ammucciatu.\nComu chi' tu nun hai u drittu \"hideuser\", nun poi ne' vìdiri ne' canciari u bloccu di st'utenti.",
+ "ipbblocked": "Nun poi bluccari o sbluccari a' autri utenti picchì tu stissu si' bluccatu.",
+ "ipbnounblockself": "Nun hai u pirmissu di sbluccari a' tia stissu.",
"lockdb": "Blocca lu database",
"unlockdb": "Sblocca lu database",
- "lockdbtext": "Lu bloccu dû database cumporta la nterruzzioni, pi tutti l'utenti, dâ pussibbilitati di mudificari li pàggini o di criàrinni di novi, di canciari li prifirenzi e mudificari li listi di l'ossirvati spiciali, e n ginirali di tutti l'upirazzioni ca richièdinu canciamenti a lu database. Pi favuri, cunferma ca chistu currispunni effittivamenti a l'azzioni di tia richiesta e ca a lu tèrmini dâ manutinzzioni pruvidi a lu sbloccu dû database.",
- "unlockdbtext": "Lu sbloccu dû database cunzenti di novu a tutti li utenti di canciari li pàggini o di criàrinni di novi, di canciari li prifirenzi e canciari li listi di l'ossirvati spiciali, e n ginirali di còmpiri tutti li upirazzioni ca richièdinu canciamenti a lu database. Pi curtisìa, cunferma ca chistu currispunni effittivamenti a l'azzioni di tìa addumannata.",
+ "lockdbtext": "Lu bloccu dû database cumporta la suspinsioni pi' tutti l'utenti dâ pussibbilitati di canciari li pàggini, mpustari li so prifirenzi, mudificari li so listi taliati, e 'n ginirali di cùmpiri tutti l'upirazzioni ca richièdinu canciamenti a lu database.\nPi' favuri cunfirma ca chistu è chiddu chi' hai ntinzioni di fari, e ca a lu tèrmini dâ manutinzzioni pruvidi a lu sbloccu dû database.",
+ "unlockdbtext": "Lu sbloccu dû database cunzenti di novu a tutti l'utenti di canciari li pàggini, mpustari li so prifirenzi, mudificari li so listi taliati, e 'n ginirali di cùmpiri tutti l'upirazzioni ca richièdinu canciamenti a lu database.\nPi' favuri cunfirma ca chistu è chiddu chi' hai ntinzioni di fari.",
"lockconfirm": "Sì, ntennu effittivamenti bluccari lu database.",
"unlockconfirm": "Sì, effittivamenti ntennu, sutta la mè rispunzabbilitati, sbluccari lu database.",
"lockbtn": "Blocca lu database",
"unlockbtn": "Sblocca lu database",
- "locknoconfirm": "Nun hà statu spuntata la casillina di cunferma.",
+ "locknoconfirm": "Nun scigghîsti a casedda di cunfirma.",
"lockdbsuccesssub": "Bloccu dû database esiquitu",
"unlockdbsuccesssub": "Sbloccu dû database esiquitu",
"lockdbsuccesstext": "Lu database hà statu bluccatu.\n<br />Arricorda di [[Special:UnlockDB|rimòviri lu bloccu]] doppu aviri accabbatu l'upirazzioni di manutinzioni.",
"unlockdbsuccesstext": "Lu database hà statu sbluccatu.",
"lockfilenotwritable": "Mpussìbbili scrìviri supra lu file di ''lock'' dû database. L'accessu n scrittura a tali file di parti dû server web è nicissariu pi bluccari e sbluccari lu database.",
"databasenotlocked": "Lu database nun è bluccatu.",
+ "lockedbyandtime": "(di {{GENDER:$1|$1}} u $2 ê $3)",
"move-page": "Spustamentu di $1",
"move-page-legend": "Sposta la pàggina",
- "movepagetext": "Usannu lu mòdulu ccà sutta vui canciati lu nomu dâ pàggina, e spustati tutta la sò storia versu la pàggina nova. Lu tìtulu vecchiu addiventa na pàggina di ''redirect'' versu lu tìtulu novu.\nLi liami â pàggina vecchia nun càncianu.\nAssicuràtivi ca lu spustamentu nun havi criatu [[Special:DoubleRedirects|redirect duppi]] o [[Special:BrokenRedirects|redirect rumputi]]. Vui siti rispunzàbbili dî liami chi avìssiru a puntari â pàggina giusta.\n\nLa pàggina '''nun''' è spustata siddu cc'è già na pàggina cu lu tìtulu novu, tranni chi la pàggina 'n chistioni è vacanti o è na pàggina di ''redirect'' e nun havi n'archiviu di canciamenti.\nChistu signìfica chi vui putiti rinuminari la pàggina cu lu nomu vecchiu si aviti sbagghiatu, e chi nun putiti suprascrìviri nta na pàggina chi esisti già.\n\n'''Accura!'''\nChistu pò èssiri nu canciamentu dràsticu pi na pàggina pupulari; aviti a èssiri sicuri di capiri li cunziquenzi prima di cuntinuari.",
+ "movepagetext": "Adupirannu lu mòdulu ccassutta si cancia lu nomu dâ pàggina, spustannu tutta la sò crunuluggìa nta la pàggina nova.\nLu tìtulu vecchiu addiventa nu rimannu versu lu tìtulu novu.\nSi pònnu aggiurnari autumaticamenti i rimanni chi' puntàvunu ô tìtulu origginali.\nMa si' scegghî di nun fàrilu, t'hai a' assicurari ca lu spustamentu nun crea [[Special:DoubleRedirects|rimanni duppî]] o puru [[Special:BrokenRedirects|rimanni rutti]].\nE' to rispunsabbilità ch'i liami cuntìnuunu a' puntari â pàggina bona.\n\nVidi chi' la pàggina <strong>nun veni spustata</strong> siddu cc'è già na pàggina chi havi lu tìtulu novu, tranni siddu la pàggina 'n quistioni è nu rimannu e nun havi crunuluggìa di canciamenti passati.\nChistu voli diri chi' si po' canciari n'autra vota u nomu di la pàggina a' chiddu ch'avìa prima siddu si fa' nu sbagghiu, e chi nun si po' suprascrìviri na pàggina chi già esisti.\n\n<strong>Accura!</strong>\nChistu po' èssiri nu canciamentu dràsticu pi na pàggina friquintata; aviti a' èssiri sicuri di capiri li cunziquenzi prima di cuntinuari.",
"movepagetext-noredirectfixer": "Usannu lu mòdulu ccà sutta vui canciati lu nomu dâ pàggina, e spustati tutta la sò storia versu la pàggina nova. Lu tìtulu vecchiu addiventa na pàggina di rinnirizzamentu versu lu tìtulu novu. \nAssicuràtivi ca lu spustamentu nun criau [[Special:DoubleRedirects|redirect duppi]] o [[Special:BrokenRedirects|redirect rumputi]]. Vui siti rispunzàbbili dî liami chi avìssiru a puntari â pàggina giusta.\n\nLa pàggina '''nun''' è spustata siddu cc'è già na pàggina cu lu tìtulu novu, tranni chi la pàggina 'n chistioni è vacanti o è na pàggina di ''redirect'' e nun havi n'archiviu di canciamenti.\nChistu signìfica chi vui putiti rinuminari la pàggina cu lu nomu vecchiu si aviti sbagghiatu, e chi nun putiti suprascrìviri nta na pàggina chi esisti già.\n\n'''Accura!'''\nChistu pò èssiri nu canciamentu dràsticu pi na pàggina pupulari; aviti a èssiri sicuri di capiri li cunziquenzi prima di cuntinuari.",
- "movepagetalktext": "La pàggina di discussioni assuciata, siddu esisti, veni spustata automaticamenti nzèmmula, '''a menu chi:'''\n*Na pàggina nun-vacanti di discussioni già esisti cu lu nomu novu,\n*Hai disilizziunatu lu quatratu ccà sutta.\n\nNta sti casi, tu hai a spustari o agghiùnciri manuarmenti la pàggina di discussioni.",
+ "movepagetalktext": "La pàggina di discussioni sarravi autumaticamenti spustata cud idda <strong>a' menu chi':</strong>\n*Na pàggina di discussioni nun vacanti già esisti cu lu nomu novu, o puru\n*Nun scegghî la casedda ccassutta.\n\nNta sti casi, si' voi, hâ' spustari o jùnciri la pàggina di discussioni a' manu.",
"movearticle": "Sposta la pàggina",
+ "moveuserpage-warning": "<strong>Accura:</strong> Stai spustannu a pàggina di n'utenti. Hâ' sapìri chi' sulu a pàggina sarravi spustata, l'utenti <em>nun sarravi</em> canciatu di nomu.",
+ "movecategorypage-warning": "<strong>Accura:</strong> Stai spustannu a pàggina di na catigurìa. Hâ' sapìri chi' sulu a pàggina sarravi spustata, i pàggini chi' si tròvunu ntâ catigurìa vecchia <em>nun sarrannu</em> catigurizzati nta chidda nova.",
"movenologintext": "Lu spustamentu dî pàggini è cunzintitu sulu a l'utenti riggistrati c'hannu esiquitu l'[[Special:UserLogin|accessu]] a lu situ.",
"movenotallowed": "Nun hai li pirmessi nicissari a lu spustamentu dê pàggini.",
"movenotallowedfile": "Nun ci su' li pirmessi nicissàrii pi spustari file.",
"cant-move-user-page": "Nun aviti lu pirmissu nicissàriu pi spustari li pàggini utenti.",
"cant-move-to-user-page": "Nun aviti li pirmessi nicessàrii pô spustamentu dâ pàggina supra na pàggina utenti (cu eccizzioni di na suttapàggina utenti).",
+ "cant-move-category-page": "Nun hai u pirmissu di spustari i pàggini dî catigurìi.",
+ "cant-move-to-category-page": "Nun hai u pirmissu di spustari pàggini facènnuli divintari pàggini di catigurìi.",
"newtitle": "Cu lu tìtulu novu di",
"move-watch": "Talìa sta pàggina",
"movepagebtn": "Sposta la pàggina",
@@ -1616,34 +2071,40 @@
"movepage-page-moved": "La pàggina $1 fu spustata a $2.",
"movepage-page-unmoved": "La pàggina $1 nun pò èssiri spustata a $2.",
"movepage-max-pages": "Vinni spustatu lu nùmmuru màssimu di $1 {{PLURAL:$1|pàggina|pàggini}} e non si ponnu cchiù spustari àutri pàggini autumàticamenti.",
- "movelogpage": "Spustamenti",
+ "movelogpage": "Riggistru dî spustamenti",
"movelogpagetext": "Chistu è l'alencu dî pàggini spustati.",
"movesubpage": "{{PLURAL:$1|Suttapàggina|Suttapàggini}}",
"movesubpagetext": "Sta pàggina havi $1 {{PLURAL:$1|suttapàgina ammustrata|suttapàgini ammustrati}} appressu.",
"movenosubpage": "Sta pàggina nun havi suttapàggini.",
"movereason": "Mutivu:",
"revertmove": "riprìstina",
- "delete_and_move": "Scancella e sposta",
+ "delete_and_move": "Cancella e sposta",
"delete_and_move_text": "==Richiesta di cancillazzioni==\n\nLa pàggina di distinazzioni \"[[:$1]]\" asisti già. S'addisìa cancillàrila pi rènniri pussìbbili lu spustamentu?",
"delete_and_move_confirm": "Sì, suvrascrivi la pàggina asistenti",
- "delete_and_move_reason": "Cancillata pi rènniri pussìbbili lu spustamentu",
+ "delete_and_move_reason": "Cancillata pi' fari largu ô spustamentu di \"[[$1]]\"",
"selfmove": "Lu tìtulu di distinazzioni nziritu è agguali a chiddu di pruvinenza; mpossibbili spustari la pàggina su idda stissa.",
"immobile-source-namespace": "Non pòi spustari li pàggini nto namespace \"$1\"",
"immobile-target-namespace": "Nun pòi spustari li pàggini ntô namespace \"$1\"",
"immobile-target-namespace-iw": "L'interwiki link nun è n'ubbiettivu bonu pi spustari la pòggina.",
"immobile-source-page": "Sta pàggina nun pò èssiri spustata.",
"immobile-target-page": "Nun pòi spustari nti stu tìtulu.",
+ "bad-target-model": "A distinazzioni vuluta adòpira nu mudellu di cuntinutu diffirenti. Nun si po' cunvèrtiri dû $1 ô $2.",
"imagenocrossnamespace": "Nun pòi spustari na mmàggini fora dû namespace Mmàggini.",
+ "nonfile-cannot-move-to-file": "Nun si po' spustari ntô namespace file chiddu chi' nun è nu file.",
"imagetypemismatch": "La estensioni nova dû file cun currispunni â sò estensioni riali",
"imageinvalidfilename": "Lu nomu dû file di distinazzioni nun è validu",
"fix-double-redirects": "Aggiorna tutti li redirect chi puntanu ô titulu urigginali",
"move-leave-redirect": "Lassa darreri nu redirect",
- "protectedpagemovewarning": "'''Attenzioni: Sta pàggina è stata bluccata n modu ca sulu l'utentu cu li privileggi di amministraturi ponu spustarla.'''",
- "semiprotectedpagemovewarning": "'''Nota:''' Sta pàggina fu bluccata n modo tali ca solo l'utenti riggistrati ponu spustarla.",
+ "protectedpagemovewarning": "<strong>Accura:</strong> Sta pàggina fu' prutiggiuta a' manera chi' sulu l'utenti cu' privileggi d'amministraturi la ponnu spustari.\nPi' rifirimentu, ccassutta è ripurtata l'ùltima vuci dû riggistru:",
+ "semiprotectedpagemovewarning": "<strong>Nota:</strong> Sta pàggina fu' prutiggiuta a' manera chi' sulu l'utenti riggistrati la ponnu spustari.\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
+ "move-over-sharedrepo": "== U file già esisti ==\n[[:$1]] già esisti ntôn dipòsitu cunnivisu. Spustari nu file nta chistu titulu suprascriviravi u file cunnivisu.",
+ "file-exists-sharedrepo": "U nomu di file scigghiutu già è adupiratu ntôn dipòsitu cunnivisu.\nPi' favuri scegghî n'autru nomu.",
"export": "Esporta pàggini",
"exporttext": "È pussìbbili espurtari lu testu e la cronoluggìa dî canciamenti di na pàggina o d'un gruppu di pàggini n furmatu XML pi mpurtàrili n àutri siti ca utilìzzanu lu software MediaWiki, attraversu la pàggina [[Special:Import|d'importu]].\n\nP'espurtari li pàggini innicari li tìtuli ntâ casella di testu suttastanti, unu pi riga, e spicificari siddu s'addisìa attèniri la virsioni currenti e tutti li virsioni pricidenti, cu li dati dâ cronoluggìa dâ pàggina, oppuru surtantu l'ùrtima virsioni e li dati currispunnenti a l'ùrtimu canciamentu.\n\nNta st'ùrtimu casu si pò macari utilizzari un culligamentu, p'asempiu [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] p'espurtari \"[[{{MediaWiki:Mainpage}}]]\".",
+ "exportall": "Esporta tutti i pàggini",
"exportcuronly": "Ncludi sulu la rivisioni attuali, nun la ntera cronoluggìa",
"exportnohistory": "---- '''Nota:''' l'espurtazzioni dâ ntera cronoluggìa dî pàggini attraversu sta nterfaccia hà stata disattivata pi mutivi ligati a li pristazzioni dû sistema.",
+ "exportlistauthors": "Includi n'elencu cumpletu dî cuntribbuturi p'ognin pàggina",
"export-submit": "Espurtazzioni",
"export-addcattext": "Agghiunci pàggini dâ catigurìa:",
"export-addcat": "Agghiunci",
@@ -1666,72 +2127,98 @@
"allmessages-prefix": "Filtra pi prefissu:",
"allmessages-language": "Lingua:",
"allmessages-filter-submit": "Vai",
+ "allmessages-filter-translate": "Traduci",
"thumbnail-more": "Ngrannisci",
"filemissing": "File mancanti",
"thumbnail_error": "Erruri ntâ criazzioni dâ miniatura: $1",
+ "thumbnail_error_remote": "Messaggiu d'erruri di $1:\n$2",
"djvu_page_error": "Nùmmuru di pàggina DjVu erratu",
"djvu_no_xml": "Mpussibbili òtteniri lu XML pô file DjVu",
+ "thumbnail-temp-create": "Nun fu' pussìbbili criari nu file timpuraniu pâ miniatura",
+ "thumbnail-dest-create": "Nun fu' pussìbbili sarvari a miniatura ntâ distinazzioni",
"thumbnail_invalid_params": "Parametri antiprima nun validi",
+ "thumbnail_toobigimagearea": "U file è cchiu' granni di $1",
"thumbnail_dest_directory": "Mpussibbili criari la directory di distinazzioni",
"thumbnail_image-type": "Tipu di mmàggini nun supputtatu",
"thumbnail_gd-library": "Cunfigurazioni ncumpleta da libreria GD: funzioni $1 mancanti",
"thumbnail_image-missing": "Pari èssiri mancanti lu file: $1",
+ "thumbnail_image-failure-limit": "Cc'hannu statu troppu tintativi ($1 o cchiu' ssai) di ginirari sta miniatura. Pi' favuri prova n'autra vota cchiu' tardu.",
"import": "Mporta pàggini",
- "importinterwiki": "Mpurtazzioni transwiki",
- "import-interwiki-text": "Silizziunari un pruggettu wiki e lu tìtulu dâ pàggina a mpurtari. Li dati di pubbricazzioni e li noma di l'autura dî vari virsioni sunnu sarvati. Tutti l'opirazzioni di mpurtazzioni trans-wiki sunnu riggistrati ntô [[Special:Log/import|log di mpurtazzioni]].",
+ "importinterwiki": "Mpurtazzioni di n'autra wiki",
+ "import-interwiki-text": "Silizziunari na wiki e lu tìtulu di na pàggina a' mpurtari.\nLi dati dî virsioni e li nomi di l'autura sarannu mantinuti.\nTutti li mpurtazzioni di autri wiki vènunu riggistrati ntô [[Special:Log/import|riggistru dî mpurtazzioni]].",
+ "import-interwiki-sourcewiki": "Wiki surgenti:",
+ "import-interwiki-sourcepage": "Pàggina surgenti:",
"import-interwiki-history": "Copia la ntera cronoluggìa di sta pàggina",
"import-interwiki-templates": "Includi tutti li template",
"import-interwiki-submit": "Mporta",
"import-interwiki-namespace": "Trasfirisci li pàggini ntô namespace:",
+ "import-interwiki-rootpage": "Pàggina ràdica di distinazzioni (facultativu):",
"import-upload-filename": "Nomu file:",
"import-comment": "Oggettu:",
- "importtext": "Pi favuri, esporta lu file dâ wiki d'orìggini usannu l'utility Speciale:Export, sàrvalu supra lu tò discu e carrìcalu ccà",
+ "importtext": "Pi favuri, esporta lu file dâ wiki surgenti adupirannu [[Special:Export|a funziunalità d'espurtazzioni]].\nSàrvalu supra a' lu tò computer e carrìcalu ccà.",
"importstart": "Mpurtazzioni dî pàggini n cursu...",
"import-revision-count": "{{PLURAL:$1|na rivisioni mpurtata|$1 rivisioni mpurtati}}",
"importnopages": "Nudda pàggina a mpurtari.",
+ "imported-log-entries": "{{PLURAL:$1|Mpurtata na vuci di riggistru|Mpurtati $1 vuci di riggistru}}.",
"importfailed": "Mpurtazzioni nun arrinisciuta: $1",
"importunknownsource": "Tipu d'orìggini scanusciutu pi la mpurtazzioni",
"importcantopen": "Mpussìbbili grapiri lu file di mpurtazzioni",
"importbadinterwiki": "Culligamentu inter-wiki erratu",
"importsuccess": "Mpurtazzioni arrinisciuta.",
- "importnosources": "Nun hà statu difinita na fonti pi la mpurtazzioni transwiki; la mpurtazzioni diretta dâ cronoluggìa nun è attiva.",
+ "importnosources": "Nun hâ statu difinuta nudda wiki d'unni mpurtari e li carricamenti diretti dâ cronuluggìa sunnu disattivati.",
"importnofile": "Nun hà statu carrcatu nuddu file pi la mpurtazzioni.",
"importuploaderrorsize": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Lu file è cchiù granni di li diminzioni màssimi cunzentiti pi l'upload.",
"importuploaderrorpartial": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Sulamenti na parti dû file vinni caricatu.",
"importuploaderrortemp": "Caricamentu dû file pi la mpurtazzioni non arrinisciutu. Manca na cartedda timpurània.",
"import-parse-failure": "Sbagghiu d'anàlisi ntâ mpurtazzioni XML",
"import-noarticle": "Nudda pàggina di mpurtari.",
- "import-nonewrevisions": "Tutti li rivisioni già foru mpurtati apprima.",
+ "import-nonewrevisions": "Nudda virsioni fu' mpurtata (o già c'èrunu tutti, o furu sautati tutti picchì mmatteru erruri).",
"xml-error-string": "$1 a riga $2, culonna $3 (byte $4): $5",
"import-upload": "Càrrica dati XML",
"import-token-mismatch": "Si pèrsiru li dati rilativi a la sissioni. Pi piaciri, prova n'àutra vota.",
"import-invalid-interwiki": "E' mpussìbbili mpurtari dû pruggettu wiki nnicatu.",
- "importlogpage": "Mpurtazzioni",
+ "import-error-edit": "A pàggina \"$1\" nun fu' mpurtata picchì nun hai u pirmissu di canciàrila.",
+ "import-error-create": "La pàggina \"$1\" nun fu' mpurtata picchì nun hai u pirmissu di criàrila.",
+ "import-error-interwiki": "A pàggina \"$1\" nun fu' mpurtata picchì u so nomu è risirvatu pû culligamentu esternu (interwiki).",
+ "import-error-special": "A pàggina \"$1\" nun fu' mpurtata picchì apparteni a' nu namespace spiciali chi' nun cunsenti pàggini.",
+ "import-error-invalid": "A pàggina \"$1\" nun fu' mpurtata picchì u nomu unni sarrìa mpurtata nun è vàlidu supra a' sta wiki.",
+ "import-error-unserialize": "A virsioni $2 dâ pàggina \"$1\" nun si potti di-sirializzari. Era signatu chi' sta virsioni adupirava u mudellu di cuntinutu $3 sirializzatu comu $4.",
+ "import-error-bad-location": "A virsioni $2 chi' adòpira u mudellu di cuntinutu $3 nun si po' mimurizzari nta \"$1\" supra a' sta wiki, picchì ddu mudellu nun è suppurtatu nta dda pàggina.",
+ "import-options-wrong": "{{PLURAL:$2|Opzioni sbagghiata|Opzioni sbagghiati}}: <nowiki>$1</nowiki>",
+ "import-rootpage-invalid": "A pàggina ràdica spicificata nun è vàlida comu tìtulu.",
+ "import-rootpage-nosubpage": "U namespace \"$1\" dâ pàggina ràdica nun cunsenti suttapàggini.",
+ "importlogpage": "Riggistru dî mpurtazzioni",
"importlogpagetext": "Riggistru dî mpurtazzioni d'ufficiu di pàggini pruvinenti d'àutri wiki, cumpleti di cronoluggìa.",
- "import-logentry-upload": "hà mpurtatu $1 tràmiti upload",
- "import-logentry-upload-detail": "{{PLURAL:$1|na rivisioni mpurtata|$1 rivisioni mpurtati}}",
- "import-logentry-interwiki": "hà trasfiritu di àutra wiki la pàggina $1",
- "import-logentry-interwiki-detail": "{{PLURAL:$1|na rivisioni mpurtata|$1 rivisioni mpurtati}} di $2",
+ "import-logentry-upload-detail": "{{PLURAL:$1|na virsioni mpurtata|$1 virsioni mpurtati}}",
+ "import-logentry-interwiki-detail": "{{PLURAL:$1|na virsioni mpurtata|$1 virsioni mpurtati}} di $2",
+ "javascripttest": "Virìfichi JavaScript",
+ "javascripttest-pagetext-noframework": "Sta pàggina è risirvata pi' l'esicuzzioni dî virìfichi JavaScript.",
+ "javascripttest-pagetext-unknownframework": "Framework di virìfica \"$1\" scanusciutu.",
+ "javascripttest-pagetext-frameworks": "Pi' favuri scegghî unu dî siguenti framework di virìfica: $1",
+ "javascripttest-pagetext-skins": "Scegghî na peddi câ quali esiguìri i virìfichi:",
+ "javascripttest-qunit-intro": "Talìa [$1 a ducumintazzioni a' prupositu dî virìfichi] supra a' mediawiki.org.",
"tooltip-pt-userpage": "La tò pàggina utenti",
"tooltip-pt-anonuserpage": "La pàggina utenti di stu ndirizzu IP",
"tooltip-pt-mytalk": "La to' pàggina di discussioni",
"tooltip-pt-anontalk": "Discussioni supra li canciamenti fatti di stu ndirizzu IP",
"tooltip-pt-preferences": "Li mè prifirenzi",
"tooltip-pt-watchlist": "La lista dî pàggini ca stai tinennu sutta ossirvazzioni",
- "tooltip-pt-mycontris": "L'alencu dî tò cuntribbuti",
+ "tooltip-pt-mycontris": "La lista dî to cuntribbuti",
"tooltip-pt-login": "La riggistrazzioni è cunzigghiata, puru siddu nun obbrigatoria.",
- "tooltip-pt-logout": "Nisciuta (logout)",
+ "tooltip-pt-logout": "Nisciuta",
+ "tooltip-pt-createaccount": "Si' nvitatu a criari nu cuntu e tràsiri; però nun è obbligatoriu",
"tooltip-ca-talk": "Vidi li discussioni rilativi a sta pàggina",
"tooltip-ca-edit": "Poi canciari sta pàggina. Pi favuri usa lu pulsanti d'antiprima prima di sarvari.",
"tooltip-ca-addsection": "Agghiunci un cummentu a sta discussioni.",
"tooltip-ca-viewsource": "Sta pàggina è prutetta, ma poi vìdiri lu sò còdici surgenti.",
"tooltip-ca-history": "Virsioni pricidenti di sta pàggina.",
"tooltip-ca-protect": "Pruteggi sta pàggina",
+ "tooltip-ca-unprotect": "Cancia a prutizzioni di sta pàggina",
"tooltip-ca-delete": "Cancella sta pàggina",
"tooltip-ca-undelete": "Riprìstina la pàggina com'era prima dâ cancillazzioni",
"tooltip-ca-move": "Sposta sta pàggina (cancia tìtulu)",
- "tooltip-ca-watch": "Agghiunci sta pàggina â tò lista di ossirvati spiciali",
- "tooltip-ca-unwatch": "Elìmina sta pàggina dâ tò lista di ossirvati spiciali",
+ "tooltip-ca-watch": "Agghiunci sta pàggina â to lista taliata",
+ "tooltip-ca-unwatch": "Leva sta pàggina dâ to lista taliata",
"tooltip-search": "Cerca 'n {{SITENAME}}",
"tooltip-search-go": "Vai a na pàggina cu chistu nomu esattu siddu asisti",
"tooltip-search-fulltext": "Arriscedi pàggini pi chistu testu",
@@ -1741,14 +2228,15 @@
"tooltip-n-portal": "Discrizzioni dû pruggettu, zoccu poi fari, unni attruvari li cosi",
"tooltip-n-currentevents": "Nfurmazzioni supra l'avvinimenti d'attualitati",
"tooltip-n-recentchanges": "Alencu di l'ùrtimi canciamenti dû situ.",
- "tooltip-n-randompage": "Ammustra na pàggina a muzzu",
+ "tooltip-n-randompage": "Carrica na pàggina a' muzzu",
"tooltip-n-help": "Pàggini d'aiutu.",
"tooltip-t-whatlinkshere": "Alencu di tutti li pàggini ca sunnu culligati a chista",
"tooltip-t-recentchangeslinked": "Alencu di l'ùrtimi canciamenti a li pàggini culligati a chista",
"tooltip-feed-rss": "Feed RSS pi sta pàggina",
"tooltip-feed-atom": "Feed Atom pi sta pàggina",
- "tooltip-t-contributions": "Lista dî cuntribbuti di stu utenti",
+ "tooltip-t-contributions": "La lista dî cuntribbuti di stu utenti",
"tooltip-t-emailuser": "Manna un missaggiu e-mail a stu utenti",
+ "tooltip-t-info": "Autri nfurmazzioni a' prupòsitu di sta pàggina",
"tooltip-t-upload": "Càrrica mmàggini o file multimidiali",
"tooltip-t-specialpages": "Lista di tutti li pàggini spiciali",
"tooltip-t-print": "Virsioni stampabbili di chista pàggina",
@@ -1768,88 +2256,171 @@
"tooltip-preview": "Antiprima dî canciamenti, ùsala prima di sarvari!",
"tooltip-diff": "Talìa (mudalitati diff) li canciamenti c'hai fattu.",
"tooltip-compareselectedversions": "Talìa li diffirenzi tra li dui virsioni silizziunati di sta pàggina.",
- "tooltip-watch": "Agghiunci sta pàggina â lista di l'ossirvati spiciali",
+ "tooltip-watch": "Agghiunci sta pàggina â to lista taliata",
+ "tooltip-watchlistedit-normal-submit": "Leva i tìtuli",
+ "tooltip-watchlistedit-raw-submit": "Aggiorna la lista taliata",
"tooltip-recreate": "Ricrea la pàggina puru siddu hà statu cancillata",
"tooltip-upload": "Ncigna carricamentu",
"tooltip-rollback": "\"Rollback\" annulla li canci di l'ùrtinu cuntribbuturi â sta pâggina cu nu sulu clic.",
"tooltip-undo": "\"Annulla\" pirmetti di annullari sta mudìfica e grapi lu mòdulu di mudifica ntâ mudalità di antiprima. Pirmetti di nsiriri na mutivazziopni nti l'uggettu dâ mudifica.",
"tooltip-preferences-save": "Sarva prifirenzi",
- "tooltip-summary": "Nsiriri na sintisi curta",
+ "tooltip-summary": "Scrìviri nu riassuntu curtu",
"common.css": "/* Li stili CSS nziriti ccà s'àpplicanu a tutti li skin */",
"common.js": "/* Lu còdici JavaScript nziritu ccà veni carricatu di ognuna pàggina, pi tutti l'utenti. */",
"anonymous": "{{PLURAL:$1|Utenti anònimu|Utenti anònimi}} di {{SITENAME}}",
"siteuser": "$1, utenti di {{SITENAME}}",
+ "anonuser": "utenti anònimu di {{SITENAME}} $1",
"lastmodifiedatby": "Sta pàggina hà statu canciata pi l'ùrtima vota lu $2, $1 di $3.",
- "othercontribs": "Basatu supra lu travagghiu di $1.",
+ "othercontribs": "Basata supra ô travagghiu di $1.",
"others": "àutri",
"siteusers": "$1, {{PLURAL:$2|utenti|utenti}} di {{SITENAME}}",
- "creditspage": "Li autura dâ pàggina",
- "nocredits": "Nudda nfurmazzioni supra li crèditi dispunìbbili pi sta pàggina.",
+ "anonusers": "{{PLURAL:$2|utenti anònimu|utenti anònimi}} di {{SITENAME}} $1",
+ "creditspage": "Autura dâ pàggina",
+ "nocredits": "Nun cc'è nudda nfurmazzioni supra a' l'autura di sta pàggina.",
"spamprotectiontitle": "Filtru anti-spam",
"spamprotectiontext": "La pàggina ca vulevi sarvari hà statu bluccata dû filtru anti-spam. Chistu è prubbabbirmenti duvutu â prisenza di nu liami a nu situ sternu bluccatu.",
"spamprotectionmatch": "Lu nostru filtru anti-spam hà ndividuatu lu testu siquenti: $1",
"spambot_username": "MediaWiki - sistema di rimuzzioni spam",
"spam_reverting": "Ripristinata l'ùrtima virsioni priva di culligamenti a $1",
"spam_blanking": "Pàggina svacantata, tutti li virsioni cuntinìanu culligamenti a $1",
+ "spam_deleting": "Pàggina cancillata, tutti li virsioni cuntinìunu culligamenti a' $1",
+ "simpleantispam-label": "Cuntrollu anti spam.\n<strong>NUN</strong> jìnchiri stu campu!",
+ "pageinfo-title": "Nfurmazzioni supra a' \"$1\"",
+ "pageinfo-not-current": "Sfurtunatamenti, nun è pussìbbili furnìri sti nfurmazzioni pî virsioni vecchî.",
+ "pageinfo-header-basic": "Nfurmazzioni essinziali",
+ "pageinfo-header-edits": "Crunuluggìa dî canciamenti",
+ "pageinfo-header-restrictions": "Prutizzioni dâ pàggina",
+ "pageinfo-header-properties": "Prupietà dâ pàggina",
+ "pageinfo-display-title": "Tìtulu ammustratu",
+ "pageinfo-default-sort": "Criteriu d'ordinamentu pridifinutu",
+ "pageinfo-length": "Lunghizza dâ pàggina (in byte)",
+ "pageinfo-article-id": "ID dâ pàggina",
+ "pageinfo-language": "Lingua dû cuntinutu dâ pàggina",
+ "pageinfo-content-model": "Mudellu dû cuntinutu dâ pàggina",
+ "pageinfo-robot-policy": "Innicizzazzioni pi' menzu di robot",
+ "pageinfo-robot-index": "Cunsintuta",
+ "pageinfo-robot-noindex": "Pruibbuta",
+ "pageinfo-watchers": "Quanti talìunu sta pàggina",
+ "pageinfo-few-watchers": "Cchiu' picca di $1 {{PLURAL:$1|taliaturi|taliatura}}",
+ "pageinfo-redirects-name": "Nùmmiru di rimanni a' sta pàggina",
+ "pageinfo-subpages-name": "Nùmmiru di suttapàggini di sta pàggina",
+ "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|chi' è un rimannu|chi' su' rimanni}}; $3 {{PLURAL:$3|chi' nun è un rimannu|chi' nun su' rimanni}})",
+ "pageinfo-firstuser": "Criaturi dâ pàggina",
+ "pageinfo-firsttime": "Data dâ criazzioni dâ pàggina",
+ "pageinfo-lastuser": "Ùltimu cuntribbuturi",
+ "pageinfo-lasttime": "Data di l'ùltimu canciamentu",
+ "pageinfo-edits": "Nùmmiru tutali di canciamenti",
+ "pageinfo-authors": "Nùmmiru tutali di autura distinti",
+ "pageinfo-recent-edits": "Nùmmiru di canciamenti ricenti (nta l'ultimu pirìudu di $1)",
+ "pageinfo-recent-authors": "Nùmmiru di cuntribbutura ricenti distinti",
+ "pageinfo-magic-words": "{{PLURAL:$1|Palora màggica|Palori màggichi}} ($1)",
+ "pageinfo-hidden-categories": "{{PLURAL:$1|Catigurìa ammucciata|Catigurìi ammucciati}} ($1)",
+ "pageinfo-templates": "{{PLURAL:$1|Template trasclusu|Template trasclusi}} ($1)",
+ "pageinfo-transclusions": "{{PLURAL:$1|Pàggina|Pàggini}} unni chista è trasclusa ($1)",
"pageinfo-toolboxlink": "Nfurmazzioni ncapu la pàggina",
- "markaspatrolleddiff": "Segna lu canciamentu comu virificatu",
- "markaspatrolledtext": "Segna sta pàggina comu virificata",
- "markedaspatrolled": "Canciamentu virificatu",
- "markedaspatrolledtext": "Lu canciamentu silizziunatu hà statu signatu comu virificatu.",
- "rcpatroldisabled": "La virìfica di l'ùrtimi canciamenti è disattivata",
- "rcpatroldisabledtext": "La funzioni di virìfica di l'ùrtimi canciamenti a lu mumentu nun è attiva.",
- "markedaspatrollederror": "Mpussìbbili contrassignari lu canciamentu comu virificatu",
- "markedaspatrollederrortext": "Ci voli spicificari un canciamentu a contrassignari comu virificatu.",
- "markedaspatrollederror-noautopatrol": "Nun si disponi dî pirmissi nicissari pi signari li propi canciamenti comu virificati.",
- "patrol-log-page": "Canciamenti virificati",
- "patrol-log-header": "Ccassutta sunnu elencati li virìfichi dî canci.",
- "log-show-hide-patrol": "$1 log di li canciamenti virificati",
- "deletedrevision": "Rivisioni pricidenti, cancillata: $1.",
+ "pageinfo-redirectsto": "Rimanna a'",
+ "pageinfo-redirectsto-info": "nfurmazzioni",
+ "pageinfo-contentpage": "Cuntata comu pàggina di cuntinutu",
+ "pageinfo-contentpage-yes": "Sì",
+ "pageinfo-protect-cascading": "Di cca pàrtunu prutizzioni a' cascata",
+ "pageinfo-protect-cascading-yes": "Sì",
+ "pageinfo-protect-cascading-from": "Pìgghia prutizzioni a' cascata di",
+ "pageinfo-category-info": "Nfurmazzioni supra â catigurìa",
+ "pageinfo-category-pages": "Nùmmiru di pàggini",
+ "pageinfo-category-subcats": "Nùmmiru di suttacatigurìi",
+ "pageinfo-category-files": "Nùmmiru di file",
+ "markaspatrolleddiff": "Marca comu battugghiatu",
+ "markaspatrolledtext": "Marca sta pàggina comu battugghiata",
+ "markedaspatrolled": "Marcata comu battugghiata",
+ "markedaspatrolledtext": "La virsioni scigghiuta di [[:$1]] fu' marcata comu battugghiata.",
+ "rcpatroldisabled": "Lu battugghiamentu di l'ùrtimi canciamenti è disattivatu",
+ "rcpatroldisabledtext": "La funzioni di battugghiamentu di l'ùrtimi canciamenti com'ad ora è disattivata.",
+ "markedaspatrollederror": "Nun si po' marcari comu battugghiatu",
+ "markedaspatrollederrortext": "Hâ' spicificari na virsioni di marcari comu battugghiata.",
+ "markedaspatrollederror-noautopatrol": "Nun hai lu pirmissu di marcari li to canciamenti comu battugghiati.",
+ "markedaspatrollednotify": "Stu canciamentu a' $1 fu' marcatu comu battugghiatu.",
+ "markedaspatrollederrornotify": "La marcatura comu battugghiatu nun riniscìu.",
+ "patrol-log-page": "Riggìstru dî battugghî",
+ "patrol-log-header": "Chistu è nu riggìstru dî virsioni battugghiati.",
+ "log-show-hide-patrol": "$1 lu riggistru dî battugghî",
+ "deletedrevision": "Cancillata na virsioni vecchia di $1",
"filedeleteerror-short": "Erruri ntâ cancillazzioni dû file: $1",
- "filedeleteerror-long": "Si virificaru erruri ntô tentativu di cancillari lu file:\n\n$1",
- "filedelete-missing": "Mpussibbili cancillari lu file \"$1\" pirchì nun asisti.",
- "filedelete-old-unregistered": "La rivisioni dô file nnicata, \"$1\", nun è cuntinuta ntô databbasi.",
- "filedelete-current-unregistered": "Lu file spicificatu, \"$1\", nun è cuntinutu ntô databbasi.",
- "filedelete-archive-read-only": "Lu server Web nun è capaci di scrìviri ntâ directory d'archiviu \"$1\".",
- "previousdiff": "← Diffirenza pricidenti",
- "nextdiff": "Diffirenza siquenti →",
- "mediawarning": "'''Accura''': Stu file pò cuntèniri còdici malignu, esiquènnulu lu vostru sistema putisi vèniri cumprumissu.",
+ "filedeleteerror-long": "Mmatteru erruri ntô tintativu di cancillari lu file:\n\n$1",
+ "filedelete-missing": "Lu file \"$1\" nun si po' cancillari pirchì nun esisti.",
+ "filedelete-old-unregistered": "La virsioni spicificata dû file, \"$1\", nun è cuntinuta ntâ basi di dati.",
+ "filedelete-current-unregistered": "Lu file spicificatu, \"$1\", nun è cuntinutu ntâ basi di dati.",
+ "filedelete-archive-read-only": "La cartella d'archiviu \"$1\" nun è scrivìbbili dû server web.",
+ "previousdiff": "← Canciamentu avanti",
+ "nextdiff": "Canciamentu appressu →",
+ "mediawarning": "<strong>Accura:</strong>Stu gèniri di file po' cuntèniri còdici malignu.\nEsiquènnulu, lu vostru sistema putissi vèniri cumprumissu.",
"imagemaxsize": "Diminzioni màssima dî mmàggini:<br />''(pi li pàggini di discrizzioni dô file)''",
"thumbsize": "Grannizza dî miniaturi:",
"widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pàggina|pàggini}}",
- "file-info": "Diminzioni: $1, tipu MIME: $2",
- "file-info-size": "$1 × $2 pixel, diminzioni: $3, tipu MIME: $4",
- "file-nohires": "Nun sunnu dispunìbbili virsioni a risuluzzioni cchiù elivata.",
- "svg-long-desc": "file SVG, dimensioni nominali $1 × $2 pixel, dimensioni dô file: $3",
- "show-big-image": "Virsioni a àuta risuluzzioni",
- "file-info-gif-looped": "luppatu",
- "file-info-gif-frames": "$1 {{PLURAL:$1|frame|frame}}",
+ "file-info": "Grannizza: $1, tipu MIME: $2",
+ "file-info-size": "$1 × $2 pixel, grannizza dû file: $3, tipu MIME: $4",
+ "file-info-size-pages": "$1 × $2 pixel, grannizza dû file: $3, tipu MIME: $4, $5 {{PLURAL:$5|pàggina|pàggini}}",
+ "file-nohires": "Risuluzzioni cchiù auta nun nn'havi.",
+ "svg-long-desc": "File SVG, diminsioni nominali $1 × $2 pixel, grannizza dû file: $3",
+ "svg-long-desc-animated": "File SVG animatu, diminsioni numinali $1 × $2 pixel, grannizza dû file: $3",
+ "svg-long-error": "File SVG nun vàlidu: $1",
+ "show-big-image": "File origginali",
+ "show-big-image-preview": "Diminsioni di st'antiprima: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Autra risuluzzioni|Autri risuluzzioni}}: $1.",
+ "show-big-image-size": "$1 × $2 pixel",
+ "file-info-gif-looped": "a' ripitizzioni",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|futugramma|futugrammi}}",
+ "file-info-png-looped": "a' ripitizzioni",
+ "file-info-png-repeat": "ripitutu {{PLURAL:$1|na vota|$1 voti}}",
+ "file-info-png-frames": "$1 {{PLURAL:$1|futugramma|futugrammi}}",
+ "file-no-thumb-animation": "<strong>Nota: pi' causa di limitazzioni tècnichi, li miniaturi di stu file nun vènunu animati.</strong>",
+ "file-no-thumb-animation-gif": "<strong>Nota: pi' causa di limitazzioni tècnichi, li miniaturi di na mmàggini GIF a' risuluzzioni auta comu a' chista nun vènunu animati.</strong>",
"newimages": "Gallarìa dî file novi",
- "imagelisttext": "Di sèquitu veni prisintata na lista di '''$1''' file urdinat{{PLURAL:$1|u|i}} pi $2.",
- "newimages-summary": "Sta pàggina spiciali ammustra li file caricati di cchiù picca tempu.",
- "newimages-legend": "Nomu file",
- "newimages-label": "Nomu file (o nu pezzu d'iddu):",
- "noimages": "Nenti a vìdiri.",
- "ilsubmit": "Va' cerca",
- "bydate": "pi data",
- "sp-newimages-showfrom": "Ammustra li mmàggini cchiù ricenti a pàrtiri d'uri $2 dô $1",
- "bad_image_list": "Lu furmatu è lu siquenti:\n\nVèninu cunzidirati sulu l'alenchi puntati (righi ca accumènzanu cû sìmmulu *). Lu primu lijami supra ogni riga havi a èssiri nu lijami a nu file nun addisiatu.\nLi lijami succissivi, supra la stissa riga, sunnu cunzidirati comu eccizzioni (pàggini ntê quali lu file pò èssiri richiamatu 'n modu nurmali).",
+ "imagelisttext": "Ccassutta cc'è na lista di <strong>$1</strong> {{PLURAL:$1|file ordinatu|file ordinati}} $2.",
+ "newimages-summary": "Sta pàggina spiciali ammustra li file carricati di cchiu' picca tempu.",
+ "newimages-legend": "Filtru",
+ "newimages-label": "Nomu dû file (o na so parti):",
+ "newimages-showbots": "Ammustra li carricamenti dî bot",
+ "noimages": "Nenti a' vìdiri.",
+ "ilsubmit": "Va cerca",
+ "bydate": "pi' data",
+ "sp-newimages-showfrom": "Ammustra li file cchiu' novi a' pàrtiri dî $2 dû $1",
+ "seconds": "{{PLURAL:$1|un sicunnu|$1 sicunni}}",
+ "minutes": "{{PLURAL:$1|un minutu|$1 minuti}}",
+ "hours": "{{PLURAL:$1|un'ura|$1 uri}}",
+ "days": "{{PLURAL:$1|un jornu|$1 jorna}}",
+ "weeks": "{{PLURAL:$1|na simana|$1 simani}}",
+ "months": "{{PLURAL:$1|un misi|$1 misi}}",
+ "years": "{{PLURAL:$1|un annu|$1 anni}}",
+ "ago": "$1 fa'",
+ "just-now": "propia ora",
+ "hours-ago": "{{PLURAL:$1|un'ura|$1 uri}} fa'",
+ "minutes-ago": "{{PLURAL:$1|un minutu|$1 minuti}} fa'",
+ "seconds-ago": "{{PLURAL:$1|un sicunnu|$1 sicunni}} fa'",
+ "monday-at": "Lùniri ê $1",
+ "tuesday-at": "Màrtiri ê $1",
+ "wednesday-at": "Mèrcuri ê $1",
+ "thursday-at": "Jòviri ê $1",
+ "friday-at": "Vènniri ê $1",
+ "saturday-at": "Sàbbatu ê $1",
+ "sunday-at": "Dumìnica ê $1",
+ "yesterday-at": "Ajeri ê $1",
+ "bad_image_list": "Lu furmatu è lu siguenti:\n\nSu' pigghiati a' cunsiddirazzioni sulu li vuci d'elenchi puntati (li righi ca accumènzanu cû sìmmulu *).\nLu primu culligamentu nta ogni' riga havi a' puntari ôn file nun addisiatu.\nSi' cci su' autri culligamenti nta stissa riga, su' cunsiddirati comu eccizzioni, vali a' diri pàggini unni lu file po' èssiri ncurpuratu.",
"metadata": "Metadati",
- "metadata-help": "Stu file cunteni nfurmazzioni agghiuntivi, prubbabbirmenti junti dâ fotucàmira o dû scanner usati pi criàrila o diggitalizzàrila. Siddu lu file hà statu canciatu, arcuni dittagghi putìssiru nun currispùnniri â rialitati.",
- "metadata-expand": "Ammustra dittagghi",
- "metadata-collapse": "Ammuccia dittagghi",
- "metadata-fields": "Li campi rilativi a li metadati di la mmàggini alincati 'n stu missaggiu vèninu ammustrati supra la pàggina dâ mmàggini quannu la tabbella dî metadati è prisintata ntâ forma brivi. Pi mpustazzioni pridifinita, l'àutri campi vèninu ammucciati.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-help": "Stu file cunteni autri nfurmazzioni, prubbabbirmenti agghiunciuti dâ màchina futugràfica o dû scanner adupirati pi' criàrilu o diggitalizzàrilu.\nSiddu lu file hâ statu canciatu dâ so cunnizzioni origginali, certi dittagghî putìssiru nun currispùnniri ô statu novu dû file.",
+ "metadata-expand": "Ammustra li nfurmazzioni dittagghiati",
+ "metadata-collapse": "Ammuccia li nfurmazzioni dittagghiati",
+ "metadata-fields": "Li campi dî metadati dâ mmàggini elincati nta stu missaggiu sarrannu ammustrati ntâ pàggina dâ mmàggini quannu la tavula dî metadati è strinciuta.\nL'àutri campi comu mpustazzioni pridifinuta sarrannu ammucciati.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "Larghizza",
"exif-imagelength": "Autizza",
- "exif-bitspersample": "Bit pi campiuni",
+ "exif-bitspersample": "Bit pi' cumpunenti",
"exif-compression": "Miccanismu di cumprissioni",
- "exif-photometricinterpretation": "Struttura dî pixel",
- "exif-orientation": "Urientamentu",
- "exif-samplesperpixel": "Nùmmuru dî cumpunenti",
+ "exif-photometricinterpretation": "Cumpusizzioni dû pixel",
+ "exif-orientation": "Orientamentu",
+ "exif-samplesperpixel": "Nùmmiru di cumpunenti",
"exif-planarconfiguration": "Dispusizzioni dî dati",
- "exif-ycbcrsubsampling": "Rapportu di campiunamentu Y / C",
- "exif-ycbcrpositioning": "Pusizziunamentu cumpunenti Y e C",
- "exif-xresolution": "Risuluzzioni urizzuntali",
+ "exif-ycbcrsubsampling": "Rapportu di suttacampiunamentu Y / C",
+ "exif-ycbcrpositioning": "Pusizziunamentu dî cumpunenti Y e C",
+ "exif-xresolution": "Risuluzzioni orizzuntali",
"exif-yresolution": "Risuluzzioni virticali",
"exif-stripoffsets": "Pusizzioni dî dati mmàggini",
"exif-rowsperstrip": "Nùmmiru righi pi striscia",
@@ -1872,8 +2443,8 @@
"exif-colorspace": "Spazziu dî culuri",
"exif-componentsconfiguration": "Significatu d'ognuna cumpunenti",
"exif-compressedbitsperpixel": "Mudalitati di cumprissioni dâ mmàggini",
- "exif-pixelydimension": "Larghizza effittiva mmàggini",
- "exif-pixelxdimension": "Autizza effittiva mmàggini",
+ "exif-pixelydimension": "Larghizza dâ mmàggini",
+ "exif-pixelxdimension": "Autizza dâ mmàggini",
"exif-usercomment": "Noti di l'utenti",
"exif-relatedsoundfile": "File audiu culligatu",
"exif-datetimeoriginal": "Data e ura di criazzioni dî dati",
@@ -1887,9 +2458,9 @@
"exif-exposureprogram": "Prugramma d'espusizzioni",
"exif-spectralsensitivity": "Sinzibbilitati spittrali",
"exif-isospeedratings": "Sinzibbilitati ISO",
- "exif-shutterspeedvalue": "Tempu d'espusizzioni",
- "exif-aperturevalue": "Apirtura",
- "exif-brightnessvalue": "Luminusitati",
+ "exif-shutterspeedvalue": "Tempu d'espusizzioni APEX",
+ "exif-aperturevalue": "Apirtura APEX",
+ "exif-brightnessvalue": "Luminusitati APEX",
"exif-exposurebiasvalue": "Currezzioni espusizzioni",
"exif-maxaperturevalue": "Apirtura màssima",
"exif-subjectdistance": "Distanza dû suggettu",
@@ -1951,16 +2522,85 @@
"exif-gpsareainformation": "Nomu dâ zona GPS",
"exif-gpsdatestamp": "Data GPS",
"exif-gpsdifferential": "Currezzioni diffirinziali GPS",
+ "exif-jpegfilecomment": "Cummentu dû file JPEG",
+ "exif-keywords": "Palori chiavi",
+ "exif-worldregioncreated": "Parti dû munnu unni sta fotu fu' pigghiata",
+ "exif-countrycreated": "Paìsi dû munnu unni sta fotu fu' pigghiata",
+ "exif-countrycodecreated": "Còdici dû paìsi unni sta fotu fu' pigghiata",
+ "exif-provinceorstatecreated": "Riggioni o pruvincia unni sta fòtu fu' pigghiata",
+ "exif-citycreated": "Citati unni sta fotu fu' pigghiata",
+ "exif-sublocationcreated": "Parti dâ citati unni sta fotu fu' pigghiata",
+ "exif-worldregiondest": "Parti dû munnu raffigurata",
+ "exif-countrydest": "Paìsi dû munnu raffiguratu",
+ "exif-countrycodedest": "Còdici dû paìsi raffiguratu",
+ "exif-provinceorstatedest": "Riggioni o pruvincia raffigurata",
+ "exif-citydest": "Citati raffigurata",
+ "exif-sublocationdest": "Parti dâ citati raffigurata",
+ "exif-objectname": "Tìtulu curtu",
+ "exif-specialinstructions": "Istruzzioni spiciali",
+ "exif-headline": "Tìtulu",
+ "exif-credit": "Orìggini/Furnituri",
+ "exif-source": "Fonti",
+ "exif-editstatus": "Statu edituriali dâ mmàggini",
+ "exif-urgency": "Urgenza",
+ "exif-fixtureidentifier": "Rubbrica",
+ "exif-locationdest": "Postu raffiguratu",
+ "exif-locationdestcode": "Còdici dû postu raffiguratu",
+ "exif-objectcycle": "Ura dâ jurnata pâ quali stu file è ntisu",
+ "exif-contact": "Nfurmazzioni di cuntattu",
+ "exif-writer": "Scritturi",
+ "exif-languagecode": "Lingua",
+ "exif-iimversion": "Virsioni di IIM",
+ "exif-iimcategory": "Catigurìa",
+ "exif-iimsupplementalcategory": "Catigurìi aggiuntivi",
+ "exif-datetimeexpires": "Di nun adupiràri doppu",
+ "exif-datetimereleased": "Data di rilassu",
+ "exif-originaltransmissionref": "Còdici dû locu di trasmissioni origginali",
+ "exif-identifier": "Idintificaturi",
+ "exif-lens": "Lenti adupirata",
+ "exif-serialnumber": "Nummiru di serî dâ màchina futugràfica",
+ "exif-cameraownername": "Prupietariu dâ màchina futugràfica",
+ "exif-label": "Etichetta",
+ "exif-datetimemetadata": "Data di l'ùltimu canciamentu dî metadati",
+ "exif-nickname": "Nomu infurmali dâ mmàggini",
+ "exif-rating": "Votu (supra a' 5)",
+ "exif-rightscertificate": "Cirtificatu pâ gistioni dî dritti",
+ "exif-copyrighted": "Cupertu di drittu d'auturi",
+ "exif-copyrightowner": "Ditinturi dû drittu d'auturi",
+ "exif-usageterms": "Tèrmini pi l'usu",
+ "exif-webstatement": "Dichiarazzioni di drittu d'auturi in linia",
+ "exif-originaldocumentid": "Idintificaturi unìvucu dû ducumentu origginali",
+ "exif-licenseurl": "URL dâ licenza di drittu d'auturi",
+ "exif-morepermissionsurl": "Nfurmazzioni pâ cuncissioni di autri licenzi",
+ "exif-attributionurl": "Quannu si fa' usu di st'òpira, si prega di mèttiri nu culligamentu a'",
+ "exif-preferredattributionname": "Quannu si fa' usu di st'òpira, si prega di attribuìrinni a patirnità a'",
+ "exif-pngfilecomment": "Cummentu dû file PNG",
+ "exif-disclaimer": "Dichiarazzioni di esclusioni di rispunsabbilità",
+ "exif-contentwarning": "Avvirtimentu supra ô cuntinutu",
+ "exif-giffilecomment": "Cummentu dû file GIF",
+ "exif-intellectualgenre": "Gèniri di elimentu",
+ "exif-subjectnewscode": "Còdici di l'oggettu",
+ "exif-scenecode": "Còdici IPTC dâ nquatratura",
+ "exif-event": "Eventu raffiguratu",
+ "exif-organisationinimage": "Assuciazzioni raffigurata",
+ "exif-personinimage": "Pirsuna raffigurata",
+ "exif-originalimageheight": "Autizza dâ mmàggini avanti dû ritagghiu",
+ "exif-originalimagewidth": "Larghizza dâ mmàggini avanti dû ritagghiu",
"exif-compression-1": "Nuddu",
+ "exif-compression-2": "cudìfica unidiminsiunali run-length encoding mudificata di Huffman dû Gruppu 3 CCITT",
+ "exif-compression-3": "cudìfica di fax dû Gruppu 3 CCITT",
+ "exif-compression-4": "cudìfica di fax dû Gruppu 4 CCITT",
+ "exif-copyrighted-true": "Prutettu di drittu d'auturi",
+ "exif-copyrighted-false": "Statu dû drittu d'auturi nun difinutu",
"exif-unknowndate": "Data scanusciuta",
"exif-orientation-1": "Nurmali",
"exif-orientation-2": "Capuvortu urizzontarmenti",
"exif-orientation-3": "Rutatu di 180°",
"exif-orientation-4": "Capuvortu virticarmenti",
"exif-orientation-5": "Rotatu 90° 'n sensu antiurariu e capuvortu virticarmenti",
- "exif-orientation-6": "Rutatu 90° 'n senzu orariu",
+ "exif-orientation-6": "Vutatu di 90° 'n senzu antiurariu",
"exif-orientation-7": "Rotatu 90° 'n sensu urariu e capuvortu virticarmenti",
- "exif-orientation-8": "Rutatu 90° 'n senzu antiorariu",
+ "exif-orientation-8": "Vutatu di 90° 'n senzu urariu",
"exif-planarconfiguration-1": "a blocchi (chunky)",
"exif-planarconfiguration-2": "liniari (planar)",
"exif-xyresolution-i": "$1 punti pi puseri (dpi)",
@@ -2024,6 +2664,7 @@
"exif-sensingmethod-5": "Sinzuri ària culuri siquinziali",
"exif-sensingmethod-7": "Sinzuri triliniari",
"exif-sensingmethod-8": "Sinzuri liniari culuri siquinziali",
+ "exif-filesource-3": "Màchina futugràfica diggitali",
"exif-scenetype-1": "Fotugrafìa diretta",
"exif-customrendered-0": "Prucessu nurmali",
"exif-customrendered-1": "Prucessu pirsunalizzatu",
@@ -2058,6 +2699,8 @@
"exif-gpslatitude-s": "Latitùtini Sud",
"exif-gpslongitude-e": "Lungitùtini Est",
"exif-gpslongitude-w": "Lungitùtini Ovest",
+ "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metru|metri}} supra ô liveddu dû mari",
+ "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metru|metri}} sutta ô liveddu dû mari",
"exif-gpsstatus-a": "Misurazzioni n cursu",
"exif-gpsstatus-v": "Misurazzioni nteropiràbbili",
"exif-gpsmeasuremode-2": "Misurazzioni bidiminziunali",
@@ -2065,41 +2708,96 @@
"exif-gpsspeed-k": "Chilòmitri orari",
"exif-gpsspeed-m": "Migghia orari",
"exif-gpsspeed-n": "Gruppa",
+ "exif-gpsdestdistance-k": "Chilòmitri",
+ "exif-gpsdestdistance-m": "Migghia",
+ "exif-gpsdestdistance-n": "Migghia marini",
+ "exif-gpsdop-excellent": "Eccillenti ($1)",
+ "exif-gpsdop-good": "Bona ($1)",
+ "exif-gpsdop-moderate": "Mudesta ($1)",
+ "exif-gpsdop-fair": "Scarsa ($1)",
+ "exif-gpsdop-poor": "Pèssima ($1)",
+ "exif-objectcycle-a": "Sulu pâ matina",
+ "exif-objectcycle-p": "Sulu pâ sira",
+ "exif-objectcycle-b": "Pi' matina e sira",
"exif-gpsdirection-t": "Direzzioni riali",
"exif-gpsdirection-m": "Direzzioni magnètica",
- "watchlistall2": "tutti",
+ "exif-ycbcrpositioning-1": "Cintrati",
+ "exif-ycbcrpositioning-2": "Co-situati",
+ "exif-dc-contributor": "Cuntribbuturi",
+ "exif-dc-coverage": "Àmmitu spazziali o timpurali",
+ "exif-dc-date": "Data/i",
+ "exif-dc-publisher": "Edituri",
+ "exif-dc-relation": "File assuciati",
+ "exif-dc-rights": "Dritti",
+ "exif-dc-source": "File surgenti",
+ "exif-dc-type": "Sorta di file",
+ "exif-rating-rejected": "Riggittatu",
+ "exif-isospeedratings-overflow": "Maggiuri di 65535",
+ "exif-iimcategory-ace": "Arti, cultura e' spittàculu",
+ "exif-iimcategory-clj": "Crìmini e giustizzia",
+ "exif-iimcategory-dis": "Disastri e incidenti",
+ "exif-iimcategory-fin": "Ecunumìa e affari",
+ "exif-iimcategory-edu": "Istruzzioni",
+ "exif-iimcategory-evn": "Ammienti",
+ "exif-iimcategory-hth": "Saluti",
+ "exif-iimcategory-hum": "Casi umani",
+ "exif-iimcategory-lab": "Travagghiu",
+ "exif-iimcategory-lif": "Stili di vita e' arricrìu",
+ "exif-iimcategory-pol": "Pulìtica",
+ "exif-iimcategory-rel": "Riliggioni e fidi",
+ "exif-iimcategory-sci": "Scienza e ticnuluggìa",
+ "exif-iimcategory-soi": "Quistioni suciali",
+ "exif-iimcategory-spo": "Sport",
+ "exif-iimcategory-war": "Guerra, cunflitti e disòrdini",
+ "exif-iimcategory-wea": "Tempu atmusfèricu",
+ "exif-urgency-normal": "Nurmali ($1)",
+ "exif-urgency-low": "Auta ($1)",
+ "exif-urgency-high": "Bascia ($1)",
+ "exif-urgency-other": "Difinuta di l'utenti ($1)",
"namespacesall": "Tutti",
"monthsall": "tutti",
- "confirmemail": "Cunferma ndirizzu e-mail",
+ "confirmemail": "Cunfirma dû nnirizzu di posta elittrònica",
"confirmemail_noemail": "Nun hà statu ndicatu un ndirizzu e-mail vàlidu ntê propi [[Special:Preferences|prifirenzi]].",
- "confirmemail_text": "Stu situ richiedi la virìfica di l ndirizzu e-mail prima di putiri usari li funzioni cunnessi a l'email. Prèmiri lu pulsanti ccà sutta pi mannari na richiesta di cunferma a lu propiu ndirizzu; ntô missaggiu è prisenti un culligamenti ca cunteni un còdici. Visitari lu culligamentu cu lu propiu browser pi cunfirmari ca lu ndirizzu e-mail è vàlidu.",
- "confirmemail_pending": "Lu còdici di cunferma vinni già mannatu pi posta alittrònica; siddu l'account fu criatu di picca tempu, si preja d'aspittari l'arrivu dû còdici pi quarchi minutu prima di pruvari d'addumannàrinni unu novu.",
- "confirmemail_send": "Manna un còdici di cunferma via e-mail.",
- "confirmemail_sent": "Missaggiu e-mail di cunferma mannatu.",
- "confirmemail_oncreate": "Un còdici di cunferma hà statu spiditu a lu ndirizzu di posta alittrònica ndicatu. Lu còdici nun è nicissariu pi tràsiri lu situ, ma è nicissariu furnirilu pi putiri abbilitari tutti li funzioni dû situ ca fannu usu dâ posta alittrònica.",
- "confirmemail_sendfailed": "{{SITENAME}} nun pò mannari lu missaggiu e-mail di cunferma. Virificari ca lu nnirizzu nun cunteni caràttiri nun vàlidi.\n\nMissaggiu d'erruri dû mailer: $1",
- "confirmemail_invalid": "Còdici di cunferma nun vàlidu. Lu còdici putissi èssiri scadutu.",
- "confirmemail_needlogin": "È nicissariu $1 pi cunfirmari lu propiu ndirizzu e-mail.",
+ "confirmemail_text": "{{SITENAME}} dumanna la cunvàlida dû to nnirizzu di posta elittrònica pi' putìri adupirari li funziunalità assuciati.\nCalca lu buttuni ccassutta pi' mannari nu missaggiu e-mail di cunfirma a lu to nnirizzu.\nNtô missaggiu cci sarravi nu culligamentu cuntinenti un còdici;\ncàrrica ddu culligamentu cu lu to browser pi' cunfirmari ca lu to nnirizzu di posta elittrònica è vàlidu.",
+ "confirmemail_pending": "Già nu còdici di cunfirma t'havi statu mannatu via posta elittrònica;\nsiddu hai criatu lu to cuntu di picca tempu, è mègghiu ch'aspètti l'arrivu dû còdici pi' quarchi minutu prima di pruvari a' addumannàrinni unu novu.",
+ "confirmemail_send": "Manna un còdici di cunfirma via e-mail",
+ "confirmemail_sent": "Missaggiu e-mail di cunfirma mannatu.",
+ "confirmemail_oncreate": "Un còdici di cunfirma fu' spidutu a lu to nnirizzu di posta elittrònica.\nLu còdici nun servi pi' tràsiri nta lu situ, ma ll'hâ' prisintari pi' putiri attivari tutti li funzioni dâ wiki ca fannu usu dâ posta elittrònica.",
+ "confirmemail_sendfailed": "{{SITENAME}} nun potti mannari lu to missaggiu e-mail di cunfirma.\nVirificari ca lu nnirizzu nun cunteni caràttiri nun vàlidi.\n\nMissaggiu d'erruri dû sirvizziu di posta: $1",
+ "confirmemail_invalid": "Còdici di cunfirma nun vàlidu.\nLu còdici putissi èssiri scadutu.",
+ "confirmemail_needlogin": "Pi' favuri $1 pi' cunvalidari lu to nnirizzu di posta elittrònica.",
"confirmemail_success": "Lu ndirizzu e-mail è cunfirmatu. Ora è pussìbbili esèquiri l'accessu e fari chinu usu dû situ.",
"confirmemail_loggedin": "Lu tò nnirizzu email fu ora cunfirmatu.",
- "confirmemail_subject": "{{SITENAME}}: richiesta di cunferma di lu ndirizzu",
- "confirmemail_body": "Quarcunu, prubbabbirmenti tu stissu di lu ndirizzu IP $1, hà riggistratu l'account \"$2\" supra {{SITENAME}} ndicannu stu ndirizzu e-mail.\n\nPi cunfirmari ca l'account t'apparteni e attivari li funzioni rilativi a lu nvìu di e-mail supra {{SITENAME}}, grapi lu culligamentu siquenti cu lu tò browser:\n\n$3\n\nSiddu l'account *nun* t'apparteni, grapi lu siguenti culligamentu:\n\n$5\n\nStu còdici di cunferma scadi automaticamenti a li $4.",
- "confirmemail_invalidated": "Addumannata di cunferma ndirizzu e-mail scancillata",
- "invalidateemail": "Scancella la dumanna di cunferma e-mail",
+ "confirmemail_subject": "Cunfirma dû nnirizzu di posta elittronica pi' {{SITENAME}}",
+ "confirmemail_body": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nriggistrau un cuntu \"$2\" cu stu nnirizzu di posta elittrònica supra a' {{SITENAME}}.\n\nPi' cunfirmari ca stu cuntu apparteni pi' davera a' tia,\ne attivari i funziunalità di posta elittronica supra a' {{SITENAME}},\napri stu culligamentu cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca stu culligamentu\npi' nigari a cunfirma dû nnirizzu di posta elittronica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
+ "confirmemail_body_changed": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\ncanciau u nnirizzu di posta elittrònica dû cuntu \"$2\" supra a' {{SITENAME}} mpustannulu a' chistu.\n\nPi' cunfirmari ca stu cuntu apparteni pi' davera a' tia,\ne attivari n'autra vota i funziunalità di posta elittronica supra a' {{SITENAME}},\napri stu culligamentu cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca stu culligamentu\npi' nigari a cunfirma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
+ "confirmemail_body_set": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nmpustau stu nnirizzu di posta elittrònica pû cuntu \"$2\" supra a' {{SITENAME}}.\n\nPi' cunfirmari ca stu cuntu apparteni pi' davera a' tia,\ne attivari i funziunalità di posta elittronica supra a' {{SITENAME}},\napri stu culligamentu cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca stu culligamentu\npi' nigari a cunfirma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
+ "confirmemail_invalidated": "Cunvàlida dû nnirizzu di posta elittronica nigata",
+ "invalidateemail": "Nigazzioni dâ cunvàlida dâ posta elittrònica",
"scarytranscludedisabled": "[La nchiusioni di pàggini tra siti wiki nun è attiva]",
"scarytranscludefailed": "[Erruri: Mpussìbbili uttèniri lu template $1]",
+ "scarytranscludefailed-httpstatus": "[Carricamentu dû template nun rinisciutu di $1: HTTP $2]",
"scarytranscludetoolong": "[URL troppu longu]",
"deletedwhileediting": "'''Accura''': Sta pàggina vinni scancillata doppu c'hai accuminzatu a scanciàrila!",
- "confirmrecreate": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) scancillau sta pàggina doppu ca hai accuminciatu a scanciàrila, pi stu mutivu: ''$2'' Pi favuri, cunferma ca addisìi pi daveru criari n'àutra vota sta pàggina.",
+ "confirmrecreate": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi' tu avìi accuminciatu a' canciàrila, dannu sta spiegazzioni:\n: <em>$2</em>\nPi' favuri cunfirma chi' voi criari n'autra vota sta pàggina pi' davera.",
+ "confirmrecreate-noreason": "L'utenti [[User:$1|$1]] ([[User talk:$1|discussioni]]) cancillau sta pàggina appressu chi' tu avìi accuminciatu a' canciàrila. Pi' favuri cunfirma chi' voi criari n'autra vota sta pàggina pi' davera.",
"recreate": "Ricrìa",
"unit-pixel": "px",
- "confirm_purge_button": "Cunferma",
+ "confirm_purge_button": "Cunfirma",
"confirm-purge-top": "S'addisìa puliri la cache di sta pàggina?",
"confirm-purge-bottom": "Pulizziari la cache di na pàggina pirmetti d'ammustrari la sô virsioni cchiù nova.",
+ "confirm-watch-button": "Cunfirma",
+ "confirm-watch-top": "Agghiùnciri sta pàggina â to lista taliata?",
+ "confirm-unwatch-button": "Cunfirma",
+ "confirm-unwatch-top": "Livari sta pàggina dâ to lista taliata?",
+ "quotation-marks": "«$1»",
"imgmultipageprev": "← pàggina pricidenti",
"imgmultipagenext": "pàggina siquenti →",
"imgmultigo": "Va'",
"imgmultigoto": "Vai a pàggina $1",
+ "img-lang-default": "(lingua pridifinuta)",
+ "img-lang-info": "Gènira sta mmàggini in $1. $2",
+ "img-lang-go": "Vai",
"ascending_abbrev": "crisc",
"descending_abbrev": "dicrisc",
"table_pager_next": "Pàggina succissiva",
@@ -2107,40 +2805,55 @@
"table_pager_first": "Prima pàggina",
"table_pager_last": "Ùrtima pàggina",
"table_pager_limit": "Ammustra $1 file pi pàggina",
+ "table_pager_limit_label": "Elimenti pi' pàggina:",
"table_pager_limit_submit": "Va'",
"table_pager_empty": "Nuddu risurtatu",
"autosumm-blank": "Pàggina svacantata",
"autosumm-replace": "Pàggina sustituita cu '$1'",
"autoredircomment": "Rinnirizzamentu â pàggina [[$1]]",
"autosumm-new": "Criata pàggina cu '$1'",
+ "autosumm-newblank": "Criata na pàggina vacanti",
"lag-warn-normal": "Li canciamenti appurtati {{PLURAL:$1|nta l'ùrtimu secundu|nta l'ùrtimi $1 secundi}} ponnu nun èssiri nta sta lista.",
"lag-warn-high": "A càusa di nu ritardu eccissivu nta l'aggiurnamentu dô server di databbasi, li canciamenti appurtati {{PLURAL:$1|nta l'ùrtimu secundu|nta l'ùrtimi $1 secundi}} ponnu nun èssiri nta sta lista.",
"watchlistedit-normal-title": "Cancia pàggini taliati",
"watchlistedit-normal-legend": "Eliminazzioni di pàggini dâ lista dê pàggini taliati",
- "watchlistedit-normal-explain": "Ccà sutta sugnu alincati tutti li pàggine taliati. Pi eliminari una o cchiù pàggini dâ lista, silizziunari li casiddi accantu e fari clic supra lu buttuni 'Elìmina pàggini' 'n fundu all'alencu. Accura ca è puru possibbili [[Special:EditWatchlist/raw|canciari la lista 'n forma testuali]].",
+ "watchlistedit-normal-explain": "Ccassutta cci su' li tìtuli ntâ to lista taliata.\nPi' livàrinni unu, scegghî la casedda a' latu d'iddu, e clicca \"{{int:Watchlistedit-normal-submit}}\".\nPoi puru [[Special:EditWatchlist/raw|canciari la lista 'n forma testuali]].",
"watchlistedit-normal-submit": "Elìmina pàggini",
"watchlistedit-normal-done": "Dâ lista dê pàggini taliati hà{{PLURAL:$1|&nbsp;stata eliminata na pàggina|nnu stati eliminati $1 pàggini}}:",
"watchlistedit-raw-title": "Cancia li pàggini taliati 'n forma testuali",
"watchlistedit-raw-legend": "Canciamentu testuali pàggini taliati",
- "watchlistedit-raw-explain": "Ccà sutta sugnu alincati tutti li pàggine taliati. Pi canciari la lista agghiunciri o rimòviri li rispettivi tituli, unu pi riga. Quannu funisci, fà clic supra 'Aggiorna la lista' 'n fundu all'alencu. Accura ca è puru possibbili [[Special:EditWatchlist|canciari la lista câ 'nterfaccia standard]].",
+ "watchlistedit-raw-explain": "Ccassutta cci su' li tìtuli ntâ to lista taliata, chi' si po' canciari agghiuncennu e livannu tituli, unu pi' riga.\nQuannu hai finutu, clicca \"{{int:Watchlistedit-raw-submit}}\".\nPoi puru [[Special:EditWatchlist|canciari a lista dâ pàggina tradizziunali]].",
"watchlistedit-raw-titles": "Pàggini:",
"watchlistedit-raw-submit": "Aggiorna la lista",
"watchlistedit-raw-done": "La tò lista dê pàggini taliati vinni aggiurnata.",
"watchlistedit-raw-added": "{{PLURAL:$1|Fu junciuta na pàggina|Foru junciuti $1 pàggini}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|&nbsp;Vinni scancillata na pàggina|Foru scancillati $1 pàggini}}:",
+ "watchlistedit-clear-title": "Lista taliata svacantata",
+ "watchlistedit-clear-legend": "Svacanta la lista taliata",
+ "watchlistedit-clear-explain": "Tutti li tìtuli sarrannu livati da to lista taliata",
+ "watchlistedit-clear-titles": "Tìtuli:",
+ "watchlistedit-clear-submit": "Svacanta la lista taliata (Sta cosa è difinitiva!)",
+ "watchlistedit-clear-done": "La tò lista taliata fu svacantata.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|Un tìtulu fu'|$1 tìtuli furu}} livati:",
+ "watchlistedit-too-many": "Cci su' troppu pàggini p'ammustràrili cca.",
+ "watchlisttools-clear": "Svacanta la lista taliata",
"watchlisttools-view": "Talìa li canciamenti rilivanti",
"watchlisttools-edit": "Talìa e cancia la lista",
"watchlisttools-raw": "Cancia la lista 'n forma testuali",
"iranian-calendar-m1": "Farvardin",
"iranian-calendar-m2": "Ordibehesht",
"iranian-calendar-m3": "Khordad",
- "unknown_extension_tag": "Tag estensioni scanusciutu: \"$1\"",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussioni]])",
"duplicate-defaultsort": "Accura: la chiavi priddifinuta d'urdinamentu \"$2\" si sciarrìa cu chidda d'antura \"$1\".",
- "version": "virsioni",
+ "duplicate-displaytitle": "<strong>Accura:</strong> U tìtulu a' ammustrari \"$2\" va' e rimpiazza u tìtulu a' ammustrari pricidenti \"$1\".",
+ "invalid-indicator-name": "<strong>Erruri:</strong> L'attribbutu <code>name</code> di l'innicaturi di statu dâ pàggina nun havi a' èssiri vacanti.",
+ "version": "Virsioni",
"version-extensions": "Estenzioni nstallati",
+ "version-skins": "Peddi installati",
"version-specialpages": "Pàggini spiciali",
"version-parserhooks": "Hook dû parser",
"version-variables": "Variabili",
+ "version-antispam": "Anti-spam",
"version-other": "Àutru",
"version-mediahandlers": "Gistori di cuntinuti multimediali",
"version-hooks": "Hook",
@@ -2148,11 +2861,45 @@
"version-parser-function-hooks": "Hook pi funzioni dû parser",
"version-hook-name": "Nomu di l'hook",
"version-hook-subscribedby": "Suttascrizzioni",
- "version-version": "(Virsioni $1)",
- "version-license": "Licenza",
+ "version-version": "($1)",
+ "version-no-ext-name": "[nuddu nomu]",
+ "version-license": "Licenza di MediaWiki",
+ "version-ext-license": "Licenza",
+ "version-ext-colheader-name": "Estinsioni",
+ "version-skin-colheader-name": "Peddi",
+ "version-ext-colheader-version": "Virsioni",
+ "version-ext-colheader-license": "Licenza",
+ "version-ext-colheader-description": "Discrizzioni",
+ "version-ext-colheader-credits": "Auturi",
+ "version-license-title": "Licenza di $1",
+ "version-license-not-found": "Pi' st'estinsioni nun fu' truvata nudda nfurmazzioni a' prupòsitu dâ licenza.",
+ "version-credits-title": "Ricanuscimenti pi' $1",
+ "version-credits-not-found": "Pi' st'estinsioni nun fu' truvata nudda nfurmazzioni a' prupòsitu dî ricanuscimenti.",
+ "version-poweredby-credits": "Sta wiki funziona cu' <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
+ "version-poweredby-others": "autri",
+ "version-poweredby-translators": "i tradutturi di translatewiki.net",
+ "version-credits-summary": "Vulemu ricanusciri u cuntribbutu di sti pirsuni a' [[Special:Version|MediaWiki]].",
+ "version-license-info": "MediaWiki è software lìbbiru; si po' ri-distribbuiri e/o mudificari sutta ê tèrmini dâ GNU General Public License comu pubblicata dâ Free Software Foundation; o la virsioni 2 dâ Licenza, o (a' propia scelta) na virsioni succissiva quali è jè.\n\nMediaWiki veni distribuùtu ntâ spiranza chi' sia ùtili, però SENZA NUDDA GARANZÌA; mancu chidda implìcita di NIGUZZIABBILITÀ o di APPLICABBILITÀ PI' NU SCOPU PARTICULARI. Si taliassi la GNU General Public License pi' maggiuri dittagghî.\n\nS'avissi a' avìri ricivutu [{{SERVER}}{{SCRIPTPATH}}/COPYING na copia dâ GNU General Public License] nsèmmula a' stu prugramma; si' no, si po' scrìviri â Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html la si po' lèggiri in linia].",
"version-software": "Software nstallatu",
"version-software-product": "Prodottu",
"version-software-version": "Virsioni",
+ "version-entrypoints": "URL dî punti d'accessu",
+ "version-entrypoints-header-entrypoint": "Puntu d'accessu",
+ "version-entrypoints-header-url": "URL",
+ "version-libraries": "Libbrarìi installati",
+ "version-libraries-library": "Libbrarìa",
+ "version-libraries-version": "Virsioni",
+ "redirect": "Rimannu pi' nomu di file o còdici di utenti, di pàggina o di virsioni",
+ "redirect-legend": "Rimannari a' nu file o na pàggina",
+ "redirect-summary": "Sta pàggina spiciali rimanna a' nu file (datu u nomu dû file), a' na pàggina (datu n'ID di virsioni o n'ID di pàggina), o puru â pàggina di n'utenti (datu n'ID nummèricu di utenti). Esempî di usu: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
+ "redirect-submit": "Vacci",
+ "redirect-lookup": "Cerca pi':",
+ "redirect-value": "Cu' valuri:",
+ "redirect-user": "ID d'utenti",
+ "redirect-page": "ID di pàggina",
+ "redirect-revision": "ID di virsioni di pàggina",
+ "redirect-file": "Nomu di file",
+ "redirect-not-exists": "Valuri nun truvatu",
"fileduplicatesearch": "Circata dê file duppiuni",
"fileduplicatesearch-summary": "Circata di pussìbbili dupppiuni dû file 'n basi ô valuri di ''hash''.",
"fileduplicatesearch-legend": "Circata di nu duppiuni",
@@ -2161,37 +2908,54 @@
"fileduplicatesearch-info": "$1 × $2 pixel<br />Diminzioni: $3<br />Tipu MIME: $4",
"fileduplicatesearch-result-1": "Non ci sunnu duppiuni li stissi dû file \"$1\".",
"fileduplicatesearch-result-n": "{{PLURAL:$2|C'è ggià nu duppiuni lu stissu|Ci sunnu ggià $2 duppiuni li stissi}} dû file \"$1\".",
+ "fileduplicatesearch-noresults": "Nuddu file chiamatu \"$1\" fu truvatu.",
"specialpages": "Pàggini spiciali",
- "specialpages-note": "* Pàggini spiciali non risirvati.\n* <strong class=\"mw-specialpagerestricted\">Pàggini spiciali risirvati sulu a quarchi catigurìa d'utenti.</strong>",
+ "specialpages-note-top": "Legenda",
+ "specialpages-note": "* Pàggini spiciali nurmali.\n* <span class=\"mw-specialpagerestricted\">Pàggini spiciali risirvati.</strong>",
"specialpages-group-maintenance": "Resocunti di manutinzioni",
"specialpages-group-other": "Autri pàggini spiciali",
- "specialpages-group-login": "Trasi / riggìstrazzioni",
- "specialpages-group-changes": "Ùrtimi canciamenti e riggistri",
+ "specialpages-group-login": "Trasuta / criazzioni di cunti",
+ "specialpages-group-changes": "Ùrtimi canciamenti e riggistra",
"specialpages-group-media": "File multimidiali - caricamentu e rennicunti",
"specialpages-group-users": "Utenti e diritti",
"specialpages-group-highuse": "Pàggini cchiù usati",
"specialpages-group-pages": "Listi di pàggini",
"specialpages-group-pagetools": "Strumenti ùtili pi li pàggini",
- "specialpages-group-wiki": "Strumenti e nfurmazzioni supra lu pruggettu",
- "specialpages-group-redirects": "Pàggini spiciali di redirect",
+ "specialpages-group-wiki": "Dati e strumenti",
+ "specialpages-group-redirects": "Pàggini spiciali chi' rimànnunu",
"specialpages-group-spam": "Strumenti contr'a lu spam",
+ "specialpages-group-developer": "Stigghi dû sviluppaturi",
"blankpage": "Pàggina vacanti",
"intentionallyblankpage": "Sta pàggina è lassata vacanti apposta e è usata pi benchmark, ecc.",
- "external_image_whitelist": " #lassa sta riga cum'è ora, senza tuccàrila<pre>\n#Nzirisci li frammenti dî sprissioni rigulari (solu la parti ca và tra //) di sècutu\n#Chisti hann'a currispùnniri cu li URL di mmàggini esterni (hotlinked)\n#Chiddi ca currispùnnunu vènunu appoi ammustrati comu mmàggini, casu cuntràriu s'ammustra sulu nu culligamentu a la mmàggini\n#Li lìnii ca accumincianu cu # sunnu di cummentu\n#La diffirenza tra maiusculi e minusculi nun è significativa\n\n#Nzirisci supr'a sta riga tutti li frammenti di regex. Lassa sta riga cum'è ora, senza tuccàrila</pre>",
+ "external_image_whitelist": " #Lassari sta riga pi' com'è ora, senza tuccàrila<pre>\n#Mèttiri li frammenti dî sprissioni rigulari (sulu la parti ca va' mmenzu ê //) ccassutta\n#Sarrannu cunfruntati cu l'URL dî mmàggini esterni (hotlinked)\n#Chiddi ca currispùnnunu sarrannu ammustrati comu mmàggini, pi' l'autri veniravi ammustratu sulu nu culligamentu a la mmàggini\n#Li righi ca accumencianu cu' # sunnu trattati comu cummenti\n#Nun cc'è diffirenza tra majusculi e minusculi\n\n#Mèttiri tutti li frammenti di sprissioni rigulari supra a' sta riga. Lassa sta riga pi' com'è ora, senza tuccàrila</pre>",
"tags": "Tag di canciamenti validi",
"tag-filter": "Filtru dô [[Special:Tags|Tag]]",
"tag-filter-submit": "Filtra",
+ "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etichetta|Etichetti}}]]: $2)",
"tags-title": "Tag",
"tags-intro": "Sta pàggina elenca l'etichetti ca lu software putissi associari a nu canciamentu e lu loru significatu",
- "tags-tag": "Nnomu internu dô tag",
+ "tags-tag": "Nomu di l'etichetta",
"tags-display-header": "Aspettu nâ lista di canciamenti",
"tags-description-header": "Discrizzioni cumpleta dô significatu",
+ "tags-active-header": "Attivu?",
"tags-hitcount-header": "Canciamenti che hanno tag",
+ "tags-active-yes": "Sì",
+ "tags-active-no": "No",
"tags-edit": "cancia",
"tags-hitcount": "$1 {{PLURAL:$1|canciamentu|canciamenti}}",
+ "comparepages": "Cunfrunta pàggini",
+ "compare-page1": "Pàggina 1",
+ "compare-page2": "Pàggina 2",
+ "compare-rev1": "Virsioni 1",
+ "compare-rev2": "Virsioni 2",
+ "compare-submit": "Cunfrunta",
+ "compare-invalid-title": "U tìtulu ca spicificasti nun è vàlidu.",
+ "compare-title-not-exists": "U tìtulu ca spicificasti nun esisti.",
+ "compare-revision-not-exists": "A virsioni ca spicificasti nun esisti.",
"dberr-problems": "Spiacenti! Stu situ sta havennu prublema tecnici.",
"dberr-again": "Prova a aspittari na para di minuti e ricaricari.",
- "dberr-info": "(Impussibili cuntattari lu server dô database: $1)",
+ "dberr-info": "(Impussìbbili accèdiri â basi di dati: $1)",
+ "dberr-info-hidden": "(Impussìbbili accèdiri â basi di dati)",
"dberr-usegoogle": "Poi pruvari a circari supra Google ammentri.",
"dberr-outofdate": "Nota ca la loru indicizzazioni dê nostri cuntintinuta po essiri nun aggiurnata.",
"dberr-cachederror": "Chista ca segui è na copia cache da pàggina richiesta, e putissi essiri nun aggiurnata.",
@@ -2205,20 +2969,209 @@
"htmlform-submit": "Mànna",
"htmlform-reset": "Annulla li canciamenti",
"htmlform-selectorother-other": "Àutru",
+ "htmlform-no": "No",
+ "htmlform-yes": "Sì",
"htmlform-chosen-placeholder": "Silizziona na opzioni",
- "logentry-delete-delete": "$1 cancillau la pàggina $3",
- "revdelete-restricted": "ristrizzioni ai suli amministratura attivate",
- "revdelete-unrestricted": "ristrizzioni pi suli amministraturi rimossi",
+ "htmlform-cloner-create": "Agghiunci autru",
+ "htmlform-cloner-delete": "Leva",
+ "htmlform-cloner-required": "Cci voli almenu nu valuri.",
+ "sqlite-has-fts": "$1 cu' capacità di risciduta a' tuttu testu",
+ "sqlite-no-fts": "$1 senza capacità di risciduta a' tuttu testu",
+ "logentry-delete-delete": "$1 {{GENDER:$2|cancillau}} la pàggina $3",
+ "logentry-delete-restore": "$1 {{GENDER:$2|ripristinau}} la pàggina $3",
+ "logentry-delete-event": "$1 {{GENDER:$2|canciau}} a visibbilità di {{PLURAL:$5|n'eventu dû riggistru|$5 eventi dû riggistru}} di $3: $4",
+ "logentry-delete-revision": "$1 {{GENDER:$2|canciau}} a visibbilità di {{PLURAL:$5|na virsioni|$5 virsioni}} dâ pàggina $3: $4",
+ "logentry-delete-event-legacy": "$1 {{GENDER:$2|canciau}} a visibbilità di eventi dû riggistru di $3",
+ "logentry-delete-revision-legacy": "$1 {{GENDER:$2|canciau}} a visibbilità di virsioni dâ pàggina $3",
+ "logentry-suppress-delete": "$1 {{GENDER:$2|supprimìu}} a pàggina $3",
+ "logentry-suppress-event": "$1 {{GENDER:$2|canciau}} a' mmucciuni a' visibbilità di {{PLURAL:$5|n'eventu dû riggistru|$5 eventi dû riggistru}} di $3: $4",
+ "logentry-suppress-revision": "$1 {{GENDER:$2|canciau}} a' mmucciuni a visibbilità di {{PLURAL:$5|na virsioni|$5 virsioni}} dâ pàggina $3: $4",
+ "logentry-suppress-event-legacy": "$1 {{GENDER:$2|canciau}} a' mmucciuni a visibbilità di eventi dû riggistru di $3",
+ "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|canciau}} a' mmucciuni a visibbilità di virsioni dâ pàggina $3",
+ "revdelete-content-hid": "cuntinutu ammucciatu",
+ "revdelete-summary-hid": "riassuntu dû canciamentu ammucciatu",
+ "revdelete-uname-hid": "nomu utenti ammucciatu",
+ "revdelete-content-unhid": "cuntinutu ammustratu",
+ "revdelete-summary-unhid": "riassuntu dû canciamentu ammustratu",
+ "revdelete-uname-unhid": "nomu utenti ammustratu",
+ "revdelete-restricted": "misi ristrizzioni pi' l'amministratura",
+ "revdelete-unrestricted": "livati ristrizzioni pi' l'amministratura",
+ "logentry-merge-merge": "$1 {{GENDER:$2|juncìu}} $3 nta $4 (virsioni nfina ô $5)",
"logentry-move-move": "$1 {{GENDER:$2|spustau}} la pàggina $3 nti $4",
+ "logentry-move-move-noredirect": "$1 {{GENDER:$2|spustau}} a pàggina $3 nta $4 senza lassari nu rimannu",
"logentry-move-move_redir": "$1 {{GENDER:$2|spustau}} la pàggina $3 nti $4 cu nu rinnirizzamentu",
- "logentry-newusers-create": "$1 criau na utenza",
+ "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|spustau}} a pàggina $3 nta $4 ô postu dûn rimannu senza lassari nu rimannu",
+ "logentry-patrol-patrol": "$1 {{GENDER:$2|marcau}} a virsioni $4 dâ pàggina $3 comu battugghiata",
+ "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|marcau}} di manera autumàtica a virsioni $4 dâ pàggina $3 comu battugghiata",
+ "logentry-newusers-newusers": "U cuntu di l'utenti $1 fu {{GENDER:$2|criatu}}",
+ "logentry-newusers-create": "U cuntu di l'utenti $1 fu' {{GENDER:$2|criatu}}",
+ "logentry-newusers-create2": "U cuntu di l'utenti $3 fu' {{GENDER:$2|criatu}} di $1",
+ "logentry-newusers-byemail": "U cuntu di l'utenti $3 fu' {{GENDER:$2|criatu}} di $1 e a password fu' mannata via posta elittrònica",
+ "logentry-newusers-autocreate": "U cuntu di l'utenti $1 fu' {{GENDER:$2|criatu}} di manera autumàtica",
+ "logentry-rights-rights": "$1 {{GENDER:$2|canciau}} l'appartinenza di $3 dû gruppu $4 ô gruppu $5",
+ "logentry-rights-rights-legacy": "$1 {{GENDER:$2|canciau}} l'appartinenza a' gruppi di $3",
+ "logentry-rights-autopromote": "$1 fu' {{GENDER:$2|prumuvutu|prumuvuta}} di manera autumatica di $4 a' $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|carricau}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|carricau}} na virsioni nova di $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|carricau}} $3",
"rightsnone": "(nuddu)",
+ "revdelete-summary": "riassuntu dô canciamentu",
+ "feedback-adding": "Agghiuncimentu dû cummentu â pàggina...",
+ "feedback-bugcheck": "Bonu! Sulu cuntrolla chi' nun è unu dî [$1 bug già canusciuti].",
+ "feedback-bugnew": "Cuntrullai. Signala nu bug novu",
+ "feedback-bugornote": "Si' si' bonu a' discrìviri un prubblema tècnicu di manera dittagghiata, pi' favuri [$1 signala nu bug].\nSi' no, poi adupirari u mòdulu facilitatu ccassutta. U to cummentu sarravi agghiunciutu â pàggina \"[$3 $2]\", nsemmula ô to nomu utenti.",
+ "feedback-cancel": "Annulla",
+ "feedback-close": "Finutu",
+ "feedback-error1": "Erruri: Risultatu di l'API nun ricanusciutu",
+ "feedback-error2": "Erruri: A mudìfica nun riniscìu",
+ "feedback-error3": "Erruri: Nudda risposta di l'API",
+ "feedback-message": "Missaggiu:",
+ "feedback-subject": "Oggettu:",
+ "feedback-submit": "Manna",
+ "feedback-thanks": "Grazzî! U to cummentu fu' affissu ntâ pàggina \"[$2 $1]\".",
"searchsuggest-search": "Risciduta",
+ "searchsuggest-containing": "chi' cunteni...",
+ "api-error-badaccess-groups": "Nun hai u pirmissu di carricari file nta sta wiki.",
+ "api-error-badtoken": "Erruri nternu: Token sbagghiatu",
+ "api-error-copyuploaddisabled": "U carricamentu a' partiri di URL è disattivatu nta stu server.",
+ "api-error-duplicate": "Già {{PLURAL:$1|cc'è [$2 n'autru file]|cci sunnu [$2 autri file]}} supra ô situ chi' {{PLURAL:$1|havi|hannu}} u stissu cuntinutu.",
+ "api-error-duplicate-archive": "{{PLURAL:$1|Cc'era [$2 n'autru file]|Cc' èrunu [$2 autri file]}} supra ô situ ch'{{PLURAL:$1|avìa|avìunu}} u stissu cuntinutu, ma {{PLURAL:$1|fu' cancillatu|furu cancillati}}.",
+ "api-error-duplicate-archive-popup-title": "{{PLURAL:$1|File duppiuni|File duppiuni}} chi' già {{PLURAL:$1|havi statu cancillatu|hannu statu cancillati}}.",
+ "api-error-duplicate-popup-title": "File {{PLURAL:$1|duppiuni}}.",
+ "api-error-empty-file": "U file chi' mannasti era vacanti.",
+ "api-error-emptypage": "Criari pàggini novi e vacanti nun è cunsintutu.",
+ "api-error-fetchfileerror": "Erruri nternu: Quarchi' cosa nun funziunau mentri chi' si carricava u file.",
+ "api-error-fileexists-forbidden": "Nu file chi' si chiama \"$1\" già esisti, e nun si po' suprascrìviri.",
+ "api-error-fileexists-shared-forbidden": "Nu file chi' si chiama \"$1\" già esisti ntô dipòsitu cunnivisu, e nun si po' suprascrìviri.",
+ "api-error-file-too-large": "U file chi' mannasti era troppu rossu.",
+ "api-error-filename-tooshort": "U nomu dû file è troppu curtu.",
+ "api-error-filetype-banned": "Stu tipu di file è sbannutu.",
+ "api-error-filetype-banned-type": "$1 {{PLURAL:$4|nun è un tipu di file cunsintutu|nun su' tipi di file cunsintuti}}. {{PLURAL:$3|U tipu di file cunsintutu è|I tipi di file cunsintuti sunnu}} $2.",
+ "api-error-filetype-missing": "Ô nomu dû file cci manca l'estinsioni.",
+ "api-error-hookaborted": "U canciamentu chi' stavi pruvannu a' fari fu' annullatu di n'estinsioni.",
+ "api-error-http": "Erruri nternu: Impussìbbili culligàrisi ô server.",
+ "api-error-illegal-filename": "U nomu dû file nun è cunsintutu.",
+ "api-error-internal-error": "Erruri nternu: Quarchi' cosa nun funziunau mentri chi' si stava travagghiannu u to carricamentu supra â wiki.",
+ "api-error-invalid-file-key": "Erruri nternu: U file nun fu' truvatu ntâ mimorizzazzioni timpurania.",
+ "api-error-missingparam": "Erruri nternu: Màncunu paràmitri ntâ richiesta.",
+ "api-error-missingresult": "Erruri nternu: Nun fu' pussìbbili capiri s'a copia riniscìu.",
+ "api-error-mustbeloggedin": "Hâ' jèssiri trasutu pi' carricari file.",
+ "api-error-mustbeposted": "Erruri nternu: A richiesta havi bisognu di POST HTTP.",
+ "api-error-noimageinfo": "U carricamentu riniscìu, però u server nun nni desi nudda nfurmazzioni a' prupòsitu dû file.",
"api-error-nomodule": "Erruri nternu: nun fu mpustatu lu mòdulu di carricamentu",
"api-error-ok-but-empty": "Erruri ntenru: nudda risposta dû server",
"api-error-overwrite": "Suprascriviri nu file ca nun esisti nun è cunsitutu",
"api-error-stashfailed": "Erruri nternu: lu server nun arrinisciu a mimurizzari lu ducumentu timpuraniu",
+ "api-error-publishfailed": "Erruri nternu: U server nun riniscìu a' pubblicari u file timpuraniu.",
+ "api-error-stasherror": "Cci fu' n'erruri ntô carricari u file nta l'ammucciagghia.",
+ "api-error-stashedfilenotfound": "U file nun fu' truvatu nta l'ammucciagghia duranti u tintativu di carricamentu a' partiri di l'ammucciagghia.",
+ "api-error-stashpathinvalid": "U caminu unni avissi avutu a' jèssiri u file nta l'ammucciagghia nun era vàlidu.",
+ "api-error-stashfilestorage": "Cci fu' n'erruri ntô mimurizzari u file nta l'ammucciagghia.",
+ "api-error-stashzerolength": "U server nun potti mèttiri u file nta l'ammucciagghia, picchì avìa lunghizza zeru.",
+ "api-error-stashnotloggedin": "Hâ' èssiri trasutu pi' sarvari file nta l'ammucciagghia.",
+ "api-error-stashwrongowner": "U file nta l'ammucciagghia chi' pruvasti a' pigghiari nun t'apparteni.",
+ "api-error-stashnosuchfilekey": "U file nta l'ammucciagghia chi' pruvasti a' pigghiari nun esisti.",
"api-error-timeout": "Lu server nun arrispunniu ntô tempu privistu",
"api-error-unclassified": "S'avvirificau n'erruri scanusciutu",
- "api-error-unknown-code": "Erruri scanusciuti: \"$1$\"."
+ "api-error-unknown-code": "Erruri scanusciuti: \"$1$\".",
+ "api-error-unknown-error": "Erruri nternu: Quarchi' cosa nun funziunau ntô tintativu di carricari u to file.",
+ "api-error-unknown-warning": "Avvirtimentu scanusciutu: \"$1\".",
+ "api-error-unknownerror": "Erruri scanusciutu: \"$1\".",
+ "api-error-uploaddisabled": "U carricamentu è disattivatu nta sta wiki.",
+ "api-error-verification-error": "Lu file purrìa èssiri ruinatu, o puru aviri l'estinsioni sbagghiata.",
+ "duration-seconds": "$1 {{PLURAL:$1|sicunnu|sicunni}}",
+ "duration-minutes": "$1 {{PLURAL:$1|minutu|minuti}}",
+ "duration-hours": "$1 {{PLURAL:$1|ura|uri}}",
+ "duration-days": "$1 {{PLURAL:$1|jornu|jorna}}",
+ "duration-weeks": "$1 {{PLURAL:$1|simana|simani}}",
+ "duration-years": "$1 {{PLURAL:$1|annu|anni}}",
+ "duration-decades": "$1 {{PLURAL:$1|dicenniu|dicennî}}",
+ "duration-centuries": "$1 {{PLURAL:$1|sèculu|sècula}}",
+ "duration-millennia": "$1 {{PLURAL:$1|millenniu|millennî}}",
+ "rotate-comment": "Mmàggini vutata di $1 {{PLURAL:$1|gradu|gradi}} ntô sensu urariu",
+ "limitreport-title": "Dati di prufilazzioni di l'analizzaturi sintatticu:",
+ "limitreport-cputime": "Usu di tempu dâ CPU",
+ "limitreport-cputime-value": "$1 {{PLURAL:$1|sicunnu|sicunni}}",
+ "limitreport-walltime": "Usu di tempu riàli",
+ "limitreport-walltime-value": "$1 {{PLURAL:$1|sicunnu|sicunni}}",
+ "limitreport-ppvisitednodes": "Cuntiggiu dî gruppi visitati dû priprucissuri",
+ "limitreport-ppgeneratednodes": "Cuntiggiu dî gruppi ginirati dû priprucissuri",
+ "limitreport-postexpandincludesize": "Grannizza di nclusioni appressu a' l'espansioni",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte}}",
+ "limitreport-templateargumentsize": "Grannizza di l'argumenti di template",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte}}",
+ "limitreport-expansiondepth": "Màssimu funnu d'espansioni",
+ "limitreport-expensivefunctioncount": "Cuntìggiu dî funzioni di l'analizzaturi sintatticu spisusi",
+ "expandtemplates": "Espansioni dî template",
+ "expand_templates_intro": "Sta pàggina spiciali pigghia un testu e espanni tutti i template chi' cunteni, di manera ricursiva.\nEspanni macari i funzioni di l'analizzaturi sintatticu chi' su suppurtati, comu <code><nowiki>{{</nowiki>#language:…}}</code>, e i variàbbili, comu <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nIn pratica, espanni cchiu' o menu tuttu chiddu chi' si trova mmenzu a' duppî parèntisi graffi.",
+ "expand_templates_title": "Tìtulu dû cuntestu, pi' {{FULLPAGENAME}} etc.:",
+ "expand_templates_input": "Testu a' espànniri:",
+ "expand_templates_output": "Risultatu",
+ "expand_templates_xml_output": "Output XML",
+ "expand_templates_html_output": "Output HTML grezzu",
+ "expand_templates_ok": "Espanni",
+ "expand_templates_remove_comments": "Leva i cummenti",
+ "expand_templates_remove_nowiki": "Leva l'etichetti <nowiki> dû risultatu",
+ "expand_templates_generate_xml": "Ammustra l'àrvulu di l'anàlisi sintàttica XML",
+ "expand_templates_generate_rawhtml": "Ammustra l'HTML grezzu",
+ "expand_templates_preview": "Antiprima",
+ "expand_templates_preview_fail_html": "<em>Comu chi' {{SITENAME}} havi l'HTML grezzu attivatu, e cci fu' na pèrdita dî dati di sissioni, l'antiprima vinni ammucciata, pi' pricauzzioni contra di l'attacchi JavaScript.</em>\n\n<strong>Si' chistu è nu tintativu onestu d'aviri n'antiprima, pi' favuri prova n'autra vota.</strong>\nS'ancora nun funziona, prova a' [[Special:UserLogout|nèsciri]] e tràsiri n'autra vota.",
+ "expand_templates_preview_fail_html_anon": "<em>Comu chi' {{SITENAME}} havi l'HTML grezzu attivatu, e tu nun si' trasutu, l'antiprima vinni ammucciata, pi' pricauzzioni contra di l'attacchi JavaScript.</em>\n\n<strong>Si' chistu è nu tintativu onestu d'aviri n'antiprima, pi' favuri [[Special:UserLogin|trasi]] e prova n'autra vota.",
+ "pagelanguage": "Scelta dâ lingua dâ pàggina",
+ "pagelang-name": "Pàggina",
+ "pagelang-language": "Lingua",
+ "pagelang-use-default": "Usa a lingua pridifinuta",
+ "pagelang-select-lang": "Scegghî na lingua",
+ "right-pagelang": "Canciari a lingua dî pàggini",
+ "action-pagelang": "canciari a lingua dî pàggini",
+ "log-name-pagelang": "Riggistru dî canci di lingua",
+ "log-description-pagelang": "Chistu è nu riggistru dî canciamenti â lingua dî pàggini.",
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|canciau}} a lingua dâ pàggina $3 di $4 a' $5.",
+ "default-skin-not-found": "Whoops! La peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nA' quantu pari la to installazzioni ncludi li peddi ccasutta. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu s'attìvunu e comu si scegghî chidda pridifinuta.\n\n$2\n\n; Si' hai installatu MediaWiki ora ora:\n: E' prubbàbbili chi' l'installasti dû git, o direttamenti dû còdici surgenti nta quarchi' autra manera. Allura sta cosa è privista. Prova e installa quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download lu prugramma d'installazzioni in furmatu tar], chi' cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari la cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi in furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clona via git unu dî dipòsiti <code>mediawiki/skins/*</code> ntâ cartella <code dir=\"ltr\">skins/</code> dâ to installazzioni di MediaWiki.\n: Fari accussì' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki.\n\n; Si' hai aggiurnatu MediaWiki ora ora:\n: MediaWiki virsioni 1.24 e succissivi nun attìvunu cchiu' di manera autumàtica i peddi installati (talìa [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manüali: Scuperta autumatica dî peddi]). Poi cupiari e ncuddari sti righi nta <code>LocalSettings.php</code> p'attivari tutti li peddi chi' sunnu pi' com'ora installati:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si' hai mudificatu <code>LocalSettings.php</code> ora ora:\n: Cuntrolla chi' nun sbagghiasti a' scriviri li nomi dî peddi.",
+ "default-skin-not-found-no-skins": "Whoops! La peddi pridifinuta dâ to wiki, mpustata nta <code dir=\"ltr\">$wgDefaultSkin</code> comu <code>$1</code>, nun è dispunìbbili.\n\nNun hai nudda peddi installata.\n\n; Si' hai installatu o puru aggiurnatu MediaWiki ora ora:\n: E' prubbàbbili chi' l'installasti dû git, o direttamenti dû còdici surgenti nta quarchi' autra manera. Allura sta cosa è privista. MediaWiki virsioni 1.24 e succissivi nun cuntènunu nudda peddi ntô dipòsitu principali. Prova e installa quarchi' peddi di [https://www.mediawiki.org/wiki/Category:All_skins l'archìviu dî peddi di mediawiki.org], a na manera di chisti:\n:* Scàrrica [https://www.mediawiki.org/wiki/Download u prugramma d'installazzioni in furmatu tar], chi' cunteni tanti peddi ed estinsioni. Poi cupiari e ncuddari a cartella <code>skins/</code> di ddadintra.\n:* Scàrrica a' una a' una quarchi' peddi in furmatu tar di [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clona via git unu dî dipòsiti <code>mediawiki/skins/*</code> ntâ cartella <code dir=\"ltr\">skins/</code> dâ to installazzioni di MediaWiki.\n: Fari accussì' nun avissi a' ntirfirìri cû to dipòsitu git si' si' nu sviluppaturi di MediaWiki. Talìa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manüali: Cunfigurazzioni dî peddi] p'istruzzioni supra a' comu s'attìvunu i peddi e comu si scegghî chidda pridifinuta.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (attivata)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disattivata''')",
+ "mediastatistics": "Statìstichi supra ê file multimidiali",
+ "mediastatistics-summary": "Statìstichi supra ê tipi di file carricati. Si cùntunu sulu i virsioni cchiu' novi dî file. I virsioni vecchî o cancillati vènunu escluduti.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "Tipu MIME",
+ "mediastatistics-table-extensions": "Estinsioni pussìbbili",
+ "mediastatistics-table-count": "Nùmmiru di file",
+ "mediastatistics-table-totalbytes": "Rannizza cumplissiva",
+ "mediastatistics-header-unknown": "Scanusciuti",
+ "mediastatistics-header-bitmap": "Mmàggini bitmap",
+ "mediastatistics-header-drawing": "Disigni (mmàggini vitturiali)",
+ "mediastatistics-header-audio": "Audiu",
+ "mediastatistics-header-video": "Vidiu",
+ "mediastatistics-header-multimedia": "File multimidiali cumplessi",
+ "mediastatistics-header-office": "Ufficiu",
+ "mediastatistics-header-text": "Tistuali",
+ "mediastatistics-header-executable": "Esiguìbbili",
+ "mediastatistics-header-archive": "Furmati cumpressi",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|vìrgula finali fu' livata|vìrguli finali furu livati}} dû JSON",
+ "json-error-unknown": "Mmattìu un prubblema cû JSON. Erruri: $1",
+ "json-error-depth": "Fu passatu lu massimu funnu dû stack",
+ "json-error-state-mismatch": "JSON nun vàlidu o malfurmatu",
+ "json-error-ctrl-char": "Caràttiri di cuntrollu nun privistu, forsi cudificatu mali",
+ "json-error-syntax": "Erruri di sintassi",
+ "json-error-utf8": "Caràttiri UTF-8 nun vàlidi, forsi cudificati mali",
+ "json-error-recursion": "U valuri di cudificari havi unu o cchiu' ssai rifirimenti ricursivi",
+ "json-error-inf-or-nan": "U valuri di cudificari havi unu o cchiu' ssai valuri NAN o INF",
+ "json-error-unsupported-type": "Fu' passatu nu valuri dûn tipu chi' nun si po' cudificari",
+ "special-characters-group-latin": "Latinu",
+ "special-characters-group-latinextended": "Latinu estinnutu",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Sìmmuli",
+ "special-characters-group-greek": "Grecu",
+ "special-characters-group-cyrillic": "Cirillicu",
+ "special-characters-group-arabic": "Àrabbu",
+ "special-characters-group-persian": "Persianu",
+ "special-characters-group-hebrew": "Ebbreu",
+ "special-characters-group-bangla": "Bengalisi",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalisi",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-thai": "Tailannisi",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/sco.json b/languages/i18n/sco.json
index caf7d131..7fde9aba 100644
--- a/languages/i18n/sco.json
+++ b/languages/i18n/sco.json
@@ -17,7 +17,9 @@
"sco.wikipedia.org editors",
"לערי ריינהארט",
"아라",
- "PiRSquared17"
+ "PiRSquared17",
+ "Macofe",
+ "Caliburn"
]
},
"tog-underline": "Unnerline airtins:",
@@ -34,6 +36,7 @@
"tog-watchdefault": "Eik pages n files that Ah eedit til ma watchleet",
"tog-watchmoves": "Eik pages n files that Ah muiv til ma watchleet",
"tog-watchdeletion": "Eik pages n files that Ah get rid o til ma watchleet",
+ "tog-watchrollback": "Eik pages whaur Ah'v performed ae rowback tae ma watchleet",
"tog-minordefault": "Mairk aa eedits \"smaa\" bi defaut",
"tog-previewontop": "Shaw luikower afore eedit kist n naw efter it",
"tog-previewonfirst": "Shaw luikower oan firstwhile eidit",
@@ -63,6 +66,7 @@
"underline-default": "Skin or brouser defaut",
"editfont-style": "Eidit area font style:",
"editfont-default": "Brouser defaut",
+ "editfont-monospace": "Monospaced font",
"editfont-sansserif": "Sans-serif font",
"editfont-serif": "Serif font",
"sunday": "Sunday",
@@ -181,9 +185,11 @@
"permalink": "Permanent airtin",
"print": "Prent",
"view": "See",
+ "view-foreign": "See oan $1",
"edit": "Eedit",
"edit-local": "Eedit local description",
"create": "Ceaut",
+ "create-local": "Eik local descreeption",
"editthispage": "Eedit this page",
"create-this-page": "Creaut this page",
"delete": "Delyte",
@@ -216,6 +222,7 @@
"otherlanguages": "In ither leids",
"redirectedfrom": "(Reguidit fae $1)",
"redirectpagesub": "Reguidal page",
+ "redirectto": "Reguidit tae:",
"lastmodifiedat": "This page wis hintmaist chynged oan $2, $1.",
"viewcount": "This page haes been accesst $1 {{PLURAL:$1|yince|$1 times}}.",
"protectedpage": "Protectit page",
@@ -237,6 +244,7 @@
"disclaimers": "Disclamation",
"disclaimerpage": "Project:General_disclamation",
"edithelp": "Eeditin help",
+ "helppage-top-gethelp": "Help",
"mainpage": "Main Page",
"mainpage-description": "Main Page",
"policy-url": "Project:Policie",
@@ -268,6 +276,9 @@
"hidetoc": "skauk",
"collapsible-collapse": "Collapse.",
"collapsible-expand": "Mak mair muckle",
+ "confirmable-confirm": "Ar {{GENDER:$1|ye}} sair?",
+ "confirmable-yes": "Ay",
+ "confirmable-no": "Na",
"thisisdeleted": "See or restore $1?",
"viewdeleted": "See $1?",
"restorelink": "{{PLURAL:$1|yin delytit eidit|$1 delytit eidits}}",
@@ -316,6 +327,8 @@
"filerenameerror": "Cuidna rename file \"$1\" til \"$2\".",
"filedeleteerror": "Cuidna delyte file \"$1\".",
"directorycreateerror": "Couldna creat directerie \"$1\".",
+ "directoryreadonlyerror": "Directerie \"$1\" is read-yinlie.",
+ "directorynotreadableerror": "Directerie \"$1\" is no readable.",
"filenotfound": "Coudna fynd file \"$1\".",
"unexpected": "Vailyie isnae expectit: \"$1\"=\"$2\".",
"formerror": "Mistak: cuidna haun in form",
@@ -337,7 +350,8 @@
"viewsourcetext": "Ye can leuk at n copie the soorce o this page:",
"viewyourtext": "Ye can see n copie the soorce o <strong>yer eedits</strong> til this page:",
"protectedinterface": "This page provides interface tex fer the saffware oan this wiki, n is protected fer tae hinder abuise.\nTae eik or chynge owersets fer aw wikis, please uise [//translatewiki.net/ translatewiki.net], the MediaWiki localisation waurk.",
- "editinginterface": "<strong>Warnishment:</strong> Ye'r eeditin ae page that is uised tae provide interface tex fer the saffware.\nChynges til this page will affect the kithin o the uiser interface fer ither uisers oan this wiki.\nTae eik or chynge owersets fer aw wikis, please uise [//translatewiki.net/ translatewiki.net], the MediaWiki localisation waurk.",
+ "editinginterface": "<strong>Warnishment:</strong> Ye'r eeditin ae page that is uised tae provide interface tex fer the saffware.\nChynges til this page will affect the kithin o the uiser interface fer ither uisers oan this wiki.",
+ "translateinterface": "Tae eik or chynge owersets fer aw wikis, please uise [//translatewiki.net/ translatewiki.net], the MediaWiki localisation wairk.",
"cascadeprotected": "This page haes been protectit fae eiditin, cause it is inclædit in the follaein {{PLURAL:$1|page|pages}}, that ar protectit wi the \"cascadin\" optie turnit oan:\n$2",
"namespaceprotected": "Ye dinna hae permeession tae edit pages in the '''$1''' namespace.",
"customcssprotected": "Ye dinna hae permeession tae eidit this CSS page cause it contains anither uiser's personal settings.",
@@ -352,7 +366,7 @@
"invalidtitle-knownnamespace": "Onvalit title wi namespace \"$2\" n tex \"$3\"",
"invalidtitle-unknownnamespace": "Onvalit title wi onkent namespace nummer $1 n tex \"$2\"",
"exception-nologin": "No loggit in",
- "exception-nologin-text": "Please [[Special:Userlogin|log in]] tae be able tae access this page or action.",
+ "exception-nologin-text": "Please log in tae be able tae access this page or action.",
"exception-nologin-text-manual": "Please $1 tae be able tae access this page or action.",
"virus-badscanner": "Bad confeeguration: Onken't virus scanner: <em>$1</em>",
"virus-scanfailed": "the scan failed (code $1)",
@@ -457,6 +471,7 @@
"createaccount-text": "Somebodie cræftit aen accoont fer yer wab-mail address oan {{SITENAME}} ($4) named \"$2\", wi passwaird \"$3\".\nYe shid log in n chynge yer passwaird nou.\n\nYe can ignore this message, gif this accoont wis cræftit bi mistak.",
"login-throttled": "Ye'v makit ower monie recynt login attempts.\nPlease wait $1 afore giein it anither gae.",
"login-abort-generic": "Yer login wisna successful - Aborted",
+ "login-migrated-generic": "Yer accoont's been migratit, n yer uisername nae langer exeests oan this wiki.",
"loginlanguagelabel": "Leid: $1",
"suspicious-userlogout": "Yer request tae log oot wis denied cause it luiks like it wis sent bi ae broken brouser or caching proxy.",
"createacct-another-realname-tip": "Real name is aen optie.\nGif ye chuise tae provide it, this will be uised fer giein the uiser attreebution fer their wark.",
@@ -495,6 +510,7 @@
"passwordreset-disabled": "Passwaird resets hae been disabled oan this wiki.",
"passwordreset-emaildisabled": "Wab-mail features hae been disabled oan this wiki.",
"passwordreset-username": "Uisername:",
+ "passwordreset-domain": "Domain:",
"passwordreset-capture": "See the ootcomin e-mail?",
"passwordreset-capture-help": "Gif ye check this kist, the e-mail (wi the temperie passwaird) will be shawn til ye n be sent til the uiser ava.",
"passwordreset-email": "Wab-mail address:",
@@ -506,7 +522,6 @@
"passwordreset-emailsent-capture": "Ae passwaird reset wab-mail haas been sent, this is shawn ablow.",
"passwordreset-emailerror-capture": "Ae passwaird reset wab-mail wis generated, (this is shawn ablow), but sendin it til the {{GENDER:$2|uiser}} failed: $1",
"changeemail": "Chynge wab-mail address",
- "changeemail-header": "Chynge accoont wab-mail address",
"changeemail-text": "Compleate this form tae chynge yer wab-mail address. Ye will need tae enter yer passwaird tae confirm this chynge.",
"changeemail-no-info": "Ye maun be loggit in tae access this page directly.",
"changeemail-oldemail": "Current wab-mail address:",
@@ -514,7 +529,6 @@
"changeemail-none": "(nane)",
"changeemail-password": "Yer {{SITENAME}} passwaird:",
"changeemail-submit": "Chynge wab-mail",
- "changeemail-cancel": "Cancel.",
"changeemail-throttled": "Ye'v makit ower monie recynt login attempts.\nPlease wait $1 afore giein it anither gae.",
"resettokens": "Reset tokens.",
"resettokens-text": "Ye can reset tokens that permit ye access til certain private data associated wi yer accoont here.\n\nYe shid dae it gif ye accidentally shaired theim wi somebodie or gif yer accoont haes been compromised.",
@@ -551,7 +565,8 @@
"preview": "Luikower",
"showpreview": "Shaw luikower",
"showdiff": "Shaw chynges",
- "anoneditwarning": "<strong>Warnishment:</strong>Ye'r naw loggit in. Yer IP address will be recordit in this page's eedit histerie.",
+ "blankarticle": "<strong>Wairnishment:</strong> The page that ye'r creautin is blank.\nGif ye clap \"{{int:savearticle}}\" again, the page will be creautit wioot oniething oan it.",
+ "anoneditwarning": "<strong>Warnishment:</strong> Ye'r no loggit in. Yer IP address will be publeeclie veesible gif ye mak onie eedits. Gif ye <strong>[$1 log in]</strong> or <strong>[$2 creaute aen accoont]</strong>, yer eedits will be attreebutit tae yer uisername, aes weel aes ither benefits.",
"anonpreviewwarning": "<em>Ye'r no loggit in. Hainin will record yer IP address in this page's eedit histerie.</em>",
"missingsummary": "<strong>Mynd:</strong> Ye'v naw gien aen eedit owerview. Gif ye clap oan \"{{int:savearticle}}\" again, yer eedit will be haint wioot ane.",
"missingcommenttext": "Please enter ae comment ablo.",
@@ -636,6 +651,8 @@
"edit-gone-missing": "Coudna update the page.\nIt appears tae hae been delytit.",
"edit-conflict": "Eedit confleect.",
"edit-no-change": "Yer eedit wis ignored cause nae chynge wis makit til the tex.",
+ "postedit-confirmation-created": "The page haes been creautit.",
+ "postedit-confirmation-restored": "The page haes been restored.",
"postedit-confirmation-saved": "Yer eedit wis hained.",
"edit-already-exists": "Coudna mak ae new page.\nIt awreadie exists.",
"defaultmessagetext": "Defaut message tex",
@@ -647,6 +664,10 @@
"editpage-notsupportedcontentformat-text": "The content format $1 isna supported bi the content model $2.",
"content-model-wikitext": "wikitex",
"content-model-text": "plain tex",
+ "content-model-javascript": "JavaScript",
+ "content-model-css": "CSS",
+ "duplicate-args-category": "Pages uisin dupleecate arguments in template caws",
+ "duplicate-args-category-desc": "The page contains template caws that uise dupleecates o arguments, lik <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "<strong>Warnishment:</strong> This page contains ower moni expensive parser function caws.\n\nIt shid hae less than $2 {{PLURAL:$2|caw|caws}}, thaur {{PLURAL:$1|is nou $1 caw|ar noo $1 caws}}.",
"expensive-parserfunction-category": "Pages wi ower moni expensive parser function caws",
"post-expand-template-inclusion-warning": "<strong>Warnishment Template incluid size is owermuckle. \nSome templates will na be incluidit.",
@@ -657,8 +678,10 @@
"parser-template-recursion-depth-warning": "Template recursion depth limit owershote ($1)",
"language-converter-depth-warning": "Leid converter depth limit owershote ($1)",
"node-count-exceeded-category": "Pages whaur node-coont is owershote",
- "node-count-exceeded-warning": "Page owershote the node-coont",
+ "node-count-exceeded-category-desc": "The page exceeds the mucklest node coont.",
+ "node-count-exceeded-warning": "Page owershot the node coont",
"expansion-depth-exceeded-category": "Pages whaur expansion depth is owershote",
+ "expansion-depth-exceeded-category-desc": "The page exceeds the mucklest expansion depth.",
"expansion-depth-exceeded-warning": "Page owershote the expansion depth",
"parser-unstrip-loop-warning": "Unstrip luip detected",
"parser-unstrip-recursion-limit": "Unstrip recursion limit owershote ($1)",
@@ -702,6 +725,7 @@
"rev-deleted-event": "(log action remuived)",
"rev-deleted-user-contribs": "[uisername or IP address remuived - eidit skauk't fae contreebutions]",
"rev-deleted-text-permission": "This page reveesion haes been <strong>delytit</strong>.\nDetails can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].",
+ "rev-suppressed-text-permission": "This page reveesion haes been <strong>suppressed</strong>.\nTae fynd oot why the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
"rev-deleted-text-unhide": "This page luikower haes been <strong>delytit</strong>.\nDetails can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].\nYe can still [$1 see this luikower] gif ye wish tae proceed.",
"rev-suppressed-text-unhide": "This page luikower haes been <strong>suppressed</strong>.\nDetails can be foond in the [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].\nYe can still [$1 see this luikower] gif ye wish tae proceed.",
"rev-deleted-text-view": "This page luikower haes been <strong>delytit</strong>.\nYe can see it; the details can be foond in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} delytion log].",
@@ -786,7 +810,6 @@
"mergehistory-same-destination": "Soorce n destination pages canna be the same",
"mergehistory-reason": "Raison:",
"mergelog": "Merge log.",
- "pagemerge-logentry": "merged [[$1]] intil [[$2]] (reveesions up til $3)",
"revertmerge": "Onmerge",
"mergelogpagetext": "Ablow is ae leet o the maist recent merges o yin page histerie intil anither.",
"history-title": "Reveesion histerie o \"$1\"",
@@ -827,6 +850,7 @@
"search-result-category-size": "{{PLURAL:$1|1 memmer|$1 memmers}} ({{PLURAL:$2|1 subcategerie|$2 subcategeries}}, {{PLURAL:$3|1 file|$3 files}})",
"search-redirect": "(reguide $1)",
"search-section": "(section $1)",
+ "search-category": "(categerie $1)",
"search-file-match": "(matches file content.)",
"search-suggest": "Did ye mean: $1",
"search-interwiki-caption": "Sister projec's",
@@ -837,7 +861,7 @@
"searchall": "aw",
"showingresults": "Shawin ablo up tae {{PLURAL:$1|'''1''' ootcome|'''$1''' ootcomes}} stertin wi #'''$2'''.",
"showingresultsinrange": "Shawin ablo up til {{PLURAL:$1|<strong>1</strong> ootcome|<strong>$1</strong> ootcome}} in range #<strong>$2</strong> til #<strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5|Ootcome <strong>$1</strong> o <strong>$3</strong>|Ootcomes <strong>$1 - $2</strong> o <strong>$3</strong>}} fer <strong>$4</strong>",
+ "search-showingresults": "{{PLURAL:$4|Ootcome <strong>$1</strong> o <strong>$3</strong>|Ootcomes <strong>$1 - $2</strong> o <strong>$3</strong>}}",
"search-nonefound": "Thaur were naw ootcomes matchin the speiring.",
"powersearch-legend": "Advanced rake",
"powersearch-ns": "Rake in namespaces:",
@@ -851,7 +875,7 @@
"preferences": "Ma preferences",
"mypreferences": "Ma preferences",
"prefs-edits": "Nummer o eidits:",
- "prefsnologintext2": "Please $1 tae chynge yer preferences.",
+ "prefsnologintext2": "Please log in tae chynge yer preferences.",
"prefs-skin": "Skin",
"skin-preview": "First Leuk",
"datedefault": "Nae preferance",
@@ -875,6 +899,7 @@
"restoreprefs": "Restore aw defaut settins (in aw sections)",
"prefs-editing": "Eeditin",
"rows": "Raws:",
+ "columns": "Columns:",
"searchresultshead": "Rake ootcome settins",
"stub-threshold": "Threeshaud fer <a href=\"#\" class=\"stub\">stub airtin</a> formattin (bytes):",
"stub-threshold-disabled": "Disablt",
@@ -884,6 +909,8 @@
"prefs-help-recentchangescount": "This includes recent chynges, page histories, n logs.",
"prefs-help-watchlist-token2": "This is the hidlins key til the wab feed o yer watchleet. Onibodie wha kens this can read yer watchleet, sae dinna shair it. Gif ye need to, [[Special:ResetTokens|Ye can reset it]].",
"savedprefs": "Yer preferences haes been hained.",
+ "timezonelegend": "Time zone:",
+ "localtime": "Local time:",
"timezoneuseserverdefault": "Uise wiki defaut ($1)",
"timezoneuseoffset": "Ither (speceefie affset)",
"servertime": "Server time the nou",
@@ -896,9 +923,11 @@
"timezoneregion-atlantic": "Atlaunteec Ocean",
"timezoneregion-australia": "Australie",
"timezoneregion-europe": "Europ",
+ "timezoneregion-indian": "Indian Ocean",
"timezoneregion-pacific": "Paceefic Ocean",
"allowemail": "Allou email fae ither uisers",
"prefs-searchoptions": "Rake",
+ "prefs-namespaces": "Namespaces",
"default": "defaut",
"prefs-files": "Files",
"prefs-custom-css": "Custom CSS",
@@ -924,12 +953,14 @@
"gender-female": "She eedits wiki pages",
"prefs-help-gender": "Settin this preference is aen optie.\nThe saffware uises its value tae address ye n tae mention ye til ithers uisin the appropriate grammatical gender.\nThis information will be publeec.",
"email": "E-mail",
- "prefs-help-realname": "Real name is aen optie.\nGif ye chuise tae provide it, this will be uised fer giein ye attreebution fer yer wark.",
+ "prefs-help-realname": "Real name is aen optie.\nGif ye chuise tae provide it, this will be uised fer giein ye attreebution fer yer wirk.",
"prefs-help-email": "Wab-mail is optional, bit is needed fer passwaird resets, shid ye ferget yer passwaird.",
"prefs-help-email-others": "Ye can chuise tae let ithers contact ye bi wab-mail through ae link oan yer uiser or tauk page.\nYer wab-mail address isna revealed whan ither uisers contact ye.",
"prefs-help-email-required": "Yer e-mail address is needit.",
+ "prefs-info": "Baseec information",
"prefs-i18n": "Internaitionalisation",
"prefs-signature": "Signatur",
+ "prefs-dateformat": "Date format",
"prefs-timeoffset": "Time affset",
"prefs-advancedediting": "General opties",
"prefs-editor": "Eediter",
@@ -940,8 +971,10 @@
"prefs-advancedwatchlist": "Advanced opties",
"prefs-displayrc": "Displey opties",
"prefs-displaywatchlist": "Displey opties",
+ "prefs-tokenwatchlist": "Token",
"prefs-diffs": "Diffs",
"prefs-help-prefershttps": "This preeferance will tak effect oan yer nex login.",
+ "prefswarning-warning": "Ye'v makit chynges tae yer preferances that'v no been hained yet.\nGif ye leave this page wioot clapin \"$1\" than yer preferances 'll no be updatit.",
"prefs-tabs-navigation-hint": "Tip: Ye can uise the cair n richt arrae keys tae naveegate atween the tabs in the tabs leet.",
"email-address-validity-valid": "Wab-mail address appears tae be valid",
"email-address-validity-invalid": "Enter ae valid wab-mail address",
@@ -969,17 +1002,22 @@
"group-autoconfirmed": "Autæconfirmed uisers",
"group-bot": "Bots",
"group-sysop": "Admeenistraters",
+ "group-bureaucrat": "Bureaucrats",
"group-suppress": "Owersichts",
"group-all": "(aw)",
"group-user-member": "{{GENDER:$1|uiser}}",
"group-autoconfirmed-member": "{{GENDER:$1|autæconfirmed uiser}}",
"group-bot-member": "{{GENDER:$1|bot}}",
"group-sysop-member": "{{GENDER:$1|admeenistrater}}",
+ "group-bureaucrat-member": "{{GENDER:$1|bureaucrat}}",
"group-suppress-member": "{{GENDER:$1|owersicht}}",
"grouppage-user": "{{ns:project}}:Uisers",
"grouppage-autoconfirmed": "{{ns:project}}:Autæconfirmed uisers",
+ "grouppage-bot": "{{ns:project}}:Bots",
"grouppage-sysop": "{{ns:project}}:Admeenistraters",
+ "grouppage-bureaucrat": "{{ns:project}}:Bureaucrats",
"grouppage-suppress": "{{ns:project}}:Owersicht",
+ "right-read": "Read pages",
"right-edit": "Eedit pages",
"right-createpage": "Cræft pages (that arna tauk pages)",
"right-createtalk": "Cræft discussion pages",
@@ -988,6 +1026,7 @@
"right-move": "Muiv pages",
"right-move-subpages": "Muiv pages wi thair subpages",
"right-move-rootuserpages": "Muiv ruit uiser pages",
+ "right-move-categorypages": "Muiv categerie pages",
"right-movefile": "Muiv files",
"right-suppressredirect": "Na cræft reguidals fae soorce pages whan muivin pages",
"right-upload": "Uplaid files",
@@ -1010,6 +1049,7 @@
"right-browsearchive": "Rake delytit pages",
"right-undelete": "Ondelyte ae page",
"right-suppressrevision": "See, skauk n onskauk speceefic reveesions o pages fae onie uiser",
+ "right-viewsuppressed": "See owerluiks that'r skaukt fae onie uiser",
"right-suppressionlog": "see preevate logs",
"right-block": "Block ither uisers fae eeditin",
"right-blockemail": "Block ae uiser fae sendin wab-mail",
@@ -1020,6 +1060,7 @@
"right-protect": "Chynge protection levels n eedit cascade-protected pages",
"right-editprotected": "Eedit pages protected aes \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Eedit pages protected aes \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Eedit the content model o ae page",
"right-editinterface": "Eedit the uiser interface",
"right-editusercssjs": "Eedit ither uisers' CSS n JavaScript files",
"right-editusercss": "Eedit ither uisers' CSS files",
@@ -1051,14 +1092,17 @@
"newuserlogpagetext": "This is ae log o uiser cræftins.",
"rightslog": "Uiser richts log",
"rightslogtext": "This is a log o chynges tae uiser richts.",
+ "action-read": "read this page",
"action-edit": "eedit this page",
"action-createpage": "cræft pages",
"action-createtalk": "cræft discussion pages",
"action-createaccount": "cræft this uiser accoont",
+ "action-history": "see the histerie o this page",
"action-minoredit": "maurk this eedit aes smaa",
"action-move": "muiv this page",
"action-move-subpages": "mui this page, n its subpages",
"action-move-rootuserpages": "muiv ruit uiser pages",
+ "action-move-categorypages": "muiv categerie pages",
"action-movefile": "muiv this file",
"action-upload": "uplaid this file",
"action-reupload": "owerwrite this exeestin file",
@@ -1089,6 +1133,7 @@
"action-viewmywatchlist": "see yer watchleet",
"action-viewmyprivateinfo": "see yer preevate information",
"action-editmyprivateinfo": "eedit yer preevate information",
+ "action-editcontentmodel": "eedit the content model o ae page",
"nchanges": "$1 {{PLURAL:$1|chynge|chynges}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sin laist veesit}}",
"enhancedrc-history": "histeri",
@@ -1102,6 +1147,7 @@
"recentchanges-label-bot": "This eedit wis performed bi ae bot",
"recentchanges-label-unpatrolled": "This eedit haes no bin patrolled yet",
"recentchanges-label-plusminus": "The page size chynged bi this nummer o bytes",
+ "recentchanges-legend-heading": "'''Legend:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (see [[Special:NewPages|leet o new pages]] n aw)",
"rcnotefrom": "Ablo {{PLURAL:$5|is the chynge|ar the chynges}} sin <strong>$3, $4</strong> (up tae <strong>$1</strong> shawn).",
"rclistfrom": "Shaw new chynges stertin fae $3 $2",
@@ -1135,6 +1181,7 @@
"rc_categories": "Limit til categeries (separate wi \"|\")",
"rc_categories_any": "Onie",
"rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} efter chynge",
+ "newsectionsummary": "/* $1 */ new section",
"rc-enhanced-expand": "Shaw details",
"rc-enhanced-hide": "Skauk details",
"rc-old-title": "oreeginlie cræftit aes \"$1\"",
@@ -1157,9 +1204,11 @@
"upload-recreate-warning": "'''Warnishment: Ae file bi that name haes been delytit or muived.'''\n\nThe delytion n muiv log fer this page ar gien here fer conveeneeance:",
"uploadtext": "Uise the form ablo tae uplaid files.\nTae see or rake aforegaun uplaided files gang til the [[Special:FileList|leet o uplaided files]], (re)uplaids ar loggit in the [[Special:Log/upload|uplaid log]] aes weel, n delytions in the [[Special:Log/delete|delytion log]].\n\nTae incluid ae file in ae page, uise aen airtin in yin o the follaein forms:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> tae uise the ful version o the file\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt tex]]</nowiki></code></strong> tae uise ae 200 pixel wide rendeetion in ae kist in the cair margin wi \"alt tex\" aes descreeption\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> fer linkin directlie til the file wioot displeyin the file.",
"upload-permitted": "Permitit file types: $1.",
+ "upload-preferred": "Preferred file types: $1.",
"upload-prohibited": "Proheebited file types: $1.",
"uploadlogpage": "Uplaid log",
"uploadlogpagetext": "Ablo is ae leet o the maist recynt file uplaids.\nSee the [[Special:NewFiles|gallerie o new files]] fer ae mair veesual luikower.",
+ "filename": "Filename",
"filedesc": "Ootline",
"fileuploadsummary": "Ootline:",
"filereuploadsummary": "File chynges:",
@@ -1314,17 +1363,20 @@
"nolicense": "Nane selectit",
"licenses-edit": "Eedit license options",
"license-nopreview": "(Luikower naw available)",
- "upload_source_url": "(ae valid, publeeclie accessible URL)",
- "upload_source_file": "(ae file oan yer computer)",
+ "upload_source_url": "(yer chosen file fae ae valid, publeeclie accessible URL)",
+ "upload_source_file": "(yer chosen file fae yer computer)",
+ "listfiles-delete": "delyte",
"listfiles-summary": "This speecial page shaws aw uplaided files.",
"listfiles_search_for": "Rake fer media name:",
"imgfile": "file",
"listfiles": "The file leet",
"listfiles_thumb": "Thummnail",
+ "listfiles_date": "The Date",
"listfiles_name": "Name",
"listfiles_user": "Uiser",
"listfiles_size": "Size",
"listfiles_description": "Descreeption",
+ "listfiles_count": "Versions",
"listfiles-show-all": "Incluide auld versions o eemages",
"listfiles-latestversion": "The Nou version",
"listfiles-latestversion-yes": "Ay",
@@ -1342,6 +1394,7 @@
"filehist-nothumb": "Naw thummnail",
"filehist-user": "Uiser",
"filehist-dimensions": "Dimensions",
+ "filehist-filesize": "The File size",
"filehist-comment": "Comment",
"imagelinks": "File uisage",
"linkstoimage": "The follaein {{PLURAL:$1|page airts|$1 pages airt}} tae this file:",
@@ -1402,28 +1455,24 @@
"randomincategory": "Random page in categerie",
"randomincategory-invalidcategory": "\"$1\" isna ae valid categerie name.",
"randomincategory-nopages": "Thaur's naw pages in the [[:Category:$1|$1]] categerie.",
- "randomincategory-selectcategory": "Get random page fae categerie: $1 $2.",
- "randomincategory-selectcategory-submit": "Gae",
+ "randomincategory-category": "Categerie:",
+ "randomincategory-legend": "Random page in categerie",
"randomredirect": "Random reguidal",
"randomredirect-nopages": "Thaur's naw reguidals in the namespace \"$1\".",
"statistics": "Stateestics",
"statistics-header-pages": "Page stateestics",
"statistics-header-edits": "Eidit stateestics",
- "statistics-header-views": "See stateesteecs",
"statistics-header-users": "Uiser stateestics",
"statistics-header-hooks": "Ither stateestics",
+ "statistics-articles": "Content pages",
"statistics-pages": "Pages",
"statistics-pages-desc": "Aw pages in the wiki, incluidin tauk pages, reguidals, etc.",
"statistics-files": "Uplaided files",
"statistics-edits": "Page eedits sin {{SITENAME}} wis set up",
"statistics-edits-average": "Average eedits per page",
- "statistics-views-total": "Seeins total",
- "statistics-views-total-desc": "Seeins til non-exeestant pages n speecial pages'r naw incluidit",
- "statistics-views-peredit": "Seeins per eedit",
"statistics-users": "Registered [[Special:ListUsers|uisers]]",
"statistics-users-active": "Acteeve uisers",
"statistics-users-active-desc": "Uisers that hae performed aen action in the laist {{PLURAL:$1|day|$1 days}}",
- "statistics-mostpopular": "Maist seen pages",
"pageswithprop": "Pages wi ae page propertie",
"pageswithprop-legend": "Pages wi ae page propertie",
"pageswithprop-text": "This page leets pages that uise ae particular page propertie.",
@@ -1447,6 +1496,7 @@
"fewestrevisions": "Pages wi the fewest reeveesions",
"nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
"ncategories": "$1 {{PLURAL:$1|categerie|categeries}}",
+ "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
"nlinks": "$1 {{PLURAL:$1|airtin|airtins}}",
"nmembers": "$1 {{PLURAL:$1|memmer|memmers}}",
"nmemberschanged": "$1 → $2 {{PLURAL:$2|memmer|memmers}}",
@@ -1468,7 +1518,9 @@
"wantedpages-badtitle": "Onvalid title in ootcome set: $1",
"wantedfiles": "Wantit files",
"wantedfiletext-cat": "The follaein files ar uised but dinna exeest. Files fae foreign repositeries micht be leetit despite exeestin. Onie sic false poseeteeves will be <del>struck oot</del>. Addeetionallie, pages that embed files that dinna exeest ar leetit in [[:$1]].",
+ "wantedfiletext-cat-noforeign": "The follaein files ar uised but dinna exeest. Mair than that, pages that embed files that dinna exeest ar leetit in [[:$1]].",
"wantedfiletext-nocat": "The follaein files ar uised but dinna exeest. Files fae foreign repositeries micht be leetit despite exeestin. Onie sic false poseeteeves will be <del>struck oot</del>.",
+ "wantedfiletext-nocat-noforeign": "The folleain files ar uised but dinna exeest.",
"wantedtemplates": "Wantit templates",
"mostlinked": "Maist airtit-tae pages",
"mostlinkedcategories": "Maist airtit-tae categeries",
@@ -1480,6 +1532,7 @@
"prefixindex": "Aw pages wi prefix",
"prefixindex-namespace": "Aw pages wi preefix ($1 namespace)",
"prefixindex-strip": "Strip preefix in leet",
+ "shortpages": "Short pages",
"longpages": "Lang pages",
"deadendpages": "Deid-end pages",
"deadendpagestext": "The follaein pages dinna link til ither pages in {{SITENAME}}.",
@@ -1521,9 +1574,11 @@
"pager-older-n": "{{PLURAL:$1|aulder 1|aulder $1}}",
"suppress": "Owersicht",
"querypage-disabled": "This speecial page is disablit fer performance raisons.",
+ "apihelp": "API help",
+ "apihelp-no-such-module": "Module \"$1\" wis no foond.",
"booksources": "Buik soorces",
"booksources-search-legend": "Rake fer buik soorces",
- "booksources-go": "Gang",
+ "booksources-search": "Rake",
"booksources-text": "Ablo is ae leet o airtins til ither steids that sell new n uised buiks, n micht hae further information aneat buiks that ye'r seekin ava:",
"booksources-invalid-isbn": "The gien ISBN disna seem tae be valid; check fer mistaks copiein fae the oreeginal soorce.",
"specialloguserlabel": "Performer:",
@@ -1590,6 +1645,9 @@
"listgrouprights-removegroup-self": "Remuiv {{PLURAL:$2|groop|groops}} fae yer accoont: $1",
"listgrouprights-addgroup-self-all": "Eik aw groops til yer accoont",
"listgrouprights-removegroup-self-all": "Remuiv aw groops fae yer accoont",
+ "listgrouprights-namespaceprotection-header": "Namespace restreections",
+ "listgrouprights-namespaceprotection-namespace": "Namespace",
+ "listgrouprights-namespaceprotection-restrictedto": "Richt(s) allooing ae uiser tae eedit",
"trackingcategories": "Keepin track o categeries",
"trackingcategories-summary": "This page leets the trackin categeries that ar autæmateecallie populatit bi the MediaWiki saffware. Thair names can be chynged bi alterin the reelavant system messages in the {{ns:8}} namespace.",
"trackingcategories-msg": "The Trackin Categerie",
@@ -1597,11 +1655,11 @@
"trackingcategories-desc": "Categerie inclusion criteria",
"noindex-category-desc": "The page haes ae <code><nowiki>__NOINDEX__</nowiki></code> mageec waird oan it (n is in ae namespace whaur that flag is alloud), n sae it's no indext bi the robots.",
"index-category-desc": "The page haes ae <code><nowiki>__INDEX__</nowiki></code> oan it (n is in ae namespace whaur that flag is alloud), n sae it's indext bi the robots whaur it widna normallie be.",
- "post-expand-template-inclusion-category-desc": "Efter makin aw o the templates muckler, the page size is muckler than <code>$wgMaxArticleSize</code>, sae some templates were no makit muckler.",
- "post-expand-template-argument-category-desc": "Efter makin ae template argument muckler (sommit in triple braces, lik <code>{{{Foo}}})</code>, the page is muckler than <code>$wgMaxArticleSize</code>.",
- "expensive-parserfunction-category-desc": "Ower monie expenseeve parser functions (lik <code>#ifexist</code>) incluidit oan ae page. See [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
- "broken-file-category-desc": "Categerie eikit gif the page contains ae broken file airtin (aen airtin tae embed ae file whan the file disna exeest).",
- "hidden-category-category-desc": "This is ae categerie wi <code><nowiki>__HIDDENCAT__</nowiki></code> oan it, This prevents it fae shawin up in the categerie airtins kist oan pages, bi defaut.",
+ "post-expand-template-inclusion-category-desc": "The page size is muckler than <code>$wgMaxArticleSize</code>, efter makin aw o the templates muckler, sae some templates were no makit muckler.",
+ "post-expand-template-argument-category-desc": "The page is muckler than <code>$wgMaxArticleSize</code> efter makin ae template argument muckler (sommit in triple braces, lik <code>{{{Foo}}})</code>.",
+ "expensive-parserfunction-category-desc": "The page uises ower monie expenseeve parser functions (lik <code>#ifexist</code>). See [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "The page contains ae broken file airtin (aen airtin tae embed ae file whan the file disna exeest).",
+ "hidden-category-category-desc": "The categerie contains <code><nowiki>__HIDDENCAT__</nowiki></code> in its page content, this hinders it fae shawin up in the categerie airtins kist oan pages, bi defaut.",
"trackingcategories-nodesc": "Nae descreeption is available.",
"trackingcategories-disabled": "The categerie is disabled",
"mailnologin": "Nae send address",
@@ -1626,6 +1684,7 @@
"emailto": "Til:",
"emailsubject": "Aneat:",
"emailmessage": "Message:",
+ "emailsend": "Send",
"emailccme": "Wab-mail me ae copie o ma message.",
"emailccsubject": "Copie o yer message til $1: $2",
"emailsent": "Wab-mail sent",
@@ -1637,12 +1696,14 @@
"mywatchlist": "Ma watchleet",
"watchlistfor2": "Fer $1 $2",
"nowatchlist": "Ye'v nae eitems oan yer watchleet.",
- "watchlistanontext": "Please $1 tae see or eedit eetems oan yer watchlet.",
+ "watchlistanontext": "Please login tae see or eedit eetems oan yer watchlet.",
"watchnologin": "Nae loggit in",
"addwatch": "Eik til watchleet",
"addedwatchtext": "The page \"[[:$1]]\" haes been added til yer [[Special:Watchlist|watchleet]].\nFutur chynges til this page n its associated tauk page will be leeted thaur.",
+ "addedwatchtext-short": "The page \"$1\" haes been eikit tae yer watchleet.",
"removewatch": "Remuiv fae watchleet",
"removedwatchtext": "The page \"[[:$1]]\" haes been remuied fae [[Special:Watchlist|yer watchleet]].",
+ "removedwatchtext-short": "The page \"$1\" haes been remuived fae yer watchleet.",
"watch": "Watch",
"watchthispage": "Watch this page",
"unwatch": "Onwatch",
@@ -1652,8 +1713,8 @@
"watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} oan yer watchleet, no coontin tauk pages seperatlie.",
"wlheader-enotif": "Wab-mail annooncemant is enabled.",
"wlheader-showupdated": "Pages that hae been chynged sin ye last veesitit thaim ar shawn in '''baud'''.",
- "wlnote": "Ablo {{PLURAL:$1|is the laist chynge|ae the laist '''$1''' chynges}} in the laist {{PLURAL:$2|hoor|'''$2''' hoors}}, aes o $3, $4.",
- "wlshowlast": "Shaw hainmaist $1 hoors $2 days $3",
+ "wlnote": "Ablo {{PLURAL:$1|is the laist chynge|ae the laist <strong>$1</strong> chynges}} in the laist {{PLURAL:$2|hoor|<strong>$2</strong> hoors}}, aes o $3, $4.",
+ "wlshowlast": "Shaw the hainmaist $1 hoors $2 days",
"watchlist-options": "Watchleet opties",
"watching": "Watchin...",
"unwatching": "Onwatchin...",
@@ -1677,12 +1738,13 @@
"created": "cræftit",
"changed": "chynged",
"deletepage": "Delyte page",
+ "confirm": "Confirm",
"excontent": "content wis: '$1'",
"excontentauthor": "content wis: '$1' (n the ae contreebuter wis '[[Special:Contributions/$2|$2]]')",
"exbeforeblank": "content afore blankin wis: '$1'",
"delete-confirm": "Delyte \"$1\"",
"delete-legend": "Delyte",
- "historywarning": "<strong>Warnishment:</strong> The page that ye'r aboot tae delyte haes ae histerie wi approximatelie $1 {{PLURAL:$1|reveesion|reveesions}}:",
+ "historywarning": "<strong>Warnishment:</strong> The page that ye'r aboot tae delyte haes ae histerie wi $1 {{PLURAL:$1|reveesion|reveesions}}:",
"confirmdeletetext": "Ye'r aboot tae delyte ae page or eemage alang wi aw its histerie fae the database.\nPlease confirm that ye intend tae dae this, that ye unnerstaun the consequences,\nn that ye'r daein this in accord wi [[{{MediaWiki:Policy-url}}]].",
"actioncomplete": "Action duin",
"actionfailed": "Action failed",
@@ -1698,9 +1760,9 @@
"delete-edit-reasonlist": "Eedit delytion raisons",
"delete-toobig": "This page haes ae muckle eedit histerie, ower $1 {{PLURAL:$1|reveesion|reveesions}}.\nDelytion o sic pages haes been restrictit tae stap accidental disruption o {{SITENAME}}.",
"delete-warning-toobig": "This page haes ae muckle eedit histerie, ower $1 {{PLURAL:$1|reveesion|reveesions}}.\nDelytin it micht disrupt database operations o {{SITENAME}};\nproceed wi caution.",
+ "deleteprotected": "Ye canna delyte this page cause it's been fended.",
"deleting-backlinks-warning": "'''Warnishment:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Ither pages]] airt til or transcluide the page ye'r aboot tae delyte.",
"rollback": "Row back eedits",
- "rollback_short": "Rowback",
"rollbacklink": "rowback",
"rollbacklinkcount": "rowback $1 {{PLURAL:$1|eedit|eedits}}",
"rollbacklinkcount-morethan": "rowback mair than $1 {{PLURAL:$1|eedit|eedits}}",
@@ -1711,6 +1773,7 @@
"revertpage": "Reverted eidits bi [[Special:Contributions/$2|$2]] ([[User talk:$2|tauk]]) til laist reveesion bi [[User:$1|$1]]",
"revertpage-nouser": "Reverted eedits bi ae skaukt uiser til laist revesion bi {{GENDER:$1|[[User:$1|$1]]}}",
"rollback-success": "Reverted eedits b $1;\nchynged back til the laist reveesion bi $2.",
+ "sessionfailure-title": "Session failure",
"sessionfailure": "Thaur seems tae be ae proablem wi yer login session;\nthis action haes been canceled aes ae precaution again session hijackin.\nGang back til the preeveeoos page, relaid that page n than gie it anither gae.",
"protectlogpage": "Fend log",
"protectlogtext": "Ablow is ae leet o chynges til page protections.\nSee the [[Special:ProtectedPages|protected pages leet]] fer the leet o currently operational page protections.",
@@ -1721,8 +1784,11 @@
"protect-title": "Chynge protection level fer \"$1\"",
"protect-title-notallowed": "See protection level o \"$1\"",
"prot_1movedto2": "[[$1]] muivit tae [[$2]]",
+ "protect-badnamespace-title": "No-fendable namespace",
"protect-badnamespace-text": "Pages in this namespace canna be protected.",
"protect-norestrictiontypes-text": "This page canna be protected aes thaur's naw restreection types available.",
+ "protect-norestrictiontypes-title": "No-fendable page",
+ "protect-legend": "Confirm fendin",
"protectcomment": "Raison:",
"protectexpiry": "Expires:",
"protect_expiry_invalid": "Expirie time is onvalit.",
@@ -1746,6 +1812,7 @@
"protect-othertime": "Ither time:",
"protect-othertime-op": "ither time",
"protect-existing-expiry": "Exeestin expirie time: $3, $2",
+ "protect-existing-expiry-infinity": "Exeestin expirie time: infeenit",
"protect-otherreason": "Ither/addeetional raison:",
"protect-otherreason-op": "Ither raison",
"protect-dropdown": "*Commyn protection raisons\n** Excesseeve vandaleesm\n** Excesseeve spammin\n** Coonter-producteeve eedit warrin\n** Hei traffeec page",
@@ -1755,6 +1822,7 @@
"restriction-level": "Restreection level:",
"minimum-size": "Smaaest size",
"maximum-size": "Mucklest size:",
+ "pagesize": "(bytes)",
"restriction-edit": "Eidit",
"restriction-move": "Muiv",
"restriction-create": "Creaut",
@@ -1776,11 +1844,14 @@
"undelete-revision": "Deleted reveesion o $1 (aes o $4, at $5) bi $3:",
"undeleterevision-missing": "Onvalid or missin reveesion.\nYe micht hae ae bad link, or the reveesion micht hae been restored or remuived fae the archive.",
"undelete-nodiff": "Naw preeveeoos reveesion foond.",
+ "undeletebtn": "Restore",
"undeletelink": "see/restore",
"undeleteviewlink": "see",
+ "undeleteinvert": "Invert the selection",
"undeletecomment": "Raison:",
"undeletedrevisions": "{{PLURAL:$1|1 reveesion|$1 reveesions}} restored",
"undeletedrevisions-files": "{{PLURAL:$1|1 reveesion|$1 reveesions}} n {{PLURAL:$2|1 file|$2 files}} restored",
+ "undeletedfiles": "{{PLURAL:$1|1 file|$1 files}} restored",
"cannotundelete": "Ondelyte failed:\n$1",
"undeletedpage": "<strong>$1 haes been restored</strong>\n\nConsult the [[Special:Log/delete|delytion log]] fer ae record o recynt delytions n restorations.",
"undelete-header": "See [[Special:Log/delete|the delytion log]] fer the recentlie delytit pages.",
@@ -1801,12 +1872,14 @@
"namespace": "Namespace:",
"invert": "Invert selection",
"tooltip-invert": "Check this kist tae skauk chynges til pages wiin the selectit namespace (n the associatit namespace gif checked)",
+ "namespace_association": "Associatit namespace",
"tooltip-namespace_association": "Check this kist foreby tae incluid the tauk or subject namespace associatit wi the selectit namespace",
"blanknamespace": "(Main)",
"contributions": "{{GENDER:$1|Uiser}} contributions",
"contributions-title": "Uiser contreebutions fer $1",
"mycontris": "Ma contreebutions",
"contribsub2": "Fer {{GENDER:$3|$1}} ($2)",
+ "contributions-userdoesnotexist": "Uiser accoont \"$1\" is no registerit.",
"nocontribs": "Nae chynges wis funnd matchin thir criteria.",
"uctop": "(current)",
"month": "Fae month (n afore):",
@@ -1848,7 +1921,7 @@
"autoblockid": "Autæblock #$1",
"block": "Block uiser",
"unblock": "Onblock uiser",
- "blockip": "Block uiser",
+ "blockip": "Block {{GENDER:$1|uiser}}",
"blockip-legend": "Block uiser",
"blockiptext": "Uise the form ablo tae block write access fae ae speceefic IP address or uisername. This shid be dun juist tae hinder vandaleesm, n in accord wi [[{{MediaWiki:Policy-url}}|policie]]. Fil in ae speceefic raison ablo (fer exemplar, citin parteecular pages that were vandalised).",
"ipaddressorusername": "IP address or uisername:",
@@ -1866,6 +1939,7 @@
"ipbwatchuser": "Watch this uiser's uiser n tauk pages",
"ipb-disableusertalk": "Stap this uiser fae eeditin thair ain tauk page while blockit",
"ipb-change-block": "Re-block the uiser wi thir settins",
+ "ipb-confirm": "Confirm the block",
"badipaddress": "That IP address is nae guid",
"blockipsuccesssub": "Block succeedit",
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] haes been blockit.\n<br />See [[Special:BlockList|block leet]] tae review blocks.",
@@ -1876,13 +1950,14 @@
"ipb-unblock-addr": "Onblock $1",
"ipb-unblock": "Onblock ae uisername or IP address",
"ipb-blocklist": "See exeestin blocks",
- "ipb-blocklist-contribs": "Contreebutions fer $1",
+ "ipb-blocklist-contribs": "Contreebutions fer {{GENDER:$1|$1}}",
"unblockip": "Onblock uiser",
"unblockiptext": "Uise the form ablo tae restore screevin richts\ntil aen afore-blockit IP address or uisername.",
"ipusubmit": "Remuive this block",
"unblocked": "[[User:$1|$1]] haes been onblockit.",
"unblocked-range": "$1 haes been onblockit.",
"unblocked-id": "Block $1 haes been remuived.",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] haes been onblockt.",
"blocklist": "Blockit uisers",
"ipblocklist": "Blockit uisers",
"ipblocklist-legend": "Fynd ae blockit uiser",
@@ -1890,12 +1965,14 @@
"blocklist-tempblocks": "Skauk temparie blocks",
"blocklist-addressblocks": "Skauk single IP blocks",
"blocklist-rangeblocks": "Skauk range blocks",
+ "blocklist-timestamp": "Timestamp",
"blocklist-target": "Tairget",
"blocklist-expiry": "Dies",
"blocklist-by": "Blockin admeen",
"blocklist-params": "Block boonds",
"blocklist-reason": "Raison",
"ipblocklist-submit": "Rake",
+ "ipblocklist-localblock": "Local block",
"ipblocklist-otherblocks": "Ither {{PLURAL:$1|block|blocks}}",
"infiniteblock": "infeenite",
"expiringblock": "dies oan $1 at $2",
@@ -1946,11 +2023,13 @@
"cant-see-hidden-user": "The uiser that ye'r attemptin tae block haes awreadie been blockit n skaukt.\nAes ye dinna hae the skaukuiser richt, ye canna see or eedit the uiser's block.",
"ipbblocked": "Ye canna block or onblock ither uisers cause ye yersel is blockit.",
"ipbnounblockself": "Yer na permitit tae onblock yersel.",
+ "lockdb": "Lock database",
"unlockdb": "Lowse database",
"lockdbtext": "Lockin the database will suspend the abeelitie o aw uisers tae eedit pages, chynge thair preeferences, eedit thair watchleets, n ither things needin chynges in the database. Please confirm that this is whit ye'r etlin tae dae, n that ye'll lowse the database whan yer maintenance is dun.",
"unlockdbtext": "Lowsin the database will gie back the abeelitie fer aa uisers tae eidit pages, chynge their preeferences, eidit their watchleets, an ither things needin chynges in the database. Please confirm that this is whit ye ettle tae dae.",
"lockconfirm": "Ai, Ah reellie want tae lock the database.",
"unlockconfirm": "Ai, Ah reellie want tae lowse the database.",
+ "lockbtn": "Lock database",
"unlockbtn": "Lowse database",
"locknoconfirm": "Ye didna tick the confirmation kist.",
"lockdbsuccesssub": "Database lock fine",
@@ -1967,11 +2046,14 @@
"movepagetalktext": "The associated tauk page will be autaematiclie muived alang wi it <strong>onless:</strong>\n*A no-tuim tauk page awreadie exeests unner the new name, or\n*Ye oncheck the kist ablo.\n\nIn thae cases, ye will hae tae muiv or merge the page manuallie gif ye sae desire.",
"movearticle": "Muiv page:",
"moveuserpage-warning": "<strong>Warnishment:</strong> Ye'r aboot tae muiv ae uiser page. Please tak tent that yinlie the page will be muivd n the uiser will <em>naw</em> be renamed.",
+ "movecategorypage-warning": "<strong>Wairnishment:</strong> Ye'r aboot tae muiv ae categerie page. Please mynd that yinlie the page'll be muived n onie pages in the auld categerie will <em>no</em> be recategerised intae the new categerie.",
"movenologintext": "Ye maun be a registert uiser n [[Special:UserLogin|loggit in]] tae muiv ae page.",
"movenotallowed": "Ye dinna hae permeession tae muiv pages.",
"movenotallowedfile": "Ye dinna hae permeession tae muiv files.",
"cant-move-user-page": "Ye dinna hae permeession tae muiv uiser pages (aside fae subpages).",
"cant-move-to-user-page": "Ye dinna hae permeession tae muiv ae page til ae uiser page (except til ae uiser subpage).",
+ "cant-move-category-page": "Ye dinna hae permeession tae muiv categerie pages.",
+ "cant-move-to-category-page": "Ye dinna hae permeession tae muiv ae page tae ae categerie page.",
"newtitle": "Til new teitle",
"move-watch": "Watch soorce page n tairget page",
"movepagebtn": "Muiv page",
@@ -1990,6 +2072,7 @@
"movepage-max-pages": "The mmucklest o $1 {{PLURAL:$1|page|pages}} haes been muived n naw mair will be muived autæmateeclie.",
"movelogpage": "Muiv log",
"movelogpagetext": "Ae leet o aw page muives is ablo.",
+ "movesubpage": "{{PLURAL:$1|Subpage|Subpages}}",
"movesubpagetext": "This page haes $1 {{PLURAL:$1|subpage|subpages}} shawn ablo.",
"movenosubpage": "This page haes naw subpages.",
"movereason": "Raison:",
@@ -2021,8 +2104,11 @@
"exportcuronly": "Inclæde juist the nou reveesion, naw the ful histerie",
"exportnohistory": "----\n<strong>Mynd:</strong> Exportin the ful histerie o pages throogh this form haes been disabled cause o performance raisons.",
"exportlistauthors": "Incluid ae ful leet o contreebuters fer ilka page",
+ "export-submit": "Export",
"export-addcattext": "Eik pages fae categerie:",
+ "export-addcat": "Eik",
"export-addnstext": "Eik pages fae namespace:",
+ "export-addns": "Eik",
"export-download": "Hain aes file",
"export-templates": "Incluid templates",
"export-pagelinks": "Incluid linkt pages til ae depth o:",
@@ -2032,6 +2118,7 @@
"allmessagescurrent": "Message tex the nou",
"allmessagestext": "This is ae leet o seestem messages available in the MediaWiki namespace.\nPlease veesit [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] n [//translatewiki.net translatewiki.net] gif ye wish tae contreebute tae the generic MediaWiki localisation.",
"allmessagesnotsupportedDB": "This page canna be uised cause <strong>$wgUseDatabaseMessages</strong> haes been disablt.",
+ "allmessages-filter-legend": "Filter",
"allmessages-filter": "Filter b custymization state:",
"allmessages-filter-unmodified": "Onmodified",
"allmessages-filter-all": "Aw",
@@ -2054,27 +2141,37 @@
"thumbnail_gd-library": "Oncompleate GD librie confeeguration: Missin function $1",
"thumbnail_image-missing": "File seems tae be missin: $1",
"thumbnail_image-failure-limit": "Thaur hae been ower monie recynt failed attempts ($1 or mair) tae render this thummnail. Please ettle again later.",
+ "import": "Import pages",
+ "importinterwiki": "Transwiki import",
"import-interwiki-text": "Select ae wiki n page title tae import.\nReveesion dates n eediters' names will be preserved.\nAw transwiki import actions ar loggit at the [[Special:Log/import|import log]].",
- "import-interwiki-source": "Soorce wiki/page:",
+ "import-interwiki-sourcewiki": "The Soorce wiki:",
+ "import-interwiki-sourcepage": "The Soorce page:",
"import-interwiki-history": "Copie aw histerie reveesions fer this page",
"import-interwiki-templates": "Incluid aw templates",
+ "import-interwiki-submit": "Import",
"import-interwiki-namespace": "Desteenation namespace:",
"import-interwiki-rootpage": "Desteenation ruit page (aen optie):",
+ "import-upload-filename": "Filename:",
+ "import-comment": "Comment:",
"importtext": "Please export the file fae the soorce wiki uising the [[Special:Export|export utilitie]].\nHain it til yer computer n uplaid it here.",
"importstart": "Importin pages...",
"import-revision-count": "$1 {{PLURAL:$1|reveesion|reveesions}}",
"importnopages": "Naw pages tae import.",
"imported-log-entries": "Imported $1 {{PLURAL:$1|log entrie|log entries}}.",
+ "importfailed": "The Import failed: <nowiki>$1</nowiki>",
"importunknownsource": "Onkent import soorce type",
"importcantopen": "Coudna apen import file",
+ "importbadinterwiki": "Bad interwiki airtin",
"importsuccess": "Importit fine!",
"importnosources": "Nae transwiki import soorces haes been defined n direct histerie uplaids is disabled.",
"importnofile": "Naw import file wis uplaided.",
"importuploaderrorsize": "Uplaid o import file failed.\nThe file is muckler than the permitit uplaid size.",
"importuploaderrorpartial": "Uplaid o import file failed.\nThe file wis yinlie pairtlie uplaided.",
"importuploaderrortemp": "Uplaid o import file failed.\nAe temparie fauder is missin.",
+ "import-parse-failure": "XML import parse failure",
"import-noarticle": "Naw page tae import!",
"import-nonewrevisions": "Nae reveesions imported (aw were either awreadie present, or skipt cause o mistaks).",
+ "xml-error-string": "$1 oan line $2, col $3 (byte $4): $5",
"import-upload": "Uplaid XML data",
"import-token-mismatch": "Loss o session data.\nPlease gie it anither gae.",
"import-invalid-interwiki": "Canna import fae the speceefied wiki.",
@@ -2088,12 +2185,13 @@
"import-options-wrong": "Wrang {{PLURAL:$2|optie|opties}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "Gien ruit page is aen onvalit title.",
"import-rootpage-nosubpage": "Namespace \"$1\" o the ruit page disna permit subpages.",
+ "importlogpage": "The Import log",
"importlogpagetext": "Admeenistrateeve imports o pages wi eedit histerie fae ither wikis.",
"import-logentry-upload": "imported [[$1]] bi file uplaid",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|reveesion|reveesions}} importit",
+ "import-logentry-interwiki": "transwikied $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|reveesion|reveesions}} importit fae $2",
"javascripttest": "JavaScript testin",
- "javascripttest-title": "Rinnin $1 tests",
"javascripttest-pagetext-noframework": "This page is reserved fer rinnin JavaScript tests.",
"javascripttest-pagetext-unknownframework": "Onkent testin framewairk \"$1\".",
"javascripttest-pagetext-frameworks": "Please chuise yin o the follaein testin framewairks: $1",
@@ -2108,6 +2206,7 @@
"tooltip-pt-mycontris": "Leet o yer contreebutions",
"tooltip-pt-login": "It's ae guid idea tae log in, but ye dinna hae tae.",
"tooltip-pt-logout": "Log oot",
+ "tooltip-pt-createaccount": "We encoorage ye tae creaute aen accoont n log in; houever, it's no strictllie nesisair",
"tooltip-ca-talk": "Discussion aneat the content page",
"tooltip-ca-edit": "Ye can eedit this page. Please uise the luikower button afore hainin",
"tooltip-ca-addsection": "Stairt ae new section",
@@ -2137,6 +2236,7 @@
"tooltip-feed-atom": "Atom feed fer this page",
"tooltip-t-contributions": "See ae leet o this uiser's contreebutions",
"tooltip-t-emailuser": "Send ae wab-mail til this uiser",
+ "tooltip-t-info": "Mair information aneat this page",
"tooltip-t-upload": "Uplaid files",
"tooltip-t-specialpages": "Ae leet o aw byordinar pages",
"tooltip-t-print": "Prentable version o this page",
@@ -2162,7 +2262,7 @@
"tooltip-recreate": "Recræft the page even thoogh it's been delytit",
"tooltip-upload": "Stairt uplaid",
"tooltip-rollback": "\"Rowback\" reverts eedit(s) til this page o the laist contreebuter in yin clap",
- "tooltip-undo": "\"Ondae\" reverts this eedit n apens the eedit form in luikower mode. It permits addin ae raison in the owerview.",
+ "tooltip-undo": "\"Ondae\" reverts this eedit n apens the eedit form in luikower mode. It allous eikin ae raison in the owerview.",
"tooltip-preferences-save": "Hain preeferances",
"tooltip-summary": "Enter ae short owerview",
"anonymous": "Nameless {{PLURAL:$1|uiser|uisers}} o {{SITENAME}}",
@@ -2175,22 +2275,29 @@
"anonusers": "{{SITENAME}} anonymoos {{PLURAL:$2|uiser|uisers}} $1",
"creditspage": "Page creeedits",
"nocredits": "Thaur's nae creedit info available fer this page.",
+ "spamprotectiontitle": "Spam protection filter",
"spamprotectiontext": "The tex ye wished tae save wis blockit bi the spam filter.\nThis is maistlikly caused bi aen airtin til ae blaickleeted external site.",
"spamprotectionmatch": "The follaein tex is whit triggered wir spam filter: $1",
+ "spambot_username": "MediaWiki spam cleanup",
"spam_reverting": "Revertin til the laist reveesion na containin links til $1",
"spam_blanking": "Aw reveesions contained links til $1, blankin",
"spam_deleting": "Aw reveesions contained links til $1, delytin",
"simpleantispam-label": "Anti-spam check.\nDiv <strong>NAW</strong> ful this in!",
"pageinfo-title": "Information fer \"$1\"",
"pageinfo-not-current": "Sairrie, it's na possible tae provide this information fer auld reveesions.",
+ "pageinfo-header-basic": "Baseec information",
"pageinfo-header-edits": "Eedit histerie",
+ "pageinfo-header-restrictions": "Page fendin",
+ "pageinfo-header-properties": "Page properties",
"pageinfo-display-title": "Displey title",
"pageinfo-default-sort": "Defaut sort key",
+ "pageinfo-length": "Page langth (in bytes)",
+ "pageinfo-article-id": "The Page ID",
"pageinfo-language": "Page content leid",
+ "pageinfo-content-model": "The Page content model",
"pageinfo-robot-policy": "Indexin bi robots",
"pageinfo-robot-index": "Permitit",
"pageinfo-robot-noindex": "Na permitit",
- "pageinfo-views": "Nummer o luiks",
"pageinfo-watchers": "Nummer o page watchers",
"pageinfo-few-watchers": "Less than $1 {{PLURAL:$1|watcher|watchers}}",
"pageinfo-redirects-name": "Nummer o reguidals til this page",
@@ -2208,7 +2315,9 @@
"pageinfo-hidden-categories": "Skaukt {{PLURAL:$1|categerie|categeries}} ($1)",
"pageinfo-templates": "Transcluided {{PLURAL:$1|template|templates}} ($1)",
"pageinfo-transclusions": "{{PLURAL:$1|Page|Pages}} transcluided oan ($1)",
+ "pageinfo-toolboxlink": "Page information",
"pageinfo-redirectsto": "Reguidals til",
+ "pageinfo-redirectsto-info": "info",
"pageinfo-contentpage": "Coonted aes ae content page",
"pageinfo-contentpage-yes": "Ay",
"pageinfo-protect-cascading": "Protections ar cascadin fae here",
@@ -2244,7 +2353,10 @@
"mediawarning": "<strong>Warnishment:</strong> This file type micht contain maleecious code.\nBi executin it, yer system micht be compromised.",
"imagemaxsize": "Eemage size leemit:<br /><em>(fer file descreeption pages)</em>",
"thumbsize": "Thummnail size:",
+ "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|page|pages}}",
+ "file-info": "file size: $1, MIME type: $2",
"file-info-size": "$1 × $2 pixels, file size: $3, MIME type: $4",
+ "file-info-size-pages": "$1 × $2 pixels, file size: $3, MIME type: $4, $5 {{PLURAL:$5|page|pages}}",
"file-nohires": "Nae heier resolution available.",
"svg-long-desc": "SVG file, nominallie $1 × $2 pixels, file size: $3",
"svg-long-desc-animated": "Animated SVG file, nominallie $1 × $2 pixels, file size: $3",
@@ -2252,40 +2364,61 @@
"show-big-image": "Oreeginal file",
"show-big-image-preview": "Size o this luikower: $1.",
"show-big-image-other": "Ither {{PLURAL:$2|resolution|resolutions}}: $1.",
+ "show-big-image-size": "$1 × $2 pixels",
"file-info-gif-looped": "luip't",
+ "file-info-gif-frames": "$1 {{PLURAL:$1|frame|frames}}",
"file-info-png-looped": "luip't",
"file-info-png-repeat": "pleyed $1 {{PLURAL:$1|time|times}}",
+ "file-info-png-frames": "$1 {{PLURAL:$1|frame|frames}}",
"file-no-thumb-animation": "<strong>Mynd: Due til techneecal limitations, thummnails o this file will na be animated.</strong>",
"file-no-thumb-animation-gif": "<strong>Mynd: Due til techneecal limitations, thummnails o hei resolution GIF eemages sic aes this will na be animated.</strong>",
"newimages": "Gallerie o new files",
"imagelisttext": "Ablo is a leet o $1 {{PLURAL:$1|eemage|eemages}} sortit $2.",
"newimages-summary": "This byordinair page shaws the last uplaidit files.",
+ "newimages-legend": "Filter",
"newimages-label": "Filename (or ae pairt o it):",
+ "newimages-showbots": "Shaw uplaids bi bots",
"noimages": "Nawthing tae see.",
"ilsubmit": "Rake",
"bydate": "bi date",
"sp-newimages-showfrom": "Shaw new files stairtin fae $2, $1",
"seconds": "{{PLURAL:$1|$1 seicont|$1 seiconts}}",
+ "minutes": "{{PLURAL:$1|$1 minute|$1 minutes}}",
"hours": "{{PLURAL:$1|$1 hoor|$1 hoors}}",
+ "days": "{{PLURAL:$1|$1 day|$1 days}}",
+ "weeks": "{{PLURAL:$1|$1 week|$1 weeks}}",
+ "months": "{{PLURAL:$1|$1 month|$1 months}}",
+ "years": "{{PLURAL:$1|$1 year|$1 years}}",
"ago": "$1 sin",
"just-now": "richt nou",
"hours-ago": "$1 {{PLURAL:$1|hoor|hoors}} sin",
"minutes-ago": "$1 {{PLURAL:$1|minute|minutes}} sin",
"seconds-ago": "$1 {{PLURAL:$1|seicont|seiconts}} sin",
"monday-at": "Monenday at $1",
+ "tuesday-at": "Tuesday at $1",
"wednesday-at": "Wedensday at $1",
+ "thursday-at": "Thursday at $1",
"friday-at": "Frisday at $1",
+ "saturday-at": "Saturday at $1",
+ "sunday-at": "Sunday at $1",
+ "yesterday-at": "Yesterday at $1",
"bad_image_list": "The format is aes follaes:\n\nAinlie leet eetems (lines stairtin wi *) ar considered. The foremaist airtin oan ae line maun be aen airtin til aen ill file. Onie subsequent airtins oan the same line ar considered tae be exceptions, i,e., pages whaur the eemage can occur inline.",
"metadata": "Metadata",
"metadata-help": "This file contains addeetional information, likelie eikit fae the deegital camera or scanner uised tae cræft or deegitise it. \nGif the file haes bin modeefied fae its oreeginal state, some details micht na fullie reflect the modeefied file.",
"metadata-expand": "Shaw extendit details",
"metadata-collapse": "Skauk extendit details",
"metadata-fields": "Eemage metadata fields leetit in this message will be incluidit oan eemage page displey whan the metadata buird is collaps't. Ithers will be skaukt bi defaut. \n* mak\n* model\n* datetimeoreeginal\n* exposuretime\n* fnummer\n* isospeedratins\n* focallength\n* airtist\n* copiericht\n* eemagedescreeption\n* gpslateetuid\n* gpslangeetuid\n* gpsalteetuid",
+ "exif-imagewidth": "Width",
"exif-imagelength": "Heicht",
+ "exif-bitspersample": "Bits per component",
+ "exif-compression": "Compression scheme",
"exif-photometricinterpretation": "Pixel composeetion",
+ "exif-orientation": "Orientation",
"exif-samplesperpixel": "Nummer o components",
+ "exif-planarconfiguration": "Data arrangement",
"exif-ycbcrsubsampling": "Subsamplin ratio o Y til C",
"exif-ycbcrpositioning": "Y n C poseetionin",
+ "exif-xresolution": "Horizontal resolution",
"exif-yresolution": "Verteecal resolution",
"exif-stripoffsets": "Eemage data location",
"exif-rowsperstrip": "Nummer o raws per streep",
@@ -2298,9 +2431,12 @@
"exif-referenceblackwhite": "Pair o blaick n white referance values",
"exif-datetime": "File chynge date n time",
"exif-imagedescription": "Eemage title",
+ "exif-make": "Camera manufacturer",
+ "exif-model": "The Camera model",
"exif-software": "Saffware uised",
"exif-artist": "Writer",
"exif-copyright": "Copiericht hauder",
+ "exif-exifversion": "Exif version",
"exif-flashpixversion": "Supportit Flashpix version",
"exif-colorspace": "Colour space",
"exif-componentsconfiguration": "Meanin o ilka component",
@@ -2314,23 +2450,46 @@
"exif-subsectime": "DateTime subseiconts",
"exif-subsectimeoriginal": "DateTimeOreeginal subseiconts",
"exif-subsectimedigitized": "DateTimeDeegeetized subseiconts",
+ "exif-exposuretime": "Exposure time",
+ "exif-exposuretime-format": "$1 sec ($2)",
"exif-fnumber": "F Nummer",
+ "exif-exposureprogram": "Exposure Program",
"exif-spectralsensitivity": "Spectral sensiteevitie",
"exif-isospeedratings": "ISO speed ratin",
+ "exif-shutterspeedvalue": "APEX shutter speed",
+ "exif-aperturevalue": "APEX aperture",
"exif-brightnessvalue": "APEX brichtness",
+ "exif-exposurebiasvalue": "APEX exposure bias",
"exif-maxaperturevalue": "Mucklest launn aperture",
+ "exif-subjectdistance": "Subject distance",
"exif-meteringmode": "Meterin mode",
"exif-lightsource": "Licht soorce",
+ "exif-flash": "Flash",
+ "exif-focallength": "Lens focal langth",
"exif-subjectarea": "Subject airt",
"exif-flashenergy": "Flash energie",
+ "exif-focalplanexresolution": "Focal plane X resolution",
+ "exif-focalplaneyresolution": "Focal plane Y resolution",
+ "exif-focalplaneresolutionunit": "Focal plane resolution unit",
+ "exif-subjectlocation": "Subject location",
+ "exif-exposureindex": "Exposure index",
"exif-sensingmethod": "Sensin methyd",
"exif-filesource": "File soorce",
+ "exif-scenetype": "Scene type",
"exif-customrendered": "Custym eemage processin",
+ "exif-exposuremode": "Exposure mode",
+ "exif-whitebalance": "White balance",
"exif-digitalzoomratio": "Deegeetal zuim ratio",
+ "exif-focallengthin35mmfilm": "Focal length in 35 mm film",
+ "exif-scenecapturetype": "Scene captur type",
+ "exif-gaincontrol": "Scene control",
+ "exif-contrast": "Contrast",
+ "exif-saturation": "Saturation",
"exif-sharpness": "Shairpness",
"exif-devicesettingdescription": "Device settins descreeption",
"exif-subjectdistancerange": "Subject deestance range",
"exif-imageuniqueid": "Uníque eemage ID",
+ "exif-gpsversionid": "GPS tag version",
"exif-gpslatituderef": "Nort or sooth lateetude",
"exif-gpslatitude": "Lateetude",
"exif-gpslongituderef": "Aest or west langeetude",
@@ -2340,7 +2499,9 @@
"exif-gpstimestamp": "GPS time (atomeec clock)",
"exif-gpssatellites": "Satellites uised fer measurement",
"exif-gpsstatus": "Receever status",
+ "exif-gpsmeasuremode": "Measurement mode",
"exif-gpsdop": "Measurement preeceesion",
+ "exif-gpsspeedref": "Speed unit",
"exif-gpsspeed": "Speed o GPS receever",
"exif-gpstrackref": "Referance fer direction o muivement",
"exif-gpstrack": "Direction o muivement",
@@ -2357,7 +2518,9 @@
"exif-gpsdestdistance": "Distance til destination",
"exif-gpsprocessingmethod": "Name o GPS processin methyd",
"exif-gpsareainformation": "Name o GPS airt",
+ "exif-gpsdatestamp": "GPS date",
"exif-gpsdifferential": "GPS differantial correction",
+ "exif-jpegfilecomment": "JPEG file comment",
"exif-keywords": "Keywairds",
"exif-worldregioncreated": "Region o the Yird that the picture wis taen in",
"exif-countrycreated": "Kintra that the picture wis taen in",
@@ -2371,6 +2534,7 @@
"exif-provinceorstatedest": "Provínce or state shawn",
"exif-citydest": "Ceetie shawn",
"exif-sublocationdest": "Sublocation o ceetie shawn",
+ "exif-objectname": "Short title",
"exif-specialinstructions": "Byordiair insructions",
"exif-headline": "Heidline",
"exif-credit": "Creedit/Provider",
@@ -2381,7 +2545,10 @@
"exif-locationdest": "Location depeected",
"exif-locationdestcode": "Code o location depeected",
"exif-objectcycle": "Time o day that media is intended fer",
+ "exif-contact": "Contact information",
+ "exif-writer": "Writer",
"exif-languagecode": "Leid",
+ "exif-iimversion": "IIM version",
"exif-iimcategory": "Categerie",
"exif-iimsupplementalcategory": "Supplemental categeries",
"exif-datetimeexpires": "Dinna uise efter",
@@ -2391,6 +2558,7 @@
"exif-lens": "Lens uised",
"exif-serialnumber": "Serial nummer o camera",
"exif-cameraownername": "Ainer o camera",
+ "exif-label": "Label",
"exif-datetimemetadata": "Date metadata wis laist modeefied",
"exif-nickname": "Informal name o eemage",
"exif-rating": "Ratin (oot o 5)",
@@ -2404,8 +2572,13 @@
"exif-morepermissionsurl": "Alternative licensin information",
"exif-attributionurl": "Whan re-uisin this wairk, please link til",
"exif-preferredattributionname": "Whan re-uisin this wairk, please creedit",
+ "exif-pngfilecomment": "PNG file comment",
+ "exif-disclaimer": "Disclaimer",
"exif-contentwarning": "Content warnishment",
+ "exif-giffilecomment": "GIF file comment",
"exif-intellectualgenre": "Type o eetem",
+ "exif-subjectnewscode": "Subject code",
+ "exif-scenecode": "IPTC scene code",
"exif-event": "Event depected",
"exif-organisationinimage": "Organization depected",
"exif-personinimage": "Person depected",
@@ -2418,6 +2591,7 @@
"exif-copyrighted-true": "Copierichted",
"exif-copyrighted-false": "Copiericht status na set",
"exif-unknowndate": "Onkent date",
+ "exif-orientation-1": "Ordinair",
"exif-orientation-2": "Flipt horizontallie",
"exif-orientation-3": "Rotatit 180°",
"exif-orientation-4": "Flipt verticlie",
@@ -2426,25 +2600,35 @@
"exif-orientation-7": "Rotatit 90° CW n flipt verticlie",
"exif-orientation-8": "Rotatit 90° CW",
"exif-planarconfiguration-1": "chunkie format",
+ "exif-planarconfiguration-2": "planar format",
"exif-colorspace-65535": "Oncalibratit",
"exif-componentsconfiguration-0": "disna exeest",
"exif-exposureprogram-0": "Na defined",
+ "exif-exposureprogram-1": "Manual",
+ "exif-exposureprogram-2": "Ordinair program",
"exif-exposureprogram-3": "Apertur prioritie",
"exif-exposureprogram-4": "Shutter prioritie",
"exif-exposureprogram-5": "Cræftie program (biased thewaird the depth o field)",
"exif-exposureprogram-6": "Action program (biased thewaird fast shutter speed)",
"exif-exposureprogram-7": "Portrait mode (fer closeup photæs wi the backgroond oot o focus)",
"exif-exposureprogram-8": "Launnscape mode (fer launnscape photæs wi the backgroonn in focus)",
+ "exif-subjectdistance-value": "$1 meters",
"exif-meteringmode-0": "Onkent",
+ "exif-meteringmode-1": "Average",
"exif-meteringmode-2": "Center weichtit average",
+ "exif-meteringmode-3": "Spot",
"exif-meteringmode-4": "Multí-Spot",
+ "exif-meteringmode-5": "Pattern",
"exif-meteringmode-6": "Pairtial",
"exif-meteringmode-255": "Ither",
"exif-lightsource-0": "Onkent",
"exif-lightsource-1": "Daylicht",
"exif-lightsource-2": "Fluorescant",
"exif-lightsource-3": "Tungsten (incandescant licht)",
+ "exif-lightsource-4": "Flash",
+ "exif-lightsource-9": "Fine weather",
"exif-lightsource-10": "Cloodie weather",
+ "exif-lightsource-11": "Gloam",
"exif-lightsource-12": "Daylicht fluorescant (D 5700 – 7100K)",
"exif-lightsource-13": "Day white fluorescant (N 4600 – 5400K)",
"exif-lightsource-14": "Cuil white fluorescant (W 3900 – 4500K)",
@@ -2452,8 +2636,10 @@
"exif-lightsource-17": "Staunart licht A",
"exif-lightsource-18": "Staunart licht B",
"exif-lightsource-19": "Staunart licht C",
+ "exif-lightsource-24": "ISO studio tungsten",
"exif-lightsource-255": "Ither licht soorce",
"exif-flash-fired-0": "Flash didna fire",
+ "exif-flash-fired-1": "Flash fired",
"exif-flash-return-0": "naw flash return detection function",
"exif-flash-return-2": "flash return licht na detectit",
"exif-flash-return-3": "flash return licht detectit",
@@ -2462,6 +2648,7 @@
"exif-flash-mode-3": "autæ mode",
"exif-flash-function-1": "Naw flash function",
"exif-flash-redeye-1": "reid-ee reduction mode",
+ "exif-focalplaneresolutionunit-2": "inches",
"exif-sensingmethod-1": "Ondefined",
"exif-sensingmethod-2": "Yin-chip colour airt senser",
"exif-sensingmethod-3": "Twa-chip colour airt senser",
@@ -2471,25 +2658,33 @@
"exif-sensingmethod-8": "Colour sequential linear senser",
"exif-filesource-3": "Deegeetal still camera",
"exif-scenetype-1": "Ae directlie photægraphed eemage",
+ "exif-customrendered-0": "Ordinair process",
"exif-customrendered-1": "Custym process",
"exif-exposuremode-0": "Autæ exposure",
+ "exif-exposuremode-1": "Manual exposure",
"exif-exposuremode-2": "Autæ bracket",
"exif-whitebalance-0": "Autæ white balance",
+ "exif-whitebalance-1": "Manual white balance",
"exif-scenecapturetype-0": "Staunart",
"exif-scenecapturetype-1": "Launscape",
+ "exif-scenecapturetype-2": "Portrait",
"exif-scenecapturetype-3": "Nicht scene",
"exif-gaincontrol-0": "Nane",
"exif-gaincontrol-1": "Law gain up",
"exif-gaincontrol-2": "Hei gain up",
"exif-gaincontrol-3": "Law gain doon",
"exif-gaincontrol-4": "Hei gain doon",
+ "exif-contrast-0": "Ordinair",
"exif-contrast-1": "Saft",
"exif-contrast-2": "Haurd",
+ "exif-saturation-0": "Ordinair",
"exif-saturation-1": "Law saturation",
"exif-saturation-2": "Hei saturation",
+ "exif-sharpness-0": "Ordinair",
"exif-sharpness-1": "Saff",
"exif-sharpness-2": "Haurd",
"exif-subjectdistancerange-0": "Onkent",
+ "exif-subjectdistancerange-1": "Macro",
"exif-subjectdistancerange-2": "Claise luik at",
"exif-subjectdistancerange-3": "Distance sechtline",
"exif-gpslatitude-n": "Nort lateetude",
@@ -2498,19 +2693,32 @@
"exif-gpslongitude-w": "West langeetude",
"exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|meter|meters}} abuin sea level",
"exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|meter|meters}} ablo sea level",
+ "exif-gpsstatus-a": "Measurement in progress",
"exif-gpsstatus-v": "Measurement interoperabeelitie",
+ "exif-gpsmeasuremode-2": "2-dimensional measurement",
+ "exif-gpsmeasuremode-3": "3-dimensional measurement",
"exif-gpsspeed-k": "Kilometers aen hoor",
"exif-gpsspeed-m": "Miles aen hoor",
+ "exif-gpsspeed-n": "Knots",
+ "exif-gpsdestdistance-k": "Kilometers",
+ "exif-gpsdestdistance-m": "Miles",
"exif-gpsdestdistance-n": "Nauteecal miles",
"exif-gpsdop-excellent": "Excellant ($1)",
"exif-gpsdop-good": "Guid ($1)",
+ "exif-gpsdop-moderate": "Moderate ($1)",
+ "exif-gpsdop-fair": "Fair ($1)",
"exif-gpsdop-poor": "Puir ($1)",
"exif-objectcycle-a": "Mornin yinlie",
"exif-objectcycle-p": "Evenin yinlie",
"exif-objectcycle-b": "Baith mornin n evenin",
+ "exif-gpsdirection-t": "True direction",
"exif-gpsdirection-m": "Magneteec direction",
+ "exif-ycbcrpositioning-1": "Centerit",
+ "exif-ycbcrpositioning-2": "Co-steidit",
"exif-dc-contributor": "Contreebuters:",
"exif-dc-coverage": "Spatial or tempral scope o media",
+ "exif-dc-date": "Date(s)",
+ "exif-dc-publisher": "Publisher",
"exif-dc-relation": "Relatit media",
"exif-dc-rights": "Richts",
"exif-dc-source": "Soorce media",
@@ -2521,6 +2729,8 @@
"exif-iimcategory-clj": "Crime n law",
"exif-iimcategory-dis": "Disasters n accidants",
"exif-iimcategory-fin": "Economie n business",
+ "exif-iimcategory-edu": "Education",
+ "exif-iimcategory-evn": "Environment",
"exif-iimcategory-hth": "The Heal",
"exif-iimcategory-hum": "Fawk interest",
"exif-iimcategory-lab": "Laber",
@@ -2529,11 +2739,13 @@
"exif-iimcategory-rel": "Releegion n truent",
"exif-iimcategory-sci": "Sciance n technologie",
"exif-iimcategory-soi": "Social eessues",
+ "exif-iimcategory-spo": "Sports",
"exif-iimcategory-war": "War, conflict n onrest",
+ "exif-iimcategory-wea": "Weather",
+ "exif-urgency-normal": "Ordinair ($1)",
"exif-urgency-low": "Law ($1)",
"exif-urgency-high": "Hei ($1)",
"exif-urgency-other": "Uiser-defined prioritie ($1)",
- "watchlistall2": "aw",
"namespacesall": "aw",
"monthsall": "aw",
"confirmemail": "Confirm wab-mail address",
@@ -2565,8 +2777,11 @@
"confirm_purge_button": "OK",
"confirm-purge-top": "Clair the cache o this page?",
"confirm-purge-bottom": "Purgin ae page clears the cache n forces the maist recynt reveesion tae appear.",
+ "confirm-watch-button": "OK",
"confirm-watch-top": "Eik this page til yer watchleet?",
+ "confirm-unwatch-button": "OK",
"confirm-unwatch-top": "Remuiv this page fae yer watchleet?",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← preeveeoos page",
"imgmultipagenext": "nex page →",
"imgmultigo": "Gang!",
@@ -2574,8 +2789,11 @@
"img-lang-default": "(defaut leid)",
"img-lang-info": "Render this eemage in $1. $2",
"img-lang-go": "Gang",
+ "ascending_abbrev": "asc",
+ "descending_abbrev": "desc",
"table_pager_next": "Page aifter",
"table_pager_prev": "Page afore",
+ "table_pager_first": "First page",
"table_pager_last": "Laist page",
"table_pager_limit": "Shaw $1 eetems per page",
"table_pager_limit_label": "Eetems per page:",
@@ -2585,6 +2803,7 @@
"autosumm-replace": "Replacin page wi '$1'",
"autoredircomment": "Reguidin til [[$1]]",
"autosumm-new": "Cræftit page wi \"$1\"",
+ "autosumm-newblank": "Creautit blank page",
"lag-warn-normal": "Chynges newer than $1 {{PLURAL:$1|seicont|seiconts}} micht na be shawn in this leet.",
"lag-warn-high": "Cause o hei database server lag, chynges newer than $1 {{PLURAL:$1|seicont|seiconts}} micht na be shawn in this leet.",
"watchlistedit-normal-title": "Eedit watchleet",
@@ -2594,28 +2813,49 @@
"watchlistedit-normal-done": "{{PLURAL:$1|1 title wis|$1 titles were}} remuived fae yer watchleet:",
"watchlistedit-raw-title": "Eedit raw watchleet",
"watchlistedit-raw-legend": "Eedit raw watchleet",
- "watchlistedit-raw-explain": "Titles oan yer watchleet ar shawn ablo, n can be eeditit bi addin til n remuivin fae the leet;\nyin title per line.\nWhan dun, clap \"{{int:Watchlistedit-raw-submit}}\".\nYe can [[Special:EditWatchlist|uise the staundairt eediter]] ava.",
+ "watchlistedit-raw-explain": "Titles oan yer watchleet ar shawn ablo, n can be eeditit bi eikin til n remuivin fae the leet;\nyin title per line.\nWhan dun, clap \"{{int:Watchlistedit-raw-submit}}\".\nYe can [[Special:EditWatchlist|uise the staundairt eediter]] n aw.",
+ "watchlistedit-raw-titles": "Titles:",
"watchlistedit-raw-submit": "Update watchleet",
"watchlistedit-raw-done": "Yer watchleet haes been updated.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 title wis|$1 titles were}} added:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 title wis|$1 titles were}} remuived:",
+ "watchlistedit-clear-title": "Cleared watchleet",
+ "watchlistedit-clear-legend": "Clear watchleet",
+ "watchlistedit-clear-explain": "Aw o the titles will be remuived fae yer watchleet",
+ "watchlistedit-clear-titles": "Titles:",
+ "watchlistedit-clear-submit": "Clear the watchleet (This is fer aye!)",
+ "watchlistedit-clear-done": "Yer watchleet's been cleared.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|1 title wis|$1 titles were}} remuived:",
+ "watchlistedit-too-many": "Thaur's ower monie pages tae displey here.",
+ "watchlisttools-clear": "Clear the watchleet",
"watchlisttools-view": "See reelavant chynges",
"watchlisttools-edit": "See n eedit watchleet",
"watchlisttools-raw": "Eedit raw watchleet",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|tauk]])",
- "unknown_extension_tag": "Onkent extension tag \"$1\"",
"duplicate-defaultsort": "<strong>Warnishment:</strong> Defaut sort key \"$2\" owerrides earlier defaut sort key \"$1\".",
+ "duplicate-displaytitle": "<strong>Warnishment:</strong> Displey title \"$2\" owerrides the earlier displey title \"$1\".",
+ "invalid-indicator-name": "<strong>Mistak:</strong> Page status indicaters' <code>name</code> attreebute maunna be tuim.",
+ "version": "Version",
"version-extensions": "Instawed extensions",
+ "version-skins": "Instawed skins",
"version-specialpages": "Byordinar pages",
"version-parserhooks": "Parser huiks",
"version-variables": "Vareeables",
+ "version-antispam": "Spam hinderance",
"version-other": "Ither",
"version-mediahandlers": "Media haunnlers",
"version-hooks": "Huiks",
+ "version-parser-extensiontags": "Parser extension tags",
"version-parser-function-hooks": "Parser function huiks",
"version-hook-name": "Huik name",
"version-hook-subscribedby": "Subscribed bi",
"version-no-ext-name": "[no name]",
+ "version-license": "MediaWiki License",
+ "version-ext-license": "License",
+ "version-ext-colheader-name": "Extension",
+ "version-skin-colheader-name": "Skin",
+ "version-ext-colheader-version": "Version",
+ "version-ext-colheader-license": "License",
"version-ext-colheader-description": "Descreeption",
"version-ext-colheader-credits": "Writers",
"version-license-title": "License fer $1",
@@ -2628,26 +2868,35 @@
"version-credits-summary": "We'd like tae recognize the follaein fawk fer thair contreebution til [[Special:Version|MediaWiki]].",
"version-license-info": "MediaWiki is free saffware; ye can reedistreebute it n/or modifie it unner the terms o the GNU General Public License aes publeesht bi the Free Software Foundation; either version 2 o the License, or (bi yer optie) onie later version.\n\nMediaWiki is distreebuted in the hope that it will be uissfu, bit WIOOT ONIE WARRANTIE; wioot even the implied warrantie o MERCHANTABILITIE or FITNESS FER AE PARTEECULAR PURPYSS. See the GNU General Public License fer mair details.\n\nYe shid hae receeved [{{SERVER}}{{SCRIPTPATH}}/COPIEIN ae copie o the GNU General Public License] alang wi this program; gif na, write til 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].",
"version-software": "Instawed saffware",
+ "version-software-product": "Product",
+ "version-software-version": "Version",
"version-entrypoints": "Entrie point URLs",
"version-entrypoints-header-entrypoint": "Entrie point",
+ "version-entrypoints-header-url": "URL",
"redirect": "Reguidal bi file, uiser, page or reveesion ID",
"redirect-legend": "Reguidal til ae file or page",
"redirect-summary": "This byordiair page reguides til ae file (gien the file name), ae page (gien ae reveesion ID or page ID), or ae uiser page (gien ae numereec uiser ID). Uissage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/reveesion/328429]], or [[{{#Special:Redirect}}/uiser/101]].",
"redirect-submit": "Gang",
"redirect-lookup": "Luikup:",
+ "redirect-value": "Value:",
"redirect-user": "Uiser ID",
+ "redirect-page": "Page ID",
"redirect-revision": "Page reveesion",
+ "redirect-file": "File name",
"redirect-not-exists": "Value na foond",
"fileduplicatesearch": "Rake fer dupleecate files",
"fileduplicatesearch-summary": "Rake fer dupleecate files based oan hash values.",
"fileduplicatesearch-legend": "Rake fer ae dupleecate",
"fileduplicatesearch-filename": "Filename:",
"fileduplicatesearch-submit": "Rake",
+ "fileduplicatesearch-info": "$1 × $2 pixel<br />File size: $3<br />MIME type: $4",
"fileduplicatesearch-result-1": "The file \"$1\" haes naw identeecal dupleecation.",
"fileduplicatesearch-result-n": "The file \"$1\" haes {{PLURAL:$2|1 identeecal dupleecation|$2 identeecal dupleecations}}.",
"fileduplicatesearch-noresults": "Naw file named \"$1\" foond.",
"specialpages": "Byordinar pages",
+ "specialpages-note-top": "The Legend",
"specialpages-note": "* Normal byordinair pages.\n* <span class=\"mw-specialpagerestricted\">Restreected byordinair pages.</span>",
+ "specialpages-group-maintenance": "Maintenance reports",
"specialpages-group-other": "Ither byordinair pages",
"specialpages-group-login": "Login / cræft accoont",
"specialpages-group-changes": "Recynt chynges n logs",
@@ -2659,12 +2908,17 @@
"specialpages-group-wiki": "Data n tuils",
"specialpages-group-redirects": "Reguidin byordinair pages",
"specialpages-group-spam": "Spam tuils",
+ "specialpages-group-developer": "Deveeloper tuils",
+ "blankpage": "Blank page",
"intentionallyblankpage": "This page is intentionlie left blank.",
"external_image_whitelist": " #Lea this line exactlie aes it is<pre>\n#Put regulair expression fragments (jist the pairt that gaes atween the //) ablo\n#Thir will be matched wi the URLs o ootby (hotairtit) eemages\n#Thae that match will be displeyed aes eemages, itherwise yinlie aen airtin til the eemage will be shawn\n#Lines beginnin wi # ar treated aes comments\n#This is case-onsensiteeve\n\n#Put aw regex fragments abuin this line. Lea this line exactlie aes it is</pre>",
"tags": "Valit chynge tags",
"tag-filter": "[[Special:Tags|Tag]] filter:",
"tag-filter-submit": "Filter",
+ "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",
"tags-display-header": "Appearance oan chynge leets",
"tags-description-header": "Ful descreeption o meanin",
"tags-active-header": "Acteeve?",
@@ -2673,8 +2927,12 @@
"tags-active-no": "Naw",
"tags-edit": "eedit",
"tags-hitcount": "$1 {{PLURAL:$1|chynge|chynges}}",
+ "comparepages": "Compare pages",
+ "compare-page1": "Page 1",
+ "compare-page2": "Page 2",
"compare-rev1": "Reveesion 1",
"compare-rev2": "Reveesion 2",
+ "compare-submit": "Compare",
"compare-invalid-title": "The title that ye speceefied is onvalit.",
"compare-title-not-exists": "The title that ye speceefied disna exeest.",
"compare-revision-not-exists": "The reveesion that ye speceefied disna exeest.",
@@ -2698,13 +2956,18 @@
"htmlform-no": "Naw",
"htmlform-yes": "Ay",
"htmlform-chosen-placeholder": "Select aen optie",
+ "htmlform-cloner-create": "Eik mair",
+ "htmlform-cloner-delete": "Remuiv",
+ "htmlform-cloner-required": "At least the ae value is needit.",
"sqlite-has-fts": "$1 wi ful-tex rake support",
"sqlite-no-fts": "$1 wioot ful-tex rake support",
"logentry-delete-delete": "$1 {{GENDER:$2|delytit}} page $3",
+ "logentry-delete-restore": "$1 {{GENDER:$2|restored}} page $3",
"logentry-delete-event": "$1 {{GENDER:$2|chynged}} veesibeelitie o {{PLURAL:$5|ae log event|$5 log events}} oan $3: $4",
"logentry-delete-revision": "$1 {{GENDER:$2|chynged}} veesibeelitie o {{PLURAL:$5|ae reveesion|$5 reveesions}} oan page $3: $4",
"logentry-delete-event-legacy": "$1 {{GENDER:$2|chynged}} veesibeelitie o log events oan $3",
"logentry-delete-revision-legacy": "$1 {{GENDER:$2|chynged}} veesibeelitie o reveesions oan page $3",
+ "logentry-suppress-delete": "$1 {{GENDER:$2|suppressed}} page $3",
"logentry-suppress-event": "$1 hidlinswise {{GENDER:$2|chynged}} veesibeelitie o {{PLURAL:$5|ae log event|$5 log events}} oan $3: $4",
"logentry-suppress-revision": "$1 hidlinswise {{GENDER:$2|chynged}} veesibeelity o {{PLURAL:$5|ae reveesion|$5 reveesions}} oan page $3: $4",
"logentry-suppress-event-legacy": "$1 hidlinswise {{GENDER:$2|chynged}} veesibeelitie o log events oan $3",
@@ -2717,6 +2980,7 @@
"revdelete-uname-unhid": "uisername onskaukt",
"revdelete-restricted": "applied restreections til admeenistraters",
"revdelete-unrestricted": "remuived restreections fer admeenistraters",
+ "logentry-merge-merge": "$1 {{GENDER:$2|merged}} $3 intae $4 (reveesions up tae $5)",
"logentry-move-move": "$1 {{GENDER:$2|muived}} page $3 til $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|muived}} page $3 til $4 wioot leain ae reguidal",
"logentry-move-move_redir": "$1 {{GENDER:$2|muived}} page $3 til $4 ower reguidal",
@@ -2731,19 +2995,28 @@
"logentry-rights-rights": "$1 {{GENDER:$2|chynged}} groop memmership fer $3 fae $4 til $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|chynged}} groop memmership fer $3",
"logentry-rights-autopromote": "$1 wis autæmateeclie {{GENDER:$2|promoted}} fae $4 til $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|uplaidit}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|uplaidit}} ae new version o $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|uplaidit}} $3",
"rightsnone": "(nane)",
+ "revdelete-summary": "eedit the ootline",
+ "feedback-adding": "Eikin feedback til page...",
+ "feedback-bugcheck": "Wunnerfu! Just check that it's na awreadie yin o the [$1 knawn bugs].",
+ "feedback-bugnew": "Ah checkt. Report ae new bug",
"feedback-bugornote": "Gif yer readie tae describe ae techneecal proablem in detail please [$1 report ae bug].\nItherwise, ye can uiss the easie form ablo. Yer comment will be eikit til the page \"[$3 $2]\", alang wi yer uisername.",
- "feedback-adding": "Addin feedback til page...",
+ "feedback-cancel": "Cancel",
+ "feedback-close": "Dun",
"feedback-error1": "Mistak: Onrecognised ootcome fae API",
"feedback-error2": "Mistak: Eedit failed",
"feedback-error3": "Mistak: Naw response fae API",
+ "feedback-message": "Message:",
+ "feedback-subject": "Aneat:",
+ "feedback-submit": "Haun-in",
"feedback-thanks": "Thanks! Yer feedback haes been posted til the page \"[$2 $1]\".",
- "feedback-close": "Dun",
- "feedback-bugcheck": "Wunnerfu! Just check that it's na awreadie yin o the [$1 knawn bugs].",
- "feedback-bugnew": "Ah checkt. Report ae new bug",
"searchsuggest-search": "Rake",
"searchsuggest-containing": "containin...",
"api-error-badaccess-groups": "Ye'r na permittit tae uplaid files til this wiki.",
+ "api-error-badtoken": "Inby mistak: Bad token.",
"api-error-copyuploaddisabled": "Uplaidin bi URL is disabled oan this server.",
"api-error-duplicate": "Thaur {{PLURAL:$1|is [$2 anither file]|ar [$2 some ither files]}} awreadie oan the site wi the same content.",
"api-error-duplicate-archive": "Thaur {{PLURAL:$1|wis [$2 anither file]|were [$2 some ither files]}} awreadie oan the site wi the same content, but {{PLURAL:$1|it wis|thay were}} delytit.",
@@ -2775,14 +3048,30 @@
"api-error-stashfailed": "Internal mistak: Server failed tae store temparie file.",
"api-error-publishfailed": "Internal mistak: Server failed tae publeesh temparie file.",
"api-error-stasherror": "Thaur wis ae mistak while uplaidin the file tae stash.",
+ "api-error-stashedfilenotfound": "The stashed file wis no foond whan attemptin tae uplaid it fae the stash.",
+ "api-error-stashpathinvalid": "The path that the stashed file shid hae been foond at wis no valid.",
+ "api-error-stashfilestorage": "Thaur wis ae mistak in storin the file in the stash.",
+ "api-error-stashzerolength": "The server coudna stash the file, cause it haed zero langth.",
+ "api-error-stashnotloggedin": "Ye maun be loggit in tae hain files in the uplaid stash.",
+ "api-error-stashwrongowner": "The file that ye were attemptin tae access in the stash disna belang tae ye.",
+ "api-error-stashnosuchfilekey": "The file key that ye were attemptin tae access in the stash disna exeest.",
"api-error-timeout": "The server didna respond wiin the expectit time.",
"api-error-unclassified": "Aen onkent mistake occurred.",
+ "api-error-unknown-code": "Onknawn mistak: \"$1\".",
"api-error-unknown-error": "Internal mistak: Sommit went wrang whan uplaidin yer file.",
+ "api-error-unknown-warning": "Onknawn warnishment: \"$1\".",
+ "api-error-unknownerror": "Onknawn mistak: \"$1\".",
"api-error-uploaddisabled": "Uplaidin is disabled oan this wiki.",
"api-error-verification-error": "This file micht be rotten, or hae the wrang extension.",
"duration-seconds": "$1 {{PLURAL:$1|seicont|seiconts}}",
+ "duration-minutes": "$1 {{PLURAL:$1|minute|minutes}}",
"duration-hours": "$1 {{PLURAL:$1|hoor|hoors}}",
+ "duration-days": "$1 {{PLURAL:$1|day|days}}",
+ "duration-weeks": "$1 {{PLURAL:$1|week|weeks}}",
+ "duration-years": "$1 {{PLURAL:$1|year|years}}",
+ "duration-decades": "$1 {{PLURAL:$1|decade|decades}}",
"duration-centuries": "$1 {{PLURAL:$1|centuair|centuairs}}",
+ "duration-millennia": "$1 {{PLURAL:$1|millennium|millennia}}",
"rotate-comment": "Eemage rotated bi $1 {{PLURAL:$1|degree|degrees}} clockwise",
"limitreport-title": "Parser profilin data:",
"limitreport-cputime": "CPU time uissage",
@@ -2792,15 +3081,65 @@
"limitreport-ppvisitednodes": "Preprocessor veesitit node coont",
"limitreport-ppgeneratednodes": "Preprocessor generated node coont",
"limitreport-postexpandincludesize": "Post-expand incluid size",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
+ "limitreport-templateargumentsize": "Template argument size",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
"limitreport-expansiondepth": "Heiest expansion depth",
"limitreport-expensivefunctioncount": "Expensive parser function coont",
+ "expandtemplates": "Mak templates muckler",
"expand_templates_intro": "This byordiair page taks tex n expauns aw templates in it recurseevelie.\nIt foreby expaunds supported parser functions like\n<code><nowiki>{{</nowiki>#language:…}}</code> n vareeables like\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nIn fact, it expauns just aboot awthings in dooble-braces.",
"expand_templates_title": "Contex title, fer {{FULLPAGENAME}}, etc.:",
+ "expand_templates_input": "The Input tex:",
"expand_templates_output": "Ootcome",
"expand_templates_xml_output": "XML ootpit",
"expand_templates_html_output": "Raw HTML ootpit",
+ "expand_templates_ok": "OK",
+ "expand_templates_remove_comments": "Remuiv comments",
"expand_templates_remove_nowiki": "Suppress <nowiki> tags in ootcome",
"expand_templates_generate_xml": "Shaw XML parse tree",
"expand_templates_generate_rawhtml": "Shaw raw HTML",
- "expand_templates_preview": "Luikower"
+ "expand_templates_preview": "Luikower",
+ "expand_templates_preview_fail_html": "<em>Cause {{SITENAME}} haes raw HTML enabled n thaur wis ae loss o session data, the luikower haes been skaukt tae help defend again JavaScript attacks.</em>\n\n<strong>Gif this is a legeetimate luikower attempt, please gie it anither shot.</strong>\nGif ye still haae nae joy, than gie [[Special:UserLogout|loggin oot]] n loggin back in ae shot.",
+ "expand_templates_preview_fail_html_anon": "<em>Cause {{SITENAME}} haes raw HTML enabled n ye'r no loggit in, the luikower haes been skaukt tae fend again JavaScript attacks.</em>\n\n<strong>Gif this is ae legeetimate luikower attempt, than please [[Special:UserLogin|log in]] n gie it anither shot.</strong>",
+ "pagelanguage": "Page leid selecter",
+ "pagelang-name": "Page",
+ "pagelang-language": "Leid",
+ "pagelang-use-default": "Uise the defaut leid",
+ "pagelang-select-lang": "Pick yer leid",
+ "right-pagelang": "Chynge page leid",
+ "action-pagelang": "chynge the page leid",
+ "log-name-pagelang": "Chynge leid log",
+ "log-description-pagelang": "This is ae log o chynges in page leids.",
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|chynged}} page leid fer $3 fae $4 tae $5.",
+ "default-skin-not-found": "Whoops! The defaut skin fer yer wiki, defined in <code dir=\"ltr\">$wgDefaultSkin</code> aes <code>$1</code>, is no available.\n\nYer instawation seems tae incluid the follaein skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] fer information oan hou tae enable thaim n chuise the defaut.\n\n$2\n\n; Gif ye'v juist instawed MediaWiki:\n: Ye proabablie instawed it fae git, or directlie fae the soorce code uisin some ither method. This is expectie. Gie instawin some skins fae [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] ae shot, bi:\n:* Dounlaidin the [https://www.mediawiki.org/wiki/Download tarball installer], this comes wi several skins n extensions. Ye can than capie n paste the <code>skins/</code> directerie fae this.\n:* Dounlaidin indiveedual skin tarballs frae [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonin one of the <code>mediawiki/skins/*</code> repositries bi wa o git intae the <code dir=\"ltr\">skins/</code> directerie o yer MediaWiki instawation.\n: Daein this shoudna interfere wi yer git repositrie gif ye'r ae MediaWiki deveeloper.\n\n; Gif ye,v juist upgradit MediaWiki:\n: MediaWiki 1.24 n newer nae langer enables instawed skins autæmateeclie (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Ye can paste the follaein lines intae <code>LocalSettings.php</code> tae enable aw nou installed skins:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Gif ye'v juist modified <code>LocalSettings.php</code>:\n: Double-check the skin names fer typos.",
+ "default-skin-not-found-no-skins": "Whoops! The defaut skin fer yer wiki, defined in <code>$wgDefaultSkin</code> aes <code>$1</code>, is no available.\n\nYe'v nae instawed skins.\n\n; Gif ye'v juist instawed or upgradit MediaWiki:\n: Ye probably instawed fae git, or directlie fae the soorce code uisin some ither method. This is expectit. MediaWiki 1.24 n newer disna incluid onie skins in the main repositrie. Gie instawin some skins fae [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] ae shot, bi:\n:* Dounlaidin the [https://www.mediawiki.org/wiki/Download tarball installer], this comes wi several skins n extensions. Ye can than capie n paste the <code>skins/</code> directerie fae it.\n:* Dounlaidin individual skin tarballs fae [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Cloning yin o the <code>mediawiki/skins/*</code> repositries bi wa o git intae the <code dir=\"ltr\">skins/</code> directerie o yer MediaWiki instawation.\n: Daein this shoudna interfere wi yer git repositrie gif ye'r ae MediaWiki deveeloper. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] fer information oan hou tae enable skins n chuise the defaut.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enabled)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disablt''')",
+ "mediastatistics": "Media stateestics",
+ "mediastatistics-summary": "Stateestics aneat uplaided file types. This yinlie incluids the maist recent version o ae file. Auld or delytit versions o files ar excluidit.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME type",
+ "mediastatistics-table-extensions": "Possible extensions",
+ "mediastatistics-table-count": "Nummer o files",
+ "mediastatistics-table-totalbytes": "Combined size",
+ "mediastatistics-header-unknown": "Onknawn",
+ "mediastatistics-header-bitmap": "Bitmap eemages",
+ "mediastatistics-header-drawing": "Drawins (vecter eemages)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Videos",
+ "mediastatistics-header-multimedia": "Rich media",
+ "mediastatistics-header-office": "Affice",
+ "mediastatistics-header-text": "Texual",
+ "mediastatistics-header-executable": "Executables",
+ "mediastatistics-header-archive": "Compressed formats",
+ "json-warn-trailing-comma": "$1 trailin {{PLURAL:$1|comma wis|commas were}} remuived fae JSON",
+ "json-error-unknown": "Thaur wis ae proablem wi the JSON. Mistak: $1",
+ "json-error-depth": "The mucklest stack depth haes been exceedit",
+ "json-error-state-mismatch": "Onvalit or malformed JSON",
+ "json-error-ctrl-char": "Control chairacter mistak, possiblie wranglie encoded",
+ "json-error-syntax": "Syntax mistak",
+ "json-error-utf8": "Malformed UTF-8 chairacters, possiblie wranglie encoded",
+ "json-error-recursion": "Yin or mair recurseeve references in the value tae be encoded",
+ "json-error-inf-or-nan": "Yin or mair NAN or INF values in the value tae be encoded",
+ "json-error-unsupported-type": "Ae value o ae type that canna be encoded wis gien"
}
diff --git a/languages/i18n/sd.json b/languages/i18n/sd.json
index c6d69e98..8bb2d3fc 100644
--- a/languages/i18n/sd.json
+++ b/languages/i18n/sd.json
@@ -2,18 +2,28 @@
"@metadata": {
"authors": [
"Aursani",
- "아라"
+ "아라",
+ "Fayazburiro"
]
},
- "tog-showtoolbar": "سنوارپ اوزار دٻي ڏيکاريو (جاوا اسڪرپٽ)",
- "tog-watchcreations": "منهنجا سرجيل صفحا منهنجي ٽيٽ فهرست ۾ رکو",
- "tog-watchdefault": "منهنجا ترميميل صفحا منهنجي ٽيٽ فهرست تي رکو",
+ "tog-underline": "هيٺان ڏنل لڪير واري لنڪ",
+ "tog-hideminor": "تازيون ننڍيون تبدليون لڪايو",
+ "tog-hidepatrolled": "تازيون گھميل تبديليون لڪايو",
+ "tog-newpageshidepatrolled": "نئين صفحن تان تازي گھميل صفحي جي لسٽ لڪايو",
+ "tog-numberheadings": "خودڪار نمبرن واري هيڊنگ",
+ "tog-showtoolbar": "ايڊٽ بار ڏيکاريو",
+ "tog-editondblclick": "ٻٽي ڪلڪ تي صفحا ايڊت ڪيو",
+ "tog-watchcreations": "منهنجا سرجيل صفحا منهنجي نهار فهرست ۾ رکو",
+ "tog-watchdefault": "منهنجا ترميميل صفحا منهنجي نهار فهرست تي رکو",
"tog-watchdeletion": "آئون جيڪي صفحا ڊاهيان، سي منهنجي ٽيٽ فهرست تي رکو",
+ "tog-watchrollback": "انهن صفحن کي منهنجي ٽيٽ فهرست تي رکو، جن ۾ تبديلين کي مون واپس ورايو آهي.",
"tog-previewontop": "ترميمي باڪس مٿان پيش نگاهه ڏيکاريو",
"tog-previewonfirst": "پهرين ترميم تي پيش نگاهه ڏيکاريو",
"tog-enotifusertalkpages": "منهنجي مباحثي صفحي ۾ تبديليءَ جي صورت ۾ مون کي برق ٽپال اماڻيو",
- "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ به مون کي برق ٽپال ڪريو",
+ "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ بہ مون کي برق ٽپال ڪريو",
"tog-shownumberswatching": "ٽيٽيندڙ يوزرس جو تعداد ڏيکاريو",
+ "tog-oldsig": "موجوده دستخط",
+ "tog-watchlisthideliu": "لاگ اِن ٿيل يوزرس جون ڪيل ترميمون ٽيٽ فهرست ۾ نہ ڏيکاريو",
"tog-ccmeonemails": "ٻين يوزرس ڏانهن منهنجي موڪليل برق ٽپال جو پرت مون کي اماڻيو",
"tog-diffonly": "تفاوت هيٺان صفحي جو مواد نه ڏيکاريو",
"tog-showhiddencats": "لڪل زمرا ڏيکاريو",
@@ -69,6 +79,18 @@
"oct": "آڪٽوبر",
"nov": "نومبر",
"dec": "ڊسمبر",
+ "january-date": "جنوري $1",
+ "february-date": "فيبروري $1",
+ "march-date": "مارچ $1",
+ "april-date": "اپريل $1",
+ "may-date": "مَي $1",
+ "june-date": "جُون $1",
+ "july-date": "جُولاءِ $1",
+ "august-date": "آگسٽ $1",
+ "september-date": "سيپٽمبر $1",
+ "october-date": "آڪٽوبر $1",
+ "november-date": "نَوِمبر $1",
+ "december-date": "ڊسمبر $1",
"category_header": "\"$1\" زمري جا صفحا",
"subcategories": "ذيلي زمرا",
"category-media-header": " \"$1\" زمري اندر ذريعات",
@@ -81,7 +103,7 @@
"cancel": "رد",
"moredotdotdot": "اڃا...",
"mypage": "منهنجو صفحو",
- "mytalk": "مون سان ڳالهه",
+ "mytalk": "ڳاله ٻوله",
"and": "&#32;۽",
"qbfind": "ڳوليو",
"qbbrowse": "جھانگيو",
@@ -103,17 +125,21 @@
"printableversion": "ڇپائتو پرت",
"permalink": "مسقتل ڳنڍڻو",
"print": "ڇاپيو",
+ "view": "نگاهہ",
"edit": "سنواريو",
+ "edit-local": "مقامي وضاحت کي ترميميو",
"create": "سرجيو",
"editthispage": "هيءُ صفحو سنواريو",
"create-this-page": "اهو صفحو نئين سر جوڙيو",
"delete": "ڊاھيو",
"deletethispage": "هيءُ صفحو ڊاهيو",
+ "undeletethispage": "هيءُ صفحو اڻ ڊاهيو",
"undelete_short": "اڻڊاهيو {{PLURAL:$1|هڪ ترميم|$1 ترميمون}}",
"protect": "تحفظيو",
+ "protect_change": "تبديل ڪريو",
"protectthispage": "هيءُ صفحو تحفظيو",
- "unprotect": "اڻتحفظيو",
- "unprotectthispage": "هيءُ صفحو اڻتحفظيو",
+ "unprotect": "حفاظت مٽيو",
+ "unprotectthispage": "هن صفحي جي حفاظت مٽيو",
"newpage": "نئون صفحو",
"talkpage": "هن صفحي تي بحث ڪريو",
"talkpagelinktext": "بحث",
@@ -122,7 +148,7 @@
"articlepage": "مسودو ڏسو",
"talk": "بحث",
"views": "ڏيٺون",
- "toolbox": "اوزاردٻي",
+ "toolbox": "ٽولَ",
"userpage": "يوزر صفحو ڏسو",
"projectpage": "رٿائي صفحو ڏسو",
"imagepage": "ذريعاتي صفحو ڏسو",
@@ -134,10 +160,15 @@
"otherlanguages": "ٻين ٻولين ۾",
"redirectedfrom": "($1 کان چوريل)",
"redirectpagesub": "چوريل صفحو",
+ "redirectto": "منتقل ڪيو",
"lastmodifiedat": "هيءُ صفحو آخري ڀيرو $2، $1ع تي ترميميو ويو هو.",
"viewcount": "هيءُ صفحو {{PLURAL:$1|دفعو|$1 دفعا}} ڏسجي چڪو آهي.",
"protectedpage": "تحفظيل صفحو",
+ "jumpto": "ڏانهن ٽپ ڏيو",
+ "jumptonavigation": "رهنمائي",
"jumptosearch": "ڳولا",
+ "generic-pool-error": "معذرت سان سرور هاڻي تمام گھڻو سُڪ آهي.\nتمام گھڻا يوزر هتي موجود آهن.\nمهرباني ڪري ٿورو ترسي پوءِ ڪوشش ڪريو.",
+ "pool-errorunknown": "اڻ ڄاتل چُڪَ",
"aboutsite": "{{SITENAME}} بابت",
"aboutpage": "Project:بابت",
"copyright": "سمورو مواد $1 تحت ميسر ڪجي ٿو",
@@ -154,9 +185,11 @@
"portal-url": "Project:نياتي باب",
"privacy": "ذاتيات پاليسي",
"privacypage": "Project:ذاتيات پاليسي",
+ "badaccess": "اجازتنامہ چُڪَ",
"ok": "ٺيڪ",
"retrievedfrom": "\"$1\" تان ورتل",
"youhavenewmessages": "توهان لاءِ $1 ($2) آهن.",
+ "youhavenewmessagesmulti": "$1 تي توهان لاءِ نوان نياپا آهن",
"editsection": "سنواريو",
"editold": "سنواريو",
"viewsourceold": "ڪوڊ ڏسو",
@@ -166,6 +199,8 @@
"toc": "فهرست",
"showtoc": "ڏيکاريو",
"hidetoc": "لڪايو",
+ "confirmable-yes": "ها",
+ "confirmable-no": "نه",
"viewdeleted": "$1 ڏسندا؟",
"feedlinks": "روان رسد:",
"site-rss-feed": "$1 آر ايس ايس روان رسد",
@@ -415,7 +450,7 @@
"unwatch": "اڻ ٽيٽيو",
"unwatchthispage": "ٽيٽڻ ڇڏيو",
"watchlist-details": "مباحثي صفحن کان سواءِ {{PLURAL:$1|$1 صفحو|$1 صفحا}} ٽيٽيل.",
- "wlshowlast": "پوين $1 ڪلاڪن $2 ڏينهن جا $3 ڏيکاريو",
+ "wlshowlast": "پوين $1 ڪلاڪن $2 ڏينهن جا ڏيکاريو",
"watching": "ٽيٽيندي...",
"unwatching": "اڻ ٽيٽيندي...",
"created": "ٺهي چڪو",
@@ -592,7 +627,6 @@
"exif-gpsspeed-k": "ڪلوميٽر في ڪلاڪ",
"exif-gpsspeed-m": "ميل في ڪلاڪ",
"exif-gpsspeed-n": "ڳنڍيون",
- "watchlistall2": "سڀ",
"namespacesall": "سڀ",
"monthsall": "سڀ",
"confirmemail_success": "توھان جي برق ٽپال جي پڪ ڪئي وئي آھي. ھاڻِ توھان لاگ ان ٿي وڪيءَ جو مزو وٺي سگھو ٿا",
diff --git a/languages/i18n/sdc.json b/languages/i18n/sdc.json
index 57e78186..f97f953f 100644
--- a/languages/i18n/sdc.json
+++ b/languages/i18n/sdc.json
@@ -525,7 +525,6 @@
"mergehistory-invalid-destination": "La pàgina di disthinazioni débi abé un tìturu currettu.",
"mergehistory-reason": "Mutibu:",
"mergelog": "Rigisthru di l'unioni",
- "pagemerge-logentry": "ha uniddu [[$1]] a [[$2]] (ribisioni finz'a $3)",
"revertmerge": "Anulla unioni",
"mergelogpagetext": "Inogghi v'è una listha di l'ulthimi operazioni d'unioni di la cronologia d'una pàgina in un'althra.",
"history-title": "Cronologia di li mudìfigghi di \"$1\"",
@@ -565,7 +564,6 @@
"searchrelated": "curriraddi",
"searchall": "tutti",
"showingresults": "Accó {{PLURAL:$1|màssimu '''1''' risulthaddu|màssimu li '''$1''' risulthaddi}} à partì da lu nùmaru #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Risulthaddu '''$1''' of '''$3'''|Risulthaddi '''$1 - $2''' di '''$3'''}} pa '''$4'''",
"search-nonefound": "Nisciuni risulthaddi pa la to' zercha",
"powersearch-legend": "Zercha abanzadda",
"powersearch-ns": "Zercha i' li tipi di pàgina:",
@@ -823,7 +821,6 @@
"statistics": "Sthatisthigghi",
"statistics-header-users": "Sthatisthigghi reratibi a l'utenti",
"statistics-pages": "Pagini",
- "statistics-mostpopular": "Pàgini più visitaddi",
"doubleredirects": "Rinvii doppi",
"doubleredirectstext": "Inogghi v'è una listha di li pàgini chi puntani a pàgini di rinviu. Ogna riga cunteni i cullegamenti a lu primmu e sigundu rinviu, cumenti a la disthinazioni di lu sigundu rinviu, che noimmaimmenti è la pàgina \"curretta\" a la quari dubia puntà puru lu primmu rinviu.",
"brokenredirects": "Rinvii ibbagliaddi",
@@ -851,7 +848,6 @@
"uncategorizedtemplates": "Mudelli chena categuri",
"unusedcategories": "Categuri inutirizaddi",
"unusedimages": "File inutirizaddi",
- "popularpages": "Pàgini più visitaddi",
"wantedcategories": "Categuri dumandaddi",
"wantedpages": "Pàgini più dumandaddi",
"mostlinked": "Pàgini più riciamaddi",
@@ -888,7 +884,6 @@
"pager-older-n": "{{PLURAL:$1|1 mancu rizzenti|$1 mancu rizzenti}}",
"booksources": "Rifirimenti di libri",
"booksources-search-legend": "Zercha rifirimenti di libri",
- "booksources-go": "Vai",
"booksources-text": "Inogghi v'è una listha di cullegamenti bessu siti estherni chi vindani libri nobi e usaddi, attrabessu li quari è pussìbiri uttinì maggiori infuimmazioni i' lu testhu zirchaddu.",
"specialloguserlabel": "Utenti:",
"speciallogtitlelabel": "Tìturu:",
@@ -952,7 +947,7 @@
"wlheader-enotif": "La nutìfica via postha erettrònica è attiba.",
"wlheader-showupdated": "Li pàgini chi so isthaddi mudìfiggaddi daboi l'ulthima vìsita so evidenziaddi in '''grasseddu'''",
"wlnote": "Inogghi {{PLURAL:$1|è erencadda la mudìfigga più rizzenti arriggadda|so erencaddi li '''$1''' mudìfigghi più rizzenti arriggaddi}} {{PLURAL:$2|i' la ulthima ora|i' li ulthimi '''$2''' ori}}.",
- "wlshowlast": "Musthra li ulthimi $1 ori $2 dì $3",
+ "wlshowlast": "Musthra li ulthimi $1 ori $2 dì",
"watchlist-options": "Opzioni abbaidaddi ippiziari",
"watching": "Aggiunta a l'abbaidaddi ippiziari...",
"unwatching": "Eliminazioni da l'abbaidaddi ippiziari...",
@@ -1408,7 +1403,6 @@
"exif-sharpness-2": "Maggiori nitiddèzia",
"exif-subjectdistancerange-0": "Ischuniscidda",
"exif-gpsspeed-n": "Nodi",
- "watchlistall2": "tutti",
"namespacesall": "tutti",
"monthsall": "tutti",
"confirmemail": "Cunfèimma indirizzu di postha erettrònica",
diff --git a/languages/i18n/se.json b/languages/i18n/se.json
index 85bf7810..22bb6212 100644
--- a/languages/i18n/se.json
+++ b/languages/i18n/se.json
@@ -613,7 +613,6 @@
"statistics-users": "Registrerejuvvon [[Special:ListUsers|geavaheaddjit]]",
"statistics-users-active": "Aktiivvalaš geavaheaddjit",
"statistics-users-active-desc": "Geavaheaddjit, geat leat bargan juoidá maŋimus {{PLURAL:$1|beaivvi|$1 beaivvi}} áigge.",
- "statistics-mostpopular": "Eanemusta gehčojuvvon siiddut",
"doubleredirects": "Guovttegeardán ođđasitstivremat",
"brokenredirects": "Bieđganan ođđasitstivremat",
"brokenredirectstext": "Čuovvovaš ođđasitstivremat leat artihkkaliidda, mat eai dihtto.",
@@ -637,7 +636,6 @@
"uncategorizedtemplates": "Mállevuođut mat eai gula ovttage luohkkái",
"unusedcategories": "Geavatkeahtes luohkát",
"unusedimages": "Geavatkeahtes fiillat",
- "popularpages": "Bivnnuhis siiddut",
"wantedcategories": "Luohkkásávaldagat",
"wantedpages": "Siidusávaldagat",
"mostlinked": "Siiddut maidda čujuhuvvo dávjjimustá",
@@ -666,7 +664,6 @@
"notargettext": "It leat meroštallan mearresiiddu dahje -geavaheaddji, masa dahku laktása.",
"booksources": "Girjegáldut",
"booksources-search-legend": "Oza girjegálduid",
- "booksources-go": "Oza",
"booksources-text": "Vuolábealde leat liŋkkat olggobeal siidduide, main vuvdojuvvot ođđa ja boares girjjid. Siiddui sáhttá maid leat lassedieđut girjjiin.",
"specialloguserlabel": "Geavaheaddji:",
"speciallogtitlelabel": "Mearri",
@@ -728,7 +725,7 @@
"wlheader-enotif": "E-poastaalmmuhusat leat anus.",
"wlheader-showupdated": "Siiddut, mat leat rievdaduvvon du maŋimus geavahangearddi maŋŋá leat merkojuvvon '''buoiddes teavsttain'''",
"wlnote": "Vuolábealde lea '''$1''' {{PLURAL:$1|rievdadus|rievdadusa}} maŋimus {{PLURAL:$2||'''$2'''}} diimma siste.",
- "wlshowlast": "Čájet maŋimus $1 diimmu dahje $2 beaivvi $3",
+ "wlshowlast": "Čájet maŋimus $1 diimmu dahje $2 beaivvi",
"watching": "Lasihuvvo čuovvunlistui...",
"unwatching": "Sihkojuvvo čuovvunlisttus...",
"enotif_reset": "Merke buot siidduid gehččojuvvon",
@@ -998,7 +995,6 @@
"exif-gpsspeed-k": "km/h",
"exif-gpsspeed-m": "miilla diimmus",
"exif-gpsspeed-n": "čuolmma",
- "watchlistall2": ", olles historjjá",
"namespacesall": "buot",
"monthsall": "buot",
"confirmemail": "Sihkaraste e-poastačujuhusa",
diff --git a/languages/i18n/sei.json b/languages/i18n/sei.json
index 813f64b3..d3a576f9 100644
--- a/languages/i18n/sei.json
+++ b/languages/i18n/sei.json
@@ -614,7 +614,6 @@
"ancientpages": "Xeperesistant páhinám",
"move": "Yacom",
"movethispage": "Yacom jan páhina",
- "booksources-go": "Caátemöx",
"specialloguserlabel": "Caitom:",
"speciallogtitlelabel": "Titlenam:",
"log": "Logám",
@@ -654,7 +653,7 @@
"watchthispage": "Cáminot jan páhina",
"unwatch": "Diicáminot",
"unwatchthispage": "Diicáminot jan páhina",
- "wlshowlast": "Cohuatlöx hun $1 ixáap quij iitax $2 ixáap $3",
+ "wlshowlast": "Cohuatlöx hun $1 ixáap quij iitax $2 ixáap",
"watching": "Cáminot...",
"unwatching": "Necáminot...",
"enotif_impersonal_salutation": "{{SITENAME}} caitom",
@@ -759,7 +758,6 @@
"exif-gpsaltitude": "Altitudam",
"exif-subjectdistance-value": "$1 miitrenám",
"exif-focalplaneresolutionunit-2": "inchám",
- "watchlistall2": "jöxdem",
"namespacesall": "jöxdem",
"monthsall": "jöxdem",
"confirm_purge_button": "ton",
diff --git a/languages/i18n/ses.json b/languages/i18n/ses.json
new file mode 100644
index 00000000..8ec5156c
--- /dev/null
+++ b/languages/i18n/ses.json
@@ -0,0 +1,3328 @@
+{
+ "@metadata": {
+ "authors": [
+ "Songhay",
+ "Macofe"
+ ]
+ },
+ "tog-underline": "Dobu ganda-žeeriyan:",
+ "tog-hideminor": "Fasal kayney kaŋ hun barmayyaŋ korawey ra tugu",
+ "tog-hidepatrolled": "Fasalyan kurantey tugu barmay korawey ra",
+ "tog-newpageshidepatrolled": "Moo kurantey tugu moo taaga maašeedaa ra",
+ "tog-extendwatchlist": "Hawgay maašeedaa hayandi ka barmawey kul cebe, manti ikokorantaa hinne",
+ "tog-usenewrc": "Barmawey marga moo bande barmay korawey nda hawgayhayey ra",
+ "tog-numberheadings": "Boŋdekerey boŋkabuyan",
+ "tog-showtoolbar": "Goyjinay žeeri fasalyan cebe",
+ "tog-editondblclick": "Naagu cee hinka ka moɲey fasal",
+ "tog-editsectiononrightclick": "Kanbe guma dunbu maaɲey naagu ka dunbu fasalyan tunandi",
+ "tog-watchcreations": "Moɲey kaŋ ay k'i tee nda tukey kaŋ ay g'i zumandi tonton ay hawgayhayey ga",
+ "tog-watchdefault": "Moɲey nda tukey kaŋ ay g'i fasal tonton ay hawgayhayey ga",
+ "tog-watchmoves": "Moɲey nda tukey kaŋ ay g'i ganandi tonton ay hawgayhayey ga",
+ "tog-watchdeletion": "Moɲey nda tukey kaŋ ay g'i tuusu tonton ay hawgayhayey ga",
+ "tog-watchrollback": "Moɲey kaŋ ay n'i taagandi tonton ay hawgayhayey ga",
+ "tog-minordefault": "Fasalyaney kul šilbay sanda ikaynayaŋ nda tilasu",
+ "tog-previewontop": "Moofuryan cebe jina fasal bataa ra",
+ "tog-previewonfirst": "Moofuryan cebe fasalyan jinaa ra",
+ "tog-enotifwatchlistpages": "Bataga sanba yane waati kaŋ moo wala tuku kaŋ goo ay hawgayhayey ra barmay",
+ "tog-enotifusertalkpages": "Bataga sanba yane waati kaŋ ay goykaw šenni moɲoo barmay",
+ "tog-enotifminoredits": "Bataga sanba yane da nda moɲey nda tukey barmay kayna",
+ "tog-enotifrevealaddr": "Ay bataga aderesoo cebe bayrandi batagawey ra",
+ "tog-shownumberswatching": "Goykey kaŋ ga moɲoo hawgay hinnaa cebe",
+ "tog-oldsig": "Kanbežeeri barantaa:",
+ "tog-fancysig": "Kanbežeero tee sanda wikihantum (bila nda nga boŋdobu)",
+ "tog-uselivepreview": "Moofuryan goywaati ra (šiiyan)",
+ "tog-forceeditsummary": "Ay šaawar nda ya na fasal durandiyan dam",
+ "tog-watchlisthideown": "Ay boŋ fasalyaney tugu hawgayhayey ra",
+ "tog-watchlisthidebots": "Maršin fasalyaney tugu hawgayhayey ra",
+ "tog-watchlisthideminor": "Fasalyan kayney tugu hawgayhayey ra",
+ "tog-watchlisthideliu": "Goykaw hurantey fasalyaney tugu hawgayhayey ra",
+ "tog-watchlisthideanons": "Goykaw tugantey fasalyaney tugu hawgayhayey ra",
+ "tog-watchlisthidepatrolled": "Faslayan kurantey tugu hawgayhayey ra",
+ "tog-ccmeonemails": "Batagawey kaŋ ay g'i sanba goykaw taney se gaabu yane",
+ "tog-diffonly": "Ma ši moo gundekuna cebe fayarey cire",
+ "tog-showhiddencats": "Duni tugantey cebe",
+ "tog-norollbackdiff": "Ma ši fayari cebe taagandiyan waate",
+ "tog-useeditwarning": "Ay šaawar waati kaŋ ay ga fasal moo naŋ bila nda barmawey ma gaabundi",
+ "tog-prefershttps": "Ciyari saajante tee waati kul ka huru",
+ "underline-always": "Waati kul",
+ "underline-never": "Abada",
+ "underline-default": "Kuusu wala ceecikaw tilasu",
+ "editfont-style": "Ganda šigira alhaali fasal:",
+ "editfont-default": "Ceecikaw tilasu",
+ "editfont-monospace": "Šigira kankamante",
+ "editfont-sansserif": "Šigira mulla",
+ "editfont-serif": "Šigiri yutta",
+ "sunday": "Alhadi",
+ "monday": "Atinni",
+ "tuesday": "Atalaata",
+ "wednesday": "Alarba",
+ "thursday": "Alhamiisa",
+ "friday": "Alzuma",
+ "saturday": "Asibti",
+ "sun": "Ahd",
+ "mon": "Atn",
+ "tue": "Atl",
+ "wed": "Alb",
+ "thu": "Alh",
+ "fri": "Alz",
+ "sat": "Asb",
+ "january": "Žanwiye",
+ "february": "Feewiriye",
+ "march": "Marsi",
+ "april": "Awiril",
+ "may_long": "Me",
+ "june": "Žuweŋ",
+ "july": "Žuyye",
+ "august": "Ut",
+ "september": "Sektanbur",
+ "october": "Oktoobur",
+ "november": "Noowanbur",
+ "december": "Deesanbur",
+ "january-gen": "Žanwiye",
+ "february-gen": "Feewiriye",
+ "march-gen": "Marsi",
+ "april-gen": "Awiril",
+ "may-gen": "Me",
+ "june-gen": "Žuweŋ",
+ "july-gen": "Žuyye",
+ "august-gen": "Ut",
+ "september-gen": "Sektanbur",
+ "october-gen": "Oktoobur",
+ "november-gen": "Noowanbur",
+ "december-gen": "Deesanbur",
+ "jan": "Žan",
+ "feb": "Few",
+ "mar": "Mar",
+ "apr": "Awl",
+ "may": "Me",
+ "jun": "Žuw",
+ "jul": "Žuy",
+ "aug": "Ut",
+ "sep": "Sekt",
+ "oct": "Okt",
+ "nov": "Now",
+ "dec": "Des",
+ "january-date": "Žanwiye $1",
+ "february-date": "Feewiriye $1",
+ "march-date": "Marsi $1",
+ "april-date": "Awiril $1",
+ "may-date": "Me $1",
+ "june-date": "Žuweŋ $1",
+ "july-date": "Žuyye $1",
+ "august-date": "Ut $1",
+ "september-date": "Sektanbur $1",
+ "october-date": "Oktoobur $1",
+ "november-date": "Noowanbur $1",
+ "december-date": "Deesanbur $1",
+ "pagecategories": "{{PLURAL:$1|Dumi|Dumey}}",
+ "category_header": "Moɲey dumi \"$1\" ra",
+ "subcategories": "Dumi-izey",
+ "category-media-header": "Hẽenandihaya dumi \"$1\" ra",
+ "category-empty": "<em>Sohõda dumoo woo šii nda moo wala hẽenandihaya kul.</em>",
+ "hidden-categories": "{PLURAL:$1|Dumi tugante|Dumi tugantey}}",
+ "hidden-category-category": "Dumi tugantey",
+ "category-subcat-count": "{{PLURAL:$2|Dumoo woo goo nda dumi-izoo woo hinne.|Dumoo woo goo nda dumi-izey wey hinne {{PLURAL:$1|dumi-ize|$1 dumi-ize}}, ka hun $2 ra.}}",
+ "category-subcat-count-limited": "Dumoo woo goo nda {{PLURAL:$1|dumi-izoo|$1 dumi-izey}}.",
+ "category-article-count": "{{PLURAL:$2|Moɲoo woo hinne bara dumoo woo ra.|Ne {{PLURAL:$1|moɲoo|$1 moɲey}} dumoo woo ra, ka hun $2 ra.}}",
+ "category-article-count-limited": "Ne {{PLURAL:$1|moɲoo goo|$1 moɲey goo}} sohõda dumoo ra.",
+ "category-file-count": "{{PLURAL:$2|Tukoo woo hinne bara dumoo woo ra.|Ne {{PLURAL:$1|tukoo goo|$1 tukey goo}} dumoo, ka hun $2 ra.}}",
+ "category-file-count-limited": "Ne {{PLURAL:$1|tukoo goo|$1 tukey goo}} sohõda dumoo ra.",
+ "listingcontinuesabbrev": "(bisa)",
+ "index-category": "Moo šilbantey",
+ "noindex-category": "Moɲey kaŋ mana šilbandi",
+ "broken-file-category": "Mooyaŋ nda tuku dobu kayrayaŋ",
+ "categoryviewer-pagedlinks": "($1) ($2)",
+ "about": "Bay woo ga",
+ "article": "Gundekuna moo",
+ "newwindow": "(ga feera zanfun taaga ra)",
+ "cancel": "Naŋ",
+ "moredotdotdot": "Ka tonton…",
+ "morenotlisted": "Maašeedaa woo mana timme.",
+ "mypage": "Moo",
+ "mytalk": "Šelaŋ",
+ "anontalk": "Šelaŋ IP aderesoo woo se",
+ "navigation": "Naaruyan",
+ "and": "&#32;nda",
+ "qbfind": "Guna",
+ "qbbrowse": "Ceeci",
+ "qbedit": "Fasal",
+ "qbpageoptions": "Moɲoo woo",
+ "qbmyoptions": "Ay moɲey",
+ "faq": "Hãa ka faham",
+ "faqpage": "Project:Hãa ka faham",
+ "actions": "Teerey",
+ "namespaces": "Maafarrey",
+ "variants": "Dumi-dumey",
+ "navigation-heading": "Naaruyan šilbayboŋ",
+ "errorpagetitle": "Firka",
+ "returnto": "Willi $1 ga.",
+ "tagline": "Hun {{SITENAME}} ga",
+ "help": "Faaba",
+ "search": "Ceeci",
+ "searchbutton": "Ceeci",
+ "go": "Koy",
+ "searcharticle": "Koy",
+ "history": "Moo taariki",
+ "history_short": "Taariki",
+ "updatedmarker": "kaŋ taagandi z'ay naarumi koraa",
+ "printableversion": "Karyan dumi",
+ "permalink": "Dobu duumante",
+ "print": "Kar",
+ "view": "Guna",
+ "view-foreign": "Guna $1 ga",
+ "edit": "Fasal",
+ "edit-local": "Gorodoo šilbay fasal",
+ "create": "Tee",
+ "create-local": "Gorodoo šilbay tonton",
+ "editthispage": "Moɲoo woo fasal",
+ "create-this-page": "Moɲoo woo tee",
+ "delete": "Tuusu",
+ "deletethispage": "Moɲoo woo tuusu",
+ "undeletethispage": "Moo tuusantaa woo yeeti",
+ "undelete_short": "Yeeti {{PLURAL:$1|barmay foo|$1 barmay fooyaŋ}}",
+ "viewdeleted_short": "Guna {{PLURAL:$1|barmay tuusante foo|$1 barmay tuusante fooyaŋ}}",
+ "protect": "Jejebu",
+ "protect_change": "barmay",
+ "protectthispage": "Moɲoo woo jejebu",
+ "unprotect": "Jejebu barmay",
+ "unprotectthispage": "Moɲoo woo jejeboo barmay",
+ "newpage": "Moo taaga",
+ "talkpage": "Deede moo woo ga",
+ "talkpagelinktext": "Šelaŋ",
+ "specialpage": "Cerecere moo",
+ "personaltools": "Boro-boŋ goyjinawey",
+ "articlepage": "Gundekuna moɲoo guna",
+ "talk": "Deedeyan",
+ "views": "Gunarey",
+ "toolbox": "Goyjinawey",
+ "userpage": "Goykaw moo guna",
+ "projectpage": "Porože moo guna",
+ "imagepage": "Tuku moo guna",
+ "mediawikipage": "Bataga moo guna",
+ "templatepage": "Leeti moo guna",
+ "viewhelppage": "Faaba moo guna",
+ "categorypage": "Dumi moo guna",
+ "viewtalkpage": "Deedaa guna",
+ "otherlanguages": "Šenni tanayaŋ ra",
+ "redirectedfrom": "(Kaŋ $1 n'a bisandi)",
+ "redirectpagesub": "Bisandi moo",
+ "redirectto": "Bisandi ne:",
+ "lastmodifiedat": "Moɲoo barmay cee koraa $1 hane, $2 waate.",
+ "viewcount": "Moɲoo woo duwandi {{PLURAL:$1|cee foo|$1 cee booboyaŋ}}.",
+ "protectedpage": "Moo jejebante",
+ "jumpto": "Sar ne:",
+ "jumptonavigation": "naaruyan",
+ "jumptosearch": "ceeciyan",
+ "view-pool-error": "Alhaa naŋ, feršikey goo goy šenda ra sohõda.\nGoykaw booboyaŋ ga ceeci ka dii moɲoo woo.\nTaare batu kayna jina de ma ceeci ka dii moɲoo koyne.",
+ "generic-pool-error": "Alhaa naŋ, feršikey goo goy šenda ra sohõda.\nGoykaw booboyan ga ceeci ka dii goy misoo woo.\nTaare batu kayna jina de ma ceeci ka dii y'a koyne.",
+ "pool-timeout": "Goywaati batuyan ben",
+ "pool-queuefull": "Batuyan šillo too",
+ "pool-errorunknown": "Firka šibayante",
+ "pool-servererror": "Batuyan goy kabukaw ši duwandi ($1).",
+ "aboutsite": "{{SITENAME}} ga",
+ "aboutpage": "Porože:Bayray",
+ "copyright": "Gundekuna ga bara $1 cire nda manti kakaw ra.",
+ "copyrightpage": "{{ns:project}}:Alhakey",
+ "currentevents": "Sohõda teerey",
+ "currentevents-url": "Project:Sohõda teerey",
+ "disclaimers": "Yaamarey",
+ "disclaimerpage": "Project: Hankul yaamar",
+ "edithelp": "Fasalyan faaba",
+ "mainpage": "Šintin moo",
+ "mainpage-description": "Šintin moo",
+ "policy-url": "Project:Laada",
+ "portal": "Jamaa batoo",
+ "portal-url": "Project:Jamaa batoo",
+ "privacy": "Sutura laada",
+ "privacypage": "Project:Sutura laada",
+ "badaccess": "Duɲeyaney firka",
+ "badaccess-group0": "N' šii nda fondo ka goyoo woo tee ne.",
+ "badaccess-groups": "Goyoo kaŋ war n'a wiri ga feeri goykey wey de se {PLURAL:$2|margaa|margawey affaa}}: $1.",
+ "versionrequired": "MediaWiki dumi $1 ga waažibandi",
+ "versionrequiredtext": "MediaWiki dumi $1 ga waažibandi ka goy nda moɲoo woo. Dii [Special:Dumi|moo dumi]].",
+ "ok": "Ayyo",
+ "pagetitle": "$1 - {{SITENAME}}",
+ "pagetitle-view-mainpage": "{{SITENAME}}",
+ "backlinksubtitle": "← $1",
+ "retrievedfrom": "Soolomandi ka hun \"$1\" ra",
+ "youhavenewmessages": "{{PLURAL:$3|N' goo nda}} $1 ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|N' goo nda }} $1 ka hun {{PLURAL:$3|goykaw tana|$3 goykaw taney}} ra ($2).",
+ "youhavenewmessagesmanyusers": "N' goo nda $1 goykaw booboyaŋ ra ($2).",
+ "newmessageslinkplural": "{{PLURAL:$1|alhabar foo|999=alhabar taagayaŋ}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|barmay|999=barmay}} kokorante",
+ "youhavenewmessagesmulti": "War goo nda alhabar taaga $1 ga",
+ "editsection": "fasal",
+ "editold": "fasal",
+ "viewsourceold": "aššil guna",
+ "editlink": "fasal",
+ "viewsourcelink": "aššil guna",
+ "editsectionhint": "Dumbu fasal: $1",
+ "toc": "Gundekuna",
+ "showtoc": "cebe",
+ "hidetoc": "tugu",
+ "collapsible-collapse": "Daabirji",
+ "collapsible-expand": "Hayandi",
+ "confirmable-confirm": "Woy wal'aru no?",
+ "confirmable-yes": "Ayyo",
+ "confirmable-no": "Kalaa",
+ "thisisdeleted": "Guna wala yeeti $1?",
+ "viewdeleted": "$1 guna?",
+ "restorelink": "{{PLURAL:$1|barmay tuusante foo|$1 barmay tuusante fooyaŋ}}",
+ "feedlinks": "Toonandiyan:",
+ "feed-invalid": "Maahantumyan toonandiyan dumi laala.",
+ "feed-unavailable": "Goykondayyan toonandiyaney ši duwandi",
+ "site-rss-feed": "$1 RSS toonandiyan",
+ "site-atom-feed": "$1 Atom toonandiyan",
+ "page-rss-feed": "\"$1\" RSS toonandiyan",
+ "page-atom-feed": "\"$1\" Atom toonandiyan",
+ "feed-atom": "Atom",
+ "feed-rss": "RSS",
+ "red-link-title": "$1 (moɲoo šii bara)",
+ "sort-descending": "Kabu ka zunbu fayyan",
+ "sort-ascending": "Kabu ka ziji fayyan",
+ "nstab-main": "Moo",
+ "nstab-user": "Goykaw moo",
+ "nstab-media": "Hẽenandi moo",
+ "nstab-special": "Cerecere moo",
+ "nstab-project": "Porožewoo ga",
+ "nstab-image": "Tuku",
+ "nstab-mediawiki": "Alhabar",
+ "nstab-template": "Leeti",
+ "nstab-help": "Faaba moo",
+ "nstab-category": "Dumi",
+ "nosuchaction": "Teera tanaa woo šii",
+ "nosuchactiontext": "Goyoo kaŋ tabatandi URL ra ši tee.\nMane firka bara URL hantumoo ra, wala dobu laala ma hanga.\nWoo ga hin ka tee da hasaraw {{SITENAME}} goy porogaramoo ra.",
+ "nosuchspecialpage": "Cerecere moɲoo woo ši bara",
+ "nospecialpagetext": "Maašeede goo moo cerecerante henney se kaŋ ga duwandi [[Special:SpecialPages|{{int:specialpages}}]] ga.",
+ "error": "Firka",
+ "databaseerror": "Bayrayhugu firka",
+ "databaseerror-text": "Bayrayhugu hãayan firka bangay.\nWoo ga hin ka ti porogaram hasaraw tammaasa.",
+ "databaseerror-textcl": "Bayrayhugu hãayan firka bangay.",
+ "databaseerror-query": "Hãayan: $1",
+ "databaseerror-function": "Goymee: $1",
+ "databaseerror-error": "Firka: $1",
+ "laggedslavemode": "<strong>Yaamar:</strong> A ga hin ka tee taagandiri korawey šii moɲoo ra.",
+ "readonly": "Bayrayhugu kufalante",
+ "enterlockreason": "Dalin dam kaŋ kufaloo se, sanda ka žimam waati kaŋ kufaloo ka feera",
+ "readonlytext": "Juwalkaa kaŋ n'a kufal na daliloo woo noo: $1",
+ "missing-article": "Bayrayhugoo mana dii moo foo hantumoo kaŋ a hima ka duu w'a, kaŋ maaɲoo ti \"$1\" $2.",
+ "missingarticle-rev": "(barmayyan#: $1)",
+ "missingarticle-diff": "(Barmay: $1, $2)",
+ "readonly_lag": "Bayrayhugoo n' ka kufalandi nga boŋše waati kaŋ alhaadimi bayrayhugu feršikey ga feršikaw jinehuno gaarandi",
+ "internalerror": "Kunahere firka",
+ "internalerror_info": "Kunahere firka: $1",
+ "filecopyerror": "Mana hin ka tuku \"$1\" bere \"$2\" ga.",
+ "filerenameerror": "Mana hin ka tuku \"$1\" maa barmay \"$2\" ga.",
+ "filedeleteerror": "Mana hin ka tuku \"$1\" tuusu.",
+ "directorycreateerror": "Mana hin ka fooloɲaa \"$1\" tee.",
+ "filenotfound": "Mana hin ka duu tuku \"$1\" barmay.",
+ "unexpected": "Hinna kaŋ mana naanandi: \"$1\"=\"$2\".",
+ "formerror": "Firka: Mana hin ka takari sanba.",
+ "badarticleerror": "Goyoo woo ši hin ka tee moɲoo woo ga.",
+ "cannotdelete": "\"$1\" moo wala tuku mana hin ka tuusandi.",
+ "cannotdelete-title": "Ši hi ka \"$1\" moɲoo tuusu",
+ "delete-hook-aborted": "Dobu foo na tuusuroo ganji.\nA mana dalil kul noo.",
+ "no-null-revision": "Mana hin ka yaada-barmay taaga tee \"$1\" moo se",
+ "badtitle": "Maa laala",
+ "badtitletext": "Moo maaɲoo kaŋ hãandi ga laala, koonu wal'a dobu laybante no šenney wala wiki maaɲey game.",
+ "perfcached": "Bayhayey wey ga tugandi nd'a ga tee kaŋ i ši teji koyne. {{PLURAL:$1|hunyan foo|$1 hunyaŋ}} ga bara tugu dogoo ra..",
+ "perfcachedts": "Bayhayey wey ga tugandi nd'i taagandi cee koraa $1 hane. Fella ra {PLURAL:$4|hunyan foo|$4 hunyaŋ}} ga bara tugudogoo ra.",
+ "querypage-no-updates": "Moɲoo woo taagandirey n' ka kay sohõda.\nNe bayhayey ši kaa ka taagandi sohõda.",
+ "viewsource": "Aššil guna",
+ "viewsource-title": "Aššil guna $1 se",
+ "actionthrottled": "Goy nakasante",
+ "actionthrottledtext": "Ka žiibi bataga ganji, war ga hin ka goyoo woo tee de cee fooyaŋ waati dunba ra, nda war na adadoo din hoo.\nTaare wa ceeci koyne minitiyaŋ ra.",
+ "protectedpagetext": "Moɲoo woo n' ka jejebandi ka barmayyan wala goy tanayaŋ ganji.",
+ "viewsourcetext": "War ga hin ka dii moɲoo ašsiloo nda k'a bere:",
+ "viewyourtext": "War ga hin ka dii <strong>war fasalyaney</strong> aššilo nda k'i bere:",
+ "protectedinterface": "Moɲoo woo ka hantumoo cebe wikiyoo woo porogaramoo se nd'a ga jejebu hasaraw teekey ga. Goy nda [//translatewiki.net/ translatewiki.net], MediaWiki berandiyan porožewoo ka berandiyaŋ tonton wala k'i barmay.",
+ "editinginterface": "<strong>Yaamar:</strong> War goo ma moo fasal kaŋ nd'i ga goy ka goyjinaa porogaram hantumoo cebe. \nBarmawey kaŋ ga tee moɲoo ka hantumey kaŋ goykaw ga dii y'ey bere wikiyoo woo ga.",
+ "translateinterface": "Ka berandiyan tonton wala k'i barmay, wa goy nda [//translatewiki.net/ translatewiki.net], MediaWiki berandiyan porožewoo.",
+ "cascadeprotected": "Moɲoo woo ga jejebu barmayyan ga zam'a goo ne {PLURAL:$1|moo kaŋ ti|moɲey kaŋ ti}} jejebante nda \"kaŋandiyan\" suubari kaŋ ga dira: \n$2",
+ "namespaceprotected": "War šii nda fondo ka moɲey barmay <strong>$1</strong> maadogoo ra.",
+ "customcssprotected": "War šii nda fondo ka CSS moɲoo woo barmay zama goykaw tana foo boŋkayandiyaney g'a ra.",
+ "customjsprotected": "War šii nda fondo ka JavaScript barmay zama a goo nda goykaw tana foo boŋkayandiyaney.",
+ "mycustomcssprotected": "War šii nda fondo ka CSS moɲoo woo barmay.",
+ "mycustomjsprotected": "War šii nda fondo ka JavaScript moɲoo woo barmay.",
+ "myprivateinfoprotected": "War šii nda fondo ka war sutura alhabaroo moɲoo woo barmay.",
+ "mypreferencesprotected": "War šii nda fondo ka war ibaayey barmay.",
+ "ns-specialprotected": "Moo cerecerantey ši hin ka barmandi.",
+ "titleprotected": "[[User:$1|$1]] na maaɲoo woo jejebu za teeyanoo ga.\nI na daliloo noo \"<em>$2</em>\" ra.",
+ "filereadonlyerror": "Mana hin ka \"$1\" tukoo barmay zama tuku \"$2\" jišidogoo goo cawyan-hinne alhaali ra.\n\nJuwalkaa kaŋ n'a kufal na daliloo woo noo: \"$3\"",
+ "invalidtitle-knownnamespace": "Maa laala \"$2\" maadogoo nda \"$3\" hantumoo bande",
+ "invalidtitle-unknownnamespace": "Maa laala maadoo hinna \"$1\" šibayante nda \"$2\" hantumoo bande",
+ "exception-nologin": "Mana huru",
+ "exception-nologin-text": "Taare huru ka hin ka duu moɲoo wala teeraa woo.",
+ "exception-nologin-text-manual": "Taare $1 ka hin ka duu moɲoo wala teeraa woo.",
+ "virus-badscanner": "Hanseyan laala: wirisi gunakaw šibayante: <em>$1</em>",
+ "virus-scanfailed": "gunari kaŋ (ašariya $1)",
+ "virus-unknownscanner": "wirisi safari šibayante:",
+ "logouttext": "Bay kaŋ moɲey jerey ga hin ka gaabandi ka cebe sanda war n' ka cindi ka huru, hala war ma ceecikaw tugudogoo tuusu.",
+ "welcomeuser": "Kubayni, $1!",
+ "welcomecreation-msg": "War kontoo tee ka ben.\nWar ga hin ka war {{SITENAME}} [[Special:Preferences|ibaayey]] barmay nda war ga baa.",
+ "yourname": "Goykaw maa:",
+ "userlogin-yourname": "Goykaw ma",
+ "userlogin-yourname-ph": "Ni goykaw maaɲoo dam",
+ "createacct-another-username-ph": "Goykaw maa dam",
+ "yourpassword": "Šennikufal:",
+ "userlogin-yourpassword": "Šennikufal",
+ "userlogin-yourpassword-ph": "ni šennikufaloo dam",
+ "createacct-yourpassword-ph": "Šennikufal dam",
+ "yourpasswordagain": "Šennikufal hantum taaga:",
+ "createacct-yourpasswordagain": "Šennikufal tabatandi",
+ "createacct-yourpasswordagain-ph": "Šennikufal dam taaga",
+ "remembermypassword": "Hong'ay huruyan tammaasa ceecikaa woo ga (a ma ši bisa {PLURAL:$1|jirbi|jirbi}}) $1",
+ "userlogin-remembermypassword": "Ay goywaatoo ma gaabandi ka feera",
+ "userlogin-signwithsecure": "Ciya nda saajaw",
+ "yourdomainname": "Ni zunbu dogoo:",
+ "password-change-forbidden": "Ni ši hin ka šennikufaley barmay wikiyoo woo ga.",
+ "externaldberror": "Huru",
+ "login": "Huru",
+ "nav-login-createaccount": "Huru / kontu tee",
+ "userlogin": "Huru / kontu tee",
+ "userloginnocreate": "Huru",
+ "logout": "Fatta",
+ "userlogout": "Fatta",
+ "notloggedin": "Mana huru",
+ "userlogin-noaccount": "Šii nda kontu wala?",
+ "userlogin-joinproject": "Dii {{SITENAME}}",
+ "nologin": "Šii nda kontu wala? $1.",
+ "nologinlink": "Kontu tee",
+ "createaccount": "Kontu tee",
+ "gotaccount": "Huru",
+ "gotaccountlink": "Huru",
+ "userlogin-resetlink": "Dirŋa ni kontu šilbawey?",
+ "userlogin-resetpassword-link": "Dirŋa ni šennikufaloo?",
+ "userlogin-helplink2": "Ay gaa ka huru",
+ "userlogin-loggedin": "N' huru ka ben sanda {{GENDER:$1|$1}}.\nGanda takaddaa zaa ka huru goykaw tana.",
+ "userlogin-createanother": "Kontu tee",
+ "createacct-emailrequired": "Bataga aderesu",
+ "createacct-emailoptional": "Bataga aderesu (suubari)",
+ "createacct-email-ph": "Ni bataga aderesoo dam",
+ "createacct-another-email-ph": "Bataga aderesu dam",
+ "createaccountmail": "Šiiyan šennikufal dam saaye bande nd'a sanba bataga aderesu tabatantaa do",
+ "createacct-realname": "Maa cimi (suubari)",
+ "createaccountreason": "Dalil:",
+ "createacct-reason": "Dalil",
+ "createacct-reason-ph": "Hayaa kaŋ se war goo ma kontu waana tee",
+ "createacct-captcha": "Saajaw korošiyan",
+ "createacct-imgcaptcha-ph": "Hantumoo kaŋ war ga dii y'a beene dam",
+ "createacct-submit": "War kontoo tee",
+ "createacct-another-submit": "Kontu waana foo tee",
+ "createacct-benefit-heading": "Boro kaŋ ga hima war ka {{SITENAME}} tee.",
+ "createacct-benefit-body1": "{{PLURAL:$1|barmay $1}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|moo $1}}",
+ "createacct-benefit-body3": "Cee koraa {{PLURAL:$1|kanbuzaakaw $1}}",
+ "badretype": "Kufalšenney kaŋ war n'i dam ši tenji.",
+ "userexists": "Maa waanante suuba taare.",
+ "loginerror": "Huruyan firka",
+ "createacct-error": "Kontu feeriyan firka",
+ "createaccounterror": "Mana hin ka kontu tee: $1",
+ "nocookiesnew": "War aleewawey n' ka kay.\nW'i tunandi, de war ma huru nda war goykawmaa nda šennikufal taagey.",
+ "nocookieslogin": "War aleewawey n' ka kay.\nW'i tunandi, de war ma ceeci koyne.",
+ "nocookiesfornew": "Goykaw kontoo mana mana teendi zam'ir mana hin ka ng'aššiloo tabatandi.\nWar m'alhakiika kaŋ aleewawey tunandi, moɲoo zumandi taaga nda ceeci koyne.",
+ "nocookiesforlogin": "{{int:nocookieslogin}}",
+ "noname": "War mana goykaw maa henna kayandi.",
+ "loginsuccesstitle": "Huryanoo boori",
+ "loginsuccess": "<strong>War huru {{SITENAME}} ra sohõ sanda \"$1\".</strong>",
+ "nosuchuser": "Goykaw kul šii kaŋ ti \"$1\". \nGoykawmaaɲey ga kula nda harfu azzaati.\nWar hantumoo koroši, wala [[Special:UserLogin/signup|kontu taaga tee]].",
+ "nosuchusershort": "Goykaw kul šii kaŋ ti \"$1\".\nHantum-tenjiyan koroši.",
+ "nouserspecified": "War ga hima ka goykawmaa kayandi.",
+ "login-userblocked": "Goykaw gagayandi. Huruyan šii nda fondo.",
+ "wrongpassword": "Ceeci koyne taare.",
+ "wrongpasswordempty": "Šennikufaloo kaŋ huru ga koonu. \nTee koyne taare.",
+ "passwordtooshort": "Šennikufaley ka hima ka bara nda {{harfu 1$|PLURAL:$1}.",
+ "password-name-match": "War šennikufaloo ma ši hima war goykaw maaɲoo.",
+ "password-login-forbidden": "Goykaw maa nda šennikufaley wey ši hin ka koy.",
+ "mailmypassword": "Šennikufaloo yeeti",
+ "passwordremindertitle": "Šiiyan šennikufal taaga {{SITENAME}} se",
+ "passwordremindertext": "Boro foo (sanda ni, nda IP aderesu $1) na šennikufal taaga wiri {{SITENAME}} ($4) se nd'a kayandi \"$3\" ga. Nda war mana boona woo, war mma hima ka huru nda šennikufal taaga suuba sohõ. War šiiyan šennikufaloo waato ga ben {{PLURAL:$5|jirbi foo|jirbi $5}} ra. \n\nNda boro waani foo no k'a wiri, wala war n' ka honga war šennikufaloo nda war ši boona k'a barmay koyne, war ga hin ka yaamaroo woo muray, nda ka gaabu ka goy nda šennikufal žeenaa.",
+ "noemail": "Bataga aderesu kul mana jisandi \"$1\" goykaa se.",
+ "noemailcreate": "War ga hima ka bataga aderesu henna noo.",
+ "passwordsent": "Šennikufal taaga n' ka sanbandi bataga aderesu jisantaa ga \"$1\" se. Ceeci ka huru koyne nda n' duu w'a.",
+ "blocked-mailpassword": "I na war IP aderesoo ganji a ma hantum, adiši a ši duu fondo ka goy nda šennikufal yeetiyan dabaroo ka zanbayan gagay.",
+ "eauthentsent": "Cimandiyan bataga n' ka sanbandi bataga aderesu tabatantaa ga. \nWar ga hima ka šilbawey kaŋ goo bataga laasaabu jina, hala war ga hin ka war ga hin ka bataga tana kul sanba ka cimandi kaŋ alhakiika ra kontoo ti war wane.",
+ "throttled-mailpassword": "Šennikufal yeetiyan bataga n' ka sanbandi war se a ga too {{PLURAL:$1|guuru $1}}.\nKa zanbayan ganji, šennikufal yeetiyan bataga foo de ma sanbandi {{PLURAL:$1|guuru $1}} ra.",
+ "mailerror": "Bataga sanbayan firka: $1",
+ "acct_creation_throttle_hit": "Boro kaŋ ga ciya nda war IP aderesoo na {{PLURAL:$1|kontu $1}} jirbi koraa ra, woo ti alkadaroo beero kaŋ ga hin ka tee waatoo woo ra. \nWoo sabboo se, borey kaŋ ga goy nda IP aderesoo woo ši hin ka kontu kul tee koyne sohõda.",
+ "emailauthenticated": "War bataga aderesoo n' ka tabatandi $2 boŋ $3 ga.",
+ "emailnotauthenticated": "War bataga aderesoo mana tabatandi.\nBataga kul ši sanbandi alhaaley wey affoo ku še.",
+ "noemailprefs": "Bataga aderesu tabatandi war ibaayey ra alhaaley wey ma hin ka goy.",
+ "emailconfirmlink": "War bataga aderesoo tabatandi",
+ "invalidemailaddress": "Bataga aderesoo ši hin ka zaandi z'a mma hima takari laybante. \nSoobay k'aderesu takari henna dam wala farru koonu naŋ.",
+ "cannotchangeemail": "Kontu bataga aderesey ši hin ka barmay wikiyoo woo ga.",
+ "emaildisabled": "Nungoo woo ši hin ka bataga sanba.",
+ "accountcreated": "Kontoo tee ka ben",
+ "accountcreatedtext": "Kontoo goykaa no ka tee [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|batu]]) se.",
+ "createaccount-title": "Kontu tee {{SITENAME}} se",
+ "createaccount-text": "Boro foo na kontu tee war bataga aderesoo se {{SITENAME}} ($4) kaŋ maa ti \"$2\" ga, nda \"$3\" šennikufaloo.\nWa maa hantum ka hima ka huru nda šennikufal barmay sohõ.\n\nWar ga hin ka batagaa woo muray nda kontoo woo n' ka dere ka tee.",
+ "login-throttled": "War ceeci cee booboyaŋ ka huru.\nTaare batu $1 jina ka ciya koyne.",
+ "login-abort-generic": "War mana hin ka huru - Laybu",
+ "login-migrated-generic": "War kontoo n' ka ganandi nda war goykaw maaɲoo ši ye ka bara wikiyoo woo ga.",
+ "loginlanguagelabel": "Šenni:$1",
+ "suspicious-userlogout": "War ceeciroo ka fatta mongu zam'a ga hima kaŋ ceecikaw kayraa wala tugudoo tokore k'a sanba.",
+ "createacct-another-realname-tip": "Maa cimi noo nda n' ga baa.\nNda war soobay k'a noondi, boro ga goy nd'a ka goykaw alhaali noo ngi goyoo se.",
+ "pt-login": "Huru",
+ "pt-login-button": "Huru",
+ "pt-createaccount": "Kontu tee",
+ "pt-userlogout": "Fatta",
+ "php-mail-error-unknown": "Firka šibayante PHP mail() goymee se",
+ "user-mail-no-addy": "A ceeci ka bataga sanda bila nda bataga aderesu",
+ "user-mail-no-body": "A ceeci ka bataga koonu wala kaŋ ga hansa ka duurya sanba.",
+ "changepassword": "Šennikufal barmay",
+ "resetpass_announce": "Ka huru ka ben, war ga hima ka šennikufala taaga dam.",
+ "resetpass_text": "<!-- Hantun tonton ne -->",
+ "resetpass_header": "Kontoo šennikufaloo barmay",
+ "oldpassword": "Šennikufal žeena:",
+ "newpassword": "Šennikufal taaga:",
+ "retypenew": "Šennikufal taagaa hantum koyne:",
+ "resetpass_submit": "Šennikufal barmay ka huru",
+ "changepassword-success": "War šennikufaloo barmay ka boori!",
+ "changepassword-throttled": "War ceeci cee booboyaŋ ka huru.\nTaare batu $1 jina ka ceeci koyne.",
+ "resetpass_forbidden": "Šennikufaley ši hin ka barmay",
+ "resetpass-no-info": "War ga hima ka huru jina ka duu moɲoo woo.",
+ "resetpass-submit-loggedin": "Šennikufal barmay",
+ "resetpass-submit-cancel": "Naŋ",
+ "resetpass-wrong-oldpass": "Sohõda wala batuyan šennikufal laala.\nA ga hin ka tee war bay na šennikufaloo barmay wala batuyan wane taaga wiri.",
+ "resetpass-recycled": "Taare war šennikufaloo yeeti k'a tee affoo kaŋ nanti war sohõda šennikufaloo. \\",
+ "resetpass-temp-emailed": "War n' ka huruyan nda šiiyan ašariya kaŋ sanbandi bataga ra.\nKa huru ka timme, war ga hima ka šennikufal taaga dam ne: \\",
+ "resetpass-temp-password": "Šiiyan šennikufal:",
+ "resetpass-abort-generic": "Dobu foo no ka šennikufal barmayyanoo ganji.",
+ "resetpass-expired": "War šennikulaloo waatoo ben. Wa šennikufal taaga dam ka huru.",
+ "resetpass-expired-soft": "War šennikufaloo waatoo ben nd'a ga hima ka yeeti. War šennikufal taaga suuba sohõda, wala \"{{int:resetpass-submit-cancel}}\" naagu k'a yeeti waati foo.",
+ "resetpass-validity-soft": "War šennikufaloi ši boori: $1\n\nTaare šennikufal taaga suuba sohõ, wala \"{{int:resetpass-submit-cancel}}\" naagu k'a yeeti waati foo.",
+ "passwordreset": "Šennikufal yeeti",
+ "passwordreset-text-one": "Takaddaa woo timmandi ka duu šiiyan šennikufal bataga ra.",
+ "passwordreset-text-many": "{{PLURAL:$1|Faari foo toonandi ka duu šiiyan šennikufal foo bataga ra.}}",
+ "passwordreset-legend": "Šennikufal yeeti",
+ "passwordreset-disabled": "Šennikufal yeetiyan n' ka kaŋ wikiyoo woo se.",
+ "passwordreset-emaildisabled": "Bataga alhaaley n' ka kaŋ wikiyoo ga.",
+ "passwordreset-username": "Goykaw maa:",
+ "passwordreset-domain": "Zunbudoo:",
+ "passwordreset-capture": "Cebe batagaa kaŋ hun woo ra?",
+ "passwordreset-capture-help": "Nda war na bataa woo šilbay, batagaa (nda šiiyan šennikufal) ga cebe war se nd'a ga sanbandi goykaa do.",
+ "passwordreset-email": "Bataga aderesu:",
+ "passwordreset-emailtitle": "Kontu šilbawey {{SITENAME}} ga",
+ "passwordreset-emailtext-ip": "Boro foo (sanda war da, nda IP aderesu $1) ceeci ka war\n šenniufaloo barmay {{SITENAME}} ($4) se. Goykaa woo {{PLURAL:$3|kontoo ti}\n kaŋ ga hanga bataga aderesoo woo:\n\n $2\n\n{{PLURAL:$3|Šiiyan šennikufaloo woo|Šiiyan šennikufaley wey}} ga buu {{PLURAL:$5|zaari foo|zaari}} ra.\nWar ga hima ka huru nda šennifulal taaga dam sohõ. Nda boro waani ka ceeci ka woo tee\n nda war honga war šennikufal žeenaa, nda war ši boona koyne\n ka šennikufal barmay,\n war ga hin ka šaawaroo woo murayy nda soobay ka goy nda war\n šennikufal žeenaa. \\",
+ "passwordreset-emailtext-user": "Goykaw $1 {{SITENAME}} wiri ka war sennikufaloo yeeti {{SITENAME}} se\n($4). Goykaa woo {{PLURAL:$3|kontoo ga|kontey ga}} marga nda nda bataga aderesoo woo:\n\n$2\n\n {{PLURAL:$3|Šiiyan šennikufaloo woo|Šiiyan šennikufaley wey}} ga buu {{PLURAL:$5|jirbi foo|jirbi $5}} ra.\nWar ga hima ka huru nda šennikufal taaga suuba sohõ. Nda boro waani ka ceeci\n ka woo tee wala war ga honga wara šennikufal žeenaa nda war ši boona koyne\n k'a barma, war ga hin ka šaawaroo woo muray nda gaabandi ka goy nda war\n šennikufal žeenaa.",
+ "passwordreset-emailelement": "Goykaw maa: $1\nŠiiyan šennikufal: $2",
+ "passwordreset-emailsent": "Šennikufal yeetiyan bataga n' ka sanbandi war se.",
+ "passwordreset-emailsent-capture": "Šennikulal yeetiyan bataga n' ka sanbandi war se, kaŋ ga cebandi ne ganda.",
+ "passwordreset-emailerror-capture": "Šennikufal yeetiyan bataga n' ka teendi, kaŋ ga cebandi ne ganda, amm'a mana hin ka sanbandi {{GENDER:$2|goykaw}} do: $1",
+ "changeemail": "Bataga aderesu barmay",
+ "changeemail-text": "Takaddaa woo toonandi ka war bataga aderesoo barmay. War ka hima ka war šennikufaloo dam ka barmayyanoo tabatandi.",
+ "changeemail-no-info": "War ga hima ka huru ka hin duu moɲoo woo.",
+ "changeemail-oldemail": "Sohõda bataga aderesu",
+ "changeemail-newemail": "Bataga aderesu taaga:",
+ "changeemail-none": "(baffoo)",
+ "changeemail-password": "War {{SITENAME}} šennikufaloo:",
+ "changeemail-submit": "Bataga barmay",
+ "changeemail-throttled": "War wiri ka huru cee booboyaŋ.\nTaare wa batu $1 jina ka ceeci koyne.",
+ "resettokens": "Tammaasawey yeeti",
+ "resettokens-text": "War ga hin ka tammaasawey yeeti kaŋ ga too war ma hin ka dii sutura bayhaya tanayaŋ nda war kontoo ne.\n|nWar ga hima k'a tte nda war dere k'i noo boro waani se wala nda war ga šikka kaŋ boro waani n' ka huru kontoo ra.",
+ "resettokens-no-tokens": "Tammaasa kul šii yeetiyan se.",
+ "resettokens-legend": "Tammaasawey yeeti",
+ "resettokens-tokens": "Tammaasawey:",
+ "resettokens-token-label": "$1 (sohõda hinna: $2)",
+ "resettokens-watchlist-token": "Tammaasa interneti toonandiyanoo se (Atom/RSS) [[Special:Hawgayhayey|barmawey war hawgayhayey maašeedaa ga]]",
+ "resettokens-done": "Tammaasawey yeeti:",
+ "resettokens-resetbutton": "Tammaasa suubantey yeeti",
+ "bold_sample": "Hantum warga",
+ "bold_tip": "Hantum warga",
+ "italic_sample": "Hantum šiirante",
+ "italic_tip": "Hantum šiirante",
+ "link_sample": "Dobu maa",
+ "link_tip": "Kunahere dobu",
+ "extlink_sample": "http://www.example.com dobu maa",
+ "extlink_tip": "Tarayhere dobu (honga http:// jinekanji)",
+ "headline_sample": "Boŋžeeri hantum",
+ "headline_tip": "Adadu 2 boŋžeeri",
+ "nowiki_sample": "Hantum bila nda fasal-takari dam ne",
+ "nowiki_tip": "Wiki fasal-takaroo muray",
+ "image_sample": "Example.jpg",
+ "image_tip": "Tuku damgamante",
+ "media_sample": "Example.ogg",
+ "media_tip": "Tuku dobu",
+ "sig_tip": "War kanbežeeroo nda waati šilbay",
+ "hr_tip": "Žeeri kanante (w'a tee cee fooyaŋ de)",
+ "summary": "Duurandi:",
+ "subject": "Teekaw/boŋžeeri:",
+ "minoredit": "Barmay kayna ti woo:",
+ "watchthis": "Moɲoo woo hawgay",
+ "savearticle": "Moɲoo gaabu",
+ "preview": "Moofur",
+ "showpreview": "Moofuryan cebe",
+ "showdiff": "Barmawey cebe",
+ "blankarticle": "<strong>Yaamar:</strong> Moɲoo kaŋ war goo m'a tee t'ikoonu.\nNda war na \"{{int:savearticle}}\" naagu, moɲoo ga kaa ta tee bila nda gundekuna.",
+ "anoneditwarning": "<strong>Yaamar:</strong> War mana huru. Borey kul hin ka dii war IP aderesoo nda war na barmay kul tee. Nda war <strong>[$1 huru]</strong> wala <strong>[$2 kontu tee]</strong>, war barmawey ga hanga war goykaw maaɲoo bande, nda nafaw taney kul. \\",
+ "anonpreviewwarning": "<em>War mana huru. Gaabuyan ga too war IP aderesoo ma jisandi moɲoo woo fasalyan taarikoo ra.</em>",
+ "missingsummary": "<strong>Hongu:</strong> War mana barmay duurandi noo.\nWa \"{{int:savearticle}}\" naagu koyne, kul war barmaa ga gaabundi bila nd'affoo.",
+ "missingcommenttext": "Wa feeriyan foo hantum ganda.",
+ "missingcommentheader": "<strong>Hongu:</strong> War mana teekaw/boŋžeeri noo feeriyanoo woo se.\nWa \"{{int:savearticle}}\" naagu koyne, kul war barmaa ga gaabundi bila nd'affoo.",
+ "summary-preview": "Duurandi moofuryan:",
+ "subject-preview": "Teekaw|boŋžeeri moofuryan:",
+ "blockedtitle": "Goykaa n' ka gagayandi",
+ "blockedtext": "<strong>War goykaw maa wala IP aderesoo n' ka hode.</strong>\n\n$1 no k'a hode.\nDaliloo kaŋ a n'a noo ti <em>$2</em>.\n\n* Hode šintinoo: $8\n* Hode benantaa: $6\n* Boraa kaŋ š'a na hoderoo miile: $7\n\nWar ga hin ka hantum $1 wala [[{{MediaWiki:Grouppage-sysop}}|juwalkaa]] se ka hoderoo šennoo tee.\nWar ši hin ka bataga sanba nda \"email this user\" fondaa nda manti war bataga aderesu henna ka tabatandi war [[Special:Ibaayey|kontu ibaayey]] ra nd'i mana war gagay a ga. \nWar sohõda IP aderesoo to $3 nda hode šilbaa ti #$5.\nWa beene šilbawey kul dam hãayan bataga kaŋ war g'a tee ra.",
+ "autoblockedtext": "War IP aderesoo hode nga boŋše zama goykaw waani foo k'a ka goy, boro kaŋ $1 n'a hode.\nDaliloo kaŋ noondi ti:\n\n:<em>$2</em>\n\n* Hode šintinoo: $8\n* Hode benantaa: $6\n* Boraa kaŋ i n'a miile hodeyan se: $7\n\nLaasaabu kaŋ war ši hima ka goy nda \"email this user\" alhaaloo nda manti war mma bara nda bataga aderesu jisante war [[Special:Preferences|goykaw ibaayey]] ra nd'i mana war gagay ka goy nd'a.\n\nWar sohõda IP aderesoo ti $3 nda hodeyan šilbaa ti #$5.\nTaare wa šilbawey wey kul dam hãayan kul kaŋ war g'a sanba ra.",
+ "blockednoreason": "dalil kul šii",
+ "whitelistedittext": "Taare $1 ka moɲey fasal.",
+ "confirmedittext": "War ga hima ka war bataga aderesoo tabatandi jina ka moɲey fasal.\nWar bataga aderesoo tabatandi [[Special:Preferences|goykaw ibaayey]] ra.",
+ "nosuchsectiontitle": "Ši hin ka dii dunboo",
+ "nosuchsectiontext": "War ceeci ka dunbu foo kan ši bara fasal.\nA hin ka tee a ganandi wal'a tuusandi waatoo kaŋ war goo ma moɲoo guna.",
+ "loginreqtitle": "Huruyan ga waažibi",
+ "loginreqlink": "huru",
+ "loginreqpagetext": "Taare $1 ka moɲey jerey.",
+ "accmailtitle": "Šennikufaloo sanbandi",
+ "accmailtext": "Ɲaami-ra šennikufal kaŋ tee [[User talk:$1|$1]] sanbandi $2 do. A ga hin ka barmay <em>[[Special:ChangePassword|šennikufal barmay]] moɲoo ga </em> nda war ga huru.",
+ "newarticle": "(Itaaga)",
+ "newarticletext": "War hanga dobu kaŋ ka fatta moo foo kaŋ ši bara jina ga.\nKa moɲoo tee, soobay ka hantum ganda bataa ra ([$1 faaba moɲoo] guna ka bay ka tonton.\nNda war n' ka dere ka kaa ne, war ceecikaa <strong>banda</strong>butoŋoo naagu.",
+ "anontalkpagetext": "----\n<em>Kakaw moɲoo woo goo goykaw kaŋ maaɲoo ši bangay se, boro kaɲ mana kontu tee jina, wal'a ši a ka goy.</em>\nAdiši kal'ir ma goy nda hinna IP aderesu ka boraa alhaaloo tabatandi.\nIP aderesu dumoo woo ga hin ka žemnandi goykaw booboyaŋ game.\nNda war ti goykaw kaŋ maaɲoo ši bangay nda war ga tammahã kaŋ war ši kula nda šenney wey, [[Special:UserLogin/signup|kontu tee]] wala [[Special:UserLogin|huru]] ka ganji hiino war nda goykaw taney kaŋ šii nda maa ma birji cere ra. \\",
+ "noarticletext": "Hantum kul šii moɲoo woo ga sohõda.\nWar ga hin ka [Special:Search/{{PAGENAME}}|moɲoo woo maaɲoo ceeci]] moɲe jerey ra,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|moo={{FULLPAGENAMEE}}}} hantum himantey guna],\nwala [{{fullurl:{{FULLPAGENAME}}|teera=fasal}} moɲoo woo fasal]</span>.",
+ "noarticletext-nopermission": "Hantum kul šii moɲoo woo ra sohõda.\nWar ga hin ka [[Special:Search/{{PAGENAME}}|moɲoo woo maaɲoo ceeci]] moɲey jerey ra wala <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|moo={{FULLPAGENAMEE}}}} cceci hantum himantey ra]</span>, amma war ši nda fondo ka moɲoo woo tee.",
+ "missing-revision": "Filla #$1 moɲoo kaŋ maaɲoo ti \"{{FULLPAGENAME}}\" se ši bara.\n\nWoo ga doona ka tee nda boro hanga taariki dobu žeena banda kaŋ ga fatta moo tuusante ga.\nŠilbaywey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusuyan taariki] ra.",
+ "userpage-userdoesnotexist": "Goykaw kontu \"$1\" mana jisandi.\nTaare guna wala war ga boona ka moɲoo woo tee/fasal.",
+ "userpage-userdoesnotexist-view": "Goykaw kontu \"$1\" mana jisandi.",
+ "blocked-notice-logextract": "Goykaw n' ka hode sohõda.\nHodeyan kokorantaa šilbay ceebandoo ga duwandi ganda feeriyanoo ra:",
+ "clearyourcache": "<strong>Laasaabu:</strong> Nd war gaabundi ka ben, war ga hin ka war ceecika tugudogoo koli ka dii barmawey.\n* <strong>Firefox / Safari:</strong> Gaabu <em>Shift</em> nda war ga <em>Zumandi taaga</em> naagu, wala naagu <em>Ctrl-F5</em> wala <em>Ctrl-R</em> (<em>⌘-R</em> Mac ga)\n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> naagu Mac ga)\n* <strong>Internet Explorer:</strong> Gaabu <em>Ctrl</em> nda war ga <em>Taagandi</em> naagu, wala <em>Ctrl-F5</em> naagu\n * <strong>Opera:</strong> Tugudogoo tuusu <em>Goyjinawey → Ibaayey</em> ra",
+ "usercssyoucanpreview": "<strong>Alhiila:</strong> Goy nda \"{{int:showpreview}}\" butoŋoo ka war CSS taagaa šii jina k'a gaabu. before saving.",
+ "userjsyoucanpreview": "<strong>Alhiila:</strong>Goy nda \"{{int:showpreview}}\" butoŋoo ka war JavaScript taagaa šii jina k'a gaabu.",
+ "usercsspreview": "<strong>Honga kaŋ war na mma moofur de war CSS goykaa ga.\nA mana gaabundi jina!</strong>",
+ "userjspreview": "<strong>Honga kaŋ war goo ma šii/moofur de war JavaScript goykaa ga.\nA mana gaabundi jina!</strong>",
+ "sitecsspreview": "<strong>Honga kaŋ war mma moofur de CSS woo ga.\n A mana gaabundi jina!</strong>",
+ "sitejspreview": "<strong>Honga kaŋ war mma moofur de JavaScript ašariyaa woo ga.\nA mana gaabundi jina!</strong>",
+ "userinvalidcssjstitle": "<strong>Yaamar:</strong> \"$1\" kuuru kul šii.\nLaada .css nda .js moɲey ga goy nda karfu kayna maa, sanda {{ns:user}}:Foo/vector.css manti {{ns:user}}:Foo/Vector.css.",
+ "updated": "(Taagante)",
+ "note": "<strong>Laasaabu:</strong>",
+ "previewnote": "<strong>Honga kaŋ war moofuryan de ti wo.</strong>\nWar barmawey mana gaabundi jina!",
+ "continue-editing": "Koy fasal nungu here",
+ "previewconflict": "Moofuryanoo woo ga tenji nda beene hantum fasalyan doo, z'a ga bangay nda war soobay k'a gaabu.",
+ "session_fail_preview": "<strong>Alhaa naŋ! Ir mana hin ka war barmaa ka koy nda jine za goywaatoo bayhayey dere.</strong>\nTaare ceeci k'a tee koyne.\nNd'a ši koy hala sohõ, ceeci ka [[Special:UserLogout|fatta]] nda huru taaga.",
+ "session_fail_preview_html": "<strong>Alhaa naŋ! Ir mana hin ka war barmaa ka koy nda jine za goywaatoo bayhayey dere.</strong>\n\n<em>Zama {{SITENAME}} goo nda HTML gani ka dira, moofuryan mma tugu ka ganji i ma kaŋ JavaScript ga.</em>\n\n\\",
+ "token_suffix_mismatch": "<strong>I wanji war barmaa ga zama war daykaa na tonbi harfey birji fasalyan tammaasaa ra.</strong>\nI wanji barmaa ga ka ganji moo hantumoo ma hasara.\nWoo ka tee waati kaŋ war ga goy nda maršin interneti-bande tokore goymee kaŋ ši nda maa.",
+ "edit_form_incomplete": "<strong>Barmay takari jerey mana too feršikaa do; naagu ceeci hinka ka dii kaŋ war barmawey ga timme de war ma ceeci koyne.</strong>",
+ "editing": "Goo ma $1 fasal",
+ "creating": "Goo ma $1 tee",
+ "editingsection": "Goo ma $1 fasal (dunbu)",
+ "editingcomment": "Goo ma $1 fasal (dunbu taaga)",
+ "editconflict": "Fasal cerehooyan: $1",
+ "explainconflict": "Boro foo na moɲoo woo barmay za war šintin k'a fasal.\nBeene hantum nungoo goo nda moo hantumoo takaa kaŋ nd'a bara sohõda.\nWar barmawey ga cebandi gandehere hantum nungoo ra.\nWar ga hima ka barmawey marga hantum barantaa ra.\nMoɲoo kan goo beene hantum nungoo ra <strong>hinne</strong> ma gaabundi nda war na \"{{int:savearticle}}\" naagu.",
+ "yourtext": "War hantumoo",
+ "storedversion": "Barmayyan jisante",
+ "nonunicodebrowser": "<strong>Yaamar: War ceecikaw ši Unicode kanbe.</strong>\nA workaround is in place to allow you to safely edit pages: Non-ASCII characters will appear in the edit box as hexadecimal codes.War ga hin ka šendaa woo koli nungu foo ra kaŋ naŋ war moɲey ma fasal nda saajaw. Harfey kaŋ manti ASCII ga bangay fasal bataa ra sanda ferši-iddu ašariyayaŋ.",
+ "editingold": "<strong>Yaamar: War goo ma goy nda filla dumi žeena moɲoo woo se.</strong>\nNda war war n'a gaabu, barmawey kul kaŋ tee fillaa woo bandaa ga dere.",
+ "yourdiff": "Zilayyaney",
+ "copyrightwarning": "Taare laasaabu kaŋ kanbuzaamey kul kaŋ tee {{SITENAME}} se ga tee sanda i n' ka fattandi $2 cire (dii $1 ka bay ka tonton).\nNda war ši baa war hantumoo ma barmay laala nd'a ma žemnandi forba, kul ma ši a sanba ne.<br />\nWar ga allaahidu noo kaŋ war n'a hantum war boŋše, kaŋ war man'a bere ka kaa baytal doo for ga wala forba aššil tana.\n<strong>War ši goy-waani kul sanba bila nda alhaku koyey duɲeyanoo!</strong> \\",
+ "copyrightwarning2": "Laasaabu kaŋ kanbuzaamawey kul kaŋ tee {{SITENAME}} se, hantumkaw fooyaŋ ga hin ki fasal, barmay wal'i k'i tuusu.\nNda war ši boona war hantumoo ma barmay laala, kul war ma ši a sanba ne. <br />\nWar ga allaahidu no kaŋ war n'a hantum war boŋše, wala k'a bere ka hun baytal nungu ga wala forba aššil tana (dii $1 ka bay ka tonton).\n<strong>War ma ši goy kul sanba bila nda hantumkey alhaku duɲeyanoo!</strong>",
+ "longpageerror": "<strong>Firka: Hantumoo kaŋ sanbandi kuuroo ka sawa nda {{PLURAL:$1|cebsi-ize $1}} long, kaŋ ga bisa {{PLURAL:$2|cebsi-ize $2}}.</strong>\nA ši hin ka gaabundi.",
+ "readonlywarning": "<strong>Yaamar: Bayhayahugoo \\",
+ "protectedpagewarning": "<strong>Yaamar: Moɲoo woo n' ka jejebandi hala goykey kaŋ goo nda juwalkaw fondo hinne ma hin k'a fasal.</strong>\nWar ceebandu taariki hantum kokorantaa ga fatta ne ganda šeede se:",
+ "semiprotectedpagewarning": "<strong>Laasaabu:</strong> Moɲoo woo n' ka jejebandi hala goykaw hantumantey hinne ma hin k'a fasal.\nCWar ceebandu taariki hantum kokorantaa ga fatta ne ganda šeede se:",
+ "cascadeprotectedwarning": "<strong>Yaamar:</strong> Moɲoo woo ga jejebandi hala goykey kaŋ goo nda juwalkaw fondo hinne ma hin k'a fasal zam'a ga jejebu kaŋandi-leetoo woo dumoo {{PLURAL:$1|moo|moɲey}} se:",
+ "titleprotectedwarning": "<strong>Yaamar: Moɲoo woo ga jejebandi hala [[Special:ListGroupRights|alhaku tabatanteyaŋ]] ga hima ka duwandi k'a tee.</strong>\nCeebandu taariki hantum kokorantaa ga fatta ne ganda šeede se:",
+ "templatesused": "{{PLURAL:$1|Leetoo|Leetey}} kaŋ zaandi moɲoo woo se:",
+ "templatesusedpreview": "{{PLURAL:$1|Leetoo|Leetey}} kaŋ cebandi moofuroo woo ra:",
+ "templatesusedsection": "{{PLURAL:$1|Leetoo|Leetey}} kaŋ bangay dunboo woo ra:",
+ "template-protected": "(jejebante)",
+ "template-semiprotected": "(jere-jejebante)",
+ "hiddencategories": "Moɲoo woo {{PLURAL:$1|dumi tugante$ 1}} no m'a may:",
+ "edittools": "<!-- Ne hantumoo ga cebandi fasal nda zijandi takarey cire. -->",
+ "edittools-upload": "-",
+ "nocreatetext": "{{SITENAME}} na fondaa kaŋ nda moo taagayaaŋ ga tee kankamandi.\nWar ga hin yee banda ka moo barante fasal, wala ka [[Special:UserLogin|huru wala kontu tee]].",
+ "nocreate-loggedin": "War ši nda fondo ka moo taagayaŋ tee.",
+ "sectioneditnotsupported-title": "Dunbu fasalyan ši koy ne",
+ "sectioneditnotsupported-text": "Dunbu fasalyan ši koy moɲoo woo ga.",
+ "permissionserrors": "Duɲeyan firka",
+ "permissionserrorstext": "War ši nda fondo ka woo tee, {{PLURAL:$1|daliloo woo|daliley wey}} se:",
+ "permissionserrorstext-withaction": "War ši nda fondo ka $2, {{PLURAL:$1|daliloo woo|daliley wey}} se:",
+ "recreate-moveddeleted-warn": "<strong>Yaamar: War goo ma moo foo kaŋ bay ka tuusandi tee taaga.</strong>\n\nWar ga hima ka laasaabu wal'a kubay nda war gaabandi ka moɲoo woo fasal.\nMoɲoo woo tuusuyan nda ganandiyan taarikoo ga fatta ne šeede se:",
+ "moveddeleted-notice": "Moɲoo n' ka tuusandi.\nMoɲoo tuusuyan nda ganandiyan taarikoo ga fatta ne ganda šeede ne.",
+ "log-fulllog": "Ceebandu hantum kul guna",
+ "edit-hook-aborted": "Delbu na fasalyanoo say.\nA mana fahamandiyan kul noo.",
+ "edit-gone-missing": "Mana hin ka moɲoo taagandi.\nA ga hima an' ka tuusandi.",
+ "edit-conflict": "Fasal cerehooyan",
+ "edit-no-change": "War fasalyan mana zaandi zama hantumoo mana barmay kul.",
+ "postedit-confirmation-created": "Moɲoo n' ka tee.",
+ "postedit-confirmation-restored": "Moɲoo n' ka willi.",
+ "postedit-confirmation-saved": "War fasalyanoo n' ka gaabundi",
+ "edit-already-exists": "Mana hin ka moo taaga tee.\nA ga bara ka ben. \\",
+ "defaultmessagetext": "Tilasu alhabar hantum",
+ "content-failed-to-parse": "Mana hin ka $2 gundekuna fesu-fesu $1 takari se: $3",
+ "invalid-content-data": "Gundekuna bayhaya laala",
+ "content-not-allowed-here": "\"$1\" gundekuna ši koy moɲoo woo ga [[$2]]",
+ "editwarning-warning": "Nda war na moɲoo naŋ, a ga hin ka tee barmawey kaŋ war n'i tee kul ga dere.\nNda war huru ka ben, war ga hin ka yaamaroo wii war ibaayey \"{{int:prefs-editing}}\" dunboo ra.",
+ "editpage-notsupportedcontentformat-title": "Gundekuna takari ši koy ne \\",
+ "editpage-notsupportedcontentformat-text": "Gundekuna takari $1 ši koy ne gundekuna takari $2 bande.",
+ "content-model-wikitext": "wikihantum",
+ "content-model-text": "hantum kaaray",
+ "content-model-javascript": "JavaScript",
+ "content-model-css": "CSS",
+ "duplicate-args-category": "Moɲey kaŋyaŋ ga goy nda yeddiyaŋ leeti ciyarey ra",
+ "duplicate-args-category-desc": "Moɲoo goo nda leeti ciyariyaŋ kaŋ ga goy nda yeddi fillayaŋ, sanda <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> wala code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+ "expensive-parserfunction-warning": "<strong>Yaamar:</strong> Moɲoo woo goo nda fesu-fesu goyjinay alhaali booboyaŋ.\n\nA ši hima ka bara nda {{PLURAL:$2|ciyari}} $2, {{PLURAL:$1| ciyari $1 sohõ}}.",
+ "expensive-parserfunction-category": "Moɲey kaŋ goo nda fesu-fesu goyjinay alhaali booboyaŋ",
+ "post-expand-template-inclusion-warning": "<strong>Yaamar:</strong> Leeti azzaatoo ga hansa ka beeri.\nLeeti fooyaŋ mana tonton ne.",
+ "post-expand-template-inclusion-category": "Moɲey kaŋyaŋ ra leeti ga ng'azzaatoo hoo.",
+ "post-expand-template-argument-warning": "<strong>Yaamar:</strong> Moɲoo woo goo nda, nd'a kacca, leeti hujja foo kaŋ azzaatoo hayandiroo ga bebbeeri.\nHujjaa woo n' ka naŋandi.",
+ "post-expand-template-argument-category": "Moɲey kaŋyaŋ goo nda leeti hujja naŋanteyaŋ",
+ "parser-template-loop-warning": "Leeti zollo maatante: [[$1]]",
+ "parser-template-recursion-depth-warning": "Leeti fillari guusuyan dimaa n' ka hoo ($1)",
+ "language-converter-depth-warning": "Šenni berekaw guusuyan dimmaa n' ka hoo ($1)",
+ "node-count-exceeded-category": "Moɲey kaŋyaŋ ra guli hinnaa n' ka hoo",
+ "node-count-exceeded-category-desc": "Moɲoo ga guli hinna alkadaroo hoo.",
+ "node-count-exceeded-warning": "Moɲoo na guli hinnaa hoo",
+ "expansion-depth-exceeded-category": "Moɲey kaŋyaŋ ra hayandiri guusuyanoo hoo",
+ "expansion-depth-exceeded-category-desc": "Moɲoo ga hayandiri guusuyan kul ibeeroo hoo.",
+ "expansion-depth-exceeded-warning": "Moɲoo ga hayandiri guusuyanoo hoo",
+ "parser-unstrip-loop-warning": "Feferiyan-naŋ zollo maatandi",
+ "parser-unstrip-recursion-limit": "Feferiyan-filla dimmaa hoo ($1)",
+ "converter-manual-rule-error": "Firka bangay kanbe šenni bereyan ašariyaa ra",
+ "undo-success": "Fasalyan ga hin ka borrandi.\nGuna ganda deedandiyanoo ka tabatandi kaŋ woo no war ga boona k'a tee, nda waati din wa ganda barmawey gaabu ka fasalyan borroyanoo benandi.",
+ "undo-failure": "Barmaa ši hin ka taafeeri zama game barmay fooyaŋ ga cere hoo.",
+ "undo-norev": "Barmaa mana hin ka taafeeri zam'a ši bara wal'a n' ka tuusandi.",
+ "undo-nochange": "A ga hima kaŋ barmaa n' ka taafeeri ka ben.",
+ "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|deede]]) na $1 fillaa taafeeri",
+ "undo-summary-username-hidden": "Goykaw tugante na $1 fillaa taafeeri",
+ "cantcreateaccounttitle": "Ši hin ha kontu tee",
+ "cantcreateaccount-text": "[User:$3|$3]] ganji kontu ma tee IP aderesu (<strong>$1</strong>) ga.\n\nDaliloo kaŋ $3 n'a noo ti <em>$2</em>",
+ "cantcreateaccount-range-text": "[[User:$3|$3]] ganji kaŋ kontu ma tee IP aderesey kaŋyaŋ goo '''$1''' laamaa ra ga, sanda war IP aderesoo ('''$4''').\n\nDaliloo kaŋ $3 n'a noo ti ''$2''",
+ "viewpagelogs": "Hantum taarikey guna moɲoo woo se",
+ "nohistory": "Barmay taariki kul šii moɲoo woo se.",
+ "currentrev": "Filla kokorantaa",
+ "currentrev-asof": "Filla kokorante za $1",
+ "revisionasof": "Filla za $1",
+ "revision-info": "{{GENDER:$6|$2}}$7 fillaa za $1",
+ "previousrevision": "← Filla žeena",
+ "nextrevision": "Filla kul itaagaa →",
+ "currentrevisionlink": "Filla kokorante",
+ "cur": "cur",
+ "next": "jine",
+ "last": "bisante",
+ "page_first": "jina",
+ "page_last": "kora",
+ "histlegend": "Zilayyan suubari: Arajo batawey šilbay fillawey se k'i deedandi, de ma dam butoŋ wala ganda butoŋ naagu.<br />\nŠilbayɲaa: <strong>({{int:cur}})</strong> = zilayyan nda filla kokorantaa, <strong>({{int:last}})</strong> = zilayyan nda filla bisantaa, <strong>{{int:minoreditletter}}</strong> = barmay kayna.",
+ "history-fieldset-title": "Ceeci taariki",
+ "history-show-deleted": "Tuusu hinne",
+ "histfirst": "ikul ižeenaa \\",
+ "histlast": "ikul itaagaa",
+ "historysize": "({{PLURAL:$1|cebsi $1}})",
+ "historyempty": "(koonu)",
+ "history-feed-title": "Filla taariki",
+ "history-feed-description": "Filla taariki moɲoo woo se wikiyoo ga",
+ "history-feed-item-nocomment": "$1 $2 hane/waate",
+ "history-feed-empty": "Moɲoo kaŋ war n'a wiri ši bara.\nA ga hin ka tee a tuusandi ka hun wikiyoo ga, wal'a duu maa taaga.Šii nda [[Special:Search|ceeciyan wiki ga]] moo taaga himantey se.",
+ "rev-deleted-comment": "(fasal duurandi n' ka hun)",
+ "rev-deleted-user": "(goykaw hun)",
+ "rev-deleted-event": "(hantum ceebandu teera hun)",
+ "rev-deleted-user-contribs": "[goykaw wala IP aderesu hun - barmaa tugandi sanbarey se]",
+ "rev-deleted-text-permission": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+ "rev-suppressed-text-permission": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusuyan taariki].",
+ "rev-deleted-text-unhide": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.\nWar ga hin ka [dii $1 fillaa woo] nda war ga boona ka koy jine.",
+ "rev-suppressed-text-unhide": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.\nWar ga hin ka [dii $1 fillaa woo] nda war ga boona ka koy jine.",
+ "rev-deleted-text-view": "Moo fillaa woo n' ka <strong>tuusandi</strong>.\nWar ga hin ka dii y'a; šilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+ "rev-suppressed-text-view": "Moo flllaa woo n' ka <strong>tuusandi</strong>.\nWar ga hin ka dii y'a; šilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki].",
+ "rev-deleted-no-diff": "War ši hin ka dii zilayyanoo woo zama fillawey affoo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+ "rev-suppressed-no-diff": "War ši hin ka dii zilayyanoo woo zama fillawey affaa n' ka <strong>tuusandi</strong>.",
+ "rev-deleted-unhide-diff": "Fillawey affaa zilayyanoo woo se n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki log] ra.\nWar ga hin ka [dii $1 zilayyanoo] nda war ga boona ka koy jine.",
+ "rev-suppressed-unhide-diff": "Fillawey affaa zilayyanoo woo n' ka <strong>tuusandi</strong>.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki log] ra.\nWar ga hin ka [dii $1 zilayyanoo woo] nda war ga boona ka koy jine.",
+ "rev-deleted-diff-view": "Fillawey affaa zilayyanoo woo se n' ka <strong>tuusandi</strong>.\nWar ga hin ka dii zilayyanoo woo; šilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+ "rev-suppressed-diff-view": "Fillawey affaa zilayyanoo n' ka <strong>tuusandi</strong>.\nWar ga hin ka dii zilayyanoo woo; šilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taariki] ra.",
+ "rev-delundel": "diiyan alkadar barmay",
+ "rev-showdeleted": "cebe",
+ "revisiondelete": "Fillawey tuusu/yeeti",
+ "revdelete-nooldid-title": "Toodoo filla laala",
+ "revdelete-nooldid-text": "War mana toodoo fillawey tabatandi ka goyoo woo tee\n filla tabatante ši bara, wala war mma ceeci ka sohõda fillaa tugu.",
+ "revdelete-no-file": "Tukoo tabatantaa ši bara.",
+ "revdelete-show-file-confirm": "Alhakiika kaŋ war ga boona ka dii tukoo filla tuusante foo guna \"<nowiki>$1</nowiki>\" kaŋ tee $2 hane $3 waate?",
+ "revdelete-show-file-submit": "Ayyo",
+ "revdelete-selected-text": "{{PLURAL:$1|Filla suubante|Filla suubantey}} [[:$2]] se:",
+ "revdelete-selected-file": "{{PLURAL:$1|Tuku dumi suubante| Tuku dumi suubantey}} [[:$2]] se:",
+ "logdelete-selected": "{{PLURAL:$1|Hantum ceebandu teera suubante| Hantum ceebandu teera suubantey}}:",
+ "revdelete-text-text": "Filla tuusantey ga bangay moo taarikoo ra, amma gundekunaa jereyaŋ šii duwandi jamaa kul se.",
+ "revdelete-text-file": "Tuku dumi tuusantey ga bangay moo taarikoo ra, amma gundekunaa jereyaŋ šii duwandi jamaa kul se.",
+ "logdelete-text": "Hantum ceebandu teera tuusantey ga bangay hantum taarikoo ra, amma gundekunaa jereyaŋ šii duwandi jamaa kul se.",
+ "revdelete-text-others": "Juwalkaw tanayaŋ ga hin ka duu gundekuna tugantaa wal'i m'a tuusu, nda jejebu tontoniyaŋ mana huru a se.",
+ "revdelete-confirm": "Tabatandi kaŋ war g'anniya ka woo tee, kaŋ war faham nd'allamaana kaŋ g'a ra, nda kaŋ war goo ma woo tee [[{{MediaWiki:Policy-url}}|laada]] bande.",
+ "revdelete-suppress-text": "Tuusuyan ga hima ka tee misey wey cine <strong>hinne</strong> ra:\n* alhabar kaŋ ga hima nda miimanda nda maa hasaraw\n* alhabar kaŋ ga sutura laada hoo\n*: <em>hugu aderesu nda talfon lanba, ganda kartidanti lanba, nda šilbay taney</em>",
+ "revdelete-legend": "Kayandi hayey kaŋ borey ga dii y'ey",
+ "revdelete-hide-text": "Filla hantum",
+ "revdelete-hide-image": "Tuku gundekuna tugu",
+ "revdelete-hide-name": "Teera nda toodoo tugu",
+ "revdelete-hide-comment": "Duurandi fasal",
+ "revdelete-hide-user": "Fasalkaa goykaw maaɲoo/IP aderesu",
+ "revdelete-hide-restricted": "Bayhayey tuusu k'i kaa juwalkey nda goykaw taney jine",
+ "revdelete-radio-same": "(ma ši barmay)",
+ "revdelete-radio-set": "Tugante",
+ "revdelete-radio-unset": "Boro ga dii y'a",
+ "revdelete-suppress": "Bayhayey tuusu k'i kaa juwalkey nda goykaw taney jine",
+ "revdelete-unsuppress": "Kankamandey kaa filla willantey ga",
+ "revdelete-log": "Dalil:",
+ "revdelete-submit": "Kanandi {PLURAL:$1|filla}} kanante ga",
+ "revdelete-success": "<strong>Filla diiyan alkadar taagandi ka boori.</strong>",
+ "revdelete-failure": "<strong> Filla diiyan alkdar mana hin ka taagandi:</strong>\n$1",
+ "logdelete-success": "<strong>Hantum ceebandu diiyan alkadar kayandi ka boori.</strong>",
+ "logdelete-failure": "<strong>Hantum ceebandu diiyan alkdar mana kayandi:</strong>\n$1",
+ "revdel-restore": "diiyan alkadar barmay",
+ "pagehist": "Moo taariki",
+ "deletedhist": "Taariku tuusante",
+ "revdelete-hide-current": "Firka bangay kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga tugandi: Sohõda fillaa ti woo.\nA ši hin ka tugandi.",
+ "revdelete-show-no-access": "Firka bangay kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga cebandi: Haya-izoo n' ka šilbay nda \"restricted\".\nWar ši nda fondo ka duu w'a.",
+ "revdelete-modify-no-access": "Firka bangay kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga barmay: Haya-izoo ga šilbay nda \"restricted\".\nWar ši nda fondo ka duu w'a.",
+ "revdelete-modify-missing": "Firka bangay kaŋ haya-ize nda tammaasa $1: A šii bayhayhugoo ra!",
+ "revdelete-no-change": "<strong>Yaamar:</strong> Haya-izoo kaŋ tee $2 waate, $1 hane duu diiyan alkadar kayandiyan waažibantey ka ben.",
+ "revdelete-concurrent-change": "Firka kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga barmay: Nga assariyaa ga bangay sanda boro tana foo k'a barmay waatoo kaŋ war ceeci k'a barmay.\nHantum ceebandu taarikey koroši.",
+ "revdelete-only-restricted": "Firka bangay kaŋ haya-izoo kaŋ tee $2 waate, $1 hane ga tugandi: War ga hin k'a tuusu k'a kaa juwalkey jine bila nda war ma diiyan alkadar suubarey affoo kayandi.",
+ "revdelete-reason-dropdown": "*Yamma tuusu dalile\n** Hantumkaw alhaku hooyan\n** Gundekuna laala wala sutura-hooyan alhabar\n** Goykaw maa laala\n** Miimanda wala maahasaraw allamaana",
+ "revdelete-otherreason": "Dalil tana/tontoni:",
+ "revdelete-reasonotherlist": "Dalil tana",
+ "revdelete-edit-reasonlist": "Tuusu daliley fasal",
+ "revdelete-offender": "Filla hantumkaw:",
+ "suppressionlog": "Tuusu ceebandu taariki",
+ "suppressionlogtext": "Ganda maašeeda goo nda tuusarey nda hodeyaney kaŋ sabboo ti gundekuna kaŋ tugandi juwalkey se.\n Dii [[Special:BlockList|hode maašeeda]] maašeedaa se kaŋ tee sohõda goy barrantey nda hodantey se.\n\\",
+ "mergehistory": "Moo taarikey marga",
+ "mergehistory-header": "Moɲoo woo ga naŋ war ma taarikoo fillawey marga aššil moo faa se k'a tee moo taaga.\nWar m'alhakiika kaŋ barmaa woo ga moo taarikoo faaba a ma cindi cere bande.",
+ "mergehistory-box": "Moo hinka fillawey marga:",
+ "mergehistory-from": "Aššil moo",
+ "mergehistory-into": "Toodoo moo:",
+ "mergehistory-list": "Fasal taariki kaŋ ga hin ka marga",
+ "mergehistory-merge": "Fillawey wey kaŋ tee [[:$1]] se ga hin ka marga ka tee [[:$2]].\nArajo butoŋ soofu naagu k'a marga nda fillawey hinne kaŋyaŋ tee waati tabatantaa ga wal'a se jine.\nLaasaabu kaŋ nda boro too naaruyan dobey ga, i ga soofoo woo yeeti alhaali žeenaa ga.",
+ "mergehistory-go": "Fasalyaney kaŋ ga hin ka marga cebe",
+ "mergehistory-submit": "Fillawey marga",
+ "mergehistory-empty": "Filla kulyaŋ mana margandi.",
+ "mergehistory-success": "[[:$1]] {{PLURAL:$3|filla}} $3 margandi ka boori ka tee [[:$2]].",
+ "mergehistory-fail": "Ši hin taariki margaroo tee, taare moo nda waati kayandiyaney guna ka boori. \\",
+ "mergehistory-fail-toobig": "Ši hin ka taariki margaroo tee zam'a ga bisa {{PLURAL:$1|filla}} $1 kaŋ ga ganandi waati din.",
+ "mergehistory-no-source": "$1 aššil moo ši bara.",
+ "mergehistory-no-destination": "$1 toodoo moo ši bara.",
+ "mergehistory-invalid-source": "Ašsil moɲoo ga hima ka bara nda maa henna.",
+ "mergehistory-invalid-destination": "Toodoo moɲoo ga hima ka bara nda maa henna.",
+ "mergehistory-autocomment": "Na [[:$1]] marga k'a tee [[:$2]]",
+ "mergehistory-comment": "Na [[:$1]] k'a tee [[:$2]]: $3",
+ "mergehistory-same-destination": "Aššil nda toodoo moɲey ši hin ka tee affollokaa da",
+ "mergehistory-reason": "Dalil:",
+ "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
+ "mergelog": "Margari hantum ceebandu",
+ "revertmerge": "Margari say",
+ "mergelogpagetext": "Ganda margari kokorantey maašeedaa, taka kaŋ nda moo taariki foo ga huru affaa ra.",
+ "history-title": "Filla taariki \"$1\" se",
+ "difference-title": "Zilayyan \"$1\" fillawey game",
+ "difference-title-multipage": "Zilayyan \"$1\" nda \"$2\" game",
+ "difference-multipage": "(Zilayyan moɲey game)",
+ "lineno": "Žeeri $1:",
+ "compareselectedversions": "Filla suubantey deedandi",
+ "showhideselectedversions": "Diiyan dimma barmay filla suubantey se",
+ "editundo": "borro",
+ "diff-empty": "(Ši zilay)",
+ "diff-multi-sameuser": "({{PLURAL:$1|Gam filla $1}} goykaw follokaa se ši cebandi)",
+ "diff-multi-otherusers": "({{PLURAL:$1|Gam filla $1}} {{PLURAL:$2|goykaw $1}} se ši cebandi)",
+ "diff-multi-manyusers": "({{PLURAL:$1|Gam filla $1}} a ga bisa {{PLURAL:$2|goykaw}} $2 se ši cebandi)",
+ "difference-missing-revision": "{{PLURAL:$2|Gam filla $1}} zilayyanoo woo se ($1) {{PLURAL:$2|mana}} duwandi.\n\nZilayyan dobu žeena moo tuusante ga no ma doona ka woo te.\nŠilbawey ga hin ka duwandi [{{fullurl:{{#Special:Log}}/tuusu|moo={{FULLPAGENAMEE}}}} tuusu taarikoo ra.]",
+ "searchresults": "Ceeci hunyaney",
+ "searchresults-title": "Ceeci hunyaney \"$1\" se",
+ "titlematches": "Moo maa tenjandey",
+ "textmatches": "Moo hantum tenjandey",
+ "notextmatches": "Moo hantum tenjandiyaŋ kul šii",
+ "prevn": "{{PLURAL:$1|$1}} bisante",
+ "nextn": "jine {{PLURAL:$1|$1}}",
+ "prevn-title": "{{PLURAL:$1|hunyan}} $1 bisante",
+ "nextn-title": "jine {{PLURAL:$1|hunyan}} $1",
+ "shown-title": "Cebe {{PLURAL:$1|hunyan}} $1 moo ra",
+ "viewprevnext": "Guna ($1 {{hoobu-fayakaw}} $2) ($3)",
+ "searchmenu-exists": "<strong>Moo goo kaŋ maaɲoo ti \"[[:$1]]\" wikiyoo woo ga.</strong> {{PLURAL:$2|0=|Guna da ceeci hunyan taney kaŋ fatta.}}",
+ "searchmenu-new": "<strong>Moɲoo tee \"[[:$1]]\" wikiyoo woo ga!</strong> {{PLURAL:$2|0=|Guna da moɲoo kaŋ duwandi nda war ceeciroo.|Guna da ceeci hunyan kaŋ fatta.}}",
+ "searchprofile-articles": "Gundekuna moɲey",
+ "searchprofile-images": "Hẽenandi jinawey",
+ "searchprofile-everything": "Hayakul",
+ "searchprofile-advanced": "Koyjinante",
+ "searchprofile-articles-tooltip": "Ceeci $1 ra",
+ "searchprofile-images-tooltip": "Tukey ceeci",
+ "searchprofile-everything-tooltip": "Gundekuna kul ceeci (nda deede moɲey da)",
+ "searchprofile-advanced-tooltip": "Guna laada maafarrey ra",
+ "search-result-size": "$1 ({{PLURAL:$1|kalima $1}})",
+ "search-result-category-size": "{{PLURAL:$1|koydayze $1}} ({{PLURAL:$2|1 dumi-ize $2}}, {{PLURAL:$3|tuku $3}})",
+ "search-redirect": "($1 bisandi)",
+ "search-section": "($1 dunbu)",
+ "search-category": "(dumi $1)",
+ "search-file-match": "(ga tenji nda tuku gundekuna)",
+ "search-suggest": "War n' ka tammahãa: $1",
+ "search-interwiki-caption": "Porože ɲayzey",
+ "search-interwiki-default": "Hunyaney $1 ga:",
+ "search-interwiki-more": "(tontoni)",
+ "search-relatedarticle": "Himante",
+ "searchrelated": "himante",
+ "searchall": "kul",
+ "showingresults": "Showing below up to {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} starting with #<strong>$2</strong>.",
+ "showingresultsinrange": "Goo ma cebe {{PLURAL:$1|<strong>1</strong> hunyan|<strong>$1}} gamoo ra #<strong>$2</strong> hala #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Hunyan <strong>$1</strong> - <strong>$3</strong>}}",
+ "search-nonefound": "Hunyan kul ši tenji nda hãayanoo.",
+ "powersearch-legend": "Ceeciyan koyjinante",
+ "powersearch-ns": "Ceeci maafarrey:",
+ "powersearch-togglelabel": "Koroši:",
+ "powersearch-toggleall": "Kul",
+ "powersearch-togglenone": "Baffoo",
+ "powersearch-remember": "Honga suubaroo hiino ceeciyaney se",
+ "search-external": "Tarayhere ceeciyan",
+ "searchdisabled": "{{SITENAME}} ceeciyan n' ka kayandi.\nWar ga hin ka ceeci nda Google waatoo woo ra.\nLaasaabu kaŋ ngi šilbawey {{SITENAME}} gundenaa se ga hima ižeenayaŋ.",
+ "search-error": "Firka bangay ceeciyan waate: $1 \\",
+ "preferences": "Ibaayey",
+ "mypreferences": "Ibaayey",
+ "prefs-edits": "Barmawey hinnaa:",
+ "prefsnologintext2": "Huru taare ka war ibaayey barmay.",
+ "prefs-skin": "Kuuru",
+ "skin-preview": "Moofur",
+ "datedefault": "Ibaayey kul šii",
+ "prefs-labs": "Šiidoo alhaaley",
+ "prefs-user-pages": "Goykaw moɲey",
+ "prefs-personal": "Goykaw alhaali",
+ "prefs-rc": "Barmay korawey",
+ "prefs-watchlist": "Hawgayhayey",
+ "prefs-watchlist-days": "Zaarey ka fatta hawgayhayey ra:",
+ "prefs-watchlist-days-max": "{{PLURAL:$1|Zaari}} $1 ibeeri",
+ "prefs-watchlist-edits": "Barmay hinna kul ibeeroo ka cebe hawgawhayey hayantey ra:",
+ "prefs-watchlist-edits-max": "Hinna kul ibeeroo: 1000",
+ "prefs-watchlist-token": "Hawgayhayey tammaasa:",
+ "prefs-misc": "Haya birjantey",
+ "prefs-resetpass": "Šennikufal barmay",
+ "prefs-changeemail": "Bataga aderesu barmay",
+ "prefs-setemail": "Bataga aderesu kayandi",
+ "prefs-email": "Bataga suubarey",
+ "prefs-rendering": "Bangayyan alhaali",
+ "saveprefs": "Gaabu",
+ "restoreprefs": "Tilasu kayandiyaney kul yeeti (dunbey kul ra)",
+ "prefs-editing": "Goo ma fasal",
+ "rows": "Sorrawey:",
+ "columns": "Soofey:",
+ "searchresultshead": "Ceeci",
+ "stub-threshold": "Šiifa <a href=\"#\" class=\"stub\">zaa dobu</a> takari kayandiyan (cebsi hinna) se:",
+ "stub-threshold-disabled": "Ga kay",
+ "recentchangesdays": "Zaarey kaŋ ga cebe barmay korawey ra:",
+ "recentchangesdays-max": "$1 ibeeri {{PLURAL:$1|zaari $1}}",
+ "recentchangescount": "Barmay hinnawey kaŋ ga cebe tilasu ra:",
+ "prefs-help-recentchangescount": "Sanda barmay korawey, moo taarikey nda hantum ceebandu tiirawey.",
+ "prefs-help-watchlist-token2": "Woo ti kufal tugante war hawgayhayey interneti toonandiyanoo se.\nBoro kul kaŋ g'a bay ga hin ka war hawgayhayey caw, adiši ma ši žemna.\nNd'a waažibi, [[Special:ResetTokens|war ga hin k'a yeeti]] da.",
+ "savedprefs": "War ibaayey n' ka gaabundi.",
+ "timezonelegend": "Waati ganda:",
+ "localtime": "Gorodoo waati:",
+ "timezoneuseserverdefault": "Goy nda wiki tilasu ($1)",
+ "timezoneuseoffset": "Itana (han/waati tabatandi)",
+ "servertime": "Feršikaw waati:",
+ "guesstimezone": "Toonandi ceecikaa ga",
+ "timezoneregion-africa": "Afiriki",
+ "timezoneregion-america": "Ameriki",
+ "timezoneregion-antarctica": "Antarkitika",
+ "timezoneregion-arctic": "Arkutiki",
+ "timezoneregion-asia": "Aazi",
+ "timezoneregion-atlantic": "Atalantiki teeko",
+ "timezoneregion-australia": "Osutarali",
+ "timezoneregion-europe": "Erop",
+ "timezoneregion-indian": "Endu teeko",
+ "timezoneregion-pacific": "Baani teeko",
+ "allowemail": "Goykaw taney bataga tunandi",
+ "prefs-searchoptions": "Ceeci",
+ "prefs-namespaces": "Maafarrey",
+ "default": "tilasu",
+ "prefs-files": "Tukey",
+ "prefs-custom-css": "Laada CSS",
+ "prefs-custom-js": "Laada JavaScript",
+ "prefs-common-css-js": "CSS/JavaScript kaŋ kuurey k'a may:",
+ "prefs-reset-intro": "War ga hin ka goy nda moɲoo woo ka war ibaayey yeeti nungoo tilasu alhaaley ga.\nWoo ši hin ka taafeeri.",
+ "prefs-emailconfirm-label": "Bataga tabatandiyan:",
+ "youremail": "Bataga:",
+ "username": "{{GENDER:$1|Goykaw maa}}:",
+ "prefs-memberingroups": "{{GENDER:$2|Kondayze}} {{PLURAL:$1|batu|batey}} ra:",
+ "prefs-memberingroups-type": "$1",
+ "prefs-registration": "Maahantumayan waati:",
+ "prefs-registration-date-time": "$1",
+ "yourrealname": "Maa cimi:",
+ "yourlanguage": "Šenni:",
+ "yourvariant": "Gundekuna šenni fayante:",
+ "prefs-help-variant": "War šenni fayane wala hantum tenjandiyan ga gundekuna moɲey cebe wikiyoo woo ga. \\",
+ "yournick": "Kanbežeeri taaga:",
+ "prefs-help-signature": "Deedawey kaŋ goo \\",
+ "badsig": "Kanbežeeri gani laala.\nHTML kanjarey koroši.",
+ "badsiglength": "War kanbežeeroo ga hansa ka kuu.\nA ši hima ka kuu ka bisa {{PLURAL:$1|harfu}} $1.",
+ "yourgender": "Taka foo nda war ga baa ir ma war cee?",
+ "gender-unknown": "Ay ši baa y'a har",
+ "gender-male": "Aru kaŋ ga wiki moɲey fasal",
+ "gender-female": "Woy kaŋ ga wiki moɲey fasal",
+ "prefs-help-gender": "Ibaayoo woo kanayandiyanoo ti suuba-haya.\nGoyjinay ga nda hinna ka goy ka šelaŋ war se nda ka war bayrandi boro tanayaŋ se nda woy-aru tammaasa henna.\nBoro kul ga hin ka dii alhabaroo woo.",
+ "email": "Bataga",
+ "prefs-help-realname": "Maa cimi ti suuba-haya.\nNda war soobay ka woo noo, i g'a ka goy ka war goymiɲoo kayandi. \\",
+ "prefs-help-email": "Bataga aderesu ti suuba-haya, amm'a ga waažibi šennikufal yeetiyan se, nda war dirŋa war šennikufaloo.",
+ "prefs-help-email-others": "War ga hin ka soobay da ka boro tanayaŋ naŋ i ma bataga sanba war se dobu foo ga war goyksaw wala deede moɲoo ga.\nWar bataga aderesoo ši fatta nda waati kaŋ goykaw tanayaŋ hantum war se.",
+ "prefs-help-email-required": "Bataga aderesu ga waažibi.",
+ "prefs-info": "Šintin alhabar",
+ "prefs-i18n": "Adduɲɲaa-me teera",
+ "prefs-signature": "Kanbežeeri",
+ "prefs-dateformat": "Han takari",
+ "prefs-timeoffset": "Waati zilayyan",
+ "prefs-advancedediting": "Yamma suubarey",
+ "prefs-editor": "Fasalkaw",
+ "prefs-preview": "Moofur",
+ "prefs-advancedrc": "Suubari jinekoyantey",
+ "prefs-advancedrendering": "Suubari jinekoyantey",
+ "prefs-advancedsearchoptions": "Suubari jinekoyantey",
+ "prefs-advancedwatchlist": "Suubari jinekoyantey",
+ "prefs-displayrc": "Suubarey cebe",
+ "prefs-displaywatchlist": "Suubarey cebe",
+ "prefs-tokenwatchlist": "Tammaasa",
+ "prefs-diffs": "Zilayyaney",
+ "prefs-help-prefershttps": "Ibaayoo woo ga kanandi war hiino huruyanoo ga.",
+ "prefswarning-warning": "War na hayayaŋ barmay war ibaayey ra, amm'i mana gaabundi jina.\nNda war na moɲoo woo naŋ bila nda war ma \"$1\" naagu war ibaayey ši taagandi.",
+ "prefs-tabs-navigation-hint": "Alhiila: War ga hin ka goy nda biraw wowa wal'iguma kufal ka dira nor lokey game nor loku maašeedaa ra.",
+ "email-address-validity-valid": "Bataga aderesoo ga hima ihenna",
+ "email-address-validity-invalid": "Bataga aderesu henna dam",
+ "userrights": "Goykaw alhakey juwalyan",
+ "userrights-lookup-user": "Goykaw kondawey juwal",
+ "userrights-user-editname": "Goykaw maa dam:",
+ "editusergroup": "Goykaw kondawey fasal:",
+ "editinguser": "Goo ma goykaw alhakey barmay goykaw <strong>[[User:$1|$1]]</strong> $2 se",
+ "userrights-editusergroup": "Goykaw kondawey fasal",
+ "saveusergroups": "Goykaw kondawey gaabu",
+ "userrights-groupsmember": "Kondayze:",
+ "userrights-groupsmember-auto": "Kondayze tugante:",
+ "userrights-groupsmember-type": "$1",
+ "userrights-groups-help": "War ga hin ka kondawey barmay goykey wey se ne:\n* Bata maasante maanaa ti goykaa goo kondaa din ra.\n* Bata bila nda maasa maanaa ti goykaa šii kondaa din ra.\n* Handaray * ga tammaasa kaŋ war ši hin ka kondaa kaa nda war ben k'a tonton, wal'a kaa. \\",
+ "userrights-reason": "Dalil:",
+ "userrights-no-interwiki": "War ši nda fonda ka goykaw alhakey fasal wiki tanayaŋ ga.",
+ "userrights-nodatabase": "Bayhayhugu $1 ši bara wal'a šii gandaa ra. \\",
+ "userrights-nologin": "War ga hima ka [[Special:UserLogin|huru]] nda juwalkaw kontu ka goykaw alhakey noo.",
+ "userrights-notallowed": "War ši nda fondo ka goykey alhakey dam wala k'i kaa.",
+ "userrights-changeable-col": "Kondawey kaŋ war ga hin k'i barmay",
+ "userrights-unchangeable-col": "Kondawey kaŋ war ga hin k'i barmay",
+ "userrights-irreversible-marker": "$1*",
+ "userrights-conflict": "Cerehooyan goykaw alhadey barmawey ra! Taare war barmawey guna boryo nd'a tabatandi.",
+ "userrights-removed-self": "War na war alhakey kaa ka timme. Adiši, war ši hin ka duu moɲoo woo koyne.",
+ "group": "Konday:",
+ "group-user": "Goykey",
+ "group-autoconfirmed": "Goykaw boŋtabatantey",
+ "group-bot": "Maršin berandikey",
+ "group-sysop": "Juwalkey",
+ "group-bureaucrat": "Birogoykey",
+ "group-suppress": "Lawreyaney",
+ "group-all": "(ku)",
+ "group-user-member": "{{GENDER:$1|goykaw}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|goykaw boŋtabatante}}",
+ "group-bot-member": "{{GENDER:$1|maršin berandiyan}}",
+ "group-sysop-member": "{{GENDER:$1|juwalkaw}}",
+ "group-bureaucrat-member": "{{GENDER:$1|birogoykaw}}",
+ "group-suppress-member": "{{GENDER:$1|lawreyan}}",
+ "grouppage-user": "{{ns:project}}:Goykey",
+ "grouppage-autoconfirmed": "{{ns:project}}:Goykaw boŋtabatantey",
+ "grouppage-bot": "{{ns:project}}:Maršin berandiyaney",
+ "grouppage-sysop": "{{ns:project}}:Juwalkey",
+ "grouppage-bureaucrat": "{{ns:project}}:Birgoykey",
+ "grouppage-suppress": "{{ns:project}}:Lawreyan",
+ "right-read": "Caw moɲey",
+ "right-edit": "Fasal moɲey",
+ "right-createpage": "Moɲey tee (kaŋ manti kakaw mooyaŋ)",
+ "right-createtalk": "Kakaw moɲey tee",
+ "right-createaccount": "Goykaw kontu taagayaŋ tee",
+ "right-minoredit": "Šilbay sanda barmay kaccuyaŋ",
+ "right-move": "Moɲey ganandi \\",
+ "right-move-subpages": "Moɲey ganandi nda ngi moɲiizey",
+ "right-move-rootuserpages": "Linji goykaw moɲey ganandi",
+ "right-move-categorypages": "Dumi moɲey ganandi",
+ "right-movefile": "Tukey ganandi",
+ "right-suppressredirect": "Ma ši bisandi ka hun aššil moɲey ga moo ganandiyan waate",
+ "right-upload": "Tukey zijandi",
+ "right-reupload": "Hantum tuku barantey boŋ",
+ "right-reupload-own": "Hantum tuku barantey boŋ kaŋ boro hunday n'i zijandi",
+ "right-reupload-shared": "Hantum tukey boŋ kaŋ ga jiši gorodoo ra hẽenandi jinay žemnante ga",
+ "right-upload_by_url": "Tukey zijandi ka hun URL ga",
+ "right-purge": "Internti nungoo tugu dogoo leele moo bila nda tabatandiyan se",
+ "right-autoconfirmed": "Ši kula nda IP-bande albaha dimma alkadarey",
+ "right-bot": "Kaŋ ga tee sand'a ga goy nga boŋše",
+ "right-nominornewtalk": "Kaŋ ši nda barmay kaccuyaŋ kakaw moɲey ga ka too yaamar taagayaŋ ma bangay \\",
+ "right-apihighlimits": "Alkadar beeriyan dam API hãayaney ra",
+ "right-writeapi": "Goy nda hantum API",
+ "right-delete": "Moɲey tuusu \\",
+ "right-bigdelete": "Moɲey kaŋ goo nda taariki kukuyaŋ tuusu",
+ "right-deletelogentry": "Ceebantu damhaya tabatanteyaŋ tuusu nd'i yeeri",
+ "right-deleterevision": "Moo filla tabatanteyaŋ tuusu nd'i yeeri",
+ "right-deletedhistory": "Taariki damhaya tuusantey guna bila nda hantum hangantey",
+ "right-deletedtext": "Hantum tuusantey guna nda barmawey filla tuusantey game",
+ "right-browsearchive": "Moo tuusantey ceeci",
+ "right-undelete": "Moo foo yeeri",
+ "right-suppressrevision": "Moo filla tabatanteyaŋ guna, tugu nda bangandi goykaw kul se",
+ "right-viewsuppressed": "Guna fillawey kaŋ tugandi goykaw kul se",
+ "right-suppressionlog": "Sutura hantum ceebandey guna",
+ "right-block": "Ma ganji goykaw tanayaŋ m'a fasal",
+ "right-blockemail": "Ganji goykaw kul ma bataga sanba",
+ "right-hideuser": "Goykaw maa foo hode, k'a tugu jamaa se",
+ "right-ipblock-exempt": "IP hodeyaney, boŋ-hodeyaney nda ganda hodeyaney koli",
+ "right-proxyunbannable": "Tokore boŋ-hodeyaney koli",
+ "right-unblockself": "Boŋ-hodeyan kaa",
+ "right-protect": "Jejebuyan alkadarey nda kaŋandi-fasal moo jejebantey barmay",
+ "right-editprotected": "Moɲey kaŋ jejebandi sanda \"{{int:protect-level-sysop}}\" fasal",
+ "right-editsemiprotected": "Moɲey kaŋ jejebandi sanda \"{{int:protect-level-autoconfirmed}}\" fasal",
+ "right-editinterface": "Goykaw diidogoo fasal",
+ "right-editusercssjs": "Goykaw taney CSS nda JavaScript tukey fasal",
+ "right-editusercss": "Goykaw taney CSS tukey fasal",
+ "right-edituserjs": "Goykaw taney JavaScript tuke fasal",
+ "right-editmyusercss": "War boŋ goykaw CSS tukey fasal",
+ "right-editmyuserjs": "War boŋ JavaScript tukey fasal",
+ "right-viewmywatchlist": "War boŋ hawgayhayey guna",
+ "right-editmywatchlist": "War boŋ hawgayhayey fasal. Laasaabu kaŋ teera fooyaŋ ga mooyaŋ tonton bila nda woo fondaa.",
+ "right-viewmyprivateinfo": "War boŋ sutura hayhayey guna (sanda bataga aderesu, maa cimi) \\",
+ "right-editmyprivateinfo": "War boŋ sutura bayhayey fasal (sanda bataga aderesu, maa cimi)",
+ "right-editmyoptions": "War boŋ ibaayey fasal",
+ "right-rollback": "Cahã ka barmawey yeeti goykaw koraa kaŋ na moo naadirante foo fasal se",
+ "right-markbotedits": "Barmawey kaŋ yeeti kul cebe sanda maršin berandiyaŋ",
+ "right-noratelimit": "Ši kula nda albaha dimma alkadarey \\",
+ "right-import": "Moɲey zaa wiki tanayaŋ ga",
+ "right-importupload": "Moɲey zaa tuku zijante foo ga",
+ "right-patrol": "Šilbay kaŋ boro taney barmawey ga kurandi",
+ "right-autopatrol": "Ka boro boŋ barmawey šilbay nd'i ma kurandi",
+ "right-patrolmarks": "Barmay kokorantey kuray šilbawey guna",
+ "right-unwatchedpages": "Moɲey kaŋ ši hawgandi guna ne",
+ "right-mergehistory": "Moɲey taarikoo marga",
+ "right-userrights": "Goykey alhakey kul fasal",
+ "right-userrights-interwiki": "Goykaw alhakey fasal wiki tanawey ga",
+ "right-siteadmin": "Bayrahugoo kufal nd'a feeri",
+ "right-override-export-depth": "Moɲey kaataray kaŋ ra moo dobantey hala guusu 5 alkadar ga",
+ "right-sendemail": "Bataga sanba goykaw taney do",
+ "right-passwordreset": "Šennikufal yeetiyan batagawey guna",
+ "newuserlogpage": "Goykaw teeyan ceebandu tiira",
+ "newuserlogpagetext": "Goykaw teeyaney ceebandu tiira ti woo.",
+ "rightslog": "Goykaw alhakey ceebandu tiira",
+ "rightslogtext": "Ceebandu tiiraa woo tee goykaw alhakey barmawey.",
+ "action-read": "moɲoo woo caw",
+ "action-edit": "moɲoo woo fasal",
+ "action-createpage": "moɲey tee",
+ "action-createtalk": "kakaw \\",
+ "action-createaccount": "goykaw kontoo woo tee",
+ "action-history": "moɲoo woo taarikoo guna",
+ "action-minoredit": "woo šilbay sanda barmay kaccu",
+ "action-move": "moɲoo woo ganandi \\",
+ "action-move-subpages": "moɲoo woo ganandi, nga moɲiizey da",
+ "action-move-rootuserpages": "linji goykaw moɲey ganandi",
+ "action-move-categorypages": "dumi moɲey ganandi",
+ "action-movefile": "tukoo woo ganandi",
+ "action-upload": "tukoo woo zijandi",
+ "action-reupload": "hantum tuku barantaa woo boŋ",
+ "action-reupload-shared": "hantum tukoo woo boŋ jišidoo žemnante ga \\",
+ "action-upload_by_url": "tukoo woo zijandi ka hun URL foo ga",
+ "action-writeapi": "goy nda hantum API",
+ "action-delete": "moɲoo woo tuusu",
+ "action-deleterevision": "fillaa woo tuusu",
+ "action-deletedhistory": "moɲoo woo taariki tuusantaa guna",
+ "action-browsearchive": "moo tuusantey ceeci",
+ "action-undelete": "moɲoo woo yeeri",
+ "action-suppressrevision": "filla tugantaa woo filla nd'a yeeti",
+ "action-suppressionlog": "suturu cebandu tiira guna",
+ "action-block": "goykaa woo ganji a m'a barmay",
+ "action-protect": "jejebu alkadarey barmay moɲoo woo se \\",
+ "action-rollback": "cahã ka barmawey yeeri goykaw kokorantaa kaŋ na moo naadirantaa barmay se",
+ "action-import": "moɲey zaa wiki tana foo ga",
+ "action-importupload": "moɲey zaa tuku zijante foo ga",
+ "action-patrol": "šilbay kaŋ boro taney barmawey ga kurandi",
+ "action-autopatrol": "war boŋ barmaa šilbay kaŋ a ga kurandi",
+ "action-unwatchedpages": "moɲey kaŋ si hawgayandi maašeedaa guna",
+ "action-mergehistory": "moɲoo woo taarikoo marga",
+ "action-userrights": "goykaw alhakey kul fasal",
+ "action-userrights-interwiki": "goykaw alhakey fasal goykey kul se wiki taney ga",
+ "action-siteadmin": "bayrayhugoo kufal wal'a feeri",
+ "action-sendemail": "batagawey sanba",
+ "action-editmywatchlist": "war hawgayhayey fasal",
+ "action-viewmywatchlist": "war hawgayhayey guna",
+ "action-viewmyprivateinfo": "war sutura alhabaroo guna",
+ "action-editmyprivateinfo": "war sutura alhabarpp fasal",
+ "nchanges": "{{PLURAL:$1|barmay}} $1",
+ "enhancedrc-since-last-visit": " $1 {{PLURAL:$1|za gunayan koraa}}",
+ "enhancedrc-history": "taariki",
+ "recentchanges": "Barmay kokorantey",
+ "recentchanges-legend": "Barmay kokorantey suubarey",
+ "recentchanges-summary": "Hanga barmay kokorantey kaŋ tee wikiyoo ga moɲoo woo ra.",
+ "recentchanges-noresult": "Barmay kul mana tee waatoo ra kaŋ ga hima šilbawey kaŋ noondi.",
+ "recentchanges-feed-description": "Hanga barmay kokorantey kaŋ tee wikiyoo ga toonandiyanoo woo ra.",
+ "recentchanges-label-newpage": "Barmaa woo na moo taaga tee",
+ "recentchanges-label-minor": "Woo ti barmay kaccu",
+ "recentchanges-label-bot": "Maršin no ka barmaa woo tee",
+ "recentchanges-label-unpatrolled": "Barmaa woo mana kurandi jina",
+ "recentchanges-label-plusminus": "Moɲoo azzaatoo barmay nda cebsi hinnaa woo",
+ "recentchanges-legend-heading": "'''Maana:'''",
+ "recentchanges-legend-newpage": "{{int:barmay kokorantey-šilbay-moo taaga}} (guna da [[Special:NewPages|moo taagey maašeede]])",
+ "recentchanges-legend-plusminus": "(<em>±123</em>)",
+ "rcnotefrom": "Ne ganda {{PLURAL:$5|ti barmay|barmawey}} za <strong>$3, $4</strong> (hala <strong>$1</strong> kaŋ ga cebandi).",
+ "rclistfrom": "Cebe barmay taagey kaŋ ga šintin $2, $3 ga",
+ "rcshowhideminor": "Barmay kaccu $1",
+ "rcshowhideminor-show": "Cebe",
+ "rcshowhideminor-hide": "Tugu",
+ "rcshowhidebots": "Maršin berekay $1",
+ "rcshowhidebots-show": "Cebe",
+ "rcshowhidebots-hide": "Tugu",
+ "rcshowhideliu": "Goykaw hantumante $1",
+ "rcshowhideliu-show": "Cebe",
+ "rcshowhideliu-hide": "Tugu",
+ "rcshowhideanons": "Goykaw kaŋ ši nda maa $1",
+ "rcshowhideanons-show": "Cebe",
+ "rcshowhideanons-hide": "Tugu",
+ "rcshowhidepatr": "Barmay kurante $1",
+ "rcshowhidepatr-show": "Cebe",
+ "rcshowhidepatr-hide": "Tugu",
+ "rcshowhidemine": "Ay barmay $1",
+ "rcshowhidemine-show": "Cebe",
+ "rcshowhidemine-hide": "Tugu",
+ "rclinks": "Cebe barmay koraw $1 jirbi $2 korawey ra<br />$3",
+ "diff": "zilayyan",
+ "hist": "taariki",
+ "hide": "Tugu",
+ "show": "Cebe",
+ "minoreditletter": "m",
+ "newpageletter": "N",
+ "boteditletter": "b",
+ "unpatrolledletter": "!",
+ "number_of_watching_users_pageview": "[$1 goo ma {{PLURAL:$1|goykaa|goykey}} guna]",
+ "rc_categories": "Kayandi dumey ga (i fay nda \"|\")",
+ "rc_categories_any": "Affoo kul",
+ "rc-change-size": "$1",
+ "rc-change-size-new": "{{PLURAL:$1|cebsi}} $1 barmaa banda ga",
+ "newsectionsummary": "/* $1 */ dunbu taaga",
+ "rc-enhanced-expand": "Šilbayhayey cebe",
+ "rc-enhanced-hide": "Šilbayhayey tugu",
+ "rc-old-title": "aššil teeyanoo sanda \"$1\"",
+ "recentchangeslinked": "Barmay kondantey",
+ "recentchangeslinked-feed": "Barmay kondantey",
+ "recentchangeslinked-toolbox": "Barmay kondantey",
+ "recentchangeslinked-title": "Barmay kondantey \"$1\" ga",
+ "recentchangeslinked-summary": "Ne ti barmawey kaŋ kokor ka tee moɲey kaŋ moɲey kaŋ dobandi moo tabatante ga (wala dumi tabatante foo moɲey).\nMoɲey kaŋ goo [[Special:Watchlist|war hawgayhayey ra]] ga tee <strong>hantum warga</strong>.",
+ "recentchangeslinked-page": "Moo maa:",
+ "recentchangeslinked-to": "Saadin cebe barmawey kaŋ tee moɲey kaŋ dobandi moo šilbantaa ga",
+ "upload": "Tukoo zijandi",
+ "uploadbtn": "Tukoo zijandi",
+ "reuploaddesc": "Zijandiyanoo naŋ nda willi zijandi takaddaa ga",
+ "upload-tryagain": "Tuku šilbayyan barmantaa sanba",
+ "uploadnologin": "Mana huru",
+ "uploadnologintext": "Taare $1 ka tukey zijandi",
+ "upload_directory_missing": "Zijandiyan fooloɲaŋoo ($1) ga kuma nda interneti feršikaa mana hin k'a tee.",
+ "upload_directory_read_only": "Feršikaa ši hin ka hantum zijandiyan fooloɲaŋoo ($1) ga.",
+ "uploaderror": "Zijandiyan firka",
+ "upload-recreate-warning": "<strong>Yaamar: Tuku nda maaɲoo din n' ka tuusandi wal'a ganandi.</strong>\n\nMoɲoo woo tuusuyan wala ganandiyan taarikoo ga fatta ne seede se:",
+ "uploadtext": "Goy nda ganda takaddaa ka tukey zijandi.\nKa dii tukey kaŋ bay ka zijandi wal'i ceeci, koy [[Special:FileList|tuku zijantey]] do, zijandi taagey ga hantumandi [[Special:Taariki/zijandi|zijandi taariki]], tuusuyaney kaŋ goo [[Special:Taariki/tuusu|tuusuyan taariki]].\n\nKa tuku foo dam moo ra, dobu foo ka goy takarey wey affoo ra:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> ka goy nda tukoo dumi timmantaa\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> ka goy nda 200 tonbi hayri willandiyan bata ra kanbe wowa hirroo ga nda \"alt text\" sanda šilbaa\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> ka šerre ka tuku dobu bila nda tukoo ma cebandi",
+ "upload-permitted": "Tuku dumi duɲantey: $1.",
+ "upload-preferred": "Tuku dumi ibaayantey: $1.",
+ "upload-prohibited": "Tuku dumi mongantey: $1.",
+ "uploadlogpage": "Ceebandu tiiraa zijandi",
+ "uploadlogpagetext": "Ne ganda tuku zijante kokorantey maašeedaa.\nGuna ne [[Special:NewFiles|tukey taagey titilaa]] \\",
+ "filename": "Tukumaa",
+ "filedesc": "Duurandi",
+ "fileuploadsummary": "Duurandi",
+ "filereuploadsummary": "Tuku barmawey:",
+ "filestatus": "Alhaku hantum assariya:",
+ "filesource": "Aššil:",
+ "ignorewarning": "Yaamar muray nda tukoo gabu de",
+ "ignorewarnings": "Yaamarey kul muray",
+ "minlength1": "Tukumaaɲey ga hima ka duu harfu foo nd'a jaase.",
+ "illegalfilename": "Tukumaa \"$1\" goo nda harfuyaŋ kaŋ ši nda goy moo maaɲes ra.\nTaare tuku maaɲoo barmay nda ceeci k'a zijandi koyne. \\",
+ "filename-toolong": "Tukumaaɲey ši hima ka kuu ka bisa cebsi 240. \\",
+ "badfilename": "Tukumaaɲoo n' ka barmay ka tee \"$1\".",
+ "filetype-mime-mismatch": "Tuku dobuyan \".$1\" ši tenji nda MIME maatantaa dumoo tukoo se ($2).",
+ "filetype-badmime": "Tukey nda MIME \"$1\" dumey ši nda fondo zijandiyan se.",
+ "filetype-bad-ie-mime": "Ši hin ka tukoo woo zijandi zama Internet Explorer n'a maate ka tee \"$1\" kaŋ ši nda fondo nd'a ga hin ka tee tuku hasaraw-teekaw dumi.",
+ "filetype-unwanted-type": "<strong>\".$1\"</strong> ti tuku dumi kaŋ ir ši ba g'a.\nIbaayi {{PLURAL:$3|tuku dumi|tuku dumey}} ti $2.",
+ "filetype-banned-type": "<strong>\".$1\"</strong> {{PLURAL:$4|manti ti tuku dumi duɲante|manti tuku dumi duɲanteyaŋ}}.\nFondo {{PLURAL:$3|tuku dumi ti|tuku dumey ti}} $2.",
+ "filetype-missing": "Tukoo ši nda dobu (sanda \".jpg\").",
+ "empty-file": "Tukoo kaŋ war n'a sanba ga koonu.",
+ "file-too-large": "Tukoo kaŋ war n'a sanba ka hansa ka beeri.",
+ "filename-tooshort": "Tukumaaɲoo ga hansa ka duura.",
+ "filetype-banned": "Tukoo dumoo n' ka barre.",
+ "verification-error": "Tukoo mana bisa tuku korošiyanoo ga.",
+ "hookaborted": "Dobu foo na barmaa kaŋ war ceeci k'a tee ganji.",
+ "illegal-filename": "Tukumaa mana duu fondo.",
+ "overwrite": "Tuku barantaa tuusuyanoo ši duu fondo.",
+ "unknown-error": "Firka šibayante foo bangay.",
+ "tmp-create-error": "Mana hin ka waati-duura tuku tee.",
+ "tmp-write-error": "Firka bangay waati-duura teeyan ra.",
+ "large-file": "A ga honnandi kaŋ tukey ši hima ga beeri ka bisa $1;\ntukoo woo ti $2.",
+ "largefileserver": "Tukoo ga beeri ka bisa dimmaa kaŋ se feršikaa soolu.",
+ "emptyfile": "A ga hima sanda tukoo kaŋ war n'a zijandi ga koonu.\nWoo aššiloo ga hin ka tee hantum firka tukumaaɲoo ra.\nTaare koroši wala war ga boona nda cimi ka tukoo woo zijandi.",
+ "windows-nonascii-filename": "Wikiyoo woo ši tukumaaɲey kaŋ goo nda cerecere harfu kanbe.",
+ "fileexists": "Tuku ga bara nda maaɲoo woo ka ben, guna <strong>[[:$1]]</strong> nda {{GENDER:|war}} ši alhakiika kaŋ war ga baa k'a barmay.\n[[$1|thumb]]",
+ "filepageexists": "Šilbayyan moɲoo tee ka ben moɲoo woo se ne <strong>[[:$1]]</strong>, amma tuku kul ši bara kaŋ goo nda maaɲoo woo.\nDuurandoo kaŋ war n'a hantum ši bangay šilbayyan moɲoo ga.\nKa too duurandoo ma bangay noodin, a ga waažibi war m'a barmay war boŋše.\n[[$1|thumb]]",
+ "fileexists-extension": "Tuku nda maa himakasine ga bara: [[$2|thumb]]\n* Tuku zijantaa maaɲoo: <strong>[[:$1]]</strong>\n* Tuku barantaa maaɲoo: <strong>[[:$2]]</strong>\nA ga hin ka tee kaŋ war ga boona ka maa fayante dam?",
+ "fileexists-thumbnail-yes": "Tukoo ga hima azzaati-nakasante bii <em>(thumbnail)</em>.\n[[$1|thumb]]\nTukoo kaŋ ti <strong>[[:$1]]</strong> koroši.\nNda tuku korosantaa ti bii follokaa nda nga ašsil azzaati, a ši waažibi kanbeboy-kuku bii ma zijandi.",
+ "file-thumbnail-no": "Tuku maaɲoo ga šintin nda <strong>$1</strong>.\nA ga hima sanda azzaati-nakasante bii <em>(thumbnail)</em>.\nNda war goo nda biyoo woo zijandi azzaati beeri ra, adiši tukumaaɲoo barmay.",
+ "fileexists-forbidden": "Tuku foo kaŋ goo nda maaɲoo woo ga bara ka ben, nd'a ši hin ka tuusandi./nNda war ga boona ka war tukoo zijandi hala sohõ, wa yee banda nda maa taaga zaa.\n[[File:$1|thumb|center|$1]]",
+ "fileexists-shared-forbidden": "Tuku foo kaŋ goo nda maaɲoo woo ga bara ka ben tuku žemnante jišidogoo.\nNda war ga boona ka war tukoo zijandi hala sohõ, wa yee banda nda maa taaga zaa.\n[[File:$1|thumb|center|$1]]",
+ "file-exists-duplicate": "Tukoo woo ti tuku-fillante {{PLURAL:$1|tukoo woo|tukey wey}} se:",
+ "file-deleted-duplicate": "Tukoo woo ([[:$1]]) himakašine n' ka bay ka tuusandi.\nWar ka hima ka tuku tuusuyan taarikoo jina hala war ga soobay k'a zijandi taaga.",
+ "file-deleted-duplicate-notitle": "Tukoo woo himakašine n' ka bay ka tuusandi, nda maaɲoo n' ka hun.\nWar ka hima ka boro foo hãa kaŋ ga hin ka tuku tuusante bayhaya guna ka misoo koroši jina hala war ga soobay k'a zijandi taaga.",
+ "uploadwarning": "Zijandiyan yaamar",
+ "uploadwarning-text": "Tuku šilbaa barmay ganda, de ma ceeci taaga.",
+ "savefile": "Tuku gaabu",
+ "uploaddisabled": "Zijandiyaney n' ka kay.",
+ "copyuploaddisabled": "Zijandiyan nda URL n' ka kay.",
+ "uploaddisabledtext": "Tuku zijandiyaney n' ka kay.",
+ "php-uploaddisabledtext": "Tuku zijandiyaney n' ka kay PHP ra.\nTaare file_uploads kayandiyanoo koroši.",
+ "uploadscripted": "Tukoo woo goo nda HTML wala šigira ašariya kaŋ ga hima kaŋ maanaa dere interneti ceecikaw se.",
+ "uploadscriptednamespace": "SVC tukoo woo goo nda maafarru \"$1\" kaŋ ši alhukum ra.",
+ "uploadinvalidxml": "XML kaŋ goo tuku zijantaa ra mana hin ka fesu-fesandi.",
+ "uploadvirus": "Tukoo goo nda wirisi!\nŠilbayhayey: $1",
+ "uploadjava": "Tukoo ti ZIP tuku kaŋ goo nda Java .class tuku.\nJava tukey zijandiyan ši duu fondo zama i ga hin ka saajaw-sahãnte jejebuhayey hoo.",
+ "upload-source": "Aššil tuku",
+ "sourcefilename": "Aššil tukumaa:",
+ "sourceurl": "Aššil URL:",
+ "destfilename": "Toodoo tukumaa:",
+ "upload-maxfilesize": "Tuku azzaati bebbeeri: $1",
+ "upload-description": "Tuku šilbayyan",
+ "upload-options": "Zijandiyan suubarey",
+ "watchthisupload": "Tukoo woo guna",
+ "filewasdeleted": "Maaɲoo woo tukoo bay ka zijandi ka ben nd'a tuusandi woodin bandaa ga.\nWar ga hima ka $1 guna jina hala war ga soobay k'a zijandi taaga. \\",
+ "filename-bad-prefix": "Tukoo kaŋ war goo ma zijandi maaɲoo ga šintin nda <strong>\"$1\"</strong>, kaŋ ti ši-šilbay maa kaŋ ga hinna biizaahayey ka doona ka noo ngi boŋše.\nWa maa suuba war tukoo se kaŋ g'a šilbay boryo. \\",
+ "filename-prefix-blacklist": " #<!-- zuwoo woo naŋ nga takaa ga --> <pre>\n# Nahawoo ti sanda:\n# * Haya kaŋ hun \"#\" harfu foo do zuwoo benantaa ga ti daara\n# * Zuu kaŋ ši koonu kul ti jinkanji tukumaaɲey se kaŋ hinna biizaahayey g'a dam ngi boŋše\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # kanbe talfon tanayaŋ\nIMG # hankul haya\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- zuwoo woo naŋ nga takaa ga -->",
+ "upload-success-subj": "Zijandiyanoo boori",
+ "upload-success-msg": "War zijandiyanpp ka hun [$2] boori. A ga bara ne: [[:{{ns:file}}:$1]]",
+ "upload-failure-subj": "Zijandiyan šenday",
+ "upload-failure-msg": "Šenday foo bangay war zijandiyanoo ka hun [$2] ga:\n\n$1",
+ "upload-warning-subj": "Zijandiyan yaamar",
+ "upload-warning-msg": "Šenday foo bara war zijandiyanoo ka hun [$2] ga. War ga hima ka willi [[Special:Upload/stash/$1|zijandi takaddaa]] ga ka misoo hanse. to.",
+ "upload-proto-error": "Sanbayan fondo laala",
+ "upload-proto-error-text": "Mooray zijandiyan ga URL kaŋ ga šintin nda <code>http://</code> wala <code>ftp://</code> waažibandi.",
+ "upload-file-error": "Kunahere firka",
+ "upload-file-error-text": "Kunahere firka bangay waatoo kaŋ war ga ceeci ka waati-duura tuku tee feršikaa ga.\nHantum [[Special:ListUsers/sysop|administrator]] se.",
+ "upload-misc-error": "Zijandiyan firka šibayante",
+ "upload-misc-error-text": "Firka šibayante bangay zijandiyanoo waate.\nTaare wa koroši wala URL boryo no nd'a ga duwandi de wa ceeci koyne.\nNda šendaa ga dumi, hantum [[Special:ListUsers/sysop|juwalkaw foo]] se.",
+ "upload-too-many-redirects": "URL cindi nda bisandiyaŋ booboyaŋ",
+ "upload-http-error": "HTTP firka foo bangay: $1",
+ "upload-copy-upload-invalid-domain": "Zijandiyaney berantey ši bara zunbudogoo ga. \\",
+ "backend-fail-stream": "Mana hin ka \"$1\" tukoo mennandi. \\",
+ "backend-fail-backup": "Mana hin ka celle tee \"$1\" tukoo se.",
+ "backend-fail-notexists": "$1 tukoo ši bara.",
+ "backend-fail-hashes": "Mana hin ka duu tuku šilbay-duura deedandiyan se.",
+ "backend-fail-notsame": "Manti-himakašine tuku ga bara \"$1\" ga. \\",
+ "backend-fail-invalidpath": "\"$1\" manti jišidoo fondo henna.",
+ "backend-fail-delete": "Mana hin ka \"$1\" tuku tuusu.",
+ "backend-fail-describe": "Man hin ka bayhayabeeri barmay \"$1\" tuku se.",
+ "backend-fail-alreadyexists": "\"$1\" tukoo ga bara ka ben.",
+ "backend-fail-store": "Mana hin ka \"$1\" tuku jiši \"$2\" ga.",
+ "backend-fail-copy": "Mana hin ka \"$1\" tuku bere \"$2\" ga.",
+ "backend-fail-move": "Mana hin ka \"$1\" tuku ganandi \"$2\" ga.",
+ "backend-fail-opentemp": "Mana hin ka waati-duura tuku feeri.",
+ "backend-fail-writetemp": "Mana hin ka waati-duura tuusu. \\",
+ "backend-fail-closetemp": "Mana hin ka waati-duura daabu.",
+ "backend-fail-read": "Mana hin ka \"$1\" tuku caw.",
+ "backend-fail-create": "Mana hin ka \"$1\" tuku hantum.",
+ "backend-fail-maxsize": "Mana hin ka \"$1\" tuku hantum zam'a ga beeri nda {{PLURAL:$2|cebsi $2}}.",
+ "backend-fail-readonly": "Bandahere dabariɲaa \"$1\" jišidoo goo cawyan-de se sohõda. Daliloo kaŋ noondi ti: \"<em>$2</em>\"",
+ "backend-fail-synced": "\"$1\" tuku goo alhaali kaŋ ši tabati ra kunahere bandahere dabariɲaa jišidogoo gundoo ra",
+ "backend-fail-connect": "Mana hin ka dobu bandahere dabariɲaa \"$1\" jišidoo ga.",
+ "backend-fail-internal": "Firka šibayante bangay bandahere dabariɲaa \"$1\" jišidoo ra.",
+ "backend-fail-contenttype": "Mana hin ka gundekuna dumi tabatandi tukoo se ka jiši \"$1\" ga.",
+ "backend-fail-batchsize": "Bandahere jišidogoo n' ka duu margari nda tuku {{PLURAL:$1|goy}} $1; alkadaroo ti {{PLURAL:$2|goy}} $2.",
+ "backend-fail-usable": "Mana hin ka \"$1\" tuku caw wal'a hantum zama duɲeyaney ši wasa wala ngi fooloɲaŋey/suuney ga kuma.",
+ "filejournal-fail-dbconnect": "Mana hin ka dobu zaaritiira bayhayahugu \"$1\" bandahere jišidogoo se.",
+ "filejournal-fail-dbquery": "Mana hin ka taariki bayhayahugu taagandi \"$1\" bandahere jišidogoo se.",
+ "lockmanager-notlocked": "Mana hin ka \"$1\" feeri; a ši kufal.",
+ "lockmanager-fail-closelock": "Mana hin ka kufal tuku daabu \"$1\" se.",
+ "lockmanager-fail-deletelock": "Mana hin ka kufal tuku tuusu \"$1\" se.",
+ "lockmanager-fail-acquirelock": "Mana hin ka duu kufal \"$1\" se.",
+ "lockmanager-fail-openlock": "Mana hin ka kufal tuku feeri \"$1\" se.",
+ "lockmanager-fail-releaselock": "Mana hin ka kufal kaataray \"$1\" se.",
+ "lockmanager-fail-db-bucket": "Mana hin ka duu kufal bayhayahugu $1 bokotu wasante ra.",
+ "lockmanager-fail-db-release": "Mana hin ka kufalyaŋ kaataray $1 bayhayahugu ra.",
+ "lockmanager-fail-svr-acquire": "Mana hin ka duu kufaley $1 feršikaa ga.",
+ "lockmanager-fail-svr-release": "Mana hin ka kufaley kaataray $1 feršikaa ga.",
+ "zip-file-open-error": "Firka foo kubandi waatoo kaŋ tukoo ga feerandi ZIP gunarey se.",
+ "zip-wrong-format": "Tuku tabatantaa mana tee ZIP tuku.",
+ "zip-bad": "Tukoo laybu wala saadin a ga tee ZIP tuku kaŋ ši cawandi.\nA ši hin ka korosandi boryo saajaw se.",
+ "zip-unsupported": "Tukoo ti ZIP tuku kaŋ ga goy nda ZIP alhaaley kaŋ MediaWiki š'i kanbe.\nA ši hin ka korosandi boryo saajaw se.",
+ "uploadstash": "Margaroo zijandi",
+ "uploadstash-summary": "Moɲoo ka fondo noo tukey ga kaŋ ga zijandi wal'a goo ma zijandi, amm'i ši wallafandi wikiyoo ga jina. Tukey ši diyandi boro kul se kala goykaa kaŋ n'i zijandi.",
+ "uploadstash-clear": "Margari tukey koonandi",
+ "uploadstash-nofiles": "War ši nda margari tuku kul.",
+ "uploadstash-badtoken": "Teeraa woo mana ben, a ga tee zama waatoo ben kaŋ ra war alhakey ka hin ka barmay. Ceeci koyne. \\",
+ "uploadstash-errclear": "Tukey tuusuyanoo mana tee ka boori.",
+ "uploadstash-refresh": "Tukey maašeedaa dam taaga",
+ "invalid-chunk-offset": "Gurunbu hibiyan laala",
+ "img-auth-accessdenied": "Huruyan mongu",
+ "img-auth-nopathinfo": "PATH_INFO ga kuma.\nWar feršikaa mana soolu alhabaroo woo bisandiyanoo se.\nSanda CGI-gorante no nd'a ši nd'a ši hin ka img_auth kanbe.\nSee https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+ "img-auth-notindir": "Fondaa kaŋ hãandi ši zijandiyan fooloɲaa hansantaa ra.",
+ "img-auth-badtitle": "Ši hin ka maa henna cin ka hun \"$1\" ga.",
+ "img-auth-nologinnWL": "War mana huru nda \"$1\" ši bara maašeede kaaraa ra.",
+ "img-auth-nofile": "\"$1\" tuku ši bara.",
+ "img-auth-isdir": "War goo ceeci ka huru \"$1\" fooloɲaa ra.\nTuku fondo de ma koy.",
+ "img-auth-streaming": "\"$1\" mennandi.",
+ "img-auth-public": "Goymiɲoo img_auth.php se ga tukey fattandi ka hun boro wiki se.\nWikiyoo hansandi ka tee baytal wiki.\nSaajaw šifa se, img_auth.php n' ka kay.",
+ "img-auth-noread": "Goykaa ši nda fondo ka \"$1\"caw.",
+ "http-invalid-url": "URL laala: $1",
+ "http-invalid-scheme": "URL nda \"$1\" dabaroo ši nda gaakašinay.",
+ "http-request-error": "Firka šibayante na HTTP hãayanoo kaŋandi.",
+ "http-read-error": "HTTP cawyan firka",
+ "http-timed-out": "HTTP hãayan waatoo ben.",
+ "http-curl-error": "URL zaayan firka: $1",
+ "http-bad-status": "Šenday foo bangay HTTP hãayanoo waate: $1 $2",
+ "upload-curl-error6": "Mana hin ka too URL do",
+ "upload-curl-error6-text": "Mana hin ka too URL kaŋ noondi do.\nKoroši ka boori kaŋ URL ga boori nda nungo ga dira.",
+ "upload-curl-error28": "Zijandiyan waatoo ben",
+ "upload-curl-error28-text": "Nungoo gay hal'a ga tuuru.\nKoroši kaŋ nungoo ga dira, batu waati duura de ma ceeci koyne.",
+ "license": "Duɲeyan:",
+ "license-header": "Duɲeyan",
+ "nolicense": "Haya kul mana suubandi",
+ "licenses-edit": "Duɲeyan suubarey fasal",
+ "license-nopreview": "(Moofuryan ši bara)",
+ "upload_source_url": "(war tuku suubantaa ka hun URL henna nda forba-duura ga)",
+ "upload_source_file": "(war tuku suubantaa ka hun war ordinateroo ga)",
+ "listfiles-delete": "tuusu",
+ "listfiles-summary": "Cerecere moɲoo woo ga tuku zumantey kul cebe.",
+ "listfiles_search_for": "Hẽenandihaya maa ceeci:",
+ "imgfile": "tuku",
+ "listfiles": "Tuku maašeeda",
+ "listfiles_thumb": "Kanbeboy",
+ "listfiles_date": "Han",
+ "listfiles_name": "Maa",
+ "listfiles_user": "Goykaw",
+ "listfiles_size": "Azzaati",
+ "listfiles_description": "Šilbayyan",
+ "listfiles_count": "Dumey",
+ "listfiles-show-all": "Biyey dumi žeeney goo no",
+ "listfiles-latestversion": "Sohõda dumoo \\",
+ "listfiles-latestversion-yes": "Ayyo",
+ "listfiles-latestversion-no": "Kalaa",
+ "file-anchor-link": "Tuku",
+ "filehist": "Tuku taariki",
+ "filehist-help": "Han/waati naagu ka dii tukoo taka kaŋ nd'a ga bangay waati din.",
+ "filehist-deleteall": "ikul tuusu",
+ "filehist-deleteone": "tuusu",
+ "filehist-revert": "willi",
+ "filehist-current": "sohõda",
+ "filehist-datetime": "Han/waati",
+ "filehist-thumb": "Kanbeboy",
+ "filehist-thumbtext": "Kanbeboy dumoo se sanda $1 ga",
+ "filehist-nothumb": "Kanbeboy kul šii",
+ "filehist-user": "Goykaw",
+ "filehist-dimensions": "Adadey",
+ "filehist-filesize": "Tuku azzaati",
+ "filehist-comment": "Deede",
+ "imagelinks": "Tuku goyyan",
+ "linkstoimage": "Ne {{PLURAL:$1|moo $1 ga dobu}} tukoo woo ga:",
+ "linkstoimage-more": "A ga bisa {{PLURAL:$1|moo $1 kaŋ ga dobu}} tukoo woo ga.\nMaašeedaa woo ga {{PLURAL:$1|moo jina dobu |moo jina $1 dobey}} cebe tukoo woo hinne ga.\n[[Special:WhatLinksHere/$2|maašeeda timmante]] ga bara.",
+ "nolinkstoimage": "Moo kulyaŋ šii kaŋ ga dobu tukoo woo ga.",
+ "morelinkstoimage": "[[Special:WhatLinksHere/$1|dobu tontoni]] guna tukoo woo ka.",
+ "linkstoimage-redirect": "$1 (tuku gumari) $2",
+ "duplicatesoffile": " {{PLURAL:$1|tukoo ti fillante|tuku $1 ti fillanteyaŋ}} tukoo woo se ([[Special:FileDuplicateSearch/$2|bay ka tonton]]):",
+ "sharedupload": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.",
+ "sharedupload-desc-there": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.",
+ "sharedupload-desc-here": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.\nŠilbayyan nga [$2 tuku šilbayyan moo] noodin ga cebe ne ganda. \\",
+ "sharedupload-desc-edit": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.\nA ga hin ka tee war ga boona ka šilbayyanoo fasal nga noodin [$2 tuku šilbayyan moo] ga.",
+ "sharedupload-desc-create": "Tukoo woo hun $1 ga nda porože tanayaŋ ga hin ka goy nd'a.\nA ga hin ka tee war ga boona ka šilbaa fasal noodin nda [$2 tuku šilbayyan moɲoo] ga. \\",
+ "filepage-nofile": "Tukoo woo maakoyni kul ši bara.",
+ "filepage-nofile-link": "Tukoo woo maakoyni kul ši bara, amma war ga hin ka nga [$1 zumandi].",
+ "uploadnewversion-linktext": "Tukoo woo dumi taaga zijandi",
+ "shared-repo-from": "ka hum $1 do",
+ "shared-repo": "jišidoo žemnante",
+ "shared-repo-name-wikimediacommons": "Wikimedia Commons",
+ "filepage.css": "/* CSS kaŋ jisandi ne ga bara tuku šilbayyan moɲoo ga, a goo daykaw ceewaani wikitiirawey da ga */",
+ "upload-disallowed-here": "War ši hin ka hantum tukoo woo boŋ.",
+ "filerevert": "$1 willi",
+ "filerevert-legend": "Tuku willi",
+ "filerevert-intro": "War ga kaa ka tukoo willi <strong>[[Media:$1|$1]]</strong> nga [$4 dumi ga $3 waate, $2 hane].",
+ "filerevert-comment": "Dalil:",
+ "filerevert-defaultcomment": "Willi dumoo ga kaŋ tee $2 waate, $1 hane.",
+ "filerevert-submit": "Willi",
+ "filerevert-success": "<strong>[[Media:$1|$1]]</strong> n' ka willi [$4 dumi ga $3 waate, $2 hane].",
+ "filerevert-badversion": "Nungu dumi bisante kul ši bara tukoo woo se nda waatišilbaa kaŋ noondi.",
+ "filedelete": "$1 tuusu",
+ "filedelete-legend": "Tuku tuusu",
+ "filedelete-intro": "War ga kaa ka tuku <strong>[[Media:$1|$1]]</strong>nda nga taarikoo kul tuusu.",
+ "filedelete-intro-old": "War goo ma dumi <strong>[[Media:$1|$1]]</strong> tuusu za [$4 $3 waate, $2 hane].",
+ "filedelete-comment": "Dalil:",
+ "filedelete-submit": "Tuusu",
+ "filedelete-success": "<strong>$1</strong> n' ka tuusandi.",
+ "filedelete-success-old": "Dumi <strong>[[Media:$1|$1]]</strong> za $3 waate, $2 hane n' ka tuusandi.",
+ "filedelete-nofile": "<strong>$1</strong> ši bara.",
+ "filedelete-nofile-old": "Dumi jisante kul ši <strong>$1</strong> se nda alhaaley wey kaŋ tabatandi.",
+ "filedelete-otherreason": "Dalil tana/tontoni:",
+ "filedelete-reason-otherlist": "Dalil waani",
+ "filedelete-reason-dropdown": "*Yamma tuusuyan daliley\n**Hantummayray alhaku hooyan\n**Tuku fillante",
+ "filedelete-edit-reasonlist": "Fasal tuusuyan daliley",
+ "filedelete-maintenance": "Tuku tuusuyan nda yeekateyan ši goy waati foo hawgayyan-goy sabbu ra.",
+ "filedelete-maintenance-title": "Ši hin ka tuku tuusu",
+ "mimesearch": "MIME ceeci",
+ "mimesearch-summary": "Moɲoo woo ka naŋ tukey ma faya ngi MIME dumoo bande.\nDamhaya: contenttype/subtype wala contenttype/*, sanda <code>image/jpeg</code>",
+ "mimetype": "MIME dumi:",
+ "download": "zumandi",
+ "unwatchedpages": "Moɲey kaŋ ši gunandi",
+ "listredirects": "Bisandiyan maašeede",
+ "listduplicatedfiles": "Tuku fillantey maašeede",
+ "listduplicatedfiles-summary": "Woo ti tuku maašeede kaŋ ra tukoo dumi kokorantaa ga tee celle tuku tana foo dumi kokorantaa se. Nungu-bande tukey de no woo g'i guna.",
+ "listduplicatedfiles-entry": "[:File:$1|$1]] goo nda [[$3|{{PLURAL:$2|celle foo|celle $2}}]].",
+ "unusedtemplates": "Leetey kaŋ ši goyandi",
+ "unusedtemplatestext": "Moɲoo woo ga moɲey kul cebe {{ns:template}} maafarroo ra, kaŋyaŋ ši bara moo tana foo ra.\nHonga ka dobu taney tenjandi leetey ga jina nda war ga baa k'i tuusu.",
+ "unusedtemplateswlh": "doby taney",
+ "randompage": "Kaašim moo",
+ "randompage-nopages": "Moo kul ši ne {{PLURAL:$2|maafarroo|maafarrey}} ra: $1.",
+ "randomincategory": "Kaašim moo dumi ra",
+ "randomincategory-invalidcategory": "\"$1\" manti dumi maa henna.",
+ "randomincategory-nopages": "Moo kul ši bara [[:Category:$1|$1]] dumoo ra.",
+ "randomincategory-category": "Dumi:",
+ "randomincategory-legend": "Kaašim moo dumi ra",
+ "randomredirect": "Kaašim bisandiyan",
+ "randomredirect-nopages": "Bisandiyan kul ši \"$1\" maafarroo ra.",
+ "statistics": "Kabu-izey",
+ "statistics-header-pages": "Moo kabu-izey",
+ "statistics-header-edits": "Fasalyan kabu-izey",
+ "statistics-header-users": "Goykaw kabu-izey",
+ "statistics-header-hooks": "Kabu-ize taney",
+ "statistics-articles": "Gundekuna moɲey",
+ "statistics-pages": "Moɲes",
+ "statistics-pages-desc": "Moɲey kul kaŋ goo wikiyoo ra, sanda deede moɲey, bisandiyaney nda taney.",
+ "statistics-files": "Tuku zijantey",
+ "statistics-edits": "Moo barmawey za {{SITENAME}} n' ka gorandi",
+ "statistics-edits-average": "Sasawandi barmaney moo foo kul se",
+ "statistics-users": "Maa-hantumante [[Special:ListUsers|goykey]]",
+ "statistics-users-active": "Goykaw kaŋ goo mee ra",
+ "statistics-users-active-desc": "Goykey kaŋ na teera foo timmandi {{PLURAL:$1|zaari $1}} koraw ra",
+ "pageswithprop": "Moɲoo kaŋ goo nda moo mayray",
+ "pageswithprop-legend": "Moɲey kaŋ goo nda moo mayray",
+ "pageswithprop-text": "Moɲoo woo ga mooyaŋ cebe kaŋ ga goy nda moo mayray naadira.",
+ "pageswithprop-prop": "Mayray maa:",
+ "pageswithprop-submit": "Koy",
+ "pageswithprop-prophidden-long": "hantum mayray hinna tugande kuku $1)",
+ "pageswithprop-prophidden-binary": "fondo-hinka mayray hinna tugante ($1)",
+ "doubleredirects": "Bisandiyan fillantey",
+ "doubleredirectstext": "Moɲoo woo ga mooyaŋ cebe kaŋ ga bisandi bisandiyan moo tanayaŋ ga./nSorro foo kul goo nda dobuyaŋ ijinaa ga nda bisandiyaŋ ihinkantoo ga, kaŋ ga doona ka tee \"real\" toodoo moɲoo kaŋ do bisandiyan jinaa ga hima ka sinja.\n Hantumey <del>gamžeerantey</del> kul aššiloo duwandi.",
+ "double-redirect-fixed-move": "[[$1]] n' ka ganandi.\nA n' ka taagandi nga boŋše nda sohõ a ga bere [[$2]] ga.",
+ "double-redirect-fixed-maintenance": "Ga bereyan-hinka hanse ka hun [[$1]] ga [[$2]] here hawgayyan goy ra.",
+ "double-redirect-fixer": "Bereyan hansekaw",
+ "brokenredirects": "Bereyan kayrante",
+ "brokenredirectstext": "Doboo woo ga bere moo ši-baranteyaŋ here:",
+ "brokenredirects-edit": "fasal",
+ "brokenredirects-delete": "tuusu",
+ "withoutinterwiki": "Mooyaŋ bila šenni dobuyaŋ \\",
+ "withoutinterwiki-summary": "Moɲey wey ši dobu šenni dumi tanayaŋ ga.",
+ "withoutinterwiki-legend": "Jinkanji",
+ "withoutinterwiki-submit": "Cebe",
+ "fewestrevisions": "Moɲey nda filla kul ikaccey",
+ "nbytes": "{{PLURAL:$1|cebsi}} $1",
+ "ncategories": "{{PLURAL:$1|dumi}} $1",
+ "ninterwikis": "{{PLURAL:$1|interwiki}} $1",
+ "nlinks": "{{PLURAL:$1|dobu}} $1",
+ "nmembers": "{{PLURAL:$1|kondayze}} $1",
+ "nmemberschanged": "{{PLURAL:$2|kondayze}} $1 → $2 \\",
+ "nrevisions": "{{PLURAL:$1|filla}} $1",
+ "nviews": "{{PLURAL:$1|gunari}} $1 \\",
+ "nimagelinks": "Goyandi {{PLURAL:$1|moo}} ga",
+ "ntransclusions": "goyandi {{PLURAL:$1|moo}} 1",
+ "specialpage-empty": "Hunyan kulyaŋ ši bayrandiroo woo se.",
+ "lonelypages": "Moo alitimey",
+ "lonelypagestext": "Moɲey wey ši dobu ka hun wala kanandi ka tee moo tanayaŋ {{SITENAME}} ra.",
+ "uncategorizedpages": "Moɲey mana fayandi",
+ "uncategorizedcategories": "Dumey mana fayandi",
+ "uncategorizedimages": "Tukey mana fayandi",
+ "uncategorizedtemplates": "Leetey mana fayandi",
+ "unusedcategories": "Dumey mana goyandi",
+ "unusedimages": "Tukey mana goyandi",
+ "wantedcategories": "Dumi boonantey",
+ "wantedpages": "Moo boonantey",
+ "wantedpages-badtitle": "Maa laala hunyan kanandi ra: $1",
+ "wantedfiles": "Tuku boonantey",
+ "wantedfiletext-cat": "Tukey wey ga goyandi amm'i ši bara. Tukey kaŋ ga hun jišidoo waaniyaŋ ra ga hin ka cebandi b'i ga bara. Deray-bangayrey wey dumey ga <del>tuusandi</del>. Woo banda ga, moɲey kaŋ ra tukey kaŋ ši bara goo ga hantumandi [[:$1]] ra.",
+ "wantedfiletext-cat-noforeign": "Tukey wey ga goyandi amm'i ši bara. Woo bandaa ga, moɲey kaŋ ra tukey kaŋ ši bara goo ga hantumandi [[:$1]] ra.",
+ "wantedfiletext-nocat": "Tukey wey ga goyandi amm'i ši bara. Tukey kaŋ ga hun jišidoo waaniyaŋ ra ga hin ka hantumandi b'i ga bara. Deray-bangayrey wey dumey ga <del>tuusandi</del>.",
+ "wantedfiletext-nocat-noforeign": "Tukey wey ga goyandi ba kaŋ i ši bara.",
+ "wantedtemplates": "Leeti boonantey",
+ "mostlinked": "Moɲey kaŋ ga šifa ka dobandi",
+ "mostlinkedcategories": "Dumi kaŋ ga šifa ka dobandi",
+ "mostlinkedtemplates": "Moɲey kaŋ ga šifa ka kanandi",
+ "mostcategories": "Moɲey nda dumi kul iboobey",
+ "mostimages": "Tukey kaŋ ka šifa ka dobandi \\",
+ "mostinterwikis": "Moɲey kaŋ goo nda interwiki kul iboobey",
+ "mostrevisions": "Moɲey nda filla kul iboobey",
+ "prefixindex": "Moɲey kul nda jinkanji",
+ "prefixindex-namespace": "Moɲey kul nda jinkanji ($1 maafarru)",
+ "prefixindex-strip": "Jinkanji kaa maašeede ra",
+ "shortpages": "Moo duurantey",
+ "longpages": "Moo kukey",
+ "deadendpages": "Moo fokantey",
+ "deadendpagestext": "Moɲey wey si dobu moo tanayaŋ ga {{SITENAME}} ra.",
+ "protectedpages": "Moo jejebantey",
+ "protectedpages-indef": "Jejebey kaŋ ši tabati hinne",
+ "protectedpages-summary": "Moɲoo woo ga moo baranteyaŋ cebe kaŋ ga jejebandi sohõda. Ka dii maaɲey kaŋ ga jejebu g'i gani i ma tee, guna [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+ "protectedpages-cascade": "Jejebu kaŋantey hinne",
+ "protectedpages-noredirect": "Bereyaney tugu",
+ "protectedpagesempty": "Mooyaŋ kul si jejebandi nda kayandiyaney wey sohõda.",
+ "protectedpages-timestamp": "Waatilanba",
+ "protectedpages-page": "Moo",
+ "protectedpages-expiry": "Ga buu",
+ "protectedpages-performer": "Jejebuyan goykaw",
+ "protectedpages-params": "Jejebuyan kayandiyaney",
+ "protectedpages-reason": "Dalil",
+ "protectedpages-unknown-timestamp": "Šibayante",
+ "protectedpages-unknown-performer": "Goykaw šibayante",
+ "protectedtitles": "Maa jejebantey",
+ "protectedtitles-summary": "Moɲoo woo ga maayaŋ cebe kaŋ jejebu g'i ganji i ma tee sohõda. Ka dii moo barantey kaŋ ga jejebandi, guna [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+ "protectedtitlesempty": "Maa kulyaŋ ši jejebandi nda kayandiyaney wey sohõda.",
+ "listusers": "Goykaw maašeede",
+ "listusers-editsonly": "Goykaw nda fasalyan hinne cebe",
+ "listusers-creationsort": "Fay teeyan han bande",
+ "listusers-desc": "Fay hinna zunbante bande",
+ "usereditcount": "{{PLURAL:$1|Barmay}} $1",
+ "usercreated": "{{GENDER:$3|Tee}} $1 hane $2 waate",
+ "newpages": "Moo taagey",
+ "newpages-username": "Goykaw maa:",
+ "ancientpages": "Moo kul ižeeney",
+ "move": "Ganandi",
+ "movethispage": "Moɲoo woo ganandi",
+ "unusedimagestext": "Moɲey wey ga bara amm'i mana kanandi moo kul ra.\nLaasaabu kaŋ interneti nungu tana kul ši dobu moo ga nda URL šerrante, nd'a ga hin ka tee maaɲoo ma huru ne ba a goo goy ra. \\",
+ "unusedcategoriestext": "Dumi moɲey wey ga bara, ba kaŋ moo wala dumi tana kul ši nd'i se goymee. \\",
+ "notargettitle": "Toodoo kul šii",
+ "notargettext": "War mana toodoo moo wala goykaw tabatandi ka goyoo woo tee.",
+ "nopagetitle": "Toodoo moo takaa woo kul šii",
+ "nopagetext": "Toodoo moɲoo kaŋ war n'a tabatandi ši bara.",
+ "pager-newer-n": "{{PLURAL:$1|itaaga $1}}",
+ "pager-older-n": "{{PLURAL:$1|ižeena $1}}",
+ "suppress": "Moofur",
+ "querypage-disabled": "Cerecere moɲoo woo n' ka kayandi goysahã dalil se. \\",
+ "apihelp": "API faaba",
+ "apihelp-no-such-module": "Dunbu \"$1\" mana duwandi",
+ "booksources": "Citaabu aššiley",
+ "booksources-search-legend": "Citaabu aššil ceeci",
+ "booksources-isbn": "ISBN:",
+ "booksources-search": "Ceeci",
+ "booksources-text": "Ne ganda dobu maašeede ga fatta nungu tanayaŋ here kaŋ ga citaabu taaga nd'ižeenayaŋ neere, nd'a hima ga bara nda alhabar tontoni citaabey kaŋ war g'i ceeci ga: \\",
+ "booksources-invalid-isbn": "ISBN lanbaa kaŋ huru ši hima ka boori; guna firkawey kaŋ ga hin tee hun aššil berandiyan ra.",
+ "specialloguserlabel": "Teekaw:",
+ "speciallogtitlelabel": "Toodoo (maa wala goykaw):",
+ "log": "Ceebandu taarikey",
+ "all-logs-page": "Baytal ceebandu taarikey kul",
+ "alllogstext": "{{SITENAME}} ceebandu taari barantey kul margantey.\nWar ga hin ka gunaroo kankamandi nda war ga taariki dumi, goykaw ma (harfu-azzaati hawgay), wala moo duwante (harfu-azzaati hawgay nga da se) suuba.",
+ "logempty": "Haya-ize tenjantey kul šii taarikoo ra.",
+ "log-title-wildcard": "Maaɲey kaŋ šintin nda hantumoo woo ceeci",
+ "showhideselectedlogentries": "Taariki hantum suubantey diiyanoo barmay \\",
+ "allpages": "Moɲey kul",
+ "nextpage": "Jine moɲoo ($1)",
+ "prevpage": "Moo bisantaa ($1)",
+ "allpagesfrom": "Moɲey cebe kaŋ ga šintin ne:",
+ "allpagesto": "Moɲey cebe kaŋ ga ben ne:",
+ "allarticles": "Moɲey kul",
+ "allinnamespace": "Moɲey kul (maafarru $1)",
+ "allpagessubmit": "Koy",
+ "allpagesprefix": "Moɲey nda jinkanji cebe:",
+ "allpagesbadtitle": "Moo maaɲoo kaŋ noondi ga laala wal'a goo nda šenni-game wala wiki-game jinkanji.\nA ga hin ka bara nda harfu foo wala hinna tana ši hin ka koy maaɲey ra.",
+ "allpages-bad-ns": "{{SITENAME}} ši nda \"$1\" maafarru.",
+ "allpages-hide-redirects": "Bisandiyaney tugu",
+ "cachedspecial-viewing-cached-ttl": "War goo ma dii moɲoo woo dumi tugante, kaŋ hin ka bara nda hala $1.",
+ "cachedspecial-viewing-cached-ts": "War goo ma dii moɲoo woo dumi tugante, kaŋ ga hima sand'a ma taagandi ka timme. \\",
+ "cachedspecial-refresh-now": "Dii ikoraa",
+ "categories": "Dumey",
+ "categoriespagetext": "Ne {{PLURAL:$1|dumoo goo nda|dumey goo nda}} mooyaŋ wala hẽenandi haya.\n[[Special:UnusedCategories|Dumey kaŋ ši goy]] ga cebandi ne.\nDii da [[Special:WantedCategories|dumey kaŋ ga ceecandi]].",
+ "categoriesfrom": "Dumey cebe kaŋ ga šintin ne:",
+ "special-categories-sort-count": "fay kabu bande \\",
+ "special-categories-sort-abc": "fay abaca bande",
+ "deletedcontributions": "Goykaw kanbuzaama tuusantey",
+ "deletedcontributions-title": "Goykaw kanbuzaama tuusantey",
+ "sp-deletedcontributions-contribs": "kanbuzaamawey",
+ "linksearch": "Tarayhere dobey ceeci",
+ "linksearch-pat": "Noone ceeci:",
+ "linksearch-ns": "Maafarru:",
+ "linksearch-ok": "Ceeci",
+ "linksearch-text": "Baytal tammaasawey sanda \"*.wikipedia.org\" ga hin ka goyandi.\nMa bara nda, nd'a jaase, beene-alkadar nungu, sanda \"*.org\".<br />\n{{PLURAL:$2|fondo|fondawey}}: <code>$1</code> (tilasu ra bere http:// ga nda fondo kul mana tabatandi).",
+ "linksearch-line": "$1 ga dobu $2 ga",
+ "linksearch-error": "Baytal tammaasawey ga bangay zunbudoo maa šintinoo hinne ga.",
+ "listusersfrom": "Goykey cebe kaŋ ga šintin ne:",
+ "listusers-submit": "Cebe",
+ "listusers-noresult": "Goykaw kul mana duwandi.",
+ "listusers-blocked": "(hodante)",
+ "activeusers": "Goykey kaŋ goo mee ra",
+ "activeusers-intro": "Wey ti goykey kaŋ cindi goymee tana ra {{PLURAL:$1|jirbi}} $1 kaŋ kokor ra.",
+ "activeusers-count": "{{PLURAL:$1|teera}} $1 {{PLURAL:$3|jirbi|$3}} kaŋ kokor ra.",
+ "activeusers-from": "Goykey cebe kaŋ ga šintin ne:",
+ "activeusers-hidebots": "Maršin berekey tugu",
+ "activeusers-hidesysops": "Juwalkey tugu",
+ "activeusers-noresult": "Goykaw kul mana duwandi.",
+ "listgrouprights": "Goykaw kuray alhakey",
+ "listgrouprights-summary": "The following is a list of user groups defined on this wiki, with their associated access rights.\nA ga hin ka tee [[{{MediaWiki:Listgrouprights-helppage}}|alhabar tontoni]] ga bara boro alhakey ga.",
+ "listgrouprights-key": "Maana:\n* <span class=\"listgrouprights-granted\">Alhaku noontey right</span>\n* <span class=\"listgrouprights-revoked\">Alhaku wanjantey</span>",
+ "listgrouprights-group": "Kuray",
+ "listgrouprights-rights": "Alhakey",
+ "listgrouprights-helppage": "Help:Kuray alhakey",
+ "listgrouprights-members": "(kondayzey maaɲey)",
+ "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|Kuray}} tonton: $1",
+ "listgrouprights-removegroup": "{{PLURAL:$2|Kuray}} kaa: $1",
+ "listgrouprights-addgroup-all": "Kurawey kul tonton",
+ "listgrouprights-removegroup-all": "Kurawey kul kaa",
+ "listgrouprights-addgroup-self": "{{PLURAL:$2|Kuray}} tonton war boŋ kontoo ga: $1",
+ "listgrouprights-removegroup-self": "{{PLURAL:$2|Kuray}} kaa war boŋ kontoo ra: $1",
+ "listgrouprights-addgroup-self-all": "Kurawey kul tonton war boŋ kontoo ga",
+ "listgrouprights-removegroup-self-all": "Kurawey kul kaa war boŋ kontoo ra",
+ "listgrouprights-namespaceprotection-header": "Maafarru nakašiyaney",
+ "listgrouprights-namespaceprotection-namespace": "Maafarru",
+ "listgrouprights-namespaceprotection-restrictedto": "Alhakey kaŋ ga naŋ goykaa ma fasal",
+ "trackingcategories": "Kuryan dumey",
+ "trackingcategories-summary": "Moɲoo ga kuryan dumey cebe kaŋyaŋ ra MediaWiki porogaram huru nga boŋše. Maaɲey ga hin ka barmay nda dabari alhabar-teeyan n' ka barmay {{ns:8}} maafarroo ra.",
+ "trackingcategories-msg": "Kuryan dumi",
+ "trackingcategories-name": "Alhabar maa",
+ "trackingcategories-desc": "Dumi damyan daliley",
+ "noindex-category-desc": "Maršin gunakey ši moɲoo woo šilbay zam'a goo nda kotto kalimaa <code><nowiki>__NOINDEX__</nowiki></code> a ga nd'a goo maafarru ra kaŋ se yaamaroo din ga koy.",
+ "index-category-desc": "Moɲoo woo goo nda <code><nowiki>__INDEX__</nowiki></code> a ga (nd'a goo maafarru ra kaŋ se yaamaroo ka koy), adiši maršin gunakey g'i šilbay nungu kaŋ ra a ši doona ka bara.",
+ "post-expand-template-inclusion-category-desc": "Moɲoo azzaatoo ga bisa <code>$wgMaxArticleSize</code> nda leetey kul hayandi ka ben, adiši leeti fooyaŋ ši hin ka hayandi koyne.",
+ "post-expand-template-argument-category-desc": "Moɲoo ga bisa <code>$wgMaxArticleSize</code> nda leeti deede foo hayandi ka ben (haya kaŋ goo kanbu hinza game, sanda <code>{{{Foo}}}</code>).",
+ "expensive-parserfunction-category-desc": "Moɲoo goo nda fesu-fesu moo caadayaŋ (sanda <code>#ifexist</code>). Guna [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "Moɲoo goo nda tuku dobu kayra fee (dobu kaŋ kanandi tuku ra waati kaŋ tukoo ši bara).",
+ "hidden-category-category-desc": "Dumoo goo nda <code><nowiki>__HIDDENCAT__</nowiki></code> nga moo gundekunaa ra, kaŋ ga ganji a ma fatta dumi dobey bataa ra moɲey ga tilasu ra.",
+ "trackingcategories-nodesc": "Šilbayyan kul šii.",
+ "trackingcategories-disabled": "Dumi n' ka kayandi",
+ "mailnologin": "Manti sanba aderesu",
+ "mailnologintext": "War mma hima ka [[Special:UserLogin|huru]] nda ka bara nda bataga aderesu henna war [[Special:Preferences|ibaayey]] ra ka bataga sanba goykaw taney se.",
+ "emailuser": "Hantum goykaa woo se",
+ "emailuser-title-target": "Hantum {GENDER:$1|user}} woo se",
+ "emailuser-title-notarget": "Bataga goykaw",
+ "emailpage": "Bataga goykaw",
+ "emailpagetext": "War ga hin ka ganda takaddaa zaa ka bataga sanba {{GENDER:$1|goykaw}} se.\nBataga aderesoo kaŋ war n'a dam [[Special:Preferences|your user preferences]] ra mma bangay sanda \"From\" bataga aderesu, adiši duukaa ga hin ka war zaabi nga boŋ se.",
+ "defemailsubject": "{{SITENAME}} bataga kan hun \"$1\" do",
+ "usermaildisabled": "Goykaw bataga ši koy",
+ "usermaildisabledtext": "War ši hin ka bataga sanba goykaw taney se wikiyoo woo ga",
+ "noemailtitle": "Bataga aderesu kul šii",
+ "noemailtext": "Goykaa mana bataga aderesu henna kul tabatandi.",
+ "nowikiemailtext": "Goykaa ši boona ka duu bataga kaŋ hun goykaw taney do. \\",
+ "emailnotarget": "Duukaa goykaw maaɲoo ši bara wal'a ši boori.",
+ "emailtarget": "Goykaw maa dam duukaa se",
+ "emailusername": "Goykaw maa:",
+ "emailusernamesubmit": "Sanba",
+ "email-legend": "Bataga sanba {{SITENAME}} goykaw tana se",
+ "emailfrom": "Hantumkaw:",
+ "emailto": "Duukaw:",
+ "emailsubject": "Dalil:",
+ "emailmessage": "Alhabar:",
+ "emailsend": "sanba",
+ "emailccme": "Ay batagaa sanba ya ne da",
+ "emailccsubject": "War batagaa ga bere $1 ga: $2",
+ "emailsent": "Bataga sanbandi",
+ "emailsenttext": "War batagaa n' ka sanbandi.",
+ "emailuserfooter": "$1 na batagaa woo sanba $2 do nda \"Email user\" goyfondo {{SITENAME}} ga.",
+ "usermessage-summary": "Goo ma dabariɲaa alhabar sanba.",
+ "usermessage-editor": "Dabariɲaa bayrandikaw",
+ "usermessage-template": "MediaWiki:UserMessage",
+ "watchlist": "Hawgayhayey",
+ "mywatchlist": "Hawgayhayey",
+ "watchlistfor2": "$1 $2 se",
+ "nowatchlist": "Haya-izeyaŋ kul šii war hawgayhayey ra.",
+ "watchlistanontext": "Wa huru taare ka dii haya-izey war hawgayhayey ra. wala k'i fasal.",
+ "watchnologin": "Mana huru",
+ "addwatch": "Tonton hawgayhayey ga",
+ "addedwatchtext": "\"[[:$1]]\" moɲoo n' ka tontonandi war [[Special:Watchlist|watchlist]] ga.\nHiino barmawey kaŋ tee moɲoo woo nda deede moo kondantaa ga cebandi noodin.",
+ "addedwatchtext-short": " \"$1\" moɲoo n' ka tontonandi war hawgayhayey ga.",
+ "removewatch": "Kaa hawgayhayey ra",
+ "removedwatchtext": " \"[[:$1]]\" moɲoo n' ka hun [[Special:Watchlist|war hawgayhayey]] ra.",
+ "removedwatchtext-short": "\"$1\" moɲoo n' ka hun war hawgayhayey ra. \\",
+ "watch": "Hawgay",
+ "watchthispage": "Moɲoo woo hawgay",
+ "unwatch": "Ma ši hawgay",
+ "unwatchthispage": "Feenda hawgayhayyan",
+ "notanarticle": "Manti gundekuna moo",
+ "notvisiblerev": "Filla koraa kaŋ goykaw waani n'a tee n' ka tuusandi \\",
+ "watchlist-details": "{{PLURAL:$1|moo $1}} bara war hawgayhayey ra, deede moɲey ši kabu jere ga.",
+ "wlheader-enotif": "Bataga bayrandiyan n' ka tunandi.",
+ "wlheader-showupdated": "Moɲey kaŋ barmay za cee koraa kaŋ war n'i guna ga cebandi harfu <strong>warga</strong> ra.",
+ "wlnote": "Ne ganda {{PLURAL:$1|ti barmay kokorante <strong>$1</strong>}} za {{PLURAL:$2|guuru kokorante <strong>$2</strong> ra}}, $3 hane, $4 waate.",
+ "wlshowlast": "Guuru $1 zaari $2 kokorante cebe",
+ "watchlist-options": "Hawgayhaya suubarey",
+ "watching": "Goo ma hawgay…",
+ "unwatching": "Ši ma guna…",
+ "watcherrortext": "Firka bangay waatoo kaŋ war hawgayhayey kayandiyaney ga barmay \"$1\" se.",
+ "enotif_reset": "Moo gunantey kul šilbay",
+ "enotif_impersonal_salutation": "{{SITENAME}} goykaw",
+ "enotif_subject_deleted": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|tuusu}}",
+ "enotif_subject_created": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|tee}}",
+ "enotif_subject_moved": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|ganandi}}",
+ "enotif_subject_restored": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|yeeri}}",
+ "enotif_subject_changed": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|barmay}}",
+ "enotif_body_intro_deleted": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|tuusu}} $PAGEEDITDATE ga, $2 k'a tee, guna $3 \\",
+ "enotif_body_intro_created": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|tee}} $PAGEEDITDATE ga, $2 k'a tee, guna $3 sohõda fillaa se.",
+ "enotif_body_intro_moved": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|ganandi}} $PAGEEDITDATE ga, $2 k'a tee, guna $3 sohõda fillaa se.",
+ "enotif_body_intro_restored": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|yeeri}} $PAGEEDITDATE ga, $2 k'a tee, guna $3 sohõda fillaa se.",
+ "enotif_body_intro_changed": "$2 n' ka {{SITENAME}} $1 moɲoo {{GENDER:$2|barmay}} $PAGEEDITDATE ga, $2 k'a tee, guna $3 sohõda fillaa se.",
+ "enotif_lastvisited": "Dii $1 barmay kul se za war naarumi koraa ga \\",
+ "enotif_lastdiff": "Dii $1 ka barmaa woo guna.",
+ "enotif_anon_editor": "goykaw maatugante $1",
+ "enotif_body": "Dear $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nEditor's summary: $PAGESUMMARY $PAGEMINOREDIT\n\nContact the editor:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nThere will be no other notifications in case of further activity unless you visit this page while logged in. You could also reset the notification flags for all your watched pages on your watchlist.\n\nYour friendly {{SITENAME}} notification system\n\n--\nTo change your email notification settings, visit\n{{canonicalurl:{{#special:Preferences}}}}\n\nTo change your watchlist settings, visit\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nTo delete the page from your watchlist, visit\n$UNWATCHURL\n\nFeedback and further assistance:\n$HELPPAGE",
+ "created": "n' ka tee",
+ "changed": "n' ka barmay",
+ "deletepage": "Moɲoo tuusu",
+ "confirm": "Cimandi",
+ "excontent": "gundekuna bay ka ti: \"$1\" \\",
+ "excontentauthor": "gundekuna bay ka ti: \"$1\" (nda kanbuzaakaw follokaa bay ka ti \"[[Special:Contributions/$2|$2]]\")",
+ "exbeforeblank": "gundekuna tuusuyanoo se jine: \"$1\"",
+ "delete-confirm": "\"$1\" tuusu",
+ "delete-legend": "Tuusu",
+ "historywarning": "<strong>Yaamar:</strong> Moɲoo kaŋ war goo m'a tuusu goo nda taariki nda {{PLURAL:$1|filla}} $1:",
+ "confirmdeletetext": "War ga baa ka moo foo tuusu nda nga taariki timmantaa.\nCimandi kaŋ war ga boona ka woo tee, kaŋ war ga faham goybanawey se, nda kaŋ war goo ma woo tee [[{{MediaWiki:Policy-url}}|laadaa]] bande.",
+ "actioncomplete": "Teeraa timme",
+ "actionfailed": "Teeraa kaŋ",
+ "deletedtext": "\"$1\" n' ka tuusandi.\nDii $2 ka duu tuusuyan kokorantey taarikoo.",
+ "dellogpage": "Tuusuyan ceebandu tiira",
+ "dellogpagetext": "Ne ganda tuusuyan kokorantey maašeedaa.",
+ "deletionlog": "tuusuyan ceebandu tiira",
+ "reverted": "Yeeti filla bisantaa ga",
+ "deletecomment": "Dalil:",
+ "deleteotherreason": "Dalil tana/tontoni:",
+ "deletereasonotherlist": "Dalil tana",
+ "deletereason-dropdown": "* Common delete reasons\n** Spam\n** Vandalism\n** Copyright violation\n** Author request\n** Broken redirect",
+ "delete-edit-reasonlist": "Tuusuyan daliley fasal",
+ "delete-toobig": "Moɲoo goo nda fasal taariki bebbeeri, kaŋ ga bisa {{PLURAL:$1|filla}} $1.\nMoo tanayaŋ tuusuyan n' ka šendandi ka ganji {{SITENAME}} ma dere ka kay.",
+ "delete-warning-toobig": "Moɲoo goo nda fasal taariki bebbeeri, kaŋ ga bisa {{PLURAL:$1|filla}} $1.\nNga tuusuyanoo ga hin ka bayhaya goyey kayandi {{SITENAME}} ga.\n\\",
+ "deleteprotected": "War ši hin ka moɲoo woo tuusu zam'a ma jejebandi.",
+ "deleting-backlinks-warning": "'''Warning:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Moo taney]] ga dobu wal'i huru moɲoo kaŋ war ga baa k'a barmay dogoo ra.",
+ "rollback": "Yee banda fasalyaney \\",
+ "rollbacklink": "yee banda",
+ "rollbacklinkcount": "{{PLURAL:$1|Fasalyan}} $1 yee banda",
+ "rollbacklinkcount-morethan": "Kaŋ ga bisa {{PLURAL:$1|fasalyan}} $1 yee banda",
+ "rollbackfailed": "Mana hin ka yee banda \\",
+ "cantrollback": "Ši hin la fasalyano willi;\nkanbuzaakaw koraa ti moɲoo woo hantumkaw follokaa",
+ "alreadyrolled": "Ši hin ka [[:$1]] barmay koraa kaŋ [[User:$2|$2]] n'a tee willi banda ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\n\n Barmay koraa kaŋ [[User:$3|$3]] n'a tee moɲoo ga ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+ "editcomment": "Fasal duurandoo: \"''$1''\".",
+ "revertpage": "[[User:$1|$1]] na barmawey kaŋ [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) n'i tee willi filla koraa ga",
+ "revertpage-nouser": "Reverted edits by a hidden user to last revision by {{GENDER:$1|[[User:$1|$1]]}}Goykaw tugante na barmawey willi filla koraa ga kaŋ {{GENDER:$1|[[User:$1|$1]]}} n'i tee",
+ "rollback-success": "Barmawey kaŋ $1 n'i willi;\n$2 n'i yeeti filla koraa ga. \\",
+ "sessionfailure-title": "Goywaati kayyan",
+ "sessionfailure": "A ga hima šenday foo na war huruyanoo kubay;\nteeraa woo n' ka kay saajaw sabbu se ka ganji boro ma war fondokosay.\nWilli moo bisantaa ga, moɲoo zumandi taaga de war ma ceei koyne.",
+ "protectlogpage": "Jejebuyan taariki",
+ "protectlogtext": "Ne ganda ti barmawey kaŋ tee moo jejebuyan ga.\nGuna [[Special:ProtectedPages|moo jejebante maašeede]] ka dii moo jejebu dabarey kaŋyaŋ ga dira sohõda.",
+ "protectedarticle": "jejebante \"[[$1]]\"",
+ "modifiedarticleprotection": "na jejebu alkadar barmay \"[[$1]]\" se",
+ "unprotectedarticle": "na jejebu kaa \"[[$1]]\" ga",
+ "movedarticleprotection": "na jejebeyan kayandiyaney kaa \"[[$2]]\" ga k'i dam \"[[$1]]\" do",
+ "protect-title": "Jejebu alkadar barmay \"$1\" se",
+ "protect-title-notallowed": "Jejebu alkadar guna \"$1\" se",
+ "prot_1movedto2": "[[$1]] gana [[$2]] do",
+ "protect-badnamespace-title": "Maafarru ši-jejebante",
+ "protect-badnamespace-text": "Moɲey kaŋ goo maafarroo woo ra ši hin ka jejebu.",
+ "protect-norestrictiontypes-text": "Moɲoo ši hin ka jejebu za saajaw dumey wey cine kul ši bara.",
+ "protect-norestrictiontypes-title": "Moo ši-jejebante",
+ "protect-legend": "Jejebuyan tabatandi",
+ "protectcomment": "Dalil:",
+ "protectexpiry": "Waatoo ga ben:",
+ "protect_expiry_invalid": "Benyan waati ga laybu.",
+ "protect_expiry_old": "Benyan waati n' ka bisa.",
+ "protect-unchain-permissions": "Jejebuyan suubari tontoniyaŋ feeri",
+ "protect-text": "Ne war ga hin ka dii jejebuyan alkadar wala k'a barmay moɲoo se <strong>$1</strong>.",
+ "protect-locked-blocked": "War ši hin ka jejebuyan alkadarey barmay nd'i n' ka hode.\nNe no sohõda kayandiyan goo <strong>$1</strong> moɲoo se:",
+ "protect-locked-dblock": "War ši hin ka jejebuyan alkadarey barmay za bayhaya kufal woo ga dira.\nNe no sohõda kayandiyan goo <strong>$1</strong> moɲoo se:",
+ "protect-locked-access": "War kontoo mana duɲe ka hin ka jejebuyan alkadarey barmay.\nNe no sohõda kayandiyan goo <strong>$1</strong> moɲoo se:",
+ "protect-cascadeon": "Moɲoo woo ga jejebandi sohõda zam'a ga kanandi ne {{PLURAL:$1|mo{{PLURAL:$1|moɲoo kaŋ goo nda|moɲey kaŋ goo nda}} jejebu kaŋante n' ka tunandi.\nBarmawey kaŋ tee moɲoo woo jejebuyan alkadaroo ga ši haya tee kaŋandi jejebu se. \\",
+ "protect-default": "Goykey kul noo fondo",
+ "protect-fallback": "Goykey kaŋ goo nda \"$1\" duɲeyan hinne noo fondo",
+ "protect-level-autoconfirmed": "Goykey kaŋ boŋ-tabatandi hinne noo fondo",
+ "protect-level-sysop": "Juwalkey hinne noo fondo",
+ "protect-summary-desc": "[$1=$2] ($3)",
+ "protect-summary-cascade": "kaŋandiyan",
+ "protect-expiring": "waati ga ben $1 (UTC) ga",
+ "protect-expiring-local": "waati ga ben $1 ga",
+ "protect-expiry-indefinite": "ši nda adadu",
+ "protect-cascade": "Moɲey kaŋ kanandi moɲoo woo ra jejebu (kaŋandiyan jejebu)",
+ "protect-cantedit": "War ši hin ka jejebuyan alkadarey barmay moɲoo woo se zama war mana duɲe k'a barmay.",
+ "protect-othertime": "Waati tana:",
+ "protect-othertime-op": "waati tana",
+ "protect-existing-expiry": "Benyan waati barante: $3, $2",
+ "protect-existing-expiry-infinity": "Benyan waati barante: ši nda adadu",
+ "protect-otherreason": "Dalil tana/tontoni:",
+ "protect-otherreason-op": "Dalil tana",
+ "protect-dropdown": "*Common protection reasons\n** Excessive vandalism\n** Excessive spamming\n** Counter-productive edit warring\n** High traffic page",
+ "protect-edit-reasonlist": "Jejebuyan daliley fasal",
+ "protect-expiry-options": "guuru 1:1 hour,zaari 1:1 day,jirbiyye 1:1 week,jirbiyye 2:2 weeks,handu 1:1 month, handu 3:3 months, handu 6:6 months,jiiri 1:1 year,ši nda adadu:infinite",
+ "restriction-type": "Duɲeyan:",
+ "restriction-level": "Huruyan-šenday alkadar:",
+ "minimum-size": "Azzaati kul ikacca",
+ "maximum-size": "Azzaati kul ibeeri",
+ "pagesize": "(cebsi hinna)",
+ "restriction-edit": "Fasal",
+ "restriction-move": "Ganandi",
+ "restriction-create": "Tee",
+ "restriction-upload": "Zijandi",
+ "restriction-level-sysop": "jejebu timmante",
+ "restriction-level-autoconfirmed": "jejebu jere",
+ "restriction-level-all": "alkadar kul",
+ "undelete": "Moo tuusantey guna",
+ "undeletepage": "Moo tuusantey guna k'i yeeti",
+ "undeletepagetitle": "<strong>Ne no filla tuusantey goo [[:$1|$1]]</strong> se.",
+ "viewdeletedpage": "Moo tuusantey guna",
+ "undeletepagetext": "{{PLURAL:$1|Moɲoo woo tuusandi amm'a| Moo $1 woo tuusandi amm'i}} cindi jišidogoo ra nd'a ga hin ka yeeti.\nWaati foo-foo kul jišidogoo ga hin ka koonandi.",
+ "undelete-fieldset-title": "Fillawey yeeti",
+ "undeleteextrahelp": "Moɲoo taariki timmantaa yeeti, maasa batawey kul kaŋ taŋandi naŋ nda <strong><em>{{int:undeletebtn}}</em></strong> naagu.\nKa yeetiyan suubanaa tee, batawey kaŋ ka tenji nda fillawey kaŋ ga hima ka yeeti, nda šilbay <strong><em>{{int:undeletebtn}}</em></strong> naagu.",
+ "undeleterevisions": "{{PLURAL:$1|Filla}} $1 jisandi",
+ "undeletehistory": "Nda war na moɲoo yeeti, fillawey kul ga yeeti taarikoo ga.\nNda moo taaga n' ka tee maa folloka tuusayanoo band'a ga, filla willantey ga bangay taariki bisantaa ra. \\",
+ "undeleterevdel": "Tuusuyan naŋyan ga tee nd'a ga too beene moɲoo wala tuku filla jerooo ma tuusandi.\nMisey wey ra, war ga hin ka filla kokorantaa naŋ wal'a tugu.",
+ "undeletehistorynoadmin": "Moɲpp wpp n' ka tuusandi.\nTuusuyan daliloo ga cebandi ne ganda duurandoo ra, nda šilbayhaya da goykey se kaŋyaŋ na moɲoo woo fasal tuusuyan se jine.\nFilla tuusantey hantumoo hunday se ga bara juwalkey hinne se.",
+ "undelete-revision": "Filla tuusante $1 se (za $4, $5 waate) kaŋ $3 n'a tee:",
+ "undeleterevision-missing": "Filla laala wala kumante.\nWar ga hima ka bara nda dobu laala, wal'a ga tee fillaa n' ka yeeti wal'a ganandi ka hun jišidogoo ra.",
+ "undelete-nodiff": "Filla bisante kul mana duwandi.",
+ "undeletebtn": "Yeeti",
+ "undeletelink": "guna/yeeti",
+ "undeleteviewlink": "guna",
+ "undeleteinvert": "Suubaroo bere",
+ "undeletecomment": "Dalil:",
+ "undeletedrevisions": "{{PLURAL:$1|Filla $1}} n' ka yeeti",
+ "undeletedrevisions-files": "{{PLURAL:$1|Filla $1}} nda {{PLURAL:$2|tuku $2}} n' ka yeeti",
+ "undeletedfiles": "{{PLURAL:$1|Tuku $1}} n' ka yeeti",
+ "cannotundelete": "Tuusuyan naŋ kaŋ:\n$1",
+ "undeletedpage": "<strong>$1 n' ka yeeti</strong>\n\nGuna [[Special:Taariki/tuusu|tuusuyan taariki]] ka dii tuusuyan korawey nda yeetiyaney kaŋ jisandi.",
+ "undelete-header": "Guna [[Special:Taariki/tuusu|tuusuyan taarikoo]] moɲey kaŋ kokor ka tuusandi se.",
+ "undelete-search-title": "Moo tuusantey ceeci",
+ "undelete-search-box": "Moo tuusantey ceeci",
+ "undelete-search-prefix": "Cebe moɲey kaŋ ga šintin nda:",
+ "undelete-search-submit": "Ceeci",
+ "undelete-no-results": "Moo tenjante kul ši duwandi tuusuyan jišidogoo ra.",
+ "undelete-filename-mismatch": "Ši hin ka tuku filla naŋ nda hantumtanpoŋ $1: Tukumaa ši tenji.",
+ "undelete-bad-store-key": "Ši hin ka tuku filla tuusuyan nda waatitanpoŋ $1 naŋ: Tuku n' ma kuma tuusuyan se jine. \\",
+ "undelete-cleanup-error": "Jišidoo kaŋ-ši-dira tuku tuusuyan firka \"$1\".",
+ "undelete-missing-filearchive": "Ši hin ka tuku jšidoo $1 tammaasa yeeti zam'a ši bayhayahugoo ra.\nA ga tee nga tuusuyanoo hun ka ben.",
+ "undelete-error": "Moo tuusu naŋyan firka",
+ "undelete-error-short": "Moo tuusu naŋyan tuku: $1",
+ "undelete-error-long": "Firkayaŋ bangay waati kaŋ tuku tuusuyan hun.\n\n$1",
+ "undelete-show-file-confirm": "Alhakiika war ga boona ka dii filla tuusantaa \"<nowiki>$1</nowiki>\" tukoo se $2 hane $3 waate?",
+ "undelete-show-file-submit": "Ayyo",
+ "undelete-revision-row": "$1 $2 ($3) $4 . . $5 $6 $7 $8 $9",
+ "namespace": "Maafarru:",
+ "invert": "Suubaroo bere",
+ "tooltip-invert": "Bataa woo guna ka barmawey tugu kaŋ tee moɲey ga maafarru suubantaa game (nda maafarru kondantaa nd'a šilbandi)",
+ "namespace_association": "Maafarru šilbante",
+ "tooltip-namespace_association": "Bataa woo guna ka deedaa da dam wala maafarru kondantaa kaŋ goo maafarru suubantaa bande \\",
+ "blanknamespace": "(Boŋ)",
+ "contributions": "{{GENDER:$1|Goykaw}} kanbuzaamawey",
+ "contributions-title": "Goykaw kanbuzaamawey $1 se",
+ "mycontris": "Kanbuzaamawey",
+ "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)",
+ "month": "Za handu (wal'a se jine):",
+ "year": "Za jiiri (wal'a se jine):",
+ "sp-contributions-newbies": "Kanbuzaamawey cebe kontu taagey hinne se",
+ "sp-contributions-newbies-sub": "Kontu taagey se",
+ "sp-contributions-newbies-title": "Goykaw kanbuzaamawey kontu taagey se",
+ "sp-contributions-blocklog": "margari taariki",
+ "sp-contributions-suppresslog": "goykaw kanbuzaamay munantey",
+ "sp-contributions-deleted": "goykaw kanbuzaamay tuusantey",
+ "sp-contributions-uploads": "zijandey",
+ "sp-contributions-logs": "taarikey",
+ "sp-contributions-talk": "deede",
+ "sp-contributions-userrights": "goykaw alhakey juwalyan",
+ "sp-contributions-blocked-notice": "Goykaa woo n' ka hodandi sohõda.\nMarga taariki hantum kokorantaa noondi ne ganda daaraa cire:",
+ "sp-contributions-blocked-notice-anon": "IP aderesoo woo n' ka hodandi sohõda.\nMarga taariki hantum kokorantaa noondi ne ganda daaraa cire:",
+ "sp-contributions-search": "Kanbuzaamawey ceeci",
+ "sp-contributions-username": "IP aderesu wala goykawmaa:",
+ "sp-contributions-toponly": "Barmawey hinne cebe kaŋ ti filla kokorantey",
+ "sp-contributions-newonly": "Barmawey hinne cebe kaŋ ti moo teeyaŋ",
+ "sp-contributions-submit": "Ceeci",
+ "whatlinkshere": "Kaŋ ga dobu ne",
+ "whatlinkshere-title": "Moɲey kaŋ ga dobu \"$1\" ga",
+ "whatlinkshere-page": "Moo:",
+ "linkshere": "Moɲey wey ga dobu <strong>[[:$1]]</strong> ga:",
+ "nolinkshere": "Mooyaŋ kul ši dobu <strong>[[:$1]]</strong> ga.",
+ "nolinkshere-ns": "Mooyaŋ kul ši dobu <strong>[[:$1]]</strong> ga maafarru suubantaa ra.",
+ "isredirect": "moo kuubi",
+ "istemplate": "kanandiyan",
+ "isimage": "tuku dobu",
+ "whatlinkshere-prev": "{{PLURAL:$1|bisante $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|jine $1}}",
+ "whatlinkshere-links": "← dobey",
+ "whatlinkshere-hideredirs": "kuubiri $1",
+ "whatlinkshere-hidetrans": "kanandiyan $1",
+ "whatlinkshere-hidelinks": "dobu $1",
+ "whatlinkshere-hideimages": "tuku dobu $1",
+ "whatlinkshere-filters": "Fayjinawey",
+ "autoblockid": "Boŋhodeyan #$1",
+ "block": "Hode goykaw",
+ "unblock": "Hodeyan-naŋ goykaw",
+ "blockip": "Hode {{GENDER:$1|goykaw}}",
+ "blockip-legend": "Hode goykaw",
+ "blockiptext": "Takadda goy ka hantum huruyan hode ka hun IP aderesu wala goykawmaa tabatante ga.\nWoo ga hima ka tee de ka hawandi-hasaraw ganji, woo goo [[{{MediaWiki:Policy-url}}|laada]] bande.\n Dalil tabatante noo ganda (sanda, moo tanayaŋ cee kaŋyaŋ hasaraw tee i ga).",
+ "ipaddressorusername": "IP aderesu wala goykawmaa",
+ "ipbexpiry": "Benyan:",
+ "ipbreason": "Dalil:",
+ "ipbreason-dropdown": "*Common block reasons\n** Inserting false information\n** Removing content from pages\n** Spamming links to external sites\n** Inserting nonsense/gibberish into pages\n** Intimidating behavior/harassment\n** Abusing multiple accounts\n** Unacceptable username",
+ "ipb-hardblock": "Goykaw hurantey ganji i ma barmay tee IP aderesoo woo ga",
+ "ipbcreateaccount": "Kontu teeyan ganji",
+ "ipbemailban": "Goykaw ganji a ma bataga sanba",
+ "ipbenableautoblock": "IP aderesu koraa kaŋ goykaw woo n'a ka goy ma hode nga boŋše, nda IP aderesu hanganteyaŋ kul kaŋ g'i ceeci ka barmay",
+ "ipbsubmit": "Goykaa woo hode",
+ "ipbother": "Waati tana:",
+ "ipboptions": "guuru 2:2 hours,zaari 1:1 day,zaari 3:3 days,jirbiyye 1:1 week,jirbiyye 2:2 weeks,handu 1:1 month,handu 3:3 months,handu 6:6 months,jiiri 1:1 year,ši ben:infinite",
+ "ipbhidename": "Goykaw tugu barmawey nda maašeedawey se",
+ "ipbwatchuser": "Goykaa woo goykaa nda deede moɲey hawgay",
+ "ipb-disableusertalk": "Goykaa woo ganji a ma ngi hunday deede moo barmay waati kaŋ a ga hodandi",
+ "ipb-change-block": "Goykaa nda kayandiyaney wey hode koyne",
+ "ipb-confirm": "Hodeyan tabatandi",
+ "badipaddress": "IP aderesu laala",
+ "blockipsuccesssub": "Hodeyan tee ka boori",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] n' ka hodandi.<br />\n[[Special:BlockList|Hode maašeede]] guna ka hodeyaney koroši.",
+ "ipb-blockingself": "War ga baa ka war boŋ hode! Alhakiika war ga boona ka woo tee?",
+ "ipb-confirmhideuser": "War ga baa ka goykaw hode kaŋ se \"hide user\" tunandi. Woo ga goykaw maaɲoo tuusu maašeedawey nda taariki hantumey kul ra. Alhakiika war ga boona ka woo tee?",
+ "ipb-confirmaction": "Nd'alhakiika kaŋ war ga boona k'a tee, \"{{int:ipb-confirm}}\" faaroo guna ne ganda.",
+ "ipb-edit-dropdown": "Hode daliley fasal",
+ "ipb-unblock-addr": "Hodeyan-naŋ $1 se",
+ "ipb-unblock": "Goykawmaa wala IP aderesu hodeyan naŋ",
+ "ipb-blocklist": "Hodeyan barantey guna",
+ "ipb-blocklist-contribs": "Kanbuzaamawey {{GENDER:$1|$1}} se",
+ "unblockip": "Hodeyan naŋ goykaa se",
+ "unblockiptext": "Goy nda ganda takadda ka hantum huruyan yeeti IP aderesu wala goykawmaa kaŋ hodandi ka bisa.",
+ "ipusubmit": "Hodeyanoo woo kaa",
+ "unblocked": "Hodeyan hun [[User:$1|$1]] ga.",
+ "unblocked-range": "Hodeyan hun $1 ga.",
+ "unblocked-id": "Hodeyan $1 n' ka hun.",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] hodeyanoo hun.",
+ "blocklist": "Goykaw hodantey",
+ "ipblocklist": "Goykaw hodantey",
+ "ipblocklist-legend": "Dii goykaw hodantey",
+ "blocklist-userblocks": "Kontu hodeyaney tugu",
+ "blocklist-tempblocks": "Waati-duura hodeyaney tugu \\",
+ "blocklist-addressblocks": "IP hodeyan follokey tugu",
+ "blocklist-rangeblocks": "Ganda hodeyaney tugu",
+ "blocklist-timestamp": "Waatitanpoŋ",
+ "blocklist-target": "Toodoo",
+ "blocklist-expiry": "Waati ga ben",
+ "blocklist-by": "Hodeyan juwalkaw",
+ "blocklist-params": "Hodeyan kayandiyaney",
+ "blocklist-reason": "Dalil",
+ "ipblocklist-submit": "Ceeci",
+ "ipblocklist-localblock": "Nungu hodeyan",
+ "ipblocklist-otherblocks": "Other {{PLURAL:$1|Hodeyan}} tana",
+ "infiniteblock": "ši ben",
+ "expiringblock": "waatoo ga ben $1 hane $2 waate",
+ "anononlyblock": "ši-nda-maa hinne",
+ "noautoblockblock": "boŋhodeyan hun",
+ "createaccountblock": "kontu teeyan hun",
+ "emailblock": "bataga ši koy",
+ "blocklist-nousertalk": "šĩ hin ka nga boŋ deede moo fasal",
+ "ipblocklist-empty": "Hodeyan maašeedaa ga koonu.",
+ "ipblocklist-no-results": "IP aderesoo wala gokawmaaɲoo wirantaa mana hodandi. \\",
+ "blocklink": "hode",
+ "unblocklink": "hodeyan naŋ",
+ "change-blocklink": "hodeyan barmay",
+ "contribslink": "kanbuzaamawey",
+ "emaillink": "bataga sanba",
+ "autoblocker": "Boŋhode zama war IP aderesoo n' ka kokor ka goyandi nda \"[[User:$1|$1]]\".\nDaliloo kaŋ noondi \"[[User:$1|$1]]\" hodeyanoo se ti \"$2\".\n\\",
+ "blocklogpage": "Hodeyan taariki",
+ "blocklog-showlog": "Goykaa woo n' ka bay ka hodandi.\nHodeyan taarikoo n' ka noondi ganda daaraa se:",
+ "blocklog-showsuppresslog": "Goykaw n' ka hodandi nda tuugandi ka bisa.\nTuuyan taariki ši noondi ne ganda daaraa se:",
+ "blocklogentry": "na [[$1]] hode nda benyan waati $2 $3 se",
+ "reblock-logentry": "na hode kayandiyaney barmay [[$1]] se nda $2 $3 benyan waati",
+ "blocklogtext": "Woo ti taariki goykaw hodeyan nda hode-naŋyan teerey se.\nNa IP aderesey hode mana hantumandi ngi boŋše.\nDii [[Special:BlockList|block list]] maašeedaa kaŋ tee sohõda goyyan barreyan nda hodeyaney se.",
+ "unblocklogentry": "$1 hodeyan naŋandi",
+ "block-log-flags-anononly": "goykey bila nda maa hinne",
+ "block-log-flags-nocreate": "kontu teeyan kay",
+ "block-log-flags-noautoblock": "boŋhodeyan kay",
+ "block-log-flags-noemail": "bataga kay",
+ "block-log-flags-nousertalk": "š hin ka boŋ deede moo fasal",
+ "block-log-flags-angry-autoblock": "boŋhodeyan bešere n' ka tunandi",
+ "block-log-flags-hiddenname": "goykaw tugante",
+ "range_block_disabled": "Juwalkaa hinoo ka hodeyan gandaa tee n' ka kay.",
+ "ipb_expiry_invalid": "Benyan waati laala.",
+ "ipb_expiry_temp": "Goykawmaa hodeyan tugante ga hima ka duumi.",
+ "ipb_hide_invalid": "Ši hin ka kontoo woo kaa; a goo nda {{PLURAL:$1|barmay $1}} nda bešere.",
+ "ipb_already_blocked": "\"$1\" n' ka hode ka ben.",
+ "ipb-needreblock": "$1 n' ka hode ka ben. War ga boona ka kayandiyaney barmay?",
+ "ipb-otherblocks-header": "{PLURAL:$1|Hode}} tana",
+ "unblock-hideuser": "War ši hin ka goykaa woo hodeyan naŋ, za ngi goykawmaaɲoo n' ka tugandi.",
+ "ipb_cant_unblock": "Firka: Hodeyan tammaasa $1 mana duwandi. Nga hodeyan ga hima ka hun ka ben. \\",
+ "ipb_blocked_as_range": "Firka: IP aderesu $1 ši šerre ka hode nda nga hodeyanoo ši hin ka hun.\nAmma a n' ka hodandi ka tee $2 ganda, affoo kaŋ hodeyanoo ši hin ka hun.",
+ "ip_range_invalid": "IP ganda laala.",
+ "ip_range_toolarge": "Ganda hodeyaney kaŋ ga beeri ka bisa /$1 ši duɲandi.",
+ "proxyblocker": "Tokore hodekaw",
+ "proxyblockreason": "War IP aderesoo n' ka hode zam'a ši nda tokore feeranta.\nHantum war kondaa interneti nookey wala faaba goykey se ka saajaw mise šendaa woo alhabaroo toonandi i do.",
+ "sorbs": "DNSBL",
+ "sorbsreason": "War IP aderesoo ga hantumandi ka tee sanda tokore feeranta DNSBL ra kaŋ {{SITENAME}} g'a ka koy.",
+ "sorbs_create_account_reason": "War IP aderesoo ga hantumadi ka tee sanda tokore feeranta DNSBL ra kaŋ {{SITENAME}} g'a ka goy.\nWar ši hin ka kontu tee.",
+ "xffblockreason": "IP aderesu kaŋ ga bara bondeke šikkante ra, a ga tee war wanoo wala tokore feršikaw foo kaŋ nda war ga goy wane, n' ka hode. Ašsil hodeyan daliloo bay ka tee: $1",
+ "cant-see-hidden-user": "Goykaa kaŋ war ga ceeci k'a hode n' ka hodandi nda tugandi ka ben.\nKaŋ war ši nda tugu-goykaw fondo, war ši hin dii goykaw hodeyanoo wal'a fasal.",
+ "ipbblocked": "War ši hin ka goykaw taney hode wal'i naŋ zama war hunday n' ka hodandi.",
+ "ipbnounblockself": "War ši nda fondo ka boŋ hodeyanoo kaa.",
+ "lockdb": "Bayhayahugu kufal",
+ "unlockdb": "Bayhayahugu kufal-feeri",
+ "lockdbtext": "Bayhayahugu kufalyan ka goykey kul ganji i ma hin ka moɲey fasal, ngey ibaayey barmay, hawgayhayey fasal, wala haya tanayaŋ kaŋ ga baa barmay bayhayahugoo ra.\nTabatandi taare kaŋ woo no war ga anniya k'a tee, nda kaŋ war ga bayhayahugu kufal feeri waati kaŋ war alhaadimaa ben.",
+ "unlockdbtext": "Bayhayahugu kufal-feeriyan ka too koyne kaŋ goykey kul ma hin ka moɲey fasal, ngey ibaayey barmay, hawgayhayey fasal, wala haya tanayaŋ kaŋ ga baa barmay bayhayahugoo ra.\nTabatandi taare kaŋ woo no war ga anniya k'a tee.",
+ "lockconfirm": "Ayyo, alhakiika ay ga baa ya bayhayhugoo kufal.",
+ "unlockconfirm": "Ayyo, alhakiika ay baa ya bayhayahugoo feeri.",
+ "lockbtn": "Bayhayhugu kufal",
+ "unlockbtn": "Bayhaya hugu feeri",
+ "locknoconfirm": "War mana tabatandiyan bataa maasa.",
+ "lockdbsuccesssub": "Bayhayahugu kufalyan tee ka boori",
+ "unlockdbsuccesssub": "Bayhayahugu kufaloo hun",
+ "lockdbsuccesstext": "Bayhayahugoo n' ka kufan.<br />\nHonga ka [[Special:UnlockDB|kufaloo ka]] nda war alhaadimaa timme.",
+ "unlockdbsuccesstext": "Bayhayahugu kufaloo n' ka feera.",
+ "lockfilenotwritable": "Bayhayahugu kufal tukoo ši tuusandi.\nKa bayhayhugoo kufal wala k'a feeri, a ga hima ka tee woo affoo kaŋ interneti feršikaw ka hin k'a tuusu. \\",
+ "databasenotlocked": "Bayhayahugoo mana kufal.",
+ "lockedbyandtime": "({{GENDER:$1|$1}} n'a tee $2 hane $3 waate)",
+ "move-page": "$1 ganandi",
+ "move-page-legend": "Moɲoo ganandi",
+ "movepagetext": "Ne ganda takaddaa goyyanoo ga moɲoo maaɲoo barmay, ka nga taarikoo kul ganandi maa taagaa here.\nMaa žeenaa ka tee kuubiyan moo maa taagaa se.\nWar ga hin ka kuubiyaney taagandi k'i sinji aššil maaɲoo ga ngi boŋše.\nNda war ši woo tee nd'anniya, wa [[Special:DoubleRedirects|kuubiyan fillantey]] wala [[Special:BrokenRedirects|ikayrantey]] koroši boryo.\nWar allamaanaa woo kaŋ dobey ma gaabandi alhakiika ra ka sinja nungey kaŋ i ga hima ga koy ga.\n\nLaasaabu kaŋ moɲoo <strong>ši</strong> ganandi nda moo foo ga bara maa taagaa cire ka ben, nda manti ikoraa ti kuubiyan nd'a ši nda fasal taariki bisante,\n\n<strong>Yaamar!</strong>\nWoo ga hin ka ti barmay gaabante kaŋ boro ši a tammahãa moo maakoyni se;\n w'alhakiika war ga faham misoo benantaa se jina nda war ga koy jine.",
+ "movepagetext-noredirectfixer": "\n<strong>Yaamar!</strong>\nWoo ga hin ka ti barmay šenda kaŋ boro si a tammahã moo maakoyni se;\nwar m'alhakiika kaŋ war ga faham misoo benantaa jina nda war baa ka goy jine.",
+ "movepagetalktext": "Deede moo kondantaa ši ma ganandi nga boŋše jinehere <strong> nda manti:</strong>\n*Deede moo kaŋ ši koonu ga bara ka ben moo taagaa cire, wala\n*War na maasaa ka ne ganda bataa ga.\n\nMise taney din ra, war ga hima ka moɲoo ganandi wal'a margandi war boŋše nda war ga baa.",
+ "movearticle": "Moɲoo ganandi:",
+ "moveuserpage-warning": "<strong>Yaamar:</strong> War ga baa ka goykaw moo foo ganandi. Laasaabu kaŋ moɲoo hinne ma ganandi nda kaŋ goykaa <em> ši </em> maa taaga zaa.",
+ "movecategorypage-warning": "<strong>Yaamar:</strong> War ga baa ka dumi moo foo ganandi. Laasaabu kaŋ moɲoo ga ganandi nda mooyaŋ kul kaŋ ga bara dumi žeenaa ra <em>ši</em> huru dumi taagaa woo ra.",
+ "movenologintext": "War mma hima ka tee goykaw hantumante nda [[Special:UserLogin|hurante]] ka moɲoo ganandi.",
+ "movenotallowed": "War ši nda duɲeyan kul ka moɲey ganandi.",
+ "movenotallowedfile": "War ši nda duɲeyan kul ka tukey ganandi.",
+ "cant-move-user-page": "War ši nda duɲeyan kul ka goykaw moɲey ganandi (nda manti moo-izey).",
+ "cant-move-to-user-page": "War ši nda duŋeyan kul ka moo foo ganandi goykaw moo here (nda manti goykaw moo-izey).",
+ "cant-move-category-page": "War ši nda duɲeyan kul ka dumi moɲey ganandi.",
+ "cant-move-to-category-page": "War ši nda duɲeyan kul ka moo foo ganandi dumi moo here.",
+ "newtitle": "Maa taaga here:",
+ "move-watch": "Aššil moo nda toodoo moo hawgay \\",
+ "movepagebtn": "Moɲoo ganandi",
+ "pagemovedsub": "Ganandiroo tee ka boori",
+ "movepage-moved": "<strong>\"$1\" n' ka ganandi \"$2\"</strong> here",
+ "movepage-moved-redirect": "Kuubiyan foo n' ka tee.",
+ "movepage-moved-noredirect": "Kuubiyan foo teeroo n' ka tuusandi.",
+ "articleexists": "Moo foo ga bara nda maaɲoo woo ka ben, wala maaɲɲoo kaŋ war n'a suuba ši boori.\nMaa taaga suuba taare.",
+ "cantmove-titleprotected": "War ši hin ka moɲoo ganandi gorodogoo woo ra zama maa taaga ga jejebe teeyan ga",
+ "movetalk": "Deede moo kondante ganandi",
+ "move-subpages": "Moo-izey ganandi (hala $1)",
+ "move-talk-subpages": "Deede moɲoo moo-izey ganandi (hala $1)",
+ "movepage-page-exists": "$1 moo ga bara ka ben nd'a ši hin ka tuusandi nga boŋše.",
+ "movepage-page-moved": "$1 moɲoo n' ka ganandi $2 do.",
+ "movepage-page-unmoved": "$1 moɲoo mana hin ka ganandi $2 do.",
+ "movepage-max-pages": "{{PLURAL:$1|Moo}} $1 ti fellaa kaŋ ganandi nda ši ganandi koyne nga boŋše.",
+ "movelogpage": "Ceebandu taariki ganandi",
+ "movelogpagetext": "Ne ganda ti maašeede moo ganarey kul se.",
+ "movesubpage": "{{PLURAL:$1|Moo-ize|Moo-izey}}",
+ "movesubpagetext": "Moɲoo goo nda {{PLURAL:$1|moo-ize}} $1 kaŋ cebandi ne ganda.",
+ "movenosubpage": "Moɲoo woo ši nda moo-izeyaŋ.",
+ "movereason": "Dalil:",
+ "revertmove": "yeeti",
+ "delete_and_move": "Tuusu nda ganandi",
+ "delete_and_move_text": "== Tuusuyan tuusante ==\nToodoo moo \"[[:$1]]\" ga bara ka ben.\nWar ga boona k'a tuusu ka fondaa naŋ ganaroo se?",
+ "delete_and_move_confirm": "Ayyo, moɲoo tuusu",
+ "delete_and_move_reason": "A tuusandi ka fondaa naŋ ganaroo se ka hun \"[[$1]]\" ga",
+ "selfmove": "Aššil nda toodoo maaɲey ti affollokaa;\nmoo ši hin ka ganandi nga boŋ here.",
+ "immobile-source-namespace": "Ši hin ka moɲey ganandi \"$1\" maafarroo ra.",
+ "immobile-target-namespace": "Ši hin ka moɲey ganandi ka huru \"$1\" maafarroo ra",
+ "immobile-target-namespace-iw": "Interwiki dobu manti toodoo boryo moo ganandiroo se.",
+ "immobile-source-page": "Moɲoo woo ši gananndi.",
+ "immobile-target-page": "Ši hin ka ganandi toodoo maaɲoo din do.",
+ "bad-target-model": "Toodoo boonantaa ga goy nda gundekuna dumi kaŋ ga waani. Ši hin ka $1 bere k'a tee $2. \\",
+ "imagenocrossnamespace": "Ši hin ka tuku ganandi manti-tuku maafarru do",
+ "nonfile-cannot-move-to-file": "Ši hin ka manti-tuku ganandi tuku maafaaru do",
+ "imagetypemismatch": "Tuku dobu taagaa ši tenji nda nga dumoo",
+ "imageinvalidfilename": "Toodoo tukumaaɲoo ga laala",
+ "fix-double-redirects": "Kuubiyan kul taagandi noodin ga ka willi aššil maaɲoo ga",
+ "move-leave-redirect": "Kuubiyan naŋ banda",
+ "protectedpagemovewarning": "<strong>Yaamar:</strong> Moɲoo woo n' ka jejebandi hala goykey kaŋ goo nda juwalkaw alhakey hinne ma hin k'a ganandi.\nCeebandu taariki hantum kokorantaa noondi ganda fella se:",
+ "semiprotectedpagemovewarning": "<strong>Laasaabu:</strong> Moɲoo woo n' ka jejebandi hala goykaw hantumantey hinne ma hin k'a ganandi.\nCeebandu taariki hantum kokorantaa noondi ganda fella se:",
+ "move-over-sharedrepo": "== File exists ==\n[[:$1]] ga bara jišidoo žemnante ga. Ka tuku ganandi maaɲoo woo do ka tuku žemnantaa tuusu.",
+ "file-exists-sharedrepo": "Tukumaa suubantaa ga bara goy ra ka ben jišidoo zemnante ga.\nTaare maa taaga suuba.",
+ "export": "Moɲey fattandi",
+ "exporttext": "War ga hin ka hantumoo fattandi nda taariki fasalyan moo tabatantaa se wala moo margariyaŋ kaŋ hawa XML ra.\nWoo ka hin ka bere wiki tana ra kaŋ ga goy nda MediaWiki ka bisa nda [[Special:Import|bereyan moo]].\n\\",
+ "exportall": "Moɲey kul fattandi",
+ "exportcuronly": "Sohõda fillaa hinne dam, manti taariki timmantaa",
+ "exportnohistory": "----\n<strong>Laasaabu:</strong> Moɲey taariki timmantaa fattandiyan takaddaa woo ra n' ka kay goyyan sahã dalilyaŋ se.",
+ "exportlistauthors": "Kanbuzaakaw maašeede timmante dam moo foo kul se",
+ "export-submit": "Fattandi",
+ "export-addcattext": "Moɲey tonton ka hun dumi ga:",
+ "export-addcat": "Tonton",
+ "export-addnstext": "Moɲey tonton ka hun maafarru ga:",
+ "export-addns": "Tonton",
+ "export-download": "Gaabu sanda tuku",
+ "export-templates": "Leetey dam",
+ "export-pagelinks": "Moo dobantey dam guusuyan fo ga:",
+ "allmessages": "Dabariɲaa alhabarey",
+ "allmessagesname": "Maa",
+ "allmessagesdefault": "Tilasu alhabar hantum",
+ "allmessagescurrent": "Sohõda alhabar hantum",
+ "allmessagestext": "Woo ti dabariɲaa alhabar maašeede kaŋ ga bara MediaWiki maafarroo ra.\nGuna [https://www.mediawiki.org/wiki/Special:MyLanguage/MediaWiki šenni berandiyan] nda [//translatewiki.net translatewiki.net] nda war ga boona ka kanbuzaamay tee MediaWiki dumi-kul berandiyan se.",
+ "allmessagesnotsupportedDB": "Moɲoo woo ši hin ka goyandi zama <strong>$wgUseDatabaseMessages</strong> n' ka kayandi.",
+ "allmessages-filter-legend": "Fayhaya",
+ "allmessages-filter": "Fay boŋhanseyan alhaali bande:",
+ "allmessages-filter-unmodified": "Mana barmay",
+ "allmessages-filter-all": "Kul",
+ "allmessages-filter-modified": "Barmante",
+ "allmessages-prefix": "Fay jinkanji bande:",
+ "allmessages-language": "Šenni:",
+ "allmessages-filter-submit": "Koy",
+ "allmessages-filter-translate": "Berandi",
+ "thumbnail-more": "Hayandi",
+ "filemissing": "Tuku ga kuma",
+ "thumbnail_error": "Firka kanbeboy-bii teeyan ra: $1",
+ "thumbnail_error_remote": "Firka alhabar ka hun $1 do:\n$2",
+ "djvu_page_error": "DjVu moo ga mooru",
+ "djvu_no_xml": "Ši hin ka XML kurma DjVu tuku se",
+ "thumbnail-temp-create": "Ši hin ka waati-duura kanbeboy-bii tuku tee",
+ "thumbnail-dest-create": "Ši hin ka kanbeboy-bii gaabu toodogoo ga",
+ "thumbnail_invalid_params": "Kanbeboy-bii kayandiyan laalayaŋ",
+ "thumbnail_dest_directory": "Ši hin ka toodoo fooloɲaa tee",
+ "thumbnail_image-type": "Bii dumi ši nda gaakašinay",
+ "thumbnail_gd-library": "GD tiirahugu hanseyan mana timme; Goymee $1 ga kuma",
+ "thumbnail_image-missing": "Sanda tuku mma kuma: $1",
+ "thumbnail_image-failure-limit": "Waati korawey ra ceeciyan booboyaŋ (cee $1 wala kaŋ ga bis'a) mana hin ka kanbeboy-biyoo woo willi. Ceeci koyni nd'a too kayna.",
+ "import": "Moɲey dam",
+ "importinterwiki": "Transwiki dam",
+ "import-interwiki-text": "Wiki wala moo maa suuba k'a dam.\nFilla haney nda fasalkey maaɲey ga gaabundi.\nTranswiki damyan teerey kul ga hantumandi [[Special:Log/import|damyan taariki]] ra.",
+ "import-interwiki-sourcewiki": "Aššil wiki:",
+ "import-interwiki-sourcepage": "Aššil moo:",
+ "import-interwiki-history": "Taariki fillawey kul bere moɲoo woo se",
+ "import-interwiki-templates": "Leetey kul dam",
+ "import-interwiki-submit": "Dam",
+ "import-interwiki-namespace": "Toodoo maafarru:",
+ "import-interwiki-rootpage": "Toodoo linji moo (suuba-haya):",
+ "import-upload-filename": "Tukumaa:",
+ "import-comment": "Daara:",
+ "importtext": "Tukoo fattandi ka hum aššil wiki ga nda [[Special:Export|fattandi goyjinaa]].\nA gaabu war ordinateroo ga nd'a zijandi ne.",
+ "importstart": "Goo ma moɲey dam…",
+ "import-revision-count": "{{PLURAL:$1|Filla}} $1",
+ "importnopages": "Moo kul ši damyan se.",
+ "imported-log-entries": "Na {{PLURAL:$1|taariki hantum}} $1 dam.",
+ "importfailed": "Damyan kay: <nowiki>$1</nowiki>",
+ "importunknownsource": "Damyan aššil dumi šibayante",
+ "importcantopen": "Mana hin ka tuku dam",
+ "importbadinterwiki": "Interwiki dobu laala",
+ "importsuccess": "Damyan ben!",
+ "importnosources": "Transwiki dam ašsil kulyaŋ mana tabatandi nda taariki zijandiyan šerrantey n' ka kay.",
+ "importnofile": "Damyan tuku kul mana zijandi. \\",
+ "importuploaderrorsize": "Dam tuku zijandiyanoo kay.\nTukoo ga beeri nda zijandi azzaati duɲantaa.",
+ "importuploaderrorpartial": "Dam tuku zijandiyanoo kay.\nTukoo jeroo hinne no ka zijandi.",
+ "importuploaderrortemp": "Dam tuku zijandiyanoo kay.\nWaati-duura foolo ga kuma.",
+ "import-parse-failure": "XML dam fesu-fesuyan kay",
+ "import-noarticle": "Moo kul ši damyan se!",
+ "import-nonewrevisions": "Fillayaŋ kul mana huru (za ikul ga bara ka ben, wal'i sarandi firka sabbu se).",
+ "xml-error-string": "$1 goo $2 žeeri ga, soofu $3 (cebsi $4): $5",
+ "import-upload": "XML bayhayey zijandi",
+ "import-token-mismatch": "Goywaati bayhayey dere.\nCeeci koyne taare.",
+ "import-invalid-interwiki": "Ši hin ka zaandi wiki tabatantaa ga.",
+ "import-error-edit": "\"$1\" moo mana huru zama war ši nda fondo k'a fasal.",
+ "import-error-create": "\"$1\" moo mana huru zama war ši nda fondo k'a tee.",
+ "import-error-interwiki": "\"$1\" moo mana huru zama nga maaɲoo n' ka lanbandi tarayhere dobuyan se (interwiki).",
+ "import-error-special": "\"$1\" moo mana huru zama maafarru cereerante kaŋ ši moɲey duɲe no m'a may.",
+ "import-error-invalid": "\"$1\" moo mana huru zama maaɲoo kaŋ g'a hima ka huru ši boori wikiyoo woo se.",
+ "import-error-unserialize": "$2 filla \"$1\" moo se mana hin ka hun tenjiri-kabu ra. Fillaa mana bayrandi ka goy nda gundekuna dumi $3 tenjiri sanda $4.",
+ "import-error-bad-location": "$2 filla kaŋ ga goy nda gundekuna dumi $3 ši hin ka jisandi \"$1\" wikiyoo woo ga, za dumoo din ši nda gaakašinay moɲoo din ga.",
+ "import-options-wrong": "{{PLURAL:$2|Suubari}} laala: <nowiki>$1</nowiki>",
+ "import-rootpage-invalid": "Linji moo noontaa ti maa laala.",
+ "import-rootpage-nosubpage": "$1 maafarroo kaŋ goo linji moo se ši moo-izeyaŋ duɲe. \\",
+ "importlogpage": "Taariki dam",
+ "importlogpagetext": "Juwalkaw ga moɲey dam nda fasalyan taariki ka hun wiki waaniyaŋ ga.",
+ "import-logentry-upload-detail": "{{PLURAL:$1|Filla}} $1 ka huru",
+ "import-logentry-interwiki-detail": "{{PLURAL:$1|Filla}} $1 huru ka hun $2 ga",
+ "javascripttest": "JavaScript šiiyan",
+ "javascripttest-pagetext-noframework": "Moɲoo woo n' ka lanbandi ka JavaScript šiiyaney tee.",
+ "javascripttest-pagetext-unknownframework": "Kungagoy \"$1\" šiiyan ši bayandi.",
+ "javascripttest-pagetext-frameworks": "Šiiyan kungagoy šiiyaney wey affoo suuba: $1",
+ "javascripttest-pagetext-skins": "Kuuru foo suuba ka šiiyaney tee nd'a:",
+ "javascripttest-qunit-intro": "Guna [$1 šiiyan fahamandi tiira] mediawiki.org ga.",
+ "tooltip-pt-userpage": "War goykaw moɲoo",
+ "tooltip-pt-anonuserpage": "Goykaw moo IP aderesoo kaŋ war goo m'a fasal sanda",
+ "tooltip-pt-mytalk": "War deede moɲoo",
+ "tooltip-pt-anontalk": "Kakaw fasaley ga kaŋ ga hun IP aderesoo woo do",
+ "tooltip-pt-preferences": "War ibaayey",
+ "tooltip-pt-watchlist": "Moɲey kaŋ war goo m'i hawgay barmayyan se \\",
+ "tooltip-pt-mycontris": "War kanbuzaamawey",
+ "tooltip-pt-login": "War ma soobay ka huru; amma woo ši waažibi",
+ "tooltip-pt-logout": "Fatta",
+ "tooltip-pt-createaccount": "Wa soobay ka kontu tee nda ka huru; amma woo ši waažibi ya.",
+ "tooltip-ca-talk": "Deede gundekuna moɲoo ga",
+ "tooltip-ca-edit": "War ga hin ka moɲoo woo fasal. Moofur butoŋoo naagu jina k'a gaabu",
+ "tooltip-ca-addsection": "Dunbu taaga šintin",
+ "tooltip-ca-viewsource": "Moɲoo woo ga jejebandi.\nWar hin ka dii ng'aššiloo",
+ "tooltip-ca-history": "Filla bisantey moɲoo woo se",
+ "tooltip-ca-protect": "Moɲoo woo jejebu",
+ "tooltip-ca-unprotect": "Jejebu barmay moɲoo woo se",
+ "tooltip-ca-delete": "Moɲoo woo tuusu",
+ "tooltip-ca-undelete": "Barmawey din yeeti kaŋ tee za moɲoo woo mana tuusandi",
+ "tooltip-ca-move": "Moɲoo woo ganandi",
+ "tooltip-ca-watch": "Moɲoo woo tonton war hawgayhayey ga",
+ "tooltip-ca-unwatch": "Moɲoo woo kaa war hawgayhayey ra",
+ "tooltip-search": "{{SITENAME}} ceeci",
+ "tooltip-search-go": "Koy moo do kaŋ goo nda maa follokaa da nd'a ga bara",
+ "tooltip-search-fulltext": "Moɲey ceeci hantumoo woo se",
+ "tooltip-p-logo": "Koy moo jinaa ga",
+ "tooltip-n-mainpage": "Koy moo jinaa ga",
+ "tooltip-n-mainpage-description": "Koy moo jinaa ga",
+ "tooltip-n-portal": "Porožewoo ga, woo kaŋ war ga hin k'a tee, hayey duu dogey",
+ "tooltip-n-currentevents": "Jine-alhabar caw sohõda teerey ga",
+ "tooltip-n-recentchanges": "Barmay korawey kaŋ tee wikiyoo ga",
+ "tooltip-n-randompage": "Alwaadu moo zijandi",
+ "tooltip-n-help": "Nungu ka ceeci",
+ "tooltip-t-whatlinkshere": "Wiki moɲey kul kaŋ ga dobu ne",
+ "tooltip-t-recentchangeslinked": "Barmay kokorantey moɲey ra kaŋ dobandi ka hun moɲoo woo ga \\",
+ "tooltip-feed-rss": "RSS toonandiyan moɲoo woo se",
+ "tooltip-feed-atom": "Atom toonandiyan moɲoo woo se",
+ "tooltip-t-contributions": "Kanbuzaamawey goykaa woo se",
+ "tooltip-t-emailuser": "Bataga sanba goykaa woo do",
+ "tooltip-t-info": "Duu alhabar ka tonton moɲoo woo ga",
+ "tooltip-t-upload": "Tukey zijandi",
+ "tooltip-t-specialpages": "Moo cerecerantey kul",
+ "tooltip-t-print": "Karyan dumi moɲoo woo se",
+ "tooltip-t-permalink": "Dobu duumante moɲoo fillaa se",
+ "tooltip-ca-nstab-main": "Gundekuna moɲoo guna",
+ "tooltip-ca-nstab-user": "Goykaw moɲoo guna",
+ "tooltip-ca-nstab-media": "Hẽenandi moɲoo guna",
+ "tooltip-ca-nstab-special": "Moo cerecerante ti woo, war ši hin ka moɲoo hunday fasal",
+ "tooltip-ca-nstab-project": "Poorože moɲoo guna",
+ "tooltip-ca-nstab-image": "Tuku moɲoo guna",
+ "tooltip-ca-nstab-mediawiki": "Dabariɲaa alhabaroo guna",
+ "tooltip-ca-nstab-template": "Leetoo guna",
+ "tooltip-ca-nstab-help": "Faaba moɲoo guna",
+ "tooltip-ca-nstab-category": "Dumi moɲoo guna",
+ "tooltip-minoredit": "Woo šilbay sanda barmay kaccu",
+ "tooltip-save": "Barmawey gaabu",
+ "tooltip-preview": "Moo fur war barmawey ga, woo tee jina de w'a gaabu! \\",
+ "tooltip-diff": "Barmawey kaŋ war n'i tee hantumoo ga cebe",
+ "tooltip-compareselectedversions": "Dii hayey kaŋ ga filla suubante hinkaa fay moɲoo woo se",
+ "tooltip-watch": "Moɲoo woo tonton war hawgayhayey ga",
+ "tooltip-watchlistedit-normal-submit": "Maaɲey kaa",
+ "tooltip-watchlistedit-raw-submit": "Hawgayhayey taagandi",
+ "tooltip-recreate": "Moɲoo tee taaga ba kaŋ an' ka tuusandi",
+ "tooltip-upload": "Zijandiyanoo šintin",
+ "tooltip-rollback": "Naaguyan foo nda \"Rollback\" ga fasal(ey) yeeti moɲoo woo ga kaŋ kanbuzaakaw koraa n'a tee",
+ "tooltip-undo": "\"Undo\" ga barmaa woo yeeti nd'a ga barmay takadda feeri moofuryan alhaali ra. A ga naŋ dalil foo ma tonton duurandoo ra.",
+ "tooltip-preferences-save": "Ibaayey gaabu",
+ "tooltip-summary": "Duurandi dunba dam",
+ "interlanguage-link-title": "$1 – $2",
+ "interlanguage-link-title-nonlang": "$1 – $2",
+ "common.css": "/* CSS kaŋ huru ne ka kanandi kuurey kul ga */",
+ "print.css": "/* CSS kaŋ huru ne kanboo ga too karyan fattari kul */",
+ "noscript.css": "/* CSS kaŋ huru ne kanboo ga too JavaScript goykey kul */",
+ "group-autoconfirmed.css": "/* CSS kaŋ huru ne kanboo ga too goykaw boŋtabatantey kul */",
+ "group-user.css": "/* CSS kaŋ huru ne kanboo ga too goykaw hantumantey kul */",
+ "group-bot.css": "/* CSS kaŋ huru ne kanboo ga too maršin-goykey kul */",
+ "group-sysop.css": "/* CSS kaŋ huru ne kanboo ga too sysops goykey kul */",
+ "group-bureaucrat.css": "/* CSS kaŋ huru ne kanboo ga too biro goykey kul */",
+ "common.js": "/* JavaScript kul kaŋ goo ne ga zumandi goykey kul se moo zumandiyan foo kul ga. */",
+ "group-autoconfirmed.js": "/* JavaScript kul kaŋ goo ne ga zumandi goykaw boŋtabatantey hinne se */",
+ "group-user.js": "/* JavaScript kul kaŋ goo ne ga zumandi goykaw hantumantey hinne se */",
+ "group-bot.js": "/* JavaScript kul kaŋ goo ne ga zumandi maršin-goykaw hinne se */",
+ "group-sysop.js": "/* JavaScript kul kaŋ goo ne ga zumandi sysops konda hinne se */",
+ "group-bureaucrat.js": "/* JavaScript kul kaŋ goo ne ga zumandi biro goykey hinne se */",
+ "anonymous": "{{PLURAL:$1|Goykaw}} maa-tugante(y) {{SITENAME}} se",
+ "siteuser": "{{SITENAME}} goykaw $1",
+ "anonuser": "{{SITENAME}} goykaw maatugante $1",
+ "lastmodifiedatby": "$3 ka kokor ka moɲoo woo barmay $2 waate, $1 hane.",
+ "othercontribs": "Ga hanga $1 goyoo bande.",
+ "others": "taney",
+ "siteusers": "{{SITENAME}} {{PLURAL:$2|goykaw|goykey}} $1",
+ "anonusers": "{{SITENAME}} {{PLURAL:$2|goykaw}} maa-tugante(y) $1",
+ "creditspage": "Moo alhakey",
+ "nocredits": "Alhaku alhabar kul ši bara moɲoo woo se.",
+ "spamprotectiontitle": "Žiiba bataga gaŋa",
+ "spamprotectiontext": "Hantumoo kaŋ war boona k'a gaabu, žiibi bataga gaŋaa k'a dii.\nMane daliloo ti dobu kaŋ ga fatta tarayhere interneti nungu barrante ga.",
+ "spamprotectionmatch": "Hantumoo woo no ka ir žiibi bataga gaŋa tunandi: $1",
+ "spambot_username": "MediaWiki žiiba bataga haabari",
+ "spam_reverting": "Ga yeeti dumi koraa boŋ kaŋ ši dobu $1 ga",
+ "spam_blanking": "Fillawey kul bara nda dobuyaŋ $1 ga, koonandiyan",
+ "spam_deleting": "Fillawey kul bara nda dobuyaŋ $1 ga, tuusuyan",
+ "simpleantispam-label": "Bataga žiiba korošiyan.\nMa <strong>ŠI</strong> woo toonandi!",
+ "pageinfo-title": "Alhabar \"$1\" se",
+ "pageinfo-not-current": "Alhaa naŋ, boro ši hin k'alhabaroo woo noo filla žeeney se.",
+ "pageinfo-header-basic": "Alhabar doona",
+ "pageinfo-header-edits": "Taariki fasal",
+ "pageinfo-header-restrictions": "Moo jejebuyan",
+ "pageinfo-header-properties": "Moo alhaaley",
+ "pageinfo-display-title": "Maa cebe",
+ "pageinfo-default-sort": "Tilasu fayyan kufal",
+ "pageinfo-length": "Moo kuuyan (cebsi hinna)",
+ "pageinfo-article-id": "Moo boŋtammaasa",
+ "pageinfo-language": "Moo gundekuna šenni",
+ "pageinfo-content-model": "Moo gundekuna dumi",
+ "pageinfo-robot-policy": "Marši-goykey šilbayyan",
+ "pageinfo-robot-index": "Duɲante",
+ "pageinfo-robot-noindex": "Manti duɲante",
+ "pageinfo-watchers": "Moo hawgaykey hinnaa",
+ "pageinfo-few-watchers": "Ši too {{PLURAL:$1|hawgaykaw}} $1",
+ "pageinfo-redirects-name": "Kuubiyan hinna moɲoo woo se",
+ "pageinfo-redirects-value": "$1",
+ "pageinfo-subpages-name": "Moo-ize hinnaa moɲoo woo se",
+ "pageinfo-subpages-value": "($2 {{PLURAL:$2|Kuubiyan}} $1 ($2; {{PLURAL:$3|manti-kuubiyan}} $3)",
+ "pageinfo-firstuser": "Moo teekaw",
+ "pageinfo-firsttime": "Moo teeyan hanoo",
+ "pageinfo-lastuser": "Fasalkaw kokorantaa",
+ "pageinfo-lasttime": "Barmay kokorantaa hanoo",
+ "pageinfo-edits": "Barmay hinnaa kul",
+ "pageinfo-authors": "Hantumkaw fayantey kul hinnaa",
+ "pageinfo-recent-edits": "Barmay korawey hinnaa ($1 kaŋ bisa ra)",
+ "pageinfo-recent-authors": "Hantumkaw fayante korawey hinnaa",
+ "pageinfo-magic-words": "Kayfi {{PLURAL:$1|kalima}} ($1)",
+ "pageinfo-hidden-categories": "{{PLURAL:$1|Dumi}} tugante ($1)",
+ "pageinfo-templates": "{{PLURAL:$1|Leeti}} kanante ($1)",
+ "pageinfo-transclusions": "{{PLURAL:$1|Moo}} kanante ($1) ga",
+ "pageinfo-toolboxlink": "Moo alhabar",
+ "pageinfo-redirectsto": "Kuubiyaney ne here",
+ "pageinfo-redirectsto-info": "alhabar",
+ "pageinfo-contentpage": "N' kabu sanda gundekuna moo",
+ "pageinfo-contentpage-yes": "Ayyo",
+ "pageinfo-protect-cascading": "Jejebey mma kaŋandi ka hun ne",
+ "pageinfo-protect-cascading-yes": "Ayyo",
+ "pageinfo-protect-cascading-from": "Jejebey mma kaŋandi ka hun",
+ "pageinfo-category-info": "Dumi alhabar",
+ "pageinfo-category-pages": "Moo hinna",
+ "pageinfo-category-subcats": "Dunmi-ize hinna",
+ "pageinfo-category-files": "Tuku hinna",
+ "markaspatrolleddiff": "Šilbay kaŋ a ga kurandi",
+ "markaspatrolledtext": "Moɲoo woo šilbay kaŋ a ga kurandi",
+ "markedaspatrolled": "Šilbandi sanda kurante no",
+ "markedaspatrolledtext": "Filla suubantaa [[:$1]] se n' ka šilbandi kaŋ a ga kurandi.",
+ "rcpatroldisabled": "Barmay korawey kuryanoo kay",
+ "rcpatroldisabledtext": "Barway korawey kuryan alhaaloo n' ka kay sohõda.",
+ "markedaspatrollederror": "Ši hin k'a šilbay kaŋ a ga kurandi",
+ "markedaspatrollederrortext": "War ga hima ka filla foo tabatandi k'a šilbay kaŋ a ga kurandi. \\",
+ "markedaspatrollederror-noautopatrol": "War ši nda fondo ka war boŋ barmawey šilbay kaŋ i ga kurandi.",
+ "markedaspatrollednotify": "Barmaa woo $1 ga n' ka šilbandi kaŋ a ga kurandi.",
+ "markedaspatrollederrornotify": "Goo ma šilbay kaŋ a ga kurandi.",
+ "patrol-log-page": "Kuryan taariki",
+ "patrol-log-header": "Woo ti filla kurantey taarikoo.",
+ "log-show-hide-patrol": "kuryan taariki $1",
+ "deletedrevision": "Filla žeena tuusante $1",
+ "filedeleteerror-short": "Tuku tuusuyan firka: $1",
+ "filedeleteerror-long": "Firkayaŋ bangay tukoo tuusuyanoo waate:\n\n$1",
+ "filedelete-missing": "\"$1\" tukoo ši hin ka tuusandi zam'a ši bara.",
+ "filedelete-old-unregistered": "Tuku filla tabatantaa \"$1\" ši bara bayhayahugoo ra.",
+ "filedelete-current-unregistered": "Tuku tabatantaa \"$1\" ši bara bayhayahugoo ra.",
+ "filedelete-archive-read-only": "Interneti feršikaa ši hin ka hantum \"$1\" jišidoo fooloɲaŋoo ga. \\",
+ "previousdiff": "← Barmay žeena",
+ "nextdiff": "Barmay taaga →",
+ "mediawarning": "<strong>Yaamar:</strong> Tuku woo goo nda hasaraw gundu hantum.\nNga tunandiroo ka hin ka war ordinateroo laybu.",
+ "imagemaxsize": "Ga bii azzaati hoo:<br /><em>(tuku šilbayyan moɲey se)</em>",
+ "thumbsize": "Kanbeboy-bii azzaati:",
+ "widthheight": "$1 × $2",
+ "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|page|pages}} $1 × $2, $3",
+ "file-info": "tuku azzaati: $1, MIME dumi: $2",
+ "file-info-size": "biitonbi $1 × $2 pixels, tuku azzaati: $3, MIME dumi: $4",
+ "file-info-size-pages": "biitonbi $1 × $2, tuku azzaati size: $3, MIME dumi: {{PLURAL:$5|moo}} $4, $5",
+ "file-nohires": "Biisahã ši bara kaŋ ga bis'a.",
+ "svg-long-desc": "SVG tuku, ka nee biitonbi $1 × $2, tuku azzaati: $3",
+ "svg-long-desc-animated": "SVG tuku hunante, ka nee biitonbi $1 × $2, tuku azzaati: $3",
+ "svg-long-error": "SVG tuku laala: $1",
+ "show-big-image": "Aššil tuku",
+ "show-big-image-preview": "Moofuroo woo azzaatoo: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Biisahã}} tana: $1.",
+ "show-big-image-size": "biitonbi $1 × $2",
+ "file-info-gif-looped": "fillante",
+ "file-info-gif-frames": "{{PLURAL:$1|Kunga}} $1 \\",
+ "file-info-png-looped": "fillante",
+ "file-info-png-repeat": "na hẽenandi {{PLURAL:$1|cee}} $1",
+ "file-info-png-frames": "{{PLURAL:$1|Kunga}} $1",
+ "file-no-thumb-animation": "<strong>Laasaabu: Dabarijaŋay ga too biyoo woo kanbeboy-biyey ši hin ka hunandi.</strong>",
+ "file-no-thumb-animation-gif": "<strong>Laasaabu: Dabarijaŋay ga too GIF biyey kanbeboy-bii sahãntey, sand'affaa woo, ši hin ka hunandi.</strong>",
+ "newimages": "Tuku taagey cebedogoo",
+ "imagelisttext": "Ne ganda ti {{PLURAL:$1|tuku}} <strong>$1</strong> kaŋ fayandi $2.",
+ "newimages-summary": "Moo cerecerantaa woo ga tuku zijante korawey cebe.",
+ "newimages-legend": "Gaŋa",
+ "newimages-label": "Tukumaa (wala jeroo):",
+ "newimages-showbots": "Maršin-goykaw zijandiyaney cebe",
+ "noimages": "Haya ši diyandi.",
+ "ilsubmit": "Ceeci",
+ "bydate": "han bande",
+ "sp-newimages-showfrom": "Tuku taagey kaŋ ga šintin $2 waate, $1 hane",
+ "video-dims": "$1, $2 × $3",
+ "seconds-abbrev": "s $1",
+ "minutes-abbrev": "min $1",
+ "hours-abbrev": "g $1",
+ "days-abbrev": "z $1",
+ "seconds": "{{PLURAL:$1|segondu $1}}",
+ "minutes": "{{PLURAL:$1|miniti $1}}",
+ "hours": "{{PLURAL:$1|guura $1}}",
+ "days": "{{PLURAL:$1|zaari $1}}",
+ "weeks": "{{PLURAL:$1|jirbiyye $1}}",
+ "months": "{{PLURAL:$1|handu $1}}",
+ "years": "{{PLURAL:$1|jiiri $1}}",
+ "ago": "za $1",
+ "just-now": "sohõda tilliyo",
+ "hours-ago": "za {{PLURAL:$1|guuru}} $1",
+ "minutes-ago": "za {{PLURAL:$1|miniti}} $1",
+ "seconds-ago": "za {{PLURAL:$1|segondu}} $1",
+ "monday-at": "Atinni $1",
+ "tuesday-at": "Atalaata $1",
+ "wednesday-at": "Alarba $1",
+ "thursday-at": "Alhamiisa $1",
+ "friday-at": "Alzuma $1",
+ "saturday-at": "Asibti $1",
+ "sunday-at": "Alhadi $1",
+ "yesterday-at": "Bi $1",
+ "bad_image_list": "Takaroo ti takaa woo:\n\nHaya-izey hantumantey (žeerey kaŋ ga šintiin nda *) de ma kulandi.\nDobu jinaa kaŋ goo žeeroo ga ga hima ka dobu tuku laala ga.\nDobu tontoni žeeri follokaa ga kul ga hima hasarawyaŋ, sanda moɲey kaŋ ra tukoo ga bangay hantum-game ra.",
+ "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",
+ "variantname-uz-latn": "uz-Latn",
+ "variantname-uz-cyrl": "uz-Cyrl",
+ "metadata": "Bayahaya beeri",
+ "metadata-help": "Tukoo woo ga bara nda alhabar tontonante, a ga hin ka tee hinna biizaakaw wala biiberekaw nd'a tee wal'a bere hinna ra.\nNda tukoo n' ka barmay ka hun nga aššil alhaaloo ga, mane šilbayhaya fooyaŋ ši ye ka sawa nd'alhaali barmantaa koyne.",
+ "metadata-expand": "Šilbayhaya kukantey cebe",
+ "metadata-collapse": "Šilbayhaya kukantey tugu",
+ "metadata-fields": "Bii bayhaya beeri faarey kaŋ hantumandi alhabaroo ra ga kaa ka bara nda moo bii ceberi nda bayhaya beeri daaroo ga yee cere ga.\nJerey ga tugandi tilasu ra.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-langitem": "<strong>$2:</strong> $1",
+ "metadata-langitem-default": "$1",
+ "exif-imagewidth": "Hayri",
+ "exif-imagelength": "Kayyan",
+ "exif-bitspersample": "Cebsey jere-ize ra",
+ "exif-compression": "Kankamandiyan dabari",
+ "exif-photometricinterpretation": "Biitonbi margayan",
+ "exif-orientation": "Honnandiyan",
+ "exif-samplesperpixel": "Jere-izey hinna",
+ "exif-planarconfiguration": "Bayhaya kanandiyan",
+ "exif-ycbcrsubsampling": "Y hala C ganda-birjiyan dimma",
+ "exif-ycbcrpositioning": "Y hala C kaydoo",
+ "exif-xresolution": "Kaniyan biisahã",
+ "exif-yresolution": "Zunbuyan biisahã",
+ "exif-stripoffsets": "Bii bayhaya gorodoo",
+ "exif-rowsperstrip": "Sorro hinna zuu foo ra",
+ "exif-stripbytecounts": "Cebsu hinna zuu kankamante ra",
+ "exif-jpeginterchangeformat": "Kay JPEG SOI ga",
+ "exif-jpeginterchangeformatlength": "JPEG bayhaya cebsu hinna",
+ "exif-whitepoint": "Tonbi kaaray noone alhaaley",
+ "exif-primarychromaticities": "Noone alhaaley atabiyawey se",
+ "exif-ycbcrcoefficients": "Noone faari barmayyan hinnaɲaa alkadarey",
+ "exif-referenceblackwhite": "Celle bibi nd'ikaaray fella hinnawey",
+ "exif-datetime": "Tuku barmayyan han nda waati",
+ "exif-imagedescription": "Bii maa",
+ "exif-make": "Biizaahaya teekaw",
+ "exif-model": "Biizaahaya tee-dumi",
+ "exif-software": "Goyjinay kaŋ goyandi",
+ "exif-artist": "Hantumkaw",
+ "exif-copyright": "Alhaku mayraykoyni",
+ "exif-exifversion": "Exif dumi",
+ "exif-flashpixversion": "Flashpix dumi kaŋ goo nda kanbari",
+ "exif-colorspace": "Noone farru",
+ "exif-componentsconfiguration": "Jere-ize foo kul maana",
+ "exif-compressedbitsperpixel": "Bii kankamandiyan yaayi",
+ "exif-pixelydimension": "Bii hayri",
+ "exif-pixelxdimension": "Bii kayyan",
+ "exif-usercomment": "Goykaw daarawey",
+ "exif-relatedsoundfile": "Jinde tuku hangante",
+ "exif-datetimeoriginal": "Han nda waati bayhaya teeyan se",
+ "exif-datetimedigitized": "Han nda waati hinna-bereyan se",
+ "exif-subsectime": "DateTime subseconds",
+ "exif-subsectimeoriginal": "DateTimeOriginal subseconds",
+ "exif-subsectimedigitized": "DateTimeDigitized subseconds",
+ "exif-exposuretime": "Biizaayan waati",
+ "exif-exposuretime-format": "seg $1 ($2)",
+ "exif-fnumber": "F Hinna",
+ "exif-fnumber-format": "f/$1",
+ "exif-exposureprogram": "Biizaayan porogaram",
+ "exif-spectralsensitivity": "Gaayay maateyan",
+ "exif-isospeedratings": "ISO cahãri zimamyan",
+ "exif-shutterspeedvalue": "APEX daabirji cahãri",
+ "exif-aperturevalue": "APEX daabirji",
+ "exif-brightnessvalue": "APEX gaay",
+ "exif-exposurebiasvalue": "APEX daabirji mee",
+ "exif-maxaperturevalue": "Labu daabirji beeri",
+ "exif-subjectdistance": "Teekaw hiyaari",
+ "exif-meteringmode": "Neešiyan yaayi",
+ "exif-lightsource": "Fawra aššil",
+ "exif-flash": "Denji",
+ "exif-focallength": "Diji gunayan sahã",
+ "exif-focallength-format": "mm $1",
+ "exif-subjectarea": "Teekaw ganda",
+ "exif-flashenergy": "Denji sahã",
+ "exif-focalplanexresolution": "Moodiiyan X biisahã",
+ "exif-focalplaneyresolution": "Moodiiyan Y biisahã",
+ "exif-focalplaneresolutionunit": "Moodiiyan biisahã ize",
+ "exif-subjectlocation": "Teekaw gorodoo \\",
+ "exif-exposureindex": "Biizaayan šilbay",
+ "exif-sensingmethod": "Maateyan dabari",
+ "exif-filesource": "Tuku aššil",
+ "exif-scenetype": "Ganda dumi",
+ "exif-customrendered": "Laada bii hanseyan",
+ "exif-exposuremode": "Biizaayan yaayi",
+ "exif-whitebalance": "Kaaray almizan",
+ "exif-digitalzoomratio": "Hinna bii azzaati",
+ "exif-focallengthin35mmfilm": "Moodii kukuyan mm 35 filim ra",
+ "exif-scenecapturetype": "Ganda zaayan dumi",
+ "exif-gaincontrol": "Ganda korošiyan",
+ "exif-contrast": "Bii zilayyan",
+ "exif-saturation": "Bii tiŋay",
+ "exif-sharpness": "Bii henanyan",
+ "exif-devicesettingdescription": "Jinay kayandiyaney šilbayyan",
+ "exif-subjectdistancerange": "Teekaw mooruyan alkadar",
+ "exif-imageuniqueid": "Bii folloku tammaasa",
+ "exif-gpsversionid": "GPS kanjari dumi",
+ "exif-gpslatituderef": "Hawsa wala gurma hayyanzuu",
+ "exif-gpslatitude": "Hayyanzuu",
+ "exif-gpslongituderef": "Dandi wala dangay kayyanzuu",
+ "exif-gpslongitude": "Kayyanzuu",
+ "exif-gpsaltituderef": "Beene fella",
+ "exif-gpsaltitude": "Beene",
+ "exif-gpstimestamp": "GPS waati (atom montor)",
+ "exif-gpssatellites": "Satelitey kaŋ nda neesširoo tee",
+ "exif-gpsstatus": "Duukaw assariya",
+ "exif-gpsmeasuremode": "Neeširi alhaali",
+ "exif-gpsdop": "Neeširi alhakiikataray",
+ "exif-gpsspeedref": "Cahãri ize",
+ "exif-gpsspeed": "GPS duukaw cahãri",
+ "exif-gpstrackref": "Fella nootiyan tenje se",
+ "exif-gpstrack": "Ɲootiyan tenje",
+ "exif-gpsimgdirectionref": "Fella bii tenje se",
+ "exif-gpsimgdirection": "Bii tenje",
+ "exif-gpsmapdatum": "Labu neešiyan bayhaya damante",
+ "exif-gpsdestlatituderef": "Fella toodoo hayyanzuu se",
+ "exif-gpsdestlatitude": "Toodoo hayyanzuu",
+ "exif-gpsdestlongituderef": "Fella toodoo kayyanzuu se",
+ "exif-gpsdestlongitude": "Toodoo kayyanzuu",
+ "exif-gpsdestbearingref": "Fella toodoo jineteeyan se \\",
+ "exif-gpsdestbearing": "Toodoo jineteeyan",
+ "exif-gpsdestdistanceref": "Fella toodoo mooray se",
+ "exif-gpsdestdistance": "Toodoo mooray",
+ "exif-gpsprocessingmethod": "Maa GPS kabuyan dabari se",
+ "exif-gpsareainformation": "Maa GPS ganda se",
+ "exif-gpsdatestamp": "GPS han",
+ "exif-gpsdifferential": "GPS zilayyan serrandi",
+ "exif-coordinate-format": "$1° $2′ $3″ $4",
+ "exif-jpegfilecomment": "JPEG tuku daara",
+ "exif-keywords": "Kufalkalimawey",
+ "exif-worldregioncreated": "Adduɲɲa gandaa kaŋ ra biyoo zaandi",
+ "exif-countrycreated": "Laamaa kaŋ ra biyoo zaandi",
+ "exif-countrycodecreated": "Laamaa kaŋ ra biyoo zaandi lanbaa \\",
+ "exif-provinceorstatecreated": "Laama žemnaroo wala hinoo kaŋ ra biyoo zaandi",
+ "exif-citycreated": "Gaaloo kaŋ ra biyoo zaandi",
+ "exif-sublocationcreated": "Gallu fargandoo kaŋ ra biyoo zaandi",
+ "exif-worldregiondest": "Adduɲɲa gandaa kaŋ ra biyoo zaandi",
+ "exif-countrydest": "Laamaa kaŋ cebandi",
+ "exif-countrycodedest": "Laamaa kaŋ cebandi lanbaa",
+ "exif-provinceorstatedest": "Laama žemnaroo wala hinoo kaŋ cebandi",
+ "exif-citydest": "Galloo kaŋ cebandi",
+ "exif-sublocationdest": "Gallu fragandoo kaŋ cebandi",
+ "exif-objectname": "Maa duura",
+ "exif-specialinstructions": "Cerecere fahamandiyan",
+ "exif-headline": "Maabon",
+ "exif-credit": "Alhaku/Nookaw",
+ "exif-source": "Aššil",
+ "exif-editstatus": "Bii wallafiyan assariya \\",
+ "exif-urgency": "Tilasu",
+ "exif-fixtureidentifier": "Hawari maa",
+ "exif-locationdest": "Gorodoo šilbante",
+ "exif-locationdestcode": "Lanba gorodoo šilbante se",
+ "exif-objectcycle": "Zaari waatoo kaŋ se hẽenandi jinaa miile",
+ "exif-contact": "Hantumyan alhabar",
+ "exif-writer": "Hantumkaw",
+ "exif-languagecode": "Šenni",
+ "exif-iimversion": "IIM dumi",
+ "exif-iimcategory": "Dumi",
+ "exif-iimsupplementalcategory": "Dumi tontonantey",
+ "exif-datetimeexpires": "A ma ši goyandi nd'a bisa",
+ "exif-datetimereleased": "Fattayan han",
+ "exif-originaltransmissionref": "Sanbayan jinaa gorodoo lanbaa",
+ "exif-identifier": "Tammaasakaw",
+ "exif-lens": "Zaayan moodiji",
+ "exif-serialnumber": "Biizaahayaa fannu lanbaa \\",
+ "exif-cameraownername": "Biizaahayaa koyoo",
+ "exif-label": "Šilbay",
+ "exif-datetimemetadata": "Han bayhaya beeri barmay cee koraa",
+ "exif-nickname": "Bii maa kanbari \\",
+ "exif-rating": "Alkadar damyan (5 ra)",
+ "exif-rightscertificate": "Alhaku juwalyan tabatandi tiira",
+ "exif-copyrighted": "Teekaw alhaku assariya",
+ "exif-copyrightowner": "Teekaw alhaku mayraykoyni",
+ "exif-usageterms": "Goymee waafakay",
+ "exif-webstatement": "Interneti-ra alhaku koy kalima",
+ "exif-originaldocumentid": "Aššil takaddaa tammaasa follokaa",
+ "exif-licenseurl": "URL alhaku duɲeyan tiira",
+ "exif-morepermissionsurl": "Barmay-se duɲeyan tiira alhabar",
+ "exif-attributionurl": "Nda war ga goy nda woo koyne, dobu ne",
+ "exif-preferredattributionname": "Nda war ga goy nda woo koyne, saabu har",
+ "exif-pngfilecomment": "PNG tuku daara",
+ "exif-disclaimer": "Šikka yaamar",
+ "exif-contentwarning": "Gundekuna yaamar",
+ "exif-giffilecomment": "GIF tuku gundekuna",
+ "exif-intellectualgenre": "Haya-ize duni",
+ "exif-subjectnewscode": "Teekaw lanba",
+ "exif-scenecode": "IPTC ganda lanba",
+ "exif-event": "Teera šilbante",
+ "exif-organisationinimage": "Konday šilbante",
+ "exif-personinimage": "Boro šilbante",
+ "exif-originalimageheight": "Biyoo kayyanoo nd'a mana kosu",
+ "exif-originalimagewidth": "Biyoo hayroo nd'a mana kosu",
+ "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+ "exif-subjectnewscode-value": "$2 ($1)",
+ "exif-compression-1": "Mana kankamandi",
+ "exif-compression-2": "CCITT Kuray 3 1-Zimamari Huffman barmante diray kuuyan harfu-hawyan",
+ "exif-compression-3": "CCITT Kuray 3 faksu harfu-hawyan",
+ "exif-compression-4": "CCITT Kuray 4 faksu harfu-hawyan",
+ "exif-compression-5": "LZW",
+ "exif-compression-6": "JPEG (ižeena)",
+ "exif-compression-7": "JPEG",
+ "exif-compression-8": "Motti (Adobe)",
+ "exif-compression-32773": "PackBits (Macintosh RLE)",
+ "exif-compression-32946": "Motti (PKZIP)",
+ "exif-compression-34712": "JPEG2000",
+ "exif-copyrighted-true": "Teekaw alhaku saajante",
+ "exif-copyrighted-false": "Teekaw alkaku assariya mana kayandi",
+ "exif-photometricinterpretation-2": "RGB",
+ "exif-photometricinterpretation-6": "YCbCr",
+ "exif-unknowndate": "Han ši bayante",
+ "exif-orientation-1": "Hankul",
+ "exif-orientation-2": "Bere ka kanandi",
+ "exif-orientation-3": "Kuubi 180°",
+ "exif-orientation-4": "Bere ka sukandi",
+ "exif-orientation-5": "Kuubi 90° CCW nda bere ka sukandi",
+ "exif-orientation-6": "Kuubi 90° CCW",
+ "exif-orientation-7": "Kuubi 90° CW nda bere ka kanandi",
+ "exif-orientation-8": "Bere 90° CW",
+ "exif-planarconfiguration-1": "gunguti takari",
+ "exif-planarconfiguration-2": "planar takari",
+ "exif-xyresolution-i": "dpi $1",
+ "exif-xyresolution-c": "dpc $1",
+ "exif-colorspace-1": "sRGB",
+ "exif-colorspace-65535": "Mana faara",
+ "exif-componentsconfiguration-0": "ši bara",
+ "exif-componentsconfiguration-1": "Y",
+ "exif-componentsconfiguration-2": "Cb",
+ "exif-componentsconfiguration-3": "Cr",
+ "exif-componentsconfiguration-4": "R",
+ "exif-componentsconfiguration-5": "G",
+ "exif-componentsconfiguration-6": "B",
+ "exif-exposureprogram-0": "Manti bayrante",
+ "exif-exposureprogram-1": "Boŋteeyan",
+ "exif-exposureprogram-2": "Hankul porogaram",
+ "exif-exposureprogram-3": "Feeriyan jindoo",
+ "exif-exposureprogram-4": "Daabuyan jindoo",
+ "exif-exposureprogram-5": "Kanbeteeri porogaram (ga faari guusuyan dam jine)",
+ "exif-exposureprogram-6": "Teeyan porogaram (daabuyan cahãnte dam jine)",
+ "exif-exposureprogram-7": "Kayyanbii alhaali (ndum bii manante zaayan se nda bandafaari kokoorante)",
+ "exif-exposureprogram-8": "Hayyanbii alhaali (ganda bii moorante zaayan se nda bandafaari manante)",
+ "exif-subjectdistance-value": "meetar $1",
+ "exif-meteringmode-0": "Šibayante",
+ "exif-meteringmode-1": "Sasawandi",
+ "exif-meteringmode-2": "Gam tiŋay sasawante",
+ "exif-meteringmode-3": "Doo",
+ "exif-meteringmode-4": "Doo-boobo",
+ "exif-meteringmode-5": "Noone",
+ "exif-meteringmode-6": "Jere",
+ "exif-meteringmode-255": "Tana",
+ "exif-lightsource-0": "Šibayante",
+ "exif-lightsource-1": "Zaarigaaya",
+ "exif-lightsource-2": "Fawrante",
+ "exif-lightsource-3": "Tungsten (nunetaa denji)",
+ "exif-lightsource-4": "Meli",
+ "exif-lightsource-9": "Waati henna",
+ "exif-lightsource-10": "Duula (bur)",
+ "exif-lightsource-11": "Bii",
+ "exif-lightsource-12": "Zaarigaaya fawrante ((D 5700 – 7100K)",
+ "exif-lightsource-13": "Zaari kaaray fawrante ((N 4600 – 5400K)",
+ "exif-lightsource-14": "Fawra kaaray yayna ((W 3900 – 4500K)",
+ "exif-lightsource-15": "Kaaray fawrante (WW 3200 – 3700K)",
+ "exif-lightsource-17": "Gaaya tabatante A",
+ "exif-lightsource-18": "Gaaya tabatante B",
+ "exif-lightsource-19": "Gaaya tabatante C",
+ "exif-lightsource-20": "D55",
+ "exif-lightsource-21": "D65",
+ "exif-lightsource-22": "D75",
+ "exif-lightsource-23": "D50",
+ "exif-lightsource-24": "ISO goytenda tungsten",
+ "exif-lightsource-255": "Gaaya aššil tana",
+ "exif-flash-fired-0": "Meloo mana dii",
+ "exif-flash-fired-1": "Meloo dii",
+ "exif-flash-return-0": "bila nda denji willante maateyan goy",
+ "exif-flash-return-2": "denji willante gaaya mana maatandi",
+ "exif-flash-return-3": "denji willante gaaya maatandi",
+ "exif-flash-mode-1": "gaabi meli diinandiyan",
+ "exif-flash-mode-2": "gaabi meli wiiyan",
+ "exif-flash-mode-3": "Boŋše alhaali",
+ "exif-flash-function-1": "Mei goy kul šii no",
+ "exif-flash-redeye-1": "moo-ciray kaayan alhaali",
+ "exif-focalplaneresolutionunit-2": "kabaaru",
+ "exif-sensingmethod-1": "Manti bayrante",
+ "exif-sensingmethod-2": "Canbu-foo noone ganda maateji",
+ "exif-sensingmethod-3": "Canbu-hinka noone ganda maateji",
+ "exif-sensingmethod-4": "Canbu-hinza noone ganda maateji",
+ "exif-sensingmethod-5": "Noone hangante ganda maateji",
+ "exif-sensingmethod-7": "Žeeri-hinza maateji",
+ "exif-sensingmethod-8": "Noone hangante žeeri maateji",
+ "exif-filesource-3": "Hinna biizaahay dejjante",
+ "exif-scenetype-1": "Bii kaŋ zaandi dogoo ra",
+ "exif-customrendered-0": "Hankul teeyan",
+ "exif-customrendered-1": "Kaŋ tee boro foo se",
+ "exif-exposuremode-0": "Bii zaa nga boŋše",
+ "exif-exposuremode-1": "Kanbe biizaayan",
+ "exif-exposuremode-2": "Boŋše holgu",
+ "exif-whitebalance-0": "Boŋše kaaray sawante",
+ "exif-whitebalance-1": "Kanbe kaaray sawante",
+ "exif-scenecapturetype-0": "Tabatante",
+ "exif-scenecapturetype-1": "Hayyanbii",
+ "exif-scenecapturetype-2": "Kayyanbii",
+ "exif-scenecapturetype-3": "Cijinhere bii alhaali",
+ "exif-gaincontrol-0": "Baffoo",
+ "exif-gaincontrol-1": "Duura buuna ka ziji",
+ "exif-gaincontrol-2": "Duura beeri ka ziji",
+ "exif-gaincontrol-3": "Duura buuna ka zunbu",
+ "exif-gaincontrol-4": "Duura beeri ka zunbu",
+ "exif-contrast-0": "Hankul",
+ "exif-contrast-1": "Baana",
+ "exif-contrast-2": "Šenda",
+ "exif-saturation-0": "Hankul",
+ "exif-saturation-1": "Bii sahã buuna",
+ "exif-saturation-2": "Bii sahã beeri",
+ "exif-sharpness-0": "Hankul",
+ "exif-sharpness-1": "Baana",
+ "exif-sharpness-2": "Šenda",
+ "exif-subjectdistancerange-0": "Šibayante",
+ "exif-subjectdistancerange-1": "Bebbeeri",
+ "exif-subjectdistancerange-2": "Moo daabu",
+ "exif-subjectdistancerange-3": "Diiyan moora",
+ "exif-gpslatitude-n": "Hawsa hayyanzuu",
+ "exif-gpslatitude-s": "Gurma hayyanzuu",
+ "exif-gpslongitude-e": "Dandi kayyanzuu",
+ "exif-gpslongitude-w": "Dangay kayyanzuu",
+ "exif-gpsaltitude-above-sealevel": "{{PLURAL:$1|meetar}} $1 teeko se beene",
+ "exif-gpsaltitude-below-sealevel": "{{PLURAL:$1|meetar}} $1 teeko se ganda",
+ "exif-gpsstatus-a": "Neešiyan goo ma tee",
+ "exif-gpsstatus-v": "Neešiyan cerekubayyan",
+ "exif-gpsmeasuremode-2": "Azzaati-2 neešiyan",
+ "exif-gpsmeasuremode-3": "Azzaati-3 neešiyan",
+ "exif-gpsspeed-k": "Kilomeetarey guuru ra",
+ "exif-gpsspeed-m": "Miley guuru ra",
+ "exif-gpsspeed-n": "Guley",
+ "exif-gpsdestdistance-k": "Kilomeetarey",
+ "exif-gpsdestdistance-m": "Miley",
+ "exif-gpsdestdistance-n": "Teeko gande miley",
+ "exif-gpsdop-excellent": "Bešere ($1)",
+ "exif-gpsdop-good": "Boryo ($1)",
+ "exif-gpsdop-moderate": "Sawante ($1)",
+ "exif-gpsdop-fair": "Cimante ($1)",
+ "exif-gpsdop-poor": "Talka ($1)",
+ "exif-objectcycle-a": "Subbaahi hinne",
+ "exif-objectcycle-p": "Almaari hinne",
+ "exif-objectcycle-b": "Subbaahi nd'almaari kaa",
+ "exif-gpsdirection-t": "Tenjeyan cimi",
+ "exif-gpsdirection-m": "Alhindi tenjeyan",
+ "exif-ycbcrpositioning-1": "Gamhaya",
+ "exif-ycbcrpositioning-2": "Cere-hinka",
+ "exif-dc-contributor": "Kanbuzaakey",
+ "exif-dc-coverage": "Ganda nda waati alkadar hẽenandihayey se",
+ "exif-dc-date": "Han(ey)",
+ "exif-dc-publisher": "Wallafikaw",
+ "exif-dc-relation": "Hẽenandihaya kondante",
+ "exif-dc-rights": "Alhakey",
+ "exif-dc-source": "Aššil hẽenandihaya",
+ "exif-dc-type": "Hẽenandihaya dumi",
+ "exif-rating-rejected": "Jindawante",
+ "exif-isospeedratings-overflow": "Ka bisa 65535",
+ "exif-maxaperturevalue-value": "APEX $1 (f/$2)",
+ "exif-iimcategory-ace": "Goy suubante, alaada nda hooray",
+ "exif-iimcategory-clj": "Bone nd' alhukum",
+ "exif-iimcategory-dis": "Albalaawu nd' alwaadu",
+ "exif-iimcategory-fin": "Ganda duura nda maamalayan",
+ "exif-iimcategory-edu": "Caw",
+ "exif-iimcategory-evn": "Windila",
+ "exif-iimcategory-hth": "Gaahambaani",
+ "exif-iimcategory-hum": "Addamayze nafaw",
+ "exif-iimcategory-lab": "Goyyan",
+ "exif-iimcategory-lif": "Hunayan fondo nda hunanzamay teera",
+ "exif-iimcategory-pol": "Politiki",
+ "exif-iimcategory-rel": "Addiina nda ganari",
+ "exif-iimcategory-sci": "Bayray nda dabari",
+ "exif-iimcategory-soi": "Jama misey",
+ "exif-iimcategory-spo": "Gaahamfeeriyan",
+ "exif-iimcategory-war": "Wangu, alfitina nda kosuri",
+ "exif-iimcategory-wea": "Waati",
+ "exif-urgency-normal": "Hankul ($1)",
+ "exif-urgency-low": "Ganda ($1)",
+ "exif-urgency-high": "Beene ($1)",
+ "exif-urgency-other": "Goykaw-bayrante jine-ka-tee haya ($1)",
+ "namespacesall": "kul",
+ "monthsall": "kul",
+ "confirmemail": "Bataga aderesu tabatandi",
+ "confirmemail_noemail": "War ši nda bataga aderesu henna war [[Special:Preferences|goykaw ibaayey]] ra.",
+ "confirmemail_text": "{{SITENAME}} ga waažibandi kaŋ war ma war bataga aderesoo tabatandi jina ka hin ka goy nda bataga alhaaley.\nBatagaa goo nda dobu kaŋ ra gundu hantum goo;\ndoboo dam war ceecikaa ra to tabatandi kaŋ war bataga aderesoo ga boori.",
+ "confirmemail_pending": "Tabatandiyan gundu hantum n' sanbandi ni se bataga ra ka ben;\nnd'a mana gay kaŋ war na war kontoo tee, war mma hima ka minitiyaŋ batu hal'a ma too war do jina hala war ga ceeci ga gundu hantum taaga wiri.",
+ "confirmemail_send": "Tabatandiyan gundu hantum sanba",
+ "confirmemail_sent": "Tabatandiyan bataga sanbandi.",
+ "confirmemail_oncreate": "Tabatandi gundu hantum n' ka sanbandi war bataga aderesoo do,\nGundu hantumoo woo ši waažibi huruyan se, amma war ga hima k'a noo jina hala war ga hin ka bataga-bande goy alhaali kul tunandi wikiyoo ra.",
+ "confirmemail_sendfailed": "{{SITENAME}} mana hin ka war gundu hantum batagaa sanba.\nWar bataga aderesoo koroši harfu laala se.\n\nSanbakaw willandi: $1",
+ "confirmemail_invalid": "Tabatandiyan gundu hantum laala.\nA ga hima gundu hantumoo waatoo buu.",
+ "confirmemail_needlogin": "Dobu $1 ka war bataga aderesoo tabatandi.",
+ "confirmemail_success": "War bataga aderesoo n' ka tabatandi.\nSohõ war ga hin ka [[Special:UserLogin|huru]] ka maa wikiyoo kaanoo.",
+ "confirmemail_loggedin": "War bataga aderesoo n' ka tabatandi.",
+ "confirmemail_subject": "{{SITENAME}} bataga aderesu tabatandiyan",
+ "confirmemail_body": "Boro foo, sanda war, kaŋ ga hun IP aderesu $1 ga,\nn' ka kontu \"$2\" hantum nda bataga aderesoo woo {{SITENAME}} ga.\n\\",
+ "confirmemail_body_changed": "Boro foo, sanda war, kaŋ ka hun IP aderesu $1 ga,\nn' ka bataga aderesoo barmay ka hun \"$2 ga k'a dam aderesoo woo {{SITENAME}} ga.\n\nKa tabatandi, kaŋ nda cimi, war ma kontoo woo may nda ka bataga alhaaley\ntunandi taaga {{SITENAME}} ga, doboo woo feeri war ceecikaa ra:\n\n$3\n\nNda war *ši* kontoo may, wa doboo woo gana\nka bataga aderesu tabatandiyanoo naŋ:\n\n$5\n\nTabatandiyan gundu hantumoo woo waatoo ga buu nd'a too $4.",
+ "confirmemail_body_set": "Boro foo, sanda war, kaŋ ka hun IP aderesu $1 ga,\nn' ka bataga aderesoo kayandi \"$2 kontoo se ka tee aderesoo woo {{SITENAME}} ga.\n\nKa tabatandi, kaŋ nda cimi, war ma kontoo woo may nda ka bataga alhaaley\ntunandi taaga {{SITENAME}} ga, doboo woo feeri war ceecikaa ra:\n\n$3\n\nNda war *ši* kontoo may, wa doboo woo gana\nka bataga aderesu tabatandiyanoo naŋ:\n\n$5\n\nTabatandiyan gundu hantumoo woo waatoo ga ben nd'a too $4.",
+ "confirmemail_invalidated": "Na bataga aderesu tabatantiyan naŋ",
+ "invalidateemail": "Bataga tabatandiyan naŋ",
+ "scarytranscludedisabled": "[Interwiki kanandiyan n' ka kay]",
+ "scarytranscludefailed": "[Leeti zaayan n' ka kay $1 se]",
+ "scarytranscludefailed-httpstatus": "[Leeti zaayan n' ka kay $1 se: HTTP $2]",
+ "scarytranscludetoolong": "[URL ga hansa ka kuu]",
+ "deletedwhileediting": "<strong>Yaamar:</strong> Moɲoo woo n' ka tuusandi war fasalyan šintinoo banda ga!",
+ "confirmrecreate": "Goykaw [[User:$1|$1]] ([[User talk:$1|talk]]) na moɲoo woo tuusu war fasalyan šintinoo banda ga dalil se:\n: <em>$2</em>\nTabatandi kaŋ, nda cimi, war ga boona ka moɲoo woo tee taaga.",
+ "confirmrecreate-noreason": "Goykaw [[User:$1|$1]] ([[User talk:$1|talk]]) na moɲoo woo tuusu war fasalyan šintinoo banda ga. Tabatandi kaŋ, nda cimi, war ga boona ka moɲoo woo tee taaga. \\",
+ "recreate": "Tee taaga",
+ "unit-pixel": "px",
+ "confirm_purge_button": "Ayyo",
+ "confirm-purge-top": "Moɲoo woo tugudogoo tuusu?",
+ "confirm-purge-bottom": "Moo koonandiyan ka tugudogoo tuusu nd'a ga filla kul ikoraa gaabi ka bangay.",
+ "confirm-watch-button": "Ayyo",
+ "confirm-watch-top": "Moɲoo tonton war hawgayhayey ga wala?",
+ "confirm-unwatch-button": "Ayyo",
+ "confirm-unwatch-top": "Moɲoo woo kaa war hawgayhayey ra wala?",
+ "semicolon-separator": ";&#32;",
+ "comma-separator": ",&#32;",
+ "colon-separator": ":&#32;",
+ "pipe-separator": "&#32;|&#32;",
+ "word-separator": "&#32;",
+ "ellipsis": "...",
+ "percent": "$1%",
+ "parentheses": "($1)",
+ "brackets": "[$1]",
+ "quotation-marks": "\"$1\"",
+ "imgmultipageprev": "← moo bisante",
+ "imgmultipagenext": "jinehere moo →",
+ "imgmultigo": "Koy!",
+ "imgmultigoto": "Koy moo $1 do",
+ "img-lang-opt": "$2 ($1)",
+ "img-lang-default": "(tilasu šenni)",
+ "img-lang-info": "Biyoo woo kaataray $1 ra. $2",
+ "img-lang-go": "Koy",
+ "ascending_abbrev": "ziji",
+ "descending_abbrev": "zunbu",
+ "table_pager_next": "Jinehere moɲoo",
+ "table_pager_prev": "Moo bisantaa",
+ "table_pager_first": "Moo jinaa",
+ "table_pager_last": "Moo koraa",
+ "table_pager_limit": "Haya-ize $1 cebe moo ga",
+ "table_pager_limit_label": "Haya-ize hinna moo ga:",
+ "table_pager_limit_submit": "Koy",
+ "table_pager_empty": "Hunyan kul šii",
+ "autosumm-blank": "Moo koonante",
+ "autosumm-replace": "Na gundekuna barmay nda \"$1\"",
+ "autoredircomment": "Na moɲoo kuubi [[$1]] here",
+ "autosumm-new": "Na moo tee nda \"$1\"",
+ "autosumm-newblank": "Na moo koonu tee",
+ "size-bytes": "B $1",
+ "size-kilobytes": "KB $1",
+ "size-megabytes": "MB $1",
+ "size-gigabytes": "GB $1 \\",
+ "size-terabytes": "TB $1",
+ "size-petabytes": "PB $1",
+ "size-exabytes": "EB $1",
+ "size-zetabytes": "ZB $1",
+ "size-yottabytes": "YB $1",
+ "bitrate-bits": "bps $1",
+ "bitrate-kilobits": "kbps $1",
+ "bitrate-megabits": "Mbps $1",
+ "bitrate-gigabits": "Gbps $1",
+ "bitrate-terabits": "Tbps $1",
+ "bitrate-petabits": "Pbps $1",
+ "bitrate-exabits": "Ebps $1",
+ "bitrate-zetabits": "Zbps $1",
+ "bitrate-yottabits": "Ybps $1",
+ "lag-warn-normal": "A ga hin ka tee kaŋ barmawey kaŋ ga taaga nda {{PLURAL:$1|segondu}} $1 ši cebe maašeedaa woo ra.",
+ "lag-warn-high": "Bayhaya feršikaa ga hansa ka bunnu, adiši barmawey kaŋ ka taaga nda {{PLURAL:$1|segondu}} $1 ši cebe maašeedaa woo ra.",
+ "watchlistedit-normal-title": "Hawgayhayey fasal",
+ "watchlistedit-normal-legend": "Maaɲey kaa hawgayhayey ra",
+ "watchlistedit-normal-explain": "Maaɲey kaŋ goo war hawgayhayey ra ga cebe ne ganda.\nKa maa foo kaa, bataa kaŋ goo jeroo maasa, nda \"{{int:Watchlistedit-normal-submit}}\" naagu.\nWar ga hin ka [[Special:EditWatchlist/raw|maašeeda ganoo fasal]] da.",
+ "watchlistedit-normal-submit": "Maaɲey kaa",
+ "watchlistedit-normal-done": "{{PLURAL:$1|Maa $1 n' ka}} hun war hawgayhayey ra:",
+ "watchlistedit-raw-title": "Hawgayhaya ganey fasal",
+ "watchlistedit-raw-legend": "Hawgaygaya ganey fasal",
+ "watchlistedit-raw-explain": "Maaɲey kaŋ goo war hawgayhayey ra ga cebe ganda, nd'i ga hin ka barmay nda boro na maa tonton wal'a kaa maašeedaa ga;\nmaa foo zuu foo ra.\nNda war ben, \"{{int:Watchlistedit-raw-submit}}\" naagu.\nWar ga hin ka [[Special:EditWatchlist|goy nda hankul fasalkaa]].",
+ "watchlistedit-raw-titles": "Maaɲey:",
+ "watchlistedit-raw-submit": "Hawgayhayey taagandi",
+ "watchlistedit-raw-done": "War hawgayhayey n' ka taagandi.",
+ "watchlistedit-raw-added": "{{PLURAL:$1|Maa $1 n' ka}} tontonandi:",
+ "watchlistedit-raw-removed": "{{PLURAL:$1Maa $1 n' ka}} hun:",
+ "watchlistedit-clear-title": "Hawgayhaya koonantey",
+ "watchlistedit-clear-legend": "Hawgayhayey koonandi",
+ "watchlistedit-clear-explain": "Maaɲey kul ga kaa ka hun war hawgayhayey ra",
+ "watchlistedit-clear-titles": "Maaɲey:",
+ "watchlistedit-clear-submit": "Hawgayhayey koonandi (Woo ga duumi!)",
+ "watchlistedit-clear-done": "War hawgayhayey n' ka koonandi.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|Maa $1 n' ka}} hun:",
+ "watchlistedit-too-many": "Moo booboyaŋ goo kaŋyaŋ ga cebe ne.",
+ "watchlisttools-clear": "Hawgayhayey koonandi",
+ "watchlisttools-view": "Barmay himantey guna",
+ "watchlisttools-edit": "Hawgayhayey guna nd'i fasal",
+ "watchlisttools-raw": "Hawgayhaya ganey fasal",
+ "iranian-calendar-m1": "Farvardin",
+ "iranian-calendar-m2": "Ordibehesht",
+ "iranian-calendar-m3": "Khordad",
+ "iranian-calendar-m4": "Tir",
+ "iranian-calendar-m5": "Mordad",
+ "iranian-calendar-m6": "Shahrivar",
+ "iranian-calendar-m7": "Mehr",
+ "iranian-calendar-m8": "Aban",
+ "iranian-calendar-m9": "Azar",
+ "iranian-calendar-m10": "Dey",
+ "iranian-calendar-m11": "Bahman",
+ "iranian-calendar-m12": "Esfand",
+ "hijri-calendar-m1": "Muharram",
+ "hijri-calendar-m2": "Safar",
+ "hijri-calendar-m3": "Rabi' al-awwal",
+ "hijri-calendar-m4": "Rabi' al-thani",
+ "hijri-calendar-m5": "Jumada al-awwal",
+ "hijri-calendar-m6": "Jumada al-thani",
+ "hijri-calendar-m7": "Rajab",
+ "hijri-calendar-m8": "Sha'aban",
+ "hijri-calendar-m9": "Ramadan",
+ "hijri-calendar-m10": "Shawwal",
+ "hijri-calendar-m11": "Dhu al-Qi'dah",
+ "hijri-calendar-m12": "Dhu al-Hijjah",
+ "hebrew-calendar-m1": "Tishrei",
+ "hebrew-calendar-m2": "Cheshvan",
+ "hebrew-calendar-m3": "Kislev",
+ "hebrew-calendar-m4": "Tevet",
+ "hebrew-calendar-m5": "Shevat",
+ "hebrew-calendar-m6": "Adar",
+ "hebrew-calendar-m6a": "Adar I",
+ "hebrew-calendar-m6b": "Adar II",
+ "hebrew-calendar-m7": "Nisan",
+ "hebrew-calendar-m8": "Iyar",
+ "hebrew-calendar-m9": "Sivan",
+ "hebrew-calendar-m10": "Tamuz",
+ "hebrew-calendar-m11": "Av",
+ "hebrew-calendar-m12": "Elul",
+ "hebrew-calendar-m1-gen": "Tishrei",
+ "hebrew-calendar-m2-gen": "Cheshvan",
+ "hebrew-calendar-m3-gen": "Kislev",
+ "hebrew-calendar-m4-gen": "Tevet",
+ "hebrew-calendar-m5-gen": "Shevat",
+ "hebrew-calendar-m6-gen": "Adar",
+ "hebrew-calendar-m6a-gen": "Adar I",
+ "hebrew-calendar-m6b-gen": "Adar II",
+ "hebrew-calendar-m7-gen": "Nisan",
+ "hebrew-calendar-m8-gen": "Iyar",
+ "hebrew-calendar-m9-gen": "Sivan",
+ "hebrew-calendar-m10-gen": "Tamuz",
+ "hebrew-calendar-m11-gen": "Av",
+ "hebrew-calendar-m12-gen": "Elul",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|deede]])",
+ "timezone-utc": "UTC",
+ "duplicate-defaultsort": "<strong>Yaamar:</strong> Tilasu fayyan kufal \"$2\" ga tilasu fayyan kufal bisante \"$1\" daaru.",
+ "duplicate-displaytitle": "<strong>Yaamar:</strong> Cebeyan maa \"$2\" ga cebeyan maa bisante \"$1\" daaru.",
+ "invalid-indicator-name": "<strong>Error:</strong> Moo assariya šilbaykey <code>name</code> alhaaloo ši hima ka koonu.",
+ "version": "Dumi",
+ "version-extensions": "Dobuyan sinjantey",
+ "version-skins": "Kuuru sinjantey",
+ "version-specialpages": "Moo cerecernatey",
+ "version-parserhooks": "Fesu-fesuyan delbey",
+ "version-variables": "Barmay dumey",
+ "version-antispam": "Žiibi bataga ganjiyan",
+ "version-api": "API",
+ "version-other": "Itana",
+ "version-mediahandlers": "Hẽenandihaya dabarikey",
+ "version-hooks": "Delbey",
+ "version-parser-extensiontags": "Fesu-fesukaw dobuyan kanjey",
+ "version-parser-function-hooks": "Fesu-fesukaw goymee delbey",
+ "version-hook-name": "Delbu maa",
+ "version-hook-subscribedby": "Maahantumkaa",
+ "version-version": "($1)",
+ "version-no-ext-name": "[šii nda maa]",
+ "version-svn-revision": "r$1",
+ "version-license": "MediaWiki duɲeyan kaddasu",
+ "version-ext-license": "Duɲeyan kaddasu",
+ "version-ext-colheader-name": "Dobuyan",
+ "version-skin-colheader-name": "Kuuru",
+ "version-ext-colheader-version": "Dumi",
+ "version-ext-colheader-license": "Duɲeyan kaddasu",
+ "version-ext-colheader-description": "Šilbayyan",
+ "version-ext-colheader-credits": "Hantumkey",
+ "version-license-title": "Duɲeyan kaddasu $1 se",
+ "version-license-not-found": "Duɲeyan alhabar šifante kul si duwandi dubuyanoo woo se.",
+ "version-credits-title": "Alhakey $1 se",
+ "version-credits-not-found": "Alhaku šifante alhabar kul ši duwandi dobuyanoo woo se. \\",
+ "version-poweredby-credits": "Wikiyoo woo ga dira <strong>[https://www.mediawiki.org/ MediaWiki]</strong> ga, teekaw alhaku © 2001-$1 $2.",
+ "version-poweredby-others": "itaney",
+ "version-poweredby-translators": "translatewiki.net berandikey",
+ "version-credits-summary": "Ir ga boona ka borey wey saabu nda ngi kanbuzaamawey [[Special:Version|MediaWiki]] se.",
+ "version-license-info": "MediaWiki ti forba goyjinay; war g'a žemna koyne nda/wala k'a barmay ir Baytal jamaa duɲeyan kaddasu bande (GNU) takaa kaŋ nd'a wallafandi Forba goyjinay sinjiyanoo; a tee duɲeyan kaddasu dumi 2ntoo, wala (nda war gabaa) dumi kokorante foo kul.\n \nMediaWiki ga žemnanti naataa boŋ ga kaŋ a ga tee nafawhaya, amma BILA NDA GAARANTI; bila nda ba alhakiika nda MAAMALA ALHAALOO wala nga BOORIYANOO GOYMEE TANA KUL SE. Guna Baytal jamaa duɲeyan kaddasu (GNU) šilbayhayey se.\n\nWar hima ka duu [{{SERVER}}{{SCRIPTPATH}}/Baytal jamaa duɲeyan kaddasu (GNU) celle foo berandi] porogaramoo woo bande; nd'a manti woo, wa hantum Forba goyjinay sinjiyanoo nda konda, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA wala [//www.gnu.org/licenses/old-licenses/gpl-2.0.html caw interneti ra].",
+ "version-software": "Goyjinay sinjante",
+ "version-software-product": "Jinay",
+ "version-software-version": "Dumi",
+ "version-entrypoints": "Hurudoo URL",
+ "version-entrypoints-header-entrypoint": "Hurudoo",
+ "version-entrypoints-header-url": "URL",
+ "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Article path]",
+ "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script path]",
+ "redirect": "Tuku, goykaw, moo wala boŋtammaasa filla n'a kuubi",
+ "redirect-legend": "Kuubi tuku wala moo ga",
+ "redirect-summary": "Moo cerecerante ga kuubi tuku ga (tuku maa bande), moo (sanda boŋtammaasa wala boŋtammaasa moo), wala goykaw moo (sanda hinna goykaw boŋtammaasa). Goyyan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/moo/64308]], [[{{#Special:Redirect}}/filla/328429]], wala [[{{#Special:Redirect}}/goykaw/101]].",
+ "redirect-submit": "Koy",
+ "redirect-lookup": "Guna:",
+ "redirect-value": "Hinna:",
+ "redirect-user": "Goykaw boŋtammaasa",
+ "redirect-page": "Moo boŋtammaasa",
+ "redirect-revision": "Moo filla",
+ "redirect-file": "Tuku maa",
+ "redirect-not-exists": "Hinna mana duwandi",
+ "fileduplicatesearch": "Tuku fillantey ceeci",
+ "fileduplicatesearch-summary": "Tuku fillantey kaŋ ga hanga hanga hinnawey ceeci.",
+ "fileduplicatesearch-legend": "Ize fillante ceeci",
+ "fileduplicatesearch-filename": "Tukumaa:",
+ "fileduplicatesearch-submit": "Ceeci",
+ "fileduplicatesearch-info": "biitonbi $1 × $2 <br />Tuku azzaati: $3<br />MIME dumi: $4",
+ "fileduplicatesearch-result-1": "\"$1\" tukoo ši nda fillayan kul.",
+ "fileduplicatesearch-result-n": "\"$1\" tukoo goo nda {{PLURAL:$2|1 fillayan himakašine $2}}.",
+ "fileduplicatesearch-noresults": "Tuku kul ši bara nda \"$1\" maa. \\",
+ "specialpages": "Moo cerecerantey",
+ "specialpages-note-top": "Šilbaymaana",
+ "specialpages-note": "* Hankul cerecere moɲey.\n* <span class=\"mw-specialpagerestricted\">Fondo-kankamante cerecere moɲey.</span>",
+ "specialpages-group-maintenance": "Alhaadimay bayrandey",
+ "specialpages-group-other": "Cerecere moo taney",
+ "specialpages-group-login": "Huru / kontu tee",
+ "specialpages-group-changes": "Barmay nda taariki korawey \\",
+ "specialpages-group-media": "Hẽenandi bayrandey nda zijandiyaney",
+ "specialpages-group-users": "Goykey nd'alhakey",
+ "specialpages-group-highuse": "Goy-beeri moɲey",
+ "specialpages-group-pages": "Moɲey maašeedaa",
+ "specialpages-group-pagetools": "Moo goyjinawey",
+ "specialpages-group-wiki": "Bayhaya nda goyjinawey",
+ "specialpages-group-redirects": "Goo ma cerecere moɲey kuubi",
+ "specialpages-group-spam": "Žiibi goyjinawey",
+ "blankpage": "Moo koonu",
+ "intentionallyblankpage": "Moɲoo woo n' ka hawandi ka tee koonu.",
+ "external_image_whitelist": " #Leave this line exactly as it is<pre>\n#Put regular expression fragments (just the part that goes between the //) below\n#These will be matched with the URLs of external (hotlinked) images\n#Those that match will be displayed as images, otherwise only a link to the image will be shown\n#Lines beginning with # are treated as comments\n#This is case-insensitive\n\n#Put all regex fragments above this line. Leave this line exactly as it is</pre>",
+ "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)",
+ "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",
+ "tags-display-header": "Bangayyan barmay maašeedey ga",
+ "tags-description-header": "Maana šilbayyan timmante",
+ "tags-active-header": "Dirante?",
+ "tags-hitcount-header": "Barmay kanjanteyaŋ?",
+ "tags-active-yes": "Ayyo",
+ "tags-active-no": "Kalaa",
+ "tags-edit": "fasal",
+ "tags-hitcount": "{{PLURAL:$1|Barmay}} $1",
+ "comparepages": "Moɲey deedandi",
+ "compare-page1": "Moo 1",
+ "compare-page2": "Moo 2",
+ "compare-rev1": "Filla 1",
+ "compare-rev2": "Filla 2",
+ "compare-submit": "Deedandi",
+ "compare-invalid-title": "Maaɲoo kaŋ war n'a tabatandi ši boori.",
+ "compare-title-not-exists": "Maaɲoo kaŋ war n'a tabatandi ši bara.",
+ "compare-revision-not-exists": "Fillaa kaŋ war n'a tabatandi ši bara.",
+ "dberr-problems": "Alhaa naŋ! Nungoo woo goo ma dabari šendayyaŋ.",
+ "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.",
+ "htmlform-float-invalid": "Hinnaa kaŋ war n'a tabatandi manti hinna.",
+ "htmlform-int-toolow": "Hinnaa kaŋ war n'a tabanti goo $1 ikaccu cire.",
+ "htmlform-int-toohigh": "Hinnaa kaŋ war n'a tabatandi goo $1 ibeeri boŋ.",
+ "htmlform-required": "Hinnaa ka waažibandi.",
+ "htmlform-submit": "Sanba",
+ "htmlform-reset": "Barmawey taafeeri",
+ "htmlform-selectorother-other": "Tana",
+ "htmlform-no": "Kalaa",
+ "htmlform-yes": "Ayyo",
+ "htmlform-chosen-placeholder": "Suubari foo zaa",
+ "htmlform-cloner-create": "Tonton koyne",
+ "htmlform-cloner-delete": "Kaa",
+ "htmlform-cloner-required": "Nd'ajaase hinna foo ga waažibandi.",
+ "sqlite-has-fts": "$1 nda hantum-timmante ceeci gaakašinay",
+ "sqlite-no-fts": "$1 bila nda hantum-timmante ceeci gaakašinay",
+ "logentry-delete-delete": "$1 {{GENDER:$2|na}} moo $3 tuusu",
+ "logentry-delete-restore": "$1 {{GENDER:$2|na}} moo yeeti $3",
+ "logentry-delete-event": "$1 {{GENDER:$2|na}} diira sahã barmay {{PLURAL:$5|taariki teera $5}} se $3 ga: $4",
+ "logentry-delete-revision": "$1 {{GENDER:$2|na}} diira sahã barmay {{PLURAL:$5|filla $5}} se moo $3 ga: $4",
+ "logentry-delete-event-legacy": "$1 {{GENDER:$2|na}} taariki teerey diira sahã barmay $3 ga",
+ "logentry-delete-revision-legacy": "$1 {{GENDER:$2|na}} fillawey diira sahã barmay moo $3 ga",
+ "logentry-suppress-delete": "$1 {{GENDER:$2|na}} moo $3 tuusu",
+ "logentry-suppress-event": "$1 gundu {{GENDER:$2|ka}} diira sahã barmay {{PLURAL:$5|teera taariki $5}} se $3 ga: $4",
+ "logentry-suppress-revision": "$1 gundu {{GENDER:$2|ka}} diira sahã barmay {{PLURAL:$5|filla $5}} se $3 ga: $4",
+ "logentry-suppress-event-legacy": "$1 gundu {{GENDER:$2|ka}} diira sahã barmay taariki teerey se $3 ga",
+ "logentry-suppress-revision-legacy": "$1 gundu {{GENDER:$2|ka}} diira sahã barmay fillawey se moo $3 ga",
+ "revdelete-content-hid": "gundekuna tugante",
+ "revdelete-summary-hid": "duurandi tugante fasal",
+ "revdelete-uname-hid": "goykawmaa tugante",
+ "revdelete-content-unhid": "gundekuna bangante",
+ "revdelete-summary-unhid": "duurandi bangante fasal",
+ "revdelete-uname-unhid": "goykaw bangante",
+ "revdelete-restricted": "kankamandiyaney kanandi juwalkey ga \\",
+ "revdelete-unrestricted": "kankamandiyaney kaa juwalkey se",
+ "logentry-merge-merge": "$1 na $3 {{GENDER:$2|marga}} k'a tee $4 (fillawey hala $5)",
+ "logentry-move-move": "$1 na moo $3 {{GENDER:$2|ganandi}} $4 ga",
+ "logentry-move-move-noredirect": "$1 na moo $3 {{GENDER:$2|ganandi}} $4 ga bila nd'a ma kuubiyan foo naŋ",
+ "logentry-move-move_redir": "$1 na moo $3 {{GENDER:$2|ganandi}} $4 ga kuubiyan boŋ",
+ "logentry-move-move_redir-noredirect": "$1 na moo $3 {{GENDER:$2|ganandi}} $4 ga kuubiyan boŋ bila nd'a ma kuubiyan naŋ",
+ "logentry-patrol-patrol": "$1 na filla $4 {{GENDER:$2|šilbay}} moo $3 se k'a tee kurante",
+ "logentry-patrol-patrol-auto": "Nga boŋše no $1 na filla $4 {{GENDER:$2|šilbay}} moo $3 se k'a tee kurante",
+ "logentry-newusers-newusers": "Goykaw kontu $1 n' ka {{GENDER:$2|teendi}}",
+ "logentry-newusers-create": "Goykaw kontu $1 n' ka {{GENDER:$2|teendi}}",
+ "logentry-newusers-create2": "$1 n' ka goykaw kontu $3 {{GENDER:$2|tee}}",
+ "logentry-newusers-byemail": "$1 n' ka goykaw kontu $3 {{GENDER:$2|tee}} nd'a na šennikufal sanba bataga ra \\",
+ "logentry-newusers-autocreate": "Goykaw kontu $1 n' ka {{GENDER:$2|tee}} nga boŋše",
+ "logentry-rights-rights": "$1 na kondayzetaray {{GENDER:$2|barmay}} $3 se, ka $4 naŋ ka $5 dam",
+ "logentry-rights-rights-legacy": "$1 na kondayzetaray {{GENDER:$2|barmay}} $3 se",
+ "logentry-rights-autopromote": "$1 sahãa n' ka {{GENDER:$2|tonton}} nga boŋše, ka hun $4 ga ka tee $5",
+ "logentry-upload-upload": "$1 na $3 {{GENDER:$2|zijandi}}",
+ "logentry-upload-overwrite": "$1 na dumi taaga {{GENDER:$2|zijandi}} $3 se",
+ "logentry-upload-revert": "$1 na $3 {{GENDER:$2|zijandi}}",
+ "rightsnone": "(baffoo)",
+ "revdelete-summary": "duurandi fasal",
+ "feedback-adding": "Goo ma willandi tonton moɲoo ga…",
+ "feedback-bugcheck": "A boori! Koroši de wala woo manti [hasaraw bayrandi $1] affaa. \\",
+ "feedback-bugnew": "Ay n'a koroši. Hasaraw bayrandi sanba",
+ "feedback-bugornote": "Nda war soolu ka dabari šenday šilbay ka tonton, [$1 hasaraw bayrandi hantum].\nNd'a manti woo, war ga hin ka goy nda takkada faalaa ne ganda. War laasaaboo ka tonton \"[$3 $2]\" moɲoo ga, war goykawmaaɲoo bande.",
+ "feedback-cancel": "Naŋ",
+ "feedback-close": "A ben",
+ "feedback-error1": "Firka: hunyan šibayante porogaram hantumyan gunaridoo (API) ga",
+ "feedback-error2": "Firka: fasalyan kaŋ",
+ "feedback-error3": "Firka: Zaabi kul ši hun API do",
+ "feedback-message": "Alhabar:",
+ "feedback-subject": "Teekaw",
+ "feedback-submit": "Sanba",
+ "feedback-thanks": "Foo nda goy! War willandoo n' ka wallafandi \"[$2 $1]\" moɲoo ga.",
+ "searchsuggest-search": "Ceeci",
+ "searchsuggest-containing": "goo nda…",
+ "api-error-badaccess-groups": "War ši nda fondo ka tukey zijandi wikiyoo woo ga.",
+ "api-error-badtoken": "Kunahere firka: Tokore laala.",
+ "api-error-copyuploaddisabled": "URL zijandiyan n' ka kay feršikaa woo ga.",
+ "api-error-duplicate": "{{PLURAL:$1|ti [ti tuku tana $2]}} kaŋ ga bara interneti nungoo ga ka ben nda gundakuna follokaa da.",
+ "api-error-duplicate-archive": "{{PLURAL:$1|ti [ti tuku tana $2]}} kaŋ ga bara interneti nungoo ga ka ben nda gundakuna follokaa da, amma {{PLURAL:$1|an' ka|in' ka}} tuusandi.",
+ "api-error-duplicate-archive-popup-title": "Fillayan {{PLURAL:$1|tukoo kaŋ n' ka|tukey kaŋ n' ka}} tuusandi ka ben.",
+ "api-error-duplicate-popup-title": "Fillayan {{PLURAL:$1|tukoo|tukey}}.",
+ "api-error-empty-file": "Tukoo kaŋ war n'a sanba mma koonu.",
+ "api-error-emptypage": "Boro ši hin ka moo taaga, koonuyaŋ tee.",
+ "api-error-fetchfileerror": "Kunahere firka: Haya foo mana boori tuku zaayan waate.",
+ "api-error-fileexists-forbidden": "Tuku nda \"$1\" maa ga bara ka ben, nda haya ši hin ka hantumandi a boŋ.",
+ "api-error-fileexists-shared-forbidden": "Tuku nda \"$1\" maa ga bara ka ben tuku jišidoo žemnate ra, nda haya ši hin ka hantumandi a boŋ.",
+ "api-error-file-too-large": "Tukoo kaŋ war n'a sanba mma hansa ka beeri.",
+ "api-error-filename-tooshort": "Tukumaaɲoo ga hansa ka duura.",
+ "api-error-filetype-banned": "Tuku dumoo woo n' ka barrandi.",
+ "api-error-filetype-banned-type": "$1 {{PLURAL:$4|manti tuku dumi duɲante|manti tuku dumi duɲanteyaŋ}}. {{PLURAL:$3|Tuku dumi ti|Tuku dumi ti}} $2 ka duɲe.",
+ "api-error-filetype-missing": "Dobuyan foo ga kuma tukumaaɲoo ra.",
+ "api-error-hookaborted": "Dobuyan foo na barmayyanoo kaŋ war ceeci k'a tee say.",
+ "api-error-http": "Kunahere firka: Ši hin ka dobu feršikaa ga.",
+ "api-error-illegal-filename": "Tukumaaɲoo ši nda fondo.",
+ "api-error-internal-error": "Kunahere firka: Haya foo mana boori kaŋ war ga soobay ka haya zijandi wikiyoo ga.",
+ "api-error-invalid-file-key": "Kunahere firka: Tukoo mana duwandi waati-duura jišidoo ra.",
+ "api-error-missingparam": "Kunahere firka: Kayandiyan hãantey ga kuma.",
+ "api-error-missingresult": "Kunahere firka: Mana hin ka tabatandi wala bereyanoo tee ka boori.",
+ "api-error-mustbeloggedin": "War ga hima ka huru to tukey zijandey. \\",
+ "api-error-mustbeposted": "Kunahere firka: Hãayan ga HTTP WALLAFIYAN waažibandi. \\",
+ "api-error-noimageinfo": "Zijandiyanoo boori, amma feršikaa man'ir noo alhabar kul tukoo ga.",
+ "api-error-nomodule": "Kunahere firka: Zijandiyan dunbu kul mana kayandi.",
+ "api-error-ok-but-empty": "Kunahere firka: Zaabi kul ši hun feršikaa do.",
+ "api-error-overwrite": "Boro ši hin ka hantum tuku barante boŋ.",
+ "api-error-stashfailed": "Kunahere firka: Feršika mongu ka waati-duura tuku yeeti.",
+ "api-error-publishfailed": "Kunahere firka: Feršika mongu ka waati-duura tuku wallafi.",
+ "api-error-stasherror": "Firka bangay kaŋ tuku ga zijandi titilaa boŋ.",
+ "api-error-stashedfilenotfound": "Tuku titilantaa mana duwandi waatoo kaŋ boro ceeci k'a zijandi ka hun titilaa ga.",
+ "api-error-stashpathinvalid": "Fondaa kaŋ ga tuku titilantaa hima ka duwandi ši boori.",
+ "api-error-stashfilestorage": "Firka bangay waatoo kaŋ tukoo ga jisandi titilaa ra.",
+ "api-error-stashzerolength": "Feršikaa mana hin ka tukoo deke, zama nga kuuyanoo ti yaada.",
+ "api-error-stashnotloggedin": "War ga hima ka tukey gaabu zijandi titilaa ra.",
+ "api-error-stashwrongowner": "War ši tukoo din may kaŋ war cindi k'a ceeci titilaa ra.",
+ "api-error-stashnosuchfilekey": "Tukoo kaŋ war cindi k'a ceeci titilaa ra ši bara.",
+ "api-error-timeout": "Feršikaa mana tuuru waatoo kaŋ ga hima ra.",
+ "api-error-unclassified": "Firka šibayante bangay.",
+ "api-error-unknown-code": "Firka šibayante: \"$1\".",
+ "api-error-unknown-error": "Kunahere firka: Haya foo mana boori kaŋ war ceeci ka war tukoo zijandi.",
+ "api-error-unknown-warning": "Yaamar šibayante: \"$1\".",
+ "api-error-unknownerror": "Firka šibayante: \"$1\".",
+ "api-error-uploaddisabled": "Zijandiyan n' ka kay wikiyoo woo ga. \\",
+ "api-error-verification-error": "A ga hin ka tee tukoo woo laybu, wal'a goo nda dobuyan laala.",
+ "duration-seconds": "{{PLURAL:$1|Segondu}} $1",
+ "duration-minutes": "{{PLURAL:$1|Miniti}} $1",
+ "duration-hours": "{{PLURAL:$1|Guuru}} $1",
+ "duration-days": "{{PLURAL:$1|Zaari}} $1",
+ "duration-weeks": "{{PLURAL:$1|Jirbiyye}} $1",
+ "duration-years": "{{PLURAL:$1|Jiiri}} $1",
+ "duration-decades": "{{PLURAL:$1|Jiiriwoy}} $1",
+ "duration-centuries": "{{PLURAL:$1|Jiirizangu}} $1",
+ "duration-millennia": "{{PLURAL:$1|Jiiriženber}} $1",
+ "rotate-comment": "Biyoo n' ka kuubi nda {{PLURAL:$1|degere}} $1 montar diray bande",
+ "limitreport-title": "Fesu-fesukaw alhaali bayahaya:",
+ "limitreport-cputime": "Ordinater lakkal waati goyyan \\",
+ "limitreport-cputime-value": "{{PLURAL:$1|segondu}} $1",
+ "limitreport-walltime": "Waati-cimi goyyan",
+ "limitreport-walltime-value": "{{PLURAL:$1|segondu}} $1",
+ "limitreport-ppvisitednodes": "Ordinater jine-lakkal na sankay-ordinater kabu guna",
+ "limitreport-ppvisitednodes-value": "$1/$2",
+ "limitreport-ppgeneratednodes": "Ordinater jine-lakkal na sankay-ordinater kabu tee",
+ "limitreport-ppgeneratednodes-value": "$1/$2",
+ "limitreport-postexpandincludesize": "Feeriyan-banda goo nd'azzaati",
+ "limitreport-postexpandincludesize-value": "{{PLURAL:$2|Cebsi}} $1/$2",
+ "limitreport-templateargumentsize": "Leeti yeedi azzaati",
+ "limitreport-templateargumentsize-value": "{{PLURAL:$2|Cebsi}} $1/$2",
+ "limitreport-expansiondepth": "Feeriyan kul iguusa",
+ "limitreport-expansiondepth-value": "$1/$2",
+ "limitreport-expensivefunctioncount": "Fesu-fesukaw goymee kabu caada",
+ "limitreport-expensivefunctioncount-value": "$1/$2",
+ "expandtemplates": "Leetey feeri",
+ "expand_templates_intro": "Moo cerecerantaa ga hantum zaa nd'a ga filla ka leetey kul feeri a ra.\nA ga fesu-fesukaw goymee gaakašinantey da feeri sanda\n<code><nowiki>{{</nowiki>#language:…}}</code> and variables like\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nNda cimi a ga haya kul feeri kaŋ ga bara holgu-hinka game.",
+ "expand_templates_title": "Wanga maa, {{FULLPAGENAME}} se, nda tana:",
+ "expand_templates_input": "Damhaya hantum:",
+ "expand_templates_output": "Hunyan",
+ "expand_templates_xml_output": "XML fattari",
+ "expand_templates_html_output": "HTML fattari gani",
+ "expand_templates_ok": "Ayyo",
+ "expand_templates_remove_comments": "Daarawey kaa",
+ "expand_templates_remove_nowiki": "<nowiki> Kanjey kaa hunyanoo ra",
+ "expand_templates_generate_xml": "XML fesu-fesuyan tuuri cebe",
+ "expand_templates_generate_rawhtml": "HTML gani cebe",
+ "expand_templates_preview": "Moofur",
+ "pagelanguage": "Moo šenni suubakaw",
+ "pagelang-name": "Moo",
+ "pagelang-language": "Šenni",
+ "pagelang-use-default": "Goy nda tilasu šenni",
+ "pagelang-select-lang": "Šenni suuba",
+ "right-pagelang": "Moo šenni barmay",
+ "action-pagelang": "Moo šennoo barmay",
+ "log-name-pagelang": "Šenni taariki barmay",
+ "log-description-pagelang": "Woo ti barmay taariki moo šenney se.",
+ "logentry-pagelang-pagelang": "$1 na moo šenni {{GENDER:$2|barmay}} $3 se ka hun $4 ga ka tee $5.",
+ "default-skin-not-found": "Aywaa! Tilasu kuuroo kaŋ tabatandi war wikiyoo se <code dir=\"ltr\">$wgDefaultSkin</code> ra sanda <code>$1</code>, ši bara.\n\nWar sinjiyanoo ga hima ka bara nda kuurawey wey. Guna [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] ka duu alhabar taka kaŋ nda boro ga hin k'i tunandi nda tilasoo suuba.\n\n$2\n\n; Nda war mana gay ka MediaWiki sinji:\n: A ga tee war n'a sinji \"git\" ga, wala war n'a zaa za aššil ašariyaa ga dabari tana foo. Woo goo naataa ra. Ceeci ka kuuruyan sinji [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] ga, nda:\n:* Zumandiyan [https://www.mediawiki.org/wiki/Download tarball installer], kaŋ ga kaa nda kuuru nda dobuyan booboyaŋ. War ga hin ka <code>kuurey/</code> fooloɲaŋoo berandi nd'a dobu ka hun a ga.\n:* <code>mediawiki/skins/*</code> Jišidogey affoo fillayan \"git\" ra ka huru <code dir=\"ltr\">skins/</code> fooloɲaŋoo ra MediaWiki sinjiyanoo se.\n: Woo teeroo ši ganji war \"git\" jišidogoo nakaši nda war ti MediaWiki cinakaw.\n\n; Nda war mana gay ka MediaWiki taagandi:\n: MediaWiki 1.24 wala dumi taagante ši kuuru sinjnatey tunandi koyne ngi boŋše (guna [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). War ga hin ka zuuwey wey dobu ka <code>LocalSettings.php</code> ra ka kuuru sinjantey kul tunandi:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Nda war mana gay ka <code>LocalSettings.php</code> barmay:\n: Kuuru maaɲey koroši boryo hantum firkawey se.",
+ "default-skin-not-found-no-skins": "Ayway! Tilasu kuuroo wikiyoo se, kaŋ tabatandi <code>$wgDefaultSkin</code> ra sanda <code>$1</code>, si bara.\n\nWar ši nda kuuru sinjante kulyaŋ.\n; Nda war mana gay ka MediaWiki sinji wala k'a taagandi:\n: A ga hin ka tee war sinja \"git\" ga, wal'a zaa za aššil ašariyaa do nda dabari tana foo. Woo goo naataa ra. MediaWiki 1.24 nd'itaaga ši nda kuuruyaŋ kul jišidoo beeroo ta. Ceeci ka kuuruyaŋ sinji ka hun [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory] ga, nda:\n:* Zumandi [https://www.mediawiki.org/wiki/Download tarball installer], kaŋ ga kaa nda kuuru nda dobu booboyaŋ. War ga hin ka <code>kuurey/</code> fooloɲaŋoo berandi ka hun a ga.\n:* <code>mediawiki/Kuurey/*</code> jišidogey fillayan \"git\" ra ka huru <code dir=\"ltr\">kuurey/</code> fooloɲaŋoo ra war MediaWiki sinjiyanoo se.\n: Woo teeroo ši hima ka war \"git\" jišidogoo goy alhaalo barmay nda war ti MediaWiki cinakaw. Guna [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] ka dii taka kaŋ nda boro ga hin ka kuurey tunandi nda tilasoo suuba.\n\\",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (tunante)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''n' ka kay''')",
+ "mediastatistics": "Hẽenandihaya kabu-izey",
+ "mediastatistics-summary": "Kabu-izey tuku dumi zijantey ga. Tukoo dumi kul ikokorantaa hinne bara woo ra. Tukey dumi žeeney nda tuusantey faya ka hun i ra.",
+ "mediastatistics-nfiles": "$1 ($2%)",
+ "mediastatistics-nbytes": "{{PLURAL:$1|Cebsi $1}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME dumi",
+ "mediastatistics-table-extensions": "Dobuyaney hinantey",
+ "mediastatistics-table-count": "Tuku hinnaa",
+ "mediastatistics-table-totalbytes": "Azzaati margante",
+ "mediastatistics-header-unknown": "Šibayante",
+ "mediastatistics-header-bitmap": "Bitmap biyey",
+ "mediastatistics-header-drawing": "Biižeerey (tonbi biyey)",
+ "mediastatistics-header-audio": "Jinde",
+ "mediastatistics-header-video": "Widewoyaŋ",
+ "mediastatistics-header-multimedia": "Hẽenandi haya tiŋa",
+ "mediastatistics-header-office": "Biro",
+ "mediastatistics-header-text": "Hantumhaya",
+ "mediastatistics-header-executable": "Teerahayey",
+ "mediastatistics-header-archive": "Takari kankamantey",
+ "json-warn-trailing-comma": "I na {{PLURAL:$1|golbi}} bunnante $1 kaa JSON ra",
+ "json-error-unknown": "Boŋhaway foo bara JSON bande. Firka: $1",
+ "json-error-depth": "A n' ka margari guusuyan fellaa hoo",
+ "json-error-state-mismatch": "JSON ši boori wal'a laybu",
+ "json-error-ctrl-char": "Dabari harfu firka, a ga tee gundu hantumoo mana boori",
+ "json-error-syntax": "Nahaw firka",
+ "json-error-utf8": " UTF-8 harfu laybanteyaŋ, a ga tee gundu hantumoo mana boori",
+ "json-error-recursion": "Feeriyan foo wala hinna tana ga filla kaŋ hinna kaŋ gundu ašariyaa ga hantumandi",
+ "json-error-inf-or-nan": "NAN wala INF hinna foo wal'ibooboyaŋ goo hinnaa ra kaŋ ašariyaa ga hantumandi",
+ "json-error-unsupported-type": "Hinna noondi kaŋ dumoo ašariya ši hin ka hantumandi"
+}
diff --git a/languages/i18n/sg.json b/languages/i18n/sg.json
index f44eb450..b51f3d52 100644
--- a/languages/i18n/sg.json
+++ b/languages/i18n/sg.json
@@ -1,245 +1,233 @@
{
- "@metadata": {
- "authors": [
- "Ice201 (on sg.wikipedia.org)",
- "Mdkidiri"
- ]
- },
- "tog-underline": "Gbënëngö-gbê",
- "tog-hideminor": "Hônde âkêtê lönzïngö-sû sô asï fadê na yâ tî gbâsû",
- "tog-hidepatrolled": "Hônde âlönzïngö-sû sô asï na hönngö na yâ tî gbâsû",
- "tog-newpageshidepatrolled": "Na pöpö tî âlêmbëtï nî, hônde âla sô a yeke bâa ndo daä.",
- "tog-extendwatchlist": "Gbara molongö tî bängö-pekô sï atanda gï âfinî âsänzëmä pëpe me âsänzëmä kûê kûê.",
- "tog-usenewrc": "Sâra kua na âfinî sänzëmä sô alônzi ângbêre nî (ahûnda Javascript)",
- "tog-numberheadings": "Sû nömörö bîakü bîakü na terê tî âlisurä",
- "tog-showtoolbar": "Fa motarâka tî sepesû (ahûnda Javascript)",
- "tog-editondblclick": "Pîka kpêkê ûse tî sepe lêmbëtï (ahûnda Javascript)",
- "tog-editsectiononrightclick": "Pîka kötï kpêkê na ndö tî lisurä sï mo sepe nî (ahûnda Javascript)",
- "tog-rememberpassword": "Da bê na sênyîmbâ tî mbï (asï {{PLURAL:$1|längö|längö}}) $1",
- "tog-watchcreations": "Âlêmbëtï sô mbï sâra, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
- "tog-watchdefault": "Âlêmbëtï sô mbï sepe, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
- "tog-watchmoves": "Âlêmbëtï sô mbï sanzêe ïrï nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
- "tog-watchdeletion": "Âlêmbëtï sô mbï woza nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
- "tog-minordefault": "Tî sêtîa nî, sûngi âsepesû kûê töngana kêtê sepesû",
- "tog-previewontop": "Tanda piabängö-nî na ndöbê tî zuka tî sepesû",
- "tog-previewonfirst": "Fa piabängö kôzo sepesû",
- "tog-enotifwatchlistpages": "¨To na mbï mbëtïsînga töngana mbênî lêmbetï asanzêe na yâ tî molongö tî mbï tî bängö-pekô.",
- "tog-enotifusertalkpages": "To na mbï mbëtïsînga töngana mbênî lêmbëtë asanzêe na yâ tî dalisoro tî mbï",
- "tog-enotifminoredits": "To na mbï mbëtïsînga lâkûê sô mbênî kêtê sänzëmä asï na yâ tî âlêmbëtï tî mbï.",
- "tog-enotifrevealaddr": "Fa lindosînga tî mbï na yâ tî âmbëtïsînga tî zënngö-zo",
- "tog-shownumberswatching": "Fa wüngö tî ânyîmbâ sô ayeke bâa lêmbëtï sô",
- "tog-oldsig": "Këkërë sô ayeke daä awe:",
- "tog-fancysig": "Mû kekere nî töngana sêngê gbâsû tî Wïkï (sân taâ gbê)",
- "underline-always": "Lâkûê",
- "underline-never": "Lâ ôko pëpe",
- "underline-default": "Ketîa ngbondö tî kpëlisimbä",
- "editfont-style": "Fasöon tî gbâgerêsû tî sepesû nî",
- "editfont-default": "Ketîa tî kpëlitondo",
- "editfont-monospace": "Gbâgerêsû tî kpengü fündä",
- "editfont-sansserif": "Gbâgerêsû tî kûyû garê",
- "editfont-serif": "Gbâgerêsû na kîndâ",
- "sunday": "lâyenga",
- "monday": "bïkuako",
- "tuesday": "bïkuase",
- "wednesday": "bïkuatâ",
- "thursday": "bïkuasïö",
- "friday": "bïkuakü",
- "saturday": "lâpôsö",
- "sun": "lây",
- "mon": "bk1",
- "tue": "bk2",
- "wed": "bk3",
- "thu": "bk4",
- "fri": "bk5",
- "sat": "lâp",
- "january": "Nyenye",
- "february": "Fulundïgi",
- "march": "Mbängü",
- "april": "Ngubë",
- "may_long": "Bêläwü",
- "june": "Föndo",
- "july": "Lengua",
- "august": "Kükürü",
- "september": "Mvuka",
- "october": "Ngberere",
- "november": "Nabändüru",
- "december": "Kakawuka",
- "january-gen": "Nyenye",
- "february-gen": "Fulundïgi",
- "march-gen": "Mbängü",
- "april-gen": "Ngubä",
- "may-gen": "Bâläwü",
- "june-gen": "Föndo",
- "july-gen": "Lengua",
- "august-gen": "Kükürü",
- "september-gen": "Mvuka",
- "october-gen": "Ngberere",
- "november-gen": "Nabändüru",
- "december-gen": "Kakawuka",
- "jan": "Nye",
- "feb": "Ful",
- "mar": "Mba",
- "apr": "Ngu",
- "may": "Bêl",
- "jun": "Fön",
- "jul": "Len",
- "aug": "Kük",
- "sep": "Mvu",
- "oct": "Ngb",
- "nov": "Nab",
- "dec": "Kak",
- "pagecategories": "{{PLURAL:$1|Fündä|Âfundä}}",
- "category_header": "Âlâmbëtï na yâ tî fündä « $1 »",
- "subcategories": "gbefündä",
- "category-media-header": "Kuru tî kôtevungä na yâ tî fündä \"$1\"",
- "category-empty": "\"Fündä sô ayeke na lêmbëtï, wala gbefündä, wala kuru tî kôtevungä, ôko pëpe.\"",
- "hidden-categories": "Höndëngö {{PLURAL:$1|fündä|âfündä}}",
- "hidden-category-category": "Âhöndëngö âf¨¨undä",
- "listingcontinuesabbrev": "(pekô nî)",
- "index-category": "Âlêmbëtï sô akpo nî",
- "noindex-category": "Âlêmbëtï sô a kpö nî pëpe",
- "broken-file-category": "Âlêmbëtï sô ayeke na âfängö gbê tî kuru",
- "about": "Na ndö tî...",
- "article": "Lêmbëtï tî münä",
- "newwindow": "(avula finî döpulä)",
- "cancel": "Woza",
- "moredotdotdot": "Mbênî...",
- "mypage": "Lêmbëtï tî mbï",
- "mytalk": "Lisoro tî mbï",
- "anontalk": "Lisoro na lindo IP sô",
- "navigation": "Simba",
- "and": "&#32;na",
- "qbfind": "Gi",
- "qbbrowse": "Hasa",
- "qbedit": "Sepe",
- "qbpageoptions": "Lêmbëtï sô",
- "qbmyoptions": "Âlêmbëtï tî mbï",
- "faq": "Âhûnda",
- "faqpage": "Project:Âhûnda",
- "vector-action-addsection": "Zîa mbênî lilö daä",
- "vector-action-delete": "Lungûla",
- "vector-action-move": "Sanzêe ïrï",
- "vector-action-protect": "Funga",
- "vector-action-undelete": "Kîri na nî",
- "vector-action-unprotect": "Sanzêe fungä",
- "vector-view-create": "Seka",
- "vector-view-edit": "Sepe",
- "vector-view-history": "Tanda mbai nî",
- "vector-view-view": "Dîko",
- "vector-view-viewsource": "Fa ligbî nî",
- "actions": "Kua",
- "namespaces": "Pöpö tî âïrï",
- "variants": "Âmbênî marä nî",
- "errorpagetitle": "Yûndo",
- "returnto": "Kîri na ndö tî lêmbëtï $1.",
- "tagline": "Alöndö na {{SITENAME}}",
- "help": "Za mbï",
- "search": "Gi",
- "searchbutton": "Gi",
- "go": "Bâa",
- "searcharticle": "Dîko",
- "history": "Mbai tî lêmbëtï nî",
- "history_short": "mbai",
- "updatedmarker": "afinima ngbêreyê sô mbï sï daä sô",
- "printableversion": "Mbâlê tî pete na sasango",
- "permalink": "Kpengü gbê tî lêmbëtï nî",
- "print": "Pete na sasango",
- "view": "Tändä",
- "edit": "Sepe",
- "create": "Seka",
- "editthispage": "Sepe lêmbëtï sô",
- "create-this-page": "Seka lêmbëtï sô",
- "delete": "Lungûla",
- "deletethispage": "Lungûla lêmbëtï sô",
- "undelete_short": "Kîri na {{PLURAL:$1|sepesû ôko|âsepesû $1}}",
- "viewdeleted_short": "Bâa {{PLURAL:$1|sepsesû| âsepesû $1}} sô awoza nî awe sô.",
- "talkpagelinktext": "tene tënë",
- "personaltools": "Âyêkua tî wanî",
- "talk": "Lisoro",
- "views": "Tändä",
- "toolbox": "Gbâyêkua",
- "otherlanguages": "Na mbênî âyângâ",
- "jumpto": "Gue na:",
- "jumptonavigation": "Simba",
- "jumptosearch": "Gi",
- "aboutsite": "Na ndö tî {{SITENAME}}",
- "aboutpage": "Project:Na ndö tî...",
- "currentevents": "Âsango",
- "currentevents-url": "Project:Âsango",
- "disclaimers": "Zïngö-lê",
- "disclaimerpage": "Project:Zïngö-lê",
- "mainpage": "Gä nzönî",
- "mainpage-description": "Gä nzönî",
- "portal": "Âsëwä",
- "portal-url": "Project:Gä nzönî",
- "privacy": "Ndarä tî bätängö vivîi tënë",
- "privacypage": "Project:Vivîi tënë",
- "ok": "Nî laâ!",
- "retrievedfrom": "Awara na yâ tî \"$1\"",
- "editsection": "Sepe",
- "editold": "sepe",
- "editsectionhint": "Sepe surä nî $1",
- "site-atom-feed": "süängö Atom tî $1",
- "red-link-title": "$1 (lêmbëtï sô ayeke daä äpe)",
- "nstab-main": "Lêmbëtï",
- "nstab-user": "Lêmbëtï tî Nyîmbâ",
- "nstab-special": "Lêmbëtï ndê",
- "yourpassword": "Pafungûla",
- "nav-login-createaccount": "Linda wala Zî kônde",
- "userlogin": "Linda wala Zî kônde",
- "logout": "Sïgî",
- "userlogout": "Sigî",
- "watchthis": "Bâa pekô tî lêmbëtï sô",
- "anoneditwarning": "'''Ânge:''' Mô de mo linda äpëe. Fade a sû lindosînga IP tî mo na mbai tî lêmbëtï sô.",
- "editing": "Sëpëngö $1",
- "editingsection": "Sëpëngö $1 (surä)",
- "editundo": "woza",
- "searchresults": "Pendâkua tî gïngö-ndo nî",
- "searchresults-title": "Pendâkua tî gïngö-ndo tëtî \"$1\"",
- "shown-title": "Fa $1 {{PLURAL:$1|pendâkua |âpendâkua}} nî alîngbi na lêmbëtï ôko ôko.",
- "search-result-size": "$1 ({{PLURAL:$2|1 mbupa|$2 âmbupa}})",
- "mypreferences": "tandä tî mbï",
- "prefs-rc": "Tanga ti yé so a gbion ya ni",
- "yournick": "Nyîmbâ:",
- "editinguser": "Mo fa na mbi nyîmbâ '''[[User:$1|$1]]''' $2",
- "recentchanges": "Ndângbâ sänzëmä",
- "recentchangeslinked-toolbox": "Bängö pekô tî âgbegbêe lêmbëtï",
- "upload": "Yâlamû mbênî kuru",
- "watchthisupload": "bâa lo ânde sô lêmbëtï",
- "randompage": "Lêmbëtï waâwa",
- "brokenredirects-edit": "fa na mbi",
- "nbytes": "$1 {{PLURAL:$1|limbe|âlimbe}}",
- "watchlist": "Molongö tî bängö pekô",
- "watch": "bâa pekô nî",
- "watchthispage": "bâa lo ânde sô lêmbëtï",
- "blanknamespace": "(Tö)",
- "mycontris": "Kua tî mbï",
- "whatlinkshere": "Gbegbêe lêmbëtï",
- "contribslink": "âkua tî ânyîmbâ",
- "move-watch": "bâa lo ânde sô lêmbëtï",
- "tooltip-pt-login": "Ayeke nzönî mo linda, atâa sô a kambaga mo äpe.",
- "tooltip-pt-logout": "sïgî",
- "tooltip-ca-talk": "Lisoro na ndö tî münä tî lêmbëtï sô",
- "tooltip-ca-edit": "Mo lîngbi tî sepe lêmbëtï sô. Nzönî mo pete kûtu piabâa tîtene mo pia mo bâa nî awe sï mo sûnga nî.",
- "tooltip-ca-history": "Ângbêre mbâlê tî lêmbëtï sô (na ïrï tî âwasüngö-nî)",
- "tooltip-search": "Gi {{SITENAME}}",
- "tooltip-search-fulltext": "Gi âlêmbëtï sô ayeke na gbâsû sô",
- "tooltip-p-logo": "Gue na Tölêmbëtï",
- "tooltip-n-mainpage": "Gue na tölêmbëtï Gä nzönî.",
- "tooltip-n-mainpage-description": "Gue na tölêmbëtï Gä nzönî.",
- "tooltip-n-portal": "Tënë tî pialö nî",
- "tooltip-n-currentevents": "Wara sango tî âpäsëmä tî fafadësô na gündâ nî.",
- "tooltip-n-recentchanges": "Molongö tî ândângbâ sänzëma tî yâ tî Wïkï nî",
- "tooltip-n-randompage": "Tanda mbênî lêmbëtï waâa",
- "tooltip-n-help": "Za mbï",
- "tooltip-t-whatlinkshere": "Molongö tî âlêmbëtï sô kûê agbë gbê na lo sô.",
- "tooltip-t-recentchangeslinked": "Molongö tî ândângbâ sänzëmä tî âlêmbëtï sô agbë gbê na lo-sô.",
- "tooltip-t-upload": "To kuru na wavungä",
- "tooltip-t-specialpages": "Molongö tî âlêmbëtï sô kûê ayeke ndê",
- "tooltip-t-print": "Mbâlê tî lêmbëtï sô tî pete na sasango",
- "tooltip-t-permalink": "Kpengü gbê na mbâlê tî lêmbëtï nî sô",
- "tooltip-ca-nstab-main": "Bâa lêmbëtï tî münä nî",
- "others": "mbênî",
- "bad_image_list": "Funda nî ayeke töngasô:\nGï âkâmba tî molongö (sô atö ndâ nî na *) laâ a yeke bâa lêgë nî. Kôzo gbê tî yâ tî kâmba ôko ôko adu tî gbùe na mbênî kpäkë kuru. Âtanga tî âgbê sô na yâ tî ôko kâmba nî sô, a bâa nî töngana yê ndê, sô ^tî tene, töngana âlêmbëtï sô kuru nî alîngbi tî tua daä na gbegbê nî.",
- "specialpages": "Âlêmbëtï sô ayeke ndê"
+ "@metadata": {
+ "authors": [
+ "Ice201 (on sg.wikipedia.org)",
+ "Mdkidiri"
+ ]
+ },
+ "tog-underline": "Gbënëngö-gbê",
+ "tog-hideminor": "Hônde âkêtê lönzïngö-sû sô asï fadê na yâ tî gbâsû",
+ "tog-hidepatrolled": "Hônde âlönzïngö-sû sô asï na hönngö na yâ tî gbâsû",
+ "tog-newpageshidepatrolled": "Na pöpö tî âlêmbëtï nî, hônde âla sô a yeke bâa ndo daä.",
+ "tog-extendwatchlist": "Gbara molongö tî bängö-pekô sï atanda gï âfinî âsänzëmä pëpe me âsänzëmä kûê kûê.",
+ "tog-usenewrc": "Sâra kua na âfinî sänzëmä sô alônzi ângbêre nî (ahûnda Javascript)",
+ "tog-numberheadings": "Sû nömörö bîakü bîakü na terê tî âlisurä",
+ "tog-showtoolbar": "Fa motarâka tî sepesû (ahûnda Javascript)",
+ "tog-editondblclick": "Pîka kpêkê ûse tî sepe lêmbëtï (ahûnda Javascript)",
+ "tog-editsectiononrightclick": "Pîka kötï kpêkê na ndö tî lisurä sï mo sepe nî (ahûnda Javascript)",
+ "tog-watchcreations": "Âlêmbëtï sô mbï sâra, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
+ "tog-watchdefault": "Âlêmbëtï sô mbï sepe, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
+ "tog-watchmoves": "Âlêmbëtï sô mbï sanzêe ïrï nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
+ "tog-watchdeletion": "Âlêmbëtï sô mbï woza nî, zîa nî kûê na yâ tî molongö tî mbï tî bängö-pekô.",
+ "tog-minordefault": "Tî sêtîa nî, sûngi âsepesû kûê töngana kêtê sepesû",
+ "tog-previewontop": "Tanda piabängö-nî na ndöbê tî zuka tî sepesû",
+ "tog-previewonfirst": "Fa piabängö kôzo sepesû",
+ "tog-enotifwatchlistpages": "¨To na mbï mbëtïsînga töngana mbênî lêmbetï asanzêe na yâ tî molongö tî mbï tî bängö-pekô.",
+ "tog-enotifusertalkpages": "To na mbï mbëtïsînga töngana mbênî lêmbëtë asanzêe na yâ tî dalisoro tî mbï",
+ "tog-enotifminoredits": "To na mbï mbëtïsînga lâkûê sô mbênî kêtê sänzëmä asï na yâ tî âlêmbëtï tî mbï.",
+ "tog-enotifrevealaddr": "Fa lindosînga tî mbï na yâ tî âmbëtïsînga tî zënngö-zo",
+ "tog-shownumberswatching": "Fa wüngö tî ânyîmbâ sô ayeke bâa lêmbëtï sô",
+ "tog-oldsig": "Këkërë sô ayeke daä awe:",
+ "tog-fancysig": "Mû kekere nî töngana sêngê gbâsû tî Wïkï (sân taâ gbê)",
+ "underline-always": "Lâkûê",
+ "underline-never": "Lâ ôko pëpe",
+ "underline-default": "Ketîa ngbondö tî kpëlisimbä",
+ "editfont-style": "Fasöon tî gbâgerêsû tî sepesû nî",
+ "editfont-default": "Ketîa tî kpëlitondo",
+ "editfont-monospace": "Gbâgerêsû tî kpengü fündä",
+ "editfont-sansserif": "Gbâgerêsû tî kûyû garê",
+ "editfont-serif": "Gbâgerêsû na kîndâ",
+ "sunday": "lâyenga",
+ "monday": "bïkuako",
+ "tuesday": "bïkuase",
+ "wednesday": "bïkuatâ",
+ "thursday": "bïkuasïö",
+ "friday": "bïkuakü",
+ "saturday": "lâpôsö",
+ "sun": "lây",
+ "mon": "bk1",
+ "tue": "bk2",
+ "wed": "bk3",
+ "thu": "bk4",
+ "fri": "bk5",
+ "sat": "lâp",
+ "january": "Nyenye",
+ "february": "Fulundïgi",
+ "march": "Mbängü",
+ "april": "Ngubë",
+ "may_long": "Bêläwü",
+ "june": "Föndo",
+ "july": "Lengua",
+ "august": "Kükürü",
+ "september": "Mvuka",
+ "october": "Ngberere",
+ "november": "Nabändüru",
+ "december": "Kakawuka",
+ "january-gen": "Nyenye",
+ "february-gen": "Fulundïgi",
+ "march-gen": "Mbängü",
+ "april-gen": "Ngubä",
+ "may-gen": "Bâläwü",
+ "june-gen": "Föndo",
+ "july-gen": "Lengua",
+ "august-gen": "Kükürü",
+ "september-gen": "Mvuka",
+ "october-gen": "Ngberere",
+ "november-gen": "Nabändüru",
+ "december-gen": "Kakawuka",
+ "jan": "Nye",
+ "feb": "Ful",
+ "mar": "Mba",
+ "apr": "Ngu",
+ "may": "Bêl",
+ "jun": "Fön",
+ "jul": "Len",
+ "aug": "Kük",
+ "sep": "Mvu",
+ "oct": "Ngb",
+ "nov": "Nab",
+ "dec": "Kak",
+ "pagecategories": "{{PLURAL:$1|Fündä|Âfundä}}",
+ "category_header": "Âlâmbëtï na yâ tî fündä « $1 »",
+ "subcategories": "gbefündä",
+ "category-media-header": "Kuru tî kôtevungä na yâ tî fündä \"$1\"",
+ "category-empty": "\"Fündä sô ayeke na lêmbëtï, wala gbefündä, wala kuru tî kôtevungä, ôko pëpe.\"",
+ "hidden-categories": "Höndëngö {{PLURAL:$1|fündä|âfündä}}",
+ "hidden-category-category": "Âhöndëngö âf¨¨undä",
+ "listingcontinuesabbrev": "(pekô nî)",
+ "index-category": "Âlêmbëtï sô akpo nî",
+ "noindex-category": "Âlêmbëtï sô a kpö nî pëpe",
+ "broken-file-category": "Âlêmbëtï sô ayeke na âfängö gbê tî kuru",
+ "about": "Na ndö tî...",
+ "article": "Lêmbëtï tî münä",
+ "newwindow": "(avula finî döpulä)",
+ "cancel": "Woza",
+ "moredotdotdot": "Mbênî...",
+ "mypage": "Lêmbëtï tî mbï",
+ "mytalk": "Lisoro tî mbï",
+ "anontalk": "Lisoro na lindo IP sô",
+ "navigation": "Simba",
+ "and": "&#32;na",
+ "qbfind": "Gi",
+ "qbbrowse": "Hasa",
+ "qbedit": "Sepe",
+ "qbpageoptions": "Lêmbëtï sô",
+ "qbmyoptions": "Âlêmbëtï tî mbï",
+ "faq": "Âhûnda",
+ "faqpage": "Project:Âhûnda",
+ "actions": "Kua",
+ "namespaces": "Pöpö tî âïrï",
+ "variants": "Âmbênî marä nî",
+ "errorpagetitle": "Yûndo",
+ "returnto": "Kîri na ndö tî lêmbëtï $1.",
+ "tagline": "Alöndö na {{SITENAME}}",
+ "help": "Za mbï",
+ "search": "Gi",
+ "searchbutton": "Gi",
+ "go": "Bâa",
+ "searcharticle": "Dîko",
+ "history": "Mbai tî lêmbëtï nî",
+ "history_short": "mbai",
+ "updatedmarker": "afinima ngbêreyê sô mbï sï daä sô",
+ "printableversion": "Mbâlê tî pete na sasango",
+ "permalink": "Kpengü gbê tî lêmbëtï nî",
+ "print": "Pete na sasango",
+ "view": "Tändä",
+ "edit": "Sepe",
+ "create": "Seka",
+ "editthispage": "Sepe lêmbëtï sô",
+ "create-this-page": "Seka lêmbëtï sô",
+ "delete": "Lungûla",
+ "deletethispage": "Lungûla lêmbëtï sô",
+ "undelete_short": "Kîri na {{PLURAL:$1|sepesû ôko|âsepesû $1}}",
+ "viewdeleted_short": "Bâa {{PLURAL:$1|sepsesû| âsepesû $1}} sô awoza nî awe sô.",
+ "talkpagelinktext": "tene tënë",
+ "personaltools": "Âyêkua tî wanî",
+ "talk": "Lisoro",
+ "views": "Tändä",
+ "toolbox": "Gbâyêkua",
+ "otherlanguages": "Na mbênî âyângâ",
+ "jumpto": "Gue na:",
+ "jumptonavigation": "Simba",
+ "jumptosearch": "Gi",
+ "aboutsite": "Na ndö tî {{SITENAME}}",
+ "aboutpage": "Project:Na ndö tî...",
+ "currentevents": "Âsango",
+ "currentevents-url": "Project:Âsango",
+ "disclaimers": "Zïngö-lê",
+ "disclaimerpage": "Project:Zïngö-lê",
+ "mainpage": "Gä nzönî",
+ "mainpage-description": "Gä nzönî",
+ "portal": "Âsëwä",
+ "portal-url": "Project:Gä nzönî",
+ "privacy": "Ndarä tî bätängö vivîi tënë",
+ "privacypage": "Project:Vivîi tënë",
+ "ok": "Nî laâ!",
+ "retrievedfrom": "Awara na yâ tî \"$1\"",
+ "editsection": "Sepe",
+ "editold": "sepe",
+ "editsectionhint": "Sepe surä nî $1",
+ "site-atom-feed": "süängö Atom tî $1",
+ "red-link-title": "$1 (lêmbëtï sô ayeke daä äpe)",
+ "nstab-main": "Lêmbëtï",
+ "nstab-user": "Lêmbëtï tî Nyîmbâ",
+ "nstab-special": "Lêmbëtï ndê",
+ "yourpassword": "Pafungûla",
+ "nav-login-createaccount": "Linda wala Zî kônde",
+ "userlogin": "Linda wala Zî kônde",
+ "logout": "Sïgî",
+ "userlogout": "Sigî",
+ "watchthis": "Bâa pekô tî lêmbëtï sô",
+ "anoneditwarning": "'''Ânge:''' Mô de mo linda äpëe. Fade a sû lindosînga IP tî mo na mbai tî lêmbëtï sô.",
+ "editing": "Sëpëngö $1",
+ "editingsection": "Sëpëngö $1 (surä)",
+ "editundo": "woza",
+ "searchresults": "Pendâkua tî gïngö-ndo nî",
+ "searchresults-title": "Pendâkua tî gïngö-ndo tëtî \"$1\"",
+ "shown-title": "Fa $1 {{PLURAL:$1|pendâkua |âpendâkua}} nî alîngbi na lêmbëtï ôko ôko.",
+ "search-result-size": "$1 ({{PLURAL:$2|1 mbupa|$2 âmbupa}})",
+ "mypreferences": "tandä tî mbï",
+ "prefs-rc": "Tanga ti yé so a gbion ya ni",
+ "yournick": "Nyîmbâ:",
+ "editinguser": "Mo fa na mbi nyîmbâ '''[[User:$1|$1]]''' $2",
+ "recentchanges": "Ndângbâ sänzëmä",
+ "recentchangeslinked-toolbox": "Bängö pekô tî âgbegbêe lêmbëtï",
+ "upload": "Yâlamû mbênî kuru",
+ "watchthisupload": "bâa lo ânde sô lêmbëtï",
+ "randompage": "Lêmbëtï waâwa",
+ "brokenredirects-edit": "fa na mbi",
+ "nbytes": "$1 {{PLURAL:$1|limbe|âlimbe}}",
+ "watchlist": "Molongö tî bängö pekô",
+ "watch": "bâa pekô nî",
+ "watchthispage": "bâa lo ânde sô lêmbëtï",
+ "blanknamespace": "(Tö)",
+ "mycontris": "Kua tî mbï",
+ "whatlinkshere": "Gbegbêe lêmbëtï",
+ "contribslink": "âkua tî ânyîmbâ",
+ "move-watch": "bâa lo ânde sô lêmbëtï",
+ "tooltip-pt-login": "Ayeke nzönî mo linda, atâa sô a kambaga mo äpe.",
+ "tooltip-pt-logout": "sïgî",
+ "tooltip-ca-talk": "Lisoro na ndö tî münä tî lêmbëtï sô",
+ "tooltip-ca-edit": "Mo lîngbi tî sepe lêmbëtï sô. Nzönî mo pete kûtu piabâa tîtene mo pia mo bâa nî awe sï mo sûnga nî.",
+ "tooltip-ca-history": "Ângbêre mbâlê tî lêmbëtï sô (na ïrï tî âwasüngö-nî)",
+ "tooltip-search": "Gi {{SITENAME}}",
+ "tooltip-search-fulltext": "Gi âlêmbëtï sô ayeke na gbâsû sô",
+ "tooltip-p-logo": "Gue na Tölêmbëtï",
+ "tooltip-n-mainpage": "Gue na tölêmbëtï Gä nzönî.",
+ "tooltip-n-mainpage-description": "Gue na tölêmbëtï Gä nzönî.",
+ "tooltip-n-portal": "Tënë tî pialö nî",
+ "tooltip-n-currentevents": "Wara sango tî âpäsëmä tî fafadësô na gündâ nî.",
+ "tooltip-n-recentchanges": "Molongö tî ândângbâ sänzëma tî yâ tî Wïkï nî",
+ "tooltip-n-randompage": "Tanda mbênî lêmbëtï waâa",
+ "tooltip-n-help": "Za mbï",
+ "tooltip-t-whatlinkshere": "Molongö tî âlêmbëtï sô kûê agbë gbê na lo sô.",
+ "tooltip-t-recentchangeslinked": "Molongö tî ândângbâ sänzëmä tî âlêmbëtï sô agbë gbê na lo-sô.",
+ "tooltip-t-upload": "To kuru na wavungä",
+ "tooltip-t-specialpages": "Molongö tî âlêmbëtï sô kûê ayeke ndê",
+ "tooltip-t-print": "Mbâlê tî lêmbëtï sô tî pete na sasango",
+ "tooltip-t-permalink": "Kpengü gbê na mbâlê tî lêmbëtï nî sô",
+ "tooltip-ca-nstab-main": "Bâa lêmbëtï tî münä nî",
+ "others": "mbênî",
+ "bad_image_list": "Funda nî ayeke töngasô:\nGï âkâmba tî molongö (sô atö ndâ nî na *) laâ a yeke bâa lêgë nî. Kôzo gbê tî yâ tî kâmba ôko ôko adu tî gbùe na mbênî kpäkë kuru. Âtanga tî âgbê sô na yâ tî ôko kâmba nî sô, a bâa nî töngana yê ndê, sô ^tî tene, töngana âlêmbëtï sô kuru nî alîngbi tî tua daä na gbegbê nî.",
+ "specialpages": "Âlêmbëtï sô ayeke ndê"
}
diff --git a/languages/i18n/sgs.json b/languages/i18n/sgs.json
index ba7af45c..3de17ab1 100644
--- a/languages/i18n/sgs.json
+++ b/languages/i18n/sgs.json
@@ -98,6 +98,18 @@
"oct": "spa",
"nov": "lap",
"dec": "grd",
+ "january-date": "Sausė $1",
+ "february-date": "Vasarė $1",
+ "march-date": "Kuova $1",
+ "april-date": "Balondė $1",
+ "may-date": "Gegožė $1",
+ "june-date": "Bėrželė $1",
+ "july-date": "Lėipas $1",
+ "august-date": "Rogpjūtė $1",
+ "september-date": "Siejės $1",
+ "october-date": "Spalė $1",
+ "november-date": "Lapkrėstė $1",
+ "december-date": "Groudė $1",
"pagecategories": "{{PLURAL:$1|Kateguorėjė|Kateguorėjės|Kateguorėju}}",
"category_header": "Kateguorėjės „$1“ straipsnē",
"subcategories": "Subkateguorėjės",
@@ -120,8 +132,9 @@
"newwindow": "(īr atverams naujam longė)",
"cancel": "Nutrauktė",
"moredotdotdot": "Daugiau...",
- "mypage": "Mona poslapis",
- "mytalk": "Mona aptarėms",
+ "morenotlisted": "Tas sārošos užbengts nie.",
+ "mypage": "Poslapis",
+ "mytalk": "Aptarėms",
"anontalk": "Šėta IP aptarėms",
"navigation": "Naršīms",
"and": "&#32;ėr",
@@ -135,6 +148,7 @@
"actions": "Vēksmā",
"namespaces": "Vardū srėtīs",
"variants": "Variantā",
+ "navigation-heading": "Naršīma pasėrinkėmā",
"errorpagetitle": "Klaida",
"returnto": "Grīžtė i $1.",
"tagline": "Straipsnis ėš {{SITENAME}}.",
@@ -150,12 +164,16 @@
"permalink": "Nulatėnė nūruoda",
"print": "Spausdėntė",
"view": "Veizietė",
+ "view-foreign": "Perveiziet $1",
"edit": "Taisītė",
+ "edit-local": "Taisītė vėitėni aprašīma",
"create": "Sokortė",
+ "create-local": "Prikergtė vėitėni aprašīma",
"editthispage": "Taisītė ton poslapė",
"create-this-page": "Sokortė ta poslapi",
"delete": "Trintė",
"deletethispage": "Trintė ton poslapė",
+ "undeletethispage": "Atkortė ta poslapi",
"undelete_short": "Atstatītė $1 {{PLURAL:$1:redagavėma|redagavėmus|redagavėmu}}",
"viewdeleted_short": "Veizietė $1 {{PLURAL:$1|ėštrinta keitėma|ėštrintus keitėmus|ėštrintū keitėmu}}",
"protect": "Ožrakintė",
@@ -183,6 +201,7 @@
"otherlanguages": "Kėtuom kalbuom",
"redirectedfrom": "(Nokreipta ėš $1)",
"redirectpagesub": "Nokreipėma poslapis",
+ "redirectto": "Nukreipėms ont:",
"lastmodifiedat": "Šėts poslapis paskotini karta pakeists $1 $2.",
"viewcount": "Tas poslapis bova atverts $1 {{PLURAL:$1|čiesa|čiesus|čiesu}}.",
"protectedpage": "Ožrakints poslapis",
@@ -212,6 +231,10 @@
"ok": "Gerā",
"retrievedfrom": "Gautė ėš „$1“",
"youhavenewmessages": "Tamsta toret $1 ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Tamsta turėt}} $1 nū {{PLURAL:$3|kėta nauduotojė|$3 nauduotoju}} ($2).",
+ "youhavenewmessagesmanyusers": "Tamsta turėt $1 nū daug nauduotoju ($2).",
+ "newmessageslinkplural": "{{PLURAL:$1|naus pranešėms|999=naujė pranešėmā}}",
+ "newmessagesdifflinkplural": "paskiausis {{PLURAL:$1|pakeitėms|999=pakeitėmā}}",
"youhavenewmessagesmulti": "Toret naujū žėnotiu $1",
"editsection": "taisītė",
"editold": "taisītė",
@@ -224,6 +247,9 @@
"hidetoc": "kavuotė",
"collapsible-collapse": "Sugōžtė",
"collapsible-expand": "Atsklēstė",
+ "confirmable-confirm": "A tikslē tēp mīslėjat?",
+ "confirmable-yes": "Tēp",
+ "confirmable-no": "Ne",
"thisisdeleted": "Veizėtė a atkortė $1?",
"viewdeleted": "Ruodītė $1?",
"restorelink": "$1 {{PLURAL:$1|ėštrinta keitėma|ėštrintos keitėmos|ėštrintū keitėmu}}",
@@ -233,6 +259,8 @@
"page-rss-feed": "„$1“ RSS šaltėnis",
"page-atom-feed": "„$1“ Atom šaltėnis",
"red-link-title": "$1 (poslapis da neparašīts)",
+ "sort-descending": "Palē alfabėto",
+ "sort-ascending": "Prīš alfabėto",
"nstab-main": "Poslapis",
"nstab-user": "Nauduotuojė poslapis",
"nstab-media": "Abruozdielė poslapis",
@@ -245,9 +273,10 @@
"nstab-category": "Kateguorėjė",
"nosuchaction": "Nier tuokė veiksma",
"nosuchspecialpage": "Nier tuokė specēlėjė poslapė",
- "nospecialpagetext": "Tamsta prašiet nelaistėna specēlė̅jė poslapė, laistėnū specēliūju poslapiu sōraša rasėt [[Special:SpecialPages|specēliūju poslapiu sārošė]].",
+ "nospecialpagetext": "Tamsta prašiet nelaistėna specēlė̄jė poslapė, laistėnū specēliūju poslapiu sōraša rasėt [[Special:SpecialPages|specēliūju poslapiu sārošė]].",
"error": "Klaida",
"databaseerror": "Doumenū bazės klaida",
+ "databaseerror-error": "Klaida: $1",
"laggedslavemode": "Diemesė: Poslapī gal nesmatītė naujausiu pakeitėmu.",
"readonly": "Doumenū bazė ožrakėnta",
"enterlockreason": "Iveskėt ožrakėnėma prižasti, tēpuogi kumet daugmaž bus atrokėnta",
@@ -263,23 +292,38 @@
"filenotfound": "Nepavīkst rastė faila „$1“.",
"unexpected": "Natėkieta raikšmie: „$1“=„$2“.",
"cannotdelete": "Nepavīka ėštrintė nuruodīta poslapė a faila \"$1\". (Mažo kažkas padarė pėrmesnis šėta)",
+ "cannotdelete-title": "Negal ėštrintė poslapė \"$1\"",
"badtitle": "Bluogs pavadėnėms",
"badtitletext": "Nuruodīts poslapė pavadėnėms bova neleistėns, toščės a neteisėngā sojongts terpkalbinis a terppruojektėnis pavadėnėms. Anamė gal būtė vėins a daugiau sėmbuoliu, neleistėnū pavadėnėmūs",
"perfcachedts": "Ruodoma ėšsauguota doumenū kopėjė, katra bova atnaujėnta $1. Daugiausē $4 {{PLURAL:$4|rezoltats|rezoltatā|rezoltatu}} īr sauguoma.",
"querypage-no-updates": "Atnaujėnėmā tam poslapiō nūnā ėšjongtė īr. Doumenīs nūnā čė nebus atnaujėntė.",
"viewsource": "Veizėtė kuoda",
- "protectedpagetext": "Šėts poslapis īr ožrakints, saugont anū nū redagavėma.",
+ "protectedpagetext": "Šėts poslapis īr ožrakints, saugont anū nū taisīma.",
"viewsourcetext": "Tomsta galėt veizietė ėr kopėjoutė poslapė kuoda:",
- "protectedinterface": "Šėtom poslapi īr pruogramėnės ironguos sasajuos teksts katros īr apsauguots, kū neprietelē anū nasogadėntu.",
+ "protectedinterface": "Šėtom poslapi īr pruogramėnės īronguos sasajuos teksts katros īr apsauguots, kū neprietelē anū nasogadėntu.",
"editinginterface": "<strong>Diemesė:</strong> Tamsta keitat poslapi, katros īr nauduojams programėnės irongas sōsajės tekstė. Pakeitėmā tamė poslapū tēpuogi pakeis nauduotuojė sōsajės ėšruoda ė kėtėims nauduotujams. Jēgo nuorėt pargoldītė, siūluom pasėnauduotė [//translatewiki.net „translatewiki.net“], „MediaWiki“ lokalėzacėjės pruojėktu.",
"namespaceprotected": "Tamsta netorėt teisiu keistė poslapiu '''$1''' srėtī.",
"ns-specialprotected": "Specēlė̅ jė poslapē negal būtė keitamė.",
+ "exception-nologin": "Nesat prėsėjongis",
"logouttext": "'''Daba Tamsta esat atsėjongės.'''\n\nGalat ė tuoliau nauduotė {{SITENAME}} anuonimėškā aba <span class='plainlinks'>[$1 prisėjonkat]</span> ėš naujė šėtuo patiu a kėto nauduotuojė vardu.\nPastebiejims: katruos nekatruos poslapiuos ė tuoliau gal ruodītė būktā būtomiet prisėjongės lėgė tuol, kumet ėšvalīsėt sava naršīklės dietovė (''cache'').",
+ "welcomeuser": "Svēks, $1!",
+ "welcomecreation-msg": "Tamstas paskīra jau padėrbta.\nNūnā galat pakeitė sava {{SITENAME}} [[Special:Preferences|nustatīmos]], jēgo tėktās nuorat.",
"yourname": "Nauduotuojė vards:",
+ "userlogin-yourname": "Nauduotuojė vards:",
+ "userlogin-yourname-ph": "Ožrašīkėt sava nauduotojė varda",
+ "createacct-another-username-ph": "Ožrašīkėt nauduotojė varda",
"yourpassword": "Slaptažuodis:",
+ "userlogin-yourpassword": "Slaptažuodis",
+ "userlogin-yourpassword-ph": "Ožrašīkėt sava slaptažuodi",
+ "createacct-yourpassword-ph": "Ožrašīkėt slaptažuodi",
"yourpasswordagain": "Pakartuoket slaptažuodė:",
+ "createacct-yourpasswordagain": "Čīstā tuokis slaptažuodis?",
+ "createacct-yourpasswordagain-ph": "Viel ožrašīkėt slaptažuodi",
"remembermypassword": "Atmintė prisėjongėma infuormacėjė šėtom kuompioteri (daugiausē $1 {{PLURAL:$1|dėina|dėinė|dėinas}})",
+ "userlogin-remembermypassword": "Ka liktō prisėjongis",
+ "userlogin-signwithsecure": "Apsauguots rīšīs",
"yourdomainname": "Tamstas domens:",
+ "password-change-forbidden": "Negalat tuo wiki keistė slaptažuodiu.",
"login": "Prisėjongtė",
"nav-login-createaccount": "Prėsėjongtė / sokortė paskīra",
"userlogin": "Prėsėjongtė / sokortė paskīra",
@@ -287,14 +331,33 @@
"logout": "Atsėjongtė",
"userlogout": "Atsėjongtė",
"notloggedin": "Neprisėjongis",
+ "userlogin-noaccount": "Netorėt paskīruos?",
+ "userlogin-joinproject": "Jonkėtėis pri {{SITENAME}}",
"nologin": "Netorėt prisėjongėma varda? '''$1'''.",
"nologinlink": "Sokorkėt paskīra",
"createaccount": "Sokortė paskīra",
"gotaccount": "Jau torėt paskīra? '''$1'''.",
"gotaccountlink": "Prisėjonkėt",
"userlogin-resetlink": "Ožmiršat sava prisėjongėma doumenis?",
- "createaccountmail": "Par elektruonėni pašta",
+ "userlogin-resetpassword-link": "Pamiršuot slaptažuodi?",
+ "userlogin-helplink2": "Prisėjongėma pagelba",
+ "userlogin-createanother": "Padėrbtė kėta paskīra",
+ "createacct-emailrequired": "El. pašta adresos",
+ "createacct-emailoptional": "El. paštos (nie būtėns)",
+ "createacct-email-ph": "Ožrašīkėt sava el. pašta adresa",
+ "createacct-another-email-ph": "Ožrašīkėt el. pašta adresa",
+ "createaccountmail": "Nauduokėt laikėna slaptažuodi ė siōskėt nuruodėtō el. paštō",
+ "createacct-realname": "Tėkros vardos (nie būtėns)",
"createaccountreason": "Prīžastis:",
+ "createacct-reason": "Prīžastis",
+ "createacct-captcha": "Apsauguos patėkrėnėms",
+ "createacct-imgcaptcha-ph": "Ožrašīkėt ženklus, katrus veizėt viršō",
+ "createacct-submit": "Padėrbkėt sau paskīra",
+ "createacct-another-submit": "Padėrbtė kėta paskīra",
+ "createacct-benefit-heading": "{{SITENAME}} īr sokorta prietėliu, tuokiu, kāp Tamsta.",
+ "createacct-benefit-body1": "{{PLURAL:$1|pataisīms|pataisīmā|pataisīmu}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|poslapis|poslapē|poslapiu}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|vielībs nauduotuos|vielībė nauduotuojē|vielībū nauduotuoju}}",
"badretype": "Ivestė slaptažuodē nesotamp.",
"userexists": "Irašīts nauduotuojė vards jau īr nauduojams.\nPrašuom pasėrėnktė kėtuoki varda.",
"loginerror": "Prisėjongėma klaida",
@@ -306,12 +369,13 @@
"nosuchuser": "Nier anėjuokė nauduotuojė pavadėnta „$1“.\nPatikrėnkėt rašība, aba [[Special:UserLogin/signup|sokorkėt naujė paskīra]].",
"nosuchusershort": "Nier juokė nauduotuojė, pavadėnta „$1“. Patėkrinkėt rašība.",
"nouserspecified": "Tamstā rēk nuruodītė nauduotuojė varda.",
+ "login-userblocked": "Nauduotuos ožblokouts. Prisėjongt nie galėma.",
"wrongpassword": "Ivests neteisings slaptažuodis. Pameginket dā karta.",
"wrongpasswordempty": "Ivests slaptažuodis īr tošts. Pameginket vielėk.",
"passwordtooshort": "Tamstas slaptažuodis nier laistėns aba par tromps īr. Ans tor būtė nuors {{PLURAL:$1|1 sėmbuolė|$1 sėmbuoliu}} ėlgoma.",
"password-name-match": "Tamstas slaptažuodis tor skirtėis nu Tamstas nauduotuojė varda.",
"password-login-forbidden": "Tuo nauduotuojė varda ė slaptažuodė nauduojėms nie galėms.",
- "mailmypassword": "Atsiōstė naujė slaptažuodi pašto",
+ "mailmypassword": "Atkortė slaptažuodi",
"passwordremindertitle": "Laikėns {{SITENAME}} slaptažuodis",
"passwordremindertext": "Kažkastā (tėkriausē Tamsta, ėš IP adresa $1)\npaprašė, kū atsiōstomiet naujė slaptažuodi pruojektō {{SITENAME}} ($4).\nLaikėns slaptažuodis nauduotuojō „$2“ bova sokorts ėr nustatīts kāp „$3“.\nJēgo Tamsta nuoriejot ana pakeistė tūmet torietomiet prisėjongtė ė daba pakeistė sava slaptažuodi.\nTamstas laikėns slaptažuodis bengs galiuotė par {{PLURAL:$5|dėina|$5 dėinas}}.\n\nJēgo kažkas kėts atlėka ta prašīma aba Tamsta prisėmėniet sava slaptažuodi ė\nnebnuorėt ana pakeistė, Tamsta galėt tėisiuog nekreiptė diemiesė ė šėta gruomata ė tuoliau\nnauduotis sava senu slaptažuodžiu.",
"noemail": "Nier anėjuokė el. pašta adresa ivesta nauduotuojō „$1“.",
@@ -327,17 +391,32 @@
"noemailprefs": "Nuruodėkīt el. pašta adresa, kū vėiktu šėtos funkcėjės.",
"emailconfirmlink": "Patvėrtinkėt sava el. pašta adresa",
"accountcreated": "Nauduotuos sokorts",
- "accountcreatedtext": "Nauduotuos $1 sokorts.",
+ "accountcreatedtext": "Paskīra nauduotojō [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|aptarėms]]) bova padėrbta.",
"createaccount-title": "{{SITENAME}} paskīruos kūrėms",
"loginlanguagelabel": "Kalba: $1",
+ "pt-login": "Prisėjongtė",
+ "pt-login-button": "Prisėjongtė",
+ "pt-createaccount": "Pasdėrbtė paskīra",
+ "pt-userlogout": "Atsėjongtė",
"changepassword": "Pakeistė slaptažuodė",
+ "resetpass_announce": "Ka ožbengtomėt jongtėis, torėt sokortė nauja slaptažuodi.",
"resetpass_header": "Keistė paskīruos slaptažuodi",
"oldpassword": "Sens slaptažuodis:",
"newpassword": "Naus slaptažuodis:",
"retypenew": "Pakartuokėt nauja slaptažuodi:",
"resetpass_submit": "Nostatītė slaptažuodi ė prėsėjongtė",
- "changepassword-success": "Tamstas slaptažuodis pakeists siekmėngā! Daba prėsėjongiama...",
+ "changepassword-success": "Tamstas slaptažuodis pakeists siekmėngā!",
+ "changepassword-throttled": "Baisē daug čiesu mieginot prisėjongtė.\nDaba palaukėt $1 prīš mieginant vie.",
+ "resetpass-submit-loggedin": "Keistė slaptažuodi",
+ "resetpass-submit-cancel": "Nutrauktė",
"resetpass-temp-password": "Laikėns slaptažuodis:",
+ "passwordreset-username": "Nauduotuojė vards:",
+ "passwordreset-domain": "Domens:",
+ "passwordreset-email": "El. pašta adresos:",
+ "changeemail": "Keistė el. pašta adresa",
+ "changeemail-none": "(nie)",
+ "changeemail-password": "Tamstas {{SITENAME}} slaptažuodis:",
+ "changeemail-submit": "Keistė el. pašta",
"bold_sample": "Pastuorints teksts",
"bold_tip": "Pastuorintė teksta",
"italic_sample": "Teksts kursīvu",
@@ -356,7 +435,7 @@
"media_tip": "Nūruoda i media faila",
"sig_tip": "Tomstas parašos ėr čiesos",
"hr_tip": "Guorizuontali linėjė (nenauduokėt ba reikala)",
- "summary": "Kuomentars:",
+ "summary": "Pāiškėnėms:",
"subject": "Tema/ontraštė:",
"minoredit": "Mažos pataisims",
"watchthis": "Keravuotė šėta poslapė",
@@ -426,6 +505,8 @@
"recreate-moveddeleted-warn": "'''Parspiejėms: Tamsta ikeliat faila, katros onkstiau bova ėštrėnts.'''\n\nTamsta torietomiet nusprēstė, a īr naudėnga tuoliau ikeldinietė ta faila.\nTuo faila pašalinėma istuorėjė īr pateikta dielē patuogoma:",
"moveddeleted-notice": "Tas poslapis bova ėštrėnts.\nĖštrėnta poslapė versėju sārašos īr pateikts paveiziejėmō žemiau.",
"edit-conflict": "Redagavėma kuonflėktos",
+ "postedit-confirmation-created": "Poslapis padėrbts.",
+ "postedit-confirmation-restored": "Poslapis atkorts.",
"postedit-confirmation-saved": "Tamstas padėrbts pakeitėms ėšsauguots īr.",
"post-expand-template-inclusion-warning": "Perspiejėms: Šabluonu īterpėma dėdoms īr par dėdelis.\nKāp katrėi šabluonā nebus ītrauktė.",
"post-expand-template-inclusion-category": "Poslapē, kur šabluonu īterpėma dėdoms viršėjams",
@@ -461,7 +542,10 @@
"history-feed-empty": "Prašuoms poslapis nēgzėstuo.\nAns galiejė būtė ėštrėnts ėš pruojekta, aba parvardėnts.\nPamiegīkėt [[Special:Search|ėiškoutė pruojektė]] sosėjosiu naujū poslapiu.",
"rev-delundel": "ruodītė/kavuotė",
"revisiondelete": "Trintė/atkortė versėjės",
+ "revdelete-show-file-submit": "Tēp",
"logdelete-selected": "{{PLURAL:$2|Pasėrinkts|Pasėrinktė|Pasėrinktė}} $1 istuorėjės {{PLURAL:$2|atėtėkims|atsėtėkimā|atsėtėkimā}}:",
+ "revdelete-hide-comment": "Keitėma pāiškėnėms",
+ "revdelete-hide-user": "Keitiejė nauduotojė vardos/IP adresos",
"revdelete-unsuppress": "Šalėntė apribuojėmos atkortuos versėjės",
"revdel-restore": "Keistė veizėmuma",
"revdelete-edit-reasonlist": "Keistė trīnėma prīžastis",
@@ -499,6 +583,8 @@
"search-result-category-size": "{{PLURAL:$1|1 narīs|$1 nariū}} ({{PLURAL:$2|1 subkateguorėjuo|$2 subkateguorėju}}, {{PLURAL:$3|1 fails|$3 failu}})",
"search-redirect": "(paradresavėms $1)",
"search-section": "(skīrios $1)",
+ "search-category": "(kateguorėjė $1)",
+ "search-file-match": "(atėtėnk abruozdielė torėni)",
"search-suggest": "Mažo nuoriejot $1",
"search-interwiki-caption": "Dokterėnē pruojektā",
"search-interwiki-default": "$1 rezoltatā:",
@@ -507,7 +593,6 @@
"searchrelated": "sosėjėn",
"searchall": "vėsė",
"showingresults": "Žemiau ruodoma lėgė '''$1''' {{PLURAL:$1|rezoltata|rezoltatu|rezoltatu}} pradedont #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Rezoltats '''$1''' ėš '''$3'''|Rezoltatā '''$1 - $2''' ėš '''$3'''}} vagol paklausėma '''$4'''",
"search-nonefound": "Nier rezoltatu, katrėi atitėktu ožklausėma.",
"powersearch-legend": "Prapliesta paėiška",
"powersearch-ns": "Ėiškoutė vardū srėtīsė:",
@@ -551,6 +636,7 @@
"timezoneregion-africa": "Afrėka",
"timezoneregion-america": "Amerėka",
"timezoneregion-antarctica": "Antarktėda",
+ "timezoneregion-arctic": "Arktės",
"timezoneregion-asia": "Azėjė",
"timezoneregion-atlantic": "Atlanta ondenīns",
"timezoneregion-australia": "Australėjė",
@@ -558,7 +644,7 @@
"timezoneregion-indian": "Indėjės ondenīns",
"timezoneregion-pacific": "Ramosis ondenīns",
"allowemail": "Lēstė siūstė el. gramuotelės ėš kėtū nauduotuoju",
- "prefs-searchoptions": "Paėiškuos nustatīmā",
+ "prefs-searchoptions": "Ėiškuotė",
"prefs-namespaces": "Vardū srėtīs",
"default": "palē nūtīliejėma",
"prefs-files": "Failā",
@@ -568,7 +654,7 @@
"prefs-registration": "Ožsėregėstravėma čiesos:",
"yourrealname": "Tėkros vards:",
"yourlanguage": "Aplėnkuos kalba:",
- "yourvariant": "Variants",
+ "yourvariant": "Torėnė kalba:",
"yournick": "Pasėrinkts slapīvardis:",
"badsig": "Neteisings parašas; patėkrinkėt HTML žīmės.",
"badsiglength": "Tamstas parašos īr par ėlgs.\nAna gal sodarītė ne daugiau kāp $1 {{PLURAL:$1|sėmbuolis|sėmbuolē|sėmbuoliu}}.",
@@ -579,11 +665,20 @@
"email": "El. pašts",
"prefs-help-realname": "Tėkrs vards nier privaluoms, vuo jēgo Tamsta ana ivesėt, ons bus nauduojams Tamstas darba pažīmiejėmō.",
"prefs-help-email": "El. pašta adresos nier privaloms, ale uns leid Tamstā gautė nauja slaptažuodi, jēgo pamėršuot kuoks uns bova, ė tēpuogi Tamsta galėt leistė kėtėims pasėiktė Tamsta par Tamstas nauduotuojė a nauduotuojė aptarėma poslapi neatsklėidont Tamstas tapatoma.",
+ "prefs-help-email-required": "Rēk el. pašta adresa",
"prefs-info": "Glavnuojė infuormacėjė",
"prefs-i18n": "Kalbuos nustatīmā",
+ "prefs-signature": "Parašos",
"prefs-dateformat": "Datuos skvarma",
"prefs-timeoffset": "Čiesa skėrtoms",
+ "prefs-advancedediting": "Bendrė parametrā",
+ "prefs-preview": "Parveiza",
"prefs-advancedrc": "Papėlduomė nustatīmā",
+ "prefs-advancedrendering": "Papėlduomė nustatīmā",
+ "prefs-advancedsearchoptions": "Papėlduomė nustatīmā",
+ "prefs-advancedwatchlist": "Papėlduomė nustatīmā",
+ "prefs-displayrc": "Ruodītė nustatīmus",
+ "prefs-displaywatchlist": "Ruodītė nustatīmus",
"prefs-diffs": "Skėrtomā",
"userrights": "Nauduotuoju teisiu valdīms",
"userrights-lookup-user": "Tvarkītė nauduotuojė gropės",
@@ -602,9 +697,11 @@
"group-bureaucrat": "Biorokratā",
"group-all": "(vėsė)",
"group-user-member": "Nauduotuos",
+ "group-autoconfirmed-member": "Patvirtints nauduotuos",
"group-bot-member": "Buots",
- "group-sysop-member": "Adminėstratuorius",
+ "group-sysop-member": "Adminėstratuorios",
"group-bureaucrat-member": "Biorokrats",
+ "group-suppress-member": "Revėzorios",
"grouppage-user": "{{ns:project}}:Nauduotuojē",
"grouppage-autoconfirmed": "{{ns:project}}:Automatėškā patvėrtintė nauduotuojē",
"grouppage-bot": "{{ns:project}}:Robuotā",
@@ -612,14 +709,23 @@
"grouppage-bureaucrat": "{{ns:project}}:Biorokratā",
"right-read": "Skaitītė poslapius",
"right-edit": "Keistė poslapius",
+ "right-upload": "Ikeltė failus",
+ "right-delete": "Trintė poslapius",
"newuserlogpage": "Nauduotuojė kūrėma regėstros",
"rightslog": "Nauduotuoju teisiu istuorėjė",
"rightslogtext": "Pateikiams nauduotuoju teisiu pakeitėmu sārašos.",
"action-edit": "redagoutė ta poslapi",
+ "action-move": "parvadintė šėta poslapi",
+ "action-move-subpages": "parvadintė šėta poslapi ėr anuo dalės",
+ "action-move-categorypages": "parvadintė kateguorėjes",
+ "action-movefile": "parvadintė šėta faila",
+ "action-upload": "ikeltė šėta faila",
+ "action-delete": "trintė ton poslapė",
"action-undelete": "atkortė ta poslapi",
"action-patrol": "pažīmietė kėtū keitėmus kāp patikrėntus",
"action-userrights": "keistė vėsū nauduotuoju teises",
"nchanges": "$1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}}",
+ "enhancedrc-history": "istuorėjė",
"recentchanges": "Vielībė̅jė pakeitėmā",
"recentchanges-legend": "Vielībuju pakeitėmu pasėrinkėmā",
"recentchanges-summary": "Keravuokėt patius vielībiausius wiki pakeitėmus tamė poslapī.",
@@ -629,14 +735,27 @@
"recentchanges-label-bot": "Šėta keitėma padėrba autuomatėnė pruograma",
"recentchanges-label-unpatrolled": "Tas keitėms da nebova patikrints",
"recentchanges-label-plusminus": "Ton baitu skaitliom pakeists straipsnė apmiers",
+ "recentchanges-legend-heading": "'''Pāiškėnėmā:'''",
"rcnotefrom": "Žemiau īr pakeitėma pradedant nū <b>$2</b> (ruodom lėgė <b>$1</b> pakeitėmu).",
"rclistfrom": "Ruodītė naujus pakeitėmus pradedant nū $3 $2",
"rcshowhideminor": "$1 mažus pakeitėmus",
+ "rcshowhideminor-show": "Ruodītė",
+ "rcshowhideminor-hide": "Kavuotė",
"rcshowhidebots": "$1 robuotus",
+ "rcshowhidebots-show": "Ruodītė",
+ "rcshowhidebots-hide": "Kavuotė",
"rcshowhideliu": "$1 prėsėjongusiūm nauduotuojūm pakeitėmus",
+ "rcshowhideliu-show": "Ruodītė",
+ "rcshowhideliu-hide": "Kavuotė",
"rcshowhideanons": "$1 anuonimėnius nauduotuojus",
+ "rcshowhideanons-show": "Ruodītė",
+ "rcshowhideanons-hide": "Kavuotė",
"rcshowhidepatr": "$1 patikrėntus pakeitėmus",
+ "rcshowhidepatr-show": "Ruodītė",
+ "rcshowhidepatr-hide": "Kavuotė",
"rcshowhidemine": "$1 mona pakeitėmus",
+ "rcshowhidemine-show": "Ruodītė",
+ "rcshowhidemine-hide": "Kavuotė",
"rclinks": "Ruodītė paskotėnius $1 pakeitėmu par paskotėnė̅sēs $2 dėinū<br />$3",
"diff": "skėrt",
"hist": "ist",
@@ -648,9 +767,11 @@
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|keravuojontis nauduotuos|keravuojontīs nauduotuojē|keravuojontiu nauduotuoju}}]",
"rc_categories": "Ruodītė tėk šėtas kateguorėjės (atskirkit nauduodamė „|“)",
"rc_categories_any": "Bikuokė",
+ "rc-change-size-new": "$1 {{PLURAL:$1|baits|baitā|baitu}} pu pakeitėma",
"newsectionsummary": "/* $1 */ naus skėrsnelis",
- "rc-enhanced-expand": "Ruodītė detales (rēk JavaScript)",
+ "rc-enhanced-expand": "Ruodītė detales",
"rc-enhanced-hide": "Kavuotė detales",
+ "rc-old-title": "pradiuo padėrbta kāp \"$1\"",
"recentchangeslinked": "Sosėjėn pakeitėmā",
"recentchangeslinked-feed": "Sosėjėn pakeitėmā",
"recentchangeslinked-toolbox": "Sosėjėn pakeitėmā",
@@ -674,18 +795,21 @@
"filename": "Faila vards",
"filedesc": "Kuomentars",
"fileuploadsummary": "Kuomentars:",
+ "filesource": "Šaltėnis:",
"ignorewarning": "Nekrėiptė diemiesė i parspiejėma ėr ėšauguotė faila vėsvėin.",
"ignorewarnings": "Nekrėiptė diemesė i vėsuokius perspiejimos",
"minlength1": "Faila pavadinėms tor būtė nuors vėina raidie.",
"illegalfilename": "Faila vardė „$1“ īr sėmbuoliu, katrėi nier leidami poslapė pavadinėmūs. Prašuom parvadėntė faila ė miegītė ikeltė ana par naujė.",
"badfilename": "Faila pavadinėms pakeists i „$1“.",
"filetype-missing": "Fails netor galūnės (kāp pavīzdīs „.jpg“).",
+ "unknown-error": "Nutėka nežėnuoma klaida.",
"emptyfile": "Panašu, ka fails, katra ikieliet īr toščias. Tas gal būtė diel klaiduos faila pavadėnėmė. Pasėtėkrinkėt a tėkrā nuorėt ikeltė šėta faila.",
"fileexists": "Fails so tuokiu vardu jau īr, prašuom paveizėtė <strong>[[:$1]]</strong>, jēgo nesat ožtėkrėnts, a nuorit ana parrašītė.\n[[$1|thumb]]",
"fileexists-extension": "Fails so pavėdiu pavadinėmu jau īr: [[$2|thumb]]\n* Ikeliama faila pavadinėms: <strong>[[:$1]]</strong>\n* Jau esontė faila pavadinėms: <strong>[[:$2]]</strong>\nPrašuom ėšsėrėnktė kėta varda.",
"file-exists-duplicate": "Tas fails īr {{PLURAL:$1|šėta faila|šėtū failu}} doblėkats:",
"uploadwarning": "Diemesė",
"savefile": "Ėšsauguotė faila",
+ "uploaddisabled": "Ikielėmā oždraustė.",
"uploaddisabledtext": "Failu ikielėmā oždraustė īr.",
"uploadscripted": "Šėts failos tor HTML a programėni kuoda, katros gal būtė klaidėngā soprasts interneta naršīklės.",
"uploadvirus": "Šėtom faile īr virosas! Ėšsamiau: $1",
@@ -693,9 +817,11 @@
"sourcefilename": "Ikeliams fails",
"destfilename": "Nuorims faila pavadinims",
"upload-maxfilesize": "Dėdliausias faila dėdoms: $1",
+ "upload-description": "Abruozdielė aprašīms",
"upload-options": "Nostatīmā īkelėmō",
- "watchthisupload": "Keravuotė šėta poslapė",
+ "watchthisupload": "Keravuotė šėta faila",
"upload-success-subj": "Ikelt siekmėngā",
+ "upload-failure-subj": "Ikielėma bieda",
"upload-proto-error": "Nateisėngs protuokols",
"upload-proto-error-text": "Nutuolinē ikielims raikalaun, kū URL prasėdietu <code>http://</code> o <code>ftp://</code>.",
"upload-file-error": "Vėdėnė klaida",
@@ -709,17 +835,24 @@
"license": "Licensėjė",
"license-header": "Licensėjė",
"nolicense": "Nepasėrėnkt",
+ "licenses-edit": "Keistė lėcencėju parametrus",
"license-nopreview": "(Parveiza negalėma)",
"upload_source_url": " (tėkrs, vėišā priėinams URL)",
"upload_source_file": " (fails Tamstas kompioterī)",
+ "listfiles-delete": "trintė",
"listfiles-summary": "Tas specēlus poslapis ruod vėsus ikeltus failus.\nPalē numatīma paskiausē ikeltė failā īr ruoduomė sāroša vėršou.\nPaspaude ont štolpelė ontraštės pakeisėt ėšruokavėma.",
"imgfile": "fails",
"listfiles": "Failu sārašos",
+ "listfiles_thumb": "Somažints",
+ "listfiles_date": "Data",
"listfiles_name": "Pavadinėms",
"listfiles_user": "Nauduotuos",
"listfiles_size": "Dėdoms",
"listfiles_description": "Aprašīms",
"listfiles_count": "Versėjės",
+ "listfiles-latestversion": "Vielība atmaina",
+ "listfiles-latestversion-yes": "Tēp",
+ "listfiles-latestversion-no": "Ne",
"file-anchor-link": "Fails",
"filehist": "Abruozdielė istuorėjė",
"filehist-help": "Paspauskėt ont datas/čiesa, ka paveizietomėt faila tuoki, kokis ons bova tū čiesu.",
@@ -730,20 +863,25 @@
"filehist-datetime": "Data/Čiesos",
"filehist-thumb": "Miniatiūra",
"filehist-thumbtext": "Versėjės $1 miniatiūra",
+ "filehist-nothumb": "Somažinima nie",
"filehist-user": "Nauduotuos",
"filehist-dimensions": "Mierā",
"filehist-filesize": "Faila dėdoms",
- "filehist-comment": "Kuomentars",
+ "filehist-comment": "Pāiškėnėms",
"imagelinks": "Failu nūruodas",
"linkstoimage": "{{PLURAL:$1|Šėts poslapis|Šėtė poslapē}} nuruod i šėta faila:",
"nolinkstoimage": "I faila neruod anėjuoks poslapis.",
+ "morelinkstoimage": "Veizietė [[Special:WhatLinksHere/$1|daugiau nūruodu]] ton abruozdielėn.",
"sharedupload": "Tas fails īr ėš $1 ė gal būtė nauduojams kėtūs pruojektūs.",
"sharedupload-desc-here": "Tas fails īr ėš $1 ė gal būtė nauduojams kėtūsė pruojektūsė.\nInfuormacėjė ėš [$2 faila aprašīma poslapė] īr pateikta žemiau.",
"uploadnewversion-linktext": "Ikeltė nauja faila versėje",
+ "shared-repo-from": "ėš $1",
+ "shared-repo": "bendruos saugīklas",
+ "upload-disallowed-here": "Negalėt perrašītė ton faila.",
"filerevert": "Sogrōžėntė $1",
"filerevert-legend": "Faila sogrōžinėms",
"filerevert-intro": "<span class=\"plainlinks\">Tamsta grōžėnat '''[[Media:$1|$1]]''' i versėje $4 ($2, $3).</span>",
- "filerevert-comment": "Kuomentars:",
+ "filerevert-comment": "Pāiškėnėms:",
"filerevert-submit": "Grōžėntė",
"filedelete": "Trintė $1",
"filedelete-legend": "Trintė faila",
@@ -767,12 +905,13 @@
"unusedtemplateswlh": "kėtas nūruodas",
"randompage": "Bikuoks poslapis",
"randompage-nopages": "Šėtuo vardū srėti nier anėjuokiu poslapiu.",
+ "randomincategory": "Bikuoks poslapis kateguorėjuo",
+ "randomincategory-category": "Kateguorėjė:",
"randomredirect": "Bikuoks paradresavėms",
"randomredirect-nopages": "Šėtuo vardū srėti nier anėjuokiū paradresavėmu.",
"statistics": "Statėstėka",
"statistics-header-pages": "Poslapiu statėstėka",
"statistics-header-edits": "Redagavėmu statėstėka",
- "statistics-header-views": "Parveizu statistėka",
"statistics-header-users": "Nauduotuoju statėstėka",
"statistics-header-hooks": "Kėta statėstėka",
"statistics-articles": "Torėnė poslapē",
@@ -784,7 +923,6 @@
"statistics-users": "Ožsėregėstravosiu [[Special:ListUsers|nauduotuoju]]",
"statistics-users-active": "Aktīviu nauduotuoju",
"statistics-users-active-desc": "Nauduotuojē, katrėi par {{PLURAL:$1|paskiausė dėina|paskiausė 2 dėinė|paskiausės $1 dėinas|paskiausiu $1 dėinū}} padėrba keitėmu",
- "statistics-mostpopular": "Daugiausē ruodītė poslapē",
"doubleredirects": "Dvėgobė paradresavėmā",
"doubleredirectstext": "Tėi paradresavėmā ruod i kėtus paradresavėma poslapius. Kuožnuo eilotē pamėnavuots pėrmasā ėr ontrasā paradresavėmā, tēpuogi ontrojė paradresavėma paskėrtis, katra paprastā ė paruod i tėkraji poslapi, i katra pėrmasā paradresavėms ė torietu ruodītė.",
"double-redirect-fixed-move": "[[$1]] bova parkelts, daba tas īr paradresavėms i [[$2]]",
@@ -846,7 +984,6 @@
"pager-older-n": "{{PLURAL:$1|senesnis|senesni|senesniū}}",
"booksources": "Knīngu šaltinē",
"booksources-search-legend": "Knīngu šaltiniu paėiška",
- "booksources-go": "Ēk!",
"specialloguserlabel": "Nauduotuos:",
"speciallogtitlelabel": "Pavadėnims:",
"log": "Specēliūju veiksmū istuorėjė",
@@ -902,8 +1039,11 @@
"nowatchlist": "Netorėt anėvėina keravuojama poslapė.",
"watchlistanontext": "Prašuom $1, ka parveizietomėt a pakeistomiet elementus sava keravuojamu sārašė.",
"watchnologin": "Neprisėjongės",
+ "addwatch": "Prikergtė pri keravuojamu",
"addedwatchtext": "Poslapis \"[[$1]]\" idiets i [[Special:Watchlist|keravuojamu sāraša]].\nBūsantīs poslapė ėr atėtinkama aptarėma poslapė pakeitėmā bus paruoduomė keravuojamu poslapiu sārašė,\ntēpuogi bus '''parīškintė''' [[Special:RecentChanges|vielībūju pakeitėmu sārašė]], kū ėšsėskėrtom ėš kėtū straipsniu.\nJēgo bikumet ožsėnuorietomiet liautėis keravuotė straipsnė, spauskat \"nebkeravuotė\" vėršotėniam meniū.",
+ "removewatch": "Ėšmestė ėš kieravuojamu",
"removedwatchtext": "Poslapis „[[:$1]]“ pašalėnts ėš [[Special:Watchlist|Tamstas keravuojamu sāraša]].",
+ "removedwatchtext-short": "Poslapis \"$1\" bova ėšmests ėš kieravuojamu.",
"watch": "Keravuotė",
"watchthispage": "Keravuotė šėta poslapė",
"unwatch": "Nebkeravuotė",
@@ -913,11 +1053,12 @@
"wlheader-enotif": "El. pašta primėnėmā ijongtė īr.",
"wlheader-showupdated": "Poslapē, katrėi pakeistė nu Tamstas paskotėnė apsėlonkėma čiesa anūs, īr pažīmietė '''pastuorintā'''",
"wlnote": "Ruoduoma '''$1''' paskotėniu pakeitėmu, atlėktū par '''$2''' paskotėniu adīnu.",
- "wlshowlast": "Ruodītė paskotėniu $1 adīnu, $2 dėinū a $3 pakeitėmus",
+ "wlshowlast": "Ruodītė paskotėniu $1 adīnu, $2 dėinū a pakeitėmus",
"watchlist-options": "Keravuojamu sāroša pasėrinkėmā",
"watching": "Itraukiama i keravuojamu sāraša...",
"unwatching": "Šalėnama ėš keravuojamu sāraša...",
"enotif_reset": "Pažīmietė vėsus poslapius kāp aplonkītus",
+ "enotif_impersonal_salutation": "{{SITENAME}} nauduotuos",
"enotif_anon_editor": "anuonėminis nauduotuos $1",
"created": "sokūrė",
"changed": "pakeitė",
@@ -943,13 +1084,12 @@
"deletereason-dropdown": "*Dažnas trīnėma prižastīs\n** Autorė prašīms\n** Autorėniu teisiu pažeidėms\n** Vandalėzmos",
"delete-edit-reasonlist": "Keistė trėnėma prīžastis",
"rollback": "Atmestė pakeitėmos",
- "rollback_short": "Atmestė",
"rollbacklink": "atmestė",
"rollbacklinkcount": "atmestė $1 {{PLURAL:$1|keitėms|keitėmo|keitėmus|keitėmu}}",
"rollbackfailed": "Atmetims napavīka",
"cantrollback": "Negalėma atmestė redagavėma; paskotinis keitės nauduotuos īr tuo poslapė autorius.",
"alreadyrolled": "Nepavīka atmestė paskotėnė [[User:$2|$2]] ([[User talk:$2|Aptarėms]]) darīta straipsnė [[$1]] keitėma;\nkažkas jau pakeitė straipsnė arba sospiejė pėrmiesnis atmestė keitėma.\n\nGalėnis keitėms dėrbts nauduotuojė [[User:$3|$3]] ([[User talk:$3|Aptarėms]]).",
- "editcomment": "Redagavėma kuomentars bova: „''$1''“.",
+ "editcomment": "Padėrbėma pāiškėnėms bova: „''$1''“.",
"revertpage": "Atmests [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarėms]]) pakeitėms; sogrōžėnta nauduotuojė [[User:$1|$1]] versėjė",
"rollback-success": "Atmestė $1 keitėmā; grōžėnta i paskotėne $2 versėje.",
"sessionfailure": "Atruod kū īr biedū so Tamstas prėsėjongėma sesėjė; šėts veiksmos bova atšaukts kāp atsargoma prėimonė priš sesėjės vuogėma.\nPrašoum paspaustė „atgal“ ėr parkrautė poslapi ėš katruo atiejot, ė pamieginkėt vielē.",
@@ -974,14 +1114,16 @@
"protect-level-sysop": "Tėktās adminėstratuorē",
"protect-summary-cascade": "pakuopėnė apsauga",
"protect-expiring": "beng galiuotė $1 (UTC)",
+ "protect-expiring-local": "beng galiuotė $1",
"protect-expiry-indefinite": "nerėbuotā",
"protect-cascade": "Apsaugotė poslapius, itrauktus i šėta poslapi (pakuopėnė apsauga).",
"protect-cantedit": "Tamsta negalėt keistė šėta poslapė apsauguojėma līgiu, kagongi netorėt teisiu anuo redagoutė.",
"protect-othertime": "Kėts čiesos:",
"protect-othertime-op": "kėts čiesos",
"protect-existing-expiry": "Esams rakėnėma ožsėbengėma čiesos: $3, $2",
+ "protect-existing-expiry-infinity": "Dabartėnis galiuojėma čiesos: omžiams",
"protect-otherreason": "Kėta/papėlduoma prīžastis:",
- "protect-otherreason-op": "kėta/papėlduoma prīžastis",
+ "protect-otherreason-op": "Kėta/papėlduoma prīžastis",
"protect-dropdown": "*Iprastas ožrakinėma prīžastīs\n** Intensīvus vandalėzmos\n** Intensīvus nūruodu reklamavėms\n** Neproduktīvi redagavėma vaina\n** Dėdlė svarboma poslapis",
"protect-edit-reasonlist": "Keistė ožrakinėma prīžastis",
"protect-expiry-options": "1 adīna:1 hour,1 dėina:1 day,1 nedielė:1 week,2 nedielės:2 weeks,1 mienou:1 month,3 mieniesē:3 months,6 mieniesē:6 months,1 metā:1 year,par omžius:infinite",
@@ -1030,15 +1172,16 @@
"blanknamespace": "(Pagrėndinė)",
"contributions": "Nauduotuojė duovis",
"contributions-title": "Nauduotuojė $1 duovis",
- "mycontris": "Mona duovis",
+ "mycontris": "Duovis",
"contribsub2": "Nauduotuojė $1 ($2)",
- "uctop": " (paskotinis)",
+ "uctop": " (vielībs)",
"month": "Nu mienėsė (ėr onkstiau):",
"year": "Nu metu (ėr onkstiau):",
"sp-contributions-newbies": "Ruodītė tėk naujū prieteliu duovios",
"sp-contributions-newbies-sub": "Naujuoms paskīruoms",
"sp-contributions-newbies-title": "Nauduotuoju keitėmā naujuoms paskīruoms",
"sp-contributions-blocklog": "Bluokavėmu istuorėjė",
+ "sp-contributions-suppresslog": "panaikėnts nauduotuojė duovis",
"sp-contributions-deleted": "Panaikėnts nauduotuojė duovis",
"sp-contributions-uploads": "abruozdielē",
"sp-contributions-logs": "Specēliūju veiksmū istuorėjė",
@@ -1065,6 +1208,8 @@
"whatlinkshere-hidelinks": "$1 nūruodas",
"whatlinkshere-hideimages": "$1 abruozdieliu nūruodas",
"whatlinkshere-filters": "Fėltrā",
+ "block": "Ožblokoutė nauduotuoja",
+ "unblock": "Atblokoutė nauduotuoja",
"blockip": "Ožblokoutė nauduotuoja",
"blockip-legend": "Blokoutė nauduotuoja",
"blockiptext": "Nauduokėt šėta fuorma noriedamė oždraustė redagavėma teises nuruodīto IP adreso a nauduotuojo. Tas torietu būt atlėikama tam, kū sostabdītomiet vandalėzma, ė vagol [[{{ns:project}}:Puolitėka|puolitėka]].\nŽemiau nuruodīkėt tėkslē prižastė.",
@@ -1080,6 +1225,7 @@
"ipboptions": "2 adīnas:2 hours,1 dėina:1 day,3 dėinas:3 days,1 nedielė:1 week,2 nedielės:2 weeks,1 mienou:1 month,3 mienesē:3 months,6 mienesē:6 months,1 metā:1 year,omžėms:infinite",
"ipbwatchuser": "Keravuotė tuo nauduotuojė poslapi ėr anuo aptarėma poslapi",
"ipb-change-block": "Parblokoutė ta nauduotuoja so šėtās nustatīmās",
+ "ipb-confirm": "Tėkrā blokoutė",
"badipaddress": "Nelaistėns IP adresos",
"blockipsuccesssub": "Ožblokavėms pavīka",
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] bova ožblokouts.\n<br />Aplonkīkėt [[Special:BlockList|IP blokavėmu istuorėjė]] noriedamė ana parveizėtė.",
@@ -1092,9 +1238,16 @@
"unblockiptext": "Nauduokėt šėta fuorma, kū atkortomiet rašīma teises\nonkstiau ožbluokoutam IP adresō a nauduotuojō.",
"ipusubmit": "Atblokoutė šėta adresa",
"unblocked": "[[User:$1|$1]] bova atbluokouts",
+ "unblocked-range": "$1 bova atblokouts.",
"unblocked-id": "Bluokavėms $1 bova pašalėnts",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] bova atblokouts.",
+ "blocklist": "Ožblokoutė nauduotuojē",
"ipblocklist": "Ožblokoutė nauduotuojē",
"ipblocklist-legend": "Rastė ožblokouta nauduotuoja",
+ "blocklist-expiry": "Beng galiuotė",
+ "blocklist-by": "Blokoutuos",
+ "blocklist-params": "Blokavėma nustatīmā",
+ "blocklist-reason": "Prīžastis",
"ipblocklist-submit": "Ėiškuotė",
"infiniteblock": "neribuotā",
"expiringblock": "beng galiuotė $1 $2",
@@ -1102,12 +1255,14 @@
"noautoblockblock": "autuomatinis blokavėms ėšjongts",
"createaccountblock": "paskīrū korėms oždrausts īr",
"emailblock": "el. pašts ožblokouts",
+ "blocklist-nousertalk": "negal rašītė sava aptarėmė",
"ipblocklist-empty": "Blokavėmu sarašos toščias.",
"ipblocklist-no-results": "Prašuoms IP adresos a nauduotuojė vards ožblokouts nier.",
"blocklink": "ožblokoutė",
"unblocklink": "atbluokoutė",
"change-blocklink": "keistė bluokavėma nustatīmus",
"contribslink": "duovis",
+ "emaillink": "siōstė pašta",
"autoblocker": "Autuomatėnis ožbluokavėms, nes dalėnaties IP adreso so nauduotuojo \"$1\". Prīžastės - \"$2\".",
"blocklogpage": "Ožblokavėmu istuorėjė",
"blocklogentry": "ožblokava „[[$1]]“, blokavėma čiesos - $2 $3",
@@ -1138,6 +1293,7 @@
"movepage-moved-redirect": "Nukreipims bova sokorts.",
"articleexists": "Straipsnis so tuokiu vardo jau īr\na parinktāsis vards īr bluogs.\nParinkat kėta varda.",
"movetalk": "Parkeltė sosėta aptarėma poslapi.",
+ "movepage-page-moved": "Poslapis $1 bova parvadints kāp $2.",
"movelogpage": "Parvardinėmu istuorėjė",
"movelogpagetext": "Sārašos parvadintu poslapiu.",
"movereason": "Prīžastis:",
@@ -1159,6 +1315,7 @@
"allmessagescurrent": "Dabartėnis teksts",
"allmessagestext": "Čė pateikamė sėstemėniu pranešėmu sārašos, esontis MediaWiki srėtie.",
"allmessagesnotsupportedDB": "'''{{ns:special}}:Allmessages''' nepalaikuoms īr, nes nustatīms '''$wgUseDatabaseMessages''' ėšjungts īr.",
+ "allmessages-filter-translate": "Pargoldītė",
"thumbnail-more": "Padėdintė",
"thumbnail_error": "Klaida koriant somažėnta pavēkslieli: $1",
"thumbnail_invalid_params": "Nalaistieni miniatiūras parametrā",
@@ -1212,6 +1369,7 @@
"tooltip-ca-nstab-special": "Šėts poslapis īr specēlosis - anuo nagalėm redagoutė.",
"tooltip-ca-nstab-project": "Ruodītė pruojekta poslapi",
"tooltip-ca-nstab-image": "Ruodītė abruozdielė poslapi",
+ "tooltip-ca-nstab-mediawiki": "Veizietė sėstėmas pranešėma",
"tooltip-ca-nstab-template": "Ruodītė šabluona",
"tooltip-ca-nstab-help": "Ruodītė pagelbas poslapi",
"tooltip-ca-nstab-category": "Ruodītė kateguorėjės poslapi",
@@ -1224,6 +1382,7 @@
"tooltip-recreate": "Atkortė poslapi napaisant šėto, kū ans bova ėštrints",
"tooltip-rollback": "Atšauktė atmestus šėta poslapė keitėmus i vielībiause versėje par vėina paspaudėma",
"tooltip-undo": "\"Anolioutė\" atmeta ta keitėma ėr atidara unkstesnies versėjės redagavėma skvarma. Leid pridietė atmetėma prīžasti kuomentarūsė.",
+ "tooltip-preferences-save": "Sauguotė nustatīmus",
"tooltip-summary": "Īvestė trompa santrauka",
"anonymous": "Neregėstrouts nauduotuos",
"siteuser": "{{SITENAME}} nauduotuos $1",
@@ -1237,6 +1396,11 @@
"spambot_username": "''MediaWiki'' reklamu šalėnėms",
"spam_reverting": "Atkoriama i onkstesne versėje, katra nator nūruodu i $1",
"spam_blanking": "Vėsos versėjės toriejė nūruodu i $1. Ėšvaluoma",
+ "pageinfo-header-edits": "Keitėma istuorėjė",
+ "pageinfo-header-restrictions": "Poslapė apsauga",
+ "pageinfo-header-properties": "Poslapė savībės",
+ "pageinfo-article-id": "Poslapė ID",
+ "pageinfo-language": "Poslapė kalba",
"pageinfo-toolboxlink": "Poslapė infuormacėjė",
"markaspatrolleddiff": "Žīmietė, kū patikrėnta",
"markaspatrolledtext": "Pažīmietė, ka poslapis patėkrėnts īr",
@@ -1257,12 +1421,17 @@
"file-nohires": "Geresnis ėšraiškėms negalėms.",
"svg-long-desc": "SVG fails, fuormalē $1 × $2 puškiu, faila dėdoms: $3",
"show-big-image": "Pėlns ėšraiškėms",
+ "show-big-image-preview": "Parvaizos dėdoms: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Kėta rezoliocėjė|Kėtas rezoliocėjės}}: $1.",
+ "show-big-image-size": "$1 × $2 pikselē",
"newimages": "Naujausiu abruozdieliu galerėjė",
"imagelisttext": "Žemiau īr '''$1''' failu sārašos, sorūšiouts $2.",
+ "newimages-legend": "Rietis",
"newimages-label": "Faila vards (ar anuo dalis):",
"ilsubmit": "Ėiškoutė",
"bydate": "palē data",
"sp-newimages-showfrom": "Ruodītė naujus abruozdielius pradedant nū $2, $1",
+ "just-now": "vuo tėk daba",
"bad_image_list": "Fuormats tuoks īr:\n\nTėk eilotės, prasėdedantės *, īr itraukiamas. Pėrmuojė nūruoda eilotie tor būtė nūruoda i bluoga abruozdieli.\nVėsas kėtas nūoruodas tuo patiuo eilotie īr laikomas ėšėmtim, tas rēšk ka poslapē, katrūs leidama iterptė abruozdieli.",
"metadata": "Metadoumenīs",
"metadata-help": "Šėtom failė īr papėlduomos infuormacėjės, tikriausē pridietos skaitmeninės kameruos a skanėrė, katros bova nauduots anam sokortė a parkeltė i skaitmenėni fuormata. Jēgo fails bova pakeists ėš pradėnės versėjės, katruos nekatruos datalės gal nepėlnā atspėndietė nauja faila.",
@@ -1277,6 +1446,7 @@
"exif-imagedescription": "Abruozdielė pavadėnėms",
"exif-make": "Kameras gamėntuos",
"exif-model": "Kameras muodelis",
+ "exif-artist": "Autuorios",
"exif-colorspace": "Spalvū pristatīms",
"exif-compressedbitsperpixel": "Abruozdielė sospaudėma rėžėms",
"exif-datetimeoriginal": "Doumenū generavėma data ė čiesos",
@@ -1288,15 +1458,29 @@
"exif-focallength": "Žėdinė nutuolėms",
"exif-flashenergy": "Blėca energėjė",
"exif-contrast": "Kuontrasts",
+ "exif-languagecode": "Kalba",
+ "exif-iimversion": "IIM versėjė",
+ "exif-iimcategory": "Kateguorėjė",
"exif-orientation-1": "Standartėšks",
"exif-xyresolution-i": "$1 puškē cuolī",
"exif-xyresolution-c": "$1 puškē centėmetrė",
"exif-componentsconfiguration-0": "nēsa",
"exif-exposureprogram-0": "Nenūruodīta",
+ "exif-lightsource-4": "Blėcos",
+ "exif-lightsource-9": "Poikos uors",
+ "exif-lightsource-10": "Apniukė",
+ "exif-lightsource-11": "Šešielis",
+ "exif-lightsource-255": "Kėts švėisuos šaltėnis",
+ "exif-flash-fired-0": "Blėcos nesovēkė",
+ "exif-flash-fired-1": "Blėcos sovēkė",
+ "exif-scenecapturetype-0": "Paprasts",
+ "exif-scenecapturetype-1": "Kraštuovaizdis",
+ "exif-scenecapturetype-2": "Puortrets",
+ "exif-scenecapturetype-3": "Naktėnė puortegrapėjė",
+ "exif-gaincontrol-0": "Nie",
"exif-contrast-0": "Paprasts",
"exif-contrast-1": "Mažos",
"exif-contrast-2": "Dėdlis",
- "watchlistall2": "vėsos",
"namespacesall": "vėsas",
"monthsall": "vėsė",
"confirmemail": "Patvirtėnkėt el. pašta adresa",
@@ -1311,10 +1495,14 @@
"deletedwhileediting": "Diemesė: Šėts poslapis ėštrints po šėta, kumet pradiejot redagoutė!",
"recreate": "Atkortė",
"confirm_purge_button": "Tink",
+ "confirm-watch-button": "Gerā",
+ "confirm-watch-top": "Pridietė šėta poslapi i keravuojamu sāraša?",
+ "confirm-unwatch-button": "Gerā",
"imgmultipageprev": "← unkstesnis poslapis",
"imgmultipagenext": "kėts poslapis →",
"imgmultigo": "Ētė!",
"imgmultigoto": "Ētė i poslapi $1",
+ "img-lang-default": "(kalba kāp nustatīta)",
"ascending_abbrev": "dėdiejėma tvarka",
"descending_abbrev": "mažiejontė tvarka",
"table_pager_next": "Kėts poslapis",
@@ -1328,6 +1516,7 @@
"autosumm-replace": "Poslapis keitams so '$1'",
"autoredircomment": "Nukreipama i [[$1]]",
"autosumm-new": "Naus poslapis: $1",
+ "autosumm-newblank": "Sokorts toščias poslapis",
"lag-warn-normal": "Pakeitėmā, naujesnė kāp $1 {{PLURAL:$1|sekondė|sekondės|sekondiu}}, tamė sārašė gal būtė neruodomė.",
"lag-warn-high": "Dielē dėdlė doumenū bazės pasėlikėma pakeitėmā, naujesnė nēgo $1 {{PLURAL:$1|sekondė|sekondės|sekondiu}}, tamė sarašė gal būtė neruodomė.",
"watchlistedit-normal-title": "Keistė keravuojamu sāroša",
@@ -1348,12 +1537,17 @@
"watchlisttools-raw": "Keistė nebėngta keravuojamu straipsniu sāraša",
"version": "Versėjė",
"version-license": "Licenzėjė",
+ "redirect-user": "Nauduotojė ID",
+ "redirect-page": "Poslapė ID",
+ "redirect-revision": "Poslapė versėjė",
+ "redirect-file": "Abruozdėlė vards",
"fileduplicatesearch": "Ėiškuotė doblikoutu failu",
"fileduplicatesearch-legend": "Ėiškuotė doblėkatu",
"fileduplicatesearch-filename": "Faila vards:",
"fileduplicatesearch-submit": "Ėiškuotė",
"fileduplicatesearch-info": "$1 × $2 pėkseliu<br />Faila dėdoms: $3<br />MIME tėps: $4",
"specialpages": "Specēlė̅jė poslapē",
+ "specialpages-note-top": "Pāiškėnėmā",
"specialpages-note": "* Normalūs specēlė̅jė puslapē.\n* <strong class=\"mw-specialpagerestricted\">Apribuotė specēlė̅jė puslapē.</strong>",
"specialpages-group-maintenance": "Sėstemas palaikīma pranešėmā",
"specialpages-group-other": "Kėtė specēlė̅jė poslapē",
@@ -1370,15 +1564,34 @@
"blankpage": "Toščias poslapis",
"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|Žīmiejėmu]] filtros:",
+ "tag-filter-submit": "Rietis",
"tags-edit": "taisītė",
+ "comparepages": "Primestė poslapio",
+ "logentry-delete-delete": "$1 ėštrīnė poslapi $3",
+ "logentry-delete-restore": "$1 atkūrė poslapi $3",
+ "revdelete-content-hid": "torėnīs pakavuots",
"logentry-move-move": "$1 pervadėna poslapi $3 i $4",
"logentry-move-move-noredirect": "$1 pervadėna poslapi $3 i $4, nepalikdams nukreipėma",
"logentry-move-move_redir": "$1 pervadėna poslapi $3 i $4, vėituo buvosė nukreipėma",
"logentry-move-move_redir-noredirect": "$1 pervadėna poslapi $3 i $4, vėituo buvosė nukreipėma, bat nepadėrbdams naujė",
"logentry-newusers-newusers": "$1 padėrba nauduotuojė paskīra",
+ "logentry-newusers-create": "$1 padėrba nauduotuojė paskīra",
"logentry-newusers-create2": "$1 padėrba nauduotuojė paskīra $3",
"logentry-newusers-autocreate": "Paskīra $1 bova padėrbta autuomatėškā",
+ "logentry-rights-rights": "$1 perkeitė $3 ėš $4 i $5",
"rightsnone": "(juokiū)",
+ "revdelete-summary": "keitėma pāiškėnėms",
+ "feedback-close": "Padėrbt",
+ "searchsuggest-search": "Ėiškuotė",
"searchsuggest-containing": "katrėi tor...",
- "expandtemplates": "Ėšskeistė šabluonus"
+ "api-error-duplicate-popup-title": "{{PLURAL:$1|Faila|Failu}} doblėkats.",
+ "expandtemplates": "Ėšskeistė šabluonus",
+ "pagelang-name": "Poslapis",
+ "pagelang-language": "Kalba",
+ "pagelang-use-default": "Nauduotė kalba kāp nustatīta",
+ "pagelang-select-lang": "Rinktėis kalba",
+ "right-pagelang": "Mainītė poslapė kalba",
+ "mediastatistics-table-mimetype": "MIME tips",
+ "mediastatistics-header-unknown": "Nežėnuoms",
+ "json-error-syntax": "Sintaksės klaida"
}
diff --git a/languages/i18n/sh.json b/languages/i18n/sh.json
index 5f637fd4..23a59acc 100644
--- a/languages/i18n/sh.json
+++ b/languages/i18n/sh.json
@@ -7,7 +7,8 @@
"OC Ripper",
"לערי ריינהארט",
"아라",
- "Milicevic01"
+ "Milicevic01",
+ "Macofe"
]
},
"tog-underline": "Podvuci linkove:",
@@ -145,7 +146,7 @@
"mytalk": "Moj razgovor / Мој разговор",
"anontalk": "Razgovor za ovu IP adresu",
"navigation": "Navigacija - Навигација",
- "and": "i/и",
+ "and": "&#32;i",
"qbfind": "Pronađite",
"qbbrowse": "Pregledaj - Прегледај",
"qbedit": "Uredi",
@@ -499,7 +500,6 @@
"passwordreset-emailsent-capture": "E-mail za resetiranje lozinke/zaporke je poslan (prikazan dolje).",
"passwordreset-emailerror-capture": "E-mail za resetiranje lozinke/zaporke, prikazan dolje, je poslan, ali slanje {{GENDER:$2|korisniku|korisnici|korisniku}} nije uspjelo: $1",
"changeemail": "Promijeni e-mail adresu",
- "changeemail-header": "Promijeni e-mail adresu korisničkog računa",
"changeemail-text": "Ispunite ovaj formular da biste promijenili svoju e-mail adresu. Morat ćete upisati svoju lozinku da potvrdite ovu promjenu.",
"changeemail-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.",
"changeemail-oldemail": "Trenutna e-mail adresa:",
@@ -507,7 +507,6 @@
"changeemail-none": "(ništa)",
"changeemail-password": "Tvoja šifra/lozinka za {{SITENAME}}:",
"changeemail-submit": "Promijeni e-mail",
- "changeemail-cancel": "Odustani",
"changeemail-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
"resettokens": "Resetirajte tokene",
"resettokens-text": "Možete resetirati tokene koji dozvoljavaju pristup određenim privatnim podacima povezanim sa vašim računom ovdje.\n\nTo možete učiniti ako ste ih slučajno podijelili sa nekim ili ako je vaš račun kompromitiran.",
@@ -778,7 +777,6 @@
"mergehistory-same-destination": "Izvorne i odredišne stranice ne mogu biti iste",
"mergehistory-reason": "Razlog:",
"mergelog": "Registar spajanja",
- "pagemerge-logentry": "spojeno [[$1]] u [[$2]] (sve do $3 revizije)",
"revertmerge": "Ukini spajanje",
"mergelogpagetext": "Ispod je spisak nedavnih spajanja historija stranica.",
"history-title": "Historija izmjena stranice \"$1\"",
@@ -829,7 +827,6 @@
"searchall": "sve",
"showingresults": "Dole {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
"showingresultsinrange": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.",
- "showingresultsheader": "{{PLURAL:$5|Rezultat '''$1''' od '''$3'''|Rezultati '''$1 - $2''' od '''$3'''}} za '''$4'''",
"search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
"powersearch-legend": "Napredna pretraga",
"powersearch-ns": "Pretraga u imenskim prostorima:",
@@ -1412,14 +1409,11 @@
"randomincategory": "Slučajna stranica u kategoriji",
"randomincategory-invalidcategory": "\"$1\" nije valjano ime kategorije.",
"randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
- "randomincategory-selectcategory": "Dobij slučajnu stranicu iz kategorije: $1 $2.",
- "randomincategory-selectcategory-submit": "Idi",
"randomredirect": "Slučajno preusmjerenje / Случајно преусмјерење",
"randomredirect-nopages": "Nema preusmjerenja u imenskom prostoru \"$1\".",
"statistics": "Statistike / Статистике",
"statistics-header-pages": "Statistike stranice",
"statistics-header-edits": "Statistike izmjena",
- "statistics-header-views": "Statistike pregleda",
"statistics-header-users": "Statistike korisnika",
"statistics-header-hooks": "Ostale statistike",
"statistics-articles": "Stranice sadržaja",
@@ -1428,13 +1422,9 @@
"statistics-files": "Broj postavljenih datoteka",
"statistics-edits": "Broj izmjena od kako je instalirana {{SITENAME}}",
"statistics-edits-average": "Prosječno izmjena po stranici",
- "statistics-views-total": "Ukupno pregleda",
- "statistics-views-total-desc": "Pregledi nepostojećih stranica i posebnih stranica nisu uključeni",
- "statistics-views-peredit": "Pregleda po izmjeni",
"statistics-users": "Registrovani [[Special:ListUsers|korisnici]]",
"statistics-users-active": "Aktivni korisnici",
"statistics-users-active-desc": "Korisnici koju su izvršili akciju u toku {{PLURAL:$1|zadnjeg dana|zadnja $1 dana|zadnjih $1 dana}}",
- "statistics-mostpopular": "Najviše pregledane stranice",
"pageswithprop": "Stranice sa svojstvom stranice",
"pageswithprop-legend": "Stranice sa svojstvom stranice",
"pageswithprop-text": "Ova stranica navodi stranice sa specifičnim svojstvom stranice.",
@@ -1475,7 +1465,6 @@
"uncategorizedtemplates": "Šabloni bez kategorije",
"unusedcategories": "Neiskorištene kategorije",
"unusedimages": "Neiskorišćene slike / Неискоришћене слике",
- "popularpages": "Popularne stranice",
"wantedcategories": "Tražene kategorije",
"wantedpages": "Tražene stranice / Тражене странице",
"wantedpages-badtitle": "Nevaljan naslov u setu rezultata: $1",
@@ -1535,7 +1524,6 @@
"querypage-disabled": "Ova posebna stranica je onemogućena jer smanjuje performanse.",
"booksources": "Književni izvori",
"booksources-search-legend": "Traži književne izvore",
- "booksources-go": "Idi",
"booksources-text": "Ispod se nalazi spisak vanjskih linkova na ostale stranice koje prodaju nove ili korištene knjige kao i stranice koje mogu da imaju važnije podatke o knjigama koje tražite:",
"booksources-invalid-isbn": "Navedeni ISBN broj nije validan; molimo da provjerite da li je došlo do greške pri kopiranju iz prvobitnog izvora.",
"specialloguserlabel": "Izvršilac:",
@@ -1652,7 +1640,7 @@
"wlheader-enotif": "* Obavještavanje e-poštom je omogućeno.",
"wlheader-showupdated": "* Stranice koje su izmijenjene od kad ste ih posljednji put posjetili su prikazane '''podebljanim slovima'''",
"wlnote": "Ispod {{PLURAL:$1|je posljednja izmjena|su posljednje '''$1''' izmjene|je posljednjih '''$1''' izmjena}} u {{PLURAL:$2|prethodnom satu|prethodna '''$2''' sata|prethodnih '''$2''' sati}}, zaključno sa $3, $4.",
- "wlshowlast": "Prikaži posljednjih $1 sati $2 dana $3",
+ "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
"watchlist-options": "Opcije liste praćenja",
"watching": "Pratim... / Додавање на списак надгледања...",
"unwatching": "Ne pratim…",
@@ -1699,7 +1687,6 @@
"delete-toobig": "Ova stranica ima veliku historiju promjena, preko $1 {{PLURAL:$1|revizije|revizija}}.\nBrisanje takvih stranica nije dopušteno da bi se spriječilo slučajno preopterećenje servera na kojem je {{SITENAME}}.",
"delete-warning-toobig": "Ova stranica ima veliku historiju izmjena, preko $1 {{PLURAL:$1|izmjene|izmjena}}.\nNjeno brisanje može dovesti do opterećenja operacione baze na {{SITENAME}};\nnastavite s oprezom.",
"rollback": "Vrati izmjene",
- "rollback_short": "Vrati",
"rollbacklink": "vrati",
"rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}",
"rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}",
@@ -2071,7 +2058,6 @@
"import": "Uvoz stranica",
"importinterwiki": "Transwiki uvoz",
"import-interwiki-text": "Izaberi wiki i naslov stranice za uvoz.\nDatumi revizije i imena urednika će biti sačuvana.\nSve akcije vezane uz transwiki uvoz su zabilježene u [[Special:Log/import|registru uvoza]].",
- "import-interwiki-source": "Izvorna wiki/stranica:",
"import-interwiki-history": "Kopiraj sve verzije historije za ovu stranicu",
"import-interwiki-templates": "Uključi sve šablone",
"import-interwiki-submit": "Uvezi - Увези",
@@ -2112,18 +2098,14 @@
"import-rootpage-nosubpage": "Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.",
"importlogpage": "Evidencija uvoza stranica",
"importlogpagetext": "Administrativni uvozi stranica s historijom izmjena sa drugih wikija.",
- "import-logentry-upload": "uvezen/a [[$1]] postavljanjem datoteke",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|revizija|revizije|revizija}}",
- "import-logentry-interwiki": "uveženo (\"transwikied\") $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revizija|revizije|revizija}} sa $2",
"javascripttest": "Javaskript test",
- "javascripttest-title": "Izvršavanje testova za $1",
"javascripttest-pagetext-noframework": "Ova stranica je rezervisana za izvršavanje javaskript testova.",
"javascripttest-pagetext-unknownframework": "Nepoznati radni okvir „$1“.",
"javascripttest-pagetext-frameworks": "Izaberite jedan od sledećih radnih okvira: $1",
"javascripttest-pagetext-skins": "Izaberite s kojim skinom (interfejsom) želite da pokrenete probu:",
"javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.",
- "javascripttest-qunit-heading": "Medijavikijin paket za testiranje – QUnit",
"tooltip-pt-userpage": "Vaša korisnička stranica",
"tooltip-pt-anonuserpage": "Korisnička stranica za ip koju Vi uređujete kao",
"tooltip-pt-mytalk": "Vaša stranica za razgovor",
@@ -2221,7 +2203,6 @@
"pageinfo-robot-policy": "Status tražilice",
"pageinfo-robot-index": "Stranicu je moguće indeksirati",
"pageinfo-robot-noindex": "Ne može se indeksirati",
- "pageinfo-views": "Broj pregleda",
"pageinfo-watchers": "Broj pratitelja stranice",
"pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
"pageinfo-redirects-name": "Preusmjeravanja na ovu stranicu",
@@ -2675,7 +2656,6 @@
"exif-urgency-low": "Nisko ($1)",
"exif-urgency-high": "Visoko ($1)",
"exif-urgency-other": "Priorite definiran od korisnika ($1)",
- "watchlistall2": "sve",
"namespacesall": "sve",
"monthsall": "sve",
"confirmemail": "Potvrdite adresu e-pošte",
@@ -2750,7 +2730,6 @@
"watchlisttools-edit": "Vidi i uredi listu praćenja",
"watchlisttools-raw": "Uredi grubu listu praćenja",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|razgovor]])",
- "unknown_extension_tag": "Nepoznata oznaka ekstenzije \"$1\"",
"duplicate-defaultsort": "'''Upozorenje''': Postavljeni ključ sortiranja \"$2\" zamjenjuje raniji ključ \"$1\".",
"version": "Verzija / Верзија",
"version-extensions": "Instalirana proširenja (ekstenzije)",
@@ -2766,7 +2745,7 @@
"version-parser-function-hooks": "Kuke parserske funkcije",
"version-hook-name": "Naziv kuke",
"version-hook-subscribedby": "Pretplaćeno od",
- "version-version": "(Verzija $1)",
+ "version-version": "($1)",
"version-license": "Licenca",
"version-poweredby-credits": "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
"version-poweredby-others": "ostali",
@@ -2890,19 +2869,20 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|je automatski unaprijeđen|je automatski unaprijeđena}} iz $4 u $5",
"rightsnone": "(nema)",
+ "revdelete-summary": "sažetak izmjene",
+ "feedback-adding": "Dodajem povratne informacije na stranicu...",
+ "feedback-bugcheck": "Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
+ "feedback-bugnew": "Provereno. Prijavi novu grešku",
"feedback-bugornote": "Ako ste spremni da detaljno opišete tehnički problem, onda [$1 prijavite grešku].\nU suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajati na stranici „[$3 $2]“, zajedno s korisničkim imenom i pregledačem koji koristite.",
- "feedback-subject": "Tema:",
- "feedback-message": "Poruka:",
"feedback-cancel": "Odustani",
- "feedback-submit": "Pošalji povratnu informaciju",
- "feedback-adding": "Dodajem povratne informacije na stranicu...",
+ "feedback-close": "Gotovo",
"feedback-error1": "Greška: neprepoznat rezultat od API-ja",
"feedback-error2": "Greška: Uređivanje nije uspjelo",
"feedback-error3": "Greška: nema odgovora od API-ja",
+ "feedback-message": "Poruka:",
+ "feedback-subject": "Tema:",
+ "feedback-submit": "Unesi",
"feedback-thanks": "Hvala! Vaša povratna informacija je postavljena na stranicu „[$2 $1]“.",
- "feedback-close": "Gotovo",
- "feedback-bugcheck": "Izvrsno! Molimo provjerite da se ne radi o nekom [$1 poznatom \"bugu\"].",
- "feedback-bugnew": "Provereno. Prijavi novu grešku",
"searchsuggest-search": "Traži",
"searchsuggest-containing": "sadrži...",
"api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
diff --git a/languages/i18n/shi.json b/languages/i18n/shi.json
index 6b4ac697..df7d659f 100644
--- a/languages/i18n/shi.json
+++ b/languages/i18n/shi.json
@@ -451,7 +451,6 @@
"mergehistory-same-destination": "Tisniwin tiɣbula d tin ɣilli rant urgant yat.",
"mergehistory-reason": "Maɣ:",
"mergelog": "Aɣmis n imsmun",
- "pagemerge-logentry": "[[$1]] tllan ɣ [[$2]] (Lqm ar $3)",
"revertmerge": "Fukku",
"mergelogpagetext": "Γid umuɣ n izdayn n umzruy n yat tasna ɣ yat yaḍn lli igan tamaynut",
"history-title": "Asakud n umcggr n « $1 »",
@@ -494,7 +493,6 @@
"searchrelated": "Tuyzday",
"searchall": "Kullu",
"showingresults": "Ẓr azddar {{PLURAL:$1|'''1''' May tuykfan|'''$1''' Mad kfan}} Bdu s #'''$2'''",
- "showingresultsheader": "{{PLURAL:$5|May kfa '''$1''' ar '''$3'''|Mad kfan '''$1 - $2''' ar '''$3'''}} i '''$4'''",
"search-nonefound": "Ur ittuykfa walu maygan zund ɣayli trit",
"powersearch-legend": "Amsigl imzwarn",
"powersearch-ns": "Icnubbucn ɣ tɣulin",
@@ -673,7 +671,6 @@
"booksources": "Iɣbula n udlis",
"booksources-search-legend": "Acnubc s iɣbula n idlisn",
"booksources-isbn": "ISBN:",
- "booksources-go": "Ftu",
"specialloguserlabel": "Amsqdac",
"speciallogtitlelabel": "Azwl",
"log": "Immussutn ittyuran",
@@ -702,7 +699,7 @@
"watchthispage": "Ṭfr tasna yad",
"unwatch": "Ur rast tsaggaɣ",
"watchlist-details": "Umuɣ nk n imttfura ar ittawi $1 tasna {{PLURAL:$1||s}}, bla dis tsmunt tisniwin n imdiwiln.",
- "wlshowlast": "Ml ikudan imggura $1 , ussan imggura $2 niɣd $3",
+ "wlshowlast": "Ml ikudan imggura $1 , ussan imggura $2 niɣd",
"watchlist-options": "Tixtiṛiyin n umuɣ lli ntfar",
"watching": "Ar itt sagga",
"unwatching": "Ur at sul ntsagga",
@@ -928,7 +925,6 @@
"exif-subjectdistancerange-2": "tannayt iqrbn",
"exif-gpslatitude-n": "dairat lard chamaliya",
"exif-gpsspeed-n": "Knots",
- "watchlistall2": "kraygat (kullu)",
"namespacesall": "kullu",
"monthsall": "kullu",
"recreate": "awd skr",
@@ -992,5 +988,6 @@
"htmlform-selectorother-other": "wayya",
"revdelete-restricted": "iskr aqn i indbaln",
"revdelete-unrestricted": "Aqn iḥiyd i indbaln",
- "rightsnone": "(ḥtta yan)"
+ "rightsnone": "(ḥtta yan)",
+ "revdelete-summary": "Awal uflla n imbddln"
}
diff --git a/languages/i18n/si.json b/languages/i18n/si.json
index 4c41510f..ce40d751 100644
--- a/languages/i18n/si.json
+++ b/languages/i18n/si.json
@@ -24,13 +24,17 @@
"සුරනිමල",
"아라",
"හරිත",
- "Indunil Chamara"
+ "Indunil Chamara",
+ "Susith Chandira Gts",
+ "Thanushka",
+ "Thirsty",
+ "Macofe"
]
},
"tog-underline": "සබැඳි යටීර කිරීම:",
"tog-hideminor": "මෑත වෙනස් කිරීම්වල සුළු සංස්කරණ සඟවන්න",
- "tog-hidepatrolled": "මෑත වෙනස් කිරීම්වල මුර සංචාරය කරන ලද සංස්කරණ සඟවන්න",
- "tog-newpageshidepatrolled": "විමසුමට ලක්කෙරුණු පිටු, අළුත් පිටු ලැයිස්තුවෙහි නොපෙන්වන්න",
+ "tog-hidepatrolled": "විමසුමට ලක්කෙරුණු සංස්කරණ, මෑත වෙනස් කිරීම් තුල නොපෙන්වන්න",
+ "tog-newpageshidepatrolled": "විමසුමට ලක්කෙරුණු පිටු, අළුත් පිටු ලැයිස්තුව තුල නොපෙන්වන්න",
"tog-extendwatchlist": "මෑත වෙනස්වීම් පමණක් නොව, අදාළ සියළු වෙනස්වීම් දක්වා පෙන්වන අයුරින් මුර-ලැයිස්තුව පුළුල් කරන්න",
"tog-usenewrc": "මෑත වෙනස්වීම් සහ මුර ලැයිස්තුව හී පිටුව අනුව සමූහ වෙනස්වීම් (ජාවාස්ක්‍රිප්ට් ඇවැසිය)",
"tog-numberheadings": "ශීර්ෂ-නාම ස්වයංක්‍රීයව අංකනය කරන්න",
@@ -51,14 +55,14 @@
"tog-shownumberswatching": "මුර කරනු ලබන පරිශීලකයන් සංඛ්‍යාව පෙන්වන්න",
"tog-oldsig": "පවතින අත්සන:",
"tog-fancysig": "අත්සන විකිපෙළ (ස්වයංක්‍රීය සබැඳියක් විරහිතව) ලෙසින් සලකන්න",
- "tog-uselivepreview": "තත්කාල පෙර-දසුන භාවිතා කරන්න (ජාවාස්ක්‍රිප්ට්) (පරීක්ෂණාත්මක)",
+ "tog-uselivepreview": "තත්කාල පෙර-දසුන භාවිතා කරන්න",
"tog-forceeditsummary": "හිස් සංස්කරණ සාරාංශයකට මා ඇතුළු වන විට මාහට ඉඟි කරන්න",
"tog-watchlisthideown": "මුර-ලැයිස්තුවෙන් මාගේ සංස්කරණ සඟවන්න",
"tog-watchlisthidebots": "මුර-ලැයිස්තුවෙන් රොබෝ සංස්කරණ සඟවන්න",
"tog-watchlisthideminor": "මුර-ලැයිස්තුවෙන් සුළු සංස්කරණ සඟවන්න",
"tog-watchlisthideliu": "ප්‍රවිෂ්ට වී ඇති පරිශීලකයන් විසින් සිදුකර ඇති සංස්කරණ මුර-ලැයිස්තුවෙන් සඟවන්න",
"tog-watchlisthideanons": "නිර්නාමික පරිශීලකයන් විසින් සිදුකොට ඇති සංස්කරණ මුර-ලැයිස්තුවෙන් සඟවන්න",
- "tog-watchlisthidepatrolled": "විමසුමට ලක්කෙරුණු සංස්කරණයන්, මෑත වෙනස්වීම් හී නොපෙන්වන්න",
+ "tog-watchlisthidepatrolled": "විමසුමට ලක්කෙරුණු සංස්කරණයන් මුර-ලැයිස්තුව තුල නොපෙන්වන්න",
"tog-ccmeonemails": "මා විසින් අනෙකුත් පරිශීලකයන් හට යවන විද්‍යුත්-තැපෑලයන්හි පිටපත් මාහට එවන්න",
"tog-diffonly": "“වෙනස් ”පදයන්ට පහළින්, පිටුවල අන්තර්ගතය නොපෙන්වන්න",
"tog-showhiddencats": "සැඟවුනු ප්‍රවර්ග පෙන්වන්න",
@@ -68,7 +72,7 @@
"underline-always": "සැමවිටම කරන්න",
"underline-never": "කිසිවිටෙක නොකරන්න",
"underline-default": "සම හෝ ගවේෂකයෙහි පෙරනිමිය",
- "editfont-style": "අකුරු විලාසයන් සංස්කරණ පෙදෙස:",
+ "editfont-style": "සංස්කරණ පෙදෙස තුල අකුරු විලාසය:",
"editfont-default": "පෙර නිමි බ්‍රව්සරය",
"editfont-monospace": "ඒක අවකාශිත ෆොන්ට්",
"editfont-sansserif": "සෙරිෆ්-විරහිත අකුරු",
@@ -226,6 +230,7 @@
"otherlanguages": "වෙනත් භාෂා වලින්",
"redirectedfrom": "($1 වෙතින් යළි-යොමු කරන ලදි)",
"redirectpagesub": "පිටුව යළි-යොමු කරන්න",
+ "redirectto": "යළියොමුව:",
"lastmodifiedat": "මෙම පිටුව අවසන් වරට වෙනස් කරන ලද්දේ $1 දිනදී, $2 වේලාවෙහිදීය.",
"viewcount": "මෙම පිටුවට {{PLURAL:$1|එක් වරක්|$1 වරක්}} පිවිස ඇත.",
"protectedpage": "ආරක්ෂිත පිටුව",
@@ -237,6 +242,7 @@
"pool-timeout": "අගුල සඳහා බලාපොරොත්තුවෙන් සිටීම කල් ඉකුත්වනලදී",
"pool-queuefull": "පොරොත්තු ලේඛනය පිරී ඇත",
"pool-errorunknown": "හඳුනා නොගත් දෝෂය",
+ "poolcounter-usage-error": "පරිශීලන දෝෂය: $1",
"aboutsite": "{{SITENAME}} පිළිබඳ",
"aboutpage": "Project:පිළිබඳ",
"copyright": " අන්ලෙසකින් සඳහන්කර නැති සෑම විටෙකම අන්තර්ගතය $1 යටතේ ඇත.",
@@ -330,6 +336,8 @@
"filerenameerror": "\"$1\" ගොනුව \"$2\" බවට යළි-නම්-කිරීම සිදු කල නොහැකි විය.",
"filedeleteerror": "\"$1\" ගොනුව මකා-දැමිය නොහැකි විය.",
"directorycreateerror": "\"$1\" නාමාවලිය තැනීම කල නොහැකි විය.",
+ "directoryreadonlyerror": "\"$1\" ගොණුව කියවීමට පමණයි.",
+ "directorynotreadableerror": "\"$1\" ගොණුව කියවීමට නොහැක.",
"filenotfound": "\"$1\" ගොනුව සොයා ගත නොහැකි විය.",
"unexpected": "අනපේක්‍ෂිත අගය: \"$1\"=\"$2\".",
"formerror": "දෝෂය: ආකෘති-පත්‍රය ඉදිරිපත් කල නොහැකි විය",
@@ -350,7 +358,7 @@
"viewsourcetext": "මෙම පිටුවෙහි මූලාශ්‍රය නැරඹීමට හා පිටපත් කිරීමට ඔබ හට හැකිය:",
"viewyourtext": "'''ඔබගේ සංස්කරණ''' නැරඹීම සහ මූලාශ්‍රය පිටපත් කිරීම ඔබට කල හැක:",
"protectedinterface": "මෙම පිටුව විසින්, මෘදුකාංගය සඳහා අතුරුමුව පෙළ සපයන අතර එබැවින් අපයෙදුම වැලැක්වීම සඳහා එය අවුරා ඇත.",
- "editinginterface": "'''අවවාදයයි:''' මෘදුකාංගයට අතුරුමුව පෙළ සැපයීමට භාවිතා වන පිටුවක් ඔබ විසින් සංස්කරණය කරනු ලබයි.\nමෙම පිටුවට සිදු කරන වෙනස්වීම් විසින් අනෙකුත් පරිශීලකයන්ගේ පරිශීලක අතුරුමුවෙහි පෙනුමට බලපෑම් එල්ල කෙරෙනු ඇත.\nපරිවර්තන සඳහා, මීඩියාවිකි ප්‍රාදේශීයකරන ව්‍යාපෘතිය, [//translatewiki.net/wiki/Main_Page?setlang=si translatewiki.net], භාවිතා කිරීම සලකා බැලීමට කාරුණික වන්න.",
+ "editinginterface": "<strong>අවවාදයයි:</strong> මෘදුකාංගයට අතුරුමුව පෙළ සැපයීමට භාවිතා වන පිටුවක් ඔබ විසින් සංස්කරණය කරනු ලබයි.\nමෙම පිටුවට සිදු කරන වෙනස්වීම් විසින් අනෙකුත් පරිශීලකයන්ගේ පරිශීලක අතුරුමුවෙහි පෙනුමට බලපෑම් එල්ල කෙරෙනු ඇත.",
"cascadeprotected": "\"තීරු දර්ශන\" විකල්පය සක්‍රීයනය කොට එමගින් ආරක්‍ෂණය කල පහත දැක්වෙන {{PLURAL:$1|පිටුව|පිටු}} අඩංගු කර ඇති බැවින්, මෙම පිටුව සංස්කරණය කිරීමෙන් වලකා ඇත:\n$2",
"namespaceprotected": "'''$1''' නාමඅවකාශයෙහි පිටු සංස්කරණය කිරීමට ඔබහට අවසර නොමැත.",
"customcssprotected": "මෙම CSS පිටුව සංස්කරණය කිරීමට ඔබට අවසර නොමැත්තේ එහි අනෙකුත් පරිශීලකයෙකුගේ පුද්ගලික පරිස්ථිතීන් අඩංගු බැවිනි.",
@@ -363,6 +371,7 @@
"titleprotected": "මෙම ශීර්ෂ-නාමය තැනීම [[User:$1|$1]] විසින් වාරණය කොට ඇත.\nමේ සඳහා ''$2'' හේතුව දක්වා ඇත.",
"filereadonlyerror": "\"$2\"දත්ත ගොනුවේ කියවීමට පමණක් ඇති ආකාරයට ඇති නිසා \"$1\" ගොනුව සංස්කරණය කල නොහැක.\n\nමෙය අගුලු දැමූ පරිගණක පරිපාලක \"$3\" හේතුව ඉදිරිපත්කර ඇත.",
"exception-nologin": "ප්‍රවිෂ්ට වී නොමැත",
+ "exception-nologin-text": "මෙම පිටුවට ප්‍රවේශ වීමට හෝ ඉල්ලුම් කරන ලද ක්‍රියාව සිදුකිරීම සඳහා කරුණාකර ඔබගේ ගිණුමට ප්‍රවේශ වන්න.",
"virus-badscanner": "අයෝග්‍ය වික්‍යාසයකි: අඥාත වයිරස සුපිරික්සකයකි: ''$1''",
"virus-scanfailed": "පරිලෝකනය අසාර්ථක විය (කේතය $1)",
"virus-unknownscanner": "නොහඳුනන ප්‍රතිවයිරසයක්:",
@@ -402,6 +411,9 @@
"gotaccountlink": "පිවිසෙන්න",
"userlogin-resetlink": "ඔබේ පිවිසුම් තොරතුරු අමතකද?",
"userlogin-resetpassword-link": "ඔබේ මුරපදය නැති වුනාද?",
+ "userlogin-helplink2": "ගිණුම වෙත ප්‍රවේශ වීම සඳහා උදවු",
+ "userlogin-loggedin": "ඔබ දැනටමත් {{GENDER:$1|}} ලෙස පිවිසී ඇත.\nනව පරිශීලකයෙකු ලෙස ඇතුළු වීමට පහත ආකෘතිය පුරවන්න.",
+ "userlogin-createanother": "තවත් ගිණුමක් ආරම්භ කරන්න",
"createacct-emailrequired": "වි-තැපෑල ලිපිනය",
"createacct-emailoptional": "වි-තැපෑල ලිපිනය (විකල්ප)",
"createacct-email-ph": "ඔබගේ වි-තැපෑල ලිපිනය ඇතුළු කරන්න",
@@ -463,6 +475,7 @@
"createaccount-text": "කිසියම් අයෙකු, \"$2\" නමින් හා, \"$3\" යන මුර-පදය යොදමින්, ඔබගේ විද්‍යුත්-තැපැල් ලිපිනය සඳහා {{SITENAME}} ($4) හි ගිණුමක් තනා ඇත.\nඔබ දැන් ගිණුම‍ට පිවිස, ඔබගේ මුර-පදය වෙනස් කල යුතුව ඇත.\n\nමෙම ගිණුම තැනී ඇත්තේ වැරදීමකින් නම්, මෙම පණිවුඩය නොසලකා හැරිය හැක.",
"login-throttled": "ඔබ විසින් මෑතදී පමණට වඩා වාර ගණනක් පිවිසීමෙහි උත්සාහයන් දරා ඇත.\nයළි උත්සාහ කිරීමට පෙර $1 වේලාවක් රැඳී සිටින්න.",
"login-abort-generic": "ඔබගේ පිවිසීම අසාර්ථකයි - අතහැර දමනලදී",
+ "login-migrated-generic": "ඔබගේ ගිණුමේ ස්වරුපය වෙනස්කර ඇත. ඔබගේ පරිශීලක නාමය මෙම විකිය තුල තවදුරටත් භාවිත කල නොහැක.",
"loginlanguagelabel": "භාෂාව: $1",
"suspicious-userlogout": "නිෂ්ක්‍රමණය සඳහා ඔබගේ අයැදුම නිෂ්ප්‍රභා කෙරුනේ එය යොමු කොට ඇත්තේ භින්න(කැඩුනු) බ්‍රවුසරයකින් හෝ නිවේෂණය කෙරෙමින් පවතින ප්‍රොක්සියක් වෙතින් යැයි බැලූ බැල්මට පෙනෙන බැවිනි.",
"createacct-another-realname-tip": "සැබෑ නාමය හෙළි කිරීම වෛකල්පිකයි.\nඔබ විසින් එය හෙළි කල හොත්, ඔබගේ කෘතීන් සඳහා ඔබහට කතෘ-බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.",
@@ -514,7 +527,6 @@
"passwordreset-emailsent-capture": "මුර-පදය වෙනස් කිරීම පිළිබඳව විද්‍යුත් තැපෑලක් යවන ලදී, එය පහත දැක්වේ.",
"passwordreset-emailerror-capture": "සිහිකැඳවුම් ඊ-තැපෑල ජනිත කරනු ලැබූ අතර, එය පහත දැක්වේ, නමුත් එය {{GENDER:$2|}}පරිශීලකයාට යැවීම අසාර්ථක වුනි: $1",
"changeemail": "විද්‍යුත් තැපැල් ලිපිනය වෙනස් කරන්න",
- "changeemail-header": "ගිණුම් විද්‍යුත් තැපැල් ලිපිනය වෙනස් කරන්න",
"changeemail-text": "ඔබගේ විද්‍යුත් තැපැල් ලිපිනය වෙනස් කිරීම සඳහා මෙම ෆෝරමය සම්පූර්ණ කරන්න . මෙම වෙනස් කිරීම තහවුරු කිරීම සඳහා ඔබගේ මුරපදය යෙදීමට ඔබට සිදු වේ.",
"changeemail-no-info": "මෙම පිටුව සෘජු ලෙස සම්ප්‍රවේශය කෙරුමට පළමුව ඔබ ප්‍රවිෂ්ටව සිටිය යුතුය.",
"changeemail-oldemail": "වත්මන් විද්‍යුත් තැපැල් ලිපිනය:",
@@ -522,11 +534,11 @@
"changeemail-none": "(කිසිවක් නොමැත)",
"changeemail-password": "ඔබේ {{SITENAME}} මුරපදය:",
"changeemail-submit": "විද්‍යුත් තැපෑල වෙනස් කරන්න",
- "changeemail-cancel": "අවලංගු කරන්න",
"changeemail-throttled": "ඔබ විසින් මෑතදී පමණට වඩා වාර ගණනක් පිවිසීමෙහි උත්සාහයන් දරා ඇත.\nයළි උත්සාහ කිරීමට පෙර $1 වේලාවක් රැඳී සිටින්න.",
"resettokens": "සංකේත නැවත සකසන්න",
"resettokens-legend": "සංකේත නැවත සකසන්න",
"resettokens-tokens": "සංකේත:",
+ "resettokens-token-label": "$1 (පවතින අගය: $2)",
"bold_sample": "තදකුරු පෙළ",
"bold_tip": "තදකුරු පෙළ",
"italic_sample": "ඇලකුරු පෙළ",
@@ -553,7 +565,7 @@
"preview": "පෙරදසුන",
"showpreview": "පෙරදසුන පෙන්වන්න",
"showdiff": "වෙනස්කිරීම් පෙන්වන්න",
- "anoneditwarning": "'''අවවාදයයි:''' ඔබ පරිශීලකයෙකු වශයෙන් පද්ධතියට ප්‍රවිෂ්ට වී නොමැත.\nඔබගේ අයිපී යොමුව මෙම පිටුවෙහි සංස්කරණ ඉතිහාසයෙහි වාර්තාගත වෙනු ඇත",
+ "anoneditwarning": "<strong>අවවාදයයි:</strong> ඔබ පරිශීලකයෙකු වශයෙන් පද්ධතියට ප්‍රවිෂ්ට වී නොමැත.\nඔබගේ අයිපී යොමුව මෙම පිටුවෙහි සංස්කරණ ඉතිහාසයෙහි වාර්තාගත වෙනු ඇත\nඔබ <strong>[$1 පිවිසීම]</strong> හෝ <strong>[$2 ගිණුමක් තැනීම]</strong> කලහොත්, ඔබගේ සංස්කරණයන් වෙනත් ප්‍රතිලාභ සමග, ඔබගේ පරිශීලක නාමය ඉදිරියේ දැක්වෙනු ඇත.",
"anonpreviewwarning": "අවවාදයයි: ඔබ පරිශීලකයෙකු වශයෙන් පද්ධතියට ප්‍රවිෂ්ට වී නොමැත. එමනිසා මෙම පිටුවෙහි සංස්කරණ ඉතිහාසයෙහි, ඔබගේ අන්තර්ජාල ලිපිනය සටහන් කරගැනීමට සිදුවනු ඇත.",
"missingsummary": "'''සිහිගැන්වීමයි:''' ඔබ විසින් සංස්කරණ සාරාංශයක් සපයා නොමැත.\nඔබ නැවතත් සුරැකීම ක්ලික් කලහොත්, ඔබගේ සංස්කරණය එවැන්නක් විරහිතවම සුරැකෙනු ඇත.",
"missingcommenttext": "කරුණාකර පහතින් පරිකථනයක් ඇතුළු කරන්න.",
@@ -637,6 +649,8 @@
"edit-gone-missing": "පිටුව යාවත්කාල කිරීම සිදුකල නොහැකි විය.\nඑය මකා දමා ඇති බවක් පෙනේ.",
"edit-conflict": "සංස්කරණ ගැටුම.",
"edit-no-change": "පෙළට කිසිදු වෙනසක් සිදු නොකල බැවින් ඔබගේ සංස්කරණය නොසලකාහරින ලදි.",
+ "postedit-confirmation-created": "මෙම පිටුව නිර්මාණය කරන ලදී.",
+ "postedit-confirmation-restored": "මෙම පිටුව නැවත පිහිටුවන ලදී.",
"postedit-confirmation-saved": "ඔබගේ සංස්කරණය සුරකින ලදී.",
"edit-already-exists": "නව පිටුවක් තැනිය නොහැකි විය.\nඑය දැනටමත් පවතියි.",
"defaultmessagetext": "සාමාන්‍ය පණිවුඩ පෙළ",
@@ -689,7 +703,7 @@
"history-feed-empty": "අයැදුනු පිටුව නොපවතියි.\nඑය විකියෙන් මකා දමා හෝ නම-වෙනස් කොට ඇතිවා විය හැකිය.\nඅදාල නව පිටු සඳහා [[Special:Search|විකිය තුල ගවේෂණය]] අත්හදා බලන්න.",
"rev-deleted-comment": "(සංස්කරණ සාරාංශය ඉවත් කරන ලදි)",
"rev-deleted-user": "(පරිශීලක-නාමය ඉවත් කරන ලදි)",
- "rev-deleted-event": "(ලඝු-සටහන් තැබීමේ ක්‍රියාව අත්හිටුවන ලදි)",
+ "rev-deleted-event": "(ලඝු-සටහන් ඉවත් කරන ලදී)",
"rev-deleted-user-contribs": "[පරිශීපක නාමය හෝ ලිපිනය ඉවත් කළා - දායකත්ව මඟින් සඟවන ලද සංස්කරණය]",
"rev-deleted-text-permission": "මෙම පිටු සංශෝධනය '''මකා දමා ඇත'''.\nවැඩි විස්තර බොහෝ විට [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} මකාදැමීම් ලඝු-සටහන] වෙත තිබීමට ඉඩ ඇත.",
"rev-deleted-text-unhide": "මෙම පිටුව සංශෝධනය කිරීම '''මකා දමා ඇත'''.\nමේ පිලිබඳ විස්තර බොහෝවිට [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} මකා දැමීම් ලඝු-සටහනෙහි] තිබීමට ඉඩ ඇත.\nඔබට ඇවැසි නම් [$1 මෙම වෙනස නැරඹීම] තවමත් සිදුකල හැක.",
@@ -769,7 +783,6 @@
"mergehistory-same-destination": "මූල හා අන්ත පිටු දෙකම එකක් විය නොහැක",
"mergehistory-reason": "හේතුව:",
"mergelog": "එකාබද්ධ කිරීම් ලඝු-සටහන",
- "pagemerge-logentry": "[[$2]] හා සමග [[$1]] ඒකාබද්ධ කරන ලදි ($3 දක්වා සංශෝධනයන්)",
"revertmerge": "ඒකාබද්ධය අහෝසි කරන්න",
"mergelogpagetext": "එක් පිටු ඉතිහාසයක් තවකක් හා සමග ඉතා මෑතදී සිදුවූ ඒකාබද්ධ වීම් දැක්වෙන ලැයිස්තුවක් පහත වේ.",
"history-title": "$1: සංශෝධන ඉතිහාසය",
@@ -815,15 +828,16 @@
"searchrelated": "ආශ්‍රිත",
"searchall": "සියල්ල",
"showingresults": "#'''$2''' ගෙන් ආරම්භ කොට, {{PLURAL:$1|ප්‍රතිඵල '''1''' ක් |ප්‍රතිඵල '''$1''' ක්}} දක්වා පහත පෙන්වා ඇත.",
- "showingresultsheader": "'''$4''' සඳහා {{PLURAL:$5| '''$3''' අතුරින් '''$1''' ප්‍රතිඵලය| '''$3''' අතුරින් '''$1 - $2''' ප්‍රතිඵලයන්}}",
"search-nonefound": "විමසුම හා ගැලපෙන ප්‍රතිඵල කිසිවක් නොමැත.",
"powersearch-legend": "වැඩිමනත් ගවේෂණය",
"powersearch-ns": "නාමඅවකාශයන්හි ගවේෂණය කරන්න:",
"powersearch-togglelabel": "පිරික්සන්න:",
"powersearch-toggleall": "සියල්ල",
"powersearch-togglenone": "කිසිවක් නොමැත",
+ "powersearch-remember": "අනාගත සෙවිම් තුලදි මෙම තෝරාගැනීම් මතක තබාගන්න",
"search-external": "බාහිර ගවේෂණය",
"searchdisabled": "{{SITENAME}} ගවේෂණය අක්‍රීය කොට ඇත.\nමේ අතරතුර ඔබ හට ගූගල් ඔස්සේ ගවේෂණය කල හැක.\n{{SITENAME}} අන්තර්ගතය පිළිබඳ ඔවුන්ගේ සූචි යල් පැන ගොස් ඇතිවා විය හැකි බව සටහන් කර ගන්න.",
+ "search-error": "සෙවීම් සිදුකිරීමේදී වැරද්දක් මතුවී ඇත: $1",
"preferences": "අභිරුචි",
"mypreferences": "අභිරුචීන්",
"prefs-edits": "සංස්කරණයන් සංඛ්‍යාව:",
@@ -902,7 +916,7 @@
"gender-female": "ස්ත්‍රී",
"prefs-help-gender": "මෙම සංස්කරණය අත්‍යවශ්‍ය නැත: මෘදුකාංග විසින් නිවැරැදි ආමන්ත්‍රනය සඳහා භාවිතා කෙරෙයි.\nමෙම තොරතුර ප්‍රජාවට විවෘතය.",
"email": "විද්‍යුත් තැපෑල",
- "prefs-help-realname": "සැබෑ නාමය හෙළි කිරීම වෛකල්පිකයි.\nඔබ විසින් එය හෙළි කල හොත්, ඔබගේ කෘතීන් සඳහා ඔබහට කතෘ-බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.",
+ "prefs-help-realname": "සැබෑ නාමය හෙළි කිරීම අත්‍යවශ්‍ය නැත.\nඔබ විසින් එය හෙළි කල හොත්, ඔබගේ කෘතීන් සඳහා ඔබහට කතෘබුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.",
"prefs-help-email": "විද්‍යුත් තැපැල් ලිපිනය අත්‍යාවශ්‍ය නොවේ, එහෙත් ඔබගේ මුර පදය අමතක වූ විටෙක එය යලි සැකසීමට නම් විද්‍යුත් ලිපිනයක් දී තිබිය යුතුය.",
"prefs-help-email-others": "ඔබගේ පරිශීලක හෝ පරිශීලක සාකච්ඡා පිටුවෙහි සබැඳියක් ඔස්සේ විද්‍යුත් තැපෑල මගින් අනෙක් අයට ඔබව සම්බන්ධ කර ගැනීම පිණිස තේරිමක් සිදු කල හැක.\nඅනෙකුත් පරිශීලකයන් ඔබව අමතන විට ඔබගේ විද්‍යුත් තැපැල් ලිපිනය හෙලිදරවු නොකෙරේ.",
"prefs-help-email-required": "විද්‍යුත්-ලිපිනය අවශ්‍යයි.",
@@ -1006,6 +1020,10 @@
"right-editusercssjs": "අනෙකුත් පරිශීලකයන්ගේ CSS හා JS ගොනු සංස්කරණය කරන්න",
"right-editusercss": "අනෙකුත් පරිශීලකයන්ගේ CSS ගොනු සංස්කරණය කරන්න",
"right-edituserjs": "අනෙකුත් පරිශීලකයන්ගේ JS ගොනු සංස්කරණය කරන්න",
+ "right-viewmywatchlist": "ඔබගේ මුර-ලැයිස්තුව පෙන්වන්න",
+ "right-viewmyprivateinfo": "ඔබගේ පෞද්ගලික දත්ත පෙන්වන්න (උදා. විද්‍යුත් තැපැල් ලිපිනය, නිවැරදි නම)",
+ "right-editmyprivateinfo": "ඔබගේ පෞද්ගලික දත්ත සංස්කරණය කරන්න (උදා. විද්‍යුත් තැපැල් ලිපිනය, නිවැරදි නම)",
+ "right-editmyoptions": "ඔබගේ අභිරුචියන් සංස්කරණය කරන්න",
"right-rollback": "සුවිශේෂ පිටුවක් අවසන් වරට සංස්කරණය කල පරිශීලකයෙකුගේ සංස්කරණයන් විගසින් පුනරාවර්තනය කරන්න",
"right-markbotedits": "පුනරාවර්තනය-කෙරුනු සංස්කරණයන් රොබෝ සංස්කරණයන් ලෙස සලකුණු කරන්න",
"right-noratelimit": "‍සීඝ්‍රතා සීමාවන්ගෙක් බලපෑම් ඇතිනොවන්න",
@@ -1031,6 +1049,7 @@
"action-createpage": "පිටු තනන්න",
"action-createtalk": "සංවාද පිටු තනන්න",
"action-createaccount": "මෙම පරිශීලක ගිණුම තනන්න",
+ "action-history": "මෙම පිටුවේ අතීතය පෙන්වන්න",
"action-minoredit": "මෙම සංස්කරණය සුළු ලෙස සලකුණු කරන්න",
"action-move": "මෙම පිටුව ගෙනයන්න",
"action-move-subpages": "මෙම පිටුව හා එහි උප පිටු ගෙන යන්න",
@@ -1060,6 +1079,10 @@
"action-userrights-interwiki": "අනෙකුත් විකියන්ගේ පරිශීලකයන්ගේ පරිශීලක හිමිකම් සංස්කරණය කරන්න",
"action-siteadmin": "දත්ත-සංචිතය අවහිරකරන්න හෝ අවහිරය ඉවත් කරන්න",
"action-sendemail": "ඊ-තැපැල් පණිවුඩ යවන්න",
+ "action-editmywatchlist": "ඔබගේ මුර-ලැයිස්තුව සංස්කරණය කරන්න",
+ "action-viewmywatchlist": "ඔබගේ මුර-ලැයිස්තුව පෙන්වන්න",
+ "action-viewmyprivateinfo": "ඔබගේ පෞද්ගලික තොරතුරු පෙන්වන්න",
+ "action-editmyprivateinfo": "ඔබගේ පෞද්ගලික තොරතුරු සංස්කරණය කරන්න",
"nchanges": "$1 {{PLURAL:$1|වෙනස්වීම|වෙනස්වීම්}}",
"enhancedrc-history": "ඉතිහාසය",
"recentchanges": "මෑත වෙනස්කිරීම්",
@@ -1125,9 +1148,9 @@
"uploaderror": "උඩුගත කිරීම් දෝෂයක්",
"upload-recreate-warning": "'''අවවාදයයි: මෙම නම තිබූ ගොනුවක් මකාදැමීමට හෝ ගෙනයෑමට හෝ ලක්ව ඇත.'''\n\nඔබගේ පහසුව තකා මෙම පිටුවවෙහි මකාදැමුමෙහි හා ගෙනයෑමෙහි ලඝු සටහන මෙහි දැක්වේ:",
"uploadtext": "ගොනු උඩුගත කිරීම සඳහා පහත ආකෘති පත්‍රය භාවිතා කරන්න.\nපෙරදී උඩුගතකෙරුණු ගොනු නැරඹුම හෝ ගවේෂණය සඳහා [[Special:FileList|උඩුගතකෙරුණු ගොනු ලැයිස්තුව]] වෙත යන්න, (යළි)උඩුගතකෙරුම්ද [[Special:Log/upload|උඩුගතකෙරුම් ලඝු-සටහන]] තුල සටහන් කර ඇති අතර, මකාදැමුම් [[Special:Log/delete|මකාදැමුම් ලඝු-සටහන]] හි ඇත.\n\nගොනුවක් පිටුවක බහාලීම සඳහා, පහත ආකාරයේ සබැඳියක් භාවිතා කරන්න:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' ගොනුවෙහි පරිපූර්ණ අනුවාදය භාවිතා කිරීමට\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' 'විකල්ප පෙළ' යන්න විස්තරය ලෙසින් තැබෙමින් වම් මායිමෙහි කොටුවක පික්සල 200 පළල ප්‍රවාචිතයක් භාවිතා කිරීමට\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' ගොනුව ප්‍රදර්ශනය නොකෙරෙමින් ගොනුවට සෘජු ලෙස සබැඳීමට",
- "upload-permitted": "අවසරලත් ගොනු වර්ගයන්: $1.",
- "upload-preferred": "අභිරුචි ගොනු වර්ගයන්: $1.",
- "upload-prohibited": "තහනම් ගොනු වර්ගයන්: $1.",
+ "upload-permitted": "අවසරලත් ගොනුව {{PLURAL:$2|type|types}}: $1.",
+ "upload-preferred": "අභිරුචි ගොනුව {{PLURAL:$2|type|types}}: $1",
+ "upload-prohibited": "තහනම් ගොනුව {{PLURAL:$2|type|types}}: $1.",
"uploadlogpage": "උඩුගත කිරීම් සටහන",
"uploadlogpagetext": "ඉතා මෑතදී සිදුකල ගොනු උඩුගතකිරීම් ලැයිස්තුවක් පහත දැක්වේ.\nවැඩිමනත් දෘශ්‍ය සමාලෝචනය සඳහා [[Special:NewFiles|නව ගොනු ගැලරිය]] බලන්න.",
"filename": "ගොනු නාමය",
@@ -1363,7 +1386,6 @@
"statistics": "සංඛ්‍යාන දත්ත",
"statistics-header-pages": "පිටුවල සංඛ්‍යාන දත්ත",
"statistics-header-edits": "සංස්කරණ වල සංඛ්‍යාන දත්ත",
- "statistics-header-views": "නැරඹුම් වල සංඛ්‍යාන දත්ත",
"statistics-header-users": "පරිශීලකයන් පිළිබඳ සංඛ්‍යාන දත්ත",
"statistics-header-hooks": "අනෙක් සංඛ්‍යා ලේඛන",
"statistics-articles": "අන්තර්ගත පිටු",
@@ -1372,13 +1394,9 @@
"statistics-files": "උඩුගතකරන ලද ගොනු",
"statistics-edits": "{{SITENAME}} පිහිටුවීමෙන් අනතුරුව සිදුවූ පිටු සංස්කරණයන්",
"statistics-edits-average": "එක් පිටුවකට සංස්කරණයන්හි මධ්‍යක අගය",
- "statistics-views-total": "නැරඹුම් එකතුව",
- "statistics-views-total-desc": "විශේෂ හා දැනට නොපවතින පිටු වල දසුන් එක් කොට නැත",
- "statistics-views-peredit": "එක් සංස්කරණයකට නැරඹුම් ගණන",
"statistics-users": "ලේඛනගත [[Special:ListUsers|පරිශීලකයෝ]]",
"statistics-users-active": "ක්‍රියාශීලි පරිශීලකයන්",
"statistics-users-active-desc": "පසුගිය {{PLURAL:$1|දිනය|දින $1}} තුලදී කිසියම් ක්‍රියාවක් සිදු කල පරිශීලකයන්",
- "statistics-mostpopular": "බෙහෙවින් නරඹනු ලබන පිටු",
"pageswithprop-prop": "ගුණ නාමය:",
"pageswithprop-submit": "යන්න",
"pageswithprop-prophidden-binary": "ද්විමය ගුණ අගය සැඟවී ($1)",
@@ -1414,7 +1432,6 @@
"uncategorizedtemplates": "ප්‍රවර්ගීකරණය නොවූ සැකිලි",
"unusedcategories": "භාවිතා නොවූ ප්‍රවර්ග",
"unusedimages": "භාවිතා නොවූ ගොනු",
- "popularpages": "ජනප්‍රිය පිටු",
"wantedcategories": "අවශ්‍ය ප්‍රවර්ග",
"wantedpages": "අවශ්‍ය පිටු",
"wantedpages-badtitle": "ප්‍රතිඵල ගොන්නේ අනීතික ශීර්ෂය: $1",
@@ -1466,10 +1483,11 @@
"pager-older-n": "{{PLURAL:$1|පැරණි 1|පැරණි $1}}",
"suppress": "ප්‍රමාද දෝෂය",
"querypage-disabled": "ක්‍රියාකාරීත්ව හේතූන්මත මෙම විශේෂ පිටුව අක්‍රීය කර ඇත.",
+ "apihelp": "API උදවු",
+ "apihelp-no-such-module": "ආකෘතිය \"$1\" හමුවුනේ නැත.",
"booksources": "මූලාශ්‍ර පොත්",
"booksources-search-legend": "ග්‍රන්ථ මූලාශ්‍ර සඳහා ගවේෂණය කරන්න",
"booksources-isbn": "ISBN:",
- "booksources-go": "යන්න",
"booksources-text": "පහත දැක්වෙන්නේ අළුත් හා පරණ පොත් විකුණන අනෙකුත් අඩවි වලට සබැඳි ලැයිස්තුවක් වන අතර, ඔබ විසින් සොයන පොත් පිළිබඳ වැඩිමනත් විස්තර ඒවා‍යේ අඩංගු වීමට ඉඩ ඇත:",
"booksources-invalid-isbn": "සපයන ලද ISBN අංකය නීතික බවක් නොපෙන්වයි; මුල් මුලාශ්‍රය වෙතින් පිටපත් කිරීමේදී සිදුවූ දෝෂ සඳහා පරික්ෂා කරන්න.",
"specialloguserlabel": "ඉටුකරන්නා:",
@@ -1582,7 +1600,7 @@
"wlheader-enotif": "විද්‍යුත් තැපැල් දැනුම්දීම සක්‍රීයයි.",
"wlheader-showupdated": "ඔබ විසින් ඒවාට අවසන් වරට පිවිසුනු පසුව වෙනස්ව තිබෙන පිටු <strong>තදකුරු</strong> වලින් පෙන්වා ඇත.",
"wlnote": "පහත දැක්වෙන්නේ $3, $4 මෙන්, අවසන් {{PLURAL:$2|පැය|පැය '''$2''' }} තුලදී සිදු කෙරී ඇති {{PLURAL:$1|අවසන් වෙනස්වීම්යි |අවසන් වෙනස්වීම් '''$1''' යි}}.",
- "wlshowlast": "පසුගිය පැය $1 දින $2 $3 පෙන්වන්න",
+ "wlshowlast": "පසුගිය පැය $1 දින $2 පෙන්වන්න",
"watchlist-options": "තෝරාගතහැකි මුර ලැයිස්තු සැකසුම්",
"watching": "මුර කරමින්...",
"unwatching": "මුර නොකරමින්...",
@@ -1620,7 +1638,6 @@
"delete-warning-toobig": "මෙම පිටුවට, {{PLURAL:$1|එක් සංශෝධනයකට|සංශෝධන $1 කට}} වඩා වැඩි විශාල සංස්කරණ ඉතිහාසයක් ඇත.\nමෙය මකාදැමීම {{SITENAME}} හි දත්ත-ගබඩා ක්‍රියාකාරකම් වලට අවහිරතා පැන නැංවීමට හේතු විය හැක;\nපරිස්සමින් ඉදිරි කටයුතු කරන්න.",
"deleting-backlinks-warning": "'''ප්‍රවේශමෙන්:''' ඔබ සූදානම් වන්නේ ඔබ පරිශීලනය කරන පිටුවට සම්බන්ධ වූ අනෙක් පිටු මකා දැමීමටයි.",
"rollback": "සංස්කරණයන් පුනරාවර්තනය කරන්න",
- "rollback_short": "පුනරාවර්තනය",
"rollbacklink": "ප්‍රතිවර්තනය",
"rollbackfailed": "පුනරාවර්තනය අසාර්ථකයි",
"cantrollback": "සංස්කරණය ප්‍රතිවර්තනය කල නොහැක;\nඅවසන් දායකයා මෙම පිටුවේ එකම කතෘවරයාද වෙයි.",
@@ -2017,12 +2034,9 @@
"import-rootpage-invalid": "ලබා දුන් මූල පිටුව වැරදි ශීර්ෂයක් වේ.",
"importlogpage": "ලඝු-සටහන් ආයාත කරන්න",
"importlogpagetext": "අනෙකුත් විකියන්ගෙන් සංස්කරණ ඉතිහාසයන් ඇති පිටු වල පරිපාලනමය ආයාත කිරීම්.",
- "import-logentry-upload": "ගොනු උඩුගත කිරීමක් මගින් [[$1]] ආයාත කෙරිණි",
"import-logentry-upload-detail": " {{PLURAL:$1|සංශෝධනය|සංශෝධන $1 ක්}}",
- "import-logentry-interwiki": "$1 අන්තර්විකීකරණය කරන ලදි",
"import-logentry-interwiki-detail": "$2 වෙතින් {{PLURAL:$1|එක් සංශෝධනයක්|සංශෝධන $1 ක්}}",
"javascripttest": "ජාවාස්ක්‍රිප්ට් පරික්ෂාකරමින්",
- "javascripttest-title": "$1 පරික්ෂණ සිදුකරමින්",
"javascripttest-pagetext-noframework": "මෙම පිටුව ජාවාස්ක්‍රිප්ට් පරික්ෂණ සිදුකිරීම සඳහා වෙන්කර ඇත.",
"tooltip-pt-userpage": "ඔබගේ පරිශීලක පිටුව",
"tooltip-pt-anonuserpage": "සංස්කරණයට ඔබ භාවිතා කරමින් පවතින අන්තර්ජාල ලිපිනය සඳහා පරිශීලක පිටුව",
@@ -2123,7 +2137,6 @@
"pageinfo-robot-policy": "සෙවුම් එන්ජිම් තත්ත්වය",
"pageinfo-robot-index": "සුචිමය",
"pageinfo-robot-noindex": "සුචිමය නොවන",
- "pageinfo-views": "නැරඹුම් සංඛ්‍යාව",
"pageinfo-watchers": "පිටු මුරකරන්නන් සංඛ්‍යාව",
"pageinfo-redirects-name": "මෙම පිටුවට යළියොමු ගණන",
"pageinfo-subpages-name": "මෙම පිටුවෙහි උපපිටු",
@@ -2587,7 +2600,6 @@
"exif-urgency-low": "අඩුයි ($1)",
"exif-urgency-high": "ඉහළයි ($1)",
"exif-urgency-other": "පරිශීලක-අර්ථ දැක්වූ ප්‍රමුඛත්වය ($1)",
- "watchlistall2": "සියල්ල",
"namespacesall": "සියල්ල",
"monthsall": "සියළු",
"confirmemail": "විද්‍යුත්-තැපැල් ලිපිනය තහවුරු කරන්න",
@@ -2717,7 +2729,6 @@
"hebrew-calendar-m12-gen": "එලුල්",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|සාකච්ඡාව]])",
"timezone-utc": "යූටීසී",
- "unknown_extension_tag": "අඥාත ප්‍රසර්ජන ටැගය \"$1\"",
"duplicate-defaultsort": "'''අවවාදයයි:''' \"$2\" පෙරනිමි සුබෙදුම් යතුර විසින් ‍පූර්ව පෙරනිමි සුබෙදුම් යතුර වූ \"$1\" අතික්‍රමණය කරයි.",
"version": "අනුවාදය",
"version-extensions": "ස්ථාපිත ප්‍රසර්ජනයන්",
@@ -2733,7 +2744,7 @@
"version-parser-function-hooks": "වයාකරණ විග්‍රහක ශ්‍රිත හසුරු",
"version-hook-name": "හසුරු නම",
"version-hook-subscribedby": "දායකවී ඇත්තේ",
- "version-version": "(අනුවාදය $1)",
+ "version-version": "($1)",
"version-license": "වරපත",
"version-poweredby-credits": "මෙම විකිය '''[https://www.mediawiki.org/ MediaWiki]''' මගින් බලගන්වා ඇත, copyright © 2001-$1 $2.",
"version-poweredby-others": "අනෙකුත්",
@@ -2744,6 +2755,10 @@
"version-entrypoints": "නිවේශන ලක්ෂ්‍ය URL",
"version-entrypoints-header-entrypoint": "නිවේශන ලක්ෂ්‍යය",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "ස්ථාපිත පුස්තකාල",
+ "version-libraries-library": "පුස්තකාලය",
+ "version-libraries-version": "අනුවාදය",
+ "redirect-file": "ගොනුනාමය",
"fileduplicatesearch": "අනුපිටපත් ගොනු සඳහා ගවේෂණය කරන්න",
"fileduplicatesearch-summary": "එහි පූරක අගය පාදක කර ගෙන අනුපිටපත් ගොනු සඳහා ගවේෂණය කරන්න.",
"fileduplicatesearch-legend": "අනුපිටපතක් සඳහා ගවේෂණය කරන්න",
@@ -2767,6 +2782,7 @@
"specialpages-group-wiki": "දත්ත හා මෙවලම්",
"specialpages-group-redirects": "විශේෂ පිටු යළි-යොමුකිරීම",
"specialpages-group-spam": "ස්පෑම් මෙවලම්",
+ "specialpages-group-developer": "සංවර්ධක මෙවලම්",
"blankpage": "හිස් පිටුව",
"intentionallyblankpage": "මෙම පිටුව සිතාමතාම හිස්ව තබා ඇත.",
"external_image_whitelist": "#මෙම පේළිය මෙම අයුරින්ම තිබීමට ඉඩ හරින්න <pre>\n#ක්‍රමවත් ප්‍රකාශ ඛණ්ඩයන් (// අතරතුර පවතින කොටස පමණක්) පහත තබන්න\n#බාහිර (සෘජු-බැඳි) රූපයන්හි අන්තර්ජාල ලිපිනයන් හා සමගින් මේවා ගලපනු ඇත\n#ගැලපෙන ඒවා රූප වශයෙන් ප්‍රදර්ශනය කෙරෙනු ඇත, නැත‍ෙහාත් රූපයට සබැඳියක් පමණක් පෙන්වනු ඇත\n# # වෙතින් ඇරඹෙන පේළි පරිකථන ලෙසන් සැලකේ\n#‍මෙය අකුරු-ප්‍රමාණ-පිළිබඳ-සංවේදී නොවේ\n\n# regex කොටස් සියල්ල මෙම පේළියට ඉහලින් බහාලන්න. මෙම පේළිය මෙම අයුරින්ම තිබීමට ඉඩ හරින්න </pre>",
@@ -2792,7 +2808,8 @@
"compare-revision-not-exists": "ඔබ විසින් විශේෂණය කෙරූ සංශෝධනය නොපවතියි.",
"dberr-problems": "සමාවන්න! මෙම අඩවිය තාක්ෂණික ගැටළු අත්දකියි.",
"dberr-again": "විනාඩි කිහිපයක් කල්ගතකර යළි-බාගැනුම උත්සාහ කරන්න.",
- "dberr-info": "(දත්තගබඩා සේවාදායකය හා සම්බන්ධ වීම‍ට නොහැක: $1)",
+ "dberr-info": "(දත්තගබඩාවට ඇතුළු වීම‍ට නොහැකිය: $1)",
+ "dberr-info-hidden": "(දත්තගබඩාවට ඇතුළු වීම‍ට නොහැකිය)",
"dberr-usegoogle": "මේ අතරතුර ගූගල් ඔස්සේ ගවේෂණය කිරීමට ඔබ විසින් යත්න දැරිය හැක.",
"dberr-outofdate": "අපගේ අන්තර්ගතයෙහි සූචියන් යල් පැන ගොස් තිබිය හැකි බව සටහන් කර ගන්න.",
"dberr-cachederror": "මෙය ඉල්ලා ඇති පිටුවෙහි පූර්වාපේක්ෂිත සංචිත පිටුවක් වන අතර එය යාවත්කාලින නොවිය හැකි බව සලකන්න.",
@@ -2832,18 +2849,19 @@
"logentry-newusers-create2": "$1 විසින් $3 පරිශීලක ගිණුම තනන ලදී",
"logentry-newusers-autocreate": "$1 ගිණුම ස්වංක්‍රීයව නිර්මිතය",
"rightsnone": "(කිසිවක් නොමැත)",
- "feedback-subject": "විෂයය:",
- "feedback-message": "පණිවුඩය:",
- "feedback-cancel": "අවලංගු කරන්න",
- "feedback-submit": "ප්‍රතිචාරය යවන්න",
+ "revdelete-summary": "සංස්කරණ සාරාංශය",
"feedback-adding": "ප්‍රතිචාරය පිටුවට එක් කරමින් ...",
+ "feedback-bugcheck": "කදිමයි! දැන් එය දැනටමත් [$1 හඳුනාගත් දෝෂ]වල තිබේ දැයි පිරික්සන්න.",
+ "feedback-bugnew": "මම පරික්ෂා කළා. නව දෝෂය වාර්තා කරන්න",
+ "feedback-cancel": "අවලංගු කරන්න",
+ "feedback-close": "හරි",
"feedback-error1": "දෝෂය: API ගෙන් හදුනානොගත් ප්‍රතිපල",
"feedback-error2": "දෝෂය: සංස්කරණය අසාර්ථකයි",
"feedback-error3": "දෝෂය: API ගෙන් ප්‍රතිචාරයක් නොමැත",
+ "feedback-message": "පණිවුඩය:",
+ "feedback-subject": "විෂයය:",
+ "feedback-submit": "යොමන්න",
"feedback-thanks": "ස්තුතියි! ඔබේ ප්‍රතිචාරය \"[$2 $1]\" පිටුවට එක් කරන ලදී.",
- "feedback-close": "හරි",
- "feedback-bugcheck": "කදිමයි! දැන් එය දැනටමත් [$1 හඳුනාගත් දෝෂ]වල තිබේ දැයි පිරික්සන්න.",
- "feedback-bugnew": "මම පරික්ෂා කළා. නව දෝෂය වාර්තා කරන්න",
"searchsuggest-search": "ගවේශණය කරන්න",
"searchsuggest-containing": "ඇතුළත් වෙමින් පවතී...",
"api-error-badaccess-groups": "මෙම විකියට ගොනු උඩුගතකිරීම සඳහා ඔබට අවසර නැත.",
@@ -2902,5 +2920,27 @@
"expand_templates_remove_comments": "පරිකථනයන් ඉවත්කරන්න",
"expand_templates_remove_nowiki": "ප්‍රතිපලයෙහි <nowiki> ටැග යටපත් කරන්න",
"expand_templates_generate_xml": "XML ව්‍යාකරණ විග්‍රහ රුක පෙන්වන්න",
- "expand_templates_preview": "පෙරදසුන"
+ "expand_templates_preview": "පෙරදසුන",
+ "special-characters-group-latin": "ලතින් අක්ෂර",
+ "special-characters-group-latinextended": "දීර්ඝ කළ ලතින් අක්ෂර",
+ "special-characters-group-ipa": "IPA(ජාත්‍යන්තර වාග්විෂයක හෝඩිය)",
+ "special-characters-group-symbols": "සංකේත",
+ "special-characters-group-greek": "ග්‍රීක අක්ෂර",
+ "special-characters-group-cyrillic": "සිරිලික් අක්ෂර",
+ "special-characters-group-arabic": "අරාබි අක්ෂර",
+ "special-characters-group-arabicextended": "අරාබි දීර්ඝ කල",
+ "special-characters-group-persian": "පර්සියානු",
+ "special-characters-group-hebrew": "හෙබ්‍රෙව් අක්ෂර",
+ "special-characters-group-bangla": "බංග්ලා",
+ "special-characters-group-tamil": "දෙමළ",
+ "special-characters-group-telugu": "තෙලිඟු අක්ෂර",
+ "special-characters-group-sinhala": "සිංහල",
+ "special-characters-group-gujarati": "ගුජරාටි",
+ "special-characters-group-devanagari": "දේවනගරි",
+ "special-characters-group-thai": "තායි",
+ "special-characters-group-lao": "ලාඕ",
+ "special-characters-group-khmer": "ඛෙමර්",
+ "special-characters-title-endash": "en තේජස",
+ "special-characters-title-emdash": "em තේජස",
+ "special-characters-title-minus": "ඍණ ලකුණ"
}
diff --git a/languages/i18n/sk.json b/languages/i18n/sk.json
index c581bf6f..b1eeec07 100644
--- a/languages/i18n/sk.json
+++ b/languages/i18n/sk.json
@@ -27,14 +27,16 @@
"Wizzard",
"לערי ריינהארט",
"아라",
- "Matthew Greg"
+ "Matthew Greg",
+ "Ата",
+ "Macofe"
]
},
"tog-underline": "Podčiarkovať odkazy:",
"tog-hideminor": "V posledných úpravách nezobrazovať drobné úpravy",
"tog-hidepatrolled": "Skryť strážené úpravy v Posledných úpravách",
"tog-newpageshidepatrolled": "Skryť strážené stránky zo zoznamu nových stránok",
- "tog-extendwatchlist": "Rozšíriť zoznam sledovaných stránok, aby zobrazoval všetky zmeny, nie len posledné",
+ "tog-extendwatchlist": "Rozšíriť zoznam sledovaných stránok, aby zobrazoval všetky úpravy, nie len posledné",
"tog-usenewrc": "Zoskupiť zmeny v posledných úpravách a na zozname sledovaných stránok podľa stránky",
"tog-numberheadings": "Automaticky číslovať nadpisy",
"tog-showtoolbar": "Zobraziť panel nástrojov úprav",
@@ -54,7 +56,7 @@
"tog-shownumberswatching": "Zobraziť počet používateľov sledujúcich stránku",
"tog-oldsig": "Súčasný podpis:",
"tog-fancysig": "Považovať podpisy za wikitext (bez automatických odkazov)",
- "tog-uselivepreview": "Používať živý náhľad(experimentálna funkcia)",
+ "tog-uselivepreview": "Používať živý náhľad (experimentálna funkcia)",
"tog-forceeditsummary": "Upozoriť ma, keď nevyplním zhrnutie úprav",
"tog-watchlisthideown": "Skryť moje úpravy zo zoznamu sledovaných",
"tog-watchlisthidebots": "Skryť úpravy botov zo zoznamu sledovaných",
@@ -229,6 +231,7 @@
"otherlanguages": "V iných jazykoch",
"redirectedfrom": "(Presmerované z $1)",
"redirectpagesub": "Presmerovacia stránka",
+ "redirectto": "Presmerovať na:",
"lastmodifiedat": "Čas poslednej úpravy tejto stránky je $2, $1.",
"viewcount": "Táto stránka bola navštívená {{PLURAL:$1|raz|$1-krát|$1-krát}}.",
"protectedpage": "Zamknutá stránka",
@@ -236,6 +239,7 @@
"jumptonavigation": "navigácia",
"jumptosearch": "hľadanie",
"view-pool-error": "Ľutujeme, servery sú momentálne preťažené.\nPríliš veľa používateľov sa pokúša zobraziť túto stránku.\nProsím, počkajte chvíľu predtým, než sa pokúsite na túto stránku dostať znova.\n\n$1",
+ "generic-pool-error": "Ľutujeme, servery sú momentálne preťažené.\nPríliš veľa používateľov sa pokúša zobraziť tento zdroj.\nProsím, pred ďalším pokusom o prístup chvíľu počkajte.",
"pool-timeout": "Bol prekročený vyhradený čas čakania na zámok",
"pool-queuefull": "Front je plný",
"pool-errorunknown": "Neznáma chyba",
@@ -280,6 +284,7 @@
"hidetoc": "skryť",
"collapsible-collapse": "zbaliť",
"collapsible-expand": "rozbaliť",
+ "confirmable-confirm": "Ste si {{GENDER:$1|istý|istá|istí}}?",
"confirmable-yes": "Áno",
"confirmable-no": "Nie",
"thisisdeleted": "Zobraziť alebo obnoviť $1?",
@@ -349,7 +354,7 @@
"actionthrottledtext": "Ako opatrenie proti spamu je počet vykonaní tejto činnosti za určitý čas obmedzený. Tento limit ste prekročili. Prosím, skúste to znova o niekoľko minút.",
"protectedpagetext": "Táto stránka bola zamknutá aby sa zamedzilo úpravám.",
"viewsourcetext": "Môžete si zobraziť a kopírovať zdroj tejto stránky:",
- "viewyourtext": "Môžete si prehliadnuť a skopírovať zdrojový kód '''vašich zmien''' tejto stránky:",
+ "viewyourtext": "Môžete si prehliadnuť a skopírovať zdrojový kód <strong>vašich úprav</strong> tejto stránky:",
"protectedinterface": "Táto stránka poskytuje text používateľského rozhrania tejto wiki a je zamknutá, aby sa predišlo jej zneužitiu.\nAk chcete pridať alebo zmeniť preklady pre všetky wiki, prosím, použite [//translatewiki.net/ translatewiki.net], projekt lokalizácie MediaWiki.",
"editinginterface": "'''Upozornenie:''' Upravujete stránku, ktorá poskytuje text používateľského rozhrania.\nZmeny tejto stránky ovplyvnia vzhľad používateľského rozhrania ostatným používateľom.\nAk chcete pridať alebo zmeniť preklady pre všetky wiki, prosím, použite [//translatewiki.net/ translatewiki.net], projekt lokalizácie MediaWiki.",
"cascadeprotected": "Táto stránka bola zamknutá proti úpravám, pretože je použitá na {{PLURAL:$1|nasledovnej stránke, ktorá je zamknutá|nasledovných stránkach, ktoré sú zamknuté}} voľbou „kaskádového zamknutia“:\n$2",
@@ -366,7 +371,7 @@
"invalidtitle-knownnamespace": "Neplatný názov s menným priestorom „$2“ a textom „$3“",
"invalidtitle-unknownnamespace": "Neplatný názov s neznámym číslom menného priestoru „$1“ a textom „$2“",
"exception-nologin": "Nie ste prihlásený",
- "exception-nologin-text": "Táto stránka alebo operácia vyžaduje, aby ste [[Special:Userlogin|boli prihlásený]].",
+ "exception-nologin-text": "Táto stránka alebo operácia vyžaduje, aby ste boli prihlásený.",
"exception-nologin-text-manual": "Pre prístup na túto stránku alebo k tejto akcii sa musíte $1.",
"virus-badscanner": "Chybná konfigurácia: neznámy antivírus: ''$1''",
"virus-scanfailed": "kontrola zlyhala (kód $1)",
@@ -408,6 +413,8 @@
"userlogin-resetlink": "Zabudli ste svoje prihlasovacie údaje?",
"userlogin-resetpassword-link": "Zabudli ste heslo?",
"userlogin-helplink2": "Pomoc s prihlásením",
+ "userlogin-loggedin": "Ste už {{GENDER:$1|prihĺasený|prihlásená}} ako $1.\nPomocou formulára nižšie sa môžete prihlásiť ako iný redaktor.",
+ "userlogin-createanother": "Vytvoriť ďalší účet",
"createacct-emailrequired": "E-mailová adresa",
"createacct-emailoptional": "E-mailová adresa (nepovinné)",
"createacct-email-ph": "Zadajte vašu e-mailovú adresu",
@@ -469,6 +476,7 @@
"createaccount-text": "Niekto vytvoril účet pre vašu emailovú adresu na {{GRAMMAR:lokál|{{SITENAME}}}}\n($4) s názvom „$2“, s heslom „$3“. Mali by ste sa prihlásiť a svoje heslo teraz zmeniť.\n\nAk bol účet vytvorený omylom, túto správu môžete ignorovať.",
"login-throttled": "Uskutočnili ste príliš mnoho neúspešných pokusov o prihlásenie.\nProsím, počkajte $1 predtým, než to skúsite znova.",
"login-abort-generic": "Vaše prihlásenie nebolo úspešné - zrušené",
+ "login-migrated-generic": "Váš účet bol presťahovaný a vaše používateľské meno už viac na tejto wiki neexistuje.",
"loginlanguagelabel": "Jazyk: $1",
"suspicious-userlogout": "Vaša požiadavka odhlásiť sa bola zamietnutá, pretože to vyzerá, že ju poslal pokazený prehliadač alebo proxy server.",
"createacct-another-realname-tip": "Skutočné meno je nepovinné.\nAk sa rozhodnete ho poskytnúť, použije sa na označenie vašej práce.",
@@ -503,7 +511,7 @@
"resetpass-validity-soft": "Vaše heslo je neplatné: $1\n\nVyberte si nové heslo, alebo kliknite na „{{int:resetpass-submit-cancel}}“ a nastavte si ho neskôr.",
"passwordreset": "Reset hesla",
"passwordreset-text-one": "Pre získanie nového hesla vyplňte tento formulár.",
- "passwordreset-text-many": "{{PLURAL:$1|Pre získanie nového hesla zadajte jeden z údajov.}}",
+ "passwordreset-text-many": "{{PLURAL:$1|Pre získanie nového hesla emailom, zadajte jeden z údajov.}}",
"passwordreset-legend": "Obnoviť heslo",
"passwordreset-disabled": "Obnovenie hesla bolo na tejto wiki zakázané.",
"passwordreset-emaildisabled": "E-mailové funkcie boli na tejto wiki vypnuté.",
@@ -520,7 +528,6 @@
"passwordreset-emailsent-capture": "Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie.",
"passwordreset-emailerror-capture": "Bol odoslaný email s novým heslom, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať {{GENDER:$2|používateľovi}}: $1",
"changeemail": "Zmeniť emailovú adresu",
- "changeemail-header": "Zmena e-mailovej adresy pre účet",
"changeemail-text": "Vyplňte tento formulár na zmenu e-mailovej adresy. Zmenu budete musieť potvrdiť zadaním svojho hesla.",
"changeemail-no-info": "Na prístup k tejto stránke musíte byť prihlásený.",
"changeemail-oldemail": "Súčasná e-mailová adresa:",
@@ -528,7 +535,6 @@
"changeemail-none": "(žiadna)",
"changeemail-password": "Vaše heslo k {{GRAMMAR:lokál|{{SITENAME}}}}:",
"changeemail-submit": "Zmeniť e-mail",
- "changeemail-cancel": "Zrušiť",
"changeemail-throttled": "Uskutočnili ste príliš mnoho neúspešných pokusov o prihlásenie. Prosím, počkajte $1 predtým, než to skúsite znova.",
"resettokens": "Obnoviť tokeny",
"resettokens-text": "Tu môžete obnoviť tokeny, ktoré umožňujú prístup k určitým súkromným údajom spojeným s vaším účtom.\n\nMali by ste to urobiť, ak ste ich omylom niekomu poskytli alebo ak bolo vaše konto zneužité.",
@@ -565,7 +571,8 @@
"preview": "Náhľad",
"showpreview": "Zobraziť náhľad",
"showdiff": "Zobraziť rozdiely",
- "anoneditwarning": "'''Upozornenie:''' Nie ste prihlásený.\nVaša IP adresa bude zaznamenaná v histórii úprav tejto stránky.",
+ "blankarticle": "<strong>Upozornenie:</strong> Stránka, ktorú sa chystáte založiť, je prázdna. Pokiaľ ešte raz kliknete na „{{int:savearticle}}“, bude založená úplne bez obsahu.",
+ "anoneditwarning": "<strong>Upozornenie:</strong> Nie ste prihlásený.\nAk uložíte akúkoľvek úpravu vaša IP adresa bude zverejnená v histórii tejto stránky. Ak sa <strong>[$1 prihlásite]</strong> alebo si <strong>[$2 vytvoríte účet]</strong>, budú vaše úpravy priradené k vášmu používateľskému menu a získate i ďalšie výhody.",
"anonpreviewwarning": "''Nie ste prihlásený. Uložením zaznamenáte svoju IP adresu do histórie úprav tejto stránky.''",
"missingsummary": "'''Pripomienka:''' Neposkytli ste zhrnutie úprav. Ak kliknete znova na Uložiť, vaše úpravy sa uložia bez zhrnutia úprav.",
"missingcommenttext": "Prosím, dolu napíšte komentár.",
@@ -651,6 +658,8 @@
"edit-gone-missing": "Nebolo možné aktualizovať stránku.\nZdá sa, že bola zmazaná.",
"edit-conflict": "Konflikt pri upravovaní.",
"edit-no-change": "Vaša úprava bola ignorovaná, pretože ste v texte nič nezmenili.",
+ "postedit-confirmation-created": "Stránka bola vytvorená.",
+ "postedit-confirmation-restored": "Stránka bola obnovená.",
"postedit-confirmation-saved": "Vaša úprava bola uložená.",
"edit-already-exists": "Nebolo možné vytvoriť novú stránku.\nUž existuje.",
"defaultmessagetext": "Predvolený text správy",
@@ -662,6 +671,8 @@
"content-model-text": "čistý text",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "duplicate-args-category": "Stránky s duplicitnými parametrami pri volaniach šablón",
+ "duplicate-args-category-desc": "Stránka obsahuje volania šablóny používajúce duplicitné parametere, ako napríklad <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> alebo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Upozornenie: Táto stránka obsahuje príliš mnoho volaní funkcií syntaktického analyzátora, ktoré nadmerne zaťažujú server.\n\nObsahuje $1 {{PLURAL:$1|volanie|volania|volaní}}. Mala by obsahovať menej ako $2 {{PLURAL:$1|volanie|volania|volaní}}.",
"expensive-parserfunction-category": "Stránky s príliš veľkým počtom volaní funkcií syntaktického analyzátora",
"post-expand-template-inclusion-warning": "Upozornenie: Vkladaná šablóna je príliš veľká.\nNiektoré zo šablón nebudú vložené.",
@@ -672,8 +683,10 @@
"parser-template-recursion-depth-warning": "Bol prekročený limit rekurzie šablón ($1)",
"language-converter-depth-warning": "Bolo prekročené obmedzenie hĺbky ($1) jazykového konvertora",
"node-count-exceeded-category": "Stránky s priveľkým počtom uzlov",
- "node-count-exceeded-warning": "Stránka prekročila povolený počet uzlov",
+ "node-count-exceeded-category-desc": "Tato stránka prekračuje maximálny počet uzlov.",
+ "node-count-exceeded-warning": "Stránka prekročila počet uzlov",
"expansion-depth-exceeded-category": "Stránky s priveľkou hĺbkou expanzie",
+ "expansion-depth-exceeded-category-desc": "Stránka prekročila maximálnu hĺbku expanzie.",
"expansion-depth-exceeded-warning": "Stránka prekročila povolenú hĺbku expanzie",
"parser-unstrip-loop-warning": "Zistené zacyklenie volania rozširovacej značky",
"parser-unstrip-recursion-limit": "Prektočený limit rekurzie volania rozširovacej značky ($1)",
@@ -681,6 +694,7 @@
"undo-success": "Úpravu je možné vrátiť. Prosím skontrolujte tento rozdiel, čím overíte, že táto úprava je tá, ktorú chcete, a následne uložte zmeny, čím ukončíte vrátenie.",
"undo-failure": "Úpravu nie je možné vrátiť kvôli konfliktným medziľahlým úpravám.",
"undo-norev": "Túto úpravu nie je možné vrátiť, pretože neexistuje alebo bola zmazaná.",
+ "undo-nochange": "Zdá se, že úprava už bola zrušená.",
"undo-summary": "Revízia $1 používateľa [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusia]]) bola vrátená",
"undo-summary-username-hidden": "Vrátiť revíziu $1, ktorú vykonal skrytý používateľ",
"cantcreateaccounttitle": "Nie je možné vytvoriť účet",
@@ -792,7 +806,6 @@
"mergehistory-same-destination": "Zdrojová a cieľová stránka sa nemôžu zhodovať",
"mergehistory-reason": "Dôvod:",
"mergelog": "Záznam zlúčení",
- "pagemerge-logentry": "zlúčil [[$1]] do [[$2]] (revízie do $3)",
"revertmerge": "Vrátiť zlúčenie",
"mergelogpagetext": "Dolu je zoznam posledných zlúčení jednej histórie revízií stránky do druhej.",
"history-title": " $1: História revízií",
@@ -998,6 +1011,7 @@
"right-move": "Presúvať stránky",
"right-move-subpages": "Presunúť stránky aj s podstránkami",
"right-move-rootuserpages": "Presunúť koreňové stránky používateľa",
+ "right-move-categorypages": "Premiestňovanie stránok kategórií",
"right-movefile": "Presunúť súbory",
"right-suppressredirect": "Nevytvoriť presmerovanie zo starého názvu pri presúvaní stránky",
"right-upload": "Nahrávať súbory",
@@ -1066,10 +1080,12 @@
"action-createpage": "vytvárať stránky",
"action-createtalk": "vytvárať diskusné stránky",
"action-createaccount": "vytvoriť tento používateľský účet",
+ "action-history": "zobraziť históriu tejto stránky",
"action-minoredit": "označiť túto úpravu ako drobnú",
"action-move": "presunúť túto stránku",
"action-move-subpages": "presunúť túto stránku a jej podtránky",
"action-move-rootuserpages": "presunúť koreňové stránky používateľa",
+ "action-move-categorypages": "premiestňovať stránky kategórií",
"action-movefile": "presunúť tento súbor",
"action-upload": "nahrať tento súbor",
"action-reupload": "prepísať tento existujúci súbor",
@@ -1100,11 +1116,11 @@
"action-viewmywatchlist": "zobraziť zoznam sledovaných stránok",
"action-viewmyprivateinfo": "zobraziť vaše súkromné údaje",
"action-editmyprivateinfo": "upraviť vaše súkromné údaje",
- "nchanges": "$1 {{PLURAL:$1|zmena|zmeny|zmien}}",
+ "nchanges": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od poslednej návštevy}}",
"enhancedrc-history": "história",
"recentchanges": "Posledné úpravy",
- "recentchanges-legend": "Možnosti posledných zmien",
+ "recentchanges-legend": "Možnosti posledných úprav",
"recentchanges-summary": "Pomocou tejto stránky sledujete posledné úpravy wiki.",
"recentchanges-noresult": "V danom období nie sú zmeny spĺňajúce tieto kritériá.",
"recentchanges-feed-description": "Sledovať posledné úpravy tejto wiki týmto kanálom.",
@@ -1115,7 +1131,7 @@
"recentchanges-label-plusminus": "Veľkosť stránky sa zmenila o toľkoto bajtov",
"recentchanges-legend-heading": "'''Legenda:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (pozri tiež [[Special:NewPages|zoznam nových stránok]])",
- "rcnotefrom": "Nižšie sú zobrazené úpravy od <strong>$2</strong> (do <strong>$1</strong>).",
+ "rcnotefrom": "Nižšie {{PLURAL:$5|je zobrazená úprava|sú zobrazené úpravy}} od <strong>$2</strong> (do <strong>$1</strong>).",
"rclistfrom": "Zobraziť nové úpravy počnúc od $3 $2",
"rcshowhideminor": "$1 drobné úpravy",
"rcshowhideminor-show": "Zobraziť",
@@ -1139,7 +1155,7 @@
"diff": "rozdiel",
"hist": "história",
"hide": "Skryť",
- "show": "zobraziť",
+ "show": "Zobraziť",
"minoreditletter": "d",
"newpageletter": "N",
"boteditletter": "b",
@@ -1422,7 +1438,6 @@
"statistics": "Štatistiky",
"statistics-header-pages": "Štatistika stránok",
"statistics-header-edits": "Štatistika úprav",
- "statistics-header-views": "Štatistika zobrazení",
"statistics-header-users": "Štatistika používateľov",
"statistics-header-hooks": "Iná štatistika",
"statistics-articles": "Stránok s obsahom",
@@ -1431,13 +1446,9 @@
"statistics-files": "Nahraných súborov",
"statistics-edits": "Úprav stránok od založenia {{GRAMMAR:genitív|{{SITENAME}}}}",
"statistics-edits-average": "Priemerný počet úprav na stránku",
- "statistics-views-total": "Celkom zobrazení",
- "statistics-views-total-desc": "Zobrazenia neexistujúcich stránok a špeciálnych stránok nie sú zahrnuté",
- "statistics-views-peredit": "Zobrazení na úpravu",
"statistics-users": "Registrovaných [[Special:ListUsers|používateľov]]",
"statistics-users-active": "Aktívnych používateľov",
"statistics-users-active-desc": "Používatelia, ktorí za {{PLURAL:$1|posledný deň|posledné $1 dni|posledných $1 dní}} vykonali nejakú operáciu",
- "statistics-mostpopular": "Najčastejšie prezerané stránky",
"pageswithprop": "Stránky s vlastnosťou stránky",
"pageswithprop-legend": "Stránky s vlastnosťou stránky",
"pageswithprop-text": "Táto stránka obsahuje stránky, ktoré používajú konkrétnu vlastnosť stránky.",
@@ -1477,7 +1488,6 @@
"uncategorizedtemplates": "Nekategorizované šablóny",
"unusedcategories": "Nepoužité kategórie",
"unusedimages": "Nepoužité obrázky",
- "popularpages": "Populárne stránky",
"wantedcategories": "Žiadané kategórie",
"wantedpages": "Žiadané stránky",
"wantedpages-badtitle": "Neplatný názov vo výsledkoch: $1",
@@ -1536,7 +1546,7 @@
"querypage-disabled": "Táto špeciálna stránka bola zakázaná z výkonnostných dôvodov.",
"booksources": "Knižné zdroje",
"booksources-search-legend": "Vyhľadávať knižné zdroje",
- "booksources-go": "Vykonať",
+ "booksources-search": "Hľadať",
"booksources-text": "Nižšie je zoznam odkazov na iné stránky, ktoré predávajú nové a použité knihy a tiež môžu obsahovať ďalšie informácie o knihách, ktoré hľadáte:",
"booksources-invalid-isbn": "Zdá sa, že dané ISBN nie je platné. Skontrolujte, či ste neurobili chybu pri kopírovaní z pôvodného zdroja.",
"specialloguserlabel": "Pôvodca:",
@@ -1663,8 +1673,8 @@
"watchlist-details": "{{PLURAL:$1|Jedna sledovaná stránka|$1 sledované stránky|$1 sledovaných stránok}}, nepočítajúc diskusné stránky.",
"wlheader-enotif": "Upozorňovanie e-mailom je zapnuté.",
"wlheader-showupdated": "Stránky, ktoré boli zmenené od vašej poslednej návštevy sú zobrazené '''tučne'''.",
- "wlnote": "Nižšie {{PLURAL:$1|je posledná jedna zmena|sú posledné '''$1''' zmeny|je posledných '''$1''' zmien}} za {{PLURAL:$2|poslednú hodinu|posledné '''$2''' hodiny|posledných '''$2''' hodín}} do $4, $3.",
- "wlshowlast": "Zobraziť posledných $1 hodín $2 dní $3",
+ "wlnote": "Nižšie {{PLURAL:$1|je posledná úprava|sú posledné <strong>$1</strong> úpravy|je posledných <strong>$1</strong> úprav}} za {{PLURAL:$2|poslednú hodinu|posledné <strong>$2</strong> hodiny|posledných <strong>$2</strong> hodín}} do $4, $3.",
+ "wlshowlast": "Zobraziť posledných $1 hodín $2 dní",
"watchlist-options": "Nastavenia zoznamu sledovaných",
"watching": "Pridávam do zoznamu sledovaných...",
"unwatching": "Odoberám zo zoznamu sledovaných...",
@@ -1711,7 +1721,6 @@
"delete-toobig": "Táto stránka má veľkú históriu úprav, viac ako $1 {{PLURAL:$1|revíziu|revízie|revízií}}. Mazanie takýchto stránok bolo obmedzené, aby sa zabránilo náhodnému poškodeniu {{GRAMMAR:genitív|{{SITENAME}}}}.",
"delete-warning-toobig": "Táto stránka má veľkú históriu úprav, viac ako $1 {{PLURAL:$1|revíziu|revízie|revízií}}. Jej zmazanie by mohlo narušiť databázové operácie {{GRAMMAR:genitív|{{SITENAME}}}}; postupujte opatrne.",
"rollback": "Vrátiť späť úpravy",
- "rollback_short": "Vrátiť",
"rollbacklink": "vrátiť",
"rollbacklinkcount": "vrátenie $1 {{PLURAL:$1|úpravy|úprav}}",
"rollbacklinkcount-morethan": "vrátiť viac ako $1 {{PLURAL:$1|úpravu|úprav}}",
@@ -2084,6 +2093,8 @@
"import": "Import stránok",
"importinterwiki": "Transwiki import",
"import-interwiki-text": "Zvoľte wiki a názov stránky, ktorá sa má importovať.\nDátumy revízií a mená používateľov budú zachované.\nVšetky transwiki importy sa zaznamenávajú v [[Special:Log/import|Zázname importov]].",
+ "import-interwiki-sourcewiki": "Zdrojová wiki:",
+ "import-interwiki-sourcepage": "Zdrojová stránka:",
"import-interwiki-history": "Skopírovať všetky historické revízie tejto stránky",
"import-interwiki-templates": "Vložiť všetky šablóny",
"import-interwiki-submit": "Importovať",
@@ -2108,7 +2119,7 @@
"importuploaderrortemp": "Nahranie alebo import súboru zlyhal. Dočasný adresár chýba.",
"import-parse-failure": "Chyba syntaktickej analýzy pri XML importe",
"import-noarticle": "Žiadny článok na import!",
- "import-nonewrevisions": "Všetky revízie boli predtým importované.",
+ "import-nonewrevisions": "Žiadne revízie neboli importované (buď už boli všetky importované skôr, alebo boli preskočené kvôli chybám).",
"xml-error-string": "$1 na riadku $2, stĺpec $3 (bajt $4): $5",
"import-upload": "Nahrať XML údaje",
"import-token-mismatch": "Strata údajov relácie. Prosím, skúste to znova.",
@@ -2124,18 +2135,14 @@
"import-rootpage-nosubpage": "Menný priestor „$1“ koreňovej stránky nepodporuje podstránky.",
"importlogpage": "Záznam importov",
"importlogpagetext": "Administratívny import stránok vrátane histórie úprav z iných wiki.",
- "import-logentry-upload": "importoval [[$1]] nahraním súboru",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|revízia|revízie|revízií}}",
- "import-logentry-interwiki": "Transwiki import $1 úspešný",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revízia|revízie|revízií}} z $2",
"javascripttest": "Testovanie JavaScriptu",
- "javascripttest-title": "Beží $1 testov",
"javascripttest-pagetext-noframework": "Táto stránka je vyhradená pre testy JavaScriptu.",
"javascripttest-pagetext-unknownframework": "Neznáma testovacia platfoma „$1“.",
"javascripttest-pagetext-frameworks": "Prosím vyberte jednu z nasledovných testovacích platforiem: $1",
"javascripttest-pagetext-skins": "Vyberte tému vzhľadu, na ktorej chcete spustiť testy:",
"javascripttest-qunit-intro": "Pozri [$1 dokumentácia testovania] na mediawiki.org.",
- "javascripttest-qunit-heading": "Testovacia sada QUnit JavaScriptu MediaWiki",
"tooltip-pt-userpage": "Vaša používateľská stránka",
"tooltip-pt-anonuserpage": "Používateľská stránka pre ip adresu, ktorú upravujete ako",
"tooltip-pt-mytalk": "Vaša diskusná stránka",
@@ -2247,7 +2254,6 @@
"pageinfo-robot-policy": "Indexovanie pomocou robotov",
"pageinfo-robot-index": "Povolené",
"pageinfo-robot-noindex": "Nepovolené",
- "pageinfo-views": "Počet zobrazení",
"pageinfo-watchers": "Počet používateľov sledujúcich stránku",
"pageinfo-few-watchers": "Menej ako $1 {{PLURAL:$1|sledujúci|sledujúci|sledujúcich}}",
"pageinfo-redirects-name": "Počet presmerovaní na túto stránku",
@@ -2281,11 +2287,11 @@
"markaspatrolledtext": "Označiť túto stránku ako stráženú",
"markedaspatrolled": "Označené ako strážené",
"markedaspatrolledtext": "Vybraná verzia [[:$1]] bola označená ako strážená.",
- "rcpatroldisabled": "Stráženie posledných zmien bolo vypnuté",
- "rcpatroldisabledtext": "Funkcia stráženia posledných zmien je momentálne vypnutá.",
+ "rcpatroldisabled": "Stráženie posledných úprav bolo vypnuté",
+ "rcpatroldisabledtext": "Funkcia stráženia posledných úprav je momentálne vypnutá.",
"markedaspatrollederror": "Nie je možné označiť ako strážené",
"markedaspatrollederrortext": "Pre označenie ako strážený je potrebné uviesť revíziu, ktorá sa má označiť ako strážená.",
- "markedaspatrollederror-noautopatrol": "Nie je vám umožnené označiť vlastné zmeny za strážené.",
+ "markedaspatrollederror-noautopatrol": "Nie je vám umožnené označiť vlastné úpravy za strážené.",
"markedaspatrollednotify": "Táto zmena stránky $1 bola označená ako strážená.",
"markedaspatrollederrornotify": "Označenie ako strážená zlyhalo.",
"patrol-log-page": "Záznam strážení",
@@ -2327,6 +2333,7 @@
"newimages-summary": "Táto špeciálna stránka zobrazuje posledné nahrané súbory.",
"newimages-legend": "Filter",
"newimages-label": "Názov súboru (alebo jeho časť):",
+ "newimages-showbots": "Zobraziť súbory nahrané botmi",
"noimages": "Niet čo zobraziť.",
"ilsubmit": "Hľadať",
"bydate": "podľa dátumu",
@@ -2695,7 +2702,6 @@
"exif-urgency-low": "Nízka ( $1 )",
"exif-urgency-high": "Vysoká ( $1 )",
"exif-urgency-other": "Používateľom definovaná priorita ($1)",
- "watchlistall2": "všetky",
"namespacesall": "všetky",
"monthsall": "všetky",
"confirmemail": "Potvrdiť e-mailovú adresu",
@@ -2753,6 +2759,7 @@
"autosumm-replace": "Nahrádzam stránku textom „$1“",
"autoredircomment": "Presmerovanie na [[$1]]",
"autosumm-new": "Vytvorená stránka „$1“",
+ "autosumm-newblank": "Vytvorená prázdna stránka",
"lag-warn-normal": "Úpravy za {{PLURAL:$1|poslednú sekundu|posledné $1 sekundy|posledných $1 sekúnd}} nemusia byť v tomto zozname zobrazené.",
"lag-warn-high": "Kvôli dlhšej odozve databázového servera nemusia byť úpravy za {{PLURAL:$1|poslednú sekundu|posledné $1 sekundy|posledných $1 sekúnd}} v tomto zozname zobrazené.",
"watchlistedit-normal-title": "Upraviť zoznam sledovaných stránok",
@@ -2768,13 +2775,19 @@
"watchlistedit-raw-done": "Váš zoznam sledovaných stránok bol aktualizovaný.",
"watchlistedit-raw-added": "{{PLURAL:$1|Jedna položka bola pridaná|$1 položky boli pridané|$1 položiek bolo pridaných}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|Jedna položka bola odstránená|$1 položky boli odstránené|$1 položiek bolo odstránených}}:",
+ "watchlistedit-clear-title": "Vyprázdnenie zoznamu sledovaných stránok",
+ "watchlistedit-clear-legend": "Vyprázdniť zoznam sledovaných stránok",
+ "watchlistedit-clear-explain": "Z vášho zoznamu sledovaných stránok budú odstránené všetky názvy",
"watchlistedit-clear-titles": "Názvy:",
+ "watchlistedit-clear-submit": "Vyprázdniť zoznam sledovaných stránok (natrvalo!)",
+ "watchlistedit-clear-done": "Váš zoznam sledovaných stránok bol vyprázdnený.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|Bol odstránený jeden názov|Boli odstránené $1 názvy|Bolo odstránených $1 názvov}}:",
+ "watchlisttools-clear": "Vyprázdniť zoznam sledovaných stránok",
"watchlisttools-view": "Zobraziť súvisiace zmeny",
"watchlisttools-edit": "Zobraziť a upraviť zoznam sledovaných stránok",
"watchlisttools-raw": "Upraviť nespracovaný zoznam sledovaných stránok",
"iranian-calendar-m1": "Farvardín",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskusia]])",
- "unknown_extension_tag": "Neznáma značka rozšírenia „$1“",
"duplicate-defaultsort": "Upozornenie: Štandardný kláves na zoraďovanie „$2“ nahrádza starý kláves „$1“.",
"version": "Verzia",
"version-extensions": "Nainštalované rozšírenia",
@@ -2790,7 +2803,7 @@
"version-parser-function-hooks": "Prípojné body funkcií syntaktického analyzátora",
"version-hook-name": "Názov prípojného bodu",
"version-hook-subscribedby": "Pripojené",
- "version-version": "(Verzia $1)",
+ "version-version": "($1)",
"version-license": "Licencia",
"version-ext-license": "Licencia",
"version-ext-colheader-name": "Rozšírenie",
@@ -2837,7 +2850,7 @@
"specialpages-group-maintenance": "Údržbové správy",
"specialpages-group-other": "Iné špeciálne stránky",
"specialpages-group-login": "Prihlásenie / registrácia",
- "specialpages-group-changes": "Posledné zmeny a záznamy",
+ "specialpages-group-changes": "Posledné úpravy a záznamy",
"specialpages-group-media": "Správy o multimédiách a nahrávaniach",
"specialpages-group-users": "Používatelia a skupiny",
"specialpages-group-highuse": "Často používané stránky",
@@ -2846,24 +2859,25 @@
"specialpages-group-wiki": "Údaje a nástroje",
"specialpages-group-redirects": "Špeciálne stránky, ktoré sú presmerovania",
"specialpages-group-spam": "Nástroje proti spamu",
+ "specialpages-group-developer": "Nástroje vývojárov",
"blankpage": "Prázdna stránka",
"intentionallyblankpage": "Táto stránka je zámerne prázdna. Používa sa na meranie výkonnosti atď.",
"external_image_whitelist": " #Nechajte tento riadok presne tak, ako je<pre>\n#Časti regulárnych výrazov (tie, ktoré sa píšu medzi //) napíšte dolu\n#Budú porovnané s URL externých obrázkov\n#Tie, ktoré budú zodpovedať reg. výrazu sa zobrazia ako obrázky, inak sa zobrazí iba odkaz na obrázok\n#Riadky, ktoré začínajú znakom # sa považujú za komentáre\n#Na veľkosti písmen nezáleží\n\n#Napíšte všetky časti reg. výrazov nad tento riadok. Nechajte tento riadok presne tak, ako je</pre>",
- "tags": "Platné označenia zmien",
+ "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)",
"tags-title": "Značky",
- "tags-intro": "Táto stránka obsahuje zoznam značiek, s ktorým softvér môže pracovať a upravovať ich a ich význam.",
+ "tags-intro": "Táto stránka obsahuje zoznam a význam značiek, ktorými môže softvér označovať jednotlivé úpravy.",
"tags-tag": "Názov značky",
"tags-display-header": "Vzhľad v zoznamoch úprav",
- "tags-description-header": "Úplný popis významu",
- "tags-active-header": "Aktívny?",
- "tags-hitcount-header": "Označené úpravy",
+ "tags-description-header": "Popis významu",
+ "tags-active-header": "Aktívna?",
+ "tags-hitcount-header": "Označených úprav",
"tags-active-yes": "Áno",
"tags-active-no": "Nie",
"tags-edit": "upraviť",
- "tags-hitcount": "$1 {{PLURAL:$1|zmena|zmeny|zmien}}",
+ "tags-hitcount": "$1 {{PLURAL:$1|úprava|úpravy|úprav}}",
"comparepages": "Porovnať stránky",
"compare-page1": "Stránka 1",
"compare-page2": "Stránka 2",
@@ -2931,19 +2945,20 @@
"logentry-rights-rights-legacy": "$1 zmenil členstvo $3 v skupinách",
"logentry-rights-autopromote": "$1 bol automaticky povýšený z $4 na $5",
"rightsnone": "(žiadne)",
+ "revdelete-summary": "zhrnutie úprav",
+ "feedback-adding": "Pridáva sa komentár na stránku...",
+ "feedback-bugcheck": "Skvelé! Teraz len skontrolujte, či to nie je jedna z už [$1 známych chýb].",
+ "feedback-bugnew": "Skontroloval som. Poslať nové hlásenie o chybe.",
"feedback-bugornote": "Ak ste pripravený podrobne popísať technický problém, prosím pošlite [$1 hlásenie o chybe]. \nV opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš komentár sa pridá na stránku „[$3 $2]“ spolu s vašim používateľským meno a prehliadačom, ktorý používate.",
- "feedback-subject": "Predmet:",
- "feedback-message": "Správa:",
"feedback-cancel": "Zrušiť",
- "feedback-submit": "Odoslať komentár",
- "feedback-adding": "Pridáva sa komentár na stránku...",
+ "feedback-close": "Hotovo",
"feedback-error1": "Chyba: Nerozpoznaný výsledok z API",
"feedback-error2": "Chyba: Úprava sa nepodarila",
"feedback-error3": "Chyba: Žiadna odpoveď z API",
+ "feedback-message": "Správa:",
+ "feedback-subject": "Predmet:",
+ "feedback-submit": "Odoslať",
"feedback-thanks": "Ďakujeme. Váš komentár bol odoslaný na stránku „[$2 $1]“.",
- "feedback-close": "Hotovo",
- "feedback-bugcheck": "Skvelé! Teraz len skontrolujte, či to nie je jedna z už [$1 známych chýb].",
- "feedback-bugnew": "Skontroloval som. Poslať nové hlásenie o chybe.",
"searchsuggest-search": "Hľadať",
"searchsuggest-containing": "obsahuje...",
"api-error-badaccess-groups": "Nemáte oprávnenie nahrávať súbory na tejto wiki.",
@@ -3025,5 +3040,38 @@
"pagelang-use-default": "Použiť predvolený jazyk",
"pagelang-select-lang": "Vybrať jazyk",
"right-pagelang": "Zmeniť jazyk stránky",
- "default-skin-not-found": "Uups! Základná tapeta pre Vašu wiki, popísanú v <code dir=\"ltr\">$wgDefaultSkin</code> ako <code>$1</code>, nie je dostupná. \n\nVaša inštalácia pravdepodobne obsahuje nasledovné tapety. Pozri [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pre viac informácii o ich aktivácii a zvoľte základnú.\n\n$2\n\n; Ak ste MediaWiki len teraz nainštalovali\n; Zrejme ste to nainštalovali z gitu alebo priamo zo zdrojového kódu inou metódou. Je to očakávané. Skúste nainštalovať nejaké tapety z [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory];\n:*Stiahnutím [https://www.mediawiki.org/wiki/Download tarball installer], ktorý ponúka viacero tapiet a rozšírení. Skopírovať a nalepiť možno priamo z <code>skins/</code>.\n:*Klonovanie jednej zo <code>mediawiki/skins/*</code> schránok cez git do <code dir=\"ltr\">skins/</code> priečinku Vašej Media Wiki inštalácie.\n: S existujúcou git schránkou, ak ste vývojár MediaWiki, by nemal byť konflikt.\n\n: Ak ste upgradeovali MediaWiki\n: MediaWiki 1.24 a novšie už tapety automaticky neaktivujú. (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Nasledovný kód môžete skopírovať do <code>LocalSettings.php</code> pre aktivovanie všetkých dostupných tapiet.\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ak ste upravili <code>LocalSettings.php</code>:\n: Skontrolujte chyby."
+ "default-skin-not-found": "Uups! Základná tapeta pre Vašu wiki, popísanú v <code dir=\"ltr\">$wgDefaultSkin</code> ako <code>$1</code>, nie je dostupná. \n\nVaša inštalácia pravdepodobne obsahuje nasledovné tapety. Pozri [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pre viac informácii o ich aktivácii a zvoľte základnú.\n\n$2\n\n; Ak ste MediaWiki len teraz nainštalovali\n; Zrejme ste to nainštalovali z gitu alebo priamo zo zdrojového kódu inou metódou. Je to očakávané. Skúste nainštalovať nejaké tapety z [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory];\n:*Stiahnutím [https://www.mediawiki.org/wiki/Download tarball installer], ktorý ponúka viacero tapiet a rozšírení. Skopírovať a nalepiť možno priamo z <code>skins/</code>.\n:*Klonovanie jednej zo <code>mediawiki/skins/*</code> schránok cez git do <code dir=\"ltr\">skins/</code> priečinku Vašej Media Wiki inštalácie.\n: S existujúcou git schránkou, ak ste vývojár MediaWiki, by nemal byť konflikt.\n\n: Ak ste upgradeovali MediaWiki\n: MediaWiki 1.24 a novšie už tapety automaticky neaktivujú. (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Nasledovný kód môžete skopírovať do <code>LocalSettings.php</code> pre aktivovanie všetkých dostupných tapiet.\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ak ste upravili <code>LocalSettings.php</code>:\n: Skontrolujte chyby.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (povolený)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''zakázaný''')",
+ "mediastatistics": "Štatistika súborov",
+ "mediastatistics-table-count": "Počet súborov",
+ "mediastatistics-table-totalbytes": "Celková veľkosť",
+ "mediastatistics-header-unknown": "Neznáme",
+ "mediastatistics-header-bitmap": "Rastrové obrázky",
+ "mediastatistics-header-drawing": "Kresby (vektorové obrázky)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Videá",
+ "mediastatistics-header-multimedia": "Multimédiá",
+ "mediastatistics-header-office": "Kancelárske súbory",
+ "mediastatistics-header-text": "Text",
+ "mediastatistics-header-executable": "Spustiteľné súbory",
+ "mediastatistics-header-archive": "Komprimované formáty",
+ "headline-anchor-title": "Odkaz na túto sekciu",
+ "special-characters-group-latin": "Latinka",
+ "special-characters-group-latinextended": "Latina rozšírené",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symboly",
+ "special-characters-group-greek": "Grécke",
+ "special-characters-group-cyrillic": "Azbuka",
+ "special-characters-group-arabic": "Arabské",
+ "special-characters-group-arabicextended": "Arabské rozšírené",
+ "special-characters-group-persian": "Perzský",
+ "special-characters-group-hebrew": "Hebrejské",
+ "special-characters-group-bangla": "Bengálčina",
+ "special-characters-group-telugu": "Telugčina",
+ "special-characters-group-sinhala": "sinhalčina",
+ "special-characters-group-gujarati": "gudžarátčina",
+ "special-characters-group-thai": "Thajské",
+ "special-characters-group-lao": "Laoské",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json
index 5bce7113..38a5e5a1 100644
--- a/languages/i18n/sl.json
+++ b/languages/i18n/sl.json
@@ -37,7 +37,7 @@
"tog-shownumberswatching": "Prikaži število uporabnikov, ki spremljajo temo",
"tog-oldsig": "Trenutni podpis:",
"tog-fancysig": "Obravnavaj podpis kot wikibesedilo (brez samodejne povezave)",
- "tog-uselivepreview": "Uporabi hitri predogled (preizkusno)",
+ "tog-uselivepreview": "Uporabi hitri predogled",
"tog-forceeditsummary": "Ob vpisu praznega povzetka urejanja me opozori",
"tog-watchlisthideown": "Na spisku nadzorov skrij moja urejanja",
"tog-watchlisthidebots": "Na spisku nadzorov skrij urejanja botov",
@@ -225,6 +225,7 @@
"pool-queuefull": "Čakalna vrsta zaloge je polna",
"pool-errorunknown": "Neznana napaka",
"pool-servererror": "Storitev založnega pulta ni na voljo ($1).",
+ "poolcounter-usage-error": "Napaka pri uporabi: $1",
"aboutsite": "O {{GRAMMAR:dajalnik|{{SITENAME}}}}",
"aboutpage": "Project:O {{GRAMMAR:dajalnik|{{SITENAME}}}}",
"copyright": "Razen, kjer je navedeno drugače, je besedilo na razpolago pod pogoji licence $1.",
@@ -234,6 +235,7 @@
"disclaimers": "Zanikanja odgovornosti",
"disclaimerpage": "Project:Splošno zanikanje odgovornosti",
"edithelp": "Pomoč pri urejanju",
+ "helppage-top-gethelp": "Pomoč",
"mainpage": "Glavna stran",
"mainpage-description": "Glavna stran",
"policy-url": "Project:Pravila",
@@ -313,10 +315,13 @@
"readonly_lag": "Podatkovna zbirka se je samodejno zaklenila, dokler se podrejeni strežniki ne uskladijo z glavnim.",
"internalerror": "Notranja napaka",
"internalerror_info": "Notranja napaka: $1",
+ "internalerror-fatal-exception": "Usodna izjema vrste »$1«",
"filecopyerror": "Datoteke »$1« ni mogoče prepisati v »$2«.",
"filerenameerror": "Datoteke »$1« ni mogoče preimenovati v »$2«.",
"filedeleteerror": "Datoteke »$1« ni mogoče izbrisati.",
"directorycreateerror": "Ne morem ustvariti direktorija »$1«.",
+ "directoryreadonlyerror": "Mapa »$1« je samo za branje.",
+ "directorynotreadableerror": "Mapa »$1« ni berljiva.",
"filenotfound": "Datoteke »$1« ne najdem.",
"unexpected": "Nepričakovana vrednost: \"$1\"=\"$2\".",
"formerror": "Napaka: obrazca ni mogoče predložiti",
@@ -338,7 +343,8 @@
"viewsourcetext": "Vsebino te strani si lahko ogledate in kopirate:",
"viewyourtext": "Lahko si ogledate in kopirate vsebino '''vaših urejanj''' te strani:",
"protectedinterface": "Prikazana stran vsebuje besedilo vmesnika programja na tem wikiju in je zaradi preprečevanja zlorab zaščitena.\n\nZa dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
- "editinginterface": "'''Opozorilo:''' Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja.\nSpremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih uporabnikov na tem wikiju.\nZa dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
+ "editinginterface": "<strong>Opozorilo:</strong> Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja.\nSpremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih uporabnikov na tem wikiju.",
+ "translateinterface": "Za dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
"cascadeprotected": "Ta stran je bila zaščitena pred urejanji, ker je vključena na {{PLURAL:$1|sledečo stran, ki je bila zaščitena|sledeči strani, ki sta bili zaščiteni|sledeče strani, ki so bile zaščitene}} z vključeno kaskadno možnostjo:\n$2",
"namespaceprotected": "Za urejanje strani v imenskem prostoru '''$1''' nimate dovoljenja.",
"customcssprotected": "Nimate pravice urejati te strani CSS, ker vsebuje osebne nastavitve drugega uporabnika.",
@@ -395,6 +401,8 @@
"userlogin-resetlink": "Ste pozabili svoje prijavne podatke?",
"userlogin-resetpassword-link": "Ste pozabili svoje geslo?",
"userlogin-helplink2": "Pomoč pri prijavi",
+ "userlogin-loggedin": "Prijavljeni ste že kot {{GENDER:$1|$1}}.\nUporabite spodnji obrazec, da se prijavite kot drug uporabnik.",
+ "userlogin-createanother": "Ustvari drug račun",
"createacct-emailrequired": "E-poštni naslov",
"createacct-emailoptional": "E-poštni naslov (izbirno)",
"createacct-email-ph": "Vnesite svoj e-poštni naslov",
@@ -430,6 +438,7 @@
"wrongpassword": "Vnesli ste napačno geslo. Prosimo, poskusite znova.",
"wrongpasswordempty": "Vpisali ste prazno geslo. Prosimo, poskusite znova.",
"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}}.",
"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",
@@ -555,10 +564,12 @@
"anoneditwarning": "<strong>Opozorilo:</strong> Niste prijavljeni. Vaš IP-naslov bo javno viden, če naredite kakršno koli urejanje. Če se <strong>[$1 prijavite]</strong> ali <strong>[$2 ustvarite račun]</strong>, bodo vaša urejanja pripisana vašemu uporabniškemu imenu skupaj z drugimi prednostmi.",
"anonpreviewwarning": "Niste prijavljeni. Ob spremembi strani se bo vaš IP-naslov zapisal v zgodovini urejanja te strani.",
"missingsummary": "'''Opozorilo:''' Niste napisali povzetka urejanja. Ob ponovnem kliku gumba ''Shrani'' se bo vaše urejanje shranilo brez njega.",
+ "selfredirect": "<strong>Opozorilo:</strong> Stran preusmerjate na samo nase.\nMorda ste za cilj preusmeritve navedli napačno stran ali pa morda urejate napačno stran.\nČe ponovno kliknete »{{int:savearticle}}«, bomo preusmeritev vseeno ustvarili.",
"missingcommenttext": "Prosimo, vpišite v spodnje polje komentar.",
"missingcommentheader": "'''Opozorilo:''' Niste vnesli zadeve/naslova za ta komentar.\nČe boste ponovno kliknili »{{int:savearticle}}«, bo vaše urejanje shranjeno brez le-tega.",
"summary-preview": "Predogled povzetka",
"subject-preview": "Predogled zadeve/naslova:",
+ "previewerrortext": "Med poskusom prikaza predogleda vaših sprememb je prišlo do napake.",
"blockedtitle": "Uporabnik je blokiran",
"blockedtext": "'''Urejanje z vašim uporabniškim imenom oziroma IP-naslovom je onemogočeno.'''\n\nBlokiral vas je $1.\nPodani razlog je ''$2''.\n\n* začetek blokade: $8\n* potek blokade: $6\n* blokirani uporabnik: $7\n\nO blokiranju se lahko pogovorite z uporabnikom/-co $1 ali katerim drugim [[{{MediaWiki:Grouppage-sysop}}|administratorjem]].\nVedite, da lahko ukaz »Pošlji uporabniku e-pismo« uporabite le, če ste v [[Special:Preferences|nastavitvah]] vpisali in potrdili svoj elektronski naslov in ta ni blokiran.\nVaš IP-naslov je $3, številka blokade pa #$5.\nProsimo, vključite ju v vse morebitne poizvedbe.",
"autoblockedtext": "Vaš IP-naslov je bil samodejno blokiran, saj je bil uporabljen s strani drugega uporabnika, ki ga je blokiral $1.\nRazlog za to je bil naslednji:\n\n:''$2''\n\n* Začetek blokade: $8\n* Konec blokade: $6\n* Blokirani uporabnik: $7\n\nKontaktirate lahko $1 ali katerega od drugih [[{{MediaWiki:Grouppage-sysop}}|administratorjev]], da razpravljate o blokadi.\n\nVedite, da lahko funkcijo »{{:MediaWiki:Emailuser/sl}}« uporabljate le, če ste v svoje [[Special:Preferences|uporabniške nastavitve]] vnesli veljaven e-poštni naslov, in vam njena uporaba ni bila preprečena.\n\nVaš trenutni IP-naslov je $3, ID blokiranja pa #$5. Prosimo, vključite ta ID v vsako zastavljeno vprašanje.",
@@ -653,6 +664,10 @@
"content-model-text": "golo besedilo",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Prazen objekt",
+ "content-json-empty-array": "Prazno polje",
+ "duplicate-args-category": "Strani s podvojenimi argumenti v klicih predlog",
+ "duplicate-args-category-desc": "Stran vsebuje klice predlog, ki vsebujejo dvojnike argumentov, kot sta <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ali <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Opozorilo:''' Ta stran vsebuje preveč klicev funkcije razčlenjevalnika kode.\n\nStran naj bi vsebovala manj kot $2 {{PLURAL:$2|klic|klica|klice|klicev}}, trenutno {{PLURAL:$1|je v uporabi $1 klic|sta v uporabi $1 klica|so v uporabi $1 klici|je v uporabi $1 klicev}}.",
"expensive-parserfunction-category": "Strani s prevelikim številom klicev na funkcijo razčlenjevalnika kode",
"post-expand-template-inclusion-warning": "'''Opozorilo:''' Velikost vključenih predlog je prevelika.\nNekatere predloge ne bodo prikazane.",
@@ -707,7 +722,7 @@
"history-feed-empty": "Zahtevana stran ne obstaja.\nMorda je bila izbrisana iz wikija ali pa jo je kdo preimenoval.\nProsimo, poskusite [[Special:Search|poiskati v wikiju]] ustrezajoče nove strani.",
"rev-deleted-comment": "(povzetek urejanja je odstranjen)",
"rev-deleted-user": "(uporabniško ime je bilo odstranjeno)",
- "rev-deleted-event": "(dnevniški vnos je odstranjen)",
+ "rev-deleted-event": "(podrobnosti dnevnika so odstranjene)",
"rev-deleted-user-contribs": "[uporabniško ime ali IP naslov odstranjeni - urajenje skrito v prispevkih]",
"rev-deleted-text-permission": "Prikazana redakcija je bila '''izbrisana'''.\nPodrobnosti so na razpolago v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
"rev-suppressed-text-permission": "Ta redakcija strani je bila <strong>zatrta</strong>.\nPodrobnosti so navedene v [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} dnevniku zatrtij].",
@@ -741,7 +756,7 @@
"revdelete-legend": "Nastavi omejitve vidnosti",
"revdelete-hide-text": "Besedilo redakcije",
"revdelete-hide-image": "Skrij vsebino datoteke.",
- "revdelete-hide-name": "Skrij dejanje in cilj",
+ "revdelete-hide-name": "Skrij cilj in parametre",
"revdelete-hide-comment": "Povzetek urejanja",
"revdelete-hide-user": "Uporabniško ime/IP-naslov urejevalca",
"revdelete-hide-restricted": "Zadrži podatke od administratorjev kakor tudi od ostalih",
@@ -795,7 +810,6 @@
"mergehistory-same-destination": "Izhodiščna in ciljna stran ne moreta imeti enak naslov",
"mergehistory-reason": "Razlog:",
"mergelog": "Dnevnik združevanj",
- "pagemerge-logentry": "[[$1]] združen z/s [[$2]] (redakcije do $3)",
"revertmerge": "Razdruži",
"mergelogpagetext": "Prikazan je seznam nedavnih združevanj zgodovin strani.",
"history-title": "$1: Zgodovina strani",
@@ -818,6 +832,8 @@
"notextmatches": "Iskanih besed ne vsebuje nobeno besedilo članka",
"prevn": "{{PLURAL:$1|prejšnja|prejšnji|prejšnje|prejšnjih|prejšnjih}} $1",
"nextn": "{{PLURAL:$1|naslednja|naslednji|naslednjih|naslednjih|naslednjih}} $1",
+ "prev-page": "prejšnja stran",
+ "next-page": "naslednja stran",
"prevn-title": "{{PLURAL:$1|Prejšnji rezultat|Prejšnja $1 rezultata|Prejšnji $1 rezultati|Prejšnjih $1 rezultatov}}",
"nextn-title": "{{PLURAL:$1|Naslednji rezultat|Naslednja $1 rezultata|Naslednji $1 rezultati|Naslednjih $1 rezultatov}}",
"shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultate|rezultatov}} na stran",
@@ -836,6 +852,7 @@
"search-result-category-size": "$1 {{PLURAL:$1|član|člana|člani|članov}} ($1 {{PLURAL:$2|podkategorija|podkategoriji|podkategorije|podkategorij}}, $1 {{PLURAL:$3|datoteka|datoteki|datoteke|datotek}})",
"search-redirect": "(preusmeritev $1)",
"search-section": "(razdelek $1)",
+ "search-category": "(kategorija $1)",
"search-file-match": "(ujema se z vsebino datoteke)",
"search-suggest": "Iščete morda: $1",
"search-interwiki-caption": "Sorodni projekti",
@@ -869,6 +886,11 @@
"prefs-personal": "Podatki o uporabniku",
"prefs-rc": "Zadnje spremembe",
"prefs-watchlist": "Spisek nadzorov",
+ "prefs-editwatchlist": "Uredi spisek nadzorov",
+ "prefs-editwatchlist-label": "Uredite vnose na svojem spisku nadzorov:",
+ "prefs-editwatchlist-edit": "Preglejte in odstranite naslove s svojega spiska nadzorov",
+ "prefs-editwatchlist-raw": "Uredite gol spisek nadzorov",
+ "prefs-editwatchlist-clear": "Počistite svoj spisek nadzorov",
"prefs-watchlist-days": "Število dni za prikaz na spisku nadzorov:",
"prefs-watchlist-days-max": "Največ $1 {{PLURAL:$1|dan|dneva|dni}}",
"prefs-watchlist-edits": "Število urejanj za prikaz na razširjenem spisku nadzorov:",
@@ -939,7 +961,7 @@
"gender-female": "Ona ureja wikistrani.",
"prefs-help-gender": "Nastavitev ni obvezna.\nProgramje uporablja njeno vrednost za vaše naslavljanje in omenjanje v ustreznem slovničnem spolu.\nPodatek bo javno prikazan.",
"email": "E-pošta",
- "prefs-help-realname": "Pravo ime ni obvezno.\nČe se ga odločite navesti, bo uporabljeno za priznavanje vašega dela.",
+ "prefs-help-realname": "Pravo ime ni obvezno.\nČe ga navedete, ga bomo morda uporabili za priznavanje vašega dela.",
"prefs-help-email": "E-poštni naslov ni obvezen, vendar omogoča, da vam v primeru pozabljenega gesla pošljemo novo.",
"prefs-help-email-others": "Omogočite lahko tudi možnost, da vam lahko ostali uporabniki pošiljajo e-pošto prek vaše uporabniške ali pogovorne strani.\nKo vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo razkrili.",
"prefs-help-email-required": "E-poštni naslov je obvezen.",
@@ -960,6 +982,7 @@
"prefs-tokenwatchlist": "Žeton",
"prefs-diffs": "Primerjave",
"prefs-help-prefershttps": "Nastavitev bo začela veljati ob vaši naslednji prijavi.",
+ "prefswarning-warning": "V svojih nastavitvah ste naredili spremembe, ki jih še niste shranili. Če odidete s strani brez da bi kliknili »$1«, vaših nastavitev ne bomo posodobili.",
"prefs-tabs-navigation-hint": "Namig: Za krmarjenje med zavihki na seznamu zavihkov lahko uporabite levo in desno smerno tipko.",
"email-address-validity-valid": "E-poštni naslov je videti veljaven",
"email-address-validity-invalid": "Vnesite veljaven e-poštni naslov",
@@ -1045,6 +1068,7 @@
"right-protect": "Spreminjanje stopenj zaščite in urejanje kaskadno zaščitenih strani",
"right-editprotected": "Urejanje strani, zaščitenih kot »{{int:protect-level-sysop}}«",
"right-editsemiprotected": "Urejanje strani, zaščitenih kot »{{int:protect-level-autoconfirmed}}«",
+ "right-editcontentmodel": "Urejanje vsebinskega modela strani",
"right-editinterface": "Urejanje uporabniškega vmesnika",
"right-editusercssjs": "Urejanje CSS- in JS-datotek drugih uporabnikov",
"right-editusercss": "Uredi CSS datotek drugih uporabnikov",
@@ -1072,6 +1096,7 @@
"right-override-export-depth": "Izvoz strani, vključno s povezaimi straneh do globine 5",
"right-sendemail": "Pošiljanje e-pošte drugim uporabnikom",
"right-passwordreset": "Ogled e-pošt ponastavitve gesel",
+ "right-managechangetags": "Ustvarjanje in brisanje [[Special:Tags|oznak]] iz zbirke podatkov",
"newuserlogpage": "Dnevnik registracij uporabnikov",
"newuserlogpagetext": "Prikazan je dnevnik nedavnih registracij novih uporabnikov.",
"rightslog": "Dnevnik uporabniških pravic",
@@ -1117,6 +1142,8 @@
"action-viewmywatchlist": "ogleda svojega spiska nadzorov",
"action-viewmyprivateinfo": "ogled svojih zasebnih informacij",
"action-editmyprivateinfo": "urejanje svojih zasebnih informacij",
+ "action-editcontentmodel": "urejanje vsebinskega modela strani",
+ "action-managechangetags": "ustvarjanje in brisanje oznak iz zbirke podatkov",
"nchanges": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|od zadnjega obiska}}",
"enhancedrc-history": "zgodovina",
@@ -1186,9 +1213,9 @@
"uploaderror": "Napaka",
"upload-recreate-warning": "'''Opozorilo: Datoteka s tem imenom je bila izbrisana ali prestavljena.'''\n\nDnevnik brisanja in prestavitev za to stran sta navedena tukaj:",
"uploadtext": "Spodnji obrazec lahko uporabite za nalaganje datotek.\nZa ogled ali iskanje že naloženih pojdite na [[Special:FileList|seznam naloženih datotek]]; ponovna nalaganja so zabeležena tudi v [[Special:Log/upload|dnevniku nalaganja]], izbrisi pa v [[Special:Log/delete|dnevniku brisanja]].\n\nDatoteko lahko na želeno stran vključite na naslednje načine:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg]]</nowiki></code>''' (polna velikost)\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg|200px|thumb|left|opisno besedilo]]</nowiki></code>''' (slika pomanjšana na 200 slikovnih pik širine, uokvirjena, z levo poravnavo in opisom »opisno besedilo«)\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></code>''' (neposredna povezava z datoteko)",
- "upload-permitted": "Dovoljene vrste datotek: $1.",
- "upload-preferred": "Priporočene vrste datotek: $1.",
- "upload-prohibited": "Prepovedane vrste datotek: $1.",
+ "upload-permitted": "{{PLURAL:$2|Dovoljena vrsta|Dovoljeni vrsti|Dovoljene vrste}} datotek: $1.",
+ "upload-preferred": "{{PLURAL:$2|Priporočena vrsta|Priporočeni vrsti|Priporočene vrste}} datotek: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Prepovedana vrsta|Prepovedani vrsti|Prepovedane vrste}} datotek: $1.",
"uploadlogpage": "Dnevnik nalaganja datotek",
"uploadlogpagetext": "Prikazan je seznam nedavno naloženih datotek.\nZa grafični pogled obiščite [[Special:NewFiles|galerijo novih datotek]].",
"filename": "Ime datoteke",
@@ -1447,7 +1474,6 @@
"statistics": "Statistika",
"statistics-header-pages": "Statistika strani",
"statistics-header-edits": "Statistika urejanj",
- "statistics-header-views": "Statistika ogledov",
"statistics-header-users": "Uporabniška statistika",
"statistics-header-hooks": "Drugi statistični podatki",
"statistics-articles": "Članki",
@@ -1456,13 +1482,9 @@
"statistics-files": "Naložene datoteke",
"statistics-edits": "Urejanja strani od postavitve {{GRAMMAR:rodilnik|{{SITENAME}}}}",
"statistics-edits-average": "Povprečno število urejanj na stran",
- "statistics-views-total": "Vseh ogledov",
- "statistics-views-total-desc": "Ogledi neoobstoječih in posebnih strani niso vključeni",
- "statistics-views-peredit": "Razmerje med ogledi in urejanji",
"statistics-users": "Registrirani [[Special:ListUsers|uporabniki]]",
"statistics-users-active": "Aktivni uporabniki",
"statistics-users-active-desc": "Uporabniki, ki so izvedli dejanje v {{PLURAL:$1|zadnjem dnevu|zadnjih $1 dneh}}",
- "statistics-mostpopular": "Strani z največ ogledi",
"pageswithprop": "Strani z lastnostmi strani",
"pageswithprop-legend": "Strani z lastnostmi strani",
"pageswithprop-text": "Stran navaja vse strani, ki uporabljajo določene lastnosti strani.",
@@ -1503,9 +1525,9 @@
"uncategorizedtemplates": "Nekategorizirane predloge",
"unusedcategories": "Osirotele kategorije",
"unusedimages": "Osirotele datoteke",
- "popularpages": "Priljubljene strani",
"wantedcategories": "Želene kategorije",
"wantedpages": "Želene strani",
+ "wantedpages-summary": "Seznam neobstoječih strani z največ povezavami, ki kažejo na njih, izključujoč preusmeritve. Za seznam neobstoječih strani, ki so ciljne strani preusmeritev, glejte [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Neveljaven naslov v končnem nizu: $1",
"wantedfiles": "Želene datoteke",
"wantedfiletext-cat": "Naslednje datoteke so uporabljene, vendar ne obstajajo. Navedene so morda tudi datoteke iz zunanjih hramb, čeprav obstajajo. Vsi takšni lažni pozitivi bodo <del>prečrtani</del>. Poleg tega so strani, ki vključujejo neobstoječe datoteke, navedene na [[:$1]].",
@@ -1565,9 +1587,11 @@
"pager-older-n": "{{PLURAL:$1|starejši|starejša|starejši|starejših}} $1",
"suppress": "Nadzor",
"querypage-disabled": "Ta posebna stran je onemogočena iz zmogljivostnih razlogov.",
+ "apihelp": "Pomoč za API",
+ "apihelp-no-such-module": "Modula »$1« nismo našli.",
"booksources": "Viri knjig",
"booksources-search-legend": "Išči knjižne vire",
- "booksources-go": "Pojdi",
+ "booksources-search": "Išči",
"booksources-text": "Sledi seznam povezav do drugi spletnih strani, ki prodajajo nove in rabljene knjige, in imajo morda nadaljnje informacije o knjigah, ki jih iščete:",
"booksources-invalid-isbn": "Za dani ISBN se ne zdi, da je veljaven; preverite za morebitne napake pri kopiranju iz prvotnega vira.",
"specialloguserlabel": "Izvajalec:",
@@ -1703,7 +1727,7 @@
"wlheader-enotif": "Obveščanje po elektronski pošti je omogočeno.",
"wlheader-showupdated": "Strani, spremenjene od vašega zadnjega ogleda, so prikazane '''krepko'''.",
"wlnote": "{{PLURAL:$1|Navedena je zadnja|Navedeni sta zadnji|Navedene so zadnje|Navedenih je zadnjih}} <strong>$1</strong> {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb}} v {{PLURAL:$2|zadnji <strong>$2</strong> uri|zadnjih <strong>$2</strong> urah}}, od $3, $4.",
- "wlshowlast": "Prikaži zadnjih $1 ur; $2 dni; $3;",
+ "wlshowlast": "Prikaži zadnjih $1 ur; $2 dni",
"watchlist-options": "Možnosti spiska nadzorov",
"watching": "Nadziranje ...",
"unwatching": "Nenadziranje ...",
@@ -1752,7 +1776,6 @@
"deleteprotected": "Strani ne morete izbrisati, ker jo je nekdo zaščitil.",
"deleting-backlinks-warning": "'''Opozorilo:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge strani]] se povezujejo na ali vključujejo stran, ki jo nameravate izbrisati.",
"rollback": "Vrni spremembe",
- "rollback_short": "Vrni",
"rollbacklink": "vrni",
"rollbacklinkcount": "vrni $1 {{PLURAL:$1|urejanje|urejanji|urejanja|urejanj}}",
"rollbacklinkcount-morethan": "vrni več kot $1 {{PLURAL:$1|urejanje|urejanji|urejanja|urejanj}}",
@@ -1862,6 +1885,7 @@
"namespace": "Imenski prostor:",
"invert": "obrni izbor",
"tooltip-invert": "Označite to polje, da skrijete spremembe v izbranem imenskem prostoru (in povezanih imenskih prostorih, če je označeno)",
+ "tooltip-whatlinkshere-invert": "Označite to polje, da skrijete povezave s strani iz izbranega imenskega prostora.",
"namespace_association": "povezan imenski prostor",
"tooltip-namespace_association": "Označite to polje, da vključite tudi pogovor ali predmetni imenski prostor, povezan z izbranim imenskim prostorom",
"blanknamespace": "(Osnovno)",
@@ -2126,14 +2150,15 @@
"thumbnail-temp-create": "Ne morem ustvariti začasne datoteke sličice",
"thumbnail-dest-create": "Ne morem shraniti sličice na ciljno mesto",
"thumbnail_invalid_params": "Neveljavni parametri za sličico",
+ "thumbnail_toobigimagearea": "Datoteke z dimenzijami, večjimi od $1",
"thumbnail_dest_directory": "Ne morem ustvariti ciljnega direktorija",
"thumbnail_image-type": "Vrsta slike ni podprta",
"thumbnail_gd-library": "Nepopolna konfiguracija knjižice GD: manjka funkcija $1",
"thumbnail_image-missing": "Kaže, da datoteka manjka: $1",
"thumbnail_image-failure-limit": "Nedavno je bilo preveč spodletelih poskusov ($1 ali več) izdelave sličice. Prosimo, poskusite znova pozneje.",
"import": "Uvoz strani",
- "importinterwiki": "Uvoz transwiki",
- "import-interwiki-text": "Izberite wiki in naslov strani za uvoz.\nDatumi in imena urejevalcev redakcij bodo ohranjena.\nVsi uvozi med wikiji so zabeleženi v [[Special:Log/import|dnevniku uvozov]].",
+ "importinterwiki": "Uvoz z drugega wikija",
+ "import-interwiki-text": "Izberite wiki in naslov strani za uvoz.\nDatumi in imena urejevalcev redakcij bodo ohranjena.\nVsi uvozi z drugih wikijev so zabeleženi v [[Special:Log/import|dnevniku uvozov]].",
"import-interwiki-sourcewiki": "Izvorni wiki:",
"import-interwiki-sourcepage": "Izvorna stran:",
"import-interwiki-history": "Kopiraj vse dosedanje redakcije te strani",
@@ -2153,7 +2178,7 @@
"importcantopen": "Neuspešno odpiranje uvožene datoteke",
"importbadinterwiki": "Slaba jezikovna povezava",
"importsuccess": "Uspešno uvoženo!",
- "importnosources": "Na tem wikiju je ta možnost onemogočena.",
+ "importnosources": "Naveden ni noben wiki za uvažanje in neposredno nalaganje zgodovine je onemogočeno.",
"importnofile": "Uvožena ni bila nobena datoteka.",
"importuploaderrorsize": "Nalaganje datoteke za uvoz ni uspelo.\nDatoteka je večja od dovoljene velikosti nalaganja.",
"importuploaderrorpartial": "Nalaganje datoteke za uvoz ni uspelo.\nDatoteka je bila prenesena samo delno.",
@@ -2177,18 +2202,15 @@
"import-rootpage-nosubpage": "Imenski prostor »$1« korenske strani ne dovoli podstrani.",
"importlogpage": "Dnevnik uvozov",
"importlogpagetext": "Administrativni uvozi strani z zgodovino urejanja iz drugih wikijev.",
- "import-logentry-upload": "uvozil [[$1]] z nalaganjem datoteke",
"import-logentry-upload-detail": "{{PLURAL:$1|Uvožena $1 redakcija|Uvoženi $1 redakciji|Uvožene $1 redakcije|Uvoženih $1 redakcij}}",
- "import-logentry-interwiki": "prenesel $1 med wikiji",
"import-logentry-interwiki-detail": "{{PLURAL:$1|Uvožena $1 redakcija|Uvoženi $1 redakciji|Uvožene $1 redakcije|Uvoženih $1 redakcij}} z $2",
"javascripttest": "Preizkušanje JavaScripta",
- "javascripttest-title": "Poganjanje $1 preizkusov",
"javascripttest-pagetext-noframework": "Stran je rezervirana za poganjanje preizkusov JavaScript.",
"javascripttest-pagetext-unknownframework": "Neznano ogrodje za preizkušanje »$1«.",
+ "javascripttest-pagetext-unknownaction": "Neznano dejanje »$1«.",
"javascripttest-pagetext-frameworks": "Prosimo, izberite enega od naslednjih ogrodjev za preizkušanje: $1",
"javascripttest-pagetext-skins": "Izberite kožo, v kateri želite pognati preizkuse:",
"javascripttest-qunit-intro": "Oglejte si [$1 dokumentacijo o preizkušanju] na mediawiki.org.",
- "javascripttest-qunit-heading": "Preizkuševalni paket MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "Vaša uporabniška stran",
"tooltip-pt-anonuserpage": "Uporabniška stran IP-naslova, ki ga uporabljate",
"tooltip-pt-mytalk": "Vaša pogovorna stran",
@@ -2198,6 +2220,7 @@
"tooltip-pt-mycontris": "Seznam vaših prispevkov",
"tooltip-pt-login": "Prijava ni obvezna, vendar je zaželena",
"tooltip-pt-logout": "Odjavite se",
+ "tooltip-pt-createaccount": "Predlagamo vam, da ustvarite račun in se prijavite, vendar pa to ni obvezno.",
"tooltip-ca-talk": "Pogovor o strani",
"tooltip-ca-edit": "Stran lahko uredite. Preden jo shranite, uporabite gumb za predogled.",
"tooltip-ca-addsection": "Začnite novo razpravo",
@@ -2227,6 +2250,7 @@
"tooltip-feed-atom": "Atom-vir strani",
"tooltip-t-contributions": "Preglejte seznam uporabnikovih prispevkov",
"tooltip-t-emailuser": "Pošljite uporabniku e-pismo",
+ "tooltip-t-info": "Več informacij o strani",
"tooltip-t-upload": "Naložite slike ali predstavnostne datoteke",
"tooltip-t-specialpages": "Preglejte seznam vseh posebnih strani",
"tooltip-t-print": "Natisljiva različica strani",
@@ -2289,7 +2313,6 @@
"pageinfo-robot-policy": "Robotsko indeksiranje",
"pageinfo-robot-index": "Dovoljeno",
"pageinfo-robot-noindex": "Nedovoljeno",
- "pageinfo-views": "Število ogledov",
"pageinfo-watchers": "Število spremljevalcev strani",
"pageinfo-few-watchers": "Manj kot $1 {{PLURAL:$1|spremljevalec|spremljevalca|spremljevalci|spremljevalcev}}",
"pageinfo-redirects-name": "Število preusmeritev na stran",
@@ -2746,7 +2769,6 @@
"exif-urgency-low": "Nizko ($1)",
"exif-urgency-high": "Visoko ($1)",
"exif-urgency-other": "Uporabniško določena prednost ($1)",
- "watchlistall2": "vse",
"namespacesall": "vse",
"monthsall": "vse",
"confirmemail": "Potrditev naslova elektronske pošte",
@@ -2835,9 +2857,9 @@
"watchlisttools-edit": "Prikaz in urejanje spiska nadzorov",
"watchlisttools-raw": "Uredi gol spisek nadzorov",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|pogovor]])",
- "unknown_extension_tag": "Neznana razširitvena etiketa »$1«",
"duplicate-defaultsort": "'''Opozorilo:''' Privzeti ključ razvrščanja »$2« prepiše prejšnji privzeti ključ razvrščanja »$1«.",
"duplicate-displaytitle": "<strong>Opozorilo:</strong> Prikazni naslov »$2« prepiše prejšnji prikazni naslov »$1«.",
+ "invalid-indicator-name": "<strong>Napaka:</strong> Atribut <code>name</code> indikatorjev stanja strani ne sme biti prazen.",
"version": "Različica",
"version-extensions": "Nameščene razširitve",
"version-skins": "Nameščene kože",
@@ -2852,7 +2874,7 @@
"version-parser-function-hooks": "Funkcije razširitev razčlenjevalnika",
"version-hook-name": "Ime razširitve",
"version-hook-subscribedby": "Naročen s strani",
- "version-version": "(Različica $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[brez imena]",
"version-license": "Dovoljenje MediaWiki",
"version-ext-license": "Dovoljenje",
@@ -2879,6 +2901,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Pot članka]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Pot skripta]",
+ "version-libraries": "Nameščene knjižnice",
+ "version-libraries-library": "Knjižnica",
+ "version-libraries-version": "Različica",
"redirect": "Preusmeri po datoteki, uporabniku, strani ali ID-ju redakcije",
"redirect-legend": "Preusmeritev na datoteko ali stran",
"redirect-summary": "Posebna stran preusmeri na datoteko (če podate ime datoteke), stran (če podate ID redakcije ali ID strani) ali uporabniško stran (če podate številski ID uporabnika). Uporaba: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] ali [[{{#Special:Redirect}}/user/101]].",
@@ -2914,6 +2939,7 @@
"specialpages-group-wiki": "Podatki in orodja",
"specialpages-group-redirects": "Preusmerjajoče posebne strani",
"specialpages-group-spam": "Orodja za spam",
+ "specialpages-group-developer": "Razvijalska orodja",
"blankpage": "Prazna stran",
"intentionallyblankpage": "Ta stran je namenoma prazna.",
"external_image_whitelist": " #Pustite to vrstico takšno, kot je<pre>\n#Navedite odlomke običajnih izrazov (regular expressions) (samo del, ki gre med //) spodaj\n#Ti bodo primerjani z URL-ji zunanjih (hotlinkanih) slik\n#Tisti, ki se bodo ujemali, bodo prikazani kot slike; v nasprotnem primeru bo prikazana samo povezava do slike\n#Vrstice, ki se začnejo z #, so obravnavane kot komentarji\n#Zadeva je občutljiva na velikost črk\n\n#Navedite vse izraze regex pod to vrstico. Pustite to vrstico takšno, kot je</pre>",
@@ -2926,12 +2952,54 @@
"tags-tag": "Ime oznake",
"tags-display-header": "Prikaz na seznamu sprememb",
"tags-description-header": "Polni opis pomena",
+ "tags-source-header": "Vir",
"tags-active-header": "Dejavno?",
"tags-hitcount-header": "Etiketirane spremembe",
+ "tags-actions-header": "Dejanja",
"tags-active-yes": "Da",
"tags-active-no": "Ne",
+ "tags-source-extension": "Opredeljuje jo razširitev",
+ "tags-source-manual": "Ročno jo uporabljajo uporabniki in boti",
+ "tags-source-none": "Se ne uporablja več",
"tags-edit": "uredi",
+ "tags-delete": "izbriši",
+ "tags-activate": "aktiviraj",
+ "tags-deactivate": "dezaktiviraj",
"tags-hitcount": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}",
+ "tags-manage-no-permission": "Nimate dovoljenja za upravljanje z oznakami sprememb.",
+ "tags-create-heading": "Ustvari novo oznako",
+ "tags-create-explanation": "Privzeto bodo novo ustvarjene oznake na voljo uporabnikom in botom.",
+ "tags-create-tag-name": "Ime oznake:",
+ "tags-create-reason": "Razlog:",
+ "tags-create-submit": "Ustvari",
+ "tags-create-no-name": "Določiti morate ime oznake.",
+ "tags-create-invalid-chars": "Imena oznak ne smejo vsebovati vejic (<code>,</code>) ali desnih poševnic (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Imena oznak ne smejo vsebovati znakov, ki jih ni mogoče uporabiti v naslovih strani.",
+ "tags-create-already-exists": "Oznaka »$1« že obstaja.",
+ "tags-create-warnings-above": "Pri poskusu ustvarjanja oznake »$1« smo naleteli na {{PLURAL:$2|naslednje opozorilo|naslednji opozorili|naslednja opozorila}}:",
+ "tags-create-warnings-below": "Želite nadaljevati z ustvarjanjem oznake?",
+ "tags-delete-title": "Izbriši oznako",
+ "tags-delete-explanation-initial": "Nameravate izbrisati oznako »$1« iz zbirke podatkov.",
+ "tags-delete-explanation-in-use": "Odstranjena bo iz {{PLURAL:$2|$2 redakcije ali dnevniškega vnosa|vseh $2 redakcij in/ali dnevniških vnosov}}, ki jo trenutno uporabljajo.",
+ "tags-delete-explanation-warning": "Dejanje je <strong>nepovratno</strong> in <strong>ga ni mogoče razveljaviti</strong>; tega ne morejo storiti niti upravljavci zbirke podatkov. Prepričajte se, da oznako zares želite izbrisati.",
+ "tags-delete-explanation-active": "<strong>Oznaka »$1« je že vedno aktivna in bo uporabljana tudi v bodoče.</strong> Da to preprečite, pojdite na mesto, kjer je oznaka določena za uporabo, in jo tam onemogočite.",
+ "tags-delete-reason": "Razlog:",
+ "tags-delete-submit": "Nepovratno izbriši oznako",
+ "tags-delete-not-allowed": "Oznak, ki jih določijo razširitve, ni mogoče izbrisati, razen če razširitve to izrecno dovolijo.",
+ "tags-delete-not-found": "Oznaka »$1« ne obstaja.",
+ "tags-delete-too-many-uses": "Oznaka »$1« je uporabljena pri več kot $2 {{PLURAL:$2|redakciji|redakcijah}}, kar pomeni, da je ni mogoče izbrisati.",
+ "tags-delete-warnings-after-delete": "Oznako »$1« smo uspešno izbrisali, vendar smo naleteli na {{PLURAL:$2|naslednjo težavo|naslednji težavi|naslednje težave}}:",
+ "tags-activate-title": "Aktiviraj oznako",
+ "tags-activate-question": "Aktivirali boste oznako »$1«.",
+ "tags-activate-reason": "Razlog:",
+ "tags-activate-not-allowed": "Oznake »$1« ni možno aktivirati.",
+ "tags-activate-not-found": "Oznaka »$1« ne obstaja.",
+ "tags-activate-submit": "Aktiviraj",
+ "tags-deactivate-title": "Dezaktiviraj oznako",
+ "tags-deactivate-question": "Dezaktivirali boste oznako »$1«.",
+ "tags-deactivate-reason": "Razlog:",
+ "tags-deactivate-not-allowed": "Oznake »$1« ni možno dezaktivirati.",
+ "tags-deactivate-submit": "Dezaktiviraj",
"comparepages": "Primerjaj strani",
"compare-page1": "Stran 1",
"compare-page2": "Stran 2",
@@ -2943,8 +3011,8 @@
"compare-revision-not-exists": "Navedena redakcija ne obstaja.",
"dberr-problems": "Oprostite! Ta stran se sooča s tehničnimi težavami.",
"dberr-again": "Poskusite počakati nekaj minut in ponovno naložite stran.",
- "dberr-info": "(Ne morem se povezati s strežnikom zbirke podatkov: $1)",
- "dberr-info-hidden": "(Ne morem se povezati s strežnikom zbirke podatkov)",
+ "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.",
@@ -2985,6 +3053,14 @@
"revdelete-uname-unhid": "uporabniško ime je ponovno prikazano",
"revdelete-restricted": "uveljavljene omejitve administratorjev",
"revdelete-unrestricted": "odstranjene omejitve administratorjev",
+ "logentry-block-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} s časom poteka $5 $6",
+ "logentry-block-unblock": "$1 je {{GENDER:$2|odblokiral|odblokirala|odblokiral(-a)}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} nastavitve blokade za {{GENDER:$4|$3}} s časomspremenil 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",
+ "logentry-import-interwiki": "$1 je {{GENDER:$2|uvozil|uvozila|uvozil(-a)}} $3 z drugega wikija",
+ "logentry-merge-merge": "$1 je {{GENDER:$2|združil|združila|združil(-a)}} $3 z $4 (redakcije do $5)",
"logentry-move-move": "$1 je {{GENDER:$2|premaknil|premaknila|premaknil(-a)}} stran $3 na $4",
"logentry-move-move-noredirect": "$1 je {{GENDER:$2|prestavil|prestavila|prestavil(-a)}} stran $3 na $4 brez preusmeritve",
"logentry-move-move_redir": "$1 je {{GENDER:$2|prestavil|prestavila|prestavil(-a)}} stran $3 na $4 prek preusmeritve",
@@ -3002,20 +3078,36 @@
"logentry-upload-upload": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} $3",
"logentry-upload-overwrite": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} novo različico $3",
"logentry-upload-revert": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} $3",
+ "log-name-managetags": "Dnevnik upravljanja oznak",
+ "log-description-managetags": "Stran navaja opravila upravljanja, povezana z [[Special:Tags|oznakami]]. Dnevnik vsebuje samo dejanja, ki so jih ročno izvedli administratorji; oznake je lahko ustvarilo ali izbrisalo tudi programje wiki brez zabeleženega vnosa v tem dnevniku.",
+ "logentry-managetags-create": "$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} oznako »$4«",
+ "logentry-managetags-delete": "$1 je {{GENDER:$2|izbrisal|izbrisala|izbrisal(-a)}} oznako »$4« (odstranjena iz $5 {{PLURAL:$5|redakcije ali dnevniškega vnosa|redakcij in/ali dnevniških vnosov}})",
+ "logentry-managetags-activate": "$1 je {{GENDER:$2|aktiviral|aktivirala|aktiviral(-a)}} oznako »$4« za uporabnike in bote",
+ "logentry-managetags-deactivate": "$1 je {{GENDER:$2|dezaktiviral|dezaktivirala|dezaktiviral(-a)}} oznako »$4« za uporabnike in bote",
"rightsnone": "(nobeno)",
+ "revdelete-summary": "povzetek urejanja",
+ "feedback-adding": "Dodajanje povratne informacije na stran ...",
+ "feedback-back": "Nazaj",
+ "feedback-bugcheck": "Izvrstno! Samo preverite, da ne gre za enega od [$1 že znanih hroščev].",
+ "feedback-bugnew": "Sem preveril. Prijavi nov hrošč",
"feedback-bugornote": "Če ste pripravljeni podrobno opisati tehnično težavo, vložite [$1 poročilo o hrošču].\nV nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bomo dodali na stran »[$3 $2]«, skupaj z vašim uporabniškim imenom in podatkom o brskalniku, ki ga uporabljate.",
- "feedback-subject": "Zadeva:",
- "feedback-message": "Sporočilo:",
"feedback-cancel": "Prekliči",
- "feedback-submit": "Pošlji povratno informacijo",
- "feedback-adding": "Dodajanje povratne informacije na stran ...",
+ "feedback-close": "Urejeno",
+ "feedback-external-bug-report-button": "Vloži tehnično opravilo",
+ "feedback-dialog-title": "Pošljite povratne informacije",
+ "feedback-dialog-intro": "Spodnji enostavni obrazec lahko uporabite za pošiljanje povratnih informacij. Vašo pripombo bomo dodali na stran »$1« skupaj z vašim uporabniškim imenom.",
+ "feedback-error-title": "Napaka",
"feedback-error1": "Napaka: Neznan rezultat iz API",
"feedback-error2": "Napaka: Urejanje je spodletelo",
"feedback-error3": "Napaka: Ni odgovora od API",
+ "feedback-message": "Sporočilo:",
+ "feedback-subject": "Zadeva:",
+ "feedback-submit": "Pošlji",
+ "feedback-terms": "Razumem, da podatek o uporabniškem agentu vsebuje točne informacije o mojem brskalniku in različici operacijskega sistema ter da bo javno prikazan skupaj z mojimi povratnimi informacijami.",
+ "feedback-termsofuse": "Strinjam se, da posredujem povratne informacije v skladu s Pogoji uporabe.",
"feedback-thanks": "Havala! Vaše povratne informacije smo objavili na strani »[$2 $1]«.",
- "feedback-close": "Urejeno",
- "feedback-bugcheck": "Izvrstno! Samo preverite, da ne gre za enega od [$1 že znanih hroščev].",
- "feedback-bugnew": "Sem preveril. Prijavi nov hrošč",
+ "feedback-thanks-title": "Hvala!",
+ "feedback-useragent": "Uporabniški agent:",
"searchsuggest-search": "Iskanje",
"searchsuggest-containing": "vsebujoč ...",
"api-error-badaccess-groups": "Nalaganje datotek na ta wiki vam ni dovoljeno.",
@@ -3051,6 +3143,13 @@
"api-error-stashfailed": "Notranja napaka: strežnik ni uspel shraniti začasne datoteke.",
"api-error-publishfailed": "Notranja napaka: strežnik ni uspel objaviti začasne datoteke.",
"api-error-stasherror": "Pri nalaganju datoteke v hrambo je prišlo do napake.",
+ "api-error-stashedfilenotfound": "Datoteke iz skrite shrambe med poskusom nalaganja iz skrite shrambe nismo našli.",
+ "api-error-stashpathinvalid": "Pot, na kateri naj bi bila datoteka iz skrite shrambe, ni veljavna.",
+ "api-error-stashfilestorage": "Pri shranjevanju datoteke v skrito shrambo je prišlo do napake.",
+ "api-error-stashzerolength": "Strežnik ni mogel dati datoteke v skrito shrambo, ker ima ničelno dolžino.",
+ "api-error-stashnotloggedin": "Da lahko shranite datoteke v skrito shrambo nalaganja, morate biti prijavljeni.",
+ "api-error-stashwrongowner": "Datoteka, do katere ste poskušali dostopati v skriti shrambi, ne pripada vam.",
+ "api-error-stashnosuchfilekey": "Datoteka, do katere ste poskušali dostopati v skriti shrambi, ne obstaja.",
"api-error-timeout": "Strežnik se ni odzval v pričakovanem času.",
"api-error-unclassified": "Prišlo je do neznane napake",
"api-error-unknown-code": "Neznana napaka: »$1«",
@@ -3095,6 +3194,8 @@
"expand_templates_generate_xml": "Pokaži razčlenitveno drevo XML",
"expand_templates_generate_rawhtml": "Prikaži surovi HTML",
"expand_templates_preview": "Predogled",
+ "expand_templates_preview_fail_html": "<em>Ker ima {{SITENAME}} omogočen surov HTML in je prišlo do izgube podatkov o seji, smo predogled skrili kot previdnostni ukrep pred napadi z JavaScriptom.</em>\n\n<strong>Če je to veljaven poskus predogleda, poskusite znova.</strong>\nČe še vedno ne deluje, se poskusite [[Special:UserLogout|odjaviti]] in znova prijaviti.",
+ "expand_templates_preview_fail_html_anon": "<em>Ker ima {{SITENAME}} omogočen surov HTML in niste prijavljeni, smo predogled skrili kot previdnostni ukrep pred napadi z JavaScriptom.</em>\n\n<strong>Če je to veljaven poskus predogleda, se [[Special:UserLogin|prijavite]] in poskusite znova.</strong>",
"pagelanguage": "Izbirnik jezika strani",
"pagelang-name": "Stran",
"pagelang-language": "Jezik",
@@ -3105,8 +3206,58 @@
"log-name-pagelang": "Dnevnik spreminjanja jezika",
"log-description-pagelang": "Dnevnik sprememb jezika strani.",
"logentry-pagelang-pagelang": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} jezik strani $3 z jezika $4 na jezik $5.",
- "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
- "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code dir=\"ltr\">skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
+ "default-skin-not-found": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code dir=\"ltr\">skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
+ "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija, določena v <code dir=\"ltr\">$wgDefaultSkin</code> kot <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code dir=\"ltr\">skins/</code>.\n:* Prenesite tarballe posamezne kož z [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (omogočeno)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''onemogočeno''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''onemogočeno''')",
+ "mediastatistics": "Statistika predstavnosti",
+ "mediastatistics-summary": "Statistika o naloženih vrstah datotek. To vključuje samo najnovejše različice datotek. Stare in izbrisane različice niso vključene.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajta|$1 bajti|$1 bajtov}} ($2; $3 %)",
+ "mediastatistics-table-mimetype": "Vrsta MIME",
+ "mediastatistics-table-extensions": "Možne razširitve",
+ "mediastatistics-table-count": "Število datotek",
+ "mediastatistics-table-totalbytes": "Skupna velikost",
+ "mediastatistics-header-unknown": "Neznano",
+ "mediastatistics-header-bitmap": "Bitne slike",
+ "mediastatistics-header-drawing": "Risbe (vektorske slike)",
+ "mediastatistics-header-audio": "Zvok",
+ "mediastatistics-header-video": "Videoposnetki",
+ "mediastatistics-header-multimedia": "Obogatena predstavnost",
+ "mediastatistics-header-office": "Pisarna",
+ "mediastatistics-header-text": "Besedilno",
+ "mediastatistics-header-executable": "Izvedljive datoteke",
+ "mediastatistics-header-archive": "Stisnjene oblike",
+ "json-warn-trailing-comma": "Iz JSON-a smo odstranili $1 {{PLURAL:$1|končno vejico|končni vejici|končne vejice|končnih vejic}}",
+ "json-error-unknown": "Naleteli smo na težavo z JSON-om. Napaka: $1",
+ "json-error-depth": "Presegli smo največjo globino sklada",
+ "json-error-state-mismatch": "Neveljaven ali slabo oblikovan JSON",
+ "json-error-ctrl-char": "Napaka kontrolnega znaka; morda je nepravilno zakodiran",
+ "json-error-syntax": "Skladenjska napaka",
+ "json-error-utf8": "Nepravilno oblikovani znaki UTF-8; morda so nepravilno zakodirani",
+ "json-error-recursion": "En ali več rekurzivnih sklicev v vrednosti za zakodirati",
+ "json-error-inf-or-nan": "Ena ali več vrednosti NAN ali INF v vrednosti za zakodirati",
+ "json-error-unsupported-type": "Podana je bila vrsta, ki je ni mogoče zakodirati",
+ "headline-anchor-title": "Povezava na razdelek",
+ "special-characters-group-latin": "Latinica",
+ "special-characters-group-latinextended": "Razširjena latinica",
+ "special-characters-group-ipa": "Mednarodna fonetična abeceda (IPA)",
+ "special-characters-group-symbols": "Simboli",
+ "special-characters-group-greek": "Grški",
+ "special-characters-group-cyrillic": "Cirilica",
+ "special-characters-group-arabic": "Arabski",
+ "special-characters-group-arabicextended": "Razširjena arabščina",
+ "special-characters-group-persian": "Perzijski",
+ "special-characters-group-hebrew": "Hebrejski",
+ "special-characters-group-bangla": "Bengalščina",
+ "special-characters-group-tamil": "tamilščina",
+ "special-characters-group-telugu": "Telugijski",
+ "special-characters-group-sinhala": "Singalščina",
+ "special-characters-group-gujarati": "Gudžarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Tajski",
+ "special-characters-group-lao": "Laoški",
+ "special-characters-group-khmer": "Kmerski",
+ "special-characters-title-endash": "navaden pomišljaj",
+ "special-characters-title-emdash": "dolgi pomišljaj",
+ "special-characters-title-minus": "znak za minus"
}
diff --git a/languages/i18n/sli.json b/languages/i18n/sli.json
index 3c0729da..da013e86 100644
--- a/languages/i18n/sli.json
+++ b/languages/i18n/sli.json
@@ -524,7 +524,6 @@
"mergehistory-comment": "„[[:$1]]“ vereinigt noach „[[:$2]]“: $3",
"mergehistory-same-destination": "Ausgangs- und Zielseyte dirfa ne identisch sei",
"mergehistory-reason": "Begriendung:",
- "pagemerge-logentry": "vereinigte [[$1]] ei [[$2]] (Versionen bis $3)",
"revertmerge": "Vereinigung rieckgängig macha",
"mergelogpagetext": "Dies ies doas Logbuch dar vereinigta Versionsgeschichta.",
"history-title": "Versionsgeschichte vun „$1“",
@@ -561,7 +560,6 @@
"searchrelated": "verwandt",
"searchall": "olle",
"showingresults": "Hier {{PLURAL:$1|ies '''1''' Ergebnis|sein '''$1''' Ergebnisse}}, beginnend miet Nummer '''$2.'''",
- "showingresultsheader": "{{PLURAL:$5|Ergebnis '''$1''' vu '''$3'''|Ergebnisse '''$1–$2''' vu '''$3'''}} fier '''$4'''",
"search-nonefound": "Fier denne Sichoafroage wurden kenne Ergebnisse gefunda.",
"powersearch-ns": "Suche ei Noamasräuma:",
"powersearch-toggleall": "Olle",
@@ -892,7 +890,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Seytastatistik",
"statistics-header-edits": "Beoarbeetungsstatistik",
- "statistics-header-views": "Seytauffrufstatistik",
"statistics-header-hooks": "Andere Statistika",
"statistics-articles": "Inhaltsseyta",
"statistics-pages": "Seyta",
@@ -900,11 +897,8 @@
"statistics-files": "Huchgeladene Dateien",
"statistics-edits": "Seytabeoarbeetunga",
"statistics-edits-average": "Bearbeetunga pro Seite eim Durchschnitt",
- "statistics-views-total": "Seytaaufrufe gesamt",
- "statistics-views-peredit": "Seyta uffruffe pro Beoarbeetung",
"statistics-users": "Registrierte [[Special:ListUsers|Nutzer]]",
"statistics-users-active-desc": "Nutzer miet Beoarbeetunga {{PLURAL:$1|enn letzta 24 Stunden|enn vergangenen $1 Tagen}}",
- "statistics-mostpopular": "Meistbesichte Seyta",
"doubleredirects": "Doppelte Weiterleitunga",
"doubleredirectstext": "Diese Liste enthält Weiterleitunga, de uff wettere Wetterleitunga verlinka.\nJede Zeile enthält Links zu dar erschta und zweeta Wetterleitung suwie doas Ziel dar zweeta Wetterleitung, welches fier gewehnlich die gewünschte Zielseyte ies, uff de bereits de erschte Wetterleitung zeiga sullte.\n<del>Durchgestrichene</del> Einträge wurden bereits erledigt.",
"double-redirect-fixed-move": "doppelte Wetterleitung uffgelest: [[$1]] → [[$2]]",
@@ -927,7 +921,6 @@
"uncategorizedcategories": "Ne kategorisierte Kategorien",
"uncategorizedimages": "Ne kategorisierte Dateien",
"uncategorizedtemplates": "Ne kategorisierte Vurlagen",
- "popularpages": "Beliebteste Seyta",
"wantedcategories": "Nutzte, oaber ne oagelegte Kategorien",
"wantedpages": "Gewinschte Seyta",
"wantedfiles": "Fahlende Dateien",
@@ -968,7 +961,6 @@
"pager-older-n": "{{PLURAL:$1|vurheriger|vurherige $1}}",
"booksources": "ISBN-Suche",
"booksources-search-legend": "Suche noach Bezugsquella fier Bicher",
- "booksources-go": "Sucha",
"booksources-text": "Dies ies anne Liste miet Links zu Internetseyta, de neue und gebrauchte Bicher verkoofa. Durt koan is au wettere Informationen ieber de Bicher gahn. {{SITENAME}} ies miet kemm dieser Oabieter geschäftlich verbunda.",
"booksources-invalid-isbn": "Vermutlich ies de ISBN ungiltig.\nBitte priefe, ob korrekt vu dar Quelle iebertraga wurde.",
"speciallogtitlelabel": "Tittel:",
@@ -1044,7 +1036,7 @@
"wlheader-enotif": "Dar E-Mail-Benoachrichtigungsdienst ies aktiviert.",
"wlheader-showupdated": "Seyta miet noo ne gesehenen Änderunga waan '''fett''' dargestellt.",
"wlnote": "Is {{PLURAL:$1|folgt de letzte Änderung|folga de letzta '''$1''' Änderunga}} dar letzta {{PLURAL:$2|Stunde|'''$2''' Stunda}}.",
- "wlshowlast": "Zeige de Änneronga dar letzta $1 Stonda, $2 Taage oder $3.",
+ "wlshowlast": "Zeige de Änneronga dar letzta $1 Stonda, $2 Taage oder .",
"watchlist-options": "Oazeegeoptiona",
"watching": "Beobachta …",
"unwatching": "Nee beobachta …",
@@ -1343,7 +1335,6 @@
"thumbnail_image-type": "Bildtyp ne understützt",
"import": "Seyta importiern",
"import-interwiki-text": "Wähle a Wiki und anne Seite zum Importieren aus.\nDe Versionsdaten und Nutzernoama bleiba dabei erhaala.\nOlle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] protokolliert.",
- "import-interwiki-source": "Quell-Wiki/-Seite:",
"import-interwiki-history": "Olle Versionen dieser Seite importieren",
"import-interwiki-templates": "Olle Vurloaga einschließen",
"import-interwiki-namespace": "Zielnoamasraum:",
@@ -1588,7 +1579,6 @@
"exif-sharpness-2": "Stork",
"exif-subjectdistancerange-0": "Unbekennt",
"exif-gpsstatus-v": "Interoperabilität vu Messunga",
- "watchlistall2": "olle",
"namespacesall": "olle",
"monthsall": "olle",
"confirmemail": "E-Mail-Atresse bestätiga (Authentifizierung)",
@@ -1687,5 +1677,6 @@
"htmlform-reset": "Änderunga rickgängig macha",
"htmlform-selectorother-other": "Ondere",
"revdelete-restricted": "Einschränkungen gelten au fier Administratorn",
- "revdelete-unrestricted": "Einschränkungen fier Administratorn uffgehobn"
+ "revdelete-unrestricted": "Einschränkungen fier Administratorn uffgehobn",
+ "revdelete-summary": "Zusommafoassungskommentar"
}
diff --git a/languages/i18n/sm.json b/languages/i18n/sm.json
index 33411fba..3f9eaf3d 100644
--- a/languages/i18n/sm.json
+++ b/languages/i18n/sm.json
@@ -1,153 +1,151 @@
{
- "@metadata": {
- "authors": [
- "sm.wikipedia.org sysops"
- ]
- },
- "sunday": "Aso sa",
- "monday": "Aso-gafua",
- "tuesday": "‘O le aso lua",
- "wednesday": "Aso lulu",
- "thursday": "Aso totofi",
- "friday": "Aso falaile",
- "saturday": "Aso to‘ona‘i",
- "sun": "Aso sa",
- "mon": "Aso gafua",
- "wed": "Aso lulu",
- "fri": "Aso falaile",
- "january": "Ianuari",
- "february": "Fepuari",
- "march": "Mati",
- "april": "Aperila",
- "may_long": "Me",
- "june": "Iuni",
- "july": "Iulai",
- "august": "Aokuso",
- "september": "Setema",
- "october": "Oketopa",
- "november": "Novema",
- "december": "Tesema",
- "january-gen": "Ianuari",
- "february-gen": "Fepuari",
- "march-gen": "Mati",
- "april-gen": "Aperila",
- "may-gen": "Me",
- "june-gen": "Iuni",
- "july-gen": "Iulai",
- "august-gen": "Aokuso",
- "september-gen": "Setema",
- "october-gen": "Oketopa",
- "november-gen": "Novema",
- "december-gen": "Tesema",
- "jan": "Ianuari",
- "feb": "Fepuari",
- "mar": "Mati",
- "apr": "Aperila",
- "may": "Me",
- "jun": "Iuni",
- "jul": "Iulai",
- "aug": "Aokuso",
- "sep": "Setema",
- "oct": "Oketopa",
- "nov": "Novema",
- "dec": "Tesema",
- "cancel": "Toe tape",
- "mytalk": "La'u talanoa",
- "navigation": "Ulifolau",
- "help": "Fesoasoani",
- "search": "Su'e",
- "searchbutton": "Su'e",
- "go": "Alu",
- "searcharticle": "Alu",
- "history_short": "Tala fa'asolopito",
- "printableversion": "Kopi e lolomi",
- "permalink": "So'otaga tumau",
- "print": "Lolomi",
- "edit": "Teuteu",
- "delete": "Tape",
- "protect": "Puipui",
- "unprotect": "'Aua le Puipuia",
- "specialpage": "Itulau fa'apitoa",
- "talk": "Talanoaga",
- "toolbox": "Meafaigaluega",
- "otherlanguages": "I isi gagana",
- "jumptonavigation": "Ulifolau",
- "jumptosearch": "Su'e",
- "currentevents": "Tala Fou",
- "currentevents-url": "Project:Tala Fou",
- "edithelp": "Fesoasoani e teuteu",
- "mainpage": "Itulau Muamua",
- "mainpage-description": "Itulau Muamua",
- "portal": "Vaega mo Tagata Lautele",
- "portal-url": "Project:Vaega mo Tagata Lautele",
- "youhavenewmessages": "'Ua iai lau $1 ($2).",
- "youhavenewmessagesmulti": "'Ua iai au fe'au fou i le $1",
- "editsection": "Teuteu",
- "editold": "Teuteu",
- "nstab-main": "Tusitusiga",
- "nstab-user": "Itulau a 'oe",
- "nstab-mediawiki": "Fe'au",
- "yourname": "Igoa o le tagata fa'aaoga",
- "yourpassword": "'Upu ulufale",
- "yourpasswordagain": "Toe lolomi 'upu ulufale",
- "login": "Fa'aola",
- "userlogin": "Fa'aola / Lesitala le ulufale",
- "logout": "Tape",
- "userlogout": "Tape",
- "notloggedin": "Le'i fa'aolaina",
- "nologinlink": "Lesitala le ulufale",
- "createaccount": "Lesitala le ulufale",
- "gotaccountlink": "Fa'aola",
- "summary": "'Oto'otoga:",
- "minoredit": "'O se teuteuga la'itiiti lenei",
- "watchthis": "Matau lenei itulau",
- "savearticle": "Sefe le itulau",
- "showpreview": "Fa'aali teuteuga",
- "showdiff": "Fa'aali suiga",
- "loginreqlink": "Fa'aola",
- "mypreferences": "Mea 'ou te fiafia i ai",
- "searchresultshead": "Su'e",
- "youremail": "'Imeli:",
- "username": "Igoa o le tagata fa'aaoga:",
- "email": "'Imeli",
- "group-all": "(mea 'uma)",
- "recentchanges": "Suiga talu ai nei",
- "hist": "Tala fa'asolopito",
- "recentchangeslinked": "Suiga e a'afia ai",
- "upload": "Si'i mai le faila",
- "uploadbtn": "Si'i mai le faila",
- "uploadnologin": "Le'i fa'aolaina",
- "filedesc": "'Oto'otoga",
- "fileuploadsummary": "'Oto'otoga:",
- "watchthisupload": "Matau lenei itulau",
- "randompage": "Itulau le fa'ailogaina",
- "newpages-username": "Igoa o le tagata fa'aaoga:",
- "move": "Si'itia",
- "booksources-go": "Alu",
- "allpagessubmit": "Alu",
- "emailuser": "'Imeli mai le tagata lenei",
- "emailmessage": "Fe'au",
- "watchlist": "Lo'u lisi va'ava'aia",
- "watchnologin": "Le'i fa'aolaina",
- "watch": "Va'ai",
- "watchthispage": "Matau lenei itulau",
- "restriction-move": "Si'itia",
- "undelete-search-submit": "Su'e",
- "contributions": "Sao a tagata fa'aaoga",
- "mycontris": "'O la'u saoga",
- "whatlinkshere": "Nofoaga e soso'o mai",
- "move-page-legend": "Si'i le itulau",
- "movearticle": "Si'i le itulau",
- "newtitle": "'I le ulutala fou",
- "move-watch": "Matau lenei itulau",
- "movepagebtn": "Si'i le itulau",
- "movetalk": "Sui le itulau e tau i ai",
- "movereason": "Mafua'aga",
- "allmessagesname": "Igoa",
- "ilsubmit": "Su'e",
- "watchlistall2": "mea 'uma",
- "namespacesall": "mea 'uma",
- "imgmultigo": "Alu!",
- "table_pager_limit_submit": "Alu",
- "specialpages": "Itulau fa'apitoa"
+ "@metadata": {
+ "authors": [
+ "sm.wikipedia.org sysops"
+ ]
+ },
+ "sunday": "Aso sa",
+ "monday": "Aso-gafua",
+ "tuesday": "‘O le aso lua",
+ "wednesday": "Aso lulu",
+ "thursday": "Aso totofi",
+ "friday": "Aso falaile",
+ "saturday": "Aso to‘ona‘i",
+ "sun": "Aso sa",
+ "mon": "Aso gafua",
+ "wed": "Aso lulu",
+ "fri": "Aso falaile",
+ "january": "Ianuari",
+ "february": "Fepuari",
+ "march": "Mati",
+ "april": "Aperila",
+ "may_long": "Me",
+ "june": "Iuni",
+ "july": "Iulai",
+ "august": "Aokuso",
+ "september": "Setema",
+ "october": "Oketopa",
+ "november": "Novema",
+ "december": "Tesema",
+ "january-gen": "Ianuari",
+ "february-gen": "Fepuari",
+ "march-gen": "Mati",
+ "april-gen": "Aperila",
+ "may-gen": "Me",
+ "june-gen": "Iuni",
+ "july-gen": "Iulai",
+ "august-gen": "Aokuso",
+ "september-gen": "Setema",
+ "october-gen": "Oketopa",
+ "november-gen": "Novema",
+ "december-gen": "Tesema",
+ "jan": "Ianuari",
+ "feb": "Fepuari",
+ "mar": "Mati",
+ "apr": "Aperila",
+ "may": "Me",
+ "jun": "Iuni",
+ "jul": "Iulai",
+ "aug": "Aokuso",
+ "sep": "Setema",
+ "oct": "Oketopa",
+ "nov": "Novema",
+ "dec": "Tesema",
+ "cancel": "Toe tape",
+ "mytalk": "La'u talanoa",
+ "navigation": "Ulifolau",
+ "help": "Fesoasoani",
+ "search": "Su'e",
+ "searchbutton": "Su'e",
+ "go": "Alu",
+ "searcharticle": "Alu",
+ "history_short": "Tala fa'asolopito",
+ "printableversion": "Kopi e lolomi",
+ "permalink": "So'otaga tumau",
+ "print": "Lolomi",
+ "edit": "Teuteu",
+ "delete": "Tape",
+ "protect": "Puipui",
+ "unprotect": "'Aua le Puipuia",
+ "specialpage": "Itulau fa'apitoa",
+ "talk": "Talanoaga",
+ "toolbox": "Meafaigaluega",
+ "otherlanguages": "I isi gagana",
+ "jumptonavigation": "Ulifolau",
+ "jumptosearch": "Su'e",
+ "currentevents": "Tala Fou",
+ "currentevents-url": "Project:Tala Fou",
+ "edithelp": "Fesoasoani e teuteu",
+ "mainpage": "Itulau Muamua",
+ "mainpage-description": "Itulau Muamua",
+ "portal": "Vaega mo Tagata Lautele",
+ "portal-url": "Project:Vaega mo Tagata Lautele",
+ "youhavenewmessages": "'Ua iai lau $1 ($2).",
+ "youhavenewmessagesmulti": "'Ua iai au fe'au fou i le $1",
+ "editsection": "Teuteu",
+ "editold": "Teuteu",
+ "nstab-main": "Tusitusiga",
+ "nstab-user": "Itulau a 'oe",
+ "nstab-mediawiki": "Fe'au",
+ "yourname": "Igoa o le tagata fa'aaoga",
+ "yourpassword": "'Upu ulufale",
+ "yourpasswordagain": "Toe lolomi 'upu ulufale",
+ "login": "Fa'aola",
+ "userlogin": "Fa'aola / Lesitala le ulufale",
+ "logout": "Tape",
+ "userlogout": "Tape",
+ "notloggedin": "Le'i fa'aolaina",
+ "nologinlink": "Lesitala le ulufale",
+ "createaccount": "Lesitala le ulufale",
+ "gotaccountlink": "Fa'aola",
+ "summary": "'Oto'otoga:",
+ "minoredit": "'O se teuteuga la'itiiti lenei",
+ "watchthis": "Matau lenei itulau",
+ "savearticle": "Sefe le itulau",
+ "showpreview": "Fa'aali teuteuga",
+ "showdiff": "Fa'aali suiga",
+ "loginreqlink": "Fa'aola",
+ "mypreferences": "Mea 'ou te fiafia i ai",
+ "searchresultshead": "Su'e",
+ "youremail": "'Imeli:",
+ "username": "Igoa o le tagata fa'aaoga:",
+ "email": "'Imeli",
+ "group-all": "(mea 'uma)",
+ "recentchanges": "Suiga talu ai nei",
+ "hist": "Tala fa'asolopito",
+ "recentchangeslinked": "Suiga e a'afia ai",
+ "upload": "Si'i mai le faila",
+ "uploadbtn": "Si'i mai le faila",
+ "uploadnologin": "Le'i fa'aolaina",
+ "filedesc": "'Oto'otoga",
+ "fileuploadsummary": "'Oto'otoga:",
+ "watchthisupload": "Matau lenei itulau",
+ "randompage": "Itulau le fa'ailogaina",
+ "newpages-username": "Igoa o le tagata fa'aaoga:",
+ "move": "Si'itia",
+ "allpagessubmit": "Alu",
+ "emailuser": "'Imeli mai le tagata lenei",
+ "emailmessage": "Fe'au",
+ "watchlist": "Lo'u lisi va'ava'aia",
+ "watchnologin": "Le'i fa'aolaina",
+ "watch": "Va'ai",
+ "watchthispage": "Matau lenei itulau",
+ "restriction-move": "Si'itia",
+ "undelete-search-submit": "Su'e",
+ "contributions": "Sao a tagata fa'aaoga",
+ "mycontris": "'O la'u saoga",
+ "whatlinkshere": "Nofoaga e soso'o mai",
+ "move-page-legend": "Si'i le itulau",
+ "movearticle": "Si'i le itulau",
+ "newtitle": "'I le ulutala fou",
+ "move-watch": "Matau lenei itulau",
+ "movepagebtn": "Si'i le itulau",
+ "movetalk": "Sui le itulau e tau i ai",
+ "movereason": "Mafua'aga",
+ "allmessagesname": "Igoa",
+ "ilsubmit": "Su'e",
+ "namespacesall": "mea 'uma",
+ "imgmultigo": "Alu!",
+ "table_pager_limit_submit": "Alu",
+ "specialpages": "Itulau fa'apitoa"
}
diff --git a/languages/i18n/sma.json b/languages/i18n/sma.json
index 1a8edefd..4d477e90 100644
--- a/languages/i18n/sma.json
+++ b/languages/i18n/sma.json
@@ -1,648 +1,642 @@
{
- "@metadata": {
- "authors": [
- "Andrijko Z.",
- "Bïerne",
- "M.M.S.",
- "Urhixidur"
- ]
- },
- "tog-showtoolbar": "Dïrregesïeve vuesehth (JavaScript)",
- "tog-fancysig": "Saajpe singnatuvreh (namhtah jïjtsistie lïenghke)",
- "underline-always": "Iktesth",
- "underline-never": "Aaltere",
- "sunday": "Aejlege",
- "monday": "Måanta",
- "tuesday": "Däjsta",
- "wednesday": "Gaske-våhkoe",
- "thursday": "Dåarsta",
- "friday": "Bearjedh",
- "saturday": "Laavadahke",
- "sun": "Aej",
- "mon": "Måa",
- "tue": "Däj",
- "wed": "Gas",
- "thu": "Dåa",
- "fri": "Bea",
- "sat": "Laa",
- "january": "tsiengele",
- "february": "goevte",
- "march": "njoktje",
- "april": "Voerhtje",
- "may_long": "Suehpede",
- "june": "Ruffie",
- "july": "Snjaltje",
- "august": "Mïetske",
- "september": "Gaekere",
- "october": "Golke",
- "november": "Rahka",
- "december": "Goeve",
- "january-gen": "Tsiengele",
- "february-gen": "Goevte",
- "march-gen": "Njoktje",
- "april-gen": "Voerhtje",
- "may-gen": "Suehpede",
- "june-gen": "Ruffie",
- "july-gen": "Snjaltje",
- "august-gen": "Mïetske",
- "september-gen": "Gaekere",
- "october-gen": "Golke",
- "november-gen": "Rahka",
- "december-gen": "Goeve",
- "jan": "Tsi",
- "feb": "Goe",
- "mar": "Njo",
- "apr": "Voe",
- "may": "Sue",
- "jun": "Ruf",
- "jul": "Snj",
- "aug": "Mïe",
- "sep": "Gae",
- "oct": "Gol",
- "nov": "Rah",
- "dec": "Goe",
- "pagecategories": "{{PLURAL:$1|Kategorije|Kategorijeh}}",
- "category_header": "Bielie sïjse kategorije \"$1\"",
- "subcategories": "Subkategorijeh",
- "category-media-header": "Guvvie sïjse karegorije \"$1\"",
- "category-empty": "''Dïhte kategorije sisvege ijje bielieh jallh baalkah.''",
- "listingcontinuesabbrev": "jåar.",
- "about": "Bïjre",
- "article": "Sisvege bielie",
- "newwindow": "(geehpehtidh sïjse orre klaase)",
- "cancel": "Orrijidh",
- "moredotdotdot": "Jienebe...",
- "mypage": "Mov bielie",
- "mytalk": "Mov dïjveldidh",
- "anontalk": "Dïjveldidh ihke dïhte IP",
- "navigation": "Navigasjovne",
- "and": "&#32;jih",
- "qbfind": "Gaavnedh",
- "qbedit": "Värrhtoedimmie",
- "qbpageoptions": "Dïhte bielie",
- "qbmyoptions": "Mov bielieh",
- "faq": "FAQ",
- "faqpage": "Project:FAQ",
- "errorpagetitle": "Båajhtode",
- "returnto": "Bååstide gåajkoe $1.",
- "tagline": "{{SITENAME}}sta",
- "help": "Viehkie",
- "search": "Ohtsedh",
- "searchbutton": "Ohtsedh",
- "go": "Vaadtsa",
- "searcharticle": "Vaadtsa",
- "history": "Histovrije",
- "history_short": "Histovrije",
- "printableversion": "Tjaelije bielie",
- "permalink": "Permanente lïenghke",
- "print": "Tjaeledh olkese",
- "edit": "Sjiehtedh",
- "editthispage": "Värrhtoedimmie dïhte bielie",
- "delete": "Tjåegkedh",
- "protect": "Vaarjelidh",
- "protectthispage": "Vaarjelidh dïhte bielie",
- "newpage": "Orre bielie",
- "talkpage": "Dïjveldidh dïhte bielie",
- "talkpagelinktext": "Digkiedimmie",
- "specialpage": "Joekoelaakan Bielie",
- "personaltools": "Persjovne dïrregeh",
- "articlepage": "Vuesehte artihkle bielie",
- "talk": "Dïjveldeme",
- "views": "Vuesehth",
- "toolbox": "Dïrregeborhtje",
- "userpage": "Vuesehte nuhtjienbielie",
- "projectpage": "Vuesehte Wikipedijebielie",
- "imagepage": "Vuesehte guvvie bielie",
- "templatepage": "Vuesehte maale bielie",
- "viewhelppage": "Vuesehte viehkie bielie",
- "categorypage": "Vuesehte kategorije bielie",
- "viewtalkpage": "Vuesehte dïjveldidh",
- "otherlanguages": "jeatjebh gïele",
- "redirectedfrom": "(Bïjre-dirisjovne raejeste $1)",
- "redirectpagesub": "Bïjre-dirisjovne bielie",
- "protectedpage": "Vaarjelidh bielie",
- "jumpto": "Vaadtsa gåajkoe:",
- "jumptonavigation": "navigasjovne",
- "jumptosearch": "ohtsedh",
- "aboutsite": "{{SITENAME}}en bïjre",
- "aboutpage": "Project:Bïjre",
- "copyrightpage": "{{ns:project}}:Bäjjesereaktah",
- "currentevents": "Daaletje deahpadimmieh",
- "currentevents-url": "Project:Daaletje deahpadimmieh",
- "disclaimers": "Friijavuohte vastideamis",
- "disclaimerpage": "Project:Bäjjesereaktah",
- "edithelp": "Sjiehtedimmie viehkie",
- "mainpage": "Aalkoebielie",
- "mainpage-description": "Aalkoebielie",
- "portal": "Meatan portaale",
- "portal-url": "Project:Meatan portaale",
- "privacy": "Privaate pålisy",
- "privacypage": "Project:Privaate pålisy",
- "retrievedfrom": "Raejeste \"$1\" vïedtjeme",
- "youhavenewmessages": "Datne åtna $1 ($2).",
- "editsection": "sjïehtedh",
- "editold": "värrhtoedimmie",
- "editsectionhint": "Sektiovne sjiehtedh: $1",
- "toc": "Sisvege",
- "showtoc": "vuesehte",
- "hidetoc": "gaptjedh",
- "viewdeleted": "Vuesehte $1?",
- "site-rss-feed": "$1 RSS Feed",
- "site-atom-feed": "$1 Atom Feed",
- "page-rss-feed": "\"$1\" RSS Feed",
- "page-atom-feed": "\"$1\" Atom Feed",
- "nstab-main": "Bielie",
- "nstab-user": "Nuhtjien bielie",
- "nstab-media": "Guvvie",
- "nstab-special": "Joekoelaakan",
- "nstab-project": "Prosjekte bielie",
- "nstab-image": "Baalka",
- "nstab-mediawiki": "MediaWiki",
- "nstab-template": "Maale",
- "nstab-help": "Viehke bielie",
- "nstab-category": "Kategorije",
- "error": "Båajhtode",
- "databaseerror": "Daatabaase båajhtode",
- "readonly": "Daatabaase steegkeldahkesne",
- "internalerror": "Sjisjnjie båajhtede",
- "internalerror_info": "Sjisjnjie båajhtede: $1",
- "badtitle": "Gååre nomme",
- "badtitletext": "Dïhte bielietiitele lea nov sån ijje luhpede, bielie lea gåaroes, jallh lea bielie gåarhmede lïenghke gåajkoe.",
- "viewsource": "Vuesehte tjaalege",
- "viewsourcetext": "Dov dorje vuesehte jih kåpieerae gaaltjie dejstie dïhte bielie:",
- "yourname": "Nuhtjiennomme:",
- "yourpassword": "Loevesbaakoe:",
- "remembermypassword": "Måjhtije mov loggesïjse nille dïhte daatovre (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "yourdomainname": "Dov domäne:",
- "login": "Logge sïjse",
- "nav-login-createaccount": "Logge sïjse / skaepede nuhtjien",
- "loginprompt": "Dov galkedh luhpede cookies ihke logge sïjse nille {{SITENAME}}.",
- "userlogin": "Logge sïjse / skaepede nuhtjien",
- "logout": "Logge olkese",
- "userlogout": "Logge ålkone",
- "nologin": "Lea dov ijje registreered? '''$1'''.",
- "nologinlink": "Skaepede nuhtjien",
- "createaccount": "Skaepede nuhtjien",
- "gotaccount": "Åtna dov joe nuhtjiennomme? '''$1'''.",
- "gotaccountlink": "Logge sïjse",
- "createaccountmail": "meatan e-påaste",
- "loginerror": "Logge sïjse båajhtode",
- "loginsuccesstitle": "Dov lea daelie sïjse logge",
- "loginsuccess": "'''Dov lea daelie sïjselogge nille {{SITENAME}} goh \"$1\".'''",
- "nosuchuser": "Dïhte gååvnese ijje nuhtjien goh nomme \"$1\". Gïehtjedidh dov baakoehtidh, jallh skaepede orre nuhtjien.",
- "nosuchusershort": "Dïhte gååvnese ijje nuhtjien goh nomme \"$1\". Gïehtjedidh baakoehtidh.",
- "nouserspecified": "Dov galkedh tjaeledh nuhtjiennomme.",
- "wrongpassword": "Loevesbaakoe lea gåarhmede. Vuejnedh vihth.",
- "wrongpasswordempty": "Loevesbaakoe lea gåaroes. Vuejnedh vihth.",
- "passwordtooshort": "Dov loevesbaakoe lea ov-jiltighe jallh ihke åenehks. Dïhte galkedh åtna unnemes $1 vähta jih sjädta jeatjebe raejeste dov nuhtjiennomme.",
- "mailmypassword": "E-påaste loevesbaakoe",
- "passwordremindertitle": "Orre loevesbaakoe ihke {{SITENAME}}",
- "noemail": "Dïhte lea ijje e-påaste tjaalesijjie registreeredh ihke nuhtjien \"$1\".",
- "passwordsent": "Orre loevesbaakoe åtna sjädta seedtie gåajkoe e-påaste tjaalesijjie\nregistreered ihke \"$1\".\nGïemhpes logge sïjse vihth männgan datne åtna låhka dïhte.",
- "accountcreated": "Nuhtjien skaepede",
- "loginlanguagelabel": "Gïele: $1",
- "changepassword": "Värrhtoedimmie loevesbaakoe",
- "oldpassword": "Båeries loevesbaakoe:",
- "newpassword": "Orre loevesbaakoe:",
- "retypenew": "Odhasit orre loevesbaakoe:",
- "bold_sample": "Buajtehks tjaalege",
- "bold_tip": "Buajtehks tjaalege",
- "italic_sample": "Kursiive tjaalege",
- "italic_tip": "Kursiive tjaalege",
- "link_sample": "Lïenghke tiitele",
- "link_tip": "Sjisjnjie lïenghke",
- "extlink_sample": "http://www.example.com lïenghke tiitele",
- "extlink_tip": "Ehkstäärne lïenghke (måjhtajidh http:// prefihkse)",
- "headline_sample": "Rubriike tjaalege",
- "headline_tip": "Daltese 2 rubriike",
- "nowiki_sample": "Bïejedh ijje-hammode tjaalege daesnie",
- "nowiki_tip": "Rievdde wikïhammode",
- "image_tip": "Lååtje guvvie",
- "media_tip": "Meedia baalka lïenghke",
- "sig_tip": "Dov signatuvre meatan tïjjestäämpele",
- "hr_tip": "Horisontele sïeve (nuhtjie bïhteles-laakan)",
- "summary": "Tjohkehtehteme:",
- "subject": "Ïebne/rubriike:",
- "minoredit": "Dïhte lea ohtje värrhtoedimmie",
- "watchthis": "Sïektjedh dïhte bielie",
- "savearticle": "Spååredh bielie",
- "preview": "Åvte-vuesiehtidh",
- "showpreview": "Vuesehte åvte-vuesiehtidh",
- "showdiff": "Vuesehte värrhtoedimmie",
- "anoneditwarning": "'''Vaaroehtidh:''' Dov lea ijje logge sïjse. Dov IP tjaalesijjie båetedh spååredh sïjse dïhte bielie värrhtoedimmie histovrije.",
- "summary-preview": "Tjohkehtehteme åvte-vuesiehtidh:",
- "loginreqlink": "logge sïjse",
- "loginreqpagetext": "Dov galkedh $1 ihke vuesehte jeatjebh bielieh.",
- "accmailtitle": "Loevesbaakoe seedtie.",
- "accmailtext": "Loevesbaakoe ihke ”$1” utnedh seedtedh gåajkoe $2.",
- "newarticle": "(Orre)",
- "noarticletext": "Dïhte lea daelie ijje tjaalege sïjse dïhte bielie, dov dorje [[Special:Search/{{PAGENAME}}|ohtsedh ihke dïhte bielie nomme]] sïjse jeatjebh bielieh jallh [{{fullurl:{{FULLPAGENAME}}|action=edit}} värrhtoedimmie dïhte bielie].",
- "usercssyoucanpreview": "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre CSS åvte spååredh.",
- "userjsyoucanpreview": "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre JS åvte spååredh.",
- "updated": "(Orrestahteme)",
- "note": "'''Galtege:'''",
- "previewnote": "'''Dïhte lea aktegh åvte-vuesiehtidh; värrhtoedimmieh ånta ijje sjïdtedh spååredh!'''",
- "editing": "Sjiehtedimmie $1",
- "editingsection": "Värrhtoedimmie $1 (sektiovne)",
- "yourtext": "Dov tjaalege",
- "copyrightwarning": "Tjaeleste gaajhke värrhtoedimmieh gåajkoe {{SITENAME}} lea ahte gïehtjele goh maam buektedh nuelesne $2 (vuajna $1 ihke detaaljeh). Bïjre datne ijje sïjhtedh dov tjaalege galka värrhtoedimmieh jallh kåpieeres minngesne jeatjebh daerpies voete, galka datne ijje tjaala daesnie.<br />\nDatne luhpede mijjieh aaj datne tjaala tjaalege jïjtje, jallh kåpieeret raejeste gaaltjie goh ijje vaarjele dejstie bäjjesereaktah, jallh plïerehke.<br />\n'''LISSEHTE IJJE OLKESE BÄJJESEREAKTAHVAARJELE ÏEBNE NAMHTAH LUHPIE!'''",
- "templatesused": "{{PLURAL:$1|Maal|Maler}}Maaleh nuhtjie nille dïhte bielie:",
- "templatesusedpreview": "{{PLURAL:$1|Maal|Maaleh}} nuhtjie sïjse dïhte åvte-vuesiehtidh:",
- "template-protected": "(vaarjeleme)",
- "template-semiprotected": "(lehkie-vaarjelidh)",
- "nocreatetext": "{{SITENAME}} åtna gaertjiedidh nuepieh ahte skaepede orre bielieh.\nDov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge sïjse jallh skaepede nuhtjien]].",
- "viewpagelogs": "Vuesehte loggeh ihke dïhte bielie",
- "currentrev": "Daaletje gïehtjedamme",
- "revisionasof": "Gïehtjedamme ihke $1",
- "revision-info": "Gïehtjedamme raejeste dïhte $1; $2",
- "previousrevision": "←Båarasåabpoe gïehtjedamme",
- "nextrevision": "Minngebe gïehtjedamme→",
- "currentrevisionlink": "Daaletje gïehtjedamme",
- "cur": "daaletje",
- "next": "minngebe",
- "last": "minngemes",
- "page_first": "voestegh",
- "page_last": "minngemes",
- "histfirst": "Aareh",
- "histlast": "Minngemes",
- "historysize": "({{PLURAL:$1|1 byte|$1 byteh}})",
- "history-feed-title": "Gïehtjedamme histovrije",
- "history-feed-item-nocomment": "$1 dïhte $2",
- "mergehistory-from": "Gaaltjie bielie:",
- "history-title": "Gïehtjedamme histovrije ihke \"$1\"",
- "lineno": "Sïeve $1:",
- "compareselectedversions": "Mohtedidh veeljeme låhkoeh",
- "editundo": "ov-darjodh",
- "searchresults": "Ohtsedh resultaateh",
- "prevn": "övtebe {{PLURAL:$1|$1}}",
- "nextn": "minngeben {{PLURAL:$1|$1}}",
- "viewprevnext": "Vuesehth ($1 {{int:pipe-separator}} $2) ($3)",
- "preferences": "Sïjsestäälningeh",
- "mypreferences": "Mov sïjsesäälningeh",
- "skin-preview": "Åvte-vuesiehtidh",
- "saveprefs": "Spååredh",
- "searchresultshead": "Ohtsedh",
- "timezonelegend": "Tïjjedajve",
- "localtime": "Byjrehks tïjje",
- "youremail": "E-påaste:",
- "username": "Nuhtjiennomme:",
- "uid": "Nuhtjien ID:",
- "yourrealname": "Ov nomme:",
- "yourlanguage": "Gïele:",
- "yournick": "Nuhjiennomme:",
- "email": "E-påaste",
- "prefs-help-realname": "Ov nomme galkedh ijje tjaeledh. Bïjre datne veeljeme tjaeledh dov ov nomme, båetedh dïhte nuhtjie ihke tjaeledh dov barkoe.",
- "editinguser": "Värrhtoedimmie nuhtjien '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
- "group": "Tjïerte:",
- "group-bot": "Jïjtjesvïhtjije",
- "group-sysop": "Reeredh",
- "group-bot-member": "Jïjtjesvïhtjije",
- "group-sysop-member": "Reerien",
- "grouppage-sysop": "{{ns:project}}:Reeredh",
- "rightslog": "Nuhtjienreaktah logge",
- "nchanges": "$1 {{PLURAL:$1|värrhtoedimmie|värrhtoedimmieh}}",
- "recentchanges": "Männgan värrhtoedimmieh",
- "recentchanges-feed-description": "Dåeriedidh männgan värrhtoedimmie sïjse wiki meatan dïhte feed.",
- "rcnotefrom": "Vuelelen vuesehte dah männgan '''$1''' värrhtoedimmieh männgan '''$2'''.",
- "rclistfrom": "Vuesehte orre värrhtoedimmieh aelkedh raejeste $1",
- "rcshowhideminor": "$1 ohtje värrhtoedimmie",
- "rcshowhidebots": "$1 jïjtjesvïhtjijeh",
- "rcshowhideliu": "$1 värrhtoedimmie dejstie sïjselogge nuhtjienh",
- "rcshowhideanons": "$1 anonyyme nuhtjienh",
- "rcshowhidepatr": "$1 dååhkasjehtedh värrhtoedimmieh",
- "rcshowhidemine": "$1 mov värrhtoedimmieh",
- "rclinks": "Vuesehte männgan $1 värrhtoedimmieh nuelesne männgan $2 biejjieh<br />$3",
- "diff": "joekehts",
- "hist": "hist",
- "hide": "Gaptjedh",
- "show": "Vuesehte",
- "minoreditletter": "u",
- "newpageletter": "O",
- "boteditletter": "j",
- "recentchangeslinked": "Värrhtoedimmieh nille krïense bielieh",
- "recentchangeslinked-feed": "Värrhtoedimmieh nille krïense bielieh",
- "recentchangeslinked-toolbox": "Värrhtoedimmieh nille krïense bielieh",
- "recentchangeslinked-title": "Värrhtoedimmie laktaseaddji gåajkoe \"$1\"",
- "recentchangeslinked-summary": "Dïhte joekoelaakan bielie lästoe dah minngemes värrhtoedimmieh nille bielieh goh lea lïenghke. Bielieh [[Special:Watchlist|nille dov]] sïektjedhlästoe lea '''buajtehks'''.",
- "upload": "Sadde guvvie",
- "uploadbtn": "Sadde baalka",
- "uploadlogpage": "Sadde logge",
- "filename": "Guvvienomme",
- "filesource": "Gaaltjie",
- "savefile": "Spååredh guvvie",
- "uploadedimage": "sadde \"[[$1]]\"",
- "uploadvirus": "Guvvie tjeekehdidh viirus! Bïevnesh: $1",
- "sourcefilename": "Gaaltjie guvvienomme",
- "upload-file-error": "Sjisjnjie båajhtode",
- "license": "Liseense",
- "license-header": "Liseense",
- "listfiles_search_for": "Ohtsedh ihke guvvie nomme:",
- "imgfile": "guvvie",
- "listfiles": "Guvvie lästoe",
- "listfiles_name": "Nomme",
- "listfiles_user": "Nuhtjien",
- "listfiles_size": "Stoerre",
- "file-anchor-link": "Baalka",
- "filehist": "Baalka histovrije",
- "filehist-help": "Diedtedh nille biejjie ihke vuajna man baalkan lij bealese dïhte tïjje.",
- "filehist-current": "daaletje",
- "filehist-datetime": "Biejjie/Tïjje",
- "filehist-user": "Nuhtjien",
- "filehist-dimensions": "Dimisjovneh",
- "filehist-filesize": "Guvvie stoerre",
- "filehist-comment": "Lahtestimmie",
- "imagelinks": "Lïenghkeh",
- "linkstoimage": "Tjuovvovasj {{PLURAL:$1|side|$1 sider}} bielieh lïenghkeh gåajkoe dïhte baalka:",
- "nolinkstoimage": "Dïhte lea ijje bielieh goh nuhtjie dïhte baalka.",
- "sharedupload": "Dïhte baalka lea $1 sadde goh juaka jih dorje sjädta nuhtjie dejstie jeatjebh prosjekte.",
- "uploadnewversion-linktext": "Sadde orre låhkoe dejstie dïhte baalka",
- "mimesearch": "MIME ohtsedh",
- "mimetype": "MIME vuekie:",
- "listredirects": "Lästoe bïjre-dirisjovneh",
- "unusedtemplates": "Ov-nuhtjie maaleh",
- "unusedtemplateswlh": "jeatjebh lïenghkeh",
- "randompage": "Summal bielie",
- "randomredirect": "Summal odhasitstivren",
- "statistics": "Statistiike",
- "statistics-header-users": "Nuhtjien statistiike",
- "doubleredirects": "Guektien-gïerth bïjre-dirisjovneh",
- "brokenredirects": "Earjohks bïrje-dirisjovneh",
- "brokenredirects-edit": "(värrhtoedimmie)",
- "withoutinterwiki": "Bielieh namhtah gïele lïenghkeh",
- "fewestrevisions": "Bielieh meatan dah unnebes gïehtjedamme",
- "nbytes": "$1 {{PLURAL:$1|byte|byteh}}",
- "ncategories": "$1 {{PLURAL:$1|kategorije|kategorijeh}}",
- "nlinks": "$1 {{PLURAL:$1|lïenghke|lïenghkeh}}",
- "nmembers": "$1 {{PLURAL:$1|lihtsege|lihtsegh}}",
- "nrevisions": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
- "nviews": "$1 {{PLURAL:$1|vuesehte|vuesehteh}}",
- "lonelypages": "Eejhtegapth bielieh",
- "uncategorizedpages": "Ov-kategorije bielieh",
- "uncategorizedcategories": "Ov-kategorije kategorijeh",
- "uncategorizedimages": "Ov-kategorije guvvieh",
- "uncategorizedtemplates": "Ov-kategorije maaleh",
- "unusedcategories": "Ov-nuhtjie kategorije",
- "unusedimages": "Ov-nnuhtjie guvvieh",
- "wantedcategories": "Vaajtelidh kategorijeh",
- "wantedpages": "Vaajtelidh bielieh",
- "mostlinked": "Jeenjebe lïenghkeh gåajkoe bielieh",
- "mostlinkedcategories": "Jeenjebe lïenghke gåajkoe kategorijeh",
- "mostlinkedtemplates": "Jeenjebe lïenghke gåajkoe malleh",
- "mostcategories": "Bielieh meatan jïjnje kategorijeh",
- "mostimages": "Jeenjebe lïenghke gåajkoe guvvieh",
- "mostrevisions": "Bielieh meatan jïjnje gïehtjedammeh",
- "prefixindex": "Prefiikse indeekse",
- "shortpages": "Åenehks bielieh",
- "longpages": "Guhkie bielieh",
- "deadendpages": "Tsuvvedh bielieh",
- "protectedpages": "Sïektjedh bielieh",
- "listusers": "Nuhtjien lästoe",
- "newpages": "Orre bielie",
- "newpages-username": "Nuhtjiennomme:",
- "ancientpages": "Båarasåabpoe bielieh",
- "move": "Jåhta",
- "movethispage": "Jåhta dïhte bielie",
- "booksources": "Gärja gaaltjieh",
- "booksources-search-legend": "Ohtsedh ihke gärja gaaltjieh",
- "booksources-go": "Vaadtsa",
- "specialloguserlabel": "Nuhtjien:",
- "speciallogtitlelabel": "Tiitele:",
- "log": "Loggeh",
- "all-logs-page": "Gaajhke loggeh",
- "allpages": "Gaajhke bielieh",
- "alphaindexline": "$1 ... $2",
- "nextpage": "Minngebe bielie ($1)",
- "prevpage": "Övtebe bielie ($1)",
- "allpagesfrom": "Vuesehte bielieh goh aelkedh meatan:",
- "allarticles": "Gaajhke bielieh",
- "allpagessubmit": "Vaadtsa",
- "allpagesprefix": "Vuesehte bielieh meatan prefihkse:",
- "categories": "Karegorijeh",
- "listusers-submit": "Vuesehte",
- "emailuser": "E-påaste dïhte nuhtjien",
- "emailpage": "E-påaste nuhtjien",
- "defemailsubject": "{{SITENAME}} e-påaste",
- "emailfrom": "Raejeste",
- "emailto": "Gåajkoe",
- "emailsubject": "Ïebne",
- "emailmessage": "Dïjre",
- "emailsend": "Seedtie",
- "emailsent": "E-påaste seedtedh",
- "watchlist": "Mov sïektjedhlästoe",
- "mywatchlist": "Mov sïektjedhlästoe",
- "removedwatchtext": "Bielie \"[[:$1]]\" lea sihkojuvvon raejeste [[Special:Watchlist|dov sïektjedhlästoe]].",
- "watch": "Sïektjedh",
- "watchthispage": "Sïektjedh dïhte bielie",
- "unwatch": "Ov-sïektjedh",
- "watchlist-details": "{{PLURAL:$1|$1 bielie|$1 bielieh}} sïektjedh (doekoe dïerhkestidhbielieh).",
- "wlshowlast": "Vuesehte minngemes $1 täjmoeh $2 biejjieh $3",
- "watching": "Sïektjeminie...",
- "unwatching": "Ov-sïektjedh...",
- "enotif_impersonal_salutation": "{{SITENAME}} nuhtjien",
- "created": "skaepede",
- "deletepage": "Tjåegkedh bielie",
- "historywarning": "Vaaroehtidh: Bielie datne gïehtele ahte sihkut åtna histovrije:",
- "actioncomplete": "Deahpadimmie voerkes",
- "deletedtext": "\"$1\" lea sihkojuvvon.\nVuajna $2 ihke galtege bïjre männgan sihkojuvvonh.",
- "dellogpage": "Sihkkun logge",
- "deletecomment": "Gaavhtan ihke sihkkuma",
- "deleteotherreason": "Jeatjebh/ehkstre gaavhtan:",
- "deletereasonotherlist": "Jeatjebh gaavhtan",
- "rollbacklink": "jurrelde bååstede",
- "protectlogpage": "Vaarjelidh logge",
- "prot_1movedto2": "[[$1]] jåhta gåajkoe [[$2]]",
- "protect-legend": "Skylledh vaarjelidh",
- "protectcomment": "Lahtestimmie:",
- "protectexpiry": "Boarasnuvve:",
- "protect_expiry_invalid": "Ov-jiltiige buaorasjnuvvenaigi.",
- "protect_expiry_old": "Boarasnuvvenaigi lea vaesedh.",
- "protect-text": "Daesnie dorje datne vuajna jih värrhtoedimmie vaarjelidhdaltese dejstie bielie '''$1'''.",
- "protect-locked-access": "Dov nuhtjien åtna ijje luhpie gåajkoe värrhtoedimmie tjaeleste-vaarjelidh.\nDaaletje tjaeleste-vaarjelidh sïjsestäälninge ihke bielie '''$1''' lea:",
- "protect-default": "(åvte-veeljeme)",
- "protect-fallback": "Luhpie \"$1\"",
- "protect-level-autoconfirmed": "Tjöödtjehtidh ov-registreered nuhtjienh",
- "protect-level-sysop": "Barre reeredh",
- "protect-summary-cascade": "viididuvvon",
- "protect-expiring": "boarasnuvve $1 (UTC)",
- "protect-cascade": "Vaarjelidh bielieh guosket sïjse dïhte bielie (viidit suodjaluse)",
- "protect-cantedit": "Datne dorje ijje värrhtoedimmie vaarjelidhdaltese ihke dïhte bielie, ihke datne ijja åtna luhpie ahte värrhtoedimmie dïhte.",
- "protect-expiry-options": "2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite",
- "restriction-type": "Permisjovne:",
- "restriction-level": "Restriksjovne daltese:",
- "restriction-edit": "Värrhtoedimmie",
- "restriction-move": "Jåhta",
- "restriction-create": "Skaepiedidh",
- "restriction-level-sysop": "dïeves-vaarjelidh",
- "undeleterevisions": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} våarhkoe",
- "undeletebtn": "Mahtsat",
- "undelete-search-submit": "Ohtsedh",
- "namespace": "Nommeïebne:",
- "invert": "Jarkoe veeljeme",
- "blanknamespace": "(Bielieh)",
- "contributions": "Nuhtjien värrhtoedimmieh",
- "mycontris": "Mov värrhtoedimmieh",
- "contribsub2": "Ihke $1 ($2)",
- "uctop": "(gïerege)",
- "month": "Raejeste aske (jih övtebe):",
- "year": "Raejeste jaepie (jih övtebe):",
- "sp-contributions-newbies-sub": "Ihke orre nuhtjienh",
- "sp-contributions-blocklog": "Tjöödtjehtidh logge",
- "sp-contributions-talk": "Digkiedimmie",
- "sp-contributions-username": "IP Tjaalesijjie jallh nuhtjiennomme:",
- "sp-contributions-submit": "Ohtsedh",
- "whatlinkshere": "Bilieh goh lïenghkeh diekie",
- "whatlinkshere-title": "Bielieh goh lïenghke gåajkoe $1",
- "whatlinkshere-page": "Bielie:",
- "linkshere": "Tjuovvovasj bielie lïenghke gåajkoe '''[[:$1]]''':",
- "nolinkshere": "Ijje bielieh lïenghke gåajkoe '''[[:$1]]'''.",
- "isredirect": "bïjre-dirisjovne bielie",
- "istemplate": "lasihuvvon goh maale",
- "whatlinkshere-prev": "{{PLURAL:$1|övtebe|övtebe $1}}",
- "whatlinkshere-next": "{{PLURAL:$1|minngebe|minngebe $1}}",
- "whatlinkshere-links": "← lïenghkeh",
- "blockip": "Tjöödtjehtidh nuhtjien",
- "ipadressorusername": "IP Tjaalesijjie jallh nuhtjiennomme:",
- "ipbother": "Jeatjebh tïjje:",
- "ipboptions": "2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite",
- "ipblocklist": "Lästoe bijjelen tjöödtjehtidh IP tjaalesijjieh jih nuhtjiennommeh",
- "ipblocklist-submit": "Ohtsedh",
- "blocklink": "tjöödtjehtidh",
- "unblocklink": "ov-tjöödtjehtidh",
- "contribslink": "dåarjoeh",
- "blocklogpage": "Tjöödtjehtidh logge",
- "blocklogentry": "blåhkedidh \"[[$1]]\" $2 $3",
- "lockdb": "Tjuevtedh daatabaase",
- "lockbtn": "Tjuevtedh daatabaase",
- "databasenotlocked": "Daatabaase lea ijje tjuevtedh.",
- "move-page-legend": "Jåhta bielie",
- "movearticle": "Jåhta bielie:",
- "newtitle": "Gåajkoe orre tiitele:",
- "move-watch": "Sïektjedh dïhte bielie",
- "movepagebtn": "Jåhta bielie",
- "pagemovedsub": "Jåhta lähkoe",
- "articleexists": "Bielie meatan dïhte nomme gååvnese joe, jallh\nnome dov åtna veeljeme lea ijje jiiltige.\nGïemhpes veeljeme jeatjebh nomme.",
- "movetalk": "Jåhta aaj dïerkestidhbielie, bïjre dïhte gååvnese.",
- "movelogpage": "Jåhta logge",
- "movereason": "Gaavhtan:",
- "revertmove": "jåhta bååstede",
- "export": "Ehksporte bielieh",
- "export-submit": "Ehksporte",
- "export-addcat": "Lissiehtidh",
- "export-templates": "Inkludera mallar",
- "allmessages": "Systeeme dïrje",
- "allmessagesname": "Nomme",
- "thumbnail-more": "Vijriedidh",
- "thumbnail_error": "Båajhtode nuelesne skaepede dejstie miniatyvreguvvie: $1",
- "import": "Imporhte bielieh",
- "import-interwiki-submit": "Imporhte",
- "importstart": "Imporhte bielieh...",
- "import-revision-count": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
- "importfailed": "Imporhte steegkeldahkesne: $1",
- "importsuccess": "Imporhte lähkoe!",
- "importlogpage": "Imporhte logge",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} raejeste $2",
- "tooltip-pt-userpage": "Mov nuhtjienbielie",
- "tooltip-pt-mytalk": "Mov dïjveldidh bielie",
- "tooltip-pt-preferences": "Mov sïjsesäälningeh",
- "tooltip-pt-watchlist": "Lästoe bijjelen bielieh goh sïektjedh",
- "tooltip-pt-mycontris": "Lästoe bijjelen mov värrhtoedimmie",
- "tooltip-pt-login": "Dov åådtje logge sïjse, bine dïhte lea ijje daerpies.",
- "tooltip-pt-logout": "Logge ålkone",
- "tooltip-ca-talk": "Dïjveldidh bïjre sisvege bieliej",
- "tooltip-ca-edit": "Dov dorje värrhtoedimmie dïhte bielie. Nuhtjie åvte-vuesiehtidh båaloe åvte spååredh.",
- "tooltip-ca-addsection": "Lissiehtidh lahtestimmie gåajkoe dïhte dïjveldidh.",
- "tooltip-ca-viewsource": "Dïhte bielie lea vaarjelidh. Dov dorje vuesehte gaaltjiej.",
- "tooltip-ca-protect": "Vaarjelidh dïhte bielie",
- "tooltip-ca-delete": "Tjåegkedh dïhte bielie",
- "tooltip-ca-move": "Jåhta dïhte bielie",
- "tooltip-ca-watch": "Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe",
- "tooltip-ca-unwatch": "Sirdde dïhte bielie raejeste dov sïektjedhlästoe",
- "tooltip-search": "Ohtsedh {{SITENAME}}sne",
- "tooltip-p-logo": "Åejjiebielie",
- "tooltip-n-mainpage": "Gåajkoe aalkoebielie vaadtsa",
- "tooltip-n-portal": "Bïjre prosjekte, mij dov dorje, lij dov gaavnedh daeverh",
- "tooltip-n-currentevents": "Bïevnesh bïjre daaletje deahpadimmieh",
- "tooltip-n-recentchanges": "Lästoe männganes sjiehtedh bijjelen nille {{SITENAME}}.",
- "tooltip-n-randompage": "Vaadtsa summal bielie",
- "tooltip-n-help": "Viehkie jih bïevnesh {{SITENAME}} bïjre.",
- "tooltip-t-whatlinkshere": "Lästoe bijjelen gaajhke wiki bielieh goh lïenghke diekie",
- "tooltip-feed-rss": "RSS feed ihke dïhte bielie",
- "tooltip-feed-atom": "Atom feed ihke dïhte bielie",
- "tooltip-t-contributions": "Vuesehte lästoe bijjelen värrhtoedimmieh dejstie dïhte nuhtjien",
- "tooltip-t-emailuser": "Seedtedh e-påaste gåajkoe dïhte nuhtjien",
- "tooltip-t-upload": "Sadde guvvir jallh meedia baalkah",
- "tooltip-t-specialpages": "Lästoe gaajhke joekoen bielieh bijjelen",
- "tooltip-ca-nstab-user": "Vuesehte nuhtjien bieliej",
- "tooltip-ca-nstab-project": "Vuesehte prosjekte bieliej",
- "tooltip-ca-nstab-image": "Vuesehte guvvie bieliej",
- "tooltip-ca-nstab-template": "Vuesehte maalej",
- "tooltip-ca-nstab-help": "Vuesehte viehkie bieliej",
- "tooltip-ca-nstab-category": "Vuesehte kategorije bieliej",
- "tooltip-minoredit": "Mïerhkesjidh dïhte lea ohtje värrhtoedimmie",
- "tooltip-save": "Spååredh dov värrhtoedimmieh",
- "tooltip-preview": "Åvte-vuesiehtidh dov värrhtoedimmie, gïemhpes nuhtjie dïhte åvte spååredh!",
- "tooltip-diff": "Vuesehte guhte värrhtoedimmieh dov åtna dorjeme dejstie tjaalege.",
- "tooltip-compareselectedversions": "Vuesehte joekehts gaskesne dah göökte vïhtesjidh låhkoeh dejstie dïhte bielie.",
- "tooltip-watch": "Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe",
- "siteuser": "{{SITENAME}} nuhtjien $1",
- "siteusers": "{{SITENAME}} nuhtjien(h) $1",
- "previousdiff": "← Övtebe joekehts",
- "nextdiff": "Minngebe joekehts →",
- "file-info": "baalka stoerre: $1, MIME-vuekie: $2",
- "file-info-size": "$1 × $2 pixel, baalka stoerre: $3, MIME-vuekie: $4",
- "file-nohires": "Ijje jïlle bäjjeselöösninge jaksoes.",
- "svg-long-desc": "SVG baalka, maadth-stoerre $1 × $2 pixel, baalka stoerre: $3",
- "show-big-image": "Dïeves stoerre",
- "newimages": "Gallerije dejstie orre baalkah",
- "ilsubmit": "Ohtsedh",
- "metadata": "Metadaata",
- "metadata-expand": "Vuesehte vijriedidh detaaljeh",
- "metadata-collapse": "Gaptjedh vijrede daeverh",
- "metadata-fields": "EXIF-dajve goh lästoe sïjse dïhte dïrje vuesehte nille guvviebielie gåessie metadaatataabelle lea unniedidh.\nJeatjebh dajveh lea gaptjedh goh sïejhme, bine vuesehte gåessie taabelle stoerre.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "exif-imagewidth": "Gamte",
- "exif-imagelength": "Gåhkoe",
- "exif-model": "Guvviedahke hammohke",
- "exif-software": "Möövhkesvaare nuhtjie",
- "exif-filesource": "Guvvie gaaltjie",
- "exif-gpslatituderef": "Noerhte jallh Åarjetje Laatituude",
- "exif-gpslatitude": "Laatituude",
- "exif-gpslongituderef": "Lulnie jallh Jillege Låångdituude",
- "exif-gpslongitude": "Låångdituude",
- "exif-gpsareainformation": "Nomme ihke GPS davje",
- "exif-meteringmode-0": "Ammes",
- "exif-meteringmode-255": "Jeatjebh",
- "exif-lightsource-0": "Ammes",
- "exif-scenecapturetype-0": "Sïejhme",
- "exif-contrast-1": "Möövhkes",
- "exif-contrast-2": "Garre",
- "exif-sharpness-1": "Möövhkes",
- "exif-sharpness-2": "Garre",
- "exif-subjectdistancerange-0": "Ammes",
- "exif-gpslatitude-n": "Noerhte latituude",
- "exif-gpslatitude-s": "Åarjetje laatituude",
- "exif-gpslongitude-e": "Lulnie låångdituude",
- "exif-gpslongitude-w": "Jillege låångdituude",
- "watchlistall2": "gaajhke",
- "namespacesall": "gaajhke",
- "monthsall": "gaajhke",
- "scarytranscludetoolong": "[URL lea ihke guhkie; gaatelassjedh]",
- "confirm-purge-top": "Döömedh cache ihke dïhte bielie?",
- "imgmultipageprev": "← övtebe bielie",
- "imgmultipagenext": "minngebe bielie →",
- "imgmultigo": "Vaadtsa!",
- "table_pager_next": "Minngebe bielie",
- "table_pager_prev": "Övtebe bielie",
- "table_pager_first": "Voestemes bielie",
- "table_pager_last": "Minngemes bielie",
- "table_pager_limit_submit": "Vaadtsa",
- "autosumm-new": "Orre bielie: $1",
- "livepreview-loading": "Leedtedh…",
- "livepreview-ready": "Leedtedh… Voerkes!",
- "watchlisttools-view": "Sïektjedhlästoe",
- "watchlisttools-edit": "Vuesehte jih värrhtoedimmie sïektjedhlästoe",
- "watchlisttools-raw": "Värrhtordimmie saajpe sïektjedhlästoe",
- "unknown_extension_tag": "Ammes ekshtensjovne lissie \"$1\"",
- "version": "Låhkoe",
- "specialpages": "Joekoen bielieh"
+ "@metadata": {
+ "authors": [
+ "Andrijko Z.",
+ "Bïerne",
+ "M.M.S.",
+ "Urhixidur",
+ "TMg",
+ "아라"
+ ]
+ },
+ "tog-showtoolbar": "Dïrregesïeve vuesehth (JavaScript)",
+ "tog-fancysig": "Saajpe singnatuvreh (namhtah jïjtsistie lïenghke)",
+ "underline-always": "Iktesth",
+ "underline-never": "Aaltere",
+ "sunday": "Aejlege",
+ "monday": "Måanta",
+ "tuesday": "Däjsta",
+ "wednesday": "Gaske-våhkoe",
+ "thursday": "Dåarsta",
+ "friday": "Bearjedh",
+ "saturday": "Laavadahke",
+ "sun": "Aej",
+ "mon": "Måa",
+ "tue": "Däj",
+ "wed": "Gas",
+ "thu": "Dåa",
+ "fri": "Bea",
+ "sat": "Laa",
+ "january": "tsiengele",
+ "february": "goevte",
+ "march": "njoktje",
+ "april": "Voerhtje",
+ "may_long": "Suehpede",
+ "june": "Ruffie",
+ "july": "Snjaltje",
+ "august": "Mïetske",
+ "september": "Gaekere",
+ "october": "Golke",
+ "november": "Rahka",
+ "december": "Goeve",
+ "january-gen": "Tsiengele",
+ "february-gen": "Goevte",
+ "march-gen": "Njoktje",
+ "april-gen": "Voerhtje",
+ "may-gen": "Suehpede",
+ "june-gen": "Ruffie",
+ "july-gen": "Snjaltje",
+ "august-gen": "Mïetske",
+ "september-gen": "Gaekere",
+ "october-gen": "Golke",
+ "november-gen": "Rahka",
+ "december-gen": "Goeve",
+ "jan": "Tsïen",
+ "feb": "Goevt",
+ "mar": "Njok",
+ "apr": "Voer",
+ "may": "Sueh",
+ "jun": "Ruff",
+ "jul": "Snja",
+ "aug": "Mïet",
+ "sep": "Gaek",
+ "oct": "Golk",
+ "nov": "Rahk",
+ "dec": "Goev",
+ "pagecategories": "{{PLURAL:$1|Kategorije|Kategorijeh}}",
+ "category_header": "Bielie sïjse kategorije \"$1\"",
+ "subcategories": "Subkategorijeh",
+ "category-media-header": "Guvvie sïjse karegorije \"$1\"",
+ "category-empty": "''Dïhte kategorije sisvege ijje bielieh jallh baalkah.''",
+ "listingcontinuesabbrev": "jåar.",
+ "about": "Bïjre",
+ "article": "Sisvege bielie",
+ "newwindow": "(geehpehtidh sïjse orre klaase)",
+ "cancel": "Orrijidh",
+ "moredotdotdot": "Jienebe...",
+ "mypage": "Mov bielie",
+ "mytalk": "Mov dïjveldidh",
+ "anontalk": "Dïjveldidh ihke dïhte IP",
+ "navigation": "Navigasjovne",
+ "and": "&#32;jih",
+ "qbfind": "Gaavnedh",
+ "qbedit": "Värrhtoedimmie",
+ "qbpageoptions": "Dïhte bielie",
+ "qbmyoptions": "Mov bielieh",
+ "faq": "FAQ",
+ "faqpage": "Project:FAQ",
+ "errorpagetitle": "Båajhtode",
+ "returnto": "Bååstide gåajkoe $1.",
+ "tagline": "{{SITENAME}}sta",
+ "help": "Viehkie",
+ "search": "Ohtsedh",
+ "searchbutton": "Ohtsedh",
+ "go": "Vaadtsa",
+ "searcharticle": "Vaadtsa",
+ "history": "Histovrije",
+ "history_short": "Histovrije",
+ "printableversion": "Tjaelije bielie",
+ "permalink": "Permanente lïenghke",
+ "print": "Tjaeledh olkese",
+ "edit": "Sjiehtedh",
+ "editthispage": "Värrhtoedimmie dïhte bielie",
+ "delete": "Tjåegkedh",
+ "protect": "Vaarjelidh",
+ "protectthispage": "Vaarjelidh dïhte bielie",
+ "newpage": "Orre bielie",
+ "talkpage": "Dïjveldidh dïhte bielie",
+ "talkpagelinktext": "Digkiedimmie",
+ "specialpage": "Joekoelaakan Bielie",
+ "personaltools": "Persjovne dïrregeh",
+ "articlepage": "Vuesehte artihkle bielie",
+ "talk": "Dïjveldeme",
+ "views": "Vuesehth",
+ "toolbox": "Dïrregeborhtje",
+ "userpage": "Vuesehte nuhtjienbielie",
+ "projectpage": "Vuesehte Wikipedijebielie",
+ "imagepage": "Vuesehte guvvie bielie",
+ "templatepage": "Vuesehte maale bielie",
+ "viewhelppage": "Vuesehte viehkie bielie",
+ "categorypage": "Vuesehte kategorije bielie",
+ "viewtalkpage": "Vuesehte dïjveldidh",
+ "otherlanguages": "jeatjebh gïele",
+ "redirectedfrom": "(Bïjre-dirisjovne raejeste $1)",
+ "redirectpagesub": "Bïjre-dirisjovne bielie",
+ "protectedpage": "Vaarjelidh bielie",
+ "jumpto": "Vaadtsa gåajkoe:",
+ "jumptonavigation": "navigasjovne",
+ "jumptosearch": "ohtsedh",
+ "aboutsite": "{{SITENAME}}en bïjre",
+ "aboutpage": "Project:Bïjre",
+ "copyrightpage": "{{ns:project}}:Bäjjesereaktah",
+ "currentevents": "Daaletje deahpadimmieh",
+ "currentevents-url": "Project:Daaletje deahpadimmieh",
+ "disclaimers": "Friijavuohte vastideamis",
+ "disclaimerpage": "Project:Bäjjesereaktah",
+ "edithelp": "Sjiehtedimmie viehkie",
+ "mainpage": "Aalkoebielie",
+ "mainpage-description": "Aalkoebielie",
+ "portal": "Meatan portaale",
+ "portal-url": "Project:Meatan portaale",
+ "privacy": "Privaate pålisy",
+ "privacypage": "Project:Privaate pålisy",
+ "retrievedfrom": "Raejeste \"$1\" vïedtjeme",
+ "youhavenewmessages": "Datne åtna $1 ($2).",
+ "editsection": "sjïehtedh",
+ "editold": "värrhtoedimmie",
+ "editsectionhint": "Sektiovne sjiehtedh: $1",
+ "toc": "Sisvege",
+ "showtoc": "vuesehte",
+ "hidetoc": "gaptjedh",
+ "viewdeleted": "Vuesehte $1?",
+ "site-rss-feed": "$1 RSS Feed",
+ "site-atom-feed": "$1 Atom Feed",
+ "page-rss-feed": "\"$1\" RSS Feed",
+ "page-atom-feed": "\"$1\" Atom Feed",
+ "nstab-main": "Bielie",
+ "nstab-user": "Nuhtjien bielie",
+ "nstab-media": "Guvvie",
+ "nstab-special": "Joekoelaakan",
+ "nstab-project": "Prosjekte bielie",
+ "nstab-image": "Baalka",
+ "nstab-mediawiki": "MediaWiki",
+ "nstab-template": "Maale",
+ "nstab-help": "Viehke bielie",
+ "nstab-category": "Kategorije",
+ "error": "Båajhtode",
+ "databaseerror": "Daatabaase båajhtode",
+ "readonly": "Daatabaase steegkeldahkesne",
+ "internalerror": "Sjisjnjie båajhtede",
+ "internalerror_info": "Sjisjnjie båajhtede: $1",
+ "badtitle": "Gååre nomme",
+ "badtitletext": "Dïhte bielietiitele lea nov sån ijje luhpede, bielie lea gåaroes, jallh lea bielie gåarhmede lïenghke gåajkoe.",
+ "viewsource": "Vuesehte tjaalege",
+ "viewsourcetext": "Dov dorje vuesehte jih kåpieerae gaaltjie dejstie dïhte bielie:",
+ "yourname": "Nuhtjiennomme:",
+ "yourpassword": "Loevesbaakoe:",
+ "remembermypassword": "Måjhtije mov loggesïjse nille dïhte daatovre (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "yourdomainname": "Dov domäne:",
+ "login": "Logge sïjse",
+ "nav-login-createaccount": "Logge sïjse / skaepede nuhtjien",
+ "userlogin": "Logge sïjse / skaepede nuhtjien",
+ "logout": "Logge olkese",
+ "userlogout": "Logge ålkone",
+ "nologin": "Lea dov ijje registreered? '''$1'''.",
+ "nologinlink": "Skaepede nuhtjien",
+ "createaccount": "Skaepede nuhtjien",
+ "gotaccount": "Åtna dov joe nuhtjiennomme? '''$1'''.",
+ "gotaccountlink": "Logge sïjse",
+ "createaccountmail": "meatan e-påaste",
+ "loginerror": "Logge sïjse båajhtode",
+ "loginsuccesstitle": "Dov lea daelie sïjse logge",
+ "loginsuccess": "'''Dov lea daelie sïjselogge nille {{SITENAME}} goh \"$1\".'''",
+ "nosuchuser": "Dïhte gååvnese ijje nuhtjien goh nomme \"$1\". Gïehtjedidh dov baakoehtidh, jallh skaepede orre nuhtjien.",
+ "nosuchusershort": "Dïhte gååvnese ijje nuhtjien goh nomme \"$1\". Gïehtjedidh baakoehtidh.",
+ "nouserspecified": "Dov galkedh tjaeledh nuhtjiennomme.",
+ "wrongpassword": "Loevesbaakoe lea gåarhmede. Vuejnedh vihth.",
+ "wrongpasswordempty": "Loevesbaakoe lea gåaroes. Vuejnedh vihth.",
+ "passwordtooshort": "Dov loevesbaakoe lea ov-jiltighe jallh ihke åenehks. Dïhte galkedh åtna unnemes $1 vähta jih sjädta jeatjebe raejeste dov nuhtjiennomme.",
+ "mailmypassword": "E-påaste loevesbaakoe",
+ "passwordremindertitle": "Orre loevesbaakoe ihke {{SITENAME}}",
+ "noemail": "Dïhte lea ijje e-påaste tjaalesijjie registreeredh ihke nuhtjien \"$1\".",
+ "passwordsent": "Orre loevesbaakoe åtna sjädta seedtie gåajkoe e-påaste tjaalesijjie\nregistreered ihke \"$1\".\nGïemhpes logge sïjse vihth männgan datne åtna låhka dïhte.",
+ "accountcreated": "Nuhtjien skaepede",
+ "loginlanguagelabel": "Gïele: $1",
+ "changepassword": "Värrhtoedimmie loevesbaakoe",
+ "oldpassword": "Båeries loevesbaakoe:",
+ "newpassword": "Orre loevesbaakoe:",
+ "retypenew": "Odhasit orre loevesbaakoe:",
+ "bold_sample": "Buajtehks tjaalege",
+ "bold_tip": "Buajtehks tjaalege",
+ "italic_sample": "Kursiive tjaalege",
+ "italic_tip": "Kursiive tjaalege",
+ "link_sample": "Lïenghke tiitele",
+ "link_tip": "Sjisjnjie lïenghke",
+ "extlink_sample": "http://www.example.com lïenghke tiitele",
+ "extlink_tip": "Ehkstäärne lïenghke (måjhtajidh http:// prefihkse)",
+ "headline_sample": "Rubriike tjaalege",
+ "headline_tip": "Daltese 2 rubriike",
+ "nowiki_sample": "Bïejedh ijje-hammode tjaalege daesnie",
+ "nowiki_tip": "Rievdde wikïhammode",
+ "image_tip": "Lååtje guvvie",
+ "media_tip": "Meedia baalka lïenghke",
+ "sig_tip": "Dov signatuvre meatan tïjjestäämpele",
+ "hr_tip": "Horisontele sïeve (nuhtjie bïhteles-laakan)",
+ "summary": "Tjohkehtehteme:",
+ "subject": "Ïebne/rubriike:",
+ "minoredit": "Dïhte lea ohtje värrhtoedimmie",
+ "watchthis": "Sïektjedh dïhte bielie",
+ "savearticle": "Spååredh bielie",
+ "preview": "Åvte-vuesiehtidh",
+ "showpreview": "Vuesehte åvte-vuesiehtidh",
+ "showdiff": "Vuesehte värrhtoedimmie",
+ "anoneditwarning": "'''Vaaroehtidh:''' Dov lea ijje logge sïjse. Dov IP tjaalesijjie båetedh spååredh sïjse dïhte bielie värrhtoedimmie histovrije.",
+ "summary-preview": "Tjohkehtehteme åvte-vuesiehtidh:",
+ "loginreqlink": "logge sïjse",
+ "loginreqpagetext": "Dov galkedh $1 ihke vuesehte jeatjebh bielieh.",
+ "accmailtitle": "Loevesbaakoe seedtie.",
+ "accmailtext": "Loevesbaakoe ihke ”$1” utnedh seedtedh gåajkoe $2.",
+ "newarticle": "(Orre)",
+ "noarticletext": "Dïhte lea daelie ijje tjaalege sïjse dïhte bielie, dov dorje [[Special:Search/{{PAGENAME}}|ohtsedh ihke dïhte bielie nomme]] sïjse jeatjebh bielieh jallh [{{fullurl:{{FULLPAGENAME}}|action=edit}} värrhtoedimmie dïhte bielie].",
+ "usercssyoucanpreview": "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre CSS åvte spååredh.",
+ "userjsyoucanpreview": "'''Tiipse:''' Nuhtjie 'Vuesehte åvte-vuesiehtidh' båaloe ihke pryövoe dov orre JS åvte spååredh.",
+ "updated": "(Orrestahteme)",
+ "note": "'''Galtege:'''",
+ "previewnote": "'''Dïhte lea aktegh åvte-vuesiehtidh; värrhtoedimmieh ånta ijje sjïdtedh spååredh!'''",
+ "editing": "Sjiehtedimmie $1",
+ "editingsection": "Värrhtoedimmie $1 (sektiovne)",
+ "yourtext": "Dov tjaalege",
+ "copyrightwarning": "Tjaeleste gaajhke värrhtoedimmieh gåajkoe {{SITENAME}} lea ahte gïehtjele goh maam buektedh nuelesne $2 (vuajna $1 ihke detaaljeh). Bïjre datne ijje sïjhtedh dov tjaalege galka värrhtoedimmieh jallh kåpieeres minngesne jeatjebh daerpies voete, galka datne ijje tjaala daesnie.<br />\nDatne luhpede mijjieh aaj datne tjaala tjaalege jïjtje, jallh kåpieeret raejeste gaaltjie goh ijje vaarjele dejstie bäjjesereaktah, jallh plïerehke.<br />\n'''LISSEHTE IJJE OLKESE BÄJJESEREAKTAHVAARJELE ÏEBNE NAMHTAH LUHPIE!'''",
+ "templatesused": "{{PLURAL:$1|Maal|Maler}}Maaleh nuhtjie nille dïhte bielie:",
+ "templatesusedpreview": "{{PLURAL:$1|Maal|Maaleh}} nuhtjie sïjse dïhte åvte-vuesiehtidh:",
+ "template-protected": "(vaarjeleme)",
+ "template-semiprotected": "(lehkie-vaarjelidh)",
+ "nocreatetext": "{{SITENAME}} åtna gaertjiedidh nuepieh ahte skaepede orre bielieh.\nDov dorje värrhtoedimmie gååvnese bielieh, jallh [[Special:UserLogin|logge sïjse jallh skaepede nuhtjien]].",
+ "viewpagelogs": "Vuesehte loggeh ihke dïhte bielie",
+ "currentrev": "Daaletje gïehtjedamme",
+ "revisionasof": "Gïehtjedamme ihke $1",
+ "revision-info": "Gïehtjedamme raejeste dïhte $1; $2",
+ "previousrevision": "←Båarasåabpoe gïehtjedamme",
+ "nextrevision": "Minngebe gïehtjedamme→",
+ "currentrevisionlink": "Daaletje gïehtjedamme",
+ "cur": "daaletje",
+ "next": "minngebe",
+ "last": "minngemes",
+ "page_first": "voestegh",
+ "page_last": "minngemes",
+ "histfirst": "Aareh",
+ "histlast": "Minngemes",
+ "historysize": "({{PLURAL:$1|1 byte|$1 byteh}})",
+ "history-feed-title": "Gïehtjedamme histovrije",
+ "history-feed-item-nocomment": "$1 dïhte $2",
+ "mergehistory-from": "Gaaltjie bielie:",
+ "history-title": "Gïehtjedamme histovrije ihke \"$1\"",
+ "lineno": "Sïeve $1:",
+ "compareselectedversions": "Mohtedidh veeljeme låhkoeh",
+ "editundo": "ov-darjodh",
+ "searchresults": "Ohtsedh resultaateh",
+ "prevn": "övtebe {{PLURAL:$1|$1}}",
+ "nextn": "minngeben {{PLURAL:$1|$1}}",
+ "viewprevnext": "Vuesehth ($1 {{int:pipe-separator}} $2) ($3)",
+ "preferences": "Sïjsestäälningeh",
+ "mypreferences": "Mov sïjsesäälningeh",
+ "skin-preview": "Åvte-vuesiehtidh",
+ "saveprefs": "Spååredh",
+ "searchresultshead": "Ohtsedh",
+ "timezonelegend": "Tïjjedajve",
+ "localtime": "Byjrehks tïjje",
+ "youremail": "E-påaste:",
+ "username": "Nuhtjiennomme:",
+ "yourrealname": "Ov nomme:",
+ "yourlanguage": "Gïele:",
+ "yournick": "Nuhjiennomme:",
+ "email": "E-påaste",
+ "prefs-help-realname": "Ov nomme galkedh ijje tjaeledh. Bïjre datne veeljeme tjaeledh dov ov nomme, båetedh dïhte nuhtjie ihke tjaeledh dov barkoe.",
+ "editinguser": "Värrhtoedimmie nuhtjien '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+ "group": "Tjïerte:",
+ "group-bot": "Jïjtjesvïhtjije",
+ "group-sysop": "Reeredh",
+ "group-bot-member": "Jïjtjesvïhtjije",
+ "group-sysop-member": "Reerien",
+ "grouppage-sysop": "{{ns:project}}:Reeredh",
+ "rightslog": "Nuhtjienreaktah logge",
+ "nchanges": "$1 {{PLURAL:$1|värrhtoedimmie|värrhtoedimmieh}}",
+ "recentchanges": "Männgan värrhtoedimmieh",
+ "recentchanges-feed-description": "Dåeriedidh männgan värrhtoedimmie sïjse wiki meatan dïhte feed.",
+ "rcnotefrom": "Vuelelen vuesehte dah männgan '''$1''' värrhtoedimmieh männgan '''$2'''.",
+ "rclistfrom": "Vuesehte orre värrhtoedimmieh aelkedh raejeste $3 $2",
+ "rcshowhideminor": "$1 ohtje värrhtoedimmie",
+ "rcshowhidebots": "$1 jïjtjesvïhtjijeh",
+ "rcshowhideliu": "$1 värrhtoedimmie dejstie sïjselogge nuhtjienh",
+ "rcshowhideanons": "$1 anonyyme nuhtjienh",
+ "rcshowhidepatr": "$1 dååhkasjehtedh värrhtoedimmieh",
+ "rcshowhidemine": "$1 mov värrhtoedimmieh",
+ "rclinks": "Vuesehte männgan $1 värrhtoedimmieh nuelesne männgan $2 biejjieh<br />$3",
+ "diff": "joekehts",
+ "hist": "hist",
+ "hide": "Gaptjedh",
+ "show": "Vuesehte",
+ "minoreditletter": "u",
+ "newpageletter": "O",
+ "boteditletter": "j",
+ "recentchangeslinked": "Värrhtoedimmieh nille krïense bielieh",
+ "recentchangeslinked-feed": "Värrhtoedimmieh nille krïense bielieh",
+ "recentchangeslinked-toolbox": "Värrhtoedimmieh nille krïense bielieh",
+ "recentchangeslinked-title": "Värrhtoedimmie laktaseaddji gåajkoe \"$1\"",
+ "recentchangeslinked-summary": "Dïhte joekoelaakan bielie lästoe dah minngemes värrhtoedimmieh nille bielieh goh lea lïenghke. Bielieh [[Special:Watchlist|nille dov]] sïektjedhlästoe lea '''buajtehks'''.",
+ "upload": "Sadde guvvie",
+ "uploadbtn": "Sadde baalka",
+ "uploadlogpage": "Sadde logge",
+ "filename": "Guvvienomme",
+ "filesource": "Gaaltjie",
+ "savefile": "Spååredh guvvie",
+ "uploadvirus": "Guvvie tjeekehdidh viirus! Bïevnesh: $1",
+ "sourcefilename": "Gaaltjie guvvienomme",
+ "upload-file-error": "Sjisjnjie båajhtode",
+ "license": "Liseense",
+ "license-header": "Liseense",
+ "listfiles_search_for": "Ohtsedh ihke guvvie nomme:",
+ "imgfile": "guvvie",
+ "listfiles": "Guvvie lästoe",
+ "listfiles_name": "Nomme",
+ "listfiles_user": "Nuhtjien",
+ "listfiles_size": "Stoerre",
+ "file-anchor-link": "Baalka",
+ "filehist": "Baalka histovrije",
+ "filehist-help": "Diedtedh nille biejjie ihke vuajna man baalkan lij bealese dïhte tïjje.",
+ "filehist-current": "daaletje",
+ "filehist-datetime": "Biejjie/Tïjje",
+ "filehist-user": "Nuhtjien",
+ "filehist-dimensions": "Dimisjovneh",
+ "filehist-filesize": "Guvvie stoerre",
+ "filehist-comment": "Lahtestimmie",
+ "imagelinks": "Lïenghkeh",
+ "linkstoimage": "Tjuovvovasj {{PLURAL:$1|side|$1 sider}} bielieh lïenghkeh gåajkoe dïhte baalka:",
+ "nolinkstoimage": "Dïhte lea ijje bielieh goh nuhtjie dïhte baalka.",
+ "sharedupload": "Dïhte baalka lea $1 sadde goh juaka jih dorje sjädta nuhtjie dejstie jeatjebh prosjekte.",
+ "uploadnewversion-linktext": "Sadde orre låhkoe dejstie dïhte baalka",
+ "mimesearch": "MIME ohtsedh",
+ "mimetype": "MIME vuekie:",
+ "listredirects": "Lästoe bïjre-dirisjovneh",
+ "unusedtemplates": "Ov-nuhtjie maaleh",
+ "unusedtemplateswlh": "jeatjebh lïenghkeh",
+ "randompage": "Summal bielie",
+ "randomredirect": "Summal odhasitstivren",
+ "statistics": "Statistiike",
+ "statistics-header-users": "Nuhtjien statistiike",
+ "doubleredirects": "Guektien-gïerth bïjre-dirisjovneh",
+ "brokenredirects": "Earjohks bïrje-dirisjovneh",
+ "brokenredirects-edit": "(värrhtoedimmie)",
+ "withoutinterwiki": "Bielieh namhtah gïele lïenghkeh",
+ "fewestrevisions": "Bielieh meatan dah unnebes gïehtjedamme",
+ "nbytes": "$1 {{PLURAL:$1|byte|byteh}}",
+ "ncategories": "$1 {{PLURAL:$1|kategorije|kategorijeh}}",
+ "nlinks": "$1 {{PLURAL:$1|lïenghke|lïenghkeh}}",
+ "nmembers": "$1 {{PLURAL:$1|lihtsege|lihtsegh}}",
+ "nrevisions": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
+ "nviews": "$1 {{PLURAL:$1|vuesehte|vuesehteh}}",
+ "lonelypages": "Eejhtegapth bielieh",
+ "uncategorizedpages": "Ov-kategorije bielieh",
+ "uncategorizedcategories": "Ov-kategorije kategorijeh",
+ "uncategorizedimages": "Ov-kategorije guvvieh",
+ "uncategorizedtemplates": "Ov-kategorije maaleh",
+ "unusedcategories": "Ov-nuhtjie kategorije",
+ "unusedimages": "Ov-nnuhtjie guvvieh",
+ "wantedcategories": "Vaajtelidh kategorijeh",
+ "wantedpages": "Vaajtelidh bielieh",
+ "mostlinked": "Jeenjebe lïenghkeh gåajkoe bielieh",
+ "mostlinkedcategories": "Jeenjebe lïenghke gåajkoe kategorijeh",
+ "mostlinkedtemplates": "Jeenjebe lïenghke gåajkoe malleh",
+ "mostcategories": "Bielieh meatan jïjnje kategorijeh",
+ "mostimages": "Jeenjebe lïenghke gåajkoe guvvieh",
+ "mostrevisions": "Bielieh meatan jïjnje gïehtjedammeh",
+ "prefixindex": "Prefiikse indeekse",
+ "shortpages": "Åenehks bielieh",
+ "longpages": "Guhkie bielieh",
+ "deadendpages": "Tsuvvedh bielieh",
+ "protectedpages": "Sïektjedh bielieh",
+ "listusers": "Nuhtjien lästoe",
+ "newpages": "Orre bielie",
+ "newpages-username": "Nuhtjiennomme:",
+ "ancientpages": "Båarasåabpoe bielieh",
+ "move": "Jåhta",
+ "movethispage": "Jåhta dïhte bielie",
+ "booksources": "Gärja gaaltjieh",
+ "booksources-search-legend": "Ohtsedh ihke gärja gaaltjieh",
+ "specialloguserlabel": "Nuhtjien:",
+ "speciallogtitlelabel": "Tiitele:",
+ "log": "Loggeh",
+ "all-logs-page": "Gaajhke loggeh",
+ "allpages": "Gaajhke bielieh",
+ "nextpage": "Minngebe bielie ($1)",
+ "prevpage": "Övtebe bielie ($1)",
+ "allpagesfrom": "Vuesehte bielieh goh aelkedh meatan:",
+ "allarticles": "Gaajhke bielieh",
+ "allpagessubmit": "Vaadtsa",
+ "allpagesprefix": "Vuesehte bielieh meatan prefihkse:",
+ "categories": "Karegorijeh",
+ "listusers-submit": "Vuesehte",
+ "emailuser": "E-påaste dïhte nuhtjien",
+ "emailpage": "E-påaste nuhtjien",
+ "defemailsubject": "{{SITENAME}} e-påaste",
+ "emailfrom": "Raejeste",
+ "emailto": "Gåajkoe",
+ "emailsubject": "Ïebne",
+ "emailmessage": "Dïjre",
+ "emailsend": "Seedtie",
+ "emailsent": "E-påaste seedtedh",
+ "watchlist": "Mov sïektjedhlästoe",
+ "mywatchlist": "Mov sïektjedhlästoe",
+ "removedwatchtext": "Bielie \"[[:$1]]\" lea sihkojuvvon raejeste [[Special:Watchlist|dov sïektjedhlästoe]].",
+ "watch": "Sïektjedh",
+ "watchthispage": "Sïektjedh dïhte bielie",
+ "unwatch": "Ov-sïektjedh",
+ "watchlist-details": "{{PLURAL:$1|$1 bielie|$1 bielieh}} sïektjedh (doekoe dïerhkestidhbielieh).",
+ "wlshowlast": "Vuesehte minngemes $1 täjmoeh $2 biejjieh",
+ "watching": "Sïektjeminie...",
+ "unwatching": "Ov-sïektjedh...",
+ "enotif_impersonal_salutation": "{{SITENAME}} nuhtjien",
+ "created": "skaepede",
+ "deletepage": "Tjåegkedh bielie",
+ "historywarning": "Vaaroehtidh: Bielie datne gïehtele ahte sihkut åtna histovrije:",
+ "actioncomplete": "Deahpadimmie voerkes",
+ "deletedtext": "\"$1\" lea sihkojuvvon.\nVuajna $2 ihke galtege bïjre männgan sihkojuvvonh.",
+ "dellogpage": "Sihkkun logge",
+ "deletecomment": "Gaavhtan ihke sihkkuma",
+ "deleteotherreason": "Jeatjebh/ehkstre gaavhtan:",
+ "deletereasonotherlist": "Jeatjebh gaavhtan",
+ "rollbacklink": "jurrelde bååstede",
+ "protectlogpage": "Vaarjelidh logge",
+ "prot_1movedto2": "[[$1]] jåhta gåajkoe [[$2]]",
+ "protect-legend": "Skylledh vaarjelidh",
+ "protectcomment": "Lahtestimmie:",
+ "protectexpiry": "Boarasnuvve:",
+ "protect_expiry_invalid": "Ov-jiltiige buaorasjnuvvenaigi.",
+ "protect_expiry_old": "Boarasnuvvenaigi lea vaesedh.",
+ "protect-text": "Daesnie dorje datne vuajna jih värrhtoedimmie vaarjelidhdaltese dejstie bielie '''$1'''.",
+ "protect-locked-access": "Dov nuhtjien åtna ijje luhpie gåajkoe värrhtoedimmie tjaeleste-vaarjelidh.\nDaaletje tjaeleste-vaarjelidh sïjsestäälninge ihke bielie '''$1''' lea:",
+ "protect-default": "(åvte-veeljeme)",
+ "protect-fallback": "Luhpie \"$1\"",
+ "protect-level-autoconfirmed": "Tjöödtjehtidh ov-registreered nuhtjienh",
+ "protect-level-sysop": "Barre reeredh",
+ "protect-summary-cascade": "viididuvvon",
+ "protect-expiring": "boarasnuvve $1 (UTC)",
+ "protect-cascade": "Vaarjelidh bielieh guosket sïjse dïhte bielie (viidit suodjaluse)",
+ "protect-cantedit": "Datne dorje ijje värrhtoedimmie vaarjelidhdaltese ihke dïhte bielie, ihke datne ijja åtna luhpie ahte värrhtoedimmie dïhte.",
+ "protect-expiry-options": "2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite",
+ "restriction-type": "Permisjovne:",
+ "restriction-level": "Restriksjovne daltese:",
+ "restriction-edit": "Värrhtoedimmie",
+ "restriction-move": "Jåhta",
+ "restriction-create": "Skaepiedidh",
+ "restriction-level-sysop": "dïeves-vaarjelidh",
+ "undeleterevisions": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} våarhkoe",
+ "undeletebtn": "Mahtsat",
+ "undelete-search-submit": "Ohtsedh",
+ "namespace": "Nommeïebne:",
+ "invert": "Jarkoe veeljeme",
+ "blanknamespace": "(Bielieh)",
+ "contributions": "Nuhtjien värrhtoedimmieh",
+ "mycontris": "Mov värrhtoedimmieh",
+ "contribsub2": "Ihke $1 ($2)",
+ "uctop": "(gïerege)",
+ "month": "Raejeste aske (jih övtebe):",
+ "year": "Raejeste jaepie (jih övtebe):",
+ "sp-contributions-newbies-sub": "Ihke orre nuhtjienh",
+ "sp-contributions-blocklog": "Tjöödtjehtidh logge",
+ "sp-contributions-talk": "Digkiedimmie",
+ "sp-contributions-username": "IP Tjaalesijjie jallh nuhtjiennomme:",
+ "sp-contributions-submit": "Ohtsedh",
+ "whatlinkshere": "Bilieh goh lïenghkeh diekie",
+ "whatlinkshere-title": "Bielieh goh lïenghke gåajkoe $1",
+ "whatlinkshere-page": "Bielie:",
+ "linkshere": "Tjuovvovasj bielie lïenghke gåajkoe '''[[:$1]]''':",
+ "nolinkshere": "Ijje bielieh lïenghke gåajkoe '''[[:$1]]'''.",
+ "isredirect": "bïjre-dirisjovne bielie",
+ "istemplate": "lasihuvvon goh maale",
+ "whatlinkshere-prev": "{{PLURAL:$1|övtebe|övtebe $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|minngebe|minngebe $1}}",
+ "whatlinkshere-links": "← lïenghkeh",
+ "blockip": "Tjöödtjehtidh nuhtjien",
+ "ipaddressorusername": "!!FUZZY!!IP Tjaalesijjie jallh nuhtjiennomme:",
+ "ipbother": "Jeatjebh tïjje:",
+ "ipboptions": "2 täjmoe:2 hours,1 biejjie:1 day,3 biejjie:3 days,1 våhkoe:1 week,2 våhkoe:2 weeks,1 aske:1 month,3 aske:3 months,6 aske:6 months,1 jaepie:1 year,gietjieloeves:infinite",
+ "ipblocklist": "Lästoe bijjelen tjöödtjehtidh IP tjaalesijjieh jih nuhtjiennommeh",
+ "ipblocklist-submit": "Ohtsedh",
+ "blocklink": "tjöödtjehtidh",
+ "unblocklink": "ov-tjöödtjehtidh",
+ "contribslink": "dåarjoeh",
+ "blocklogpage": "Tjöödtjehtidh logge",
+ "blocklogentry": "blåhkedidh \"[[$1]]\" $2 $3",
+ "lockdb": "Tjuevtedh daatabaase",
+ "lockbtn": "Tjuevtedh daatabaase",
+ "databasenotlocked": "Daatabaase lea ijje tjuevtedh.",
+ "move-page-legend": "Jåhta bielie",
+ "movearticle": "Jåhta bielie:",
+ "newtitle": "Gåajkoe orre tiitele:",
+ "move-watch": "Sïektjedh dïhte bielie",
+ "movepagebtn": "Jåhta bielie",
+ "pagemovedsub": "Jåhta lähkoe",
+ "articleexists": "Bielie meatan dïhte nomme gååvnese joe, jallh\nnome dov åtna veeljeme lea ijje jiiltige.\nGïemhpes veeljeme jeatjebh nomme.",
+ "movetalk": "Jåhta aaj dïerkestidhbielie, bïjre dïhte gååvnese.",
+ "movelogpage": "Jåhta logge",
+ "movereason": "Gaavhtan:",
+ "revertmove": "jåhta bååstede",
+ "export": "Ehksporte bielieh",
+ "export-submit": "Ehksporte",
+ "export-addcat": "Lissiehtidh",
+ "export-templates": "Inkludera mallar",
+ "allmessages": "Systeeme dïrje",
+ "allmessagesname": "Nomme",
+ "thumbnail-more": "Vijriedidh",
+ "thumbnail_error": "Båajhtode nuelesne skaepede dejstie miniatyvreguvvie: $1",
+ "import": "Imporhte bielieh",
+ "import-interwiki-submit": "Imporhte",
+ "importstart": "Imporhte bielieh...",
+ "import-revision-count": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
+ "importfailed": "Imporhte steegkeldahkesne: $1",
+ "importsuccess": "Imporhte lähkoe!",
+ "importlogpage": "Imporhte logge",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}}",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|gïehtjedamme|gïehtjedammeh}} raejeste $2",
+ "tooltip-pt-userpage": "Mov nuhtjienbielie",
+ "tooltip-pt-mytalk": "Mov dïjveldidh bielie",
+ "tooltip-pt-preferences": "Mov sïjsesäälningeh",
+ "tooltip-pt-watchlist": "Lästoe bijjelen bielieh goh sïektjedh",
+ "tooltip-pt-mycontris": "Lästoe bijjelen mov värrhtoedimmie",
+ "tooltip-pt-login": "Dov åådtje logge sïjse, bine dïhte lea ijje daerpies.",
+ "tooltip-pt-logout": "Logge ålkone",
+ "tooltip-ca-talk": "Dïjveldidh bïjre sisvege bieliej",
+ "tooltip-ca-edit": "Dov dorje värrhtoedimmie dïhte bielie. Nuhtjie åvte-vuesiehtidh båaloe åvte spååredh.",
+ "tooltip-ca-addsection": "Lissiehtidh lahtestimmie gåajkoe dïhte dïjveldidh.",
+ "tooltip-ca-viewsource": "Dïhte bielie lea vaarjelidh. Dov dorje vuesehte gaaltjiej.",
+ "tooltip-ca-protect": "Vaarjelidh dïhte bielie",
+ "tooltip-ca-delete": "Tjåegkedh dïhte bielie",
+ "tooltip-ca-move": "Jåhta dïhte bielie",
+ "tooltip-ca-watch": "Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe",
+ "tooltip-ca-unwatch": "Sirdde dïhte bielie raejeste dov sïektjedhlästoe",
+ "tooltip-search": "Ohtsedh {{SITENAME}}sne",
+ "tooltip-p-logo": "Åejjiebielie",
+ "tooltip-n-mainpage": "Gåajkoe aalkoebielie vaadtsa",
+ "tooltip-n-portal": "Bïjre prosjekte, mij dov dorje, lij dov gaavnedh daeverh",
+ "tooltip-n-currentevents": "Bïevnesh bïjre daaletje deahpadimmieh",
+ "tooltip-n-recentchanges": "Lästoe männganes sjiehtedh bijjelen nille {{SITENAME}}.",
+ "tooltip-n-randompage": "Vaadtsa summal bielie",
+ "tooltip-n-help": "Viehkie jih bïevnesh {{SITENAME}} bïjre.",
+ "tooltip-t-whatlinkshere": "Lästoe bijjelen gaajhke wiki bielieh goh lïenghke diekie",
+ "tooltip-feed-rss": "RSS feed ihke dïhte bielie",
+ "tooltip-feed-atom": "Atom feed ihke dïhte bielie",
+ "tooltip-t-contributions": "Vuesehte lästoe bijjelen värrhtoedimmieh dejstie dïhte nuhtjien",
+ "tooltip-t-emailuser": "Seedtedh e-påaste gåajkoe dïhte nuhtjien",
+ "tooltip-t-upload": "Sadde guvvir jallh meedia baalkah",
+ "tooltip-t-specialpages": "Lästoe gaajhke joekoen bielieh bijjelen",
+ "tooltip-ca-nstab-user": "Vuesehte nuhtjien bieliej",
+ "tooltip-ca-nstab-project": "Vuesehte prosjekte bieliej",
+ "tooltip-ca-nstab-image": "Vuesehte guvvie bieliej",
+ "tooltip-ca-nstab-template": "Vuesehte maalej",
+ "tooltip-ca-nstab-help": "Vuesehte viehkie bieliej",
+ "tooltip-ca-nstab-category": "Vuesehte kategorije bieliej",
+ "tooltip-minoredit": "Mïerhkesjidh dïhte lea ohtje värrhtoedimmie",
+ "tooltip-save": "Spååredh dov värrhtoedimmieh",
+ "tooltip-preview": "Åvte-vuesiehtidh dov värrhtoedimmie, gïemhpes nuhtjie dïhte åvte spååredh!",
+ "tooltip-diff": "Vuesehte guhte värrhtoedimmieh dov åtna dorjeme dejstie tjaalege.",
+ "tooltip-compareselectedversions": "Vuesehte joekehts gaskesne dah göökte vïhtesjidh låhkoeh dejstie dïhte bielie.",
+ "tooltip-watch": "Lissiehtidh dïhte bielie gåajkoe dov sïektjedhlästoe",
+ "siteuser": "{{SITENAME}} nuhtjien $1",
+ "siteusers": "{{SITENAME}} nuhtjien(h) $1",
+ "previousdiff": "← Övtebe joekehts",
+ "nextdiff": "Minngebe joekehts →",
+ "file-info": "baalka stoerre: $1, MIME-vuekie: $2",
+ "file-info-size": "$1 × $2 pixel, baalka stoerre: $3, MIME-vuekie: $4",
+ "file-nohires": "Ijje jïlle bäjjeselöösninge jaksoes.",
+ "svg-long-desc": "SVG baalka, maadth-stoerre $1 × $2 pixel, baalka stoerre: $3",
+ "show-big-image": "Dïeves stoerre",
+ "newimages": "Gallerije dejstie orre baalkah",
+ "ilsubmit": "Ohtsedh",
+ "metadata": "Metadaata",
+ "metadata-expand": "Vuesehte vijriedidh detaaljeh",
+ "metadata-collapse": "Gaptjedh vijrede daeverh",
+ "metadata-fields": "EXIF-dajve goh lästoe sïjse dïhte dïrje vuesehte nille guvviebielie gåessie metadaatataabelle lea unniedidh.\nJeatjebh dajveh lea gaptjedh goh sïejhme, bine vuesehte gåessie taabelle stoerre.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "exif-imagewidth": "Gamte",
+ "exif-imagelength": "Gåhkoe",
+ "exif-model": "Guvviedahke hammohke",
+ "exif-software": "Möövhkesvaare nuhtjie",
+ "exif-filesource": "Guvvie gaaltjie",
+ "exif-gpslatituderef": "Noerhte jallh Åarjetje Laatituude",
+ "exif-gpslatitude": "Laatituude",
+ "exif-gpslongituderef": "Lulnie jallh Jillege Låångdituude",
+ "exif-gpslongitude": "Låångdituude",
+ "exif-gpsareainformation": "Nomme ihke GPS davje",
+ "exif-meteringmode-0": "Ammes",
+ "exif-meteringmode-255": "Jeatjebh",
+ "exif-lightsource-0": "Ammes",
+ "exif-scenecapturetype-0": "Sïejhme",
+ "exif-contrast-1": "Möövhkes",
+ "exif-contrast-2": "Garre",
+ "exif-sharpness-1": "Möövhkes",
+ "exif-sharpness-2": "Garre",
+ "exif-subjectdistancerange-0": "Ammes",
+ "exif-gpslatitude-n": "Noerhte latituude",
+ "exif-gpslatitude-s": "Åarjetje laatituude",
+ "exif-gpslongitude-e": "Lulnie låångdituude",
+ "exif-gpslongitude-w": "Jillege låångdituude",
+ "namespacesall": "gaajhke",
+ "monthsall": "gaajhke",
+ "scarytranscludetoolong": "[URL lea ihke guhkie; gaatelassjedh]",
+ "confirm-purge-top": "Döömedh cache ihke dïhte bielie?",
+ "imgmultipageprev": "← övtebe bielie",
+ "imgmultipagenext": "minngebe bielie →",
+ "imgmultigo": "Vaadtsa!",
+ "table_pager_next": "Minngebe bielie",
+ "table_pager_prev": "Övtebe bielie",
+ "table_pager_first": "Voestemes bielie",
+ "table_pager_last": "Minngemes bielie",
+ "table_pager_limit_submit": "Vaadtsa",
+ "autosumm-new": "Orre bielie: $1",
+ "watchlisttools-view": "Sïektjedhlästoe",
+ "watchlisttools-edit": "Vuesehte jih värrhtoedimmie sïektjedhlästoe",
+ "watchlisttools-raw": "Värrhtordimmie saajpe sïektjedhlästoe",
+ "unknown_extension_tag": "Ammes ekshtensjovne lissie \"$1\"",
+ "version": "Låhkoe",
+ "specialpages": "Joekoen bielieh"
}
diff --git a/languages/i18n/sn.json b/languages/i18n/sn.json
index 94e2a258..fcec449f 100644
--- a/languages/i18n/sn.json
+++ b/languages/i18n/sn.json
@@ -1,122 +1,122 @@
{
- "@metadata": {
- "authors": [
- "Hakka"
- ]
- },
- "sunday": "Svondo",
- "monday": "Muvhuro",
- "tuesday": "Chipiri",
- "wednesday": "Chitatu",
- "thursday": "China",
- "friday": "Chishanu",
- "saturday": "Mugovera",
- "january": "Ndira",
- "february": "Kukadzi",
- "march": "Kurume",
- "april": "Kubvumbi",
- "may_long": "Chivabvu",
- "june": "Chikumi",
- "july": "Chikunguru",
- "august": "Nyamavhuvhu",
- "september": "Gunyana",
- "october": "Gumiguru",
- "november": "Mbudzi",
- "december": "Zvita",
- "january-gen": "Ndira",
- "february-gen": "Kukadzi",
- "march-gen": "Kurume",
- "april-gen": "Kubvumbi",
- "may-gen": "Chivabvu",
- "june-gen": "Chikumi",
- "july-gen": "Chikunguru",
- "august-gen": "Nyamavhuvhu",
- "september-gen": "Gunyana",
- "october-gen": "Gumiguru",
- "november-gen": "Mbudzi",
- "december-gen": "Zvita",
- "cancel": "Kanzura",
- "mytalk": "Hurukuro dzangu",
- "navigation": "Banguranyika",
- "qbedit": "Chinja",
- "help": "Rubatsiro",
- "search": "Tsvaga",
- "searchbutton": "Tsvaga",
- "go": "Enda",
- "searcharticle": "Enda",
- "history_short": "Zvemakare",
- "printableversion": "Rinoita kuprinta",
- "permalink": "Zvikochekero Zvisingachinje",
- "edit": "Chinja",
- "delete": "Bharanura",
- "protect": "Chengetedza",
- "talk": "Hurukuro",
- "toolbox": "Maturuzi",
- "otherlanguages": "Mimwe Mitauro",
- "currentevents": "Zvirikuitika",
- "currentevents-url": "Project:Zvirikuitika",
- "disclaimers": "Matandanyadzi",
- "edithelp": "Mashandurirwo",
- "mainpage": "Peji Rekutanga",
- "mainpage-description": "Peji Rekutanga",
- "portal": "Mukova wegutse",
- "youhavenewmessagesmulti": "Une mashoko matsva pa$1",
- "editsection": "chinja",
- "editold": "chinja",
- "nstab-main": "Gani",
- "viewsource": "Wona mabviro",
- "yourname": "Zita:",
- "yourpassword": "Password:",
- "yourpasswordagain": "Nyorazve password:",
- "remembermypassword": "Ndiyeuke (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "Gamuchirwa",
- "userlogin": "Gamuchirwa / Gadzira Akaunzi",
- "logout": "Chibuda",
- "userlogout": "Chibuda",
- "notloggedin": "Hauna kugamuchirwa",
- "createaccount": "Gadzira Akaunzi",
- "summary": "Muchidimbu:",
- "minoredit": "Uku kushandurwa kudiki",
- "watchthis": "Ringa peji rino",
- "savearticle": "Kotsa peji",
- "showpreview": "Ratidza chipandwa",
- "showdiff": "Ratidza zvasandurwa",
- "mypreferences": "Zvandinosarudza",
- "prefs-rc": "Zvaba Kuchinjwa",
- "searchresultshead": "Tsvaga",
- "youremail": "E-mail:",
- "username": "Zita:",
- "recentchanges": "Zvaba Kuchinjwa",
- "recentchangeslinked": "Zvinoenderana nezvachinjwa",
- "recentchangeslinked-feed": "Zvinoenderana nezvachinjwa",
- "recentchangeslinked-toolbox": "Zvinoenderana nezvachinjwa",
- "upload": "Isa fayera",
- "uploadbtn": "Isa fayera",
- "uploadnologin": "Hauna kugamuchirwa",
- "watchthisupload": "Ringa peji rino",
- "randompage": "Peji nhemwa",
- "move": "Chichinura",
- "movethispage": "Chichinura kupeji iri",
- "watchlist": "Zvandakarinda",
- "mywatchlist": "Zvandakarinda",
- "watch": "Rinda",
- "watchthispage": "Ringa peji rino",
- "prot_1movedto2": "[[$1]] rachichinurwa ku [[$2]]",
- "restriction-edit": "Chinja",
- "restriction-move": "Chichinura",
- "undelete-search-submit": "Tsvaga",
- "contributions": "Mushandisi Kanzatu",
- "mycontris": "Kanzatu kangu",
- "sp-contributions-submit": "Tsvaga",
- "whatlinkshere": "Zvakakochekera pano",
- "move-page-legend": "Chichinura peji",
- "movepagebtn": "Chichinura peji",
- "movereason": "Chikonzero",
- "allmessages": "Mashoko esystem",
- "tooltip-pt-preferences": "Zvandinosarudza",
- "tooltip-pt-logout": "Chibuda",
- "tooltip-ca-move": "Chichinura kupeji iri",
- "tooltip-p-logo": "Peji Rekutanga",
- "table_pager_limit_submit": "Enda",
- "specialpages": "Mapeji akakosha"
+ "@metadata": {
+ "authors": [
+ "Hakka"
+ ]
+ },
+ "sunday": "Svondo",
+ "monday": "Muvhuro",
+ "tuesday": "Chipiri",
+ "wednesday": "Chitatu",
+ "thursday": "China",
+ "friday": "Chishanu",
+ "saturday": "Mugovera",
+ "january": "Ndira",
+ "february": "Kukadzi",
+ "march": "Kurume",
+ "april": "Kubvumbi",
+ "may_long": "Chivabvu",
+ "june": "Chikumi",
+ "july": "Chikunguru",
+ "august": "Nyamavhuvhu",
+ "september": "Gunyana",
+ "october": "Gumiguru",
+ "november": "Mbudzi",
+ "december": "Zvita",
+ "january-gen": "Ndira",
+ "february-gen": "Kukadzi",
+ "march-gen": "Kurume",
+ "april-gen": "Kubvumbi",
+ "may-gen": "Chivabvu",
+ "june-gen": "Chikumi",
+ "july-gen": "Chikunguru",
+ "august-gen": "Nyamavhuvhu",
+ "september-gen": "Gunyana",
+ "october-gen": "Gumiguru",
+ "november-gen": "Mbudzi",
+ "december-gen": "Zvita",
+ "cancel": "Kanzura",
+ "mytalk": "Hurukuro dzangu",
+ "navigation": "Banguranyika",
+ "qbedit": "Chinja",
+ "help": "Rubatsiro",
+ "search": "Tsvaga",
+ "searchbutton": "Tsvaga",
+ "go": "Enda",
+ "searcharticle": "Enda",
+ "history_short": "Zvemakare",
+ "printableversion": "Rinoita kuprinta",
+ "permalink": "Zvikochekero Zvisingachinje",
+ "edit": "Chinja",
+ "delete": "Bharanura",
+ "protect": "Chengetedza",
+ "talk": "Hurukuro",
+ "toolbox": "Maturuzi",
+ "otherlanguages": "Mimwe Mitauro",
+ "currentevents": "Zvirikuitika",
+ "currentevents-url": "Project:Zvirikuitika",
+ "disclaimers": "Matandanyadzi",
+ "edithelp": "Mashandurirwo",
+ "mainpage": "Peji Rekutanga",
+ "mainpage-description": "Peji Rekutanga",
+ "portal": "Mukova wegutse",
+ "youhavenewmessagesmulti": "Une mashoko matsva pa$1",
+ "editsection": "chinja",
+ "editold": "chinja",
+ "nstab-main": "Gani",
+ "viewsource": "Wona mabviro",
+ "yourname": "Zita:",
+ "yourpassword": "Password:",
+ "yourpasswordagain": "Nyorazve password:",
+ "remembermypassword": "Ndiyeuke (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "Gamuchirwa",
+ "userlogin": "Gamuchirwa / Gadzira Akaunzi",
+ "logout": "Chibuda",
+ "userlogout": "Chibuda",
+ "notloggedin": "Hauna kugamuchirwa",
+ "createaccount": "Gadzira Akaunzi",
+ "summary": "Muchidimbu:",
+ "minoredit": "Uku kushandurwa kudiki",
+ "watchthis": "Ringa peji rino",
+ "savearticle": "Kotsa peji",
+ "showpreview": "Ratidza chipandwa",
+ "showdiff": "Ratidza zvasandurwa",
+ "mypreferences": "Zvandinosarudza",
+ "prefs-rc": "Zvaba Kuchinjwa",
+ "searchresultshead": "Tsvaga",
+ "youremail": "E-mail:",
+ "username": "Zita:",
+ "recentchanges": "Zvaba Kuchinjwa",
+ "recentchangeslinked": "Zvinoenderana nezvachinjwa",
+ "recentchangeslinked-feed": "Zvinoenderana nezvachinjwa",
+ "recentchangeslinked-toolbox": "Zvinoenderana nezvachinjwa",
+ "upload": "Isa fayera",
+ "uploadbtn": "Isa fayera",
+ "uploadnologin": "Hauna kugamuchirwa",
+ "watchthisupload": "Ringa peji rino",
+ "randompage": "Peji nhemwa",
+ "move": "Chichinura",
+ "movethispage": "Chichinura kupeji iri",
+ "watchlist": "Zvandakarinda",
+ "mywatchlist": "Zvandakarinda",
+ "watch": "Rinda",
+ "watchthispage": "Ringa peji rino",
+ "prot_1movedto2": "[[$1]] rachichinurwa ku [[$2]]",
+ "restriction-edit": "Chinja",
+ "restriction-move": "Chichinura",
+ "undelete-search-submit": "Tsvaga",
+ "contributions": "Mushandisi Kanzatu",
+ "mycontris": "Kanzatu kangu",
+ "sp-contributions-submit": "Tsvaga",
+ "whatlinkshere": "Zvakakochekera pano",
+ "move-page-legend": "Chichinura peji",
+ "movepagebtn": "Chichinura peji",
+ "movereason": "Chikonzero",
+ "allmessages": "Mashoko esystem",
+ "tooltip-pt-preferences": "Zvandinosarudza",
+ "tooltip-pt-logout": "Chibuda",
+ "tooltip-ca-move": "Chichinura kupeji iri",
+ "tooltip-p-logo": "Peji Rekutanga",
+ "table_pager_limit_submit": "Enda",
+ "specialpages": "Mapeji akakosha"
}
diff --git a/languages/i18n/so.json b/languages/i18n/so.json
index 7587cea3..b538424b 100644
--- a/languages/i18n/so.json
+++ b/languages/i18n/so.json
@@ -413,12 +413,10 @@
"passwordreset-emailelement": "Magaca gudagalka: $1\nEreysirka kumeelgaarka ah: $2",
"passwordreset-emailerror-capture": "E-mail xasuus ah ayaa la sameeyay, oo ka arki kartid hoosta,laakiin wuxuu ku guul dareestay in isticmaalaha loo diro: $1",
"changeemail": "Bedel ciwaanka E-mailka",
- "changeemail-header": "Bedel ciwaanka e-mailka akoonka",
"changeemail-oldemail": "Ciwaanka e-mailka hadda jiro:",
"changeemail-newemail": "Ciwaan e-mail oo cusub:",
"changeemail-none": "(waxna)",
"changeemail-submit": "Bedel e-mailka",
- "changeemail-cancel": "Ka noqo",
"bold_sample": "Far butac ah",
"bold_tip": "Far butac ah",
"italic_sample": "Farta caatada ah",
@@ -572,7 +570,6 @@
"searchrelated": "La xiriiro",
"searchall": "Dhamaan",
"showingresults": "Waxaa hoos laga heley{{PLURAL:$1|'''1''' natiijo|'''$1''' natiijooyin}} ka biloow #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Natiijada '''$1''' ee '''$3'''|Natiijooyinka '''$1 - $2''' oo ah '''$3'''}} ee '''$4'''",
"search-nonefound": "Wax natiijo oo ka soo baxay ma jirto wixii aad raadisay",
"powersearch-legend": "Sidii aad wax uugu raadin laheed",
"powersearch-ns": "ka raadi xarun magaceedka:",
@@ -795,7 +792,6 @@
"nmembers": " $1 {{PLURAL:$1|ka mid ah|ka mid ah}}",
"lonelypages": "Boggaga agoonta ah",
"uncategorizedpages": "Maqaalada aan la aruurin",
- "popularpages": "Boggaga caanka ah",
"prefixindex": "Dhamaan bogagga leh qoraalka hore",
"shortpages": "Boggaga gaaban",
"longpages": "Boggaga dhaadheer",
@@ -813,7 +809,6 @@
"pager-older-n": "{{PLURAL:$1|ka duqsan 1|ka duqsan $1}}",
"booksources": "Xogta buuga",
"booksources-search-legend": "Raadi xogta buuga",
- "booksources-go": "Soco",
"log": "Guda galayaasha",
"allpages": "Dhamaan bogagga",
"nextpage": "Bogga ku xiga ($1)",
@@ -865,7 +860,7 @@
"unwatch": "Ha waardiyeynin",
"unwatchthispage": "Jooji waardiyeyntiisa",
"watchlist-details": "{{PLURAL:$1|$1 bog|$1 boggag ah}} aa ku jirto liiskaaga waardiyaha, ma lagu darin boggaga wadahadalka.",
- "wlshowlast": "Itus wixii ka danbeeyay $1 saacadood $2 maalmood $3",
+ "wlshowlast": "Itus wixii ka danbeeyay $1 saacadood $2 maalmood",
"watchlist-options": "Dooqyada liiska waardiyaha",
"watching": "Daawasho...",
"enotif_subject_created": "{{SITENAME}} Bogga $1 Qof ayaa sameeyey {{gender:$2|$2}}",
@@ -1074,7 +1069,6 @@
"metadata-fields": "Sawirka qeybihiisa metadata oo ku tixan fariintaan waxaa lagu dari doonaa bogga sawirka meesha laga arko markii miiska metadata la qariyo.Kuwa kale waxaa loo qarinaa sida default.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-iimcategory": "Qeybta",
"exif-dc-rights": "Xuquuqaha",
- "watchlistall2": "dhamaan",
"namespacesall": "dhamaan",
"monthsall": "Dhamaan",
"confirmemail_noemail": "Kuma haysatid cinwaan E-boosto sax [[Special:Preferences|isticmaala dooqiisa]].",
diff --git a/languages/i18n/sq.json b/languages/i18n/sq.json
index cda9eba5..fc870a20 100644
--- a/languages/i18n/sq.json
+++ b/languages/i18n/sq.json
@@ -26,7 +26,8 @@
"לערי ריינהארט",
"아라",
"Gertakapllani",
- "OrvenBregu"
+ "OrvenBregu",
+ "Macofe"
]
},
"tog-underline": "Nënvizo lidhjet:",
@@ -89,35 +90,35 @@
"thu": "Enj",
"fri": "Pr",
"sat": "Sht",
- "january": "Janar",
- "february": "Shkurt",
- "march": "Mars",
- "april": "Prill",
+ "january": "janar",
+ "february": "shkurt",
+ "march": "mars",
+ "april": "prill",
"may_long": "Maj",
- "june": "Qershor",
- "july": "Korrik",
- "august": "Gusht",
- "september": "Shtator",
- "october": "Tetor",
- "november": "Nëntor",
- "december": "Dhjetor",
- "january-gen": "Janar",
- "february-gen": "Shkurt",
- "march-gen": "Mars",
- "april-gen": "Prill",
- "may-gen": "Maj",
- "june-gen": "Qershor",
+ "june": "qershor",
+ "july": "korrik",
+ "august": "gusht",
+ "september": "shtator",
+ "october": "tetor",
+ "november": "nëntor",
+ "december": "dhjetor",
+ "january-gen": "janar",
+ "february-gen": "shkurt",
+ "march-gen": "mars",
+ "april-gen": "prill",
+ "may-gen": "maj",
+ "june-gen": "qershor",
"july-gen": "korrik",
- "august-gen": "Gusht",
- "september-gen": "Shtator",
- "october-gen": "Tetor",
- "november-gen": "Nëntor",
- "december-gen": "Dhjetor",
+ "august-gen": "gusht",
+ "september-gen": "shtator",
+ "october-gen": "tetor",
+ "november-gen": "nëntor",
+ "december-gen": "dhjetor",
"jan": "Jan",
"feb": "Shku",
"mar": "Mar",
"apr": "Pri",
- "may": "Maj",
+ "may": "maj",
"jun": "Qer",
"jul": "Korr",
"aug": "Gush",
@@ -125,18 +126,18 @@
"oct": "Tet",
"nov": "Nën",
"dec": "Dhje",
- "january-date": "$1 Janar",
- "february-date": "Shkurt, <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
- "march-date": "Mars <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
- "april-date": "Prill <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
- "may-date": "$1 Maj",
- "june-date": "$1 Qershor",
- "july-date": "$1 Korrik",
- "august-date": "$1 Gusht",
- "september-date": "$1 Shtator",
- "october-date": "$1 Tetor",
- "november-date": "$1 Nëntor",
- "december-date": "$1 Dhjetor",
+ "january-date": "$1 janar",
+ "february-date": "$1 shkurt",
+ "march-date": "$1 mars",
+ "april-date": "$1 prill",
+ "may-date": "$1 maj",
+ "june-date": "$1 qershor",
+ "july-date": "$1 korrik",
+ "august-date": "$1 gusht",
+ "september-date": "$1 shtator",
+ "october-date": "$1 tetor",
+ "november-date": "$1 nëntor",
+ "december-date": "$1 dhjetor",
"pagecategories": "{{PLURAL:$1|Kategoria|Kategoritë}}",
"category_header": "Artikuj në kategorinë \"$1\"",
"subcategories": "Nën-kategori",
@@ -280,6 +281,8 @@
"hidetoc": "fshih",
"collapsible-collapse": "Ngushtoje",
"collapsible-expand": "Zgjeroje",
+ "confirmable-yes": "PO",
+ "confirmable-no": "Jo",
"thisisdeleted": "Shiko ose rikthe $1?",
"viewdeleted": "Do ta shikosh $1?",
"restorelink": "{{PLURAL:$1|një redaktim i fshirë|$1 redaktime të fshira}}",
@@ -328,6 +331,8 @@
"filerenameerror": "I pamundur riemërtimi i skedës \"$1\" në \"$2\".",
"filedeleteerror": "E pamundur fshirja e skedës \"$1\".",
"directorycreateerror": "I pamundur krijimi i direktorisë \"$1\".",
+ "directoryreadonlyerror": "Direktoria \"<span class=\"notranslate\" translate=\"asnjë\">$1</span>\" është vetëm e lexueshme",
+ "directorynotreadableerror": "Direktoria \"<span class=\"notranslate\" translate=\"asnjë\">$1</span>\" nuk është e lexueshme.",
"filenotfound": "E pamundur gjetja e skedës \"$1\".",
"unexpected": "Vlerë e papritur: \"$1\"=\"$2\".",
"formerror": "Gabim: Formulari nuk mund të dërgohet.",
@@ -350,6 +355,7 @@
"viewyourtext": "Ju mund të shikoni dhe të kopjoni tekstin e '''ndryshimeve tuaja''' tek kjo faqe:",
"protectedinterface": "Kjo faqe përmban tekstin e dritares së programit, për këtë arsye mbrohet për të shmangur abuzimet.",
"editinginterface": "'''Kujdes:''' Po redaktoni një faqe që përdoret për tekstin dritares së programit. \nNdryshimet në këtë faqe do të ndikojnë pamjen e dritares për përdoruesit e tjerë.\nPër përkthime, ju lutem konsideroni përdorimin e [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], projektin e lokalizimit MediaWiki.",
+ "translateinterface": "Të shtoni ose të ndryshojë përkthime për të gjitha wikis, ju lutem përdorimin e [//translatewiki.net/ translatewiki.net], MediaWiki lokalizimin e projektit.",
"cascadeprotected": "Kjo faqe është mbrojtur nga redaktimi pasi është përfshirë në {{PLURAL:$1|faqen|faqet}} e mëposhtme që {{PLURAL:$1|është|janë}} mbrojtur sipas metodës \"cascading\":\n$2",
"namespaceprotected": "Nuk ju lejohet redaktimi i faqeve në hapsirën '''$1'''.",
"customcssprotected": "Ju nuk keni leje për të redaktuar këtë faqe CSS, sepse ai përmban cilësimet personale tjetër user's.",
@@ -457,7 +463,7 @@
"mailerror": "Gabim duke dërguar postën: $1",
"acct_creation_throttle_hit": "Nuk lejoheni të krijoni më llogari pasi keni krijuar {{PLURAL:$1|1|$1}}.",
"emailauthenticated": "Adresa juaj është vërtetuar më $2 $3.",
- "emailnotauthenticated": "Adresa juaj <strong>nuk është vërtetuar</strong> akoma prandaj nuk mund të merrni e-mail.",
+ "emailnotauthenticated": "Adresa juaj email nuk është konfirmuar ende.\nAsnjë email nuk do të dërgohet për ndonjë nga karakteristikat e mëposhtme.",
"noemailprefs": "Detyrohet një adresë email-i për të përdorur këtë mjet.",
"emailconfirmlink": "Vërtetoni adresën tuaj",
"invalidemailaddress": "Posta elektronike nuk mund të pranohet kështu si është pasi ka format jo valid. Ju lutemi, vendoni një postë mirë të formatuar, ose zbrazeni fushën.",
@@ -469,6 +475,7 @@
"createaccount-text": "Dikush ka përdorur adresën tuaj për të hapur një llogari tek {{SITENAME}} ($4) të quajtur \"$2\" me fjalëkalimin \"$3\".\nDuhet të hyni brenda dhe të ndërroni fjalëkalimin tani nëse ky person jeni ju. Përndryshe shpërfilleni këtë mesazh.",
"login-throttled": "Keni bërë shumë tentime të njëpasnjëshme në fjalëkalimin e kësaj llogarie. Ju lutemi prisni para se te tentoni përsëri.",
"login-abort-generic": "login juaj ishte i pasuksesshëm - Ndërpre",
+ "login-migrated-generic": "Llogaria juaj ka emigruar, dhe emri juaj nuk ekzistojnë më në këtë wiki.",
"loginlanguagelabel": "Gjuha: $1",
"suspicious-userlogout": "Kërkesa juaj për të shkëputet u mohua sepse duket sikur është dërguar nga një shfletues të thyer ose caching proxy.",
"createacct-another-realname-tip": "* Emri i vërtetë nuk është i domosdoshëm: Nëse e jepni do të përmendeni si kontribues për punën që ke bërë.",
@@ -519,14 +526,12 @@
"passwordreset-emailsent-capture": "U dërgua një e-mail kujtesë, i cili tregohet më poshtë.",
"passwordreset-emailerror-capture": "U dërgua një e-mail kujtesë, i cili tregohet më poshtë, por dërgesa për tek përdoruesi qe e pamundur: $1",
"changeemail": "Ndrysho postën elektronike",
- "changeemail-header": "Ndrysho llogarinë e adresës së postës elektronike",
"changeemail-text": "Plotësoni këtë formular për të ndryshuar adresën tuaj të postës elektronike. Ju duhet të shkruani fjalëkalimin tuaj për të konfirmuar këtë ndryshim.",
"changeemail-no-info": "Ju duhet të identifikoheni në mënyrë që të keni të drejtë hyrjeje në këtë faqe.",
"changeemail-oldemail": "Posta elektronike e aktuale:",
"changeemail-newemail": "Posta elektronike e re:",
"changeemail-none": "(asgjë)",
"changeemail-submit": "Ndrysho postën elektronike",
- "changeemail-cancel": "Anulo",
"bold_sample": "Stil i theksuar i tekstit",
"bold_tip": "Stil i theksuar i tekstit",
"italic_sample": "Tekst i pjerrët",
@@ -769,7 +774,6 @@
"mergehistory-same-destination": "Burimi dhe faqja e përcaktimit nuk mund të jenë të njëjta",
"mergehistory-reason": "Arsyeja:",
"mergelog": "Regjistri i bashkimeve",
- "pagemerge-logentry": "u bashkua [[$1]] në [[$2]] (versione deri më $3)",
"revertmerge": "Ndaj",
"mergelogpagetext": "Më poshtë jepet një listë e bashkimeve së fundmi nga historiku i një faqeje në historikun e një faqeje tjetër.",
"history-title": "Historiku i redaktimeve të \"$1\"",
@@ -814,7 +818,6 @@
"searchrelated": "të ngjashme",
"searchall": "të gjitha",
"showingresults": "Më poshtë tregohen {{PLURAL:$1|'''1''' përfundim|'''$1''' përfundime}} duke filluar nga #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Rezultati '''$1''' nga '''$3'''|Rezultatet '''$1 - $2''' nga '''$3'''}} për '''$4'''",
"search-nonefound": "Nuk ka rezultate që përputhen me kërkesën.",
"powersearch-legend": "Kërkim i përparuar",
"powersearch-ns": "Kërkim në hapësira:",
@@ -1343,7 +1346,6 @@
"statistics": "Statistika",
"statistics-header-pages": "Statistikat e faqes",
"statistics-header-edits": "Statistikat e redaktimit",
- "statistics-header-views": "Statistikat e shikimit",
"statistics-header-users": "Statistikat e përdoruesve",
"statistics-header-hooks": "Statistikat të tjera",
"statistics-articles": "Përmbajtja e faqeve",
@@ -1352,13 +1354,9 @@
"statistics-files": "Skedat e ngarkuara",
"statistics-edits": "Redaktimet e faqes që kur {{SITENAME}} u regjistrua",
"statistics-edits-average": "Ndryshime mesatare për faqe",
- "statistics-views-total": "Shikimet gjithsej",
- "statistics-views-total-desc": "Shikimet tek faqet joekzistuese dhe faqet speciale nuk janë të përfshira",
- "statistics-views-peredit": "Shikimet për redaktim",
"statistics-users": "[[Special:ListUsers|Përdoruesit]] e regjistruar",
"statistics-users-active": "Përdoruesit aktiv",
"statistics-users-active-desc": "Përdoruesit që kanë së paku një veprim në {{PLURAL:$1|ditën|$1 ditët}} e fundit",
- "statistics-mostpopular": "Faqet më të shikuara",
"doubleredirects": "Përcjellime dopjo",
"doubleredirectstext": "Kjo faqe liston faqet përcjellëse tek faqet e tjera përcjellëse.\nSecili rresht përmban lidhjet tek përcjellimi i parë dhe përcjellimi i dytë, gjithashtu synimin e përcjellimit të dytë, që është zakonisht faqja synuese '''e vërtetë''', që faqja w parë duhej të ishte përcjellëse e kësaj faqeje.\n<del>Kalimet nga</del> hyrjet janë zgjidhur.",
"double-redirect-fixed-move": "[[$1]] u zhvendos, tani është gjendet në [[$2]]",
@@ -1390,7 +1388,6 @@
"uncategorizedtemplates": "Stampa të pakategorizuara",
"unusedcategories": "Kategori të papërdorura",
"unusedimages": "Figura të papërdorura",
- "popularpages": "Artikuj të frekuentuar shpesh",
"wantedcategories": "Kategori më të dëshiruara",
"wantedpages": "Artikuj më të dëshiruar",
"wantedpages-badtitle": "Titull i pavlefshëm në vendosjen e rezultateve: $1",
@@ -1438,7 +1435,6 @@
"querypage-disabled": "Kjo faqe speciale është çaktivizuar për arsye të performancës.",
"booksources": "Burime librash",
"booksources-search-legend": "Kërkim burimor librash",
- "booksources-go": "Shko",
"booksources-text": "Më posht është një listë me lidhje të cilët shesin ose përdorin libra dhe munden të kenë informacione për librat që kërkoni ju:",
"booksources-invalid-isbn": "ISBN-ja e dhënë nuk duket të jetë e vlefshme; kontrolloni oër gabime gjatë kopjimit nga burimi origjinal.",
"specialloguserlabel": "Performuesi:",
@@ -1553,7 +1549,7 @@
"wlheader-enotif": "Njoftimi me email është lejuar.",
"wlheader-showupdated": "Faqet që kanë ndryshuar nga vizita juaj e fundit do të tregohen të '''trasha'''",
"wlnote": "Më poshtë {{PLURAL:$1|është ndryshimi i fundit|janë '''$1''' ndryshimet e fundit}} në {{PLUARAL:$2:orën e fundit|'''$2''' orët e fundit}}, që nga $3, $4.",
- "wlshowlast": "Trego $1 orët $2 ditët $3",
+ "wlshowlast": "Trego $1 orët $2 ditët",
"watchlist-options": "Mundësitë e listës mbikqyrëse",
"watching": "Duke mbikqyrur...",
"unwatching": "Duke çmbikqyrur...",
@@ -1590,7 +1586,6 @@
"delete-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e faqeve të tilla ka qenë kufizuar për të parandaluar përçarjen aksidentale të {{SITENAME}}.",
"delete-warning-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e saj mund të ndërpresë operacionet e bazës së të dhënave të {{SITENAME}};\nvazhdoni me kujdes.",
"rollback": "Riktheji mbrapsh redaktimet",
- "rollback_short": "Riktheje",
"rollbacklink": "riktheje",
"rollbacklinkcount": "riktheni $1 {{PLURAL:$1|ndryshimin|ndryshiemt}}",
"rollbacklinkcount-morethan": "riktheni më tepër $1 {{PLURAL:$1|ndryshim|ndryshime}}",
@@ -1957,7 +1952,6 @@
"import": "Importoni faqe",
"importinterwiki": "Import ndër-wiki",
"import-interwiki-text": "Zgjidhni një wiki dhe titull faqeje për të importuar.\nDatat e versioneve dhe emrat e redaktuesve do të ruhen.\nTë gjitha veprimet e importit transwiki janë të regjistruara tek [[Special:Log/import|registri i importimeve]].",
- "import-interwiki-source": "Burimi wiki/faqe",
"import-interwiki-history": "Kopjo të gjitha versionet e historisë për këtë faqe",
"import-interwiki-templates": "Përfshini të gjitha stampat",
"import-interwiki-submit": "Importo",
@@ -1993,18 +1987,14 @@
"import-error-invalid": "Faqja \"$1\" nuk është importuar sepse emri i saj është i palejueshëm.",
"importlogpage": "Regjistri i importeve",
"importlogpagetext": "Importimet administrative të faqeve me historik redaktimi nga wiki-t e tjera.",
- "import-logentry-upload": "importoi [[$1]] nëpërmjet ngarkimit të skedave",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versione}}",
- "import-logentry-interwiki": "transwikoji $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$!1|version|versione}} nga $2",
"javascripttest": "Duke testuar JavaScript",
- "javascripttest-title": "Duke kryer testet $1",
"javascripttest-pagetext-noframework": "Kjo faqe është rezervuar për kryerjen e testimeve JavaScript.",
"javascripttest-pagetext-unknownframework": "Kornizë pune e panjohur testuese \"$1\".",
"javascripttest-pagetext-frameworks": "Ju lutemi zgjidhni njërën nga kornizat vijuese punuese të testimit: $1",
"javascripttest-pagetext-skins": "Zgjidhni një mostër për t'i kryer testimet:",
"javascripttest-qunit-intro": "Shiko [$1 dokumentacionin e testimit] në mediawiki.org.",
- "javascripttest-qunit-heading": "Platforma testuese JavaScript QUnit",
"tooltip-pt-userpage": "Faqja juaj e përdoruesit",
"tooltip-pt-anonuserpage": "Faqja e përdoruesve anonim nga kjo adresë IP",
"tooltip-pt-mytalk": "Faqja juaj e diskutimeve",
@@ -2092,7 +2082,6 @@
"simpleantispam-label": "Kontroll anti-spam.\n'''MOS''' e plotësoni këtë!",
"pageinfo-title": "Informacion për \" $1 \"",
"pageinfo-header-edits": "Redaktimet",
- "pageinfo-views": "Numri i shikimeve",
"pageinfo-watchers": "Numri i mbikqyrësve",
"pageinfo-edits": "Numri i redaktimeve",
"pageinfo-authors": "Numri i autorëve të veçantë",
@@ -2493,7 +2482,6 @@
"exif-urgency-low": "Ulët ( $1 )",
"exif-urgency-high": "E Lartë ( $1 )",
"exif-urgency-other": "Prioritet i përcaktuar nga përdoruesi ( $1 )",
- "watchlistall2": "të gjitha",
"namespacesall": "të gjitha",
"monthsall": "të gjitha",
"confirmemail": "Vërtetoni adresën tuaj",
@@ -2565,7 +2553,6 @@
"watchlisttools-edit": "Shih dhe redakto listën mbikqyrëse.",
"watchlisttools-raw": "Redaktoje drejtpërdrejt listën",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskutimet]])",
- "unknown_extension_tag": "Etiketë shtesë e panjohur \"$1\"",
"duplicate-defaultsort": "'''Kujdes:''' Renditja kryesore e çelësit \"$2\" refuzon renditjen e mëparshme kryesore të çelësit \"$1\".",
"version": "Versioni",
"version-extensions": "Zgjerime të instaluara",
@@ -2581,7 +2568,7 @@
"version-parser-function-hooks": "Parser goditjet e funksionit",
"version-hook-name": "Emri i goditjes",
"version-hook-subscribedby": "Abonuar nga",
- "version-version": "(Versioni $1)",
+ "version-version": "($1)",
"version-license": "Licensa",
"version-poweredby-credits": "Ky wiki është mundësuar nga '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "të tjerë",
@@ -2684,19 +2671,20 @@
"logentry-newusers-create2": "$1 krijoi një llogari $3",
"logentry-newusers-autocreate": "Llogaria $1 u krijua automatikisht",
"rightsnone": "(asgjë)",
+ "revdelete-summary": "përmbledhja redaktimit",
+ "feedback-adding": "Duke shtuar përshtypjen te faqja...",
+ "feedback-bugcheck": "Shumë mirë! Thjesht kontrolloni që nuk është një nga [$1 problemet e njohura].",
+ "feedback-bugnew": "E kontrollova. Raporto një problem të ri",
"feedback-bugornote": "Nëse jeni gati për të përshkruar një problem teknik me detaje ju lutemi [$1 raportoni një problem].\nPërndryshe, ju mund të formularin e thjeshtë më poshtë. Komenti juaj do të shtohet te faqja \"[$3 $2]\"\", së bashku me emrin tuaj të përdoruesit dhe shfletuesin të cilin jeni duke përdorur.",
- "feedback-subject": "Subjekti:",
- "feedback-message": "Mesazhi:",
"feedback-cancel": "Anulo",
- "feedback-submit": "Paraqit përshtypjet",
- "feedback-adding": "Duke shtuar përshtypjen te faqja...",
+ "feedback-close": "Përfunduar",
"feedback-error1": "Gabim: Rezultat i panjohur nga API",
"feedback-error2": "Gabim: Redaktimi dështoi",
"feedback-error3": "Gabim: Nuk ka përgjigje nga API",
+ "feedback-message": "Mesazhi:",
+ "feedback-subject": "Subjekti:",
+ "feedback-submit": "Dërgo",
"feedback-thanks": "Faleminderit! Përshtypja juaj është postuar në faqen \"[$2 $1]\".",
- "feedback-close": "Përfunduar",
- "feedback-bugcheck": "Shumë mirë! Thjesht kontrolloni që nuk është një nga [$1 problemet e njohura].",
- "feedback-bugnew": "E kontrollova. Raporto një problem të ri",
"searchsuggest-search": "Kërko",
"searchsuggest-containing": "përmban ...",
"api-error-badaccess-groups": "Ju nuk lejoheni të ngarkoni skeda në këtë wiki.",
@@ -2753,5 +2741,21 @@
"expand_templates_input": "Teksti me stampa:",
"expand_templates_output": "Parapamja",
"expand_templates_ok": "Shko",
- "expand_templates_remove_comments": "Hiq komentet"
+ "expand_templates_remove_comments": "Hiq komentet",
+ "special-characters-group-latin": "Latinisht",
+ "special-characters-group-latinextended": "Latanisht, zgjeruar",
+ "special-characters-group-ipa": "Alfabeti Fonetik Ndërkombëtar (IPA)",
+ "special-characters-group-symbols": "Simbolet",
+ "special-characters-group-greek": "Grezisht",
+ "special-characters-group-cyrillic": "Cirilik",
+ "special-characters-group-arabic": "Arabisht",
+ "special-characters-group-persian": "Persisht",
+ "special-characters-group-hebrew": "Hebraisht",
+ "special-characters-group-bangla": "Bengalisht",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singhalisht",
+ "special-characters-group-gujarati": "Guxharati",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json
index f1b2acdc..bf05562b 100644
--- a/languages/i18n/sr-ec.json
+++ b/languages/i18n/sr-ec.json
@@ -25,7 +25,8 @@
"Михајло Анђелковић",
"לערי ריינהארט",
"아라",
- "Nemo bis"
+ "Nemo bis",
+ "Aktron"
]
},
"tog-underline": "Подвлачење веза:",
@@ -53,7 +54,7 @@
"tog-shownumberswatching": "Прикажи број корисника који надгледају",
"tog-oldsig": "Текући потпис:",
"tog-fancysig": "Сматрај потпис као викитекст (без самоповезивања)",
- "tog-uselivepreview": "Користи тренутан преглед (експериментално)",
+ "tog-uselivepreview": "Користи тренутан преглед",
"tog-forceeditsummary": "Упозори ме када не унесем опис измене",
"tog-watchlisthideown": "Сакриј моје измене са списка надгледања",
"tog-watchlisthidebots": "Сакриј измене ботова са списка надгледања",
@@ -249,6 +250,7 @@
"disclaimers": "Одрицање одговорности",
"disclaimerpage": "Project:Одрицање одговорности",
"edithelp": "Помоћ при уређивању",
+ "helppage-top-gethelp": "Помоћ",
"mainpage": "Главна страна",
"mainpage-description": "Главна страна",
"policy-url": "Project:Правила",
@@ -276,8 +278,8 @@
"editold": "уреди",
"viewsourceold": "изворни код",
"editlink": "уреди",
- "viewsourcelink": "Извор",
- "editsectionhint": "Уредите одељак „$1“",
+ "viewsourcelink": "изворни код",
+ "editsectionhint": "Уреди одељак „$1“",
"toc": "Садржај",
"showtoc": "прикажи",
"hidetoc": "сакриј",
@@ -318,6 +320,7 @@
"error": "Грешка",
"databaseerror": "Грешка у бази података",
"databaseerror-text": "Дошло је до грешке у упиту базе података. Можда је у питању програмска грешка.",
+ "databaseerror-textcl": "Дошло је до грешке у упиту базе података.",
"databaseerror-query": "Упит: $1",
"databaseerror-function": "Функција: $1",
"databaseerror-error": "Грешка: $1",
@@ -335,6 +338,8 @@
"filerenameerror": "Не могу да преименујем датотеку „$1“ у „$2“.",
"filedeleteerror": "Не могу да обришем датотеку „$1“.",
"directorycreateerror": "Не могу да направим фасциклу „$1“.",
+ "directoryreadonlyerror": "Директоријум „$1“ је само за читање.",
+ "directorynotreadableerror": "Директоријум „$1“ није читљив.",
"filenotfound": "Не могу да пронађем датотеку „$1“.",
"unexpected": "Неочекивана вредност: „$1“=„$2“.",
"formerror": "Грешка: не могу да пошаљем образац",
@@ -345,7 +350,7 @@
"badtitle": "Неисправан наслов",
"badtitletext": "Наслов странице је неисправан, празан или је међујезички или међувики наслов погрешно повезан.\nМожда садржи знакове који се не могу користити у насловима.",
"perfcached": "Следећи подаци су кеширани и могу бити застарели. Кеш садржи највише {{PLURAL:$1|један резултат|$1 резултата|$1 резултата}}.",
- "perfcachedts": "Следећи подаци су кеширани и последњи пут су ажурирани $2 у $3. У кешу {{PLURAL:$4|је доступан највише један резултат|су доступна највише $4 резултата|је доступно највише $4 резултата}}.",
+ "perfcachedts": "Следећи подаци су кеширани и последњи пут су ажурирани $2 у $3. У кешу {{PLURAL:$4|1=је доступан највише један резултат|су доступна највише $4 резултата|је доступно највише $4 резултата}}.",
"querypage-no-updates": "Ажурирање ове странице је тренутно онемогућено.\nПодаци који се овде налазе могу бити застарели.",
"viewsource": "Изворни код",
"viewsource-title": "Приказ извора странице $1",
@@ -355,7 +360,8 @@
"viewsourcetext": "Можете читати и копирати садржај ове странице:",
"viewyourtext": "Можете да погледате и копирате извор '''ваших измена''' на овој страници:",
"protectedinterface": "Ова страница садржи текст корисничког окружења за софтвер на овом викију и заштићена је ради спречавања злоупотребе.\nДа бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
- "editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.\nДа бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
+ "editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.",
+ "translateinterface": "Да додате или промените преводе за све викије, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
"cascadeprotected": "Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:\n$2",
"namespaceprotected": "Немате дозволу да уређујете странице у именском простору '''$1'''.",
"customcssprotected": "Немате дозволу да мењате ову CSS страницу јер садржи личне поставке другог корисника.",
@@ -370,7 +376,7 @@
"invalidtitle-knownnamespace": "Неисправан наслов с именским простором „$2“ и текстом „$3“",
"invalidtitle-unknownnamespace": "Неисправан наслов с именским простором бр. $1 и текстом „$2“",
"exception-nologin": "Нисте пријављени",
- "exception-nologin-text": "[[Special:Userlogin|Пријавите се]] да бисте приступили овој страници или радњи.",
+ "exception-nologin-text": "Пријавите се да бисте приступили овој страници или радњи.",
"exception-nologin-text-manual": "Морате бити $1 да бисте приступили овој страници или радњи.",
"virus-badscanner": "Неисправна поставка: непознати скенер за вирусе: ''$1''",
"virus-scanfailed": "неуспешно скенирање (код $1)",
@@ -412,6 +418,8 @@
"userlogin-resetlink": "Заборавили сте податке за пријаву?",
"userlogin-resetpassword-link": "Заборавили сте лозинку?",
"userlogin-helplink2": "Помоћ при пријављивању",
+ "userlogin-loggedin": "Већ сте пријављени као {{GENDER:$1|$1}}.\nКористите доњи образац да бисте се пријавили као други корисник.",
+ "userlogin-createanother": "Отвори још један налог",
"createacct-emailrequired": "Адреса е-поште",
"createacct-emailoptional": "Адреса е-поште (опционо)",
"createacct-email-ph": "Унесите вашу адресу е-поште",
@@ -458,7 +466,7 @@
"passwordsent": "Нова лозинка је послата на е-адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
"blocked-mailpassword": "Вашој ИП адреси је онемогућено уређивање страница, као и могућност захтевања нове лозинке.",
"eauthentsent": "На наведену е-адресу је послат потврдни код.\nПре него што пошаљемо даљње поруке, пратите упутства с е-поште да бисте потврдили да сте ви отворили налог.",
- "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|сат времена|$1 сата|$1 сати}}.",
+ "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|1=последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|1=сат времена|$1 сата|$1 сати}}.",
"mailerror": "Грешка при слању поруке: $1",
"acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу ИП адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога|$1 налога}} претходни дан, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове ИП адресе тренутно не могу отворити више налога.",
"emailauthenticated": "Ваша е-адреса је потврђена $2 у $3.",
@@ -474,6 +482,7 @@
"createaccount-text": "Неко је отворио налог с вашом е-адресом на {{SITENAME}} ($4) под именом $2 и лозинком $3.\nПријавите се и промените своју лозинку.\n\nАко је ово грешка, занемарите ову поруку.",
"login-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
"login-abort-generic": "Неуспешна пријава – прекинуто",
+ "login-migrated-generic": "Ваш налог је мигриран и ваше корисничко више не постоји на овом викију.",
"loginlanguagelabel": "Језик: $1",
"suspicious-userlogout": "Ваш захтев за одјаву је одбијен јер је послат од стране неисправног прегледача или посредника.",
"createacct-another-realname-tip": "Право име није обавезно.\nАко изаберете да га унесете, оно ће бити коришћено за приписивање вашег рада.",
@@ -571,12 +580,13 @@
"anoneditwarning": "<strong>Упозорење:</strong> нисте пријављени. Ваша ИП адреса ће бити јавно видљива у историји ове странице ако начините било какву измену. Ако се <strong>[$1 пријавите]</strong> или <strong>[$2 отворите налог]</strong> ваше измене ће бити приписане вашем корисничком имену.",
"anonpreviewwarning": "''Нисте пријављени. Ваша ИП адреса ће бити забележена у историји ове странице.''",
"missingsummary": "'''Напомена:''' нисте унели опис измене.\nАко поново кликнете на „{{int:savearticle}}“, ваша измена ће бити сачувана без описа.",
+ "selfredirect": "<strong>Упозорење:</strong> преусмеравате ову страницу на њу саму.\nМожда вам је одредишна страница погрешна или уређујете погрешну страницу.\nАко још једном притиснете „{{int:savearticle}}“ преусмерење ће свеједно бити направљено.",
"missingcommenttext": "Унесите коментар испод.",
"missingcommentheader": "'''Напомена:''' нисте унели наслов овог коментара.\nАко поново кликнете на „{{int:savearticle}}“, ваша измена ће бити сачувана без наслова.",
"summary-preview": "Преглед описа:",
"subject-preview": "Преглед теме/наслова:",
"blockedtitle": "Корисник је блокиран",
- "blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог: <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварања било каквих упита.",
+ "blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог: <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
"autoblockedtext": "Ваша ИП адреса је блокирана јер ју је употребљавао други корисник, кога је {{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Не можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
"blockednoreason": "разлог није наведен",
"whitelistedittext": "За уређивање странице је потребно да будете $1.",
@@ -619,7 +629,7 @@
"editingsection": "Уређујете $1 (одељак)",
"editingcomment": "Уређујете $1 (нови одељак)",
"editconflict": "Сукобљене измене: $1",
- "explainconflict": "Неко други је у међувремену променио ову страницу.\nГорњи оквир садржи текст странице.\nВаше измене су приказане у доњем пољу.\nМораћете да унесете своје промене у постојећи текст.\n'''Само''' ће текст у горњем текстуалном оквиру бити сачуван када кликнете на „{{int:savearticle}}“.",
+ "explainconflict": "Неко други је у међувремену променио ову страницу.\nГорњи оквир садржи садашњи текст странице.\nВаше измене су приказане у доњем пољу.\nМораћете да унесете своје промене у садашњи текст странице.\n<strong>Само</strong> ће текст у горњем текстуалном оквиру бити сачуван када кликнете на „{{int:savearticle}}“.",
"yourtext": "Ваш текст",
"storedversion": "Ускладиштена измена",
"nonunicodebrowser": "'''Упозорење: ваш прегледач не подржава уникод.'''\nПромените га пре него што почнете с уређивањем.",
@@ -636,8 +646,8 @@
"templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на овој страници:",
"templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} у овом прегледу:",
"templatesusedsection": "{{PLURAL:$1|Шаблон|Шаблони}} у овом одељку:",
- "template-protected": "(заштићен)",
- "template-semiprotected": "(полузаштићен)",
+ "template-protected": "(заштићено)",
+ "template-semiprotected": "(полузаштићено)",
"hiddencategories": "Ова страница је члан {{PLURAL:$1|једне скривене категорије|$1 скривене категорије|$1 скривених категорија}}:",
"edittools": "<!-- Овај текст ће бити приказан испод обрасца за уређивање и отпремање. -->",
"edittools-upload": "-",
@@ -646,7 +656,7 @@
"sectioneditnotsupported-title": "Уређивање одељка није подржано",
"sectioneditnotsupported-text": "Уређивање одељка није подржано на овој страници.",
"permissionserrors": "Грешка у дозволи",
- "permissionserrorstext": "Немате овлашћење за ту радњу из {{PLURAL:$1|следећег|следећих}} разлога:",
+ "permissionserrorstext": "Немате овлашћење за ову радњу из {{PLURAL:$1|1=следећег|следећих}} разлога:",
"permissionserrorstext-withaction": "Немате дозволу за $2 из {{PLURAL:$1|следећег|следећих}} разлога:",
"recreate-moveddeleted-warn": "'''Упозорење: поново правите страницу која је претходно обрисана.'''\n\nРазмотрите да ли је прикладно да наставите с уређивањем ове странице.\nОвде је наведена историја брисања и премештања с образложењем:",
"moveddeleted-notice": "Ова страница је обрисана.\nИсторија њеног брисања и премештања налази се испод:",
@@ -663,12 +673,13 @@
"content-failed-to-parse": "Не могу да рашчланим садржај типа $2 за модел $1: $3",
"invalid-content-data": "Неисправни подаци садржаја",
"content-not-allowed-here": "Садржај модела „$1“ није дозвољен на страници [[$2]]",
- "editwarning-warning": "Ако напустите ову страницу, изгубићете све измене које сте направили.\nАко сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „{{int:prefs-editing}}“.",
+ "editwarning-warning": "Ако напустите ову страницу, изгубићете све измене које сте направили. Ако сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „{{int:prefs-editing}}“.",
"editpage-notsupportedcontentformat-title": "Формат садржаја није подржан",
"content-model-wikitext": "викитекст",
"content-model-text": "чист текст",
"content-model-javascript": "јаваскрипт",
"content-model-css": "CSS",
+ "content-json-empty-object": "Празан објекат",
"expensive-parserfunction-warning": "'''Упозорење:''' ова страница садржи превише позива за рашчлањивање.\n\nТребало би да има мање од $2 {{PLURAL:$2|позив|позива|позива}}, а сада има $1.",
"expensive-parserfunction-category": "Странице с превише позива за рашчлањивање",
"post-expand-template-inclusion-warning": "'''Упозорење:''' величина укљученог шаблона је превелика.\nНеки шаблони неће бити укључени.",
@@ -685,15 +696,15 @@
"parser-unstrip-loop-warning": "Утврђена је петља",
"parser-unstrip-recursion-limit": "Прекорачено је ограничење рекурзије ($1)",
"converter-manual-rule-error": "Пронађена је грешка у правилу за ручно претварање језика",
- "undo-success": "Измена се може вратити.\nПроверите разлике испод, па сачувајте измене.",
+ "undo-success": "Измена се може поништити.\nПроверите разлике испод, па сачувајте измене.",
"undo-failure": "Ова измена се не може поништити због сукоба измена.",
"undo-norev": "Не могу да вратим измену јер не постоји или је обрисана.",
"undo-nochange": "Изгледа да је измена већ поништена.",
"undo-summary": "Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]])",
"undo-summary-username-hidden": "Поништи измену $1 скривеног корисника",
"cantcreateaccounttitle": "Не могу да отворим налог",
- "cantcreateaccount-text": "Отварање налога с ове IP адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
- "cantcreateaccount-range-text": "Отварање налога са IP адреса у распону '''$1''', који укључује и вашу IP адресу ('''$4''') је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
+ "cantcreateaccount-text": "Отварање налога с ове ИП адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
+ "cantcreateaccount-range-text": "Отварање налога са ИП адреса у распону '''$1''', који укључује и вашу ИП адресу ('''$4''') је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
"viewpagelogs": "Погледај дневнике ове странице",
"nohistory": "Не постоји историја измена ове странице.",
"currentrev": "Текућа измена",
@@ -720,8 +731,8 @@
"history-feed-item-nocomment": "$1 у $2",
"history-feed-empty": "Тражена страница не постоји.\nМогуће да је обрисана с викија или је преименована.\nПокушајте да [[Special:Search|претражите вики]] за сличне странице.",
"rev-deleted-comment": "(опис измене уклоњен)",
- "rev-deleted-user": "(корисничко име је уклоњено)",
- "rev-deleted-event": "(историја је уклоњена)",
+ "rev-deleted-user": "(корисничко име уклоњено)",
+ "rev-deleted-event": "(детаљи дневника уклоњени)",
"rev-deleted-user-contribs": "[корисничко име или ИП адреса је уклоњена – измена је сакривена са списка доприноса]",
"rev-deleted-text-permission": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
"rev-deleted-text-unhide": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].\nИпак можете да [$1 видите ову измену] ако желите да наставите.",
@@ -734,7 +745,7 @@
"rev-suppressed-unhide-diff": "Једна од измена ове разлике је '''сакривена'''.\nДетаљи се налазе у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].\nИпак можете да [$1 видите ову разлику] ако желите да наставите.",
"rev-deleted-diff-view": "Једна од измена ове разлике је '''обрисана'''.\nИпак можете да видите ову разлику; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
"rev-suppressed-diff-view": "Једна од измена ове разлике је '''сакривена'''.\nИпак можете да видите ову разлику; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].",
- "rev-delundel": "прикажи/сакриј",
+ "rev-delundel": "промени видљивост",
"rev-showdeleted": "прикажи",
"revisiondelete": "Обриши/врати измене",
"revdelete-nooldid-title": "Нема тражене измене",
@@ -748,12 +759,13 @@
"revdelete-text-text": "Избрисане измене ће и даље бити видљиве у историји странице, али делови њиховог садржаја неће бити јавно доступну.",
"revdelete-text-file": "Избрисане верзије датотеке ће и даље бити видљиве у историји датотеке, али делови њиховог садржаја неће бити јавно доступну.",
"logdelete-text": "Избрисани уноси у дневницима ће и даље бити видљиви у дневницима, али делови њиховог садржаја неће бити јавно доступну.",
+ "revdelete-text-others": "Остали администратори ће и даље моћи да приступе скривеном садржају и врате га, осим ако се поставе додатна ограничења.",
"revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
- "revdelete-suppress-text": "Сакривање измена би требало користити '''само''' у следећим случајевима:\n* Злонамерни или погрдни подаци\n* Неприкладни лични подаци\n*: ''кућна адреса и број телефона, број банковне картице итд.''",
+ "revdelete-suppress-text": "Сакривање измена би требало користити <strong>само</strong> у следећим случајевима:\n* злонамерни или погрдни подаци\n* неприкладни лични подаци\n*: <em>кућна адреса и број телефона, број кредитне картице, ЈМБГ итд.</em>",
"revdelete-legend": "Ограничења видљивости",
- "revdelete-hide-text": "Текст измене",
+ "revdelete-hide-text": "Сакриј текст измене",
"revdelete-hide-image": "Сакриј садржај датотеке",
- "revdelete-hide-name": "Сакриј радњу и одредиште",
+ "revdelete-hide-name": "Сакриј циљ и параметре",
"revdelete-hide-comment": "Опис измене",
"revdelete-hide-user": "Кориснчко име уредника/ИП адреса",
"revdelete-hide-restricted": "Сакриј податке од администратора и других корисника",
@@ -807,7 +819,6 @@
"mergehistory-same-destination": "Изворна и одредишна страница не могу бити исте",
"mergehistory-reason": "Разлог:",
"mergelog": "Дневник спајања",
- "pagemerge-logentry": "је спојио [[$1]] у [[$2]] (све до измене $3)",
"revertmerge": "растави",
"mergelogpagetext": "Испод је списак најскоријих спајања историја двеју страница.",
"history-title": "Историја измена странице „$1“",
@@ -835,7 +846,7 @@
"shown-title": "Прикажи $1 {{PLURAL:$1|резултат|резултата|резултата}} по страници",
"viewprevnext": "Погледај ($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "'''Постоји и чланак под називом „[[:$1]]“.'''",
- "searchmenu-new": "<strong>Направите страницу „[[:$1]]“!</strong> {{PLURAL:$2|0=|Види такође разултате претраге.}}",
+ "searchmenu-new": "<strong>Направите страницу „[[:$1]]“!</strong> {{PLURAL:$2|0=|Види такође резултате претраге.}}",
"searchprofile-articles": "Чланци",
"searchprofile-images": "Датотеке",
"searchprofile-everything": "Све",
@@ -848,6 +859,8 @@
"search-result-category-size": "{{PLURAL:$1|1 члан|$1 члана|$1 чланова}}, ({{PLURAL:$2|1 поткатегорија|$2 поткатегорије|$2 поткатегорија}}, {{PLURAL:$3|1 датотека|$3 датотеке|$3 датотека}})",
"search-redirect": "(преусмерење $1)",
"search-section": "(одељак $1)",
+ "search-category": "(категорија $1)",
+ "search-file-match": "(подудара се садржај датотеке)",
"search-suggest": "Да ли сте мислили на: $1",
"search-interwiki-caption": "Братски пројекти",
"search-interwiki-default": "Резултати са $1:",
@@ -880,6 +893,11 @@
"prefs-personal": "Профил",
"prefs-rc": "Скорашње измене",
"prefs-watchlist": "Списак надгледања",
+ "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-watchlist-edits": "Највећи број измена у проширеном списку надгледања:",
@@ -972,6 +990,8 @@
"prefs-tokenwatchlist": "Жетон",
"prefs-diffs": "Разлике",
"prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
+ "prefswarning-warning": "Променили сте ваша подешавања али нисте их још сачували.\nАко не притиснете „$1“ ваша подешавања ће бити изгубљена.",
+ "prefs-tabs-navigation-hint": "Савет: можете користити типке са левом и десном стрелицом за кретање кроз картице.",
"email-address-validity-valid": "Е-адреса је исправна",
"email-address-validity-invalid": "Унесите исправну е-адресу",
"userrights": "Управљање корисничким правима",
@@ -992,6 +1012,7 @@
"userrights-changeable-col": "Групе које можете да промените",
"userrights-unchangeable-col": "Групе које не можете да промените",
"userrights-irreversible-marker": "$1*",
+ "userrights-conflict": "Сукоб промена корисничких права! Молимо проверите ваше измене.",
"userrights-removed-self": "Успешно сте себи скинули права. Због тога није вам дозвољен приступ овој страници.",
"group": "Група:",
"group-user": "Корисници",
@@ -1022,6 +1043,7 @@
"right-move": "премештање страница",
"right-move-subpages": "премештање страница с њиховим подстраницама",
"right-move-rootuserpages": "премештање основних корисничких страница",
+ "right-move-categorypages": "премештање категорија",
"right-movefile": "премештање датотека",
"right-suppressredirect": "прескакање стварања преусмерења при премештању страница",
"right-upload": "отпремање датотека",
@@ -1030,7 +1052,7 @@
"right-reupload-shared": "мењање датотека на дељеном складишту мултимедије",
"right-upload_by_url": "отпремање датотека са веб адресе",
"right-purge": "чишћење кеш меморије странице без потврде",
- "right-autoconfirmed": "Not be affected by IP-based rate limits",
+ "right-autoconfirmed": "без ограничавања ставки за ИП адресе",
"right-bot": "сматрање измена као аутоматски процес",
"right-nominornewtalk": "непоседовање малих измена на страницама за разговор отвара прозор за нове поруке",
"right-apihighlimits": "коришћење виших граница за упите из АПИ-ја",
@@ -1043,7 +1065,8 @@
"right-deletedtext": "прегледање обрисаног текста и измена између обрисаних измена",
"right-browsearchive": "претрага обрисаних страница",
"right-undelete": "враћање обрисаних страница",
- "right-suppressrevision": "прегледање и враћање измена које су сакривене од стране администратора",
+ "right-suppressrevision": "прегледање, скривање и враћање одређених измена страница од свих корисника",
+ "right-viewsuppressed": "прегледање измена скривених од свих корисника",
"right-suppressionlog": "гледање приватних дневника",
"right-block": "блокирање даљих измена других корисника",
"right-blockemail": "онемогућавање корисницима да шаљу е-поруке",
@@ -1080,6 +1103,7 @@
"right-override-export-depth": "извоз страница укључујући и повазене странице до дубине од пет веза",
"right-sendemail": "слање е-порука другим корисницима",
"right-passwordreset": "прегледање порука за обнављање лозинке",
+ "right-managechangetags": "прављење и/или брисање [[Special:Tags|ознака]] из базе података",
"newuserlogpage": "Дневник нових корисника",
"newuserlogpagetext": "Ово је историја нових корисника.",
"rightslog": "Дневник корисничких права",
@@ -1125,6 +1149,7 @@
"action-viewmywatchlist": "преглед вашег списак надгледања",
"action-viewmyprivateinfo": "прегледање ваших личних података",
"action-editmyprivateinfo": "уређивање ваших личних података",
+ "action-managechangetags": "прављење и/или брисање ознака из базе података",
"nchanges": "$1 {{PLURAL:$1|измена|измене|измена}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|измена од ваше последње посете}}",
"enhancedrc-history": "историја",
@@ -1140,7 +1165,7 @@
"recentchanges-label-plusminus": "Промена величине странице у бајтовима",
"recentchanges-legend-heading": "'''Легенда:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|списак нових страница]])",
- "rcnotefrom": "Испод су измене од <strong>$2</strong> (до <strong>$1</strong> измена).",
+ "rcnotefrom": "Испод {{PLURAL:$5|је измена|су измене}} од <strong>$3, $4</strong> (до <strong>$1</strong> приказано).",
"rclistfrom": "Прикажи нове измене почев од $2 $3",
"rcshowhideminor": "$1 мање измене",
"rcshowhideminor-show": "Прикажи",
@@ -1196,9 +1221,9 @@
"uploaderror": "Грешка при отпремању",
"upload-recreate-warning": "'''Упозорење: датотека с тим називом је обрисана или премештена.'''\n\nИсторија брисања и премештања се налази испод:",
"uploadtext": "Користите образац испод да бисте отпремили датотеке.\nЗа преглед или претрагу постојећих датотека, погледајте [[Special:FileList|списак отпремљених датотека]], поновна отпремања су наведена у [[Special:Log/upload|дневнику отпремања]], а брисања у [[Special:Log/delete|дневнику брисања]].\n\nДатотеку додајете на жељену страницу користећи следеће обрасце:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Слика.jpg]]</nowiki></code>''' за верзију слике у пуној величини\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Слика.png|200п|мини|лево|опис]]</nowiki></code>''' за верзију слике с величином од 200 пиксела која је приказана у засебном оквиру, заједно с описом.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Датотека.ogg]]</nowiki></code>''' за директно повезивање с датотеком без њеног приказивања",
- "upload-permitted": "Дозвољени типови датотека: $1.",
- "upload-preferred": "Препоручени типови датотека: $1.",
- "upload-prohibited": "Забрањени типови датотека: $1.",
+ "upload-permitted": "Дозвољени {{PLURAL:$2|тип|типови}} датотека: $1.",
+ "upload-preferred": "Препоручени {{PLURAL:$2|тип|типови}} датотека: $1.",
+ "upload-prohibited": "Забрањени {{PLURAL:$2|тип|типови}} датотека: $1.",
"uploadlogpage": "Дневник отпремања",
"uploadlogpagetext": "Испод је списак скорашњих слања.\nПогледајте [[Special:NewFiles|галерију нових датотека]] за лепши преглед.",
"filename": "Назив датотеке",
@@ -1263,7 +1288,7 @@
"upload-options": "Поставке слања",
"watchthisupload": "Надгледај ову датотеку",
"filewasdeleted": "Датотека с овим називом је раније послата, али је обрисана.\nПроверите $1 пре него што наставите с поновним слањем.",
- "filename-bad-prefix": "Назив датотеке коју шаљете почиње са '''\"$1\"''', а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
+ "filename-bad-prefix": "Назив датотеке коју шаљете почиње са <strong>„$1“</strong>, а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
"filename-prefix-blacklist": " #<!-- оставите овај ред онаквим какав јесте --> <pre>\n# Синтакса је следећа:\n# * Све од тарабе па до краја реда је коментар\n# * Сваки ред означава префикс типичних назива датотека које додељивају дигитални апарати\nCIMG # Касио\nDSC_ # Никон\nDSCF # Фуџи\nDSCN # Никон\nDUW # неки мобилни телефони\nIMG # опште\nJD # Џеноптик\nMGP # Пентакс\nPICT # разно\n #</pre> <!-- оставите овај ред онаквим какав јесте -->",
"upload-success-subj": "Успешно отпремање",
"upload-success-msg": "Датотека из [$2] је послата. Доступна је овде: [[:{{ns:file}}:$1]]",
@@ -1353,9 +1378,10 @@
"license": "Лиценца:",
"license-header": "Лиценца:",
"nolicense": "није изабрано",
+ "licenses-edit": "Уреди избор лиценци",
"license-nopreview": "(преглед није доступан)",
- "upload_source_url": "(исправна и јавно доступна адреса)",
- "upload_source_file": "(датотека на вашем рачунару)",
+ "upload_source_url": "(ваша изабрана датотека од исправних и јавно доступних адреса)",
+ "upload_source_file": "(ваша одабрана датотека са вашег рачунара)",
"listfiles-delete": "обриши",
"listfiles-summary": "Ова посебна страница приказује све послате датотеке.",
"listfiles_search_for": "Назив датотеке:",
@@ -1432,7 +1458,7 @@
"filedelete-maintenance": "Брисање и враћање датотека је привремено онемогућено због одржавања.",
"filedelete-maintenance-title": "Не могу да обришем датотеку",
"mimesearch": "MIME претрага",
- "mimesearch-summary": "Ова страница омогућава филтрирање датотека према њиховим MIME типовима.\nУлазни подаци: contenttype/subtype, нпр. <code>image/jpeg</code>.",
+ "mimesearch-summary": "Ова страница омогућава филтрирање датотека према њиховим MIME типовима.\nУлазни подаци: contenttype/subtype или contenttype/*, нпр. <code>image/jpeg</code>.",
"mimetype": "MIME врста:",
"download": "преузми",
"unwatchedpages": "Ненадгледане странице",
@@ -1449,12 +1475,12 @@
"randomincategory-invalidcategory": "„$1“ није ваљано име категорије",
"randomincategory-nopages": "Нема страница у категорији [[:Category:$1|$1]].",
"randomincategory-category": "Категорија:",
+ "randomincategory-legend": "Случајна страница у категорији",
"randomredirect": "Случајно преусмерење",
- "randomredirect-nopages": "Нема преусмерења у именском простору „$1”.",
+ "randomredirect-nopages": "Нема преусмерења у именском простору „$1“.",
"statistics": "Статистике",
"statistics-header-pages": "Странице",
"statistics-header-edits": "Измене",
- "statistics-header-views": "Прегледи",
"statistics-header-users": "Корисници",
"statistics-header-hooks": "Остало",
"statistics-articles": "Странице са садржајем",
@@ -1463,13 +1489,9 @@
"statistics-files": "Број послатих датотека",
"statistics-edits": "Број измена страница откад постоји {{SITENAME}}",
"statistics-edits-average": "Просечан број измена по страници",
- "statistics-views-total": "Укупно прегледа",
- "statistics-views-total-desc": "Прегледи непостојећих и посебних страница нису укључени",
- "statistics-views-peredit": "Прегледа по измени",
"statistics-users": "Регистровани [[Special:ListUsers|корисници]]",
"statistics-users-active": "Активни корисници",
- "statistics-users-active-desc": "Корисници који су извршили бар једну радњу {{PLURAL:$1|претходни дан|у последња $1 дана|у последњих $1 дана}}",
- "statistics-mostpopular": "Најпосећеније странице",
+ "statistics-users-active-desc": "Корисници који су извршили бар једну радњу {{PLURAL:$1|1=претходни дан|у последња $1 дана|у последњих $1 дана}}",
"pageswithprop": "Стране с особином стране",
"pageswithprop-legend": "Стране с особином стране",
"pageswithprop-text": "Ова страна излистава стране које имају одређену особину",
@@ -1508,9 +1530,9 @@
"uncategorizedtemplates": "Некатегорисани шаблони",
"unusedcategories": "Некоришћене категорије",
"unusedimages": "Некоришћене датотеке",
- "popularpages": "Популарне странице",
"wantedcategories": "Тражене категорије",
"wantedpages": "Тражене странице",
+ "wantedpages-summary": "Списак непостојећих страница са највише веза до њих, на овом списку се не налазе странице до којих воде преусмерења. За списак покварених преусмерења погледајте [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Неисправан наслов у низу резултата: $1",
"wantedfiles": "Тражене датотеке",
"wantedfiletext-cat": "Следеће датотеке се користе, али не постоје. Датотеке из других ризница могу бити наведене иако не постоје. Такве датотеке ће бити <del>поништене</del> са списка. Поред тога, странице које садрже непостојеће датотеке се налазе [[:$1|овде]].",
@@ -1519,7 +1541,7 @@
"wantedtemplates": "Тражени шаблони",
"mostlinked": "Странице с највише веза",
"mostlinkedcategories": "Категорије с највише веза",
- "mostlinkedtemplates": "Шаблони с највише веза",
+ "mostlinkedtemplates": "Странице с највише веза",
"mostcategories": "Странице с највише категорија",
"mostimages": "Датотеке с највише веза",
"mostinterwikis": "Странице са највише међувикија",
@@ -1569,10 +1591,12 @@
"pager-older-n": "{{PLURAL:$1|старији 1|старијих $1}}",
"suppress": "Надзор",
"querypage-disabled": "Ова посебна страница је онемогућена ради побољшања перформанси.",
+ "apihelp": "API помоћ",
+ "apihelp-no-such-module": "Модул „$1“ није пронађен.",
"booksources": "Штампани извори",
- "booksources-search-legend": "Тражење извора књиге",
+ "booksources-search-legend": "Тражи књижевне изворе",
"booksources-isbn": "ISBN:",
- "booksources-go": "Иди",
+ "booksources-search": "Претражи",
"booksources-text": "Испод се налази списак веза ка сајтовима који се баве продајом нових и половних књига, а који би могли имати додатне податке о књигама које тражите:",
"booksources-invalid-isbn": "Наведени ISBN број није исправан. Проверите да није дошло до грешке при умножавању из првобитног извора.",
"specialloguserlabel": "Извршилац:",
@@ -1618,7 +1642,7 @@
"listusers-noresult": "Корисник није пронађен.",
"listusers-blocked": "({{GENDER:$1|блокиран|блокирана|блокиран}})",
"activeusers": "Списак активних корисника",
- "activeusers-intro": "Ово је списак корисника који су били активни {{PLURAL:$1|претходни дан|у последња $1 дана|у последњих $1 дана}}.",
+ "activeusers-intro": "Ово је списак корисника који су били активни {{PLURAL:$1|1=претходни дан|у последња $1 дана|у последњих $1 дана}}.",
"activeusers-count": "$1 {{PLURAL:$1|радња|радње|радњи}} {{PLURAL:$3|претходни дан|у последња $3 дана|у последњих $3 дана}}",
"activeusers-from": "Прикажи кориснике почев од:",
"activeusers-hidebots": "Сакриј ботове",
@@ -1641,8 +1665,15 @@
"listgrouprights-removegroup-self": "уклањање {{PLURAL:$2|групе|група}} са свог налога: $1",
"listgrouprights-addgroup-self-all": "Додај све групе на сопствени налог",
"listgrouprights-removegroup-self-all": "Уклони све групе са сопственог налога",
+ "listgrouprights-namespaceprotection-header": "Ограничења именских простора",
"listgrouprights-namespaceprotection-namespace": "Именски простор",
+ "listgrouprights-namespaceprotection-restrictedto": "Права потребна за уређивање",
"trackingcategories-name": "Име поруке",
+ "trackingcategories-desc": "Које странице се налазе у категорији",
+ "noindex-category-desc": "Странице које у себи имају магичну реч <code><nowiki>__NOINDEX__</nowiki></code>.",
+ "index-category-desc": "Странице које у себи имају магичну реч <code><nowiki>__INDEX__</nowiki></code> и самим тим су индексиране од стране робота.",
+ "broken-file-category-desc": "Странице које имају везе до непостојећих датотека.",
+ "hidden-category-category-desc": "Категорије које у себи имају магичну реч <code><nowiki>__HIDDENCAT__</nowiki></code> и самим тим се не приказују у одељку за категорије на страницама.",
"trackingcategories-nodesc": "Опис није доступан.",
"trackingcategories-disabled": "Категорија је онемогућена",
"mailnologin": "Нема адресе за слање",
@@ -1668,10 +1699,10 @@
"emailsubject": "Наслов:",
"emailmessage": "Порука:",
"emailsend": "Пошаљи",
- "emailccme": "Пошаљи ми примерак поруке е-поштом",
- "emailccsubject": "Примерак ваше поруке за $1: $2",
+ "emailccme": "Пошаљи ми копију поруке на моју е-пошту.",
+ "emailccsubject": "Копија ваше поруке кориснику $1: $2",
"emailsent": "Порука је послата",
- "emailsenttext": "Ваша порука је послата е-поштом.",
+ "emailsenttext": "Ваша е-порука је послата.",
"emailuserfooter": "Ову е-поруку је {{GENDER:|послао|послала|послао}} $1 кориснику $2 путем е-поште с викија {{SITENAME}}.",
"usermessage-summary": "Слање системске поруке.",
"usermessage-editor": "Уређивач системских порука",
@@ -1698,7 +1729,7 @@
"wlheader-enotif": "Обавештење е-поруком је омогућено.",
"wlheader-showupdated": "Странице које су измењене откад сте их последњи пут посетили су '''подебљане'''.",
"wlnote": "Испод {{PLURAL:$1|је последња измена|су последње '''$1''' измене|је последњих '''$1''' измена}} у {{PLURAL:$2|претходном сату|претходна '''$2''' сата|претходних '''$2''' сати}}, закључно са $3, $4.",
- "wlshowlast": "Прикажи последњих $1 сати, $2 дана, $3",
+ "wlshowlast": "Прикажи последњих $1 сати, $2 дана",
"watchlist-options": "Поставке списка надгледања",
"watching": "Надгледање…",
"unwatching": "Прекидање надгледања…",
@@ -1724,7 +1755,7 @@
"deletepage": "Обриши страницу",
"confirm": "Потврди",
"excontent": "садржај је био: „$1“",
- "excontentauthor": "садржај је био: „$1“ (а једини уредник је био „[[Special:Contribs/$2|$2]]“)",
+ "excontentauthor": "садржај је био: „$1“ (а једини уредник [[Special:Contribs/$2|$2]])",
"exbeforeblank": "садржај пре брисања је био: „$1“",
"delete-confirm": "Брисање странице „$1“",
"delete-legend": "Обриши",
@@ -1747,7 +1778,6 @@
"deleteprotected": "Не можете обрисати ову страницу зато што је заштићена.",
"deleting-backlinks-warning": "'''Упозорење:''' бришете страницу која је укључена у [[Special:WhatLinksHere/{{FULLPAGENAME}}|друге странице]] или друге странице воде на њу.",
"rollback": "Врати измене",
- "rollback_short": "Врати",
"rollbacklink": "врати",
"rollbacklinkcount": "врати $1 {{PLURAL:$1|измену|измене|измена}}",
"rollbacklinkcount-morethan": "врати више од $1 {{PLURAL:$1|измене|измене|измена}}",
@@ -1796,6 +1826,7 @@
"protect-othertime": "Друго време:",
"protect-othertime-op": "друго време",
"protect-existing-expiry": "Постојеће време истека: $2 у $3",
+ "protect-existing-expiry-infinity": "Постојеће време истека: трајно",
"protect-otherreason": "Други/додатни разлог:",
"protect-otherreason-op": "Други разлог",
"protect-dropdown": "* Најчешћи разлози заштићивања\n** Прекомерни вандализам\n** Непожељне поруке\n** Непродуктивни рат измена\n** Страница великог промета",
@@ -1833,7 +1864,7 @@
"undeleteinvert": "Обрни избор",
"undeletecomment": "Разлог:",
"undeletedrevisions": "{{PLURAL:$1|Измена је враћена|$1 измене су враћене|$1 измена је враћено}}",
- "undeletedrevisions-files": "$1 {{PLURAL:$1|1 измена|измене|измена}} и $2 {{PLURAL:$2|1 датотека је враћена|датотеке су враћене|датотека је враћено}}",
+ "undeletedrevisions-files": "$1 {{PLURAL:$1|измена|измене|измена}} и $2 {{PLURAL:$2|датотека је враћена|датотеке су враћене|датотека је враћено}}",
"undeletedfiles": "{{PLURAL:$1|Датотека је враћена|$1 датотеке су враћене|$1 датотека је враћено}}",
"cannotundelete": "Враћање није успело:\n$1",
"undeletedpage": "'''Страница $1 је враћена'''\n\nПогледајте [[Special:Log/delete|историју брисања]] за записе о скорашњим брисањима и враћањима.",
@@ -1922,7 +1953,7 @@
"ipb-disableusertalk": "Забрани овом кориснику да уређује своју страницу за разговор док је блокиран",
"ipb-change-block": "Поново блокирај корисника с овим поставкама",
"ipb-confirm": "Потврди блокирање",
- "badipaddress": "Неисправна IP адреса",
+ "badipaddress": "Неисправна ИП адреса",
"blockipsuccesssub": "Блокирање је успело",
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] је {{GENDER:$1|блокиран|блокирана|блокиран}}.<br />\nБлокирања можете да погледате [[Special:BlockList|овде]].",
"ipb-blockingself": "Овом радњом ћете блокирати себе! Јесте ли сигурни да то желите?",
@@ -1931,9 +1962,9 @@
"ipb-unblock-addr": "Деблокирај $1",
"ipb-unblock": "Деблокирај корисничко име или ИП адресу",
"ipb-blocklist": "Погледај постојећа блокирања",
- "ipb-blocklist-contribs": "Доприноси за $1",
+ "ipb-blocklist-contribs": "Доприноси за {{GENDER:$1|$1}}",
"unblockip": "Деблокирај корисника",
- "unblockiptext": "Користите образац испод да бисте вратили право писања блокираној IP адреси или корисничком имену.",
+ "unblockiptext": "Користите образац испод да бисте вратили право писања блокираној ИП адреси или корисничком имену.",
"ipusubmit": "Уклони ову блокаду",
"unblocked": "[[User:$1|$1]] је деблокиран",
"unblocked-range": "$1 је деблокиран",
@@ -1994,7 +2025,7 @@
"unblock-hideuser": "Не можете деблокирати овог корисника јер је његово корисничко име сакривено.",
"ipb_cant_unblock": "Грешка: блокада $1 не постоји. Можда је корисник деблокиран.",
"ipb_blocked_as_range": "Грешка: ИП адреса $1 није директно блокирана и не може да се деблокира.\nОна је блокирана као део блокаде $2, која може бити деблокирана.",
- "ip_range_invalid": "Неисправан распод ИП адреса.",
+ "ip_range_invalid": "Неисправан распон ИП адреса.",
"ip_range_toolarge": "Опсежна блокирања већа од /$1 нису дозвољена.",
"proxyblocker": "Блокер посредника",
"proxyblockreason": "Ваша ИП адреса је блокирана јер представља отворени посредник.\nОбратите се вашем добављачу интернет услуга или техничку подршку и обавестите их о овом озбиљном безбедносном проблему.",
@@ -2111,7 +2142,7 @@
"filemissing": "Недостаје датотека",
"thumbnail_error": "Грешка при стварању минијатуре: $1",
"djvu_page_error": "DjVu страница је недоступна",
- "djvu_no_xml": "Не могу да преузмем XML за датотеку DjVu.",
+ "djvu_no_xml": "Не могу да преузмем XML за DjVu датотеку.",
"thumbnail-temp-create": "Не могу да направим привремену датотеку минијатуре",
"thumbnail-dest-create": "Не могу да сачувам минијатуру у одредишту",
"thumbnail_invalid_params": "Неисправни параметри за минијатуру",
@@ -2122,6 +2153,8 @@
"import": "Увоз страница",
"importinterwiki": "Међувики увоз",
"import-interwiki-text": "Изаберите вики и наслов странице за увоз.\nДатуми и имена уредника ће бити сачувани.\nСве радње при увозу с других викија су забележене у [[Special:Log/import|дневнику увоза]].",
+ "import-interwiki-sourcewiki": "Изворна вики:",
+ "import-interwiki-sourcepage": "Изворна страница:",
"import-interwiki-history": "Копирај све верзије историје за ову страницу",
"import-interwiki-templates": "Укључи све шаблоне",
"import-interwiki-submit": "Увези",
@@ -2162,18 +2195,15 @@
"import-rootpage-nosubpage": "Именски простор „$1“ основне странице не дозвољава подстранице.",
"importlogpage": "Дневник увоза",
"importlogpagetext": "Административни увози страница с историјама измена с других викија.",
- "import-logentry-upload": "је увезао [[$1]] отпремањем датотеке",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|измена увезена|измене увезене|измена увезено}}",
- "import-logentry-interwiki": "је увезао $1 с другог викија",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|измена увезена|измене увезене|измена увезено}} из $2",
"javascripttest": "Јаваскрипт тест",
- "javascripttest-title": "Извршавање тестова за $1",
"javascripttest-pagetext-noframework": "Ова страница је резервисана за извршавање јаваскрипт тестова.",
"javascripttest-pagetext-unknownframework": "Непознати радни оквир „$1“.",
+ "javascripttest-pagetext-unknownaction": "Непозната радња „$1“.",
"javascripttest-pagetext-frameworks": "Изаберите један од следећих радних оквира: $1",
"javascripttest-pagetext-skins": "Изаберите с којом темом желите да покренете пробу:",
"javascripttest-qunit-intro": "Погледајте [$1 документацију за тестирање] на mediawiki.org.",
- "javascripttest-qunit-heading": "Медијавикијин пакет за тестирање – QUnit",
"tooltip-pt-userpage": "Ваша корисничка страница",
"tooltip-pt-anonuserpage": "Корисничка страница за ИП адресу с које уређујете",
"tooltip-pt-mytalk": "Ваша страница за разговор",
@@ -2183,6 +2213,7 @@
"tooltip-pt-mycontris": "Списак ваших доприноса",
"tooltip-pt-login": "Препоручујемо вам да се пријавите, иако то није обавезно.",
"tooltip-pt-logout": "Одјавите се",
+ "tooltip-pt-createaccount": "Охрабрујемо вас да отворите налог и пријавите се али то није обавезно",
"tooltip-ca-talk": "Разговор о страници са садржајем",
"tooltip-ca-edit": "Можете да уређујете ову страницу. Користите претпреглед пре снимања",
"tooltip-ca-addsection": "Започните нови одељак",
@@ -2212,6 +2243,7 @@
"tooltip-feed-atom": "Атом довод ове странице",
"tooltip-t-contributions": "Погледајте списак доприноса овог корисника",
"tooltip-t-emailuser": "Пошаљите е-поруку овом кориснику",
+ "tooltip-t-info": "Више информација о овој страници",
"tooltip-t-upload": "Пошаљите датотеке",
"tooltip-t-specialpages": "Списак свих посебних страница",
"tooltip-t-print": "Верзија ове странице за штампање",
@@ -2263,8 +2295,8 @@
"creditspage": "Аутори странице",
"nocredits": "Не постоје подаци о аутору ове странице.",
"spamprotectiontitle": "Филтер за заштиту од непожељних порука",
- "spamprotectiontext": "Страница коју желите да сачувате је блокирана од филтера против непожељних порука.\nОво је вероватно изазвано везом до спољашњег сајта који се налази на црној листи.",
- "spamprotectionmatch": "Следећи текст је изазвао наш филтер за нежељене поруке: $1",
+ "spamprotectiontext": "Филтера против нежељених порука је блокирао чување ове странице.\nОво је вероватно изазвано везом до спољашњег сајта који се налази на црној листи.",
+ "spamprotectionmatch": "Следећи текст је активирао наш филтер за нежељене поруке: $1",
"spambot_username": "Чишћење непожељних порука у Медијавикији",
"spam_reverting": "Враћам на последњу измену која не садржи везе до $1",
"spam_blanking": "Све измене садрже везе до $1. Чистим",
@@ -2285,7 +2317,6 @@
"pageinfo-robot-policy": "Индексирање од стране робота",
"pageinfo-robot-index": "Дозвољено",
"pageinfo-robot-noindex": "Није дозвољено",
- "pageinfo-views": "Број прегледа",
"pageinfo-watchers": "Број надгледача странице",
"pageinfo-few-watchers": "Мање од $1 {{PLURAL:$1|пратиоца|пратилаца}}",
"pageinfo-redirects-name": "Број преусмерења на ову страницу",
@@ -2388,13 +2419,13 @@
"hours-ago": "Пре $1 {{PLURAL:$1|сат|сата|сати}}",
"minutes-ago": "Пре $1 {{PLURAL:$1|минут|минута}}",
"seconds-ago": "Пре $1 {{PLURAL:$1|секунда|секунди}}",
- "monday-at": "Понедељак у $1",
- "tuesday-at": "Уторак у $1",
- "wednesday-at": "Среда у $1",
- "thursday-at": "Четвртак у $1",
- "friday-at": "Петак у $1",
- "saturday-at": "Субота у $1",
- "sunday-at": "Недеља у $1",
+ "monday-at": "у понедељак у $1",
+ "tuesday-at": "у уторак у $1",
+ "wednesday-at": "у среду у $1",
+ "thursday-at": "у четвртак у $1",
+ "friday-at": "у петак у $1",
+ "saturday-at": "у суботу у $1",
+ "sunday-at": "у недељу у $1",
"yesterday-at": "Јуче у $1",
"bad_image_list": "Формат је следећи:\n\nРазматрају се само набрајања (редови који почињу са звездицом).\nПрва веза у реду мора да буде веза до неисправне датотеке.\nСве даљње везе у истом реду сматрају се изузецима.",
"variantname-zh-hans": "hans",
@@ -2804,7 +2835,6 @@
"exif-urgency-low": "Ниско ($1)",
"exif-urgency-high": "Високо ($1)",
"exif-urgency-other": "Прилагођени приоритет ($1)",
- "watchlistall2": "све",
"namespacesall": "сви",
"monthsall": "све",
"confirmemail": "Потврда е-адресе",
@@ -2855,6 +2885,7 @@
"imgmultigo": "Иди!",
"imgmultigoto": "Иди на страницу $1",
"img-lang-default": "(подразумевани језик)",
+ "img-lang-info": "Прикажи ову слику на $1. $2",
"img-lang-go": "Иди",
"ascending_abbrev": "раст.",
"descending_abbrev": "опад.",
@@ -2879,7 +2910,7 @@
"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": "Наслови на вашем списку надгледања су приказани испод.\nДа бисте уклонили наслов, означите квадратић до њега и кликните на „{{int:Watchlistedit-normal-submit}}“.\nМожете и да [[Special:EditWatchlist/raw|уредите сиров списак]].",
"watchlistedit-normal-submit": "Уклони наслове",
"watchlistedit-normal-done": "{{PLURAL:$1|1=Једна страница је уклоњена|$1 странице су уклоњене|$1 страница је уклоњено}} с вашег списка надгледања:",
"watchlistedit-raw-title": "Измени сиров списак надгледања",
@@ -2890,11 +2921,11 @@
"watchlistedit-raw-done": "Ваш списак надгледања је ажуриран.",
"watchlistedit-raw-added": "{{PLURAL:$1|1=Додат је један наслов|Додата су $1 наслова|Додато је $1 наслова}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 наслов је уклоњен|Уклоњена су $1 наслова|Уклоњено је $1 наслова}}:",
- "watchlistedit-clear-title": "Испразни списак надгледања",
+ "watchlistedit-clear-title": "Списак надгледања испражњен",
"watchlistedit-clear-legend": "Испразни списак надгледања",
"watchlistedit-clear-explain": "Сви наслови ће бити уклоњени из вашег списка надгледања.",
"watchlistedit-clear-titles": "Наслови:",
- "watchlistedit-clear-submit": "Испразни списак надгледања (Ово је трајно!)",
+ "watchlistedit-clear-submit": "Испразни списак надгледања (Ово је неповратно!)",
"watchlistedit-clear-done": "Ваш списак надгледања је испражњен.",
"watchlistedit-clear-removed": "{{PLURAL:$1|1 наслов је уклоњен|$1 наслова су уклоњена|$1 наслова је уклоњено}}:",
"watchlistedit-too-many": "Има превише страница за приказ овде.",
@@ -2956,7 +2987,6 @@
"hebrew-calendar-m12-gen": "Елул",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|разговор]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "Непозната ознака проширења „$1“",
"duplicate-defaultsort": "'''Упозорење:''' подразумевани кључ сврставања „$2“ мења некадашњи кључ „$1“.",
"version": "Верзија",
"version-extensions": "Инсталирана проширења",
@@ -2973,7 +3003,7 @@
"version-parser-function-hooks": "Куке",
"version-hook-name": "Назив куке",
"version-hook-subscribedby": "Пријављено од",
- "version-version": "(издање $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[нема имена]",
"version-svn-revision": "(изм. $2)",
"version-license": "Медијавики лиценца",
@@ -2985,17 +3015,21 @@
"version-ext-colheader-description": "Опис",
"version-ext-colheader-credits": "Аутори",
"version-license-title": "Лиценца за $1",
+ "version-license-not-found": "За ову екстензију није нађена информација о лиценци.",
"version-poweredby-credits": "Овај вики покреће '''[https://www.mediawiki.org/ Медијавики]''', ауторска права © 2001-$1 $2.",
"version-poweredby-others": "остали",
"version-poweredby-translators": "translatewiki.net преводиоци",
"version-credits-summary": "Желели бисмо да захвалимо следећим људима на њиховом доприносу [[Special:Version|Медијавикији]].",
- "version-license-info": "Медијавики је слободан софтвер можете га редистрибуирати и/или модификовати под условима ГНУ-ове опште јавне лиценце верзија 2 или сваке следеће коју објави Задужбина за слободан софтвер.\n\nМедијавики се редистрибуирати у нади да ће бити од користи, али БЕЗ ИКАКВЕ ГАРАНЦИЈЕ чак и без ПОДРАЗУМЕВАНЕ ГАРАНЦИЈЕ ФУНКЦИОНАЛНОСТИ или ПРИКЛАДНОСТИ ЗА ОДРЕЂЕНЕУ НАМЕНУ. Погледајте ГНУ-ову општу јавну лиценцу за више информација.\n\nТребало би да сте примили [{{SERVER}}{{SCRIPTPATH}}/COPYING примерак ГНУ-ове опште јавне лиценце] заједно са овим програмом. Ако нисте, пишите на Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA или [//www.gnu.org/licenses/old-licenses/gpl-2.0.html прочитајте овде].",
+ "version-license-info": "Медијавики је слободан софтвер можете га редистрибуирати и/или модификовати под условима ГНУ-ове опште јавне лиценце верзија 2 или сваке следеће коју објави Задужбина за слободан софтвер.\n\nМедијавики се редистрибуира у нади да ће бити од користи, али БЕЗ ИКАКВЕ ГАРАНЦИЈЕ чак и без ПОДРАЗУМЕВАНЕ ГАРАНЦИЈЕ ФУНКЦИОНАЛНОСТИ или ПРИКЛАДНОСТИ ЗА ОДРЕЂЕНЕУ НАМЕНУ. Погледајте ГНУ-ову општу јавну лиценцу за више информација.\n\nТребало би да сте добили [{{SERVER}}{{SCRIPTPATH}}/COPYING примерак ГНУ-ове опште јавне лиценце] заједно са овим програмом. Ако нисте, пишите на Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA или [//www.gnu.org/licenses/old-licenses/gpl-2.0.html прочитајте овде].",
"version-software": "Инсталирани софтвер",
"version-software-product": "Производ",
"version-software-version": "Верзија",
"version-entrypoints": "Адресе улазне тачке",
"version-entrypoints-header-entrypoint": "Улазна тачка",
"version-entrypoints-header-url": "Адреса",
+ "version-libraries": "Инсталиране библиотеке",
+ "version-libraries-library": "Библиотека",
+ "version-libraries-version": "Верзија",
"redirect": "Преусмерење на датотеку, корисника, страницу или измену",
"redirect-legend": "Преусмери на датотеку или страницу",
"redirect-submit": "Иди",
@@ -3030,6 +3064,7 @@
"specialpages-group-wiki": "Подаци и алати",
"specialpages-group-redirects": "Преусмеравање посебних страница",
"specialpages-group-spam": "Алатке против непожељних порука",
+ "specialpages-group-developer": "Програмерски алати",
"blankpage": "Празна страница",
"intentionallyblankpage": "Ова страница је намерно остављена празном.",
"external_image_whitelist": " #Оставите овај ред онаквим какав јесте<pre>\n#Испод додајте одломке регуларних израза (само део који се налази између //)\n#Они ће бити упоређени с адресама спољашњих слика\n#Оне које се поклапају биће приказане као слике, а преостале као везе до слика\n#Редови који почињу с тарабом се сматрају коментарима\n#Сви уноси су осетљиви на мала и велика слова\n\n#Додајте све одломке регуларних израза изнад овог реда. Овај ред не дирајте</pre>",
@@ -3042,12 +3077,42 @@
"tags-tag": "Назив ознаке",
"tags-display-header": "Изглед на списковима измена",
"tags-description-header": "Опис значења",
+ "tags-source-header": "Извор",
"tags-active-header": "Активна?",
"tags-hitcount-header": "Означене измене",
+ "tags-actions-header": "Радње",
"tags-active-yes": "Да",
"tags-active-no": "Не",
+ "tags-source-none": "Ван употребе",
"tags-edit": "уреди",
+ "tags-delete": "обриши",
+ "tags-activate": "активирај",
+ "tags-deactivate": "деактивирај",
"tags-hitcount": "$1 {{PLURAL:$1|измена|измене|измена}}",
+ "tags-manage-no-permission": "Немате дозволу да мењате ознаке.",
+ "tags-create-heading": "Нова ознака",
+ "tags-create-tag-name": "Назив ознаке:",
+ "tags-create-reason": "Разлог:",
+ "tags-create-submit": "Направи",
+ "tags-create-no-name": "Морате навести назив ознаке.",
+ "tags-create-already-exists": "Ознака „$1“ већ постоји.",
+ "tags-create-warnings-below": "Правите нову ознаку, желите ли да наставите?",
+ "tags-delete-title": "Брисање ознака",
+ "tags-delete-explanation-initial": "Бришете ознаку „$1“ из базе података.",
+ "tags-delete-reason": "Разлог:",
+ "tags-delete-submit": "Неповратно обриши ову ознаку",
+ "tags-delete-not-found": "Ознака „$1“ не постоји.",
+ "tags-activate-title": "Активирање ознака",
+ "tags-activate-question": "Активирате ознаку „$1“.",
+ "tags-activate-reason": "Разлог:",
+ "tags-activate-not-allowed": "Није могуће активирати ознаку „$1“.",
+ "tags-activate-not-found": "Ознака „$1“ не постоји.",
+ "tags-activate-submit": "Активирај",
+ "tags-deactivate-title": "Деактивирање ознака",
+ "tags-deactivate-question": "Деактивирате ознаку „$1“.",
+ "tags-deactivate-reason": "Разлог:",
+ "tags-deactivate-not-allowed": "Није могуће деактивирати ознаку „$1“.",
+ "tags-deactivate-submit": "Декативирај",
"comparepages": "Упоређивање страница",
"compare-page1": "Страница 1",
"compare-page2": "Страница 2",
@@ -3059,8 +3124,8 @@
"compare-revision-not-exists": "Наведена измена не постоји.",
"dberr-problems": "Дошло је до техничких проблема.",
"dberr-again": "Сачекајте неколико минута и поново учитајте страницу.",
- "dberr-info": "(не могу да се повежем са сервером базе података: $1)",
- "dberr-info-hidden": "(не могу да се повежем са сервером базе података)",
+ "dberr-info": "(Не могу приступити бази података: $1)",
+ "dberr-info-hidden": "(Не могу приступити бази података)",
"dberr-usegoogle": "У међувремену, покушајте да претражите помоћу Гугла.",
"dberr-outofdate": "Имајте на уму да њихови примерци нашег садржаја могу бити застарели.",
"dberr-cachederror": "Ово је привремено меморисан примерак стране који можда није ажуран.",
@@ -3085,7 +3150,7 @@
"logentry-delete-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} страницу $3",
"logentry-delete-restore": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3",
"logentry-delete-event": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=догађаја|$5 догађаја|$5 догађаја}} у дневнику на $3: $4",
- "logentry-delete-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост $5 {{PLURAL:$5|1=измене|измене|измена}} на страници $3: $4",
+ "logentry-delete-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=једне измене|$5 измене|$5 измена}} на страници $3: $4",
"logentry-delete-event-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост догађаја у дневнику на $3",
"logentry-delete-revision-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
"logentry-suppress-delete": "$1 је {{GENDER:$2|потиснуо|потиснула}} страницу $3",
@@ -3101,6 +3166,14 @@
"revdelete-uname-unhid": "корисничко име је откривено",
"revdelete-restricted": "примењена ограничења за администраторе",
"revdelete-unrestricted": "уклоњена ограничења за администраторе",
+ "logentry-block-block": "$1 је {{GENDER:$2|блокирао|блокирала}} {{GENDER:$4|$3}} у трајању од $5 $6",
+ "logentry-block-unblock": "$1 је {{GENDER:$2|деблокирао|деблокирала}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 је {{GENDER:$2|променио|променила}} подешавања за блокирање {{GENDER:$4|корисника|кориснице}} {{GENDER:$4|$3}} у трајању од $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-interwiki": "$1 је {{GENDER:$2|увезао|увезла}} $3 с другог викија",
+ "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 преко преусмерења",
@@ -3110,7 +3183,7 @@
"logentry-newusers-newusers": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
"logentry-newusers-create": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
"logentry-newusers-create2": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3",
- "logentry-newusers-byemail": "Кориснички налог $3 је {{GENDER:$2|направљен}} од стране $1 и лозинка је послата на е-пошту",
+ "logentry-newusers-byemail": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3 и лозинка је послата на е-пошту",
"logentry-newusers-autocreate": "Кориснички налог $1 је аутоматски {{GENDER:$2|отворен}}",
"logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3 из $4 у $5",
"logentry-rights-rights-legacy": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3",
@@ -3118,20 +3191,30 @@
"logentry-upload-upload": "$1 је {{GENDER:$2|послао|послала}} $3",
"logentry-upload-overwrite": "$1 је {{GENDER:$2|послао|послала}} нову верзију $3",
"logentry-upload-revert": "$1 је {{GENDER:$2|послао|послала}} $3",
+ "log-name-managetags": "Дневник ознака",
+ "log-description-managetags": "Овај дневник садржи списак измена у вези [[Special:Tags|ознака]]. Дневник садржи само радње извршене од стране администратора; уноси за ознаке направљене или обрисане од стране вики софтвера се не налазе у овом дневнику.",
+ "logentry-managetags-create": "$1 је {{GENDER:$2|направио|направила}} ознаку „$4“",
+ "logentry-managetags-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} ознаку „$4“ (уклоњена је из $5 {{PLURAL:$5|измене или дневника|измена и/или дневника}})",
+ "logentry-managetags-activate": "$1 је {{GENDER:$2|активирао|активирала}} ознаку „$4“ за употребу од стране корисника и ботова",
+ "logentry-managetags-deactivate": "$1 је {{GENDER:$2|деактивирао|деактивирала}} ознаку „$4“ за употребу од стране корисника и ботова",
"rightsnone": "(нема)",
+ "revdelete-summary": "опис измене",
+ "feedback-adding": "Додајем повратну информацију на страницу…",
+ "feedback-back": "Назад",
+ "feedback-bugcheck": "Одлично! Проверите да ли је грешка [$1 позната од пре].",
+ "feedback-bugnew": "Проверено. Пријави нову грешку",
"feedback-bugornote": "Ако сте спремни да детаљно опишете технички проблем, онда [$1 пријавите грешку].\nУ супротном, послужите се једноставним обрасцем испод. Ваш коментар ће стајати на страници „[$3 $2]“, заједно с корисничким именом и прегледачем који користите.",
- "feedback-subject": "Наслов:",
- "feedback-message": "Порука:",
"feedback-cancel": "Откажи",
- "feedback-submit": "Пошаљи повратну информацију",
- "feedback-adding": "Додајем повратну информацију на страницу…",
+ "feedback-close": "Урађено",
+ "feedback-error-title": "Грешка",
"feedback-error1": "Грешка: непрепознат резултат од АПИ-ја",
"feedback-error2": "Грешка: уређивање није успело",
"feedback-error3": "Грешка: нема одговора од АПИ-ја",
+ "feedback-message": "Порука:",
+ "feedback-subject": "Наслов:",
+ "feedback-submit": "Пошаљи",
"feedback-thanks": "Хвала! Ваша повратна информација је постављена на страницу „[$2 $1]“.",
- "feedback-close": "Урађено",
- "feedback-bugcheck": "Одлично! Проверите да ли је грешка [$1 позната од пре].",
- "feedback-bugnew": "Проверено. Пријави нову грешку",
+ "feedback-thanks-title": "Хвала вам!",
"searchsuggest-search": "Претрага",
"searchsuggest-containing": "садржи...",
"api-error-badaccess-groups": "Није вам дозвољено да отпремате датотеке на овај вики.",
@@ -3185,6 +3268,7 @@
"duration-millennia": "$1 {{PLURAL:$1|миленијум|миленијума|миленијума}}",
"rotate-comment": "Слика је ротирана за $1° у смеру казаљке на сату",
"limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунд|секунди}}",
+ "limitreport-walltime": "Коришћење у реалном времену",
"limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунди}}",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|бајт|бајта|бајтова}}",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|бајт|бајта|бајтова}}",
@@ -3205,5 +3289,41 @@
"pagelang-language": "Језик",
"pagelang-select-lang": "Изабери језик",
"right-pagelang": "мењање језика странице",
- "action-pagelang": "промену језика странице"
+ "action-pagelang": "промену језика странице",
+ "logentry-pagelang-pagelang": "$1 је {{GENDER:$2|променио|променила}} језик странице $3 из $4 у $5.",
+ "mediastatistics": "Статистика датотека",
+ "mediastatistics-summary": "Статистике о типовима послатих датотека. Овде су урачунате само најновије верзије датотека. Старе или обрисане верзије нису урачунате.",
+ "mediastatistics-table-mimetype": "MIME тип",
+ "mediastatistics-table-extensions": "Могуће екстензије",
+ "mediastatistics-table-count": "Број датотека",
+ "mediastatistics-table-totalbytes": "Укупна величина",
+ "mediastatistics-header-unknown": "Непознато",
+ "mediastatistics-header-bitmap": "Битмап слике",
+ "mediastatistics-header-drawing": "Цртежи (векторске слике)",
+ "mediastatistics-header-audio": "Аудио",
+ "mediastatistics-header-video": "Видео",
+ "mediastatistics-header-office": "Канцеларија",
+ "mediastatistics-header-text": "Текстуалне",
+ "mediastatistics-header-executable": "Извршне",
+ "mediastatistics-header-archive": "Компресоване",
+ "json-error-syntax": "Грешка у синтакси",
+ "headline-anchor-title": "Веза до овог одељка",
+ "special-characters-group-latin": "латиница",
+ "special-characters-group-latinextended": "проширена латиница",
+ "special-characters-group-ipa": "ИПА",
+ "special-characters-group-symbols": "симболи",
+ "special-characters-group-greek": "грчки",
+ "special-characters-group-cyrillic": "ћирилица",
+ "special-characters-group-arabic": "арапски",
+ "special-characters-group-arabicextended": "проширени арапски",
+ "special-characters-group-persian": "персијски",
+ "special-characters-group-hebrew": "хебрејски",
+ "special-characters-group-bangla": "бенгалски",
+ "special-characters-group-tamil": "тамилски",
+ "special-characters-group-telugu": "телугу",
+ "special-characters-group-sinhala": "синхалски",
+ "special-characters-group-gujarati": "гуџарати",
+ "special-characters-group-thai": "тајландски",
+ "special-characters-group-lao": "лаоски",
+ "special-characters-group-khmer": "кмерски"
}
diff --git a/languages/i18n/sr-el.json b/languages/i18n/sr-el.json
index f6c68cf4..fd5bf80e 100644
--- a/languages/i18n/sr-el.json
+++ b/languages/i18n/sr-el.json
@@ -45,7 +45,7 @@
"tog-shownumberswatching": "Prikaži broj korisnika koji nadgledaju",
"tog-oldsig": "Tekući potpis:",
"tog-fancysig": "Smatraj potpis kao vikitekst (bez samopovezivanja)",
- "tog-uselivepreview": "Koristi trenutan pregled (eksperimentalno)",
+ "tog-uselivepreview": "Koristi trenutan pregled",
"tog-forceeditsummary": "Upozori me kada ne unesem opis izmene",
"tog-watchlisthideown": "Sakrij moje izmene sa spiska nadgledanja",
"tog-watchlisthidebots": "Sakrij izmene botova sa spiska nadgledanja",
@@ -241,6 +241,7 @@
"disclaimers": "Odricanje odgovornosti",
"disclaimerpage": "Project:Odricanje odgovornosti",
"edithelp": "Pomoć pri uređivanju",
+ "helppage-top-gethelp": "Pomoć",
"mainpage": "Glavna strana",
"mainpage-description": "Glavna strana",
"policy-url": "Project:Pravila",
@@ -268,8 +269,8 @@
"editold": "uredi",
"viewsourceold": "izvorni kod",
"editlink": "uredi",
- "viewsourcelink": "Izvor",
- "editsectionhint": "Uredite odeljak „$1“",
+ "viewsourcelink": "izvorni kod",
+ "editsectionhint": "Uredi odeljak „$1“",
"toc": "Sadržaj",
"showtoc": "prikaži",
"hidetoc": "sakrij",
@@ -310,6 +311,8 @@
"error": "Greška",
"databaseerror": "Greška u bazi podataka",
"databaseerror-text": "Došlo je do greške u upitu baze podataka. Možda je u pitanju programska greška.",
+ "databaseerror-textcl": "Došlo je do greške u upitu baze podataka.",
+ "databaseerror-query": "Upit: $1",
"databaseerror-function": "Funkcija: $1",
"databaseerror-error": "Greška: $1",
"laggedslavemode": "'''Upozorenje:''' stranica je možda zastarela.",
@@ -326,6 +329,8 @@
"filerenameerror": "Ne mogu da preimenujem datoteku „$1“ u „$2“.",
"filedeleteerror": "Ne mogu da obrišem datoteku „$1“.",
"directorycreateerror": "Ne mogu da napravim fasciklu „$1“.",
+ "directoryreadonlyerror": "Direktorijum „$1“ je samo za čitanje.",
+ "directorynotreadableerror": "Direktorijum „$1“ nije čitljiv.",
"filenotfound": "Ne mogu da pronađem datoteku „$1“.",
"unexpected": "Neočekivana vrednost: „$1“=„$2“.",
"formerror": "Greška: ne mogu da pošaljem obrazac",
@@ -336,7 +341,7 @@
"badtitle": "Neispravan naslov",
"badtitletext": "Naslov stranice je neispravan, prazan ili je međujezički ili međuviki naslov pogrešno povezan.\nMožda sadrži znakove koji se ne mogu koristiti u naslovima.",
"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 i poslednji put su ažurirani $2 u $3. U kešu {{PLURAL:$4|je dostupan najviše jedan rezultat|su dostupna najviše $4 rezultata|je dostupno najviše $4 rezultata}}.",
+ "perfcachedts": "Sledeći podaci su keširani i poslednji put su ažurirani $2 u $3. U kešu {{PLURAL:$4|1=je dostupan najviše jedan rezultat|su dostupna najviše $4 rezultata|je dostupno najviše $4 rezultata}}.",
"querypage-no-updates": "Ažuriranje ove stranice je trenutno onemogućeno.\nPodaci koji se ovde nalaze mogu biti zastareli.",
"viewsource": "Izvorni kod",
"viewsource-title": "Prikaz izvora stranice $1",
@@ -346,7 +351,8 @@
"viewsourcetext": "Možete čitati i kopirati sadržaj ove stranice:",
"viewyourtext": "Možete da pogledate i umnožite izvor '''vaših izmena''' na ovoj stranici:",
"protectedinterface": "Ova stranica sadrži tekst korisničkog okruženja za softver na ovom vikiju i zaštićena je radi sprečavanja zloupotrebe.\nDa biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.",
- "editinginterface": "<strong>Upozorenje:</strong> uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.\nIzmene na ovoj stranici će uticati na sve korisnike ovog vikija.\nDa biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.",
+ "editinginterface": "<strong>Upozorenje:</strong> uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.\nIzmene na ovoj stranici će uticati na sve korisnike ovog vikija.",
+ "translateinterface": "Da dodate ili promenite prevode za sve vikije, posetite [//translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.",
"cascadeprotected": "Ova stranica je zaključana jer sadrži {{PLURAL:$1|sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} „prenosivom“ zaštitom:\n$2",
"namespaceprotected": "Nemate dozvolu da uređujete stranice u imenskom prostoru '''$1'''.",
"customcssprotected": "Nemate dozvolu da menjate ovu CSS stranicu jer sadrži lične postavke drugog korisnika.",
@@ -361,7 +367,7 @@
"invalidtitle-knownnamespace": "Neispravan naslov s imenskim prostorom „$2“ i tekstom „$3“",
"invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom „$2“",
"exception-nologin": "Niste prijavljeni",
- "exception-nologin-text": "[[Special:Userlogin|Prijavite se]] da biste pristupili ovoj stranici ili radnji.",
+ "exception-nologin-text": "Prijavite se da biste pristupili ovoj stranici ili radnji.",
"exception-nologin-text-manual": "Morate biti $1 da biste pristupili ovoj stranici ili radnji.",
"virus-badscanner": "Neispravna postavka: nepoznati skener za viruse: ''$1''",
"virus-scanfailed": "neuspešno skeniranje (kod $1)",
@@ -403,6 +409,8 @@
"userlogin-resetlink": "Zaboravili ste podatke za prijavu?",
"userlogin-resetpassword-link": "Zaboravili ste lozinku?",
"userlogin-helplink2": "Pomoć pri prijavljivanju",
+ "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nKoristite donji obrazac da biste se prijavili kao drugi korisnik.",
+ "userlogin-createanother": "Otvori još jedan nalog",
"createacct-emailrequired": "Adresa e-pošte",
"createacct-emailoptional": "Adresa e-pošte (opciono)",
"createacct-email-ph": "Unesite vašu adresu e-pоšte",
@@ -449,7 +457,7 @@
"passwordsent": "Nova lozinka je poslata na e-adresu {{GENDER:$1|korisnika|korisnice|korisnika}} $1.\nPrijavite se pošto je primite.",
"blocked-mailpassword": "Vašoj IP adresi je onemogućeno uređivanje stranica, kao i mogućnost zahtevanja nove lozinke.",
"eauthentsent": "Na navedenu e-adresu je poslat potvrdni kod.\nPre nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da ste vi otvorili nalog.",
- "throttled-mailpassword": "Poruka za promenu lozinke je poslata u {{PLURAL:$1|poslednjih sat vremena|poslednja $1 sata|poslednjih $1 sati}}.\nDa bismo sprečili zloupotrebu, podsetnik šaljemo samo jednom u roku od {{PLURAL:$1|sat vremena|$1 sata|$1 sati}}.",
+ "throttled-mailpassword": "Poruka za promenu lozinke je poslata u {{PLURAL:$1|1=poslednjih sat vremena|poslednja $1 sata|poslednjih $1 sati}}.\nDa bismo sprečili zloupotrebu, podsetnik šaljemo samo jednom u roku od {{PLURAL:$1|1=sat vremena|$1 sata|$1 sati}}.",
"mailerror": "Greška pri slanju poruke: $1",
"acct_creation_throttle_hit": "Posetioci ovog vikija koji koriste vašu IP adresu su već otvorili {{PLURAL:$1|1=jedan nalog|$1 naloga|$1 naloga}} prethodni dan, što je najveći dozvoljeni broj u tom vremenskom periodu.\nZbog toga posetioci s ove IP adrese trenutno ne mogu otvoriti više naloga.",
"emailauthenticated": "Vaša e-adresa je potvrđena $2 u $3.",
@@ -465,6 +473,7 @@
"createaccount-text": "Neko je otvorio nalog s vašom e-adresom na {{SITENAME}} ($4) pod imenom $2 i lozinkom $3.\nPrijavite se i promenite svoju lozinku.\n\nAko je ovo greška, zanemarite ovu poruku.",
"login-throttled": "Previše puta ste pokušali da se prijavite. \nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
"login-abort-generic": "Neuspešna prijava – prekinuto",
+ "login-migrated-generic": "Vaš nalog je migriran i vaše korisničko više ne postoji na ovom vikiju.",
"loginlanguagelabel": "Jezik: $1",
"suspicious-userlogout": "Vaš zahtev za odjavu je odbijen jer je poslat od strane neispravnog pregledača ili posrednika.",
"createacct-another-realname-tip": "Pravo ime nije obavezno.\nAko izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rada.",
@@ -562,12 +571,13 @@
"anoneditwarning": "<strong>Upozorenje:</strong> niste prijavljeni. Vaša IP adresa će biti javno vidljiva u istoriji ove stranice ako načinite bilo kakvu izmenu. Ako se <strong>[$1 prijavite]</strong> ili <strong>[$2 otvorite nalog]</strong> vaše izmene će biti pripisane vašem korisničkom imenu.",
"anonpreviewwarning": "''Niste prijavljeni. Vaša IP adresa će biti zabeležena u istoriji ove stranice.''",
"missingsummary": "'''Napomena:''' niste uneli opis izmene.\nAko ponovo kliknete na „{{int:savearticle}}“, vaša izmena će biti sačuvana bez opisa.",
+ "selfredirect": "<strong>Upozorenje:</strong> preusmeravate ovu stranicu na nju samu.\nMožda vam je odredišna stranica pogrešna ili uređujete pogrešnu stranicu.\nAko još jednom pritisnete „{{int:savearticle}}“ preusmerenje će svejedno biti napravljeno.",
"missingcommenttext": "Unesite komentar ispod.",
"missingcommentheader": "'''Napomena:''' niste uneli naslov ovog komentara.\nAko ponovo kliknete na „{{int:savearticle}}“, vaša izmena će biti sačuvana bez naslova.",
"summary-preview": "Pregled opisa:",
"subject-preview": "Pregled teme/naslova:",
"blockedtitle": "Korisnik je blokiran",
- "blockedtext": "<strong>Vaše korisničko ime ili IP adresa je blokirana.</strong>\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog: <em>$2</em>.\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\nVaša blokirana IP adresa je $3, a ID blokiranja $5.\nNavedite sve podatke iznad pri stvaranja bilo kakvih upita.",
+ "blockedtext": "<strong>Vaše korisničko ime ili IP adresa je blokirana.</strong>\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog: <em>$2</em>.\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\nVaša blokirana IP adresa je $3, a ID blokiranja $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
"autoblockedtext": "Vaša IP adresa je blokirana jer ju je upotrebljavao drugi korisnik, koga je {{GENDER:$4|blokirao|blokirala}} $1.\nRazlog:\n\n:<em>$2</em>\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\n\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\n\nVaša blokirana IP adresa je $3, a ID $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
"blockednoreason": "razlog nije naveden",
"whitelistedittext": "Za uređivanje stranice je potrebno da budete $1.",
@@ -610,7 +620,7 @@
"editingsection": "Uređujete $1 (odeljak)",
"editingcomment": "Uređujete $1 (novi odeljak)",
"editconflict": "Sukobljene izmene: $1",
- "explainconflict": "Neko drugi je u međuvremenu promenio ovu stranicu.\nGornji okvir sadrži tekst stranice.\nVaše izmene su prikazane u donjem polju.\nMoraćete da unesete svoje promene u postojeći tekst.\n'''Samo''' će tekst u gornjem tekstualnom okviru biti sačuvan kada kliknete na „{{int:savearticle}}“.",
+ "explainconflict": "Neko drugi je u međuvremenu promenio ovu stranicu.\nGornji okvir sadrži sadašnji tekst stranice.\nVaše izmene su prikazane u donjem polju.\nMoraćete da unesete svoje promene u sadašnji tekst stranice.\n<strong>Samo</strong> će tekst u gornjem tekstualnom okviru biti sačuvan kada kliknete na „{{int:savearticle}}“.",
"yourtext": "Vaš tekst",
"storedversion": "Uskladištena izmena",
"nonunicodebrowser": "'''Upozorenje: vaš pregledač ne podržava unikod.'''\nPromenite ga pre nego što počnete s uređivanjem.",
@@ -627,8 +637,8 @@
"templatesused": "{{PLURAL:$1|Šablon|Šabloni}} na ovoj stranici:",
"templatesusedpreview": "{{PLURAL:$1|Šablon|Šabloni}} u ovom pregledu:",
"templatesusedsection": "{{PLURAL:$1|Šablon|Šabloni}} u ovom odeljku:",
- "template-protected": "(zaštićen)",
- "template-semiprotected": "(poluzaštićen)",
+ "template-protected": "(zaštićeno)",
+ "template-semiprotected": "(poluzaštićeno)",
"hiddencategories": "Ova stranica je član {{PLURAL:$1|jedne skrivene kategorije|$1 skrivene kategorije|$1 skrivenih kategorija}}:",
"edittools": "<!-- Ovaj tekst će biti prikazan ispod obrasca za uređivanje i otpremanje. -->",
"edittools-upload": "-",
@@ -637,7 +647,7 @@
"sectioneditnotsupported-title": "Uređivanje odeljka nije podržano",
"sectioneditnotsupported-text": "Uređivanje odeljka nije podržano na ovoj stranici.",
"permissionserrors": "Greška u dozvoli",
- "permissionserrorstext": "Nemate ovlašćenje za tu radnju iz {{PLURAL:$1|sledećeg|sledećih}} razloga:",
+ "permissionserrorstext": "Nemate ovlašćenje za ovu radnju iz {{PLURAL:$1|1=sledećeg|sledećih}} razloga:",
"permissionserrorstext-withaction": "Nemate dozvolu za $2 iz {{PLURAL:$1|sledećeg|sledećih}} razloga:",
"recreate-moveddeleted-warn": "<strong>Upozorenje: ponovo pravite stranicu koja je prethodno obrisana.</strong>\n\nRazmotrite da li je prikladno da nastavite s uređivanjem ove stranice.\nOvde je navedena istorija brisanja i premeštanja s obrazloženjem:",
"moveddeleted-notice": "Ova stranica je obrisana.\nIstorija njenog brisanja i premeštanja nalazi se ispod:",
@@ -654,7 +664,7 @@
"content-failed-to-parse": "Ne mogu da raščlanim sadržaj tipa $2 za model $1: $3",
"invalid-content-data": "Neispravni podaci sadržaja",
"content-not-allowed-here": "Sadržaj modela „$1“ nije dozvoljen na stranici [[$2]]",
- "editwarning-warning": "Ako napustite ovu stranicu, izgubićete sve izmene koje ste napravili.\nAko ste prijavljeni, možete onemogućiti ovo upozorenje u svojim podešavanjima, u odeljku „{{int:prefs-editing}}“.",
+ "editwarning-warning": "Ako napustite ovu stranicu, izgubićete sve izmene koje ste napravili. Ako ste prijavljeni, možete onemogućiti ovo upozorenje u svojim podešavanjima, u odeljku „{{int:prefs-editing}}“.",
"editpage-notsupportedcontentformat-title": "Format sadržaja nije podržan",
"content-model-wikitext": "vikitekst",
"content-model-text": "čist tekst",
@@ -676,7 +686,7 @@
"parser-unstrip-loop-warning": "Utvrđena je petlja",
"parser-unstrip-recursion-limit": "Prekoračeno je ograničenje rekurzije ($1)",
"converter-manual-rule-error": "Pronađena je greška u pravilu za ručno pretvaranje jezika",
- "undo-success": "Izmena se može vratiti.\nProverite razlike ispod, pa sačuvajte izmene.",
+ "undo-success": "Izmena se može poništiti.\nProverite razlike ispod, pa sačuvajte izmene.",
"undo-failure": "Ova izmena se ne može poništiti zbog sukoba izmena.",
"undo-norev": "Ne mogu da vratim izmenu jer ne postoji ili je obrisana.",
"undo-nochange": "Izgleda da je izmena već poništena.",
@@ -711,8 +721,8 @@
"history-feed-item-nocomment": "$1 u $2",
"history-feed-empty": "Tražena stranica ne postoji.\nMoguće da je obrisana s vikija ili je preimenovana.\nPokušajte da [[Special:Search|pretražite viki]] za slične stranice.",
"rev-deleted-comment": "(opis izmene uklonjen)",
- "rev-deleted-user": "(korisničko ime je uklonjeno)",
- "rev-deleted-event": "(istorija je uklonjena)",
+ "rev-deleted-user": "(korisničko ime uklonjeno)",
+ "rev-deleted-event": "(detalji dnevnika uklonjeni)",
"rev-deleted-user-contribs": "[korisničko ime ili IP adresa je uklonjena – izmena je sakrivena sa spiska doprinosa]",
"rev-deleted-text-permission": "Izmena ove stranice je '''obrisana'''.\nDetalje možete videti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} istoriji brisanja].",
"rev-deleted-text-unhide": "Izmena ove stranice je '''obrisana'''.\nDetalje možete videti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} istoriji brisanja].\nIpak možete da [$1 vidite ovu izmenu] ako želite da nastavite.",
@@ -736,12 +746,16 @@
"revdelete-selected-text": "{{PLURAL:$1|Izabrana izmena|Izabrane izmene}} [[:$2]]:",
"revdelete-selected-file": "{{PLURAL:$1|Izabrana verzija datoteke|Izabrane verzije datoteke}} [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|Izabrana stavka u istoriji|Izabrane stavke u istoriji}}:",
+ "revdelete-text-text": "Izbrisane izmene će i dalje biti vidljive u istoriji stranice, ali delovi njihovog sadržaja neće biti javno dostupnu.",
+ "revdelete-text-file": "Izbrisane verzije datoteke će i dalje biti vidljive u istoriji datoteke, ali delovi njihovog sadržaja neće biti javno dostupnu.",
+ "logdelete-text": "Izbrisani unosi u dnevnicima će i dalje biti vidljivi u dnevnicima, ali delovi njihovog sadržaja neće biti javno dostupnu.",
+ "revdelete-text-others": "Ostali administratori će i dalje moći da pristupe skrivenom sadržaju i vrate ga, osim ako se postave dodatna ograničenja.",
"revdelete-confirm": "Potvrdite da nameravate ovo uraditi, da razumete posledice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
- "revdelete-suppress-text": "Sakrivanje izmena bi trebalo koristiti '''samo''' u sledećim slučajevima:\n* Zlonamerni ili pogrdni podaci\n* Neprikladni lični podaci\n*: ''kućna adresa i broj telefona, broj bankovne kartice itd.''",
+ "revdelete-suppress-text": "Sakrivanje izmena bi trebalo koristiti <strong>samo</strong> u sledećim slučajevima:\n* zlonamerni ili pogrdni podaci\n* neprikladni lični podaci\n*: <em>kućna adresa i broj telefona, broj kreditne kartice, JMBG itd.</em>",
"revdelete-legend": "Ograničenja vidljivosti",
- "revdelete-hide-text": "Tekst izmene",
+ "revdelete-hide-text": "Sakrij tekst izmene",
"revdelete-hide-image": "Sakrij sadržaj datoteke",
- "revdelete-hide-name": "Sakrij radnju i odredište",
+ "revdelete-hide-name": "Sakrij cilj i parametre",
"revdelete-hide-comment": "Opis izmene",
"revdelete-hide-user": "Korisnčko ime urednika/IP adresa",
"revdelete-hide-restricted": "Sakrij podatke od administratora i drugih korisnika",
@@ -785,6 +799,7 @@
"mergehistory-empty": "Nema izmena za spajanje.",
"mergehistory-success": "$3 {{PLURAL:$3|izmena stranice [[:$1]] je spojena|izmene stranice [[:$1]] su spojene|izmena stranice [[:$1]] je spojeno}} u [[:$2]].",
"mergehistory-fail": "Ne mogu da spojim istorije. Proverite stranicu i vremenske parametre.",
+ "mergehistory-fail-toobig": "Nije moguće spojiti istorije jer više od $1 {{PLURAL:$1|izmene će biti premeštene|izmena će biti premešteno}}.",
"mergehistory-no-source": "Izvorna stranica $1 ne postoji.",
"mergehistory-no-destination": "Odredišna stranica $1 ne postoji.",
"mergehistory-invalid-source": "Izvorna stranica mora imati ispravan naslov.",
@@ -794,7 +809,6 @@
"mergehistory-same-destination": "Izvorna i odredišna stranica ne mogu biti iste",
"mergehistory-reason": "Razlog:",
"mergelog": "Dnevnik spajanja",
- "pagemerge-logentry": "je spojio [[$1]] u [[$2]] (sve do izmene $3)",
"revertmerge": "rastavi",
"mergelogpagetext": "Ispod je spisak najskorijih spajanja istorija dveju stranica.",
"history-title": "Istorija izmena stranice „$1“",
@@ -822,7 +836,7 @@
"shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultata}} po stranici",
"viewprevnext": "Pogledaj ($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "'''Postoji i članak pod nazivom „[[:$1]]“.'''",
- "searchmenu-new": "<strong>Napravite stranicu „[[:$1]]“!</strong> {{PLURAL:$2|0=|Vidi takođe razultate pretrage.}}",
+ "searchmenu-new": "<strong>Napravite stranicu „[[:$1]]“!</strong> {{PLURAL:$2|0=|Vidi takođe rezultate pretrage.}}",
"searchprofile-articles": "Članci",
"searchprofile-images": "Datoteke",
"searchprofile-everything": "Sve",
@@ -835,6 +849,8 @@
"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 $1)",
"search-section": "(odeljak $1)",
+ "search-category": "(kategorija $1)",
+ "search-file-match": "(podudara se sadržaj datoteke)",
"search-suggest": "Da li ste mislili na: $1",
"search-interwiki-caption": "Bratski projekti",
"search-interwiki-default": "Rezultati sa $1:",
@@ -858,7 +874,7 @@
"preferences": "Podešavanja",
"mypreferences": "Podešavanja",
"prefs-edits": "Broj izmena:",
- "prefsnologintext2": "Morate biti $1 da biste menjali svoja podešavanja.",
+ "prefsnologintext2": "Morate biti prijavljeni da biste menjali svoja podešavanja.",
"prefs-skin": "Tema",
"skin-preview": "Pregledaj",
"datedefault": "Svejedno",
@@ -867,6 +883,11 @@
"prefs-personal": "Profil",
"prefs-rc": "Skorašnje izmene",
"prefs-watchlist": "Spisak nadgledanja",
+ "prefs-editwatchlist": "Uređivanje spiska nadgledanja",
+ "prefs-editwatchlist-label": "Uređivanje spiska:",
+ "prefs-editwatchlist-edit": "Uredi spisak",
+ "prefs-editwatchlist-raw": "Uredi sirov spisak",
+ "prefs-editwatchlist-clear": "Isprazni spisak",
"prefs-watchlist-days": "Broj dana u spisku nadgledanja:",
"prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana|dana}}",
"prefs-watchlist-edits": "Najveći broj izmena u proširenom spisku nadgledanja:",
@@ -959,6 +980,8 @@
"prefs-tokenwatchlist": "Žeton",
"prefs-diffs": "Razlike",
"prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sledećoj prijavi.",
+ "prefswarning-warning": "Promenili ste vaša podešavanja ali niste ih još sačuvali.\nAko ne pritisnete „$1“ vaša podešavanja će biti izgubljena.",
+ "prefs-tabs-navigation-hint": "Savet: možete koristiti tipke sa levom i desnom strelicom za kretanje kroz kartice.",
"email-address-validity-valid": "E-adresa je ispravna",
"email-address-validity-invalid": "Unesite ispravnu e-adresu",
"userrights": "Upravljanje korisničkim pravima",
@@ -979,6 +1002,7 @@
"userrights-changeable-col": "Grupe koje možete da promenite",
"userrights-unchangeable-col": "Grupe koje ne možete da promenite",
"userrights-irreversible-marker": "$1*",
+ "userrights-conflict": "Sukob promena korisničkih prava! Molimo proverite vaše izmene.",
"userrights-removed-self": "Uspešno ste sebi skinuli prava. Zbog toga nije vam dozvoljen pristup ovoj stranici.",
"group": "Grupa:",
"group-user": "Korisnici",
@@ -1009,6 +1033,7 @@
"right-move": "premeštanje stranica",
"right-move-subpages": "premeštanje stranica s njihovim podstranicama",
"right-move-rootuserpages": "premeštanje osnovnih korisničkih stranica",
+ "right-move-categorypages": "premeštanje kategorija",
"right-movefile": "premeštanje datoteka",
"right-suppressredirect": "preskakanje stvaranja preusmerenja pri premeštanju stranica",
"right-upload": "otpremanje datoteka",
@@ -1017,7 +1042,7 @@
"right-reupload-shared": "menjanje datoteka na deljenom skladištu multimedije",
"right-upload_by_url": "otpremanje datoteka sa veb adrese",
"right-purge": "čišćenje keš memorije stranice bez potvrde",
- "right-autoconfirmed": "Not be affected by IP-based rate limits",
+ "right-autoconfirmed": "bez ograničavanja stavki za IP adrese",
"right-bot": "smatranje izmena kao automatski proces",
"right-nominornewtalk": "neposedovanje malih izmena na stranicama za razgovor otvara prozor za nove poruke",
"right-apihighlimits": "korišćenje viših granica za upite iz API-ja",
@@ -1030,7 +1055,8 @@
"right-deletedtext": "pregledanje obrisanog teksta i izmena između obrisanih izmena",
"right-browsearchive": "pretraga obrisanih stranica",
"right-undelete": "vraćanje obrisanih stranica",
- "right-suppressrevision": "pregledanje i vraćanje izmena koje su sakrivene od strane administratora",
+ "right-suppressrevision": "pregledanje, skrivanje i vraćanje određenih izmena stranica od svih korisnika",
+ "right-viewsuppressed": "pregledanje izmena skrivenih od svih korisnika",
"right-suppressionlog": "gledanje privatnih dnevnika",
"right-block": "blokiranje daljih izmena drugih korisnika",
"right-blockemail": "onemogućavanje korisnicima da šalju e-poruke",
@@ -1067,6 +1093,7 @@
"right-override-export-depth": "izvoz stranica uključujući i povazene stranice do dubine od pet veza",
"right-sendemail": "slanje e-poruka drugim korisnicima",
"right-passwordreset": "pregledanje poruka za obnavljanje lozinke",
+ "right-managechangetags": "pravljenje i/ili brisanje [[Special:Tags|oznaka]] iz baze podataka",
"newuserlogpage": "Dnevnik novih korisnika",
"newuserlogpagetext": "Ovo je istorija novih korisnika.",
"rightslog": "Dnevnik korisničkih prava",
@@ -1081,6 +1108,7 @@
"action-move": "premeštanje ove stranice",
"action-move-subpages": "premeštanje ove stranice i njenih podstranica",
"action-move-rootuserpages": "premeštanje osnovnih korisničkih stranica",
+ "action-move-categorypages": "premeštanje kategorija",
"action-movefile": "premeštanje ove datoteke",
"action-upload": "slanje ove datoteke",
"action-reupload": "zamenjivanje postojeće datoteke",
@@ -1111,6 +1139,7 @@
"action-viewmywatchlist": "pregled vašeg spisak nadgledanja",
"action-viewmyprivateinfo": "pregledanje vaših ličnih podataka",
"action-editmyprivateinfo": "uređivanje vaših ličnih podataka",
+ "action-managechangetags": "pravljenje i/ili brisanje oznaka iz baze podataka",
"nchanges": "$1 {{PLURAL:$1|izmena|izmene|izmena}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|izmena od vaše poslednje posete}}",
"enhancedrc-history": "istorija",
@@ -1126,7 +1155,7 @@
"recentchanges-label-plusminus": "Promena veličine stranice u bajtovima",
"recentchanges-legend-heading": "'''Legenda:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])",
- "rcnotefrom": "Ispod su izmene od <b>$2</b> (do <b>$1</b> izmena).",
+ "rcnotefrom": "Ispod {{PLURAL:$5|je izmena|su izmene}} od <strong>$3, $4</strong> (do <strong>$1</strong> prikazano).",
"rclistfrom": "Prikaži nove izmene počev od $2 $3",
"rcshowhideminor": "$1 manje izmene",
"rcshowhideminor-show": "Prikaži",
@@ -1182,9 +1211,9 @@
"uploaderror": "Greška pri otpremanju",
"upload-recreate-warning": "'''Upozorenje: datoteka s tim nazivom je obrisana ili premeštena.'''\n\nIstorija brisanja i premeštanja se nalazi ispod:",
"uploadtext": "Koristite obrazac ispod da biste otpremili datoteke.\nZa pregled ili pretragu postojećih datoteka, pogledajte [[Special:FileList|spisak otpremljenih datoteka]], ponovna otpremanja su navedena u [[Special:Log/upload|dnevniku otpremanja]], a brisanja u [[Special:Log/delete|dnevniku brisanja]].\n\nDatoteku dodajete na željenu stranicu koristeći sledeće obrasce:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Slika.jpg]]</nowiki></code>''' za verziju slike u punoj veličini\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Slika.png|200p|mini|levo|opis]]</nowiki></code>''' za verziju slike s veličinom od 200 piksela koja je prikazana u zasebnom okviru, zajedno s opisom.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></code>''' za direktno povezivanje s datotekom bez njenog prikazivanja",
- "upload-permitted": "Dozvoljeni tipovi datoteka: $1.",
- "upload-preferred": "Preporučeni tipovi datoteka: $1.",
- "upload-prohibited": "Zabranjeni tipovi datoteka: $1.",
+ "upload-permitted": "Dozvoljeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
+ "upload-preferred": "Preporučeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
+ "upload-prohibited": "Zabranjeni {{PLURAL:$2|tip|tipovi}} datoteka: $1.",
"uploadlogpage": "Dnevnik otpremanja",
"uploadlogpagetext": "Ispod je spisak skorašnjih slanja.\nPogledajte [[Special:NewFiles|galeriju novih datoteka]] za lepši pregled.",
"filename": "Naziv datoteke",
@@ -1249,7 +1278,7 @@
"upload-options": "Postavke slanja",
"watchthisupload": "Nadgledaj ovu datoteku",
"filewasdeleted": "Datoteka s ovim nazivom je ranije poslata, ali je obrisana.\nProverite $1 pre nego što nastavite s ponovnim slanjem.",
- "filename-bad-prefix": "Naziv datoteke koju šaljete počinje sa '''\"$1\"''', a njega obično dodeljuju digitalni fotoaparati.\nIzaberite naziv datoteke koji opisuje njen sadržaj.",
+ "filename-bad-prefix": "Naziv datoteke koju šaljete počinje sa <strong>„$1“</strong>, a njega obično dodeljuju digitalni fotoaparati.\nIzaberite naziv datoteke koji opisuje njen sadržaj.",
"filename-prefix-blacklist": " #<!-- ostavite ovaj red onakvim kakav jeste --> <pre>\n# Sintaksa je sledeća:\n# * Sve od tarabe pa do kraja reda je komentar\n# * Svaki red označava prefiks tipičnih naziva datoteka koje dodeljivaju digitalni aparati\nCIMG # Kasio\nDSC_ # Nikon\nDSCF # Fudži\nDSCN # Nikon\nDUW # neki mobilni telefoni\nIMG # opšte\nJD # Dženoptik\nMGP # Pentaks\nPICT # razno\n #</pre> <!-- ostavite ovaj red onakvim kakav jeste -->",
"upload-success-subj": "Uspešno otpremanje",
"upload-success-msg": "Datoteka iz [$2] je poslata. Dostupna je ovde: [[:{{ns:file}}:$1]]",
@@ -1339,9 +1368,11 @@
"license": "Licenca:",
"license-header": "Licenca:",
"nolicense": "nije izabrano",
+ "licenses-edit": "Uredi izbor licenci",
"license-nopreview": "(pregled nije dostupan)",
- "upload_source_url": "(ispravna i javno dostupna adresa)",
- "upload_source_file": "(datoteka na vašem računaru)",
+ "upload_source_url": "(vaša izabrana datoteka od ispravnih i javno dostupnih adresa)",
+ "upload_source_file": "(vaša odabrana datoteka sa vašeg računara)",
+ "listfiles-delete": "obriši",
"listfiles-summary": "Ova posebna stranica prikazuje sve poslate datoteke.",
"listfiles_search_for": "Naziv datoteke:",
"imgfile": "datoteka",
@@ -1417,7 +1448,7 @@
"filedelete-maintenance": "Brisanje i vraćanje datoteka je privremeno onemogućeno zbog održavanja.",
"filedelete-maintenance-title": "Ne mogu da obrišem datoteku",
"mimesearch": "MIME pretraga",
- "mimesearch-summary": "Ova stranica omogućava filtriranje datoteka prema njihovim MIME tipovima.\nUlazni podaci: contenttype/subtype, npr. <code>image/jpeg</code>.",
+ "mimesearch-summary": "Ova stranica omogućava filtriranje datoteka prema njihovim MIME tipovima.\nUlazni podaci: contenttype/subtype ili contenttype/*, npr. <code>image/jpeg</code>.",
"mimetype": "MIME vrsta:",
"download": "preuzmi",
"unwatchedpages": "Nenadgledane stranice",
@@ -1433,12 +1464,13 @@
"randomincategory": "Slučajna stranica u kategoriji",
"randomincategory-invalidcategory": "„$1“ nije valjano ime kategorije",
"randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
+ "randomincategory-category": "Kategorija:",
+ "randomincategory-legend": "Slučajna stranica u kategoriji",
"randomredirect": "Slučajno preusmerenje",
- "randomredirect-nopages": "Nema preusmerenja u imenskom prostoru „$1”.",
+ "randomredirect-nopages": "Nema preusmerenja u imenskom prostoru „$1“.",
"statistics": "Statistike",
"statistics-header-pages": "Stranice",
"statistics-header-edits": "Izmene",
- "statistics-header-views": "Pregledi",
"statistics-header-users": "Korisnici",
"statistics-header-hooks": "Ostalo",
"statistics-articles": "Stranice sa sadržajem",
@@ -1447,13 +1479,9 @@
"statistics-files": "Broj poslatih datoteka",
"statistics-edits": "Broj izmena stranica otkad postoji {{SITENAME}}",
"statistics-edits-average": "Prosečan broj izmena po stranici",
- "statistics-views-total": "Ukupno pregleda",
- "statistics-views-total-desc": "Pregledi nepostojećih i posebnih stranica nisu uključeni",
- "statistics-views-peredit": "Pregleda po izmeni",
"statistics-users": "Registrovani [[Special:ListUsers|korisnici]]",
"statistics-users-active": "Aktivni korisnici",
- "statistics-users-active-desc": "Korisnici koji su izvršili bar jednu radnju {{PLURAL:$1|prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}",
- "statistics-mostpopular": "Najposećenije stranice",
+ "statistics-users-active-desc": "Korisnici koji su izvršili bar jednu radnju {{PLURAL:$1|1=prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}",
"pageswithprop": "Strane s osobinom strane",
"pageswithprop-legend": "Strane s osobinom strane",
"pageswithprop-text": "Ova strana izlistava strane koje imaju određenu osobinu",
@@ -1492,17 +1520,18 @@
"uncategorizedtemplates": "Nekategorisani šabloni",
"unusedcategories": "Nekorišćene kategorije",
"unusedimages": "Nekorišćene datoteke",
- "popularpages": "Popularne stranice",
"wantedcategories": "Tražene kategorije",
"wantedpages": "Tražene stranice",
+ "wantedpages-summary": "Spisak nepostojećih stranica sa najviše veza do njih, na ovom spisku se ne nalaze stranice do kojih vode preusmerenja. Za spisak pokvarenih preusmerenja pogledajte [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Neispravan naslov u nizu rezultata: $1",
"wantedfiles": "Tražene datoteke",
"wantedfiletext-cat": "Sledeće datoteke se koriste, ali ne postoje. Datoteke iz drugih riznica mogu biti navedene iako ne postoje. Takve datoteke će biti <del>poništene</del> sa spiska. Pored toga, stranice koje sadrže nepostojeće datoteke se nalaze [[:$1|ovde]].",
"wantedfiletext-nocat": "Sledeće datoteke se koriste, ali ne postoje. Datoteke iz drugih riznica mogu biti navedene iako ne postoje. Takve datoteke će biti <del>poništene</del> sa spiska.",
+ "wantedfiletext-nocat-noforeign": "Sledeće datoteke se koriste, ali ne postoje.",
"wantedtemplates": "Traženi šabloni",
"mostlinked": "Stranice s najviše veza",
"mostlinkedcategories": "Kategorije s najviše veza",
- "mostlinkedtemplates": "Šabloni s najviše veza",
+ "mostlinkedtemplates": "Stranice s najviše veza",
"mostcategories": "Stranice s najviše kategorija",
"mostimages": "Datoteke s najviše veza",
"mostinterwikis": "Stranice sa najviše međuvikija",
@@ -1552,10 +1581,12 @@
"pager-older-n": "{{PLURAL:$1|stariji 1|starijih $1}}",
"suppress": "Nadzor",
"querypage-disabled": "Ova posebna stranica je onemogućena radi poboljšanja performansi.",
+ "apihelp": "API pomoć",
+ "apihelp-no-such-module": "Modul „$1“ nije pronađen.",
"booksources": "Štampani izvori",
- "booksources-search-legend": "Traženje izvora knjige",
+ "booksources-search-legend": "Traži književne izvore",
"booksources-isbn": "ISBN:",
- "booksources-go": "Idi",
+ "booksources-search": "Pretraži",
"booksources-text": "Ispod se nalazi spisak veza ka sajtovima koji se bave prodajom novih i polovnih knjiga, a koji bi mogli imati dodatne podatke o knjigama koje tražite:",
"booksources-invalid-isbn": "Navedeni ISBN broj nije ispravan. Proverite da nije došlo do greške pri umnožavanju iz prvobitnog izvora.",
"specialloguserlabel": "Izvršilac:",
@@ -1601,7 +1632,7 @@
"listusers-noresult": "Korisnik nije pronađen.",
"listusers-blocked": "({{GENDER:$1|blokiran|blokirana|blokiran}})",
"activeusers": "Spisak aktivnih korisnika",
- "activeusers-intro": "Ovo je spisak korisnika koji su bili aktivni {{PLURAL:$1|prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}.",
+ "activeusers-intro": "Ovo je spisak korisnika koji su bili aktivni {{PLURAL:$1|1=prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}.",
"activeusers-count": "$1 {{PLURAL:$1|radnja|radnje|radnji}} {{PLURAL:$3|prethodni dan|u poslednja $3 dana|u poslednjih $3 dana}}",
"activeusers-from": "Prikaži korisnike počev od:",
"activeusers-hidebots": "Sakrij botove",
@@ -1624,8 +1655,17 @@
"listgrouprights-removegroup-self": "uklanjanje {{PLURAL:$2|grupe|grupa}} sa svog naloga: $1",
"listgrouprights-addgroup-self-all": "Dodaj sve grupe na sopstveni nalog",
"listgrouprights-removegroup-self-all": "Ukloni sve grupe sa sopstvenog naloga",
+ "listgrouprights-namespaceprotection-header": "Ograničenja imenskih prostora",
"listgrouprights-namespaceprotection-namespace": "Imenski prostor",
+ "listgrouprights-namespaceprotection-restrictedto": "Prava potrebna za uređivanje",
+ "trackingcategories-name": "Ime poruke",
+ "trackingcategories-desc": "Koje stranice se nalaze u kategoriji",
+ "noindex-category-desc": "Stranice koje u sebi imaju magičnu reč <code><nowiki>__NOINDEX__</nowiki></code>.",
+ "index-category-desc": "Stranice koje u sebi imaju magičnu reč <code><nowiki>__INDEX__</nowiki></code> i samim tim su indeksirane od strane robota.",
+ "broken-file-category-desc": "Stranice koje imaju veze do nepostojećih datoteka.",
+ "hidden-category-category-desc": "Kategorije koje u sebi imaju magičnu reč <code><nowiki>__HIDDENCAT__</nowiki></code> i samim tim se ne prikazuju u odeljku za kategorije na stranicama.",
"trackingcategories-nodesc": "Opis nije dostupan.",
+ "trackingcategories-disabled": "Kategorija je onemogućena",
"mailnologin": "Nema adrese za slanje",
"mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu e-adresu u [[Special:Preferences|podešavanjima]] da biste slali e-poruke drugim korisnicima.",
"emailuser": "Pošalji e-poruku",
@@ -1649,10 +1689,10 @@
"emailsubject": "Naslov:",
"emailmessage": "Poruka:",
"emailsend": "Pošalji",
- "emailccme": "Pošalji mi primerak poruke e-poštom",
- "emailccsubject": "Primerak vaše poruke za $1: $2",
+ "emailccme": "Pošalji mi kopiju poruke na moju e-poštu.",
+ "emailccsubject": "Kopija vaše poruke korisniku $1: $2",
"emailsent": "Poruka je poslata",
- "emailsenttext": "Vaša poruka je poslata e-poštom.",
+ "emailsenttext": "Vaša e-poruka je poslata.",
"emailuserfooter": "Ovu e-poruku je {{GENDER:|poslao|poslala|poslao}} $1 korisniku $2 putem e-pošte s vikija {{SITENAME}}.",
"usermessage-summary": "Slanje sistemske poruke.",
"usermessage-editor": "Uređivač sistemskih poruka",
@@ -1679,7 +1719,7 @@
"wlheader-enotif": "Obaveštenje e-porukom je omogućeno.",
"wlheader-showupdated": "Stranice koje su izmenjene otkad ste ih poslednji put posetili su '''podebljane'''.",
"wlnote": "Ispod {{PLURAL:$1|je poslednja izmena|su poslednje '''$1''' izmene|je poslednjih '''$1''' izmena}} u {{PLURAL:$2|prethodnom satu|prethodna '''$2''' sata|prethodnih '''$2''' sati}}, zaključno sa $3, $4.",
- "wlshowlast": "Prikaži poslednjih $1 sati, $2 dana, $3",
+ "wlshowlast": "Prikaži poslednjih $1 sati, $2 dana",
"watchlist-options": "Postavke spiska nadgledanja",
"watching": "Nadgledanje…",
"unwatching": "Prekidanje nadgledanja…",
@@ -1705,7 +1745,7 @@
"deletepage": "Obriši stranicu",
"confirm": "Potvrdi",
"excontent": "sadržaj je bio: „$1“",
- "excontentauthor": "sadržaj je bio: „$1“ (a jedini urednik je bio „[[Special:Contribs/$2|$2]]“)",
+ "excontentauthor": "sadržaj je bio: „$1“ (a jedini urednik [[Special:Contribs/$2|$2]])",
"exbeforeblank": "sadržaj pre brisanja je bio: „$1“",
"delete-confirm": "Brisanje stranice „$1“",
"delete-legend": "Obriši",
@@ -1725,9 +1765,9 @@
"delete-edit-reasonlist": "Uredi razloge brisanja",
"delete-toobig": "Ova stranica ima veliku istoriju, preko $1 {{PLURAL:$1|izmene|izmene|izmena}}.\nBrisanje takvih stranica je ograničeno da bi se sprečilo slučajno opterećenje servera.",
"delete-warning-toobig": "Ova stranica ima veliku istoriju, preko $1 {{PLURAL:$1|izmene|izmene|izmena}}.\nNjeno brisanje može poremetiti bazu podataka, stoga postupajte s oprezom.",
+ "deleteprotected": "Ne možete obrisati ovu stranicu zato što je zaštićena.",
"deleting-backlinks-warning": "'''Upozorenje:''' brišete stranicu koja je uključena u [[Special:WhatLinksHere/{{FULLPAGENAME}}|druge stranice]] ili druge stranice vode na nju.",
"rollback": "Vrati izmene",
- "rollback_short": "Vrati",
"rollbacklink": "vrati",
"rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmenu|izmene|izmena}}",
"rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmene|izmene|izmena}}",
@@ -1776,6 +1816,7 @@
"protect-othertime": "Drugo vreme:",
"protect-othertime-op": "drugo vreme",
"protect-existing-expiry": "Postojeće vreme isteka: $2 u $3",
+ "protect-existing-expiry-infinity": "Postojeće vreme isteka: trajno",
"protect-otherreason": "Drugi/dodatni razlog:",
"protect-otherreason-op": "Drugi razlog",
"protect-dropdown": "* Najčešći razlozi zaštićivanja\n** Prekomerni vandalizam\n** Nepoželjne poruke\n** Neproduktivni rat izmena\n** Stranica velikog prometa",
@@ -1813,7 +1854,7 @@
"undeleteinvert": "Obrni izbor",
"undeletecomment": "Razlog:",
"undeletedrevisions": "{{PLURAL:$1|Izmena je vraćena|$1 izmene su vraćene|$1 izmena je vraćeno}}",
- "undeletedrevisions-files": "$1 {{PLURAL:$1|1 izmena|izmene|izmena}} i $2 {{PLURAL:$2|1 datoteka je vraćena|datoteke su vraćene|datoteka je vraćeno}}",
+ "undeletedrevisions-files": "$1 {{PLURAL:$1|izmena|izmene|izmena}} i $2 {{PLURAL:$2|datoteka je vraćena|datoteke su vraćene|datoteka je vraćeno}}",
"undeletedfiles": "{{PLURAL:$1|Datoteka je vraćena|$1 datoteke su vraćene|$1 datoteka je vraćeno}}",
"cannotundelete": "Vraćanje nije uspelo:\n$1",
"undeletedpage": "'''Stranica $1 je vraćena'''\n\nPogledajte [[Special:Log/delete|istoriju brisanja]] za zapise o skorašnjim brisanjima i vraćanjima.",
@@ -1974,7 +2015,7 @@
"unblock-hideuser": "Ne možete deblokirati ovog korisnika jer je njegovo korisničko ime sakriveno.",
"ipb_cant_unblock": "Greška: blokada $1 ne postoji. Možda je korisnik deblokiran.",
"ipb_blocked_as_range": "Greška: IP adresa $1 nije direktno blokirana i ne može da se deblokira.\nOna je blokirana kao deo blokade $2, koja može biti deblokirana.",
- "ip_range_invalid": "Neispravan raspod IP adresa.",
+ "ip_range_invalid": "Neispravan raspon IP adresa.",
"ip_range_toolarge": "Opsežna blokiranja veća od /$1 nisu dozvoljena.",
"proxyblocker": "Bloker posrednika",
"proxyblockreason": "Vaša IP adresa je blokirana jer predstavlja otvoreni posrednik.\nObratite se vašem dobavljaču internet usluga ili tehničku podršku i obavestite ih o ovom ozbiljnom bezbednosnom problemu.",
@@ -2091,7 +2132,7 @@
"filemissing": "Nedostaje datoteka",
"thumbnail_error": "Greška pri stvaranju minijature: $1",
"djvu_page_error": "DjVu stranica je nedostupna",
- "djvu_no_xml": "Ne mogu da preuzmem XML za datoteku DjVu.",
+ "djvu_no_xml": "Ne mogu da preuzmem XML za DjVu datoteku.",
"thumbnail-temp-create": "Ne mogu da napravim privremenu datoteku minijature",
"thumbnail-dest-create": "Ne mogu da sačuvam minijaturu u odredištu",
"thumbnail_invalid_params": "Neispravni parametri za minijaturu",
@@ -2142,18 +2183,14 @@
"import-rootpage-nosubpage": "Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.",
"importlogpage": "Dnevnik uvoza",
"importlogpagetext": "Administrativni uvozi stranica s istorijama izmena s drugih vikija.",
- "import-logentry-upload": "je uvezao [[$1]] otpremanjem datoteke",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}}",
- "import-logentry-interwiki": "je uvezao $1 s drugog vikija",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|izmena uvezena|izmene uvezene|izmena uvezeno}} iz $2",
"javascripttest": "Javaskript test",
- "javascripttest-title": "Izvršavanje testova za $1",
"javascripttest-pagetext-noframework": "Ova stranica je rezervisana za izvršavanje javaskript testova.",
"javascripttest-pagetext-unknownframework": "Nepoznati radni okvir „$1“.",
"javascripttest-pagetext-frameworks": "Izaberite jedan od sledećih radnih okvira: $1",
"javascripttest-pagetext-skins": "Izaberite s kojom temom želite da pokrenete probu:",
"javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.",
- "javascripttest-qunit-heading": "Medijavikijin paket za testiranje – QUnit",
"tooltip-pt-userpage": "Vaša korisnička stranica",
"tooltip-pt-anonuserpage": "Korisnička stranica za IP adresu s koje uređujete",
"tooltip-pt-mytalk": "Vaša stranica za razgovor",
@@ -2163,6 +2200,7 @@
"tooltip-pt-mycontris": "Spisak vaših doprinosa",
"tooltip-pt-login": "Preporučujemo vam da se prijavite, iako to nije obavezno.",
"tooltip-pt-logout": "Odjavite se",
+ "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite nalog i prijavite se ali to nije obavezno",
"tooltip-ca-talk": "Razgovor o stranici sa sadržajem",
"tooltip-ca-edit": "Možete da uređujete ovu stranicu. Koristite pretpregled pre snimanja",
"tooltip-ca-addsection": "Započnite novi odeljak",
@@ -2192,6 +2230,7 @@
"tooltip-feed-atom": "Atom dovod ove stranice",
"tooltip-t-contributions": "Pogledajte spisak doprinosa ovog korisnika",
"tooltip-t-emailuser": "Pošaljite e-poruku ovom korisniku",
+ "tooltip-t-info": "Više informacija o ovoj stranici",
"tooltip-t-upload": "Pošaljite datoteke",
"tooltip-t-specialpages": "Spisak svih posebnih stranica",
"tooltip-t-print": "Verzija ove stranice za štampanje",
@@ -2243,8 +2282,8 @@
"creditspage": "Autori stranice",
"nocredits": "Ne postoje podaci o autoru ove stranice.",
"spamprotectiontitle": "Filter za zaštitu od nepoželjnih poruka",
- "spamprotectiontext": "Stranica koju želite da sačuvate je blokirana od filtera protiv nepoželjnih poruka.\nOvo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj listi.",
- "spamprotectionmatch": "Sledeći tekst je izazvao naš filter za neželjene poruke: $1",
+ "spamprotectiontext": "Filtera protiv neželjenih poruka je blokirao čuvanje ove stranice.\nOvo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj listi.",
+ "spamprotectionmatch": "Sledeći tekst je aktivirao naš filter za neželjene poruke: $1",
"spambot_username": "Čišćenje nepoželjnih poruka u Medijavikiji",
"spam_reverting": "Vraćam na poslednju izmenu koja ne sadrži veze do $1",
"spam_blanking": "Sve izmene sadrže veze do $1. Čistim",
@@ -2265,7 +2304,6 @@
"pageinfo-robot-policy": "Indeksiranje od strane robota",
"pageinfo-robot-index": "Dozvoljeno",
"pageinfo-robot-noindex": "Nije dozvoljeno",
- "pageinfo-views": "Broj pregleda",
"pageinfo-watchers": "Broj nadgledača stranicе",
"pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
"pageinfo-redirects-name": "Broj preusmerenja na ovu stranicu",
@@ -2368,13 +2406,13 @@
"hours-ago": "Pre $1 {{PLURAL:$1|sat|sata|sati}}",
"minutes-ago": "Pre $1 {{PLURAL:$1|minut|minuta}}",
"seconds-ago": "Pre $1 {{PLURAL:$1|sekunda|sekundi}}",
- "monday-at": "Ponedeljak u $1",
- "tuesday-at": "Utorak u $1",
- "wednesday-at": "Sreda u $1",
- "thursday-at": "Četvrtak u $1",
- "friday-at": "Petak u $1",
- "saturday-at": "Subota u $1",
- "sunday-at": "Nedelja u $1",
+ "monday-at": "u ponedeljak u $1",
+ "tuesday-at": "u utorak u $1",
+ "wednesday-at": "u sredu u $1",
+ "thursday-at": "u četvrtak u $1",
+ "friday-at": "u petak u $1",
+ "saturday-at": "u subotu u $1",
+ "sunday-at": "u nedelju u $1",
"yesterday-at": "Juče u $1",
"bad_image_list": "Format je sledeći:\n\nRazmatraju se samo nabrajanja (redovi koji počinju sa zvezdicom).\nPrva veza u redu mora da bude veza do neispravne datoteke.\nSve daljnje veze u istom redu smatraju se izuzecima.",
"variantname-zh-hans": "hans",
@@ -2784,7 +2822,6 @@
"exif-urgency-low": "Nisko ($1)",
"exif-urgency-high": "Visoko ($1)",
"exif-urgency-other": "Prilagođeni prioritet ($1)",
- "watchlistall2": "sve",
"namespacesall": "svi",
"monthsall": "sve",
"confirmemail": "Potvrda e-adrese",
@@ -2835,6 +2872,7 @@
"imgmultigo": "Idi!",
"imgmultigoto": "Idi na stranicu $1",
"img-lang-default": "(podrazumevani jezik)",
+ "img-lang-info": "Prikaži ovu sliku na $1. $2",
"img-lang-go": "Idi",
"ascending_abbrev": "rast.",
"descending_abbrev": "opad.",
@@ -2859,7 +2897,7 @@
"lag-warn-high": "Zbog preopterećenja baze podataka, izmene novije od $1 {{PLURAL:$1|sekunde|sekundi}} neće biti prikazane.",
"watchlistedit-normal-title": "Uređivanje spiska nadgledanja",
"watchlistedit-normal-legend": "Uklanjanje naslova sa spiska nadgledanja",
- "watchlistedit-normal-explain": "Naslovi na vašem spisku nadgledanja su prikazani ispod.\nDa biste uklonili naslov, označite kućicu do njega i kliknite na „{{int:Watchlistedit-normal-submit}}“.\nMožete i da [[Special:EditWatchlist/raw|uredite sirov spisak]].",
+ "watchlistedit-normal-explain": "Naslovi na vašem spisku nadgledanja su prikazani ispod.\nDa biste uklonili naslov, označite kvadratić do njega i kliknite na „{{int:Watchlistedit-normal-submit}}“.\nMožete i da [[Special:EditWatchlist/raw|uredite sirov spisak]].",
"watchlistedit-normal-submit": "Ukloni naslove",
"watchlistedit-normal-done": "{{PLURAL:$1|1=Jedna stranica je uklonjena|$1 stranice su uklonjene|$1 stranica je uklonjeno}} s vašeg spiska nadgledanja:",
"watchlistedit-raw-title": "Izmeni sirov spisak nadgledanja",
@@ -2870,13 +2908,14 @@
"watchlistedit-raw-done": "Vaš spisak nadgledanja je ažuriran.",
"watchlistedit-raw-added": "{{PLURAL:$1|1=Dodat je jedan naslov|Dodata su $1 naslova|Dodato je $1 naslova}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 naslov je uklonjen|Uklonjena su $1 naslova|Uklonjeno je $1 naslova}}:",
- "watchlistedit-clear-title": "Isprazni spisak nadgledanja",
+ "watchlistedit-clear-title": "Spisak nadgledanja ispražnjen",
"watchlistedit-clear-legend": "Isprazni spisak nadgledanja",
"watchlistedit-clear-explain": "Svi naslovi će biti uklonjeni iz vašeg spiska nadgledanja.",
"watchlistedit-clear-titles": "Naslovi:",
- "watchlistedit-clear-submit": "Isprazni spisak nadgledanja (Ovo je trajno!)",
+ "watchlistedit-clear-submit": "Isprazni spisak nadgledanja (Ovo je nepovratno!)",
"watchlistedit-clear-done": "Vaš spisak nadgledanja je ispražnjen.",
"watchlistedit-clear-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova su uklonjena|$1 naslova je uklonjeno}}:",
+ "watchlistedit-too-many": "Ima previše stranica za prikaz ovde.",
"watchlisttools-clear": "isprazni spisak nadgledanja",
"watchlisttools-view": "prikaži srodne izmene",
"watchlisttools-edit": "prikaži i uredi spisak nadgledanja",
@@ -2935,7 +2974,6 @@
"hebrew-calendar-m12-gen": "Elul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|razgovor]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "Nepoznata oznaka proširenja „$1“",
"duplicate-defaultsort": "'''Upozorenje:''' podrazumevani ključ svrstavanja „$2“ menja nekadašnji ključ „$1“.",
"version": "Verzija",
"version-extensions": "Instalirana proširenja",
@@ -2952,11 +2990,13 @@
"version-parser-function-hooks": "Kuke",
"version-hook-name": "Naziv kuke",
"version-hook-subscribedby": "Prijavljeno od",
- "version-version": "(izdanje $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[nema imena]",
"version-svn-revision": "(izm. $2)",
"version-license": "Medijaviki licenca",
"version-ext-license": "Licenca",
"version-ext-colheader-name": "Ekstenzija",
+ "version-skin-colheader-name": "Tema",
"version-ext-colheader-version": "Verzija",
"version-ext-colheader-license": "Licenca",
"version-ext-colheader-description": "Opis",
@@ -2966,13 +3006,16 @@
"version-poweredby-others": "ostali",
"version-poweredby-translators": "translatewiki.net prevodioci",
"version-credits-summary": "Želeli bismo da zahvalimo sledećim ljudima na njihovom doprinosu [[Special:Version|Medijavikiji]].",
- "version-license-info": "Medijaviki je slobodan softver možete ga redistribuirati i/ili modifikovati pod uslovima GNU-ove opšte javne licence verzija 2 ili svake sledeće koju objavi Zadužbina za slobodan softver.\n\nMedijaviki se redistribuirati u nadi da će biti od koristi, ali BEZ IKAKVE GARANCIJE čak i bez PODRAZUMEVANE GARANCIJE FUNKCIONALNOSTI ili PRIKLADNOSTI ZA ODREĐENEU NAMENU. Pogledajte GNU-ovu opštu javnu licencu za više informacija.\n\nTrebalo bi da ste primili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove opšte javne licence] zajedno s ovim programom. Ako niste, pišite na Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ili [//www.gnu.org/licenses/old-licenses/gpl-2.0.html pročitajte ovde].",
+ "version-license-info": "Medijaviki je slobodan softver možete ga redistribuirati i/ili modifikovati pod uslovima GNU-ove opšte javne licence verzija 2 ili svake sledeće koju objavi Zadužbina za slobodan softver.\n\nMedijaviki se redistribuira u nadi da će biti od koristi, ali BEZ IKAKVE GARANCIJE čak i bez PODRAZUMEVANE GARANCIJE FUNKCIONALNOSTI ili PRIKLADNOSTI ZA ODREĐENEU NAMENU. Pogledajte GNU-ovu opštu javnu licencu za više informacija.\n\nTrebalo bi da ste dobili [{{SERVER}}{{SCRIPTPATH}}/COPYING primerak GNU-ove opšte javne licence] zajedno sa ovim programom. Ako niste, pišite na Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ili [//www.gnu.org/licenses/old-licenses/gpl-2.0.html pročitajte ovde].",
"version-software": "Instalirani softver",
"version-software-product": "Proizvod",
"version-software-version": "Verzija",
"version-entrypoints": "Adrese ulazne tačke",
"version-entrypoints-header-entrypoint": "Ulazna tačka",
"version-entrypoints-header-url": "Adresa",
+ "version-libraries": "Instalirane biblioteke",
+ "version-libraries-library": "Biblioteka",
+ "version-libraries-version": "Verzija",
"redirect": "Preusmerenje na datoteku, korisnika, stranicu ili izmenu",
"redirect-legend": "Preusmeri na datoteku ili stranicu",
"redirect-submit": "Idi",
@@ -3007,6 +3050,7 @@
"specialpages-group-wiki": "Podaci i alati",
"specialpages-group-redirects": "Preusmeravanje posebnih stranica",
"specialpages-group-spam": "Alatke protiv nepoželjnih poruka",
+ "specialpages-group-developer": "Programerski alati",
"blankpage": "Prazna stranica",
"intentionallyblankpage": "Ova stranica je namerno ostavljena praznom.",
"external_image_whitelist": " #Ostavite ovaj red onakvim kakav jeste<pre>\n#Ispod dodajte odlomke regularnih izraza (samo deo koji se nalazi između //)\n#Oni će biti upoređeni s adresama spoljašnjih slika\n#One koje se poklapaju biće prikazane kao slike, a preostale kao veze do slika\n#Redovi koji počinju s tarabom se smatraju komentarima\n#Svi unosi su osetljivi na mala i velika slova\n\n#Dodajte sve odlomke regularnih izraza iznad ovog reda. Ovaj red ne dirajte</pre>",
@@ -3019,12 +3063,42 @@
"tags-tag": "Naziv oznake",
"tags-display-header": "Izgled na spiskovima izmena",
"tags-description-header": "Opis značenja",
+ "tags-source-header": "Izvor",
"tags-active-header": "Aktivna?",
"tags-hitcount-header": "Označene izmene",
+ "tags-actions-header": "Radnje",
"tags-active-yes": "Da",
"tags-active-no": "Ne",
+ "tags-source-none": "Van upotrebe",
"tags-edit": "uredi",
+ "tags-delete": "obriši",
+ "tags-activate": "aktiviraj",
+ "tags-deactivate": "dekativiraj",
"tags-hitcount": "$1 {{PLURAL:$1|izmena|izmene|izmena}}",
+ "tags-manage-no-permission": "Nemate dozvolu da menjate oznake.",
+ "tags-create-heading": "Nova oznaka",
+ "tags-create-tag-name": "Naziv oznake:",
+ "tags-create-reason": "Razlog:",
+ "tags-create-submit": "Napravi",
+ "tags-create-no-name": "Morate navesti naziv oznake.",
+ "tags-create-already-exists": "Oznaka „$1“ već postoji.",
+ "tags-create-warnings-below": "Pravite novu oznaku, želite li da nastavite?",
+ "tags-delete-title": "Brisanje oznaka",
+ "tags-delete-explanation-initial": "Brišete oznaku „$1“ iz baze podataka.",
+ "tags-delete-reason": "Razlog:",
+ "tags-delete-submit": "Nepovratno obriši ovu oznaku",
+ "tags-delete-not-found": "Oznaka „$1“ ne postoji.",
+ "tags-activate-title": "Aktiviranje oznaka",
+ "tags-activate-question": "Aktivirate oznaku „$1“.",
+ "tags-activate-reason": "Razlog:",
+ "tags-activate-not-allowed": "Nije moguće aktivirati oznaku „$1“.",
+ "tags-activate-not-found": "Oznaka „$1“ ne postoji.",
+ "tags-activate-submit": "Aktiviraj",
+ "tags-deactivate-title": "Deaktiviranje oznaka",
+ "tags-deactivate-question": "Deaktivirate oznaku „$1“.",
+ "tags-deactivate-reason": "Razlog:",
+ "tags-deactivate-not-allowed": "Nije moguće deaktivirati oznaku „$1“.",
+ "tags-deactivate-submit": "Dekativiraj",
"comparepages": "Upoređivanje stranica",
"compare-page1": "Stranica 1",
"compare-page2": "Stranica 2",
@@ -3036,8 +3110,8 @@
"compare-revision-not-exists": "Navedena izmena ne postoji.",
"dberr-problems": "Došlo je do tehničkih problema.",
"dberr-again": "Sačekajte nekoliko minuta i ponovo učitajte stranicu.",
- "dberr-info": "(ne mogu da se povežem sa serverom baze podataka: $1)",
- "dberr-info-hidden": "(ne mogu da se povežem sa serverom baze podataka)",
+ "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.",
@@ -3062,7 +3136,7 @@
"logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
"logentry-delete-restore": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3",
"logentry-delete-event": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|1=događaja|$5 događaja|$5 događaja}} u dnevniku na $3: $4",
- "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost $5 {{PLURAL:$5|1=izmene|izmene|izmena}} na stranici $3: $4",
+ "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|1=jedne izmene|$5 izmene|$5 izmena}} na stranici $3: $4",
"logentry-delete-event-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost događaja u dnevniku na $3",
"logentry-delete-revision-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost izmena na stranici $3",
"logentry-suppress-delete": "$1 je {{GENDER:$2|potisnuo|potisnula}} stranicu $3",
@@ -3078,6 +3152,14 @@
"revdelete-uname-unhid": "korisničko ime je otkriveno",
"revdelete-restricted": "primenjena ograničenja za administratore",
"revdelete-unrestricted": "uklonjena ograničenja za administratore",
+ "logentry-block-block": "$1 je {{GENDER:$2|blokirao|blokirala}} {{GENDER:$4|$3}} u trajanju od $5 $6",
+ "logentry-block-unblock": "$1 je {{GENDER:$2|deblokirao|deblokirala}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 je {{GENDER:$2|promenio|promenila}} podešavanja za blokiranje {{GENDER:$4|korisnika|korisnice}} {{GENDER:$4|$3}} u trajanju od $5 $6",
+ "logentry-suppress-block": "$1 je {{GENDER:$2|blokirao|blokirala}} {{GENDER:$4|$3}} u trajanju od $5 $6",
+ "logentry-suppress-reblock": "$1 je {{GENDER:$2|promenio|promenila}} podešavanja za blokiranje {{GENDER:$4|korisnika|korisnice}} {{GENDER:$4|$3}} u trajanju od $5 $6",
+ "logentry-import-upload": "$1 je {{GENDER:$2|uvezao|uvezla}} $3 otpremanjem datoteke",
+ "logentry-import-interwiki": "$1 je {{GENDER:$2|uvezao|uvezla}} $3 s drugog vikija",
+ "logentry-merge-merge": "$1 je {{GENDER:$2|spojio|spojila}} $3 u $4 (sve do izmene $5)",
"logentry-move-move": "$1 je {{GENDER:$2|premestio|premestila}} stranicu $3 na $4",
"logentry-move-move-noredirect": "$1 je {{GENDER:$2|premestio|premestila}} stranicu $3 na $4 bez ostavljanja preusmerenja",
"logentry-move-move_redir": "$1 je {{GENDER:$2|premestio|premestila}} stranicu $3 na $4 preko preusmerenja",
@@ -3087,25 +3169,38 @@
"logentry-newusers-newusers": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog",
"logentry-newusers-create": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog",
"logentry-newusers-create2": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3",
- "logentry-newusers-byemail": "Korisnički nalog $3 je {{GENDER:$2|napravljen}} od strane $1 i lozinka je poslata na e-poštu",
+ "logentry-newusers-byemail": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3 i lozinka je poslata na e-poštu",
"logentry-newusers-autocreate": "Korisnički nalog $1 je automatski {{GENDER:$2|otvoren}}",
"logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za $3 iz $4 u $5",
"logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3",
"logentry-rights-autopromote": "$1 je automatski {{GENDER:$1|unapređen|unapređena}} iz $4 u $5",
+ "logentry-upload-upload": "$1 je {{GENDER:$2|poslao|poslala}} $3",
+ "logentry-upload-overwrite": "$1 je {{GENDER:$2|poslao|poslala}} novu verziju $3",
+ "logentry-upload-revert": "$1 je {{GENDER:$2|poslao|poslala}} $3",
+ "log-name-managetags": "Dnevnik oznaka",
+ "log-description-managetags": "Ovaj dnevnik sadrži spisak izmena u vezi [[Special:Tags|oznaka]]. Dnevnik sadrži samo radnje izvršene od strane administratora; unosi za oznake napravljene ili obrisane od strane viki softvera se ne nalaze u ovom dnevniku.",
+ "logentry-managetags-create": "$1 je {{GENDER:$2|napravio|napravila}} oznaku „$4“",
+ "logentry-managetags-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} oznaku „$4“ (uklonjena je iz $5 {{PLURAL:$5|izmene ili dnevnika|izmena i/ili dnevnika}})",
+ "logentry-managetags-activate": "$1 je {{GENDER:$2|aktivirao|aktivirala}} oznaku „$4“ za upotrebu od strane korisnika i botova",
+ "logentry-managetags-deactivate": "$1 je {{GENDER:$2|deaktivirao|deaktivirala}} oznaku „$4“ za upotrebu od strane korisnika i botova",
"rightsnone": "(nema)",
+ "revdelete-summary": "opis izmene",
+ "feedback-adding": "Dodajem povratnu informaciju na stranicu…",
+ "feedback-back": "Nazad",
+ "feedback-bugcheck": "Odlično! Proverite da li je greška [$1 poznata od pre].",
+ "feedback-bugnew": "Provereno. Prijavi novu grešku",
"feedback-bugornote": "Ako ste spremni da detaljno opišete tehnički problem, onda [$1 prijavite grešku].\nU suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajati na stranici „[$3 $2]“, zajedno s korisničkim imenom i pregledačem koji koristite.",
- "feedback-subject": "Naslov:",
- "feedback-message": "Poruka:",
"feedback-cancel": "Otkaži",
- "feedback-submit": "Pošalji povratnu informaciju",
- "feedback-adding": "Dodajem povratnu informaciju na stranicu…",
+ "feedback-close": "Urađeno",
+ "feedback-error-title": "Greška",
"feedback-error1": "Greška: neprepoznat rezultat od API-ja",
"feedback-error2": "Greška: uređivanje nije uspelo",
"feedback-error3": "Greška: nema odgovora od API-ja",
+ "feedback-message": "Poruka:",
+ "feedback-subject": "Naslov:",
+ "feedback-submit": "Pošalji",
"feedback-thanks": "Hvala! Vaša povratna informacija je postavljena na stranicu „[$2 $1]“.",
- "feedback-close": "Urađeno",
- "feedback-bugcheck": "Odlično! Proverite da li je greška [$1 poznata od pre].",
- "feedback-bugnew": "Provereno. Prijavi novu grešku",
+ "feedback-thanks-title": "Hvala vam!",
"searchsuggest-search": "Pretraga",
"searchsuggest-containing": "sadrži...",
"api-error-badaccess-groups": "Nije vam dozvoljeno da otpremate datoteke na ovaj viki.",
@@ -3168,10 +3263,52 @@
"expand_templates_input": "Unos:",
"expand_templates_output": "Rezultat",
"expand_templates_xml_output": "XML izlaz",
+ "expand_templates_html_output": "Sirov HTML izlaz",
"expand_templates_ok": "U redu",
"expand_templates_remove_comments": "Ukloni komentare",
"expand_templates_remove_nowiki": "Poništava efekat <nowiki> tagova u prikazu članaka",
"expand_templates_generate_xml": "Prikaži XML stablo",
+ "expand_templates_generate_rawhtml": "Prikaži sirov HTML",
"expand_templates_preview": "Prikaz",
- "right-pagelang": "menjanje jezika stranice"
+ "pagelang-name": "Stranica",
+ "pagelang-language": "Jezik",
+ "pagelang-select-lang": "Izaberi jezik",
+ "right-pagelang": "menjanje jezika stranice",
+ "action-pagelang": "promenu jezika stranice",
+ "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|promenio|promenila}} jezik stranice $3 iz $4 u $5.",
+ "mediastatistics": "Statistika datoteka",
+ "mediastatistics-summary": "Statistike o tipovima poslatih datoteka. Ovde su uračunate samo najnovije verzije datoteka. Stare ili obrisane verzije nisu uračunate.",
+ "mediastatistics-table-mimetype": "MIME tip",
+ "mediastatistics-table-extensions": "Moguće ekstenzije",
+ "mediastatistics-table-count": "Broj datoteka",
+ "mediastatistics-table-totalbytes": "Ukupna veličina",
+ "mediastatistics-header-unknown": "Nepoznato",
+ "mediastatistics-header-bitmap": "Bitmap slike",
+ "mediastatistics-header-drawing": "Crteži (vektorske slike)",
+ "mediastatistics-header-audio": "Audio",
+ "mediastatistics-header-video": "Video",
+ "mediastatistics-header-office": "Kancelarija",
+ "mediastatistics-header-text": "Tekstualne",
+ "mediastatistics-header-executable": "Izvršne",
+ "mediastatistics-header-archive": "Kompresovane",
+ "json-error-syntax": "Greška u sintaksi",
+ "headline-anchor-title": "Veza do ovog odeljka",
+ "special-characters-group-latin": "latinica",
+ "special-characters-group-latinextended": "proširena latinica",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Simboli",
+ "special-characters-group-greek": "grčki",
+ "special-characters-group-cyrillic": "ćirilica",
+ "special-characters-group-arabic": "arapski",
+ "special-characters-group-arabicextended": "prošireni arapski",
+ "special-characters-group-persian": "persijski",
+ "special-characters-group-hebrew": "jevrejsko",
+ "special-characters-group-bangla": "Bangla",
+ "special-characters-group-tamil": "tamilski",
+ "special-characters-group-telugu": "telugu",
+ "special-characters-group-sinhala": "sinhalski",
+ "special-characters-group-gujarati": "Gudžarati",
+ "special-characters-group-thai": "tajlandski",
+ "special-characters-group-lao": "laoski",
+ "special-characters-group-khmer": "kmerski"
}
diff --git a/languages/i18n/srn.json b/languages/i18n/srn.json
index 8cc2bbde..82189049 100644
--- a/languages/i18n/srn.json
+++ b/languages/i18n/srn.json
@@ -588,7 +588,6 @@
"pager-newer-n": "{{PLURAL:$1|nyunr wan|nyunr $1}}",
"pager-older-n": "{{PLURAL:$1|owrur wan|owrur $1}}",
"booksources": "Buku source",
- "booksources-go": "Suku",
"specialloguserlabel": "Kebroikiman:",
"speciallogtitlelabel": "Papira nen:",
"log": "Log buku",
@@ -627,7 +626,7 @@
"watchthispage": "Tan luku a papira disi",
"unwatch": "No tan luku",
"watchlist-details": "{{PLURAL:$1|Wan papira|$1 papira}} de ini yu Tan Luku réy, sondro fu teri den kruderi papira.",
- "wlshowlast": "Sori laste $1 yuru, $2 dey ($3)",
+ "wlshowlast": "Sori laste $1 yuru, $2 dey ()",
"watching": "A wiki e poti a papira disi ini yu Tan Luku...",
"unwatching": "A wiki e puru a papira disi fu yu Tan Luku...",
"deletepage": "Disi papira trowe",
@@ -777,7 +776,6 @@
"metadata-expand": "Sori moro fin'fini",
"metadata-collapse": "Kibri a fin'fini",
"metadata-fields": "Den EXIF-metadata boksu ini a boskopu disi o sori owktu tapu wan prenki papira, efu a metadata tabel tapu.\nTrawan o kibri.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "ala",
"namespacesall": "ala",
"monthsall": "ala",
"confirm_purge_button": "oki",
diff --git a/languages/i18n/ss.json b/languages/i18n/ss.json
index af910340..c65edf66 100644
--- a/languages/i18n/ss.json
+++ b/languages/i18n/ss.json
@@ -1,217 +1,208 @@
{
- "@metadata": {
- "authors": [
- "Jatrobat",
- "MF-Warburg",
- "Sibande"
- ]
- },
- "sunday": "LiSontfo",
- "monday": "Msombuluko",
- "tuesday": "Lesibili",
- "wednesday": "Lesitsatfu",
- "thursday": "Lesine",
- "friday": "Lesihlanu",
- "saturday": "Mgcibelo",
- "sun": "LiSontfo",
- "mon": "Msombuluko",
- "tue": "Lesibili",
- "wed": "Lesitsatfu",
- "thu": "Lesine",
- "fri": "Lesihlanu",
- "sat": "Mgcibelo",
- "january": "Bhimbidvwane",
- "february": "iNdlovana",
- "march": "iNdlovu",
- "april": "Mabasa",
- "may_long": "iNkhwekhweti",
- "june": "iNhlaba",
- "july": "Kholwane",
- "august": "iNgci",
- "september": "iNyoni",
- "october": "iMphala",
- "november": "Lweti",
- "december": "iNgongoni",
- "january-gen": "Bhimbidvwane",
- "february-gen": "iNdlovana",
- "march-gen": "iNdlovu",
- "april-gen": "Mabasa",
- "may-gen": "iNkhwekhweti",
- "june-gen": "iNhlaba",
- "july-gen": "Kholwane",
- "august-gen": "iNgci",
- "september-gen": "iNyoni",
- "october-gen": "iMphala",
- "november-gen": "Lweti",
- "december-gen": "iNgongoni",
- "jan": "Bhi",
- "feb": "iNdlova",
- "mar": "iNdlovu",
- "apr": "Mab",
- "may": "iNkhwe",
- "jun": "iNhla",
- "jul": "Kho",
- "aug": "iNgci",
- "sep": "iNyo",
- "oct": "iMpha",
- "nov": "Lwe",
- "dec": "iNgo",
- "category_header": "Makhasi lakulomkhakha \"$1\"",
- "subcategories": "Mikhakha lengaphansi",
- "category-media-header": "i-Media lekulomkhakha \"$1\"",
- "category-empty": "''Lomkhakha ute makhasi nobe i-media lewuphetse.''",
- "hidden-category-category": "Mikhakha lefihliwe",
- "listingcontinuesabbrev": "chubeka.",
- "index-category": "Makhasi lacokelelwe",
- "noindex-category": "Makhasi lasabalele",
- "about": "Kabanti",
- "article": "Likhasi lentfo",
- "newwindow": "(kuvulekela tukweli-window lelisha)",
- "cancel": "Yekela",
- "moredotdotdot": "Lokunyenti...",
- "mypage": "Likhasi lami",
- "mytalk": "Tingcoco tami",
- "anontalk": "Tingcogco letentwe ngulelikheli lale-IP",
- "qbfind": "Tfola",
- "qbbrowse": "Browse",
- "qbedit": "Hlela",
- "qbpageoptions": "Lelikhasi",
- "qbmyoptions": "Makhasi ami",
- "vector-action-addsection": "Ngeta sihloko",
- "vector-action-move": "Khweshisa",
- "vector-view-create": "Create",
- "vector-view-edit": "Hlela",
- "vector-view-history": "Bona umlandvo",
- "vector-view-view": "Fundza",
- "actions": "Tento",
- "returnto": "Buyela ku $1.",
- "help": "Sita",
- "search": "Sesha",
- "searchbutton": "Sesha",
- "go": "Hamba",
- "searcharticle": "Hamba",
- "history": "Umlandvo walelikhasi",
- "history_short": "Umlandvo",
- "print": "Print",
- "edit": "Hlela",
- "create": "Yakha",
- "editthispage": "Hlela lelikhasi",
- "create-this-page": "Yakha lelikhasi",
- "delete": "Sula",
- "deletethispage": "Sula lelikhasi",
- "protect": "Vikela",
- "protect_change": "gucula",
- "protectthispage": "Vikela lelikhasi",
- "unprotect": "Yekelela",
- "unprotectthispage": "Yekelela lelikhasi",
- "newpage": "Likhasi lelisha",
- "talkpage": "Coca ngalelikhasi",
- "talkpagelinktext": "Ingcoco",
- "specialpage": "Likhasi lelibalulekile",
- "personaltools": "Mathulusi emuntfu",
- "postcomment": "Sihloko lesinsha",
- "articlepage": "Bona likhasi lelicuketse",
- "talk": "Ingcoco",
- "views": "Kubukeka",
- "toolbox": "Libhokisi Lemathulusi",
- "userpage": "Buna likhasi lemuntfu",
- "projectpage": "Bona likhasi leprojekthi",
- "imagepage": "Bona lelifayela likhasi",
- "mediawikipage": "Bona likhasi lemiyaleto",
- "viewhelppage": "Bona likhasi lelusito",
- "categorypage": "Bona likhasi lemikhakha",
- "viewtalkpage": "Bona ingcoco",
- "otherlanguages": "Ngaletinye tilwimi",
- "redirectedfrom": "(Utfunyelelwe likhasi $1)",
- "redirectpagesub": "Likhasi lekutfumela",
- "lastmodifiedat": "Lelikhasi ligcine kushintjwa ngetingu $1, ngo $2.",
- "viewcount": "Lelikhasi selibonwe {{PLURAL:$1|kanye|kayi $1}}.",
- "protectedpage": "Likhasi lelivikelekile",
- "jumpto": "Zuba ku:",
- "jumptosearch": "sesha",
- "view-pool-error": "Siyacolisa, maseva etfu agwele kakhulu ngalesikhatsi.\nKunebantfu labanyenti labatama kubona lelikhasi.\nSicela ume kancane ngaphambi lwekuphindze ubone lelikhasi.\n\n$1",
- "aboutsite": "Kabanti nge {{SITENAME}}",
- "aboutpage": "Project:Kabanti",
- "copyright": "Lokucuketfwe kungaphansi kwe $1.",
- "copyrightpage": "{{ns:project}}:Malungelo ekukhicita",
- "currentevents": "Tentakalo tanyalo",
- "currentevents-url": "Project:Tentakalo tanyalo",
- "edithelp": "Lusito ngekuhlela",
- "mainpage": "Likhasi Lelikhulu",
- "mainpage-description": "Likhasi lelikhulu",
- "policy-url": "Project:Umtsetfo",
- "portal": "Likhefi le-inthanethi",
- "portal-url": "Project:Likhefi le-inthanethi",
- "badaccess": "Liphutsa lemalungelo",
- "badaccess-group0": "Awukavunyelwa kwenta lesento lobowutama kusenta.",
- "badaccess-groups": "Lesento losicelile sincishiselwe bantfu labakule {{PLURAL:$2|ncumbi|labakunobe nguyiphi incumbi}}: $1.",
- "ok": "Kulungile",
- "retrievedfrom": "Kutsatfwe ku \"$1\"",
- "youhavenewmessages": "Una $1 ($2).",
- "youhavenewmessagesmulti": "Unemilayeto lemisha nge $1",
- "editsection": "hlela",
- "editold": "hlela",
- "viewsourceold": "Bona kwakheka",
- "editlink": "hlela",
- "viewsourcelink": "Bona kwakheka",
- "editsectionhint": "Hlela sihloko: $1",
- "toc": "Lokucuketfwe",
- "showtoc": "khomba",
- "hidetoc": "fihla",
- "thisisdeleted": "Bona nobe buyisela esimweni $1?",
- "viewdeleted": "Bona $1?",
- "nstab-main": "Likhasi",
- "nstab-user": "Umuntfu",
- "nstab-help": "Likhasi lelusito",
- "loginlanguagelabel": "Lulwimi: $1",
- "search-relatedarticle": "Lokuhlobene",
- "searcheverything-enable": "Sesha onke ma namespaces",
- "searchrelated": "lokuhlobene",
- "searchall": "konke",
- "showingresults": "Ngaphasi kukhonjiswa kuya ku {{PLURAL:$1|'''1''' umphumela|'''$1''' miphumela}} kucalwa nga #'''$2'''.",
- "showingresultsnum": "Ngaphansi kukhonjiswa {{PLURAL:$3|'''1''' umphumela|'''$3''' miphumela}} kucalwa nga #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Umphumela '''$1''' of '''$3'''|Imiphumela '''$1 - $2''' ye '''$3'''}} ya '''$4'''",
- "search-nonefound": "Kute umphume lotfolwe/lofanele lesicelo sakho.",
- "powersearch-legend": "Sesha ngalokuphakeme",
- "powersearch-ns": "Sesha ku namespaces:",
- "powersearch-redir": "Makhasi latfumelayo",
- "powersearch-togglelabel": "Buka:",
- "powersearch-toggleall": "Konke",
- "powersearch-togglenone": "Kute",
- "search-external": "Sesha ngelithulusi langaphandle",
- "searchdisabled": "{{SITENAME}} kusesha kuvinjiwe.\nUngasesha nge Google.\nNaka kutsi makhasi abo e {{SITENAME}} angaba sekadlulelwe sikhatsi.",
- "searchresultshead": "Sesha",
- "uid": "Matisi Wemuntfu:",
- "yourlanguage": "Lulwimi:",
- "listfiles_date": "Lusuku",
- "listfiles_name": "Ligama",
- "listfiles_user": "Umuntfu",
- "filehist-datetime": "Lusuku/Sikhatsi",
- "filehist-user": "Umuntfu",
- "brokenredirects-edit": "hlela",
- "withoutinterwiki-submit": "Khomba",
- "move": "Khweshisa",
- "booksources-go": "Hamba",
- "specialloguserlabel": "Umuntfu:",
- "allpagessubmit": "Hamba",
- "linksearch-ok": "Sesha",
- "listusers-submit": "Khomba",
- "watch": "Gadza",
- "unwatch": "Yekela kugadza",
- "restriction-edit": "Hlela",
- "restriction-move": "Khweshisa",
- "restriction-create": "Create",
- "undelete-search-submit": "Sesha",
- "sp-contributions-talk": "ingcoco",
- "sp-contributions-submit": "Sesha",
- "ipblocklist-submit": "Sesha",
- "movelogpage": "Khweshisa i-log",
- "allmessagesname": "Ligama",
- "tooltip-search": "Sesha i-{{SITENAME}}",
- "tooltip-p-logo": "Vakashela likhasi lelikhulu",
- "ilsubmit": "Sesha",
- "imgmultigo": "Hamba!",
- "table_pager_limit_submit": "Hamba",
- "version-specialpages": "Emakhasi labalulekile",
- "specialpages": "Emakhasi labalulekile"
+ "@metadata": {
+ "authors": [
+ "Jatrobat",
+ "MF-Warburg",
+ "Sibande",
+ "Bobbyshabangu"
+ ]
+ },
+ "sunday": "LiSontfo",
+ "monday": "Msombuluko",
+ "tuesday": "Lesibili",
+ "wednesday": "Lesitsatfu",
+ "thursday": "Lesine",
+ "friday": "Lesihlanu",
+ "saturday": "Mgcibelo",
+ "sun": "LiSontfo",
+ "mon": "Msombuluko",
+ "tue": "Lesibili",
+ "wed": "Lesitsatfu",
+ "thu": "Lesine",
+ "fri": "Lesihlanu",
+ "sat": "Mgcibelo",
+ "january": "Bhimbidvwane",
+ "february": "iNdlovana",
+ "march": "iNdlovu",
+ "april": "Mabasa",
+ "may_long": "iNkhwekhweti",
+ "june": "iNhlaba",
+ "july": "Kholwane",
+ "august": "iNgci",
+ "september": "iNyoni",
+ "october": "iMphala",
+ "november": "Lweti",
+ "december": "iNgongoni",
+ "january-gen": "Bhimbidvwane",
+ "february-gen": "iNdlovana",
+ "march-gen": "iNdlovu",
+ "april-gen": "Mabasa",
+ "may-gen": "iNkhwekhweti",
+ "june-gen": "iNhlaba",
+ "july-gen": "Kholwane",
+ "august-gen": "iNgci",
+ "september-gen": "iNyoni",
+ "october-gen": "iMphala",
+ "november-gen": "Lweti",
+ "december-gen": "iNgongoni",
+ "jan": "Bhi",
+ "feb": "iNdlova",
+ "mar": "iNdlovu",
+ "apr": "Mab",
+ "may": "iNkhwe",
+ "jun": "iNhla",
+ "jul": "Kho",
+ "aug": "iNgci",
+ "sep": "iNyo",
+ "oct": "iMpha",
+ "nov": "Lwe",
+ "dec": "iNgo",
+ "category_header": "Makhasi lakulomkhakha \"$1\"",
+ "subcategories": "Mikhakha lengaphansi",
+ "category-media-header": "i-Media lekulomkhakha \"$1\"",
+ "category-empty": "''Lomkhakha ute makhasi nobe i-media lewuphetse.''",
+ "hidden-category-category": "Mikhakha lefihliwe",
+ "listingcontinuesabbrev": "chubeka.",
+ "index-category": "Makhasi lacokelelwe",
+ "noindex-category": "Makhasi lasabalele",
+ "about": "Kabanti",
+ "article": "Likhasi lentfo",
+ "newwindow": "(kuvulekela tukweli-window lelisha)",
+ "cancel": "Yekela",
+ "moredotdotdot": "Lokunyenti...",
+ "mypage": "Likhasi lami",
+ "mytalk": "Tingcoco tami",
+ "anontalk": "Tingcogco letentwe ngulelikheli lale-IP",
+ "qbfind": "Tfola",
+ "qbbrowse": "Browse",
+ "qbedit": "Hlela",
+ "qbpageoptions": "Lelikhasi",
+ "qbmyoptions": "Makhasi ami",
+ "actions": "Tento",
+ "returnto": "Buyela ku $1.",
+ "help": "Sita",
+ "search": "Sesha",
+ "searchbutton": "Sesha",
+ "go": "Hamba",
+ "searcharticle": "Hamba",
+ "history": "Umlandvo walelikhasi",
+ "history_short": "Umlandvo",
+ "print": "Print",
+ "edit": "Hlela",
+ "create": "Yakha",
+ "editthispage": "Hlela lelikhasi",
+ "create-this-page": "Yakha lelikhasi",
+ "delete": "Sula",
+ "deletethispage": "Sula lelikhasi",
+ "protect": "Vikela",
+ "protect_change": "gucula",
+ "protectthispage": "Vikela lelikhasi",
+ "unprotect": "Yekelela",
+ "unprotectthispage": "Yekelela lelikhasi",
+ "newpage": "Likhasi lelisha",
+ "talkpage": "Coca ngalelikhasi",
+ "talkpagelinktext": "Ingcoco",
+ "specialpage": "Likhasi lelibalulekile",
+ "personaltools": "Mathulusi emuntfu",
+ "articlepage": "Bona likhasi lelicuketse",
+ "talk": "Ingcoco",
+ "views": "Kubukeka",
+ "toolbox": "Libhokisi Lemathulusi",
+ "userpage": "Buna likhasi lemuntfu",
+ "projectpage": "Bona likhasi leprojekthi",
+ "imagepage": "Bona lelifayela likhasi",
+ "mediawikipage": "Bona likhasi lemiyaleto",
+ "viewhelppage": "Bona likhasi lelusito",
+ "categorypage": "Bona likhasi lemikhakha",
+ "viewtalkpage": "Bona ingcoco",
+ "otherlanguages": "Ngaletinye tilwimi",
+ "redirectedfrom": "(Utfunyelelwe likhasi $1)",
+ "redirectpagesub": "Likhasi lekutfumela",
+ "lastmodifiedat": "Lelikhasi ligcine kushintjwa ngetingu $1, ngo $2.",
+ "viewcount": "Lelikhasi selibonwe {{PLURAL:$1|kanye|kayi $1}}.",
+ "protectedpage": "Likhasi lelivikelekile",
+ "jumpto": "Zuba ku:",
+ "jumptosearch": "sesha",
+ "view-pool-error": "Siyacolisa, maseva etfu agwele kakhulu ngalesikhatsi.\nKunebantfu labanyenti labatama kubona lelikhasi.\nSicela ume kancane ngaphambi lwekuphindze ubone lelikhasi.\n\n$1",
+ "aboutsite": "Kabanti nge {{SITENAME}}",
+ "aboutpage": "Project:Kabanti",
+ "copyright": "Lokucuketfwe kungaphansi kwe $1.",
+ "copyrightpage": "{{ns:project}}:Malungelo ekukhicita",
+ "currentevents": "Tentakalo tanyalo",
+ "currentevents-url": "Project:Tentakalo tanyalo",
+ "edithelp": "Lusito ngekuhlela",
+ "mainpage": "Likhasi Lelikhulu",
+ "mainpage-description": "Likhasi lelikhulu",
+ "policy-url": "Project:Umtsetfo",
+ "portal": "Likhefi le-inthanethi",
+ "portal-url": "Project:Likhefi le-inthanethi",
+ "badaccess": "Liphutsa lemalungelo",
+ "badaccess-group0": "Awukavunyelwa kwenta lesento lobowutama kusenta.",
+ "badaccess-groups": "Lesento losicelile sincishiselwe bantfu labakule {{PLURAL:$2|ncumbi|labakunobe nguyiphi incumbi}}: $1.",
+ "ok": "Kulungile",
+ "retrievedfrom": "Kutsatfwe ku \"$1\"",
+ "youhavenewmessages": "Una $1 ($2).",
+ "youhavenewmessagesmulti": "Unemilayeto lemisha nge $1",
+ "editsection": "hlela",
+ "editold": "hlela",
+ "viewsourceold": "Bona kwakheka",
+ "editlink": "hlela",
+ "viewsourcelink": "Bona kwakheka",
+ "editsectionhint": "Hlela sihloko: $1",
+ "toc": "Lokucuketfwe",
+ "showtoc": "khomba",
+ "hidetoc": "fihla",
+ "thisisdeleted": "Bona nobe buyisela esimweni $1?",
+ "viewdeleted": "Bona $1?",
+ "nstab-main": "Likhasi",
+ "nstab-user": "Umuntfu",
+ "nstab-help": "Likhasi lelusito",
+ "loginlanguagelabel": "Lulwimi: $1",
+ "pt-login-button": "Ngena",
+ "revdelete-text-file": "emaveshini lacishiwe atosolo avela emlandvweni, kodvwa letinye tincenywe talendzaba ngete yabakhona emphakatsini.",
+ "revdelete-text-others": "Labanye bahleli {{LIGAMALELISAYITHI}} batokhona kutfola mibiko lecishiwe baphindze bakhone kuyibuyisa kutsi ibekhona besebentisa tinhlelo letifanako te interface, loku kungenteka kuphela uma kunemigomo letsite nemibandzela.",
+ "search-relatedarticle": "Lokuhlobene",
+ "searchrelated": "lokuhlobene",
+ "searchall": "konke",
+ "showingresults": "Ngaphasi kukhonjiswa kuya ku {{PLURAL:$1|'''1''' umphumela|'''$1''' miphumela}} kucalwa nga #'''$2'''.",
+ "search-nonefound": "Kute umphume lotfolwe/lofanele lesicelo sakho.",
+ "powersearch-legend": "Sesha ngalokuphakeme",
+ "powersearch-ns": "Sesha ku namespaces:",
+ "powersearch-togglelabel": "Buka:",
+ "powersearch-toggleall": "Konke",
+ "powersearch-togglenone": "Kute",
+ "search-external": "Sesha ngelithulusi langaphandle",
+ "searchdisabled": "{{SITENAME}} kusesha kuvinjiwe.\nUngasesha nge Google.\nNaka kutsi makhasi abo e {{SITENAME}} angaba sekadlulelwe sikhatsi.",
+ "searchresultshead": "Sesha",
+ "yourlanguage": "Lulwimi:",
+ "listfiles_date": "Lusuku",
+ "listfiles_name": "Ligama",
+ "listfiles_user": "Umuntfu",
+ "filehist-datetime": "Lusuku/Sikhatsi",
+ "filehist-user": "Umuntfu",
+ "brokenredirects-edit": "hlela",
+ "withoutinterwiki-submit": "Khomba",
+ "move": "Khweshisa",
+ "specialloguserlabel": "Umuntfu:",
+ "allpagessubmit": "Hamba",
+ "linksearch-ok": "Sesha",
+ "listusers-submit": "Khomba",
+ "watch": "Gadza",
+ "unwatch": "Yekela kugadza",
+ "restriction-edit": "Hlela",
+ "restriction-move": "Khweshisa",
+ "restriction-create": "Create",
+ "undelete-search-submit": "Sesha",
+ "sp-contributions-talk": "ingcoco",
+ "sp-contributions-submit": "Sesha",
+ "ipblocklist-submit": "Sesha",
+ "movelogpage": "Khweshisa i-log",
+ "allmessagesname": "Ligama",
+ "tooltip-search": "Sesha i-{{SITENAME}}",
+ "tooltip-p-logo": "Vakashela likhasi lelikhulu",
+ "ilsubmit": "Sesha",
+ "imgmultigo": "Hamba!",
+ "table_pager_limit_submit": "Hamba",
+ "version-specialpages": "Emakhasi labalulekile",
+ "specialpages": "Emakhasi labalulekile"
}
diff --git a/languages/i18n/st.json b/languages/i18n/st.json
index ad862c82..27e4dca2 100644
--- a/languages/i18n/st.json
+++ b/languages/i18n/st.json
@@ -1,110 +1,110 @@
{
- "@metadata": {
- "authors": [
- "Cbrown1023",
- "Zyxoas (on st.wikipedia.org)"
- ]
- },
- "sunday": "Sontaha",
- "monday": "Mantaha",
- "tuesday": "Labobedi",
- "wednesday": "Laboraro",
- "thursday": "Labone",
- "friday": "Labohlano",
- "saturday": "Moqebelo",
- "january": "Pherekgong",
- "february": "Hlakola",
- "march": "Hlakubele",
- "april": "Mmesa",
- "may_long": "Motsheanong",
- "june": "Phupjane",
- "july": "Phupu",
- "august": "Phato",
- "september": "Lwetse",
- "october": "Mphalane",
- "november": "Pudungwana",
- "december": "Tshitwe",
- "may-gen": "Motsheanong",
- "jan": "Phere",
- "feb": "Hlako",
- "mar": "Hlaku",
- "apr": "Mmesa",
- "may": "Motshe",
- "jun": "Phupjane",
- "jul": "Phupu",
- "aug": "Phato",
- "sep": "Lwetse",
- "oct": "Mphala",
- "nov": "Pudu",
- "dec": "Tshitwe",
- "category_header": "Dingolwa tse mokgeng wa \"$1\"",
- "mypage": "Leqephe la ka",
- "mytalk": "Leqephe la ka la moqoqo",
- "navigation": "Eya ho",
- "faq": "Dipotso-mehla",
- "returnto": "Kgutlela ho $1.",
- "tagline": "E tswa ho {{SITENAME}}",
- "search": "Fuputsa",
- "history": "Nalane",
- "history_short": "Nalane",
- "newpage": "Leqephe le letjha",
- "talkpage": "Qoqa ka leqephe lena",
- "talk": "Moqoqo",
- "categorypage": "Mpontshe leqephe la mekga",
- "otherlanguages": "Ka maleme a mang",
- "jumptosearch": "phuputso",
- "mainpage": "Leqephe la pele",
- "mainpage-description": "Leqephe la pele",
- "portal": "Potjho e kopano",
- "portal-url": "Project:Potjho e kopano",
- "retrievedfrom": "E tswa ho \"$1\"",
- "nstab-main": "Sengolwa",
- "nstab-mediawiki": "Molaetsa",
- "nstab-help": "Leqephe la thusa",
- "nstab-category": "Mokga",
- "yourpasswordagain": "Ngola lepetjo hape",
- "remembermypassword": "O nkgopole (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "nologinlink": "Ingodisetse",
- "createaccount": "Ingodisetse",
- "gotaccount": "O se o ingodisitse? '''$1'''.",
- "createaccountmail": "ka e-mail",
- "badretype": "Mapetjo a mabedi o a ngotseng ha a tshwane.",
- "mailmypassword": "Nthomele password ya ka ka email",
- "changepassword": "Fetola lepetjo",
- "oldpassword": "Lepetjo la kgale:",
- "newpassword": "Lepetjo le letjha:",
- "retypenew": "Ngola lepetjo le letjha hape:",
- "savearticle": "Le boloke",
- "showpreview": "Mpontshe hore le tlo ba jwang",
- "showdiff": "Mpontshe hore ho tlo fetoha eng",
- "accmailtitle": "Lepetjo le rometswe.",
- "accmailtext": "Lepetjo la \"$1\" le se le rometswe ho $2.",
- "note": "'''Ela hloko:'''",
- "searchresultshead": "Phuputso",
- "allowemail": "Dumella batho ba bang hore ba nthomelle di-email",
- "download": "Jarolla",
- "randompage": "Mpontshe leqephe le leng le le leng",
- "statistics": "Dipalopalo",
- "mostcategories": "Dingolwa tse mekga e mengata",
- "shortpages": "Maqephe a makgutshwane",
- "longpages": "Maqephe a matelele",
- "newpages": "Maqephe a matjha",
- "allpages": "Maqephe ohle",
- "categories": "Mekga",
- "categoriespagetext": "The following {{PLURAL:$1|category contains|categories contain}} pages or media.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
- "emailuser": "Romela motho enwa email",
- "emailfrom": "E tswa ho:",
- "emailto": "Ho:",
- "emailsubject": "Ka:",
- "emailmessage": "O re:",
- "emailsend": "E romele",
- "emailsent": "E rometswe",
- "emailsenttext": "Email ya molaetsa wa hao e se e rometswe.",
- "contributions": "Tse ngotsweng ke motho enwa",
- "mycontris": "Tse ngotsweng ke nna",
- "ipbreason": "Lebaka",
- "infiniteblock": "ho eya ho ile",
- "allmessagesname": "Lebitso",
- "allmessagesdefault": "Se neng se ngotswe pele",
- "allmessagescurrent": "Se ngotsweng hona jwale"
+ "@metadata": {
+ "authors": [
+ "Cbrown1023",
+ "Zyxoas (on st.wikipedia.org)"
+ ]
+ },
+ "sunday": "Sontaha",
+ "monday": "Mantaha",
+ "tuesday": "Labobedi",
+ "wednesday": "Laboraro",
+ "thursday": "Labone",
+ "friday": "Labohlano",
+ "saturday": "Moqebelo",
+ "january": "Pherekgong",
+ "february": "Hlakola",
+ "march": "Hlakubele",
+ "april": "Mmesa",
+ "may_long": "Motsheanong",
+ "june": "Phupjane",
+ "july": "Phupu",
+ "august": "Phato",
+ "september": "Lwetse",
+ "october": "Mphalane",
+ "november": "Pudungwana",
+ "december": "Tshitwe",
+ "may-gen": "Motsheanong",
+ "jan": "Phere",
+ "feb": "Hlako",
+ "mar": "Hlaku",
+ "apr": "Mmesa",
+ "may": "Motshe",
+ "jun": "Phupjane",
+ "jul": "Phupu",
+ "aug": "Phato",
+ "sep": "Lwetse",
+ "oct": "Mphala",
+ "nov": "Pudu",
+ "dec": "Tshitwe",
+ "category_header": "Dingolwa tse mokgeng wa \"$1\"",
+ "mypage": "Leqephe la ka",
+ "mytalk": "Leqephe la ka la moqoqo",
+ "navigation": "Eya ho",
+ "faq": "Dipotso-mehla",
+ "returnto": "Kgutlela ho $1.",
+ "tagline": "E tswa ho {{SITENAME}}",
+ "search": "Fuputsa",
+ "history": "Nalane",
+ "history_short": "Nalane",
+ "newpage": "Leqephe le letjha",
+ "talkpage": "Qoqa ka leqephe lena",
+ "talk": "Moqoqo",
+ "categorypage": "Mpontshe leqephe la mekga",
+ "otherlanguages": "Ka maleme a mang",
+ "jumptosearch": "phuputso",
+ "mainpage": "Leqephe la pele",
+ "mainpage-description": "Leqephe la pele",
+ "portal": "Potjho e kopano",
+ "portal-url": "Project:Potjho e kopano",
+ "retrievedfrom": "E tswa ho \"$1\"",
+ "nstab-main": "Sengolwa",
+ "nstab-mediawiki": "Molaetsa",
+ "nstab-help": "Leqephe la thusa",
+ "nstab-category": "Mokga",
+ "yourpasswordagain": "Ngola lepetjo hape",
+ "remembermypassword": "O nkgopole (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "nologinlink": "Ingodisetse",
+ "createaccount": "Ingodisetse",
+ "gotaccount": "O se o ingodisitse? '''$1'''.",
+ "createaccountmail": "ka e-mail",
+ "badretype": "Mapetjo a mabedi o a ngotseng ha a tshwane.",
+ "mailmypassword": "Nthomele password ya ka ka email",
+ "changepassword": "Fetola lepetjo",
+ "oldpassword": "Lepetjo la kgale:",
+ "newpassword": "Lepetjo le letjha:",
+ "retypenew": "Ngola lepetjo le letjha hape:",
+ "savearticle": "Le boloke",
+ "showpreview": "Mpontshe hore le tlo ba jwang",
+ "showdiff": "Mpontshe hore ho tlo fetoha eng",
+ "accmailtitle": "Lepetjo le rometswe.",
+ "accmailtext": "Lepetjo la \"$1\" le se le rometswe ho $2.",
+ "note": "'''Ela hloko:'''",
+ "searchresultshead": "Phuputso",
+ "allowemail": "Dumella batho ba bang hore ba nthomelle di-email",
+ "download": "Jarolla",
+ "randompage": "Mpontshe leqephe le leng le le leng",
+ "statistics": "Dipalopalo",
+ "mostcategories": "Dingolwa tse mekga e mengata",
+ "shortpages": "Maqephe a makgutshwane",
+ "longpages": "Maqephe a matelele",
+ "newpages": "Maqephe a matjha",
+ "allpages": "Maqephe ohle",
+ "categories": "Mekga",
+ "categoriespagetext": "The following {{PLURAL:$1|category contains|categories contain}} pages or media.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+ "emailuser": "Romela motho enwa email",
+ "emailfrom": "E tswa ho:",
+ "emailto": "Ho:",
+ "emailsubject": "Ka:",
+ "emailmessage": "O re:",
+ "emailsend": "E romele",
+ "emailsent": "E rometswe",
+ "emailsenttext": "Email ya molaetsa wa hao e se e rometswe.",
+ "contributions": "Tse ngotsweng ke motho enwa",
+ "mycontris": "Tse ngotsweng ke nna",
+ "ipbreason": "Lebaka",
+ "infiniteblock": "ho eya ho ile",
+ "allmessagesname": "Lebitso",
+ "allmessagesdefault": "Se neng se ngotswe pele",
+ "allmessagescurrent": "Se ngotsweng hona jwale"
}
diff --git a/languages/i18n/stq.json b/languages/i18n/stq.json
index edfbeb02..2e483ca1 100644
--- a/languages/i18n/stq.json
+++ b/languages/i18n/stq.json
@@ -646,7 +646,6 @@
"mergehistory-same-destination": "Uutgongs- un Sielsiede duuren nit identisk weese",
"mergehistory-reason": "Begruundenge:",
"mergelog": "Fereenigengs-Logbouk",
- "pagemerge-logentry": "fereenigede [[$1]] in [[$2]] (Versione bit $3)",
"revertmerge": "tourääch annerd Fereenigenge",
"mergelogpagetext": "Dit is dät Logbouk fon do fereenigede Versionsgeskichten.",
"history-title": "Versionsgeskichte fon \"$1\"",
@@ -689,7 +688,6 @@
"searchrelated": "früünd",
"searchall": "aal",
"showingresults": "Hier {{PLURAL:$1|is '''1''' Resultoat|sunt '''$1''' Resultoate}}, ounfangend mäd Nuumer '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Resultoat '''$1''' fon '''$3'''|Resultoate '''$1–$2''' fon '''$3'''}} foar '''$4'''",
"search-nonefound": "Foar dien Säikanfroage wuuden neen Resultoate fuunen.",
"powersearch-legend": "Fääre säike",
"powersearch-ns": "Säik in Noomensruume:",
@@ -1175,7 +1173,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Siedenstatistik",
"statistics-header-edits": "Beoarbaidengsstatistik",
- "statistics-header-views": "Siedenaproupstatistik",
"statistics-header-users": "Benutserstatistik",
"statistics-header-hooks": "Uur Statistike",
"statistics-articles": "Inhooldssieden",
@@ -1184,13 +1181,9 @@
"statistics-files": "Hoochleedene Doatäie",
"statistics-edits": "Siedenbeoarbaidengen siet {{SITENAME}} waas ounfangd",
"statistics-edits-average": "Beoarbaidengen pro Siede in n Truchsleek",
- "statistics-views-total": "Siedenaproupe mädnunner",
- "statistics-views-total-desc": "Aproupe fon nit bestoundende Sieden un fon Spezialsieden wäide nit in Reekenge nuumen",
- "statistics-views-peredit": "Siedenaproupe pro Beoarbaidenge",
"statistics-users": "Registrierde [[Special:ListUsers|Benutsere]]",
"statistics-users-active": "Aktive Benutsere",
"statistics-users-active-desc": "Benutsere mäd Beoarbaidengen {{PLURAL:$1|in do lääste 24 Uuren|in do fergeene $1 Deege}}",
- "statistics-mostpopular": "Maast besoachte Sieden",
"doubleredirects": "Dubbelde Fäärelaitengen",
"doubleredirectstext": "Disse Lieste änthoalt Fääreleedengen, do der ap wiedere Fääreleedengen ferlinkje.\nÄlke Riege änthoalt Links tou ju eerste un twäide Fääreleedenge as uk dät Siel fon ju twäide Fääreleedenge, wät foar gewöönelk ju wonskede Sielsiede is, ap ju al ju eerste Fääreleedenge wiese skuul.\n<del>Truchstriekene</del> Iendraage wuuden al oumoaked.",
"double-redirect-fixed-move": "dubbelde Fäärelaitenge aplöösd: [[$1]] → [[$2]]",
@@ -1222,7 +1215,6 @@
"uncategorizedtemplates": "Nit kategorisierde Foarloagen",
"unusedcategories": "Ferwaisede Kategorien",
"unusedimages": "Ferwaisede Bielden",
- "popularpages": "Sieden do oafte bekieked wäide",
"wantedcategories": "Benutsede, man nit anlaide Kategorien",
"wantedpages": "Wonskede Sieden",
"wantedpages-badtitle": "Uungultigen Tittel in dat Resultoat: $1",
@@ -1267,7 +1259,6 @@
"querypage-disabled": "Disse Spezialsiede wuud deaktivierd uum ju Laistenge tou behoolden.",
"booksources": "ISBN-Säike",
"booksources-search-legend": "Säik ätter Steeden wier me Bouke kriege kon",
- "booksources-go": "Säike (011)",
"booksources-text": "Dit is ne Lieste mäd Ferbiendengen tou Internetsieden, do der näie un bruukte Bouke ferkoopje. Deer kon et uk wiedere Informatione uur do Bouke reeke. {{SITENAME}} is mäd neen fon disse Anbjoodere geskäftelk ferbuunen.",
"booksources-invalid-isbn": "Fermoudelk is ju ISBN uungultich. Säik ätter Failere in ju Kopie.",
"specialloguserlabel": "Uutfierenden Benutser:",
@@ -1377,7 +1368,7 @@
"wlheader-enotif": "E-Mail-Beskeed is aktivierd.",
"wlheader-showupdated": "Sieden, do ätter dien lääste Besäik annerd wuuden sunt, wäide '''fat''' deerstoald.",
"wlnote": "Hier {{PLURAL:$1|foulget do lääste Annerenge|foulgje do lääste '''$1''' Annerengen}} fon do lääste {{PLURAL:$2|Uur|'''$2''' Uuren}}.",
- "wlshowlast": "Wies do lääste $1 Uuren, $2 Deege, of $3 (in do lääste 30 Deege).",
+ "wlshowlast": "Wies do lääste $1 Uuren, $2 Deege, of (in do lääste 30 Deege).",
"watchlist-options": "Anwiesoptione",
"watching": "Beooboachtje …",
"unwatching": "Nit beooboachtje …",
@@ -1414,7 +1405,6 @@
"delete-toobig": "Disse Siede häd mäd moor as $1 {{PLURAL:$1|Version|Versionen}} ne gjucht loange Versionsgeskichte. Dät Läskjen fon sukke Sieden wuud ienskränkt, uum ne toufällige Uurlastenge fon {{SITENAME}} tou ferhinnerjen.",
"delete-warning-toobig": "Disse Siede häd mäd moor as $1 {{PLURAL:$1|Version|Versione}} ne gjucht loange Versionsgeskichte. Dät Läskjen kon tou Stöörengen in {{SITENAME}} fiere.",
"rollback": "Touräächsätten fon do Annerengen",
- "rollback_short": "Touräächsätte",
"rollbacklink": "touräächsätte",
"rollbackfailed": "Touräächsätten misglukked",
"cantrollback": "Disse Annerenge kon nit touräächstoald wäide; deer et naan fröieren Autor rakt.",
@@ -1766,7 +1756,6 @@
"import": "Sieden importierje",
"importinterwiki": "Transwiki-Import",
"import-interwiki-text": "Wääl n Wiki un ne Siede toun Importierjen uut.\nDo Versionsdoaten un Benutsernoomen blieuwe deerbie beheelden.\nAal Transwiki-Import-Aktione wäide in dät [[Special:Log/import|Import-Logbouk]] protokollierd.",
- "import-interwiki-source": "Wälle-Wiki/-Siede:",
"import-interwiki-history": "Importier aal Versione fon disse Siede",
"import-interwiki-templates": "Aal Foarloagen iensluute",
"import-interwiki-submit": "Import",
@@ -1886,7 +1875,6 @@
"simpleantispam-label": "Spamskuts-Wröige. Hier '''niks''' iendreege!",
"pageinfo-title": "Informatione tou „$1“",
"pageinfo-header-edits": "Beoarbaidengen",
- "pageinfo-views": "Antaal fon Siedenaproupe",
"pageinfo-watchers": "Antaal fon do Besäikere",
"pageinfo-edits": "Antaal fon do Beoarbaidengen",
"pageinfo-authors": "Antaal fon unnerskeedelke Autoren",
@@ -2211,7 +2199,6 @@
"exif-gpsspeed-n": "Knätte",
"exif-gpsdirection-t": "Wuddelke Gjuchte",
"exif-gpsdirection-m": "Magnetiske Gjuchte",
- "watchlistall2": "aal",
"namespacesall": "aal",
"monthsall": "aal",
"confirmemail": "Email-Adrässe bestäätigje",
@@ -2278,7 +2265,6 @@
"watchlisttools-view": "Beooboachtengslieste: Annerengen",
"watchlisttools-edit": "normoal beoarbaidje",
"watchlisttools-raw": "Liestenformoat beoarbaidje (Import/Export)",
- "unknown_extension_tag": "Uunbekoanden Extension-Tag „$1“",
"duplicate-defaultsort": "Paas ap: Die Sortierengskoai „$2“ uurskrift dän toufoarne ferwoanden Koai „$1“.",
"version": "Version",
"version-extensions": "Installierde Ärwiederengen",
@@ -2294,7 +2280,7 @@
"version-parser-function-hooks": "Parser-Funktione",
"version-hook-name": "Snitsteedennoome",
"version-hook-subscribedby": "Aproup fon",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-license": "Lizenz",
"version-poweredby-credits": "Disse Website nutset '''[https://www.mediawiki.org/wiki/MediaWiki/de MediaWiki]''', Copyright © 2001–$1 $2.",
"version-poweredby-others": "uur",
@@ -2325,6 +2311,7 @@
"specialpages-group-wiki": "Systemdoaten un Reewen",
"specialpages-group-redirects": "Fäärelaitjende Spezioalsieden",
"specialpages-group-spam": "Spam-Reewen",
+ "specialpages-group-developer": "Äntwiklerreewen",
"blankpage": "Loose Siede",
"intentionallyblankpage": "Disse Siede is apsichtelk sunner Inhoold. Ju wäd foar Benchmarks ferwoand.",
"external_image_whitelist": "#Disse Riege nit ferannerje<pre>\n#Unnerstoundend konnen Fragmente fon reguläre Uutdrukke (die Deel twiske do //) ienroat wäide.\n#Disse wäide mäd do URLs fon Bielden uut externe Wällen ferglieked\n#N positiven Fergliek fiert tou Anwiesenge fon ju Bielde, uurs wäd ju Bielde bloot as Link anwiesd\n#Riegen, do der mäd n # ounfange, wäide as Kommentoar behonneld\n#Der wäd nit twiske Groot- un Littikskrieuwenge unnerskat\n\n#Fragmente fon reguläre Uutdrukke ätter disse Riege iendreege. Disse Riege nit ferannerje</pre>",
@@ -2366,6 +2353,7 @@
"revdelete-restricted": "Einskränkengen jäilde uk foar Administratore",
"revdelete-unrestricted": "Ienskränkengen foar Administratore wächhoald",
"rightsnone": "(-)",
+ "revdelete-summary": "Touhoopefoatengskommentoar",
"searchsuggest-search": "Säik",
"searchsuggest-containing": "Fultextsäike ätter ...",
"expandtemplates": "Foarloagen expandierje",
diff --git a/languages/i18n/su.json b/languages/i18n/su.json
index 106c6398..01819be0 100644
--- a/languages/i18n/su.json
+++ b/languages/i18n/su.json
@@ -18,7 +18,7 @@
"tog-hidepatrolled": "Sumputkeun anu geus diroris ti béréndélan nu anyar robah",
"tog-newpageshidepatrolled": "Sumputkeun nu geus diroris tina béréndélan kaca anyar",
"tog-extendwatchlist": "Legaan béréndélan ngarah sakabéh parobahanana kaawaskeun",
- "tog-usenewrc": "Parobahan grup dumasar kaca dina béréndélan anyar robah jeung awaskeuneun (maké JavaScript)",
+ "tog-usenewrc": "Parobahan grup dumasar kaca dina béréndélan anu anyar robah jeung awaskeuneun",
"tog-numberheadings": "Nomeran lulugu sacara otomatis",
"tog-showtoolbar": "Témbongkeun tulbar édit",
"tog-editondblclick": "Édit kaca ku klik ganda",
@@ -27,6 +27,7 @@
"tog-watchdefault": "Tambahkeun kaca jeung berkas anu diédit ku kuring kana awaskeuneun",
"tog-watchmoves": "Tambahkeun kaca jeung berkas anu dipindahkeun ka awaskeuneun",
"tog-watchdeletion": "Tambahkeun kaca jeung berkas anu dihapus kana awaskeuneun",
+ "tog-watchrollback": "Tambahkeun kaca anu jujutanana kungsi dibalikkeun kana awaskeuneun",
"tog-minordefault": "Tandaan sadaya éditan salaku minor luyu jeung ti dituna",
"tog-previewontop": "Témbongkeun sawangan méméh kotak édit (lain sanggeusna)",
"tog-previewonfirst": "Témbongkeun sawangan dina éditan munggaran",
@@ -37,7 +38,7 @@
"tog-shownumberswatching": "Témbongkeun jumlah nu ngawaskeun",
"tog-oldsig": "Paraf nu geus aya:",
"tog-fancysig": "Témbongkeun paraf salaku wikitext (tanpa tumbu otomatis)",
- "tog-uselivepreview": "Paké pramidang saharita (ujicoba)",
+ "tog-uselivepreview": "Paké pratayang langsung",
"tog-forceeditsummary": "Mun kotak ringkesan éditan masih kosong, béjaan!",
"tog-watchlisthideown": "Sumputkeun éditan kuring dina daptar awaskeuneun",
"tog-watchlisthidebots": "Sumputkeun éditan bot dina daptar awaskeuneun",
@@ -53,7 +54,7 @@
"tog-prefershttps": "Salawasna paké sambungan aman nalika asup log",
"underline-always": "Salawasna",
"underline-never": "Ulah",
- "underline-default": "Luyu jeung buhunna panyungsi",
+ "underline-default": "Buhunna kulit atawa panyungsi",
"editfont-style": "Gaya aksara dina kotak éditan:",
"editfont-default": "Luyu jeung buhunna panyungsi",
"editfont-monospace": "Aksara monospasi",
@@ -146,7 +147,7 @@
"morenotlisted": "Ieu béréndélan tacan lengkep.",
"mypage": "Kaca",
"mytalk": "Obrolan",
- "anontalk": "Obrolan pikeun IP ieu",
+ "anontalk": "Obrolan pikeun alamat IP ieu",
"navigation": "Pituduh",
"and": "&#32;jeung",
"qbfind": "Panggihan",
@@ -220,15 +221,17 @@
"jumptonavigation": "pituduh",
"jumptosearch": "sungsi",
"view-pool-error": "Punten, serverna keur pinuh.\nLoba teuing nu nyoba muka ieu kaca.\nMangga cobian sanés waktos.\n\n$1",
+ "generic-pool-error": "Hampura, serverna keur pinuh.\nLoba teuing nu nyoba muka ieu sumberdaya.\nAntosan sakedap, engké cobaan deui.",
"pool-timeout": "Béakeun waktu nungguan konci",
"pool-queuefull": "Antrian geus pinuh",
"pool-errorunknown": "Éror teu dipikawanoh",
+ "pool-servererror": "Palayanan ''pool counter'' teu disadiakeun ($1).",
"aboutsite": "Ngeunaan {{SITENAME}}",
"aboutpage": "Project:Ngeunaan",
- "copyright": "Sadaya kandungan ieu loka ditangtayungan ku $1",
+ "copyright": "Eusina ditangtayungan ku $1 iwal lamun disebutkeun béda.",
"copyrightpage": "{{ns:project}}:Hak cipta",
"currentevents": "Keur lumangsung",
- "currentevents-url": "Project:Keur lumangsung",
+ "currentevents-url": "Portal:Keur lumangsung",
"disclaimers": "Bantahan",
"disclaimerpage": "Project:Bantahan_umum",
"edithelp": "Pitulung ngédit",
@@ -332,6 +335,7 @@
"viewyourtext": "Anjeun bisa némbongkeun sarta nyalin sumber '''éditan anjeun''' ka ieu kaca:",
"protectedinterface": "Kaca ieu eusina teks antarmuka pikeun dipaké ku pakakas beyé sarta geus dikunci pikeun ngahindar ti kasalahan.",
"editinginterface": "'''Awas:''' Anjeun keur ngédit kaca nu dipaké pikeun nyadiakeun téks antarmuka pikeun sopwérna.\nParobahan kana ieu kaca bakal mangaruhan pidangan antarmuka pikeun pamaké séjén.\nPikeun alihbasa, mangga sumping ka [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], proyék lokalisasi MediaWiki.",
+ "translateinterface": "Pikeun nambahkeun atawa ngarobah tarjamah keur sakabéh wiki, paké [//translatewiki.net/ translatewiki.net], proyék lokalisasi MediaWiki.",
"cascadeprotected": "Kaca ieu geus dikonci ti éditan alatan disartakeun di {{PLURAL:$1|kaca|kaca-kaca}} katut anu geus dikonci kalawan pilihan \"runtun\": $2",
"namespaceprotected": "Anjeun teu ngabogaan hak pikeun ngédit kaca di ngaranspasi '''$1'''.",
"customcssprotected": "Anjeun teu teu diwenangkeun pikeun ngédit ieu kaca CSS, sabab ngandung setélan pribadi kontributor séjén.",
@@ -345,10 +349,11 @@
"filereadonlyerror": "Berkas \"$1\" teu bisa dirobah kusabab répositori \"$2\" keur dina mode ukur-maca.\n\nKuncén anu ngonci méré alesan: \"$3\".",
"exception-nologin": "Henteu asup log",
"exception-nologin-text": "Mangga asup log pikeun bisa asup atawa ngarobah ieu kaca.",
+ "exception-nologin-text-manual": "Mangga $1 pikeun bisa asup atawa ngarobah ieu kaca.",
"virus-badscanner": "Kasalahan konfigurasi: panyekén virus teu dipikawanoh: ''$1''",
"virus-scanfailed": "nyekén gagal (kode $1)",
"virus-unknownscanner": "antivirus teu dipikawanoh:",
- "logouttext": "'''Anjeun ayeuna geus kaluar log.'''\n\nAnjeun bisa tetep migunakeun {{SITENAME}} bari anonim, atawa bisa <span class='plainlinks'>[$1 asup log deui]</span> salaku pamaké nu sarua atawa nu séjén deui.\nMangkahadé, sababaraha kaca bakal tetep némbongkeun saolah-olah anjeun asup log kénéh nepi ka anjeun ngosongkeun ''cache'' panyungsi anjeun.",
+ "logouttext": "<strong>Anjeun ayeuna geus kaluar log.<strong>\n\nMangkahadé, sababaraha kaca bakal tetep némbongkeun saolah-olah asup kénéh log nepi ka anjeun ngosongkeun ''cache'' dina panyungsi.",
"welcomeuser": "Bagéa, $1!",
"welcomecreation-msg": "Akun anjeun geus dijieun.\nLamun minat, Anjeun bisa ngarobah [[Special:Preferences|préferénsi]] {{SITENAME}}.",
"yourname": "Sandiasma:",
@@ -363,6 +368,7 @@
"createacct-yourpasswordagain": "Konfirmasi kecap sandi",
"createacct-yourpasswordagain-ph": "Asupkeun deui kecap sandi",
"remembermypassword": "Apalkeun login kuring dina ieu komputer (pikeun paling lila $1 {{PLURAL:$1|poé|poé}})",
+ "userlogin-remembermypassword": "Jaga ngarah angger asup log",
"userlogin-signwithsecure": "Paké sambungan aman",
"yourdomainname": "Domain anjeun",
"password-change-forbidden": "Anjeun teu bisa ngarobah kecap sandi dina ieu wiki.",
@@ -384,6 +390,8 @@
"userlogin-resetlink": "Poho akun sorangan?",
"userlogin-resetpassword-link": "Poho kecap sandi?",
"userlogin-helplink2": "Pitulung asup log",
+ "userlogin-loggedin": "Anjeun geus asup log salaku {{GENDER:$1|$1}}.\nPaké pormulir di handap pikeun asup log salaku pamaké séjén.",
+ "userlogin-createanother": "Jieun akun séjén",
"createacct-emailrequired": "Alamat surélék:",
"createacct-emailoptional": "Alamat surélék (teu wajib)",
"createacct-email-ph": "Asupkeun alamat surélék anjeun",
@@ -404,6 +412,7 @@
"badretype": "Sandi nu diasupkeun teu cocog.",
"userexists": "Sandiasma nu diasupkeun geus aya nu maké.\nMangga pilih sandiasma nu séjén.",
"loginerror": "Kasalahan asup log",
+ "createacct-error": "Nyieun akun éror",
"createaccounterror": "Teu bisa nyieun rekening: $1",
"nocookiesnew": "Rekening pamaké geus dijieun, tapi anjeun can asup log. {{SITENAME}} maké ''cookies'' pikeun ngasupkeun log pamaké. Anjeun boga ''cookies'' nu ditumpurkeun. Mangga fungsikeun, teras asup log migunakeun ngaran pamaké sarta sandi nu anyar.",
"nocookieslogin": "{{SITENAME}} migunakeun ''cookies'' pikeun ngasupkeun pamaké kana log. Anjeun boga ''cookies'' nu ditumpurkeun. Mangga pungsikeun sarta cobian deui.",
@@ -426,9 +435,9 @@
"noemail": "Teu aya alamat surélék karékam pikeun \"$1\".",
"noemailcreate": "Anjeun kudu nyadiakeun alamat surélék anu bener",
"passwordsent": "Sandi anyar geus dikirim ka alamat surélék nu kadaptar pikeun \"$1\". Mangga asup log deui satutasna katarima.",
- "blocked-mailpassword": "Alamat IP anjeun dipeungpeuk, moal bisa ngédit, and so\nis not allowed to use the password recovery function to prevent abuse.",
+ "blocked-mailpassword": "Alamat IP anjeun dipeungpeuk tina kabisa ngédit, sarta moal bisa maké fungsi ganti kecap sandi ngarah hanteu disalahgunakeun.",
"eauthentsent": "Surélék konfirmasi geus dikirim ka alamat bieu.\nMéméh aya surat séjén asup ka akunna, anjeun kudu nuturkeun pituduh dina surélékna pikeun mastikeun yén akun éta téh bener boga anjeun.",
- "throttled-mailpassword": "Hiji panginget kecap sandi geus dikirimkeun dina {{PLURAL:$1|jam|$1 jam}} pamungkas.\nPikeun ngahindar disalahgunakeun, ngan hiji kecap sandi anu baris dikirimkeun saban {{PLURAL:$1|jam|$1 jam}}.",
+ "throttled-mailpassword": "Surélék pikeun ngarobah kecap sandi geus dikirim {{PLURAL:$1|jam|$1 jam}} kaliwat.\nNgarah hanteu disalahgunakeun, ngan hiji surélék anu bakal dikirim saban {{PLURAL:$1|jam|$1 jam}}.",
"mailerror": "Kasalahan ngirim surat: $1",
"acct_creation_throttle_hit": "Punten,pamaké alamat IP anjeun geus nyieun {{PLURAL:$1|1 rekening|$1 rekening}} dina sapoé ieu. mangrupa jumlah nu di idinan dina sapoé.\nanjeun teu bisa nyieun deui samentara waktu.",
"emailauthenticated": "Alamat surélék anjeun geus dikonfirmasi $2 tabuh $3.",
@@ -439,13 +448,15 @@
"cannotchangeemail": "Alamat surat-é akun hanteu bisa dirobah di ieu wiki.",
"emaildisabled": "Ieu loka teu bisa ngirim surélék.",
"accountcreated": "Rekening geus dijieun.",
- "accountcreatedtext": "Rekening pamaké pikeun $1 geus dijieun.",
+ "accountcreatedtext": "Akun pamaké [[{{ns:Pamaké}}:$1|$1]] ([[{{ns:Obrolan pamaké}}:$1|obrolan]]) geus dijieun.",
"createaccount-title": "Nyieun rekening keur {{SITENAME}}",
"createaccount-text": "Aya nu nyieun rekening pikeun alamat surélék anjeun di {{SITENAME}} ($4) maké landihan \"$2\" sarta sandi \"$3\". Anjeun kudu asup log sarta ngaganti sandina ayeuna kénéh.\n\nMun ieu rekening balukar ayana éror, teu kudu diwaro.",
- "login-throttled": "Anjeun geus loba teuing nyobaan asup log.\nTungguan heula sakeudeung, laju cobaan deui.",
+ "login-throttled": "Anjeun geus loba teuing nyobaan asup log.\nTungguan $1, laju cobaan deui.",
"login-abort-generic": "Login gagal - Dibolaykeun",
+ "login-migrated-generic": "Akun anjeun geus pindah, ku kituna sandiasma anjeun geus leungit ti ieu wiki.",
"loginlanguagelabel": "Basa: $1",
"suspicious-userlogout": "Pamundut anjeun pikeun kaluar log ditolak ku sabab sigana dikirim ku pangaprak buntu atawa ''cache'' proxi.",
+ "createacct-another-realname-tip": "Ngaran asli hanteu diwajibkeun.\nLamun anjeun milih ngeusian, ieu ngaran bakal dipaké pikeun nandaan kontribusi anjeun.",
"pt-login": "Asup log",
"pt-login-button": "Asup log",
"pt-createaccount": "Jieun akun",
@@ -453,23 +464,29 @@
"php-mail-error-unknown": "Kasalahan nu teu kanyahoan dina fungsi PHP surélék().",
"user-mail-no-addy": "Nyobaan ngirim surélék tanpa alamat.",
"changepassword": "Robah sandi",
- "resetpass_announce": "Anjeun asup log migunakeun sandi samentara. Salajengna, mangga gentos ku sandi anyar di dieu:",
+ "resetpass_announce": "Pikeun nganggeuskeun asup log, anjeun kudu nyieun kecap sandi anyar.",
"resetpass_text": "<!-- Tambahkeun téks di dieu -->",
"resetpass_header": "Ganti sandi rekening",
"oldpassword": "Sandi heubeul",
"newpassword": "Sandi anyar:",
"retypenew": "Ketik ulang sandi",
"resetpass_submit": "Setél log asup katut sandina",
- "changepassword-success": "Kecap sandi Anjeun geus junun dirobah! Ayeuna proses asup log Anjeun...",
+ "changepassword-success": "Kecap sandi Anjeun geus laksana dirobah!",
+ "changepassword-throttled": "Anjeun geus loba teuing nyobaan asup log.\nTungguan $1 méméh nyobaan deui.",
"resetpass_forbidden": "Sandi henteu bisa dirobah",
"resetpass-no-info": "Anjeun kudu asup log pkeun bisa muka ieu kaca sacara langsung.",
"resetpass-submit-loggedin": "Ganti kecap sandi rekening",
"resetpass-submit-cancel": "Bolay",
"resetpass-wrong-oldpass": "Salah sandi.\nBisa jadi anjeun geus ngaganti sandina atawa ménta sandi saheulaanan anu anyar.",
+ "resetpass-recycled": "Mangga ganti kecap sandi anjeun ku nu anyar.",
+ "resetpass-temp-emailed": "Anjeun asup log migunakeun sandi témporér. Pikeun nganggeuskeun asup log, anjeun kudu nyieun kecap sandi anyar di dieu:",
"resetpass-temp-password": "Sandi samentara:",
+ "resetpass-expired": "Kecap sandi anjeun geus kadaluwarsa. Mangga jieun anu anyar pikeun asup log.",
"passwordreset": "Setél ulang sandi",
+ "passwordreset-text-one": "Eusian formulir ieu pikeun ngirimkeun kecap sandi saheulaanan kana surélék.",
"passwordreset-legend": "Setél ulang sandi",
"passwordreset-disabled": "Dina ieu wiki, sandi teu bisa disetél ulang.",
+ "passwordreset-emaildisabled": "Fitur surélék ditumpurkeun di ieu wiki.",
"passwordreset-username": "Sandiasma:",
"passwordreset-domain": "Domain:",
"passwordreset-capture": "Témbongkeun surat-é hasilna?",
@@ -514,7 +531,8 @@
"preview": "Pramidang",
"showpreview": "Témbongkeun pramidang",
"showdiff": "Témbongkeun parobahan",
- "anoneditwarning": "'''Perhatosan:''' Anjeun can asup log. IP anjeun kacatet dina jujutan kaca ieu",
+ "blankarticle": "<strong>Awas:</strong> Kaca anu dijieun ku anjeun kosong kénéh.\nUpama anjeun ngaklik \"{{int:savearticle}}\" deui, kacana bakal dijieun tanpa eusi.",
+ "anoneditwarning": "<strong>Awas:</strong> Anjeun can asup log. Lamun ngédit, alamat IP anjeun bakal katempo ku balaréa. Lamun anjeun <strong>[$1 asup log]</strong> atawa <strong>[$2 nyieun akun]</strong>, ngaran anjeun bakal natrat dina jujutan éditanana, kalayan sababaraha kauntungan lianna.",
"anonpreviewwarning": "\"Anjeun can asup log. Mun disimpen, alamat IP anjeun bakal kacatet dina jujutan ieu kaca.\"",
"missingsummary": "'''Pépéling:''' Anjeun can ngeusian sari éditan. Mun anjeun ngaklik deui Simpen, éditan anjeun bakal disimpen tanpa sari éditan",
"missingcommenttext": "Mangga tulis koméntar di handapeun ieu.",
@@ -572,7 +590,7 @@
"copyrightwarning": "Perhatikeun yén sadaya kontribusi ka MediaWiki dianggap medal dina panangtayungan lisénsi $2 (tempo $1 pikeun jéntréna). Mun anjeun teu miharep tulisan anjeun dirobah sarta disebarkeun deui, ulah dilebetkeun ka dieu.<br />\nAnjeun ogé jangji yén tulisan ieu dijieun ku sorangan, atawa disalin ti ''domain'' umum atawa sumberdaya bébas séjénna. '''ULAH NGASUPKEUN KARYA NU MIBANDA HAK CIPTA TANPA IDIN!'''",
"copyrightwarning2": "Catet yén sadaya kontribusi ka {{SITENAME}} bisa diédit, dirobah, atawa dihapus ku kontributor séjén. Mun anjeun teu miharep tulisan anjeun dirobah, ulah ngintunkeun ka dieu.<br />\nAnjeun ogé mastikeun yén ieu téh pituin tulisan anjeun, atawa salinan ti domain umum atawa sumberdaya bébas séjénna (tempo $1 pikeun écésna).\n'''ULAH NGINTUNKEUN KARYA NU MIBANDA HAK CIPTA TANPA WIDI!'''",
"longpageerror": "'''SALAH: Téks anu dikirimkeun gedéna $1 kb, leuwih ti maksimum $2 kb. Téks teu bisa disimpen.'''",
- "readonlywarning": "'''PERHATOSAN''': pangkalan data dikonci pikeun diropéa, anjeun moal bisa nyimpen éditan anjeun ayeuna. Cobi ''cut-n-paste'' téksna ka na koropak téks sarta simpen dina waktu séjén.\n\nkuncén nu ngonci pangkalan data mikeun kajelasan : $1",
+ "readonlywarning": "<strong>Awas: pangkalan data dikonci pikeun diropéa, anjeun moal bisa nyimpen éditan anjeun ayeuna.</strong>\nMun perlu, simpen heula téksna kana berkas téks pikeun diasupkeun deui séjén mangsa.\n\nKuncén anu ngonci pangkalan data méré katerangan: $1",
"protectedpagewarning": "'''AWAS: ieu kaca dikonci sarta ngan bisa dirobah ku pamaké nu statusna kuncén.'''\nÉntri log panungtungan ditémbongkeun di handap:",
"semiprotectedpagewarning": "'''Catetan''': ieu kaca dikonci sarta ukur bisa dirobah ku pamaké nu geus kadaptar.\nÉntri log panungtung dibéréndélkeun di handap:",
"cascadeprotectedwarning": "'''Awas''': ieu kaca dikonci sahingga ukur bisa dirobah ku kuncén, sabab kaasup {{PLURAL:$1|kaca|kaca}} dina panyalindungan-ngaruntuy di handap ieu:",
@@ -663,7 +681,7 @@
"revdelete-nooldid-title": "Udagan révisi salah",
"revdelete-nooldid-text": "Anjeun can nangtukeun atawa méré révisi pikeun ngajalankeun ieu fungsi, révisi nu di tangtukeun can aya, atawa anjeun nyoba nyumputkeun révisi kiwari.",
"revdelete-no-file": "Berkas anu ditujul teu kapanggih.",
- "revdelete-show-file-confirm": "Anjeun yakin rék nempo révisi anu geus dihapus dina koropak \"<nowiki>$1</nowiki>\" ti $2 nepi ka $3?",
+ "revdelete-show-file-confirm": "Anjeun yakin rék nempo révisi anu geus dihapus dina berkas \"<nowiki>$1</nowiki>\" ti $2 nepi ka $3?",
"revdelete-show-file-submit": "Enya",
"logdelete-selected": "{{PLURAL:$1|pilihan keur log|pilihan keur log}}:",
"revdelete-confirm": "Mangga geura konfirmasi yen Anjeun gaduh maksad pikeun ngalakukeun hal ieu, paham kana konsekwensina, tur nu dilakukeun ieu teh luyu sareng [[{{MediaWiki:Policy-url}}|kawijakanana]]",
@@ -720,7 +738,6 @@
"mergehistory-same-destination": "Kaca sumber jeung tujulna teu bisa sarua",
"mergehistory-reason": "Alesan:",
"mergelog": "Log gabung",
- "pagemerge-logentry": "[[$1]] geus ngagabung jeung [[$2]] (révisi nepi ka $3)",
"revertmerge": "Pisahkeun",
"mergelogpagetext": "Di handap ieu béréndélan prosés gabung jujutan kaca.",
"history-title": "Jujutan révisi \"$1\"",
@@ -748,7 +765,7 @@
"searchprofile-everything": "Sagala",
"searchprofile-advanced": "Lengkep",
"searchprofile-articles-tooltip": "Pilari di $1",
- "searchprofile-images-tooltip": "Pilari koropak/file",
+ "searchprofile-images-tooltip": "Pilari berkas",
"searchprofile-everything-tooltip": "Pilari di sakabéh eusi (kaasup kaca obrolan)",
"searchprofile-advanced-tooltip": "Paluruh di rohang ngaran anu tangtu",
"search-result-size": "$1 ({{PLURAL:$2|1 kecap|$2 kecap}})",
@@ -772,7 +789,7 @@
"search-external": "Panéangan luar",
"searchdisabled": "Punten! Néangan téks lengkep di {{SITENAME}} kanggo samentawis ditumpurkeun pikeun alesan kinerja. Jalaran kitu, saheulaanan anjeun bisa nyungsi di Google di handap ieu. Catet yén indéxna ngeunaan eusi {{SITENAME}} bisa jadi teu mutahir.",
"preferences": "Préferénsi",
- "mypreferences": "Préferéns",
+ "mypreferences": "Préferénsi",
"prefs-edits": "Jumlah éditan:",
"prefs-skin": "Kulit",
"skin-preview": "Pramidang",
@@ -1061,7 +1078,7 @@
"recentchangeslinked-summary": "Ieu kaca husus ngabéréndélkeun parobahan anyar anu numbu ti kaca husus (atawa uesi katagori husus). Kaca anu [[Special:Watchlist|diawaskeun]] némbongan '''kandel'''.",
"recentchangeslinked-page": "Ngaran kaca:",
"recentchangeslinked-to": "Témbongkeun parobahan ka kaca-kaca nu ditumbukeun ka kaca nu dimaksud",
- "upload": "Unggah berkas",
+ "upload": "Muat berkas",
"uploadbtn": "Muatkeun koropak",
"reuploaddesc": "Balik ka formulir muatan.",
"uploadnologin": "Can asup log",
@@ -1171,7 +1188,7 @@
"listfiles-delete": "hapus",
"listfiles-summary": "Ieu kaca husus némbongkeun sakabéh berkas anu geus diunggah.",
"listfiles_search_for": "Sungsi ngaran média:",
- "imgfile": "koropak",
+ "imgfile": "Berkas",
"listfiles": "Daptar gambar",
"listfiles_date": "Titimangsa",
"listfiles_name": "Ngaran",
@@ -1198,7 +1215,7 @@
"filehist-comment": "Kamandang",
"imagelinks": "Pamakéan berkas",
"linkstoimage": "Kaca ieu {{PLURAL:$1|numbu|$1 numbu}} ka gambar ieu :",
- "nolinkstoimage": "Teu aya kaca nu numbu ka gambar ieu.",
+ "nolinkstoimage": "Teu aya kaca anu nutumbu ka ieu berkas.",
"sharedupload": "Ieu koropak téh ti $1 nu bisa jadi dipaké ku proyék-proyék lianna.",
"sharedupload-desc-here": "Ieu berkas asalna ti $1 anu bisa jadi dipaké ku proyék séjén. \nPedaran ti [$2 kaca pedaranana] dipidangkeun di handap.",
"uploadnewversion-linktext": "ngamuatkeun vérsi anyar koropak ieu",
@@ -1243,7 +1260,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Statistik kaca",
"statistics-header-edits": "Statistik éditan",
- "statistics-header-views": "Statistik pidangan",
"statistics-header-users": "Statistik pamaké",
"statistics-header-hooks": "Statistika lianna",
"statistics-articles": "Halaman eusi",
@@ -1252,13 +1268,9 @@
"statistics-files": "Koropak nu geus dimuat",
"statistics-edits": "Ëditan kaca ti saprak {{SITENAME}} mimiti dibuka",
"statistics-edits-average": "Rata-rata éditan unggal kaca",
- "statistics-views-total": "Lobana dibuka",
- "statistics-views-total-desc": "Muka kaca nu can aya jeung kaca husus teu diitung",
- "statistics-views-peredit": "Muka unggal édit",
"statistics-users": "[[Special:ListUsers|Kontributor]] kadaptar",
"statistics-users-active": "Pamaké getol",
"statistics-users-active-desc": "Kontributor nu ngoprék salila {{PLURAL:$1|poé|$1 poé}} panungtung",
- "statistics-mostpopular": "Kaca nu pangmindengna dibuka",
"pageswithprop-submit": "Jung",
"doubleredirects": "Alihan ganda",
"doubleredirectstext": "Ieu kaca ngabéréndélkeun kaca-kaca alihan ka kaca alihan lianna. Unggal baris ngandung tutumbu ka alihan kahiji jeung kadua, ogé tujul alihan kadua anu biasana tujul kaca anu \"bener\", anu sakuduna dituju ku alihan kahiji. Ëntri nu <del>dicorét</del> geus diropéa.",
@@ -1293,7 +1305,6 @@
"uncategorizedtemplates": "Citakan nu can boga kategori",
"unusedcategories": "Kategori nu teu kapaké",
"unusedimages": "Gambar-gambar nu teu kapaké",
- "popularpages": "Kaca-kaca kawentar",
"wantedcategories": "Kategori nu dipikabutuh",
"wantedpages": "Kaca nu dipikabutuh",
"wantedfiles": "Berkas nu dipikabutuh",
@@ -1343,7 +1354,6 @@
"querypage-disabled": "Ieu kaca husus ditumpurkeun ku alesan kinerja.",
"booksources": "Sumber pustaka",
"booksources-search-legend": "Sungsi sumber buku",
- "booksources-go": "Jung",
"booksources-text": "Di handap ieu ngabéréndélkeun tumbu ka loka-loka nu ngical buku, boh nu anyar atawa loakan, nu sugan uninga kana buku anu nuju dipilari:",
"booksources-invalid-isbn": "ISBN-na sigana henteu bener; pariksa deui bisi aya salah salin ti sumber aslina.",
"specialloguserlabel": "Pamaké:",
@@ -1452,7 +1462,7 @@
"wlheader-enotif": "Pangémbar surélék difungsikeun.",
"wlheader-showupdated": "Kaca nu robah ti panungtungan anjeun sindang ditémbongkeun kalawan '''kandel'''",
"wlnote": "Di handap ieu mangrupa $1 {{PLURAL:$1|robahan|robahan}} ahir salila '''$2''' jam.",
- "wlshowlast": "Témbongkeun $1 jam $2 poé $3 ahir",
+ "wlshowlast": "Témbongkeun $1 jam $2 poé ahir",
"watchlist-options": "Pilihan awaskeuneun",
"watching": "Ngawaskeun...",
"unwatching": "Eureun ngawaskeun...",
@@ -1489,7 +1499,6 @@
"delete-toobig": "Jujutan édit ieu kaca panjang pisan, leuwih ti {{PLURAL:$1|révisi|révisi}}.\nHal ieu teu diwenangkeun pikeun nyegah karuksakan {{SITENAME}} nu teu dihaja.",
"delete-warning-toobig": "Jujutan ieu kaca panjang pisan, leuwih ti{{PLURAL:$1|révisi|révisi}}. Dihapusna ieu kaca bisa ngaruksak jalanna pangkalan data {{SITENAME}}; sing ati-ati.",
"rollback": "Balikkeun éditan",
- "rollback_short": "Balikkeun",
"rollbacklink": "balikkeun",
"rollbackfailed": "Gagal malikkeun",
"cantrollback": "Éditan teu bisa dibalikkeun; kontribusi panungtung ngarupakeun hiji-hijina panulis kaca ieu.",
@@ -1560,8 +1569,8 @@
"undeleteviewlink": "tempo",
"undeletecomment": "Alesan:",
"undeletedrevisions": "$1 {{PLURAL:$1|révisi|révisi}} disimpen deui",
- "undeletedrevisions-files": "{{PLURAL:$1|1 révisi|$1 révisi}} jeung {{PLURAL:$2|1 koropak|$2 koropak}} geus dipulangkeun",
- "undeletedfiles": "$1 {{PLURAL:$1|koropak}} dibalikeun",
+ "undeletedrevisions-files": "{{PLURAL:$1|1 révisi|$1 révisi}} jeung {{PLURAL:$2|1 berkas|$2 berkas}} geus dibalikkeun",
+ "undeletedfiles": "{{PLURAL:$1|1 berkas|$1 berkas}} dibalikkeun",
"cannotundelete": "Gagal ngabolaykeun hapusan; sigana kapiheulaan ngabolaykeun hapusan ku nu séjén.",
"undeletedpage": "'''$1 hasil dibalikeun'''\n\nTempo [[Special:Log/delete|log hapusan]] keur data ngahapus jeung malikeun.",
"undelete-header": "Tempo [[Special:Log/delete|log hapusan]] pikeun béréndélan kaca nu anyar dihapus.",
@@ -1569,10 +1578,10 @@
"undelete-search-prefix": "Témbongkeun kaca dimimitian ku",
"undelete-search-submit": "Téang",
"undelete-no-results": "Euweuh kaca nu cocog dina arsip hapusan.",
- "undelete-filename-mismatch": "Teu bisa ngabolaykeun hapusan révisi koropak nu titimangsana $1: ngaran teu cocog.",
- "undelete-bad-store-key": "Teu bisa ngabolaykeun hapusan révisi koropak nu titimangsana $1: leungit méméh dihapus.",
- "undelete-cleanup-error": "Éror ngahapus koropak arsip \"$1\" nu teu kapaké.",
- "undelete-missing-filearchive": "Gagal mulangkeun arsip koropak ID $1 kusabab teu kapanggih dina pangkalan data. Bisa jadi éta koropak bolay dihapus.",
+ "undelete-filename-mismatch": "Hanteu bisa ngabolaykeun hapusan révisi berkas titimangsa $1: ngaran berkas teu cocog.",
+ "undelete-bad-store-key": "Hanteu bisa ngabolaykeun hapusan révisi berkas titimangsa $1: Berkas leungit méméh dihapus.",
+ "undelete-cleanup-error": "Éror ngahapus berkas arsip \"$1\" anu teu kapaké.",
+ "undelete-missing-filearchive": "Hanteu bisa mulangkeun arsip berkas ID $1 kusabab teu kapanggih dina pangkalan data. Bisa jadi éta koropak bolay dihapus.",
"undelete-error-short": "Éror ngabolaykeun hapusan: $1",
"undelete-error-long": "Aya éror nalika ngabolaykeun hapusan:\n\n$1",
"undelete-show-file-submit": "Enya",
@@ -1597,16 +1606,17 @@
"sp-contributions-talk": "obrolan",
"sp-contributions-userrights": "ngatur hak pamaké",
"sp-contributions-blocked-notice": "Ieu pamaké keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
+ "sp-contributions-blocked-notice-anon": "Ieu alamat IP keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
"sp-contributions-search": "Paluruh kontribusi",
- "sp-contributions-username": "Alamat IP atawa landihan:",
+ "sp-contributions-username": "Alamat IP atawa sandiasma:",
"sp-contributions-toponly": "Témbongkeun éditan anu révisi panungtung wungkul",
"sp-contributions-submit": "Paluruh",
- "whatlinkshere": "Nu numbu ka dieu",
- "whatlinkshere-title": "Kaca-kaca nu numbu ka \"$1\"",
+ "whatlinkshere": "Anu nutumbu ka dieu",
+ "whatlinkshere-title": "Kaca anu nutumbu ka \"$1\"",
"whatlinkshere-page": "Kaca:",
"linkshere": "Kaca di handap ieu numbu ka '''[[:$1]]''':",
- "nolinkshere": "Euweuh kaca nu numbu ka '''[[:$1]]'''.",
- "nolinkshere-ns": "Euweuh kaca nu numbu ka '''[[:$1]]''' dina namespace nu dipilih.",
+ "nolinkshere": "Euweuh kaca anu nutumbu ka <strong>[[:$1]]</strong>.",
+ "nolinkshere-ns": "Euweuh kaca anu nutumbu ka <strong>[[:$1]]</strong> dina ruang-nama anu dipilih.",
"isredirect": "Kaca alihan",
"istemplate": "ku citakan",
"isimage": "tutumbu berkas",
@@ -1623,9 +1633,10 @@
"blockip": "Peungpeuk pamaké",
"blockip-legend": "Peungpeuk pamaké",
"blockiptext": "Paké formulir di handap pikeun meungpeuk aksés nulis ti alamat IP atawa ngaran pamaké husus. Ieu sakuduna ditujukeun pikeun nyegah vandalisme, sarta saluyu jeung [[{{MediaWiki:Policy-url}}|kawijakan]]. Eusi alesan nu jéntré (misal, ngarujuk kaca tinangtu nu geus diruksak).",
- "ipaddressorusername": "Alamat IP atawa ngaran pamaké",
+ "ipaddressorusername": "Alamat IP atawa sandiasma:",
"ipbexpiry": "Kadaluarsa",
"ipbreason": "Alesan:",
+ "ipb-hardblock": "Nyegah pamaké anu asup log pikeun ngédit ti ieu alamat IP",
"ipbcreateaccount": "Tong bisa nyieun rekening",
"ipbemailban": "Henteu kaci pamaké ngirimkeun surélék",
"ipbenableautoblock": "Peungpeuk sacara otomatis alamat IP anu panungtungan dipaké ku pamaké sarta sakabéh alamat IP anu kungsi dipaké.",
@@ -1692,7 +1703,7 @@
"ip_range_invalid": "Angka IP teu bener.",
"proxyblocker": "Pameungpeuk proxy",
"proxyblockreason": "Alamat IP anjeun dipeungpeuk sabab mangrupa proxy muka. Mangga tepungan ''Internet service provider'' atanapi ''tech support'' anjeun, béjakeun masalah serius ieu.",
- "sorbsreason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL.",
+ "sorbsreason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL anu dipaké ku {{SITENAME}}.",
"sorbs_create_account_reason": "Alamat IP anjeun kadaptar salaku ''open proxy'' dina DNSBL. Anjeun teu bisa nyieun rekening",
"ipbblocked": "Anjeun teu bisa meungpeuk atawa muka peungpeuk séjén kontributor ku sabab anjeun sorangan keur dipeungpeuk",
"lockdb": "Konci pangkalan data",
@@ -1747,8 +1758,8 @@
"immobile-source-page": "Ieu kaca teu bisa dipindahkeun.",
"immobile-target-page": "Teu bisa mindahkeun ka judul nu ditujul.",
"imagenocrossnamespace": "Teu bisa mindahkeun gambar ka rohangan ngaran nu lain gambar",
- "imagetypemismatch": "Éksténsi koropak anyar teu cocog jeung tipena",
- "imageinvalidfilename": "Ngaran koropak tujuan teu sah",
+ "imagetypemismatch": "Éksténsi berkas anyar teu cocog jeung tipena",
+ "imageinvalidfilename": "Ngaran berkas tujuan teu sah",
"fix-double-redirects": "Hadéan sakabéh alihan ganda nu mungkin kajadian",
"protectedpagemovewarning": "'''Awas:''' ieu kaca geus dikonci sarta ngan bisa dipindahkeun ku pamaké nu boga kawenangan kuncén.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
"semiprotectedpagemovewarning": "'''Awas:''' ieu kaca geus dikonci sarta ukur bisa dipindahkeun ku pamaké nu geus asup log.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
@@ -1760,7 +1771,7 @@
"export-addcattext": "Tambahkeun kaca tina kategori:",
"export-addcat": "Tambahkeun",
"export-addns": "Tambahkeun",
- "export-download": "Simpen dina koropak",
+ "export-download": "Simpen salaku berkas",
"export-templates": "Kaasup citakan",
"allmessages": "Talatah sistim",
"allmessagesname": "Ngaran",
@@ -1774,10 +1785,10 @@
"allmessages-language": "Basa:",
"allmessages-filter-submit": "Jung",
"thumbnail-more": "Gedéan",
- "filemissing": "Koropak leungit",
+ "filemissing": "Berkas leungit",
"thumbnail_error": "Kasalahan sawaktu nyieun gambar leutik (thumbnail): $1",
"djvu_page_error": "Kaca DjVu teu kawadahan",
- "djvu_no_xml": "XML keur koropak DjVu teu bisa dicokot",
+ "djvu_no_xml": "Hanteu bisa nyokot XML pikeun berkas DjVu",
"thumbnail_invalid_params": "Kasalahan paraméter miniatur",
"thumbnail_dest_directory": "Diréktori nu dituju teu bisa dijieun",
"thumbnail_image-type": "Jenis gambar teu dirojong",
@@ -1824,7 +1835,7 @@
"tooltip-pt-anonuserpage": "Kaca pamaké pikeun IP nu ku anjeun keur diédit",
"tooltip-pt-mytalk": "Kaca obrolan Anjeun",
"tooltip-pt-anontalk": "Sawala ngeunaan éditan ti alamat IP ieu",
- "tooltip-pt-preferences": "Préferénsi kuring",
+ "tooltip-pt-preferences": "Préferénsi anjeun",
"tooltip-pt-watchlist": "Daptar kaca nu diawaskeun ku anjeun parobahanana.",
"tooltip-pt-mycontris": "Daptar tulisan Anjeun",
"tooltip-pt-login": "Leuwih hadé asup log, sanajan teu wajib",
@@ -1851,8 +1862,8 @@
"tooltip-n-recentchanges": "Béréndélan nu anyar robah dina wiki",
"tooltip-n-randompage": "Muatkeun kaca naon baé",
"tooltip-n-help": "Tempat pikeun néangan pitulung",
- "tooltip-t-whatlinkshere": "Daptar kaca-kaca wiki nu numbu ka dieu",
- "tooltip-t-recentchangeslinked": "Nu anyar robah na kaca-kaca nu numbu ka dieu",
+ "tooltip-t-whatlinkshere": "Béréndélan sakabéh kaca wiki anu nutumbu ka dieu",
+ "tooltip-t-recentchangeslinked": "Anu anyar robah dina kaca-kaca anu nutumbu ti dieu",
"tooltip-feed-rss": "Asupan RSS pikeun kaca ieu",
"tooltip-feed-atom": "Asupan atom pikeun kaca ieu",
"tooltip-t-contributions": "Témbongkeun béréndélan kontribusi ti ieu kontributor",
@@ -1930,9 +1941,9 @@
"file-info-size-pages": "$1 × $2 pixel, ukuran berkas: $3, tipeu MIME: $4, $5 {{PLURAL:$5|kaca|kaca}}",
"file-nohires": "Euweuh résolusi nu leuwih luhur.",
"svg-long-desc": "Koropak SVG, nominalna $1 × $2 piksel, ukuranana $3",
- "show-big-image": "Résolusi pinuh",
+ "show-big-image": "Berkas asli",
"show-big-image-preview": "Ukuran ieu pramidang: $1.",
- "show-big-image-other": "Résolusi lianna: $1.",
+ "show-big-image-other": "{{PLURAL:$2|Resolusi}} lianna: $1.",
"show-big-image-size": "$1 × $2 pixel",
"newimages": "Galeri gambar anyar",
"imagelisttext": "Di handap ieu daptar '''$1''' {{PLURAL:$1|gambar|gambar}} nu disusun $2.",
@@ -1942,6 +1953,7 @@
"ilsubmit": "Sungsi",
"bydate": "dumasar titimangsa",
"sp-newimages-showfrom": "Témbongkeun gambar anyar ti $2, $1",
+ "sunday-at": "Minggu jam $1",
"bad_image_list": "Formatna kieu:\n\nNgan daptar butiran (baris anu dimimitian ku tanda *) anu diitung. \nTutumbu kahiji dina hiji baris dianggap numbu ka berkas anu goréng. \nTutumbu sanggeusna dina baris anu sarua dianggap bener, nyaéta artikel anu midangkeun éta berkas.",
"metadata": "Métadata",
"metadata-help": "Ieu koropak ngandung émbaran tambahan, nu sigana asalna tina kaméra digital atawa paminday nu dipaké pikeun ngadigitalkeunana. Mun ieu koropak geus dirobah tina bentuk aslina, datana bisa jadi teu bener.",
@@ -2077,7 +2089,7 @@
"exif-orientation-3": "Diputer 180°",
"exif-orientation-4": "Dibalikkeun vértikal",
"exif-orientation-5": "Diputer 90° CCW jeung dibalikkeun vértikal",
- "exif-orientation-6": "Diputer 90° CW",
+ "exif-orientation-6": "Diputer 90° CCW",
"exif-orientation-7": "Diputer 90° CW jeung dibalikkeun vértikal",
"exif-orientation-8": "Diputer 90° CCW",
"exif-planarconfiguration-2": "format datar",
@@ -2184,7 +2196,6 @@
"exif-iimcategory-spo": "Olahraga",
"exif-iimcategory-wea": "Cuaca",
"exif-urgency-normal": "Normal ($1)",
- "watchlistall2": "sadaya",
"namespacesall": "kabéh",
"monthsall": "kabéh",
"confirmemail": "Konfirmasi alamat surélék",
@@ -2244,7 +2255,6 @@
"watchlisttools-view": "Témbongkeun parobahan nu patali",
"watchlisttools-edit": "Témbongkeun sarta édit béréndélan awaskeuneun",
"watchlisttools-raw": "Robah béréndélan awaskeuneun",
- "unknown_extension_tag": "Tag éksténsi \"$1\" teu dipikawanoh",
"duplicate-defaultsort": "'''Awas''': Konci runtuyan asal \"$2\" ngalindih konci runtuyan asal \"$1\" anu saméméhna.",
"version": "Vérsi",
"version-extensions": "Éksténsi nu diinstal",
@@ -2256,8 +2266,9 @@
"version-parser-extensiontags": "Tag éksténsi parser",
"version-hook-name": "Ngaran kait",
"version-hook-subscribedby": "Didaptarkeun ku",
- "version-version": "(Vérsi $1)",
- "version-license": "Lisénsi",
+ "version-version": "($1)",
+ "version-license": "Lisénsi MediaWiki",
+ "version-poweredby-translators": "darmamurcaya translatewiki.net",
"version-software": "Sopwér nu geus diinstal",
"version-software-product": "Produk",
"version-software-version": "Vérsi",
@@ -2269,17 +2280,17 @@
"fileduplicatesearch-result-1": "Koropak \"$1\" teu boga duplikat idéntik.",
"fileduplicatesearch-result-n": "Koropak \"$1\" mibanda {{PLURAL:$2|1 duplikat idéntik|$2 duplikat idéntik}}.",
"specialpages": "Kaca husus",
- "specialpages-note": "* Kaca husus bisa di buka ku umum.\n* <strong class=\"mw-specialpagerestricted\">Cetak kandel kaca husus nu kawates.</strong>",
+ "specialpages-note": "* Kaca husus normal.\n* <span class=\"mw-specialpagerestricted\">Kaca husus diwates.</span>",
"specialpages-group-maintenance": "Laporan pigawéeun",
"specialpages-group-other": "Kaca husus lainna",
- "specialpages-group-login": "Asup log / Nyieun rekening",
+ "specialpages-group-login": "Asup log / jieun akun",
"specialpages-group-changes": "Nuanyar robah sarta log",
"specialpages-group-media": "Laporan sarta muatkeun koropak",
"specialpages-group-users": "Pamaké sarta hak pamaké",
"specialpages-group-highuse": "Pamakéan kaca nu badag",
"specialpages-group-pages": "Daptar kaca",
"specialpages-group-pagetools": "Parabot kaca",
- "specialpages-group-wiki": "Data wiki jeung parabot",
+ "specialpages-group-wiki": "Data jeung parabot",
"specialpages-group-redirects": "Alihan kaca husus",
"specialpages-group-spam": "Parabot Spam",
"blankpage": "Kaca kosong",
@@ -2311,9 +2322,10 @@
"revdelete-restricted": "akses geus dibatesan ukur keur kuncén",
"revdelete-unrestricted": "Watesan akses kuncén dihapuskeun",
"rightsnone": "(euweuh)",
- "feedback-subject": "Ngeunaan:",
- "feedback-message": "Surat:",
+ "revdelete-summary": "ringkesan ngédit",
"feedback-cancel": "Bolay",
+ "feedback-message": "Surat:",
+ "feedback-subject": "Ngeunaan:",
"searchsuggest-search": "Sungsi",
"searchsuggest-containing": "ngandung...",
"api-error-file-too-large": "Berkas nu dikirim gedé teuing.",
diff --git a/languages/i18n/sv.json b/languages/i18n/sv.json
index aad7de66..c74e6376 100644
--- a/languages/i18n/sv.json
+++ b/languages/i18n/sv.json
@@ -59,13 +59,19 @@
"לערי ריינהארט",
"아라",
"Abbedabb",
- "Platinawolf"
+ "Platinawolf",
+ "Albinomamba",
+ "Stens51",
+ "Boom",
+ "Marfuas",
+ "Macofe",
+ "Aaoo"
]
},
"tog-underline": "Stryk under länkar:",
"tog-hideminor": "Dölj mindre redigeringar i senaste ändringar",
"tog-hidepatrolled": "Dölj patrullerade redigeringar i senaste ändringar",
- "tog-newpageshidepatrolled": "Dölj patrullerade sidor från listan över nya sidor",
+ "tog-newpageshidepatrolled": "Dölj patrullerade sidor i listan över nya sidor",
"tog-extendwatchlist": "Utöka bevakningslistan till att visa alla ändringar, inte bara den senaste",
"tog-usenewrc": "Gruppera ändringar efter sida i senaste ändringar och bevakningslistan",
"tog-numberheadings": "Automatisk numrerade rubriker",
@@ -76,7 +82,7 @@
"tog-watchdefault": "Lägg till sidor och filer jag redigerar i min bevakningslista",
"tog-watchmoves": "Lägg till sidor och filer jag flyttar i min bevakningslista",
"tog-watchdeletion": "Lägg till sidor och filer jag raderar i min bevakningslista",
- "tog-watchrollback": "Lägg till sidor som jag har utfört en tillbakarullning på i min övervakningslista",
+ "tog-watchrollback": "Lägg till sidor där jag har utfört en tillbakarullning till min bevakningslista",
"tog-minordefault": "Markera automatiskt ändringar som mindre",
"tog-previewontop": "Visa förhandsgranskningen ovanför redigeringsrutan",
"tog-previewonfirst": "Visa förhandsgranskning vid första redigeringen",
@@ -87,14 +93,14 @@
"tog-shownumberswatching": "Visa antalet användare som bevakar",
"tog-oldsig": "Nuvarande signatur:",
"tog-fancysig": "Behandla signatur som wikitext (utan en automatisk länk)",
- "tog-uselivepreview": "Använd direktuppdaterad förhandsgranskning (experimentell)",
+ "tog-uselivepreview": "Använd direktuppdaterad förhandsgranskning",
"tog-forceeditsummary": "Påminn mig om jag inte fyller i en redigeringskommentar",
- "tog-watchlisthideown": "Dölj mina redigeringar från bevakningslistan",
+ "tog-watchlisthideown": "Dölj mina redigeringar i bevakningslistan",
"tog-watchlisthidebots": "Visa inte robotredigeringar i bevakningslistan",
- "tog-watchlisthideminor": "Dölj mindre ändringar från bevakningslistan",
+ "tog-watchlisthideminor": "Dölj mindre ändringar i bevakningslistan",
"tog-watchlisthideliu": "Visa inte redigeringar av inloggade användare i bevakningslistan",
- "tog-watchlisthideanons": "Dölj redigeringar av anonyma användare från bevakningslistan",
- "tog-watchlisthidepatrolled": "Dölj patrullerade redigeringar från bevakningslistan",
+ "tog-watchlisthideanons": "Dölj redigeringar av anonyma användare i bevakningslistan",
+ "tog-watchlisthidepatrolled": "Dölj patrullerade redigeringar i bevakningslistan",
"tog-ccmeonemails": "Skicka kopior till mig av e-post jag skickar till andra användare",
"tog-diffonly": "Visa inte sidinnehåll under diffar",
"tog-showhiddencats": "Visa dolda kategorier",
@@ -183,7 +189,7 @@
"category-article-count": "{{PLURAL:$2|Denna kategori innehåller endast följande sida.|Följande {{PLURAL:$1|sida|$1 sidor}} (av totalt $2) finns i denna kategori.}}",
"category-article-count-limited": "Följande {{PLURAL:$1|sida|$1 sidor}} finns i den här kategorin.",
"category-file-count": "{{PLURAL:$2|Denna kategori innehåller endast följande fil.|Följande {{PLURAL:$1|fil|$1 filer}} (av totalt $2) finns i denna kategori.}}",
- "category-file-count-limited": "Följande {{PLURAL:$1|fil |$1 filer}} finns i den här kategorin.",
+ "category-file-count-limited": "Följande {{PLURAL:$1|fil|$1 filer}} finns i den aktuella kategorin.",
"listingcontinuesabbrev": "forts.",
"index-category": "Indexerade sidor",
"noindex-category": "Icke-indexerade sidor",
@@ -218,7 +224,7 @@
"searchbutton": "Sök",
"go": "Gå till",
"searcharticle": "Gå till",
- "history": "Versionshistorik",
+ "history": "Sidhistorik",
"history_short": "Historik",
"updatedmarker": "uppdaterad sedan senaste besöket",
"printableversion": "Utskriftsvänlig version",
@@ -275,6 +281,7 @@
"pool-queuefull": "Kön är full",
"pool-errorunknown": "Okänt fel",
"pool-servererror": "Pool counter-tjänsten är inte tillgänglig ($1).",
+ "poolcounter-usage-error": "Användningsfel: $1",
"aboutsite": "Om {{SITENAME}}",
"aboutpage": "Project:Om",
"copyright": "Innehållet är tillgängligt under $1 om inte annat anges.",
@@ -284,6 +291,7 @@
"disclaimers": "Förbehåll",
"disclaimerpage": "Project:Allmänt förbehåll",
"edithelp": "Redigeringshjälp",
+ "helppage-top-gethelp": "Hjälp",
"mainpage": "Huvudsida",
"mainpage-description": "Huvudsida",
"policy-url": "Project:Riktlinjer",
@@ -362,10 +370,13 @@
"readonly_lag": "Databasen har automatiskt skrivskyddats medan slavdatabasservrarna synkroniseras med huvudservern.",
"internalerror": "Internt fel",
"internalerror_info": "Internt fel: $1",
+ "internalerror-fatal-exception": "Allvarligt undantag av typen \"$1\"",
"filecopyerror": "Kunde inte kopiera filen \"$1\" till \"$2\".",
"filerenameerror": "Kunde inte byta namn på filen \"$1\" till \"$2\".",
"filedeleteerror": "Kunde inte radera filen \"$1\".",
"directorycreateerror": "Kunde inte skapa katalogen \"$1\".",
+ "directoryreadonlyerror": "Katalog \"$1\" är skrivskyddad.",
+ "directorynotreadableerror": "Katalog \"$1\" är inte läsbar.",
"filenotfound": "Kunde inte hitta filen \"$1\".",
"unexpected": "Oväntat värde: \"$1\"=\"$2\".",
"formerror": "Fel: Kunde inte sända formulär",
@@ -382,12 +393,13 @@
"viewsource": "Visa wikitext",
"viewsource-title": "Visa källa för $1",
"actionthrottled": "Åtgärden stoppades",
- "actionthrottledtext": "Som skydd mot spam, finns det en begränsning av hur många gånger du kan utföra den här åtgärden under en viss tid. Du har överskridit den gränsen. Försök igen om några minuter.",
+ "actionthrottledtext": "Som skydd mot spam finns det en begränsning av hur många gånger du kan utföra den här åtgärden under en viss tid. Du har överskridit den gränsen. Försök igen om några minuter.",
"protectedpagetext": "Den här sidan har skrivskyddats för att förhindra redigering eller andra åtgärder.",
"viewsourcetext": "Du kan se och kopiera denna sidas källtext:",
"viewyourtext": "Du kan se och kopiera källan för '''dina redigeringar''' av denna sida:",
"protectedinterface": "Denna sida innehåller text för mjukvarans gränssnitt på denna wiki, och är skrivskyddad för att förebygga missbruk.\nFör att lägga till eller ändra översättningar för alla wikis, var god använd [//translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
- "editinginterface": "'''Varning:''' Du redigerar en sida som används för texten i gränssnittet.\nÄndringar på denna sida kommer att påverka gränssnittets utseende för alla användare på denna wiki.\nFör att lägga till eller ändra översättningar för alla wikis, var god använd [//translatewiki.net/ translatewiki.net], översättningsprojektet för MediaWiki.",
+ "editinginterface": "<strong>Varning:</strong> Du redigerar en sida som används för texten i gränssnittet.\nÄndringar på denna sida kommer att påverka användargränssnittets utseende för andra användare på denna wiki.",
+ "translateinterface": "För att lägga till eller ändra översättningar för alla wikis, använd [//translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
"cascadeprotected": "Den här sidan har skyddats från redigering eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som skrivskyddats med \"kaskaderande skydd\":\n$2",
"namespaceprotected": "Du har inte behörighet att redigera sidor i namnrymden '''$1'''.",
"customcssprotected": "Du har inte behörighet att redigera denna CSS-sida eftersom den innehåller en annan användares personliga inställningar.",
@@ -407,9 +419,9 @@
"virus-badscanner": "Dålig konfigurering: okänd virusskanner: ''$1''",
"virus-scanfailed": "skanning misslyckades (kod $1)",
"virus-unknownscanner": "okänt antivirusprogram:",
- "logouttext": "'''Du är nu utloggad.'''\n\nObservera att det, tills du tömmer din webbläsares cache, på vissa sidor kan se ut som att du fortfarande är inloggad.",
+ "logouttext": "<strong>Du är nu utloggad.</strong>\n\nObservera att det, tills du tömmer din webbläsares cache, på vissa sidor kan det se ut som att du fortfarande är inloggad.",
"welcomeuser": "Välkommen, $1!",
- "welcomecreation-msg": "Ditt konto har skapats.\nGlöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].",
+ "welcomecreation-msg": "Ditt konto har skapats.\nDu kan justera dina [[Special:Preferences|{{SITENAME}}-inställningar]] om du vill.",
"yourname": "Användarnamn:",
"userlogin-yourname": "Användarnamn",
"userlogin-yourname-ph": "Ange ditt användarnamn",
@@ -444,6 +456,8 @@
"userlogin-resetlink": "Har du glömt dina inloggningsuppgifter?",
"userlogin-resetpassword-link": "Glömt ditt lösenord?",
"userlogin-helplink2": "Hjälp med inloggning",
+ "userlogin-loggedin": "Du är redan inloggad som {{GENDER:$1|$1}}.\nAnvänd formuläret nedan för att logga in som en annan användare.",
+ "userlogin-createanother": "Skapa ett annat konto",
"createacct-emailrequired": "E-postadress",
"createacct-emailoptional": "E-postadress (valfritt)",
"createacct-email-ph": "Bekräfta din e-postadress",
@@ -466,7 +480,7 @@
"loginerror": "Inloggningsproblem",
"createacct-error": "Fel när konto skulle skapas",
"createaccounterror": "Kunde inte skapa konto: $1",
- "nocookiesnew": "Användarkontot skapades, men du är inte inloggad.\n{{SITENAME}} använder kakor för att logga in användare.\nDu har kakor inaktiverade.\nAktivera dem, och logga sen in med ditt nya användarnamn och lösenord.",
+ "nocookiesnew": "Användarkontot skapades, men du är inte inloggad.\n{{SITENAME}} använder kakor för att logga in användare.\nDu har kakor inaktiverade.\nAktivera dem, och logga sedan in med ditt nya användarnamn och lösenord.",
"nocookieslogin": "{{SITENAME}} använder kakor för att logga in användare. Du har stängt av kakor i din webbläsare. Försök igen med stöd för kakor aktiverat.",
"nocookiesfornew": "Användarkontot skapades inte, eftersom vi inte kunde bekräfta dess källa.\nSe till att du har aktiverat kakor, ladda om denna sida och försök igen.",
"noname": "Du har angett ett ogiltigt användarnamn.",
@@ -479,6 +493,7 @@
"wrongpassword": "Lösenordet du angav är felaktigt. Försök igen.",
"wrongpasswordempty": "Lösenordet som angavs var blankt. Var god försök igen.",
"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}}.",
"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",
@@ -508,7 +523,7 @@
"login-migrated-generic": "Dit konto har migrerats och ditt användarnamn existerar inte längre på denna wiki.",
"loginlanguagelabel": "Språk: $1",
"suspicious-userlogout": "Din begäran om att logga ut nekades eftersom det ser ut som det skickades av en trasig webbläsare eller cachande proxy.",
- "createacct-another-realname-tip": "Riktiga namnet är valfritt.\nOm du väljer att ange det, kommer det användas för att tillskriva användaren för sitt arbete.",
+ "createacct-another-realname-tip": "Riktigt namn behöver inte anges.\nOm du väljer att ange det, kommer det att användas för att tillskriva dig ditt arbete.",
"pt-login": "Logga in",
"pt-login-button": "Logga in",
"pt-createaccount": "Skapa konto",
@@ -603,16 +618,18 @@
"blankarticle": "<strong>Varning:</strong> Sidan du skapar är tom.\nOm du klickar på \"{{int:savearticle}}\" igen kommer sidan skapas utan något innehåll.",
"anoneditwarning": "<strong>Varning:</strong> Du är inte inloggad. Din IP-adress kommer att vara publikt synlig om du gör några redigeringar. Om du <strong>[$1 loggar in]</strong> eller <strong>[$2 skapar ett konto]</strong> kommer dina redigeringar att tillskrivas ditt användarnamn, tillsammans med andra fördelar.",
"anonpreviewwarning": "''Du är inte inloggad. Om du sparar kommer din IP-adress registreras på denna sidas redigeringshistorik.''",
- "missingsummary": "'''Påminnelse:''' Du har inte skrivit någon redigeringskommentar.\nOm du klickar på \"{{int:savearticle}}\" igen, kommer din redigering att sparas utan en sådan.",
+ "missingsummary": "<strong>Påminnelse:</strong> Du har inte skrivit någon redigeringskommentar.\nOm du klickar på \"{{int:savearticle}}\" igen kommer din redigering att sparas utan en sådan.",
+ "selfredirect": "<strong>Varning:</strong> Du omdirigerar denna sida till sig själv.\nDu kanske angav fel mål för din omdirigering, eller redigerar fel sida.\nOm du klickar på \"{{int:savearticle}}\" igen kommer omdirigeringen att skapas trots detta.",
"missingcommenttext": "Var god och skriv in en kommentar nedan.",
- "missingcommentheader": "'''Påminnelse:''' Du har inte skrivit något ämne/rubrik för den här kommentaren.\nOm du trycker på \"{{int:savearticle}}\" igen, kommer din redigering sparas utan rubrik.",
+ "missingcommentheader": "<strong>Påminnelse:</strong> Du har inte skrivit något ämne/rubrik för den här kommentaren.\nOm du trycker på \"{{int:savearticle}}\" igen kommer din redigering sparas utan rubrik.",
"summary-preview": "Förhandsgranskning av sammanfattning:",
"subject-preview": "Rubrikförhandsgranskning:",
+ "previewerrortext": "Ett fel uppstod när dina ändringar skulle förhandsgranskas.",
"blockedtitle": "Användaren är blockerad",
"blockedtext": "'''Din IP-adress eller ditt användarnamn är blockerat.'''\n\nBlockeringen utfördes av $1 med motiveringen: ''$2''.\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6.\n* Blockeringen var avsedd för: $7.\n\nDu kan kontakta $1 eller någon annan av [[{{MediaWiki:Grouppage-sysop}}|administratörerna]] för att diskutera blockeringen.\nOm du är inloggad och har uppgivit en e-postadress i dina [[Special:Preferences|inställningar]] så kan du använda funktionen 'Skicka e-post till den här användaren', såvida du inte blivit blockerad från funktionen.\n\nDin IP-adress är $3 och blockerings-ID är #$5.\nVänligen ange informationen ovan i alla förfrågningar som du gör i ärendet.",
"autoblockedtext": "Din IP-adress har blockerats automatiskt eftersom den har använts av en annan användare som blockerats av $1.\nMotiveringen av blockeringen var:\n\n:''$2''\n\n* Blockeringen startade: $8\n* Blockeringen gäller till: $6\n* Blockeringen är avsedd för: $7\n\nDu kan kontakta $1 eller någon annan [[{{MediaWiki:Grouppage-sysop}}|administratör]] för att diskutera blockeringen.\n\nObservera att du inte kan använda dig av funktionen \"skicka e-post till användare\" om du inte har registrerat en giltig e-postadress i [[Special:Preferences|dina inställningar]] eller om du har blivit blockerad från att skicka e-post.\n\nDin nuvarande IP-adress är $3, och blockerings-ID är #$5.\nVänligen ange informationen ovan i alla förfrågningar som du gör i ärendet.",
"blockednoreason": "ingen motivering angavs",
- "whitelistedittext": "Du måste $1 för att kunna redigera sidor.",
+ "whitelistedittext": "Vänligen $1 för att redigera sidor.",
"confirmedittext": "Du måste bekräfta din e-postadress innan du kan redigera sidor. Var vänlig ställ in och validera din e-postadress genom dina [[Special:Preferences|användarinställningar]].",
"nosuchsectiontitle": "Kan inte hitta avsnitt",
"nosuchsectiontext": "Du försökte redigera ett avsnitt som inte finns.\nDet kan ha flyttats eller raderats medan du tittade på sidan.",
@@ -645,7 +662,7 @@
"previewconflict": "Den här förhandsvisningen är resultatet av den\nredigerbara texten ovanför,\nså som det kommer att se ut om du väljer att spara.",
"session_fail_preview": "'''Vi kunde inte behandla din redigering eftersom sessionsdata gått förlorad.\nVar god försök igen.\nOm det fortfarande inte fungerar, prova att [[Special:UserLogout|logga ut]] och logga in igen.'''",
"session_fail_preview_html": "'''Vi kunde inte behandla din redigering eftersom sessionsdata gått förlorad.'''\n\n''Eftersom {{SITENAME}} har aktiverat rå HTML, så döljs förhandsvisningen som en förebyggande säkerhetsåtgärd mot JavaScript-attacker.''\n\n'''Om detta är ett försök att göra en rättmätig redigering, så försök igen.\nOm det fortfarande inte fungerar, pröva att [[Special:UserLogout|logga ut]] och logga in igen.'''",
- "token_suffix_mismatch": "'''Din redigering har stoppats eftersom din klient har ändrat tecknen\ni redigeringens \"edit token\". Redigeringen stoppades för att förhindra att sidtexten skadas.\nDetta händer ibland om du använder buggiga webbaserade anonyma proxytjänster.'''",
+ "token_suffix_mismatch": "'''Din redigering har stoppats eftersom din klient har ändrat tecknen\ni redigerings-nyckeln. Redigeringen stoppades för att förhindra att sidtexten skadas.\nDetta händer ibland om du använder buggiga webbaserade anonyma proxytjänster.'''",
"edit_form_incomplete": "'''Vissa delar av redigeringen kunde inte nå servern, dubbelkolla att dina ändringar är intakta och försök igen.'''",
"editing": "Redigerar $1",
"creating": "Skapar $1",
@@ -702,6 +719,10 @@
"content-model-text": "oformaterad text",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Tomt objekt",
+ "content-json-empty-array": "Tomt fält",
+ "duplicate-args-category": "Sidor som använder upprepade argument i mallanrop",
+ "duplicate-args-category-desc": "Sidan innehåller mallanrop som använder repeterade argument, så som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Varning: Denna sida innehåller för många anrop av resurskrävande parserfunktioner.\n\nAntalet anrop får vara högst $2, nu görs {{PLURAL:$1|$1 anrop}}",
"expensive-parserfunction-category": "Sidor med för många resurskrävande parserfunktioner",
"post-expand-template-inclusion-warning": "Varning: Den här sidan innehåller för mycket mallinklusioner.\nNågra av mallarna kommer inte att inkluderas.",
@@ -756,7 +777,7 @@
"history-feed-empty": "Den begärda sidan finns inte.\nDen kan ha tagits bort från wikin eller bytt namn.\nProva att [[Special:Search|söka på wikin]] för relevanta nya sidor.",
"rev-deleted-comment": "(redigeringssammanfattning togs bort)",
"rev-deleted-user": "(användarnamn borttaget)",
- "rev-deleted-event": "(loggåtgärd borttagen)",
+ "rev-deleted-event": "(loggdetaljer borttagna)",
"rev-deleted-user-contribs": "[användarnamn eller IP-adress har tagits bort - redigeringen visas ej bland bidragen]",
"rev-deleted-text-permission": "Denna version av sidan har '''raderats'''.\nDet kan finnas mer information i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
"rev-suppressed-text-permission": "Denna version av sidan har <strong>undanhållits</strong>.\nDetaljer kan hittas i [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} undanhållandeloggen].",
@@ -790,7 +811,7 @@
"revdelete-legend": "Ändra synlighet",
"revdelete-hide-text": "Versionstext",
"revdelete-hide-image": "Dölj filinnehåll",
- "revdelete-hide-name": "Dölj åtgärd och sidnamn",
+ "revdelete-hide-name": "Dölj mål och parametrar",
"revdelete-hide-comment": "Redigeringssammanfattning",
"revdelete-hide-user": "Redigerarens användarnamn/IP-adress",
"revdelete-hide-restricted": "Undanhåll data från administratörer så väl som från övriga",
@@ -845,7 +866,6 @@
"mergehistory-reason": "Anledning:",
"mergehistory-revisionrow": "$1($2) $3 . .$4 $5 $6",
"mergelog": "Sammanfogningslogg",
- "pagemerge-logentry": "infogade [[$1]] i [[$2]] (versioner t.o.m. $3)",
"revertmerge": "Återställ infogning",
"mergelogpagetext": "Detta är en lista över de senaste sammansfogningarna av sidhistoriker.",
"history-title": "Versionshistorik för \"$1\"",
@@ -860,7 +880,7 @@
"diff-multi-sameuser": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av samma användare visas inte)",
"diff-multi-otherusers": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av {{PLURAL:$2|en annan användare|$2 användare}} visas inte)",
"diff-multi-manyusers": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av mer än $2 användare visas inte)",
- "difference-missing-revision": "{{PLURAL:$2|En version|$2 versioner}} av denna skillnad ($1) kunde inte hittas.\n\nDetta orsakas vanligtvis av att följa en utgången difflänk till en sida som har raderats.\nDetaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
+ "difference-missing-revision": "Det gick inte att hitta {{PLURAL:$2|en version|$2 versioner}} av den här differensen ($1).\n\nDetta beror oftast på att du har försökt följa en utgången difflänk till en sida som har raderats.\nMer detaljerad information finns i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
"searchresults": "Sökresultat",
"searchresults-title": "Sökresultat för \"$1\"",
"titlematches": "Träffar i sidtitlar",
@@ -868,6 +888,8 @@
"notextmatches": "Inga artikeltexter matchar sökningen",
"prevn": "föregående {{PLURAL:$1|$1}}",
"nextn": "nästa {{PLURAL:$1|$1}}",
+ "prev-page": "föregående sida",
+ "next-page": "nästa sida",
"prevn-title": "Föregående $1 {{PLURAL:$1|resultat|resultat}}",
"nextn-title": "Nästa $1 {{PLURAL:$1|resultat|resultat}}",
"shown-title": "Visa $1 {{PLURAL:$1|resultat|resultat}} per sida",
@@ -886,6 +908,7 @@
"search-result-category-size": "{{PLURAL:$1|1 medlem|$1 medlemmar}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})",
"search-redirect": "(omdirigering $1)",
"search-section": "(avsnitt $1)",
+ "search-category": "(kategorin $1)",
"search-file-match": "(överensstämmer filens innehåll)",
"search-suggest": "Menade du: $1",
"search-interwiki-caption": "Systerprojekt",
@@ -913,12 +936,17 @@
"prefsnologintext2": "Var god logga in för att ändra dina inställningar.",
"prefs-skin": "Utseende",
"skin-preview": "Förhandsvisning",
- "datedefault": "Ovidkommande",
+ "datedefault": "Ingen preferens",
"prefs-labs": "Testfunktioner",
"prefs-user-pages": "Användarsidor",
"prefs-personal": "Mitt konto",
"prefs-rc": "Senaste ändringar",
"prefs-watchlist": "Bevakningslista",
+ "prefs-editwatchlist": "Redigera bevakningslistan",
+ "prefs-editwatchlist-label": "Redigera poster på din bevakningslista:",
+ "prefs-editwatchlist-edit": "Visa och ta bort titlar på din bevakningslista",
+ "prefs-editwatchlist-raw": "Redigera bevakningslistan i råformat",
+ "prefs-editwatchlist-clear": "Rensa din bevakningslista",
"prefs-watchlist-days": "Antal dygn som skall visas i bevakningslistan:",
"prefs-watchlist-days-max": "Maximalt $1 {{PLURAL:$1|dag|dygn}}",
"prefs-watchlist-edits": "Maximalt antal redigeringar som visas i utökad bevakningslista:",
@@ -965,8 +993,8 @@
"prefs-namespaces": "Namnrymder",
"default": "ursprungsinställning",
"prefs-files": "Filer",
- "prefs-custom-css": "personlig CSS",
- "prefs-custom-js": "personlig JavaScript",
+ "prefs-custom-css": "Personlig CSS",
+ "prefs-custom-js": "Personligt JavaScript",
"prefs-common-css-js": "Delad CSS/JS för alla utseenden:",
"prefs-reset-intro": "Du kan använda den här sidan till att återställa dina inställningar till webbplatsens standardinställningar.\nDetta kan inte återställas.",
"prefs-emailconfirm-label": "E-postbekräftelse:",
@@ -982,13 +1010,13 @@
"prefs-help-signature": "Kommentarer på diskussionssidor ska signeras med \"<nowiki>~~~~</nowiki>\", vilket konverteras till din signatur och tidpunkt.",
"badsig": "Det är något fel med råsignaturen, kontrollera HTML-koden.",
"badsiglength": "Din signatur är för lång.\nDen får inte vara längre än $1 {{PLURAL:$1|tecken|tecken}}.",
- "yourgender": "Hur vill du bli adresserad?",
- "gender-unknown": "Jag föredrar att inte specificera",
+ "yourgender": "Hur vill du att andra refererar till dig?",
+ "gender-unknown": "Jag föredrar att inte uppge det",
"gender-male": "Han redigerar wikisidor",
"gender-female": "Hon redigerar wikisidor",
"prefs-help-gender": "Denna inställning är valfri.\nProgramvaran använder detta värde för att adressera dig till andra med rätt genus. Denna information kommer att vara offentlig.",
"email": "E-post",
- "prefs-help-realname": "Riktigt namn behöver inte anges.\nOm du väljer att ange ditt riktiga namn, kommer det att användas för att tillskriva dig ditt arbete.",
+ "prefs-help-realname": "Riktigt namn behöver inte anges.\nOm angivet, kan det komma att användas för att tillskriva dig ditt arbete.",
"prefs-help-email": "Att ange e-postadress är valfritt, men gör det möjligt att få ditt lösenord mejlat till dig om du glömmer det.",
"prefs-help-email-others": "Du kan också välja att låta andra kontakta dig via e-post genom en länk på din användar- eller diskussionssida. Din e-postadress avslöjas inte när andra användare kontaktar dig.",
"prefs-help-email-required": "E-postadress måste anges.",
@@ -1007,7 +1035,7 @@
"prefs-displayrc": "Visningsalternativ",
"prefs-displaywatchlist": "Visningalternativ",
"prefs-tokenwatchlist": "Nyckel",
- "prefs-diffs": "Skillnader",
+ "prefs-diffs": "Versiondifferenser",
"prefs-help-prefershttps": "Ändringar av denna inställning börjar gälla nästa gång du loggar in",
"prefswarning-warning": "Du har gjort ändringar i dina inställningarna som inte har sparats ännu.\nOm du lämnar denna sida utan att klicka på \"$1\" kommer dina inställningar inte att uppdateras.",
"prefs-tabs-navigation-hint": "Tips: Du kan använda vänster och höger piltangenterna för att navigera mellan flikarna i listan flikar.",
@@ -1088,13 +1116,14 @@
"right-suppressionlog": "Se privata loggar",
"right-block": "Blockera andra användare från att redigera",
"right-blockemail": "Blockera användare från att skicka e-post",
- "right-hideuser": "Blockera ett användarnamn och dölja det från allmänheten",
+ "right-hideuser": "Blockera ett användarnamn och dölj det från allmänheten",
"right-ipblock-exempt": "Kan redigera från blockerade IP-adresser",
"right-proxyunbannable": "Kan redigera från blockerade proxyer",
"right-unblockself": "Avblockera sig själv",
"right-protect": "Ändra skyddsnivåer och redigera kaskadskyddade sidor",
"right-editprotected": "Redigera skyddade sidor som \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "Redigera skyddade sidor som \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "Ändra innehållsmodellen för en sida",
"right-editinterface": "Redigera användargränssnittet",
"right-editusercssjs": "Redigera andra användares CSS- och JS-filer",
"right-editusercss": "Redigera andra användares CSS-filer",
@@ -1114,19 +1143,20 @@
"right-patrol": "Markera ändringar som patrullerade",
"right-autopatrol": "Får automatiskt sina ändringar markerade som patrullerade",
"right-patrolmarks": "Se markeringar av opatrullerade ändringar i senaste ändringarna",
- "right-unwatchedpages": "Se listan över obevakade sidor",
+ "right-unwatchedpages": "Se en lista över obevakade sidor",
"right-mergehistory": "Sammanfoga sidhistoriker",
- "right-userrights": "Ändra alla användarrättigheter",
- "right-userrights-interwiki": "Ändra rättigheter för användare på andra wikier",
- "right-siteadmin": "Låsa och låsa upp databasen",
+ "right-userrights": "Redigera alla användarrättigheter",
+ "right-userrights-interwiki": "Redigera användarrättigheterna på andra wikier",
+ "right-siteadmin": "Lås och öppna databasen",
"right-override-export-depth": "Exportera sidor inklusive länkade sidor till ett djup på 5",
"right-sendemail": "Skicka e-post till andra användare",
"right-passwordreset": "Visa e-postmeddelanden med lösenordsåterställning",
+ "right-managechangetags": "Skapa och radera [[Special:Tags|taggar]] från databasen",
"newuserlogpage": "Logg över nya användare",
- "newuserlogpagetext": "Detta är en logg över skapade användarkonton.",
+ "newuserlogpagetext": "Detta är en logg över nya användarkonton.",
"rightslog": "Användarrättighetslogg",
"rightslogtext": "Detta är en logg över ändringar av användares rättigheter.",
- "action-read": "läsa denna sida",
+ "action-read": "läs denna sida",
"action-edit": "redigera denna sida",
"action-createpage": "skapa sidor",
"action-createtalk": "skapa diskussionssidor",
@@ -1152,7 +1182,7 @@
"action-suppressionlog": "se denna privata logg",
"action-block": "blockera denna användare från redigering",
"action-protect": "ändra skyddsnivå för denna sida",
- "action-rollback": "snabbt rulla tillbaka ändringarna gjorda av den användare som senast redigerade en viss sida",
+ "action-rollback": "rulla snabbt tillbaka ändringarna gjorda av den användare som senast redigerade en viss sida",
"action-import": "importera sidor från en annan wiki",
"action-importupload": "importera sidor från en filuppladdning",
"action-patrol": "märka annans redigering som patrullerad",
@@ -1167,6 +1197,8 @@
"action-viewmywatchlist": "visa din bevakningslista",
"action-viewmyprivateinfo": "visa din privata information",
"action-editmyprivateinfo": "redigera din privata information",
+ "action-editcontentmodel": "ändra innehållsmodellen för en sida",
+ "action-managechangetags": "skapa och radera taggar från databasen",
"nchanges": "$1 {{PLURAL:$1|ändring|ändringar}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sedan senaste besöket}}",
"enhancedrc-history": "historik",
@@ -1183,7 +1215,7 @@
"recentchanges-legend-heading": "'''Teckenförklaring:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se även [[Special:NewPages|listan över nya sidor]])",
"recentchanges-legend-plusminus": "(''±123'')",
- "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringar|ändringen}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
+ "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringen|ändringar}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
"rclistfrom": "Visa ändringar från och med $3 $2",
"rcshowhideminor": "$1 mindre ändringar",
"rcshowhideminor-show": "Visa",
@@ -1237,9 +1269,9 @@
"uploaderror": "Fel vid uppladdningen",
"upload-recreate-warning": "'''Varning: En fil med det namnet har tagits bort eller flyttats.'''\n\nRaderings- och sidflyttningsloggen för denna sida återges här:",
"uploadtext": "Använd formuläret nedan för att ladda upp filer.\nFör att titta på eller leta efter filer som redan har laddats upp, se [[Special:FileList|listan över uppladdade filer]]. Uppladdningar loggförs även i [[Special:Log/upload|uppladdningsloggen]], och raderingar i [[Special:Log/delete|raderingsloggen]].\n\nAnvänd en länk på något av följande format för att infoga en fil på en sida:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' för att visa filen i dess hela storlek\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alternativ text]]</nowiki></code>''' för att visa en rendering med bredden 200 pixel i en ruta till vänster med bildtexten 'alternativ text'\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' för att länka direkt till filen utan att visa den",
- "upload-permitted": "Tillåtna filtyper: $1.",
- "upload-preferred": "Föredragna filtyper: $1.",
- "upload-prohibited": "Förbjudna filtyper: $1.",
+ "upload-permitted": "{{PLURAL:$2|Tillåten filtyp|Tillåtna filtyper}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|Föredragen filtyp|Föredragna filtyper}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Förbjuden filtyp|Förbjudna filtyper}}: $1.",
"uploadlogpage": "Uppladdningslogg",
"uploadlogpagetext": "Det här är en logg över de senast uppladdade filerna.\nSe [[Special:NewFiles|galleriet över nya filer]] för en mer visuell översikt.",
"filename": "Filnamn",
@@ -1364,10 +1396,10 @@
"zip-wrong-format": "Den angivna filen var inte en ZIP-fil.",
"zip-bad": "Filen är en skadad eller annars oläsbar ZIP fil.\nDen kan inte säkerhetskontrolleras ordentligt.",
"zip-unsupported": "Filen är en ZIP-fil som använder ZIP funktioner som inte stöds av MediaWiki.\nDen kan inte säkerhetskontrolleras ordentligt.",
- "uploadstash": "Ladda upp stash",
+ "uploadstash": "Temporära lagringsytan för uppladdningar",
"uploadstash-summary": "Denna sida ger tillgång till filer som är uppladdade (eller håller på att laddas upp) men som ännu inte är publicerade till wikin. Dessa filer är inte synliga för någon annan än den användare som laddade upp dem.",
- "uploadstash-clear": "Rensa stashade filer",
- "uploadstash-nofiles": "Du har inga stashade filer.",
+ "uploadstash-clear": "Rensa temporärt lagrade filer",
+ "uploadstash-nofiles": "Du har inga temporärt lagrade filer.",
"uploadstash-badtoken": "Utförandet av den åtgärden misslyckades, kanske för att din redigeringsrättigheter löpt ut. Försök igen.",
"uploadstash-errclear": "Rensning av filerna misslyckades.",
"uploadstash-refresh": "Uppdatera listan över filer",
@@ -1433,7 +1465,7 @@
"filehist-comment": "Kommentar",
"imagelinks": "Filanvändning",
"linkstoimage": "Följande {{PLURAL:$1|sida|$1 sidor}} länkar till den här filen:",
- "linkstoimage-more": "Mer änr {{PLURAL:$1|en sida|$1 sidor}} länkar till den här filen.\nFöljande lista visar bara {{PLURAL:$1|den första sidan|de $1 första sidorna}} som länkar till filen.\nDet finns en [[Special:WhatLinksHere/$2|fullständig lista]].",
+ "linkstoimage-more": "Mer än {{PLURAL:$1|en sida|$1 sidor}} länkar till den här filen.\nFöljande lista visar bara {{PLURAL:$1|den första sidan|de $1 första sidorna}} som länkar till filen.\nDet finns en [[Special:WhatLinksHere/$2|fullständig lista]].",
"nolinkstoimage": "Inga sidor länkar till den här filen.",
"morelinkstoimage": "Visa [[Special:WhatLinksHere/$1|fler länkar]] till den här filen.",
"linkstoimage-redirect": "$1 (filomdirigering) $2",
@@ -1498,7 +1530,6 @@
"statistics": "Statistik",
"statistics-header-pages": "Sidstatistik",
"statistics-header-edits": "Redigeringsstatistik",
- "statistics-header-views": "Sidvisningsstatistik",
"statistics-header-users": "Användarstatistik",
"statistics-header-hooks": "Övrig statistik",
"statistics-articles": "Sidor med innehåll",
@@ -1507,13 +1538,9 @@
"statistics-files": "Uppladdade filer",
"statistics-edits": "Sidredigeringar sedan {{SITENAME}} startades",
"statistics-edits-average": "Redigeringar per sida i genomsnitt",
- "statistics-views-total": "Totalt antal sidvisningar",
- "statistics-views-total-desc": "Visningar av icke-existerande sidor och specialsidor ingår inte",
- "statistics-views-peredit": "Antal sidvisningar per redigering",
"statistics-users": "Registrerade [[Special:ListUsers|användare]]",
"statistics-users-active": "Aktiva användare",
"statistics-users-active-desc": "Användare som utfört någon åtgärd under {{PLURAL:$1|det senaste dygnet|de senaste $1 dygnen}}",
- "statistics-mostpopular": "Mest besökta sidor",
"pageswithprop": "Sidor med en sidegenskap",
"pageswithprop-legend": "Sidor med en sidegenskap",
"pageswithprop-text": "Denna sida listar sidor som använder en speciell sidegenskap.",
@@ -1543,8 +1570,8 @@
"nmemberschanged": "$1 → $2 {{PLURAL:$2|medlem|medlemmar}}",
"nrevisions": "$1 {{PLURAL:$1|version|versioner}}",
"nviews": "$1 {{PLURAL:$1|visning|visningar}}",
- "nimagelinks": "Använd på $1 {{PLURAL:$1|sida|sidor}}",
- "ntransclusions": "använd på $1 {{PLURAL:$1|sida|sidor}}",
+ "nimagelinks": "Används på $1 {{PLURAL:$1|sida|sidor}}",
+ "ntransclusions": "används på $1 {{PLURAL:$1|sida|sidor}}",
"specialpage-empty": "Den här sidan är tom.",
"lonelypages": "Föräldralösa sidor",
"lonelypagestext": "Följande sidor länkas inte till eller inkluderas på någon annan sida på {{SITENAME}}.",
@@ -1554,9 +1581,9 @@
"uncategorizedtemplates": "Ej kategoriserade mallar",
"unusedcategories": "Oanvända kategorier",
"unusedimages": "Oanvända filer",
- "popularpages": "Populära sidor",
"wantedcategories": "Önskade kategorier",
"wantedpages": "Önskade sidor",
+ "wantedpages-summary": "Lista över obefintliga sidor som är mest länkade, exklusive sidor som endast är länkade med omdirigeringar. För en lista över obefintliga sidor som endast är länkade med omdirigeringar, se [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Ogiltig titel bland resultaten: $1",
"wantedfiles": "Önskade filer",
"wantedfiletext-cat": "Följande filer används men finns inte. Filer från utländska databaser kan vara listade trots att de inte finns. Sådana falska realiteter kommer att <del>tas bort</del>. Sidor som bäddar in filer som inte finns listas upp på [[:$1]].",
@@ -1616,9 +1643,11 @@
"pager-older-n": "{{PLURAL:$1|1 äldre|$1 äldre}}",
"suppress": "Censur",
"querypage-disabled": "Den här specialsidan är inaktiverad av prestandaskäl.",
+ "apihelp": "API-hjälp",
+ "apihelp-no-such-module": "Modulen ”$1” hittades inte",
"booksources": "Bokkällor",
"booksources-search-legend": "Sök efter bokkällor",
- "booksources-go": "Visa",
+ "booksources-search": "Sök",
"booksources-text": "Nedan följer en lista över länkar till webbplatser som säljer nya och begagnade böcker, och som kanske har ytterligare information om de böcker du söker.",
"booksources-invalid-isbn": "Det angivna ISBN-numret verkar inte vara giltigt. Kontrollera källan för eventuella fel.",
"specialloguserlabel": "Utförare:",
@@ -1754,7 +1783,7 @@
"wlheader-enotif": "E-postmeddelanden är aktiverade.",
"wlheader-showupdated": "Sidor som har ändrats sedan ditt senaste besök visas i '''fetstil.'''",
"wlnote": "Nedan finns {{PLURAL:$1|den senaste ändringen|de senaste <strong>$1</strong> ändringarna}} under {{PLURAL:$2|den senaste timmen|de senaste <strong>$2</strong> timmarna}} från den $3 kl. $4.",
- "wlshowlast": "Visa senaste $1 timmarna $2 dygnen $3",
+ "wlshowlast": "Visa senaste $1 timmarna $2 dygnen",
"watchlist-options": "Alternativ för bevakningslistan",
"watching": "Bevakar...",
"unwatching": "Avbevakar...",
@@ -1803,7 +1832,6 @@
"deleteprotected": "Du kan inte radera denna sida eftersom den är skyddad.",
"deleting-backlinks-warning": "'''Varning:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Andra sidor]] länkar till eller inkluderar sidan som du är på väg att radera.",
"rollback": "Rulla tillbaka ändringar",
- "rollback_short": "Tillbakarullning",
"rollbacklink": "rulla tillbaka",
"rollbacklinkcount": "rulla tillbaka $1 {{PLURAL:$1|redigering|redigeringar}}",
"rollbacklinkcount-morethan": "rulla tillbaka mer än $1 {{PLURAL:$1|redigering|redigeringar}}",
@@ -1913,6 +1941,7 @@
"namespace": "Namnrymd:",
"invert": "Invertera val",
"tooltip-invert": "Markera denna ruta för att dölja ändringar på sidor inom det valda namnrymden (och tillhörande namnrymden om det är markerat)",
+ "tooltip-whatlinkshere-invert": "Markera denna ruta för att dölja länkar från sidor inom vald namnrymd.",
"namespace_association": "Associerad namnrymd",
"tooltip-namespace_association": "Markera denna ruta för att även inkludera diskussions- eller ämnesnamnrymden som är associerad med den valda namnrymden",
"blanknamespace": "(Huvudnamnrymden)",
@@ -1978,7 +2007,7 @@
"ipboptions": "2 timmar:2 hours,1 dygn:1 day,3 dygn:3 days,1 vecka:1 week,2 veckor:2 weeks,1 månad:1 month,3 månader:3 months,6 månader:6 months,1 år:1 year,oändlig:infinite",
"ipbhidename": "Dölj användarnamnet från redigeringar och listor",
"ipbwatchuser": "Bevaka användarens användarsida och diskussionssida",
- "ipb-disableusertalk": "Hindra användaren från att redigera sina egna diskussionssida under blockeringen",
+ "ipb-disableusertalk": "Hindra användaren från att redigera sin egen diskussionssida under blockeringen",
"ipb-change-block": "Återblockera användaren med de här inställningarna",
"ipb-confirm": "Bekräfta blockering",
"badipaddress": "Du har inte skrivit IP-adressen korrekt.",
@@ -2177,14 +2206,15 @@
"thumbnail-temp-create": "Kunde inte skapa temporär miniatyrfil",
"thumbnail-dest-create": "Kunde inte spara miniatyr till destinationen",
"thumbnail_invalid_params": "Ogiltiga parametrar för miniatyrbilden",
+ "thumbnail_toobigimagearea": "Fil med dimensioner som är större än $1",
"thumbnail_dest_directory": "Kan inte skapa målkatalogen",
"thumbnail_image-type": "Bildtypen stöds inte",
"thumbnail_gd-library": "Inkomplett GD library konfigurering: saknar funktionen $1",
"thumbnail_image-missing": "Fil verkar saknas: $1",
"thumbnail_image-failure-limit": "Det har nyligen förekommit alltför många misslyckade ($1 eller fler) försök skapa den här miniatyrbilden. Försök igen senare.",
"import": "Importera sidor",
- "importinterwiki": "Transwiki-import",
- "import-interwiki-text": "Välj en wiki och sidtitel att importera.\nVersionshistorik (datum och redaktörer) kommer att bevaras.\nAll överföring mellan wikier (transwiki) listas i [[Special:Log/import|importloggen]].",
+ "importinterwiki": "Importera från en annan wiki",
+ "import-interwiki-text": "Välj en wiki och sidtitel att importera.\nVersionshistorikens datum och redigerare kommer att bevaras.\nAll importering från andra wikis listas i [[Special:Log/import|importloggen]].",
"import-interwiki-sourcewiki": "Källwiki:",
"import-interwiki-sourcepage": "Källsida:",
"import-interwiki-history": "Kopiera hela versionshistoriken för denna sida",
@@ -2204,7 +2234,7 @@
"importcantopen": "Misslyckades med att öppna importfilen.",
"importbadinterwiki": "Felaktig interwiki-länk",
"importsuccess": "Importen är genomförd!",
- "importnosources": "Inga källor för transwiki-import har angivits, och direkt uppladdning av historik har stängts av.",
+ "importnosources": "Inga källor från vilka import ska göras har angivits och direkt uppladdning av historik har stängts av.",
"importnofile": "Ingen fil att importera har laddats upp.",
"importuploaderrorsize": "Uppladdningen av importfilen misslyckades. Filen är större än vad som är tillåtet att ladda upp.",
"importuploaderrorpartial": "Uppladdningen av importfilen misslyckades. Bara en del av filen laddades upp.",
@@ -2228,18 +2258,15 @@
"import-rootpage-nosubpage": "Namnrymden \"$1\" till grundsidan tillåter inte undersidor.",
"importlogpage": "Importlogg",
"importlogpagetext": "Administrativa sidimporter med versionshistorik från andra wikier.",
- "import-logentry-upload": "importerade [[$1]] genom filuppladdning",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versioner}} importerades",
- "import-logentry-interwiki": "överförde $1 mellan wikier",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importerades från $2",
"javascripttest": "JavaScript-testning",
- "javascripttest-title": "Kör $1 tester",
"javascripttest-pagetext-noframework": "Denna sida är reserverat för att köra JavaScript-tester.",
"javascripttest-pagetext-unknownframework": "Okänd testmiljö \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Okänd handling \"$1\".",
"javascripttest-pagetext-frameworks": "Välj en av följande testmiljöer: $1",
"javascripttest-pagetext-skins": "Välj ett utseende att köra tester med:",
"javascripttest-qunit-intro": "Se [$1 testningsdokumentationen] på mediawiki.org.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit testsvit",
"tooltip-pt-userpage": "Din användarsida",
"tooltip-pt-anonuserpage": "Användarsida för ip-numret du redigerar från",
"tooltip-pt-mytalk": "Din diskussionssida",
@@ -2249,6 +2276,7 @@
"tooltip-pt-mycontris": "Lista över dina bidrag",
"tooltip-pt-login": "Du uppmuntras att logga in, men det är inte nödvändigt",
"tooltip-pt-logout": "Logga ut",
+ "tooltip-pt-createaccount": "Du uppmuntras att skapa ett konto och logga in, men det är inte obligatoriskt",
"tooltip-ca-talk": "Diskussion om innehållssidan",
"tooltip-ca-edit": "Du kan redigera den här sidan.\nVänligen använd förhandsgranskningsknappen innan du sparar.",
"tooltip-ca-addsection": "Starta ett nytt avsnitt",
@@ -2278,6 +2306,7 @@
"tooltip-feed-atom": "Atom-flöde för den här sidan",
"tooltip-t-contributions": "En lista över bidrag från den här användaren",
"tooltip-t-emailuser": "Skicka e-post till den här användaren",
+ "tooltip-t-info": "Mer information om denna sida",
"tooltip-t-upload": "Ladda upp filer",
"tooltip-t-specialpages": "Lista över alla specialsidor",
"tooltip-t-print": "Utskriftvänlig version av den här sidan",
@@ -2303,7 +2332,7 @@
"tooltip-recreate": "Återskapa sidan fast den har tagits bort",
"tooltip-upload": "Starta uppladdning",
"tooltip-rollback": "\"Tillbakarullning\" tar med en knapptryckning bort ändringar som gjorts av den som senast redigerade sidan",
- "tooltip-undo": "\"Gör ogjord\" återställer denna redigering och öppnar redigeringsrutan med förhandsgranskning.\nDen ger möjlighet att skriva en motivering i redigeringssammanfattningen.",
+ "tooltip-undo": "\"Gör ogjord\" återställer denna redigering och öppnar redigeringsrutan med förhandsgranskning. Det ger möjlighet att skriva en motivering i redigeringssammanfattningen.",
"tooltip-preferences-save": "Spara inställningar",
"tooltip-summary": "Skriv en kort sammanfattning",
"interlanguage-link-title": "$1 - $2",
@@ -2354,7 +2383,6 @@
"pageinfo-robot-policy": "Indexering av robotar",
"pageinfo-robot-index": "Tillåten",
"pageinfo-robot-noindex": "Inte tillåten",
- "pageinfo-views": "Antal visningar",
"pageinfo-watchers": "Antal användare som bevakar sidan",
"pageinfo-few-watchers": "Färre än $1 {{PLURAL:$1|bevakare}}",
"pageinfo-redirects-name": "Antal omdirigeringar till denna sida",
@@ -2805,7 +2833,6 @@
"exif-urgency-low": "Låg ($1)",
"exif-urgency-high": "Hög ($1)",
"exif-urgency-other": "Användardefinierad prioritet ($1)",
- "watchlistall2": "alla",
"namespacesall": "alla",
"monthsall": "alla",
"confirmemail": "Bekräfta e-postadress",
@@ -2896,9 +2923,9 @@
"watchlisttools-edit": "Visa och redigera bevakningslistan",
"watchlisttools-raw": "Redigera bevakningslistan i råformat",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskussion]])",
- "unknown_extension_tag": "Okänd tagg \"$1\"",
"duplicate-defaultsort": "'''Varning:''' Standardsorteringsnyckeln \"$2\" tar över från den tidigare standardsorteringsnyckeln \"$1\".",
"duplicate-displaytitle": "<strong>Varning:</strong> Visningstiteln \"$2\" skriver över den tidigare visningstiteln \"$1\".",
+ "invalid-indicator-name": "<p>Fel:</strong> Sidstatus-indikatorernas <code>namn</code>-attributet får inte vara tomt.",
"version": "Version",
"version-extensions": "Installerade programtillägg",
"version-skins": "Installerade utseenden",
@@ -2913,7 +2940,7 @@
"version-parser-function-hooks": "Parserfunktioner",
"version-hook-name": "Namn på hook",
"version-hook-subscribedby": "Används av",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[inget namn]",
"version-license": "MediaWiki-licens",
"version-ext-license": "Licens",
@@ -2938,6 +2965,9 @@
"version-entrypoints": "Startpunkts-URL:er",
"version-entrypoints-header-entrypoint": "Startpunkt",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Installerade bibliotek",
+ "version-libraries-library": "Bibliotek",
+ "version-libraries-version": "Version",
"redirect": "Omdirigering efter filnamn, användar-ID, sida eller versions-ID",
"redirect-legend": "Omdirigera till en fil eller sida",
"redirect-summary": "Den här specialsidan omdirigerar till en fil (efter filnamn), en sida (efter en versions eller sidas ID) eller en användarsida (efter användar-ID). Användning: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], eller [[{{#Special:Redirect}}/user/101]].",
@@ -2973,6 +3003,7 @@
"specialpages-group-wiki": "Data och verktyg",
"specialpages-group-redirects": "Omdirigerande specialsidor",
"specialpages-group-spam": "Spamverktyg",
+ "specialpages-group-developer": "Utvecklarverktyg",
"blankpage": "Tom sida",
"intentionallyblankpage": "Denna sida har avsiktligen lämnats tom.",
"external_image_whitelist": "#Lämna den här raden precis som den är<pre>\n#Skriv fragment av reguljära uttryck (bara delen som ska vara mellan //) nedan\n#Dessa kommer att jämföras med URL:er för externa bilder\n#De som matchar kommer att visas som bilder, annars visas bara en länk till bilden\n#Rader som börjar med # behandlas som kommentarer\n#Detta är skiftläges-okänsligt\n\n#Skriv alla fragment av reguljära uttryck ovanför den här raden. Lämna den här raden precis som den är</pre>",
@@ -2985,12 +3016,54 @@
"tags-tag": "Märkesnamn",
"tags-display-header": "Utseende på listor över ändringar",
"tags-description-header": "Full beskrivning av betydelse",
+ "tags-source-header": "Källa",
"tags-active-header": "Aktiv?",
"tags-hitcount-header": "Märkta ändringar",
+ "tags-actions-header": "Handlingar",
"tags-active-yes": "Ja",
"tags-active-no": "Nej",
+ "tags-source-extension": "Definieras av ett tillägg",
+ "tags-source-manual": "Används manuellt av användare och robotar",
+ "tags-source-none": "Används inte längre",
"tags-edit": "redigera",
+ "tags-delete": "radera",
+ "tags-activate": "aktivera",
+ "tags-deactivate": "inaktivera",
"tags-hitcount": "$1 {{PLURAL:$1|ändring|ändringar}}",
+ "tags-manage-no-permission": "Du har inte behörighet att hantera förändringstaggar.",
+ "tags-create-heading": "Skapa en ny tag",
+ "tags-create-explanation": "Som standard, kommer nyskapade taggar att bli tillgängliga för användning av användare och botar.",
+ "tags-create-tag-name": "Taggnamn:",
+ "tags-create-reason": "Anledning:",
+ "tags-create-submit": "Skapa",
+ "tags-create-no-name": "Du måste ange ett taggnamn.",
+ "tags-create-invalid-chars": "Taggnamn får inte innehålla kommatecken (<code>,</code>) eller snedstreck (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Taggnamn får inte innehålla tecken som inte kan användas i sidtitlar.",
+ "tags-create-already-exists": "Taggen \"$1\" finns redan.",
+ "tags-create-warnings-above": "Följande {{PLURAL:$2|varning |varningar}} stöttes på när du försöker skapa etiketten \" $1 \":",
+ "tags-create-warnings-below": "Vill du fortsätta att skapa taggen?",
+ "tags-delete-title": "Radera tagg",
+ "tags-delete-explanation-initial": "Du är på väg att ta bort taggen \"$1\" från databasen.",
+ "tags-delete-explanation-in-use": "Den kommer att tas bort från {{PLURAL:$2|$2 sidversioner eller loggposter|alla $2 sidversioner och/eller loggposter}} som den för närvarande används på.",
+ "tags-delete-explanation-warning": "Denna åtgärd är <strong>oåterkallelig</strong> och <strong>kan inte ångras</strong>, inte ens av databasadministratörer. Var säker på att detta är den tagg du vill radera.",
+ "tags-delete-explanation-active": "<strong>Taggen\" $1 \" är fortfarande aktiv, och kommer att fortsätta att appliceras i framtiden.</strong> För att hindra detta, gå till den eller de platser där taggen är inställd att användas, och inaktivera den där.",
+ "tags-delete-reason": "Anledning:",
+ "tags-delete-submit": "Radera denna tagg oåterkalleligen",
+ "tags-delete-not-allowed": "Tagg definierade med ett tillägg kan inte raderas utan att tillägget specifikt tillåter det.",
+ "tags-delete-not-found": "Taggen \"$1\" finns inte.",
+ "tags-delete-too-many-uses": "Taggen \"$1\" appliceras på mer än $2 {{PLURAL:$2|version|versioner}}, vilket innebär att den inte kan raderas.",
+ "tags-delete-warnings-after-delete": "Taggen \"$1\" raderades, men följande {{PLURAL:$2|varning|varningar}} inträffade:",
+ "tags-activate-title": "Aktivera tagg",
+ "tags-activate-question": "Du är på väg att aktivera taggen \"$1\".",
+ "tags-activate-reason": "Anledning:",
+ "tags-activate-not-allowed": "Det är inte möjligt att aktivera taggen \"$1\".",
+ "tags-activate-not-found": "Taggen \"$1\" finns inte.",
+ "tags-activate-submit": "Aktivera",
+ "tags-deactivate-title": "Inaktivera tagg",
+ "tags-deactivate-question": "Du är på väg att inaktivera taggen \"$1\".",
+ "tags-deactivate-reason": "Anledning:",
+ "tags-deactivate-not-allowed": "Det är inte möjligt att inaktivera taggen \"$1\".",
+ "tags-deactivate-submit": "Inaktivera",
"comparepages": "Jämför sidor",
"compare-page1": "Sida 1",
"compare-page2": "Sida 2",
@@ -3002,8 +3075,8 @@
"compare-revision-not-exists": "Versionen du angav finns inte.",
"dberr-problems": "Ursäkta! Denna sajt har just nu tekniska problem.",
"dberr-again": "Pröva med att vänta några minuter och ladda om.",
- "dberr-info": "(Kan inte kontakta databasservern: $1)",
- "dberr-info-hidden": "(Kan inte kontakta databasservern)",
+ "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.",
@@ -3044,6 +3117,14 @@
"revdelete-uname-unhid": "användarnamn synligt",
"revdelete-restricted": "satte begränsningar för administratörer",
"revdelete-unrestricted": "tog bort begränsningar för administratörer",
+ "logentry-block-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} med en varaktighet på $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|upphävde blockeringen för}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningar för {{GENDER:$4|$3}} 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",
+ "logentry-import-interwiki": "$1 {{GENDER:$2|importerade}} $3 från en annan wiki",
+ "logentry-merge-merge": "$1 {{GENDER:$2|slog ihop}} $3 i $4 (versioner t.o.m. $5)",
"logentry-move-move": "$1 {{GENDER:$2|flyttade}} sidan $3 till $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2|flyttade}} sidan $3 till $4 utan att lämna en omdirigering",
"logentry-move-move_redir": "$1 {{GENDER:$2|flyttade}} sidan $3 till $4 över en omdirigering",
@@ -3061,24 +3142,40 @@
"logentry-upload-upload": "$1 {{GENDER:$2|laddade upp}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|laddade upp}} en ny version av $3",
"logentry-upload-revert": "$1 {{GENDER:$2|laddade upp}} $3",
+ "log-name-managetags": "Tagghanterings logg",
+ "log-description-managetags": "Denna sida innehåller administrativa [[Special:Tags|märke]]srelaterade uppgifter. Loggen innehåller bara åtgärder som utförts manuellt av en administratör; märken kan skapas eller raderas av wikins mjukvara utan att en post registreras i loggen.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|skapade}} taggen \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|raderade}} taggen \"$4\" (borttagen från $5 {{PLURAL:$5|version eller loggpost|versioner och/eller loggposter}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|aktiverade}} taggen \"$4\" för användning av användare och botar.",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|inaktiverade}} taggen \"$4\" för användning av användare och botar.",
"rightsnone": "(inga)",
- "feedback-bugornote": "Om du är redo att beskriva ett tekniskt problem detaljerat, var god [$1 rapporterar en bugg].\nAnnars kan du använda det enkla formuläret nedan. Din kommentar kommer att läggas till på sidan \"[$3 $2]\", tillsammans med ditt användarnamn och vilken webbläsare du använder.",
- "feedback-subject": "Ämne:",
- "feedback-message": "Meddelande:",
- "feedback-cancel": "Avbryt",
- "feedback-submit": "Skicka in feedback",
+ "revdelete-summary": "sammanfattning",
"feedback-adding": "Ge feedback till sida...",
+ "feedback-back": "Tillbaka",
+ "feedback-bugcheck": "Jättebra! Bara kontrollera att det inte är en av de [$1 kända buggarna].",
+ "feedback-bugnew": "Jag kontrollerade. Rapportera ett nytt fel",
+ "feedback-bugornote": "Om du har möjlighet att ge en detaljerad teknisk beskrivning av felet kan du lämna en [$1 buggrapport]. \nAnvänd annars formuläret nedan. Din kommentar kommer att läggas till på sidan \"[$3 $2]\", tillsammans med ditt användarnamn.",
+ "feedback-cancel": "Avbryt",
+ "feedback-close": "Färdig",
+ "feedback-external-bug-report-button": "Registrera en teknisk uppgift",
+ "feedback-dialog-title": "Skicka återkoppling",
+ "feedback-dialog-intro": "Du kan använda det enkla formuläret nedan för att skicka in din återkoppling. Din kommentar kommer att läggas till på sidan \"$1\" tillsammans med ditt användarnamn.",
+ "feedback-error-title": "Fel",
"feedback-error1": "Fel: Okänt resultat från API",
"feedback-error2": "Fel: Redigeringen misslyckades",
"feedback-error3": "Fel: Inget svar från API",
+ "feedback-message": "Meddelande:",
+ "feedback-subject": "Ämne:",
+ "feedback-submit": "Skicka",
+ "feedback-terms": "Jag förstår att min användaragentsinformation innehåller information om min webbläsare och operativsystemets version samt kommer att delas offentligt tillsammans med min återkoppling.",
+ "feedback-termsofuse": "Jag samtycker med att ge återkoppling enligt användarvillkoren.",
"feedback-thanks": "Tack! Din feedback har skickats till sidan \"[$2 $1]\".",
- "feedback-close": "Färdig",
- "feedback-bugcheck": "Jättebra! Bara kontrollera att det inte är en av de [$1 kända buggarna].",
- "feedback-bugnew": "Jag kontrollerade. Rapportera ett nytt fel",
+ "feedback-thanks-title": "Tack!",
+ "feedback-useragent": "Användaragent:",
"searchsuggest-search": "Sök",
"searchsuggest-containing": "innehåller...",
"api-error-badaccess-groups": "Du får inte ladda upp filer till denna wiki.",
- "api-error-badtoken": "Internt fel: felaktig token.",
+ "api-error-badtoken": "Internt fel: felaktig nyckel.",
"api-error-copyuploaddisabled": "Uppladdning via URL är inaktiverad på den här servern.",
"api-error-duplicate": "Det finns redan {{PLURAL:$1|[$2 en annan fil]|[$2 andra filer]}} på webbplatsen med samma innehåll.",
"api-error-duplicate-archive": "Det fanns redan {{PLURAL:$1|[$2 en annan fil]|[$2 några andra filer]}} på webbplatsen med samma innehåll, men {{PLURAL:$1|den har|de har}} raderats.",
@@ -3110,6 +3207,13 @@
"api-error-stashfailed": "Internt fel: servern kunde inte lagra temporär fil.",
"api-error-publishfailed": "Internt fel: Servern kunde inte publicera temporär fil.",
"api-error-stasherror": "Ett fel uppstod under uppladdningen av filen till mellanlagringsfilen.",
+ "api-error-stashedfilenotfound": "Den temporära filen kunde inte hittas när den skulle laddas upp från den temporära lagringsytan.",
+ "api-error-stashpathinvalid": "Den sökväg där den temporära filen skulle ha hittats var ogiltig.",
+ "api-error-stashfilestorage": "Ett fel uppstod under lagringen av filen i den temporära lagringsytan.",
+ "api-error-stashzerolength": "Servern kunde inte lagra filen temporärt eftersom den har noll längd.",
+ "api-error-stashnotloggedin": "Du måste vara inloggad för att spara filer till den temporära ytan för uppladdningar.",
+ "api-error-stashwrongowner": "Filen du försöker komma åt i det temporära lagringsutrymmet tillhör inte dig.",
+ "api-error-stashnosuchfilekey": "Filnyckeln som du försökte komma åt i den temporära lagringsytan existerar inte.",
"api-error-timeout": "Servern svarade inte inom förväntad tid.",
"api-error-unclassified": "Ett okänt fel uppstod",
"api-error-unknown-code": "Okänt fel: \"$1\"",
@@ -3154,6 +3258,8 @@
"expand_templates_generate_xml": "Visa parseträd som XML",
"expand_templates_generate_rawhtml": "Visa rå HTML",
"expand_templates_preview": "Förhandsvisning",
+ "expand_templates_preview_fail_html": "<em>Eftersom {{SITENAME}} har rå HTML aktiverat och det uppstod en förlust av sessionsdata har förhandsgranskningen dolts som en försiktighetsåtgärd för att skydda mot JavaScript-attacker.</em>\n\n<strong>Om detta är ett äkta försök att förhandsgranska sidan, vänligen försök igen.</strong>\nOm det fortfarande inte fungerar, försök att [[Special:UserLogout|logga ut]] och sedan logga in igen.",
+ "expand_templates_preview_fail_html_anon": "<em>Eftersom {{SITENAME}} har rå HTML aktiverat och du inte är inloggad har förhandsgranskningen dolts som en försiktighetsåtgärd för att skydda mot JavaScript-attacker.</em>\n\n<strong>Om detta är ett äkta försök att förhandsgranska sidan, vänligen [[Special:UserLogin|logga in]] och försök igen.</strong>",
"pagelanguage": "Sidspråksväljare",
"pagelang-name": "Sida",
"pagelang-language": "Språk",
@@ -3164,8 +3270,58 @@
"log-name-pagelang": "Språkändringslogg",
"log-description-pagelang": "Detta är en logg över ändringar i sidspråken.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|ändrade}} sidspråket för $3 från $4 till $5.",
- "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur dessa aktiveras och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code>skins/</code>-katalogen från den.\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code dir=\"ltr\">skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare.\n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har ändrat i <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
- "default-skin-not-found-no-skins": "Ojsan! Standardutseendet för din wiki, definierad i <code>$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDu har inga installerade utseenden.\n\n; Om du precis installerat eller uppdaterat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. MediaWiki 1.24 och nyare inkluderar inte några utseenden i det huvudsakliga centralförvaret. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code dir=\"ltr\">skins/</code>-katalogen från den.\n* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code>skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur utseenden aktiveras och hur standardutseendet väljs.",
+ "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur du aktiverar dem och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är normalt. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klippa och klistra in <code>skins/</code>-katalogen från den.\n:* Ladda ner individuella tarballs med utseenden från [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code dir=\"ltr\">skins/</code>-arkiven i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. \n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt installerade utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har modifierat <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
+ "default-skin-not-found-no-skins": "Ojsan! Standardutseendet för din wiki, definierad i <code>$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDu har inga installerade utseenden.\n\n; Om du precis installerat eller uppdaterat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. MediaWiki 1.24 och nyare inkluderar inte några utseenden i det huvudsakliga centralförvaret. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code dir=\"ltr\">skins/</code>-katalogen från den.\n:* Ladda ner individuella tarballs med utseende från [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code>skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur utseenden aktiveras och hur standardutseendet väljs.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiverad)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inaktiverad''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inaktiverad''')",
+ "mediastatistics": "Mediastatistik",
+ "mediastatistics-summary": "Statistik om uppladdade filtyper. Detta inkluderar bara den senaste versionen av en fil. Äldre eller raderade filversioner exkluderas.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-typ",
+ "mediastatistics-table-extensions": "Möjliga tillägg",
+ "mediastatistics-table-count": "Antal filer",
+ "mediastatistics-table-totalbytes": "Kombinerad storlek",
+ "mediastatistics-header-unknown": "Okänd",
+ "mediastatistics-header-bitmap": "Bitmap-bilder",
+ "mediastatistics-header-drawing": "Teckningar (vektorbilder)",
+ "mediastatistics-header-audio": "Ljud",
+ "mediastatistics-header-video": "Video",
+ "mediastatistics-header-multimedia": "Rik media",
+ "mediastatistics-header-office": "Dokument",
+ "mediastatistics-header-text": "Text",
+ "mediastatistics-header-executable": "Körbara filer",
+ "mediastatistics-header-archive": "Komprimerade format",
+ "json-warn-trailing-comma": "$1 avslutande {{PLURAL:$1|kommatecken}} togs bort från JSON",
+ "json-error-unknown": "Det var ett problem med JSON. Fel: $1",
+ "json-error-depth": "Listans maximala djup har överskridits",
+ "json-error-state-mismatch": "Ogiltig eller felaktig JSON",
+ "json-error-ctrl-char": "Kontrollteckenfel, möjligen felaktigt kodad",
+ "json-error-syntax": "Syntaxfel",
+ "json-error-utf8": "Felaktiga UTF-8-tecken, möjligen felkodade",
+ "json-error-recursion": "En eller flera rekursiva referenser i värde som ska kodas",
+ "json-error-inf-or-nan": "En eller flera NAN- eller INF-värden i värdet som ska kodas",
+ "json-error-unsupported-type": "Ett värde av en typ som inte kan kodas angavs",
+ "headline-anchor-title": "Länka till detta avsnitt",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Utökad latin",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Symboler",
+ "special-characters-group-greek": "Grekiska",
+ "special-characters-group-cyrillic": "Kyrilliskt",
+ "special-characters-group-arabic": "Arabiska",
+ "special-characters-group-arabicextended": "Arabiska utökade",
+ "special-characters-group-persian": "Persiska",
+ "special-characters-group-hebrew": "Hebreiska",
+ "special-characters-group-bangla": "Bengali",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalesiska",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devenagari",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Laotisk",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "tankstreck",
+ "special-characters-title-emdash": "långt tankstreck",
+ "special-characters-title-minus": "minustecken"
}
diff --git a/languages/i18n/sw.json b/languages/i18n/sw.json
index 04b8a9be..878be697 100644
--- a/languages/i18n/sw.json
+++ b/languages/i18n/sw.json
@@ -14,7 +14,8 @@
"לערי ריינהארט",
"아라",
"Baba Tabita",
- "Rich Farmbrough"
+ "Rich Farmbrough",
+ "Kipala"
]
},
"tog-underline": "Wekea mstari viungo:",
@@ -467,7 +468,6 @@
"passwordreset-emailsent-capture": "Barua pepe ya ukukumbusho imetumwa, ambayo inaonekana hapo chini.",
"passwordreset-emailerror-capture": "Barua pepe ya ukukumbusho imetengenezwa, ambayo inaonekana hapo chini, lakini kuituma kwa mtumiaji imeshindikana: $1",
"changeemail": "Badilisha anwani ya barua pepe",
- "changeemail-header": "Badilisha anwani ya barua pepe ya akaunti yako",
"changeemail-text": "Jaza fomu hii ili kubadilisha anwani yako ya barua pepe. Itabidi uingize neno lako la siri ili kukamilisha badiliko hili.",
"changeemail-no-info": "Lazima uwe umeingia ili kuweza kutumia kurasa hii moja kwa moja.",
"changeemail-oldemail": "Anwani ya barua pepe ya sasa:",
@@ -475,7 +475,6 @@
"changeemail-none": "(hakuna)",
"changeemail-password": "Neno lako la siri kuingia {{SITENAME}}:",
"changeemail-submit": "Badilisha anwani ya barua pepe",
- "changeemail-cancel": "Batilisha",
"bold_sample": "Maandishi ya kooze",
"bold_tip": "Kukoozesha maandishi",
"italic_sample": "Matini ya italiki",
@@ -690,7 +689,6 @@
"mergehistory-same-destination": "Kurasa za chanzo na za mwishilio haziwezi kuwa sawa",
"mergehistory-reason": "Sababu:",
"mergelog": "Kumbukumbu za kuunganisha",
- "pagemerge-logentry": "aliunganisha [[$1]] ndani wa [[$2]] (mapitio hadi $3)",
"revertmerge": "Toa muungano",
"mergelogpagetext": "Hapo chini yanaorodheshwa matukio ya hivi karibuni ya kuunganisha historia za kurasa mbili.",
"history-title": "Historia ya mapitio ya \"$1\"",
@@ -734,7 +732,6 @@
"searchrelated": "zingine zinazofanana",
"searchall": "zote",
"showingresults": "{{PLURAL:$1|Tokeo '''1''' linaonyeshwa|matokeo '''$1''' yanaonyeshwa}} chini, kuanzia na namba '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Tokeo '''$1''' kati ya jumla ya '''$3'''|Matokeo '''$1 - $2''' kati ya jumla ya '''$3'''}} kutokana na kuitafuta '''$4'''",
"search-nonefound": "Hakuna matokeo ya kutafuta ulizio ule.",
"powersearch-legend": "Tafuta kwa hali ya juu",
"powersearch-ns": "Tafuta kwenye maeneo ya wiki yafuatayo:",
@@ -1231,7 +1228,6 @@
"statistics": "Takwimu",
"statistics-header-pages": "Takwimu za kurasa",
"statistics-header-edits": "Takwimu za kuhariri",
- "statistics-header-views": "Onyesha takwimu",
"statistics-header-users": "Takwimu za watumiaji",
"statistics-header-hooks": "Takwimu zingine",
"statistics-articles": "Kurasa zilizopo",
@@ -1240,13 +1236,9 @@
"statistics-files": "Faili zilizopakiwa",
"statistics-edits": "Kurasa zilizohaririwa tangu {{SITENAME}} ilivyoanzishwa",
"statistics-edits-average": "Wastani wa uhariri kwa kurasa",
- "statistics-views-total": "Jumla ya mitazamaji",
- "statistics-views-total-desc": "Tazamo za kurasa zisizokuwepo na kurasa maalumu hazionikani.",
- "statistics-views-peredit": "Mitazamaji kwa haririo",
"statistics-users": "[[Special:ListUsers|Watumiaji]] waliojisajiri",
"statistics-users-active": "Watumiaji wanaofanya kazi",
"statistics-users-active-desc": "Watumiaji waliofanya kazi katika siku {{PLURAL:$1|iliyopita|$1 zilizopita}}",
- "statistics-mostpopular": "Kurasa zinazotazamwa sana",
"pageswithprop-submit": "Nenda",
"doubleredirects": "Maelekezo mawilimawili",
"doubleredirectstext": "Ukurasa huu unaorodhesha kurasa zinazoelekeza kurasa zingine za kuelekeza.\nKatika kila mstari kuna viungo vinavyokwenda katika kurasa za kuelekeza zote mbili, pamoja na ukurasa wa mwishilio mwa elekezo la pili. Ukurasa huu wa mwishilio huwa ni ukurasa unaostahili kuelekezwa kutoka kwa ukurasa wa kuelekeza wa kwanza. Vitu <del>vilivyokatwa kwa mstari</del> vimeshatatuliwa.",
@@ -1278,7 +1270,6 @@
"uncategorizedtemplates": "Vigezo ambavyo havijawekwa katika jamii",
"unusedcategories": "Jamii ambazo hazitumiwi",
"unusedimages": "Mafaili ambayo hayatumiwi",
- "popularpages": "Kurasa zinazopendelewa",
"wantedcategories": "Jamii zinazotakiwa",
"wantedpages": "Kurasa zinazotakiwa",
"wantedpages-badtitle": "Kichwa batili katika seti ya matokeo: $1",
@@ -1323,7 +1314,6 @@
"suppress": "Uangalizi",
"booksources": "Vyanzo vya vitabu",
"booksources-search-legend": "Tafuta mahali panopopatikana kitabu",
- "booksources-go": "Nenda",
"booksources-invalid-isbn": "ISBN iliyoandikwa haonekani kuwa halali; hakikisha kwamba ni sawa na chanzo halisi cha ISBN.",
"specialloguserlabel": "Mtendaji:",
"speciallogtitlelabel": "Kusudio (jina la ukurasa au mtumiaji):",
@@ -1437,7 +1427,7 @@
"wlheader-enotif": "Huduma ya kuarifu kwa barua pepe imewezeshwa.",
"wlheader-showupdated": "Kurasa zilizobadilika tangu ulivyotembelea mara ya mwisho zinaonyeshwa katika hali ya '''kukooza'''",
"wlnote": "{{PLURAL:$1|is the last change|Mabadiliko '''$1''' ya}} mwisho katika {{PLURAL:$2|hour|masaa '''$2''' yaliyopita yanaonyeshwa}} chini, ilivyokuwa saa $4, tarehe $3.",
- "wlshowlast": "Onyesha kutoka masaa $1 siku $2 $3",
+ "wlshowlast": "Onyesha kutoka masaa $1 siku $2",
"watchlist-options": "Hitiari za maangalizi",
"watching": "Unafuatilia...",
"unwatching": "Umeacha kufuatilia...",
@@ -1484,7 +1474,6 @@
"delete-toobig": "Ukurasa huu una historia ya kuhariri ndefu sana, yenye {{PLURAL:$1|badiliko|mabadiliko}} zaidi na $1.\nUfutaji wa kurasa hizi moja kwa moja umezuluiwa ili {{SITENAME}} isivurugwe kwa bahati mbaya.",
"delete-warning-toobig": "Ukurasa huu unao mapitio mengi, zaida ya {{PLURAL:$1|pitio|mapitio}} $1.\nUkiufuta labda itavuruga uendeshaji wa hifadhidata ya {{SITENAME}};\nendelea kwa uangalifu.",
"rollback": "Rejesha masahihisho",
- "rollback_short": "Rejesha",
"rollbacklink": "rejesha",
"rollbackfailed": "Haikufaulu kurejesha",
"cantrollback": "Haiwezekana kujesha sahihisho;\nukurasa huu una mhariri mmoja tu.",
@@ -2073,7 +2062,6 @@
"exif-urgency-low": "Chini ($1)",
"exif-urgency-high": "Juu ($1)",
"exif-urgency-other": "Upaumbele uliotajwa na mtumiaji ($1)",
- "watchlistall2": "zote",
"namespacesall": "zote",
"monthsall": "yote",
"confirmemail": "Kuyakinisha anwani ya barua pepe",
@@ -2150,7 +2138,7 @@
"version-specialpages": "Kurasa maalum",
"version-variables": "Vibadili",
"version-other": "Zingine",
- "version-version": "(Toleo $1)",
+ "version-version": "($1)",
"version-license": "Ruhusa",
"version-ext-colheader-description": "Ufafanuzi",
"version-poweredby-credits": "Wiki hii inaendeshwa na bidhaa pepe ya '''[https://www.mediawiki.org/ MediaWiki]''', hakimiliki © 2001-$1 $2.",
@@ -2244,16 +2232,20 @@
"logentry-newusers-create2": "$1 alianzisha akaunti ya mtumiaji $3",
"logentry-newusers-autocreate": "Akaunti ya mtumiaji $1 ilianzishwa na mashine",
"rightsnone": "(hana)",
- "feedback-subject": "Mada:",
- "feedback-message": "Ujumbe:",
- "feedback-cancel": "Batilisha",
- "feedback-submit": "Tuma maoni yako",
+ "revdelete-summary": "muhtasari wa kuhariri",
"feedback-adding": "Maoni yako yanaongezwa katika ukurasa...",
+ "feedback-back": "Rudi",
+ "feedback-cancel": "Batilisha",
+ "feedback-close": "Tayari",
+ "feedback-error-title": "Kosa",
"feedback-error1": "Hitilafu: Matokeo ya API hayafahamiki",
"feedback-error2": "Hitilafu: Hiririo halikufaulu",
"feedback-error3": "Hitilafu: API ya wiki haiitiki",
+ "feedback-message": "Ujumbe:",
+ "feedback-subject": "Mada:",
+ "feedback-submit": "Wasilisha",
"feedback-thanks": "Ahsante! Maoni yako yamewekwa kwenye ukurasa wa \"[$2 $1]\".",
- "feedback-close": "Tayari",
+ "feedback-thanks-title": "Asante!",
"searchsuggest-search": "Kutafuta",
"searchsuggest-containing": "ya maneno...",
"api-error-empty-file": "Faili ulilowasilisha ni tupu.",
diff --git a/languages/i18n/szl.json b/languages/i18n/szl.json
index 2a0f4948..16a5a19d 100644
--- a/languages/i18n/szl.json
+++ b/languages/i18n/szl.json
@@ -179,8 +179,10 @@
"permalink": "Link do tyj wersyje zajty",
"print": "Drukuj",
"view": "Podglůnd",
+ "view-foreign": "Uobejrzij we {{grammar:MS.lp|$1}}",
"edit": "Sprowjej",
"create": "Stwůrz",
+ "create-local": "Wkludź lokalny uopis",
"editthispage": "Sprowjej ta zajta",
"create-this-page": "Stwůrz ta zajta",
"delete": "Wyćep",
@@ -213,6 +215,7 @@
"otherlanguages": "We inkszych godkach",
"redirectedfrom": "(Punkńyńto ze $1)",
"redirectpagesub": "Zajta przekerowujůnco",
+ "redirectto": "Przekerowańy do:",
"lastmodifiedat": "Ta zajta bůła uostatńo sprowjano $2, $1.",
"viewcount": "W ta zajta filowano {{PLURAL:$1|tylko roz|$1 rozůw}}.",
"protectedpage": "Zajta zawarto",
@@ -452,6 +455,8 @@
"loginlanguagelabel": "Godka: $1",
"suspicious-userlogout": "Polecyńe wylogowańo uostoło uodćepńynte skiż tygo co wyglůnda, aże uostoło posłane bez uszkodzůna przeglůndarka abo buforujůncy serwer proxy.",
"createacct-another-realname-tip": "Wszkryflańy twojigo mjana a nazwiska ńy je końyczne.\nKej bydźesz chćoł je podoć, bydům użyte, coby dokůmyntowoć Twoje autorstwo.",
+ "pt-login": "Zaloguj śe",
+ "pt-createaccount": "Twůrz nowe kůnto",
"php-mail-error-unknown": "Ńyznany feler we funkcyji mail()",
"user-mail-no-addy": "Průba posłańo e‐brifa bez adresu uodbjorcy",
"user-mail-no-body": "Bůła průba posłańo e-brifa uo blank abo krůtkim tekśće.",
@@ -485,14 +490,12 @@
"passwordreset-emailsent-capture": "E-brif posłony, kerego widać niżej.",
"passwordreset-emailerror-capture": "Ńy udoło śe posłać wjadomości lo {{GENDER:$2|używocza|używoczki}}: $1",
"changeemail": "Pomjyno ausdruka e-mail",
- "changeemail-header": "Pomjyno ausduku e-mail",
"changeemail-text": "Wypełnij formularz, podej nowy ausdruk a hasło.",
"changeemail-no-info": "Muśisz być zalogowany, coby uzyskać bezpostrzedńi dostymp do tyj zajty.",
"changeemail-oldemail": "Uobecny ausdruk:",
"changeemail-newemail": "Nowy adresu e-brif",
"changeemail-none": "podstawowo",
"changeemail-submit": "Spamjyntej nowy",
- "changeemail-cancel": "Uodćepej",
"resettokens": "Resetuj tokeny",
"bold_sample": "Ruby tekst",
"bold_tip": "Ruby tekst",
@@ -518,7 +521,7 @@
"preview": "Uobźyrańy",
"showpreview": "Uobźyrej",
"showdiff": "Pozdrzyj na půmjyńańy",
- "anoneditwarning": "Ńy jeżeś terozki zalogowany. We gyszichće sprowjyń tyj zajty bydźe naszkryflůny twůj ausdruk IP.",
+ "anoneditwarning": "<strong>Dej pozůr:</strong> Ńy jeżeś zalogůwany. Twůj IP ausdruk bydźe bez wszyjskich widoczny eli zrobisz egal jako půmjana. Eli <strong>[$1 zalogůjesz śe]</strong> abo <strong>[$2 stworzisz kůnto]</strong>, Twoje půmjany bydům przipisane do kůnta, wroz ze inkszymi korzyśćůma.",
"anonpreviewwarning": "Ńy jeżeś zalogowany. Twój IP ausdruk uostańy spamjyntany, eli ty bydźesz sprowjać zajte.",
"missingsummary": "'''Pozůr:''' Ńy wprowadźůł żeś uopisu pomjyńań. Kej go ńy chcesz wprowadzać, naćiś knefel Spamjyntej jeszcze roz.",
"missingcommenttext": "Wćepej kůmyntorz půńiżyj.",
@@ -693,31 +696,30 @@
"suppressionlog": "Log schrůńyńć",
"suppressionlogtext": "Půńiżyj je lista nojnowszych wyćepań a zawarć s uwzglyndńyńym treśći schrůńůnej lo admińistratorůw. Coby przejrzeć lista teroźnych banůw a zawarć, uobezdrzij [[Special:BlockList|IP block list]].",
"mergehistory": "Połůncz historyjo půmjyńań zajtůw",
- "mergehistory-header": "Ta zajta dozwolo pouůnčyć historyje půmjyńań jydnyj zajty s inkšům, nowšům zajtům. Dej pozůr, coby sprawjyńy douo ćůnguo historyjo půmjyńań zajty w jeji historyji.",
- "mergehistory-box": "Pouůnč historyjo sprowjyń dwůch zajtůw:",
- "mergehistory-from": "Zajta zdřůduowo:",
+ "mergehistory-header": "Ta zajta moze skuplować gyszichta půmjan jednyj zajty ze gyszichtům inkszyj, nowszyj zajty.\nDej pozůr, co půmjany dali bydům mjoły historyczno ćůngłość edycyji zajty.",
+ "mergehistory-box": "Skupluj gyszichta sprowjyń dwůch zajtůw:",
+ "mergehistory-from": "Zdrzůdłowo zajta:",
"mergehistory-into": "Zajta docelowo:",
- "mergehistory-list": "Historyjo půmjyńań idźe pouůnčyć",
- "mergehistory-merge": "Nastympujůnce půmjyńyńo zajty [[:$1]] idźe scalić s [[:$2]]. Uoznač w kolůmńy kropkům kero zmjana, uůnčńy s wčeśńijšymi, mo być scalůno. Užyće cajchůndzkůw uod nawigacyji kasuje wybůr we kolůmńy.",
- "mergehistory-go": "Pokož půmjyńańo kere idźe scalić",
+ "mergehistory-list": "Gyszichta půmjyńań do śe skuplować",
+ "mergehistory-merge": "Nastympujůnce půmjyńyńo zajty [[:$1]] idźe scalić s [[:$2]]. Uoznocz we kolůmńy kropkům kero zmjana, wroz ze wcześńijszymi, mo być scalůno. Użyće linkůw uod nawigacyji kasuje wybůr we kolůmńy.",
+ "mergehistory-go": "Pokoż půmjyńańo kere idźe scalić",
"mergehistory-submit": "Scal historyjo půmjyńań",
- "mergehistory-empty": "Ńy mo historyje zmjan do scalyńa.",
- "mergehistory-success": "$3 {{PLURAL:$3|pomjyńańe|pomjyńańa|pomjyńań}} w [[:$1]] ze sukcesym zostouo scalonych ze [[:$2]].",
- "mergehistory-fail": "Ńy idźe scalić historyje půmjyńań. Zmjyń štalowańo parametrůw tyj uoperacyji.",
- "mergehistory-no-source": "Ńy mo sam zajty zdřůduowyj $1.",
+ "mergehistory-empty": "Ńy mo historyje zmjan do scalyńo.",
+ "mergehistory-success": "$3 {{PLURAL:$3|pomjyńańe|pomjyńańa|pomjyńań}} we [[:$1]] ze sukcesym uostało scalonych ze [[:$2]].",
+ "mergehistory-fail": "Ńy idźe scalić historyje půmjyńań. Zmjyń sztalowańo parametrůw tyj uoperacyji.",
+ "mergehistory-no-source": "Ńy ma sam zajty zdrzůdłowyj $1.",
"mergehistory-no-destination": "Ńy ma sam zajty docelowyj $1.",
- "mergehistory-invalid-source": "Zajta zdřůduowo muśi mjeć poprowne mjano.",
- "mergehistory-invalid-destination": "Zajta docelowo muśi mjeć poprowne mjano.",
- "mergehistory-autocomment": "Historyjo [[:$1]] scalono ze [[:$2]]",
- "mergehistory-comment": "Historyjo [[:$1]] pouůnčůno ze [[:$2]]: $3",
- "mergehistory-same-destination": "Zajta zdřuduowo a docelowo ńy mogům być te same.",
+ "mergehistory-invalid-source": "Zajta zdrzůdłowo muśi mjeć poprawne mjano.",
+ "mergehistory-invalid-destination": "Zajta docelowo muśi mjeć poprawne mjano.",
+ "mergehistory-autocomment": "Historyjo [[:$1]] skuplowano ze [[:$2]]",
+ "mergehistory-comment": "Historyjo [[:$1]] skuplowano ze [[:$2]]: $3",
+ "mergehistory-same-destination": "Zajta zdrzůdłowo a docelowo ńy mogům być te same.",
"mergehistory-reason": "Kůmyntorz:",
- "mergelog": "Pouůnčůne",
- "pagemerge-logentry": "Pouůnčůno [[$1]] ze [[$2]] (historja pomjyńań aže do $3)",
+ "mergelog": "Skuplowane",
"revertmerge": "Uodkupluj",
- "mergelogpagetext": "Půńižej znojduje śe lista uostatńich pouůnčyń historyji půmjyńań zajtůw.",
+ "mergelogpagetext": "Půńiżyj je lista uostatńich kuplowań historyji půmjyńań zajtůw.",
"history-title": "Gyszichta sprowjyń \"$1\"",
- "difference-multipage": "(Porůwnańje zajt)",
+ "difference-multipage": "(Porůwnańy zajt)",
"lineno": "Lińijo $1:",
"compareselectedversions": "zrůwnej uobrane wersyje",
"showhideselectedversions": "Ukoż/ukryj uobrane wersyje",
@@ -726,17 +728,17 @@
"difference-missing-revision": "{{PLURAL:$2|Wersyjo|$2 wersyje|$2 wersyji}} #$1 zajty \"{{PAGENAME}}\" ńy {{PLURAL:$2|uostoła znaleźůno|uostoły znaleźůne|uostoło znaleźůnych}}. Zauobycz je to skiż starygo linky do wyćępanyj zajty. Powůd wyćepańa nojdźesz we [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejerze].",
"searchresults": "Wyńiki sznupańo",
"searchresults-title": "Wyniki sznupańo za „$1”",
- "titlematches": "Znejdźono we titlach:",
+ "titlematches": "Znolyźono we titlach:",
"textmatches": "Znejdźono na zajtach:",
"notextmatches": "Ńy znejdźono we tekście zajtůw",
"prevn": "poprzedńe {{PLURAL:$1|$1}}",
- "nextn": "nastympne {{PLURAL:$1|$1}}",
+ "nextn": "nostympne {{PLURAL:$1|$1}}",
"prevn-title": "{{PLURAL:$1|Poprzedńi|Poprzedńe}} $1 {{PLURAL:$1|wyńik|wyńiki|wyńikůw}}",
- "nextn-title": "{{PLURAL:$1|Dolszy|Dolsze|Dolszych}} $1 {{PLURAL:$1|wyńik|wyńiki|wyńikůw}}",
+ "nextn-title": "{{PLURAL:$1|Dalszy|Dalsze|Dalszych}} $1 {{PLURAL:$1|wyńik|wyńiki|wyńikůw}}",
"shown-title": "Ukoż $1 {{PLURAL:$1|wynik|wyniki|wynikůw}} lo zajta",
"viewprevnext": "Uobźyrej ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''Ńy ma zajty uo mjańy \"[[:$1]]\" na tyj wiki'''",
- "searchmenu-new": "'''Stwůrz zajta „[[:$1|$1]]” na tyj wiki!'''",
+ "searchmenu-new": "<strong>Stwůrz zajta „[[:$1]]” na tyj wiki!</strong> {{PLURAL:$2|0=|Uobejrzij tyż zajta ze wyńikůma sznupańo.|Uobejrzij tyż wyńiki sznupańo.}}",
"searchprofile-articles": "Zajty",
"searchprofile-images": "Multimedyja",
"searchprofile-everything": "Wszyjsko",
@@ -750,14 +752,13 @@
"search-redirect": "(půnkńyńćy $1)",
"search-section": "(tajla $1)",
"search-suggest": "Myśloł żeś: $1 ?",
- "search-interwiki-caption": "Śostřane projekty",
+ "search-interwiki-caption": "Śostrzane projekty",
"search-interwiki-default": "$1 wyńiki:",
"search-interwiki-more": "(wjyncyj)",
"search-relatedarticle": "Podane",
"searchrelated": "podane",
"searchall": "wszyjske",
- "showingresults": "To lista na keryj je {{PLURAL:$1|'''1''' wyńik|'''$1''' wyńikůw}}, počynojůnc uod nůmeru '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Wyńik '''$1''' z '''$3'''|Wyńiki '''$1 – $2''' z '''$3'''}} lo '''$4'''",
+ "showingresults": "To lista na keryj je {{PLURAL:$1|'''1''' wyńik|'''$1''' wyńikůw}}, sztartujůnc uod nůmery '''$2'''.",
"search-nonefound": "Ńy mo wynikůw, kere uodpadajům kryterjům zapytańo.",
"powersearch-legend": "Sznupańy zaawansowane",
"powersearch-ns": "Sznupej we przestrzyńach mjan:",
@@ -765,7 +766,7 @@
"powersearch-toggleall": "Wszyjsko",
"powersearch-togglenone": "żodno",
"search-external": "Zewnyntrzne sznupańy",
- "searchdisabled": "Šnupańy we {{GRAMMAR:MS.lp|{{SITENAME}}}} zostouo zawarte. Zańim go zouůnčům, možeš sprůbować šnupańo bez Google. Ino zauwaž, co informacyje uo treśći {{GRAMMAR:MS.lp|{{SITENAME}}}} můgům być we Google ńyakuratne.",
+ "searchdisabled": "Sznupańy we {{GRAMMAR:MS.lp|{{SITENAME}}}} uostoło zawarte. Ńim go uotworzům nazod, moges sprůbować sznupańo bez Google. Ino zauważ, co informacyje uo treśći {{GRAMMAR:MS.lp|{{SITENAME}}}} můgům być we Google ńyaktuelne.",
"search-error": "Wystůmpjůł feler przi sznupańu: $1",
"preferences": "Preferyncyje",
"mypreferences": "Preferyncyje",
@@ -775,12 +776,12 @@
"datedefault": "Důmyślny",
"prefs-labs": "Funkcyje \"labs\"",
"prefs-user-pages": "Zajty używaczy",
- "prefs-personal": "Dane užytkowńika",
+ "prefs-personal": "Dane używocza",
"prefs-rc": "Ńydowno pomjyńane",
"prefs-watchlist": "Pozůrlista",
- "prefs-watchlist-days": "Ličba dńi widočnych na liśće artikli, na kere dowoš pozůr:",
+ "prefs-watchlist-days": "Liczba dńůw widocznych na liśće artikli, na kere dowosz pozůr:",
"prefs-watchlist-days-max": "Max $1 {{PLURAL:$1|dźyń|dńi}}",
- "prefs-watchlist-edits": "Ličba půmjyńań pokazywanych we rozšyřůnyj liśće artiklůw, na kere dowoš pozůr:",
+ "prefs-watchlist-edits": "Liczba půmjyńań pokozywanych we rozszyrzůnyj liśće artiklůw, na kere dowosz pozůr:",
"prefs-watchlist-edits-max": "Maksymalno liczba: 1000",
"prefs-watchlist-token": "ID pozůrlisty:",
"prefs-misc": "Roztůmajte",
@@ -795,13 +796,13 @@
"rows": "Wjyrsze:",
"columns": "Kolůmny:",
"searchresultshead": "Sznupańy",
- "stub-threshold": "Maksymalny rozmjar artikla uoznačanygo kej <a href=\"#\" class=\"stub\">stub (kůnsek)</a>",
+ "stub-threshold": "Maksymalny rozmjar artikla uoznaczanygo kej <a href=\"#\" class=\"stub\">stub (kůnsek)</a>",
"stub-threshold-disabled": "Uodymkńynte",
- "recentchangesdays": "Ličba dńi do pokazańo we půmjyńanych na uostatku:",
+ "recentchangesdays": "Liczba dńůw do pokazańo we půmjyńanych na uostatku:",
"recentchangesdays-max": "(maksymalńy $1 {{PLURAL:$1|dźyń|dńi}})",
"recentchangescount": "Liczba pozycyji na liśće půmjyńanych na uostatku, we historyje zajtůw a zajtach rejerůw:",
"prefs-help-recentchangescount": "Ze listům ńydawnych pomjyńan, gyszichta zajt a rejer.",
- "savedprefs": "Twoje štalowańo we preferyncyjach zostouy naškryflane.",
+ "savedprefs": "Twoje sztalowańo we preferyncyjach zostoły naszkryflane.",
"timezonelegend": "Czasowo sztrefa",
"localtime": "Lokalny czas:",
"timezoneuseserverdefault": "Użyj domyślnygo czasu serwera ($1)",
@@ -856,8 +857,8 @@
"userrights-nodatabase": "Baza danych $1 ńy istńije abo ńy je lokalno.",
"userrights-nologin": "Muśisz [[Special:UserLogin|zalůgować śe]] na kůnto admińistratora, coby nadować uprawńyńo użytkowńikům.",
"userrights-notallowed": "Ńy mosz dostympu do nadawańo uprawńyń używaczom.",
- "userrights-changeable-col": "Grupy, kere možeš wybrać",
- "userrights-unchangeable-col": "Grupy, kerych ńy možeš wybrać",
+ "userrights-changeable-col": "Grupy, kere moges wybrać",
+ "userrights-unchangeable-col": "Grupy, kerych ńy moges wybrać",
"group": "Grupa:",
"group-user": "Używacze",
"group-autoconfirmed": "Autůmatyczńy zatwjerdzůne używacze",
@@ -882,23 +883,23 @@
"right-edit": "Sprowjej zajty",
"right-createpage": "Utworzůne zajty (kere ńy sům zajtůma godki)",
"right-createtalk": "Utworzůne zajty godki",
- "right-createaccount": "Utwořůne nowe kůnta užytkowńikůw",
+ "right-createaccount": "Utworzůne nowe kůnta użytkowńikůw",
"right-minoredit": "Uoznocz půmjyńańo kej drobne",
"right-move": "Przećepane zajty",
"right-move-subpages": "Przećep zajty wroz ze jejich podzajtůma",
"right-move-rootuserpages": "Przekludzańy zajtůw uod użytkowńikůw",
- "right-movefile": "Przećepańe plikůw",
+ "right-movefile": "Przećepowańy plikůw",
"right-suppressredirect": "Ńy twůrz przekerowańo ze starygo mjana jak przećepujesz zajta",
"right-upload": "Wćepane pliki",
- "right-reupload": "Nadpisuj pliki kere sam juž sům wćepane",
- "right-reupload-own": "Nadpisuj plik wćepany sam bez tygo somygo užytkowńika",
- "right-reupload-shared": "Nadpisuj pliki ůmješčůne w repozytorjům dźelůnych plikůw na lokalnyj kopje",
+ "right-reupload": "Nadpisuj pliki kere sam już sům wćepane",
+ "right-reupload-own": "Nadpisuj plik wćepany sam bez tygo samygo użytkowńika",
+ "right-reupload-shared": "Nadpisuj pliki umjeszczůne we repozytorjům dźelůnych plikůw na lokalnyj kopje",
"right-upload_by_url": "Wćepńij sam plik ze adresa URL",
- "right-purge": "Wyčyść pamjyńć podrynčno do zajty za wyjůntkym zajty potwjerdzyńo",
+ "right-purge": "Wyczyść pamjyńć podrynczno do zajty za wyjůntkym zajty potwjerdzyńo",
"right-autoconfirmed": "Sprowjej zajty zawarte lo ńyzalůgowanych",
- "right-bot": "Traktuj kej proces autůmatyčny",
- "right-nominornewtalk": "Wyuůnčyńy uopcyje powjadamjańo uo drobnych půmjyńańach na zajće godki",
- "right-apihighlimits": "Užywej uograńičyń wjelgości we zapytańach do API",
+ "right-bot": "Traktuj kej proces autůmatyczny",
+ "right-nominornewtalk": "Wyłůnczyńy uopcyje powjadamjańo uo drobnych půmjyńańach na zajće godki",
+ "right-apihighlimits": "Używej uograńiczyń wjelgości we zapytańach do API",
"right-writeapi": "Zapisuj bez interfejs API",
"right-delete": "Wyćep zajty",
"right-bigdelete": "Wyćep zajty s dugům historyjům půmjyńań",
@@ -907,24 +908,24 @@
"right-browsearchive": "Sznupej za wyćepanymi zajtůma",
"right-undelete": "Wćepej nazod wyćepano zajta",
"right-suppressrevision": "Přyglůndańy i uodtwařańy sprowjyń schrůńůnych před admińistratorami",
- "right-suppressionlog": "Pokož prywatne lůgi",
- "right-block": "Zawjyrańy sprowjorzům możebnośći edytowańo",
- "right-blockemail": "Zablokuj užytkowńikowi wysyuańy e-brifůw",
+ "right-suppressionlog": "Pokoż prywatne lůgi",
+ "right-block": "Zawjyrańy sprowjorzům mogebnośći edytowańo",
+ "right-blockemail": "Zablokuj użytkowńikowi posyłańy e-brifůw",
"right-hideuser": "Zablokuj mjano użytkowńika i schrůń to przed publicznym dostympym",
"right-ipblock-exempt": "Uobejdź zawarća uod sprowjyń do IP, autozawarća i zawarća zakresůw",
- "right-proxyunbannable": "Uobejdź autůmatyčne zawarća uod sprowjyń do proxy",
+ "right-proxyunbannable": "Uobejdź autůmatyczne zawarća uod sprowjyń do proxy",
"right-protect": "Zmjyń poźůmy zawarć i sprowjej zawarte zajty",
"right-editprotected": "Sprowjej zawarte zajty (ze zawarćym kaskadowym)",
- "right-editinterface": "Sprowjej interfejs užytkowńika",
- "right-editusercssjs": "Sprowjej pliki CSS i JS inkšych užytkowńikůw",
- "right-editusercss": "Sprowjej pliki CSS inkšych užytkowńikůw",
+ "right-editinterface": "Sprowjej interfejs użytkowńika",
+ "right-editusercssjs": "Sprowjej pliki CSS i JS inkszych użytkowńikůw",
+ "right-editusercss": "Sprowjej pliki CSS inkszych użytkowńikůw",
"right-edituserjs": "Sprowjej pliki JS inkšych užytkowńikůw",
- "right-rollback": "Rewert drap sprawjyńo uostatńygo užytkowńika kery sprawjou dano zajta",
- "right-markbotedits": "Uoznoč rewertowane sprawjyńo kej sprawjyńo botůw",
+ "right-rollback": "Rewert drap sprawjyńo uostatńygo użytkowńika kery sprowjoł dano zajta",
+ "right-markbotedits": "Uoznocz rewertowane sprawjyńo kej sprawjyńo botůw",
"right-noratelimit": "Ńy mo uograńičyń přepustowośći",
"right-import": "Import zajtůw s inkšych Wiki",
"right-importupload": "Import zajtůw ze wćepanygo plika",
- "right-patrol": "Uoznoč sprowjyńo kej přezdřane",
+ "right-patrol": "Uoznocz sprowjyńo kej przezdrzane",
"right-autopatrol": "Naštaluj na autůmatyčne uoznačańy sprowjyń kej přezdřane",
"right-patrolmarks": "Podglůnd značnikůw patrolowańo pomjeńanych na uostatku – uoznačańo kej „sprawdzůne”",
"right-unwatchedpages": "Pokož lista zajtůw na kere žodyn ńy dowo pozoru",
@@ -934,12 +935,12 @@
"right-siteadmin": "Zawjerańy i uodmykańy bazy danych",
"newuserlogpage": "Nowe użytkowniki",
"newuserlogpagetext": "To je rejer uostatńo utworzůnych kůnt użytkowńikůw",
- "rightslog": "Uprawńyńa",
+ "rightslog": "Uprawńyńo",
"rightslogtext": "Rejer půmjyńań uprawńyń užytkowńikůw.",
"action-read": "přeglůndańo tyj zajty",
"action-edit": "sprowjańo tyj zajty",
- "action-createpage": "twořyńo zajtůw",
- "action-createtalk": "twořyńo zajtůw godki",
+ "action-createpage": "tworzyńo zajtůw",
+ "action-createtalk": "tworzyńo zajtůw godki",
"action-createaccount": "utwořyńo tygo kůnta užytkowńika",
"action-minoredit": "do uoznačyńo tygo sprowjyńo kej drobne půmjyńańe",
"action-move": "přećepańe tyj zajty",
@@ -966,10 +967,11 @@
"action-autopatrol": "uoznačyńo wuasnygo sprowjyńo kej „sprawdzonygo”",
"action-unwatchedpages": "podglůndu listy zajtůw na kere ńikt ńy dowo pozoru",
"action-mergehistory": "skuplowańo historyje sprowjyń tyj zajty",
- "action-userrights": "sprowjańo uprowńyń wšyjstkich sprowjořy",
+ "action-userrights": "sprowjańo uprowńyń wszyjstkich sprowjorzy",
"action-userrights-interwiki": "sprowjańo uprowńyń sprowjořy na inkšych witrynach wiki",
"action-siteadmin": "zawarćo a uodymkńyńćo bazy danych",
"nchanges": "$1 {{PLURAL:$1|pomjyńańe|pomjyńańa|pomjyńań}}",
+ "enhancedrc-history": "gyszichta",
"recentchanges": "Ńydowno půmjyńane",
"recentchanges-legend": "Uopcyje ńydowno půmjyńanych",
"recentchanges-summary": "Ta zajta ukozuje gyszichta uostatńich půmjyńań na tyj wiki.",
@@ -978,14 +980,22 @@
"recentchanges-label-minor": "To je ńywjelge sprowjyńy",
"recentchanges-label-bot": "To sprowjyńy bůło zrobjůne uod bota",
"recentchanges-label-unpatrolled": "To sprowjyńy ńy bůło jeszcze uowjerzůne",
+ "recentchanges-label-plusminus": "Půmjyńono mjara zajty we bajtach",
+ "recentchanges-legend-heading": "'''Legynda:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uobejrzij tyż [[Special:NewPages|lista nowych zajt]])",
"rcnotefrom": "Půńiżej pokazano půmjyńańo zrobjůne pů <b>$2</b> (ńy wjyncyj kej <b>$1</b> pozycji).",
"rclistfrom": "Ukoż půmjyńańa uod $3 $2",
"rcshowhideminor": "$1 drobne půmjyńańa",
+ "rcshowhideminor-hide": "Schrůń",
"rcshowhidebots": "$1 boty",
+ "rcshowhidebots-show": "Pokoż",
"rcshowhideliu": "$1 zaregisztrowanych",
+ "rcshowhideliu-hide": "Schrůń",
"rcshowhideanons": "$1 anůńimowych",
+ "rcshowhideanons-hide": "Schrůń",
"rcshowhidepatr": "$1 uowjerzůne",
"rcshowhidemine": "$1 uody mje sprowjůne",
+ "rcshowhidemine-hide": "Schrůń",
"rclinks": "Ukoż uostatńe $1 sprowjyń bez uostatńe $2 dńi.<br />$3",
"diff": "zmj.",
"hist": "gysz.",
@@ -997,6 +1007,7 @@
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|dowajůncy pozůr užytkowńik|dowajůncych pozůr užytkowńikůw}}]",
"rc_categories": "Uůgrańič do katygorii (oddźelej za půmocům \"|\")",
"rc_categories_any": "Wšyskie",
+ "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajty|bajtůw}} po půmjyńyńu",
"newsectionsummary": "/* $1 */ nowo tajla",
"rc-enhanced-expand": "Pokoż szczygůły",
"rc-enhanced-hide": "Schrůń detajle",
@@ -1020,7 +1031,7 @@
"upload-preferred": "Zalecane formaty plikůw: $1.",
"upload-prohibited": "Zakozane formaty plikůw: $1.",
"uploadlogpage": "Wćepane sam",
- "uploadlogpagetext": "Půńižej znojdowo śe lista plikůw wćepanych na uostatku.\nPřelyź na zajta [[Special:NewFiles|galeryje nowych plikůw]], coby uobejzdřeć pliki kej mińjatůrki.",
+ "uploadlogpagetext": "Půńiżyj jee lista plikůw wćepanych na uostatku.\nPrzelyź na zajta [[Special:NewFiles|galeryje nowych plikůw]], coby uobejzdrzeć pliki kej mińatůrki.",
"filename": "Mjano pliku",
"filedesc": "Popis",
"fileuploadsummary": "Uopis:",
@@ -1063,7 +1074,7 @@
"upload-maxfilesize": "Maksymalny rozmior plika: $1",
"watchthisupload": "Dowej pozůr na ta zajta",
"filewasdeleted": "Plik uo takym mjańy juž bůu sam wćepany, ale zostou wyćepńjynty. Ńim wćepńeš go zaś, sprowdź $1.",
- "filename-bad-prefix": "Mjano plika, kery wćepuješ, začyno śe uod '''\"$1\"''' &ndash; je to mjano nojčynśćy připisywane autůmatyčńy bez cyfrowe fotoaparaty, uůno ńy dowo žodnych informacyji uo zawartośći plika. Prošymy cobyś nadou plikowi inkše, lepij zrozůmjaue mjano.",
+ "filename-bad-prefix": "Mjano plika, kery wćepujesz, zaczyno śe uod '''\"$1\"''' &ndash; je to mjano nojczynśćy przipisywane autůmatyczńy bez cyfrowe fotoaparaty, a ńy dowo uůno żodnych informacyji uo zawartośći plika. Proszymy cobyś nadoł plikowi inksze, lepij zrozůmjałe mjano.",
"upload-success-subj": "Wćepańe plika udouo śe",
"upload-proto-error": "Ńyprowidłowy protokůł",
"upload-proto-error-text": "Zdalne přesůuańy plikůw wymago podańo adresu URL kery začyno śe na <code>http://</code> abo <code>ftp://</code>.",
@@ -1107,13 +1118,14 @@
"filehist-comment": "Komyntorz",
"imagelinks": "Używańy pliku",
"linkstoimage": "{{PLURAL:$1|Tako zajta linkuje|Take zajty linkujům}} do tygo plika:",
- "linkstoimage-more": "Wjyncyj jak $1 {{PLURAL:$1|zajta je adresowano|zajty sům adresowane|zajtůw je adresowanych}} do tygo plika.\nPůńižšo lista pokozuje yno {{PLURAL:$1|pjyršy link|pjyrše $1 linki|pjyršych $1 linkůw}} do tygo plika.\nDostympno je tyž [[Special:WhatLinksHere/$2|pouno lista]].",
+ "linkstoimage-more": "Wjyncyj jak $1 {{PLURAL:$1|zajta je adresowano|zajty sům adresowane|zajtůw je adresowanych}} do tygo plika.\nPůńiższo lista pokozuje ino {{PLURAL:$1|pjyrszy link|pjyrsze $1 linki|pjyrszych $1 linkůw}} do tygo plika.\nDostympno je tyż [[Special:WhatLinksHere/$2|połno lista]].",
"nolinkstoimage": "Žodno zajta ńy je adrésowano do tygo plika.",
"morelinkstoimage": "Pokož [[Special:WhatLinksHere/$1|wjyncy uodnośnikůw]] do tygo plika.",
"duplicatesoffile": "{{PLURAL:$1|Nastympujůncy plik je kopjům|Nastympujůnce pliki sům kopjůma}} tygo plika:",
"sharedupload": "Tyn plik je wćepńynty na $1 a inksze projekty tyż go mogům używać.",
"sharedupload-desc-here": "Tyn plik śe nałoźi na $1 a idzie go użyć we inkszych projektach.\nNiżyj sům informacyje ze [$2 zajty popisu] tygo pliku.",
"uploadnewversion-linktext": "Wćepńij nowšo wersyjo tygo plika",
+ "upload-disallowed-here": "Ńy moges nadpisać tygo plika.",
"filerevert": "Přiwracańy $1",
"filerevert-legend": "Přiwracańy poprzedńy wersje plika",
"filerevert-intro": "Zamjeřoš přiwrůćić '''[[Media:$1|$1]]''' do wersje z [$4 $3, $2].",
@@ -1152,7 +1164,6 @@
"statistics": "Sztatystyka",
"statistics-header-pages": "Statystyka zajtůw",
"statistics-header-edits": "Statystyka sprowjyń",
- "statistics-header-views": "Statystyka bezuchůw",
"statistics-header-users": "Statystyka užytkowńikůw",
"statistics-articles": "Zajty",
"statistics-pages": "Zajty",
@@ -1160,12 +1171,9 @@
"statistics-files": "Wćepane pliki",
"statistics-edits": "Sprowjyńa wykůnane uod powstańo {{grammar:D.lp|{{SITENAME}}}}",
"statistics-edits-average": "Strzedńo liczba sprowjyń na zajta",
- "statistics-views-total": "Cołkowito liczba bezuchůw",
- "statistics-views-peredit": "Liczba bezuchůw na sprowjyńy",
"statistics-users": "Zarejerowanych [[Special:ListUsers|użytkowńikůw]]",
"statistics-users-active": "Aktywnych użytkowńikůw",
"statistics-users-active-desc": "Użytkowńiki, kere bůły aktywne bez {{PLURAL:$1|uostatńi dźyń|uostatńich $1 dńi}}",
- "statistics-mostpopular": "Zajty we kere nojčyńśći sam filujom",
"doubleredirects": "Podwůjne překierowańa",
"doubleredirectstext": "Na tyi liśće mogům znojdować śe překerowańo pozorne. Uoznača to, aže půńižej pjyrwšej lińii artikla, zawjerajůncyj \"#REDIRECT ...\", može znojdować śe dodotkowy tekst. Koždy wjerš listy zawjero uodwouańo do pjyrwšygo i drůgygo překerowańo a pjyrwšom lińjům tekstu drůgygo překerowańo. Uůmožliwjo to na ogůu uodnaleźyńy wuaśćiwygo artikla, do kerygo powinno śe překerowywać.",
"double-redirect-fixed-move": "zajta [[$1]] zostoła zastůmpjůno bez przekerowańy, skiż jeij przekludzyńo ku [[$2]]",
@@ -1194,7 +1202,6 @@
"uncategorizedtemplates": "Mustry bez kategorii",
"unusedcategories": "Ńyużywane kategoryje",
"unusedimages": "Ńyużywane pliki",
- "popularpages": "Zajty we kere nojczynśćij sam filujům",
"wantedcategories": "Potrzebne katygoryje",
"wantedpages": "Nojpotrzebńijsze zajty",
"wantedfiles": "Potrzebne pliki",
@@ -1236,7 +1243,6 @@
"suppress": "Oversight",
"booksources": "Kśůnžki",
"booksources-search-legend": "Sznupej za zdrzůdłůma kśůnżkowymi",
- "booksources-go": "Pokoż",
"booksources-text": "Půńiżyj je lista uodnośńikůw do inkszych witryn, kere pośredńiczům we sprzedaży nowych a używanych buchůw, a tyż můgům mjeć dolsze informacyje uo poszukiwanym bez ćebje buchu.",
"booksources-invalid-isbn": "Podany numer ISBN zostoł rozpoznany kej felerny. Sprowdź aże podany numer je zgodny s numerym kery je we zdrzůdle.",
"specialloguserlabel": "Užytkowńik:",
@@ -1255,7 +1261,7 @@
"allinnamespace": "Wszyjstke zajty (we przestrzyńi mjan $1)",
"allpagessubmit": "Ukoż",
"allpagesprefix": "Ukoż artikle s prefiksym:",
- "allpagesbadtitle": "Podane mjano je felerne, zawjera prefiks mjyndzyprojektowy abo mjyndzyjynzykowy. Może uůne tyż zawjerać jako buchsztaba abo inksze znaki, kerych ńy wolno używać we mjanach.",
+ "allpagesbadtitle": "Podane mjano je felerne, zawjyro prefiks mjyndzyprojektowy abo mjyndzygodkow. Może uůne tyż zawjerać jako buchsztaba abo inksze znaki, kerych ńy wolno używać we mjanach.",
"allpages-bad-ns": "{{GRAMMAR:MS.lp|{{SITENAME}}}} ńy mo przestrzyńi mjan „$1”.",
"allpages-hide-redirects": "Ukoż pukńyńća",
"categories": "Kategoryje",
@@ -1332,7 +1338,7 @@
"wlheader-enotif": "Wysůuańy powjadůmjyń na adres e-brif je zouůnčůne",
"wlheader-showupdated": "Zajty, kere bouy sprowjane uod Twoi uostatńi wizyty na ńych zostoy naškryflane '''tuustym'''",
"wlnote": "Půńižy pokazano {{PLURAL:$1|ostatńy sprawjyńy dokůnane|ostatńy '''$1''' sprawjyńe dokůnane|ostatńych '''$1''' sprawjyń dokůnanych}} bez {{PLURAL:$2|uostatńo godźina|uostatńich '''$2''' godźin}}.",
- "wlshowlast": "Pokož uostatńy $1 godźin $2 dńi ($3)",
+ "wlshowlast": "Pokož uostatńy $1 godźin $2 dńi ()",
"watchlist-options": "Uopcyje artikli na kere dowosz pozůr",
"watching": "Dowom pozor...",
"unwatching": "Njy dowom pozoru...",
@@ -1368,10 +1374,9 @@
"delete-toobig": "Ta zajta mo fest dugo historyja sprowjyń, wjyncyj jak $1 {{PLURAL:$1|půmjyńańy|půmjyńańo|půmjyńań}}.\nJeij wyćepańy mogło by spowodować zakłucyńo we dźołańu {{GRAMMAR:D.lp|{{SITENAME}}}} a bez tůż zostało uograńiczůne.",
"delete-warning-toobig": "Ta zajta mo fest dugo historia sprowjyń, wjyncy kej $1 {{PLURAL:$1|půmjyńeńe|půmjyńańo|půmjyńań}}.\nDej pozůr, bo jei wyćepańe może spowodować zakłůcyńo w pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.",
"rollback": "Wycofej sprowjyńe",
- "rollback_short": "Cofej",
"rollbacklink": "cofej",
"rollbackfailed": "Ńy idźe wycofać sprowjyńo",
- "cantrollback": "Ńy idże cofnůńć pomjyńeńo, sam je ino jedna wersyja tyi zajty.",
+ "cantrollback": "Ńy idże cofnůńć pomjyńyńo, sam je ino jedna wersyja tyi zajty.",
"alreadyrolled": "Ńy idźe lů zajty [[:$1|$1]] cofnůńć uostatńygo pomjyńeńa, kere wykonoł [[User:$2|$2]] ([[User talk:$2|godka]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]).\nKto inkszy zdůnżůł już to zrobić abo wprowadźił własne poprowki do treśći zajty.\n\nAutorym ostatńygo pomjyńyńo je terozki [[User:$3|$3]] ([[User talk:$3|godka]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"editcomment": "Sprowjyńe uopisano: „''$1''”.",
"revertpage": "Wycofano sprowjyńe użytkowńika [[Special:Contributions/$2|$2]] ([[User talk:$2|godka]]). Autor prziwrůcůnej wersyji to [[User:$1|$1]].",
@@ -1463,6 +1468,9 @@
"undelete-show-file-submit": "Ja",
"namespace": "Raum mjan:",
"invert": "Wybjer na uopy",
+ "tooltip-invert": "Uoznacz te pole, coby ukryć půmjany na zajtach we uobranych raumach mjan (a powjůnzanych ze ńimi inkszymi raumami mjan, eli uoznaczůno)",
+ "namespace_association": "powjůnzany raum mjan",
+ "tooltip-namespace_association": "Uoznacz te pole, coby uwzglyndńić zajty dyskusyji i tyjmy powjůnzane ze uobranymi raumami mjan",
"blanknamespace": "(przodńo)",
"contributions": "Ajnzac {{GENDER:$1|używocza|używoczki}}",
"contributions-title": "Wkłod użytkowńika $1",
@@ -1653,7 +1661,6 @@
"import": "Importuj zajty",
"importinterwiki": "Import transwiki",
"import-interwiki-text": "Wybjer wiki i nmjano zajty do importowańo.\nDaty a tyž mjana autorůw bydům zachowane.\nWšyjstke uoperacyje importu transwiki sům uodnotowywane w [[Special:Log/import|rejeře importu]].",
- "import-interwiki-source": "Zdrzůdło wiki/zajty:",
"import-interwiki-history": "Kopjuj couko historja sprowjyń tyi zajty",
"import-interwiki-submit": "Importuj",
"import-interwiki-namespace": "Docelowo przestrzyń mjan:",
@@ -1687,14 +1694,15 @@
"import-logentry-interwiki": "zaimportowou $1 užywajůnc transwiki",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|wersyja|wersyje|wersyji}} ze $2",
"tooltip-pt-userpage": "Mojo perzůnalno zajta",
- "tooltip-pt-anonuserpage": "Zajta užytkowńika do adresu IP spod kerygo sprowjoš",
+ "tooltip-pt-anonuserpage": "Zajta użytkowńika do adresu IP spod kerygo sprowjosz",
"tooltip-pt-mytalk": "Mojo zajta dyskusyje",
- "tooltip-pt-anontalk": "Godka užytkowńika do adresu IP spod kerygo sprowjoš",
+ "tooltip-pt-anontalk": "Godka użytkowńika do adresu IP spod kerygo sprowjosz",
"tooltip-pt-preferences": "Moje preferyncyje",
"tooltip-pt-watchlist": "Lista artiklůw, na kere dowosz pozůr",
"tooltip-pt-mycontris": "Lista uody mje sprowjonych",
"tooltip-pt-login": "Chćeli by my, cobyś śe nalogowoł, nale to ńy je powinne",
"tooltip-pt-logout": "Uodloguj śe ze wiki",
+ "tooltip-pt-createaccount": "Namawjůmy do stworzyńo kůnta a zalogůwańo śa, atoli niy je to uobowjůnzkowe",
"tooltip-ca-talk": "Dyskusyjo uo tym artiklu",
"tooltip-ca-edit": "Mogesz sprowjać ta zajta. Podwjela spamjyntosz půmjyńańo, klikńij we knefel \"Uobźyrej\".",
"tooltip-ca-addsection": "Przidej nowy temat",
@@ -1702,7 +1710,7 @@
"tooltip-ca-history": "Storsze wersyje tyj zajty",
"tooltip-ca-protect": "Zawřij ta zajta",
"tooltip-ca-delete": "Wyćep ta zajta",
- "tooltip-ca-undelete": "Přiwrůć wersyja tyi zajty spřed wyćepańo",
+ "tooltip-ca-undelete": "Prziwrůć wersyjo tyj zajty sprzed wyćepańo",
"tooltip-ca-move": "Przećep ta zajta kaj indzij.",
"tooltip-ca-watch": "Przidej artikel na pozůrlista",
"tooltip-ca-unwatch": "Wyciep tyn artikel ze pozůrlisty",
@@ -1730,14 +1738,14 @@
"tooltip-ca-nstab-main": "Uobźyrej zajta artikla",
"tooltip-ca-nstab-user": "Ukoż perzůnalno zajta używocza",
"tooltip-ca-nstab-media": "Uobejřij zajta artikla",
- "tooltip-ca-nstab-special": "To je ekstra zajta. Ńy možeš jei sprowjać.",
+ "tooltip-ca-nstab-special": "To je ekstra zajta. Ńy moges jej sprowjać.",
"tooltip-ca-nstab-project": "Uobejřij zajta projektu",
"tooltip-ca-nstab-image": "Ukoż zajta grafiki",
"tooltip-ca-nstab-mediawiki": "Zoboč komunikat systymowy",
"tooltip-ca-nstab-template": "Uobźyrej muster",
"tooltip-ca-nstab-help": "Pokož zajte s půmocą",
"tooltip-ca-nstab-category": "Ukoż zajta kategoryje",
- "tooltip-minoredit": "Uoznač ta zmjana za drobno",
+ "tooltip-minoredit": "Uoznacz ta zmjana za drobno",
"tooltip-save": "Naszkryflej půmjyńańa",
"tooltip-preview": "Ńiż naszkryflosz, uobźyrej efekt twojigo sprowjyńo.",
"tooltip-diff": "Ukozuje twoje půmjyńańa we tekśće",
@@ -1762,6 +1770,8 @@
"spambot_username": "MediaWiki – wyćepywańe spamu",
"spam_reverting": "Přiwracańy uostatńij wersyji we kerej ńy bůuo linkůw do $1",
"spam_blanking": "Wšyjstke wersyje zawjerouy uodnośńiki do $1. Čyščyńy zajty.",
+ "simpleantispam-label": "Filter antyspamowy.\n'''ŃY''' szrajbůj sam ńic!",
+ "pageinfo-toolboxlink": "Informacyjo uo tyj zajće",
"markaspatrolleddiff": "uoznoč sprawjyńy kej „sprawdzůne”",
"markaspatrolledtext": "Uoznoč tyn artikel kej „sprawdzůny”",
"markedaspatrolled": "Sprawdzůne",
@@ -1792,6 +1802,9 @@
"file-nohires": "Wjynksze wymjyry ńy sům dostympne",
"svg-long-desc": "Plik SVG, nůminalńe $1 × $2 pixelůw, rozmior plika: $3",
"show-big-image": "Pjyrwy wymjor",
+ "show-big-image-preview": "Mjara podglůndu – $1.",
+ "show-big-image-other": "{{PLURAL:$2|Inkszo rozdźelczość|Inksze rozdźelczośći}}: $1.",
+ "show-big-image-size": "$1 x $2 pikselůw",
"newimages": "Galerjo nowych uobrozkůw",
"imagelisttext": "Půnižyj na {{PLURAL:$1||posortowanyj $2}} liśće {{PLURAL:$1|znojdowo|znojdujům|znojdowo}} śe '''$1''' {{PLURAL:$1|plik|pliki|plikůw}}.",
"newimages-summary": "Na tyj ekstra zajće prezyntowane sům uostatńo wćepńynte pliki.",
@@ -2028,7 +2041,6 @@
"exif-gpsspeed-n": "wynzuůw",
"exif-gpsdirection-t": "kerůnek geůgrafičny",
"exif-gpsdirection-m": "kerůnek magnetyčny",
- "watchlistall2": "do kupy",
"namespacesall": "wszyjske",
"monthsall": "wšyskie",
"confirmemail": "Potwjerdź adres e-brif",
@@ -2050,7 +2062,7 @@
"scarytranscludedisabled": "[Douůnčańy bez interwiki je wůuůnčůne]",
"scarytranscludefailed": "[Ńy powjoduo śe pobrańy szablůna lů $1]",
"scarytranscludetoolong": "[za dugo adresa URL]",
- "deletedwhileediting": "'''Pozůr''': Ta zajta zostoła wyćepano po tym, jak żeś rozpoczůł jei sprowjańy!",
+ "deletedwhileediting": "'''Pozůr''': Ta zajta zostoła wyćepano po tym, jak żeś rozpoczůł jej sprowjańy!",
"confirmrecreate": "Užytkowńik [[User:$1|$1]] ([[User talk:$1|godka]]) wyćepnůu tyn artikel po tym jak žeś rozpočůu(eua) jygo sprowjańe, podajůnc kej powůd wyćepańo:\n: ''$2''\nPotwjerdź chęć wćepańo nazod tygo artikla.",
"recreate": "Wćepej nazod",
"confirm_purge_button": "OK",
@@ -2080,7 +2092,7 @@
"watchlistedit-normal-explain": "Půńiżyj mosz lista artikli na kere dowosz pozůr.\nCoby wyćepać z ńij jako zajta, zaznocz pole przi ńij i naćiś knefel „{{int:Watchlistedit-normal-submit}}”.\nMożesz tyż skorzistać ze [[Special:EditWatchlist/raw|tekstowygo sprowjorza listy artikli na kere dowosz pozůr]].",
"watchlistedit-normal-submit": "Wyćep s listy",
"watchlistedit-normal-done": "Z Twoi listy artikli na kere dowoš pozůr {{PLURAL:$1|zostoua wyćepano 1 zajta|zostouy wyćepane $1 zajty|zostouo wyćepanych $1 zajtůw}}:",
- "watchlistedit-raw-title": "Tekstowy edytor listy artikli na kere dowoš pozůr",
+ "watchlistedit-raw-title": "Tekstowy edytor listy artikli na kere dowosz pozůr",
"watchlistedit-raw-legend": "Tekstowy edytor listy artikli na kere dowoš pozůr",
"watchlistedit-raw-explain": "Půńižy moš lista artikli na kere dowoš pozůr. W koždej lińii znojdowo śe titel jydnygo artikla. Lista možeš sprowjać dodajůnc nowe zajty i wyćepujůnc te kere na ńij sům. Jak skůńčyš, naćiś knefel „Uaktualńij lista zajtůw na kere dowům pozůr”.\nMožeš tyž [[Special:EditWatchlist|užyć standardowygo edytora]].",
"watchlistedit-raw-titles": "Title:",
@@ -2091,7 +2103,6 @@
"watchlisttools-view": "Pokož wažńijše pomjyńańo",
"watchlisttools-edit": "Pokož i zmjyńoj pozorliste",
"watchlisttools-raw": "Zmjyńoj surowo pozorlista",
- "unknown_extension_tag": "Ńyznany značńik rozšeřyńo „$1”",
"duplicate-defaultsort": "Pozůr: Zmjarkowanym kluczym sortowańo bydźe \"$2\" a zastůmpi uůn zawczasu używany klucz \"$1\".",
"version": "Wersjo",
"version-extensions": "Zainstalowane rozšeřyńa",
@@ -2105,7 +2116,7 @@
"version-parser-function-hooks": "Fůnkcyje hokůw analizatora skuadńi (ang. parser function hooks)",
"version-hook-name": "Mjano haka (ang. hook name)",
"version-hook-subscribedby": "Zapotřebowany bez",
- "version-version": "(Wersjo $1)",
+ "version-version": "($1)",
"version-license": "Licencjo",
"version-software": "Zainstalowane uoprůgramowańy",
"version-software-product": "Mjano",
@@ -2136,8 +2147,13 @@
"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)",
+ "logentry-delete-delete": "$1 {{GENDER:$2|wyćepoł|wyćepała}} zajta $3",
"revdelete-restricted": "naštaluj uograničyńo do administratorůw",
"revdelete-unrestricted": "wycofej uograničyńo do administratorůw",
+ "logentry-newusers-create": "Kůnto {{GENDER:$2|używocza}} $1 uostało stworzůne",
"rightsnone": "podstawowo",
+ "revdelete-summary": "uopis pomjyńań",
+ "searchsuggest-search": "Sznupej",
"expand_templates_ok": "OK"
}
diff --git a/languages/i18n/ta.json b/languages/i18n/ta.json
index cc50bc47..97a26b99 100644
--- a/languages/i18n/ta.json
+++ b/languages/i18n/ta.json
@@ -35,7 +35,8 @@
"Thamiziniyan",
"아라",
"Kalyanasundar",
- "தமிழ்த்தம்பி"
+ "தமிழ்த்தம்பி",
+ "Macofe"
]
},
"tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு",
@@ -396,7 +397,7 @@
"userlogout": "விடுபதிகை",
"notloggedin": "புகுபதிகை செய்யப்படவில்லை",
"userlogin-noaccount": "பயனர் கணக்கு இல்லையா?",
- "userlogin-joinproject": "இணைக {{SITENAME}}",
+ "userlogin-joinproject": "{{SITENAME}}-இல் இணைக",
"nologin": "பயனர் கணக்கு இல்லையா? '''$1'''.",
"nologinlink": "கணக்கு ஒன்றை உருவாக்கவும்",
"createaccount": "புதிய கணக்கை உருவாக்கு",
@@ -404,6 +405,7 @@
"gotaccountlink": "புகுபதிகை",
"userlogin-resetlink": "உங்கள் புகுபதிகைக் குறிப்புகளை மறந்துவிட்டீர்களா?",
"userlogin-resetpassword-link": "உங்கள் கடவுச் சொல்லை மறந்து விட்டீர்களா?",
+ "userlogin-createanother": "மற்றொரு கணக்கு ஒன்றை உருவாக்கவும்",
"createacct-emailrequired": "மின்னஞ்சல் முகவரி",
"createacct-emailoptional": "மின்னஞ்சல் முகவரி (விருப்பத்தேர்வு)",
"createacct-email-ph": "உங்கள் மின்னஞ்சல் முகவரியை உள்ளிடுக",
@@ -508,7 +510,6 @@
"passwordreset-emailsent-capture": "கீழே காண்பிக்கப்பட்டுள்ளது போல் கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் அனுப்பப்பட்டது.",
"passwordreset-emailerror-capture": "கடவுச்சொல் மீட்டமைக்கும் மின்னஞ்சல் உருவாக்கப்பட்டுவிட்டது, அது கீழே காட்டப்பட்டுள்ளது, ஆனால் பயனீட்டாளருக்கு அனுப்புவது தோல்வியடைந்தது:$1",
"changeemail": "மின்னஞ்சல் முகவரியை மாற்று",
- "changeemail-header": "கணக்கின் மின்னஞ்சல் முகவரியை மாற்று",
"changeemail-text": "இந்த படிவத்தை உங்கள் மின்னஞ்சல் முகவரியை மாற்ற பூர்த்தி செய்யவும். நீங்கள் இந்த மாற்றத்தை உறுதிசெய்ய உங்கள் கடவுச்சொல்லை உள்ளிட வேண்டிவரும்.",
"changeemail-no-info": "இப்பக்கத்தை நேரடியாக அணுகுவதற்கு நீங்கள் புகுபதிகை செய்திருக்கவேண்டும்.",
"changeemail-oldemail": "தற்பொழுதுள்ள மின்னஞ்சல் முகவரி:",
@@ -516,7 +517,6 @@
"changeemail-none": "(எதுவுமில்லை)",
"changeemail-password": "உங்கள் {{SITENAME}} கடவுச்சொல்:",
"changeemail-submit": "மின்னஞ்சலை மாற்று",
- "changeemail-cancel": "விட்டுவிடு",
"bold_sample": "தடித்த எழுத்துக்கள்",
"bold_tip": "தடித்த எழுத்து",
"italic_sample": "சாய்வெழுத்து",
@@ -761,7 +761,6 @@
"mergehistory-same-destination": "மூலப் பக்கமும் முடிவிடப் பக்கமும் ஒன்றாக இருக்கமுடியாது",
"mergehistory-reason": "காரணம்:",
"mergelog": "இணைப்புப் பதிகை",
- "pagemerge-logentry": "[[$1]] பக்கம் [[$2]] பக்கத்துடன் இணைக்கப்பட்டது ($3 வரையான திருத்தங்கள்)",
"revertmerge": "பிரி",
"mergelogpagetext": "பின்வருவது அண்மையில் செய்யப்பட்ட பக்க வரலாறு இணைப்புகளின் பட்டியலாகும்.",
"history-title": "திருத்த வரலாறு - \"$1\"",
@@ -807,7 +806,6 @@
"searchrelated": "தொடர்புடையவை",
"searchall": "அனைத்தும்",
"showingresults": "'''$2''' இலிருந்து தொடங்கும் {{PLURAL:$1|'''1''' முடிவு கீழே காட்டப்பட்டுள்ளது|'''$1''' முடிவுகள் கீழே காட்டப்பட்டுள்ளன}}.",
- "showingresultsheader": "'''$4''' இற்கான {{PLURAL:$5|முடிவு '''$3''' இல் '''$1'''|முடிவுகள்'''$3''' இல் '''$1 - $2''' }}",
"search-nonefound": "உங்கள் வினவலுக்கான முடிவுகள் எதுவும் இல்லை.",
"powersearch-legend": "மேம்பட்ட தேடல்",
"powersearch-ns": "பெயர்வெளிகளில் தேடவும்",
@@ -1344,7 +1342,6 @@
"statistics": "புள்ளிவிவரங்கள்",
"statistics-header-pages": "பக்கங்களின் புள்ளிவிவரங்கள்",
"statistics-header-edits": "தொகுப்புக்கள் பற்றிய புள்ளிவிவரங்கள்",
- "statistics-header-views": "எத்தனைத்தடவை பார்க்கப்பட்டது எனபது பற்றிய புள்ளிவிவரங்கள்",
"statistics-header-users": "பயனர் புள்ளி விபரங்கள்",
"statistics-header-hooks": "மற்ற புள்ளிவிவரங்கள்",
"statistics-articles": "உள்ளடக்கம் கொண்ட பக்கங்கள்",
@@ -1353,13 +1350,9 @@
"statistics-files": "பதிவேற்றப்பட்டக் கோப்புகள்",
"statistics-edits": "{{SITENAME}} அமைக்கப்பட்டதிலிருந்து பக்க திருத்தங்கள்",
"statistics-edits-average": "ஒரு பக்கத்திற்கான சராசரி தொகுப்புக்கள்",
- "statistics-views-total": "பார்வையிடப்பட்டதின் மொத்த எண்ணிக்கை",
- "statistics-views-total-desc": "தற்பொழுது இல்லாத மற்றும் சிறப்பு பக்கங்களின் காட்சிகள் இதில் சேர்க்கபடவில்லை",
- "statistics-views-peredit": "ஒரு தொகுத்தலுக்காக பார்க்கப்பட்ட எண்ணிக்கை",
"statistics-users": "பதிவு செய்யப்பட்ட [[Special:ListUsers|பயனர்கள்]]",
"statistics-users-active": "தொடர் பங்களிப்பாளர்கள் (பயனர்கள்)",
"statistics-users-active-desc": "கடந்த {{PLURAL:$1|நாள்|$1 நாட்களில்}} ஒன்று அல்லது அதற்கு மேற்பட்ட செயலைச் செய்த பயனர்கள்",
- "statistics-mostpopular": "அதிகம் பார்க்கப்பட்ட பக்கங்கள்",
"pageswithprop": "பக்கப் பண்புடைய பக்கங்கள்",
"pageswithprop-submit": "செல்க",
"doubleredirects": "இரட்டை வழிமாற்றுகள்",
@@ -1393,7 +1386,6 @@
"uncategorizedtemplates": "வகைப்படுத்தப்படாத வார்ப்புருக்கள்",
"unusedcategories": "பயன்படுத்தப்படாத பகுப்புகள்",
"unusedimages": "பயன்படுத்தப்படாத படிமங்கள்",
- "popularpages": "அடிக்கடி பார்க்கப்படும் பக்கங்கள்",
"wantedcategories": "வேண்டிய பகுப்புகள்",
"wantedpages": "வேண்டிய பக்கங்கள்",
"wantedpages-badtitle": "முடிவு குழு :$1 லில் உள்ள செல்லாத தலைப்பு",
@@ -1440,7 +1432,7 @@
"querypage-disabled": "செயல்பாட்டு காரணங்களுக்காக இந்த சிறப்புப் பக்கம் முடக்கப்பட்டுள்ளது.",
"booksources": "நூல் மூலங்கள்",
"booksources-search-legend": "நூல் மூலங்களைத் தேடு",
- "booksources-go": "செல்",
+ "booksources-search": "தேடுக",
"booksources-text": "நீங்கள் தேடும் நூல்களின் புதிய, பயன்படுத்தியப் பிரதிகளை விற்பனை செய்யும் இணையத்தளங்களின் பட்டியல் கீழே காட்டப்பட்டுள்ளது. நூல்கள் பற்றிய மேலதிகத் தகவல்களை இத்தளங்கள் கொண்டிருக்கலாம்:",
"booksources-invalid-isbn": "கொடுக்கப்பட்ட ISBN செல்லத்தக்கதாக தெரியவில்லை ; மூலத்திலிருந்து நகலெடுத்ததில் உள்ள பிழைகளை சரிபார்.",
"specialloguserlabel": "செயல்படுபவர்:",
@@ -1553,7 +1545,7 @@
"wlheader-enotif": "மின்னஞ்சல் அறிவிப்புகள் செயல்படுத்தப்பட்டுள்ளன.",
"wlheader-showupdated": "உங்கள் கடைசி வருகைக்குப் பின்னர் மாற்றங்கள் செய்யப்பட்ட பக்கங்கள் '''தடித்த எழுத்துக்களில்''' காட்டப்பட்டுள்ளன",
"wlnote": "பின்வருவன கடைசி {{PLURAL:$2|மணித்தியாலத்தில்|'''$2''' மணித்தியாலங்களில்}} செய்யப்பட்ட {{PLURAL:$1|கடைசி ஒரு மாற்றமாகும்|கடைசி $1 மாற்றங்களாகும்}}.",
- "wlshowlast": "கடைசி $1 மணித்தியாலங்கள் $2 நாட்களைக் காட்டு $3",
+ "wlshowlast": "கடைசி $1 மணித்தியாலங்கள் $2 நாட்களைக் காட்டு",
"watchlist-options": "கவனிப்பு பட்டியலின் விருப்பத் தேர்வுகள்",
"watching": "கவனிக்கப்படுகிறது...",
"unwatching": "கவனிப்பு விடப்படுகிறது...",
@@ -1590,7 +1582,6 @@
"delete-toobig": "இப்பக்கம் அதிகமான திருத்தங்களை கொண்டுள்ளது, குறிப்பாக $1 {{PLURAL:$1|திருத்தத்திற்கு|திருத்தங்களிற்கு}} மேல்.\n{{SITENAME}} தளத்தின் தரவுகள் தற்செயலாக அழிந்துப்போவதை தடுப்பதற்க்காக இவ்வாறான பக்கங்கள் நீக்கப்படுவது முடக்கப்பட்டுள்ளது.",
"delete-warning-toobig": "இப்பக்கம் அதிகமான திருத்தங்களை கொண்டுள்ளது, குறிப்பாக $1 {{PLURAL:$1|திருத்தத்திற்கு|திருத்தங்களிற்கு}} மேல்.\nஇப்பக்கத்தை நீக்குவது {{SITENAME}} தளத்தின் தரவுவழங்கனின் செயற்பாட்டை பாதிக்கலாம்;\nகவனத்துடன் முன்னெடுக்கவும்.",
"rollback": "முன்நிலையாக்கத் தொகுப்புகள்",
- "rollback_short": "முன்நிலையாக்கு",
"rollbacklink": "முன்நிலையாக்கு",
"rollbacklinkcount": "$1 {{PLURAL:$1|தொகுப்பை|தொகுப்புகளை}} முன்நிலையாக்குக",
"rollbacklinkcount-morethan": "$1-க்கும் மேற்பட்ட {{PLURAL:$1|தொகுப்பை|தொகுப்புகளை}} முன்நிலையாக்குக",
@@ -1989,12 +1980,9 @@
"import-rootpage-invalid": "கொடுக்கப்பட்ட மூலப்பக்கம் செல்லாத தலைப்பாகும்.",
"importlogpage": "இறக்குமதி பதிகை",
"importlogpagetext": "வேறு விக்கிகளிலில் தொகுப்பு வரலாற்றைக் கொண்டப் பக்கங்களின் மேலாண்மை இறக்குமதிகள்.",
- "import-logentry-upload": "கோப்பு பதிவேற்றத்தின் மூலம் [[$1]] இறக்கப்பட்டது",
"import-logentry-upload-detail": "{{PLURAL:$1|ஒரு திருத்தம்|$1 திருத்தங்கள்}}",
- "import-logentry-interwiki": "transwikied$1",
"import-logentry-interwiki-detail": "$2 இலிருந்து {{PLURAL:$1|ஒரு திருத்தம்|$1 திருத்தங்கள்}}",
"javascripttest": "சாவாநிரல் சோதனை நடக்கின்றது",
- "javascripttest-title": "$1 சோதனைகள் நடக்கின்றன",
"javascripttest-pagetext-noframework": "இந்த பக்கம் JavaScript பரிசோதனை ஓட்டத்திற்காக ஒதுக்கப்பட்டுள்ளது",
"javascripttest-pagetext-skins": "சோதனைகளை நடத்த முகப்புறை ஒன்றைத் தேர்வுசெய்:",
"tooltip-pt-userpage": "உங்கள் பயனர் பக்கம்",
@@ -2035,6 +2023,7 @@
"tooltip-feed-atom": "இப்பக்கத்துக்கான அடொம் ஓடை கிடையாது",
"tooltip-t-contributions": "இப்பயனரின் பங்களிப்புக்களின் பட்டியலைப் பார்",
"tooltip-t-emailuser": "இப் பயனருக்கு மின்னஞ்சல் செய்",
+ "tooltip-t-info": "இப்பக்கத்தைப்பற்றி மேலதிக விபரம்",
"tooltip-t-upload": "கோப்புகளைப் பதிவேற்றுக",
"tooltip-t-specialpages": "அனைத்துச் சிறப்புப் பக்கங்களின் பட்டியல்",
"tooltip-t-print": "இப்பக்கத்தின் அச்சுக்குகந்தப் பதிப்பு",
@@ -2092,7 +2081,6 @@
"pageinfo-robot-policy": "தானியங்கி மூலம் அட்டவணைப்படுத்தல்",
"pageinfo-robot-index": "அனுமதிக்கப்படுகிறது",
"pageinfo-robot-noindex": "அனுமதிக்கப்படாதது",
- "pageinfo-views": "காட்சிகள் எண்ணிக்கை",
"pageinfo-watchers": "பக்கப் பார்வையாளர்கள் எண்ணிக்கை",
"pageinfo-few-watchers": "விட குறைவானது $1 {{PLURAL:$1|watcher|watchers}}",
"pageinfo-redirects-name": "இந்தப் பக்கத்திற்கான வழிமாற்றுகளின் எண்ணிக்கை",
@@ -2522,7 +2510,6 @@
"exif-urgency-low": "குறைந்த ($1)",
"exif-urgency-high": "அதிகம் ($1)",
"exif-urgency-other": "பயனர் அறுதியிட்ட முன்னுரிமை ( $1 )",
- "watchlistall2": "அனைத்து",
"namespacesall": "அனைத்து",
"monthsall": "அனைத்து மாதங்களும்",
"confirmemail": "மின்னஞ்சல் முகவரியை உறுதிப்படுத்துக",
@@ -2594,7 +2581,6 @@
"watchlisttools-edit": "என்கவனிப்பு பட்டியலை பார்த்து தொகு",
"watchlisttools-raw": "விக்கி நிரலற்றக் கவனிப்புப் பட்டியலைத் தொகு",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|பேச்சு]])",
- "unknown_extension_tag": "அறியப்படாத நீட்சி வகை \"$1\"",
"duplicate-defaultsort": "'''எச்சரிக்கை:''' இயல்புநிலை வரிசைப்படுத்து விசை ''$2 \" முன்னால் இயல்புநிலை வரிசைப்படுத்து விசை \"$1\" ஐ மீறுகிறது.",
"version": "பதிப்பு",
"version-extensions": "நிறுவப்பட்ட நீட்சிகள்",
@@ -2610,7 +2596,7 @@
"version-parser-function-hooks": "இலக்கணப் பாகுபடுத்தி செயற்பாட்டு கொக்கிகள்",
"version-hook-name": "கொக்கியின் பெயர்",
"version-hook-subscribedby": "பயன்பாடு",
- "version-version": "(பதிப்பு $1)",
+ "version-version": "($1)",
"version-license": "மீடியாவிக்கி உரிமம்",
"version-poweredby-credits": "இந்த் விக்கி '''[https://www.mediawiki.org/ MediaWiki]''' இதன் மூலம் வழங்கப்படுகிறது, காப்புரிமை © 2001-$1 $2.",
"version-poweredby-others": "பிறர்",
@@ -2648,6 +2634,7 @@
"specialpages-group-wiki": "தரவு மற்றும் கருவிகள்",
"specialpages-group-redirects": "சிறப்புப் பக்கங்கள் வழிமாற்றம் செய்யப்படுகின்றது",
"specialpages-group-spam": "எரித கருவிகள்",
+ "specialpages-group-developer": "உருவாக்குநர் கருவிகள்",
"blankpage": "வெற்று பக்கம்",
"intentionallyblankpage": "இந்த பக்கம் திட்டமிட்டே வெற்றாக விடப்பட்டுள்ளது",
"external_image_whitelist": "#இந்த வரியை அதேபோல விட்டுவிடவும்<pre>\n#கீழே வழக்கமான வெளிப்பாட்டு துண்டுகளை (/ / இடையே செல்லும் ஒரு பகுதி) போடவும்\n#இந்த வெளிப்புற (hotlinked) படங்கள் URL கள் மூலம் பொருத்தப்படும்\n#அந்த பொருத்தம் படங்களாக காண்பிக்கப்படும், இல்லையெனில் ஒரு படத்திற்கான இணைப்பு மட்டுமே காண்பிக்கப்படும் \n#வரிகள் # உடன் ஆரம்பித்தால் அது கருத்துகளாக கருதப்படும்\n#இது எழுத்து உணர்வுடையது\n\n#அனைத்து regex துடுகளையும் இந்த வரிக்கு மேலே போடு. இந்த வரியை அதே போல விட்டுவிடவும்</pre>",
@@ -2722,21 +2709,22 @@
"logentry-newusers-newusers": "பயனர் கணக்கு $1 உருவாக்கப்பட்டது",
"logentry-newusers-create": "$1 ஒரு புதிய பயனர் கணக்கை உருவாக்கியுள்ளார்.",
"logentry-newusers-create2": "$3 பயனர் கணக்கினை $1 உருவாக்கினார்",
- "logentry-newusers-autocreate": "பயணர் கணக்கு $1 தானாக உருவாக்கப்பட்டது",
+ "logentry-newusers-autocreate": "பயனர் கணக்கு $1 தானாக உருவாக்கப்பட்டது",
"rightsnone": "(எதுவுமில்லை)",
+ "revdelete-summary": "தொகுப்பு சுருக்கத்தை",
+ "feedback-adding": "பக்கத்தில் கருத்தைச் சேர்க்கிறது...",
+ "feedback-bugcheck": "சிறப்பு! அது ஏற்கனவே [ $1 தெரிந்த bugs ] என்பதை மட்டும் சரிபார்க்கவும்,",
+ "feedback-bugnew": "நான் சரிபார்த்தாயிற்று. புதிய bug பற்றி கூறு.",
"feedback-bugornote": "நீங்கள் ஒரு தொழில்நுட்பக் கோளாறு குறித்து விரிவாக விளக்க தாயாராக இருந்தால் தயவுசெய்து [ $1 ஒரு bug பற்றி கூறு].\nஇல்லையெனில், நீங்கள் கீழேயுள்ள எளிதான படிவத்தை பயன்படுத்தலாம்.உங்கள் கருத்துரை \"[$3 $2]\" பக்கத்தில் உங்கள் பயனர் பெயர் மற்றும் உங்கள் உலாவியின் பெயருடன் சேர்க்கப்படும்.",
- "feedback-subject": "பொருள்:",
- "feedback-message": "தகவல்:",
"feedback-cancel": "விட்டுவிடு",
- "feedback-submit": "கருத்தைச் சமர்ப்பிக்கவும்",
- "feedback-adding": "பக்கத்தில் கருத்தைச் சேர்க்கிறது...",
+ "feedback-close": "முடிந்தது",
"feedback-error1": "பிழை: API லிருந்து அங்கீகரிக்கப்படாத முடிவு.",
"feedback-error2": "பிழை: திருத்தல் தோல்வியடைந்தது",
"feedback-error3": "பிழை: API லிருந்து பதிற்குறிப்பு எதுவும் இல்லை.",
+ "feedback-message": "தகவல்:",
+ "feedback-subject": "பொருள்:",
+ "feedback-submit": "சமர்ப்பி",
"feedback-thanks": "நன்றி! உங்கள் கருத்துகள் \"[$2 $1]\" பக்கத்தில்பதிவு செய்யப்பட்டுள்ளது .",
- "feedback-close": "முடிந்தது",
- "feedback-bugcheck": "சிறப்பு! அது ஏற்கனவே [ $1 தெரிந்த bugs ] என்பதை மட்டும் சரிபார்க்கவும்,",
- "feedback-bugnew": "நான் சரிபார்த்தாயிற்று. புதிய bug பற்றி கூறு.",
"searchsuggest-search": "தேடு",
"searchsuggest-containing": "கொண்டுள்ளது...",
"api-error-badaccess-groups": "இந்த விக்கிக்குக் கோப்புகளைப் பதிவேற்றுவதற்கு நீங்கள் அனுமதிக்கப்படவில்லை.",
@@ -2792,5 +2780,26 @@
"expand_templates_output": "முடிவுகள்",
"expand_templates_ok": "ஆம்",
"expand_templates_remove_comments": "கருத்துரைகளை நீக்கு",
- "expand_templates_preview": "முன்தோற்றம்"
+ "expand_templates_preview": "முன்தோற்றம்",
+ "mediastatistics-header-unknown": "அறியப்படாதது",
+ "mediastatistics-header-video": "காணொளிகள்",
+ "special-characters-group-latin": "இலத்தீன்",
+ "special-characters-group-latinextended": "இலத்தீன் விரிவு",
+ "special-characters-group-ipa": "பன்னாட்டு ஒலிப்பு அரிச்சுவடி",
+ "special-characters-group-symbols": "குறியீடுகள்",
+ "special-characters-group-greek": "கிரேக்கம்",
+ "special-characters-group-cyrillic": "சைரிலிக் (Cyrillic)",
+ "special-characters-group-arabic": "அரபு",
+ "special-characters-group-arabicextended": "அரபு விரிவு",
+ "special-characters-group-persian": "பாரசீகம்",
+ "special-characters-group-hebrew": "எபிரேயம் (ஈபுரு)",
+ "special-characters-group-bangla": "வங்காளம்",
+ "special-characters-group-tamil": "தமிழ்",
+ "special-characters-group-telugu": "தெலுங்கு",
+ "special-characters-group-sinhala": "சிங்களம்",
+ "special-characters-group-gujarati": "குசராத்தி",
+ "special-characters-group-devanagari": "தேவநாகரி",
+ "special-characters-group-thai": "தாய்",
+ "special-characters-group-lao": "இலாவோ",
+ "special-characters-group-khmer": "கெமெர்"
}
diff --git a/languages/i18n/tcy.json b/languages/i18n/tcy.json
index 4b6eb59c..73b3b6a3 100644
--- a/languages/i18n/tcy.json
+++ b/languages/i18n/tcy.json
@@ -4,7 +4,8 @@
"NamwikiTL",
"VASANTH S.N.",
"VinodSBangera",
- "아라"
+ "아라",
+ "Vishwanatha Badikana"
]
},
"tog-underline": "ಲಿಂಕ್’ಲೆದ ತಿರ್ತ್ ಗೆರೆ(ಅಂಡರ್ ಲೈನ್) ಪಾಡ್’ಲೆ",
@@ -134,6 +135,7 @@
"actions": "ಕ್ರಿಯೆಕ್ಕುಲು",
"namespaces": "ಪುದರ್ ದ ವರ್ಗೊಲು",
"variants": "ರೂಪಾಂತರ ಹೊಂದ್‘ನ",
+ "navigation-heading": "ಸಂಚರಣೆ ಮೆನು",
"errorpagetitle": "ದೋಷ",
"returnto": "$1 ಗ್ ಪಿರ ಪೋಲೆ.",
"tagline": "{{SITENAME}} ರ್ದ್",
@@ -149,8 +151,10 @@
"permalink": "ಸ್ಥಿರ ಸಂಪರ್ಕ",
"print": "ಪ್ರಿ೦ಟ್ ಮನ್ಪುಲೆ",
"view": "ತೂಲೆ",
+ "view-foreign": "$1ಡ್ ತೂಲೆ",
"edit": "ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ(Edit this page)",
"create": "ಸೃಷ್ಟಿಸಾಲೆ",
+ "create-local": "ಸ್ಥಳೀಯ ವಿವರಣೆ ಸೇರಾಲೆ",
"editthispage": "ಈ ಪುಟೊನು ಬದಲಾಯಿಸಾಲೆ",
"create-this-page": "ಈ ಪುಟೊನು ಸೃಷ್ಟಿಸಾಲೆ",
"delete": "ದೆತ್ತ್ ಪಾಡ್ಲೆ",
@@ -170,7 +174,7 @@
"articlepage": "ಲೇಖನ ಪುಟೊನು ತೂಲೆ",
"talk": "ಚರ್ಚೆ",
"views": "ನೋಟಲು",
- "toolbox": "ಉಪಕರಣ(ಟೂಲ್)",
+ "toolbox": "ಉಪಕರಣೊಲು",
"userpage": "ಸದಸ್ಯೆರ್ನ ಪುಟೊನು ತೂಲೆ",
"projectpage": "ಪ್ರೊಜೆಕ್ಟ್ ಪುಟೊನು ತೂಲೆ",
"imagepage": "ಮೀಡಿಯ ಪುಟೊನು ತೂಲೆ",
@@ -286,9 +290,17 @@
"ns-specialprotected": "ವಿಶೇಷ ಪುಟ‘ಕ್‘ಲೆನ್ ಸಂಪಾದನೆ ಮಲ್ಪರೆ ಆಪುಜಿ",
"logouttext": "ಈರ್ ಇತ್ತೆ ಲಾಗ್ ಔಟ್ ಆತರ್.\nಈರ್ {{SITENAME}} ನ್ ಅನಾಮಧೇಯರಾತ್ ಉಪಯೋಗ ಮಲ್ಪೊಲಿ,ಅಥವಾ ಕೂಡ ಉಂದುವೇ ಪುದರ್‘ಡ್ ಯಾ ಬೇತೆ ಪುದರ್‘ಡ್ ಉಪಯೋಗ ಮಲ್ಪೊಲಿ.\nಗಮನಿಸಾಲೆ: ಈರೆನ ಬ್ರೌಸರ್‘ಡ್ ಮಾಜುನಾಡೆ ಮುಟ್ಟ ಕೆಲವು ಪುಟಕ್‘ಲು ಈರ್ ಇತ್ತೆಲಾ ಲಾಗ್ ಇನ್ ಆಯಿಲೆಕ್ಕನೇ ತೋಜಾವು.",
"yourname": "ಸದಸ್ಯೆರ್ನ ಪುದರ್:",
+ "userlogin-yourname": "ಸದಸ್ಯೆರ್ನ ಪುದರ್",
+ "userlogin-yourname-ph": "ಈರೆನೆ ಸದಸ್ಯನಾಮ ಬರೆಲೆ",
"yourpassword": "ಪಾಸ್-ವರ್ಡ್:",
+ "userlogin-yourpassword": "ಪ್ರವೇಶಪದೊ",
+ "userlogin-yourpassword-ph": "ಪ್ರವೇಶ ಪದೊನ್ ನಮೂದಿಸಾಲೆ",
+ "createacct-yourpassword-ph": "ಪ್ರವೇಶ ಪದೊನ್ ನಮೂದಿಸಾಲೆ",
"yourpasswordagain": "ಪಾಸ್ವರ್ಡ್ ಪಿರ ಟೈಪ್ ಮಲ್ಪುಲೆ",
+ "createacct-yourpasswordagain": "ಪ್ರವೇಶಪದೊನ್ ಧೃಡೀಕರಣ ಮಲ್ಪುಲೆ",
+ "createacct-yourpasswordagain-ph": "ಪ್ರವೇಶಪದೊನು ನನ ಒರ ನಮೂದಿಸಾಲೆ",
"remembermypassword": "ಈ ಕಂಪ್ಯೂಟರ್’ಡ್ ಎನ್ನ ಪ್ರವೇಶ ಪದೊನು ನೆನಪು ದೀಲ",
+ "userlogin-remembermypassword": "ಎನನ್ ಲಾಗಿನ್ ಆತೇ ದೀಡ್ಲೆ",
"yourdomainname": "ಈರೆನ ಕಾರ್ಯಕ್ಷೇತ್ರ",
"login": "ಲಾಗ್ ಇನ್",
"nav-login-createaccount": "ಲಾಗ್-ಇನ್ / ಅಕೌಂಟ್ ಸೃಷ್ಟಿ ಮಲ್ಪುಲೆ",
@@ -297,14 +309,24 @@
"logout": "ಲಾಗ್ ಔಟ್",
"userlogout": "ಲಾಗ್ ಔಟ್",
"notloggedin": "ಲಾಗಿನ್ ಆತ್‘ಜ್ಜರ್",
+ "userlogin-noaccount": "ಈರೆನ ಖಾತೆ ಇಜ್ಜೇ?",
+ "userlogin-joinproject": "{{SITENAME}}ಗ್ ಸೇರ್ಲೆ",
"nologin": "ಈರೆನ ಖಾತೆ ಇಜ್ಜೇ?'''$1'''",
"nologinlink": "ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
"createaccount": "ಪೊಸ ಅಕ್ಕೌಂಟ್ ಸುರು ಮಲ್ಪುಲೆ",
"gotaccount": "ಈರೆನ ಖಾತೆ ಉಂಡೇ?'''$1'''",
"gotaccountlink": "ಲಾಗಿನ್ ಆಲೆ",
"userlogin-resetlink": "ಈರೆನ ಲಾಗಿನ್ ವಿವರ ಮರತ್ತ್ಂಡೇ?",
+ "userlogin-resetpassword-link": "ಈರೆನೆ ಪ್ರವೇಶಪದೊ ಮರತ್ತ್‍ಂಡಾ?",
+ "userlogin-helplink2": "ಲಾಗಿನ್ ಆವೊರೆ ಸಹಾಯ",
+ "createacct-emailoptional": "ಮಿಂಚಂಚೆ ವಿಳಾಸೊ (ಐಚ್ಛಿಕ)",
+ "createacct-email-ph": "ಇರೆನ ಇ-ಅಂಚೆ ವಿಳಾಸೊನ್ ನಮೂದಿಸಾಲೆ.",
"createaccountmail": "ಇ ಮೈಲ್ ಮೂಲಕ",
"createaccountreason": "ಕಾರಣ",
+ "createacct-submit": "ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
+ "createacct-benefit-body1": "{{PLURAL:$1|ಸಂಪಾದನೆ|ಸಂಪಾದನೆಲು}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|ಪುಟ|ಪುಟಕ್ಕುಲು}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|ಕೊಡುಗೆ|ಕೊಡುಗೆಲು}}",
"badretype": "ಈರ್ ಕೊರ್ನ ಪ್ರವೇಶ ಪದೆ ಬೇತೆ ಬೇತೆ ಅತ್ಂಡ್",
"userexists": "ಈರ್ ಕೊರ್ನ ಸದಸ್ಯರ ಪುದರ್ ಬಳಕೆಡ್ ಉಂಡು. ದಯದೀದ್ ಬೇತೆ ಪುದರ್ ಕೊರ್ಲೆ",
"loginerror": "ಲಾಗಿನ್ ದೋಷ",
@@ -334,6 +356,10 @@
"accountcreated": "ಖಾತೆ ಸೃಷ್ಟಿಯಾತ್‘ಂಡ್.",
"login-abort-generic": "ಇರೆನ ಲಾಗ್ ಇನ್ ವಿಫಲ ವಾತ್‘ಂಡ್",
"loginlanguagelabel": "ಭಾಷೆ: $1",
+ "pt-login": "ಲಾಗಿನ್",
+ "pt-login-button": "ಲಾಗಿನ್ ಆಲೆ",
+ "pt-createaccount": "ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
+ "pt-userlogout": "ಲಾಗ್ ಔಟ್",
"changepassword": "ಪ್ರವೇಶಪದೊನ್ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
"resetpass_header": "ಈ ಖಾತೆದ ಪ್ರವೇಶಪದ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
"oldpassword": "ಪರ ಪ್ರವೇಶಪದ",
@@ -347,7 +373,6 @@
"passwordreset-username": "ಸದಸ್ಯೆರ್ನ ಪುದರ್:",
"passwordreset-email": "ಇ-ಅಂಚೆ ವಿಳಾಸೊ",
"changeemail-submit": "ಇ-ಅಂಚೆ ವಿಳಾಸ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
- "changeemail-cancel": "ವಜಾ ಮಲ್ಪುಲೆ",
"bold_sample": "ದಪ್ಪ ಅಕ್ಷರ",
"bold_tip": "ದಪ್ಪ ಅಕ್ಷರೊಲು",
"italic_sample": "ಓರೆ ಅಕ್ಷರೊಲು",
@@ -388,11 +413,12 @@
"userpage-userdoesnotexist": "ಬಳಕೆದಾರ ಖಾತೆ \"<nowiki>$1</nowiki>\" ದಾಖಲಾತ್‘ಜ್ಜಿ. ಈರ್ ಉಂದುವೇ ಪುಟನ್ ಸಂಪಾದನೆ ಮಲ್ಪರ ಉಂಡಾಂದ್ ಖಾತ್ರಿ ಮಲ್ತೊನಿ.",
"previewnote": "'''ಉಂದು ಕೇವಲ ಮುನ್ನೋಟ; ಪುಟೊನು ನನಲ ಒರಿಪಾದಿಜಿ ಪನ್ಪುನೇನ್ ಮರಪೊರ್ಚಿ!'''",
"editing": "$1 ಲೇಖನೊನು ಈರ್ ಸಂಪಾದನೆ ಮಲ್ತೊಂದುಲ್ಲರ್",
+ "creating": "$1 ನ್ನು ಸೃಷ್ಟಿಸಾವೊದುಂಡು",
"editingsection": "$1 (ವಿಭಾಗೊನು) ಸಂಪಾದನೆ ಮಲ್ತೊಂದುಲ್ಲರ್",
"yourtext": "ಇರೆನ ಸಂಪಾದನೆ",
"yourdiff": "ವ್ಯತ್ಯಾಸೊಲು",
"copyrightwarning": "ದಯಮಲ್ತ್’ದ್ ಗಮನಿಸ್’ಲೆ: {{SITENAME}} ಸೈಟ್’ಡ್ ಇರೆನ ಪೂರಾ ಕಾಣಿಕೆಲುಲಾ $2 ಅಡಿಟ್ ಬಿಡುಗಡೆ ಆಪುಂಡು (ಮಾಹಿತಿಗ್ $1 ನ್ ತೂಲೆ). ಇರೆನ ಸಂಪಾದನೆಲೆನ್ ಬೇತೆಕುಲು ನಿರ್ಧಾಕ್ಷಿಣ್ಯವಾದ್ ಬದಲ್ ಮಲ್ತ್’ದ್ ಬೇತೆ ಕಡೆಲೆಡ್ ಪಟ್ಟೆರ್. ಇಂದೆಕ್ ಇರೆನ ಒಪ್ಪಿಗೆ ಇತ್ತ್’ನ್ಡ ಮಾತ್ರ ಮುಲ್ಪ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ.<br />\nಅತ್ತಂದೆ ಇರೆನ ಸಂಪಾದನೆಲೆನ್ ಈರ್ ಸ್ವತಃ ಬರೆತರ್, ಅತ್ತ್’ನ್ಡ ಕೃತಿಸ್ವಾಮ್ಯತೆ ಇಜ್ಜಂದಿನ ಕಡೆರ್ದ್ ದೆತೊನ್ದರ್ ಪಂಡ್’ದ್ ಪ್ರಮಾಣಿಸೊಂದುಲ್ಲರ್.\n'''ಕೃತಿಸ್ವಾಮ್ಯತೆದ ಅಡಿಟುಪ್ಪುನಂಚಿನ ಕೃತಿಲೆನ್ ಒಪ್ಪಿಗೆ ಇಜ್ಜಂದೆ ಮುಲ್ಪ ಪಾಡೊಚಿ!'''",
- "templatesused": "ಈ ಪುಟೊಟು ಉಪಯೋಗ ಮಲ್ತಿನ ಫಲಕೊಲು:",
+ "templatesused": "ಈ ಪುಟೊಟ್ ಉಪಯೋಗ ಮಲ್ತಿನ {{PLURAL:$1|ಟೆಂಪ್ಲೇಟು|ಟೆಂಪ್ಲೇಟುಗಳು}}:",
"templatesusedpreview": "ಈ ಮುನ್ನೋಟೊಡು ಉಪಯೋಗ ಮಲ್ತಿನ ಟೆಂಪ್ಲೇಟ್’ಲು:",
"template-protected": "(ಸಂರಕ್ಷಿತ)",
"template-semiprotected": "(ಅರೆ-ಸಂರಕ್ಷಿತ)",
@@ -404,6 +430,7 @@
"currentrev": "ಇತ್ತೆದ ಆವೃತ್ತಿ",
"currentrev-asof": "$1 ದ ಮುಟ್ಟ ಇತ್ತೆದ ಆವೃತ್ತಿ",
"revisionasof": "$1 ದಿನೊತ ಆವೃತ್ತಿ",
+ "revision-info": "ಬದಲಾವಣೆ $1 ಲೆಕ್ಕೊ {{GENDER:$6|$2}} ಇಂಬೆರೆಡ್‍ದ್$7",
"previousrevision": "←ದುಂಬುದ ಆವೃತ್ತಿ",
"nextrevision": "ಪೊಸ ಮರು-ಆವೃತ್ತಿ",
"currentrevisionlink": "ಇತ್ತೆದ ಆವೃತ್ತಿ",
@@ -438,7 +465,7 @@
"mergehistory-from": "ಮೂಲ ಪುಟ",
"mergehistory-reason": "ಕಾರಣ:",
"revertmerge": "ಅನ್-ಮರ್ಜ್ ಮಲ್ಪುಲೆ",
- "history-title": "\"$1\" ಪುಟೊತ ಆವೃತ್ತಿ ಇತಿಹಾಸ",
+ "history-title": "\"$1\" ಪುಟೊತ ಆವೃತ್ತಿ ಇತಿಹಾಸೊ",
"lineno": "$1 ನೇ ಸಾಲ್:",
"compareselectedversions": "ಆಯ್ಕೆ ಮಲ್ತಿನ ಆವೃತ್ತಿಲೆನ್ ಹೊಂದಾಣಿಕೆ ಮಲ್ತ್ ತೂಲೆ",
"editundo": "ದುಂಬುದಲೆಕ",
@@ -447,6 +474,7 @@
"notextmatches": "ವಾ ಪುಟೊತ ಪಠ್ಯೊಡುಲಾ ಹೋಲಿಕೆ ಇಜ್ಜಿ",
"prevn": "ದುಂಬುದ {{PLURAL:$1|$1}}",
"nextn": "ಬೊಕ್ಕದ {{PLURAL:$1|$1}}",
+ "shown-title": "ಪ್ರತಿ ಪುಟೊಡುಲಾ $1 {{PLURAL:$1|result|results}} ತೋಜಿಪಾವು",
"viewprevnext": "ತೂಲೆ ($1 {{int:pipe-separator}} $2) ($3)",
"searchprofile-articles": "ಲೇಖನ ಪುಟೊ",
"searchprofile-images": "ಬಹುಮಾಧ್ಯಮ",
@@ -464,11 +492,12 @@
"search-interwiki-more": "(ಮಸ್ತ್)",
"searchrelated": "ಸ೦ಬ೦ಧ ಇತ್ತಿನ",
"searchall": "ಮಾತಾ",
+ "search-nonefound": "ಈರೆನ ವಿಚಾರಣೆಗ್ ತಕ್ಕುದಾಯಿನ ಪಲಿತಾಂಶೊಲು ಇಜ್ಜಿ.",
"powersearch-legend": "ಅಡ್ವಾನ್ಸ್’ಡ್ ಸರ್ಚ್",
"powersearch-ns": "ನೇಮ್-ಸ್ಪೇಸ್’ಲೆಡ್ ನಾಡ್ಲೆ",
"powersearch-toggleall": "ಮಾತಾ",
"preferences": "ಪ್ರಾಶಸ್ತ್ಯೊಲು",
- "mypreferences": "ಎನ್ನ ಪ್ರಾಶಸ್ತ್ಯಲು",
+ "mypreferences": "ಪ್ರಾಶಸ್ತ್ಯೊಲು",
"prefs-rc": "ಇಂಚಿಪದ ಬದಲಾವಣೆಲು",
"prefs-resetpass": "ಪ್ರವೇಶಪದೊನ್ ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
"prefs-changeemail": "ಇ-ಅಂಚೆ ವಿಳಾಸೊನು ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
@@ -518,19 +547,31 @@
"action-deleterevision": "ಈ ಆವೃತ್ತಿನ್ ಮಾಜಾಲೆ",
"action-sendemail": "ಇ-ಅಂಚೆ ಕಡಪುಡುಲೆ",
"nchanges": "$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಲು}}",
+ "enhancedrc-history": "ಇತಿಹಾಸೊ",
"recentchanges": "ಇಂಚಿಪದ ಬದಲಾವಣೆಲು",
"recentchanges-legend": "ಇಂಚಿಪದ ಬದಲಾವಣೆಲು ಆಯ್ಕೆಲು",
"recentchanges-summary": "ಈ ವಿಕಿಟ್ ಇಂಚಿಪ್ಪ ಆತಿನ ಬದಲಾವಣೆನ್ ಟ್ರಾಕ್ ಮಲ್ಪುಲೆ",
"recentchanges-feed-description": "ಈ ಫೀಡ್’ಡ್ ವಿಕಿಕ್ ಇಂಚಿಪ್ಪ ಆತಿನಂಚಿನ ಬದಲಾವಣೆಲೆನ್ ಟ್ರ್ಯಾಕ್ ಮಲ್ಪುಲೆ.",
"recentchanges-label-newpage": "ಇರ್ನ ಈ ಬದಲಾವಣೆ ಪೊಸ ಪುಟೊನು ಸುರು ಮಲ್ಪುಂಡು",
"recentchanges-label-minor": "ಉಂದು ಎಲ್ಯ ಬದಲಾವಣೆ",
+ "recentchanges-label-bot": "ಈ ಸಂಪಾದನೆನ್ ಒಂಜಿ ಬಾಟ್ ಮಲ್ತ್‍ದುಂಡು",
+ "recentchanges-label-unpatrolled": "ಈ ಸಂಪಾದನೆನ್ ನನಲಾ ಪರೀಕ್ಷೆ ಮಲ್ತ್‍ದಿಜ್ಜಿ.",
"rclistfrom": "$3 $2 ರ್ದ್ ಶುರುವಾತಿನ ಪೊಸ ಬದಲಾವಣೆಲೆನ್ ತೊಜ್ಪಾವು",
"rcshowhideminor": "$1 ಎಲ್ಯೆಲ್ಯ ಬದಲಾವಣೆಲು",
+ "rcshowhideminor-show": "ತೋಜಾಲೆ",
+ "rcshowhideminor-hide": "ದೆಂಗಾವು",
"rcshowhidebots": "$1 ಬಾಟ್",
+ "rcshowhidebots-show": "ತೊಜಾವು",
+ "rcshowhidebots-hide": "ದೆಂಗಾಲೆ",
"rcshowhideliu": "ಲಾಗ್-ಇನ್ ಆತಿನಂಚಿನ ಸದಸ್ಯೆರ್ $1",
+ "rcshowhideliu-hide": "ದೆಂಗಾವು",
"rcshowhideanons": "ಅನಾಮಧೇಯ ಸದಸ್ಯೆರ್ $1",
+ "rcshowhideanons-show": "ತೋಜಾಲೆ",
+ "rcshowhideanons-hide": "ದೆಂಗಾವು",
"rcshowhidepatr": "$1 ಪರೀಕ್ಷಿಸಾದಿನ ಸಂಪಾದನೆಲು",
"rcshowhidemine": "ಎನ್ನ ಸಂಪಾದನೆಲೆನ್ $1",
+ "rcshowhidemine-show": "ತೋಜಾಲೆ",
+ "rcshowhidemine-hide": "ದೆಂಗಾವು",
"rclinks": "ದುಂಬುದ $2 ದಿನೊಲೆಡ್ ಮಲ್ತಿನ $1 ಕಡೆತ ಬದಲಾವಣೆಲೆನ್ ತೂಲೆ <br />$3",
"diff": "ವ್ಯತ್ಯಾಸ",
"hist": "ಇತಿಹಾಸ",
@@ -540,6 +581,7 @@
"newpageletter": "ಪೊ",
"boteditletter": "ಬಾ",
"rc_categories_any": "ಒವ್ವೇ",
+ "rc-change-size-new": "$1 {{ಬಹುವಚನೊ:$1|ಬೈಟ್|ಬೈಟ್‍ಲು}}ಬದಲಾವಣೆದ ಬುಕ್ಕೊ",
"newsectionsummary": "\n/* $1 */ಪೊಸ ವಿಭಾಗ",
"rc-enhanced-expand": "ವಿವರೊಲೆನ್ ತೊಜ್ಪಾವು (ಜಾವ ಸ್ಕ್ರಿಪ್ಟ್ ಬೋಡಾಪುಂಡು)",
"rc-enhanced-hide": "ವಿವರೊಲೆನ್ ದೆಂಗಾವು",
@@ -576,7 +618,9 @@
"filehist-comment": "ಕಮೆಂಟ್",
"imagelinks": "ಫೈಲ್ ಲಿಂಕ್’ಲು",
"linkstoimage": "ಈ ಫೈಲ್’ಗ್ ತಿರ್ತ್’ದ ಈ {{PLURAL:$1|ಪುಟ|$1 ಪುಟೊಲು}} ಲಿಂಕ್ ಕೊರ್ಪುಂಡು.",
+ "nolinkstoimage": "ಈ ಫೈಲ್‍ಗ್ ಸಂಪರ್ಕ ಉಪ್ಪುನ ವಾ ಪುಟಲಾ ಇಜ್ಜಿ.",
"sharedupload": "ಈ ಫೈಲ್’ನ್ ಮಸ್ತ್ ಜನ ಪಟ್ಟ್’ದುಲ್ಲೆರ್ ಅಂಚೆನೆ ಉಂದು ಮಸ್ತ್ ಪ್ರೊಜೆಕ್ಟ್’ಲೆಡ್ ಉಪಯೋಗಡುಪ್ಪು.",
+ "upload-disallowed-here": "ಈರ್ ಈ ಕಡತನ್ ಕುಡ ಬರೆವರೆ ಸಾದ್ಯ ಇಜ್ಜಿ.",
"filedelete-comment": "ಕಾರಣ",
"filedelete-submit": "ಮಾಜಾಲೆ",
"randompage": "ಯಾದೃಚ್ಛಿಕ ಪುಟ",
@@ -595,13 +639,14 @@
"pager-older-n": "{{PLURAL:$1|ಪರತ್ತ್ ೧|ಪರತ್ತ್ $1}}",
"booksources": "ಪುಸ್ತಕೊಲ್ದ ಮೂಲ",
"booksources-search-legend": "ಪುಸ್ತಕೊದ ಮೂಲೊನು ನಾಡ್ಲ",
- "booksources-go": "ಪೋ",
+ "booksources-search": "ನಾಡ್‘ಲೆ",
"log": "ದಾಖಲೆಲು",
"allpages": "ಪೂರಾ ಪೂಟೊಲು",
"allpagesfrom": "ಇಂದೆರ್ದ್ ಶುರುವಾಪುನ ಪುಟೊಲೆನ್ ತೊಜ್ಪಾವು:",
"allpagesto": "ಇಂದೆರ್ದ್ ಅಂತ್ಯ ಆಪುನ ಪುಟೊಲೆನ್ ತೊಜ್ಪಾವು:",
"allarticles": "ಪೂರಾ ಲೇಖನೊಲು",
"allpagessubmit": "ಪೋ",
+ "categories": "ವರ್ಗೊಲು",
"listgrouprights-members": "(ಸದಸ್ಯೆರ್ನ ಪಟ್ಟಿ)",
"emailuser": "ಈ ಸದಸ್ಯೆರೆಗ್ ಇ-ಮೈಲ್ ಕಡಪುಡ್ಲೆ",
"watchlist": "ವೀಕ್ಷಣಾ ಪಟ್ಟಿ",
@@ -623,7 +668,7 @@
"namespace": "ನೇಮ್-ಸ್ಪೇಸ್:",
"invert": "ಆಯ್ಕೆನ್ ತಿರ್ಗಾಲೆ",
"blanknamespace": "(ಮುಖ್ಯ)",
- "contributions": "ಸದಸ್ಯೆರ್ನ ಕಾಣಿಕೆಲು",
+ "contributions": "{{$1ಸದಸ್ಯೆರ್ನ}} ಕಾಣಿಕೆಲು",
"contributions-title": "$1 ಗ್ ಸದಸ್ಯೆರ್ನ ಕಾಣಿಕೆ",
"mycontris": "ಎನ್ನ ಕಾಣಿಕೆಲು",
"contribsub2": "$1 ($2) ಗ್",
@@ -644,7 +689,7 @@
"nolinkshere": "'''[[:$1]]''' ಗ್ ವಾ ಪುಟೊಲುಲಾ ಲಿಂಕ್ ಕೊರ್ಪುಜಿ.",
"isredirect": "ಪುನರ್ನಿರ್ದೇಶನ ಪುಟ",
"istemplate": "ಸೇರ್ಪಡೆ",
- "isimage": "ಚಿತ್ರ ಕೊಂಡಿ",
+ "isimage": "ಫೈಲ್‍ದ ಲಿ೦ಕ್",
"whatlinkshere-prev": "{{PLURAL:$1|ದುಂಬುದ|ದುಂಬುದ $1}}",
"whatlinkshere-next": "{{PLURAL:$1|ಬೊಕ್ಕದ|ಬೊಕ್ಕದ $1}}",
"whatlinkshere-links": "← ಲಿಂಕ್’ಲು",
@@ -676,6 +721,7 @@
"tooltip-pt-mycontris": "ಎನ್ನ ಕಾಣಿಕೆಲ್ದ ಪಟ್ಟಿ",
"tooltip-pt-login": "ಈರ್ ಲಾಗ್ ಇನ್ ಆವೊಡುಂದು ಕೋರೊಂದುಲ್ಲ, ಆಂಡ ಉಂದು ದಾಲ ಕಡ್ಡಾಯ ಅತ್ತ್.",
"tooltip-pt-logout": "ಲಾಗ್ ಔಟ್",
+ "tooltip-pt-createaccount": "ನಿಕುಲು ಪೊಸ ಖಾತೆ ಸುರುಮಲ್ತ್‍ದ್ ಲಾಗಿನ್ ಆಪುನೈನ್ ಸ್ವಾಗತ ಮಲ್ಪುವೊ, ಆಂಡಲಾ ಉಂದು ಕಡ್ಡಾಯ ಅತ್ತ್.",
"tooltip-ca-talk": "ಮಾಹಿತಿ ಪುಟೊತ ಬಗ್ಗೆ ಚರ್ಚೆ",
"tooltip-ca-edit": "ಈ ಪುಟೊನು ಈರ್ ಸಂಪಾದನೆ ಮಲ್ಪೊಲಿ. ಸೇವ್ ಮಲ್ಪುನ ದುಂಬು ಮುನ್ನೋಟದ ಉಪಯೊಗ ಮನ್ತೊನ್ಲೆ.",
"tooltip-ca-addsection": "ಪೊಸ ಸೆಶನ್ನ್ ಶರು ಮಲ್ಪುಲೆ",
@@ -724,22 +770,37 @@
"tooltip-upload": "ಅಪ್ಲೋಡ್ ಸುರು ಮಲ್ಪು",
"tooltip-rollback": "\"Rollback\", ಈ ಪುಟದ ಕರಿನ ಬದಾಲವಣೆಗ್ ಒ೦ಜಿ ಕ್ಲಿಕ್ ಡ್ ಕೊನೊಪು೦ಡು",
"tooltip-undo": "\"Undo\" ಈ ಬದಲಾವಣೆನ್ ದೆತೊನುಜಿ ಬುಕ ಪ್ರಿವ್ಯೂ ಮೋಡ್ ಡ್ ಬದಲಾವಣೆ ಮಲ್ಪೆರ್ ಕೊನೊಪು೦ಡು. ಅ೦ಚೆನೆ ಸಮ್ಮರಿ ಡ್ ಬದಲಾವಣೆ ಗ್ ಕಾರಣ ಕೊರ್ರ್‍ಎ ಆಪು೦ಡು.",
+ "tooltip-summary": "ಒಂಜಿ ಎಲ್ಯ ಸಾರಾಂಶ ಕೊರ್ಲೆ",
+ "pageinfo-toolboxlink": "ಪುಟೊತ ಮಾಹಿತಿ",
"previousdiff": "← ದುಂಬುದ ಸಂಪಾದನೆ",
"nextdiff": "ಪೊಸ ಎಡಿಟ್ →",
"file-info-size": "$1 × $2 ಪಿಕ್ಸೆಲ್, ಫೈಲ್’ದ ಗಾತ್ರ: $3, MIME ಪ್ರಕಾರ: $4",
"file-nohires": "ಇಂದೆರ್ದ್ ಜಾಸ್ತಿ ವಿವರವಾಯಿನ ನೋಟ ಇಜ್ಜಿ.",
"svg-long-desc": "ಎಸ್.ವಿ.ಜಿ ಫೈಲ್, ಸುಮಾರಾದ್ $1 × $2 ಪಿಕ್ಸೆಲ್, ಫೈಲ್’ದ ಗಾತ್ರ: $3",
- "show-big-image": "ಪೂರ್ತಿ ರೆಸೊಲ್ಯೂಶನ್",
+ "show-big-image": "ಮೂಲ ಕಡತ",
+ "show-big-image-size": "$1 × $2 ಪಿಕ್ಸೆಲ್‌ಸ್",
"bad_image_list": "ವ್ಯವಸ್ಥೆದ ಆಕಾರ ಈ ರೀತಿ ಉಂಡು:\n\nಪಟ್ಟಿಡುಪ್ಪುನಂಚಿನ ದಾಖಲೆಲೆನ್ (* ರ್ದ್ ಶುರು ಆಪುನ ಸಾಲ್’ಲು) ಮಾತ್ರ ಪರಿಗಣನೆಗ್ ದೆತೊನೆರಾಪುಂಡು.\nಪ್ರತಿ ಸಾಲ್’ದ ಶುರುತ ಲಿಂಕ್ ಒಂಜಿ ದೋಷ ಉಪ್ಪುನಂಚಿನ ಫೈಲ್’ಗ್ ಲಿಂಕಾದುಪ್ಪೊಡು.\nಅವ್ವೇ ಸಾಲ್’ದ ಶುರುತ ಪೂರಾ ಲಿಂಕ್’ಲೆನ್ ಪರಿಗನೆರ್ದ್ ದೆಪ್ಪೆರಾಪುಂಡು, ಪಂಡ ಓವು ಪುಟೊಲೆಡ್ ಫೈಲ್’ದ ಬಗ್ಗೆ ಬರ್ಪುಂಡೋ ಔಲು.",
"metadata": "ಮೇಲ್ದರ್ಜೆ ಮಾಹಿತಿ",
"metadata-help": "ಈ ಫೈಲ್’ಡ್ ಜಾಸ್ತಿ ಮಾಹಿತಿ ಉಂಡು. ಪ್ರಾಯಶಃ ಫೈಲ್’ನ್ ಉಂಡು ಮಲ್ಪೆರೆ ಉಪಯೋಗ ಮಲ್ತಿನ ಡಿಜಿಟಲ್ ಕ್ಯಾಮೆರರ್ದ್ ಅತ್ತ್’ನ್ಡ ಸ್ಕ್ಯಾನರ್ ರ್ದ್ ಈ ಮಾಹಿತಿ ಬೈದ್’ನ್ಡ್.\nಮೂಲಪ್ರತಿರ್ದ್ ಈ ಫೈಲ್ ಬದಲಾದಿತ್ತ್’ನ್ಡ, ಈ ಮಾಹಿತಿ ಬದಲಾತಿನ ಫೈಲ್’ದ ವಿವರೊಲೆಗ್ ಸರಿಯಾದ್ ಹೊಂದಂದೆ ಉಪ್ಪು.",
"metadata-expand": "ವಿಸ್ತಾರವಾಯಿನ ವಿವರೊಲೆನ್ ತೊಜ್ಪಾವು",
"metadata-collapse": "ವಿಸ್ತಾರವಾಯಿನ ವಿವರೊಲೆನ್ ದೆಂಗಾವು",
- "metadata-fields": "ಈ ಸಂದೇಶೊಡು ಪಟ್ಟಿ ಮಲ್ತಿನಂಚಿನ EXIF ಮೆಟಡೇಟ ಮಾಹಿತಿನ್ ಚಿತ್ರ ಪುಟೊಕು ಸೇರ್ಪಾಯೆರೆ ಆವೊಂದುಂಡು. ಪುಟೊಟು ಮೆಟಡೇಟ ಮಾಹಿತಿದ ಪಟ್ಟಿನ್ ದೆಪ್ಪುನಗ ಉಂದು ತೋಜುಂಡು.\nಒರಿದನವು ಮೂಲಸ್ಥಿತಿಟ್ ಅಗೋಚರವಾದುಪ್ಪುಂಡು.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "ಪೂರ",
+ "metadata-fields": "ಈ ಸಂದೇಶೊಡು ಪಟ್ಟಿ ಮಲ್ತಿನಂಚಿನ EXIF ಮಿತ್ತ ದರ್ಜೆದ ಮಾಹಿತಿನ್ ಚಿತ್ರ ಪುಟೊಕು ಸೇರ್ಪಾಯೆರೆ ಆವೊಂದುಂಡು. ಪುಟೊಟು ಮಿತ್ತ ದರ್ಜೆ ಮಾಹಿತಿದ ಪಟ್ಟಿನ್ ದೆಪ್ಪುನಗ ಉಂದು ತೋಜುಂಡು.\nಒರಿದನವು ಮೂಲಸ್ಥಿತಿಟ್ ಅಗೋಚರವಾದುಪ್ಪುಂಡು.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude \n* gpsaltitude",
+ "exif-datetime": "ಕಡೊತೊನು ಬದಲಾವಣೆ ಮಲ್ತ್‍ನ ದಿನಾಂಕೊ ಬೊಕ್ಕ ಸಮಯೊ",
+ "exif-make": "ಕ್ಯಾಮೆರಾದ ತಯಾರೆಕೆರ್",
+ "exif-model": "ಕ್ಯಾಮೆರಾ ಮಾದರಿ",
+ "exif-software": "ಉಪಯೋಗ ಮಲ್ತಿನ ತಂತ್ರಾಂಶ",
+ "exif-exifversion": "Exif ಆವೃತ್ತಿ",
+ "exif-datetimeoriginal": "ಮಾಹಿತಿ ಸೃಷ್ಟಿಯಾಯಿನ ದಿನಾಂಕೊ ಬೊಕ್ಕ ಸಮಯ",
+ "exif-datetimedigitized": "ಗಣಕೀಕರಣದ ದಿನಾಂಕೊ ಬೊಕ್ಕ ಸಮಯೊ",
+ "exif-orientation-1": "ಸಾಧಾರಣ",
"namespacesall": "ಪೂರಾ",
"monthsall": "ಪೂರಾ",
"watchlisttools-view": "ಪ್ರಸ್ತುತ ಬದಲಾವಣೆಲ್ ತೋಜಾಲೆ",
"watchlisttools-edit": "ವೀಕ್ಷಣಾಪಟ್ಟಿನ್ ತೂಲೆ ಬೊಕ್ಕ ಎಡಿಟ್ ಮಲ್ಪುಲೆ",
- "specialpages": "ವಿಷೇಶ ಪುಟೊಲು"
+ "specialpages": "ವಿಷೇಶ ಪುಟೊಲು",
+ "tag-list-wrapper": "([[ವಿಸೇಸೊ:ಟ್ಯಾಗುಲು|{{ಬಹುವಚನೊ:$1|ಟ್ಯಾಗ್|ಟ್ಯಾಗುಲು}}]]:$2)",
+ "logentry-delete-delete": "$1 {{GENDER:$2|ಮಾಜಾದ್‍ಂಡ್}} ಪುಟ $3",
+ "logentry-newusers-create": "ಬಳಕೆದಾರ ಖಾತೆ $1 ನ್ನು {{GENDER:$2|ಸೃಷ್ಟಿ ಮಲ್ತ್‍ದುಂಡು}}",
+ "logentry-upload-upload": "$1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಲ್ತ್‍ದೆರ್}} $3",
+ "searchsuggest-search": "ನಾಡ್‍ಲೆ"
}
diff --git a/languages/i18n/te.json b/languages/i18n/te.json
index 35f166ba..9838a435 100644
--- a/languages/i18n/te.json
+++ b/languages/i18n/te.json
@@ -20,7 +20,9 @@
"לערי ריינהארט",
"రహ్మానుద్దీన్",
"రాకేశ్వర",
- "వైజాసత్య"
+ "వైజాసత్య",
+ "아라",
+ "Macofe"
]
},
"tog-underline": "లంకె క్రీగీత:",
@@ -47,7 +49,7 @@
"tog-shownumberswatching": "వీక్షకుల సంఖ్యను చూపు",
"tog-oldsig": "ప్రస్తుత సంతకం:",
"tog-fancysig": "సంతకాన్ని వికీపాఠ్యంగా తీసుకో (ఆటోమెటిక్‌ లింకు లేకుండా)",
- "tog-uselivepreview": "వెనువెంట మునుజూపును వాడు (ప్రయోగాత్మకం)",
+ "tog-uselivepreview": "తాజా మునుజూపును వాడు",
"tog-forceeditsummary": "దిద్దుబాటు సారాంశం ఖాళీగా ఉంటే ఆ విషయాన్ని నాకు సూచించు",
"tog-watchlisthideown": "నా మార్పులను వీక్షణా జాబితాలో చూపించొద్దు",
"tog-watchlisthidebots": "బాట్లు చేసిన మార్పులను నా వీక్షణా జాబితాలో చూపించొద్దు",
@@ -222,6 +224,7 @@
"otherlanguages": "ఇతర భాషలలో",
"redirectedfrom": "($1 నుండి మళ్ళించబడింది)",
"redirectpagesub": "దారిమార్పు పేజీ",
+ "redirectto": "దారి మళ్ళింపు:",
"lastmodifiedat": "ఈ పేజీలో చివరి మార్పు $1 న $2 కు జరిగింది.",
"viewcount": "ఈ పేజీ {{PLURAL:$1|ఒక్క సారి|$1 సార్లు}} దర్శించబడింది.",
"protectedpage": "సంరక్షణలోని పేజీ",
@@ -274,6 +277,8 @@
"hidetoc": "దాచు",
"collapsible-collapse": "కుదించు",
"collapsible-expand": "విస్తరించు",
+ "confirmable-yes": "అవును",
+ "confirmable-no": "కాదు",
"thisisdeleted": "$1ను చూస్తారా, పునఃస్థాపిస్తారా?",
"viewdeleted": "$1 చూస్తారా?",
"restorelink": "{{PLURAL:$1|ఒక తొలగించిన మార్పు|$1 తొలగించిన మార్పులు}}",
@@ -514,7 +519,6 @@
"passwordreset-emailsent-capture": "క్రింద చూపిన సంకేతపదం మార్పు ఈమెయిలును పంపించాం.",
"passwordreset-emailerror-capture": "కింద చూపిన సంకేతపదం మార్పు ఈమెయిలును తయారుచేసాం. కానీ దాన్ని {{GENDER:$2|వాడుకరికి}} పంపడం విఫలమైంది: $1",
"changeemail": "ఈ-మెయిలు చిరునామా మార్పు",
- "changeemail-header": "ఖాతా ఈ-మెయిల్ చిరునామాని మార్చండి",
"changeemail-text": "మీ ఈమెయిలు చిరునామాని మార్చుకోడానికి ఈ ఫారాన్ని నింపండి. ఈ మార్పుని నిర్ధారించడానికి మీ సంకేతపదాన్ని ఇవ్వాల్సివస్తుంది.",
"changeemail-no-info": "ఈ పేజీని నేరుగా చూడటానికి మీరు లాగినయి వుండాలి.",
"changeemail-oldemail": "ప్రస్తుత ఈ-మెయిలు చిరునామా:",
@@ -522,7 +526,6 @@
"changeemail-none": "(ఏమీలేదు)",
"changeemail-password": "మీ {{SITENAME}} సంకేతపదం:",
"changeemail-submit": "ఈ-మెయిల్ మార్చు",
- "changeemail-cancel": "రద్దుచేయి",
"changeemail-throttled": "మరీ ఎక్కువగా లాగిన్ ప్రయత్నాలు చేసారు.\nమళ్ళీ ప్రయత్నించే ముందు $1 ఆగండి.",
"resettokens": "టోకెన్ ను రీసెట్ చెయ్యి",
"resettokens-text": "మీ ఖాతాకు అనుబంధంగా ఉన్న గోపనీయ డేటాను చూపించే టోకెన్లను మీరు ఇక్కడ రీసెట్ చెయ్యవచ్చు.\n\nమీరా టోకెన్లను పొరపాటున ఎవరికైనా ఇచ్చి ఉన్నా, లేక మీ ఖాతా వివరాలు మరెవరికైనా తెలిసిపోయినా మీరీ పని చెయ్యాలి.",
@@ -797,7 +800,6 @@
"mergehistory-same-destination": "మూల మరియు గమ్యస్థాన పేజీలు ఒకటే కాకూడదు",
"mergehistory-reason": "కారణం:",
"mergelog": "విలీనాల చిట్టా",
- "pagemerge-logentry": "[[$1]] ను [[$2]] లోకి విలీనం చేసాం ($3 కూర్పు దాకా)",
"revertmerge": "విలీనాన్ని రద్దుచెయ్యి",
"mergelogpagetext": "ఒక పేజీ చరితాన్ని మరో పేజీ చరితం లోకి ఇటీవల చేసిన విలీనాల జాబితా ఇది.",
"history-title": "\"$1\" యొక్క కూర్పుల చరిత్ర",
@@ -838,6 +840,7 @@
"search-result-category-size": "{{PLURAL:$1|1 సభ్యుడు|$1 సభ్యులు}} ({{PLURAL:$2|1 ఉవవర్గం|$2 ఉపవర్గాలు}}, {{PLURAL:$3|1 దస్త్రం|$3 దస్త్రాలు}})",
"search-redirect": "(దారిమార్పు $1)",
"search-section": "(విభాగం $1)",
+ "search-category": "(వర్గం $1)",
"search-file-match": "(ఫైలు విషయంతో సరిపోలుతోంది)",
"search-suggest": "మీరు అంటున్నది ఇదా: $1",
"search-interwiki-caption": "సోదర ప్రాజెక్టులు",
@@ -848,7 +851,7 @@
"searchall": "అన్నీ",
"showingresults": "#<strong>$2</strong> నుండి మొదలుకొని {{PLURAL:$1|</strong>ఒక్క</strong> ఫలితాన్ని|<strong>$1</strong> ఫలితాలను}} కింద చూపించాం.",
"showingresultsinrange": "#<strong>$2</strong> నుండి #<strong>$3</strong> వరకు ఉన్న ఫలితాల శ్రేణి నుండి {{PLURAL:$1|<strong>ఒక్క</strong> ఫలితం|<strong>$1</strong> ఫలితాల}} వరకు కింద చూపించాం.",
- "showingresultsheader": "<strong>$4</strong> కోసం వచ్చిన ఫలితాలు {{PLURAL:$5|<strong>$3</strong> లో <strong>$1</strong>|</strong>$3</strong> లో <strong>$1 - $2</strong>}}",
+ "search-showingresults": "{{PLURAL:$4|<strong>$3</strong>{{PLURAL:$3|కి|లో}} <strong>$1</strong> ఫలితం|<strong>$3</strong>లో <strong>$1 - $2</strong> ఫలితాలు}}",
"search-nonefound": "మీ ప్రశ్నకి సరిపోలిన ఫలితాలేమీ లేవు.",
"powersearch-legend": "నిశితమైన అన్వేషణ",
"powersearch-ns": "ఈ పేరుబరుల్లో వెతుకు:",
@@ -1133,7 +1136,7 @@
"recentchanges-legend-heading": "'''సూచిక :'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)",
"rcnotefrom": "<strong>$2</strong> నుండి జరిగిన మార్పులు (<strong>$1</strong> వరకు) కింద చూపబడ్డాయి.",
- "rclistfrom": "$3, $2 నుండి జరిగిన మార్పులను చూపించు",
+ "rclistfrom": "$3, $2 కు ముందు జరిగిన మార్పులను చూపించు",
"rcshowhideminor": "చిన్న మార్పులను $1",
"rcshowhideminor-show": "చూపించు",
"rcshowhideminor-hide": "దాచు",
@@ -1347,6 +1350,7 @@
"license-nopreview": "(మునుజూపు అందుబాటులో లేదు)",
"upload_source_url": " (సార్వజనికంగా అందుబాటులో ఉన్న, సరైన URL)",
"upload_source_file": " (మీ కంప్యూటర్లో ఒక ఫైలు)",
+ "listfiles-delete": "తొలగించు",
"listfiles-summary": "ఈ ప్రత్యేక పేజీ, ఎక్కించిన ఫైళ్ళన్నిటినీ చూపిస్తుంది.",
"listfiles_search_for": "మీడియా పేరుకై వెతుకు:",
"imgfile": "దస్త్రం",
@@ -1437,12 +1441,12 @@
"randomincategory": "వర్గంలోని యాదృచ్చిక పేజీ",
"randomincategory-invalidcategory": "\"$1\" అనేది సరైన పర్గం పేరు కాదు.",
"randomincategory-nopages": "[[:Category:$1|$1]] వర్గంలో పేజీలేమీ లేవు.",
+ "randomincategory-category": "వర్గం:",
"randomredirect": "యాదృచ్చిక దారిమార్పు",
"randomredirect-nopages": "\"$1\" పేరుబరిలో దారిమార్పులేమీ లేవు.",
"statistics": "గణాంకాలు",
"statistics-header-pages": "పేజీ గణాంకాలు",
"statistics-header-edits": "మార్పుల గణాంకాలు",
- "statistics-header-views": "వీక్షణల గణాంకాలు",
"statistics-header-users": "వాడుకరులు",
"statistics-header-hooks": "ఇతర గణాంకాలు",
"statistics-articles": "విషయపు పేజీలు",
@@ -1451,13 +1455,9 @@
"statistics-files": "ఎక్కించిన దస్త్రాలు",
"statistics-edits": "{{SITENAME}}ని మొదలుపెట్టినప్పటినుండి జరిగిన మార్పులు",
"statistics-edits-average": "పేజీకి సగటు మార్పులు",
- "statistics-views-total": "మొత్తం వీక్షణలు",
- "statistics-views-total-desc": "ఉనికిలో లేని పుటలకు మరియు ప్రత్యేక పుటలకు వచ్చిన సందర్శనలని కలుపలేదు",
- "statistics-views-peredit": "ఒక మార్పుకి వీక్షణలు",
"statistics-users": "నమోదైన [[Special:ListUsers|వాడుకరులు]]",
"statistics-users-active": "క్రియాశీల వాడుకరులు",
"statistics-users-active-desc": "గత {{PLURAL:$1|రోజు|$1 రోజుల}}లో పని చేసిన వాడుకరులు",
- "statistics-mostpopular": "ఎక్కువగా చూసిన పేజీలు",
"pageswithprop": "ఒక పేజీ లక్షణం కలిగిన పేజీలు",
"pageswithprop-legend": "ఒక పేజీ లక్షణం కలిగిన పేజీలు",
"pageswithprop-text": "ఫలానా పేజీ లక్షణం కలిగిన పేజీల జాబితాను ఈ పేజీలో చూడవచ్చు.",
@@ -1498,7 +1498,6 @@
"uncategorizedtemplates": "వర్గీకరించని మూసలు",
"unusedcategories": "ఉపయోగించని వర్గాలు",
"unusedimages": "ఉపయోగించని ఫైళ్ళు",
- "popularpages": "ప్రజాదరణ పొందిన పేజీలు",
"wantedcategories": "కోరిన వర్గాలు",
"wantedpages": "కోరిన పేజీలు",
"wantedpages-badtitle": "ఫలితాల సమితిలో తప్పుడు శీర్షిక: $1",
@@ -1560,7 +1559,7 @@
"querypage-disabled": "పనితీరు కారణాల వలన, ఈ ప్రత్యేకపేజీని అశక్తం చేసాం.",
"booksources": "పుస్తక మూలాలు",
"booksources-search-legend": "పుస్తక మూలాల కోసం వెతుకు",
- "booksources-go": "వెళ్ళు",
+ "booksources-search": "వెతుకు",
"booksources-text": "కొత్త, పాత పుస్తకాలు అమ్మే ఇతర సైట్లకు లింకులు కింద ఇచ్చాం. మీరు వెతికే పుస్తకాలకు సంబంధించిన మరింత సమాచారం కూడా అక్కడ దొరకొచ్చు:",
"booksources-invalid-isbn": "మీరిచ్చిన ISBN సరైనదిగా అనిపించుటలేదు; అసలు మూలాన్నుండి కాపీ చేయడంలో పొరపాట్లున్నాయేమో చూసుకోండి.",
"specialloguserlabel": "కర్త:",
@@ -1687,7 +1686,7 @@
"wlheader-enotif": "ఈ-మెయిలు గమనికలు పంపబడతాయి.",
"wlheader-showupdated": "మీ గత సందర్శన తరువాత మారిన పేజీలు <strong>బొద్దు</strong>గా చూపించబడ్డాయి.",
"wlnote": "$3 నాడు $4 సమయానికి, గడచిన {{PLURAL:$2|గంటలో|'''$2''' గంటలలో}} జరిగిన {{PLURAL:$1|ఒక్క మార్పు కింద ఉంది|'''$1''' మార్పులు కింద ఉన్నాయి}}.",
- "wlshowlast": "గత $1 గంటల $2 రోజుల $3 చూపించు",
+ "wlshowlast": "గత $1 గంటల $2 రోజుల చూపించు",
"watchlist-options": "వీక్షణ జాబితా ఎంపికలు",
"watching": "గమనిస్తున్నారు...",
"unwatching": "గమనించడం లేదు...",
@@ -1735,7 +1734,6 @@
"delete-warning-toobig": "ఈ పేజీకి $1 {{PLURAL:$1|కూర్పుకు|కూర్పులకు}} మించిన, చాలా పెద్ద దిద్దుబాటు చరితం ఉంది. దాన్ని తొలగిస్తే {{SITENAME}}కి చెందిన డేటాబేసు కార్యాలకు ఆటంకం కలగొచ్చు; అప్రమత్తతో ముందుకుసాగండి.",
"deleting-backlinks-warning": "'''హెచ్చరిక:''' మీరు తొలగించబోతున్న పేజీకి [[Special:WhatLinksHere/{{FULLPAGENAME}}|ఇతర పేజీల]] నుండి లింకులు ఉన్నాయి లేదా ఇక్కడ నుండి ట్రాన్స్‍క్లూడు అవుతున్నాయి.",
"rollback": "దిద్దుబాట్లను రద్దుచేయి",
- "rollback_short": "రద్దుచేయి",
"rollbacklink": "రద్దుచేయి",
"rollbacklinkcount": "$1 {{PLURAL:$1|మార్పును|మార్పులను}} రద్దుచేయి",
"rollbacklinkcount-morethan": "$1 కంటే ఎక్కువ {{PLURAL:$1|మార్పును|మార్పులను}} రద్దుచేయి",
@@ -2151,12 +2149,9 @@
"import-rootpage-nosubpage": "మూలపేజీ యొక్క పేరుబరి \"$1\" ఉపపేజీలను అనుమతించదు.",
"importlogpage": "దిగుమతుల చిట్టా",
"importlogpagetext": "ఇతర వికీల నుండీ మార్పుల చరిత్రతోసహా తెచ్చిన నిర్వహణా దిగుమతులు.",
- "import-logentry-upload": "[[$1]]ను ఫైలు అప్లోడు ద్వారా దిగుమతి చేసాం",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|కూర్పు|కూర్పులు}}",
- "import-logentry-interwiki": "ఇతర వికీల నుండి $1",
"import-logentry-interwiki-detail": "$2 నుండి {{PLURAL:$1|ఒక కూర్పు|$1 కూర్పులు}}",
"javascripttest": "జావాస్క్రిప్ట్ పరీక్ష",
- "javascripttest-title": "$1 పరీక్షలు నడుస్తున్నాయి",
"javascripttest-pagetext-noframework": "ఈ పేజీ JavaScript పరీక్షల కోసం ఉద్దేశించబడింది.",
"javascripttest-pagetext-unknownframework": "తెలియని పరీక్షా ఫ్రేమ్‍వర్కు \"$1\".",
"javascripttest-pagetext-frameworks": "కింది పరీక్షా ఫ్రేమ్‍వర్కులలో ఒకదాన్ని ఎంచుకోండి: $1",
@@ -2171,6 +2166,7 @@
"tooltip-pt-mycontris": "మీ మార్పుచేర్పుల జాబితా",
"tooltip-pt-login": "మిమ్మల్ని లాగినవమని ప్రోత్సహిస్తున్నాం; కానీ అది తప్పనిసరేమీ కాదు.",
"tooltip-pt-logout": "లాగౌటవండి",
+ "tooltip-pt-createaccount": "మీరొక ఖాతాని సృష్టించుకొని ప్రవేశించటాన్ని సమర్ధిస్తున్నాము; కానీ, అది అవసరం కాదు, ఐచ్ఛికం మాత్రమే.",
"tooltip-ca-talk": "విషయపు పేజీ గురించి చర్చ",
"tooltip-ca-edit": "ఈ పేజీని మీరు సరిదిద్దవచ్చు. భద్రపరచే ముందు మునుజూపు బొత్తాన్ని వాడండి.",
"tooltip-ca-addsection": "కొత్త విభాగాన్ని మొదలుపెట్టండి",
@@ -2260,8 +2256,7 @@
"pageinfo-robot-policy": "రోబోట్లచే ఇండెక్సవుతోంది",
"pageinfo-robot-index": "అనుమతించబడింది",
"pageinfo-robot-noindex": "అనుమతించబడలేదు",
- "pageinfo-views": "వీక్షణల సంఖ్య",
- "pageinfo-watchers": "పేజీ వీక్షకుల సంఖ్య",
+ "pageinfo-watchers": "పేజీ గమనింపుదారుల సంఖ్య",
"pageinfo-few-watchers": "$1 {{PLURAL:$1|వీక్షకుడి|వీక్షకుల}} కంటే తక్కువ",
"pageinfo-redirects-name": "ఈ పేజీకి ఉన్న దారిమార్పుల సంఖ్య",
"pageinfo-subpages-name": "ఈ పేజీకి ఉన్న ఉపపేజీల సంఖ్య",
@@ -2701,7 +2696,6 @@
"exif-urgency-low": "తక్కువ ($1)",
"exif-urgency-high": "ఎక్కువ ($1)",
"exif-urgency-other": "వాడుకరి-నిర్వచిత ప్రాథాన్యత ($1)",
- "watchlistall2": "అన్నీ",
"namespacesall": "అన్నీ",
"monthsall": "అన్నీ",
"confirmemail": "ఈ-మెయిలు చిరునామా ధృవీకరించండి",
@@ -2735,6 +2729,7 @@
"confirm-watch-top": "ఈ పుటను మీ వీక్షణ జాబితాలో చేర్చాలా?",
"confirm-unwatch-button": "సరే",
"confirm-unwatch-top": "ఈ పుటను మీ వీక్షణ జాబితా నుండి తొలగించాలా?",
+ "quotation-marks": "“$1”",
"imgmultipageprev": "← మునుపటి పేజీ",
"imgmultipagenext": "తరువాతి పేజీ →",
"imgmultigo": "వెళ్ళు!",
@@ -2756,6 +2751,7 @@
"autosumm-replace": "పేజీని '$1' తో మారుస్తున్నాం",
"autoredircomment": "[[$1]]కు దారిమళ్ళించారు",
"autosumm-new": "'$1' తో కొత్త పేజీని సృష్టించారు",
+ "autosumm-newblank": "ఖాళీ పేజీని సృష్టించారు",
"lag-warn-normal": "$1 {{PLURAL:$1|క్షణం|క్షణాల}} లోపు జరిగిన మార్పులు ఈ జాబితాలో కనిపించకపోవచ్చు.",
"lag-warn-high": "అధిక వత్తిడి వలన డేటాబేసు సర్వరు వెనుకబడింది, $1 {{PLURAL:$1|క్షణం|క్షణాల}} కంటే కొత్తవైన మార్పులు ఈ జాబితాలో కనిపించకపోవచ్చు.",
"watchlistedit-normal-title": "వీక్షణ జాబితాను మార్చు",
@@ -2782,11 +2778,10 @@
"watchlisttools-edit": "వీక్షణ జాబితాను చూడండి లేదా మార్చండి",
"watchlisttools-raw": "ముడి వీక్షణ జాబితాలో మార్పులు చెయ్యి",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|చర్చ]])",
- "unknown_extension_tag": "\"$1\" అనే ట్యాగు ఈ పొడిగింతకు తెలియదు",
"duplicate-defaultsort": "హెచ్చరిక: డిఫాల్టు పేర్చు కీ \"$2\", గత డిఫాల్టు పేర్చు కీ \"$1\" ని అతిక్రమిస్తుంది.",
"version": "సంచిక",
"version-extensions": "స్థాపించిన పొడగింతలు",
- "version-skins": "అలంకారాలు",
+ "version-skins": "స్థాపించిన అలంకారాలు",
"version-specialpages": "ప్రత్యేక పేజీలు",
"version-parserhooks": "పార్సరు కొక్కాలు",
"version-variables": "చరరాశులు",
@@ -2798,10 +2793,12 @@
"version-parser-function-hooks": "పార్సరుకు కొక్కాలు",
"version-hook-name": "కొక్కెం పేరు",
"version-hook-subscribedby": "ఉపయోగిస్తున్నవి",
- "version-version": "(కూర్పు $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[పేరు లేదు]",
"version-license": "MediaWiki లైసెన్సు",
"version-ext-license": "లైసెన్సు",
"version-ext-colheader-name": "పొడిగింత",
+ "version-skin-colheader-name": "అలంకారం",
"version-ext-colheader-version": "కూర్పు",
"version-ext-colheader-license": "లైసెన్సు",
"version-ext-colheader-description": "వివరణ",
@@ -2855,6 +2852,7 @@
"specialpages-group-wiki": "డాటా మరియు పనిముట్లు",
"specialpages-group-redirects": "ప్రత్యేక పేజీల దారిమార్పులు",
"specialpages-group-spam": "స్పామ్ పనిముట్లు",
+ "specialpages-group-developer": "వికాసకుల పనిముట్లు",
"blankpage": "ఖాళీ పేజీ",
"intentionallyblankpage": "బెంచిమార్కింగు, మొదలగు వాటికై ఈ పేజీని కావాలనే ఖాళీగా వదిలాము.",
"external_image_whitelist": " #ఈ లైనును ఎలా ఉన్నదో అలాగే వదిలెయ్యండి<pre>\n#regular expression తునకలను (// ల మధ్య ఉండే భాగం)కింద పెట్టండి\n#వీటిని బయటి బొమ్మల URLలతో సరిపోల్చుతాము\n#సరిపోలిన బొమ్మలను చూపిస్తాము, మిగిలినవాటి లింకులను మాత్రమే చూపిస్తాము\n##తో మొదలయ్యే లైనులు వ్యాఖ్యానాలుగా భావించబడతాయి\n#ఇది కేస్-సెన్సిటివ్\n\n#అన్ని తునకలను ఈ లైనుకు పైన ఉంచండి. ఈ లైనును ఎలా ఉన్నదో అలాగే వదిలెయ్యండి</pre>",
@@ -2940,20 +2938,22 @@
"logentry-rights-rights": "$1, $3 యొక్క గుంపు సభ్యత్వాన్ని $4 నుండి $5 కు {{GENDER:$2|మార్చారు}}",
"logentry-rights-rights-legacy": "$1, $3 యొక్క గుంపు సభ్యత్వాన్ని {{GENDER:$2|మార్చారు}}",
"logentry-rights-autopromote": "$1, $4 నుండి $5 కు ఆటోమేటిగ్గా {{GENDER:$2|ప్రమోటు చెయ్యబడ్డారు}}",
+ "logentry-upload-upload": "$1 $3 ను {{GENDER:$2|ఎక్కించారు}}",
"rightsnone": "(ఏమీలేవు)",
+ "revdelete-summary": "మార్పు సంగ్రహం",
+ "feedback-adding": "ఫీడ్‍బ్యాకును పేజీలోకి చేరుస్తున్నాం...",
+ "feedback-bugcheck": "అద్భుతం! ఇది ఇప్పటికే [$1 తెలిసిన బగ్గుల]లో లేదని సరిచూసుకోండి.",
+ "feedback-bugnew": "చూసాను. కొత్త బగ్గును నివేదించు",
"feedback-bugornote": "ఏదైనా సాంకేతిక సమస్యను మీరు వివరించదలిస్తే [$1 లోపంపై ఫిర్యాదు చెయ్యండి].\nలేదంటే, కింద ఉన్న సులువైన ఫారాన్ని వాడండి. మీ వ్యాఖ్య మీ వాడుకరిపేరుతో సహా \"[$3 $2]\" పేజీలో చేర్చబడుతుంది.",
- "feedback-subject": "విషయం:",
- "feedback-message": "సందేశం:",
"feedback-cancel": "రద్దుచేయి",
- "feedback-submit": "ప్రతిస్పందనను దాఖలుచేయి",
- "feedback-adding": "ఫీడ్‍బ్యాకును పేజీలోకి చేరుస్తున్నాం...",
+ "feedback-close": "పూర్తయ్యింది",
"feedback-error1": "లోపం: API నుండి గుర్తుపట్టలేని ఫలితం",
"feedback-error2": "దోషము: సవరణ విఫలమైంది",
"feedback-error3": "లోపం: API నుండి ప్రతిస్పందన లేదు",
+ "feedback-message": "సందేశం:",
+ "feedback-subject": "విషయం:",
+ "feedback-submit": "దాఖలుచెయ్యి",
"feedback-thanks": "కృతజ్ఞతలు! మీ ప్రతిస్పందనను “[$2 $1]” పేజీలో చేర్చాం.",
- "feedback-close": "పూర్తయ్యింది",
- "feedback-bugcheck": "అద్భుతం! ఇది ఇప్పటికే [$1 తెలిసిన బగ్గుల]లో లేదని సరిచూసుకోండి.",
- "feedback-bugnew": "చూసాను. కొత్త బగ్గును నివేదించు",
"searchsuggest-search": "వెతుకు",
"searchsuggest-containing": "కలిగియున్న...",
"api-error-badaccess-groups": "ఈ వికీ లోనికి దస్త్రాలను ఎక్కించే అనుమతి మీకు లేదు.",
@@ -3028,5 +3028,26 @@
"expand_templates_remove_nowiki": "ఫలితంలో <nowiki> ట్యాగులను అణచిపెట్టు",
"expand_templates_generate_xml": "XML పార్స్ ట్రీని చూపించు",
"expand_templates_generate_rawhtml": "ముడి HTML ను చూపించు",
- "expand_templates_preview": "మునుజూపు"
+ "expand_templates_preview": "మునుజూపు",
+ "pagelang-name": "పేజీ",
+ "pagelang-language": "భాష",
+ "pagelang-use-default": "అప్రమేయ భాషను వాడు",
+ "special-characters-group-latin": "లాటిన్",
+ "special-characters-group-latinextended": "విస్తరిత లాటిన్",
+ "special-characters-group-ipa": "ఐపిఎ",
+ "special-characters-group-symbols": "గుర్తులు",
+ "special-characters-group-greek": "గ్రీకు",
+ "special-characters-group-cyrillic": "సిరిలిక్",
+ "special-characters-group-arabic": "అరబిక్",
+ "special-characters-group-persian": "పర్షియన్",
+ "special-characters-group-hebrew": "హిబ్రూ",
+ "special-characters-group-bangla": "బంగ్లా",
+ "special-characters-group-tamil": "తమిళం",
+ "special-characters-group-telugu": "తెలుగు",
+ "special-characters-group-sinhala": "సింహళ",
+ "special-characters-group-gujarati": "గుజరాతీ",
+ "special-characters-group-devanagari": "దేవనాగరి",
+ "special-characters-group-thai": "థాయి",
+ "special-characters-group-lao": "లావో",
+ "special-characters-group-khmer": "ఖ్మెర్"
}
diff --git a/languages/i18n/tet.json b/languages/i18n/tet.json
index 20ab62d4..5687b5c5 100644
--- a/languages/i18n/tet.json
+++ b/languages/i18n/tet.json
@@ -3,7 +3,8 @@
"authors": [
"MF-Warburg",
"Nemo bis",
- "Reedy"
+ "Reedy",
+ "아라"
]
},
"tog-underline": "Subliña ligasaun sira:",
@@ -434,7 +435,6 @@
"ancientpages": "Pájina tuan liu hotu sira",
"move": "Book",
"movethispage": "Book pájina ne'e",
- "booksources-go": "Bá",
"specialloguserlabel": "Uza-na'in ne'ebé halo:",
"speciallogtitlelabel": "Objetivu (títulu ka uza-na'in):",
"allpages": "Pájina hotu",
@@ -468,7 +468,7 @@
"watchthispage": "Hateke pájina ne'e",
"unwatch": "La hateke ona",
"watchlist-details": "{{PLURAL:$1|Pájina ida (1)|Pájina $1}} iha Ita-nia \"lista hateke\" (la ho pájina diskusaun).",
- "wlshowlast": "Hatudu $1 hora $2 loron ikus $3",
+ "wlshowlast": "Hatudu $1 hora $2 loron ikus",
"watching": "Hateke...",
"unwatching": "La hateke...",
"enotif_impersonal_salutation": "Uza-na'in {{SITENAME}} nian",
@@ -659,7 +659,6 @@
"exif-urgency-normal": "Normál ($1)",
"exif-urgency-low": "Kraik ($1)",
"exif-urgency-high": "Aas ($1)",
- "watchlistall2": "hotu",
"namespacesall": "hotu",
"monthsall": "hotu",
"confirm_purge_button": "OK",
@@ -679,7 +678,7 @@
"version": "Versaun",
"version-specialpages": "Pájina espesiál",
"version-other": "Seluk",
- "version-version": "(Versaun $1)",
+ "version-version": "($1)",
"version-license": "Lisensa",
"version-poweredby-others": "ema seluk",
"version-software-product": "Produtu",
diff --git a/languages/i18n/tg-cyrl.json b/languages/i18n/tg-cyrl.json
index 68e18e74..44b6978a 100644
--- a/languages/i18n/tg-cyrl.json
+++ b/languages/i18n/tg-cyrl.json
@@ -10,7 +10,8 @@
"Soroush",
"Urhixidur",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Пайвандҳо хаткашида:",
@@ -368,6 +369,8 @@
"userlogin-resetlink": "Ҷузъиёти вурудро фаромӯш кардаед?",
"userlogin-resetpassword-link": "Гузарвожаро фаромӯш кардед?",
"userlogin-helplink2": "Роҳнамои вуруд",
+ "userlogin-loggedin": "Шумо дар ҳол чун {{GENDER:$1|$1}} вуруд шудаед.\nБо истифода аз форми зер чун корбари дигар вориди систем шавед.",
+ "userlogin-createanother": "Эҷоди ҳисоби дигар",
"createacct-emailrequired": "Нишонаи email",
"createacct-emailoptional": "Нишони email (ихтиёрӣ)",
"createacct-email-ph": "Нишони email худро ворид кунед",
@@ -671,7 +674,6 @@
"mergehistory-comment": "[[:$1]] ба [[:$2]] идғом шуд: $3",
"mergehistory-reason": "Сабаб:",
"mergelog": "Гузориши идғом",
- "pagemerge-logentry": "идгом шуд [[$1]] дар [[$2]] (нусхаҳо то $3)",
"revertmerge": "Вогардонии идғом",
"mergelogpagetext": "Дар зер феҳристи идғоми охирини таърихи як саҳифаро ба дигар саҳифаро мебинед.",
"history-title": "Таърихчаи вироишҳои \"$1\"",
@@ -1111,16 +1113,13 @@
"statistics": "Омор\\Статистика",
"statistics-header-pages": "Саҳифаи омор",
"statistics-header-edits": "Вироиши омор",
- "statistics-header-views": "Дидани омор",
"statistics-header-users": "Омори корбарон",
"statistics-header-hooks": "Дигар омор",
"statistics-articles": "Саҳифаҳои мӯҳтаво",
"statistics-pages": "Саҳифаҳо",
"statistics-files": "Парвандаҳои боршуда",
- "statistics-views-total": "Маҷмуаъи боздидҳо",
"statistics-users": "[[Special:ListUsers|Корбарони]] сабтиномшуда",
"statistics-users-active": "Корбарони фаъол",
- "statistics-mostpopular": "Саҳифаҳои бисёр назаркардашуда",
"pageswithprop-submit": "Бирав",
"doubleredirects": "Тағйири масирҳои дутоӣ",
"doubleredirectstext": "Ҳар сатр дар бар дорандаи пайвандҳое ба тағйири масири аввал ва дувум ва ҳамчунин хати нахуст тагйири масири дувум аст. Маъмулан саҳифаи мақсади воқеъӣ, ки нахустин тағйири масир бояд ба он бошад ба ин гуна мушаххас мешавад.",
@@ -1149,7 +1148,6 @@
"uncategorizedtemplates": "Шаблонҳое, ки ба ягон гурӯҳ дохил нестанд",
"unusedcategories": "Гурӯҳҳои истифоданашуда",
"unusedimages": "Файлҳои истифоданашуда",
- "popularpages": "Саҳифаҳои машҳур",
"wantedcategories": "Гурӯҳҳои дархостӣ",
"wantedpages": "Саҳифаҳои дархостӣ",
"wantedfiles": "Парвандаҳои дархостӣ",
@@ -1191,7 +1189,6 @@
"suppress": "Назорат",
"booksources": "Манбаҳои китобҳо",
"booksources-search-legend": "Ҷустуҷӯи сарчашмаҳои китоб",
- "booksources-go": "Бирав",
"booksources-text": "Дер зер феҳристи пайвандҳо ба сомонаҳое, ки китобҳои нав ва кӯҳна мефурӯшанд, оварда шудааст. Мумкин аст, иттилооти бештарро дар бораи китобҳои ҷустуҷӯ кардаатон дошта бошанд:",
"specialloguserlabel": "Иҷрокунанда:",
"speciallogtitlelabel": "Ҳадаф (унвон ё корбар):",
@@ -1273,7 +1270,7 @@
"wlheader-enotif": "Иттилоорасонии тариқи почтаи электронӣ (E-mail) фаъол шудааст.",
"wlheader-showupdated": "Саҳифаҳое, ки пас аз охирин сар заданатон ба онҳо тағйир кардаанд '''пурранг''' нишон дода шудаанд",
"wlnote": "Дар зер {{PLURAL:$1|охирин тағйир|'''$1''' охирин тағйирот}} дар $2 соати охир {{PLURAL:омадааст|омадаанд}}.",
- "wlshowlast": "Намоиши охирин $1 соат $2 рӯзҳо $3",
+ "wlshowlast": "Намоиши охирин $1 соат $2 рӯзҳо",
"watchlist-options": "Ихтиёроти феҳристи пайгириҳо",
"watching": "Пайгири...",
"unwatching": "Тавқифи пайгири...",
@@ -1309,7 +1306,6 @@
"delete-toobig": "Ин саҳифа таърихчаи бузурге дорад, ки шомили беш аз $1 вироиш аст. Ҳазфи ин гуна саҳифаҳо барои пешгири аз шикастани тасодуфӣ дар {{SITENAME}} маҳдуд шудааст.",
"delete-warning-toobig": "Ин саҳифа таърихи бузурге дорад, ки шомили беш аз $1 вироиш аст. Ҳазфи ин саҳифа метавонад ихтилол ба амалгари пойгоҳи додаи {{SITENAME}} бишавад; лутфан бо эҳтиёт иқдом кунед.",
"rollback": "Вогардонии вироишҳо",
- "rollback_short": "Вогард",
"rollbacklink": "вогардони",
"rollbackfailed": "Вогардони нашуд",
"cantrollback": "Наметавон вироишро вогардонд; охирин ҳиссагузор танҳо муаллифи ин мақола аст.",
@@ -1612,9 +1608,7 @@
"import-invalid-interwiki": "Аз викии мушаххасшуда наметавон воридот кард.",
"importlogpage": "Вориди гузоришҳо",
"importlogpagetext": "Ворид кардани саҳифаҳо бо ҳамроҳи таърихчаи вироиши онҳо аз викиҳои дигар.",
- "import-logentry-upload": "[[$1]] аз тариқи боргузории парванда, ворид шуд",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|нусха|нусха}}",
- "import-logentry-interwiki": "$1 трансвикишуда",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|нусха|нусха}} аз $2",
"tooltip-pt-userpage": "Саҳифаи корбарии шумо",
"tooltip-pt-anonuserpage": "Саҳифаи корбари IP, ки бо он шумо вироиш мекунед",
@@ -1968,7 +1962,6 @@
"exif-iimcategory-pol": "Сиёсат",
"exif-iimcategory-rel": "Дин ва ибодат",
"exif-iimcategory-spo": "Варзиш",
- "watchlistall2": "ҳама",
"namespacesall": "ҳама",
"monthsall": "ҳама",
"confirmemail": "Тасдиқи нишонаи почтаи электронӣ",
@@ -2042,7 +2035,6 @@
"iranian-calendar-m10": "Ҷадӣ",
"iranian-calendar-m11": "Далв",
"iranian-calendar-m12": "Ҳут",
- "unknown_extension_tag": "Бачасби ношиноси афзунаи \"$1\"",
"version": "Нусхаи Медиавики",
"version-extensions": "Афзунаҳои насбшуда",
"version-specialpages": "Саҳифаҳои вижа",
@@ -2055,7 +2047,7 @@
"version-parser-function-hooks": "Қолабҳои амалгарҳои таҷзеҳгар",
"version-hook-name": "Номи қолаб",
"version-hook-subscribedby": "Воридшуда тавассути",
- "version-version": "(Нусха $1)",
+ "version-version": "($1)",
"version-license": "Иҷозатномаи МедиаВики",
"version-ext-colheader-license": "Иҷозатнома",
"version-ext-colheader-credits": "Муаллифон",
@@ -2079,6 +2071,7 @@
"specialpages-group-pagetools": "Абзорҳои саҳифа",
"specialpages-group-wiki": "Додаҳо ва абзорҳо",
"specialpages-group-redirects": "Дар ҳоли тағйири масири саҳифаҳои вижа",
+ "specialpages-group-developer": "Абзорҳои тавсиядиҳандагон",
"blankpage": "Саҳифаи холӣ",
"tag-filter": "Филтри [[Special:Tags|барчасбҳо]]:",
"tags-active-header": "Фаъол?",
@@ -2102,11 +2095,12 @@
"revdelete-restricted": "маҳдудиятҳо ба мудирон амалӣ шуданд",
"revdelete-unrestricted": "маҳдудиятҳо аз мудирон бардошта шуданд",
"rightsnone": "(ҳеҷ)",
- "feedback-subject": "Мавзӯъ:",
- "feedback-message": "Пайём:",
+ "revdelete-summary": "вироиши хулоса",
"feedback-cancel": "Лағв",
- "feedback-submit": "Ирсоли Пешниҳод",
"feedback-close": "Анҷом шуд.",
+ "feedback-message": "Пайём:",
+ "feedback-subject": "Мавзӯъ:",
+ "feedback-submit": "Ирсол",
"expandtemplates": "Бастдодани шаблонҳо",
"expand_templates_intro": "Ин саҳифаи вижа матнеро дарёфт карда ва тамоми шаблонҳои ба кор рафта дар онро ба таври бозгаште баст медиҳад. Ҳамчунин тобеҳои таҷзеҳ\n<nowiki>{{</nowiki>#language:...}}, ва мутағйирҳое чун\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash;ро ҳам баст медиҳад – дар воқеъ тақрибан ҳар чиро ки дохили ду акулот бошад.\nИн кор бо садо задани марҳилаи таҷзеҳи марбут дар худи МедиаВики сурат мегирад.",
"expand_templates_title": "Унвони мавзӯъ, барои {{FULLPAGENAME}} ва ғайра.:",
diff --git a/languages/i18n/tg-latn.json b/languages/i18n/tg-latn.json
index ec2df526..c3dff497 100644
--- a/languages/i18n/tg-latn.json
+++ b/languages/i18n/tg-latn.json
@@ -513,7 +513,6 @@
"mergehistory-comment": "[[:$1]] ba [[:$2]] idƣom şud: $3",
"mergehistory-reason": "Sabab:",
"mergelog": "Guzorişi idƣom",
- "pagemerge-logentry": "idgom şud [[$1]] dar [[$2]] (nusxaho to $3)",
"revertmerge": "Vogardoniji idƣom",
"mergelogpagetext": "Dar zer fehristi idƣomi oxirini ta'rixi jak sahifaro ba digar sahifaro mebined.",
"history-title": "Ta'rixcai viroişhoi \"$1\"",
@@ -825,14 +824,12 @@
"statistics": "Omor\\Statistika",
"statistics-header-pages": "Sahifai omor",
"statistics-header-edits": "Viroişi omor",
- "statistics-header-views": "Didani omor",
"statistics-header-users": "Omori korbaron",
"statistics-articles": "Sahifahoi mūhtavo",
"statistics-pages": "Sahifaho",
"statistics-files": "Parvandahoi borşuda",
"statistics-users": "[[Special:ListUsers|Korbaroni]] sabtinomşuda",
"statistics-users-active": "Korbaroni fa'ol",
- "statistics-mostpopular": "Sahifahoi bisjor nazarkardaşuda",
"doubleredirects": "Taƣjiri masirhoi dutoī",
"double-redirect-fixer": "Ta'mirkori taƣjirmasirho",
"brokenredirects": "Sahifahoi kandaşudai ravonakunī",
@@ -857,7 +854,6 @@
"uncategorizedtemplates": "Şablonhoe, ki ba jagon gurūh doxil nestand",
"unusedcategories": "Gurūhhoi istifodanaşuda",
"unusedimages": "Fajlhoi istifodanaşuda",
- "popularpages": "Sahifahoi maşhur",
"wantedcategories": "Gurūhhoi darxostī",
"wantedpages": "Sahifahoi darxostī",
"wantedfiles": "Parvandahoi darxostī",
@@ -893,7 +889,6 @@
"suppress": "Nazorat",
"booksources": "Manbahoi kitobho",
"booksources-search-legend": "Çustuçūi sarcaşmahoi kitob",
- "booksources-go": "Birav",
"booksources-text": "Der zer fehristi pajvandho ba somonahoe, ki kitobhoi nav va kūhna mefurūşand, ovarda şudaast. Mumkin ast, ittilooti beştarro dar borai kitobhoi çustuçū kardaaton doşta boşand:",
"specialloguserlabel": "Korbar:",
"speciallogtitlelabel": "Sarlavha:",
@@ -965,7 +960,7 @@
"wlheader-enotif": "Ittiloorasoniji tariqi poctai elektronī (E-mail) imkonpazir ast.",
"wlheader-showupdated": "Sahifahoe, ki pas az oxirin sar zadanaton ba onho taƣjir kardaand '''purrang''' nişon doda şudaand",
"wlnote": "Dar zer {{PLURAL:$1|oxirin taƣjir|'''$1''' oxirin taƣjirot}} dar $2 soati oxir {{PLURAL:omadaast|omadaand}}.",
- "wlshowlast": "Namoişi oxirin $1 soat $2 rūzho $3",
+ "wlshowlast": "Namoişi oxirin $1 soat $2 rūzho",
"watchlist-options": "Ixtijoroti fehristi pajgiriho",
"watching": "Pajgiri...",
"unwatching": "Tavqifi pajgiri...",
@@ -996,7 +991,6 @@
"deletereason-dropdown": "*Dalelhoi umumiji hazf\n** Darxosti korbar\n** Naqzi haqqi taksir\n** Xarobkorī",
"delete-edit-reasonlist": "Viroiş hazf dalelho",
"rollback": "Vogardoniji viroişho",
- "rollback_short": "Vogard",
"rollbacklink": "vogardoni",
"rollbackfailed": "Vogardoni naşud",
"cantrollback": "Nametavon viroişro vogardond; oxirin hissaguzor tanho muallifi in maqola ast.",
@@ -1608,7 +1602,6 @@
"exif-gpsspeed-n": "Gireh",
"exif-gpsdirection-t": "Ravandi durust",
"exif-gpsdirection-m": "Ravandi magnetikī",
- "watchlistall2": "hama",
"namespacesall": "hama",
"monthsall": "hama",
"confirmemail": "Tasdiqi nişonai poctai elektronī",
@@ -1678,7 +1671,6 @@
"iranian-calendar-m10": "Çadī",
"iranian-calendar-m11": "Dalv",
"iranian-calendar-m12": "Hut",
- "unknown_extension_tag": "Bacasbi noşinosi afzunai \"$1\"",
"version": "Nusxai Mediaviki",
"version-extensions": "Afzunahoi nasbşuda",
"version-specialpages": "Sahifahoi viƶa",
@@ -1691,7 +1683,7 @@
"version-parser-function-hooks": "Qolabhoi amalgarhoi taçzehgar",
"version-hook-name": "Nomi qolab",
"version-hook-subscribedby": "Voridşuda tavassuti",
- "version-version": "(Nusxa $1)",
+ "version-version": "($1)",
"version-license": "Içozatnoma",
"version-software": "Nusxai nasbşuda",
"version-software-product": "Mahsul",
@@ -1712,6 +1704,7 @@
"specialpages-group-pagetools": "Abzorhoi sahifa",
"specialpages-group-wiki": "Viki dodaho va abzorho",
"specialpages-group-redirects": "Dar holi taƣjiri masiri sahifahoi viƶa",
+ "specialpages-group-developer": "Abzorhoi tavsijadihandagon",
"blankpage": "Sahifai xolī",
"tags-edit": "viroiş",
"dberr-info": "(Imkoni barqarori irtibot bo pojgohi doda vuçud nadorad: $1)",
@@ -1730,6 +1723,7 @@
"revdelete-restricted": "mahdudijatho ba mudiron amalī şudand",
"revdelete-unrestricted": "mahdudijatho az mudiron bardoşta şudand",
"rightsnone": "(heç)",
+ "revdelete-summary": "viroişi xulosa",
"expandtemplates": "Bastdodani şablonho",
"expand_templates_intro": "In sahifai viƶa matnero darjoft karda va tamomi şablonhoi ba kor rafta dar onro ba tavri bozgaşte bast medihad. Hamcunin tobehoi taçzeh\n<nowiki>{{</nowiki>#language:...}}, va mutaƣjirhoe cun\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash;ro ham bast medihad – dar voqe' taqriban har ciro ki doxili du akulot boşad.\nIn kor bo sado zadani marhilai taçzehi marbut dar xudi MediaViki surat megirad.",
"expand_templates_title": "Unvoni mavzū', baroi {{FULLPAGENAME}} va ƣajra.:",
diff --git a/languages/i18n/th.json b/languages/i18n/th.json
index aa49ab01..33c7d5c5 100644
--- a/languages/i18n/th.json
+++ b/languages/i18n/th.json
@@ -20,26 +20,28 @@
"לערי ריינהארט",
"จักรกฤช วงศ์สระหลวง (Jakkrit Vongsraluang) / PaePae",
"วรากร อึ้งวิเชียร (Varakorn Ungvichian)",
- "아라"
+ "아라",
+ "Pphongpan355",
+ "Macofe"
]
},
"tog-underline": "การขีดเส้นใต้ลิงก์:",
"tog-hideminor": "ซ่อนการแก้ไขเล็กน้อยในหน้าปรับปรุงล่าสุด",
- "tog-hidepatrolled": "ซ่อนการแก้ไขที่ตรวจแล้วในหน้าปรับปรุงล่าสุด",
- "tog-newpageshidepatrolled": "ซ่อนหน้าที่ตรวจแล้วจากรายการหน้าใหม่",
+ "tog-hidepatrolled": "ซ่อนการแก้ไขที่ตรวจสอบแล้วในหน้าปรับปรุงล่าสุด",
+ "tog-newpageshidepatrolled": "ซ่อนหน้าที่ตรวจสอบแล้วในรายการหน้าใหม่",
"tog-extendwatchlist": "ขยายรายการเฝ้าดูให้แสดงการเปลี่ยนแปลงทั้งหมด ไม่เพียงการเปลี่ยนแปลงล่าสุด",
"tog-usenewrc": "จัดกลุ่มการเปลี่ยนแปลงแบ่งตามหน้าในรายการปรับปรุงล่าสุดและรายการเฝ้าดู",
- "tog-numberheadings": "ใส่เลขหัวเรื่องอัตโนมัติ",
+ "tog-numberheadings": "กำหนดเลขหัวเรื่องอัตโนมัติ",
"tog-showtoolbar": "แสดงแถบเครื่องมือแก้ไข",
"tog-editondblclick": "แก้ไขหน้าเมื่อดับเบิลคลิก",
- "tog-editsectiononrightclick": "เปิดใช้งานการแก้ไขเฉพาะส่วนโดยคลิกขวาที่ชื่อเรื่องของส่วนนั้น",
+ "tog-editsectiononrightclick": "เปิดใช้งานการแก้ไขส่วนโดยคลิกขวาที่ชื่อเรื่องของส่วนนั้น",
"tog-watchcreations": "เพิ่มหน้าที่ฉันสร้างและไฟล์ที่ฉันอัปโหลดเข้ารายการเฝ้าดู",
"tog-watchdefault": "เพิ่มหน้าและไฟล์ที่ฉันแก้ไขเข้ารายการเฝ้าดู",
- "tog-watchmoves": "เพิ่มและไฟล์ที่ฉันเปลี่ยนชื่อเข้ารายการเฝ้าดู",
+ "tog-watchmoves": "เพิ่มและไฟล์ที่ฉันย้ายเข้ารายการเฝ้าดู",
"tog-watchdeletion": "เพิ่มหน้าและไฟล์ที่ฉันลบเข้ารายการเฝ้าดู",
"tog-watchrollback": "เพิ่มหน้าที่ฉันย้อนกลับฉุกเฉินเข้ารายการเฝ้าดู",
- "tog-minordefault": "กำหนดให้การแก้ไขทุกครั้งเป็นการแก้ไขเล็กน้อยโดยปริยาย",
- "tog-previewontop": "ให้ตัวอย่างการแก้ไขแสดงก่อนกล่องแก้ไข",
+ "tog-minordefault": "กำหนดการแก้ไขทุกครั้งเป็นการแก้ไขเล็กน้อยโดยปริยาย",
+ "tog-previewontop": "แสดงตัวอย่างก่อนกล่องแก้ไข",
"tog-previewonfirst": "แสดงตัวอย่างในการแก้ไขครั้งแรก",
"tog-enotifwatchlistpages": "อีเมลหาเมื่อหน้าหรือไฟล์ในรายการเฝ้าดูเปลี่ยนแปลง",
"tog-enotifusertalkpages": "อีเมลหาเมื่อมีการเปลี่ยนแปลงหน้าคุยกับผู้ใช้ของฉัน",
@@ -47,15 +49,15 @@
"tog-enotifrevealaddr": "เปิดเผยที่อยู่อีเมลของฉันในอีเมลแจ้งเตือน",
"tog-shownumberswatching": "แสดงจำนวนผู้ใช้ที่เฝ้าดู",
"tog-oldsig": "ลายเซ็นที่ใช้อยู่:",
- "tog-fancysig": "ใช้คำสั่งวิกิที่ปรากฏในลายเซ็นนี้ (โดยไม่มีลิงก์อัตโนมัติ)",
- "tog-uselivepreview": "แสดงตัวอย่างการแก้ไขแบบทันที (ทดลอง)",
+ "tog-fancysig": "ถือลายเซ็นเป็นข้อความวิกิ (โดยไม่มีลิงก์อัตโนมัติ)",
+ "tog-uselivepreview": "ใช้การแสดงตัวอย่างแบบสด",
"tog-forceeditsummary": "เตือนเมื่อช่องคำอธิบายอย่างย่อว่าง",
"tog-watchlisthideown": "ซ่อนการแก้ไขของฉันจากรายการเฝ้าดู",
"tog-watchlisthidebots": "ซ่อนการแก้ไขของบอตจากรายการเฝ้าดู",
"tog-watchlisthideminor": "ซ่อนการแก้ไขเล็กน้อยจากรายการเฝ้าดู",
"tog-watchlisthideliu": "ซ่อนการแก้ไขโดยผู้ใช้ล็อกอินจากรายการเฝ้าดู",
"tog-watchlisthideanons": "ซ่อนการแก้ไขโดยผู้ใช้นิรนามจากรายการเฝ้าดู",
- "tog-watchlisthidepatrolled": "ซ่อนการแก้ไขที่ตรวจแล้วจากรายการเฝ้าดู",
+ "tog-watchlisthidepatrolled": "ซ่อนการแก้ไขที่ตรวจสอบแล้วจากรายการเฝ้าดู",
"tog-ccmeonemails": "ส่งสำเนาอีเมลที่ฉันส่งหาผู้อื่นให้ฉัน",
"tog-diffonly": "ไม่แสดงเนื้อหาหน้าใต้ผลต่าง",
"tog-showhiddencats": "แสดงหมวดหมู่ที่ซ่อนอยู่",
@@ -139,11 +141,11 @@
"category-empty": "<em>ปัจจุบันหมวดหมู่นี้ไม่มีหน้าหรือสื่อใด</em>",
"hidden-categories": "{{PLURAL:$1|หมวดหมู่ที่ซ่อนอยู่|หมวดหมู่ที่ซ่อนอยู่}}",
"hidden-category-category": "หมวดหมู่ที่ซ่อนอยู่",
- "category-subcat-count": "{{PLURAL:$2|หมวดหมู่นี้มีหมวดหมู่ย่อยเพียงหมวดหมู่เดียว|หมวดหมู่นี้มี {{PLURAL:$1|หมวดหมู่ย่อย|$1 หมวดหมู่ย่อย}} จากทั้งหมด $2 หมวดหมู่}}",
- "category-subcat-count-limited": "หมวดหมู่นี้มี $1 หมวดหมู่ย่อย",
- "category-article-count": "{{PLURAL:$2|หมวดหมู่นี้มีอยู่เพียงหน้าเดียว|ในหมวดหมู่นี้มี {{PLURAL:$1|หน้าเดียว|$1 หน้า}} จากทั้งหมด $2 หน้า}}",
+ "category-subcat-count": "{{PLURAL:$2|หมวดหมู่นี้มีหมวดหมู่ย่อยเดียวต่อไปนี้|หมวดหมู่นี้มี {{PLURAL:$1|หมวดหมู่ย่อยเดียว|$1 หมวดหมู่ย่อย}}ต่อไปนี้ จากทั้งหมด $2 หมวดหมู่}}",
+ "category-subcat-count-limited": "หมวดหมู่นี้มี $1 หมวดหมู่ย่อยต่อไปนี้",
+ "category-article-count": "{{PLURAL:$2|หมวดหมู่นี้มีอยู่เพียงหน้าต่อไปนี้|{{PLURAL:$1|หน้า|$1 หน้า}}ต่อไปนี้อยู่ในหมวดหมู่นี้ จากทั้งหมด $2 หน้า}}",
"category-article-count-limited": "$1 หน้าต่อไปนี้อยู่ในหมวดหมู่นี้",
- "category-file-count": "{{PLURAL:$2|หมวดหมู่นี้มีเพียงไฟล์นี้|หมวดหมู่นี้มี $1 ไฟล์ จากทั้งหมด $2 ไฟล์}}",
+ "category-file-count": "{{PLURAL:$2|หมวดหมู่นี้มีเพียงไฟล์นี้|$1 ไฟล์ต่อไปนี้อยู่ในหมวดหมู่นี้ จากทั้งหมด $2 ไฟล์}}",
"category-file-count-limited": "{{PLURAL:$1|ไฟล์|ไฟล์}}ต่อไปนี้อยู่ในหมวดหมู่นี้",
"listingcontinuesabbrev": "ต่อ",
"index-category": "หน้าที่มีดัชนี",
@@ -181,9 +183,9 @@
"searcharticle": "ไป",
"history": "ประวัติหน้า",
"history_short": "ประวัติ",
- "updatedmarker": "ถูกปรับตั้งแต่การเข้าชมครั้งล่าสุดของฉัน",
+ "updatedmarker": "ถูกปรับตั้งแต่การเยี่ยมชมครั้งสุดท้ายของฉัน",
"printableversion": "รุ่นพร้อมพิมพ์",
- "permalink": "การโยงถาวร",
+ "permalink": "ลิงก์ถาวร",
"print": "พิมพ์",
"view": "ดู",
"view-foreign": "ดูบน $1",
@@ -225,14 +227,14 @@
"redirectpagesub": "หน้าเปลี่ยนทาง",
"redirectto": "เปลี่ยนทางไป:",
"lastmodifiedat": "ดัดแปรหน้านี้ล่าสุดเมื่อวันที่ $1 เวลา $2",
- "viewcount": "หน้านี้มีการเข้าถึง $1 ครั้ง",
+ "viewcount": "มีการเข้าถึงหน้านี้ $1 ครั้ง",
"protectedpage": "หน้าถูกล็อก",
- "jumpto": "ข้ามไปยัง:",
+ "jumpto": "ข้ามไป:",
"jumptonavigation": "การนำทาง",
"jumptosearch": "ค้นหา",
"view-pool-error": "ขออภัย ขณะนี้เซิร์ฟเวอร์มีภาระเกิน\nผู้ใช้พยายามดูหน้านี้มากเกินไป\nกรุณารอสักครู่ก่อนเข้าหน้านี้อีกครั้ง\n\n$1",
"generic-pool-error": "ขออภัย ขณะนี้เซิร์ฟเวอร์โหลดเกิน\nมีผู้ใช้พยายามดูทรัพยากรนี้มากเกินไป\nโปรดรอสักครู่ก่อนลองเข้าถึงทรัพยากรนี้อีกครั้ง",
- "pool-timeout": "เกินเวลารอการล็อก",
+ "pool-timeout": "หมดเวลารอกำลังรอล็อก",
"pool-queuefull": "พื้นที่รองรับคิวเต็ม",
"pool-errorunknown": "เกิดข้อผิดพลาดไม่ทราบสาเหตุ",
"aboutsite": "เกี่ยวกับ{{SITENAME}}",
@@ -283,12 +285,12 @@
"restorelink": "$1 การแก้ไขที่ถูกลบ",
"feedlinks": "ฟีด:",
"feed-invalid": "ฟีดที่สมัครไม่ถูกชนิด",
- "feed-unavailable": "ฟีดไม่ถูกเปิดการใช้งาน",
+ "feed-unavailable": "ฟีดยังใช้ไม่ได้",
"site-rss-feed": "ฟีดอาร์เอสเอส $1",
"site-atom-feed": "ฟีดอะตอม $1",
"page-rss-feed": "ฟีดอาร์เอสเอส \"$1\"",
"page-atom-feed": "ฟีดอะตอม \"$1\"",
- "red-link-title": "$1 (หน้านี้ไม่มี)",
+ "red-link-title": "$1 (ไม่มีหน้า)",
"sort-descending": "เรียงจากมากไปน้อย",
"sort-ascending": "เรียงจากน้อยไปมาก",
"nstab-main": "หน้า",
@@ -301,15 +303,15 @@
"nstab-template": "แม่แบบ",
"nstab-help": "หน้าวิธีใช้",
"nstab-category": "หมวดหมู่",
- "nosuchaction": "ไม่มีการกระทำดังกล่าว",
+ "nosuchaction": "ไม่มีปฏิบัติการดังกล่าว",
"nosuchactiontext": "การกระทำที่กำหนดผ่านยูอาร์แอลดังกล่าวไม่สามารถใช้ได้\nคุณอาจกรอกยูอาร์แอลผิด หรือมาตามลิงก์ที่ไม่ถูกต้อง\nหรืออาจเกิดจากข้อผิดพลาดในซอฟต์แวร์ซึ่ง {{SITENAME}} ใช้อยู่",
"nosuchspecialpage": "ไม่มีหน้าพิเศษดังกล่าว",
"nospecialpagetext": "<strong>คุณขอหน้าพิเศษไม่ถูกต้อง</strong>\n\nรายการหน้าพิเศษที่ถูกต้องดูได้ที่ [[Special:SpecialPages|รายการหน้าพิเศษ]]",
- "error": "ข้อผิดพลาด",
- "databaseerror": "ข้อผิดพลาดที่ฐานข้อมูล",
- "databaseerror-text": "เกิดความผิดพลาดข้อคำถามของฐานข้อมูล\nซึ่งอาจบ่งชี้ว่ามีจุดบกพร่องในซอฟต์แวร์",
- "databaseerror-textcl": "เกิดความผิดพลาดข้อคำถามของฐานข้อมูล",
- "databaseerror-query": "ข้อคำถาม: $1",
+ "error": "มีข้อผิดพลาด",
+ "databaseerror": "มีข้อผิดพลาดที่ฐานข้อมูล",
+ "databaseerror-text": "เกิดข้อผิดพลาดข้อคำถามของฐานข้อมูล\nซึ่งอาจบ่งชี้ว่ามีจุดบกพร่องในซอฟต์แวร์",
+ "databaseerror-textcl": "เกิดข้อผิดพลาดคำสั่งของฐานข้อมูล",
+ "databaseerror-query": "คำสั่ง: $1",
"databaseerror-function": "ฟังก์ชัน: $1",
"databaseerror-error": "ข้อผิดพลาด: $1",
"laggedslavemode": "<strong>คำเตือน:</strong> หน้านี้อาจไม่มีการปรับล่าสุด",
@@ -322,22 +324,22 @@
"readonly_lag": "ฐานข้อมูลถูกล็อกอัตโนมัติขณะที่เซิร์ฟเวอร์ฐานข้อมูลรองกำลังปรับปรุงตามฐานข้อมูลหลัก",
"internalerror": "ข้อผิดพลาดภายใน",
"internalerror_info": "เกิดข้อผิดพลาดภายใน: $1",
- "filecopyerror": "ไม่สามารถคัดลอกไฟล์ \"$1\" ไปที่ \"$2\"",
+ "filecopyerror": "ไม่สามารถคัดลอกไฟล์ \"$1\" ไป \"$2\"",
"filerenameerror": "ไม่สามารถเปลี่ยนชื่อไฟล์ \"$1\" เป็น \"$2\"",
"filedeleteerror": "ไม่สามารถลบไฟล์ \"$1\"",
- "directorycreateerror": "ไม่สามารถสร้างไดเรกทอรี \"$1\"",
+ "directorycreateerror": "ไม่สามารถสร้างสารบบ \"$1\"",
"filenotfound": "ไม่พบไฟล์ \"$1\"",
- "unexpected": "ผลที่ไม่คาดคิด: \"$1\"=\"$2\"",
- "formerror": "ข้อผิดพลาด: ส่งแบบไม่ได้",
+ "unexpected": "ค่าไม่คาดหมาย: \"$1\"=\"$2\"",
+ "formerror": "มีข้อผิดพลาด: ส่งแบบไม่ได้",
"badarticleerror": "ไม่สามารถดำเนินปฏิบัติการนี้ในหน้านี้",
- "cannotdelete": "ไม่สามารถลบหน้าหรือไฟล์ \"$1\" \nอาจมีผู้อื่นลบไปแล้ว",
+ "cannotdelete": "ไม่สามารถลบหน้าหรือไฟล์ \"$1\" \nผู้อื่นอาจลบไปแล้ว",
"cannotdelete-title": "ไม่สามารถลบหน้า ''$1''",
"delete-hook-aborted": "การลบถูกฮุกยกเลิก\nโดยไม่มีคำชี้แจง",
"no-null-revision": "ไม่สามารถสร้างรุ่นว่างใหม่ของหน้า \"$1\"",
"badtitle": "ใช้ชื่อเรื่องนี้ไม่ได้",
"badtitletext": "ชื่อหน้าที่ขอไม่ถูกต้อง เป็นชื่อว่าง หรือชื่อข้ามภาษาหรือข้ามวิกิที่เชื่อมโยงไม่ถูกต้อง\nอาจมีอักขระที่ไม่สามารถใช้ในชื่อเรื่องได้",
- "perfcached": "ข้อมูลต่อไปนี้ถูกเก็บในแคช และอาจล้าสมัย มีผลการค้นหาสูงสุด $1 รายการในแคช",
- "perfcachedts": "ข้อมูลต่อไปนี้ถูกเก็บในแคช และได้รับการปรับล่าสุดเมื่อ $1 ผลลัพธ์สูงสุด $4 รายการสามารถเก็บในแคชได้",
+ "perfcached": "ข้อมูลต่อไปนี้ถูกเก็บในแคชและอาจล้าสมัย มีผลการค้นหาสูงสุด $1 รายการในแคช",
+ "perfcachedts": "ข้อมูลต่อไปนี้ถูกเก็บในแคชและถูกปรับล่าสุดเมื่อ $1 มีผลลัพธ์สูงสุด $4 รายการในแคชได้",
"querypage-no-updates": "ขณะนี้ปิดใช้งานการปรับหน้านี้ \nข้อมูลในที่นี้จะไม่รีเฟรชเป็นปัจจุบัน",
"viewsource": "ดูโค้ด",
"viewsource-title": "ดูโค้ดสำหรับ $1",
@@ -346,16 +348,17 @@
"protectedpagetext": "หน้านี้ถูกล็อกเพื่อป้องกันการแก้ไขหรือปฏิบัติการอื่น",
"viewsourcetext": "คุณสามารถดูและคัดลอกโค้ดของหน้านี้:",
"viewyourtext": "คุณสามารถดูและคัดลอกต้นฉบับ<strong>การแก้ไขของคุณ</strong>มายังหน้านี้ได้:",
- "protectedinterface": "หน้านี้เป็นข้อความอินเตอร์เฟซสำหรับซอฟต์แวร์บนวิกินี้ และถูกป้องกันเพื่อมิให้มีการกระทำผิด\nในการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
- "editinginterface": "'''คำเตือน:''' คุณกำลังแก้ไขหน้าที่ใช้เพื่อให้ข้อความอินเตอร์เฟซแก่ซอฟต์แวร์\nการเปลี่ยนแปลงหน้านี้จะกระทบต่อลักษณะของอินเตอร์เฟซผู้ใช้แก่ผู้ใช้อื่นบนวิกินี้\nในการเพิ่มหรือเปลี่ยนแปลงคำแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/wiki/Main_Page?setlang=th translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
+ "protectedinterface": "หน้านี้เป็นข้อความส่วนต่อประสานสำหรับซอฟต์แวร์บนวิกินี้ และถูกล็อกเพื่อป้องกันการกระทำผิด\nในการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
+ "editinginterface": "<strong>คำเตือน:</strong> คุณกำลังแก้ไขหน้าที่ใช้จัดหาข้อความอินเตอร์เฟซให้ซอฟต์แวร์\nการเปลี่ยนแปลงหน้านี้จะมีผลต่อสภาพปรากฏของส่วนต่อประสานผู้ใช้แก่ผู้ใช้อื่นบนวิกินี้",
+ "translateinterface": "ในการเพิ่มหรือเปลี่ยนแปลงคำแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/ translatewiki.net] โครงการแปลเป็นภาษาถิ่นของมีเดียวิกิ",
"cascadeprotected": "หน้านี้ถูกป้องกันมิให้แก้ไข เพราะถูกรวมอยู่ในหน้าซึ่งถูกล็อกโดยเปิดตัวเลือก \"ทบทุกลำดับขั้น\":\n$2",
"namespaceprotected": "คุณไม่มีสิทธิแก้ไขหน้าในเนมสเปซ <strong>$1</strong>",
- "customcssprotected": "คุณไม่มีสิทธิแก้ไขหน้าสไตล์ CSS นี้ เพราะมีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
+ "customcssprotected": "คุณไม่มีสิทธิแก้ไขหน้า CSS นี้ เพราะมีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
"customjsprotected": "คุณไม่มีสิทธิแก้ไขหน้าจาวาสคริปต์นี้ เพราะหน้านี้มีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
- "mycustomcssprotected": "คุณไม่ได้รับอนุญาตให้แก้ไขหน้าซีเอสเอสนี้",
- "mycustomjsprotected": "คุณไม่ได้รับอนุญาตให้แก้ไขหน้าจาวาสคริปต์นี้",
- "myprivateinfoprotected": "คุณไม่ได้รับอนุญาตให้แก้ไขข้อมูลส่วนตัวของคุณ",
- "mypreferencesprotected": "คุณไม่ได้รับอนุญาตให้แก้ไขการตั้งค่าของคุณ",
+ "mycustomcssprotected": "คุณไม่มีสิทธิแก้ไขหน้าซีเอสเอสนี้",
+ "mycustomjsprotected": "คุณไม่มีสิทธิแก้ไขหน้าจาวาสคริปต์นี้",
+ "myprivateinfoprotected": "คุณไม่มีสิทธิแก้ไขข้อมูลส่วนตัวของคุณ",
+ "mypreferencesprotected": "คุณไม่มีสิทธิแก้ไขการตั้งค่าของคุณ",
"ns-specialprotected": "ไม่สามารถแก้ไขหน้าพิเศษ",
"titleprotected": "ชื่อเรื่องนี้ถูก [[User:$1|$1]] ป้องกันมิให้สร้าง\nเหตุผลที่ให้ไว้คือ ''<em>$2</em>''",
"filereadonlyerror": "ไม่สามารถแก้ไขไฟล์ \"$1\" เพราะที่เก็บไฟล์ \"$2\" อยู่ในภาวะอ่านอย่างเดียว\n\nผู้ดูแลระบบที่ล็อกให้คำอธิบายว่า: \"$3\"",
@@ -366,17 +369,17 @@
"exception-nologin-text-manual": "โปรด$1เพื่อสามารถเข้าถึงหน้าหรือปฏิบัติการนี้",
"virus-badscanner": "โครงแบบผิดพลาด: ไม่รู้จักตัวสแกนไวรัส: <em>$1</em>",
"virus-scanfailed": "การสแกนล้มเหลว (โค้ด $1)",
- "virus-unknownscanner": "ไม่รู้จักโปรแกรมป้องกันไวรัสตัวนี้:",
- "logouttext": "<strong>คุณล็อกเอาต์แล้ว</strong>\n\nหมายเหตุว่า บางหน้าอาจยังแสดงผลเสมือนว่าคุณยังล็อกอินอยู่ จนกว่าคุณจะล้างแคชเบราว์เซอร์ของคุณ",
+ "virus-unknownscanner": "โปรแกรมป้องกันไวรัสที่ไม่รู้จัก:",
+ "logouttext": "<strong>คุณล็อกเอาต์แล้ว</strong>\n\nหมายเหตุว่า บางหน้าอาจยังแสดงผลเสมือนว่าคุณยังล็อกอินอยู่ จนกว่าคุณล้างแคชเบราว์เซอร์ของคุณ",
"welcomeuser": "ยินดีต้อนรับ $1!",
"welcomecreation-msg": "สร้างบัญชีของคุณแล้ว\nคุณสามารถเปลี่ยน[[Special:Preferences|การตั้งค่า]] {{SITENAME}} ของคุณได้หากต้องการ",
"yourname": "ชื่อผู้ใช้:",
"userlogin-yourname": "ชื่อผู้ใช้",
- "userlogin-yourname-ph": "กรอกชื่อผู้ใช้",
+ "userlogin-yourname-ph": "กรอกชื่อผู้ใช้ของคุณ",
"createacct-another-username-ph": "กรอกชื่อผู้ใช้",
"yourpassword": "รหัสผ่าน:",
"userlogin-yourpassword": "รหัสผ่าน",
- "userlogin-yourpassword-ph": "กรอกรหัสผ่าน",
+ "userlogin-yourpassword-ph": "กรอกรหัสผ่านของคุณ",
"createacct-yourpassword-ph": "กรอกรหัสผ่าน",
"yourpasswordagain": "พิมพ์รหัสผ่านอีกครั้ง:",
"createacct-yourpasswordagain": "ยืนยันรหัสผ่าน",
@@ -404,9 +407,11 @@
"userlogin-resetlink": "ลืมรายละเอียดล็อกอินของคุณหรือ",
"userlogin-resetpassword-link": "ลืมรหัสผ่านหรือ",
"userlogin-helplink2": "วิธีใช้เรื่องการล็อกอิน",
+ "userlogin-loggedin": "คุณล็อกอินในชื่อ {{GENDER:$1|$1}} แล้ว\nใช้แบบด้านล่างเพื่อล็อกอินเป็นอีกผู้ใช้หนึ่ง",
+ "userlogin-createanother": "สร้างอีกบัญชี",
"createacct-emailrequired": "ที่อยู่อีเมล",
"createacct-emailoptional": "ที่อยู่อีเมล (เลือกไม่ใส่ได้)",
- "createacct-email-ph": "กรอกที่อยู่อีเมล",
+ "createacct-email-ph": "กรอกที่อยู่อีเมลของคุณ",
"createacct-another-email-ph": "กรอกที่อยู่อีเมล",
"createaccountmail": "ใช้รหัสผ่านสุ่มชั่วคราวและส่งไปยังที่อยู่อีเมลที่ระบุ",
"createacct-realname": "ชื่อจริง (เลือกไม่ใส่ได้)",
@@ -417,11 +422,11 @@
"createacct-imgcaptcha-ph": "กรอกข้อความที่คุณเห็นด้านบน",
"createacct-submit": "สร้างบัญชีของคุณ",
"createacct-another-submit": "สร้างอีกบัญชี",
- "createacct-benefit-heading": "{{SITENAME}}สร้างขึ้นจากคนเช่นคุณ",
+ "createacct-benefit-heading": "{{SITENAME}}สร้างจากคนเช่นคุณ",
"createacct-benefit-body1": "$1 การแก้ไข",
"createacct-benefit-body2": "$1 หน้า",
- "createacct-benefit-body3": "$1 ผู้ร่วมเขียน",
- "badretype": "รหัสผ่านที่คุณกรอกไม่ตรงกัน",
+ "createacct-benefit-body3": "$1 ผู้ร่วมเขียนล่าสุด",
+ "badretype": "รหัสผ่านที่คุณกรอกไม่ตรง",
"userexists": "ชื่อผู้ใช้ที่กรอกมีผู้ใช้แล้ว \nกรุณาเลือกชื่ออื่น",
"loginerror": "ล็อกอินผิดพลาด",
"createacct-error": "การสร้างบัญชีผิดพลาด",
@@ -431,7 +436,7 @@
"nocookiesfornew": "บัญชีผู้ใช้ไม่ถูกสร้าง เนื่องจากเราไม่สามารถยืนยันต้นทาง\nกรุณาทำให้แน่ใจว่าคุณได้เปิดใช้งานคุกกี้ โหลดหน้านี้ใหม่และลองอีกครั้ง",
"noname": "คุณไม่ได้ใส่ชื่อผู้ใช้ที่ถูกต้อง",
"loginsuccesstitle": "ล็อกอินสำเร็จ",
- "loginsuccess": "<strong>ขณะนี้คุณล็อกอินเข้าสู่ {{SITENAME}} ด้วยชื่อ \"$1\"</strong>",
+ "loginsuccess": "<strong>ขณะนี้คุณล็อกอินสู่ {{SITENAME}} ในชื่อ \"$1\"</strong>",
"nosuchuser": "ไม่มีผู้ใช้ชื่อ \"$1\"\nชื่อผู้ใช้นั้นไวต่ออักษรใหญ่เล็ก\nกรุณาตรวจการสะกดอีกครั้ง หรือ[[Special:UserLogin/signup|สร้างบัญชีใหม่]]",
"nosuchusershort": "ไม่มีผู้ใช้ชื่อ \"$1\" \nกรุณาตรวจสอบการสะกด",
"nouserspecified": "คุณต้องระบุชื่อผู้ใช้",
@@ -443,7 +448,7 @@
"password-login-forbidden": "ห้ามใช้ชื่อผู้ใช้และรหัสผ่านนี้",
"mailmypassword": "ตั้งรหัสผ่านใหม่",
"passwordremindertitle": "รหัสผ่านชั่วคราวใหม่สำหรับ {{SITENAME}}",
- "passwordremindertext": "ผู้ใดผู้หนึ่ง (ซึ่งอาจเป็นคุณ ที่ใช้เลขที่อยู่ไอพี $1) ขอให้ส่งรหัสผ่านใหม่ของ {{SITENAME}} ($4) รหัสผ่านชั่วคราวสำหรับผู้ใช้ \"$2\" ถูกสร้างขึ้น และกำหนดเป็น \"$3\" หากเป็นเจตนาของคุณ คุณจำต้องล็อกอินและเลือกรหัสผ่านใหม่ในขณะนี้ \nรหัสผ่านชั่วคราวของคุณจะหมดอายุใน $5 วัน\n\nหากเป็นบุคคลอื่นที่ขอรหัสผ่านใหม่ หรือหากคุณจำรหัสผ่านของคุณได้แล้ว และไม่ต้องการเปลี่ยนรหัสผ่านใหม่อีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
+ "passwordremindertext": "ผู้ใดผู้หนึ่ง (ซึ่งอาจเป็นคุณ จากเลขที่อยู่ไอพี $1) ขอให้ส่งรหัสผ่านใหม่ของ {{SITENAME}} ($4) รหัสผ่านชั่วคราวสำหรับผู้ใช้ \"$2\" ถูกสร้างขึ้น และกำหนดเป็น \"$3\" หากเป็นเจตนาของคุณ คุณจำต้องล็อกอินและเลือกรหัสผ่านใหม่ในขณะนี้ \nรหัสผ่านชั่วคราวของคุณจะหมดอายุใน $5 วัน\n\nหากเป็นบุคคลอื่นที่ขอรหัสผ่านใหม่ หรือหากคุณจำรหัสผ่านของคุณได้แล้ว และไม่ต้องการเปลี่ยนรหัสผ่านใหม่อีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
"noemail": "ไม่มีการบันทึกที่อยู่อีเมลสำหรับผู้ใช้ \"$1\"",
"noemailcreate": "คุณจำต้องใส่ที่อยู่อีเมลให้ถูกต้อง",
"passwordsent": "รหัสผ่านใหม่ถูกส่งไปยังที่อยู่อีเมลที่ลงทะเบียนไว้ของ \"$1\"\nกรุณาล็อกอินอีกครั้งหลังได้รับอีเมล",
@@ -460,11 +465,12 @@
"cannotchangeemail": "ไม่สามารถเปลี่ยนที่อยู่อีเมลบนวิกินี้",
"emaildisabled": "เว็บไซต์นี้ไม่สามารถส่งอีเมล",
"accountcreated": "สร้างบัญชีแล้ว",
- "accountcreatedtext": "บัญชีผู้ใช้สำหรับ [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|พูดคุย]]) ถูกสร้างขึ้นแล้ว",
+ "accountcreatedtext": "สร้างบัญชีผู้ใช้สำหรับ [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|พูดคุย]]) แล้ว",
"createaccount-title": "การสร้างบัญชีสำหรับ {{SITENAME}}",
"createaccount-text": "มีบางคนสร้างบัญชีโดยใช้ที่อยู่อีเมลของคุณบน {{SITENAME}} ($4) โดยใช้ชื่อ \"$2\" และรหัสผ่าน \"$3\" \nคุณควรล็อกอินและเปลี่ยนรหัสผ่านทันที\n\nคุณอาจเพิกเฉยข้อความนี้ หากการสร้างบัญชีนี้เป็นความผิดพลาด",
"login-throttled": "ที่ผ่านมาคุณพยายามล็อกอินมากครั้งเกินไป\nกรุณารอ $1 ก่อนลองอีกครั้ง",
"login-abort-generic": "การล็อกอินของคุณไม่สำเร็จ - ล้มเลิกแล้ว",
+ "login-migrated-generic": "บัญชีของคุณถูกย้ายแล้ว และไม่มีชื่อผู้ใช้ของคุณอยู่บนวิกินี้อีก",
"loginlanguagelabel": "ภาษา: $1",
"suspicious-userlogout": "คำขอล็อกเอาต์ของคุณถูกปฏิเสธเพราะดูเหมือนส่งมาจากเบราว์เซอร์หรือพร็อกซีแคชที่เสีย",
"createacct-another-realname-tip": "ไม่จำเป็นต้องใส่ชื่อจริง\nหากคุณเลือกใส่ชื่อจริง จะใช้เพื่อแสดงที่มาสำหรับงานของตน",
@@ -483,13 +489,13 @@
"newpassword": "รหัสผ่านใหม่:",
"retypenew": "พิมพ์รหัสผ่านใหม่อีกครั้ง:",
"resetpass_submit": "ตั้งรหัสผ่านและล็อกอิน",
- "changepassword-success": "เปลี่ยนรหัสผ่านของคุณสำเร็จ",
- "changepassword-throttled": "คุณพยายามล็อกอินมากครั้งเกินไป\nกรุณารอ $1 ก่อนลองอีกครั้ง",
+ "changepassword-success": "เปลี่ยนรหัสผ่านของคุณสำเร็จ!",
+ "changepassword-throttled": "ล่าสุดคุณพยายามล็อกอินมากครั้งเกินไป\nกรุณารอ $1 ก่อนลองอีกครั้ง",
"resetpass_forbidden": "ไม่สามารถเปลี่ยนรหัสผ่านได้",
"resetpass-no-info": "คุณต้องล็อกอินเพื่อเข้าถึงหน้านี้โดยตรง",
"resetpass-submit-loggedin": "เปลี่ยนรหัสผ่าน",
"resetpass-submit-cancel": "ยกเลิก",
- "resetpass-wrong-oldpass": "รหัสผ่านชั่วคราวหรือปัจจุบันไม่ถูกต้อง\nคุณอาจเปลี่ยนรหัสผ่านของคุณแล้ว หรือขอรหัสผ่านชั่วคราวใหม่แล้ว",
+ "resetpass-wrong-oldpass": "รหัสผ่านชั่วคราวหรือปัจจุบันไม่ถูกต้อง\nคุณอาจเปลี่ยนรหัสผ่านของคุณสำเร็จแล้ว หรือขอรหัสผ่านชั่วคราวใหม่แล้ว",
"resetpass-recycled": "โปรดตั้งรหัสผ่านใหม่ให้ต่างจากรหัสผ่านปัจจุบัน",
"resetpass-temp-emailed": "คุณล็อกอินด้วยรหัสผ่านชั่วคราวที่ส่งทางอีเมล\nคุณต้องตั้งรหัสผ่านใหม่ที่นี่จึงจะเสร็จสิ้นการล็อกอิน:",
"resetpass-temp-password": "รหัสผ่านชั่วคราว:",
@@ -498,19 +504,19 @@
"resetpass-expired-soft": "รหัสผ่านของคุณหมดอายุแล้วและจำเป็นต้องตั้งใหม่ โปรดเลือกรหัสผ่านใหม่ขณะนี้ หรือคลิก \"{{int:resetpass-submit-cancel}}\" เพื่อตั้งใหม่ทีหลัง",
"resetpass-validity-soft": "รหัสผ่านของคุณไม่สมเหตุสมผล: $1\n\nโปรดเลือดรหัสผ่านใหม่ในขณะนี้ หรือคลิก \"{{int:resetpass-submit-cancel}}\" เพื่อตั้งใหม่ทีหลัง",
"passwordreset": "ตั้งรหัสผ่านใหม่",
- "passwordreset-text-one": "กรอกแบบนี้เพื่อตั้งรหัสผ่านใหม่",
- "passwordreset-text-many": "{{PLURAL:$1|กรอกเขตข้อมูลหนึ่งเพื่อรับรหัสผ่านชั่วคราวทางอีเมล}}",
- "passwordreset-legend": "เปลี่ยนรหัสผ่าน",
+ "passwordreset-text-one": "กรอกแบบนี้เพื่อรับรหัสผ่านชั่วคราวโดยทางอีเมล",
+ "passwordreset-text-many": "{{PLURAL:$1|กรอกเขตข้อมูลหนึ่งเพื่อรับรหัสผ่านชั่วคราวโดยทางอีเมล}}",
+ "passwordreset-legend": "ตั้งรหัสผ่านใหม่",
"passwordreset-disabled": "วิกินี้ปิดใช้งานการตั้งรหัสผ่านใหม่",
"passwordreset-emaildisabled": "วิกินี้ปิดใช้งานคุณลักษณะอีเมล",
"passwordreset-username": "ชื่อผู้ใช้:",
"passwordreset-domain": "โดเมน:",
"passwordreset-capture": "ดูอีเมลที่ได้หรือไม่",
- "passwordreset-capture-help": "หากคุณเลือกกล่องนี้ อีเมลดังกล่าว (พร้อมรหัสผ่านชั่วคราว) จะแสดงแก่คุณ เช่นเดียวกับส่งไปยังผู้ใช้",
+ "passwordreset-capture-help": "หากคุณเลือกกล่องนี้ จะแสดงอีเมลดังกล่าว (พร้อมรหัสผ่านชั่วคราว) แก่คุณ เช่นเดียวกับส่งไปยังผู้ใช้",
"passwordreset-email": "ที่อยู่อีเมล:",
"passwordreset-emailtitle": "รายละเอียดบัญชีบน {{SITENAME}}",
- "passwordreset-emailtext-ip": "บางคน (ซึ่งอาจเป็นคุณ จากเลขที่อยู่ไอพี $1) ร้องขอการตั้งรหัสผ่านของคุณใหม่บน{{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
- "passwordreset-emailtext-user": "ผู้ใช้ $1 ขอตั้งรหัสผ่านของคุณใหม่บน{{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
+ "passwordreset-emailtext-ip": "บางคน (ซึ่งอาจเป็นคุณ จากเลขที่อยู่ไอพี $1) ขอตั้งรหัสผ่านของคุณใหม่บน{{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
+ "passwordreset-emailtext-user": "ผู้ใช้ $1 บน {{SITENAME}} ขอตั้งรหัสผ่านของคุณใหม่สำหรับ {{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
"passwordreset-emailelement": "ชื่อผู้ใช้: $1\nรหัสผ่านชั่วคราว: $2",
"passwordreset-emailsent": "อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว",
"passwordreset-emailsent-capture": "อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว ซึ่งแสดงด้านล่าง",
@@ -530,7 +536,7 @@
"resettokens-legend": "ตั้งโทเค็นใหม่",
"resettokens-tokens": "โทเค็น:",
"resettokens-token-label": "$1 (ค่าปัจจุบัน: $2)",
- "resettokens-watchlist-token": "โทเค็นการป้อนเว็บ (Atom/RSS) ของ[[Special:Watchlist|การเปลี่ยนแปลงไปยังหน้าในรายการเฝ้าดูของคุณ]]",
+ "resettokens-watchlist-token": "โทเค็นสำหรับเว็บฟีด (Atom/RSS) ของ[[Special:Watchlist|การเปลี่ยนแปลงแก่หน้าในรายการเฝ้าดูของคุณ]]",
"resettokens-done": "ตั้งโทเค็นใหม่แล้ว",
"resettokens-resetbutton": "ตั้งโทเค็นที่เลือกใหม่",
"bold_sample": "ข้อความตัวหนา",
@@ -551,109 +557,110 @@
"media_tip": "เชื่อมโยงไฟล์",
"sig_tip": "ลายเซ็นของคุณพร้อมตราเวลา",
"hr_tip": "เส้นนอน (ใช้อย่างจำกัด)",
- "summary": "คำอธิบายโดยย่อ:",
- "subject": "หัวข้อ/พาดหัว:",
+ "summary": "คำอธิบายอย่างย่อ:",
+ "subject": "เรื่อง/พาดหัว:",
"minoredit": "เป็นการแก้ไขเล็กน้อย",
"watchthis": "เฝ้าดูหน้านี้",
- "savearticle": "บันทึก",
+ "savearticle": "บันทึกหน้า",
"preview": "ตัวอย่าง",
"showpreview": "แสดงตัวอย่าง",
- "showdiff": "แสดงความเปลี่ยนแปลง",
+ "showdiff": "แสดงการเปลี่ยนแปลง",
"blankarticle": "<strong>คำเตือน:</strong> หน้าที่คุณกำลังสร้างว่าง หากคุณคลิก \"{{int:savearticle}}\" อีกครั้ง จะสร้างหน้าโดยไม่มีเนื้อหาใด",
"anoneditwarning": "<strong>คำเตือน:</strong> คุณมิได้ล็อกอิน สาธารณะจะเห็นเลขที่อยู่ไอพีของคุณหากคุณแก้ไข หากคุณ<strong>[$1 ล็อกอิน]</strong>หรือ<strong>[$2 สร้างบัญชี]</strong> การแก้ไขของคุณจะถือว่าเป็นของชื่อผู้ใช้ของคุณ ร่วมกับประโยชน์อื่น",
"anonpreviewwarning": "<em>คุณมิได้ล็อกอิน การบันทึกจะเก็บเลขที่อยู่ไอพีของคุณในประวัติการแก้ไขของหน้านี้</em>",
- "missingsummary": "'''อย่าลืม:''' คุณยังไม่ได้ระบุคำอธิบายการแก้ไข ถ้าคุณกด \"บันทึก\" อีกครั้ง การแก้ไขของคุณจะถูกบันทึกโดยไม่มีคำอธิบายการแก้ไข",
- "missingcommenttext": "กรุณาใส่ความเห็นด้านล่าง",
- "missingcommentheader": "'''ประกาศเตือน:''' คุณยังไม่ได้ใส่หัวข้อ/จ่าหัวสำหรับความเห็นนี้ ถ้าคุณกด \"{{int:savearticle}}\" อีกครั้ง การแก้ไขของคุณจะถูกบันทึกโดยไม่มีหัวข้อ",
- "summary-preview": "ตัวอย่างคำอธิบายการแก้ไข:",
- "subject-preview": "ตัวอย่างหัวข้อ/พาดหัว:",
+ "missingsummary": "<strong>อย่าลืม:</strong> คุณยังไม่ได้ให้คำอธิบายการแก้ไข \nถ้าคุณคลิก \"{{int:savearticle}}\" อีก จะบันทึกการแก้ไขของคุณโดยไม่มีคำอธิบายการแก้ไข",
+ "selfredirect": "<strong>คำเตือน:</strong> คุณกำลังสร้างการเปลี่ยนทางไปบทความเดียวกัน\nคุณอาจระบุเป้าหมายของการเปลี่ยนทางผิด หรือคถณอาจแก้ไขหน้าผิด \nหากคุณคลิก \"{{int:savearticle}}\" อีกครั้ง จะสร้างการเปลี่ยนทาง",
+ "missingcommenttext": "กรุณากรอกความเห็นด้านล่าง",
+ "missingcommentheader": "<strong>อย่าลืม:</strong> คุณยังไม่ได้ใส่หัวข้อ/พาดหัวสำหรับความเห็นนี้ \nถ้าคุณคลิก \"{{int:savearticle}}\" อีก จะบันทึกการแก้ไขของคุณโดยไม่มีหัวข้อ/พาดหัว",
+ "summary-preview": "ตัวอย่างคำอธิบาย:",
+ "subject-preview": "ตัวอย่างเรื่อง/พาดหัว:",
"blockedtitle": "ผู้ใช้ถูกบล็อก",
- "blockedtext": "<strong>ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อก</strong>\n\nการบล็อกนี้ดำเนินการโดย $1\nซึ่งให้เหตุผลว่า ''$2''\n\n* เริ่มการบล็อก: $8\n* หมดเขตการบล็อก: $6\n* ผู้ถูกบล็อก: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ได้\nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลให้ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้ความสามารถนี้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดแสดงรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
- "autoblockedtext": "เลขที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติ เพราะมีผู้ใช้อื่นใช้มาก่อน ซึ่งถูกบล็อกโดย $1\nโดยให้เหตุผลว่า\n\n:<em>$2</em>\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ถูกบล็อก: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่อหารือการบล็อกนี้ \nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดรวมรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
+ "blockedtext": "<strong>ชื่อผู้ใช้หรือเลขที่อยู่ไอพีของคุณถูกบล็อก</strong>\n\nการบล็อกนี้ดำเนินการโดย $1\nซึ่งให้เหตุผลว่า ''$2''\n\n* เริ่มการบล็อก: $8\n* หมดเขตการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ได้\nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลให้ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้ความสามารถนี้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดแสดงรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
+ "autoblockedtext": "เลขที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติ เพราะเคยมีผู้ใช้อื่นใช้ ซึ่งถูกบล็อกโดย $1\nโดยให้เหตุผลว่า\n\n:<em>$2</em>\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ \nคุณไม่สามารถใช้คุณลักษณะ \"ส่งอีเมลหาผู้ใช้รายนี้ได้\" จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดรวมรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
"blockednoreason": "ไม่ได้ให้เหตุผล",
"whitelistedittext": "คุณต้อง$1เพื่อแก้ไขหน้า",
- "confirmedittext": "คุณต้องยืนยันที่อยู่อีเมลของคุณก่อนแก้ไขหน้า โปรดกำหนดที่อยู่อีเมลของคุณและทำให้ถูกต้องผ่าน[[Special:Preferences|การตั้งค่าผู้ใช้]]",
+ "confirmedittext": "คุณต้องยืนยันที่อยู่อีเมลของคุณก่อนแก้ไขหน้า \nโปรดตั้งและตรวจสอบความสมเหตุสมผลของที่อยู่อีเมลของคุผ่าน[[Special:Preferences|การตั้งค่าผู้ใช้]]",
"nosuchsectiontitle": "ไม่พบส่วน",
- "nosuchsectiontext": "คุณพยายามแก้ไขส่วนที่ไม่มีอยู่ ส่วนดังกล่าวอาจถูกย้ายหรือลบขณะที่คุณดูหน้าอยู่",
- "loginreqtitle": "จำเป็นต้องล็อกอิน",
+ "nosuchsectiontext": "คุณพยายามแก้ไขส่วนที่ไม่มีอยู่ \nส่วนดังกล่าวอาจถูกย้ายหรือลบขณะที่คุณดูหน้าอยู่",
+ "loginreqtitle": "ต้องล็อกอิน",
"loginreqlink": "ล็อกอิน",
- "loginreqpagetext": "คุณต้อง$1เพื่อดูหน้าอื่น",
+ "loginreqpagetext": "กรุณา$1เพื่อดูหน้าอื่น",
"accmailtitle": "ส่งรหัสผ่านแล้ว",
- "accmailtext": "รหัสผ่านแบบสุ่มของ [[User talk:$1|$1]] ถูกส่งไปยัง $2 แล้ว สามารถเปลี่ยนรหัสผ่านในหน้า''[[Special:ChangePassword|เปลี่ยนรหัสผ่าน]]'' หลังล็อกอิน",
+ "accmailtext": "ส่งรหัสผ่านแบบสุ่มของ [[User talk:$1|$1]] ไป $2 แล้ว สามารถเปลี่ยนรหัสผ่านในหน้า<em>[[Special:ChangePassword|เปลี่ยนรหัสผ่าน]]</em> หลังล็อกอิน",
"newarticle": "(ใหม่)",
- "newarticletext": "คุณตามลิงก์ไปยังหน้าที่ยังไม่มีในขณะนี้\nในการสร้างหน้า เริ่มพิมพ์ในกล่องด้านล่าง (ดูข้อมูลเพิ่มเติมใน[$1 หน้าคำอธิบาย])\nถ้าคุณเข้ามาหน้านี้โดยผิดพลาด ให้กดปุ่ม'''ถอยหลัง''' (back) ของเบราว์เซอร์",
- "anontalkpagetext": "----\n<em>หน้านี้เป็นหน้าคุยกับผู้ใช้สำหรับผู้ใช้นิรนามซึ่งยังไม่ได้สร้างบัญชีหรือไม่ได้ใช้</em>\nดังนั้นเราจึงระบุตัวตนโดยใช้เลขที่อยู่ไอพีแทน\nเลขที่อยู่ไอพีนี้อาจมีผู้ใช้ร่วมกันหลายคน\nถ้าคุณเป็นผู้ใช้นิรนาม และรู้สึกว่าคุณได้รับความเห็นที่ไม่เกี่ยวข้องส่งหาคุณ กรุณา[[Special:UserLogin/signup|สร้างบัญชี]]หรือ[[Special:UserLogin|ล็อกอิน]] เพื่อป้องกันการสับสนกับผู้ใช้นิรนามรายอื่นในอนาคต",
+ "newarticletext": "คุณตามลิงก์ไปยังหน้าที่ยังไม่มีในขณะนี้\nในการสร้างหน้า เริ่มพิมพ์ในกล่องด้านล่าง (ดูข้อมูลเพิ่มเติมใน[$1 หน้าคำอธิบาย])\nถ้าคุณเข้ามาหน้านี้โดยผิดพลาด ให้กดปุ่ม<strong>ถอยหลัง</strong> (back) ของเบราว์เซอร์",
+ "anontalkpagetext": "----\n<em>หน้านี้เป็นหน้าคุยกับผู้ใช้สำหรับผู้ใช้นิรนามซึ่งยังไม่ได้สร้างหรือใช้บัญชี</em>\nดังนั้นเราจึงระบุตัวตนโดยใช้เลขที่อยู่ไอพีแทน\nเลขที่อยู่ไอพีนี้อาจมีผู้ใช้ร่วมกันหลายคน\nถ้าคุณเป็นผู้ใช้นิรนาม และรู้สึกว่าคุณได้รับความเห็นที่ไม่เกี่ยวข้องส่งหาคุณ กรุณา[[Special:UserLogin/signup|สร้างบัญชี]]หรือ[[Special:UserLogin|ล็อกอิน]] เพื่อป้องกันการสับสนกับผู้ใช้นิรนามรายอื่นในอนาคต",
"noarticletext": "ปัจจุบันไม่มีข้อความในหน้านี้\nคุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อหน้านี้]]ในหน้าอื่น <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง] หรือ[{{fullurl:{{FULLPAGENAME}}|action=edit}} แก้ไขหน้านี้]</span>",
"noarticletext-nopermission": "ปัจจุบันไม่มีข้อความในหน้านี้\nคุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อหน้านี้]]ในหน้าอื่น หรือ<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง]</span> แต่คุณไม่มีสิทธิสร้างหน้านี้",
"missing-revision": "ไม่มีรุ่นปรับปรุง #$1 ของหน้าชื่อ \"{{FULLPAGENAME}}\" \n\nปกติเกิดจากการตามการโยงประวัติเก่าไปยังหน้าที่ถูกลบแล้ว\nดูรายละเอียดได้ที่[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
"userpage-userdoesnotexist": "บัญชีผู้ใช้ \"$1\" มิได้ลงทะเบียน \nกรุณาตรวจสอบหากคุณต้องการสร้าง/แก้ไขหน้านี้",
"userpage-userdoesnotexist-view": "บัญชีผู้ใช้ \"$1\" มิได้ลงทะเบียน",
"blocked-notice-logextract": "ปัจจุบันผู้ใช้นี้ถูกบล็อก\nหน่วยปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:",
- "clearyourcache": "'''หมายเหตุ:''' หลังจากบันทึก คุณอาจต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง\n* '''ไฟร์ฟอกซ์ / ซาฟารี:''' กดปุ่ม ''Shift'' ค้างไว้ขณะคลิก ''Reload'' หรือกด ''Ctrl-F5'' หรือ ''Ctrl-R'' (''⌘-R'' บนแมค)\n* '''กูเกิล โครม:''' กดปุ่ม ''Ctrl-Shift-R'' (''⌘-Shift-R'' บนแมค)\n* '''อินเทอร์เน็ตเอกซ์พลอเรอร์:''' กดปุ่ม ''Ctrl'' ค้างไว้ขณะคลิก ''Refresh'' หรือกด ''Ctrl-F5''\n* '''โอเปร่า:''' ล้างแคชใน ''Tools → Preferences''",
- "usercssyoucanpreview": "'''คำแนะนำ:''' กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบ CSS ใหม่ของคุณก่อนบันทึก",
- "userjsyoucanpreview": "'''คำแนะนำ:''' กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบจาวาสคริปต์ใหม่ของคุณก่อนบันทึก",
- "usercsspreview": "'''อย่าลืมว่าคุณกำลังดูตัวอย่าง CSS ผู้ใช้ของคุณ'''\n'''ยังไม่ได้ถูกบันทึก!'''",
- "userjspreview": "'''อย่าลืมว่าคุณกำลังทดสอบ/ดูตัวอย่างจาวาสคริปต์ผู้ใช้ของคุณ'''\n'''ยังไม่ถูกบันทึก!'''",
- "sitecsspreview": "'''พึงระลึกว่าคุณกำลังแสดงตัวอย่าง CSS นี้เท่านั้น'''\n'''ยังไม่ได้ถูกบันทึก!'''",
- "sitejspreview": "'''พึงระลึกว่าคุณกำลังแสดงตัวอย่างโค้ดจาวาสคริปต์นี้เท่านั้น'''\n'''ยังไม่ได้ถูกบันทึก!'''",
- "userinvalidcssjstitle": "'''คำเตือน:''' ไม่มีหน้าตา \"$1\" หน้า .css และ .js ที่ปรับแต่งเอง ใช้ตัวเล็กทั้งหมด เช่น {{ns:user}}:Foo/vector.css มิใช่ {{ns:user}}:Foo/Vector.css",
+ "clearyourcache": "<strong>หมายเหตุ:</strong> หลังบันทึก คุณอาจต้องล้างแคชเว็บเบราว์เซอร์ของคุณเพื่อดูการเปลี่ยนแปลง\n* <strong>ไฟร์ฟอกซ์ / ซาฟารี:</strong> กด <em>Shift</em> ค้างขณะคลิก <em>Reload</em> หรือกด <em>Ctrl-F5</em> หรือ <em>Ctrl-R</em> (<em>⌘-R</em> บนแมค)\n* <strong>กูเกิล โครม:</strong> กด <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> บนแมค)\n* <strong>อินเทอร์เน็ตเอกซ์พลอเรอร์:</strong> กด <em>Ctrl</em> ค้างขณะคลิก <em>Refresh</em> หรือกด <em>Ctrl-F5</em>\n* <strong>โอเปร่า:</strong> ล้างแคชใน <em>Tools → Preferences</em>",
+ "usercssyoucanpreview": "<strong>คำแนะนำ:</strong> กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบ CSS ใหม่ของคุณก่อนบันทึก",
+ "userjsyoucanpreview": "<strong>คำแนะนำ:</strong> กดปุ่ม \"{{int:showpreview}}\" เพื่อทดสอบจาวาสคริปต์ใหม่ของคุณก่อนบันทึก",
+ "usercsspreview": "<strong>พึงระลึกว่าคุณเพียงกำลังดูตัวอย่าง CSS ผู้ใช้ของคุณ\nยังไม่ได้บันทึก!</strong>",
+ "userjspreview": "<strong>พึงระลึกว่าคุณกำลังทดสอบ/ดูตัวอย่างจาวาสคริปต์ผู้ใช้ของคุณ\nยังไม่ได้บันทึก!</strong>",
+ "sitecsspreview": "<strong>พึงระลึกว่าคุณเพียงกำลังแสดงตัวอย่าง CSS นี้\nยังไม่ได้บันทึก!</strong>",
+ "sitejspreview": "<strong>พึงระลึกว่าคุณเพียงกำลังแสดงตัวอย่างโค้ดจาวาสคริปต์นี้\nยังไม่ได้บันทึก!</strong>",
+ "userinvalidcssjstitle": "<strong>คำเตือน:</strong> ไม่มีหน้าตา \"$1\" หน้า .css และ .js ใช้ตัวเล็กทั้งหมด เช่น {{ns:user}}:Foo/vector.css มิใช่ {{ns:user}}:Foo/Vector.css",
"updated": "(ปรับแล้ว)",
- "note": "'''หมายเหตุ:'''",
- "previewnote": "'''พึงระลึกว่านี่เป็นเพียงการแสดงตัวอย่างเท่านั้น'''\nการเปลี่ยนแปลงของคุณยังไม่ได้ถูกบันทึก!",
- "continue-editing": "ไปยังพื้นที่แก้ไข",
- "previewconflict": "การแสดงตัวอย่างนี้สะท้อนข้อความในพื้นที่แก้ไขข้อความส่วนบนซึ่งจะปรากฏหากคุณเลือกบันทึก",
- "session_fail_preview": "'''ขออภัย ไม่สามารถดำเนินการแก้ไขต่อได้ เนื่องจากข้อมูลช่วงเวลาสื่อสารสูญหาย'''\nโปรดทดลองอีกครั้ง หากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา",
- "session_fail_preview_html": "'''ขออภัย ไม่สามารถดำเนินการแก้ไขต่อได้ เนื่องจากข้อมูลช่วงเวลาสื่อสารสูญหาย'''\n\n''เนื่องจาก {{SITENAME}} เปิดใช้งานเอชทีเอ็มแอลล้วน การแสดงตัวอย่างจะถูกซ่อนไว้เพื่อป้องกันการโจมตีด้วยจาวาสคริปต์''\n\n'''หากนี่เป็นความพยายามแก้ไขโดยชอบ โปรดลองอีกครั้งหนึ่ง''' หากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา",
- "token_suffix_mismatch": "'''การแก้ไขของคุณถูกปฏิเสธ เนื่องจากเครื่องลูกข่ายที่คุณใช้ทำให้อักขระเครื่องหมายวรรคตอนในตราสารประจำการแก้ไข (edit token) เสีย'''\nการแก้ไขนี้ถูกปฏิเสธเพื่อป้องกันการวิบัติของข้อความหน้า\nบางครั้งเกิดปัญหานี้ขึ้นเมื่อคุณใช้บริการเว็บพร็อกซีนิรนามที่มีบั๊ก",
- "edit_form_incomplete": "'''แบบแก้ไขบางส่วนไปไม่ถึงเซิร์ฟเวอร์ ตรวจสอบอีกครั้งว่าการแก้ไขของคุณยังอยู่และลองอีกครั้ง'''",
+ "note": "<strong>หมายเหตุ:</strong>",
+ "previewnote": "<strong>พึงระลึกว่านี่เป็นเพียงการแสดงตัวอย่าง</strong>\nยังไม่ได้บันทึกการเปลี่ยนแปลงของคุณ!",
+ "continue-editing": "ไปพื้นที่แก้ไข",
+ "previewconflict": "ตัวอย่างนี้สะท้อนข้อความในพื้นที่แก้ไขข้อความส่วนบนซึ่งจะปรากฏหากคุณเลือกบันทึก",
+ "session_fail_preview": "<strong>ขออภัย! ไม่สามารถดำเนินการแก้ไขของคุณได้ เนื่องจากข้อมูลช่วงเวลาสื่อสารสูญหาย</strong>\nโปรดลองอีกครั้ง \nหากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา",
+ "session_fail_preview_html": "<strong>ขออภัย! ไม่สามารถดำเนินการแก้ไขของคุณต่อได้ เนื่องจากข้อมูลช่วงเวลาสื่อสารสูญหาย</strong>\n\n<em>เนื่องจาก {{SITENAME}} เปิดใช้งานเอชทีเอ็มแอลล้วน การแสดงตัวอย่างจะถูกซ่อนไว้เพื่อป้องกันการโจมตีด้วยจาวาสคริปต์</em>\n\n<strong>หากนี่เป็นความพยายามแก้ไขโดยชอบ โปรดลองอีกครั้งหนึ่ง</strong> \nหากยังเสียอยู่ ลอง[[Special:UserLogout|ล็อกเอาต์]]และล็อกอินกลับมา",
+ "token_suffix_mismatch": "<strong>การแก้ไขของคุณถูกปฏิเสธ เนื่องจากเครื่องลูกข่ายของคุณทำให้อักขระเครื่องหมายวรรคตอนในโทเค็นการแก้ไขเสีย</strong>\nการแก้ไขนี้ถูกปฏิเสธเพื่อป้องกันการวิบัติของข้อความหน้า\nบางครั้งเกิดปัญหานี้ขึ้นเมื่อคุณใช้บริการเว็บพร็อกซีนิรนามที่มีจุดบกพร่อง",
+ "edit_form_incomplete": "<strong>แบบแก้ไขบางส่วนไปไม่ถึงเซิร์ฟเวอร์ ตรวจสอบอีกครั้งว่าการแก้ไขของคุณยังอยู่และลองอีกครั้ง</strong>",
"editing": "กำลังแก้ไข $1",
"creating": "กำลังสร้าง $1",
"editingsection": "กำลังแก้ไข $1 (เฉพาะส่วน)",
"editingcomment": "กำลังแก้ไข $1 (ส่วนใหม่)",
"editconflict": "แก้ไขชนกัน: $1",
- "explainconflict": "ใครบางคนได้เปลี่ยนแปลงหน้านี้ตั้งแต่คุณกำลังแก้ไข\nพื้นที่ข้อความส่วนบนมีข้อความหน้าที่มีอยู่ในปัจจุบัน\nการแก้ไขของคุณแสดงอยู่ในพื้นที่ข้อความส่วนล่าง\nคุณจะต้องรวมการเปลี่ยนแปลงของคุณเข้ากับข้อความที่มีอยู่\n'''เฉพาะ'''ข้อความในพื้นที่ข้อความส่วนบนเท่านั้นที่จะถูกบันทึก เมื่อกดปุ่ม \"{{int:savearticle}}\"",
+ "explainconflict": "มีผู้เปลี่ยนแปลงหน้านี้ตั้งแต่คุณเริ่มแก้ไข\nพื้นที่ข้อความส่วนบนมีข้อความหน้าที่มีอยู่ในปัจจุบัน\nการแก้ไขของคุณแสดงอยู่ในพื้นที่ข้อความส่วนล่าง\nคุณจะต้องรวมการเปลี่ยนแปลงของคุณเข้ากับข้อความที่มีอยู่\n<strong>เฉพาะ</strong>ข้อความในพื้นที่ข้อความส่วนบนเท่านั้นที่จะถูกบันทึก เมื่อกด \"{{int:savearticle}}\"",
"yourtext": "ข้อความของคุณ",
"storedversion": "รุ่นที่เก็บไว้",
- "nonunicodebrowser": "'''คำเตือน: เว็บเบราว์เซอร์นี้ไม่สนับสนุนการใช้งานแบบยูนิโคด ตัวอักษรที่ไม่ใช่แบบแอสกีจะแสดงในกล่องการแก้ไขในลักษณะรหัสเลขฐานสิบหก'''",
- "editingold": "'''คำเตือน: ข้อมูลที่แก้ไขอยู่ไม่ใช่ข้อมูลใหม่ล่าสุดของหน้านี้ ถ้าทำการบันทึกไป การเปลี่ยนแปลงที่เกิดขึ้นระหว่างรุ่นนี้กับรุ่นใหม่จะสูญหาย'''",
+ "nonunicodebrowser": "<strong>คำเตือน: เบราว์เซอร์ของคุณไม่สนับสนุนยูนิโคด</strong> \nการแก้ไขไปพลางจะทำให้คุณแก้ไขหน้าได้อย่างปลอดภัย: อักขระที่มิใช่ ASCII จะปรากฏในกล่องแก้ไขเป็นรหัสฐานสิบหก",
+ "editingold": "<strong>คำเตือน: คุณกำลังแก้ไขรุ่นที่ล้าสมัยของหน้านี้</strong> ถ้าคุณบันทึก การเปลี่ยนแปลงใด ๆ หลังรุ่นนี้จะหาย",
"yourdiff": "ความแตกต่าง",
- "copyrightwarning": "โปรดอย่าลืมว่างานเขียนทั้งหมดใน {{SITENAME}} ผู้เขียนทั้งหมดยินดีให้งานเก็บไว้ภายใต้สัญญาลิขสิทธิ์ $2 (ดู $1 สำหรับข้อมูลเพิ่มเติม)\nถ้าคุณไม่ต้องการให้งานของคุณถูกแก้ไข หรือไม่ต้องการให้งานเผยแพร่ตามที่ได้กล่าวไว้ อย่าส่งข้อความเข้ามาที่นี่<br />\nนอกจากนี้แน่ใจว่าข้อความที่ส่งเข้ามาได้เขียนด้วยตัวเอง ไม่ได้คัดลอก หรือทำซ้ำจากแหล่งอื่น\n'''อย่าส่งงานที่มีลิขสิทธิ์เข้ามาก่อนได้รับอนุญาตจากเจ้าของ!'''",
- "copyrightwarning2": "โปรดอย่าลืมว่างานเขียนทั้งหมดใน {{SITENAME}} อาจจะถูกแก้ไข ดัดแปลง หรือลบออกโดยผู้ร่วมเขียนคนอื่น\nถ้าคุณไม่ต้องการให้งานของคุณถูกแก้ไข หรือไม่ต้องการให้งานเผยแพร่ตามที่กล่าวไว้ อย่าส่งข้อความของคุณเข้ามาที่นี่<br />\nนอกจากนี้คุณแน่ใจว่าข้อความที่ส่งเข้ามาคุณได้เขียนด้วยตัวเอง ไม่ได้คัดลอก ทำซ้ำส่วนหนึ่งส่วนใดหรือทั้งหมดจากแหล่งอื่น (ดูรายละเอียดที่ $1)\n'''อย่าส่งงานที่มีลิขสิทธิ์เข้ามาก่อนได้รับอนุญาตจากเจ้าของ!'''",
- "longpageerror": "'''ข้อผิดพลาด: ข้อความที่คุณส่งเข้ามามีขนาด $1 กิโลไบต์\nซึ่งเกินกว่าขนาดสูงสุดซึ่งกำหนดไว้ที่ $2 กิโลไบต์ จึงไม่สามารถบันทึกได้'''",
- "readonlywarning": "'''คำเตือน: ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา คุณจึงไม่สามารถบันทึกการเปลี่ยนแปลงของคุณได้ในขณะนี้'''\nคุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ใช้ภายหลัง\n\nผู้ดูแลระบบที่ล็อกฐานข้อมูลได้ให้คำอธิบายดังนี้: $1",
- "protectedpagewarning": "'''คำเตือน: หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น'''\nรายการปูมล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
- "semiprotectedpagewarning": "'''หมายเหตุ:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้น\nรายการแก้ไขล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง",
- "cascadeprotectedwarning": "'''คำเตือน:''' หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
- "titleprotectedwarning": "'''คำเตือน: หน้านี้ได้รับการป้องกัน สร้างได้เฉพาะผู้ใช้ที่มี[[Special:ListGroupRights|สิทธิจำเพาะ]]เท่านั้น'''\nรายการปูมล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง",
+ "copyrightwarning": "โปรดระลึกว่างานเขียนทั้งหมดใน {{SITENAME}} ถือว่าเผยแพร่ภายใต้ $2 (ดูรายละเอียดทาง $1)\nหากคุณไม่ต้องการให้งานของคุณถูกแก้ไขและกระจายได้ตามใจ ก็อย่าส่งเข้ามา<br />\nนอกจากนี้ คุณยังสัญญาเราว่าคุณเขียนงานด้วยตนเอง หรือคัดลอกจากสาธารณสมบัติหรือทรัพยากรเสรีที่คล้ายกัน\n<strong>อย่าส่งงานมีลิขสิทธิ์โดยไม่ได้รับอนุญาต!</strong>",
+ "copyrightwarning2": "โปรดระลึกว่างานเขียนทั้งหมดใน {{SITENAME}} อาจถูกผู้เขียนอื่นแก้ไข เปลี่ยนแปลงหรือนำออก\nหากคุณไม่ต้องการให้งานของคุณถูกแก้ไข ก็อย่าส่งเข้ามา<br />\nนอกจากนี้ คุณยังสัญญาเราว่าคุณเขียนงานด้วยตนเอง หรือคัดลอกจากสาธารณสมบัติหรือทรัพยากรเสรีที่คล้ายกัน (ดูรายละเอียดที่ $1)\n<strong>อย่าส่งงานมีลิขสิทธิ์โดยไม่ได้รับอนุญาต!</strong>",
+ "longpageerror": "<strong>ข้อผิดพลาด: ข้อความที่คุณส่งมีขนาด $1 กิโลไบต์\nซึ่งเกินสูงสุด $2 กิโลไบต์</strong>\nไม่สามารถบันทึกได้",
+ "readonlywarning": "<strong>คำเตือน: ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา คุณจึงไม่สามารถบันทึกการเปลี่ยนแปลงของคุณได้ในขณะนี้</strong>\nคุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ภายหลัง\n\nผู้ดูแลระบบที่ล็อกฐานข้อมูลให้คำอธิบายดังนี้: $1",
+ "protectedpagewarning": "<strong>คำเตือน: หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบแก้ไขได้เท่านั้น</strong>\nรายการปูมล่าสุดจัดไว้ด้านล่างเพื่อการอ้างอิง:",
+ "semiprotectedpagewarning": "<strong>หมายเหตุ:</strong> หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ลงทะเบียนสามารถแก้ไขเท่านั้น\nรายการปูมล่าสุดได้จัดไว้ด้านล่างนี้เพื่อการอ้างอิง",
+ "cascadeprotectedwarning": "<strong>คำเตือน:</strong> หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
+ "titleprotectedwarning": "<strong>คำเตือน: หน้านี้ได้รับการป้องกัน สร้างได้เฉพาะผู้ใช้ที่มี[[Special:ListGroupRights|สิทธิจำเพาะ]]เท่านั้น</strong>\nรายการปูมล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง",
"templatesused": "{{PLURAL:$1|แม่แบบ}}ที่ใช้ในหน้านี้:",
- "templatesusedpreview": "{{PLURAL:$1|แม่แบบ}}ที่ใช้ในการแสดงตัวอย่าง:",
+ "templatesusedpreview": "{{PLURAL:$1|แม่แบบ}}ที่ใช้ในตัวอย่างนี้:",
"templatesusedsection": "{{PLURAL:$1|แม่แบบ}}ที่ใช้ในส่วนนี้:",
"template-protected": "(ถูกล็อก)",
"template-semiprotected": "(ถูกกึ่งล็อก)",
"hiddencategories": "หน้านี้มี {{PLURAL:$1|1 หมวดหมู่ที่ซ่อนอยู่|$1 หมวดหมู่ที่ซ่อนอยู่}}:",
"edittools": "<!-- ข้อความนี้จะแสดงผลใต้ฟอร์มสำหรับการแก้ไขและอัปโหลด -->",
"nocreatetext": "{{SITENAME}} จำกัดการสร้างหน้าใหม่\nคุณสามารถย้อนกลับไปแก้ไขหน้าที่มีอยู่เดิม หรือ[[Special:UserLogin|ล็อกอินหรือสร้างบัญชีผู้ใช้]]",
- "nocreate-loggedin": "คุณไม่ได้รับอนุญาตให้สร้างหน้าใหม่",
+ "nocreate-loggedin": "คุณไม่มีสิทธิสร้างหน้าใหม่",
"sectioneditnotsupported-title": "ไม่สนับสนุนการแก้ไขหัวข้อย่อย",
"sectioneditnotsupported-text": "ไม่สนับสนุนการแก้ไขหัวข้อย่อยในหน้านี้",
"permissionserrors": "ข้อผิดพลาดในการใช้สิทธิ",
- "permissionserrorstext": "คุณไม่ได้รับสิทธิในการทำสิ่งนี้ เนื่องจาก{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:",
+ "permissionserrorstext": "คุณไม่มีสิทธิทำเช่นนั้น เนื่องจาก{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:",
"permissionserrorstext-withaction": "คุณไม่มีสิทธิ$2 ด้วย{{PLURAL:$1|เหตุ|เหตุ}}ต่อไปนี้:",
- "recreate-moveddeleted-warn": "'''คำเตือน: คุณกำลังสร้างหน้าซึ่งได้ถูกลบไปก่อนหน้านี้แล้วอีกครั้ง'''\n\nคุณควรพิจารณาว่าการแก้ไขหน้านี้ต่อไปเหมาะสมหรือไม่\nปูมการลบและเปลี่ยนชื่อหน้านี้ได้แสดงไว้ด้านล่างเพื่อความสะดวก:",
- "moveddeleted-notice": "หน้านี้ถูกลบ\nปูมการลบและเปลี่ยนชื่อของหน้านี้ได้แสดงไว้ด้านล่างเพื่ออ้างอิง",
+ "recreate-moveddeleted-warn": "<strong>คำเตือน: คุณกำลังสร้างหน้าซึ่งได้ถูกลบไปก่อนหน้านี้แล้วอีกครั้ง</strong>\n\nคุณควรพิจารณาว่าการแก้ไขหน้านี้ต่อไปเหมาะสมหรือไม่\nปูมการลบและเปลี่ยนชื่อหน้านี้จัดไว้ด้านล่างเพื่อความสะดวก:",
+ "moveddeleted-notice": "หน้านี้ถูกลบ\nปูมการลบและเปลี่ยนชื่อของหน้านี้แสดงไว้ด้านล่างเพื่ออ้างอิง",
"log-fulllog": "ดูปูมแบบเต็ม",
- "edit-hook-aborted": "การแก้ไขถูกยกเลิก\nไม่มีคำอธิบายสำหรับการยกเลิกนี้",
- "edit-gone-missing": "ไม่สามารถอัปเดตหน้าดังกล่าวได้\nเนื่องจากหน้านี้ถูกลบไปแล้ว",
+ "edit-hook-aborted": "การแก้ไขถูกฮุกยกเลิก\nไม่ได้ให้คำอธิบาย",
+ "edit-gone-missing": "ไม่สามารถปรับหน้าดังกล่าวได้\nดูเหมือนถูกลบแล้ว",
"edit-conflict": "แก้ชนกัน",
- "edit-no-change": "การแก้ไขของคุณถูกเพิกเฉย เพราะไม่มีการเปลี่ยนแปลงใด ๆ",
- "postedit-confirmation-created": "หน้าถูกสร้างแล้ว",
- "postedit-confirmation-restored": "หน้าถูกกู้คืน",
+ "edit-no-change": "การแก้ไขของคุณถูกเพิกเฉย เพราะไม่มีการเปลี่ยนแปลงข้อความ",
+ "postedit-confirmation-created": "สร้างหน้าแล้ว",
+ "postedit-confirmation-restored": "กู้คืนหน้าแล้ว",
"postedit-confirmation-saved": "บันทึกการแก้ไขของคุณแล้ว",
- "edit-already-exists": "ไม่สามารถสร้างหน้าใหม่ได้\nเพราะมีหน้านี้แล้ว",
+ "edit-already-exists": "ไม่สามารถสร้างหน้าใหม่ได้\nเพราะมีแล้ว",
"defaultmessagetext": "ข้อความสารโดยปริยาย",
"content-failed-to-parse": "แจงส่วนเนื้อหา $2 ของตัวแบบ $1 ล้มเหลว: $3",
"invalid-content-data": "ข้อมูลเนื้อหาไม่ถูกต้อง",
- "content-not-allowed-here": "เนื้อหา \"$1\" ไม่อนุญาตในหน้า [[$2]]",
+ "content-not-allowed-here": "ไม่อนุญาตเนื้อหา \"$1\" ในหน้า [[$2]]",
"editwarning-warning": "การออกจากหน้านี้อาจทำให้ความเปลี่ยนแปลงที่คุณดำเนินการสูญหาย\nถ้าคุณล็อกอินแล้ว คุณสามารถปิดคำเตือนนี้ได้ที่ส่วน \"{{int:prefs-editing}}\" ในการตั้งค่าของคุณ",
"editpage-notsupportedcontentformat-title": "รูปแบบเนื้อหาไม่ได้รับการรองรับ",
"editpage-notsupportedcontentformat-text": "ตัวแบบเนื้อหา $2 ไม่รองรับตัวแบบเนื้อหา $1",
@@ -661,15 +668,16 @@
"content-model-text": "ข้อความธรรมดา",
"content-model-javascript": "จาวาสคริปต์",
"content-model-css": "CSS",
- "expensive-parserfunction-warning": "'''คำเตือน:''' หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป\n\nหน้านี้ควรมีการเรียกใช้น้อยกว่า $2 ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง",
+ "duplicate-args-category": "หน้าที่ใช้อาร์กิวเมนต์จำลองในการเรียกแม่แบบ",
+ "expensive-parserfunction-warning": "<strong>คำเตือน:</strong> หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป\n\nหน้านี้ควรมีการเรียกใช้น้อยกว่า $2 ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง",
"expensive-parserfunction-category": "หน้าที่มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป",
- "post-expand-template-inclusion-warning": "'''คำเตือน:''' แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป\nบางแม่แบบจะไม่ถูกรวมเข้ามา",
+ "post-expand-template-inclusion-warning": "<strong>คำเตือน:</strong> แม่แบบที่นำมารวมมีขนาดใหญ่เกินไป\nจะไม่รวมบางแม่แบบเข้ามา",
"post-expand-template-inclusion-category": "หน้าที่มีแม่แบบรวมมาเกินขนาด",
- "post-expand-template-argument-warning": "คำเตือน: หน้านี้มีแม่แบบที่มีอาร์กิวเมนต์ขนาดใหญ่เกินไป อาร์กิวเมนต์เหล่านี้จะถูกละทิ้ง",
- "post-expand-template-argument-category": "หน้าที่มีแม่แบบซึ่งอาร์กิวเมนต์ถูกละทิ้ง",
- "parser-template-loop-warning": "ตรวจพบแม่แบบกลับมาเรียกตัวเอง: [[$1]]",
- "parser-template-recursion-depth-warning": "เรียกแม่แบบซ้อนหลายชั้นเกินขีดจำกัด ($1)",
- "language-converter-depth-warning": "คำสั่งในการแปลงภาษาลึกเกิน $1 ลำดับ",
+ "post-expand-template-argument-warning": "<strong>คำเตือน:</strong> หน้านี้มีอาร์กิวเมนต์แม่แบบอย่างน้อยหนึ่งที่มีขนาดขยายใหญ่เกินไป\nสละอาร์กิวเมนต์เหล่านี้แล้ว",
+ "post-expand-template-argument-category": "หน้าที่มีอาร์กิวเมนต์แม่แบบถูกสละ",
+ "parser-template-loop-warning": "ตรวจพบวงวนแม่แบบ: [[$1]]",
+ "parser-template-recursion-depth-warning": "เกินขีดจำกัดความลึกการเรียกแม่แบบซ้ำ ($1)",
+ "language-converter-depth-warning": "เกินขีดจำกัดความลึกตัวแปลงผันภาษา ($1)",
"node-count-exceeded-category": "หน้าที่จำนวนปมเกิน",
"node-count-exceeded-warning": "หน้าเกินจำนวนปม",
"expansion-depth-exceeded-category": "หน้าที่ความลึกการขยายเกิน",
@@ -677,12 +685,12 @@
"parser-unstrip-loop-warning": "พบวงวน unstrip",
"parser-unstrip-recursion-limit": "ขีดจำกัดการเรียกซ้ำ unstrip เกิน ($1)",
"converter-manual-rule-error": "พบข้อผิดพลาดในกฎการแปลงผันภาษาด้วยมือ",
- "undo-success": "การแก้ไขนี้สามารถย้อนกลับได้ กรุณาตรวจสอบข้อแตกต่างด้านล่างให้แน่ใจว่านี่คือสิ่งที่คุณต้องการทำ จากนั้นให้บันทึกการเปลี่ยนแปลงด้านล่างเพื่อเสร็จสิ้นขั้นตอน",
- "undo-failure": "การแก้ไขนี้ไม่สามารถย้อนกลับได้ เนื่องจากขัดแย้งกับการแก้ไขปัจจุบัน",
- "undo-norev": "ไม่สามารถย้อนการแก้ไขนี้ เพราะไม่มีหรือถูกลบไปแล้ว",
- "undo-nochange": "ดูเหมือนว่าการแก้ไขดังกล่าวถูกย้อนแล้ว",
- "undo-summary": "ย้อนการแก้ไขรุ่น $1 โดย [[Special:Contributions/$2|$2]] ([[User talk:$2|พูดคุย]])",
- "undo-summary-username-hidden": "ย้อนรุ่น $1 โดยผู้ใช้ไม่ระบุชื่อ",
+ "undo-success": "สามารถย้อนการแก้ไขนี้กลับได้ \nกรุณาตรวจสอบข้อแตกต่างด้านล่างเพื่อทวนสอบว่านี่เป็นสิ่งที่คุณต้องการทำ แล้วบันทึกการเปลี่ยนแปลงด้านล่างเพื่อเสร็จสิ้นการย้อนการแก้ไขกลับ",
+ "undo-failure": "การแก้ไขนี้ไม่สามารถย้อนกลับได้ เนื่องจากขัดแย้งกับการแก้ไขระหว่างกลาง",
+ "undo-norev": "ไม่สามารถย้อนการแก้ไขนี้กลับ เพราะไม่มีหรือถูกลบไปแล้ว",
+ "undo-nochange": "ดูเหมือนว่าการแก้ไขดังกล่าวถูกย้อนกลับแล้ว",
+ "undo-summary": "ทำกลับรุ่นแก้ไข $1 โดย [[Special:Contributions/$2|$2]] ([[User talk:$2|พูดคุย]])",
+ "undo-summary-username-hidden": "ทำกลับรุ่นแก้ไข $1 โดยผู้ใช้ไม่ระบุชื่อ",
"cantcreateaccounttitle": "ไม่สามารถสร้างบัญชีได้",
"cantcreateaccount-text": "การสร้างบัญชีใหม่จากที่อยู่ไอพีนี้ ('''$1''') ถูกระงับโดย [[User:$3|$3]]\n\nเหตุผลที่ $3 ให้ไว้ คือ ''$2''",
"cantcreateaccount-range-text": "การสร้างบัญชีจากเลขที่อยู่ไอพีในช่วง '''$1''' ซึ่งรวมเลขที่อยู่ไอพีของคุณ ('''$4''') ถูกบล็อกโดย [[User:$3|$3]] \n\nเหตุผลที่ $3 ชี้แจง คือ ''$2''",
@@ -690,136 +698,136 @@
"nohistory": "ไม่มีประวัติการแก้ไขสำหรับหน้านี้",
"currentrev": "รุ่นปัจจุบัน",
"currentrev-asof": "รุ่นปัจจุบัน เมื่อ $1",
- "revisionasof": "รุ่นเมื่อ $1",
- "revision-info": "รุ่นเมื่อ $1 โดย {{GENDER:$6|$2}}$7",
- "previousrevision": "←รุ่นก่อนหน้า",
- "nextrevision": "รุ่นถัดไป→",
+ "revisionasof": "รุ่นปรับปรุงเมื่อ $1",
+ "revision-info": "รุ่นปรับปรุงเมื่อ $1 โดย {{GENDER:$6|$2}}$7",
+ "previousrevision": "←รุ่นปรับปรุงก่อนหน้า",
+ "nextrevision": "รุ่นปรับปรุงถัดไป→",
"currentrevisionlink": "รุ่นล่าสุด",
"cur": "ป",
"next": "ถัดไป",
"last": "ก",
"page_first": "แรกสุด",
"page_last": "ท้ายสุด",
- "histlegend": "วิธีเปรียบเทียบ: เลือกปุ่มของรุ่นสองรุ่นที่ต้องการเปรียบเทียบ และกดปุ่มเริ่มเปรียบเทียบด้านล่าง<br />\nคำอธิบาย: <strong>({{int:cur}})</strong> = เทียบกับรุ่นปัจจุบัน, <strong>({{int:last}})</strong> = เทียบกับรุ่นก่อนหน้า, <strong>{{int:minoreditletter}}</strong> = การแก้ไขเล็กน้อย",
- "history-fieldset-title": "ค้นหาประวัติ",
+ "histlegend": "การเลือกผลต่าง: เลือกปุ่มของสองรุ่นที่ต้องการเปรียบเทียบ และกดป้อนเข้าหรือปุ่มด้านล่าง<br />\nคำอธิบาย: <strong>({{int:cur}})</strong> = ผลต่างกับรุ่นปัจจุบัน, <strong>({{int:last}})</strong> = ผลต่างกับรุ่นก่อนหน้า, <strong>{{int:minoreditletter}}</strong> = การแก้ไขเล็กน้อย",
+ "history-fieldset-title": "ค้นดูประวัติ",
"history-show-deleted": "เฉพาะที่ถูกลบ",
"histfirst": "แรกสุด",
"histlast": "ล่าสุด",
- "historysize": "$1 ไบต์",
+ "historysize": "($1 ไบต์)",
"historyempty": "(ว่าง)",
- "history-feed-title": "ประวัติรุ่น",
- "history-feed-description": "ประวัติรุ่นของหน้านี้ในวิกิ",
+ "history-feed-title": "ประวัติรุ่นปรับปรุง",
+ "history-feed-description": "ประวัติรุ่นปรับปรุงของหน้านี้ในวิกิ",
"history-feed-item-nocomment": "$1 เมื่อ $2",
- "history-feed-empty": "ไม่มีหน้าที่ต้องการ \nซึ่งอาจถูกลบหรือถูกเปลี่ยนชื่อไปแล้ว \nลอง[[Special:Search|ค้นวิกินี้]]หาหน้าใหม่ที่เกี่ยวข้อง",
+ "history-feed-empty": "ไม่มีหน้าที่ต้องการ \nซึ่งอาจถูกลบหรือเปลี่ยนชื่อแล้ว \nลอง[[Special:Search|ค้นวิกินี้]]หาหน้าใหม่ที่เกี่ยวข้อง",
"rev-deleted-comment": "(คำอธิบายอย่างย่อถูกลบออก)",
"rev-deleted-user": "(ชื่อผู้ใช้ถูกลบออก)",
- "rev-deleted-event": "(ปฏิบัติการปูมถูกลบออก)",
- "rev-deleted-user-contribs": "[ชื่อผู้ใช้หรือเลขที่อยู่ไอพีถูกลบแล้ว - การแก้ไขถูกซ่อนจากรายการแก้ไข]",
- "rev-deleted-text-permission": "รุ่นหน้านี้'''ถูกลบ'''\nรายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
- "rev-deleted-text-unhide": "รุ่นหน้านี้'''ถูกลบ'''\nรายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]\nคุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
- "rev-suppressed-text-unhide": "รุ่นหน้านี้'''ถูกยับยั้ง'''\nรายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]\nคุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
- "rev-deleted-text-view": "รุ่นหน้านี้'''ถูกลบ'''\nคุณสามารถดูรุ่นนี้ได้ รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
- "rev-suppressed-text-view": "รุ่นหน้านี้'''ถูกยับยั้ง'''\nคุณสามารถดูรุ่นนี้ได้ รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
- "rev-deleted-no-diff": "คุณไม่สามารถเรียกดูผลต่างนี้ เพราะมีบางรุ่น'''ถูกลบ'''\nรายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
- "rev-suppressed-no-diff": "คุณไม่สามารถดูผลต่างนี้ได้ เพราะมีผลต่างหนึ่งที่'''ถูกลบ'''",
- "rev-deleted-unhide-diff": "รุ่นหนึ่งของผลต่างนี้'''ถูกลบ'''\nรายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]\nคุณยังสามารถ[$1 ดูผลต่างนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
- "rev-suppressed-unhide-diff": "รุ่นหนึ่งของผลต่างนี้'''ถูกยับยั้ง'''\nรายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]\nคุณยังสามารถ[$1 ดูผลต่างนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
+ "rev-deleted-event": "(รายละเอียดปูมถูกลบ)",
+ "rev-deleted-user-contribs": "[นำชื่อผู้ใช้หรือเลขที่อยู่ไอพีออกแล้ว - การแก้ไขถูกซ่อนจากรายการแก้ไข]",
+ "rev-deleted-text-permission": "รุ่นหน้านี้ <strong>ถูกลบ</strong>.\nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+ "rev-suppressed-text-permission": "รุ่นหน้านี้ถูก<strong>ยับยั้ง</strong> \nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
+ "rev-deleted-text-unhide": "รุ่นหน้านี้<strong>ถูกลบ</strong>\nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]\nคุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
+ "rev-suppressed-text-unhide": "รุ่นหน้านี้<strong>ถูกยับยั้ง</strong>\nพบรายละเอียดพบใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]\nคุณยังสามารถ[$1 ดูรุ่นนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
+ "rev-deleted-text-view": "รุ่นหน้านี้<strong>ถูกลบ</strong>\nคุณสามารถดูรุ่นนี้ได้ พบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+ "rev-suppressed-text-view": "รุ่นหน้านี้strong>ถูกยับยั้ง</strong>\nคุณสามารถดูรุ่นนี้ได้ พบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
+ "rev-deleted-no-diff": "คุณไม่สามารถเรียกดูผลต่างนี้ เพราะมีรุ่นหนึ่ง<strong>ถูกลบ</strong>\nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+ "rev-suppressed-no-diff": "คุณไม่สามารถดูผลต่างนี้ได้ เพราะมีรุ่นหนึ่งที่<strong>ถูกลบ</strong>",
+ "rev-deleted-unhide-diff": "รุ่นหนึ่งของผลต่างนี้<strong>ถูกลบ</strong>\nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]\nคุณยังสามารถ[$1 ดูผลต่างนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
+ "rev-suppressed-unhide-diff": "รุ่นหนึ่งของผลต่างนี้<strong>ถูกยับยั้ง</strong>\nพบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]\nคุณยังสามารถ[$1 ดูผลต่างนี้]ได้ถ้าคุณต้องการดำเนินต่อ",
"rev-deleted-diff-view": "รุ่นหนึ่งของผลต่างนี้'''ถูกลบ'''\nคุณสามารถดูผลต่างนี้ได้ รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
- "rev-suppressed-diff-view": "รุ่นหนึ่งของผลต่างนี้'''ถูกยับยั้ง'''\nคุณสามารถดูผลต่างนี้ได้ รายละเอียดพบได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
+ "rev-suppressed-diff-view": "รุ่นหนึ่งของผลต่างนี้<strong>ถูกยับยั้ง</strong>\nคุณสามารถดูผลต่างนี้ได้ พบรายละเอียดได้ใน[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ปูมการยับยั้ง]",
"rev-delundel": "เปลี่ยนทัศนวิสัย",
"rev-showdeleted": "แสดง",
- "revisiondelete": "ลบ/กู้คืนรุ่น",
- "revdelete-nooldid-title": "ไม่มีรุ่นที่ต้องการ",
- "revdelete-nooldid-text": "คุณมิได้เจาะจงรุ่นเป้าหมายเพื่อดำเนินการฟังก์ชันนี้ หรือไม่มีรุ่นที่เจาะจง หรือคุณกำลังพยายามซ่อนรุ่นปัจจุบันอย่างใดอย่างหนึ่ง",
+ "revisiondelete": "ลบ/กู้คืนรุ่นปรับปรุง",
+ "revdelete-nooldid-title": "รุ่นปรับปรุงเป้าหมายไม่สมเหตุสมผล",
+ "revdelete-nooldid-text": "คุณมิได้เจาะจงรุ่นปรับปรุงเป้าหมายเพื่อดำเนินการฟังก์ชันนี้ หรือไม่มีรุ่นปรับปรุงที่เจาะจง หรือคุณกำลังพยายามซ่อนรุ่นปัจจุบันอย่างใดอย่างหนึ่ง",
"revdelete-no-file": "ไม่มีไฟล์ที่ระบุ",
- "revdelete-show-file-confirm": "คุณแน่ใจที่จะดูรุ่นที่ถูกลบของไฟล์ \"<nowiki>$1</nowiki>\" เมื่อวันที่ $2 เวลา $3 หรือไม่",
+ "revdelete-show-file-confirm": "คุณแน่ใจว่าต้องการดูรุ่นที่ถูกลบของไฟล์ \"<nowiki>$1</nowiki>\" เมื่อวันที่ $2 เวลา $3 หรือไม่",
"revdelete-show-file-submit": "ใช่",
- "revdelete-selected-text": "{{PLURAL:$1|รุ่นที่เลือก}}ของ [[:$2]]:",
+ "revdelete-selected-text": "{{PLURAL:$1|รุ่นปรับปรุงที่เลือก}}ของ [[:$2]]:",
"revdelete-selected-file": "{{PLURAL:$1|รุ่นไฟล์ที่เลือก}}ของ [[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|เหตุการณ์ปูมที่เลือก|เหตุการณ์ปูมที่เลือก}} :",
- "revdelete-text-text": "รุ่นที่ถูกลบจะยังปรากฏในประวัติหน้า แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
- "revdelete-text-file": "รุ่นที่ถูกลบจะยังปรากฏในประวัติไฟล์ แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
- "logdelete-text": "รายการปูมที่ถูกลบจะยังปรากฏในปูม แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
- "revdelete-text-others": "ผู้ดูแลระบบคนอื่นจะยังสามารถเข้าถึงเนื้อหาที่ถูกซ่อน และสามารถกู้คืนเนื้อหาได้ ยกเว้นมีการตั้งข้อจำกัดเพิ่มเติม",
- "revdelete-confirm": "กรุณายืนยันว่าคุณมีเจตนาลบจริง และเข้าใจผลลัพธ์ และกระทำภายใต้[[{{MediaWiki:Policy-url}}|นโยบาย]]",
- "revdelete-suppress-text": "การระงับควรใช้'''เฉพาะ'''กรณีต่อไปนี้:\n* ข้อมูลที่อาจหมิ่นประมาท\n* ข้อมูลส่วนบุคคลที่ไม่เหมาะสม\n*: ''ที่อยู่บ้านและหมายเลขโทรศัพท์บ้าน, หมายเลขประกันสังคม, ฯลฯ''",
- "revdelete-legend": "ตั้งการจำกัดทัศนวิสัย:",
- "revdelete-hide-text": "ข้อความรุ่น",
+ "revdelete-text-text": "รุ่นปรับปรุงที่ถูกลบจะยังปรากฏในประวัติหน้า แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
+ "revdelete-text-file": "รุ่นไฟล์ที่ถูกลบจะยังปรากฏในประวัติไฟล์ แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
+ "logdelete-text": "เหตุการณ์ปูมที่ถูกลบจะยังปรากฏในปูม แต่สาธารณะจะไม่สามารถเข้าถึงเนื้อหาบางส่วนได้",
+ "revdelete-text-others": "ผู้ดูแลระบบคนอื่นจะยังสามารถเข้าถึงและกู้คืนเนื้อหาที่ถูกซ่อนได้ ยกเว้นตั้งข้อจำกัดเพิ่มเติม",
+ "revdelete-confirm": "กรุณายืนยันว่าคุณมีเจตนาลบ คุณเข้าใจผลลัพธ์ และคุณปฏิบัติการต้องกับ[[{{MediaWiki:Policy-url}}|นโยบาย]]",
+ "revdelete-suppress-text": "การระงับควรใช้<strong>เฉพาะ</strong>กรณีต่อไปนี้:\n* ข้อมูลที่อาจหมิ่นประมาท\n* ข้อมูลส่วนบุคคลที่ไม่เหมาะสม\n*: <em>ที่อยู่บ้านและหมายเลขโทรศัพท์บ้าน, หมายเลขการประกันสังคมแห่งชาติ ฯลฯ</em>",
+ "revdelete-legend": "ตั้งการจำกัดทัศนวิสัย",
+ "revdelete-hide-text": "ข้อความรุ่นปรับปรุง",
"revdelete-hide-image": "ซ่อนเนื้อหาไฟล์",
- "revdelete-hide-name": "ซ่อนปฏิบัติการและเป้าหมาย",
+ "revdelete-hide-name": "ซ่อนเป้าหมายและพารามิเตอร์",
"revdelete-hide-comment": "คำอธิบายอย่างย่อ",
"revdelete-hide-user": "ชื่อผู้ใช้/เลขที่อยู่ไอพีผู้เขียน",
- "revdelete-hide-restricted": "ระงับข้อมูลจากผู้ดูแลระบบเช่นเดียวกับผู้ใช้อื่น",
+ "revdelete-hide-restricted": "ยับยั้งข้อมูลจากผู้ดูแลระบบเช่นเดียวกับผู้ใช้อื่น",
"revdelete-radio-same": "(ไม่เปลี่ยนแปลง)",
"revdelete-radio-set": "ซ่อน",
"revdelete-radio-unset": "เปิดเผย",
- "revdelete-suppress": "ซ่อนข้อมูลจากผู้ดูแลระบบเช่นเดียวกับผู้ใช้อื่น",
- "revdelete-unsuppress": "ลบการจำกัดสำหรับรุ่นที่กู้คืน",
+ "revdelete-suppress": "ยับยั้งข้อมูลจากผู้ดูแลระบบเช่นเดียวกับผู้ใช้อื่น",
+ "revdelete-unsuppress": "ลบการจำกัดแก่รุ่นปรับปรุงที่กู้คืน",
"revdelete-log": "เหตุผล:",
- "revdelete-submit": "ใช้กับ{{PLURAL:$1|รุ่น|รุ่น}}ที่เลือก",
- "revdelete-success": "'''ปรับทัศนวิสัยรุ่นสำเร็จ'''",
- "revdelete-failure": "'''ไม่สามารถปรับทัศนวิสัยของรุ่นได้:'''\n$1",
- "logdelete-success": "'''ตั้งทัศนวิสัยปูมสำเร็จ'''",
- "logdelete-failure": "'''ไม่สามารถตั้งทัศนวิสัยของปูมได้:'''\n$1",
+ "revdelete-submit": "ใช้กับรุ่นปรับปรุง{{PLURAL:$1|}}ที่เลือก",
+ "revdelete-success": "<strong>ปรับทัศนวิสัยรุ่นปรับปรุงสำเร็จ</strong>",
+ "revdelete-failure": "<strong>ไม่สามารถปรับทัศนวิสัยของรุ่นปรับปรุงได้:</strong>\n$1",
+ "logdelete-success": "<strong>ตั้งทัศนวิสัยปูมสำเร็จ</strong>",
+ "logdelete-failure": "<strong>ไม่สามารถตั้งทัศนวิสัยของปูม:</strong>\n$1",
"revdel-restore": "เปลี่ยนทัศนวิสัย",
"pagehist": "ประวัติหน้า",
"deletedhist": "ประวัติที่ถูกลบ",
"revdelete-hide-current": "เกิดความผิดพลาดในการซ่อนรายการลงวันที่ $2 เวลา $1: นี่คือรุ่นการแก้ไขปัจจุบัน\nไม่สามารถซ่อนได้",
- "revdelete-show-no-access": "เกิดความผิดพลาดในการแสดงรายการลงวันที่ $2 เวลา $1: รายการนี้ถูกทำเครื่องหมายเป็น \"ถูกจำกัด\"\nคุณไม่มีสิทธิเข้าถึงรุ่นดังกล่าว",
- "revdelete-modify-no-access": "เกิดความผิดพลาดในการดัดแปรรายการลงวันที่ $2 เวลา $1: รายการนี้ถูกทำเครื่องหมายเป็น \"ถูกจำกัด\"\nคุณไม่มีสิทธิเข้าถึงรุ่นดังกล่าว",
- "revdelete-modify-missing": "เกิดข้อผิดพลาดในการดัดแปรรายการหมายเลข $1: รายการนี้สูญหายจากฐานข้อมูล!",
- "revdelete-no-change": "'''คำเตือน:''' รายการลงวันที่ $2 เวลา $1 ตั้งค่าทัศนวิสัยตามที่ขออยู่แล้ว",
- "revdelete-concurrent-change": "เกิดความผิดพลาดในการดัดแปรรายการลงวันที่ $2 เวลา $1: สถานะของรายการถูกบางคนเปลี่ยนขณะที่คุณพยายามดัดแปร\nโปรดตรวจสอบปูม",
- "revdelete-only-restricted": "เกิดข้อผิดพลาดในการซ่อนรายการลงวันที่ $2 เวลา $1: คุณไม่สามารถยับยั้งผู้ดูแลระบบมิให้ดูรุ่นนี้ได้โดยไม่เลือกตัวเลือกทัศนวิสัยอื่นด้วย",
+ "revdelete-show-no-access": "มีข้อผิดพลาดในการแสดงรายการวันที่ $2 เวลา $1: รายการนี้ถูกทำเครื่องหมายเป็น \"ถูกจำกัด\"\nคุณไม่มีสิทธิเข้าถึงรุ่นดังกล่าว",
+ "revdelete-modify-no-access": "มีข้อผิดพลาดในการดัดแปรรายการวันที่ $2 เวลา $1: รายการนี้ถูกทำเครื่องหมายเป็น \"ถูกจำกัด\"\nคุณไม่มีสิทธิเข้าถึงรุ่นดังกล่าว",
+ "revdelete-modify-missing": "มีข้อผิดพลาดในการดัดแปรรายการหมายเลข $1: รายการนี้สูญหายจากฐานข้อมูล!",
+ "revdelete-no-change": "<strong>คำเตือน:</strong> รายการวันที่ $2 เวลา $1 ตั้งค่าทัศนวิสัยตามที่ขออยู่แล้ว",
+ "revdelete-concurrent-change": "มีข้อผิดพลาดในการดัดแปรรายการลงวันที่ $2 เวลา $1: ดูเหมือนว่ามีผู้เปลี่ยนสถานะของรายการขณะคุณพยายามดัดแปร\nโปรดตรวจสอบปูม",
+ "revdelete-only-restricted": "มีข้อผิดพลาดในการซ่อนรายการวันที่ $2 เวลา $1: คุณไม่สามารถยับยั้งมิให้ผู้ดูแลระบบดูรุ่นนี้ได้โดยไม่เลือกตัวเลือกทัศนวิสัยอื่นด้วย",
"revdelete-reason-dropdown": "*เหตุผลการลบทั่วไป\n** ละเมิดลิขสิทธิ์\n** ความเห็นไม่เหมาะสมหรือสารสนเทศส่วนบุคคล\n** ชื่อผู้ใช้ไม่เหมาะสม\n** สารสนเทศที่อาจหมิ่นประมาท",
"revdelete-otherreason": "เหตุผลอื่น/เพิ่มเติม:",
"revdelete-reasonotherlist": "เหตุผลอื่น",
"revdelete-edit-reasonlist": "แก้ไขเหตุผลการลบ",
- "revdelete-offender": "ผู้เขียนรุ่น:",
- "suppressionlog": "ปูมการระงับ",
- "suppressionlogtext": "ด้านล่างนี้คือรายการการลบและการบล็อกที่เกี่ยวข้องกับเนื้อหาที่ถูกซ่อนจากผู้ดูแลระบบ\nดู[[Special:BlockList|รายการบล็อกไอพี]]สำหรับการบล็อกและการระงับในปัจจุบัน",
- "mergehistory": "ประวัติการรวมหน้า",
- "mergehistory-header": "หน้านี้ไว้ให้คุณใช้รวมรุ่นในประวัติการแก้ไขของหน้าต้นทางหนึ่งไปยังหน้าใหม่\nก่อนดำเนินการ ควรให้แน่ใจก่อนว่าการดำเนินการนี้ยังรักษาความต่อเนื่องของประวัติหน้าเก่า",
- "mergehistory-box": "รวมรุ่นของหน้าทั้งสอง:",
+ "revdelete-offender": "ผู้ประพันธ์รุ่นปรับปรุง:",
+ "suppressionlog": "ปูมการยับยั้ง",
+ "suppressionlogtext": "ด้านล่างนี้คือรายการการลบและบล็อกที่เกี่ยวข้องกับเนื้อหาที่ถูกซ่อนจากผู้ดูแลระบบ\nดู[[Special:BlockList|รายการบล็อก]]สำหรับรายการการแบนและบล็อกที่ยังมีผลในปัจจุบัน",
+ "mergehistory": "รวมประวัติหน้า",
+ "mergehistory-header": "หน้านี้ให้คุณรวมรุ่นของประวัติหน้าต้นทางหนึ่งไปหน้าใหม่\nให้แน่ใจว่าการเปลี่ยนแปลงนี้จะคงความต่อเนื่องของประวัติหน้าเก่า",
+ "mergehistory-box": "รวมรุ่นของสองหน้า:",
"mergehistory-from": "หน้าต้นทาง:",
"mergehistory-into": "หน้าปลายทาง:",
"mergehistory-list": "ประวัติการแก้ไขที่สามารถรวมได้",
- "mergehistory-merge": "รุ่นต่อไปนี้ของหน้า [[:$1]] สามารถรวมเข้ากับหน้า [[:$2]] ได้ ใช้คอลัมน์ปุ่มรวมเฉพาะรุ่นที่สร้างเวลาที่กำหนดหรือก่อนหน้านั้น หมายเหตุว่าการใช้ลิงก์นำทางจะตั้งคอลัมน์นี้ใหม่",
- "mergehistory-go": "แสดงการแก้ไขที่สามารถรวมได้",
- "mergehistory-submit": "รวมรุ่น",
- "mergehistory-empty": "ไม่มีรุ่นที่สามารถรวมได้",
- "mergehistory-success": "ประวัติ $3 รุ่นของ [[:$1]] ได้ถูกรวมเข้ากับ [[:$2]] แล้ว",
- "mergehistory-fail": "ไม่สามารถรวมประวัติการแก้ไขได้ โปรดตรวจสอบค่าตัวแปรหน้าและเวลาอีกครั้ง",
- "mergehistory-no-source": "ไม่มีหน้าต้นทาง $1 อยู่",
- "mergehistory-no-destination": "ไม่มีหน้าปลายทาง $1 อยู่",
+ "mergehistory-merge": "รุ่นต่อไปนี้ของหน้า [[:$1]] สามารถรวมกับหน้า [[:$2]] ได้ \nใช้คอลัมน์ปุ่มเพื่อรวมเฉพาะรุ่นที่สร้าง ณ และก่อนเวลาที่ระบุ\nหมายเหตุว่าการใช้ลิงก์นำทางจะตั้งคอลัมน์นี้ใหม่",
+ "mergehistory-go": "แสดงการแก้ไขที่รวมได้",
+ "mergehistory-submit": "รวมรุ่นปรับปรุง",
+ "mergehistory-empty": "ไม่มีรุ่นปรับปรุงที่รวมได้",
+ "mergehistory-success": "รวม $3 รุ่นปรับปรุงของ [[:$1]] เข้ากับ [[:$2]] แล้ว",
+ "mergehistory-fail": "ไม่สามารถรวมประวัติได้ โปรดตรวจสอบตัวแปรเสริมหน้าและเวลาอีกครั้ง",
+ "mergehistory-no-source": "ไม่มีหน้าต้นทาง $1",
+ "mergehistory-no-destination": "ไม่มีหน้าปลายทาง $1",
"mergehistory-invalid-source": "ชื่อเรื่องหน้าต้นทางต้องสมเหตุสมผล",
"mergehistory-invalid-destination": "ชื่อเรื่องหน้าปลายทางต้องสมเหตุสมผล",
"mergehistory-autocomment": "รวม [[:$1]] เข้ากับ [[:$2]]",
"mergehistory-comment": "รวม [[:$1]] เข้ากับ [[:$2]]: $3",
"mergehistory-same-destination": "หน้าต้นทางและปลายทางเป็นหน้าเดียวกันไม่ได้",
"mergehistory-reason": "เหตุผล:",
- "mergelog": "ปูมการรวมหน้า",
- "pagemerge-logentry": "รวม [[$1]] เข้ากับ [[$2]] (รุ่นถึง $3)",
- "revertmerge": "ยกเลิกการรวมหน้า",
- "mergelogpagetext": "ด้านล่างนี้เป็นรายการการรวมประวัติของหน้าหนึ่งเข้ากับของอีกหน้าหนึ่งล่าสุด",
+ "mergelog": "ปูมการรวม",
+ "revertmerge": "เลิกรวม",
+ "mergelogpagetext": "ด้านล่างนี้เป็นรายการการรวมประวัติหน้าหนึ่งกับของอีกหน้าหนึ่งล่าสุด",
"history-title": "ประวัติรุ่นปรับปรุงของ \"$1\"",
"difference-title": "ผลต่างระหว่างรุ่นของ \"$1\"",
"difference-title-multipage": "ผลต่างระหว่างหน้า \"$1\" และ \"$2\"",
"difference-multipage": "(ผลต่างระหว่างหน้า)",
"lineno": "แถว $1:",
- "compareselectedversions": "เปรียบเทียบรุ่นที่เลือกไว้",
- "showhideselectedversions": "แสดง/ซ่อนรุ่นที่เลือก",
- "editundo": "ย้อน",
+ "compareselectedversions": "เปรียบเทียบรุ่นที่เลือก",
+ "showhideselectedversions": "เปลี่ยนทัศนวิสัยของรุ่นที่เลือก",
+ "editundo": "ทำกลับ",
"diff-empty": "(ไม่แตกต่าง)",
- "diff-multi-sameuser": "(มิได้แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)",
- "diff-multi-otherusers": "(มิได้แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้ $2 คน)",
- "diff-multi-manyusers": "(มิได้แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้กว่า $2 คน)",
- "difference-missing-revision": "ไม่พบรุ่น{{PLURAL:$2|รุ่น| $2 รุ่น}}ของผลต่างนี้ ($1)\n\nโดยปกติเกิดจากการเข้าลิงก์ผลต่างของหน้าที่ถูกลบไปแล้ว \nดูรายละเอียดได้ที่[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
+ "diff-multi-sameuser": "(ไม่แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)",
+ "diff-multi-otherusers": "(ไม่แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้ $2 คน)",
+ "diff-multi-manyusers": "(ไม่แสดง $1 รุ่นระหว่างกลางโดยผู้ใช้กว่า $2 คน)",
+ "difference-missing-revision": "ไม่พบ{{PLURAL:$2|รุ่น| $2 รุ่น}}ของผลต่างนี้ ($1)\n\nโดยปกติเกิดจากการเข้าลิงก์ผลต่างของหน้าที่ถูกลบแล้ว \nดูรายละเอียดได้ที่[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
"searchresults": "ผลการค้นหา",
"searchresults-title": "ผลการค้นหาสำหรับ \"$1\"",
- "titlematches": "พบชื่อเรื่องหน้าตรงกัน",
- "textmatches": "พบข้อความตรงในหน้า",
- "notextmatches": "ไม่พบข้อความตรงในหน้า",
+ "titlematches": "ชื่อเรื่องหน้าตรงกัน",
+ "textmatches": "ข้อความหน้าตรงกัน",
+ "notextmatches": "ไม่พบข้อความหน้าตรงกัน",
"prevn": "ก่อนหน้า $1",
"nextn": "ถัดไป $1",
"prevn-title": "$1 ผลลัพธ์ก่อนหน้า",
@@ -827,11 +835,11 @@
"shown-title": "แสดง $1 ผลลัพธ์ต่อหน้า",
"viewprevnext": "ดู ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "<strong>มีหน้าชื่อ \"[[:$1]]\" บนวิกินี้</strong>\n{{PLURAL:$2|0=|ดูผลการค้นหาอื่นที่พบเพิ่มเติม}}",
- "searchmenu-new": "<strong>สร้างหน้า \"[[:$1]]\" บนวิกินี้!</strong> {{PLURAL:$2|0=|ดูหน้าที่พบด้วยการค้นหาของคุณ|ดูผลการค้นหาที่พบเพิ่มเติม}}",
+ "searchmenu-new": "<strong>สร้างหน้า \"[[:$1]]\" บนวิกินี้!</strong> {{PLURAL:$2|0=|ดูหน้าที่การค้นหาของคุณพบเพิ่ม|ดูผลการค้นหาที่พบเพิ่ม}}",
"searchprofile-articles": "หน้าเนื้อหา",
"searchprofile-images": "สื่อประสม",
"searchprofile-everything": "ทุกอย่าง",
- "searchprofile-advanced": "ชั้นสูง",
+ "searchprofile-advanced": "ขั้นสูง",
"searchprofile-articles-tooltip": "ค้นหาใน $1",
"searchprofile-images-tooltip": "ค้นหาไฟล์",
"searchprofile-everything-tooltip": "ค้นเนื้อหาทั้งหมด (รวมหน้าอภิปราย)",
@@ -840,10 +848,11 @@
"search-result-category-size": "$1 สมาชิก ($2 หมวดหมู่ย่อย, $3 ไฟล์)",
"search-redirect": "(เปลี่ยนทาง $1)",
"search-section": "(ส่วน $1)",
- "search-file-match": "(จับคู่เนื้อหาไฟล์)",
+ "search-category": "(หมวดหมู่ $1)",
+ "search-file-match": "(เนื้อหาไฟล์ตรง)",
"search-suggest": "คุณอาจหมายถึง: $1",
"search-interwiki-caption": "โครงการพี่น้อง",
- "search-interwiki-default": "ผลลัพธ์จาก $1 :",
+ "search-interwiki-default": "ผลลัพธ์จาก $1:",
"search-interwiki-more": "(เพิ่มเติม)",
"search-relatedarticle": "สัมพันธ์",
"searchrelated": "สัมพันธ์",
@@ -859,23 +868,28 @@
"powersearch-togglenone": "ไม่เลือก",
"powersearch-remember": "จำการเลือกสำหรับการค้นหาในอนาคต",
"search-external": "ค้นหาภายนอก",
- "searchdisabled": "การค้นหา {{SITENAME}} ปิดใช้งาน คุณสามารถค้นหาผ่านกูเกิลหรือเซิร์ชเอนจินอื่นในเวลาไม่นาน โปรดทราบว่าดัชนีเนื้อหาของ {{SITENAME}} บนเซิร์ชเอนจินอาจเป็นข้อมูลเก่า",
- "search-error": "เกิดข้อผิดพลาดขณะกำลังค้นหา: $1",
+ "searchdisabled": "การค้นหา {{SITENAME}} ถูกปิดใช้งาน \nคุณสามารถค้นหาโดยทางกูเกิลในระหว่างนั้น\nโปรดทราบว่าดัชนีเนื้อหา {{SITENAME} อาจล้าสมัย",
+ "search-error": "มีข้อผิดพลาดขณะค้นหา: $1",
"preferences": "การตั้งค่า",
"mypreferences": "การตั้งค่า",
"prefs-edits": "จำนวนการแก้ไข:",
"prefsnologintext2": "โปรดล็อกอินเพื่อเปลี่ยนการตั้งค่าของคุณ",
"prefs-skin": "หน้าตา",
- "skin-preview": "แสดงตัวอย่าง",
+ "skin-preview": "ตัวอย่าง",
"datedefault": "ไม่มีการตั้งค่า",
"prefs-labs": "คุณสมบัติทดลอง",
"prefs-user-pages": "หน้าผู้ใช้",
"prefs-personal": "โพรไฟล์ผู้ใช้",
"prefs-rc": "ปรับปรุงล่าสุด",
"prefs-watchlist": "รายการเฝ้าดู",
+ "prefs-editwatchlist": "แก้ไขรายการเฝ้าดู",
+ "prefs-editwatchlist-label": "แก้ไขรายการในรายการเฝ้าดูของคุณ:",
+ "prefs-editwatchlist-edit": "ดูและลบชื่อเรื่องในรายการเฝ้าดูของคุณ",
+ "prefs-editwatchlist-raw": "แก้ไขรายการเฝ้าดูดิบ",
+ "prefs-editwatchlist-clear": "ลบล้างรายการเฝ้าดูของคุณ",
"prefs-watchlist-days": "จำนวนวันที่แสดงในรายการเฝ้าดู:",
"prefs-watchlist-days-max": "มากสุด $1 วัน",
- "prefs-watchlist-edits": "จำนวนการแก้ไขมากสุดที่แสดงในรายการเฝ้าดูที่ขยายออก:",
+ "prefs-watchlist-edits": "จำนวนการแก้ไขมากสุดที่แสดงในรายการเฝ้าดูขยาย:",
"prefs-watchlist-edits-max": "จำนวนสูงสุด: 1000",
"prefs-watchlist-token": "โทเค็นรายการเฝ้าดู:",
"prefs-misc": "เบ็ดเตล็ด",
@@ -897,13 +911,13 @@
"recentchangescount": "จำนวนการแก้ไขที่แสดงโดยปริยาย:",
"prefs-help-recentchangescount": "นี่รวมถึงการปรับปรุงล่าสุด ประวิติหน้า และปูม",
"prefs-help-watchlist-token2": "นี่คือแป้นลับสำหรับเข้าการป้อนเว็บรายการเฝ้าดูของคุณ\nใครก็ตามที่ทราบจะสามารถอ่านรายการเฝ้าดูของคุณได้ ฉะนั้นอย่าบอกผู้อื่น\n[[Special:ResetTokens|คลิกที่นี่หากคุณต้องการตั้งใหม่]]",
- "savedprefs": "การตั้งค่าของคุณได้ถูกบันทึกแล้ว",
+ "savedprefs": "บันทึกการตั้งค่าของคุณแล้ว",
"timezonelegend": "เขตเวลา:",
- "localtime": "เวลาท้องถิ่น",
+ "localtime": "เวลาท้องถิ่น:",
"timezoneuseserverdefault": "ใช้ค่าโดยปริยายของวิกิ ($1)",
"timezoneuseoffset": "อื่น ๆ (ระบุส่วนต่างเวลา)",
"servertime": "เวลาเซิร์ฟเวอร์:",
- "guesstimezone": "เรียกค่าจากเว็บเบราว์เซอร์",
+ "guesstimezone": "เรียกค่าจากเบราว์เซอร์",
"timezoneregion-africa": "แอฟริกา",
"timezoneregion-america": "อเมริกา",
"timezoneregion-antarctica": "แอนตาร์กติกา",
@@ -914,15 +928,15 @@
"timezoneregion-europe": "ยุโรป",
"timezoneregion-indian": "มหาสมุทรอินเดีย",
"timezoneregion-pacific": "มหาสมุทรแปซิฟิก",
- "allowemail": "เปิดรับอีเมลจากผู้ใช้อื่น",
+ "allowemail": "เปิดใช้งานอีเมลจากผู้ใช้อื่น",
"prefs-searchoptions": "ค้นหา",
"prefs-namespaces": "เนมสเปซ",
"default": "ค่าโดยปริยาย",
"prefs-files": "ไฟล์",
"prefs-custom-css": "สไตล์ชีตปรับแต่งเอง",
"prefs-custom-js": "จาวาสคริปต์ปรับแต่งเอง",
- "prefs-common-css-js": "CSS / จาวาสคริปต์ที่ใช้ร่วมกันกับทุกหน้าตา:",
- "prefs-reset-intro": "คุณสามารถใช้หน้านี้ตั้งการตั้งค่าของคุณกลับไปยังค่าตั้งต้นของเว็บใหม่\nซึ่งไม่สามารถทำกลับได้",
+ "prefs-common-css-js": "CSS / จาวาสคริปต์รวมสำหรับทุกหน้าตา:",
+ "prefs-reset-intro": "คุณสามารถใช้หน้านี้ตั้งการตั้งค่าของคุณเป็นค่าโดยปริยายของเว็บใหม่\nไม่สามารถทำกลับได้",
"prefs-emailconfirm-label": "การยืนยันอีเมล:",
"youremail": "อีเมล:",
"username": "{{GENDER:$1|ชื่อผู้ใช้}}:",
@@ -932,24 +946,24 @@
"yourlanguage": "ภาษา:",
"yourvariant": "อักษรต่างรูปของเนื้อหา:",
"prefs-help-variant": "รูปแปรหรืออักขรวิธีที่คุณเลือกให้แสดงหน้าเนื้อหาของวิกินี้",
- "yournick": "ลายเซ็น:",
- "prefs-help-signature": "ความเห็นในหน้าพูดคุยควรลงลายเซ็นด้วย \"<nowiki>~~~~</nowiki>\" ซึ่งจะถูกแปลงเป็นลายเซ็นของคุณและตราเวลา",
- "badsig": "ลายเซ็นดิบไม่ถูกต้อง ให้ตรวจสอบแท็กเอชทีเอ็มแอล",
- "badsiglength": "ลายเซ็นของคุณยาวเกินไป ต้องยาวไม่เกิน $1 ตัวอักษร",
- "yourgender": "ต้องการให้ระบุเป็นเพศใด",
+ "yournick": "ลายเซ็นใหม่:",
+ "prefs-help-signature": "ควรลงลายเซ็นความเห็นในหน้าพูดคุยด้วย \"<nowiki>~~~~</nowiki>\" ซึ่งจะถูกแปลงเป็นลายเซ็นของคุณและตราเวลา",
+ "badsig": "ลายเซ็นดิบไม่ถูกต้อง \nให้ตรวจสอบป้ายระบุเอชทีเอ็มแอล",
+ "badsiglength": "ลายเซ็นของคุณยาวเกินไป \nต้องยาวไม่เกิน $1 อักขระ",
+ "yourgender": "ต้องการให้ระบุคุณเป็นเพศใด",
"gender-unknown": "ขอไม่ระบุ",
"gender-male": "ชาย",
"gender-female": "หญิง",
- "prefs-help-gender": "เลือกตั้งค่านี้หรือไม่ก็ได้\nซอฟต์แวร์ใช้ค่านี้เพื่อติดต่อคุณและกล่าวถึงคุณโดยใช้เพศทางไวยากรณ์ที่เหมาะสมเมื่อติดต่อผู้อื่น\nข้อมูลนี้เปิดเผยต่อสาธารณะ",
+ "prefs-help-gender": "เลือกตั้งค่านี้หรือไม่ก็ได้\nซอฟต์แวร์ใช้ค่านี้เพื่อติดต่อคุณและกล่าวถึงคุณโดยใช้เพศทางไวยากรณ์ที่เหมาะสมเมื่อติดต่อผู้อื่น\nสารสนเทศนี้เปิดเผยต่อสาธารณะ",
"email": "อีเมล",
- "prefs-help-realname": "ไม่จำเป็นต้องใช้ชื่อจริง ถ้าคุณเลือกใช้ชื่อจริง จะใช้เพื่อให้เกียรติแก่งานของคุณ",
- "prefs-help-email": "ไม่จำเป็นต้องใส่ที่อยู่อีเมล แต่จำเป็นสำหรับการตั้งรหัสผ่านใหม่เมื่อคุณลืมรหัสผ่าน",
- "prefs-help-email-others": "คุณยังสามารถเลือกให้ผู้อื่นติดต่อคุณโดยอีเมลผ่านลิงก์บนหน้าผู้ใช้หรือหน้าพูดคุยกับผู้ใช้ของคุณ\nที่อยู่อีเมลของคุณไม่ถูกเปิดเผยเมื่อผู้ใช้อื่นติดต่อคุณ",
+ "prefs-help-realname": "ไม่ต้องใช้ชื่อจริง \nหากใช้ จะใช้เพื่อบ่งชี้งานของคุณว่ามาจากคุณ",
+ "prefs-help-email": "ไม่จำเป็นต้องใส่ที่อยู่อีเมล แต่จำเป็นสำหรับการตั้งรหัสผ่านใหม่หากคุณลืมรหัสผ่าน",
+ "prefs-help-email-others": "คุณยังสามารถเลือกให้ผู้อื่นติดต่อคุณโดยอีเมลผ่านลิงก์บนหน้าผู้ใช้หรือหน้าพูดคุยกับผู้ใช้ของคุณ\nไม่เปิดเผยที่อยู่อีเมลของคุณเมื่อผู้ใช้อื่นติดต่อคุณ",
"prefs-help-email-required": "ต้องการที่อยู่อีเมล",
- "prefs-info": "ข้อมูลเบื้องต้น",
+ "prefs-info": "สารสนเทศเบื้องต้น",
"prefs-i18n": "สากลวิวัตน์",
"prefs-signature": "ลายเซ็น",
- "prefs-dateformat": "รูปแบบวันที่และเวลา",
+ "prefs-dateformat": "รูปแบบวัน",
"prefs-timeoffset": "ส่วนต่างเวลา",
"prefs-advancedediting": "ตัวเลือกทั่วไป",
"prefs-editor": "ตัวแก้ไข",
@@ -963,28 +977,29 @@
"prefs-tokenwatchlist": "โทเค็น",
"prefs-diffs": "ผลต่าง",
"prefs-help-prefershttps": "การตั้งค่านี้จะมีผลเมื่อคุณล็อกอินครั้งถัดไป",
+ "prefswarning-warning": "คุณเปลี่ยนแปลงการตั้งค่าของคุณที่ยังไม่ได้บันทึก\nหากคุณออกจากหน้านี้โดยไม่คลิก \"$1\" จะไม่ปรับการตั้งค่าของคุณ",
"prefs-tabs-navigation-hint": "แนะนำ: คุณสามารถใช้แป้นลูกศรซ้ายและขวาเพื่อนำทางระหว่างแถบในรายการแถบได้",
"email-address-validity-valid": "ที่อยู่อีเมลดูถูกต้อง",
"email-address-validity-invalid": "ป้อนที่อยู่อีเมลที่ถูกต้อง",
- "userrights": "บริหารสิทธิผู้ใช้",
- "userrights-lookup-user": "บริหารสิทธิผู้ใช้",
+ "userrights": "การบริหารสิทธิผู้ใช้",
+ "userrights-lookup-user": "บริหารกลุ่มผู้ใช้",
"userrights-user-editname": "ใส่ชื่อผู้ใช้:",
"editusergroup": "แก้ไขกลุ่มผู้ใช้",
- "editinguser": "กำลังเปลี่ยนสิทธิผู้ใช้ของผู้ใช้ '''[[User:$1|$1]]''' $2",
+ "editinguser": "กำลังเปลี่ยนสิทธิผู้ใช้ของผู้ใช้ <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "แก้ไขกลุ่มผู้ใช้",
"saveusergroups": "บันทึกกลุ่มผู้ใช้",
"userrights-groupsmember": "สมาชิกของ:",
"userrights-groupsmember-auto": "สมาชิกโดยปริยายของ:",
"userrights-groups-help": "คุณสามารถเปลี่ยนแปลงกลุ่มที่ผู้ใช้รายนี้อยู่:\n* กล่องที่มีเครื่องหมายถูก หมายความว่า ผู้ใช้อยู่ในกลุ่มนั้น\n* กล่องที่ไม่มีเครื่องหมายถูก หมายความว่า ผู้ใช้ไม่ได้อยู่ในกลุ่มนั้น\n* เครื่องหมาย * ชี้ว่าคุณไม่สามารถนำกลุ่มนั้นออกได้เมื่อคุณเพิ่มกลุ่มนั้นไปแล้ว หรือกลับกัน",
"userrights-reason": "เหตุผล:",
- "userrights-no-interwiki": "คุณไม่ได้รับสิทธิแก้ไขสิทธิผู้ใช้บนวิกิอื่น",
- "userrights-nodatabase": "ไม่มีฐานข้อมูล $1 อยู่ หรือฐานข้อมูลอยู่บนเครื่องอื่น",
+ "userrights-no-interwiki": "คุณไม่มีสิทธิแก้ไขสิทธิผู้ใช้บนวิกิอื่น",
+ "userrights-nodatabase": "ไม่มีฐานข้อมูล $1 หรือฐานข้อมูลอยู่บนเครื่องอื่น",
"userrights-nologin": "คุณต้อง[[Special:UserLogin|ล็อกอิน]]ด้วยบัญชีผู้ดูแลระบบก่อน จึงจะกำหนดสิทธิผู้ใช้ได้",
- "userrights-notallowed": "บัญชีของคุณไม่ได้รับอนุญาตให้เพิ่มหรือลดสิทธิผู้ใช้",
+ "userrights-notallowed": "บัญชีของคุณไม่มีสิทธิเพิ่มหรือเพิกถอนสิทธิผู้ใช้",
"userrights-changeable-col": "กลุ่มที่คุณสามารถเปลี่ยนได้",
"userrights-unchangeable-col": "กลุ่มที่คุณไม่สามารถเปลี่ยนได้",
"userrights-conflict": "พบการเปลี่ยนแปลงสิทธิผู้ใช้ขัดกัน! โปรดทบทวนและยืนยันการเปลี่ยนแปลงของคุณ",
- "userrights-removed-self": "คุณเพิกถอนสิทธิของคุณสำเร็จแล้ว ฉะนั้น คุณจึงไม่สามารถเข้าถึงหน้านี้ได้อีกต่อไป",
+ "userrights-removed-self": "คุณเพิกถอนสิทธิของคุณสำเร็จแล้ว ฉะนั้น คุณจึงไม่สามารถเข้าถึงหน้านี้ได้อีก",
"group": "กลุ่ม:",
"group-user": "ผู้ใช้",
"group-autoconfirmed": "ผู้ใช้ทั่วไป",
@@ -1014,21 +1029,22 @@
"right-move": "ย้ายหน้า",
"right-move-subpages": "ย้ายหน้าพร้อมหน้าย่อย",
"right-move-rootuserpages": "ย้ายหน้าผู้ใช้หลัก",
+ "right-move-categorypages": "เปลี่ยนชื่อหน้าหมวดหมู่",
"right-movefile": "ย้ายไฟล์",
"right-suppressredirect": "ไม่สร้างหน้าเปลี่ยนทางจากหน้าต้นทางเมื่อย้ายหน้า",
"right-upload": "อัปโหลดไฟล์",
- "right-reupload": "เขียนทับไฟล์เดิม",
- "right-reupload-own": "เขียนทับไฟล์เดิมที่อัปโหลดด้วยตนเอง",
- "right-reupload-shared": "เขียนทับไฟล์บนคลังเก็บสื่อส่วนกลาง",
+ "right-reupload": "บันทึกทับไฟล์เดิม",
+ "right-reupload-own": "บันทึกทับไฟล์เดิมที่คุณอัปโหลดเอง",
+ "right-reupload-shared": "บันทึกทับไฟล์บนคลังร่วมสื่อท้องถิ่น",
"right-upload_by_url": "อัปโหลดไฟล์จากยูอาร์แอล",
- "right-purge": "ล้างแคชของเว็บไซต์โดยไม่มีการยืนยัน",
+ "right-purge": "ล้างแคชของเว็บไซต์โดยไม่ยืนยัน",
"right-autoconfirmed": "ไม่ได้รับผลจากขีดจำกัดอัตรายึดเลขที่อยู่ไอพี",
"right-bot": "กำหนดเป็นกระบวนการอัตโนมัติ",
- "right-nominornewtalk": "ไม่มีการแก้ไขเล็กน้อยในหน้าอภิปรายที่ทำให้การแจ้งข้อความใหม่ปรากฏ",
+ "right-nominornewtalk": "หากไม่มีการแก้ไขเล็กน้อยในหน้าอภิปรายจะทำให้การแจ้งข้อความใหม่ปรากฏ",
"right-apihighlimits": "ใช้ข้อจำกัดที่สูงขึ้นในคำสั่งเอพีไอ",
"right-writeapi": "ใช้การเขียนเอพีไอ",
"right-delete": "ลบหน้า",
- "right-bigdelete": "ลบหน้าที่มีประวัติขนาดใหญ่",
+ "right-bigdelete": "ลบหน้าที่มีประวัติใหญ่",
"right-deletelogentry": "ลบและกู้คืนหน่วยปูมจำเพาะ",
"right-deleterevision": "ลบและกู้คืนรุ่นจำเพาะของหน้า",
"right-deletedhistory": "ดูหน่วยประวัติที่ถูกลบ โดยไม่มีข้อความที่เกี่ยวข้อง",
@@ -1039,14 +1055,15 @@
"right-viewsuppressed": "ดูรุ่นที่ถูกซ่อนจากผู้ใช้ทุกคน",
"right-suppressionlog": "ดูปูมส่วนตัว",
"right-block": "บล็อกมิให้ผู้ใช้อื่นแก้ไข",
- "right-blockemail": "บล็อกมิให้ผู้ใช้ส่งอีเมล",
+ "right-blockemail": "บล็อกผู้ใช้มิให้ส่งอีเมล",
"right-hideuser": "บล็อกชื่อผู้ใช้ ซ่อนไม่ให้สาธารณะเห็น",
"right-ipblock-exempt": "เลี่ยงการบล็อกเลขที่อยู่ไอพี บล็อกอัตโนมัติ และบล็อกช่วง",
"right-proxyunbannable": "เลี่ยงการบล็อกอัตโนมัติของพร็อกซี",
"right-unblockself": "ปลดบล็อกตนเอง",
"right-protect": "เปลี่ยนระดับการล็อกและแก้ไขหน้าที่ถูกล็อกแบบถ่ายทอด",
- "right-editprotected": "แก้ไขหน้าที่ถูกล็อกซึ่ง \"{{int:protect-level-sysop}}\"",
- "right-editsemiprotected": "แก้ไขหน้าที่ถูกล็อกซึ่ง \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editprotected": "แก้ไขหน้าที่ถูกล็อกในฐานะ \"{{int:protect-level-sysop}}\"",
+ "right-editsemiprotected": "แก้ไขหน้าที่ถูกล็อกในฐานะ \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "แก้ไขตัวแบบเนื้อหาของหน้า",
"right-editinterface": "แก้ไขอินเตอร์เฟซผู้ใช้",
"right-editusercssjs": "แก้ไขไฟล์ CSS และจาวาสคริปต์ของผู้ใช้อื่น",
"right-editusercss": "แก้ไขไฟล์ CSS ของผู้ใช้อื่น",
@@ -1054,7 +1071,7 @@
"right-editmyusercss": "แก้ไขไฟล์ซีเอสเอสผู้ใช้ของคุณเอง",
"right-editmyuserjs": "แก้ไขไฟล์จาวาสคริปต์ผู้ใช้ของคุณเอง",
"right-viewmywatchlist": "ดูรายการเฝ้าดูของคุณ",
- "right-editmywatchlist": "แก้ไขรายการเฝ้าดูของคุณ หมายเหตุว่า การกระทำบางอย่างอาจยังเพิ่มหน้าแม้จะปราศจากสิทธินี้",
+ "right-editmywatchlist": "แก้ไขรายการเฝ้าดูของคุณ หมายเหตุว่า บางปฏิบัติการจะยังเพิ่มหน้าแม้ปราศจากสิทธินี้",
"right-viewmyprivateinfo": "ดูข้อมูลส่วนตัวของคุณ (เช่น ที่อยู่อีเมล ชื่อจริง)",
"right-editmyprivateinfo": "แก้ไขข้อมูลส่วนตัวของคุณ (เช่น ที่อยู่อีเมล ชื่อจริง)",
"right-editmyoptions": "แก้ไขการตั้งค่าของคุณ",
@@ -1083,25 +1100,26 @@
"action-createpage": "สร้างหน้า",
"action-createtalk": "สร้างหน้าอภิปราย",
"action-createaccount": "สร้างบัญชีผู้ใช้นี้",
- "action-history": "ดูประวัติของหน้านี้",
+ "action-history": "ดูประวัติหน้านี้",
"action-minoredit": "ทำเครื่องหมายการแก้ไขนี้เป็นการแก้ไขเล็กน้อย",
"action-move": "ย้ายหน้านี้",
"action-move-subpages": "ย้ายหน้านี้และหน้าย่อย",
"action-move-rootuserpages": "ย้ายหน้าผู้ใช้หลัก",
+ "action-move-categorypages": "เปลี่ยนชื่อหน้าหมวดหมู่",
"action-movefile": "ย้ายไฟล์นี้",
"action-upload": "อัปโหลดไฟล์นี้",
- "action-reupload": "อัปโหลดทับไฟล์ที่มีอยู่แล้วนี้",
- "action-reupload-shared": "เขียนไฟล์นี้ทับบนคลังส่วนกลาง",
+ "action-reupload": "บันทึกทับไฟล์ที่มีอยู่แล้วนี้",
+ "action-reupload-shared": "บันทึกไฟล์นี้ทับบนคลังรวม",
"action-upload_by_url": "อัปโหลดไฟล์นี้จากยูอาร์แอล",
"action-writeapi": "ใช้การเขียนเอพีไอ",
"action-delete": "ลบหน้านี้",
- "action-deleterevision": "ลบรุ่นนี้",
+ "action-deleterevision": "ลบรุ่นปรับปรุงนี้",
"action-deletedhistory": "ดูประวัติที่ถูกลบของหน้านี้",
"action-browsearchive": "ค้นหาหน้าที่ถูกลบ",
"action-undelete": "กู้คืนหน้านี้",
- "action-suppressrevision": "ทบทวนและกู้คืนรุ่นที่ซ่อนอยู่นี้",
+ "action-suppressrevision": "ทบทวนและกู้คืนรุ่นปรับปรุงที่ซ่อนอยู่นี้",
"action-suppressionlog": "ดูปูมส่วนตัวนี้",
- "action-block": "บล็อกผู้ใช้รายนี้มิให้แก้ไข",
+ "action-block": "บล็อกผู้ใช้นี้มิให้แก้ไข",
"action-protect": "เปลี่ยนระดับการล็อกสำหรับหน้านี้",
"action-rollback": "ย้อนการแก้ไขของผู้ใช้ล่าสุดที่แก้ไขหน้าเฉพาะอย่างรวดเร็ว",
"action-import": "นำเข้าหน้าจากวิกิอื่น",
@@ -1116,10 +1134,11 @@
"action-sendemail": "ส่งอีเมล",
"action-editmywatchlist": "แก้ไขรายการเฝ้าดูของคุณ",
"action-viewmywatchlist": "ดูรายการเฝ้าดูของคุณ",
- "action-viewmyprivateinfo": "ดูข้อมูลส่วนตัวของคุณ",
- "action-editmyprivateinfo": "แก้ไขข้อมูลส่วนตัวของคุณ",
- "nchanges": "$1 การแก้ไข",
- "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ตั้งแต่การเข้าชมล่าสุด}}",
+ "action-viewmyprivateinfo": "ดูสารสนเทศส่วนตัวของคุณ",
+ "action-editmyprivateinfo": "แก้ไขสารสนเทศส่วนตัวของคุณ",
+ "action-editcontentmodel": "แก้ไขตัวแบบเนื้อหาของหน้า",
+ "nchanges": "$1 การเปลี่ยนแปลง",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ตั้งแต่การเยี่ยมชมครั้งสุดท้าย}}",
"enhancedrc-history": "ประวัติ",
"recentchanges": "ปรับปรุงล่าสุด",
"recentchanges-legend": "ตัวเลือกการปรับปรุงล่าสุด",
@@ -1128,9 +1147,9 @@
"recentchanges-feed-description": "ติดตามการปรับปรุงล่าสุดในวิกินี้ในฟีดนี้",
"recentchanges-label-newpage": "การแก้ไขนี้สร้างหน้าใหม่",
"recentchanges-label-minor": "เป็นการแก้ไขเล็กน้อย",
- "recentchanges-label-bot": "การแก้ไขนี้กระทำโดยบอต",
+ "recentchanges-label-bot": "บอตกระทำการแก้ไขนี้",
"recentchanges-label-unpatrolled": "การแก้ไขนี้ยังไม่ได้ตรวจสอบ",
- "recentchanges-label-plusminus": "ขนาดของหน้าเปลี่ยนไปด้วยจำนวนไบต์เท่านี้",
+ "recentchanges-label-plusminus": "ขนาดของหน้าเปลี่ยนไปจำนวนไบต์เท่านี้",
"recentchanges-legend-heading": "'''คำอธิบายสัญลักษณ์:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ดูเพิ่มที่ [[Special:NewPages|รายชื่อหน้าใหม่]])",
"rcnotefrom": "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ <strong>$3, $4</strong> (แสดงมากสุด <strong>$1</strong>)",
@@ -1173,10 +1192,10 @@
"recentchangeslinked": "ปรับปรุงที่เกี่ยวโยง",
"recentchangeslinked-feed": "ปรับปรุงที่เกี่ยวโยง",
"recentchangeslinked-toolbox": "การปรับปรุงที่เกี่ยวโยง",
- "recentchangeslinked-title": "การปรับปรุงที่โยงมายัง \"$1\"",
- "recentchangeslinked-summary": "หน้านี้เป็นรายการปรับปรุงล่าสุดของหน้าที่ถูกโยงไป (หรือไปยังหน้าต่าง ๆ ของหมวดหมู่ที่กำหนด) โดยหน้าที่อยู่ใน[[Special:Watchlist|รายการเฝ้าดู]]แสดงเป็น'''ตัวหนา'''",
+ "recentchangeslinked-title": "การปรับปรุงที่โยงกับ \"$1\"",
+ "recentchangeslinked-summary": "นี่คือรายการเปลี่ยนแปลงล่าสุดของหน้าที่ถูกลิงก์จากหน้าเฉพาะ (หรือไปสมาชิกของหมวดหมู่เฉพาะ)\nหน้าใน[[Special:Watchlist|รายการเฝ้าดู]]แสดงเป็น<strong>ตัวหนา</strong>",
"recentchangeslinked-page": "ชื่อหน้า:",
- "recentchangeslinked-to": "แสดงการเปลี่ยนแปลงไปยังหน้าที่เชื่อมโยงมายังหน้าที่ระบุแทน",
+ "recentchangeslinked-to": "แสดงการเปลี่ยนแปลงไปหน้าซึ่งโยงไปหน้าที่ระบุแทน",
"upload": "อัปโหลดไฟล์",
"uploadbtn": "อัปโหลดไฟล์",
"reuploaddesc": "ยกเลิกการอัปโหลดและกลับไปยังแบบอัปโหลด",
@@ -1186,7 +1205,7 @@
"upload_directory_missing": "สารบบอัปโหลด ($1) หาย และเว็บเซิร์ฟเวอร์ไม่สามารถสร้างได้",
"upload_directory_read_only": "เว็บเซิร์ฟเวอร์ไม่สามารถเขียนสารบบอัปโหลด ($1)",
"uploaderror": "การอัปโหลดผิดพลาด",
- "upload-recreate-warning": "'''คำเตือน: ไฟล์ชื่อนั้นถูกลบหรือเปลี่ยนชื่อแล้ว'''\n\nปูมการลบและปูมการย้ายของหน้านี้ถูกนำมาไว้ด้านล่างเพื่อความสะดวก:",
+ "upload-recreate-warning": "<strong>คำเตือน: ไฟล์ชื่อนั้นถูกลบหรือเปลี่ยนชื่อแล้ว</strong>\n\nปูมการลบและปูมการย้ายของหน้านี้จัดไว้ด้านล่างเพื่อความสะดวก:",
"uploadtext": "กรุณาใช้แบบด้านล่างในการอัปโหลดไฟล์\nสำหรับการดูหรือการค้นหาไฟล์ที่เคยอัปโหลดก่อนหน้านี้ ให้ไปที่[[Special:FileList|รายการไฟล์ที่ถูกอัปโหลด]] การอัปโหลดและการอัปโหลดซ้ำดูได้ที่[[Special:Log/upload|ปูมการอัปโหลด]] และการลบไฟล์ดูได้ที่[[Special:Log/delete|ปูมการลบ]]\n\nถ้าต้องการแทรกไฟล์ลงในหน้าหนึ่ง ๆ ให้ใช้คำสั่งหนึ่งในรูปแบบต่อไปนี้\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' เพื่อใช้รูปขนาดเต็ม\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|ข้อความอธิบาย]]</nowiki></code>''' เพื่อใช้รูปย่อขนาดกว้าง 200 พิกเซลในกล่องที่จัดชิดซ้าย โดยมี \"ข้อความอธิบาย\" เป็นคำบรรยายใต้ภาพ\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' สำหรับการเชื่อมโยงไฟล์โดยตรง โดยไม่ปรากฏไฟล์นั้นออกมา",
"upload-permitted": "ชนิดไฟล์ที่อนุญาต: $1",
"upload-preferred": "ชนิดไฟล์ที่ควรใช้: $1",
@@ -1195,40 +1214,40 @@
"uploadlogpagetext": "ด้านล่างเป็นรายการการอัปโหลดไฟล์ล่าสุด\nดูภาพรวมที่ [[Special:NewFiles|แกลอรีไฟล์ใหม่]]",
"filename": "ชื่อไฟล์",
"filedesc": "ความย่อ",
- "fileuploadsummary": "รายละเอียดไฟล์:",
- "filereuploadsummary": "เปลี่ยนแปลงไฟล์:",
+ "fileuploadsummary": "ความย่อ:",
+ "filereuploadsummary": "การเปลี่ยนแปลงไฟล์:",
"filestatus": "สถานะลิขสิทธิ์:",
"filesource": "แหล่งที่มา:",
"ignorewarning": "บันทึกไฟล์โดยละเลยคำเตือน",
"ignorewarnings": "ละเลยคำเตือนทั้งหมด",
"minlength1": "ชื่อไฟล์ต้องมีตัวอักษรอย่างน้อยหนึ่งตัว",
- "illegalfilename": "ชื่อไฟล์ \"$1\" มีอักขระที่ไม่อนุญาตในชื่อเรื่องหน้า กรุณาเปลี่ยนชื่อไฟล์และลองอัปโหลดอีกครั้ง",
+ "illegalfilename": "ชื่อไฟล์ \"$1\" มีอักขระที่ไม่อนุญาตในชื่อเรื่องหน้า \nกรุณาเปลี่ยนชื่อไฟล์และลองอัปโหลดอีกครั้ง",
"filename-toolong": "ชื่อไฟล์ไม่อาจยาวกว่า 240 ไบต์",
- "badfilename": "ชื่อไฟล์ถูกเปลี่ยนเป็น \"$1\"",
+ "badfilename": "เปลี่ยนชื่อไฟล์เป็น \"$1\"",
"filetype-mime-mismatch": "นามสกุลไฟล์ \".$1\" ไม่ตรงกับชนิดไมม์ของไฟล์ที่ตรวจพบ ($2)",
"filetype-badmime": "ไม่อนุญาตให้อัปโหลดไฟล์ที่เป็นไมม์ชนิด \"$1\"",
"filetype-bad-ie-mime": "ไม่สามารถอัปโหลดไฟล์นี้เนื่องจากอินเทอร์เน็ตเอกซ์พลอเรอร์จะตรวจจับว่าเป็น \"$1\" ซึ่งเป็นชนิดไฟล์ที่ไม่อนุญาตและอาจเป็นอันตราย",
- "filetype-unwanted-type": "{{PLURAL:$3|ไฟล์|ไฟล์}}ชนิด '''\".$1\"''' เป็นไฟล์ที่ไม่สามารถอัปโหลดได้ ไฟล์ที่สามารถใช้ได้ ได้แก่ $2",
- "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|เป็นชนิดไฟล์ที่ไม่อนุญาต|เป็นชนิดไฟล์ที่ไม่อนุญาต}}\n{{PLURAL:$3|ชนิดไฟล์|ชนิดไฟล์}}ที่อนุญาตคือ $2",
- "filetype-missing": "นามสกุลไฟล์หายไป (เช่น \".jpg\")",
- "empty-file": "ไฟล์ที่คุณส่งมานั้นว่าง",
+ "filetype-unwanted-type": "<strong>\".$1\"</strong> เป็นชนิดไฟล์ที่ไม่ปรารถนา\n{{PLURAL:$3|}}ชนิดไฟล์ที่สนับสนุน ได้แก่ $2",
+ "filetype-banned-type": "<strong>\".$1\"</strong> {{PLURAL:$4|เป็นชนิดไฟล์ที่ไม่อนุญาต|เป็นชนิดไฟล์ที่ไม่อนุญาต}}\n{{PLURAL:$3|ชนิดไฟล์|ชนิดไฟล์}}ที่อนุญาตคือ $2",
+ "filetype-missing": "ไฟล์ไม่มีนามสกุล (เช่น \".jpg\")",
+ "empty-file": "ไฟล์ที่คุณส่งมาว่าง",
"file-too-large": "ไฟล์ที่คุณส่งมามีขนาดใหญ่เกินไป",
"filename-tooshort": "ชื่อไฟล์สั้นเกินไป",
- "filetype-banned": "ไฟล์ชนิดนี้ถูกห้าม",
+ "filetype-banned": "ห้ามไฟล์ชนิดนี้",
"verification-error": "ไฟล์นี้ไม่ผ่านการพิสูจน์ยืนยันไฟล์",
- "hookaborted": "สิ่งที่คุณพยายามปรับเปลี่ยนถูกยกเลิกโดยส่วนขยาย",
- "illegal-filename": "ชื่อไฟล์นี้ไม่ได้รับอนุญาต",
- "overwrite": "ไม่อนุญาตให้เขียนทับไฟล์ที่มีอยู่แล้ว",
+ "hookaborted": "สิ่งที่คุณพยายามดัดแปรเปลี่ยนถูกส่วนขยายยกเลิก",
+ "illegal-filename": "ไม่อนุญาตชื่อไฟล์นี้",
+ "overwrite": "ไม่อนุญาตให้บันทึกทับไฟล์ที่มีอยู่",
"unknown-error": "เกิดข้อผิดพลาดไม่ทราบสาเหตุ",
"tmp-create-error": "ไม่สามารถสร้างไฟล์ชั่วคราว",
- "tmp-write-error": "เกิดข้อผิดพลาดในการเขียนไฟล์ชั่วคราว",
- "large-file": "แนะนำว่าไฟล์ไม่ควรมีขนาดใหญ่กว่า $1 ไฟล์นี้มีขนาด $2",
- "largefileserver": "ไฟล์นี้มีขนาดใหญ่กว่าที่เซิร์ฟเวอร์อนุญาต",
- "emptyfile": "ไฟล์ที่คุณอัปโหลดเหมือนเป็นไฟล์ว่าง อาจเกิดจากปัญหาพิมพ์ชื่อไฟล์ผิด กรุณาตรวจสอบว่า คุณต้องการอัปโหลดไฟล์นี้จริง ๆ",
+ "tmp-write-error": "มีข้อผิดพลาดการเขียนไฟล์ชั่วคราว",
+ "large-file": "แนะนำว่าไฟล์ไม่ควรมีขนาดใหญ่กว่า $1 \nไฟล์นี้มีขนาด $2",
+ "largefileserver": "ไฟล์นี้มีขนาดใหญ่เกินเซิร์ฟเวอร์มีโครงแบบอนุญาต",
+ "emptyfile": "ไฟล์ที่คุณอัปโหลดเหมือนว่าง \nอาจเกิดจากปัญหาพิมพ์ชื่อไฟล์ผิด \nกรุณาตรวจสอบว่า คุณต้องการอัปโหลดไฟล์นี้จริง ๆ หรือไม่",
"windows-nonascii-filename": "วิกินี้ไม่รองรับชื่อไฟล์ที่มีอักขระพิเศษ",
- "fileexists": "มีไฟล์ชื่อนี้อยู่แล้ว กรุณาตรวจสอบ <strong>[[:$1]]</strong> หากคุณไม่แน่ใจว่าต้องการเปลี่ยนแปลงไฟล์นี้หรือไม่ [[$1|thumb]]",
- "filepageexists": "หน้าคำอธิบายสำหรับไฟล์นี้ได้ถูกสร้างแล้วที่ <strong>[[:$1]]</strong> แต่ไฟล์ชื่อนี้ไม่มีอยู่ในปัจจุบัน\nคำอธิบายอย่างย่อที่คุณกรอกจะไม่ปรากฏบนหน้าคำอธิบาย\nเพื่อให้คำอธิบายอย่างย่อปรากฏขึ้น คุณจำเป็นต้องแก้ไขด้วยตนเอง\n[[$1|thumb]]",
- "fileexists-extension": "มีไฟล์ชื่อคล้ายกัน: [[$2|thumb]]\n* ชื่อไฟล์ที่กำลังอัปโหลด: <strong>[[:$1]]</strong>\n* ชื่อไฟล์ที่มีอยู่: <strong>[[:$2]]</strong>\nกรุณาเลือกชื่ออื่น",
+ "fileexists": "มีไฟล์ชื่อนี้แล้ว กรุณาตรวจสอบ <strong>[[:$1]]</strong> หากคุณไม่แน่ใจว่าต้องการเปลี่ยนหรือไม่ \n[[$1|thumb]]",
+ "filepageexists": "สร้างหน้าคำอธิบายสำหรับไฟล์นี้แล้วที่ <strong>[[:$1]]</strong> แต่ปัจจุบันไม่มีไฟล์ชื่อนี้\nความย่อที่คุณกรอกจะไม่ปรากฏบนหน้าคำอธิบาย\nเพื่อให้ความย่อของคุณปรากฏ คุณจำเป็นต้องแก้ไขด้วยตนเอง\n[[$1|thumb]]",
+ "fileexists-extension": "มีไฟล์ชื่อคล้ายกัน: [[$2|thumb]]\n* ชื่อไฟล์ที่กำลังอัปโหลด: <strong>[[:$1]]</strong>\n* ชื่อไฟล์ที่มีอยู่: <strong>[[:$2]]</strong>\nบางทีคุณอาจต้องการใช้ชื่อที่เด่นกว่านี้",
"fileexists-thumbnail-yes": "ไฟล์นี้ดูเหมือนจะเป็นภาพที่ถูกลดขนาด ''(รูปย่อ)''\n[[$1|thumb]]\nกรุณาตรวจสอบไฟล์ <strong>[[:$1]]</strong>\nถ้าตรวจสอบแล้วและพบว่าเป็นภาพขนาดเดียวกับต้นฉบับ ไฟล์นั้นไม่จำเป็นต้องอัปโหลดเพิ่ม",
"file-thumbnail-no": "ชื่อไฟล์ขึ้นต้นด้วย <strong>$1</strong>\nภาพนี้ดูเหมือนว่าจะเป็นภาพที่ถูกลดขนาด ''(thumbnail)''\nถ้าคุณมีภาพนี้ในความละเอียดเต็ม ให้อัปโหลดภาพนี้ มิฉะนั้นแล้วโปรดเปลี่ยนชื่อไฟล์",
"fileexists-forbidden": "มีไฟล์ชื่อนี้แล้ว และไม่สามารถเขียนทับได้\nหากคุณยังต้องการอัปโหลดไฟล์ของคุณ กรุณาย้อนกลับและใช้ชื่อใหม่ \n[[File:$1|thumb|center|$1]]",
@@ -1242,10 +1261,10 @@
"uploaddisabled": "ปิดใช้งานการอัปโหลด",
"copyuploaddisabled": "ปิดใช้งานการอัปโหลดโดยยูอาร์แอล",
"uploaddisabledtext": "ปิดใช้งานการอัปโหลดไฟล์",
- "php-uploaddisabledtext": "เปิดการใช้งานการอัปโหลดไฟล์ในพีเอชพี\nกรุณาตรวจสอบการตั้งค่า file_uploads",
- "uploadscripted": "ไฟล์นี้มีส่วนประกอบของโค้ดเอชทีเอ็มแอลหรือสคริปต์ ซึ่งอาจก่อให้เกิดความผิดพลาดในการแสดงผลของเว็บเบราว์เซอร์",
+ "php-uploaddisabledtext": "ปิดการใช้งานการอัปโหลดไฟล์ในพีเอชพี\nกรุณาตรวจสอบการตั้งค่า file_uploads",
+ "uploadscripted": "ไฟล์นี้มีโค้ดเอชทีเอ็มแอลหรือสคริปต์ ซึ่งอาจก่อให้การแปลคำสั่งของเบราว์เซอร์ผิดพลาด",
"uploadscriptednamespace": "ไฟล์ SVG นี้มีเนมสเปซไม่ถูกต้อง \"$1\"",
- "uploadvirus": "ไฟล์นี้มีไวรัส! รายละเอียด: $1",
+ "uploadvirus": "ไฟล์นี้มีไวรัส! \nรายละเอียด: $1",
"upload-source": "ไฟล์ต้นทาง",
"sourcefilename": "ชื่อไฟล์ต้นทาง:",
"sourceurl": "ยูอาร์แอลที่มา:",
@@ -1255,7 +1274,7 @@
"upload-options": "ตัวเลือกอัปโหลด",
"watchthisupload": "เฝ้าดูไฟล์นี้",
"filewasdeleted": "ไฟล์ชื่อนี้ถูกอัปโหลดก่อนหน้าและถูกลบไปแล้ว กรุณาตรวจสอบ $1 ก่อนอัปโหลดอีกครั้ง",
- "filename-bad-prefix": "ชื่อไฟล์ที่คุณกำลังอัปโหลดข้นต้นด้วย '''\"$1\"''' ซึ่งเป็นชื่อที่ไม่สื่อความหมายใด ๆ ที่โดยปกติแล้วกล้องถ่ายรูปดิจิทัลตั้งให้อัตโนมัติ กรุณาตั้งชื่อไฟล์ใหม่ให้สื่อความหมายกว่าเดิม",
+ "filename-bad-prefix": "ชื่อไฟล์ที่คุณกำลังอัปโหลดข้นต้นด้วย '''\"$1\"''' ซึ่งเป็นชื่อที่ไม่สื่อความหมายใด ๆ ที่ปกติกล้องถ่ายรูปดิจิทัลตั้งให้อัตโนมัติ \nกรุณาตั้งชื่อไฟล์ใหม่ให้สื่อความหมายกว่าเดิม",
"upload-success-subj": "อัปโหลดสำเร็จ",
"upload-success-msg": "การอัปโหลดของคุณจาก [$2] สำเร็จแล้ว และสามารถใช้ไฟล์ได้ที่นี่: [[:{{ns:file}}:$1]]",
"upload-failure-subj": "ปัญหาการอัปโหลด",
@@ -1264,13 +1283,13 @@
"upload-warning-msg": "พบปัญหาการอัปโหลดของคุณจาก [$2] คุณอาจกลับไปยัง[[Special:Upload/stash/$1|แบบอัปโหลด]]เพื่อแก้ไขปัญหานี้",
"upload-proto-error": "โพรโทคอลไม่ถูกต้อง",
"upload-proto-error-text": "การอัปโหลดโดยตรงจากเว็บต้องการยูอาร์แอลที่ขึ้นต้นด้วย <code>http://</code> หรือ <code>ftp://</code>",
- "upload-file-error": "เกิดความผิดพลาดภายใน",
- "upload-file-error-text": "เกิดความผิดพลาดภายในขณะพยายามสร้างไฟล์ชั่วคราวบนเซิร์ฟเวอร์ กรุณาติดต่อ[[Special:ListUsers/sysop|ผู้ดูแลระบบ]]",
+ "upload-file-error": "มีข้อผิดพลาดภายใน",
+ "upload-file-error-text": "เกิดข้อผิดพลาดภายในขณะพยายามสร้างไฟล์ชั่วคราวบนเซิร์ฟเวอร์ \nกรุณาติดต่อ[[Special:ListUsers/sysop|ผู้ดูแลระบบ]]",
"upload-misc-error": "เกิดความผิดพลาดการอัปโหลดไม่ทราบสาเหตุ",
"upload-misc-error-text": "เกิดความผิดพลาดไม่ทราบสาเหตุระหว่างอัปโหลด \nกรุณาตรวจสอบว่ายูอาร์แอลนั้นถูกต้องและเข้าถึงได้ และลองอีกครั้ง \nถ้ายังมีปัญหา ให้ติดต่อ[[Special:ListUsers/sysop|ผู้ดูแลระบบ]]",
"upload-too-many-redirects": "ยูอาร์แอลนั้นมีการเปลี่ยนทางมากเกินไป",
"upload-http-error": "เกิดข้อผิดพลาดเอชทีทีพี: $1",
- "upload-copy-upload-invalid-domain": "การอัปโหลดสำเนาไม่สามารถทำได้จากโดเมนนี้",
+ "upload-copy-upload-invalid-domain": "ไม่สามารถคัดลอกการอัปโหลดจากโดเมนนี้",
"backend-fail-backup": "ไม่สามารถสำรองไฟล์ \"$1\"",
"backend-fail-notexists": "ไม่มีไฟล์ $1",
"backend-fail-delete": "ไม่สามารถลบไฟล์ \"$1\"",
@@ -1294,33 +1313,33 @@
"uploadstash-nofiles": "คุณไม่มีไฟล์ซ่อน",
"uploadstash-badtoken": "ดำเนินการปฏิบัติไม่สำเร็จ อาจเนื่องจากข้อมูลการแก้ไขประจำตัวของคุณหมดอายุแล้ว กรุณาลองใหม่",
"uploadstash-errclear": "การล้างไฟล์ไม่สำเร็จ",
- "uploadstash-refresh": "ฟื้นฟูรายการไฟล์",
- "img-auth-accessdenied": "การเข้าถึงถูกจำกัด",
- "img-auth-nopathinfo": "ค่า PATH_INFO สูญหาย\nเซิร์ฟเวอร์ของคุณอาจไม่ได้ถูกตั้งให้ส่งข้อมูลนี้\nหรือเซิร์ฟเวอร์อาจเป็นแบบ CGI-based และไม่สนับสนุนข้อมูล img_auth\nดูที่ https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
- "img-auth-notindir": "ที่อยู่ที่ร้องขอไม่ได้อยู่ในไดเร็กทอรีอัพโหลดที่กำหนดไว้",
- "img-auth-badtitle": "ไม่สามารถสร้างชื่อเรื่องที่ถูกต้องจาก \"$1\" ได้",
- "img-auth-nologinnWL": "คุณไม่ได้ล็อกอินและ \"$1\" ไม่ได้อยู่ในรายชื่อผู้ใช้ที่ดี (whitelist)",
+ "uploadstash-refresh": "รีเฟรชรายการไฟล์",
+ "img-auth-accessdenied": "การเข้าถึงถูกปฏิเสธ",
+ "img-auth-nopathinfo": "PATH_INFO สูญหาย\nเซิร์ฟเวอร์ของคุณอาจไม่ได้ถูกตั้งให้ส่งสารสนเทศนี้\nอาจเป็นแบบ CGI-based และไม่สามารถสนับสนุน img_auth\nดูที่ https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
+ "img-auth-notindir": "ที่อยู่ที่ร้องขอไม่ได้อยู่ในสารบบอัพโหลดที่กำหนดไว้",
+ "img-auth-badtitle": "ไม่สามารถสร้างชื่อเรื่องที่ถูกต้องจาก \"$1\"",
+ "img-auth-nologinnWL": "คุณไม่ได้ล็อกอินและ \"$1\" ไม่ได้อยู่ในรายชื่อผู้ใช้ที่ได้รับอนุญาต (whitelist)",
"img-auth-nofile": "ไม่มีไฟล์ \"$1\"",
- "img-auth-isdir": "คุณกำลังพยายามเข้าถึงไดเร็กทอรี \"$1\"\nซึ่งคุณสามารถเข้าถึงได้เฉพาะไฟล์เท่านั้น",
+ "img-auth-isdir": "คุณกำลังพยายามเข้าถึงสารบบ \"$1\"\nอนุญาตเฉพาะการเข้าถึงไฟล์",
"img-auth-streaming": "กำลังดึงข้อมูล \"$1\"",
- "img-auth-public": "ฟังก็ชันของ img_auth.php คือเพื่อส่งไฟล์ขาออกจากวิกิส่วนตัว\nวิกินี้ถูกกำหนดเป็นวิกิส่วนตัว\nเพื่อความปลอดภัยสูงสุด img_auth.php จึงถูกปิด",
- "img-auth-noread": "ผู้ใช้ไม่ได้รับสิทธิ์ในการอ่าน \"$1\"",
+ "img-auth-public": "หน้าที่ของ img_auth.php คือ เพื่อส่งไฟล์ออกจากวิกิส่วนตัว\nวิกินี้มีโครงแบบเป็นวิกิสาธารณะ\nเพื่อความปลอดภัยสูงสุด จึงปิดใช้งาน img_auth.php",
+ "img-auth-noread": "ผู้ใช้ไม่มีสิทธิอ่าน \"$1\"",
"http-invalid-url": "ยูอาร์แอลไม่ถูกต้อง: $1",
"http-invalid-scheme": "ไม่สนับสนุนยูอาร์แอลที่มีรูปแบบ \"$1\"",
"http-request-error": "คำขอข้อมูล HTTP ผิดพลาดโดยไม่ทราบสาเหตุ",
- "http-read-error": "การอ่านข้อมูล HTTP ผิดพลาด",
- "http-timed-out": "คำขอข้อมูล HTTP เกินเวลาที่กำหนด",
- "http-curl-error": "เกิดข้อผิดพลาดในการเรียกข้อมูลจาก URL: $1",
- "http-bad-status": "พบปัญหาในระหว่างการข้อข้อมูล HTTP: $1 $2",
- "upload-curl-error6": "ไม่สามารถติดต่อยูอาร์แอลได้",
- "upload-curl-error6-text": "ไม่สามารถเข้าถึงยูอาร์แอลที่ใส่มาได้ กรุณาตรวจสอบอีกครั้งว่ายูอาร์แอลนั้นถูกต้อง และเว็บไซต์นั้นยังใช้งานได้",
- "upload-curl-error28": "เวลาอัปโหลดถูกตัด",
- "upload-curl-error28-text": "เว็บไซต์นี้ใช้เวลานานเกินไปในการเชื่อมต่อ กรุณาตรวจสอบว่าเว็บนี้ยังใช้งานได้ตามปกติ หรืออาจจะรอสักครู่แล้วลองอัปโหลดใหม่",
+ "http-read-error": "การอ่าน HTTP ผิดพลาด",
+ "http-timed-out": "คำขอ HTTP เกินเวลา",
+ "http-curl-error": "เกิดข้อผิดพลาดการไปนำมาซึ่งยูอาร์แอล: $1",
+ "http-bad-status": "พบปัญหาระหว่างการขอ HTTP: $1 $2",
+ "upload-curl-error6": "ไม่สามารถติดต่อยูอาร์แอล",
+ "upload-curl-error6-text": "ไม่สามารถเข้าถึงยูอาร์แอลที่จัดมาได้ \nกรุณาตรวจสอบอีกครั้งว่ายูอาร์แอลนั้นถูกต้อง และเว็บไซต์นั้นยังใช้งานได้",
+ "upload-curl-error28": "หมดเวลารออัปโหลด",
+ "upload-curl-error28-text": "เว็บไซต์นี้ใช้เวลาตอบสนองนานเกิน\nกรุณาตรวจสอบว่าเว็บนี้ยังใช้งานได้ตามปกติ รอสักครู่แล้วลองอัปโหลดใหม่\nคุณอาจลองในเวลาที่วุ่นวายน้อยกว่า",
"license": "การอนุญาตใช้สิทธิ:",
"license-header": "การอนุญาตใช้สิทธิ",
"nolicense": "ไม่ได้เลือก",
"licenses-edit": "แก้ไขตัวเลือกใบอนุญาต",
- "license-nopreview": "(ไม่สามารถแสดงตัวอย่าง)",
+ "license-nopreview": "(ไม่มีตัวอย่าง)",
"upload_source_url": "(ไฟล์ที่คุณเลือกจากยูอาร์แอลที่สมเหตุสมผลและสาธารณะเข้าถึงได้)",
"upload_source_file": "(ไฟล์ที่คุณเลือกจากคอมพิวเตอร์ของคุณ)",
"listfiles-delete": "ลบ",
@@ -1341,124 +1360,121 @@
"listfiles-latestversion-no": "ไม่",
"file-anchor-link": "ไฟล์",
"filehist": "ประวัติไฟล์",
- "filehist-help": "กดเลือกวัน/เวลา เพื่อดูไฟล์ที่ปรากฏในขณะนั้น",
+ "filehist-help": "คลิกวันที่/เวลาเพื่อดูไฟล์ที่ปรากฏในขณะนั้น",
"filehist-deleteall": "ลบทั้งหมด",
"filehist-deleteone": "ลบ",
"filehist-revert": "ย้อน",
"filehist-current": "ปัจจุบัน",
"filehist-datetime": "วันที่/เวลา",
"filehist-thumb": "รูปย่อ",
- "filehist-thumbtext": "รูปย่อสำหรับรุ่น $1",
+ "filehist-thumbtext": "รูปย่อสำหรับรุ่นเมื่อ $1",
"filehist-nothumb": "ไม่มีรูปย่อ",
"filehist-user": "ผู้ใช้",
"filehist-dimensions": "ขนาด",
"filehist-filesize": "ขนาดไฟล์",
"filehist-comment": "ความเห็น",
"imagelinks": "การใช้ไฟล์",
- "linkstoimage": "มี $1 หน้าเชื่อมโยงมายังไฟล์นี้:",
- "linkstoimage-more": "ไฟล์นี้มีหน้าเชื่อมโยงมากว่า $1 หน้า\nรายการต่อไปนี้แสดงการเชื่อมโยง $1 หน้าแรกที่มายังไฟล์นี้เท่านั้น\nดูเพิ่มได้ที่[[Special:WhatLinksHere/$2|รายการเต็ม]]",
+ "linkstoimage": "$1 หน้าต่อไปนี้โยงมาไฟล์นี้:",
+ "linkstoimage-more": "มีหน้าเชื่อมโยงมาไฟล์นี้กว่า $1 หน้า\nรายการต่อไปนี้แสดงการเชื่อมโยง $1 หน้าแรกที่มายังไฟล์นี้เท่านั้น\nมี[[Special:WhatLinksHere/$2|รายการเต็ม]]",
"nolinkstoimage": "ไม่มีหน้าเชื่อมโยงมายังไฟล์นี้",
"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 และอาจใช้บนโครงการอื่น\nกรุณาดู[หน้าคำอธิบายไฟล์ $2] สำหรับสารสนเทศเพิ่มเติม",
+ "sharedupload-desc-here": "ไฟล์นี้มาจาก $1 และอาจมีใช้ในโครงการอื่น\nคำอธิบายใน[$2 หน้าคำอธิบายไฟล์]แสดงไว้ด้านล่างนี้",
+ "sharedupload-desc-edit": "ไฟล์นี้มาจาก $1 และอาจมีใช้ในโครงการอื่น\nคุณอาจต้องการแก้ไขคำอธิบายใน[$2 หน้าคำอธิบายไฟล์]นั้น",
+ "sharedupload-desc-create": "ไฟล์นี้มาจาก $1 และอาจมีใช้ไฟล์นี้ในโครงการอื่น\nคุณอาจต้องการแก้ไขคำอธิบายใน[$2 หน้าคำอธิบายไฟล์]นั้น",
"filepage-nofile": "ไม่มีไฟล์ชื่อนี้",
"filepage-nofile-link": "ไม่มีไฟล์ชื่อนี้ แต่คุณสามารถ[$1 อัปโหลด]ได้",
"uploadnewversion-linktext": "อัปโหลดรุ่นใหม่ของไฟล์นี้",
"shared-repo-from": "จาก $1",
- "shared-repo": "คลังที่ใช้ร่วมกัน",
+ "shared-repo": "คลังร่วม",
"shared-repo-name-wikimediacommons": "วิกิมีเดียคอมมอนส์",
"filepage.css": "/* สไตล์ชีตในหน้านี้ถูกรวมในหน้าคำอธิบายไฟล์ และถูกรวมในวิกิผู้รับบริการต่างถิ่นด้วย */",
- "upload-disallowed-here": "คุณไม่สามารถอัปโหลดไฟล์ใหม่ทับไฟล์เดิมนี้ได้",
+ "upload-disallowed-here": "คุณไม่สามารถบันทึกทับไฟล์นี้",
"filerevert": "ย้อน $1",
- "filerevert-legend": "ย้อนไฟล์กลับ",
- "filerevert-intro": "<span class=\"plainlinks\">คุณกำลังย้อนไฟล์ '''[[Media:$1|$1]]''' ไปยัง [รุ่น $4 วันที่ $2, $3]</span>",
+ "filerevert-legend": "ย้อนไฟล์",
+ "filerevert-intro": "คุณกำลังย้อนไฟล์ <strong>[[Media:$1|$1]]</strong> ไปยัง [รุ่น $4 เมื่อ $2, $3]",
"filerevert-comment": "เหตุผล:",
- "filerevert-defaultcomment": "ย้อนไปรุ่น $1, $2",
+ "filerevert-defaultcomment": "ย้อนไปรุ่นเมื่อ $1, $2",
"filerevert-submit": "ย้อน",
- "filerevert-success": "<span class=\"plainlinks\">'''[[Media:$1|$1]]''' ถูกย้อนไปยัง [รุ่น $4 วันที่ $2, $3]</span>",
- "filerevert-badversion": "ไม่มีรุ่นก่อนหน้าของไฟล์นี้ในเวลาที่กำหนดไว้",
+ "filerevert-success": "<strong>[[Media:$1|$1]]</strong> ถูกย้อนไปเป็น [รุ่น $4 เมื่อ $2, $3]",
+ "filerevert-badversion": "ไม่มีรุ่นท้องถิ่นก่อนหน้าของไฟล์นี้ซึ่งมีตราเวลาที่กำหนด",
"filedelete": "ลบ $1",
"filedelete-legend": "ลบไฟล์",
- "filedelete-intro": "คุณกำลังลบไฟล์ '''[[Media:$1|$1]]''' พร้อมกับประวัติทั้งหมดของไฟล์นี้",
- "filedelete-intro-old": "คุณกำลังลบ '''[[Media:$1|$1]]''' รุ่น [$4 $3, $2]",
+ "filedelete-intro": "คุณกำลังลบไฟล์ <strong>[[Media:$1|$1]]</strong> พร้อมประวัติทั้งหมด",
+ "filedelete-intro-old": "คุณกำลังลบรุ่นของ <strong>[[Media:$1|$1]]</strong> เมื่อ [$4 $3, $2]",
"filedelete-comment": "เหตุผล:",
"filedelete-submit": "ลบ",
- "filedelete-success": "ลบไฟล์ '''$1''' แล้ว",
- "filedelete-success-old": "ไฟล์ '''[[Media:$1|$1]]''' รุ่นเมื่อ $3, $2 ถูกลบแล้ว",
- "filedelete-nofile": "ไม่มีไฟล์ '''$1'''",
- "filedelete-nofile-old": "ไม่มี '''$1''' ตามคุณลักษณะที่กำหนด อยู่ในกรุ",
+ "filedelete-success": "ลบ <strong>$1</strong> แล้ว",
+ "filedelete-success-old": "ลบรุ่นของ <strong>[[Media:$1|$1]]</strong> เมื่อ $3, $2 แล้ว",
+ "filedelete-nofile": "ไม่มีไฟล์ <strong>$1</strong>",
+ "filedelete-nofile-old": "ไม่มีรุ่นเก็บถาวรของ <strong>$1</strong> ซึ่งมีคุณลักษณะที่กำหนด",
"filedelete-otherreason": "เหตุผลอื่น/เพิ่มเติม:",
"filedelete-reason-otherlist": "เหตุผลอื่น",
"filedelete-reason-dropdown": "* เหตุผลการลบทั่วไป\n** ละเมิดลิขสิทธิ์\n** ไฟล์ซ้ำ",
"filedelete-edit-reasonlist": "แก้ไขเหตุผลการลบ",
- "filedelete-maintenance": "การลบและกู้คืนไฟล์ใช้งานไม่ได้ชั่วคราวระหว่างการบำรุงรักษา",
+ "filedelete-maintenance": "ปิดใช้งานการลบและกู้คืนไฟล์ชั่วคราวระหว่างการบำรุงรักษา",
"filedelete-maintenance-title": "ไม่สามารถลบไฟล์",
- "mimesearch": "ค้นหาตามชนิดไมม์",
+ "mimesearch": "ค้นหาไมม์",
"mimesearch-summary": "หน้านี้แสดงไฟล์ตามการแบ่งของชนิดไมม์ของแต่ละไฟล์ \nใส่ค่า: contenttype/subtype เช่น <code>image/jpeg</code>",
"mimetype": "ชนิดไมม์:",
"download": "ดาวน์โหลด",
"unwatchedpages": "หน้าที่ไม่มีผู้เฝ้าดู",
"listredirects": "รายการหน้าเปลี่ยนทาง",
"unusedtemplates": "แม่แบบไม่ได้ใช้",
- "unusedtemplatestext": "หน้านี้แสดงรายการหน้าทั้งหมดในเนมสเปซ {{ns:template}} ซึ่งไม่ได้ถูกรวมอยู่ในหน้าอื่น อย่าลืมตรวจสอบการเชื่อมโยงมายังแม่แบบอื่นก่อนลบ",
+ "unusedtemplatestext": "หน้านี้แสดงรายการหน้าทั้งหมดในเนมสเปซ {{ns:template}} ซึ่งไม่ได้ถูกรวมอยู่ในหน้าอื่น \nอย่าลืมตรวจสอบการเชื่อมโยงมายังแม่แบบอื่นก่อนลบ",
"unusedtemplateswlh": "การเชื่อมโยงอื่น",
"randompage": "สุ่มหน้า",
"randompage-nopages": "ไม่มีหน้าใดใน{{PLURAL:$2|เนมสเปซ}}ต่อไปนี้: \"$1\"",
"randomincategory": "สุ่มหน้าในหมวดหมู่",
"randomincategory-invalidcategory": "\"$1\" มิใช่ชื่อหมวดหมู่ที่ถูกต้อง",
- "randomincategory-nopages": "ไม่มีหน้าใน[[:Category:$1]]",
+ "randomincategory-nopages": "ไม่มีหน้าในหมวดหมู่ [[:Category:$1]]",
+ "randomincategory-category": "หมวดหมู่:",
+ "randomincategory-legend": "สุ่มหน้าในหมวดหมู่",
"randomredirect": "สุ่มหน้าเปลี่ยนทาง",
"randomredirect-nopages": "ไม่มีหน้าเปลี่ยนทางในเนมสเปซ \"$1\"",
"statistics": "สถิติ",
- "statistics-header-pages": "สถิติของหน้า",
+ "statistics-header-pages": "สถิติหน้า",
"statistics-header-edits": "สถิติการแก้ไข",
- "statistics-header-views": "สถิติการเข้าชม",
"statistics-header-users": "สถิติผู้ใช้",
"statistics-header-hooks": "สถิติอื่น",
"statistics-articles": "หน้าเนื้อหา",
- "statistics-pages": "หน้าทั้งหมด",
+ "statistics-pages": "หน้า",
"statistics-pages-desc": "หน้าทั้งหมดในวิกินี้ รวมทั้งหน้าพูดคุย หน้าเปลี่ยนทาง เป็นต้น",
- "statistics-files": "จำนวนไฟล์ที่ถูกอัปโหลด",
- "statistics-edits": "การแก้ไขหน้าทั้งหมดนับแต่ก่อตั้ง {{SITENAME}}",
- "statistics-edits-average": "จำนวนแก้ไขต่อหน้าโดยเฉลี่ย",
- "statistics-views-total": "จำนวนการเข้าชมทั้งหมด",
- "statistics-views-total-desc": "ไม่นับรวมจำนวนการเข้าชมหน้าที่ไม่มีอยู่และหน้าพิเศษ",
- "statistics-views-peredit": "จำนวนการเข้าดูต่อการแก้ไข:",
+ "statistics-files": "ไฟล์ที่อัปโหลด",
+ "statistics-edits": "การแก้ไขหน้านับแต่ก่อตั้ง {{SITENAME}}",
+ "statistics-edits-average": "การแก้ไขต่อหน้าเฉลี่ย",
"statistics-users": "[[Special:ListUsers|ผู้ใช้]]ลงทะเบียน",
"statistics-users-active": "ผู้ใช้ที่ยังมีความเคลื่อนไหว",
- "statistics-users-active-desc": "ผู้ใช้ที่ดำเนินปฏิบัติการในช่วง $1 วันที่ผ่านมา",
- "statistics-mostpopular": "หน้าที่มีการเข้าชมมากที่สุด",
+ "statistics-users-active-desc": "ผู้ใช้ที่ดำเนินปฏิบัติการในช่วง $1 วันหลังสุด",
"pageswithprop": "หน้าพร้อมคุณสมบัติหน้า",
"pageswithprop-legend": "หน้าพร้อมคุณสมบัติหน้า",
- "pageswithprop-text": "หน้านี้แสดงรายการหน้าที่ใช้คุณสมบัติหน้าอย่างใดอย่างหนึ่งโดยเฉพาะ",
+ "pageswithprop-text": "หน้านี้แสดงรายการหน้าที่ใช้คุณสมบัติหน้าเฉพาะ",
"pageswithprop-prop": "ชื่อคุณสมบัติ:",
"pageswithprop-submit": "ไป",
- "doubleredirects": "หน้าเปลี่ยนทางซ้ำซ้อน",
- "doubleredirectstext": "หน้านี้แสดงรายการหน้าที่เปลี่ยนทางไปยังหน้าเปลี่ยนทางอื่น\nแต่ละแถวมีการเชื่อมโยงไปยังการเปลี่ยนทางครั้งแรกและครั้งที่สอง เช่นเดียวกับเป้าหมายของการเปลี่ยนทางครั้งที่สอง ซึ่งมักเป็นหน้าเป้าหมาย \"ที่แท้จริง\" ที่การเปลี่ยนแปลงครั้งแรกควรชี้ไป\nหน่วยที่<del>ขีดฆ่า</del> คือ รายการที่ได้แก้ไขแล้ว",
- "double-redirect-fixed-move": "[[$1]] ถูกย้ายแล้ว มีการปรับอัตโนมัติและขณะนี้เปลี่ยนทางไปยัง [[$2]]",
- "double-redirect-fixed-maintenance": "การแก้ไขการเปลี่ยนทางซ้ำซ้อนจาก [[$1]] ไปยัง [[$2]] โดยอัตโนมัติในงานบำรุงรักษา",
+ "doubleredirects": "การเปลี่ยนทางซ้ำซ้อน",
+ "doubleredirectstext": "หน้านี้แสดงรายการหน้าที่เปลี่ยนทางไปหน้าเปลี่ยนทางอื่น\nแต่ละแถวมีการเชื่อมโยงไปการเปลี่ยนทางครั้งแรกและครั้งที่สอง เช่นเดียวกับเป้าหมายการเปลี่ยนทางครั้งที่สอง ซึ่งมักเป็นหน้าเป้าหมาย \"แท้จริง\" ที่การเปลี่ยนแปลงครั้งแรกควรชี้ไป\nหน่วยที่<del>ขีดฆ่า</del> คือ รายการที่ได้แก้ไขแล้ว",
+ "double-redirect-fixed-move": "ย้าย [[$1]] แล้ว \nมีการปรับอัตโนมัติและขณะนี้เปลี่ยนทางไป [[$2]]",
+ "double-redirect-fixed-maintenance": "กำลังซ่อมการเปลี่ยนทางซ้ำซ้อนจาก [[$1]] ไป [[$2]] โดยอัตโนมัติในงานบำรุงรักษา",
"double-redirect-fixer": "ตัวซ่อมหน้าเปลี่ยนทาง",
- "brokenredirects": "หน้าเปลี่ยนทางเสีย",
- "brokenredirectstext": "หน้าเปลี่ยนทางต่อไปนี้เชื่อมโยงไปยังหน้าที่ยังไม่ถูกสร้าง:",
+ "brokenredirects": "การเปลี่ยนทางเสีย",
+ "brokenredirectstext": "การเปลี่ยนทางต่อไปนี้เชื่อมโยงไปยังหน้าที่ไม่มี:",
"brokenredirects-edit": "แก้ไข",
"brokenredirects-delete": "ลบ",
"withoutinterwiki": "หน้าที่ไม่มีลิงก์ข้ามภาษา",
- "withoutinterwiki-summary": "หน้าต่อไปนี้ไม่มีลิงก์ข้ามไปภาษาอื่น",
+ "withoutinterwiki-summary": "หน้าต่อไปนี้ไม่เชื่อมโยงไปรุ่นภาษาอื่น",
"withoutinterwiki-legend": "คำขึ้นต้น",
"withoutinterwiki-submit": "แสดง",
- "fewestrevisions": "หน้าที่มีรุ่นน้อยสุด",
+ "fewestrevisions": "หน้าที่มีรุ่นปรับปรุงน้อยสุด",
"nbytes": "$1 ไบต์",
"ncategories": "$1 หมวดหมู่",
"ninterwikis": "$1 ลิงก์ข้ามโครงการ",
"nlinks": "$1 ลิงก์",
"nmembers": "$1 หน้า",
"nmemberschanged": "$1 → $2 สมาชิก",
- "nrevisions": "$1 รุ่น",
+ "nrevisions": "$1 รุ่นปรับปรุง",
"nviews": "$1 ครั้ง",
"nimagelinks": "ใช้ใน $1 {{PLURAL:$1|หน้า|หน้า}}",
"ntransclusions": "ใช้ใน $1 {{PLURAL:$1|หน้า|หน้า}}",
@@ -1469,38 +1485,37 @@
"uncategorizedcategories": "หมวดหมู่ที่ไม่ได้จัดหมวดหมู่",
"uncategorizedimages": "ไฟล์ที่ยังไม่จัดหมวดหมู่",
"uncategorizedtemplates": "แม่แบบที่ยังไม่จัดหมวดหมู่",
- "unusedcategories": "หมวดหมู่ที่ไม่ได้ใช้",
+ "unusedcategories": "หมวดหมู่ไม่ได้ใช้",
"unusedimages": "ไฟล์ไม่ได้ใช้",
- "popularpages": "หน้าที่มีการเข้าดูมาก",
"wantedcategories": "หมวดหมู่ที่ต้องการ",
"wantedpages": "หน้าที่ต้องการ",
"wantedpages-badtitle": "ชื่อเรื่องไม่สมเหตุสมผลในเซตผลลัพธ์: $1",
"wantedfiles": "ไฟล์ที่ต้องการ",
- "wantedfiletext-cat": "ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del> ยิ่งไปกว่านั้น หน้าที่ฝังตัวไฟล์ที่ไม่มีอยู่จะแสดงรายการใน [[:$1]]",
- "wantedfiletext-cat-noforeign": "ไฟล์ต่อไปนี้ถูกใช้แต่ไม่มีไฟล์ นอกเหนือจากนี้ หน้าที่ฝังตัวไฟล์ที่ไม่มีอยู่แสดงรายการใน [[:$1]]",
- "wantedfiletext-nocat": "ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del>",
- "wantedfiletext-nocat-noforeign": "ไฟล์ต่อไปนี้ถูกใช้แต่ไม่มีไฟล์",
+ "wantedfiletext-cat": "ไฟล์ต่อไปนี้พบใช้แต่ไม่มี ไฟล์จากคลังภายนอกอาจแสดงรายการแม้มีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del> นอกจากนั้น หน้าที่ใส่ไฟล์ที่ไม่มีแสดงรายการใน [[:$1]]",
+ "wantedfiletext-cat-noforeign": "ไฟล์ต่อไปนี้พบใช้แต่ไม่มี นอกจากนี้ หน้าที่ใส่ไฟล์ที่ไม่มีแสดงรายการใน [[:$1]]",
+ "wantedfiletext-nocat": "ไฟล์ต่อไปนี้พบใช้แต่ไม่มี ไฟล์จากคลังภายนอกอาจแสดงรายการได้แม้มีอยู่ ผลบวกลวงดังกล่าวใด ๆ จะถูก<del>ขีดฆ่า</del>",
+ "wantedfiletext-nocat-noforeign": "ไฟล์ต่อไปนี้พบใช้แต่ไม่มี",
"wantedtemplates": "แม่แบบที่ต้องการ",
"mostlinked": "หน้าที่มีการเชื่อมโยงหามากที่สุด",
"mostlinkedcategories": "หมวดหมู่ที่มีการเชื่อมโยงหามากที่สุด",
"mostlinkedtemplates": "หน้าที่มีการเชื่อมโยงหามากที่สุด",
"mostcategories": "หน้าที่มีหมวดหมู่มากที่สุด",
- "mostimages": "ภาพที่มีการโยงไปหามากที่สุด",
+ "mostimages": "ไฟล์ที่มีการโยงหามากที่สุด",
"mostinterwikis": "หน้าที่มีลิงก์ข้ามโครงการมากที่สุด",
- "mostrevisions": "หน้าที่มีรุ่นมากที่สุด",
- "prefixindex": "ทุกหน้าพร้อมคำขึ้นต้น",
- "prefixindex-namespace": "ทุกหน้าพร้อมคำขึ้นต้น (เนมสเปซ $1)",
+ "mostrevisions": "หน้าที่มีรุ่นปรับปรุงมากสุด",
+ "prefixindex": "หน้าทั้งหมดพร้อมคำขึ้นต้น",
+ "prefixindex-namespace": "หน้าทั้งหมดพร้อมคำขึ้นต้น (เนมสเปซ $1)",
"prefixindex-strip": "ลบคำขึ้นต้นในรายการออก",
"shortpages": "หน้าสั้น",
"longpages": "หน้ายาว",
"deadendpages": "หน้าสุดทาง",
"deadendpagestext": "หน้าต่อไปนี้ไม่เชื่อมโยงไปหน้าอื่นใน {{SITENAME}}",
"protectedpages": "หน้าที่ถูกล็อก",
- "protectedpages-indef": "การล็อกแบบไม่มีกำหนดเท่านั้น",
+ "protectedpages-indef": "เฉพาะการล็อกแบบไม่มีกำหนด",
"protectedpages-summary": "หน้านี้แสดงรายการหน้าที่มีอยู่ซึ่งปัจจุบันถูกล็อก สำหรับรายการชื่อเรื่องที่ถูกป้องกันมิให้สร้าง ดู [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]",
- "protectedpages-cascade": "การล็อกแบบสืบทอดเท่านั้น",
+ "protectedpages-cascade": "เฉพาะการล็อกแบบสืบทอด",
"protectedpages-noredirect": "ซ่อนการเปลี่ยนทาง",
- "protectedpagesempty": "ขณะนี้ไม่มีหน้าใดถูกล็อกตามพารามิเตอร์เหล่านี้",
+ "protectedpagesempty": "ขณะนี้ไม่มีหน้าถูกล็อกตามพารามิเตอร์เหล่านี้",
"protectedpages-timestamp": "ตราเวลา",
"protectedpages-page": "หน้า",
"protectedpages-expiry": "หมดอายุ",
@@ -1512,30 +1527,31 @@
"protectedtitles": "ชื่อเรื่องที่ถูกป้องกัน",
"protectedtitles-summary": "หน้านี้แสดงรายการชื่อที่ปัจจุบันถูกป้องกันมิให้สร้าง สำหรับรายการหน้าที่มีอยู่ที่ถูกล็อก ดู [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]",
"protectedtitlesempty": "ปัจจุบันไม่มีหัวเรื่องที่ได้รับการป้องกันด้วยพารามิเตอร์เหล่านี้",
- "listusers": "รายนามผู้ใช้",
+ "listusers": "รายการผู้ใช้",
"listusers-editsonly": "แสดงเฉพาะผู้ใช้ที่มีการแก้ไข",
- "listusers-creationsort": "เรียงลำดับตามวันสร้าง",
- "listusers-desc": "เรียงตามลำดับลด",
- "usereditcount": "การแก้ไข $1 ครั้ง",
+ "listusers-creationsort": "เรียงตามวันสร้าง",
+ "listusers-desc": "เรียงลำดับลง",
+ "usereditcount": "$1 การแก้ไข",
"usercreated": "{{GENDER:$3|ถูกสร้าง}}เมื่อ $1 เวลา $2",
"newpages": "หน้าใหม่",
"newpages-username": "ชื่อผู้ใช้:",
- "ancientpages": "หน้าที่ไม่ได้แก้ไขนานสุด",
+ "ancientpages": "หน้าเก่าสุด",
"move": "เปลี่ยนชื่อ",
"movethispage": "เปลี่ยนชื่อหน้านี้",
- "unusedimagestext": "ไฟล์ต่อไปนี้มีอยู่ แต่ไม่มีการเรียกใช้ในหน้าใด ๆ เลย\nหมายเหตุว่า เว็บไซต์อื่นอาจเชื่อมโยงมายังไฟล์ด้วยยูอาร์แอลโดยตรง ฉะนั้นจึงชื่ออาจยังแสดงรายการอยู่ที่นี่แม้จะมีการใช้อย่างต่อเนื่อง",
- "unusedcategoriestext": "หมวดหมู่ต่อไปนี้ยังมีอยู่ แม้ไม่มีหน้าอื่นหรือหมวดหมู่ใดใช้ส่วนนี้",
- "notargettitle": "ไม่พบเป้าหมาย",
+ "unusedimagestext": "ไฟล์ต่อไปนี้มีอยู่ แต่ไม่มีการเรียกใช้ในหน้าใด\nหมายเหตุว่า เว็บไซต์อื่นอาจเชื่อมโยงมายังไฟล์ด้วยยูอาร์แอลโดยตรง ฉะนั้นจึงอาจยังแสดงรายการอยู่ที่นี่แม้ยังใช้อยู่",
+ "unusedcategoriestext": "หมวดหมู่ต่อไปนี้มีอยู่ แม้ไม่มีหน้าอื่นหรือหมวดหมู่ใดใช้",
+ "notargettitle": "ไม่มีเป้าหมาย",
"notargettext": "คุณมิได้ระบุหน้าหรือผู้ใช้เป้าหมายที่จะดำเนินการฟังก์ชันนี้",
"nopagetitle": "ไม่มีหน้าเป้าหมายดังกล่าว",
- "nopagetext": "หน้าเป้าหมายที่คุณระบุไม่มีอยู่",
+ "nopagetext": "ไม่มีหน้าเป้าหมายที่คุณระบุ",
"pager-newer-n": "ใหม่กว่า $1",
"pager-older-n": "เก่ากว่า $1",
"suppress": "ผู้ดูแลประวัติ",
- "querypage-disabled": "หน้าพิเศษนี้ถูกปิดใช้งานเนื่องจากมีประสิทธิภาพต่ำ",
+ "querypage-disabled": "หน้าพิเศษนี้ถูกปิดใช้งานด้วยเหตุผลด้านสมรรถภาพ",
+ "apihelp-no-such-module": "ไม่พบมอดูล \"$1\"",
"booksources": "แหล่งหนังสือ",
"booksources-search-legend": "ค้นหาแหล่งหนังสือ",
- "booksources-go": "ค้นหา",
+ "booksources-search": "ค้นหา",
"booksources-text": "ด้านล่างเป็นรายการการเชื่อมโยงไปยังเว็บไซต์อื่นที่ขายหนังสือใหม่และหนังสือใช้แล้ว และอาจมีสารสนเทศเพิ่มเติมเกี่ยวกับหนังสือที่คุณกำลังมองหา:",
"booksources-invalid-isbn": "รหัส ISBN ที่ให้ไว้ไม่ถูกต้อง กรุณาตรวจสอบจากต้นฉบับอีกครั้ง",
"specialloguserlabel": "ผู้ดำเนินการ:",
@@ -1544,18 +1560,18 @@
"all-logs-page": "ปูมสาธารณะทั้งหมด",
"alllogstext": "การแสดงผลรวมปูมที่มีทั้งหมดของ {{SITENAME}}\nคุณสามารถค้นหาให้ละเอียดขึ้นโดยเลือกประเภทปูม ชื่อผู้ใช้หรือหน้าที่ต้องการ (ไวต่ออักษรใหญ่เล็ก)",
"logempty": "ไม่พบรายการตรงกันในปูม",
- "log-title-wildcard": "ค้นหาชื่อเรื่องด้วยข้อความนี้",
- "showhideselectedlogentries": "แสดง/ซ่อนหน่วยปูมที่เลือก",
+ "log-title-wildcard": "ค้นหาชื่อเรื่องซึ่งขึ้นต้นด้วยข้อความนี้",
+ "showhideselectedlogentries": "เปลี่ยนทัศนวิสัยของหน่วยปูมที่เลือก",
"allpages": "หน้าทั้งหมด",
"nextpage": "หน้าถัดไป ($1)",
"prevpage": "หน้าก่อนหน้า ($1)",
- "allpagesfrom": "แสดงหน้าโดยเริ่มจาก:",
+ "allpagesfrom": "แสดงหน้าเริ่มจาก:",
"allpagesto": "แสดงหน้าจบที่:",
- "allarticles": "ทุกหน้า",
- "allinnamespace": "หน้าทุกหน้า (เนมสเปซ $1)",
- "allpagessubmit": "ดู",
+ "allarticles": "หน้าทั้งหมด",
+ "allinnamespace": "หน้าทั้งหมด (เนมสเปซ $1)",
+ "allpagessubmit": "ไป",
"allpagesprefix": "แสดงหน้าที่ขึ้นต้นด้วย:",
- "allpagesbadtitle": "ชื่อเรื่องนี้ไม่ถูกต้อง อาจสะกดผิด หรือเป็นลิงก์ข้ามภาษา หรือมีตัวอักษรที่ไม่สามารถใช้เป็นชื่อเรื่องได้",
+ "allpagesbadtitle": "ชื่อเรื่องนี้ไม่ถูกต้องหรือมีคำเติมหน้าข้ามภาษาหรือข้ามโครงการ \nอาจมีอักขระที่ไม่สามารถใช้ในชื่อเรื่องได้",
"allpages-bad-ns": "{{SITENAME}} ไม่มีเนมสเปซ \"$1\"",
"allpages-hide-redirects": "ซ่อนการเปลี่ยนทาง",
"cachedspecial-viewing-cached-ttl": "คุณกำลังดูรุ่นที่เก็บหน่วยความจำแคชของหน้านี้ ซึ่งอาจมีอายุ $1",
@@ -1566,8 +1582,8 @@
"categoriesfrom": "แสดงหมวดหมู่เริ่มจาก:",
"special-categories-sort-count": "เรียงตามจำนวน",
"special-categories-sort-abc": "เรียงตามตัวอักษร",
- "deletedcontributions": "การแก้ไขที่ถูกลบ",
- "deletedcontributions-title": "การแก้ไขที่ถูกลบ",
+ "deletedcontributions": "เรื่องที่เขียนของผู้ใช้ที่ถูกลบ",
+ "deletedcontributions-title": "เรื่องที่เขียนของผู้ใช้ที่ถูกลบ",
"sp-deletedcontributions-contribs": "เรื่องที่เขียน",
"linksearch": "ค้นหาลิงก์ภายนอก",
"linksearch-pat": "รูปแบบการค้นหา:",
@@ -1581,14 +1597,14 @@
"listusers-noresult": "ไม่พบผู้ใช้",
"listusers-blocked": "(ถูกบล็อก)",
"activeusers": "รายการผู้ใช้ที่มีความเคลื่อนไหว",
- "activeusers-intro": "นี่คือรายการผู้ใช้ที่มีกิจกรรมใด ๆ ในช่วง $1 วันที่ผ่านมา",
- "activeusers-count": "{{PLURAL:$1|ปฏิบัติการล่าสุด|ปฏิบัติการล่าสุด $1 รายการ}} ในช่วง $3 วันที่ผ่านมา",
+ "activeusers-intro": "นี่คือรายการผู้ใช้ที่มีกิจกรรมใด ๆ ในช่วง $1 วันหลังสุด",
+ "activeusers-count": "$1 ปฏิบัติการ{{PLURAL:$1|}} ในช่วง $3 วันหลังสุด",
"activeusers-from": "แสดงผู้ใช้เริ่มจาก:",
"activeusers-hidebots": "ซ่อนบอต",
"activeusers-hidesysops": "ซ่อนผู้ดูแลระบบ",
"activeusers-noresult": "ไม่พบผู้ใช้",
"listgrouprights": "สิทธิกลุ่มผู้ใช้",
- "listgrouprights-summary": "ด้านล่างเป็นรายการกลุ่มผู้ใช้ที่นิยามบนวิกินี้ และสิทธิการเข้าถึงที่เกี่ยวข้อง\nอาจมี[[{{MediaWiki:Listgrouprights-helppage}}|ข้อมูลเพิ่มเติม]]เกี่ยวกับสิทธิหนึ่ง ๆ",
+ "listgrouprights-summary": "ด้านล่างเป็นรายการกลุ่มผู้ใช้ที่นิยามบนวิกินี้ และสิทธิการเข้าถึงที่เกี่ยวข้อง\nอาจมี[[{{MediaWiki:Listgrouprights-helppage}}|สารสนเทศเพิ่มเติม]]เกี่ยวกับสิทธิหนึ่ง ๆ",
"listgrouprights-key": "คำอธิบาย:\n* <span class=\"listgrouprights-granted\">สิทธิที่ได้รับแต่งตั้ง</span>\n* <span class=\"listgrouprights-revoked\">สิทธิที่ถูกเพิกถอน</span>",
"listgrouprights-group": "กลุ่ม",
"listgrouprights-rights": "สิทธิ",
@@ -1597,30 +1613,32 @@
"listgrouprights-addgroup": "เพิ่ม{{PLURAL:$2|กลุ่มนี้|กลุ่มเหล่านี้}}: $1",
"listgrouprights-removegroup": "นำ{{PLURAL:$2|กลุ่มนี้|กลุ่มเหล่านี้}}ออก: $1",
"listgrouprights-addgroup-all": "เพิ่มกลุ่มทั้งหมด",
- "listgrouprights-removegroup-all": "นำกลุ่มทั้งหมดออก",
- "listgrouprights-addgroup-self": "เพิ่ม{{PLURAL:$2|กลุ่ม|กลุ่ม}}เข้าไปในบัญชี: $1",
- "listgrouprights-removegroup-self": "ลบ{{PLURAL:$2|กลุ่ม|กลุ่ม}}ออกจากบัญชี: $1",
- "listgrouprights-addgroup-self-all": "เพิ่มทุกกลุ่มเข้าไปในบัญชีนี้",
- "listgrouprights-removegroup-self-all": "นำทุกกลุ่มออกจากบัญชีนี้",
+ "listgrouprights-removegroup-all": "ลบกลุ่มทั้งหมดออก",
+ "listgrouprights-addgroup-self": "เพิ่ม{{PLURAL:$2|กลุ่ม|กลุ่ม}}ให้บัญชีของตัว: $1",
+ "listgrouprights-removegroup-self": "ลบ{{PLURAL:$2|กลุ่ม|กลุ่ม}}ออกจากบัญชีของตัว: $1",
+ "listgrouprights-addgroup-self-all": "เพิ่มทุกกลุ่มเข้าบัญชีของตัว",
+ "listgrouprights-removegroup-self-all": "ลบทุกกลุ่มออกจากบัญชีของตัว",
"listgrouprights-namespaceprotection-header": "การจำกัดเนมสเปซ",
"listgrouprights-namespaceprotection-namespace": "เนมสเปซ",
"listgrouprights-namespaceprotection-restrictedto": "สิทธิอนุญาตให้ผู้ใช้แก้ไข",
"trackingcategories": "หมวดหมู่ค้นหาและติดตาม",
- "trackingcategories-summary": "หน้านี้แสดงรายการหมวดหมู่ค้นหาและติดตามซึ่งซอฟต์แวร์มีเดียวิกิจัดการอัตโนมัติ ชื่อเหล่านี้สามารถเปลี่ยนได้โดยการเปลี่ยนสารระบบที่เกี่ยวข้องในเนมสเปซ {{ns:8}}",
+ "trackingcategories-summary": "หน้านี้แสดงรายการหมวดหมู่ค้นหาและติดตามซึ่งซอฟต์แวร์มีเดียวิกิจัดการอัตโนมัติ สามารถเปลี่ยนชื่อเหล่านี้ได้โดยการเปลี่ยนสารระบบที่เกี่ยวข้องในเนมสเปซ {{ns:8}}",
"trackingcategories-msg": "หมวดหมู่ค้นหาและติดตาม",
"trackingcategories-name": "ชื่อสาร",
"trackingcategories-desc": "เกณฑ์การรวมหมวดหมู่",
"noindex-category-desc": "โรบอตไม่สามารถทำดัชนีหน้านี้เพราะมีเมจิกเวิร์ด <code><nowiki>__NOINDEX__</nowiki></code> อยู่และอยู่ในเนมสเปซซึ่งอนุญาตตัวบ่งชี้นี้",
"index-category-desc": "หน้านี้มี <code><nowiki>__INDEX__</nowiki></code> อยู่ (และอยู่ในเนมสเปซซึ่งอนุญาตตัวบ่งชี้นี้) ฉะนั้น โรบอตจึงทำดัชนี้ได้ ซึ่งปกติไม่สามารถทำได้",
- "hidden-category-category-desc": "นี่คือหมวดหมู่ที่ติด <code><nowiki>__HIDDENCAT__</nowiki></code> ซึ่งป้องกันมิให้แสดงในกล่องลิงก์หมวดหมู่ในหน้าโดยปริยาย",
+ "hidden-category-category-desc": "หมวดหมู่นี้มี <code><nowiki>__HIDDENCAT__</nowiki></code> ในเนื้อหาหน้า ซึ่งป้องกันมิให้แสดงในกล่องลิงก์หมวดหมู่ในหน้าโดยปริยาย",
+ "trackingcategories-nodesc": "ไม่มีคำอธิบาย",
+ "trackingcategories-disabled": "ปิดใช้งานหมวดหมู่",
"mailnologin": "ไม่มีที่อยู่ส่ง",
- "mailnologintext": "คุณต้อง[[Special:UserLogin|ล็อกอิน]]และมีที่อยู่อีเมลที่สมเหตุสมผลใน[[Special:Preferences|การตั้งค่า]]ของคุณ ในการส่งอีเมลหาผู้ใช้อื่น",
+ "mailnologintext": "คุณต้อง[[Special:UserLogin|ล็อกอิน]]และมีที่อยู่อีเมลที่สมเหตุสมผลใน[[Special:Preferences|การตั้งค่า]]ของคุณเพื่อส่งอีเมลหาผู้ใช้อื่น",
"emailuser": "ส่งอีเมลหาผู้ใช้นี้",
"emailuser-title-target": "ส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}",
"emailuser-title-notarget": "อีเมลผู้ใช้",
"emailpage": "อีเมลผู้ใช้",
"emailpagetext": "คุณสามารถใช้แบบด้านล่างส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}นี้\nที่อยู่อีเมลที่คุณกรอกใน[[Special:Preferences|การตั้งค่าส่วนตัวของคุณ]]จะปรากฏเป็นที่อยู่ \"จาก\" ของอีเมล ซึ่งผู้รับสามารถตอบกลับคุณได้โดยตรง",
- "defemailsubject": "อีเมล{{SITENAME}}จากผู้ใช้ \"$1\"",
+ "defemailsubject": "อีเมล {{SITENAME}} จากผู้ใช้ \"$1\"",
"usermaildisabled": "ปิดใช้งานการส่งอีเมลหาผู้ใช้",
"usermaildisabledtext": "คุณไม่สามารถส่งอีเมลหาผู้ใช้อื่นบนวิกินี้",
"noemailtitle": "ไม่มีที่อยู่อีเมล",
@@ -1633,16 +1651,16 @@
"email-legend": "ส่งอีเมลถึงผู้ใช้ {{SITENAME}} อีกคน",
"emailfrom": "จาก:",
"emailto": "ถึง:",
- "emailsubject": "หัวเรื่อง:",
+ "emailsubject": "เรื่อง:",
"emailmessage": "ข้อความ:",
"emailsend": "ส่ง",
- "emailccme": "ส่งอีเมลสำเนากลับมา",
- "emailccsubject": "คัดลอกข้อความของคุณไปยัง$1: $2",
- "emailsent": "อีเมลถูกส่งแล้ว",
- "emailsenttext": "อีเมลของคุณถูกส่งแล้ว",
- "emailuserfooter": "อีเมลฉบับนี้ถูกส่งโดย $1 ถึง $2 ด้วยฟังก์ชัน \"อีเมลผู้ใช้รายนี้\" ที่ {{SITENAME}}",
- "usermessage-summary": "ฝากข้อความของระบบ",
- "usermessage-editor": "ตัวส่งข้อความของระบบ",
+ "emailccme": "ส่งอีเมลสำเนาสารของฉันหาฉัน",
+ "emailccsubject": "คัดลอกสารของคุณไป $1: $2",
+ "emailsent": "ส่งอีเมลแล้ว",
+ "emailsenttext": "ส่งสารอีเมลของคุณแล้ว",
+ "emailuserfooter": "ส่งอีเมลจาก $1 ถึง $2 ด้วยฟังก์ชัน \"อีเมลผู้ใช้รายนี้\" ที่ {{SITENAME}}",
+ "usermessage-summary": "ฝากสารระบบ",
+ "usermessage-editor": "ตัวส่งสารของระบบ",
"watchlist": "รายการเฝ้าดู",
"mywatchlist": "รายการเฝ้าดู",
"watchlistfor2": "สำหรับ $1 $2",
@@ -1650,11 +1668,11 @@
"watchlistanontext": "กรุณาล็อกอินเพื่อดูหรือแก้ไขรายการในรายการเฝ้าดูของคุณ",
"watchnologin": "ยังไม่ได้ล็อกอิน",
"addwatch": "เพิ่มเข้ารายการเฝ้าดู",
- "addedwatchtext": "หน้า \"[[:$1]]\" ได้เพิ่มลงใน[[Special:Watchlist|รายการเฝ้าดู]]ของคุณแล้ว การเปลี่ยนแปลงในหน้านี้หรือหน้าพูดคุยที่เกี่ยวข้องจะแสดงในรายการดังกล่าว",
- "addedwatchtext-short": "หน้า \"$1\" ถูกเพิ่มเข้ารายการเฝ้าดูของคุณ",
+ "addedwatchtext": "เพิ่มหน้า \"[[:$1]]\" เข้า[[Special:Watchlist|รายการเฝ้าดู]]ของคุณแล้ว \nการเปลี่ยนแปลงในอนาคตแก่หน้านี้หรือหน้าพูดคุยที่เกี่ยวข้องจะแสดงในรายการดังกล่าว",
+ "addedwatchtext-short": "เพิ่มหน้า \"$1\" เข้ารายการเฝ้าดูของคุณแล้ว",
"removewatch": "นำออกจากรายการเฝ้าดู",
- "removedwatchtext": "หน้า \"[[:$1]]\" ถูกนำออกจาก[[Special:Watchlist|รายการเฝ้าดูของคุณ]]",
- "removedwatchtext-short": "หน้า \"$1\" ถูกนำออกจากรายการเฝ้าดูของคุณ",
+ "removedwatchtext": "นำหน้า \"[[:$1]]\" ออกจาก[[Special:Watchlist|รายการเฝ้าดูของคุณ]]แล้ว",
+ "removedwatchtext-short": "นำหน้า \"$1\" ออกจากรายการเฝ้าดูของคุณแล้ว",
"watch": "เฝ้าดู",
"watchthispage": "เฝ้าดูหน้านี้",
"unwatch": "เลิกเฝ้าดู",
@@ -1662,27 +1680,27 @@
"notanarticle": "ไม่ใช่หน้าเนื้อหา",
"notvisiblerev": "รุ่นล่าสุดโดยผู้ใช้อีกคนถูกลบแล้ว",
"watchlist-details": "มี $1 หน้าในรายการเฝ้าดูของคุณ ไม่นับแยกหน้าอภิปราย",
- "wlheader-enotif": "การแจ้งเตือนผ่านอีเมลถูกเปิดใช้งาน",
- "wlheader-showupdated": "หน้าที่มีการเปลี่ยนแปลงตั้งแต่คุณเข้าชมล่าสุดแสดงใน'''ตัวหนา'''",
- "wlnote": "ด้านล่างเป็นการแก้ไข{{PLURAL:$1|ล่าสุด|ล่าสุด <strong>$1</strong> รายการ}} ใน{{PLURAL:$2|ชั่วโมง| <strong>$2</strong> ชั่วโมง}}ที่ผ่านมา จนถึง $3, $4",
- "wlshowlast": "แสดง $1 ชั่วโมง $2 วันล่าสุด $3",
+ "wlheader-enotif": "เปิดใช้งานการแจ้งเตือนผ่านอีเมล",
+ "wlheader-showupdated": "หน้าที่มีการเปลี่ยนแปลงตั้งแต่คุณเยี่ยมครั้งสุดท้ายแสดงด้วย<strong>ตัวหนา</strong>",
+ "wlnote": "ด้านล่างเป็น{{PLURAL:$1|การเปลี่ยนแปลงหลังสุด| <strong>$1</strong> การเปลี่ยนแปลงหลังสุด}} ใน{{PLURAL:$2|ชั่วโมง| <strong>$2</strong> ชั่วโมง}}ที่หลังสุด จนถึง $3, $4",
+ "wlshowlast": "แสดง $1 ชั่วโมง $2 วันล่าสุด",
"watchlist-options": "ตัวเลือกรายการเฝ้าดู",
- "watching": "เฝ้าดู...",
- "unwatching": "เลิกเฝ้าดู...",
+ "watching": "กำลังเฝ้าดู...",
+ "unwatching": "กำลังเลิกเฝ้าดู...",
"watcherrortext": "เกิดข้อผิดพลาดขณะเปลี่ยนแปลงการตั้งค่ารายการเฝ้าดูของคุณ เพราะ \"$1\"",
- "enotif_reset": "ทำเครื่องหมายว่าชมทุกหน้าแล้ว",
- "enotif_impersonal_salutation": "ผู้ใช้{{SITENAME}}",
- "enotif_subject_deleted": "หน้า $1 บน {{SITENAME}} ถูกลบโดย {{gender:$2|$2}}",
- "enotif_subject_created": "หน้า $1 บน {{SITENAME}} ถูกสร้างโดย {{gender:$2|$2}}",
- "enotif_subject_moved": "หน้า $1 บน {{SITENAME}} ถูกย้ายโดย {{gender:$2|$2}}",
- "enotif_subject_restored": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|กู้คืน}}โดย $2",
- "enotif_subject_changed": "หน้า $1 บน {{SITENAME}} มีการเปลี่ยนแปลงโดย {{gender:$2|$2}}",
- "enotif_body_intro_deleted": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|ลบ}}เมื่อ $PAGEEDITDATE โดย $2 ดู $3",
- "enotif_body_intro_created": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|สร้าง}}เมื่อ $PAGEEDITDATE โดย $2 ดูรุ่นปัจจุบันที่ $3",
- "enotif_body_intro_moved": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|เปลี่ยนชื่อ}}เมื่อ $PAGEEDITDATE โดย $2 ดูรุ่นปัจจุบันที่ $3",
- "enotif_body_intro_restored": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|กู้คืน}}เมื่อ $PAGEEDITDATE โดย $2 ดูรุ่นปัจจุบันที่ $3",
- "enotif_body_intro_changed": "หน้า $1 บน {{SITENAME}} ถูก{{GENDER:$2|เปลี่ยนแปลง}}เมื่อ $PAGEEDITDATE โดย $2 ดูรุ่นปัจจุบันที่ $3",
- "enotif_lastvisited": "ดู $1 สำหรับการเปลี่ยนแปลงทั้งหมดตั้งแต่คุณเข้าชมครั้งล่าสุด",
+ "enotif_reset": "ทำเครื่องหมายว่าเยี่ยมชมทุกหน้าแล้ว",
+ "enotif_impersonal_salutation": "ผู้ใช้ {{SITENAME}}",
+ "enotif_subject_deleted": "$2 ลบหน้า $1 บน {{SITENAME}}",
+ "enotif_subject_created": "$2 สร้างหน้า $1 บน {{SITENAME}}",
+ "enotif_subject_moved": "$2 ย้ายหน้า $1 บน {{SITENAME}}",
+ "enotif_subject_restored": "$2 กู้คืนหน้า $1 บน {{SITENAME}}",
+ "enotif_subject_changed": "$2 เปลี่ยนแปลงหน้า $1 บน {{SITENAME}}",
+ "enotif_body_intro_deleted": "$2 ลบหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดู $3",
+ "enotif_body_intro_created": "$2 สร้างหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดูรุ่นปัจจุบันที่ $3",
+ "enotif_body_intro_moved": "$2 ย้ายหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดูรุ่นปัจจุบันที่ $3",
+ "enotif_body_intro_restored": "$2 กู้คืนหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดูรุ่นปัจจุบันที่ $3",
+ "enotif_body_intro_changed": "$2 เปลี่ยนแปลงหน้า $1 บน {{SITENAME}} เมื่อ $PAGEEDITDATE ดูรุ่นปัจจุบันที่ $3",
+ "enotif_lastvisited": "ดู $1 สำหรับการเปลี่ยนแปลงทั้งหมดตั้งแต่คุณเยี่ยมชมครั้งสุดท้าย",
"enotif_lastdiff": "ดู $1 เพื่อดูการเปลี่ยนแปลงนี้",
"enotif_anon_editor": "ผู้ใช้นิรนาม $1",
"enotif_body": "เรียน $WATCHINGUSERNAME\n\n$PAGEINTRO $NEWPAGE\n\nคำอธิบายอย่างย่อของผู้เขียน: $PAGESUMMARY $PAGEMINOREDIT\n\nติดต่อผู้เขียน:\nเมล: $PAGEEDITOR_EMAIL\nวิกิ: $PAGEEDITOR_WIKI\n\nจะไม่มีประกาศอื่นหากมีกิจกรรมเพิ่มเติม เว้นเสียแต่คุณจะเข้าชมหน้านี้ คุณยังสามารถตั้งค่าตัวบ่งชี้ประกาศใหม่สำหรับหน้าที่คุณเฝ้าดูทุกหน้าในรายการเฝ้าดูของคุณ\n\nระบบประกาศ {{SITENAME}} ที่เป็นมิตรของคุณ\n\n--\nในการเปลี่ยนการตั้งค่าประกาศอีเมลของคุณ โปรดดู\n{{canonicalurl:{{#special:Preferences}}}}\n\nในการเปลี่ยนการตั้งค่ารายการเฝ้าดูของคุณ โปรดดู\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nในการลบหน้าจากรายการเฝ้าดูของคุณ โปรดดู\n$UNWATCHURL\n\nผลป้อนกลับและความช่วยเหลือเพิ่มเติม:\n$HELPPAGE",
@@ -1690,16 +1708,16 @@
"changed": "ถูกเปลี่ยนแปลง",
"deletepage": "ลบหน้า",
"confirm": "ยืนยัน",
- "excontent": "เนื้อหาเดิม: '$1'",
- "excontentauthor": "เนื้อหาเดิม: '$1' (และมีผู้เขียนคนเดียวคือ '[[Special:Contributions/$2|$2]]')",
- "exbeforeblank": "เนื้อหาก่อนถูกทำว่างคือ: '$1'",
+ "excontent": "เนื้อหาเดิม: \"$1\"",
+ "excontentauthor": "เนื้อหาเดิม: \"$1\" (และมีผู้เขียนคนเดียวคือ \"[[Special:Contributions/$2|$2]]\")",
+ "exbeforeblank": "เนื้อหาก่อนถูกทำว่างคือ: \"$1\"",
"delete-confirm": "ลบ \"$1\"",
"delete-legend": "ลบ",
- "historywarning": "'''คำเตือน:'''' หน้าที่คุณกำลังลบมีประวัติการแก้ไขประมาณ $1 {{PLURAL:$1|รุ่น}}:",
+ "historywarning": "<strong>คำเตือน:</strong> หน้าที่คุณกำลังลบมีประวัติ $1 {{PLURAL:$1|รุ่น}}:",
"confirmdeletetext": "คุณกำลังลบหน้า รวมทั้งประวัติทั้งหมดของหน้า\nกรุณายืนยันว่าคุณเจตนา เข้าใจผลกระทบ และการกระทำนี้สอดคล้องกับ[[{{MediaWiki:Policy-url}}|นโยบาย]]",
"actioncomplete": "ปฏิบัติการสำเร็จ",
"actionfailed": "ปฏิบัติการล้มเหลว",
- "deletedtext": "\"$1\" ถูกลบ\nดู $2 สำหรับบันทึกการลบล่าสุด",
+ "deletedtext": "ลบ \"$1\" แล้ว\nดู $2 สำหรับบันทึกการลบล่าสุด",
"dellogpage": "ปูมการลบ",
"dellogpagetext": "ด้านล่างเป็นรายการการลบล่าสุด",
"deletionlog": "ปูมการลบ",
@@ -1711,30 +1729,30 @@
"delete-edit-reasonlist": "แก้ไขเหตุผลการลบ",
"delete-toobig": "หน้านี้มีประวัติการแก้ไขนาดใหญ่ คือ กว่า $1 รุ่น การลบหน้าเช่นนี้ถูกจำกัดเพื่อป้องกันการรบกวน{{SITENAME}}โดยบังเอิญ",
"delete-warning-toobig": "หน้านี้มีประวัติการแก้ไขขนาดใหญ่ กว่า $1 รุ่น การลบหน้านี้อาจรบกวนการทำงานของฐานข้อมูลของ {{SITENAME}} โปรดดำเนินการด้วยความระมัดระวัง",
+ "deleteprotected": "คุณไม่สามารถลบหน้านี้เพราะถูกล็อก",
"deleting-backlinks-warning": "'''คำเตือน:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|หน้าอื่น]]เชื่อมโยงมายังหรือดึงข้อมูลจากหน้าที่คุณกำลังจะลบ",
"rollback": "ย้อนการแก้ไขกลับฉุกเฉิน",
- "rollback_short": "ย้อนกลับฉุกเฉิน",
"rollbacklink": "ย้อนกลับฉุกเฉิน",
"rollbacklinkcount": "ย้อนกลับฉุกเฉิน $1 การแก้ไข",
"rollbacklinkcount-morethan": "ย้อนกลับฉุกเฉินกว่า $1 การแก้ไข",
"rollbackfailed": "ย้อนกลับฉุกเฉินล้มเหลว",
"cantrollback": "ไม่สามารถย้อนการแก้ไขได้ ผู้เขียนคนล่าสุดเป็นผู้เขียนคนเดียวของหน้านี้",
"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": "คำอธิบายอย่างย่อคือ: \"''$1''\"",
- "revertpage": "ย้อนการแก้ไขของ [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ไปยังรุ่นของ [[User:$1|$1]]",
- "revertpage-nouser": "ย้อนการแก้ไขโดยผู้ใช้ไม่ระบุชื่อไปยังรุ่นสุดท้ายโดย {{GENDER:$1|[[User:$1|$1]]}}",
- "rollback-success": "ย้อนการแก้ไขโดย $1 ไปยังรุ่นล่าสุดโดย $2",
+ "editcomment": "คำอธิบายการแก้ไขคือ: \"''$1''\"",
+ "revertpage": "ย้อนการแก้ไขโดย [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) ไปยังรุ่นแก้ไขล่าสุดโดย [[User:$1|$1]]",
+ "revertpage-nouser": "ย้อนการแก้ไขโดยผู้ใช้ไม่ระบุชื่อไปยังรุ่นล่าสุดโดย {{GENDER:$1|[[User:$1|$1]]}}",
+ "rollback-success": "ย้อนการแก้ไขโดย $1; \nเปลี่ยนกลับไปรุ่นล่าสุดโดย $2",
"sessionfailure-title": "ช่วงเวลาสื่อสารล้มเหลว",
"sessionfailure": "ดูเหมือนมีปัญหากับช่วงเวลาสื่อสารล็อกอินของคุณ\nการกระทำนี้ถูกยกเลิกเป็นการป้องกันการลักลอบช่วงเวลาสื่อสารไว้ก่อน \nกลับไปหน้าที่แล้ว โหลดหน้าใหม่ แล้วลองอีกครั้ง",
"protectlogpage": "ปูมการล็อก",
"protectlogtext": "ด้านล่างเป็นรายการการเปลี่ยนแปลงการล็อกหน้า\nดู[[Special:ProtectedPages|รายการหน้าที่ถูกล็อก]]สำหรับการล็อกหน้าที่มีผลอยู่ในปัจจุบัน",
"protectedarticle": "ล็อก \"[[$1]]\"",
"modifiedarticleprotection": "เปลี่ยนระดับการล็อกของ \"[[$1]]\"",
- "unprotectedarticle": "ยกเลิกการล็อกจาก \"[[$1]]\" แล้ว",
- "movedarticleprotection": "ย้ายการตั้งค่าการล็อกจาก \"[[$2]]\" ไปยัง \"[[$1]]\"",
- "protect-title": "กำลังล็อกหน้า \"$1\"",
+ "unprotectedarticle": "ยกเลิกการล็อกจาก \"[[$1]]\"",
+ "movedarticleprotection": "ย้ายการตั้งค่าการล็อกจาก \"[[$2]]\" ไป \"[[$1]]\"",
+ "protect-title": "เปลี่ยนระดับการล็อกสำหรับ \"$1\"",
"protect-title-notallowed": "ดูระดับการล็อกของ \"$1\"",
- "prot_1movedto2": "[[$1]] ถูกเปลี่ยนชื่อเป็น [[$2]]",
+ "prot_1movedto2": "เปลี่ยนชื่อ [[$1]] เป็น [[$2]]",
"protect-badnamespace-title": "เนมสเปซล็อกไม่ได้",
"protect-badnamespace-text": "ล็อกหน้าในเนมสเปซนี้ไม่ได้",
"protect-norestrictiontypes-text": "หน้านี้ไม่สามารถถูกล็อก เพราะไม่มีประเภทการจำกัดที่ใช้ได้",
@@ -1745,11 +1763,11 @@
"protect_expiry_invalid": "เวลาหมดอายุไม่ถูกต้อง",
"protect_expiry_old": "เวลาหมดอายุผ่านมาแล้ว",
"protect-unchain-permissions": "ปลดล็อกตัวเลือกการล็อกอื่น ๆ",
- "protect-text": "ที่นี่คุณสามารถดูและเปลี่ยนแปลงระดับการล็อกของหน้า '''$1''' ได้",
- "protect-locked-blocked": "ไม่สามารถเปลี่ยนระดับการล็อกหน้าขณะที่ถูกบล็อกได้ การตั้งค่าปัจจุบันของหน้า '''$1''' คือ:",
- "protect-locked-dblock": "ไม่สามารถเปลี่ยนระดับการล็อกได้เนื่องจากฐานข้อมูลถูกล็อก การตั้งค่าปัจจุบันของหน้า '''$1''' คือ:",
- "protect-locked-access": "บัญชีของคุณไม่ได้รับอนุญาตให้เปลี่ยนแปลงระดับการล็อกหน้า การตั้งค่าปัจจุบันของหน้า '''$1''' คือ:",
- "protect-cascadeon": "หน้านี้ถูกล็อกเนื่องจากเป็นส่วนหนึ่งของ{{PLURAL:$1|หน้า|หน้า}}ที่เปิดการล็อกแบบสืบทอด\nการเปลี่ยนระดับการล็อกของหน้านี้จะไม่มีผลต่อการล็อกแบบสืบทอด",
+ "protect-text": "ที่นี่คุณสามารถดูและเปลี่ยนแปลงระดับการล็อกของหน้า <strong>$1</strong> ได้",
+ "protect-locked-blocked": "ไม่สามารถเปลี่ยนระดับการล็อกหน้าขณะถูกบล็อกได้ \nการตั้งค่าปัจจุบันของหน้า <strong>$1</strong> คือ:",
+ "protect-locked-dblock": "ไม่สามารถเปลี่ยนระดับการล็อกได้เนื่องจากฐานข้อมูลกำลังถูกล็อก \nการตั้งค่าปัจจุบันของหน้า <strong>$1</strong> คือ:",
+ "protect-locked-access": "บัญชีของคุณไม่มีสิทธิเปลี่ยนแปลงระดับการล็อกหน้า \nการตั้งค่าปัจจุบันของหน้า <strong>$1</strong> คือ:",
+ "protect-cascadeon": "ปัจจุบันหน้านี้ถูกล็อกเนื่องจากรวมอยู่ใน{{PLURAL:$1|หน้า|หน้า}}ที่เปิดการล็อกแบบสืบทอด\nการเปลี่ยนระดับการล็อกของหน้านี้จะไม่มีผลต่อการล็อกแบบสืบทอด",
"protect-default": "อนุญาตผู้ใช้ทั้งหมด",
"protect-fallback": "อนุญาตเฉพาะผู้ใช้ที่มีสิทธิ \"$1\"",
"protect-level-autoconfirmed": "อนุญาตเฉพาะผู้ใช้ยืนยันอัตโนมัติ",
@@ -1758,18 +1776,19 @@
"protect-expiring": "หมดอายุ $1 (UTC)",
"protect-expiring-local": "หมดอายุ $1",
"protect-expiry-indefinite": "ไม่มีกำหนด",
- "protect-cascade": "ล็อกหน้าที่เป็นส่วนหนึ่งของหน้านี้ (ล็อกแบบสืบทอด)",
- "protect-cantedit": "คุณไม่สามารถเปลี่ยนระดับการล็อกของหน้านี้ เพราะคุณไม่ได้รับอนุญาตให้แก้ไขระดับการล็อก",
- "protect-othertime": "ระยะเวลาอื่น:",
- "protect-othertime-op": "ระยะเวลาอื่น",
- "protect-existing-expiry": "ระยะเวลาการป้องกัน: $3, $2",
+ "protect-cascade": "ล็อกหน้าที่เป็นรวมอยู่ในหน้านี้ (ล็อกแบบสืบทอด)",
+ "protect-cantedit": "คุณไม่สามารถเปลี่ยนระดับการล็อกของหน้านี้ เพราะคุณไม่มีสิทธิแก้ไข",
+ "protect-othertime": "เวลาอื่น:",
+ "protect-othertime-op": "เวลาอื่น",
+ "protect-existing-expiry": "เวลาหมดอายุที่มีอยู่: $3, $2",
+ "protect-existing-expiry-infinity": "เวลาหมดอายุที่มีอยู่: ไม่มีกำหนด",
"protect-otherreason": "เหตุผลอื่น/เพิ่มเติม:",
"protect-otherreason-op": "เหตุผลอื่น",
"protect-dropdown": "* เหตุผลการป้องกันทั่วไป\n** การก่อกวนจำนวนมาก\n** สแปมจำนวนมาก\n** สงครามการแก้ไขที่ไม่สร้างสรรค์\n** หน้าที่มีการเข้าชมมาก",
- "protect-edit-reasonlist": "สาเหตุการป้องกันการแก้ไข",
+ "protect-edit-reasonlist": "สาเหตุการล็อกการแก้ไข",
"protect-expiry-options": "1 ชั่วโมง:1 hour,1 วัน:1 day,1 สัปดาห์:1 week,2 สัปดาห์:2 weeks,1 เดือน:1 month,3 เดือน:3 months,6 เดือน:6 months,1 ปี:1 year,ไม่มีกำหนด:infinite",
- "restriction-type": "อนุญาต",
- "restriction-level": "ระดับการล็อก",
+ "restriction-type": "การอนุญาต:",
+ "restriction-level": "ระดับการจำกัด:",
"minimum-size": "ขนาดอย่างน้อย",
"maximum-size": "ขนาดอย่างมาก",
"pagesize": "(ไบต์)",
@@ -1782,15 +1801,15 @@
"restriction-level-all": "ทุกระดับ",
"undelete": "ดูหน้าที่ถูกลบ",
"undeletepage": "ดูและกู้คืนหน้าที่ถูกลบ",
- "undeletepagetitle": "'''ต่อไปนี้เป็นรุ่นการแก้ไขที่ถูกลบของ [[:$1|$1]]'''",
+ "undeletepagetitle": "<strong>ต่อไปนี้เป็นรุ่นการแก้ไขที่ถูกลบของ [[:$1|$1]]</strong>",
"viewdeletedpage": "ดูหน้าที่ถูกลบ",
- "undeletepagetext": "{{PLURAL:$1||$1 }}หน้าต่อไปนี้ถูกลบไปแล้ว แต่เนื้อหายังคงอยู่ในกรุและสามารถกู้คืนได้ \nกรุอาจถูกลบเป็นระยะได้",
- "undelete-fieldset-title": "กู้คืนรุ่น",
- "undeleteextrahelp": "ถ้าต้องการกู้ประวัติของหน้าคืนทั้งหมด ไม่ต้องเลือกกล่องใดเลย แล้วกดปุ่ม '''''กู้คืน'''''\nถ้าต้องการกู้ประวัติคืนเฉพาะบางส่วน ให้เลือกกล่องที่มีประวัติส่วนที่ต้องการกู้ แล้วกด'''''กู้คืน'''''\nกด '''''ล้างค่า''''' เพื่อลบค่าในกล่องความเห็นและกล่องตัวเลือกทั้งหมด",
- "undeleterevisions": "$1 รุ่นการแก้ไขถูกเก็บไว้",
- "undeletehistory": "เมื่อคุณกู้หน้าใดหน้าหนึ่ง รุ่นทั้งหมดจะถูกกู้คืนไปยังประวัติ หากมีหน้าใหม่ในชื่อเดียวกันถูกสร้างขึ้นหลังจากการลบ รุ่นที่กู้คืนนั้นจะปรากฏในประวัติที่มีมาก่อน",
- "undeleterevdel": "จะกู้คืนไม่ได้หากการกู้คืนนั้นส่งผลให้รุ่นล่าสุดของหน้าหรือไฟล์ถูกลบไปบางส่วน \nในกรณีเช่นนั้น คุณต้องไม่เลือกหรือแสดงรุ่นใหม่สุดที่ถูกลบไปก่อน",
- "undeletehistorynoadmin": "หน้านี้ถูกลบไปแล้ว\nมีสาเหตุการลบแสดงไว้ในคำอธิบายอย่างย่อข้างล่าง ร่วมกับรายละเอียดผู้ใช้ที่เคยแก้ไขหน้านี้ก่อนลบ\nข้อความแท้จริงของรุ่นที่ถูกลบดูได้เฉพาะผู้ดูแลระบบ",
+ "undeletepagetext": "{{PLURAL:$1||$1 }}หน้าต่อไปนี้ถูกลบแล้ว แต่เนื้อหายังคงอยู่ในหน่วยเก็บถาวรและสามารถกู้คืนได้ \nหน่วยเก็บถาวรอาจถูกลบเป็นระยะ",
+ "undelete-fieldset-title": "กู้คืนรุ่นปรับปรุง",
+ "undeleteextrahelp": "ในการกู้ประวัติของหน้าคืนทั้งหมด ให้เว้นทุกกล่องและคลิก <strong><em>{{int:undeletebtn}}</em></strong>\nถ้าต้องการกู้ประวัติคืนเฉพาะบางส่วน ให้เลือกกล่องที่มีประวัติส่วนที่ต้องการและคลิก <strong><em>{{int:undeletebtn}}</em></strong>",
+ "undeleterevisions": "$1 รุ่นการแก้ไขถูกเก็บถาวร",
+ "undeletehistory": "เมื่อคุณกู้หน้าคืน รุ่นทั้งหมดจะถูกกู้คืนไปยังประวัติ \nหากมีการสร้างหน้าใหม่ชื่อเดียวกันหลังการลบ รุ่นที่กู้คืนนั้นจะปรากฏในประวัติก่อนหน้า",
+ "undeleterevdel": "จะไม่ดำเนินการกู้คืนหากส่งผลให้รุ่นบนสุดของหน้าหรือไฟล์ถูกลบบางส่วน\nในกรณีเช่นนั้น คุณต้องไม่เลือกหรือแสดงรุ่นที่ถูกลบใหม่สุด",
+ "undeletehistorynoadmin": "หน้านี้ถูกลบแล้ว\nสาเหตุการลบแสดงในความย่อด้านล่าง ร่วมกับรายละเอียดผู้ใช้ที่เคยแก้ไขหน้านี้ก่อนลบ\nเฉพาะผู้ดูแลระบบที่ดูข้อความแท้จริงของรุ่นที่ถูกลบเหล่านี้ได้",
"undelete-revision": "รุ่นที่ถูกลบของหน้า $1 (ตั้งแต่ $4 เมื่อ $5) โดย $3:",
"undeleterevision-missing": "รุ่นไม่ถูกต้องหรือสูญหาย\nคุณอาจมีลิงก์เสีย หรือรุ่นอาจถูกกู้คืนหรือนำออกจากกรุ",
"undelete-nodiff": "ไม่พบรุ่นก่อนหน้า",
@@ -1800,22 +1819,22 @@
"undeleteinvert": "กลับการเลือก",
"undeletecomment": "เหตุผล:",
"undeletedrevisions": "กู้คืนการแก้ไข $1 รุ่นแล้ว",
- "undeletedrevisions-files": "$1 รุ่น และ $2 ไฟล์ถูกกู้คืน",
- "undeletedfiles": "$1 ไฟล์ถูกกู้คืน",
+ "undeletedrevisions-files": "กู้คืน $1 รุ่นและ $2 ไฟล์แล้ว",
+ "undeletedfiles": "กู้คืน $1 ไฟล์แล้ว",
"cannotundelete": "การกู้คืนล้มเหลว:\n$1",
- "undeletedpage": "'''$1 ถูกกู้คืน'''\n\nดู[[Special:Log/delete|ปูมการลบ]] สำหรับรายชื่อการลบและการกู้คืนล่าสุด",
+ "undeletedpage": "<strong>กู้คืน $1 แล้ว</strong>\n\nดู[[Special:Log/delete|ปูมการลบ]] สำหรับบันทึกรายชื่อการลบและการกู้คืนล่าสุด",
"undelete-header": "ดู [[Special:Log/delete|ปูมการลบ]] สำหรับหน้าที่ถูกลบล่าสุด",
"undelete-search-title": "ค้นหาหน้าที่ถูกลบ",
"undelete-search-box": "ค้นหาหน้าที่ถูกลบ",
- "undelete-search-prefix": "ค้นหาหน้าที่ขึ้นต้นด้วย:",
+ "undelete-search-prefix": "แสดงหน้าที่ขึ้นต้นด้วย:",
"undelete-search-submit": "ค้นหา",
- "undelete-no-results": "ไม่พบหน้าที่ตรงกันในกรุการลบ",
+ "undelete-no-results": "ไม่พบหน้าตรงกันในหน่วยเก็บถาวรการลบ",
"undelete-filename-mismatch": "ไม่สามารถกู้คืนรุ่นไฟล์ที่มีตราเวลา $1: ชื่อไฟล์ไม่ตรง",
"undelete-bad-store-key": "ไม่สามารถกู้คืนรุ่นไฟล์ที่มีตราเวลา $1: ไฟล์สูญหายก่อนถูกลบ",
- "undelete-cleanup-error": "เกิดความผิดพลาดในการลบไฟล์กรุที่ไม่ใช้แล้ว \"$1\"",
- "undelete-missing-filearchive": "ไม่สามารถกู้คืนไฟล์เก่าหมายเลข $1 เพราะไม่มีข้อมูลในฐานข้อมูล \nไฟล์อาจถูกกู้คืนไปแล้ว",
- "undelete-error": "เกิดข้อผิดพลาดในการกู้คืนหน้า",
- "undelete-error-short": "เกิดข้อผิดพลาดในการกู้คืนไฟล์: $1",
+ "undelete-cleanup-error": "มีข้อผิดพลาดในการลบไฟล์เก็บถาวรไม่ใช้แล้ว \"$1\"",
+ "undelete-missing-filearchive": "ไม่สามารถกู้คืนไฟล์เก็บถาวรหมายเลข $1 เพราะไม่อยู่ในฐานข้อมูล \nไฟล์อาจถูกกู้คืนแล้ว",
+ "undelete-error": "มีข้อผิดพลาดในการกู้คืนหน้า",
+ "undelete-error-short": "มีข้อผิดพลาดในการกู้คืนไฟล์: $1",
"undelete-error-long": "เกิดข้อผิดพลาดขณะกู้คืนไฟล์:\n\n$1",
"undelete-show-file-confirm": "คุณแน่ใจหรือว่าต้องการดูรุ่นที่ถูกลบของไฟล์ \"<nowiki>$1</nowiki>\" ตั้งแต่ $2 เมื่อ $3",
"undelete-show-file-submit": "ใช่",
@@ -1838,12 +1857,13 @@
"sp-contributions-newbies-sub": "สำหรับบัญชีใหม่",
"sp-contributions-newbies-title": "เรื่องที่เขียนโดยบัญชีใหม่",
"sp-contributions-blocklog": "ปูมการบล็อก",
+ "sp-contributions-suppresslog": "ระงับเรื่องที่ผู้ใช้เขียน",
"sp-contributions-deleted": "การแก้ไขของผู้ใช้ที่ถูกลบ",
"sp-contributions-uploads": "อัปโหลด",
"sp-contributions-logs": "ปูม",
"sp-contributions-talk": "พูดคุย",
- "sp-contributions-userrights": "จัดการสิทธิผู้ใช้",
- "sp-contributions-blocked-notice": "ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก\nปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:",
+ "sp-contributions-userrights": "การจัดการสิทธิผู้ใช้",
+ "sp-contributions-blocked-notice": "ปัจจุบันผู้ใช้นี้ถูกบล็อก\nปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:",
"sp-contributions-blocked-notice-anon": "ปัจจุบันเลขที่อยู่ไอพีนี้ถูกบล็อก\nปูมการบล็อกล่าสุดแสดงด้านล่างนี้เพื่อการอ้างอิง:",
"sp-contributions-search": "ค้นหาการแก้ไข",
"sp-contributions-username": "เลขที่อยู่ไอพีหรือชื่อผู้ใช้:",
@@ -1851,18 +1871,18 @@
"sp-contributions-newonly": "แสดงเฉพาะการแก้ไขที่เป็นการสร้างหน้า",
"sp-contributions-submit": "ค้นหา",
"whatlinkshere": "หน้าที่ลิงก์มา",
- "whatlinkshere-title": "หน้าที่ลิงก์มายัง \"$1\"",
+ "whatlinkshere-title": "หน้าที่ลิงก์มา \"$1\"",
"whatlinkshere-page": "หน้า:",
- "linkshere": "หน้าต่อไปนี้ลิงก์มายัง '''[[:$1]]''':",
- "nolinkshere": "ไม่มีหน้าใดลิงก์มาที่ '''[[:$1]]'''",
- "nolinkshere-ns": "ไม่มีหน้าใดลิงก์มาที่'''[[:$1]]''' ในเนมสเปซที่เลือกไว้",
+ "linkshere": "หน้าต่อไปนี้ลิงก์มา <strong>[[:$1]]</strong>:",
+ "nolinkshere": "ไม่มีหน้าใดลิงก์มา <strong>[[:$1]]</strong>",
+ "nolinkshere-ns": "ไม่มีหน้าใดลิงก์มา <strong>[[:$1]]</strong> ในเนมสเปซที่เลือก",
"isredirect": "หน้าเปลี่ยนทาง",
"istemplate": "รวมอยู่",
"isimage": "ลิงก์ไฟล์",
- "whatlinkshere-prev": "{{PLURAL:$1|ก่อนหน้า|ก่อนหน้า $1 หน้า}}",
- "whatlinkshere-next": "{{PLURAL:$1|ถัดไป|ถัดไป $1 หน้า}}",
+ "whatlinkshere-prev": "{{PLURAL:$1|ก่อนหน้า|ก่อนหน้า $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|ถัดไป|ถัดไป $1}}",
"whatlinkshere-links": "← ลิงก์",
- "whatlinkshere-hideredirs": "$1หน้าเปลี่ยนทาง",
+ "whatlinkshere-hideredirs": "$1การเปลี่ยนทาง",
"whatlinkshere-hidetrans": "$1 ถูกรวมอยู่",
"whatlinkshere-hidelinks": "$1 ลิงก์",
"whatlinkshere-hideimages": "$1ลิงก์ไฟล์",
@@ -1882,7 +1902,7 @@
"ipbemailban": "ป้องกันมิให้ผู้ใช้ส่งอีเมล",
"ipbenableautoblock": "บล็อกเลขที่อยู่ไอพีล่าสุดที่ผู้ใช้นี้ใช้ ทั้งทุกเลขที่อยู่ไอพีที่ผู้นั้นพยายามใช้แก้ไขโดยอัตโนมัติ",
"ipbsubmit": "บล็อกผู้ใช้นี้",
- "ipbother": "เวลาอื่น",
+ "ipbother": "เวลาอื่น:",
"ipboptions": "2 ชั่วโมง:2 hours,1 วัน:1 day,3 วัน:3 days,1 สัปดาห์:1 week,2 สัปดาห์:2 weeks,1 เดือน:1 month,3 เดือน:3 months,6 เดือน:6 months,1 ปี:1 year,ไม่มีกำหนด:infinite",
"ipbhidename": "ซ่อนชื่อผู้ใช้จากการแก้ไขและรายการต่าง ๆ",
"ipbwatchuser": "เฝ้าดูหน้าผู้ใช้และหน้าคุยกับผู้ใช้ของผู้ใช้นี้",
@@ -1891,22 +1911,22 @@
"ipb-confirm": "ยืนยันการบล็อก",
"badipaddress": "เลขที่อยู่ไอพีไม่ถูกต้อง",
"blockipsuccesssub": "บล็อกสำเร็จ",
- "blockipsuccesstext": "[[Special:Contributions/$1|$1]] ถูกบล็อกแล้ว<br />\nดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อก",
+ "blockipsuccesstext": "บล็อก [[Special:Contributions/$1|$1]] แล้ว<br />\nดู[[Special:BlockList|รายการบล็อก]]เพื่อทบทวนการบล็อก",
"ipb-blockingself": "คุณกำลังบล็อกตัวเอง! แน่ใจแล้วหรือว่าต้องการทำอย่างนั้น",
"ipb-confirmhideuser": "คุณกำลังบล็อกผู้ใช้โดยเป็นผู้ใช้ \"ซ่อนผู้ใช้\" ซึ่งจะระงับชื่อผู้ใช้ในรายการและหน่วยปูมทั้งหมด คุณแน่ใจหรือว่าต้องการดำเนินการเช่นนั้น",
"ipb-confirmaction": "หากคุณแน่ใจว่าคุณต้องการดำเนินการ โปรดเลือกเขตข้อมูล \"{{int:ipb-confirm}}\" ที่อยู่ล่างสุด",
"ipb-edit-dropdown": "แก้ไขสาเหตุการบล็อก",
"ipb-unblock-addr": "ปลดบล็อก $1",
"ipb-unblock": "ปลดบล็อกผู้ใช้หรือเลขที่อยู่ไอพี",
- "ipb-blocklist": "ดูการบล็อกปัจจุบัน",
- "ipb-blocklist-contribs": "ผลงานเขียนโดย $1",
+ "ipb-blocklist": "ดูการบล็อกที่มีอยู่",
+ "ipb-blocklist-contribs": "เรื่องที่เขียนโดย $1",
"unblockip": "ปลดบล็อกผู้ใช้",
"unblockiptext": "ใช้แบบด้านล่างเพื่อคืนการเข้าถึงการเขียนแก่เลขที่อยู่ไอพี หรือชื่อผู้ใช้ที่เคยถูกบล็อก",
"ipusubmit": "ยกเลิกการบล็อกนี้",
- "unblocked": "[[User:$1|$1]] ถูกปลดบล็อกแล้ว",
- "unblocked-range": "$1 ถูกปลดบล็อกแล้ว",
- "unblocked-id": "บล็อก $1 ถูกนำออกแล้ว",
- "unblocked-ip": "[[Special:Contributions/$1|$1]] ถูกปลดบล็อก",
+ "unblocked": "ปลดบล็อก [[User:$1|$1]] แล้ว",
+ "unblocked-range": "ปลดบล็อก $1 แล้ว",
+ "unblocked-id": "เลิกบล็อก $1 แล้ว",
+ "unblocked-ip": "ปลดบล็อก [[Special:Contributions/$1|$1]] แล้ว",
"blocklist": "ผู้ใช้ที่ถูกบล็อก",
"ipblocklist": "ผู้ใช้ที่ถูกบล็อก",
"ipblocklist-legend": "ค้นหาผู้ใช้ที่ถูกบล็อก",
@@ -1925,13 +1945,13 @@
"ipblocklist-otherblocks": "{{PLURAL:$1|การบล็อก}}อื่น",
"infiniteblock": "ไม่มีกำหนด",
"expiringblock": "หมดอายุ $1 เวลา $2",
- "anononlyblock": "ไม่ล็อกอินเท่านั้น",
- "noautoblockblock": "ยกเลิกการบล็อกอัตโนมัติ",
+ "anononlyblock": "เฉพาะนิรนาม",
+ "noautoblockblock": "ปิดใช้งานการบล็อกอัตโนมัติ",
"createaccountblock": "ปิดใช้งานการสร้างบัญชี",
"emailblock": "ปิดใช้งานอีเมล",
"blocklist-nousertalk": "ไม่สามารถแก้ไขหน้าคุยกับผู้ใช้ของตนเอง",
"ipblocklist-empty": "รายการบล็อกว่าง",
- "ipblocklist-no-results": "เลขที่อยู่ไอพีหรือชื่อผู้ใช้ที่ต้องการไม่ได้ถูกบล็อก",
+ "ipblocklist-no-results": "เลขที่อยู่ไอพีหรือชื่อผู้ใช้ที่ขอไม่ถูกบล็อก",
"blocklink": "บล็อก",
"unblocklink": "ปลดบล็อก",
"change-blocklink": "เปลี่ยนการบล็อก",
@@ -1939,24 +1959,24 @@
"emaillink": "ส่งอีเมล",
"autoblocker": "ถูกบล็อกอัตโนมัติเนื่องจาก \"[[User:$1|$1]]\" ใช้เลขที่อยู่ไอพีของคุณเมื่อเร็ว ๆ นี้\nเหตุผลที่ให้แก่การบล็อก $1 คือ: \"$2\"",
"blocklogpage": "ปูมการบล็อก",
- "blocklog-showlog": "ผู้ใช้นี้ถูกสกัดกั้นมาก่อน\nปูมการสกัดกั้นแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
- "blocklog-showsuppresslog": "ผู้ใช้นี้ถูกสกัดกั้นและถูกซ่อนมาก่อน\nปูมการระงับแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
- "blocklogentry": "บล็อก \"[[$1]]\" หมดอายุ $2 $3",
+ "blocklog-showlog": "ผู้ใช้นี้เคยถูกบล็อก\nปูมการบล็อกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
+ "blocklog-showsuppresslog": "ผู้ใช้นี้ถูกบล็อกและซ่อน\nปูมการระงับแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
+ "blocklogentry": "บล็อก [[$1]] หมดอายุ $2 $3",
"reblock-logentry": "เปลี่ยนระดับการบล็อกสำหรับ [[$1]] หมดอายุ $2 $3",
"blocklogtext": "นี่คือปูมการบล็อกและการเลิกบล็อกผู้ใช้\nการบล็อกที่อยู่ไอพีโดยอัตโนมัติจะไม่แสดงในรายการ\nดู[[Special:BlockList|รายการบล็อกไอพี]]สำหรับการบล็อกและการระงับในปัจจุบัน",
- "unblocklogentry": "เลิกบล็อก $1",
- "block-log-flags-anononly": "ผู้ใช้นิรนามเท่านั้น",
+ "unblocklogentry": "ปลดบล็อก $1",
+ "block-log-flags-anononly": "เฉพาะผู้ใช้นิรนาม",
"block-log-flags-nocreate": "ปิดใช้งานการสร้างบัญชี",
"block-log-flags-noautoblock": "ปิดใช้งานการบล็อกอัตโนมัติ",
"block-log-flags-noemail": "ปิดใช้งานอีเมล",
"block-log-flags-nousertalk": "ไม่สามารถแก้ไขหน้าพูดคุยของตนเอง",
"block-log-flags-angry-autoblock": "การบล็อกอัตโนมัติขั้นสูงเปิดใช้งาน",
"block-log-flags-hiddenname": "ชื่อผู้ใช้ถูกซ่อน",
- "range_block_disabled": "การบล็อกช่วงไอพีของผู้ดูแลระบบถูกปิดการใช้งาน",
+ "range_block_disabled": "การบล็อกช่วงไอพีของผู้ดูแลระบบถูกปิดใช้งาน",
"ipb_expiry_invalid": "เวลาหมดอายุไม่ถูกต้อง",
"ipb_expiry_temp": "การบล็อกชื่อผู้ใช้ที่ซ่อนต้องเป็นการบล็อกถาวร",
"ipb_hide_invalid": "ไม่สามารถยับยั้งชื่อผู้ใช้นี้ได้ อาจเพราะมีการแก้ไขมากกว่า $1 การแก้ไข",
- "ipb_already_blocked": "\"$1\" ถูกบล็อกไปแล้ว",
+ "ipb_already_blocked": "\"$1\" ถูกบล็อกแล้ว",
"ipb-needreblock": "$1 ถูกบล็อกแล้ว คุณต้องการเปลี่ยนการตั้งค่าหรือไม่",
"ipb-otherblocks-header": "{{PLURAL:$1|การบล็อก}}อื่น",
"unblock-hideuser": "คุณไม่สามารถปลดบล็อกผู้ใช้นี้ได้ เพราะชื่อผู้ใช้ถูกซ่อนอยู่",
@@ -1975,8 +1995,8 @@
"unlockdb": "ปลดล็อกฐานข้อมูล",
"lockdbtext": "เมื่อล็อกฐานข้อมูลจะส่งผลให้ไม่สามารถแก้ไขทุกหน้า หรือแม้แต่เปลี่ยนแปลงการตั้งค่า ตรวจสอบให้แน่ใจว่าต้องการล็อกฐานข้อมูล และอย่าลืมปลดล็อกเมื่อตรวจสอบฐานข้อมูลเรียบร้อย",
"unlockdbtext": "เมื่อปลดล็อกฐานข้อมูลจะส่งผลให้ ผู้ใช้สามารถเริ่มแก้ไขหน้าได้เหมือนเดิม รวมถึงการตั้งค่าทุกอย่าง ตรวจสอบให้แน่ใจว่าต้องการปลดล็อกฐานข้อมูล",
- "lockconfirm": "ยืนยัน ต้องการล็อกฐานข้อมูล",
- "unlockconfirm": "ยืนยัน ต้องการปลดล็อกฐานข้อมูล",
+ "lockconfirm": "ใช่ ฉันต้องการล็อกฐานข้อมูล",
+ "unlockconfirm": "ใช่ ฉันต้องการปลดล็อกฐานข้อมูล",
"lockbtn": "ล็อกฐานข้อมูล",
"unlockbtn": "ปลดล็อกฐานข้อมูล",
"locknoconfirm": "ค่าตัวเลือกไม่ได้ถูกเลือก",
@@ -1989,32 +2009,35 @@
"lockedbyandtime": "(โดย {{GENDER:$1|$1}} เมื่อวันที่ $2 เวลา $3)",
"move-page": "ย้าย $1",
"move-page-legend": "เปลี่ยนชื่อ",
- "movepagetext": "การใช้แบบด้านล่างจะส่งผลเปลี่ยนชื่อหน้า และย้ายประวัติทั้งหมดไปยังชื่อใหม่\nชื่อเรื่องเก่าจะกลายเป็นหน้าเปลี่ยนทางไปยังชื่อเรื่องใหม่\nคุณสามารถปรับให้หน้าเปลี่ยนทางที่ชี้ไปยังชื่อเรื่องเดิมได้อัตโนมัติ\nแต่หากคุณเลือกไม่ทำเช่นนั้น ให้แน่ใจว่าตรวจสอบ[[Special:DoubleRedirects|หน้าเปลี่ยนทางซ้ำซ้อน]]หรือ[[Special:BrokenRedirects|หน้าเปลี่ยนทางที่เสีย]]\nคุณเป็นผู้รับผิดชอบเพื่อให้แน่ใจว่าลิงก์ต่าง ๆ ยังชี้ไปยังที่ที่สมควร\n\nโปรดทราบว่าหน้าดังกล่าวจะ'''ไม่'''ถูกย้าย ถ้ามีหน้าที่ใช้ชื่อเรื่องใหม่อยู่แล้ว เว้นแต่หน้านั้นเป็นหน้าเปลี่ยนทาง และไม่มีประวัติการแก้ไขในอดีต\nซึ่งหมายความว่า คุณสามารถเปลี่ยนชื่อหน้ากลับเป็นชื่อเดิมได้หากคุณทำผิดพลาด และคุณไม่สามารถเขียนทับหน้าที่มีอยู่แล้วได้\n\n'''คำเตือน!'''\nสิ่งนี้อาจเป็นการเปลี่ยนแปลงที่รุนแรงและไม่คาดคิดสำหรับหน้าที่เป็นที่นิยม\nโปรดแน่ใจว่าคุณเข้าใจถึงผลลัพธ์นี้ก่อนที่จะดำเนินการต่อไป",
+ "movepagetext": "การใช้แบบด้านล่างจะเปลี่ยนชื่อหน้า และย้ายประวัติทั้งหมดไปยังชื่อใหม่\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โปรดทราบว่าหน้าดังกล่าวจะ'''ไม่'''ถูกย้าย ถ้ามีหน้าที่ใช้ชื่อเรื่องใหม่อยู่แล้ว เว้นแต่เป็นหน้าว่างหรือหน้าเปลี่ยนทาง และไม่มีประวัติการแก้ไขในอดีต\nซึ่งหมายความว่า คุณสามารถเปลี่ยนชื่อหน้ากลับเป็นชื่อเดิมได้หากคุณทำผิดพลาด และคุณไม่สามารถเขียนทับหน้าที่มีอยู่แล้วได้\n\n'''คำเตือน!'''\nสิ่งนี้อาจเป็นการเปลี่ยนแปลงที่รุนแรงและไม่คาดคิดสำหรับหน้าที่เป็นที่นิยม\nโปรดแน่ใจว่าคุณเข้าใจถึงผลลัพธ์นี้ก่อนที่จะดำเนินการต่อไป",
- "movepagetalktext": "หน้าพูดคุยของหน้านี้จะถูกเปลี่ยนชื่อตามไปโดยอัตโนมัติ '''เว้นแต่:'''\n*มีหน้าพูดคุยภายใต้ชื่อใหม่อยู่แล้ว หรือ\n*คุณไม่เลือกกล่องด้านล่าง\n\nหากเกิดกรณีเหล่านี้ คุณจะต้องย้ายหรือรวมหน้าเองหากต้องการเปลี่ยนชื่อตามในภายหลัง",
+ "movepagetalktext": "หน้าพูดคุยของหน้านี้จะถูกเปลี่ยนชื่อตามไปโดยอัตโนมัติ<strong>เว้นแต่:</strong>\n*มีหน้าพูดคุยซึ่งไม่ว่างภายใต้ชื่อใหม่แล้ว หรือ\n*คุณไม่เลือกกล่องด้านล่าง\n\nในกรณีเหล่านี้ คุณจะต้องย้ายหรือรวมหน้าเองหากต้องการ",
"movearticle": "เปลี่ยนชื่อ",
- "moveuserpage-warning": "'''คำเตือน''' คุณกำลังย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ'''ไม่'''ถูกเปลี่ยนชื่อ",
+ "moveuserpage-warning": "<strong>คำเตือน:</strong> คุณกำลังย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ<em>ไม่</em>ถูกเปลี่ยนชื่อ",
+ "movecategorypage-warning": "<strong>คำเตือน:</strong> คุณกำลังย้ายหน้าหมวดหมู่ โปรดทราบว่า จะย้ายเฉพาะหน้าและทุกหน้าในหมวดหมู่เก่าจะ<em>ไม่</em>ถูกจัดเข้าหมวดหมู่ใหม่",
"movenologintext": "ถ้าต้องการเปลี่ยนชื่อหน้านี้ ต้องเป็นผู้ใช้ลงทะเบียนและ[[Special:UserLogin|ล็อกอิน]]",
"movenotallowed": "คุณไม่มีสิทธิเปลี่ยนชื่อหน้า",
"movenotallowedfile": "คุณไม่มีสิทธิย้ายไฟล์",
"cant-move-user-page": "คุณไม่มีสิทธิย้ายหน้าผู้ใช้ (แยกจากหน้าย่อย)",
"cant-move-to-user-page": "คุณไม่มีสิทธิย้ายหน้าใด ๆ ไปเป็นหน้าผู้ใช้ (ยกเว้นหน้าย่อยของผู้ใช้)",
- "newtitle": "ชื่อเรื่องใหม่:",
+ "cant-move-category-page": "คุณไม่มีสิทธิย้ายหน้าหมวดหมู่",
+ "cant-move-to-category-page": "คุณไม่มีสิทธิย้ายหน้าไปหน้าหมวดหมู่",
+ "newtitle": "ไปชื่อเรื่องใหม่:",
"move-watch": "เฝ้าดูหน้าต้นทางและหน้าปลายทาง",
"movepagebtn": "เปลี่ยนชื่อ",
"pagemovedsub": "เปลี่ยนชื่อสำเร็จ",
- "movepage-moved": "'''\"$1\" ถูกเปลี่ยนชื่อเป็น \"$2\"'''",
- "movepage-moved-redirect": "หน้าเปลี่ยนทางถูกสร้างขึ้น",
+ "movepage-moved": "<strong>เปลี่ยนชื่อ \"$1\" เป็น \"$2\" แล้ว</strong>",
+ "movepage-moved-redirect": "สร้างหน้าเปลี่ยนทางแล้ว",
"movepage-moved-noredirect": "การสร้างหน้าเปลี่ยนทางถูกระงับ",
"articleexists": "หน้าที่ต้องการมีอยู่แล้ว หรือชื่อที่เลือกไม่ถูกต้อง กรุณาเลือกชื่อใหม่",
"cantmove-titleprotected": "คุณไม่สามารถเปลี่ยนชื่อหน้าเป็นชื่อนี้ได้ เนื่องจากชื่อเรื่องใหม่ถูกป้องกันมิให้สร้าง",
- "movetalk": "เปลี่ยนชื่อหน้าพูดคุยพร้อมกัน",
- "move-subpages": "ย้ายหน้าย่อยทั้งหมด (มากถึง $1 หน้า)",
- "move-talk-subpages": "ย้ายหน้าย่อยทั้งหมดของหน้าอภิปราย (มากถึง $1 หน้า)",
- "movepage-page-exists": "หน้า $1 มีอยู่แล้วและไม่สามารถเขียนทับได้โดยอัตโนมัติ",
- "movepage-page-moved": "หน้า $1 ถูกเปลี่ยนชื่อเป็น $2",
- "movepage-page-unmoved": "หน้า $1 ไม่สามารถเปลี่ยนชื่อเป็น $2 ได้",
- "movepage-max-pages": "หน้า $1 หน้าถูกย้ายไป ซึ่งมากสุดแล้ว และจะไม่มีหน้าใดย้ายอัตโนมัติเพิ่ม",
+ "movetalk": "เปลี่ยนชื่อหน้าพูดคุยที่สัมพันธ์",
+ "move-subpages": "ย้ายหน้าย่อยทั้งหมด (มากสุด $1 หน้า)",
+ "move-talk-subpages": "ย้ายหน้าย่อยทั้งหมดของหน้าอภิปราย (มากสุด $1 หน้า)",
+ "movepage-page-exists": "มีหน้า $1 อยู่แล้วและไม่สามารถบันทึกทับอัตโนมัติ",
+ "movepage-page-moved": "เปลี่ยนชื่อหน้า $1 เป็น $2 แล้ว",
+ "movepage-page-unmoved": "ไม่สามารถเปลี่ยนชื่อหน้า $1 เป็น $2",
+ "movepage-max-pages": "เปลี่ยนชื่อหน้ามากสุด $1 หน้าแล้วและจะไม่เปลี่ยนชื่อหน้าเพิ่มอีกอัตโนมัติ",
"movelogpage": "ปูมการเปลี่ยนชื่อ",
"movelogpagetext": "ด้านล่างเป็นรายการการเปลี่ยนชื่อทั้งหมด",
"movesubpage": "{{PLURAL:$1|หน้าย่อย|หน้าย่อย}}",
@@ -2023,22 +2046,22 @@
"movereason": "เหตุผล:",
"revertmove": "ย้อน",
"delete_and_move": "ลบและย้าย",
- "delete_and_move_text": "== ต้องการลบ ==\nมีหน้าปลายทาง \"[[:$1]]\" แล้ว คุณต้องการลบหน้าดังกล่าวเพื่อสร้างหนทางที่จะย้ายหรือไม่?",
- "delete_and_move_confirm": "ใช่ ต้องการจะลบและย้าย",
- "delete_and_move_reason": "ลบเพื่อสร้างหนทางที่จะย้ายจาก \"[[$1]]\"",
- "selfmove": "ชื่อหน้าต้นทางและปลายทางเป็นชื่อเดียวกัน ไม่สามารถเปลี่ยนชื่อได้มาใช้ชื่อเดิมได้",
+ "delete_and_move_text": "== ต้องการลบ ==\nมีหน้าปลายทาง \"[[:$1]]\" แล้ว \nคุณต้องการลบหน้าดังกล่าวเพื่อสร้างหนทางสำหรับการย้ายหรือไม่",
+ "delete_and_move_confirm": "ใช่ ลบหน้านั้น",
+ "delete_and_move_reason": "ถูกลบเพื่อสร้างหนทางสำหรับการย้ายจาก \"[[$1]]\"",
+ "selfmove": "ชื่อหน้าต้นทางและปลายทางเหมือนกัน\nไม่สามารถเปลี่ยนชื่อมาใช้ชื่อเดิมได้",
"immobile-source-namespace": "ไม่สามารถเปลี่ยนชื่อหน้าในเนมสเปซ \"$1\"",
- "immobile-target-namespace": "ไม่สามารถย้ายหน้าไปยังเนมสเปซ \"$1\" ได้",
- "immobile-target-namespace-iw": "ไม่สามารถย้ายไปยังหน้าปลายทางที่เป็นลิงก์ interwiki ได้",
- "immobile-source-page": "หน้านี้ไม่สามารถเปลี่ยนชื่อได้",
- "immobile-target-page": "ไม่สามารถเปลี่ยนไปยังชื่อที่ต้องการได้",
+ "immobile-target-namespace": "ไม่สามารถย้ายหน้าเข้าเนมสเปซ \"$1\" ได้",
+ "immobile-target-namespace-iw": "ลิงก์ข้ามโครงการมิใช่เป้าหมายที่ถูกต้องของการเปลี่ยนชื่อหน้า",
+ "immobile-source-page": "หน้านี้ไม่สามารถเปลี่ยนชื่อ",
+ "immobile-target-page": "ไม่สามารถเปลี่ยนชื่อเป็นชื่อเรื่องปลายทางนั้น",
"imagenocrossnamespace": "ไม่สามารถย้ายไฟล์ไปยังเนมสเปซอื่น",
"nonfile-cannot-move-to-file": "ไม่สามารถย้ายจากเนมสเปซอื่นมาเป็นเนมสเปซไฟล์",
- "imagetypemismatch": "นามสกุลของไฟล์ใหม่ไม่ตรงกับชนิดของไฟล์",
+ "imagetypemismatch": "นามสกุลไฟล์ใหม่ไม่ตรงกับชนิด",
"imageinvalidfilename": "ชื่อไฟล์เป้าหมายไม่ถูกต้อง",
- "fix-double-redirects": "อัปเดตหน้าเปลี่ยนทางทุกหน้าที่โอนไปยังชื่อเดิม",
+ "fix-double-redirects": "ปรับทุกหน้าเปลี่ยนทางที่ชี้ไปยังชื่อเรื่องเดิม",
"move-leave-redirect": "สร้างหน้าเปลี่ยนทางตามมา",
- "protectedpagemovewarning": "'''คำเตือน:''' หน้านี้ถูกล็อก เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้นที่ย้ายได้\nปูมการป้องกันล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
+ "protectedpagemovewarning": "<strong>คำเตือน:</strong> หน้านี้ถูกล็อก เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้นที่ย้ายได้\nปูมล่าสุดแสดงไว้ด้านล่างเพื่อการอ้างอิง:",
"semiprotectedpagemovewarning": "'''หมายเหตุ:''' หน้านี้ถูกล็อก เฉพาะผู้ใช้ลงทะเบียนเท่านั้นที่ย้ายได้\nรายการปูมล่าสุดได้ถูกแสดงไว้ด้านล่างนี้เพื่อการอ้างอิง:",
"move-over-sharedrepo": "== มีไฟล์เดิมปรากฏ ==\nไฟล์ [[:$1]] มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง การย้ายไฟล์ที่มีชื่อเรื่องนี้อาจจะเป็นการเขียนทับไฟล์เดิมในคลังเก็บได้",
"file-exists-sharedrepo": "ชื่อไฟล์นี้มีปรากฏเดิมอยู่แล้วในคลังเก็บภาพส่วนกลาง\nกรุณาเลือกชื่ออื่น",
@@ -2064,26 +2087,28 @@
"allmessagesnotsupportedDB": "หน้านี้ไม่สามารถใช้งานได้เนื่องจาก '''$wgUseDatabaseMessages''' ถูกระงับการใช้งาน",
"allmessages-filter-legend": "กรอง",
"allmessages-filter": "กรองตามสถานะที่เลือก:",
- "allmessages-filter-unmodified": "ไม่มีการแก้ไข",
+ "allmessages-filter-unmodified": "ไม่ดัดแปร",
"allmessages-filter-all": "ทั้งหมด",
- "allmessages-filter-modified": "มีการแก้ไข",
+ "allmessages-filter-modified": "ดัดแปร",
"allmessages-prefix": "กรองด้วยคำขึ้นต้น:",
"allmessages-language": "ภาษา:",
"allmessages-filter-submit": "ไป",
- "allmessages-filter-translate": "การแปล",
+ "allmessages-filter-translate": "แปล",
"thumbnail-more": "ขยาย",
"filemissing": "ไฟล์สูญหาย",
- "thumbnail_error": "เกิดปัญหาไม่สามารถทำรูปย่อได้: $1",
+ "thumbnail_error": "มีข้อผิดพลาดในการสร้างรูปย่อ: $1",
"djvu_page_error": "หน้าเดจาวู (DjVu) เกินขนาด",
"djvu_no_xml": "ไม่สามารถส่งเอกซ์เอ็มแอล (XML) สำหรับไฟล์เดจาวู (DjVu)",
- "thumbnail_invalid_params": "พารามิเตอร์ของธัมบ์เนลไม่ถูกต้อง",
- "thumbnail_dest_directory": "ไม่สามารถสร้างไดเรกทอรีภาพได้",
+ "thumbnail_invalid_params": "พารามิเตอร์รูปย่อไม่ถูกต้อง",
+ "thumbnail_dest_directory": "ไม่สามารถสร้างสารบบปลายทาง",
"thumbnail_image-type": "ไม่รองรับรูปแบบของไฟล์รูปภาพนี้",
"thumbnail_gd-library": "การตั้งค่าไลบรารี GD ไม่สมบูรณ์: ไม่พบฟังก์ชัน $1",
- "thumbnail_image-missing": "ไฟล์ที่เหมือนจะหายไป: $1",
+ "thumbnail_image-missing": "ไฟล์ที่เหมือนหายไป: $1",
"import": "หน้านำเข้า",
"importinterwiki": "นำเข้าข้ามวิกิ",
"import-interwiki-text": "เลือกวิกิและชื่อหัวข้อที่ต้องการนำเข้า วันที่และชื่อผู้เขียนทั้งหมดจะถูกเก็บไว้ โดยการนำเข้าทุกส่วนจะถูกเก็บไว้ใน [[Special:Log/import|ปูมการนำเข้า]]",
+ "import-interwiki-sourcewiki": "วิกิต้นทาง:",
+ "import-interwiki-sourcepage": "หน้าต้นทาง:",
"import-interwiki-history": "คัดลอกประวัติทั้งหมดในหน้านี้",
"import-interwiki-templates": "รวมแม่แบบทั้งหมด",
"import-interwiki-submit": "นำเข้า",
@@ -2118,53 +2143,52 @@
"import-rootpage-nosubpage": "เนมสเปซ \"$1\" ของหน้าต้นทางไม่อนุญาตหน้าย่อย",
"importlogpage": "ปูมการนำเข้า",
"importlogpagetext": "นำเข้าไฟล์จากวิกิอื่น โดยผ่านทางผู้ดูแลระบบ",
- "import-logentry-upload": "นำเข้า [[$1]] ผ่านการอัปโหลดแล้ว",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}",
- "import-logentry-interwiki": "นำเข้าข้ามวิกิ $1 แล้ว",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}จาก $2",
+ "import-logentry-upload-detail": "นำเข้า $1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}",
+ "import-logentry-interwiki-detail": "นำเข้า $1 {{PLURAL:$1|รุ่นการแก้ไข|รุ่นการแก้ไข}}จาก $2",
"javascripttest": "การทดสอบจาวาสคริปต์",
- "javascripttest-title": "กำลังดำเนินงานทดสอบ $1",
"javascripttest-pagetext-noframework": "หน้านี้สงวนไว้สำหรับดำเนินงานการทดสอบจาวาสคริปต์",
"javascripttest-pagetext-skins": "เลือกสกินที่จะดำเนินงานการทดสอบ:",
"javascripttest-qunit-intro": "ดู[$1 เอกสารกำกับการทดสอบ]บน mediawiki.org",
"tooltip-pt-userpage": "หน้าผู้ใช้ของคุณ",
"tooltip-pt-anonuserpage": "หน้าผู้ใช้ของเลขที่อยู่ไอพีที่คุณกำลังใช้แก้ไข",
- "tooltip-pt-mytalk": "หน้าอภิปรายของคุณ",
- "tooltip-pt-anontalk": "พูดคุยเกี่ยวกับการแก้ไขจากเลขที่อยู่ไอพีนี้",
- "tooltip-pt-preferences": "ตั้งค่าการใช้งานส่วนตัว",
- "tooltip-pt-watchlist": "รายการหน้าที่คุณเฝ้าดูการแก้ไข",
+ "tooltip-pt-mytalk": "หน้าพูดคุยของคุณ",
+ "tooltip-pt-anontalk": "อภิปรายเกี่ยวกับการแก้ไขจากเลขที่อยู่ไอพีนี้",
+ "tooltip-pt-preferences": "การตั้งค่าของคุณ",
+ "tooltip-pt-watchlist": "รายการหน้าที่คุณกำลังเฝ้าดูการเปลี่ยนแลปง",
"tooltip-pt-mycontris": "รายการหน้าที่คุณเขียน",
- "tooltip-pt-login": "ไม่จำเป็นต้องล็อกอินในการแก้ไข แต่แนะนำอย่างยิ่งให้ล็อกอิน",
+ "tooltip-pt-login": "ไม่จำเป็นต้องล็อกอิน แต่แนะนำอย่างยิ่งให้ล็อกอิน",
"tooltip-pt-logout": "ล็อกเอาต์",
- "tooltip-ca-talk": "พูดคุยเกี่ยวกับเนื้อหา",
- "tooltip-ca-edit": "คุณสามารถแก้ไขหน้านี้ได้ โปรดใช้ปุ่มดูตัวอย่างก่อนบันทึก",
- "tooltip-ca-addsection": "เริ่มหัวข้อย่อยใหม่",
- "tooltip-ca-viewsource": "หน้านี้ถูกล็อก แต่ยังดูโค้ดได้",
+ "tooltip-pt-createaccount": "สนับสนุนให้คุณสร้างบัญชีและล็อกอิน แต่ไม่บังคับ",
+ "tooltip-ca-talk": "อภิปรายเกี่ยวกับหน้าเนื้อหา",
+ "tooltip-ca-edit": "คุณสามารถแก้ไขหน้านี้ได้ โปรดใช้ปุ่มตัวอย่างก่อนบันทึก",
+ "tooltip-ca-addsection": "เริ่มส่วนใหม่",
+ "tooltip-ca-viewsource": "หน้านี้ถูกล็อก \nแต่ยังดูโค้ดได้",
"tooltip-ca-history": "รุ่นที่แล้วของหน้านี้",
"tooltip-ca-protect": "ล็อกหน้านี้",
- "tooltip-ca-unprotect": "เปลี่ยนแปลงการป้องกันหน้านี้",
+ "tooltip-ca-unprotect": "เปลี่ยนการป้องกันหน้านี้",
"tooltip-ca-delete": "ลบหน้านี้",
"tooltip-ca-undelete": "กู้คืนการแก้ไขหน้านี้กลับมาเป็นรุ่นก่อนที่ถูกลบ",
"tooltip-ca-move": "เปลี่ยนชื่อหน้านี้",
"tooltip-ca-watch": "เพิ่มหน้านี้เข้ารายการเฝ้าดู",
"tooltip-ca-unwatch": "นำหน้านี้ออกจากรายการเฝ้าดู",
"tooltip-search": "ค้นหา {{SITENAME}}",
- "tooltip-search-go": "ตรงไปยังหน้าที่ตรงกับชื่อนี้ (ถ้ามี)",
+ "tooltip-search-go": "ไปหน้าที่ตรงกับชื่อนี้ (ถ้ามี)",
"tooltip-search-fulltext": "ค้นหาหน้าที่มีข้อความนี้",
- "tooltip-p-logo": "เข้าสู่หน้าหลัก",
- "tooltip-n-mainpage": "เข้าสู่หน้าหลัก",
- "tooltip-n-mainpage-description": "เข้าสู่หน้าหลัก",
+ "tooltip-p-logo": "เยี่ยมชมหน้าหลัก",
+ "tooltip-n-mainpage": "เยี่ยมชมหน้าหลัก",
+ "tooltip-n-mainpage-description": "เยี่ยมชมหน้าหลัก",
"tooltip-n-portal": "เกี่ยวกับโครงการ สิ่งที่คุณทำได้ วิธีการค้นหา",
"tooltip-n-currentevents": "ค้นหาเหตุการณ์ปัจจุบัน",
"tooltip-n-recentchanges": "รายการปรับปรุงล่าสุดในวิกินี้",
- "tooltip-n-randompage": "สุ่มหน้าขึ้นมา",
+ "tooltip-n-randompage": "โหลดหน้าสุ่ม",
"tooltip-n-help": "อธิบายการใช้งาน",
"tooltip-t-whatlinkshere": "รายการทุกหน้าวิกิที่ลิงก์มาที่นี่",
"tooltip-t-recentchangeslinked": "รายการปรับปรุงล่าสุดในหน้าที่ลิงก์จากหน้านี้",
"tooltip-feed-rss": "ฟีดชนิดอาร์เอสเอส (RSS) ของหน้านี้",
"tooltip-feed-atom": "ฟีดอะตอม (Atom) ของหน้านี้",
- "tooltip-t-contributions": "รายการเรื่องที่เขียนโดยผู้ใช้นี้",
+ "tooltip-t-contributions": "รายการเรื่องที่ผู้ใช้นี้เขียน",
"tooltip-t-emailuser": "ส่งอีเมลถึงผู้ใช้นี้",
+ "tooltip-t-info": "สารสนเทศเพิ่มเติมเกี่ยวกับหน้านี้",
"tooltip-t-upload": "อัปโหลดไฟล์",
"tooltip-t-specialpages": "รายการหน้าพิเศษทั้งหมด",
"tooltip-t-print": "รุ่นที่พร้อมพิมพ์ของหน้านี้",
@@ -2176,23 +2200,23 @@
"tooltip-ca-nstab-project": "ดูหน้าโครงการ",
"tooltip-ca-nstab-image": "ดูหน้าภาพไฟล์",
"tooltip-ca-nstab-mediawiki": "ดูข้อความระบบ",
- "tooltip-ca-nstab-template": "ดูหน้าแม่แบบ",
+ "tooltip-ca-nstab-template": "ดูแม่แบบ",
"tooltip-ca-nstab-help": "ดูหน้าคำอธิบาย",
"tooltip-ca-nstab-category": "ดูหน้าหมวดหมู่",
"tooltip-minoredit": "ทำเครื่องหมายเป็นการแก้ไขเล็กน้อย",
- "tooltip-save": "บันทึกการแก้ไข",
+ "tooltip-save": "บันทึกการแก้ไขของคุณ",
"tooltip-preview": "แสดงตัวอย่างการเปลี่ยนแปลงของคุณ กรุณาใช้คำสั่งนี้ก่อนบันทึก!",
"tooltip-diff": "แสดงการเปลี่ยนการต่อข้อความ",
"tooltip-compareselectedversions": "แสดงความแตกต่างระหว่างสองรุ่นที่เลือกของหน้านี้",
"tooltip-watch": "เพิ่มหน้านี้เข้ารายการเฝ้าดู",
- "tooltip-watchlistedit-normal-submit": "นำชื่อเรื่องออก",
- "tooltip-watchlistedit-raw-submit": "อัพเดทรายการเฝ้าดู",
+ "tooltip-watchlistedit-normal-submit": "ลบชื่อเรื่องออก",
+ "tooltip-watchlistedit-raw-submit": "ปรับรายการเฝ้าดู",
"tooltip-recreate": "สร้างหน้านี้อีกครั้งแม้เคยถูกลบ",
"tooltip-upload": "เริ่มอัปโหลด",
"tooltip-rollback": "\"ย้อนกลับฉุกเฉิน\" ใช้ย้อนการแก้ไขในหน้านี้ของผู้เขียนคนล่าสุดในคลิกเดียว",
- "tooltip-undo": "\"ย้อน\" ใช้ย้อนการแก้ไขครั้งนี้และเปิดแบบแก้ไข สามารถเพิ่มคำอธิบายในตอนท้าย",
+ "tooltip-undo": "\"การทำกลับ\" ย้อนการแก้ไขนี้และเปิดแบบแก้ไขในภาวะตัวอย่าง เปิดให้เพิ่มเหตุผลในคำอธิบาย",
"tooltip-preferences-save": "บันทึกการตั้งค่า",
- "tooltip-summary": "ใส่คำอธิบายอย่างย่อสั้น ๆ",
+ "tooltip-summary": "ใส่สรุปสั้น ๆ",
"common.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทุกสกิน */",
"print.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ข้อมูลส่งออกเป็นสิ่งพิมพ์ */",
"noscript.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ปิดการใช้งานจาวาสคริปต์ */",
@@ -2208,24 +2232,24 @@
"anonymous": "{{PLURAL:$1|ผู้ใช้|ผู้ใช้}}นิรนามของ{{SITENAME}}",
"siteuser": "ผู้ใช้ $1 จาก {{SITENAME}}",
"anonuser": "ผู้ใช้นิรนามจาก {{SITENAME}} $1",
- "lastmodifiedatby": "แก้ไขล่าสุดเมื่อเวลา $2 $1 โดย $3",
+ "lastmodifiedatby": "ดัดแปรหน้านี้ล่าสุดเมื่อเวลา $2, $1 โดย $3",
"othercontribs": "พัฒนาจากงานเขียนของ $1",
"others": "ผู้อื่น",
- "siteusers": "{{PLURAL:$2|ผู้ใช้|ผู้ใช้}} {{SITENAME}} $1",
- "anonusers": "{{PLURAL:$2|ผู้ใช้|บรรดาผู้ใช้}}นิรนามจาก {{SITENAME}} $1",
+ "siteusers": "{{PLURAL:$2|ผู้ใช้|ผู้ใช้}}จาก {{SITENAME}} $1",
+ "anonusers": "{{PLURAL:$2|ผู้ใช้|ผู้ใช้}}นิรนามจาก {{SITENAME}} $1",
"creditspage": "เกียรติแก่ผู้ร่วมสร้าง",
"nocredits": "ไม่มีรายชื่อผู้เป็นเกียรติที่ร่วมสร้างหน้านี้",
"spamprotectiontitle": "ตัวกรองป้องกันสแปม",
"spamprotectiontext": "ข้อความที่คุณต้องการบันทึกถูกตัวกรองสแปมบล็อก\nอาจเกิดจากลิงก์ไปยังเว็บไซต์ภายนอกที่ถูกขึ้นบัญชีดำ",
"spamprotectionmatch": "ข้อความต่อไปนี้ทำให้ตัวกรองสแปมของเราทำงาน: $1",
"spambot_username": "กวาดล้างมีเดียวิกิสแปม",
- "spam_reverting": "ย้อนกลับไปรุ่นก่อนหน้าที่ไม่มีลิงก์ไปยังเว็บ $1",
+ "spam_reverting": "ย้อนไปรุ่นแก้ไขสุดท้ายที่ไม่มีลิงก์ไป $1",
"spam_blanking": "รุ่นการปรับปรุงทุกรุ่นประกอบไปด้วยลิงก์ไปยังเว็บ $1 (ทำหน้าว่าง)",
"spam_deleting": "ทุกรุ่นที่มีลิงก์ไปยัง $1 กำลังลบ",
"simpleantispam-label": "การตรวจสอบสแปม\n<strong>อย่า</strong>กรอกช่องนี้!",
- "pageinfo-title": "ข้อมูลสำหรับ \"$1\"",
- "pageinfo-not-current": "ขออภัย ไม่สามารถให้ข้อมูลนี้สำหรับรุ่นเก่าได้",
- "pageinfo-header-basic": "ข้อมูลเบื้องต้น",
+ "pageinfo-title": "สารสนเทศสำหรับ \"$1\"",
+ "pageinfo-not-current": "ขออภัย ไม่สามารถให้สารสนเทศนี้สำหรับรุ่นปรับปรุงเก่าได้",
+ "pageinfo-header-basic": "สารสนเทศเบื้องต้น",
"pageinfo-header-edits": "ประวัติการแก้ไข",
"pageinfo-header-restrictions": "การล็อกหน้า",
"pageinfo-header-properties": "คุณสมบัติหน้า",
@@ -2238,11 +2262,10 @@
"pageinfo-robot-policy": "การทำดัชนีโดยบอต",
"pageinfo-robot-index": "อนุญาต",
"pageinfo-robot-noindex": "ไม่อนุญาต",
- "pageinfo-views": "จำนวนการเข้าดู",
- "pageinfo-watchers": "จำนวนผู้เข้าดูหน้า",
+ "pageinfo-watchers": "จำนวนผู้เฝ้าดูหน้า",
"pageinfo-few-watchers": "{{PLURAL:$1|ผู้เฝ้าดู|ผู้เฝ้าดู}}น้อยกว่า $1 คน",
"pageinfo-redirects-name": "จำนวนการเปลี่ยนทางมาหน้านี้",
- "pageinfo-subpages-name": "หน้าย่อยของหน้านี้",
+ "pageinfo-subpages-name": "จำนวนหน้าย่อยของหน้านี้",
"pageinfo-subpages-value": "$1 ($2 หน้าเปลี่ยนทาง; $3 หน้าไม่เปลี่ยนทาง)",
"pageinfo-firstuser": "ผู้สร้างหน้า",
"pageinfo-firsttime": "วันที่สร้างหน้า",
@@ -2254,23 +2277,23 @@
"pageinfo-recent-authors": "จำนวนผู้เขียนล่าสุด",
"pageinfo-hidden-categories": "หมวดหมู่ที่ซ่อนอยู่ ($1)",
"pageinfo-templates": "แม่แบบที่ใช้ ($1)",
- "pageinfo-toolboxlink": "ข้อมูลหน้า",
- "pageinfo-redirectsto": "เปลี่ยนทางไปยัง",
+ "pageinfo-toolboxlink": "สารสนเทศหน้า",
+ "pageinfo-redirectsto": "เปลี่ยนทางไป",
"pageinfo-contentpage": "นับเป็นหน้าเนื้อหา",
"pageinfo-contentpage-yes": "ใช่",
"pageinfo-protect-cascading": "การล็อกที่สืบทอดจากหน้านี้",
"pageinfo-protect-cascading-yes": "ใช่",
- "pageinfo-protect-cascading-from": "การล็อกที่สืบทอดมายังหน้านี้",
- "pageinfo-category-info": "ข้อมูลหมวดหมู่",
+ "pageinfo-protect-cascading-from": "การล็อกสืบทอดจาก",
+ "pageinfo-category-info": "สารสนเทศหมวดหมู่",
"pageinfo-category-pages": "จำนวนหน้า",
"pageinfo-category-subcats": "จำนวนหมวดหมู่ย่อย",
"pageinfo-category-files": "จำนวนไฟล์",
"markaspatrolleddiff": "ทำเครื่องหมายว่าตรวจสอบแล้ว",
"markaspatrolledtext": "ทำเครื่องหมายว่าหน้านี้ถูกตรวจสอบแล้ว",
"markedaspatrolled": "ตรวจสอบแล้ว",
- "markedaspatrolledtext": "รุ่นการแก้ไขของ[[:$1]]ถูกกำหนดว่าตรวจสอบแล้ว",
- "rcpatroldisabled": "การตรวจสอบหน้าปรับปรุงล่าสุดปิดใช้งาน",
- "rcpatroldisabledtext": "ฟังก์ชันการตรวจสอบหน้าปรับปรุงล่าสุดขณะนี้ไม่เปิดการใช้งาน",
+ "markedaspatrolledtext": "กำหนดรุ่นที่เลือกของ [[:$1]] ว่าตรวจสอบแล้ว",
+ "rcpatroldisabled": "การตรวจสอบหน้าปรับปรุงล่าสุดถูกปิดใช้งาน",
+ "rcpatroldisabledtext": "ปัจจุบันฟังก์ชันการตรวจสอบหน้าปรับปรุงล่าสุดถูกปิดใช้งาน",
"markedaspatrollederror": "ไม่สามารถทำเครื่องหมายว่าตรวจสอบแล้ว",
"markedaspatrollederrortext": "คุณจำเป็นต้องระบุรุ่นการแก้ไขที่กำหนดว่าตรวจสอบแล้ว",
"markedaspatrollederror-noautopatrol": "คุณไม่สามารถทำเครื่องหมายการแก้ไขของคุณเองว่าตรวจสอบแล้ว",
@@ -2280,7 +2303,7 @@
"patrol-log-header": "หน้านี้คือปูมรุ่นการแก้ไขที่กำหนดว่าตรวจสอบแล้ว",
"log-show-hide-patrol": "$1 ปูมการตรวจสอบ",
"deletedrevision": "รุ่นเก่าที่ถูกลบ $1",
- "filedeleteerror-short": "เกิดปัญหาการลบไฟล์: $1",
+ "filedeleteerror-short": "มีข้อผิดพลาดการลบไฟล์: $1",
"filedeleteerror-long": "เกิดข้อผิดพลาดขณะลบไฟล์:\n\n$1",
"filedelete-missing": "ไม่สามารถลบไฟล์ \"$1\" ได้ เนื่องจากไม่มีไฟล์ชื่อนี้อยู่",
"filedelete-old-unregistered": "ไม่มีรุ่นไฟล์ \"$1\" ที่ระบุในฐานข้อมูล",
@@ -2297,9 +2320,11 @@
"file-info-size-pages": "$1 × $2 พิกเซล, ขนาดไฟล์: $3, ประเภท MIME: $4, $5 {{PLURAL:$5|หน้า|หน้า}}",
"file-nohires": "ไม่มีความละเอียดสูงกว่านี้",
"svg-long-desc": "ไฟล์ SVG, $1 × $2 พิกเซล พอเป็นพิธี, ขนาดไฟล์: $3",
+ "svg-long-desc-animated": "ไฟล์ SVG ขนาด $1 x $2 ขนาดไฟล์ $3",
"svg-long-error": "ไฟล์ SVG ไม่ถูกต้อง: $1",
"show-big-image": "ไฟล์ต้นฉบับ",
- "show-big-image-other": "อื่นๆ {{PLURAL:$2|resolution|resolutions}}: $1.",
+ "show-big-image-preview": "ขนาดของตัวอย่างนี้: $1",
+ "show-big-image-other": "{{PLURAL:$2|ความละเอียด|ความละเอียด}}อื่น: $1",
"show-big-image-size": "$1 × $2 พิกเซล",
"file-info-gif-looped": "วนซ้ำ",
"file-info-gif-frames": "$1 {{PLURAL:$1|เฟรม|เฟรม}}",
@@ -2315,7 +2340,7 @@
"noimages": "ไม่มีให้ดู",
"ilsubmit": "สืบค้น",
"bydate": "ตามวันที่",
- "sp-newimages-showfrom": "แสดงภาพใหม่เริ่มต้นจาก $2, $1",
+ "sp-newimages-showfrom": "แสดงไฟล์ใหม่เริ่มจาก $2, $1",
"seconds-abbrev": "$1 วินาที",
"minutes-abbrev": "$1 นาที",
"hours-abbrev": "$1 ชั่วโมง",
@@ -2342,13 +2367,13 @@
"yesterday-at": "เมื่อวานเมื่อ $1 น.",
"bad_image_list": "รูปแบบแสดงต่อไปนี้:\n\nเฉพาะรายการที่แสดง (ในแถวขึ้นต้นด้วย *) โดยลิงก์แรกของแต่ละแถวเป็นลิงก์ไปยังภาพที่เสีย\nโดยลิงก์ถัดไปเป็นข้อยกเว้น เช่น บทความที่ภาพถูกจัดในบรรทัดเดียวกับส่วนข้อความ",
"metadata": "ข้อมูลแนบ",
- "metadata-help": "ไฟล์นี้มีข้อมูลเพิ่มเติมแนบไว้ อาจจะมาจาก กล้องดิจิทัล สแกนเนอร์ หรือเครื่องรับส่งจีพีเอส อย่างไรก็ตามข้อมูลที่เก็บไว้อาจถูกดัดแปลงถ้าไฟล์ต้นฉบับถูกแก้ไขจากซอฟต์แวร์อื่น",
- "metadata-expand": "แสดงข้อมูลเพิ่มเติม",
- "metadata-collapse": "ซ่อนข้อมูลเพิ่มเติม",
+ "metadata-help": "ไฟล์นี้มีสารสนเทศเพิ่มเติม อาจเพิ่มจากกล้องถ่ายรูปดิจิทัลหรือสแกนเนอร์ที่ใช้เพื่อสร้างหรือแปลงภาพเป็นดิจิทัล\nหากไฟล์นี้ถูกดัดแปรจากสถานะต้นฉบับ รายละเอียดบางอย่างอาจไม่สะท้อนไฟล์ที่ถูกดัดแปลอย่างสมบูรณ์",
+ "metadata-expand": "แสดงรายละเอียดขยาย",
+ "metadata-collapse": "ซ่อนรายละเอียดขยาย",
"metadata-fields": "เขตข้อมูลเมทาเดตาของภาพดังที่แสดงรายการไว้ในข้อความนี้ จะถูกรวมบนหน้าภาพเมื่อตารางเมทาเดตาถูกยุบ เขตข้อมูลอื่น ๆ จะถูกซ่อนโดยปริยาย\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "ความกว้าง",
"exif-imagelength": "ความสูง",
- "exif-bitspersample": "บิต ต่อคอมโพเนนต์",
+ "exif-bitspersample": "บิตต่อคอมโพเนนต์",
"exif-compression": "รูปแบบการบีบอัด",
"exif-photometricinterpretation": "พิกเซลคอมโพซิชัน",
"exif-orientation": "การจัดวางภาพ",
@@ -2367,13 +2392,13 @@
"exif-primarychromaticities": "โครมาติกของไพรมาริตี",
"exif-ycbcrcoefficients": "สัมประสิทธิเมทริกซ์การเปลียนแปลงของสเปซสี",
"exif-referenceblackwhite": "คู่จุดสีขาวและดำสำหรับอ้างอิง",
- "exif-datetime": "วันที่และเวลาปรับปรุง",
+ "exif-datetime": "วันที่และเวลาเปลี่ยนไฟล์",
"exif-imagedescription": "ชื่อภาพ",
"exif-make": "ผู้ผลิตกล้อง",
- "exif-model": "รุ่นกล้อง",
+ "exif-model": "รุ่นกล้องถ่ายรูป",
"exif-software": "ซอฟต์แวร์ที่ใช้",
"exif-artist": "ผู้สร้างสรรค์",
- "exif-copyright": "ผู้ถือลิขสิทธิ์",
+ "exif-copyright": "ผู้ทรงลิขสิทธิ์",
"exif-exifversion": "รุ่นเอกซิฟ (Exif)",
"exif-flashpixversion": "รุ่นแฟลชพิกซ์ที่รองรับ",
"exif-colorspace": "สเปซสี",
@@ -2383,8 +2408,8 @@
"exif-pixelxdimension": "ความสูงของภาพ",
"exif-usercomment": "ความเห็นผู้ใช้",
"exif-relatedsoundfile": "ไฟล์เสียงที่เกี่ยวข้อง",
- "exif-datetimeoriginal": "วันที่และเวลาที่สร้าง",
- "exif-datetimedigitized": "วันที่และเวลาที่ดิจิไทซ์",
+ "exif-datetimeoriginal": "วันที่และเวลาการก่อกำเนิดข้อมูล",
+ "exif-datetimedigitized": "วันที่และเวลาการแปลงเป็นดิจิทัล",
"exif-subsectime": "เสี้ยววินาที วันที่ เวลา",
"exif-subsectimeoriginal": "เสี้ยววินาที วันที่ เวลาต้นฉบับ",
"exif-subsectimedigitized": "เสี้ยววินาที วันที่ เวลาที่ดิจิไทซ์",
@@ -2569,7 +2594,7 @@
"exif-gpslatitude-s": "ละติจูดใต้",
"exif-gpslongitude-e": "ลองจิจูดตะวันออก",
"exif-gpslongitude-w": "ลองจิจูดตะวันตก",
- "exif-gpsstatus-a": "กำลังทำการวัดอยู่",
+ "exif-gpsstatus-a": "กำลังวัด",
"exif-gpsstatus-v": "ความสามารถในการวัดตำแหน่ง",
"exif-gpsmeasuremode-2": "การวัดสองมิติ",
"exif-gpsmeasuremode-3": "การวัดสามมิติ",
@@ -2591,7 +2616,6 @@
"exif-iimcategory-sci": "วิทยาศาสตร์และเทคโนโลยี",
"exif-iimcategory-spo": "กีฬา",
"exif-iimcategory-wea": "ภูมิอากาศ",
- "watchlistall2": "ทั้งหมด",
"namespacesall": "ทั้งหมด",
"monthsall": "ทั้งหมด",
"confirmemail": "ยืนยันที่อยู่อีเมล",
@@ -2610,13 +2634,13 @@
"confirmemail_body": "ใครบางคน ซึ่งอาจจะเป็นคุณ จากหมายเลขไอพี $1 ได้ลงทะเบียนในชื่อ \"$2\" โดยใช้อีเมลนี้ที่ {{SITENAME}}\n\nเพื่อยืนยันว่าบัญชีผู้ใช้นี้เป็นของคุณอย่างแน่อน และใช้งานฟีเจอร์ส่งอีเมลหาผู้ใช้บน {{SITENAME}} กดลิงก์นี้ในเว็บเบราวเซอร์ของคุณ:\n\n$3\n\nถ้าคุณ*ไม่*ได้ลงทะเบียน กรุณากดลิงก์ด้านล่างเพื่อยกเลิกการยืนยันที่อยู่อีเมล\n\n$5\n\nรหัสยืนยันนี้จะหมดอายุเมื่อ $4",
"confirmemail_body_changed": "ใครบางคน ซึ่งอาจจะเป็นคุณ จากเลขที่อยู่ไอพี $1 ได้เปลี่ยนที่อยู่อีเมลสำหรับบัญชีผู้ใช้ \"$2\" ไปยังที่อยู่นี้บน {{SITENAME}}\n\nเพื่อยืนยันว่าบัญชีผู้ใช้นี้เป็นของคุณอย่างแน่นอนและเปิดใช้งานฟีเจอร์ส่งอีเมลหาผู้ใช้บน {{SITENAME}} อีกครั้งหนึ่ง กดลิงก์นี้ในเว็บเบราวเซอร์ของคุณ:\n\n$3\n\nถ้าบัญชีผู้ใช้นี้*ไม่*ได้เป็นของคุณ กรุณากดลิงก์ด้านล่างเพื่อยกเลิกการยืนยันที่อยู่อีเมล\n\n$5\n\nรหัสยืนยันนี้จะหมดอายุเมื่อ $4",
"confirmemail_body_set": "ใครสักคนจากที่อยู่ไอพี $1 ซึ่งอาจเป็นคุณ\nได้กำหนดที่อยู่อีเมลของบัญชี \"$2\" บน {{SITENAME}} มายังที่อยู่อีเมลนี้\n\nเพื่อยืนยันว่าบัญชีนี้เป็นของคุณจริง ๆ\nและเปิดใช้งานคุณสมบัติอีเมลบน {{SITENAME}} อีกครั้ง\nให้เปิดลิงก์ต่อไปนี้ในเบราว์เซอร์ของคุณ:\n\n$3\n\nหากบัญชีดังกล่าว *ไม่ใช่* ของคุณ\nให้เปิดลิงก์ต่อไปนี้เพื่อยกเลิกการยืนยันที่อยู่อีเมล:\n\n$5\n\nรหัสยืนยันนี้จะหมดอายุเมื่อ $4",
- "confirmemail_invalidated": "การยืนยันทางอีเมลได้ถูกยกเลิกแล้ว",
- "invalidateemail": "ยกเลิกการยืนยันทางอีเมล",
+ "confirmemail_invalidated": "ยกเลิกการยืนยันที่อยู่อีเมลแล้ว",
+ "invalidateemail": "ยกเลิกการยืนยันอีเมล",
"scarytranscludedisabled": "[ส่งค่าของอินเตอร์วิกิถูกระงับ]",
"scarytranscludefailed": "[ไม่สามารถดึงแม่แบบมาได้สำหรับ $1]",
- "scarytranscludetoolong": "[ที่อยู่เว็บไซต์ยาวเกินไป]",
- "deletedwhileediting": "'''คำเตือน''': หน้านี้ถูกลบไปแล้วในขณะที่คุณกำลังแก้ไข!",
- "confirmrecreate": "ผู้ใช้ [[User:$1|$1]] ([[User talk:$1|พูดคุย]]) ได้ลบหน้านี้ในช่วงที่คุณกำลังแก้ไข ด้วยเหตุผลว่า:\n: ''$2''\nกรุณายืนยันว่าต้องการสร้างหน้านี้ขึ้นมาใหม่",
+ "scarytranscludetoolong": "[ยูอาร์แอลยาวเกินไป]",
+ "deletedwhileediting": "<strong>คำเตือน:</strong> หน้านี้ถูกลบหลังคุณเริ่มแก้ไข!",
+ "confirmrecreate": "ผู้ใช้ [[User:$1|$1]] ([[User talk:$1|พูดคุย]]) ลบหน้านี้หลังคุณเริ่มแก้ไข ด้วยเหตุผลว่า:\n: <em>$2</em>\nกรุณายืนยันว่า คุณต้องการสร้างหน้านี้ใหม่",
"confirmrecreate-noreason": "ผู้ใช้ [[User:$1|$1]] ([[User talk:$1|พูดคุย]]) ลบหน้านี้หลังคุณเริ่มแก้ไข โปรดยืนยันว่าคุณต้องการสร้างหน้านี้ใหม่จริง ๆ",
"recreate": "สร้างใหม่",
"confirm_purge_button": "ตกลง",
@@ -2630,9 +2654,9 @@
"imgmultipageprev": "← หน้าก่อนหน้า",
"imgmultipagenext": "หน้าถัดไป →",
"imgmultigo": "ไป!",
- "imgmultigoto": "ไปที่หน้า $1",
- "ascending_abbrev": "หน้าไปหลัง",
- "descending_abbrev": "หลังมาหน้า",
+ "imgmultigoto": "ไปหน้า $1",
+ "ascending_abbrev": "ลำดับขึ้น",
+ "descending_abbrev": "ลำดับลง",
"table_pager_next": "หน้าถัดไป",
"table_pager_prev": "หน้าก่อนหน้า",
"table_pager_first": "หน้าแรก",
@@ -2640,11 +2664,11 @@
"table_pager_limit": "แสดง $1 รายการต่อหน้า",
"table_pager_limit_label": "รายการต่อหน้า:",
"table_pager_limit_submit": "ค้นหา",
- "table_pager_empty": "ไม่พบที่ต้องการ",
+ "table_pager_empty": "ไม่มีผลลัพธ์",
"autosumm-blank": "ทำหน้าว่าง",
- "autosumm-replace": "แทนที่ข้อความทั้งหมดด้วย '$1'",
- "autoredircomment": "เปลี่ยนทางไปที่ [[$1]]",
- "autosumm-new": "หน้าที่ถูกสร้างด้วย '$1'",
+ "autosumm-replace": "แทนที่เนื้อหาด้วย \"$1\"",
+ "autoredircomment": "เปลี่ยนทางหน้าไป [[$1]]",
+ "autosumm-new": "สร้างหน้าด้วย \"$1\"",
"autosumm-newblank": "สร้างหน้าว่าง",
"size-bytes": "$1 ไบต์",
"size-kilobytes": "$1 กิโลไบต์",
@@ -2664,8 +2688,8 @@
"bitrate-exabits": "$1 เอกซะบิตต่อวินาที",
"bitrate-zetabits": "$1 เซตตะบิตต่อวินาที",
"bitrate-yottabits": "$1 ยอตตะบิตต่อวินาที",
- "lag-warn-normal": "การปรับปรุงที่ใหม่กว่า $1 วินาที อาจไม่แสดงผลในรายการนี้",
- "lag-warn-high": "เนื่องจากปัญหาการล่าช้าของเซิร์ฟเวอร์ฐานข้อมูล การปรับปรุงที่ใหม่กว่า $1 วินาที อาจไม่แสดงผลในรายการนี้",
+ "lag-warn-normal": "การปรับปรุงที่ใหม่กว่า $1 วินาที อาจไม่แสดงในรายการนี้",
+ "lag-warn-high": "เนื่องจากปัญหาการล่าช้าของเซิร์ฟเวอร์ฐานข้อมูล การปรับปรุงที่ใหม่กว่า $1 วินาทีอาจไม่แสดงในรายการนี้",
"watchlistedit-normal-title": "แก้ไขรายการเฝ้าดู",
"watchlistedit-normal-legend": "ลบชื่อเรื่องออกจากรายการเฝ้าดู",
"watchlistedit-normal-explain": "ชื่อเรื่องในรายการเฝ้าดูของคุณแสดงด้านล่าง \nถ้าต้องการลบออก ให้คลิกเลือกที่กล่องด้านข้างแต่ละชื่อ และคลิก \"{{int:Watchlistedit-normal-submit}}\" \nหรืออาจจะ[[Special:EditWatchlist/raw|แก้ไขรายการทั้งหมด]]",
@@ -2675,47 +2699,47 @@
"watchlistedit-raw-legend": "แก้ไขรายการเฝ้าดูทั้งหมด",
"watchlistedit-raw-explain": "ชื่อเรื่องในรายการเฝ้าดูของคุณแสดงด้านล่าง ซึ่งสามารถเพิ่มหรือนำออกได้ หนึ่งชื่อเรื่องต่อแถว \nเมื่อเสร็จแล้ว ให้กด \"{{int:Watchlistedit-raw-submit}}\" \nซึ่งอาจแก้ไขผ่าน [[Special:EditWatchlist|โปรแกรมแก้ไขข้อความทั่วไป]]",
"watchlistedit-raw-titles": "ชื่อเรื่อง:",
- "watchlistedit-raw-submit": "ปรับปรุงรายการเฝ้าดู",
- "watchlistedit-raw-done": "รายการเฝ้าดูของคุณได้ปรับแล้ว",
- "watchlistedit-raw-added": "$1 ชื่อเรื่องได้ถูกเพิ่มเข้าไป:",
- "watchlistedit-raw-removed": "$1 ชื่อเรื่องได้ถูกนำออกไป:",
+ "watchlistedit-raw-submit": "ปรับรายการเฝ้าดู",
+ "watchlistedit-raw-done": "ปรับรายการเฝ้าดูของคุณแล้ว",
+ "watchlistedit-raw-added": "เพิ่ม $1 ชื่อเรื่อง:",
+ "watchlistedit-raw-removed": "ลบ $1 ชื่อเรื่อง:",
"watchlistedit-clear-title": "ล้างรายการเฝ้าดู",
"watchlistedit-clear-legend": "ล้างรายการเฝ้าดู",
- "watchlistedit-clear-explain": "ชื่อเรื่องทั้งหมดจะถูกนำออกจากรายการเฝ้าดูของคุณ",
+ "watchlistedit-clear-explain": "ลบชื่อเรื่องทั้งหมดจากรายการเฝ้าดูของคุณ",
"watchlistedit-clear-titles": "ชื่อเรื่อง:",
"watchlistedit-clear-submit": "ล้างรายการเฝ้าดู (เป็นการถาวร!)",
"watchlistedit-clear-done": "ล้างรายการเฝ้าดูของคุณแล้ว",
- "watchlistedit-clear-removed": "$1 ชื่อเรื่องถูกนำออก:",
- "watchlistedit-too-many": "มีหน้ามากเกินไปที่จะแสดงผลที่นี่",
+ "watchlistedit-clear-removed": "ลบ $1 ชื่อเรื่อง:",
+ "watchlistedit-too-many": "มีหน้ามากเกินแสดงที่นี่",
"watchlisttools-clear": "ล้างรายการเฝ้าดู",
"watchlisttools-view": "ดูการเปลี่ยนแปลงที่เกี่ยวข้อง",
"watchlisttools-edit": "ดูและแก้ไขรายการเฝ้าดู",
"watchlisttools-raw": "แก้ไขรายการเฝ้าดูทั้งหมด",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|พูดคุย]])",
- "unknown_extension_tag": "ไม่รู้จัก tag ส่วนขยาย (extension tag) \"$1\"",
- "duplicate-defaultsort": "คำเตือน: หลักเรียงลำดับปริยาย \"$2\" ได้ลบล้างหลักเรียงลำดับปริยาย \"$1\" ที่มีอยู่ก่อนหน้า",
- "version": "รุ่นซอฟต์แวร์",
+ "duplicate-defaultsort": "<strong>คำเตือน:</strong> หลักเรียงลำดับปริยาย \"$2\" ได้ลบล้างหลักเรียงลำดับปริยาย \"$1\" ที่มีอยู่ก่อนหน้า",
+ "version": "รุ่น",
"version-extensions": "ส่วนขยายเพิ่ม (extension) ที่ติดตั้ง",
- "version-skins": "รูปลักษณ์ที่ติดตั้ง",
+ "version-skins": "หน้าตาที่ติดตั้ง",
"version-specialpages": "หน้าพิเศษ",
- "version-parserhooks": "ฮุกที่มีการพาร์สค่า",
+ "version-parserhooks": "ฮุกตัวแจงส่วน",
"version-variables": "ตัวแปร",
"version-antispam": "การป้องกันสแปม",
- "version-other": "อื่นๆ",
- "version-mediahandlers": "ตัวจัดการเกี่ยวกับสื่อ (media handler)",
+ "version-other": "อื่น ๆ",
+ "version-mediahandlers": "ตัวจัดการสื่อ",
"version-hooks": "ฮุก",
- "version-parser-extensiontags": "แท็กที่มีการใช้งานของพาร์สเซอร์",
- "version-parser-function-hooks": "ฮุกที่มีฟังก์ชันพาร์สเซอร์",
+ "version-parser-extensiontags": "ป้ายระบุส่วนขยายตัวแจงส่วน",
+ "version-parser-function-hooks": "ฮุกที่มีฟังก์ชันตัวแจงส่วน",
"version-hook-name": "ชื่อฮุก",
"version-hook-subscribedby": "สนับสนุนโดย",
- "version-version": "(รุ่น $1)",
+ "version-version": "($1)",
+ "version-no-ext-name": "[ไม่มีชื่อ]",
"version-license": "สัญญาอนุญาตมีเดียวิกิ",
"version-poweredby-credits": "วิกินี้จัดทำโดย '''[https://www.mediawiki.org/ MediaWiki]''', สงวนลิขสิทธิ์ © 2001-$1 โดย $2",
"version-poweredby-others": "ผู้อื่น",
"version-poweredby-translators": "ผู้แปล translatewiki.net",
"version-license-info": "มีเดียวิกิเป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่าย และ/หรือ แก้ไขได้ภายใต้เงื่อนไขแห่งสัญญาอนุญาตสาธารณะทั่วไปของกนูตามที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ไม่ว่ารุ่นที่ 2 แห่งสัญญาอนุญาต หรือรุ่นภายหลังอื่นใด (ตามที่คุณเลือก)\n\nมีเดียวิกิมีถูกแจกจ่ายด้วยหวังว่าจะเป็นประโยชน์ แต่ไม่มีการรับประกันใด ๆ ทั้งสิ้น ไม่มีแม้การรับประกันโดยนัยเพื่อการค้า หรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดูรายละเอียดเพิ่มเติมที่สัญญาอนุญาตสาธารณะทั่วไปของกนู\n\nคุณควรได้รับ[{{SERVER}}{{SCRIPTPATH}}/COPYING สำเนาของสัญญาอนุญาตสาธารณะทั่วไปของกนู]พร้อมกับโปรแกรมนี้ หากไม่พบ กรุณาเขียนจดหมายถึงบริษัทมูลนิธิซอฟต์แวร์เสรี ที่อยู่ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA หรือ[//www.gnu.org/licenses/old-licenses/gpl-2.0.html อ่านออนไลน์]",
"version-software": "ซอฟต์แวร์ที่ติดตั้ง",
- "version-software-product": "ชื่อ",
+ "version-software-product": "ผลิตภัณฑ์",
"version-software-version": "รุ่น",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath เส้นทางบทความ]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath เส้นทางสคริปต์]",
@@ -2727,14 +2751,14 @@
"redirect-value": "ค่า:",
"redirect-user": "รหัสผู้ใช้",
"redirect-page": "รหัสประจำหน้า",
- "redirect-revision": "รุ่นหน้า",
+ "redirect-revision": "รุ่นปรับปรุงหน้า",
"redirect-file": "ชื่อไฟล์",
"redirect-not-exists": "ไม่พบค่า",
- "fileduplicatesearch": "ค้นหาไฟล์ที่ซ้ำซ้อน",
- "fileduplicatesearch-summary": "ค้นหาไฟล์ที่ซ้ำกันตามค่าแฮช",
+ "fileduplicatesearch": "ค้นหาไฟล์ซ้ำซ้อน",
+ "fileduplicatesearch-summary": "ค้นหาไฟล์ซ้ำกันตามค่าแฮช",
"fileduplicatesearch-legend": "ค้นหาไฟล์ที่ซ้ำกัน",
"fileduplicatesearch-filename": "ชื่อไฟล์ :",
- "fileduplicatesearch-submit": "สืบค้น",
+ "fileduplicatesearch-submit": "ค้นหา",
"fileduplicatesearch-info": "$1 × $2 พิกเซล<br />ขนาดไฟล์: $3<br />ชนิดของไมม์: $4",
"fileduplicatesearch-result-1": "ไม่มีไฟล์ที่ซ้ำกับไฟล์ \"$1\"",
"fileduplicatesearch-result-n": "มี {{PLURAL:$2|ไฟล์เดียว|$2 ไฟล์}}ที่ซ้ำกับไฟล์ \"$1\"",
@@ -2742,18 +2766,19 @@
"specialpages": "หน้าพิเศษ",
"specialpages-note-top": "คำอธิบายสัญลักษณ์",
"specialpages-note": "* หน้าพิเศษปกติ\n* <span class=\"mw-specialpagerestricted\">หน้าพิเศษที่ถูกจำกัด</span>",
- "specialpages-group-maintenance": "รายงานการเก็บกวาด",
+ "specialpages-group-maintenance": "รายงานการบำรุงรักษา",
"specialpages-group-other": "หน้าพิเศษอื่น ๆ",
"specialpages-group-login": "ล็อกอิน / สร้างบัญชี",
- "specialpages-group-changes": "ปรับปรุงล่าสุดและปูมต่าง ๆ",
- "specialpages-group-media": "รายงานเรื่องสื่อและการอัปโหลด",
+ "specialpages-group-changes": "ปรับปรุงล่าสุดและปูม",
+ "specialpages-group-media": "รายงานสื่อและการอัปโหลด",
"specialpages-group-users": "ผู้ใช้และสิทธิ",
"specialpages-group-highuse": "หน้าที่มีการใช้งานสูง",
- "specialpages-group-pages": "รายชื่อหน้า",
- "specialpages-group-pagetools": "เครื่องมือเกี่ยวกับหน้าต่าง ๆ",
+ "specialpages-group-pages": "รายการหน้า",
+ "specialpages-group-pagetools": "เครื่องมือหน้า",
"specialpages-group-wiki": "ข้อมูลและเครื่องมือ",
"specialpages-group-redirects": "เปลี่ยนทางหน้าพิเศษ",
- "specialpages-group-spam": "เครื่องมือเกี่ยวกับสแปม",
+ "specialpages-group-spam": "เครื่องมือสแปม",
+ "specialpages-group-developer": "เครื่องมือผู้พัฒนา",
"blankpage": "หน้าว่าง",
"intentionallyblankpage": "หน้านี้ถูกทิ้งว่างโดยเจตนา",
"external_image_whitelist": " #เว้นบรรทัดนี้ไว้จากการแก้ไข<pre>\n#ใส่คำอธิบายปกติ (เฉพาะในส่วนที่อยู่ระหว่างสัญลักษณ์ //) ด้านล่างนี้\n#ซึ่งคำอธิบายดังกล่าวจะถูกจับคู่กับ URL ของรูปถ่ายภายนอก\n#ถ้าตรงกันจะปรากฏเป็นภาพออกมา หรือมิเช่นนั้นจะปรากฏเป็นลิงก์ไปยังรูปภาพนั้น\n#บรรทัดที่ขึ้นต้นด้วย # จะถูกกำหนดเป็นหมายเหตุเพิ่มเติม\n#กรุณาพิมพ์ตัวพิมพ์เล็ก-ใหญ่ตามชื่อไฟล์ให้ตรงกัน\n\n#ใส่ส่วนของคำอธิบายด้านบนของบรรทัดนี้และเว้นบรรทัดนี้จากการแก้ไข</pre>",
@@ -2783,8 +2808,8 @@
"compare-revision-not-exists": "รุ่นที่คุณระบุไม่มีอยู่",
"dberr-problems": "ขออภัย เว็บไซต์นี้กำลังพบกับข้อผิดพลาดทางเทคนิค",
"dberr-again": "กรุณารอสักครู่แล้วจึงโหลดใหม่",
- "dberr-info": "(ไม่สามารถติดต่อเซิร์ฟเวอร์ฐานข้อมูลได้: $1)",
- "dberr-info-hidden": "(ไม่สามารถติดต่อเซิร์ฟเวอร์ฐานข้อมูล)",
+ "dberr-info": "(ไม่สามารถเข้าถึงฐานข้อมูล: $1)",
+ "dberr-info-hidden": "(ไม่สามารถเข้าถึงฐานข้อมูล)",
"dberr-usegoogle": "คุณสามารถลองสืบค้นผ่านกูเกิลในระหว่างนี้",
"dberr-outofdate": "โปรดทราบว่าดัชนีเนื้อหาของเราในกูเกิลอาจล้าสมัยแล้ว",
"dberr-cachederror": "นี่คือข้อมูลคัดลอกชั่วคราวของหน้าที่ร้องขอ และอาจไม่เป็นปัจจุบัน",
@@ -2822,14 +2847,20 @@
"revdelete-uname-unhid": "ชื่อผู้ใช้ถูกแสดง",
"revdelete-restricted": "เพิ่มการจำกัดกับผู้ดูแลระบบ",
"revdelete-unrestricted": "ยกเลิกการจำกัดแก่ผู้ดูแลระบบ",
+ "logentry-block-block": "$1 บล็อก $3 โดยมีเวลาหมดอายุเมื่อ $5 $6",
+ "logentry-block-unblock": "$1 ปลดบล็อก $3",
+ "logentry-block-reblock": "$1 เปลี่ยนการตั้งค่าการบล็อกสำหรับ $3 โดยมีเวลาหมดอายุเมื่อ $5 $6",
+ "logentry-suppress-block": "$1 บล็อก $3 โดยมีเวลาหมดอายุเมื่อ $5 $6",
+ "logentry-suppress-reblock": "$1 เปลี่ยนการตั้งค่าการบล็อกสำหรับ $3 โดยมีเวลาหมดอายุเมื่อ $5 $6",
+ "logentry-merge-merge": "$1 {{GENDER:$2|รวม}} $3 เข้ากับ $4 (รุ่นถึง $5)",
"logentry-move-move": "$1 ย้ายหน้า $3 ไปยัง $4",
"logentry-move-move-noredirect": "$1 ย้ายหน้า $3 ไปยัง $4 โดยไม่สร้างหน้าเปลี่ยนทางตามมา",
"logentry-move-move_redir": "$1 ย้ายหน้า $3 ไปยัง $4 ทับหน้าเปลี่ยนทาง",
"logentry-move-move_redir-noredirect": "$1 ย้ายหน้า $3 ไปยัง $4 ทับหน้าเปลี่ยนทาง โดยไม่สร้างหน้าเปลี่ยนทางตามมา",
"logentry-patrol-patrol": "$1 ทำเครื่องหมายว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว",
"logentry-patrol-patrol-auto": "$1 ทำเครื่องหมายโดยอัตโนมัติว่ารุ่น $4 ของหน้า $3 ได้รับการตรวจสอบแล้ว",
- "logentry-newusers-newusers": "บัญชีผู้ใช้ $1 ถูกสร้างขึ้น",
- "logentry-newusers-create": "บัญชีผู้ใช้ $1 ถูกสร้างขึ้น",
+ "logentry-newusers-newusers": "บัญชีผู้ใช้ $1 ถูกสร้าง",
+ "logentry-newusers-create": "บัญชีผู้ใช้ $1 ถูกสร้าง",
"logentry-newusers-create2": "บัญชีผู้ใช้ $3 ถูกสร้างขึ้นโดย $1",
"logentry-newusers-byemail": "บัญชีผู้ใช้ $3 ถูกสร้างขึ้นโดย $1 และส่งรหัสผ่านไปทางอีเมลแล้ว",
"logentry-newusers-autocreate": "บัญชีผู้ใช้ $1 ถูกสร้างขึ้นอัตโนมัติ",
@@ -2840,18 +2871,19 @@
"logentry-upload-overwrite": "$1 อัปโหลดรุ่นใหม่ของ $3",
"logentry-upload-revert": "$1 อัปโหลด $3",
"rightsnone": "(ไม่มี)",
- "feedback-bugornote": "หากคุณได้อธิบายปัญหาทางเทคนิคในรายละเอียดแล้ว โปรด[$1 รายงานจุดบกพร่อง]\nมิฉะนั้น คุณสามารถแบบอย่างง่ายด้านล่าง ความเห็นของคุณจะถูกเพิ่มเข้าสู่ \"[$3 $2]\" ร่วมกับชื่อผู้ใช้ของคุณ",
- "feedback-subject": "เรื่อง:",
- "feedback-message": "ข้อความ:",
- "feedback-cancel": "ยกเลิก",
- "feedback-submit": "ส่งคำติชม",
+ "revdelete-summary": "คำอธิบายโดยย่อ",
"feedback-adding": "เพิ่มคำติชมเข้าไปที่หน้า...",
- "feedback-thanks": "ขอบคุณ! ผลป้อนกลับของคุณถูกโพสต์ไปยังหน้า \"[$2 $1]\" แล้ว",
- "feedback-close": "เสร็จสิ้น",
"feedback-bugcheck": "ยอดเยี่ยม! เพียงตรวจสอบว่าจุดบกพร่องนั้นมิใช่หนึ่งใน[$1 จุดบกพร่องที่ทราบแล้ว]",
"feedback-bugnew": "ฉันตรวจสอบแล้ว รายงานจุดบกพร่องใหม่",
+ "feedback-bugornote": "หากคุณได้อธิบายปัญหาทางเทคนิคในรายละเอียดแล้ว โปรด[$1 รายงานจุดบกพร่อง]\nมิฉะนั้น คุณสามารถแบบอย่างง่ายด้านล่าง ความเห็นของคุณจะถูกเพิ่มเข้าสู่ \"[$3 $2]\" ร่วมกับชื่อผู้ใช้ของคุณ",
+ "feedback-cancel": "ยกเลิก",
+ "feedback-close": "เสร็จสิ้น",
+ "feedback-message": "ข้อความ:",
+ "feedback-subject": "เรื่อง:",
+ "feedback-submit": "ตกลง",
+ "feedback-thanks": "ขอบคุณ! ผลป้อนกลับของคุณถูกโพสต์ไปยังหน้า \"[$2 $1]\" แล้ว",
"searchsuggest-search": "ค้นหา",
- "searchsuggest-containing": "ประกอบไปด้วย...",
+ "searchsuggest-containing": "มี...",
"api-error-badaccess-groups": "คุณไม่ได้รับอนุญาตให้อัปโหลดไฟล์มายังวิกินี้",
"api-error-empty-file": "ไฟล์ที่คุณส่งมานั้นว่าง",
"api-error-emptypage": "ไม่อนุญาตให้สร้างหน้าใหม่ที่ว่าง",
@@ -2869,6 +2901,7 @@
"duration-decades": "$1 ทศวรรษ",
"duration-centuries": "$1 ศตวรรษ",
"duration-millennia": "$1 สหัสวรรษ",
+ "expandtemplates": "ขยายแม่แบบ",
"expand_templates_output": "ผลลัพธ์",
"expand_templates_ok": "ตกลง",
"expand_templates_remove_comments": "นำส่วนความเห็นออก",
@@ -2884,5 +2917,27 @@
"log-description-pagelang": "นี่คือปูมการเปลี่ยนภาษาหน้า",
"logentry-pagelang-pagelang": "$1 เปลี่ยนภาษาของ $3 จาก $4 เป็น $5",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (เปิดใช้งาน)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ปิดใช้งาน''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ปิดใช้งาน''')",
+ "mediastatistics": "สถิติสื่อ",
+ "mediastatistics-summary": "สถิติเกี่ยวกับประเภทไฟล์ที่อัปโหลด ซึ่งรวมเฉพาะรุ่นล่าสุดของไฟล์นั้น \nไม่รวมไฟล์รุ่นเก่าหรือที่ถูกลบแล้ว",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 ไบต์}} ($2; $3%)",
+ "mediastatistics-table-count": "จำนวนไฟล์",
+ "mediastatistics-table-totalbytes": "ขนาดรวม",
+ "mediastatistics-header-unknown": "ไม่ทราบ",
+ "mediastatistics-header-drawing": "ภาพวาดเส้น (ภาพเวกเตอร์)",
+ "mediastatistics-header-audio": "เสียง",
+ "mediastatistics-header-video": "วิดีทัศน์",
+ "headline-anchor-title": "โยงมาส่วนนี้",
+ "special-characters-group-latin": "ละติน",
+ "special-characters-group-latinextended": "ละตินส่วนขยาย",
+ "special-characters-group-ipa": "สัทอักษรสากล",
+ "special-characters-group-symbols": "สัญลักษณ์",
+ "special-characters-group-greek": "กรีก",
+ "special-characters-group-cyrillic": "ซีริลลิก",
+ "special-characters-group-arabic": "อาหรับ",
+ "special-characters-group-hebrew": "ฮีบรู",
+ "special-characters-group-bangla": "บังคลา",
+ "special-characters-group-telugu": "เตลูกู",
+ "special-characters-group-sinhala": "สิงหล",
+ "special-characters-group-gujarati": "คุชราต"
}
diff --git a/languages/i18n/ti.json b/languages/i18n/ti.json
index e1c5fba3..928f728b 100644
--- a/languages/i18n/ti.json
+++ b/languages/i18n/ti.json
@@ -1,120 +1,118 @@
{
- "@metadata": {
- "authors": [
- "Blake",
- "Node ue",
- "Teak"
- ]
- },
- "underline-always": "ጥራይ",
- "underline-never": "ኣይትግበሩ",
- "sunday": "ሰንበት",
- "monday": "ሰኑይ",
- "tuesday": "ሰሉስ",
- "wednesday": "ረብዓ",
- "thursday": "ኃሙስ",
- "friday": "ዓርቢ",
- "saturday": "ቀዳም",
- "sun": "ሰንበ",
- "mon": "ሰኑይ",
- "tue": "ሠሉስ",
- "wed": "ረቡዕ",
- "thu": "ኃሙስ",
- "fri": "ዓርቢ",
- "sat": "ቀዳም",
- "january": "ትሪ",
- "february": "ለካቲት",
- "march": "መጋቢት",
- "april": "ሚያዝያ",
- "may_long": "ግንቦት",
- "june": "ሰነ",
- "july": "ሓምለ",
- "august": "ነሓሰ",
- "september": "መስከረም",
- "october": "ጥቅምቲ",
- "november": "ኅዳር",
- "december": "ታኅሣሥ",
- "jan": "ጃንዩ",
- "feb": "ፌብሩ",
- "mar": "ማርች",
- "apr": "ኤፕረ",
- "may": "ሜይ",
- "jun": "ጁን",
- "about": "ብዛዕባ ብጠቅላላ",
- "mypage": "ፅሑፈይ",
- "qbpageoptions": "ፅሑፍዚ",
- "qbmyoptions": "ፅሑፋተይ",
- "help": "ፍንጪ",
- "search": "ድሉይ",
- "searchbutton": "ድሉይ",
- "history": "ናይ ፅሑፍ ታሪኽ",
- "history_short": "ታሪኽ",
- "newpage": "ሓዳስ ፅሑፍ",
- "jumptosearch": "ድሉይ",
- "aboutsite": "ብዛዕባ ዊኪፒዲያ ብጠቅላላ",
- "mainpage": "መበገሲ ገጽ",
- "mainpage-description": "መበገሲ ገጽ",
- "nstab-main": "ፅሑፍ",
- "nstab-user": "ናይ ፅሑፍ ኣባል",
- "nstab-project": "ናይ ፅሑፍ ፕሮጀክት",
- "nstab-image": "ምስሊ",
- "yourname": "ናይ ኣባል ሽም:",
- "loginlanguagelabel": "ቋንቋ: $1",
- "savearticle": "ፅሑፍ ኣቐምጥ",
- "newarticle": "(ሓዳስ)",
- "next": "ዝቕጽል",
- "historysize": "($1 {{PLURAL:$1|ባይታት|ባይታት}})",
- "prevn": "ናይ ቀደም {{PLURAL:$1|$1}}",
- "nextn": "ዝቕጽል {{PLURAL:$1|$1}}",
- "preferences": "ኣማረጽቲ",
- "mypreferences": "ናተይ ኣማረጽቲ",
- "saveprefs": "ኣቐምጥ",
- "searchresultshead": "ድሉይ",
- "savedprefs": "ዘቕረብኩሞ መርኣይ ብትክክል ተቀሚጡ ኣሎ።",
- "prefs-files": "ምስልታት",
- "youremail": "ኢ-መይል:",
- "yourlanguage": "ቋንቋ:",
- "email": "ኢ-መይል",
- "group": "ብሓበር:",
- "group-sysop": "ሲሶፓት",
- "group-sysop-member": "{{GENDER:$1|ሲሶፕ}}",
- "hist": "ታሪኽ",
- "newpageletter": "ሓ",
- "savefile": "ምስሊ ኣቐምጥ",
- "imgfile": "ምስሊ",
- "listfiles": "ምስልታት",
- "listfiles_name": "ሽም",
- "listfiles_user": "ኣባል",
- "file-anchor-link": "ምስሊ",
- "nbytes": "$1 {{PLURAL:$1|ባይት|ባይታት}}",
- "longpages": "ነዋሕቲ ፅሑፋት",
- "listusers": "ኣባላት",
- "newpages": "ሓደሽቲ ዛዕባታት",
- "newpages-username": "ናይ ኣባል ሽም:",
- "booksources-go": "ኪድ",
- "specialloguserlabel": "ኣባል:",
- "alphaindexline": "$1 ናብ $2",
- "nextpage": "ዝቕጽል ፅሑፍ ($1)",
- "prevpage": "ናይ ቀደም ፅሑፍ ($1)",
- "allarticles": "ኵሎም ፅሑፋት",
- "allpagessubmit": "ኪድ",
- "pagesize": "(ባይታት)",
- "undelete-search-submit": "ድሉይ",
- "contribsub2": "ን$1 ($2)",
- "sp-contributions-submit": "ድሉይ",
- "ipblocklist-submit": "ድሉይ",
- "allmessagesname": "ሽም",
- "tooltip-pt-preferences": "ናተይ ኣማረጽቲ",
- "ilsubmit": "ድሉይ",
- "metadata": "ሜታዳታ",
- "imgmultipageprev": "← ናይ ቀደም ፅሑፍ",
- "imgmultipagenext": "ዝቕጽል ፅሑፍ →",
- "table_pager_next": "ዝቕጽል ፅሑፍ",
- "table_pager_prev": "ናይ ቀደም ፅሑፍ",
- "table_pager_limit_submit": "ኪድ",
- "autosumm-new": "ሓዳስ ፅሑፍ: $1",
- "size-bytes": "$1 ባይታት",
- "size-kilobytes": "$1 ኪሎባይታት",
- "size-megabytes": "$1 ሜጋባይታት",
- "size-gigabytes": "$1 ጊጋባይታት"
+ "@metadata": {
+ "authors": [
+ "Blake",
+ "Node ue",
+ "Teak"
+ ]
+ },
+ "underline-always": "ጥራይ",
+ "underline-never": "ኣይትግበሩ",
+ "sunday": "ሰንበት",
+ "monday": "ሰኑይ",
+ "tuesday": "ሰሉስ",
+ "wednesday": "ረብዓ",
+ "thursday": "ኃሙስ",
+ "friday": "ዓርቢ",
+ "saturday": "ቀዳም",
+ "sun": "ሰንበ",
+ "mon": "ሰኑይ",
+ "tue": "ሠሉስ",
+ "wed": "ረቡዕ",
+ "thu": "ኃሙስ",
+ "fri": "ዓርቢ",
+ "sat": "ቀዳም",
+ "january": "ትሪ",
+ "february": "ለካቲት",
+ "march": "መጋቢት",
+ "april": "ሚያዝያ",
+ "may_long": "ግንቦት",
+ "june": "ሰነ",
+ "july": "ሓምለ",
+ "august": "ነሓሰ",
+ "september": "መስከረም",
+ "october": "ጥቅምቲ",
+ "november": "ኅዳር",
+ "december": "ታኅሣሥ",
+ "jan": "ጃንዩ",
+ "feb": "ፌብሩ",
+ "mar": "ማርች",
+ "apr": "ኤፕረ",
+ "may": "ሜይ",
+ "jun": "ጁን",
+ "about": "ብዛዕባ ብጠቅላላ",
+ "mypage": "ፅሑፈይ",
+ "qbpageoptions": "ፅሑፍዚ",
+ "qbmyoptions": "ፅሑፋተይ",
+ "help": "ፍንጪ",
+ "search": "ድሉይ",
+ "searchbutton": "ድሉይ",
+ "history": "ናይ ፅሑፍ ታሪኽ",
+ "history_short": "ታሪኽ",
+ "newpage": "ሓዳስ ፅሑፍ",
+ "jumptosearch": "ድሉይ",
+ "aboutsite": "ብዛዕባ ዊኪፒዲያ ብጠቅላላ",
+ "mainpage": "መበገሲ ገጽ",
+ "mainpage-description": "መበገሲ ገጽ",
+ "nstab-main": "ፅሑፍ",
+ "nstab-user": "ናይ ፅሑፍ ኣባል",
+ "nstab-project": "ናይ ፅሑፍ ፕሮጀክት",
+ "nstab-image": "ምስሊ",
+ "yourname": "ናይ ኣባል ሽም:",
+ "loginlanguagelabel": "ቋንቋ: $1",
+ "savearticle": "ፅሑፍ ኣቐምጥ",
+ "newarticle": "(ሓዳስ)",
+ "next": "ዝቕጽል",
+ "historysize": "($1 {{PLURAL:$1|ባይታት|ባይታት}})",
+ "prevn": "ናይ ቀደም {{PLURAL:$1|$1}}",
+ "nextn": "ዝቕጽል {{PLURAL:$1|$1}}",
+ "preferences": "ኣማረጽቲ",
+ "mypreferences": "ናተይ ኣማረጽቲ",
+ "saveprefs": "ኣቐምጥ",
+ "searchresultshead": "ድሉይ",
+ "savedprefs": "ዘቕረብኩሞ መርኣይ ብትክክል ተቀሚጡ ኣሎ።",
+ "prefs-files": "ምስልታት",
+ "youremail": "ኢ-መይል:",
+ "yourlanguage": "ቋንቋ:",
+ "email": "ኢ-መይል",
+ "group": "ብሓበር:",
+ "group-sysop": "ሲሶፓት",
+ "group-sysop-member": "{{GENDER:$1|ሲሶፕ}}",
+ "hist": "ታሪኽ",
+ "newpageletter": "ሓ",
+ "savefile": "ምስሊ ኣቐምጥ",
+ "imgfile": "ምስሊ",
+ "listfiles": "ምስልታት",
+ "listfiles_name": "ሽም",
+ "listfiles_user": "ኣባል",
+ "file-anchor-link": "ምስሊ",
+ "nbytes": "$1 {{PLURAL:$1|ባይት|ባይታት}}",
+ "longpages": "ነዋሕቲ ፅሑፋት",
+ "listusers": "ኣባላት",
+ "newpages": "ሓደሽቲ ዛዕባታት",
+ "newpages-username": "ናይ ኣባል ሽም:",
+ "specialloguserlabel": "ኣባል:",
+ "nextpage": "ዝቕጽል ፅሑፍ ($1)",
+ "prevpage": "ናይ ቀደም ፅሑፍ ($1)",
+ "allarticles": "ኵሎም ፅሑፋት",
+ "allpagessubmit": "ኪድ",
+ "pagesize": "(ባይታት)",
+ "undelete-search-submit": "ድሉይ",
+ "contribsub2": "ን$1 ($2)",
+ "sp-contributions-submit": "ድሉይ",
+ "ipblocklist-submit": "ድሉይ",
+ "allmessagesname": "ሽም",
+ "tooltip-pt-preferences": "ናተይ ኣማረጽቲ",
+ "ilsubmit": "ድሉይ",
+ "metadata": "ሜታዳታ",
+ "imgmultipageprev": "← ናይ ቀደም ፅሑፍ",
+ "imgmultipagenext": "ዝቕጽል ፅሑፍ →",
+ "table_pager_next": "ዝቕጽል ፅሑፍ",
+ "table_pager_prev": "ናይ ቀደም ፅሑፍ",
+ "table_pager_limit_submit": "ኪድ",
+ "autosumm-new": "ሓዳስ ፅሑፍ: $1",
+ "size-bytes": "$1 ባይታት",
+ "size-kilobytes": "$1 ኪሎባይታት",
+ "size-megabytes": "$1 ሜጋባይታት",
+ "size-gigabytes": "$1 ጊጋባይታት"
}
diff --git a/languages/i18n/tk.json b/languages/i18n/tk.json
index 07d52127..ce14aea9 100644
--- a/languages/i18n/tk.json
+++ b/languages/i18n/tk.json
@@ -388,7 +388,6 @@
"changeemail-newemail": "Täze e-poçta adresi:",
"changeemail-none": "(hiç biri)",
"changeemail-submit": "E-poçtany üýtget",
- "changeemail-cancel": "Goýbolsun et",
"bold_sample": "Goýy tekst",
"bold_tip": "Goýy tekst",
"italic_sample": "Kursiw tekst",
@@ -619,7 +618,6 @@
"mergehistory-same-destination": "Çeşme we niýetlenilýän sahypalar birmeňzeş bolup bilmeýär",
"mergehistory-reason": "Sebäp:",
"mergelog": "Birleşdirme gündeligi",
- "pagemerge-logentry": "[[$1]] bilen [[$2]] birleşdirildi (şuňa çenliki wersiýalar: $3)",
"revertmerge": "Dargat",
"mergelogpagetext": "Aşakdaky sanaw sahypalaryň geçmişleriniň iň soňky birleşdirmelerini görkezýär.",
"history-title": "\"$1\" — sahypa geçmişi",
@@ -662,7 +660,6 @@
"searchrelated": "baglanyşykly",
"searchall": "ählisi",
"showingresults": "Aşakda №'''$2''' netijeden başlap, {{PLURAL:$1|'''1''' netije|'''$1''' netije}} görkezilýär.",
- "showingresultsheader": "'''$4''' hakda {{PLURAL:$5|'''$3''' netijeden '''$1''' sanysy|'''$3''' netijeden '''$1 - $2''' aralygy}}",
"search-nonefound": "Talaba gabat gelýän hiç hili netije ýok.",
"powersearch-legend": "Giňişleýin gözleg",
"powersearch-ns": "At giňişliklerinde gözleg:",
@@ -1128,7 +1125,6 @@
"statistics": "Statistika",
"statistics-header-pages": "Sahypa statistikalary",
"statistics-header-edits": "Özgerdiş statistikalary",
- "statistics-header-views": "Synlama statistikalary",
"statistics-header-users": "Ulanyjy statistikalary",
"statistics-header-hooks": "Başga statistikalar",
"statistics-articles": "Makalalar",
@@ -1137,12 +1133,9 @@
"statistics-files": "Ýüklenen faýllar",
"statistics-edits": "{{SITENAME}} gurulaly bäri edilen sahypa özgerdişleri",
"statistics-edits-average": "Sahypa başyna ortaça özgerdiş",
- "statistics-views-total": "Jemi synlama",
- "statistics-views-peredit": "Özgerdiş başyna synlama",
"statistics-users": "Hasaba alnan [[Special:ListUsers|ulanyjylar]]",
"statistics-users-active": "Işjeň ulanyjylar",
"statistics-users-active-desc": "Soňky {{PLURAL:$1|1 günde|$1 günde}} haýsydyr bir iş geçiren ulanyjylar",
- "statistics-mostpopular": "Iň köp görülýän sahypalar",
"doubleredirects": "Jübüt gönükdirmeler",
"doubleredirectstext": "Bu sahypa başga gönükdirme sahypalaryna gönükdirýän sahypalaryň sanawyny görkezýär.\nHer bir hatar birinji we ikinji gönükdirmeleri, şeýle-de ikinji gönükdirmäniň maksady bolup durýan hem-de şol bir wagtyň özünde birinji gönükdirmäniň adatça barmaly ýeri bolan \"hakyky\" maksat edinilýän sahypany öz içine alýar.\n<del>Üsti çyzylan</del> ýazgylar düzedilenlerdir.",
"double-redirect-fixed-move": "[[$1]] sahypasynyň ady üýtgedildi.\nOl indi [[$2]] sahypasyna gönükdirýär.",
@@ -1171,7 +1164,6 @@
"uncategorizedtemplates": "Kategoriýa goýulmadyk şablonlar",
"unusedcategories": "Ulanylmaýan kategoriýalar",
"unusedimages": "Ulanylmaýan faýllar",
- "popularpages": "Ýörgünli sahypalar",
"wantedcategories": "Talap edilýän kategoriýalar",
"wantedpages": "Talap edilýän sahypalar",
"wantedpages-badtitle": "Netijeler toplumyndaky nädogry at: $1",
@@ -1215,7 +1207,6 @@
"suppress": "Esewan",
"booksources": "Kitap çeşmeleri",
"booksources-search-legend": "Kitap çeşmelerini gözle",
- "booksources-go": "Git",
"booksources-text": "Aşakda täze hem-de ulanylan kitap satýan başga saýtlara çykgytlaryň sanawy görkezilýär, we olarda agtarýan kitabyňyz barada has köp maglumat bar bolmagy mümkin.",
"booksources-invalid-isbn": "Berlen ISBN dogry däl ýaly; asyl çeşmä seredip göçürme säwliklerini barlaň.",
"specialloguserlabel": "Ulanyjy:",
@@ -1319,7 +1310,7 @@
"wlheader-enotif": "E-poçta bilen habar beriş açyk.",
"wlheader-showupdated": "Soňky gezek baryp görenizden soňra üýtgedilen sahypalar '''goýy şrift''' bilen görkezilýär.",
"wlnote": "Aşakda soňky {{PLURAL:$2|bir sagatda|'''$2''' sagatda}} edilen {{PLURAL:$1|soňky üýtgeşme|soňky '''$1''' üýtgeşme}} görkezilýär.",
- "wlshowlast": "Soňky $1 sagady $2 güni görkez $3",
+ "wlshowlast": "Soňky $1 sagady $2 güni görkez",
"watchlist-options": "Gözegçilik sanawynyň opsiýalary",
"watching": "Gözegçilige alynýar...",
"unwatching": "Gözegçilikden aýyrylýar...",
@@ -1355,7 +1346,6 @@
"delete-toobig": "Bu sahypanyň $1 {{PLURAL:$1|wersiýadan|wersiýadan}} agdyk uly özgerdiş geçmişi bar.\n{{SITENAME}} saýtynyň atdanlykda bökdelmegine ýol bermezlik maksady bilen beýle sahypalaryň öçürilmegi çäklendirilýär.",
"delete-warning-toobig": "Bu sahypanyň $1 {{PLURAL:$1|wersiýadan|wersiýadan}} agdyk uly özgerdiş geçmişi bar.\nMuny öçürmek {{SITENAME}} maglumat bazasynyň amallaryna päsgel berip biler;\nseresaplyk bilen hereket ediň.",
"rollback": "Özgerdişleri öňki katdyna getir",
- "rollback_short": "Öňki katdyna getir",
"rollbacklink": "öňki katdyna getir",
"rollbackfailed": "Öňki katdyna getirmeklik şowsuz",
"cantrollback": "Özgerdişi yzyna getirip bolmaýar;\niň soňky goşant goşan ulanyjy bu sahypanyň ýeke-täk awtory bolup durýar.",
@@ -1682,7 +1672,6 @@
"import": "Sahypalary importirle",
"importinterwiki": "Wikiara importirleme",
"import-interwiki-text": "Importirlemek üçin biri wiki we sahypa adyny saýlaň.\nWersiýalaryň seneleri we awtorlaryň atlary saklanyljakdyr.\nÄhli wikiara importirleme amallary [[Special:Log/import|import gündeligine]] ýazylýar.",
- "import-interwiki-source": "Wiki çeşme/sahypa:",
"import-interwiki-history": "Bu sahypa üçin ähli geçmiş wersiýalary göçür",
"import-interwiki-templates": "Ähli şablonlary giriz",
"import-interwiki-submit": "Importirle",
@@ -2071,7 +2060,6 @@
"exif-gpsspeed-n": "Uzel (deňiz mili)",
"exif-gpsdirection-t": "Hakyky ugur",
"exif-gpsdirection-m": "Magnit ugur",
- "watchlistall2": "Ählisini görkez",
"namespacesall": "ählisi",
"monthsall": "ählisi",
"confirmemail": "E-poçta adresini tassykla",
@@ -2138,7 +2126,6 @@
"watchlisttools-view": "Degişli üýtgeşmeleri görkez",
"watchlisttools-edit": "Gözegçilik sanawyna göz aýla we redaktirle",
"watchlisttools-raw": "Işlenmedik gözegçilik sanawyny redaktirle",
- "unknown_extension_tag": "Näbelli giňeltme belligi \"$1\"",
"duplicate-defaultsort": "'''Duýduryş''': Gaýybana \"$2\" sortlaýyş açary mundan ozalky \"$1\" sortlaýyş açaryny aradan aýyrýar.",
"version": "Wersiýa",
"version-extensions": "Gurulgy giňeltmeler",
@@ -2152,7 +2139,7 @@
"version-parser-function-hooks": "Analizator funsiýasynyň ilgençekleri",
"version-hook-name": "Ilgençegiň ady",
"version-hook-subscribedby": "Abuna ýazylan",
- "version-version": "(Wersiýa $1)",
+ "version-version": "($1)",
"version-license": "Ygtyýarnama",
"version-poweredby-credits": "Bu wiki '''[https://www.mediawiki.org/ MediaWiki]''' arkaly üpjün edilýär, awtorlyk hukugy © 2001-$1 $2.",
"version-poweredby-others": "beýlekiler",
@@ -2182,6 +2169,7 @@
"specialpages-group-wiki": "Wiki maglumatlar we gurallar",
"specialpages-group-redirects": "Gönükdirmeli ýörite sahypalar",
"specialpages-group-spam": "Spam gurallary",
+ "specialpages-group-developer": "Ösdürimçi gurallary",
"blankpage": "Boş sahypa",
"intentionallyblankpage": "Bu sahypa ýörite boş goýuldy.",
"external_image_whitelist": "#Bu setiri bolşy ýaly goýuň<pre>\n#Tertipli aňlatma fragmentlerini (diňe // aralygyndaky bölegi) aşak goşuň\n#Bular daşarky (hotlink) suratlaryň URL-leri bilen deňeşdiriljekdir\n#Deň gelenler surat bolup görüner, galanlary bolsa diňe suratyň çykgydy hökmünde görkeziler\n# # bilen başlaýan setirler teswir hasap ediljekdir\n#Setirler baş we setir harplara duýgur däldir\n\n#Ähli tertipli aňlatma fragmentlerini bu setiriň üstüne goşuň. Bu setiri bolşy ýaly goýuň</pre>",
@@ -2223,6 +2211,7 @@
"revdelete-restricted": "administratorlara goýlan çäklendirmeler",
"revdelete-unrestricted": "administratorlardan aýyrylan çäklendirmeler",
"rightsnone": "(hiç biri)",
+ "revdelete-summary": "özgerdiş mazmuny",
"searchsuggest-search": "Gözleg",
"searchsuggest-containing": "öz içine alýar...",
"expandtemplates": "Şablonlary giňelt",
diff --git a/languages/i18n/tl.json b/languages/i18n/tl.json
index cbb0891f..649f8e92 100644
--- a/languages/i18n/tl.json
+++ b/languages/i18n/tl.json
@@ -12,7 +12,9 @@
"Sky Harbor",
"tl.wikipedia.org sysops",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Ianlopez1115",
+ "Leeheonjin"
]
},
"tog-underline": "Pagsasalungguhit ng link:",
@@ -178,6 +180,7 @@
"permalink": "Palagiang kawing",
"print": "Ilimbag",
"view": "Tingnan",
+ "view-foreign": "Tingnan sa $1",
"edit": "Baguhin",
"create": "Likhain",
"editthispage": "Baguhin ang pahinang ito",
@@ -231,6 +234,7 @@
"disclaimers": "Mga pagtatanggi",
"disclaimerpage": "Project:Pangkalahatang pagtatanggi",
"edithelp": "Tulong sa pagbabago",
+ "helppage-top-gethelp": "Tulong",
"mainpage": "Unang Pahina",
"mainpage-description": "Unang Pahina",
"policy-url": "Project:Patakaran",
@@ -506,7 +510,6 @@
"passwordreset-emailsent-capture": "Naipadala na ang isang e-liham na paalala, na ipinapakita sa ibaba.",
"passwordreset-emailerror-capture": "Nalikha na ang isang e-liham na paalala, na ipinapakita sa ibaba, subalit nabigo ang pagpapadala sa tagagamit: $1",
"changeemail": "Baguhin ang direksiyong e-liham",
- "changeemail-header": "Baguhin ang email address ng account",
"changeemail-text": "Kumpletuhin ang form na ito upang mabago ang email address. Kakailanganin mong ipasok ang iyong password upang tiyakin ang pagbabagong ito.",
"changeemail-no-info": "Kailangan mong lumagda upang tuwirang mapuntahan ang pahinang ito.",
"changeemail-oldemail": "Kasalukuyang direksiyong e-liham:",
@@ -514,7 +517,6 @@
"changeemail-none": "(wala)",
"changeemail-password": "Ang iyong {{SITENAME}} password:",
"changeemail-submit": "Baguhin ang e-liham",
- "changeemail-cancel": "Kanselahin",
"changeemail-throttled": "Masyadong madami ang kamakailan lamang mong pagsubok sa pag-login.\nMaghintay po muna ng $1 bago subukan uli.",
"resettokens": "I-reset ang mga token o susi",
"bold_sample": "Makapal na panitik",
@@ -766,7 +768,6 @@
"mergehistory-reason": "Dahilan:",
"mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "Tala ng pagsasanib",
- "pagemerge-logentry": "sinanib ang [[$1]] sa [[$2]] (mga pagbabago hanggang sa $3)",
"revertmerge": "Paghiwalayin",
"mergelogpagetext": "Nasa ibaba ang isang talaan ng mga pinakakamakailan lamang na mga pagsasanib ng isang kasaysayan ng pahina patungo sa isa pa.",
"history-title": "Kasaysayan sa pagbago ng \"$1\"",
@@ -812,7 +813,6 @@
"searchrelated": "kaugnay",
"searchall": "lahat",
"showingresults": "Ipinapakita sa ibaba ang magpahanggang sa {{PLURAL:$1|'''1''' resultang|'''$1''' mga resultang}} nagsisimula sa #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Resultang '''$1''' ng '''$3'''|Mga resultang '''$1 - $2''' ng '''$3'''}} para sa '''$4'''",
"search-nonefound": "Walang mga resultang tumutugma sa katanungan/pagtatanong.",
"powersearch-legend": "Paghahanap na may mas mataas na antas",
"powersearch-ns": "Maghanap sa mga espasyo ng pangalan:",
@@ -1369,13 +1369,11 @@
"unusedtemplateswlh": "ibang mga ugnay",
"randompage": "Pahinang walang-pili",
"randompage-nopages": "Walang mga pahina sa sumusunod na {{PLURAL:$2|ngalan-espasyo|mga ngalan-espasyo}}: $1.",
- "randomincategory-selectcategory-submit": "Gawin",
"randomredirect": "Pagkargang walang-pili",
"randomredirect-nopages": "Walang mga pagkarga sa ngalan-espasyong \"$1\".",
"statistics": "Mga estadistika",
"statistics-header-pages": "Mga estadistika ng pahina",
"statistics-header-edits": "Mga estadistika sa mga pagbabago",
- "statistics-header-views": "Tingnan ang mga estadistika",
"statistics-header-users": "Mga estadistika sa mga tagagamit",
"statistics-header-hooks": "Ibang mga estadistika",
"statistics-articles": "Mga pahina ng nilalaman",
@@ -1384,13 +1382,9 @@
"statistics-files": "Ikinargang mga talaksan",
"statistics-edits": "Naihanda na ang mga pagbabago ng pahina mula sa {{SITENAME}}",
"statistics-edits-average": "Karaniwang pagbabago sa bawat pahina",
- "statistics-views-total": "Kabuuan ng mga pagtanaw",
- "statistics-views-total-desc": "Hindi kabilang ang mga pagtanaw sa mga pahinang hindi umiiral at mga pahinang natatangi",
- "statistics-views-peredit": "Pagtingin sa bawat pagbabago",
"statistics-users": "Mga nakatalang [[Special:ListUsers|tagagamit]]",
"statistics-users-active": "Mga masusugid na tagagamit <small>(mga nakatalang mang-aambag sa buwang ito)</small>",
"statistics-users-active-desc": "Mga tagagamit na nagsagawa ng isang galaw/gawain sa huling {{PLURAL:$1|araw|$1 mga araw}}",
- "statistics-mostpopular": "Mga pinakarinarayong pahina",
"doubleredirects": "Mga dobleng karga",
"doubleredirectstext": "Nagtatala ang pahinang ito ng mga pahinang pumupunta sa iba pang mga pahinang nililipatan. Naglalaman ang bawat hanay ng mga kawing sa una ang pangalawang kapupuntahan, maging ng puntiryang pangalawang kapupuntahan, na karaniwang \"tunay\" na puntiryang pahina, na dapat kinatuturuan ng unang pupuntahan.\nNasugpo na ang mga ipinasok na <del>inekisan</del>.",
"double-redirect-fixed-move": "Inilipat na ang [[$1]], isa na ngayon itong panuto/panturo patungo sa [[$2]]",
@@ -1423,7 +1417,6 @@
"uncategorizedtemplates": "Hindi nakakategoryang mga suleras",
"unusedcategories": "Hindi ginagamit na mga kategorya",
"unusedimages": "Hindi ginagamit na mga talaksan",
- "popularpages": "Mga popular na pahina",
"wantedcategories": "Kinakailangang mga kategorya",
"wantedpages": "Kinakailangang mga pahina",
"wantedpages-badtitle": "Hindi tanggap na pamagat sa loob ng pangkat ng kinalabasan: $1",
@@ -1477,7 +1470,7 @@
"booksources": "Mga mapagkukunang aklat",
"booksources-search-legend": "Maghanap ng mapagkukunang aklat",
"booksources-isbn": "ISBN:",
- "booksources-go": "Puntahan",
+ "booksources-search": "Hanapin",
"booksources-text": "Matatagpuan sa ibaba ang isang tala ng mga kawil patungo sa ibang mga website na nagtitinda ng mga bago at gamit nang aklat, at maaaring may iba pang impormasyon ito tungkol sa mga aklat na hinahanap mo:",
"booksources-invalid-isbn": "Tila mukhang hindi yata katanggap-tanggap ang ibinigay na ISBN; pakisuri kung may mga kamalian ang pagkakasip/pagkakakopya mula sa orihinal na pinagmulan.",
"specialloguserlabel": "Tagaganap:",
@@ -1597,7 +1590,7 @@
"wlheader-enotif": "Umiiral ang pagpapahayag sa pamamagitan ng e-liham.",
"wlheader-showupdated": "Ipinapakitang may '''makakapal na mga panitik''' ang nabagong/binagong mga pahina mula pa noong huli mong pagdalaw sa kanila",
"wlnote": "Nasa ibaba ang {{PLURAL:$1|pinakahuling pagbabago|pinakahuling '''$1''' mga pagbabago}} sa loob ng huling {{PLURAL:$2|oras|'''$2''' mga oras}}, magmula noong $3 sa ganap na ika-$4.",
- "wlshowlast": "Ipakita ang huling $1 mga oras $2 mga araw $3",
+ "wlshowlast": "Ipakita ang huling $1 mga oras $2 mga araw",
"watchlist-options": "Mga pagpipilian para sa talaan ng mga binabantayan",
"watching": "Isinasama sa mga binabantayan...",
"unwatching": "Tinatanggal mula sa mga binabantayan...",
@@ -1634,7 +1627,6 @@
"delete-toobig": "May isang malaking kasaysayan ng pagbabago ang pahinang ito, mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}.\nIpanagbabawal ang pagbura ng ganyang mga pahina upang maiwasan ang hindi sinasadyang pagantala/paggambala sa {{SITENAME}}.",
"delete-warning-toobig": "May malaking kasaysayan ng pagbabago ang pahinang ito, mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}.\nMaaaring makagambala/makaabala sa pagpapatakbo sa kalipunan ng dato ng {{SITENAME}};\nmagpatuloy na may pagiingat.",
"rollback": "Mga pagbabagong may kaugnayan sa pagpapagulong na pabalik sa (mas) dati",
- "rollback_short": "Pagulunging pabalik sa (mas) dati",
"rollbacklink": "pagulunging pabalik sa (mas) dati",
"rollbacklinkcount": "pagulunging pabalik ang $1 {{PLURAL:$1|pagbabago|mga pagbabago}}",
"rollbacklinkcount-morethan": "pagulunging pabalik ang mahigit sa $1 {{PLURAL:$1|pagbabago|mga pagbabago}}",
@@ -2004,7 +1996,6 @@
"import": "Mag-angkat ng pahina",
"importinterwiki": "Angkat na transwiki",
"import-interwiki-text": "Pumili ng isang wiki at pamagat ng pahina na iaangkat.\nMapapanatili ang mga petsa ng pagbabago at mga pangalan ng patnugot.\nNaitatala sa [[Special:Log/import|tala ng inangkat]] ang lahat ng mga transwiking aksyon para sa pag-angkat.",
- "import-interwiki-source": "Batayang wiki/pahina:",
"import-interwiki-history": "Kopyahin ang lahat ng mga bersyon ng kasaysayan para sa pahinang ito",
"import-interwiki-templates": "Isama ang lahat ng mga suleras",
"import-interwiki-submit": "Mag-angkat",
@@ -2049,13 +2040,11 @@
"import-logentry-interwiki": "Na-i-transwiki na ang $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}} mula sa $2",
"javascripttest": "Pagsubok sa JavaScript",
- "javascripttest-title": "Pinatatakbo ang mga pagsubok ng $1",
"javascripttest-pagetext-noframework": "Nakalaan ang pahinang ito para sa pagpapatakbo ng mga pagsubok ng JavaScript.",
"javascripttest-pagetext-unknownframework": "Hindi napag-aalamang balangkas ng pagsubok na \"$1\".",
"javascripttest-pagetext-frameworks": "Mangyaring pumili ng isa sa sumusunod na mga balangkas na pangsubok: $1",
"javascripttest-pagetext-skins": "Pumili ng isang pabalat na patatakbuhan ng mga pagsubok:",
"javascripttest-qunit-intro": "Tingnan ang [$1 dokumentasyon ng pagsubok] sa mediawiki.org.",
- "javascripttest-qunit-heading": "Pook na subukan ng QUnit ng JavaScript ng MediaWiki",
"tooltip-pt-userpage": "Ang iyong pahina ng tagagamit",
"tooltip-pt-anonuserpage": "Ang pahina ng tagagamit para sa IP na iyong binabago bilang",
"tooltip-pt-mytalk": "Ang iyong pahina ng usapan",
@@ -2165,7 +2154,6 @@
"pageinfo-robot-policy": "Katayuan ng makinang panghanap",
"pageinfo-robot-index": "Matataluntunan",
"pageinfo-robot-noindex": "Hindi matataluntunan",
- "pageinfo-views": "Bilang ng mga pagtanaw",
"pageinfo-watchers": "Bilang ng mga nagbabantay ng pahina",
"pageinfo-redirects-name": "Napapapunta sa pahinang ito",
"pageinfo-redirects-value": "$1",
@@ -2652,7 +2640,6 @@
"exif-urgency-low": "Mababa ( $1 )",
"exif-urgency-high": "Mataas ($1)",
"exif-urgency-other": "Pagkakauna-unang tinukoy ng tagagamit ($1)",
- "watchlistall2": "lahat",
"namespacesall": "lahat",
"monthsall": "lahat",
"confirmemail": "Patotohanan ang adres ng e-liham",
@@ -2805,7 +2792,6 @@
"hebrew-calendar-m12-gen": "Elul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|makipag-usap]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "Hindi nalalamang tatak ng karugtong na \"$1\"",
"duplicate-defaultsort": "Babala: Madadaig ng susi ng pagtatakdang \"$2\" ang mas naunang susi ng pagtatakdang \"$1\".",
"version": "Bersyon",
"version-extensions": "Nakaluklok/Nakainstalang mga karugtong",
@@ -2822,7 +2808,7 @@
"version-parser-function-hooks": "Mga pangkawit ng/sa tungkuling pambanghay (''parser'')",
"version-hook-name": "Pangalan ng pangkawit",
"version-hook-subscribedby": "Sinuskribi ng/ni/nina",
- "version-version": "(Bersyon $1)",
+ "version-version": "($1)",
"version-svn-revision": "(r$2)",
"version-license": "Lisensiya",
"version-poweredby-credits": "Ang wiking ito ay pinapatakbo ng '''[https://www.mediawiki.org/ MediaWiki]''', karapatang-ari © 2001-$1 $2.",
@@ -2859,6 +2845,7 @@
"specialpages-group-wiki": "Kagamitan at datos ng wiki",
"specialpages-group-redirects": "Mga natatanging pahinang pang-talon",
"specialpages-group-spam": "Mga kagamitang pang-spam",
+ "specialpages-group-developer": "Mga kasangkapan ng tagapagpaunlad",
"blankpage": "Walang laman na pahina",
"intentionallyblankpage": "Sinadyang walang laman ang pahinang ito",
"external_image_whitelist": " #Pabayaang talagang ganito lang ang hanay na ito<pre>\n#Ilagay ang mga piraso ng karaniwang pagpapahayag (ang bahagi lang na napupunta sa pagitan ng //) sa ibaba\n#Tutugmaan ang mga ito ng mga URL ng panlabas (mainit na kawing) na mga larawan\n#Ang mga magtutugma ay ipapakita bilang mga larawan, kung hindi bilang isang kawing lamang patungo sa larawan ang ipapakita\n#Ituturing bilang mga kumento ang mga hanay na nagsisimula sa #\n\n#Ilagay sa ibabaw ng hanay na ito ang mga piraso ng karaniwang pagpapahayag. Pabayaang ganito lang talaga ang hanay na ito</pre>",
@@ -2870,9 +2857,17 @@
"tags-tag": "Tatakan ang pangalan",
"tags-display-header": "Anyo sa ibabaw ng mga talaan ng pagbabago",
"tags-description-header": "Buong paglalarawan ng kahulugan",
+ "tags-source-header": "Pinagmulan",
"tags-hitcount-header": "Natatakang mga pagbabago",
+ "tags-actions-header": "Mga hakbang",
+ "tags-source-none": "Hindi na ginagamit pa",
"tags-edit": "baguhin",
+ "tags-delete": "Burahin",
"tags-hitcount": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}}",
+ "tags-create-reason": "Dahilan:",
+ "tags-create-submit": "Lumikha/Lumalang",
+ "tags-activate-reason": "Dahilan:",
+ "tags-deactivate-reason": "Dahilan:",
"comparepages": "Paghambingin ang mga pahina",
"compare-page1": "Pahina 1",
"compare-page2": "Pahina 2",
@@ -2930,19 +2925,27 @@
"logentry-newusers-create2": "Lumikha si $1 ng isang kuwenta ng tagagamit na $3",
"logentry-newusers-autocreate": "Automatikong {{GENDER:$2|inilikha}} ang account ng tagagamit na $1",
"rightsnone": "(wala)",
+ "revdelete-summary": "buod ng pagbabago",
+ "feedback-adding": "Idinaragdag ang pakaing-tugon sa pahina...",
+ "feedback-back": "Magbalik",
+ "feedback-bugcheck": "Mahusay! Suriin lang na hindi pa ito isa sa [$1 nalalamang mga depekto].",
+ "feedback-bugnew": "Sinuri ko na. Mag-ulat ng panibagong sira",
"feedback-bugornote": "Kung handa ka nang detalyadong maglarawan ng isang suliraning teknikal mangyaring [$1 iulat ang kamalian].\nO kaya, maaari mo ring gamitin ang pinadaling pormularyo sa ibaba. Madadagdagan ang komento mo sa pahinang \"[$3 $2]\", kasama ang iyong pangalan ng tagagamit.",
- "feedback-subject": "Paksa:",
- "feedback-message": "Mensahe:",
"feedback-cancel": "Huwag ituloy",
- "feedback-submit": "Magbigay ng komento",
- "feedback-adding": "Idinaragdag ang pakaing-tugon sa pahina...",
+ "feedback-close": "Nagawa na",
+ "feedback-external-bug-report-button": "Mag-habla ng teknikal na gawain",
+ "feedback-dialog-title": "I-sumite ang katugunan",
+ "feedback-dialog-intro": "Maaari mo nang gamitin ang madaling pormularyo na nasa ibaba upang i-sumite ang iyong katugunan. Madadagdag ang iyong komento sa pahinang $1, kasama ang iyong ngalan-tagagamit.",
+ "feedback-error-title": "Kamalian",
"feedback-error1": "Kamalian: Hindi nakikilalang kinalabasan mula sa API",
"feedback-error2": "Kamalian: Nabigo ang pagpatnugot",
"feedback-error3": "Kamalian: Walang tugon mula sa API",
+ "feedback-message": "Mensahe:",
+ "feedback-subject": "Paksa:",
+ "feedback-submit": "I-sumite",
+ "feedback-termsofuse": "Pumapayag ako na magbibigay ng katugunan sang-ayon sa mga Tuntunin sa Paggamit.",
"feedback-thanks": "Salamat! Ang katugunan mo ay naipaskil na sa pahinang \"[$2 $1]\".",
- "feedback-close": "Nagawa na",
- "feedback-bugcheck": "Mahusay! Suriin lang na hindi pa ito isa sa [$1 nalalamang mga depekto].",
- "feedback-bugnew": "Sinuri ko na. Mag-ulat ng panibagong sira",
+ "feedback-useragent": "Ahente ng tagagamit:",
"searchsuggest-search": "Maghanap",
"searchsuggest-containing": "naglalaman ng ...",
"api-error-badaccess-groups": "Hindi ka pinapayagang makapagkarga ng mga talaksan papunta sa wiking ito.",
diff --git a/languages/i18n/tly.json b/languages/i18n/tly.json
index 79b7b312..b3bc4dcd 100644
--- a/languages/i18n/tly.json
+++ b/languages/i18n/tly.json
@@ -256,7 +256,6 @@
"changeemail-newemail": "Е-номә тожә унвон:",
"changeemail-none": "(ни)",
"changeemail-submit": "Е-номә дәгиш кардеј",
- "changeemail-cancel": "Ләғв карде",
"bold_sample": "Нимәтындә шрифт",
"bold_tip": "Нимәтындә шрифт",
"italic_sample": "Курсивә мәтн",
@@ -364,7 +363,6 @@
"search-interwiki-more": "(һәнијән)",
"searchrelated": "ангыл кардә быә",
"searchall": "Һәммәј",
- "showingresultsheader": "{{PLURAL:$5|Нәтиҹә'''$1''' из '''$3'''|Нәтиҹон '''$1 — $2''' че '''$3'''}} бо '''$4'''",
"search-nonefound": "Бә шымә хәбәсә ујғун омә сәкыштә пәјдо ныбе.",
"powersearch-toggleall": "Һәммәј",
"preferences": "Кукон",
@@ -471,7 +469,6 @@
"pager-older-n": "{{PLURAL:$1|1 тикиән канә|$1 ән канә}}",
"booksources": "Китобон сәвонон",
"booksources-search-legend": "Китоби барәдә мәлумоти нәве",
- "booksources-go": "Нәве",
"log": "Журналон",
"allpages": "Һәммәј сәһифон",
"allarticles": "Һәммәј сәһифон",
@@ -486,7 +483,7 @@
"watch": "Думотоно егыниеј",
"unwatch": "Думотоно ныегыниеј",
"watchlist-details": "Мызокирә сәһифон ныашмардеј, шымә ноғо доә сијоһиәдә {{PLURAL:$1|$1 сәһифәје|$1 сәһифәје}}.",
- "wlshowlast": "Нишо дој бә охонә $1 саат $2 руж $3",
+ "wlshowlast": "Нишо дој бә охонә $1 саат $2 руж",
"watchlist-options": "Ноғо доә сијоһи пеғандон",
"actioncomplete": "Һәрәкәт иҹро кардә быә",
"actionfailed": "Һәрәкәт иҹро кардә бәни",
@@ -637,7 +634,6 @@
"exif-gaincontrol-0": "Ни",
"exif-saturation-0": "Ади",
"exif-dc-publisher": "Нәшрәкә",
- "watchlistall2": "һәммәј",
"namespacesall": "һәммәј",
"monthsall": "һәммәј",
"table_pager_limit_submit": "Давард",
diff --git a/languages/i18n/tn.json b/languages/i18n/tn.json
index e8169f70..df34310a 100644
--- a/languages/i18n/tn.json
+++ b/languages/i18n/tn.json
@@ -1,116 +1,116 @@
{
- "@metadata": {
- "authors": [
- "Cbrown1023",
- "Hakka"
- ]
- },
- "sunday": "Tshipi",
- "monday": "Mosupologo",
- "tuesday": "Labobedi",
- "wednesday": "Laboraro",
- "thursday": "Labone",
- "friday": "Labotlhano",
- "saturday": "Matlhatso",
- "january": "Firikgong",
- "february": "Tlhakole",
- "march": "Mopitlo",
- "april": "Moranang",
- "may_long": "Motsheganong",
- "june": "Seetebosigo",
- "july": "Phukwi",
- "august": "Phatwe",
- "september": "Lwetse",
- "october": "Phalane",
- "november": "Ngwanatsele",
- "december": "Sedimonthole",
- "january-gen": "Firikgong",
- "february-gen": "Tlhakole",
- "march-gen": "Mopitlo",
- "april-gen": "Moranang",
- "may-gen": "Motsheganong",
- "june-gen": "Seetebosigo",
- "july-gen": "Phukwi",
- "august-gen": "Phatwe",
- "september-gen": "Lwetse",
- "october-gen": "Phalane",
- "november-gen": "Ngwanatsele",
- "december-gen": "Sedimonthole",
- "cancel": "Sutlha",
- "mytalk": "Puo yame",
- "navigation": "Tsweletso",
- "help": "Thuso",
- "search": "Senka",
- "searchbutton": "Senka",
- "go": "Tsamaya",
- "searcharticle": "Tsamaya",
- "history_short": "Ditso",
- "printableversion": "Mokwalo o o ka gatisiwang motlhofo",
- "permalink": "Kgolagano ya sennelaruri",
- "edit": "Baakanya",
- "delete": "Sutlha",
- "protect": "Sireletsa",
- "talk": "Puisano",
- "toolbox": "Lebokoso la dithulusu",
- "otherlanguages": "Ka dipuo di sele",
- "currentevents": "Ditiragalo tsa sešeng",
- "disclaimers": "Tlhapa diatla",
- "edithelp": "Thuso ya go fetola",
- "mainpage": "Tsebe ya konokono",
- "mainpage-description": "Tsebe ya konokono",
- "portal": "Patlelo ya setšhaba",
- "portal-url": "Project:Patlelo ya setšhaba",
- "privacy": "Melawana ya sephiri",
- "youhavenewmessages": "O na le $1 ($2).",
- "youhavenewmessagesmulti": "O na le molaetsa o moša mo $1",
- "editsection": "baakanya",
- "editold": "baakanya",
- "nstab-main": "Mokwalo",
- "nstab-mediawiki": "Molaetsa",
- "viewsource": "Lebelela motswedi",
- "yourname": "Leina la modirisi:",
- "yourpassword": "Selotlolo sa sephiri:",
- "yourpasswordagain": "Kwala selotlolo sa gago sa sephiri gape:",
- "remembermypassword": "Gakologelwa ikwadiso yame mo khompiutareng e (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "Ikwadise",
- "userlogin": "Ikwadise / ipulela tsebe",
- "logout": "Tswala",
- "userlogout": "Tswala",
- "notloggedin": "Ga o a ikwadisa",
- "createaccount": "Ipulela tsebe",
- "summary": "Tshoboko:",
- "minoredit": "Se ke paakanyo e potlana",
- "watchthis": "Lebelela tsebe e",
- "savearticle": "Boloka tsebe",
- "showpreview": "Supa gore go tlaa lebega jang",
- "showdiff": "Supa diphetogo",
- "currentrev": "Dipaakanyo tsa sešeng",
- "currentrevisionlink": "Dipaakanyo tsa sešeng",
- "mypreferences": "Dikgatlhegelo tsa me",
- "youremail": "E-mail:",
- "username": "Leina la modirisi:",
- "recentchanges": "Diphetogo tsa sešeng",
- "recentchangeslinked": "Diphetogo tse di tsamaelanang",
- "recentchangeslinked-feed": "Diphetogo tse di tsamaelanang",
- "recentchangeslinked-toolbox": "Diphetogo tse di tsamaelanang",
- "upload": "Tsenya mokwalo o o tswang kwantle",
- "uploadbtn": "Tsenya mokwalo o o tswang kwantle",
- "watchthisupload": "Lebelela tsebe e",
- "randompage": "Tsebe e e sa tlhomamang",
- "move": "Suta",
- "movethispage": "Sutisa tsebe e",
- "mywatchlist": "Mafoko a ke a etseng tlhoko",
- "watchnologin": "Ga o a ikwadisa",
- "watch": "Lebelela",
- "watchthispage": "Lebelela tsebe e",
- "prot_1movedto2": "[[$1]] o sutisediwa kwa go [[$2]]",
- "undelete-search-submit": "Senka",
- "mycontris": "Seabe same",
- "whatlinkshere": "Ke eng se se gokaganang fa",
- "move-page-legend": "Sutisa tsebe",
- "movearticle": "Sutisa tsebe:",
- "movepagebtn": "Sutisa tsebe",
- "movereason": "Lebaka:",
- "allmessages": "Melaetsa ya maranyane",
- "specialpages": "Diphetogo tse di faphegileng"
+ "@metadata": {
+ "authors": [
+ "Cbrown1023",
+ "Hakka"
+ ]
+ },
+ "sunday": "Tshipi",
+ "monday": "Mosupologo",
+ "tuesday": "Labobedi",
+ "wednesday": "Laboraro",
+ "thursday": "Labone",
+ "friday": "Labotlhano",
+ "saturday": "Matlhatso",
+ "january": "Firikgong",
+ "february": "Tlhakole",
+ "march": "Mopitlo",
+ "april": "Moranang",
+ "may_long": "Motsheganong",
+ "june": "Seetebosigo",
+ "july": "Phukwi",
+ "august": "Phatwe",
+ "september": "Lwetse",
+ "october": "Phalane",
+ "november": "Ngwanatsele",
+ "december": "Sedimonthole",
+ "january-gen": "Firikgong",
+ "february-gen": "Tlhakole",
+ "march-gen": "Mopitlo",
+ "april-gen": "Moranang",
+ "may-gen": "Motsheganong",
+ "june-gen": "Seetebosigo",
+ "july-gen": "Phukwi",
+ "august-gen": "Phatwe",
+ "september-gen": "Lwetse",
+ "october-gen": "Phalane",
+ "november-gen": "Ngwanatsele",
+ "december-gen": "Sedimonthole",
+ "cancel": "Sutlha",
+ "mytalk": "Puo yame",
+ "navigation": "Tsweletso",
+ "help": "Thuso",
+ "search": "Senka",
+ "searchbutton": "Senka",
+ "go": "Tsamaya",
+ "searcharticle": "Tsamaya",
+ "history_short": "Ditso",
+ "printableversion": "Mokwalo o o ka gatisiwang motlhofo",
+ "permalink": "Kgolagano ya sennelaruri",
+ "edit": "Baakanya",
+ "delete": "Sutlha",
+ "protect": "Sireletsa",
+ "talk": "Puisano",
+ "toolbox": "Lebokoso la dithulusu",
+ "otherlanguages": "Ka dipuo di sele",
+ "currentevents": "Ditiragalo tsa sešeng",
+ "disclaimers": "Tlhapa diatla",
+ "edithelp": "Thuso ya go fetola",
+ "mainpage": "Tsebe ya konokono",
+ "mainpage-description": "Tsebe ya konokono",
+ "portal": "Patlelo ya setšhaba",
+ "portal-url": "Project:Patlelo ya setšhaba",
+ "privacy": "Melawana ya sephiri",
+ "youhavenewmessages": "O na le $1 ($2).",
+ "youhavenewmessagesmulti": "O na le molaetsa o moša mo $1",
+ "editsection": "baakanya",
+ "editold": "baakanya",
+ "nstab-main": "Mokwalo",
+ "nstab-mediawiki": "Molaetsa",
+ "viewsource": "Lebelela motswedi",
+ "yourname": "Leina la modirisi:",
+ "yourpassword": "Selotlolo sa sephiri:",
+ "yourpasswordagain": "Kwala selotlolo sa gago sa sephiri gape:",
+ "remembermypassword": "Gakologelwa ikwadiso yame mo khompiutareng e (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "Ikwadise",
+ "userlogin": "Ikwadise / ipulela tsebe",
+ "logout": "Tswala",
+ "userlogout": "Tswala",
+ "notloggedin": "Ga o a ikwadisa",
+ "createaccount": "Ipulela tsebe",
+ "summary": "Tshoboko:",
+ "minoredit": "Se ke paakanyo e potlana",
+ "watchthis": "Lebelela tsebe e",
+ "savearticle": "Boloka tsebe",
+ "showpreview": "Supa gore go tlaa lebega jang",
+ "showdiff": "Supa diphetogo",
+ "currentrev": "Dipaakanyo tsa sešeng",
+ "currentrevisionlink": "Dipaakanyo tsa sešeng",
+ "mypreferences": "Dikgatlhegelo tsa me",
+ "youremail": "E-mail:",
+ "username": "Leina la modirisi:",
+ "recentchanges": "Diphetogo tsa sešeng",
+ "recentchangeslinked": "Diphetogo tse di tsamaelanang",
+ "recentchangeslinked-feed": "Diphetogo tse di tsamaelanang",
+ "recentchangeslinked-toolbox": "Diphetogo tse di tsamaelanang",
+ "upload": "Tsenya mokwalo o o tswang kwantle",
+ "uploadbtn": "Tsenya mokwalo o o tswang kwantle",
+ "watchthisupload": "Lebelela tsebe e",
+ "randompage": "Tsebe e e sa tlhomamang",
+ "move": "Suta",
+ "movethispage": "Sutisa tsebe e",
+ "mywatchlist": "Mafoko a ke a etseng tlhoko",
+ "watchnologin": "Ga o a ikwadisa",
+ "watch": "Lebelela",
+ "watchthispage": "Lebelela tsebe e",
+ "prot_1movedto2": "[[$1]] o sutisediwa kwa go [[$2]]",
+ "undelete-search-submit": "Senka",
+ "mycontris": "Seabe same",
+ "whatlinkshere": "Ke eng se se gokaganang fa",
+ "move-page-legend": "Sutisa tsebe",
+ "movearticle": "Sutisa tsebe:",
+ "movepagebtn": "Sutisa tsebe",
+ "movereason": "Lebaka:",
+ "allmessages": "Melaetsa ya maranyane",
+ "specialpages": "Diphetogo tse di faphegileng"
}
diff --git a/languages/i18n/to.json b/languages/i18n/to.json
index 1aed46cc..f8f29864 100644
--- a/languages/i18n/to.json
+++ b/languages/i18n/to.json
@@ -497,7 +497,6 @@
"randomredirect": "Leʻei noa pē",
"statistics": "Sitesitesika",
"statistics-header-users": "Sitesitesika ʻo e ʻetita",
- "statistics-mostpopular": "Ko e ngaahi peesi naʻe vakai ki ai lahi taha",
"doubleredirects": "Ngaahi leʻeleʻei",
"doubleredirectstext": "ʻOku ʻasi ʻi he ʻotu kotoa pē ha ongo fehokotaki ki he leʻei, mo e leʻeleʻei, mo e kamataʻanga ʻo e leʻeleʻei, taimi ʻe niʻihi ko e peesi totonu ia, ʻoku taau ʻe tuhu ki ai ʻe he leʻei.",
"brokenredirects": "Ngaahi leʻei maumau",
@@ -517,7 +516,6 @@
"uncategorizedtemplates": "Sīpinga taʻefaʻahingaʻi",
"unusedcategories": "Faʻahinga taʻengāueʻaki",
"unusedimages": "Faitā taʻengāueʻaki",
- "popularpages": "Peesi manakoa",
"wantedcategories": "Faʻahinga fiemaʻu",
"wantedpages": "Kupu fiemaʻu",
"wantedfiles": "Faile fiemaʻu",
@@ -545,7 +543,6 @@
"pager-newer-n": "kupu foʻou ange ʻe $1",
"pager-older-n": "kupu motuʻa ange ʻe $1",
"booksources": "Ngaahi tupunga tohi",
- "booksources-go": "Fai ā",
"specialloguserlabel": "ʻEtita:",
"speciallogtitlelabel": "Hingoa:",
"log": "Tohinoa",
@@ -599,7 +596,7 @@
"wlheader-enotif": "Kuo fakamafeiaʻi tala mei he tohila",
"wlheader-showupdated": "*Ko e ngaahi peesi kuo liliu talu he taimi hoʻo ʻaʻahi ki ai, ʻoku ʻasi mai fakasinolahi",
"wlnote": "ʻOku ʻasi ʻi lalo ʻa e liliu fakamuimui ʻe $1 ʻi he houa fakamuimui ʻe <b>$2</b>.",
- "wlshowlast": "ʻAsi mai houa fakamuimui ʻe $1, ʻaho ʻe $2, $3",
+ "wlshowlast": "ʻAsi mai houa fakamuimui ʻe $1, ʻaho ʻe $2,",
"watching": "ʻOku leʻo...",
"unwatching": "ʻOku taʻeleʻo...",
"created": "kuo fakatupu",
@@ -872,7 +869,6 @@
"exif-gpsspeed-m": "Maile he houa",
"exif-gpsdirection-t": "Tūkufua moʻoni",
"exif-gpsdirection-m": "Tūkufua fakamakineti",
- "watchlistall2": "kātoa",
"namespacesall": "vā kotoa",
"confirmemail": "Fakamoʻoniʻi ho tuʻasila tohila",
"confirmemail_noemail": "Naʻe ʻikai te ke fakamoʻoniʻi ʻa e tohila totonu ʻi he [[Special:Preferences|faʻiteliha ʻaʻau]].",
diff --git a/languages/i18n/tokipona.json b/languages/i18n/tokipona.json
index 9f1b09ee..67f4b5f3 100644
--- a/languages/i18n/tokipona.json
+++ b/languages/i18n/tokipona.json
@@ -1,113 +1,113 @@
{
- "@metadata": {
- "authors": [
- "http://tokipona.wikia.com sysops"
- ]
- },
- "january": "tenpo mun pi nanpa wan",
- "february": "tenpo mun pi nanpa tu",
- "march": "tenpo mun pi nanpa tu wan",
- "april": "tenpo mun pi nanpa tu tu",
- "may_long": "tenpo mun pi nanpa luka",
- "june": "tenpo mun pi nanpa luka wan",
- "july": "tenpo mun pi nanpa luka tu",
- "august": "tenpo mun pi nanpa luka tu wan",
- "september": "tenpo mun pi nanpa luka tu tu",
- "october": "tenpo mun pi nanpa luka luka",
- "november": "tenpo mun pi nanpa luka luka wan",
- "december": "tenpo mun pi nanpa luka luka tu",
- "category_header": "lipu lon kulupu lipu \"$1\"",
- "subcategories": "kulupu lipu lili",
- "listingcontinuesabbrev": " li awen",
- "article": "lipu sona",
- "newwindow": "(ona li open e lupa sin)",
- "cancel": "ike",
- "mytalk": "toki mi",
- "navigation": "lipu suli",
- "help": "mi sona ala",
- "search": "o lukin jo",
- "go": "o tawa",
- "history": "o lukin e lipu ni pi tenpo pini",
- "history_short": "lipu ni pi tenpo pini",
- "printableversion": "lipu ni o kama lipu len",
- "permalink": "nimi open kiwen",
- "edit": "o ante",
- "editthispage": "o ante e lipu ni",
- "delete": "o weka",
- "deletethispage": "o weka e lipu ni",
- "protect": "mi taso o ken ante",
- "protectthispage": "mi taso o ken ante e lipu ni",
- "unprotect": "jan ali o ken ante",
- "unprotectthispage": "jan ale o ken ante e lipu ni",
- "talkpage": "Talk page",
- "specialpage": "lipu suli",
- "talk": "o toki",
- "toolbox": "ilo",
- "otherlanguages": "toki ante",
- "redirectedfrom": "(tan $1)",
- "aboutsite": "lipu sona pi toki pona li seme?",
- "aboutpage": "Project:lipu sona pi toki pona li seme?",
- "copyright": "lipu ken $1 li lawa e lipu ni.",
- "currentevents": "seme li sin lon ma?",
- "disclaimers": "wile ala",
- "edithelp": "mi sona ala e ante",
- "mainpage": "lipu lawa",
- "mainpage-description": "lipu lawa",
- "portal": "lipu pi kulupu ni",
- "privacy": "ken pi awen weka",
- "ok": "pona",
- "retrievedfrom": "tan $1",
- "editsection": "o ante",
- "toc": "poki lawa",
- "showtoc": "o suli e poki ni.",
- "hidetoc": "o lili e poki ni",
- "nstab-main": "lipu sona",
- "nstab-user": "lipu jan",
- "nstab-special": "suli",
- "nstab-image": "lipu nanpa",
- "nstab-mediawiki": "nimi",
- "nstab-template": "lipu mama",
- "nstab-help": "pana pona",
- "nstab-category": "kulupu lipu",
- "logout": "mi o tawa",
- "userlogout": "mi o tawa",
- "summary": "ante li seme:",
- "minoredit": "ante ni li lili taso",
- "watchthis": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
- "savearticle": "o awen",
- "preview": "lukin taso",
- "showpreview": "mi wile lukin taso e ante",
- "editing": "mi ante e: $1",
- "editingcomment": "mi ante e lipu $1 (wan sin)",
- "copyrightwarning": "o sona e ni: ken $2 (o lukin e $1) li lawa tawa ante ali lon {{SITENAME}} li. jan li ken ante e toki sina li ken pana e ona tawa jan ante. sina wile ala e ni la, o sitelen ala lon lipu ni.<br />\nkin la sina toki e ni: toki sina ni li tan sina taso anu lipu pi ken ali.\n'''SINA KEN ALA LA, O PANA ALA E TOKI PI KEN LILI TAWA LIPU NI!'''",
- "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
- "histfirst": "pini taso",
- "histlast": "sin taso",
- "prevn": "nanpa {{PLURAL:$1|$1}} pini",
- "nextn": "nanpa {{PLURAL:$1|$1}} kama",
- "viewprevnext": "o lukin e ($1 {{int:pipe-separator}} $2) ($3).",
- "preferences": "seme li pona tawa mi",
- "recentchanges": "lipu seme li ante?",
- "minoreditletter": "ante lili",
- "newpageletter": "lipu sin",
- "recentchangeslinked": "ante sama",
- "recentchangeslinked-feed": "ante sama",
- "recentchangeslinked-toolbox": "ante sama",
- "upload": "o pana e lipu nanpa",
- "filedesc": "ante li seme",
- "fileuploadsummary": "ante li seme:",
- "file-anchor-link": "Lipu nanpa",
- "randompage": "mi wile lukin e lipu ante",
- "lonelypages": "lipu ni li jo ala e lipu sama",
- "move": "o tawa",
- "movethispage": "o pana e nimi sin",
- "allpages": "lipu ale",
- "categories": "kulupu lipu",
- "watchlist": "mi sona e ante pi lipu seme",
- "watch": "o sona e ante",
- "watchthispage": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
- "unwatchthispage": "mi wile ala sona e ante ale pi lipu ni lon tenpo kama",
- "mycontris": "mi ante e lipu seme",
- "whatlinkshere": "lipu seme li tawa ni?",
- "specialpages": "lipu suli"
+ "@metadata": {
+ "authors": [
+ "http://tokipona.wikia.com sysops"
+ ]
+ },
+ "january": "tenpo mun pi nanpa wan",
+ "february": "tenpo mun pi nanpa tu",
+ "march": "tenpo mun pi nanpa tu wan",
+ "april": "tenpo mun pi nanpa tu tu",
+ "may_long": "tenpo mun pi nanpa luka",
+ "june": "tenpo mun pi nanpa luka wan",
+ "july": "tenpo mun pi nanpa luka tu",
+ "august": "tenpo mun pi nanpa luka tu wan",
+ "september": "tenpo mun pi nanpa luka tu tu",
+ "october": "tenpo mun pi nanpa luka luka",
+ "november": "tenpo mun pi nanpa luka luka wan",
+ "december": "tenpo mun pi nanpa luka luka tu",
+ "category_header": "lipu lon kulupu lipu \"$1\"",
+ "subcategories": "kulupu lipu lili",
+ "listingcontinuesabbrev": " li awen",
+ "article": "lipu sona",
+ "newwindow": "(ona li open e lupa sin)",
+ "cancel": "ike",
+ "mytalk": "toki mi",
+ "navigation": "lipu suli",
+ "help": "mi sona ala",
+ "search": "o lukin jo",
+ "go": "o tawa",
+ "history": "o lukin e lipu ni pi tenpo pini",
+ "history_short": "lipu ni pi tenpo pini",
+ "printableversion": "lipu ni o kama lipu len",
+ "permalink": "nimi open kiwen",
+ "edit": "o ante",
+ "editthispage": "o ante e lipu ni",
+ "delete": "o weka",
+ "deletethispage": "o weka e lipu ni",
+ "protect": "mi taso o ken ante",
+ "protectthispage": "mi taso o ken ante e lipu ni",
+ "unprotect": "jan ali o ken ante",
+ "unprotectthispage": "jan ale o ken ante e lipu ni",
+ "talkpage": "Talk page",
+ "specialpage": "lipu suli",
+ "talk": "o toki",
+ "toolbox": "ilo",
+ "otherlanguages": "toki ante",
+ "redirectedfrom": "(tan $1)",
+ "aboutsite": "lipu sona pi toki pona li seme?",
+ "aboutpage": "Project:lipu sona pi toki pona li seme?",
+ "copyright": "lipu ken $1 li lawa e lipu ni.",
+ "currentevents": "seme li sin lon ma?",
+ "disclaimers": "wile ala",
+ "edithelp": "mi sona ala e ante",
+ "mainpage": "lipu lawa",
+ "mainpage-description": "lipu lawa",
+ "portal": "lipu pi kulupu ni",
+ "privacy": "ken pi awen weka",
+ "ok": "pona",
+ "retrievedfrom": "tan $1",
+ "editsection": "o ante",
+ "toc": "poki lawa",
+ "showtoc": "o suli e poki ni.",
+ "hidetoc": "o lili e poki ni",
+ "nstab-main": "lipu sona",
+ "nstab-user": "lipu jan",
+ "nstab-special": "suli",
+ "nstab-image": "lipu nanpa",
+ "nstab-mediawiki": "nimi",
+ "nstab-template": "lipu mama",
+ "nstab-help": "pana pona",
+ "nstab-category": "kulupu lipu",
+ "logout": "mi o tawa",
+ "userlogout": "mi o tawa",
+ "summary": "ante li seme:",
+ "minoredit": "ante ni li lili taso",
+ "watchthis": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
+ "savearticle": "o awen",
+ "preview": "lukin taso",
+ "showpreview": "mi wile lukin taso e ante",
+ "editing": "mi ante e: $1",
+ "editingcomment": "mi ante e lipu $1 (wan sin)",
+ "copyrightwarning": "o sona e ni: ken $2 (o lukin e $1) li lawa tawa ante ali lon {{SITENAME}} li. jan li ken ante e toki sina li ken pana e ona tawa jan ante. sina wile ala e ni la, o sitelen ala lon lipu ni.<br />\nkin la sina toki e ni: toki sina ni li tan sina taso anu lipu pi ken ali.\n'''SINA KEN ALA LA, O PANA ALA E TOKI PI KEN LILI TAWA LIPU NI!'''",
+ "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
+ "histfirst": "pini taso",
+ "histlast": "sin taso",
+ "prevn": "nanpa {{PLURAL:$1|$1}} pini",
+ "nextn": "nanpa {{PLURAL:$1|$1}} kama",
+ "viewprevnext": "o lukin e ($1 {{int:pipe-separator}} $2) ($3).",
+ "preferences": "seme li pona tawa mi",
+ "recentchanges": "lipu seme li ante?",
+ "minoreditletter": "ante lili",
+ "newpageletter": "lipu sin",
+ "recentchangeslinked": "ante sama",
+ "recentchangeslinked-feed": "ante sama",
+ "recentchangeslinked-toolbox": "ante sama",
+ "upload": "o pana e lipu nanpa",
+ "filedesc": "ante li seme",
+ "fileuploadsummary": "ante li seme:",
+ "file-anchor-link": "Lipu nanpa",
+ "randompage": "mi wile lukin e lipu ante",
+ "lonelypages": "lipu ni li jo ala e lipu sama",
+ "move": "o tawa",
+ "movethispage": "o pana e nimi sin",
+ "allpages": "lipu ale",
+ "categories": "kulupu lipu",
+ "watchlist": "mi sona e ante pi lipu seme",
+ "watch": "o sona e ante",
+ "watchthispage": "mi wile sona e ante ale pi lipu ni lon tenpo kama",
+ "unwatchthispage": "mi wile ala sona e ante ale pi lipu ni lon tenpo kama",
+ "mycontris": "mi ante e lipu seme",
+ "whatlinkshere": "lipu seme li tawa ni?",
+ "specialpages": "lipu suli"
}
diff --git a/languages/i18n/tpi.json b/languages/i18n/tpi.json
index 62e90fc5..89f476cd 100644
--- a/languages/i18n/tpi.json
+++ b/languages/i18n/tpi.json
@@ -6,7 +6,8 @@
"Iketsi",
"Wantok",
"Wytukaze",
- "לערי ריינהארט"
+ "לערי ריינהארט",
+ "सरोज कुमार ढकाल"
]
},
"tog-underline": "Putim lain ananit long ol link:",
@@ -429,7 +430,6 @@
"unusedcategoriestext": "Ol dispela grup istap yet, tasol i no gat wanpela pes o grup i stap insait long ol.",
"booksources": "Ol as bilong buk",
"booksources-search-legend": "Painim long ol buk as",
- "booksources-go": "Go",
"specialloguserlabel": "Yusa:",
"speciallogtitlelabel": "Nem:",
"log": "Ol ripot",
@@ -463,7 +463,7 @@
"unwatchthispage": "Pinis long lukautim",
"watchlist-details": "$1 pes istap long lukautbuk (dispela namba i no kaunim ol pes bilong toktok).",
"wlheader-showupdated": "Ol pes i senis pinis bihain long taim yu lukim ol igat nem i '''strongpela'''",
- "wlshowlast": "Lukim dispela $1 aua $2 de $3",
+ "wlshowlast": "Lukim dispela $1 aua $2 de",
"watchlist-options": "Ol laik bilong Lukautbuk",
"watching": "Wet liklik, i go insait long lukautbuk nau...",
"unwatching": "Wet liklik, i raus nau long lukautbuk...",
@@ -581,7 +581,6 @@
"metadata": "Metadata",
"exif-imagedescription": "Nem bilong piksa",
"exif-meteringmode-255": "Narapela",
- "watchlistall2": "olgeta",
"namespacesall": "ol",
"monthsall": "olgeta",
"scarytranscludetoolong": "[URL i longpela tumas]",
diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json
index 0adec185..a910adf9 100644
--- a/languages/i18n/tr.json
+++ b/languages/i18n/tr.json
@@ -61,7 +61,16 @@
"아라",
"Arystanbek",
"Sayginer",
- "Sucsuzz"
+ "Sucsuzz",
+ "Kafkasmurat",
+ "Violetanka",
+ "Trockya",
+ "Aşilleus",
+ "BatuhanBensoy",
+ "Mavrikant",
+ "Ayrıntılı Bilgi",
+ "Gokalpselamet",
+ "Macofe"
]
},
"tog-underline": "Bağlantıların altını çiz:",
@@ -78,6 +87,7 @@
"tog-watchdefault": "Düzenleme yaptığım sayfaları ve dosyaları izleme listeme ekle",
"tog-watchmoves": "Taşıdığım sayfaları ve dosyaları izleme listeme ekle",
"tog-watchdeletion": "Sildiğim sayfaları ve dosyaları izleme listeme ekle",
+ "tog-watchrollback": "Eski haline getirme kullandığım sayfaları izleme listeme ekle",
"tog-minordefault": "Varsayılan olarak bütün düzenlemeleri küçük olarak işaretle",
"tog-previewontop": "Ön izlemeyi düzenleme kutusunun üstünde göster",
"tog-previewonfirst": "İlk düzenlemede ön izlemeyi göster",
@@ -88,7 +98,7 @@
"tog-shownumberswatching": "İzleyen kullanıcı sayısını göster",
"tog-oldsig": "Mevcut imza:",
"tog-fancysig": "İmzaya vikimetin muamelesi yap (otomatik bir bağlantı olmadan)",
- "tog-uselivepreview": "Canlı önizlemeyi kullan (deneysel)",
+ "tog-uselivepreview": "Canlı ön izlemeyi kullan",
"tog-forceeditsummary": "Özeti boş bıraktığımda beni uyar",
"tog-watchlisthideown": "İzleme listemden düzenlemelerimi gizle",
"tog-watchlisthidebots": "İzleme listemden bot değişikliklerini gizle",
@@ -189,6 +199,7 @@
"index-category": "Dizinli sayfalar",
"noindex-category": "Dizinli olmayan sayfalar",
"broken-file-category": "Bozuk dosya bağlantıları içeren sayfalar",
+ "categoryviewer-pagedlinks": "($1) ($2)",
"about": "Hakkında",
"article": "İçerik sayfası",
"newwindow": "(yeni bir pencerede açılır)",
@@ -263,6 +274,7 @@
"otherlanguages": "Diğer dillerde",
"redirectedfrom": "($1 sayfasından yönlendirildi)",
"redirectpagesub": "Yönlendirme sayfası",
+ "redirectto": "Şuraya yönlendir:",
"lastmodifiedat": "Bu sayfa son olarak $1, $2 tarihinde güncellenmiştir.",
"viewcount": "Bu sayfaya {{PLURAL:$1|bir|$1 }} defa erişilmiş.",
"protectedpage": "Korumalı sayfa",
@@ -274,6 +286,8 @@
"pool-timeout": "Kilit için zaman bitimi bekleniyor",
"pool-queuefull": "Havuz sırası dolu",
"pool-errorunknown": "Bilinmeyen hata",
+ "pool-servererror": "Anket sayacı hizmeti kullanılamıyor ($1).",
+ "poolcounter-usage-error": "Kullanım hatası: $1",
"aboutsite": "{{SITENAME}} hakkında",
"aboutpage": "Project:Hakkında",
"copyright": "Aksi belirtilmedikçe içerik $1 altındadır.",
@@ -283,10 +297,11 @@
"disclaimers": "Sorumluluk reddi",
"disclaimerpage": "Project:Genel sorumluluk reddi",
"edithelp": "Nasıl değiştirilir?",
+ "helppage-top-gethelp": "Yardım",
"mainpage": "Ana Sayfa",
"mainpage-description": "Ana sayfa",
"policy-url": "Project:İlkeler",
- "portal": "Topluluk portalı",
+ "portal": "Topluluk portali",
"portal-url": "Project:Topluluk portali",
"privacy": "Gizlilik ilkesi",
"privacypage": "Project:Gizlilik ilkesi",
@@ -365,10 +380,13 @@
"readonly_lag": "Yedek sunucular ana sunucu ile güncellenmeye çalışılırken veritabanı otomatik olarak kilitlendi.",
"internalerror": "Yazılım hatası",
"internalerror_info": "İç hata: $1",
+ "internalerror-fatal-exception": "Tip \"$1\" hayati hata",
"filecopyerror": "\"$1\" \"$2\" dosyasına kopyalanamıyor.",
"filerenameerror": "\"$1\" dosyasının ismi \"$2\" olarak değiştirilemedi.",
"filedeleteerror": "\"$1\" dosyası silinemedi.",
"directorycreateerror": "\"$1\" dizini oluşturulamadı",
+ "directoryreadonlyerror": "\"$1\" dizini salt-okunur.",
+ "directorynotreadableerror": "\"$1\" dizini okunabilir değil.",
"filenotfound": "\"$1\" dosyası bulunamadı.",
"unexpected": "beklenmeyen değer: \"$1\"=\"$2\".",
"formerror": "Hata: Form gönderilemiyor",
@@ -390,7 +408,8 @@
"viewsourcetext": "Bu sayfanın kaynağını görebilir ve kopyalayabilirsiniz:",
"viewyourtext": "Bu sayfaya '''yaptığınız değişikliklerin''' kaynağını görünteleyip kopyalayabilirsiniz:",
"protectedinterface": "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır. Eklemek ya da bütün vikilerdeki çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
- "editinginterface": "'''UYARI:''' Wiki yazılımı için arayüz sağlamakta kullanılan bir sayfayı değiştirmektesiniz. Bu sayfadaki değişiklikler kullanıcı arayüzünü diğer kullanıcılar için de değiştirecektir. Çeviriler için, lütfen [//translatewiki.net/wiki/Main_Page?setlang=tr translatewiki.net]'yi kullanarak MediaWiki yerelleştirme projesini dikkate alınız.",
+ "editinginterface": "<strong>Uyarı:</strong> Yazılım için arayüz metni sağlayan bir sayfayı değiştiriyorsunuz.\nBu sayfada yapılacak değişiklikler diğer kullanıcıların vikilerindeki kullanıcı arayüzlerinin görünümünü de etkileyecektir.",
+ "translateinterface": "Tüm vikilerde çeviri eklemek veya çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesini [//translatewiki.net/] kullanın.",
"cascadeprotected": "Bu sayfa değişiklik yapılması engellenmiştir, çünkü \"kademeli\" seçeneği aktif hale getirilerek koruma altına alınan {{PLURAL:$1|sayfada|sayfada}} kullanılmaktadır:\n$2",
"namespaceprotected": "'''$1''' alandındaki sayfaları düzenlemeye izniniz bulunmamaktadır.",
"customcssprotected": "Bu sayfayı değiştirmeye yetkiniz bulunmamaktadır, çünkü bu sayfa başka bir kullanıcının kişisel ayarlarını içermektedir.",
@@ -405,7 +424,7 @@
"invalidtitle-knownnamespace": "\"$2\" alan adı için \"$3\" metni geçersiz bir başlık",
"invalidtitle-unknownnamespace": "Bilinmeyen $1 ad alanı sayısı ve geçersiz \"$2\" başlık",
"exception-nologin": "Giriş yapılmamış",
- "exception-nologin-text": "Bu sayfaya ya da eyleme erişmek için lütfen [[Special:Userlogin|oturum açın]].",
+ "exception-nologin-text": "Bu sayfaya ya da eyleme erişmek için lütfen oturum açın.",
"exception-nologin-text-manual": "Bu sayfaya ya da eyleme erişebilmek için lütfen $1ın.",
"virus-badscanner": "Yanlış ayarlama: bilinmeyen virüs tarayıcı: ''$1''",
"virus-scanfailed": "tarama başarısız (kod $1)",
@@ -447,6 +466,8 @@
"userlogin-resetlink": "Giriş bilgilerinizi mi unuttunuz?",
"userlogin-resetpassword-link": "Parolanızı mı unuttunuz?",
"userlogin-helplink2": "Oturum açma konusunda yardım alın",
+ "userlogin-loggedin": "Zaten {{GENDER:$1|$1}} olarak oturum açtınız.\nBaşka bir kullanıcı olarak oturum açmak için aşağıdaki formu kullanın.",
+ "userlogin-createanother": "Başka bir hesap oluşturun",
"createacct-emailrequired": "E-posta adresi",
"createacct-emailoptional": "E-posta adresi (isteğe bağlı)",
"createacct-email-ph": "E-posta adresinizi girin",
@@ -463,7 +484,7 @@
"createacct-benefit-heading": "{{SITENAME}} sizin gibi insanlar tarafından oluşturulur.",
"createacct-benefit-body1": "{{PLURAL:$1|düzenleme|düzenleme}}",
"createacct-benefit-body2": "{{PLURAL:$1|sayfa|sayfa}}",
- "createacct-benefit-body3": "en son {{PLURAL:$1|katkıda bulunan|katkıda bulunan}}",
+ "createacct-benefit-body3": "en son {{PLURAL:$1|katkıda bulunan|katkıda bulunan}} kişi sayısı",
"badretype": "Girdiğiniz şifreler birbirleriyle uyuşmuyor.",
"userexists": "Girdiğiniz kullanıcı adı zaten kullanımda.\nLütfen farklı bir kullanıcı adı seçiniz.",
"loginerror": "Oturum açma hatası.",
@@ -508,6 +529,7 @@
"createaccount-text": "Birisi {{SITENAME}} sitesinde ($4) sizin e-posta adresinizi kullarak, şifresi \"$3\" olan, \"$2\" isimli bir hesap oluşturdu.\n\nSiteye giriş yapmalı ve parolanızı değiştirmelisiniz.\n\nEğer kullanıcı hesabını yanlışlıkla oluşturmuş iseniz, bu mesajı yoksayabilirsiniz.",
"login-throttled": "Çok fazla yeni oturum açma girişiminde bulundunuz.\nDevam etmeden önce $1 bekleyin.",
"login-abort-generic": "Girişiniz başarısız - iptal edilmiş",
+ "login-migrated-generic": "Hesabınız aktarılmış ve kullanıcı adınız artık bu vikide yok.",
"loginlanguagelabel": "Dil: $1",
"suspicious-userlogout": "Çıkış isteğiniz reddedildi çünkü bozuk bir tarayıcı ya da önbellekli vekil tarafından gönerilmiş gibi görünüyor.",
"createacct-another-realname-tip": "Gerçek adınız isteğe bağlıdır.\nEğer gerçek adınızı belirtirseniz, çalışmalarınıza atıfta bulunulması için de kullanılacaktır.",
@@ -559,7 +581,6 @@
"passwordreset-emailsent-capture": "Aşağıda gözüktüğü gibi bir parola sıfırlama e-postası gönderildi.",
"passwordreset-emailerror-capture": "Aşağıda gözüktüğü gibi bir parola sıfırlama e-postası oluşturuldu ancak {{GENDER:$2|kullanıcıya}} gönderme işlemi başarısız oldu: $1",
"changeemail": "E-posta adresini değiştir",
- "changeemail-header": "Hesabın e-posta adresini değiştirin",
"changeemail-text": "E-posta adresinizi değiştirmek için bu formu doldurun. Değişikliği onaylamak için parolanızı girmeniz gerekecektir.",
"changeemail-no-info": "Bu sayfaya doğrudan erişmek için oturum açmanız gereklidir.",
"changeemail-oldemail": "Mevcut E-posta adresi:",
@@ -567,7 +588,6 @@
"changeemail-none": "(yok)",
"changeemail-password": "{{SITENAME}} parolanız:",
"changeemail-submit": "E-posta'yı değiştir",
- "changeemail-cancel": "İptal",
"changeemail-throttled": "Çok fazla oturum açma girişiminde bulundunuz.\nLütfen tekrar denemeden önce $1 bekleyin.",
"resettokens": "Anahtarları sıfırla",
"resettokens-text": "Burada hesabınızla ilişkili bazı özel verilere erişim izin anahtarları sıfırlayabilirsiniz.\n\n\nSiz yanlışlıkla bunları paylaştıysanız veya hesabınızda bir bozulma varsa bunu yapmalısınız.",
@@ -605,9 +625,10 @@
"showpreview": "Önizlemeyi göster",
"showdiff": "Değişiklikleri göster",
"blankarticle": "<strong>Uyarı:</strong> Oluşturduğunuz sayfa boş.\nEğer \"{{int:savearticle}}\" düğmesine tekrar tıklarsanız, sayfa içerik olmadan oluşturulacaktır.",
- "anoneditwarning": "'''Uyarı:''' Oturum açmadınız.\nIP adresiniz sayfanın değişiklik geçmişine kaydedilecektir.",
+ "anoneditwarning": "<strong>Uyarı:</strong> Giriş yapmadınız. Herhangi bir değişiklik yapmanız durumunda IP adresiniz herkese gözükecektir. Eğer <strong>[$1 giriş yaparsanız]</strong> veya <strong>[$2 bir hesap oluşturursanız]</strong>, edineceğiniz çeşitli yararların yanı sıra yaptığınız değişiklikler de kullanıcı adınıza atfedilecektir.",
"anonpreviewwarning": "''Giriş yapmadınız. Kaydederseniz, sayfanın değişiklik geçmişine IP adresiniz yazılır.''",
"missingsummary": "'''Uyarı:''' Herhangi bir özet yazmadın.\nKaydet tuşuna tekrar basarsan sayfa özetsiz kaydedilecek.",
+ "selfredirect": "<strong>Uyarı:</strong> Bu sayfanın kendisine yönlendirme vardır.\nYönlendirme için yanlış hedef belirtmiş olabilirsiniz, ya da yanlış sayfa düzenlemeye çalışmış olabilirsiniz.\n\n\"{{int:savearticle}}\" sayfasına tıklayarak, yönlendirmeyi zaten oluşturabilirsiniz.",
"missingcommenttext": "Lütfen aşağıda bir açıklama yazınız.",
"missingcommentheader": "'''Hatırlatma:''' Bu yorum için bir konu/başlık sunmadınız. Eğer \"{{int: savearticle}}\" tuşuna tekrar basarsanız, değişikliğiniz konu/başlık olmadan kaydedilecektir.",
"summary-preview": "Ön izleme özeti:",
@@ -706,6 +727,10 @@
"content-model-text": "düz metin",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Boş nesne",
+ "content-json-empty-array": "Boş dizi",
+ "duplicate-args-category": "Yinelenen şablon değişkenleri kullanan sayfalar",
+ "duplicate-args-category-desc": "Sayfada içeren şablonları çağırmak için bu terimler kullanılır <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Uyarı: Bu sayfa çok fazla zengin derleyici fonksiyonu çağrısı içeriyor.\n\nBu $2 çağrıdan az olmalı, şu anda {{PLURAL:$1|1 çağrı var|$1 çağrı var}}.",
"expensive-parserfunction-category": "Çok fazla zengin derleyici fonksiyonu çağrısına sahip sayfalar",
"post-expand-template-inclusion-warning": "'''Uyarı''': Şablon içeriği çok büyük.\nBazı şablonlar eklenemeyecek.",
@@ -738,7 +763,7 @@
"currentrev": "Güncel sürüm",
"currentrev-asof": "$1 itibarı ile sayfanın şu anki hâli",
"revisionasof": "$1 tarihindeki hâli",
- "revision-info": "$2 tarafından oluşturulmuş $1 tarihli sürüm",
+ "revision-info": "$2 tarafından oluşturulmuş $1 tarihli sürüm $7",
"previousrevision": "← Önceki hâli",
"nextrevision": "Sonraki hâli →",
"currentrevisionlink": "en güncel halini göster",
@@ -760,9 +785,10 @@
"history-feed-empty": "İstediğiniz sayfa bulunmamaktadır.\nSayfa vikiden silinmiş ya da ismi değiştirilmiş olabilir.\nKonu ile alakalı diğer sayfaları bulmak için [[Special:Search|vikide arama yapmayı]] deneyin.",
"rev-deleted-comment": "(düzenleme özeti silindi)",
"rev-deleted-user": "(kullanıcı adı silindi)",
- "rev-deleted-event": "(kayıt işlemi silindi)",
+ "rev-deleted-event": "(kayıt ayrıntıları silindi)",
"rev-deleted-user-contribs": "[kullanıcı adı veya IP adresi çıkarıldı - değişiklik katkılardan gizlendi]",
"rev-deleted-text-permission": "Bu sayfa revizyonu '''silinmiş'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Silme kayıtlarında] ayrıntıları bulunabilir.",
+ "rev-suppressed-text-permission": "Sayfanın bu sürümü <strong>gizlenmiştir</strong>.\nAyrıntılar: [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} suppression log].",
"rev-deleted-text-unhide": "Bu sayfa revizyonu '''silinmiş'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Silme kayıtlarında] ayrıntıları bulunabilir.\nBir hizmetli olarak eğer devam ederseniz [$1 bu revizyonu hala görebilirsiniz].",
"rev-suppressed-text-unhide": "Bu sayfa revizyonu '''bastırılmış'''.\n[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Durdurma kayıtlarında] ayrıntıları bulunabilir.\nBir hizmetli olarak eğer devam ederseniz [$1 bu revizyonu hala görebilirsiniz].",
"rev-deleted-text-view": "Bu sayfa revizyonu '''silinmiş'''.\nBir hizmetli olarak sayfayı görebilirsiniz; [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} silme kayıtlarında] ayrıntılar bulunabilir.",
@@ -786,12 +812,14 @@
"logdelete-selected": "{{PLURAL:$1|Seçili kayıt olayı|Seçili kayıt olayları}}:",
"revdelete-text-text": "Silinen sürümler sayfa geçmişinde yer almaya devam edecek ancak okuyucular tarafından içeriklerine erişilemeyecektir.",
"revdelete-text-file": "Silinen dosya sürümleri dosya geçmişinde yer almaya devam edecek ancak okuyucular tarafından içerik bölümlerine erişilemeyecektir.",
+ "logdelete-text": "Silinen dosya sürümleri dosya geçmişinde yer almaya devam edecek ancak okuyucular tarafından içerik bölümlerine erişilemeyecektir.",
+ "revdelete-text-others": "Ek kısıtlamalar konulmadıkça diğer yöneticiler silinen bir gizli içeriğe işlemi geri almak için erişebilecek.",
"revdelete-confirm": "Lütfen, bunu yapmak istediğinizi , sonuçlarını anladığınızı, ve bunu [[{{MediaWiki:Policy-url}}|ilkelere]] göre yapıyor olduğunuzu onaylayın.",
"revdelete-suppress-text": "Saklama '''sadece''' aşağıdaki durumlarda kullanılmalıdır:\n* Muhtemel iftira niteliğindeki bilgi\n* Uygunsuz kişisel bilgi\n*: ''ev adresleri ve telefon numaraları, sosyal güvenlik numaraları, vs.''",
"revdelete-legend": "Görünürlük kısıtlamaları ayarla",
"revdelete-hide-text": "Revizyon metni",
"revdelete-hide-image": "Dosya içeriğini gizle",
- "revdelete-hide-name": "Olayı ve hedefi gizle",
+ "revdelete-hide-name": "Hedef ve parametreleri gizle",
"revdelete-hide-comment": "Değişiklik özeti",
"revdelete-hide-user": "Editör'ün kullanıcı adı/IP adresi",
"revdelete-hide-restricted": "Verileri hizmetlilerle birlikte diğerlerinden de sakla",
@@ -843,8 +871,8 @@
"mergehistory-comment": "[[:$1]] ile [[:$2]] birleştirildi: $3",
"mergehistory-same-destination": "Kaynak ve hedef sayfaları aynı olamaz",
"mergehistory-reason": "Sebep:",
+ "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "Birleştirme kaydı",
- "pagemerge-logentry": "[[$1]] ile [[$2]] birleştirildi ($3'e kadar olan revizyonlar)",
"revertmerge": "Ayır",
"mergelogpagetext": "Aşağıdaki liste, sayfaların geçmiş versiyonlarının birbirleriyle en son birleştirilmelerini içerir",
"history-title": "\"$1\" sayfasının geçmişi",
@@ -885,17 +913,17 @@
"search-result-category-size": "{{PLURAL:$1|1 üye|$1 üye}} ({{PLURAL:$2|1 altkategori|$2 altkategori}}, {{PLURAL:$3|1 dosya|$3 dosya}})",
"search-redirect": "($1 sayfasından yönlendirme)",
"search-section": "($1 bölümü)",
+ "search-category": "(kategori $1)",
"search-file-match": "(dosya içeriğiyle eşleşiyor)",
"search-suggest": "Bunu mu demek istediniz: $1",
"search-interwiki-caption": "Kardeş projeler",
- "search-interwiki-default": "$1 sonuçlar:",
+ "search-interwiki-default": "$1 sonuçları:",
"search-interwiki-more": "(daha çok)",
"search-relatedarticle": "ilgili",
"searchrelated": "ilgili",
"searchall": "hepsi",
"showingresults": "$2. sonuçtan başlayarak {{PLURAL:$1|'''1''' sonuç |'''$1''' sonuç }} aşağıdadır:",
"showingresultsinrange": "<strong>$2</strong> ile <strong>$3</strong> arasında toplam <strong>$1</strong> sonuç gösteriliyor.",
- "showingresultsheader": "'''$4''' için {{PLURAL:$5|'''$3''' sonuçtan '''$1'''i|'''$1 - $2''' arası '''$3''' sonuç}}",
"search-nonefound": "Sorguyla eşleşen bir sonuç yok.",
"powersearch-legend": "Gelişmiş arama",
"powersearch-ns": "Ad alanlarında ara:",
@@ -909,7 +937,7 @@
"preferences": "Tercihler",
"mypreferences": "Tercihler",
"prefs-edits": "Değişiklik sayısı:",
- "prefsnologintext2": "Kullanıcı tercihlerini ayarlamak için lütfen $1ın.",
+ "prefsnologintext2": "Kullanıcı tercihlerini ayarlamak için lütfen oturum açın.",
"prefs-skin": "Görünüm",
"skin-preview": "Önizleme",
"datedefault": "Tercih yok",
@@ -918,6 +946,7 @@
"prefs-personal": "Kullanıcı bilgileri",
"prefs-rc": "Son değişiklikler",
"prefs-watchlist": "İzleme listesi",
+ "prefs-editwatchlist": "İzleme listesini düzenle",
"prefs-watchlist-days": "İzleme listesinde görüntülenecek gün sayısı:",
"prefs-watchlist-days-max": "en fazla $1 {{PLURAL:$1|gün|gün}}",
"prefs-watchlist-edits": "Genişletilmiş izleme listesinde gösterilecek değişiklik sayısı:",
@@ -972,7 +1001,9 @@
"youremail": "E-posta:",
"username": "{{GENDER:$1|Kullanıcı adı}}:",
"prefs-memberingroups": "{{GENDER:$2|Üye}} {{PLURAL:$1|group|grupları}}:",
+ "prefs-memberingroups-type": "$1",
"prefs-registration": "Kayıt zamanı:",
+ "prefs-registration-date-time": "$1",
"yourrealname": "Gerçek adınız:",
"yourlanguage": "Dil:",
"yourvariant": "İçerik dili türevi:",
@@ -981,13 +1012,13 @@
"prefs-help-signature": "Tartışma sayfalarındaki yorumlar \"<nowiki>~~~~</nowiki>\" ile imzalanmalıdır, bu imzanıza ve zaman damgasına dönüştürülür.",
"badsig": "Geçersiz ham imza; HTML etiketlerini kontrol edin.",
"badsiglength": "İmzanız çok uzun.\n$1 {{PLURAL:$1|karakterin|karakterin}} altında olmalı.",
- "yourgender": "Nasıl açıklamayı tercih edersiniz?",
- "gender-unknown": "Söylemek istemiyorsanız",
- "gender-male": "Viki sayfalarını erkek olarak düzenliyorum",
- "gender-female": "Viki sayfalarını kadın olarak düzenliyorum",
+ "yourgender": "Cinsel kimlik?",
+ "gender-unknown": "Açıklamak istemiyorum",
+ "gender-male": "Erkek",
+ "gender-female": "Kadın",
"prefs-help-gender": "Bu tercih ayarı isteğe bağlıdır.\nYazılımda söz değerlerinin başlarında bulunan cinsiyete uygun gramerler için kullanılır.\nBu bilgiler herkes tarafından görülebilir.",
"email": "E-posta",
- "prefs-help-realname": "* Gerçek isim (isteğe bağlı): eğer gerçek isminizi vermeyi seçerseniz, çalışmanızı size atfederken kullanılacaktır.",
+ "prefs-help-realname": "Gerçek ismi vermek isteğe bağlıdır.\nEğer verirseniz yaptığınız çalışmalara ithafen kullanılabilir.",
"prefs-help-email": "E-posta adresi isteğe bağlıdır; ancak parolanızı unutmanız durumunda parola sıfırlamak için gerekecektir.",
"prefs-help-email-others": "Ayrıca kullanıcı sayfanızdaki bir bağlantı yoluyla diğer kullanıcıların size e-posta atmasına izin vermeyi seçebilirsiniz.\nDiğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz açıklanmaz.",
"prefs-help-email-required": "E-posta adresi gerekmektedir.",
@@ -1008,6 +1039,7 @@
"prefs-tokenwatchlist": "Anahtar",
"prefs-diffs": "Farklar",
"prefs-help-prefershttps": "Bu tercih bir sonraki girişinizde etkili olacaktır.",
+ "prefswarning-warning": "Henüz kaydedilmemiş değişiklikler yaptınız. \"$\"'e basmadığınız takdirde tercihleriniz güncellenmeyecektir.",
"prefs-tabs-navigation-hint": "İpucu: Sekmeler listesindeki sekmeler arasında gezinmek için sağ ve sol ok tuşlarını kullanabilirsiniz.",
"email-address-validity-valid": "E-posta adresi geçerli görünüyor",
"email-address-validity-invalid": "Geçerli bir e-posta adresi girin",
@@ -1020,6 +1052,7 @@
"saveusergroups": "Kullanıcı grupları kaydet",
"userrights-groupsmember": "İçinde olduğu gruplar:",
"userrights-groupsmember-auto": "Saklı olarak içinde olduğu gruplar:",
+ "userrights-groupsmember-type": "$1",
"userrights-groups-help": "Bu kullanıcının içinde olduğu grupları değiştirebilirsiniz:\n* Seçili bir kutu, kullanıcının o gruba dahil olduğu anlamına gelir\n* Seçilmemiş bir kutu, kullanıcının o grupta olmadığı anlamına gelir.\n* *, grubu bir kez oluşturduktan sonra silemeceğinizi belirtir, ya da karşılıklı olarak.",
"userrights-reason": "Neden:",
"userrights-no-interwiki": "Diğer vikilerdeki kullanıcıların izinlerini değiştirmeye yetkiniz yok.",
@@ -1081,7 +1114,7 @@
"right-deletedtext": "Silinmiş metni ve silinmiş revizyonlar arasındaki değişiklikleri gör",
"right-browsearchive": "Silinen sayfaları ara",
"right-undelete": "Bir sayfanın silinmesini geri al",
- "right-suppressrevision": "Sysoplardan gizlenmiş revizyonları gözden geçir ve geri yükle",
+ "right-suppressrevision": "Sysoplardan gizlenmiş revizyonlarını gizle ve göster",
"right-suppressionlog": "Özel günlükleri gör",
"right-block": "Diğer kullanıcıların değişiklik yapmalarını engelle",
"right-blockemail": "Bir kullanıcının e-posta göndermesini engelle",
@@ -1092,6 +1125,7 @@
"right-protect": "Koruma düzeylerini değiştir ve kademeli korumalı sayfaları düzenle",
"right-editprotected": "\"{{int:protect-level-sysop}}\" olarak korunan sayfalarda değişiklik yap",
"right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" olarak korunan sayfalarda değişiklik yap",
+ "right-editcontentmodel": "Sayfanın içerik modelini düzenle",
"right-editinterface": "Kullanıcı arayüzünü değiştirmek",
"right-editusercssjs": "Diğer kullanıcıların CSS ve JS dosyalarında değişiklik yap",
"right-editusercss": "Diğer kullanıcıların CSS dosyalarında değişiklik yap",
@@ -1172,13 +1206,13 @@
"recentchanges-summary": "Yapılan en son değişiklikleri bu sayfadan izleyin.",
"recentchanges-noresult": "Belirtilen kriterlere uyan herhangi bir değişiklik bulunamadı.",
"recentchanges-feed-description": "Bu beslemede, viki'de yapılan en son değişiklikleri takip edin.",
- "recentchanges-label-newpage": "Bu değişiklikle yeni bir sayfa oluşturuldu",
+ "recentchanges-label-newpage": "Bu değişiklikle [[Special:NewPages|yeni bir sayfa]] oluşturuldu",
"recentchanges-label-minor": "Küçük değişiklik",
"recentchanges-label-bot": "Bir bot tarafından yapılan değişiklik",
"recentchanges-label-unpatrolled": "Bu değişiklik henüz gözlenmemiş",
"recentchanges-label-plusminus": "Sayfa boyutundaki değişikliğin bayt bazında değeri",
"recentchanges-legend-heading": "'''Gösterge:'''",
- "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca bakınız [[Special:NewPages|yeni sayfalar listesi]])",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}",
"rcnotefrom": "<strong>$2</strong> tarihinden itibaren yapılan değişiklikler aşağıdadır (en fazla <strong>$1</strong> tanesi gösterilmektedir).",
"rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
"rcshowhideminor": "Küçük değişiklikleri $1",
@@ -1391,6 +1425,7 @@
"license": "Lisans:",
"license-header": "Lisanslama",
"nolicense": "Hiçbirini seçme",
+ "licenses-edit": "Lisans seçeneklerini düzenle",
"license-nopreview": "(Önizleme etkin değil)",
"upload_source_url": "(geçerli, herkesin ulaşabileceği bir URL'den seçtiğiniz dosya)",
"upload_source_file": "(bilgisayarınızdan seçtiğiniz dosya)",
@@ -1442,6 +1477,7 @@
"uploadnewversion-linktext": "Dosyanın yenisini yükleyin",
"shared-repo-from": "$1'dan",
"shared-repo": "ortak bir havuz",
+ "shared-repo-name-wikimediacommons": "Wikimedia Commons'ta",
"upload-disallowed-here": "Bu dosyanın üzerine yazamazsınız.",
"filerevert": "$1 dosyasını eski haline döndür",
"filerevert-legend": "Dosyayı eski haline döndür",
@@ -1489,7 +1525,6 @@
"statistics": "İstatistikler",
"statistics-header-pages": "Sayfa istatistikleri",
"statistics-header-edits": "Değişiklik istatistikleri",
- "statistics-header-views": "Görüntüleme istatistikleri",
"statistics-header-users": "Kullanıcı istatistikleri",
"statistics-header-hooks": "Diğer istatistikler",
"statistics-articles": "Maddeler",
@@ -1498,13 +1533,9 @@
"statistics-files": "Yüklenmiş dosyalar",
"statistics-edits": "{{SITENAME}} kurulduğundan beri yapılan sayfa değişiklikleri",
"statistics-edits-average": "Her sayfadaki ortalama değişiklik",
- "statistics-views-total": "Toplam görüntüleme",
- "statistics-views-total-desc": "Varolmayan ve özel sayfaların görüntülenmeleri dahil edilmemiştir.",
- "statistics-views-peredit": "Değişiklik başına görüntüleme",
"statistics-users": "Kayıtlı [[Special:ListUsers|kullanıcılar]]",
"statistics-users-active": "Aktif kullanıcılar",
"statistics-users-active-desc": "Son {{PLURAL:$1|gün|$1 günde}} çalışma yapan kullanıcılar",
- "statistics-mostpopular": "En çok ziyaret edilen sayfalar",
"pageswithprop": "Bir sayfa özelliğine sahip sayfalar",
"pageswithprop-legend": "Bir sayfa özelliğine sahip sayfalar",
"pageswithprop-text": "Bu sayfa belirli bir sayfa özelliğini kullanan sayfaları listeler.",
@@ -1515,7 +1546,7 @@
"doubleredirects": "Çift yönlendirmeler",
"doubleredirectstext": "Bu sayfa diğer yönlendirme sayfalarına yönlendirme yapan sayfaları listeler.\nHer satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca ikinci yönlendirmenin hedefi, ki bu genelde birinci yönlendirmenin göstermesi gereken \"gerçek\" hedef sayfasıdır.\n<del>Üstü çizili</del> girdiler çözülmüştür.",
"double-redirect-fixed-move": "[[$1]] taşındı.\nYönlendirme otomatik olarak güncellendi ve [[$2]] sayfasına yönlendirildi.",
- "double-redirect-fixed-maintenance": "[[$1]] - [[$2]] yapılan çift yönlendirme düzeltiliyor.",
+ "double-redirect-fixed-maintenance": "[[$1]] sayfasından [[$2]] sayfasına yapılan çift yönlendirme otomatik olarak düzeltiliyor.",
"double-redirect-fixer": "Yönlendirme tamircisi",
"brokenredirects": "Boş yönlendirmeler",
"brokenredirectstext": "Aşağıdaki yönlendirmeler varolmayan sayfalara bağlantı veriyor:",
@@ -1545,13 +1576,13 @@
"uncategorizedtemplates": "Kategorisiz şablonlar",
"unusedcategories": "Kullanılmayan kategoriler",
"unusedimages": "Kullanılmayan dosyalar",
- "popularpages": "Popüler sayfalar",
"wantedcategories": "İstenen kategoriler",
"wantedpages": "İstenen sayfalar",
"wantedpages-badtitle": "Sonuç kümesinde geçersiz başlık: $1",
"wantedfiles": "İstenen dosyalar",
"wantedfiletext-cat": "Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>. Ek olarak, varolmayan dosyaları gömen sayfalar [[:$1]] sayfasında listelenmiştir.",
"wantedfiletext-nocat": "Aşağıdaki dosyalar kullanılıyor ama mevcut değil. Yabancı depolardaki dosyalar, varolsalar bile gösterilebilir. Böyle yanlış pozitiflerin <del>üstü çizilecektir</del>.",
+ "wantedfiletext-nocat-noforeign": "Aşağıdaki dosyalar kullanıyor ancak mevcut değil.",
"wantedtemplates": "İstenen şablonlar",
"mostlinked": "Kendisine en fazla bağlantı verilmiş sayfalar",
"mostlinkedcategories": "En çok maddeye sahip kategoriler",
@@ -1605,9 +1636,12 @@
"pager-older-n": "$1 daha eski",
"suppress": "Gözetim",
"querypage-disabled": "Bu özel sayfa, performansa dayalı nedenlerle devre dışı bırakılır.",
+ "apihelp": "API yardımı",
+ "apihelp-no-such-module": "\"$1\" modülü bulunamadı.",
"booksources": "Kaynak kitaplar",
"booksources-search-legend": "Kitap kaynaklarını ara",
- "booksources-go": "Git",
+ "booksources-isbn": "ISBN:",
+ "booksources-search": "Ara",
"booksources-text": "Aşağıdaki, yeni ve kullanılmış kitap satan diğer sitelere bağlantıların listesidir, ve aradığınız kitaplar hakkında daha fazla bilgiye sahip olabilirler:",
"booksources-invalid-isbn": "Verilen ISBN geçersiz gibi görünüyor; orijinal kaynaktan kopyalama hataları için kontrol edin.",
"specialloguserlabel": "Kullanıcı:",
@@ -1674,7 +1708,10 @@
"listgrouprights-removegroup-self": "Kendi hesabından {{PLURAL:$2|grup|grupları}} çıkarabilir: $1",
"listgrouprights-addgroup-self-all": "Kendi hesabına tüm grupları ekleyebilir",
"listgrouprights-removegroup-self-all": "Kendi hesabından tüm grupları çıkarabilir",
+ "listgrouprights-namespaceprotection-restrictedto": "Kullanıcının değişiklik yapmasına izin veren hak(lar)",
+ "broken-file-category-desc": "Sayfa bozuk dosya bağlantısı (mevcut olmayan bir dosyayı kullanmaya çalışan bağlantı) içeriyor.",
"trackingcategories-nodesc": "Açıklama yok.",
+ "trackingcategories-disabled": "Kategori devre dışı",
"mailnologin": "Gönderi adresi yok.",
"mailnologintext": "Diğer kullanıcılara e-posta gönderebilmeniz için [[Special:UserLogin|oturum aç]]malısınız ve [[Special:Preferences|tercihler]] sayfasında geçerli bir e-posta adresiniz olmalı.",
"emailuser": "Bu kullanıcıya e-posta gönder",
@@ -1709,7 +1746,7 @@
"mywatchlist": "İzleme listesi",
"watchlistfor2": "$1 için $2",
"nowatchlist": "İzleme listesinde hiçbir madde bulunmuyor.",
- "watchlistanontext": "Lütfen izleme listenizdeki maddeleri görmek ya da değiştirmek için $1.",
+ "watchlistanontext": "Lütfen izleme listenizdeki maddeleri görmek ya da değiştirmek için oturum açın.",
"watchnologin": "Oturum açık değil.",
"addwatch": "İzleme listesine ekle",
"addedwatchtext": "\"[[:$1]]\" sayfası [[Special:Watchlist|izleme listenize]] eklenmiştir.\nBundan sonra, bu sayfaya ve ilgili tartışma sayfasına yapılacak değişiklikler burada listelenecek.",
@@ -1727,7 +1764,7 @@
"wlheader-enotif": "E-posta bildirimi etkin.",
"wlheader-showupdated": "Sayfaları son ziyaretinizden beri değişen sayfalar '''kalın''' gösterilmiştir.",
"wlnote": "$3 saat $4 itibariyle son {{PLURAL:$2|bir saatte|'''$2''' saatte}} yapılan {{PLURAL:$1|son değişiklik|son '''$1''' değişiklik}} aşağıdadır.",
- "wlshowlast": "Son $1 saati $2 günü göster $3",
+ "wlshowlast": "Son $1 saati $2 günü göster",
"watchlist-options": "İzleme listesi seçenekleri",
"watching": "İzleniyor...",
"unwatching": "İzlenmiyor...",
@@ -1776,7 +1813,6 @@
"deleteprotected": "Bu sayfayı silemezsiniz çünkü sayfa korumaya alınmış.",
"deleting-backlinks-warning": "'''Uyarı:''' Silmek üzere olduğunuz sayfaya [[Özel:SayfayaBağlantılar/{{FULLPAGENAME}}|başka sayfalardan]] bağlantılar var veya sayfanın bazı bölümleri başka sayfalar tarafından alıntı olarak kullanılıyor.",
"rollback": "değişiklikleri geri al",
- "rollback_short": "geri al",
"rollbacklink": "geri döndür",
"rollbacklinkcount": "$1 {{PLURAL:$1|değişikliği|değişikliği}} geri döndür",
"rollbacklinkcount-morethan": "$1 {{PLURAL:$1|değişiklikten|değişiklikten}} fazla geri döndür",
@@ -1826,6 +1862,7 @@
"protect-othertime": "Farklı zaman:",
"protect-othertime-op": "farklı zaman",
"protect-existing-expiry": "Mevcut bitiş zamanı: $3, $2",
+ "protect-existing-expiry-infinity": "Mevcut sona erme zamanı: sonsuz",
"protect-otherreason": "Diğer/ilave gerekçe:",
"protect-otherreason-op": "Diğer gerekçe",
"protect-dropdown": "*Genel koruma gerekçeleri\n** Aşırı vandalizm\n** Aşırı spam\n** Değişiklik savaşı\n** Yüksek trafiğe sahip sayfa",
@@ -2057,6 +2094,7 @@
"movepagetalktext": "İlişikteki tartışma sayfası da (eğer varsa) otomatik olarak yeni isme taşınacaktır. Ama şu durumlarda '''taşınmaz''':\n\n*Alanlar arası bir taşıma ise, (örnek: \"Project:\" --> \"Help:\")\n*Yeni isimde bir tartışma sayfası zaten var ise,\n*Alttaki kutucuğu seçmediyseniz.\n\nBu durumlarda sayfayı kendiniz aktarmalısınız.",
"movearticle": "Eski isim",
"moveuserpage-warning": "'''Uyarı:''' Bir kullanıcı sayfasını taşımak üzeresiniz. Lütfen sadece sayfanın taşınacağına, ancak kullanıcının yeniden ''adlandırılmayacağına'' dikkat edin.",
+ "movecategorypage-warning": "<strong>Uyarı:</strong> Bir kategori sayfasını taşımak üzeresiniz. Lütfen yalnızca sayfanın taşınacağını ve eski kategoride yer alan sayfaların yeniden kategorize <em>edilmeyeceğini</em> unutmayın.",
"movenologintext": "Sayfanın adını değiştirebilmek için kayıtlı ve [[Special:UserLogin|sisteme]] giriş yapmış olmanız gerekmektedir.",
"movenotallowed": "Sayfaları taşımaya izniniz yok.",
"movenotallowedfile": "Sayfaları taşımaya izniniz yok.",
@@ -2189,7 +2227,7 @@
"import-error-create": "\"$1\" sayfası içe aktarılamadı çünkü sayfayı oluşturmaya yetkiniz yok.",
"import-error-interwiki": "\"$1\" sayfası içe aktarılamadı çünkü sayfanın adı dış bağlantı için ayrılmış (vikilerarası).",
"import-error-special": "\"$1\" sayfası içe aktarılamadı çünkü sayfalara izin vermeyen özel bir ad alanına ait.",
- "import-error-invalid": "\"$1\" sayfası içe aktarılamadı çünkü sayfa adı geçersiz.",
+ "import-error-invalid": "\"$1\" sayfası içe aktarılamadı çünkü sayfa adı bu vikide geçersiz.",
"import-error-unserialize": "\"$1\" sayfasının $2 revizyonu serileştirilmesi geri alınamıyor. Revizyonun $4 olarak serileştirilmiş $3 içerik modelini kullandığı raporlandı.",
"import-error-bad-location": "\"$1\" sayfası için $3 içerik modelini kullanan $2 revizyonu, model sayfada desteklenmediğinden, bu vikide saklanamıyor.",
"import-options-wrong": "Yanlış {{PLURAL:$2|seçenek|seçenek}}: <nowiki>$1</nowiki>",
@@ -2197,20 +2235,17 @@
"import-rootpage-nosubpage": "Kök sayfanın \"$1\" ad alanı alt sayfalara izin vermiyor.",
"importlogpage": "Aktarım günlüğü",
"importlogpagetext": "Diğer vikilerden sayfaların değişiklik geçmişiyle idari içe aktarımları.",
- "import-logentry-upload": "[[$1]] dosya yüklemesiyle içe aktarıldı",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizyon|revizyon}}",
- "import-logentry-interwiki": "$1 transvikileşmiş",
- "import-logentry-interwiki-detail": "$2 sayfasından $1 {{PLURAL:$1|revizyon|revizyon}}",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revizyon|revizyon}} içe aktarıldı",
+ "import-logentry-interwiki-detail": "$2 sayfasından $1 {{PLURAL:$1|revizyon|revizyon}} içe aktarıldı",
"javascripttest": "JavaScript denemesi",
- "javascripttest-title": "$1 testleri çalışıyor",
"javascripttest-pagetext-noframework": "Bu sayfa JavaScript testleri çalıştırmak için ayrılmıştır.",
"javascripttest-pagetext-unknownframework": "Bilinmeyen test çerçevesi \"$1\".",
+ "javascripttest-pagetext-unknownaction": "Bilinmeyen eylem \"$1\".",
"javascripttest-pagetext-frameworks": "Lütfen aşağıdaki test çerçevelerinden birini seçin: $1",
"javascripttest-pagetext-skins": "Testleri koşmak için bir tema seçin:",
"javascripttest-qunit-intro": "mediawiki.org üzerinden [$1 deneme belgelerine] bakınız.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit deneme paketi",
"tooltip-pt-userpage": "Kullanıcı sayfanız",
- "tooltip-pt-anonuserpage": "The user page for the ip you",
+ "tooltip-pt-anonuserpage": "IP adresine ait bir kullanıcı sayfasını düzenliyorsunuz",
"tooltip-pt-mytalk": "Mesaj sayfanız",
"tooltip-pt-anontalk": "Bu IP adresinden yapılmış değişiklikleri tartış",
"tooltip-pt-preferences": "Tercihleriniz (ayarlarınız)",
@@ -2218,6 +2253,7 @@
"tooltip-pt-mycontris": "Katkılarınızın listesi",
"tooltip-pt-login": "Oturum açmanızı tavsiye ederiz; ancak zorunda değilsiniz",
"tooltip-pt-logout": "Sistemden çık",
+ "tooltip-pt-createaccount": "Bir hesap oluşturup oturum açmanız tavsiye edilmektedir ancak bu zorunlu değildir",
"tooltip-ca-talk": "İçerik ile ilgili tartışma",
"tooltip-ca-edit": "Bu sayfayı değiştirebilirsiniz. Lütfen kaydetmeden önce önizleme düğmesini kullanın.",
"tooltip-ca-addsection": "Yeni bir altbaşlık aç",
@@ -2247,6 +2283,7 @@
"tooltip-feed-atom": "Bu sayfa için atom beslemesi",
"tooltip-t-contributions": "Kullanıcının katkılarının listesini gör",
"tooltip-t-emailuser": "Bu kullanıcıya e-posta gönder",
+ "tooltip-t-info": "Bu sayfa hakkında daha fazla bilgi",
"tooltip-t-upload": "Dosya yükle",
"tooltip-t-specialpages": "Tüm özel sayfaların listesi",
"tooltip-t-print": "Bu sayfanın basılmaya uygun sürümü",
@@ -2310,7 +2347,6 @@
"pageinfo-robot-policy": "Robotlar tarafından endeksleniyor",
"pageinfo-robot-index": "İzin verilmiş",
"pageinfo-robot-noindex": "İzin verilmedi",
- "pageinfo-views": "Görüntülenme sayısı",
"pageinfo-watchers": "Sayfanın izleyici sayısı",
"pageinfo-few-watchers": "$1 {{PLURAL:$1|izleyiciden|izleyiciden}} az",
"pageinfo-redirects-name": "Bu sayfaya yönlendirme sayısı",
@@ -2783,7 +2819,6 @@
"exif-urgency-low": "Düşük ( $1 )",
"exif-urgency-high": "Yüksek ( $1 )",
"exif-urgency-other": "Kullanıcı tanımlı öncelik ($1)",
- "watchlistall2": "Hepsini göster",
"namespacesall": "hepsi",
"monthsall": "hepsi",
"confirmemail": "E-posta adresini onayla",
@@ -2821,6 +2856,7 @@
"confirm-unwatch-button": "TAMAM",
"confirm-unwatch-top": "Bu sayfayı izleme listenizden çıkarın",
"percent": "%$1",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← önceki sayfa",
"imgmultipagenext": "sonraki sayfa →",
"imgmultigo": "Git!",
@@ -2875,7 +2911,6 @@
"hijri-calendar-m9": "Ramazan",
"hijri-calendar-m10": "Şevval",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|mesaj]])",
- "unknown_extension_tag": "Bilinmeyen eklenti etiketi \"$1\"",
"duplicate-defaultsort": "'''Uyarı:''' Varsayılan \"$2\" sınıflandırma anahtarı, önceki \"$1\" sınıflandırma anahtarını geçersiz kılıyor.",
"version": "Sürüm",
"version-extensions": "Yüklü ekler",
@@ -2891,7 +2926,7 @@
"version-parser-function-hooks": "Derleyici fonksiyon çengelleri",
"version-hook-name": "Çengel adı",
"version-hook-subscribedby": "Abone olan",
- "version-version": "($1 sürümü)",
+ "version-version": "($1)",
"version-no-ext-name": "[isim yok]",
"version-license": "MediaWiki Lisansı",
"version-ext-license": "Lisans",
@@ -2916,6 +2951,9 @@
"version-entrypoints": "Giriş noktası URL'leri",
"version-entrypoints-header-entrypoint": "Giriş noktası",
"version-entrypoints-header-url": "URL",
+ "version-libraries": "Yüklü kütüphaneler",
+ "version-libraries-library": "Kütüphane",
+ "version-libraries-version": "Sürüm",
"redirect": "Dosya, kullanıcı, sayfa ya da revizyon kimliği ile yönlendirme",
"redirect-legend": "Bir dosya veya sayfaya yönlendirme",
"redirect-summary": "Bu özel sayfa sizi bir dosya (dosya adı verilen), bir sayfa (bir revizyon ya da sayfa ID'si verilen) veya bir kullanıcı sayfasının (sayısal kullanıcı kimliği verilen) adresine yönlendirir. Kullanım: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ya da [[{{#Special:Redirect}}/user/101]].",
@@ -2951,6 +2989,7 @@
"specialpages-group-wiki": "Veri ve araçlar",
"specialpages-group-redirects": "Yönlendirmeli özel sayfalar",
"specialpages-group-spam": "Spam araçları",
+ "specialpages-group-developer": "Geliştirici araçları",
"blankpage": "Boş sayfa",
"intentionallyblankpage": "Bu sayfa özellikle boştur.",
"external_image_whitelist": " #Bu satırı olduğu gibi bırakın<pre>\n#Düzenli ifade parçalarını (sadece // arasında kalan kısmı) aşağıya ekleyin\n#Bunlar harici (hotlink) resimlerin URLleri ile eşlenecektir\n#Eşleşenler resim olarak görünecek, aksi takdirde sadece resme bir bağlantı görünecektir\n# # ile başlayan satırlar yorum olarak muamele görecektir\n#Büyük-küçük harf duyarsızdır\n\n#Bütün düzenli ifade parçalarını bu satırın üstüne ekleyin. Bu satırı olduğu gibi bırakın</pre>",
@@ -2981,7 +3020,7 @@
"dberr-problems": "Üzgünüz! Bu site teknik zorluklar yaşıyor.",
"dberr-again": "Bir kaç dakika bekleyip tekrar yüklemeyi deneyin.",
"dberr-info": "(Veritabanı sunucusuyla irtibat kurulamıyor: $1)",
- "dberr-info-hidden": "(Veritabanı sunucusuna bağlantı kurulamıyor)",
+ "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.",
@@ -3022,6 +3061,9 @@
"revdelete-uname-unhid": "kullanıcı adı gösterildi",
"revdelete-restricted": "hizmetliler için uygulanmış kısıtlamalar",
"revdelete-unrestricted": "hizmetliler için kaldırılmış kısıtlamalar",
+ "logentry-block-block": "$1 {{GENDER:$2|engelledi}} {{GENDER:$4|$3}} engelleme süresi: $5 $6",
+ "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6",
"logentry-move-move": "$1, $3 sayfasını $4 sayfasına {{GENDER:$2|taşıdı}}",
"logentry-move-move-noredirect": "$1, $3 sayfasını $4 sayfasına yönlendirme olmaksızın {{GENDER:$2|taşıdı}}",
"logentry-move-move_redir": "$1, $3 sayfasını $4 sayfasına yönlendirme üzerinden {{GENDER:$2|taşıdı}}",
@@ -3039,19 +3081,21 @@
"logentry-upload-upload": "$1 {{GENDER:$2|yükledi}} $3",
"logentry-upload-overwrite": "$1 $3 dosyasının yeni bir sürümünü {{GENDER:$2|yükledi}}",
"rightsnone": "(hiçbiri)",
+ "revdelete-summary": "değişiklik özeti",
+ "feedback-adding": "Sayfaya geribildirim ekleniyor...",
+ "feedback-back": "Geri",
+ "feedback-bugcheck": "Harika! Sadece [bilinen $1 hatalarından] olmadığını kontrol et.",
+ "feedback-bugnew": "Kontrol ettim. Yeni hata bildir",
"feedback-bugornote": "Eğer teknik bir problemi detaylarıyla açıklamaya hazırsanız lütfen [$1 bir hata raporlayın]. Diğer taraftan, aşağıdaki kolay formu kullanabilirsiniz. Yorumunuz, kullanıcı adınızla beraber \"[$3 $2]\" sayfasına eklenecektir.",
- "feedback-subject": "Konu:",
- "feedback-message": "Mesaj:",
"feedback-cancel": "İptal",
- "feedback-submit": "Geribildirimi Gönder",
- "feedback-adding": "Sayfaya geribildirim ekleniyor...",
+ "feedback-close": "Tamamlandı",
"feedback-error1": "Hata: Bilinmeyen API sonucu",
"feedback-error2": "Hata: Düzenleme başarısız oldu",
"feedback-error3": "Hata: API'den yanıt yok",
+ "feedback-message": "Mesaj:",
+ "feedback-subject": "Konu:",
+ "feedback-submit": "Gönder",
"feedback-thanks": "Teşekkürler! Görüşleriniz \"[$2 $1]\" sayfasında paylaşılmıştır.",
- "feedback-close": "Tamamlandı",
- "feedback-bugcheck": "Harika! Sadece [bilinen $1 hatalarından] olmadığını kontrol et.",
- "feedback-bugnew": "Kontrol ettim. Yeni hata bildir",
"searchsuggest-search": "Ara",
"searchsuggest-containing": "içeren...",
"api-error-badaccess-groups": "Bu wiki için dosya yüklemenize izin verilmiyor.",
@@ -3137,5 +3181,53 @@
"pagelang-use-default": "Varsayılan dili kullan",
"pagelang-select-lang": "Dil seçin",
"right-pagelang": "Sayfa dilini değiştir",
- "action-pagelang": "sayfa dilini değiştir"
+ "action-pagelang": "sayfa dilini değiştir",
+ "log-name-pagelang": "Dil günlüğünü değiştir",
+ "logentry-pagelang-pagelang": "$1, $3 sayfasının dilini $4 dilinden $5 diline {{GENDER:$2|çevirdi}}.",
+ "mediastatistics": "Medya istatistikleri",
+ "mediastatistics-summary": "Karşıya yüklenen dosya türlerine ilişkin istatistikler. Bu yalnızca bir dosyanın en son sürümünü içerir. Eski veya silinen dosyala sürümleri hariç tutulur.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 byte}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME türü",
+ "mediastatistics-table-extensions": "Olası uzantılar",
+ "mediastatistics-table-count": "Dosya sayısı",
+ "mediastatistics-table-totalbytes": "Toplam boyut",
+ "mediastatistics-header-unknown": "Bilinmeyen",
+ "mediastatistics-header-bitmap": "Bitmap görüntüleri",
+ "mediastatistics-header-drawing": "Çizimler (vektör görüntüler)",
+ "mediastatistics-header-audio": "Ses",
+ "mediastatistics-header-video": "Videolar",
+ "mediastatistics-header-multimedia": "Zengin medya",
+ "mediastatistics-header-office": "Ofis",
+ "mediastatistics-header-text": "Metin türü",
+ "mediastatistics-header-executable": "Yürütülebilir dosyalar",
+ "mediastatistics-header-archive": "Sıkıştırılmış biçimler",
+ "json-warn-trailing-comma": "$1 takip eden {{PLURAL:$1|virgül|virgüller}} JSON'dan kaldırılmıştır.",
+ "json-error-unknown": "JSON ile ilgili bir sorun oluştu. Hata:$1",
+ "json-error-depth": "Azami yığın derinliği aşıldı",
+ "json-error-state-mismatch": "Geçersiz veya hatalı biçimlendirilmiş JSON",
+ "json-error-ctrl-char": "Kontrol karakteri hatası, muhtemelen yanlış kodlanmış",
+ "json-error-syntax": "Sözdizimi hatası",
+ "json-error-utf8": "Hatalı biçimlendirilmiş UTF-8 karakterleri bulundu, muhtemelen yanlış kodlanmış",
+ "json-error-recursion": "Kodlanacak değeri bir veya daha fazla tekrarlı başvurular",
+ "json-error-inf-or-nan": "Değerde kodlanacak bir veya daha fazla NAN veya INF değerleri",
+ "json-error-unsupported-type": "Kodlanamaz bir değer çeşidi girildi",
+ "headline-anchor-title": "Bu bölüme bağlantı",
+ "special-characters-group-latin": "Latin",
+ "special-characters-group-latinextended": "Genişletilmiş Latince",
+ "special-characters-group-ipa": "UFA",
+ "special-characters-group-symbols": "Simgeler",
+ "special-characters-group-greek": "Yunan",
+ "special-characters-group-cyrillic": "Kiril",
+ "special-characters-group-arabic": "Arap",
+ "special-characters-group-arabicextended": "Genişletilmiş Arapça",
+ "special-characters-group-persian": "Fars",
+ "special-characters-group-hebrew": "İbrani",
+ "special-characters-group-bangla": "Bengalce",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gücerat",
+ "special-characters-group-thai": "Tay",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Kmer"
}
diff --git a/languages/i18n/tru.json b/languages/i18n/tru.json
index fbb3d9b8..5d532fcf 100644
--- a/languages/i18n/tru.json
+++ b/languages/i18n/tru.json
@@ -318,7 +318,6 @@
"search-interwiki-more": "(heşa)",
"searchrelated": "related",
"searchall": "kulle",
- "showingresultsheader": "{{PLURAL:$5|Nafqo '''$1''' of '''$3'''|Nafqe '''$1 - $2''' men '''$3'''}} l'''$4'''",
"search-nonefound": "Für deine Suchanfrage wurden keine Ergebnisse gefunden.",
"powersearch-togglelabel": "Sım Qontrol:",
"powersearch-toggleall": "Kulle",
@@ -424,7 +423,6 @@
"pager-older-n": "{{PLURAL:$1|3atiqo1|3atiqe $1}}",
"booksources": "Kruxyo baNumarat duISBN",
"booksources-search-legend": "Krax Mabu³e me Kṭowe",
- "booksources-go": "Zux",
"log": "Logs",
"allpages": "aFaṭaṭe kulle",
"allarticles": "aFaṭaṭe kulle",
@@ -451,7 +449,7 @@
"watch": "Watch",
"unwatch": "Unwatch",
"watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not counting talk pages.",
- "wlshowlast": "Maḥway li aŞuḥlofe dıtsimi meqım $1 Sa³ayat $2 Yawme $3",
+ "wlshowlast": "Maḥway li aŞuḥlofe dıtsimi meqım $1 Sa³ayat $2 Yawme",
"watchlist-options": "Watchlist options",
"actioncomplete": "uDuboro kamıl",
"actionfailed": "Action failed",
@@ -588,7 +586,6 @@
"exif-writer": "Kaṭowo",
"exif-languagecode": "Leşono",
"exif-cameraownername": "uMoro diQamera",
- "watchlistall2": "kulle",
"namespacesall": "kulle",
"monthsall": "kulle",
"watchlisttools-view": "View relevant changes",
diff --git a/languages/i18n/ts.json b/languages/i18n/ts.json
index 91da0bb0..c38423b4 100644
--- a/languages/i18n/ts.json
+++ b/languages/i18n/ts.json
@@ -398,7 +398,6 @@
"searchrelated": "Yelanaka",
"searchall": "Hinkwaswo",
"showingresults": "Kombisa e hansi kufika eka {{PLURAL:$1|'''1''' mbuyelo|'''$1''' mimbuyelo}} Kusungula hi#'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|nkutlunya '''$1''' wa '''$3''' lowu|minkutlunya '''$1 - $2''' ya '''$3''' leyi}} yelanaka na '''$4'''",
"search-nonefound": "Kuhava mimbuyelo leyi yelanaka xikombelo lexi.",
"mypreferences": "Minhlawulo ya mina",
"prefs-edits": "Ntsengo wa mindzulamiso:",
@@ -500,7 +499,6 @@
"pager-older-n": "{{PLURAL:$1|ra khale|$1 ya khale}}",
"booksources": "Swihlovo swatibuku",
"booksources-search-legend": "Lavalava swihlovo swa tibuku",
- "booksources-go": "Nghena",
"specialloguserlabel": "Mutirhisi:",
"log": "Nghula ya minxaxamelo",
"allpages": "Matluka hinkwawo",
@@ -518,7 +516,7 @@
"watchthispage": "Languta tluka leri",
"unwatch": "Ungalanguti",
"watchlist-details": "{{PLURAL:$1|$1 tluka|$1 wa matluka}} eka nxaxamelo wa leswi uswilanguteke, kungasi hlayiwa matluka yu mbulavulo.",
- "wlshowlast": "Komba $1 wati awara $2 wa masiku kumbe $3",
+ "wlshowlast": "Komba $1 wati awara $2 wa masiku kumbe",
"watchlist-options": "Minhlawulo ya nxaxamelo wa leswilangutiweke",
"watching": "Ulangutile...",
"unwatching": "Utshika ku languta...",
@@ -646,7 +644,6 @@
"metadata": "Nghula ya vuxokoxoko",
"metadata-help": "Fayili leyi yi khome vuxokoxoko lebyi engetelekeke, swingaendleka yi hoxiwile kusuka eka Khemera kumbe muchini wo gandlisa lowu tirhisiweke ku yi tumbuluxa.\nLoko fayili yi antswisiwile kusukela eka matshamelo ya yona yo sungula, vuxokoxoko bya yona byinga va byi cincile.",
"metadata-fields": "Vuxokoxoko bya xifaniso lexi nga eka hungu leri byi ta kombiwa eka tluka leri kombaka xifaniso lexi loko tafula ra nxaxamela wa vuxokoxoko ri pfariwa.\nLebyi n'wana vuxokoxoko bya finiso byitumbetiwile.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "Hinkwawo",
"namespacesall": "Hinkwawo",
"monthsall": "hikwato",
"watchlisttools-view": "Vona kucinca loku yelanaka",
diff --git a/languages/i18n/tt-cyrl.json b/languages/i18n/tt-cyrl.json
index 889cfff7..49d66ac3 100644
--- a/languages/i18n/tt-cyrl.json
+++ b/languages/i18n/tt-cyrl.json
@@ -21,7 +21,8 @@
"Рашат Якупов",
"Умар",
"아라",
- "Derslek"
+ "Derslek",
+ "Macofe"
]
},
"tog-underline": "Сылтамаларның астына сызу:",
@@ -29,11 +30,11 @@
"tog-hidepatrolled": "Тикшерелгән үзгәртүләр яңа үзгәртүләр исемлегеннән яшерелсен.",
"tog-newpageshidepatrolled": "Тикшерелгән битләр яңа битләр исемлегеннән яшерелсен",
"tog-extendwatchlist": "Соңгыларын гына түгел, ә барлык үзгәртүләрне эченә алган, киңәйтелгән күзәтү исемлеге",
- "tog-usenewrc": "Соңгы үзгәртүләрдә һәм күзәтү исемлегендә үзгәрешләрне төркемләргә(JavaScript кирәк)",
+ "tog-usenewrc": "Соңгы үзгәртүләрдә һәм күзәтү исемлегендә үзгәрешләрне төркемләргә",
"tog-numberheadings": "Атамалар автомат рәвештә номерлансын",
- "tog-showtoolbar": "Үзгәртү вакытында коралларның өске панеле күрсәтелсен (JavaScript кирәк)",
- "tog-editondblclick": "Битләргә ике чирттерү белән үзгәртү бите ачылсын (JavaScript кирәк)",
- "tog-editsectiononrightclick": "Бүлек исеменә тычканның уң чирттермәсе белән төрткәч үзгәртү бите ачылсын (JavaScript кирәк)",
+ "tog-showtoolbar": "Үзгәртү вакытында коралларның өске панеле күрсәтелсен",
+ "tog-editondblclick": "Битләргә ике чирттерү белән үзгәртү бите ачылсын",
+ "tog-editsectiononrightclick": "Бүлек исеменә тычканның уң чирттермәсе белән төрткәч үзгәртү",
"tog-watchcreations": "Мин төзегән битләр һәм йөкләгән файллар күзәтү исемлегемә өстәлсен",
"tog-watchdefault": "Мин үзгәрткән битләр һәм файллар күзәтү исемлегемә өстәлсен",
"tog-watchmoves": "Мин күчергән битләр һәм файллар күзәтү исемлегемә өстәлсен",
@@ -48,7 +49,7 @@
"tog-shownumberswatching": "Битне күзәтү исемлекләренә өстәгән кулланучылар санын күрсәтелсен",
"tog-oldsig": "Хәзерге имза:",
"tog-fancysig": "Имзаның шәхси вики-билгеләмәсе (автоматик сылтамасыз)",
- "tog-uselivepreview": "Тиз карап алу кулланылсын (JavaScript, эксперименталь)",
+ "tog-uselivepreview": "Тиз карап алуны куллану",
"tog-forceeditsummary": "Үзгәртүләрне тасвирлау юлы тутырылмаган булса, кисәтү",
"tog-watchlisthideown": "Минем үзгәртүләрем күзәтү исемлегеннән яшерелсен",
"tog-watchlisthidebots": "Бот үзгәртүләре күзәтү исемлегеннән яшерелсен",
@@ -157,7 +158,7 @@
"mypage": "Бит",
"mytalk": "Бәхәс бите",
"anontalk": "Бу IP адресы өчен бәхәс бите",
- "navigation": "Күчү",
+ "navigation": "Навигация",
"and": "&#32;һәм",
"qbfind": "Эзләү",
"qbbrowse": "Карау",
@@ -169,6 +170,7 @@
"actions": "Хәрәкәт",
"namespaces": "Исемнәр мәйданы",
"variants": "Төрләр",
+ "navigation-heading": "Навигация",
"errorpagetitle": "Хата",
"returnto": "$1 битенә кайту.",
"tagline": "{{SITENAME}} проектыннан",
@@ -180,10 +182,11 @@
"history": "Битнең тарихы",
"history_short": "Тарих",
"updatedmarker": "соңгы керүемнән соң яңартылган",
- "printableversion": "Бастыру версиясе",
+ "printableversion": "Басма версиясе",
"permalink": "Даими сылтама",
"print": "Бастыру",
"view": "Карау",
+ "view-foreign": "$1 сәхифәсендә карау",
"edit": "Үзгәртү",
"edit-local": "Локаль тасвирламаны үзгәртергә",
"create": "Төзү",
@@ -228,18 +231,21 @@
"jumptonavigation": "навигация",
"jumptosearch": "эзләү",
"view-pool-error": "Гафу итегез, хәзерге вакытта серверлар буш түгел.\nБу битне карарга теләүчеләр артык күп.\nБу биткә соңрак керүегез сорала.\n\n$1",
+ "generic-pool-error": "Гафу итегез, хәзерге вакытта серверлар буш түгел.\nБу битне карарга теләүчеләр артык күп.\nБу биткә соңрак керүегез сорала.",
"pool-timeout": "Кысылуның вакыты узды",
"pool-queuefull": "Сорауларны саклау бите тулы",
"pool-errorunknown": "Билгесез хата",
+ "poolcounter-usage-error": "$1: куллану хатасы",
"aboutsite": "{{SITENAME}} турында",
"aboutpage": "Project:Тасвирлама",
- "copyright": "Мәгълүмат $1 буенча таратыла.",
+ "copyright": "Мәгълүмат $1 буенча таратыла (әгәр башкасы күрсәтелмәсә).",
"copyrightpage": "{{ns:project}}:Авторлык хокуклары",
"currentevents": "Хәзерге вакыйгалар",
"currentevents-url": "Project:Хәзерге вакыйгалар",
"disclaimers": "Җаваплылыктан баш тарту",
"disclaimerpage": "Project:Җаваплылыктан баш тарту",
"edithelp": "Үзгәртү буенча ярдәм",
+ "helppage-top-gethelp": "Ярдәм",
"mainpage": "Баш бит",
"mainpage-description": "Баш бит",
"policy-url": "Project:Кагыйдәләр",
@@ -249,7 +255,7 @@
"privacypage": "Project:Яшеренлек сәясәте",
"badaccess": "Керү хатасы",
"badaccess-group0": "Сез сораган гамәлне башкара алмыйсыз.",
- "badaccess-groups": "Соралган гамәлне $1 {{PLURAL:$2|1=төркеменең|төркеменең}} кулланучылары гына башкара ала.",
+ "badaccess-groups": "Соралган гамәлне $1 {{PLURAL:$2|1=төркеме|төркемнәренең}} кулланучылары гына башкара ала.",
"versionrequired": "MediaWikiның $1 версиясе таләп ителә",
"versionrequiredtext": "Бу бит белән эшләү өчен MediaWikiның $1 версиясе кирәк. [[Special:Version|Кулланылучы программа версиясе турында мәгълүмат битен]] кара.",
"ok": "OK",
@@ -257,10 +263,10 @@
"pagetitle-view-mainpage": "{{SITENAME}}",
"retrievedfrom": "Чыганагы — \"$1\"",
"youhavenewmessages": "Сездә $1 бар ($2).",
- "youhavenewmessagesfromusers": "Сезгә {{PLURAL:$3|$3 кулланучыдан}} $1 килде ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Сезгә}} {{PLURAL:$3|$3 кулланучыдан}} $1 килде ($2).",
"youhavenewmessagesmanyusers": "Сез бик күп кулланучыдан $1 алдыгыз ($2).",
- "newmessageslinkplural": "{{PLURAL:$1|яңа хәбәр}}",
- "newmessagesdifflinkplural": "{{PLURAL:$1|1=соңгы үзгәртү|соңгы үзгәртүләр}}",
+ "newmessageslinkplural": "{{PLURAL:$1|яңа хәбәр|999=яңа хәбәрләр}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|1=соңгы үзгәртү|соңгы үзгәртүләр}}\nсоңгы {{PLURAL:$1|үзгәртү|999=үзгәртү}}",
"youhavenewmessagesmulti": "Сезгә монда яңа хәбәрләр бар: $1",
"editsection": "үзгәртү",
"editold": "үзгәртү",
@@ -273,9 +279,12 @@
"hidetoc": "яшерү",
"collapsible-collapse": "Төрү",
"collapsible-expand": "Ачу",
+ "confirmable-confirm": "{{GENDER:$1|Шулаймы}}?",
+ "confirmable-yes": "Әйе",
+ "confirmable-no": "Юк",
"thisisdeleted": "$1 карарга яки торгызырга телисезме?",
"viewdeleted": "$1 карарга телисезме?",
- "restorelink": "{{PLURAL:$1|1=1 бетерелгән үзгәртүне|$1 бетерелгән үзгәртүне}}",
+ "restorelink": "{{PLURAL:$1|бер бетерелгән үзгәртүне|$1 бетерелгән үзгәртүне}}",
"feedlinks": "Шушылай:",
"feed-invalid": "Язылу каналы тибы ялгыш",
"feed-unavailable": "Синдикация тасмасы ябык",
@@ -304,6 +313,10 @@
"nospecialpagetext": "<strong>Сез сорый торган махсус бит юк.</strong>\n\nМахсус битләр исемлеген карагыз: [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Хата",
"databaseerror": "Мәгълүматлар базасында хата",
+ "databaseerror-textcl": "Мәгълүмат базасында хата чыкты",
+ "databaseerror-query": "Сорату: $1",
+ "databaseerror-function": "Функция: $1",
+ "databaseerror-error": "Хата: $1",
"laggedslavemode": "Игътибар: биттә соңгы яңартулар күрсәтелмәгән булырга мөмкин.",
"readonly": "Мәгълүматлар базасына язу ябылган",
"enterlockreason": "Ябылу сәбәбен һәм вакытын күрсәтегез.",
@@ -318,6 +331,8 @@
"filerenameerror": "«$1» файлының исемен «$2» исеменә алыштырып булмый.",
"filedeleteerror": "«$1» файлын бетереп булмый.",
"directorycreateerror": "«$1» директориясен ясап булмый.",
+ "directoryreadonlyerror": "«$1» каталогы уку өчен генә.",
+ "directorynotreadableerror": "«$1» каталогы укылмый.",
"filenotfound": "«$1» файлын табып булмый.",
"unexpected": "Көтелмәгән кыймәт: «$1»=«$2».",
"formerror": "Хата: форма мәгълүматларын тапшырып булмый",
@@ -327,8 +342,8 @@
"delete-hook-aborted": "Үзгәртү махсус процедура тарафыннан кире кагыла.\nСәбәпләре китерелми.",
"badtitle": "Яраксыз исем",
"badtitletext": "Битнең соралган исеме дөрес түгел, буш яисә телъара яки интервики исеме дөрес күрсәтелмәгән. Исемдә тыелган символлар кулланылган булырга мөмкин.",
- "perfcached": "Бу мәгълүматлар кэштан алынган, аларда соңгы үзгәртүләр булмаска мөмкин. Кэшта иң күбе {{PLURAL:$1|язма}} саклана.",
- "perfcachedts": "Бу мәгълүматлар кэштан алынган, ул соңгы тапкыр $1 яңартылды. Кэшта иң күбе {{PLURAL:$4|язма}} саклана",
+ "perfcached": "Бу мәгълүматлар кэштан алынган, аларда соңгы үзгәртүләр булмаска мөмкин. Кэшта иң күбе {{PLURAL:$1|язма|$1 язмалар}} саклана.",
+ "perfcachedts": "Бу мәгълүматлар кэштан алынган, ул соңгы тапкыр $1 яңартылды. Кэшта иң күбе {{PLURAL:$4|язма}} саклана",
"querypage-no-updates": "Хәзер бу битне яңартып булмый. Монда күрсәтелгән мәгълүматлар кабул ителмәячәк.",
"viewsource": "Карау",
"viewsource-title": "$1 битенең яхма текстын карау",
@@ -338,7 +353,8 @@
"viewsourcetext": "Сез бу битнең башлангыч текстын карый һәм күчерә аласыз:",
"viewyourtext": "Сез '''үз төзәтмәләрегезне''' бу сәхифәдә карый һәм чыгарылма текстны күчермәли аласыз:",
"protectedinterface": "Бу биттә программа тәэминатының интерфейс хәбәрләре бар. Вандализмга каршы көрәш сәбәпле, бу битне үзгәртү тыела. Әлеге хәбәрнең тәрҗемәсен өстәү яки үзгәртү өчен, зинһар өчен, MediaWiki [//translatewiki.net/ translatewiki.net] тәрҗемәләү сайтын кулланыгыз.",
- "editinginterface": "'''Игътибар:''' Сез программа тәэминатының интерфейс тексты булган битне үзгәртәсез. Бу башка кулланучыларга да тәэсир итәчәк. Тәрҗемә өчен [//translatewiki.net/wiki/Main_Page?setlang=tt-cyrl translatewiki.net] локализацияләү проектын кулланыгыз.",
+ "editinginterface": "<strong>Игътибар:</strong> Сез программа тәэминатының интерфейс тексты булган битне үзгәртәсез. Бу башка кулланучыларга да тәэсир итәчәк.",
+ "translateinterface": "Бу хәбәрнең текстын үзгәртү өчен яки өстәмәләр кертү өчен MediaWiki җирләштерү сайтын кулланыгыз [//translatewiki.net/ translatewiki.net].",
"cascadeprotected": "Бу бит үзгәртүләрдән сакланган, чөнки ул каскадлы саклау кабул ителгән {{PLURAL:$1|1=биткә|битләргә}} өстәлгән:\n$2",
"namespaceprotected": "'''$1''' исем киңлегендәге битләрне үзгәртү өчен сезнең рөхсәтегез юк.",
"customcssprotected": "Сез бу CSS-сәхифәне үзгәртә алмыйсыз, чөнки монда башка кулланучының шәхси көйләнмәләре саклана",
@@ -347,6 +363,7 @@
"mycustomjsprotected": "Сезнең биттә JavaScript үзгәртергә хокукларыгыз юк.",
"ns-specialprotected": "Махсус битләрне үзгәртеп булмый.",
"titleprotected": "Бу исем белән бит ясау [[User:$1|$1]] тарафыннан тыелган.\nУл күрсәткән сәбәп: ''$2''.",
+ "exception-nologin": "Сез хисап язмагызга кермәгәнсез",
"virus-badscanner": "Көйләү хатасы. Билгесез вируслар сканеры: ''$1''",
"virus-scanfailed": "сканерлау хатасы ($1 коды)",
"virus-unknownscanner": "билгесез антивирус:",
@@ -384,8 +401,19 @@
"gotaccount": "Сез инде теркәлдегезме? '''$1'''.",
"gotaccountlink": "Керү",
"userlogin-resetlink": "Серсүзегезне оныттыгызмы?",
+ "userlogin-resetpassword-link": "Серсүзне алыштырыргамы?",
+ "userlogin-helplink2": "Керү буенча ярдәм",
+ "userlogin-createanother": "Башка хисап язмасы төзү",
+ "createacct-emailrequired": "Электрон почта юлламагыз",
+ "createacct-emailoptional": "Электрон почта юлламагыз (мәҗбүри түгел)",
+ "createacct-email-ph": "Электрон почта юлламагызны языгыз",
"createaccountmail": "электрон почта аша",
"createaccountreason": "Сәбәп:",
+ "createacct-submit": "Хисап язмасы төзү",
+ "createacct-benefit-heading": "{{SITENAME}} — сезнең шикелле кешеләрнең хезмәте.",
+ "createacct-benefit-body1": "{{PLURAL:$1|төзәтмә}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|мәкалә}}",
+ "createacct-benefit-body3": "Соңгы вакытта {{PLURAL:$1|кулланучы}}",
"badretype": "Кертелгән серсүзләр бер үк түгел.",
"userexists": "Кертелгән исем кулланыла.\nЗинһар, башка исем сайлагыз.",
"loginerror": "Керү хатасы",
@@ -431,6 +459,7 @@
"loginlanguagelabel": "Тел: $1",
"suspicious-userlogout": "Сезнең эшчәнлекне бетерү соравыгыз кире кагылды, чөнки ул ялгыш браузер яисә кэшлаучы прокси аша җибәрелергэ мөмкин.",
"pt-login": "Керү",
+ "pt-login-button": "Керү",
"pt-createaccount": "Яңа кулланучыны теркәү",
"pt-userlogout": "Чыгу",
"php-mail-error-unknown": "PHP mail() функциясендә билгесез хата",
@@ -561,12 +590,12 @@
"semiprotectedpagewarning": "'''Кисәтү:''' бу бит якланган. Аны теркәлгән кулланучылар гына үзгәртә ала.\nАста бу битне күзәтү көндәлеге бирелгән:",
"cascadeprotectedwarning": "'''Кисәтү:''' Бу битне идарәчеләр гына үзгәртә ала. Сәбәбе: ул {{PLURAL:$1|каскадлы яклау исемлегенә кертелгән}}:",
"titleprotectedwarning": "'''Кисәтү: Мондый исемле бит якланган, аны үзгәртү өчен [[Special:ListGroupRights|тиешле хокукка]] ия булу зарур.'''\nАста күзәтү көндәлегендәге соңгы язма бирелгән:",
- "templatesused": "Бу биттә кулланылган {{PLURAL:$1|1=үрнәк|үрнәкләр}}:",
+ "templatesused": "Бу биттә кулланылган {{PLURAL:$1|1=калып|калыплар}} :",
"templatesusedpreview": "Алдан каралучы биттә кулланылган {{PLURAL:$1|1=үрнәк|үрнәкләр}}:",
"templatesusedsection": "Бу бүлектә кулланылган {{PLURAL:$1|1=үрнәк|үрнәкләр}}:",
"template-protected": "(якланган)",
"template-semiprotected": "(өлешчә якланган)",
- "hiddencategories": "Бу бит $1 {{PLURAL:$1|яшерен төркемгә}} керә:",
+ "hiddencategories": "Бу бит $1 {{PLURAL:$1|яшерен төркемгә|$1 яшерен төркемнәргә}} керә:",
"nocreatetext": "{{SITENAME}}: сайтта яңа битләр төзү чикләнгән.\nСез артка кайтып, төзелгән битне үзгәртә аласыз. [[Special:UserLogin|Керергә яисә теркәлергә]] тәгъдим ителә.",
"nocreate-loggedin": "Сезгә яңа битләр төзү хокукы бирелмәгән.",
"sectioneditnotsupported-title": "Бүлекләрне үзгәртү рөхсәт ителми.",
@@ -583,6 +612,7 @@
"edit-no-change": "Текстта үзгәешләр ясалмау сәбәпле, сезнең үзгәртү кире кагыла.",
"edit-already-exists": "Яңа бит төзеп булмый.\nУл инде бар.",
"editwarning-warning": "Башка биткә күчү вакытында бу мәкаләгә керткән үзгәрешләр югалырга мөмкин.\nӘгәрдә сез теркәлгән булсагыз, бу искәрмәне сез «Көйләнмәләрем» өлешендә үзгәртә аласыз.",
+ "duplicate-args-category": "Калыпны чакыруда кабатлап торган аргументларны кулланган битләр",
"expensive-parserfunction-warning": "'''Игътибар:''' бу биттә хәтерне еш кулланучы функцияләр артык күп.\n\nЧикләү: $2 {{PLURAL:$2|1=куллану}}, бу очракта {{PLURAL:$1|$1 тапкыр}} башкарырга рөхсәт ителә.",
"expensive-parserfunction-category": "Хәтерне еш кулланучы функцияләр күп булган битләр",
"post-expand-template-inclusion-warning": "'''Игътибар:''' Кулланылучы үрнәкләр артык зур.\nКайберләре кабызылмаячак.",
@@ -606,7 +636,7 @@
"currentrev": "Хәзерге юрама",
"currentrev-asof": "Хәзерге юрама, $1",
"revisionasof": "$1 юрамасы",
- "revision-info": "Юрама: $1; $2",
+ "revision-info": "$1 юрамасы; {{GENDER:$6|$2}}$7",
"previousrevision": "← Алдагы юрама",
"nextrevision": "Чираттагы юрама →",
"currentrevisionlink": "Хәзерге юрама",
@@ -658,8 +688,8 @@
"revdelete-hide-user": "Үзгәртүченең исемен/IP адресын яшер",
"revdelete-hide-restricted": "Мәгълүматлар идарәчеләрдән дә яшерелсен",
"revdelete-radio-same": "(үзгәртмәү)",
- "revdelete-radio-set": "Әйе",
- "revdelete-radio-unset": "Юк",
+ "revdelete-radio-set": "Яшеренлек",
+ "revdelete-radio-unset": "Күренүчәнлек",
"revdelete-suppress": "Мәгълүматлар идарәчеләрдән дә яшерелсен",
"revdelete-log": "Сәбәп:",
"revdelete-submit": "{{PLURAL:$1|сайланылган версиягә}} кулланырга",
@@ -683,70 +713,85 @@
"mergelog": "Берләштерүләр көндәлеге",
"revertmerge": "Бүлү",
"history-title": "$1 битенең үзгәртү тарихы",
+ "difference-title": "$1 — юрамалар арасындагы аермалар",
"lineno": "$1 юл:",
"compareselectedversions": "Сайланган юрамаларны чагыштыру",
"showhideselectedversions": "Сайланган юрамаларны күрсәтү/яшерү",
"editundo": "үткәрмәү",
+ "diff-multi-sameuser": "(шул ук кулланучының {{PLURAL:$1|бер арадаш юрамасы|$1 арадаш юрамасы}} күрсәтелмәгән)",
+ "diff-multi-otherusers": "({{PLURAL:$2|Башка бер кулланучының|$2 кулланучының}} {{PLURAL:$1|бер арадаш юрамасы|$1 арадаш юрамасы}} күрсәтелмәгән)",
+ "diff-multi-manyusers": "($2 күбрәк {{PLURAL:$2|кулланучының|кулланучының}} {{PLURAL:$1|Бер арадаш юрамасы|$1 арадаш юрамасы}} күрсәтелмәгән)",
"searchresults": "Эзләү нәтиҗәләре",
"searchresults-title": "«$1» өчен эзләү нәтиҗәләре",
"notextmatches": "Тиңдәш текстлы битләр юк",
"prevn": "алдагы {{PLURAL:$1|$1}}",
"nextn": "чираттагы {{PLURAL:$1|$1}}",
"prevn-title": "Алдагы $1 {{PLURAL:$1|язма}}",
- "nextn-title": "Киләсе $1 {{PLURAL:$1|язма}}",
+ "nextn-title": "Киләсе $1 {{PLURAL:$1|язма|язма}}",
"shown-title": "Сәхифәдә $1 {{PLURAL:$1|1=язма|язма}} күрсәтелсен",
"viewprevnext": "Күрсәтелүе: ($1 {{int:pipe-separator}} $2) ($3)",
- "searchmenu-exists": "'''Бу вики-проекта «[[:$1]]» исемле бит бар инде'''",
+ "searchmenu-exists": "<strong>Бу вики-проектта «[[:$1]]» исемле бит бар инде</strong>{{PLURAL:$2|0=|Башка эзләү нәтиҗәләрен дә карап ал.}}",
"searchmenu-new": "'''«[[:$1]]» исемле яңа бит ясау'''",
- "searchprofile-articles": "Төп битләр",
+ "searchprofile-articles": "Төп битләр (мәкаләләр)",
"searchprofile-images": "Мультимедиа",
"searchprofile-everything": "Һәркайда",
"searchprofile-advanced": "Киңәйтелгән",
"searchprofile-articles-tooltip": "$1 дә эзләү",
"searchprofile-images-tooltip": "Файллар эзләү",
- "searchprofile-everything-tooltip": "Барлык битләрдә дә эзләү",
+ "searchprofile-everything-tooltip": "Барлык битләрдән эзләү",
"searchprofile-advanced-tooltip": "Бирелгән исемнәр мәйданында эзләү",
- "search-result-size": "$1 ({{PLURAL:$2|$2 сүз}})",
+ "search-result-size": "$1 ({{PLURAL:$2|1 сүз|$2 сүз}})",
"search-result-category-size": "{{PLURAL:$1|1=1 әгъза|$1 әгъза}} ({{PLURAL:$2|1=1 асттөркем|$2 асттөркем}}, {{PLURAL:$3|1=1 файл|$3 файл}})",
"search-redirect": "(юнәлтү $1)",
"search-section": "($1 бүлеге)",
+ "search-category": "($1 категориясе)",
+ "search-file-match": "(файл эчтәлеге белән туры килә)",
"search-suggest": "Бәлки, сез моны эзлисез: $1",
"search-interwiki-caption": "Тугандаш проектлар",
"search-interwiki-default": "$1 нәтиҗә:",
"search-interwiki-more": "(тагын)",
- "search-relatedarticle": "Бәйләнгән",
- "searchrelated": "бәйләнгән",
+ "search-relatedarticle": "Бәйле",
+ "searchrelated": "бәйле",
"searchall": "барлык",
"showingresults": "Аста № '''$2''' {{PLURAL:$1|башлап}} '''$1''' {{PLURAL:$1|результат}} күрсәтелгән.",
- "search-nonefound": "Сорауга туры килгән җаваплар табылмады.",
+ "search-nonefound": "Сорауга туры килгән нәтиҗәләр табылмады.",
"powersearch-legend": "Өстәмә эзләү",
"powersearch-ns": "исемнәрендә эзләү",
- "powersearch-togglelabel": "Кире кагыу:",
+ "powersearch-togglelabel": "Тамгаларга:",
"powersearch-toggleall": "Барысы",
- "powersearch-togglenone": "Бирни дә юк",
- "search-external": "Тышкы эзләү",
+ "powersearch-togglenone": "Берни юк",
+ "powersearch-remember": "Сайланганны алдагы эзләүләр өчен истә калдырырга",
+ "search-external": "Читтән эзләү",
+ "search-error": "Эзләгән вакытта хата килеп чыкты:$1",
"preferences": "Көйләнмәләр",
"mypreferences": "Көйләнмәләр",
- "prefs-edits": "Үзгәртүләр исәбе:",
+ "prefs-edits": "Төзәтмәләр саны:",
+ "prefsnologintext2": "Көйләнмәләрне үзгәртү өчен хисап язмагыз белән керегез",
"prefs-skin": "Күренеш",
"skin-preview": "Алдан карау",
- "datedefault": "Баштагы көйләнмәләр",
+ "datedefault": "Башлангыч көйләнмәләр",
"prefs-labs": "Сынаулы мөмкинчелекләр",
- "prefs-personal": "Шәхси мәгълүматлар",
- "prefs-rc": "Соңгы үзгәртүләр",
+ "prefs-user-pages": "Кулланучы битләре",
+ "prefs-personal": "Шәхси мәгълүмат",
+ "prefs-rc": "Соңгы төзәтмәләр",
"prefs-watchlist": "Күзәтү исемлеге",
- "prefs-watchlist-days": "Күзәтү исемлегендә күрсәтелгән көн саны:",
- "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|1=day|days}}",
- "prefs-watchlist-edits": "Киңәйтелгән күзәтү исемлегендә үзгәртүләрнең иң югары исәбе:",
+ "prefs-editwatchlist": "Күзәтү исемлеген үзгәртү",
+ "prefs-editwatchlist-label": "Күзәтү исемлеге язмаларын үзгәртү:",
+ "prefs-editwatchlist-edit": "Күзәтү исемлегеннән исемнәрне карау һәм сөртү",
+ "prefs-editwatchlist-raw": "Күзәтү исемлеген текстсыман үзгәртү",
+ "prefs-editwatchlist-clear": "Күзәтү исемлеген тазарту",
+ "prefs-watchlist-days": "Күзәтү исемлегендә көннәр санын күрсәтергә:",
+ "prefs-watchlist-days-max": "Иң күбе $1 {{PLURAL:$1|1=көн|көн}}",
+ "prefs-watchlist-edits": "Киңәйтелгән күзәтү исемлегендә күрсәтелүче төзәтмәләрнең максималь саны:",
"prefs-watchlist-edits-max": "Максимум сан: 1000",
"prefs-watchlist-token": "Күзәтү исемлеге токены:",
"prefs-misc": "Башка көйләнмәләр",
"prefs-resetpass": "Серсүзне үзгәртү",
- "prefs-email": "E-mail көйләүләре",
+ "prefs-email": "E-mail көйләнмәләре",
"prefs-rendering": "Күренеш",
"saveprefs": "Саклау",
- "restoreprefs": "Баштагы көйләнмәләрне кире кайтару",
- "prefs-editing": "Үзгәртү",
+ "restoreprefs": "Башлангыч көйләнмәләрне кире кайтару",
+ "prefs-editing": "Төзәтү",
"rows": "Юллар:",
"columns": "Баганалар:",
"searchresultshead": "Эзләү",
@@ -823,7 +868,7 @@
"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> $2 хокукларын үзгәртү",
"userrights-editusergroup": "Кулланучының төркемнәрен алмаштыру",
"saveusergroups": "Кулланучы төркемнәрен саклау",
"userrights-groupsmember": "Әгъза:",
@@ -832,38 +877,46 @@
"userrights-reason": "Сәбәп:",
"userrights-no-interwiki": "Сезнең башка викиларда кулланучыларның хокукларын үзгәртергә хокукларыгыз юк.",
"userrights-nodatabase": "Бирелгән $1 базасы юк яисә локаль булып тормый.",
- "userrights-changeable-col": "Сезнең тарафтан үзгәртә ала торган төркемнәр",
- "userrights-unchangeable-col": "Сезнең тарафтан үзгәртә алмый торган төркемнәр",
+ "userrights-nologin": "Кулланучыларга вәкаләтләр билгеләү өчен идарәче хисап язмасы белән [[Special:UserLogin|керергә кирәк]]",
+ "userrights-notallowed": "Сезнең кулланучыларга вәкаләтләр тапшырырга яки кире алырга хокукы юк.",
+ "userrights-changeable-col": "Сезнең тарафтан үзгәртелми торган төркемнәр",
+ "userrights-unchangeable-col": "Сезнең тарафтан үзгәртелми торган төркемнәр",
"userrights-irreversible-marker": "$1*",
+ "userrights-conflict": "Кулланучы хокукларын үзгәртү конфликты! Төзәтмәләрегезне тикшерегез, аннары кабатлагыз.",
+ "userrights-removed-self": "Сез үзегезне хокукларыгыздан мәхрүм иттегез. Шул сәбәпле сез бу сәхифәгә башка керә алмыйсыз.",
"group": "Төркем:",
"group-user": "Кулланучылар",
"group-autoconfirmed": "Авторасланган кулланучы",
"group-bot": "Ботлар",
"group-sysop": "Идарәчеләр",
"group-bureaucrat": "Бюрократлар",
- "group-suppress": "Тикшерүчеләр",
+ "group-suppress": "Назирләр",
"group-all": "(барлык)",
"group-user-member": "{{GENDER:$1|кулланучы}}",
"group-autoconfirmed-member": "{{GENDER:$1|авторасланган кулланучы}}",
"group-bot-member": "{{GENDER:$1|бот}}",
"group-sysop-member": "{{GENDER:$1|идарәче}}",
"group-bureaucrat-member": "{{GENDER:$1|бюрократ}}",
- "group-suppress-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-bureaucrat": "{{ns:project}}:Бюрократлар",
- "grouppage-suppress": "{{ns:project}}:Тикшерүчеләр",
+ "grouppage-suppress": "{{ns:project}}:Назирләр",
"right-read": "Битләрне карау",
"right-edit": "Битләрне үзгәртү",
"right-createpage": "битләр ясау (бәхәс булмаганнарын)",
"right-createtalk": "бәхәс битен ясау",
- "right-createaccount": "яңа кулланучы битен ясау",
- "right-minoredit": "\"кече үзгәртү\" тамгасын кую",
+ "right-createaccount": "яңа кулланучы хисап язмасын ясау",
+ "right-minoredit": "\"кече төзәтмә\" тамгасын кую",
"right-move": "Битләрне күчерү",
+ "right-move-subpages": "Битләрне асбитләр белән бергә күчерү",
+ "right-move-categorypages": "төркемдәге битләрне күчерү",
"right-movefile": "файлларның исемен алмаштыру",
+ "right-suppressredirect": "Элекке исемнән юнәлтү ясамыйча исемне алмаштыру",
"right-upload": "файлларны йөкләү",
+ "right-reupload": "Булган файллар өстеннән язарга",
"right-delete": "битләрне бетерү",
"right-editinterface": "Кулланучы интерфейсын үзгәртү",
"newuserlogpage": "Кулланучыларны теркәү көндәлеге",
@@ -915,6 +968,7 @@
"number_of_watching_users_pageview": "[$1 {{PLURAL:$1|күзәтеп тора кулланучы}}]",
"rc_categories": "Төркемнәрдә генә тора («|» бүлүче)",
"rc_categories_any": "Һәрбер",
+ "rc-change-size-new": "Төзәтмәдән соң күләме: $1 {{PLURAL:$1|байт|байт|байт}}",
"newsectionsummary": "/* $1 */ яңа бүлек",
"rc-enhanced-expand": "Ваклыкларны күрсәтү",
"rc-enhanced-hide": "Ваклыкларны яшерү",
@@ -1041,7 +1095,6 @@
"statistics": "Хисапнамә",
"statistics-header-pages": "Битләр хисапнамәсе",
"statistics-header-edits": "Үзгәртүләр хисапнамәсе",
- "statistics-header-views": "Караулар хисапнамәсе",
"statistics-header-users": "Кулланучылар буенча хисапнамә",
"statistics-header-hooks": "Башка хисапнамәләр",
"statistics-articles": "Мәкаләләр саны",
@@ -1050,12 +1103,9 @@
"statistics-files": "Йөкләнелгән файллар",
"statistics-edits": "{{grammar:genitive|{{SITENAME}}}} проекты ачылганнан бирле булган барлык үзгәртүләр исәбе",
"statistics-edits-average": "Бер биткә уртача үзгәртүләр исәбе",
- "statistics-views-total": "Барлык каралган битләр",
- "statistics-views-peredit": "Үзгәртүләргә карау",
"statistics-users": "Теркәлгән [[Special:ListUsers|кулланучылар]]",
"statistics-users-active": "Актив кулланучылар",
"statistics-users-active-desc": "{{PLURAL:$1|$1 көн }} өчендә нинди дә булса үзгәртүләр керткән кулланучылар",
- "statistics-mostpopular": "Иң күп каралучы битләр",
"doubleredirects": "Икеләтә юнәлтүләр",
"brokenredirects": "Бәйләнешсез юнәлтүләр",
"brokenredirectstext": "Бу юнәлтүләр булмаган битләргә сылтыйлар:",
@@ -1076,7 +1126,6 @@
"uncategorizedtemplates": "Төркемләнмәгән үрнәкләр",
"unusedcategories": "Кулланмаган төркемнәр",
"unusedimages": "Кулланмаган сүрәтләр",
- "popularpages": "Популяр битләр",
"wantedcategories": "Зарур төркемнәр",
"wantedpages": "Зарур битләр",
"wantedfiles": "Кирәкле файллар",
@@ -1107,7 +1156,7 @@
"suppress": "Яшерү",
"booksources": "Китап чыганаклары",
"booksources-search-legend": "Китап чыганакларыны эзләү",
- "booksources-go": "Башкару",
+ "booksources-search": "Эзләү",
"booksources-text": "Әлеге биттә күрсәтелгән сылтамалар ярәмендә сезнең кызыксындырган китап буенча өстәмә мәгълүматлар табарга мөмкин. Болар интернет-кибетләр һәм китапханә җыентыгында эзләүче системалар.",
"booksources-invalid-isbn": "Бирелгән ISBN саны бәлки хаталдыр. Зинһар, бирелгән саннарны яңадан тикшерегез.",
"specialloguserlabel": "Кулланучы:",
@@ -1172,7 +1221,7 @@
"emailsenttext": "E-mail хатыгыз җиберелде.",
"watchlist": "Күзәтү исемлеге",
"mywatchlist": "Күзәтү исемлеге",
- "watchlistfor2": "$1 $2 өчен",
+ "watchlistfor2": "$1 өчен $2",
"nowatchlist": "Күзәтү исемлегегездә битләр юк.",
"watchnologin": "Кермәдегез",
"addedwatchtext": "\"[[:$1]]\" бите [[Special:Watchlist|күзәтү исемлегегезгә]] өстәлде.\nБу биттә һәм аның бәхәслегендә барлык булачак үзгәртүләр шунда күрсәтелер, һәм, [[Special:RecentChanges|соңгы үзгәртүләр]] исемлегендә бу битне җиңелрәк табу өчен, ул '''калын мәтен''' белән күрсәтелер.",
@@ -1183,7 +1232,7 @@
"unwatchthispage": "Күзәтүне туктат",
"notanarticle": "Мәкалә түгел",
"watchlist-details": "Күзәтү исемлегегездә, бәхәс битләрен санамыйча, {{PLURAL:$1|1=$1 бит|$1 бит}} бар.",
- "wlshowlast": "Баягы $1 сәгать $2 көн эчендә яки $3ны күрсәт",
+ "wlshowlast": "Баягы $1 сәгать $2 көн эчендә яки ны күрсәт",
"watchlist-options": "Күзәтү исемлеге көйләүләре",
"watching": "Күзәтү исемлегемә өстәүе…",
"unwatching": "Күзәтү исемлегемнән чыгаруы…",
@@ -1211,8 +1260,8 @@
"deletereasonotherlist": "Башка сәбәп",
"deletereason-dropdown": "* Бетерүнең сәбәпләре\n** вандаллык\n** автор соравы буенча\n** автор хокукларын бозу",
"delete-edit-reasonlist": "Сәбәпләр исемлеген үзгәртү",
- "rollback_short": "Кире кайтару",
"rollbacklink": "кире кайтару",
+ "rollbacklinkcount": "$1 {{PLURAL:$1|төзәтмәне}} кире кагу",
"editcomment": "Үзгәртү өчен тасвир: \"''$1''\".",
"revertpage": "[[Special:Contributions/$2|$2]] үзгәртүләре ([[User talk:$2|бәхәс]]) [[User:$1|$1]] юрамасына кадәр кире кайтарылды",
"protectlogpage": "Яклану көндәлеге",
@@ -1292,7 +1341,7 @@
"sp-contributions-talk": "бәхәс",
"sp-contributions-search": "Кертемне эзләү",
"sp-contributions-username": "Кулланучының IP адресы яки исеме:",
- "sp-contributions-toponly": "Соңгы версия булган үзгәртүләрне генә күрсәтергә",
+ "sp-contributions-toponly": "Соңгы версия булган үзгәртүләрне генә күрсәтелсен",
"sp-contributions-submit": "Эзләү",
"whatlinkshere": "Бирегә нәрсә сылтый",
"whatlinkshere-title": "$1 битенә сылтый торган битләр",
@@ -1396,7 +1445,6 @@
"import-revision-count": "$1 {{PLURAL:$1|юрама|юрама|юрама}}",
"importnopages": "Импортлау өчен битләр юк.",
"importlogpage": "Кертү көндәлеге",
- "import-logentry-interwiki": "«$1» — викиара импортлау",
"tooltip-pt-userpage": "Кулланучы битегез",
"tooltip-pt-mytalk": "Бәхәс битегез",
"tooltip-pt-preferences": "Көйләнмәләрегез",
@@ -1404,6 +1452,7 @@
"tooltip-pt-mycontris": "Сезнең кертеменгезне исемлеге",
"tooltip-pt-login": "Сез хисап язмасы төзи алыр идегез, әмма бу мәҗбүри түгел.",
"tooltip-pt-logout": "Чыгу",
+ "tooltip-pt-createaccount": "Сезгә аккаунт ясарга һәм системага керергә киңәш итәбез, әмма бу мәҗбүри түгел.",
"tooltip-ca-talk": "Битнең эчтәлеге турында бәхәс",
"tooltip-ca-edit": "Сез бу бит үзгәртә аласыз. Зинһар, саклаганчы карап алуны кулланыгыз.",
"tooltip-ca-addsection": "Яңа бүлек башлау",
@@ -1433,7 +1482,7 @@
"tooltip-t-emailuser": "Бу кулланучыга хат җибәрү",
"tooltip-t-upload": "Файлларны йөкләү",
"tooltip-t-specialpages": "Барлык махсус битләр исемлеге",
- "tooltip-t-print": "Бу битнең бастыру версиясе",
+ "tooltip-t-print": "Бу битнең басма версиясе",
"tooltip-t-permalink": "Битнең бу юрамасына даими сылтама",
"tooltip-ca-nstab-main": "Мәкаләнең эчтәлеге",
"tooltip-ca-nstab-user": "Кулланучының шәхси бите",
@@ -1486,6 +1535,7 @@
"file-nohires": "Югары ачыклык белән юрама юк.",
"svg-long-desc": "SVG файлы, шартлы $1 × $2 нокта, файлның зурлыгы: $3",
"show-big-image": "Тулы ачыклык",
+ "show-big-image-size": "$1 × $2 пиксель",
"newimages": "Яңа сүрәтләр җыелмасы",
"newimages-legend": "Фильтр",
"ilsubmit": "Эзләү",
@@ -1617,7 +1667,6 @@
"exif-gpsstatus-v": "Мәгълүматларны җибәрүгә әзер",
"exif-gpsspeed-k": "км/сәг",
"exif-gpsspeed-m": "миля/сәг",
- "watchlistall2": "барлык",
"namespacesall": "барлык",
"monthsall": "барлык",
"recreate": "Яңадан ясау",
@@ -1702,7 +1751,7 @@
"revdelete-uname-unhid": "кулланучының исеме ачылган",
"revdelete-restricted": "чикләүләр идарәчеләргә дә кулланыла",
"revdelete-unrestricted": "чикләүләр идарәчеләр өчен бетерелгән",
- "logentry-move-move": "$1 $3 сәхифәсен $4 итеп үзгәртте",
+ "logentry-move-move": "$1 {{GENDER:$2|итеп күчерде}} $3 сәхифәсен $4",
"logentry-move-move-noredirect": "$1 $3 сәхифәсен $4 итеп үзгәртте һәм юнәлтүне калдырмады",
"logentry-move-move_redir": "$1 $3 сәхифәсен $4 юнәлтү аша үзгәртте",
"logentry-move-move_redir-noredirect": "$1 $3 сәхифәсен $4 юнәлтү аша үзгәртте һәм юнәлтүне калдырмады",
@@ -1712,19 +1761,21 @@
"logentry-newusers-create": "$1 хисап язмасы төзеде",
"logentry-newusers-create2": "$1 $3 кулланучы хисап язмасын төзеде",
"logentry-newusers-autocreate": "Автоматик рәвештә $1 хисап язмасы төзелде.",
+ "logentry-upload-upload": "$1 {{GENDER:$2|йөкләде}} $3",
"rightsnone": "(юк)",
+ "revdelete-summary": "үзгәртүләр тасвирламасы",
+ "feedback-adding": "Фикерне сәхифәгә өстәү ...",
+ "feedback-bugnew": "Мин тикшердем. Яңа хата турында хәбәр итү",
"feedback-bugornote": "Әгәр дә сез техник проблеманы җентекләп тасвирларга әзер икәнсез, зинһар өчен, [$1 хата турында хәбәр итегез].\nБашка очракта сез түбәндәге гади форманы куллана аласыз. Сезнең шәрехләмә \"[$3 $2]\" сәхифәсенә сезнең кулланучы исеме һәм сез кулланган браузер исеме белән бергә өстәләчәк.",
- "feedback-subject": "Тема:",
- "feedback-message": "Хәбәр:",
"feedback-cancel": "Баш тарту",
- "feedback-submit": "Фикер җибәрү",
- "feedback-adding": "Фикерне сәхифәгә өстәү ...",
+ "feedback-close": "Әзер",
"feedback-error1": "Хата. APIдан билгесез нәтиҗә",
"feedback-error2": "Хата: төзәтү уңышсыз килеп чыкты",
"feedback-error3": "Хата: APIдан җавап юк.",
+ "feedback-message": "Хәбәр:",
+ "feedback-subject": "Тема:",
+ "feedback-submit": "Җибәрү",
"feedback-thanks": "Рәхмәт! Сезнең фикер \"[$2 $1]\" сәхифәсенә куелды.",
- "feedback-close": "Әзер",
- "feedback-bugnew": "Мин тикшердем. Яңа хата турында хәбәр итү",
"searchsuggest-search": "Эзләү",
"searchsuggest-containing": "эчтәлек...",
"api-error-badaccess-groups": "Сезгә бу викигә файллар өстәү рөхсәт ителмәгән",
@@ -1743,5 +1794,21 @@
"api-error-uploaddisabled": "Бу викидә файллар йөкләү мөмкинлеге сүндерелгән.",
"api-error-verification-error": "Бәлки, бу файл бозылгандыр яки дөрес түгел киңәйтелмәгә ия.",
"expandtemplates": "Үрнәкләрне ачу",
- "expand_templates_ok": "OK"
+ "expand_templates_ok": "OK",
+ "special-characters-group-latin": "Латин",
+ "special-characters-group-latinextended": "Латин (киңәйтелгән)",
+ "special-characters-group-ipa": "ХФӘ (IPA)",
+ "special-characters-group-symbols": "Тамгалар",
+ "special-characters-group-greek": "Грек",
+ "special-characters-group-cyrillic": "Кирилл",
+ "special-characters-group-arabic": "Гарәп",
+ "special-characters-group-persian": "Фарсы",
+ "special-characters-group-hebrew": "Яхүд",
+ "special-characters-group-bangla": "Бенгаль",
+ "special-characters-group-telugu": "Телугу",
+ "special-characters-group-sinhala": "Сингаль",
+ "special-characters-group-gujarati": "Гуҗарати",
+ "special-characters-group-thai": "Таиланд",
+ "special-characters-group-lao": "Лаос",
+ "special-characters-group-khmer": "Кһмер"
}
diff --git a/languages/i18n/tt-latn.json b/languages/i18n/tt-latn.json
index a7f86ed2..bd1e1a9f 100644
--- a/languages/i18n/tt-latn.json
+++ b/languages/i18n/tt-latn.json
@@ -7,7 +7,8 @@
"Reedy",
"Urhixidur",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Amire80"
]
},
"tog-underline": "Sıltamalarnıñ astına sızu:",
@@ -129,7 +130,7 @@
"mytalk": "Bäxäsem",
"anontalk": "Bu IP adresı öçen bäxäs bite",
"navigation": "Küçü",
- "and": " häm",
+ "and": "&#32;häm",
"qbfind": "Ezläw",
"qbbrowse": "Qaraw",
"qbedit": "Üzgärtü",
@@ -592,7 +593,6 @@
"searchrelated": "bäylängän",
"searchall": "barlıq",
"showingresults": "Asta № '''$2''' {{PLURAL:$1|başlap}} '''$1''' {{PLURAL:$1|rezultat}} kürsätelgän.",
- "showingresultsheader": "'''$4''' öçen {{PLURAL:$5|Rezultat '''$1''' sennän '''$3'''|Rezultatlar '''$1 — $2''' sennän '''$3'''}}",
"search-nonefound": "Sorawğa turı kilgän cawaplar tabılmadı.",
"powersearch-legend": "Östämä ezläw",
"powersearch-ns": "isemnärendä ezläw",
@@ -894,7 +894,6 @@
"statistics": "Xisapnamä",
"statistics-header-pages": "Bitlär xisapnamäse",
"statistics-header-edits": "Üzgärtülär xisapnamäse",
- "statistics-header-views": "Qarawlar xisapnamäse",
"statistics-header-users": "Qullanuçılar buyınça xisapnamä",
"statistics-header-hooks": "Başqa xisapnamälär",
"statistics-articles": "Mäqälälär sanı",
@@ -903,12 +902,9 @@
"statistics-files": "Yöklänelgän fayllar",
"statistics-edits": "{{grammar:genitive|{{SITENAME}}}} proyektı açılğannan birle bulğan barlıq üzgärtülär isäbe",
"statistics-edits-average": "Ber bitkä urtaça üzgärtülär isäbe",
- "statistics-views-total": "Barlıq qaralğan bitlär",
- "statistics-views-peredit": "Üzgärtülärgä qaraw",
"statistics-users": "Terkälgän [[Special:ListUsers|qullanuçılar]]",
"statistics-users-active": "Aktiv qullanuçılar",
"statistics-users-active-desc": "{{PLURAL:$1|$1 kön }} öçendä nindi dä bulsa üzgärtülär kertkän qullanuçılar",
- "statistics-mostpopular": "İñ küp qaraluçı bitlär",
"doubleredirects": "İkelätä yünältülär",
"brokenredirects": "Bäyläneşsez yünältülär",
"brokenredirectstext": "Bu yünältülär bulmağan bitlärgä sıltıylar:",
@@ -929,7 +925,6 @@
"uncategorizedtemplates": "Törkemlänmägän ürnäklär",
"unusedcategories": "Qullanmağan törkemnär",
"unusedimages": "Qullanmağan sürätlär",
- "popularpages": "Populyar bitlär",
"wantedcategories": "Zarur törkemnär",
"wantedpages": "Zarur bitlär",
"wantedfiles": "Kiräkle fayllar",
@@ -960,7 +955,6 @@
"suppress": "Yäşerü",
"booksources": "Kitap çığanaqları",
"booksources-search-legend": "Kitap çığanaqlarını ezläw",
- "booksources-go": "Başqaru",
"booksources-text": "Älege bittä kürsätelgän sıltamalar yärämendä sezneñ qızıqsındırğan kitap buyınça östämä mäğlümatlar tabarğa mömkin. Bolar internet-kibetlär häm kitapxanä cıyıntığında ezläwçe sistemalar.",
"booksources-invalid-isbn": "Birelgän ISBN sanı bälki xataldır. Zinhar, birelgän sannarnı yañadan tikşeregez.",
"specialloguserlabel": "Qullanuçı:",
@@ -1022,7 +1016,7 @@
"unwatch": "Küzätmäw",
"notanarticle": "Mäqälä tügel",
"watchlist-details": "Küzätü isemlegegezdä, bäxäs bitlären sanamıyça, {{PLURAL:$1|$1 bit|$1 bit}} bar.",
- "wlshowlast": "Bayağı $1 säğät $2 kön eçendä yäki $3nı kürsät",
+ "wlshowlast": "Bayağı $1 säğät $2 kön eçendä yäki nı kürsät",
"watchlist-options": "Küzätü isemlege köyläwläre",
"watching": "Küzätü isemlegemä östäwe…",
"unwatching": "Küzätü isemlegemnän çığaruı…",
@@ -1049,7 +1043,6 @@
"deletereasonotherlist": "Başqa säbäp",
"deletereason-dropdown": "* Beterüneñ säbäpläre\n** vandallıq\n** avtor sorawı buyınça\n** avtor xoquqların bozu",
"delete-edit-reasonlist": "Säbäplär isemlegen üzgärtü",
- "rollback_short": "Kire qaytaru",
"rollbacklink": "kire qaytaru",
"editcomment": "Üzgärtü öçen taswir: \"''$1''\".",
"revertpage": "[[Special:Contributions/$2|$2]] üzgärtüläre ([[User talk:$2|bäxäs]]) [[User:$1|$1]] yuramasına kire qaytarıldı",
@@ -1427,7 +1420,6 @@
"exif-subjectdistancerange-3": "Yıraqtan töşerü",
"exif-gpsspeed-k": "km/säğ",
"exif-gpsspeed-m": "milya/säğ",
- "watchlistall2": "barlıq",
"namespacesall": "barlıq",
"monthsall": "barlıq",
"recreate": "Yañadan yasaw",
@@ -1484,5 +1476,6 @@
"htmlform-reset": "Üzgärtülärne kire qaytaru",
"htmlform-selectorother-other": "Başqa",
"revdelete-restricted": "çikläwlär idaräçelärgä dä qullanıla",
- "rightsnone": "(yuq)"
+ "rightsnone": "(yuq)",
+ "revdelete-summary": "üzgärtülär taswirlaması"
}
diff --git a/languages/i18n/tw.json b/languages/i18n/tw.json
index 86973bf7..849def90 100644
--- a/languages/i18n/tw.json
+++ b/languages/i18n/tw.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Nemo bis",
- "Rberchie"
+ "Rberchie",
+ "MF-Warburg"
]
},
"sun": "Kwasiada",
@@ -37,7 +38,7 @@
"searchprofile-everything": "Biribiara",
"searchprofile-articles-tooltip": "Hwehwe wo dola baako mu",
"searchall": "Biribiara",
- "diff": "NSONSOE",
+ "diff": "nsonsoe",
"hide": "Fa sie",
"watch": "Hwe",
"undeleteviewlink": "Hwe",
diff --git a/languages/i18n/ty.json b/languages/i18n/ty.json
index f9cef959..9c3140e5 100644
--- a/languages/i18n/ty.json
+++ b/languages/i18n/ty.json
@@ -1,113 +1,114 @@
{
- "@metadata": {
- "authors": [
- "Sab",
- "Sainte-Rose (on ty.wikipedia.org)",
- "Tahitoa (on ty.wikipedia.org)"
- ]
- },
- "sunday": "tāpati",
- "monday": "monirē",
- "tuesday": "mahana piti",
- "wednesday": "mahana toru",
- "thursday": "mahana maha",
- "friday": "mahana pae",
- "saturday": "mahana mā’a",
- "sun": "tāpati",
- "mon": "monirē",
- "tue": "mahana piti",
- "wed": "mahana toru",
- "thu": "mahana maha",
- "fri": "mahana pae",
- "sat": "mahana mā’a",
- "january": "nō tēnuare",
- "february": "nō fepuare",
- "march": "nō māti",
- "april": "nō ’ēperēra",
- "may_long": "nō mē",
- "june": "nō tiunu",
- "july": "nō tiurai",
- "august": "nō tiurai",
- "september": "nō tetepa",
- "october": "nō ’ātopa",
- "november": "nō novema",
- "december": "nō tītema",
- "january-gen": "nō tēnuare",
- "february-gen": "nō fepuare",
- "march-gen": "nō māti",
- "april-gen": "nō ’ēperēra",
- "may-gen": "nō mē",
- "june-gen": "nō tiunu",
- "july-gen": "nō tiurai",
- "august-gen": "nō tiurai",
- "september-gen": "nō tetepa",
- "october-gen": "nō ’ātopa",
- "november-gen": "nō novema",
- "december-gen": "nō tītema",
- "jan": "nō tēnuare",
- "feb": "nō fepuare",
- "mar": "nō māti",
- "apr": "nō ’ēperēra",
- "may": "nō mē",
- "jun": "nō tiunu",
- "jul": "nō tiurai",
- "aug": "nō tiurai",
- "sep": "nō tetepa",
- "oct": "nō ’ātopa",
- "nov": "nō novema",
- "dec": "nō tītema",
- "about": "Nō",
- "article": "Parau pāpa’i",
- "navigation": "Arata’i",
- "qbedit": "Fa’ahuru ’ē",
- "qbmyoptions": "ta’u ’api",
- "help": "Tauturu",
- "search": "Roromā’imi",
- "searchbutton": "Roromā’imi",
- "searcharticle": "Haere",
- "history_short": "Parau tuatāpapa",
- "edit": "Fa’ahuru ’ē",
- "delete": "Fa’a’ore",
- "protect": "Pāruru",
- "specialpage": "’Api ta’a ’ē",
- "talk": "Paraparaura’a",
- "jumptonavigation": "arata’i",
- "jumptosearch": "haere",
- "aboutsite": "Nō {{SITENAME}}",
- "aboutpage": "Project:Nō",
- "edithelp": "Tauturu",
- "mainpage": "Fa’ari’ira’a",
- "mainpage-description": "Fa’ari’ira’a",
- "portal": "Fare auhoa",
- "editsection": "fa’ahuru ’ē",
- "editold": "fa’ahuru ’ē",
- "nstab-main": "Parau pāpa’i",
- "nstab-user": "Ta’ata",
- "nstab-special": "Ta’a ’ē",
- "nstab-image": "Hōho’a",
- "nstab-mediawiki": "Poro’i",
- "nstab-template": "Hōho’a fāito",
- "nstab-help": "Tauturu",
- "nstab-category": "Huru",
- "history-feed-title": "Parau tuatāpapa",
- "prefs-rc": "Te mau fa’ahuru-’ē-ra’a ’āpī",
- "prefs-files": "Te mau putu’ite",
- "youremail": "Tā’u ’āfata rata uira",
- "yourlanguage": "Te reo:",
- "email": "’Imere",
- "recentchanges": "Te mau fa’ahuru-’ē-ra’a ’āpī",
- "listfiles_user": "Ta’ata fa’a’ohipa",
- "file-anchor-link": "Hōho’a",
- "filehist-user": "Ta’ata",
- "randompage": "’Api mā’iti-haere-noa",
- "specialloguserlabel": "Ta’ata fa’a’ohipa :",
- "allpagessubmit": "Haere",
- "categories": "Te mau huru o te ’api",
- "watch": "Ha’apa’o",
- "prot_1movedto2": "’Ua tāhitihia te ’api [[$1]] e ana i te ’api ’āpī [[$2]]",
- "restriction-edit": "Fa’ahuru ’ē",
- "restriction-move": "Tāhiti",
- "whatlinkshere": "Te mau ’api i tū’atihia mai",
- "tooltip-search": "Roromā’imi {{SITENAME}}",
- "specialpages": "Te mau ’api ta’a ’ē"
+ "@metadata": {
+ "authors": [
+ "Sab",
+ "Sainte-Rose (on ty.wikipedia.org)",
+ "Tahitoa (on ty.wikipedia.org)",
+ "TMg"
+ ]
+ },
+ "sunday": "tāpati",
+ "monday": "monirē",
+ "tuesday": "mahana piti",
+ "wednesday": "mahana toru",
+ "thursday": "mahana maha",
+ "friday": "mahana pae",
+ "saturday": "mahana mā’a",
+ "sun": "tāpati",
+ "mon": "monirē",
+ "tue": "mahana piti",
+ "wed": "mahana toru",
+ "thu": "mahana maha",
+ "fri": "mahana pae",
+ "sat": "mahana mā’a",
+ "january": "nō tēnuare",
+ "february": "nō fepuare",
+ "march": "nō māti",
+ "april": "nō ’ēperēra",
+ "may_long": "nō mē",
+ "june": "nō tiunu",
+ "july": "nō tiurai",
+ "august": "nō ʻātete",
+ "september": "nō tetepa",
+ "october": "nō ’ātopa",
+ "november": "nō novema",
+ "december": "nō tītema",
+ "january-gen": "nō tēnuare",
+ "february-gen": "nō fepuare",
+ "march-gen": "nō māti",
+ "april-gen": "nō ’ēperēra",
+ "may-gen": "nō mē",
+ "june-gen": "nō tiunu",
+ "july-gen": "nō tiurai",
+ "august-gen": "nō ʻātete",
+ "september-gen": "nō tetepa",
+ "october-gen": "nō ’ātopa",
+ "november-gen": "nō novema",
+ "december-gen": "nō tītema",
+ "jan": "nō tēnuare",
+ "feb": "nō fepuare",
+ "mar": "nō māti",
+ "apr": "nō ’ēperēra",
+ "may": "nō mē",
+ "jun": "nō tiunu",
+ "jul": "nō tiurai",
+ "aug": "nō ʻātete",
+ "sep": "nō tetepa",
+ "oct": "nō ’ātopa",
+ "nov": "nō novema",
+ "dec": "nō tītema",
+ "about": "Nō",
+ "article": "Parau pāpa’i",
+ "navigation": "Arata’i",
+ "qbedit": "Fa’ahuru ’ē",
+ "qbmyoptions": "ta’u ’api",
+ "help": "Tauturu",
+ "search": "Roromā’imi",
+ "searchbutton": "Roromā’imi",
+ "searcharticle": "Haere",
+ "history_short": "Parau tuatāpapa",
+ "edit": "Fa’ahuru ’ē",
+ "delete": "Fa’a’ore",
+ "protect": "Pāruru",
+ "specialpage": "’Api ta’a ’ē",
+ "talk": "Paraparaura’a",
+ "jumptonavigation": "arata’i",
+ "jumptosearch": "haere",
+ "aboutsite": "Nō {{SITENAME}}",
+ "aboutpage": "Project:Nō",
+ "edithelp": "Tauturu",
+ "mainpage": "Fa’ari’ira’a",
+ "mainpage-description": "Fa’ari’ira’a",
+ "portal": "Fare auhoa",
+ "editsection": "fa’ahuru ’ē",
+ "editold": "fa’ahuru ’ē",
+ "nstab-main": "Parau pāpa’i",
+ "nstab-user": "Ta’ata",
+ "nstab-special": "Ta’a ’ē",
+ "nstab-image": "Hōho’a",
+ "nstab-mediawiki": "Poro’i",
+ "nstab-template": "Hōho’a fāito",
+ "nstab-help": "Tauturu",
+ "nstab-category": "Huru",
+ "history-feed-title": "Parau tuatāpapa",
+ "prefs-rc": "Te mau fa’ahuru-’ē-ra’a ’āpī",
+ "prefs-files": "Te mau putu’ite",
+ "youremail": "Tā’u ’āfata rata uira",
+ "yourlanguage": "Te reo:",
+ "email": "’Imere",
+ "recentchanges": "Te mau fa’ahuru-’ē-ra’a ’āpī",
+ "listfiles_user": "Ta’ata fa’a’ohipa",
+ "file-anchor-link": "Hōho’a",
+ "filehist-user": "Ta’ata",
+ "randompage": "’Api mā’iti-haere-noa",
+ "specialloguserlabel": "Ta’ata fa’a’ohipa :",
+ "allpagessubmit": "Haere",
+ "categories": "Te mau huru o te ’api",
+ "watch": "Ha’apa’o",
+ "prot_1movedto2": "’Ua tāhitihia te ’api [[$1]] e ana i te ’api ’āpī [[$2]]",
+ "restriction-edit": "Fa’ahuru ’ē",
+ "restriction-move": "Tāhiti",
+ "whatlinkshere": "Te mau ’api i tū’atihia mai",
+ "tooltip-search": "Roromā’imi {{SITENAME}}",
+ "specialpages": "Te mau ’api ta’a ’ē"
}
diff --git a/languages/i18n/tyv.json b/languages/i18n/tyv.json
index 73e24663..34f12ac4 100644
--- a/languages/i18n/tyv.json
+++ b/languages/i18n/tyv.json
@@ -12,8 +12,8 @@
]
},
"tog-underline": "Холбааны шыяры:",
- "tog-hideminor": "Сөөлгү өскерлиишкиннер арында бичии өскерлиишкиннерни чажырар",
- "tog-hidepatrolled": "Амгы өскерлиишкиннер арында истээн өскерлиишкиннерни чажырары",
+ "tog-hideminor": "Сөөлгү өскерлиишкиннерниң биче эдиглерин чажырар",
+ "tog-hidepatrolled": "Чаа өскерлиишкиннер даңзызында хынаан өскерлиишкиннерни чажырар",
"tog-newpageshidepatrolled": "Чаа арыннарның даңзындан истээн арыннарны чажырары",
"tog-usenewrc": "Чаа өскерлиишкиннерниң өөделеттинген даңзызын ажыглаар (JavaScript херек)",
"tog-numberheadings": "Эгелерин авто-санаар",
@@ -233,7 +233,7 @@
"internalerror": "Иштики алдаг",
"internalerror_info": "Иштики алдаг: $1",
"badtitle": "Багай ат",
- "badtitletext": "Негеттинип турар арын ады меге, куруг, чок болза дылдар аразында азы интервики ады шын эвес.\nАдында таарышпас демдектер бары чадапчок.",
+ "badtitletext": "Негеттинип турар арын ады меге, куруг, чок болза өске дылда азы интервикиде ады шын эвес айыттынган.\n\nАттарга ажыглавас ужурлуг демдектер, үжүктер бары чадапчок.",
"viewsource": "Дөзүн көөрү",
"actionthrottled": "Шеглээн дүрген",
"exception-nologin": "Кирбес",
@@ -288,12 +288,10 @@
"passwordreset-email": "Э-чагааның адреси:",
"passwordreset-emailelement": "Ажыглакчы ады: $1\nТүр чажыт сөс: $2",
"changeemail": "Э-чагааның адресин өскертири",
- "changeemail-header": "Бүрүткел бижиктиң э-чагааның адресин өскертири",
"changeemail-oldemail": "Амгы э-чагааның адреси:",
"changeemail-newemail": "Чаа э-чагааның адреси:",
"changeemail-none": "(чок)",
"changeemail-submit": "Э-чагааны өскертири",
- "changeemail-cancel": "Соксаары",
"bold_sample": "Кара сөзүглел",
"bold_tip": "Кара сөзүглел",
"italic_sample": "Ийлендирер сөзүглел",
@@ -526,18 +524,29 @@
"recentchanges-summary": "Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.",
"recentchanges-feed-description": "Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.",
"recentchanges-label-newpage": "Бо өскерлиишкин чаа арынны чогааткан.",
- "recentchanges-label-minor": "Бо өскерлиишкин бичии-дир",
+ "recentchanges-label-minor": "Бо өскерлиишкин бичии",
"recentchanges-label-bot": "Бо эдилгени робот күүсеткен.",
"recentchanges-label-unpatrolled": "Бо өскертилге истетинмээн (патрульдаттынмаан)",
+ "recentchanges-label-plusminus": "Арынның сөзүглели бердинген түң байт-биле өскерилген",
"recentchanges-legend-newpage": "$1 — чаа арын",
- "rcnotefrom": "Адаанда <strong>$2</strong> тура (<strong>$1</strong> чедир) өскертилгелерни санаан.",
+ "rcnotefrom": "<strong>$2</strong> үеде <strong>$1</strong> чедир өскертилгелерни санаан.",
"rclistfrom": "$3 $2 тура чаа өскерилгелерни көргүзер",
"rcshowhideminor": "Бичии өскерлиишкиннерни $1",
+ "rcshowhideminor-show": "көргүзер",
+ "rcshowhideminor-hide": "чажырар",
"rcshowhidebots": "Роботтарны $1",
"rcshowhideliu": "Кирген киржикчилерни $1",
- "rcshowhideanons": "Ады чок ажыглакчыларны $1",
+ "rcshowhideliu-show": "көргүзер",
+ "rcshowhideliu-hide": "чажырар",
+ "rcshowhideanons": "Адыжок киржикчилерни $1",
+ "rcshowhideanons-show": "көргүзер",
+ "rcshowhideanons-hide": "чажырар",
"rcshowhidepatr": "истээн өскерлиишкиннерни $1",
+ "rcshowhidepatr-show": "көргүзер",
+ "rcshowhidepatr-hide": "чажырар",
"rcshowhidemine": "Эдиглеримни $1",
+ "rcshowhidemine-show": "көргүзер",
+ "rcshowhidemine-hide": "чажырар",
"rclinks": "Сөөлгү $2 хүн иштинде болган $1 өскерлиишкиннерни көргүзер<br />$3",
"diff": "ылгал",
"hist": "төөгү",
@@ -635,7 +644,6 @@
"uncategorizedtemplates": "Аңгылалдаваан майыктар",
"unusedcategories": "Ажыглаваан бөлүктер",
"unusedimages": "Ажыглаваан файлдар",
- "popularpages": "Чоннуң арыннар",
"wantedcategories": "Күзээринге бөлүктер",
"wantedpages": "Күзээрүнге арыннар",
"mostlinked": "Эң холбаалар арыннар",
@@ -659,7 +667,6 @@
"pager-older-n": "{{PLURAL:$1|артык эски}}",
"booksources": "Номнарның үнген дөзү",
"booksources-search-legend": "Номнуң медээлерин дилээри",
- "booksources-go": "Күүcедири",
"specialloguserlabel": "Күүседикчи:",
"speciallogtitlelabel": "Target (aтка азы ажыглакчыга):",
"log": "Журналдар",
@@ -669,7 +676,7 @@
"allarticles": "Шупту арыннар",
"allpagessubmit": "Күүcедири",
"categories": "Аңгылалдар",
- "sp-deletedcontributions-contribs": "салыышкыннар",
+ "sp-deletedcontributions-contribs": "дадывыр",
"linksearch": "Даштыкы холбааларга дилээри",
"linksearch-ns": "Аттар делгеми:",
"linksearch-ok": "Дилээри",
@@ -697,7 +704,7 @@
"unwatch": "Хайгааравас",
"unwatchthispage": "Бо арынны хайгаарабас",
"watchlist-details": "Чугаалажылга арыннарын санаваска, хайгаарал даңзыңарда {{PLURAL:$1|$1 арын}} бар.",
- "wlshowlast": "Сөөлү $1 шак болгаш $2 хүн иштинде $3 көргүзери",
+ "wlshowlast": "Сөөлү $1 шак болгаш $2 хүн иштинде көргүзери",
"watchlist-options": "Хайгаарал даңзының эдиглери",
"watching": "Хайгаарап турар...",
"unwatching": "Хайгааравайн турар...",
@@ -737,7 +744,7 @@
"blanknamespace": "(Кол)",
"contributions": "{{GENDER:$1|Ажыглакчының}} салыышкыннары",
"contributions-title": "«$1» деп ажыглакчының салыышкыннары",
- "mycontris": "Салыышкыннар",
+ "mycontris": "Дадывыр",
"contribsub2": "$1 ($2)",
"uctop": "(амгы)",
"month": "Айдан:",
@@ -783,7 +790,7 @@
"blocklink": "кызыгаарлаары",
"unblocklink": "ажыдып хостаар",
"change-blocklink": "кызыгаарлаашкынны өскертири",
- "contribslink": "салыышкыннар",
+ "contribslink": "дадывыр",
"blocklogpage": "Кызыгаарлаашкынның журналы",
"blocklogentry": ", [[$1]] $2 дургузунда кызыгаарлаттынган: $3",
"block-log-flags-anononly": "чүгле адыжок киржикчилер",
@@ -899,7 +906,7 @@
"metadata-fields": "Бо даңзыда айыткан чурумалдар метаданныйларның кезектери чурумалдың арынынга көстүп кээр, метаданныйлар таблицазын дүрүп каан болур. \nАрткан кезектер аайлаан ёзугаар чажыт көстүр.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "Калбаа",
"exif-imagelength": "Бедик",
- "exif-imagedescription": "Чуруктуң ады",
+ "exif-imagedescription": "Чурумалдың ады",
"exif-artist": "Чогаадыкчы",
"exif-usercomment": "Ажыглакчының тайылбырлары",
"exif-jpegfilecomment": "JPEG фалй тайылбыры",
@@ -913,7 +920,6 @@
"exif-iimcategory-sci": "Эртем база техника",
"exif-iimcategory-spo": "Спорт",
"exif-iimcategory-wea": "Агаар",
- "watchlistall2": "шупту",
"namespacesall": "шупту",
"monthsall": "шупту",
"recreate": "Катап чогаадыры",
diff --git a/languages/i18n/tzm.json b/languages/i18n/tzm.json
index 843ceffa..04f2eb21 100644
--- a/languages/i18n/tzm.json
+++ b/languages/i18n/tzm.json
@@ -274,7 +274,6 @@
"search-relatedarticle": "ⵜⴰⵎⵣⴷⴰⵢⵜ",
"searchrelated": "ⵜⴰⵎⵣⴷⴰⵢⵜ",
"searchall": "ⵎⴰⵕⵕⴰ",
- "showingresultsheader": "{{PLURAL:$5|ⵜⴰⵢⴰⴼⵓⵜ '''$1'''|ⵜⵉⵢⴰⴼⵓⵜⵉⵏ '''$1–$2'''}} ⵙⴳ '''$3''' ⵉ '''$4'''",
"powersearch-toggleall": "ⵎⴰⵕⵕⴰ",
"powersearch-togglenone": "ⴰⵎⵢⴰ (ⵓⵍⴰⵛ)",
"search-external": "ⴰⵔⵣⵣⵓ ⴰⴱⵕⵕⴰⵏⵉ",
@@ -383,7 +382,6 @@
"mimesearch": "ⴰⵔⵣⵣⵓ ⵏ MIME",
"mimetype": "ⴰⵏⴰⵡ ⵓⵙⴷⴰⵡ:",
"statistics-pages": "ⵜⵉⵙⵏⴰⵡⵉⵏ",
- "statistics-views-total": "ⵎⴰⵕⵕⴰ ⵉⵎⵥⵕⴰⵏ",
"brokenredirects-edit": "ⴱⴷⴷⴻⵍ",
"brokenredirects-delete": "ⵓⴽⵓⵙ",
"withoutinterwiki-submit": "ⵥⵕ",
@@ -399,7 +397,6 @@
"booksources": "ⵉⵖⴱⵓⵍⴰ ⵏ ⵓⴷⵍⵉⵙ",
"booksources-search-legend": "ⵔⵣⵣⵓ ⵅⴼ ⵉⵖⴱⵓⵍⴰ ⵏ ⵉⴷⵍⵉⵙⵏ",
"booksources-isbn": "ISBN:",
- "booksources-go": "ⴷⴷⵓ",
"allpages": "ⵎⴰⵕⵕⴰ ⵜⵉⵙⵏⴰⵡⵉⵏ",
"allarticles": "ⵎⴰⵕⵕⴰ ⵜⵉⵙⵏⴰⵡⵉⵏ",
"allpagessubmit": "ⴷⴷⵓ",
@@ -421,7 +418,7 @@
"watchlistfor2": "ⵉ $1 $2",
"watch": "ⵥⵕ",
"unwatch": "ⵙⴱⴻⴷⴷ ⵍⵄⵙⵙⴰ",
- "wlshowlast": "ⵉⵥⵕⵉ ⵏⵉⴹⵏ $1 ⵜⴰⵔⴰⴳⵉⵏ $2 ⵓⵙⵙⴰⵏ $3",
+ "wlshowlast": "ⵉⵥⵕⵉ ⵏⵉⴹⵏ $1 ⵜⴰⵔⴰⴳⵉⵏ $2 ⵓⵙⵙⴰⵏ",
"changed": "ⵜⴱⴷⴷⴻⵍⴷ",
"delete-legend": "ⵓⴽⵓⵙ",
"protectcomment": "ⴰⵙⵔⴰⴳ:",
@@ -561,7 +558,6 @@
"exif-iimcategory-rel": "ⴰⵙⴳⴷ ⴷ ⵜⵉⴼⵍⵙⵉⵏ",
"exif-iimcategory-spo": "ⵜⵓⵏⵏⵓⵏⵜ",
"exif-iimcategory-wea": "ⴰⵏⵣⵡⵉ",
- "watchlistall2": "ⵎⴰⵕⵕⴰ",
"namespacesall": "ⵎⴰⵕⵕⴰ",
"monthsall": "ⵎⴰⵕⵕⴰ",
"confirm_purge_button": "ⵡⴰⵅⵅⴰ",
diff --git a/languages/i18n/udm.json b/languages/i18n/udm.json
index c2591b82..7bff7f28 100644
--- a/languages/i18n/udm.json
+++ b/languages/i18n/udm.json
@@ -1,206 +1,197 @@
{
- "@metadata": {
- "authors": [
- "Andrewboltachev",
- "Kaganer",
- "Udmwiki",
- "ОйЛ",
- "לערי ריינהארט"
- ]
- },
- "tog-underline": "Линкъёс ултӥз гожен сызоно",
- "tog-hideminor": "Берпуметӥ тупатонъёслэн списоксэс ичи воштонъёстэк возьматыны",
- "tog-hidepatrolled": "Берпуметӥ тупатонъёслэн списоксэс партрулировать каремын воштонъёстэк возьматыны",
- "tog-newpageshidepatrolled": "Выль бамъёслэн списоксэс партрулировать каремын бамъёстэк возьматыны",
- "tog-extendwatchlist": "Чаклан списокын вань тупатонъёсты возьматыны (озьытэк берпуметӥоссэс гинэ)",
- "tog-usenewrc": "Выль тупатонъёслэсь списоксэс умояллям сямен возьматыны (JavsScript кулэ)",
- "tog-numberheadings": "Заголовокъёсты автоматически нумеровать карыны",
- "tog-showtoolbar": "Тупатон тӥрлыкъёслэн панельзэс возьматыны (JavaScript кулэ)",
- "tog-editondblclick": "Бамъёсты шырлэсь зӥбонзэ кык пол зӥбыса тупатыны (JavaScript кулэ)",
- "tog-editsectiononrightclick": "Cекциолэсь заголовок вылазы шырлэн бур кнопкаеныз зӥбыса тупатонзэс лэзьыны (JavaScript кулэ)",
- "tog-rememberpassword": "Мынэсьтым пыроннимме та браузерын возьыны ($1 нуналлэсь кемагес ӧвӧл)",
- "tog-watchcreations": "Мынэсьтым кылдытэм бамъёсме но ӝуткам файлъёсме чаклан списокам пыртыны",
- "tog-watchdefault": "Мынэсьтым тупатэм бамъёсме но файлъёсме чаклан списокам пыртыны",
- "tog-watchmoves": "Мынэсьтым мукет интые выжтэм бамъёсме но файлъёсме чаклан списокам пыртыны",
- "tog-watchdeletion": "Мынэсьтым ӵушыса быдтэм бамъёсме но файлъёсме чаклан списоке пыртыны",
- "tog-minordefault": "Вань воштонъёсты «ичи воштон» пусэн пусйыны",
- "tog-previewontop": "Утён азьвыл учконлэсь укнозэ тупатон укнолэсь азьвылгес возьматыны",
- "tog-previewonfirst": "Бам нырысьсэ утиськыкуз уётн азьвыл учконэз возьматыны",
- "underline-always": "Котьку",
- "underline-never": "Ноку",
- "underline-default": "Браузерлэсь настройкаоссэ уже кутоно",
- "editfont-style": "Тупатон бусыысь шрифтлэн стилез",
- "editfont-default": "Браузерлэн настройкаосысьтыз шрифтэз уже кутоно",
- "editfont-monospace": "Огпасьтала пусъёсын шрифт",
- "editfont-sansserif": "Засечкатэк шрифт",
- "editfont-serif": "Засечкаен шрифт",
- "sunday": "арнянунал",
- "monday": "вордӥськон",
- "tuesday": "пуксён",
- "wednesday": "вирнунал",
- "thursday": "покчиарня",
- "friday": "удмуртарня",
- "saturday": "кӧснунал",
- "sun": "Арн",
- "mon": "Врд",
- "tue": "Пкс",
- "wed": "Врн",
- "thu": "Пкч",
- "fri": "Удм",
- "sat": "Ксн",
- "january": "толшор",
- "february": "тулыспал",
- "march": "южтолэзь",
- "april": "оштолэзь",
- "may_long": "куартолэзь",
- "june": "инвожо",
- "july": "пӧсьтолэзь",
- "august": "гудырикошкон",
- "september": "куарусён",
- "october": "коньывуон",
- "november": "шуркынмон",
- "december": "толсур",
- "january-gen": "толшоре",
- "february-gen": "тулыспалэ",
- "march-gen": "южтолэзе",
- "april-gen": "оштолэзе",
- "may-gen": "куартолэзе",
- "june-gen": "инвожое",
- "july-gen": "пӧсьтолэзе",
- "august-gen": "гудырикошконэ",
- "september-gen": "куарусёнэ",
- "october-gen": "коньывуонэ",
- "november-gen": "шуркынмонэ",
- "december-gen": "толсурэ",
- "jan": "тшт",
- "feb": "тпт",
- "mar": "южт",
- "apr": "ошт",
- "may": "южт",
- "jun": "ивт",
- "jul": "пст",
- "aug": "гкт",
- "sep": "кст",
- "oct": "квт",
- "nov": "шкт",
- "dec": "тст",
- "pagecategories": "{{PLURAL:$1|1=Категория|Категориос}}",
- "category_header": "«$1» категориысь бамъёс",
- "subcategories": "Подкатегориос",
- "category-media-header": "«$1» категориысь файлъёс",
- "category-empty": "''Та категориын али бамъёс но, файлъёс но ӧвӧл.''",
- "hidden-categories": "{{PLURAL:$1|1=Ватэм категория|Ватэм категориос}}",
- "hidden-category-category": "Ватэм категориос",
- "category-subcat-count": "{{PLURAL:$2|1=Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 подкатегория $2 пӧлысь.}}",
- "category-subcat-count-limited": "Со категориын $1 подкатегория.",
- "category-article-count": "{{PLURAL:$2|1=Со категориын одӥг бам гинэ.|Возьматэмын $1 бам $2 пӧлысь.}}",
- "category-article-count-limited": "Со категориын $1 бам.",
- "category-file-count": "{{PLURAL:$2|1=Со категориын одӥг файл гинэ.|Возьматэмын $1 файл $2 пӧлысь.}}",
- "category-file-count-limited": "Со категориын $1 файл.",
- "listingcontinuesabbrev": "азьлань",
- "index-category": "Индексировать кароно бамъёс",
- "noindex-category": "Индексировать каронтэм бамъёс",
- "about": "Та сярысь",
- "article": "Статья",
- "mypage": "Ас бам",
- "mytalk": "Викиавтор сярысь вераськон",
- "anontalk": "Со IP-адрес сярысь вераськон",
- "navigation": "Навигация",
- "qbpageoptions": "Бамлэн настройкаосыз",
- "faq": "Юан-веран",
- "faqpage": "Project:Юан-веран",
- "vector-action-addsection": "Выль темаез ватсано",
- "vector-action-delete": "Быдтоно",
- "vector-action-move": "Мукет интые выжтыны",
- "vector-action-protect": "Утьыны",
- "vector-view-create": "Кылдытоно",
- "vector-view-edit": "Тупатоно",
- "vector-view-history": "История",
- "vector-view-view": "Лыдӟоно",
- "vector-view-viewsource": "Кодзэ учкыны",
- "errorpagetitle": "Янгыш",
- "tagline": "{{SITENAME}}-ысь материал",
- "help": "Валэктонъёс",
- "search": "Утчан",
- "searchbutton": "Утчано",
- "searcharticle": "Мыноно",
- "history": "Бамлэн историез",
- "history_short": "история",
- "printableversion": "Печатламон версия",
- "permalink": "Ӵапак та версиезлы линк",
- "print": "Печатлано",
- "edit": "тупатыны",
- "delete": "Быдтыны",
- "protect": "Утьыны",
- "talkpagelinktext": "Вераськон",
- "talk": "Вераськон",
- "toolbox": "Тӥрлык",
- "jumptonavigation": "навигация",
- "jumptosearch": "утчан",
- "currentevents": "Выль иворъёс",
- "currentevents-url": "Project:Выль иворъёс",
- "mainpage": "Кутскон бам",
- "mainpage-description": "Кутскон бам",
- "portal": "Сообщество",
- "portal-url": "Project:Портал сообщества",
- "retrievedfrom": "«$1»-лэсь басьтэмын",
- "editsection": "тупатыны",
- "editsectionhint": "$1 секциез тупатоно",
- "showtoc": "возьматоно",
- "hidetoc": "ватоно",
- "site-rss-feed": "$1 — RSS-лента",
- "site-atom-feed": "$1 — Atom-лента",
- "red-link-title": "$1 (со бам ӧвӧл на)",
- "nstab-user": "Викиавтор",
- "nstab-mediawiki": "Ивортон",
- "viewsource": "Кодзэ учкыны",
- "login": "Пырон",
- "nav-login-createaccount": "Нимдэс вераны / Регистрациез ортчытыны",
- "userlogin": "Регистрациез ортчытыны яке Википедие пырыны",
- "userloginnocreate": "Пырон",
- "logout": "Кошкыны",
- "userlogout": "Кошкыны",
- "createaccount": "выль вики-авторлэн регистрациез",
- "summary": "Мар но малы тупатэмын? (вакчияк):",
- "minoredit": "Ичи воштон",
- "noarticletext": "В настоящий момент текст на данной странице отсутствует.\nВы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов],\nили '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
- "revdelete-radio-set": "Ватэм",
- "revdelete-radio-unset": "Адӟымон",
- "searchresults": "Шедьтэмын",
- "search-result-size": "$1 кыл({{PLURAL:$2|1=1 word|$2 words}})",
- "preferences": "настройкаос",
- "mypreferences": "Настройкаос",
- "prefs-watchlist": "Чаклан список",
- "recentchanges": "Выль тупатонъёс",
- "hist": "история",
- "recentchangeslinked": "Герӟаськем тупатонъёс",
- "recentchangeslinked-feed": "Герӟаськем тупатонъёс",
- "recentchangeslinked-toolbox": "Герӟаськем тупатонъёс",
- "upload": "Файл поныны",
- "sharedupload": "Та файл — $1-ысь, сое мукет проектъёсын но уже кутыны луэ.",
- "randompage": "Олокыӵе статья",
- "nbytes": "$1 байт",
- "move": "Мукет интые выжтыны",
- "emailmessage": "Ивортон:",
- "watchlist": "Чаклано статьяос",
- "mywatchlist": "Чаклан список",
- "watch": "Чаклано",
- "unwatch": "Чакламысь дугдыны",
- "mycontris": "Мынам гожтэмъёсы",
- "whatlinkshere": "Татчы линкъёс",
- "movearticle": "Статьяез мукет интые выжтыны",
- "move-watch": "Та бамез чаклан списоке пыртыны",
- "delete_and_move": "Быдтыны но мукет интые выжтыны",
- "allmessagesname": "Ивортон",
- "tooltip-ca-talk": "Бамлэн контентэз сярысь вераськон",
- "tooltip-search": "Утчано {{SITENAME}}",
- "tooltip-n-mainpage": "Кутскон баме мыноно",
- "tooltip-n-mainpage-description": "Кутскон баме мыноно",
- "tooltip-n-portal": "Проект сярысь, мар карыны быгатоды, ужлы кулэ луэмзэ кытысь шедьтоно",
- "tooltip-n-recentchanges": "Берпуметӥ тупатонъёслэн списоксы",
- "tooltip-n-randompage": "Олокыӵе бамез учконо",
- "tooltip-t-whatlinkshere": "Ваньмыз бамъёс, кудъёсаз та бамлы линксы вань",
- "tooltip-t-specialpages": "Специальной бамъёслэн списоксы",
- "pageinfo-toolboxlink": "Бам сярысь тодэтъёс",
- "specialpages": "Ваньмыз панельёс"
+ "@metadata": {
+ "authors": [
+ "Andrewboltachev",
+ "Kaganer",
+ "Udmwiki",
+ "ОйЛ",
+ "לערי ריינהארט",
+ "TMg"
+ ]
+ },
+ "tog-underline": "Линкъёс ултӥз гожен сызоно",
+ "tog-hideminor": "Берпуметӥ тупатонъёслэн списоксэс ичи воштонъёстэк возьматыны",
+ "tog-hidepatrolled": "Берпуметӥ тупатонъёслэн списоксэс партрулировать каремын воштонъёстэк возьматыны",
+ "tog-newpageshidepatrolled": "Выль бамъёслэн списоксэс партрулировать каремын бамъёстэк возьматыны",
+ "tog-extendwatchlist": "Чаклан списокын вань тупатонъёсты возьматыны (озьытэк берпуметӥоссэс гинэ)",
+ "tog-usenewrc": "Выль тупатонъёслэсь списоксэс умояллям сямен возьматыны (JavsScript кулэ)",
+ "tog-numberheadings": "Заголовокъёсты автоматически нумеровать карыны",
+ "tog-showtoolbar": "Тупатон тӥрлыкъёслэн панельзэс возьматыны (JavaScript кулэ)",
+ "tog-editondblclick": "Бамъёсты шырлэсь зӥбонзэ кык пол зӥбыса тупатыны (JavaScript кулэ)",
+ "tog-editsectiononrightclick": "Cекциолэсь заголовок вылазы шырлэн бур кнопкаеныз зӥбыса тупатонзэс лэзьыны (JavaScript кулэ)",
+ "tog-watchcreations": "Мынэсьтым кылдытэм бамъёсме но ӝуткам файлъёсме чаклан списокам пыртыны",
+ "tog-watchdefault": "Мынэсьтым тупатэм бамъёсме но файлъёсме чаклан списокам пыртыны",
+ "tog-watchmoves": "Мынэсьтым мукет интые выжтэм бамъёсме но файлъёсме чаклан списокам пыртыны",
+ "tog-watchdeletion": "Мынэсьтым ӵушыса быдтэм бамъёсме но файлъёсме чаклан списоке пыртыны",
+ "tog-minordefault": "Вань воштонъёсты «ичи воштон» пусэн пусйыны",
+ "tog-previewontop": "Утён азьвыл учконлэсь укнозэ тупатон укнолэсь азьвылгес возьматыны",
+ "tog-previewonfirst": "Бам нырысьсэ утиськыкуз уётн азьвыл учконэз возьматыны",
+ "underline-always": "Котьку",
+ "underline-never": "Ноку",
+ "underline-default": "Браузерлэсь настройкаоссэ уже кутоно",
+ "editfont-style": "Тупатон бусыысь шрифтлэн стилез",
+ "editfont-default": "Браузерлэн настройкаосысьтыз шрифтэз уже кутоно",
+ "editfont-monospace": "Огпасьтала пусъёсын шрифт",
+ "editfont-sansserif": "Засечкатэк шрифт",
+ "editfont-serif": "Засечкаен шрифт",
+ "sunday": "арнянунал",
+ "monday": "вордӥськон",
+ "tuesday": "пуксён",
+ "wednesday": "вирнунал",
+ "thursday": "покчиарня",
+ "friday": "удмуртарня",
+ "saturday": "кӧснунал",
+ "sun": "Арн",
+ "mon": "Врд",
+ "tue": "Пкс",
+ "wed": "Врн",
+ "thu": "Пкч",
+ "fri": "Удм",
+ "sat": "Ксн",
+ "january": "толшор",
+ "february": "тулыспал",
+ "march": "южтолэзь",
+ "april": "оштолэзь",
+ "may_long": "куартолэзь",
+ "june": "инвожо",
+ "july": "пӧсьтолэзь",
+ "august": "гудырикошкон",
+ "september": "куарусён",
+ "october": "коньывуон",
+ "november": "шуркынмон",
+ "december": "толсур",
+ "january-gen": "толшоре",
+ "february-gen": "тулыспалэ",
+ "march-gen": "южтолэзе",
+ "april-gen": "оштолэзе",
+ "may-gen": "куартолэзе",
+ "june-gen": "инвожое",
+ "july-gen": "пӧсьтолэзе",
+ "august-gen": "гудырикошконэ",
+ "september-gen": "куарусёнэ",
+ "october-gen": "коньывуонэ",
+ "november-gen": "шуркынмонэ",
+ "december-gen": "толсурэ",
+ "jan": "тшт",
+ "feb": "тпт",
+ "mar": "южт",
+ "apr": "ошт",
+ "may": "крт",
+ "jun": "ивт",
+ "jul": "пст",
+ "aug": "гкт",
+ "sep": "кст",
+ "oct": "квт",
+ "nov": "шкт",
+ "dec": "тст",
+ "pagecategories": "{{PLURAL:$1|1=Категория|Категориос}}",
+ "category_header": "«$1» категориысь бамъёс",
+ "subcategories": "Подкатегориос",
+ "category-media-header": "«$1» категориысь файлъёс",
+ "category-empty": "''Та категориын али бамъёс но, файлъёс но ӧвӧл.''",
+ "hidden-categories": "{{PLURAL:$1|1=Ватэм категория|Ватэм категориос}}",
+ "hidden-category-category": "Ватэм категориос",
+ "category-subcat-count": "{{PLURAL:$2|1=Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 подкатегория $2 пӧлысь.}}",
+ "category-subcat-count-limited": "Со категориын $1 подкатегория.",
+ "category-article-count": "{{PLURAL:$2|1=Со категориын одӥг бам гинэ.|Возьматэмын $1 бам $2 пӧлысь.}}",
+ "category-article-count-limited": "Со категориын $1 бам.",
+ "category-file-count": "{{PLURAL:$2|1=Со категориын одӥг файл гинэ.|Возьматэмын $1 файл $2 пӧлысь.}}",
+ "category-file-count-limited": "Со категориын $1 файл.",
+ "listingcontinuesabbrev": "азьлань",
+ "index-category": "Индексировать кароно бамъёс",
+ "noindex-category": "Индексировать каронтэм бамъёс",
+ "about": "Та сярысь",
+ "article": "Статья",
+ "mypage": "Ас бам",
+ "mytalk": "Викиавтор сярысь вераськон",
+ "anontalk": "Со IP-адрес сярысь вераськон",
+ "navigation": "Навигация",
+ "qbpageoptions": "Бамлэн настройкаосыз",
+ "faq": "Юан-веран",
+ "faqpage": "Project:Юан-веран",
+ "errorpagetitle": "Янгыш",
+ "tagline": "{{SITENAME}}-ысь материал",
+ "help": "Валэктонъёс",
+ "search": "Утчан",
+ "searchbutton": "Утчано",
+ "searcharticle": "Мыноно",
+ "history": "Бамлэн историез",
+ "history_short": "история",
+ "printableversion": "Печатламон версия",
+ "permalink": "Ӵапак та версиезлы линк",
+ "print": "Печатлано",
+ "edit": "тупатыны",
+ "delete": "Быдтыны",
+ "protect": "Утьыны",
+ "talkpagelinktext": "Вераськон",
+ "talk": "Вераськон",
+ "toolbox": "Тӥрлык",
+ "jumptonavigation": "навигация",
+ "jumptosearch": "утчан",
+ "currentevents": "Выль иворъёс",
+ "currentevents-url": "Project:Выль иворъёс",
+ "mainpage": "Кутскон бам",
+ "mainpage-description": "Кутскон бам",
+ "portal": "Сообщество",
+ "portal-url": "Project:Портал сообщества",
+ "retrievedfrom": "«$1»-лэсь басьтэмын",
+ "editsection": "тупатыны",
+ "editsectionhint": "$1 секциез тупатоно",
+ "showtoc": "возьматоно",
+ "hidetoc": "ватоно",
+ "site-rss-feed": "$1 — RSS-лента",
+ "site-atom-feed": "$1 — Atom-лента",
+ "red-link-title": "$1 (со бам ӧвӧл на)",
+ "nstab-user": "Викиавтор",
+ "nstab-mediawiki": "Ивортон",
+ "viewsource": "Кодзэ учкыны",
+ "login": "Пырон",
+ "nav-login-createaccount": "Нимдэс вераны / Регистрациез ортчытыны",
+ "userlogin": "Регистрациез ортчытыны яке Википедие пырыны",
+ "userloginnocreate": "Пырон",
+ "logout": "Кошкыны",
+ "userlogout": "Кошкыны",
+ "createaccount": "выль вики-авторлэн регистрациез",
+ "summary": "Мар но малы тупатэмын? (вакчияк):",
+ "minoredit": "Ичи воштон",
+ "noarticletext": "В настоящий момент текст на данной странице отсутствует.\nВы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов],\nили '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
+ "revdelete-radio-set": "Ватэм",
+ "revdelete-radio-unset": "Адӟымон",
+ "searchresults": "Шедьтэмын",
+ "search-result-size": "$1 кыл({{PLURAL:$2|1=1 word|$2 words}})",
+ "preferences": "настройкаос",
+ "mypreferences": "Настройкаос",
+ "prefs-watchlist": "Чаклан список",
+ "recentchanges": "Выль тупатонъёс",
+ "hist": "история",
+ "recentchangeslinked": "Герӟаськем тупатонъёс",
+ "recentchangeslinked-feed": "Герӟаськем тупатонъёс",
+ "recentchangeslinked-toolbox": "Герӟаськем тупатонъёс",
+ "upload": "Файл поныны",
+ "sharedupload": "Та файл — $1-ысь, сое мукет проектъёсын но уже кутыны луэ.",
+ "randompage": "Олокыӵе статья",
+ "nbytes": "$1 байт",
+ "move": "Мукет интые выжтыны",
+ "emailmessage": "Ивортон:",
+ "watchlist": "Чаклано статьяос",
+ "mywatchlist": "Чаклан список",
+ "watch": "Чаклано",
+ "unwatch": "Чакламысь дугдыны",
+ "mycontris": "Мынам гожтэмъёсы",
+ "whatlinkshere": "Татчы линкъёс",
+ "movearticle": "Статьяез мукет интые выжтыны",
+ "move-watch": "Та бамез чаклан списоке пыртыны",
+ "delete_and_move": "Быдтыны но мукет интые выжтыны",
+ "allmessagesname": "Ивортон",
+ "tooltip-ca-talk": "Бамлэн контентэз сярысь вераськон",
+ "tooltip-search": "Утчано {{SITENAME}}",
+ "tooltip-n-mainpage": "Кутскон баме мыноно",
+ "tooltip-n-mainpage-description": "Кутскон баме мыноно",
+ "tooltip-n-portal": "Проект сярысь, мар карыны быгатоды, ужлы кулэ луэмзэ кытысь шедьтоно",
+ "tooltip-n-recentchanges": "Берпуметӥ тупатонъёслэн списоксы",
+ "tooltip-n-randompage": "Олокыӵе бамез учконо",
+ "tooltip-t-whatlinkshere": "Ваньмыз бамъёс, кудъёсаз та бамлы линксы вань",
+ "tooltip-t-specialpages": "Специальной бамъёслэн списоксы",
+ "pageinfo-toolboxlink": "Бам сярысь тодэтъёс",
+ "specialpages": "Ваньмыз панельёс"
}
diff --git a/languages/i18n/ug-arab.json b/languages/i18n/ug-arab.json
index a4f87fa5..2c73fb52 100644
--- a/languages/i18n/ug-arab.json
+++ b/languages/i18n/ug-arab.json
@@ -9,7 +9,8 @@
"Sahran",
"Tel'et",
"بىلگە",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "ئۇلانما ئاستى سىزىقى:",
@@ -495,7 +496,6 @@
"passwordreset-emailsent-capture": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى، تۆۋەندە كۆرسىتىلىدۇ.",
"passwordreset-emailerror-capture": "ھاسىل قىلىنغان پارولنى قايتا بېكىتىش ئېلخېتى تۆۋەندە كۆرسىتىلگەندەك ئەمما ئۇنى {{GENDER:$2|ئىشلەتكۈچى}}گە يوللىيالمىدى: $1",
"changeemail": "ئېلخەت ئادرېس ئۆزگەرت",
- "changeemail-header": "ھېساباتنىڭ ئېلخەت ئادرېسىنى ئۆزگەرت",
"changeemail-text": "بۇ جەدۋەل تاماملانسا ئېلخەت ئادرېسىڭىزنى ئۆزگەرتىدۇ. سىز ئىم كىرگۈزۈپ بۇ ئۆزگەرتىشنى جەزملەيسىز.",
"changeemail-no-info": "سىز تىزىمغا كىرگەندىن كېيىن بىۋاسىتە بۇ بەتكە كىرىشىڭىز لازىم.",
"changeemail-oldemail": "نۆۋەتتىكى ئېلخەت ئادرېسى:",
@@ -503,7 +503,6 @@
"changeemail-none": "(يوق)",
"changeemail-password": "{{SITENAME}} دىكى پارولىڭىز:",
"changeemail-submit": "ئېلخەت ئۆزگەرت",
- "changeemail-cancel": "ۋاز كەچ",
"changeemail-throttled": "سىز بۇ ھېساباتتا تىزىمغا كىرىشنى كۆپ قېتىم سىنىدىڭىز.\n$1 ساقلاپ، ئاندىن قايتا سىناڭ.",
"resettokens": "ئاچقۇچلۇق بەلگىلەرنى قايتا بېكىتمەك",
"resettokens-text": "سىز بۇ يەردە سىزنىڭ ھىساۋاتىڭىزگە مۇناسۋەتلىك شەخسى ئۇچۇر مەخپىيەتلىكىنى قايتا كۆرەلەيسىز.\n\nئۇ ئۇچۇرلار ھەمبەھرلىنىپ كەتسە ياكى باشقىلار ئىشلىتۋالغان بولسا، ئۇ ئۇچۇرلارنى ئەسلىگە قايتۇرۇڭ.",
@@ -772,7 +771,6 @@
"mergehistory-reason": "سەۋەب:",
"mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
"mergelog": "بىرلەشتۈرۈش خاتىرىسى",
- "pagemerge-logentry": "[[$1]] نى [[$2]] غا بىرلەشتۈرۈلدى: ( تۈزىتىلگەن نەشرى $3)",
"revertmerge": "پارچىلا",
"mergelogpagetext": "تۆۋەندىكىسى يېقىندا بىر بەتنىڭ تۈزىتىش تارىخىنىڭ باشقا بىر بەتكە بىرلەشتۈرۈلگەنلىك تىزىملىكى",
"history-title": "\"$1\" نىڭ ئۆزگەرتىش خاتىرىسى",
@@ -820,7 +818,6 @@
"searchrelated": "ئالاقىدار",
"searchall": "ھەممىسى",
"showingresults": "تۆۋەندە '''$2''' - نەتىجىدىن باشلانغان {{PLURAL:$1|'''1''' نەتىجە|'''$1''' نەتىجە}} كۆرسىتىدۇ:",
- "showingresultsheader": "'''$4''' نىڭ {{PLURAL:$5|'''$1''' دىن '''$3'''غىچە نەتىجە | '''$1 - $2''' غىچە جەمئى '''$3''' نەتىجە}}",
"search-nonefound": "سۈرۈشتۈرۈشكە ماس نەتىجە تېپىلمىدى.",
"powersearch-legend": "ئالىي ئىزدەش",
"powersearch-ns": "ئات بوشلۇقىدىن ئىزدە:",
@@ -1381,7 +1378,6 @@
"statistics": "ستاتىستىكا",
"statistics-header-pages": "بەت ستاتىستىكا",
"statistics-header-edits": "تەھرىر ستاتىستىكا",
- "statistics-header-views": "كۆرۈش ستاتىستىكا",
"statistics-header-users": "ئىشلەتكۈچى ستاتىستىكا",
"statistics-header-hooks": "باشقا سىتاتىستىكا",
"statistics-articles": "مەزمۇن بېتى",
@@ -1390,13 +1386,9 @@
"statistics-files": "يۈكلەنگەن ھۆججەتلەر",
"statistics-edits": " {{SITENAME}} تەڭشىگەن بەتنىڭ تەھرىر سانى",
"statistics-edits-average": "ھەر بىر بەتنىڭ ئوتتۇرىچە تەھرىر سانى",
- "statistics-views-total": "كۆرسىتىش ئومۇمى سانى",
- "statistics-views-total-desc": "مەۋجۇت بولمىغان بەت ۋە ئالاھىدە بەتلەرنىڭ كۆرۈلۈش سانىنى ئۆز ئىچىگە ئالمايدۇ",
- "statistics-views-peredit": "ھەر قېتىملىق تەھرىرنى كۆرسىتىش سانى",
"statistics-users": "خەتلەتكەن [[Special:ListUsers|ئىشلەتكۈچى]]",
"statistics-users-active": "ئاكتىپ ئىشلەتكۈچى",
"statistics-users-active-desc": "ئالدىنقى {{PLURAL:$1|كۈن|$1 كۈن}} دىكى مەشغۇلات قىلغان ئىشلەتكۈچىلەر",
- "statistics-mostpopular": "ئەڭ كۆپ كۆرۈلگەن بەتلەر",
"doubleredirects": "قوش قايتا نىشانلانغان بەت",
"doubleredirectstext": "بۇ بەتتە قايتا نىشانلانغان بەت يەنە بىر قايتا نىشانلانغان بەتنى نىشانغانلىق تىزىملىكى كۆرسىتىلدى.\nھەر بىر قۇردا بىرىنچى ۋە ئىككىنچى قايتا نىشانلانغان بەتنىڭ ئۇلانمىسىنى شۇنداقلا ئىككىنچى قايتا نىشانلانغان بەتنىڭ نىشانىنى ئۆز ئىچىگە ئالىدۇ، ئادەتتە كۆرسىتىلىدىغىنى \"ھەقىقىي\" نىشان بەت، مۇنداقچە ئېيتقاندا بىرىنچى نىشانلانغان بەت نىشانلايدىغان بەتتۇر.",
"double-redirect-fixed-move": "[[$1]] يۆتكەلدى.\\n\nھازىر [[$2]] نى قايتا نىشانلىدى.",
@@ -1429,7 +1421,6 @@
"uncategorizedtemplates": "تۈرگە ئايرىلمىغان قېلىپلار",
"unusedcategories": "ئىشلىتىلمىگەن تۈرلەر",
"unusedimages": "ئىشلىتىلمىگەن ھۆججەتلەر",
- "popularpages": "جەلپكار بەتلەر",
"wantedcategories": "لازىملىق تۈرلەر",
"wantedpages": "كېرەكلىك بەتلەر",
"wantedpages-badtitle": "نەتىجە گۇرۇپپىسىدىكى ئىناۋەتسىز ماۋزۇ: $1",
@@ -1479,7 +1470,6 @@
"booksources": "كىتاب مەنبەسى",
"booksources-search-legend": "كىتاب مەنبەسى ئىزدە",
"booksources-isbn": "ISBN:",
- "booksources-go": "يۆتكەل",
"booksources-text": "تۆۋەندىكىسى بىر قىسىم تور كىتابخانىلىرىنىڭ تىزىملىكى، ئىچىدە سىز ئىزدىمەكچى بولغان كىتابلارنىڭ تېخىمۇ كۆپ ئۇچۇرى بولۇشى مۇمكىن:",
"booksources-invalid-isbn": "تەمىنلىگەن ISBN نومۇرى توغرا ئەمەس. ئەسلى كۆچۈرگەن مەنبەدىكى نومۇردا خاتالىق بار يوقلۇقىنى تەكشۈرۈڭ.",
"specialloguserlabel": "ئىشلەتكۈچى:",
@@ -1599,7 +1589,7 @@
"wlheader-enotif": "ئېلخەتتە ئەسكەرتىش ئىقتىدارى قوزغىتىلدى.",
"wlheader-showupdated": "سىز ئالدىنقى قېتىم كۆرگەندىن كېيىن ئۆزگەرتىلگەن بەتلەر '''توم''' كۆرۈنىدۇ",
"wlnote": "تۆۋەندىكىسى يېقىنقى {{PLURAL:$2|سائەت}} ئىچىدىكى ئاخىرقى '{{PLURAL:$1| قېتىملىق}} ئۆزگەرتىش، $3 $4 گىچە.",
- "wlshowlast": "يېقىنقى $1 سائەت $2 كۈن $3 نىڭ ئۆزگەرتىشىنى كۆرسەت",
+ "wlshowlast": "يېقىنقى $1 سائەت $2 كۈن نىڭ ئۆزگەرتىشىنى كۆرسەت",
"watchlist-options": "كۆزەت تىزىملىك تاللانما",
"watching": "كۆزەت قىلىۋاتىدۇ…",
"unwatching": "كۆزەت قىلمايۋاتىدۇ…",
@@ -1646,7 +1636,6 @@
"delete-toobig": "بۇ بەتنىڭ بەك كۆپ تەھرىرلەش تارىخى بار، {{PLURAL:$1|تۈزىتىلگەن نەشرى|تۈزىتىلگەن نەشرى}} قېتىمدىن ئارتۇق. {{SITENAME}} قالايمىقانچىلىقنىڭ ئالدىنى ئېلىش ئۈچۈن بۇ خىل بەتلەرنى ئۆچۈرۈش مەشغۇلاتى چەكلەندى.",
"delete-warning-toobig": "بۇ بەتنىڭ تەھرىرلەش تارىخى بەك كۆپ، {{PLURAL:$1|تۈزىتىلگەن نەشرى|تۈزىتىلگەن نەشرى}} قېتىمدىن ئارتۇق.\nبۇ بەت ئۆچۈرۈلسە {{SITENAME}} ساندانىنىڭ مەشغۇلاتىنى قالايمىقانلاشتۇرۇۋېتىشى مۇمكىن؛\nبۇ مەشغۇلاتنى داۋاملاشتۇرۇشتىن ئىلگىرى ئېھتىيات قىلىڭ.",
"rollback": "تەھرىر ئەسلىگە قايتۇر",
- "rollback_short": "ئەسلىگە قايتۇر",
"rollbacklink": "ئەسلىگە قايتۇر",
"rollbacklinkcount": "$1 {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر",
"rollbacklinkcount-morethan": "$1 دىن كۆپ {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر",
@@ -2016,7 +2005,6 @@
"import": "بەت ئەكىر",
"importinterwiki": "wiki ھالقىپ ئەكىر",
"import-interwiki-text": "wiki دىن بىرنى ۋە بەت ماۋزۇسىنى تاللاپ ئەكىرىڭ.\nتۈزىتىلگەن ۋاقىت ۋە تەھرىرلىگۈچى ئاتى بىرلا ۋاقىتتا ساقلىنىدۇ.\nبارلىق wiki ھالقىغان ئەكىرىش مەشغۇلاتى [[Special:Log/import|ئەكىرىش خاتىرىسى]]غا خاتىرىلىنىدۇ.",
- "import-interwiki-source": "مەنبە wiki /بەت:",
"import-interwiki-history": "بۇ بەتنىڭ ھەممە تارىخى تۈزىتىلگەن نەشرىنى كۆچۈر.",
"import-interwiki-templates": "ھەممە قېلىپىنى ئۆز ئىچىگە ئالىدۇ",
"import-interwiki-submit": "ئەكىر",
@@ -2057,18 +2045,14 @@
"import-rootpage-nosubpage": "\"$1\" ئات بوشلۇقىنىڭ غول بېتى تارماق بەتكە يول قويمايدۇ.",
"importlogpage": "ئەكىرىش خاتىرىسى",
"importlogpagetext": "باشقا wiki دىن تارىخ خاتىرىسىنى قوشۇپ باشقۇرغۇچى سۈپىتىدە ئەكىرىش.",
- "import-logentry-upload": "ھۆججەت يۈكلەپ [[$1]] ئەكىرىلدى",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}",
- "import-logentry-interwiki": "wiki ھالقىغان $1",
"import-logentry-interwiki-detail": "$2 دىن كەلگەن $1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}",
"javascripttest": "JavaScript سىناش",
- "javascripttest-title": "$1 نى تەكشۈرۈش يۈرگۈزۈۋاتىدۇ",
"javascripttest-pagetext-noframework": "بۇ بەت JavaScript ئىجرا قىلىپ سىناشقا قالدۇرۇلغان.",
"javascripttest-pagetext-unknownframework": "يوچۇن سىناق قۇرۇلما \"$1\".",
"javascripttest-pagetext-frameworks": "تۆۋەندىكى قۇرۇلمىدىن بىرنى تاللاڭ: $1",
"javascripttest-pagetext-skins": "بىر تېرە تاللاپ سىناقنى ئىجرا قىلىڭ:",
"javascripttest-qunit-intro": "mediawiki.org دىكى [$1 سىناش قوللانمىسى]نى كۆرۈڭ.",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit سىناش يۈرۈشلۈكى",
"tooltip-pt-userpage": "ئىشلەتكۈچى بېتىڭىز",
"tooltip-pt-anonuserpage": "بۇ بېكەتنى تەھرىرلىگەندە ئىشلەتكەن IP ماس كەلگەن ئىشلەتكۈچى بېتى",
"tooltip-pt-mytalk": "مۇنازىرە بېتىڭىز",
@@ -2178,7 +2162,6 @@
"pageinfo-robot-policy": "ئىزدەش ماتور ھالىتى",
"pageinfo-robot-index": "چەكلەنمىگەن",
"pageinfo-robot-noindex": "چەكلەنگەن",
- "pageinfo-views": "كۆرۈنۈش سانى",
"pageinfo-watchers": "بەت كۆزەتكۈچىلەر سانى",
"pageinfo-redirects-name": "بۇ بەتكە قايتا نىشانلايدۇ",
"pageinfo-redirects-value": "$1",
@@ -2649,7 +2632,6 @@
"exif-urgency-low": "تۆۋەن ($1)",
"exif-urgency-high": "يۇقىرى ($1)",
"exif-urgency-other": "ئىشلەتكۈچى بەلگىلىگەن ئالدىنلىق ($1)",
- "watchlistall2": "ھەممىسى",
"namespacesall": "ھەممىسى",
"monthsall": "ھەممىسى",
"confirmemail": "جەزملەش ئېلخەت ئادرېسى",
@@ -2722,7 +2704,6 @@
"watchlisttools-edit": "كۆزەت تىزىملىكىنى كۆرۈپ تەھرىرلەش",
"watchlisttools-raw": "ئەسلى كۆزەت تىزىملىك تەھرىرى",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|سۆزلىشىش]])",
- "unknown_extension_tag": "نامەلۇم كېڭەيتىلگەن خەتكۈچ \"$1\"",
"duplicate-defaultsort": "'''ئاگاھلاندۇرۇش:''' كۆڭۈلدىكى تەرتىپلەش كۇنۇپكىسى \"$2\" ئىلگىرىكى كۆڭۈلدىكى تەرتىپلەش كۇنۇپكىسى \"$1\" نى قاپلىۋېتىدۇ.",
"version": "نەشرى",
"version-extensions": "قاچىلانغان كېڭەيتىلمە",
@@ -2738,7 +2719,7 @@
"version-parser-function-hooks": "تەھلىلچى فونكسىيە ئىلمىكى",
"version-hook-name": "ئىلمەك ئاتى",
"version-hook-subscribedby": "ئىمزا قويغۇچى",
- "version-version": "(نەشرى $1)",
+ "version-version": "($1)",
"version-license": "ئىجازەتنامە",
"version-poweredby-credits": "بۇ ۋىكىنى '''[https://www.mediawiki.org/ MediaWiki]''' تېخنىكىلىق قوللايدۇ، نەشر ھوقۇقى © 2001-$1 $2",
"version-poweredby-others": "باشقا",
@@ -2859,19 +2840,20 @@
"logentry-rights-rights-legacy": "$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $1 ئۆزگەرتتى",
"logentry-rights-autopromote": "$1 نىڭ ئىشلەتكۈچى گۇرۇپپىسى ئۆزلۈكىدىن $4 دىن $5 غا يۈكسەلدى",
"rightsnone": "(يوق)",
+ "revdelete-summary": "ئۈزۈندە تەھرىرلە",
+ "feedback-adding": "قايتۇرما ئىنكاسنى بەتكە قوشۇۋاتىدۇ…",
+ "feedback-bugcheck": "قالتىس! كەمتۈكنىڭ ئاللىبۇرۇن يوللانغان [$1 مەلۇملۇق كەمتۈك] ياكى ئەمەسلىكىنى تەكشۈرۈڭ.",
+ "feedback-bugnew": "تەكشۈردۈم. يېڭى بىر كەمتۈك دوكلات قىل",
"feedback-bugornote": "ئەگەر بىر تېخنىكىلىق مەسىلىنى تەپسىلىي بايان قىلىشقا تەييارلانماقچى بولسىڭىز، [$1 خاتالىق دوكلات]ى يوللاڭ. ياكى تۆۋەندىكى ئاددىي جەدۋەلنى ئىشلىتىڭ. ئىنكاسىڭىز \"[$3 $2]\" بەتكە قوشۇلىدۇ، ئىشلەتكۈچى ئاتىڭىز ۋە ئىشلەتكەن توركۆرگۈڭىز قوشۇپ قويۇلىدۇ.",
- "feedback-subject": "تېما:",
- "feedback-message": "ئۇچۇر:",
"feedback-cancel": "ۋاز كەچ",
- "feedback-submit": "قايتۇرما ئىنكاس يوللا",
- "feedback-adding": "قايتۇرما ئىنكاسنى بەتكە قوشۇۋاتىدۇ…",
+ "feedback-close": "تامام",
"feedback-error1": "خاتالىق: API دىن كەلگەن تونۇيالمايدىغان نەتىجە",
"feedback-error2": "خاتا:تەھرىرلەش مەغلۇپ بولدى",
"feedback-error3": "خاتالىق: API دىن ئىنكاس يوق",
+ "feedback-message": "ئۇچۇر:",
+ "feedback-subject": "تېما:",
+ "feedback-submit": "تاپشۇر",
"feedback-thanks": "كۆپ رەھمەت! قايتۇرما ئىنكاسىڭىز \"[$2 $1]\" بەتكە يوللاندى.",
- "feedback-close": "تامام",
- "feedback-bugcheck": "قالتىس! كەمتۈكنىڭ ئاللىبۇرۇن يوللانغان [$1 مەلۇملۇق كەمتۈك] ياكى ئەمەسلىكىنى تەكشۈرۈڭ.",
- "feedback-bugnew": "تەكشۈردۈم. يېڭى بىر كەمتۈك دوكلات قىل",
"searchsuggest-search": "ئىزدەش",
"searchsuggest-containing": "ئىچىدە…",
"api-error-badaccess-groups": "ھۆججەتنى بۇ ۋىكىغا يۈكلەش ھوقۇقىڭىز يوق.",
@@ -2936,5 +2918,21 @@
"expand_templates_remove_nowiki": "نەتىجىسىدە <nowiki> خەتكۈچ كۆرۈنمىسۇن",
"expand_templates_generate_xml": "XML گىرامماتىكىسىنى كۆرسەت",
"expand_templates_generate_rawhtml": "ئەسلى HTML نى كۆرسەت",
- "expand_templates_preview": "ئالدىن كۆزەت"
+ "expand_templates_preview": "ئالدىن كۆزەت",
+ "special-characters-group-latin": "لاتىنچە",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "بەلگىلەر",
+ "special-characters-group-greek": "گىرېكچە",
+ "special-characters-group-cyrillic": "سلاۋيانچە",
+ "special-characters-group-arabic": "ئەرەبچە",
+ "special-characters-group-persian": "پارىسچە",
+ "special-characters-group-hebrew": "ئىبرانىچە",
+ "special-characters-group-tamil": "تامىلچە",
+ "special-characters-group-telugu": "تېلۇگۇچە",
+ "special-characters-group-sinhala": "سىنگالچە",
+ "special-characters-group-gujarati": "گۇجاراتچە",
+ "special-characters-group-devanagari": "سانسكرىتچە",
+ "special-characters-group-thai": "تايلاندچە",
+ "special-characters-group-lao": "لائوسچە",
+ "special-characters-group-khmer": "كېخمېرچە"
}
diff --git a/languages/i18n/ug-latn.json b/languages/i18n/ug-latn.json
index 08bc0863..8944f407 100644
--- a/languages/i18n/ug-latn.json
+++ b/languages/i18n/ug-latn.json
@@ -1,158 +1,157 @@
{
- "@metadata": {
- "authors": [
- "Jose77",
- "M.erdem",
- "לערי ריינהארט"
- ]
- },
- "sunday": "Yekshenbe",
- "monday": "Düshenbe",
- "tuesday": "Seyshenbe",
- "wednesday": "Charshenbe",
- "thursday": "Peyshenbe",
- "friday": "Jüme",
- "saturday": "Shenbe",
- "january": "Yanwar",
- "february": "Féwral",
- "march": "Mart",
- "april": "Aprél",
- "may_long": "May",
- "june": "Iyun",
- "july": "Iyul",
- "august": "Awghust",
- "september": "Séntebr",
- "october": "Öktebir",
- "november": "Noyabr",
- "december": "Dékabr",
- "may-gen": "May",
- "september-gen": "Séntebr",
- "october-gen": "Öktebir",
- "november-gen": "Noyabr",
- "december-gen": "Dékabr",
- "jan": "1-Ay",
- "feb": "2-Ay",
- "mar": "3-Ay",
- "apr": "4-Ay",
- "may": "May",
- "jun": "6-Ay",
- "jul": "7-Ay",
- "aug": "8-Ay",
- "sep": "9-Ay",
- "oct": "10-Ay",
- "nov": "11-Ay",
- "dec": "12-Ay",
- "mypage": "Mening beti",
- "navigation": "Körüsh",
- "qbedit": "Uzgartish",
- "help": "Yardem",
- "search": "Izdash",
- "searchbutton": "Izdash",
- "go": "Kuchush",
- "searcharticle": "Kuchush",
- "history_short": "Tarih",
- "printableversion": "Basma Nushisi",
- "permalink": "Menggülük bet",
- "edit": "Uzgartish",
- "delete": "Yukhutush",
- "protect": "Koghdash",
- "talkpagelinktext": "Monazire",
- "talk": "Monazire",
- "toolbox": "Qural sanduqlari",
- "otherlanguages": "Bashqa tillarda",
- "jumptosearch": "izdash",
- "currentevents": "Hazirqi weqeler",
- "edithelp": "Uzgartish yardemi",
- "mainpage": "Bash Bet",
- "mainpage-description": "Bash Bet",
- "portal": "Tor Jemiyiti",
- "ok": "MAQUL",
- "editsection": "uzgartish",
- "editold": "uzgartish",
- "red-link-title": "$1 (bet yoq)",
- "nstab-main": "Bet",
- "nstab-user": "Ishletkuqi tor beti",
- "nstab-special": "Alahide betleri",
- "nstab-help": "Yardem beti",
- "yourname": "Ishletkuqi ismi:",
- "yourpassword": "Achkuch:",
- "yourpasswordagain": "Achkuchni khayta besing:",
- "login": "Kirish",
- "logout": "Chiqish",
- "userlogout": "Chikish",
- "gotaccountlink": "Kirish",
- "loginlanguagelabel": "Til: $1",
- "passwordreset-username": "Ishletkuchi ismi:",
- "summary": "Hulasa:",
- "minoredit": "Bu Kichik Uzgartish",
- "watchthis": "Bu Batka Kharang",
- "savearticle": "Betni saqlang",
- "showpreview": "Aldinala kurux",
- "showdiff": "Uzgurushlerni kursutung",
- "loginreqlink": "kirish",
- "newarticle": "(Yéngi)",
- "prevn": "aldinqi {{PLURAL:$1|$1}}",
- "nextn": "kéyinki {{PLURAL:$1|$1}}",
- "prefs-rc": "Yengi uzgurush",
- "searchresultshead": "Izdash",
- "timezoneregion-asia": "Asiya",
- "timezoneregion-europe": "Yawropa",
- "youremail": "Élxet:",
- "username": "Ishletkuqi ismi:",
- "yourlanguage": "Til:",
- "email": "Élxet:",
- "recentchanges": "Yéngi özgirish",
- "recentchangeslinked": "Yéqinqi özgirishler",
- "recentchangeslinked-feed": "Yéqinqi özgirishler",
- "recentchangeslinked-toolbox": "Yéqinqi özgirishler",
- "recentchangeslinked-page": "Betning ismi:",
- "upload": "Yéngi höjjet kirgüzush",
- "uploadbtn": "Yengi Hujjat Kirguzush",
- "filedesc": "Hulasa",
- "watchthisupload": "Bu Batka Kharang",
- "filehist-user": "Ishletkuchi",
- "filedelete-submit": "Yukhutush",
- "randompage": "Halighan Tor Beti",
- "brokenredirects-edit": "uzgartish",
- "brokenredirects-delete": "yukhutush",
- "newpages": "Yéngi betler",
- "newpages-username": "Ishletkuqi ismi:",
- "move": "Yotkash",
- "movethispage": "Bu batni yotkang",
- "booksources-go": "Kuchush",
- "nextpage": "Kéyinki bet ($1)",
- "prevpage": "Aldinqi bet ($1)",
- "allpagessubmit": "Kuchush",
- "linksearch-ok": "Izdash",
- "watchlist": "Men kharawatkhan tor betleri",
- "watch": "Karang",
- "watchthispage": "Bu Batka Kharang",
- "restriction-edit": "Uzgartish",
- "restriction-move": "Yotkash",
- "undelete-search-submit": "Izdash",
- "sp-contributions-talk": "Monazire",
- "sp-contributions-submit": "Izdash",
- "whatlinkshere": "Bashqa tor betler",
- "whatlinkshere-page": "Bet:",
- "ipblocklist-submit": "Izdash",
- "movearticle": "Yotkigen beti:",
- "move-watch": "Bu Batka Kharang",
- "movepagebtn": "Yotkigen beti",
- "allmessages": "System havarleri",
- "tooltip-pt-logout": "Chikish",
- "tooltip-ca-move": "Bu batni yotkang",
- "tooltip-search": "Izdash {{SITENAME}}",
- "tooltip-p-logo": "Bash Bet",
- "ilsubmit": "Izdash",
- "confirm_purge_button": "Maqul",
- "imgmultipageprev": "← aldinqi bet",
- "imgmultipagenext": "kéyinki bet →",
- "imgmultigo": "Kuchush!",
- "table_pager_next": "Kéyinki bet",
- "table_pager_prev": "Aldinqi bet",
- "table_pager_first": "Birinchi bet",
- "table_pager_last": "Eng axirqi bet",
- "table_pager_limit_submit": "Kuchush",
- "specialpages": "Alahide tor betleri",
- "expand_templates_ok": "Maqul"
+ "@metadata": {
+ "authors": [
+ "Jose77",
+ "M.erdem",
+ "לערי ריינהארט"
+ ]
+ },
+ "sunday": "Yekshenbe",
+ "monday": "Düshenbe",
+ "tuesday": "Seyshenbe",
+ "wednesday": "Charshenbe",
+ "thursday": "Peyshenbe",
+ "friday": "Jüme",
+ "saturday": "Shenbe",
+ "january": "Yanwar",
+ "february": "Féwral",
+ "march": "Mart",
+ "april": "Aprél",
+ "may_long": "May",
+ "june": "Iyun",
+ "july": "Iyul",
+ "august": "Awghust",
+ "september": "Séntebr",
+ "october": "Öktebir",
+ "november": "Noyabr",
+ "december": "Dékabr",
+ "may-gen": "May",
+ "september-gen": "Séntebr",
+ "october-gen": "Öktebir",
+ "november-gen": "Noyabr",
+ "december-gen": "Dékabr",
+ "jan": "1-Ay",
+ "feb": "2-Ay",
+ "mar": "3-Ay",
+ "apr": "4-Ay",
+ "may": "May",
+ "jun": "6-Ay",
+ "jul": "7-Ay",
+ "aug": "8-Ay",
+ "sep": "9-Ay",
+ "oct": "10-Ay",
+ "nov": "11-Ay",
+ "dec": "12-Ay",
+ "mypage": "Mening beti",
+ "navigation": "Körüsh",
+ "qbedit": "Uzgartish",
+ "help": "Yardem",
+ "search": "Izdash",
+ "searchbutton": "Izdash",
+ "go": "Kuchush",
+ "searcharticle": "Kuchush",
+ "history_short": "Tarih",
+ "printableversion": "Basma Nushisi",
+ "permalink": "Menggülük bet",
+ "edit": "Uzgartish",
+ "delete": "Yukhutush",
+ "protect": "Koghdash",
+ "talkpagelinktext": "Monazire",
+ "talk": "Monazire",
+ "toolbox": "Qural sanduqlari",
+ "otherlanguages": "Bashqa tillarda",
+ "jumptosearch": "izdash",
+ "currentevents": "Hazirqi weqeler",
+ "edithelp": "Uzgartish yardemi",
+ "mainpage": "Bash Bet",
+ "mainpage-description": "Bash Bet",
+ "portal": "Tor Jemiyiti",
+ "ok": "MAQUL",
+ "editsection": "uzgartish",
+ "editold": "uzgartish",
+ "red-link-title": "$1 (bet yoq)",
+ "nstab-main": "Bet",
+ "nstab-user": "Ishletkuqi tor beti",
+ "nstab-special": "Alahide betleri",
+ "nstab-help": "Yardem beti",
+ "yourname": "Ishletkuqi ismi:",
+ "yourpassword": "Achkuch:",
+ "yourpasswordagain": "Achkuchni khayta besing:",
+ "login": "Kirish",
+ "logout": "Chiqish",
+ "userlogout": "Chikish",
+ "gotaccountlink": "Kirish",
+ "loginlanguagelabel": "Til: $1",
+ "passwordreset-username": "Ishletkuchi ismi:",
+ "summary": "Hulasa:",
+ "minoredit": "Bu Kichik Uzgartish",
+ "watchthis": "Bu Batka Kharang",
+ "savearticle": "Betni saqlang",
+ "showpreview": "Aldinala kurux",
+ "showdiff": "Uzgurushlerni kursutung",
+ "loginreqlink": "kirish",
+ "newarticle": "(Yéngi)",
+ "prevn": "aldinqi {{PLURAL:$1|$1}}",
+ "nextn": "kéyinki {{PLURAL:$1|$1}}",
+ "prefs-rc": "Yengi uzgurush",
+ "searchresultshead": "Izdash",
+ "timezoneregion-asia": "Asiya",
+ "timezoneregion-europe": "Yawropa",
+ "youremail": "Élxet:",
+ "username": "Ishletkuqi ismi:",
+ "yourlanguage": "Til:",
+ "email": "Élxet:",
+ "recentchanges": "Yéngi özgirish",
+ "recentchangeslinked": "Yéqinqi özgirishler",
+ "recentchangeslinked-feed": "Yéqinqi özgirishler",
+ "recentchangeslinked-toolbox": "Yéqinqi özgirishler",
+ "recentchangeslinked-page": "Betning ismi:",
+ "upload": "Yéngi höjjet kirgüzush",
+ "uploadbtn": "Yengi Hujjat Kirguzush",
+ "filedesc": "Hulasa",
+ "watchthisupload": "Bu Batka Kharang",
+ "filehist-user": "Ishletkuchi",
+ "filedelete-submit": "Yukhutush",
+ "randompage": "Halighan Tor Beti",
+ "brokenredirects-edit": "uzgartish",
+ "brokenredirects-delete": "yukhutush",
+ "newpages": "Yéngi betler",
+ "newpages-username": "Ishletkuqi ismi:",
+ "move": "Yotkash",
+ "movethispage": "Bu batni yotkang",
+ "nextpage": "Kéyinki bet ($1)",
+ "prevpage": "Aldinqi bet ($1)",
+ "allpagessubmit": "Kuchush",
+ "linksearch-ok": "Izdash",
+ "watchlist": "Men kharawatkhan tor betleri",
+ "watch": "Karang",
+ "watchthispage": "Bu Batka Kharang",
+ "restriction-edit": "Uzgartish",
+ "restriction-move": "Yotkash",
+ "undelete-search-submit": "Izdash",
+ "sp-contributions-talk": "Monazire",
+ "sp-contributions-submit": "Izdash",
+ "whatlinkshere": "Bashqa tor betler",
+ "whatlinkshere-page": "Bet:",
+ "ipblocklist-submit": "Izdash",
+ "movearticle": "Yotkigen beti:",
+ "move-watch": "Bu Batka Kharang",
+ "movepagebtn": "Yotkigen beti",
+ "allmessages": "System havarleri",
+ "tooltip-pt-logout": "Chikish",
+ "tooltip-ca-move": "Bu batni yotkang",
+ "tooltip-search": "Izdash {{SITENAME}}",
+ "tooltip-p-logo": "Bash Bet",
+ "ilsubmit": "Izdash",
+ "confirm_purge_button": "Maqul",
+ "imgmultipageprev": "← aldinqi bet",
+ "imgmultipagenext": "kéyinki bet →",
+ "imgmultigo": "Kuchush!",
+ "table_pager_next": "Kéyinki bet",
+ "table_pager_prev": "Aldinqi bet",
+ "table_pager_first": "Birinchi bet",
+ "table_pager_last": "Eng axirqi bet",
+ "table_pager_limit_submit": "Kuchush",
+ "specialpages": "Alahide tor betleri",
+ "expand_templates_ok": "Maqul"
}
diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json
index 460058c9..1d209d92 100644
--- a/languages/i18n/uk.json
+++ b/languages/i18n/uk.json
@@ -50,7 +50,14 @@
"Calak",
"Mykola Swarnyk",
"Milicevic01",
- "Lamsec"
+ "Lamsec",
+ "Olion",
+ "Piramidion",
+ "Andygol",
+ "Ypryima",
+ "Purodha",
+ "Green Zero",
+ "Macofe"
]
},
"tog-underline": "Підкреслювання посилань:",
@@ -68,17 +75,17 @@
"tog-watchmoves": "Додавати перейменовані мною сторінки та файли до мого списку спостереження",
"tog-watchdeletion": "Додавати вилучені мною сторінки та файли до мого списку спостереження",
"tog-watchrollback": "Додавати відкочені мною сторінки до мого списку спостереження",
- "tog-minordefault": "Спочатку позначати всі зміни незначними",
+ "tog-minordefault": "Типово позначати всі зміни, як незначні",
"tog-previewontop": "Показувати попередній перегляд перед вікном редагування, а не після",
"tog-previewonfirst": "Показувати попередній перегляд під час першого редагування",
"tog-enotifwatchlistpages": "Повідомляти електронною поштою про зміну сторінки або файлу з мого списку спостереження",
- "tog-enotifusertalkpages": "Повідомляти електронною поштою про зміни на моїй сторінці обговорення",
+ "tog-enotifusertalkpages": "Повідомляти електронною поштою про зміни моєї сторінки обговорення",
"tog-enotifminoredits": "Надсилати мені електронного листа навіть при незначних редагуваннях сторінок та файлів",
"tog-enotifrevealaddr": "Показувати мою поштову адресу в повідомленнях",
"tog-shownumberswatching": "Показувати число користувачів, які додали сторінку до свого списку спостереження",
"tog-oldsig": "Існуючий підпис:",
"tog-fancysig": "Сприймати підпис як вікі-текст (без автоматичного посилання)",
- "tog-uselivepreview": "Використовувати швидкий попередній перегляд (експериментально)",
+ "tog-uselivepreview": "Використовувати швидкий попередній перегляд",
"tog-forceeditsummary": "Попереджати, коли не зазначений короткий опис редагування",
"tog-watchlisthideown": "Приховати мої редагування у списку спостереження",
"tog-watchlisthidebots": "Приховати редагування ботів у списку спостереження",
@@ -162,12 +169,12 @@
"october-date": "$1 жовтня",
"november-date": "$1 листопада",
"december-date": "$1 грудня",
- "pagecategories": "{{PLURAL:$1|1=Категорія|Категорії|Категорій}}",
- "category_header": "Сторінок у категорії «$1»",
+ "pagecategories": "{{PLURAL:$1|1=Категорія|Категорії}}",
+ "category_header": "Сторінки в категорії «$1»",
"subcategories": "Підкатегорії",
"category-media-header": "Файли в категорії «$1»",
"category-empty": "''Ця категорія зараз порожня.''",
- "hidden-categories": "{{PLURAL:$1|1=Прихована категорія|Приховані категорії|Прихованих категорій}}",
+ "hidden-categories": "{{PLURAL:$1|1=Прихована категорія|Приховані категорії}}",
"hidden-category-category": "Приховані категорії",
"category-subcat-count": "{{PLURAL:$2|Ця категорія має тільки таку підкатегорію.|Показано $1 {{PLURAL:$1|підкатегорію з|підкатегорії з|підкатегорій із}} $2.}}",
"category-subcat-count-limited": "У цій категорії {{PLURAL:$1|$1 підкатегорія|$1 підкатегорії|$1 підкатегорій}}.",
@@ -184,7 +191,7 @@
"article": "Стаття",
"newwindow": "(відкривається в новому вікні)",
"cancel": "Скасувати",
- "moredotdotdot": "Детальніше…",
+ "moredotdotdot": "Більше…",
"morenotlisted": "Цей список неповний.",
"mypage": "Сторінка",
"mytalk": "Обговорення",
@@ -217,7 +224,7 @@
"permalink": "Постійне посилання",
"print": "Друк",
"view": "Перегляд",
- "view-foreign": "Переглянути на $1",
+ "view-foreign": "Переглянути сторінку {{grammar:locative|$1}}",
"edit": "Редагувати",
"edit-local": "Редагувати локальний опис",
"create": "Створити",
@@ -254,6 +261,7 @@
"otherlanguages": "Іншими мовами",
"redirectedfrom": "(Перенаправлено з $1)",
"redirectpagesub": "Сторінка-перенаправлення",
+ "redirectto": "Перенаправити на:",
"lastmodifiedat": "Цю сторінку востаннє змінено: $2, $1.",
"viewcount": "Цю сторінку переглядали $1 {{PLURAL:$1|раз|рази|разів}}.",
"protectedpage": "Захищена сторінка",
@@ -266,6 +274,7 @@
"pool-queuefull": "Сервер запитів заповнений",
"pool-errorunknown": "Невідома помилка",
"pool-servererror": "Служба лічильника пулу недоступна ($1).",
+ "poolcounter-usage-error": "Помилка використання: $1",
"aboutsite": "Про {{grammar:accusative|{{SITENAME}}}}",
"aboutpage": "Project:Про",
"copyright": "Вміст доступний на умовах $1, якщо не вказано інше.",
@@ -275,6 +284,7 @@
"disclaimers": "Відмова від відповідальності",
"disclaimerpage": "Project:Відмова від відповідальності",
"edithelp": "Довідка про редагування",
+ "helppage-top-gethelp": "Довідка",
"mainpage": "Головна сторінка",
"mainpage-description": "Головна сторінка",
"policy-url": "Project:Правила",
@@ -357,10 +367,13 @@
"readonly_lag": "База даних автоматично заблокована від змін, доки вторинний сервер бази даних не синхронізується з первинним.",
"internalerror": "Внутрішня помилка",
"internalerror_info": "Внутрішня помилка: $1",
+ "internalerror-fatal-exception": "Критичний виняток типу «$1»",
"filecopyerror": "Не вдалося скопіювати файл «$1» в «$2».",
"filerenameerror": "Не вдалося перейменувати файл «$1» на «$2».",
"filedeleteerror": "Не вдалося вилучити файл «$1».",
"directorycreateerror": "Не вдалося створити каталог \"$1\".",
+ "directoryreadonlyerror": "Каталог \"$1\" доступний лише для читання.",
+ "directorynotreadableerror": "Каталог \"$1\" нечитабельний.",
"filenotfound": "Не вдалося знайти файл «$1».",
"unexpected": "Неочікуване значення: «$1»=«$2».",
"formerror": "Помилка: неможливо передати дані форми",
@@ -382,7 +395,8 @@
"viewsourcetext": "Ви можете переглянути та скопіювати початковий текст цієї сторінки:",
"viewyourtext": "Ви можете переглянути та скопіювати текст '''ваших редагувань''' на цій сторінці:",
"protectedinterface": "Ця сторінка містить текст інтерфейсу програмного забезпечення цієї Вікі, захищений від небажаного втручання. Щоб додати або змінити переклади для всіх вікі, перейдіть до [//translatewiki.net/ translatewiki.net], проекту локалізації MediaWiki.",
- "editinginterface": "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу програм. \nЗміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів цієї Вікі. \nЩоб додати чи змінити переклади для всіх вікі, використовуйте [//translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проект локалізації MediaWiki.",
+ "editinginterface": "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу програм. \nЗміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів цієї Вікі.",
+ "translateinterface": "Для того, щоб додати чи змінити переклад повідомлень інтерфейсу для всіх вікі-проектів, скористайтеся будь ласка проектом локалізації MediaWiki: [//translatewiki.net/ translatewiki.net].",
"cascadeprotected": "Сторінка захищена від змін, оскільки вона належить до {{PLURAL:$1|1=сторінки, для якої|сторінок, для яких}} установлено каскадний захист: $2",
"namespaceprotected": "У вас нема дозволу редагувати сторінки в просторі назв «$1».",
"customcssprotected": "У вас немає дозволу на редагування цієї CSS-сторінки, бо вона містить особисті налаштування іншого користувача.",
@@ -397,7 +411,7 @@
"invalidtitle-knownnamespace": "Неприйнятна назва у просторі імен «$2» і текстом «$3»",
"invalidtitle-unknownnamespace": "Неправильний заголовок з невідомим номером простору імен ($1) і текстом: «$2»",
"exception-nologin": "Не виконано вхід",
- "exception-nologin-text": "Необхідно [[Special:Userlogin|увійти]], щоб мати доступ до цієї сторінки або дії.",
+ "exception-nologin-text": "Необхідно увійти, щоб мати доступ до цієї сторінки або дії.",
"exception-nologin-text-manual": "Потрібно $1, щоб мати доступ до цієї сторінки або дії.",
"virus-badscanner": "Помилка налаштування: невідомий сканер вірусів: ''$1''",
"virus-scanfailed": "помилка сканування (код $1)",
@@ -439,6 +453,8 @@
"userlogin-resetlink": "Забули дані, потрібні для входу?",
"userlogin-resetpassword-link": "Забули пароль?",
"userlogin-helplink2": "Допомога з входом у систему",
+ "userlogin-loggedin": "Ви вже увійшли як {{GENDER:$1|$1}}.\nВикористайте нижче форму для входу як інший користувач.",
+ "userlogin-createanother": "Створити інший обліковий запис",
"createacct-emailrequired": "Адреса електронної пошти",
"createacct-emailoptional": "Адреса електронної пошти (не обов'язково)",
"createacct-email-ph": "Введіть Вашу адресу електронної пошти",
@@ -475,6 +491,7 @@
"wrongpassword": "Ви ввели хибний пароль. Спробуйте ще раз.",
"wrongpasswordempty": "Ви не ввели пароль. Будь ласка, спробуйте ще раз.",
"passwordtooshort": "Ваш пароль закороткий, він має містити принаймні $1 {{PLURAL:$1|символ|символи|символів}}.",
+ "passwordtoolong": "Пароль не може бути довшим ніж {{PLURAL:$1|1 символ|$1 символи|$1 символів}}.",
"password-name-match": "Ваш пароль має відрізнятися від імені користувача.",
"password-login-forbidden": "Використання цього імені користувача і пароля заборонено.",
"mailmypassword": "Перевстановити пароль",
@@ -501,6 +518,7 @@
"createaccount-text": "Хтось створив обліковий запис «$2» на сервері проекту {{SITENAME}} ($4) з паролем «$3», зазначивши вашу адресу електронної пошти. Вам слід зайти і змінити пароль.\n\nІгноруйте дане повідомлення, якщо обліковий запис було створено помилково.",
"login-throttled": "Ви зробили надто багато спроб ввійти до системи.\nБудь ласка, зачекайте $1 перед повторною спробою.",
"login-abort-generic": "Не вдалося ввійти до системи",
+ "login-migrated-generic": "Ваш обліковий запис було перенесено і ваше ім'я користувача більше не існує на цій вікі.",
"loginlanguagelabel": "Мова: $1",
"suspicious-userlogout": "Ваш запит на завершення сеансу відхилений, оскільки він схожий на запит, відправлений зіпсованим веб-оглядачем або кешуючим проксі-сервером.",
"createacct-another-realname-tip": "Справжнє ім'я є необов'язковим.\nЯкщо ви вирішите надати його, воно буде використовуватись для позначення редагувань та інших дій користувача.",
@@ -596,13 +614,15 @@
"showpreview": "Попередній перегляд",
"showdiff": "Показати зміни",
"blankarticle": "'''Попередження:''' Створена вами сторінка порожня.\nЯкщо Ви знову натиснете «{{int:savearticle}}», сторінку буде створено без вмісту.",
- "anoneditwarning": "'''Увага''': Ви не увійшли до системи. До історії змін цієї сторінки буде записана ваша IP-адреса.",
+ "anoneditwarning": "<strong>Увага!</strong> Ви не авторизувалися на сайті. Ваша IP-адреса буде публічно видима, якщо ви будете вносити будь-які правки. Якщо ви <strong>[$1 увійдете]</strong> або <strong>[$2 створите обліковий запис]</strong>, правки замість цього будуть пов'язані з вашим ім'ям користувача, а також у вас з'являться інші переваги.",
"anonpreviewwarning": "''Ви не увійшли в систему. Якщо ви виконаєте збереження, то в історію сторінки буде записана ваша IP-адреса.''",
"missingsummary": "'''Нагадування''': Ви не дали короткого опису змін.\nНатиснувши кнопку «Зберегти» ще раз, ви збережете зміни без коментаря.",
+ "selfredirect": "<strong>Попередження:</strong> Ви створюєте перенаправлення на цю ж сторінку.\nВи могли вказати невірну цільову сторінку, або ж редагуєте хибну сторінку.\nЯкщо Ви натиснете \"{{int:savearticle}}\" ще раз, перенаправлення буде створено.",
"missingcommenttext": "Будь ласка, введіть нижче ваше повідомлення.",
"missingcommentheader": "'''Нагадування''': ви не вказали тему/заголовок для цього коментаря.\nНатиснувши кнопку «{{int:savearticle}}» ще раз, ви збережете редагування без заголовка.",
"summary-preview": "Опис буде:",
"subject-preview": "Заголовок буде:",
+ "previewerrortext": "Сталася помилка при спробі попереднього перегляду Ваших змін.",
"blockedtitle": "Користувача заблоковано",
"blockedtext": "'''Ваш обліковий запис або IP-адреса заблоковані.'''\n\nБлокування виконане адміністратором $1.\nЗазначена наступна причина: ''$2''.\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Блокування виконав: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете надіслати листа адміністратору, якщо ви не зареєстровані або не підтвердили свою електронну адресу в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте ці дані у своїх запитах.",
"autoblockedtext": "Ваша IP-адреса автоматично заблокована у зв'язку з тим, що вона раніше використовувалася кимось із заблокованих користувачів. Адміністратор ($1), що її заблокував, зазначив наступну причину блокування:\n\n:''$2''\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Блокування виконав: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете надіслати листа адміністраторові, якщо ви не зареєстровані у проекті або не підтвердили свою електронну адресу в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте його у своїх запитах.",
@@ -639,7 +659,7 @@
"continue-editing": "Продовжити редагування",
"previewconflict": "Цей попередній перегляд відображає текст з верхнього вікна редагування так, як він буде виглядати, якщо ви вирішите зберегти його.",
"session_fail_preview": "'''Система не може зберегти ваші редагування, оскільки втрачені дані сеансу. Будь ласка, повторіть вашу спробу.\nЯкщо помилка буде повторюватись, спробуйте [[Special:UserLogout|вийти з системи]] і увійти знову.'''",
- "session_fail_preview_html": "<strong>Вибачте! Неможливо зберегти ваші зміни через втрату даних HTML-сесії.</strong>\n\n''Оскільки {{SITENAME}} дозволяє використовувати чистий HTML, попередній перегляд відключено, щоб попередити JavaScript-атаки.''\n\n<strong>Якщо це легітимна спроба редагування, будь ласка, спробуйте ще раз. Якщо не вийде знову, - спробуйте [[Special:UserLogout|завершити сеанс роботи]] й ще раз ввійти до системи.</strong>",
+ "session_fail_preview_html": "<strong>Вибачте! Неможливо зберегти ваші зміни через втрату даних HTML-сесії.</strong>\n\n''Оскільки {{SITENAME}} дозволяє використовувати чистий HTML, попередній перегляд відключено, щоб попередити JavaScript-атаки.''\n\n<strong>Якщо це легітимна спроба редагування, будь ласка, спробуйте ще раз. Якщо не вийде знову, — спробуйте [[Special:UserLogout|завершити сеанс роботи]] й ще раз ввійти до системи.</strong>",
"token_suffix_mismatch": "'''Ваше редагування було відхилене, оскільки ваша програма неправильно обробляє знаки пунктуації у вікні редагування. Редагування було скасоване для запобігання спотворенню тексту статті.\nПодібні проблеми можуть виникати при використанні анонімізуючих веб-проксі, що містять помилки.'''",
"edit_form_incomplete": "'''Частина даних із форми редагування не досягла сервера. Уважно перевірте, чи не пошкоджені ваші правки і спробуйте ще раз.'''",
"editing": "Редагування $1",
@@ -698,6 +718,10 @@
"content-model-text": "звичайний текст",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Порожній об'єкт",
+ "content-json-empty-array": "Порожній масив",
+ "duplicate-args-category": "Сторінки, що містять шаблон із кількома значеннями одного й того ж параметра",
+ "duplicate-args-category-desc": "Тут перелічено сторінки, що містять дублікатне визначення аргументу при включенні шаблону, приміром, <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> або <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''Увага:''' Ця сторінка містить дуже багато викликів ресурсомістких функцій.\n\nКількість викликів не повинна перевищувати $2, зараз потрібно зробити $1 {{PLURAL:$1|виклик|виклики|викликів}}.",
"expensive-parserfunction-category": "Сторінки з дуже великою кількістю викликів ресурсомістких функцій",
"post-expand-template-inclusion-warning": "'''Увага:''' розмір шаблонів для включення занадто великий.\nДеякі шаблони не буде включено.",
@@ -708,10 +732,10 @@
"parser-template-recursion-depth-warning": "Перевищене обмеження глибини рекурсії шаблону ($1)",
"language-converter-depth-warning": "Перевищене обмеження глибини мовного конвертора ($1)",
"node-count-exceeded-category": "Сторінки, на яких перевищено лічильник вузлів",
- "node-count-exceeded-category-desc": "Категорія для сторінок, на яких перевищена кількість вузлів.",
- "node-count-exceeded-warning": "Кількість вузлів препроцесора на сторінці перевищила встановлену межу.",
+ "node-count-exceeded-category-desc": "На сторінці перевищено максимально допустиме число вузлів.",
+ "node-count-exceeded-warning": "Сторінка перевищила встановлену межу вузлів",
"expansion-depth-exceeded-category": "Сторінки, де перевищено глибину розгортання",
- "expansion-depth-exceeded-category-desc": "Це категорія для сторінок з перевищеною глибиною розкриття.",
+ "expansion-depth-exceeded-category-desc": "На сторінці перевищено максимально допустима глибину розкриття.",
"expansion-depth-exceeded-warning": "На сторінці перевищено межу глибини вкладеності",
"parser-unstrip-loop-warning": "Виявлено незакритий тег (такий, як <pre>)",
"parser-unstrip-recursion-limit": "Перевищено межу вкладеної рекурсії ($1) для парсера.",
@@ -786,7 +810,7 @@
"revdelete-legend": "Встановити обмеження видимості",
"revdelete-hide-text": "Текст версії сторінки",
"revdelete-hide-image": "Приховати вміст файлу",
- "revdelete-hide-name": "Приховати дію та її об'єкт",
+ "revdelete-hide-name": "Приховати цілі та параметри",
"revdelete-hide-comment": "Коментар редагування",
"revdelete-hide-user": "Ім'я автора/IP адреса",
"revdelete-hide-restricted": "Приховати дані також і від адміністраторів",
@@ -840,7 +864,6 @@
"mergehistory-same-destination": "Початкова і цільова сторінки повинні відрізнятися",
"mergehistory-reason": "Причина:",
"mergelog": "Журнал об'єднань",
- "pagemerge-logentry": "об'єднані [[$1]] і [[$2]] (версії до $3)",
"revertmerge": "Розділити",
"mergelogpagetext": "Нижче наведений список останніх об'єднань історій сторінок.",
"history-title": "$1: Історія змін",
@@ -853,7 +876,7 @@
"editundo": "скасувати",
"diff-empty": "(Немає відмінностей)",
"diff-multi-sameuser": "(не {{PLURAL:$1|показано одну проміжну версію|показані $1 проміжні версії|показано $1 проміжних версій}} цього учасника)",
- "diff-multi-otherusers": "(не {{PLURAL:$1|показана одна проміжна версія|показано $1 проміжні версії|показані $1 проміжних версій}} {{PLURAL:$2|ще одного учасника|$2 учасників}})",
+ "diff-multi-otherusers": "(не {{PLURAL:$1|показана $1 проміжна версія|показано $1 проміжні версії|показані $1 проміжних версій}} {{PLURAL:$2|ще одного учасника|$2 учасників}})",
"diff-multi-manyusers": "({{PLURAL:$1|не показана $1 проміжна версія|не показані $1 проміжні версії|не показано $1 проміжних версій}}, зроблених більш, ніж {{PLURAL:$2|1=$1 користувачем|$2 користувачами}})",
"difference-missing-revision": "{{PLURAL:$2|$2 версія|$2 версії|$2 версій}} для цього порівняння ($1) не {{PLURAL:$2|1=знайдена|знайдені}}.\n\nІмовірно, ви перейшли за застарілим посиланням на порівняння версій вилученої сторінки.\nПодробиці можна дізнатися з [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журналу вилучень].",
"searchresults": "Результати пошуку",
@@ -863,6 +886,8 @@
"notextmatches": "Немає збігів у текстах сторінок",
"prevn": "{{PLURAL:$1|попередня $1|попередні $1|попередні $1}}",
"nextn": "наступні {{PLURAL:$1|$1}}",
+ "prev-page": "попередня сторінка",
+ "next-page": "наступна сторінка",
"prevn-title": "{{PLURAL:$1|Попередній $1 запис|Попередні $1 записи|Попередні $1 записів}}",
"nextn-title": "{{PLURAL:$1|Наступний $1 запис|Наступні $1 записи|Наступні $1 записів}}",
"shown-title": "Показувати $1 {{PLURAL:$1|запис|записи|записів}} на сторінці",
@@ -881,6 +906,7 @@
"search-result-category-size": "{{PLURAL:$1|$1 елемент|$1 елементи|$1 елементів}} ({{PLURAL:$2|$2 підкатегорія|$2 підкатегорії|$2 підкатегорій}}, {{PLURAL:$3|$3 файл|$3 файли|$3 файлів}})",
"search-redirect": "(перенаправлення $1)",
"search-section": "(розділ $1)",
+ "search-category": "(категорія $1)",
"search-file-match": "(збігається із вмістом файлу)",
"search-suggest": "Можливо, ви мали на увазі: $1",
"search-interwiki-caption": "Братні проекти",
@@ -890,7 +916,8 @@
"searchrelated": "пов'язаний",
"searchall": "усі",
"showingresults": "Нижче {{PLURAL:$1|показане|показані|показані}} '''$1''' {{PLURAL:$1|результат|результати|результатів}}, починаючи з №&nbsp;'''$2'''",
- "showingresultsinrange": "Нижче показано до {{PLURAL:$1|<strong>1</strong> результата|<strong>$1</strong> результатів|<strong>$1</strong> результати}} у діапазоні від #<strong>$2</strong> до #<strong>$3</strong>.",
+ "showingresultsinrange": "Нижче показано до {{PLURAL:$1|<strong>1</strong> результату|<strong>$1</strong> результатів}} у діапазоні від #<strong>$2</strong> до #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|Результат <strong>$1</strong> із <strong>$3</strong>|Результати <strong>$1 — $2</strong> із <strong>$3</strong>}}",
"search-nonefound": "Не знайдено результатів, що відповідають запиту.",
"powersearch-legend": "Розширений пошук",
"powersearch-ns": "Пошук у просторах назв:",
@@ -904,7 +931,7 @@
"preferences": "Налаштування",
"mypreferences": "Налаштування",
"prefs-edits": "Кількість редагувань:",
- "prefsnologintext2": "Потрібно $1 для налаштування параметрів користувача.",
+ "prefsnologintext2": "Будь ласка, увійдіть, щоб змінити ваші уподобання.",
"prefs-skin": "Оформлення",
"skin-preview": "Попередній перегляд",
"datedefault": "Стандартний",
@@ -913,6 +940,11 @@
"prefs-personal": "Особисті дані",
"prefs-rc": "Сторінка нових редагувань",
"prefs-watchlist": "Список спостереження",
+ "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-watchlist-edits": "Кількість редагувань для відображення у розширеному списку спостереження:",
@@ -982,9 +1014,9 @@
"gender-unknown": "Не визначена",
"gender-male": "Чоловіча",
"gender-female": "Жіноча",
- "prefs-help-gender": "Задання цього параметру - необов'язкове. Застосовується рушієм у тих звертаннях до користувача, які залежать від статі.\nЦя інформація загальнодоступна.",
+ "prefs-help-gender": "Задання цього параметру — необов'язкове. Застосовується рушієм у тих звертаннях до користувача, які залежать від статі.\nЦя інформація загальнодоступна.",
"email": "Електронна пошта",
- "prefs-help-realname": "Справжнє ім'я необов'язково вказувати.\nЯкщо ви його зазначите, то воно буде використовуватися, щоб показати, хто редагував сторінку.",
+ "prefs-help-realname": "Справжнє ім'я вказувати необов'язково.\nЯкщо ви його зазначите, то саме з ним може бути пов'язаний увесь ваш доробок.",
"prefs-help-email": "Адреса електронної пошти не є обов'язковою, але необхідна для скидання пароля, якщо ви його забудете.",
"prefs-help-email-others": "Також вона дозволить іншим користувачам зв'язатися з вами через вашу особисту сторінку без необхідності розкриття вашої електронної адреси.",
"prefs-help-email-required": "Потрібно зазначити адресу електронної пошти.",
@@ -1005,6 +1037,7 @@
"prefs-tokenwatchlist": "Жетон",
"prefs-diffs": "Різниці версій",
"prefs-help-prefershttps": "Цей параметр набуде чинності при вашому наступному вході у систему.",
+ "prefswarning-warning": "Ви внесли в свої налаштування зміни, які ще не були збережені.\nЯкщо ви залишите цю сторінку, не натиснувши \"$1\", налаштування не будуть оновлені.",
"prefs-tabs-navigation-hint": "Порада: Ви можете використовувати клавіші стрілок вліво і вправо для переходу між вкладками в списку вкладок.",
"email-address-validity-valid": "Адреса електронної пошти є чинною",
"email-address-validity-invalid": "Введіть чинну адресу електронної пошти",
@@ -1048,29 +1081,29 @@
"grouppage-sysop": "{{ns:project}}:Адміністратори",
"grouppage-bureaucrat": "{{ns:project}}:Бюрократи",
"grouppage-suppress": "{{ns:project}}:Ревізори",
- "right-read": "Перегляд сторінок",
- "right-edit": "Редагування сторінок",
- "right-createpage": "Створення сторінок (але не обговорень)",
- "right-createtalk": "Створення обговорень сторінок",
- "right-createaccount": "Створення нових облікових записів",
- "right-minoredit": "Позначення редагувань як незначні",
- "right-move": "Перейменування сторінок",
- "right-move-subpages": "Перейменування сторінок і їх підсторінок",
- "right-move-rootuserpages": "Перейменувати кореневі сторінки користувачів",
- "right-move-categorypages": "Перейменування сторінок категорії.",
- "right-movefile": "перейменувати файли",
- "right-suppressredirect": "Нестворення перенаправлення зі старої назви на нову при перейменуванні сторінки",
- "right-upload": "Завантаження файлів",
- "right-reupload": "Перезаписування існуючих файлів",
- "right-reupload-own": "Перезаписування існуючих файлів, завантажених тим самим користувачем",
+ "right-read": "перегляд сторінок",
+ "right-edit": "редагування сторінок",
+ "right-createpage": "створення сторінок (але не обговорень)",
+ "right-createtalk": "створення обговорень сторінок",
+ "right-createaccount": "створення нових облікових записів",
+ "right-minoredit": "позначення редагувань як незначні",
+ "right-move": "перейменування сторінок",
+ "right-move-subpages": "перейменування сторінок і їх підсторінок",
+ "right-move-rootuserpages": "перейменування кореневих сторінок користувачів",
+ "right-move-categorypages": "перейменування сторінок категорій",
+ "right-movefile": "перейменування файлів",
+ "right-suppressredirect": "нестворення перенаправлення зі старої назви на нову при перейменуванні сторінки",
+ "right-upload": "завантаження файлів",
+ "right-reupload": "перезаписування існуючих файлів",
+ "right-reupload-own": "перезаписування існуючих файлів, завантажених тим самим користувачем",
"right-reupload-shared": "Підміна файлів зі спільного сховища локальними",
"right-upload_by_url": "Завантаження файлів за URL-адресами",
"right-purge": "Очищення кешу для сторінки без сторінки підтвердження",
- "right-autoconfirmed": "Без обмежень швидкості за IP",
- "right-bot": "Автоматична обробка",
- "right-nominornewtalk": "Незначні редагування на сторінках обговорень користувачів не викликають попередження про нові повідомлення",
- "right-apihighlimits": "Розширення обмежень на виконання API-запитів",
- "right-writeapi": "Використання API для запису",
+ "right-autoconfirmed": "без обмежень швидкості за IP",
+ "right-bot": "автоматична обробка",
+ "right-nominornewtalk": "незначні редагування на сторінках обговорень користувачів не викликають попередження про нові повідомлення",
+ "right-apihighlimits": "розширення обмежень на виконання API-запитів",
+ "right-writeapi": "використання API для запису",
"right-delete": "Вилучення сторінок",
"right-bigdelete": "Вилучення сторінок з великою історією",
"right-deletelogentry": "Вилучення та відновлення окремих записів журналу",
@@ -1081,34 +1114,35 @@
"right-undelete": "Відновлення сторінок",
"right-suppressrevision": "Перегляд, приховання та відновлення конкретних змін сторінок від будь-якого користувача",
"right-viewsuppressed": "Перегляд змін, приховаих від усіх користувачів",
- "right-suppressionlog": "Перегляд приватних журналів",
+ "right-suppressionlog": "перегляд приватних журналів",
"right-block": "Заборона редагувань для інших дописувачів",
"right-blockemail": "Блокування користувачам надсилання електронної пошти",
"right-hideuser": "Блокування імені користувача і приховування його",
"right-ipblock-exempt": "Уникнення блокування за IP-адресою, автоблокування і блокування діапазонів",
"right-proxyunbannable": "Уникнення автоматичного блокування проксі-серверів",
- "right-unblockself": "Розблоковувати себе",
+ "right-unblockself": "розблоковування себе",
"right-protect": "Зміна рівнів захисту та редагування захищених каскадно сторінок",
- "right-editprotected": "Редагування сторінок з рівнем захисту \"{{int:protect-level-sysop}}\"",
- "right-editsemiprotected": "Редагування сторінок з рівнем захисту \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editprotected": "редагування сторінок з рівнем захисту «{{int:protect-level-sysop}}»",
+ "right-editsemiprotected": "редагування сторінок з рівнем захисту «{{int:protect-level-autoconfirmed}}»",
+ "right-editcontentmodel": "Редагувати модель вмісту сторінки",
"right-editinterface": "Редагування інтерфейсу користувача",
"right-editusercssjs": "Редагування CSS- і JS-файлів інших користувачів",
"right-editusercss": "Редагування CSS-файлів інших користувачів",
"right-edituserjs": "Редагування JS-файлів інших користувачів",
- "right-editmyusercss": "Редагування власних CSS-файлів користувача",
- "right-editmyuserjs": "Редагування власних JavaScript-файлів користувача",
- "right-viewmywatchlist": "Переглядати власний список спостереження",
- "right-editmywatchlist": "Редагувати власний список спостереження. Зверніть увагу, що деякі дії будуть додавати сторінки навіть без такого права.",
- "right-viewmyprivateinfo": "Перегляд власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
- "right-editmyprivateinfo": "Редагування власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
- "right-editmyoptions": "Редагування власних налаштувань",
+ "right-editmyusercss": "редагування власних CSS-файлів користувача",
+ "right-editmyuserjs": "редагування власних JavaScript-файлів користувача",
+ "right-viewmywatchlist": "перегляд власного списку спостереження",
+ "right-editmywatchlist": "редагування власного списку спостереження; зверніть увагу, що деякі дії будуть додавати сторінки навіть без такого права.",
+ "right-viewmyprivateinfo": "перегляд власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
+ "right-editmyprivateinfo": "редагування власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
+ "right-editmyoptions": "редагування власних налаштувань",
"right-rollback": "Швидкий відкіт редагувань останнього користувача, який редагував сторінку",
"right-markbotedits": "Позначення відкинутих редагувань як редагування бота",
- "right-noratelimit": "Нема обмежень за швидкістю",
+ "right-noratelimit": "нема обмежень за швидкістю",
"right-import": "Імпорт сторінок з інших вікі",
"right-importupload": "Імпорт сторінок через завантаження файлів",
"right-patrol": "Позначення редагувань патрульованими",
- "right-autopatrol": "Автоматичне позначення редагувань патрульованими",
+ "right-autopatrol": "автоматичне позначення редагувань патрульованими",
"right-patrolmarks": "Перегляд патрульованих сторінок у нових редагуваннях",
"right-unwatchedpages": "Перегляд списку сторінок, за якими ніхто не спостерігає",
"right-mergehistory": "Об'єднання історій редагувань сторінок",
@@ -1116,8 +1150,9 @@
"right-userrights-interwiki": "Зміна прав користувачів у інших вікі",
"right-siteadmin": "Блокування і розблокування бази даних",
"right-override-export-depth": "експорт сторінок, включаючи пов'язані сторінки з глибиною до 5",
- "right-sendemail": "відправляти пошту іншим користувачам",
+ "right-sendemail": "надсилання електронної пошти іншим користувачам",
"right-passwordreset": "Перегляд повідомлень електронної пошти для зміни паролю",
+ "right-managechangetags": "Створення та вилучення [[Special:Tags|міток]] з бази даних",
"newuserlogpage": "Журнал нових користувачів",
"newuserlogpagetext": "Список нещодавно зареєстрованих користувачів.",
"rightslog": "Журнал прав користувача",
@@ -1132,7 +1167,7 @@
"action-move": "перейменування цієї сторінки",
"action-move-subpages": "перейменування цієї сторінки з усіма її підсторінками",
"action-move-rootuserpages": "перейменувати кореневі сторінки користувачів",
- "action-move-categorypages": "перейменування сторінок категорії",
+ "action-move-categorypages": "перейменування сторінок категорій",
"action-movefile": "перейменувати цей файл",
"action-upload": "завантаження цього файлу",
"action-reupload": "перезапис існуючого файлу",
@@ -1163,6 +1198,8 @@
"action-viewmywatchlist": "перегляд власного списку спостереження",
"action-viewmyprivateinfo": "перегляд своєї приватної інформації",
"action-editmyprivateinfo": "редагування своєї приватної інформації",
+ "action-editcontentmodel": "редагувати модель вмісту сторінки",
+ "action-managechangetags": "створення та вилучення міток з бази даних",
"nchanges": "$1 {{PLURAL:$1|зміна|зміни|змін}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|зміна з останнього візиту|зміни з останнього візиту|змін з останнього візиту}}",
"enhancedrc-history": "історія",
@@ -1235,9 +1272,9 @@
"uploaderror": "Помилка завантаження файлу",
"upload-recreate-warning": "'''Увага. Файл з такою назвою був раніше вилучений або перейменований.''\n\nДалі наведено журнал вилучень і перейменувань цього файлу:",
"uploadtext": "За допомогою цієї форми ви можете завантажити файли на сервер.\n\nЯкщо файл із зазначеною вами назвою вже існує в проекті, то його буде замінено без попередження. Тому, якщо ви не збираєтесь оновлювати файл,\nбуло б непогано перевірити, чи такий файл уже існує.\n\nЩоби переглянути вже завантажені файли,\nзайдіть на: [[Special:FileList|список завантажених файлів]].\n\nЗавантаження відображаються в [[Special:Log/upload|журналі завантажень]], вилучення – у [[Special:Log/delete|журналі вилучень]].\n\nДля вставки зображень в статті можна використовувати такі рядки:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:Назва_зображення.jpg<nowiki>]]</nowiki></code>''', щоб використати повну версію файлу\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:Назва_зображення.png|200px|thumb|left|Підпис під зображенням<nowiki>]]</nowiki></code>''', щоб використати зображення у рамці зліва сторінки з підписом під зображенням\n\nдля інших медіа-файлів використовуйте рядок виду:\n* '''<code><nowiki>[[</nowiki>{{ns:media}}:Назва_файлу.ogg<nowiki>]]</nowiki></code>'''.",
- "upload-permitted": "Дозволені типи файлів: $1.",
- "upload-preferred": "Бажані типи файлів: $1.",
- "upload-prohibited": "Заборонені типи файлів: $1.",
+ "upload-permitted": "Дозволен{{PLURAL:$2|ий тип|і типи}} файлів: $1.",
+ "upload-preferred": "Бажан{{PLURAL:$2|ий тип|і типи}} файлів: $1.",
+ "upload-prohibited": "Заборонен{{PLURAL:$2|ий тип|і типи}} файлів: $1.",
"uploadlogpage": "Журнал завантажень",
"uploadlogpagetext": "Нижче наведено список останніх завантажених файлів.\nГляньте [[Special:NewFiles|галерею нових зображень]] для більш візуального огляду.",
"filename": "Назва файлу",
@@ -1305,7 +1342,7 @@
"watchthisupload": "Спостерігати за цим файлом",
"filewasdeleted": "Файл з такою назвою вже існував, але був вилучений.\nВам слід перевірити $1 перед повторним завантаженням.",
"filename-bad-prefix": "Назва завантажуваного файлу починається на '''«$1»''' і, можливо, є шаблонною назвою, яку цифрова фотокамера дає знімкам. Будь ласка, виберіть назву, яка краще описуватиме вміст файлу.",
- "filename-prefix-blacklist": " #<!-- не міняйте цей рядок --> <pre>\n# Синтаксис такий:\n# * Все, що починається з символу «#» вважається коментарем (до кінця рядка)\n# * Кожен непорожній рядок - префікс стандартної назви файлу, яку зазвичай дає цифрова камера\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # деякі мобільні телефони\nIMG # загальне\nJD # Jenoptik\nMGP # Pentax\nPICT # різні\n #</pre> <!-- не міняйте цей рядок -->",
+ "filename-prefix-blacklist": " #<!-- не змінюйте цей рядок --> <pre>\n# Синтаксис такий:\n# * Все, що починається з символу «#» вважається коментарем (до кінця рядка)\n# * Кожен непорожній рядок — префікс стандартної назви файлу, яку зазвичай дає цифрова камера\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # деякі мобільні телефони\nIMG # загальне\nJD # Jenoptik\nMGP # Pentax\nPICT # різні\n #</pre> <!-- не змінюйте цей рядок -->",
"upload-success-subj": "Завантаження успішно завершено",
"upload-success-msg": "Ваше завантаження з [$2] було успішним. Воно доступне тут: [[:{{ns:file}}:$1]]",
"upload-failure-subj": "Проблема із завантаженням",
@@ -1362,7 +1399,7 @@
"zip-wrong-format": "Вказаний файл не є ZIP-файлом",
"zip-bad": "ZIP-файл є пошкоджений чи в інший спосіб непридатний для зчитування.\nВін не піддається перевірці в цілях безпеки.",
"zip-unsupported": "Файл використовує такі можливості ZIP, які не підтримуються MediaWiki.\nВін не піддається перевірці в цілях безпеки.",
- "uploadstash": "Завантажити сховок",
+ "uploadstash": "Сховок завантажень",
"uploadstash-summary": "Ця сторінка надає доступ до файлів, що були завантажені (або завантажуються зараз), але ще не були опубліковані в вікі. Ці файли не відображаються нікому, крім користувача, що їх завантажив.",
"uploadstash-clear": "Очистити сховані файли",
"uploadstash-nofiles": "У вас немає схованих файлів.",
@@ -1396,7 +1433,7 @@
"nolicense": "Відсутнє",
"licenses-edit": "Редагувати параметри ліцензії",
"license-nopreview": "(Попередній перегляд недоступний)",
- "upload_source_url": " (вірна, публічно доступна інтернет-адреса)",
+ "upload_source_url": "(введіть правильну, публічно доступну інтернет-адресу)",
"upload_source_file": " (файл на вашому комп'ютері)",
"listfiles-delete": "видалити",
"listfiles-summary": "Ця спеціальна сторінка показує всі завантажені файли.",
@@ -1481,7 +1518,7 @@
"listredirects": "Список перенаправлень",
"listduplicatedfiles": "Список файлів з дублікатами",
"listduplicatedfiles-summary": "Це список файлів, де остання версія файлу вважається дублікатом останньої версії деяких інших файлів. Враховуються тільки локальні файли.",
- "listduplicatedfiles-entry": "У файлу [[:File:$1|$1]] - [[$3|{{PLURAL:$2|один дублікат|$2 дублікатів|$2 дублікат}}]].",
+ "listduplicatedfiles-entry": "У файлу [[:File:$1|$1]] — [[$3|{{PLURAL:$2|один дублікат|$2 дублікатів|$2 дублікат}}]].",
"unusedtemplates": "Шаблони, що не використовуються",
"unusedtemplatestext": "На цій сторінці показані всі сторінки простору назв «{{ns:template}}», які не включені до інших сторінок. Не забувайте перевірити відсутність інших посилань на шаблон, перш ніж вилучити його.",
"unusedtemplateswlh": "інші посилання",
@@ -1490,12 +1527,13 @@
"randomincategory": "Випадкова сторінка у категорії",
"randomincategory-invalidcategory": "\" $1 \" не є дійсним іменем категорії.",
"randomincategory-nopages": "У [[:Category:$1]] немає сторінок.",
+ "randomincategory-category": "Категорія:",
+ "randomincategory-legend": "Випадкова сторінка у категорії",
"randomredirect": "Випадкове перенаправлення",
"randomredirect-nopages": "Простір назв «$1» не містить перенаправлень.",
"statistics": "Статистика",
"statistics-header-pages": "Статистика сторінок",
"statistics-header-edits": "Статистика редагувань",
- "statistics-header-views": "Статистика переглядів",
"statistics-header-users": "Статистика користувачів",
"statistics-header-hooks": "Інша статистика",
"statistics-articles": "Статей",
@@ -1504,13 +1542,9 @@
"statistics-files": "Завантажено файлів",
"statistics-edits": "Кількість редагувань з моменту установки {{grammar:genitive|{{SITENAME}}}}",
"statistics-edits-average": "Середнє число редагувань на сторінку",
- "statistics-views-total": "Усього переглядів",
- "statistics-views-total-desc": "Перегляди неіснуючих та спеціальних сторінок не враховані",
- "statistics-views-peredit": "Переглядів на редагування",
"statistics-users": "Зареєстрованих [[Special:ListUsers|користувачів]]",
"statistics-users-active": "Активні користувачі",
"statistics-users-active-desc": "Користувачі, які здійснили якусь дію протягом {{PLURAL:$1|1=минулого дня|$1 минулих днів}}",
- "statistics-mostpopular": "Сторінки, які найчастіше переглядають",
"pageswithprop": "Сторінки з перевизначеними властивостями",
"pageswithprop-legend": "Сторінки з перевизначеними властивостями",
"pageswithprop-text": "Тут перераховані сторінки, у яких були вручну перевизначені окремі властивості.",
@@ -1551,9 +1585,9 @@
"uncategorizedtemplates": "Некатегоризовані шаблони",
"unusedcategories": "Категорії, що не використовуються",
"unusedimages": "Файли, що не використовуються",
- "popularpages": "Популярні статті",
"wantedcategories": "Необхідні категорії",
"wantedpages": "Необхідні статті",
+ "wantedpages-summary": "Список неіснуючих сторінок із найбільшою кількістю посилань на них, за винятком тих сторінок, на які ведуть лише перенаправлення. Щоб отримати список неіснуючих сторінок, на які ведуть перенаправлення, перегляньте [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Неправильний заголовок у результатах запиту: $1",
"wantedfiles": "Необхідні файли",
"wantedfiletext-cat": "Наступні файли використовують, але вони не існують. У цей список можуть помилково потрапити файли, що знаходяться на зовнішніх сховищах. Такі хибні моменти помічаються <del>перекреслюванням</del>. Крім того, сторінки, що використовують неіснуючі файли, перелічені в [[:$1]].",
@@ -1613,10 +1647,12 @@
"pager-older-n": "{{PLURAL:$1|старіша|старіші|старіших}} $1",
"suppress": "Ревізор",
"querypage-disabled": "Цю спеціальну сторінку вимкнуто для покращення продуктивності.",
+ "apihelp": "Довідка з API",
+ "apihelp-no-such-module": "Додаток \"$1\" не знайдено.",
"booksources": "Джерела книг",
"booksources-search-legend": "Пошук інформації про книгу",
"booksources-isbn": "ISBN:",
- "booksources-go": "Знайти",
+ "booksources-search": "Пошук",
"booksources-text": "На цій сторінці наведено список посилань на сайти, де ви, можливо, знайдете додаткову інформацію про книгу. Це інтернет-магазини й системи пошуку в бібліотечних каталогах.",
"booksources-invalid-isbn": "Вказаний номер ISBN, судячи з усього, містить помилку. Будь ласка, перевірте, що при перенесенні номера з першоджерела не виникло спотворень.",
"specialloguserlabel": "Виконавець:",
@@ -1677,12 +1713,12 @@
"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": "можливість додавати в {{PLURAL:$2|1=групу|групи}}: $1",
+ "listgrouprights-removegroup": "можливість виключати з {{PLURAL:$2|1=групи|груп}}: $1",
+ "listgrouprights-addgroup-all": "можливість додавати до всіх груп",
+ "listgrouprights-removegroup-all": "можливість виключати з усіх груп",
"listgrouprights-addgroup-self": "може додавати {{PLURAL:$2|1=групу|групи}} до свого облікового запису: $1",
- "listgrouprights-removegroup-self": "може вилучати {{PLURAL:$2|1=групу|групи}} зі свого облікового запису: $1",
+ "listgrouprights-removegroup-self": "Можливість вилучити зі свого облікового запису {{PLURAL:$2|1=групу|групи}}: $1",
"listgrouprights-addgroup-self-all": "Може додавати всі групи до свого облікового запису",
"listgrouprights-removegroup-self-all": "може вилучати всі групи зі свого облікового запису",
"listgrouprights-namespaceprotection-header": "Обмеження простору імен",
@@ -1694,12 +1730,12 @@
"trackingcategories-name": "Ім'я повідомлення",
"trackingcategories-desc": "Критерій включення в категорію",
"noindex-category-desc": "Сторінка не індексується пошуковими роботами, тому що на ній є «чарівне слово» <code><nowiki>__NOINDEX__</nowiki></code>, і вона знаходиться в просторі імен, де дозволений цей прапор).",
- "index-category-desc": "На сторінці є «чарівне слово» __INDEX__ (і сторінка знаходиться в просторі імен, де дозволений цей прапор), тому вона індексуються пошуковими роботами в тих випадках, коли цього зазвичай не відбувається.",
- "post-expand-template-inclusion-category-desc": "Після показу всіх шаблонів розмір сторінки стане більше, ніж <code>$wgMaxArticleSize</code>, тому деякі шаблони не були показані повністю.",
- "post-expand-template-argument-category-desc": "Після розкриття аргументу шаблона (що-небудь в потрійних фігурних дужках, наприклад, <code>{{{Foo}}})</code>, сторінка стане більше, ніж <code>$wgMaxArticleSize</code>.",
- "expensive-parserfunction-category-desc": "На сторінці використовується занадто багато ресурсомістких функцій (таких, як <code>#ifexist</code>). Детальніше - на сторінці [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
- "broken-file-category-desc": "Категорія додається, якщо сторінка містить некоректну файлову посилання (посилання на неіснуючий файл).",
- "hidden-category-category-desc": "Це категорія з доданою міткою <code><nowiki>__HIDDENCAT__</nowiki></code> в неї, що за замовчуванням запобігає її відображенню на сторінках в розділі категорій.",
+ "index-category-desc": "На сторінці є «чарівне слово» <nowiki>__INDEX__</nowiki> (і сторінка знаходиться в просторі імен, де дозволений цей прапор), тому вона індексуються пошуковими роботами в тих випадках, коли цього зазвичай не відбувається.",
+ "post-expand-template-inclusion-category-desc": "Розмір сторінки стане більший за <code>$wgMaxArticleSize</code> після показу всіх шаблонів, тому деякі з них не були показані повністю.",
+ "post-expand-template-argument-category-desc": "Сторінка стане більшою за <code>$wgMaxArticleSize</code> після розкриття аргументу шаблона (що-небудь в потрійних фігурних дужках, наприклад, <code>{{{Foo}}})</code>).",
+ "expensive-parserfunction-category-desc": "На сторінці також використовується занадто багато ресурсомістких функцій (таких, як <code>#ifexist</code>). Детальніше - на сторінці [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "Сторінка містить некоректне файлове посилання (посилання на неіснуючий файл).",
+ "hidden-category-category-desc": "Ця категорія містить мітку <code><nowiki>__HIDDENCAT__</nowiki></code> у вмісті сторінки, що типово запобігає її відображенню на сторінках в розділі категорій.",
"trackingcategories-nodesc": "Опис відсутній.",
"trackingcategories-disabled": "Категорія вимкнена",
"mailnologin": "Відсутня адреса для відправки",
@@ -1709,7 +1745,7 @@
"emailuser-title-notarget": "Надіслати електронного листа користувачеві",
"emailpage": "Лист користувачеві",
"emailpagetext": "Заповнивши наведену нижче форму, можна надіслати повідомлення {{GENDER:$1|цьому користувачу|цій користувачці}}.\nЕлектронна адреса, яку Ви зазначили у [[Special:Preferences|своїх налаштуваннях]], буде зазначена в полі «Від кого» листа, тому одержувач матиме можливість відповісти безпосередньо вам.",
- "defemailsubject": "{{SITENAME}} - електронний лист від користувача \" $1 \"",
+ "defemailsubject": "{{SITENAME}} — електронний лист від користувача «$1»",
"usermaildisabled": "Електронне листування між користувачами вимкнене",
"usermaildisabledtext": "Ви не можете надсилати електронні листи іншим користувачам цієї вікі",
"noemailtitle": "Відсутня адреса електронної пошти",
@@ -1737,7 +1773,7 @@
"mywatchlist": "Список спостереження",
"watchlistfor2": "Для $1 $2",
"nowatchlist": "Ваш список спостереження порожній.",
- "watchlistanontext": "Вам необхідно $1, щоб переглянути чи редагувати список спостереження.",
+ "watchlistanontext": "Вам необхідно увійти, щоб переглянути чи редагувати список спостереження.",
"watchnologin": "Ви не ввійшли до системи",
"addwatch": "Додати до списку спостереження",
"addedwatchtext": "Сторінку «[[:$1]]» додано до вашого [[Special:Watchlist|списку спостереження]].\nПодальші редагування цієї сторінки (та пов'язаної з нею сторінки обговорення) відображатимуться в цьому списку.",
@@ -1755,7 +1791,7 @@
"wlheader-enotif": "Сповіщення електронною поштою ввімкнено.",
"wlheader-showupdated": "Сторінки, що змінилися після вашого останнього їх відвідування, виділені '''жирним''' шрифтом.",
"wlnote": "Нижче наведено {{PLURAL:$1|останнє $1 редагування|останні $1 редагування|останні $1 редагувань}} за {{PLURAL:$2|останню|останні|останні}} <strong>$2</strong> {{PLURAL:$2|годину|години|годин}}, на час $3 $4.",
- "wlshowlast": "Показати зміни за останні $1 годин $2 днів $3",
+ "wlshowlast": "Показати зміни за останні $1 годин $2 днів",
"watchlist-options": "Налаштування списку спостереження",
"watching": "Додавання до списку спостереження…",
"unwatching": "Вилучення зі списку спостереження…",
@@ -1785,7 +1821,7 @@
"exbeforeblank": "зміст до очистки: «$1»",
"delete-confirm": "Вилучення «$1»",
"delete-legend": "Вилучення",
- "historywarning": "'''Попередження:''' Сторінка, яку ви збираєтеся вилучити, має історію редагувань з приблизно $1 {{PLURAL:$1|1=версії|версій}}:",
+ "historywarning": "<strong>Попередження:</strong> Сторінка, яку ви збираєтеся вилучити, має історію редагувань з приблизно $1 {{PLURAL:$1|1=версії|версій}}:",
"confirmdeletetext": "Ви збираєтесь вилучити сторінку і всі її журнали редагувань з бази даних.\nБудь ласка, підтвердіть, що ви бажаєте зробити це, повністю розумієте наслідки і що робите це у відповідності з [[{{MediaWiki:Policy-url}}|правилами]].",
"actioncomplete": "Дію виконано",
"actionfailed": "Виконати дію не вдалося",
@@ -1801,9 +1837,9 @@
"delete-edit-reasonlist": "Редагувати причини вилучення",
"delete-toobig": "У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.\nВилучення таких сторінок було заборонене з метою уникнення порушень у роботі сайту {{SITENAME}}.",
"delete-warning-toobig": "У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.\nЇї вилучення може призвести до порушень у роботі бази даних сайту {{SITENAME}};\nдійте обережно.",
+ "deleteprotected": "Ви не можете видалити цю сторінку, тому що вона захищена.",
"deleting-backlinks-warning": "'''Попередження:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|інші сторінки]] посилаються або містять сторінку, яку ви маєте намір видалити.",
"rollback": "Відкинуто редагування",
- "rollback_short": "Відкинути",
"rollbacklink": "відкинути",
"rollbacklinkcount": "відкинути $1 {{PLURAL:$1|редагування|редагування|редагувань}}",
"rollbacklinkcount-morethan": "відкинути понад $1 {{PLURAL:$1|редагування|редагування|редагувань}}",
@@ -1853,6 +1889,7 @@
"protect-othertime": "Інший час/термін:",
"protect-othertime-op": "інший час/термін",
"protect-existing-expiry": "Поточний час завершення: $3, $2",
+ "protect-existing-expiry-infinity": "Поточний час завершення: нескінченний",
"protect-otherreason": "Інша/додаткова причина:",
"protect-otherreason-op": "Інша причина",
"protect-dropdown": "* Типові причини захисту\n** частий вандалізм\n** надмірний спам\n** непродуктивна війна редагувань\n** популярна сторінка",
@@ -1912,6 +1949,7 @@
"namespace": "Простір назв:",
"invert": "Крім вибраного",
"tooltip-invert": "Встановіть цей прапорець, щоб приховати зміни на сторінках, в межах обраного простору імен (і пов'язаних просторів імен, за потреби)",
+ "tooltip-whatlinkshere-invert": "Поставте цю галочку, щоб приховати зміни на сторінках із обраного простору назв.",
"namespace_association": "Пов'язаний простір назв",
"tooltip-namespace_association": "Встановіть цей прапорець, щоб додати простір імен обговорень, пов'язаних з обраним простором імен",
"blanknamespace": "(Основний)",
@@ -1961,7 +1999,7 @@
"autoblockid": "Автоблокування #$1",
"block": "Заблокувати користувача",
"unblock": "Розблокувати користувача",
- "blockip": "Блокування",
+ "blockip": "Заблокувати {{GENDER:$1|користувача|користувачку}}",
"blockip-legend": "Блокування користувача",
"blockiptext": "Використовуйте форму нижче, щоб заблокувати можливість редагування зазначеній IP-адресі або користувачу.\nЦе слід робити лише для запобігання порушенням і у відповідності до [[{{MediaWiki:Policy-url}}|правил]].\nОбов'язково заповніть причину нижче, бажано дати інформативну вичерпну інформацію (наприклад, послатися на конкретні правила, дати посилання на редагування користувача, які призвели до блокування). Можна конкретизувати причину блокування на сторінці обговорення користувача.\n* Якщо ви блокуєте обліковий запис бота, переконайтеся, що ви вимкнули автоблокування (для запобігання автоматичного блокування облікових записів власника бота або інших ботів).\n* Зверніть увагу, що IP-адреси у більшості випадків не варто блокувати на більший за декілька днів термін, щоб під блокування не підпали інші користувачі з таким самим IP. Винятки — частий довготривалий вандалізм.",
"ipaddressorusername": "IP-адреса або ім'я користувача:",
@@ -1990,13 +2028,14 @@
"ipb-unblock-addr": "Розблокувати $1",
"ipb-unblock": "Розблокувати користувача або IP-адресу",
"ipb-blocklist": "Показати чинні блокування",
- "ipb-blocklist-contribs": "Внесок користувача $1",
+ "ipb-blocklist-contribs": "Внесок {{GENDER:$1|$1}}",
"unblockip": "Розблокувати IP-адресу",
"unblockiptext": "Використовуйте подану нижче форму, щоб відновити можливість збереження з раніше заблокованої IP-адреси.",
"ipusubmit": "Зняти це блокування",
"unblocked": "[[User:$1|$1]] розблокований",
"unblocked-range": "$1 розблоковано",
"unblocked-id": "Блокування $1 було зняте",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] вже розлоковано.",
"blocklist": "Заблоковані користувачі",
"ipblocklist": "Список заблокованих адрес та користувачів",
"ipblocklist-legend": "Пошук заблокованого користувача",
@@ -2082,7 +2121,7 @@
"move-page": "Перейменування сторінки «$1»",
"move-page-legend": "Перейменування сторінки",
"movepagetext": "Скориставшись формою нижче, ви можете перейменувати сторінку, одночасно перемістивши на нове місце і журнал її редагувань.\nСтара назва стане перенаправленням на нову назву.\nВи можете автоматично оновити перенаправлення на стару назву.\nЯкщо ви цього не зробите, будь ласка, перевірте наявність [[Special:DoubleRedirects|подвійних]] чи [[Special:BrokenRedirects|розірваних]] перенаправлень.\nВи відповідаєте за те, щоб посилання і надалі вказували туди, куди припускалося.\n\nЗверніть увагу, що сторінка '''не''' буде перейменована, якщо сторінка з новою назвою вже існує, окрім випадків, коли остання порожня або є перенаправленням, а журнал її редагувань порожній.\nЦе означає, що ви можете повернути сторінці стару назву, якщо ви перейменували її помилково, але ви не можете затерти існуючу сторінку.\n\n'''ПОПЕРЕДЖЕННЯ!'''\nЦя дія може стати причиною серйозних та неочікуваних змін популярних сторінок.\nБудь ласка, перед продовженням переконайтесь, що ви розумієте всі можливі наслідки.",
- "movepagetext-noredirectfixer": "Ця форма дозволяє перейменувати сторінку з одночасним переміщенням її журналу змін.\nСтара назва стане перенаправленням на нову.\nБудь ласка, не забудьте виправити [[Special:DoubleRedirects|подвійні]] і [[Special:BrokenRedirects|розірвані перенаправлення]].\nВи відповідаєте за те, щоб посилання і далі вказували туди, куди треба.\n\nЗверніть увагу, що сторінка '''не буде''' перейменована, якщо сторінка з новою назвою вже існує, крім випадків, коли вона є перенаправленням або порожня та не має історії редагувань.\nЦе означає, що Ви можете перейменувати сторінку назад, якщо Ви допустилися помилки, і при цьому не зможете випадково перезаписати наявну сторінку.\n\n'''Попередження!'''\nПерейменування може призвести до масштабних і несподіваних змін для ''популярних'' сторінок.\nТому перед перейменуванням упевніться, що Ви оцінили можливі наслідки.",
+ "movepagetext-noredirectfixer": "Ця форма дозволяє перейменувати сторінку з одночасним переміщенням її журналу змін.\nСтара назва стане перенаправленням на нову.\nБудь ласка, не забудьте виправити [[Special:DoubleRedirects|подвійні]] та [[Special:BrokenRedirects|розірвані перенаправлення]].\nВи відповідаєте за те, щоб посилання і далі вказували туди, куди треба.\n\nЗверніть увагу, що сторінка '''не буде''' перейменована, якщо сторінка з новою назвою вже існує, крім випадків, коли вона є перенаправленням або порожня та не має історії редагувань.\nЦе означає, що Ви можете перейменувати сторінку назад, якщо Ви допустилися помилки, і при цьому не зможете випадково перезаписати наявну сторінку.\n\n'''Попередження!'''\nПерейменування може призвести до масштабних і несподіваних змін для ''популярних'' сторінок.\nТому перед перейменуванням упевніться, що Ви оцінили можливі наслідки.",
"movepagetalktext": "Приєднана сторінка обговорення також буде автоматично перейменована, '''окрім таких випадків:'''\n* Непорожня сторінка обговорення з такою назвою вже існує або\n* Ви не поставили галочку в полі нижче.\n\nУ цих випадках ви будете змушені перейменувати чи об'єднати сторінки вручну в разі необхідності",
"movearticle": "Перейменувати сторінку",
"moveuserpage-warning": "'''Увага:''' Ви збираєтеся перейменувати сторінку користувача. Будь ласка, зверніть увагу, що буде перейменовано тільки сторінку, але користувача '''не''' буде перейменовано.",
@@ -2119,7 +2158,7 @@
"revertmove": "відкинути",
"delete_and_move": "Вилучити і перейменувати",
"delete_and_move_text": "== Потрібне вилучення ==\nСторінка з назвою [[:$1|«$1»]] вже існує.\nБажаєте вилучити її для можливості перейменування?",
- "delete_and_move_confirm": "Так, вилучити цю сторінку",
+ "delete_and_move_confirm": "Так, вилучити для перейменування",
"delete_and_move_reason": "Вилучена для можливості перейменування сторінки «[[$1]]»",
"selfmove": "Неможливо перейменувати сторінку: поточна й нова назви сторінки співпадають.",
"immobile-source-namespace": "Не можна перейменовувати сторінки з простору назв «$1»",
@@ -2176,14 +2215,17 @@
"thumbnail-temp-create": "Не вдалося створити тимчасовий файл мініатюри",
"thumbnail-dest-create": "Не вдалося зберегти мініатюру до місця призначення",
"thumbnail_invalid_params": "Помилковий параметр мініатюри",
+ "thumbnail_toobigimagearea": "Файл з розмірами більше, ніж $1",
"thumbnail_dest_directory": "Неможливо створити цільову директорію",
"thumbnail_image-type": "Тип зображення не підтримується",
"thumbnail_gd-library": "Неповна конфігурація бібліотеки GD, відсутня функція $1",
"thumbnail_image-missing": "Очевидно, відсутній файл $1",
"thumbnail_image-failure-limit": "Там було дуже багато недавніх невдалих спроб ($1 або більше) для візуалізації цього ескізу. Будь ласка, спробуйте ще раз пізніше.",
"import": "Імпорт статей",
- "importinterwiki": "Міжвікі імпорт",
- "import-interwiki-text": "Вкажіть вікі й назву імпортованої сторінки.\nДати змін й імена авторів буде збережено.\nУсі операції міжвікі-імпорту реєструються в [[Special:Log/import|відповідному протоколі]].",
+ "importinterwiki": "Імпортувати з іншої вікі",
+ "import-interwiki-text": "Вкажіть вікі й назву імпортованої сторінки.\nДати змін й імена авторів буде збережено.\nУсі імпорти з інших вікі реєструються у [[Special:Log/import|відповідному журналі]].",
+ "import-interwiki-sourcewiki": "Джерело вікі:",
+ "import-interwiki-sourcepage": "Вихідна сторінка:",
"import-interwiki-history": "Копіювати всю історію змін цієї сторінки",
"import-interwiki-templates": "Включити всі шаблони",
"import-interwiki-submit": "Імпортувати",
@@ -2201,7 +2243,7 @@
"importcantopen": "Неможливо відкрити файл імпорту",
"importbadinterwiki": "Невірне інтервікі-посилання",
"importsuccess": "Імпорт виконано!",
- "importnosources": "Не було вибране джерело міжвікі-імпорту, пряме завантаження історії змін вимкнуте.",
+ "importnosources": "Пряме завантаження історії змін було вимкнуте, оскільки не була вибрана вікі, з якої можна було б імпортувати.",
"importnofile": "Файл імпорту не було завантажено.",
"importuploaderrorsize": "Не вдалося завантажити або імпортувати файл. Розмір файлу перевищує встановлену межу.",
"importuploaderrorpartial": "Не вдалося завантажити або імпортувати файл. Він був завантажений лише частково.",
@@ -2225,18 +2267,15 @@
"import-rootpage-nosubpage": "В просторі назв вказаної кореневої сторінки «$1» заборонені підсторінки",
"importlogpage": "Журнал імпорту",
"importlogpagetext": "Імпорт адміністраторами сторінок з історією редагувань з інших вікі.",
- "import-logentry-upload": "«[[$1]]» — імпорт з файлу",
"import-logentry-upload-detail": "Імпортовано $1 {{PLURAL:$1|версія|версії|версій}}",
- "import-logentry-interwiki": "«$1» — міжвікі імпорт",
"import-logentry-interwiki-detail": "Імпортовано $1 {{PLURAL:$1|версія|версії|версій}} з $2",
"javascripttest": "Тестування JavaScript",
- "javascripttest-title": "Працює $1 випробувань",
"javascripttest-pagetext-noframework": "Ця сторінка призначений для тестування JavaScript.",
"javascripttest-pagetext-unknownframework": "Невідоме середовище тестування \" $1 \".",
+ "javascripttest-pagetext-unknownaction": "невідома дія \"$1\".",
"javascripttest-pagetext-frameworks": "Будь ласка, оберіть одне з наступних середовищ тестування: $1",
"javascripttest-pagetext-skins": "Виберіть оформлення сторінки запуску тесту:",
"javascripttest-qunit-intro": "Переглянути [ $1 тестування документації] на mediawiki.org.",
- "javascripttest-qunit-heading": "Набір тестів MediaWiki JavaScript QUnit",
"tooltip-pt-userpage": "Ваша сторінка користувача",
"tooltip-pt-anonuserpage": "Сторінка користувача для вашої IP-адреси",
"tooltip-pt-mytalk": "Ваша сторінка обговорення",
@@ -2246,6 +2285,7 @@
"tooltip-pt-mycontris": "Ваш внесок",
"tooltip-pt-login": "Тут можна зареєструватися в системі, але це не обов'язково.",
"tooltip-pt-logout": "Вихід із системи",
+ "tooltip-pt-createaccount": "Пропонуємо створити обліковий запис і увійти в систему; однак, це не обов'язково",
"tooltip-ca-talk": "Обговорення змісту сторінки",
"tooltip-ca-edit": "Ви можете редагувати цю сторінку. Будь ласка, використовуйте кнопку попереднього перегляду перед збереженням",
"tooltip-ca-addsection": "Створити новий розділ",
@@ -2275,6 +2315,7 @@
"tooltip-feed-atom": "Трансляція в Atom для цієї сторінки",
"tooltip-t-contributions": "Перегляд внеску цього користувача",
"tooltip-t-emailuser": "Надіслати листа цьому користувачеві",
+ "tooltip-t-info": "Додаткові відомості про цю сторінку",
"tooltip-t-upload": "Завантажити файли",
"tooltip-t-specialpages": "Перелік спеціальних сторінок",
"tooltip-t-print": "Версія цієї сторінки для друку",
@@ -2349,7 +2390,6 @@
"pageinfo-robot-policy": "Індексація пошуковими системами",
"pageinfo-robot-index": "Індексується",
"pageinfo-robot-noindex": "Не індексується",
- "pageinfo-views": "Кількість переглядів",
"pageinfo-watchers": "Кількість спостерігачів",
"pageinfo-few-watchers": "Менше ніж $1 {{PLURAL:$1|спостерігач|спостерігачі|спостерігачів}}",
"pageinfo-redirects-name": "Число перенаправлень на цю сторінку",
@@ -2865,7 +2905,6 @@
"exif-urgency-low": "Низька ($1)",
"exif-urgency-high": "Висока ($1)",
"exif-urgency-other": "Визначений користувачем пріоритет ($1)",
- "watchlistall2": "всі",
"namespacesall": "всі",
"monthsall": "всі",
"confirmemail": "Підтвердження адреси ел. пошти",
@@ -3018,9 +3057,9 @@
"hebrew-calendar-m12-gen": "Елула",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|обговорення]])",
"timezone-utc": "UTC",
- "unknown_extension_tag": "Невідомий тег доповнення «$1»",
"duplicate-defaultsort": "Увага. Ключ сортування «$2» перекриває попередній ключ сортування «$1».",
"duplicate-displaytitle": "<strong>Увага:</strong> Відображений заголовок \"$2\" заміщує раніше відображений заголовок \"$1\".",
+ "invalid-indicator-name": "<strong>Помилка:</strong> Сторінка індикатора стану <code>name</code> атрибута не може бути пуста.",
"version": "Версія MediaWiki",
"version-extensions": "Установлені розширення",
"version-skins": "Встановлені теми оформлення",
@@ -3064,6 +3103,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Шлях до статей]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Шлях до скриптів]",
+ "version-libraries": "Встановлені бібліотеки",
+ "version-libraries-library": "Бібліотека",
+ "version-libraries-version": "Версія",
"redirect": "Перенаправлення за файлом, користувачем, сторінкою або ID версії",
"redirect-legend": "Перенаправити на файл чи сторінку",
"redirect-summary": "Ця спеціальна сторінка перенаправляє на файл (за поданою назвою файлу), сторінку (за поданим ID версії або сторінки) або сторінку користувача (за поданим числовим ID користувача). Використання: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]] або [[{{#Special:Redirect}}/user/101]].",
@@ -3099,6 +3141,7 @@
"specialpages-group-wiki": "Дані та інструменти",
"specialpages-group-redirects": "Перенаправлення",
"specialpages-group-spam": "Інструменти проти спаму",
+ "specialpages-group-developer": "Інструменти розробника",
"blankpage": "Порожня сторінка",
"intentionallyblankpage": "Цю сторінку навмисне залишили порожньою",
"external_image_whitelist": " #Залиште цей рядок таким, яким він є<pre>\n#Записуйте тут фрагменти регулярних виразів (ту частину, що знаходиться між //)\n#Вони будуть зіставлені з URL зовнішніх зображень.\n#Потрібні будуть показані як зображення, решта будуть показані як посилання на зображення\n#Рядки, що починаються з #, вважаються коментарями.\n#Рядки чутливі до регістра\n\n#Розміщуйте фрагменти регулярних виразів над цією строчкою. Залиште цей рядок таким, яким він є.</pre>",
@@ -3111,12 +3154,54 @@
"tags-tag": "Назва мітки",
"tags-display-header": "Показ у списках змін",
"tags-description-header": "Повний опис значення",
+ "tags-source-header": "Джерело",
"tags-active-header": "Активний?",
"tags-hitcount-header": "Помічені редагування",
+ "tags-actions-header": "Дії",
"tags-active-yes": "Так",
"tags-active-no": "Ні",
+ "tags-source-extension": "Визначається розширенням",
+ "tags-source-manual": "Застосовується вручну користувачами і ботами",
+ "tags-source-none": "Більше не використовується",
"tags-edit": "редагувати",
+ "tags-delete": "вилучити",
+ "tags-activate": "активувати",
+ "tags-deactivate": "вимкнути",
"tags-hitcount": "$1 {{PLURAL:$1|зміна|зміни|змін}}",
+ "tags-manage-no-permission": "У Вас нема дозволу керувати змінами міток.",
+ "tags-create-heading": "Створити нову мітку",
+ "tags-create-explanation": "За замовчуванням, новостворені мітки будуть доступні для використання користувачами і ботами.",
+ "tags-create-tag-name": "Назва мітки:",
+ "tags-create-reason": "Причина:",
+ "tags-create-submit": "Створити",
+ "tags-create-no-name": "Ви повинні вказати назву мітки.",
+ "tags-create-invalid-chars": "Назви міток не повинні містити коми (<code>,</code>) або косі риски (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Назви міток не повинні містити символи, які не можна використовувати в назвах сторінок.",
+ "tags-create-already-exists": "Мітка «$1» вже існує.",
+ "tags-create-warnings-above": "При спробі створити мітку «$1» {{PLURAL:$2|з'явились такі|1=з'явилось таке}} попередження:",
+ "tags-create-warnings-below": "Ви хочете продовжити створення мітки?",
+ "tags-delete-title": "Вилучити мітку",
+ "tags-delete-explanation-initial": "Ви збираєтеся вилучити мітку «$1» з бази даних.",
+ "tags-delete-explanation-in-use": "Його буде вилучено з {{PLURAL:$2|$2 версії/запису журналу|усіх $2 версій та/або записів журналів}}, у яких він зараз застосовується.",
+ "tags-delete-explanation-warning": "Ця дія є <strong>незворотною</strong> і <strong>не може бути скасована</strong>, навіть адміністраторами бази даних. Переконайтеся, що Ви хочете вилучити саме цю мітку.",
+ "tags-delete-explanation-active": "<strong>Мітка «$1» все ще активна і буде застосовуватися надалі.</strong> Щоб припинити це, перейдіть туди, де вказане її застосування і вимкніть її там.",
+ "tags-delete-reason": "Причина:",
+ "tags-delete-submit": "Незворотно видалити цю мітку",
+ "tags-delete-not-allowed": "Мітки, визначені розширенням, не можуть бути вилучені, якщо тільки розширення не дозволяє це окремо.",
+ "tags-delete-not-found": "Мітка «$1» не існує.",
+ "tags-delete-too-many-uses": "Міткою «$1» понад $2 {{PLURAL:$2|редагування|редагування|редагувань}}, і це означає, що її не можна вилучити.",
+ "tags-delete-warnings-after-delete": "Мітку «$1» було успішно вилучено, але {{PLURAL:$2|з'явились такі|1=з'явилось таке}} попередження:",
+ "tags-activate-title": "Активувати мітку",
+ "tags-activate-question": "Ви збираєтеся активувати мітку «$1».",
+ "tags-activate-reason": "Причина:",
+ "tags-activate-not-allowed": "Неможливо активувати мітку «$1».",
+ "tags-activate-not-found": "Мітка «$1» не існує.",
+ "tags-activate-submit": "Активувати",
+ "tags-deactivate-title": "Вимкнути мітку",
+ "tags-deactivate-question": "Ви збираєтеся вимкнути мітку «$1».",
+ "tags-deactivate-reason": "Причина:",
+ "tags-deactivate-not-allowed": "Неможливо вимкнути мітку «$1».",
+ "tags-deactivate-submit": "Вимкнути",
"comparepages": "Порівняння сторінок",
"compare-page1": "Сторінка 1",
"compare-page2": "Сторінка 2",
@@ -3170,6 +3255,14 @@
"revdelete-uname-unhid": "ім'я користувача відкрито",
"revdelete-restricted": "застосовані обмеження для адміністраторів",
"revdelete-unrestricted": "зняті обмеження для адміністраторів",
+ "logentry-block-block": "$1 {{GENDER:$2|заблокував|заблокувала}} {{GENDER:$4|$3}} на термін $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|розблокував|розблокувала}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|переблокував|переблокувала}} {{GENDER:$4|$3}} на термін $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|заблокував}} {{GENDER:$4|$3}} строком на $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|змінив}} блокування для {{GENDER:$4|$3}} на період $5 $6",
+ "logentry-import-upload": "$1 імпортува{{GENDER:$2|в|ла}} $3 через завантаження файлів",
+ "logentry-import-interwiki": "$1 імпортува{{GENDER:$2|в|ла}} $3 з іншої вікі",
+ "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 поверх перенаправлення",
@@ -3187,20 +3280,36 @@
"logentry-upload-upload": "$1 {{GENDER:$2|завантажив|завантажила}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|завантажив|завантажила}} нову версію $3",
"logentry-upload-revert": "$1 {{GENDER:$2|завантажив|завантажила}} $3",
+ "log-name-managetags": "Журнал управління мітками",
+ "log-description-managetags": "На цій сторінці перераховані завдання управління, пов'язані з [[Special:Tags|мітками]]. Журнал містить тільки дії, виконані вручну адміністратором; мітки можуть бути створені або видалені програмним забезпеченням вікі без запису в цей журнал.",
+ "logentry-managetags-create": "$1 {{GENDER:$2|створив|створила}} мітку «$4»",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|вилучив|вилучила}} мітку «$4» (вилучено з $5 {{PLURAL:$5|версії чи запису журналу|версій та/або записів журналу}})",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|активував|активувала}} мітку «$4» для використання користувачами і ботами",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|вимкнув|вимкнула}} мітку «$4» для використання користувачами і ботами",
"rightsnone": "(нема)",
+ "revdelete-summary": "коментар до редагування",
+ "feedback-adding": "Додавання відгуку на сторінку ...",
+ "feedback-back": "Назад",
+ "feedback-bugcheck": "Чудово! Просто перевірте, що це не одна з вже [$1 відомих помилок].",
+ "feedback-bugnew": "Я перевірив. Повідомити про нову помилку",
"feedback-bugornote": "Якщо ви готові описати технічні проблеми в деталях, будь ласка, [$1 повідомте про помилку].\nАбо можете використати форму нижче. Ваш коментар буде додано на сторінку \"[$3 $2]\", разом з іменем користувача.",
- "feedback-subject": "Тема:",
- "feedback-message": "Повідомлення:",
"feedback-cancel": "Скасувати",
- "feedback-submit": "Надіслати відгук",
- "feedback-adding": "Додавання відгуку на сторінку ...",
+ "feedback-close": "Виконано",
+ "feedback-external-bug-report-button": "Повідомити про технічну проблему",
+ "feedback-dialog-title": "Надіслати відгук",
+ "feedback-dialog-intro": "Для надсилання відгуку Ви можете скористатись простою формою внизу. Ваш коментар буде залишений на сторінці «$1», разом із Вашим іменем користувача (або IP-адресою).",
+ "feedback-error-title": "Помилка",
"feedback-error1": "Помилка: Невідомий результаті API",
"feedback-error2": "Помилка: Збій редагувань",
"feedback-error3": "Помилка: Немає відповіді від API",
+ "feedback-message": "Повідомлення:",
+ "feedback-subject": "Тема:",
+ "feedback-submit": "Надіслати",
+ "feedback-terms": "Я розумію, що мій ідентифікатор User Agent містить інформацію про тип мого браузера та версію операційної системи, і ця інформація після залишення відгуку перебуватиме в публічному доступі.",
+ "feedback-termsofuse": "Я погоджуюсь залишити відгук у відповідності до Умов використання.",
"feedback-thanks": "Дякуємо! Ваші відгук розміщено на сторінці \"[$2 $1]\".",
- "feedback-close": "Виконано",
- "feedback-bugcheck": "Чудово! Просто перевірте, що це не одна з вже [$1 відомих помилок].",
- "feedback-bugnew": "Я перевірив. Повідомити про нову помилку",
+ "feedback-thanks-title": "Дякуємо!",
+ "feedback-useragent": "User Agent:",
"searchsuggest-search": "Пошук",
"searchsuggest-containing": "що містять...",
"api-error-badaccess-groups": "Вам не дозволено завантажувати файли до цього вікіпроекту.",
@@ -3236,6 +3345,13 @@
"api-error-stashfailed": "Внутрішня помилка: сервер не зміг зберегти тимчасовий файл.",
"api-error-publishfailed": "Внутрішня помилка: сервер не зміг опублікувати тимчасовий файл.",
"api-error-stasherror": "Сталася помилка при завантаженні файлу у сховище.",
+ "api-error-stashedfilenotfound": "Неможливо знайти прихований файл, під час спроби його надсилання зі схованки.",
+ "api-error-stashpathinvalid": "Шлях, за яким повинен знаходитись прихований файл, є хибним.",
+ "api-error-stashfilestorage": "Сталася помилка під час збереження файлу в схованці.",
+ "api-error-stashzerolength": "Сервер не може зберегти файл, тому що він має нульовий розмір.",
+ "api-error-stashnotloggedin": "Ви повинні увійти в систему, аби мати змогу зберігати файли у сховку завантажень.",
+ "api-error-stashwrongowner": "Файл, до якого ви намагалися отримати доступ в схованці, не належить вам.",
+ "api-error-stashnosuchfilekey": "Ключ файлу, до якого Ви намагались отримати доступ у сховку, не існує.",
"api-error-timeout": "Сервер не відповідає протягом очікуваного часу.",
"api-error-unclassified": "Сталася невідома помилка.",
"api-error-unknown-code": "Невідома помилка: «$1»",
@@ -3285,11 +3401,63 @@
"pagelang-language": "Мова",
"pagelang-use-default": "Мова за замовчуванням",
"pagelang-select-lang": "Оберіть мову",
- "right-pagelang": "Змінити мову сторінки",
+ "right-pagelang": "зміна мови сторінки",
"action-pagelang": "змінити мову сторінки",
"log-name-pagelang": "Журнал змін мови",
"log-description-pagelang": "Це журнал змін мови сторінок.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|змінив|змінила}} мову сторінки для $3 з $4 на $5.",
+ "default-skin-not-found": "Ой! Типова тема оформлення для вашої вікі <code>$wgDefaultSkin</code>, <code>$1</code> недоступна.\n\nВаша установка, вірогідно, містить наступні теми оформлення. Див. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для отримання інформації про те, як включити теми оформлення і вибрати типову тему.\n\n\n$2\n\n\n; Якщо ви щойно встановили MediaWiki:\n: Ви, мабуть, зробили це з Git або безпосередньо з вихідного коду, використовуючи інший спосіб. Тоді можливе наступне. Спробуйте встановити деякі теми з [https://www.mediawiki.org/wiki/Category:All_skins каталогу тем оформлення сайту mediawiki.org]:\n:* Завантаживши [https://www.mediawiki.org/wiki/Download архів файлів], який містить декілька тем оформлення і розширень. Ви можете скопіювати теку <code>skins/</code> з нього.\n:* Завантаживши архіви окремих тем оформлення з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Склонувавши один з репозиторіїв <code>mediawiki/skins/*</code> через git у підтеку <code dir=\"ltr\">skins/</code> теки, де встановлена MediaWiki.\n: Це не повинно зашкодити вашому сховищу, якщо ви MediaWiki-розробник. Див. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для отримання інформації про те, як включити теми оформлення і вибрати типову тему.\n\n; Якщо ви щойно оновили MediaWiki:\n: MediaWiki версії 1.24 і новійша більше не включає автоматично встановлені теми (див. [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]).\nВи можете вставити наступні рядки в <code>LocalSettings.php</code>, щоб включити всі встановлені теми оформлення: \n\n\n<pre dir=\"ltr\">$3</pre>\n\n\n; Якщо ви щойно змінили <code>LocalSettings.php</code>:\n: Повторно перевірте назви тем на наявність помилок.",
+ "default-skin-not-found-no-skins": "Ой! Тема оформлення для Вашої вікі за замовчуванням, визначена у <code>$wgDefaultSkin</code> як <code>$1</code> недоступна.\n\n\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 архів файлів], який містить декілька тем оформлення і розширень. Ви можете скопіювати теку <code>skins/</code> з нього.\n:* Завантаживши окремі архіви тем з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Клонувавши один з репозиторіїв <code>mediawiki/skins/*</code> через Git в підтеку <code dir=\"ltr\">skins/</code> теки, де встановлена MediaWiki.\n: Це не повинно зашкодити Вашому сховищу, якщо Ви MediaWiki-розробник. Див. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Skin configuration] для отримання інформації про те, як включити теми оформлення і вибрати тему за замовчуванням.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (увімкнено)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''вимкнено''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''вимкнено''')",
+ "mediastatistics": "Медіа-статистика",
+ "mediastatistics-summary": "Статистичні дані про типи завантажених файлів. Вона тільки включає в себе найновішу версію файлу. Старі або видалені версії файлів виключені.",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 байт|$1 байтів|$1 байти}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME-тип",
+ "mediastatistics-table-extensions": "Можливі розширення",
+ "mediastatistics-table-count": "Кількість файлів",
+ "mediastatistics-table-totalbytes": "Загальний розмір",
+ "mediastatistics-header-unknown": "Невідомо",
+ "mediastatistics-header-bitmap": "Растрові зображення",
+ "mediastatistics-header-drawing": "Малюнки (векторні зображення)",
+ "mediastatistics-header-audio": "Звук",
+ "mediastatistics-header-video": "Відео",
+ "mediastatistics-header-multimedia": "Мішана мультимедіа",
+ "mediastatistics-header-office": "Офіс",
+ "mediastatistics-header-text": "Текст",
+ "mediastatistics-header-executable": "Виконувані файли",
+ "mediastatistics-header-archive": "Стиснуті формати",
+ "json-warn-trailing-comma": "$1 {{PLURAL:$1|зайву завершальну кому|зайвих завершальних коми|зайвих завершальних ком}} було видалено із JSON",
+ "json-error-unknown": "Виникла проблема із JSON. Помилка: $1",
+ "json-error-depth": "Перевищено дозволену глибину стека",
+ "json-error-state-mismatch": "Недозволений чи невірно сформований JSON",
+ "json-error-ctrl-char": "Помилковий контрольний символ, можливо, неправильно кодований",
+ "json-error-syntax": "Синтаксична помилка",
+ "json-error-utf8": "Спотворені символи UTF-8, можливо, неправильно закодовано",
+ "json-error-recursion": "Необхідність закодувати одне чи більше рекурсивних посилань",
+ "json-error-inf-or-nan": "Необхідність закодувати одне чи більше значення NAN або INF",
+ "json-error-unsupported-type": "Було вказано значення типу, який не вдається закодувати",
+ "headline-anchor-title": "Посилання на цей розділ",
+ "special-characters-group-latin": "Латинські",
+ "special-characters-group-latinextended": "Розширена латинська",
+ "special-characters-group-ipa": "МФА (IPA)",
+ "special-characters-group-symbols": "Символи",
+ "special-characters-group-greek": "Грецькі",
+ "special-characters-group-cyrillic": "Кирилиця",
+ "special-characters-group-arabic": "Арабські",
+ "special-characters-group-arabicextended": "Арабська розширена",
+ "special-characters-group-persian": "Перські",
+ "special-characters-group-hebrew": "Іврит",
+ "special-characters-group-bangla": "Бенгальські",
+ "special-characters-group-tamil": "Тамільська",
+ "special-characters-group-telugu": "Телугу",
+ "special-characters-group-sinhala": "Сингальська",
+ "special-characters-group-gujarati": "Гуджараті",
+ "special-characters-group-devanagari": "Деванагарі",
+ "special-characters-group-thai": "Тайські",
+ "special-characters-group-lao": "Лаоські",
+ "special-characters-group-khmer": "Кхмерські",
+ "special-characters-title-endash": "коротке тире",
+ "special-characters-title-emdash": "довге тире",
+ "special-characters-title-minus": "мінус"
}
diff --git a/languages/i18n/ur.json b/languages/i18n/ur.json
index 3170cbd3..87dd1a9f 100644
--- a/languages/i18n/ur.json
+++ b/languages/i18n/ur.json
@@ -19,7 +19,10 @@
"محبوب عالم",
"පසිඳු කාවින්ද",
"아라",
- "Calak"
+ "Calak",
+ "عرفان ارشد",
+ "Obaid Raza",
+ "عثمان خان شاہ"
]
},
"tog-underline": "ربط کی خط کشیدگی:",
@@ -31,11 +34,12 @@
"tog-numberheadings": "سرخیوں کو خودکار نمبر دیجئے",
"tog-showtoolbar": "تدوینی اوزاردان دکھائیے",
"tog-editondblclick": "طقین پر صفحات کی ترمیم کیجئے",
- "tog-editsectiononrightclick": "سطری عنوانات پر دایاں طق کے ذریعے سطری ترمیم کاری فعال بناؤ",
+ "tog-editsectiononrightclick": "سطری عنوانات پر دایاں طق (رائیٹ کلک) کے ذریعے سطری ترمیم کاری فعال بناؤ",
"tog-watchcreations": "میرے تخلیق کردہ صفحات اور میری زبر اثقال کردہ ملفات کو میری زیر نظر فہرست میں شامل کیا کیجئے",
"tog-watchdefault": "میرے تدوین شدہ صفحات اور ملفات کو میری زیر نظر فہرست میں شامل کیا کیجئے",
"tog-watchmoves": "میرے منتقل کردہ صفحات اور ملفات کو میری زیر نظر فہرست میں شامل کیا کیجئے",
"tog-watchdeletion": "میرے حذف کردہ صفحات اور ملفات کو میری زیر نظر فہرست میں شامل کیا کیجئے",
+ "tog-watchrollback": "میں جن صفحات کو استرجع کروں وہ میری زیر نظر فہرست میں شامل کیا کریں",
"tog-minordefault": "تمام ترمیمات کو ہمیشہ بطورِ معمولی ترمیم نشانزد کیا کرو",
"tog-previewontop": "تدوینی خانہ سے پہلے نمائش دکھاؤ",
"tog-previewonfirst": "پہلی ترمیم پر نمائش دکھاؤ",
@@ -139,15 +143,21 @@
"hidden-category-category": "پوشیدہ زمرہ جات",
"category-subcat-count": "{{PLURAL:$2|اِس زمرہ میں صرف درج ذیل ذیلی زمرہ ہے.|اِس زمرہ میں درج ذیل {{PLURAL:$1|ذیلی زمرہ|$1 ذیلی زمرہ جات}}, کل $2 میں سے.}}",
"category-subcat-count-limited": "اِس زمرہ میں درج ذیل {{PLURAL:$1|ذیلی زمرہ ہے|$1 ذیلی زمرہ جات ہیں}}.",
- "category-article-count": "{{PLURAL:$2|اس زمرہ میں صرف یہ درج ذیل صفحہ مشمول ہے۔|اس زمرہ کے کل $2 صفحات میں سے $1 {{PLURAL:$1|صفحہ|صفحات}} درج ذیل {{PLURAL:$1|ہے|ہیں}}۔",
+ "category-article-count": "{{PLURAL:$2|اس زمرہ میں صرف درج ذیل صفحہ شامل کیا گیا ہے۔|اس زمرہ کے کل $2 صفحات میں سے $1 {{PLURAL:$1|صفحہ|صفحات}} درج ذیل {{PLURAL:$1|ہے|ہیں}}۔",
"category-article-count-limited": "یہ درج ذیل {{PLURAL:$1|صفحہ|$1 صفحات}} اس زمرہ میں مشمول {{PLURAL:$1|ہے|ہیں}}۔",
+ "category-file-count": "{{PLURAL:$2|اس زمرہ میں صرف درج ذیل ملف شامل کی گئی ہے۔|اس زمرہ کی کل $2 ملفات میں سے $1 {{PLURAL:$1|ملف|ملفات}} درج ذیل {{PLURAL:$1|ہے|ہیں}}۔",
+ "category-file-count-limited": "یہ درج ذیل {{PLURAL:$1|صفحہ|$1 صفحات}} اس زمرہ میں شامل {{PLURAL:$1|ہے|ہیں}}۔",
"listingcontinuesabbrev": "۔جاری",
+ "index-category": "فہرست شدہ صفحات",
"noindex-category": "غیر مندرج صفحات",
+ "broken-file-category": "صفحات بمعہ شکستہ فائل روابط",
+ "categoryviewer-pagedlinks": "($1) ($2)",
"about": "تعارف",
"article": "صفحۂ مشمول",
"newwindow": "(نـئی ونـڈو میـں)",
"cancel": "منسوخ",
"moredotdotdot": "اور...",
+ "morenotlisted": "یہ فہرست مکمل نہیں ہے۔",
"mypage": "میرا صفحہ",
"mytalk": "میری گفتگو",
"anontalk": "اس IP کیلیے بات چیت",
@@ -163,6 +173,7 @@
"actions": "ایکشنز",
"namespaces": "جائے نام",
"variants": "متغیرات",
+ "navigation-heading": "قائمہ رہنمائی",
"errorpagetitle": "خطاء",
"returnto": "واپس $1۔",
"tagline": "{{SITENAME}} سے",
@@ -175,16 +186,21 @@
"history_short": "تاریخچہ",
"updatedmarker": "میری آخری آمد تک جدید",
"printableversion": "قابل طبع نسخہ",
- "permalink": "مستقل کڑی",
+ "permalink": "مستقل ربط",
"print": "طباعت",
"view": "منظر",
+ "view-foreign": "$1 پر دیکھیں",
"edit": "ترمیم",
+ "edit-local": "ترمیم مقامی وضاحت",
"create": "تخلیق",
+ "create-local": "ادخال مقامی وضاحت",
"editthispage": "اس صفحہ میں ترمیم کریں",
"create-this-page": "صفحہ ہٰذا تخلیق کیجئے",
"delete": "حذف",
"deletethispage": "یہ صفحہ حذف کریں",
+ "undeletethispage": "یہ صفحہ بحال کریں",
"undelete_short": "بحال {{PLURAL:$1|ایک ترمیم|$1 ترامیم}}",
+ "viewdeleted_short": "{{PLURAL:$1|ایک ترمیم حذف ہوچکی|$1 ترامیم حذف ہوچکیں}}",
"protect": "محفوظ",
"protect_change": "تبدیل کرو",
"protectthispage": "اس صفحےکومحفوظ کریں",
@@ -198,7 +214,7 @@
"articlepage": "مندرجاتی صفحہ دیکھیۓ",
"talk": "تبادلہٴ خیال",
"views": "خیالات",
- "toolbox": "اوزاردان",
+ "toolbox": "آلات",
"userpage": "صفحۂ صارف دیکھئے",
"projectpage": "صفحۂ منصوبہ دیکھئے",
"imagepage": "صفحۂ مسل دیکھئے",
@@ -210,6 +226,7 @@
"otherlanguages": "دیگر زبانوں میں",
"redirectedfrom": "($1 سے پلٹایا گیا)",
"redirectpagesub": "لوٹایا گیا صفحہ",
+ "redirectto": "لوٹایا گیا صفحہ:",
"lastmodifiedat": "آخری بار تدوین $2, $1 کو کی گئی۔",
"viewcount": "اِس صفحہ تک {{PLURAL:$1|ایک‌بار|$1 مرتبہ}} رسائی کی گئی",
"protectedpage": "محفوظ شدہ صفحہ",
@@ -217,10 +234,12 @@
"jumptonavigation": "رہنمائی",
"jumptosearch": "تلاش",
"view-pool-error": "معذرت کے ساتھ، تمام معیلات پر اِس وقت اِضافی بوجھ ہے.\nبہت زیادہ صارفین اِس وقت یہ صفحہ ملاحظہ کرنے کی کوشش کررہے ہیں.\nبرائے مہربانی! صفحہ دیکھنے کیلئے دوبارہ کوشش کرنے سے پہلے ذرا انتظار فرمالیجئے.\n\n$1",
+ "generic-pool-error": "ہم معذرت خواہ ہیں! معیلات (سرورز) پر اِس وقت اِضافی بوجھ ہے.\nصارفین کی کثیر تعداد اِس وقت یہی صفحہ ملاحظہ کرنے کی کوشش کررہی ہے.\nبرائے مہربانی!دوبارہ کوشش کرنے سے پہلے ذرا انتظار فرمائیے.",
"pool-errorunknown": "نامعلوم خطا",
+ "poolcounter-usage-error": "استعمال میں خامی: $1",
"aboutsite": "تعارف {{SITENAME}}",
- "aboutpage": "Project:تعارف",
- "copyright": "تمام مواد $1 کے تحت میسر ہے۔",
+ "aboutpage": "منصوبہ:تعارف",
+ "copyright": "تمام مواد $1 کے تحت میسر ہے، جب تک کوئی دوسری وجہ نا ہو۔",
"copyrightpage": "{{ns:project}}:حقوق تصانیف",
"currentevents": "حالیہ واقعات",
"currentevents-url": "Project:حالیہ واقعات",
@@ -243,6 +262,7 @@
"pagetitle-view-mainpage": "{{SITENAME}}",
"retrievedfrom": "‘‘$1’’ مستعادہ منجانب",
"youhavenewmessages": "آپکے لیۓ ایک $1 ہے۔ ($2)",
+ "newmessageslinkplural": "{{PLURAL:$1|نیا پیغام|999=نئے پیغاماتs}}",
"newmessagesdifflinkplural": "آخری {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
"youhavenewmessagesmulti": "ء$1 پر آپ کیلئے نئے پیغامات ہیں",
"editsection": "ترمیم",
@@ -254,7 +274,11 @@
"toc": "فہرست",
"showtoc": "دکھائیں",
"hidetoc": "چھپائیں",
+ "collapsible-collapse": "خاتمے",
"collapsible-expand": "توسیع",
+ "confirmable-confirm": "کیا {{GENDER:$1|آپ کو}} اس بات کا یقین ہے؟",
+ "confirmable-yes": "جی ہاں",
+ "confirmable-no": "جی نہیں",
"thisisdeleted": "دیکھیں یا بحال کریں $1؟",
"viewdeleted": "دیکھیں $1؟",
"restorelink": "{{PLURAL:$1|ایک ترمیم حذف ہوچکی|$1 ترامیم حذف ہوچکیں}}",
@@ -286,12 +310,18 @@
"nospecialpagetext": "<strong>آپ نے ایک ناقص خاص صفحہ کی درخواست کی ہے.</strong>\n\n{{درست خاص صفحات کی ایک فہرست [[Special:SpecialPages|{{int:specialpages}}]] پر دیکھی جاسکتی ہے}}.",
"error": "خطاء",
"databaseerror": "خطائے ڈیٹابیس",
+ "databaseerror-text": "ڈیٹا بیس کیوری میں خامی پیدا ہوگئی ہے.\nیہ سافٹ ویئر میں ایک مسئلے (بگ) کی نشاندہی کر سکتے ہیں.",
+ "databaseerror-textcl": "ڈیٹا بیس کیوری میں خامی پیدا ہوگئی ہے.",
+ "databaseerror-query": "کیوری: $1",
+ "databaseerror-function": "فنکشن: $ 1",
+ "databaseerror-error": "خرابی: $ 1",
"laggedslavemode": "انتباہ: ممکن ہے کہ صفحہ میں حالیہ بتاریخہ جات شامل نہ ہوں.\n\nWarning: Page may not contain recent updates.",
"readonly": "ڈیٹابیس مقفل ہے",
"enterlockreason": "قفل کیلئے کوئی وجہ درج کیجئے، بشمولِ تخمینہ کہ قفل کب کھولا جائے گا.",
"readonlytext": "ڈیٹابیس شاید معمول کی اصلاح کیلئے نئے اندراجات اور دوسری ترمیمات کیلئے مقفل ہے، جس کے بعد یہ عام حالت پر آجائے گا.\nمنتظم، جس نے قفل لگایا، یہ تفصیل فراہم کی ہے: $1",
"missing-article": "ڈیٹابیس نے کسی صفحے کا متن بنام \"$1\" $2 نہیں پایا جو اِسے پانا چاہئے تھا.\n\nیہ عموماً کسی صفحے کے تاریخی یا پرانے حذف شدہ ربط کی وجہ سے ہوسکتا ہے.\n\nاگر یہ وجہ نہیں، تو آپ نے مصنع‌لطیف میں کھٹمل پایا ہے.\nبرائے مہربانی، URL کی نشاندہی کرتے ہوئے کسی [[Special:ListUsers/sysop|منتظم]] کو اِس کا سندیس کیجئے.",
"missingarticle-rev": "(نظرثانی#: $1)",
+ "missingarticle-diff": "(فرق: $1، $2)",
"readonly_lag": "ڈیٹابیس خودکار طور پر مقفل ہوچکا ہے تاکہ ماتحت ڈیٹابیسی معیلات کا درجہ آقا کا ہوجائے.",
"internalerror": "خطائے اندرونی",
"internalerror_info": "خطائے اندرونی: $1",
@@ -299,6 +329,8 @@
"filerenameerror": "مسل \"$1\" کو \"$2\" میں بازنام نہیں کیا جاسکا.",
"filedeleteerror": "مسل \"$1\" کو حذف نہیں کیا جاسکا.",
"directorycreateerror": "رہنامچہ \"$1\" تخلیق نہیں کیا جاسکا.",
+ "directoryreadonlyerror": "ڈائریکٹری \"$1\" صرف پڑھنے کے لیے.",
+ "directorynotreadableerror": "ڈائریکٹری \"$1\" پڑھنے کے قابل نہیں.",
"filenotfound": "مسل \"$1\" ڈھونڈا نہ جاسکا.",
"unexpected": "غیرمتوقع قدر: \"$1\"=\"$2\"",
"formerror": "خطا: ورقہ بھیجا نہ جاسکا.",
@@ -307,16 +339,24 @@
"cannotdelete-title": "صفحہ ھذف نہیں کیا جا سکتا \"$1\"",
"badtitle": "خراب عنوان",
"badtitletext": "درخواست شدہ صفحہ کا عنوان ناقص، خالی، یا کوئی غلط ربط شدہ بین لسانی یا بین ویکی عنوان ہے.\nشاید اِس میں ایک یا زیادہ ایسے حروف موجود ہوں جو عنوانات میں استعمال نہیں ہوسکتے.",
- "perfcached": "ذیلی ڈیٹا ابطن شدہ ہے اور اِس کے پُرانے ہونے کا امکان ہے. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
- "perfcachedts": "ذیلی ڈیٹا ابطن شدہ ہے اور آخری بار اِس کی بتاریخیت $1 کو ہوئی. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+ "perfcached": "ذیلی ڈیٹا ابطن شدہ (cached) ہے اور اِس کے پُرانے ہونے کا امکان ہے. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
+ "perfcachedts": "ذیلی ڈیٹا ابطن شدہ ہے (cached) اور آخری بار اِس کی بتاریخیت $1 کو ہوئی. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
"querypage-no-updates": "اِس صفحہ کیلئے بتاریخات فی الحال ناقابل بنائی گئی ہیں.\nیہاں کا ڈیٹا ابھی تازہ نہیں کیا جائے گا.",
"viewsource": "مسودہ",
+ "viewsource-title": "$1 کا مسودہ دیکھیں",
+ "actionthrottled": "Action throttled",
"actionthrottledtext": "بطورِ ایک ضدسپم تدبیر، آپ کو مختصر وقت میں کئی بار یہ عمل بجا لانے سے محدود کیا گیا، اور آپ یہ حد پار کرچکے ہیں.\nبراہِ کرم، کچھ منٹ بعد کوشش کیجئے.",
"protectedpagetext": "اس صفحہ کو تدوین سے محفوظ رکھنے کیلیے مقفل کر دیا گیا ہے۔",
"viewsourcetext": "آپ صرف مسودہ دیکھ سکتے ہیں اور اسکی نقل اتار سکتے ہیں:",
- "protectedinterface": "یہ صفحہ مصنع‌لطیف کیلئے سطح‌البینی متن فراہم کرتا ہے، اور ناجائزاستعمال کے سدِباب کیلئے اِسے مقفل کیا گیا ہے.",
- "editinginterface": "'''انتباہ: ''' آپ ایک ایسا صفحہ تدوین کر رہے ہیں جو مصنع‌لطیف کیلئے سطح‌البینی متن فراہم کرتا ہے۔ اس صفحہ میں کی جانے والی ترمیم، دیگر صارفین کیلئے سطح‌البین کو تبدیل کردے گی۔\nبراہِ کرم، ترجمہ کیلئے [//translatewiki.net/wiki/Main_Page?setlang=en '''ٹرانسلیٹ ویکی.نیٹ'''] (میڈیاویکی مقامیانی منصوبہ) استعمال کیجئے.",
+ "viewyourtext": "آپ اس مواد کو دیکھ سکتے ہیں اور اٹھا (کاپی) سکتے ہیں <strong>آپ کی ترامیم </strong>اس صفحہ پر:",
+ "protectedinterface": "یہ صفحہ سوفٹ وئیر کے لیے انٹرفیس متن فراہم کرتا ہے، اور ناجائزاستعمال کے سدِباب کے لیے اِسے مقفل کیا گیا ہے.",
+ "editinginterface": "'''انتباہ: ''' آپ ایک ایسا صفحہ تدوین کر رہے ہیں جو سوفٹ ویئر کیلئے انٹرفیس متن فراہم کرتا ہے۔ اس صفحہ میں کی جانے والی ترمیم، دیگر صارفین کے لیے انٹرفیس کو تبدیل کردے گی۔\nبراہِ کرم، ترجمہ کے لیے [//translatewiki.net/wiki/Main_Page?setlang=en '''ٹرانسلیٹ ویکی.نیٹ'''] (میڈیا ویکی دارالترجمہ) استعمال کریں.",
+ "translateinterface": "تمام ویکیوں میں تبدیلی یا شامل کرنے کے لیے، اسے استعمال کریں [//translatewiki.net/ translatewiki.net]، میڈیا ویکی دارالترجمہ.",
"namespaceprotected": "آپ کو '''$1''' فضائے نام میں صفحات تدوین کرنے کی اِجازت نہیں ہے.",
+ "mycustomcssprotected": "آپ اس سی ایس ایس (CSS) صفحہ میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
+ "mycustomjsprotected": "آپ اس جاوا اسکپرٹ (JavaScript) صفحہ میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
+ "myprivateinfoprotected": "آپ ان ذاتی معلوات (private information) میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
+ "mypreferencesprotected": "آپ اپنی ان ترجیحات (preferences) میں ترمیم کرنے کا اختیار نہیں رکھتے۔",
"ns-specialprotected": "خاص صفحات کی تدوین نہیں کی جاسکتی.",
"titleprotected": "اس عنوان کو [[User:$1|$1]] نے تخلیق سے محفوظ کیا ہے.\nوجہ یہ بتائی گئی ہے: \"''$2''\"",
"exception-nologin": "غیر داخل نوشتہ",
@@ -324,13 +364,20 @@
"virus-scanfailed": "تفریس ناکام (رمز $1)",
"virus-unknownscanner": "انجان ضدوائرس:",
"logouttext": "'''اب آپ خارج ہوچکے ہیں'''\n\nآپ گمنام طور پر {{SITENAME}} کا استعمال جاری رکھ سکتے ہیں، یا دوبارہ اسی نام یا مختلف نام سے <span class='plainlinks'>[$1 دوبارہ داخلِ نوشتہ]</span> بھی ہو سکتے ہیں۔ یہ یاد آوری کرلیجیۓ کہ کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے ، جب تک آپ اپنے متصفح کا ابطن صاف نہ کردیں۔",
+ "welcomeuser": "خوش آمدید، $1!",
"yourname": "اسمِ رکنیت",
+ "userlogin-yourname": "صارف نام",
+ "userlogin-yourname-ph": "اپنا صارف نام درج کریں",
+ "createacct-another-username-ph": "صارف نام درج کریں",
"yourpassword": "کلمۂ شناخت",
+ "userlogin-yourpassword": "کلمۂ شناخت",
+ "userlogin-yourpassword-ph": "اپنا کلمہ شناخت دیں",
"createacct-yourpassword-ph": "ایک پاس ورڈ داخل کریں",
"yourpasswordagain": "کلمۂ شناخت دوبارہ لکھیں",
"createacct-yourpasswordagain": "کلمۂ اجازت تصدیق کریں",
"createacct-yourpasswordagain-ph": "پاس ورڈ پھر داخل کریں",
"remembermypassword": "اِس متصفح پر میرے داخلِ نوشتگی معلومات یاد رکھو (زیادہ سے زیادہ $1 {{PLURAL:$1|دِن|ایام}} کیلئے)",
+ "userlogin-remembermypassword": "مجھے داخل رکھے",
"yourdomainname": "آپکا ڈومین",
"password-change-forbidden": "آپ اس ویکی پر پارلفظ (پاس روڈ) تبدیل نہیں کر سکتے",
"externaldberror": "یا تو توثیقی ڈیٹابیس میں خطا واقع ہوئی اور یا آپ کو بیرونی کھاتہ بتاریخ کرنے کی اِجازت نہیں ہے.",
@@ -341,12 +388,15 @@
"logout": "اخراج",
"userlogout": "خارج ہوجائیں",
"notloggedin": "داخلہ نہیں ہوا",
+ "userlogin-noaccount": "کیا آپ نے کھاتہ نہیں بنایا ہوا؟",
+ "userlogin-joinproject": "منسلک ہو {{SITENAME}} سے",
"nologin": "کیا آپ نے کھاتہ نہیں بنایا ہوا؟ '''$1'''۔",
"nologinlink": "کھاتا بنائیں",
"createaccount": "کھاتہ کھولیں",
"gotaccount": "پہلے سے کھاتہ بنا ہوا ہے? '''$1'''.",
"gotaccountlink": "داخل ہوجائیے",
"userlogin-resetlink": "داخلِ نوشتہ ہونے کی تفاصیل بھول گئے ہیں؟",
+ "userlogin-resetpassword-link": "کلمہ شناخت بھول گئے؟",
"createacct-emailrequired": "ای میل پتہ",
"createacct-emailoptional": "ای میل ایڈریس (اختیاری)",
"createacct-email-ph": "اپنا برقی پتہ لکھیں",
@@ -356,9 +406,10 @@
"createacct-reason": "وجہ",
"createacct-captcha": "حفاظتی تدبیر",
"createacct-imgcaptcha-ph": "آپ اوپر دیکھ متن داخل کریں",
+ "createacct-submit": "آپ کا کھاتا بنائیں",
"createacct-benefit-heading": "{{SITENAME}} آپ جیسے لوگوں کی طرف سے بنایا گیا ہے ۔",
"createacct-benefit-body1": "ترمیم",
- "createacct-benefit-body2": "صفحات",
+ "createacct-benefit-body2": "$1 {{PLURAL:$1|صفحہ|صفحات}}",
"createacct-benefit-body3": "شرکت کرنے والے اس ماہ کے",
"badretype": "درج شدہ کلمۂ شناخت اصل سے مطابقت نہیں رکھتا۔",
"userexists": "داخل کردہ اسم صارف پہلے سے مستعمل ہے۔\nبراہِ کرم! کوئی دوسرا اسم منتخب کیجئے۔",
@@ -400,6 +451,10 @@
"createaccount-text": "کسی نے {{SITENAME}} ($4) پر \"$2\" کے نام سے اور \"$3\" پارلفظ کے ساتھ آپ کا برقی پتہ استعمال کرتے ہوئے کھاتہ بنایا ہے.\nآپ کو چاہئے کہ ابھی داخلِ نوشتہ ہوکر اپنا پارلفظ تبدیل کردیں.\n\nاگر یہ کھاتہ غلطی سے بنا تھا تو آپ یہ پیغام نظرانداز کرسکتے ہیں.",
"login-throttled": "آپ نے داخلِ نوشتہ ہونے کیلئے بہت زیادہ حالیہ کوششیں کیں.\nدوبارہ کوشش کرنے سے پہلے انتظار فرمائیے.",
"loginlanguagelabel": "زبان: $1",
+ "pt-login": "داخل ہوجائیے",
+ "pt-login-button": "داخل ہو",
+ "pt-createaccount": "کھاتا بنائیں",
+ "pt-userlogout": "خارج ہوجائیں",
"user-mail-no-addy": "برقی ڈاک بھیجنے کی کوشش بغیر برقی ڈاک پتہ",
"changepassword": "کلمۂ شناخت تبدیل کریں",
"resetpass_announce": "آپ ایک برقی ارسال کردہ عارضی رمز کے ساتھ داخل ہوئے ہیں.\nداخلِ نوشتہ کے عمل کو مکمل کرنے کیلئے آپ کو یہاں نیا پارلفظ متعین کرنا ہوگا:",
@@ -423,7 +478,6 @@
"changeemail-newemail": "نیا برقی ڈاک پتہ:",
"changeemail-none": "(کوئی نہیں)",
"changeemail-submit": "برقی ڈاک تبدیل کریں",
- "changeemail-cancel": "منسوخ",
"bold_sample": "دبیز متن",
"bold_tip": "دبیز متن",
"italic_sample": "ترچھا متن",
@@ -476,6 +530,7 @@
"previewnote": "'''یاد رکھیں، یہ صرف نمائش ہے ۔آپ کی ترامیم ابھی محفوظ نہیں کی گئیں۔'''",
"session_fail_preview": "معاف کیجئے! نشست کے مواد میں خامی کی وجہ سے آپکی ترمیم پر عمل نہیں کیا جاسکا.\nبرائے مہربانی دوبارہ کوشش کیجئے.\nاگر آپکو پھر بھی مشکل پیش آرہی ہے تو [[Special:UserLogout|خارجِ نوشتہ]] ہوکر واپس داخلِ نوشتہ ہوجایئے.",
"editing": "آپ \"$1\" میں ترمیم کر رہے ہیں۔",
+ "creating": "زیر تخلیق $1",
"editingsection": "$1 کے قطعہ کی تدوین",
"editingcomment": "زیرترمیم $1 (تبصرہ)",
"editconflict": "تنازعہ ترمیم:$1",
@@ -533,7 +588,8 @@
"history-feed-description": "ویکی پر اِس صفحہ کا تاریخچۂ نظرثانی",
"history-feed-item-nocomment": "بہ $2 $1",
"history-feed-empty": "درخواست شدہ صفحہ موجود نہیں.\nیا تو یہ ویکی سے حذف کیا گیا ہے اور یا اِس کا نام تبدیل کردیا گیا ہے.\nآپ متعلقہ نئے صفحات کیلئے [[Special:Search|ویکی پر تلاش]] کرسکتے ہیں.",
- "rev-deleted-comment": "(تبصرہ ہٹایا گیا ہے)",
+ "rev-deleted-comment": "(تبصرہ حذف کی گيا ہے)",
+ "rev-deleted-user": "(صارف نام حذف کیا گيا ہے)",
"rev-delundel": "دکھاؤ/چھپاؤ",
"rev-showdeleted": "دکھاؤ",
"revisiondelete": "نظرثانی حذف کریں/واپس لائیں",
@@ -548,8 +604,8 @@
"revdelete-hide-comment": "ترمیمی تبصرہ چھپاؤ",
"revdelete-hide-user": "ترمیم کار کا اسمِ صارف / آئی.پی پتہ چُھپاؤ",
"revdelete-radio-same": "(تبدیل مت کرو)",
- "revdelete-radio-set": "ہاں",
- "revdelete-radio-unset": "نہیں",
+ "revdelete-radio-set": "پوشیدہ",
+ "revdelete-radio-unset": "ظاہر",
"revdelete-unsuppress": "بحال شدہ نظرثانیوں پر پابندیاں ہٹاؤ",
"revdelete-log": "وجہ",
"revdelete-success": "'''رؤیتِ نظرثانی کی تجدید کامیابی سے ہوئی.'''",
@@ -592,7 +648,7 @@
"shown-title": "فی صفحہ $1 {{PLURAL:$1|نتیجہ|نتائج}} دِکھاؤ",
"viewprevnext": "دیکھیں($1 {{int:pipe-separator}} $2) ($3)۔",
"searchmenu-exists": "'''اِس ویکی پر \"[[:$1]]\" نامی ایک صفحہ موجود ہے'''",
- "searchmenu-new": "'''اِس ویکی پر صفحہ \"[[:$1]]\" تخلیق کیجئے!'''",
+ "searchmenu-new": "<strong>صفحہ \"[[:$1]]\" کو اس ویکی پر تخلیق کریں</strong> {{PLURAL:$2|0=|وہ صفحہ بھی دیکھے جو ٓپ کے تلاش میں پایا گیا|ان نتائج کو بھی دیکھے جو پائے گئے}}",
"searchprofile-articles": "مشمولاتی صفحات",
"searchprofile-images": "کثیرالوسیط",
"searchprofile-everything": "سب کچھ",
@@ -631,7 +687,7 @@
"prefs-rc": "حالیہ تبدیلیاں",
"prefs-watchlist": "زیرِنظر فہرست",
"prefs-watchlist-days": "زیرِنظر فہرست میں نظر آنے والے ایام:",
- "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+ "prefs-watchlist-days-max": "زیادا سے زیادہ $1 {{PLURAL:$1|یوم|ایام}}",
"prefs-watchlist-edits": "عریض زیرِنظرفہرست میں نظر آنے والی تبدیلیوں کی زیادہ سے زیادہ تعداد:",
"prefs-watchlist-edits-max": "(زیادہ سے زیادہ تعداد: 1000)",
"prefs-misc": "دیگر",
@@ -639,7 +695,7 @@
"prefs-email": "اختیاراتِ برقی ڈاک",
"prefs-rendering": "ظاہریت",
"saveprefs": "محفوظ",
- "restoreprefs": "تمام بےنقص ترتیبات بحال کیجئے",
+ "restoreprefs": "تمام بےنقص ترتیبات بحال کریں",
"prefs-editing": "تدوین",
"rows": "صفیں:",
"columns": "قطاریں:",
@@ -663,7 +719,7 @@
"timezoneregion-indian": "بحر ہند",
"timezoneregion-pacific": "بحر الکاہل",
"allowemail": "دوسرے صارفین کو برقی خظ لکھنے کا اختیار دیں",
- "prefs-searchoptions": "اختیاراتِ تلاش",
+ "prefs-searchoptions": "تلاش",
"prefs-namespaces": "جائے نام",
"default": "طے شدہ",
"prefs-files": "مسلات",
@@ -671,7 +727,7 @@
"prefs-custom-js": "خودساختہ JS",
"prefs-emailconfirm-label": "برقی پتہ کی تصدیق:",
"youremail": "٭ برقی خط",
- "username": "اسم صارف",
+ "username": "صارف:",
"prefs-memberingroups": "{{PLURAL:$1|گروہ|گروہوں}} کا رُکن:",
"prefs-registration": "وقتِ اندراج:",
"yourrealname": "* اصلی نام",
@@ -686,7 +742,7 @@
"gender-female": "عورت",
"prefs-help-gender": "اختیاری: مصنع‌لطیف کی طرف سے صحیح‌الجنس تخاطب کیلئے استعمال ہوتا ہے. یہ معلومات عام ہوگی.",
"email": "برقی خط",
- "prefs-help-realname": "حقیقی نام اختیاری ہے.\nاگر آپ اِسے مہیّا کرتے ہیں، تو اِسے آپ کے کام کیلئے آپ کو انتساب دینے کیلئے استعمال کیا جائے گا.",
+ "prefs-help-realname": "حقیقی نام اختیاری ہے۔\nاگر آپ اسے مہیّا کرتے ہیں، تو اسے آپ کے کام کیلئے آپ کو انتساب دینے کیلئے استعمال کیا جائے گا۔",
"prefs-help-email": "برقی ڈاک کا پتہ اختیاری ہے، لیکن یہ اُس وقت مفید ثابت ہوسکتا ہے جب آپ اپنا پارلفظ بھول گئے ہوں.",
"prefs-help-email-others": "آپ یہ بھی منتخب کرسکتے ہیں کہ دوسرے صارفین آپ کے تبادلۂ خیال صفحہ پر ایک ربط کے ذریعے آپ کو برقی ڈاک بھیجیں.\nجب دوسرے صارفین آپ سے رابطہ کرتے ہیں تو آپ کا برقی ڈاک کا پتہ افشا نہیں کیا جاتا۔",
"prefs-help-email-required": "برقی ڈاک پتہ چاہئے.",
@@ -704,7 +760,7 @@
"userrights-lookup-user": "گروہائے صارف کا انتظام",
"userrights-user-editname": "کوئی اسم‌صارف داخل کیجئے:",
"editusergroup": "ترمیم گروہائے صارف",
- "editinguser": "تبدیلئ حقوق برائے صارف '''[[صارف:$1|$1]]''' $2",
+ "editinguser": "تبدیلئ اختیارات برائے صارف '''[[صارف:$1|$1]]''' $2",
"userrights-editusergroup": "ترمیم گروہائے صارف",
"saveusergroups": "گروہائے صارف محفوظ",
"userrights-groupsmember": "رکنِ:",
@@ -723,7 +779,7 @@
"group-suppress": "نگران",
"group-all": "(تمام)",
"group-user-member": "صارف",
- "group-autoconfirmed-member": "خودتصدیق شدہ صارف",
+ "group-autoconfirmed-member": "خودتوثیق شدہ صارف",
"group-bot-member": "خودکار صارف",
"group-sysop-member": "منتظم",
"group-bureaucrat-member": "{{GENDER:$1|مامور اداری}}",
@@ -732,7 +788,9 @@
"grouppage-autoconfirmed": "{{ns:project}}:خود توثیق شدہ صارف",
"grouppage-bot": "{{ns:project}}:روبہ جات",
"grouppage-sysop": "{{ns:project}}:منتظمین",
+ "grouppage-bureaucrat": "بیورو کریٹ",
"right-upload": "ملفات زبراثقال (اپ لوڈ) کریں",
+ "right-writeapi": "اے پی آئی لکھائی کا استعمال",
"right-delete": "صفحات حذف کریں",
"right-sendemail": "دیگر صارفین کو برقی ڈاک بھیجیں",
"newuserlogpage": "نوشتۂ آمد صارف",
@@ -741,6 +799,7 @@
"rightslogtext": "یہ صارفی اختیارات میں تبدیلیوں کا نوشتہ ہے۔",
"action-edit": "اس صفحہ میں ترمیم کریں",
"nchanges": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
+ "enhancedrc-history": "تاریخچہ",
"recentchanges": "حالیہ تبدیلیاں",
"recentchanges-legend": "اِختیاراتِ حالیہ تبدیلیاں",
"recentchanges-summary": "اس صفحے پر ویکی میں ہونے والی تازہ تریں تبدیلیوں کا مشاہدہ کیجیۓ۔",
@@ -749,14 +808,27 @@
"recentchanges-label-minor": "یہ ایک معمولی ترمیم ہے",
"recentchanges-label-bot": "یہ ایک روبالہ سے سرانجام شدہ ترمیم ہے",
"recentchanges-label-unpatrolled": "اس ترمیم کی اب تک مراجعت نہیں کی گئی",
+ "recentchanges-label-plusminus": "صفحہ کا حجم تبدیل شدہ بلحاظ بائٹ مقدار",
"rcnotefrom": "ذیل میں '''$2''' سے کی گئی تبدیلیاں ہیں ('''$1''' تبدیلیاں دکھائی جارہی ہیں)۔",
"rclistfrom": "$3 $2 سےنئی تبدیلیاں دکھانا شروع کریں",
"rcshowhideminor": "معمولی ترامیم $1",
+ "rcshowhideminor-show": "دکھائیں",
+ "rcshowhideminor-hide": "چھپائیں",
"rcshowhidebots": "خودکار صارف $1",
+ "rcshowhidebots-show": "دکھائیں",
+ "rcshowhidebots-hide": "چھپائیں",
"rcshowhideliu": "داخل شدہ صارف $1",
+ "rcshowhideliu-show": "دکھاؤ",
+ "rcshowhideliu-hide": "چھپائیں",
"rcshowhideanons": "گمنام صارف $1",
+ "rcshowhideanons-show": "دکھاؤ",
+ "rcshowhideanons-hide": "چھپائیں",
"rcshowhidepatr": "$1 مراجعت شدہ ترامیم",
+ "rcshowhidepatr-show": "دکھاؤ",
+ "rcshowhidepatr-hide": "چھپائيں",
"rcshowhidemine": "ذاتی ترامیم $1",
+ "rcshowhidemine-show": "دکھاؤ",
+ "rcshowhidemine-hide": "چھپائیں",
"rclinks": "آخری $2 روز میں ہونے والی $1 تبدیلیوں کا مشاہدہ کریں<br />$3",
"diff": "فرق",
"hist": "تاریخچہ",
@@ -765,13 +837,14 @@
"minoreditletter": "م",
"newpageletter": "نیا ..",
"boteditletter": " خودکار",
+ "rc_categories_any": "کوئی بھی",
"rc-enhanced-expand": "تفصیلات دِکھائیں (JavaScript درکار)",
"rc-enhanced-hide": "تفصیلات چھپائیے",
"recentchangeslinked": "متعلقہ تبدیلیاں",
"recentchangeslinked-feed": "متعلقہ تبدیلیاں",
"recentchangeslinked-toolbox": "متعلقہ تبدیلیاں",
"recentchangeslinked-title": "\"$1\" سے متعلقہ تبدیلیاں",
- "recentchangeslinked-summary": "یہ ان تبدیلیوں کی فہرست ہے جو حال ہی میں کسی مخصوص صفحہ سے مربوط صفحات (یا مخصوص زمرہ کے اراکین) میں کی گئی ہیںـ \n\n[[SpecialWatchlist | آپ کی زیر نظر فہرست]] میں یہ صفحات متجل (bold) نظر آئیں گےـ",
+ "recentchangeslinked-summary": "یہ ان تبدیلیوں کی فہرست ہے جو حال ہی میں کسی مخصوص صفحہ سے مربوط صفحات (یا مخصوص زمرہ کے اراکین) میں کی گئی ہیںـ \n\n[[Special:Watchlist | آپ کی زیر نظر فہرست]] میں یہ صفحات متجل (bold) نظر آئیں گےـ",
"recentchangeslinked-page": "صفحۂ منصوبہ دیکھئے",
"upload": "فائل اثقال",
"uploadbtn": "زبراثقال ملف (اپ لوڈ فائل)",
@@ -792,31 +865,64 @@
"savefile": "فائل محفوظ کریں",
"sourcefilename": "اسم ملف (فائل) کا منبع:",
"destfilename": "تعین شدہ اسم ملف:",
- "watchthisupload": "یہ صفحہ زیر نظر کیجیۓ",
+ "watchthisupload": "یہ صفحہ زیر نظر کریں",
"license": "اجازہ:",
"license-header": "اجازہ کاری",
+ "imgfile": "ملف",
"listfiles": "فہرست فائل",
- "file-anchor-link": "مسل",
+ "listfiles_date": "تاریخ",
+ "listfiles_name": "نام",
+ "listfiles_user": "صارف",
+ "listfiles_size": "حجم",
+ "listfiles_description": "تفصیل",
+ "listfiles_count": "ورژن",
+ "listfiles-latestversion": "موجودہ ورژن",
+ "listfiles-latestversion-yes": "ہاں",
+ "listfiles-latestversion-no": "نہیں",
+ "file-anchor-link": "ملف",
"filehist": "ملف کی تاریخ",
"filehist-help": "یہ دیکھنے کیلئے کہ کسی خاص وقت پر ملف کس طرح ظاہر ہوتا تھا اُس تاریخ یا وقت پر طق کیجئے۔",
+ "filehist-deleteall": "سب حذف",
+ "filehist-deleteone": "حذف",
"filehist-revert": "رجوع",
"filehist-current": "حالیہ",
"filehist-datetime": "تاریخ/وقت",
"filehist-thumb": "اظفورہ",
"filehist-user": "صارف",
"filehist-dimensions": "ابعاد",
+ "filehist-filesize": "تصویر کا حجم",
"filehist-comment": "تبصرہ",
"imagelinks": "ملف کا استعمال",
"linkstoimage": "اِس ملف کے ساتھ درج ذیل {{PLURAL:$1|صفحہ مربوط ہے|$1 صفحات مربوط ہیں}}",
"nolinkstoimage": "ایسے کوئی صفحات نہیں جو اس ملف (فائل) سے رابطہ رکھتے ہوں۔",
+ "upload-disallowed-here": "آپ اوپر چھڑا کر اس ملف کو نہیں لکھ سکتے۔",
+ "filedelete-comment": "وجہ:",
+ "filedelete-submit": "حذف کریں",
+ "filedelete-success": " (\"اقدام مکمل ہوا\")۔",
+ "filedelete-success-old": " (\"اقدام مکمل ہوا\")",
"download": "زیراثقال (ڈاؤن لوڈ)",
"listredirects": "فہرست متبادل ربط",
"unusedtemplates": "غیر استعمال شدہ سانچے",
+ "unusedtemplateswlh": "دیگر روابط",
"randompage": "بےترتیب صفحہ",
+ "randomincategory-category": "زمرہ:",
"statistics": "اعداد و شمار",
+ "statistics-header-pages": "احصائے صفحات",
+ "statistics-header-edits": "احصائے تدوین",
"statistics-header-users": "ارکان کے اعداد و شمار",
+ "statistics-header-hooks": "احصائے دیگر",
+ "statistics-articles": "مندرج صفحات",
+ "statistics-pages": "صفحات",
+ "statistics-pages-desc": "(ویکی اقتباسات کے کل صفحات، بشمولِ تبادلۂ خیال، رجوع مکررات وغیرہ۔)",
+ "statistics-files": "زبراثقال شدہ ملفات",
+ "statistics-edits": "ویکی اقتباسات کے آغاز سے کل صفحاتی ترمیم",
+ "statistics-edits-average": "فی صفحہ اوسط ترامیم",
+ "statistics-users": "مندرج [[خاص:فہرست صارفین، صارف فہرست|صارفین]]",
+ "statistics-users-active": "متحرک صارفین",
"doubleredirects": "دوہرے متبادل ربط",
"brokenredirects": "نامکمل متبادل ربط",
+ "brokenredirects-edit": "ترمیم کریں",
+ "brokenredirects-delete": "حذف",
"nbytes": "$1 {{PLURAL:$1|لکمہ|لکمہ جات}}",
"ncategories": "{{PLURAL:$1|زمرہ|زمرہ جات}} $1",
"nmembers": "{{PLURAL:$1|رکن|اراکین}}",
@@ -827,9 +933,10 @@
"uncategorizedimages": "بے زمرہ تصاویر",
"unusedcategories": "غیر استعمال شدہ زمرہ جات",
"unusedimages": "غیر استعمال شدہ فائلیں",
- "popularpages": "مقبول صفحات",
"wantedcategories": "طلب شدہ زمرہ جات",
"wantedpages": "درخواست شدہ مضامین",
+ "wantedfiles": "مطلوب تصاویر",
+ "wantedtemplates": "مطلوب سانچے",
"mostlinked": "سب سے زیادہ ربط والے مضامین",
"mostlinkedcategories": "سب سے زیادہ ربط والے زمرہ جات",
"mostcategories": "سب سے زیادہ زمرہ جات والے مضامین",
@@ -839,17 +946,24 @@
"shortpages": "چھوٹے صفحات",
"longpages": "طویل ترین صفحات",
"deadendpages": "مردہ صفحات",
+ "protectedpages": "محفوظ شدہ صفحات",
+ "protectedpages-reason": "وجہ",
+ "protectedpages-unknown-timestamp": "نامعلوم",
+ "protectedpages-unknown-performer": "نامعلوم صارف",
"listusers": "فہرست ارکان",
"usercreated": "{{GENDER:$3|تخلیق شدہ}} بتاریخ $1 بوقت $2",
"newpages": "جدید صفحات",
+ "newpages-username": "صارف نام:",
"ancientpages": "قدیم ترین صفحات",
"move": "منتقـل",
"movethispage": "یہ صفحہ منتقل کیجئے",
"pager-newer-n": "{{PLURAL:$1|جدید 1|جدید $1}}",
"pager-older-n": "{{PLURAL:$1|پُرانا 1|پُرانے $1}}",
+ "apihelp": "معاونت اے پی آئی",
+ "apihelp-no-such-module": "ماڈیول \"$1\" نہیں ملا",
"booksources": "کتابی وسائل",
"booksources-search-legend": "تلاش برائے مآخذاتِ کتاب",
- "booksources-go": "چلو",
+ "booksources-search": "تلاش",
"specialloguserlabel": "صارف:",
"speciallogtitlelabel": "عنوان:",
"log": "نوشتہ جات",
@@ -862,14 +976,27 @@
"allpagesprefix": "مطلوبہ سابقہ سے شروع ہونے والے صفحات کی نمائش:",
"categories": "زمرہ",
"categoriespagetext": "مندرجہ ذیل زمرہ جات اس وکی میں موجود ہیں۔\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+ "linksearch-ok": "تلاش",
"linksearch-line": "$1 مربوط ہے $2 سے",
+ "listusers-submit": "دکھاؤ",
+ "listusers-noresult": "یہ صارف نہیں ملا",
+ "activeusers": "متحرک صارفین کی فہرست",
+ "activeusers-hidebots": "پوشیدہ خود کار صارف",
+ "activeusers-hidesysops": "پوشیدہ منتظمین",
+ "activeusers-noresult": "یہ صارف نہیں مل سکا",
+ "listgrouprights-rights": "اختیارات",
"listgrouprights-members": "(اراکین کی فہرست)",
+ "listgrouprights-namespaceprotection-namespace": "فضائے نام",
"mailnologintext": "دیگر ارکان کو برقی خط ارسال کرنے کیلیۓ لازم ہے کہ آپ [[Special:UserLogin|داخل شدہ]] حالت میں ہوں اور آپ کی [[Special:Preferences|ترجیحات]] ایک درست برقی خط کا پتا درج ہو۔",
"emailuser": "صارف کو برقی خط لکھیں",
+ "emailuser-title-notarget": "ای میل صارف",
+ "emailpage": "صارف کو برقی خط لکھیں",
"defemailsubject": "{{SITENAME}} سے برقی خط",
- "noemailtext": "اس صارف نے برقی خط کے لیے کوئی پتہ فراہم نہیں کیا، یا یہ چاہتا ہے کا اس سے کوئی صارف رابطہ نہ کرے۔",
- "emailsubject": "عنوان",
+ "noemailtext": "اس صارف نے برقی خط کے لیے پتہ فراہم نہیں کیا، یا یہ چاہتا ہے کا اس سے کوئی صارف رابطہ نہ کرے۔",
+ "emailusername": "صارف نام:",
+ "emailsubject": "موضوع:",
"emailmessage": "پیغام:",
+ "emailsend": "بھیجیں",
"watchlist": "میری زیرنظرفہرست",
"mywatchlist": "میری زیرنظرفہرست",
"watchlistfor2": "براۓ $1 ($2)",
@@ -880,7 +1007,7 @@
"unwatch": "زیرنظرمنسوخ",
"watchlist-details": "آپ کی زیرِنظرفہرست پر {{PLURAL:$1|$1 صفحہ ہے|$1 صفحات ہیں}}، اِس میں تبادلۂ خیال صفحات کی تعداد شامل نہیں.",
"wlnote": "نیچےآخری $1 تبدیلیاں ہیں جو کے پیچھلے <b>$2</b> گھنٹوں میں کی گئیں۔",
- "wlshowlast": "دکھائیں آخری $1 گھنٹے $2 دن $3",
+ "wlshowlast": "دکھائیں آخری $1 گھنٹے $2 دن",
"watchlist-options": "اختیارات برائے زیرِنظرفہرست",
"created": "بنا دیا گیا",
"changed": "تبدیل کردیاگیا",
@@ -900,7 +1027,6 @@
"deleteotherreason": "دوسری/اِضافی وجہ:",
"deletereasonotherlist": "دوسری وجہ",
"rollback": "ترمیمات سابقہ حالت پرواپس",
- "rollback_short": "واپس سابقہ حالت",
"rollbacklink": "واپس سابقہ حالت",
"rollbackfailed": "سابقہ حالت پر واپسی ناکام",
"cantrollback": "تدوین ثانی کا اعادہ نہیں کیا جاسکتا؛ کیونکہ اس میں آخری بار حصہ لینے والا ہی اس صفحہ کا واحد کاتب ہے۔",
@@ -923,10 +1049,11 @@
"undeleteviewlink": "دکھاؤ",
"undeleteinvert": "انتخاب بالعکس",
"undeletecomment": "وجہ:",
- "namespace": "جاۓ نام:",
+ "namespace": "فضائے نام:",
"invert": "انتخاب بالعکس",
+ "namespace_association": "متعلقہ فضا",
"blanknamespace": "(مرکز)",
- "contributions": "صارف کا حصہ",
+ "contributions": "{{جنس:$1|صارف}} شراکتیں",
"contributions-title": "مساہماتِ صارف برائے $1",
"mycontris": "میرا حصہ",
"contribsub2": "براۓ $1 ($2)",
@@ -957,7 +1084,8 @@
"whatlinkshere-hidelinks": "روابط $1",
"whatlinkshere-hideimages": "روابطِ تصاویر $1",
"whatlinkshere-filters": "فلٹرذ",
- "blockip": "داخلہ ممنوع براۓ صارف",
+ "blockip": "داخلہ ممنوع برائے صارف",
+ "blockip-legend": "ممنوع کردہ صارفین",
"ipbreason": "وجہ:",
"ipbsubmit": "اس صارف کا داخلہ ممنوع کریں",
"ipboptions": "2 گھنٹے:2 hours,1 یوم:1 day,3 ایام:3 days,1 ہفتہ:1 week,2 ہفتے:2 weeks,1 مہینہ:1 month,3 مہینے:3 months,6 مہینے:6 months,1 سال:1 year,لامحدود:infinite",
@@ -1001,6 +1129,7 @@
"tooltip-pt-mycontris": "آپ کی شراکت کی فہرست",
"tooltip-pt-login": "آپ کیلئے داخلِ نوشتہ ہونا اچھا ہے؛ تاہم، یہ ضروری نہیں",
"tooltip-pt-logout": "خارجِ نوشتہ ہوجائیں",
+ "tooltip-pt-createaccount": "آپ کو مدعو کیا جاتا ہے کہ کھاتہ بنائیں۔تاہم کھاتہ بنانا لازم نہیں۔",
"tooltip-ca-talk": "مضمون بارے تبادلۂ خیال",
"tooltip-ca-edit": "آپ اس صفحہ میں ترمیم کرسکتے ہیں.\nبرائے مہربانی! اپنی ترمیمات محفوظ کرنے سے پہلے نمائش کا بٹن استعمال کیجئے",
"tooltip-ca-addsection": "نیا قطعہ شروع کیجئے",
@@ -1016,7 +1145,7 @@
"tooltip-search-fulltext": "اس متن کیلئے صفحات تلاش کریں",
"tooltip-p-logo": "سرورق پر جائیے",
"tooltip-n-mainpage": "اصل صفحہ پر جائیے",
- "tooltip-n-mainpage-description": "اصل صفحہ پر جائیے",
+ "tooltip-n-mainpage-description": "صفحہ اول پر جائیے",
"tooltip-n-portal": "منصوبہ کے متعلق، آپ کیا کرسکتے ہیں، چیزیں کہاں ڈھونڈنی ہیں",
"tooltip-n-currentevents": "حالیہ واقعات پر پس منظری معلومات دیکھیئے",
"tooltip-n-recentchanges": "ویکی میں حالیہ تبدیلیوں کی فہرست",
@@ -1049,13 +1178,16 @@
"tooltip-summary": "مختصر خلاصہ درج کریں",
"anonymous": "{{SITENAME}} گمنام صارف",
"others": "دیگر",
+ "pageinfo-toolboxlink": "معلومات صفحہ",
"markaspatrolledtext": "اس صفحہ کو بطور مراجعت شدہ نشان زد کریں",
"deletedrevision": "حذف شدہ پرانی ترمیم $1۔",
"previousdiff": "← پُرانی تدوین",
"nextdiff": "صفحہ کا نام:",
"file-info-size": "\n$1 × $2 عکصر (پکسلز)، حجم ملف: $3، MIME قسم: $4",
"file-nohires": "اس سے بڑی تصمیم دستیاب نہیں۔",
- "show-big-image": "مکمل تصمیم",
+ "show-big-image": "اصل ملف",
+ "show-big-image-preview": "اس نمائش کا حجم:$1",
+ "show-big-image-size": "$1 × $2 pixels",
"newimages": "نئی فائلوں کی گیلری",
"ilsubmit": "تلاش",
"bydate": "بالحاظ تاریخ",
@@ -1063,8 +1195,19 @@
"bad_image_list": "شکلبند درج ذیل ہے:\n\nصرف فہرستی عناصر (* سے شروع ہونے والی لکیری) شامل کی جاتی ہیں۔\nکسی لکیر میں پہلا ربط کوئی خراب ملف کا ہونا چاہئے۔\nاُسی لکیر میں باقی آنے والے ربط کو مستثنیٰ قرار دیا جاتا ہے، مثلاً صفحات جہاں ملف لکیر کے وسط میں آسکتا ہے۔",
"metadata": "میٹا ڈیٹا",
"metadata-collapse": "طویل تفاصیل چھپاؤ",
+ "exif-orientation": "پیشکش",
+ "exif-xresolution": "چھوڑاوی دکھاوت",
+ "exif-yresolution": "لمباوی دکھاوت",
+ "exif-datetime": "ملف کے تبدیلی کا تاریخ او وقت",
+ "exif-make": "کیمرے کا صانع",
+ "exif-model": "کیمرے کا ماڈل",
+ "exif-software": "سافٹویئر استعمال",
+ "exif-exifversion": "اکزیف ورژن",
+ "exif-colorspace": "رنگ فضا",
+ "exif-datetimeoriginal": "ڈیٹا بنانے کا تاریخ اور وقت",
+ "exif-datetimedigitized": "معددی کا تاریخ اور وقت",
+ "exif-orientation-1": "عام",
"exif-meteringmode-0": "نامعلوم",
- "watchlistall2": "تمام",
"namespacesall": "تمام",
"monthsall": "تمام",
"deletedwhileediting": "انتباہ: آپ کے ترمیم شروع کرنے کے بعد یہ صفحہ حذف کیا جا چکا ہے!",
@@ -1101,12 +1244,32 @@
"hijri-calendar-m12": "ذوالحجہ",
"version": "ورژن",
"specialpages": "خصوصی صفحات",
+ "tag-filter": "[[Special:Tags|لوحہ]] فلٹر:",
+ "logentry-delete-delete": "$1 {{GENDER:$2|حذف کیا گیا}} صفحہ $3",
+ "logentry-newusers-create": "صارف کھاتہ $1 {{GENDER:$2|بنایا گیا}}",
"rightsnone": "(کچھ نہیں)",
+ "revdelete-summary": "خلاصۂ تدوین",
"searchsuggest-search": "تلاش",
"expandtemplates": "سانچے کو وسیع کریں",
"expand_templates_input": "ان پٹ متن:",
"expand_templates_output": "نتیجہ",
"expand_templates_ok": "ٹھیک ہے",
"expand_templates_remove_comments": "تبصرے حذف کریں",
- "expand_templates_preview": "پیش نظارہ"
+ "expand_templates_preview": "پیش نظارہ",
+ "special-characters-group-latin": "لاطینی محارف",
+ "special-characters-group-latinextended": "وسیع لاطینی",
+ "special-characters-group-symbols": "علامات",
+ "special-characters-group-greek": "یونانی",
+ "special-characters-group-arabic": "عربی",
+ "special-characters-group-arabicextended": "عربی توسیع شدہ",
+ "special-characters-group-persian": "فارسی",
+ "special-characters-group-hebrew": "عبرانی",
+ "special-characters-group-bangla": "بنگالی",
+ "special-characters-group-tamil": "تامل",
+ "special-characters-group-telugu": "تلگو",
+ "special-characters-group-sinhala": "سنگھالی",
+ "special-characters-group-gujarati": "گجراتی",
+ "special-characters-group-thai": "سیامی",
+ "special-characters-group-lao": "لاوسی",
+ "special-characters-group-khmer": "کھمیری"
}
diff --git a/languages/i18n/uz.json b/languages/i18n/uz.json
index 5c1fd066..84dae98b 100644
--- a/languages/i18n/uz.json
+++ b/languages/i18n/uz.json
@@ -9,17 +9,18 @@
"Nataev",
"Sociologist",
"Xexdof",
- "Arystanbek"
+ "Arystanbek",
+ "6ahodir"
]
},
"tog-underline": "Havolalarning tagiga chizish:",
"tog-hideminor": "Yangi oʻzgarishlar roʻyxatida kichik tahrirlarni yashirish",
"tog-hidepatrolled": "Yangi oʻzgarishlar roʻyxatida tekshirilgan tahrirlarni yashirish",
- "tog-newpageshidepatrolled": "Yangi sahifalar roʻyxatida tekshirilgan sahifalarni yashirish",
+ "tog-newpageshidepatrolled": "Yangi sahifalar roʻyxatidan tekshirilgan sahifalarni yashirish",
"tog-extendwatchlist": "Kengaytirilgan kuzatuv roʻyxati: faqat oxirgi paytdagi emas, barcha oʻzgarishlar koʻrsatiladi",
"tog-usenewrc": "Yangi oʻzgarishlar va kuzatuv roʻyxatidagi sahifalarni guruhlarga boʻlish (JavaScript orqali)",
"tog-numberheadings": "Sarlavhalarni avtomatik raqamlash",
- "tog-showtoolbar": "Yuqoridagi tahrirlash asboblarini koʻrsatish",
+ "tog-showtoolbar": "Tahrirlash asboblarini koʻrsatish",
"tog-editondblclick": "Sichqonchaning chap tugmasini ikki marta bosib tahrirlashni boshlash",
"tog-editsectiononrightclick": "Boʻlim sarlavhasiga sichqonchaning oʻng tugmasini bosib tahrirlashni boshlash",
"tog-watchcreations": "Men yaratgan sahifalar va yuklagan fayllar kuzatuv roʻyxatimga qoʻshilsin",
@@ -72,46 +73,47 @@
"thu": "Pay",
"fri": "Jum",
"sat": "Shn",
- "january": "yanvar",
- "february": "fevral",
- "march": "mart",
- "april": "aprel",
- "may_long": "may",
- "june": "iyun",
- "july": "iyul",
- "august": "avgust",
- "september": "sentabr",
- "october": "oktabr",
- "november": "noyabr",
- "december": "dekabr",
- "january-gen": "yanvar",
- "february-gen": "fevral",
- "march-gen": "mart",
- "april-gen": "aprel",
- "may-gen": "may",
- "june-gen": "iyun",
- "july-gen": "iyul",
- "august-gen": "avgust",
- "september-gen": "sentabr",
- "october-gen": "oktabr",
- "november-gen": "noyabr",
- "december-gen": "dekabr",
- "jan": "yan",
- "feb": "fev",
- "mar": "mar",
- "apr": "apr",
- "may": "may",
- "jun": "iyn",
- "jul": "iyl",
- "aug": "avg",
- "sep": "sen",
- "oct": "okt",
- "nov": "noy",
- "dec": "dek",
+ "january": "Yanvar",
+ "february": "Fevral",
+ "march": "Mart",
+ "april": "Aprel",
+ "may_long": "May",
+ "june": "Iyun",
+ "july": "Iyul",
+ "august": "Avgust",
+ "september": "Sentabr",
+ "october": "Oktabr",
+ "november": "Noyabr",
+ "december": "Dekabr",
+ "january-gen": "Yanvar",
+ "february-gen": "Fevral",
+ "march-gen": "Mart",
+ "april-gen": "Aprel",
+ "may-gen": "May",
+ "june-gen": "Iyun",
+ "july-gen": "Iyul",
+ "august-gen": "Avgust",
+ "september-gen": "Sentabr",
+ "october-gen": "Oktabr",
+ "november-gen": "Noyabr",
+ "december-gen": "Dekabr",
+ "jan": "Yan",
+ "feb": "Fev",
+ "mar": "Mar",
+ "apr": "Apr",
+ "may": "May",
+ "jun": "Jyn",
+ "jul": "Iyl",
+ "aug": "Avg",
+ "sep": "Sen",
+ "oct": "Okt",
+ "nov": "Noy",
+ "dec": "Dek",
"january-date": "Yanvar $1",
"february-date": "Fevral $1",
"march-date": "Mart $1",
"april-date": "Aprel $1",
+ "may-date": "$1-may",
"june-date": "Iyun $1",
"july-date": "Iyul $1",
"august-date": "Avgust $1",
@@ -120,7 +122,7 @@
"november-date": "Noyabr $1",
"december-date": "Dekabr $1",
"pagecategories": "{{PLURAL:$1|Turkum}}",
- "category_header": "\"$1\" turkumidagi maqolalar.",
+ "category_header": "\"$1\" turkumidagi sahifalar",
"subcategories": "Ostturkumlar",
"category-media-header": "\"$1\" turkumidagi fayllar",
"category-empty": "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
@@ -147,13 +149,13 @@
"anontalk": "Ushbu IP-manzil munozarasi",
"navigation": "Saytda harakatlanish",
"and": "&#32;va",
- "qbfind": "Qidiruv",
- "qbbrowse": "Koʻrish",
+ "qbfind": "Topish",
+ "qbbrowse": "Koʻrib chiqish",
"qbedit": "Tahrirlash",
"qbpageoptions": "Ushbu sahifa moslamalari",
- "qbmyoptions": "Moslamalarim",
+ "qbmyoptions": "Mening sahifalarim",
"faq": "TSS",
- "faqpage": "Project:TSS",
+ "faqpage": "Loyiha:TSS",
"actions": "Amallar",
"namespaces": "Nomfazolar",
"variants": "Variantlar",
@@ -173,8 +175,10 @@
"permalink": "Doimiy ishorat",
"print": "Chop etish",
"view": "Koʻrish",
+ "view-foreign": "$1da koʻrish",
"edit": "Tahrirlash",
"create": "Yaratish",
+ "create-local": "Mahalliy tavsifini qoʻshish",
"editthispage": "Ushbu sahifani tahrirlash",
"create-this-page": "Ushbu sahifani yaratish",
"delete": "O‘chirish",
@@ -183,7 +187,7 @@
"undelete_short": "{{PLURAL:$1|bitta tahrir|$1 ta tahrir}}ni tiklash",
"viewdeleted_short": "$1 ta oʻchirilgan tahrirni koʻrish",
"protect": "Himoyalash",
- "protect_change": "Oʻzgartirish",
+ "protect_change": "oʻzgartirish",
"protectthispage": "Ushbu sahifani himoyalash",
"unprotect": "Himoyadan chiqarish",
"unprotectthispage": "Ushbu sahifaning himoyasini oʻzgaritish",
@@ -207,7 +211,8 @@
"otherlanguages": "Boshqa tillarda",
"redirectedfrom": "($1dan yoʻnaltirildi)",
"redirectpagesub": "Yoʻnaltiruvchi sahifa",
- "lastmodifiedat": "Bu sahifa oxirgi marta $1 soat $2 da tahrirlangan.",
+ "redirectto": "Qayta yoʻnaltirish:",
+ "lastmodifiedat": "Bu sahifa oxirgi marta $1, $2 da tahrirlangan.",
"viewcount": "Bu sahifaga {{PLURAL:$1|bir marta|$1 marta}} murojaat qilingan.",
"protectedpage": "Himoyalangan sahifa",
"jumpto": "Oʻtish:",
@@ -217,14 +222,15 @@
"pool-timeout": "Toʻsishni kutish vaqti tugadi",
"pool-queuefull": "Soʻrovlar jamlanmasi toʻldi",
"pool-errorunknown": "Nomaʼlum xato",
+ "poolcounter-usage-error": "Foydalanish xatosi: $1",
"aboutsite": "{{SITENAME}} haqida",
"aboutpage": "Project:Haqida",
"copyright": "Keltirilgan maʼlumotlar $1 orqali tarqatilmoqda (agar aksinchasi koʻrsatilmagan boʻlsa).",
"copyrightpage": "{{ns:project}}:Mualliflik huquqlari",
"currentevents": "Joriy hodisalar",
"currentevents-url": "Project:Joriy hodisalar",
- "disclaimers": "Ogohlantirishlar",
- "disclaimerpage": "Project:Umumiy ogohlantirish",
+ "disclaimers": "Masʼuliyatdan voz kechish",
+ "disclaimerpage": "Project:Masʼuliyatdan voz kechish",
"edithelp": "Tahrirlash yordami",
"mainpage": "Bosh sahifa",
"mainpage-description": "Bosh sahifa",
@@ -257,6 +263,9 @@
"hidetoc": "yashirish",
"collapsible-collapse": "Yigʻish",
"collapsible-expand": "Yoyish",
+ "confirmable-confirm": "Aminmisiz?",
+ "confirmable-yes": "Ha",
+ "confirmable-no": "Yoʻq",
"thisisdeleted": "$1ni koʻrib chiqasizmi yoki tiklaysizmi?",
"viewdeleted": "$1ni koʻrib chiqasizmi?",
"restorelink": "{{PLURAL:$1|Oʻchirilgan tahrir|$1 ta oʻchirilgan tahrirlar}}",
@@ -283,12 +292,26 @@
"nosuchaction": "Bunday amal yoʻq",
"nosuchspecialpage": "Bunday maxsus sahifa yoʻq",
"error": "Xato",
+ "databaseerror": "Maʼlumotlar bazasida xatolik",
+ "databaseerror-query": "So‘rov: $1",
+ "databaseerror-function": "Funktsiya: $1",
+ "databaseerror-error": "Xato: $1",
"laggedslavemode": "'''Diqqat:''' sahifada oxirgi yangilanishlar koʻrsatilmagan boʻlishi mumkin.",
"readonly": "Maʼlumotlar bazasiga yozish toʻsilgan",
"missingarticle-rev": "(versiya №: $1)",
"missingarticle-diff": "(Farq: $1, $2)",
"internalerror": "Ichki xato",
"internalerror_info": "Ichki xato: $1",
+ "filecopyerror": "\"$1\" fayl nusxasini \"$2\" fayliga koʻchirib boʻlmadi.",
+ "filerenameerror": "Fayl nomini «$1»dan «$2»ga o‘zgartirish imkoni yoʻq.",
+ "filedeleteerror": "\"$1\" faylini oʻchirib boʻlmadi.",
+ "directorycreateerror": "\"$1\" papkasini yaratish imkoni yoʻq.",
+ "directoryreadonlyerror": "\"$1\" katalogi faqat oʻqish uchun moʻljallangan.",
+ "filenotfound": "\"$1\" faylini topib boʻlmadi.",
+ "unexpected": "Kutilmagan qiymat: \"$1\"=\"$2\".",
+ "formerror": "Xatolik: Formani jo‘natib bo‘lmadi.",
+ "badarticleerror": "Bu harakatni ushbu sahifada bajarib bo‘lmadi.",
+ "cannotdelete-title": "\"$1\" sahifasini oʻchirib boʻlmadi.",
"badtitle": "Notoʻgʻri sarlavha",
"viewsource": "Manbasini koʻrish",
"viewsource-title": "$1 sahifasining manbasini koʻrish",
@@ -300,6 +323,9 @@
"namespaceprotected": "Sizda '''$1''' nomfazosi sahifalarini tahrirlash huquqi yoʻq",
"customcssprotected": "Sizda uchbu CSS sahifani tahrirlash huquqi yoʻq, chunki bu yerda boshqa foydalanuvchining shaxsiy moslamalari saqlanadi.",
"customjsprotected": "Sizda uchbu JavaScript sahifani tahrirlash huquqi yoʻq, chunki bu yerda boshqa foydalanuvchining shaxsiy moslamalari saqlanadi.",
+ "mycustomjsprotected": "Sizda ushbu JavaScript sahifani tahrirlashga ruxsat mavjud emas.",
+ "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.",
"exception-nologin": "Siz tizimda o'zingizni tanishtirmadingiz",
"exception-nologin-text": "Bu sahifani koʻrish yoki soʻralgan amalni bajarish uchun tizimga kirishingiz lozim.",
@@ -307,10 +333,11 @@
"virus-scanfailed": "tekshirishda xatolik (kod $1)",
"virus-unknownscanner": "noma'lum antivirus:",
"logouttext": "<strong>Siz saytdan muvaffaqiyatli chiqdingiz.</strong>\n\nBrauzeringiz keshini tozalamaguningizgacha ayrim sahifalar tizimga kirganingizdek koʻrinishda davom etaverishi mumkin.",
+ "welcomeuser": "Xush kelibsiz, $1!",
"yourname": "Foydalanuvchi nomi:",
"userlogin-yourname": "Foydalanuvchi nomi",
"userlogin-yourname-ph": "Foydalanuvchi nomingizni kiriting",
- "createacct-another-username-ph": "Foydalanuvchi nomingizni kiriting",
+ "createacct-another-username-ph": "Foydalanuvchi nomini kiriting",
"yourpassword": "Maxfiy soʻz:",
"userlogin-yourpassword": "Maxfiy soʻz",
"userlogin-yourpassword-ph": "Maxfiy soʻzni kiriting",
@@ -338,7 +365,8 @@
"gotaccount": "Hisobingiz bormi? '''$1'''.",
"gotaccountlink": "Kirish",
"userlogin-resetlink": "Kirish maʻlumotlaringiz esdan chiqdimi?",
- "userlogin-resetpassword-link": "Unutib qoʻydingizmi?",
+ "userlogin-resetpassword-link": "Maxfiy so‘zni unutib qoʻydingizmi?",
+ "userlogin-helplink2": "Kirish uchun yordam",
"userlogin-loggedin": "Siz {{GENDER:$1|$1}} nomi bilan kirgansiz.\nBoshqa hisob raqami orqali kirish uchun quyidagi formadan foydalaning.",
"userlogin-createanother": "Boshqa hisob yaratish",
"createacct-emailrequired": "Elektron pochta manzilingiz",
@@ -346,6 +374,7 @@
"createacct-email-ph": "Elektron pochta manzilingizni kiriting",
"createacct-another-email-ph": "Elektron pochta manzilini kiriting",
"createaccountmail": "Tasodifan tanlab beriladigan vaqtinchalik maxfiy soʻzdan foydalanish (elektron pochta manzilingizga joʻnatiladi)",
+ "createacct-realname": "Haqiqiy ismi (ixtiyoriy)",
"createaccountreason": "Sabab:",
"createacct-reason": "Sabab",
"createacct-reason-ph": "Nimaga yana boshqa hisob yaratyapsiz",
@@ -355,10 +384,12 @@
"createacct-another-submit": "Boshqa hisob yaratish",
"createacct-benefit-heading": "{{SITENAME}} Sizga oʻxshagan odamlar tomonidan yaratiladi",
"createacct-benefit-body1": "tahrirlar soni",
- "createacct-benefit-body2": "maqolalar soni",
+ "createacct-benefit-body2": "sahifalar soni",
"createacct-benefit-body3": "soʻnggi paytdagi ishtirokchilar soni",
"badretype": "Siz tomondan kiritilgan maxfiy so'zlar mos kelmayapti.",
+ "userexists": "Bunday foydalanuvchi nomi avvalroq yaratilgan. Iltimos, boshqa nom tanlang.",
"loginerror": "Foydalanuvchini aniqlashda xatolik",
+ "createacct-error": "Hisob yaratishda xatolik",
"createaccounterror": "Hisob yozuvi yaratishning iloji yoʻq: $1",
"loginsuccesstitle": "Kirish muvaffaqiyatli amalga oshdi",
"loginsuccess": "'''{{SITENAME}}ga \"$1\" foydalanuvchi nomi bilan kirdingiz.'''",
@@ -369,15 +400,20 @@
"wrongpasswordempty": "Maxfiy soʻz koʻrsatilmagan. Qaytadan urinib koʻring.",
"mailmypassword": "Maxfiy soʻzni yangilash",
"passwordremindertitle": "{{SITENAME}} uchun vaqtinchalik yangi maxfiy so'z",
+ "noemailcreate": "Siz haqiqiy elektron pochta manzilingizni taqdim qilishingiz kerak.",
+ "mailerror": "$1 manziliga xat yuborishda xatolik",
"emailauthenticated": "Elektron pochta manzilingiz $2, $3 da tasdiqlangan.",
"emailconfirmlink": "Elektron pochta manzilingizni tasdiqlash",
"emaildisabled": "Bu sayt elektron pochta xatlarini yubora olmaydi.",
"accountcreated": "Hisob yozuvi yaratildi",
+ "createaccount-title": "{{SITENAME}} da hisob yaratish",
"login-abort-generic": "Tizimga kirishga mufavvaqiyatsiz urinish",
"loginlanguagelabel": "Til: $1",
"pt-login": "Kirish",
+ "pt-login-button": "Kirish",
"pt-createaccount": "Hisob yaratish",
"pt-userlogout": "Chiqish",
+ "php-mail-error-unknown": "PHPning mail() funksiyasida nomaʻlum xatolik.",
"changepassword": "Maxfiy soʻzni oʻzgartirish",
"resetpass_header": "Maxfiy soʻzni oʻzgartirish",
"oldpassword": "Eski mahfiy so'z:",
@@ -386,23 +422,32 @@
"resetpass_submit": "Maxfiy so'zni o'rnatish va kirish",
"changepassword-success": "Maxfiy soʻzni oʻzgartirish muvaffaqiyatli oʻtdi!",
"resetpass_forbidden": "Maxfiy so'z o'zgartirilishi mumkin emas",
+ "resetpass-no-info": "Siz ushbu sahifaga toʻgʻridan toʻgʻri kirishingiz uchun tizimga kirgan boʻlishingiz kerak.",
"resetpass-submit-loggedin": "Maxfiy soʻzni oʻzgartirish",
"resetpass-submit-cancel": "Bekor",
+ "resetpass-temp-password": "Vaqtinchalik maxfiy soʻz",
"passwordreset": "Maxfiy soʻzni yangilash",
"passwordreset-text-one": "Mahfiy soʻzni tashlash uchun ushbu oynalarni toʻltiring.",
"passwordreset-text-many": "{{PLURAL:$1|Quyidagi oynalardan birini toʻldirsangiz, elektron pochtangizga vaqtinchalik maxfiy soʻz joʻnatiladi.}}",
"passwordreset-legend": "Maxfiy soʻzni yangilash",
+ "passwordreset-emaildisabled": "Email xususiyatlari ushbu vikida oʻchirib qoʻyilgan.",
"passwordreset-username": "Foydalanuvchi nomi:",
"passwordreset-domain": "Domen:",
+ "passwordreset-capture": "Xatni koʻrmoqchimisiz?",
"passwordreset-email": "Elektron pochta manzilingiz:",
"passwordreset-emailelement": "Foydalanuvchi ismi: $1\nVaqtinchalik maxfiy so'z: $2",
"changeemail": "Elektron pochta manzilini oʻzgartirish",
- "changeemail-header": "Elektron pochta manzilini o'zgaritish",
"changeemail-oldemail": "Joriy elektron pochta manzili",
"changeemail-newemail": "Elektron pochtaning yangi manzili",
"changeemail-none": "(yoʻq)",
+ "changeemail-password": "Sizning {{SITENAME}}dagi maxfiy so‘zingiz:",
"changeemail-submit": "Manzilni o'zgartirish",
- "changeemail-cancel": "Bekor",
+ "resettokens": "Kalitlaringizni yangilash",
+ "resettokens-legend": "Kalitlaringizni yangilash",
+ "resettokens-tokens": "Kalitlar:",
+ "resettokens-token-label": "$1 (joriy koʻrsatkich: $2)",
+ "resettokens-done": "Kalitlar yangilandi.",
+ "resettokens-resetbutton": "Belgilangan kalitlarni yangilash",
"bold_sample": "Qalin matn",
"bold_tip": "Qalin matn",
"italic_sample": "Yotiq matn",
@@ -423,10 +468,10 @@
"subject": "Mavzu/sarlavha",
"minoredit": "Bu kichik tahrir",
"watchthis": "Sahifani kuzatish",
- "savearticle": "Saqlash",
+ "savearticle": "Saqla",
"preview": "Ko‘rib chiqish",
"showpreview": "Koʻrib chiqish",
- "showdiff": "O‘zgarishlarni ko‘rsatish",
+ "showdiff": "Kiritilgan o‘zgarishlar",
"anoneditwarning": "'''Diqqat:''' Siz tizimga kirmagansiz. Ushbu sahifa tarixida Sizning IP manzilingiz yozib qolinadi.",
"missingcommenttext": "Iltimos sharh qoldiring.",
"summary-preview": "Tavsif bunday koʻrinishda boʻladi:",
@@ -443,20 +488,29 @@
"accmailtitle": "Maxfiy soʻz joʻnatildi",
"newarticle": "(Yangi)",
"newarticletext": "Bu sahifa hali mavjud emas.\nSahifani yaratish uchun quyida matn kiritishingiz mumkin (qoʻshimcha axborot uchun [$1 yordam sahifasini] koʻring).\nAgar bu sahifaga xatolik sabab kelib qolgan boʻlsangiz brauzeringizning '''orqaga''' tugmasini bosing.",
- "anontalkpagetext": "----''Ushbu munozara sahifasi hali hisob yozuvini yaratmagan, yoki undan foydalanmaydigan anonim ishtirokchiga tegishli.\nShu sababli tenglashtirish uchun raqamli IP-manzildan foydalaniladi.\nUshbu manzilning oʻzi bir nechta boshqa ishtirokchilarga ham mos kelishi mumkin.\nAgar siz anonim ishtirokchi boʻlsangiz va siz oʻzingizga yoʻnaltirilmagan xabar oldim deb taxmin qilsangiz, iltimos, boshqa anonim ishtirokchilar bilan mumkin boʻlgan chalkashliklarni chetlab oʻtish uchun [[Special:UserLogin/signup|hisob yozuvi yarating]] yoki [[Special:UserLogin|tizimga kiring]].''",
+ "anontalkpagetext": "----\n<em>Ushbu munozara sahifasi hisob yozuvi yaratmagan (yoki yaratishni xohlamaydigan) anonim foydalanuvchiga tegishli.</em>\n\nShu sababli, uni aniqlash uchun raqamli IP-manzildan foydalaniladi.\nUshbu IP-manzil bir nechta foydalanuvchilarga tegishli boʻlishi mumkin.\nAgar siz anonim foydalanuvchi boʻlsangiz va qoldirilgan xabarlar sizga yoʻnaltirilmagan deb hisoblasangiz, iltimos, boshqa anonim foydalanuvchilar bilan adashtirib yubormasliklari uchun [[Special:UserLogin/signup|hisob yozuvi yarating]] yoki [[Special:UserLogin|tizimga kiring]].",
"noarticletext": "Bu sahifada hozircha hech qanday matn yoʻq. Siz bu sarlavhani boshqa sahifalardan [[Special:Search/{{PAGENAME}}|qidirishingiz]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tegishli qaydlarga qarashingiz] yoki bu sahifani [{{fullurl:{{FULLPAGENAME}}|action=edit}} tahrirlashingiz]</span> mumkin.",
+ "userpage-userdoesnotexist-view": "\"$1\" foydalanuvchi hisobi roʻyxatga olinmagan.",
"clearyourcache": "'''Eslatma.''' Saqlaganingizdan so'ng o'zgarishlarni ko'rish uchun siz o'z brauzeringiz keshini tozalashingizga to'gri kelishi mumkin.\n* '''Firefox / Safari:''' ''Shift'' tugmasini bosgan holda, ''Yangilash'' unsurlar darchasini bosing, yoki ''Ctrl-F5'' yoki ''Ctrl-R'' (Macda ''⌘-R'') ni bosing\n* '''Google Chrome:''' ''Ctrl-Shift-R'' (Macda ''⌘-Shift-R'') ni bosing\n* '''Internet Explorer:''' ''Ctrl''ni bosgan holda, ''Yangilash''ni bosing, yoki ''Ctrl-F5''ni bosing\n* '''Opera:''' ''Asboblar → Moslamalar'' menyusidan keshni tozalashni tanlang",
"updated": "(Yangilandi)",
"note": "'''Izoh:'''",
"previewnote": "'''Bu shunchaki koʻrib chiqish.''' Oʻzgartirishlar hali saqlangani yoʻq!",
"continue-editing": "tahrirlashni davom ettirish",
- "editing": "$1 tahrirlanmoqda",
+ "session_fail_preview": "<strong>Afsuski, sizning tahriringiz texnik nosozlik yuzaga kelgani sabab saqlanmadi.</strong>\nIltimos, yana bir bor urinib koʻring.\nAgar shu xato yana takrorlansa, hisob yozuvingizdan [[Special:UserLogout|chiqishni amalga oshiring]] va qaytadan kiring.",
+ "session_fail_preview_html": "<strong>Afsuski, sizning tahriringiz texnik nosozlik yuzaga kelgani sabab saqlanmadi.</strong>\n\n<em>Chunki {{SITENAME}}da faqat HTMLdan foydalanish mumkin, JavaScript-hujumlardan saqlanish maqsadida koʻrib chiqish imkoniyati oʻchirib qoʻyilgan.</em>\n\n<strong>Agar foydali tahrir kiritmoqchi boʻlgan boʻlsangiz, yana bir bor urinib koʻring.</strong>\nAgar shundayam xato takrorlansa, hisob yozuvingizdan [[Special:UserLogout|chiqishni amalga oshiring]] va qaytadan kiring.",
+ "editing": "Tahrirlanmoqda — $1",
"creating": "«$1» sahifasini yaratish",
- "editingsection": "$1 tahrirlanmoqda (boʻlim)",
- "editingcomment": "$1 tahrirlanmoqda (yangi mavzu)",
+ "editingsection": "Tahrirlanmoqda — $1 (boʻlimi)",
+ "editingcomment": "Yangi mavzu yaratilmoqda — $1",
"editconflict": "Tahrirlash toʻqnashuvi: $1",
+ "explainconflict": "Sahifani tahrirlayotgan mahalingizda boshqa birov unga oʻzgarish kiritib ulgurdi.\nYuqoridagi tahrir oynasida sahifaning joriy matnini koʻrishingiz mumkin.\nPastdagida esa siz kiritgan oʻzgarishlar koʻrsatilgan.\nKiritmoqchi boʻlgan oʻzgarishlaringizni pastdagi oynadan yuqoridagiga oʻtkazing.\n«{{int:savearticle}}» tugmasini bossangiz <strong>faqat</strong> yuqoridagi matn saqlanadi.",
+ "yourtext": "Sizning matningiz",
+ "editingold": "<strong>Ogohlantirish: Siz sahifaning eski nusxasini tahrirlayapsiz.</strong> Uni shunday holicha saqlasangiz, keyingi nusxalardagi oʻzgarishlar yoʻqotiladi.",
+ "yourdiff": "Farqlar",
"copyrightwarning": "Iltimos, {{SITENAME}}ga yuklangan har qanday axborot $2 ostida tarqatilishiga diqqat qiling (batafsil ma'lumot uchun $1ni ko'ring).\nAgar yozganlaringiz keyinchalik tahrir qilinishi va qayta tarqatilishiga rozi bo'lmasangiz, u holda bu yerga yozmang.<br />\nSiz shuningdek bu yozganlaringiz sizniki yoki erkin litsenziya ostida ekanligini va'da qilmoqdasiz.\n'''MUALLIFLIK HUQUQLARI BILAN HIMOYALANGAN ISHLARNI ZINHOR BERUXSAT YUBORMANG!'''",
"copyrightwarning2": "Iltimos, shuni esda tutingki, {{SITENAME}} sahifalaridagi barcha matnlar boshqa foydalanuvchilar tomonidan tahrirlanishi, almashtirilishi yoki o'chirilishi mumkin. Agar siz yozgan ma'lumotlaringizni bunday tartibda tahrirlanishiga rozi bo'lmasangiz, unda uni bu yerga joylashtirmang.<br />\nBundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsat berilgan internet manzilidan yoki shu kabi erkin resursdan nusxa olgan bo'lishingiz lozim (Qo'shimcha ma'lumotlar uchun $1 sahifasiga murojaat qiling).\n'''MUALLIFLIK HUQUQI QO'YILGAN ISHLARNI RUXSATSIZ BU YERGA JOYLASHTIRMANG!'''",
+ "protectedpagewarning": "<strong>Ogohlantirish: Ushbu sahifa himoyalangan boʻlib, faqat administratorlar tomonidan tahrirlanishi mumkin.</strong>\nQuyida himoyalash jurnalidagi oxirgi qayd keltirilgan:",
+ "semiprotectedpagewarning": "<strong>Izoh:</strong> Ushbu sahifa himoyalangan boʻlib, faqat roʻyxatdan oʻtgan foydalanuvchilar tomonidan tahrirlanishi mumkin. Quyida himoyalash jurnalidagi oxirgi qayd keltirilgan:",
"templatesused": "Ushbu sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
"templatesusedpreview": "Ushbu sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
"templatesusedsection": "Ushbu bo'limda foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
@@ -469,16 +523,25 @@
"sectioneditnotsupported-text": "Ushbu sahifada boʻlimlarni tahrirlash imkoniyati yoʻq.",
"permissionserrors": "Ruxsat huquqida xato",
"permissionserrorstext-withaction": "Sizda quyidagi {{PLURAL:$1|sabab|sabablar}}ga koʻra '''$2'''ga ruxsat mavjud emas:",
- "recreate-moveddeleted-warn": "'''Diqqat: Siz avval yoʻqotilgan sahifani yana yaratmoqchisiz.'''\n\nBu sahifani yaratishda davom etishdan avval uning nega avval yoʻqotilgani bilan qiziqib koʻring.\nQulaylik uchun quyida yoʻqotilish qaydlari keltirilgan:",
+ "recreate-moveddeleted-warn": "<strong>Diqqat: Siz avval yoʻqotilgan sahifani qaytadan yaratmoqchisiz.</strong>\n\nU avval nega yoʻqotilgani bilan qiziqib koʻring.\nQuyida ushbu sahifaga oid yoʻqotish va koʻchirish qaydlari keltirilgan:",
"moveddeleted-notice": "Bu sahifa oʻchirilgan.\nMaʼlumot uchun quyida oʻchirish va qayta nomlash jurnallaridan mos yozuvlar keltirilgan.",
"log-fulllog": "Qaydlarni toʻliq koʻrish",
"edit-conflict": "Tahrirlash toʻqnashuvi.",
+ "postedit-confirmation-created": "Sahifa yaratildi.",
+ "postedit-confirmation-restored": "Sahifa qayta tiklandi.",
"postedit-confirmation-saved": "Tahriringiz saqlandi.",
"defaultmessagetext": "Boshlang'ich matn",
+ "content-model-text": "quruq matn",
+ "content-model-javascript": "JavaScript",
+ "content-model-css": "CSS",
"post-expand-template-inclusion-warning": "'''Diqqat:''' Qo'llanilayotgan andozalarning jami hajmi juda katta.\nAyrim andozalar qo'shilmaydi.",
"post-expand-template-inclusion-category": "Qo'llaniladigan andozalarning mumkin bo'lgan miqdoridan oshgan sahifalar",
"post-expand-template-argument-category": "Andozalarning to'ldirilmagan o'zgaruvchilariga ega sahifalar",
- "undo-summary": "[[Special:Contributions/$2|$2]] tomonidan qilingan $1 tahriri qaytarildi ([[User talk:$2|mun.]])",
+ "undo-success": "Tahrirni bekor qilish imkoniyati bor. Iltimos, solishtirish oynasini koʻrib chiqib, aynan shu oʻzgarishlarni bekor qilmoqchiligingizga ishonch hosil qiling va undan keyin «Saqla» tugmasini bosing.",
+ "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|mun.]]) tomonidan qilingan $1-sonli tahrir qaytarildi",
+ "cantcreateaccounttitle": "Ro‘yxatdan o‘tib bo‘lmadi",
+ "cantcreateaccount-text": "[[User:$3|$3]] ushbu IP manzil (<strong>$1</strong>) orqali ro‘yxatdan o‘tishni bloklab qo‘ygan.\n\n$3 <em>$2</em>ni sabab qilib ko‘rsatdi",
+ "cantcreateaccount-range-text": "[[User:$3|$3]] '''$1''' sohaga tegishli IP manzillar, shu jumladan sizning IP manzilingiz ('''$4'''), orqali ro‘yxatdan o‘tishni bloklab qo‘ygan.\n\n$3 ''$2''ni sabab qilib ko‘rsatdi",
"viewpagelogs": "Ushbu sahifaga doir qaydlarni koʻrsat",
"nohistory": "Ushbu sahifa uchun oʻzgarishlar tarixi mavjud emas.",
"currentrev": "Hozirgi koʻrinishi",
@@ -496,19 +559,20 @@
"histlegend": "Farqlarni tanlash: solishtirish uchun kerakli radiobokslarni belgilang va '''{{int:compare-submit}}''' tugmasini bosing.<br />\nBu yerda: '''({{int:cur}})''' = hozirgi koʻrinish bilan farqi, '''({{int:last}})''' = avvalgi koʻrinish bilan farqi, '''{{int:minoreditletter}}''' = kichkina tahrir.",
"history-fieldset-title": "Tarixni koʻrish",
"history-show-deleted": "Faqat yoʻqotilganlari",
- "histfirst": "Eng avvalgi",
- "histlast": "Eng soʻnggi",
+ "histfirst": "eng eski",
+ "histlast": "eng yangi",
"historysize": "({{PLURAL:$1|1 bayt|$1 bayt}})",
"historyempty": "(boʻsh)",
"history-feed-title": "Oʻzgarishlar tarixi",
"history-feed-description": "Vikidagi mazkur sahifaning oʻzgarishlar tarixi",
"history-feed-item-nocomment": "$1 $2 da",
- "rev-deleted-comment": "(tahrir izohi o'chirildi)",
+ "rev-deleted-comment": "(tahrir izohi oʻchirilgan)",
"rev-deleted-user": "(muallif nomi oʻchirilgan)",
- "rev-deleted-event": "(qayd yozuvi o'chirildi)",
+ "rev-deleted-event": "(jurnal tafsilotlari o‘chirildi)",
"rev-delundel": "koʻrsatish/yashirish",
"rev-showdeleted": "koʻrsatish",
"revdelete-show-file-submit": "Ha",
+ "revdelete-confirm": "Iltimos, haqiqatdan ham shu harakatni amalga oshirmoqchiligingizni, uning oqibatlarini tushunib turganingizni va harakatingiz [[{{MediaWiki:Policy-url}}|qoidalarga]] asosanlanganini tasdiqlang.",
"revdelete-hide-text": "Sahifaning ushbu versiyasi matnini yashirish",
"revdelete-radio-same": "(o'zgartirilmasin)",
"revdelete-radio-set": "Ha",
@@ -526,16 +590,15 @@
"mergehistory-submit": "Tahrirlarni birlashtirish",
"mergehistory-reason": "Sabab:",
"mergelog": "Birlashtirish qaydlari",
- "pagemerge-logentry": "[[$1]] va [[$2]]lar birlashtirildi ($3 gacha bo'lgan versiyalar)",
"revertmerge": "Bo'lish",
- "history-title": "$1 - oʻzgarishlar tarixi",
+ "history-title": "$1 — oʻzgarishlar tarixi",
"difference-title": "$1 — versiyalar orasidagi farq",
"difference-title-multipage": "\"$1\" va \"$2\" sahifalar orasidagi farq",
"difference-multipage": "(Sahifalar orasidagi farq)",
"lineno": "Qator $1:",
- "compareselectedversions": "Tanlangan versiyalarni solishtir",
- "showhideselectedversions": "Tanlangan versiyalarni koʻrsatish/yashirish",
- "editundo": "qaytarish",
+ "compareselectedversions": "Solishtirish",
+ "showhideselectedversions": "Oʻzgartirish",
+ "editundo": "bekor qilish",
"searchresults": "Qidiruv natijalari",
"searchresults-title": "\"$1\" uchun qidiruv natijalari",
"titlematches": "Sahifalar nomlaridagi mos kelishlar",
@@ -569,7 +632,6 @@
"searchrelated": "bogʻlangan",
"searchall": "barchasi",
"showingresults": "Quyida №'''$2'''dan boshlab {{PLURAL:$1|'''bitta''' natija|'''$1''' ta natija}} koʻrsatilgan.",
- "showingresultsheader": "<strong>$4</strong> uchun jami {{PLURAL:$5|<strong>$3</strong> tadan <strong>$1</strong> ta natija koʻrsatildi|<strong>$3</strong> tadan <strong>$1</strong> — <strong>$2</strong> chi natijalar koʻrsatildi}}",
"search-nonefound": "Talabga javob beradigan natija topilmadi.",
"powersearch-legend": "Kengaytirilgan qidiruv",
"powersearch-ns": "Quyidagi nomfazolardan qidir:",
@@ -580,13 +642,14 @@
"preferences": "Moslamalar",
"mypreferences": "Moslamalarim",
"prefs-edits": "Tahrirlar soni:",
+ "prefsnologintext2": "Iltimos, moslamalarni oʻzgartirish uchun tizimga kiring.",
"prefs-skin": "Tashqi ko‘rinishi",
"skin-preview": "Ko‘rib chiqish",
"datedefault": "Farqi yoʻq",
"prefs-labs": "Tajribaviy imkoniyatlar",
"prefs-user-pages": "Foydalanuvchi sahifalari",
"prefs-personal": "Shaxsiy ma’lumotlar",
- "prefs-rc": "Yangi o‘zgartirishlar",
+ "prefs-rc": "Yangi o‘zgarishlar",
"prefs-watchlist": "Kuzatuv roʻyxati",
"prefs-watchlist-days": "Kunlar soni:",
"prefs-watchlist-days-max": "Maksimum $1 kun",
@@ -611,7 +674,7 @@
"recentchangescount": "Sukut boʻyicha koʻrsatiladigan tahrirlar soni:",
"prefs-help-recentchangescount": "Yangi oʻzgarishlar, sahifalar tarixi va qaydlar uchun",
"prefs-help-watchlist-token2": "Bu kuzatuv roʻyxatingizning veb-kanali uchun maxfiy kalit kodi.\nBu kodni biladigan har kim sizning kuzatuv roʻyxatingizni koʻrishi mumkin, shuning uchun boshqalarga uni oshkor qilmang. [[Special:ResetTokens|Tokenni yangilash]].",
- "savedprefs": "Sizning moslamalaringiz saqlandi.",
+ "savedprefs": "Sizning moslamalaringiz saqlandi",
"timezonelegend": "Vaqt mintaqangiz:",
"localtime": "Mahalliy vaqt:",
"timezoneuseserverdefault": "Server moslamalaridan foydalanish ($1)",
@@ -670,10 +733,11 @@
"prefs-displayrc": "Tasvirlash moslamalari",
"prefs-displaywatchlist": "Tasvirlash moslamalari",
"prefs-diffs": "Versiyalar farqi",
- "userrights-user-editname": "Foydalanuvchi nomingizni kiriting:",
- "editusergroup": "Foydalanuvchi guruxlarni taxrirlash",
+ "userrights": "Foydalanuvchining huquqlarini boshqarish",
+ "userrights-user-editname": "Foydalanuvchi nomi:",
+ "editusergroup": "Guruhlardagi aʼzoligini oʻzgartirish",
"userrights-groupsmember": "Aʼzolik:",
- "userrights-groupsmember-auto": "Noaniq a'zo",
+ "userrights-groupsmember-auto": "Quyidagi guruhlarga kiradi:",
"userrights-reason": "Sabab:",
"userrights-changeable-col": "Siz o'zgartirishingiz mumkin bo'lgan guruhlar",
"userrights-unchangeable-col": "Siz o'zgartira olmaydigan guruhlar",
@@ -709,6 +773,7 @@
"action-deletedhistory": "ushbu sahifaning oʻchirilgan tarixini koʻrish",
"action-sendemail": "elektron xatlar jo'natish",
"nchanges": "$1 {{PLURAL:$1|oʻzgarish|oʻzgarishlar}}",
+ "enhancedrc-history": "tarix",
"recentchanges": "Yangi oʻzgarishlar",
"recentchanges-legend": "Yangi oʻzgarishlar moslamalari",
"recentchanges-summary": "Bu sahifada siz {{SITENAME}}da sodir boʻlgan soʻnggi oʻzgarishlarni koʻrishingiz mumkin.",
@@ -721,8 +786,8 @@
"recentchanges-label-plusminus": "Sahifa vazni qanchaga oʻzgargani (bayt)",
"recentchanges-legend-heading": "'''Izoh:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|alohida roʻyxat]])",
- "rcnotefrom": "Quyida <strong>$2</strong> dan keyin amalga oshirilgan oʻzgarishlar keltirilgan (oxirgi <strong>$1</strong> tasi)",
- "rclistfrom": "$3, $2 dan keyingi oʻzgarishlarni koʻrsat",
+ "rcnotefrom": "Quyida <strong>$3, $4</strong> dan keyin sodir boʻlgan oʻzgarishlar koʻrsatilgan (oxirgi <strong>$1</strong> tasi).",
+ "rclistfrom": "$3, $2 dan keyin sodir boʻlgan oʻzgarishlarni koʻrsat",
"rcshowhideminor": "Kichik tahrirlarni $1",
"rcshowhideminor-show": "koʻrsat",
"rcshowhideminor-hide": "yashir",
@@ -797,7 +862,7 @@
"file-anchor-link": "Fayl",
"filehist": "Fayl tarixi",
"filehist-help": "Faylning biror paytdagi holatini koʻrish uchun tegishli sana/vaqtga bosingiz.",
- "filehist-deleteall": "barini o'chirish",
+ "filehist-deleteall": "barchasini oʻchirish",
"filehist-deleteone": "o‘chirish",
"filehist-revert": "qaytarish",
"filehist-current": "joriy",
@@ -812,17 +877,25 @@
"imagelinks": "Fayllarga ishoratlar",
"linkstoimage": "Bu faylga quyidagi {{PLURAL:$1|sahifa|$1 sahifalar}} bogʻlangan:",
"nolinkstoimage": "Bu faylga bogʻlangan sahifalar yoʻq.",
- "sharedupload": "Ushbu fayl $1dan va boshqa loyihalarda ham qo'llanilishi mumkin.",
- "sharedupload-desc-here": "Ushbu fayl $1dan boʻlib, boshqa loyihalarda ham ishlatilishi mumkin.\nUning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.",
+ "sharedupload": "Ushbu fayl $1ga yuklangan, shuning uchun boshqa loyihalarda ham qoʻllanilishi mumkin.",
+ "sharedupload-desc-there": "Ushbu fayl $1ga yuklangan boʻlib, boshqa loyihalarda ham qoʻllanilishi mumkin.\nQoʻshimcha maʼlumotlarni uning [$2 tavsif sahifasidan] topishingiz mumkin.",
+ "sharedupload-desc-here": "Ushbu fayl $1ga yuklangan boʻlib, boshqa loyihalarda ham qoʻllanilishi mumkin.\nUning [$2 tavsif sahifasidan] olingan maʼlumot quyida keltirilgan.",
+ "sharedupload-desc-edit": "Ushbu fayl $1ga yuklangan boʻlib, boshqa loyihalarda ham qoʻllanilishi mumkin.\nUning tavsifini [$2 mos sahifada] oʻzgartirishingiz mumkin.",
+ "sharedupload-desc-create": "Ushbu fayl $1ga yuklangan boʻlib, boshqa loyihalarda ham qoʻllanilishi mumkin.\nUning tavsifini [$2 mos sahifada] tahrirlashingiz mumkin.",
"uploadnewversion-linktext": "Bu faylning yangi versiyasini yuklash",
+ "shared-repo-from": "$1dan",
+ "shared-repo": "umumiy fayllar saqlanadigan joy",
+ "shared-repo-name-wikimediacommons": "Vikiombor",
"filerevert-comment": "Sabab:",
+ "filedelete": "$1 — oʻchirish",
+ "filedelete-intro": "Siz ushbu faylni — <strong>[[Media:$1|$1]]</strong> va uning tarixini butunlay oʻchirib tashlamoqchi boʻlyapsiz.",
"filedelete-comment": "Sabab:",
"filedelete-submit": "O‘chirish",
+ "filedelete-reason-dropdown": "* Umumiy sabablar\n** mualliflik huquqlari buzilyapti\n** mavjud faylning nusxasi",
"mimetype": "MIME-tur:",
"download": "yuklash",
"unusedtemplates": "Ishlatilinmagan andozalar",
"randompage": "Tasodifiy sahifa",
- "randomincategory-selectcategory-submit": "Oʻtish",
"statistics": "Statistika",
"statistics-header-pages": "Sahifalar statistikasi",
"statistics-header-edits": "Tahrirlar statistikasi",
@@ -831,8 +904,8 @@
"statistics-pages": "Sahifalar",
"statistics-pages-desc": "Ushbu vikidagi barcha sahifalar, jumladan munozara, yoʻnaltirish va hk.",
"statistics-files": "Yuklangan fayllar",
- "statistics-edits": "{{SITENAME}} qurilganidan beri qilingan tahrirlar",
- "statistics-edits-average": "Sahifa boshiga tahrirlar",
+ "statistics-edits": "{{SITENAME}}dagi tahrirlarning umumiy soni",
+ "statistics-edits-average": "Oʻrtacha tahrirlar soni (sahifa boshiga)",
"statistics-users": "Qayd etilgan [[Special:ListUsers|foydalanuvchilar]]",
"statistics-users-active": "Faol foydalanuvchilar",
"statistics-users-active-desc": "Oxirgi $1 kun ichida kamida bitta amal qilgan foydalanuvchilar",
@@ -853,7 +926,7 @@
"prefixindex": "Prefiksli barcha sahifalar",
"protectedpages": "Himoyalangan sahifalar",
"listusers": "Foydalanuvchilar roʻyxati",
- "usercreated": "$1 $2da {{GENDER:$3|ro'yxatdan o'tdi}}",
+ "usercreated": "$1, $2 da {{GENDER:$3|roʻyxatdan oʻtgan}}",
"newpages": "Yangi sahifalar",
"move": "Ko‘chirish",
"movethispage": "Bu sahifani koʻchirish",
@@ -862,7 +935,6 @@
"suppress": "Bekitish",
"booksources": "Kitob manbalari",
"booksources-search-legend": "Kitob haqida ma'lumot qidirish",
- "booksources-go": "O‘tish",
"specialloguserlabel": "Ijrochi:",
"speciallogtitlelabel": "Moʻljal:",
"log": "Qaydlar",
@@ -870,6 +942,7 @@
"alllogstext": "{{SITENAME}}dagi barcha jurnallar roʻyxati.\nNatijalarni jurnal nomi, foydalanuvchi nomi (harflar katta-kichikligi inobatga olinadi) yoki sahifa nomi boʻyicha saralashingiz mumkin.\n* Biror foydalanuvchi amalga oshirgan qaydni topish uchun uning foydalanuvchi nomini „Ijrochi“ oynasiga kiriting.\n* Biror foydalanuvchi yoki sahifaga nisbatan amalga oshirilgan qaydni topish uchun ulardan birining nomini „Moʻljal“ oynasiga kiriting.",
"logempty": "Talabga mos yozuvlar mavjud emas.",
"log-title-wildcard": "Shu matndan boshlanuvchi sarlavhalarni izlash",
+ "showhideselectedlogentries": "Tanlangan jurnal yozuvini oʻzgartirish",
"allpages": "Barcha sahifalar",
"nextpage": "Keyingi sahifa ($1)",
"prevpage": "Avvalgi sahifa ($1)",
@@ -938,7 +1011,7 @@
"watchnologin": "Siz tizimda o'zingizni tanishtirmadingiz",
"addwatch": "Kuzatuv ro'yxatiga qo'shish",
"addedwatchtext": "\"[[:$1]]\" sahifasi sizning [[Special:Watchlist|kuzatuv roʻyxatingizga]] qoʻshildi. Bu sahifada va uning munozara sahifasida boʻladigan oʻzgarishlar u yerda koʻrsatiladi.",
- "removewatch": "Kuzatuv ro'yxatidan o'chirish",
+ "removewatch": "Kuzatuv roʻyxatidan oʻchirish",
"removedwatchtext": "\"[[:$1]]\" sahifasi [[Special:Watchlist|kuzatuv roʻyxatingizdan]] oʻchirildi.",
"watch": "Kuzatish",
"watchthispage": "Sahifani kuzatish",
@@ -947,11 +1020,11 @@
"notanarticle": "Maqola emas",
"watchlist-details": "Sizning kuzatuv roʻyxatingizda hozirda {{PLURAL:$1|bitta sahifa|$1ta sahifa}} mavjud (munozara sahifalarini hisobga olmaganda).",
"wlheader-showupdated": "Siz oxirgi marta kirganingizdan keyin oʻzgartirilgan sahifalar '''qalin''' yozuv bilan ajratib koʻrsatilgan.",
- "wlnote": "Below {{PLURAL:$1|is the last change|are the last '''$1''' changes}} in the last {{PLURAL:$2|hour|'''$2''' hours}}, as of $3, $4.",
- "wlshowlast": "Oxirgi $1 soatdagi $2 kundagi tahrirlarni koʻrsat $3",
+ "wlnote": "Quyida oxirgi $2 soat ichida sodir boʻlgan {{PLURAL:$1|oxirgi oʻzgarish|<strong>$1</strong> ta oʻzgarishlar}} koʻrsatilgan. $3, $4.",
+ "wlshowlast": "Oxirgi $1 soatdagi $2 kundagi tahrirlarni koʻrsatish",
"watchlist-options": "Kuzatuv roʻyxati moslamalari",
"watching": "Kuzatish...",
- "unwatching": "Kuzatuv ro'yxatidan o'chirish...",
+ "unwatching": "Kuzatuv roʻyxatidan oʻchirilmoqda...",
"enotif_reset": "Hammasini koʻrib chiqilgan deb belgilash",
"enotif_impersonal_salutation": "{{SITENAME}} ishtirokchisi",
"enotif_subject_deleted": "{{SITENAME}} loyihasining $1 nomli sahifasi foydalanuvchi {{gender:$2|$2}} tomonidan o‘chirildi",
@@ -970,13 +1043,15 @@
"enotif_body": "Hurmatli $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nO‘zgarish bo‘yicha qisqacha izoh: $PAGESUMMARY $PAGEMINOREDIT\n\nTahrirlovchiga murojaat qilish:\nel. pochta: $PAGEEDITOR_EMAIL\nviki: $PAGEEDITOR_WIKI\n\nAgar siz sahifaga o‘tib ko‘rmasangiz, u holda uning keyingi o‘zgarishlari bo‘yicha boshqa bildirish xabarlari kelmaydi. Siz, shuningdek o‘z kuzatuv ro‘yxatingizda barcha sahifalar uchun xabar berish moslamasini o‘chirishingiz mumkin.\n\n{{SITENAME}}ning xabar berish tizimi\n\n--\nXabar berish moslamalarini o‘zgartirish uchun quyidagi havola bo‘yicha o‘ting\n{{canonicalurl:{{#special:Preferences}}}}\n\nOʻz kuzatuv roʻyxatingiz moslamalarini o‘zgartirish uchun quyidagi havola bo‘yicha o‘ting\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nOʻz kuzatuv roʻyxatingizdan sahifani o‘chirish uchun quyidagi havola bo‘yicha o‘ting\n$UNWATCHURL\n\nQayta aloqa va yordam\n$HELPPAGE",
"created": "yaratildi",
"changed": "o‘zgartirildi",
- "deletepage": "Sahifani o'chirish",
+ "deletepage": "Sahifani oʻchirish",
"confirm": "Tasdiqlash",
"excontent": "tarkibi: „$1“",
"excontentauthor": "tarkibi: „$1“ (faqat bitta muallifi bor edi: „[[Special:Contributions/$2|$2]]“)",
"exbeforeblank": "tozalashdan oldingi tarkibi: „$1“",
"delete-confirm": "$1 — oʻchirish",
- "delete-legend": "O‘chirish",
+ "delete-legend": "Sahifani o‘chirish",
+ "historywarning": "<strong>Diqqat:</strong> Siz oʻchirmoqchi boʻlayotgan sahifaning tarixida $1 ta {{PLURAL:$1|versiyasi}} bor:",
+ "confirmdeletetext": "Siz ushbu sahifani va uning tarixini butunlay oʻchirib tashlamoqchi boʻlyapsiz. Iltimos, [[Special:Whatlinkshere/{{FULLPAGENAMEE}}|bogʻlangan sahifalar]] bilan tanishib chiqishni unutmang.",
"actioncomplete": "Bajarildi",
"actionfailed": "Jarayon amalga oshmadi",
"deletedtext": "\"$1\" yoʻqotildi.\nYaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.",
@@ -984,35 +1059,41 @@
"dellogpagetext": "Quyida oxirgi yoʻqotish qaydlari keltirilgan",
"deletionlog": "yoʻqotish qaydlari",
"reverted": "Eski holiga keltirildi",
- "deletecomment": "Sabab:",
+ "deletecomment": "Sababi:",
"deleteotherreason": "Boshqa/qoʻshimcha sabab:",
"deletereasonotherlist": "Boshqa sabab",
"delete-edit-reasonlist": "Sabablar roʻyxatini tahrirlash",
- "rollback": "Oʻzgarishlarni eski holiga keltirish",
- "rollback_short": "Eski holiga keltirish",
- "rollbacklink": "eski holiga keltirish",
- "rollbacklinkcount": "$1 ta tahrirni ortga qaytarish",
- "rollbacklinkcount-morethan": "$1 {{PLURAL:$1| tadan koʻp tahrir}}ni eski holiga keltirish",
+ "deleting-backlinks-warning": "'''Ogohlantirish:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Baʼzi bir sahifalar]] siz oʻchirmoqchi boʻlayotgan sahifaga bogʻlangan.",
+ "rollback": "Oʻzgarishlarni ortga qaytarish",
+ "rollbacklink": "qaytarish",
+ "rollbacklinkcount": "$1 {{PLURAL:$1|tahrirni}} qaytarish",
+ "rollbacklinkcount-morethan": "$1 tadan koʻp {{PLURAL:$1|tahrirni}} qaytarish",
"rollbackfailed": "Eski holiga keltirishda xatolik",
"revertpage": "[[Special:Contributions/$2|$2]] tahrirlari [[User:$1|$1]] versiyasiga qaytarildi",
"sessionfailure-title": "Seansda xatolik",
"protectlogpage": "Himoyalash qaydlari",
"protectedarticle": "\"[[$1]]\" sahifasi himoyalandi",
- "modifiedarticleprotection": "\"[[$1]]\" uchun himoyalash darajasini o'zgartirdi",
+ "modifiedarticleprotection": "\"[[$1]]\" sahifasining himoya darajasini oʻzgartirdi",
"movedarticleprotection": "himoyalash moslamalarini \"[[$2]]\"dan \"[[$1]]\"ga o'tkazdi",
- "protect-legend": "Himoya oʻrnatishni tasdiqlang",
+ "protect-title": "\"$1\" uchun himoya darajasini oʻrnatish",
+ "protect-legend": "Himoya oʻrnatish",
"protectcomment": "Sabab:",
- "protectexpiry": "Tugaydi:",
- "protect-level-sysop": "Faqat administratorlar uchun",
+ "protectexpiry": "Muddati:",
+ "protect-unchain-permissions": "Qoʻshimcha moslamalarni yoqish",
+ "protect-text": "Bu yerda siz <strong>$1</strong> sahifasining himoya darajasini koʻrishingiz va oʻzgartishingiz mumkin.",
+ "protect-default": "Barcha foydalanuvchilar",
+ "protect-level-autoconfirmed": "Faqat roʻyxatdan oʻtgan foydalanuvchilar",
+ "protect-level-sysop": "Faqat administratorlar",
"protect-summary-cascade": "pog‘onali",
"protect-expiring-local": "$1da tugaydi",
"protect-expiry-indefinite": "muddatsiz",
- "protect-othertime": "Boshqa vaqt:",
- "protect-othertime-op": "boshqa vaqt",
+ "protect-cascade": "Ushbu sahifaga bogʻlangan sahifalarni ham himoyalash (pogʻonali himoya)",
+ "protect-othertime": "Boshqa muddat:",
+ "protect-othertime-op": "boshqa muddat",
"protect-existing-expiry": "Joriy tugash vaqti: $2, $3",
"protect-otherreason": "Boshqa/qo‘shimcha sabab",
"protect-otherreason-op": "Boshqa sabab",
- "protect-edit-reasonlist": "Sabablar ro'yxatini tahrirlash",
+ "protect-edit-reasonlist": "Sabablar roʻyxatini tahrirlash",
"protect-expiry-options": "1 soat:1 hours,1 kun:1 day,1 hafta:1 week,2 hafta:2 weeks,1 oy:1 month,3 oy:3 months,6 oy:6 months,1 yil:1 year,cheksiz:infinite",
"restriction-type": "Huquqlar:",
"restriction-level": "Ruxsat etilganlik darajasi:",
@@ -1034,7 +1115,7 @@
"undeletelink": "ko‘rib chiqish/tiklash",
"undeleteviewlink": "koʻrib chiqish",
"undeleteinvert": "Tanlash tartibini almashtirish",
- "undeletecomment": "Sabab:",
+ "undeletecomment": "Sababi:",
"undelete-search-title": "O'chirilgan sahifalarni qidirish",
"undelete-search-box": "O'chirilgan sahifalarni qidirish",
"undelete-search-prefix": "Bundan boshlangan sahifalarni koʻrsatish:",
@@ -1069,7 +1150,7 @@
"whatlinkshere": "Bu sahifaga bog'langan sahifalar",
"whatlinkshere-title": "\"$1\"ga bogʻlangan sahifalar",
"whatlinkshere-page": "Sahifa:",
- "linkshere": "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bog'langan:",
+ "linkshere": "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bogʻlangan:",
"nolinkshere": "'''[[:$1]]''' sahifasiga hech qaysi sahifa bog‘lanmagan.",
"nolinkshere-ns": "Tanlangan nomfazoda '''[[:$1]]'''ga bog‘langan sahifalar mavjud emas.",
"isredirect": "yoʻnaltiruvchi sahifa",
@@ -1084,16 +1165,16 @@
"whatlinkshere-hideimages": "faylga havolalarini $1",
"whatlinkshere-filters": "Filtrlar",
"autoblockid": "Avtochetlashtirish #$1",
- "block": "Foydalanuvchini muhosara qilish",
+ "block": "Foydalanuvchini chetlashtirish",
"unblock": "Foydalanuvchiga yo'l ochish",
- "blockip": "Foydalanuvchini chetlashtir",
- "blockip-legend": "Foydalanuvchini muhosara qilish",
+ "blockip": "{{GENDER:$1|Foydalanuvchini}} chetlashtirish",
+ "blockip-legend": "Foydalanuvchini chetlashtirish",
"ipaddressorusername": "IP-manzil yoki foydalanuvchi nomi:",
- "ipbexpiry": "Tugaydi:",
+ "ipbexpiry": "Tugash muddati:",
"ipbreason": "Sabab:",
"ipbreason-dropdown": "* Chetlashtirishning odatiy sabablari\n** Yolgʻon maʼlumot kiritish\n** Sahifa matnini toʻliq oʻchirish\n** Tashqi saytlarga spam-havolalar\n** Maʼnosiz matn/axlat qoʻshish\n** Foydalanuvchilarga tahdid qilish, ularni taʼqib qilish\n** Bir nechta hisob yozuvlaridan oʻz manfaatlarida foydalanish\n** Nomaqbul foydalanuvchi nomi",
"ipbsubmit": "Ushbu foydalanuvchini chetlashtirish",
- "ipbother": "Boshqa vaqt:",
+ "ipbother": "Boshqa muddat:",
"ipboptions": "2 soat:2 hours,1 kun:1 day,3 kun:3 days,1 hafta:1 week,2 hafta:2 weeks,1 oy:1 month,3 oy:3 months,6 oy:6 months,1 yil:1 year,cheksiz:infinite",
"ipb-edit-dropdown": "Sabablar ro‘yxatini tahrirlash",
"ipb-unblock-addr": "$1dan toʻsiqni olish",
@@ -1113,7 +1194,7 @@
"ipblocklist-localblock": "Mahalliy chetlashtirish",
"ipblocklist-otherblocks": "Boshqa {{PLURAL:$1|chetlashtirishlar}}",
"infiniteblock": "muddatsiz",
- "expiringblock": "$1 soat $2da tugaydi",
+ "expiringblock": "$1, $2 da tugaydi",
"anononlyblock": "faqat anonimlar",
"noautoblockblock": "avtochetlashtirish o‘chirilgan",
"createaccountblock": "hisob yozuvi yaratish taqiqlangan",
@@ -1121,8 +1202,8 @@
"blocklist-nousertalk": "o‘zining munozara sahifasini tahrirlay olmaydi",
"ipblocklist-empty": "Toʻsiqlar roʻyxati boʻsh.",
"blocklink": "chetlashtirish",
- "unblocklink": "muhosarani (to'sishni) bekor qilish",
- "change-blocklink": "Muhosarani (to'siqni) o'zgartirmoq",
+ "unblocklink": "toʻsiqni olib tashlash",
+ "change-blocklink": "toʻsiqni oʻzgartirish",
"contribslink": "hissa",
"emaillink": "e-maktub jo‘natish",
"blocklogpage": "Chetlatish qaydlari",
@@ -1136,11 +1217,12 @@
"move-watch": "Ushbu sahifani kuzatuv roʻyxatingizga qoʻshish",
"movepagebtn": "Sahifani koʻchirish",
"pagemovedsub": "Sahifa qayta nomlandi",
- "movepage-moved": "'''\"$1\" nomli sahifa \"$2\" nomli sahifaga koʻchirildi'''",
+ "movepage-moved": "'''Sahifa nomi «$1»dan «$2»ga koʻchirildi'''",
"movepage-moved-redirect": "Qayta yo‘naltirish yaratildi.",
"movetalk": "Mos munozara sahifasini qayta nomlash",
"move-subpages": "Ostsahifalarni ham qayta nomlash ($1 gacha)",
"move-talk-subpages": "Munozara sahifasining ostsahifalarini ham qayta nomlash ($1 gacha)",
+ "movepage-page-moved": "Sahifa nomi «$1»dan «$2»ga koʻchirilgan edi.",
"movelogpage": "Koʻchirish qaydlari",
"movesubpage": "{{PLURAL:$1|Ostsahifa|Ostsahifalar}}",
"movesubpagetext": "Ushbu sahifaning $1 ta ostsahifasi bor.",
@@ -1151,6 +1233,8 @@
"delete_and_move_confirm": "Ha, ushbu sahifa o‘chirilsin",
"fix-double-redirects": "Oldingi nomga yoʻnaltirishlarni toʻgʻrilash",
"move-leave-redirect": "Qayta yoʻnaltirish qoldirish",
+ "protectedpagemovewarning": "<strong>Ogohlantirish:</strong> Ushbu sahifa himoyalangan boʻlib, faqat administratorlar uning nomini oʻzgartirishi mumkin. Quyida himoyalash jurnalidagi oxirgi qayd keltirilgan:",
+ "semiprotectedpagemovewarning": "<strong>Izoh:</strong> Ushbu sahifa himoyalangan boʻlib, faqat roʻyxatdan oʻtgan foydalanuvchilar uning nomini oʻzgartirishi mumkin.\nQuyida himoyalash jurnalidagi oxirgi qayd keltirilgan:",
"move-over-sharedrepo": "== Fayl allaqachon mavjud ==\nUmumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumiy omborda to‘silishiga olib keladi.",
"export": "Sahifalar eksporti",
"export-submit": "Eksport",
@@ -1171,7 +1255,6 @@
"thumbnail-more": "Kattalashtir",
"thumbnail_error": "Tasvir yaratishda xatolik: $1",
"importlogpage": "Import qilish qaydlari",
- "import-logentry-upload": "\"[[$1]]\"ni yuklash yo'li bilan import qildi",
"tooltip-pt-userpage": "Foydalanuvchi sahifangiz",
"tooltip-pt-anonuserpage": "Siznig ip manzilingiz foydalanuvchi sahifasi",
"tooltip-pt-mytalk": "Suhbat sahifangiz",
@@ -1242,6 +1325,9 @@
"pageinfo-edits": "Jami tahrirlar soni",
"pageinfo-toolboxlink": "Sahifa haqida maʼlumot",
"pageinfo-redirectsto": "Qayta yoʻnaltirish",
+ "markaspatrolledtext": "Bu sahifani tekshirilgan deb belgilash",
+ "markedaspatrolledtext": "[[:$1]] sahifasining ushbu versiyasi tekshirilgan deb belgilandi.",
+ "markedaspatrollednotify": "[[:$1]] sahifasidagi ushbu oʻzgarish tekshirilgan deb belgilandi.",
"patrol-log-page": "Patrullash qaydlari",
"previousdiff": "← Avvalgi tahrir",
"nextdiff": "Keyingi tahrir →",
@@ -1282,9 +1368,10 @@
"exif-iimcategory-sci": "Fan va texnologiyalar",
"exif-iimcategory-spo": "Sport",
"exif-iimcategory-wea": "Ob-havo",
- "watchlistall2": "hammasi",
"namespacesall": "Barchasi",
"monthsall": "barchasi",
+ "confirmrecreate": "Ushbu sahifa siz tahrir qilayotganingizda foydalanuvchi [[User:$1|$1]] ([[User talk:$1|munozara]]) tomonidan quyidagi sababga binoan yoʻqotilgan:\n: <em>$2</em>\nIltimos, sahifani qaytadan yaratmoqchi ekanligingizni tasdiqlang.",
+ "confirmrecreate-noreason": "Ushbu sahifa siz tahrir qilayotganingizda foydalanuvchi [[User:$1|$1]] ([[User talk:$1|munozara]]) tomonidan yoʻqotilgan. Iltimos, sahifani qaytadan yaratmoqchi ekanligingizni tasdiqlang.",
"unit-pixel": " piksel",
"imgmultipageprev": "← oldingi sahifa",
"imgmultipagenext": "keyingi sahifa →",
@@ -1312,6 +1399,8 @@
"logentry-delete-delete": "$1 $3 sahifasini {{GENDER:$2|oʻchirdi}}",
"logentry-move-move": "$1 $3 sahifasini $4ga koʻchirdi",
"logentry-move-move-noredirect": "$1 $3 sahifasini $4ga {{GENDER:$2|koʻchirdi}}",
+ "logentry-move-move_redir": "$1 sahifa nomini $3dan $4ga yoʻnaltirish ustidan {{GENDER:$2|koʻchirdi}}",
+ "logentry-move-move_redir-noredirect": "$1 sahifa nomini $3dan $4ga yoʻnaltirish ustidan {{GENDER:$2|koʻchirdi}} va yoʻnaltirish qoldirmadi",
"logentry-patrol-patrol-auto": "$1 $3 sahifasining $4 versiyasini avtomatik patrulladi",
"logentry-newusers-newusers": "$1 hisob yozuvi {{GENDER:$2|yaratildi}}",
"logentry-newusers-create": "$1 hisob yozuvi {{GENDER:$2|yaratildi}}",
@@ -1323,5 +1412,26 @@
"searchsuggest-containing": "ichida bu boʻlgan...",
"api-error-unknown-code": "Noaniq xato: \"$1\".",
"api-error-unknownerror": "Noaniq xato: \"$1\".",
- "limitreport-title": "Tahlillagich maʼlumotlari:"
+ "limitreport-title": "Tahlillagich maʼlumotlari:",
+ "special-characters-group-latin": "Lotin",
+ "special-characters-group-latinextended": "Lotin kengaytirilgan",
+ "special-characters-group-ipa": "XFA (MFA)",
+ "special-characters-group-symbols": "Belgilar",
+ "special-characters-group-greek": "Yunon",
+ "special-characters-group-cyrillic": "Kirill",
+ "special-characters-group-arabic": "Arab",
+ "special-characters-group-arabicextended": "Arab kengaytirilgan",
+ "special-characters-group-persian": "Forsiy",
+ "special-characters-group-hebrew": "Yahudiy",
+ "special-characters-group-bangla": "Bengal",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singal",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Tay",
+ "special-characters-group-lao": "Laos",
+ "special-characters-group-khmer": "Kxmer",
+ "special-characters-title-emdash": "uzun tire",
+ "special-characters-title-minus": "minus belgisi"
}
diff --git a/languages/i18n/vec.json b/languages/i18n/vec.json
index 1e1c309f..2df5ff48 100644
--- a/languages/i18n/vec.json
+++ b/languages/i18n/vec.json
@@ -17,7 +17,8 @@
"Urhixidur",
"Vajotwo",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Sotołinea i cołegamenti:",
@@ -25,11 +26,11 @@
"tog-hidepatrolled": "Scondi i canbiamenti verificà in tei \"Ultimi canbiamenti\"",
"tog-newpageshidepatrolled": "Scondi łe pajine verifegae da l'elenco de łe pajine pì resenti",
"tog-extendwatchlist": "Mostra tute łe modifeghe a i oservai spesałi, no soło l'ultima",
- "tog-usenewrc": "Ragrupa łe modifeghe par pàjina inte i ultimi canbiamenti e inte łe tegnùe d'ocio (el dimanda JavaScript)",
+ "tog-usenewrc": "Ragrupa ƚe modifeghe par pàgina inte i ultemi canbiamenti e inte ƚe tegnùe d'òcio",
"tog-numberheadings": "Numerasion automatega de i titołi de sesion",
- "tog-showtoolbar": "Mostra ła bara de i strumenti de modifega (el richiede JavaScript)",
- "tog-editondblclick": "Modifega de łe pajine tramite dopio clic (el richiede JavaScript)",
- "tog-editsectiononrightclick": "Modifega de łe sesion tramite clic destro sol titoło (el richiede JavaScript)",
+ "tog-showtoolbar": "Mostra ƚa bara de i strumenti de modifega",
+ "tog-editondblclick": "Modifega de ƚe pàgine co dopio clic",
+ "tog-editsectiononrightclick": "Modifega de ƚe sesion co clic dreto so'l tìtoƚo",
"tog-watchcreations": "Xonta łe pàjine creae e i file cargai a łe tegnùe d'ocio",
"tog-watchdefault": "Xonta łe pàjine e i file modifegai a łe tegnùe d'ocio",
"tog-watchmoves": "Xonta łe pàjine e i file spostai a łe tegnùe d'ocio",
@@ -44,7 +45,7 @@
"tog-shownumberswatching": "Mostra el numaro de utenti che i ga ła pajina en oservasion",
"tog-oldsig": "Anteprima de ła firma:",
"tog-fancysig": "Interpreta i comandi wiki in te la firma (sensa colegamento automatego)",
- "tog-uselivepreview": "Ativa ła funsion \"Line preview\" (el dimanda JavaScript; sperimentałe)",
+ "tog-uselivepreview": "Ativa ƚa funsion \"Live preview\" (sperimentaƚe)",
"tog-forceeditsummary": "Chiedi conferma se l'ozeto de ła modifega el xé vodo",
"tog-watchlisthideown": "Scondi łe me modifeghe ne i oservai spesałi",
"tog-watchlisthidebots": "Scondi łe modifeghe de i bot ne i oservai spesałi",
@@ -480,7 +481,6 @@
"passwordreset-emailsent-capture": "Xe stà invià na mail de reset password: el contegù xe riportà cuà de seguito.",
"passwordreset-emailerror-capture": "Xe stà generà na mail de reset password, riportà cuà de seguito. L'invio a {{GENDER:$2|l'utente}} no xe riusido: $1",
"changeemail": "Canbia indiriso de posta ełetronega",
- "changeemail-header": "Canbia el indiriso de posta ełetronega del account",
"changeemail-text": "Conpleta sto moduło par canbiare el to indiriso de posta ełetronega. Sarà necesario inserire ła password par confermare ła modifega.",
"changeemail-no-info": "Te ghe da aver efetuà l'aceso par acedare a sta pajina diretamente.",
"changeemail-oldemail": "Indiriso de posta ełetronega atuałe:",
@@ -488,7 +488,6 @@
"changeemail-none": "(nisun)",
"changeemail-password": "Ła password so {{SITENAME}}:",
"changeemail-submit": "Canbia indiriso de posta ełetronega",
- "changeemail-cancel": "Anuła",
"resettokens-token-label": "$1 (valor atuale: $2)",
"bold_sample": "Testo in grosso",
"bold_tip": "Testo in grosso",
@@ -741,7 +740,6 @@
"mergehistory-same-destination": "Le pàxene de origine e de destinasion no le pode èssar la stessa",
"mergehistory-reason": "Motivassion:",
"mergelog": "Registro de le unioni",
- "pagemerge-logentry": "gà unìo [[$1]] a [[$2]] (revisioni fin a $3)",
"revertmerge": "Desfa union",
"mergelogpagetext": "Qua de seguito vien presentà na lista de le ultime operazion de unione de la cronologia de na pagina in un'altra.",
"history-title": "$1: cronołojia dełe modifeghe",
@@ -807,7 +805,7 @@
"prefs-user-pages": "Pàjine utente",
"prefs-personal": "Profiło utente",
"prefs-rc": "Ultime modifeghe",
- "prefs-watchlist": "Pàjine tegnùe d'ocio",
+ "prefs-watchlist": "Pàgine tegnùe d'òcio",
"prefs-watchlist-days": "Nùmaro de giòrni da far védar nei osservati speciali:",
"prefs-watchlist-days-max": "Masimo $1 {{PLURAL:$1|xorno|xorni}}",
"prefs-watchlist-edits": "Nùmaro de modifiche da far védar con le funzion avanzade:",
@@ -1336,7 +1334,6 @@
"statistics": "Statisteghe",
"statistics-header-pages": "Statìsteghe relative a le pàxene",
"statistics-header-edits": "Statìsteghe relative a i canbiamenti",
- "statistics-header-views": "Statìsteghe relative a le visualizassion",
"statistics-header-users": "Statistiche dei utenti",
"statistics-header-hooks": "Altre statìsteghe",
"statistics-articles": "Pagine de contenuti",
@@ -1345,13 +1342,9 @@
"statistics-files": "File cargà",
"statistics-edits": "Modifiche a scuminsiar da l'istalassion de {{SITENAME}}",
"statistics-edits-average": "Canbiamenti in media par pagina",
- "statistics-views-total": "Visualizasion totali",
- "statistics-views-total-desc": "Xe lassà fora le viste de pagine speciali o mia esistenti",
- "statistics-views-peredit": "Visualizassion par modifica",
"statistics-users": "[[Special:ListUsers|Utenti]] registrà",
"statistics-users-active": "Utenti atìvi",
"statistics-users-active-desc": "Utenti che gà fato almanco un'azion in {{PLURAL:$1|tel'ultimo zorno|in tei ultimi $1 zorni}}",
- "statistics-mostpopular": "Pagine piassè visità",
"pageswithprop": "Pagine co na proprietà de pagina",
"pageswithprop-legend": "Pagine co na proprietà de pagina",
"pageswithprop-text": "Sta pagina la elenca le pagine che dòpara na particolare proprietà de pagina.",
@@ -1389,7 +1382,6 @@
"uncategorizedtemplates": "Modèi che no gà categorie",
"unusedcategories": "Categorie mìa doparàe",
"unusedimages": "File mìa doparà",
- "popularpages": "Pagine pì viste",
"wantedcategories": "Categorie richieste",
"wantedpages": "Pagine pì domandà",
"wantedpages-badtitle": "Titolo mia valido nel grupo de risultati: $1",
@@ -1440,7 +1432,6 @@
"querypage-disabled": "Sta pàjina speciałe ła xe dixativà par motivi de prestasion.",
"booksources": "Fonti librarie",
"booksources-search-legend": "Riserca de fonti librarie",
- "booksources-go": "Va",
"booksources-text": "De seguito vien presentà un elenco de colegamenti verso siti foresti che vende libri novi e usài, atraverso i quali se pol otegner piassè informazioni sul testo sercà.",
"booksources-invalid-isbn": "El nùmaro ISBN inserìo no'l xe mia valido: controla de novo se te lo ghè copià justo da la fonte originale.",
"specialloguserlabel": "Asion efetuà da:",
@@ -1537,8 +1528,8 @@
"emailuserfooter": "Sta e-mail la xe stà mandà da $1 a $2 'traverso la funsion \"Manda na e-mail a l'utente\" su {{SITENAME}}.",
"usermessage-summary": "Messajo de sistema.",
"usermessage-editor": "Messagero de sistema",
- "watchlist": "Pàjine tegnùe d'ocio",
- "mywatchlist": "Pàjine tegnùe d'ocio",
+ "watchlist": "Pàgine tegnùe d'òcio",
+ "mywatchlist": "Pàgine tegnùe d'òcio",
"watchlistfor2": "De $1 $2",
"nowatchlist": "No te ghè indicà pagine da tegner d'ocio.",
"watchlistanontext": "Per vardar e modifegar l'ełenco de i osservati speciałi bisogna $1.",
@@ -1557,7 +1548,7 @@
"wlheader-enotif": "Xe ativà la notifica via e-mail.",
"wlheader-showupdated": "Le pagine che xe stà canbià da la to ultima visita le xe segnà in '''grosso'''",
"wlnote": "Cuà soto te cati {{PLURAL:$1|'l ultimo canbiamento|i ultimi '''$1''' canbiamenti}} inte {{PLURAL:$2|l'ultema ora|łe ultime '''$2''' ore}}; i dati i xe axornai a łe $4 del $3.",
- "wlshowlast": "Mostra le ultime $1 ore $2 zorni $3",
+ "wlshowlast": "Mostra le ultime $1 ore $2 zorni",
"watchlist-options": "Inpostassion de le pagine tegnùe d'ocio",
"watching": "Taco a tegner d'ocio...",
"unwatching": "Desmeto de tegner d'ocio...",
@@ -1604,7 +1595,6 @@
"delete-toobig": "La cronologia de sta pagina la xe longa assè (oltre $1 {{PLURAL:$1|revision|revisioni}}). La so scancelazion la xe stà limità par evitar de crear acidentalmente dei problemi de funzionamento al database de {{SITENAME}}.",
"delete-warning-toobig": "La cronologia de sta pagina le xe longa assè (oltre $1 {{PLURAL:$1|revision|revisioni}}). La so scancelazion la pode crear dei problemi de funzionamento al database de {{SITENAME}}; procedi con cautela.",
"rollback": "Anuła łe modifighe",
- "rollback_short": "Rollback",
"rollbacklink": "tira indrìo i canbiamenti",
"rollbacklinkcount": "rollback de {{PLURAL:$1|na modifega|$1 modifeghe}}",
"rollbacklinkcount-morethan": "rollback de pì de {{PLURAL:$1|na modifega|$1 modifeghe}}",
@@ -2015,18 +2005,14 @@
"import-rootpage-nosubpage": "El namespace \"$1\" de ła pàjina prinsipałe nó 'l permete de 'ver sotopajine.",
"importlogpage": "Inportassion",
"importlogpagetext": "Registro de łe inportazion d'ufiçio de pàxene provenienti da altre wiki, conplete de cronołogia.",
- "import-logentry-upload": "gà inportà $1 tramite caricamento de file",
"import-logentry-upload-detail": "{{PLURAL:$1|una revixion importà|$1 revixion importae}}",
- "import-logentry-interwiki": "gà trasferìo da altra wiki ła pàxena $1",
"import-logentry-interwiki-detail": "{{PLURAL:$1|una revixion importà|$1 revixion importae}} da $2",
"javascripttest": "Sperimentasion JavaScript",
- "javascripttest-title": "In execusion test par $1",
"javascripttest-pagetext-noframework": "Sta pàjina ła xe riservà a l'execusion de test de JavaScript.",
"javascripttest-pagetext-unknownframework": "Framework de test sconosùo \"$1\".",
"javascripttest-pagetext-frameworks": "Par piasere, siełi uno de i seguenti framework pa' i test: $1",
"javascripttest-pagetext-skins": "Siełi na skin có cui exeguir i test:",
"javascripttest-qunit-intro": "Varda so mediawiki.org ła [$1 documentasion rivardante i test].",
- "javascripttest-qunit-heading": "Suite de test de JavaScript par QUnit in MediaWiki",
"tooltip-pt-userpage": "La to pagina utente",
"tooltip-pt-anonuserpage": "La pàxena utente de sto indirizo IP",
"tooltip-pt-mytalk": "La to pagina de discussion",
@@ -2125,7 +2111,6 @@
"pageinfo-robot-policy": "Stato par i motori de riserca",
"pageinfo-robot-index": "Indicizabile",
"pageinfo-robot-noindex": "Mia indicizabile",
- "pageinfo-views": "Nùmaro de visite",
"pageinfo-watchers": "Nùmaro de utenti che tien d'ocio sta pagina",
"pageinfo-few-watchers": "Manco de $1 {{PLURAL:$1|oservador|oservadori}}",
"pageinfo-redirects-name": "Rimandi verso sta pagina",
@@ -2579,7 +2564,6 @@
"exif-urgency-low": "Basa ($1)",
"exif-urgency-high": "Alta ($1)",
"exif-urgency-other": "Priorità definie dal utente ($1)",
- "watchlistall2": "tute",
"namespacesall": "Tuti",
"monthsall": "tuti",
"confirmemail": "Conferma indirisso e-mail",
@@ -2653,7 +2637,6 @@
"watchlisttools-edit": "Varda e canbia le pagine tegnùe d'ocio",
"watchlisttools-raw": "Canbia la lista in formato testo",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|msj]])",
- "unknown_extension_tag": "Tag estension sconossiùo: \"$1\"",
"duplicate-defaultsort": "Ocio: la ciave de ordinamento predefinìa \"$2\" la va in conflito co' quela de prima \"$1\".",
"version": "Version",
"version-extensions": "Estension instalè",
@@ -2669,7 +2652,7 @@
"version-parser-function-hooks": "Hook par funzioni del parser",
"version-hook-name": "Nome de l'hook",
"version-hook-subscribedby": "Sotoscrizioni",
- "version-version": "(Version $1)",
+ "version-version": "($1)",
"version-license": "Licensa MediaWiki",
"version-ext-license": "Licensa",
"version-ext-colheader-name": "Estension",
@@ -2721,6 +2704,7 @@
"specialpages-group-wiki": "Strumenti e informasion so'l projeto",
"specialpages-group-redirects": "Pagine speciali de rimando",
"specialpages-group-spam": "Strumenti anti spam",
+ "specialpages-group-developer": "Strumenti pa' i svilupadori",
"blankpage": "Pagina voda",
"intentionallyblankpage": "Sta pagina la xe stà lassà voda aposta",
"external_image_whitelist": " #Lassa sta riga esatamente cussita come la xe<pre>\n#Inserissi i framenti de espression regolari (solo el toco che va fra //) de seguito\n#Ste qua le corispondarà coi URL de imagini foreste (hotlinked)\n#Quele che corispondarà le vegnarà fora come imagini, se no vegnarà mostrà solo un colegamento a l'imagine\n#Le linee che taca con # le xe de comento\n#No vien tegnù conto del majuscolo/minuscolo\n\n#Inserissi de sora de sta riga tuti i framenti de regex. Lassa sta riga esatamente cussita come la xe</pre>",
@@ -2801,19 +2785,20 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|el|la}} ga canbià l'apartenensa a grupi de $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|el|la}} xe stà automategamente promoso/a da $4 a $5",
"rightsnone": "(nissun)",
+ "revdelete-summary": "modifica ogeto",
+ "feedback-adding": "Inserimento del feedback inte ła pàjina...",
+ "feedback-bugcheck": "Otimo! Verifega che nó 'l sia xà infrà i [$1 bug conosui].",
+ "feedback-bugnew": "Controło efetuà. Segnała un novo bug",
"feedback-bugornote": "Se se xe in grado de descrivare el problema tenico riscontrà in maniera precixa, [$1 segnałare el bug]. In alternadiva, se pol doparar el moduło senplifegà cuà soto. El comento inserio el sarà xontà a ła pàjina \"[$3 $2]\", insieme al propio nome utente.",
- "feedback-subject": "Ogeto:",
- "feedback-message": "Messajo:",
"feedback-cancel": "Anuła",
- "feedback-submit": "Invia feedback",
- "feedback-adding": "Inserimento del feedback inte ła pàjina...",
+ "feedback-close": "Fato",
"feedback-error1": "Eror: Da ła API xe rivà un rexultà nó riconosùo",
"feedback-error2": "Eror: Nó xe sta posibiłe exeguir ła modifega",
"feedback-error3": "Errore: Nisuna risposta da ła API",
+ "feedback-message": "Messajo:",
+ "feedback-subject": "Ogeto:",
+ "feedback-submit": "Manda",
"feedback-thanks": "Grasie! El to feedback el xe sta publicà a ła pàjina \"[$2 $1]\".",
- "feedback-close": "Fato",
- "feedback-bugcheck": "Otimo! Verifega che nó 'l sia xà infrà i [$1 bug conosui].",
- "feedback-bugnew": "Controło efetuà. Segnała un novo bug",
"searchsuggest-search": "Serca",
"searchsuggest-containing": "che contien...",
"api-error-badaccess-groups": "Nó te si autorixà a cargar documenti so sta wiki.",
@@ -2876,5 +2861,27 @@
"expand_templates_remove_comments": "Ignora i comenti",
"expand_templates_remove_nowiki": "Cava i tag <nowiki> dal risultato",
"expand_templates_generate_xml": "Mostra àlbaro sintàtico XML",
- "expand_templates_preview": "Anteprima"
+ "expand_templates_preview": "Anteprima",
+ "special-characters-group-latin": "Latìn",
+ "special-characters-group-latinextended": "Latìn estexo",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Sìnboli",
+ "special-characters-group-greek": "Grego",
+ "special-characters-group-cyrillic": "Cirìlico",
+ "special-characters-group-arabic": "Àrabo",
+ "special-characters-group-arabicextended": "Arabo estexo",
+ "special-characters-group-persian": "Persian",
+ "special-characters-group-hebrew": "Abràego",
+ "special-characters-group-bangla": "Bengałexe",
+ "special-characters-group-tamil": "Tamil",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Singalese",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-devanagari": "Devanagari",
+ "special-characters-group-thai": "Thaiłandexe",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer",
+ "special-characters-title-endash": "lineeta ene",
+ "special-characters-title-emdash": "lineeta eme",
+ "special-characters-title-minus": "segno meno"
}
diff --git a/languages/i18n/vep.json b/languages/i18n/vep.json
index d00ada80..36f17887 100644
--- a/languages/i18n/vep.json
+++ b/languages/i18n/vep.json
@@ -444,7 +444,6 @@
"changeemail-newemail": "Uz' e-počtan adres",
"changeemail-none": "(ei ole)",
"changeemail-submit": "Toižetada e-počtan adres",
- "changeemail-cancel": "Heitta",
"resettokens-tokens": "Tokenad:",
"bold_sample": "Lihavoitud tekst",
"bold_tip": "Lihavoitud tekst",
@@ -650,7 +649,6 @@
"mergehistory-same-destination": "Augotižlehpolen da metlehpolen keskes pidab tehta eroid",
"mergehistory-reason": "Sü:",
"mergelog": "Ühtenzoitusiden aigkirj",
- "pagemerge-logentry": "[[$1]] da [[$2]]-lehtpoled oma ühtenzoittud (versijad $3-hesai)",
"revertmerge": "Jagada",
"mergelogpagetext": "Naku om tantoižiden lehtpoliden nimiden ühtenzoitusiden nimikirjutez.",
"history-title": "\"$1\"-lehtpolen toižetusiden istorii",
@@ -692,7 +690,6 @@
"searchrelated": "sidotud",
"searchall": "kaik",
"showingresults": "Alemba ozutadas {{PLURAL:$1|'''1''' rezul'tat|'''$1''' rezul'tatad}} nomeraspäi #'''$2''' augotaden.",
- "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-š rezul'tatoišpäi|Rezul'tatad '''$1–$2''' '''$3'''-špäi}} '''$4'''-n täht",
"search-nonefound": "Ecmižhe ei löudnus rezul'tatoid.",
"powersearch-legend": "Levitoittud ecind",
"powersearch-ns": "Ecind nimiavaruziš:",
@@ -1148,13 +1145,11 @@
"unusedtemplateswlh": "toižed kosketused",
"randompage": "Statjaline lehtpol'",
"randompage-nopages": "\"$1\"-{{PLURAL:$2|Nimiavarudes|Nimiavaruziš}} ei ole lehtpolid.",
- "randomincategory-selectcategory-submit": "Mäne",
"randomredirect": "Statjaline läbikosketuz",
"randomredirect-nopages": "\"$1\"-nimiavaruses ei ole läbikosketusid.",
"statistics": "Statistik",
"statistics-header-pages": "Lehtpoliden statistik",
"statistics-header-edits": "Redaktiruida statistikad",
- "statistics-header-views": "Kacta statistikha",
"statistics-header-users": "Kävutajiden statistik",
"statistics-header-hooks": "Toine statistik",
"statistics-articles": "Südäimištlehtpol't",
@@ -1163,12 +1158,9 @@
"statistics-files": "Jügetoittud failad",
"statistics-edits": "Toižetusiden lugu {{SITENAME}}-saitan seižutamižessai.",
"statistics-edits-average": "Toižetusiden keskmäine lugu lehtpolel",
- "statistics-views-total": "Kaiked kacundoid",
- "statistics-views-peredit": "Kacundoid redakcijas",
"statistics-users": "Registriruidud [[Special:ListUsers|kävutajad]]",
"statistics-users-active": "Activižed kävutajad",
"statistics-users-active-desc": "Kävutajad, kudambad ozutiba aktivižut {{PLURAL:$1|jäl’gmäižen päivän|$1 jäl'gmäižil päivil}}",
- "statistics-mostpopular": "Kaikiš populärižembad lehtpoled",
"pageswithprop-submit": "Tege",
"doubleredirects": "Kaksitadud läbikosketused",
"double-redirect-fixed-move": "[[$1]]-lehtpol' om udesnimitadud. Se läbikosketab nügüd' [[$2]]-lehtpolele.",
@@ -1197,7 +1189,6 @@
"uncategorizedtemplates": "Järgendamatomad šablonad",
"unusedcategories": "Kävutamatomad kategorijad",
"unusedimages": "Kävutamatomad failad",
- "popularpages": "Populärižed lehtpoled",
"wantedcategories": "Ectud kategorijad",
"wantedpages": "Ectud lehtpoled",
"wantedpages-badtitle": "Petuzline pälkirjutez küzumižen rezul'tatoiš: $1",
@@ -1243,7 +1234,6 @@
"booksources": "Kirjpurtked",
"booksources-search-legend": "Ectä kirjpurtkid",
"booksources-isbn": "ISBN:",
- "booksources-go": "Ectä",
"booksources-text": "Naku om kosketusid saitoile, kudambil mödas uzid da kuluid kirjoid. Niilpäi voib löuta ližainformacijad ectud kirjoiš:",
"booksources-invalid-isbn": "Nece ISBN, näguse, om vär; Kodvgat, oikti-k oled kopiruinuded sidä originaližes purtkespäi.",
"specialloguserlabel": "Kävutai:",
@@ -1339,7 +1329,7 @@
"notvisiblerev": "Versijad oma čutud",
"watchlist-details": "Teiden kaclendnimikirjuteses om {{PLURAL:$1|$1 lehtpol'|$1 lehtpol't}}. Lodulehtpoled ei olgoi neciš lugus.",
"wlheader-enotif": "Tedotand e-počtadme om kävutamas.",
- "wlshowlast": "Ozutada jäl'gmäižiš $1 časuiš da $2 päiviš $3",
+ "wlshowlast": "Ozutada jäl'gmäižiš $1 časuiš da $2 päiviš",
"watchlist-options": "Kaclendnimikirjutesen järgendused",
"watching": "Ližaduz kaclendnimikirjuteshe...",
"unwatching": "Heitmine kaclendnimikirjutesespäi...",
@@ -1375,7 +1365,6 @@
"delete-toobig": "Necil lehtpolel om avar redaktiruinadan istorii - enamba {{PLURAL:$1|versii|versijad}}.\nMugoižiden lehtpoliden čudand om kel'tud, miše sait radaiži normaližikš.",
"delete-warning-toobig": "Necil lehtpolel om avar redaktiruinadan istorii - enamba $1 {{PLURAL:$1|versii|versijad}}.\nMugoižiden lehtpoliden čudand voiži telustada {{SITENAME}}-saitan andmuzbazan normaližele radole.\nTehkat kaik varumujandanke!",
"rollback": "Endištada toižetused",
- "rollback_short": "Endištuz",
"rollbacklink": "Endištada",
"rollbackfailed": "Endištuz om keskustadud petusen tagut.",
"cantrollback": "Ei voi endištada toižetusid;\nJäl'gmäine toižetai om üksjäižen lehtpolen avtoran.",
@@ -1680,7 +1669,6 @@
"thumbnail_image-missing": "Näguse, ei ole $1-failad",
"import": "Toda lehtesid toižiš saitoišpäi",
"importinterwiki": "Transwiki-tomine",
- "import-interwiki-source": "Wikipurde/lehtpol':",
"import-interwiki-history": "Kopiruida kaik necen lehtpolen toižetamižen istorii",
"import-interwiki-templates": "Mülütada kaik šablonad",
"import-interwiki-submit": "Import",
@@ -1790,7 +1778,6 @@
"spambot_username": "MediaWikid puhtastadas spamaspäi",
"pageinfo-header-edits": "Redakcijoiden istorii",
"pageinfo-article-id": "Lehtpolen ID",
- "pageinfo-views": "Kacundoiden lugu",
"pageinfo-watchers": "Lehtpolen kaclijoiden lugu",
"pageinfo-edits": "Redakcijoiden lugumär",
"pageinfo-authors": "Erazvuiččiden avtoroiden lugu",
@@ -2129,7 +2116,6 @@
"exif-urgency-normal": "Normaline ($1)",
"exif-urgency-low": "Madal ($1)",
"exif-urgency-high": "Korged ($1)",
- "watchlistall2": "kaik",
"namespacesall": "kaik",
"monthsall": "kaik",
"confirmemail": "Vahvištoitta e-počtan adres",
@@ -2206,7 +2192,6 @@
"hijri-calendar-m1": "Muharram",
"hijri-calendar-m2": "Safar",
"hijri-calendar-m3": "Rabi al-aual",
- "unknown_extension_tag": "Tundmatoi \"$1\"-ližanvirg",
"duplicate-defaultsort": "'''Varutuz:''' Sortiruindan avadim äugotižjärgendusen mödhe \"$2\" toižetab edeližen avadimen äugotižjärgendusen mödhe \"$1\".",
"version": "Versii",
"version-extensions": "Seižutadud ližad",
@@ -2222,7 +2207,7 @@
"version-parser-function-hooks": "Sintaksižen analizatoran funkcijoiden sabutajad",
"version-hook-name": "Sabustajan nimi",
"version-hook-subscribedby": "Ezipakitoitajad",
- "version-version": "(Versii $1)",
+ "version-version": "($1)",
"version-license": "Licenzii",
"version-poweredby-others": "toižed",
"version-software": "Seižutadud programmišt",
@@ -2295,12 +2280,13 @@
"revdelete-restricted": "kaidendused administratoriden täht",
"revdelete-unrestricted": "kaidendused heittud administratoriden täht",
"rightsnone": "(ei ole)",
- "feedback-subject": "Tem:",
- "feedback-message": "Tedotuz:",
+ "revdelete-summary": "kaik toižetused",
"feedback-cancel": "Heitta pätand",
+ "feedback-close": "Vaumiž",
"feedback-error2": "Petuz. Ei voi redaktiruida",
"feedback-error3": "Petuz. API ei anda vastust",
- "feedback-close": "Vaumiž",
+ "feedback-message": "Tedotuz:",
+ "feedback-subject": "Tem:",
"searchsuggest-search": "Ectä",
"searchsuggest-containing": "mülütajad...",
"api-error-empty-file": "Teil oigetud fail om pall'az.",
diff --git a/languages/i18n/vi.json b/languages/i18n/vi.json
index 5f0dde2b..21f39b23 100644
--- a/languages/i18n/vi.json
+++ b/languages/i18n/vi.json
@@ -25,7 +25,10 @@
"Withoutaname",
"לערי ריינהארט",
"아라",
- "Tranquanganh"
+ "Tranquanganh",
+ "Max20091",
+ "Dinhxuanduyet",
+ "Macofe"
]
},
"tog-underline": "Gạch chân liên kết:",
@@ -38,7 +41,7 @@
"tog-showtoolbar": "Hiển thị thanh định dạng",
"tog-editondblclick": "Nhấn đúp để sửa đổi trang",
"tog-editsectiononrightclick": "Bấm chuột phải vào đề mục để sửa đổi phần trang",
- "tog-watchcreations": "Tự động theo dõi các trang tôi viết mới và các tập tin tôi tải lên",
+ "tog-watchcreations": "Tự động theo dõi các trang tôi tạo và các tập tin tôi tải lên",
"tog-watchdefault": "Tự động theo dõi các trang và tập tin tôi sửa",
"tog-watchmoves": "Tự động theo dõi các trang và tập tin tôi di chuyển",
"tog-watchdeletion": "Tự động theo dõi các trang và tập tin tôi xóa",
@@ -53,7 +56,7 @@
"tog-shownumberswatching": "Hiển thị số người đang xem",
"tog-oldsig": "Chữ ký hiện tại:",
"tog-fancysig": "Xem chữ ký là mã wiki (không có liên kết tự động)",
- "tog-uselivepreview": "Xem trước trực tiếp (thử nghiệm)",
+ "tog-uselivepreview": "Xem trước trực tiếp",
"tog-forceeditsummary": "Nhắc tôi khi tôi quên tóm lược sửa đổi",
"tog-watchlisthideown": "Ẩn các sửa đổi của tôi khỏi danh sách theo dõi",
"tog-watchlisthidebots": "Ẩn các sửa đổi của robot khỏi danh sách theo dõi",
@@ -241,6 +244,7 @@
"pool-queuefull": "Đầy hàng đợi khối ứng dụng (pool queue)",
"pool-errorunknown": "Lỗi lạ",
"pool-servererror": "Dịch vụ chia việc xử lý (pool counter) không có sẵn ($1).",
+ "poolcounter-usage-error": "Lỗi sử dụng: $1",
"aboutsite": "Giới thiệu {{SITENAME}}",
"aboutpage": "Project:Giới thiệu",
"copyright": "Nội dung được phát hành theo $1, ngoại trừ khi có ghi chú khác.",
@@ -250,6 +254,7 @@
"disclaimers": "Phủ nhận",
"disclaimerpage": "Project:Phủ nhận chung",
"edithelp": "Trợ giúp sửa đổi",
+ "helppage-top-gethelp": "Trợ giúp",
"mainpage": "Trang Chính",
"mainpage-description": "Trang Chính",
"policy-url": "Project:Quy định và hướng dẫn",
@@ -329,10 +334,13 @@
"readonly_lag": "Cơ sở dữ liệu bị khóa tự động trong khi các máy chủ cập nhật thông tin của nhau.",
"internalerror": "Lỗi nội bộ",
"internalerror_info": "Lỗi nội bộ: $1",
+ "internalerror-fatal-exception": "Ngoại lệ chí tử loại “$1”",
"filecopyerror": "Không thể chép tập tin “$1” đến “$2”.",
"filerenameerror": "Không thể đổi tên tập tin “$1” thành “$2”.",
"filedeleteerror": "Không thể xóa tập tin “$1”.",
"directorycreateerror": "Không thể tạo được danh mục “$1”.",
+ "directoryreadonlyerror": "Thư mục “$1” là chỉ-đọc.",
+ "directorynotreadableerror": "Không đọc được thư mục “$1”.",
"filenotfound": "Không tìm thấy tập tin “$1”.",
"unexpected": "Không hiểu giá trị: “$1”=“$2”.",
"formerror": "Lỗi: không gửi mẫu đi được.",
@@ -354,7 +362,8 @@
"viewsourcetext": "Bạn vẫn có thể xem và chép xuống mã nguồn của trang này:",
"viewyourtext": "Bạn vẫn có thể xem và chép xuống mã nguồn '''các sửa đổi của bạn''' tại trang này:",
"protectedinterface": "Trang này cung cấp một thông điệp trong giao diện phần mềm, và bị khóa để tránh phá hoại. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
- "editinginterface": "'''Lưu ý:''' Bạn đang sửa chữa một trang dùng để cung cấp thông điệp giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng wiki này. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
+ "editinginterface": "<strong>Lưu ý:</strong> Bạn đang sửa chữa một trang dùng để cung cấp thông điệp giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng wiki này.",
+ "translateinterface": "Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/?setlang=vi translatewiki.net], dự án bản địa hóa MediaWiki.",
"cascadeprotected": "Trang này đã bị khóa không cho sửa đổi, vì nó được nhúng vào {{PLURAL:$1|trang|những trang}} đã bị khóa với tùy chọn “khóa theo tầng” được kích hoạt:\n$2",
"namespaceprotected": "Bạn không có quyền sửa các trang trong không gian tên '''$1'''.",
"customcssprotected": "Bạn không có quyền sửa đổi trang CSS này vì nó chứa các tùy chọn cá nhân của một thành viên khác.",
@@ -411,6 +420,8 @@
"userlogin-resetlink": "Quên mất thông tin đăng nhập?",
"userlogin-resetpassword-link": "Quên mật khẩu?",
"userlogin-helplink2": "Trợ giúp đăng nhập",
+ "userlogin-loggedin": "Bạn đã đăng nhập với tên {{GENDER:$1}}$1.\nHãy sử dụng biểu mẫu ở dưới để đăng nhập với tài khoản người dùng khác.",
+ "userlogin-createanother": "Mở thêm tài khoản",
"createacct-emailrequired": "Địa chỉ thư điện tử",
"createacct-emailoptional": "Địa chỉ thư điện tử (tùy chọn)",
"createacct-email-ph": "Nhập địa chỉ thư điện tử của bạn",
@@ -571,6 +582,7 @@
"anoneditwarning": "<strong>Cảnh báo:</strong> Bạn chưa đăng nhập. Địa chỉ IP của bạn sẽ bị hiển thị công khai nếu bạn thực hiện bất kỳ sửa đổi nào. Nếu bạn <strong>[$1 đăng nhập]</strong> hoặc <strong>[$2 mở tài khoản]</strong>, sửa đổi của bạn sẽ được gán bởi tên đăng nhập của bạn, cùng nhiều lợi ích khác.",
"anonpreviewwarning": "''Bạn chưa đăng nhập. Khi lưu trang này, địa chỉ IP của bạn sẽ được ghi vào lịch sử trang.''",
"missingsummary": "'''Nhắc nhở:''' Bạn đã không ghi lại tóm lược sửa đổi. Nếu bạn nhấn Lưu trang một lần nữa, sửa đổi của bạn sẽ được lưu mà không có tóm lược.",
+ "selfredirect": "<strong>Cảnh báo:</strong> Bạn sắp đổi hướng trang này đến chính trang này.\nCó lẽ bạn đã định rõ mục tiêu sai hoặc bạn đang sửa trang sai.\nNếu bạn bấm “{{int:savearticle}}” lần nữa, trang đổi hướng sẽ được tạo ra.",
"missingcommenttext": "Xin hãy gõ vào lời bàn luận ở dưới.",
"missingcommentheader": "'''Nhắc nhở:''' Bạn chưa ghi chủ đề/tiêu đề cho bàn luận này.\nNếu bạn nhấn nút \"{{int:savearticle}}\" lần nữa, sửa đổi của bạn sẽ được lưu mà không có đề mục.",
"summary-preview": "Xem trước dòng tóm lược:",
@@ -669,6 +681,10 @@
"content-model-text": "văn bản thuần",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "Đối tượng trống",
+ "content-json-empty-array": "Mảng trống",
+ "duplicate-args-category": "Trang đưa đối số thừa vào bản mẫu",
+ "duplicate-args-category-desc": "Trang đưa một đối số nhiều lần vào một bản mẫu được nhúng, thí dụ <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> hoặc <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Cảnh báo: Trang này có quá nhiều lần gọi hàm cú pháp cần mức độ xử lý cao.\n\nNó nên ít hơn $2 {{PLURAL:$2|lần gọi|lần gọi}}, hiện giờ đang là {{PLURAL:$1|$1 lần gọi|$1 lần gọi}}.",
"expensive-parserfunction-category": "Trang có quá nhiều lời gọi hàm cú pháp cần mức độ xử lý cao",
"post-expand-template-inclusion-warning": "Cảnh báo: Kích thước bản mẫu nhúng vào quá lớn.\nMột số bản mẫu sẽ không được đưa vào.",
@@ -723,7 +739,7 @@
"history-feed-empty": "Trang bạn yêu cầu không tồn tại. Có thể là nó đã bị xóa khỏi wiki hay được đổi tên. Hãy [[Special:Search|tìm kiếm trong wiki]] về các trang mới có liên quan.",
"rev-deleted-comment": "(tóm lược sửa đổi đã bị xóa)",
"rev-deleted-user": "(tên người dùng đã bị xóa)",
- "rev-deleted-event": "(tác vụ nhật trình đã bị xóa)",
+ "rev-deleted-event": "(chi tiết nhật trình đã bị xóa)",
"rev-deleted-user-contribs": "[tên người dùng hay địa chỉ IP bị ẩn – sửa đổi được ẩn khỏi danh sách đóng góp]",
"rev-deleted-text-permission": "Phiên bản này đã bị '''xóa'''.\nCó thể có thêm chi tiết tại [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} nhật trình xóa].",
"rev-suppressed-text-permission": "Phiên bản này đã bị '''ẩn'''.\nCó thêm chi tiết tại [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} nhật trình ẩn].",
@@ -757,7 +773,7 @@
"revdelete-legend": "Thiết lập hạn chế khả kiến",
"revdelete-hide-text": "Nội dung phiên bản",
"revdelete-hide-image": "Ẩn nội dung tập tin",
- "revdelete-hide-name": "Ẩn tác vụ và đích của tác vụ",
+ "revdelete-hide-name": "Ẩn mục tiêu và tham số",
"revdelete-hide-comment": "Tóm lược sửa đổi",
"revdelete-hide-user": "Tên người dùng hay địa chỉ IP của người viết trang",
"revdelete-hide-restricted": "Ẩn giấu thông tin khỏi các Quản lý lẫn thành viên khác",
@@ -811,7 +827,6 @@
"mergehistory-same-destination": "Trang nguồn và trang đích không được trùng tên",
"mergehistory-reason": "Lý do:",
"mergelog": "Nhật trình trộn",
- "pagemerge-logentry": "đã trộn [[$1]] vào [[$2]] (sửa đổi cho đến $3)",
"revertmerge": "Bỏ trộn",
"mergelogpagetext": "Dưới đây là danh sách các thao tác trộn mới nhất của lịch sử một trang vào trang khác.",
"history-title": "Lịch sử sửa đổi của “$1”",
@@ -852,6 +867,7 @@
"search-result-category-size": "$1 trang thành viên ($2 thể loại con, $3 tập tin)",
"search-redirect": "(đổi hướng $1)",
"search-section": "(đề mục $1)",
+ "search-category": "(thể loại $1)",
"search-file-match": "(khớp nội dung tập tin)",
"search-suggest": "Có phải bạn muốn tìm: $1",
"search-interwiki-caption": "Các dự án liên quan",
@@ -885,6 +901,11 @@
"prefs-personal": "Thông tin cá nhân",
"prefs-rc": "Thay đổi gần đây",
"prefs-watchlist": "Theo dõi",
+ "prefs-editwatchlist": "Sửa các trang tôi theo dõi",
+ "prefs-editwatchlist-label": "Chỉnh sửa các mục trong danh sách theo dõi của bạn:",
+ "prefs-editwatchlist-edit": "Xem và xoá các tiêu đề trong danh sách theo dõi của bạn",
+ "prefs-editwatchlist-raw": "Sửa danh sách theo dõi dạng thô",
+ "prefs-editwatchlist-clear": "Xóa sạch danh sách theo dõi của bạn",
"prefs-watchlist-days": "Số ngày hiển thị trong danh sách theo dõi:",
"prefs-watchlist-days-max": "Tối đa $1 ngày",
"prefs-watchlist-edits": "Số lần sửa đổi tối đa trong danh sách theo dõi mở rộng:",
@@ -975,6 +996,7 @@
"prefs-tokenwatchlist": "Dấu hiệu",
"prefs-diffs": "Khác biệt",
"prefs-help-prefershttps": "Đăng xuất và đăng nhập lại để áp dụng tùy chọn này.",
+ "prefswarning-warning": "Bạn chưa lưu những thay đổi tùy chọn đã thực hiện.\nNếu bạn rời khỏi trang này mà không bấm “$1”, các tùy chọn của bạn sẽ không được cập nhật.",
"prefs-tabs-navigation-hint": "Mẹo: Bạn có thể bấm các phím mũi tên trái phải để luân chuyển qua các thẻ trong danh sách thẻ.",
"email-address-validity-valid": "Có vẻ hợp lệ",
"email-address-validity-invalid": "Yêu cầu địa chỉ hợp lệ!",
@@ -1060,6 +1082,7 @@
"right-protect": "Thay đổi mức khóa và sửa trang khóa theo tầng",
"right-editprotected": "Sửa trang khóa ở mức “{{int:protect-level-sysop}}”",
"right-editsemiprotected": "Sửa trang khóa ở mức “{{int:protect-level-autoconfirmed}}”",
+ "right-editcontentmodel": "Sửa mô hình nội dung của trang",
"right-editinterface": "Sửa giao diện người dùng",
"right-editusercssjs": "Sửa tập tin CSS và JS của người dùng khác",
"right-editusercss": "Sửa tập tin CSS của người dùng khác",
@@ -1087,6 +1110,7 @@
"right-override-export-depth": "Xuất trang kèm theo các trang được liên kết đến với độ sâu tối đa là 5",
"right-sendemail": "Gửi thư điện tử cho thành viên khác",
"right-passwordreset": "Xem các thư điện tử đặt lại mật khẩu",
+ "right-managechangetags": "Tạo và xóa [[Special:Tags|thẻ]] từ cơ sở dữ liệu",
"newuserlogpage": "Nhật trình mở tài khoản",
"newuserlogpagetext": "Đây là danh sách những tài khoản thành viên mở lên gần đây.",
"rightslog": "Nhật trình cấp quyền thành viên",
@@ -1132,6 +1156,8 @@
"action-viewmywatchlist": "xem danh sách theo dõi của mình",
"action-viewmyprivateinfo": "xem thông tin cá nhân của bạn",
"action-editmyprivateinfo": "sửa đổi thông tin cá nhân của bạn",
+ "action-editcontentmodel": "sửa mô hình nội dung của trang",
+ "action-managechangetags": "tạo và xóa các thẻ từ cơ sở dữ liệu",
"nchanges": "$1 {{PLURAL:$1|thay đổi|thay đổi}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sau lần truy cập vừa rồi}}",
"enhancedrc-history": "lịch sử",
@@ -1202,9 +1228,9 @@
"uploaderror": "Lỗi khi tải lên",
"upload-recreate-warning": "'''Cảnh báo: Một tập tin với tên này đã từng bị xóa hoặc di chuyển.'''\n\nNhật trình xóa và di chuyển của trang này được ghi ở dưới để bạn tiện theo dõi:",
"uploadtext": "Hãy sử dụng mẫu sau để tải tập tin lên.\nĐể xem hoặc tìm kiếm những hình ảnh đã được tải lên trước đây, xin mời xem [[Special:FileList|danh sách các tập tin đã tải lên]].\nviệc tải lên và tải lên lại được ghi lại trong [[Special:Log/upload|nhật trình tải lên]], việc xóa đi được ghi trong [[Special:Log/delete|nhật trình xóa]].\n\nĐể đưa tập tin vào trang, hãy dùng liên kết có một trong các dạng sau:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tập tin.jpg]]</nowiki></code>''' để phiên bản đầy đủ của tập tin\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tập tin.png|200px|nhỏ|trái|văn bản thay thế]]</nowiki></code>''' để dùng hình đã được co lại còn 200 điểm ảnh chiều rộng đặt trong một hộp ở lề bên trái với 'văn bản thay thế' dùng để mô tả\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Tập tin.ogg]]</nowiki></code>''' để liên kết trực tiếp đến tập tin mà không hiển thị nó",
- "upload-permitted": "Các định dạng tập tin được phép tải lên: $1.",
- "upload-preferred": "Các định dạng tập tin nên dùng: $1.",
- "upload-prohibited": "Các định dạng tập tin bị cấm: $1.",
+ "upload-permitted": "{{PLURAL:$2|Định dạng|Các định dạng}} tập tin được phép tải lên: $1.",
+ "upload-preferred": "{{PLURAL:$1|Định dạng|Các định dạng}} tập tin nên dùng: $1.",
+ "upload-prohibited": "{{PLURAL:$2|Định dạng|Các định dạng}} tập tin bị cấm: $1.",
"uploadlogpage": "Nhật trình tải lên",
"uploadlogpagetext": "Dưới đây là danh sách các tập tin đã tải lên gần nhất.\nXem [[Special:NewFiles|trang trưng bày các tập tin mới]] để xem trực quan hơn.",
"filename": "Tên tập tin",
@@ -1463,7 +1489,6 @@
"statistics": "Thống kê",
"statistics-header-pages": "Thống kê trang",
"statistics-header-edits": "Thống kê sửa đổi",
- "statistics-header-views": "Thống kê truy cập",
"statistics-header-users": "Thống kê thành viên",
"statistics-header-hooks": "Thống kê khác",
"statistics-articles": "Số trang nội dung",
@@ -1472,13 +1497,9 @@
"statistics-files": "Số tập tin đã tải lên",
"statistics-edits": "Số sửa đổi trang từ khi {{SITENAME}} được thành lập",
"statistics-edits-average": "Số sửa đổi trung bình trên một trang",
- "statistics-views-total": "Số lần xem tổng cộng",
- "statistics-views-total-desc": "Không bao gồm số lần xem các trang không tồn tại và các trang đặc biệt",
- "statistics-views-peredit": "Số lần xem trên một sửa đổi",
"statistics-users": "Số [[Special:ListUsers|thành viên]] có tài khoản",
"statistics-users-active": "Số thành viên tích cực",
"statistics-users-active-desc": "Những thành viên đã hoạt động trong {{PLURAL:$1|ngày|$1 ngày}} qua",
- "statistics-mostpopular": "Các trang được xem nhiều nhất",
"pageswithprop": "Trang có thuộc tính trang",
"pageswithprop-legend": "Các trang có thuộc tính trang",
"pageswithprop-text": "Trang này liệt kê các trang sử dụng một thuộc tính trang nào đó.",
@@ -1519,9 +1540,9 @@
"uncategorizedtemplates": "Bản mẫu chưa được phân loại",
"unusedcategories": "Thể loại trống",
"unusedimages": "Tập tin chưa dùng",
- "popularpages": "Trang nhiều người đọc",
"wantedcategories": "Thể loại cần thiết",
"wantedpages": "Trang cần viết",
+ "wantedpages-summary": "Danh sách các trang không tồn tại có nhiều trang nhất liên kết đến, trừ các trang chỉ có trang đổi hướng đến. Xem danh sách các trang không tồn tại có trang đổi hướng đến tại [[{{#special:BrokenRedirects}}]].",
"wantedpages-badtitle": "Tiêu đề không hợp lệ trong tập kết quả: $1",
"wantedfiles": "Tập tin cần thiết",
"wantedfiletext-cat": "Các tập tin sau được nhúng nhưng không tồn tại. Các tập tin từ kho dùng chung có thể được liệt kê trong khi tồn tại; các trường hợp này được <del>gạch bỏ</del>. Ngoài ra, các trang nhúng tập tin không tồn tại được liệt kê tại [[:$1]].",
@@ -1581,9 +1602,11 @@
"pager-older-n": "{{PLURAL:$1|1|$1}} cũ hơn",
"suppress": "Giám sát viên",
"querypage-disabled": "Trang đặc biệt này bị tắt vì lý do hiệu suất.",
+ "apihelp": "Trợ giúp API",
+ "apihelp-no-such-module": "Không tìm thấy mô đun “$1”",
"booksources": "Nguồn sách",
"booksources-search-legend": "Tìm kiếm nguồn sách",
- "booksources-go": "Tìm kiếm",
+ "booksources-search": "Tìm kiếm",
"booksources-text": "Dưới đây là danh sách những trang bán sách mới và cũ, đồng thời có thể có thêm thông tin về những cuốn sách bạn đang tìm:",
"booksources-invalid-isbn": "ISBN mà bạn cung cấp dường như không đúng; xin hãy kiểm tra lại xem có lỗi gì khi sao chép từ nội dung gốc hay không.",
"specialloguserlabel": "Người thực hiện:",
@@ -1719,7 +1742,7 @@
"wlheader-enotif": "Đã bật thông báo qua thư điện tử.",
"wlheader-showupdated": "Các trang đã thay đổi kể từ lần cuối bạn xem chúng được in '''đậm'''",
"wlnote": "Dưới đây là {{PLURAL:$1|thay đổi duy nhất|<strong>$1</strong> thay đổi gần nhất}} trong {{PLURAL:$2|giờ|<strong>$2</strong> giờ}} qua, tính tới $3 lúc $4.",
- "wlshowlast": "Hiển thị $1 giờ $2 ngày gần đây $3",
+ "wlshowlast": "Hiển thị $1 giờ $2 ngày gần đây",
"watchlist-options": "Tùy chọn về danh sách theo dõi",
"watching": "Đang theo dõi…",
"unwatching": "Đang ngừng theo dõi…",
@@ -1768,7 +1791,6 @@
"deleteprotected": "Bạn không thể xóa trang này vì nó đã được khóa lại.",
"deleting-backlinks-warning": "'''Cảnh báo:''' Có [[Special:WhatLinksHere/{{FULLPAGENAME}}|trang khác]] liên kết đến hoặc nhúng trang mà bạn sắp xóa.",
"rollback": "Lùi tất cả sửa đổi",
- "rollback_short": "Lùi tất cả",
"rollbacklink": "lùi tất cả",
"rollbacklinkcount": "lùi tất cả $1 sửa đổi",
"rollbacklinkcount-morethan": "lùi tất cả hơn $1 sửa đổi",
@@ -1818,7 +1840,7 @@
"protect-othertime": "Thời hạn khác:",
"protect-othertime-op": "thời hạn khác",
"protect-existing-expiry": "Thời hạn hiện thời: $3, $2",
- "protect-existing-expiry-infinity": "Thời gian hết hạn hiện thời: vô hạn",
+ "protect-existing-expiry-infinity": "Thời hạn hiện thời: vô hạn",
"protect-otherreason": "Lý do khác/bổ sung:",
"protect-otherreason-op": "Lý do khác",
"protect-dropdown": "*Các lý do thường dùng khi khóa\n** Bị phá hoại quá mức\n** Bị spam quá mức\n** Bút chiến thiếu tính xây dựng\n** Trang nhiều người xem",
@@ -1878,6 +1900,7 @@
"namespace": "Không gian tên:",
"invert": "Đảo ngược lựa chọn",
"tooltip-invert": "Ẩn các thay đổi trong các không gian tên được chọn và tương ứng",
+ "tooltip-whatlinkshere-invert": "Đánh dấu hộp kiểm này để ẩn các liên kết từ các trang nằm trong không gian tên đã chọn.",
"namespace_association": "Không gian tên cùng đôi",
"tooltip-namespace_association": "Cũng ẩn không gian tên thảo luận hoặc nội dung ứng với không gian được chọn",
"blanknamespace": "(Chính)",
@@ -2142,14 +2165,15 @@
"thumbnail-temp-create": "Không thể tạo tập tin hình nhỏ tạm thời",
"thumbnail-dest-create": "Không thể lưu hình nhỏ vào đường dẫn đích",
"thumbnail_invalid_params": "Tham số hình thu nhỏ không hợp lệ",
+ "thumbnail_toobigimagearea": "Tập tin có kích cỡ lớn hơn $1",
"thumbnail_dest_directory": "Không thể tạo thư mục đích",
"thumbnail_image-type": "Không hỗ trợ kiểu hình này",
"thumbnail_gd-library": "Cấu hình thư viện GD chưa hoàn thành: thiếu hàm $1",
"thumbnail_image-missing": "Hình như tập tin mất tích: $1",
"thumbnail_image-failure-limit": "Việc tạo ra hình thu nhỏ này đã bị thất bại nhiều lần quá gần đây ($1 lần trở lên). Xin vui lòng thử lại sau.",
"import": "Nhập các trang",
- "importinterwiki": "Nhập giữa các wiki",
- "import-interwiki-text": "Chọn tên trang và wiki để nhập trang vào.\nNgày của phiên bản và tên người viết trang sẽ được giữ nguyên.\nTất cả những lần nhập trang từ wiki khác được ghi lại ở [[Special:Log/import|nhật trình nhập trang]].",
+ "importinterwiki": "Nhập trang từ wiki khác",
+ "import-interwiki-text": "Chọn một wiki và tên trang để nhập.\nNgày của phiên bản và tên những người viết trang sẽ được giữ nguyên.\nTất cả những lần nhập trang từ wiki khác được ghi lại ở [[Special:Log/import|nhật trình nhập trang]].",
"import-interwiki-sourcewiki": "Wiki nguồn:",
"import-interwiki-sourcepage": "Trang nguồn:",
"import-interwiki-history": "Sao chép tất cả các phiên bản cũ của trang này",
@@ -2169,7 +2193,7 @@
"importcantopen": "Không thể mở tập tin để nhập vào",
"importbadinterwiki": "Liên kết liên wiki sai",
"importsuccess": "Nhập thành công!",
- "importnosources": "Không có nguồn nhập giữa wiki và việc nhập lịch sử bị tắt.",
+ "importnosources": "Không chỉ định wiki nguồn để nhập, và việc nhập lịch sử trực tiếp bị vô hiệu.",
"importnofile": "Không tải được tập tin nào lên.",
"importuploaderrorsize": "Không thể tải tập tin nhập trang. Tập tin lớn hơn kích thước cho phép tải lên.",
"importuploaderrorpartial": "Không thể tải tập tin nhập trang. Tập tin mới chỉ tải lên được một phần.",
@@ -2198,13 +2222,12 @@
"import-logentry-interwiki": "đã nhập vào $1 từ wiki khác",
"import-logentry-interwiki-detail": "Đã nhập $1 phiên bản từ $2",
"javascripttest": "Kiểm thử JavaScript",
- "javascripttest-title": "Đang chạy $1 ca kiểm thử",
"javascripttest-pagetext-noframework": "Trang này dành cho việc chạy các ca kiểm thử JavaScript.",
"javascripttest-pagetext-unknownframework": "Nền tảng kiểm thử không rõ “$1”.",
+ "javascripttest-pagetext-unknownaction": "Tác vụ không rõ “$1”.",
"javascripttest-pagetext-frameworks": "Hãy chọn một trong những nền tảng kiểm thử sau: $1",
"javascripttest-pagetext-skins": "Hãy chọn giao diện để sử dụng với các ca kiểm thử:",
"javascripttest-qunit-intro": "Xem [$1 tài liệu kiểm thử] tại mediawiki.org.",
- "javascripttest-qunit-heading": "Tập kiểm thử QUnit JavaScript MediaWiki",
"tooltip-pt-userpage": "Trang cá nhân của tôi",
"tooltip-pt-anonuserpage": "Trang của IP bạn đang dùng",
"tooltip-pt-mytalk": "Thảo luận với tôi",
@@ -2214,6 +2237,7 @@
"tooltip-pt-mycontris": "Danh sách các đóng góp của tôi",
"tooltip-pt-login": "Đăng nhập sẽ có lợi hơn, tuy nhiên không bắt buộc.",
"tooltip-pt-logout": "Đăng xuất",
+ "tooltip-pt-createaccount": "Khuyến khích bạn mở tài khoản và đăng nhập; tuy nhiên, không phải bắt buộc phải có tài khoản",
"tooltip-ca-talk": "Thảo luận về trang này",
"tooltip-ca-edit": "Bạn có thể sửa được trang này! (Xin vui lòng xem trước trước khi lưu.)",
"tooltip-ca-addsection": "Bắt đầu một đề mục mới",
@@ -2243,6 +2267,7 @@
"tooltip-feed-atom": "Nguồn cấp Atom của trang này",
"tooltip-t-contributions": "Xem đóng góp của người này",
"tooltip-t-emailuser": "Gửi thư cho người này",
+ "tooltip-t-info": "Thêm chi tiết về trang này",
"tooltip-t-upload": "Tải hình ảnh hoặc tập tin lên",
"tooltip-t-specialpages": "Danh sách các trang đặc biệt",
"tooltip-t-print": "Bản để in ra của trang",
@@ -2319,7 +2344,6 @@
"pageinfo-robot-policy": "Ghi chỉ mục bởi robot",
"pageinfo-robot-index": "Cho phép",
"pageinfo-robot-noindex": "Không cho phép",
- "pageinfo-views": "Số lần xem",
"pageinfo-watchers": "Số người theo dõi trang",
"pageinfo-few-watchers": "Không tới $1 người theo dõi",
"pageinfo-redirects-name": "Số trang đổi hướng đến trang này",
@@ -2803,7 +2827,6 @@
"exif-urgency-low": "Thấp ($1)",
"exif-urgency-high": "Cao ($1)",
"exif-urgency-other": "Ưu tiên người dùng định nghĩa ($1)",
- "watchlistall2": "tất cả",
"namespacesall": "tất cả",
"monthsall": "tất cả",
"confirmemail": "Xác nhận thư điện tử",
@@ -2939,9 +2962,9 @@
"hebrew-calendar-m11": "Av",
"hebrew-calendar-m12": "Elul",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|thảo luận]])",
- "unknown_extension_tag": "Không hiểu thẻ mở rộng “$1”",
"duplicate-defaultsort": "Cảnh báo: Từ khóa xếp mặc định “$2” ghi đè từ khóa trước, “$1”.",
"duplicate-displaytitle": "<strong>Cảnh báo:</strong> Tên hiển thị “$2” ghi đè tên hiển thị “$1” bên trên.",
+ "invalid-indicator-name": "<strong>Lỗi:</strong> Không thể để trống thuộc tính <code>name</code> của cái chỉ trạng thái trang.",
"version": "Phiên bản",
"version-extensions": "Các phần mở rộng được cài đặt",
"version-skins": "Giao diện đã cài đặt",
@@ -2956,7 +2979,7 @@
"version-parser-function-hooks": "Hook cho hàm cú pháp trong bộ xử lý",
"version-hook-name": "Tên hook",
"version-hook-subscribedby": "Được theo dõi bởi",
- "version-version": "(Phiên bản $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[không tên]",
"version-license": "Giấy phép MediaWiki",
"version-ext-license": "Giấy phép",
@@ -2983,6 +3006,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath?uselang=vi Đường dẫn bài]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath?uselang=vi Đường dẫn kịch bản]",
+ "version-libraries": "Các thư viện đã cài đặt",
+ "version-libraries-library": "Thư viện",
+ "version-libraries-version": "Phiên bản",
"redirect": "Đổi hướng đến tập tin, người dùng, trang, hoặc số phiên bản",
"redirect-legend": "Đổi hướng đến tập tin hoặc trang",
"redirect-summary": "Trang đặc biệt này đổi hướng đến một tập tin (theo tên tập tin được cho vào), trang (theo số phiên bản hoặc số trang được cho vào), hoặc trang cá nhân (theo số thành viên). Cách sử dụng: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], hoặc [[{{#Special:Redirect}}/user/101]].",
@@ -3018,6 +3044,7 @@
"specialpages-group-wiki": "Dữ liệu và công cụ",
"specialpages-group-redirects": "Đang đổi hướng trang đặc biệt",
"specialpages-group-spam": "Công cụ chống spam",
+ "specialpages-group-developer": "Công cụ dành cho lập trình viên",
"blankpage": "Trang trắng",
"intentionallyblankpage": "Trang này được chủ định để trắng",
"external_image_whitelist": " #Hãy để yên dòng này<pre>\n#Hãy đặt các mẩu biểu thức chính quy (chỉ gồm phần ở giữa //) vào phía dưới\n#Những mẩu này sẽ được so trùng với địa chỉ URL của hình ảnh được nhúng trực tiếp từ bên ngoài\n#Những địa chỉ nào trùng sẽ hiển thị thành hình ảnh, nếu không thì chỉ hiển thị liên kết đến hình\n#Những dòng bắt đầu bằng # được xem là chú thích\n#Không phân biệt chữ hoa chữ thường\n\n#Hãy đặt các mẩu biểu thức chính quy ở phía trên dòng này. Hãy để yên dòng này</pre>",
@@ -3030,12 +3057,54 @@
"tags-tag": "Tên thẻ",
"tags-display-header": "Hiển thị trên danh sách thay đổi",
"tags-description-header": "Mô tả ý nghĩa đầy đủ",
+ "tags-source-header": "Nguồn gốc",
"tags-active-header": "Có kích hoạt?",
"tags-hitcount-header": "Các thay đổi được ghi thẻ",
+ "tags-actions-header": "Tác vụ",
"tags-active-yes": "Kích hoạt",
"tags-active-no": "Vô hiệu",
+ "tags-source-extension": "Xác định bởi một mở rộng",
+ "tags-source-manual": "Áp dụng thủ công bởi người dùng và bot",
+ "tags-source-none": "Không còn sử dụng",
"tags-edit": "sửa",
+ "tags-delete": "xóa",
+ "tags-activate": "Kích hoạt",
+ "tags-deactivate": "vô hiệu",
"tags-hitcount": "$1 {{PLURAL:$1|thay đổi|thay đổi}}",
+ "tags-manage-no-permission": "Bạn không có quyền hạn để quản lý các thẻ thay đổi.",
+ "tags-create-heading": "Tạo một thẻ mới",
+ "tags-create-explanation": "Theo mặc định, các thẻ mới được tạo ra sẽ được hợp lệ hóa để người dùng và các bot sử dụng.",
+ "tags-create-tag-name": "Tên thẻ:",
+ "tags-create-reason": "Lý do:",
+ "tags-create-submit": "Tạo mới",
+ "tags-create-no-name": "Bạn phải chỉ định một tên thẻ.",
+ "tags-create-invalid-chars": "Tên thẻ không được chứa dấu phẩy (<code>,</code>) hoặc dấu gạch chéo lên (<code>/</code>).",
+ "tags-create-invalid-title-chars": "Tên thẻ không được chứa các ký tự mà không thể được sử dụng trong tiêu đề của trang .",
+ "tags-create-already-exists": "Các từ khóa \"$1\" đã tồn tại.",
+ "tags-create-warnings-above": "{{PLURAL:$2| Cảnh báo}} sau gặp phải khi cố gắng để tạo ra các thẻ \"$1\":",
+ "tags-create-warnings-below": "Bạn có muốn tiếp tục tạo thẻ này?",
+ "tags-delete-title": "Xóa thẻ",
+ "tags-delete-explanation-initial": "Bạn muốn xóa thẻ \"$1\" từ cơ sở dữ liệu.",
+ "tags-delete-explanation-in-use": "Nó sẽ được gỡ bỏ từ {{PLURAL:$2|$2 mục sửa đổi hoặc mục đăng nhập|tất cả $2 bản sửa đổi và/hoặc đăng nhập các mục}} mà nó hiện đang áp dụng.",
+ "tags-delete-explanation-warning": "Hành động này là <strong>không thể đảo ngược</strong> và <strong>không thể hoàn tác</strong>, ngay cả bởi người quản trị cơ sở dữ liệu. Hãy chắc chắn đây là thẻ mà bạn muốn xóa.",
+ "tags-delete-explanation-active": "<strong>Thẻ “$1” vẫn còn kích hoạt.</strong> Để ngừng áp dụng thẻ này trong tương lai, đi đến những nơi áp dụng thẻ và vô hiệu nó tại đấy.",
+ "tags-delete-reason": "Lý do:",
+ "tags-delete-submit": "Không thể phục hồi xóa thẻ này",
+ "tags-delete-not-allowed": "Thẻ được định nghĩa bởi một mở rộng không thể bị xóa trừ khi mở rộng đặc biệt cho phép điều đó xảy ra.",
+ "tags-delete-not-found": "Thẻ \"$1\" không tồn tại.",
+ "tags-delete-too-many-uses": "Từ khóa \"$1\" được áp dụng cho hơn $2 {{PLURAL:$2|phiên bản}}, có nghĩa là nó không thể bị xóa.",
+ "tags-delete-warnings-after-delete": "Thẻ “$1” bị xóa thành công, nhưng gặp {{PLURAL:$2|cảnh báo|các cảnh báo}} sau:",
+ "tags-activate-title": "Kích hoạt thẻ",
+ "tags-activate-question": "Bạn sắp sửa kích hoạt thẻ \"$1\".",
+ "tags-activate-reason": "Lý do:",
+ "tags-activate-not-allowed": "Không thể kích hoạt thẻ \"$1\".",
+ "tags-activate-not-found": "Thẻ \"$1\" không tồn tại.",
+ "tags-activate-submit": "Kích hoạt",
+ "tags-deactivate-title": "Vô hiệu thẻ",
+ "tags-deactivate-question": "Bạn sắp sửa vô hiệu thẻ \"$1\".",
+ "tags-deactivate-reason": "Lý do:",
+ "tags-deactivate-not-allowed": "Không thể vô hiệu hóa thẻ \"$1\".",
+ "tags-deactivate-submit": "Vô hiệu",
"comparepages": "So sánh trang",
"compare-page1": "Trang 1",
"compare-page2": "Trang 2",
@@ -3048,7 +3117,7 @@
"dberr-problems": "Xin lỗi! Trang này đang gặp phải những khó khăn về kỹ thuật.",
"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 máy chủ cơ sở dữ liệu)",
+ "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.",
@@ -3089,6 +3158,12 @@
"revdelete-uname-unhid": "đã hiện tên người dùng",
"revdelete-restricted": "đã áp dụng hạn chế cho bảo quản viên",
"revdelete-unrestricted": "đã gỡ bỏ hạn chế cho bảo quản viên",
+ "logentry-block-block": "$1 {{GENDER:$2}}đã cấm {{GENDER:$4}}$3 hết hạn $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2}}đã bỏ cấm {{GENDER:$4}}$3",
+ "logentry-block-reblock": "$1 {{GENDER:$2}}đã cấu hình lại vụ cấm {{GENDER:$4}}$3 hết hạn $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2}}đã cấm {{GENDER:$4}}$3 hết hạn $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2}}đã cấu hình lại vụ cấm {{GENDER:$4}}$3 hết hạn $5 $6",
+ "logentry-merge-merge": "$1 {{GENDER:$2}}đã hợp nhất $3 vào $4 (các phiên bản cho tới $5)",
"logentry-move-move": "$1 {{GENDER:$2}}đã đổi $3 thành $4",
"logentry-move-move-noredirect": "$1 {{GENDER:$2}}đã đổi $3 thành $4 (đã tắt đổi hướng)",
"logentry-move-move_redir": "$1 {{GENDER:$2}}đã đổi $3 thành $4 qua đổi hướng",
@@ -3106,20 +3181,36 @@
"logentry-upload-upload": "$1 {{GENDER:$2}}đã tải lên $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2}}đã tải lên một phiên bản mới của $3",
"logentry-upload-revert": "$1 {{GENDER:$2}}đã tải lên $3",
+ "log-name-managetags": "Danh sách quản lý thẻ",
+ "log-description-managetags": "Trang này có các công việc quản lý [[Special:Tags|thẻ]]. Nhật trình chỉ bao gồm các tác vụ do bảo quản viên thực hiện thủ công; phần mềm wiki có thể tạo hoặc xóa thẻ mà không ghi tác vụ vào nhật trình này.",
+ "logentry-managetags-create": "$1 {{GENDER:$2| đã tạo}} thẻ \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2}}đã xóa thẻ “$4” (và gỡ nó khỏi $5 phiên bản hoặc mục nhật trình)",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|đã kích hoạt}} tag \"$4\" để sử dụng bởi người dùng và các bot",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|đã vô hiệu}} thẻ \"$4\" để sử dụng bởi người dùng và các bot",
"rightsnone": "(không có)",
+ "revdelete-summary": "tóm lược sửa đổi",
+ "feedback-adding": "Đang thêm thông tin phản hồi vào trang…",
+ "feedback-back": "Lùi",
+ "feedback-bugcheck": "Tuyệt! Chỉ cần kiểm tra nó chưa được [$1 báo cáo trước đây].",
+ "feedback-bugnew": "Tôi đã kiểm tra – báo cáo lỗi mới",
"feedback-bugornote": "Nếu bạn đã sẵn sàng để miêu tả các chi tiết của một vấn đề kỹ thuật, xin vui lòng [$1 báo cáo lỗi].\nNếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới. Lời ghi của bạn sẽ được đăng lên trang “[$3 $2]”, cùng với tên người dùng và trình duyệt của bạn.",
- "feedback-subject": "Tiêu đề:",
- "feedback-message": "Thông điệp:",
"feedback-cancel": "Hủy bỏ",
- "feedback-submit": "Gửi phản hồi",
- "feedback-adding": "Đang thêm thông tin phản hồi vào trang…",
+ "feedback-close": "Xong",
+ "feedback-external-bug-report-button": "Tạo một công việc kỹ thuật",
+ "feedback-dialog-title": "Gửi phản hồi",
+ "feedback-dialog-intro": "Bạn có thể gửi phản hồi dễ dàng qua biểu mẫu bên dưới. Thông tin phản hồi của bạn sẽ được bổ sung vào trang “$1” cùng với tên người dùng của bạn.",
+ "feedback-error-title": "Lỗi",
"feedback-error1": "Hủy bỏ",
"feedback-error2": "Lỗi: Sửa đổi thất bại",
"feedback-error3": "Lỗi: API không có phản ứng",
+ "feedback-message": "Thông điệp:",
+ "feedback-subject": "Tiêu đề:",
+ "feedback-submit": "Gửi",
+ "feedback-terms": "Tôi hiểu rằng thông tin tác nhân người dùng của tôi bao gồm đúng phiên bản của trình duyệt và hệ điều hành của tôi, và rằng các thông tin này sẽ được chia sẻ công khai bên cạnh thông tin phản hồi của tôi.",
+ "feedback-termsofuse": "Tôi đồng ý cung cấp thông tin phản hồi theo các Điều khoản Sử dụng.",
"feedback-thanks": "Cảm ơn! Phản hồi của bạn đã được đăng lên trang “[$2 $1]”.",
- "feedback-close": "Xong",
- "feedback-bugcheck": "Tuyệt! Chỉ cần kiểm tra nó chưa được [$1 báo cáo trước đây].",
- "feedback-bugnew": "Tôi đã kiểm tra – báo cáo lỗi mới",
+ "feedback-thanks-title": "Cảm ơn!",
+ "feedback-useragent": "Tác nhân người dùng:",
"searchsuggest-search": "Tìm kiếm",
"searchsuggest-containing": "có chứa…",
"api-error-badaccess-groups": "Bạn không được phép tải tập tin lên wiki này.",
@@ -3155,6 +3246,13 @@
"api-error-stashfailed": "Lỗi nội bộ: Máy chủ bị thất bại trong việc lưu giữ tập tin tạm.",
"api-error-publishfailed": "Lỗi nội bộ: Máy chủ bị thất bại trong việc xuất bản tập tin tạm.",
"api-error-stasherror": "Đã xuất hiện lỗi khi tải tập tin lên hàng đợi.",
+ "api-error-stashedfilenotfound": "Không tìm thấy tập tin khi thử tải nó lên từ hàng đợi.",
+ "api-error-stashpathinvalid": "Đường dẫn mong đợi đến tập tin đợi tải lên là không hợp lệ.",
+ "api-error-stashfilestorage": "Đã xuất hiện lỗi khi tải tập tin lên từ hàng đợi.",
+ "api-error-stashzerolength": "Máy chủ không thể lưu tập tin vào hàng đợi vì nó không có nội dung.",
+ "api-error-stashnotloggedin": "Bạn phải đăng nhập để lưu tập tin vào hàng đợi tải lên.",
+ "api-error-stashwrongowner": "Không thể truy cập một tập tin không phải của bạn trong hàng đợi tải lên.",
+ "api-error-stashnosuchfilekey": "Bạn không thể truy cập chìa khóa tập tin đợi tải lên vì chìa khóa này không tồn tại.",
"api-error-timeout": "Máy chủ không đáp ứng trong thời gian dự kiến.",
"api-error-unclassified": "Gặp lỗi không ngờ",
"api-error-unknown-code": "Lỗi không rõ: “$1”",
@@ -3199,6 +3297,8 @@
"expand_templates_generate_xml": "Xem cây phân tích XML",
"expand_templates_generate_rawhtml": "Hiển thị HTML thô",
"expand_templates_preview": "Xem trước",
+ "expand_templates_preview_fail_html": "<em>{{SITENAME}} cho phép mã nguồn HTML thô và dữ liệu phiên bị mất, nên bản xem trước bị ẩn để tránh tấn công JavaScript.</em>\n\n<strong>Nếu bạn thực sự muốn xem trước mã nguồn này, xin hãy thử lại nữa.</strong>\nNếu vẫn không được, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại.",
+ "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} cho phép mã nguồn HTML thô và dữ liệu phiên bị mất, nên bản xem trước bị ẩn để tránh tấn công JavaScript.</em>\n\n<strong>Nếu bạn thực sự muốn xem trước mã nguồn này, xin hãy thử lại nữa.</strong>\nNếu vẫn không được, hãy [[Special:UserLogin|đăng nhập]] và thử lại lần nữa.",
"pagelanguage": "Chọn ngôn ngữ trang",
"pagelang-name": "Trang",
"pagelang-language": "Ngôn ngữ",
@@ -3209,8 +3309,36 @@
"log-name-pagelang": "Nhật trình thay đổi ngôn ngữ",
"log-description-pagelang": "Nhật trình này ghi các thay đổi ngôn ngữ của các trang.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2}}đã đổi ngôn ngữ của trang $3 từ $4 thành $5.",
- "default-skin-not-found": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nViệc cài đặt của bạn dường như bao gồm những giao diện sau đây. Xin xem [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt hoặc chọn một trong số chúng làm giao diện mặc định.\n\n$2\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Có lẽ bạn đã cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này đã nằm trong tính toán của chúng tôi. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org] bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:*Sao chép một trong những kho <code>mediawiki/skins/*</code> thông qua git vào trong thư mục <code dir=\"ltr\">skins/</code> của cài đặt MediaWiki của bạn.\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki.\n\n; Nếu bạn vừa mới nâng cấp MediaWiki:\n: Phiên bản MediaWiki 1.24 trở lên không còn tự động kích hoạt giao diện đã cài đặt (xem [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Hướng dẫn: Tự động dò giao diện]). Bạn có thể dán những dòng lệnh vào <code>LocalSettings.php</code> để kích hoạt tất cả giao diện hiện đã được cài dặt:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Nếu bạn vừa mới chỉnh sửa <code>LocalSettings.php</code>:\n: Kiểm tra lại tên các giao diện xem có lỗi đánh máy nào không.",
- "default-skin-not-found-no-skins": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nKhông có giao diện nào của bạn được kích hoạt.\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Bạn có thể cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này nằm trong dự kiến. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org], bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:*Sao chép một trong những kho <code>mediawiki/skins/*</code> thông qua git vào trong thư mục <code dir=\"ltr\">skins/</code> của cài đặt MediaWiki của bạn.\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki. Xin xem [https://www.mediawiki.org/wiki/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt hoặc chọn một trong số chúng làm giao diện mặc định.",
+ "default-skin-not-found": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nViệc cài đặt của bạn dường như bao gồm những giao diện sau đây. Xin xem [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt hoặc chọn một trong số chúng làm giao diện mặc định.\n\n$2\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Có lẽ bạn đã cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này đã nằm trong tính toán của chúng tôi. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org] bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:* Tải về các gói giao diện nén riêng từ [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*Sao chép một trong những kho <code>mediawiki/skins/*</code> thông qua git vào trong thư mục <code dir=\"ltr\">skins/</code> của cài đặt MediaWiki của bạn.\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki.\n\n; Nếu bạn vừa mới nâng cấp MediaWiki:\n: Phiên bản MediaWiki 1.24 trở lên không còn tự động kích hoạt giao diện đã cài đặt (xem [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Hướng dẫn: Tự động dò giao diện]). Bạn có thể dán những dòng lệnh vào <code>LocalSettings.php</code> để kích hoạt tất cả giao diện hiện đã được cài dặt:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Nếu bạn vừa mới chỉnh sửa <code>LocalSettings.php</code>:\n: Kiểm tra lại tên các giao diện xem có lỗi đánh máy nào không.",
+ "default-skin-not-found-no-skins": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nKhông có giao diện nào của bạn được kích hoạt.\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Bạn có thể cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này nằm trong dự kiến. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org], bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:* Tải về các gói giao diện nén riêng từ [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*Sao chép một trong những kho <code>mediawiki/skins/*</code> thông qua git vào trong thư mục <code dir=\"ltr\">skins/</code> của cài đặt MediaWiki của bạn.\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki. Xin xem [https://www.mediawiki.org/wiki/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt hoặc chọn một trong số chúng làm giao diện mặc định.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (kích hoạt)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''vô hiệu hóa''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''vô hiệu hóa''')",
+ "mediastatistics": "Thống kê phương tiện",
+ "mediastatistics-summary": "Thống kê về các kiểu tập tin đã tải lên. Bảng này chỉ liệt kê phiên bản mới nhất của các tập tin. Các phiên bản cũ hoặc các phiên bản bị xóa được bỏ qua.",
+ "mediastatistics-nbytes": "$1 byte ($2; $3%)",
+ "mediastatistics-table-mimetype": "Kiểu MIME",
+ "mediastatistics-table-extensions": "Phần mở rộng có thể",
+ "mediastatistics-table-count": "Số tập tin",
+ "mediastatistics-table-totalbytes": "Kích thước kết hợp",
+ "mediastatistics-header-unknown": "Không rõ",
+ "mediastatistics-header-bitmap": "Hình ảnh bitmap",
+ "mediastatistics-header-drawing": "Bản vẽ (hình ảnh vectơ)",
+ "mediastatistics-header-audio": "Âm thanh",
+ "mediastatistics-header-video": "Video",
+ "mediastatistics-header-multimedia": "Phương tiện phong phú",
+ "mediastatistics-header-office": "Văn phòng",
+ "mediastatistics-header-text": "Văn bản",
+ "mediastatistics-header-executable": "Tập tin khả thi",
+ "mediastatistics-header-archive": "Định dạng nén",
+ "json-warn-trailing-comma": "$1 dấu phẩy lủng lẳng được xóa khỏi JSON",
+ "json-error-unknown": "JSON có vấn đề. Lỗi: $1",
+ "json-error-depth": "Đã vượt quá độ sâu ngăn xếp tối đa",
+ "json-error-state-mismatch": "JSON không hợp lệ hoặc sai dạng",
+ "json-error-ctrl-char": "Lỗi ký tự điều khiển, có lẽ đã mã hóa không chính xác",
+ "json-error-syntax": "Lỗi cú pháp",
+ "json-error-utf8": "Ký tự UTF-8 sai dạng, có lẽ đã mã hóa không chính xác",
+ "json-error-recursion": "Giá trị để mã hóa có tham chiếu đệ quy",
+ "json-error-inf-or-nan": "Giá trị để mã hóa có giá trị NAN (không phải số) hoặc INF (vô tận)",
+ "json-error-unsupported-type": "Đã đưa vào giá trị có kiểu không thể mã hóa",
+ "headline-anchor-title": "Liên kết đến phần này"
}
diff --git a/languages/i18n/vls.json b/languages/i18n/vls.json
index 2a1afc3b..ee192692 100644
--- a/languages/i18n/vls.json
+++ b/languages/i18n/vls.json
@@ -1,147 +1,137 @@
{
- "@metadata": {
- "authors": [
- "DasRakel",
- "Tbc",
- "לערי ריינהארט"
- ]
- },
- "tog-underline": "Links ounderstreepn:",
- "tog-hideminor": "Klêne veranderiengn verdukn van juste veranderd",
- "tog-enotifrevealaddr": "Tôog min e-mailadres in e-mails",
- "tog-shownumberswatching": "Tôog et aantal gebrukers dan et blad volgn",
- "underline-always": "Olsan",
- "underline-never": "Noois",
- "underline-default": "Browser standoard",
- "sunday": "zundag",
- "monday": "moandag",
- "tuesday": "disndag",
- "wednesday": "woesdag",
- "thursday": "dunderdag",
- "friday": "vrydag",
- "saturday": "zoaterdag",
- "sun": "zu",
- "mon": "moa",
- "tue": "din",
- "wed": "woe",
- "thu": "dun",
- "fri": "vry",
- "sat": "zat",
- "january": "januoari",
- "february": "februoari",
- "march": "moarte",
- "april": "april",
- "may_long": "mei",
- "june": "juni",
- "july": "juli",
- "august": "ogustus",
- "september": "september",
- "october": "oktober",
- "november": "november",
- "december": "december",
- "january-gen": "januari",
- "february-gen": "februoari",
- "march-gen": "moarte",
- "april-gen": "april",
- "may-gen": "mei",
- "june-gen": "juni",
- "july-gen": "juli",
- "august-gen": "ogustus",
- "september-gen": "september",
- "october-gen": "oktober",
- "november-gen": "november",
- "december-gen": "december",
- "jan": "jan",
- "feb": "feb",
- "mar": "mrt",
- "apr": "apr",
- "may": "mei",
- "jun": "jun",
- "jul": "jul",
- "aug": "ogs",
- "sep": "sep",
- "oct": "okt",
- "nov": "nov",
- "dec": "dec",
- "listingcontinuesabbrev": "vervolg",
- "newwindow": "(opent in e nieuw veister)",
- "moredotdotdot": "Mêer…",
- "mypage": "Myn gebrukersblad",
- "mytalk": "Myn discuusjeblad",
- "and": "&#32;en",
- "qbedit": "Bewerkn",
- "vector-action-delete": "Wegdoen",
- "vector-action-move": "Ernoemn",
- "vector-view-create": "Anmoakn",
- "vector-view-edit": "Bewerkn",
- "vector-view-history": "Geschiedenisse bekykn",
- "vector-view-view": "Leezn",
- "vector-view-viewsource": "Brontekst bekykn",
- "tagline": "Van {{SITENAME}}",
- "help": "Ulpe",
- "search": "Zoekn",
- "searchbutton": "Zoekn",
- "history_short": "Geschiedenisse",
- "updatedmarker": "bygewerkt sinds min latste visite",
- "printableversion": "Drukboare versie",
- "permalink": "Bluuvende link",
- "print": "Drukn",
- "edit": "Bewerk'n",
- "create": "Anmoakn",
- "editthispage": "Da blad ier bewerkn",
- "create-this-page": "Da blad ier anmoakn",
- "delete": "Wegdoen",
- "deletethispage": "Da blad ier verwydern",
- "undelete_short": "{{PLURAL:$1|êen bewerkinge|$1 bewerkingn}} werekêern",
- "protect": "Beveilign",
- "protectthispage": "Da blad ier beveilign",
- "unprotect": "beveiliginge wegdoen",
- "unprotectthispage": "De beveiliginge van da blad ier ofleggn",
- "newpage": "Nieuw blad",
- "talkpagelinktext": "Discuusje",
- "specialpage": "Specioal blad",
- "talk": "Discuusje",
- "toolbox": "Ulpmiddeln",
- "aboutsite": "Over {{SITENAME}}",
- "aboutpage": "Project:Info",
- "disclaimers": "Aansprakelekeid",
- "mainpage": "Voorblad",
- "privacy": "Privacybeleid",
- "viewsourceold": "Brontekst bekykn",
- "viewsourcelink": "Brontekst bekykn",
- "site-rss-feed": "$1 RSS-feed",
- "site-atom-feed": "$1 Atom-feed",
- "red-link-title": "$1 (Blad bestoat nie)",
- "nstab-special": "Specioal blad",
- "viewsource": "Brontekst bekykn",
- "logout": "Ofmeldn",
- "search-result-size": "$1 ({{PLURAL:$2|1 woord|$2 woordn}})",
- "newuserlogpage": "Logboek nieuwe gebrukers",
- "recentchanges": "Juste veranderd",
- "upload": "Bestand toevoegn",
- "uploadbtn": "Bestand toevoegn",
- "uploadnologin": "Ge zyt nie angemeld",
- "uploadlog": "logboek upgeloade bestandn",
- "uploadlogpage": "Logboek upgeloade bestandn",
- "uploadlogpagetext": "Hier stoa e lyste met de mêest recente upgeloade bestandn.",
- "uploadedfiles": "Upgeloade bestandn",
- "uploadedimage": "\"[[$1]]\" upgeload",
- "unwatchedpages": "Pagina's die ip niemands volglyste stoan",
- "newpages": "Nieuwe bloadn",
- "newpages-username": "Gebrukersnoame:",
- "mywatchlist": "Myn volglyste",
- "watch": "Volgn",
- "unwatch": "Nie volgn",
- "unwatching": "Stoppn me volgn...",
- "undelete": "Weggedoane bloadn bekykn",
- "undeletepage": "Weggedoane bloadn erstelln of bekykn",
- "undeletehistorynoadmin": "'t Artikel is weggedoan. De reden davôorn ku je zien in de soamnvattienge ieronder, tôpe me uutleg over wie dat 't blad bewerkt èt vôorn dat weggedoan es gewist. Den tekst van die weggedoane versies kan allêene door sysops gelezen wordn.",
- "undeletebtn": "Erstelln",
- "undeletedfiles": "{{PLURAL:$1|1 bestand|$1 bestandn}} ersteld",
- "mycontris": "Myn bydroagn",
- "uctop": "(latste veranderienge)",
- "contribslink": "bydroagn",
- "delete_and_move": "Wegdoen en ernoemn",
- "tooltip-n-mainpage": "Noar 't voorblad goane",
- "newimages": "Nieuwe ofbeeldiengn"
+ "@metadata": {
+ "authors": [
+ "DasRakel",
+ "Tbc",
+ "לערי ריינהארט"
+ ]
+ },
+ "tog-underline": "Links ounderstreepn:",
+ "tog-hideminor": "Klêne veranderiengn verdukn van juste veranderd",
+ "tog-enotifrevealaddr": "Tôog min e-mailadres in e-mails",
+ "tog-shownumberswatching": "Tôog et aantal gebrukers dan et blad volgn",
+ "underline-always": "Olsan",
+ "underline-never": "Noois",
+ "underline-default": "Browser standoard",
+ "sunday": "zundag",
+ "monday": "moandag",
+ "tuesday": "disndag",
+ "wednesday": "woesdag",
+ "thursday": "dunderdag",
+ "friday": "vrydag",
+ "saturday": "zoaterdag",
+ "sun": "zu",
+ "mon": "moa",
+ "tue": "din",
+ "wed": "woe",
+ "thu": "dun",
+ "fri": "vry",
+ "sat": "zat",
+ "january": "januoari",
+ "february": "februoari",
+ "march": "moarte",
+ "april": "april",
+ "may_long": "mei",
+ "june": "juni",
+ "july": "juli",
+ "august": "ogustus",
+ "september": "september",
+ "october": "oktober",
+ "november": "november",
+ "december": "december",
+ "january-gen": "januari",
+ "february-gen": "februoari",
+ "march-gen": "moarte",
+ "april-gen": "april",
+ "may-gen": "mei",
+ "june-gen": "juni",
+ "july-gen": "juli",
+ "august-gen": "ogustus",
+ "september-gen": "september",
+ "october-gen": "oktober",
+ "november-gen": "november",
+ "december-gen": "december",
+ "jan": "jan",
+ "feb": "feb",
+ "mar": "mrt",
+ "apr": "apr",
+ "may": "mei",
+ "jun": "jun",
+ "jul": "jul",
+ "aug": "ogs",
+ "sep": "sep",
+ "oct": "okt",
+ "nov": "nov",
+ "dec": "dec",
+ "listingcontinuesabbrev": "vervolg",
+ "newwindow": "(opent in e nieuw veister)",
+ "moredotdotdot": "Mêer…",
+ "mypage": "Myn gebrukersblad",
+ "mytalk": "Myn discuusjeblad",
+ "and": "&#32;en",
+ "qbedit": "Bewerkn",
+ "tagline": "Van {{SITENAME}}",
+ "help": "Ulpe",
+ "search": "Zoekn",
+ "searchbutton": "Zoekn",
+ "history_short": "Geschiedenisse",
+ "updatedmarker": "bygewerkt sinds min latste visite",
+ "printableversion": "Drukboare versie",
+ "permalink": "Bluuvende link",
+ "print": "Drukn",
+ "edit": "Bewerk'n",
+ "create": "Anmoakn",
+ "editthispage": "Da blad ier bewerkn",
+ "create-this-page": "Da blad ier anmoakn",
+ "delete": "Wegdoen",
+ "deletethispage": "Da blad ier verwydern",
+ "undelete_short": "{{PLURAL:$1|êen bewerkinge|$1 bewerkingn}} werekêern",
+ "protect": "Beveilign",
+ "protectthispage": "Da blad ier beveilign",
+ "unprotect": "beveiliginge wegdoen",
+ "unprotectthispage": "De beveiliginge van da blad ier ofleggn",
+ "newpage": "Nieuw blad",
+ "talkpagelinktext": "Discuusje",
+ "specialpage": "Specioal blad",
+ "talk": "Discuusje",
+ "toolbox": "Ulpmiddeln",
+ "aboutsite": "Over {{SITENAME}}",
+ "aboutpage": "Project:Info",
+ "disclaimers": "Aansprakelekeid",
+ "mainpage": "Voorblad",
+ "privacy": "Privacybeleid",
+ "viewsourceold": "Brontekst bekykn",
+ "viewsourcelink": "Brontekst bekykn",
+ "site-rss-feed": "$1 RSS-feed",
+ "site-atom-feed": "$1 Atom-feed",
+ "red-link-title": "$1 (Blad bestoat nie)",
+ "nstab-special": "Specioal blad",
+ "viewsource": "Brontekst bekykn",
+ "logout": "Ofmeldn",
+ "search-result-size": "$1 ({{PLURAL:$2|1 woord|$2 woordn}})",
+ "newuserlogpage": "Logboek nieuwe gebrukers",
+ "recentchanges": "Juste veranderd",
+ "upload": "Bestand toevoegn",
+ "uploadbtn": "Bestand toevoegn",
+ "uploadnologin": "Ge zyt nie angemeld",
+ "uploadlogpage": "Logboek upgeloade bestandn",
+ "uploadlogpagetext": "Hier stoa e lyste met de mêest recente upgeloade bestandn.",
+ "unwatchedpages": "Pagina's die ip niemands volglyste stoan",
+ "newpages": "Nieuwe bloadn",
+ "newpages-username": "Gebrukersnoame:",
+ "mywatchlist": "Myn volglyste",
+ "watch": "Volgn",
+ "unwatch": "Nie volgn",
+ "unwatching": "Stoppn me volgn...",
+ "undelete": "Weggedoane bloadn bekykn",
+ "undeletepage": "Weggedoane bloadn erstelln of bekykn",
+ "undeletehistorynoadmin": "'t Artikel is weggedoan. De reden davôorn ku je zien in de soamnvattienge ieronder, tôpe me uutleg over wie dat 't blad bewerkt èt vôorn dat weggedoan es gewist. Den tekst van die weggedoane versies kan allêene door sysops gelezen wordn.",
+ "undeletebtn": "Erstelln",
+ "undeletedfiles": "{{PLURAL:$1|1 bestand|$1 bestandn}} ersteld",
+ "mycontris": "Myn bydroagn",
+ "uctop": "(latste veranderienge)",
+ "contribslink": "bydroagn",
+ "delete_and_move": "Wegdoen en ernoemn",
+ "tooltip-n-mainpage": "Noar 't voorblad goane",
+ "newimages": "Nieuwe ofbeeldiengn"
}
diff --git a/languages/i18n/vmf.json b/languages/i18n/vmf.json
index 8eefeb60..4c3f099a 100644
--- a/languages/i18n/vmf.json
+++ b/languages/i18n/vmf.json
@@ -355,7 +355,6 @@
"searchrelated": "fârwand",
"searchall": "ale",
"showingresults": "Hiâr {{PLURAL:$1|is '''1'''|sin '''$1'''}} Ärgääbnis , ôôgfangn baj numâr '''$2.'''",
- "showingresultsheader": "{{PLURAL:$5|Ärgääbnis '''$1''' don '''$3'''|Ärgääbnis '''$1–$2''' fon '''$3'''}} fir '''$4'''",
"search-nonefound": "Dsu dajna suuchfrôôchn is nigs gfundn wôrn.",
"powersearch-legend": "Suuche mid mäa oogaam",
"powersearch-ns": "In dena Nôômâsrajm suchng:",
@@ -489,7 +488,6 @@
"pager-older-n": "{{PLURAL:$1|foorichâr|fooriche $1}}",
"booksources": "ISBN-Suuche",
"booksources-search-legend": "Gugn, woo mr biâchâr häärgrichd",
- "booksources-go": "Loos-suchng",
"log": "Logbicher",
"allpages": "Ale sajdn",
"prevpage": "Fooriche sajdn ($1)",
@@ -511,7 +509,7 @@
"watchthispage": "Dii sajdn undâr beoobachdung nämâ",
"unwatch": "Nimmä beoobachdn",
"watchlist-details": "Duu häldsch {{PLURAL:$1|1 sajdn|$1 sajdn}} undâr beoobachdung.",
- "wlshowlast": "Dsajch dii ändrunga fo di ledsdn $1 schdundn, $2 dooch odär $3",
+ "wlshowlast": "Dsajch dii ändrunga fo di ledsdn $1 schdundn, $2 dooch odär",
"watchlist-options": "Was un wii alles af Dajnâr beobachdungslisdn dsajchd wärn sol",
"watching": "Ghumd undâr beoobachdung ...",
"unwatching": "Beobachdn ajschränggn",
@@ -695,7 +693,6 @@
"metadata-fields": "Folgnde Felder vo däi EXIF-Medadaden, däi wou in den MediaWigi-Sysdemdexd ogeem sin, werrn af Bildbeschreibungsseidn miid eiglabbder Medadadndabelln ozeichd. Weidere werrn schdandaddmäßich net ozeichd.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "brajdn",
"exif-imagelength": "Heen",
- "watchlistall2": "ale",
"namespacesall": "ale",
"monthsall": "alle",
"watchlisttools-view": "Ändrunga in där beoobachdungslisdn",
diff --git a/languages/i18n/vo.json b/languages/i18n/vo.json
index 84c90c10..d51a5fca 100644
--- a/languages/i18n/vo.json
+++ b/languages/i18n/vo.json
@@ -8,7 +8,8 @@
"Reedy",
"Smeira",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Rachmat.Wahidi"
]
},
"tog-underline": "Dislienükön yümis:",
@@ -164,6 +165,7 @@
"permalink": "Yüm laidüpik",
"print": "Bükön",
"view": "Logön",
+ "view-foreign": "Logön su $1",
"edit": "Redakön",
"create": "Jafön",
"editthispage": "Redakolöd padi at",
@@ -214,6 +216,7 @@
"disclaimers": "Nuneds",
"disclaimerpage": "Project:Gididimiedükam valemik",
"edithelp": "Redakamayuf",
+ "helppage-top-gethelp": "Yuf",
"mainpage": "Cifapad",
"mainpage-description": "Cifapad",
"policy-url": "Project:Dunamod",
@@ -231,8 +234,8 @@
"youhavenewmessages": "Su pad ola binons $1 ($2).",
"youhavenewmessagesfromusers": "Labol $1 de {{PLURAL:$3|geban votik|gebans $3}} ($2).",
"youhavenewmessagesmanyusers": "Labol $1 de gebans mödik ($2).",
- "newmessageslinkplural": "{{PLURAL:$1|nuni nulik|nunis nulik}}",
- "newmessagesdifflinkplural": "{{PLURAL:$1|votükam|votükams}} lätik",
+ "newmessageslinkplural": "{{PLURAL:$1|nuni nulik|999=nunis nulik}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|votükam|999=votükams}} lätik",
"youhavenewmessagesmulti": "Labol nunis nulik su $1",
"editsection": "redakön",
"editold": "redakön",
@@ -243,6 +246,8 @@
"toc": "Ninäd",
"showtoc": "jonön",
"hidetoc": "klänedön",
+ "confirmable-yes": "Si!",
+ "confirmable-no": "Nö!",
"thisisdeleted": "Jonön u sädunön moükami $1?",
"viewdeleted": "Logön eli $1?",
"restorelink": "{{PLURAL:$1|redakama bal|redakamas $1}}",
@@ -349,7 +354,7 @@
"gotaccount": "Ya labol-li kali? '''$1'''.",
"gotaccountlink": "Nunädolös obi",
"userlogin-resetlink": "Eglömol-li nünis kala olik?",
- "userlogin-resetpassword-link": "Dönuvälön letavödi olik",
+ "userlogin-resetpassword-link": "Eglömol-li letavödi olik?",
"createacct-emailrequired": "Ladet leäktronik",
"createaccountmail": "me pot leäktronik",
"createaccountreason": "Kod:",
@@ -372,7 +377,7 @@
"wrongpassword": "Letavöd neveräton. Steifülolös dönu.",
"wrongpasswordempty": "Letavöd vagon. Steifülolös dönu.",
"passwordtooshort": "Letavöds mutons binädon me {{PLURAL:$1|malat|malats}} pu $1.",
- "mailmypassword": "Sedön letavödi nulik",
+ "mailmypassword": "Dönuvälön letavödi",
"passwordremindertitle": "Letavöd nulik nelaidik in {{SITENAME}}",
"passwordremindertext": "Ek (luveratiko ol, se ladet-IP: $1) ebegon sedi letavöda nulik pro {{SITENAME}} ($4). Letavöd nelaidüpik pejafon pro geban: „$2“ me ninäd: „$3“. If atos ejenon ma vil olik, mutol anu nunädön oli e välön letavödi nulik. Letavöd nelaidüpik ola odulon dü {{PLURAL:$5|del bal|dels $5}}.\n\nIf pösod votik edunon begi at, ud if anu memol letavödi olik e no plu vilol votükön oni, dalol nedemön penedi at e laigebön letavödi rigik ola.",
"noemail": "Ladet leäktronik nonik peregistaron pro geban \"$1\".",
@@ -383,7 +388,7 @@
"mailerror": "Pöl dü sedam pota: $1",
"acct_creation_throttle_hit": "Visitans vüka at, gebölo ladeti-IP olik, ejafons {{PLURAL:$1|kali bal|kalis $1}} dü del lätik, kelos binon num gretikün kalas jafovik dü timaperiod at.\nSekü atos, visitans ladeti-IP at geböls no dalons jafön kalis pluik ün atim.",
"emailauthenticated": "Ladet leäktronik olik päfümükon tü düp $2 ün $3.",
- "emailnotauthenticated": "Ladet leäktronik ola no nog pefümedon. Pened nonik posedon me pads sököl.",
+ "emailnotauthenticated": "Ladet leäktronik ola no nog pefümedon.\nPened nonik posedon me lienäds sököl.",
"noemailprefs": "Givolös ladeti leäktronik, dat pads at okanons pagebön.",
"emailconfirmlink": "Fümedolös ladeti leäktronik ola",
"invalidemailaddress": "Ladet leäktronik no kanon pazepön bi fomät onik jiniko no lonöfon.\nPenolös ladeti labü fomät lonöföl, u vagükolös penamaspadi.",
@@ -391,10 +396,14 @@
"accountcreatedtext": "Gebanakal pro [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|bespik]]) pejafon.",
"createaccount-title": "Kalijafam in {{SITENAME}}",
"createaccount-text": "Ek ejafon kali pro ladet leäktronik ola in {{SITENAME}} ($4) labü nem: „$2“ e letavöd: „$3“. Kanol nunädön oli e votükön letavödi olik anu.\n\nKanol nedemön penedi at, üf jafam kala at binon pöl.",
- "login-throttled": "Esteifülol tumödikna ad nunädön oli änu.\nStebedolös büä osteifülol nogna.",
+ "login-throttled": "Esteifülol tumödikna ad nunädön oli änu.\nStebedolös $1 büä osteifülol nogna.",
"loginlanguagelabel": "Pük: $1",
+ "pt-login": "Nunädön oki",
+ "pt-login-button": "Nunädön oki",
+ "pt-createaccount": "Jafön kali",
+ "pt-userlogout": "Senunädön oki",
"changepassword": "Votükön letavödi",
- "resetpass_announce": "Enunädol oli me kot nelaidüpik pisedöl ole. Ad finükön nunädami, mutol välön letavödi nulik is:",
+ "resetpass_announce": "Ad finükön nunädami, mutol välön letavödi nulik.",
"resetpass_header": "Votükön kalaletavödi",
"oldpassword": "Letavöd büik:",
"newpassword": "Letavöd nulik:",
@@ -413,13 +422,11 @@
"passwordreset-domain": "Domen:",
"passwordreset-email": "Ladet leäktronik:",
"changeemail": "Votükön ladeti leäktronik",
- "changeemail-header": "Votükön ladeti leäktronik kala",
"changeemail-oldemail": "Ladet leäktronik anuik:",
"changeemail-newemail": "Ladet leäktronik nulik:",
"changeemail-none": "(nonik)",
"changeemail-password": "Letavöd olik su {{SITENAME}}:",
"changeemail-submit": "Votükön ladeti leäktronik",
- "changeemail-cancel": "Stöpädön",
"bold_sample": "Vödem bigik",
"bold_tip": "Vödem bigik",
"italic_sample": "Korsiv",
@@ -544,7 +551,7 @@
"currentrev": "Fomam anuik",
"currentrev-asof": "Fomam nuik tü $1",
"revisionasof": "Fomam dätü $1",
- "revision-info": "Fomam timü $1 fa el $2",
+ "revision-info": "Fomam timü $1 fa {{GENDER:$6|hiel|jiel|el}} $2($7)",
"previousrevision": "←Fomam vönedikum",
"nextrevision": "Fomam nulikum→",
"currentrevisionlink": "Fomam anuik",
@@ -581,7 +588,7 @@
"revdelete-hide-text": "Klänedön vödemi revida",
"revdelete-hide-image": "Klänedön ragivaninädi",
"revdelete-hide-name": "Klänedön duni e zeili",
- "revdelete-hide-comment": "Klänedön redakamaküpeti",
+ "revdelete-hide-comment": "Redakön küpeti",
"revdelete-hide-user": "Klänedön gebananemi u ladeti-IP redakana",
"revdelete-hide-restricted": "Gebön miedükamis at i demü guvans e lökofärmükön fometi at",
"revdelete-radio-same": "(no votükolös)",
@@ -623,7 +630,6 @@
"mergehistory-same-destination": "Fonäta- e zeilapad no dalons binön pad ot.",
"mergehistory-reason": "Kod:",
"mergelog": "Jenotalised padibalamas",
- "pagemerge-logentry": "Pad: [[$1]] pebalon ad [[$2]] (fomams jüesa $3)",
"revertmerge": "Säbalön",
"mergelogpagetext": "Is palisedon balamis brefabüikün jenotema pada bal ini votik.",
"history-title": "Revidajenotem pada: \"$1\"",
@@ -632,6 +638,7 @@
"compareselectedversions": "Leigodolöd fomamis pevälöl",
"showhideselectedversions": "Jonön/klänedön fomamis pevälöl",
"editundo": "sädunön",
+ "diff-empty": "(Nen difs)",
"searchresults": "Sukaseks",
"searchresults-title": "Sukaseks pro: \"$1\"",
"titlematches": "Leigon ko padatiäd",
@@ -657,6 +664,7 @@
"search-result-category-size": "{{PLURAL:$1|liman 1|limans $1}} ({{PLURAL:$2|donaklad 1|donaklads $2}}, {{PLURAL:$3|ragiv 1|ragivs $3}})",
"search-redirect": "(lüodüköm: $1)",
"search-section": "(diläd: $1)",
+ "search-category": "(klad: $1)",
"search-suggest": "Ediseinol-li: $1 ?",
"search-interwiki-caption": "Svistaproyegs",
"search-interwiki-default": "Seks se $1:",
@@ -665,7 +673,6 @@
"searchrelated": "tefik",
"searchall": "valik",
"showingresults": "Pajonons dono jü {{PLURAL:$1|sukasek '''1'''|sukaseks '''$1'''}}, primölo me nüm #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Sek: '''$1''' se '''$3'''|Seks: '''$1 - $2''' se '''$3'''}} pro '''$4'''",
"search-nonefound": "Sukaseks nonik dabinons.",
"powersearch-legend": "Suk komplitikum",
"powersearch-ns": "Sukön in nemaspads:",
@@ -684,6 +691,7 @@
"prefs-personal": "Gebananüns",
"prefs-rc": "Votükams nulik",
"prefs-watchlist": "Galädalised",
+ "prefs-editwatchlist": "Redakön galädalisedi",
"prefs-watchlist-days": "Num delas ad pajonön in galädalised:",
"prefs-watchlist-days-max": "Maxum: {{PLURAL:$1|del|dels}} $1",
"prefs-watchlist-edits": "Num redakamas ad pajonön in galädalised pestäänüköl:",
@@ -873,6 +881,7 @@
"action-userrights-interwiki": "redakön gebanagitätis gebanas vükas votik",
"action-siteadmin": "lökofärmükön u maifükön nünodemi",
"nchanges": "{{PLURAL:$1|votükam|votükams}} $1",
+ "enhancedrc-history": "jenotem",
"recentchanges": "Votükams nulik",
"recentchanges-legend": "Votükams nulik: paramets",
"recentchanges-summary": "Su pad at binons votükams nulikün in vüki at.",
@@ -881,15 +890,27 @@
"recentchanges-label-minor": "Atos binon redakam pülik",
"recentchanges-label-bot": "Redakam at pädunon fa el bot",
"recentchanges-label-unpatrolled": "Redakam at no nog pekontrolon",
- "recentchanges-legend-newpage": "$1 - pad nulik",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (logolös i [[Special:NewPages|lisedi padas nulik]])",
"rcnotefrom": "Is palisedons votükams sis '''$2''' (jü '''$1''').",
"rclistfrom": "Jonön votükamis nulik, primölo tü düp $3 $2",
"rcshowhideminor": "$1 votükamis pülik",
+ "rcshowhideminor-show": "Jonön",
+ "rcshowhideminor-hide": "Klänedön",
"rcshowhidebots": "$1 elis bot",
- "rcshowhideliu": "$1 gebanis penunädöl",
+ "rcshowhidebots-show": "Jonön",
+ "rcshowhidebots-hide": "Klänedön",
+ "rcshowhideliu": "$1 gebanis registaröl",
+ "rcshowhideliu-show": "Jonön",
+ "rcshowhideliu-hide": "Klänedön",
"rcshowhideanons": "$1 gebanis nennemik",
+ "rcshowhideanons-show": "Jonön",
+ "rcshowhideanons-hide": "Klänedön",
"rcshowhidepatr": "Redakams $1 pekontrolons",
+ "rcshowhidepatr-show": "Jonön",
+ "rcshowhidepatr-hide": "Klänedön",
"rcshowhidemine": "$1 redakamis obik",
+ "rcshowhidemine-show": "Jonön",
+ "rcshowhidemine-hide": "Klänedön",
"rclinks": "Jonön votükamis lätik $1 ün dels lätik $2<br />$3",
"diff": "dif",
"hist": "jen",
@@ -901,6 +922,7 @@
"number_of_watching_users_pageview": "[{{PLURAL:$1|geban|gebans}} galädöl $1]",
"rc_categories": "Te klads fovik (ditolös me el \"|\")",
"rc_categories_any": "Alseimik",
+ "rc-change-size-new": "{{PLURAL:$1|jölät|jöläts}} $1 po votükam",
"newsectionsummary": "/* $1 */ diläd nulik",
"rc-enhanced-expand": "Jonön patis",
"rc-enhanced-hide": "Klänedön patis",
@@ -1060,7 +1082,6 @@
"statistics": "Statits",
"statistics-header-pages": "Statits pada",
"statistics-header-edits": "Redakamastatits",
- "statistics-header-views": "Logamastatits",
"statistics-header-users": "Gebanastatits",
"statistics-header-hooks": "Statits votik",
"statistics-articles": "Pads ninädilabik",
@@ -1069,12 +1090,9 @@
"statistics-files": "Ragivs pelöpüköl",
"statistics-edits": "Padiredakams sisä {{SITENAME}} päjafon",
"statistics-edits-average": "Num zänedik redakamas a pad",
- "statistics-views-total": "Logams (valod)",
- "statistics-views-peredit": "Logams a redakam",
"statistics-users": "[[Special:ListUsers|Gebans]] peregistaröl",
"statistics-users-active": "Gebans jäfedik",
"statistics-users-active-desc": "Gebans, kels edunons bosi ün {{PLURAL:$1|del lätik|dels lätik $1}}",
- "statistics-mostpopular": "Pads suvüno palogöls:",
"pageswithprop-submit": "Golön",
"doubleredirects": "Lüodüköms telik",
"doubleredirectstext": "Kedet alik labon yümis lü lüodüköm balid e telid, ed i kedeti balid vödema lüodüköma telid, kel nomiko ninädon padi, ko kel lüodüköm balid söton payümön.",
@@ -1106,7 +1124,6 @@
"uncategorizedtemplates": "Samafomots nen klad",
"unusedcategories": "Klads no pageböls",
"unusedimages": "Ragivs no pageböls",
- "popularpages": "Pads suvüno pelogöls",
"wantedcategories": "Klads mekabik",
"wantedpages": "Pads mekabik",
"wantedfiles": "Ragivs mekabik",
@@ -1148,7 +1165,7 @@
"suppress": "Lovelogam",
"booksources": "Bukafons",
"booksources-search-legend": "Sukön bukafonis:",
- "booksources-go": "Getolöd",
+ "booksources-search": "Sukön",
"booksources-text": "Is palisedons bevüresodatopäds votik, kels selons bukis nulik e pegebölis, e kels ba labons nünis pluik dö buks fa ol pasuköls:",
"booksources-invalid-isbn": "El ISBN at jiniko no lonöfon; kontrololös pökis po kopiedam se rigafonät.",
"specialloguserlabel": "Dunan:",
@@ -1245,7 +1262,7 @@
"wlheader-enotif": "Nunam medü pot leäktronik pemögükon.",
"wlheader-showupdated": "Pads pos visit lätik ola pevotüköls papenons '''me tonats bigik'''",
"wlnote": "Is palisedons votükam{{PLURAL:$1| lätik|s lätik '''$1'''}} dü düp{{PLURAL:$2| lätik|s lätik '''$2'''}}.",
- "wlshowlast": "Jonolöd: düpis lätik $1, delis lätik $2, $3",
+ "wlshowlast": "Jonolöd: düpis lätik $1, delis lätik $2,",
"watchlist-options": "Paramets galädaliseda",
"watching": "Papladon ini galädalised...",
"unwatching": "Pamoükon se galädalised...",
@@ -1281,7 +1298,6 @@
"delete-toobig": "Pad at labon redakamajenotemi lunik ({{PLURAL:$1|revid|revids}} plu $1).\nMoükam padas somik pemiedükon ad vitön däropami pö {{SITENAME}}.",
"delete-warning-toobig": "Pad at labon jenotemi lunik: {{PLURAL:$1|revid|revids}} plu $1.\nPrudö! Moükam onik ba osäkädükon jäfidi nünodema: {{SITENAME}}.",
"rollback": "Sädunön redakamis",
- "rollback_short": "Sädunön vali",
"rollbacklink": "sädunön vali",
"rollbackfailed": "Sädunam no eplöpon",
"cantrollback": "Redakam no kanon pasädunön; keblünan lätik binon lautan teik pada at.",
@@ -1295,7 +1311,6 @@
"protectedarticle": "ejelon padi: „[[$1]]“",
"modifiedarticleprotection": "evotükon jelanivodi pada: „[[$1]]“",
"unprotectedarticle": "esäjelon padi: \"[[$1]]\"",
- "movedarticleprotection": "moved protection settings from „[[$2]]“ to „[[$1]]“",
"protect-title": "lonon jelanivodi pada: „$1“",
"prot_1movedto2": "[[$1]] petopätükon lü [[$2]]",
"protect-legend": "Fümedolös jeli",
@@ -1588,9 +1603,8 @@
"thumbnail_invalid_params": "Paramets magodila no lonöfons",
"thumbnail_dest_directory": "No emögos ad jafön zeilaragiviäri",
"import": "Nüveigön padis",
- "importinterwiki": "Nüveigam vü vüks",
+ "importinterwiki": "Nüveigön de vük votik",
"import-interwiki-text": "Levälolös vüki e padatiädi ad nüveigön.\nDäts fomamas e nems redakanas pokipedons.\nNüveigs vüvükik valik pajonons su [[Special:Log/import|nüveigamalised]].",
- "import-interwiki-source": "Fonätavük/pad:",
"import-interwiki-history": "Kopiedön fomamis valik jenotema pada at",
"import-interwiki-templates": "Keninükön samafomotis valik",
"import-interwiki-submit": "Nüveigön",
@@ -1614,15 +1628,13 @@
"import-parse-failure": "Pöl pö nüveigam ela XML",
"import-noarticle": "Pad nüveigabik nonik!",
"import-nonewrevisions": "Fomams valik ya pinüveigons.",
- "xml-error-string": "$1 pö lien: $2, kolum: $3 (jölat: $4): $5",
+ "xml-error-string": "$1 pö lien: $2, kolum: $3 (jölät: $4): $5",
"import-upload": "Löpükön nünodis-XML",
"import-token-mismatch": "Redakamanünods peperons. Steifülolös dönu.",
"import-invalid-interwiki": "Nüveigam se vük pavilöl no mögon.",
"importlogpage": "Jenotalised nüveigamas",
"importlogpagetext": "Nüveigam guverik padas labü redakamajenotem se vüks votik",
- "import-logentry-upload": "pad: [[$1]] penüveigon medü ragivilöpükam",
"import-logentry-upload-detail": "{{PLURAL:$1|fomam|fomams}} $1",
- "import-logentry-interwiki": "pevotavükükon: $1",
"import-logentry-interwiki-detail": "{{PLURAL:$1|fomam|fomams}} $1 se $2",
"tooltip-pt-userpage": "Gebanapad olik",
"tooltip-pt-anonuserpage": "Gebanapad ladeta-IP, me kel redakol",
@@ -1737,7 +1749,7 @@
"file-nohires": "Gretot gudikum no pagebidon.",
"svg-long-desc": "ragiv in fomät: SVG, magodaziöbs $1 × $2, gretot: $3",
"svg-long-error": "Ragiv 'SVG' ne lonöfon: $1",
- "show-big-image": "Gretot gudikün",
+ "show-big-image": "Ragiv rigik",
"newimages": "Pänotem ragivas nulik",
"imagelisttext": "Dono binon lised '''$1''' {{PLURAL:$1|ragiva|ragivas}} $2 pedilädölas.",
"newimages-summary": "Pad patik at lisedon ragivis pelöpüköl lätik.",
@@ -1972,7 +1984,6 @@
"exif-dc-publisher": "Püban",
"exif-iimcategory-spo": "Spots",
"exif-iimcategory-wea": "Stom",
- "watchlistall2": "valikis",
"namespacesall": "valik",
"monthsall": "valik",
"confirmemail": "Fümedolös ladeti leäktronik",
@@ -2033,6 +2044,7 @@
"watchlisttools-view": "Logön votükamis teföl",
"watchlisttools-edit": "Logön e redakön galädalisedi",
"watchlisttools-raw": "Redakön galädalisedi nen fomät",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|bespik]])",
"duplicate-defaultsort": "Nüned: Leodükamakik kösömik: „$2“ buon bu leodükamakik kösömik büik: „$1“.",
"version": "Fomam",
"version-extensions": "Veitükumams pestitöl",
@@ -2042,7 +2054,6 @@
"version-hooks": "Huköms",
"version-hook-name": "Hukömanem",
"version-hook-subscribedby": "Pagebon fa",
- "version-version": "(Fomam $1)",
"version-license": "Dälazöt",
"version-poweredby-others": "votikans",
"version-software": "Programs pestitöl",
@@ -2094,9 +2105,14 @@
"htmlform-selectorother-other": "Votik",
"htmlform-no": "Nö",
"htmlform-yes": "Si",
+ "logentry-delete-delete": "$1 emoükon padi: $3",
"revdelete-restricted": "miedükams pelonöfükons pro guvans",
"revdelete-unrestricted": "miedükams pro guvans pemoükons",
+ "logentry-block-unblock": "$1 {{GENDER:$2|eblokon}} {{GENDER:$4|hieli $3|jieli $3|eli $3}}",
+ "logentry-newusers-create": "Gebanakal: $1 pejafon",
"rightsnone": "(nonik)",
+ "revdelete-summary": "plän redakama",
+ "feedback-error-title": "Pöl",
"feedback-subject": "Yegäd:",
"searchsuggest-search": "Suk",
"searchsuggest-containing": "ninädöl...",
diff --git a/languages/i18n/vot.json b/languages/i18n/vot.json
index 28d38e75..1fcb1d92 100644
--- a/languages/i18n/vot.json
+++ b/languages/i18n/vot.json
@@ -195,7 +195,6 @@
"resetpass-submit-cancel": "Otmeńoit",
"passwordreset-username": "Cäüttijänimi:",
"changeemail-newemail": "Vassõn e-mail:",
- "changeemail-cancel": "Otmeńoit",
"bold_sample": "Pimmiä teksti",
"bold_tip": "Pimmiä teksti",
"italic_sample": "Kursiivoi teksti",
@@ -303,7 +302,6 @@
"search-interwiki-more": "(lisä)",
"searchrelated": "sittu",
"searchall": "kõik",
- "showingresultsheader": "{{PLURAL:$5|Tuloz '''$1''' '''$3'''-ss|Tulohsõd '''$1-$2''' '''$3'''-ss}} «$4» vart",
"search-nonefound": "Cüsümühse mukaizõssi eb õõ mitäid löütettü.",
"powersearch-legend": "Etenennü ettsü",
"powersearch-ns": "Etsi nimiruumõssa:",
@@ -425,7 +423,6 @@
"pager-older-n": "{{PLURAL:$1|vanöpi 1|vanõpad $1}}",
"booksources": "Сirjalähed",
"booksources-search-legend": "Etsi сirjalähteit",
- "booksources-go": "Mee",
"log": "Logid",
"allpages": "Kõik artikkelid",
"prevpage": "Entin сülсi ($1)",
@@ -453,7 +450,7 @@
"watchthispage": "Katso sitä cülciä",
"unwatch": "Lõpõt kattsõõmin",
"watchlist-details": "Kattsõspiizgall on {{PLURAL:$1|$1 cülci|$1 cülciä}} (ilma juttucülciit).",
- "wlshowlast": "Näüt viimeized $1 tunnia vai $2 päivää $3",
+ "wlshowlast": "Näüt viimeized $1 tunnia vai $2 päivää",
"watchlist-options": "Kattsõspiizgaa valimizõd",
"watching": "Kattsõõn…",
"unwatching": "Kattsõõmizõõ lõpõttõmin…",
@@ -648,7 +645,6 @@
"exif-iimcategory-hth": "Terveüz",
"exif-iimcategory-pol": "Politiikka",
"exif-iimcategory-wea": "Ilma",
- "watchlistall2": "koko istori",
"namespacesall": "kõik",
"monthsall": "kõik",
"confirm_purge_button": "OK",
diff --git a/languages/i18n/vro.json b/languages/i18n/vro.json
index 9461efec..a65ac571 100644
--- a/languages/i18n/vro.json
+++ b/languages/i18n/vro.json
@@ -25,6 +25,7 @@
"tog-watchdefault": "Panõq perräkaemisnimekirjä muq muudõduq leheq ja teedüstüq",
"tog-watchmoves": "Panõq muq ümbrenõstõduq leheq ja teedüstüq muq perräkaemisnimekirjä",
"tog-watchdeletion": "Panõq mu kistutõduq leheküleq mu perräkaemisnimekirjä",
+ "tog-watchrollback": "Panõq perräkaemisnimekirjä mano leheq, kon ma olõ uma muutmisõ tagasi võtnuq.",
"tog-minordefault": "Märgiq kõik parandusõq vaikimiisi väikeisis paranduisis",
"tog-previewontop": "Näütäq proovikaehust inne, mitte perän toimõnduskasti",
"tog-previewonfirst": "Näütäq edimädse toimõndusõ aigo proovikaehust",
@@ -35,7 +36,7 @@
"tog-shownumberswatching": "Näütäq, ku pall'o pruukjit taa lehe perrä kaes",
"tog-oldsig": "Parhillanõ alakirotus:",
"tog-fancysig": "Pruugiq vikiteksti moodulist alakirotust (ilma automaatsõ lingildä)",
- "tog-uselivepreview": "Pruugiq õkvakipõkaehust (proomivõimalus)",
+ "tog-uselivepreview": "Pruugiq õkvakipõkaehust",
"tog-forceeditsummary": "Annaq teedäq, ku olõ-i kirotõt kokkovõtõt",
"tog-watchlisthideown": "Näüdäku-i perräkaemisnimekirän mu hindä toimõnduisi",
"tog-watchlisthidebots": "Näüdäku-i perräkaemisnimekirän robotidõ toimõnduisi",
@@ -173,8 +174,11 @@
"permalink": "Püsülink",
"print": "Trüküq vällä",
"view": "Näütäq",
+ "view-foreign": "Kaeq $1 pääl",
"edit": "Toimõndaq",
+ "edit-local": "Toimõndaq paigapäälist seletüst",
"create": "Luuq leht",
+ "create-local": "Luuq paigapääline seletüs",
"editthispage": "Toimõndaq seod artiklit",
"create-this-page": "Luuq seo leht",
"delete": "Kistudaq ärq",
@@ -207,6 +211,7 @@
"otherlanguages": "Tõisin keelin",
"redirectedfrom": "(Ümbre saadõt artiklist $1)",
"redirectpagesub": "Ümbresaatmislehekülg",
+ "redirectto": "Ümbre saadõt lehele:",
"lastmodifiedat": "Seo leht om viimäte muudõt $2, $1.",
"viewcount": "Seo lehe pääl om käüt $1 {{PLURAL:$1|kõrd|kõrda}}.",
"protectedpage": "Kaidsõt artikli",
@@ -214,9 +219,12 @@
"jumptonavigation": "juhtminõ",
"jumptosearch": "otsminõ",
"view-pool-error": "Serveriq ommaq parhilla üle koormaduq.\nPall'o hulga pruukjit pruuv kõrraga seod lehte kaiaq.\nOlõq hää, oodaq vähäkese inne ku vahtsõst proomit.\n\n$1",
+ "generic-pool-error": "Serveriq ommaq parhilla üle koormaduq.\nPall'o hulga pruukjit pruuv kõrraga seod lehte kaiaq.\nOlõq hää, oodaq vähäkese inne ku vahtsõst proomit.",
"pool-timeout": "Kinniqpidämise uutmisaig om läbi",
"pool-queuefull": "Kinniqpandmiisi järekõrd om täüs",
"pool-errorunknown": "Tiidmäldä hädä",
+ "pool-servererror": "Pool counter-teenüst saa-ai pruukiq ($1).",
+ "poolcounter-usage-error": "Pruukmisviga: $1",
"aboutsite": "{{SITENAME}} tutvustus",
"aboutpage": "Project:Pääteedüs",
"copyright": "Teksti või vabalt pruukiq litsendsi $1 perrä, ku olõ-õi tõisildõ üteld.",
@@ -241,7 +249,7 @@
"ok": "Hää külh",
"retrievedfrom": "Vällä otsit teedüskogost \"$1\"",
"youhavenewmessages": "Sul om $1 ($2).",
- "youhavenewmessagesfromusers": "Sullõ om $1 {{PLURAL:$3|ütelt|$3}} pruukjalt ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Sullõ om}} $1 {{PLURAL:$3|ütelt|$3 pruukjalt}} ($2).",
"youhavenewmessagesmanyusers": "Sullõ om $1 pall'odõlt pruukjilt ($2).",
"newmessageslinkplural": "{{PLURAL:$1|vahtsõnõ sõnnom|999=vahtsit sõnomit}}",
"newmessagesdifflinkplural": "{{PLURAL:$1|viimäne muutminõ|999=viimädseq muutmisõq}}",
@@ -257,6 +265,9 @@
"hidetoc": "käkiq",
"collapsible-collapse": "Käkiq ärq",
"collapsible-expand": "Näütäq",
+ "confirmable-confirm": "Kas {{GENDER:$1|olõt}} kimmäs?",
+ "confirmable-yes": "Jah",
+ "confirmable-no": "Ei",
"thisisdeleted": "Kaeq vai tiiq tagasi $1?",
"viewdeleted": "Näüdädäq $1?",
"restorelink": "{{PLURAL:$1|üts kistutõt muutminõ|$1 kustutõdut muutmist}}",
@@ -305,6 +316,8 @@
"filerenameerror": "Es saaq teedüstüt \"$1\" teedüstüs \"$2\" ümbre nimetäq.",
"filedeleteerror": "Teedüstüt nimega \"$1\" saa-i ärq kistutaq.",
"directorycreateerror": "Saa-s luvvaq kausta \"$1\".",
+ "directoryreadonlyerror": "Kataloog \"$1\" om kirotuskaidsõt.",
+ "directorynotreadableerror": "Kataloog \"$1\" olõ-õi loetav.",
"filenotfound": "Lövvä es teedüstüt \"$1\".",
"unexpected": "Uutmaldaq väärtüs: \"$1\"=\"$2\".",
"formerror": "Viga: vormi saa es pästäq",
@@ -324,20 +337,39 @@
"viewsourcetext": "Võit kaiaq ja kopidaq taa lehe lättekoodi:",
"viewyourtext": "Saat kaiaq ja kopidaq noidõ muutmiisi lätteteksti, miä sa seo lehe pääle '''esiq''' tennüq olõt:",
"protectedinterface": "Taa lehe pääl om tarkvara pruukjapalgõ tekst. Leht om lukku pant, et taad saasi-i ärq ts'urkiq. \nKu tahat tetäq ümbrepandmiisi (midä pruukvaq kõik vikiq) pruugiq tuus MediaWiki ümbrepandmisõ tüükeskkunda [//translatewiki.net/ translatewiki.net].",
- "editinginterface": "'''Hoiatus:''' Sa toimõndat tarkvara pruukjapalgõ tekstiga lehte. Ku siin midä muudat, mõotas tuu pruukjapalõt. Ümbrepandmisõs tasos pruukiq MediaWiki ümbrepandmisõ tüükeskkunda [//translatewiki.net/ translatewiki.net].",
+ "editinginterface": "<strong>Hoiatus:</strong> Sa toimõndat tarkvara pruukjapalgõ tekstiga lehte. \nKu siin midä muudat, mõotas tuu pruukjapalõt.",
+ "translateinterface": "Et tetäq vai muutaq ümbrepandmiisi ütskõik määntse viki jaos, pruugiq MediaWiki ümbrepandmiskeskkunda [//translatewiki.net/ translatewiki.net].",
"cascadeprotected": "Taa leht om kirotuskaidsõt, selle et taa {{PLURAL:$1|kuulus alanolõvidõ kaidsõtuidõ lehti hulka|kuulus alanolõvidõ kaidsõtuidõ lehti hulka}}:\n$2",
"namespaceprotected": "Sul olõ-i lubat toimõndaq nimeruumi '''$1''' lehti.",
+ "myprivateinfoprotected": "Sul olõ-õi lubat ummi eräandmit muutaq.",
+ "mypreferencesprotected": "Sul olõ-õi lubat ummi säädmiisi muutaq.",
"ns-specialprotected": "Tallituslehekülgi ei saaq toimõndaq.",
"titleprotected": "Pruukja [[User:$1|$1]] om sääntse nimega lehe luumisõ ärq kiildnüq põhjusõga: ''$2''.",
+ "exception-nologin": "Olõ-i nimega sisse mint",
+ "exception-nologin-text": "Seo lehe vai tegemise mano päsemises piät nomega sisse minemä.",
+ "exception-nologin-text-manual": "Seolõ lehele vai tegemisele mano päsemises piät $1.",
"virus-badscanner": "Viga säädmiisin: tundmalda viirusõkaidsõq: ''$1''",
"virus-scanfailed": "viirusõotsminõ lää-s kõrda (viakuud $1)",
"virus-unknownscanner": "tundmalda viirusõkaidsõq:",
- "logouttext": "'''Olõt nime alt vällä lännüq.'''\n\nVõit {{SITENAME}}t ilma nimeldä edesi toimõndaq vai <span class='plainlinks'>[$1 vahtsõst sama vai tõõsõ nimega sisse minnäq]</span>.\nTähelepandmisõs: niikavva, ku sa olõ-i tühäs tennüq uma võrgokaeja vaihõmällo, võivaq mõnõq leheküleq iks viil näüdädäq, nigu sa olõsi nimega seen.",
+ "logouttext": "'''Olõt nime alt vällä lännüq.'''\n\nTähelepandmisõs: niikavva, ku sa olõ-i tühäs tennüq uma võrgokaeja vaihõmällo, võivaq mõnõq leheküleq iks viil näüdädäq, nigu sa olõsi nimega seen.",
+ "welcomeuser": "Olõq terveq tulõma, $1!",
+ "welcomecreation-msg": "Suq pruukjakonto om valmis.\nKu tahat, saat muutaq ummi {{SITENAME}} [[Special:Preferences|säädmiisi]].",
"yourname": "Pruukjanimi",
+ "userlogin-yourname": "Pruukjanimi",
+ "userlogin-yourname-ph": "Kirodaq uma pruukjanimi",
+ "createacct-another-username-ph": "Kirodaq pruukjanimi",
"yourpassword": "Salasõna",
+ "userlogin-yourpassword": "Salasõna",
+ "userlogin-yourpassword-ph": "Kirodaq uma salasõna",
+ "createacct-yourpassword-ph": "Kirodaq salasõna",
"yourpasswordagain": "Kirodaq viilkõrd salasõna",
+ "createacct-yourpasswordagain": "Kinnüdäq uma salasõna",
+ "createacct-yourpasswordagain-ph": "Kirodaq salasõna vahtsõst",
"remembermypassword": "Jätäq salasõna miilde (kooniq $1 {{PLURAL:$1|pääväs|pääväs}})",
+ "userlogin-remembermypassword": "Jääq uma nimega sisse",
+ "userlogin-signwithsecure": "Pruugiq kaidsõtut võrgoütistüst",
"yourdomainname": "Võrgonimi",
+ "password-change-forbidden": "Seon vikin saa-ai salasõnno muutaq.",
"externaldberror": "Välitsen kimmästegemisteedüskogon om viga vai olõ-i sul lubat umma pruukjanimme muutaq.",
"login": "Nimega sisseminek",
"nav-login-createaccount": "Mineq nimega sisse",
@@ -346,64 +378,101 @@
"logout": "Nime alt välläminek",
"userlogout": "Mineq nime alt vällä",
"notloggedin": "Olõ-i nimega sisse mint",
+ "userlogin-noaccount": "Sul olõ-i viil pruukjanimme?",
+ "userlogin-joinproject": "Nakkaq {{SITENAME}} pruukjas!",
"nologin": "Sul olõ-i viil pruukjanimme? '''$1'''.",
"nologinlink": "Tiiq hindäle pruukjanimi",
"createaccount": "Tiiq pruukjanimi ärq",
"gotaccount": "Ku sul jo om uma pruukjanimi, sis '''$1'''.",
"gotaccountlink": "võit nimega sisse minnäq",
"userlogin-resetlink": "Kas olõt uma salasõna ärq unõhtanuq?",
- "createaccountmail": "e-postiga",
+ "userlogin-resetpassword-link": "Kas salasõna läts' meelest ärq?",
+ "userlogin-helplink2": "Nimega sisseminemise abi",
+ "userlogin-createanother": "Luuq tõõnõ konto",
+ "createacct-emailrequired": "E-postiaadrõs",
+ "createacct-emailoptional": "E-postiaadrõs (või ka kirotamalda jättäq)",
+ "createacct-email-ph": "Kirodaq uma e-postiaadrõss",
+ "createacct-another-email-ph": "Kirodaq e-postiaadrõss",
+ "createaccountmail": "Pruugiq aotlist johuslist salasõnna ja saadaq tuu annõdu aadrõsi pääle",
+ "createacct-realname": "Peris nimi (või ka kirotamalda jättäq)",
"createaccountreason": "Põhjus:",
+ "createacct-reason": "Põhjus",
+ "createacct-reason-ph": "Mille tahat luvvaq tõõsõ pruukjakonto?",
+ "createacct-captcha": "Kaitsõkontroll",
+ "createacct-imgcaptcha-ph": "Kirodaq seo tekst, midä tan näet",
+ "createacct-submit": "Luuq konto",
+ "createacct-another-submit": "Luuq tõõnõ konto",
+ "createacct-benefit-heading": "{{SITENAME}} um luud sääntsilsamol inemiisil, nigu saq.",
+ "createacct-benefit-body1": "{{PLURAL:$1|muutminõ|muutmist}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|lehekülg|lehekülge}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|ildaaigo toimõndanuq pruukja|ildaaigo toimõndanut pruukjat}}",
"badretype": "Kirotõduq salasõnaq ei klapiq kokko.",
"userexists": "Taad pruukjanimme jo pruugitas.\nValiq tõõnõ nimi.",
"loginerror": "Sisseminemise viga",
+ "createacct-error": "Pruukjanome luumisõ viga",
"createaccounterror": "Pruukjanime luuminõ lää-äs kõrda: $1",
"nocookiesnew": "Pruukjakonto om valmis, a sa päse-s sisse, selle et {{SITENAME}} tarvitas pruukjidõ kimmästegemises valmistuisi. Suq võrgokaejan ommaq valmistusõq ärq keeledüq. Säeq valmistusõq lubatus ja mineq sis uma vahtsõ pruukjanime ja salasõnaga sisse.",
"nocookieslogin": "{{SITENAME}} tarvitas pruukjidõ kimmästegemises valmistuisi. Suq võrgokaejan ommaq valmistusõq keeledüq. Säeq valmistusõq lubatus ja prooviq vahtsõst.",
+ "nocookiesfornew": "Pruukjanimme saa-as luvvaq, miiq saa-as kinnütüst tuu lätte kotsilõ.\nKaeq üle, kas sul ummaq lisaprogrammiq (cookie'q) lubaduq ja laadiq seo leht vahtsõst.",
"noname": "Võlssi kirotõt pruukjanimi.",
"loginsuccesstitle": "Sisseminek läts' kõrda",
"loginsuccess": "Olõt nimega sisse lännüq. Suq pruukjanimi om \"$1\".",
"nosuchuser": "\"$1\" nimelist pruukjat olõ-i olõman.\nKaeq kiräpilt üle vai [[Special:UserLogin/signup|luuq vahtsõnõ pruukjanimi]].",
"nosuchusershort": "\"$1\" nimelist pruukjat olõ-i olõman. Kas kirotit iks nime õigõhe?",
"nouserspecified": "Olõ-i kirotõt pruukjanimme.",
+ "login-userblocked": "Seo pruukja om kinniq peet. Nimega sisseminemine olõ-õi lubat.",
"wrongpassword": "Kirotõt võlss salasõna. Prooviq vahtsõst.",
"wrongpasswordempty": "Salasõna tohe-i tühi ollaq.",
- "passwordtooshort": "Salasõna om viganõ vai pall'o lühkü. Taan piät olõma vähämbält {{PLURAL:$1|1 märk|$1 märki}} ja taa tohe-i ollaq sama, miä su pruukjanimi.",
+ "passwordtooshort": "Salasõna piät olõma vähämbält {{PLURAL:$1|1 märk|$1 märki}} pikk.",
+ "password-name-match": "Salasõna piät olõma midägi muud ku pruukjanimi..",
+ "password-login-forbidden": "Seo pruukjanime ja salasõna tarvitaminõ om keelet.",
"mailmypassword": "Vahtsõndaq umma salasõnna",
"passwordremindertitle": "{{SITENAME}} salasõna miildetulõtus",
"passwordremindertext": "Kiäki (arvadaq saq esiq, puutri võrgonummõr $1),\npallõl' vahtsõt sisseminegi salasõnna {{SITENAME}} ($4) jaos.\nPruukja \"$2\" salasõna om noq \"$3\". Ku olõt nimega sisse lännüq, võit taa aotlidsõ salasõna ärq muutaq.\nAotlinõ salasõna lätt vanas {{PLURAL:$5|üte päävä|$5 päävä}} peräst.\n\nKu taa pallõmisõ om tennüq kiä tõõnõ vai ku olõt uma salasõna miilde tulõtanuq ja taha-i taad inämb muutaq,\nsis teku-i seost sõnomist vällä ja pruugiq umma vanna salasõnna edesi.",
"noemail": "Kah'os olõ-i meil pruukja \"$1\" e-postiaadrõssit.",
+ "noemailcreate": "Pead kirotama kõrraligu e-postiaadrõsi",
"passwordsent": "Vahtsõnõ salasõna om saadõt pruukja \"$1\" kirotõdu e-postiaadrõsi pääle. Ku olõt salasõna kätte saanuq, mineq nimega sisse.",
"blocked-mailpassword": "Su võrgonumbrilõ om pant pääle toimõndamiskiild, miä lasõ-i salasõnna miilde tulõtaq.",
- "eauthentsent": "Sullõ om saadõt kinnütüskiri. Muid kirjo saadõta-i inne, ku olõt tennüq nii, kuis kirän opat ja kinnütänüq, et taa om suq e-postiaadrõs.",
+ "eauthentsent": "Sullõ om saadõt kinnütüskiri. \nMuid kirjo saadõta-i inne, ku olõt tennüq nii, kuis kirän opat ja kinnütänüq, et taa om suq e-postiaadrõs.",
"throttled-mailpassword": "{{PLURAL:$1|tunni|$1 tunni}} seen om saadõt salasõna miildetulõtus. Sääntsit miildetulõtuisi saadõtas õnnõ {{PLURAL:$1|tunni|$1 tunni}} takast.",
"mailerror": "Kirä saatmisõ viga: $1",
"acct_creation_throttle_hit": "Sa olõt tennüq jo {{PLURAL:$1|1 pruukjanime|$1 pruukjanimme}}. Rohkõmb ei saaq.",
"emailauthenticated": "Su e-postiaadrõs kinnütedi ärq $2 kell $3.",
- "emailnotauthenticated": "Su e-postiaadrõssit olõ-i viil kinnütet. Alanolõvi as'on e-kirjo ei saadõtaq.",
+ "emailnotauthenticated": "Su e-postiaadrõssit olõ-i viil kinnütet. \nAlanolõvidõ asjo kotsilõ sullõ e-kirjo ei saadõdaq.",
"noemailprefs": "Olõ-i ant e-postiaadrõssit.",
"emailconfirmlink": "Kinnüdäq uma e-postiaadrõs.",
"invalidemailaddress": "Olõ-i kõrralik e-postiaadrõs, taa om võlss moodun.\nKirodaq õigõ e-postiaadrõs vai jätäq rivi rühäs.",
+ "cannotchangeemail": "Seon vikin saa-ai konto e-postiaadressit muutaq.",
+ "emaildisabled": "Seo võrgokotusõ kaudu saa-ai e-kirjo saataq.",
"accountcreated": "Pruukjanimi luudi",
- "accountcreatedtext": "Luudi pruukjanimi pruukjalõ $1.",
+ "accountcreatedtext": "Pruukja [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) konto om luud.",
"createaccount-title": "Vahtsõ {{SITENAME}} pruukjanime luuminõ",
"createaccount-text": "Kiäki om loonuq pruukjanime $2 lehistüle {{SITENAME}} ($4). Pruukjanime \"$2\" salasõna om \"$3\".\nMineq nimega sisse ja vaihtaq salasõna ärq.\n\nKu taa pruukjanimi om luud kogõmaldaq, olõ-i sul vaia taast sõnomist vällä tetäq.",
- "login-throttled": "Olõt uma nime ala minekis pruuvnuq pall'o hulga esiqsugutsit salasõnno.\nOodaq vähä inne ku proovit vahtsõst.",
+ "login-throttled": "Olõt pall'o hulga kõrdo pruuvnuq uma nimega sisse minnäq.\nOodaq $1 inne ku proovit vahtsõst.",
+ "login-abort-generic": "Nimega sisseminek lää-äs kõrda – katski jätet",
+ "login-migrated-generic": "Su konto om ärq viid ja su pruukjanimme olõ-õi inämb seon vikin.",
"loginlanguagelabel": "Kiil: $1",
+ "createacct-another-realname-tip": "Sa piä-äi umma peris nimme kirotama.\nKu otsustat tuu kirotaq, näüdätäs tuud pruukjanime asõmal lehe tegijide nimekirän.",
+ "pt-login": "Nimega sisseminek",
+ "pt-login-button": "Nimega sisseminek",
+ "pt-createaccount": "Tiiq hindäle pruukjanimi",
+ "pt-userlogout": "Mineq nime alt vällä",
"changepassword": "Muudaq salasõnna",
- "resetpass_announce": "Sa lätsit sisse e-postiga saadõdu aotlidsõ koodiga. Kõrdapiten sisseminekis tulõ sul siin tetäq hindäle vahtsõnõ salasõna:",
+ "resetpass_announce": "Kõrdapiten sisseminekis tulõ sul tetäq hindäle vahtsõnõ salasõna.",
"resetpass_text": "<!-- Kirodaq siiäq -->",
"resetpass_header": "Muudaq pruukjanime salasõnna",
"oldpassword": "Vana salasõna",
"newpassword": "Vahtsõnõ salasõna",
"retypenew": "Kirodaq viilkõrd vahtsõnõ salasõna",
"resetpass_submit": "Kirodaq salasõna ja mineq nimega sisse",
- "changepassword-success": "Salasõna vaihtaminõ läts kõrda.",
+ "changepassword-success": "Salasõna vaihtaminõ läts kõrda!",
+ "changepassword-throttled": "Olõt ildaaigo pruuvnuq pall'o hulga kõrdo nimega sisse minnäq.\nOlõq hää, oodaq $1, inne ku vahtsõst proovit.",
"resetpass_forbidden": "Salasõnno saa-i muutaq.",
"resetpass-no-info": "Taa lehe pääle päsemises piät olõma nimega sisse lännüq.",
"resetpass-submit-loggedin": "Muudaq salasõnna",
"resetpass-submit-cancel": "Jätäq katski",
"resetpass-wrong-oldpass": "Viganõ aotlinõ vai parhillanõ salasõna.\nVõi-ollaq olõt jo uma salasõna ärq muutnuq vai küsünüq vahtsõ aotlidsõ salasõna.",
+ "resetpass-recycled": "Olõq hää, valiq umas salasõnas midägi muud, ku parhillanõ salasõna.",
"resetpass-temp-password": "Aotlinõ salasõna:",
"bold_sample": "Paks kiri",
"bold_tip": "Paks kiri",
@@ -608,7 +677,6 @@
"searchrelated": "samasugunõ",
"searchall": "kõik",
"showingresults": "{{PLURAL:$1|'''Üts''' tulõmus|'''$1''' tulõmust}} (tulõmusõst '''$2''' pääle).",
- "showingresultsheader": "{{PLURAL:$5|'''$1''' '''$3'''-st vastussõst|Vastusõq '''$1–$2''' '''$3'''-st}} perräküsümisele '''$4'''",
"search-nonefound": "Perräküsümisele löüdä-äs vastust.",
"powersearch-legend": "Laendõt otsminõ",
"powersearch-ns": "Otsminõ nimeruumõst:",
@@ -875,7 +943,6 @@
"statistics": "Statistiga",
"statistics-header-pages": "Lehekülgi statistiga",
"statistics-header-edits": "Toimõndamisõ statistiga",
- "statistics-header-views": "Kaemisõ statistiga",
"statistics-header-users": "Pruukjidõ statistiga",
"statistics-articles": "Sisulehekülgi",
"statistics-pages": "Lehekülgi",
@@ -883,11 +950,9 @@
"statistics-files": "Üleslaadituid teedüstüid",
"statistics-edits": "Toimõnduisi {{SITENAME}} luumisõst pääle",
"statistics-edits-average": "Keskmädselt toimõnduisi leheküle kotsilõ",
- "statistics-views-total": "Lehti kaemiisi kokko",
"statistics-users": "Kirjäpandnuid [[Special:ListUsers|pruukjit]]",
"statistics-users-active": "Tegüsit pruukjit",
"statistics-users-active-desc": "Pruukjaq, kiä ommaq tan midägi toimõndanuq {{PLURAL:$1|viimädse päävä|viimädse $1 päävä}} seen.",
- "statistics-mostpopular": "Kõgõ kaetumbaq leheq",
"doubleredirects": "Katõkõrdsõq ümbresaatmisõq",
"doubleredirectstext": "Egä ria pääl om ärq tuud edimäne ja tõõnõ ümbresaatmisleht ja niisama tõõsõ ümbresaatmislehe link, miä näütäs hariligult kotusõ pääle, kohe edimäne ümbersaatmisleht pidänüq õkva näütämä.",
"brokenredirects": "Vigadsõq ümbresaatmisõq",
@@ -912,7 +977,6 @@
"uncategorizedtemplates": "Katõgoorialdaq näüdüseq",
"unusedcategories": "Pruukmalda katõgooriaq",
"unusedimages": "Pruukmaldaq pildiq",
- "popularpages": "Pall'okäütüq leheküleq",
"wantedcategories": "Kõgõ tahetumbaq katõgooriaq",
"wantedpages": "Kõgõ tahetumbaq artikliq",
"mostlinked": "Leheq, kohe om kõgõ rohkõmb linke",
@@ -944,7 +1008,6 @@
"pager-older-n": "{{PLURAL:$1|vanõmb 1|vanõmbaq $1}}",
"booksources": "Raamaduq",
"booksources-search-legend": "Otsiq raamatut",
- "booksources-go": "Otsiq",
"booksources-text": "Tan om linke lehekülile, kon müvväs raamatit vai andas raamatidõ kotsilõ teedüst.",
"specialloguserlabel": "Pruukja:",
"speciallogtitlelabel": "Päälkiri:",
@@ -1008,7 +1071,7 @@
"wlheader-enotif": "E-postiga teedäqandmisõq ommaq käügin.",
"wlheader-showupdated": "Leheq, midä om muudõt päält su viimäst käümist, ommaq '''paksun kirän'''",
"wlnote": "Tan om '''$1''' {{PLURAL:$1|muutminõ|muutmist}} viimädse '''$2''' tunni ao seen.",
- "wlshowlast": "Näütäq viimädseq $1 tunni $2 päivä $3",
+ "wlshowlast": "Näütäq viimädseq $1 tunni $2 päivä",
"watchlist-options": "Perräkaemisnimekirä säädmine",
"watching": "Pandas perräkaemisnimekirjä...",
"unwatching": "Võetas perräkaemisõ alt maaha...",
@@ -1039,7 +1102,6 @@
"deletereasonotherlist": "Muu põhjus",
"deletereason-dropdown": "*Hariliguq kistutamisõ põhjusõq\n** Kirotaja hindä palvõl\n** Tegijäõigusõ rikminõ\n** Lehe ts'urkminõ",
"rollback": "Mineq tagasi vana kujo pääle",
- "rollback_short": "Võtaq tagasi",
"rollbacklink": "võtaq tagasi vana kujo",
"rollbackfailed": "Muutmiisi tagasivõtminõ lää-s kõrda",
"cantrollback": "Saa-i muutmiisi tagasi pöördäq; viimäne muutja om lehe ainugõnõ toimõndaja.",
@@ -1612,7 +1674,6 @@
"exif-gpsspeed-n": "sõlmõ",
"exif-gpsdirection-t": "Peris tsiht",
"exif-gpsdirection-m": "Magnõttsiht",
- "watchlistall2": ", terveq aolugu",
"namespacesall": "kõik",
"monthsall": "kõik",
"confirmemail": "Kinnüdäq e-postiaadrõssit",
@@ -1668,7 +1729,7 @@
"watchlisttools-raw": "Toimõndaq lätteteedüstüt",
"duplicate-defaultsort": "'''Hoiatus:''' Sortmisvõti \"$2\" tühistäs ärq innembädse sortmisvõtmõ \"$1\".",
"version": "Kujo",
- "version-version": "(Kujo $1)",
+ "version-version": "($1)",
"version-software-version": "Kujo",
"fileduplicatesearch-filename": "Teedüstünimi:",
"fileduplicatesearch-submit": "Otsiq",
diff --git a/languages/i18n/wa.json b/languages/i18n/wa.json
index cd1d0cd7..939fbe35 100644
--- a/languages/i18n/wa.json
+++ b/languages/i18n/wa.json
@@ -5,7 +5,8 @@
"Srtxg",
"Urhixidur",
"לערי ריינהארט",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Sorlignî les loyéns:",
@@ -282,9 +283,10 @@
"createaccount": "Ahiver on novea conte",
"gotaccount": "Vos avoz ddja on conte so ç' wiki ci? '''$1'''.",
"gotaccountlink": "Elodjîz vs",
- "userlogin-resetlink": "Avoz rovyî vos detays d' elodjaedje?",
+ "userlogin-resetlink": "Avoz rovyî les pondants et djondants po s' elodjî?",
"createaccountmail": "pa emile",
"createaccountreason": "Råjhon:",
+ "createacct-another-submit": "Ahiver èn ôte conte",
"badretype": "Vos avoz dné deus screts diferins.",
"userexists": "Li no d' uzeu ki vs avoz tchoezi est ddja eployî.\nTchoezixhoz è èn ôte s' i vs plait.",
"loginerror": "Aroke d' elodjaedje",
@@ -319,6 +321,7 @@
"loginlanguagelabel": "Lingaedje: $1",
"pt-login": "S' elodjî",
"pt-login-button": "S' elodjî",
+ "pt-createaccount": "Ahiver on novea conte",
"pt-userlogout": "\nSi dislodjî",
"changepassword": "Candjî l' sicret",
"resetpass_announce": "Vos vs avoz elodjî avou on scret timporaire ki vos a stî emilé.\nPor vos fini l' elodjaedje, vos dvoz defini on novea scret:",
@@ -867,7 +870,6 @@
"statistics-header-users": "Sitatistikes des uzeus",
"statistics-articles": "Pådjes di contnou",
"statistics-pages-desc": "Totes les pådjes do \"Wiki\", minme les copinaedjes, les rdjiblaedjes, evnd.",
- "statistics-mostpopular": "Pådjes les pus veyowes",
"doubleredirects": "Dobes redjiblaedjes",
"doubleredirectstext": "Cisse pådje ci mostere les dobes redjiblaedjes (pådjes ki redjiblèt viè ene ôte pådje di redjiblaedje).\nTchaeke roye a-st on loyén viè l' prumî eyet l' deujhinme redjiblaedje, avou on mostraedje del såme do deujhinme redjiblaedje, çou ki å pus sovint dene li «vraiy» årtike såme, ki l' prumî redjiblaedje divreut evoyî viè lu.\nLis intrêyes <del>bårêyes</del> otn ddja stî coridjeyes.",
"double-redirect-fixed-move": "[[$1]] a stî displaecî.\nAsteure c' est on redjiblaedje viè [[$2]].",
@@ -897,7 +899,6 @@
"uncategorizedtemplates": "Modele nén categorijhî",
"unusedcategories": "Categoreyes nén eployeyes",
"unusedimages": "Imådjes nén eployeyes",
- "popularpages": "Pådjes les pus léjhowes",
"wantedcategories": "Categoreyes les pus rcwerowes",
"wantedpages": "Pådjes les pus rcwerowes",
"wantedfiles": "Fitchîs les pus rcwerous",
@@ -933,7 +934,6 @@
"pager-older-n": "{{PLURAL:$1|$1 pus vî|$1 pus vîs}}",
"booksources": "Sourdants po les lives",
"booksources-search-legend": "Cweri des sourdants po des lives",
- "booksources-go": "I va",
"specialloguserlabel": "Fwait pa:",
"speciallogtitlelabel": "Såme (tite ou uzeu):",
"log": "Djournås",
@@ -1004,7 +1004,7 @@
"wlheader-enotif": "Li notifiaedje pa emile est en alaedje.",
"wlheader-showupdated": "Les pådjes k' ont candjî dispoy vosse dierinne vizite sont metowes e '''cråssès letes'''",
"wlnote": "Chal pa dzo {{PLURAL:$1|li dierin candjmint|les '''$1''' dierins candjmints}} {{PLURAL:$2|del dierinne eure|des '''$2''' dierinnès eures}}, disk' å $3 a $4.",
- "wlshowlast": "Mostrer les dierin(nè)s $1 eures, $2 djoûs ou $3",
+ "wlshowlast": "Mostrer les dierin(nè)s $1 eures, $2 djoûs ou",
"watchlist-options": "Tchuzes del djivêye des shuvous",
"enotif_reset": "Mårker totes les pådjes come vizitêyes",
"enotif_lastvisited": "Loukîz $1 po tos les candjmints dispoy vosse dierinne vizite.",
@@ -1260,9 +1260,7 @@
"xml-error-string": "$1 al roye $2, colone $3 (octet $4): $5",
"importlogpage": "Djournå des ristitchaedjes",
"importlogpagetext": "Ristitchaedjes (import) administratifs di pådjes avou leus istorikes di candjmints, a pårti d' ôtes wikis.",
- "import-logentry-upload": "a ristitchî [[$1]] avou èn eberwetaedje di fitchî",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|modêye|modêyes}}",
- "import-logentry-interwiki": "a ristitchî $1 foû d' èn ôte wiki",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|modêye|modêyes}} foû di $2",
"tooltip-pt-userpage": "Pådje d' uzeu da minne",
"tooltip-pt-anonuserpage": "Li pådje d' uzeu po l' adresse IP ki vos eployîz pol moumint",
@@ -1338,7 +1336,6 @@
"creditspage": "Pådje di credits",
"nocredits": "I n' a pont d' infôrmåcion di credits po cisse pådje ci.",
"pageinfo-title": "Infôrmåcion po «$1»",
- "pageinfo-views": "Nombe di lijhaedjes",
"pageinfo-watchers": "Nombe di shuveus",
"pageinfo-edits": "Nombe di candjmints",
"pageinfo-authors": "Nombe d' oteurs diferins",
@@ -1462,7 +1459,6 @@
"exif-gpsspeed-k": "km/h",
"exif-gpsspeed-m": "miles/h",
"exif-gpsspeed-n": "nuks",
- "watchlistall2": "totafwait",
"namespacesall": "tos",
"monthsall": "tos",
"confirmemail": "Acertinaedje di l' adresse emile",
@@ -1572,13 +1568,13 @@
"logentry-newusers-create2": "$1 a-st ahivé on conte d' uzeu $3",
"logentry-newusers-autocreate": "li conte $1 a stî ahivé otomaticmint",
"rightsnone": "(nouk)",
- "feedback-subject": "Sudjet",
- "feedback-message": "Messaedje",
- "feedback-cancel": "Rinoncî",
- "feedback-submit": "Evoyî l' vosse",
"feedback-adding": "Vosse messaedje a stî håyné sol pådje...",
- "feedback-error2": "Aroke : Li candjaedje n' a nén stî",
+ "feedback-cancel": "Rinoncî",
"feedback-close": "Fwait",
+ "feedback-error2": "Aroke : Li candjaedje n' a nén stî",
+ "feedback-message": "Messaedje",
+ "feedback-subject": "Sudjet",
+ "feedback-submit": "Evoyî",
"searchsuggest-search": "Cweri",
"searchsuggest-containing": "ki contént...",
"api-error-badaccess-groups": "Vos n' avoz nén l' droet d' eberweter des fitchîs so ç' wiki cial",
diff --git a/languages/i18n/war.json b/languages/i18n/war.json
index 7d6b931a..d2df1139 100644
--- a/languages/i18n/war.json
+++ b/languages/i18n/war.json
@@ -500,7 +500,6 @@
"passwordreset-emailsent-capture": "Ginpadangat an password reset email, nga ginpakita ha ubos.",
"passwordreset-emailerror-capture": "Ginhimo an password reset email, kun diin nakikita ha ubos, pero pakyas an pagpadara ha {{GENDER:$2|gumaramit}}: $1",
"changeemail": "Igliwan an e-mail address",
- "changeemail-header": "Igliwan an e-mail address akawnt",
"changeemail-text": "Igkompleto ini nga porma para makapagliwan han imo e-mail address. Kinahanglanon mo igbutang an imo tigaman-pagsulod para makompirma ini nga pagbag-o.",
"changeemail-no-info": "Kinahanglanon mo mag-log-in para ka direkta makasakob hini nga pakli.",
"changeemail-oldemail": "Yana nga e-mail address:",
@@ -508,7 +507,6 @@
"changeemail-none": "(waray)",
"changeemail-password": "An imo {{SITENAME}} password:",
"changeemail-submit": "Igbalyo an e-mail",
- "changeemail-cancel": "Pasagdi",
"changeemail-throttled": "Nakadamo kada pag-log-in. Alayon paghulat hin $1 ugsa ka umutro.",
"resettokens": "Igrest an mga token",
"resettokens-text": "Puydi nimo mareset an mga token para makahatag hin pipira nga pribado nga datos nga may pakahisumpay ha imo akawnt dinhi.\nKinahanglan mo ini buhaton kun aksidenti nim nasaro hira ha iba nga tawo o an imo akawnt in nakompromiso.",
@@ -535,7 +533,7 @@
"media_tip": "sumpay han paypay",
"sig_tip": "Imo pirma nga may-ada marka hin oras",
"hr_tip": "Patumba nga bagis (hinay-hinay la it paggamit)",
- "summary": "Dalikyat nga sumat hiton pagliwat:",
+ "summary": "Halipotay nga masisiring:",
"subject": "Katukiban:",
"minoredit": "Gutiay ini nga pagliwat",
"watchthis": "Bantayi ini nga pakli",
@@ -545,7 +543,7 @@
"showdiff": "Igpakita an mga ginliwat",
"anoneditwarning": "'''Pahimatngon:''' Diri ka pa naka log-in.\nAn imo IP address in maitatala ha kaagi hinin pakli han pagliwat.",
"anonpreviewwarning": "''Diri ka naka-log in. Mahisusurat an imo IP address ngada ha kanan pakli kaagi hit pagliwat kun igtipig nimo.''",
- "missingsummary": "'''Pahinumdom:''' Waray ka nagbutang hin dalikyat nga sumat han pagliwat.\nKun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bisan waray hini.",
+ "missingsummary": "<strong>Pahinumdom:</strong> Waray ka humatag hin halipotay nga masisiring hiton pagliwat. Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bisan waray hini.",
"missingcommenttext": "Alayon pagbutang hin komento ha ilarom.",
"missingcommentheader": "'''Pahinumdom:''' Waray ka humatag hin subject/headline para hini nga komento. Kun pinduton mo an \"{{int:savearticle}}\" utro, an imo pagliwat in matitipig bisan waray hini.",
"summary-preview": "Pahiuna nga pagawas han dalikyat nga pulong:",
@@ -646,7 +644,7 @@
"history-feed-description": "Kaagi han pagliwat para hini nga pakli ha wiki",
"history-feed-item-nocomment": "$1 ha $2",
"history-feed-empty": "An imo ginpaalayon nga pakli in waray dida.\nBangin ini napara tikang ha wiki, o ginngaranan hin iba.\n\n[[Special:Search|pamilnga ha wiki]] para han may pagkahisumpay nga bag-o nga pakli.",
- "rev-deleted-comment": "(gintanggal an kaagi han dalikyat nga sumat)",
+ "rev-deleted-comment": "(gintanggal an halipotay nga masisiring hiton pagliwat)",
"rev-deleted-user": "(gintanggal an agnay hiton gumaramit)",
"rev-deleted-event": "(gintanggal an talaan han mga buhat)",
"rev-deleted-user-contribs": "[gintanggal an agnay-hit-gumaramit o IP address - an pagliwat in gintago tikang han mga amot]",
@@ -660,7 +658,7 @@
"revdelete-hide-text": "Rebisyon nga sinurat",
"revdelete-hide-image": "Tagoon an sulod han paypay",
"revdelete-hide-name": "Tagoon an buhat ngan kakadtoan",
- "revdelete-hide-comment": "Dalikyat nga sumat hin pagliwat",
+ "revdelete-hide-comment": "Halipotay nga masisiring hiton pagliwat",
"revdelete-radio-same": "(ayaw balyu-e)",
"revdelete-radio-set": "Tinago",
"revdelete-radio-unset": "Nakikit-an",
@@ -726,7 +724,6 @@
"search-relatedarticle": "kasumapy",
"searchrelated": "kadugtong",
"searchall": "ngatanan",
- "showingresultsheader": "{{PLURAL:$5|Resulta '''$1''' han '''$3'''|Mga resulta '''$1 - $2''' han '''$3'''}} para ha '''$4'''",
"search-nonefound": "Waray resulta an nakakabaton han pakiana.",
"powersearch-legend": "Abansado nga pagbiling",
"powersearch-ns": "Pamiling ha mga ngaran-lat'ang:",
@@ -1118,13 +1115,11 @@
"unusedtemplates": "Waray kagamiti nga mga batakan",
"unusedtemplateswlh": "iba nga mga sumpay",
"randompage": "Bisan ano nga pakli",
- "randomincategory-selectcategory-submit": "Pakadto",
"randomredirect": "Bisan ano la nga redirect",
"randomredirect-nopages": "Waray mga redirecta ha ngaran-lat'ang nga \"$1\".",
"statistics": "Mga estadistika",
"statistics-header-pages": "Mga estadistika han pakli",
"statistics-header-edits": "Mga estadistika han pagliwat",
- "statistics-header-views": "Mga estadistika han nakita",
"statistics-header-users": "Mga estadistika han gumaramit",
"statistics-header-hooks": "Lain nga mga estadistika",
"statistics-articles": "Unod nga mga pakli",
@@ -1133,12 +1128,9 @@
"statistics-files": "Mga paypay nga iginkarga pasaka",
"statistics-edits": "Mga pagliwat hit pakli tikang gintukod hini nga {{SITENAME}}",
"statistics-edits-average": "Average nga mga pagliwat kada pakli",
- "statistics-views-total": "Ngatanan nga mga panginano",
- "statistics-views-peredit": "Mga panginano kada pagliwat",
"statistics-users": "Mga [[Special:ListUsers|gumaramit]] nga nakarehistro",
"statistics-users-active": "Mga gumaramit nga nanggigios",
"statistics-users-active-desc": "Mga gumaramit nga may-ada iginbuhat ha urhi nga {{PLURAL:$1|ka adlaw|$1 ka mga adlaw}}",
- "statistics-mostpopular": "Gidamoi nga ginpanginanohan nga mga pakli",
"pageswithprop-submit": "Kadto-a",
"doubleredirects": "Mga doble nga redirekta",
"double-redirect-fixer": "Mangangayad hin redirekta",
@@ -1167,7 +1159,6 @@
"uncategorizedtemplates": "Waray kaarangay nga mga batakan",
"unusedcategories": "Waray kagamit nga mga kaarangay",
"unusedimages": "Waray kagamit nga mga fayl",
- "popularpages": "Mga sikat nga pakli",
"wantedcategories": "Mga nagkikinahanglan hin kaarangay",
"wantedpages": "Mga ginkikinahanglan nga pakli",
"wantedfiles": "Mga nagkikinahanglan hin file",
@@ -1201,7 +1192,6 @@
"pager-older-n": "{{PLURAL:$1|durudaan 1|durudaan $1}}",
"booksources": "Mga libro nga tinikangan",
"booksources-search-legend": "Pamilnga an mga libro nga gintikangan",
- "booksources-go": "Kadto-a",
"specialloguserlabel": "Magburuhat:",
"speciallogtitlelabel": "iiguon (titulo o gumarami):",
"log": "Mga talaan",
@@ -1285,7 +1275,7 @@
"notanarticle": "Diri uska unod nga pakli",
"notvisiblerev": "An urhi nga pagliwat han iba nga gumaramit in ginpara",
"watchlist-details": "{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri bulag nga paglakip han mga hiruhimangraw-nga-pakli.",
- "wlshowlast": "Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw $3",
+ "wlshowlast": "Igpakita an katapusan nga $1 nga mga oras $2 nga mga adlaw",
"watchlist-options": "Mga pirilian han talaan han binabantayan",
"watching": "Ginbabantay...",
"unwatching": "Diri na ginbabantay...",
@@ -1318,7 +1308,6 @@
"deletereason-dropdown": "*Agsob nga rason hin pagpara\n** Spam\n** Bandalismo\n** Pagtalapas ha katungod hin pagtatag-iya (''copyright'')\n** Tugon han manunurat\n** Utod nga redirek",
"delete-edit-reasonlist": "Igliwat an mga rason han pagpara",
"rollback": "Mga libot-pabalik nga pagliwat",
- "rollback_short": "Libot-pabalik",
"rollbacklink": "libot-pabalik",
"rollbackfailed": "Diri malinamposon an paglibot-pabalik",
"revertpage": "Ginpabalik an ginliwat ni [[Special:Contributions/$2|$2]] ([[User talk:$2|hiruhimangraw]]) ngadto ha urhi nga pagliwat ni [[User:$1|$1]]",
@@ -1510,7 +1499,6 @@
"thumbnail_error": "Sayo han paghihimo hin thumbnail: $1",
"thumbnail_image-type": "An klase han hulagway in diri suportado",
"import": "Naangbit hit mga pakli",
- "import-interwiki-source": "Tinikangan nga wiki/pakli:",
"import-interwiki-templates": "Lakip an ngatanan nga mga batakan",
"import-interwiki-submit": "Naangbit",
"import-interwiki-namespace": "Kakadtoan nga ngaran-lat'ang:",
@@ -1594,7 +1582,7 @@
"tooltip-rollback": "An \"libot-pabalik\" in nabalik han (mga) pagliwat hini nga pakli ngadto han kataposan nga nag-amot hin usa ka pidlit",
"tooltip-undo": "\"Igpawara an ginbuhat (undo)\" in nagbabalik hinin nga pagliwat ngan nabuklad hin pagliwat nga porma ha pahiuna-nga-paggawas nga kahimtang. Natugot liwat pagdugang hin katadungan ha dinalikyat nga sumat.",
"tooltip-preferences-save": "Tipiga an mga karuyag",
- "tooltip-summary": "Pagbutang hin dalikyat nga sumat",
+ "tooltip-summary": "Pagbutang hin halipotay nga masisiring hiton pagliwat",
"interlanguage-link-title": "$1 – $2",
"siteuser": "{{SITENAME}} gumaramit $1",
"anonuser": "{{SITENAME}} waray nagpakilala nga gumaramit $1",
@@ -1611,7 +1599,6 @@
"pageinfo-robot-policy": "Pag-index hin mga robot",
"pageinfo-robot-index": "Gintutugot",
"pageinfo-robot-noindex": "Dírì gintutugot",
- "pageinfo-views": "Ihap han mga naglantaw",
"pageinfo-watchers": "Ihap han nangingita hin pakli",
"pageinfo-redirects-name": "Ihap hin mga redirek ngani nga pakli",
"pageinfo-subpages-name": "Mga bahinpakli hin nga pakli",
@@ -1783,7 +1770,6 @@
"exif-urgency-normal": "Normal ($1)",
"exif-urgency-low": "Hamubo ($1)",
"exif-urgency-high": "Hataas ($1)",
- "watchlistall2": "ngatanan",
"namespacesall": "ngatanan",
"monthsall": "ngatanan",
"confirmemail": "Igkompirma an e-mail address",
@@ -1846,7 +1832,7 @@
"version-mediahandlers": "Mga nakapot han medya",
"version-hooks": "Mga kawil",
"version-hook-name": "Ngaran han kawil",
- "version-version": "(Bersion $1)",
+ "version-version": "($1)",
"version-license": "MediaWiki nga Lisensya",
"version-poweredby-credits": "Ini nga wiki in pinapaandar han '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "mga iba",
@@ -1891,18 +1877,18 @@
"htmlform-reset": "Igbalik an mga pinamalyuan",
"htmlform-selectorother-other": "iba",
"revdelete-content-hid": "sulod nakatago",
- "revdelete-summary-hid": "nakatago an dalikyat nga sumat han pagliwat",
+ "revdelete-summary-hid": "An halipotay nga masisiring hiton pagliwat in nakatago",
"revdelete-uname-hid": "nakatago an agnay-hit-gumaramit",
"logentry-newusers-newusers": "An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}",
"logentry-newusers-create": "An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}",
"logentry-newusers-create2": "An gumaramit nga akawnt nga $3 {{GENDER:$2|ginhimo}} ni $1",
"logentry-newusers-autocreate": "An gumaramit nga akawnt nga $1 in lugaring nga {{GENDER:$2|ginhimo}}",
"rightsnone": "(waray)",
- "feedback-subject": "Himangrawon:",
- "feedback-message": "Mensahe:",
"feedback-cancel": "Pasagdi",
- "feedback-error2": "Sayop: Pakyas an pagliwat",
"feedback-close": "Human na.",
+ "feedback-error2": "Sayop: Pakyas an pagliwat",
+ "feedback-message": "Mensahe:",
+ "feedback-subject": "Himangrawon:",
"searchsuggest-search": "Pamilnga",
"searchsuggest-containing": "nagsusulod. . .",
"api-error-badaccess-groups": "Diri ka gintutugotan pagkarga paigbaw ha dinhi nga wiki.",
diff --git a/languages/i18n/wo.json b/languages/i18n/wo.json
index e3a99fe0..48db3591 100644
--- a/languages/i18n/wo.json
+++ b/languages/i18n/wo.json
@@ -563,7 +563,6 @@
"mergehistory-same-destination": "Gongikuwaay ak jëmuwaayu xët yi waruñoo bokk",
"mergehistory-reason": "Ngirte :",
"mergelog": "Yéenekaayu boole yi",
- "pagemerge-logentry": "Booleb [[$1]] ak [[$2]] (sumb ba $3)",
"revertmerge": "Neenal boole yi",
"mergelogpagetext": "Lii ci suuf ab lim la ci boole yu mujj yu jaar-jaaru aw xët ak weneen .",
"history-title": "Jaar-jaaru sumbi « $1 »",
@@ -602,7 +601,6 @@
"searchrelated": "yeneeni ngérte",
"searchall": "yépp",
"showingresults": "Woneg <b>$1</b> {{PLURAL:$1|ngérte|ciy ngérte}} doore ko ci #<b>$2</b>.",
- "showingresultsheader": "{{PLURAL:$5|Ngérte '''$1''' bu '''$3'''|Ngértey '''$1 - $2'''}} ngir '''$4'''",
"search-nonefound": "Ceet gi jurul dara.",
"powersearch-legend": "Ceet gu xóot",
"powersearch-ns": "Seet ci barabi tur yi :",
@@ -979,7 +977,6 @@
"statistics": "Limbari",
"statistics-header-pages": "Limbari ñeel xët yi",
"statistics-header-edits": "Limbari ñeel coppite yi",
- "statistics-header-views": "Limbari ñeel saytu yi",
"statistics-header-users": "Limbari ñeel jëfandikukat yi",
"statistics-header-hooks": "Yeneen limbari",
"statistics-articles": "Xëti ëmbiit",
@@ -987,12 +984,9 @@
"statistics-pages-desc": "Xët yépp yi ci wiki bi, xëti waxtaanuwaay yi, jubluwaat yi, añs.",
"statistics-files": "Xët yees yeb fii",
"statistics-edits": "Coppitey xët yi dalee ca campug {{SITENAME}}",
- "statistics-views-total": "Mbooleem saytu yi",
- "statistics-views-peredit": "Saytu ngir soppi",
"statistics-users": "[[Special:ListUsers|Jëfandikukat]] yi bindu",
"statistics-users-active": "Jëfandikukat yu yëngu",
"statistics-users-active-desc": "Jëfandikukat yi amal ag yëngu-yëngu ci {{PLURAL:$1|bés bu mujj bi|$1 bés yu mujj yi}}",
- "statistics-mostpopular": "Xët yees gën a saytu",
"doubleredirects": "Jubluwaat ñaari yoon",
"doubleredirectstext": "Wii xët dafa ëmb mbooleem xët yees jubluwaatal ci yeneen xëti jubluwaat.\nRëdd wu ne am na lëkkalekaay buy jëme ci bu njëkk ak ñaareelu jubluwaat bi, ak rëdduw mbind wu njëkk wu ñaareelu jubluwaat bi, biy ëmb xëtu jëmuwaay wu ''baax'' wi, wi jubluwaat bu njëkk bi war a jublu moom itam.",
"double-redirect-fixed-move": "[[$1]] tuddewaat nañu ko.\nLéegi mi ngi jublu [[$2]].",
@@ -1020,7 +1014,6 @@
"uncategorizedtemplates": "Royuwaay yi amul Wàll",
"unusedcategories": "Wàll yees jëfandikoowul",
"unusedimages": "Dencukaay yees jëfandikoowul",
- "popularpages": "Xët yees gën a saytu",
"wantedcategories": "Wàll yi ñu gën a laaj",
"wantedpages": "Xët yi ñu gën a laaj",
"wantedpages-badtitle": "Koj bu baaxul bu nekk ci ngérte yi : $1",
@@ -1062,7 +1055,6 @@
"booksources": "Téereb delluwaay",
"booksources-search-legend": "Seet ab téereb delluwaay",
"booksources-isbn": "ISBN :",
- "booksources-go": "Ayca",
"booksources-text": "Lii ab lima ay lëkkalekaay la yu jëme ciy dal yu biti yuy jaayi téere yu yees ak yu magget, man nga faa ami xibaar ñeel téere yi ngay seet:",
"booksources-invalid-isbn": "ISBN bi nga joxe mel na ni baaxul; xoolal bu baax ndax defoo ag njuumte ci bi nga koy duppi ca gongikuwaayam.",
"specialloguserlabel": "Jëfandikukat :",
@@ -1152,7 +1144,7 @@
"watchlist-details": "Topp nga $1 {{PLURAL:$1|xët|ciy xët}}, soo waññiwaalewul xëti waxtaanuwaay yi.",
"wlheader-showupdated": "Xët yi ñu soppiwoon ca sa duggu bu mujj ñoom la ñu fesal ñu <b>xëm</b>",
"wlnote": "Fii ci suuf {{PLURAL:$1| ngay gis coppite yu mujj yi|ngay gis $1 coppite yu mujj}} ci {{PLURAL:$2|waxtu gu mujj gi|<b>$2</b> waxtu yu mujj}}.",
- "wlshowlast": "wone $1 waxtu yu mujj, $2 bess yu mujj, walla $3.",
+ "wlshowlast": "wone $1 waxtu yu mujj, $2 bess yu mujj, walla .",
"watchlist-options": "Tànneefi limu toppte bi",
"watching": "Topp...",
"unwatching": "Farug toppte gi ...",
@@ -1529,7 +1521,6 @@
"exif-imagelength": "Kawewaay",
"exif-usercomment": "Kadduy jëfëndikookat bi",
"exif-componentsconfiguration-0": "Amul",
- "watchlistall2": "yépp",
"namespacesall": "Yépp",
"monthsall": "Yépp",
"confirmemail": "Dëggalal sa m-bataaxal",
@@ -1557,5 +1548,6 @@
"specialpages": "Xëti jagleel",
"revdelete-restricted": "doxalub digal ngir yorkat yi",
"revdelete-unrestricted": "digal ngir yorkat yi deñ na",
- "rightsnone": "(menn)"
+ "rightsnone": "(menn)",
+ "revdelete-summary": "soppi tënk gi"
}
diff --git a/languages/i18n/wuu.json b/languages/i18n/wuu.json
index c1408905..e1d187f9 100644
--- a/languages/i18n/wuu.json
+++ b/languages/i18n/wuu.json
@@ -16,7 +16,8 @@
"Duolaimi",
"Impersonator 1",
"LNDDYL",
- "TheChampionMan1234"
+ "TheChampionMan1234",
+ "Fitoschido"
]
},
"tog-underline": "鏈接下橫線:",
@@ -292,7 +293,7 @@
"databaseerror-text": "數據庫討信出錯。\n嘸數說明軟件裏有一個bug。",
"databaseerror-textcl": "數據庫討信出錯。",
"databaseerror-query": "討信:$1",
- "databaseerror-function": "功能ː $1",
+ "databaseerror-function": "功能: $1",
"databaseerror-error": "出錯:$1",
"laggedslavemode": "警告: 页面可能弗包含最近个更新。",
"readonly": "數據庫鎖牢",
@@ -379,6 +380,8 @@
"gotaccountlink": "登录",
"userlogin-resetlink": "忘记登录细节?",
"userlogin-resetpassword-link": "转设密码",
+ "userlogin-loggedin": "你侬用{{GENDER:$1|$1}}登进来哉。用下向个表以别样身份登进。",
+ "userlogin-createanother": "建别样账号",
"createacct-emailrequired": "电子信地址",
"createacct-emailoptional": "电子信地址(填弗填由你)",
"createacct-email-ph": "畀你侬个电子信地址打进去",
@@ -683,7 +686,6 @@
"mergehistory-same-destination": "来源页面与目的页面弗可以相同",
"mergehistory-reason": "理由:",
"mergelog": "合并日志",
- "pagemerge-logentry": "已拿[[$1]]合并到[[$2]] (修订截至$3)",
"revertmerge": "反合并",
"mergelogpagetext": "下底是只最近发生个页面历史合并个记录列表。",
"history-title": "“$1”的版本历史",
@@ -724,7 +726,6 @@
"searchrelated": "相关",
"searchall": "全部",
"showingresults": "下头显示从第<b>$2</b>条开始个<b>$1</b>条结果:",
- "showingresultsheader": "对'''$4'''个{{PLURAL:$5|第'''$1'''至第'''$3'''项结果|第'''$1-$2'''项,共'''$3'''个结果}}",
"search-nonefound": "查询呒有结果。",
"powersearch-legend": "高级搜索",
"powersearch-ns": "垃拉箇眼名字空间里向搜索:",
@@ -986,7 +987,6 @@
"nbytes": "$1字节",
"nmembers": "$1只成员",
"unusedimages": "朆用着个文件",
- "popularpages": "热门页面",
"mostlinked": "链进去顶多个页面",
"mostlinkedcategories": "链进去顶多个分类",
"mostcategories": "分类顶多个页面",
@@ -1008,7 +1008,6 @@
"pager-older-n": "旧$1次",
"booksources": "书源",
"booksources-search-legend": "搜索图书来源",
- "booksources-go": "去",
"specialloguserlabel": "用戶:",
"speciallogtitlelabel": "目標(標題要弗用戶):",
"log": "记录",
@@ -1055,7 +1054,7 @@
"unwatchthispage": "停止监控",
"notanarticle": "弗是內容頁",
"watchlist-details": "弗包括讨论页,有 $1 页徕你侬关注表里向。",
- "wlshowlast": "显示上 $1 个钟头 $2 日 $3",
+ "wlshowlast": "显示上 $1 个钟头 $2 日",
"watchlist-options": "监控列表选项",
"watching": "监控……",
"unwatching": "解除监控……",
@@ -1274,7 +1273,6 @@
"exif-contrast-2": "高",
"exif-gpsspeed-k": "公里每小时",
"exif-gpsspeed-m": "英里每小时",
- "watchlistall2": "全部",
"namespacesall": "全部",
"monthsall": "全",
"confirmemail": "确认电子邮件地址",
@@ -1313,5 +1311,6 @@
"dberr-info-hidden": "(數據庫服務器連弗上)",
"revdelete-restricted": "已将限制应用到管理员",
"revdelete-unrestricted": "已移除对管理员个限制",
- "rightsnone": "(呒)"
+ "rightsnone": "(呒)",
+ "revdelete-summary": "编辑摘要"
}
diff --git a/languages/i18n/xal.json b/languages/i18n/xal.json
index c9521874..f23dfee1 100644
--- a/languages/i18n/xal.json
+++ b/languages/i18n/xal.json
@@ -7,57 +7,57 @@
"아라"
]
},
- "tog-underline": "Заалһиг татас татх:",
- "tog-hideminor": "Шидрә сольлһна сеткүлд баһ хүврлһиг бултулх",
- "tog-hidepatrolled": "Шидрә сольлһна сеткүлд шүүсн хүврлһиг бултулх",
- "tog-newpageshidepatrolled": "Шин халхна сеткүләс шүүсн хүврлһиг бултулх",
- "tog-extendwatchlist": "Хар шидрә сольлһн биш, цуг сольлһн үзүлдг, өргдүлсн шинҗллһнә сеткүл",
+ "tog-underline": "Заалһиг татасллһн:",
+ "tog-hideminor": "Баһ ясвр отхн ясвр седкүләс нуух",
+ "tog-hidepatrolled": "Шүүсн ясвр отхн ясвр седкүләс нуух",
+ "tog-newpageshidepatrolled": "Шүүсн халхс отхн ясвр седкүләс нуух",
+ "tog-extendwatchlist": "Һанц отхн биш хамг ясврта өргн оврхин седкүл",
"tog-usenewrc": "Ясрулсн шидрә сольлһна сеткүл олзлх (JavaScript кергтә)",
- "tog-numberheadings": "То-диг чикән даах",
- "tog-showtoolbar": "Ора зер-зев үзлх (JavaScript кергтә)",
- "tog-editondblclick": "Давхр индстлһар чиклх (JavaScript кергтә)",
- "tog-editsectiononrightclick": "Һарчига барун индстлһар хүвиг чиклх (JavaScript кергтә)",
- "tog-watchcreations": "Би эврәннь немгдсн халхс шинҗллһнә сеткүлд немх",
- "tog-watchdefault": "Би эврәннь чиклсн халхс шинҗллһнә сеткүлд немх",
- "tog-watchmoves": "Би эврәннь көндсн халхс шинҗллһнә сеткүлд немх",
- "tog-watchdeletion": "Би эврәннь һарһсн халхс шинҗллһнә сеткүлд немх",
- "tog-minordefault": "Цуг сольлһн баһ чинртә таасн болулх",
- "tog-previewontop": "Сольлһна теегин өмн хәләвр үзүлх",
- "tog-previewonfirst": "Сольхла, хәләвр үзүлх.",
- "tog-enotifwatchlistpages": "Шинҗлсн халх сольхла, нанд e-mail бичг йовулх",
- "tog-enotifusertalkpages": "Мини ухалвр халх сольхла, нанд e-mail бичг йовулх",
- "tog-enotifminoredits": "Баһ сольлһн болв чигн болхла, нанд e-mail бичг йовулх",
- "tog-enotifrevealaddr": "Мини e-mail хайг зәңгллһнә бичгт үзүлх",
- "tog-shownumberswatching": "Тер халх шинҗлдг демнчнрин то үзүлх",
- "tog-oldsig": "Бәәдг тәвсн һарна хәләвр:",
- "tog-fancysig": "Эврән тәвсн һарна бики темдлһн (авто заалһта уга)",
- "tog-uselivepreview": "Шамдһа хәләвр олзлх (JavaScript кергтә, амслһн)",
- "tog-forceeditsummary": "Учр-утх хоосн бәәхлә медүлх",
- "tog-watchlisthideown": "Шинҗллһнә сеткүлд мини сольлһиг бултулх",
- "tog-watchlisthidebots": "Шинҗллһнә сеткүлд көдлврин сольлһиг бултулх",
- "tog-watchlisthideminor": "Шинҗллһнә сеткүлд баһ сольлһиг бултулх",
- "tog-watchlisthideliu": "Шинҗллһнә сеткүлд демнчнрин сольлһиг бултулх",
- "tog-watchlisthideanons": "Шинҗллһнә сеткүлд далдурин сольлһиг бултулх",
- "tog-watchlisthidepatrolled": "Шинҗллһнә сеткүлд шүүсн сольлһиг бултулх",
- "tog-ccmeonemails": "Миниһәр талдан демнчнрт йовулсн бичглә әдл буулһавр нанд йовулх",
- "tog-diffonly": "Йилһәнә хөөн халхиг бичә үзүлх",
- "tog-showhiddencats": "Бултулсн әәшлүд үзүлх",
- "tog-norollbackdiff": "Хәрү кехлә йилһән бичә үзүлх",
- "underline-always": "Даңгин болх",
+ "tog-numberheadings": "Эврәр һарцг тойглх",
+ "tog-showtoolbar": "Ясврин зевсг үзүлх",
+ "tog-editondblclick": "Давхр шавдлһар халх ясх",
+ "tog-editsectiononrightclick": "Һарцг барун шавдсар салвр чиклх",
+ "tog-watchcreations": "Мини бүтәсн халхс болн орулсн боомгуд оврхин седкүлд немх",
+ "tog-watchdefault": "Мини яссн халхс болн боомгуд оврхин седкүлд немх",
+ "tog-watchmoves": "Мини зөөсн халхс болн боомгуд оврхин седкүлд немх",
+ "tog-watchdeletion": "Мини әрлһсн халхс болн боомгуд оврхин седкүлд немх",
+ "tog-minordefault": "Хамг ясвр баһ шиг таарсар темдглх",
+ "tog-previewontop": "Ясврин хәәрцг өмн хәләвр үзүлх",
+ "tog-previewonfirst": "Ясврт одхла, хәләвр үзүлх",
+ "tog-enotifwatchlistpages": "Оврсн халх аль боомг ясгдхла, e-mail бичгәр медүлх",
+ "tog-enotifusertalkpages": "Мини меткән халх ясгдхла, e-mail бичгәр медүлх",
+ "tog-enotifminoredits": "Халх болн боомг баһар чигн ясгдхла, e-mail бичгәр медүлх",
+ "tog-enotifrevealaddr": "Мини e-mail хайг медүлвр бичгт үзүлх",
+ "tog-shownumberswatching": "Оврдг демнәчин то үзүлх",
+ "tog-oldsig": "Бәәгч тәвсн һар:",
+ "tog-fancysig": "Онц тәвсн һарин вики эрә (эврән заалһго)",
+ "tog-uselivepreview": "Орчн хәләвр керглх",
+ "tog-forceeditsummary": "Ясврин үндсн хоосна туск медүлх",
+ "tog-watchlisthideown": "Мини ясвр оврхин седкүләс нуух",
+ "tog-watchlisthidebots": "Көдлгчин ясвр оврхин седкүләс нуух",
+ "tog-watchlisthideminor": "Баһ ясвр оврхин седкүләс нуух",
+ "tog-watchlisthideliu": "Бүрткгдсн демнәчнрин ясвр оврхин седкүләс нуух",
+ "tog-watchlisthideanons": "Нерго демнәчнрин ясвр оврхин седкүләс нуух",
+ "tog-watchlisthidepatrolled": "Шүүгдсн ясвр оврхин седкүләс нуух",
+ "tog-ccmeonemails": "Мини бус демнәчт йовулсн бичгин дүрлвр нанд йовулх",
+ "tog-diffonly": "Йилһәнә дор халхин дотр эс үзүлх",
+ "tog-showhiddencats": "Нуусн әәшлүд үзүлх",
+ "tog-norollbackdiff": "Буцасна хөөн йилһән эс үзүлх",
+ "underline-always": "Даң",
"underline-never": "Кезәчн болшго",
- "underline-default": "Хәләгчин таасн",
- "editfont-style": "Чикллһнә цаасна үзг-кевин янз:",
- "editfont-default": "Хәләлгчин көгәс",
- "editfont-monospace": "Даңгин уудмта үзг-кев",
- "editfont-sansserif": "Онь уга үзг-кев",
- "editfont-serif": "Оньта үзг-кев",
- "sunday": "Нарн",
- "monday": "Сарң",
- "tuesday": "Мигмр",
- "wednesday": "Үлмҗ",
- "thursday": "Пүрвә",
- "friday": "Басң",
- "saturday": "Бембә",
+ "underline-default": "Харагчин көг керглх",
+ "editfont-style": "Ясврин теегк бар үзгин төрл:",
+ "editfont-default": "Харагчин көгәс",
+ "editfont-monospace": "Негдмл эңтә бар үзг",
+ "editfont-sansserif": "Онь уга бар үзг",
+ "editfont-serif": "Оньта бар үзг",
+ "sunday": "Нарн өдр",
+ "monday": "Сарң өдр",
+ "tuesday": "Мигмр өдр",
+ "wednesday": "Үлмҗ өдр",
+ "thursday": "Пүрвә өдр",
+ "friday": "Басң өдр",
+ "saturday": "Бембә өдр",
"sun": "Нрн",
"mon": "Срң",
"tue": "Мгр",
@@ -102,247 +102,248 @@
"nov": "Үкр",
"dec": "Бар",
"pagecategories": "{{PLURAL:$1|1=Әәшл|Әәшлүд}}",
- "category_header": "«$1» әәшлд бәәдг халхс",
- "subcategories": "Баһар әәшлүд",
- "category-media-header": "«$1» әәшлд бәәдг боомгуд",
- "category-empty": "''Тер әәшл хоосн болҗана.''",
- "hidden-categories": "{{PLURAL:$1|1=Бултулсн әәшл|Бултулсн әәшлүд}}",
- "hidden-category-category": "Бултулсн әәшлүд",
- "category-subcat-count": "{{PLURAL:$2|Тер әәшл эн һанцхн баһар әәшлтә.|{{PLURAL:$1|$1 баһар әәшл үзүлв|$1 баһар әәшлүд|$1 баһар әәшлүд үзүлв}} $2 ут туршдан үзүлв.}}",
- "category-subcat-count-limited": "Тер әәшлд {{PLURAL:$1|1=нег баһар әәшл|$1 баһар әәшлүд}} болҗана.",
- "category-article-count": "{{PLURAL:$2|Тер әәшл һанцхн халхта.|{{PLURAL:$1|$1 халхсиг үзүлв|$1 халхиг үзүлв|$1 халхсиг үзүлв}}, $2 ут туршдан.}}",
- "category-article-count-limited": "Тер әәшлд {{PLURAL:$1|1=нег халх|$1 халхс}} болҗана.",
- "category-file-count": "{{PLURAL:$2|Тер әәшлд һанцхн халх болҗана.|Терүнәс {{PLURAL:$1|1=нег боомг үзүлсн|$1 боомгуд үзүлсн}} $2 ут туршдан.}}",
- "category-file-count-limited": "Эн {{PLURAL:$1|1=боомг|$1 боомгуд}} тер әәшлд болҗана.",
- "listingcontinuesabbrev": "(цааранднь)",
- "index-category": "Индекссн халхс",
- "noindex-category": "Индекссн биш халхс",
- "about": "Тодлҗ бичлһн",
+ "category_header": "«$1» әәшлк халхс",
+ "subcategories": "Күүкн әәшлүд",
+ "category-media-header": "«$1» әәшлк боомгуд",
+ "category-empty": "<em>Эн әәшлд одахн халх аль боомг уга.</em>",
+ "hidden-categories": "{{PLURAL:$1|1=Нуусн әәшл|Нуусн әәшлүд}}",
+ "hidden-category-category": "Нуусн әәшлүд",
+ "category-subcat-count": "{{PLURAL:$2|Эн әәшлд һанцхн күүкн әәшл.|Эн әәшлд {{PLURAL:$1|$1 күүкн әәшл|$1 күүкн әәшл|$1 күүкн әәшл}} $2 тооһас.}}",
+ "category-subcat-count-limited": "Эн әәшлд {{PLURAL:$1|$1 күүкн әәшл|$1 күүкн әәшл}} бәәнә.",
+ "category-article-count": "{{PLURAL:$2|Эн әәшлд һанцхн халхта.|Эн {{PLURAL:$1|$1 халх эн әәшлд|$1 халх эн әәшлд|$1 халх эн әәшлд}}, $2 тооһас.}}",
+ "category-article-count-limited": "Орчн әәшлд {{PLURAL:$1|1=нег халх|$1 халх}} бәәнә.",
+ "category-file-count": "{{PLURAL:$2|Эн әәшлд һанцхн халх бәәнә.|Эн әәшлд {{PLURAL:$1|1=нег боомг|$1 боомгуд}} $2 тооһас.}}",
+ "category-file-count-limited": "Орчн әәшлд эн {{PLURAL:$1|боомг|$1 боомгуд}} бәәнә.",
+ "listingcontinuesabbrev": "(залһан)",
+ "index-category": "Келкгдм халхс",
+ "noindex-category": "Келкгдшго халхс",
+ "about": "Бичлһн",
"article": "Зүүл",
- "newwindow": "(шин терзд)",
- "cancel": "Уга кех",
- "moredotdotdot": "Цааранднь...",
- "mypage": "Мини эврә халх",
- "mytalk": "Күүндлһн бәәрм",
- "anontalk": "IP хайгна күндллһн",
- "navigation": "Орм медлһн",
+ "newwindow": "(шин цоңхт)",
+ "cancel": "Буцх",
+ "moredotdotdot": "Нань...",
+ "mypage": "Халх",
+ "mytalk": "Меткән",
+ "anontalk": "Эн IP хайгин меткән",
+ "navigation": "Айлл",
"and": "&#32;болн",
- "qbfind": "Хәәлһн",
- "qbbrowse": "Гүүһәд хәләх",
- "qbedit": "Чиклх",
- "qbpageoptions": "Тер халх",
- "qbmyoptions": "Тана халхс",
- "faq": "Юм би",
- "faqpage": "Project:Юм би",
- "actions": "Үүлд",
- "namespaces": "Нернә ус",
- "variants": "Суңһлтс",
+ "qbfind": "Хәәвр",
+ "qbbrowse": "Хәләх",
+ "qbedit": "Ясх",
+ "qbpageoptions": "Эн халх",
+ "qbmyoptions": "Мини халхс",
+ "faq": "Сурмһа сурвр",
+ "faqpage": "Project:Сурмһа сурвр",
+ "actions": "Үүлдвр",
+ "namespaces": "Нернә төрл",
+ "variants": "Хүвлвр",
"errorpagetitle": "Эндү",
- "returnto": "«$1» тал хәрү ирх.",
- "tagline": "{{grammar:genitive|{{SITENAME}}}} гидг һазрас өггцн",
- "help": "Цәәлһлһн",
- "search": "Хәәлһн",
- "searchbutton": "Хәәлһн",
- "go": "Ор",
- "searcharticle": "Ор",
- "history": "тууҗ",
+ "returnto": "«$1» тал хәрү одх.",
+ "tagline": "{{SITENAME}} талас",
+ "help": "Дөң",
+ "search": "Хәәвр",
+ "searchbutton": "Хәәх",
+ "go": "Одх",
+ "searcharticle": "Одх",
+ "history": "Халхин тууҗ",
"history_short": "Тууҗ",
- "updatedmarker": "мини шидрә орлһна хөөн шинрүлсн",
+ "updatedmarker": "мини отхн орсна хөөн шинрүлсн",
"printableversion": "Барин бәәдл",
"permalink": "Даңгин заалһ",
"print": "Барлх",
- "edit": "Чиклх",
+ "edit": "Ясх",
"create": "Бүтәх",
- "editthispage": "Эн халхиг чиклх",
- "create-this-page": "Эн халхиг бүтәх",
- "delete": "Һарһх",
- "deletethispage": "Эн халхиг һарһх",
- "undelete_short": "$1 {{PLURAL:$1|сольлһиг|сольлһиг|сольлһиг}} босхҗ тохрар",
+ "editthispage": "Эн халх ясх",
+ "create-this-page": "Эн халх бүтәх",
+ "delete": "Әрлһх",
+ "deletethispage": "Эн халх әрлһх",
+ "undelete_short": "{{PLURAL:$1|Нег ясвр|$1 ясвр|ясвр}} босхх",
"protect": "Харсх",
"protect_change": "сольх",
- "protectthispage": "Эн халхиг харсх",
- "unprotect": "Харсх уга",
- "unprotectthispage": "Тер халхиг харсх уга",
+ "protectthispage": "Эн халх харсх",
+ "unprotect": "Харслт сольх",
+ "unprotectthispage": "Эн халхин харслт сольх",
"newpage": "Шин халх",
- "talkpage": "Тер халхин туск келх",
+ "talkpage": "Эн халх метклдх",
"talkpagelinktext": "Меткән",
- "specialpage": "Көдлхнә халх",
- "personaltools": "Эврән зер-зев",
- "articlepage": "Зүүл үзх",
+ "specialpage": "Шишлң халх",
+ "personaltools": "Туслң зевсг",
+ "articlepage": "Зүүл хәләх",
"talk": "Меткән",
"views": "Хәләврүд",
- "toolbox": "Зер-зев",
- "userpage": "Демнчна халх үзх",
- "projectpage": "Төсвин халх үзх",
- "imagepage": "Боомгин халх үзх",
- "mediawikipage": "Зәңгин халх үзх",
- "templatepage": "Кевләр халх үзх",
- "viewhelppage": "Цәәлһлһиг узх",
- "categorypage": "Әәшлин халх үзх",
+ "toolbox": "Зевсг",
+ "userpage": "Демнәчнә халх хәләх",
+ "projectpage": "Төсвин халх хәләх",
+ "imagepage": "Боомгин халх хәләх",
+ "mediawikipage": "Зәңгин халх хәләх",
+ "templatepage": "Кевләрин халх хәләх",
+ "viewhelppage": "Дөңгин халх хәләх",
+ "categorypage": "Әәшлин халх хәләх",
"viewtalkpage": "Меткән халх узх",
- "otherlanguages": "Талдан келәр",
- "redirectedfrom": "($1 гидг һазрас авч одсмн)",
- "redirectpagesub": "Авч оддг халх",
- "lastmodifiedat": "Тер халх эн цагт сүл чикләд болҗ: $2, $1.",
- "viewcount": "Тер халхд $1 {{PLURAL:$1|дәкҗ|дәкҗ|дәкҗ}} орҗ.",
+ "otherlanguages": "Бус келәр",
+ "redirectedfrom": "($1 талас туусн)",
+ "redirectpagesub": "Туудг халх",
+ "lastmodifiedat": "Эн халхин отхн сольсн: $2, $1.",
+ "viewcount": "Эн халхт {{PLURAL:$1|нег дәкҗ|$1 дәкҗ}} хандла.",
"protectedpage": "Харссн халх",
- "jumpto": "Ирх тал:",
- "jumptonavigation": "Һазр медлһн",
- "jumptosearch": "хәәлһн",
- "view-pool-error": "Гемим тәвтн, ода серверүд хар-хату көдлмштә.\nДегд дала күн тер халх үзхәр бәәнә.\nБуйн болтха, бәәҗәһәд дәкәд арһ хәәтн.\n\n$1",
- "aboutsite": "{{SITENAME}} тускар",
- "aboutpage": "Project:Тодлҗ бичлһн",
- "copyright": "Өггцн $1 йоста орҗ болм",
- "copyrightpage": "{{ns:project}}:Бичсн күүнә зөв",
- "currentevents": "Ода болсн йовдл",
- "currentevents-url": "Project:Ода болсн йовдл",
- "disclaimers": "Дааврас эс зөвшәрлһн",
- "disclaimerpage": "Project:Даарас эс зөвшәрлһн",
- "edithelp": "Чикллһнә дөң",
+ "jumpto": "Одх тал:",
+ "jumptonavigation": "айлл",
+ "jumptosearch": "хәәвр",
+ "view-pool-error": "Гем тәвтн, ода серверуд күндрҗәнә.\nДегд олн халх хәләх сурлт орв.\nБуйн болтха, күләһәд халхт хандх седвәр бәән давттн.\n\n$1",
+ "aboutsite": "{{SITENAME}} туск",
+ "aboutpage": "Project:Бичлһн",
+ "copyright": "Бус эс гихлә, дотр $1 зөвшәрләр орлһта.",
+ "copyrightpage": "{{ns:project}}:Зокъячин зөв",
+ "currentevents": "Өдгәк йовдл",
+ "currentevents-url": "Project:Өдгәк йовдл",
+ "disclaimers": "Даавран буцлт",
+ "disclaimerpage": "Project:Даавран буцлт",
+ "edithelp": "Ясврин дөң",
"mainpage": "Нүр халх",
"mainpage-description": "Нүр халх",
"policy-url": "Project:Бодлһн",
- "portal": "Бүрдәцин хург",
- "portal-url": "Project:Бүрдәцин хург",
- "privacy": "Нууцин бодлһн",
- "privacypage": "Project:Нууцин бодлһн",
- "badaccess": "Зөвәнә эндү",
- "badaccess-group0": "Та сурсн үүл кеҗ болшго.",
- "badaccess-groups": "Эн үүл һанцхн {{PLURAL:$2|1=багас|багудас}} $1 кеҗ чадна.",
+ "portal": "Ниицәнә хург",
+ "portal-url": "Project:Ниицәнә хург",
+ "privacy": "Нуултын бодлһн",
+ "privacypage": "Project:Нуултын бодлһн",
+ "badaccess": "Зөвшәлин эндү",
+ "badaccess-group0": "Та сурсн үүлдврән күцәҗ болшгот.",
+ "badaccess-groups": "Сансн үүлдвр һанц эн {{PLURAL:$2|багин|багмудын}} демнәчнр күцәҗ чадна: $1",
"versionrequired": "MediaWiki'н $1 һарц кергтә",
- "versionrequiredtext": "Тер халх олзхар, MediaWiki'н $1 һарц кергтә.\n[[Special:Version|Һарца халх]] хәләтн.",
- "ok": "Тиим",
- "retrievedfrom": "\"$1\" гидг халхас йовулсн",
- "youhavenewmessages": "Та $1та бәәнәт ($2).",
- "youhavenewmessagesmulti": "Таньд $1 деер шин зәңг ирсн бәәнә.",
- "editsection": "чиклх",
- "editold": "чиклх",
- "viewsourceold": "ишиг үзх",
- "editlink": "чиклх",
- "viewsourcelink": "ишиг хәләх",
- "editsectionhint": "«$1» гидг хүвиг чиклх",
+ "versionrequiredtext": "Эн халх керглхәр, MediaWiki'н $1 һарц кергтә.\n[[Special:Version|Һарцин халх]] хәләтн.",
+ "ok": "Не",
+ "retrievedfrom": "\"$1\" халхас авсн",
+ "youhavenewmessages": "Танд $1 бәәнә ($2).",
+ "newmessageslinkplural": "шин зәңг",
+ "youhavenewmessagesmulti": "Танд $1 деер шин зәңг бәәнә.",
+ "editsection": "ясх",
+ "editold": "ясх",
+ "viewsourceold": "иш код хәләх",
+ "editlink": "ясх",
+ "viewsourcelink": "иш код хәләх",
+ "editsectionhint": "«$1» салвр ясх",
"toc": "Һарг",
"showtoc": "үзүлх",
- "hidetoc": "бултулх",
- "thisisdeleted": "$1 гүүһәд хәләхү аль хәрүлхү?",
- "viewdeleted": "$1 үзүлхү?",
- "restorelink": "{{PLURAL:$1|1=$1 һарһсн сольлһн|$1 һарһсн сольлһн}}",
- "feedlinks": "Тер бәәдлтә",
- "feed-invalid": "Буру бичгдлһнә төлә сүвин янз.",
- "feed-unavailable": "Синдикацин сүв орлһта биш",
- "site-rss-feed": "$1 — RSS-зәңг",
- "site-atom-feed": "$1 — Atom-зәңг",
- "page-rss-feed": "«$1» — RSS-зәнгллһн",
- "page-atom-feed": "«$1» — Atom зәнгллһн",
- "red-link-title": "$1 (халх бәәшго)",
+ "hidetoc": "нуух",
+ "thisisdeleted": "$1 хәләхий аль босххий?",
+ "viewdeleted": "$1 хәләхий?",
+ "restorelink": "{{PLURAL:$1|нег әрлһсн ясвр|$1 әрлһсн ясвр}}",
+ "feedlinks": "Күсм:",
+ "feed-invalid": "Буру закъялһх цувгин төрл.",
+ "feed-unavailable": "Негдсн күсм орлһго",
+ "site-rss-feed": "$1 — RSS күсм",
+ "site-atom-feed": "$1 — Atom күсм",
+ "page-rss-feed": "«$1» — RSS күсм",
+ "page-atom-feed": "«$1» — Atom күсм",
+ "red-link-title": "$1 (халх уга)",
"nstab-main": "Зүүл",
- "nstab-user": "Демнч",
- "nstab-media": "Аһарин халх",
- "nstab-special": "Көдлхнә халх",
+ "nstab-user": "Демнәч",
+ "nstab-media": "Боомгин халх",
+ "nstab-special": "Шишлң халх",
"nstab-project": "Төслин халх",
"nstab-image": "Боомг",
"nstab-mediawiki": "Зәңг",
"nstab-template": "Кевләр",
- "nstab-help": "Цәәлһлһн",
+ "nstab-help": "Дөң",
"nstab-category": "Әәшл",
- "nosuchaction": "Иим үүл бәәшго",
- "nosuchactiontext": "URL'д бичсн үүл буру болҗана.\nТа URL бичәд эндү кеҗ болвза аль буру заалһас дахҗ.\nДәкәд, тер йовдл {{SITENAME}} төслин эндү болвза.",
- "nosuchspecialpage": "Иим көдлхнә халх бәәшго",
- "nospecialpagetext": "<strong>Та сурсн көдлхнә халх бәәшго.</strong>\n\nЧик көдлхнә халхин буулһавр: [[Special:SpecialPages|{{int:specialpages}}]].",
+ "nosuchaction": "Иим үүлдвр уга",
+ "nosuchactiontext": "URL'д заасн үүлдвр буру.\nТа URL орулад эндүрсн аль буру заалһар одсн маһд.\nДәкәд, эн {{SITENAME}} төслин эндү маһд.",
+ "nosuchspecialpage": "Иим шишлң халх уга",
+ "nospecialpagetext": "<strong>Тана сурсн шишлң халх уга.</strong>\n\nБәәдг шишлң халхин бүрткл: [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Эндү",
- "databaseerror": "Өггцнә базин эндү",
- "missing-article": "Өггцнә халһлд сурсн халхин бичг олв уга. Эн халх олх йоста: \"$1\" нертә $2.\n\nТер йовдл һарһсн халхна тууҗин өңгрсн заалһиг дахлһна арһ болад бәәнә.\n\nЭс гиҗ, тиим болх зөвтә, та заклһна теткүлин эндүһиг олв.\nБуйн болтха, URL заалһ бичәд, тер йовдлин туск [[Special:ListUsers/sysop|закрачд]] келтн.",
- "missingarticle-rev": "($1 тойгта халхна янз)",
- "missingarticle-diff": "(йилһән: $1, $2)",
- "internalerror": "Дотрнь эндү",
- "internalerror_info": "Дотрнь эндү: $1",
- "filerenameerror": "Боомгин нериг «$1»-с «$2» болһн сольҗ чаддго",
- "filedeleteerror": "«$1» боомг һарһҗ чаддго.",
- "unexpected": "Таалһта уга кемҗә: «$1» = «$2».",
- "badtitle": "Буру нернь",
- "badtitletext": "Сурсн нерн буру, хоосн, аль му бичсн келн хоорнд нертә. Тиим чигн биз, нерн зөв уга үзгтә.",
- "viewsource": "Ишиг хәләх",
+ "databaseerror": "То-дигин саңгин эндү",
+ "missing-article": "То-дигин саңт сурсн «$1» халхин $2 олх йоста бичг олсн уга.\n\nТиим заңта йовдл әрлһсн халхна тууҗин хуучрсн заалһар одх седвәрәр һардг авъяста.\n\nКемр эн учр биш, та көтлврин теткүлин эндү олсн бәәдлтәт.\nБуйн болтха, эн URL зааҗ, эн йовдлын туск [[Special:ListUsers/sysop|закрачт]] келтн.",
+ "missingarticle-rev": "(№ $1 һарц)",
+ "missingarticle-diff": "(Йилһән: $1, $2)",
+ "internalerror": "Дотрк эндү",
+ "internalerror_info": "Дотрк эндү: $1",
+ "filerenameerror": "Боомгин нер «$1» талас «$2» болһҗ болмҗго",
+ "filedeleteerror": "«$1» боомг әрлһҗ болмҗго.",
+ "unexpected": "Таарго кемҗән: «$1» = «$2».",
+ "badtitle": "Болшго нернь",
+ "badtitletext": "Сурсн халхин нерн буру, хоосн, аль буру бичсн келн хоорндк аль вики хоорндк нерн. Нернд болшго темдгүд керглсн маһд.",
+ "viewsource": "Иш код хәләх",
"actionthrottled": "Хурдна заг",
- "ns-specialprotected": "Шишлң халх чиклсн бәәх болшго.",
- "virus-unknownscanner": "медгдго антивирус:",
+ "ns-specialprotected": "Шишлң халх ясч болшго.",
+ "virus-unknownscanner": "медснго антивирус:",
"logouttext": "'''Та һарад бәәнәт.'''\n\nТа {{SITENAME}} гидг ормиг нертә уга олзлҗ чаднат, аль та <span class='plainlinks'>[$1 дәкәд орҗ]</span> цацу аль талдан нертә чаднат.\nЗәрм халхс цааранднь та ода чигн орсн мет үзүлҗ чаддг тускар темдглтн (та хәләчин санлиг цеврлтл).",
- "yourname": "Демнчна нернь:",
+ "yourname": "Демнәчнә нерн:",
"yourpassword": "Нууц үг:",
- "yourpasswordagain": "Нууц үгиг давтн:",
+ "yourpasswordagain": "Нууц үг давтн:",
"remembermypassword": "Намаг эн тоолдврд тодлх ($1 {{PLURAL:$1|1=өдрт|өдрмүдт}} икәр биш)",
"yourdomainname": "Тана домен:",
"login": "Орлһн",
- "nav-login-createaccount": "Харһх / бичгдлһн кех",
- "userlogin": "Орх аль бичгдлһиг бүтәх",
- "userloginnocreate": "Харһх",
+ "nav-login-createaccount": "Орх/бүрткгдх",
+ "userlogin": "Орх/бүрткгдх",
+ "userloginnocreate": "Орх",
"logout": "Һарх",
"userlogout": "Һарх",
- "notloggedin": "Та орв биш",
- "nologin": "Бичгдлһта уга? '''$1'''.",
- "nologinlink": "Бичгдлһиг бүтәх",
- "createaccount": "Бичгдлһиг бүтәх",
- "gotaccount": "Бичгдлһтә? '''$1'''.",
- "gotaccountlink": "Харһтн",
+ "notloggedin": "Та орсн уга",
+ "nologin": "Бичгдлһгот? '''$1'''.",
+ "nologinlink": "Бичгдлһн бүтәх",
+ "createaccount": "Бичгдлһн бүтәх",
+ "gotaccount": "Бичгдлһтәт? '''$1'''.",
+ "gotaccountlink": "Ортн",
"createaccountmail": "электрона улаһар",
"userexists": "Эн нер олзлдг юмн.\nБуйн болтха, талдан нернь автн.",
"loginerror": "Орлһна эндү",
- "createaccounterror": "Бичгдлһиг бүтәх болшго: $1",
- "noname": "Та зөвтә демнчна нернь бичв уга.",
+ "createaccounterror": "Бичгдлһн бүтәҗ болмҗго: $1",
+ "noname": "Та зөвшәсн демнәчнә нер заасн уга.",
"loginsuccesstitle": "Йовудта орлһн",
- "loginsuccess": "''' Тадн ода «$1» нертә {{SITENAME}} гидг нерәдлһтә төсвд бәәнәт.'''",
- "nosuchuser": "«$1» гидг нерәдлһтә демнч бәәшго.\nДемнчна нерт баһ болн ик үзгүд әдл биш болна.\n«<nowiki>$1</nowiki>» гидг нерәдлһтә демнч бәәшго.\nБичлһиг шүүтн аль [[Special:UserLogin/signup|бигчдлһиг бүтәтн]].",
- "nosuchusershort": "«$1» гидг нерәдлһтә демнч бәәшго.\nБичлһиг шүүтн.",
- "nouserspecified": "Та демнчна нернь бичх йостав.",
- "login-userblocked": "Тер демнч бүслсн, харһад орҗ болшго бәәнә.",
- "wrongpassword": "Та буру нууц үг бичв.\nДәкәд арһ хәәтн.",
- "wrongpasswordempty": "Та хоосн нууц үгиг бичв.\nДәкәд арһ хәәтн.",
+ "loginsuccess": "<strong>Та ода «$1» нертә {{SITENAME}} төсвд бәәнәт.</strong>",
+ "nosuchuser": "«$1» нертә демнәч уга.\nДемнәчнә нернд баһ болн том үзгүд әдл биш.\nЧик бичсн шүүтн аль [[Special:UserLogin/signup|бигчдлһн бүтәтн]].",
+ "nosuchusershort": "«$1» нертә демнәч уга.\nЧик бичсн шүүтн.",
+ "nouserspecified": "Та демнәчнә нер заах йоста.",
+ "login-userblocked": "Эн демнәч бүслсн, орҗ болшго.",
+ "wrongpassword": "Та буру нууц үг бичвт.\nДәкәд сөртн.",
+ "wrongpasswordempty": "Та хоосн нууц үг бичвт.\nДәкәд сөртн.",
"passwordtooshort": "Нууц үг баһар биш $1 {{PLURAL:$1|үзгтә|үзгүдта|үзгүдта}} бәәх йоста.",
- "password-name-match": "Нууц үг денмнчна нертә әдл биш бәәх йоста.",
+ "password-name-match": "Нууц үг денмнәчнә нерәс бус бәәх йоста.",
"mailmypassword": "Шин нууц үгиг E-mail бичгәр йовулҗ",
"emailauthenticated": "Тана e-mail хайг $2 өдрт, $3 цагт батлсн.",
- "accountcreated": "Бичгдллһн бүтәв.",
+ "accountcreated": "Бичгдлһн бүтәв.",
"loginlanguagelabel": "Келн: $1",
- "changepassword": "Нууц үгиг сольҗ",
- "resetpass_header": "Бичгдллһнә нууц үгиг сольх",
+ "changepassword": "Нууц үг сольлһн",
+ "resetpass_header": "Бичгдлһнә нууц үг сольх",
"oldpassword": "Көгшн нууц үг:",
"newpassword": "Шин нууц үг:",
- "retypenew": "Шин нууц үгиг дәкәд бичтн:",
+ "retypenew": "Шин нууц үг дәкәд бичтн:",
"changepassword-success": "Тана нууц үгиг йовудта сольв! Та ода орнат...",
- "resetpass-submit-loggedin": "Нууц үгиг сольх",
- "resetpass-submit-cancel": "Уга кех",
+ "resetpass-submit-loggedin": "Нууц үг сольх",
+ "resetpass-submit-cancel": "Буцх",
"bold_sample": "Тарһн бичг",
"bold_tip": "Тарһн бичг",
"italic_sample": "Өкәсн бичг",
"italic_tip": "Өкәсн бичг",
- "link_sample": "Заалһна нерн",
- "link_tip": "Өвр заалһ",
- "extlink_sample": "http://www.example.com заалһна нернь",
- "extlink_tip": "Һаза заалһ (http:// гидг эклц бичә мартн)",
- "headline_sample": "Толһа нерн",
- "headline_tip": "Дү толһа нерн",
- "nowiki_sample": "Энд темдглһтә уга бичгиг бичтн",
- "nowiki_tip": "Бики темдглһиг басх",
- "image_tip": "Орцулсн боомг",
- "media_tip": "Боомгин заалһ",
- "sig_tip": "Тана тәвсн һар цагин темдгтә",
- "hr_tip": "Кевтдг татасн (дундин бәәдлтә олзлтн)",
- "summary": "Учр-утх:",
- "subject": "Төр/нерәдлһн:",
- "minoredit": "Баһ чикллһн",
- "watchthis": "Шинҗлх",
- "savearticle": "Хадһлх",
+ "link_sample": "Заалһин нерн",
+ "link_tip": "Дотрк заалһ",
+ "extlink_sample": "http://www.example.com заалһин һарцг",
+ "extlink_tip": "Һазак заалһ (http:// эклвр бичә мартн)",
+ "headline_sample": "Һарцгин бичәсн",
+ "headline_tip": "Дү һарцг",
+ "nowiki_sample": "Энд кевлүлх кергго бичәсн орултн",
+ "nowiki_tip": "Вики кевлүллт басх",
+ "image_tip": "Углсн боомг",
+ "media_tip": "Боомгур заалһ",
+ "sig_tip": "Тана тәвсн һар цаг хойр",
+ "hr_tip": "Кевтә татасн (нигтәр биш керглтн)",
+ "summary": "Үндсн:",
+ "subject": "Төр/һарцг:",
+ "minoredit": "Баһ ясвр",
+ "watchthis": "Эн халх оврх",
+ "savearticle": "Халх хадһлх",
"preview": "Хәләвр",
"showpreview": "Хәләвр",
- "showdiff": "Йилһән",
+ "showdiff": "Кесн йилһән",
"anoneditwarning": "'''Урдаснь зәңг:''' та орв биш.\nТадна IP хайг эн халхна чикллһнә сеткүлд бичҗ авх.",
- "summary-preview": "Эн учр-утхта болх:",
- "subject-preview": "Тер һарчиг болх:",
- "blockedtitle": "Демнч бүслгдәд бәәнә.",
- "loginreqlink": "харһх",
- "accmailtitle": "Нууц үгтә бичг йовулла.",
+ "summary-preview": "Эн үндсн болх:",
+ "subject-preview": "Эн һарцг болх:",
+ "blockedtitle": "Демнәч бүслгдсн",
+ "loginreqlink": "орх",
+ "accmailtitle": "Нууц үгтә бичг йовулгдв",
"newarticle": "(Шин)",
- "newarticletext": "Та заалһиг дахад бәәдг уга халхд ирв.\nТерүг бүтәҗ болхла, дораһар терзд бичтн (дәкәд өггцнә төлә [$1 тәәлвр] хәләтн).\nТа эн һазрт эндүһәр бәәхлә, '''Хәрү''' дарциг дартн.",
- "noarticletext": "Эн халх хоосн. Та [[Special:Search/{{PAGENAME}}|эн нернә сананд орулһна хәәх]] , <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} бүртклин бичгт хәәх], аль '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} бүтәх]'''</span>.",
+ "newarticletext": "Та заалһар одахн уга халхт одв.\nҮүниг бүтәхәр, дорк цоңхт бичәсн орултн (тодрха [$1 дөңгин халх] хәләтн).\nТа энд эндүһәр одлхлат, харагчин '''Хәрү''' товрун дартн.",
+ "noarticletext": "Эн халх одахн хоосн. Та [[Special:Search/{{PAGENAME}}|эн нернә дурдлһн хәәҗ]] , <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ирлцәтә седкүлин бичгдл хәәҗ], аль '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} иим нертә халх бүтәҗ]''' чаднат</span>.",
"clearyourcache": "'''Оньган өгтн:''' Кесн сольлһн үзхәр, тана хәләлгчин кеш цеврүлтн: '''Mozilla / Firefox''': ''Ctrl+Shift+R'', '''IE:''' ''Ctrl+F5'', '''Safari''': ''Cmd+Shift+R'', '''Konqueror''': ''F5'', '''Opera''': ''Tools→Preferences'' менүһәс.",
"usercssyoucanpreview": "'''Селвг:''' тана шин CSS боомг шүүҗ хадһлар, «{{int:showpreview}}» товч олзлтн.",
"userjsyoucanpreview": "'''Селвг:''' тана шин JS боомг шүүҗ хадһлар, «{{int:showpreview}}» товч олзлтн.",
@@ -354,10 +355,10 @@
"previewnote": "'''Эн мел хәләвр бәәдг тускар тодлтн.'''\nТана сольлһн ода чигн хадһлсн уга!",
"previewconflict": "Тер хәләвр деегүрк чикллһнә теегт бәәдг бичг хадлһҗ бичсн мет үзүлнә.",
"session_fail_preview": "'''Гемим тәвтн, сервер тана сольлһта даңдад болв. Юнгад гихлә, тана харһлһна медүллһн геев.\nБуйн болтха, дәкәд арһ хәәтн.\nТер эндү давтхла, [[Special:UserLogout|һартн]] тегәд бас харһтн.'''",
- "editing": "Чикллһн: $1",
- "editingsection": "«$1» гидг халхна чикллһн (хүв)",
- "editconflict": "Чикллһнә керүл: $1",
- "yourtext": "Тана бичсн",
+ "editing": "Ясвр: $1",
+ "editingsection": "«$1» ясвр (салвр)",
+ "editconflict": "Ясврин керүл: $1",
+ "yourtext": "Тана бичәсн",
"yourdiff": "Йилһән",
"copyrightwarning": "Буйн болтха, цуг өгүллһн {{SITENAME}} төлә $2 гидг закаһар кесн, тоолсн бәәдг тускар тодлтн (Дәкәд өггцд төлә $1 хәләтн). Та тана бичсн чилклсн аль делгрңсн бәәҗ седхлә биш, эн ормд бичә бичтн.<br /> Дәкәд та маднд эн эврәнь бичсн, күмн әмтнә хазас аль цацу сул медснәс бәәдг үгән өгнәт. '''Зөвән авхла уга, харссн бичсн күүнә көдлмш бичә тәвтн!'''",
"copyrightwarning2": "Буйн болтха, цуг өгүллһн {{SITENAME}} төлә чиклсн аль һарһсн бәәдг чадта тускар тодлтн. Та тана бичсн чилклсн аль делгрңсн бәәҗ седхлә биш, эн ормд бичә бичтн.<br /> Дәкәд та маднд эн эврәнь бичсн, күмн әмтнә хазас аль цацу сул медснәс бәәдг үгән өгнәт ($1 хәләтн). '''Зөвән авхла уга, харссн бичсн күүнә көдлмш бичә тәвтн!'''",
@@ -368,88 +369,88 @@
"template-semiprotected": "(зәрм харссн)",
"hiddencategories": "Эн халх тер $1 {{PLURAL:$1|бултулсн әәшләс|бултулсн әәшлүдәс|бултулсн әәшлүдәс}}:",
"permissionserrorstext-withaction": "Та $2 кеҗ болшго. Юнгад гихлә, эн {{PLURAL:$1|1=учрар|учрар}}:",
- "edit-conflict": "Чикллһнә керүл.",
+ "edit-conflict": "Ясврин керүл.",
"parser-template-loop-warning": "Зуран бүтү нүдлв: [[$1]]",
- "viewpagelogs": "Тер халхна сеткүлдүд үзүлх",
- "currentrev-asof": "Ода болсн янз ($1)",
- "revisionasof": "Тер цагин янз: $1",
- "previousrevision": "← Урдк янз",
- "nextrevision": "Дарук янз →",
- "currentrevisionlink": "Ода болсн янз",
+ "viewpagelogs": "Эн халхин седкүлүд хәләх",
+ "currentrev-asof": "$1 һарц",
+ "revisionasof": "$1 һарц",
+ "previousrevision": "← Урдк һарц",
+ "nextrevision": "Дарук һарц →",
+ "currentrevisionlink": "Бәәгч һарц",
"cur": "ода",
"next": "дарук",
"last": "урдк",
"page_first": "түрүн",
- "page_last": "кенз",
- "histlegend": "Тәәлвр: (ода) — одачн янзас йилһән; (урдк) — урдк янзас йилһән; '''б''' — баһ сольлһн",
- "history-fieldset-title": "Тууҗиг хәләх",
- "histfirst": "Эрт",
- "histlast": "Шидрә",
+ "page_last": "отхн",
+ "histlegend": "Һарцин суңһвр: дүңнх сансн халхин һарцс суңһад, Enter аль дорк товрун дартн.<br />\nТәәлвр: <strong>({{int:cur}})</strong> — отхн һарцас йилһән, <strong>({{int:last}})</strong> — урдк һарцас йилһән, <strong>{{int:minoreditletter}}</strong> — баһ ясвр.",
+ "history-fieldset-title": "Тууҗ хәләх",
+ "histfirst": "маш хуучн",
+ "histlast": "маш шин",
"historyempty": "(хоосн)",
- "rev-delundel": "үзүлх/бултулх",
+ "rev-delundel": "үзүлх/нуух",
"rev-showdeleted": "үзүлх",
"revdelete-show-file-submit": "Тиим",
- "revdelete-radio-set": "Ээ",
- "revdelete-radio-unset": "Уга",
- "revdel-restore": "Үзгдллһиг сольх",
- "pagehist": "Халхна тууҗ",
- "revdelete-otherreason": "Талдан/дәкәд учр:",
+ "revdelete-radio-set": "Нуугдсн",
+ "revdelete-radio-unset": "Үзгдмл",
+ "revdel-restore": "үзгдмл сольх",
+ "pagehist": "Халхин тууҗ",
+ "revdelete-otherreason": "Бус/немгч учр:",
"mergehistory-reason": "Учр:",
"revertmerge": "Хувах",
- "history-title": "$1 — сольлһна тууҗ",
+ "history-title": "«$1» ясврин тууҗ",
"lineno": "$1 мөр:",
"compareselectedversions": "Суңһсн янзс әдлцүлх",
- "editundo": "уга кех",
- "searchresults": "Хәәлһнә ашуд",
- "searchresults-title": "Хәәлһнә ашуд \"$1\" төлә",
- "notextmatches": "Әдл бичг халхд уга",
+ "editundo": "буцх",
+ "searchresults": "Хәәврин аш",
+ "searchresults-title": "«$1» хәәврин аш",
+ "notextmatches": "Халхсин бичәснд ирлцән уга",
"prevn": "урдк {{PLURAL:$1|$1}}",
"nextn": "дарук {{PLURAL:$1|$1}}",
- "viewprevnext": "Гүүһәд хәләх ($1 {{int:pipe-separator}} $2) ($3)",
+ "viewprevnext": "Хәләх ($1 {{int:pipe-separator}} $2) ($3)",
"searchprofile-articles": "Зүүлс",
"searchprofile-images": "Үзгдл-соңсвр",
- "searchprofile-everything": "Цуһар",
- "searchprofile-articles-tooltip": "$1 гидг зүүлд хәәх",
+ "searchprofile-everything": "Хамг",
+ "searchprofile-articles-tooltip": "$1 дотр хәәх",
"searchprofile-images-tooltip": "Боомг хәәх",
- "search-result-size": "$1 ({{PLURAL:$2|$2 үг|$2 үгмүд|$2 үгмүд}})",
- "search-redirect": "(авч одлһн $1)",
- "search-section": "($1 хүв)",
- "search-suggest": "Та эниг таанат: $1 ?",
- "search-interwiki-caption": "Садта проектмуд",
- "search-interwiki-default": "$1 ашуд:",
- "search-interwiki-more": "(дәкәд)",
- "searchall": "цуг",
- "powersearch-legend": "Күчн хәәлһн",
- "powersearch-ns": "Эн нернә у дотран хәәх:",
+ "search-result-size": "$1 ({{PLURAL:$2|$2 үг|$2 үг|$2 үг}})",
+ "search-redirect": "(туудг $1)",
+ "search-section": "(«$1» салвр)",
+ "search-suggest": "Тана таасн маһд: $1",
+ "search-interwiki-caption": "Садта төслүд",
+ "search-interwiki-default": "$1 талас аш:",
+ "search-interwiki-more": "(нань)",
+ "searchall": "хамг",
+ "powersearch-legend": "Нәрн хәәвр",
+ "powersearch-ns": "Эн нернә төрлд хәәх:",
"powersearch-togglenone": "Уга",
- "preferences": "Дурллһн",
- "mypreferences": "Көгүд",
- "prefs-edits": "Чикллһнә то:",
- "prefs-skin": "Хувцнь",
+ "preferences": "Көгмүд",
+ "mypreferences": "Көгмүд",
+ "prefs-edits": "Ясврин то:",
+ "prefs-skin": "Бәәдл",
"skin-preview": "Хәләвр",
- "datedefault": "Келхлә уга",
- "prefs-personal": "Демнчна көгүд",
- "prefs-rc": "Шидрә сольлһн",
- "prefs-watchlist": "Шинҗллһнә сеткүл",
+ "datedefault": "Көг уга",
+ "prefs-personal": "Демнәчна то-диг",
+ "prefs-rc": "Отхн ясвр",
+ "prefs-watchlist": "Оврхин седкүл",
"prefs-watchlist-days": "Шинҗллһнә седкүлд үзүлсн ик гисн өдрин то:",
- "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|1=day|days}}",
- "prefs-misc": "Талдан",
- "prefs-resetpass": "Нууц угиг сольҗ",
- "prefs-email": "E-mail'ын көгүд",
+ "prefs-watchlist-days-max": "$1 {{PLURAL:$1|өдрәс|өдрәс}} удан биш",
+ "prefs-misc": "Бус",
+ "prefs-resetpass": "Нууц үг сольх",
+ "prefs-email": "E-mail'ин көгмүд",
"prefs-rendering": "Һазад бәәдл",
"saveprefs": "Хадһлх",
- "restoreprefs": "Цуг эклцин көгүдиг босхҗ тохрар",
- "prefs-editing": "Чикллһн",
+ "restoreprefs": "Хамг таарсн көг босхх (цуг салвр)",
+ "prefs-editing": "Ясвр",
"rows": "Мөрд:",
"columns": "Бахд:",
"savedprefs": "Тана көгүдиг хадһлв.",
- "timezonelegend": "Часин бүс:",
- "localtime": "Бәәрн һазра цаг:",
- "timezoneuseserverdefault": "Серверинь олзлх",
- "timezoneuseoffset": "Талдан (көндллһн заатн)",
+ "timezonelegend": "Цагин бүс:",
+ "localtime": "Бәәрн цаг:",
+ "timezoneuseserverdefault": "Серверин көг керглх",
+ "timezoneuseoffset": "Бус (көндллһн заатн)",
"servertime": "Серверин цаг:",
- "guesstimezone": "Хәләлгчәс авх",
- "timezoneregion-africa": "Априк",
+ "guesstimezone": "Харагчасавх",
+ "timezoneregion-africa": "Африк",
"timezoneregion-america": "Америк",
"timezoneregion-antarctica": "Антарктик",
"timezoneregion-arctic": "Арктик",
@@ -457,99 +458,99 @@
"timezoneregion-atlantic": "Атлантин дала",
"timezoneregion-australia": "Австрал",
"timezoneregion-europe": "Европ",
- "timezoneregion-indian": "Энетекгин дала",
+ "timezoneregion-indian": "Эндкг дала",
"timezoneregion-pacific": "Номһн дала",
"allowemail": "Талдан демнчнрәс ирсн e-mail бичг зөвшәрх",
- "prefs-searchoptions": "Хәәлһнә көг",
+ "prefs-searchoptions": "Хәәвр",
"prefs-namespaces": "Нернә ус",
"prefs-custom-css": "Онц CSS",
"prefs-custom-js": "Онц JS",
- "prefs-emailconfirm-label": "E-mail батлһн:",
+ "prefs-emailconfirm-label": "E-mail лавллт:",
"youremail": "E-mail хайг:",
- "username": "Демнчна нер:",
- "prefs-memberingroups": "{{PLURAL:$1|1=Багин|Багдудин}} хүв:",
+ "username": "Демнәчнә нерн:",
+ "prefs-memberingroups": "{{PLURAL:$1|Багин|Багмудын}} гешүн:",
"prefs-registration": "Темдглҗ бүртклһнә цаг:",
"yourrealname": "Үнн нерн:",
"yourlanguage": "Бәәдлин келн:",
"yournick": "Тәвсн һар:",
"prefs-help-signature": "Меткән халхна бичсн бичгт «<nowiki>~~~~</nowiki>» немәд һаран тәвх кергтә. Тер үзгүд тана тәвсн һарт болн цагин бичлгт болулх.",
- "yourgender": "Киисн:",
- "gender-unknown": "Бичсн уга",
- "gender-male": "Эр",
- "gender-female": "Эм",
+ "yourgender": "Ямр бичлһн деершәнәт?",
+ "gender-unknown": "Би эс заахар деершәнәв",
+ "gender-male": "Эн вики халхс ясна (эр)",
+ "gender-female": "Эн вики халхс ясна (эм)",
"prefs-help-gender": "Эн дәкәд бәәдг: чик күндллһн тоолвртар төлә. Эн өггцн цуг әмтнә болх.",
"email": "E-mail хайг",
"prefs-help-realname": "Үнн нернь та эврә дурар бичнәт. Бичлхлә, эн тәвсн һарт элзлдг бәәх.",
"prefs-help-email": "E-mail хайг та эврә дурар бичнәт. Бичхлә, тадн шин түлкүр үгиг бичгәр йовулсн өгҗ чаднат (мартхла).",
"prefs-info": "Һол медә",
"prefs-i18n": "Олн орни бәәлһн",
- "prefs-signature": "Тәвсн һаран",
- "prefs-advancedediting": "Дәкәд көгүд",
- "prefs-advancedrc": "Дәкәд көгүд",
- "prefs-advancedrendering": "Дәкәд көгүд",
- "prefs-advancedsearchoptions": "Дәкәд көгүд",
- "prefs-advancedwatchlist": "Дәкәд көгүд",
+ "prefs-signature": "Тәвсн һар",
+ "prefs-advancedediting": "Йирңкә көг",
+ "prefs-advancedrc": "Нәрн көг",
+ "prefs-advancedrendering": "Нәрн көг",
+ "prefs-advancedsearchoptions": "Нәрн көг",
+ "prefs-advancedwatchlist": "Нәрн көг",
"prefs-diffs": "Йилһәс",
"userrights-reason": "Учр:",
"group": "Баг:",
- "group-user": "Демнчнр",
+ "group-user": "Демнәчнр",
"group-autoconfirmed": "Эврә батлсн демнчнр",
"group-bot": "Көдлврүд",
"group-sysop": "Закрачуд",
"group-bureaucrat": "Нойнчуд",
"group-all": "(цуг)",
- "group-user-member": "Демнч",
- "group-autoconfirmed-member": "Эврә батлсн демнчнр",
- "group-bot-member": "Көдлвр",
- "group-sysop-member": "Закрач",
- "group-bureaucrat-member": "Нойнч",
+ "group-user-member": "демнәч",
+ "group-autoconfirmed-member": "эврә лавлсн демнәч",
+ "group-bot-member": "көдлгч",
+ "group-sysop-member": "закрач",
+ "group-bureaucrat-member": "нойнч",
"grouppage-user": "{{ns:project}}:Демнч",
- "grouppage-autoconfirmed": "{{ns:project}}:Эврә батлсн демнчнр",
- "grouppage-bot": "{{ns:project}}:Көдлврүд",
+ "grouppage-autoconfirmed": "{{ns:project}}:Эврә лавлсн демнчнр",
+ "grouppage-bot": "{{ns:project}}:Көдлгчүд",
"grouppage-sysop": "{{ns:project}}:Закрачуд",
"grouppage-bureaucrat": "{{ns:project}}:Нойнчуд",
- "newuserlogpage": "Бичгдлһнә сеткүл",
- "rightslog": "Демнчна зөвәнә сеткүл",
- "action-edit": "эн халхиг чиклх",
- "nchanges": "$1 {{PLURAL:$1|1=сольлһн|сольлһн}}",
- "recentchanges": "Шидрә сольлһн",
- "recentchanges-legend": "Шидрә сольлһна көгүд",
- "recentchanges-summary": "Эн цагин дараһар бичсн шидрә сольлһн",
- "recentchanges-feed-description": "Эн зәңгллһд шидрә хүврһд шинҗлх.",
- "recentchanges-label-newpage": "Тер үүләр шин халх бүтәв",
- "recentchanges-label-minor": "Эн баһ чинртә сольлһн",
- "recentchanges-label-bot": "Эн сольлһн көдлвр (робот) кехв",
- "recentchanges-legend-newpage": "$1 — шин халх",
- "rclistfrom": "Тер цагас авн сольлһн үзүлх: $3 $2.",
- "rcshowhideminor": "баһ чикллһиг $1",
- "rcshowhidebots": "көдлврүдиг $1",
- "rcshowhideliu": "демнчнриг $1",
- "rcshowhideanons": "нер уга демнчнриг $1",
- "rcshowhidemine": "мини чикллһиг $1",
- "rclinks": "Кенз $1 сольлһн, кенз $2 өдрмүдт үзүлх<br />$3",
+ "newuserlogpage": "Бичгдлһнә седкүл",
+ "rightslog": "Демнәчна зөвин седкүл",
+ "action-edit": "эн халх ясх",
+ "nchanges": "$1 ясвр",
+ "recentchanges": "Отхн ясвр",
+ "recentchanges-legend": "Отхн ясврин көг",
+ "recentchanges-summary": "Энд цагин дараһар бичсн отхн ясвр.",
+ "recentchanges-feed-description": "Эн күсмд викин отхн ясвр оврх.",
+ "recentchanges-label-newpage": "Эн ясврар шин халх бүтәв",
+ "recentchanges-label-minor": "Эн баһ чинртә ясвр",
+ "recentchanges-label-bot": "Эн ясвр көдлгч (бот) кев",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|list of new pages]] чигн хәләтн)",
+ "rclistfrom": "Эн цагас авн ясвр үзүлх: $3 $2.",
+ "rcshowhideminor": "баһ ясвр $1",
+ "rcshowhidebots": "көдлгчүд $1",
+ "rcshowhideliu": "$1 бүрткгдсн демнәч",
+ "rcshowhideanons": "нерго демнәчнр $1",
+ "rcshowhidemine": "мини ясвр $1",
+ "rclinks": "Отхн $1 ясвр, сүл $2 өдрмүдт үзүлх<br />$3",
"diff": "йилһ",
"hist": "тууҗ",
- "hide": "бултулх",
- "show": "үзүлх",
+ "hide": "Нуух",
+ "show": "Үзүлх",
"minoreditletter": "б",
"newpageletter": "Ш",
"boteditletter": "к",
- "newsectionsummary": "/* $1 */ Шин хүв",
- "rc-enhanced-expand": "Тодрхасиг үзүлх (JavaScript кергтә)",
- "rc-enhanced-hide": "Тодрхасиг бултулх",
- "recentchangeslinked": "Садн чикллһн",
- "recentchangeslinked-feed": "Садта чикллһн",
- "recentchangeslinked-toolbox": "Садта чикллһн",
- "recentchangeslinked-title": "$1 садта сольлһн",
+ "newsectionsummary": "/* $1 */ Шин салвр",
+ "rc-enhanced-expand": "Нәрн учр үзүлх",
+ "rc-enhanced-hide": "Тодрха нуух",
+ "recentchangeslinked": "Садн ясвр",
+ "recentchangeslinked-feed": "Садн ясвр",
+ "recentchangeslinked-toolbox": "Садн ясвр",
+ "recentchangeslinked-title": "$1 садн ясвр",
"recentchangeslinked-summary": "Эн тер халх заалдг халхсин (аль тер янзин халхсин) шидрә сольлһн.\nТана [[Special:Watchlist|шинҗллһнә сеткүлин]] халхс '''тарһн''' бичәтә.",
- "recentchangeslinked-page": "Халхна нернь:",
- "recentchangeslinked-to": "Зөрүһәр, эн халхд заалдг халхсин хүврлһиг үзүлх",
- "upload": "Боомгиг тәвх",
- "uploadbtn": "Боомгиг тәвх",
- "uploadnologintext": "Та [[Special:UserLogin|харһх]] кергтә.",
+ "recentchangeslinked-page": "Халхин нерн:",
+ "recentchangeslinked-to": "Зөрүһәр, эн халхт заалдг халхсин ясвр үзүлх",
+ "upload": "Боомг тәвх",
+ "uploadbtn": "Боомг тәвх",
+ "uploadnologintext": "Боомг орулхар $1 кергтә.",
"uploaderror": "Тәвллһнә эндү",
"uploadlogpage": "Тәвллһнә сеткүл",
- "filename": "Боомгна нернь",
+ "filename": "Боомгин нернь",
"filedesc": "Учр-утх",
"fileuploadsummary": "Учр-утх:",
"savefile": "Хадһлх",
@@ -573,18 +574,17 @@
"filehist-datetime": "Өдр/цаг",
"filehist-thumb": "Зураллһн",
"filehist-thumbtext": "$1 янзин зураллһн",
- "filehist-user": "Демнч",
+ "filehist-user": "Демнәч",
"filehist-dimensions": "Юмна кир",
"filehist-comment": "Аҗгллһн",
- "imagelinks": "Боомгд заалһуд",
- "linkstoimage": "{{PLURAL:$1|Эн $1 халх|Эн $1 халхс|Эн $1 халхс}} тер боомгд заалдг бәәнә:",
+ "imagelinks": "Боомг керглән",
+ "linkstoimage": "Эн $1 халх эн боомгур заана:",
"sharedupload": "Эн боомг $1 ормас. Териг талдан төсвд олзлҗ болх.",
"uploadnewversion-linktext": "Тер боомгин шин һарц тәвх",
"randompage": "Уршг зүүл",
"statistics": "То бүрткл",
"statistics-header-pages": "Халхарн то бүрткл",
"statistics-header-edits": "Сольлһна то бүрткл",
- "statistics-header-views": "Хәләврин то бүрткл",
"statistics-header-users": "Демнчәрн то бүрткл",
"statistics-articles": "Зүүлс",
"statistics-pages": "Халхс",
@@ -592,25 +592,21 @@
"statistics-files": "Тәвсн боомгуд",
"statistics-edits": "{{SITENAME}} эклсн цагас авн сольлһна то",
"statistics-edits-average": "Халхарн сольлһна то",
- "statistics-views-total": "Цуг хәләврин то",
- "statistics-views-peredit": "Сольлһарн хәләврин то",
"statistics-users": "Бичгдлһтә [[Special:ListUsers|демнчнр]]",
"statistics-users-active": "Үүлтә демнчнр",
- "statistics-users-active-desc": "{{PLURAL:$1|$1 өдрт|$1 өдрмүдт|$1 өдрмүдт}} болв чигн үүл кесн демнчнр",
- "statistics-mostpopular": "Маш хәләсн халхс",
- "brokenredirects-edit": "чиклх",
+ "statistics-users-active-desc": "Сүл $1 өдрт үүлдвр кесн демнчәнр",
+ "brokenredirects-edit": "ясх",
"brokenredirects-delete": "һарһх",
- "nbytes": "$1 {{PLURAL:$1|байд|байдуд|байдуд}}",
- "nmembers": "$1 {{PLURAL:$1|мөч|мөчүд|мөчин}}",
+ "nbytes": "$1 байт",
+ "nmembers": "$1 гешүн",
"prefixindex": "Цуг халхс эн эклцтә",
"newpages": "Шин халхс",
"move": "Көндәх",
"movethispage": "Эн халхд шин нер аль шин орм өгх",
- "pager-newer-n": "{{PLURAL:$1|1=шинәр 1|шинәр $1}}",
- "pager-older-n": "{{PLURAL:$1|1=көгшәр 1|көгшәр $1}}",
+ "pager-newer-n": "$1 нань шин",
+ "pager-older-n": "$1 нань хуучн",
"booksources": "Дегтрин делгүрс",
"booksources-search-legend": "Дегтр туск хәәх",
- "booksources-go": "Ор",
"log": "Сеткүлс",
"allpages": "Цуг халхс",
"prevpage": "Урдк халх ($1)",
@@ -618,18 +614,18 @@
"allpagesto": "Энд асрлһиг зогсх:",
"allarticles": "Цуг халхс",
"allpagessubmit": "Орх",
- "linksearch": "Һаза заалһуд",
+ "linksearch": "Һазад заалһ хәәвр",
"listgrouprights-members": "(мөчүдин сеткүл)",
"emailuser": "Энд E-mail йовулх",
- "watchlist": "Шинҗллһнә сеткүл",
- "mywatchlist": "Шинҗллһнә сеткүл",
- "addedwatchtext": "«[[:$1]]» гидг нерәдлһтә халх тана [[Special:Watchlist|шинҗллһнә сеткүлд]] немв.\nТегәд тер халхна болн терүнә ухалврин сольлһн энд шиҗлсн болх. Эн халх '''тарһн'' үзгәр [[Special:RecentChanges|шидрә сольлһна]] халхд бичсн (амр умшхар) болх.",
+ "watchlist": "Оврхин седкүл",
+ "mywatchlist": "Оврхин седкүл",
+ "addedwatchtext": "«[[:$1]]» халх тана [[Special:Watchlist|оврхин седкүлд]] немв.\nЭн халхин болн үүнә меткән халхин ирх сольлһн энд бүрктх.",
"removedwatchtext": "«[[:$1]]» халх тана [[Special:Watchlist|шинҗллһнә сеткүләс]] һарһв.",
"watch": "Шинҗлх",
"watchthispage": "Эн халхиг шинҗлх",
"unwatch": "Шинҗлх биш",
- "watchlist-details": "$1 {{PLURAL:$1|халх|халхс|халхс}} ухалвр угаһар тана шиҗллһнә сеткүлд.",
- "wlshowlast": "Кенз $1 часд $2 өдрт $3 үзүлх",
+ "watchlist-details": "Тана оврхин седкүлд меткәнә халхас бус $1 халх.",
+ "wlshowlast": "Сүл $1 цагин $2 өдрин туршк үзүлх",
"watchlist-options": "Шинҗллһнә сеткүлин көгүд",
"watching": "Шинҗллһнә бүтлклд немлһн...",
"unwatching": "Шинҗлһнә бүрткләс һарһлһн...",
@@ -650,7 +646,6 @@
"deletecomment": "Учр:",
"deleteotherreason": "Талдан аль дәкәд учр:",
"deletereasonotherlist": "Талдан учр",
- "rollback_short": "Хәрүллһн",
"rollbacklink": "хәрүлх",
"protectlogpage": "Харсллһна сеткүл",
"protectedarticle": "«[[$1]]» халхиг харсв",
@@ -665,7 +660,7 @@
"protect-default": "Цуг демнчнрд зөвән өгҗ",
"protect-fallback": "$1 зөв кергтә",
"protect-level-autoconfirmed": "Шин болн нер уга демнчнрас харсх",
- "protect-level-sysop": "Дарһас һанцхн",
+ "protect-level-sysop": "Һанц закрачт зөвшәл",
"protect-summary-cascade": "каскад",
"protect-expiring": "$1 (UTC) гидг цагт өңгрнә",
"protect-cascade": "Халхсиг эн халхд дотр харсх (каскад)",
@@ -679,10 +674,10 @@
"namespace": "Нернә у:",
"invert": "Зөрү суңһлт",
"blanknamespace": "(Һол)",
- "contributions": "Демнчна өгүллһн",
+ "contributions": "Демнәчнә тәвц",
"contributions-title": "$1 демнчна тус",
- "mycontris": "Мини демнлһн",
- "contribsub2": "$1 төлә ($2)",
+ "mycontris": "Тәвц",
+ "contribsub2": "{{GENDER:$3|$1}} тәвц ($2)",
"uctop": "(отхн)",
"month": "Эн сарас (болн эртәр):",
"year": "Эн җиләс (болн эртәр):",
@@ -835,7 +830,6 @@
"exif-gpsaltitude": "Теңгсәс өндр",
"exif-orientation-1": "Кирин",
"exif-orientation-2": "Теңгрин хормаһар туссн",
- "watchlistall2": "цуг",
"namespacesall": "цуг",
"monthsall": "цуг",
"confirm_purge_button": "Тиим",
diff --git a/languages/i18n/xh.json b/languages/i18n/xh.json
index c4cac2a2..4e059ae2 100644
--- a/languages/i18n/xh.json
+++ b/languages/i18n/xh.json
@@ -1,106 +1,105 @@
{
- "@metadata": {
- "authors": [
- "Jcwf",
- "Jose77"
- ]
- },
- "sunday": "Icawe",
- "monday": "UMvulo",
- "tuesday": "ULwesibini",
- "wednesday": "ULwesithathu",
- "thursday": "ULwesine",
- "friday": "ULwesihlanu",
- "saturday": "UMgqibelo",
- "january": "EyoMqungu",
- "february": "EyoMdumba",
- "march": "EyoKwindla",
- "april": "EkaTshazimpuzi",
- "june": "EyeSilimela",
- "july": "EyeKhala",
- "august": "EyeThupha",
- "september": "Eyo Msintsi",
- "october": "Eye Dwarha",
- "november": "Eye Nkanga",
- "december": "Eyo Mnga",
- "january-gen": "EyoMqungu",
- "february-gen": "Eyo Mdumba",
- "march-gen": "Eyo Kwindla",
- "april-gen": "Ekatshazimpuzi",
- "may-gen": "EkaCanzibe",
- "june-gen": "Eyesilimela",
- "july-gen": "Eye Khala",
- "august-gen": "Eye Thupha",
- "september-gen": "Eyo Msintsi",
- "october-gen": "Eye Dwarha",
- "november-gen": "Eye Nkanga",
- "december-gen": "Eyo Mnga",
- "may": "EkaCanzibe",
- "article": "Inqaku",
- "mypage": "Inqaku yam",
- "mytalk": "Inthetho yam",
- "vector-view-edit": "Tshintsha",
- "help": "Uncedo",
- "search": "Khangela",
- "searchbutton": "Khangela",
- "go": "Hamba",
- "searcharticle": "Hamba",
- "edit": "Tshintsha",
- "delete": "Cima",
- "protect": "Khusela",
- "talkpagelinktext": "Inthetho",
- "talk": "Ingxoxo",
- "otherlanguages": "Kwezinye Ilwimi",
- "currentevents": "Imisebenzi Eyenzekayo",
- "edithelp": "Uncedo ngoTshintsho",
- "mainpage": "Iphepha Elingundoqo",
- "mainpage-description": "Iphepha Elingundoqo",
- "youhavenewmessagesmulti": "Unemiyalezo emitsha ku $1",
- "editsection": "tshintsha",
- "editold": "tshintsha",
- "editlink": "tshintsha",
- "nstab-main": "Inqaba",
- "viewsource": "Jonga i Source",
- "yourname": "Igama lelungu:",
- "yourpassword": "Igama elifihlakeleyo lelungu:",
- "yourpasswordagain": "Faka kwakhona igama elifihlakeleyo:",
- "remembermypassword": "Khumbula igama lam elifihlakeleyo kule Khompyutha (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "createaccount": "Vula I Account",
- "loginlanguagelabel": "Ulwimi: $1",
- "summary": "Isishwankathelo:",
- "minoredit": "Lutshitsho oluncinci olu",
- "watchthis": "Bukela le Page",
- "savearticle": "Gcina eliphepha",
- "showpreview": "Bonisa Utshintsho",
- "showdiff": "Gcina Utshitshi",
- "mypreferences": "Ezithandwa ndim",
- "searchresultshead": "Khangela",
- "username": "Igama lelungu:",
- "recentchanges": "Utshitsho olusandokwenziwa",
- "minoreditletter": "nc",
- "recentchangeslinked": "Utsitsho olufana nolu",
- "recentchangeslinked-feed": "Utsitsho olufana nolu",
- "recentchangeslinked-toolbox": "Utsitsho olufana nolu",
- "upload": "Faka Ifile",
- "filedesc": "Isishwankathelo",
- "watchthisupload": "Bukela le Page",
- "move": "Dlulisa",
- "movethispage": "Dlulisa eliphepha",
- "allinnamespace": "Amanqaku onke ($1 namespace)",
- "allpagessubmit": "Hamba",
- "watchlist": "Endizibukeleyo",
- "mywatchlist": "Endizibukeleyo",
- "watch": "Bukela",
- "watchthispage": "Bukela le Page",
- "prot_1movedto2": "[[$1]] lidluliselwe [[$2]]",
- "contributions": "Imisebenzi ye lungu",
- "mycontris": "Inkxaso yam",
- "sp-contributions-talk": "Inthetho",
- "sp-contributions-submit": "Khangela",
- "ipblocklist-submit": "Khangela",
- "move-page-legend": "Dlulisa eliphepha",
- "movepagebtn": "DLulisa eliphepha",
- "movereason": "Isizathu",
- "ilsubmit": "Khangela",
- "specialpages": "Amaphepha Abalulekileyo"
+ "@metadata": {
+ "authors": [
+ "Jcwf",
+ "Jose77"
+ ]
+ },
+ "sunday": "Icawe",
+ "monday": "UMvulo",
+ "tuesday": "ULwesibini",
+ "wednesday": "ULwesithathu",
+ "thursday": "ULwesine",
+ "friday": "ULwesihlanu",
+ "saturday": "UMgqibelo",
+ "january": "EyoMqungu",
+ "february": "EyoMdumba",
+ "march": "EyoKwindla",
+ "april": "EkaTshazimpuzi",
+ "june": "EyeSilimela",
+ "july": "EyeKhala",
+ "august": "EyeThupha",
+ "september": "Eyo Msintsi",
+ "october": "Eye Dwarha",
+ "november": "Eye Nkanga",
+ "december": "Eyo Mnga",
+ "january-gen": "EyoMqungu",
+ "february-gen": "Eyo Mdumba",
+ "march-gen": "Eyo Kwindla",
+ "april-gen": "Ekatshazimpuzi",
+ "may-gen": "EkaCanzibe",
+ "june-gen": "Eyesilimela",
+ "july-gen": "Eye Khala",
+ "august-gen": "Eye Thupha",
+ "september-gen": "Eyo Msintsi",
+ "october-gen": "Eye Dwarha",
+ "november-gen": "Eye Nkanga",
+ "december-gen": "Eyo Mnga",
+ "may": "EkaCanzibe",
+ "article": "Inqaku",
+ "mypage": "Inqaku yam",
+ "mytalk": "Inthetho yam",
+ "help": "Uncedo",
+ "search": "Khangela",
+ "searchbutton": "Khangela",
+ "go": "Hamba",
+ "searcharticle": "Hamba",
+ "edit": "Tshintsha",
+ "delete": "Cima",
+ "protect": "Khusela",
+ "talkpagelinktext": "Inthetho",
+ "talk": "Ingxoxo",
+ "otherlanguages": "Kwezinye Ilwimi",
+ "currentevents": "Imisebenzi Eyenzekayo",
+ "edithelp": "Uncedo ngoTshintsho",
+ "mainpage": "Iphepha Elingundoqo",
+ "mainpage-description": "Iphepha Elingundoqo",
+ "youhavenewmessagesmulti": "Unemiyalezo emitsha ku $1",
+ "editsection": "tshintsha",
+ "editold": "tshintsha",
+ "editlink": "tshintsha",
+ "nstab-main": "Inqaba",
+ "viewsource": "Jonga i Source",
+ "yourname": "Igama lelungu:",
+ "yourpassword": "Igama elifihlakeleyo lelungu:",
+ "yourpasswordagain": "Faka kwakhona igama elifihlakeleyo:",
+ "remembermypassword": "Khumbula igama lam elifihlakeleyo kule Khompyutha (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "createaccount": "Vula I Account",
+ "loginlanguagelabel": "Ulwimi: $1",
+ "summary": "Isishwankathelo:",
+ "minoredit": "Lutshitsho oluncinci olu",
+ "watchthis": "Bukela le Page",
+ "savearticle": "Gcina eliphepha",
+ "showpreview": "Bonisa Utshintsho",
+ "showdiff": "Gcina Utshitshi",
+ "mypreferences": "Ezithandwa ndim",
+ "searchresultshead": "Khangela",
+ "username": "Igama lelungu:",
+ "recentchanges": "Utshitsho olusandokwenziwa",
+ "minoreditletter": "nc",
+ "recentchangeslinked": "Utsitsho olufana nolu",
+ "recentchangeslinked-feed": "Utsitsho olufana nolu",
+ "recentchangeslinked-toolbox": "Utsitsho olufana nolu",
+ "upload": "Faka Ifile",
+ "filedesc": "Isishwankathelo",
+ "watchthisupload": "Bukela le Page",
+ "move": "Dlulisa",
+ "movethispage": "Dlulisa eliphepha",
+ "allinnamespace": "Amanqaku onke ($1 namespace)",
+ "allpagessubmit": "Hamba",
+ "watchlist": "Endizibukeleyo",
+ "mywatchlist": "Endizibukeleyo",
+ "watch": "Bukela",
+ "watchthispage": "Bukela le Page",
+ "prot_1movedto2": "[[$1]] lidluliselwe [[$2]]",
+ "contributions": "Imisebenzi ye lungu",
+ "mycontris": "Inkxaso yam",
+ "sp-contributions-talk": "Inthetho",
+ "sp-contributions-submit": "Khangela",
+ "ipblocklist-submit": "Khangela",
+ "move-page-legend": "Dlulisa eliphepha",
+ "movepagebtn": "DLulisa eliphepha",
+ "movereason": "Isizathu",
+ "ilsubmit": "Khangela",
+ "specialpages": "Amaphepha Abalulekileyo"
}
diff --git a/languages/i18n/xmf.json b/languages/i18n/xmf.json
index c71079f5..6b95e782 100644
--- a/languages/i18n/xmf.json
+++ b/languages/i18n/xmf.json
@@ -320,7 +320,6 @@
"search-interwiki-more": "(უმოს)",
"searchrelated": "მათანგეფ",
"searchall": "არძო",
- "showingresultsheader": "{{PLURAL:$5|მოღალუ '''$1''' '''$3'''-შე|მოღალუეფ '''$1 - $2''' '''$3'''-შე}} '''$4'''-შო",
"search-nonefound": "თქვანი მოგორაფილიშ მუთუნნერ მანგი მოღალუქ ვეძირჷ.",
"powersearch-legend": "გოძინელ გორუა",
"powersearch-ns": "დოგორ ჯოხოეფიშ ოფირჩას:",
@@ -423,7 +422,6 @@
"pager-older-n": "{{PLURAL:$1|უმოს ჯვეში 1|უმოს ჯვეში $1}}",
"booksources": "წინგიშ წყუეფ",
"booksources-search-legend": "წიგნიშ წყუშ გორუა",
- "booksources-go": "გინულა",
"specialloguserlabel": "მახვარებუ:",
"speciallogtitlelabel": "სათაურ:",
"log": "ჟურნალეფ",
@@ -449,7 +447,7 @@
"watchthispage": "თე ხასილაშ კონტროლ",
"unwatch": "კონტროლიშ გოუქვაფა",
"watchlist-details": "{{PLURAL:$1|$1 ხასილა|$1 ხასილეფ}} რე თქვან კონტროლიშ ერკებულს, სხუნუაშ ხასილეფიშ მეუკოროცხუო.",
- "wlshowlast": "ეკონია $1 საათიშ $2 დღაშ $3 ძირაფა",
+ "wlshowlast": "ეკონია $1 საათიშ $2 დღაშ ძირაფა",
"watchlist-options": "კონტროლიშ ერკებულიშ ოფციეფ",
"watching": "კონტროლირებად...",
"unwatching": "კონტროლ მონწყუმილ რე ...-შა",
@@ -629,7 +627,6 @@
"metadata-fields": "ათე მესიჯის შინაფილ მეტა მოჩამილოფეფიშ ოფირჩეფ ეკოროცხილ იჸი ნახანტიშ ხასილაშ დისფლეის მუჟამსით მეტა მოჩამილოფეფიშ ერკებულ იჸი გითოფაჩილინ \nშხვეფ, მუჭოთ წესინ, ტყობინაფილ იყ’ი.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "სიგანე",
"exif-imagelength": "სიმაღალე",
- "watchlistall2": "არძა",
"namespacesall": "არძა",
"monthsall": "არძა",
"watchlisttools-view": "მერცხილ თირაფეფიშ ძირაფა",
diff --git a/languages/i18n/yi.json b/languages/i18n/yi.json
index 33e35266..fa623c1c 100644
--- a/languages/i18n/yi.json
+++ b/languages/i18n/yi.json
@@ -11,7 +11,9 @@
"ווארצגאנג",
"לערי ריינהארט",
"פוילישער",
- "아라"
+ "아라",
+ "Har-wradim",
+ "Amire80"
]
},
"tog-underline": "שטרייכט אונטער לינקען",
@@ -20,9 +22,9 @@
"tog-newpageshidepatrolled": "באַהאַלטן פאַטראלירטע בלעטער פון דער ליסטע פון נײַע בלעטער",
"tog-extendwatchlist": "פארברייטערן די אויפפאסן ליסטע צו צייגן אלע פאסנדע ענדערונגען (אנדערשט: בלויז די לעצטע ענדערונג פון יעדן בלאט)",
"tog-usenewrc": "גרופירן ענדערונגען לויטן בלאט אין \"לעצטע ענדערונגען\" און אויפֿפאסן ליסטע",
- "tog-numberheadings": "נומערירן קעפלעך אויטאמאטיש",
+ "tog-numberheadings": "נומערירן קעפּלעך אויטאָמאַטיש",
"tog-showtoolbar": "ווײַזן רעדאקטירן געצייג-שטאנג",
- "tog-editondblclick": "רעדאקטירן בלעטער דורך טאפל קליק",
+ "tog-editondblclick": "רעדאַקטירן בלעטער דורך טאָפּל־קליק",
"tog-editsectiononrightclick": "באמעגלעכן אפטייל רעדאקטירן דורכן רעכטס־קליקן אויף אפטייל קעפלעך",
"tog-watchcreations": "צולייגן בלעטער וואס איך באשאף און טעקעס וואס איך לאד ארויף צו מיין אכטונג ליסטע",
"tog-watchdefault": "צולייגן בלעטער וואס איך רעדאקטיר צו מיין אכטונג ליסטע",
@@ -39,7 +41,7 @@
"tog-shownumberswatching": "ווייזן דעם נומער פון בלאט אויפֿפאסערס",
"tog-oldsig": "איצטיגער אונטערשריפֿט:",
"tog-fancysig": "באַהאַנדלן אונטערשריפט אַלס וויקיטעקסט (אָן אויטאמאטישן לינק)",
- "tog-uselivepreview": "באניצן זיך מיט גיכער פאראויסדיגער ווייזונג (עקספערימענטאל)",
+ "tog-uselivepreview": "באניצן זיך מיט גיכער פאראויסדיגער ווייזונג",
"tog-forceeditsummary": "ווארן מיך ווען איך לייג א ליידיג קורץ ווארט ענדערונג",
"tog-watchlisthideown": "באהאלט מיינע ענדערונגען פון דער אויפפאסן ליסטע",
"tog-watchlisthidebots": "באהאלט באט עדיטס פון אויפפאסן ליסטע",
@@ -79,7 +81,7 @@
"february": "פֿעברואַר",
"march": "מערץ",
"april": "אַפּריל",
- "may_long": "מײַ",
+ "may_long": "מאַי",
"june": "יוני",
"july": "יולי",
"august": "אויגוסט",
@@ -103,7 +105,7 @@
"feb": "פֿעב׳",
"mar": "מער׳",
"apr": "אַפּר׳",
- "may": "מײַ",
+ "may": "מאַי",
"jun": "יונ׳",
"jul": "יול׳",
"aug": "אויג׳",
@@ -147,7 +149,7 @@
"cancel": "אַנולירן",
"moredotdotdot": "נאך…",
"morenotlisted": "די ליסטע איז נישט פֿולשטענדיק.",
- "mypage": "מײַן בלאט",
+ "mypage": "מיין בלאַט",
"mytalk": "שמועס",
"anontalk": "דאס רעדן פון דעם IP",
"navigation": "נאַוויגאַציע",
@@ -172,7 +174,7 @@
"go": "גיין",
"searcharticle": "גיין",
"history": "בלאט היסטאריע",
- "history_short": "היסטאריע",
+ "history_short": "היסטאָריע",
"updatedmarker": "דערהיינטיגט זינט מיין לעצטע וויזיט",
"printableversion": "דרוק ווערסיע",
"permalink": "שטענדיגער לינק",
@@ -215,6 +217,7 @@
"otherlanguages": "אין אַנדערע שפראַכן",
"redirectedfrom": "(אַריבערגעפֿירט פון $1)",
"redirectpagesub": "ווייטערפירן בלאט",
+ "redirectto": "ווײַטערפירן צו:",
"lastmodifiedat": "דער בלאט איז לעצט געווארן מאדיפיצירט $2, $1.",
"viewcount": "דער בלאט איז געווארן געליינט {{PLURAL:$1|איין מאל|$1 מאל}}.",
"protectedpage": "באשיצטער בלאט",
@@ -226,6 +229,8 @@
"pool-timeout": "אַריבער דער צײַט וואַרטן פֿאר דער שליסונג",
"pool-queuefull": "ריי איז פֿול",
"pool-errorunknown": "אומבאַקאַנטער פֿעלער",
+ "pool-servererror": "נישט פאראן דער פול־צאל דינסט ($1).",
+ "poolcounter-usage-error": "באניץ־פעלער: $1",
"aboutsite": "וועגן {{SITENAME}}",
"aboutpage": "Project:וועגן",
"copyright": "דער אינהאַלט איז פֿאַראַן אונטער $1 ווען נישט באוויזן אנדערש.",
@@ -235,6 +240,7 @@
"disclaimers": "געזעצליכע אויפֿקלערונג",
"disclaimerpage": "Project:קלארשטעלונג",
"edithelp": "הילף וויאזוי צו ענדערן",
+ "helppage-top-gethelp": "הילף",
"mainpage": "הויפט זייט",
"mainpage-description": "הויפט זייט",
"policy-url": "Project:פאליסי",
@@ -299,10 +305,10 @@
"nosuchactiontext": "די אַקציע ספעציפֿירט דורך דעם URL איז נישט גילטיג.\nאיר האט מעגלעך אַרײַנגעקלאַפט פֿאַלש, אדער נאָכגעפֿאלגט א פֿאַלשן לינק.\nס'קען אויך זײַן א באַג אין דעם ווייכוואַרג געניצט אין {{SITENAME}}.",
"nosuchspecialpage": "נישטא אזא ספעציעלער בלאט",
"nospecialpagetext": "<strong>איר האט געבעטן אן אומגילטיגן באַזונדערבלאט.</strong>\n\nמ'קען טרעפֿן א ליסטע פון אלע באַזונדערבלעטער בײַ [[Special:SpecialPages|{{int:specialpages}}]].",
- "error": "פעלער",
+ "error": "פֿעלער",
"databaseerror": "דאטנבאזע פעלער",
- "databaseerror-text": "ס'האט פאסירט א דאטנבאזע פֿראגע פֿעלער.\nקען אפשר זיין א באַג אינעם ווייכווארג.",
- "databaseerror-textcl": "ס'האט פאסירט א דאטנבאזע פֿראגע פֿעלער.",
+ "databaseerror-text": "ס׳האָט פּאַסירט אַ דאַטנבאַזע־אָנפֿראַגע פֿעלער.\nס׳קען אפשר זיין אַ סימן פון אַ באַג אינעם ווייכוואַרג.",
+ "databaseerror-textcl": "ס׳האָט פּאַסירט אַ דאַטנבאַזע־אָנפראַגע פֿעלער.",
"databaseerror-query": "פֿראגע: $1",
"databaseerror-function": "פֿונקציע: $1",
"databaseerror-error": "פֿעלער: $1",
@@ -314,12 +320,15 @@
"missingarticle-rev": "(רעוויזיע נומער: $1)",
"missingarticle-diff": "(אונטערשייד: $1, $2)",
"readonly_lag": "די דאטעבאזע איז געווארן אויטאמטיש אפגעשפארט כדי צו דערמעגליכן פאר די אונטער דאטע באזע סערווערס צו ווערן דערהיינטיגט פון דעם אויבער סערווער.",
- "internalerror": "אינערווייניגער פֿעלער",
- "internalerror_info": "אינערווייניגער פֿעלער: $1",
+ "internalerror": "אינערלעכער פעלער",
+ "internalerror_info": "אינערלעכער פֿעלער: $1",
+ "internalerror-fatal-exception": "פאטאלער אויסנאם־פעלער פון טיפ \"$1\"",
"filecopyerror": "האט נישט געקענט קאפירן \"$1\" צו \"$2\".",
"filerenameerror": "נאמען טויש פֿאַר \"$1\" צו \"$2\" איז נישט אדורכגעגאנגען.",
"filedeleteerror": "אויסמעקן \"$1\" נישט דורך.",
"directorycreateerror": "קען נישט באשאפן דירעקטארי \"$1\".",
+ "directoryreadonlyerror": "דירעקטאריע \"$1\" איז נאר לייענבאר.",
+ "directorynotreadableerror": "דירעקטאריע \"$1\" איז נישט לייענבאר.",
"filenotfound": "קען נישט געפינען טעקע \"$1\".",
"unexpected": "אומערווארטערטער ווערד: \"$1\"=\"$2\"",
"formerror": "פֿעלער: קען נישט שיקן פֿארעם.",
@@ -334,14 +343,15 @@
"perfcachedts": "די פאלגנדע דאטן זענען פונעם זאַפאַס, וואס איז לעצט געווארן דערהײַנטיגט $1. מאקסימום {{PLURAL:$4|איין רעזולטאט איז|$4 רעזולטאטן זענען}} פאראן אין זאפאס",
"querypage-no-updates": "דערהיינטיגן דעם בלאט איז איצט אומערמעגלעכט.\nדאטן דא וועט נישט דערווייל ווערן באנייט.",
"viewsource": "ווײַזן מקור",
- "viewsource-title": "באקוקן מקור פֿון $1",
+ "viewsource-title": "באַקוקן דעם מקור פון $1",
"actionthrottled": "די אַקציע איז באַגרענעצט",
"actionthrottledtext": "אלס מאָסמיטל קעגן ספאַם, זענט איר באַגרענעצט פֿון דורכפֿירן די פעולה צופֿיל מאל אין א קורצער צײַט. ביטע פרובירט נאכאַמאָל אין א פאר מינוט.",
"protectedpagetext": "דער בלאט איז געשיצט צו פארמיידן רעדאקטירן און אנדערע פעולות.",
"viewsourcetext": "איר קענט זען און קאפירן דעם מקור פון דעם בלאַט:",
"viewyourtext": "איר קענט באקוקן דעם מקור פון '''אייערע רעדאקטירונגען''' צו דעם בלאט:",
"protectedinterface": "דער בלאַט שטעלט צו באניצער־אויבערפלאך טעקסט פֿאַרן װײכװאַרג אויף דער דאזיקער וויקי, און איז פֿאַרשפּאַרט כּדי צו פֿאַרמײַדן װאַנדאַליזם.\nכדי צולייגן אדער ענדערן איבערזעצונגען פאר אלע וויקיס, זייט אזוי גוט ניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזאציע פראיעקט.",
- "editinginterface": "'''ווארענונג:''' איר באַאַרבעט א בלאט וואס איז געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג. ענדערונגען אין דעם בלאַט וועלן טוישן דאס אויסזען פון די סיסטעם מודעות פאר אלע אנדערע באניצער אויף דער וויקי.\nכדי צולייגן אדער ענדערן איבערזעצונגען, באַטראַכטס באַניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאַליזאציע פראיעקט.",
+ "editinginterface": "<strong>ווארענונג:</strong> איר באַאַרבעט א בלאט וואס ווערט געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג.\nענדערונגען אין דעם בלאַט וועלן טוישן דאס אויסזען פון די סיסטעם מודעות פאר אנדערע באניצער אויף דער וויקי.",
+ "translateinterface": "כדי צו צולייגן איבערזעצונגען פאר אלע וויקיס, זײַט אזוי גוט און ניצט [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזירונג פראיעקט.",
"cascadeprotected": "דער בלאט איז פארשפארט צום ענדערן וויבאלד ער איז איינגעשלאסן אין איינע פון די פאלגנדע {{PLURAL:$1|בלאט, וואס איז|בלעטער, וואס זענען}} באשיצט מיט דער קאסקייד אפציע:\n\n$2",
"namespaceprotected": "איר זענט נישט ערלויבט צו רעדאקטירן בלעטער אינעם '''$1''' נאמענטייל.",
"customcssprotected": "איר האט נישט רשות צו רעדאַקטירן דעם CSS בלאַט, ווײַל ער אַנטהאַלט די פערזענלעכע באַשטימונגען פון אַן אַנדער באַניצער.",
@@ -368,19 +378,19 @@
"userlogin-yourname": "באַניצער נאָמען",
"userlogin-yourname-ph": "גיט אריין אייער באניצער נאמען",
"createacct-another-username-ph": "אריינגעבן באניצער נאמען",
- "yourpassword": "פאסווארט",
+ "yourpassword": "פּאַסװאָרט",
"userlogin-yourpassword": "פאַסווארט",
"userlogin-yourpassword-ph": "אַרײַנגעבן אײַער פאַסווארט",
"createacct-yourpassword-ph": "אַרײַנגעבן א פאַסווארט",
"yourpasswordagain": "ווידער אריינקלאפן פאסווארט",
"createacct-yourpasswordagain": "באשטעטיקן פאסווארט",
"createacct-yourpasswordagain-ph": "ארײַנגעבן פאסווארט נאכאמאל",
- "remembermypassword": "געדיינק מײַן אַרײַנלאגירן אויף דעם קאמפיוטער (ביז $1 {{PLURAL:$1|טאָג|טעג}})",
+ "remembermypassword": "געדענקען מיין אַריינלאָגירן אין דעם דאָזיקן בראַוזער (ביז $1 {{PLURAL:$1|טאָג|טעג}})",
"userlogin-remembermypassword": "לאז מיך בלײַבן ארײַנלאגירט",
"userlogin-signwithsecure": "ניצן זיכערן סארווער",
"yourdomainname": "אײַער געביט:",
"password-change-forbidden": "איר קען נישט ענדערן פאסווערטער אויף דער וויקי.",
- "externaldberror": "עס איז אדער פארגעקומען אן אויטענטיקאציע דאטנבאזע פעלער אדער איר זענט נישט ערמעגליכט צו דערהיינטיגן אייער דרויסנדיגע קאנטע.",
+ "externaldberror": "עס איז אדער פארגעקומען אן אויטענטיקאציע דאטנבאזע פֿעלער אדער איר זענט נישט ערמעגליכט צו דערהיינטיגן אייער דרויסנדיגע קאנטע.",
"login": "אַרײַנלאָגירן",
"nav-login-createaccount": "ארײַנלאָגירן / זיך אײַנשרײַבן",
"userlogin": "ארײַנלאָגירן / זיך אײַנשרײַבן",
@@ -398,6 +408,8 @@
"userlogin-resetlink": "פארגעסן אײַערע אַרײַנלאָגירן פרטים?",
"userlogin-resetpassword-link": "פֿאַרגעסן אײַער פאַסווארט?",
"userlogin-helplink2": "הילף מיט ארײַנלאגירן",
+ "userlogin-loggedin": "איר זענט שוין אריינלאגירט ווי {{GENDER:$1|$1}}.\nניצט די פארעם אונטן כדי אריינלאגירן ווי אן אנדער באניצער.",
+ "userlogin-createanother": "שאפֿן נאך א קאנטע",
"createacct-emailrequired": "בליצפּאָסט אַדרעס",
"createacct-emailoptional": "בליצפאסט אדרעס (אפציאנאל)",
"createacct-email-ph": "קלאַפט ארײַן אײַער בליצפּאָסט אַדרעס",
@@ -417,7 +429,7 @@
"createacct-benefit-body3": "לעצטיקע {{PLURAL:$1|בײַשטײַערער}}",
"badretype": "די פאסווערטער וואס איר האט אריינגעלייגט זענען נישט אייניג.",
"userexists": "דער באַניצער נאָמען איז שוין געניצט.\nביטע קלײַבט אױס אַן אַנדער נאָמען.",
- "loginerror": "לאגירן פֿעלער",
+ "loginerror": "פעלער ביים לאָגירן",
"createacct-error": "קאנטע שאפן פעלער",
"createaccounterror": "האט נישט געקענט שאַפֿן קאנטע: $1",
"nocookiesnew": "די באניצער קאנטע איז באשאפן, אבער איר זענט נישט אריינלאגירט.\n{{SITENAME}} ניצט קיכלעך אריינצולאגירן באניצער.\nאיר האט קיכלעך נישט-ערמעגלעכט.\nביטע ערמעגלעכט זיי, דאן טוט אריינלאגירן מיט אייערע נייע באניצער נאמען און פאסווארט.",
@@ -444,7 +456,7 @@
"blocked-mailpassword": "אייער איי פי אדרעס איז בלאקירט צו רעדאקטירן, דערוועגן זענט איר נישט ערלויבט צו באניצן מיטן פאסווארט ווידעראויפלעבונג פֿונקציע כדי צו פארמיידן סיסטעם קרומבאניץ.",
"eauthentsent": "א באשטעטיגונג ע-בריוו איז געשיקט געווארן צו דעם באשטימטן ע-פאסט אדרעס. איידער סיי וועלכע אנדערע ע-פאסט וועט ווערן געשיקט צו דער קאנטע, וועט איר דארפן פאלגן די אנווייזונגען אין דער מעלדונג כדי צו זיין זיכער אז די קאנטע איז טאקע אייערס.",
"throttled-mailpassword": "מ'האט שוין געשיקט א בליצבריוו צוריקצושטעלן דאס פאסווארט, אין {{PLURAL:$1|דער לעצטער שעה|די לעצטע $1 שעה'ן}}. כדי צו פארמײַדן שלעכט באניצן, נאר איין פאסווארט צוריקשטעלן בליצבריוו וועט געשיקט ווערן אין {{PLURAL:$1|א שעה |$1 שעה'ן}}.",
- "mailerror": "פֿעלער שיקנדיג פאסט: $1",
+ "mailerror": "פעלער ביים שיקן פּאָסט: $1",
"acct_creation_throttle_hit": "באַזוכער צו דער וויקי וואס באַניצן אייער IP אַדרעס האָבן שױן באַשאַפֿן {{PLURAL:$1|1 קאנטע|$1 קאנטעס}} במשך דעם לעצטן טאָג, דעם מאַקסימום וואָס מען ערלויבט אין דעם פעריאד.\n\nדערפֿאַר קענען באַזוכער וואס באַניצן דעם IP אַדרעס נישט מער שאַפֿן נײַע קאָנטעס דערווײַל.",
"emailauthenticated": "אייער ע-פאסט אדרעס איז באשטעטיגט געווארן אום $2, $3.",
"emailnotauthenticated": "אײַער ע-פאסט אדרעס איז נאכנישט באשטעטיגט. \nקיין ע-פאסט וועט נישט ווערן געשיקט פון קיין איינע פון די פאלגנדע אייגנקייטן.",
@@ -459,13 +471,14 @@
"createaccount-text": "עמעצער האט באשאפֿן א קאנטע פֿאר אייער ע-פאסט אדרעס אין {{SITENAME}} ($4) מיטן נאמען \"$2\" און פאסווארט \"$3\". איר דארפט אצינד איינלאגירן און ענדערן דאס פאסווארט.\n\nאיר קענט איגנארירן די מעלדונג, ווען די קאנטע איז באשאפֿן בטעות.",
"login-throttled": "איר האט געפרוווט צופֿיל מאל אריינלאגירן.\nזייט אזוי גוט און וואַרט $1 איידער איר פרוווט נאכאמאל.",
"login-abort-generic": "אײַער ארײַנלאגירונג איז נישט געווען דערפֿאלגרייך—אָפגעשטעלט",
+ "login-migrated-generic": "אײַער קאנטע איז געווארן מיגרירט, און אײַער באניצער־נאמען איז מער נישט פאראן אויף דער וויקי.",
"loginlanguagelabel": "שפראך: $1",
"suspicious-userlogout": " אײַער בקשה אַרויסלאָגירן זיך איז אפגעלייגט געווארן ווייַל אייגנטלעך איז זי געשיקט דורך אַ צעבראכענעם בלעטערער אָדער א פראקסי מיט א זאפאס.",
"createacct-another-realname-tip": "עכטער נאמען איז אפציאנאל.\nאויב איר וויילט אויס צוצושטעלן אים, וועט דאס גענוצט ווערן צו געבן אטריבוציע פאר זייער ארבעט.",
"pt-login": "אַרײַנלאגירן",
"pt-login-button": "אַרײַנלאָגירן",
"pt-createaccount": "שאַפֿן אַ קאנטע",
- "pt-userlogout": "אַרויסלאגירן",
+ "pt-userlogout": "אַרויסלאָגירן",
"php-mail-error-unknown": "אומבאַקאַנט טעות אין()mail פֿונקציע פֿון PHP.",
"user-mail-no-addy": "געפרוווט צו שיקן ע-פּאָסט אָן אַן ע-פּאָסט אַדרעס.",
"user-mail-no-body": "האט פרובירט צו שיקן א בליצבריוו וואס זיין אינהאלט איז ליידיק אדער גאר קורץ.",
@@ -549,14 +562,15 @@
"subject": "טעמע/קעפל:",
"minoredit": "דאס איז א מינערדיגע ענדערונג",
"watchthis": "טוט אױפֿפּאַסן דעם בלאט",
- "savearticle": "אױפֿהיטן בלאַט",
+ "savearticle": "אויפהיטן בלאַט",
"preview": "פֿאראויסקוק",
- "showpreview": "ווײַזן פֿאָרױסקוק",
+ "showpreview": "ווייזן פאָרױסקוק",
"showdiff": "ווײַז די ענדערונגען",
"blankarticle": "<strong>אזהרה:</strong> דער בלאט איר גייט שאפן איז ליידיק.\nטאמער איר וועט דריקן אויף \"{{int:savearticle}}\" נאכאמאל, וועט דער בלאט ווערן געשאפן אן קיין אינהאלט.",
"anoneditwarning": "<strong>ווארענונג:</strong> איר זענט נישט אריינלאגירט. אייער איי פי אדרעס וועט ווערן עפנטלעך זעבאר ווען איר פירט דורך ענדערונגען . אז איר <strong>[$1 לאגירט ארײַן]</strong> אדער <strong>[$2 שאפט א קאנטע]</strong>, וועלן אײַערע רעדאקטירונגען ווערן צוגעשריבן צו אײַער באניצער-נאמען, ווי אויך אנדערע טובות.",
"anonpreviewwarning": "''איר זענט נישט אַרײַנלאגירט. אויפֿהיטן וועט ארײַנשרײַבן אײַער IP אַדרעס אין דער רעדאַקטירונג היסטאריע פונעם בלאַט.''",
"missingsummary": "'''דערמאנונג:''' איר האט נישט אויסגעפילט דעם קורץ ווארט אויפקלערונג אויף אייער עדיט. אויב וועט איר דרוקן נאכאמאל אויף \"היט אפ דעם בלאט\", וועט אייער ענדערונג ווערן געהיטן אן דעם.",
+ "selfredirect": "<strong>ווארענונג:</strong> איר טוט ווײַטערפירן דעם בלאט צו זיך אליין.\nאיר העט אפשר ספעציפיצירט א פאלשן ווײַטערפירונג־ציל אדער איר רעדאקטירט דעם פאלשן בלאט.\nטאמער קליקט איר נאכאמאל \"{{int:savearticle}}\", וועט מען טאקע שאפן די ווײַטערפירונג.",
"missingcommenttext": "ביטע שטעלט אריין א אנמערקונג פון אונטן.",
"missingcommentheader": "'''דערמאַנונג:''' איר האט נישט אַרײַנגעשטעלט א טעמע/קעפל פאר דער אנמערקונג. אויב וועט איר דרוקן נאכאמאל אויפן \"{{int:savearticle}}\", וועט אייער ענדערונג ווערן אפגעהיטן אן דעם.",
"summary-preview": "סך-הכל פאראויסדיגע ווייזונג:",
@@ -593,7 +607,7 @@
"userinvalidcssjstitle": "'''ווארענונג:''' סאיז נישטא קיין סקין \"$1\". גדענקט אז קאסטעם .css און .js בלעטער נוצען לאוער קעיס טיטול, e.g. {{ns:user}}:Foo/vector.css ווי אנדערשט צו {{ns:user}}:Foo/Vector.css.",
"updated": "(דערהיינטיגט)",
"note": "'''באמערקונג:'''",
- "previewnote": "'''געדענקט אז דאס איז נאָר אין אַ פֿאָרויסיקע ווייזונג.'''\nאייערע ענדערונגען זענען נאָך נישט געהיט!",
+ "previewnote": "'''געדענקט אַז דאָס איז נאָר אַ פאָרויסקוק.'''\nאייערע ענדערונגען זענען נאָך נישט געהיט!",
"continue-editing": "אריבער צום רעדאקטירן פֿעלד",
"previewconflict": "די פֿאראויסיגע ווייזונג רעפלעקטירט דעם טעקסט און דער אויבערשטע טעקסט ענדערונג אָפטיילונג וויאזוי דאס וועט אויסזען אויב וועט איר דאס אָפהיטן.",
"session_fail_preview": "'''אנטשולדיגט! מען האט נישט געקענט פראצעסירן אייער ענדערונג צוליב א פארלוסט פון סעסיע דאטע. ביטע פרובירט נאכאמאל. אויב ס'ארבעט נאך אלס ניט, פרובירט [[Special:UserLogout|ארויסלאגירן]] און זיך צוריק אריינלאגירן.",
@@ -616,7 +630,7 @@
"longpageerror": "'''פעלער: דער טעקסט וואס איר האט ארײַנגעשטעלט איז לאנג {{PLURAL:$1|איין קילאבייט|$1 קילאבייטן}}, וואס איז לענגער פון דעם מאקסימום פון {{PLURAL:$2|איין קילאבייט|$2 קילאבייטן}}.\nער קען נישט ווערן אפגעהיטן.'''",
"readonlywarning": "'''ווארענונג: די דאטנבאזע איז געווארן פארשלאסן פאר אויפהאלטונג, ממילא וועט איר נישט קענען אפהיטן אייערע ענדערונגען אצינד. '''\nאיר קענט קאפירן און ארײַנלייגן דעם טעקסט אריין צו א טעקסט טעקע און דאס דארטן אפהיטן אויף שפעטער.\n\nדער אדמיניסטראטאר וואס האט זי פארשלאסן האט מסביר געווען אזוי: $1",
"protectedpagewarning": "'''ווארענונג: דער בלאט איז געווארן פארשפארט אז בלויז באניצערס מיט סיסאפ פריווילעגיעס קענען אים ענדערן.'''\nדי פארגאנגענע לאגבוך באשרײַבונג ווערט געוויזן דא:",
- "semiprotectedpagewarning": "'''באמערקונג:''' דער דאזיגער בלאַט איז פֿאַרשפאַרט אז בלויז איינגעשריבענע באניצערס קענען אים ענדערן.\nדי פֿאַרגאַנגענע לאגבוך באשרײַבונג ווערט געוויזן דאָ:",
+ "semiprotectedpagewarning": "'''באמערקונג:''' דער דאָזיקער בלאַט איז פאַרשפּאַרט, אַזוי אַז בלויז איינגעשריבענע באַניצער קענען אים ענדערן.\nדאָס פאַרגאַנגענע לאָגבוך באַשרייבונג ווערט געוויזן דאָ:",
"cascadeprotectedwarning": "'''ווארענונג:''' דער בלאט איז פארשפארט אז בלויז סיסאפן קענען אים ענדערן, וויבאלד ער איז איינגעשלאסן אין {{PLURAL:$1| דעם פאלגנדן בלאט, וואס איז|די פאלגנדע בלעטער, וואס זענען}} קאסקאד באשיצט:",
"titleprotectedwarning": "'''אזהרה: דער בלאט איז פֿארשפאַרט טא דארף מען [[Special:ListGroupRights|ספעציפֿישע רעכטן]] צו שאפֿן אים.'''\nדי פֿאַרגאַנגענע לאגבוך באשרײַבונג ווערט געוויזן דאָ:",
"templatesused": "{{PLURAL:$1|מוסטער|מוסטערן}} באנוצט אויף דעם בלאט:",
@@ -630,7 +644,7 @@
"nocreate-loggedin": "איר זענט נישט ערלויבט צו שאַפֿן נײַע בלעטער.",
"sectioneditnotsupported-title": "רעדאקטירן אפטיילונגען נישט געשטיצט.",
"sectioneditnotsupported-text": "רעדאַקטירן אָפטיילונגען נישט געשטיצט אויף דעם בלאַט",
- "permissionserrors": "דערלויבענישן פֿעלער",
+ "permissionserrors": "דערלויבעניש פֿעלער",
"permissionserrorstext": "איר זענט נישט ערלויבט צו טון דאס, פֿאַר {{PLURAL:$1|דער פֿאלגנדער סיבה|די פֿאלגנדע סיבות}}:",
"permissionserrorstext-withaction": "איר זענט נישט ערלויבט צו $2, וועגן {{PLURAL:$1|דער פֿאלגנדער סיבה| די פֿאלגנדע סיבות}}:",
"recreate-moveddeleted-warn": "'''ווארענונג: איר שאפט א נייעם בלאט וואס איז שוין איינמאל געווארן אויסגעמעקט.'''\n\nאיר זאלט איבערטראכטן צי עס פאַסט רעדאַקטירן דעם בלאַט ווײַטער.\nדי אויסמעקן און באַוועגן לאגביכער ווערן געוויזן דא:",
@@ -655,6 +669,10 @@
"content-model-text": "פשוטער טעקסט",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "ליידיגער אביעקט",
+ "content-json-empty-array": "ליידיגער אריי",
+ "duplicate-args-category": "בלעטער וואס ניצן געטאפלטע ארגומענטן אין מוסטער רופן",
+ "duplicate-args-category-desc": "דער בלאט אנטהאלט מוסטער־אויפרופן וואס ניצן דופליקאטן פון ארגומענטן, ווי למשל <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "'''אזהרה:''' דער בלאט אנטהאלט צופיל טייערע פארזירער רופן.\n\nער דארף האבן ווינציגער פון $2 {{PLURAL:$2|רוף|רופן}}, אבער אצינד {{PLURAL:$1|איז דא $1 רוף|זענען דא $1 רופן}}.",
"expensive-parserfunction-category": "בלעטער מיט צופֿיל טייערע פאַרזער פֿונקציאן רופֿן",
"post-expand-template-inclusion-warning": "'''אכטונג:''' איינגעשלאסענע מוסטערן אין דעם בלאט זענען צו גרויס.\nטייל מוסטערן וועלן נישט ווערן איינגעשלאסן.",
@@ -708,7 +726,7 @@
"history-feed-empty": "דער געבעטענער בלאט עקזיסטירט נישט.\nעס איז מעגליך אויסגעמעקט געווארן פון דער וויקי, אדער דער נאמען געטוישט.\nפרובירט [[Special:Search|צו זיכן אין וויקי]] נאך רעלאווענטע נייע בלעטער.",
"rev-deleted-comment": "(קורץ־ווארט אראָפגענומען)",
"rev-deleted-user": "(באנוצער נאמען אראפגענומען)",
- "rev-deleted-event": "(לאגירן אקציע אראפגענומען)",
+ "rev-deleted-event": "(לאגירן פרטים אראפגענומען)",
"rev-deleted-user-contribs": "[באַניצער נאָמען אָדער IP אַדרעס אראפגענומען - רעדאַקטירונג פֿאַרבאָרגן פֿון בייַשטייַערונגען]",
"rev-deleted-text-permission": "די בלאט רעוויזיע איז געווארן '''אויסגעמעקט '''.\nעס איז מעגלעך דא נאך פרטים אין דעם\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאג].",
"rev-suppressed-text-permission": "די בלאט רעוויזיע איז געווארן <strong>אונטערדריקט</strong>. מען קען געפינען נאך פרטים אין דעם [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} אונטערדריקן לאגבוך].",
@@ -742,7 +760,7 @@
"revdelete-legend": "שטעלט ווייזונג באגרענעצונגען",
"revdelete-hide-text": "ווערסיע טעקסט",
"revdelete-hide-image": "באהאלט טעקע אינהאלט",
- "revdelete-hide-name": "באהאלט אקציע און ציל",
+ "revdelete-hide-name": "באהאלטן ציל און פאראמעטערס",
"revdelete-hide-comment": "רעדאקטירונג רעזומע",
"revdelete-hide-user": "רעדאַקטאר'ס באניצער-נאמען/IP-אַדרעס",
"revdelete-hide-restricted": "באהאלט אינפארמאציע אויך פון אדמיניסטראטורן פונקט ווי פשוטע באנוצער",
@@ -760,10 +778,10 @@
"revdel-restore": "טויש די זעבארקייט",
"pagehist": "בלאט היסטאריע",
"deletedhist": "אויסגעמעקטע ווערסיעס",
- "revdelete-hide-current": "פֿעלער בײַם באַהאַלטן דעם איינהייט פֿון $2, $1: דאָס איז די לויפֿיגע ווערסיע.\nמען קען זי נישט פֿאַרבאָרגן.",
+ "revdelete-hide-current": "פעלער ביים באַהאַלטן דעם איינס פון $2, $1: דאָס איז די לויפיקע ווערסיע.\nזי קען נישט באַהאַלטן ווערן.",
"revdelete-show-no-access": "פֿעלער בײַם ווייַזן דעם איינהייט פֿון $2 , $1 : דער איינהייט איז אָנגעצייכנט געווארן \"באַשרענקט\".\nאיר האט נישט קיין צוטריט צו אים.",
"revdelete-modify-no-access": "פֿעלער בײַם מאדיפֿיצירן דעם איינהייט פֿון $2 , $1 : דער איינהייט איז אָנגעצייכנט געווארן \"באַשרענקט\".\nאיר האט נישט קיין צוטריט צו אים.",
- "revdelete-modify-missing": "פֿעלער בײַ מאדיפֿיצירן דעם איינס ID $1: ער פֿעלט פֿון דער דאַטנבאַזע!",
+ "revdelete-modify-missing": "פעלער ביים מאָדיפיצירן דעם איינס ID&rlm; $1: ער פעלט אין דער דאַטנבאַזע!",
"revdelete-no-change": "'''ווארענונג:''' דער איינהייט פֿון $2 , $1 האט שוין די געבעטענע זעבאַרקייט איינשטעלונגען.",
"revdelete-concurrent-change": "גרײַז בײַם מאדיפֿיצירן דעם איינהייט פֿון דאַטע $2 , $1 : ווײַזט אויס אַז זייַן סטאַטוס איז געווארן געענדערט דורך א צווייטן בשעת איר האט געפרוווט צו מאָדיפיצירן אים\nביטע זײַט בודק די לאָגביכער.",
"revdelete-only-restricted": "פֿעלער בײַם באַהאַלטן דאס איינסל פֿון $2, $1: איר קענט נישט באהאלטן פרטים פון אַדמיניסטראטורן נאר אויב איר וויילט אויס איינע פון די אַנדערע באַהאַלטן ברירות.",
@@ -786,6 +804,7 @@
"mergehistory-empty": "קיין רעוויזיעס קען נישט ווערן צונויפֿגעגאסן.",
"mergehistory-success": "{{PLURAL:$3|איין גירסא|$3 גירסאות}} פֿון [[:$1]] צונויפֿגעגאסן אין [[:$2]] מיט דערפֿאלג.",
"mergehistory-fail": "נישט מעגלעך אדורכצופֿירן היסטאריע צונויפֿגאס, ביטע זײַט בודק די בלאַט און צײַט פאַראַמעטערס.",
+ "mergehistory-fail-toobig": "אוממעגלעך אויסצופירן היסטאריע צונויפמישונג ווײַל מען וואלט געדארפט באוועגן מער ווי $1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}}.",
"mergehistory-no-source": "מקור בלאַט $1 עקזיסטירט נישט.",
"mergehistory-no-destination": "פֿארציל בלאַט $1 עקזיסטירט נישט.",
"mergehistory-invalid-source": "מקור בלאַט מוז זײַן א גילטיק קעפל.",
@@ -795,7 +814,6 @@
"mergehistory-same-destination": "מקור און ציל בלעטער זענען די זעלבע",
"mergehistory-reason": "אורזאַך:",
"mergelog": "צונויפֿגיסן לאג-בוך",
- "pagemerge-logentry": "צונויפֿגעגאסן [[$1]] אין [[$2]] (גרסאות ביז $3)",
"revertmerge": "מבטל זײַן צאמשטעל",
"mergelogpagetext": "אונטן איז א ליסטע פון לעצטנסדיגע צונויפגיסונגען פון איין בלאט'ס היסטאריע אין א צווייטער.",
"history-title": "רעוויזיע היסטאריע פֿון $1",
@@ -836,6 +854,7 @@
"search-result-category-size": "{{PLURAL:$1|1 מיטגליד|$1 מיטגלידער}} ({{PLURAL:$2|1 אונטער־קאַטעגאריע|$2 אונטער־קאַטעגאריעס}}, {{PLURAL:$3|1 טעקע|$3 טעקעס}})",
"search-redirect": "(ווײַטערפֿירן $1)",
"search-section": "(אפטיילונג $1)",
+ "search-category": "(קאטעגאריע $1)",
"search-file-match": "(פאסט צו טעקע אינהאלט)",
"search-suggest": "צי האט איר געמיינט: $1",
"search-interwiki-caption": "שוועסטער פראיעקטן",
@@ -846,6 +865,7 @@
"searchall": "אלץ",
"showingresults": "ווייזן ביז {{PLURAL:$1|רעזולטאט '''איינס'''|'''$1''' רעזולטאטן}} אנגעפאנגן פון נומער #'''$2''':",
"showingresultsinrange": "ווײַזן אונטן ביז {{PLURAL:$1|<strong>1</strong> רעזולטאט|<strong>$1</strong> רעזולטאטן}} אין גרייך #<strong>$2</strong> ביז #<strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|רעזולטאַט <strong>$1</strong> פֿון <strong>$3</strong>|רעזולטאַטן\n<strong>$1 - $2</strong> פֿון <strong>$3</strong>}}",
"search-nonefound": "נישטא קיין רעזולטאטן פֿאַר דער שאלה.",
"powersearch-legend": "ווײַטהאלטן זוכן",
"powersearch-ns": "זוכן אין נאמענטיילן:",
@@ -855,7 +875,7 @@
"powersearch-remember": "געדנעקען אויסקלייב פאר צוקונפטדיקע זוכן",
"search-external": "דרויסנדיק זוכן",
"searchdisabled": "{{SITENAME}} זוך איז אָפאַקטיווירט.\nצווישנצײַט קענט איר זוכן מיט גוגל.\nגעב אכט אז ס'איז מעגלעך אַז זייער אינדעקס פֿון {{SITENAME}} אינהאַלט איז אפשר פֿאַרעלטערט.",
- "search-error": "ס'האט פאסירט א פֿעלער ביים זוכן: $1",
+ "search-error": "ס׳האָט פּאַסירט אַ פֿעלער ביים זוכן: $1",
"preferences": "פרעפֿערענצן",
"mypreferences": "פּרעפֿערענצן",
"prefs-edits": "צאָל ענדערונגען:",
@@ -868,6 +888,11 @@
"prefs-personal": "באַניצער פראָפֿיל",
"prefs-rc": "לעצטע ענדערונגען",
"prefs-watchlist": "אויפפאסונג ליסטע",
+ "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-watchlist-edits": "מאַקסימום נומער פון נײַע ענדערונגען צו ווייַזן אין פֿאַרברייטערטער אויפֿפאַסונג ליסטע:",
@@ -923,7 +948,7 @@
"username": "{{GENDER:$1|באַניצער־נאָמען}}:",
"prefs-memberingroups": "{{GENDER:$2|מיטגליד}} אין {{PLURAL:$1|גרופע|גרופעס}}:",
"prefs-registration": "אײַנשרײַבן צײַט:",
- "yourrealname": "עכטער נאמען *:",
+ "yourrealname": "עכטער נאָמען:",
"yourlanguage": "שפּראַך:",
"yourvariant": "אינהאַלט שפּראַך וואַריאַנט:",
"prefs-help-variant": "אײַער פרעפֿערירטער וואַריאַנט אדער ארטאגראַפֿיע צו צייגן די אינהאַלט בלעטער פֿון דער וויקי.",
@@ -937,7 +962,7 @@
"gender-female": "זי רעדאקטירט וויקי בלעטער",
"prefs-help-gender": "שטעלן דעם פרעפֿערענץ איז אפציאנאַל.\nדאס ווייכוואַרג באניצט זיין ווערט אײַך צו אַדרעסירן און דערמאנען צו אנדערע מיטן געהעריגן מין פֿארעם. \nדי אינפֿארמאַציע ווערט ידוע צו אַלעמען.",
"email": "ע-פאסט",
- "prefs-help-realname": "* עכטער נאמען (אפציאנאל): אויב וועט איר אויסוועלן צוצישטעלן דאס, וועט גענוצט ווערן צו געבן אטריביאציע צו אייער ארבייט.",
+ "prefs-help-realname": "עכטער נאמען איז אפציאנאל.\nווען אנגעגעבן, וועט ער גענוצט ווערן צו געבן אטריבוציע פאר אייער ארבעט.",
"prefs-help-email": "ע-פאסט אַדרעס איז ברירהדיק, אבער עס דערמעגליכט אז מען קען אייך שיקן א ניי פאסווארט טאמער איר פֿארגעסט דאָס אַלטע.",
"prefs-help-email-others": "איר קענט אויך אויסקלייבן צו לאזן אנדערע פֿארבינדן מיט אייך דורך ע־פאסט דורך א לינק אויף אייער באניצער אדער שמועס בלאט.\nמען וועט נישט אנטפלעקן אייער ע־פאסט אדרעס ווען אנדערע פֿארבינדן זיך מיט אייך.",
"prefs-help-email-required": "בליצפאסט אדרעס באדארפט.",
@@ -958,6 +983,7 @@
"prefs-tokenwatchlist": "טאקן",
"prefs-diffs": "צווישנשיידן",
"prefs-help-prefershttps": "דער פרעפערענץ וועט ארבעטן ביי אײַער נעקסטער ארײַנלאגירונג.",
+ "prefswarning-warning": "איר האט געמאכט ענדערונגען צו אײַערע פרעפערענצן וואס זענען נאך נישט אויפגעהיטן.\nאז איר פארלאזט דעם בלאט אן קליקן ״$1״ וועלן אײַערע פרעפערענצן נישט ווערן דערהײַנטיקט.",
"prefs-tabs-navigation-hint": "טיפ: איר קענט ניצן די רעכטס און לינקס פייל־קלאווישן צו נאוויגירן צווישן די צינגלעך אין דער צינגלעך־ליסטע.",
"email-address-validity-valid": "ע-פּאָסט אַדרעס זעט אויס גילטיק",
"email-address-validity-invalid": "לייגט אַרײַן א גילטיקן ע־פאסט אַדרעס",
@@ -1043,6 +1069,7 @@
"right-protect": "ענדערן שוץ ניוואען און רעדאַגירן קאסקאד־געשיצטע בלעטער",
"right-editprotected": "רעדאַגירן בלעטער געשיצט ווי \"{{int:protect-level-sysop}}\"",
"right-editsemiprotected": "רעדאַגירן בלעטער געשיצט ווי \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editcontentmodel": "רעדאקטירן אינהאלט־מאדעל פון א בלאט",
"right-editinterface": "רעדאַקטירן די באַניצער אייבערפֿלאַך",
"right-editusercssjs": "רעדאַקטירן אַנדערע באַניצערס CSS און JS טעקעס",
"right-editusercss": "רעדאַקטירן אַנדערע באַניצערס CSS טעקעס",
@@ -1050,7 +1077,7 @@
"right-editmyusercss": "רעדאקטירע אײַערע אייגענע באניצער CSS טעקעס",
"right-editmyuserjs": "רעדאקטירן אײַערע אייגענע באניצער JavaScript טעקעס",
"right-viewmywatchlist": "באקוקן אייער אייגענע אויפפאסונג ליסטע",
- "right-editmywatchlist": "רעדאקטירן אייער אייגענע אויפפאסונג ליסטער. טייל פעולות וועלן דאך צולייגן בלעטער אפילו אן דעם רעכט.",
+ "right-editmywatchlist": "רעדאקטירן אייער אייגענע אויפפאסונג ליסטע. טייל פעולות וועלן דאך צולייגן בלעטער אפילו אן דעם רעכט.",
"right-viewmyprivateinfo": "באקוקן אײַער אייגענע פריוואטע דאטן (צ\"ב ע־פאסט אדרעס, אמתער נאמען)",
"right-editmyprivateinfo": "רעדאקטירן אײַער אייגענע פריוואטע דאטן (צ\"ב ע־פאסט אדרעס, אמתער נאמען)",
"right-editmyoptions": "רעדאקטירן אײַערע אייגענע פרעפערענצן",
@@ -1070,6 +1097,7 @@
"right-override-export-depth": "עקספארטירן בלעטער כולל געלינקטע בלעטער ביז א טיף פון 5",
"right-sendemail": "שיקן ע-פאסט צו אנדערע באניצער",
"right-passwordreset": "באַקוקן פאַסווארט צוריקשטעלן ע־בריוו",
+ "right-managechangetags": " [[Special:Tags|טאגן]] פון דעם שאפן און אויסמעקן",
"newuserlogpage": "נייע באַניצערס לאָג-בוך",
"newuserlogpagetext": "דאס איז א לאג פון באַניצערס אײַנשרײַבונגען.",
"rightslog": "באַניצער רעכטן לאג",
@@ -1115,6 +1143,8 @@
"action-viewmywatchlist": "באקוקן אײַער אויפֿפאסונג ליסטע",
"action-viewmyprivateinfo": "באקוקן אײַער פריוואטע אינפארמאציע",
"action-editmyprivateinfo": "רעדאקטירן אײַער פריוואטע אינפארמאציע",
+ "action-editcontentmodel": "רעדאקטירן אינהאלט־מאדעל פון א בלאט",
+ "action-managechangetags": "שאפן און אויסמעקן טאגן פון דער דאטנבאזע",
"nchanges": "{{PLURAL:$1|ענדערונג|$1 ענדערונגען}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|זײַט לעצטן וויזיט}}",
"enhancedrc-history": "היסטאריע",
@@ -1185,9 +1215,9 @@
"uploaderror": "אַרויפֿלאָדן פֿעלער",
"upload-recreate-warning": "'''ווארענונג: א טעקע מיט דעם נאמען איז געווארן אויסגעמעקט אדער באוועגט.'''\n\nדאס אויסמעקן־ און באוועגן־לאגבוך פאר דעם בלאט זענען געוויזן דא:",
"uploadtext": "באניצט דעם פֿארעם אַרויפֿצולאָדן טעקעס.\nכדי צו זען אדער זוכן טעקעס וואס זענען שוין אַרויפֿגעלאָדן ווענדט זיך צו דער [[Special:FileList|ליסטע פֿון אַרויפֿגעלאָדענע טעקעס]]; (ווידער)אַרויפֿלאָדונגען ווערן אויך לאגירט אינעם [[Special:Log/upload| אַרויפֿלאָדן לאג-בוך]], אויסמעקונגען אינעם [[Special:Log/delete|אויסמעקן לאג-בוך]].\n\nכדי אײַנשליסן א טעקע אין א בלאַט, באניצט א לינק אין איינעם פון די פֿאלגנדע פֿארעמען:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' צו ניצן די פֿולע ווערסיע פֿון דער טעקע\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|טעקסט קעפל]]</nowiki></code>''' צו ניצן א 200 פיקסל ברייט ווערסיע אין א קעסטל אויף דער לינקער זײַט, מיט דער שילדערונג 'טעקסט קעפל'\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' פֿאר א גראָדער פֿאַרבינדונג צו דער טעקע אָן צו ווײַזן זי",
- "upload-permitted": "ערלויבטע טעקע טיפן: $1.",
- "upload-preferred": "פרעפֿרירטע טעקע טיפן: $1.",
- "upload-prohibited": "פֿאַרווערענע טעקע טיפן: $1.",
+ "upload-permitted": "{{PLURAL:$2|ערלויבטער טעקע טיפ|ערלויבטע טעקע טיפן}}: $1.",
+ "upload-preferred": "{{PLURAL:$2|פרעפֿערירטער טעקע טיפ|פרעפֿערירטע טעקע טיפן}}: $1.",
+ "upload-prohibited": "{{PLURAL:$2|פֿאַרווערענער טעקע טיפ|פֿאַרווערענע טעקע טיפן}}: $1.",
"uploadlogpage": "ארויפֿלאדן לאג",
"uploadlogpagetext": "פֿאָלגנד איז אַ ליסטע פֿון די לעצטע אַרױפֿגעלאָדענע טעקעס.\nזעט די [[Special:NewFiles|גאלאריע פֿון נײַע טעקעס]] פֿאַר א מער וויזועלע איבערבליק.",
"filename": "טעקע נאמען",
@@ -1261,8 +1291,8 @@
"upload-warning-msg": "געווען א פראבלעם מיט אײַער ארויפֿלאָד פֿון [$2]. איר קענט צוריקקערן צום [[Special:Upload/stash/$1|ארויפֿלאָדן פֿארעם]] צו פֿאררעכטן דעם פראבלעם.",
"upload-proto-error": "פֿאלשער פראטאקאל",
"upload-proto-error-text": "ביי א ווייטן ארויפלאד דארף דער URL אנהייבן מיט <code>http://</code> אדער <code>ftp://</code>.",
- "upload-file-error": "אינערליכער פֿעלער",
- "upload-file-error-text": "אן אינערלעכע פֿעלער האט פאסירט ביים פרובירן צו שאפֿן א פראוויזארישע טעקע אויפֿן סארווער.\nביטע פֿארבינדט זיך מיט א [[Special:ListUsers/sysop|סיסאפ]].",
+ "upload-file-error": "אינערלעכער פעלער",
+ "upload-file-error-text": "אַן אינערלעכער פעלער האָט פּאַסירט ביים פּרובירן צו שאַפן אַ צייטווייליקע טעקע אויפן סערווער.\nזייט אַזוי גוט, פאַרבינדט זיך מיט אַן [[Special:ListUsers/sysop|אַדמיניסטראַטאָר]].",
"upload-misc-error": "אומבאַוואוסטער ארויפֿלאָדן גרײַז",
"upload-misc-error-text": "אן אומבאקאנטער גרייז האט פאסירט בשעת דעם ארויפלאד.\nביטע באשטעטיקט אז דער URL איז גילטיק און דערגרייכבאר און פרובירט נאכאמאל.\nווען דער פראבלעם בלייבט ווייטער, קאנטאקטירט א [[Special:ListUsers/sysop|סיסאפ]].",
"upload-too-many-redirects": "דער URL אַנטהאַלט צופֿיל ווײַטערפֿירונגען.",
@@ -1285,7 +1315,7 @@
"backend-fail-create": "קען נישט שרייבן טעקע \"$1\".",
"backend-fail-maxsize": "מ'האט נישט געקענט שרייבן די טעקע \"$1\" ווייל זי איז גרעסער פון {{PLURAL:$2|איין בייט|$2 בייטן}}.",
"backend-fail-connect": "מ'קען נישט פארבינדן צום שפייכלער־בעקענד \"$1\".",
- "backend-fail-internal": "אן אומבאוואוסטער פֿעלער האט פאסירט אין שפייכלער־בעקענד \"$1\".",
+ "backend-fail-internal": "אַן אומבאַקאַנטער פֿעלער האָט פּאַסירט אין שפּייכלער־בעקענד \"$1\".",
"backend-fail-contenttype": "מ'קען נישט פעסטשטעלן דעם אינהאלט טיפ פון דער טעקע צו שפייכלערן ביי \"$1\".",
"filejournal-fail-dbquery": "נישט געווען מעגלעך צו דערהײַנטיקן די שזור אל־דאטנבאזע פארן אײַנשפײַכלערונג־רעזערוו \"$1\".",
"lockmanager-notlocked": "מ'קען נישט אויפֿשליסן \"$1\"; ער איז נישט פֿארשלאסן.",
@@ -1423,7 +1453,6 @@
"statistics": "סטאַטיסטיק",
"statistics-header-pages": "בלעטער סטאטיסטיק",
"statistics-header-edits": "רעדאקטירן סטאַטיסטיק",
- "statistics-header-views": "זען סטאטיסטיק",
"statistics-header-users": "באניצער סטאטיסטיק",
"statistics-header-hooks": "אנדערע סטאטיסטיק",
"statistics-articles": "אינהאלט בלעטער",
@@ -1432,13 +1461,9 @@
"statistics-files": "ארויפֿגעלאדענע טעקעס",
"statistics-edits": "רעדאַקטירונגען זײַט {{SITENAME}} איז אויפֿגעשטעלט",
"statistics-edits-average": "דורכשניט רעדאַקטירונגען אין א בלאַט",
- "statistics-views-total": "צאל קוקן אינגאַנצן",
- "statistics-views-total-desc": "באַקוקן צו נישט־פֿאַרהאַנען בלעטער און באַזונדערע בלעטער זענען נישט אַרייַנגערעכנט.",
- "statistics-views-peredit": "צאל קוקן צו א רעדאַקטירונג",
"statistics-users": "איינגעשריבענע [[Special:ListUsers|באניצערס]]",
"statistics-users-active": "טעטיקע באניצערס",
"statistics-users-active-desc": "באניצערס וואס האבן דורכגעפירט א פעולה אין די לעצטע {{PLURAL:$1|טאג|$1 טעג}}",
- "statistics-mostpopular": "מערסטע געזען בלעטער",
"pageswithprop": "בלעטער מיט א בלאט אייגנשאפט",
"pageswithprop-legend": "בלעטער מיט א בלאט אייגנשאפט",
"pageswithprop-text": "דער בלאט האלט א רשימה פון בלעטער וואס ניצן א געוויסע בלאט אייגנשאפט.",
@@ -1479,7 +1504,6 @@
"uncategorizedtemplates": "אומקאטעגאריזירטע מוסטערן",
"unusedcategories": "נישט געניצטע קאטעגאריעס",
"unusedimages": "נישט געניצטע טעקעס",
- "popularpages": "פאפולערע בלעטער",
"wantedcategories": "געזוכטע קאטעגאריעס",
"wantedpages": "געזוכטע בלעטער",
"wantedpages-badtitle": "אומגילטיקער טיטל אין רעזולטאַט: $1",
@@ -1526,7 +1550,7 @@
"newpages": "נייע בלעטער",
"newpages-username": "באַניצער נאָמען:",
"ancientpages": "עלטסטע בלעטער",
- "move": "באַװעגן",
+ "move": "באַוועגן",
"movethispage": "באוועג דעם בלאט",
"unusedimagestext": "די פֿאלגנדע טעקעס עקזיסטירן אבער ווערן נישט גענוצט אין קיין שום בלאַט.\nגיט אַכט אז אנדערע וועבערטער קענען פֿארבינדן צו א טעקע מיט א דירעקטן URL, און קענען דעריבער באווײַזן זיך דאָ כאטש זיי זענען אין אקטיוון באניץ.",
"unusedcategoriestext": "די פֿאלגנדע קאטעגאריעס עקסיסטירן, אבער קיין בלאט אדער קאטעגאריע ניצט זיי נישט.",
@@ -1538,9 +1562,11 @@
"pager-older-n": "{{PLURAL:$1|עלטערע|$1 עלטערע}}",
"suppress": "אויפֿזען",
"querypage-disabled": "דער באַזונדער־בלאַט איז אומאַקטיווירט צוליב אויספֿירונג סיבות.",
+ "apihelp": "API־הילף",
+ "apihelp-no-such-module": "מאָדול \"$1\" נישט געפונען.",
"booksources": "דרויסנדיגע ליטעראַטור ISBN",
"booksources-search-legend": "זוכן פאר דרויסנדע ביכער מקורות",
- "booksources-go": "גיין",
+ "booksources-search": "זוכן",
"booksources-text": "אונטן איז א ליסטע פון סייטס וואס פֿארקויפֿן נייע און גענוצטע ביכער און האבן אויך נאך אינפֿארמאציע וועגן די ביכער וואס איר זוכט:",
"booksources-invalid-isbn": "דאָס געגעבענע ISBN זעט נישט אויס צו זיין גילטיק; קאנטראלירט פֿאַר גרײַזן בײַם קאפּירן פון דעם ערשטיקן מקור.",
"specialloguserlabel": "אויספֿירער:",
@@ -1612,6 +1638,7 @@
"trackingcategories-msg": "אויפפאסן־קאטעגאריע",
"trackingcategories-name": "מעלדונג נאמען",
"trackingcategories-desc": "קאטעגאריע אײַנשליסן קריטעריע",
+ "hidden-category-category-desc": "די קאטעגאריע אנטהאלט <code><nowiki>__HIDDENCAT__</nowiki></code> אין בלאט־אינהנהאלט, וואס פארמײַדט אים פון באשײַנען אין דעם קאטעגאריע־לינק־קעסטל.",
"trackingcategories-nodesc": "נישט פאראן קיין באשרײַבונג.",
"trackingcategories-disabled": "קאטעגאריע איז אומאקטיווירט",
"mailnologin": "נישטא קיין אדרעס צו שיקן",
@@ -1659,7 +1686,7 @@
"removedwatchtext-short": "מ'האט אראפגענומען בלאט \"$1\" פון אײַער אויפפאסן ליסטע.",
"watch": "אױפֿפּאַסן",
"watchthispage": "טוט אױפֿפּאַסן דעם בלאט",
- "unwatch": "אויפֿהערן אויפֿפּאַסן",
+ "unwatch": "אויפהערן אויפפּאַסן",
"unwatchthispage": "ענדיגן אויפֿפאַסן",
"notanarticle": "דאס איז נישט קיין אינהאלט בלאט",
"notvisiblerev": "די באארבעטונג איז געווארן אויסגעמעקט",
@@ -1667,7 +1694,7 @@
"wlheader-enotif": "ע-פאסט מעלדונג ערמעגליכט.",
"wlheader-showupdated": "בלעטער געענדערט זײַט אײַער לעצטן וויזיט זען געוויזן '''דיק'''.",
"wlnote": "אונטן {{PLURAL:$1|איז די לעצטע ענדערונג|זענען די לעצטע <strong>$1</strong> ענדערונגען}} אין {{PLURAL:$2|דער לעצטער שעה|די לעצטע <strong>$2</strong> שעה'ן}} ביז $3, $4.",
- "wlshowlast": "(ווײַזן די לעצטע $1 שעה'ן | $2 טעג | $3)",
+ "wlshowlast": "ווײַזן די לעצטע $1 שעה'ן $2 טעג",
"watchlist-options": "אויפֿפאַסן ליסטע ברירות",
"watching": "אויפפאסענדונג…",
"unwatching": "נעמט אראפ פון אויפפאסונג ליסטע…",
@@ -1716,7 +1743,6 @@
"deleteprotected": "איר קענט נישט אויסמעקן דעם בלאט ווײַל ער איז געשיצט.",
"deleting-backlinks-warning": "'''ווארענוג:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|אנדערע בלעטער]] פארבינדן צום בלאט אדער אריבערשליסן דעם בלאט איר האלט ביי אויסמעקן.",
"rollback": "צוריקדרייען רעדאַקטירונגען",
- "rollback_short": "צוריקדרייען",
"rollbacklink": "צוריקדרייען",
"rollbacklinkcount": "צוריקדרייען $1 {{PLURAL:$1|רעדאקטירונג|רעדאקטירונגען}}",
"rollbacklinkcount-morethan": "צוריקדרייען מער ווי $1 {{PLURAL:$1|רעדאקטירונג|רעדאקטירונגען}}",
@@ -1764,6 +1790,7 @@
"protect-othertime": "אנדער צייט:",
"protect-othertime-op": "אנדער צײַט",
"protect-existing-expiry": "עקזיסטירנדע אויסלאז צײַט: $3, $2",
+ "protect-existing-expiry-infinity": "עקזיסטירנדיקע אויסגיין צייט: אומענדלעך",
"protect-otherreason": "אנדער/ווײַטערדיקע סיבה:",
"protect-otherreason-op": "אַנדער סיבה",
"protect-dropdown": "* געוויינטלעכע סיבות פאר שיצן\n** אסאך וואנדאליזם\n** אסאך ספאם\n** אומנוציקער רעדאקטירונג קריג\n** שטארק געניצטער בלאט",
@@ -1783,7 +1810,7 @@
"restriction-level-all": "וואָסער ניווא",
"undelete": "זען אויסגעמעקטע בלעטער",
"undeletepage": "זען און צוריקשטעלן אויסגעמעקט בלעטער",
- "undeletepagetitle": "'''פֿאלגנד באַשטייט פֿון אויסגעמעקטע ווערסיע פֿון [[:$1]]'''.",
+ "undeletepagetitle": "'''דאָס פאָלגנדיקע באַשטייט פון אויסגעמעקטע ווערסיעס פון [[:$1]]'''.",
"viewdeletedpage": "זען אויסגעמעקטע בלעטער",
"undeletepagetext": "The following {{PLURAL:$1|דער פֿאלגנדער בלאַט איז געווארן אויסגעמעקט אבער קען|די פֿאלגנדע $1  בלעט ער זענען געווארן אויסגעמעקט אבער קענען}} נאך ווערן צוריקגעשטעלט פֿון אַרכיוו.\nפֿון צײַט צו צײַט רייניגט מען אויס דעם אַרכיוו.",
"undelete-fieldset-title": "צוריקשטעלן רעוויזיעס",
@@ -1818,6 +1845,8 @@
"undelete-show-file-submit": "יא",
"namespace": "נאמענטייל:",
"invert": "ווײַז אַלע אויסער די",
+ "tooltip-invert": "באצייכנט דאס קעסטל צו באהאלטן ענדערונגען צו בלעטער אין דעם געקליבענעם נאמענטייל",
+ "tooltip-whatlinkshere-invert": "מארקירט דאס קעסטל צו באהאלטן לינקען פון בלעטער אינעם אויסגעקליבענעם נאמענטייל.",
"namespace_association": "אָנגעבונדענער נאָמענטייל",
"tooltip-namespace_association": "צייכנט דאס קעסטל כדי איינשליסן דעם שמועס אדער סוביעקט נאמענטייל וואס געהערט צום אויסגעקליבענעם נאמענטייל",
"blanknamespace": "(הויפט)",
@@ -1832,7 +1861,7 @@
"year": "ביז יאר:",
"sp-contributions-newbies": "ווײַזן בײַשטײַערונגען נאר פֿון נײַע באַניצערס",
"sp-contributions-newbies-sub": "פאר נייע קאנטעס",
- "sp-contributions-newbies-title": "בײַשטײַערונגען פֿון נײַע באַניצערס",
+ "sp-contributions-newbies-title": "ביישטייערונגען פון נייע באַניצער",
"sp-contributions-blocklog": "בלאקירן לאג",
"sp-contributions-suppresslog": "אונטערדריקטע באַניצער בײַשטײַערונגען",
"sp-contributions-deleted": "אויסגעמעקטע באַניצער בײַשטײַערונגען",
@@ -1874,6 +1903,7 @@
"ipbexpiry": "אויסגיין:",
"ipbreason": "אורזאַך:",
"ipbreason-dropdown": "* פֿארשפרייטע בלאקירן סיבות\n** ארײַנלייגן פֿאלשע אינפֿארמאציע\n** אויסמעקן אינהאַלט פֿון בלעטער\n** פֿארפֿלייצן לינקען צו דרויסנדיקע ערטער\n** ארײַנלייגן שטותים/טאָטעריש אין בלעטער\n** סטראשעט און שטערט\n** קרומבאניצן מערערע קאנטעס\n** באַניצער נאָמען פראבלעמאַטיש",
+ "ipb-hardblock": "פארמיידן אריינלאגירטע באניצער פון רעדאקטירן פון דעם IP־אדרעס",
"ipbcreateaccount": "פֿאַרמײַדן שאַפֿן קאנטעס",
"ipbemailban": "פֿארמײַדן באַניצער פון שיקן ע־פאסט",
"ipbenableautoblock": "אויטאמאַטיש בלאקירן דעם לעצטן IP אַדרעס פֿ\nפֿון דעם באַניצער, און אַבי וועלכן IP אַדרעס ער פרובירט צו ניצן",
@@ -1901,6 +1931,7 @@
"unblocked": "[[User:$1|$1]] איז געווארן באַפֿרייט פון זײַן בלאק",
"unblocked-range": "$1 איז באפרייט פון בלאקירן",
"unblocked-id": "בלאק $1 איז געווארן אַראָפגענומען.",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] איז געווארן אויפבלאקירט.",
"blocklist": "בלאקירטע באַניצער",
"ipblocklist": "בלאקירטע באַניצער",
"ipblocklist-legend": "געפֿינען א בלאקירטן באניצער",
@@ -2071,13 +2102,14 @@
"thumbnail-temp-create": "מ'קען נישט שאפן א פראוויזארישע פארקלענערטע טעקע",
"thumbnail-dest-create": "מ'קען נישט שפייכלערן פארקלענערונג צום ציל",
"thumbnail_invalid_params": "אומגילטיגע קליינבילד פאראמעטערס",
+ "thumbnail_toobigimagearea": "טעקע מיט דימענסיעס גרעסער פון $1",
"thumbnail_dest_directory": "מ'קען נישט שאפֿן דעם ציל קארטאטעק",
"thumbnail_image-type": "בילד טיפ נישט געשטיצט",
"thumbnail_gd-library": "אומפולשטענדיקע קאנפיגוראציע פאר דער GD-ביבליאטעק: פונקציע $1 פעלט",
"thumbnail_image-missing": "טעקע פֿעלט אייגנטלעך: $1",
"import": "אימפארטירן בלעטער",
- "importinterwiki": "אריבערוויקי אימפארט",
- "import-interwiki-text": "קלויבט אויס א וויקי און אן ארטיקל קעפל צו אימפארטירן.\nדי דאטעס און די נעמען פון די רעדאקטארן וועט ווערן געהיטן.\nאלע צווישנוויקי אימפארט אקציעס ווערן פארשריבן אינעם [[Special:Log/import|אימפארט לאג]].",
+ "importinterwiki": "אימפארטירן פֿון אַן אַנדער וויקי",
+ "import-interwiki-text": "קלויבט אויס א וויקי און אן ארטיקל קעפל צו אימפארטירן.\nדי דאטעס און די נעמען פון די רעדאקטארן וועט ווערן געהיטן.\nאלע אימפארטן פון אנדערע וויקיס ווערן פארשריבן אינעם [[Special:Log/import|אימפארט לאג]].",
"import-interwiki-sourcewiki": "מקור וויקי:",
"import-interwiki-sourcepage": "מקור בלאַט:",
"import-interwiki-history": "קאפירן אלע היסטאריע ווערסיעס פאר דעם בלאט",
@@ -2097,12 +2129,12 @@
"importcantopen": "נישט געקענט עפֿענען אימפארט טעקע",
"importbadinterwiki": "שלעכטע אינטערוויקי לינק",
"importsuccess": "!אימפארט אדורכגעפירט מיט דערפאלג!",
- "importnosources": "קיין מקורות פֿאַר צווישן־וויקי אימפארט, און דירעקט היסטאריע אַרויפֿלאָדן איז נישט דערמעגלעכט אַצינד.",
+ "importnosources": "קיין וויקיס פֿון וועמען צו אימפארטירן זענען דעפינירט, און דירעקט היסטאריע אַרויפֿלאָדן איז נישט דערמעגלעכט אַצינד.",
"importnofile": "קיין אימפארט טעקע איז נישט ארויפֿגעלאדן.",
"importuploaderrorsize": "אַרויפֿלאָדן פֿון אימפארט טעקע דורכגעפֿאלן.\nדי טעקע איז גרעסער פֿון דער דערלויבטער אַרויפֿלאָדן גרייס.",
"importuploaderrorpartial": "אַרויפֿלאָדן פֿון אימפארט טעקע דורכגעפֿאלן.\nדי טעקע איז נאר טיילווייז אַרויפֿגעלאָדן.",
"importuploaderrortemp": "אַרויפֿלאָדן פֿון אימפארט טעקע דורכגעפֿאלן.\nאַ פראוויזארישער טעקע־האלטער פֿעלט.",
- "import-parse-failure": "פֿעלער בײַם אימפארטירן XML",
+ "import-parse-failure": "פעלער ביים אימפּאָרטירן XML",
"import-noarticle": "נישטא קיין בלאט צו אימפארטירן!",
"import-nonewrevisions": "קיין רעוויזיעס נישט אימפארטירט (אדער אלע שוין דא, אדער איבערגעהיפט צוליב גרײַזן).",
"xml-error-string": "$1 בײַ שורה $2, זייל $3 (בייט $4): $5",
@@ -2119,18 +2151,15 @@
"import-rootpage-nosubpage": "נאמענטייל \"$1\" פונעם שטאמבלאט ערלויבט נישט קיין אונטערבלעטער.",
"importlogpage": "אימפארט לאגבוך",
"importlogpagetext": "אַדמיניסטראַטיווער אימפארט פון בלעטער מיט רעדאַגירן היסטאריע פֿון ​​אַנדערע וויקיס.",
- "import-logentry-upload": "האט אימפארטירט [[$1]] דורך טעקע אַרויפֿלאָדן",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}} אימפארטירט",
- "import-logentry-interwiki": "אריבערגעוויקיט $1",
"import-logentry-interwiki-detail": "$1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}} אימפארטירט פֿון $2",
"javascripttest": "JavaScript טעסט",
- "javascripttest-title": "דורכפירנדיק $1 בדיקות",
"javascripttest-pagetext-noframework": " דער בלאט איז רעזערווירט פאר JavaScript. פרואוון.",
"javascripttest-pagetext-unknownframework": "אומבאקאנטער טעסטן גערעם \"$1\".",
+ "javascripttest-pagetext-unknownaction": "אומבאַקאַנטע אַקציע '$1'",
"javascripttest-pagetext-frameworks": "ביטע קלויבט איינעם פון די פאלגנדע טעסטן־גערעם: $1",
"javascripttest-pagetext-skins": "קלויבט א באניצער־אייבערפלאך מיט וואס דורכצופירן די בדיקות:",
"javascripttest-qunit-intro": "זעט [$1 דאקומענטאציע פאר טעסטן] בײַ mediawiki.org.",
- "javascripttest-qunit-heading": "מעדיעוויקי JavaScript QUnit קאנטראל־פראגראם",
"tooltip-pt-userpage": "אייער באניצער בלאט",
"tooltip-pt-anonuserpage": "באַניצער בלאַט פון דעם IP אַדרעס",
"tooltip-pt-mytalk": "אייער שמועס בלאט",
@@ -2140,6 +2169,7 @@
"tooltip-pt-mycontris": "ליסטע פון אייערע ביישטייערונגען",
"tooltip-pt-login": "עס איז רעקאָמענדירט זיך אײַנשרײַבן; ס'איז אבער נישט קיין פֿליכט",
"tooltip-pt-logout": "ארויסלאגירן",
+ "tooltip-pt-createaccount": "איר ווערט דערמוטיגט צו שאפן א קאנטע און אריינלאגירן; ס'איז אביר נישט אבליגאטאריש",
"tooltip-ca-talk": "שמועס וועגן דעם אינהאַלט בלאַט",
"tooltip-ca-edit": "איר קענט ענדערן דעם בלאט. ביטע באניצט דעם ''פֿארויסקוק'' קנעפל בעפֿארן אפהיטן",
"tooltip-ca-addsection": "אָנהייבן א נײַע אָפטיילונג",
@@ -2151,7 +2181,7 @@
"tooltip-ca-undelete": "צוריק דרייען די ענדערונגען פון דעם בלאט פארן מעקן",
"tooltip-ca-move": "באַוועגן דעם בלאַט",
"tooltip-ca-watch": "לייגט צו דעם בלאט אויפצופאסן",
- "tooltip-ca-unwatch": "נעמט אראפ דעם בלאט פון אויפפאסן",
+ "tooltip-ca-unwatch": "נעמט אַראָפּ דעם בלאַט פון נאָכפאָלג־ליסטע",
"tooltip-search": "זוכט אינעם סייט",
"tooltip-search-go": "גייט צו א בלאט מיט אט דעם נאמען, אויב ער עקסיסטירט",
"tooltip-search-fulltext": "זוכט דעם טעקסט אין די בלעטער",
@@ -2169,6 +2199,7 @@
"tooltip-feed-atom": "לייג צו אן אטאמאטישער אפדעיט דורך אטאם Atom",
"tooltip-t-contributions": "אלע בײַשטײַערונגען פון דעם באניצער",
"tooltip-t-emailuser": "שיקן א בליצבריוו צו דעם בַאניצער",
+ "tooltip-t-info": "נאָך אינפאָרמאַציע וועגן דעם בלאַט",
"tooltip-t-upload": "ארויפלאדן טעקעס",
"tooltip-t-specialpages": "אלע ספעציעלע בלעטער",
"tooltip-t-print": "דרוק ווערסיע פון דעם בלאט",
@@ -2231,7 +2262,6 @@
"pageinfo-robot-policy": "אינדעקסירן דורך ראבאטן",
"pageinfo-robot-index": "דערלויבט",
"pageinfo-robot-noindex": "נישט דערלויבט",
- "pageinfo-views": "צאַל קוקן",
"pageinfo-watchers": "!צאָל בלאט אויפֿפאַסער",
"pageinfo-few-watchers": "ווינציקער ווי $1 {{PLURAL:$1|אויפֿפאסער}}",
"pageinfo-redirects-name": "צאָל ווײַטערפירונגען צו דעם בלאט",
@@ -2481,7 +2511,7 @@
"exif-label": "צעטל",
"exif-datetimemetadata": "דאטע ווען מעטאדאטן זענען געווען לעצט געענדערט",
"exif-nickname": "אויספארמעלער נאמען פון בילד",
- "exif-rating": "שאצונג (פֿון 5)",
+ "exif-rating": "אָפּשאַצונג (פון 5)",
"exif-rightscertificate": "רעכטן פארוואלטונג צערטיפיקאט",
"exif-copyrighted": "קאפירעכט סטאַטוס",
"exif-copyrightowner": "קאפירעכטן האלטער",
@@ -2626,7 +2656,6 @@
"exif-urgency-low": "נידעריק ($1)",
"exif-urgency-high": "הויך ($1)",
"exif-urgency-other": "באניצער־דעפינירטע פריאריטעט ($1)",
- "watchlistall2": "אַלע",
"namespacesall": "אַלע",
"monthsall": "אלע",
"confirmemail": "באַשטעטיקט בליצפּאָסט אַדרעס",
@@ -2679,6 +2708,7 @@
"autosumm-replace": "פֿאַרבײַט דעם בלאַט מיט '$1'",
"autoredircomment": "ווייטערפירן צו [[$1]]",
"autosumm-new": "געשאַפֿן בלאַט מיט '$1'",
+ "autosumm-newblank": "ליידיגן בלאט געשאפן",
"watchlistedit-normal-title": "רעדאַקטירן די אויפֿפאַסונג ליסטע",
"watchlistedit-normal-legend": "אַראָפנעמען בלעטער פון דער אויפֿפאסן ליסטע",
"watchlistedit-normal-submit": "אַראָפנעמען בלעטער",
@@ -2743,7 +2773,6 @@
"hebrew-calendar-m11-gen": "אב",
"hebrew-calendar-m12-gen": "אלול",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|רעדן]])",
- "unknown_extension_tag": "אומבאַוואוסטער פֿאַרברייטערונג טאַג \"$1\"",
"duplicate-defaultsort": "'''ווארענונג:''' גרונט סארטשליסל \"$2\" פֿאָרט איבערן פֿריערדיגן גרונט סארטשליסל \"$1\".",
"version": "ווערסיע",
"version-extensions": "אינסטאלירטע פארברייטערונגען",
@@ -2756,7 +2785,7 @@
"version-hooks": "Hook סטרוקטורן",
"version-parser-extensiontags": "פארזער פארברייטערן טאַגן",
"version-hook-name": "נאמען פון hook",
- "version-version": "(ווערסיע $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[קיין נאמען]",
"version-license": "מעדיעוויקי ליצענץ",
"version-ext-license": "ליצענץ",
@@ -2835,7 +2864,7 @@
"compare-revision-not-exists": "די רעוויזיע וואס איר האט ספעציפֿירט עקזיסטירט נישט.",
"dberr-problems": "אנטשולדיגט! דער דאזיקער סייט האט טעכנישע פראבלעמען.",
"dberr-again": "וואַרט א פאָר מינוט און לאָדנט אָן ווידער.",
- "dberr-info": "(קען נישט פֿאַרבינדן מיטן דאַטנבאַזע באַדינער: $1)",
+ "dberr-info": "(קען נישט צוקומען צו דער דאַטנבאַזע: $1)",
"dberr-usegoogle": "אינצווישנצײַט קענט איר פרובירן זוכן דורך גוגל.",
"dberr-outofdate": "גיט אַכט אַז זײַערע אינדעקסן פֿון אונזער אינהאַלט איז מעגלעך פֿאַרעלטערט.",
"dberr-cachederror": "דאָס איז אַן אײַנגעשפייכלערט קאפיע פֿון דעם געפֿאדערטן בלאַט, און קען זײַן פֿאַרעלטערט.",
@@ -2888,20 +2917,22 @@
"logentry-rights-rights": "$1 האט {{GENDER:$2|געביטן}} גרופע מיטגלידערשאַפֿט פֿאַר $3 פֿון $4 אויף $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|האט געביטן}} גרופע מיטגלידערשאפט פאר $3",
"logentry-rights-autopromote": "$1 אויטאמאטיש {{GENDER:$2|פראמאווירט}} פון $4 צו $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|האט ארויפגעלאדן}} $3",
"rightsnone": "(גארנישט)",
+ "revdelete-summary": "רעדאקטירונג קיצור",
+ "feedback-adding": "צולייגן פֿידבעק צו בלאַט...",
+ "feedback-bugcheck": "געוואלדיק! אבער זייט בודק אז עס איז נישט איינער פון די [$1 באוואוסטע באגן].",
+ "feedback-bugnew": "כ'האב בודק געווען. רעפארטירט א נייעם באג.",
"feedback-bugornote": "ווען איר זענט גרייט צו באשרייבן א טעכנישן פראבלעם ביטע [$1 מעלדט א פעלער].\nאנדערש, קענט איר ניצן די גרינגע פארעם אונטן. מען וועט צולייגן אייער הערה צום בלאט \"[$3 $2]\", צוזאמען מיט אייער באניצער נאמען און וועלכן בלעטערער איר ניצט.",
- "feedback-subject": "טעמע:",
- "feedback-message": "מעלדונג:",
"feedback-cancel": "אַנולירן",
- "feedback-submit": "ארײַנגעבן פֿידבעק",
- "feedback-adding": "צולייגן פֿידבעק צו בלאַט...",
+ "feedback-close": "ערליידיקט",
"feedback-error1": "טעות: אומבאַקאַנטער רעזולטאַט פון API",
"feedback-error2": "טעות: רעדאַקטירן דורכפֿאַל",
"feedback-error3": "טעות: קיין ענטפֿער פון API",
+ "feedback-message": "מעלדונג:",
+ "feedback-subject": "טעמע:",
+ "feedback-submit": "אײַנגעבן",
"feedback-thanks": "ייש\"כ! אײַער פֿידבעק איז געווארן ארויפגעלעגט צום בלאט \"[$2 $1]\".",
- "feedback-close": "ערליידיקט",
- "feedback-bugcheck": "געוואלדיק! אבער זייט בודק אז עס איז נישט איינער פון די [$1 באוואוסטע באגן].",
- "feedback-bugnew": "כ'האב בודק געווען. רעפארטירט א נייעם באג.",
"searchsuggest-search": "זוכן",
"searchsuggest-containing": "כולל…",
"api-error-badaccess-groups": "איר האט נישט קיין רעכטן אַרויפֿלאָדן טעקעס אויף דער וויקי.",
@@ -2973,5 +3004,27 @@
"expand_templates_xml_output": "XML אויסגאָב",
"expand_templates_ok": "אויספֿירן",
"expand_templates_remove_comments": "אראפנעמען הערות",
- "expand_templates_preview": "פֿאראויסשטעלונג"
+ "expand_templates_preview": "פֿאראויסשטעלונג",
+ "special-characters-group-latin": "לאַטייניש",
+ "special-characters-group-latinextended": "לאַטייַן פֿאַרברייטערט",
+ "special-characters-group-ipa": "אינטערנאַציאנאלער פֿאנעטישער אלפֿאבעט (IPA)",
+ "special-characters-group-symbols": "סימבאלן",
+ "special-characters-group-greek": "גריכיש",
+ "special-characters-group-cyrillic": "ציריליש",
+ "special-characters-group-arabic": "אראביש",
+ "special-characters-group-arabicextended": "פארברייטערטע אראביש",
+ "special-characters-group-persian": "פּערסיש",
+ "special-characters-group-hebrew": "העברעיש",
+ "special-characters-group-bangla": "בענגאַליש",
+ "special-characters-group-tamil": "טאַמיליש",
+ "special-characters-group-telugu": "טעלוגו",
+ "special-characters-group-sinhala": "סינהאַלאַ",
+ "special-characters-group-gujarati": "גודזשאַראַטי",
+ "special-characters-group-devanagari": "דעוואַנאַגאַרי",
+ "special-characters-group-thai": "טהאי",
+ "special-characters-group-lao": "לאַאטיש",
+ "special-characters-group-khmer": "כמער",
+ "special-characters-title-endash": "ען טירע",
+ "special-characters-title-emdash": "עם טירע",
+ "special-characters-title-minus": "מינוס"
}
diff --git a/languages/i18n/yo.json b/languages/i18n/yo.json
index 842cc1df..4106e1b8 100644
--- a/languages/i18n/yo.json
+++ b/languages/i18n/yo.json
@@ -5,7 +5,8 @@
"Kaganer",
"Meno25",
"Urhixidur",
- "아라"
+ "아라",
+ "Macofe"
]
},
"tog-underline": "Ìfàlàsábẹ́ àwọn àjápọ̀:",
@@ -483,7 +484,6 @@
"passwordreset-emailsent-capture": "E-mail àtúntò ọ̀rọ̀ìpamọ́ kan ti jẹ́ fífiránṣẹ́. Òhun nìyí nísàlẹ̀.",
"passwordreset-emailerror-capture": "E-mail ìyípadà ọ̀rọ̀ìpamọ́ jẹ́ dídá, òhun lóhàn nísàlẹ̀ yìí, sùgbọ́n ìfiránṣẹ́ rẹ̀ sí {{GENDER:$2|oníṣe}} náà kùnà: $1",
"changeemail": "Ìyípadà àdírẹ̀sì E-mail",
- "changeemail-header": "Ìyípadà àdírẹ̀sì e-mail àkópamọ́",
"changeemail-text": "Ẹ parí fọ́ọ̀mù yìí láti ṣèyípadà àdírẹ̀sì e-mail yín. Ẹ gbọ́dọ̀ tẹ ọ̀rọ̀ìpamọ́ yín láti ṣèmúdájú ìyípadà yìí.",
"changeemail-no-info": "Ẹ gbódọ̀ wọlé láti bósí ojúewé yìí tààrà.",
"changeemail-oldemail": "Àdírẹ̀sì E-mail ìsinsìnyí:",
@@ -491,7 +491,6 @@
"changeemail-none": "(kòsí)",
"changeemail-password": "Ọ̀rọ̀ìpamọ́ {{SITENAME}} yín:",
"changeemail-submit": "Ìyípadà E-mail",
- "changeemail-cancel": "Fagilé",
"bold_sample": "Ìkọ kedere",
"bold_tip": "Ìkọ kedere",
"italic_sample": "Ìkọ italiki",
@@ -741,7 +740,6 @@
"mergehistory-same-destination": "Ojúewé orísun àti ojúewé ìdópin kò gbọdọ̀ jẹ́ ìkannáà",
"mergehistory-reason": "Ìdíẹ̀:",
"mergelog": "Àkọọ́lẹ̀ ìdàpọ̀",
- "pagemerge-logentry": "[[$1]] ti jẹ́ dídàpọ̀ sínúu [[$2]] (àwọn àtúnyẹ̀wò títí dé $3)",
"revertmerge": "Ìdápadà ìdàpọ̀",
"mergelogpagetext": "Nísàlẹ̀ ni àtòjọ àwọn ìdàpọ̀ àìpẹ́ ìtàn ojúewé kan sínú òmíràn.",
"history-title": "Ìtàn àtúnyẹ̀wò fún \"$1\"",
@@ -788,7 +786,6 @@
"searchrelated": "tóbáramu",
"searchall": "gbogbo",
"showingresults": "Ìfihàn nísàlẹ̀ títí dé {{PLURAL:$1|èsì '''1'''|àwọn èsì '''$1'''}} láti ìbẹ̀rẹ̀ ní #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Èsì '''$1''' nínú ''''$3'''|Àwọn èsì '''$1 - $2''' nínú '''$3'''}} fún '''$4'''",
"search-nonefound": "Kò sí àwọn èsì kankan tóbáramu mọ́ ìtọrọ.",
"powersearch-legend": "Àwárí kíkúnrẹ́rẹ́",
"powersearch-ns": "Àwárí nínú orúkọàyè:",
@@ -1333,7 +1330,6 @@
"statistics": "Àwọn statistiki",
"statistics-header-pages": "Àwọn statistiki ojúewé",
"statistics-header-edits": "Àwọn statistiki àtúnṣe",
- "statistics-header-views": "Ẹ wo àwọn statístíkì",
"statistics-header-users": "Àwọn statistiki oníṣe",
"statistics-header-hooks": "Àwọn statistiki míràn",
"statistics-articles": "Àwọn ojúewé àkóónú",
@@ -1342,13 +1338,9 @@
"statistics-files": "Àwọn fáìlì ajẹ́rírùsókè",
"statistics-edits": "Àwọn iye àtúnṣe ojúewé láti ìgbà tí {{SITENAME}} ti bẹ̀rẹ̀",
"statistics-edits-average": "Iye àtúnṣe apínlàrin fún ojúewé kọ̀ọ̀kan",
- "statistics-views-total": "Àpapọ̀ iye ìwò",
- "statistics-views-total-desc": "Ìwò sí àwọn ojúewé tí kò sí àti àwọn ojúewé pàtàkì kò jẹ́ àmúpọ̀.",
- "statistics-views-peredit": "Iye ìwò fún àtúnṣe kọ̀ọ̀kan",
"statistics-users": "[[Special:ListUsers|Àwọn oníṣe]] ajẹ́fífilórúkọsílẹ̀",
"statistics-users-active": "Àwọn oníṣe agbéṣe",
"statistics-users-active-desc": "Àwọn oníṣe tí wọ́n ti ṣe ìgbéṣe kan ní {{PLURAL:$1|ọjọ́ kan|ọjọ́ $1}} sẹ́yìn",
- "statistics-mostpopular": "Àwọn ojúewé tí wọ́n jẹ́ wíwò jùlọ",
"pageswithprop": "Àwọn ojúewé tó ní ohun-ìní ojúewé",
"pageswithprop-legend": "Àwọn ojúewé tó ní ohun-ìní ojúewé",
"pageswithprop-text": "Ojúewé yìí ṣe àtòjọ àwọn ojúewé tó únlo ohun-ìní ojúewé pàtò kan.",
@@ -1386,7 +1378,6 @@
"uncategorizedtemplates": "Àwọn àdàkọ aláìlẹ́ka",
"unusedcategories": "Ẹ̀ka àìlò",
"unusedimages": "Faili àìlò",
- "popularpages": "Ojúewé tógbajúmọ̀",
"wantedcategories": "Àwọn ẹ̀ka wíwá",
"wantedpages": "Àwọn ojúewé àìsí",
"wantedpages-badtitle": "Àkọlé aláìníìbámu nínú ìtò èsì: $1",
@@ -1435,7 +1426,6 @@
"querypage-disabled": "Ojúewé pàtàkì yìí jẹ́ ìdálẹ́kun nítorí ìsiṣẹ́.",
"booksources": "Àwọn orísun ìwé",
"booksources-search-legend": "Àwáàrí fún áwọn ìwé ìtọ́ka",
- "booksources-go": "Lọ",
"booksources-text": "Nísàlẹ̀ ni àtòjọ àwọn àjápọ̀ mọ́ àwọn ibiìtakùn míràn tí wọ́n únta ìwé tuntun àti ìwé àtijọ́, wọ́n sì le ní ọ̀rọ̀ ẹ̀kúnrẹ́rẹ́ nípa àwọn ìwé tí ẹ únwá:",
"booksources-invalid-isbn": "ISBN náà kò dà bíi pé ó jẹ́ oníìbámu; ẹ yẹ̀ ẹ́ wò bóyá àsìṣe wà láti ibi tó jẹ́ kíkọ wá.",
"specialloguserlabel": "Olùṣe:",
@@ -1552,7 +1542,7 @@
"wlheader-enotif": "Ìfitónilétí e-mail wà ní gbígbàláyè.",
"wlheader-showupdated": "Àwọn ojúewé tí wọn ti yípadà látìgbà tí ẹ ṣàbẹ̀wò wọn gbẹ̀yìn jẹ́ fífihàn ní ''kedere'''",
"wlnote": "Lábẹ́ {{PLURAL:$1|ni àtúnṣe tó gbẹ̀yìn|ni àwọn àtúnṣe '''$1''' tí wọn gbẹ̀yìn}} ní {{PLURAL:$2|wákàtí kan|wákàtí '''$2'''}} sẹ́yìn, títí dí ọjọ́ $3, $4.",
- "wlshowlast": "Ìfihàn wákàtí $1 sẹ́yìn ọjọ́ $2 sẹ́yìn $3",
+ "wlshowlast": "Ìfihàn wákàtí $1 sẹ́yìn ọjọ́ $2 sẹ́yìn",
"watchlist-options": "Àṣàyàn ìmójútọ́",
"watching": "Ó ún mójútó...",
"unwatching": "Jíjáwọ́ ìmójútó...",
@@ -1599,7 +1589,6 @@
"delete-toobig": "Ojúewé yìí ní ìtàn àtúnṣe tótóbi, ó pọ̀ ju {{PLURAL:$1|àtúnyẹ̀wò}} $1 lọ.\nÌparẹ́ irú àwọn ojúewé báyìí ti jẹ́ dídílọ́nà láti dènà àsìṣe ìdílọ́wọ́ sí {{SITENAME}}.",
"delete-warning-toobig": "Ojúewé yìí ní ìtàn àtúnṣe tótóbi, ó pọ̀ ju {{PLURAL:$1|àtúnyẹ̀wò}} $1 lọ.\nÌparẹ́ rẹ̀ le dí ìsiṣẹ́ ibùdó dátà lọ́wọ́ lórí {{SITENAME}}; ẹ ṣè fura.",
"rollback": "Yí àwọn àtúnṣe sẹ́yìn",
- "rollback_short": "Yísẹ́yìn",
"rollbacklink": "yísẹ́yìn",
"rollbacklinkcount": "ìyíṣẹ́yìn {{PLURAL:$1|àtúnṣe|àtúnṣe}} $1",
"rollbacklinkcount-morethan": "ìyíṣẹ́yìn {{PLURAL:$1|àtúnṣe|àtúnṣe}} tó ju $1 lọ",
@@ -1968,7 +1957,6 @@
"import": "Ìkówọlé àwọn ojúewé",
"importinterwiki": "Ìkówọlé láàrin àwọn wiki",
"import-interwiki-text": "Ẹ mú wiki àti àkọlé ojúewé tí ẹ fẹ́ kówọlé.\nỌjọ́ àti orúkọ olùtúnṣe àtúnyẹ̀wò kò ní yàtọ̀.\nGbogbo ìkówọlé láàrin wiki jẹ́ kíkọsílẹ̀ sí [[Special:Log/import|àkọọ́lẹ̀ ìkówọlé]].",
- "import-interwiki-source": "Orísún wiki/ojúewé:",
"import-interwiki-history": "Ṣe àwòkọ gbogbo àwọn àtúnyẹ̀wò ìtàn fún ojúewé yìí",
"import-interwiki-templates": "Ìmúpọ̀ gbogbo àwọn àdàkọ",
"import-interwiki-submit": "Ìkówọlé",
@@ -2009,16 +1997,12 @@
"import-rootpage-nosubpage": "Orúkọàyè \"$1\" fún ipasẹ̀ ojúewé kò gba ojúewé abẹ́ ní àyè.",
"importlogpage": "Ìgbéwọlé àkọọ́lẹ̀",
"importlogpagetext": "Ìkówọlé olùmójútó àwọn ojúewé pẹ̀lú ìtàn àtúnṣe láti àwọn wiki míràn.",
- "import-logentry-upload": "ìkówọlé [[$1]] pẹ̀lú ìrùsókè fáìlì",
"import-logentry-upload-detail": "{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1",
- "import-logentry-interwiki": "mú $1 wá láti inú wiki míràn",
"import-logentry-interwiki-detail": "{{PLURAL:$1|Àtúnyẹ̀wò|Àwọn àtúnyẹ̀wò}} $1 láti $2",
"javascripttest": "Ìdánwò JavaScript",
- "javascripttest-title": "Únṣe ìdánwò $1",
"javascripttest-pagetext-noframework": "Ojúewé yìí jẹ́ dídásílẹ̀ fún ṣíṣe ìdánwò JavaScript.",
"javascripttest-pagetext-skins": "Ẹ mú irú ojú ara tí ẹ fẹ́ lò láti ṣe àdánwò náà:",
"javascripttest-qunit-intro": "Ẹ wo [$1 ìwé aṣàlàyé ìdánwò] ní mediawiki.org.",
- "javascripttest-qunit-heading": "Ibi ìdánwò QUnit JavaScript MediaWiki",
"tooltip-pt-userpage": "Ojúewé oníṣe yín",
"tooltip-pt-anonuserpage": "Ojúewé oníṣe fún àdírẹ́ẹ̀sì IP tí ẹ únlò láti ṣàtúnṣe",
"tooltip-pt-mytalk": "Ojúewé ọ̀rọ̀ yín",
@@ -2116,7 +2100,6 @@
"pageinfo-robot-policy": "Ipò ẹ̀rọ ìṣàwárí",
"pageinfo-robot-index": "Ṣíṣeéwárí",
"pageinfo-robot-noindex": "Kò ṣeéwárí",
- "pageinfo-views": "Iye àwọn ìwò",
"pageinfo-watchers": "Iye àwọn olùṣọ́ ojúewé",
"pageinfo-redirects-name": "Àwọn àtúnjúwe sí ojúewé yìí",
"pageinfo-subpages-name": "Àwọn ojúewé tó wà lábẹ́ ojúewé yìí",
@@ -2425,7 +2408,6 @@
"exif-urgency-normal": "Déédé ($1)",
"exif-urgency-low": "Kúkúrú ($1)",
"exif-urgency-high": "Gíga ($1)",
- "watchlistall2": "gbogbo",
"namespacesall": "gbogbo",
"monthsall": "gbogbo",
"confirmemail": "Ṣè'múdájú àdírẹ́ẹ̀sì e-mail",
@@ -2491,7 +2473,6 @@
"watchlisttools-edit": "Ìwò àti àtúnṣe ìmójútó",
"watchlisttools-raw": "Ẹ ṣ'àtúnṣe àkójọ ìmójútó látìbẹ̀rẹ̀",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ọ̀rọ̀]])",
- "unknown_extension_tag": "Àlẹ̀mọ́ ìfàgùn àìdámọ̀ \"$1\"",
"duplicate-defaultsort": "'''Ìkìlọ̀:''' Bọ́tìnì ìtò àkọ́kọ́ṣe \"$2\" dípò Bọ́tìnì ìtò àkọ́kọ́ṣe \"$1\" tẹ́lẹ̀.",
"version": "Àtẹ̀jáde",
"version-extensions": "Àwọn ìfàgùn kíkànsínú",
@@ -2502,7 +2483,7 @@
"version-other": "Òmíràn",
"version-hooks": "Àwọn hook",
"version-hook-name": "Orúkọ hook",
- "version-version": "(Àtẹ̀jáde $1)",
+ "version-version": "($1)",
"version-license": "Ìwé àṣẹ",
"version-poweredby-credits": "Agbára ìṣiṣẹ́ wiki yìí wá látọwọ́ '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
"version-poweredby-others": "àwọn mìíràn",
@@ -2610,19 +2591,20 @@
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|yí}} ọmọ ẹgbẹ́ padà fún $3",
"logentry-rights-autopromote": "$1 jẹ́ {{GENDER:$2|gbígbénípòga}} nífúnraẹni láti $4 sí $5",
"rightsnone": "(kòsí)",
+ "revdelete-summary": "àkótán àtúnṣe",
+ "feedback-adding": "Ìfikún ìdáhùn sí ojúewé...",
+ "feedback-bugcheck": "Ó dáa bẹ́ẹ̀! Ẹ rí pé kò í ṣe ìkan nínú [$1 àwọn ìsòrò tí a ti mọ̀ tẹ́lẹ̀].",
+ "feedback-bugnew": "Mo ti yẹ́wò. Fi ìsòrò sùn",
"feedback-bugornote": "Tí ẹ bá ti ṣetán láti ṣàlàyé ìsòrò iṣẹ́ẹ̀rọ́ lẹ́ẹ̀kúnrẹ́rẹ́ ẹ jọ̀wọ́ [$1 ẹ sọ irú ìsòro náà]\nBíbẹ̀ẹ̀kọ́, ẹ le lo fọ́ọ̀mù ìsàlẹ̀. Ẹjọ́ yín yíò jẹ́ fífikún mọ́ ojúewé \"[$3 $2]\", bákannáà mọ́ orúkọ oníṣe yín.",
- "feedback-subject": "Oríọ̀rọ̀:",
- "feedback-message": "Ìránṣẹ́:",
"feedback-cancel": "Fagilé",
- "feedback-submit": "Ìfisílẹ̀ ìdáhùn",
- "feedback-adding": "Ìfikún ìdáhùn sí ojúewé...",
+ "feedback-close": "Ṣetán",
"feedback-error1": "Àsìṣe: Èsì aláìdámọ́ látọ̀dọ̀ API",
"feedback-error2": "Àsìṣe: Àtúnṣe kùnà",
"feedback-error3": "Àsìṣe: Kò sí ìdáhùn látọ̀dọ̀ API",
+ "feedback-message": "Ìránṣẹ́:",
+ "feedback-subject": "Oríọ̀rọ̀:",
+ "feedback-submit": "Fúnsílẹ̀",
"feedback-thanks": "Adúpẹ́! Ìdáhùn yín ti jẹ́ fífikún sí ojúewé \"[$2 $1]\".",
- "feedback-close": "Ṣetán",
- "feedback-bugcheck": "Ó dáa bẹ́ẹ̀! Ẹ rí pé kò í ṣe ìkan nínú [$1 àwọn ìsòrò tí a ti mọ̀ tẹ́lẹ̀].",
- "feedback-bugnew": "Mo ti yẹ́wò. Fi ìsòrò sùn",
"searchsuggest-search": "Ṣàwárí",
"searchsuggest-containing": "tó ní...",
"api-error-badaccess-groups": "Ẹ kò ní àṣẹ láti ru fáìlì wọlé sí orí wiki yìí.",
@@ -2675,5 +2657,21 @@
"duration-centuries": "{{PLURAL:$1|ọ̀rúndún|ọ̀rúndún}} $1",
"duration-millennia": "{{PLURAL:$1|ẹ̀rúndún|ẹ̀rúndún}} $1",
"rotate-comment": "Àwòrán jẹ́ mímúyípo ní {{PLURAL:$1|degree|ìyí}} $1 bíi ọwọ́ ago",
- "expand_templates_preview": "Àkọ́yẹ̀wò"
+ "expand_templates_preview": "Àkọ́yẹ̀wò",
+ "special-characters-group-latin": "Látìnì",
+ "special-characters-group-latinextended": "Látìnì títóbi",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "Àwọn àmì ìdámọ̀",
+ "special-characters-group-greek": "Gíríkì",
+ "special-characters-group-cyrillic": "Kíúrílíkì",
+ "special-characters-group-arabic": "Lárúbáwá",
+ "special-characters-group-persian": "Èdè Pẹrsíà",
+ "special-characters-group-hebrew": "Hébérù",
+ "special-characters-group-bangla": "Bánglà",
+ "special-characters-group-telugu": "Tèlúgù",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati",
+ "special-characters-group-thai": "Thai",
+ "special-characters-group-lao": "Lao",
+ "special-characters-group-khmer": "Khmer"
}
diff --git a/languages/i18n/yue.json b/languages/i18n/yue.json
index 4b0d9767..d1a97840 100644
--- a/languages/i18n/yue.json
+++ b/languages/i18n/yue.json
@@ -20,7 +20,10 @@
"Ktchankt",
"Kc kennylau",
"Mywood",
- "Impersonator 1"
+ "Impersonator 1",
+ "Cedric tsan cantonais",
+ "Liuxinyu970226",
+ "Yueman"
]
},
"tog-underline": "連結加底線:",
@@ -37,6 +40,7 @@
"tog-watchdefault": "將我修改嘅頁同檔案加入監視清單",
"tog-watchmoves": "將我移動嘅頁同檔案加入監視清單",
"tog-watchdeletion": "將我刪除嘅頁同檔案加入監視清單",
+ "tog-watchrollback": "將我反轉過嘅頁加落監視清單",
"tog-minordefault": "預設全部編輯做小修改",
"tog-previewontop": "喺修改欄上方顯示預覽",
"tog-previewonfirst": "第一次修改時顯示預覽",
@@ -47,7 +51,7 @@
"tog-shownumberswatching": "顯示有幾多人監視",
"tog-oldsig": "現有簽名:",
"tog-fancysig": "將簽名以維基字對待(冇自動連結)",
- "tog-uselivepreview": "用即時預覽(實驗緊)",
+ "tog-uselivepreview": "用即時預覽",
"tog-forceeditsummary": "我冇入修改註解時通知我",
"tog-watchlisthideown": "響監視清單度隱藏我嘅編輯",
"tog-watchlisthidebots": "響監視清單度隱藏機械人嘅編輯",
@@ -63,7 +67,7 @@
"tog-prefershttps": "簽到後繼續用加密連線",
"underline-always": "全部",
"underline-never": "永不",
- "underline-default": "瀏覽器預設",
+ "underline-default": "瀏覽器或瀏覽器膚色預設",
"editfont-style": "編輯區字型樣式:",
"editfont-default": "瀏覽器預設",
"editfont-monospace": "固定間距字型",
@@ -147,11 +151,13 @@
"listingcontinuesabbrev": "續",
"index-category": "做咗索引嘅版",
"noindex-category": "未做索引嘅版",
+ "broken-file-category": "有失效文件鏈接嘅版",
"about": "關於",
"article": "內容頁",
"newwindow": "(響新視窗度打開)",
"cancel": "取消",
"moredotdotdot": "更多...",
+ "morenotlisted": "爾張清單重未完成。",
"mypage": "版",
"mytalk": "傾偈",
"anontalk": "同呢個 IP 傾偈",
@@ -220,6 +226,7 @@
"otherlanguages": "第啲語言",
"redirectedfrom": "(由$1跳轉過來)",
"redirectpagesub": "跳轉頁",
+ "redirectto": "跳轉去:",
"lastmodifiedat": "呢一頁嘅最後修改係響$1 $2。",
"viewcount": "呢一頁已經有$1人次睇過。",
"protectedpage": "受保護頁",
@@ -232,6 +239,7 @@
"pool-queuefull": "隊池已滿",
"pool-errorunknown": "未知嘅錯誤",
"pool-servererror": "用唔到程序計數服務 ($1)。",
+ "poolcounter-usage-error": "用法出錯:$1",
"aboutsite": "關於{{SITENAME}}",
"aboutpage": "Project:關於",
"copyright": "除非另外講明,響呢版度嘅內容係根據$1嘅條款發佈。",
@@ -241,6 +249,7 @@
"disclaimers": "免責聲明",
"disclaimerpage": "Project:一般免責聲明",
"edithelp": "編輯協助",
+ "helppage-top-gethelp": "幫手",
"mainpage": "頭版",
"mainpage-description": "頭版",
"policy-url": "Project:政策",
@@ -272,6 +281,9 @@
"hidetoc": "收埋",
"collapsible-collapse": "摺埋",
"collapsible-expand": "展開",
+ "confirmable-confirm": "�確唔確定?",
+ "confirmable-yes": "確定。",
+ "confirmable-no": "唔確定。",
"thisisdeleted": "睇下定係還原$1?",
"viewdeleted": "去睇$1?",
"restorelink": "$1次已刪除嘅編輯",
@@ -316,10 +328,13 @@
"readonly_lag": "當從伺服器追緊主伺服器時,資料庫會自動被鎖",
"internalerror": "內部錯誤",
"internalerror_info": "內部錯誤: $1",
+ "internalerror-fatal-exception": "嚴重例外類型「$1」",
"filecopyerror": "檔案 \"$1\" 抄唔到去 \"$2\"。",
"filerenameerror": "檔案 \"$1\" 唔改得做 \"$2\"。",
"filedeleteerror": "檔案 \"$1\" 唔刪得。",
"directorycreateerror": "目錄 \"$1\" 開唔到。",
+ "directoryreadonlyerror": "\"$1\"係唯讀文件,無得編輯。",
+ "directorynotreadableerror": "讀唔到\"$1\"。",
"filenotfound": "檔案 \"$1\" 搵唔到。",
"unexpected": "意外數值。 \"$1\"=\"$2\"。",
"formerror": "錯誤:表格交唔到",
@@ -341,7 +356,8 @@
"viewsourcetext": "你可以睇吓或者複製呢一頁嘅原始碼:",
"viewyourtext": "你可以睇同複製呢版入面<strong>由你改</strong>嘅原碼:",
"protectedinterface": "呢一頁提供軟件嘅介面文字,呢一頁已經保護咗以預防濫用。\n要加或者改所有維基站嘅翻譯,請去 [//translatewiki.net/ translatewiki.net]嘅 MediaWiki 本地化項目。",
- "editinginterface": "'''警告:'''你而家編輯緊嘅呢一個用嚟提供介面文字嘅頁面。響呢一頁嘅更改會影響到其他用戶使用中嘅介面外觀。要加或者改所有維基站嘅翻譯,請去 [//translatewiki.net/ translatewiki.net]嘅 MediaWiki 本地化項目。",
+ "editinginterface": "'''警告''':閣下而家編輯緊嘅係為爾隻軟件提供介面文字嘅版。\n改爾一版會自動改埋爾個維基嘅其他用戶用緊嘅介面嘅文字。",
+ "translateinterface": "要加或者改所有維基項目嘅翻譯,請去MediaWiki嘅本地化項目:[//translatewiki.net/ translatewiki.net]。",
"cascadeprotected": "呢一版已經保護咗唔能夠編輯,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,當中啟用咗\"連串\"保護選項來保護嗰一版: $2",
"namespaceprotected": "你無權編輯響'''$1'''空間名裏面嘅呢一版。",
"customcssprotected": "你無權改呢版CSS,因為佢包含其他用戶嘅個人設定。",
@@ -356,7 +372,7 @@
"invalidtitle-knownnamespace": "名域 \"$2\" 同版名 \"$3\" 無效嘅標題",
"invalidtitle-unknownnamespace": "未知名域號碼 \"$1\" 同版名 \"$2\" 無效嘅標題",
"exception-nologin": "未簽到",
- "exception-nologin-text": "請[[Special:Userlogin|簽到]]之後先至睇或者改呢版。",
+ "exception-nologin-text": "請[[Special:Userlogin|簽到]]之後先至睇或者改爾版。",
"exception-nologin-text-manual": "請$1之後先至睇或者改呢版。",
"virus-badscanner": "壞設定: 未知嘅病毒掃瞄器: ''$1''",
"virus-scanfailed": "掃瞄失敗 (代碼 $1)",
@@ -435,6 +451,7 @@
"wrongpassword": "密碼唔啱,麻煩你再試多次。",
"wrongpasswordempty": "你都未入密碼,唔該再試多次啦。",
"passwordtooshort": "你嘅密碼最少要有$1個半形字元。",
+ "passwordtoolong": "密碼唔可以長過{{PLURAL:$1|1個字元|$1個字元}}。",
"password-name-match": "你嘅密碼一定要同你嘅用戶名唔一樣。",
"password-login-forbidden": "呢個用戶名同密碼嘅利用係被禁止嘅。",
"mailmypassword": "重設密碼",
@@ -461,6 +478,7 @@
"createaccount-text": "有人響{{SITENAME}}度用咗你個電郵開咗個名叫 \"$2\" 嘅新戶口 ($4),密碼係 \"$3\" 。你應該而家登入,改埋個密碼。\n\n如果個戶口係開錯咗嘅話,你可以唔埋呢篇信。",
"login-throttled": "你已經試咗太多次簽到動作。\n請等$1再試過。",
"login-abort-generic": "你簽到失敗",
+ "login-migrated-generic": "由於閣下嘅用戶已經搬走徂,因此閣下嘅爾個用戶名已經唔存在。",
"loginlanguagelabel": "語言:$1",
"suspicious-userlogout": "你去登出嘅要求已經拒絕咗,因為佢可能由壞咗嘅瀏覽器或者快取代理傳送。",
"createacct-another-realname-tip": "真名可以唔填。\n如果你畀埋佢,有需要嘅時候會用佢來標示你嘅工夫。",
@@ -505,12 +523,13 @@
"passwordreset-capture-help": "如果揀呢度,電郵連臨時密碼金向你顯示,同時會送畀用戶。",
"passwordreset-email": "電郵地址:",
"passwordreset-emailtitle": "{{SITENAME}}嘅戶口資料",
+ "passwordreset-emailtext-ip": "有人(可能係閣下自己,來自IP地址$1)請求更改閣下喺{{SITENAME}}($4)嘅密碼。同爾個電子郵件有關聯嘅用戶包括:\n\n$2\n\n{{PLURAL:$3|爾個|爾啲}}臨時密碼會喺{{$5}}日之後失效。\n\n如果係閣下自己請求改密碼嘅,請馬上登錄{{SITENAME}}並且更改密碼。如果閣下諗返起自己個密碼,或者根本無申請過改密碼嘅話,請忽略爾條訊息,繼續用返舊密碼。",
+ "passwordreset-emailtext-user": "{{SITENAME}}用戶$1請求更改閣下喺{{SITENAME}}道嘅密碼$4。同爾個電子郵件有關聯嘅用戶包括:\n\n$2\n\n{{PLURAL:$3|爾個|爾啲}}臨時密碼會喺{{$5}}日之後失效。\n\n如果係閣下自己請求改密碼嘅,請馬上登錄{{SITENAME}}並且更改密碼。如果閣下諗返起自己個密碼,或者根本無申請過改密碼嘅話,請忽略爾條訊息,繼續用返舊密碼。",
"passwordreset-emailelement": "用戶名:$1\n臨時密碼:$2",
"passwordreset-emailsent": "密碼重設電郵經已送出。",
"passwordreset-emailsent-capture": "密碼重設電郵經已送出,下面有顯示。",
"passwordreset-emailerror-capture": "密碼重設電郵經已送出,下面有顯示,但送畀{{GENDER:$2|user}}時失敗: $1",
"changeemail": "改電郵地址",
- "changeemail-header": "改戶口電郵地址",
"changeemail-text": "填呢份表去改戶口電郵地址。你需要入密碼確認改動。",
"changeemail-no-info": "你一定要簽到咗去直接入來呢一版。",
"changeemail-oldemail": "而家個電郵地址:",
@@ -518,7 +537,6 @@
"changeemail-none": "(冇)",
"changeemail-password": "你{{SITENAME}}個密碼:",
"changeemail-submit": "轉電郵",
- "changeemail-cancel": "取消",
"changeemail-throttled": "你試咗登入太多次,請喺$1後再試過。",
"resettokens": "重設密匙",
"resettokens-text": "您可以重設有關你戶口私隱資料嘅密匙。\n\n如果你唔小心洩漏密匙,或者戶口畀人入侵,就要重設密匙。",
@@ -553,13 +571,16 @@
"preview": "預覽",
"showpreview": "顯示預覽",
"showdiff": "顯示差異",
- "anoneditwarning": "'''警告:'''你重未登入。你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。",
+ "blankarticle": "<strong>警告</strong>:閣下開緊爾版係空白嘅,撳多次「{{int:savearticle}}」就會開一個乜都無嘅版(可能被視為破壞)。",
+ "anoneditwarning": "'''警告:'''閣下重未登入。閣下嘅 IP 地址會喺爾一版嘅修訂歷史裡邊記錄落嚟。",
"anonpreviewwarning": "''你重未登入,你嘅 IP 位址會喺呢個頁面嘅修訂歷史中記錄落嚟。''",
"missingsummary": "'''提醒:''' 你未提供編輯摘要。如果你再撳多一下「{{int:savearticle}}」嘅話,咁你儲存嘅編輯就會無摘要。",
+ "selfredirect": "<strong>警告:</strong> 你個跳轉彈返去自己度。\n你可能設錯咗跳轉目標,或者改錯咗版。\n如果你再撳多「{{int:savearticle}}」一下,就會照幫你開呢個跳轉。",
"missingcommenttext": "請輸入一個註解。",
"missingcommentheader": "'''提醒:'''你響呢個註解度並無提供一個主題/標題。如果你再撳一次「{{int:savearticle}}」,你嘅編輯就會無題。",
"summary-preview": "摘要預覽:",
"subject-preview": "標題/頭條預覽:",
+ "previewerrortext": "預覽你嘅修改嗰陣出錯。",
"blockedtitle": "用戶已經封鎖",
"blockedtext": "你嘅用戶名或者 IP 位址已經被 $1 封咗。\n\n呢次封鎖係由$1所封嘅。當中嘅原因係''$2''。\n\n* 呢次封鎖嘅開始時間係:$8\n* 呢次封鎖嘅到期時間係:$6\n* 對於被封鎖者:$7\n\n你可以聯絡 $1 或者其他嘅[[{{MediaWiki:Grouppage-sysop}}|管理員]],討論呢次封鎖。\n除非你已經響你嘅[[Special:Preferences|戶口喜好設定]]入面設定咗有效嘅電郵地址,否則你係唔可以用「電郵呢個用戶」嘅功能。當設定咗一個有效嘅電郵地址之後,呢個功能係唔會封鎖嘅。\n\n你現時嘅 IP 位址係 $3 ,而個封鎖 ID 係 #$5。 請你喺你嘅查詢都註明以上封鎖嘅資料。",
"autoblockedtext": "你嘅IP地址已經被自動封鎖,由於之前嘅另一位用戶係畀$1封咗。\n而封鎖嘅原因係:\n\n:''$2''\n\n* 呢次封鎖嘅開始時間係:$8\n* 呢次封鎖嘅到期時間係:$6\n* 對於被封鎖者:$7\n\n你可以聯絡 $1 或者其他嘅[[{{MediaWiki:Grouppage-sysop}}|管理員]],討論呢次封鎖。\n\n除非你已經響你嘅[[Special:Preferences|戶口喜好設定]]入面設定咗有效嘅電郵地址,否則你係唔可以用「電郵呢個用戶」嘅功能。當設定咗一個有效嘅電郵地址之後,呢個功能係唔會封鎖嘅。\n\n你現時用緊嘅 IP 地址係 $3,個封鎖 ID 係 #$5。 請喺你嘅查詢都註明呢個封鎖上面嘅資料。",
@@ -578,6 +599,7 @@
"anontalkpagetext": "----''呢度係匿名用戶嘅討論頁,佢可能係重未開戶口,或者佢重唔識開戶口。我哋會用數字表示嘅IP地址嚟代表佢。一個IP地址係可以由幾個用戶夾來用。如果你係匿名用戶,同覺得呢啲留言係同你冇關係嘅話,唔該去[[Special:UserLogin/signup|開一個新戶口]]或[[Special:UserLogin|登入]],避免喺以後嘅留言會同埋其它用戶混淆。''",
"noarticletext": "喺呢一頁而家並冇任何嘅文字,你可以喺其它嘅頁面中[[Special:Search/{{PAGENAME}}|搵呢一頁嘅標題]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搵有關嘅日誌],\n或者[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯呢一版]</span>。",
"noarticletext-nopermission": "呢一頁而家冇任何文字,你可以喺其它嘅頁面中[[Special:Search/{{PAGENAME}}|搵呢一頁嘅標題]],或者<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搵有關嘅日誌]</span>。",
+ "missing-revision": "The revision #$1 of the page named \"{{FULLPAGENAME}}\" does not exist.\n\nThis is usually caused by following an outdated history link to a page that has been deleted.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].\n\n《{{FULLPAGENAME}}》嘅編輯#$1唔存在。\n\n恁通常係因為一條過徂時嘅鏈接帶徂閣下去一個已經刪除徂嘅版。\n詳情請查閱[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪文紀錄]。",
"userpage-userdoesnotexist": "用戶戶口\"<nowiki>$1</nowiki>\"重未開。請響䦒/編輯呢版之前先檢查一下。",
"userpage-userdoesnotexist-view": "用戶戶口\"$1\"重未開。",
"blocked-notice-logextract": "呢位用戶而家被封鎖緊。\n下面有最近嘅封鎖紀錄以供參考:",
@@ -643,7 +665,17 @@
"postedit-confirmation-saved": "呢版經已儲存咗。",
"edit-already-exists": "唔可以開一新版。\n佢已經存在。",
"defaultmessagetext": "預設訊息文字",
- "editwarning-warning": "離開呢一版會令到你嘅修改唔見咗。\n你可以響你嘅喜好設定嘅\"{{int:prefs-editing}}\"小節度停用呢個警告。",
+ "invalid-content-data": "無效嘅內容資料",
+ "content-not-allowed-here": "「$1」唔可以輸入[[$2]]。",
+ "editwarning-warning": "離開爾一版會令到閣下嘅修改唔見咗。\n閣下可以喺喜好設定嘅\"{{int:prefs-editing}}\"小節度停用爾個警告。",
+ "editpage-notsupportedcontentformat-title": "唔支持爾種內容格式。",
+ "content-model-wikitext": "維基文字",
+ "content-model-text": "純文字",
+ "content-model-javascript": "JavaScript程式語言",
+ "content-model-css": "層疊樣式表",
+ "content-json-empty-object": "吉嘅嘢",
+ "content-json-empty-array": "吉嘅陣列",
+ "duplicate-args-category": "模用重複參數嘅嘅版面",
"expensive-parserfunction-warning": "警告: 呢一版有太多耗費嘅語法功能呼叫。\n\n佢應該少過$2次呼叫,佢而家係$1次呼叫。",
"expensive-parserfunction-category": "響版度有太多嘅耗費嘅語法功能呼叫",
"post-expand-template-inclusion-warning": "警告: 包含模大細太大。\n有啲模將唔會包含。",
@@ -656,15 +688,18 @@
"undo-success": "呢個編輯可以取消。請檢查一下個差異去確認呢個係你要去做嘅,跟住儲存下面嘅更改去完成編輯。",
"undo-failure": "呢個編輯唔能夠取消,由於同途中嘅編輯有衝突。",
"undo-norev": "呢個編輯唔能夠取消,由於佢唔存在或者刪除咗。",
+ "undo-nochange": "呢個編輯睇嚟經已一早取消咗。",
"undo-summary": "取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])所做嘅修訂 $1",
+ "undo-summary-username-hidden": "取消匿埋咗嘅用戶嘅修改版本 $1",
"cantcreateaccounttitle": "唔可以開新戶口",
"cantcreateaccount-text": "由呢個IP地址 ('''$1''') 開嘅新戶口已經被[[User:$3|$3]]封鎖。\n\n當中俾$3封鎖嘅原因係''$2''",
+ "cantcreateaccount-range-text": "由呢個IP地址範圍'''$1'''(包括你個IP '''$4''')開嘅新戶口已經畀[[User:$3|$3]]封鎖咗。\n\n$3畀嘅理由係''$2''",
"viewpagelogs": "睇呢頁嘅日誌",
"nohistory": "呢版冇歷史。",
"currentrev": "最新嘅修訂",
"currentrev-asof": "響 $1 嘅最新修訂",
"revisionasof": "喺$1嘅修訂",
- "revision-info": "喺$1嘅修訂;修訂自$2",
+ "revision-info": "喺$1由$2嘅修訂 $7",
"previousrevision": "←之前嘅修訂",
"nextrevision": "新啲嘅修訂→",
"currentrevisionlink": "最新嘅修訂版本",
@@ -676,7 +711,7 @@
"histlegend": "選擇唔同版本:響兩個唔同版本嘅圓框分別撳一下,再撳最底的「比較被選修訂」掣以作比較。<br />\n說明:'''({{int:cur}})'''= 同最新修訂版本嘅差別,'''({{int:last}})'''= 同前一個修訂版本嘅差別,'''{{int:minoreditletter}}''' = 小修改。",
"history-fieldset-title": "瀏覽歷史",
"history-show-deleted": "只顯示刪除咗嘅",
- "histfirst": "最早",
+ "histfirst": "最舊",
"histlast": "最新",
"historysize": "($1 {{PLURAL:$1|byte|bytes}})",
"historyempty": "(空)",
@@ -684,21 +719,21 @@
"history-feed-description": "響哩個wiki嘅哩一頁嘅修訂歷史",
"history-feed-item-nocomment": "$1 響 $2",
"history-feed-empty": "要求嘅頁面並唔存在。\n佢可能響哩個 wiki 度刪除咗或者改咗名。\n試吓[[Special:Search|響哩個wiki度搵]]有關新頁面嘅資料。",
- "rev-deleted-comment": "(評論已經移除咗)",
+ "rev-deleted-comment": "(編輯摘要已經移除咗)",
"rev-deleted-user": "(用戶名已經移除咗)",
- "rev-deleted-event": "(日誌動作已經移除咗)",
+ "rev-deleted-event": "(日誌詳情已經移除咗)",
"rev-deleted-user-contribs": "[用戶名或IP地址拎走咗 - 響貢獻度隱藏咗編輯]",
"rev-deleted-text-permission": "呢頁嘅修訂已經被'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
- "rev-deleted-text-unhide": "呢頁嘅修訂已經被'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。\n作為管理員,如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
- "rev-suppressed-text-unhide": "呢頁嘅修訂已經被'''廢止咗'''。\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。\n作為管理員,如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
- "rev-deleted-text-view": "呢頁嘅修訂已經'''洗咗'''。\n作為嘅管理員,你可以去睇吓佢;\n喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
- "rev-suppressed-text-view": "呢頁嘅修訂已經'''廢止咗'''。\n作為嘅管理員,你可以去睇吓佢;\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。",
+ "rev-deleted-text-unhide": "呢頁嘅修訂已經被'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
+ "rev-suppressed-text-unhide": "呢頁嘅修訂已經被'''廢止咗'''。\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
+ "rev-deleted-text-view": "呢頁嘅修訂已經'''洗咗'''。\n你可以去睇吓佢;\n喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
+ "rev-suppressed-text-view": "呢頁嘅修訂已經'''廢止咗'''。\n你可以去睇吓佢;\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。",
"rev-deleted-no-diff": "因為其中一次修訂'''洗咗''',你唔可以睇呢個差異。\n響[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]度可以搵到更多嘅資料。",
"rev-suppressed-no-diff": "由於呢頁嘅其中一次修訂已經'''刪除咗''',你唔可以睇呢次修訂。",
- "rev-deleted-unhide-diff": "呢頁嘅其中一次修訂已經'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。\n作為管理員,如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
- "rev-suppressed-unhide-diff": "呢頁嘅其中一次修訂已經'''廢止咗'''。\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。\n作為管理員,如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
- "rev-deleted-diff-view": "呢個差異嘅其中一次修訂已經'''刪除咗'''。\n作為管理員你可以去睇呢個差異;喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
- "rev-suppressed-diff-view": "呢個差異嘅其中一次修訂已經'''廢止咗'''。\n作為管理員你可以去睇呢個差異;喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。",
+ "rev-deleted-unhide-diff": "呢頁嘅其中一次修訂已經'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
+ "rev-suppressed-unhide-diff": "呢頁嘅其中一次修訂已經'''廢止咗'''。\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
+ "rev-deleted-diff-view": "呢個差異嘅其中一次修訂已經'''刪除咗'''。\n你可以去睇呢個差異;喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
+ "rev-suppressed-diff-view": "呢個差異嘅其中一次修訂已經'''廢止咗'''。\n你可以去睇呢個差異;喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。",
"rev-delundel": "顯示/隱藏",
"rev-showdeleted": "顯示",
"revisiondelete": "刪除/反刪除修訂",
@@ -707,19 +742,25 @@
"revdelete-no-file": "指定嘅檔案未存在。",
"revdelete-show-file-confirm": "你係咪真係想去睇響$2 $3刪咗 \"$1\" 嘅檔案修訂?",
"revdelete-show-file-submit": "係",
- "logdelete-selected": "揀[[:$1]]嘅日誌事件:",
+ "revdelete-selected-text": "揀咗[[:$2]]嘅$1個版本:",
+ "revdelete-selected-file": "揀咗[[:$2]]嘅$1個檔案版本:",
+ "logdelete-selected": "揀咗嘅日誌事件:",
+ "revdelete-text-text": "刪咗嘅版本重喺修改紀錄度,但入面嘅內容唔畀公眾睇。",
+ "revdelete-text-file": "刪咗嘅檔案版本重喺檔案修改紀錄度,但入面嘅內容唔畀公眾睇。",
+ "logdelete-text": "刪咗嘅日誌項目重喺日誌度,但入面嘅內容唔畀公眾睇。",
+ "revdelete-text-others": "其他管理員可以睇收埋咗嘅內容同埋恢復返佢,除非設咗額外條件。",
"revdelete-confirm": "請確認你肯定去做嘅話,你就要明白到後果,同埋呢個程序符合[[{{MediaWiki:Policy-url}}|政策]]。",
- "revdelete-suppress-text": "壓制'''只'''應該響下面嘅情況之下進行:\n* 唔合適嘅個人資料\n*: ''屋企地址、電話號碼、社群保安號碼等。''",
+ "revdelete-suppress-text": "壓制'''只'''應該響下面嘅情況之下進行:\n* 可能係誹謗嘅資料\n* 唔合適嘅個人資料\n*: ''屋企地址、電話號碼、身份證號碼等。''",
"revdelete-legend": "設定可見性嘅限制",
- "revdelete-hide-text": "隱藏修訂嘅文字",
+ "revdelete-hide-text": "修訂嘅文字",
"revdelete-hide-image": "隱藏檔案內容",
- "revdelete-hide-name": "隱藏動作同目標",
- "revdelete-hide-comment": "隱藏編輯摘要",
- "revdelete-hide-user": "隱藏編輯者嘅用戶名/IP地址",
+ "revdelete-hide-name": "隱藏目標同參數",
+ "revdelete-hide-comment": "隱藏摘要",
+ "revdelete-hide-user": "編輯者嘅用戶名/IP地址",
"revdelete-hide-restricted": "同時壓制由操作員以及其他用戶的資料",
"revdelete-radio-same": "(唔改)",
- "revdelete-radio-set": "好",
- "revdelete-radio-unset": "唔好",
+ "revdelete-radio-set": "隱藏咗",
+ "revdelete-radio-unset": "顯示返",
"revdelete-suppress": "同時壓制由操作員以及其他用戶的資料",
"revdelete-unsuppress": "響已經恢復咗嘅修訂度移除限制",
"revdelete-log": "原因:",
@@ -738,13 +779,13 @@
"revdelete-no-change": "警告:響$1 $2嘅項目已經請求咗可見性設定。",
"revdelete-concurrent-change": "改緊響$1 $2嘅項目錯誤:當我哋試吓改佢嘅設定嗰陣,已經畀另一啲人改過。請檢查紀錄。",
"revdelete-only-restricted": "隱藏項目響$1 $2嘅項目:你唔可以廢止由管理員檢視,而唔同時再揀另外其中一個可見性選項。",
- "revdelete-reason-dropdown": "*常用刪除原因\n** 侵犯版權\n** 唔合適嘅個人資料",
+ "revdelete-reason-dropdown": "*常用刪除原因\n** 侵犯版權\n** 唔合適嘅言論或者個人資料\n** 唔合適嘅用戶名\n** 可能係誹謗嘅資料",
"revdelete-otherreason": "其它/附加的原因:",
"revdelete-reasonotherlist": "其它原因",
"revdelete-edit-reasonlist": "編輯刪除原因",
"revdelete-offender": "修訂著者:",
"suppressionlog": "廢止日誌",
- "suppressionlogtext": "下面係刪除同埋由操作員牽涉到內容封鎖嘅一覽。\n睇吓[[Special:IPBlockList|IP封鎖一覽]]去睇現時進行緊嘅禁止同埋封鎖表。",
+ "suppressionlogtext": "下面係刪除同埋由操作員牽涉到內容封鎖嘅一覽。\n睇吓[[Special:BlockList|封鎖一覽]]去睇現時進行緊嘅禁止同埋封鎖表。",
"mergehistory": "合併頁歷史",
"mergehistory-header": "呢一版可以畀你去合併一個來源頁嘅修訂記錄到另一個新頁。\n請確認呢次更改會繼續保留嗰版之前嘅歷史版。",
"mergehistory-box": "合併兩版嘅修訂:",
@@ -757,6 +798,7 @@
"mergehistory-empty": "無修訂可以合併",
"mergehistory-success": "[[:$1]]嘅$3次修訂已經成功噉合併到[[:$2]]。",
"mergehistory-fail": "歷史合併唔到,請重新檢查嗰一版同埋時間參數。",
+ "mergehistory-fail-toobig": "唔能夠合併編輯紀錄,因為入面超過咗$1個版本嘅上限。",
"mergehistory-no-source": "來源頁$1唔存在。",
"mergehistory-no-destination": "目的頁$1唔存在。",
"mergehistory-invalid-source": "來源頁一定要係一個有效嘅標題。",
@@ -766,15 +808,19 @@
"mergehistory-same-destination": "來源頁同目的頁唔可以一樣",
"mergehistory-reason": "原因:",
"mergelog": "合併日誌",
- "pagemerge-logentry": "合併咗[[$1]]去到[[$2]] (修訂截到$3)",
"revertmerge": "反合併",
"mergelogpagetext": "下面係一個最近由一版嘅修訂記錄合併到另一個嘅一覽。",
"history-title": "「$1」嘅修訂歷史",
+ "difference-title": "\"$1\" 版本嘅差別",
+ "difference-title-multipage": "「$1」同「$2」嘅差別",
"difference-multipage": "(版之間嘅差異)",
"lineno": "第$1行:",
"compareselectedversions": "比較被選嘅修訂",
"showhideselectedversions": "顯示/隱藏揀咗嘅修訂",
"editundo": "復原",
+ "diff-empty": "(無差別)",
+ "diff-multi-sameuser": "(無顯示同一用戶中途改嘅 $1 個版本)",
+ "diff-multi-otherusers": "(無顯示{{PLURAL:$2|另一個用戶|另外$2個用戶}}中途改嘅 $1 個版本)",
"diff-multi-manyusers": "(由$2位更多用戶所做嘅$1個中途修訂冇顯示到)",
"searchresults": "搵嘢結果",
"searchresults-title": "對\"$1\"嘅搵嘢結果",
@@ -783,12 +829,14 @@
"notextmatches": "冇頁面文字符合",
"prevn": "前$1",
"nextn": "後{{PLURAL:$1|$1}}",
+ "prev-page": "上一版",
+ "next-page": "下一版",
"prevn-title": "前$1項結果",
"nextn-title": "後$1項結果",
"shown-title": "每版顯示$1項結果",
"viewprevnext": "去睇 ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''響呢個wiki度有一版叫做\"[[:$1]]\"。'''",
- "searchmenu-new": "'''響呢個wiki度開呢版\"[[:$1]]\"!'''",
+ "searchmenu-new": "<strong>響呢個wiki度開呢版「[[:$1]]」!</strong>睇埋搵到嘅結果。",
"searchprofile-articles": "內容頁",
"searchprofile-images": "多媒體",
"searchprofile-everything": "全部嘢",
@@ -801,44 +849,58 @@
"search-result-category-size": "$1位成員 ($2個細類,$3個檔案)",
"search-redirect": "(跳轉 $1)",
"search-section": "(小節 $1)",
+ "search-category": "(類 $1)",
+ "search-file-match": "(夾啱樓案内容)",
"search-suggest": "你係唔係搵: $1",
"search-interwiki-caption": "姊妹計劃",
- "search-interwiki-default": "$1項結果:",
+ "search-interwiki-default": "嚟自$1嘅結果:",
"search-interwiki-more": "(更多)",
"search-relatedarticle": "有關",
"searchrelated": "有關",
"searchall": "全部",
"showingresults": "'自#'''$2'''起顯示最多'''$1'''個結果。",
- "showingresultsheader": "對'''$4'''嘅{{PLURAL:$5|第'''$1'''到第'''$3'''項結果|第'''$1 - $2'''項,共'''$3'''項結果}}",
+ "showingresultsinrange": "下面顯示由第 <strong>$2</strong> 個到第 <strong>$3</strong> 個入面嘅第 {{PLURAL:$1|<strong>$1</strong> 個結果}}:",
+ "search-showingresults": "{{PLURAL:$4|第 <strong>$1</strong>個結果,一共有 <strong>$3</strong> 個|第 <strong>$1 - $2</strong> 個結果,一共有 <strong>$3</strong> 個}}",
"search-nonefound": "響個查詢度無結果配合。",
"powersearch-legend": "進階搵嘢",
"powersearch-ns": "喺以下嘅空間名度搵:",
"powersearch-togglelabel": "检查:",
"powersearch-toggleall": "全部",
"powersearch-togglenone": "無",
+ "powersearch-remember": "記住今次選擇方便第時搵嘢用返",
"search-external": "出面搵嘢",
"searchdisabled": "{{SITENAME}}嘅搜尋功能已經關閉。你可以利用Google嚟搵。不過佢哋對{{SITENAME}}嘅索引可能唔係最新嘅。",
+ "search-error": "搵嘢嗰陣出錯:$1",
"preferences": "喜好設定",
"mypreferences": "自訂喜好",
"prefs-edits": "編輯數:",
+ "prefsnologintext2": "請簽到去改你嘅自訂喜好。",
"prefs-skin": "畫面",
"skin-preview": "預覽",
"datedefault": "冇喜好",
"prefs-labs": "實驗性嘅特色",
+ "prefs-user-pages": "用戶頁",
"prefs-personal": "用戶簡介",
"prefs-rc": "最近更改",
"prefs-watchlist": "監視清單",
+ "prefs-editwatchlist": "編輯監視清單",
+ "prefs-editwatchlist-label": "編輯監視清單入面嘅項目:",
+ "prefs-editwatchlist-edit": "睇下同刪走你個編輯監視清單入面嘅標題",
+ "prefs-editwatchlist-raw": "編輯原始監視清單",
+ "prefs-editwatchlist-clear": "清理你嘅監視清單",
"prefs-watchlist-days": "監視清單嘅顯示日數:",
- "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+ "prefs-watchlist-days-max": "最多 $1 日",
"prefs-watchlist-edits": "喺加強版監視清單度嘅最多顯示更改數:",
"prefs-watchlist-edits-max": "最大數量:1000",
"prefs-watchlist-token": "監視清單幣:",
"prefs-misc": "雜項",
"prefs-resetpass": "改密碼",
+ "prefs-changeemail": "改電郵地址",
+ "prefs-setemail": "入電郵地址",
"prefs-email": "電郵選項",
"prefs-rendering": "外觀",
"saveprefs": "儲存",
- "restoreprefs": "恢復全部預設設定",
+ "restoreprefs": "恢復全部預設設定(喺所有項目)",
"prefs-editing": "編輯中",
"rows": "行數:",
"columns": "列數:",
@@ -849,10 +911,11 @@
"recentchangesdays-max": "最多 $1 日",
"recentchangescount": "預設顯示嘅編輯數:",
"prefs-help-recentchangescount": "呢個包埋最近修改、頁歷史同埋日誌紀錄。",
+ "prefs-help-watchlist-token2": "呢個係網上訂閱你個監視清單嘅密匙。\n任何人只要知道個密匙,就會睇到你個監視清單,所以唔好畀人知。\n如果有需要嘅話,[[Special:ResetTokens|你可以重設佢]]。",
"savedprefs": "你嘅喜好設定已經儲存。",
"timezonelegend": "時區:",
"localtime": "本地時間:",
- "timezoneuseserverdefault": "用伺服器預設值",
+ "timezoneuseserverdefault": "用維基預設值($1)",
"timezoneuseoffset": "其他 (指定偏移)",
"servertime": "伺機器時間:",
"guesstimezone": "由瀏覽器填上",
@@ -867,7 +930,7 @@
"timezoneregion-indian": "印度洋",
"timezoneregion-pacific": "太平洋",
"allowemail": "由其它用戶啟用電子郵件",
- "prefs-searchoptions": "搵嘢選項",
+ "prefs-searchoptions": "搵嘢",
"prefs-namespaces": "空間名",
"default": "預設",
"prefs-files": "檔案",
@@ -877,23 +940,24 @@
"prefs-reset-intro": "你可以用呢版去重設你嘅喜好設定到網站預設值。呢個動作無得番轉頭。",
"prefs-emailconfirm-label": "電郵確認:",
"youremail": "電郵:",
- "username": "用戶名:",
- "prefs-memberingroups": "{{PLURAL:$1|一|多}}組嘅成員:",
+ "username": "{{GENDER:$1|用戶名}}:",
+ "prefs-memberingroups": "{{PLURAL:$1|組}}嘅{{GENDER:$2|成員}}:",
"prefs-registration": "註冊時間:",
"yourrealname": "真名:",
"yourlanguage": "話:",
- "yourvariant": "變換:",
+ "yourvariant": "內容語言變換:",
+ "prefs-help-variant": "你想喺呢度嘅內容顯示嘅語言變換。",
"yournick": "新花名:",
"prefs-help-signature": "響討論版嘅評論應該要用 \"<nowiki>~~~~</nowiki>\" 簽名,噉就會轉做你嘅簽名同埋一個時間截記。",
"badsig": "無效嘅程式碼簽名。檢查吓 HTML 有無錯。",
"badsiglength": "你嘅花名太長喇。\n唔長得過$1個字元。",
- "yourgender": "性別:",
- "gender-unknown": "未指定",
- "gender-male": "男",
- "gender-female": "女",
- "prefs-help-gender": "可選: 用嚟整軟件性別指定。呢項資料將會被公開。",
+ "yourgender": "你想點畀人稱呼?",
+ "gender-unknown": "我唔想講",
+ "gender-male": "佢寫維基",
+ "gender-female": "姖寫維基",
+ "prefs-help-gender": "呢項可以自己揀填定唔填。\n系統會用呢項資料嚟判斷點用適當語法去稱呼你。\n呢項資料將會被公開。",
"email": "電郵",
- "prefs-help-realname": "真名可以唔填。\n如果你畀埋佢,有需要嘅時候會用佢來標示你嘅工夫。",
+ "prefs-help-realname": "真名可以揀填定唔填。\n如果你畀埋佢,可能會用佢嚟標示你嘅貢獻。",
"prefs-help-email": "電郵地址可以唔填,但當你唔記得咗你個密碼嗰陣需要利用電郵地址將新密碼重設寄番畀你。",
"prefs-help-email-others": "亦可以響人哋唔知你電郵地址嘅情況之下都可以聯絡你。",
"prefs-help-email-required": "需要電郵地址。",
@@ -902,21 +966,26 @@
"prefs-signature": "簽名",
"prefs-dateformat": "日期格式",
"prefs-timeoffset": "時間偏移",
- "prefs-advancedediting": "進階選項",
+ "prefs-advancedediting": "普通選項",
+ "prefs-editor": "編輯",
+ "prefs-preview": "預覽",
"prefs-advancedrc": "進階選項",
"prefs-advancedrendering": "進階選項",
"prefs-advancedsearchoptions": "進階選項",
"prefs-advancedwatchlist": "進階選項",
"prefs-displayrc": "顯示選項",
"prefs-displaywatchlist": "顯示選項",
+ "prefs-tokenwatchlist": "密匙",
"prefs-diffs": "差異",
+ "prefs-help-prefershttps": "呢項喜好設定會喺你下次簽到先至開始生效。",
+ "prefswarning-warning": "你改嘅喜好設定改動重未記低。\n如果你未撳「$1」就走咗,你嘅喜好設定唔會有更新。",
"email-address-validity-valid": "電郵地址睇嚟有效",
"email-address-validity-invalid": "請打一個有效嘅電郵地址",
"userrights": "用戶權限管理",
"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>嘅用戶權限 $2",
"userrights-editusergroup": "編輯用戶組",
"saveusergroups": "儲存用戶組",
"userrights-groupsmember": "屬於:",
@@ -926,7 +995,7 @@
"userrights-no-interwiki": "你並無權限去編輯響其它wiki嘅用戶權限。",
"userrights-nodatabase": "資料庫$1唔存在或者唔係本地嘅。",
"userrights-nologin": "你一定要以操作員戶口[[Special:UserLogin|登入]]咗之後先可以指定用戶權限。",
- "userrights-notallowed": "你嘅戶口無權限去指定用戶權限。",
+ "userrights-notallowed": "你無權限去加減用戶權限。",
"userrights-changeable-col": "你可以改嘅組",
"userrights-unchangeable-col": "你唔可以改嘅組",
"group": "組:",
@@ -937,12 +1006,12 @@
"group-bureaucrat": "事務員",
"group-suppress": "監督",
"group-all": "(全部)",
- "group-user-member": "用戶",
- "group-autoconfirmed-member": "自動確認用戶",
+ "group-user-member": "{{GENDER:$1|用戶}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|自動確認用戶}}",
"group-bot-member": "{{GENDER:$1|機械人}}",
"group-sysop-member": "{{GENDER:$1|管理員}}",
- "group-bureaucrat-member": "事務員",
- "group-suppress-member": "監督",
+ "group-bureaucrat-member": "{{GENDER:$1|事務員}}",
+ "group-suppress-member": "{{GENDER:$1|監督}}",
"grouppage-user": "{{ns:project}}:用戶",
"grouppage-autoconfirmed": "{{ns:project}}:自動確認用戶",
"grouppage-bot": "{{ns:project}}:機械人",
@@ -966,7 +1035,7 @@
"right-reupload-shared": "於本地無視共用媒體檔案庫上嘅檔案",
"right-upload_by_url": "由一個URL上載檔案",
"right-purge": "唔需要確認之下清除網站快取",
- "right-autoconfirmed": "編輯半保護版",
+ "right-autoconfirmed": "唔受IP嘅利用率限制影響",
"right-bot": "視為一個自動程序",
"right-nominornewtalk": "小編輯唔引發新信息提示",
"right-apihighlimits": "響API查詢度用更高嘅上限",
@@ -978,16 +1047,16 @@
"right-deletedtext": "睇刪咗嘅修訂度嘅已刪嘅字同更改",
"right-browsearchive": "搵刪咗嘅版",
"right-undelete": "反刪版",
- "right-suppressrevision": "睇同恢復由操作員隱藏嘅修訂",
+ "right-suppressrevision": "睇下、收埋同恢復任何用戶指定頁面版本",
"right-suppressionlog": "去睇私人嘅日誌",
"right-block": "封鎖其他用戶唔畀編輯",
"right-blockemail": "封鎖用戶唔畀寄電郵",
"right-hideuser": "封鎖用戶名,對公眾隱藏",
"right-ipblock-exempt": "繞過IP封鎖、自動封鎖同埋範圍封鎖",
"right-proxyunbannable": "繞過Proxy嘅自動封鎖",
- "right-unblockself": "解封佢哋自己",
- "right-protect": "改保護等級同埋編輯保護版",
- "right-editprotected": "編輯保護版(無連串保護)",
+ "right-unblockself": "解封自己",
+ "right-protect": "改保護等級同埋編輯流水保護版",
+ "right-editprotected": "用「{{int:protect-level-sysop}}」權限去編輯保護版",
"right-editinterface": "編輯用戶界面",
"right-editusercssjs": "編輯其他用戶嘅CSS同埋JavaScript檔",
"right-editusercss": "編輯其他用戶嘅CSS檔",
@@ -1035,8 +1104,8 @@
"action-suppressionlog": "睇呢個私有日誌",
"action-block": "封鎖呢位用戶嘅編輯",
"action-protect": "改呢版嘅保護等級",
- "action-import": "由另一個wiki倒入呢一版",
- "action-importupload": "由一個檔案上載倒入呢一版",
+ "action-import": "由其它wiki度倒入版",
+ "action-importupload": "由檔案上載度倒入版",
"action-patrol": "標示其它嘅編輯做已巡查嘅",
"action-autopatrol": "將你嘅編輯標示做已巡查嘅",
"action-unwatchedpages": "睇未畀人監視嘅版",
@@ -1044,24 +1113,46 @@
"action-userrights": "編輯全部嘅權限",
"action-userrights-interwiki": "編輯響其它wiki用戶嘅權限",
"action-siteadmin": "鎖同解鎖資料庫",
+ "action-sendemail": "送電郵",
+ "action-editmywatchlist": "改監視清單",
+ "action-viewmywatchlist": "睇監視清單",
+ "action-viewmyprivateinfo": "睇你嘅私人資料",
+ "action-editmyprivateinfo": "改你嘅私人資料",
"nchanges": "$1次更改",
+ "enhancedrc-since-last-visit": "{{PLURAL:$1|你上次嚟之後}}有 $1 個",
+ "enhancedrc-history": "歷史",
"recentchanges": "最近改過嘅嘢",
"recentchanges-legend": "最近更改選項",
"recentchanges-summary": "追蹤對哩一個 wiki 嘅最後更改。",
+ "recentchanges-noresult": "喺指定時段無符合呢啲條件嘅改動。",
"recentchanges-feed-description": "追蹤對哩一個 wiki 度呢個集合嘅最後更改。",
"recentchanges-label-newpage": "呢次編輯開咗一個新版",
"recentchanges-label-minor": "呢個係一個細編輯",
"recentchanges-label-bot": "呢次編輯係由機械人進行",
"recentchanges-label-unpatrolled": "呢次編輯重未巡查過",
- "recentchanges-legend-newpage": "$1 - 新版",
- "rcnotefrom": "以下係自'''$2'''嘅更改(顯示到'''$1''')。",
+ "recentchanges-label-plusminus": "頁面位元組大細變化",
+ "recentchanges-legend-heading": "'''標記:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (睇埋[[Special:NewPages|新開版]])",
+ "rcnotefrom": "下面嘅{{PLURAL:$5|改動}}由 <strong>$3 $4</strong> 開始(顯示到'''$1''')。",
"rclistfrom": "顯示由$3 $2嘅新更改",
"rcshowhideminor": "$1小編輯",
+ "rcshowhideminor-show": "顯示",
+ "rcshowhideminor-hide": "收埋",
"rcshowhidebots": "$1機械人",
- "rcshowhideliu": "$1登入咗嘅用戶",
+ "rcshowhidebots-show": "顯示",
+ "rcshowhidebots-hide": "收埋",
+ "rcshowhideliu": "$1登記咗嘅用戶",
+ "rcshowhideliu-show": "顯示",
+ "rcshowhideliu-hide": "收埋",
"rcshowhideanons": "$1匿名用戶",
+ "rcshowhideanons-show": "顯示",
+ "rcshowhideanons-hide": "收埋",
"rcshowhidepatr": "$1巡邏過嘅編輯",
+ "rcshowhidepatr-show": "顯示",
+ "rcshowhidepatr-hide": "收埋",
"rcshowhidemine": "$1我嘅編輯",
+ "rcshowhidemine-show": "顯示",
+ "rcshowhidemine-hide": "收埋",
"rclinks": "顯示最後$1次喺$2日內嘅更改<br />$3",
"diff": "差異",
"hist": "歷史",
@@ -1073,9 +1164,11 @@
"number_of_watching_users_pageview": "[$1位用戶監視]",
"rc_categories": "限定到分類(以\"|\"作分隔)",
"rc_categories_any": "任何",
+ "rc-change-size-new": "改完後係$1位元組",
"newsectionsummary": "/* $1 */ 新小節",
- "rc-enhanced-expand": "顯示細節 (需要 JavaScript)",
+ "rc-enhanced-expand": "顯示細節",
"rc-enhanced-hide": "隱藏細節",
+ "rc-old-title": "原先標題係「$1」",
"recentchangeslinked": "連結頁嘅更改",
"recentchangeslinked-feed": "連結頁嘅更改",
"recentchangeslinked-toolbox": "連結頁嘅更改",
@@ -1088,15 +1181,15 @@
"reuploaddesc": "取消上載再返到去上載表格",
"upload-tryagain": "遞交改咗嘅檔案描述",
"uploadnologin": "重未登入",
- "uploadnologintext": "你必須先[[Special:UserLogin|登入]]去上載檔案。",
+ "uploadnologintext": "請$1去上載檔案。",
"upload_directory_missing": "嗰個上載嘅目錄 ($1) 唔見咗,唔可以由網頁伺服器建立。",
"upload_directory_read_only": "嗰個上載嘅目錄 ($1) 而家唔能夠被網頁伺服器寫入。",
"uploaderror": "上載錯誤",
"upload-recreate-warning": "'''警告:一個同名嘅檔案曾經被刪除過或者搬走咗。'''\n\n呢版嘅刪除同移動日誌響呢度提供以便參考:",
"uploadtext": "用下面嘅表格嚟上載檔案。\n要睇或者搵嘢之前上載嘅圖像請去[[Special:FileList|已上載檔案一覽]],(再)上載嘅動作會喺[[Special:Log/upload|上載日誌]]裏面記錄落嚟,而刪除嘅動作會喺[[Special:Log/delete|刪除日誌]]裏面記錄落嚟。\n\n如果要喺頁面度引入呢張圖像,可以使用以下其中一種方式嘅連結:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:file.jpg<nowiki>]]</nowiki></code>'''去用檔案嘅完整版\n* '''<code><nowiki>[[</nowiki>{{ns:file}}:file.png|200px|thumb|left|替代文字<nowiki>]]</nowiki></code>'''去用200像素比例闊,靠左邊加盒,響描述度加'替代文字'\n* '''<code><nowiki>[[</nowiki>{{ns:media}}:file.ogg<nowiki>]]</nowiki></code>''' 直接連結到檔案而唔顯示個檔案。",
- "upload-permitted": "准許嘅檔案類型: $1。",
- "upload-preferred": "建議嘅檔案類型: $1。",
- "upload-prohibited": "禁止嘅檔案類型: $1。",
+ "upload-permitted": "准許嘅檔案{{PLURAL:$2|類型}}:$1。",
+ "upload-preferred": "建議嘅檔案{{PLURAL:$2|類型}}:$1。",
+ "upload-prohibited": "禁止嘅檔案{{PLURAL:$2|類型}}:$1。",
"uploadlogpage": "上載日誌",
"uploadlogpagetext": "以下係最近檔案上載嘅一覽表。\n睇[[Special:NewFiles|新圖像畫廊]]去睇更詳細嘅總覽。",
"filename": "檔名",
@@ -1109,6 +1202,7 @@
"ignorewarnings": "忽略任何警告",
"minlength1": "檔名必須最少要有一個字。",
"illegalfilename": "檔名「$1」含有頁面標題所唔允許嘅字。請試下改檔名再上載。",
+ "filename-toolong": "檔案名唔可以長過240位元組。",
"badfilename": "檔名已經更改成「$1」。",
"filetype-mime-mismatch": "檔案擴展名 \".$1\" 唔搭偵測到檔案嘅MIME類型 ($2)。",
"filetype-badmime": "「$1」嘅MIME類型檔案係唔容許上載嘅。",
@@ -1130,9 +1224,10 @@
"large-file": "建議檔案嘅大細唔好大過$1 bytes,呢個檔案有$2 bytes",
"largefileserver": "呢個檔案超過咗伺服器設定允許嘅大細。",
"emptyfile": "你上載嘅檔案似乎係空嘅。噉樣可能係因為你打錯咗個檔名。請檢查吓你係唔係真係要上載呢個檔案。",
- "fileexists": "呢個檔名已經存在,如果你唔肯定係唔係要更改<strong>[[:$1]]</strong>,請先檢查佢。 [[$1|thumb]]",
+ "windows-nonascii-filename": "呢個維基唔支援有特殊字元嘅檔案名。",
+ "fileexists": "呢個檔名已經存在,如果你唔肯定係唔係要更改,請先檢查<strong>[[:$1]]</strong>。 [[$1|thumb]]",
"filepageexists": "呢個檔嘅描述頁已經響<strong>[[:$1]]</strong>開咗,但係呢個名嘅檔案重未存在。你輸入咗嘅摘要係唔會顯示響個描述頁度。要令到個摘要響嗰度出現,你就要手動噉去改佢。\n[[$1|thumb]]",
- "fileexists-extension": "一個相似檔名嘅檔案已經存在: [[$2|thumb]]\n* 上載檔案嘅檔名: <strong>[[:$1]]</strong>\n* 現有檔案嘅檔名: <strong>[[:$2]]</strong>\n請揀一個唔同嘅名。",
+ "fileexists-extension": "一個相似檔名嘅檔案已經存在: [[$2|thumb]]\n* 上載檔案嘅檔名:<strong>[[:$1]]</strong>\n* 現有檔案嘅檔名:<strong>[[:$2]]</strong>\n你係咪要揀返個唔同嘅名?",
"fileexists-thumbnail-yes": "呢個檔案好似係一幅圖像縮細咗嘅版本''(縮圖)''。 [[$1|thumb]]\n請檢查清楚個檔案<strong>[[:$1]]</strong>。\n如果檢查咗嘅檔案係同原本幅圖個大細係一樣嘅話,就唔使再上載多一幅縮圖。",
"file-thumbnail-no": "個檔名係以<strong>$1</strong>開始。佢好似係一幅圖像嘅縮細版本''(縮圖)''。\n如果你有呢幅圖像嘅完整大細,唔係嘅話請再改過個檔名。",
"fileexists-forbidden": "呢個檔案嘅名已經存在,唔可以覆蓋;麻煩返轉去用第二個名嚟上載呢個檔案。[[File:$1|thumb|center|$1]]",
@@ -1175,6 +1270,22 @@
"upload-http-error": "一個HTTP錯誤發生咗: $1",
"backend-fail-notexists": "檔案$1唔存在。",
"backend-fail-delete": "刪唔到檔案「$1」。",
+ "backend-fail-alreadyexists": "檔案「$1」已經喺度。",
+ "backend-fail-store": "檔案「$1」存唔到去「$2」。",
+ "backend-fail-copy": "檔案「$1」抄唔到去「$2」。",
+ "backend-fail-move": "檔案「$1」搬唔到去「$2」。",
+ "backend-fail-opentemp": "唔能夠開個臨時檔案。",
+ "backend-fail-writetemp": "唔能夠寫個臨時檔案。",
+ "backend-fail-closetemp": "唔能夠閂個臨時檔案。",
+ "backend-fail-read": "讀唔到檔案「$1」。",
+ "backend-fail-create": "寫唔到檔案「$1」。",
+ "backend-fail-maxsize": "寫唔到檔案「$1」,因為佢大過$2個位元組。",
+ "backend-fail-readonly": "儲存後臺「$1」而家只能夠唯讀。理由係:「<em>$2</em>」",
+ "backend-fail-synced": "檔案「$1」喺內部儲存後臺入面狀態唔一致。",
+ "backend-fail-connect": "連唔到儲存後臺「$1」",
+ "backend-fail-internal": "儲存後臺「$1」唔知點解出錯",
+ "backend-fail-contenttype": "確定唔到存喺儲存後臺「$1」嘅內容類型。",
+ "lockmanager-notlocked": "唔可以解鎖「$1」;佢都無鎖住到。",
"zip-file-open-error": "在開啟檔案進行ZIP檢查時出錯。",
"zip-wrong-format": "呢個唔係一個ZIP檔案。",
"zip-bad": "呢個係不可讀嘅ZIP檔案。\n因為呢個原因,唔可以進行保安檢查。",
@@ -1187,7 +1298,7 @@
"uploadstash-errclear": "清除檔案唔成功。",
"uploadstash-refresh": "更新檔案清單",
"img-auth-accessdenied": "拒絕通行",
- "img-auth-nopathinfo": "PATH_INFO唔見咗。\n你嘅伺服器重未設定呢個資料。\n佢可能係CGI為本,唔支援img_auth。\n睇吓 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
+ "img-auth-nopathinfo": "PATH_INFO唔見咗。\n你嘅伺服器重未設定呢個資料。\n佢可能係CGI為本,唔支援img_auth。\n睇吓 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 。",
"img-auth-notindir": "所請求嘅路徑唔響個已經設定咗嘅上載目錄。",
"img-auth-badtitle": "唔能夠由\"$1\"整一個有效標題。",
"img-auth-nologinnWL": "你而家無登入,\"$1\"唔響個白名單度。",
@@ -1210,10 +1321,12 @@
"license": "協議:",
"license-header": "協議",
"nolicense": "未揀",
+ "licenses-edit": "改牌照選項",
"license-nopreview": "(無預覽可以用得到)",
- "upload_source_url": " (啱嘅,公開嘅網址)",
- "upload_source_file": " (你部電腦裏面嘅一個檔案)",
- "listfiles-summary": "呢個特別版顯示全部上載過嘅檔案。\n響預設最後上載嘅檔案會顯示響呢個表嘅最頂。\n撳一欄嘅標題去改個排列。",
+ "upload_source_url": "(你個檔案來源嚟自一個啱嘅、公開嘅網址)",
+ "upload_source_file": "(你個檔案來源嚟自你部電腦裏面)",
+ "listfiles-delete": "刪除",
+ "listfiles-summary": "呢個特別頁顯示全部上載咗嘅檔案。",
"listfiles_search_for": "搵媒體名:",
"imgfile": "檔案",
"listfiles": "檔案清單",
@@ -1224,6 +1337,10 @@
"listfiles_size": "大細",
"listfiles_description": "描述",
"listfiles_count": "版本",
+ "listfiles-show-all": "包埋圖像舊版",
+ "listfiles-latestversion": "而家嘅版本",
+ "listfiles-latestversion-yes": "係",
+ "listfiles-latestversion-no": "唔係",
"file-anchor-link": "檔案",
"filehist": "檔案歷史",
"filehist-help": "撳個日期/時間去睇響嗰個時間出現過嘅檔案。",
@@ -1244,6 +1361,7 @@
"linkstoimage-more": "多過$1版連過去呢個檔案。\n下面嘅表只係列示咗連去呢個檔案嘅最頭$1版。\n一個[[Special:WhatLinksHere/$2|完整嘅表]]可以提供。",
"nolinkstoimage": "冇個頁面連結到呢個檔案。",
"morelinkstoimage": "去睇連到呢個檔案嘅[[Special:WhatLinksHere/$1|更多連結]]。",
+ "linkstoimage-redirect": "$1(檔案跳轉)$2",
"duplicatesoffile": "下面嘅$1個檔案係同呢個檔案重覆 ([[Special:FileDuplicateSearch/$2|更多細節]]):",
"sharedupload": "呢個檔案係出自$1,可以喺其他計劃中使用。",
"sharedupload-desc-there": "呢個檔案係出自$1,可以喺其他計劃中使用。\n更多資訊請睇[$2 檔案描述頁]。",
@@ -1253,6 +1371,7 @@
"uploadnewversion-linktext": "上載呢個檔案嘅一個新版本",
"shared-repo-from": "出自 $1",
"shared-repo": "一個共用檔案庫",
+ "upload-disallowed-here": "你無得衾咗個檔案。",
"filerevert": "回復$1",
"filerevert-legend": "回復檔案",
"filerevert-intro": "你而家回復緊個檔案'''[[Media:$1|$1]]'''到[$4 響$2 $3嘅版本]。",
@@ -1276,23 +1395,29 @@
"filedelete-reason-dropdown": "\n*常用刪除原因\n** 侵犯版權\n** 重覆檔案",
"filedelete-edit-reasonlist": "編輯刪除原因",
"filedelete-maintenance": "響維護嗰陣已經暫時停用檔案刪除同恢復。",
+ "filedelete-maintenance-title": "刪唔到檔案",
"mimesearch": "MIME 搜尋",
- "mimesearch-summary": "呢一版可以過濾有關檔案嘅MIME類型。輸入方法:contenttype/subtype,例如 <code>image/jpeg</code>。",
+ "mimesearch-summary": "呢一版可以過濾有關檔案嘅MIME類型。\n輸入方法:contenttype/subtype 或者 contenttype/*,例如 <code>image/jpeg</code>。",
"mimetype": "MIME 類型:",
"download": "下載",
"unwatchedpages": "未監視嘅頁面",
"listredirects": "彈嚟彈去一覽",
+ "listduplicatedfiles": "重覆檔案一覽",
"unusedtemplates": "未用嘅模",
"unusedtemplatestext": "呢一頁列示喺{{ns:template}}空間名未包括喺其它頁面嘅全部頁面。請記得喺刪除佢哋之前檢查其它連結到呢個模嘅頁面。",
"unusedtemplateswlh": "其它連結",
"randompage": "隨便一版",
"randompage-nopages": "響下面嘅{{PLURAL:$2|空間名}}度搵唔到一版: $1",
+ "randomincategory": "類入面是但一版",
+ "randomincategory-invalidcategory": "「$1」唔係有效嘅類名。",
+ "randomincategory-nopages": "[[:Category:$1|$1]]類入面無嘢。",
+ "randomincategory-category": "類:",
+ "randomincategory-legend": "類入面是但一版",
"randomredirect": "隨便彈",
"randomredirect-nopages": "響 \"$1\" 空間名度冇一個彈去版。",
"statistics": "統計",
"statistics-header-pages": "頁統計",
"statistics-header-edits": "編輯統計",
- "statistics-header-views": "參看統計",
"statistics-header-users": "用戶統計",
"statistics-header-hooks": "其它統計",
"statistics-articles": "內容頁",
@@ -1301,17 +1426,17 @@
"statistics-files": "已經上載咗嘅檔案",
"statistics-edits": "自從{{SITENAME}}設定後嘅頁編輯數",
"statistics-edits-average": "每一版平均編輯數",
- "statistics-views-total": "查看總數",
- "statistics-views-total-desc": "唔包唔存在頁面同特別頁嘅查看數",
- "statistics-views-peredit": "每次編輯查看數",
"statistics-users": "註冊咗嘅[[Special:ListUsers|用戶]]",
"statistics-users-active": "活躍用戶",
"statistics-users-active-desc": "響$1日前做過動作嘅用戶",
- "statistics-mostpopular": "最多人睇嘅頁",
+ "pageswithprop": "有屬性嘅頁",
+ "pageswithprop-legend": "有屬性嘅頁",
+ "pageswithprop-prop": "屬性名:",
+ "pageswithprop-submit": "去",
"doubleredirects": "雙重跳轉",
"doubleredirectstext": "每一行都順次序寫住第一頁名,佢嘅目的頁,同埋目的頁再指去邊度。改嘅時候,應該將第一個跳轉頁轉入第三頁。\n<del>劃咗</del>嘅項目係已經解決咗嘅。",
- "double-redirect-fixed-move": "[[$1]]已經搬好咗,佢而家跳轉過去[[$2]]。",
- "double-redirect-fixed-maintenance": "修復[[$1]]嘅重定向到[[$2]]。",
+ "double-redirect-fixed-move": "[[$1]]已經搬好咗。\n佢自動更新咗,而家跳轉過去[[$2]]。",
+ "double-redirect-fixed-maintenance": "喺維護工作度自動修復[[$1]]嘅跳轉到[[$2]]。",
"double-redirect-fixer": "跳轉修正器",
"brokenredirects": "破碎嘅跳轉",
"brokenredirectstext": "以下嘅跳轉係指向唔存在嘅頁面:",
@@ -1324,8 +1449,10 @@
"fewestrevisions": "有最少修改嘅版",
"nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
"ncategories": "$1 個分類",
+ "ninterwikis": "$1 {{PLURAL:$1|個跨維基連結}}",
"nlinks": "$1 條連結",
"nmembers": "$1 位成員",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|位成員}}",
"nrevisions": "$1 次修訂",
"nviews": "$1 次瀏覽",
"nimagelinks": "用響$1版",
@@ -1339,17 +1466,18 @@
"uncategorizedtemplates": "未有分類嘅模",
"unusedcategories": "未用嘅分類",
"unusedimages": "未用嘅檔案",
- "popularpages": "受歡迎嘅頁面",
"wantedcategories": "被徵求嘅分類",
"wantedpages": "被徵求嘅頁面",
"wantedpages-badtitle": "響結果組嘅無效標題: $1",
"wantedfiles": "被徵求嘅檔案",
+ "wantedfiletext-nocat-noforeign": "下面檔案有用到,但係唔存在。",
"wantedtemplates": "被徵求嘅模",
"mostlinked": "有最多連結嘅頁面",
"mostlinkedcategories": "有最多連結嘅分類",
- "mostlinkedtemplates": "有最多連結嘅模",
+ "mostlinkedtemplates": "有最多嵌入嘅版",
"mostcategories": "有最多分類嘅頁面",
"mostimages": "有最多連結嘅檔案",
+ "mostinterwikis": "有最多跨維基連結嘅頁面",
"mostrevisions": "有最多修改嘅頁面",
"prefixindex": "全部頁嘅前綴",
"shortpages": "短頁",
@@ -1359,13 +1487,22 @@
"protectedpages": "保護頁",
"protectedpages-indef": "只有無期保謢頁",
"protectedpages-cascade": "只有連串保護頁",
+ "protectedpages-noredirect": "收埋跳轉",
"protectedpagesempty": "響呢啲參數度,現時無頁面響度保護緊。",
+ "protectedpages-timestamp": "時間",
+ "protectedpages-page": "版",
+ "protectedpages-expiry": "到期",
+ "protectedpages-performer": "保護用戶",
+ "protectedpages-params": "保護參數",
"protectedpages-reason": "原因",
+ "protectedpages-unknown-timestamp": "唔知",
+ "protectedpages-unknown-performer": "未知嘅用戶",
"protectedtitles": "保護咗嘅標題",
"protectedtitlesempty": "響呢啲參數之下並無標題保護住。",
"listusers": "用戶一覽",
"listusers-editsonly": "只顯示有編輯嘅用戶",
"listusers-creationsort": "按建立日期排序",
+ "listusers-desc": "反向排序",
"usereditcount": "$1次編輯",
"usercreated": "響$1 $2{{GENDER:$3|建立}}",
"newpages": "新頁",
@@ -1383,12 +1520,14 @@
"pager-older-n": "舊$1次",
"suppress": "監督",
"querypage-disabled": "呢個特別版基於效能嘅原因停用咗。",
+ "apihelp": "API幫手",
+ "apihelp-no-such-module": "搵唔到模組「$1」。",
"booksources": "書籍來源",
"booksources-search-legend": "搵書源",
- "booksources-go": "去",
+ "booksources-search": "搵",
"booksources-text": "以下嘅連結清單列出其它一啲賣新書同二手書嘅網站,可能可以提供到有關你想搵嘅書嘅更多資料:",
"booksources-invalid-isbn": "個ISBN無效;請檢查原來源複製落來嘅錯。",
- "specialloguserlabel": "用戶:",
+ "specialloguserlabel": "執行人:",
"speciallogtitlelabel": "目標(題目或者用戶):",
"log": "日誌",
"all-logs-page": "全部嘅公共日誌",
@@ -1406,6 +1545,8 @@
"allpagesprefix": "用以下開頭嘅頁面:",
"allpagesbadtitle": "提供嘅頁面名無效,又或者有一個跨語言或跨wiki嘅字頭。佢可能包括一個或多個字係唔可以用響標題度嘅。",
"allpages-bad-ns": "{{SITENAME}}係無一個空間名叫做\"$1\"。",
+ "allpages-hide-redirects": "收埋跳轉",
+ "cachedspecial-refresh-now": "睇最新。",
"categories": "類",
"categoriespagetext": "下面嘅{{PLURAL:$1|類}}有版或媒體。\n[[Special:UnusedCategories|未用類]]唔會響呢度列示。\n請同時參閱[[Special:WantedCategories|需要嘅分類]]。",
"categoriesfrom": "顯示由呢項起嘅類:",
@@ -1414,11 +1555,11 @@
"deletedcontributions": "已經刪除咗嘅用戶貢獻",
"deletedcontributions-title": "已經刪除咗嘅用戶貢獻",
"sp-deletedcontributions-contribs": "貢獻",
- "linksearch": "外部連結",
+ "linksearch": "搵出面嘅連結",
"linksearch-pat": "搵嘅形態:",
"linksearch-ns": "空間名",
"linksearch-ok": "搵",
- "linksearch-text": "可以用類似\"*.wikipedia.org\"嘅萬用字元。<br />\n支援嘅協議: <code>$1</code>",
+ "linksearch-text": "可以用類似「*.wikipedia.org」嘅萬用字元。\n需要至少一個頂級域名,好似「*.org」。<br />\n支援嘅{{PLURAL:$2|協議}}:<code>$1</code> (預設用 http:// 如果唔指定協議)",
"linksearch-line": "$1 連自 $2",
"linksearch-error": "萬用字元只可以響主機名嘅開頭度用。",
"listusersfrom": "顯示由呢個字開始嘅用戶:",
@@ -1427,14 +1568,14 @@
"listusers-blocked": "(封鎖咗)",
"activeusers": "活躍用戶名單",
"activeusers-intro": "呢個係響最近$1日之內有一啲動作嘅用戶名單。",
- "activeusers-count": "響$3日之內嘅$1次編輯",
+ "activeusers-count": "響{{PLURAL:$3|$3日}}之內嘅$1次{{PLURAL:$1|編輯}}",
"activeusers-from": "顯示用戶開始於:",
"activeusers-hidebots": "隱藏機械人",
"activeusers-hidesysops": "隱藏管理員",
"activeusers-noresult": "搵唔到用戶。",
"listgrouprights": "用戶組權限",
"listgrouprights-summary": "下面係一個響呢個wiki定義咗嘅用戶權限一覽,同埋佢哋嘅存取權。\n更多有關個別權限嘅[[{{MediaWiki:Listgrouprights-helppage}}|更多細節]]可以響嗰度搵到。",
- "listgrouprights-key": "* <span class=\"listgrouprights-granted\">畀咗嘅權限</span>\n* <span class=\"listgrouprights-revoked\">拎咗嘅權限</span>",
+ "listgrouprights-key": "說明:\n* <span class=\"listgrouprights-granted\">畀咗嘅權限</span>\n* <span class=\"listgrouprights-revoked\">拎咗嘅權限</span>",
"listgrouprights-group": "組",
"listgrouprights-rights": "權",
"listgrouprights-helppage": "Help:組權限",
@@ -1447,17 +1588,31 @@
"listgrouprights-removegroup-self": "響自己嘅戶口度拎走嘅{{PLURAL:$2|一|多}}組: $1",
"listgrouprights-addgroup-self-all": "加入全部組到自己嘅戶口度",
"listgrouprights-removegroup-self-all": "響自己嘅戶口度可以拎走全部組",
+ "listgrouprights-namespaceprotection-header": "空間名限制",
+ "listgrouprights-namespaceprotection-namespace": "空間名",
+ "listgrouprights-namespaceprotection-restrictedto": "容許用戶改文嘅權",
+ "trackingcategories": "追蹤類",
+ "trackingcategories-msg": "追蹤類",
+ "trackingcategories-name": "訊息名",
+ "trackingcategories-nodesc": "冇解說資料",
+ "trackingcategories-disabled": "類停用咗",
"mailnologin": "冇傳送地址",
"mailnologintext": "你一定要[[Special:UserLogin|登入咗]]同埋喺你嘅[[Special:Preferences|喜好設定]]度有個有效嘅電郵地址先可以傳送電郵畀其他用戶。",
"emailuser": "發電郵畀呢位用戶",
+ "emailuser-title-target": "電郵畀呢個{{GENDER:$1|用戶}}",
+ "emailuser-title-notarget": "發電郵畀用戶",
"emailpage": "發電郵畀用戶",
- "emailpagetext": "你可以用下面嘅表去寄一封電郵畀呢位用戶。\n你喺[[Special:Preferences|你嘅用戶喜好設定]]入面填寫嘅電郵地址會出現喺呢封電郵「由」嘅地址度,以便收件人可以回覆到。",
- "defemailsubject": "{{SITENAME}} 電郵",
+ "emailpagetext": "你可以用下面嘅表去寄一封電郵畀呢位{{GENDER:$1|用戶}}。\n你喺[[Special:Preferences|你嘅用戶喜好設定]]入面填寫嘅電郵地址會出現喺呢封電郵「由」嘅地址度,方便收件人可以直接回覆你。",
+ "defemailsubject": "由用戶「$1」送嘅 {{SITENAME}} 電郵",
"usermaildisabled": "用戶電郵已停用",
"usermaildisabledtext": "你唔可以發送電郵到響呢個wiki度嘅其他用戶",
"noemailtitle": "無電郵地址",
"noemailtext": "呢個用戶重未指定一個有效嘅電郵地址。",
"nowikiemailtext": "呢位用戶揀咗唔收其他用戶畀佢嘅電郵。",
+ "emailnotarget": "收件人填錯名。",
+ "emailtarget": "入收件人嘅用戶名",
+ "emailusername": "用戶名:",
+ "emailusernamesubmit": "遞交",
"email-legend": "寄電郵畀另一位{{SITENAME}}用戶",
"emailfrom": "由:",
"emailto": "到:",
@@ -1475,26 +1630,41 @@
"mywatchlist": "監視清單",
"watchlistfor2": "$1嘅監視清單 $2",
"nowatchlist": "你嘅監視清單度並冇任何項目。",
- "watchlistanontext": "請先$1去睇或者改響你監視清單度嘅項目。",
+ "watchlistanontext": "請先簽到去睇或者改響你監視清單度嘅項目。",
"watchnologin": "未登入",
- "addedwatchtext": "頁面「[[:$1]]」已加入到你嘅[[Special:Watchlist|監視清單]]度。\n呢個頁面以及佢個討論頁以後嘅修改都會列喺嗰度,佢喺[[Special:RecentChanges|最近更改清單]]度會以'''粗體'''顯示,等你可以容易啲睇到佢。",
+ "addwatch": "加到監視清單",
+ "addedwatchtext": "頁面「[[:$1]]」已加入到你嘅[[Special:Watchlist|監視清單]]度。\n呢個頁面以及佢個討論頁以後嘅修改都會列喺嗰度。",
+ "addedwatchtext-short": "「$1」呢一版已經加咗入監視清單。",
+ "removewatch": "響監視清單度拎走",
"removedwatchtext": "頁面「[[:$1]]」已經喺[[Special:Watchlist|你嘅監視清單]]度刪除。",
+ "removedwatchtext-short": "「$1」呢一版已經由監視清單度拎走咗。",
"watch": "監視",
"watchthispage": "監視呢頁",
"unwatch": "唔使監視",
"unwatchthispage": "停止監視",
"notanarticle": "唔係一個內容頁",
"notvisiblerev": "上次由唔同用戶嘅修訂已經刪除咗",
- "watchlist-details": "唔計討論頁,有 $1 版響你個監視清單度。",
- "wlheader-enotif": "電子郵件通知已經啟用。",
- "wlheader-showupdated": "'''粗體字'''嘅頁響你上次嚟之後被人改過",
- "wlnote": "以下係最近'''$2'''個鐘之內嘅最新$1次修改。",
- "wlshowlast": "顯示最近 $1 個鐘 $2 日 $3 嘅修改",
+ "watchlist-details": "唔計討論頁,有 $1 {{PLURAL:$1|版}}響你個監視清單度。",
+ "wlheader-enotif": "電郵通知已經啟用咗。",
+ "wlheader-showupdated": "標'''粗體字'''嘅頁響你上次嚟之後畀人改過。",
+ "wlnote": "下面係直到$3 $4為止,最近'''$2'''個鐘之內嘅最新$1次修改。",
+ "wlshowlast": "顯示最近 $1 個鐘 $2 日",
"watchlist-options": "監視清單選項",
"watching": "監視緊...",
"unwatching": "唔再監視緊...",
+ "watcherrortext": "更改「$1」嘅監視清單嗰陣出錯。",
"enotif_reset": "將所有頁面標成已視察",
"enotif_impersonal_salutation": "{{SITENAME}}用戶",
+ "enotif_subject_deleted": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|刪咗}}。",
+ "enotif_subject_created": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|開咗}}。",
+ "enotif_subject_moved": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|搬咗}}。",
+ "enotif_subject_restored": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|恢復咗}}。",
+ "enotif_subject_changed": "{{SITENAME}}頁面 $1 已經畀 $2 {{GENDER:$2|改咗}}。",
+ "enotif_body_intro_deleted": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|刪咗}}。睇下 $3 。",
+ "enotif_body_intro_created": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|開咗}}。睇下而家個版本 $3 。",
+ "enotif_body_intro_moved": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|搬咗}}。睇下而家個版本 $3 。",
+ "enotif_body_intro_restored": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|恢復咗}}。睇下而家個版本 $3 。",
+ "enotif_body_intro_changed": "{{SITENAME}}頁面 $1 已經喺 $PAGEEDITDATE 畀 $2 {{GENDER:$2|改咗}}。睇下而家個版本 $3 。",
"enotif_lastvisited": "你上次視察以嚟嘅修改請睇$1。",
"enotif_lastdiff": "睇$1去睇吓呢一次更改。",
"enotif_anon_editor": "匿名用戶$1",
@@ -1508,7 +1678,7 @@
"exbeforeblank": "喺清空之前嘅內容係:「$1」",
"delete-confirm": "刪除\"$1\"",
"delete-legend": "刪除",
- "historywarning": "警告:你要刪除嘅頁面有大約$1次嘅修訂:",
+ "historywarning": "<strong>警告:</strong>你要刪除嘅頁面有大約$1次嘅修訂:",
"confirmdeletetext": "你準備刪除一個頁面或者圖像,包括佢嘅所有歷史版本。\n請確認你打算噉做,而且你知道後果係點,加上確認你噉做冇違反到[[{{MediaWiki:Policy-url}}]]。",
"actioncomplete": "操作完成",
"actionfailed": "操作失敗",
@@ -1520,30 +1690,35 @@
"deletecomment": "原因:",
"deleteotherreason": "其它/附加嘅原因:",
"deletereasonotherlist": "其它原因",
- "deletereason-dropdown": "*常用刪除原因\n** 作者請求\n** 侵犯版權\n** 破壞",
+ "deletereason-dropdown": "*常用刪除原因\n** 垃圾訊息\n** 破壞\n** 侵犯版權\n** 作者請求\n** 壞咗嘅跳轉",
"delete-edit-reasonlist": "編輯刪除原因",
"delete-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除呢類版嘅動作已經限制咗,以防止響{{SITENAME}}嘅意外擾亂。",
"delete-warning-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除佢可能會擾亂{{SITENAME}}嘅資料庫操作;響繼續嗰陣請小心。",
+ "deleteprotected": "你唔可以刪呢版,因為佢畀人保護咗。",
"rollback": "反轉修改",
- "rollback_short": "反轉",
"rollbacklink": "反轉",
+ "rollbacklinkcount": "反轉 $1 次修改",
"rollbackfailed": "反轉唔到",
"cantrollback": "反轉唔到;上一位貢獻者係唯一修改過呢版嘅人。",
"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": "編輯摘要係:「'''$1'''」。",
"revertpage": "已經反轉由[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])所寫嘅編輯到[[User:$1|$1]]嘅最後修訂。",
- "revertpage-nouser": "已經反轉由(刪咗用戶名)所寫嘅編輯到[[User:$1|$1]]所寫嘅最後修訂。",
+ "revertpage-nouser": "已經反轉咗由收埋咗嘅用戶名所寫嘅編輯,到[[User:$1|$1]]所寫嘅最後修訂版本。",
"rollback-success": "已經反轉由$1所寫嘅編輯;恢復到$2嘅最後修訂。",
"sessionfailure-title": "會話失敗",
"sessionfailure": "你嘅登入會話 (session) 好似有啲問題;\n為咗防止會話劫持,呢個操作已經取消。\n請返去之前嗰版,重新載入嗰版然後再試。",
"protectlogpage": "保護日誌",
- "protectlogtext": "下面係一個保護同埋解除保護頁面嘅一覽表。睇吓[[Special:ProtectedPages|保護頁面一覽]]去搵鎖咗嘅頁。",
+ "protectlogtext": "下面係一個保護同埋解除保護頁面改動嘅一覽表。\n睇吓[[Special:ProtectedPages|保護頁面一覽]]去搵而家鎖咗嘅頁。",
"protectedarticle": "已經保護 \"[[$1]]\"",
"modifiedarticleprotection": "已經改咗 \"[[$1]]\" 嘅保護等級",
- "unprotectedarticle": "已經唔再保護 \"[[$1]]\"",
+ "unprotectedarticle": "已經唔再保護「[[$1]]」",
"movedarticleprotection": "已經改咗由「[[$2]]」到「[[$1]]」嘅保護設定",
"protect-title": "改緊「$1」嘅保護等級",
+ "protect-title-notallowed": "睇下「$1」嘅保護等級",
"prot_1movedto2": "[[$1]]搬到去[[$2]]",
+ "protect-badnamespace-title": "保護唔到嘅空間名",
+ "protect-badnamespace-text": "呢個空間名嘅版面保護唔到。",
+ "protect-norestrictiontypes-title": "保護唔到嘅頁",
"protect-legend": "確認保護",
"protectcomment": "原因:",
"protectexpiry": "到期:",
@@ -1554,19 +1729,21 @@
"protect-locked-blocked": "當你響被封鎖嗰陣唔可以改呢版嘅保護等級。\n呢個係'''$1'''版嘅現時設定:",
"protect-locked-dblock": "響資料庫主動鎖住咗嗰陣係唔可以改呢版嘅保護等級。\n呢個係'''$1'''版嘅現時設定:",
"protect-locked-access": "你嘅戶口係無權限去改呢版嘅保護等級。\n呢個係'''$1'''版嘅現時設定:",
- "protect-cascadeon": "呢一版現時正響度保護緊,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,而當中又開咗連串保護。你可以更改呢一版嘅保護等級,但係呢個修改係唔會影響到嗰個連串保護。",
+ "protect-cascadeon": "呢一版現時正響度保護緊,因為佢係響以下嘅{{PLURAL:$1|一|幾}}頁度包含咗,而當中又開咗連串保護。更改呢一版嘅保護等級唔會影響到嗰個連串保護。",
"protect-default": "容許全部用戶",
- "protect-fallback": "需要\"$1\"嘅許可",
+ "protect-fallback": "只容許有「$1」許可嘅用戶",
"protect-level-autoconfirmed": "只限已經自動確認嘅用戶",
"protect-level-sysop": "只限管理員",
"protect-summary-cascade": "連串保護",
"protect-expiring": "響 $1 (UTC) 到期",
+ "protect-expiring-local": "$1 到期",
"protect-expiry-indefinite": "唔定",
"protect-cascade": "保護包含響呢一版嘅頁面 (連串保護)",
"protect-cantedit": "你唔可以改呢版嘅保護等級,因為你無權限去編輯佢。",
"protect-othertime": "其它時間:",
"protect-othertime-op": "其它時間",
"protect-existing-expiry": "現時到期嘅時間: $2 $3",
+ "protect-existing-expiry-infinity": "到期時間:無限期",
"protect-otherreason": "其它/附加嘅原因:",
"protect-otherreason-op": "其它原因",
"protect-dropdown": "*通用保護原因\n** 過量嘅破壞\n** 過量嘅灌水\n** 反生產性編輯戰\n** 高流量頁",
@@ -1590,7 +1767,7 @@
"viewdeletedpage": "去睇被刪除咗嘅頁面",
"undeletepagetext": "以下嘅$1個頁面已經刪除,但係重喺檔庫度可以恢復。檔案庫可能會定時清理。",
"undelete-fieldset-title": "恢復修訂",
- "undeleteextrahelp": "要恢復成個頁面,唔好剔任何嘅核選盒,再撳'''''{{int:undeletebtn}}'''''。\n要恢復已經選擇咗嘅修訂,將要恢復代表有關修訂嘅核選盒剔上,再撳'''''{{int:undeletebtn}}'''''。\n撳'''''{{int:undeletereset}}'''''會清除註解文字同埋全部嘅核選盒。",
+ "undeleteextrahelp": "要恢復成個頁面,唔好剔任何嘅核選盒,再撳<strong><em>{{int:undeletebtn}}</em></strong>。\n要恢復已經選擇咗嘅修訂,將要恢復代表有關修訂嘅核選盒剔上,再撳<strong><em>{{int:undeletebtn}}</em></strong>。",
"undeleterevisions": "$1個修訂都已經存檔",
"undeletehistory": "如果你恢復呢個頁面,佢嘅所有修改歷史都會恢復返到嗰篇頁面嘅歷史度。如果喺佢刪除之後又新開咗同名嘅頁面,你恢復嘅修改歷史會顯示喺先前歷史度。",
"undeleterevdel": "如果響最新修訂度部份刪除,噉就反刪除唔到。如果遇到呢種情況,你一定要反選或者反隱藏最新刪除咗嘅修訂。",
@@ -1606,9 +1783,10 @@
"undeletedrevisions": "$1個修訂已經救返",
"undeletedrevisions-files": "$1個修訂同$2個檔案已經救返",
"undeletedfiles": "$1個檔案已經救返",
- "cannotundelete": "救唔到;可能有其他人已經救返嗰頁。",
+ "cannotundelete": "救唔到:\n$1",
"undeletedpage": "'''$1已經成功救返'''\n\n最近嘅刪除同恢復記錄請睇[[Special:Log/delete]]。",
"undelete-header": "睇吓[[Special:Log/delete|刪除日誌]]去睇之前刪除嘅頁頁。",
+ "undelete-search-title": "搵刪咗嘅版",
"undelete-search-box": "搵刪除咗嘅頁面",
"undelete-search-prefix": "顯示由以下開頭嘅頁面:",
"undelete-search-submit": "搵嘢",
@@ -1617,25 +1795,31 @@
"undelete-bad-store-key": "唔能夠刪除帶有時間截記嘅檔案修訂 $1: 檔案響刪除之前唔見咗。",
"undelete-cleanup-error": "刪除無用嘅歸檔檔案 \"$1\" 時出錯。",
"undelete-missing-filearchive": "由於檔案歸檔 ID $1 唔響個數據庫度,唔能夠響個檔案歸檔恢復。佢可能已經反刪除咗。",
+ "undelete-error": "還原刪版出錯",
"undelete-error-short": "反刪除檔案嗰陣出錯: $1",
"undelete-error-long": "當反刪除緊個檔案嗰陣遇到錯誤:\n\n$1",
"undelete-show-file-confirm": "你係咪肯定你想去睇響 $2 $3 嘅 \"<nowiki>$1</nowiki>\" 檔案?",
"undelete-show-file-submit": "係",
"namespace": "空間名:",
"invert": "反選",
+ "tooltip-invert": "剔呢個格就可以收埋揀咗嘅命名空間嘅頁面改動(如果剔埋相關命名空間,亦都會一齊收埋)",
+ "namespace_association": "相關命名空間",
+ "tooltip-namespace_association": "剔呢個格就可以收埋相關嘅討論頁命名空間",
"blanknamespace": "(主)",
"contributions": "{{GENDER:$1|用戶}}貢獻",
"contributions-title": "$1嘅用戶貢獻",
"mycontris": "個人貢獻",
- "contribsub2": "$1嘅貢獻 ($2)",
+ "contribsub2": "{{GENDER:$3|$1}}嘅貢獻 ($2)",
+ "contributions-userdoesnotexist": "用戶「$1」未有註冊。",
"nocontribs": "搵唔到符合呢啲條件嘅修改。",
- "uctop": "(最頂)",
+ "uctop": "(而家)",
"month": "由呢個月 (同更早):",
"year": "由呢一年 (同更早):",
"sp-contributions-newbies": "只顯示新戶口嘅貢獻",
"sp-contributions-newbies-sub": "新戶口嘅貢獻",
"sp-contributions-newbies-title": "新戶口嘅用戶貢獻",
"sp-contributions-blocklog": "封鎖日誌",
+ "sp-contributions-suppresslog": "壓制咗嘅用戶貢獻",
"sp-contributions-deleted": "已經刪除咗嘅用戶貢獻",
"sp-contributions-uploads": "上載",
"sp-contributions-logs": "日誌",
@@ -1646,6 +1830,7 @@
"sp-contributions-search": "搵貢獻",
"sp-contributions-username": "IP地址或用戶名:",
"sp-contributions-toponly": "只顯示最新修訂嘅編輯",
+ "sp-contributions-newonly": "只顯示開新版嘅編輯",
"sp-contributions-submit": "搵",
"whatlinkshere": "有乜嘢連結來呢度",
"whatlinkshere-title": "連到「$1」嘅頁",
@@ -1664,13 +1849,17 @@
"whatlinkshere-hidelinks": "$1連結",
"whatlinkshere-hideimages": "$1檔案連結",
"whatlinkshere-filters": "過濾器",
- "blockip": "封鎖用戶",
+ "autoblockid": "自動封鎖 #$1",
+ "block": "封鎖用戶",
+ "unblock": "解封用戶",
+ "blockip": "封鎖{{GENDER:$1|用戶}}",
"blockip-legend": "封鎖用戶",
"blockiptext": "使用以下嘅表格嚟去阻止指定嘅IP地址或用戶名嘅寫權限。\n僅當僅當為咗避免有版畀人惡意破壞嘅時候先可以使用,而且唔可以違反[[{{MediaWiki:Policy-url}}|政策]]。\n喺下面填寫阻止嘅確切原因(比如:引用咗某啲已經破壞咗嘅頁面)。",
"ipaddressorusername": "IP地址或用戶名:",
"ipbexpiry": "期限:",
"ipbreason": "原因:",
"ipbreason-dropdown": "*共用封鎖原因\n** 插入錯嘅資料\n** 響頁面度拎走\n** 亂加入外部連結\n** 響頁度加入冇意義嘅嘢\n** 嚇人/騷擾\n** 濫用多個戶口\n** 唔能夠接受嘅用戶名",
+ "ipb-hardblock": "唔畀簽到用戶用呢個IP位址去改文",
"ipbcreateaccount": "防止開新戶口",
"ipbemailban": "防止用戶傳送電郵",
"ipbenableautoblock": "自動封鎖呢個用戶上次用過嘅IP地址,同埋佢地做過編輯嘅IP地址",
@@ -1679,22 +1868,39 @@
"ipboptions": "兩個鐘頭:2 hours,一日:1 day,三日:3 days,一個禮拜:1 week,兩個禮拜:2 weeks,一個月:1 month,三個月:3 months,六個月:6 months,一年:1 year,終身:infinite",
"ipbhidename": "響編輯同名單度隱藏用戶名",
"ipbwatchuser": "監視呢位用戶嘅用戶頁同埋佢嘅討論頁",
+ "ipb-disableusertalk": "唔畀封鎖緊嘅用戶去改自己個用戶討論頁",
"ipb-change-block": "用呢啲設定重新封鎖用戶",
+ "ipb-confirm": "確認封鎖",
"badipaddress": "無效嘅IP地址",
"blockipsuccesssub": "封鎖成功",
- "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已經封鎖。<br />\n去[[Special:BlockList|IP封鎖清單]]睇返封鎖名單。",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已經封鎖。<br />\n去[[Special:BlockList|封鎖清單]]睇返封鎖。",
+ "ipb-blockingself": "你將會封鎖自己!你肯定要咁做?",
+ "ipb-confirmaction": "如果你肯定要咁做,請剔下低嘅「{{int:ipb-confirm}}」格。",
"ipb-edit-dropdown": "改封鎖原因",
"ipb-unblock-addr": "解封$1",
"ipb-unblock": "解封一個用戶名或IP地址",
"ipb-blocklist": "去睇現時嘅封鎖",
- "ipb-blocklist-contribs": "$1嘅貢獻",
+ "ipb-blocklist-contribs": "{{GENDER:$1|$1}}嘅貢獻",
"unblockip": "解封用戶",
"unblockiptext": "使用以下表格恢復之前阻止嘅某個IP地址或者某個用戶名嘅寫權限。",
"ipusubmit": "拎走呢個封鎖",
"unblocked": "\"[[User:$1|$1]]\"已經解封",
+ "unblocked-range": "$1 已經解鎖咗。",
"unblocked-id": "$1嘅封鎖已經拎走咗",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] 已經解鎖咗。",
+ "blocklist": "封鎖用戶",
"ipblocklist": "封咗嘅用戶",
"ipblocklist-legend": "搵一位封咗嘅用戶",
+ "blocklist-userblocks": "收埋戶口封鎖",
+ "blocklist-tempblocks": "收埋臨時封鎖",
+ "blocklist-addressblocks": "收埋單一IP封鎖",
+ "blocklist-rangeblocks": "收埋大範圍IP封鎖",
+ "blocklist-timestamp": "時間",
+ "blocklist-target": "目標",
+ "blocklist-expiry": "到期",
+ "blocklist-by": "封鎖管理員",
+ "blocklist-params": "封鎖參數",
+ "blocklist-reason": "原因",
"ipblocklist-submit": "搵",
"ipblocklist-localblock": "本地封鎖",
"ipblocklist-otherblocks": "其他{{PLURAL:$1|封鎖|封鎖}}",
@@ -1711,13 +1917,14 @@
"unblocklink": "解封",
"change-blocklink": "改封",
"contribslink": "貢獻",
- "autoblocker": "已經自動封鎖,因為你嘅IP地址冇幾耐之前\"[[User:$1|$1]]\"使用過。$1\\嘅封鎖原因係: 「$2」",
+ "emaillink": "送電郵",
+ "autoblocker": "已經自動封鎖咗,因為你嘅IP地址冇幾耐之前畀「[[User:$1|$1]]」用過。\n$1嘅封鎖原因係「$2」",
"blocklogpage": "封鎖日誌",
"blocklog-showlog": "呢位用戶已經響之前被封鎖過。響下面提供咗封鎖紀錄以便參考:",
"blocklog-showsuppresslog": "呢位用戶已經響之前被封鎖同隱藏過。響下面提供咗廢止紀錄以便參考:",
"blocklogentry": "已封鎖[[$1]],到期時間為$2 $3",
"reblock-logentry": "已改[[$1]]嘅封鎖設定,到期時間為$2 $3",
- "blocklogtext": "呢個係封鎖同埋解封動作嘅日誌。自動封鎖IP地址嘅動作冇列出嚟。去[[Special:BlockList|IP封鎖名單]]睇現時生效嘅封鎖名單",
+ "blocklogtext": "呢個係封鎖同埋解封動作嘅日誌。\n自動封鎖IP地址嘅動作冇列出嚟。\n去[[Special:BlockList|封鎖名單]]睇現時生效嘅封鎖名單",
"unblocklogentry": "已經解封$1",
"block-log-flags-anononly": "只限匿名用戶",
"block-log-flags-nocreate": "停用開新戶口",
@@ -1729,10 +1936,11 @@
"range_block_disabled": "操作員嘅建立範圍封鎖已經停用。",
"ipb_expiry_invalid": "無效嘅期限。",
"ipb_expiry_temp": "隱藏用戶名封鎖定一定係要永久性嘅。",
- "ipb_hide_invalid": "唔能夠壓止呢個戶口;佢可能有太多編輯。",
+ "ipb_hide_invalid": "唔能夠壓止呢個戶口;佢有多過{{PLURAL:$1|一次編輯|$1次編輯}}。",
"ipb_already_blocked": "\"$1\"已經封鎖咗",
"ipb-needreblock": "$1已經被封鎖。你係咪想更改呢個設定?",
"ipb-otherblocks-header": "其他{{PLURAL:$1|封鎖|封鎖}}",
+ "unblock-hideuser": "你唔可以解鎖呢個用戶,因為佢個用戶名收埋咗。",
"ipb_cant_unblock": "錯誤:搵唔到封鎖ID$1。可能已經解封咗。",
"ipb_blocked_as_range": "錯誤:個IP $1 無直接封鎖,唔可以解封。但係佢係響 $2 嘅封鎖範圍之內,嗰段範圍係可以解封嘅。",
"ip_range_invalid": "無效嘅IP範圍",
@@ -1797,7 +2005,7 @@
"delete_and_move": "刪除並移動",
"delete_and_move_text": "==需要刪除==\n\n目標頁「[[:$1]]」已經存在。你要唔要刪咗佢空個位出嚟畀個搬文動作?",
"delete_and_move_confirm": "好,刪咗嗰個頁面",
- "delete_and_move_reason": "已經刪咗嚟畀位畀個搬文動作",
+ "delete_and_move_reason": "已經刪咗「[[$1]]」嚟畀位畀個搬文動作",
"selfmove": "原始標題同目的標題一樣;唔可以將個頁面搬返去自己度。",
"immobile-source-namespace": "唔可以響空間名「$1」度搬版",
"immobile-target-namespace": "唔可以將版搬到「$1」度",
@@ -1851,16 +2059,15 @@
"thumbnail_gd-library": "未完成嘅GD設定: 功能唔見咗 $1",
"thumbnail_image-missing": "檔案似乎唔見咗: $1",
"import": "倒入頁面",
- "importinterwiki": "Transwiki 倒入",
+ "importinterwiki": "由其它wiki度倒入",
"import-interwiki-text": "揀一個 wiki 同埋一頁去倒入。\n修訂日期同編輯者會被保存落嚟。\n所有 transwiki 嘅倒入動作會響[[Special:Log/import|倒入日誌]]度記錄落嚟。",
- "import-interwiki-source": "來源 wiki/頁:",
"import-interwiki-history": "複製呢一頁所有嘅歷史修訂",
"import-interwiki-templates": "包含全部嘅模",
"import-interwiki-submit": "倒入",
"import-interwiki-namespace": "目的空間名:",
"import-upload-filename": "檔名:",
"import-comment": "註解:",
- "importtext": "請由原 wiki 嘅[[Special:Export|匯出工具]]匯出成檔案。\n儲存喺你個磁碟度,然後再上載到呢度。",
+ "importtext": "請由原 wiki 嘅[[Special:Export|匯出工具]]匯出成檔案。\n儲存喺你部電腦度,然後再上載到呢度。",
"importstart": "倒入緊...",
"import-revision-count": "$1次修訂",
"importnopages": "冇頁面去倒入。",
@@ -1870,24 +2077,22 @@
"importcantopen": "唔能夠開個倒入檔案",
"importbadinterwiki": "壞嘅跨 wiki 連結",
"importsuccess": "已經完成倒入!",
- "importnosources": "未定義 transwiki 嘅匯入來源,同埋歷史嘅直接上載已經停用。",
+ "importnosources": "未定義匯入來源,同埋歷史嘅直接上載已經停用。",
"importnofile": "冇上載到任何要倒入嘅檔案。",
"importuploaderrorsize": "上載要倒入嘅檔案失敗。個檔案大過可以容許嘅上載大細。",
"importuploaderrorpartial": "上載要倒入嘅檔案失敗。個檔案只係部份上載咗。",
"importuploaderrortemp": "上載要倒入嘅檔案失敗。個臨時資料夾唔見咗。",
"import-parse-failure": "XML倒入語法失敗",
"import-noarticle": "無版去倒入!",
- "import-nonewrevisions": "全部嘅修訂已經響之前倒入咗。",
+ "import-nonewrevisions": "無修訂倒入(全部嘅修訂已經響之前倒入咗,或者因為出錯而跳咗唔做)。",
"xml-error-string": "$1 響行$2,欄$3 ($4 bytes): $5",
"import-upload": "上載XML資料",
"import-token-mismatch": "小節資料遺失。請再試過。",
"import-invalid-interwiki": "唔能夠響指定嘅wiki倒入。",
"importlogpage": "倒入日誌",
"importlogpagetext": "管理員由其它嘅 wiki 倒入頁面同埋佢哋嘅編輯歷史記錄。",
- "import-logentry-upload": "由檔案上載倒入咗 [[$1]]",
- "import-logentry-upload-detail": "$1個修訂",
- "import-logentry-interwiki": "transwiki咗 $1",
- "import-logentry-interwiki-detail": "由$2嘅$1個修訂",
+ "import-logentry-upload-detail": "$1個修訂都已經倒入咗",
+ "import-logentry-interwiki-detail": "由$2倒入嘅$1個修訂",
"tooltip-pt-userpage": "你嘅用戶頁",
"tooltip-pt-anonuserpage": "你編輯呢個IP嘅對應用戶頁",
"tooltip-pt-mytalk": "你嘅對話頁",
@@ -1897,13 +2102,14 @@
"tooltip-pt-mycontris": "你嘅貢獻一覽",
"tooltip-pt-login": "建議你去登入;但係唔係一定嘅",
"tooltip-pt-logout": "登出",
+ "tooltip-pt-createaccount": "建議你開返個戶口簽到,不過唔做都無所謂。",
"tooltip-ca-talk": "關於內容頁嘅討論",
"tooltip-ca-edit": "你可以編輯呢一頁。請在儲存之前先預覽一吓。",
"tooltip-ca-addsection": "開始新嘅小節",
"tooltip-ca-viewsource": "呢一頁已經被保護。你可以睇吓呢一頁呢原始碼。",
"tooltip-ca-history": "呢一頁之前嘅修訂",
"tooltip-ca-protect": "保護呢一頁",
- "tooltip-ca-unprotect": "唔再保護呢一頁",
+ "tooltip-ca-unprotect": "改呢版保護",
"tooltip-ca-delete": "刪除呢一頁",
"tooltip-ca-undelete": "將呢個頁面還原到被刪除之前嘅狀態",
"tooltip-ca-move": "移動呢一頁",
@@ -1971,7 +2177,8 @@
"spambot_username": "MediaWiki垃圾清除",
"spam_reverting": "恢復返去最後一個唔包含指去$1嘅連結嘅嗰個修訂。",
"spam_blanking": "全部版本都含有指去$1嘅連結,留空",
- "simpleantispam-label": "反垃圾檢查。\n'''唔好'''加入呢個!",
+ "simpleantispam-label": "反垃圾檢查。\n'''唔好'''填呢個!",
+ "pageinfo-toolboxlink": "頁面資訊",
"markaspatrolleddiff": "標示為已巡查嘅",
"markaspatrolledtext": "標示呢版做查咗嘅",
"markedaspatrolled": "已經標示做已巡查嘅",
@@ -2001,7 +2208,10 @@
"file-info-size": "$1 × $2 像素,檔案大細:$3 ,MIME類型:$4",
"file-nohires": "冇更高解像度嘅圖像。",
"svg-long-desc": "SVG檔案,表面大細: $1 × $2 像素,檔案大細:$3",
- "show-big-image": "完整解像度",
+ "show-big-image": "原本檔案",
+ "show-big-image-preview": "預覽大細:$1。",
+ "show-big-image-other": "第啲{{PLURAL:$2|解像度}}:$1。",
+ "show-big-image-size": "$1 × $2 像素",
"file-info-gif-looped": "循環",
"file-info-gif-frames": "$1格",
"file-info-png-looped": "循環",
@@ -2073,8 +2283,8 @@
"exif-colorspace": "色彩空間",
"exif-componentsconfiguration": "每個部份嘅意思",
"exif-compressedbitsperpixel": "影像壓縮模式",
- "exif-pixelydimension": "影像有效闊度",
- "exif-pixelxdimension": "影像有效高度",
+ "exif-pixelydimension": "影像闊度",
+ "exif-pixelxdimension": "影像高度",
"exif-usercomment": "用家註腳",
"exif-relatedsoundfile": "相關聲音檔",
"exif-datetimeoriginal": "原創日期時間",
@@ -2088,9 +2298,9 @@
"exif-exposureprogram": "曝光程序",
"exif-spectralsensitivity": "光譜敏感度",
"exif-isospeedratings": "ISO 速率",
- "exif-shutterspeedvalue": "快門速度",
- "exif-aperturevalue": "光圈",
- "exif-brightnessvalue": "光度",
+ "exif-shutterspeedvalue": "APEX快門速度",
+ "exif-aperturevalue": "APEX光圈",
+ "exif-brightnessvalue": "APEX光度",
"exif-exposurebiasvalue": "曝光偏壓",
"exif-maxaperturevalue": "最大陸地孔徑",
"exif-subjectdistance": "主體距離",
@@ -2161,9 +2371,9 @@
"exif-orientation-3": "轉一百八十度",
"exif-orientation-4": "上下倒轉",
"exif-orientation-5": "逆時針轉九十度,再上下倒轉",
- "exif-orientation-6": "順時針轉九十度",
+ "exif-orientation-6": "逆時針轉九十度",
"exif-orientation-7": "順時針轉九十度,再上下倒轉",
- "exif-orientation-8": "逆時針轉九十度",
+ "exif-orientation-8": "順時針轉九十度",
"exif-planarconfiguration-1": "chunky 格式",
"exif-planarconfiguration-2": "planar 格式",
"exif-componentsconfiguration-0": "根本無",
@@ -2266,7 +2476,6 @@
"exif-gpsdestdistance-n": "浬",
"exif-gpsdirection-t": "真實方向",
"exif-gpsdirection-m": "地磁方向",
- "watchlistall2": "全部",
"namespacesall": "全部",
"monthsall": "全部",
"confirmemail": "確認電郵地址",
@@ -2335,11 +2544,11 @@
"watchlisttools-view": "睇吓有關嘅更改",
"watchlisttools-edit": "睇吓同埋編輯監視清單",
"watchlisttools-raw": "編輯原始監視清單",
- "unknown_extension_tag": "未知嘅擴展標籤 \"$1\"",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|傾偈]])",
"duplicate-defaultsort": "警告: 預設嘅排序鍵 \"$2\" 覆蓋之前嘅預設排序鍵 \"$1\"。",
"version": "版本",
"version-extensions": "裝咗嘅擴展",
- "version-skins": "畫面",
+ "version-skins": "裝咗嘅畫面",
"version-specialpages": "特別頁",
"version-parserhooks": "語法鈎",
"version-variables": "變數",
@@ -2351,8 +2560,8 @@
"version-parser-function-hooks": "語法函數鈎",
"version-hook-name": "鈎名",
"version-hook-subscribedby": "利用於",
- "version-version": "(版本 $1)",
- "version-license": "牌照",
+ "version-version": "($1)",
+ "version-license": "MediaWiki牌照",
"version-poweredby-credits": "呢個 Wiki 係由 '''[https://www.mediawiki.org/ MediaWiki]''' 驅動,版權所有 © 2001-$1 $2。",
"version-poweredby-others": "其他",
"version-license-info": "MediaWiki係自由軟件;你可以根據Free Software Foundation所發表嘅GNU General Public License條款規定,就本程式再發佈同/或修改;無論你根據嘅係呢個牌照嘅第二版或(任你揀)任一日之後發行嘅版本。\n\nMediaWiki是基於使用目的而加以發佈,但係就唔會負上任何嘅責任;亦都唔會對適售性或都係特定目的適用性嘅默示性擔保。詳情請目睇GNU General Public License。\n\n你應該已經收到跟往呢個程式嘅[{{SERVER}}{{SCRIPTPATH}}/COPYING GNU General Public License嘅副本];如果冇嘅話,請寫信到至Free Software Foundation, Inc.:51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或[//www.gnu.org/licenses/old-licenses/gpl-2.0.html 上網睇]。",
@@ -2369,25 +2578,27 @@
"fileduplicatesearch-result-n": "個檔案 \"$1\" 有$2項完全相同嘅重覆。",
"fileduplicatesearch-noresults": "檔案名\"$1\"找不到",
"specialpages": "特別頁",
- "specialpages-note": "* 標準特別頁。\n* <strong class=\"mw-specialpagerestricted\">有限制嘅特別頁。</strong>",
+ "specialpages-note": "* 標準特別頁。\n* <span class=\"mw-specialpagerestricted\">有限制嘅特別頁。</span>",
"specialpages-group-maintenance": "維護報告",
"specialpages-group-other": "其它特別頁",
- "specialpages-group-login": "登入/開戶口",
+ "specialpages-group-login": "簽到/開新戶口",
"specialpages-group-changes": "最近更改同日誌",
"specialpages-group-media": "媒體報告同上載",
"specialpages-group-users": "用戶同權限",
"specialpages-group-highuse": "高度使用頁",
"specialpages-group-pages": "頁面一覽",
"specialpages-group-pagetools": "版工具",
- "specialpages-group-wiki": "Wiki資料同工具",
+ "specialpages-group-wiki": "資料同工具",
"specialpages-group-redirects": "跳轉特別頁",
"specialpages-group-spam": "反垃圾工具",
+ "specialpages-group-developer": "開發者工具",
"blankpage": "空白頁",
"intentionallyblankpage": "呢一版係留空咗嘅,用來作測速等用嘅。",
"external_image_whitelist": " #留番呢行一樣嘅字<pre>\n#響下面(//嘅中間部份)入正規表達式\n#呢啲將會同外面(已超連結嘅)圖像配合\n#嗰啲晒對到出來嘅會顯示做圖像,唔係嘅話就只係會顯示連結\n#有 # 開頭嘅行會當做註解\n#無分大細楷\n\n#響呢行上面入晒全部嘅regex。留番呢行一樣嘅字</pre>",
"tags": "有效更改過嘅標籤",
"tag-filter": "[[Special:Tags|標籤]]過濾器:",
"tag-filter-submit": "過濾器",
+ "tag-list-wrapper": "([[Special:Tags|$1個標籤]]:$2)",
"tags-title": "標籤",
"tags-intro": "呢一版列示咗個軟件標示嘅編輯,同埋佢哋嘅解釋。",
"tags-tag": "標籤名",
@@ -2404,7 +2615,7 @@
"compare-submit": "比較",
"dberr-problems": "對唔住!呢一版出現咗一啲技術性問題。",
"dberr-again": "試吓等多幾分種然後開試。",
- "dberr-info": "(唔能夠連繫個資料伺服器: $1)",
+ "dberr-info": "(唔能夠連繫個資料庫:$1)",
"dberr-usegoogle": "響現階段你可以用 Google 去搵嘢。",
"dberr-outofdate": "留意佢哋索引嘅內容可能會過時。",
"dberr-cachederror": "呢個係所要求版嘅快取複本,可能會過時。",
@@ -2420,14 +2631,19 @@
"htmlform-selectorother-other": "其他",
"sqlite-has-fts": "$1 有全文搜尋支援",
"sqlite-no-fts": "$1 冇全文搜尋支援",
+ "logentry-delete-delete": "$1 刪咗頁 $3",
"revdelete-restricted": "已經應用限制到操作員",
"revdelete-unrestricted": "已經拎走對於操作員嘅限制",
+ "logentry-move-move": "$1 {{GENDER:$2|搬咗}}頁面 $3 去到 $4",
+ "logentry-newusers-create": "戶口$1經已{{GENDER:$2|開咗}}",
+ "logentry-upload-upload": "$1 {{GENDER:$2|上傳咗}} $3",
"rightsnone": "(冇)",
+ "revdelete-summary": "編輯摘要",
"searchsuggest-search": "搵嘢",
"searchsuggest-containing": "名單傳送緊...",
"duration-hours": "$1{{PLURAL:$1|個鐘}}",
"expandtemplates": "展開模",
- "expand_templates_intro": "呢個特別頁係用於將一啲文字中嘅模展開,包括響個模度引用嘅模。同時亦都展開解譯器函數好似<nowiki>{{</nowiki>#language:...}},以及一啲變數好似<nowiki>{{</nowiki>CURRENTDAY}}&mdash;實際上,幾乎所有響雙括弧中嘅內容都會被展開。呢個特別頁係通過使用MediaWiki嘅相關解釋階段嘅功能完成嘅。",
+ "expand_templates_intro": "呢個特別頁係用於將一啲文字中嘅模展開,包括響個模度引用嘅模。\n同時亦都展開解譯器函數好似\n<code><nowiki>{{</nowiki>#language:...}}</code>,同埋一啲變數好似\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,幾乎所有響雙括弧中嘅內容都會被展開。",
"expand_templates_title": "內容標題,用於 {{FULLPAGENAME}} 等頁面:",
"expand_templates_input": "輸入文字:",
"expand_templates_output": "結果:",
@@ -2435,5 +2651,17 @@
"expand_templates_ok": "OK",
"expand_templates_remove_comments": "拎走注釋",
"expand_templates_generate_xml": "顯示XML語法樹",
- "expand_templates_preview": "預覽"
+ "expand_templates_preview": "預覽",
+ "special-characters-group-latin": "拉丁文",
+ "special-characters-group-latinextended": "Latin擴展左",
+ "special-characters-group-ipa": "IPA",
+ "special-characters-group-symbols": "符號",
+ "special-characters-group-greek": "希臘文",
+ "special-characters-group-cyrillic": "西里爾文",
+ "special-characters-group-arabic": "阿拉伯文",
+ "special-characters-group-hebrew": "希伯來文",
+ "special-characters-group-bangla": "Bangla\nBangla",
+ "special-characters-group-telugu": "Telugu",
+ "special-characters-group-sinhala": "Sinhala",
+ "special-characters-group-gujarati": "Gujarati"
}
diff --git a/languages/i18n/za.json b/languages/i18n/za.json
index 3405680e..fc7409d0 100644
--- a/languages/i18n/za.json
+++ b/languages/i18n/za.json
@@ -1,242 +1,232 @@
{
- "@metadata": {
- "authors": [
- "Biŋhai",
- "Hakka"
- ]
- },
- "underline-never": "coengz mbouj swjyungh",
- "sunday": "Swnggeiz Yaet",
- "monday": "Swnggeiz Wtx",
- "tuesday": "Swnggeiz Yeih",
- "wednesday": "Swnggeiz Sam",
- "thursday": "Swnggeiz Seiq",
- "friday": "Swnggeiz Haj",
- "saturday": "Swnggeiz Lokj",
- "sun": "Ngoenz",
- "mon": "It",
- "tue": "Ngeih",
- "wed": "Sam",
- "thu": "Seiq",
- "fri": "Ngux",
- "sat": "Loeg",
- "january": "Nin Wtj",
- "february": "Nin Yeih",
- "march": "Nin Sam",
- "april": "Nin Seiq",
- "may_long": "Nin Haj",
- "june": "Nin Loekj",
- "july": "Nin Caet",
- "august": "Nin Betq",
- "september": "Nin Gouj",
- "october": "Nin Cwbx",
- "november": "Nin Cwbx Wtj",
- "december": "Nin Cwbx Yeih",
- "january-gen": "It nyied",
- "february-gen": "Ngeih nyied",
- "march-gen": "Sam nyied",
- "april-gen": "Seiq nyied",
- "may-gen": "Nin Haj",
- "june-gen": "Loeg nyied",
- "july-gen": "Caet nyied",
- "august-gen": "Bet nyied",
- "september-gen": "Nin Gouj",
- "october-gen": "Cib nyied",
- "november-gen": "Cibit nyied",
- "december-gen": "Cibngeih nyied",
- "jan": "Itnyied",
- "feb": "Ngeihnyied",
- "mar": "Samnyied",
- "apr": "Seiqnyied",
- "may": "Nguxnyied",
- "jun": "Loegnyied",
- "jul": "Caetnyied",
- "aug": "Batnyied",
- "sep": "Goujnyied",
- "oct": "Cibnyied",
- "nov": "Cib'itnyied",
- "dec": "Cibngeihnyied",
- "pagecategories": "{{PLURAL:$1$1 aen|faendingz|faendingz}}",
- "subcategories": "Faendingz lwgsai",
- "about": "Gvendaengz",
- "article": "Banjbienj",
- "cancel": "Fwtqfex",
- "mytalk": "Gaeq gou gangj",
- "navigation": "Dazzaeuh",
- "qbfind": "Ra",
- "qbedit": "Gaij",
- "qbmyoptions": "Yieb gou",
- "faq": "Cam caeuq dap",
- "faqpage": "Project:Cam caeuq dap",
- "vector-action-delete": "Ca",
- "vector-action-move": "Daen",
- "vector-action-protect": "Bauj",
- "vector-view-create": "Laeb",
- "vector-view-edit": "gaij",
- "vector-view-history": "Cazyawj lizsij",
- "errorpagetitle": "Loengloek",
- "tagline": "okcih {{SITENAME}}",
- "help": "Bangcoh",
- "search": "Cwmh",
- "searchbutton": "Cwmh",
- "go": "Bae",
- "searcharticle": "Bae",
- "history": "Lizsij",
- "history_short": "Lizsij",
- "printableversion": "Gojyaenq banj",
- "permalink": "Gaeq-lamh kaemdaengz",
- "edit": "gaij",
- "create": "Laeb",
- "delete": "Duz",
- "protect": "Hahdiuz",
- "protect_change": "gaij",
- "newpage": "Bienj moq",
- "talkpage": "Dunjlun yieb neix",
- "talkpagelinktext": "Daujlun",
- "personaltools": "Hongdawz bonjfaenh",
- "talk": "Kwng",
- "views": "Cazyawj",
- "toolbox": "Loengx hong",
- "jumpto": "Diuq bae",
- "jumptonavigation": "Dazzaeuh",
- "jumptosearch": "Ra",
- "aboutsite": "Gvanhyih {{SITENAME}}",
- "aboutpage": "Project:gvanhyih",
- "currentevents": "Saehgienh seizneix",
- "disclaimers": "gangjmingz mienxcwz",
- "disclaimerpage": "Project:Itbuen mienxcwz",
- "edithelp": "Caeuq mungz san-zonz",
- "mainpage": "Yiebdaeuz",
- "mainpage-description": "Yiebdeauz",
- "policy-url": "Project:fuengcim",
- "portal": "Segih",
- "portal-url": "Project:seqgih",
- "privacy": "Seiyaem cwngcwz",
- "privacypage": "Project:Seiyaem cwngcwz",
- "badaccess": "Loengloek gienzhanh",
- "badaccess-group0": "Cingjgouz mwngz mbouj haengj ciuqguh.",
- "badaccess-groups": "Cingjgouz mwngz hanh youq {{PLURAL:$2|neix|gijneix}} bouxyungh: $1",
- "versionrequired": "Sihyau MediaWiki $1",
- "versionrequiredtext": "Sihyau MediaWik $1 caengj daeng sawjyungh.",
- "youhavenewmessages": "Mungz meiz $1($2)。",
- "editsection": "gaij",
- "editold": "gaij",
- "editlink": "gaij",
- "editsectionhint": "Gaij duenh:$1",
- "showtoc": "yienh'ok",
- "hidetoc": "cangz",
- "nstab-main": "Feanzcieng",
- "nstab-user": "Yieb bouxsawjyungq",
- "nstab-project": "Yieb giva",
- "nstab-image": "Vwnzgen",
- "nstab-mediawiki": "Siuhsik",
- "nstab-template": "Mozbanj",
- "nstab-help": "Yieb bangcoh",
- "nstab-category": "Faendingz",
- "viewsource": "Liuq lagh mae-nej",
- "yourname": "Ciu bouxdeiz:",
- "yourpassword": "Mizmak:",
- "login": "Dwnghluz",
- "nav-login-createaccount": "dwngh haeuj/laebbaen canghu",
- "userlogin": "Daengh haeuj/Laeb bouxdeiz",
- "logout": "Doiq ok",
- "userlogout": "Doiq ok",
- "notloggedin": "Maengx laezhaej",
- "nologinlink": "Laeb bouxdeiz",
- "summary": "Saegmangj:",
- "minoredit": "Di-nej gaij noix",
- "watchthis": "Gamyawj yieb neix",
- "savearticle": "Zonzdiuz mae-nej",
- "showpreview": "Okqhaej piu-ngoengx",
- "showdiff": "Okqhaej gaeqgaei",
- "newarticle": "(Moq)",
- "editundo": "siu",
- "searchresults": "gietgoj ra",
- "searchresults-title": "doiq \"$1\" gij gietgoj ra",
- "search-interwiki-more": "(more)",
- "powersearch-legend": "Gauhgiz saeu",
- "powersearch-redir": "Cungzdinghyiengq liedbiuj",
- "mypreferences": "Doenghgaeq gou hae",
- "searchresultshead": "Cwmh",
- "username": "Ciu bouxdeiz:",
- "group-user-member": "{{GENDER:$1|Bouxsawjyungq}}",
- "action-edit": "gaij yieb neix",
- "recentchanges": "Gaeqgaij seizneix",
- "diff": "Faenbied",
- "hide": "Cangz",
- "show": "Yienh'ok",
- "minoreditletter": "n",
- "newpageletter": "M",
- "boteditletter": "g",
- "recentchangeslinked": "Lienh ok gaengaij",
- "upload": "Cienz vwnzgen",
- "uploadnologin": "Maengx laezhaej",
- "filedesc": "Saegmangj",
- "fileuploadsummary": "Saegmangj:",
- "uploadedimage": "senq cienz \"[[$1]]\"",
- "watchthisupload": "Demq mae-nej",
- "listfiles_user": "Bouxyungh",
- "filehist-current": "seizneix",
- "filehist-datetime": "Ngoenz/Seizgan",
- "filehist-user": "Bouxsawjyungh",
- "filehist-comment": "Gejgangj",
- "randompage": "Mae zaihzex",
- "statistics-pages": "Yieb",
- "nbytes": "$1 {{PLURAL:$1|cihciet|cihciet}}",
- "newpages": "Yieb moq",
- "newpages-username": "Ciu bouxdeiz:",
- "move": "Daen",
- "movethispage": "Caen mae nej",
- "booksources-go": "Bae",
- "log": "Ngoenzceiq",
- "allpages": "Sojmiz yieb",
- "allarticles": "Sojmiz yieb",
- "allpagessubmit": "Bae",
- "watchlist": "Yieb gou yawj",
- "mywatchlist": "Gaeq gou demq",
- "watchnologin": "Maengx laezhaej",
- "watch": "Demq",
- "watchthispage": "Demq mae-nej",
- "watching": "Bawxndu……",
- "unwatching": "Souma bawxndu……",
- "prot_1movedto2": "[[$1]] caen bei [[$2]]",
- "restriction-move": "Caen",
- "namespace": "ndawhoengq mingzcih:",
- "blanknamespace": "(Cujyau)",
- "contributions": "Gaeq bouxdeiz haej",
- "mycontris": "Gaeq gou haej",
- "uctop": "(dingz)",
- "sp-contributions-submit": "Ra",
- "whatlinkshere": "Maelaez lamh haenznej",
- "whatlinkshere-page": "Yieb:",
- "ipblocklist-submit": "Cwmh",
- "contribslink": "gung'yen",
- "move-page-legend": "Caen doengh mae",
- "movearticle": "Caen doengh mae:",
- "move-watch": "Demq mae-nej",
- "movepagebtn": "Caen doengh mae",
- "movereason": "Haujgaemj",
- "revertmove": "siu",
- "tooltip-pt-mytalk": "Yieb daujlun mwngz",
- "tooltip-pt-preferences": "Doenghgaeq gou hae",
- "tooltip-pt-logout": "Doiq ok",
- "tooltip-ca-talk": "Gvanhyih cingqfaenz yieb gij daojun",
- "tooltip-ca-history": "yieb neix gij banj lizsij",
- "tooltip-ca-move": "Dean yieb neix",
- "tooltip-search": "Ra {{SITENAME}}",
- "tooltip-p-logo": "Mae meh",
- "tooltip-n-mainpage": "Raen Yiebdaeuz",
- "tooltip-n-randompage": "Cang haeuj yieb seizgih",
- "tooltip-n-help": "Cimh gouz bangcoh",
- "tooltip-t-upload": "Cienz vwnzgen",
- "tooltip-ca-nstab-main": "Cazyawj ndawyungz yieb",
- "ilsubmit": "Cwmh",
- "watchlistall2": "cenzbu",
- "namespacesall": "cenzbu",
- "monthsall": "cenzbu",
- "imgmultigo": "Bei!",
- "table_pager_limit_submit": "Bei",
- "watchlisttools-view": "Cazyawj gaij mizgven",
- "specialpages": "Doenghmae daegxsei",
- "tags-edit": "gaij"
+ "@metadata": {
+ "authors": [
+ "Biŋhai",
+ "Hakka"
+ ]
+ },
+ "underline-never": "coengz mbouj swjyungh",
+ "sunday": "Swnggeiz Yaet",
+ "monday": "Swnggeiz Wtx",
+ "tuesday": "Swnggeiz Yeih",
+ "wednesday": "Swnggeiz Sam",
+ "thursday": "Swnggeiz Seiq",
+ "friday": "Swnggeiz Haj",
+ "saturday": "Swnggeiz Lokj",
+ "sun": "Ngoenz",
+ "mon": "It",
+ "tue": "Ngeih",
+ "wed": "Sam",
+ "thu": "Seiq",
+ "fri": "Ngux",
+ "sat": "Loeg",
+ "january": "Nin Wtj",
+ "february": "Nin Yeih",
+ "march": "Nin Sam",
+ "april": "Nin Seiq",
+ "may_long": "Nin Haj",
+ "june": "Nin Loekj",
+ "july": "Nin Caet",
+ "august": "Nin Betq",
+ "september": "Nin Gouj",
+ "october": "Nin Cwbx",
+ "november": "Nin Cwbx Wtj",
+ "december": "Nin Cwbx Yeih",
+ "january-gen": "It nyied",
+ "february-gen": "Ngeih nyied",
+ "march-gen": "Sam nyied",
+ "april-gen": "Seiq nyied",
+ "may-gen": "Nin Haj",
+ "june-gen": "Loeg nyied",
+ "july-gen": "Caet nyied",
+ "august-gen": "Bet nyied",
+ "september-gen": "Nin Gouj",
+ "october-gen": "Cib nyied",
+ "november-gen": "Cibit nyied",
+ "december-gen": "Cibngeih nyied",
+ "jan": "Itnyied",
+ "feb": "Ngeihnyied",
+ "mar": "Samnyied",
+ "apr": "Seiqnyied",
+ "may": "Nguxnyied",
+ "jun": "Loegnyied",
+ "jul": "Caetnyied",
+ "aug": "Batnyied",
+ "sep": "Goujnyied",
+ "oct": "Cibnyied",
+ "nov": "Cib'itnyied",
+ "dec": "Cibngeihnyied",
+ "pagecategories": "{{PLURAL:$1$1 aen|faendingz|faendingz}}",
+ "subcategories": "Faendingz lwgsai",
+ "about": "Gvendaengz",
+ "article": "Banjbienj",
+ "cancel": "Fwtqfex",
+ "mytalk": "Gaeq gou gangj",
+ "navigation": "Dazzaeuh",
+ "qbfind": "Ra",
+ "qbedit": "Gaij",
+ "qbmyoptions": "Yieb gou",
+ "faq": "Cam caeuq dap",
+ "faqpage": "Project:Cam caeuq dap",
+ "errorpagetitle": "Loengloek",
+ "tagline": "okcih {{SITENAME}}",
+ "help": "Bangcoh",
+ "search": "Cwmh",
+ "searchbutton": "Cwmh",
+ "go": "Bae",
+ "searcharticle": "Bae",
+ "history": "Lizsij",
+ "history_short": "Lizsij",
+ "printableversion": "Gojyaenq banj",
+ "permalink": "Gaeq-lamh kaemdaengz",
+ "edit": "gaij",
+ "create": "Laeb",
+ "delete": "Duz",
+ "protect": "Hahdiuz",
+ "protect_change": "gaij",
+ "newpage": "Bienj moq",
+ "talkpage": "Dunjlun yieb neix",
+ "talkpagelinktext": "Daujlun",
+ "personaltools": "Hongdawz bonjfaenh",
+ "talk": "Kwng",
+ "views": "Cazyawj",
+ "toolbox": "Loengx hong",
+ "jumpto": "Diuq bae",
+ "jumptonavigation": "Dazzaeuh",
+ "jumptosearch": "Ra",
+ "aboutsite": "Gvanhyih {{SITENAME}}",
+ "aboutpage": "Project:gvanhyih",
+ "currentevents": "Saehgienh seizneix",
+ "disclaimers": "gangjmingz mienxcwz",
+ "disclaimerpage": "Project:Itbuen mienxcwz",
+ "edithelp": "Caeuq mungz san-zonz",
+ "mainpage": "Yiebdaeuz",
+ "mainpage-description": "Yiebdeauz",
+ "policy-url": "Project:fuengcim",
+ "portal": "Segih",
+ "portal-url": "Project:seqgih",
+ "privacy": "Seiyaem cwngcwz",
+ "privacypage": "Project:Seiyaem cwngcwz",
+ "badaccess": "Loengloek gienzhanh",
+ "badaccess-group0": "Cingjgouz mwngz mbouj haengj ciuqguh.",
+ "badaccess-groups": "Cingjgouz mwngz hanh youq {{PLURAL:$2|neix|gijneix}} bouxyungh: $1",
+ "versionrequired": "Sihyau MediaWiki $1",
+ "versionrequiredtext": "Sihyau MediaWik $1 caengj daeng sawjyungh.",
+ "youhavenewmessages": "Mungz meiz $1($2)。",
+ "editsection": "gaij",
+ "editold": "gaij",
+ "editlink": "gaij",
+ "editsectionhint": "Gaij duenh:$1",
+ "showtoc": "yienh'ok",
+ "hidetoc": "cangz",
+ "nstab-main": "Feanzcieng",
+ "nstab-user": "Yieb bouxsawjyungq",
+ "nstab-project": "Yieb giva",
+ "nstab-image": "Vwnzgen",
+ "nstab-mediawiki": "Siuhsik",
+ "nstab-template": "Mozbanj",
+ "nstab-help": "Yieb bangcoh",
+ "nstab-category": "Faendingz",
+ "viewsource": "Liuq lagh mae-nej",
+ "yourname": "Ciu bouxdeiz:",
+ "yourpassword": "Mizmak:",
+ "login": "Dwnghluz",
+ "nav-login-createaccount": "dwngh haeuj/laebbaen canghu",
+ "userlogin": "Daengh haeuj/Laeb bouxdeiz",
+ "logout": "Doiq ok",
+ "userlogout": "Doiq ok",
+ "notloggedin": "Maengx laezhaej",
+ "nologinlink": "Laeb bouxdeiz",
+ "summary": "Saegmangj:",
+ "minoredit": "Di-nej gaij noix",
+ "watchthis": "Gamyawj yieb neix",
+ "savearticle": "Zonzdiuz mae-nej",
+ "showpreview": "Okqhaej piu-ngoengx",
+ "showdiff": "Okqhaej gaeqgaei",
+ "newarticle": "(Moq)",
+ "editundo": "siu",
+ "searchresults": "gietgoj ra",
+ "searchresults-title": "doiq \"$1\" gij gietgoj ra",
+ "search-interwiki-more": "(more)",
+ "powersearch-legend": "Gauhgiz saeu",
+ "mypreferences": "Doenghgaeq gou hae",
+ "searchresultshead": "Cwmh",
+ "username": "Ciu bouxdeiz:",
+ "group-user-member": "{{GENDER:$1|Bouxsawjyungq}}",
+ "action-edit": "gaij yieb neix",
+ "recentchanges": "Gaeqgaij seizneix",
+ "diff": "Faenbied",
+ "hide": "Cangz",
+ "show": "Yienh'ok",
+ "minoreditletter": "n",
+ "newpageletter": "M",
+ "boteditletter": "g",
+ "recentchangeslinked": "Lienh ok gaengaij",
+ "upload": "Cienz vwnzgen",
+ "uploadnologin": "Maengx laezhaej",
+ "filedesc": "Saegmangj",
+ "fileuploadsummary": "Saegmangj:",
+ "watchthisupload": "Demq mae-nej",
+ "listfiles_user": "Bouxyungh",
+ "filehist-current": "seizneix",
+ "filehist-datetime": "Ngoenz/Seizgan",
+ "filehist-user": "Bouxsawjyungh",
+ "filehist-comment": "Gejgangj",
+ "randompage": "Mae zaihzex",
+ "statistics-pages": "Yieb",
+ "nbytes": "$1 {{PLURAL:$1|cihciet|cihciet}}",
+ "newpages": "Yieb moq",
+ "newpages-username": "Ciu bouxdeiz:",
+ "move": "Daen",
+ "movethispage": "Caen mae nej",
+ "log": "Ngoenzceiq",
+ "allpages": "Sojmiz yieb",
+ "allarticles": "Sojmiz yieb",
+ "allpagessubmit": "Bae",
+ "watchlist": "Yieb gou yawj",
+ "mywatchlist": "Gaeq gou demq",
+ "watchnologin": "Maengx laezhaej",
+ "watch": "Demq",
+ "watchthispage": "Demq mae-nej",
+ "watching": "Bawxndu……",
+ "unwatching": "Souma bawxndu……",
+ "prot_1movedto2": "[[$1]] caen bei [[$2]]",
+ "restriction-move": "Caen",
+ "namespace": "ndawhoengq mingzcih:",
+ "blanknamespace": "(Cujyau)",
+ "contributions": "Gaeq bouxdeiz haej",
+ "mycontris": "Gaeq gou haej",
+ "uctop": "(dingz)",
+ "sp-contributions-submit": "Ra",
+ "whatlinkshere": "Maelaez lamh haenznej",
+ "whatlinkshere-page": "Yieb:",
+ "ipblocklist-submit": "Cwmh",
+ "contribslink": "gung'yen",
+ "move-page-legend": "Caen doengh mae",
+ "movearticle": "Caen doengh mae:",
+ "move-watch": "Demq mae-nej",
+ "movepagebtn": "Caen doengh mae",
+ "movereason": "Haujgaemj",
+ "revertmove": "siu",
+ "tooltip-pt-mytalk": "Yieb daujlun mwngz",
+ "tooltip-pt-preferences": "Doenghgaeq gou hae",
+ "tooltip-pt-logout": "Doiq ok",
+ "tooltip-ca-talk": "Gvanhyih cingqfaenz yieb gij daojun",
+ "tooltip-ca-history": "yieb neix gij banj lizsij",
+ "tooltip-ca-move": "Dean yieb neix",
+ "tooltip-search": "Ra {{SITENAME}}",
+ "tooltip-p-logo": "Mae meh",
+ "tooltip-n-mainpage": "Raen Yiebdaeuz",
+ "tooltip-n-randompage": "Cang haeuj yieb seizgih",
+ "tooltip-n-help": "Cimh gouz bangcoh",
+ "tooltip-t-upload": "Cienz vwnzgen",
+ "tooltip-ca-nstab-main": "Cazyawj ndawyungz yieb",
+ "ilsubmit": "Cwmh",
+ "namespacesall": "cenzbu",
+ "monthsall": "cenzbu",
+ "imgmultigo": "Bei!",
+ "table_pager_limit_submit": "Bei",
+ "watchlisttools-view": "Cazyawj gaij mizgven",
+ "specialpages": "Doenghmae daegxsei",
+ "tags-edit": "gaij"
}
diff --git a/languages/i18n/zea.json b/languages/i18n/zea.json
index e99e9f27..285afdf4 100644
--- a/languages/i18n/zea.json
+++ b/languages/i18n/zea.json
@@ -3,7 +3,8 @@
"authors": [
"NJ",
"Ooswesthoesbes",
- "아라"
+ "아라",
+ "Robin0van0der0vliet"
]
},
"tog-underline": "Lienks onderstreepn:",
@@ -123,7 +124,7 @@
"cancel": "Afbreke",
"moredotdotdot": "Meêr …",
"mypage": "Mien gebrukerspagina",
- "mytalk": "Mien overleg",
+ "mytalk": "Overleg",
"anontalk": "Discussie vò dit IP-adres",
"navigation": "Navigaotie",
"and": "&#32;en",
@@ -292,7 +293,9 @@
"titleprotected": "'t Anmaeken van deêze pagina is beveiligd deur [[User:$1|$1]].\nDe heheven reeën is ''$2''.",
"logouttext": "'''Je bin noe ofemeld.'''\n\nJe kan {{SITENAME}} noe anoniem gebruken of wee anmelden as dezelven of een aore gebruker.\nMeuhlijk worn nog een antal pagina's weereheven asof a je anemeld bin totda je de cache van je browser leeg.",
"yourname": "Gebrukersnaem",
+ "userlogin-yourname": "Gebrukersnaem",
"yourpassword": "Wachtwoôrd",
+ "userlogin-yourpassword": "Wachtwoôrd",
"yourpasswordagain": "Heef je wachtwoôrd opnieuw in:",
"remembermypassword": "Anmeldhehevens ontouwen (maximaal $1 {{PLURAL:$1|dag|daege}})",
"yourdomainname": "Je domein:",
@@ -344,6 +347,9 @@
"createaccount-title": "Gebrukers anmaeken voe {{SITENAME}}",
"createaccount-text": "Iemand ei een gebruker op {{SITENAME}} ($4) anemikt mie de naem \"$2\" en joen e-mailadres. 't Wachtwoôrd voe \"$2\" is \"$3\". Mel jen eihen an en wiezig je wachtwoôrd.\n\nNeheer dit bericht as deêze gebruker zonder joe medeweten is anemikt.",
"loginlanguagelabel": "Taele: $1",
+ "pt-login": "Anmelden",
+ "pt-login-button": "Anmelden",
+ "pt-userlogout": "Ofmelden",
"changepassword": "Wachtwoôrd wiezigen",
"resetpass_announce": "Je bin anemeld mie een tiedelijke code die a je per e-mail is toe-ezon'n. Voer een nieuw wachtwoôrd in om 't anmelden te voltooien:",
"resetpass_header": "Wachtwoôrd herinstell'n",
@@ -437,7 +443,7 @@
"templatesusedpreview": "Sjabloon'n gebruukt in deêze voevertoônieng:",
"templatesusedsection": "Sjabloon'n die an gebruukt worn in deêze subkop:",
"template-protected": "(beveiligd)",
- "template-semiprotected": "(semi-beveiligd)",
+ "template-semiprotected": "(semibeveiligd)",
"hiddencategories": "Deêze pagina val in de volhende verborhen {{PLURAL:$1|categorie|categorieën}}:",
"nocreatetext": "{{SITENAME}} ei de meuhlijkeid om nieuwe pagina's an te maeken beperkt.\nJe kan a bestaende pagina's wiezigen, of je kan [[Special:UserLogin|jen eihen anmelden of een gebruker anmaeken]].",
"nocreate-loggedin": "Je kan hin nieuwe pagina's anmaeken.",
@@ -529,7 +535,6 @@
"mergehistory-autocomment": "[[:$1]] saemenevoegd ni [[:$2]]",
"mergehistory-comment": "[[:$1]] saemenevoegd ni [[:$2]]: $3",
"mergelog": "Saemenvoehiengslogboek",
- "pagemerge-logentry": "voehen [[$1]] ni [[$2]] saemen (versies tot en met $3)",
"revertmerge": "Saemenvoehieng onhedaen maeken",
"mergelogpagetext": "Ieronder zie je een lieste van recente saemenvoehiengen van een paginaheschiedenisse ni een aorn.",
"history-title": "Heschiedenisse van \"$1\"",
@@ -565,13 +570,12 @@
"searchrelated": "gerelateerd",
"searchall": "aolle",
"showingresults": "Ieronder {{PLURAL:$1|sti '''1''' resultaot|staen '''$1''' resultaoten}} vanof #'''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Resultaot '''$1''' von '''$3'''|Resultaot'n '''$1 - $2''' von '''$3'''}} vò '''$4'''",
"search-nonefound": "Er zin geen resultaot'n vò je zoekopdracht.",
"powersearch-legend": "Uutebreid zoeken",
"search-external": "Extern zoeken",
"searchdisabled": "Zoeken in {{SITENAME}} is nie meuhlijk.\nJe kan gebruuk maeken van Google.\nDe hehevens over {{SITENAME}} zien meuhlijk nie bie'ewerkt.",
"preferences": "Vòkeuren",
- "mypreferences": "Mien vòkeuren",
+ "mypreferences": "Vòkeuren",
"prefs-edits": "Antal bewerkiengen:",
"prefs-skin": "Vurmhevieng",
"skin-preview": "Voevertoônienge",
@@ -710,6 +714,7 @@
"watchthisupload": "Volg deêze bladzie",
"license": "Licentie:",
"license-header": "Licentie",
+ "imgfile": "bestand",
"file-anchor-link": "Bestand",
"filehist": "Bestandsgeschiedenisse",
"filehist-help": "Klik op 'n datum/tied om 't bestand te zien zoas 't van d'r tied woas.",
@@ -743,7 +748,6 @@
"pager-older-n": "{{PLURAL:$1|1 ouwere|$1 ouwere}}",
"booksources": "Bronnen vò boeken",
"booksources-search-legend": "Bronn'n en informaosie over 'n boek zoek'n",
- "booksources-go": "OK",
"specialloguserlabel": "Gebruker:",
"log": "Logboek'n",
"alllogstext": "Saemengesteld overzicht van de wis-, bescherm-, blokkeer- en gebrukerslechtenlogboeken.\nJe kan 't overzicht bepaelen deu 'n soôrte logboek, 'n gebrukersnaem of eên bladzie uut te kiezen.",
@@ -764,7 +768,7 @@
"emailuser": "E-mail deêze gebruker",
"emailpage": "E-mail gebruker",
"watchlist": "Volglieste",
- "mywatchlist": "Mien volglieste",
+ "mywatchlist": "Volglieste",
"watchlistfor2": "Vò $1 $2",
"watchnologin": "Je bin nie angemolde.",
"addedwatchtext": "De bladzie \"[[:$1]]\" is an je [[Special:Watchlist|Volglieste]] toegevoegd.\nVeranderiengen an deêze bladzie en de overlegbladzie die-a d'rbie oort zulle ierop zichtbaer ore\nen de bladzie komt '''vet''' te staen in de [[Special:RecentChanges|lieste van wat-a juust veranderd is]], daermee 't makkeliker te vinden is.\nA je de bladzie laeter weêr van je volglieste afaele wil, klik dan op \"nie meêr volge\" bovenan de bladzie.",
@@ -772,7 +776,7 @@
"watchthispage": "Bekiek deêze bladzie",
"unwatch": "Nie meêr volge",
"watchlist-details": "Er {{PLURAL:$1|sti eên pagina|staen $1 pagina's}} op je volglieste, exclusief overlegpagina's.",
- "wlshowlast": "Laetste $1 uur, $2 daegen bekieken ($3)",
+ "wlshowlast": "Laetste $1 uur, $2 daegen bekieken ()",
"watchlist-options": "Opties vò volglieste",
"actioncomplete": "Actie uutgevoerd",
"actionfailed": "De handelienge is mislukt.",
@@ -791,7 +795,7 @@
"blanknamespace": "(Artikels)",
"contributions": "Biedraegen gebruker",
"contributions-title": "Biedraen van $1",
- "mycontris": "Mien biedraegen",
+ "mycontris": "Biedraegen",
"contribsub2": "Vò $1 ($2)",
"uctop": "(laetste wiezigieng)",
"month": "Von maend (en eêder):",
@@ -914,11 +918,11 @@
"file-nohires": "Hin 'oôgere resolutie beschikbaer",
"svg-long-desc": "SVG-bestand, nominaal $1 × $2 pixels, bestandshroôtte: $3",
"show-big-image": "Volledige resolutie",
+ "show-big-image-size": "$1 × $2 pixels",
"bad_image_list": "De opmaek is as vogt:\n\nAlleên regels in 'n lieste (regels die beginn'n mè *) worr'n verwarkt.\nDe eêste verwiezienge op 'n regel moe 'n verwiezienge zin nir 'n ongewenst bestand.\nAolle voggende verwieziengen die op dezelfde regel staen, worr'n behandeld as uutzonderienge, zoas bievòbild pagina's wirop 't bestand in de tekst is opgenaem'n.",
"metadata": "Metadata",
"metadata-help": "Dit bestand bevat anvullende informaotie, die deur 'n fotocaomera, scanner of fotobewarkiengsprogramma toegevoegd kan zien. As 't bestand angepast is, kommen details mogelijk nie overeên mei 't gewiezigde bestand.",
"metadata-fields": "De aofbildiengsmetadataveld'n in dit bericht worr'n oôk weergegeev'n op 'n aofbildiengspagina as de metadatatabel ingeklapt is.\nAorre veld'n worr'n verborr'n.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
- "watchlistall2": "aol",
"namespacesall": "aol",
"monthsall": "aolle",
"imgmultipageprev": "← vorrege bladzie",
@@ -939,5 +943,7 @@
"tag-filter": "[[Special:Tags|Labelfilter]]:",
"revdelete-restricted": "ei beperkiengen an beheêrders opeleid",
"revdelete-unrestricted": "ei beperkiengen voe beheêrders opeheven",
- "rightsnone": "(hin)"
+ "rightsnone": "(hin)",
+ "revdelete-summary": "saemenvattieng bewerken",
+ "searchsuggest-search": "Zoek"
}
diff --git a/languages/i18n/zh-hans.json b/languages/i18n/zh-hans.json
index aa08443c..91a19dc4 100644
--- a/languages/i18n/zh-hans.json
+++ b/languages/i18n/zh-hans.json
@@ -80,25 +80,27 @@
"Duolaimi",
"TianyinLee",
"NigelSoft",
- "Zhuyifei1999"
+ "Zhuyifei1999",
+ "Davidzdh",
+ "LNDDYL"
]
},
"tog-underline": "链接下划线:",
"tog-hideminor": "隐藏最近更改中的小编辑",
"tog-hidepatrolled": "隐藏最近更改中的已巡查编辑",
"tog-newpageshidepatrolled": "隐藏新页面列表中的已巡查页面",
- "tog-extendwatchlist": "扩展监视列表以显示所有更改,而不仅限于最近更改",
+ "tog-extendwatchlist": "扩展监视列表以显示所有更改,而不仅是最近的更改",
"tog-usenewrc": "按页面合并最近更改和监视列表中的更改",
"tog-numberheadings": "自动编号标题",
"tog-showtoolbar": "显示编辑工具栏",
"tog-editondblclick": "双击编辑页面",
"tog-editsectiononrightclick": "启用右击小节标题编辑段落",
- "tog-watchcreations": "将我创建的页面和我上传的文件添加至我的监视列表",
- "tog-watchdefault": "将我编辑的页面和文件添加至我的监视列表",
- "tog-watchmoves": "将我移动的页面和文件添加至我的监视列表",
- "tog-watchdeletion": "将我删除的页面和文件添加至我的监视列表",
- "tog-watchrollback": "将我回退过的页面添加至我的监视列表",
- "tog-minordefault": "将所有编辑默认标记为小编辑",
+ "tog-watchcreations": "添加我创建的页面和我上传的文件至我的监视列表",
+ "tog-watchdefault": "添加我编辑的页面和文件至我的监视列表",
+ "tog-watchmoves": "添加我移动的页面和文件至我的监视列表",
+ "tog-watchdeletion": "添加我删除的页面和文件至我的监视列表",
+ "tog-watchrollback": "添加我执行过回退的页面至我的监视列表",
+ "tog-minordefault": "默认标记所有编辑为小编辑",
"tog-previewontop": "在编辑框上方显示预览",
"tog-previewonfirst": "首次编辑时显示预览",
"tog-enotifwatchlistpages": "当我的监视列表中的页面或文件更改时发送电子邮件通知我",
@@ -108,7 +110,7 @@
"tog-shownumberswatching": "显示监视用户数",
"tog-oldsig": "当前签名:",
"tog-fancysig": "将签名视为维基文本(不自动生成链接)",
- "tog-uselivepreview": "使用实时预览(试验中)",
+ "tog-uselivepreview": "使用实时预览",
"tog-forceeditsummary": "未输入编辑摘要时提醒我",
"tog-watchlisthideown": "隐藏监视列表中的我的编辑",
"tog-watchlisthidebots": "隐藏监视列表中的机器人编辑",
@@ -196,15 +198,15 @@
"category_header": "分类“$1”中的页面",
"subcategories": "子分类",
"category-media-header": "分类“$1”中的媒体文件",
- "category-empty": "<em>本分类目前没有包含页面或媒体文件。</em>",
- "hidden-categories": "{{PLURAL:$1|隐藏分类|$1个隐藏分类}}",
+ "category-empty": "<em>本分类目前不含有任何页面或媒体文件。</em>",
+ "hidden-categories": "{{PLURAL:$1|隐藏分类}}",
"hidden-category-category": "隐藏分类",
"category-subcat-count": "{{PLURAL:$2|本分类只有以下子分类。|本分类有以下$1个子分类,共有$2个子分类。}}",
"category-subcat-count-limited": "本分类有以下{{PLURAL:$1|子分类|$1个子分类}}。",
- "category-article-count": "{{PLURAL:$2|本分类只包含以下页面。|本分类中包含以下$1个页面,共$2个页面。}}",
- "category-article-count-limited": "当前分类包含以下$1个页面。",
- "category-file-count": "{{PLURAL:$2|本分类只包含以下一个文件。|本分类包含以下$1个文件,共$2个文件。}}",
- "category-file-count-limited": "当前分类包含以下$1个文件。",
+ "category-article-count": "{{PLURAL:$2|本分类只含有以下页面。|以下{{PLURAL:$1|页面|$1个页面}}属于本分类,共$2个页面。}}",
+ "category-article-count-limited": "以下{{PLURAL:$1|页面|$1个页面}}属于当前分类。",
+ "category-file-count": "{{PLURAL:$2|本分类只含有以下文件。|以下{{PLURAL:$1|文件|$1个文件}}属于本分类,共$2个文件。}}",
+ "category-file-count-limited": "以下{{PLURAL:$1|文件|$1个文件}}属于当前分类。",
"listingcontinuesabbrev": "续",
"index-category": "已索引页面",
"noindex-category": "不可索引页面",
@@ -232,8 +234,8 @@
"namespaces": "命名空间",
"variants": "变种",
"navigation-heading": "导航菜单",
- "errorpagetitle": "错误",
- "returnto": "返回$1。",
+ "errorpagetitle": "出错",
+ "returnto": "返回至$1。",
"tagline": "来自{{SITENAME}}",
"help": "帮助",
"search": "搜索",
@@ -242,7 +244,7 @@
"searcharticle": "前往",
"history": "页面历史",
"history_short": "历史",
- "updatedmarker": "已于我上次访问之后更新",
+ "updatedmarker": "更新于我上次访问后",
"printableversion": "打印版本",
"permalink": "固定链接",
"print": "打印",
@@ -258,7 +260,7 @@
"deletethispage": "删除本页",
"undeletethispage": "还原本页",
"undelete_short": "还原$1次编辑",
- "viewdeleted_short": "查看$1个已删除的编辑",
+ "viewdeleted_short": "查看{{PLURAL:$1|$1个被删除的编辑}}",
"protect": "保护",
"protect_change": "更改",
"protectthispage": "保护本页",
@@ -276,7 +278,7 @@
"userpage": "查看用户页面",
"projectpage": "查看项目页面",
"imagepage": "查看文件页面",
- "mediawikipage": "查看消息页面",
+ "mediawikipage": "查看信息页面",
"templatepage": "查看模板页面",
"viewhelppage": "查看帮助页面",
"categorypage": "查看分类页面",
@@ -291,33 +293,35 @@
"jumpto": "跳转至:",
"jumptonavigation": "导航",
"jumptosearch": "搜索",
- "view-pool-error": "对不起,服务器当前正超负荷运转。过多用户正尝试查看本页面。请在再次尝试访问本页面前稍等片刻。\n\n$1",
- "generic-pool-error": "对不起,服务器目前超负荷运转。太多用户尝试查看本页面。请稍等片刻再重新尝试。",
+ "view-pool-error": "对不起,服务器当前正超负荷运转。正在尝试查看本页面的用户过多。在重新尝试访问本页面之前,请您稍等片刻。\n\n$1",
+ "generic-pool-error": "对不起,服务器当前正超负荷运转。正在尝试查看本资源的用户过多。在重新尝试访问本资源之前,请您稍等片刻。",
"pool-timeout": "等待锁超时",
"pool-queuefull": "请求队列已满",
"pool-errorunknown": "未知错误",
"pool-servererror": "池计数器服务不可用($1)。",
+ "poolcounter-usage-error": "用法错误:$1",
"aboutsite": "关于{{SITENAME}}",
"aboutpage": "Project:关于",
"copyright": "除非另有声明,本网站内容采用$1授权。",
- "copyrightpage": "{{ns:project}}:著作权",
+ "copyrightpage": "{{ns:project}}:版权",
"currentevents": "新闻动态",
"currentevents-url": "Project:新闻动态",
"disclaimers": "免责声明",
"disclaimerpage": "Project:免责声明",
"edithelp": "编辑帮助",
+ "helppage-top-gethelp": "帮助",
"mainpage": "首页",
"mainpage-description": "首页",
"policy-url": "Project:方针",
"portal": "社区主页",
- "portal-url": "Project:社区专页",
+ "portal-url": "Project:社区门户",
"privacy": "隐私政策",
- "privacypage": "Project:隐私权政策",
+ "privacypage": "Project:隐私政策",
"badaccess": "权限错误",
- "badaccess-group0": "你被禁止执行你刚才请求的操作。",
- "badaccess-groups": "您请求的操作仅限属于{{PLURAL:$2|该用户组|这些用户组}}的用户执行:$1",
+ "badaccess-group0": "不允许您执行您所请求的操作。",
+ "badaccess-groups": "您所请求的操作仅限于{{PLURAL:$2|该|这些}}用户组的用户使用:$1",
"versionrequired": "需要$1版本的MediaWiki",
- "versionrequiredtext": "使用本页需要$1版本的MediaWiki。请见[[Special:Version|版本页面]]。",
+ "versionrequiredtext": "使用本页需要$1版本的MediaWiki。请参见[[Special:Version|版本页面]]。",
"ok": "确定",
"backlinksubtitle": "←$1",
"retrievedfrom": "取自“$1”",
@@ -332,7 +336,7 @@
"viewsourceold": "查看源代码",
"editlink": "编辑",
"viewsourcelink": "查看源代码",
- "editsectionhint": "编辑段落:$1",
+ "editsectionhint": "编辑小节:$1",
"toc": "目录",
"showtoc": "显示",
"hidetoc": "隐藏",
@@ -364,20 +368,20 @@
"nstab-template": "模板",
"nstab-help": "帮助页面",
"nstab-category": "分类",
- "nosuchaction": "无该命令",
- "nosuchactiontext": "URL指定的操作无效。你可能输入了错误的URL地址,或是点击了错误的链接。这也可能表明{{SITENAME}}使用的软件的存在漏洞(bug)。",
+ "nosuchaction": "无此操作",
+ "nosuchactiontext": "URL指定的操作无效。您可能输入了错误的URL地址,或是点击了错误的链接。这也可能表明{{SITENAME}}使用的软件存在漏洞。",
"nosuchspecialpage": "此特殊页面不存在",
"nospecialpagetext": "<strong>您请求了一个无效的特殊页面。</strong>\n\n有效的特殊页面的列表可以在[[Special:SpecialPages|{{int:specialpages}}]]找到。",
"error": "出错",
"databaseerror": "数据库错误",
- "databaseerror-text": "数据库查询出错。这可能表明软件中存在漏洞(bug)。",
- "databaseerror-textcl": "数据库查询出错。",
+ "databaseerror-text": "出现数据库查询错误。这可能表示软件中存在漏洞。",
+ "databaseerror-textcl": "出现数据库查询错误。",
"databaseerror-query": "查询:$1",
"databaseerror-function": "函数:$1",
- "databaseerror-error": "出错:$1",
- "laggedslavemode": "'''警告:'''页面可能没有包含最近的更新。",
+ "databaseerror-error": "错误:$1",
+ "laggedslavemode": "'''警告:'''页面中可能没有包含最近的更新。",
"readonly": "数据库被锁定",
- "enterlockreason": "请输入锁定的原因(包括预计解锁的时间)",
+ "enterlockreason": "请输入锁定的原因,这包括预计解除锁定的时间",
"readonlytext": "数据库当前被锁定,不能添加新条目或进行其他修改,锁定可能是因为例行的数据库维护,完成后即可恢复正常。\n\n锁定数据库的管理员提供的解释:$1",
"missing-article": "数据库找不到预期的页面文字:“$1”$2。\n\n这通常是由于点击了链向旧有差异或历史的链接,而原有版本已被删除导致的。\n\n如果情况不是这样,您可能找到了软件的一个内部错误。请记录下URL地址,并向[[Special:ListUsers/sysop|管理员]]报告。",
"missingarticle-rev": "(版本#:$1)",
@@ -385,10 +389,13 @@
"readonly_lag": "附属数据库服务器正在将缓存更新到主服务器上,数据库已被自动锁定",
"internalerror": "内部错误",
"internalerror_info": "内部错误:$1",
+ "internalerror-fatal-exception": "类型“$1”的致命错误",
"filecopyerror": "无法将文件“$1”复制到“$2”。",
"filerenameerror": "无法将文件“$1”重命名为“$2”。",
"filedeleteerror": "无法删除文件“$1”。",
"directorycreateerror": "无法创建目录“$1”。",
+ "directoryreadonlyerror": "目录“$1”是只读的。",
+ "directorynotreadableerror": "目录“$1”无法读取。",
"filenotfound": "找不到文件“$1”。",
"unexpected": "非正常值:“$1”=“$2”。",
"formerror": "错误:无法提交表单",
@@ -410,8 +417,9 @@
"viewsourcetext": "您可以查看并复制此页面的源代码:",
"viewyourtext": "您可以查看并复制<strong>您对此页面作出编辑后</strong>的源代码:",
"protectedinterface": "该页提供此wiki软件的界面文字,它已被保护以防止恶意修改。\n如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
- "editinginterface": "'''警告:'''您正在编辑的页面是用于提供软件的界面文字。\n改变此页将影响其他在此wiki上的用户界面外观。\n如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
- "cascadeprotected": "本页面已经受到保护,不能编辑,因为它被嵌入了以下启用“级联”选项的受保护{{PLURAL:$1|页面}}:$2",
+ "editinginterface": "<strong>警告:</strong>您正在编辑用于提供软件的界面文字的页面。改变此页将影响其他在此wiki上其他用户的用户界面外观。",
+ "translateinterface": "要加入或更改所有wiki的翻译,请访问MediaWiki本地化项目网站[//translatewiki.net/ translatewiki.net]。",
+ "cascadeprotected": "本页面已经受到保护,不能编辑,因为它包含于以下被“连锁保护”的{{PLURAL:$1|页面}}:\n$2",
"namespaceprotected": "您没有权限编辑'''$1'''名字空间内的页面。",
"customcssprotected": "您没有权限编辑此CSS页面,因为它包含另一位用户的个人设置。",
"customjsprotected": "您没有权限编辑此JavaScript页面,因为它包含另一位用户的个人设置。",
@@ -467,6 +475,8 @@
"userlogin-resetlink": "忘记你的登录信息?",
"userlogin-resetpassword-link": "忘记密码?",
"userlogin-helplink2": "登录帮助",
+ "userlogin-loggedin": "您已经以{{GENDER:$1|$1}}的身份登录。使用下面的表格以其他用户的身份登录。",
+ "userlogin-createanother": "创建另一个账户",
"createacct-emailrequired": "电子邮件地址",
"createacct-emailoptional": "电子邮件地址(可选)",
"createacct-email-ph": "请输入你的电子邮件地址",
@@ -499,9 +509,10 @@
"nosuchusershort": "没有名为“$1”的用户。请检查你的拼写。",
"nouserspecified": "你必须指定用户名。",
"login-userblocked": "该用户已被封禁,禁止登录。",
- "wrongpassword": "你输入的密码错误。请重试。",
+ "wrongpassword": "您输入的密码错误。请重试。",
"wrongpasswordempty": "密码输入为空。请重试。",
"passwordtooshort": "您的密码至少需要$1个字符。",
+ "passwordtoolong": "密码不能超过{{PLURAL:$1|$1个字符}}。",
"password-name-match": "您的密码必须和您的用户名不相同。",
"password-login-forbidden": "这个用户名称及密码的使用是被禁止的。",
"mailmypassword": "重置密码",
@@ -573,7 +584,7 @@
"passwordreset-capture-help": "如果您选中此框,电子邮件(包括临时密码)将显示,并发送给用户。",
"passwordreset-email": "电子邮件地址:",
"passwordreset-emailtitle": "在 {{SITENAME}} 的帐户详细信息",
- "passwordreset-emailtext-ip": "有人(可能是您,来自IP地址$1)请求重设{{SITENAME}}($4)上相关账户的密码。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:\n\n$2\n\n这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。",
+ "passwordreset-emailtext-ip": "有人(可能是您,来自IP地址$1)请求重设{{SITENAME}}($4)上相关账户的密码。以下$3个账户与该电子邮件地址关联:\n\n$2\n\n这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。",
"passwordreset-emailtext-user": "用户$1请求重设{{SITENAME}}($4)上您的账户的密码。{{PLURAL:$3|以下账户|此账户}}与该电子邮件地址关联:\n\n$2\n\n这个临时密码将会在{{PLURAL:$5|一天|$5天}}后过期。请立即登录并设置新的密码。如果请求是其他人发出的,或者您已回忆起您的旧密码并不再需要更改,您可以忽略本条消息并继续使用原密码。",
"passwordreset-emailelement": "用户名:$1\n临时密码:$2",
"passwordreset-emailsent": "密码重置邮件已发送。",
@@ -603,7 +614,7 @@
"italic_tip": "斜体文字",
"link_sample": "链接文字",
"link_tip": "内部链接",
- "extlink_sample": "http://www.example.com 链接文字",
+ "extlink_sample": "http://www.example.com 链接标题",
"extlink_tip": "外部链接(加前缀 http://)",
"headline_sample": "大标题文字",
"headline_tip": "2级标题",
@@ -624,13 +635,15 @@
"showpreview": "显示预览",
"showdiff": "显示更改",
"blankarticle": "<strong>警告</strong>:您创建的页面是空白的。如果您再次点击“{{int:savearticle}}”,您将真的创建没有任何内容的页面。",
- "anoneditwarning": "<strong>警告:</strong>您没有登录。您做出任何编辑后您的IP地址会公开可见。如果您<strong>[$1 登陆]</strong>或<strong>[$2 注册]</strong>一个账户,您的编辑将归属于您的用户名,以及有其他好处。",
+ "anoneditwarning": "<strong>警告:</strong>您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您<strong>[$1 登陆]</strong>或<strong>[$2 创建]</strong>一个账户,您的编辑将归属于您的用户名,且将享受其他好处。",
"anonpreviewwarning": "<em>你没有登录。保存会记录你的IP地址于该页面的编辑历史中。</em>",
"missingsummary": "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
+ "selfredirect": "<strong>警告:</strong>您正在将此页面重定向至它自己。\n您可能指定了错误的重定向目标,或者您正在编辑错误的页面。\n如果您再次点击“{{int:savearticle}}”,重定向将无论如何被创建。",
"missingcommenttext": "请在下面输入评论。",
"missingcommentheader": "'''提示:''' 您还没有为此评论提供一个标题。如果您再次点击“{{int:savearticle}}”,您的编辑将不带标题保存。",
"summary-preview": "摘要预览:",
"subject-preview": "标题预览:",
+ "previewerrortext": "尝试预览您的更改时发生未知错误。",
"blockedtitle": "用户被封禁",
"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|系统设置]]确认了电子邮件地址且未被禁止使用“电邮联系”功能时,才可以使用它。你当前的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|系统设置]]确认了电子邮件地址且未被禁止使用“电邮联系”功能时,才能发送电子邮件联系管理员。\n\n您当前的IP地址为$3,该封禁ID为#$5。\n请您在申诉内容中说明以上所有信息。",
@@ -645,7 +658,7 @@
"accmailtitle": "密码已寄出",
"accmailtext": "为[[User talk:$1|$1]]随机生成的密码已送至$2。登录后可以在''[[Special:ChangePassword|更改密码]]''页面中修改。",
"newarticle": "(新页面)",
- "newarticletext": "你点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[$1 帮助页面])。如果你是错误地到达这里,请点击你的浏览器的'''返回'''按钮。",
+ "newarticletext": "你点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[$1 帮助页面])。如果你是错误地到达这里,请点击您的浏览器的<strong>返回</strong>按钮。",
"anontalkpagetext": "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
"noarticletext": "本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>",
"noarticletext-nopermission": "本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]</span>,但你没有权限创建本页面。",
@@ -654,8 +667,8 @@
"userpage-userdoesnotexist-view": "用户账户“$1”没有被注册。",
"blocked-notice-logextract": "这位用户目前已被封禁。以下提供最近的封禁日志以供参考:",
"clearyourcache": "'''注意:'''在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。\n* '''Firefox/Safari:'''按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)\n* '''Google Chrome:'''按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)\n* '''Internet Explorer:'''按住“Ctrl”的同时单击“刷新”,或按“Ctrl-F5”\n* '''Opera:'''在“工具→首选项”中清除缓存",
- "usercssyoucanpreview": "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
- "userjsyoucanpreview": "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
+ "usercssyoucanpreview": "<strong>提示:</strong>在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
+ "userjsyoucanpreview": "<strong>提示:</strong>在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
"usercsspreview": "'''请记住你现在只是在预览你的用户CSS。它尚未保存!'''",
"userjspreview": "'''请记住你现在只是在测试/预览你的用户JavaScript。它尚未保存!'''",
"sitecsspreview": "'''请记住你现在只是在预览该CSS。它尚未保存!'''",
@@ -668,7 +681,7 @@
"previewconflict": "该预览反映了上面文字编辑区中的文字在你保存后的显示状况。",
"session_fail_preview": "'''对不起!由于会话数据丢失,我们无法处理你的编辑。'''请重试。如果仍然失败,请尝试[[Special:UserLogout|退出登录]]后重新登录。",
"session_fail_preview_html": "'''对不起!由于会话数据丢失,我们无法处理你的编辑。'''\n\n''因为{{SITENAME}}已启用原始HTML,为了预防JavaScript攻击,预览被隐藏。''\n\n'''如果该编辑尝试合法,请重试。'''如果仍然失败,请尝试[[Special:UserLogout|退出登录]]后重新登录。",
- "token_suffix_mismatch": "'''由于您用户端中的编辑令牌毁损了一些标点符号字元,您的编辑已经被拒绝。'''\n此次编辑被拒绝以防止页面文本损坏。\n这种情况通常在您使用含有故障的网页式匿名代理服务的时候出现。",
+ "token_suffix_mismatch": "<strong>由于您客户端中的编辑令牌毁损了一些标点符号字符,您的编辑已经被拒绝。</strong>\n此次编辑被拒绝以防止页面文本损坏。\n这种情况通常在您使用含有故障的网页式匿名代理服务的时候出现。",
"edit_form_incomplete": "'''编辑表格的某些部分没有到达服务器,请检查你的编辑是否完整并重试。'''",
"editing": "编辑“$1”",
"creating": "创建“$1”",
@@ -676,18 +689,18 @@
"editingcomment": "编辑“$1”(新段落)",
"editconflict": "编辑冲突:$1",
"explainconflict": "其他用户在你开始编辑后更改了该页面。上面的文字区含有该页面当前的文字。下面的文字区显示你的更改。你必须把你的更改合并至现有文字。'''只有'''当你单击“{{int:savearticle}}”后,上面的文字区中的文字才会被保存。",
- "yourtext": "你的文字",
+ "yourtext": "您的文字",
"storedversion": "已保存的版本",
"nonunicodebrowser": "'''警告:您的浏览器不兼容Unicode编码。'''这里有一个工作区将使您能安全地编辑页面:非ASCII字符将以十六进制编码方式出现在编辑框中。",
"editingold": "'''警告:你正在编辑的是本页面的旧版本。'''如果你保存该编辑,该版本后的所有更改都会丢失。",
"yourdiff": "差异",
"copyrightwarning": "请注意您对{{SITENAME}}的所有贡献都被认为是在$2下发布,请查看在$1的细节。\n如果您不希望您的文字被任意修改和再散布,请不要提交。<br />\n您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源。\n'''不要在未获授权的情况下发表!'''<br />",
- "copyrightwarning2": "请注意您对{{SITENAME}}的所有贡献\n都可能被其他贡献者编辑,修改或删除。\n如果您不希望您的文字被任意修改和再散布,请不要提交。<br />\n您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅$1的细节)。\n'''不要在未获授权的情况下发表!'''",
+ "copyrightwarning2": "请注意,您对{{SITENAME}}的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。<br />\n您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅$1的细节)。'''不要在未获授权的情况下发表!'''",
"longpageerror": "'''错误:您所提交的文本长度有{{PLURAL:$1|1|$1}}KB,这大于{{PLURAL:$2|1|$2}}KB的最大值。'''\n因此,该文本无法保存。",
- "readonlywarning": "警告:数据库被锁定以进行维护,所以您目前将无法保存您的修改。'''您或许希望将本段文字先剪贴并保存到文本文件,并在稍后进行修改。\n\n锁定数据库的管理员有如下解释:$1",
+ "readonlywarning": "<strong>警告:数据库被锁定以进行维护,所以您目前将无法保存您的编辑。</strong>您可能希望将您的文本复制粘贴到一个文本文档并保存它,以便稍后更改。\n\n锁定数据库的管理员有如下解释:$1",
"protectedpagewarning": "'''警告:本页面已被保护,只有拥有管理员权限的用户可以编辑。'''下面提供最后的日志条目以供参考:",
"semiprotectedpagewarning": "'''注意:'''本页面已被保护,只有注册用户可以编辑。下面提供最后的日志条目以供参考:",
- "cascadeprotectedwarning": "<strong>警告:</strong>本页面已经被保护,只有拥有管理员权限的用户可以编辑,因为它被嵌入了以下启用级联保护的{{PLURAL:$1|页面}}:",
+ "cascadeprotectedwarning": "<strong>警告:</strong>本页面已经被保护,只有拥有管理员权限的用户可以编辑,因为它包含于以下启用连锁保护的{{PLURAL:$1|页面}}中:",
"titleprotectedwarning": "'''警告:本页面已被保护,创建本页面需要[[Special:ListGroupRights|特定权限]]。'''下面提供最后的日志条目以供参考:",
"templatesused": "该页面使用的{{PLURAL:$1|模板}}:",
"templatesusedpreview": "本预览使用的{{PLURAL:$1|模板}}:",
@@ -725,8 +738,12 @@
"content-model-text": "纯文本",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "空的对象",
+ "content-json-empty-array": "空的数组",
+ "duplicate-args-category": "调用重复模板参数的页面",
+ "duplicate-args-category-desc": "页面包含调用了重复参数的模板,例如<code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code>或<code><nowiki>{{foo|bar|1=baz}}</nowiki></code>。",
"expensive-parserfunction-warning": "<strong>警告:</strong>这个页面有太多高昂的语法功能调用。\n\n它应该少过$2次呼叫,现在有$1次呼叫。",
- "expensive-parserfunction-category": "页面中有太多耗费的语法功能呼叫",
+ "expensive-parserfunction-category": "有过多高开销解析器函数调用的页面",
"post-expand-template-inclusion-warning": "'''警告:'''包含模板大小过大。\n一些模板将不会包含。",
"post-expand-template-inclusion-category": "模板包含上限已经超过的页面",
"post-expand-template-argument-warning": "<strong>警告:</strong>本页面包含至少一个模板参数有过大扩展大小。这些参数会被略过。",
@@ -735,11 +752,11 @@
"parser-template-recursion-depth-warning": "模板递归深度越限($1)",
"language-converter-depth-warning": "字词转换器深度越限($1)",
"node-count-exceeded-category": "页面的节点数超出限制",
- "node-count-exceeded-category-desc": "超出最高节点数的页面。",
- "node-count-exceeded-warning": "页面超出了节点数",
+ "node-count-exceeded-category-desc": "页面超出最大节点数限制。",
+ "node-count-exceeded-warning": "页面超出节点数限制",
"expansion-depth-exceeded-category": "扩展深度超出限制的页面",
- "expansion-depth-exceeded-category-desc": "页面超出最大扩展深度。",
- "expansion-depth-exceeded-warning": "页面超过了扩展深度",
+ "expansion-depth-exceeded-category-desc": "页面超出最大展开深度限制。",
+ "expansion-depth-exceeded-warning": "页面超出展开深度限制",
"parser-unstrip-loop-warning": "检测到回圈",
"parser-unstrip-recursion-limit": "递归超过限制 ($1)",
"converter-manual-rule-error": "在手动语言转换规则中检测到错误",
@@ -755,7 +772,7 @@
"viewpagelogs": "查看该页面的日志",
"nohistory": "本页面没有编辑历史记录。",
"currentrev": "最后版本",
- "currentrev-asof": "$1的最后版本",
+ "currentrev-asof": "$1的最新版本",
"revisionasof": "$1的版本",
"revision-info": "{{GENDER:$6|$2}}$1的版本$7",
"previousrevision": "←上一版本",
@@ -779,7 +796,7 @@
"history-feed-empty": "所请求的页面不存在。它可能已被删除或重命名。\n尝试[[Special:Search|搜索本站]]获得相关的新建页面。",
"rev-deleted-comment": "(编辑摘要被删除)",
"rev-deleted-user": "(用户名被删除)",
- "rev-deleted-event": "(日志操作被删除)",
+ "rev-deleted-event": "(日志详情已移除)",
"rev-deleted-user-contribs": "[用户名或IP地址被删除 - 编辑在贡献中隐藏]",
"rev-deleted-text-permission": "本页面版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
"rev-suppressed-text-permission": "此页面修订已经被<strong>监督隐藏</strong>。详细信息可在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中找到。",
@@ -813,7 +830,7 @@
"revdelete-legend": "设置可见性之限制",
"revdelete-hide-text": "版本文字",
"revdelete-hide-image": "隐藏文件内容",
- "revdelete-hide-name": "隐藏动作和目标",
+ "revdelete-hide-name": "隐藏目标和参数",
"revdelete-hide-comment": "编辑摘要",
"revdelete-hide-user": "编者用户名/IP地址",
"revdelete-hide-restricted": "同时阻止管理员与其他用户查看数据",
@@ -867,7 +884,6 @@
"mergehistory-same-destination": "来源页面与目的页面不可以相同",
"mergehistory-reason": "原因:",
"mergelog": "合并日志",
- "pagemerge-logentry": "合并[[$1]]至[[$2]](版本截至$3)",
"revertmerge": "解除合并",
"mergelogpagetext": "下面是最近的页面历史合并的列表。",
"history-title": "“$1”的版本历史",
@@ -890,6 +906,8 @@
"notextmatches": "没有页面内容匹配",
"prevn": "前$1个",
"nextn": "后$1个",
+ "prev-page": "上一页",
+ "next-page": "下一页",
"prevn-title": "前$1个结果",
"nextn-title": "后$1个结果",
"shown-title": "每页显示$1项结果",
@@ -908,6 +926,7 @@
"search-result-category-size": "$1个成员($2个子分类,$3个文件)",
"search-redirect": "(重定向自“$1”)",
"search-section": "(“$1”段落)",
+ "search-category": "(分类$1)",
"search-file-match": "(匹配文件内容)",
"search-suggest": "您是不是要找:$1",
"search-interwiki-caption": "姊妹项目",
@@ -925,7 +944,7 @@
"powersearch-togglelabel": "选择:",
"powersearch-toggleall": "全选",
"powersearch-togglenone": "全不选",
- "powersearch-remember": "记住选择用于以后搜索",
+ "powersearch-remember": "记住选择用于以后的搜索",
"search-external": "外部搜索",
"searchdisabled": "{{SITENAME}}的搜索已被禁用。您可以暂时使用搜索引擎进行搜索,须注意他们索引的{{SITENAME}}内容可能不是最新的。",
"search-error": "搜索时发生错误:$1",
@@ -941,6 +960,11 @@
"prefs-personal": "用户资料",
"prefs-rc": "最近更改",
"prefs-watchlist": "监视列表",
+ "prefs-editwatchlist": "编辑监视列表",
+ "prefs-editwatchlist-label": "编辑您的监视列表中的记录:",
+ "prefs-editwatchlist-edit": "查看和移除您的监视列表中的标题",
+ "prefs-editwatchlist-raw": "编辑原始监视列表",
+ "prefs-editwatchlist-clear": "清空您的监视列表",
"prefs-watchlist-days": "监视列表中显示的天数:",
"prefs-watchlist-days-max": "最多$1天",
"prefs-watchlist-edits": "在扩展监视列表中显示的更改的最大数目:",
@@ -1010,7 +1034,7 @@
"gender-female": "她",
"prefs-help-gender": "该设置为可选项。软件根据该值在称呼您及对他人提及您时使用适当的语法性别。该信息会被公开。",
"email": "电子邮件",
- "prefs-help-realname": "真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。",
+ "prefs-help-realname": "真实姓名是选填项目。如果提供,它可能用于署名您的贡献。",
"prefs-help-email": "电子邮件地址是选填项,但是当你忘记你的密码要重置密码时,需要该信息。",
"prefs-help-email-others": "您也可以选择让其他用户通过您的用户或讨论页面上的链接用电子邮件联系您。其他用户联系您时您的电子邮件地址不会显示。",
"prefs-help-email-required": "电子邮件地址是必填项目。",
@@ -1117,6 +1141,7 @@
"right-protect": "更改保护级别和编辑受级联保护页面",
"right-editprotected": "编辑保护级别为“{{int:protect-level-sysop}}”的页面",
"right-editsemiprotected": "编辑保护级别为“{{int:protect-level-autoconfirmed}}”的页面",
+ "right-editcontentmodel": "编辑页面的内容模型",
"right-editinterface": "编辑用户界面",
"right-editusercssjs": "编辑其他用户的CSS和JavaScript文件",
"right-editusercss": "编辑其他用户的CSS文件",
@@ -1144,6 +1169,7 @@
"right-override-export-depth": "导出页面,包括最多5层链接",
"right-sendemail": "发送电子邮件给其他用户",
"right-passwordreset": "查看密码重置电子邮件",
+ "right-managechangetags": "从数据库创建和删除[[Special:Tags|标签]]",
"newuserlogpage": "用户创建日志",
"newuserlogpagetext": "这是用户创建的日志。",
"rightslog": "用户权限日志",
@@ -1184,11 +1210,13 @@
"action-userrights": "编辑所有用户的权限",
"action-userrights-interwiki": "编辑其他wiki用户的用户权限",
"action-siteadmin": "锁定或解锁数据库",
- "action-sendemail": "电邮联系其他用户",
+ "action-sendemail": "发送电子邮件",
"action-editmywatchlist": "编辑你的监视列表",
"action-viewmywatchlist": "查看你的监视列表",
"action-viewmyprivateinfo": "查看您的私人信息",
"action-editmyprivateinfo": "编辑你的私人信息",
+ "action-editcontentmodel": "编辑页面的内容模型",
+ "action-managechangetags": "创建和从数据库中删除标签",
"nchanges": "$1次更改",
"enhancedrc-since-last-visit": "{{PLURAL:$1|上次访问后}}$1个",
"enhancedrc-history": "历史",
@@ -1204,7 +1232,7 @@
"recentchanges-label-plusminus": "该页面字节数的前后变化",
"recentchanges-legend-heading": "'''说明:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}(见[[Special:NewPages|新页面列表]])",
- "recentchanges-legend-plusminus": "(''±123'')",
+ "recentchanges-legend-plusminus": "(<em>±123</em>)",
"rcnotefrom": "下面{{PLURAL:$5|是}}<strong>$3 $4</strong>之后的更改(最多显示<strong>$1</strong>个)。",
"rclistfrom": "显示$3 $2之后的新更改",
"rcshowhideminor": "$1小编辑",
@@ -1236,7 +1264,7 @@
"number_of_watching_users_pageview": "[$1个关注用户]",
"rc_categories": "分类限制(用“|”分隔)",
"rc_categories_any": "任意",
- "rc-change-size-new": "更改后$1字节",
+ "rc-change-size-new": "更改后有$1字节",
"newsectionsummary": "/* $1 */ 新段落",
"rc-enhanced-expand": "显示细节",
"rc-enhanced-hide": "隐藏细节",
@@ -1245,7 +1273,7 @@
"recentchangeslinked-feed": "相关更改",
"recentchangeslinked-toolbox": "相关更改",
"recentchangeslinked-title": "与“$1”有关的更改",
- "recentchangeslinked-summary": "这是链接自指定页面(或至指定分类的成员)的页面的最近更改的列表。[[Special:Watchlist|你的监视列表]]中的页面以'''粗体'''显示。",
+ "recentchangeslinked-summary": "这是链接自指定页面(或至指定分类的成员)的页面的最近更改的列表。[[Special:Watchlist|你的监视列表]]中的页面以<strong>粗体</strong>显示。",
"recentchangeslinked-page": "页面名称:",
"recentchangeslinked-to": "显示链到所给出的页面",
"upload": "上传文件",
@@ -1259,9 +1287,9 @@
"uploaderror": "上传出错",
"upload-recreate-warning": "'''警告:一个相同名字的文件曾经被删除或者移动至别处。'''\n\n这个页面的删除和移动日志在这里提供以便参考:",
"uploadtext": "请使用下面的表格上传文件。要查看或搜索以往上传的文件,请前往[[Special:FileList|上传的文件的列表]],(重新)上传也将记录在[[Special:Log/upload|上传日志]]中,删除将记录在[[Special:Log/delete|删除日志]]中。\n\n要在页面中包含文件,请使用一种以下形式的链接:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong>使用文件的完整版本\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|替代文字]]</nowiki></code></strong>使用位于页面左边的框内的200像素宽的图片,以“替代文字”作为说明\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong>直接链接到文件而不显示文件",
- "upload-permitted": "允许的文件类型:$1。",
- "upload-preferred": "建议的文件类型:$1。",
- "upload-prohibited": "禁止的文件类型:$1。",
+ "upload-permitted": "允许的文件{{PLURAL:$2|类型}}:$1。",
+ "upload-preferred": "建议的文件{{PLURAL:$2|类型}}:$1。",
+ "upload-prohibited": "禁止的文件{{PLURAL:$2|类型}}:$1。",
"uploadlogpage": "上传日志",
"uploadlogpagetext": "下面是最近的文件上传的列表。图像概览请见[[Special:NewFiles|新文件图库]]。",
"filename": "文件名",
@@ -1392,7 +1420,7 @@
"uploadstash-nofiles": "你没有被隐藏的文件。",
"uploadstash-badtoken": "该操作执行失败,可能是因为你的编辑凭证已过期。请重试。",
"uploadstash-errclear": "清除文件不成功。",
- "uploadstash-refresh": "更新文件清单",
+ "uploadstash-refresh": "更新文件列表",
"invalid-chunk-offset": "无效区块偏移量",
"img-auth-accessdenied": "拒绝访问",
"img-auth-nopathinfo": "PATH_INFO缺失。\n您的服务器尚未设置传送该信息。\n它可能基于CGI,因而不支持img_auth。\n请参见 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 图片授权]。",
@@ -1521,7 +1549,6 @@
"statistics": "统计",
"statistics-header-pages": "页面统计",
"statistics-header-edits": "编辑统计",
- "statistics-header-views": "查看统计",
"statistics-header-users": "用户统计",
"statistics-header-hooks": "其它统计",
"statistics-articles": "内容页面",
@@ -1530,13 +1557,9 @@
"statistics-files": "上传的文件",
"statistics-edits": "自{{SITENAME}}建立以来的页面编辑数",
"statistics-edits-average": "每页平均编辑数",
- "statistics-views-total": "查看总数",
- "statistics-views-total-desc": "不存在页面和特殊页面的查看数未计入",
- "statistics-views-peredit": "每编辑查看数",
"statistics-users": "注册[[Special:ListUsers|用户]]",
"statistics-users-active": "活跃用户",
"statistics-users-active-desc": "在过去{{PLURAL:$1|$1天}}执行过操作的用户",
- "statistics-mostpopular": "最多查看页面",
"pageswithprop": "有页面属性的页面",
"pageswithprop-legend": "有页面属性的页面",
"pageswithprop-text": "本页面列出使用特定页面属性的页面。",
@@ -1577,9 +1600,9 @@
"uncategorizedtemplates": "未归类模板",
"unusedcategories": "未使用分类",
"unusedimages": "未使用文件",
- "popularpages": "热门页面",
"wantedcategories": "需要的分类",
"wantedpages": "需要的页面",
+ "wantedpages-summary": "被链接最多次的不存在页面的列表,除了只链接到这些页面的重定向页面。关于链接到不存在页面的重定向页面列表,参见[[{{#special:BrokenRedirects}}]]。",
"wantedpages-badtitle": "在结果组上的无效标题:$1",
"wantedfiles": "需要的文件",
"wantedfiletext-cat": "以下文件被使用,但并不存在。来自外部库的文件即使存在也可能被列出。任何这类误报会用<del>删除线</del>标记。另外,插入不存在的文件的页面列于[[:$1]]。",
@@ -1622,7 +1645,7 @@
"listusers-editsonly": "只显示有编辑的用户",
"listusers-creationsort": "按创建日期排序",
"listusers-desc": "降序排序",
- "usereditcount": "$1个{{PLURAL:$1|编辑}}",
+ "usereditcount": "$1次编辑",
"usercreated": "{{GENDER:$3|创建}}于$1 $2",
"newpages": "新页面",
"newpages-username": "用户名:",
@@ -1639,10 +1662,12 @@
"pager-older-n": "后$1个",
"suppress": "监督",
"querypage-disabled": "本特殊页面因性能问题而停用。",
+ "apihelp": "API 帮助",
+ "apihelp-no-such-module": "找不到模块“$1”。",
"booksources": "网络书源",
"booksources-search-legend": "搜索图书来源",
"booksources-isbn": "ISBN:",
- "booksources-go": "提交",
+ "booksources-search": "搜索",
"booksources-text": "下面是销售新书和二手书的其他网站的链接的列表,也可能有关于你正在寻找的图书的更多信息:",
"booksources-invalid-isbn": "提供的ISBN号码并不正确,请检查原始复制来源号码是否有误。",
"specialloguserlabel": "执行者:",
@@ -1689,7 +1714,7 @@
"listusers-blocked": "(已封禁)",
"activeusers": "活跃用户列表",
"activeusers-intro": "这是在过去$1{{PLURAL:$1|天}}有过某种活动的用户的列表。",
- "activeusers-count": "最近$3天内有$1次编辑",
+ "activeusers-count": "过去$3天有$1次操作",
"activeusers-from": "显示用户开始于:",
"activeusers-hidebots": "隐藏机器人",
"activeusers-hidesysops": "隐藏管理员",
@@ -1713,17 +1738,17 @@
"listgrouprights-namespaceprotection-namespace": "名字空间",
"listgrouprights-namespaceprotection-restrictedto": "允许用户编辑的权限",
"trackingcategories": "追踪分类",
- "trackingcategories-summary": "本页面列举由MediaWiki软件自动添加的跟踪分类。它们的名字可通过修改{{ns:8}}名字空间对应的系统信息而变更。",
+ "trackingcategories-summary": "本页面列举由MediaWiki软件自动添加的追踪分类。它们的名字可通过修改{{ns:8}}名字空间对应的系统信息而变更。",
"trackingcategories-msg": "追踪分类",
"trackingcategories-name": "信息名",
"trackingcategories-desc": "分类收录标准",
- "noindex-category-desc": "页面中有<code><nowiki>__NOINDEX__</nowiki></code>魔术字(并且在标记允许的名字空间)且因此未被机器人索引的。",
- "index-category-desc": "页面中有<code><nowiki>__INDEX__</nowiki></code>魔术字(并且在标记允许的名字空间)且因此被机器人索引但本不应索引的。",
- "post-expand-template-inclusion-category-desc": "在展开了所有模板后,页面大小大于<code>$wgMaxArticleSize</code>,所以一些模板未展开。",
- "post-expand-template-argument-category-desc": "展开了模板参数(三对花括号内,例如<code>{{{Foo}}}</code>)之后,页面大于<code>$wgMaxArticleSize</code>。",
- "expensive-parserfunction-category-desc": "页面包含了太多的高级解析器函数(例如<code>#ifexist</code>)。参见[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]。",
- "broken-file-category-desc": "页面包含损坏的文件连接(连接至嵌入的一个不存在文件)。",
- "hidden-category-category-desc": "页面中包含<code><nowiki>__HIDDENCAT__</nowiki></code>的分类,它阻止分类默认在页面上的分类链接框中显示。",
+ "noindex-category-desc": "因为页面上有魔术字<code><nowiki>__NOINDEX__</nowiki></code>并位于允许该标记的名字空间,而不被机器人索引的页面。",
+ "index-category-desc": "页面上有魔术字<code><nowiki>__INDEX__</nowiki></code>(并位于允许该标记的名字空间),并因此被机器人索引,但通常不应被索引。",
+ "post-expand-template-inclusion-category-desc": "在展开所有模板后,页面大小大于<code>$wgMaxArticleSize</code>,所以某些模板未展开。",
+ "post-expand-template-argument-category-desc": "在展开模板参数(以三对花括号包含的东西,如<code>{{{Foo}}}</code>)后,页面大于<code>$wgMaxArticleSize</code>。",
+ "expensive-parserfunction-category-desc": "页面使用过多高开销解析器函数(如<code>#ifexist</code>)。请见[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit MediaWiki官网手册]。",
+ "broken-file-category-desc": "页面含有受损文件链接(文件不存在时的嵌入文件链接)。",
+ "hidden-category-category-desc": "分类的页面内容中含有<code><nowiki>__HIDDENCAT__</nowiki></code>,它会阻止分类默认在页面的分类链接框中显示。",
"trackingcategories-nodesc": "没有说明。",
"trackingcategories-disabled": "分类被禁用",
"mailnologin": "无电子邮件地址",
@@ -1754,7 +1779,7 @@
"emailsent": "电子邮件已发送",
"emailsenttext": "您的电子邮件已经发出。",
"emailuserfooter": "本电子邮件是通过{{SITENAME}}的“电邮联系”功能被$1发送至$2的。",
- "usermessage-summary": "留下系统信息。",
+ "usermessage-summary": "留下系统消息。",
"usermessage-editor": "系统信息编辑器",
"watchlist": "监视列表",
"mywatchlist": "监视列表",
@@ -1778,7 +1803,7 @@
"wlheader-enotif": "已启用电子邮件通知。",
"wlheader-showupdated": "您上次访问后发生更改的页面'''加粗'''显示",
"wlnote": "下面是{{PLURAL:$2|过去<strong>$2</strong>小时}}的{{PLURAL:$1|最后<strong>$1</strong>个更改}},截至$3 $4。",
- "wlshowlast": "显示过去$1小时$2天$3",
+ "wlshowlast": "显示过去$1小时$2天",
"watchlist-options": "监视列表选项",
"watching": "正在监视...",
"unwatching": "正在取消监视...",
@@ -1827,7 +1852,6 @@
"deleteprotected": "您不能删除此页面因为它被保护。",
"deleting-backlinks-warning": "'''警告:'''有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他页面]]链接至或包含您要删除的页面。",
"rollback": "回退编辑",
- "rollback_short": "回退",
"rollbacklink": "回退",
"rollbacklinkcount": "回退$1次编辑",
"rollbacklinkcount-morethan": "回退超过$1次的编辑",
@@ -1844,7 +1868,7 @@
"protectlogtext": "下面是页面保护更改的列表。请见[[Special:ProtectedPages|受保护页面列表]]查看目前正在进行的页面保护的列表。",
"protectedarticle": "保护“[[$1]]”",
"modifiedarticleprotection": "更改“[[$1]]”的保护等级",
- "unprotectedarticle": "移除保护自“[[$1]]”",
+ "unprotectedarticle": "移除页面“[[$1]]”的保护",
"movedarticleprotection": "移动保护设置自“[[$2]]”至“[[$1]]”",
"protect-title": "更改“$1”的保护等级",
"protect-title-notallowed": "查看“$1”的保护等级",
@@ -1898,7 +1922,7 @@
"restriction-level-all": "任何级别",
"undelete": "查看被删除页面",
"undeletepage": "查看和还原被删除的页面",
- "undeletepagetitle": "'''以下包含[[:$1|$1]]的已删除之版本'''。",
+ "undeletepagetitle": "<strong>以下包含[[:$1|$1]]的已删除之版本</strong>。",
"viewdeletedpage": "查看被删页面",
"undeletepagetext": "以下{{PLURAL:$1|页面|$1个页面}}已被删除,但依然在归档中并可以被恢复。归档可能会被定时清理。",
"undelete-fieldset-title": "还原版本",
@@ -1938,6 +1962,7 @@
"namespace": "名字空间:",
"invert": "反选",
"tooltip-invert": "请选择该框以隐藏指定名字空间(及相关名字空间,若被选择)的页面更改",
+ "tooltip-whatlinkshere-invert": "勾选此框以隐藏来自选定名字空间内页面的链接。",
"namespace_association": "关联的名字空间",
"tooltip-namespace_association": "选中此复选框可包括与选定名字空间相关的讨论页或子页面",
"blanknamespace": "(主)",
@@ -1954,7 +1979,7 @@
"sp-contributions-newbies-sub": "新账户的贡献",
"sp-contributions-newbies-title": "新账户的用户贡献",
"sp-contributions-blocklog": "封禁日志",
- "sp-contributions-suppresslog": "被压制的用户贡献",
+ "sp-contributions-suppresslog": "被隐藏的用户贡献",
"sp-contributions-deleted": "被删除的用户贡献",
"sp-contributions-uploads": "上传",
"sp-contributions-logs": "日志",
@@ -1970,7 +1995,7 @@
"whatlinkshere": "链入页面",
"whatlinkshere-title": "链接至“$1”的页面",
"whatlinkshere-page": "页面:",
- "linkshere": "以下页面链接至'''[[:$1]]''':",
+ "linkshere": "以下页面链接至<strong>[[:$1]]</strong>:",
"nolinkshere": "没有页面链接至'''[[:$1]]'''。",
"nolinkshere-ns": "在所选的名字空间内没有页面链接到'''[[:$1]]'''。",
"isredirect": "重定向页面",
@@ -2196,27 +2221,28 @@
"thumbnail-more": "放大",
"filemissing": "无法找到文件",
"thumbnail_error": "生成缩略图出错:$1",
- "thumbnail_error_remote": "来自$1的错误消息从:\n$2",
+ "thumbnail_error_remote": "来自$1的错误消息:$2",
"djvu_page_error": "DjVu页面超出范围",
"djvu_no_xml": "无法在DjVu文件中获取XML",
"thumbnail-temp-create": "无法创建临时缩略图文件",
"thumbnail-dest-create": "无法将缩略图保存到目标地点",
"thumbnail_invalid_params": "不正确的缩略图参数",
+ "thumbnail_toobigimagearea": "尺寸超过$1的文件",
"thumbnail_dest_directory": "无法建立目标目录",
"thumbnail_image-type": "图像类型不支持",
"thumbnail_gd-library": "未完成的GD设置:功能遗失 $1",
"thumbnail_image-missing": "文件可能丢失:$1",
"thumbnail_image-failure-limit": "近期尝试生成此缩略图失败太多次($1次或更多)。请稍后再试。",
"import": "导入页面",
- "importinterwiki": "跨wiki导入",
- "import-interwiki-text": "选择要导入的wiki和页面标题,导入版本的日期和编辑者名称会被保存。所有的跨wiki导入操作都将记录到[[Special:Log/import|导入日志]]。",
+ "importinterwiki": "从其他wiki导入",
+ "import-interwiki-text": "选择要导入的wiki和页面标题,导入版本的日期和编辑者名称会被保存。所有从其他wiki的导入都记录在[[Special:Log/import|导入日志]]中。",
"import-interwiki-sourcewiki": "来源wiki:",
"import-interwiki-sourcepage": "来源页面:",
"import-interwiki-history": "复制此页的所有历史版本",
"import-interwiki-templates": "包含所有模板",
"import-interwiki-submit": "导入",
"import-interwiki-namespace": "目标名字空间:",
- "import-interwiki-rootpage": "目的根页(可选):",
+ "import-interwiki-rootpage": "目标根页面(可选):",
"import-upload-filename": "文件名:",
"import-comment": "注释:",
"importtext": "请使用[[Special:Export|导出功能]]从源 wiki 导出文件,\n保存到您的电脑并上传到这里。",
@@ -2229,7 +2255,7 @@
"importcantopen": "无法打开导入文件",
"importbadinterwiki": "无效的跨wiki链接",
"importsuccess": "导入完成!",
- "importnosources": "跨Wiki导入源没有定义,同时不允许直接的历史上传。",
+ "importnosources": "没有定义导入的来源wiki,且直接的历史上传被禁用。",
"importnofile": "没有上传导入文件。",
"importuploaderrorsize": "上传导入文件失败。文件大于可以允许的上传大小。",
"importuploaderrorpartial": "上传导入文件失败。文件只有部份已经上传。",
@@ -2253,18 +2279,15 @@
"import-rootpage-nosubpage": "名字空间为“$1”的根页面不允许子页面。",
"importlogpage": "导入日志",
"importlogpagetext": "管理性导入在其他wiki上有编辑历史的页面。",
- "import-logentry-upload": "通过文件上传导入[[$1]]",
- "import-logentry-upload-detail": "已导入$1个{{PLURAL:$1|版本}}",
- "import-logentry-interwiki": "跨wiki页面$1",
- "import-logentry-interwiki-detail": "已从$2导入$1个{{PLURAL:$1|版本}}",
+ "import-logentry-upload-detail": "导入$1个{{PLURAL:$1|版本}}",
+ "import-logentry-interwiki-detail": "来自$2的$1个{{PLURAL:$1|版本}}已导入",
"javascripttest": "JavaScript测试",
- "javascripttest-title": "运行$1测试",
"javascripttest-pagetext-noframework": "本页面被保留进行JavaScript测试。",
"javascripttest-pagetext-unknownframework": "未知的框架“$1”。",
+ "javascripttest-pagetext-unknownaction": "未知操作“$1”。",
"javascripttest-pagetext-frameworks": "请选择以下的框架之一:$1",
"javascripttest-pagetext-skins": "选择外观来运行测试:",
"javascripttest-qunit-intro": "请见mediawiki.org的[$1 测试说明文件]。",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit 测试套件",
"tooltip-pt-userpage": "你的用户页面",
"tooltip-pt-anonuserpage": "你用于编辑的IP地址的用户页面",
"tooltip-pt-mytalk": "你的讨论页面",
@@ -2272,8 +2295,9 @@
"tooltip-pt-preferences": "你的设置",
"tooltip-pt-watchlist": "你正在监视更改的页面的列表",
"tooltip-pt-mycontris": "你的贡献的列表",
- "tooltip-pt-login": "我们鼓励您登录,不过这不是强制的",
+ "tooltip-pt-login": "我们鼓励您登录;然而,这不是强制性的",
"tooltip-pt-logout": "退出登录",
+ "tooltip-pt-createaccount": "建议您创建一个账户并登录,但这不是强制的",
"tooltip-ca-talk": "关于内容页面的讨论",
"tooltip-ca-edit": "你可以编辑本页面。请在保存前使用预览按钮",
"tooltip-ca-addsection": "开始新段落",
@@ -2284,15 +2308,15 @@
"tooltip-ca-delete": "删除本页",
"tooltip-ca-undelete": "将这个页面恢复到被删除以前的状态",
"tooltip-ca-move": "移动本页",
- "tooltip-ca-watch": "添加本页面至您的监视列表",
+ "tooltip-ca-watch": "将本页面添加至您的监视列表",
"tooltip-ca-unwatch": "从你的监视列表删除本页面",
"tooltip-search": "搜索{{SITENAME}}",
- "tooltip-search-go": "如果相同的标题存在的话便直接前往该页面",
+ "tooltip-search-go": "若相同标题存在,则直接前往该页面",
"tooltip-search-fulltext": "搜索含这些文字的页面",
"tooltip-p-logo": "访问首页",
"tooltip-n-mainpage": "访问首页",
"tooltip-n-mainpage-description": "访问首页",
- "tooltip-n-portal": "关于本项目,你可以做什么,在哪里找到你需要的事物",
+ "tooltip-n-portal": "关于本项目,你可做的事,何处找到你所需",
"tooltip-n-currentevents": "查看当前事件的背景信息",
"tooltip-n-recentchanges": "本wiki最近更改的列表",
"tooltip-n-randompage": "载入一个随机页面",
@@ -2303,6 +2327,7 @@
"tooltip-feed-atom": "本页面的Atom源",
"tooltip-t-contributions": "该用户的贡献的列表",
"tooltip-t-emailuser": "给该用户发送电子邮件",
+ "tooltip-t-info": "关于此页面的更多信息",
"tooltip-t-upload": "上传文件",
"tooltip-t-specialpages": "所有特殊页面的列表",
"tooltip-t-print": "本页面的可打印版本",
@@ -2313,7 +2338,7 @@
"tooltip-ca-nstab-special": "这是特殊页面,你无法编辑该页",
"tooltip-ca-nstab-project": "查看项目页面",
"tooltip-ca-nstab-image": "查看文件页面",
- "tooltip-ca-nstab-mediawiki": "查看系统信息",
+ "tooltip-ca-nstab-mediawiki": "查看系统消息",
"tooltip-ca-nstab-template": "查看模板",
"tooltip-ca-nstab-help": "查看帮助页面",
"tooltip-ca-nstab-category": "查看分类页面",
@@ -2327,7 +2352,7 @@
"tooltip-watchlistedit-raw-submit": "更新监视列表",
"tooltip-recreate": "重建该页面,无论是否被删除。",
"tooltip-upload": "开始上传",
- "tooltip-rollback": "单击“回退”恢复最后贡献者对该页面的编辑",
+ "tooltip-rollback": "单击“回退”恢复最后一位贡献者对该页面的编辑",
"tooltip-undo": "“撤销”可以恢复该编辑并在预览模式下打开编辑表单。它允许在摘要中加入原因。",
"tooltip-preferences-save": "保存系统设置",
"tooltip-summary": "请输入简短的摘要",
@@ -2337,7 +2362,7 @@
"print.css": "/* 放置于这里的CSS将影响打印输出 */",
"noscript.css": "/* 放置于这里的CSS将影响停用JavaScript的用户 */",
"group-autoconfirmed.css": "/* 放置于这里的CSS将只影响自动确认用户 */",
- "group-user.css": "/* 放置于此的CSS将只会影响注册用户 */",
+ "group-user.css": "/* 放置于此的CSS将只影响注册用户 */",
"group-bot.css": "/* 放置于这里的CSS将只影响机器人 */",
"group-sysop.css": "/* 放置于这里的CSS将只影响管理员 */",
"group-bureaucrat.css": "/* 放置于这里的CSS将只影响行政员 */",
@@ -2364,7 +2389,7 @@
"spam_reverting": "恢复至不包含$1的链接的最后版本",
"spam_blanking": "消隐所有包含链接至$1的版本",
"spam_deleting": "正在删除所有包含至$1的版本",
- "simpleantispam-label": "反垃圾检查。\n'''不要'''加入这个!",
+ "simpleantispam-label": "反垃圾检查。\n<strong>不要</strong>加入这个!",
"pageinfo-title": "“$1”的信息",
"pageinfo-not-current": "对不起,我们无法提供旧版本的该信息。",
"pageinfo-header-basic": "基本信息",
@@ -2380,7 +2405,6 @@
"pageinfo-robot-policy": "爬虫索引",
"pageinfo-robot-index": "允许",
"pageinfo-robot-noindex": "不允许",
- "pageinfo-views": "查看数",
"pageinfo-watchers": "页面监视者数",
"pageinfo-few-watchers": "少于$1个监视者",
"pageinfo-redirects-name": "至该页面的重定向数",
@@ -2456,7 +2480,7 @@
"file-no-thumb-animation": "'''注意:由于技术限制,该文件的缩略图无法进行动画处理。'''",
"file-no-thumb-animation-gif": "'''注意:由于技术限制,高分辨率GIF图像的缩略图无法进行动画处理。'''",
"newimages": "新文件图库",
- "imagelisttext": "以下是按$2排列的'''$1'''个文件列表。",
+ "imagelisttext": "以下是按$2排列的<strong>$1</strong>个文件列表。",
"newimages-summary": "本特殊页面展示最后上传的文件。",
"newimages-legend": "过滤",
"newimages-label": "文件名(或它的一部份):",
@@ -2846,7 +2870,6 @@
"exif-urgency-low": "低($1)",
"exif-urgency-high": "高($1)",
"exif-urgency-other": "用户定义的优先级($1)",
- "watchlistall2": "所有",
"namespacesall": "所有",
"monthsall": "所有",
"confirmemail": "确认电子邮件地址",
@@ -2879,7 +2902,7 @@
"confirm-purge-top": "要清除此页面的缓存吗?",
"confirm-purge-bottom": "清除页面数据会清除缓存并强制显示最近的版本。",
"confirm-watch-button": "确定",
- "confirm-watch-top": "将此页添加到您的监视吗?",
+ "confirm-watch-top": "将此页添加到您的监视列表吗?",
"confirm-unwatch-button": "确定",
"confirm-unwatch-top": "从监视列表中删除此页吗?",
"semicolon-separator": ";",
@@ -2940,9 +2963,9 @@
"watchlisttools-edit": "查看并编辑监视列表",
"watchlisttools-raw": "编辑原始监视列表",
"signature": "[[{{ns:user}}:$1|$2]]([[{{ns:user_talk}}:$1|讨论]])",
- "unknown_extension_tag": "未知扩展标签“$1”",
"duplicate-defaultsort": "'''警告:'''默认排序关键词“$2”覆盖了之前的默认排序关键词“$1”。",
"duplicate-displaytitle": "<strong>警告:</strong>显示的标题“$2”重写了此前显示的标题“$1”。",
+ "invalid-indicator-name": "<strong>错误:</strong>页面状态指示器的<code>name</code>属性必须不为空。",
"version": "版本",
"version-extensions": "安装的扩展程序",
"version-skins": "已安装皮肤",
@@ -2957,7 +2980,7 @@
"version-parser-function-hooks": "解析器函数钩",
"version-hook-name": "钩名",
"version-hook-subscribedby": "署名",
- "version-version": "(版本 $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[无名称]",
"version-license": "MediaWiki协议",
"version-ext-license": "许可协议",
@@ -2968,9 +2991,9 @@
"version-ext-colheader-description": "说明",
"version-ext-colheader-credits": "作者",
"version-license-title": "$1的许可协议",
- "version-license-not-found": "没有找到与此拓展相关的授权信息。",
+ "version-license-not-found": "未找到此扩展相关的详细授权信息。",
"version-credits-title": "$1贡献者名单",
- "version-credits-not-found": "没有找到与此拓展相关的信用信息。",
+ "version-credits-not-found": "未找到此扩展相关的详细制作人信息。",
"version-poweredby-credits": "本Wiki由'''[https://www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。",
"version-poweredby-others": "其他",
"version-poweredby-translators": "translatewiki.net上的翻译者",
@@ -2984,6 +3007,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath 条目路径]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath 脚本路径]",
+ "version-libraries": "已安装的库",
+ "version-libraries-library": "库",
+ "version-libraries-version": "版本",
"redirect": "重定向(按文件、用户、页面或版本ID)",
"redirect-legend": "重定向至文件或页面",
"redirect-summary": "本特殊页面可以跳转至一个文件(提供文件名)、页面(提供版本ID或页面ID)或用户页面(提供数字用户ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]]或[[{{#Special:Redirect}}/user/101]]。",
@@ -3019,6 +3045,7 @@
"specialpages-group-wiki": "数据与工具",
"specialpages-group-redirects": "重定向特殊页面",
"specialpages-group-spam": "反垃圾链接工具",
+ "specialpages-group-developer": "开发者工具",
"blankpage": "空白页面",
"intentionallyblankpage": "这个页面被故意留为空白",
"external_image_whitelist": " #请原样保留本行文字<pre>\n#请在下面输入正则表达式片段(//之间的部份)\n#这些项目将会匹配外部图像的URL\n#匹配的项目将显示为图像,否则只会显示图像的链接\n#以#开头的行被视为评论\n#不区分大小写\n\n#请在本行上面输入所有正则表达式片段。请原样保留本行文字</pre>",
@@ -3031,12 +3058,54 @@
"tags-tag": "标签名称",
"tags-display-header": "更改列表中的表现形式",
"tags-description-header": "完整含义说明",
+ "tags-source-header": "来源",
"tags-active-header": "是否活跃?",
"tags-hitcount-header": "标记的更改数",
+ "tags-actions-header": "操作",
"tags-active-yes": "是",
"tags-active-no": "否",
+ "tags-source-extension": "由一个扩展定义",
+ "tags-source-manual": "可被用户和机器人手动应用",
+ "tags-source-none": "不再被使用",
"tags-edit": "编辑",
+ "tags-delete": "删除",
+ "tags-activate": "激活",
+ "tags-deactivate": "取消激活",
"tags-hitcount": "$1个更改",
+ "tags-manage-no-permission": "您没有权限管理更改标签。",
+ "tags-create-heading": "创建一个新标签",
+ "tags-create-explanation": "默认情况下,新创建的标签将可供用户和机器人使用。",
+ "tags-create-tag-name": "标签名称:",
+ "tags-create-reason": "原因:",
+ "tags-create-submit": "创建",
+ "tags-create-no-name": "您必须指定一个标签名称。",
+ "tags-create-invalid-chars": "标签名称必须不包含逗号(<code>,</code>)或正斜线(<code>/</code>)。",
+ "tags-create-invalid-title-chars": "标签名称不得含有无法在网页标题中使用的字符。",
+ "tags-create-already-exists": "“$1”标签已存在。",
+ "tags-create-warnings-above": "下列{{PLURAL:$2|警告}}是尝试创建“$1”标签时遇到的:",
+ "tags-create-warnings-below": "您希望继续创建此标签吗?",
+ "tags-delete-title": "删除标签",
+ "tags-delete-explanation-initial": "您即将从数据库中删除“$1”标签。",
+ "tags-delete-explanation-in-use": "它将从{{PLURAL:$2|所有$2个修订版本和/或日志记录}}移除至当前应用它的地方。",
+ "tags-delete-explanation-warning": "此操作是<strong>不可逆转</strong>且<strong>不可撤销</strong>的,即使是数据库管理员。请确定这是您希望删除的标签。",
+ "tags-delete-explanation-active": "<strong>“$1”标签仍处于激活状态,且在今后将被继续应用。</strong>要停止此情况继续发生,前往添加此标签的位置,并在那里将它停用。",
+ "tags-delete-reason": "原因:",
+ "tags-delete-submit": "不可逆转地删除此标签",
+ "tags-delete-not-allowed": "扩展定义的标签不能被删除,除非该扩展明确允许。",
+ "tags-delete-not-found": "标签“$1”不存在。",
+ "tags-delete-too-many-uses": "“$1”标签已应用到超过$2个修订版本,这意味着它不能被删除。",
+ "tags-delete-warnings-after-delete": "标签“$1”已成功删除,但遇到了以下{{PLURAL:$2|警告}}:",
+ "tags-activate-title": "激活标签",
+ "tags-activate-question": "您将要激活标签“$1”。",
+ "tags-activate-reason": "原因:",
+ "tags-activate-not-allowed": "不可能激活“$1”标签。",
+ "tags-activate-not-found": "标签“$1”不存在。",
+ "tags-activate-submit": "激活",
+ "tags-deactivate-title": "取消激活标签",
+ "tags-deactivate-question": "您将要取消激活标签“$1”。",
+ "tags-deactivate-reason": "原因:",
+ "tags-deactivate-not-allowed": "无法取消激活标签“$1”。",
+ "tags-deactivate-submit": "取消激活",
"comparepages": "对比页面",
"compare-page1": "页面1",
"compare-page2": "页面2",
@@ -3048,8 +3117,8 @@
"compare-revision-not-exists": "你指定的版本不存在。",
"dberr-problems": "抱歉!本网站出现了一些技术问题。",
"dberr-again": "请等待几分钟后重试。",
- "dberr-info": "(无法连接到数据库服务器:$1)",
- "dberr-info-hidden": "(无法连接到数据库服务器)",
+ "dberr-info": "(无法访问数据库:$1)",
+ "dberr-info-hidden": "(无法访问数据库)",
"dberr-usegoogle": "在此期间您可以尝试用 Google 来搜索。",
"dberr-outofdate": "须注意他们索引出来的内容可能不是最新的。",
"dberr-cachederror": "这是所请求页面的缓存副本,可能不是最新的。",
@@ -3071,7 +3140,7 @@
"htmlform-cloner-required": "至少一个值是必需的。",
"sqlite-has-fts": "带全文搜索的版本$1",
"sqlite-no-fts": "不带全文搜索的版本$1",
- "logentry-delete-delete": "$1删除页面$3",
+ "logentry-delete-delete": "$1{{GENDER:$2|删除}}页面$3",
"logentry-delete-restore": "$1{{GENDER:$2|还原}}页面$3",
"logentry-delete-event": "$1{{GENDER:$2|更改}}$3的{{PLURAL:$5|$5个日志事件}}的可见性:$4",
"logentry-delete-revision": "$1{{GENDER:$2|更改}}页面$3的{{PLURAL:$5|$5个版本}}的可见性:$4",
@@ -3090,6 +3159,14 @@
"revdelete-uname-unhid": "公开用户名",
"revdelete-restricted": "应用对管理员的限制",
"revdelete-unrestricted": "删除对管理员的限制",
+ "logentry-block-block": "$1{{GENDER:$2|封禁了}}{{GENDER:$4|$3}},持续时间$5 $6",
+ "logentry-block-unblock": "$1{{GENDER:$2|解封了}}{{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1将{{GENDER:$4|$3}}的封禁设置{{GENDER:$2|更改为}}持续时间$5 $6",
+ "logentry-suppress-block": "$1{{GENDER:$2|封禁了}}{{GENDER:$4|$3}},持续时间$5 $6",
+ "logentry-suppress-reblock": "$1将{{GENDER:$4|$3}}的封禁设置{{GENDER:$2|更改为}}持续时间$5 $6",
+ "logentry-import-upload": "$1通过上传{{GENDER:$2|导入}}了$3",
+ "logentry-import-interwiki": "$1从其他wiki{{GENDER:$2|导入}}了$3",
+ "logentry-merge-merge": "$1将$3{{GENDER:$2|合并}}至$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覆盖重定向",
@@ -3104,23 +3181,39 @@
"logentry-rights-rights": "$1{{GENDER:$2|更改}}$3的用户组自$4至$5",
"logentry-rights-rights-legacy": "$1更改$3的用户组",
"logentry-rights-autopromote": "$1被自动地{{GENDER:$2|提升}}自$4至$5",
- "logentry-upload-upload": "$1{{GENDER:$2|上传了}}$3",
- "logentry-upload-overwrite": "$1{{GENDER:$2|上传了}}$3的新版本",
- "logentry-upload-revert": "$1{{GENDER:$2|上传了}}$3",
+ "logentry-upload-upload": "$1{{GENDER:$2|上传}}$3",
+ "logentry-upload-overwrite": "$1{{GENDER:$2|上传}}$3的新版本",
+ "logentry-upload-revert": "$1{{GENDER:$2|上传}}$3",
+ "log-name-managetags": "标签管理日志",
+ "log-description-managetags": "此页面列出有关[[Special:Tags|标签]]的管理任务。该日志仅包含管理员手工进行的操作;wiki软件可能创建或删除标签而未在此日志中留下记录。",
+ "logentry-managetags-create": "$1{{GENDER:$2|创建了}}标签“$4”",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|删除了}}“$4”标签(已从$5个{{PLURAL:$5|修订版本和/或日志条目}}中移除)",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|激活了}}“$4”标签供用户和机器人使用",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|停用了}}“$4”标签供用户和机器人使用",
"rightsnone": "(无)",
+ "revdelete-summary": "编辑摘要",
+ "feedback-adding": "正在添加反馈至页面...",
+ "feedback-back": "返回",
+ "feedback-bugcheck": "请检查本bug是否为[$1 已知bug]。",
+ "feedback-bugnew": "我检查了。报告新bug",
"feedback-bugornote": "如果你准备好详细描述一个技术问题,请[$1 报告bug]。或者你可以使用下面的简单表格。你的评论将被添加至页面“[$3 $2]”,附有你的用户名。",
- "feedback-subject": "主题:",
- "feedback-message": "信息:",
"feedback-cancel": "取消",
- "feedback-submit": "提交反馈",
- "feedback-adding": "正在添加反馈至页面...",
+ "feedback-close": "完成",
+ "feedback-external-bug-report-button": "提交技术报告",
+ "feedback-dialog-title": "发送反馈",
+ "feedback-dialog-intro": "您可以使用下面的简便表格提交您的反馈。您的评论将连同您的用户名一起加入至页面“$1”。",
+ "feedback-error-title": "错误",
"feedback-error1": "错误:从API返回无法识别的结果",
"feedback-error2": "错误:编辑失败",
"feedback-error3": "错误:API没有响应",
+ "feedback-message": "信息:",
+ "feedback-subject": "主题:",
+ "feedback-submit": "提交",
+ "feedback-terms": "我理解我的用户代理信息包括有关我确切使用的浏览器和操作系统版本,并将在我的反馈旁公开分享。",
+ "feedback-termsofuse": "我同意依照使用条款提供反馈。",
"feedback-thanks": "谢谢!你的反馈已发布至页面“[$2 $1]”。",
- "feedback-close": "完成",
- "feedback-bugcheck": "请检查本bug是否为[$1 已知bug]。",
- "feedback-bugnew": "我检查了。报告新bug",
+ "feedback-thanks-title": "谢谢您!",
+ "feedback-useragent": "用户代理:",
"searchsuggest-search": "搜索",
"searchsuggest-containing": "含有...",
"api-error-badaccess-groups": "您没有将文件上传到此 wiki 的权限。",
@@ -3156,9 +3249,16 @@
"api-error-stashfailed": "内部错误:服务器保存临时文件失败。",
"api-error-publishfailed": "内部错误:服务器发布临时文件失败。",
"api-error-stasherror": "上传文件存档时出现错误。",
+ "api-error-stashedfilenotfound": "试图从藏匿处上传时找不到藏匿的文件。",
+ "api-error-stashpathinvalid": "找到的藏匿文件的路径是无效的。",
+ "api-error-stashfilestorage": "存储文件至藏匿处时出错。",
+ "api-error-stashzerolength": "服务器不能藏匿文件,因为它已经没有藏匿空间。",
+ "api-error-stashnotloggedin": "您必须登录以保存文件至上传藏匿处。",
+ "api-error-stashwrongowner": "您试图在藏匿处访问的文件不属于您。",
+ "api-error-stashnosuchfilekey": "您试图在藏匿处访问的文件密钥不存在。",
"api-error-timeout": "服务器没有在预期内响应。",
"api-error-unclassified": "出现未知错误。",
- "api-error-unknown-code": "未知错误:$1",
+ "api-error-unknown-code": "未知错误:“$1”。",
"api-error-unknown-error": "内部错误:尝试上传文件时出错。",
"api-error-unknown-warning": "未知的警告:“$1”。",
"api-error-unknownerror": "未知错误:$1。",
@@ -3200,6 +3300,8 @@
"expand_templates_generate_xml": "显示XML语法树",
"expand_templates_generate_rawhtml": "显示原始HTML",
"expand_templates_preview": "预览",
+ "expand_templates_preview_fail_html": "<em>因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。</em>\n\n<strong>如果这是合法的预览尝试,请再次重试。</strong>\n如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录。",
+ "expand_templates_preview_fail_html_anon": "<em>因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。</em>\n\n<strong>如果这是合法的预览尝试,请尝试[[Special:UserLogin|登录]]并重试。</strong>",
"pagelanguage": "页面语言选择器",
"pagelang-name": "页面",
"pagelang-language": "语言",
@@ -3210,8 +3312,58 @@
"log-name-pagelang": "更改语言日志",
"log-description-pagelang": "这是页面语言更改的日志。",
"logentry-pagelang-pagelang": "$1{{GENDER:$2|更改}}$3的页面语言:从$4改为$5。",
- "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。您的安装版本看起来需要包含以下皮肤。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。\n\n$2\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<code>LocalSettings.php</code>以启用安装的皮肤:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
- "default-skin-not-found-no-skins": "天哪!您在<code>$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
+ "default-skin-not-found": "天哪!您在<code dir=\"ltr\">$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。您的安装版本看起来需要包含以下皮肤。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。\n\n$2\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的。希望如此。尝试通过以下方法从[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。\n\n; 如果您升级了您的MediaWiki的话:\n: MediaWiki 1.24版本起不再自动启用已安装皮肤(参见[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 此手册])。您可复制粘贴以下文本至您wiki的<code>LocalSettings.php</code>以启用安装的皮肤:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 如果您已经修改了<code>LocalSettings.php</code>:\n: 请再次检查皮肤名以确保不存在错误拼写。",
+ "default-skin-not-found-no-skins": "天哪!您在<code>$wgDefaultSkin</code>定义的wiki默认皮肤<code>$1</code>不可用。而且您没有安装任何皮肤。\n\n; 如果您刚刚安装完了MediaWiki的话:\n: 您可能是从git库安装的,或者使用其他方法直接从源代码安装的,这是预期的。这是因为MediaWiki 1.24版本起主代码库不再包含任何皮肤。尝试通过以下方法从[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:All_skins mediawiki.org的皮肤存储库]安装一些皮肤:\n:* 下载[https://www.mediawiki.org/wiki/Download/zh-hans 打包安装器],这会预装一些皮肤和扩展。您可在此处复制粘贴<code>skins/</code>。\n:* 从[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]单独下载皮肤安装包。\n:* 通过git直接克隆<code>mediawiki/skins/*</code>存储库中的一个至您的MediaWiki副本的<code dir=\"ltr\">skins/</code>。\n: 做这些事应该不会打扰您的git存储库如果你是MediaWiki开发人员的话。参见MediaWiki官网手册[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration “皮肤配置”]获取如何启用他们并设置为默认。",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2(已启用)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2('''已禁用''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2('''已禁用''')",
+ "mediastatistics": "媒体统计",
+ "mediastatistics-summary": "有关上传文件类型的统计。这只包含文件的最新版本,旧版本或删除版本则不会包括。",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1字节}}($2;$3%)",
+ "mediastatistics-table-mimetype": "MIME类型",
+ "mediastatistics-table-extensions": "可用扩展名",
+ "mediastatistics-table-count": "文件数",
+ "mediastatistics-table-totalbytes": "组合尺寸",
+ "mediastatistics-header-unknown": "未知",
+ "mediastatistics-header-bitmap": "位图图像",
+ "mediastatistics-header-drawing": "图纸(矢量图像)",
+ "mediastatistics-header-audio": "音频",
+ "mediastatistics-header-video": "视频",
+ "mediastatistics-header-multimedia": "富媒体",
+ "mediastatistics-header-office": "办公文件",
+ "mediastatistics-header-text": "文本",
+ "mediastatistics-header-executable": "可执行文件",
+ "mediastatistics-header-archive": "压缩格式",
+ "json-warn-trailing-comma": "$1个结尾逗号从JSON移除",
+ "json-error-unknown": "JSON出现问题。错误:$1",
+ "json-error-depth": "超出最大堆栈深度",
+ "json-error-state-mismatch": "无效或格式不正确的JSON",
+ "json-error-ctrl-char": "控制字符错误,可能是错误编码",
+ "json-error-syntax": "语法错误",
+ "json-error-utf8": "不正确的UTF-8字符,可能是错误编码",
+ "json-error-recursion": "要编码的数值中一个或更多递归引用",
+ "json-error-inf-or-nan": "要编码的数值中一个或更多NAN或INF值",
+ "json-error-unsupported-type": "给出了不能编码的类型的值",
+ "headline-anchor-title": "该段落的链接",
+ "special-characters-group-latin": "拉丁字母",
+ "special-characters-group-latinextended": "扩展拉丁字母",
+ "special-characters-group-ipa": "国际音标",
+ "special-characters-group-symbols": "符号",
+ "special-characters-group-greek": "希腊字母",
+ "special-characters-group-cyrillic": "西里尔字母",
+ "special-characters-group-arabic": "阿拉伯字母",
+ "special-characters-group-arabicextended": "扩展阿拉伯字母",
+ "special-characters-group-persian": "波斯语字母",
+ "special-characters-group-hebrew": "希伯来字母",
+ "special-characters-group-bangla": "孟加拉字母",
+ "special-characters-group-tamil": "泰米尔数字和符号",
+ "special-characters-group-telugu": "泰卢固字母",
+ "special-characters-group-sinhala": "僧伽罗语",
+ "special-characters-group-gujarati": "古吉拉特语",
+ "special-characters-group-devanagari": "梵文",
+ "special-characters-group-thai": "泰语",
+ "special-characters-group-lao": "老挝语",
+ "special-characters-group-khmer": "高棉语字母",
+ "special-characters-title-endash": "短划线",
+ "special-characters-title-emdash": "长划线",
+ "special-characters-title-minus": "减号"
}
diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json
index 48fef993..4b756d34 100644
--- a/languages/i18n/zh-hant.json
+++ b/languages/i18n/zh-hant.json
@@ -57,23 +57,26 @@
"Impersonator 1",
"LNDDYL",
"Cathypilot0117",
- "NigelSoft"
+ "NigelSoft",
+ "EagerLin",
+ "Cbliu",
+ "Citizen01"
]
},
- "tog-underline": "連結顯示底線:",
- "tog-hideminor": "隱藏最近變更以來的小編輯",
- "tog-hidepatrolled": "隱藏最近變更中巡查過的編輯",
+ "tog-underline": "底線標示連結:",
+ "tog-hideminor": "隱藏近期變更中的小修訂",
+ "tog-hidepatrolled": "隱藏近期變更中巡查過的編輯",
"tog-newpageshidepatrolled": "隱藏新頁面清單中巡查過的頁面",
"tog-extendwatchlist": "展開監視清單顯示包含最近以外的所有變更",
- "tog-usenewrc": "依最近變更與監視清單頁面分類顯示變更",
+ "tog-usenewrc": "依近期變更與監視清單的頁面分類顯示變更",
"tog-numberheadings": "標題自動編號",
"tog-showtoolbar": "顯示編輯工具列",
"tog-editondblclick": "開啟滑鼠雙擊編輯頁面",
"tog-editsectiononrightclick": "開啟滑鼠右鍵點選章節標題編輯",
"tog-watchcreations": "將我建立的頁面和上傳的檔案加入監視清單",
- "tog-watchdefault": "將我編輯的頁面和檔案新增至監視清單",
+ "tog-watchdefault": "將我編輯的頁面和檔案加入監視清單",
"tog-watchmoves": "將我移動的頁面和檔案加入監視清單",
- "tog-watchdeletion": "將我刪除的頁面和檔案新增至監視清單",
+ "tog-watchdeletion": "將我刪除的頁面和檔案加入監視清單",
"tog-watchrollback": "將我曾經還原的頁面新增至監視清單",
"tog-minordefault": "預設標記所有的編輯為小修訂",
"tog-previewontop": "顯示預覽於編輯框上方",
@@ -81,11 +84,11 @@
"tog-enotifwatchlistpages": "當我的監視清單中的頁面或檔案有變更時,傳送電子郵件通知我",
"tog-enotifusertalkpages": "當我的對話頁面有變更時,傳送電子郵件通知我",
"tog-enotifminoredits": "當頁面與檔案有小修訂時,傳送電子郵件通知我",
- "tog-enotifrevealaddr": "在通知信件中顯示我的電子郵件位址",
+ "tog-enotifrevealaddr": "在通知郵件中顯示我的電子郵件地址",
"tog-shownumberswatching": "顯示正在監視的使用者數",
"tog-oldsig": "現有簽名:",
"tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
- "tog-uselivepreview": "使用即時預覽 (測試中)",
+ "tog-uselivepreview": "使用即時預覽",
"tog-forceeditsummary": "未填寫編輯摘要時提示我",
"tog-watchlisthideown": "隱藏監視清單中我自己的編輯",
"tog-watchlisthidebots": "隱藏監視清單中機器人的編輯",
@@ -101,7 +104,7 @@
"tog-prefershttps": "登入時始終使用安全連線",
"underline-always": "永遠使用",
"underline-never": "永不使用",
- "underline-default": "外觀或瀏覽器預設值",
+ "underline-default": "依外觀或瀏覽器預設值",
"editfont-style": "編輯區字型樣式:",
"editfont-default": "瀏覽器預設值",
"editfont-monospace": "等距字型",
@@ -196,20 +199,20 @@
"mytalk": "對話",
"anontalk": "此 IP 位址的對話頁面",
"navigation": "導覽",
- "and": "&#32;及&#32;",
+ "and": "&#32;和&#32;",
"qbfind": "尋找",
"qbbrowse": "瀏覽",
"qbedit": "編輯",
"qbpageoptions": "此頁面",
"qbmyoptions": "我的頁面",
- "faq": "常見問答",
+ "faq": "常見問題",
"faqpage": "Project:FAQ",
"actions": "動作",
"namespaces": "命名空間",
"variants": "變體",
"navigation-heading": "導覽選單",
"errorpagetitle": "錯誤",
- "returnto": "返回 $1。",
+ "returnto": "返回至 $1。",
"tagline": "出自 {{SITENAME}}",
"help": "說明",
"search": "搜尋",
@@ -218,7 +221,7 @@
"searcharticle": "執行",
"history": "頁面歷史",
"history_short": "歷史",
- "updatedmarker": "自我最後一次訪問以後的更新",
+ "updatedmarker": "自我上次參觀後的更新",
"printableversion": "可列印版",
"permalink": "靜態連結",
"print": "列印",
@@ -234,7 +237,7 @@
"deletethispage": "刪除此頁",
"undeletethispage": "取消刪除此頁",
"undelete_short": "取消刪除 $1 項修訂",
- "viewdeleted_short": "檢視 $1 項已刪除的修訂",
+ "viewdeleted_short": "檢視 {{PLURAL:$1|1 項已刪除的修訂|$1 項已刪除的修訂}}",
"protect": "保護",
"protect_change": "變更",
"protectthispage": "保護此頁面",
@@ -253,7 +256,7 @@
"projectpage": "檢視專案頁面",
"imagepage": "檢視檔案頁面",
"mediawikipage": "檢視訊息頁面",
- "templatepage": "檢視樣版頁面",
+ "templatepage": "檢視模板頁面",
"viewhelppage": "檢視說明頁面",
"categorypage": "檢視分類頁面",
"viewtalkpage": "檢視討論頁面",
@@ -271,24 +274,26 @@
"generic-pool-error": "抱歉,太多使用者正嘗試檢視此資源,伺服器超出負荷。\n請稍候片刻再嘗試。",
"pool-timeout": "正在等待取消鎖定",
"pool-queuefull": "程序序列已滿",
- "pool-errorunknown": "未知錯誤",
+ "pool-errorunknown": "不明錯誤",
"pool-servererror": "無法使用程序計數服務 ($1)。",
+ "poolcounter-usage-error": "用法錯誤:$1",
"aboutsite": "關於 {{SITENAME}}",
"aboutpage": "Project:About",
"copyright": "除非額外說明,否則本站內容均使用 $1 授權條款。",
- "copyrightpage": "{{ns:project}}:Copyrights",
- "currentevents": "最新事件",
+ "copyrightpage": "{{ns:project}}:版權",
+ "currentevents": "最新動態",
"currentevents-url": "Project:Current events",
"disclaimers": "免責聲明",
"disclaimerpage": "Project:General disclaimer",
"edithelp": "編輯説明",
- "mainpage": "主頁面",
- "mainpage-description": "主頁面",
+ "helppage-top-gethelp": "説明",
+ "mainpage": "首頁",
+ "mainpage-description": "首頁",
"policy-url": "Project:Policy",
"portal": "社群入口",
"portal-url": "Project:Community portal",
"privacy": "隱私政策",
- "privacypage": "Project:Privacy policy",
+ "privacypage": "Project:隱私政策",
"badaccess": "權限錯誤",
"badaccess-group0": "系統不允許您執行這項操作。",
"badaccess-groups": "您請求的操作只有{{PLURAL:$2|這個|這些}}群組的使用者能使用:$1",
@@ -299,7 +304,7 @@
"youhavenewmessages": "您有 $1 ($2)。",
"youhavenewmessagesfromusers": "你有來自{{PLURAL:$3|另一位使用者|$3 位使用者}}的 $1 ($2)。",
"youhavenewmessagesmanyusers": "你有來自多位使用者的 $1 ($2)。",
- "newmessageslinkplural": "{{PLURAL:$1|一個新訊息|999=新訊息}}",
+ "newmessageslinkplural": "{{PLURAL:$1|一則新訊息|999=新訊息}}",
"newmessagesdifflinkplural": "最近{{PLURAL:$1|變更}}",
"youhavenewmessagesmulti": "您在 $1 有新訊息",
"editsection": "編輯",
@@ -336,7 +341,7 @@
"nstab-project": "專案頁面",
"nstab-image": "檔案",
"nstab-mediawiki": "訊息",
- "nstab-template": "樣版",
+ "nstab-template": "模板",
"nstab-help": "說明頁面",
"nstab-category": "分類",
"nosuchaction": "無此動作",
@@ -360,10 +365,13 @@
"readonly_lag": "資料庫已自動鎖定,正在等候次要資料庫同步資料到主要資料庫",
"internalerror": "內部錯誤",
"internalerror_info": "內部錯誤:$1",
+ "internalerror-fatal-exception": "嚴重例外類型 \"$1\"",
"filecopyerror": "無法複製檔案 \"$1\" 至 \"$2\"。",
"filerenameerror": "無法重新命名檔案 \"$1\" 為 \"$2\"。",
"filedeleteerror": "無法刪除檔案 \"$1\"。",
"directorycreateerror": "無法建立目錄 \"$1\"。",
+ "directoryreadonlyerror": "目錄 \"$1\" 為唯讀。",
+ "directorynotreadableerror": "目錄 \"$1\" 無法讀取。",
"filenotfound": "找不到檔案 \"$1\"。",
"unexpected": "預期之外的資料:\"$1\"=\"$2\"。",
"formerror": "錯誤:無法送出表單。",
@@ -371,7 +379,7 @@
"cannotdelete": "無法刪除頁面或檔案 \"$1\"。\n它可能已經被其他人刪除。",
"cannotdelete-title": "無法刪除頁面 \"$1\"",
"delete-hook-aborted": "刪除已被 Hook 中止。\n且未回應無任何說明。",
- "no-null-revision": "無法對頁面 \"$1\" 建立新的空白修訂",
+ "no-null-revision": "無法建立頁面 \"$1\" 的新空白修訂",
"badtitle": "無效的標題",
"badtitletext": "指定的頁面標題是無效、空白,或未正確連結的跨語言或跨 Wiki 的標題。\n標題中可能包含無法使用在標題的字元。",
"perfcached": "以下為快取資料,可能不是最新的。 快取資料最多可儲存 {{PLURAL:$1|1 筆結果|$1 筆結果}}。",
@@ -385,7 +393,8 @@
"viewsourcetext": "您可以檢視並複製此頁面的原始碼。",
"viewyourtext": "您可以檢視並複製此頁面中<strong>您編輯</strong>的原始碼:",
"protectedinterface": "本頁用來提供此 Wiki 軟體介面上的文字,並且已被設為保護以防止惡意修改。\n如欲增加或修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
- "editinginterface": "<strong>警告:</strong>您正在編輯的頁面是用來提供軟體介面上的文字。\n更改此頁將影響其他在此 Wiki 上的使用者介面外觀。\n如欲修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net]上的 MediaWiki 在地化專案。",
+ "editinginterface": "<strong>警告:</strong>您正在編輯的頁面文字是用來作為軟體介面使用。\n更改此頁面將會影響其他使用者在此 Wiki 上看到的使用者介面。",
+ "translateinterface": "如欲修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
"cascadeprotected": "此頁面被保護無法編輯,因為此頁面被以下開啟 \"連鎖保護\" 選項的{{PLURAL:$1|一頁|數頁}}保護頁面引用:\n$2",
"namespaceprotected": "您沒有權限編輯 <strong>$1</strong> 命名空間的頁面。",
"customcssprotected": "您並沒有權限編輯此 CSS 頁面,因為此頁面包含了其他使用者的個人設定。",
@@ -397,10 +406,10 @@
"ns-specialprotected": "特殊頁面無法編輯。",
"titleprotected": "此標題已經被 [[User:$1|$1]] 保護以防止建立,原因是 \"<em>$2</em>\"。",
"filereadonlyerror": "無法修改檔案 \"$1\" 因為檔案庫 \"$2\" 目前處於唯讀模式。\n\n鎖定的管理員說明:\"$3\"。",
- "invalidtitle-knownnamespace": "無效的標題,命名空間 \"$2\" 與名稱 \"$3\"",
- "invalidtitle-unknownnamespace": "無效的標題,不明的命名空間編號 $1 與名稱 \"$2\"",
+ "invalidtitle-knownnamespace": "命名空間 \"$2\" 與名稱 \"$3\" 是無效的標題",
+ "invalidtitle-unknownnamespace": "不明的命名空間編號 $1 與名稱 \"$2\" 是無效的標題",
"exception-nologin": "未登入",
- "exception-nologin-text": "請先登入以檢視或修改",
+ "exception-nologin-text": "您需要先登入方可存取或者操作此頁面。",
"exception-nologin-text-manual": "請先 $1 以存取此頁面或操作。",
"virus-badscanner": "錯誤的設定:不明的病毒掃瞄程式:<em>$1</em>",
"virus-scanfailed": "掃瞄失敗 (代碼 $1)",
@@ -442,11 +451,13 @@
"userlogin-resetlink": "您忘記了登入的詳細資訊?",
"userlogin-resetpassword-link": "忘記密碼?",
"userlogin-helplink2": "登入協助",
- "createacct-emailrequired": "電子郵件位址",
- "createacct-emailoptional": "電子郵件位址 (選填)",
- "createacct-email-ph": "輸入您的電子郵件位址",
- "createacct-another-email-ph": "輸入電子郵件位址",
- "createaccountmail": "使用臨時的隨機密碼,並將它傳送到指定的電子郵件位址",
+ "userlogin-loggedin": "您目前已登入 {{GENDER:$1|$1}} 使用者,\n請使用下列表單改登入另一位使用者。",
+ "userlogin-createanother": "建立另一個帳號",
+ "createacct-emailrequired": "電子郵件地址",
+ "createacct-emailoptional": "電子郵件地址 (選填)",
+ "createacct-email-ph": "輸入您的電子郵件地址",
+ "createacct-another-email-ph": "輸入電子郵件地址",
+ "createaccountmail": "使用臨時的隨機密碼,並將它寄至指定的電子郵件地址",
"createacct-realname": "真實姓名 (選填)",
"createaccountreason": "原因:",
"createacct-reason": "原因",
@@ -456,8 +467,8 @@
"createacct-submit": "建立您的帳號",
"createacct-another-submit": "建立另一個帳號",
"createacct-benefit-heading": "{{SITENAME}} 是由像您一樣貢獻的人所建立的。",
- "createacct-benefit-body1": " {{PLURAL:$1|次編輯}}",
- "createacct-benefit-body2": " $1 頁",
+ "createacct-benefit-body1": "{{PLURAL:$1|次編輯}}",
+ "createacct-benefit-body2": "$1 頁",
"createacct-benefit-body3": " 位最近的{{PLURAL:$1|貢獻者}}",
"badretype": "兩次輸入的密碼並不相同。",
"userexists": "您所輸入的使用者名稱已存在,請另選一個名稱。",
@@ -477,32 +488,34 @@
"wrongpassword": "您輸入的密碼錯誤,請再試一次。",
"wrongpasswordempty": "輸入的密碼是空的。\n請再試一次。",
"passwordtooshort": "您的密碼至少需要 $1 個字元。",
+ "passwordtoolong": "密碼不能超過 {{PLURAL:$1|1 個字元|$1 個字元}}。",
"password-name-match": "您的密碼不可以跟使用者名稱相同。",
"password-login-forbidden": "此使用者名稱和密碼已被禁止使用。",
"mailmypassword": "重設密碼",
"passwordremindertitle": "{{SITENAME}} 的新臨時密碼",
"passwordremindertext": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼。\n給使用者 \"$2\" 的臨時密碼設為 \"$3\"。\n如果這個動作是您做的,您需要立即登入並設定一個新的密碼,\n您的臨時密碼將於{{PLURAL:$5|一|$5}}天內過期。\n\n如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
- "noemail": "使用者 \"$1\" 未登記電子郵件位址。",
- "noemailcreate": "您需要提供一個有效的電子郵件位址。",
- "passwordsent": "使用者 \"$1\" 的新密碼已寄至當出登記的電子郵件位址,\n請稍後收到信件後再登入。",
+ "noemail": "使用者 \"$1\" 沒有電子郵件地址記錄。",
+ "noemailcreate": "您需要提供一個有效的電子郵件地址。",
+ "passwordsent": "使用者 \"$1\" 的新密碼已寄至當出登記的電子郵件地址,\n請稍後收到郵件後再登入。",
"blocked-mailpassword": "您的 IP 位址已被封鎖不允許編輯,密碼復原的功能也同樣被禁止使用以防止被濫用。",
- "eauthentsent": "已寄出一封確認信到您所設定的電子郵件位址。\n在未收到其它電子郵件前,您必須先依照信件中的指示,確認這個帳號確實是您本人。",
+ "eauthentsent": "已寄出一封確認信到您所設定的電子郵件位址。\n在未收到其它電子郵件前,您必須先依照郵件中的指示,確認這個帳號確實是您本人。",
"throttled-mailpassword": "密碼重設的電子郵件已經在最近 $1 小時內寄出。\n為防止濫用,$1 小時內只能寄出一次密碼重設信件。",
"mailerror": "傳送電子郵件錯誤:$1",
"acct_creation_throttle_hit": "使用您目前的 IP 位址的訪客在最近一天建立了 {{PLURAL:$1|1 個帳號|$1 個帳號}},已超出系統允許的上限。\n因此,目前無法讓使用此 IP 位址的訪客建立帳號。",
- "emailauthenticated": "您的電子郵件位址已於 $2 $3 確認。",
- "emailnotauthenticated": "您的電子郵件位址尚未確認,\n尚不會寄出以下功能的電子郵件給您。",
- "noemailprefs": "在您的偏好設定中設定電子郵件位址,讓您可以使用這些功能。",
- "emailconfirmlink": "確認您的電子郵件位址",
- "invalidemailaddress": "無法接受格式不正確的電子郵件位址,\n請輸入正確的電子郵件位址格式或略過填寫該欄位。",
- "cannotchangeemail": "此 Wiki 不允許更改帳號的電子郵件位址。",
+ "emailauthenticated": "您的電子郵件地址已於 $2 $3 確認。",
+ "emailnotauthenticated": "您的電子郵件地址尚未確認,\n尚不會寄出以下功能的電子郵件給您。",
+ "noemailprefs": "在您的偏好設定中設定電子郵件地址,讓您可以使用這些功能。",
+ "emailconfirmlink": "確認您的電子郵件地址",
+ "invalidemailaddress": "無法接受格式不正確的電子郵件地址,請輸入正確的電子郵件地址格式或略過填寫該欄位。",
+ "cannotchangeemail": "此 Wiki 不允許更改帳號的電子郵件地址。",
"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": "您的帳號已轉移,且此 Wiki 中您的使用者名稱已不存在。",
"loginlanguagelabel": "語言:$1",
"suspicious-userlogout": "您登出的請求被拒絕,可能是因您使用了有問題的瀏覽器或者快取代理伺服器。",
"createacct-another-realname-tip": "真實姓名為選填欄位。\n若您提供真實姓名,它會用於使用者貢獻署名。",
@@ -511,7 +524,7 @@
"pt-createaccount": "建立帳號",
"pt-userlogout": "登出",
"php-mail-error-unknown": "PHP 的 mail() 函數發生不明錯誤。",
- "user-mail-no-addy": "試圖傳送沒有電子郵件位址的信件。",
+ "user-mail-no-addy": "試圖傳送沒有電子郵件地址的郵件。",
"user-mail-no-body": "試圖寄出內容為空的或異常簡短的電子郵件。",
"changepassword": "變更密碼",
"resetpass_announce": "要完成登入,您必須設定一個新密碼。",
@@ -545,32 +558,32 @@
"passwordreset-domain": "網域名稱:",
"passwordreset-capture": "檢視電子郵件內容?",
"passwordreset-capture-help": "若您勾選此核選方塊,電子郵件 (包含臨時密碼) 將直接顯示,並寄給使用者。",
- "passwordreset-email": "電子郵件位址:",
+ "passwordreset-email": "電子郵件地址:",
"passwordreset-emailtitle": "於 {{SITENAME}} 的帳號詳細資訊",
- "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件位址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
+ "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略本訊息並且繼續使用您原本的密碼。",
"passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件位址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
"passwordreset-emailelement": "使用者名稱:$1\n臨時密碼:$2",
"passwordreset-emailsent": "已寄出重設密碼的電子郵件。",
"passwordreset-emailsent-capture": "已寄出重設密碼的電子郵件,並於下方顯示。",
"passwordreset-emailerror-capture": "下列為重設密碼的電子郵件內容,傳送給{{GENDER:$2|使用者}}失敗:$1",
- "changeemail": "變更電子郵件位址",
- "changeemail-text": "完成此表單以修改您的電子郵件位址,您需要輸入您的密碼來確認此次變更。",
+ "changeemail": "變更電子郵件地址",
+ "changeemail-text": "完成此表單以修改您的電子郵件地址,您需要輸入您的密碼來確認此次變更。",
"changeemail-no-info": "您必須登入方可直接存取此頁面。",
- "changeemail-oldemail": "目前的電子郵件位址:",
- "changeemail-newemail": "新的電子郵件位址:",
+ "changeemail-oldemail": "目前的電子郵件地址:",
+ "changeemail-newemail": "新的電子郵件地址:",
"changeemail-none": "(無)",
"changeemail-password": "您於 {{SITENAME}} 的密碼:",
"changeemail-submit": "變更電子郵件",
"changeemail-throttled": "您最近嘗試了太多次登入。\n請等待 $1 後再試。",
- "resettokens": "重設密鑰",
+ "resettokens": "重設金鑰",
"resettokens-text": "您可以在此重設用來存取您帳號相關隱私資料的密鑰。\n\n若您不小心將您的密鑰分享給其他人或您的帳號已遭到入侵、破壞,應該要重設此密鑰。",
- "resettokens-no-tokens": "沒有可重設的密鑰。",
- "resettokens-legend": "重設密鑰",
- "resettokens-tokens": "密鑰:",
+ "resettokens-no-tokens": "沒有可重設的金鑰。",
+ "resettokens-legend": "重設金鑰",
+ "resettokens-tokens": "金鑰:",
"resettokens-token-label": "$1 (目前為 $2)",
"resettokens-watchlist-token": "用來訂閱 [[Special:Watchlist|監視清單]] Atom/RSS 的密鑰",
- "resettokens-done": "已重設密鑰。",
- "resettokens-resetbutton": "重設已選擇的密鑰",
+ "resettokens-done": "已重設金鑰。",
+ "resettokens-resetbutton": "重設已選擇的金鑰",
"bold_sample": "粗體文字",
"bold_tip": "粗體文字",
"italic_sample": "斜體文字",
@@ -585,6 +598,7 @@
"nowiki_tip": "忽略 Wiki 格式化語法",
"image_sample": "範例.jpg",
"image_tip": "附加檔案",
+ "media_sample": "範例.ogg",
"media_tip": "檔案連結",
"sig_tip": "您的簽名與日期時間",
"hr_tip": "水平線 (少用)",
@@ -600,16 +614,18 @@
"anoneditwarning": "<strong>警告:</strong>您尚未登入。 若您進行任何的編輯您的 IP 位置將會被公開。 若您 <strong>[$1 登入]</strong> 或 <strong>[$2 建立帳號]</strong>,您的編輯將會以您的使用者名稱標示,擁有其他優點。",
"anonpreviewwarning": "<em>您尚未登入。儲存頁面會將您的 IP 位址記錄在此頁面的編輯歷史中。</em>",
"missingsummary": "<strong>提醒:</strong>您未填寫編輯摘要。\n若您再點選 \"{{int:savearticle}}\" 一次,將略過摘要直接儲存您的編輯。",
+ "selfredirect": "<strong>警告:</strong> 您正建立連結至自己的重新導向。\n您可能指定錯要重新導向的目標頁面或者編輯錯頁面。\n若您再點選 \"{{int:savearticle}}\" 一次,將會繼續建立重新導向。",
"missingcommenttext": "請在下方輸入評論。",
"missingcommentheader": "<strong>提醒:</strong>您未填寫此評論的主旨/標題。\n若您再點選 \"{{int:savearticle}}\" 一次,將略過主旨/標題直接儲存您的評論。",
"summary-preview": "摘要預覽:",
"subject-preview": "主旨/標題預覽:",
+ "previewerrortext": "嘗試預覽您的變更時發生錯誤。",
"blockedtitle": "使用者已被封鎖",
- "blockedtext": "<strong>您的使用者名稱或 IP 位址以被封鎖。</strong>\n\n您被 $1 封鎖,\n原因爲 <em>$2</em>。\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯繫 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件位址,且尚未被封鎖郵件功能,則您可透過 \"傳送電子郵件給這位使用者\" 的功能來聯絡相關管理員。\n您目刖的 IP 位址是 $3,此次封鎖的 ID 爲 #$5。\n請您在詢問時附註以上詳細訊息。",
- "autoblockedtext": "因先前的另一位使用者被 $1 封鎖,您的 IP 位址已被自動封鎖。\n原因是:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯繫 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件位址,且尚未被封鎖郵件功能,則您可透過 \"傳送電子郵件給這位使用者\" 的功能來聯絡相關管理員。\n您目刖的 IP 位址是 $3,此次封鎖的 ID 爲 #$5。\n請您在詢問時附註以上詳細訊息。",
+ "blockedtext": "<strong>您的使用者名稱或 IP 位址以被封鎖。</strong>\n\n您被 $1 封鎖,\n原因爲 <em>$2</em>。\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯絡 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵箱地址,且尚未被封鎖郵件功能,則您可透過 \"Email 聯絡此使用者\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細訊息。",
+ "autoblockedtext": "因先前的另一位使用者被 $1 封鎖,您的 IP 位址已被自動封鎖。\n原因是:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯絡 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵箱地址,且尚未被封鎖郵件功能,則您可透過 \"Email 聯絡此使用者\" 的功能來聯絡相關管理員。\n您目前的 IP 位址是 $3,此次封鎖的 ID 為 #$5。\n請您在詢問時附註以上詳細資料。",
"blockednoreason": "未說明原因",
"whitelistedittext": "請先 $1 才可編輯頁面。",
- "confirmedittext": "在編輯此頁之前您必須確認您的電子郵件位址。\n請透過 [[Special:Preferences|偏好設定]] 設定並驗證您的電子郵件位址。",
+ "confirmedittext": "在編輯此頁之前您必須確認您的電子郵件地址。\n請透過 [[Special:Preferences|偏好設定]] 設定並驗證您的電子郵件地址。",
"nosuchsectiontitle": "找不到章節",
"nosuchsectiontext": "您嘗試編輯的章節並不存在。\n可能在您檢視頁面時已經移動或刪除。",
"loginreqtitle": "需要登入",
@@ -618,17 +634,17 @@
"accmailtitle": "密碼已寄出",
"accmailtext": "[[User talk:$1|$1]] 的隨機密碼已經寄送至 $2,可登入後至 <em>[[Special:ChangePassword|變更密碼]] 頁面更改</em>。",
"newarticle": "(新)",
- "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯框中輸入內容 (詳情請參考 [$1 説明頁面])。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
+ "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯方塊中輸入內容 (詳情請參考 [$1 説明頁面]) 。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
"anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位址可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:UserLogin/signup|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
- "noarticletext": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌],\n或 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。",
+ "noarticletext": "此頁面目前沒有內容,您可以在其它頁面中[[Special:Search/{{PAGENAME}}|搜尋此頁面標題]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。",
"noarticletext-nopermission": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],或 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]</span>,但您沒有權限建立此頁面。",
"missing-revision": "頁面名稱 \"{{FULLPAGENAME}}\" 的 #$1 修訂版本不存在。\n\n通常是因連結到過期的歷史頁面,該頁面已被刪除。\n詳情請參考 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
"userpage-userdoesnotexist": "使用者帳號 \"$1\" 尚未註冊。\n若您要建立/編輯此頁面,請先檢查是否正確。",
"userpage-userdoesnotexist-view": "使用者帳號 \"$1\" 尚未註冊。",
"blocked-notice-logextract": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
- "clearyourcache": "<strong>注意:</strong> 在您儲存之後您必須清除瀏覽器快取才可看到最新的變動。\n* <strong>Firefox / Safari:</strong> 按住 <em>Shift</em> 時點選 <em>重新整理</em>,或按 <em>Ctrl-F5</em> 或 <em>Ctrl-R</em> (Mac 為 <em>⌘-R</em>)\n* <strong>Google Chrome:</strong> 按 <em>Ctrl-Shift-R</em> (Mac 為 <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer:</strong> 按住 <em>Ctrl</em> 時點選 <em>重新整理</em>,或按 <em>Ctrl-F5</em>\n* <strong>Opera:</strong> 進入 <em>工具 → 偏好設定</em> 中清除快取。",
- "usercssyoucanpreview": "<strong>提示:</strong>在儲存之前使用 \"{{int:showpreview}}\" 按鈕來測試您的新 CSS。",
- "userjsyoucanpreview": "<strong>提示:</strong>在儲存之前使用 \"{{int:showpreview}}\" 按鈕來測試您的新 JavaScript。",
+ "clearyourcache": "<strong>注意:</strong>在您儲存之後您必須清除瀏覽器快取才可看到最新的變動。\n* <strong>Firefox / Safari:</strong>按住 <em>Shift</em> 時點選 <em>重新整理</em>,或按 <em>Ctrl-F5</em> 或 <em>Ctrl-R</em> (Mac 則為 <em>⌘-R</em>) \n* <strong>Google Chrome:</strong>按 <em>Ctrl-Shift-R</em> (Mac 則為 <em>⌘-Shift-R</em>) \n* <strong>Internet Explorer:</strong>按住 <em>Ctrl</em> 時點選 <em>重新整理</em>,或按 <em>Ctrl-F5</em>\n* <strong>Opera:</strong>進入 <em>工具 → 偏好設定</em> 中清除快取。",
+ "usercssyoucanpreview": "<strong>提示:</strong>在儲存之前使用 \"{{int:showpreview}}\" 按鈕來測試您的新 CSS 。",
+ "userjsyoucanpreview": "<strong>提示:</strong>在儲存之前使用 \"{{int:showpreview}}\" 按鈕來測試您的新 JavaScript 。",
"usercsspreview": "<strong>您目前正預覽您的使用者 CSS,CSS 還尚未儲存!</strong>",
"userjspreview": "<strong>您目前正預覽您的使用者 JavaScript,JavaScript 還尚未儲存!</strong>",
"sitecsspreview": "<strong>您目前正預覽此 CSS,CSS 還尚未儲存!</strong>",
@@ -641,7 +657,7 @@
"previewconflict": "此預覽顯示了您於上方文字編輯框中的內容儲存之後將會顯示的結果。",
"session_fail_preview": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n請再試一次。\n如果仍然失敗,請 [[Special:UserLogout|登出]] 後重新登入。",
"session_fail_preview_html": "<strong>很抱歉!由於連線階段的資料遺失,我們無法處理您的編輯動作。</strong>\n\n<em>由於 {{SITENAME}} 開啟了原始 HTML 模式,將不會顯示預覽畫面以避免 JavaScript 攻擊。</em>\n\n<strong>若這是符合規範的編輯動作,請再試一次。</strong>\n如果仍然有問題,請 [[Special:UserLogout|登出]] 後再重新登入一次。",
- "token_suffix_mismatch": "<strong>您使用的瀏覽器刪除了編輯資訊中的特殊符號,已拒絕此編輯動作。</strong>\n為了避免破壞頁面內容,已拒絕此編輯動作,\n這通常是因為您使用了有問題的匿名網頁代理伺服器。",
+ "token_suffix_mismatch": "<strong>因您使用的瀏覽器破壞了編輯密鑰中的特殊符號,您的編輯已被拒絕。</strong>\n為了避免破壞頁面內容,已拒絕此次編輯動作,\n會發生這個問題通常是因為您使用了有問題的匿名網頁代理伺服器。",
"edit_form_incomplete": "<strong>部份編輯的內容未送至伺服器,請檢查您的編輯內容是否完整並再試一次。</strong>",
"editing": "正在編輯 $1",
"creating": "正在建立 $1",
@@ -662,9 +678,9 @@
"semiprotectedpagewarning": "<strong>注意:</strong>本頁已經被保護,只有已註冊的使用者才可編輯。\n以下提供最近的日誌以便參考:",
"cascadeprotectedwarning": "<strong>警告:</strong>本頁已經被保護,只有擁有管理員權限的使用者才可編輯,此頁面被下列頁面引用因此連鎖保護:",
"titleprotectedwarning": "<strong>警告:本頁面已被保護,需要 [[Special:ListGroupRights|特殊權限]] 方可建立。</strong>\n以下提供最近的日誌以便參考:",
- "templatesused": "此頁面使用了以下{{PLURAL:$1|樣版}}:",
- "templatesusedpreview": "此預覽使用了以下{{PLURAL:$1|樣版}}:",
- "templatesusedsection": "此頁面使用了以下{{PLURAL:$1|樣版}}:",
+ "templatesused": "此頁面使用了以下{{PLURAL:$1|模板}}:",
+ "templatesusedpreview": "此預覽使用了以下{{PLURAL:$1|模板}}:",
+ "templatesusedsection": "此頁面使用了以下 {{PLURAL:$1|模板}} :",
"template-protected": "(受保護)",
"template-semiprotected": "(受半保護)",
"hiddencategories": "此頁面屬於 {{PLURAL:$1|1 個隱藏分類|$1 個隱藏分類}}的成員:",
@@ -698,14 +714,18 @@
"content-model-text": "純文字",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "content-json-empty-object": "空物件",
+ "content-json-empty-array": "空陣列",
+ "duplicate-args-category": "樣板呼叫時使用重複的參數的頁面",
+ "duplicate-args-category-desc": "該頁面包含重複使用參數的樣板呼叫,如 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> 或 <code><nowiki>{{foo|bar|1=baz}}</nowiki>。",
"expensive-parserfunction-warning": "<strong>警告:</strong>此頁面使用了太多消耗系統資源的解析函數。\n\n使用次數應小於 $2 次,但目前使用了 $1 次。",
"expensive-parserfunction-category": "使用了太多消耗系統資源的分析函數的頁面",
- "post-expand-template-inclusion-warning": "<strong>警告:</strong>引用樣板後大小超出限制。\n部份樣版內容將不會被使用。",
+ "post-expand-template-inclusion-warning": "<strong>警告:</strong>引用樣板後大小超出限制。\n部份樣板內容將不會被使用。",
"post-expand-template-inclusion-category": "引用樣板後大小超出限制的頁面",
- "post-expand-template-argument-warning": "<strong>警告:</strong>此頁面有一個以上的樣版參數過長。\n過長的參數會被直接忽略。",
- "post-expand-template-argument-category": "樣版參數有部份被忽略的頁面",
- "parser-template-loop-warning": "偵測到樣版遞迴:[[$1]]",
- "parser-template-recursion-depth-warning": "超出樣版遞迴深度限制 ($1)",
+ "post-expand-template-argument-warning": "<strong>警告:</strong>此頁面有一個以上的模板參數過長。\n過長的參數會被直接忽略。",
+ "post-expand-template-argument-category": "樣板參數有部份被忽略的頁面",
+ "parser-template-loop-warning": "偵測到樣板遞迴:[[$1]]",
+ "parser-template-recursion-depth-warning": "超出樣板遞迴深度限制 ($1)",
"language-converter-depth-warning": "已超出語言轉換器深度限制 ($1)",
"node-count-exceeded-category": "節點數量超出限制的頁面",
"node-count-exceeded-category-desc": "超出節點數量限制的頁面。",
@@ -739,7 +759,7 @@
"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": "最舊",
@@ -752,7 +772,7 @@
"history-feed-empty": "請求的頁面不存在,\n可能已被刪除或重新命名。\n請嘗試 [[Special:Search|搜尋本站]] 取得其他相關的新頁面。",
"rev-deleted-comment": "(已移除編輯摘要)",
"rev-deleted-user": " (已移除使用者名稱)",
- "rev-deleted-event": "(已移除日誌)",
+ "rev-deleted-event": "(已移除日誌明細)",
"rev-deleted-user-contribs": "[使用者名稱或 IP 位址已移除 - 已隱藏貢獻清單中的編輯]",
"rev-deleted-text-permission": "此頁面修訂已被 <strong>刪除</strong>。\n可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資訊。",
"rev-suppressed-text-permission": "此頁面修訂已被 <strong>禁止顯示</strong>。\n可至 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 禁止顯示日誌] 取得詳細資訊。",
@@ -762,7 +782,7 @@
"rev-suppressed-text-view": "此頁面修訂已被 <strong>禁止顯示</strong>。\n您可繼續檢視修訂,可至 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 禁止顯示日誌] 取得詳細資訊。",
"rev-deleted-no-diff": "因頁面的其中一次修訂已被 <strong>刪除</strong>,您無法檢視差異。\n可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資訊。",
"rev-suppressed-no-diff": "因頁面的其中一次修訂已被 <strong>刪除</strong>,您無法檢視差異。",
- "rev-deleted-unhide-diff": "檢視差異的其中一個修訂已被 <strong>刪除</strong>。\n可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資訊。\n若您要繼續,您仍可以 [$1 檢視此差異]。",
+ "rev-deleted-unhide-diff": "檢視差異的其中一個修訂已被 <strong>刪除</strong>。\n可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資料。\n若您要繼續,您仍可以 [$1 檢視此差異]。",
"rev-suppressed-unhide-diff": "檢視差異的其中一個修訂已被 <strong>禁止顯示</strong>。\n可至 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 禁止顯示日誌] 取得詳細資訊。\n若您要繼續,您仍可以 [$1 檢視此差異]。",
"rev-deleted-diff-view": "檢視差異的其中一個修訂已被 <strong>刪除</strong>。\n您可繼續檢視差異,可至 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌] 取得詳細資訊。",
"rev-suppressed-diff-view": "檢視差異的其中一個修訂已被 <strong>禁止顯示</strong>。\n您可繼續檢視差異,可至 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 禁止顯示日誌] 取得詳細資訊。",
@@ -779,21 +799,21 @@
"logdelete-selected": "已選擇{{PLURAL:$1|一筆|多筆}}日誌活動:",
"revdelete-text-text": "已刪除的修訂仍會出現於頁面歷史中,但內容將不開放存取。",
"revdelete-text-file": "已刪除的檔案版本仍會出現於檔案歷史中,但內容將不開放存取。",
- "logdelete-text": "已刪除的日誌活動仍會出現於日誌中,但內容將不開放存取。",
- "revdelete-text-others": "若未有額外的設定限制,其他管理員仍有權限檢視與取消刪除隱藏的內容。",
- "revdelete-confirm": "請確認您是否明白此動作會造成的後果,\n以及您所做的動作是否符合 [[{{MediaWiki:Policy-url}}|政策]] 規範。",
- "revdelete-suppress-text": "禁制顯示應<strong>只有</strong>在下述情形時使用:\n* 潛在誹謗的資訊\n* 不合適個人資料\n*: <em>住家地址、電話號碼、身分證字號等。</em>",
+ "logdelete-text": "已刪除的日誌活動仍會出現於日誌中,但其部分內容將不會向公眾開放存取。",
+ "revdelete-text-others": "若未設定額外條件,其他管理員仍有權限檢視與取消刪除隱藏的內容。",
+ "revdelete-confirm": "請確認您是否明白此動作會造成的後果,以及您所做的動作是否符合[[{{MediaWiki:Policy-url}}|政策]]規範。",
+ "revdelete-suppress-text": "禁止顯示應<strong>只有</strong>在下述情形時使用:\n* 潛在誹謗的資訊\n* 不恰當的個人資料\n*: <em>住家地址、電話號碼、身分證號碼等。</em>",
"revdelete-legend": "設定顯示限制",
"revdelete-hide-text": "修訂文字",
"revdelete-hide-image": "隱藏檔案內容",
- "revdelete-hide-name": "隱藏動作和目標",
+ "revdelete-hide-name": "隱藏目標與參數",
"revdelete-hide-comment": "編輯摘要",
"revdelete-hide-user": "編輯者的使用者名稱/IP 位址",
"revdelete-hide-restricted": "禁止顯示資料給管理者及其他使用者",
"revdelete-radio-same": "(請勿更改)",
"revdelete-radio-set": "隱藏",
"revdelete-radio-unset": "顯示",
- "revdelete-suppress": "禁止顯示資料給管理者及其他使用者",
+ "revdelete-suppress": "禁止向管理者及其他使用者顯示資料",
"revdelete-unsuppress": "移除已還原修訂上的顯示限制",
"revdelete-log": "原因:",
"revdelete-submit": "套用至已選取的{{PLURAL:$1|一筆|多筆}}修訂",
@@ -840,11 +860,10 @@
"mergehistory-same-destination": "來源頁面與目標頁面不可相同",
"mergehistory-reason": "原因:",
"mergelog": "合併日誌",
- "pagemerge-logentry": "已合併 [[$1]] 至 [[$2]] (修訂更新至 $3)",
"revertmerge": "取消合併",
"mergelogpagetext": "以下是最近合併頁面歷史的清單。",
"history-title": "\"$1\" 的修訂歷史",
- "difference-title": "$1:修訂間的差異",
+ "difference-title": "\"$1\" 修訂間的差異",
"difference-title-multipage": "頁面 \"$1\" 與 \"$2\" 間的差異",
"difference-multipage": "(頁面間的差異)",
"lineno": "行 $1:",
@@ -863,6 +882,8 @@
"notextmatches": "沒有符合的頁面內容",
"prevn": "前 $1 筆",
"nextn": "後 {{PLURAL:$1|$1}} 筆",
+ "prev-page": "上一頁",
+ "next-page": "下一頁",
"prevn-title": "前 $1 筆結果",
"nextn-title": "後 $1 筆結果",
"shown-title": "每頁顯示 $1 筆結果",
@@ -877,21 +898,22 @@
"searchprofile-images-tooltip": "搜尋檔案",
"searchprofile-everything-tooltip": "搜尋所有內容 (包含對話頁面)",
"searchprofile-advanced-tooltip": "搜尋自訂命名空間",
- "search-result-size": "$1 ($2 個字)",
+ "search-result-size": "$1 ({{PLURAL:$2|1 個字|$2 個字}})",
"search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
- "search-redirect": "(重新導向 $1)",
+ "search-redirect": "(重新導向自 $1)",
"search-section": "(章節 $1)",
+ "search-category": "(分類 $1)",
"search-file-match": "(符合檔案內容)",
"search-suggest": "您指的是不是:$1",
"search-interwiki-caption": "姐妹專案",
"search-interwiki-default": "來自 $1 的結果:",
- "search-interwiki-more": "(更多)",
+ "search-interwiki-more": "(更多)",
"search-relatedarticle": "相關",
"searchrelated": "相關",
"searchall": "全部",
"showingresults": "以下顯示從第 <strong>$2</strong> 筆開始,共 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
- "showingresultsinrange": "以下顯示從第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆中的 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
- "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> 的 <strong>$1</strong> 筆結果|<strong>$3</strong> 的 <strong>$1 - $2</strong> 筆結果}}",
+ "showingresultsinrange": "以下顯示從第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆中的 {{PLURAL:$1|<strong>$1</strong> 筆結果}}:",
+ "search-showingresults": "{{PLURAL:$4|第 <strong>$1</strong> 筆結果,共 <strong>$3</strong> 筆|第 <strong>$1 - $2</strong> 筆結果,共 <strong>$3</strong> 筆}}",
"search-nonefound": "無符合查詢條件的結果。",
"powersearch-legend": "進階搜尋",
"powersearch-ns": "搜尋以下命名空間:",
@@ -912,17 +934,22 @@
"prefs-labs": "實驗中的功能",
"prefs-user-pages": "使用者頁面",
"prefs-personal": "使用者基本資料",
- "prefs-rc": "最近變更",
+ "prefs-rc": "近期變更",
"prefs-watchlist": "監視清單",
- "prefs-watchlist-days": "監視清單中顯示的天數:",
+ "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-watchlist-edits": "展開監視清單中顯示的變更數量上限:",
"prefs-watchlist-edits-max": "數量上限:1000",
- "prefs-watchlist-token": "監視清單密鑰:",
+ "prefs-watchlist-token": "監視清單金鑰:",
"prefs-misc": "其他",
"prefs-resetpass": "變更密碼",
- "prefs-changeemail": "變更電子郵件",
- "prefs-setemail": "設定電子郵件位址",
+ "prefs-changeemail": "變更電子郵件地址",
+ "prefs-setemail": "設定電子郵件地址",
"prefs-email": "電子郵件選項",
"prefs-rendering": "外觀",
"saveprefs": "儲存",
@@ -933,10 +960,10 @@
"searchresultshead": "搜尋",
"stub-threshold": "<a href=\"#\" class=\"stub\">短頁面連結</a>格式門檻值 (位元組):",
"stub-threshold-disabled": "已停用",
- "recentchangesdays": "最近變更的顯示日數:",
+ "recentchangesdays": "近期變更顯示的天數:",
"recentchangesdays-max": "最多 $1 {{PLURAL:$1|天}}",
"recentchangescount": "預設顯示的編輯數:",
- "prefs-help-recentchangescount": "這包含最近變更、頁面歷史以及日誌。",
+ "prefs-help-recentchangescount": "這包含近期變更、頁面歷史以及日誌。",
"prefs-help-watchlist-token2": "訂閱您的監視清單所需的密鑰。\n任何人只要知道密鑰就能夠讀取您的監視清單,所以請勿任意與它人共享。\n若有需要 [[Special:ResetTokens|您可重設密鑰]]。",
"savedprefs": "已儲存您的偏好設定。",
"timezonelegend": "時區:",
@@ -965,7 +992,7 @@
"prefs-common-css-js": "所有外觀共用的 CSS/JavaScript:",
"prefs-reset-intro": "您可以使用此頁面重設您的偏好設定為網站預設值。\n這個動作將無法復原。",
"prefs-emailconfirm-label": "電子郵件確認:",
- "youremail": "電子郵件:",
+ "youremail": "Email:",
"username": "{{GENDER:$1|使用者名稱}}:",
"prefs-memberingroups": "{{GENDER:$2|所屬}}{{PLURAL:$1|群組}}:",
"prefs-registration": "註冊時間:",
@@ -982,10 +1009,10 @@
"gender-male": "他編輯了 Wiki 頁面",
"gender-female": "她編輯了 Wiki 頁面",
"prefs-help-gender": "此偏好設定為選填欄位。\n系統會使用您選擇的方式稱呼您,對他人提及您時也會使用適當語法稱呼。\n此項資訊會被公開。",
- "email": "電子郵件",
- "prefs-help-realname": "真實姓名為選填欄位。\n若您提供真實姓名,它會用於使用者貢獻署名。",
- "prefs-help-email": "電子郵件位址為選填欄位。\n但在重設密碼時會使用,而您很有可能會忘記密。",
- "prefs-help-email-others": "您亦可以選擇讓其他使用者用電子郵件與您聯繫,透過您的使用者或對話頁面上方的連結。\n您的電子郵件位址不會實際告知給其他要聯絡您的使用者。",
+ "email": "Email",
+ "prefs-help-realname": "真實姓名為選填欄位。\n若提供,真實姓名可能會用來作為您的作品的署名。",
+ "prefs-help-email": "電子郵件地址為選填欄位。\n但在重設密碼時會使用,而您很有可能會忘記密碼。",
+ "prefs-help-email-others": "您亦可以選擇讓其他使用者透過您的電子郵件、使用者頁面或對話頁面的連結與您聯絡。\n您的電子郵件地址不會洩漏給其他要聯絡您的使用者。",
"prefs-help-email-required": "電子郵件地址是必填項目。",
"prefs-info": "基本資訊",
"prefs-i18n": "國際化",
@@ -1001,12 +1028,13 @@
"prefs-advancedwatchlist": "進階選項",
"prefs-displayrc": "顯示選項",
"prefs-displaywatchlist": "顯示選項",
- "prefs-tokenwatchlist": "密鑰",
+ "prefs-tokenwatchlist": "金鑰",
"prefs-diffs": "差異",
"prefs-help-prefershttps": "此偏好設定將於您下次登入時生效。",
+ "prefswarning-warning": "您對您的偏好設定所做的變更尚未儲存。\n若您未點選 \"$1\" 離開此頁面,將不會更新您的偏好設定。",
"prefs-tabs-navigation-hint": "提示:您可使用左、右方向鍵切換頁籤。",
- "email-address-validity-valid": "電子郵件位址有效",
- "email-address-validity-invalid": "請輸入一個有效的電子郵件位址",
+ "email-address-validity-valid": "電子郵件地址有效",
+ "email-address-validity-invalid": "請輸入一個有效的電子郵件地址",
"userrights": "使用者權限管理",
"userrights-lookup-user": "管理使用者群組",
"userrights-user-editname": "請輸入使用者名稱:",
@@ -1018,7 +1046,7 @@
"userrights-groupsmember-auto": "所屬隱含群組:",
"userrights-groups-help": "您可以更改此使用者所屬的群組:\n* 已勾選的核選方塊代表該使用者屬於該群組。\n* 未勾選的核選方塊代表該使用者不屬於該群組。\n* 有 * 號標示代表一旦加入該群組後便不能移除,反之亦然。",
"userrights-reason": "原因:",
- "userrights-no-interwiki": "您沒有權限去編輯其它使用者在 Wiki 上的權限。",
+ "userrights-no-interwiki": "您沒有權限去編輯其他 Wiki 上的使用者權限。",
"userrights-nodatabase": "資料庫 $1 不存在或不在本地主機的。",
"userrights-nologin": "您必須 [[Special:UserLogin|登入]] 管理員帳號以指定使用者權限。",
"userrights-notallowed": "您沒有權限加入或刪除使用者權限。",
@@ -1039,13 +1067,13 @@
"group-bot-member": "機器人",
"group-sysop-member": "{{GENDER:$1|管理員}}",
"group-bureaucrat-member": "行政員",
- "group-suppress-member": "監督員",
+ "group-suppress-member": "{{GENDER:$1|監督員}}",
"grouppage-user": "{{ns:project}}:使用者",
"grouppage-autoconfirmed": "{{ns:project}}:自動確認使用者",
"grouppage-bot": "{{ns:project}}:機器人",
"grouppage-sysop": "{{ns:project}}:管理員",
"grouppage-bureaucrat": "{{ns:project}}:行政員",
- "grouppage-suppress": "{{ns:project}}:監督員",
+ "grouppage-suppress": "{{ns:project}}:監督",
"right-read": "閱讀頁面",
"right-edit": "編輯頁面",
"right-createpage": "建立頁面 (不含討論頁面)",
@@ -1089,16 +1117,17 @@
"right-protect": "更改保護層級及編輯被連鎖保護的頁面",
"right-editprotected": "編輯保護層級為 \"{{int:protect-level-sysop}}\" 的頁面",
"right-editsemiprotected": "編輯保護層級為 \"{{int:protect-level-autoconfirmed}}\" 的頁面",
+ "right-editcontentmodel": "編輯頁面的內容模型",
"right-editinterface": "編輯使用者介面",
- "right-editusercssjs": "編輯其他使用者的 CSS 和 JavaScript 檔案",
- "right-editusercss": "編輯其他使用者的 CSS 檔案",
- "right-edituserjs": "編輯其他使用者的 JavaScript 檔案",
+ "right-editusercssjs": "編輯其他使用者的 CSS 與 JavaScript 檔",
+ "right-editusercss": "編輯其他使用者的 CSS 檔",
+ "right-edituserjs": "編輯其他使用者的 JavaScript 檔",
"right-editmyusercss": "編輯自己的使用者 CSS 檔",
"right-editmyuserjs": "編輯自己的使用者 JavaScript 檔",
"right-viewmywatchlist": "檢視自己的監視清單",
"right-editmywatchlist": "編輯自己的監視清單。注意,即使無此權限,某些操作仍會新增頁面至監視清單。",
- "right-viewmyprivateinfo": "檢視自己的私隱資料 (如:電子郵件位址及真實姓名)",
- "right-editmyprivateinfo": "編輯自己的私隱資料 (如:電子郵件位址及真實姓名)",
+ "right-viewmyprivateinfo": "檢視自己的私隱資料 (如:電子郵件地址及真實姓名)",
+ "right-editmyprivateinfo": "編輯自己的隱私資料 (如:電子郵件地址及真實姓名)",
"right-editmyoptions": "編輯自己的偏好設定",
"right-rollback": "快速還原最後一位使用者對某一頁面的編輯",
"right-markbotedits": "標示還原編輯為機械人編輯",
@@ -1107,15 +1136,16 @@
"right-importupload": "由檔案上傳匯入頁面",
"right-patrol": "標示其他人的編輯爲已巡查",
"right-autopatrol": "將自己的編輯自動標示為已巡查",
- "right-patrolmarks": "檢視最近變更的巡查標記",
+ "right-patrolmarks": "檢視近期變更的巡查標記",
"right-unwatchedpages": "檢視未監視的頁面",
"right-mergehistory": "合併頁面歷史",
"right-userrights": "編輯所有使用者的權限",
"right-userrights-interwiki": "編輯使用者在其它 Wiki 上的權限",
"right-siteadmin": "鎖定和解除鎖定資料庫",
"right-override-export-depth": "匯出頁面包含連結內容,深度上限為 5 層",
- "right-sendemail": "傳送電子郵件給其他使用者",
+ "right-sendemail": "傳送電子郵件聯絡其他使用者",
"right-passwordreset": "檢視重設密碼電子郵件",
+ "right-managechangetags": "建立並自資料庫移除[[Special:Tags|標籤]]",
"newuserlogpage": "建立使用者日誌",
"newuserlogpagetext": "此為建立使用者的日誌。",
"rightslog": "使用者權限日誌",
@@ -1161,24 +1191,26 @@
"action-viewmywatchlist": "檢視您的監視清單",
"action-viewmyprivateinfo": "檢視您的個人資訊",
"action-editmyprivateinfo": "編輯您的個人資訊",
+ "action-editcontentmodel": "編輯頁面的內容模型",
+ "action-managechangetags": "建立並自資料庫移除標籤",
"nchanges": "$1 次變更",
- "enhancedrc-since-last-visit": "自上次訪問已有 $1",
+ "enhancedrc-since-last-visit": "{{PLURAL:$1|自上次拜訪}}已有 $1",
"enhancedrc-history": "歷史",
- "recentchanges": "最近變更",
- "recentchanges-legend": "最近變更選項",
- "recentchanges-summary": "追蹤 Wiki 中此頁面的最近變更。",
+ "recentchanges": "近期變更",
+ "recentchanges-legend": "近期變更選項",
+ "recentchanges-summary": "追蹤 Wiki 中此頁面的近期變更。",
"recentchanges-noresult": "於指定時間內沒有符合條件的變更。",
- "recentchanges-feed-description": "追蹤此訂閱中該 Wiki 的最近變更。",
- "recentchanges-label-newpage": "該編輯建立新頁面",
+ "recentchanges-feed-description": "追蹤 Wiki 中此訂閱來源的近期變更。",
+ "recentchanges-label-newpage": "該編輯建立了新頁面",
"recentchanges-label-minor": "該編輯是一個小修訂",
"recentchanges-label-bot": "該編輯由機器人執行",
"recentchanges-label-unpatrolled": "該編輯尚未巡查",
"recentchanges-label-plusminus": "該頁面變更的大小 (位元組)",
"recentchanges-legend-heading": "'''說明:'''",
- "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考 [[Special:NewPages|最新頁面]])",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考[[Special:NewPages|新頁面]])",
"recentchanges-legend-plusminus": "(<em>±123</em>)",
"rcnotefrom": "以下{{PLURAL:$5|為}}自 <strong>$3 $4</strong> 以來的變更 (最多顯示 <strong>$1</strong> 筆)。",
- "rclistfrom": "顯示自 $3 $2 以來的最近變更",
+ "rclistfrom": "顯示自 $3 $2 以來的近期變更",
"rcshowhideminor": "$1 小修訂",
"rcshowhideminor-show": "顯示",
"rcshowhideminor-hide": "隱藏",
@@ -1188,7 +1220,7 @@
"rcshowhideliu": "$1 已註冊的使用者",
"rcshowhideliu-show": "顯示",
"rcshowhideliu-hide": "隱藏",
- "rcshowhideanons": "$1 匿名的使用者",
+ "rcshowhideanons": "$1 位匿名使用者",
"rcshowhideanons-show": "顯示",
"rcshowhideanons-hide": "隱藏",
"rcshowhidepatr": "$1 巡查過的編輯",
@@ -1197,7 +1229,7 @@
"rcshowhidemine": "$1 我的編輯",
"rcshowhidemine-show": "顯示",
"rcshowhidemine-hide": "隱藏",
- "rclinks": "顯示最近 $2 天內的 $1 次更改。<br />$3",
+ "rclinks": "顯示近期 $2 天內的 $1 次變更。<br />$3",
"diff": "差異",
"hist": "歷史",
"hide": "隱藏",
@@ -1230,7 +1262,7 @@
"upload_directory_read_only": "網頁伺服器沒有上傳目錄 ($1) 的寫入權限。",
"uploaderror": "上傳錯誤",
"upload-recreate-warning": "<strong>警告:曾有檔案使用此名稱已被刪除或者移動至它處。</strong>\n\n在此提供刪除與移動日誌方便作為參考:",
- "uploadtext": "使用下面的表單來上傳檔案。\n要檢視或搜尋以前上傳的檔案,可至 [[Special:FileList|檔案上傳清單]],(重新)上傳會在 [[Special:Log/upload|上傳日誌]] 中記錄,而刪除則會在 [[Special:Log/delete|刪除日誌]] 中記錄。\n\n要在頁面中引用檔案,可使用以下其中一種方式連結:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> 顯示完整尺寸的圖片\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> 會在左方放置一張 200 像素寬的圖片於框中,並顯示 \"alt text\" 作為描述\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> 直接連結到圖片而不顯示預覽",
+ "uploadtext": "使用下面的表單來上傳檔案。\n要檢視或搜尋以前上傳的檔案,可至 [[Special:FileList|檔案上傳清單]],(重新) 上傳會在 [[Special:Log/upload|上傳日誌]] 中記錄,而刪除則會在 [[Special:Log/delete|刪除日誌]] 中記錄。\n\n要在頁面中引用檔案,可使用以下其中一種方式連結:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> 顯示完整尺寸的圖片\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> 會在左方放置一張 200 像素寬的圖片於框中,並顯示 \"alt text\" 作為描述\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> 直接連結到圖片而不顯示預覽",
"upload-permitted": "允許的檔案類型:$1。",
"upload-preferred": "建議的檔案類型:$1。",
"upload-prohibited": "禁止的檔案類型:$1。",
@@ -1252,14 +1284,14 @@
"filetype-badmime": "不允許上傳 MIME 類型為 \"$1\" 的檔案。",
"filetype-bad-ie-mime": "Internet Explorer 會將此檔案類型誤判為 \"$1\",可能造成潛在問題,不允許上傳此類型檔案。",
"filetype-unwanted-type": "不建議使用檔案類型 <strong>\".$1\"</strong>。\n建議的檔案類型有 $2。",
- "filetype-banned-type": "不允許使用檔案類型 <strong>\".$1\"</strong>。\n允許的{{PLURAL:$3|檔案類型|檔案類型}}為 $2。",
+ "filetype-banned-type": "不允許使用檔案類型 <strong>\".$1\"</strong>。允許的{{PLURAL:$3|檔案類型}}為 $2。",
"filetype-missing": "該檔案沒有副檔名 (如 \".jpg\")。",
"empty-file": "您所送出的檔案為空的。",
"file-too-large": "您所送出的檔案過大。",
"filename-tooshort": "檔案名稱過短。",
"filetype-banned": "此類型檔案已禁止使用。",
"verification-error": "此檔案未通過驗證。",
- "hookaborted": "您所嘗試的修改被擴展套件中止。",
+ "hookaborted": "您所嘗試的修改被擴充套件中止。",
"illegal-filename": "不允許使用的檔案名稱。",
"overwrite": "不允許覆蓋現有檔案。",
"unknown-error": "發生不明錯誤。",
@@ -1312,14 +1344,14 @@
"upload-file-error": "內部錯誤",
"upload-file-error-text": "嘗試在伺服器上建立暫存檔案時發生內部錯誤。\n請連絡 [[Special:ListUsers/sysop|管理員]]。",
"upload-misc-error": "不明的上傳錯誤",
- "upload-misc-error-text": "上傳時發生不明錯誤。\n請檢查您的 URL 是否有效且可存取,然後再重試一次。\n如果仍有問題,請聯絡 [[Special:ListUsers/sysop|管理員]]。",
+ "upload-misc-error-text": "上傳時發生不明錯誤。\n請檢查您的 URL 是否有效且可存取,然後再重試一次。\n如果仍有問題,請聯絡[[Special:ListUsers/sysop|管理員]]。",
"upload-too-many-redirects": "該 URL 重新導向至太多其他位址",
"upload-http-error": "發生 HTTP 錯誤:$1",
"upload-copy-upload-invalid-domain": "此網域不允許複製上傳的檔案。",
"backend-fail-stream": "無法傳輸檔案 \"$1\"。",
"backend-fail-backup": "無法備份檔案 \"$1\"。",
"backend-fail-notexists": "檔案 $1 不存在。",
- "backend-fail-hashes": "無法取得檔案雜湊值(Hash)進行比較。",
+ "backend-fail-hashes": "無法取得檔案雜湊值 (Hash) 進行比較。",
"backend-fail-notsame": "於 \"$1\" 已存在另一個不相同的檔案。",
"backend-fail-invalidpath": "\"$1\" 不是有效的儲存路徑。",
"backend-fail-delete": "無法刪除檔案 \"$1\"。",
@@ -1366,7 +1398,7 @@
"uploadstash-refresh": "更新檔案清單",
"invalid-chunk-offset": "無效區塊位置",
"img-auth-accessdenied": "拒絕存取",
- "img-auth-nopathinfo": "缺少 PATH_INFO 參少。\n您的伺服器環境未傳遞此資訊,\n您可能使用 CGI-based 的伺服器,不支援 img_auth。\n請參考 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
+ "img-auth-nopathinfo": "缺少 PATH_INFO 參數。\n您安裝的伺服器未傳遞此資訊,\n您可能使用 CGI 為基礎的伺服器,且不支援 img_auth 功能。\n請參考 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
"img-auth-notindir": "已設定的上傳目錄清單中不存在您指定的路徑。",
"img-auth-badtitle": "無法使用 \"$1\" 建立有效的標題。",
"img-auth-nologinnWL": "您尚未登入,且 \"$1\" 並未在允許清單上。",
@@ -1382,8 +1414,8 @@
"http-timed-out": "HTTP 請求已逾時。",
"http-curl-error": "擷取 URL 時錯誤:$1",
"http-bad-status": "進行 HTTP 請求發生問題:$1 $2",
- "upload-curl-error6": "無法連線 URL",
- "upload-curl-error6-text": "無法連線指定的 URL。\n請重新檢查 URL 是否正確,且確認網站是否正常運作。",
+ "upload-curl-error6": "無法連線至 URL",
+ "upload-curl-error6-text": "無法連線至指定的 URL 。\n請重新檢查 URL 是否正確,且確認網站是否正常運作。",
"upload-curl-error28": "上傳逾時",
"upload-curl-error28-text": "網站超出回應時間限制。\n請檢查該網站是否正常運作,並稍候一會再試一次。\n建議您可在非網路尖峰時段再嘗試連線。",
"license": "授權條款:",
@@ -1391,7 +1423,7 @@
"nolicense": "尚未選擇",
"licenses-edit": "編輯授權條款選項",
"license-nopreview": "(不可預覽)",
- "upload_source_url": "(您選擇的檔案來自有效,可公開存取的 URL)",
+ "upload_source_url": "(您選擇的檔案來自有效、可公開存取的 URL)",
"upload_source_file": "(您在您的電腦上選擇的檔案)",
"listfiles-delete": "刪除",
"listfiles-summary": "此特殊頁面顯示所有已上傳的檔案。",
@@ -1430,10 +1462,10 @@
"nolinkstoimage": "沒有頁面連結到此檔案。",
"morelinkstoimage": "檢視連結到這個檔案的[[Special:WhatLinksHere/$1|更多連結]]。",
"linkstoimage-redirect": "$1 (檔案重新導向) $2",
- "duplicatesoffile": "以下 $1 個檔案與此檔案重覆 ([[Special:FileDuplicateSearch/$2|了解詳細資訊]]):",
+ "duplicatesoffile": "以下 $1 個檔案與此檔案重複 ([[Special:FileDuplicateSearch/$2|瞭解詳細資訊]]):",
"sharedupload": "此檔案來自 $1 且可能被其他專案所使用。",
- "sharedupload-desc-there": "此檔案來自 $1 且可能被其他專案所使用。\n請參考 [$2 檔案描述頁面] 了解進一步資訊。",
- "sharedupload-desc-here": "此檔案來自 $1 且可能被其他專案所使用。\n以下為該檔案於 [$2 檔案描述頁面] 的內容描述。",
+ "sharedupload-desc-there": "此檔案來自 $1 且可能被其他專案所使用。\n請參考 [$2 檔案描述頁面] 瞭解進一步資訊。",
+ "sharedupload-desc-here": "此檔案來自 $1 且可能被其他專案所使用。\n下方顯示此檔案於 [$2 檔案描述頁面] 的描述內容。",
"sharedupload-desc-edit": "此檔案來自 $1 且可能被其他專案所使用。\n您可在該檔案的 [$2 檔案描述頁面] 上編輯內容描述。",
"sharedupload-desc-create": "此檔案來自 $1 且可能被其他專案所使用。\n若您想要編輯內容描述可至 [$2 檔案描述頁面]。",
"filepage-nofile": "不存在此名稱的檔案。",
@@ -1463,7 +1495,7 @@
"filedelete-nofile-old": "查無 <strong>$1</strong> 擁有指定的屬性的封存版本。",
"filedelete-otherreason": "其它/額外的原因:",
"filedelete-reason-otherlist": "其它原因",
- "filedelete-reason-dropdown": "*常見的刪除原因\n** 侵犯版權\n** 檔案重覆",
+ "filedelete-reason-dropdown": "*常見的刪除原因\n** 侵犯版權\n** 檔案重複",
"filedelete-edit-reasonlist": "編輯刪除原因",
"filedelete-maintenance": "維護期間檔案刪除和還原暫停使用。",
"filedelete-maintenance-title": "無法刪除檔案",
@@ -1472,12 +1504,12 @@
"mimetype": "MIME 類型:",
"download": "下載",
"unwatchedpages": "未監視的頁面",
- "listredirects": "重新導向頁面清單",
+ "listredirects": "重新導向清單",
"listduplicatedfiles": "重複檔案清單",
"listduplicatedfiles-summary": "此清單中包含最新版本的檔案與其他檔案重複的清單,本清單只顯示本地檔案。",
"listduplicatedfiles-entry": "[[:File:$1|$1]] 有[[$3|其他 $2 個重複檔案]]。",
- "unusedtemplates": "未使用的樣版",
- "unusedtemplatestext": "此頁面列出所有於 {{ns:template}} 命名空間下未被其他頁面引用的樣版。\n在刪除前,仍需檢查是否有連結這些樣版的其他頁面。",
+ "unusedtemplates": "未使用的模板",
+ "unusedtemplatestext": "此頁面列出所有於 {{ns:template}} 命名空間下未被其他頁面引用的模板。\n在刪除前,仍需檢查是否有連結這些模板的其他頁面。",
"unusedtemplateswlh": "其他連結",
"randompage": "隨機頁面",
"randompage-nopages": "在{{PLURAL:$2|命名空間}}中沒有任何頁面:$1。",
@@ -1491,7 +1523,6 @@
"statistics": "統計",
"statistics-header-pages": "頁面統計",
"statistics-header-edits": "編輯統計",
- "statistics-header-views": "檢視統計",
"statistics-header-users": "使用者統計資訊",
"statistics-header-hooks": "其它統計",
"statistics-articles": "內容頁面",
@@ -1500,13 +1531,9 @@
"statistics-files": "已上傳的檔案",
"statistics-edits": "自 {{SITENAME}} 成立以來的頁面編輯數",
"statistics-edits-average": "每頁平均編輯數",
- "statistics-views-total": "檢視總數",
- "statistics-views-total-desc": "不包含不存在頁面與特殊頁面的檢視數",
- "statistics-views-peredit": "每次編輯檢視數",
"statistics-users": "已註冊的 [[Special:ListUsers|使用者]]",
"statistics-users-active": "活動使用者",
"statistics-users-active-desc": "在最近 $1 天操作過的使用者",
- "statistics-mostpopular": "檢視最多次的頁面",
"pageswithprop": "擁有屬性的頁面",
"pageswithprop-legend": "擁有頁面屬性的頁面",
"pageswithprop-text": "此頁面用來查詢使用了指定屬性的頁面。",
@@ -1515,7 +1542,7 @@
"pageswithprop-prophidden-long": "已隱藏過長的屬性值 ($1)",
"pageswithprop-prophidden-binary": "已隱藏二進位屬性值 ($1)",
"doubleredirects": "雙重的重新導向",
- "doubleredirectstext": "此頁列出所有重新導向頁面連結到另一個重新導向頁面的頁面清單。每一列都包含第一次和第二次重新導向頁面的連結,以及第二次重新導向之後的目標,第二次重新導向之後的目標通常是 \"實際\" 的目標頁面,也是第一個重新導向頁面應該指向的頁面。\n<del>刪節線</del> 代表該項目的問題已經解決。",
+ "doubleredirectstext": "此頁列出重新導向至另一個重新導向頁面的頁面。每一列都包含第一次和第二次重新導向頁面的連結,以及第二次重新導向之後的目標,第二次重新導向之後的目標通常是「實際」的目標頁面,也是第一個重新導向頁面應該指向的頁面。\n<del>刪節線</del> 代表該項目的問題已經解決。",
"double-redirect-fixed-move": "[[$1]] 已完成移動。\n此頁面已自動更新並重新導向至 [[$2]]。",
"double-redirect-fixed-maintenance": "在維護作業時自動修正雙重的重新導向自 [[$1]] 至 [[$2]]。",
"double-redirect-fixer": "重新導向修正者",
@@ -1544,25 +1571,25 @@
"uncategorizedpages": "未分類的頁面",
"uncategorizedcategories": "未分類的分類",
"uncategorizedimages": "未分類的檔案",
- "uncategorizedtemplates": "待分類樣版",
+ "uncategorizedtemplates": "待分類模板",
"unusedcategories": "未使用的分類",
"unusedimages": "未使用的檔案",
- "popularpages": "熱門頁面",
"wantedcategories": "需要的分類",
"wantedpages": "需要的頁面",
+ "wantedpages-summary": "以下為最多連結的不存在頁面,除只有重新導向連結的頁面外。 若要取得不存在的重新導向頁面,請至 [[{{#special:BrokenRedirects}}]]。",
"wantedpages-badtitle": "結果集合中的標題無效:$1",
"wantedfiles": "需要的檔案",
"wantedfiletext-cat": "下列檔案被時用,但檔案不存在。 外部儲存庫的檔案儘管存在,但此清單仍會列出。 這類誤報的項目會以 <del>刪除線</del> 標示。 另外,頁面內嵌檔案不存在會於清單 [[:$1]] 中顯示。",
"wantedfiletext-cat-noforeign": "下列檔案已被使用但不存在。 除此之外,頁面已內嵌但不存在的檔案列於 [[:$1]]。",
"wantedfiletext-nocat": "下列檔案被時用,但檔案不存在。 外部儲存庫的檔案儘管存在,但此清單仍會列出。 這類誤報的項目會以 <del>刪除線</del> 標示。",
"wantedfiletext-nocat-noforeign": "下列檔案已被使用但不存在。",
- "wantedtemplates": "需要的樣版",
+ "wantedtemplates": "需要的模板",
"mostlinked": "被連結最多的頁面",
"mostlinkedcategories": "被連結最多的分類",
"mostlinkedtemplates": "被引用最多的頁面",
"mostcategories": "最多分類的頁面",
"mostimages": "被連結最多的檔案",
- "mostinterwikis": "最多 Interwiki 連結的頁面",
+ "mostinterwikis": "最多跨 Wiki 連結的頁面",
"mostrevisions": "最多修訂的頁面",
"prefixindex": "所有頁面與字首",
"prefixindex-namespace": "所有含字首的頁面 ($1 命名空間)",
@@ -1583,7 +1610,7 @@
"protectedpages-performer": "保護使用者",
"protectedpages-params": "保護參數",
"protectedpages-reason": "原因",
- "protectedpages-unknown-timestamp": "未知",
+ "protectedpages-unknown-timestamp": "不明",
"protectedpages-unknown-performer": "不明的使用者",
"protectedtitles": "受保護標題",
"protectedtitles-summary": "此頁面列出目前受保護的標題。 欲查詢受保護頁面清單,請參考 [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]。",
@@ -1594,7 +1621,7 @@
"listusers-desc": "使用降冪排序",
"usereditcount": "$1 次{{PLURAL:$1|編輯}}",
"usercreated": "於 $1 $2 {{GENDER:$3|建立}}",
- "newpages": "最新頁面",
+ "newpages": "新頁面",
"newpages-username": "使用者名稱:",
"ancientpages": "最舊頁面",
"move": "移動",
@@ -1607,12 +1634,14 @@
"nopagetext": "您所指定的目標頁面並不存在。",
"pager-newer-n": "較新 $1 筆",
"pager-older-n": "較舊 $1 筆",
- "suppress": "監督",
+ "suppress": "失職",
"querypage-disabled": "此特殊頁面因考量效能問題已被停用。",
+ "apihelp": "API 說明",
+ "apihelp-no-such-module": "查無模組 \"$1\"。",
"booksources": "圖書資源",
"booksources-search-legend": "尋找圖書資源",
"booksources-isbn": "國際標準書號:",
- "booksources-go": "執行",
+ "booksources-search": "搜尋",
"booksources-text": "下列清單包含其他銷售新書籍或二手書籍的網站連結,可會有你想尋找書籍的進一部資訊:",
"booksources-invalid-isbn": "您提供的 ISBN 不正確,請檢查複製的來源是否有誤。",
"specialloguserlabel": "執行者:",
@@ -1650,7 +1679,7 @@
"linksearch-pat": "搜尋關鍵字:",
"linksearch-ns": "命名空間:",
"linksearch-ok": "搜尋",
- "linksearch-text": "可使用萬用字元如 \"*.wikipedia.org\"。\n萬用字元必須使用在最上層網域,例如 \"*.org\".<br />\n支援的{{PLURAL:$2|通訊協定|通訊協定}}有:<code>$1</code> (若未指定則預設使用 http:// 通訊協定)。",
+ "linksearch-text": "可使用萬用字元如 *.wikipedia.org。\n萬用字元必須使用在最上層網域,例如 *.org 。<br />\n支援的{{PLURAL:$2|通訊協定}}有:<code>$1</code> (若未指定則預設使用 http:// 通訊協定) 。",
"linksearch-line": "$1 由 $2 所連結",
"linksearch-error": "萬用字元僅可在主機名稱的開頭使用。",
"listusersfrom": "顯示使用者開始自:",
@@ -1671,7 +1700,7 @@
"listgrouprights-rights": "權限",
"listgrouprights-helppage": "Help:Group rights",
"listgrouprights-members": "(成員清單)",
- "listgrouprights-addgroup": "加入{{PLURAL:$2|群組|群組}}:$1",
+ "listgrouprights-addgroup": "加入{{PLURAL:$2|群組}}:$1",
"listgrouprights-removegroup": "移除{{PLURAL:$2|群組|群組}}:$1",
"listgrouprights-addgroup-all": "加入所有群組",
"listgrouprights-removegroup-all": "移除所有群組",
@@ -1683,54 +1712,54 @@
"listgrouprights-namespaceprotection-namespace": "命名空間",
"listgrouprights-namespaceprotection-restrictedto": "允許使用者編輯的權限",
"trackingcategories": "追蹤分類",
- "trackingcategories-summary": "此頁面列出由 MediaWiki 系統自動產生用來追蹤頁面的分類,這些分類的名稱可由命名空間 {{ns:8}} 中的相關系統訊息中修改。",
+ "trackingcategories-summary": "此頁面列出由 MediaWiki 軟體自動產生用來追蹤頁面的分類,這些分類的名稱可由命名空間 {{ns:8}} 中的相關系統訊息中修改。",
"trackingcategories-msg": "追蹤分類",
"trackingcategories-name": "訊息名稱",
"trackingcategories-desc": "分類收錄標準",
"noindex-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__NOINDEX__</nowiki></code> 未被機器人列入索引的頁面。",
"index-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__INDEX__</nowiki></code> 被機器人列入索引的頁面。",
- "post-expand-template-inclusion-category-desc": "展開樣版後大小超過 <code>$wgMaxArticleSize</code> 導致部份樣版未正常展開的頁面。",
- "post-expand-template-argument-category-desc": "展開樣版參數後大小超過 <code>$wgMaxArticleSize</code> 的頁面 (有些於三括號中,如 <code>{{{Foo}}}</code>)。",
+ "post-expand-template-inclusion-category-desc": "展開樣板後大小超過 <code>$wgMaxArticleSize</code> 導致部份樣板未正常展開的頁面。",
+ "post-expand-template-argument-category-desc": "展開樣板參數後大小超過 <code>$wgMaxArticleSize</code> 的頁面 (有些於三括號中,如 <code>{{{Foo}}}</code>)。",
"expensive-parserfunction-category-desc": "頁面使用太多消耗系統資源的解析器函數 (如 <code>#ifexist</code>)。\n請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]。",
"broken-file-category-desc": "含有損壞檔案連結的頁面 (內嵌檔案連結的檔案不存在)。",
"hidden-category-category-desc": "內容中使用 <code><nowiki>__HIDDENCAT__</nowiki></code> 的分類,可隱藏預設在頁面上顯示的分類連結方塊。",
"trackingcategories-nodesc": "沒有可用的描述。",
"trackingcategories-disabled": "已停用分類",
"mailnologin": "沒有傳送位址",
- "mailnologintext": "您必須先 [[Special:UserLogin|登入]]\n並在 [[Special:Preferences|偏好設定]]\n中設定一個有效的電子郵件位址才可以傳送信件給其他使用者。",
- "emailuser": "Email 此使用者",
- "emailuser-title-target": "Email 給此{{GENDER:$1|使用者}}",
- "emailuser-title-notarget": "E-mail 給使用者",
+ "mailnologintext": "您必須先 [[Special:UserLogin|登入]]\n並在 [[Special:Preferences|偏好設定]]\n中設定一個有效的電子郵件地址才可以傳送郵件給其他使用者。",
+ "emailuser": "Email 聯絡此使用者",
+ "emailuser-title-target": "E-mail 聯絡此{{GENDER:$1|使用者}}",
+ "emailuser-title-notarget": "E-mail 聯絡使用者",
"emailpage": "E-mail 給使用者",
"emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件位址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
"defemailsubject": "{{SITENAME}} 使用者 \"$1\" 寄來的電子郵件",
"usermaildisabled": "使用者電子郵件已停用",
- "usermaildisabledtext": "您不能傳送信件到這個 Wiki 上的其他使用者",
- "noemailtitle": "沒有電子郵件位址",
- "noemailtext": "此使用者尚未指定一個有效的電子郵件位址。",
+ "usermaildisabledtext": "您不能傳送電子郵件到本 Wiki 上的其他使用者",
+ "noemailtitle": "無電子郵件地址",
+ "noemailtext": "此使用者尚未指定一個有效的電子郵件地址。",
"nowikiemailtext": "此使用者選擇不接收其他使用者的信件。",
"emailnotarget": "收件人不存在或無效的使用者名稱。",
- "emailtarget": "輸入收件人使用者名稱",
+ "emailtarget": "輸入收件人的使用者名稱",
"emailusername": "使用者名稱:",
"emailusernamesubmit": "送出",
- "email-legend": "傳送電子郵件給另一位 {{SITENAME}} 的使用者",
+ "email-legend": "傳送電子郵件聯絡另一位 {{SITENAME}} 的使用者",
"emailfrom": "寄件人:",
"emailto": "收件人:",
"emailsubject": "主旨:",
"emailmessage": "訊息:",
- "emailsend": "傳送",
+ "emailsend": "寄出",
"emailccme": "傳送一份訊息副本到我的電子郵件信箱。",
"emailccsubject": "您寄給 $1 的訊息副本:$2",
"emailsent": "已寄出電子郵件",
"emailsenttext": "已寄出您的電子郵件訊息。",
- "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"Email 給此使用者\" 功能寄給 $2。",
- "usermessage-summary": "留給系統訊息。",
+ "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"Email 聯絡此使用者\" 功能寄給 $2。",
+ "usermessage-summary": "留訊息至系統。",
"usermessage-editor": "系統訊息",
"watchlist": "監視清單",
"mywatchlist": "監視清單",
"watchlistfor2": "$1 的監視清單 $2",
"nowatchlist": "您的監視清單沒有任何項目。",
- "watchlistanontext": "請先登入以檢視或修改在監控表的項目",
+ "watchlistanontext": "請先登入以檢視或修改在監視清單的項目。",
"watchnologin": "尚未登入",
"addwatch": "新增至監視清單",
"addedwatchtext": "已於[[Special:Watchlist|您的監視清單]]新增頁面 \"[[:$1]]\"。\n未來對此頁面及其關聯的對話頁面的變更將會在此清單中列出。",
@@ -1748,7 +1777,7 @@
"wlheader-enotif": "已開啟電子郵件通知功能。",
"wlheader-showupdated": "在您最後一次檢視過後修改的頁面會以 <strong>粗體</strong> 顯示。",
"wlnote": "以下為自 $3 $4 之後的 <strong>$2</strong> 小時內所做的 <strong>$1</strong> 次變更。",
- "wlshowlast": "顯示最近 $1 小時,$2 天,$3 的修改",
+ "wlshowlast": "顯示最近 $1 小時 $2 天",
"watchlist-options": "監視清單選項",
"watching": "正在監視...",
"unwatching": "正在停止監視...",
@@ -1761,14 +1790,14 @@
"enotif_subject_restored": "{{SITENAME}} $2 已還原頁面 $1",
"enotif_subject_changed": "{{SITENAME}} $2 已修改頁面 $1",
"enotif_body_intro_deleted": "{{SITENAME}} $2 已刪除頁面 $1 於 $PAGEEDITDATE,詳見 $3。",
- "enotif_body_intro_created": "{{SITENAME}} $2 已建立頁面 $1 於 $PAGEEDITDATE,詳見目前的修訂 $3。",
- "enotif_body_intro_moved": "{{SITENAME}} $2 已移動頁面 $1 於 $PAGEEDITDATE,詳見目前的修訂 $3。",
- "enotif_body_intro_restored": "{{SITENAME}} $2 已還原頁面 $1 於 $PAGEEDITDATE,詳見目前的修訂 $3。",
- "enotif_body_intro_changed": "{{SITENAME}} $2 已修改頁面 $1 於 $PAGEEDITDATE,詳見目前的修訂 $3。",
+ "enotif_body_intro_created": "{{SITENAME}} 的頁面 $1 已於 $PAGEEDITDATE 被使用者 $2 {{GENDER:$2|建立}},詳見目前的修訂 $3。",
+ "enotif_body_intro_moved": "{{SITENAME}} 的頁面 $1 已於 $PAGEEDITDATE 被使用者 $2 {{GENDER:$2|移動}},詳見目前的修訂 $3。",
+ "enotif_body_intro_restored": "{{SITENAME}} 的頁面 $1 已於 $PAGEEDITDATE 被使用者 $2 {{GENDER:$2|還原}},詳見目前的修訂 $3。",
+ "enotif_body_intro_changed": "{{SITENAME}} 的頁面 $1 已於 $PAGEEDITDATE 被使用者 $2 {{GENDER:$2|更改}},詳見目前的修訂 $3。",
"enotif_lastvisited": "請參考 $1 檢視自您上次檢視後所有的變更。",
"enotif_lastdiff": "請參考 $1 檢視此變更。",
"enotif_anon_editor": "匿名使用者 $1",
- "enotif_body": "$WATCHINGUSERNAME 您好,\n\n$PAGEINTRO $NEWPAGE\n\n編輯摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n編輯者聯絡方式:\n信箱:$PAGEEDITOR_EMAIL\n本站:$PAGEEDITOR_WIKI\n\n在您檢視該頁面之前,接下來的變更系統不會再向您發出通知。您也可以在監視清單中重設您所有監視頁面的通知狀態。\n\n{{SITENAME}} 通知系統啟\n\n--\n更改您的電子郵件通知設定,請至:\n{{canonicalurl:{{#special:Preferences}}}}\n\n更改您的監視清單設定,請至:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n從監視清單中刪除此頁面,請至:\n$UNWATCHURL\n\n回函並取得進一步協助:\n$HELPPAGE",
+ "enotif_body": "$WATCHINGUSERNAME 您好,\n\n$PAGEINTRO $NEWPAGE\n\n編輯摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n編輯者聯絡方式:\n信箱:$PAGEEDITOR_EMAIL\n本站:$PAGEEDITOR_WIKI\n\n在您檢視該頁面之前,接下來的變更系統不會再向您發出通知。您也可以在監視清單中重設您所有監視頁面的通知狀態。\n\n{{SITENAME}} 通知系統\n\n--\n更改您的電子郵件通知設定,請至:\n{{canonicalurl:{{#special:Preferences}}}}\n\n更改您的監視清單設定,請至:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n從監視清單中刪除此頁面,請至:\n$UNWATCHURL\n\n回函並取得進一步協助:\n$HELPPAGE",
"created": "建立了",
"changed": "更改",
"deletepage": "刪除頁面",
@@ -1790,14 +1819,13 @@
"deletecomment": "原因:",
"deleteotherreason": "其它/額外的原因:",
"deletereasonotherlist": "其它原因",
- "deletereason-dropdown": "* 常見的刪除原因\n** 濫發廣告訊息\n** 破壞\n** 侵犯版權\n** 作者請求\n** 損壞的重新導向連結",
+ "deletereason-dropdown": "* 常見的刪除原因\n** 濫發廣告訊息\n** 破壞\n** 侵犯版權\n** 作者要求\n** 損壞的重新導向",
"delete-edit-reasonlist": "編輯刪除原因",
- "delete-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除此類頁面的動作已經被限制,以防止在{{SITENAME}}上的意外擾亂。",
- "delete-warning-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除它可能會擾亂{{SITENAME}}的資料庫操作;在繼續此動作前請小心。",
+ "delete-toobig": "此頁面含有大量的編輯歷史,超過 $1 次修訂。\n已限制刪除此類頁面的動作,以避免意外中斷 {{SITENAME}} 的運作。",
+ "delete-warning-toobig": "此頁面含有大量的編輯歷史,超過 $1 次修訂。\n刪除該頁面可能會中斷 {{SITENAME}} 的資料庫運作;\n請小心執行此動作。",
"deleteprotected": "此頁面已受保護,您無法刪除此頁面。",
"deleting-backlinks-warning": "<strong>警告:</strong>您正要刪除的頁面有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他頁面]]連結或引用。",
"rollback": "還原編輯",
- "rollback_short": "還原",
"rollbacklink": "還原",
"rollbacklinkcount": "還原 $1 次編輯",
"rollbacklinkcount-morethan": "還原超過 $1 次{{PLURAL:$1|編輯}}",
@@ -1807,9 +1835,9 @@
"editcomment": "編輯摘要為:\"''$1''\"。",
"revertpage": "已還原 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 的編輯為最後由 [[User:$1|$1]] 所修訂的版本",
"revertpage-nouser": "已還隱藏使用者的編輯為最後 {{GENDER:$1|[[User:$1|$1]]}} 修訂的版本",
- "rollback-success": "已還原 $1 做的編輯;\n更變回最後由 $2 修訂的版本。",
+ "rollback-success": "已還原 $1 所做的編輯;\n變更回由 $2 修訂的最後一個版本。",
"sessionfailure-title": "連線階段失敗",
- "sessionfailure": "似乎您的登入會話有問題;\n為了防止會話劫持,這個操作已經被取消。\n請返回先前的頁面,重新載入該頁面,然後重試。",
+ "sessionfailure": "您的登入連線階段似乎有問題,\n為了預防連線階段受到劫持攻擊,此動作已經被取消。\n請返回上一頁,重新讀取該頁面再試一次。",
"protectlogpage": "保護日誌",
"protectlogtext": "以下為變更頁面保護的清單。\n請參考 [[Special:ProtectedPages|受保護頁面清單]] 檢視目前受保護頁面。",
"protectedarticle": "已保護 \"[[$1]]\"",
@@ -1848,6 +1876,7 @@
"protect-othertime": "其它時間:",
"protect-othertime-op": "其它時間",
"protect-existing-expiry": "已設定期限:$2 $3",
+ "protect-existing-expiry-infinity": "已設定的期限:無限期",
"protect-otherreason": "其它/額外的原因:",
"protect-otherreason-op": "其它原因",
"protect-dropdown": "*常見的保護原因\n** 過度的破壞\n** 過多垃圾訊息\n** 反生產性的編輯戰\n** 高流量頁面",
@@ -1867,7 +1896,7 @@
"restriction-level-all": "任何層級",
"undelete": "檢視已刪除的頁面",
"undeletepage": "檢視與還原已刪除的頁面",
- "undeletepagetitle": "<strong>下列為 [[:$1]] 已刪除的修訂版本</strong>。",
+ "undeletepagetitle": "<strong>下列為 [[:$1|$1]] 已刪除的修訂版本</strong>。",
"viewdeletedpage": "檢視已刪除頁面",
"undeletepagetext": "下列 {{PLURAL:$1|1 個頁面已刪除|$1 個頁面已刪除}}但尚在封存,仍可還原。\n封存的檔案可能會定時清理。",
"undelete-fieldset-title": "還原修訂",
@@ -1907,6 +1936,7 @@
"namespace": "命名空間:",
"invert": "反向選擇",
"tooltip-invert": "勾選此核選方塊以隱藏選擇命名空間中的頁面變更 (若勾選相關命名空間,則會同時隱藏相關命名空間)",
+ "tooltip-whatlinkshere-invert": "勾選此核選方塊以隱藏選擇命名空間中的頁面連結。",
"namespace_association": "相關命名空間",
"tooltip-namespace_association": "勾選此核選方塊以包含與選擇命名空間相關的對話或主題命名空間",
"blanknamespace": "(主要)",
@@ -1920,7 +1950,7 @@
"month": "截止月份:",
"year": "截止年份:",
"sp-contributions-newbies": "只顯示新帳號的貢獻",
- "sp-contributions-newbies-sub": "新手",
+ "sp-contributions-newbies-sub": "新帳號的貢獻",
"sp-contributions-newbies-title": "新帳號的使用者貢獻",
"sp-contributions-blocklog": "封鎖記錄",
"sp-contributions-suppresslog": "已禁止顯示的使用者貢獻",
@@ -1930,14 +1960,14 @@
"sp-contributions-talk": "對話",
"sp-contributions-userrights": "使用者權限管理",
"sp-contributions-blocked-notice": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
- "sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
+ "sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖記錄以供參考:",
"sp-contributions-search": "搜尋貢獻",
"sp-contributions-username": "IP 位址或使用者名稱:",
"sp-contributions-toponly": "只顯示最新修訂的編輯",
"sp-contributions-newonly": "只顯示建立頁面的編輯",
"sp-contributions-submit": "搜尋",
- "whatlinkshere": "連入頁面",
- "whatlinkshere-title": "連結到 \"$1\" 的頁面",
+ "whatlinkshere": "連結至此的頁面",
+ "whatlinkshere-title": "連結至 \"$1\" 的頁面",
"whatlinkshere-page": "頁面:",
"linkshere": "以下頁面連結至 <strong>[[:$1]]</strong>:",
"nolinkshere": "沒有頁面連結至 <strong>[[:$1]]</strong>。",
@@ -1946,9 +1976,9 @@
"istemplate": "引用",
"isimage": "檔案連結",
"whatlinkshere-prev": "前 $1 筆",
- "whatlinkshere-next": "後 $1 筆",
+ "whatlinkshere-next": "{{PLURAL:$1|下筆|後 $1 筆}}",
"whatlinkshere-links": "← 連結",
- "whatlinkshere-hideredirs": "$1 重新導向頁面",
+ "whatlinkshere-hideredirs": "$1 重新導向",
"whatlinkshere-hidetrans": "$1 引用",
"whatlinkshere-hidelinks": "$1 連結",
"whatlinkshere-hideimages": "$1 檔案連結",
@@ -1958,7 +1988,7 @@
"unblock": "解除封鎖使用者",
"blockip": "封鎖{{GENDER:$1|使用者}}",
"blockip-legend": "封鎖使用者",
- "blockiptext": "填寫以下單據可封鎖特定 IP 位址或使用者名稱的存取權限。\n這個動作應用來避免破壞行為,可根據 [[{{MediaWiki:Policy-url}}|管理政策]]。\n請在下方填寫一個具體的原因 (例如:引述一段破壞頁面的事實)。",
+ "blockiptext": "填寫以下表單可封鎖特定 IP 位址或使用者名稱的存取權限。\n這個動作應用來避免破壞行為,可根據 [[{{MediaWiki:Policy-url}}|管理政策]]。\n請在下方填寫一個具體的原因 (例如:引述一段破壞頁面的事實)。",
"ipaddressorusername": "IP 位址或使用者名稱:",
"ipbexpiry": "期限:",
"ipbreason": "原因:",
@@ -1972,7 +2002,7 @@
"ipboptions": "2 小時:2 hours,1 天:1 day,3 天:3 days,1 週:1 week,2 週:2 weeks,1 個月:1 month,3 個月:3 months,6 個月:6 months,1 年:1 year,無限期:infinite",
"ipbhidename": "在編輯及清單中隱藏使用者名稱",
"ipbwatchuser": "監視這位使用者的使用者頁面及其對話頁面",
- "ipb-disableusertalk": "避免在封鎖此使用者的期間編輯自己的對話頁面",
+ "ipb-disableusertalk": "防止此使用者在封期間編輯他自己的對話頁面",
"ipb-change-block": "使用現有設定重新封鎖使用者",
"ipb-confirm": "確認封鎖",
"badipaddress": "無效的 IP 位址",
@@ -1992,6 +2022,7 @@
"unblocked": "[[User:$1|$1]] 的封鎖已經解除。",
"unblocked-range": "已解除封鎖 $1。",
"unblocked-id": "已經移除 $1 的封鎖。",
+ "unblocked-ip": "[[Special:Contributions/$1|$1]] 已解除封鎖。",
"blocklist": "已封鎖的使用者",
"ipblocklist": "已封鎖的使用者",
"ipblocklist-legend": "搜尋已封鎖的使用者",
@@ -2012,7 +2043,7 @@
"expiringblock": "$1 $2 到期",
"anononlyblock": "限匿名使用者",
"noautoblockblock": "停用自動封鎖",
- "createaccountblock": "停用帳號建立",
+ "createaccountblock": "帳號建立停用",
"emailblock": "停用電子郵件",
"blocklist-nousertalk": "無法編輯自己的對話頁面",
"ipblocklist-empty": "封鎖清單無任何資訊。",
@@ -2049,8 +2080,8 @@
"ipb_blocked_as_range": "錯誤:IP 位址 $1 並不是直接被封鎖,因此無法直接解除封鎖。\n此 IP 位址在 $2 的封鎖範圍之中,您可以解決此範圍的封鎖。",
"ip_range_invalid": "無效的 IP 範圍。",
"ip_range_toolarge": "不允許封鎖範圍大於 /$1。",
- "proxyblocker": "代理封鎖器",
- "proxyblockreason": "因您的 IP 位址是開放代理伺服器,已被封鎖。\n請聯繫您的網絡服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
+ "proxyblocker": "代理伺服器封鎖器",
+ "proxyblockreason": "因您的 IP 位址是開放代理伺服器,已被封鎖。\n請聯絡您的網路服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
"sorbsreason": "您的 IP 位址在 {{SITENAME}} 使用的 DNSBL 列為開放代理伺服器。",
"sorbs_create_account_reason": "您連線到 {{SITENAME}} 的 IP 位址被 DNSBL 列為開放代理伺服器。\n您不能建立帳號。",
"xffblockreason": "您的 IP 位址使用 X-Forwarded-For 標頭,您或您使用的代理伺服器已被封鎖。\n封鎖的原因為:$1",
@@ -2075,8 +2106,8 @@
"lockedbyandtime": "(由 {{GENDER:$1|$1}} 於 $2 的 $3)",
"move-page": "移動 $1",
"move-page-legend": "移動頁面",
- "movepagetext": "以下表格可以用來重新命名頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n舊標題的頁面將會變成重新導向頁面,指向使用新標題的頁面。\n您可以選擇自動更新所有指向舊頁面的重新導向,讓它們改為指向新頁面。\n若您選擇不自動更新,請檢查有沒有[[Special:DoubleRedirects|雙重重新導向]]或[[Special:BrokenRedirects|損壞的重新導向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重新導向頁面而且沒有任何編輯記錄。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的更改;\n在行動前請先確認您了解移動可能帶來的後果。",
- "movepagetext-noredirectfixer": "以下表格可以用來重新命名頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n舊標題的頁面將會變成重新導向頁面,指向使用新標題的頁面。\n請檢查有沒有[[Special:DoubleRedirects|雙重重新導向]]或[[Special:BrokenRedirects|損壞的重新導向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重新導向頁面而且沒有任何編輯記錄。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的更改;\n在行動前請先確認您了解移動可能帶來的後果。",
+ "movepagetext": "以下表單可以用來重新命名一個頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\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": "相關的的對話頁面 (如果有的話) 會自動與該頁面一起移動,<strong>除非:</strong>\n*新的名稱已有一個存在的對話頁面,或\n*您未勾選此核選方塊。\n\n在上述情況下,若有必要您必須手動移動或合併已存在的頁面。",
"movearticle": "移動頁面:",
"moveuserpage-warning": "<strong>警告:</strong>您正要移動使用者頁面,請注意只有使用者頁面會變更名稱,並<em>不會</em>重新命名使用者。",
@@ -2094,7 +2125,7 @@
"pagemovedsub": "已成功移動",
"movepage-moved": "<strong>已移動 \"$1\" 至 \"$2\"</strong>",
"movepage-moved-redirect": "已建立重新導向頁面。",
- "movepage-moved-noredirect": "已禁止建立重新導向頁面。",
+ "movepage-moved-noredirect": "已取消建立重新導向頁面。",
"articleexists": "該頁面名稱已存在,或您選擇的名稱無效。\n請改選擇其他名稱。",
"cantmove-titleprotected": "您選擇的新標題已被禁止使用,您不可移動頁面到該位置。",
"movetalk": "移動相關的對話頁面",
@@ -2144,7 +2175,7 @@
"export-addnstext": "使用命名空間新增頁面:",
"export-addns": "新增",
"export-download": "儲存為檔案",
- "export-templates": "包含樣版",
+ "export-templates": "包含模板",
"export-pagelinks": "包含連結的頁面深度:",
"allmessages": "系統訊息",
"allmessagesname": "名稱",
@@ -2170,18 +2201,19 @@
"thumbnail-temp-create": "無法建立暫存縮圖檔案",
"thumbnail-dest-create": "無法儲存縮圖至目標",
"thumbnail_invalid_params": "無效的縮圖參數",
+ "thumbnail_toobigimagearea": "檔案的尺寸超過 $1",
"thumbnail_dest_directory": "無法建立目標目錄",
"thumbnail_image-type": "不支援的圖片類型",
"thumbnail_gd-library": "未完成 GD 設定:缺少函數 $1",
"thumbnail_image-missing": "檔案遺失:$1",
"thumbnail_image-failure-limit": "最近顯示此縮圖已發生太多次失敗 ($1 次或更多),請稍後再試。",
"import": "匯入頁面",
- "importinterwiki": "Transwiki 匯入",
- "import-interwiki-text": "請選擇一個 Wiki 與頁面標題以進行匯入。\n會同時記錄修訂日期和編輯者的名稱。\n所有的 Transwiki 匯入操作會被記錄在 [[Special:Log/import|匯入日誌]]。",
+ "importinterwiki": "從其他 wiki 匯入",
+ "import-interwiki-text": "請選擇一個 Wiki 與頁面標題以進行匯入。\n會同時記錄修訂日期和編輯者的名稱。\n所有的從跨 Wiki 匯入操作都會被記錄在 [[Special:Log/import|匯入日誌]]。",
"import-interwiki-sourcewiki": "來源 Wiki:",
"import-interwiki-sourcepage": "來源頁面:",
"import-interwiki-history": "複製此頁的所有歷史修訂",
- "import-interwiki-templates": "包含所有樣版",
+ "import-interwiki-templates": "包含所有模板",
"import-interwiki-submit": "匯入",
"import-interwiki-namespace": "目標命名空間:",
"import-interwiki-rootpage": "目標根頁面 (選填):",
@@ -2197,7 +2229,7 @@
"importcantopen": "無法開啟匯入檔案",
"importbadinterwiki": "無效的 Interwiki 連結",
"importsuccess": "已完成匯入!",
- "importnosources": "未定義任何 Transwiki 匯入來源且已關閉使用歷史記錄上傳功能。",
+ "importnosources": "未定義任何已匯入的 wiki 來源且已關閉使用歷史記錄上傳功能。",
"importnofile": "未上傳匯入檔案。",
"importuploaderrorsize": "上傳匯入檔案失敗。\n檔案大小超過允許上傳大小。",
"importuploaderrorpartial": "上傳匯入檔案失敗。\n僅上傳部份檔案。",
@@ -2221,27 +2253,25 @@
"import-rootpage-nosubpage": "命名空間 \"$1\" 的根頁面不允許子頁面。",
"importlogpage": "匯入日誌",
"importlogpagetext": "管理性匯入其他 Wiki 的頁面及編輯歷史記錄。",
- "import-logentry-upload": "使用檔案上傳匯入 [[$1]]",
"import-logentry-upload-detail": "已匯入 $1 筆{{PLURAL:$1|修訂}}",
- "import-logentry-interwiki": "Transwiki 頁面 $1",
"import-logentry-interwiki-detail": "已從 $2 匯入 $1 筆{{PLURAL:$1|修訂}}",
"javascripttest": "JavaScript 測試",
- "javascripttest-title": "執行 $1 測試。",
"javascripttest-pagetext-noframework": "此頁面保留用來作為 JavaScript 測試使用。",
"javascripttest-pagetext-unknownframework": "不明的測試 Framework \"$1\"。",
+ "javascripttest-pagetext-unknownaction": "不明操作 \"$1\"。",
"javascripttest-pagetext-frameworks": "請選擇下列一種測試 Framework:$1",
"javascripttest-pagetext-skins": "選擇執行測試的外觀:",
"javascripttest-qunit-intro": "請參考 mediawiki.org 的 [$1 測試說明文件]。",
- "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit 測試工具",
"tooltip-pt-userpage": "您的使用者頁面",
- "tooltip-pt-anonuserpage": "您編輯使用的 IP 位址所對應的使用者頁面",
+ "tooltip-pt-anonuserpage": "您正使用以下身份編輯該 IP 位址的使用者頁面 :",
"tooltip-pt-mytalk": "您的對話頁面",
- "tooltip-pt-anontalk": "對於來自此 IP 位址編輯的對話",
+ "tooltip-pt-anontalk": "有關來自此 IP 位址編輯的討論",
"tooltip-pt-preferences": "您的偏好設定",
- "tooltip-pt-watchlist": "您監視變更頁面清單",
+ "tooltip-pt-watchlist": "您正在監視變更的頁面清單",
"tooltip-pt-mycontris": "您的貢獻清單",
- "tooltip-pt-login": "儘管非必要,仍建議您登入。",
+ "tooltip-pt-login": "建議您先登入,但並非必要。",
"tooltip-pt-logout": "登出",
+ "tooltip-pt-createaccount": "我們會鼓勵您建立一個帳號並且登入,即使這不是必要的動作。",
"tooltip-ca-talk": "有關頁面內容的討論",
"tooltip-ca-edit": "您可以編輯此頁,請在儲存之前先預覽。",
"tooltip-ca-addsection": "開始一個新章節",
@@ -2257,20 +2287,21 @@
"tooltip-search": "搜尋 {{SITENAME}}",
"tooltip-search-go": "若與此名稱相符的頁面存在,前往該頁面",
"tooltip-search-fulltext": "搜尋使用此文字的頁面",
- "tooltip-p-logo": "參觀主頁面",
- "tooltip-n-mainpage": "參觀主頁面",
- "tooltip-n-mainpage-description": "參觀主頁面",
- "tooltip-n-portal": "關於本專案、您可以做什麼、哪裡可以找到事情",
- "tooltip-n-currentevents": "提供目前新聞事件的背景資料",
- "tooltip-n-recentchanges": "列出此 Wiki 中的最近變更清單",
+ "tooltip-p-logo": "前往首頁",
+ "tooltip-n-mainpage": "前往首頁",
+ "tooltip-n-mainpage-description": "前往首頁",
+ "tooltip-n-portal": "關於本專案、您可以做什麼、哪裡可以找到您需要的事物",
+ "tooltip-n-currentevents": "於最新動態中尋找背景資訊",
+ "tooltip-n-recentchanges": "列出此 Wiki 中的近期變更清單",
"tooltip-n-randompage": "隨機進入一個頁面",
"tooltip-n-help": "尋求協助的地方",
"tooltip-t-whatlinkshere": "列出所有連結此頁面的頁面",
- "tooltip-t-recentchangeslinked": "此頁面連結到其他頁面的最近變更",
+ "tooltip-t-recentchangeslinked": "此頁面連結到其他頁面的近期變更",
"tooltip-feed-rss": "訂閱此頁面的 RSS feed",
"tooltip-feed-atom": "訂閱此頁面的 Atom feed",
"tooltip-t-contributions": "此使用者的貢獻清單",
- "tooltip-t-emailuser": "傳送電子郵件給這個使用者",
+ "tooltip-t-emailuser": "傳送電子郵件聯絡這位使用者",
+ "tooltip-t-info": "更多關於此頁面的資訊",
"tooltip-t-upload": "上傳檔案",
"tooltip-t-specialpages": "全部特殊頁面的清單",
"tooltip-t-print": "此頁面的可列印版本",
@@ -2282,7 +2313,7 @@
"tooltip-ca-nstab-project": "檢視專案頁面",
"tooltip-ca-nstab-image": "檢視檔案頁面",
"tooltip-ca-nstab-mediawiki": "檢視系統訊息",
- "tooltip-ca-nstab-template": "檢視樣版",
+ "tooltip-ca-nstab-template": "檢視模板",
"tooltip-ca-nstab-help": "檢視說明頁面",
"tooltip-ca-nstab-category": "檢視分類頁面",
"tooltip-minoredit": "標記為小修訂",
@@ -2290,19 +2321,19 @@
"tooltip-preview": "請在儲存前預覽您的變更!",
"tooltip-diff": "顯示您對內容所做的變更",
"tooltip-compareselectedversions": "檢視此頁兩個已選擇的修訂間的差異",
- "tooltip-watch": "將此頁加入您的監視清單",
+ "tooltip-watch": "新增此頁面至您的監視清單",
"tooltip-watchlistedit-normal-submit": "移除標題",
"tooltip-watchlistedit-raw-submit": "更新監視清單",
"tooltip-recreate": "無論是否被刪除,重新建立該頁面。",
"tooltip-upload": "開始上傳",
- "tooltip-rollback": "點選 \"還原\" 還原至上位貢獻者對此頁面的編輯",
+ "tooltip-rollback": "點選 \"還原\" 連結便可還原至上一位貢獻者對此頁面的編輯",
"tooltip-undo": "\"還原\" 可還原此編輯並以預覽模式開啟編輯表單,讓您可在摘要中加入原因。",
"tooltip-preferences-save": "儲存偏好設定",
"tooltip-summary": "請輸入簡短摘要",
"interlanguage-link-title": "$1 – $2",
"common.css": "/* 此 CSS 會套用至所有的介面外觀 */",
- "print.css": "/* 此 CSS 會影響列印版輸出 */",
- "noscript.css": "/* 此 CSS 會影響沒有啓用 JavaScript 的使用者 */",
+ "print.css": "/* 此處的 CSS 會影響列印輸出 */",
+ "noscript.css": "/* 此 CSS 會影響沒有啟用 JavaScript 的使用者 */",
"group-autoconfirmed.css": "/* 此 CSS 會影響自動確認的使用者 */",
"group-bot.css": "/* 此 CSS 會影響機器人 */",
"group-sysop.css": "/* 這裡的 CSS 會影響管理員 */",
@@ -2342,23 +2373,22 @@
"pageinfo-robot-policy": "由機器人建立索引",
"pageinfo-robot-index": "允許",
"pageinfo-robot-noindex": "不允許",
- "pageinfo-views": "檢視次數",
"pageinfo-watchers": "頁面監視者數",
"pageinfo-few-watchers": "少於 $1 名監視者",
"pageinfo-redirects-name": "指向此頁面的重新導向頁面數量",
"pageinfo-subpages-name": "此頁面的子頁面數",
- "pageinfo-subpages-value": "$1 ($2 個重新導向頁面; $3 個非重新導向頁面)",
+ "pageinfo-subpages-value": "$1 ($2 個{{PLURAL:$2|重新導向}}; $3 個{{PLURAL:$3|非重新導向}})",
"pageinfo-firstuser": "頁面建立者",
"pageinfo-firsttime": "頁面建立日期",
"pageinfo-lastuser": "最近編輯者",
"pageinfo-lasttime": "最近編輯日期",
"pageinfo-edits": "編輯總次數",
"pageinfo-authors": "作者總數",
- "pageinfo-recent-edits": "最近編輯次數 (過去$1內)",
+ "pageinfo-recent-edits": "最近編輯次數 (過去 $1 內)",
"pageinfo-recent-authors": "最近作者數",
"pageinfo-magic-words": "魔術{{PLURAL:$1|字}} ($1)",
- "pageinfo-hidden-categories": "隱藏{{PLURAL:$1|分類}} ($1)",
- "pageinfo-templates": "引用樣版 ($1)",
+ "pageinfo-hidden-categories": "隱藏分類 ($1)",
+ "pageinfo-templates": "引用模板 ($1)",
"pageinfo-transclusions": "頁面被引用於 ($1)",
"pageinfo-toolboxlink": "頁面資訊",
"pageinfo-redirectsto": "重新導向至",
@@ -2376,7 +2406,7 @@
"markaspatrolledtext": "標記此頁面為已巡查",
"markedaspatrolled": "己標記為已巡查",
"markedaspatrolledtext": "已標記選擇的修訂 [[:$1]] 為已巡查。",
- "rcpatroldisabled": "最近變更巡查已停用",
+ "rcpatroldisabled": "近期變更巡查已停用",
"rcpatroldisabledtext": "最新變更巡查的功能目前已停用。",
"markedaspatrollederror": "無法標記為已巡查",
"markedaspatrollederrortext": "您需指定要標記為已巡查的修訂。",
@@ -2459,11 +2489,11 @@
"variantname-zh": "不轉換",
"variantname-gan-hans": "‪中文(简体)",
"variantname-gan-hant": "‪中文(繁體)",
- "metadata": "資料定義",
+ "metadata": "詮釋資料",
"metadata-help": "此檔案包含額外的資訊,可能由數位相機或掃描機所建立的。\n若修改此檔案,部份資訊將無法保留。",
"metadata-expand": "顯示詳細資料",
"metadata-collapse": "隱藏詳細資料",
- "metadata-fields": "在本訊息中所列出的 EXIF 元數據域將包含在圖片顯示頁面,當元數據表損壞時只顯示以下訊息。\n其他的元數據預設為隱藏。\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+ "metadata-fields": "在本訊息中所列出的 EXIF 詮釋資料域將包含在圖片顯示頁面,當詮釋資料表損壞時只顯示以下訊息。\n其他的詮釋資料預設為隱藏。\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-imagewidth": "寬度",
"exif-imagelength": "高度",
"exif-bitspersample": "每像素位元",
@@ -2473,7 +2503,7 @@
"exif-samplesperpixel": "像素數量",
"exif-planarconfiguration": "資料排列",
"exif-ycbcrsubsampling": "黃色轉洋紅二次抽樣比率",
- "exif-ycbcrpositioning": "黃色和洋紅配置",
+ "exif-ycbcrpositioning": "亮度與彩度位置",
"exif-xresolution": "水平解析度",
"exif-yresolution": "垂直解析度",
"exif-stripoffsets": "影像資料位置",
@@ -2588,7 +2618,7 @@
"exif-countrydest": "顯示國家",
"exif-countrycodedest": "顯示國家代碼",
"exif-provinceorstatedest": "顯示省或州",
- "exif-citydest": "顯示城市",
+ "exif-citydest": "顯示的城市",
"exif-sublocationdest": "顯示城市詳細地點",
"exif-objectname": "簡稱",
"exif-specialinstructions": "特別說明",
@@ -2598,9 +2628,9 @@
"exif-editstatus": "圖片編輯狀態",
"exif-urgency": "緊急性",
"exif-fixtureidentifier": "夾具名稱",
- "exif-locationdest": "位置描述",
+ "exif-locationdest": "描繪地點",
"exif-locationdestcode": "位置代碼描述",
- "exif-objectcycle": "媒體的時間",
+ "exif-objectcycle": "媒體發生時間",
"exif-contact": "聯絡資訊",
"exif-writer": "作家",
"exif-languagecode": "語言",
@@ -2618,9 +2648,9 @@
"exif-datetimemetadata": "資料定義最後修改日期",
"exif-nickname": "非正式的影像名稱",
"exif-rating": "評分 (共 5 分)",
- "exif-rightscertificate": "版權管理證書",
+ "exif-rightscertificate": "版權管理憑證",
"exif-copyrighted": "版權狀態",
- "exif-copyrightowner": "版權持有人",
+ "exif-copyrightowner": "版權所有人",
"exif-usageterms": "使用條款",
"exif-webstatement": "線上版權聲明",
"exif-originaldocumentid": "原始文件唯一識別碼",
@@ -2635,9 +2665,9 @@
"exif-intellectualgenre": "項目類型",
"exif-subjectnewscode": "主題代碼",
"exif-scenecode": "IPTC 現場代碼",
- "exif-event": "事件描述",
- "exif-organisationinimage": "組織描述",
- "exif-personinimage": "所描述的人",
+ "exif-event": "描繪事件",
+ "exif-organisationinimage": "描繪組織",
+ "exif-personinimage": "描繪人物",
"exif-originalimageheight": "裁切前的高度",
"exif-originalimagewidth": "裁切前的寬度",
"exif-compression-1": "未壓縮",
@@ -2715,11 +2745,11 @@
"exif-sensingmethod-8": "連續彩色線性感測器",
"exif-filesource-3": "數位相機",
"exif-scenetype-1": "直接照像圖片",
- "exif-customrendered-0": "標準處理",
- "exif-customrendered-1": "自定義處理",
+ "exif-customrendered-0": "一般程序",
+ "exif-customrendered-1": "自訂程序",
"exif-exposuremode-0": "自動曝光",
"exif-exposuremode-1": "手動曝光",
- "exif-exposuremode-2": "自動曝光感知調節",
+ "exif-exposuremode-2": "自動包圍曝光",
"exif-whitebalance-0": "自動白平衡",
"exif-whitebalance-1": "手動白平衡",
"exif-scenecapturetype-0": "標準",
@@ -2750,8 +2780,8 @@
"exif-gpslongitude-w": "西經",
"exif-gpsaltitude-above-sealevel": "海拔 $1 {{PLURAL:$1|公尺}}",
"exif-gpsaltitude-below-sealevel": "海拔負 $1 {{PLURAL:$1|公尺}}",
- "exif-gpsstatus-a": "測量過程",
- "exif-gpsstatus-v": "互動測量",
+ "exif-gpsstatus-a": "測量進行中",
+ "exif-gpsstatus-v": "測量互通性",
"exif-gpsmeasuremode-2": "二維測量",
"exif-gpsmeasuremode-3": "三維測量",
"exif-gpsspeed-k": "每小時公里",
@@ -2770,16 +2800,16 @@
"exif-objectcycle-b": "上午與下午",
"exif-gpsdirection-t": "真實方向",
"exif-gpsdirection-m": "地磁方向",
- "exif-ycbcrpositioning-1": "置中",
- "exif-ycbcrpositioning-2": "聯合選址",
+ "exif-ycbcrpositioning-1": "中間",
+ "exif-ycbcrpositioning-2": "同時取樣",
"exif-dc-contributor": "貢獻者",
- "exif-dc-coverage": "時間或空間性介質範圍",
+ "exif-dc-coverage": "媒體的時空範圍",
"exif-dc-date": "日期",
"exif-dc-publisher": "出版商",
"exif-dc-relation": "相關媒體",
"exif-dc-rights": "權利",
"exif-dc-source": "來源媒體",
- "exif-dc-type": "介質類型",
+ "exif-dc-type": "媒體類型",
"exif-rating-rejected": "已拒絕",
"exif-isospeedratings-overflow": "大於 65535",
"exif-iimcategory-ace": "藝術、文化與娛樂",
@@ -2803,30 +2833,29 @@
"exif-urgency-low": "低 ($1)",
"exif-urgency-high": "高 ($1)",
"exif-urgency-other": "使用者自訂優先權 ($1)",
- "watchlistall2": "全部",
"namespacesall": "全部",
"monthsall": "全部",
- "confirmemail": "確認電子郵件位址",
- "confirmemail_noemail": "您尚未於 [[Special:Preferences|偏好設定]] 輸入一個有效的電子郵件位址。",
- "confirmemail_text": "{{SITENAME}}要求您在使用郵件功能之前驗證您的郵箱位址。\n點選以下按鈕可向您的郵箱傳送一封確認郵件。該郵件包含有一行代碼連結;\n請在您的瀏覽器中載入此連結以確認您的郵箱位址是有效的。",
- "confirmemail_pending": "確認碼已傳送至您的電子郵件,\n若您才剛建立好您的帳號,可能需要稍後幾分鐘才能收到。\n若沒有收到,請再重新申請一次確認碼。",
- "confirmemail_send": "電子郵件寄送確認代碼",
- "confirmemail_sent": "已寄出確認電子郵件。",
- "confirmemail_oncreate": "一個確認代碼已經被傳送到您的郵箱。該代碼並不要求您進行登入,\n但若您要啟用在此 wiki 上的任何基於電子郵件的功能,您必須先提交此代碼。",
- "confirmemail_sendfailed": "{{SITENAME}}無法傳送確認郵件,請檢查郵箱位址是否包含非法字元。\n\n郵件傳送員回應: $1",
+ "confirmemail": "確認電子郵件地址",
+ "confirmemail_noemail": "您尚未在 [[Special:Preferences|偏好設定]] 中輸入一個有效的電子郵件地址。",
+ "confirmemail_text": "{{SITENAME}} 要求您在使用郵件功能之前驗證您的電子郵件地址。\n點選以下按鈕可向您的電子郵件傳送一封確認郵件。該郵件包含有一行代碼連結;\n請在您的瀏覽器中載入此連結以確認您的電子郵件地址是有效的。",
+ "confirmemail_pending": "確認碼已透過電子郵件傳送給您,\n若您才剛建立好您的帳號,可能需要稍後幾分鐘才能收到。\n若沒有收到,請再重新申請一次確認碼。",
+ "confirmemail_send": "電子郵件確認碼",
+ "confirmemail_sent": "確認郵件已寄出。",
+ "confirmemail_oncreate": "確認碼已傳送至您的電子郵件地址。\n登入動作不需要使用此代碼,但開啟在 Wiki 中任何以電子郵件為基礎的功能會需要先提供此代碼。",
+ "confirmemail_sendfailed": "{{SITENAME}}無法傳送確認郵件,請檢查電子郵件地址是否包含非法字元。\n\n郵件傳送員回應: $1",
"confirmemail_invalid": "無效的確認碼,該代碼可能已經過期。",
"confirmemail_needlogin": "請 $1 以確認您的電子郵件地址。",
- "confirmemail_success": "您的郵箱已經被確認。您現在可以[[Special:UserLogin|登入]]並使用此網站了。",
+ "confirmemail_success": "您的電子郵件已經被確認。您現在可以 [[Special:UserLogin|登入]] 並使用此網站了。",
"confirmemail_loggedin": "已確認您的電子郵件地址。",
"confirmemail_subject": "{{SITENAME}} 電子郵件地址確認",
- "confirmemail_body": "不明人士 (可能是您自己,來自 IP 位址 $1) 已在 {{SITENAME}} 註冊了一個帳號 \"$2\" 並使用了此電子郵件位址。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以啟用在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
- "confirmemail_body_changed": "不明人士 (可能是您自己,來自 IP 位址 $1) 已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件位址更改至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以啟用在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
- "confirmemail_body_set": "不明人士 (可能是您自己,來自 IP 位址 $1) 已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件位址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以啟用在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
+ "confirmemail_body": "不明人士 (可能是您自己,來自 IP 位址 $1) 已在 {{SITENAME}} 註冊了一個帳號 \"$2\" 並使用了此電子郵件位址。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
+ "confirmemail_body_changed": "不明人士 (可能是您自己,來自 IP 位址 $1) 已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件地址更改至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
+ "confirmemail_body_set": "不明人士 (可能是您自己,來自 IP 位址 $1) 已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件位址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
"confirmemail_invalidated": "已取消電子郵件地址確認",
"invalidateemail": "取消電子郵件確認",
"scarytranscludedisabled": "[Interwiki 轉換代碼不可用]",
- "scarytranscludefailed": "[樣版 $1 讀取失敗]",
- "scarytranscludefailed-httpstatus": "[樣版 $1 讀取失敗:HTTP $2]",
+ "scarytranscludefailed": "[模板 $1 讀取失敗]",
+ "scarytranscludefailed-httpstatus": "[樣板 $1 讀取失敗:HTTP $2]",
"scarytranscludetoolong": "[URL 過長]",
"deletedwhileediting": "<strong>警告:</strong>此頁在您開始編輯之後已經被刪除﹗",
"confirmrecreate": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,原因為:\n: <em>$2</em>\n請確認您是否真的要重新建立此頁面。",
@@ -2834,7 +2863,7 @@
"recreate": "重新建立",
"confirm_purge_button": "確定",
"confirm-purge-top": "要清除此頁面的快取嗎?",
- "confirm-purge-bottom": "清理一頁將會清除快取以及強迫顯示最現時之修訂版本。",
+ "confirm-purge-bottom": "清除頁面會清空頁面的快取記錄並強制顯示最近的頁面修訂。",
"confirm-watch-button": "確定",
"confirm-watch-top": "新增此頁面至您的監視清單?",
"confirm-unwatch-button": "確定",
@@ -2883,7 +2912,7 @@
"watchlistedit-raw-done": "已更新您的監視清單。",
"watchlistedit-raw-added": "已新增 $1 個標題:",
"watchlistedit-raw-removed": "已移除 $1 個標題:",
- "watchlistedit-clear-title": "已清空監視清單",
+ "watchlistedit-clear-title": "清空監視清單",
"watchlistedit-clear-legend": "清空監視清單",
"watchlistedit-clear-explain": "將會移除您的監視清單中所有的標題",
"watchlistedit-clear-titles": "標題:",
@@ -2896,22 +2925,22 @@
"watchlisttools-edit": "檢視並編輯監視清單",
"watchlisttools-raw": "編輯原始監視清單",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|對話]])",
- "unknown_extension_tag": "不明的擴充標籤 \"$1\"",
"duplicate-defaultsort": "<strong>警告:</strong>預設的排序鍵 \"$2\" 會覆蓋先前預設的排序鍵 \"$1\"。",
"duplicate-displaytitle": "<strong>警告:</strong> 顯示標題 \"$2\" 覆蓋之前的顯示標題 \"$1\"。",
+ "invalid-indicator-name": "<strong>錯誤:</strong>頁面狀態指示的 <code>name</code> 屬性不能為空。",
"version": "版本",
"version-extensions": "已安裝的擴充套件",
"version-skins": "已安裝的外觀",
"version-specialpages": "特殊頁面",
- "version-parserhooks": "解析器連結(Hook)",
+ "version-parserhooks": "解析器連結 (Hook)",
"version-variables": "變數",
"version-antispam": "垃圾訊息防止",
"version-other": "其他",
"version-mediahandlers": "媒體處理器",
- "version-hooks": "連結(Hooks)",
+ "version-hooks": "連結 (Hooks)",
"version-parser-extensiontags": "解析器擴充標籤",
"version-parser-function-hooks": "語法函數連結",
- "version-hook-name": "連結名稱",
+ "version-hook-name": "鉤名",
"version-hook-subscribedby": "署名",
"version-version": "($1)",
"version-no-ext-name": "[未命名]",
@@ -2931,7 +2960,7 @@
"version-poweredby-others": "其他",
"version-poweredby-translators": " translatewiki.net 翻譯人員",
"version-credits-summary": "我們感謝以下人士為 [[Special:Version|MediaWiki]] 作出的貢獻。",
- "version-license-info": "MediaWiki 為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但不負任何擔保責任;亦無隱含對適售性或 特定用途的適用性的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 通用公共授權條款的副本];如果沒有,請信件通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 線上閱讀]。",
+ "version-license-info": "MediaWiki 為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但不負任何擔保責任;亦無隱含對適售性或 特定用途的適用性的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 通用公共授權條款的副本];如果沒有,請寄信通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 線上閱讀]。",
"version-software": "已經安裝的軟體",
"version-software-product": "產品",
"version-software-version": "版本",
@@ -2940,6 +2969,9 @@
"version-entrypoints-header-url": "URL",
"version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath 文章路徑]",
"version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Script 路徑]",
+ "version-libraries": "已安裝的程式庫",
+ "version-libraries-library": "程式庫",
+ "version-libraries-version": "版本",
"redirect": "重新導向至檔案、使用者、頁面或修訂 ID",
"redirect-legend": "重新導向至檔案或頁面",
"redirect-summary": "此特殊頁面可用來重新導向至檔案 (指定檔案名稱)、頁面 (指定修訂 ID 或頁面 ID) 或使用者頁面 (指定使用者 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]] 或 [[{{#Special:Redirect}}/user/101]]。",
@@ -2951,13 +2983,13 @@
"redirect-revision": "頁面修訂 ID",
"redirect-file": "檔案名稱",
"redirect-not-exists": "查無值",
- "fileduplicatesearch": "搜尋重覆檔案",
- "fileduplicatesearch-summary": "依據雜湊值(Hash)來搜尋重複的檔案。",
- "fileduplicatesearch-legend": "搜尋重覆",
+ "fileduplicatesearch": "搜尋重複檔案",
+ "fileduplicatesearch-summary": "依據雜湊值 (Hash) 來搜尋重複的檔案。",
+ "fileduplicatesearch-legend": "搜尋重複",
"fileduplicatesearch-filename": "檔案名稱:",
"fileduplicatesearch-submit": "搜尋",
"fileduplicatesearch-info": "$1 × $2 像素<br />檔案大小:$3<br />MIME 類型:$4",
- "fileduplicatesearch-result-1": "檔案 $1 無重覆的檔案。",
+ "fileduplicatesearch-result-1": "檔案 $1 無重複的檔案。",
"fileduplicatesearch-result-n": "檔案 $1 有 $2 筆重覆的檔案。",
"fileduplicatesearch-noresults": "查無名稱為 \"$1\" 的檔案。",
"specialpages": "特殊頁面",
@@ -2966,7 +2998,7 @@
"specialpages-group-maintenance": "維護報表",
"specialpages-group-other": "其它特殊頁面",
"specialpages-group-login": "登入 / 建立帳號",
- "specialpages-group-changes": "最近變更與日誌",
+ "specialpages-group-changes": "近期變更與日誌",
"specialpages-group-media": "媒體上傳與報表",
"specialpages-group-users": "使用者與權限",
"specialpages-group-highuse": "常用頁面",
@@ -2975,40 +3007,83 @@
"specialpages-group-wiki": "資料和工具",
"specialpages-group-redirects": "重新導向相關特殊頁面",
"specialpages-group-spam": "反垃圾訊息工具",
+ "specialpages-group-developer": "開發人員工具",
"blankpage": "空白頁面",
"intentionallyblankpage": "此頁面被故意設為空白。",
"external_image_whitelist": " #請勿修改本行文字<pre>\n#請於下方填寫正規表示法 (只需 // 之間的內容)\n#將會檢查外部連結的圖片是否符合這些條件\n#符合條件的連結會以圖片顯示,否則只顯示連結\n#以 # 開頭的行會被做為註解\n#此條件不區分大小寫\n\n#請將所有正規表示法輸入在此行上方,請勿修改本行文字</pre>",
"tags": "有效變更標籤",
"tag-filter": "[[Special:Tags|標籤]]搜尋:",
"tag-filter-submit": "搜尋",
- "tag-list-wrapper": "([[Special:Tags|標籤]]:$2)",
+ "tag-list-wrapper": "([[Special:Tags|$1 個標籤]]:$2)",
"tags-title": "標籤",
- "tags-intro": "這個頁面列示出在軟件中已標示的編輯,以及它們的解釋。",
+ "tags-intro": "此頁面列出所有可用來標示編輯內容的標籤以及這些標籤所代表的意思。",
"tags-tag": "標籤名稱",
- "tags-display-header": "在更改清單中的出現方式",
- "tags-description-header": "完整含意說明",
- "tags-active-header": "啟用?",
- "tags-hitcount-header": "已加上標籤的更改",
+ "tags-display-header": "在變更日誌中顯示的方式",
+ "tags-description-header": "意義完整的說明",
+ "tags-source-header": "來源",
+ "tags-active-header": "開啟?",
+ "tags-hitcount-header": "已標記的變更",
+ "tags-actions-header": "操作",
"tags-active-yes": "是",
"tags-active-no": "否",
+ "tags-source-extension": "由擴充套件定義",
+ "tags-source-manual": "由使用者與機器人手動套用",
+ "tags-source-none": "不再使用",
"tags-edit": "編輯",
+ "tags-delete": "刪除",
+ "tags-activate": "啟動",
+ "tags-deactivate": "停用",
"tags-hitcount": "$1 次變更",
+ "tags-manage-no-permission": "您沒有權限管理變更標籤。",
+ "tags-create-heading": "建立新標籤",
+ "tags-create-explanation": "在預設情況下,新建立的標籤可被使用者及機器人使用。",
+ "tags-create-tag-name": "標籤名稱:",
+ "tags-create-reason": "原因:",
+ "tags-create-submit": "建立",
+ "tags-create-no-name": "您必須指定一個標籤名稱。",
+ "tags-create-invalid-chars": "標籤名稱不可包含逗號 (<code>,</code>) 或斜線 (<code>/</code>)。",
+ "tags-create-invalid-title-chars": "標籤名稱不能含有無法使用者頁面標題的字元。",
+ "tags-create-already-exists": "標籤 \"$1\" 已存在。",
+ "tags-create-warnings-above": "嘗試建立標籤 \"$1\" 時發生下列{{PLURAL:$2|警告}}:",
+ "tags-create-warnings-below": "您是否要繼續建立標籤?",
+ "tags-delete-title": "刪除標籤",
+ "tags-delete-explanation-initial": "您正要從資料庫刪除標籤 \"$1\"。",
+ "tags-delete-explanation-in-use": "標籤會自目前正在使用的{{PLURAL:$2| $2 個修訂或日誌項目| $2 修訂或日誌項目}}中移除。",
+ "tags-delete-explanation-warning": "此動作是 <strong>無法還原的</strong> 且 <strong>無法取消的</strong>,即使是資料庫管理者也無法。 請確認您要刪除的標題。",
+ "tags-delete-explanation-active": "<strong>標籤 \"$1\" 尚在使用,無法刪除。</strong> 要停止標籤使用,請至套用該標籤的頁面,並於該處將標籤停用。",
+ "tags-delete-reason": "原因:",
+ "tags-delete-submit": "無法取消刪除此標籤",
+ "tags-delete-not-allowed": "無法刪除由擴充套件定義的標籤,除非該擴充套件允許。",
+ "tags-delete-not-found": "標籤 \"$1\" 不存在。",
+ "tags-delete-too-many-uses": "標籤 \"$1\" 會套用至 $2 筆以上的{{PLURAL:$2|修訂|修訂}},這代表該標籤將無法刪除。",
+ "tags-delete-warnings-after-delete": "標籤 \"$1\" 已刪除成功,但發生下列{{PLURAL:$2|警告|警告}}:",
+ "tags-activate-title": "啟動標籤",
+ "tags-activate-question": "您正要啟動標籤 \"$1\"。",
+ "tags-activate-reason": "原因:",
+ "tags-activate-not-allowed": "無法啟動標籤 \"$1\"。",
+ "tags-activate-not-found": "標籤 \"$1\" 不存在。",
+ "tags-activate-submit": "啟動",
+ "tags-deactivate-title": "停用標籤",
+ "tags-deactivate-question": "您正要停用標籤 \"$1\"。",
+ "tags-deactivate-reason": "原因:",
+ "tags-deactivate-not-allowed": "無法停用標籤 \"$1\"。",
+ "tags-deactivate-submit": "停用",
"comparepages": "比較頁面",
"compare-page1": "第 1 頁",
"compare-page2": "第 2 頁",
"compare-rev1": "修訂 1",
"compare-rev2": "修訂 2",
"compare-submit": "比較",
- "compare-invalid-title": "所指定標題無效。",
- "compare-title-not-exists": "所指定的話題不存在。",
- "compare-revision-not-exists": "所指定的修訂不存在。",
+ "compare-invalid-title": "您所指定的標題無效。",
+ "compare-title-not-exists": "您所指定的標題不存在。",
+ "compare-revision-not-exists": "您所指定的修訂不存在。",
"dberr-problems": "抱歉!這個網站出現了一些技術上的問題。",
- "dberr-again": "嘗試等候數分鐘後,然後再試。",
- "dberr-info": "(無法連線資料庫伺服器:$1)",
- "dberr-info-hidden": "(無法連線資料庫伺服器)",
- "dberr-usegoogle": "在現階段您可以嘗試透過 Google 搜尋。",
- "dberr-outofdate": "留意他們索引出來之內容可能不是最新的。",
- "dberr-cachederror": "這個是所要求出來的快取複本,可能不是最新的。",
+ "dberr-again": "請稍後數分鐘後再試。",
+ "dberr-info": "(無法存取資料庫:$1)",
+ "dberr-info-hidden": "(無法存取資料庫)",
+ "dberr-usegoogle": "您可以嘗試在此期間使用 Google 搜尋。",
+ "dberr-outofdate": "注意,它們用來建立索引的內容可能不是最新的。",
+ "dberr-cachederror": "這是請求面頁面的快取複本,可能不是最新的。",
"htmlform-invalid-input": "您的輸入的內容有問題。",
"htmlform-select-badoption": "您所指定的值不是有效的選項。",
"htmlform-int-invalid": "您所指定的值不是一個整數。",
@@ -3046,8 +3121,16 @@
"revdelete-uname-unhid": "取消隱藏使用者名稱",
"revdelete-restricted": "已套用對管理員的限制",
"revdelete-unrestricted": "已移除對管理員的限制",
+ "logentry-block-block": "$1 {{GENDER:$2|已封鎖}} {{GENDER:$4|$3}} 期限為 $5 $6",
+ "logentry-block-unblock": "$1 {{GENDER:$2|已解除封鎖}} {{GENDER:$4|$3}}",
+ "logentry-block-reblock": "$1 {{GENDER:$2|已變更}} {{GENDER:$4|$3}} 的封鎖設定期限為 $5 $6",
+ "logentry-suppress-block": "$1 {{GENDER:$2|已封鎖}} {{GENDER:$4|$3}} 期限為 $5 $6",
+ "logentry-suppress-reblock": "$1 {{GENDER:$2|已變更}} {{GENDER:$4|$3}} 的封鎖設定期限為 $5 $6",
+ "logentry-import-upload": "$1 已由檔案上傳{{GENDER:$2|匯入}} $3",
+ "logentry-import-interwiki": "$1 已由其他 wiki {{GENDER:$2|匯入}} $3",
+ "logentry-merge-merge": "$1 將 $3 {{GENDER:$2|合併}}至 $4 (修訂版本至 $5)",
"logentry-move-move": "$1 {{GENDER:$2|已移動}}頁面 $3 至 $4",
- "logentry-move-move-noredirect": "$1 已移動頁面 $3 至 $4,不留重新導向頁面",
+ "logentry-move-move-noredirect": "$1 {{GENDER:$2|已移動}}頁面 $3 至 $4,不留重新導向",
"logentry-move-move_redir": "$1 已移動頁面 $3 至 $4 並覆蓋原有重新導向",
"logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|已移動}}頁面 $3 覆蓋重新導向頁面至 $4,未留重新導向頁面",
"logentry-patrol-patrol": "$1 {{GENDER:$2|已標記}}頁面 $3 的修訂 $4 為已巡查",
@@ -3063,20 +3146,36 @@
"logentry-upload-upload": "$1 {{GENDER:$2|已上傳}} $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|上傳了}}新版本的 $3",
"logentry-upload-revert": "$1 {{GENDER:$2|已上傳}} $3",
+ "log-name-managetags": "標籤管理日誌",
+ "log-description-managetags": "此頁面列出與[[Special:Tags|標籤]]相關的管理工作項目。 在日誌中僅包含由管理員手動所做的操作;被 Wiki 軟體所建立或刪除的標籤項目,不會記錄在此日誌中",
+ "logentry-managetags-create": "$1 {{GENDER:$2|已建立}}標籤 \"$4\"",
+ "logentry-managetags-delete": "$1 {{GENDER:$2|已刪除}}標籤 \"$4\" (已自 $5 個{{PLURAL:$5|修訂或日誌|修訂或日誌}}中移除)",
+ "logentry-managetags-activate": "$1 {{GENDER:$2|已啟用}}標籤 \"$4\" 供使用者與機器人使用",
+ "logentry-managetags-deactivate": "$1 {{GENDER:$2|已停用}}標籤 \"$4\" 供使用者與機器人使用",
"rightsnone": "(無)",
- "feedback-bugornote": "如果您準備要詳細描述一個技術問題,請至 [$1 回報問題]。\n或您可以使用以下的簡易表單回報問題,您的使用者名稱與評論將被新增到頁面 \"[$3 $2]\"。",
- "feedback-subject": "主旨:",
- "feedback-message": "訊息:",
- "feedback-cancel": "取消",
- "feedback-submit": "送出意見回饋",
+ "revdelete-summary": "編輯摘要",
"feedback-adding": "正在新增意見回饋至頁面...",
+ "feedback-back": "返回",
+ "feedback-bugcheck": "很好! 檢查一下您的意見是不是已經被列為 [$1 已知問題]。",
+ "feedback-bugnew": "我已經檢查。 回報新問題",
+ "feedback-bugornote": "如果您準備要詳細描述一個技術問題,請至 [$1 回報問題]。\n或您可以使用以下的簡易表單回報問題,您的使用者名稱與評論將被新增到 \"[$3 $2]\" 頁面。",
+ "feedback-cancel": "取消",
+ "feedback-close": "完成",
+ "feedback-external-bug-report-button": "回報技術問題",
+ "feedback-dialog-title": "送出意見回饋",
+ "feedback-dialog-intro": "您可以使用以下簡易表單傳送您的意見回饋。您的意見將會使用您的使用者名稱新增至頁面 \"$1\"。",
+ "feedback-error-title": "錯誤",
"feedback-error1": "錯誤:無法識別 API 回傳的結果",
"feedback-error2": "錯誤:編輯失敗",
"feedback-error3": "錯誤:API 沒有回應",
+ "feedback-message": "訊息:",
+ "feedback-subject": "主旨:",
+ "feedback-submit": "送出",
+ "feedback-terms": "我了解我的使用者代理資訊包含完整的瀏覽器與作業系統版本資訊,且該資訊將會與意見回饋一同公開共享。",
+ "feedback-termsofuse": "我同意依照使用條款提供意見回饋。",
"feedback-thanks": "感謝!您的意見回饋已發佈到頁面 \"[$2 $1]\"。",
- "feedback-close": "完成",
- "feedback-bugcheck": "很好! 檢查一下您的意見是不是已經被列為 [$1 已知問題]。",
- "feedback-bugnew": "我已經檢查。 回報新問題",
+ "feedback-thanks-title": "感謝您!",
+ "feedback-useragent": "使用者代理:",
"searchsuggest-search": "搜尋",
"searchsuggest-containing": "包含...",
"api-error-badaccess-groups": "您沒有權限在此 Wiki 上傳檔案。",
@@ -3094,9 +3193,9 @@
"api-error-file-too-large": "您送出的檔案太大了。",
"api-error-filename-tooshort": "檔案名稱過短。",
"api-error-filetype-banned": "此檔案類型已禁止使用。",
- "api-error-filetype-banned-type": "$1{{PLURAL:$4|不是允許的檔案類型}}。 允許的{{PLURAL:$3|檔案類型是}} $2。",
+ "api-error-filetype-banned-type": "$1 {{PLURAL:$4|不是允許的檔案類型}}。 允許的{{PLURAL:$3|檔案類型有}} $2。",
"api-error-filetype-missing": "此檔案名稱缺少副檔名。",
- "api-error-hookaborted": "你試圖進行的修改被一個擴展鉤子終止。",
+ "api-error-hookaborted": "您嘗試進行的修改被某個擴充套件中止。",
"api-error-http": "內部錯誤:無法連線到伺服器。",
"api-error-illegal-filename": "不允許使用的檔案名稱。",
"api-error-internal-error": "內部錯誤:此 Wiki 在處理你的上傳時發生錯誤。",
@@ -3105,13 +3204,20 @@
"api-error-missingresult": "內部錯誤:無法辨識複製是否成功。",
"api-error-mustbeloggedin": "您必須登入方可上傳檔案。",
"api-error-mustbeposted": "內部錯誤:請求需使用 HTTP POST。",
- "api-error-noimageinfo": "上傳成功,但伺服器沒有給我們任何該檔案的資訊。",
+ "api-error-noimageinfo": "已成功上傳,但伺服器未回應任何該檔案的資訊。",
"api-error-nomodule": "內部錯誤:缺少上傳模組集。",
"api-error-ok-but-empty": "內部錯誤:伺服器沒有回應。",
"api-error-overwrite": "不允許覆蓋已存在的檔案。",
"api-error-stashfailed": "內部錯誤:伺服器儲存暫存檔案失敗。",
"api-error-publishfailed": "內部錯誤:伺服器發佈暫存檔案失敗。",
- "api-error-stasherror": "上傳檔案至儲存庫時發生錯誤。",
+ "api-error-stasherror": "上傳檔案至儲藏庫時發生錯誤。",
+ "api-error-stashedfilenotfound": "嘗試從儲藏庫上傳檔案時查無該檔案。",
+ "api-error-stashpathinvalid": "應該存在儲藏檔案的路徑無效。",
+ "api-error-stashfilestorage": "儲存檔案至儲藏庫時發生錯誤。",
+ "api-error-stashzerolength": "伺服器無法儲藏該檔案,因為該檔案大小為 0。",
+ "api-error-stashnotloggedin": "您必須登入以儲存檔案於上傳儲藏庫。",
+ "api-error-stashwrongowner": "您嘗試在儲藏庫存取的檔案不屬於您的。",
+ "api-error-stashnosuchfilekey": "您嘗試在儲藏庫存取的檔案金鑰不存在。",
"api-error-timeout": "伺服器沒有在預期的時間內回應。",
"api-error-unclassified": "發生不明錯誤。",
"api-error-unknown-code": "不明錯誤:\"$1\"。",
@@ -3135,17 +3241,17 @@
"limitreport-cputime-value": "$1 秒",
"limitreport-walltime": "實際使用時間",
"limitreport-walltime-value": "$1 秒",
- "limitreport-ppvisitednodes": "預處理機訪問節點次數",
+ "limitreport-ppvisitednodes": "預處理器已訪問節點計數",
"limitreport-ppgeneratednodes": "預處理器產生節點次數",
"limitreport-postexpandincludesize": "展開後的引用大小",
"limitreport-postexpandincludesize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
- "limitreport-templateargumentsize": "樣版參數大小",
+ "limitreport-templateargumentsize": "模板參數大小",
"limitreport-templateargumentsize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
"limitreport-expansiondepth": "最高展開深度",
"limitreport-expensivefunctioncount": "高消耗解析器函數次數",
- "expandtemplates": "展開樣版",
- "expand_templates_intro": "本特殊頁面會將文字中的樣版展開,可以包含支援的解析器語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,絕大部分在雙括號中的內容都會被展開。",
- "expand_templates_title": "上下文標題,用於 {{FULLPAGENAME}} 等:",
+ "expandtemplates": "展開模板",
+ "expand_templates_intro": "本特殊頁面會將文字中的模板展開,可以包含支援的解析器語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,絕大部分在雙括號中的內容都會被展開。",
+ "expand_templates_title": "文章標題,供 {{FULLPAGENAME}} 等使用:",
"expand_templates_input": "輸入文字:",
"expand_templates_output": "結果",
"expand_templates_xml_output": "XML 輸出",
@@ -3156,6 +3262,8 @@
"expand_templates_generate_xml": "顯示 XML 解析樹",
"expand_templates_generate_rawhtml": "顯示原始 HTML",
"expand_templates_preview": "預覽",
+ "expand_templates_preview_fail_html": "<em>因連線階段的資料遺失且 {{SITENAME}} 已開啟顯示原始 HTML 功能,為預防 JavaScript 攻擊已隱藏預覽內容。</em>\n\n<strong>若您目前的預覽動作並無非法,請再試一次。</strong>\n若仍然無效,請嘗試[[Special:UserLogout|登出]]並再登入一次。",
+ "expand_templates_preview_fail_html_anon": "<em>因您尚未登入且 {{SITENAME}} 已開啟顯示原始 HTML 功能,為預防 JavaScript 攻擊已隱藏預覽內容。</em>\n\n<strong>若您目前的預覽動作並無非法,請[[Special:UserLogin|登入]]後再試一次。</strong>",
"pagelanguage": "頁面語言選擇器",
"pagelang-name": "頁面",
"pagelang-language": "語言",
@@ -3164,10 +3272,60 @@
"right-pagelang": "更改頁面語言",
"action-pagelang": "更改頁面語言",
"log-name-pagelang": "更改語言日誌",
- "log-description-pagelang": "這是頁面語言更改日誌。",
+ "log-description-pagelang": "此頁為頁面語言的變更日誌。",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|已更改}}頁面 $3 的語言從 $4 到 $5。",
- "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您的安裝程序應包含以下外觀。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。 您可以將下列行貼上至 <code>LocalSettings.php</code> 來開啟所有目前已經安裝的外觀:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
- "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
+ "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您的安裝程序應包含以下外觀。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。 您可以將下列行貼上至 <code>LocalSettings.php</code> 來開啟所有目前已經安裝的外觀:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
+ "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code dir=\"ltr\">skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (已開啟)",
- "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''已停用''')"
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''已停用''')",
+ "mediastatistics": "媒體統計資訊",
+ "mediastatistics-summary": "已上傳檔案類型的統計資訊,此報表僅統計檔案的最新版本,不包含舊的或已刪除的版本。",
+ "mediastatistics-nbytes": "{{PLURAL:$1|$1 位元組|$1 位元組}} ($2; $3%)",
+ "mediastatistics-table-mimetype": "MIME 類型",
+ "mediastatistics-table-extensions": "可用的副檔名",
+ "mediastatistics-table-count": "檔案數量",
+ "mediastatistics-table-totalbytes": "大小總計",
+ "mediastatistics-header-unknown": "不明",
+ "mediastatistics-header-bitmap": "點陣圖",
+ "mediastatistics-header-drawing": "繪圖 (向量圖)",
+ "mediastatistics-header-audio": "音訊",
+ "mediastatistics-header-video": "影片",
+ "mediastatistics-header-multimedia": "豐富多媒體",
+ "mediastatistics-header-office": "辦公",
+ "mediastatistics-header-text": "純文字",
+ "mediastatistics-header-executable": "可執行",
+ "mediastatistics-header-archive": "已壓縮格式",
+ "json-warn-trailing-comma": "已移除 $1 個 JSON 結尾的{{PLURAL:$1|逗號}}",
+ "json-error-unknown": "JSON 發生問題。錯誤:$1",
+ "json-error-depth": "已超出堆疊深度限制",
+ "json-error-state-mismatch": "無效或格式不正確的 JSON",
+ "json-error-ctrl-char": "控制字元錯誤,可能被不正確編碼",
+ "json-error-syntax": "語法錯誤",
+ "json-error-utf8": "格式不正確的 UTF-8 字元,可能被不正確編碼",
+ "json-error-recursion": "在資料中有一個或多個的遞迴參照值被編碼",
+ "json-error-inf-or-nan": "在資料中有一個或多個的 NAN 或 INF 值被編碼",
+ "json-error-unsupported-type": "下列的資料型態無法被編碼",
+ "headline-anchor-title": "連結至此章節",
+ "special-characters-group-latin": "拉丁文",
+ "special-characters-group-latinextended": "拉丁文擴充",
+ "special-characters-group-ipa": "國際音標",
+ "special-characters-group-symbols": "符號",
+ "special-characters-group-greek": "希臘文",
+ "special-characters-group-cyrillic": "斯拉夫文",
+ "special-characters-group-arabic": "阿拉伯文",
+ "special-characters-group-arabicextended": "阿拉伯文擴充",
+ "special-characters-group-persian": "波斯文",
+ "special-characters-group-hebrew": "希伯來文",
+ "special-characters-group-bangla": "孟加拉文",
+ "special-characters-group-tamil": "坦米爾文",
+ "special-characters-group-telugu": "特拉古文",
+ "special-characters-group-sinhala": "僧伽羅文",
+ "special-characters-group-gujarati": "古吉拉特文",
+ "special-characters-group-devanagari": "梵文",
+ "special-characters-group-thai": "泰文",
+ "special-characters-group-lao": "寮文",
+ "special-characters-group-khmer": "高棉文",
+ "special-characters-title-endash": "短破折號",
+ "special-characters-title-emdash": "長破折號",
+ "special-characters-title-minus": "減號"
}
diff --git a/languages/i18n/zu.json b/languages/i18n/zu.json
index cd4ce7a7..93887d32 100644
--- a/languages/i18n/zu.json
+++ b/languages/i18n/zu.json
@@ -1,257 +1,256 @@
{
- "@metadata": {
- "authors": [
- "Jose77 (on zu.wikipedia.org)",
- "Joziboy (on zu.wikipedia.org)",
- "Rosinah3",
- "Vogone",
- "לערי ריינהארט"
- ]
- },
- "underline-always": "Njalo",
- "sunday": "iSonto",
- "monday": "uMsombuluko",
- "tuesday": "uLwesibili",
- "wednesday": "uLwesithathu",
- "thursday": "uLwesine",
- "friday": "uLwesihlanu",
- "saturday": "uMgqibelo",
- "january": "Umasingana",
- "february": "uNhlolanja",
- "march": "uMbasa",
- "april": "uNdasa",
- "may_long": "uNhlaba",
- "june": "uNhlangulana",
- "july": "uNtulikazi",
- "august": "uNcwaba",
- "september": "uMandulo",
- "october": "uMfumfu",
- "november": "uLwezi",
- "december": "uZibandlela",
- "january-gen": "uJanuwali",
- "february-gen": "uFebruwari",
- "march-gen": "uMashi",
- "april-gen": "u-Apreli",
- "may-gen": "uMeyi",
- "june-gen": "uJuni",
- "july-gen": "uJulayi",
- "august-gen": "u-Agasti",
- "september-gen": "uSepthemba",
- "october-gen": "u-Okthoba",
- "november-gen": "uNovemba",
- "december-gen": "uDisemba",
- "may": "uMeyi",
- "cancel": "Nqamula",
- "moredotdotdot": "Amanye...",
- "mypage": "Ikhasi lami",
- "mytalk": "Ingxoxo yami",
- "navigation": "Ukuqondiswa kwemikhumbi",
- "qbfind": "Thola",
- "qbbrowse": "Cinga",
- "qbedit": "Ukuhlela",
- "qbpageoptions": "Leli khasi",
- "qbmyoptions": "Amakhasi ami",
- "errorpagetitle": "Icala",
- "help": "Usizo",
- "search": "Sesha",
- "searchbutton": "Sesha",
- "go": "Hamba",
- "searcharticle": "Hamba",
- "history_short": "Umlando",
- "printableversion": "Inguqulo eshicilelekayo",
- "print": "Shicilela",
- "edit": "Hlela",
- "editthispage": "Hlela leli khasi",
- "delete": "Sula",
- "deletethispage": "Sula lelikhasi",
- "protect": "Londoloza",
- "protectthispage": "Londoloza lelikhasi",
- "newpage": "Ikhasi elisha",
- "talkpage": "Xoxa ngalelikhasi",
- "personaltools": "Amathuluzi kamsebenzisi",
- "talk": "Ingxoxo",
- "toolbox": "Amathuluzi",
- "otherlanguages": "Ngezilimi ezinahlukene",
- "redirectpagesub": "Ikhasi likakuphambukisa",
- "protectedpage": "Ikhasi elilondolozwa",
- "jumpto": "Eqa e:",
- "jumptonavigation": "Ukuqondiswa kwemikhumbi",
- "jumptosearch": "Sesha",
- "currentevents": "Izehlakalo ezimanje",
- "currentevents-url": "Project:Izehlakalo ezimanje",
- "edithelp": "Usizo ngokuhlela",
- "mainpage": "Ikhasi Elikhulu",
- "mainpage-description": "Ikhasi Elikhulu",
- "portal": "Umnyango wamgwamanda",
- "portal-url": "Project:Umnyango wamgwamanda",
- "ok": "Kulungile",
- "youhavenewmessagesmulti": "Uyanemilayezo emisha e $1",
- "editsection": "hlela",
- "toc": "Isiqikili",
- "showtoc": "Bukisa",
- "hidetoc": "Fihla",
- "nstab-main": "Umlayezo",
- "nstab-user": "Ikhasi lomsebenzisi",
- "nstab-special": "Kukhulu",
- "nstab-image": "Ifayela",
- "nstab-mediawiki": "Umlayezo",
- "nstab-help": "Usizo",
- "nstab-category": "Uhlobo",
- "error": "Icala",
- "databaseerror": "Idatabheyisi linecala",
- "internalerror": "Icala lingaphakathi",
- "welcomeuser": "Umbingelelo, $1!",
- "welcomecreation-msg": "Ikhawundi lakho liyadalwa. Musa ukukhohlwa ukuguqula [[Special:Preferences|amakhethelo]] a-Wikipedia wakho.",
- "yourname": "Isiga",
- "yourpassword": "Izwi elingenangozi",
- "yourpasswordagain": "Bhala izwi elingenangozi lakho kabusha",
- "remembermypassword": "Ngikhumbule (for a maximum of $1 {{PLURAL:$1|day|days}})",
- "login": "Ngena",
- "nav-login-createaccount": "Ngena / Dala ikhawundi",
- "userlogin": "Ngena / Dala ikhawundi",
- "logout": "Phuma",
- "userlogout": "Phuma",
- "notloggedin": "Awungenile",
- "nologin": "Awunekhawundi? '''$1'''.",
- "nologinlink": "Dala ikhawundi",
- "createaccount": "Dala ikhawundi",
- "gotaccountlink": "Ngena",
- "loginsuccesstitle": "Ubengena",
- "nosuchuser": "Akukho umsebenzisi unegama \"$1\". Hlola umbhalo wakho, noma dala ikhawundi elisha.",
- "nosuchusershort": "Akukho umsebenzisi unegama \"$1\". Hlola umbhalo wakho.",
- "emailconfirmlink": "Qinisekisa ikheli likagesi lakho",
- "loginlanguagelabel": "Ulimi: $1",
- "changepassword": "Guqula izwi elingenangozi",
- "newpassword": "Izwi elingenangozi elisha:",
- "italic_sample": "Amazwi ama-italiki",
- "italic_tip": "Amazwi ama-italiki",
- "hr_tip": "Umugqa uhleliwe (use sparingly)",
- "summary": "Isifinyezo:",
- "minoredit": "Lokho ngukuhlela okuncane",
- "watchthis": "Bukela ngalelikhasi",
- "savearticle": "Ukonga ikhasi",
- "preview": "Isibonakalo",
- "showpreview": "Bukisa isibonakalo",
- "showdiff": "Bukisa izinguquko",
- "missingcommenttext": "Ake ubhale uvo ngaphansi.",
- "loginreqtitle": "Lidinga ukuthi uyangena",
- "loginreqlink": "Ngena",
- "noarticletext": "Akukho umbhalo kuleli khasi manje. Unga [[Special:Search/Allmessages|cinga leli bizo lekhasi]] emakhasini amanye noma unga [{{fullurl:{{FULLPAGENAME}}|action=edit}} hlela leli khasi].",
- "yourtext": "Umbhalo wakho",
- "yourdiff": "Izinguquko",
- "next": "Kulandela",
- "last": "Amagcino",
- "histfirst": "lokuqala",
- "histlast": "ligcinileyo",
- "rev-delundel": "bukisa/fihla",
- "searchresults": "Umphumela wokusesha",
- "preferences": "Amakhethelo",
- "mypreferences": "Amakhethelo ami",
- "saveprefs": "Ukonga",
- "searchresultshead": "Sesha",
- "timezonelegend": "Isifunda sasikhathi",
- "localtime": "Isikhathi siyalapha",
- "username": "Isiga:",
- "yourrealname": "Igama eliqinisileyo",
- "yourlanguage": "Ulimi:",
- "email": "Iposi likagesi",
- "recentchanges": "Izinguquko ezimanje",
- "hide": "Fihla",
- "show": "Bukisa",
- "recentchangeslinked": "Izinguquko ezilandiweyo",
- "recentchangeslinked-feed": "Izinguquko ezilandiweyo",
- "recentchangeslinked-toolbox": "Izinguquko ezilandiweyo",
- "upload": "Layisha ifayili",
- "uploadbtn": "Layisha ifayili",
- "filesource": "Umthombo:",
- "ignorewarnings": "Duba imiyalo",
- "upload-success-subj": "Ukulayisha okuchumile",
- "nolicense": "Ubekhetha lutho",
- "file-anchor-link": "Ifayela",
- "nolinkstoimage": "Akukho amakhasi akhomba kuleli fayela.",
- "randompage": "Ikhasi elingaphandle kokucabanga",
- "statistics-header-users": "Ukwaziswa wamsebenzisi",
- "shortpages": "Amakhasi amafishane",
- "longpages": "Amakhasi amade",
- "newpages": "Amakhasi amasha",
- "newpages-username": "Isiga:",
- "move": "Sunduza",
- "movethispage": "Thuthisa leli khasi",
- "specialloguserlabel": "Umsebenzisi:",
- "allinnamespace": "Onke amakhasi ($1 namespace)",
- "allpagessubmit": "Hamba",
- "emailuser": "Thumela umlayezo lo msebenzisi",
- "noemailtitle": "Akukho ikheli likaposi",
- "emailsubject": "Indaba",
- "emailmessage": "Umlayezo",
- "emailsend": "Thuma",
- "emailsent": "Umlayezo uthumwa",
- "watchlist": "Uhlelo ubukelwa wami",
- "watch": "Bukela",
- "unwatch": "Mus'ukubukela",
- "notanarticle": "Akulona ikhasi elinakho okuqukethwe",
- "deletepage": "Sula ikhasi",
- "confirm": "Qinisekisa",
- "exblank": "ikhasi elize",
- "protectcomment": "Isizathu",
- "restriction-edit": "Ukuhlela",
- "restriction-move": "Sunduza",
- "undeletecomment": "Khuluma:",
- "contributions": "Amanikelo amsebenzisi",
- "mycontris": "Amanikelo ami",
- "nolinkshere": "Akukho amakhasi ukuthi balayela lapha '''[[:$1]]'''.",
- "isredirect": "Ikhasi silayela",
- "blockip": "Vimbela lo msebenzisi",
- "ipbexpiry": "Ukuphela",
- "ipbreason": "Isizathu",
- "ipbsubmit": "Vimbela lo msebenzisi",
- "ipusubmit": "Qeda isivimbelo lo msebenzisi",
- "createaccountblock": "Ukudala kwekhawundi kuvimbelwa",
- "databasenotlocked": "Idatabheyisi alikhiyiwi.",
- "move-page-legend": "Thuthisa ikhasi",
- "movearticle": "Thuthisa ikhasi",
- "movepagebtn": "Thuthisa ikhasi",
- "movereason": "Isizathu",
- "delete_and_move": "Sula futhi sunduza",
- "delete_and_move_confirm": "Yebo, sula ikhasi",
- "export-submit": "Thekelisa",
- "allmessagesname": "Igama",
- "thumbnail-more": "Khulisa",
- "filemissing": "Ifayili lilahlekile",
- "import-interwiki-submit": "Ngenisa",
- "tooltip-search": "Phenya",
- "tooltip-search-fulltext": "\nPhenya amakhasi ukuze uthole lombhalo",
- "tooltip-p-logo": "vakashela ikhasi elikhulu",
- "others": "Abanye",
- "markaspatrolleddiff": "Dweba ukuthi lelikhasi liyagadwa",
- "markaspatrolledtext": "Dweba ukuthi lelikhasi liyagadwa",
- "markedaspatrolled": "Dweba ukuthi lelikhasi liyagadwa",
- "newimages": "Uhlelo lwamafayela amasha",
- "noimages": "Awuboni lutho.",
- "ilsubmit": "Sesha",
- "metadata-expand": "Bukisa imininingwane yonke",
- "metadata-collapse": "Fihla imininingwane yonke",
- "exif-orientation": "Ukuma okumaqondana nempumalanga",
- "exif-artist": "Umbhali",
- "exif-sharpness": "Ububukhali",
- "exif-orientation-1": "Kuphelele",
- "exif-meteringmode-5": "Umhlobiso",
- "exif-lightsource-4": "Umbani",
- "exif-lightsource-11": "Umthunzi",
- "exif-sensingmethod-1": "Akucaci",
- "exif-scenecapturetype-0": "Izinga",
- "exif-scenecapturetype-1": "Umfanekiso wesizwe",
- "exif-scenecapturetype-2": "Umfanekiso womuntu",
- "exif-scenecapturetype-3": "Imboniso ebusuku",
- "exif-contrast-0": "Kuphelele",
- "exif-contrast-1": "Kuntofontofo",
- "exif-contrast-2": "Kulukhuni",
- "exif-saturation-0": "Kuphelele",
- "exif-sharpness-0": "Kuphelele",
- "exif-sharpness-1": "Kuntofontofo",
- "exif-sharpness-2": "Kulukhuni",
- "confirmemail": "Qinisekisa ikheli likagesi",
- "confirmemail_loggedin": "Ikheli likagesi lakho liqinisekiswa.",
- "recreate": "Dala kabusha",
- "confirm_purge_button": "Kulungile"
+ "@metadata": {
+ "authors": [
+ "Jose77 (on zu.wikipedia.org)",
+ "Joziboy (on zu.wikipedia.org)",
+ "Rosinah3",
+ "Vogone",
+ "לערי ריינהארט"
+ ]
+ },
+ "underline-always": "Njalo",
+ "sunday": "iSonto",
+ "monday": "uMsombuluko",
+ "tuesday": "uLwesibili",
+ "wednesday": "uLwesithathu",
+ "thursday": "uLwesine",
+ "friday": "uLwesihlanu",
+ "saturday": "uMgqibelo",
+ "january": "Umasingana",
+ "february": "uNhlolanja",
+ "march": "uMbasa",
+ "april": "uNdasa",
+ "may_long": "uNhlaba",
+ "june": "uNhlangulana",
+ "july": "uNtulikazi",
+ "august": "uNcwaba",
+ "september": "uMandulo",
+ "october": "uMfumfu",
+ "november": "uLwezi",
+ "december": "uZibandlela",
+ "january-gen": "uJanuwali",
+ "february-gen": "uFebruwari",
+ "march-gen": "uMashi",
+ "april-gen": "u-Apreli",
+ "may-gen": "uMeyi",
+ "june-gen": "uJuni",
+ "july-gen": "uJulayi",
+ "august-gen": "u-Agasti",
+ "september-gen": "uSepthemba",
+ "october-gen": "u-Okthoba",
+ "november-gen": "uNovemba",
+ "december-gen": "uDisemba",
+ "may": "uMeyi",
+ "cancel": "Nqamula",
+ "moredotdotdot": "Amanye...",
+ "mypage": "Ikhasi lami",
+ "mytalk": "Ingxoxo yami",
+ "navigation": "Ukuqondiswa kwemikhumbi",
+ "qbfind": "Thola",
+ "qbbrowse": "Cinga",
+ "qbedit": "Ukuhlela",
+ "qbpageoptions": "Leli khasi",
+ "qbmyoptions": "Amakhasi ami",
+ "errorpagetitle": "Icala",
+ "help": "Usizo",
+ "search": "Sesha",
+ "searchbutton": "Sesha",
+ "go": "Hamba",
+ "searcharticle": "Hamba",
+ "history_short": "Umlando",
+ "printableversion": "Inguqulo eshicilelekayo",
+ "print": "Shicilela",
+ "edit": "Hlela",
+ "editthispage": "Hlela leli khasi",
+ "delete": "Sula",
+ "deletethispage": "Sula lelikhasi",
+ "protect": "Londoloza",
+ "protectthispage": "Londoloza lelikhasi",
+ "newpage": "Ikhasi elisha",
+ "talkpage": "Xoxa ngalelikhasi",
+ "personaltools": "Amathuluzi kamsebenzisi",
+ "talk": "Ingxoxo",
+ "toolbox": "Amathuluzi",
+ "otherlanguages": "Ngezilimi ezinahlukene",
+ "redirectpagesub": "Ikhasi likakuphambukisa",
+ "protectedpage": "Ikhasi elilondolozwa",
+ "jumpto": "Eqa e:",
+ "jumptonavigation": "Ukuqondiswa kwemikhumbi",
+ "jumptosearch": "Sesha",
+ "currentevents": "Izehlakalo ezimanje",
+ "currentevents-url": "Project:Izehlakalo ezimanje",
+ "edithelp": "Usizo ngokuhlela",
+ "mainpage": "Ikhasi Elikhulu",
+ "mainpage-description": "Ikhasi Elikhulu",
+ "portal": "Umnyango wamgwamanda",
+ "portal-url": "Project:Umnyango wamgwamanda",
+ "ok": "Kulungile",
+ "youhavenewmessagesmulti": "Uyanemilayezo emisha e $1",
+ "editsection": "hlela",
+ "toc": "Isiqikili",
+ "showtoc": "Bukisa",
+ "hidetoc": "Fihla",
+ "nstab-main": "Umlayezo",
+ "nstab-user": "Ikhasi lomsebenzisi",
+ "nstab-special": "Kukhulu",
+ "nstab-image": "Ifayela",
+ "nstab-mediawiki": "Umlayezo",
+ "nstab-help": "Usizo",
+ "nstab-category": "Uhlobo",
+ "error": "Icala",
+ "databaseerror": "Idatabheyisi linecala",
+ "internalerror": "Icala lingaphakathi",
+ "welcomeuser": "Umbingelelo, $1!",
+ "welcomecreation-msg": "Ikhawundi lakho liyadalwa. Musa ukukhohlwa ukuguqula [[Special:Preferences|amakhethelo]] a-Wikipedia wakho.",
+ "yourname": "Isiga",
+ "yourpassword": "Izwi elingenangozi",
+ "yourpasswordagain": "Bhala izwi elingenangozi lakho kabusha",
+ "remembermypassword": "Ngikhumbule (for a maximum of $1 {{PLURAL:$1|day|days}})",
+ "login": "Ngena",
+ "nav-login-createaccount": "Ngena / Dala ikhawundi",
+ "userlogin": "Ngena / Dala ikhawundi",
+ "logout": "Phuma",
+ "userlogout": "Phuma",
+ "notloggedin": "Awungenile",
+ "nologin": "Awunekhawundi? '''$1'''.",
+ "nologinlink": "Dala ikhawundi",
+ "createaccount": "Dala ikhawundi",
+ "gotaccountlink": "Ngena",
+ "loginsuccesstitle": "Ubengena",
+ "nosuchuser": "Akukho umsebenzisi unegama \"$1\". Hlola umbhalo wakho, noma dala ikhawundi elisha.",
+ "nosuchusershort": "Akukho umsebenzisi unegama \"$1\". Hlola umbhalo wakho.",
+ "emailconfirmlink": "Qinisekisa ikheli likagesi lakho",
+ "loginlanguagelabel": "Ulimi: $1",
+ "changepassword": "Guqula izwi elingenangozi",
+ "newpassword": "Izwi elingenangozi elisha:",
+ "italic_sample": "Amazwi ama-italiki",
+ "italic_tip": "Amazwi ama-italiki",
+ "hr_tip": "Umugqa uhleliwe (use sparingly)",
+ "summary": "Isifinyezo:",
+ "minoredit": "Lokho ngukuhlela okuncane",
+ "watchthis": "Bukela ngalelikhasi",
+ "savearticle": "Ukonga ikhasi",
+ "preview": "Isibonakalo",
+ "showpreview": "Bukisa isibonakalo",
+ "showdiff": "Bukisa izinguquko",
+ "missingcommenttext": "Ake ubhale uvo ngaphansi.",
+ "loginreqtitle": "Lidinga ukuthi uyangena",
+ "loginreqlink": "Ngena",
+ "noarticletext": "Akukho umbhalo kuleli khasi manje. Unga [[Special:Search/Allmessages|cinga leli bizo lekhasi]] emakhasini amanye noma unga [{{fullurl:{{FULLPAGENAME}}|action=edit}} hlela leli khasi].",
+ "yourtext": "Umbhalo wakho",
+ "yourdiff": "Izinguquko",
+ "next": "Kulandela",
+ "last": "Amagcino",
+ "histfirst": "lokuqala",
+ "histlast": "ligcinileyo",
+ "rev-delundel": "bukisa/fihla",
+ "searchresults": "Umphumela wokusesha",
+ "preferences": "Amakhethelo",
+ "mypreferences": "Amakhethelo ami",
+ "saveprefs": "Ukonga",
+ "searchresultshead": "Sesha",
+ "timezonelegend": "Isifunda sasikhathi",
+ "localtime": "Isikhathi siyalapha",
+ "username": "Isiga:",
+ "yourrealname": "Igama eliqinisileyo",
+ "yourlanguage": "Ulimi:",
+ "email": "Iposi likagesi",
+ "recentchanges": "Izinguquko ezimanje",
+ "hide": "Fihla",
+ "show": "Bukisa",
+ "recentchangeslinked": "Izinguquko ezilandiweyo",
+ "recentchangeslinked-feed": "Izinguquko ezilandiweyo",
+ "recentchangeslinked-toolbox": "Izinguquko ezilandiweyo",
+ "upload": "Layisha ifayili",
+ "uploadbtn": "Layisha ifayili",
+ "filesource": "Umthombo:",
+ "ignorewarnings": "Duba imiyalo",
+ "upload-success-subj": "Ukulayisha okuchumile",
+ "nolicense": "Ubekhetha lutho",
+ "file-anchor-link": "Ifayela",
+ "nolinkstoimage": "Akukho amakhasi akhomba kuleli fayela.",
+ "randompage": "Ikhasi elingaphandle kokucabanga",
+ "statistics-header-users": "Ukwaziswa wamsebenzisi",
+ "shortpages": "Amakhasi amafishane",
+ "longpages": "Amakhasi amade",
+ "newpages": "Amakhasi amasha",
+ "newpages-username": "Isiga:",
+ "move": "Sunduza",
+ "movethispage": "Thuthisa leli khasi",
+ "specialloguserlabel": "Umsebenzisi:",
+ "allinnamespace": "Onke amakhasi ($1 namespace)",
+ "allpagessubmit": "Hamba",
+ "emailuser": "Thumela umlayezo lo msebenzisi",
+ "noemailtitle": "Akukho ikheli likaposi",
+ "emailsubject": "Indaba",
+ "emailmessage": "Umlayezo",
+ "emailsend": "Thuma",
+ "emailsent": "Umlayezo uthumwa",
+ "watchlist": "Uhlelo ubukelwa wami",
+ "watch": "Bukela",
+ "unwatch": "Mus'ukubukela",
+ "notanarticle": "Akulona ikhasi elinakho okuqukethwe",
+ "deletepage": "Sula ikhasi",
+ "confirm": "Qinisekisa",
+ "protectcomment": "Isizathu",
+ "restriction-edit": "Ukuhlela",
+ "restriction-move": "Sunduza",
+ "undeletecomment": "Khuluma:",
+ "contributions": "Amanikelo amsebenzisi",
+ "mycontris": "Amanikelo ami",
+ "nolinkshere": "Akukho amakhasi ukuthi balayela lapha '''[[:$1]]'''.",
+ "isredirect": "Ikhasi silayela",
+ "blockip": "Vimbela lo msebenzisi",
+ "ipbexpiry": "Ukuphela",
+ "ipbreason": "Isizathu",
+ "ipbsubmit": "Vimbela lo msebenzisi",
+ "ipusubmit": "Qeda isivimbelo lo msebenzisi",
+ "createaccountblock": "Ukudala kwekhawundi kuvimbelwa",
+ "databasenotlocked": "Idatabheyisi alikhiyiwi.",
+ "move-page-legend": "Thuthisa ikhasi",
+ "movearticle": "Thuthisa ikhasi",
+ "movepagebtn": "Thuthisa ikhasi",
+ "movereason": "Isizathu",
+ "delete_and_move": "Sula futhi sunduza",
+ "delete_and_move_confirm": "Yebo, sula ikhasi",
+ "export-submit": "Thekelisa",
+ "allmessagesname": "Igama",
+ "thumbnail-more": "Khulisa",
+ "filemissing": "Ifayili lilahlekile",
+ "import-interwiki-submit": "Ngenisa",
+ "tooltip-search": "Phenya",
+ "tooltip-search-fulltext": "\nPhenya amakhasi ukuze uthole lombhalo",
+ "tooltip-p-logo": "vakashela ikhasi elikhulu",
+ "others": "Abanye",
+ "markaspatrolleddiff": "Dweba ukuthi lelikhasi liyagadwa",
+ "markaspatrolledtext": "Dweba ukuthi lelikhasi liyagadwa",
+ "markedaspatrolled": "Dweba ukuthi lelikhasi liyagadwa",
+ "newimages": "Uhlelo lwamafayela amasha",
+ "noimages": "Awuboni lutho.",
+ "ilsubmit": "Sesha",
+ "metadata-expand": "Bukisa imininingwane yonke",
+ "metadata-collapse": "Fihla imininingwane yonke",
+ "exif-orientation": "Ukuma okumaqondana nempumalanga",
+ "exif-artist": "Umbhali",
+ "exif-sharpness": "Ububukhali",
+ "exif-orientation-1": "Kuphelele",
+ "exif-meteringmode-5": "Umhlobiso",
+ "exif-lightsource-4": "Umbani",
+ "exif-lightsource-11": "Umthunzi",
+ "exif-sensingmethod-1": "Akucaci",
+ "exif-scenecapturetype-0": "Izinga",
+ "exif-scenecapturetype-1": "Umfanekiso wesizwe",
+ "exif-scenecapturetype-2": "Umfanekiso womuntu",
+ "exif-scenecapturetype-3": "Imboniso ebusuku",
+ "exif-contrast-0": "Kuphelele",
+ "exif-contrast-1": "Kuntofontofo",
+ "exif-contrast-2": "Kulukhuni",
+ "exif-saturation-0": "Kuphelele",
+ "exif-sharpness-0": "Kuphelele",
+ "exif-sharpness-1": "Kuntofontofo",
+ "exif-sharpness-2": "Kulukhuni",
+ "confirmemail": "Qinisekisa ikheli likagesi",
+ "confirmemail_loggedin": "Ikheli likagesi lakho liqinisekiswa.",
+ "recreate": "Dala kabusha",
+ "confirm_purge_button": "Kulungile"
}
diff --git a/languages/messages/MessagesAce.php b/languages/messages/MessagesAce.php
index 755a249f..40627a25 100644
--- a/languages/messages/MessagesAce.php
+++ b/languages/messages/MessagesAce.php
@@ -61,6 +61,10 @@ $namespaceAliases = array(
'Gambar_Pembicaraan' => NS_FILE_TALK,
);
+$magicWords = array(
+ 'redirect' => array( '0', '#PUPINAH', '#ALIH', '#REDIRECT' ),
+);
+
$specialPageAliases = array(
'Activeusers' => array( 'UreuëngNguiUdép' ),
'Allmessages' => array( 'BanDumPeusan' ),
@@ -68,35 +72,34 @@ $specialPageAliases = array(
'Allpages' => array( 'DapeutaLaman' ),
'Ancientpages' => array( 'TeunuléhAwai' ),
'Badtitle' => array( 'NanBrôk' ),
- 'Blankpage' => array( 'LamaSoh' ),
+ 'Blankpage' => array( 'LamanSoh' ),
'Block' => array( 'TheunUreuëngNgui' ),
- 'Booksources' => array( 'Ne_kitab' ),
- 'BrokenRedirects' => array( 'Peuninah_reuloh' ),
- 'Categories' => array( 'Dapeuta_kawan' ),
- 'ChangePassword' => array( 'Gantoe_lageuem_rahsia' ),
- 'Confirmemail' => array( 'Peunyo_surat-e' ),
- 'Contributions' => array( 'Peuneugot_ureueng_nguy' ),
- 'CreateAccount' => array( 'Peugot_nan' ),
- 'Deadendpages' => array( 'On_mate' ),
- 'DeletedContributions' => array( 'Peuneugot_nyang_geusampoh' ),
- 'DoubleRedirects' => array( 'Peuninah_ganda' ),
- 'Emailuser' => array( 'Surat-e_ureueng_nguy' ),
- 'Export' => array( 'Peuteubiet' ),
- 'Fewestrevisions' => array( 'Neuubah_paleng_dit' ),
- 'FileDuplicateSearch' => array( 'Mita_beureukaih_saban' ),
- 'Filepath' => array( 'Neuduek_beureukaih' ),
- 'Import' => array( 'Peutamong' ),
- 'Invalidateemail' => array( 'Peubateue_peusah_surat-e' ),
- 'BlockList' => array( 'Dapeuta_neutheun' ),
- 'LinkSearch' => array( 'Mita_hubong' ),
- 'Listadmins' => array( 'Dapeuta_ureueng_uroh' ),
- 'Listbots' => array( 'Dapeuta_bot' ),
- 'Listfiles' => array( 'Dapeuta_beureukaih' ),
- 'Listgrouprights' => array( 'Dapeuta_khut_(hak)_kawan' ),
- 'Listredirects' => array( 'Dapeuta_peuninah' ),
- 'Listusers' => array( 'Dapeuta_ureueng_nguy' ),
- 'Lockdb' => array( 'Gunci_basis_data' ),
- 'Log' => array( 'Ceunatat' ),
+ 'Booksources' => array( 'NèKitab' ),
+ 'BrokenRedirects' => array( 'PeuninahReuloh' ),
+ 'Categories' => array( 'DapeutaKawan' ),
+ 'ChangePassword' => array( 'GantoëLageuëmRahsia' ),
+ 'Confirmemail' => array( 'PeunyoSurat-e' ),
+ 'Contributions' => array( 'BeuneuriUreuëngNgui' ),
+ 'CreateAccount' => array( 'PeugötNan' ),
+ 'Deadendpages' => array( 'ÔnMaté' ),
+ 'DeletedContributions' => array( 'BeuneuriNyangGeusampôh' ),
+ 'DoubleRedirects' => array( 'PeuninahGanda' ),
+ 'Emailuser' => array( 'Surat-eUreuëngNgui' ),
+ 'Export' => array( 'Peuteubiët' ),
+ 'Fewestrevisions' => array( 'NeuubahPaléngDit' ),
+ 'FileDuplicateSearch' => array( 'MitaBeureukaihSaban' ),
+ 'Filepath' => array( 'NeuduëkBeureukaih' ),
+ 'Import' => array( 'Peutamöng' ),
+ 'Invalidateemail' => array( 'PeubateuëPeusahSurat-e' ),
+ 'BlockList' => array( 'DapeutaTeuneuheun' ),
+ 'LinkSearch' => array( 'MitaPeunawôt' ),
+ 'Listadmins' => array( 'DapeutaUreuëngUrôh' ),
+ 'Listbots' => array( 'DapeutaBot' ),
+ 'Listfiles' => array( 'DapeutaBeureukaih' ),
+ 'Listgrouprights' => array( 'DapeutaHakKawan' ),
+ 'Listredirects' => array( 'DapeutaPeuninah' ),
+ 'Listusers' => array( 'DapeutaUreuëngNgui' ),
+ 'Lockdb' => array( 'GunciBasisData' ),
'Lonelypages' => array( 'On_hana_soe_po' ),
'Longpages' => array( 'On_panyang' ),
'MergeHistory' => array( 'Riwayat_peusapat' ),
diff --git a/languages/messages/MessagesAf.php b/languages/messages/MessagesAf.php
index 84eb9224..7482841a 100644
--- a/languages/messages/MessagesAf.php
+++ b/languages/messages/MessagesAf.php
@@ -55,7 +55,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'AANTALAKTIEWEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'AANTALWYSIGINGS', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'AANTALKEERGESIEN', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'BLADSYNAAM', 'PAGENAME' ),
'namespace' => array( '1', 'NAAMSPASIE', 'NAMESPACE' ),
'talkspace' => array( '1', 'BESPREKINGSBLADSY', 'TALKSPACE' ),
@@ -96,14 +95,18 @@ $magicWords = array(
$specialPageAliases = array(
'Activeusers' => array( 'AktieweGebruikers' ),
'Allmessages' => array( 'Stelselboodskappe', 'Alle_stelselboodskappe', 'Allestelselboodskappe', 'Boodskappe' ),
+ 'AllMyUploads' => array( 'AlMyOplaaie', 'AlMyLêers' ),
'Allpages' => array( 'Alle_bladsye', 'Allebladsye' ),
'Ancientpages' => array( 'OuBladsye' ),
+ 'Badtitle' => array( 'Slegtetitel' ),
'Blankpage' => array( 'SkoonBladsy' ),
'Block' => array( 'BlokIP' ),
'Booksources' => array( 'Boekbronne' ),
'BrokenRedirects' => array( 'Stukkende_aansture', 'Stukkendeaansture' ),
'Categories' => array( 'Kategorieë' ),
+ 'ChangeEmail' => array( 'VeranderEpos' ),
'ChangePassword' => array( 'HerstelWagwoord' ),
+ 'ComparePages' => array( 'VergelykBladsye' ),
'Confirmemail' => array( 'Bevestig_e-posadres', 'Bevestige-posadres', 'Bevestig_eposadres', 'Bevestigeposadres' ),
'Contributions' => array( 'Bydraes', 'Gebruikersbydraes' ),
'CreateAccount' => array( 'SkepRekening', 'MaakGebruiker' ),
@@ -117,6 +120,7 @@ $specialPageAliases = array(
'Filepath' => array( 'Lêerpad' ),
'Import' => array( 'Importeer' ),
'Invalidateemail' => array( 'OngeldigeEpos' ),
+ 'JavaScriptTest' => array( 'JavaScriptToets' ),
'BlockList' => array( 'IPBlokLys' ),
'LinkSearch' => array( 'SkakelSoektog' ),
'Listadmins' => array( 'LysAdministrateurs' ),
@@ -133,7 +137,8 @@ $specialPageAliases = array(
'MIMEsearch' => array( 'MIME-soek', 'MIMEsoek', 'MIME_soek' ),
'Mostcategories' => array( 'MeesteKategorieë' ),
'Mostimages' => array( 'MeesteBeelde' ),
- 'Mostlinked' => array( 'MeeteGeskakel' ),
+ 'Mostinterwikis' => array( 'MeesteInterwikis' ),
+ 'Mostlinked' => array( 'MeesteGeskakel' ),
'Mostlinkedcategories' => array( 'MeesGeskakeldeKategorieë' ),
'Mostlinkedtemplates' => array( 'MeesGeskakeldeSjablone' ),
'Mostrevisions' => array( 'MeesteWysigings' ),
@@ -142,8 +147,10 @@ $specialPageAliases = array(
'MyLanguage' => array( 'MyTaal' ),
'Mypage' => array( 'MyBladsy' ),
'Mytalk' => array( 'Mybespreking', 'Mybesprekings' ),
+ 'Myuploads' => array( 'MyOplaaie', 'MyLêers' ),
'Newimages' => array( 'Nuwe_beelde', 'Nuwebeelde', 'Nuwe_lêers', 'Nuwelêers' ),
'Newpages' => array( 'Nuwe_bladsye', 'Nuwebladsye' ),
+ 'PasswordReset' => array( 'WagwoordHerstel' ),
'Popularpages' => array( 'PopulêreBladsye' ),
'Preferences' => array( 'Voorkeure' ),
'Prefixindex' => array( 'VoorvoegselIndeks' ),
@@ -153,6 +160,7 @@ $specialPageAliases = array(
'Randomredirect' => array( 'Lukrake_aanstuur', 'Lukrakeaanstuur' ),
'Recentchanges' => array( 'Onlangse_wysigings', 'Onlangsewysigings' ),
'Recentchangeslinked' => array( 'OnlangseVeranderingsMetSkakels', 'VerwanteVeranderings' ),
+ 'Redirect' => array( 'Aanstuur' ),
'Revisiondelete' => array( 'WeergaweSkrap' ),
'Search' => array( 'Soek' ),
'Shortpages' => array( 'KortBladsye' ),
@@ -177,7 +185,7 @@ $specialPageAliases = array(
'Version' => array( 'Weergawe' ),
'Wantedcategories' => array( 'GesoekteKategorieë' ),
'Wantedfiles' => array( 'GesoekteLêers' ),
- 'Wantedpages' => array( 'GesoekdeBladsye', 'GebreekteSkakels' ),
+ 'Wantedpages' => array( 'GesoekteBladsye', 'GebreekteSkakels' ),
'Wantedtemplates' => array( 'GesoekteSjablone' ),
'Watchlist' => array( 'Dophoulys' ),
'Whatlinkshere' => array( 'Skakels_hierheen', 'Skakelshierheen' ),
diff --git a/languages/messages/MessagesAng.php b/languages/messages/MessagesAng.php
index aa1d9d17..2f86c78e 100644
--- a/languages/messages/MessagesAng.php
+++ b/languages/messages/MessagesAng.php
@@ -11,8 +11,11 @@
$namespaceNames = array(
NS_SPECIAL => 'Syndrig',
NS_TALK => 'Mōtung',
- NS_FILE => 'Biliþ',
- NS_FILE_TALK => 'Biliþmōtung',
+ NS_USER => 'Brūcend',
+ NS_USER_TALK => 'Brūcendmōtung',
+ NS_FILE => 'Ymele',
+ NS_FILE_TALK => 'Ymelmōtung',
+ NS_MEDIAWIKI_TALK => 'MediaWikimōtung',
NS_TEMPLATE => 'Bysen',
NS_TEMPLATE_TALK => 'Bysenmōtung',
NS_HELP => 'Help',
@@ -26,8 +29,9 @@ $namespaceAliases = array(
'Motung' => NS_TALK,
'Brucend' => NS_USER,
'Brucendmotung' => NS_USER_TALK,
- 'Biliþgesprec' => NS_FILE_TALK,
+ 'Biliþ' => NS_FILE,
'Biliþmotung' => NS_FILE_TALK,
+ 'Biliþmōtung' => NS_FILE_TALK,
'Bysengesprec' => NS_TEMPLATE_TALK,
'Bysenmotung' => NS_TEMPLATE_TALK,
'Helpgesprec' => NS_HELP_TALK,
diff --git a/languages/messages/MessagesAr.php b/languages/messages/MessagesAr.php
index 3872f1cc..78179900 100644
--- a/languages/messages/MessagesAr.php
+++ b/languages/messages/MessagesAr.php
@@ -171,7 +171,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'عدد_المستخدمين', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'عدد_المستخدمين_النشطين', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'عدد_التعديلات', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'عدد_المشاهدات', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
'pagenamee' => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
'namespace' => array( '1', 'نطاق', 'NAMESPACE' ),
@@ -186,6 +185,7 @@ $magicWords = array(
'subpagename' => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
'subpagenamee' => array( '1', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
'rootpagename' => array( '1', 'جذر_اسم_الصفحة', 'ROOTPAGENAME' ),
+ 'rootpagenamee' => array( '1', 'عنوان_جذر_الصفحة', 'ROOTPAGENAMEE' ),
'basepagename' => array( '1', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
'basepagenamee' => array( '1', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
'talkpagename' => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
@@ -261,6 +261,7 @@ $magicWords = array(
'raw' => array( '0', 'خام:', 'RAW:' ),
'displaytitle' => array( '1', 'عرض_العنوان', 'DISPLAYTITLE' ),
'rawsuffix' => array( '1', 'أر', 'آر', 'R' ),
+ 'nocommafysuffix' => array( '0', 'لا_سيب', 'NOSEP' ),
'newsectionlink' => array( '1', '__وصلة_قسم_جديد__', '__NEWSECTIONLINK__' ),
'nonewsectionlink' => array( '1', 'لا_وصلة_قسم_جديد__', '__NONEWSECTIONLINK__' ),
'currentversion' => array( '1', 'نسخة_حالية', 'CURRENTVERSION' ),
@@ -289,12 +290,15 @@ $magicWords = array(
'numberingroup' => array( '1', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
'staticredirect' => array( '1', '__تحويلة_إستاتيكية__', '__تحويلة_ساكنة__', '__STATICREDIRECT__' ),
'protectionlevel' => array( '1', 'مستوى_الحماية', 'PROTECTIONLEVEL' ),
+ 'cascadingsources' => array( '1', 'مصادر_مضمنة', 'CASCADINGSOURCES' ),
'formatdate' => array( '0', 'تهيئة_التاريخ', 'تهيئة_تاريخ', 'formatdate', 'dateformat' ),
'url_path' => array( '0', 'مسار', 'PATH' ),
'url_wiki' => array( '0', 'ويكي', 'WIKI' ),
'url_query' => array( '0', 'استعلام', 'QUERY' ),
'defaultsort_noerror' => array( '0', 'لاخطأ', 'noerror' ),
'defaultsort_noreplace' => array( '0', 'لاتستبدل', 'noreplace' ),
+ 'displaytitle_noerror' => array( '0', 'لا_خطأ', 'noerror' ),
+ 'displaytitle_noreplace' => array( '0', 'لااستبدال', 'noreplace' ),
'pagesincategory_all' => array( '0', 'كل', 'all' ),
'pagesincategory_pages' => array( '0', 'صفحات', 'pages' ),
'pagesincategory_subcats' => array( '0', 'تصنيفات_فرعية', 'subcats' ),
@@ -306,6 +310,7 @@ $specialPageAliases = array(
'Allmessages' => array( 'كل_الرسائل' ),
'AllMyUploads' => array( 'كل_ملفاتي' ),
'Allpages' => array( 'كل_الصفحات' ),
+ 'ApiHelp' => array( 'مساعدة_إيه_بي_آي' ),
'Ancientpages' => array( 'صفحات_قديمة' ),
'Badtitle' => array( 'عنوان_سيئ' ),
'Blankpage' => array( 'صفحة_فارغة' ),
@@ -321,6 +326,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'إنشاء_حساب' ),
'Deadendpages' => array( 'صفحات_نهاية_مسدودة' ),
'DeletedContributions' => array( 'مساهمات_محذوفة' ),
+ 'Diff' => array( 'فرق' ),
'DoubleRedirects' => array( 'تحويلات_مزدوجة' ),
'EditWatchlist' => array( 'تعديل_قائمة_المراقبة' ),
'Emailuser' => array( 'مراسلة_المستخدم' ),
@@ -339,11 +345,13 @@ $specialPageAliases = array(
'Listfiles' => array( 'عرض_الملفات', 'قائمة_الملفات', 'قائمة_الصور' ),
'Listgrouprights' => array( 'عرض_صلاحيات_المجموعات', 'صلاحيات_مجموعات_المستخدمين' ),
'Listredirects' => array( 'عرض_التحويلات' ),
+ 'ListDuplicatedFiles' => array( 'عرض_الملفات_المكررة', 'عرض_تكرار_الملفات' ),
'Listusers' => array( 'عرض_المستخدمين', 'قائمة_المستخدمين' ),
'Lockdb' => array( 'غلق_قب' ),
'Log' => array( 'سجل', 'سجلات' ),
'Lonelypages' => array( 'صفحات_وحيدة', 'صفحات_يتيمة' ),
'Longpages' => array( 'صفحات_طويلة' ),
+ 'MediaStatistics' => array( 'إحصاءات_الميديا' ),
'MergeHistory' => array( 'دمج_التاريخ' ),
'MIMEsearch' => array( 'بحث_ميم' ),
'Mostcategories' => array( 'الأكثر_تصنيفا' ),
@@ -355,13 +363,14 @@ $specialPageAliases = array(
'Mostrevisions' => array( 'الأكثر_تعديلا' ),
'Movepage' => array( 'نقل_صفحة' ),
'Mycontributions' => array( 'مساهماتي' ),
+ 'MyLanguage' => array( 'لغتي' ),
'Mypage' => array( 'صفحتي' ),
'Mytalk' => array( 'نقاشي' ),
- 'MyLanguage' => array( 'لغتي' ),
'Myuploads' => array( 'رفوعاتي' ),
'Newimages' => array( 'ملفات_جديدة', 'صور_جديدة' ),
'Newpages' => array( 'صفحات_جديدة' ),
'PagesWithProp' => array( 'صفحات_بخاصية' ),
+ 'PageLanguage' => array( 'لغة_الصفحة' ),
'PasswordReset' => array( 'إعادة_ضبط_كلمة_السر' ),
'PermanentLink' => array( 'وصلة_دائمة', 'رابط_دائم' ),
'Popularpages' => array( 'صفحات_مشهورة' ),
@@ -377,11 +386,13 @@ $specialPageAliases = array(
'Redirect' => array( 'تحويل' ),
'ResetTokens' => array( 'إعادة_ضبط_المفاتيح' ),
'Revisiondelete' => array( 'حذف_مراجعة', 'حذف_نسخة' ),
+ 'RunJobs' => array( 'تشغيل_الوظائف' ),
'Search' => array( 'بحث' ),
'Shortpages' => array( 'صفحات_قصيرة' ),
'Specialpages' => array( 'صفحات_خاصة' ),
'Statistics' => array( 'إحصاءات' ),
'Tags' => array( 'وسوم' ),
+ 'TrackingCategories' => array( 'تصنيفات_التتبع' ),
'Unblock' => array( 'رفع_منع' ),
'Uncategorizedcategories' => array( 'تصنيفات_غير_مصنفة' ),
'Uncategorizedimages' => array( 'ملفات_غير_مصنفة', 'صور_غير_مصنفة' ),
diff --git a/languages/messages/MessagesArc.php b/languages/messages/MessagesArc.php
index 2247b369..f88650b3 100644
--- a/languages/messages/MessagesArc.php
+++ b/languages/messages/MessagesArc.php
@@ -13,7 +13,6 @@ $rtl = true;
$namespaceNames = array(
NS_MEDIA => 'ܡܝܕܝܐ',
NS_SPECIAL => 'ܕܝܠܢܝܐ',
- NS_MAIN => '',
NS_TALK => 'ܡܡܠܠܐ',
NS_USER => 'ܡܦܠܚܢܐ',
NS_USER_TALK => 'ܡܡܠܠܐ_ܕܡܦܠܚܢܐ',
diff --git a/languages/messages/MessagesArz.php b/languages/messages/MessagesArz.php
index 09fd319b..4d0b3db6 100644
--- a/languages/messages/MessagesArz.php
+++ b/languages/messages/MessagesArz.php
@@ -40,27 +40,35 @@ $namespaceAliases = array(
$specialPageAliases = array(
'Activeusers' => array( 'يوزرات_نشطا' ),
'Allmessages' => array( 'كل_الرسايل' ),
+ 'AllMyUploads' => array( 'كل_مرفوعاتى', 'كل_فايلاتى' ),
'Allpages' => array( 'كل_الصفح' ),
'Ancientpages' => array( 'صفح_قديمه' ),
+ 'Badtitle' => array( 'عنوان_وحش' ),
'Blankpage' => array( 'صفحه_فارضيه' ),
'Block' => array( 'بلوك', 'بلوك_IP', 'بلوك_يوزر' ),
'Booksources' => array( 'مصادر_كتاب' ),
'BrokenRedirects' => array( 'تحويلات_مكسوره' ),
'Categories' => array( 'تصانيف' ),
+ 'ChangeEmail' => array( 'تغيير_الميل' ),
'ChangePassword' => array( 'تغيير_الپاسوورد', 'ظبط_الپاسوورد' ),
+ 'ComparePages' => array( 'مقارنه_الصفحات' ),
'Confirmemail' => array( 'تأكيد_الايميل' ),
'Contributions' => array( 'مساهمات' ),
'CreateAccount' => array( 'ابتدى_حساب' ),
'Deadendpages' => array( 'صفح_نهايه_مسدوده' ),
'DeletedContributions' => array( 'مساهمات_ممسوحه' ),
+ 'Diff' => array( 'فرق' ),
'DoubleRedirects' => array( 'تحويلات_دوبل' ),
+ 'EditWatchlist' => array( 'تغيير_قايمه_المراقبه' ),
'Emailuser' => array( 'ابعت_ايميل_لليوزر' ),
+ 'ExpandTemplates' => array( 'فرد-القوالب' ),
'Export' => array( 'تصدير' ),
'Fewestrevisions' => array( 'اقل_مراجعات' ),
'FileDuplicateSearch' => array( 'تدوير_فايل_متكرر' ),
'Filepath' => array( 'مسار_ملف' ),
'Import' => array( 'استوراد' ),
'Invalidateemail' => array( 'تعطيل_الايميل' ),
+ 'JavaScriptTest' => array( 'تجربه_جافا_سكريبت' ),
'BlockList' => array( 'ليستة_البلوك', 'بيّن_البلوك', 'ليستة_بلوك_IP' ),
'LinkSearch' => array( 'تدوير_اللينكات' ),
'Listadmins' => array( 'عرض_الاداريين' ),
@@ -77,6 +85,7 @@ $specialPageAliases = array(
'MIMEsearch' => array( 'تدوير_MIME' ),
'Mostcategories' => array( 'اكتر_تصانيف' ),
'Mostimages' => array( 'اكتر_فايلات_معمول_ليها_لينك', 'اكتر_فايلات', 'اكتر_صور' ),
+ 'Mostinterwikis' => array( 'اكتر_إنترويكى' ),
'Mostlinked' => array( 'اكتر_صفح_معمول_ليها_لينك' ),
'Mostlinkedcategories' => array( 'اكتر_تصانيف_معمول_ليها_لينك', 'اكتر_تصانيف_مستعمله' ),
'Mostlinkedtemplates' => array( 'اكتر_قوالب_معمول_ليها_لينك', 'اكتر_قوالب_مستعمله' ),
@@ -86,23 +95,33 @@ $specialPageAliases = array(
'MyLanguage' => array( 'اللغة_بتاعتى' ),
'Mypage' => array( 'صفحتى' ),
'Mytalk' => array( 'مناقشتى' ),
+ 'Myuploads' => array( 'مرفوعاتى', 'فايلاتى' ),
'Newimages' => array( 'فايلات_جديده', 'صور_جديده' ),
'Newpages' => array( 'صفح_جديده' ),
+ 'PagesWithProp' => array( 'صفحات_بخاصيه' ),
+ 'PageLanguage' => array( 'لغه_الصفحه' ),
+ 'PasswordReset' => array( 'ضبط_الباسوورد' ),
+ 'PermanentLink' => array( 'وصله_دايمه' ),
'Popularpages' => array( 'صفح_مشهوره' ),
'Preferences' => array( 'تفضيلات' ),
'Prefixindex' => array( 'فهرس_بدايه' ),
'Protectedpages' => array( 'صفح_محميه' ),
'Protectedtitles' => array( 'عناوين_محميه' ),
'Randompage' => array( 'عشوائى', 'صفحه_عشوائيه' ),
+ 'RandomInCategory' => array( 'عشوائى_جوه_تصنيف' ),
'Randomredirect' => array( 'تحويله_عشوائيه' ),
'Recentchanges' => array( 'اخر_تعديلات' ),
'Recentchangeslinked' => array( 'اجدد_التغييرات_اللى_معمول_ليها_لينك', 'تغييرات_مرتبطه' ),
+ 'Redirect' => array( 'تحويل' ),
+ 'ResetTokens' => array( 'ضبط_المفاتيح' ),
'Revisiondelete' => array( 'مسح_نسخه' ),
+ 'RunJobs' => array( 'تشغيل_الوظايف' ),
'Search' => array( 'تدوير' ),
'Shortpages' => array( 'صفح_قصيره' ),
'Specialpages' => array( 'صفح_مخصوصه' ),
'Statistics' => array( 'احصائيات' ),
'Tags' => array( 'وسوم' ),
+ 'TrackingCategories' => array( 'تصنيفات_التتبع' ),
'Unblock' => array( 'رفع_منع' ),
'Uncategorizedcategories' => array( 'تصانيف_مش_متصنفه' ),
'Uncategorizedimages' => array( 'فايلات_مش_متصنفه', 'صور_مش_متصنفه' ),
@@ -115,6 +134,7 @@ $specialPageAliases = array(
'Unusedtemplates' => array( 'قوالب_مش_مستعمله' ),
'Unwatchedpages' => array( 'صفح_مش_متراقبه' ),
'Upload' => array( 'رفع' ),
+ 'UploadStash' => array( 'رفع_مخفى' ),
'Userlogin' => array( 'دخول_اليوزر' ),
'Userlogout' => array( 'خروج_اليوزر' ),
'Userrights' => array( 'حقوق_اليوزر', 'ترقية_سيسوپ', 'ترقية_بوت' ),
@@ -130,11 +150,11 @@ $specialPageAliases = array(
$magicWords = array(
'redirect' => array( '0', '#تحويل', '#REDIRECT' ),
- 'notoc' => array( '0', '__لافهرس__', '__NOTOC__' ),
- 'nogallery' => array( '0', '__لامعرض__', '__NOGALLERY__' ),
+ 'notoc' => array( '0', '__من_غير_فهرس__', '__لافهرس__', '__NOTOC__' ),
+ 'nogallery' => array( '0', '__من_غير_معرض__', '__لامعرض__', '__NOGALLERY__' ),
'forcetoc' => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
'toc' => array( '0', '__فهرس__', '__TOC__' ),
- 'noeditsection' => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
+ 'noeditsection' => array( '0', '__من_غير_تحريرقسم__', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
'currentmonth' => array( '1', 'شهر_حالى', 'شهر_حالي2', 'شهر_حالي', 'CURRENTMONTH', 'CURRENTMONTH2' ),
'currentmonth1' => array( '1', 'شهر_حالي1', 'CURRENTMONTH1' ),
'currentmonthname' => array( '1', 'اسم_الشهر_الحالى', 'اسم_الشهر_الحالي', 'CURRENTMONTHNAME' ),
@@ -145,7 +165,7 @@ $magicWords = array(
'currentdayname' => array( '1', 'اسم_اليوم_الحالى', 'اسم_اليوم_الحالي', 'CURRENTDAYNAME' ),
'currentyear' => array( '1', 'عام_حالى', 'عام_حالي', 'CURRENTYEAR' ),
'currenttime' => array( '1', 'وقت_حالى', 'وقت_حالي', 'CURRENTTIME' ),
- 'currenthour' => array( '1', 'ساعة_حالية', 'CURRENTHOUR' ),
+ 'currenthour' => array( '1', 'ساعه_حاليه', 'ساعة_حالية', 'CURRENTHOUR' ),
'localmonth' => array( '1', 'شهر_محلى', 'شهر_محلي2', 'شهر_محلي', 'LOCALMONTH', 'LOCALMONTH2' ),
'localmonth1' => array( '1', 'شهر_محلى1', 'شهر_محلي1', 'LOCALMONTH1' ),
'localmonthname' => array( '1', 'اسم_الشهر_المحلى', 'اسم_شهر_محلى', 'اسم_الشهر_المحلي', 'اسم_شهر_محلي', 'LOCALMONTHNAME' ),
@@ -156,36 +176,38 @@ $magicWords = array(
'localdayname' => array( '1', 'اسم_اليوم_المحلى', 'اسم_يوم_محلى', 'اسم_اليوم_المحلي', 'اسم_يوم_محلي', 'LOCALDAYNAME' ),
'localyear' => array( '1', 'عام_محلى', 'عام_محلي', 'LOCALYEAR' ),
'localtime' => array( '1', 'وقت_محلى', 'وقت_محلي', 'LOCALTIME' ),
- 'localhour' => array( '1', 'ساعة_محلية', 'LOCALHOUR' ),
+ 'localhour' => array( '1', 'ساعه_محليه', 'ساعة_محلية', 'LOCALHOUR' ),
'numberofpages' => array( '1', 'عدد_الصفحات', 'NUMBEROFPAGES' ),
'numberofarticles' => array( '1', 'عدد_المقالات', 'NUMBEROFARTICLES' ),
'numberoffiles' => array( '1', 'عدد_الملفات', 'NUMBEROFFILES' ),
- 'numberofusers' => array( '1', 'عدد_المستخدمين', 'NUMBEROFUSERS' ),
- 'numberofactiveusers' => array( '1', 'عدد_المستخدمين_النشطين', 'NUMBEROFACTIVEUSERS' ),
+ 'numberofusers' => array( '1', 'عدد_اليوزرات', 'عدد_المستخدمين', 'NUMBEROFUSERS' ),
+ 'numberofactiveusers' => array( '1', 'عدد_اليوزرات_النشطين', 'عدد_المستخدمين_النشطين', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'عدد_التعديلات', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'عدد_المشاهدات', 'NUMBEROFVIEWS' ),
- 'pagename' => array( '1', 'اسم_الصفحة', 'PAGENAME' ),
- 'pagenamee' => array( '1', 'عنوان_الصفحة', 'PAGENAMEE' ),
+ 'pagename' => array( '1', 'اسم_الصفحه', 'اسم_الصفحة', 'PAGENAME' ),
+ 'pagenamee' => array( '1', 'عنوان_الصفحه', 'عنوان_الصفحة', 'PAGENAMEE' ),
'namespace' => array( '1', 'نطاق', 'NAMESPACE' ),
'namespacee' => array( '1', 'عنوان_نطاق', 'NAMESPACEE' ),
- 'talkspace' => array( '1', 'نطاق_النقاش', 'TALKSPACE' ),
- 'talkspacee' => array( '1', 'عنوان_النقاش', 'TALKSPACEE' ),
- 'subjectspace' => array( '1', 'نطاق_الموضوع', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
- 'subjectspacee' => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+ 'namespacenumber' => array( '1', 'عدد_نطاق', 'NAMESPACENUMBER' ),
+ 'talkspace' => array( '1', 'نطاق_المناقشه', 'نطاق_النقاش', 'TALKSPACE' ),
+ 'talkspacee' => array( '1', 'عنوان_المناقشه', 'عنوان_النقاش', 'TALKSPACEE' ),
+ 'subjectspace' => array( '1', 'نطاق_الموضوع', 'نطاق_المقاله', 'نطاق_المقالة', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+ 'subjectspacee' => array( '1', 'عنوان_نطاق_الموضوع', 'عنوان_نطاق_المقاله', 'عنوان_نطاق_المقالة', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
'fullpagename' => array( '1', 'اسم_الصفحة_الكامل', 'اسم_صفحة_كامل', 'اسم_كامل', 'FULLPAGENAME' ),
- 'fullpagenamee' => array( '1', 'عنوان_الصفحة_الكامل', 'عنوان_صفحة_كامل', 'عنوان_كامل', 'FULLPAGENAMEE' ),
- 'subpagename' => array( '1', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
- 'subpagenamee' => array( '1', 'عنوان_الصفحة_الفرعى', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
- 'basepagename' => array( '1', 'اسم_الصفحة_الأساسى', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
- 'basepagenamee' => array( '1', 'عنوان_الصفحة_الأساسى', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
- 'talkpagename' => array( '1', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
- 'talkpagenamee' => array( '1', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
- 'subjectpagename' => array( '1', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
- 'subjectpagenamee' => array( '1', 'عنوان_صفحة_الموضوع', 'عنوان_صفحة_المقالة', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
- 'msg' => array( '0', 'رسالة:', 'MSG:' ),
+ 'fullpagenamee' => array( '1', 'عنوان_الصفحه_الكامل', 'عنوان_صفحة_كامل', 'عنوان_كامل', 'عنوان_الصفحة_الكامل', 'FULLPAGENAMEE' ),
+ 'subpagename' => array( '1', 'اسم_الصفحه_الفرعي', 'اسم_الصفحة_الفرعي', 'SUBPAGENAME' ),
+ 'subpagenamee' => array( '1', 'عنوان_الصفحه_الفرعى', 'عنوان_الصفحه_الفرعي', 'عنوان_الصفحة_الفرعي', 'SUBPAGENAMEE' ),
+ 'rootpagename' => array( '1', 'جدر_اسم_الصفحه', 'جذر_اسم_الصفحة', 'ROOTPAGENAME' ),
+ 'rootpagenamee' => array( '1', 'عنوان_جدر_الصفحه', 'ROOTPAGENAMEE' ),
+ 'basepagename' => array( '1', 'اسم_الصفحه_الأساسى', 'اسم_الصفحة_الأساسي', 'BASEPAGENAME' ),
+ 'basepagenamee' => array( '1', 'عنوان_الصفحه_الأساسى', 'عنوان_الصفحة_الأساسي', 'BASEPAGENAMEE' ),
+ 'talkpagename' => array( '1', 'اسم_صفحه_المناقشه', 'اسم_صفحة_النقاش', 'TALKPAGENAME' ),
+ 'talkpagenamee' => array( '1', 'عنوان_صفحه_المناقشه', 'عنوان_صفحة_النقاش', 'TALKPAGENAMEE' ),
+ 'subjectpagename' => array( '1', 'اسم_صفحه_الموضوع', 'اسم_صفحه_المقاله', 'اسم_صفحة_الموضوع', 'اسم_صفحة_المقالة', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+ 'subjectpagenamee' => array( '1', 'عنوان_صفحه_الموضوع', 'عنوان_صفحه_المقاله', 'عنوان_صفحة_الموضوع', 'عنوان_صفحة_المقالة', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+ 'msg' => array( '0', 'رساله:', 'رسالة:', 'MSG:' ),
'subst' => array( '0', 'نسخ:', 'إحلال:', 'SUBST:' ),
'safesubst' => array( '0', 'نسخ_آمن:', 'SAFESUBST:' ),
- 'msgnw' => array( '0', 'مصدر:', 'مصدر_قالب:', 'رسالة_بدون_تهيئة:', 'MSGNW:' ),
+ 'msgnw' => array( '0', 'رسالة_من_غير_تهيئه:', 'رسالة_بدون_تهيئة:', 'MSGNW:' ),
'img_thumbnail' => array( '1', 'تصغير', 'مصغر', 'thumbnail', 'thumb' ),
'img_manualthumb' => array( '1', 'تصغير=$1', 'مصغر=$1', 'thumbnail=$1', 'thumb=$1' ),
'img_right' => array( '1', 'يمين', 'right' ),
@@ -194,11 +216,12 @@ $magicWords = array(
'img_width' => array( '1', '$1بك', '$1عن', '$1px' ),
'img_center' => array( '1', 'مركز', 'center', 'centre' ),
'img_framed' => array( '1', 'إطار', 'بإطار', 'framed', 'enframed', 'frame' ),
- 'img_frameless' => array( '1', 'لاإطار', 'frameless' ),
- 'img_page' => array( '1', 'صفحة=$1', 'صفحة $1', 'صفحة_$1', 'page=$1', 'page $1' ),
- 'img_upright' => array( '1', 'معدول', 'معدول=$1', 'معدول $1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ),
+ 'img_frameless' => array( '1', 'من_غير_اطار', 'لاإطار', 'frameless' ),
+ 'img_lang' => array( '1', 'لغه=$1', 'لغة=$1', 'lang=$1' ),
+ 'img_page' => array( '1', 'صفح=$1', 'صفحه_$1', 'صفحة=$1', 'صفحة_$1', 'page=$1', 'page $1' ),
+ 'img_upright' => array( '1', 'معدول', 'معدول=$1', 'معدول_$1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', 'حد', 'حدود', 'border' ),
- 'img_baseline' => array( '1', 'خط_أساسى', 'خط_أساسي', 'baseline' ),
+ 'img_baseline' => array( '1', 'خط_اساسى', 'خط_أساسي', 'baseline' ),
'img_sub' => array( '1', 'فرعى', 'فرعي', 'sub' ),
'img_super' => array( '1', 'سوبر', 'سب', 'super', 'sup' ),
'img_top' => array( '1', 'أعلى', 'top' ),
@@ -208,35 +231,41 @@ $magicWords = array(
'img_text_bottom' => array( '1', 'نص_أسفل', 'text-bottom' ),
'img_link' => array( '1', 'وصلة=$1', 'رابط=$1', 'link=$1' ),
'img_alt' => array( '1', 'بديل=$1', 'alt=$1' ),
+ 'img_class' => array( '1', 'رتبه=$1', 'رتبة=$1', 'class=$1' ),
'int' => array( '0', 'محتوى:', 'INT:' ),
'sitename' => array( '1', 'اسم_الموقع', 'اسم_موقع', 'SITENAME' ),
'ns' => array( '0', 'نط:', 'NS:' ),
'nse' => array( '0', 'نطم:', 'NSE:' ),
'localurl' => array( '0', 'مسار_محلى:', 'مسار_محلي:', 'LOCALURL:' ),
'localurle' => array( '0', 'عنوان_المسار_المحلى:', 'عنوان_المسار_المحلي:', 'LOCALURLE:' ),
+ 'articlepath' => array( '0', 'مسار_المقاله', 'مسار_المقالة', 'ARTICLEPATH' ),
+ 'pageid' => array( '0', 'رقم_صفحه', 'رقم_صفحة', 'PAGEID' ),
'server' => array( '0', 'خادم', 'SERVER' ),
'servername' => array( '0', 'اسم_الخادم', 'SERVERNAME' ),
'scriptpath' => array( '0', 'مسار_السكريبت', 'مسار_سكريبت', 'SCRIPTPATH' ),
'stylepath' => array( '0', 'مسار_الهيئة', 'STYLEPATH' ),
'grammar' => array( '0', 'قواعد_اللغة:', 'GRAMMAR:' ),
'gender' => array( '0', 'نوع:', 'GENDER:' ),
- 'notitleconvert' => array( '0', '__لاتحويل_عنوان__', '__لاتع__', '__NOTITLECONVERT__', '__NOTC__' ),
- 'nocontentconvert' => array( '0', '__لاتحويل_محتوى__', '__لاتم__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+ 'notitleconvert' => array( '0', '__من_غيرتحويل_عنوان__', '__لاتع__', '__لاتحويل_عنوان__', '__NOTITLECONVERT__', '__NOTC__' ),
+ 'nocontentconvert' => array( '0', '__من_غير_تحويل_محتوى__', '__لاتم__', '__لاتحويل_محتوى__', '__NOCONTENTCONVERT__', '__NOCC__' ),
'currentweek' => array( '1', 'أسبوع_حالى', 'أسبوع_حالي', 'CURRENTWEEK' ),
'currentdow' => array( '1', 'يوم_حالى_مأ', 'يوم_حالي_مأ', 'CURRENTDOW' ),
'localweek' => array( '1', 'أسبوع_محلى', 'أسبوع_محلي', 'LOCALWEEK' ),
'localdow' => array( '1', 'يوم_محلى_مأ', 'يوم_محلي_مأ', 'LOCALDOW' ),
- 'revisionid' => array( '1', 'رقم_المراجعة', 'REVISIONID' ),
- 'revisionday' => array( '1', 'يوم_المراجعة', 'REVISIONDAY' ),
- 'revisionday2' => array( '1', 'يوم_المراجعة2', 'REVISIONDAY2' ),
- 'revisionmonth' => array( '1', 'شهر_المراجعة', 'REVISIONMONTH' ),
- 'revisionmonth1' => array( '1', 'شهر_المراجعة1', 'REVISIONMONTH1' ),
- 'revisionyear' => array( '1', 'عام_المراجعة', 'REVISIONYEAR' ),
- 'revisiontimestamp' => array( '1', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ),
- 'revisionuser' => array( '1', 'مستخدم_المراجعة', 'REVISIONUSER' ),
+ 'revisionid' => array( '1', 'رقم_المراجعه', 'رقم_المراجعة', 'REVISIONID' ),
+ 'revisionday' => array( '1', 'يوم_المراجعه', 'يوم_المراجعة', 'REVISIONDAY' ),
+ 'revisionday2' => array( '1', 'يوم_المراجعه2', 'يوم_المراجعة2', 'REVISIONDAY2' ),
+ 'revisionmonth' => array( '1', 'شهر_المراجعه', 'شهر_المراجعة', 'REVISIONMONTH' ),
+ 'revisionmonth1' => array( '1', 'شهر_المراجعه1', 'شهر_المراجعة1', 'REVISIONMONTH1' ),
+ 'revisionyear' => array( '1', 'عام_المراجعه', 'عام_المراجعة', 'REVISIONYEAR' ),
+ 'revisiontimestamp' => array( '1', 'طابع_وقت_المراجعه', 'طابع_وقت_المراجعة', 'REVISIONTIMESTAMP' ),
+ 'revisionuser' => array( '1', 'مستخدم_المراجعه', 'مستخدم_المراجعة', 'REVISIONUSER' ),
+ 'revisionsize' => array( '1', 'حجم_المراجعه', 'حجم_المراجعة', 'REVISIONSIZE' ),
'plural' => array( '0', 'جمع:', 'PLURAL:' ),
'fullurl' => array( '0', 'عنوان_كامل:', 'FULLURL:' ),
'fullurle' => array( '0', 'مسار_كامل:', 'FULLURLE:' ),
+ 'canonicalurl' => array( '0', 'عنوان_قاعده:', 'عنوان_قاعدة:', 'CANONICALURL:' ),
+ 'canonicalurle' => array( '0', 'مسار_قاعده:', 'مسار_قاعدة:', 'CANONICALURLE:' ),
'lcfirst' => array( '0', 'عنوان_كبير:', 'LCFIRST:' ),
'ucfirst' => array( '0', 'عنوان_صغير:', 'UCFIRST:' ),
'lc' => array( '0', 'صغير:', 'LC:' ),
@@ -244,9 +273,10 @@ $magicWords = array(
'raw' => array( '0', 'خام:', 'RAW:' ),
'displaytitle' => array( '1', 'عرض_العنوان', 'DISPLAYTITLE' ),
'rawsuffix' => array( '1', 'أر', 'آر', 'R' ),
+ 'nocommafysuffix' => array( '0', 'من-غير_سيب', 'NOSEP' ),
'newsectionlink' => array( '1', '__وصلة_قسم_جديد__', '__NEWSECTIONLINK__' ),
- 'nonewsectionlink' => array( '1', '__لا_وصلة_قسم_جديد__', 'لا_وصلة_قسم_جديد__', '__NONEWSECTIONLINK__' ),
- 'currentversion' => array( '1', 'نسخة_حالية', 'CURRENTVERSION' ),
+ 'nonewsectionlink' => array( '1', '__من_غير_وصلة_قسم_جديد__', 'من_غير_وصلة_قسم_جديد__', 'لا_وصلة_قسم_جديد__', '__NONEWSECTIONLINK__' ),
+ 'currentversion' => array( '1', 'نسخه_حاليه', 'نسخة_حالية', 'CURRENTVERSION' ),
'urlencode' => array( '0', 'كود_المسار:', 'URLENCODE:' ),
'anchorencode' => array( '0', 'كود_الأنكور', 'ANCHORENCODE' ),
'currenttimestamp' => array( '1', 'طابع_الوقت_الحالي', 'CURRENTTIMESTAMP' ),
@@ -260,6 +290,7 @@ $magicWords = array(
'padleft' => array( '0', 'باد_يسار', 'PADLEFT' ),
'padright' => array( '0', 'باد_يمين', 'PADRIGHT' ),
'special' => array( '0', 'خاص', 'special' ),
+ 'speciale' => array( '0', 'عنوان_خاص', 'speciale' ),
'defaultsort' => array( '1', 'ترتيب_قياسى:', 'ترتيب_افتراضى:', 'مفتاح_ترتيب_قياسى:', 'مفتاح_ترتيب_افتراضى:', 'ترتيب_تصنيف_قياسى:', 'ترتيب_تصنيف_افتراضى:', 'ترتيب_قياسي:', 'ترتيب_افتراضي:', 'مفتاح_ترتيب_قياسي:', 'مفتاح_ترتيب_افتراضي:', 'ترتيب_تصنيف_قياسي:', 'ترتيب_تصنيف_افتراضي:', 'ترتيب_غيابي:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'مسار_الملف:', 'FILEPATH:' ),
'tag' => array( '0', 'وسم', 'tag' ),
@@ -268,13 +299,22 @@ $magicWords = array(
'pagesize' => array( '1', 'حجم_الصفحة', 'PAGESIZE' ),
'index' => array( '1', '__فهرسة__', '__INDEX__' ),
'noindex' => array( '1', '__لافهرسة__', '__NOINDEX__' ),
- 'numberingroup' => array( '1', 'عدد_فى_المجموعة', 'عدد_فى_مجموعة', 'عدد_في_المجموعة', 'عدد_في_مجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
- 'staticredirect' => array( '1', '__تحويلة_إستاتيكية__', '__تحويلة_ساكنة__', '__STATICREDIRECT__' ),
- 'protectionlevel' => array( '1', 'مستوى_الحماية', 'PROTECTIONLEVEL' ),
- 'formatdate' => array( '0', 'تهيئة_التاريخ', 'تهيئة_تاريخ', 'formatdate', 'dateformat' ),
+ 'numberingroup' => array( '1', 'عدد_فى_المجموعه', 'عدد_فى_مجموعه', 'عدد_في_المجموعه', 'عدد_في_مجموعة', 'عدد_في_المجموعة', 'NUMBERINGROUP', 'NUMINGROUP' ),
+ 'staticredirect' => array( '1', '__تحويله_إستاتيكيه__', '__تحويله_ساكنه__', '__تحويلة_إستاتيكية__', '__تحويلة_ساكنة__', '__STATICREDIRECT__' ),
+ 'protectionlevel' => array( '1', 'مستوى_الحمايه', 'مستوى_الحماية', 'PROTECTIONLEVEL' ),
+ 'cascadingsources' => array( '1', 'مصادر_متضمنه', 'CASCADINGSOURCES' ),
+ 'formatdate' => array( '0', 'تهيئه_التاريخ', 'تهيئه_تاريخ', 'تهيئة_التاريخ', 'تهيئة_تاريخ', 'formatdate', 'dateformat' ),
'url_path' => array( '0', 'مسار', 'PATH' ),
'url_wiki' => array( '0', 'ويكى', 'ويكي', 'WIKI' ),
'url_query' => array( '0', 'استعلام', 'QUERY' ),
+ 'defaultsort_noerror' => array( '0', 'من_غير_غلط', 'لاخطأ', 'noerror' ),
+ 'defaultsort_noreplace' => array( '0', 'ماتستبدلش', 'لاتستبدل', 'noreplace' ),
+ 'displaytitle_noerror' => array( '0', 'لا_غلطه', 'noerror' ),
+ 'displaytitle_noreplace' => array( '0', 'لا_استبدال', 'noreplace' ),
+ 'pagesincategory_all' => array( '0', 'كل', 'all' ),
+ 'pagesincategory_pages' => array( '0', 'صفحات', 'pages' ),
+ 'pagesincategory_subcats' => array( '0', 'تصنيفات_فرعيه', 'تصنيفات_فرعية', 'subcats' ),
+ 'pagesincategory_files' => array( '0', 'فايلات', 'ملفات', 'files' ),
);
// (bug 16469) Override Eastern Arabic numberals, use Western
diff --git a/languages/messages/MessagesAst.php b/languages/messages/MessagesAst.php
index 824242be..a584ba51 100644
--- a/languages/messages/MessagesAst.php
+++ b/languages/messages/MessagesAst.php
@@ -49,6 +49,7 @@ $namespaceAliases = array(
$specialPageAliases = array(
'Block' => array( 'Bloquiar', 'BloquiarIP', 'BloquiarUsuariu' ),
'Log' => array( 'Rexistru', 'Rexistros' ),
+ 'Recentchanges' => array( 'CambeosRecientes' ),
'Search' => array( 'Gueta' ),
'Statistics' => array( 'Estadístiques' ),
);
diff --git a/languages/messages/MessagesAv.php b/languages/messages/MessagesAv.php
index d3e51349..ea64271c 100644
--- a/languages/messages/MessagesAv.php
+++ b/languages/messages/MessagesAv.php
@@ -10,3 +10,104 @@
$fallback = 'ru';
+$specialPageAliases = array(
+ 'Activeusers' => array( 'ХІаракатчилъи_бугел_гІахьалчагІи' ),
+ 'Allmessages' => array( 'Системаялъулал_баян_кьеял' ),
+ 'AllMyUploads' => array( 'Киналго_дир_файлал' ),
+ 'Allpages' => array( 'Киналго_гьумерал' ),
+ 'Badtitle' => array( 'БукІине_бегьулареб_цІар' ),
+ 'Blankpage' => array( 'ЧІобогояб_гьумер' ),
+ 'Block' => array( 'Блокалада_лъезе' ),
+ 'Booksources' => array( 'ТІахьазул_иццал' ),
+ 'BrokenRedirects' => array( 'Рек-рекарал_цоги_бакІалде_руссинариял' ),
+ 'Categories' => array( 'Категориял' ),
+ 'ChangeEmail' => array( 'e-mail_хисизе', 'Почта_хисизе' ),
+ 'ChangePassword' => array( 'Балъгояб_рагІи_хисизе' ),
+ 'ComparePages' => array( 'Гьумеразул_дандекквей' ),
+ 'Confirmemail' => array( 'E-mail_битІухъ_гьаби', 'почта_битІухъ_гьаби' ),
+ 'Contributions' => array( 'Хазина' ),
+ 'CreateAccount' => array( 'Учёталъулаб_Хъвай-хъвагІай_гІуцІцІизе', 'ГІахьалчи_гІуцІцІизе', 'Регистрация_гьабизе' ),
+ 'Deadendpages' => array( 'Нух_къарал_гьумерал' ),
+ 'DeletedContributions' => array( 'Нахъе_гьабураб_хазина' ),
+ 'Diff' => array( 'Хиса-басиял' ),
+ 'DoubleRedirects' => array( 'КІицІулго_цоги_бакІалде_руссинариял' ),
+ 'EditWatchlist' => array( 'Халкквеялъул_сияхІ_хисизабизе' ),
+ 'Emailuser' => array( 'ГІахьалчиясухъе_кагъат', 'Кагъат_битІизе' ),
+ 'ExpandTemplates' => array( 'Шаблонал_кколе-кколелъуре_ккезари' ),
+ 'Export' => array( 'КъватІибе_битІи', 'ЧIехьей' ),
+ 'Fewestrevisions' => array( 'КъанагІат_хиса-баси_гьарулел' ),
+ 'FileDuplicateSearch' => array( 'Релъарал_файлал_хъирщи' ),
+ 'Filepath' => array( 'Файлалде_нух' ),
+ 'Import' => array( 'Импорт' ),
+ 'Invalidateemail' => array( 'Адрес_битІухъ_гьаби_нахъ_чІвазе' ),
+ 'JavaScriptTest' => array( 'JavaScript_хІалбихьи' ),
+ 'BlockList' => array( 'Блокалда_лъеялъул_сияхІ', 'Блокалда_лъеял' ),
+ 'LinkSearch' => array( 'Ссылкаби_хъирщи' ),
+ 'Listbots' => array( 'Ботазул_сияхІ' ),
+ 'Listfiles' => array( 'Файлазул_сияхІ', 'Суратазул_сияхІ' ),
+ 'Listgrouprights' => array( 'ГІахьалчагІазул_группабазул_ихтиярал', 'Группабазул_ихтияразул_сияхІ' ),
+ 'Listredirects' => array( 'Цоги_бакІалде_руссинабиязул_сияхІ' ),
+ 'ListDuplicatedFiles' => array( 'Релъарал_файлазул_сияхІ' ),
+ 'Listusers' => array( 'ГІахьалчагІазул_сияхІ' ),
+ 'Lockdb' => array( 'ХІБ_блокалда_лъезе', 'ХІужжабазул_база_блокалда_лъезе' ),
+ 'Log' => array( 'Журналал', 'Журнал' ),
+ 'Lonelypages' => array( 'БатІатІурал_гьумерал' ),
+ 'Longpages' => array( 'Халатал_гьумерал' ),
+ 'MergeHistory' => array( 'Тарихал_цо_гьари' ),
+ 'MIMEsearch' => array( 'MIME_ялдалъул_хъирщи' ),
+ 'Mostcategories' => array( 'Бищунго_категориял_цІикІкІарал' ),
+ 'Mostimages' => array( 'Бищунго_хІалтІизарулел_файлал' ),
+ 'Mostinterwikis' => array( 'Интервики-ссылкабазул_бищун_цІикІкІараб_къадар' ),
+ 'Mostlinked' => array( 'Бищунго_хІалтІизарулел_гьумерал' ),
+ 'Mostlinkedcategories' => array( 'Бищунго_хІалтІизарулел_категориял' ),
+ 'Mostlinkedtemplates' => array( 'Бищунго_хІалтІизарулел_шаблонал' ),
+ 'Mostrevisions' => array( 'Сверелазул_бищун_цІикІкІараб_къадар' ),
+ 'Movepage' => array( 'Гьумералда_цІар_хисизабизе', 'ЦІар_хисизаби', 'ЦІар_хисизе' ),
+ 'Mycontributions' => array( 'Дир_хазина' ),
+ 'MyLanguage' => array( 'Дир_мацІ' ),
+ 'Mypage' => array( 'Дир_гьумер' ),
+ 'Mytalk' => array( 'Дир_бахІс' ),
+ 'Myuploads' => array( 'Дица_жанире_цІарал_жал' ),
+ 'Newimages' => array( 'ЦІиял_файлал' ),
+ 'Newpages' => array( 'ЦІиял_гьумерал' ),
+ 'PasswordReset' => array( 'Сброс_пароля' ),
+ 'PermanentLink' => array( 'Даимаб_ссылка' ),
+ 'Popularpages' => array( 'Машгьурал_гьумерал' ),
+ 'Preferences' => array( 'Рекъезабиял' ),
+ 'Prefixindex' => array( 'ЦІаразул_бетІералде_бихьизаби' ),
+ 'Protectedpages' => array( 'ЦІунарал_гьумерал' ),
+ 'Protectedtitles' => array( 'ЦІунарал_цІарал' ),
+ 'Randompage' => array( 'Цебе_ккараб_гьумер', 'Цебе_ккараб' ),
+ 'Randomredirect' => array( 'Цебе_ккараб_цоги_бакІалде_руссинаби' ),
+ 'Recentchanges' => array( 'ЦІиял_хиса-басиял' ),
+ 'Recentchangeslinked' => array( 'Хурхинарурал_хиса-басиял' ),
+ 'Revisiondelete' => array( 'Хиса-баси_нахъе_бацІцІи' ),
+ 'Search' => array( 'Хъирщи' ),
+ 'Shortpages' => array( 'Къокъал_гьумерал' ),
+ 'Specialpages' => array( 'Хассал_гьумерал' ),
+ 'Statistics' => array( 'Статистика' ),
+ 'Tags' => array( 'ГІужал' ),
+ 'Unblock' => array( 'Блокалдаса_бахъи' ),
+ 'Uncategorizedcategories' => array( 'Категориял_гьечІел_категориял' ),
+ 'Uncategorizedimages' => array( 'Категориял_гьечІел_файлал' ),
+ 'Uncategorizedpages' => array( 'Категориял_гьечІел_гьумерал' ),
+ 'Uncategorizedtemplates' => array( 'Категориял_гьечІе_шаблонал' ),
+ 'Undelete' => array( 'ТІадбуссинабизе', 'ТІадбуссинаби' ),
+ 'Unlockdb' => array( 'ХІБ_блокалдаса_бахъи' ),
+ 'Unusedcategories' => array( 'ХІалтІизаруларел_категориял' ),
+ 'Unusedimages' => array( 'ХІалтІизаруларел_файлал' ),
+ 'Unusedtemplates' => array( 'ХІалтІизаруларел_шаблонал' ),
+ 'Upload' => array( 'Загрузка' ),
+ 'UploadStash' => array( 'Бахчараб_загрузка' ),
+ 'Userlogin' => array( 'Жаниве_лъугьин' ),
+ 'Userlogout' => array( 'Сеанс_лъугІи', 'КъватІиве_лъугьин' ),
+ 'Userrights' => array( 'Ихтиярал_рилълъинари' ),
+ 'Version' => array( 'Сверел', 'Версия' ),
+ 'Wantedcategories' => array( 'ХІажатал_категориял' ),
+ 'Wantedfiles' => array( 'ХІажатал_файлал' ),
+ 'Wantedpages' => array( 'ХІажатал_гьумерал' ),
+ 'Wantedtemplates' => array( 'ХІажатал_шаблонал' ),
+ 'Watchlist' => array( 'Халкквеялъул_сияхІ' ),
+ 'Whatlinkshere' => array( 'Ссылкаби_гьанире' ),
+ 'Withoutinterwiki' => array( 'Интервики_гьечІого' ),
+);
diff --git a/languages/messages/MessagesAz.php b/languages/messages/MessagesAz.php
index b218e3c7..23da7a31 100644
--- a/languages/messages/MessagesAz.php
+++ b/languages/messages/MessagesAz.php
@@ -10,7 +10,6 @@
$namespaceNames = array(
NS_SPECIAL => 'Xüsusi',
- NS_MAIN => '',
NS_TALK => 'Müzakirə',
NS_USER => 'İstifadəçi',
NS_USER_TALK => 'İstifadəçi_müzakirəsi',
diff --git a/languages/messages/MessagesAzb.php b/languages/messages/MessagesAzb.php
index 63c88a8b..74d3bb9a 100644
--- a/languages/messages/MessagesAzb.php
+++ b/languages/messages/MessagesAzb.php
@@ -14,7 +14,6 @@ $rtl = true;
$namespaceNames = array(
NS_MEDIA => 'مئدیا',
NS_SPECIAL => 'اؤزل',
- NS_MAIN => '',
NS_TALK => 'دانیشیق',
NS_USER => 'ایستیفاده‌چی',
NS_USER_TALK => 'ایستیفاده‌چی_دانیشیغی',
diff --git a/languages/messages/MessagesBe_tarask.php b/languages/messages/MessagesBe_tarask.php
index 6ff82208..5a2a7a07 100644
--- a/languages/messages/MessagesBe_tarask.php
+++ b/languages/messages/MessagesBe_tarask.php
@@ -130,7 +130,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'КОЛЬКАСЬЦЬ_УДЗЕЛЬНІКАЎ', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'КОЛЬКАСЬЦЬ_АКТЫЎНЫХ_УДЗЕЛЬНІКАЎ', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'КОЛЬКАСЬЦЬ_РЭДАГАВАНЬНЯЎ', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'КОЛЬКАСЬЦЬ_ПРАГЛЯДАЎ', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'НАЗВА_СТАРОНКІ', 'PAGENAME' ),
'pagenamee' => array( '1', 'НАЗВА_СТАРОНКІ_2', 'PAGENAMEE' ),
'namespace' => array( '1', 'ПРАСТОРА_НАЗВАЎ', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesBg.php b/languages/messages/MessagesBg.php
index 3fb3606a..afe608d8 100644
--- a/languages/messages/MessagesBg.php
+++ b/languages/messages/MessagesBg.php
@@ -150,7 +150,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'БРОЙПОТРЕБИТЕЛИ', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'БРОЙАКТИВНИПОТРЕБИТЕЛИ', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'БРОЙРЕДАКЦИИ', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'БРОЙПРЕГЛЕДИ', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
'pagenamee' => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
'namespace' => array( '1', 'ИМЕННОПРОСТРАНСТВО', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesBgn.php b/languages/messages/MessagesBgn.php
new file mode 100644
index 00000000..98c2ba3e
--- /dev/null
+++ b/languages/messages/MessagesBgn.php
@@ -0,0 +1,58 @@
+<?php
+/** Western Balochi (بلوچی رخشانی)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Ibrahim khashrowdi
+ * @author Mjbmr
+ */
+
+$fallback = 'fa';
+$rtl = true;
+
+$namespaceNames = array(
+ NS_MEDIA => 'رسانگ',
+ NS_SPECIAL => 'ۆێک',
+ NS_TALK => 'گپ',
+ NS_USER => 'کارمرزۆک',
+ NS_USER_TALK => 'کارمرزۆک_ئی_گپ',
+ NS_PROJECT_TALK => '$1_ئی_گپ',
+ NS_FILE => 'ورق',
+ NS_FILE_TALK => 'ورق_ئی_گپ',
+ NS_MEDIAWIKI => 'ویکی_رسانگ',
+ NS_MEDIAWIKI_TALK => 'ویکی_رسانگ_ئی_گپ',
+ NS_TEMPLATE => 'تراشوان',
+ NS_TEMPLATE_TALK => 'تراشوان_ئی_گپ',
+ NS_HELP => 'کومک',
+ NS_HELP_TALK => 'کومک_ئی_گپ',
+ NS_CATEGORY => 'تهر',
+ NS_CATEGORY_TALK => 'تهر_ئی_گپ',
+);
+
+$specialPageAliases = array(
+ 'Activeusers' => array( 'پئالین_کارمرزوکان' ),
+ 'Allmessages' => array( 'موچین_پیامان' ),
+ 'AllMyUploads' => array( 'ني_موچین_ایرگیج_ئآن', 'ني_موچین_وّرک_ئآن' ),
+ 'Allpages' => array( 'موچین_تاکدیمان' ),
+ 'ApiHelp' => array( 'ای_پی_آی_کومک' ),
+ 'Ancientpages' => array( 'کوهنگین_تاکدیمان' ),
+ 'Badtitle' => array( 'خرابین_ئینوان' ),
+ 'Blankpage' => array( 'خالین_دیم' ),
+ 'Block' => array( 'بستین', 'آی_پی_بستین', 'کارمرزوکی_بستین' ),
+ 'Booksources' => array( 'کتاب_ئی_بُن' ),
+ 'BrokenRedirects' => array( 'خرابین_تغیرمسیر' ),
+ 'Categories' => array( 'تهرئان' ),
+ 'ChangeEmail' => array( 'ایمیل_ئی_گردینتین' ),
+ 'ChangePassword' => array( 'چیهرگال_ئی_پاک_کورتین', 'چیهرگال_ئی_ٹگل' ),
+ 'ComparePages' => array( 'تاکدیمانی_موقایسه_کورتین' ),
+ 'Confirmemail' => array( 'ایمیل_ئی_تائید_کورتین' ),
+ 'Contributions' => array( 'شراکت_ئان' ),
+ 'CreateAccount' => array( 'کارمرزوکین_هیساب_ئی_جۆڑ_کورتین' ),
+ 'Deadendpages' => array( 'بن_بست_ئین_تاکدیمان' ),
+ 'DeletedContributions' => array( 'پاک_بوته_ئین_شراکت_ئان' ),
+ 'Diff' => array( 'پرک' ),
+ 'DoubleRedirects' => array( 'دوئین_تغیرمسیرئان' ),
+);
diff --git a/languages/messages/MessagesBho.php b/languages/messages/MessagesBho.php
index e90797a3..4c1962aa 100644
--- a/languages/messages/MessagesBho.php
+++ b/languages/messages/MessagesBho.php
@@ -27,6 +27,30 @@ $namespaceNames = array(
NS_CATEGORY_TALK => 'श्रेणी_वार्ता',
);
+$specialPageAliases = array(
+ 'Activeusers' => array( 'सक्रिय_सदस्य' ),
+ 'Allmessages' => array( 'सारा_संदेस' ),
+ 'Allpages' => array( 'सारा_पन्ना' ),
+ 'Ancientpages' => array( 'पुरान_पन्ना' ),
+ 'Badtitle' => array( 'खराब_टाइटिल' ),
+ 'Blankpage' => array( 'खाली_पन्ना' ),
+ 'Categories' => array( 'श्रेणी_सब' ),
+ 'Contributions' => array( 'योगदान' ),
+ 'Export' => array( 'निर्यात' ),
+ 'Import' => array( 'आयात' ),
+ 'Log' => array( 'लॉग' ),
+ 'Lonelypages' => array( 'असंयुक्त' ),
+ 'Longpages' => array( 'लम्बा_पन्ना' ),
+ 'Mypage' => array( 'हमार_पन्ना' ),
+ 'Mytalk' => array( 'हमार_बात' ),
+ 'Newpages' => array( 'नया_पन्ना' ),
+ 'Recentchangeslinked' => array( 'तुरंत_भइल_परिवर्तन' ),
+ 'Shortpages' => array( 'छोटा_पन्ना' ),
+ 'Specialpages' => array( 'ख़ाश_पन्ना' ),
+ 'TrackingCategories' => array( 'बिनावर्गीकृत_श्रेणी' ),
+ 'Uncategorizedpages' => array( 'बिनावर्गीकृत' ),
+);
+
$digitTransformTable = array(
'0' => '०', # &#x0966;
'1' => '१', # &#x0967;
@@ -39,4 +63,3 @@ $digitTransformTable = array(
'8' => '८', # &#x096e;
'9' => '९', # &#x096f;
);
-
diff --git a/languages/messages/MessagesBr.php b/languages/messages/MessagesBr.php
index 222399e1..66cef9ed 100644
--- a/languages/messages/MessagesBr.php
+++ b/languages/messages/MessagesBr.php
@@ -115,7 +115,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NIVERAIMPLIJERIEN', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NIVERAIMPLIJERIENOBERIANT', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NIVERAZEGASEDENNOU', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NIVERALENNADENNOU', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'ANVPAJENN', 'PAGENAME' ),
'pagenamee' => array( '1', 'ANVPAJENNSK', 'PAGENAMEE' ),
'namespace' => array( '1', 'ESAOUENNANV', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesBs.php b/languages/messages/MessagesBs.php
index 57413ac0..6fda8084 100644
--- a/languages/messages/MessagesBs.php
+++ b/languages/messages/MessagesBs.php
@@ -166,7 +166,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'BROJPROMJENA', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'STRANICA', 'PAGENAME' ),
'pagenamee' => array( '1', 'STRANICE', 'PAGENAMEE' ),
'namespace' => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesCa.php b/languages/messages/MessagesCa.php
index 6cfb988a..29c9a162 100644
--- a/languages/messages/MessagesCa.php
+++ b/languages/messages/MessagesCa.php
@@ -60,7 +60,7 @@ $specialPageAliases = array(
'LinkSearch' => array( 'Enllaços_web', 'Busca_enllaços', 'Recerca_d\'enllaços_web' ),
'Listadmins' => array( 'Administradors' ),
'Listbots' => array( 'Bots' ),
- 'Listfiles' => array( 'Imatges' ),
+ 'Listfiles' => array( 'Imatges', 'Fitxers' ),
'Listgrouprights' => array( 'Drets_dels_grups_d\'usuaris' ),
'Listredirects' => array( 'Redireccions' ),
'Listusers' => array( 'Usuaris' ),
@@ -80,7 +80,7 @@ $specialPageAliases = array(
'Mycontributions' => array( 'Contribucions_pròpies' ),
'Mypage' => array( 'Pàgina_personal' ),
'Mytalk' => array( 'Discussió_personal' ),
- 'Newimages' => array( 'Imatges_noves' ),
+ 'Newimages' => array( 'Imatges_noves', 'Fitxers_nous' ),
'Newpages' => array( 'Pàgines_noves' ),
'Popularpages' => array( 'Pàgines_populars' ),
'Preferences' => array( 'Preferències' ),
diff --git a/languages/messages/MessagesCdo.php b/languages/messages/MessagesCdo.php
index fb61b4aa..1bc43858 100644
--- a/languages/messages/MessagesCdo.php
+++ b/languages/messages/MessagesCdo.php
@@ -46,7 +46,7 @@ $specialPageAliases = array(
'Confirmemail' => array( '確認電子郵件' ),
'Contributions' => array( '貢獻' ),
'CreateAccount' => array( '開賬戶' ),
- 'DeletedContributions' => array( '刪掉其貢獻' ),
+ 'DeletedContributions' => array( '刪唻其貢獻' ),
'DoubleRedirects' => array( '雙重重定向' ),
'EditWatchlist' => array( '修改監視單' ),
'Emailuser' => array( '共用戶發送電子郵件' ),
@@ -125,7 +125,7 @@ $specialPageAliases = array(
'Wantedpages' => array( '卜挃其頁面' ),
'Wantedtemplates' => array( '卜挃其模板' ),
'Watchlist' => array( '監視單' ),
- 'Whatlinkshere' => array( '什乇鏈遘嚽塊' ),
+ 'Whatlinkshere' => array( '甚乇鏈遘嚽塊' ),
'Withoutinterwiki' => array( '無跨維基' ),
);
diff --git a/languages/messages/MessagesCe.php b/languages/messages/MessagesCe.php
index 2babb830..7ee29c12 100644
--- a/languages/messages/MessagesCe.php
+++ b/languages/messages/MessagesCe.php
@@ -67,8 +67,9 @@ $namespaceGenderAliases = array();
$specialPageAliases = array(
'Activeusers' => array( 'Жигара_декъашхой' ),
'Allmessages' => array( 'ГӀирса_хаамаш' ),
+ 'AllMyUploads' => array( 'Сан_массо_файлаш' ),
'Allpages' => array( 'Массо_агӀонаш' ),
- 'Ancientpages' => array( 'Яззамаш_оцу_терахьца_тӀаьххьара_тадар_дина_долу' ),
+ 'Ancientpages' => array( 'ТӀаьхьарлерачу_хенаца_нисбина_яззамаш' ),
'Badtitle' => array( 'Хилийта_йиш_йоцу_цӀе' ),
'Blankpage' => array( 'Еса_агӀо' ),
'Block' => array( 'Блоктоха' ),
@@ -95,9 +96,9 @@ $specialPageAliases = array(
'Invalidateemail' => array( 'Адрес_бакъдар_юхадаккха' ),
'JavaScriptTest' => array( 'JavaScript_тестировать_ян' ),
'BlockList' => array( 'Блоктоьхнарш' ),
- 'LinkSearch' => array( 'Хьажорагаш_лахар' ),
+ 'LinkSearch' => array( 'Хьажоргаш_лахар' ),
'Listadmins' => array( 'Куьйгалхойн_могӀам' ),
- 'Listbots' => array( 'Шаболх_бечара_могӀам' ),
+ 'Listbots' => array( 'Боттийн_могӀам' ),
'Listfiles' => array( 'Файлаш' ),
'Listgrouprights' => array( 'Декъашхойн_бакъонаш' ),
'Listredirects' => array( 'ДIасахьажоран_могIам' ),
@@ -110,8 +111,8 @@ $specialPageAliases = array(
'MIMEsearch' => array( 'MIME_чухула_лахар' ),
'Mostcategories' => array( 'Дуккха_категореш_тӀе_тоьхна_йолу_агӀонаш' ),
'Mostimages' => array( 'Массарел_дуккха_лелайо_файлаш' ),
- 'Mostinterwikis' => array( 'Дукха_юкъарвики_хьажорагаш' ),
- 'Mostlinked' => array( 'Дуккха_хьажорагаш_тӀе_тоьхна_йолу_агӀонаш' ),
+ 'Mostinterwikis' => array( 'Дукха_юкъарвики_хьажоргаш' ),
+ 'Mostlinked' => array( 'Дуккха_хьажоргаш_тӀе_тоьхна_йолу_агӀонаш' ),
'Mostlinkedcategories' => array( 'Дуккха_тӀе_хьажораш_йолу_категореш' ),
'Mostlinkedtemplates' => array( 'Массарел_дуккха_а_леладо_кепаш' ),
'Mostrevisions' => array( 'Сих_сиха_нисйина_йолу_агӀонаш' ),
@@ -124,7 +125,7 @@ $specialPageAliases = array(
'Newimages' => array( 'Керла_файлаш' ),
'Newpages' => array( 'Керла_агӀонаш' ),
'PasswordReset' => array( 'Пароль_кхоссар' ),
- 'PermanentLink' => array( 'Гуттарлера_хьажораг' ),
+ 'PermanentLink' => array( 'Гуттарлера_хьажорг' ),
'Popularpages' => array( 'ГӀараяьлла_агӀонаш' ),
'Preferences' => array( 'ГӀирсаш' ),
'Prefixindex' => array( 'Хьалха_агӀонийн_цӀераш_хӀотто_еза' ),
@@ -134,11 +135,11 @@ $specialPageAliases = array(
'Randomredirect' => array( 'Цахууш_нисделла_дIасахьажор' ),
'Recentchanges' => array( 'Керла_нисдарш' ),
'Recentchangeslinked' => array( 'Кхуьнца_долу_нисдарш' ),
- 'Revisiondelete' => array( 'ДӀадяхна_нисдарш' ),
+ 'Revisiondelete' => array( 'Нисдар_дӀадаккхар' ),
'Search' => array( 'Лахар' ),
'Shortpages' => array( 'Боца_яззамаш' ),
'Specialpages' => array( 'Леррина_агӀонаш' ),
- 'Statistics' => array( 'Бухехьдерг' ),
+ 'Statistics' => array( 'Статистика' ),
'Tags' => array( 'Билгалонаш' ),
'Unblock' => array( 'БлокдӀаяккхар' ),
'Uncategorizedcategories' => array( 'Категореш_йоцу_категореш' ),
@@ -162,24 +163,24 @@ $specialPageAliases = array(
'Wantedtemplates' => array( 'Оьшуш_йолу_кепаш' ),
'Watchlist' => array( 'Тергаме_могӀам' ),
'Whatlinkshere' => array( 'Хьажоригаш_кхузе' ),
- 'Withoutinterwiki' => array( 'Юкъарвики_хьажорагаш_йоцу_агӀонаш' ),
+ 'Withoutinterwiki' => array( 'Юкъарвики_хьажоргаш_йоцу_агӀонаш' ),
);
$magicWords = array(
- 'redirect' => array( '0', '#дlасахьажайар\'', '\'#хьажайо\'', '\'#REDIRECT', '#перенаправление', '#перенапр', '#REDIRECT' ),
+ 'redirect' => array( '0', '#дӀасахьажор\'', '\'#хьажайо\'', '\'#REDIRECT', '#перенаправление', '#перенапр', '#REDIRECT' ),
'notoc' => array( '0', '__БАЦ_ЧУЛАЦАМ__', '__БАЦ_ЧУЛ__', '__БЕЗ_ОГЛАВЛЕНИЯ__', '__БЕЗ_ОГЛ__', '__NOTOC__' ),
'nogallery' => array( '0', '__ЙАЦ_УЧЕ__', '__БЕЗ_ГАЛЕРЕИ__', '__NOGALLERY__' ),
'forcetoc' => array( '0', '__ТlЕДУЬЛЛУ_ЧУЛАЦАМБАР__', '__ТlЕДУЬЛ_ЧУЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
'toc' => array( '0', '__ЧУЛАЦАМ__', '__ЧУЛ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
- 'noeditsection' => array( '0', '__ЦАМЕГ_РЕДАККХА_АГlОН__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
+ 'noeditsection' => array( '0', '__АГӀО_ТА_ЦА_ЕШ__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
'currentmonth' => array( '1', 'КАРАРА_БУТТ', 'КАРАРА_БУТТ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
'currentmonth1' => array( '1', 'КАРАРА_БУТТ_1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
- 'currentmonthname' => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
- 'currentmonthnamegen' => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ_МУХ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
- 'currentmonthabbrev' => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ_АБР', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
+ 'currentmonthname' => array( '1', 'КАРАРАЧУ_БЕТТА_ЦӀЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
+ 'currentmonthnamegen' => array( '1', 'КАРАРАЧУ_БЕТТА_ЦӀЕ_МУХ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_РОД', 'CURRENTMONTHNAMEGEN' ),
+ 'currentmonthabbrev' => array( '1', 'КАРАРАЧУ_БЕТТА_ЦӀЕ_АБР', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА_АБР', 'CURRENTMONTHABBREV' ),
'currentday' => array( '1', 'КАРАРА_ДЕ', 'ТЕКУЩИЙ_ДЕНЬ', 'CURRENTDAY' ),
'currentday2' => array( '1', 'КАРАРА_ДЕ_2', 'ТЕКУЩИЙ_ДЕНЬ_2', 'CURRENTDAY2' ),
- 'currentdayname' => array( '1', 'КАРАРАЧУ_ДЕ_ЦlЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
+ 'currentdayname' => array( '1', 'КАРАРАЧУ_ДЕ_ЦӀЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_ДНЯ', 'CURRENTDAYNAME' ),
'currentyear' => array( '1', 'КАРАРА_ШО', 'ТЕКУЩИЙ_ГОД', 'CURRENTYEAR' ),
'currenttime' => array( '1', 'КАРАРА_ХАН', 'ТЕКУЩЕЕ_ВРЕМЯ', 'CURRENTTIME' ),
'currenthour' => array( '1', 'КАРАРА_САХЬТ', 'ТЕКУЩИЙ_ЧАС', 'CURRENTHOUR' ),
@@ -190,37 +191,36 @@ $magicWords = array(
'localmonthabbrev' => array( '1', 'МЕТТИГАН_БЕТТА_ЦlЕ_АБР', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
'localday' => array( '1', 'МЕТТИГАН_ДЕ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
'localday2' => array( '1', 'МЕТТИГАН_ДЕ_2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
- 'localdayname' => array( '1', 'МЕТТИГАН_ДЕ_ЦlЕ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
+ 'localdayname' => array( '1', 'МЕТТИГАН_ДЕ_ЦӀЕ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
'localyear' => array( '1', 'МЕТТИГАН_ШО', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
'localtime' => array( '1', 'МЕТТИГАН_ХАН', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
'localhour' => array( '1', 'МЕТТИГАН_САХЬТ', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
'numberofpages' => array( '1', 'АГlОНИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
'numberofarticles' => array( '1', 'ЯЗЗАМАШИ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
- 'numberoffiles' => array( '1', 'ФАЙЛАНШИ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
+ 'numberoffiles' => array( '1', 'ФАЙЛИЙН_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
'numberofusers' => array( '1', 'ДЕКЪАШХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'ДУКХАЛЛА_ЖИГАРА_ДЕКЪАШХОЙ', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
- 'numberofedits' => array( '1', 'НИСДАРШИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'ХЬАЖАРИЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
- 'pagename' => array( '1', 'АГlОН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
- 'pagenamee' => array( '1', 'АГlОН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
- 'namespace' => array( '1', 'ЦlЕРИ_АНА', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
- 'namespacee' => array( '1', 'ЦlЕРИ_АНА_2', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
- 'talkspace' => array( '1', 'ДИЙЦАРШИ_АНА', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
- 'talkspacee' => array( '1', 'ДИЙЦАРШИ_АНА_2', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
- 'subjectspace' => array( '1', 'ЯЗЗАМАШИ_АНА', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
- 'subjectspacee' => array( '1', 'ЯЗЗАМАШИ_АНА_2', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
- 'fullpagename' => array( '1', 'ЮЬЗЗИНА_АГlОН_ЦlЕ', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
- 'fullpagenamee' => array( '1', 'ЮЬЗЗИНА_АГlОН_ЦlЕ_2', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
- 'subpagename' => array( '1', 'АГlОН_КlЕЛАРА_ЦlЕ', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
- 'subpagenamee' => array( '1', 'АГlОН_КlЕЛАРА_ЦlЕ_2', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
- 'basepagename' => array( '1', 'АГlОН_ЦlЕРА_БУХ', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
- 'basepagenamee' => array( '1', 'АГlОН_ЦlЕРА_БУХ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
- 'talkpagename' => array( '1', 'ДИЙЦАРЕ_АГlОН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
- 'talkpagenamee' => array( '1', 'ДИЙЦАРЕ_АГlОН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
- 'subjectpagename' => array( '1', 'АГlОН_ЯЗЗАМАН_ЦlЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
- 'subjectpagenamee' => array( '1', 'АГlОН_ЯЗЗАМАН_ЦlЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+ 'numberofedits' => array( '1', 'НИСДАРИЙН_ДУКХАЛЛА', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
+ 'pagename' => array( '1', 'АГӀОН_ЦӀЕ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
+ 'pagenamee' => array( '1', 'АГӀОН_ЦӀЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
+ 'namespace' => array( '1', 'ЦӀЕРИЙН_АНА', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
+ 'namespacee' => array( '1', 'ЦӀЕРИЙН_АНА_2', 'ПРОСТРАНСТВО_ИМЁН_2', 'NAMESPACEE' ),
+ 'talkspace' => array( '1', 'ДИЙЦАРИЙН_АНА', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ', 'TALKSPACE' ),
+ 'talkspacee' => array( '1', 'ДИЙЦАРИЙН_АНА_2', 'ПРОСТРАНСТВО_ОБСУЖДЕНИЙ_2', 'TALKSPACEE' ),
+ 'subjectspace' => array( '1', 'ЯЗЗАМИЙН_АНА', 'ПРОСТРАНСТВО_СТАТЕЙ', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+ 'subjectspacee' => array( '1', 'ЯЗЗАМИЙН_АНА_2', 'ПРОСТРАНСТВО_СТАТЕЙ_2', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+ 'fullpagename' => array( '1', 'ЮЬЗЗИНА_АГӀОН_ЦӀЕ', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ', 'FULLPAGENAME' ),
+ 'fullpagenamee' => array( '1', 'ЮЬЗЗИНА_АГӀОН_ЦӀЕ_2', 'ПОЛНОЕ_НАЗВАНИЕ_СТРАНИЦЫ_2', 'FULLPAGENAMEE' ),
+ 'subpagename' => array( '1', 'АГӀОН_КӀЕЛАРА_ЦӀЕ', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ', 'SUBPAGENAME' ),
+ 'subpagenamee' => array( '1', 'АГӀОН_КӀЕЛАРА_ЦӀЕ_2', 'НАЗВАНИЕ_ПОДСТРАНИЦЫ_2', 'SUBPAGENAMEE' ),
+ 'basepagename' => array( '1', 'АГӀОН_ЦӀЕРА_БУХ', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ', 'BASEPAGENAME' ),
+ 'basepagenamee' => array( '1', 'АГӀОН_ЦӀЕРА_БУХ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
+ 'talkpagename' => array( '1', 'ДИЙЦАРЕ_АГӀОН_ЦӀЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
+ 'talkpagenamee' => array( '1', 'ДИЙЦАРЕ_АГӀОН_ЦӀЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
+ 'subjectpagename' => array( '1', 'АГӀОН_ЯЗЗАМАН_ЦӀЕ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+ 'subjectpagenamee' => array( '1', 'АГӀОН_ЯЗЗАМАН_ЦӀЕ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
'msg' => array( '0', 'ХААМ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
- 'subst' => array( '0', 'ХlОТТОР:', 'ХlОТТ:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ),
+ 'subst' => array( '0', 'ХӀОТТОР:', 'ХӀОТТ:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ),
'msgnw' => array( '0', 'ВИКИ_ХААМ_БОЦАШ:', 'СООБЩ_БЕЗ_ВИКИ:', 'MSGNW:' ),
'img_thumbnail' => array( '1', 'жима', 'жимо', 'мини', 'миниатюра', 'thumbnail', 'thumb' ),
'img_manualthumb' => array( '1', 'жима=$1', 'жимо=$1', 'мини=$1', 'миниатюра=$1', 'thumbnail=$1', 'thumb=$1' ),
@@ -236,32 +236,32 @@ $magicWords = array(
'img_border' => array( '1', 'доза', 'граница', 'border' ),
'img_baseline' => array( '1', 'бух', 'основание', 'baseline' ),
'img_sub' => array( '1', 'буха', 'под', 'sub' ),
- 'img_super' => array( '1', 'тlе', 'над', 'super', 'sup' ),
+ 'img_super' => array( '1', 'тӀе', 'над', 'super', 'sup' ),
'img_top' => array( '1', 'лакхахь', 'сверху', 'top' ),
'img_text_top' => array( '1', 'лакххьара-йоза', 'текст-сверху', 'text-top' ),
'img_middle' => array( '1', 'юккъе', 'посередине', 'middle' ),
'img_bottom' => array( '1', 'бухар', 'снизу', 'bottom' ),
'img_text_bottom' => array( '1', 'бухара-йоза', 'текст-снизу', 'text-bottom' ),
- 'img_link' => array( '1', 'хьажориг=$1', 'ссылка=$1', 'link=$1' ),
+ 'img_link' => array( '1', 'хьажорг=$1', 'ссылка=$1', 'link=$1' ),
'img_alt' => array( '1', 'альт=$1', 'alt=$1' ),
'int' => array( '0', 'ЧУЬРА:', 'ВНУТР:', 'INT:' ),
'sitename' => array( '1', 'МЕТТИГ_ЦlЕ', 'НАЗВАНИЕ_САЙТА', 'SITENAME' ),
'ns' => array( '0', 'БО:', 'ПИ:', 'NS:' ),
'nse' => array( '0', 'БОХЬ:', 'ПИК:', 'NSE:' ),
- 'localurl' => array( '0', 'ХlОТТАЕЛЛА_МЕТТИГ:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
- 'localurle' => array( '0', 'ХlОТТАЕЛЛА_МЕТТИГ_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
+ 'localurl' => array( '0', 'ХӀОТТАЕЛЛА_МЕТТИГ:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
+ 'localurle' => array( '0', 'ХӀОТТАЕЛЛА_МЕТТИГ_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
'server' => array( '0', 'ГlУЛКХДИРИГ', 'СЕРВЕР', 'SERVER' ),
'servername' => array( '0', 'ГlУЛКХДЕЧУЬНА_ЦlЕ', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ),
'scriptpath' => array( '0', 'НЕКЪ_ОЦ_МЕТТАКЕПА', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ),
- 'stylepath' => array( '0', 'ЙОМАНХАТl', 'ПУТЬ_К_СТИЛЮ', 'STYLEPATH' ),
+ 'stylepath' => array( '0', 'ЙОМАНХАТӀ', 'ПУТЬ_К_СТИЛЮ', 'STYLEPATH' ),
'grammar' => array( '0', 'ДОЖАР:', 'ПАДЕЖ:', 'GRAMMAR:' ),
'gender' => array( '0', 'ВУ_ЙУ:', 'GENDER', 'ПОЛ:', 'GENDER:' ),
'notitleconvert' => array( '0', '__ХИЙЦАР_ДОЦУШ_КОЬРТЕ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ЗАГОЛОВКА__', '__NOTITLECONVERT__', '__NOTC__' ),
'nocontentconvert' => array( '0', '__ЙОЗА_ХИЙЦАР_ДОЦУШ__', '__БЕЗ_ПРЕОБРАЗОВАНИЯ_ТЕКСТА__', '__NOCONTENTCONVERT__', '__NOCC__' ),
- 'currentweek' => array( '1', 'КАРАРА_КlИР', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
- 'currentdow' => array( '1', 'КАРАРА_КlИРАН_ДЕ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
- 'localweek' => array( '1', 'МЕТТИГЕРА_КlИРА', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
- 'localdow' => array( '1', 'МЕТТИГАН_КlИРАН_ДЕ', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ', 'LOCALDOW' ),
+ 'currentweek' => array( '1', 'КАРАРА_КӀИРА', 'ТЕКУЩАЯ_НЕДЕЛЯ', 'CURRENTWEEK' ),
+ 'currentdow' => array( '1', 'КАРАРА_КӀИРАН_ДЕ', 'ТЕКУЩИЙ_ДЕНЬ_НЕДЕЛИ', 'CURRENTDOW' ),
+ 'localweek' => array( '1', 'МЕТТИГЕРА_КӀИРА', 'МЕСТНАЯ_НЕДЕЛЯ', 'LOCALWEEK' ),
+ 'localdow' => array( '1', 'МЕТТИГАН_КӀИРАН_ДЕ', 'МЕСТНЫЙ_ДЕНЬ_НЕДЕЛИ', 'LOCALDOW' ),
'revisionid' => array( '1', 'ЦУЬНА_БАШХО', 'ИД_ВЕРСИИ', 'REVISIONID' ),
'revisionday' => array( '1', 'ДЕ_БАШХО', 'ДЕНЬ_ВЕРСИИ', 'REVISIONDAY' ),
'revisionday2' => array( '1', 'ДЕ_БАШХО_2', 'ДЕНЬ_ВЕРСИИ_2', 'REVISIONDAY2' ),
@@ -279,8 +279,8 @@ $magicWords = array(
'raw' => array( '0', 'ТАЙАНЗА:', 'НЕОБРАБ:', 'RAW:' ),
'displaytitle' => array( '1', 'ГАЙТА_КОЬРТАМОГl', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
'rawsuffix' => array( '1', 'Т', 'Н', 'R' ),
- 'newsectionlink' => array( '1', '__ХЬАЖОРАГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
- 'nonewsectionlink' => array( '1', '__ЙОЦАШ_ХЬАЖОРАГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
+ 'newsectionlink' => array( '1', '__ХЬАЖОРГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__ССЫЛКА_НА_НОВЫЙ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
+ 'nonewsectionlink' => array( '1', '__ЙОЦАШ_ХЬАЖОРГ_ОЦ_КЕРЛАЧУ_ДЕКЪАН__', '__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__', '__NONEWSECTIONLINK__' ),
'currentversion' => array( '1', 'ЙОЛШЙОЛУ_БАШХО', 'ТЕКУЩАЯ_ВЕРСИЯ', 'CURRENTVERSION' ),
'urlencode' => array( '0', 'ИШАРЙИНА_МЕТТИГ:', 'ЗАКОДИРОВАННЫЙ_АДРЕС:', 'URLENCODE:' ),
'anchorencode' => array( '0', 'ИШАРЙАР_МЕТТИГАН', 'КОДИРОВАТЬ_МЕТКУ', 'ANCHORENCODE' ),
@@ -289,23 +289,23 @@ $magicWords = array(
'directionmark' => array( '1', 'ХЬАЖОЧЕ_ХААМ', 'НАПРАВЛЕНИЕ_ПИСЬМА', 'DIRECTIONMARK', 'DIRMARK' ),
'language' => array( '0', '#МОТТ', '#ЯЗЫК:', '#LANGUAGE:' ),
'contentlanguage' => array( '1', 'МОТТ_ЧУЛАЦАМ', 'ЯЗЫК_СОДЕРЖАНИЯ', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
- 'pagesinnamespace' => array( '1', 'АГlОНАШ_ОЦ_ЦlЕРАШКАХЬ:', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+ 'pagesinnamespace' => array( '1', 'АГӀОНАШ_ОЦ_ЦӀЕРАШКАХЬ:', 'СТРАНИЦ_В_ПРОСТРАНСТВЕ_ИМЁН:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
'numberofadmins' => array( '1', 'КУЬГАЛХОЙ_ДУКХАЛЛА', 'КОЛИЧЕСТВО_АДМИНИСТРАТОРОВ', 'NUMBEROFADMINS' ),
'formatnum' => array( '0', 'ТЕРАХЬАН_БАРАМХlОТТОР', 'ФОРМАТИРОВАТЬ_ЧИСЛО', 'FORMATNUM' ),
'padleft' => array( '0', 'ЙУЗА_ХАРЦЕ', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ),
'padright' => array( '0', 'ЙУЗА_БАКЪЕ', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ),
- 'special' => array( '0', 'белхан', 'гlуллакхан', 'служебная', 'special' ),
+ 'special' => array( '0', 'белхан', 'гӀуллакхан', 'служебная', 'special' ),
'defaultsort' => array( '1', 'ЛИСТАР_ЦАХЬЕХОР', 'ДОГlА_ЛИСТАРАН', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
- 'filepath' => array( '0', 'ОЦ_ХlУМАНТlЕ_НЕКЪ:', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
+ 'filepath' => array( '0', 'ФАЙЛАН_ТӀЕ_НЕКЪ:', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
'tag' => array( '0', 'къастам', 'къасто', 'къаст', 'метка', 'тег', 'тэг', 'tag' ),
- 'hiddencat' => array( '1', '__КЪАЙЛАХЙОЛУ_КАДЕГАР__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
- 'pagesincategory' => array( '1', 'АГlОНАШ_ОЦУ_КАДЕГАРШЧОХЬ', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+ 'hiddencat' => array( '1', '__КЪАЙЛАХА_ЙОЛУ_КАТЕГОРИ__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
+ 'pagesincategory' => array( '1', 'КАТЕГОРИ_ЧОХЬ_АГӀОНАШ_', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
'pagesize' => array( '1', 'АГlОН_БАРАМ', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
'index' => array( '1', '__МЕТТИГТЕРАХЬ__', '__ИНДЕКС__', '__INDEX__' ),
'noindex' => array( '1', '__МЕТТИГТЕРАХЬ_ЙОЦАШ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
'numberingroup' => array( '1', 'ТЕРАХЬ_ОЦ_ТОБАНЦА', 'ЧИСЛО_В_ГРУППЕ', 'NUMBERINGROUP', 'NUMINGROUP' ),
- 'staticredirect' => array( '1', '__БУХЕХЬДЕРГ_ДlАСХЬАЖАЙАР__', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ),
- 'protectionlevel' => array( '1', 'ГlАРОЛЛИ_БАРАМ', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ),
+ 'staticredirect' => array( '1', '__СТАТИСТИКИН_ДӀАСХЬАЖОРГ__', '__СТАТИЧЕСКОЕ_ПЕРЕНАПРАВЛЕНИЕ__', '__STATICREDIRECT__' ),
+ 'protectionlevel' => array( '1', 'ГӀАРОЛЛИ_БАРАМ', 'УРОВЕНЬ_ЗАЩИТЫ', 'PROTECTIONLEVEL' ),
'formatdate' => array( '0', 'терахьибарам', 'форматдаты', 'formatdate', 'dateformat' ),
'url_path' => array( '0', 'ЙОМА', 'ПУТЬ', 'PATH' ),
'url_wiki' => array( '0', 'ЧЕХКА', 'ВИКИ', 'WIKI' ),
diff --git a/languages/messages/MessagesCkb.php b/languages/messages/MessagesCkb.php
index b1efa3ab..027161fb 100644
--- a/languages/messages/MessagesCkb.php
+++ b/languages/messages/MessagesCkb.php
@@ -8,15 +8,12 @@
*
*/
-$linkPrefixExtension = true;
-$fallback8bitEncoding = 'windows-1256';
-
$rtl = true;
+$fallback8bitEncoding = 'windows-1256';
$namespaceNames = array(
NS_MEDIA => 'میدیا',
NS_SPECIAL => 'تایبەت',
- NS_MAIN => '',
NS_TALK => 'وتووێژ',
NS_USER => 'بەکارھێنەر',
NS_USER_TALK => 'لێدوانی_بەکارھێنەر',
@@ -54,7 +51,7 @@ $specialPageAliases = array(
'Booksources' => array( 'سەرچاوەکانی_کتێب' ),
'BrokenRedirects' => array( 'ڕەوانکەرە_شکاوەکان' ),
'Categories' => array( 'پۆلەکان' ),
- 'ChangePassword' => array( 'تێپەڕوشەگۆڕان،_تێپەڕەوشە_ڕێکخستنەوە' ),
+ 'ChangePassword' => array( 'تێپەڕوشەگۆڕان،ڕێکخستنەوەی_تێپەڕوشە' ),
'Confirmemail' => array( 'بڕواکردن_ئیمەیل' ),
'Contributions' => array( 'بەشدارییەکان' ),
'CreateAccount' => array( 'دروستکردنی_ھەژمار' ),
@@ -62,7 +59,7 @@ $specialPageAliases = array(
'DoubleRedirects' => array( 'ڕەوانکەرە_دووپاتکراوەکان' ),
'Emailuser' => array( 'ئیمەیل_بەکارھێنەر' ),
'Export' => array( 'ھەناردن' ),
- 'Fewestrevisions' => array( 'کەمترین__پێداچوونەوەکان' ),
+ 'Fewestrevisions' => array( 'کەمترین_پێداچوونەوەکان' ),
'Import' => array( 'ھاوردن' ),
'Listadmins' => array( 'لیستی_بەڕێوبەران' ),
'Listbots' => array( 'لیستی_بۆتەکان' ),
@@ -71,6 +68,7 @@ $specialPageAliases = array(
'Log' => array( 'لۆگ' ),
'Lonelypages' => array( 'پەڕە_تاکەکان،_پەڕە_ھەتیوکراوەکان' ),
'Longpages' => array( 'پەڕە_درێژەکان' ),
+ 'MergeHistory' => array( 'کردنەیەکی_مێژوو' ),
'Mostcategories' => array( 'زیاترین_پۆلەکان' ),
'Mostimages' => array( 'پەڕگەکانی_زیاترین_بەستەردراون،_زیاترین_پەڕگەکان،_زیاترین_وێنەکان' ),
'Mostlinked' => array( 'پەڕەکانی_زیاترین_بەستەردراون،_زیاترین_بەستەردراون' ),
@@ -80,7 +78,7 @@ $specialPageAliases = array(
'Movepage' => array( 'گواستنەوەی_پەڕە' ),
'Mycontributions' => array( 'بەشدارییەکانم' ),
'Mypage' => array( 'پەڕەکەم' ),
- 'Mytalk' => array( 'لێدوانەکانم' ),
+ 'Mytalk' => array( 'لێدوانەکەم' ),
'Newimages' => array( 'پەڕگە_نوێکان' ),
'Newpages' => array( 'پەڕە_نوێکان' ),
'Popularpages' => array( 'پەڕە_ناودارەکان' ),
diff --git a/languages/messages/MessagesDe.php b/languages/messages/MessagesDe.php
index 95f1719b..c9994e26 100644
--- a/languages/messages/MessagesDe.php
+++ b/languages/messages/MessagesDe.php
@@ -42,6 +42,7 @@ $specialPageAliases = array(
'Allmessages' => array( 'MediaWiki-Systemnachrichten', 'Systemnachrichten' ),
'AllMyUploads' => array( 'Alle_meine_Dateien' ),
'Allpages' => array( 'Alle_Seiten' ),
+ 'ApiHelp' => array( 'API-Hilfe' ),
'Ancientpages' => array( 'Älteste_Seiten' ),
'Badtitle' => array( 'Ungültiger_Seitenname' ),
'Blankpage' => array( 'Leerseite', 'Leere_Seite' ),
@@ -57,6 +58,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'Benutzerkonto_anlegen' ),
'Deadendpages' => array( 'Sackgassenseiten' ),
'DeletedContributions' => array( 'Gelöschte_Beiträge' ),
+ 'Diff' => array( 'Diff', 'Differenz', 'Unterschied' ),
'DoubleRedirects' => array( 'Doppelte_Weiterleitungen' ),
'EditWatchlist' => array( 'Beobachtungsliste_bearbeiten' ),
'Emailuser' => array( 'E-Mail_senden', 'Mailen', 'E-Mail' ),
@@ -75,11 +77,13 @@ $specialPageAliases = array(
'Listfiles' => array( 'Dateien', 'Dateiliste' ),
'Listgrouprights' => array( 'Gruppenrechte' ),
'Listredirects' => array( 'Weiterleitungen' ),
+ 'ListDuplicatedFiles' => array( 'Dateiduplikate' ),
'Listusers' => array( 'Benutzer', 'Benutzerliste' ),
'Lockdb' => array( 'Datenbank_sperren' ),
'Log' => array( 'Logbuch' ),
'Lonelypages' => array( 'Verwaiste_Seiten' ),
'Longpages' => array( 'Längste_Seiten' ),
+ 'MediaStatistics' => array( 'Medienstatistiken' ),
'MergeHistory' => array( 'Versionsgeschichten_vereinen' ),
'MIMEsearch' => array( 'MIME-Typ-Suche' ),
'Mostcategories' => array( 'Meistkategorisierte_Seiten' ),
@@ -98,6 +102,7 @@ $specialPageAliases = array(
'Newimages' => array( 'Neue_Dateien' ),
'Newpages' => array( 'Neue_Seiten' ),
'PagesWithProp' => array( 'Seiten_mit_Eigenschaften' ),
+ 'PageLanguage' => array( 'Seitensprache' ),
'PasswordReset' => array( 'Passwort_neu_vergeben' ),
'PermanentLink' => array( 'Permanenter_Link', 'Permalink' ),
'Popularpages' => array( 'Beliebteste_Seiten' ),
@@ -106,18 +111,20 @@ $specialPageAliases = array(
'Protectedpages' => array( 'Geschützte_Seiten' ),
'Protectedtitles' => array( 'Geschützte_Titel', 'Gesperrte_Titel' ),
'Randompage' => array( 'Zufällige_Seite' ),
- 'RandomInCategory' => array( 'Zufällige_Seite_in_Kategorie' ),
+ 'RandomInCategory' => array( 'Zufällig_in_Kategorie' ),
'Randomredirect' => array( 'Zufällige_Weiterleitung' ),
'Recentchanges' => array( 'Letzte_Änderungen' ),
'Recentchangeslinked' => array( 'Änderungen_an_verlinkten_Seiten' ),
'Redirect' => array( 'Weiterleitung' ),
'ResetTokens' => array( 'Tokens_zurücksetzen' ),
'Revisiondelete' => array( 'Versionslöschung' ),
+ 'RunJobs' => array( 'Aufträge_ausführen' ),
'Search' => array( 'Suche' ),
'Shortpages' => array( 'Kürzeste_Seiten' ),
'Specialpages' => array( 'Spezialseiten' ),
'Statistics' => array( 'Statistik' ),
'Tags' => array( 'Markierungen' ),
+ 'TrackingCategories' => array( 'Tracking-Kategorien' ),
'Unblock' => array( 'Freigeben' ),
'Uncategorizedcategories' => array( 'Nicht_kategorisierte_Kategorien' ),
'Uncategorizedimages' => array( 'Nicht_kategorisierte_Dateien' ),
@@ -178,7 +185,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'BENUTZERANZAHL', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'AKTIVE_BENUTZER', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'BEARBEITUNGSANZAHL', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'BETRACHTUNGEN', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'SEITENNAME', 'PAGENAME' ),
'pagenamee' => array( '1', 'SEITENNAME_URL', 'PAGENAMEE' ),
'namespace' => array( '1', 'NAMENSRAUM', 'NAMESPACE' ),
@@ -290,6 +296,7 @@ $magicWords = array(
'numberingroup' => array( '1', 'BENUTZER_IN_GRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
'staticredirect' => array( '1', '__PERMANENTE_WEITERLEITUNG__', '__STATICREDIRECT__' ),
'protectionlevel' => array( '1', 'SCHUTZSTATUS', 'PROTECTIONLEVEL' ),
+ 'cascadingsources' => array( '1', 'KASKADENQUELLEN', 'CASCADINGSOURCES' ),
'formatdate' => array( '0', 'DATUMSFORMAT', 'formatdate', 'dateformat' ),
'url_path' => array( '0', 'PFAD', 'PATH' ),
'url_query' => array( '0', 'ABFRAGE', 'QUERY' ),
diff --git a/languages/messages/MessagesDiq.php b/languages/messages/MessagesDiq.php
index 70e4de3c..445aba04 100644
--- a/languages/messages/MessagesDiq.php
+++ b/languages/messages/MessagesDiq.php
@@ -54,87 +54,94 @@ $namespaceAliases = array(
);
$specialPageAliases = array(
- 'Activeusers' => array( 'KarberéAktivi' ),
- 'Allmessages' => array( 'MesaciPéro' ),
- 'AllMyUploads' => array( 'DosyeyMı' ),
- 'Allpages' => array( 'PeriPéro' ),
- 'Ancientpages' => array( 'PeréKehani' ),
- 'Badtitle' => array( 'SernameyoXirab' ),
- 'Blankpage' => array( 'PeréVengi' ),
- 'Block' => array( 'Bloke', 'BlokeIP', 'BlokeyéKarberi' ),
- 'Booksources' => array( 'ÇımeyéKıtabi' ),
- 'BrokenRedirects' => array( 'HetenayışoXırab' ),
+ 'Activeusers' => array( 'KarberêAktifi' ),
+ 'Allmessages' => array( 'MesaciPêro' ),
+ 'AllMyUploads' => array( 'BarkerdışêMıPêro', 'DosyeyêMıPêro' ),
+ 'Allpages' => array( 'PeliPêro' ),
+ 'Ancientpages' => array( 'PelêKehani' ),
+ 'Badtitle' => array( 'SernameyoXırabın' ),
+ 'Blankpage' => array( 'PelaVenge' ),
+ 'Block' => array( 'KılitKe', 'IPyKılitKe', 'KarberiKılitKe' ),
+ 'Booksources' => array( 'ÇımeyêKıtabi' ),
+ 'BrokenRedirects' => array( 'SerberdışêXırabıni' ),
'Categories' => array( 'Kategoriy' ),
- 'ChangeEmail' => array( 'EpostaVurnayış' ),
- 'ChangePassword' => array( 'ParolaBıvırn', 'ParolaResetk' ),
- 'ComparePages' => array( 'PeraAteberd' ),
- 'Confirmemail' => array( 'EpostaAraştk' ),
- 'Contributions' => array( 'Dekerdışi' ),
- 'CreateAccount' => array( 'HesabVıraz' ),
- 'Deadendpages' => array( 'PeréMerdey' ),
- 'DeletedContributions' => array( 'DekerdışékBesterneyayé' ),
- 'DoubleRedirects' => array( 'HetenayışoDilet' ),
- 'EditWatchlist' => array( 'VırnayışanéListeyaTemaşek' ),
- 'Emailuser' => array( 'EpostayaKarberi' ),
- 'ExpandTemplates' => array( 'ŞablonaHerake' ),
- 'Export' => array( 'Ateberd' ),
- 'Fewestrevisions' => array( 'TewrtaynRewizyoni' ),
- 'FileDuplicateSearch' => array( 'KopyadosyaCigérayış', 'DiletdosyaCigérayış' ),
- 'Filepath' => array( 'RayaDosya', 'CayDosya' ),
- 'Import' => array( 'Azerek' ),
- 'Invalidateemail' => array( 'EpostayaBetale' ),
- 'BlockList' => array( 'ListeyaBloki', 'ListeyaBlokan', 'ListeyaBlokeyéIPi' ),
- 'LinkSearch' => array( 'GireCıgeyrayış' ),
- 'Listadmins' => array( 'ListeyaHeténkaran' ),
- 'Listbots' => array( 'ListeyaBotan' ),
- 'Listfiles' => array( 'ListeyDosyayan', 'DosyayaListek', 'ListeyResiman' ),
- 'Listgrouprights' => array( 'ListeyaHeqanéGruban', 'HeqéGrubéKarberan' ),
- 'Listredirects' => array( 'ListeyaArézekerdışan' ),
- 'Listusers' => array( 'ListeyaKarberan', 'KarberaListek' ),
+ 'ChangeEmail' => array( 'EposteBıvurne' ),
+ 'ChangePassword' => array( 'ParolaBıvurne', 'ParolaEyarKe' ),
+ 'ComparePages' => array( 'PerranTêverşane' ),
+ 'Confirmemail' => array( 'EposteQebulKe' ),
+ 'Contributions' => array( 'İştıraki' ),
+ 'CreateAccount' => array( 'HesabVıraze' ),
+ 'Deadendpages' => array( 'PelêBêgırey' ),
+ 'DeletedContributions' => array( 'İştırakêEsteriyay' ),
+ 'Diff' => array( 'Ferq' ),
+ 'DoubleRedirects' => array( 'SerberdışoDılet' ),
+ 'EditWatchlist' => array( 'ListaSeyrkerdışiBıvurne' ),
+ 'Emailuser' => array( 'EposteBırışe' ),
+ 'ExpandTemplates' => array( 'ŞablonanHeraKe' ),
+ 'Export' => array( 'BereTeber' ),
+ 'Fewestrevisions' => array( 'TewrŞenıkÇımraviyarnayışi' ),
+ 'FileDuplicateSearch' => array( 'CıgeyrayışêDosyayaKopyakerdiye', 'CıgeyrayışêDosyayaDılete' ),
+ 'Filepath' => array( 'RayaDosya', 'CayêDosya' ),
+ 'Import' => array( 'BiyaZerre' ),
+ 'Invalidateemail' => array( 'EposteyBıtexelne' ),
+ 'JavaScriptTest' => array( 'TestêJavaScripti' ),
+ 'BlockList' => array( 'ListaKılitkerdışi', 'ListaKılitkerdışan', 'ListaKılitkerdışêIPyan' ),
+ 'LinkSearch' => array( 'CıgeyrayışêGırey' ),
+ 'Listadmins' => array( 'İdarekaranListeKe' ),
+ 'Listbots' => array( 'BotanListeKe' ),
+ 'Listfiles' => array( 'DosyeyanListeKe', 'ListaDosya', 'ListaResıman' ),
+ 'Listgrouprights' => array( 'HeqanêGrubanListeKe', 'HeqêGrubaKarberan' ),
+ 'Listredirects' => array( 'ListaSerberdışan' ),
+ 'ListDuplicatedFiles' => array( 'KopyayaListanêDosyeyan' ),
+ 'Listusers' => array( 'ListaKarberan', 'KarberanListeKe' ),
'Lockdb' => array( 'DBKilitk' ),
'Log' => array( 'Qeyd', 'Qeydi' ),
- 'Lonelypages' => array( 'PeréBéwayıri' ),
- 'Longpages' => array( 'PeréDergi' ),
- 'MergeHistory' => array( 'VerénanPétewrke' ),
- 'MIMEsearch' => array( 'NIMECıgeyrayış' ),
- 'Mostcategories' => array( 'TewrvéşiKategoriyıni' ),
- 'Mostimages' => array( 'DosyeyékeCırévéşiGreDeyayo' ),
- 'Mostinterwikis' => array( 'TewrvéşiTeberwiki' ),
- 'Mostlinked' => array( 'PerékeCırévéşiGreDeyayo' ),
- 'Mostlinkedcategories' => array( 'KategoriyayékeCırévéşiGreDeyayo' ),
- 'Mostlinkedtemplates' => array( 'ŞablonékeCırévéşiGreDeyayo' ),
- 'Mostrevisions' => array( 'TewrvéşiRevizyon' ),
- 'Movepage' => array( 'PelerBeré' ),
- 'Mycontributions' => array( 'DekerdenéMe' ),
- 'MyLanguage' => array( 'ZıwaneMe' ),
- 'Mypage' => array( 'PeréMe' ),
- 'Mytalk' => array( 'VatenayışéMe' ),
- 'Myuploads' => array( 'BarkerdışéMe' ),
- 'Newimages' => array( 'DosyeyéNewey', 'ResiméNewey' ),
- 'Newpages' => array( 'PeréNewey' ),
- 'PasswordReset' => array( 'ParolaResetkerdış' ),
- 'PermanentLink' => array( 'GreyoDaimi' ),
- 'Popularpages' => array( 'PeréPopuleri' ),
+ 'Lonelypages' => array( 'PelêBêwayıri' ),
+ 'Longpages' => array( 'PelêDergi' ),
+ 'MergeHistory' => array( 'VerênanPêtewrKe' ),
+ 'MIMEsearch' => array( 'MIMECıgeyrayış' ),
+ 'Mostcategories' => array( 'TewrvêşiKategoriy' ),
+ 'Mostimages' => array( 'DosyeyêKeCırêvêşiGıredayiyê' ),
+ 'Mostinterwikis' => array( 'TewrvêşiTeberwikiy' ),
+ 'Mostlinked' => array( 'PelêKeCırêvêşiGıredayiyê' ),
+ 'Mostlinkedcategories' => array( 'KategoriyêKeCırêvêşiGıredayiyê' ),
+ 'Mostlinkedtemplates' => array( 'ŞablonêKeCırêvêşiGıredayiyê' ),
+ 'Mostrevisions' => array( 'TewrvêşiÇımraviyarnayışi' ),
+ 'Movepage' => array( 'PeleBere' ),
+ 'Mycontributions' => array( 'İştırakêMı' ),
+ 'MyLanguage' => array( 'ZıwanêMı' ),
+ 'Mypage' => array( 'PelaMı' ),
+ 'Mytalk' => array( 'WerênayışêMı' ),
+ 'Myuploads' => array( 'BarkerdışêMı' ),
+ 'Newimages' => array( 'DosyeyêNewey', 'ResımêNewey' ),
+ 'Newpages' => array( 'PelêNewey' ),
+ 'PageLanguage' => array( 'Zıwanê_Pele' ),
+ 'PasswordReset' => array( 'ParolaPeysereştış' ),
+ 'PermanentLink' => array( 'GıreyoDaimi' ),
+ 'Popularpages' => array( 'PelêPopuleri' ),
'Preferences' => array( 'Tercihi' ),
- 'Prefixindex' => array( 'SerVerole' ),
- 'Protectedpages' => array( 'PerékeStaryayé' ),
- 'Protectedtitles' => array( 'SernameyékeStaryayé' ),
- 'Randompage' => array( 'Raştameye', 'PelayakeRaştamé' ),
- 'RandomInCategory' => array( 'KategoriyaXoseri' ),
- 'Randomredirect' => array( 'HetenayışoRaştameye' ),
- 'Recentchanges' => array( 'VırnayışéPeyéni' ),
- 'Recentchangeslinked' => array( 'GreyéVırnayışéPeyénan' ),
- 'Redirect' => array( 'Hetenayış' ),
- 'Revisiondelete' => array( 'RewizyoniBesterne' ),
+ 'Prefixindex' => array( 'VerbendZerrek' ),
+ 'Protectedpages' => array( 'PelêKeŞevekiyayiyé' ),
+ 'Protectedtitles' => array( 'SernameyêKeŞevekiyayiyê' ),
+ 'Randompage' => array( 'Raştameye', 'PelaRaştameyiye' ),
+ 'RandomInCategory' => array( 'KategoriyaRaştameyiye' ),
+ 'Randomredirect' => array( 'SerberdışoRaştameye' ),
+ 'Recentchanges' => array( 'VurnayışêPeyêni' ),
+ 'Recentchangeslinked' => array( 'GıreyêVurnayışêPeyênan' ),
+ 'Redirect' => array( 'Serberdış' ),
+ 'ResetTokens' => array( 'SimgeyanPeyserberze' ),
+ 'Revisiondelete' => array( 'ÇımraviyarnayışiBestere' ),
+ 'RunJobs' => array( 'KariBıgurene' ),
'Search' => array( 'Cıgeyre' ),
- 'Shortpages' => array( 'PeleyéKılmi' ),
- 'Specialpages' => array( 'PeréBexsey' ),
+ 'Shortpages' => array( 'PelêKılmi' ),
+ 'Specialpages' => array( 'PelêXısusiy' ),
'Statistics' => array( 'İstatistiki' ),
'Tags' => array( 'Etiketi' ),
+ 'TrackingCategories' => array( 'KategoriyêKeTeqibBenê' ),
'Unblock' => array( 'BloqiWedarne' ),
'Uncategorizedcategories' => array( 'KategoriyayékeKategoriyanébiyé' ),
'Uncategorizedimages' => array( 'DosyeyékeKategoriyanébiyé' ),
- 'Uncategorizedpages' => array( 'PeleyékeKategoriyanébiyé' ),
+ 'Uncategorizedpages' => array( 'PerreyékeKategoriyanébiyé' ),
'Uncategorizedtemplates' => array( 'ŞablonékeKategoriyanébiyé' ),
'Undelete' => array( 'Peyserbiya' ),
'Unlockdb' => array( 'DBKılitiAk' ),
@@ -150,10 +157,10 @@ $specialPageAliases = array(
'Version' => array( 'Versiyon' ),
'Wantedcategories' => array( 'KategoriyayékeWazéné' ),
'Wantedfiles' => array( 'DosyeyékeWazéné' ),
- 'Wantedpages' => array( 'PerékeWazéné' ),
+ 'Wantedpages' => array( 'PerrékeWazéné' ),
'Wantedtemplates' => array( 'ŞablonékeWazéné' ),
'Watchlist' => array( 'ListeySeyran' ),
- 'Whatlinkshere' => array( 'PerarêGre' ),
+ 'Whatlinkshere' => array( 'GreyNaySeraşıno' ),
'Withoutinterwiki' => array( 'Béİnterwiki' ),
);
@@ -171,18 +178,18 @@ $magicWords = array(
'currentmonthabbrev' => array( '1', 'AŞMİYANEWKİKILMKERDIŞ', 'CURRENTMONTHABBREV' ),
'currentday' => array( '1', 'ROCENEWKİ', 'CURRENTDAY' ),
'currentday2' => array( '1', 'ROCENEWKİ2', 'CURRENTDAY2' ),
- 'currentdayname' => array( '1', 'NAMEYÊROCENEWKİ', 'CURRENTDAYNAME' ),
+ 'currentdayname' => array( '1', 'NAMEYÉROCENEWKİ', 'CURRENTDAYNAME' ),
'currentyear' => array( '1', 'SERRENEWKİ', 'CURRENTYEAR' ),
'currenttime' => array( '1', 'DEMENEWKİ', 'CURRENTTIME' ),
'currenthour' => array( '1', 'SEHATNEWKİ', 'CURRENTHOUR' ),
'localmonth' => array( '1', 'WAREYAŞMİ', 'WAREYAŞMİ2', 'LOCALMONTH', 'LOCALMONTH2' ),
'localmonth1' => array( '1', 'WAREYAŞMİ1', 'LOCALMONTH1' ),
- 'localmonthname' => array( '1', 'NAMEYÊWAREYAŞMİ', 'LOCALMONTHNAME' ),
- 'localmonthnamegen' => array( '1', 'NAMEYWAREDÊAŞMİDACI', 'LOCALMONTHNAMEGEN' ),
+ 'localmonthname' => array( '1', 'NAMEYÉWAREYAŞMİ', 'LOCALMONTHNAME' ),
+ 'localmonthnamegen' => array( '1', 'NAMEYWAREDÉAŞMİDACI', 'LOCALMONTHNAMEGEN' ),
'localmonthabbrev' => array( '1', 'WAREYAŞMİKILMKERDIŞ', 'LOCALMONTHABBREV' ),
'localday' => array( '1', 'WAREYROCE', 'LOCALDAY' ),
'localday2' => array( '1', 'WAREYROCE2', 'LOCALDAY2' ),
- 'localdayname' => array( '1', 'NAMEYÊWAREYROCE', 'LOCALDAYNAME' ),
+ 'localdayname' => array( '1', 'NAMEYÉWAREYROCE', 'LOCALDAYNAME' ),
'localyear' => array( '1', 'WAREYSERRE', 'LOCALYEAR' ),
'localtime' => array( '1', 'WAREYDEME', 'LOCALTIME' ),
'localhour' => array( '1', 'WAREYSEHAT', 'LOCALHOUR' ),
@@ -192,30 +199,31 @@ $magicWords = array(
'numberofusers' => array( '1', 'AMARİYAKARBERAN', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'AMARİYAAKTİVKARBERAN', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'AMARİYAVURNAYIŞAN', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'AMARİYAMOCNAYIŞAN', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NAMEYPELA', 'PAGENAME' ),
'pagenamee' => array( '1', 'NAMEYPELAA', 'PAGENAMEE' ),
'namespace' => array( '1', 'CANAME', 'NAMESPACE' ),
'namespacee' => array( '1', 'CANAMEE', 'NAMESPACEE' ),
'namespacenumber' => array( '1', 'AMARİYACANAME', 'NAMESPACENUMBER' ),
- 'talkspace' => array( '1', 'CAYÊWERÊNAYIŞİ', 'TALKSPACE' ),
- 'talkspacee' => array( '1', 'CAYÊWERÊNAYIŞAN', 'TALKSPACEE' ),
- 'subjectspace' => array( '1', 'CAYÊMESEL', 'CAYÊWESİQE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
- 'subjectspacee' => array( '1', 'CAYÊMESELAN', 'CAYÊWESİQAN', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
- 'fullpagename' => array( '1', 'NAMEYPELAPÊRO', 'FULLPAGENAME' ),
- 'fullpagenamee' => array( '1', 'NAMEYPELAPÊRON', 'FULLPAGENAMEE' ),
- 'subpagename' => array( '1', 'NAMEYBINPELA', 'SUBPAGENAME' ),
- 'subpagenamee' => array( '1', 'NAMEYBINPELAA', 'SUBPAGENAMEE' ),
- 'basepagename' => array( '1', 'NAMEYSERPELA', 'BASEPAGENAME' ),
- 'basepagenamee' => array( '1', 'NAMEYSERPELAA', 'BASEPAGENAMEE' ),
- 'talkpagename' => array( '1', 'NAMEYPELAWERÊNAYIŞ', 'TALKPAGENAME' ),
- 'talkpagenamee' => array( '1', 'NAMEYPELAWERÊNAYIŞAN', 'TALKPAGENAMEE' ),
- 'subjectpagename' => array( '1', 'NAMEYPELAMESEL', 'NAMEYPELAWESİQE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
- 'subjectpagenamee' => array( '1', 'NAMEYPELAMESELER', 'NAMEYPELAQESİQER', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+ 'talkspace' => array( '1', 'CAYÉVATENAYIŞİ', 'TALKSPACE' ),
+ 'talkspacee' => array( '1', 'CAYÉVATENAYIŞAN', 'TALKSPACEE' ),
+ 'subjectspace' => array( '1', 'CAYÉMESEL', 'CAYÉWESİQE', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+ 'subjectspacee' => array( '1', 'CAYÉMESELAN', 'CAYÉWESİQAN', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+ 'fullpagename' => array( '1', 'NAMEYPERERPÉRO', 'FULLPAGENAME' ),
+ 'fullpagenamee' => array( '1', 'NAMEYPERERPÉRON', 'FULLPAGENAMEE' ),
+ 'subpagename' => array( '1', 'NAMEYBINPERER', 'SUBPAGENAME' ),
+ 'subpagenamee' => array( '1', 'NAMEYBINPERERAN', 'SUBPAGENAMEE' ),
+ 'rootpagename' => array( '1', 'NAMEYRÉÇERDAPERER', 'ROOTPAGENAME' ),
+ 'rootpagenamee' => array( '1', 'NAMEYRÉÇERDAPERAN', 'ROOTPAGENAMEE' ),
+ 'basepagename' => array( '1', 'NAMEYESASPERER', 'BASEPAGENAME' ),
+ 'basepagenamee' => array( '1', 'NAMEYESASPERAN', 'BASEPAGENAMEE' ),
+ 'talkpagename' => array( '1', 'NAMEYPERAVATENAYIŞİ', 'TALKPAGENAME' ),
+ 'talkpagenamee' => array( '1', 'NAMEYPERAVATENAYIŞAN', 'TALKPAGENAMEE' ),
+ 'subjectpagename' => array( '1', 'NAMEYPERDAMESEL', 'NAMEYPERDAWESİQE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+ 'subjectpagenamee' => array( '1', 'NAMEYPERDAMESELER', 'NAMEYPERDAWESİQER', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
'msg' => array( '0', 'MSC', 'MSG:' ),
'subst' => array( '0', 'KOPYAKE', 'ATEBERDE', 'SUBST:' ),
'safesubst' => array( '0', 'EMELEYATEBERDE', 'SAFESUBST:' ),
- 'msgnw' => array( '0', 'MSJNW:', 'MSGNW:' ),
+ 'msgnw' => array( '0', 'MSCNW:', 'MSGNW:' ),
'img_thumbnail' => array( '1', 'resmoqıckek', 'qıckek', 'thumbnail', 'thumb' ),
'img_manualthumb' => array( '1', 'resmoqıckek=$1', 'qıckek=$1', 'thumbnail=$1', 'thumb=$1' ),
'img_right' => array( '1', 'raşt', 'right' ),
@@ -223,32 +231,35 @@ $magicWords = array(
'img_none' => array( '1', 'çıniyo', 'none' ),
'img_width' => array( '1', '$1pik', '$1piksel', '$1px' ),
'img_center' => array( '1', 'werte', 'miyan', 'center', 'centre' ),
- 'img_framed' => array( '1', 'çerçeweya', 'çerçeweniyo', 'çerçewe', 'framed', 'enframed', 'frame' ),
- 'img_frameless' => array( '1', 'bêçerçewe', 'frameless' ),
- 'img_page' => array( '1', 'pela=$1', 'pela_$1', 'page=$1', 'page $1' ),
+ 'img_framed' => array( '1', 'çerçeweyın', 'çerçewekerden', 'çerçewe', 'framed', 'enframed', 'frame' ),
+ 'img_frameless' => array( '1', 'béçerçewe', 'frameless' ),
+ 'img_lang' => array( '1', 'zuwan=1$', 'lang=$1' ),
+ 'img_page' => array( '1', 'pera=$1', 'pera_$1', 'page=$1', 'page $1' ),
'img_upright' => array( '1', 'disleg', 'disleg=$1', 'disleg_$1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', 'sinor', 'border' ),
- 'img_baseline' => array( '1', 'Sinorêerdi', 'baseline' ),
- 'img_sub' => array( '1', 'bın', 'sub' ),
- 'img_super' => array( '1', 'corên', 'cor', 'super', 'sup' ),
+ 'img_baseline' => array( '1', 'Sinoréerdi', 'baseline' ),
+ 'img_sub' => array( '1', 'anvar', 'sub' ),
+ 'img_super' => array( '1', 'corén', 'cor', 'super', 'sup' ),
'img_top' => array( '1', 'gedug', 'top' ),
'img_text_top' => array( '1', 'gedug-metin', 'text-top' ),
'img_middle' => array( '1', 'merkez', 'middle' ),
'img_bottom' => array( '1', 'erd', 'bottom' ),
'img_text_bottom' => array( '1', 'erd-metin', 'text-bottom' ),
'img_link' => array( '1', 'gre=$1', 'link=$1' ),
+ 'img_alt' => array( '1', 'klik=$1', 'alt=$1' ),
+ 'img_class' => array( '1', 'sınıf=$1', 'class=$1' ),
'int' => array( '0', 'İNT:', 'INT:' ),
'sitename' => array( '1', 'NAMEYSİTA', 'SITENAME' ),
'ns' => array( '0', 'CN', 'NS:' ),
'nse' => array( '0', 'CNV', 'NSE:' ),
'localurl' => array( '0', 'LOKALGRE', 'LOCALURL:' ),
'localurle' => array( '0', 'LOKALGREV', 'LOCALURLE:' ),
- 'articlepath' => array( '0', 'SOPAWESİQAN', 'ARTICLEPATH' ),
- 'pageid' => array( '0', 'NIMREYPELA', 'PAGEID' ),
+ 'articlepath' => array( '0', 'SOPAPERAN', 'ARTICLEPATH' ),
+ 'pageid' => array( '0', 'NIMREYPERER', 'PAGEID' ),
'server' => array( '0', 'ARDEN', 'SERVER' ),
'servername' => array( '0', 'NAMEYARDEN', 'SERVERNAME' ),
'scriptpath' => array( '0', 'RAYASCRIPTİ', 'SCRIPTPATH' ),
- 'stylepath' => array( '0', 'TERZÊTEWRİ', 'STYLEPATH' ),
+ 'stylepath' => array( '0', 'TERZÉTEWRİ', 'STYLEPATH' ),
'grammar' => array( '0', 'GRAMER:', 'GRAMMAR:' ),
'gender' => array( '0', 'CİNSİYET:', 'GENDER:' ),
'notitleconvert' => array( '0', '__SERNAMEVURNAYIŞÇINO__', '__SVÇ__', '__NOTITLECONVERT__', '__NOTC__' ),
@@ -259,58 +270,59 @@ $magicWords = array(
'localdow' => array( '1', 'WAREYROCAHEFTİ', 'LOCALDOW' ),
'revisionid' => array( '1', 'NIMREYREVİZYONİ', 'REVISIONID' ),
'revisionday' => array( '1', 'ROCAREVİZYONİ', 'REVISIONDAY' ),
- 'revisionday2' => array( '1', 'ROCAREVİZYON1', 'REVISIONDAY2' ),
+ 'revisionday2' => array( '1', 'ROCAREVİZYON2', 'REVISIONDAY2' ),
'revisionmonth' => array( '1', 'AŞMAREVİZYONİ', 'REVISIONMONTH' ),
'revisionmonth1' => array( '1', 'AŞMAREVİZYONİ1', 'REVISIONMONTH1' ),
'revisionyear' => array( '1', 'SERRAREVİZYONİ', 'REVISIONYEAR' ),
- 'revisiontimestamp' => array( '1', 'MELUMATÊREVİZYONÊDEMİ', 'REVISIONTIMESTAMP' ),
- 'revisionuser' => array( '1', 'REVİZYONKARBER', 'REVISIONUSER' ),
+ 'revisiontimestamp' => array( '1', 'MALUMATAREVİZYONDADEMİ', 'REVISIONTIMESTAMP' ),
+ 'revisionuser' => array( '1', 'REVİZYONAKARBERİ', 'REVISIONUSER' ),
+ 'revisionsize' => array( '1', 'EBATAREVİZYONİ', 'REVISIONSIZE' ),
'plural' => array( '0', 'ZAFEN:', 'PLURAL:' ),
- 'fullurl' => array( '0', 'GREPÊRO:', 'FULLURL:' ),
- 'fullurle' => array( '0', 'GREYOPÊRON:', 'FULLURLE:' ),
- 'canonicalurl' => array( '0', 'GREYÊKANONİK:', 'CANONICALURL:' ),
+ 'fullurl' => array( '0', 'GREHEME:', 'FULLURL:' ),
+ 'fullurle' => array( '0', 'GREYHEME:', 'FULLURLE:' ),
+ 'canonicalurl' => array( '0', 'GREYÉKANONİK:', 'CANONICALURL:' ),
'canonicalurle' => array( '0', 'GREYOKANONİK:', 'CANONICALURLE:' ),
'lcfirst' => array( '0', 'KHİLK:', 'LCFIRST:' ),
'ucfirst' => array( '0', 'BHİLK:', 'UCFIRST:' ),
'lc' => array( '0', 'KH:', 'LC:' ),
'uc' => array( '0', 'BH:', 'UC:' ),
- 'raw' => array( '0', 'XAM:', 'RAW:' ),
- 'displaytitle' => array( '1', 'SERNAMİBIMOCNE', 'DISPLAYTITLE' ),
- 'newsectionlink' => array( '1', '__GREYÊSERNAMEDÊNEWİ__', '__NEWSECTIONLINK__' ),
- 'nonewsectionlink' => array( '1', '__GREYÊSERNAMEDÊNEWİÇINO__', '__NONEWSECTIONLINK__' ),
- 'currentversion' => array( '1', 'VERSİYONÊNEWKİ', 'CURRENTVERSION' ),
- 'currenttimestamp' => array( '1', 'WAREYSEHATÊNEWKİ', 'CURRENTTIMESTAMP' ),
- 'localtimestamp' => array( '1', 'MALUMATÊWAREYSEHAT', 'LOCALTIMESTAMP' ),
+ 'raw' => array( '0', 'TEZE:', 'RAW:' ),
+ 'displaytitle' => array( '1', 'SERNAMİBASNI', 'DISPLAYTITLE' ),
+ 'newsectionlink' => array( '1', '__GREYÉSERNAMEDÉNEWİ__', '__NEWSECTIONLINK__' ),
+ 'nonewsectionlink' => array( '1', '__GREYÉSERNAMEDÉNEWİÇINO__', '__NONEWSECTIONLINK__' ),
+ 'currentversion' => array( '1', 'VERSİYONVNEWKİ', 'CURRENTVERSION' ),
+ 'currenttimestamp' => array( '1', 'WAREYSEHATÉNEWKİ', 'CURRENTTIMESTAMP' ),
+ 'localtimestamp' => array( '1', 'MALUMATÉWAREYSEHAT', 'LOCALTIMESTAMP' ),
'directionmark' => array( '1', 'HETANIŞANKERDIŞ', 'HETNIŞAN', 'DIRECTIONMARK', 'DIRMARK' ),
- 'language' => array( '0', '#ZIWAN', '#LANGUAGE:' ),
- 'contentlanguage' => array( '1', 'ZIWANÊESTİN', 'ZIWESTEN', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
- 'pagesinnamespace' => array( '1', 'PELEYÊKECADÊNAMİDEYÊ', 'PELECN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
- 'numberofadmins' => array( '1', 'AMARİYAXİZMETKARAN', 'NUMBEROFADMINS' ),
+ 'language' => array( '0', '#ZIWAN:', '#LANGUAGE:' ),
+ 'contentlanguage' => array( '1', 'ZUWANÉKESTÉ', 'ZUWESTEN', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+ 'pagesinnamespace' => array( '1', 'PERÉKCADÉNAMİDEYÉ', 'PELECN', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+ 'numberofadmins' => array( '1', 'AMARİYAADMİNAN', 'NUMBEROFADMINS' ),
'formatnum' => array( '0', 'BABETNAYIŞ', 'FORMATNUM' ),
- 'padleft' => array( '0', 'ÇEPİPIRKE', 'PADLEFT' ),
- 'padright' => array( '0', 'RAŞTİPIRKE', 'PADRIGHT' ),
- 'special' => array( '0', 'xısusi', 'special' ),
- 'speciale' => array( '0', 'xısusiye', 'speciale' ),
+ 'padleft' => array( '0', 'ÇEPİPIRK', 'PADLEFT' ),
+ 'padright' => array( '0', 'RAŞTİPIRK', 'PADRIGHT' ),
+ 'special' => array( '0', 'bağse', 'special' ),
+ 'speciale' => array( '0', 'bağsiye', 'speciale' ),
'defaultsort' => array( '1', 'RATNAYIŞOHESBNAYIŞ', 'SIRMEYRATNAYIŞOHESBNAYIŞ', 'KATEGORİYARATNAYIŞOHESBNAYIŞ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'RAYADOSYA:', 'FILEPATH:' ),
'tag' => array( '0', 'etiket', 'tag' ),
'hiddencat' => array( '1', '__KATEGORİYANIMITİ__', '__HIDDENCAT__' ),
- 'pagesincategory' => array( '1', 'PELEYÊKEKATEGORİDEYÊ', 'KATDÊPELEY', 'PAGESINCATEGORY', 'PAGESINCAT' ),
- 'pagesize' => array( '1', 'EBATÊPELA', 'PAGESIZE' ),
+ 'pagesincategory' => array( '1', 'PERÉKKATEGORİDEYÉ', 'PERKATMİYAN', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+ 'pagesize' => array( '1', 'EBATAPERER', 'PAGESIZE' ),
'index' => array( '1', '__SERSIQ__', '__INDEX__' ),
'noindex' => array( '1', '__SERSIQÇINYO__', '__NOINDEX__' ),
- 'numberingroup' => array( '1', 'GRUBDEAMARE', 'AMARİYAGRUBER', 'NUMBERINGROUP', 'NUMINGROUP' ),
+ 'numberingroup' => array( '1', 'AMARİYAGRUBER', 'AMARGRUB', 'NUMBERINGROUP', 'NUMINGROUP' ),
'staticredirect' => array( '1', '__STATİKHETENAYIŞ__', '__STATICHETENAYIŞ__', '__STATICREDIRECT__' ),
- 'protectionlevel' => array( '1', 'SEWİYEYÊSTARE', 'PROTECTIONLEVEL' ),
- 'formatdate' => array( '0', 'demêformati', 'formatdate', 'dateformat' ),
+ 'protectionlevel' => array( '1', 'SEWİYEYASTARAN', 'PROTECTIONLEVEL' ),
+ 'formatdate' => array( '0', 'deméformati', 'formatdate', 'dateformat' ),
'url_path' => array( '0', 'RAY', 'PATH' ),
'url_wiki' => array( '0', 'WİKİ', 'WIKI' ),
'url_query' => array( '0', 'PERSİYE', 'QUERY' ),
- 'defaultsort_noerror' => array( '0', 'xırabinçıniya', 'noerror' ),
+ 'defaultsort_noerror' => array( '0', 'Ğırabinçıniya', 'noerror' ),
'defaultsort_noreplace' => array( '0', 'cewabçıniyo', 'noreplace' ),
- 'pagesincategory_all' => array( '0', 'pêro', 'all' ),
- 'pagesincategory_pages' => array( '0', 'peley', 'pages' ),
- 'pagesincategory_subcats' => array( '0', 'bınkati', 'subcats' ),
+ 'pagesincategory_all' => array( '0', 'péro', 'all' ),
+ 'pagesincategory_pages' => array( '0', 'peri', 'pages' ),
+ 'pagesincategory_subcats' => array( '0', 'bınkatategori', 'subcats' ),
'pagesincategory_files' => array( '0', 'dosyey', 'files' ),
);
diff --git a/languages/messages/MessagesDv.php b/languages/messages/MessagesDv.php
index 1f49212f..72d645ed 100644
--- a/languages/messages/MessagesDv.php
+++ b/languages/messages/MessagesDv.php
@@ -13,7 +13,6 @@ $rtl = true;
$namespaceNames = array(
NS_MEDIA => 'މީޑިއާ',
NS_SPECIAL => 'ޚާއްސަ',
- NS_MAIN => '',
NS_TALK => 'ޚިޔާލު',
NS_USER => 'މެމްބަރު',
NS_USER_TALK => 'މެމްބަރުގެ_ވާހަކަ',
diff --git a/languages/messages/MessagesEl.php b/languages/messages/MessagesEl.php
index a6a64f6a..0334344e 100644
--- a/languages/messages/MessagesEl.php
+++ b/languages/messages/MessagesEl.php
@@ -61,6 +61,7 @@ $namespaceAliases = array(
$specialPageAliases = array(
'Activeusers' => array( 'ΕνεργοίΧρήστες' ),
'Allmessages' => array( 'ΌλαΤαΜηνύματα' ),
+ 'AllMyUploads' => array( 'ΌλαΤαΑρχείαΜου' ),
'Allpages' => array( 'ΌλεςΟιΣελίδες' ),
'Ancientpages' => array( 'ΑρχαίεςΣελίδες' ),
'Badtitle' => array( 'ΚακόςΤίτλος' ),
@@ -77,7 +78,9 @@ $specialPageAliases = array(
'CreateAccount' => array( 'ΔημιουργίαΛογαριασμού' ),
'Deadendpages' => array( 'ΑδιέξοδεςΣελίδες' ),
'DeletedContributions' => array( 'ΔιαγραμμένεςΣυνεισφορές' ),
+ 'Diff' => array( 'Διαφορά' ),
'DoubleRedirects' => array( 'ΔιπλέςΑνακατευθύνσεις' ),
+ 'EditWatchlist' => array( 'ΕπεξεργασίαΛίσταςΠαρακολούθησης' ),
'Emailuser' => array( 'EmailΧρήστη' ),
'ExpandTemplates' => array( 'ΕπέκτασηΠροτύπων' ),
'Export' => array( 'Εξαγωγή' ),
@@ -111,15 +114,16 @@ $specialPageAliases = array(
'MyLanguage' => array( 'ΗΓλώσσαΜου' ),
'Mypage' => array( 'ΗΣελίδαΜου' ),
'Mytalk' => array( 'ΗΣυζήτησήΜου' ),
- 'Myuploads' => array( 'ΟιΕπιφορτώσειςΜου' ),
+ 'Myuploads' => array( 'ΤαΑρχείαΜου', 'ΤαΑνεβάσματάΜου', 'ΟιΕπιφορτώσειςΜου' ),
'Newimages' => array( 'ΝέαΑρχεία', 'ΝέεςΕικόνες' ),
'Newpages' => array( 'ΝέεςΣελίδες' ),
'Popularpages' => array( 'ΔημοφιλείςΣελίδες' ),
'Preferences' => array( 'Προτιμήσεις' ),
'Prefixindex' => array( 'ΕυρετήριοΠροθεμάτων' ),
'Protectedpages' => array( 'ΠροστατευμένεςΣελίδες' ),
- 'Protectedtitles' => array( 'ΠροστετευμένοιΤίτλοι' ),
- 'Randompage' => array( 'Τυχαία', 'ΤυχαίαΣελίδα' ),
+ 'Protectedtitles' => array( 'ΠροστατευμένοιΤίτλοι' ),
+ 'Randompage' => array( 'Τυχαία', 'ΤυχαίαΣελίδα', 'Τυχαίο' ),
+ 'RandomInCategory' => array( 'ΤυχαίαΣτηνΚατηγορία', 'ΤυχαίοΣτηνΚατηγορία' ),
'Randomredirect' => array( 'ΤυχαίαΑνακατεύθυνση' ),
'Recentchanges' => array( 'ΠρόσφατεςΑλλαγές' ),
'Recentchangeslinked' => array( 'ΣυνδεδεμένεςΠρόσφατεςΑλλαγές', 'ΣχετικέςΑλλαγές' ),
@@ -130,6 +134,7 @@ $specialPageAliases = array(
'Specialpages' => array( 'ΕιδικέςΣελίδες' ),
'Statistics' => array( 'Στατιστικά' ),
'Tags' => array( 'Ετικέτες' ),
+ 'TrackingCategories' => array( 'ΚατηγορίεςΑνίχνευσης' ),
'Uncategorizedcategories' => array( 'ΑκατηγοριοποίητεςΚατηγορίες' ),
'Uncategorizedimages' => array( 'ΑκατηγοριοποίηταΑρχεία', 'ΑκατηγοριοποίητεςΕικόνες' ),
'Uncategorizedpages' => array( 'ΑκατηγοριοποίητεςΣελίδες' ),
@@ -140,7 +145,7 @@ $specialPageAliases = array(
'Unusedimages' => array( 'ΑχρησιμοποίηταΑρχεία' ),
'Unusedtemplates' => array( 'ΜηΧρησιμοποιούμεναΠρότυπα' ),
'Unwatchedpages' => array( 'ΜηΠαρακολουθούμενεςΣελίδες' ),
- 'Upload' => array( 'Επιφόρτωση' ),
+ 'Upload' => array( 'Ανέβασμα', 'Επιφόρτωση' ),
'Userlogin' => array( 'ΣύνδεσηΧρήστη' ),
'Userlogout' => array( 'ΑποσύνδεσηΧρήστη' ),
'Userrights' => array( 'ΔικαιώματαΧρηστών' ),
@@ -189,7 +194,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'ΑΡΙΘΜΟΣΧΡΗΣΤΩΝ', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'ΕΝΕΡΓΟΙΧΡΗΣΤΕΣ', 'ΑΡΙΘΜΟΣΕΝΕΡΓΩΝΧΡΗΣΤΩΝ', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'ΑΡΙΘΜΟΣΕΠΕΞΕΡΓΑΣΙΩΝ', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'ΑΡΙΘΜΟΣΕΜΦΑΝΙΣΕΩΝ', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣ', 'PAGENAME' ),
'pagenamee' => array( '1', 'ΟΝΟΜΑΣΕΛΙΔΑΣΚ', 'PAGENAMEE' ),
'namespace' => array( '1', 'ΠΕΡΙΟΧΗ', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php
index 0a102799..23b702cb 100644
--- a/languages/messages/MessagesEn.php
+++ b/languages/messages/MessagesEn.php
@@ -240,7 +240,6 @@ $magicWords = array(
'numberofusers' => array( 1, 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( 1, 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( 1, 'NUMBEROFEDITS' ),
- 'numberofviews' => array( 1, 'NUMBEROFVIEWS' ),
'pagename' => array( 1, 'PAGENAME' ),
'pagenamee' => array( 1, 'PAGENAMEE' ),
'namespace' => array( 1, 'NAMESPACE' ),
@@ -388,6 +387,7 @@ $specialPageAliases = array(
'Allmessages' => array( 'AllMessages' ),
'AllMyUploads' => array( 'AllMyUploads', 'AllMyFiles' ),
'Allpages' => array( 'AllPages' ),
+ 'ApiHelp' => array( 'ApiHelp' ),
'Ancientpages' => array( 'AncientPages' ),
'Badtitle' => array( 'Badtitle' ),
'Blankpage' => array( 'BlankPage' ),
@@ -405,6 +405,7 @@ $specialPageAliases = array(
'DeletedContributions' => array( 'DeletedContributions' ),
'Diff' => array( 'Diff' ),
'DoubleRedirects' => array( 'DoubleRedirects' ),
+ 'EditTags' => array( 'EditTags' ),
'EditWatchlist' => array( 'EditWatchlist' ),
'Emailuser' => array( 'EmailUser', 'Email' ),
'ExpandTemplates' => array( 'ExpandTemplates' ),
@@ -536,7 +537,7 @@ $preloadedMessages = array(
'accesskey-ca-history',
'accesskey-ca-nstab-main',
'accesskey-ca-talk',
- 'accesskey-ca-view',
+ 'accesskey-ca-viewsource',
'accesskey-n-currentevents',
'accesskey-n-help',
'accesskey-n-mainpage-description',
@@ -545,15 +546,20 @@ $preloadedMessages = array(
'accesskey-n-recentchanges',
'accesskey-p-logo',
'accesskey-pt-login',
+ 'accesskey-pt-createaccount',
'accesskey-search',
'accesskey-search-fulltext',
'accesskey-search-go',
+ 'accesskey-t-info',
'accesskey-t-permalink',
+ 'accesskey-t-print',
'accesskey-t-recentchangeslinked',
'accesskey-t-specialpages',
'accesskey-t-whatlinkshere',
'actions',
'anonnotice',
+ 'brackets',
+ 'comma-separator',
'currentevents',
'currentevents-url',
'disclaimerpage',
@@ -575,7 +581,6 @@ $preloadedMessages = array(
'navigation',
'nav-login-createaccount',
'nstab-main',
- 'nstab-talk',
'opensearch-desc',
'pagecategories',
'pagecategorieslink',
@@ -597,6 +602,7 @@ $preloadedMessages = array(
'search',
'searcharticle',
'searchbutton',
+ 'searchsuggest-search',
'sidebar',
'navigation-heading',
'site-atom-feed',
@@ -609,7 +615,7 @@ $preloadedMessages = array(
'tooltip-ca-history',
'tooltip-ca-nstab-main',
'tooltip-ca-talk',
- 'tooltip-ca-view',
+ 'tooltip-ca-viewsource',
'tooltip-n-currentevents',
'tooltip-n-help',
'tooltip-n-mainpage-description',
@@ -617,13 +623,14 @@ $preloadedMessages = array(
'tooltip-n-randompage',
'tooltip-n-recentchanges',
'tooltip-p-logo',
- 'tooltip-p-navigation',
- 'tooltip-p-tb',
'tooltip-pt-login',
+ 'tooltip-pt-createaccount',
'tooltip-search',
'tooltip-search-fulltext',
'tooltip-search-go',
+ 'tooltip-t-info',
'tooltip-t-permalink',
+ 'tooltip-t-print',
'tooltip-t-recentchangeslinked',
'tooltip-t-specialpages',
'tooltip-t-whatlinkshere',
@@ -634,5 +641,6 @@ $preloadedMessages = array(
'viewcount',
'views',
'whatlinkshere',
+ 'word-separator',
);
diff --git a/languages/messages/MessagesEo.php b/languages/messages/MessagesEo.php
index 05f3be80..e31710b9 100644
--- a/languages/messages/MessagesEo.php
+++ b/languages/messages/MessagesEo.php
@@ -184,7 +184,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NOMBRODEUZANTOJ', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NOMBRODEAKTIVAJUZANTOJ', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NOMBRODEREDAKTOJ', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NOMBRODEVIZITOJ', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'PAĜONOMO', 'PAGXONOMO', 'PAĜNOMO', 'PAGXNOMO', 'PAGENAME' ),
'pagenamee' => array( '1', 'PAĜONOMOO', 'PAGXONOMOO', 'PAĜNOMOO', 'PAGXNOMOO', 'PAGENAMEE' ),
'namespace' => array( '1', 'NOMSPACO', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesEs.php b/languages/messages/MessagesEs.php
index e872d4e7..52e363c4 100644
--- a/languages/messages/MessagesEs.php
+++ b/languages/messages/MessagesEs.php
@@ -39,12 +39,12 @@ $namespaceGenderAliases = array(
$specialPageAliases = array(
'Activeusers' => array( 'UsuariosActivos' ),
- 'Allmessages' => array( 'TodosLosMensajes' ),
- 'AllMyUploads' => array( 'TodasMisSubidas', 'TodosMisArchivos' ),
+ 'Allmessages' => array( 'TodosLosMensajes', 'Todos_los_mensajes' ),
+ 'AllMyUploads' => array( 'TodasMisSubidas', 'Todas_mis_subidas', 'TodosMisArchivos', 'Todos_mis_archivos' ),
'Allpages' => array( 'Todas', 'Todas_las_páginas' ),
'Ancientpages' => array( 'PáginasAntiguas', 'Páginas_antiguas' ),
'Badtitle' => array( 'Título_incorrecto' ),
- 'Blankpage' => array( 'PáginaEnBlanco', 'BlanquearPágina', 'Blanquear_página', 'Página_en_blanco' ),
+ 'Blankpage' => array( 'Blanquear_página', 'PáginaEnBlanco', 'BlanquearPágina', 'Página_en_blanco' ),
'Block' => array( 'Bloquear' ),
'Booksources' => array( 'FuentesDeLibros', 'Fuentes_de_libros' ),
'BrokenRedirects' => array( 'RedireccionesRotas', 'Redirecciones_rotas' ),
@@ -56,7 +56,7 @@ $specialPageAliases = array(
'Contributions' => array( 'Contribuciones' ),
'CreateAccount' => array( 'Crear_una_cuenta', 'CrearCuenta' ),
'Deadendpages' => array( 'PáginasSinSalida', 'Páginas_sin_salida' ),
- 'DeletedContributions' => array( 'ContribucionesBorradas', 'Contribuciones_Borradas' ),
+ 'DeletedContributions' => array( 'ContribucionesBorradas', 'Contribuciones_borradas', 'Contribuciones_Borradas' ),
'DoubleRedirects' => array( 'RedireccionesDobles', 'Redirecciones_dobles' ),
'EditWatchlist' => array( 'EditarSeguimiento' ),
'Emailuser' => array( 'Enviar_correo_electrónico', 'MandarEmailUsuario' ),
@@ -66,7 +66,8 @@ $specialPageAliases = array(
'FileDuplicateSearch' => array( 'BuscarArchivosDuplicados', 'Buscar_archivos_duplicados' ),
'Filepath' => array( 'RutaDeArchivo', 'Ruta_de_archivo' ),
'Import' => array( 'Importar' ),
- 'Invalidateemail' => array( 'InvalidarEmail', 'Invalidar_correo_electrónico' ),
+ 'Invalidateemail' => array( 'Invalidar_correo_electrónico', 'InvalidarEmail' ),
+ 'JavaScriptTest' => array( 'PruebaJavaScript' ),
'BlockList' => array( 'UsuariosBloqueados', 'Lista_de_usuarios_bloqueados' ),
'LinkSearch' => array( 'BúsquedaDeEnlaces', 'Búsqueda_de_enlaces' ),
'Listadmins' => array( 'ListaDeAdministradores', 'Lista_de_administradores' ),
@@ -83,6 +84,7 @@ $specialPageAliases = array(
'MIMEsearch' => array( 'BuscarPorMIME', 'Buscar_por_MIME' ),
'Mostcategories' => array( 'MásCategorizadas', 'Más_categorizadas' ),
'Mostimages' => array( 'MásImágenes', 'Con_más_imágenes' ),
+ 'Mostinterwikis' => array( 'MásInterwikis' ),
'Mostlinked' => array( 'MásEnlazados', 'Más_enlazados', 'MásEnlazadas' ),
'Mostlinkedcategories' => array( 'CategoríasMásUsadas', 'Categorías_más_usadas' ),
'Mostlinkedtemplates' => array( 'PlantillasMásUsadas', 'Plantillas_más_usadas' ),
@@ -103,7 +105,7 @@ $specialPageAliases = array(
'Protectedpages' => array( 'PáginasProtegidas', 'Páginas_protegidas' ),
'Protectedtitles' => array( 'TítulosProtegidos', 'Títulos_protegidos' ),
'Randompage' => array( 'Aleatoria', 'Aleatorio', 'Página_aleatoria' ),
- 'RandomInCategory' => array( 'Aleatorio_en_categoría' ),
+ 'RandomInCategory' => array( 'Aleatorio_en_categoría', 'Aleatoria_en_categoría' ),
'Randomredirect' => array( 'RedirecciónAleatoria', 'Redirección_aleatoria' ),
'Recentchanges' => array( 'CambiosRecientes', 'Cambios_recientes' ),
'Recentchangeslinked' => array( 'CambiosEnEnlazadas', 'Cambios_en_enlazadas' ),
@@ -115,6 +117,7 @@ $specialPageAliases = array(
'Specialpages' => array( 'PáginasEspeciales', 'Páginas_especiales' ),
'Statistics' => array( 'Estadísticas' ),
'Tags' => array( 'Etiquetas' ),
+ 'TrackingCategories' => array( 'CategoríasDeSeguimiento' ),
'Unblock' => array( 'Desbloquear' ),
'Uncategorizedcategories' => array( 'CategoríasSinCategorizar', 'Categorías_sin_categorizar' ),
'Uncategorizedimages' => array( 'ImágenesSinCategorizar', 'Imágenes_sin_categorizar' ),
@@ -176,7 +179,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NÚMERODEEDICIONES', 'NUMERODEEDICIONES', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NÚMERODEVISTAS', 'NUMERODEVISTAS', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NOMBREDEPAGINA', 'NOMBREDEPÁGINA', 'PAGENAME' ),
'pagenamee' => array( '1', 'NOMBREDEPAGINAC', 'NOMBREDEPÁGINAC', 'PAGENAMEE' ),
'namespace' => array( '1', 'ESPACIODENOMBRE', 'NAMESPACE' ),
@@ -208,13 +210,19 @@ $magicWords = array(
'img_center' => array( '1', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ),
'img_framed' => array( '1', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'sinmarco', 'sin_enmarcar', 'sinenmarcar', 'frameless' ),
+ 'img_lang' => array( '1', 'idioma=$1', 'lang=$1' ),
'img_page' => array( '1', 'pagina=$1', 'página=$1', 'pagina_$1', 'página_$1', 'page=$1', 'page $1' ),
'img_border' => array( '1', 'borde', 'border' ),
+ 'img_top' => array( '1', 'arriba', 'top' ),
+ 'img_middle' => array( '1', 'medio', 'middle' ),
+ 'img_bottom' => array( '1', 'abajo', 'bottom' ),
'img_link' => array( '1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ),
'sitename' => array( '1', 'NOMBREDELSITIO', 'SITENAME' ),
'ns' => array( '0', 'EN:', 'NS:' ),
'localurl' => array( '0', 'URLLOCAL:', 'LOCALURL:' ),
'localurle' => array( '0', 'URLLOCALC:', 'LOCALURLE:' ),
+ 'articlepath' => array( '0', 'RUTAARTÍCULO', 'RUTAARTICULO', 'ARTICLEPATH' ),
+ 'pageid' => array( '0', 'IDDEPÁGINA', 'IDPÁGINA', 'IDDEPAGINA', 'IDPAGINA', 'PAGEID' ),
'server' => array( '0', 'SERVIDOR', 'SERVER' ),
'servername' => array( '0', 'NOMBRESERVIDOR', 'SERVERNAME' ),
'scriptpath' => array( '0', 'RUTASCRIPT', 'RUTADESCRIPT', 'SCRIPTPATH' ),
@@ -231,9 +239,11 @@ $magicWords = array(
'revisionday' => array( '1', 'DIADEREVISION', 'DIAREVISION', 'DÍADEREVISIÓN', 'DÍAREVISIÓN', 'REVISIONDAY' ),
'revisionday2' => array( '1', 'DIADEREVISION2', 'DIAREVISION2', 'DÍADEREVISIÓN2', 'DÍAREVISIÓN2', 'REVISIONDAY2' ),
'revisionmonth' => array( '1', 'MESDEREVISION', 'MESDEREVISIÓN', 'MESREVISION', 'MESREVISIÓN', 'REVISIONMONTH' ),
+ 'revisionmonth1' => array( '1', 'MESDEREVISION1', 'MESDEREVISIÓN1', 'MESREVISION1', 'MESREVISIÓN1', 'REVISIONMONTH1' ),
'revisionyear' => array( '1', 'AÑODEREVISION', 'AÑODEREVISIÓN', 'AÑOREVISION', 'AÑOREVISIÓN', 'REVISIONYEAR' ),
'revisiontimestamp' => array( '1', 'MARCADEHORADEREVISION', 'MARCADEHORADEREVISIÓN', 'REVISIONTIMESTAMP' ),
'revisionuser' => array( '1', 'USUARIODEREVISION', 'USUARIODEREVISIÓN', 'REVISIONUSER' ),
+ 'revisionsize' => array( '1', 'TAMAÑODEREVISIÓN', 'TAMAÑODEREVISION', 'REVISIONSIZE' ),
'fullurl' => array( '0', 'URLCOMPLETA:', 'FULLURL:' ),
'fullurle' => array( '0', 'URLCOMPLETAC:', 'FULLURLE:' ),
'canonicalurl' => array( '0', 'URLCANONICA:', 'CANONICALURL:' ),
@@ -256,7 +266,10 @@ $magicWords = array(
'pagesinnamespace' => array( '1', 'PÁGINASENESPACIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
'numberofadmins' => array( '1', 'NÚMEROADMINIISTRADORES', 'NÚMEROADMINS', 'NUMEROADMINS', 'NUMEROADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMERODEADMINS', 'NÚMERODEADMINISTRADORES', 'NÚMERODEADMINS', 'NUMBEROFADMINS' ),
'formatnum' => array( '0', 'FORMATONÚMERO', 'FORMATONUMERO', 'FORMATNUM' ),
+ 'padleft' => array( '0', 'RELLENARIZQUIERDA', 'RELLENARIZQ', 'PADLEFT' ),
+ 'padright' => array( '0', 'RELLENARDERECHA', 'RELLENARDER', 'PADRIGHT' ),
'special' => array( '0', 'especial', 'special' ),
+ 'speciale' => array( '0', 'especialc', 'speciale' ),
'defaultsort' => array( '1', 'ORDENAR:', 'CLAVEDEORDENPREDETERMINADO:', 'ORDENDECATEGORIAPREDETERMINADO:', 'ORDENDECATEGORÍAPREDETERMINADO:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'RUTAARCHIVO:', 'RUTARCHIVO:', 'RUTADEARCHIVO:', 'FILEPATH:' ),
'tag' => array( '0', 'etiqueta', 'tag' ),
@@ -266,9 +279,16 @@ $magicWords = array(
'index' => array( '1', '__INDEXAR__', '__INDEX__' ),
'noindex' => array( '1', '__NOINDEXAR__', '__NOINDEX__' ),
'numberingroup' => array( '1', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMENGRUPO', 'NÚMENGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
- 'staticredirect' => array( '1', '__REDIRECCIONESTATICA__', '__REDIRECCIÓNESTÁTICA__', '__STATICREDIRECT__' ),
- 'protectionlevel' => array( '1', 'NIVELDEPROTECCIÓN', 'PROTECTIONLEVEL' ),
+ 'staticredirect' => array( '1', '__REDIRECCIÓNESTÁTICA__', '__REDIRECCIONESTATICA__', '__STATICREDIRECT__' ),
+ 'protectionlevel' => array( '1', 'NIVELDEPROTECCIÓN', 'NIVELDEPROTECCION', 'PROTECTIONLEVEL' ),
'formatdate' => array( '0', 'formatodefecha', 'formatearfecha', 'formatdate', 'dateformat' ),
+ 'url_path' => array( '0', 'RUTA', 'PATH' ),
+ 'url_query' => array( '0', 'BÚSQUEDA', 'QUERY' ),
+ 'defaultsort_noreplace' => array( '0', 'noreemplazar', 'noreplace' ),
+ 'pagesincategory_all' => array( '0', 'todo', 'all' ),
+ 'pagesincategory_pages' => array( '0', 'páginas', 'pages' ),
+ 'pagesincategory_subcats' => array( '0', 'subcategorías', 'subcats' ),
+ 'pagesincategory_files' => array( '0', 'archivos', 'files' ),
);
$datePreferences = false;
diff --git a/languages/messages/MessagesEt.php b/languages/messages/MessagesEt.php
index e30b2429..1aaabd6e 100644
--- a/languages/messages/MessagesEt.php
+++ b/languages/messages/MessagesEt.php
@@ -50,6 +50,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'Konto_loomine' ),
'Deadendpages' => array( 'Edasipääsuta_leheküljed' ),
'DeletedContributions' => array( 'Kustutatud_kaastöö' ),
+ 'Diff' => array( 'Erin' ),
'DoubleRedirects' => array( 'Kahekordsed_ümbersuunamised' ),
'EditWatchlist' => array( 'Jälgimisloendi_redigeerimine' ),
'Emailuser' => array( 'E-kirja_saatmine' ),
@@ -68,12 +69,13 @@ $specialPageAliases = array(
'Listfiles' => array( 'Failide_loend' ),
'Listgrouprights' => array( 'Kasutajarühma_õigused' ),
'Listredirects' => array( 'Ümbersuunamised' ),
+ 'ListDuplicatedFiles' => array( 'Duplikaatfailide_loend' ),
'Listusers' => array( 'Kasutajate_loend' ),
'Lockdb' => array( 'Andmebaasi_lukustamine', 'Lukusta_andmebaas' ),
'Log' => array( 'Logid' ),
'Lonelypages' => array( 'Viitamata_leheküljed' ),
'Longpages' => array( 'Pikad_leheküljed' ),
- 'MergeHistory' => array( 'Liitmisajalugu' ),
+ 'MergeHistory' => array( 'Ajaloo_liitmine' ),
'MIMEsearch' => array( 'MIME_otsing' ),
'Mostcategories' => array( 'Enim_kategoriseeritud' ),
'Mostimages' => array( 'Kõige_kasutatumad_failid' ),
@@ -110,6 +112,7 @@ $specialPageAliases = array(
'Specialpages' => array( 'Erileheküljed' ),
'Statistics' => array( 'Arvandmestik' ),
'Tags' => array( 'Märgised' ),
+ 'TrackingCategories' => array( 'Süsteemikategooriad' ),
'Unblock' => array( 'Blokeerimise_eemaldamine' ),
'Uncategorizedcategories' => array( 'Kategoriseerimata_kategooriad' ),
'Uncategorizedimages' => array( 'Kategoriseerimata_failid' ),
@@ -156,6 +159,8 @@ $magicWords = array(
'currentmonth' => array( '1', 'HETKEKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
'currentmonth1' => array( '1', 'HETKEKUU1', 'CURRENTMONTH1' ),
'currentmonthname' => array( '1', 'HETKEKUUNIMETUS', 'CURRENTMONTHNAME' ),
+ 'currentmonthnamegen' => array( '1', 'HETKEKUUOM', 'CURRENTMONTHNAMEGEN' ),
+ 'currentmonthabbrev' => array( '1', 'HETKEKUULÜH', 'CURRENTMONTHABBREV' ),
'currentday' => array( '1', 'HETKEKUUPÄEV', 'CURRENTDAY' ),
'currentday2' => array( '1', 'HETKEKUUPÄEV2', 'CURRENTDAY2' ),
'currentdayname' => array( '1', 'HETKENÄDALAPÄEV', 'CURRENTDAYNAME' ),
@@ -165,6 +170,8 @@ $magicWords = array(
'localmonth' => array( '1', 'KOHALIKKUU', 'LOCALMONTH', 'LOCALMONTH2' ),
'localmonth1' => array( '1', 'KOHALIKKUU1', 'LOCALMONTH1' ),
'localmonthname' => array( '1', 'KOHALIKKUUNIMETUS', 'LOCALMONTHNAME' ),
+ 'localmonthnamegen' => array( '1', 'KOHALIKKUUOM', 'LOCALMONTHNAMEGEN' ),
+ 'localmonthabbrev' => array( '1', 'KOHALIKKUULÜH', 'LOCALMONTHABBREV' ),
'localday' => array( '1', 'KOHALIKKUUPÄEV', 'LOCALDAY' ),
'localday2' => array( '1', 'KOHALIKKUUPÄEV2', 'LOCALDAY2' ),
'localdayname' => array( '1', 'KOHALIKNÄDALAPÄEV', 'LOCALDAYNAME' ),
@@ -177,7 +184,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'KASUTAJAMÄÄR', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'TEGUSKASUTAJAMÄÄR', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'REDIGEERIMISMÄÄR', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'VAATAMISTEARV', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'LEHEKÜLJENIMI', 'PAGENAME' ),
'pagenamee' => array( '1', 'LEHEKÜLJENIMI1', 'PAGENAMEE' ),
'namespace' => array( '1', 'NIMERUUM', 'NAMESPACE' ),
@@ -206,7 +212,9 @@ $magicWords = array(
'img_center' => array( '1', 'keskel', 'center', 'centre' ),
'img_framed' => array( '1', 'raam', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'raamita', 'frameless' ),
+ 'img_lang' => array( '1', 'keel=$1', 'lang=$1' ),
'img_page' => array( '1', 'lehekülg=$1', 'lehekülg_$1', 'page=$1', 'page $1' ),
+ 'img_upright' => array( '1', 'püsti', 'püsti=$1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', 'ääris', 'border' ),
'sitename' => array( '1', 'KOHANIMI', 'SITENAME' ),
'ns' => array( '0', 'NR:', 'NS:' ),
diff --git a/languages/messages/MessagesFa.php b/languages/messages/MessagesFa.php
index 9fd31238..dd1cc553 100644
--- a/languages/messages/MessagesFa.php
+++ b/languages/messages/MessagesFa.php
@@ -14,7 +14,6 @@ $fallback8bitEncoding = 'windows-1256';
$namespaceNames = array(
NS_MEDIA => 'مدیا',
NS_SPECIAL => 'ویژه',
- NS_MAIN => '',
NS_TALK => 'بحث',
NS_USER => 'کاربر',
NS_USER_TALK => 'بحث_کاربر',
@@ -43,44 +42,48 @@ $specialPageAliases = array(
'Allmessages' => array( 'تمام_پیغام‌ها' ),
'AllMyUploads' => array( 'همهٔ_بارگذاری‌های_من', 'همه_بارگذاری‌های_من' ),
'Allpages' => array( 'تمام_صفحه‌ها' ),
+ 'ApiHelp' => array( 'راهنمای_ای‌پی‌آی' ),
'Ancientpages' => array( 'صفحه‌های_قدیمی' ),
'Badtitle' => array( 'عنوان_بد' ),
- 'Blankpage' => array( 'صفحه_خالی' ),
+ 'Blankpage' => array( 'صفحهٔ_خالی', 'صفحه_خالی' ),
'Block' => array( 'بستن_نشانی_آی‌پی' ),
'Booksources' => array( 'منابع_کتاب' ),
'BrokenRedirects' => array( 'تغییرمسیرهای_خراب' ),
'Categories' => array( 'رده‌ها' ),
- 'ChangeEmail' => array( 'تغییر_رایانامه' ),
+ 'ChangeEmail' => array( 'تغییر_ایمیل', 'تغییر_رایانامه' ),
'ChangePassword' => array( 'از_نو_کردن_گذرواژه' ),
- 'ComparePages' => array( 'مقایسه_صفحات' ),
- 'Confirmemail' => array( 'تأیید_رایانامه' ),
+ 'ComparePages' => array( 'مقایسهٔ_صفحات' ),
+ 'Confirmemail' => array( 'تأیید_ایمیل', 'تأیید_رایانامه' ),
'Contributions' => array( 'مشارکت‌ها' ),
'CreateAccount' => array( 'ایجاد_حساب_کاربری' ),
'Deadendpages' => array( 'صفحه‌های_بن‌بست' ),
'DeletedContributions' => array( 'مشارکت‌های_حذف_شده' ),
+ 'Diff' => array( 'تفاوت' ),
'DoubleRedirects' => array( 'تغییرمسیرهای_دوتایی' ),
'EditWatchlist' => array( 'ویرایش_فهرست_پی‌گیری‌ها' ),
- 'Emailuser' => array( 'نامه_به_کاربر' ),
+ 'Emailuser' => array( 'ایمیل_به_کاربر', 'نامه_به_کاربر' ),
'ExpandTemplates' => array( 'گسترش_الگوها' ),
- 'Export' => array( 'برون_بری_صفحه' ),
+ 'Export' => array( 'برون‌بری_صفحه' ),
'Fewestrevisions' => array( 'کمترین_نسخه' ),
- 'FileDuplicateSearch' => array( 'جستجوی_پرونده_تکراری' ),
+ 'FileDuplicateSearch' => array( 'جستجوی_پروندهٔ_تکراری' ),
'Filepath' => array( 'مسیر_پرونده' ),
'Import' => array( 'درون‌ریزی_صفحه' ),
- 'Invalidateemail' => array( 'باطل‌کردن_رایانامه' ),
+ 'Invalidateemail' => array( 'باطل‌کردن_ایمیل', 'باطل‌کردن_رایانامه' ),
'JavaScriptTest' => array( 'تست_جاوااسکریپت' ),
- 'BlockList' => array( 'فهرست_بستن_نشانی_آی‌پی' ),
+ 'BlockList' => array( 'فهرست_بسته‌شده‌ها', 'فهرست_بستن_نشانی_آی‌پی' ),
'LinkSearch' => array( 'جستجوی_پیوند' ),
'Listadmins' => array( 'فهرست_مدیران' ),
'Listbots' => array( 'فهرست_ربات‌ها' ),
'Listfiles' => array( 'فهرست_پرونده‌ها', 'فهرست_تصاویر' ),
'Listgrouprights' => array( 'اختیارات_گروه‌های_کاربری' ),
'Listredirects' => array( 'فهرست_تغییرمسیرها' ),
+ 'ListDuplicatedFiles' => array( 'فهرست_پرونده‌های_تکراری' ),
'Listusers' => array( 'فهرست_کاربران' ),
- 'Lockdb' => array( 'قفل_کردن_پایگاه_داده' ),
+ 'Lockdb' => array( 'قفل‌کردن_پایگاه_داده‌ها' ),
'Log' => array( 'سیاهه‌ها' ),
'Lonelypages' => array( 'صفحه‌های_یتیم' ),
'Longpages' => array( 'صفحه‌های_بلند' ),
+ 'MediaStatistics' => array( 'آمار_رسانه‌ها' ),
'MergeHistory' => array( 'ادغام_تاریخچه' ),
'MIMEsearch' => array( 'جستجوی_MIME' ),
'Mostcategories' => array( 'بیشترین_رده' ),
@@ -93,19 +96,20 @@ $specialPageAliases = array(
'Movepage' => array( 'انتقال_صفحه' ),
'Mycontributions' => array( 'مشارکت‌های_من' ),
'MyLanguage' => array( 'زبان‌های_من' ),
- 'Mypage' => array( 'صفحه_من' ),
+ 'Mypage' => array( 'صفحهٔ_من', 'صفحه_من' ),
'Mytalk' => array( 'بحث_من' ),
'Myuploads' => array( 'بارگذاری‌های_من' ),
'Newimages' => array( 'تصاویر_جدید' ),
'Newpages' => array( 'صفحه‌های_تازه' ),
'PagesWithProp' => array( 'صفحه‌های_با_خاصیت' ),
+ 'PageLanguage' => array( 'زبان_صفحه' ),
'PasswordReset' => array( 'بازنشاندن_گذرواژه' ),
'PermanentLink' => array( 'پیوند_دائمی' ),
'Popularpages' => array( 'صفحه‌های_محبوب' ),
'Preferences' => array( 'ترجیحات' ),
'Prefixindex' => array( 'نمایه_پیشوندی' ),
- 'Protectedpages' => array( 'صفحه‌های_محافظت_شده' ),
- 'Protectedtitles' => array( 'عنوان‌های_محافظت_شده' ),
+ 'Protectedpages' => array( 'صفحه‌های_محافظت‌شده' ),
+ 'Protectedtitles' => array( 'عنوان‌های_محافظت‌شده' ),
'Randompage' => array( 'صفحهٔ_تصادفی' ),
'RandomInCategory' => array( 'تصادفی_در_رده' ),
'Randomredirect' => array( 'تغییرمسیر_تصادفی' ),
@@ -114,18 +118,20 @@ $specialPageAliases = array(
'Redirect' => array( 'تغییرمسیر' ),
'ResetTokens' => array( 'بازنشانی_نشانه‌ها' ),
'Revisiondelete' => array( 'حذف_نسخه' ),
+ 'RunJobs' => array( 'اجرای_کارها' ),
'Search' => array( 'جستجو' ),
'Shortpages' => array( 'صفحه‌های_کوتاه' ),
'Specialpages' => array( 'صفحه‌های_ویژه' ),
'Statistics' => array( 'آمار' ),
'Tags' => array( 'برچسب‌ها' ),
+ 'TrackingCategories' => array( 'رده‌های_ردیابی' ),
'Unblock' => array( 'باز_کردن' ),
- 'Uncategorizedcategories' => array( 'رده‌های_رده‌بندی_نشده' ),
- 'Uncategorizedimages' => array( 'تصویرهای_رده‌بندی_‌نشده' ),
- 'Uncategorizedpages' => array( 'صفحه‌های_رده‌بندی_نشده' ),
- 'Uncategorizedtemplates' => array( 'الگوهای_رده‌بندی_نشده' ),
+ 'Uncategorizedcategories' => array( 'رده‌های_رده‌بندی‌نشده' ),
+ 'Uncategorizedimages' => array( 'تصویرهای_رده‌بندی‌نشده' ),
+ 'Uncategorizedpages' => array( 'صفحه‌های_رده‌بندی‌نشده' ),
+ 'Uncategorizedtemplates' => array( 'الگوهای_رده‌بندی‌نشده' ),
'Undelete' => array( 'احیای_صفحهٔ_حذف‌شده' ),
- 'Unlockdb' => array( 'باز_کردن_پایگاه_داده' ),
+ 'Unlockdb' => array( 'قفل‌گشایی_پایگاه_داده‌ها' ),
'Unusedcategories' => array( 'رده‌های_استفاده_نشده' ),
'Unusedimages' => array( 'تصاویر_استفاده_نشده' ),
'Unusedtemplates' => array( 'الگوهای_استفاده_نشده' ),
@@ -180,7 +186,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'تعدادکاربران', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'کاربران‌فعال', 'کاربران_فعال', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
'pagenamee' => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
'namespace' => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
@@ -258,10 +263,12 @@ $magicWords = array(
'revisionyear' => array( '1', 'سال‌نسخه', 'سال_نسخه', 'REVISIONYEAR' ),
'revisiontimestamp' => array( '1', 'زمان‌یونیکسی‌نسخه', 'زمان‌نسخه', 'زمان_یونیکسی_نسخه', 'زمان_نسخه', 'REVISIONTIMESTAMP' ),
'revisionuser' => array( '1', 'کاربرنسخه', 'کاربر_نسخه', 'REVISIONUSER' ),
+ 'revisionsize' => array( '1', 'اندازهٔ‌نسخه', 'اندازهٔ_نسخه', 'REVISIONSIZE' ),
'plural' => array( '0', 'جمع:', 'PLURAL:' ),
'fullurl' => array( '0', 'نشانی‌کامل:', 'نشانی_کامل:', 'FULLURL:' ),
'fullurle' => array( '0', 'نشانی‌کامل‌کد:', 'نشانی_کامل_کد:', 'FULLURLE:' ),
'canonicalurl' => array( '0', 'نشانی_استاندارد:', 'نشانی‌استاندارد:', 'CANONICALURL:' ),
+ 'canonicalurle' => array( '0', 'نشانی_استاندارد_کد:', 'نشانی‌استانداردکد:', 'CANONICALURLE:' ),
'lcfirst' => array( '0', 'ابتداکوچک:', 'ابتدا_کوچک:', 'LCFIRST:' ),
'ucfirst' => array( '0', 'ابتدابزرگ:', 'ابتدا_بزرگ:', 'UCFIRST:' ),
'lc' => array( '0', 'ک:', 'LC:' ),
@@ -269,6 +276,7 @@ $magicWords = array(
'raw' => array( '0', 'خام:', 'RAW:' ),
'displaytitle' => array( '1', 'عنوان‌ظاهری', 'عنوان_ظاهری', 'DISPLAYTITLE' ),
'rawsuffix' => array( '1', 'ن', 'R' ),
+ 'nocommafysuffix' => array( '0', 'جداکننده‌خیر', 'NOSEP' ),
'newsectionlink' => array( '1', '__بخش‌جدید__', '__NEWSECTIONLINK__' ),
'nonewsectionlink' => array( '1', '__بی‌پیوندبخش__', '__بی‌پیوند‌بخش‌جدید__', '__NONEWSECTIONLINK__' ),
'currentversion' => array( '1', 'نسخه‌کنونی', 'نسخه_کنونی', 'CURRENTVERSION' ),
diff --git a/languages/messages/MessagesFi.php b/languages/messages/MessagesFi.php
index ed4c90ae..12199119 100644
--- a/languages/messages/MessagesFi.php
+++ b/languages/messages/MessagesFi.php
@@ -35,6 +35,7 @@ $namespaceAliases = array(
$specialPageAliases = array(
'Activeusers' => array( 'Aktiiviset_käyttäjät' ),
'Allmessages' => array( 'Järjestelmäviestit' ),
+ 'AllMyUploads' => array( 'Kaikki_tallennukseni' ),
'Allpages' => array( 'Kaikki_sivut' ),
'Ancientpages' => array( 'Kuolleet_sivut' ),
'Badtitle' => array( 'Kelpaamaton_otsikko' ),
@@ -51,6 +52,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'Luo_tunnus' ),
'Deadendpages' => array( 'Linkittömät_sivut' ),
'DeletedContributions' => array( 'Poistetut_muokkaukset' ),
+ 'Diff' => array( 'Ero' ),
'DoubleRedirects' => array( 'Kaksinkertaiset_ohjaukset', 'Kaksinkertaiset_uudelleenohjaukset' ),
'EditWatchlist' => array( 'Muokkaa_tarkkailulistaa' ),
'Emailuser' => array( 'Lähetä_sähköpostia' ),
@@ -61,6 +63,7 @@ $specialPageAliases = array(
'Filepath' => array( 'Tiedostopolku' ),
'Import' => array( 'Tuo_sivuja' ),
'Invalidateemail' => array( 'Hylkää_sähköpostiosoite' ),
+ 'JavaScriptTest' => array( 'JavaScriptTesti' ),
'BlockList' => array( 'Muokkausestot' ),
'LinkSearch' => array( 'Linkkihaku' ),
'Listadmins' => array( 'Ylläpitäjät' ),
@@ -68,11 +71,13 @@ $specialPageAliases = array(
'Listfiles' => array( 'Tiedostoluettelo' ),
'Listgrouprights' => array( 'Käyttäjäryhmien_oikeudet' ),
'Listredirects' => array( 'Ohjaukset', 'Ohjaussivut', 'Uudelleenohjaukset' ),
+ 'ListDuplicatedFiles' => array( 'Listaa_tuplatiedostot' ),
'Listusers' => array( 'Käyttäjät' ),
'Lockdb' => array( 'Lukitse_tietokanta' ),
'Log' => array( 'Loki', 'Lokit' ),
'Lonelypages' => array( 'Yksinäiset_sivut' ),
'Longpages' => array( 'Pitkät_sivut' ),
+ 'MediaStatistics' => array( 'Median_tiedot' ),
'MergeHistory' => array( 'Liitä_muutoshistoria' ),
'MIMEsearch' => array( 'MIME-haku' ),
'Mostcategories' => array( 'Luokitelluimmat_sivut' ),
@@ -90,6 +95,7 @@ $specialPageAliases = array(
'Myuploads' => array( 'Omat_tiedostot' ),
'Newimages' => array( 'Uudet_tiedostot', 'Uudet_kuvat' ),
'Newpages' => array( 'Uudet_sivut' ),
+ 'PageLanguage' => array( 'Sivun_kieli' ),
'PasswordReset' => array( 'Unohtuneen_salasanan_vaihto' ),
'PermanentLink' => array( 'Ikilinkki' ),
'Popularpages' => array( 'Suositut_sivut' ),
@@ -98,16 +104,18 @@ $specialPageAliases = array(
'Protectedpages' => array( 'Suojatut_sivut' ),
'Protectedtitles' => array( 'Suojatut_sivunimet' ),
'Randompage' => array( 'Satunnainen_sivu' ),
- 'RandomInCategory' => array( 'Satunnainen_sivu_luokasta' ),
+ 'RandomInCategory' => array( 'Satunnainen_kohde_luokasta' ),
'Randomredirect' => array( 'Satunnainen_ohjaus', 'Satunnainen_uudelleenohjaus' ),
'Recentchanges' => array( 'Tuoreet_muutokset' ),
'Recentchangeslinked' => array( 'Linkitetyt_muutokset' ),
- 'Revisiondelete' => array( 'Poista_muokkaus' ),
+ 'Redirect' => array( 'Ohjaus' ),
+ 'Revisiondelete' => array( 'Poista_versio' ),
'Search' => array( 'Haku' ),
'Shortpages' => array( 'Lyhyet_sivut' ),
'Specialpages' => array( 'Toimintosivut' ),
'Statistics' => array( 'Tilastot' ),
- 'Tags' => array( 'Merkinnät' ),
+ 'Tags' => array( 'Merkkaukset' ),
+ 'TrackingCategories' => array( 'Tarkkailuluokat' ),
'Unblock' => array( 'Poista_esto' ),
'Uncategorizedcategories' => array( 'Luokittelemattomat_luokat' ),
'Uncategorizedimages' => array( 'Luokittelemattomat_tiedostot' ),
@@ -124,10 +132,10 @@ $specialPageAliases = array(
'Userlogout' => array( 'Kirjaudu_ulos' ),
'Userrights' => array( 'Käyttöoikeudet' ),
'Version' => array( 'Versio' ),
- 'Wantedcategories' => array( 'Halutuimmat_luokat' ),
- 'Wantedfiles' => array( 'Halutuimmat_tiedostot' ),
- 'Wantedpages' => array( 'Halutuimmat_sivut' ),
- 'Wantedtemplates' => array( 'Halutuimmat_mallineet' ),
+ 'Wantedcategories' => array( 'Halutut_luokat' ),
+ 'Wantedfiles' => array( 'Halutut_tiedostot' ),
+ 'Wantedpages' => array( 'Halutut_sivut' ),
+ 'Wantedtemplates' => array( 'Halutut_mallineet' ),
'Watchlist' => array( 'Tarkkailulista' ),
'Whatlinkshere' => array( 'Tänne_viittaavat_sivut' ),
'Withoutinterwiki' => array( 'Kielilinkittömät_sivut' ),
@@ -164,7 +172,6 @@ $magicWords = array(
'numberoffiles' => array( '1', 'TIEDOSTOMÄÄRÄ', 'NUMBEROFFILES' ),
'numberofusers' => array( '1', 'KÄYTTÄJÄMÄÄRÄ', 'NUMBEROFUSERS' ),
'numberofedits' => array( '1', 'MUOKKAUSMÄÄRÄ', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'SIVUHAKUMÄÄRÄ', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'SIVUNIMI', 'PAGENAME' ),
'pagenamee' => array( '1', 'SIVUNIMIE', 'PAGENAMEE' ),
'namespace' => array( '1', 'NIMIAVARUUS', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesFr.php b/languages/messages/MessagesFr.php
index 5e406da5..b9e8b544 100644
--- a/languages/messages/MessagesFr.php
+++ b/languages/messages/MessagesFr.php
@@ -176,7 +176,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NOMPAGE', 'PAGENAME' ),
'pagenamee' => array( '1', 'NOMPAGEX', 'PAGENAMEE' ),
'namespace' => array( '1', 'ESPACENOMMAGE', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesFrp.php b/languages/messages/MessagesFrp.php
index 8682ab0c..51a0e132 100644
--- a/languages/messages/MessagesFrp.php
+++ b/languages/messages/MessagesFrp.php
@@ -177,7 +177,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NOMBRO_D_USANCIÉRS', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NOMBRO_D_USANCIÉRS_ACTIFS', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NOMBRO_DE_CHANGEMENTS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NOMBRO_DE_VUES', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NOM_DE_LA_PÂGE', 'NOMPAGE', 'PAGENAME' ),
'pagenamee' => array( '1', 'NOM_DE_LA_PÂGE_URL', 'NOMPAGEX', 'PAGENAMEE' ),
'namespace' => array( '1', 'ÈSPÂÇO_DE_NOMS', 'ESPACENOMMAGE', 'NAMESPACE' ),
@@ -207,9 +206,9 @@ $magicWords = array(
'img_framed' => array( '1', 'encâdrâ', 'câdro', 'cadre', 'encadré', 'encadre', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'sen_câdro', 'pas_encâdrâ', 'sans_cadre', 'non_encadré', 'non_encadre', 'frameless' ),
'img_page' => array( '1', 'pâge=$1', 'pâge $1', 'page=$1', 'page $1' ),
- 'img_upright' => array( '1', 'drêt', 'drêt=$1', 'drêt $1', 'redresse', 'redresse=$1', 'redresse $1', 'upright', 'upright=$1', 'upright $1' ),
+ 'img_upright' => array( '1', 'drêt', 'drêt=$1', 'drêt $1', 'redresse', 'redresse=$1', 'redresse $1', 'redresse_$1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', 'bordura', 'bordure', 'border' ),
- 'img_baseline' => array( '1', 'legne_de_bâsa', 'ligne_de_base', 'base', 'baseline' ),
+ 'img_baseline' => array( '1', 'legne_de_bâsa', 'ligne_de_base', 'base', 'ligne-de-base', 'baseline' ),
'img_sub' => array( '1', 'segno', 'indice', 'ind', 'sub' ),
'img_super' => array( '1', 'èxposent', 'èxp', 'exposant', 'exp', 'super', 'sup' ),
'img_top' => array( '1', 'd\'amont', 'haut', 'top' ),
diff --git a/languages/messages/MessagesGl.php b/languages/messages/MessagesGl.php
index e30f7244..8ab5bccc 100644
--- a/languages/messages/MessagesGl.php
+++ b/languages/messages/MessagesGl.php
@@ -54,7 +54,7 @@ $dateFormats = array(
$specialPageAliases = array(
'Activeusers' => array( 'Usuarios_activos' ),
'Allmessages' => array( 'Todas_as_mensaxes' ),
- 'AllMyUploads' => array( 'Todas_as_miñas_cargas', 'Todos_os_meus_ficheiros' ),
+ 'AllMyUploads' => array( 'Todas_as_miñas_subidas', 'Todas_as_miñas_cargas', 'Todos_os_meus_ficheiros' ),
'Allpages' => array( 'Todas_as_páxinas' ),
'Ancientpages' => array( 'Páxinas_máis_antigas' ),
'Badtitle' => array( 'Título_incorrecto' ),
@@ -63,24 +63,24 @@ $specialPageAliases = array(
'Booksources' => array( 'Fontes_bibliográficas' ),
'BrokenRedirects' => array( 'Redireccións_rotas' ),
'Categories' => array( 'Categorías' ),
- 'ChangeEmail' => array( 'Cambiar_o_correo_electrónico' ),
- 'ChangePassword' => array( 'Cambiar_o_contrasinal' ),
+ 'ChangeEmail' => array( 'Cambiar_o_correo_electrónico', 'Cambiar_correo_electrónico' ),
+ 'ChangePassword' => array( 'Cambiar_o_contrasinal', 'Cambiar_contrasinal' ),
'ComparePages' => array( 'Comparar_as_páxinas' ),
- 'Confirmemail' => array( 'Confirmar_o_correo_electrónico' ),
+ 'Confirmemail' => array( 'Confirmar_o_correo_electrónico', 'Confirmar_correo_electrónico' ),
'Contributions' => array( 'Contribucións' ),
'CreateAccount' => array( 'Crear_unha_conta' ),
'Deadendpages' => array( 'Páxinas_mortas' ),
'DeletedContributions' => array( 'Contribucións_borradas' ),
'DoubleRedirects' => array( 'Redireccións_dobres' ),
'EditWatchlist' => array( 'Editar_a_lista_de_vixilancia' ),
- 'Emailuser' => array( 'Correo_electrónico' ),
+ 'Emailuser' => array( 'Enviar_correo_electrónico', 'Correo_electrónico', 'Enviar_correo_electrónico_usuario', 'Enviar_correo_electrónico_usuaria' ),
'ExpandTemplates' => array( 'Expandir_os_modelos' ),
'Export' => array( 'Exportar' ),
'Fewestrevisions' => array( 'Páxinas_con_menos_revisións' ),
- 'FileDuplicateSearch' => array( 'Procura_de_ficheiros_duplicados' ),
+ 'FileDuplicateSearch' => array( 'Procura_de_ficheiros_duplicados', 'Busca_de_ficheiros_duplicados', 'Busca_de_arquivos_duplicados' ),
'Filepath' => array( 'Ruta_do_ficheiro' ),
'Import' => array( 'Importar' ),
- 'Invalidateemail' => array( 'Invalidar_o_enderezo_de_correo_electrónico' ),
+ 'Invalidateemail' => array( 'Invalidar_o_enderezo_de_correo_electrónico', 'Invalidar_correo_electrónico', 'Invalidar_enderezo_de_correo_electrónico', 'Invalidar_enderezo_correo_electrónico' ),
'JavaScriptTest' => array( 'Proba_do_JavaScript' ),
'BlockList' => array( 'Lista_de_bloqueos', 'Lista_dos_bloqueos_a_enderezos_IP' ),
'LinkSearch' => array( 'Buscar_ligazóns_web' ),
@@ -94,55 +94,57 @@ $specialPageAliases = array(
'Log' => array( 'Rexistros' ),
'Lonelypages' => array( 'Páxinas_orfas' ),
'Longpages' => array( 'Páxinas_longas' ),
- 'MergeHistory' => array( 'Fusionar_os_historiais' ),
+ 'MergeHistory' => array( 'Fusionar_os_historiais', 'Fusionar_historiais' ),
'MIMEsearch' => array( 'Procura_MIME' ),
'Mostcategories' => array( 'Páxinas_con_máis_categorías' ),
- 'Mostimages' => array( 'Ficheiros_máis_ligados' ),
+ 'Mostimages' => array( 'Ficheiros_máis_ligados', 'Arquivos_máis_ligados' ),
'Mostinterwikis' => array( 'Páxinas_con_máis_interwikis' ),
'Mostlinked' => array( 'Páxinas_máis_ligadas' ),
'Mostlinkedcategories' => array( 'Categorías_máis_ligadas' ),
'Mostlinkedtemplates' => array( 'Modelos_máis_ligados' ),
'Mostrevisions' => array( 'Páxinas_con_máis_revisións' ),
- 'Movepage' => array( 'Mover_a_páxina' ),
- 'Mycontributions' => array( 'As_miñas_contribucións' ),
- 'Mypage' => array( 'A_miña_páxina_de_usuario' ),
- 'Mytalk' => array( 'A_miña_conversa' ),
+ 'Movepage' => array( 'Mover_a_páxina', 'Mover_páxina', 'Mover_o_artigo', 'Mover_artigo' ),
+ 'Mycontributions' => array( 'As_miñas_contribucións', 'Miñas_contribucións' ),
+ 'Mypage' => array( 'A_miña_páxina_de_usuario', 'A_miña_páxina', 'Miña_páxina_de_usuario', 'Miña_páxina' ),
+ 'Mytalk' => array( 'A_miña_conversa', 'Miña_conversa' ),
'Myuploads' => array( 'As_miñas_subidas' ),
'Newimages' => array( 'Imaxes_novas' ),
'Newpages' => array( 'Páxinas_novas' ),
'PagesWithProp' => array( 'Páxinas_con_propiedades' ),
- 'PasswordReset' => array( 'Restablecer_o_contrasinal' ),
+ 'PasswordReset' => array( 'Restablecer_o_contrasinal', 'Restablecer_contrasinal' ),
'PermanentLink' => array( 'Ligazón_permanente' ),
'Popularpages' => array( 'Páxinas_populares' ),
'Preferences' => array( 'Preferencias' ),
'Prefixindex' => array( 'Índice_de_prefixos' ),
'Protectedpages' => array( 'Páxinas_protexidas' ),
'Protectedtitles' => array( 'Títulos_protexidos' ),
- 'Randompage' => array( 'Ao_chou', 'Páxina_aleatoria' ),
+ 'Randompage' => array( 'Ao_chou', 'Páxina_aleatoria', 'Aleatoria', 'Aleatorio' ),
+ 'RandomInCategory' => array( 'Aleatoria_na_categoría', 'Aleatorio_na_categoría' ),
'Randomredirect' => array( 'Redirección_aleatoria' ),
'Recentchanges' => array( 'Cambios_recentes' ),
'Recentchangeslinked' => array( 'Cambios_relacionados' ),
'Redirect' => array( 'Redirección' ),
'ResetTokens' => array( 'Restablecer_os_pases' ),
'Revisiondelete' => array( 'Revisións_borradas' ),
- 'Search' => array( 'Procurar' ),
+ 'Search' => array( 'Procurar', 'Buscar' ),
'Shortpages' => array( 'Páxinas_curtas' ),
'Specialpages' => array( 'Páxinas_especiais' ),
- 'Statistics' => array( 'Estatísticas' ),
+ 'Statistics' => array( 'Estatísticas', 'Estadísticas' ),
'Tags' => array( 'Etiquetas' ),
'Unblock' => array( 'Desbloquear' ),
- 'Uncategorizedcategories' => array( 'Categorías_sen_categoría' ),
+ 'Uncategorizedcategories' => array( 'Categorías_sen_categoría', 'Categorías_non_categorizadas' ),
'Uncategorizedimages' => array( 'Imaxes_sen_categoría' ),
'Uncategorizedpages' => array( 'Páxinas_sen_categoría' ),
'Uncategorizedtemplates' => array( 'Modelos_sen_categoría' ),
'Undelete' => array( 'Restaurar' ),
'Unlockdb' => array( 'Abrir_a_base_de_datos' ),
- 'Unusedcategories' => array( 'Categorías_sen_uso' ),
- 'Unusedimages' => array( 'Imaxes_sen_uso' ),
- 'Unusedtemplates' => array( 'Modelos_non_usados' ),
- 'Unwatchedpages' => array( 'Páxinas_sen_vixiar' ),
- 'Upload' => array( 'Cargar' ),
- 'Userlogin' => array( 'Rexistro' ),
+ 'Unusedcategories' => array( 'Categorías_sen_uso', 'Categorías_non_utilizadas' ),
+ 'Unusedimages' => array( 'Ficheiros_sen_uso', 'Imaxes_sen_uso', 'Ficheiros_non_usados', 'Imaxes_non_usadas' ),
+ 'Unusedtemplates' => array( 'Modelos_non_usados', 'Modelos_sen_uso' ),
+ 'Unwatchedpages' => array( 'Páxinas_sen_vixiar', 'Páxinas_non_vixiadas' ),
+ 'Upload' => array( 'Subir', 'Cargar' ),
+ 'UploadStash' => array( 'Ficheiros_agochados', 'Arquivos_agochados', 'Subidas_agochadas' ),
+ 'Userlogin' => array( 'Iniciar_sesión', 'Iniciar_a_sesión', 'Acceder_ao_sistema', 'Acceder_ó_sistema' ),
'Userlogout' => array( 'Saír_ao_anonimato' ),
'Userrights' => array( 'Dereitos_de_usuario' ),
'Version' => array( 'Versión' ),
@@ -151,8 +153,8 @@ $specialPageAliases = array(
'Wantedpages' => array( 'Páxinas_requiridas', 'Ligazóns_rotas' ),
'Wantedtemplates' => array( 'Modelos_requiridos' ),
'Watchlist' => array( 'Lista_de_vixilancia' ),
- 'Whatlinkshere' => array( 'Páxinas_que_ligan_con_esta' ),
- 'Withoutinterwiki' => array( 'Sen_interwiki' ),
+ 'Whatlinkshere' => array( 'Páxinas_que_ligan_con_esta', 'O_que_liga_aquí' ),
+ 'Withoutinterwiki' => array( 'Sen_interwiki', 'Sen_interwikis' ),
);
$magicWords = array(
@@ -188,7 +190,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NÚMERODEEDICIÓNS', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NÚMERODEVISITAS', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NOMEDAPÁXINA', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
'namespace' => array( '1', 'ESPAZODENOMES', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
'namespacenumber' => array( '1', 'NÚMERODOESPAZODENOMES', 'NAMESPACENUMBER' ),
@@ -208,8 +209,8 @@ $magicWords = array(
'img_center' => array( '1', 'centro', 'center', 'centre' ),
'img_framed' => array( '1', 'conmarco', 'conbordo', 'marco', 'commoldura', 'comborda', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'senmarco', 'senbordo', 'semmoldura', 'semborda', 'frameless' ),
- 'img_page' => array( '1', 'páxina=$1', 'páxina_$1', 'página=$1', 'página $1', 'page=$1', 'page $1' ),
- 'img_upright' => array( '1', 'arribaádereita', 'arribaádereita=$1', 'arribaádereita_$1', 'superiordireito', 'superiordireito=$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
+ 'img_page' => array( '1', 'páxina=$1', 'páxina_$1', 'página=$1', 'página_$1', 'página $1', 'page=$1', 'page $1' ),
+ 'img_upright' => array( '1', 'arribaádereita', 'arribaádereita=$1', 'arribaádereita_$1', 'superiordireito', 'superiordireito=$1', 'superiordireito_$1', 'superiordireito $1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', 'bordo', 'borda', 'border' ),
'img_baseline' => array( '1', 'liñadebase', 'linhadebase', 'baseline' ),
'img_top' => array( '1', 'arriba', 'acima', 'top' ),
@@ -257,10 +258,16 @@ $magicWords = array(
'defaultsort' => array( '1', 'ORDENAR:', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'tag' => array( '0', 'etiqueta', 'tag' ),
'hiddencat' => array( '1', '__CATEGORÍAOCULTA__', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
- 'pagesincategory' => array( '1', 'PÁXINASNACATEGORÍA', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
- 'pagesize' => array( '1', 'TAMAÑODAPÁXINA', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+ 'pagesincategory' => array( '1', 'PÁXINASNACATEGORÍA', 'PAXINASNACATEGORIA', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+ 'pagesize' => array( '1', 'TAMAÑODAPÁXINA', 'TAMAÑODAPAXINA', 'TAMANHODAPAGINA', 'TAMANHODAPÁGINA', 'PAGESIZE' ),
+ 'index' => array( '1', '__INDEXAR__', '__INDEX__' ),
+ 'noindex' => array( '1', '__NONINDEXAR__', '__NAOINDEXAR__', '__NÃOINDEXAR__', '__NOINDEX__' ),
+ 'numberingroup' => array( '1', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMERONOGRUPO', 'NÚMERONOGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
+ 'staticredirect' => array( '1', '__REDIRECCIÓNESTÁTICA__', '__REDIRECCIONESTATICA__', '__REDIRECIONAMENTOESTATICO__', '__REDIRECIONAMENTOESTÁTICO__', '__STATICREDIRECT__' ),
+ 'protectionlevel' => array( '1', 'NIVELDEPROTECCIÓN', 'NIVELDEPROTECCION', 'NIVELDEPROTECAO', 'NÍVELDEPROTEÇÃO', 'PROTECTIONLEVEL' ),
+ 'formatdate' => array( '0', 'formatodadata', 'formateardata', 'formatdate', 'dateformat' ),
'url_path' => array( '0', 'RUTA', 'PATH' ),
- 'url_query' => array( '0', 'PESCUDA', 'QUERY' ),
+ 'url_query' => array( '0', 'PESCUDA', 'BUSCA', 'QUERY' ),
'pagesincategory_all' => array( '0', 'todos', 'all' ),
'pagesincategory_pages' => array( '0', 'páxinas', 'pages' ),
'pagesincategory_subcats' => array( '0', 'subcategorías', 'subcats' ),
diff --git a/languages/messages/MessagesHaw.php b/languages/messages/MessagesHaw.php
index 723eac86..f8268ddd 100644
--- a/languages/messages/MessagesHaw.php
+++ b/languages/messages/MessagesHaw.php
@@ -33,29 +33,51 @@ $namespaceAliases = array(
);
$specialPageAliases = array(
+ 'Activeusers' => array( 'MeaHoʻohanaNei', 'MeaHoohanaNei' ),
+ 'Allmessages' => array( 'PūlonoApau', 'PulonoApau' ),
'Ancientpages' => array( 'ʻAoʻaoKahiko', 'AoaoKahiko' ),
+ 'Blankpage' => array( 'ʻAoʻaoHakahaka', 'AoaoHakahaka' ),
'Categories' => array( 'Māhele', 'Mahele' ),
+ 'ChangeEmail' => array( 'LoliLekauila' ),
+ 'Confirmemail' => array( 'HōʻoiaLekauila', 'HōoiaLekauila', 'HoʻoiaLekauila', 'HooiaLekauila' ),
'Contributions' => array( 'Haʻawina', 'Haawina' ),
'CreateAccount' => array( 'Kāinoa', 'Kainoa' ),
+ 'Diff' => array( 'ʻOkoʻa', 'Okoa' ),
'Emailuser' => array( 'LekaUila' ),
+ 'Export' => array( 'Kāpuka', 'Kapuka' ),
+ 'Filepath' => array( 'AlaWaihona' ),
+ 'Import' => array( 'Kākomo', 'Kakomo' ),
+ 'LinkSearch' => array( 'HuliLoulou' ),
+ 'Listadmins' => array( 'HeluKahu' ),
+ 'Listbots' => array( 'HeluLōpako', 'HeluLopako' ),
+ 'Listredirects' => array( 'HeluKiahou' ),
+ 'Listusers' => array( 'HeluMeaHoʻohana', 'HeluMeaHoohana' ),
+ 'Log' => array( 'Moʻolelo', 'Moolelo' ),
'Longpages' => array( 'ʻAoʻaoLoa', 'AoaoLoa' ),
+ 'MIMEsearch' => array( 'HuliMIME' ),
'Movepage' => array( 'HoʻoneʻeʻAoʻao', 'HooneeAoao' ),
'Mycontributions' => array( 'KaʻuHaʻawina', 'KauHaawina' ),
'Mypage' => array( 'KaʻuʻAoʻao', 'KauAoao' ),
- 'Mytalk' => array( 'KaʻuKūkākūkā', 'KauKukakuka' ),
+ 'Mytalk' => array( 'KaʻuWalaʻau', 'KauWalaau' ),
'Newpages' => array( 'ʻAoʻaoHou', 'AoaoHou' ),
'Preferences' => array( 'Makemake' ),
'Randompage' => array( 'Kaulele' ),
'Recentchanges' => array( 'NāLoliHou', 'NaLoliHou' ),
+ 'Redirect' => array( 'Kiahou' ),
'Search' => array( 'Huli' ),
'Shortpages' => array( 'ʻAoʻaoPōkole', 'AoaoPokole' ),
'Specialpages' => array( 'PapaNui' ),
+ 'Statistics' => array( 'ʻIkehelupili', 'Ikehelupili' ),
+ 'Tags' => array( 'Lepili' ),
'Upload' => array( 'Hoʻouka', 'Hoouka' ),
+ 'Userlogin' => array( 'ʻEʻe', 'Ee' ),
'Userlogout' => array( 'Haʻalele', 'Haalele' ),
- 'Watchlist' => array( 'PapaNānāPono', 'PapaNanaPono' ),
+ 'Version' => array( 'Mana' ),
+ 'Watchlist' => array( 'PapaKiaʻi', 'PapaKiai' ),
);
$magicWords = array(
+ 'redirect' => array( '0', '#KIAHOU', '#REDIRECT' ),
'currentmonth' => array( '1', 'KĒIAMAHINA', 'KEIAMAHINA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
'currentmonthname' => array( '1', 'KĒIAINOAMAHINA', 'KEIAINOAMAHINA', 'CURRENTMONTHNAME' ),
'currentday' => array( '1', 'KĒIALĀ', 'KEIALA', 'CURRENTDAY' ),
@@ -68,14 +90,31 @@ $magicWords = array(
'numberofarticles' => array( '1', 'HELUMEA', 'NUMBEROFARTICLES' ),
'numberoffiles' => array( '1', 'HELUWAIHONA', 'NUMBEROFFILES' ),
'numberofusers' => array( '1', 'HELUMEAHOʻOHANA', 'HELUMEAHOOHANA', 'NUMBEROFUSERS' ),
+ 'numberofactiveusers' => array( '1', 'HELUMEAHOʻOHANANEI', 'HELUMEAHOOHANANEI', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'HELULOLI', 'NUMBEROFEDITS' ),
'pagename' => array( '1', 'INOAʻAOʻAO', 'INOAAOAO', 'PAGENAME' ),
+ 'namespace' => array( '1', 'LEWAINOA', 'NAMESPACE' ),
+ 'namespacenumber' => array( '1', 'HELULEWAINOA', 'NAMESPACENUMBER' ),
'img_right' => array( '1', 'ʻākau', 'ākau', 'akau', 'right' ),
'img_left' => array( '1', 'hema', 'left' ),
'img_none' => array( '1', 'ʻaʻohe', 'aohe', 'none' ),
+ 'img_middle' => array( '1', 'waena', 'middle' ),
'img_link' => array( '1', 'loulou=$1', 'link=$1' ),
+ 'sitename' => array( '1', 'INOAKAHUA', 'SITENAME' ),
+ 'pageid' => array( '0', 'IDʻAOʻAO', 'IDAOAO', 'PAGEID' ),
+ 'server' => array( '0', 'KIKOWAENAPŪNAEWELE', 'KIKOWAENAPUNAEWELE', 'SERVER' ),
+ 'servername' => array( '0', 'INOAKIKOWAENAPŪNAEWELE', 'INOAKIKOWAENAPUNAEWELE', 'SERVERNAME' ),
+ 'grammar' => array( '0', 'PILINAʻŌLELO', 'PILINAŌLELO', 'PILINAOLELO', 'GRAMMAR:' ),
+ 'gender' => array( '0', 'KEKA', 'GENDER:' ),
'currentweek' => array( '1', 'KĒIAPULE', 'KEIAPULE', 'CURRENTWEEK' ),
+ 'raw' => array( '0', 'MAKA:', 'RAW:' ),
'language' => array( '0', '#ʻŌLELO', '#ŌLELO', '#OLELO', '#LANGUAGE:' ),
'numberofadmins' => array( '1', 'HELUKAHU', 'NUMBEROFADMINS' ),
+ 'special' => array( '0', 'kūikawā', 'special' ),
+ 'filepath' => array( '0', 'ALAWAIHONA:', 'FILEPATH:' ),
+ 'url_query' => array( '0', 'NĪNAU', 'NINAU', 'QUERY' ),
+ 'pagesincategory_all' => array( '0', 'apau', 'all' ),
+ 'pagesincategory_pages' => array( '0', 'ʻaoʻao', 'aoao', 'pages' ),
+ 'pagesincategory_files' => array( '0', 'waihona', 'files' ),
);
diff --git a/languages/messages/MessagesHe.php b/languages/messages/MessagesHe.php
index 0852f446..3d7fc43d 100644
--- a/languages/messages/MessagesHe.php
+++ b/languages/messages/MessagesHe.php
@@ -16,7 +16,6 @@ $fallback8bitEncoding = 'windows-1255';
$namespaceNames = array(
NS_MEDIA => 'מדיה',
NS_SPECIAL => 'מיוחד',
- NS_MAIN => '',
NS_TALK => 'שיחה',
NS_USER => 'משתמש',
NS_USER_TALK => 'שיחת_משתמש',
@@ -46,6 +45,7 @@ $specialPageAliases = array(
'Allmessages' => array( 'הודעות_המערכת' ),
'AllMyUploads' => array( 'כל_ההעלאות_שלי' ),
'Allpages' => array( 'כל_הדפים' ),
+ 'ApiHelp' => array( 'עזרת_API' ),
'Ancientpages' => array( 'דפים_מוזנחים' ),
'Badtitle' => array( 'כותרת_שגויה' ),
'Blankpage' => array( 'דף_ריק' ),
@@ -53,7 +53,7 @@ $specialPageAliases = array(
'Booksources' => array( 'משאבי_ספרות', 'משאבי_ספרות_חיצוניים' ),
'BrokenRedirects' => array( 'הפניות_לא_תקינות', 'הפניות_שבורות' ),
'Categories' => array( 'קטגוריות', 'רשימת_קטגוריות' ),
- 'ChangeEmail' => array( 'שינוי_דואר_אלקטרוני', 'שינוי_דואל' ),
+ 'ChangeEmail' => array( 'שינוי_דואר_אלקטרוני', 'שינוי_דוא"ל' ),
'ChangePassword' => array( 'שינוי_סיסמה' ),
'ComparePages' => array( 'השוואת_דפים' ),
'Confirmemail' => array( 'אימות_כתובת_דואר' ),
@@ -61,6 +61,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'הרשמה_לחשבון' ),
'Deadendpages' => array( 'דפים_ללא_קישורים' ),
'DeletedContributions' => array( 'תרומות_מחוקות' ),
+ 'Diff' => array( 'הבדלים', 'הבדל' ),
'DoubleRedirects' => array( 'הפניות_כפולות' ),
'EditWatchlist' => array( 'עריכת_רשימת_המעקב' ),
'Emailuser' => array( 'שליחת_דואר_למשתמש' ),
@@ -79,11 +80,13 @@ $specialPageAliases = array(
'Listfiles' => array( 'רשימת_קבצים', 'רשימת_תמונות', 'קבצים', 'תמונות' ),
'Listgrouprights' => array( 'רשימת_הרשאות_לקבוצה' ),
'Listredirects' => array( 'רשימת_הפניות', 'הפניות' ),
+ 'ListDuplicatedFiles' => array( 'רשימת_קבצים_כפולים' ),
'Listusers' => array( 'רשימת_משתמשים', 'משתמשים' ),
'Lockdb' => array( 'נעילת_בסיס_הנתונים' ),
'Log' => array( 'יומנים' ),
'Lonelypages' => array( 'דפים_יתומים' ),
'Longpages' => array( 'דפים_ארוכים' ),
+ 'MediaStatistics' => array( 'סטטיסטיקות_מדיה' ),
'MergeHistory' => array( 'מיזוג_גרסאות' ),
'MIMEsearch' => array( 'חיפוש_MIME' ),
'Mostcategories' => array( 'הקטגוריות_הרבות_ביותר', 'הדפים_מרובי-הקטגוריות_ביותר' ),
@@ -102,6 +105,7 @@ $specialPageAliases = array(
'Newimages' => array( 'קבצים_חדשים', 'תמונות_חדשות', 'גלריית_קבצים_חדשים', 'גלריית_תמונות_חדשות' ),
'Newpages' => array( 'דפים_חדשים' ),
'PagesWithProp' => array( 'דפים_עם_מאפיינים', 'דפים_לפי_מאפיינים' ),
+ 'PageLanguage' => array( 'שפת_הדף' ),
'PasswordReset' => array( 'איפוס_סיסמה' ),
'PermanentLink' => array( 'קישור_קבוע' ),
'Popularpages' => array( 'הדפים_הנצפים_ביותר', 'דפים_פופולריים' ),
@@ -117,11 +121,13 @@ $specialPageAliases = array(
'Redirect' => array( 'הפניה' ),
'ResetTokens' => array( 'איפוס_אסימונים' ),
'Revisiondelete' => array( 'מחיקת_ושחזור_גרסאות' ),
+ 'RunJobs' => array( 'הרצת_משימות' ),
'Search' => array( 'חיפוש' ),
'Shortpages' => array( 'דפים_קצרים' ),
'Specialpages' => array( 'דפים_מיוחדים' ),
'Statistics' => array( 'סטטיסטיקות' ),
- 'Tags' => array( 'תגיות' ),
+ 'Tags' => array( 'תגיות', 'תגים' ),
+ 'TrackingCategories' => array( 'קטגוריות_מעקב' ),
'Unblock' => array( 'שחרור_חסימה' ),
'Uncategorizedcategories' => array( 'קטגוריות_חסרות_קטגוריה' ),
'Uncategorizedimages' => array( 'קבצים_חסרי_קטגוריה', 'תמונות_חסרות_קטגוריה' ),
@@ -183,7 +189,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'מספר משתמשים', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'מספר משתמשים פעילים', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'מספר עריכות', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'מספר צפיות', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'שם הדף', 'PAGENAME' ),
'pagenamee' => array( '1', 'שם הדף מקודד', 'PAGENAMEE' ),
'namespace' => array( '1', 'מרחב השם', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesHi.php b/languages/messages/MessagesHi.php
index 9abd5952..d9d3ea4e 100644
--- a/languages/messages/MessagesHi.php
+++ b/languages/messages/MessagesHi.php
@@ -120,7 +120,168 @@ $specialPageAliases = array(
);
$magicWords = array(
- 'redirect' => array( '0', '#अनुप्रेषित', '#REDIRECT' ),
+ 'redirect' => array( '0', '#पुनर्प्रेषित', '#अनुप्रेषित', '#REDIRECT' ),
+ 'notoc' => array( '0', '__बिना_अनुक्रम__', '__विषय_सूची_हीन__', '__NOTOC__' ),
+ 'nogallery' => array( '0', '__गैलरी_नहीं__', '__NOGALLERY__' ),
+ 'forcetoc' => array( '0', '__अनुक्रम_दिखाएँ__', '__विषय_सूची_दिखाएँ__', '__विषय_सूची_दिखायें__', '__FORCETOC__' ),
+ 'toc' => array( '0', '__अनुक्रम__', '__विषय_सूची__', '__TOC__' ),
+ 'noeditsection' => array( '0', '__अनुभाग_सम्पादन_नहीं__', '__NOEDITSECTION__' ),
+ 'currentmonth' => array( '1', 'वर्तमान_माह', 'वर्तमान_माह2', 'वर्तमान_माह२', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+ 'currentmonth1' => array( '1', 'वर्तमान_माह1', 'वर्तमान_माह१', 'CURRENTMONTH1' ),
+ 'currentmonthname' => array( '1', 'वर्तमान_माह_नाम', 'CURRENTMONTHNAME' ),
+ 'currentmonthnamegen' => array( '1', 'वर्तमान_माह_सम्बन्ध', 'CURRENTMONTHNAMEGEN' ),
+ 'currentmonthabbrev' => array( '1', 'वर्तमान_माह_संक्षेप', 'CURRENTMONTHABBREV' ),
+ 'currentday' => array( '1', 'वर्तमान_दिन', 'CURRENTDAY' ),
+ 'currentday2' => array( '1', 'वर्तमान_दिन2', 'वर्तमान_दिन२', 'CURRENTDAY2' ),
+ 'currentdayname' => array( '1', 'वर्तमान_दिन_नाम', 'CURRENTDAYNAME' ),
+ 'currentyear' => array( '1', 'वर्तमान_वर्ष', 'CURRENTYEAR' ),
+ 'currenttime' => array( '1', 'वर्तमान_समय', 'CURRENTTIME' ),
+ 'currenthour' => array( '1', 'वर्तमान_घंटा', 'CURRENTHOUR' ),
+ 'localmonth' => array( '1', 'स्थानीय_माह', 'स्थानीय_माह2', 'स्थानीय_माह२', 'LOCALMONTH', 'LOCALMONTH2' ),
+ 'localmonth1' => array( '1', 'स्थानीय_माह1', 'स्थानीय_माह१', 'LOCALMONTH1' ),
+ 'localmonthname' => array( '1', 'स्थानीय_माह_नाम', 'LOCALMONTHNAME' ),
+ 'localmonthnamegen' => array( '1', 'स्थानीय_माह_सम्बन्ध', 'LOCALMONTHNAMEGEN' ),
+ 'localmonthabbrev' => array( '1', 'स्थानीय_माह_संक्षेप', 'LOCALMONTHABBREV' ),
+ 'localday' => array( '1', 'स्थानीय_दिन', 'LOCALDAY' ),
+ 'localday2' => array( '1', 'स्थानीय_दिन2', 'स्थानीय_दिन२', 'LOCALDAY2' ),
+ 'localdayname' => array( '1', 'स्थानीय_दिन_नाम', 'LOCALDAYNAME' ),
+ 'localyear' => array( '1', 'स्थानीय_वर्ष', 'LOCALYEAR' ),
+ 'localtime' => array( '1', 'स्थानीय_समय', 'LOCALTIME' ),
+ 'localhour' => array( '1', 'स्थानीय_घंटा', 'LOCALHOUR' ),
+ 'numberofpages' => array( '1', 'पृष्ठ_संख्या', 'NUMBEROFPAGES' ),
+ 'numberofarticles' => array( '1', 'लेख_संख्या', 'NUMBEROFARTICLES' ),
+ 'numberoffiles' => array( '1', 'फ़ाइल_संख्या', 'फाइल_संख्या', 'NUMBEROFFILES' ),
+ 'numberofusers' => array( '1', 'सदस्य_संख्या', 'NUMBEROFUSERS' ),
+ 'numberofactiveusers' => array( '1', 'सक्रिय_सदस्य_संख्या', 'NUMBEROFACTIVEUSERS' ),
+ 'numberofedits' => array( '1', 'सम्पादन_संख्या', 'NUMBEROFEDITS' ),
+ 'pagename' => array( '1', 'पृष्ठ_नाम', 'PAGENAME' ),
+ 'pagenamee' => array( '1', 'पृष्ठ_नाम_कोड', 'PAGENAMEE' ),
+ 'namespace' => array( '1', 'नामस्थान', 'NAMESPACE' ),
+ 'namespacee' => array( '1', 'नामस्थान_कोड', 'NAMESPACEE' ),
+ 'namespacenumber' => array( '1', 'नामस्थान_संख्या', 'NAMESPACENUMBER' ),
+ 'talkspace' => array( '1', 'चर्चा_स्थान', 'TALKSPACE' ),
+ 'talkspacee' => array( '1', 'चर्चा_स्थान_कोड', 'TALKSPACEE' ),
+ 'subjectspace' => array( '1', 'सामग्री_स्थान', 'लेख_स्थान', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+ 'subjectspacee' => array( '1', 'सामग्री_स्थान_कोड', 'लेख_स्थान_कोड', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+ 'fullpagename' => array( '1', 'पूर्ण_पृष्ठ_नाम', 'FULLPAGENAME' ),
+ 'fullpagenamee' => array( '1', 'पूर्ण_पृष्ठ_नाम_कोड', 'FULLPAGENAMEE' ),
+ 'subpagename' => array( '1', 'उपपृष्ठ_नाम', 'SUBPAGENAME' ),
+ 'subpagenamee' => array( '1', 'उपपृष्ठ_नाम_कोड', 'SUBPAGENAMEE' ),
+ 'rootpagename' => array( '1', 'मूल_पृष्ठ_नाम', 'ROOTPAGENAME' ),
+ 'rootpagenamee' => array( '1', 'मूल_पृष्ठ_नाम_कोड', 'ROOTPAGENAMEE' ),
+ 'basepagename' => array( '1', 'तल_पृष्ठ_नाम', 'BASEPAGENAME' ),
+ 'basepagenamee' => array( '1', 'तल_पृष्ठ_नाम_कोड', 'BASEPAGENAMEE' ),
+ 'talkpagename' => array( '1', 'चर्चा_पृष्ठ_नाम', 'TALKPAGENAME' ),
+ 'talkpagenamee' => array( '1', 'चर्चा_पृष्ठ_नाम_कोड', 'TALKPAGENAMEE' ),
+ 'subjectpagename' => array( '1', 'सामग्री_पृष्ठ_नाम', 'लेख_पृष्ठ_नाम', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+ 'subjectpagenamee' => array( '1', 'सामग्री_पृष्ठ_नाम_कोड', 'लेख_पृष्ठ_नाम_कोड', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+ 'msg' => array( '0', 'सन्देश:', 'संदेश:', 'MSG:' ),
+ 'subst' => array( '0', 'प्रति:', 'SUBST:' ),
+ 'safesubst' => array( '0', 'सुरक्षित_प्रति:', 'SAFESUBST:' ),
+ 'msgnw' => array( '0', 'सन्देश_नोविकी:', 'संदेश_नोविकी:', 'MSGNW:' ),
+ 'img_thumbnail' => array( '1', 'अंगूठाकार', 'अंगूठा', 'thumbnail', 'thumb' ),
+ 'img_manualthumb' => array( '1', 'अंगूठाकार=$1', 'अंगूठा=$1', 'thumbnail=$1', 'thumb=$1' ),
+ 'img_right' => array( '1', 'दाएँ', 'दायें', 'दाएं', 'right' ),
+ 'img_left' => array( '1', 'बाएँ', 'बायें', 'बाएं', 'left' ),
+ 'img_none' => array( '1', 'कोई_नहीं', 'none' ),
+ 'img_width' => array( '1', '$1पिक्सेल', '$1px' ),
+ 'img_center' => array( '1', 'केन्द्र', 'केंद्र', 'केन्द्रित', 'केंद्रित', 'center', 'centre' ),
+ 'img_framed' => array( '1', 'फ़्रेम', 'फ्रेम', 'framed', 'enframed', 'frame' ),
+ 'img_frameless' => array( '1', 'फ़्रेमहीन', 'फ्रेमहीन', 'frameless' ),
+ 'img_lang' => array( '1', 'भाषा=$1', 'lang=$1' ),
+ 'img_page' => array( '1', 'पृष्ठ=$1', 'पृष्ठ_$1', 'page=$1', 'page $1' ),
+ 'img_upright' => array( '1', 'खड़ी', 'खड़ी=$1', 'खड़ी_$1', 'upright', 'upright=$1', 'upright $1' ),
+ 'img_border' => array( '1', 'किनारा', 'बॉर्डर', 'border' ),
+ 'img_baseline' => array( '1', 'आधार_रेखा', 'baseline' ),
+ 'img_sub' => array( '1', 'पद', 'sub' ),
+ 'img_super' => array( '1', 'मूर्ध', 'super', 'sup' ),
+ 'img_top' => array( '1', 'शीर्ष', 'top' ),
+ 'img_text_top' => array( '1', 'पाठ-शीर्ष', 'text-top' ),
+ 'img_middle' => array( '1', 'मध्य', 'middle' ),
+ 'img_bottom' => array( '1', 'तल', 'bottom' ),
+ 'img_text_bottom' => array( '1', 'पाठ-तल', 'text-bottom' ),
+ 'img_link' => array( '1', 'कड़ी=$1', 'link=$1' ),
+ 'img_alt' => array( '1', 'पाठ=$1', 'alt=$1' ),
+ 'img_class' => array( '1', 'वर्ग=$1', 'class=$1' ),
+ 'int' => array( '0', 'विश्व:', 'INT:' ),
+ 'sitename' => array( '1', 'साइट_नाम', 'SITENAME' ),
+ 'ns' => array( '0', 'नामस्थान:', 'NS:' ),
+ 'nse' => array( '0', 'नामस्थान_कोड:', 'NSE:' ),
+ 'localurl' => array( '0', 'स्थानीय_यू_आर_एल:', 'LOCALURL:' ),
+ 'localurle' => array( '0', 'स्थानीय_यू_आर_एल_कोड:', 'LOCALURLE:' ),
+ 'articlepath' => array( '0', 'लेख_पथ', 'ARTICLEPATH' ),
+ 'pageid' => array( '0', 'पृष्ठ_आइ_डी', 'PAGEID' ),
+ 'server' => array( '0', 'सर्वर', 'SERVER' ),
+ 'servername' => array( '0', 'सर्वर_नाम', 'SERVERNAME' ),
+ 'scriptpath' => array( '0', 'स्क्रिप्ट_पथ', 'SCRIPTPATH' ),
+ 'stylepath' => array( '0', 'स्टाइल_पथ', 'STYLEPATH' ),
+ 'grammar' => array( '0', 'व्याकरण:', 'GRAMMAR:' ),
+ 'gender' => array( '0', 'लिंग:', 'GENDER:' ),
+ 'currentweek' => array( '1', 'वर्तमान_सप्ताह', 'CURRENTWEEK' ),
+ 'currentdow' => array( '1', 'वर्तमान_सप्ताह_का_दिन', 'CURRENTDOW' ),
+ 'localweek' => array( '1', 'स्थानीय_सप्ताह', 'LOCALWEEK' ),
+ 'localdow' => array( '1', 'स्थानीय_सप्ताह_का_दिन', 'LOCALDOW' ),
+ 'revisionid' => array( '1', 'अवतरण_संख्या', 'REVISIONID' ),
+ 'revisionday' => array( '1', 'अवतरण_दिन', 'REVISIONDAY' ),
+ 'revisionday2' => array( '1', 'अवतरण_दिन2', 'अवतरण_दिन२', 'REVISIONDAY2' ),
+ 'revisionmonth' => array( '1', 'अवतरण_माह', 'REVISIONMONTH' ),
+ 'revisionmonth1' => array( '1', 'अवतरण_माह1', 'अवतरण_माह१', 'REVISIONMONTH1' ),
+ 'revisionyear' => array( '1', 'अवतरण_वर्ष', 'REVISIONYEAR' ),
+ 'revisiontimestamp' => array( '1', 'अवतरण_समय', 'REVISIONTIMESTAMP' ),
+ 'revisionuser' => array( '1', 'अवतरण_सदस्य', 'REVISIONUSER' ),
+ 'revisionsize' => array( '1', 'अवतरण_आकार', 'REVISIONSIZE' ),
+ 'plural' => array( '0', 'वचन:', 'PLURAL:' ),
+ 'fullurl' => array( '0', 'पूर्ण_यू_आर_एल:', 'FULLURL:' ),
+ 'fullurle' => array( '0', 'पूर्ण_यू_आर_एल_कोड:', 'FULLURLE:' ),
+ 'canonicalurl' => array( '0', 'मानक_यू_आर_एल:', 'CANONICALURL:' ),
+ 'canonicalurle' => array( '0', 'मानक_यू_आर_एल_कोड:', 'CANONICALURLE:' ),
+ 'lcfirst' => array( '0', 'छोटे_अक्षर_से_शुरू:', 'LCFIRST:' ),
+ 'ucfirst' => array( '0', 'बड़े_अक्षर_से_शुरू:', 'UCFIRST:' ),
+ 'lc' => array( '0', 'छोटे_अक्षर:', 'LC:' ),
+ 'uc' => array( '0', 'बड़े_अक्षर:', 'UC:' ),
+ 'raw' => array( '0', 'सादा:', 'RAW:' ),
+ 'displaytitle' => array( '1', 'दृश्य_शीर्षक', 'DISPLAYTITLE' ),
+ 'rawsuffix' => array( '1', 'उ', 'R' ),
+ 'nocommafysuffix' => array( '0', 'वि_नहीं', 'NOSEP' ),
+ 'newsectionlink' => array( '1', '__विषय_जोड़ें_कड़ी__', '__NEWSECTIONLINK__' ),
+ 'nonewsectionlink' => array( '1', '__विषय_जोड़े_कड़ी_रहित__', '__NONEWSECTIONLINK__' ),
+ 'currentversion' => array( '1', 'वर्तमान_अवतरण', 'CURRENTVERSION' ),
+ 'urlencode' => array( '0', 'यू_आर_एल_कोड:', 'URLENCODE:' ),
+ 'anchorencode' => array( '0', 'ऐंकर_कोड', 'ANCHORENCODE' ),
+ 'currenttimestamp' => array( '1', 'वर्तमान_समय_मुहर', 'CURRENTTIMESTAMP' ),
+ 'localtimestamp' => array( '1', 'स्थानीय_समय_मुहर', 'LOCALTIMESTAMP' ),
+ 'directionmark' => array( '1', 'दिशा_चिन्ह', 'DIRECTIONMARK', 'DIRMARK' ),
+ 'language' => array( '0', '#भाषा:', '#LANGUAGE:' ),
+ 'contentlanguage' => array( '1', 'सामग्री_भाषा', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+ 'pagesinnamespace' => array( '1', 'नामस्थान_में_पृष्ठ:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+ 'numberofadmins' => array( '1', 'प्रबन्धक_संख्या', 'प्रबंधक_संख्या', 'NUMBEROFADMINS' ),
+ 'formatnum' => array( '0', 'संख्या_रूप', 'FORMATNUM' ),
+ 'padleft' => array( '0', 'बाएँ_जोड़ें', 'बायें_जोड़ें', 'PADLEFT' ),
+ 'padright' => array( '0', 'दाएँ_जोड़ें', 'दायें_जोड़ें', 'PADRIGHT' ),
+ 'special' => array( '0', 'विशेष', 'special' ),
+ 'speciale' => array( '0', 'विशेष_कोड', 'speciale' ),
+ 'defaultsort' => array( '1', 'मूल_सॉर्ट:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+ 'filepath' => array( '0', 'फ़ाइल_पथ:', 'FILEPATH:' ),
+ 'tag' => array( '0', 'टैग', 'tag' ),
+ 'hiddencat' => array( '1', '__छुपी_श्रेणी__', '__छिपी_श्रेणी__', '__HIDDENCAT__' ),
+ 'pagesincategory' => array( '1', 'श्रेणी_में_पृष्ठ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+ 'pagesize' => array( '1', 'पृष्ठ_आकार', 'PAGESIZE' ),
+ 'index' => array( '1', '__सूचीबद्ध__', '__INDEX__' ),
+ 'noindex' => array( '1', '__असूचीबद्ध__', '__NOINDEX__' ),
+ 'numberingroup' => array( '1', 'समूह_संख्या', 'NUMBERINGROUP', 'NUMINGROUP' ),
+ 'staticredirect' => array( '1', '__स्थिर_पुनर्प्रेषण__', '__स्थिर_अनुप्रेषण__', '__STATICREDIRECT__' ),
+ 'protectionlevel' => array( '1', 'सुरक्षा_स्तर', 'PROTECTIONLEVEL' ),
+ 'cascadingsources' => array( '1', 'सीढ़ी_सुरक्षा_स्रोत', 'CASCADINGSOURCES' ),
+ 'formatdate' => array( '0', 'तिथि_रूप', 'formatdate', 'dateformat' ),
+ 'url_path' => array( '0', 'पथ', 'PATH' ),
+ 'url_wiki' => array( '0', 'विकी', 'WIKI' ),
+ 'url_query' => array( '0', 'पाठ', 'QUERY' ),
+ 'defaultsort_noerror' => array( '0', 'त्रुटि_नहीं', 'noerror' ),
+ 'defaultsort_noreplace' => array( '0', 'बदलें_नहीं', 'noreplace' ),
+ 'pagesincategory_all' => array( '0', 'सभी', 'all' ),
+ 'pagesincategory_pages' => array( '0', 'पृष्ठ', 'pages' ),
+ 'pagesincategory_subcats' => array( '0', 'श्रेणियाँ', 'subcats' ),
+ 'pagesincategory_files' => array( '0', 'फ़ाइलें', 'फाइलें', 'files' ),
);
$digitTransformTable = array(
diff --git a/languages/messages/MessagesHr.php b/languages/messages/MessagesHr.php
index 53cbf540..65077c1e 100644
--- a/languages/messages/MessagesHr.php
+++ b/languages/messages/MessagesHr.php
@@ -85,6 +85,7 @@ $specialPageAliases = array(
'Mycontributions' => array( 'Moji_doprinosi' ),
'Mypage' => array( 'Moja_stranica' ),
'Mytalk' => array( 'Moj_razgovor' ),
+ 'Myuploads' => array( 'Moje_datoteke' ),
'Newimages' => array( 'Nove_datoteke', 'Nove_slike' ),
'Newpages' => array( 'Nove_stranice' ),
'Popularpages' => array( 'Popularne_stranice' ),
@@ -117,7 +118,7 @@ $specialPageAliases = array(
'Userlogin' => array( 'Prijava' ),
'Userlogout' => array( 'Odjava' ),
'Userrights' => array( 'Suradnička_prava' ),
- 'Version' => array( 'Verzija' ),
+ 'Version' => array( 'Verzija', 'Inačica' ),
'Wantedcategories' => array( 'Tražene_kategorije' ),
'Wantedfiles' => array( 'Tražene_datoteke' ),
'Wantedpages' => array( 'Tražene_stranice' ),
@@ -128,7 +129,7 @@ $specialPageAliases = array(
);
$magicWords = array(
- 'redirect' => array( '0', '#PREUSMJERI', '#REDIRECT' ),
+ 'redirect' => array( '0', '#Preusmjeri', '#PREUSMJERI', '#REDIRECT' ),
'notoc' => array( '0', '__BEZSADRŽAJA__', '__NOTOC__' ),
'nogallery' => array( '0', '__BEZGALERIJE__', '__NOGALLERY__' ),
'forcetoc' => array( '0', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
@@ -162,7 +163,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'BROJSURADNIKA', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'BROJAKTIVNIHSURADNIKA', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'IMESTRANICE', 'PAGENAME' ),
'pagenamee' => array( '1', 'IMESTRANICEE', 'PAGENAMEE' ),
'namespace' => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
@@ -190,6 +190,7 @@ $magicWords = array(
'img_center' => array( '1', 'središte', 'center', 'centre' ),
'img_framed' => array( '1', 'okvir', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'bezokvira', 'frameless' ),
+ 'img_lang' => array( '1', 'jezik=$1', 'lang=$1' ),
'img_page' => array( '1', 'stranica=$1', 'stranica $1', 'page=$1', 'page $1' ),
'img_upright' => array( '1', 'uspravno=$1', 'uspravno $1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', 'obrub', 'border' ),
@@ -201,6 +202,7 @@ $magicWords = array(
'img_middle' => array( '1', 'pola', 'middle' ),
'img_bottom' => array( '1', 'dno', 'bottom' ),
'img_text_bottom' => array( '1', 'tekst-dno', 'text-bottom' ),
+ 'img_link' => array( '1', 'poveznica=$1', 'link=$1' ),
'sitename' => array( '1', 'IMEPROJEKTA', 'SITENAME' ),
'ns' => array( '0', 'IMP:', 'NS:' ),
'localurl' => array( '0', 'MJESNIURL:', 'LOCALURL:' ),
diff --git a/languages/messages/MessagesHsb.php b/languages/messages/MessagesHsb.php
index 22219b26..fb8fdb3b 100644
--- a/languages/messages/MessagesHsb.php
+++ b/languages/messages/MessagesHsb.php
@@ -70,6 +70,7 @@ $specialPageAliases = array(
'Deadendpages' => array( 'Strony_bjez_wotkazow' ),
'DeletedContributions' => array( 'Zničene_přinoški' ),
'DoubleRedirects' => array( 'Dwójne_daleposrědkowanja' ),
+ 'EditWatchlist' => array( 'Wobkedźbowanki_wobdźěłać' ),
'Emailuser' => array( 'E-Mejl' ),
'Export' => array( 'Eksport' ),
'Fewestrevisions' => array( 'Strony_z_najmjenje_wersijemi' ),
@@ -104,6 +105,7 @@ $specialPageAliases = array(
'Mytalk' => array( 'Moja_diskusijna_strona' ),
'Newimages' => array( 'Nowe_dataje' ),
'Newpages' => array( 'Nowe_strony' ),
+ 'PermanentLink' => array( 'Trajny_wotkaz' ),
'Popularpages' => array( 'Najwoblubowaniše_strony' ),
'Preferences' => array( 'Nastajenja' ),
'Prefixindex' => array( 'Prefiksindeks' ),
@@ -113,6 +115,7 @@ $specialPageAliases = array(
'Randomredirect' => array( 'Připadne_daleposrědkowanje' ),
'Recentchanges' => array( 'Aktualne_změny' ),
'Recentchangeslinked' => array( 'Změny_zwjazanych_stronow' ),
+ 'Redirect' => array( 'Dalesposrědkowanje' ),
'Revisiondelete' => array( 'Wušmórnjenje_wersijow' ),
'Search' => array( 'Pytać' ),
'Shortpages' => array( 'Najkrótše_strony' ),
diff --git a/languages/messages/MessagesHu.php b/languages/messages/MessagesHu.php
index eca285ed..0019a4b8 100644
--- a/languages/messages/MessagesHu.php
+++ b/languages/messages/MessagesHu.php
@@ -188,7 +188,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'SZERKESZTŐKSZÁMA', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'AKTÍVSZERKESZTŐKSZÁMA', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'SZERKESZTÉSEKSZÁMA', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'MEGTEKINTÉSEKSZÁMA', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'OLDALNEVE', 'PAGENAME' ),
'pagenamee' => array( '1', 'OLDALNEVEE', 'PAGENAMEE' ),
'namespace' => array( '1', 'NÉVTERE', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesId.php b/languages/messages/MessagesId.php
index dc2ea358..35109313 100644
--- a/languages/messages/MessagesId.php
+++ b/languages/messages/MessagesId.php
@@ -84,7 +84,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'JUMLAHPENGGUNA', 'JUMPENG', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'JUMLAHPENGGUNAAKTIF', 'JUMPENGTIF', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'JUMLAHSUNTINGAN', 'JUMTING', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'JUMLAHTAMPILAN', 'JUMTAM', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NAMAHALAMAN', 'NAMMAN', 'PAGENAME' ),
'pagenamee' => array( '1', 'NAMAHALAMANE', 'NAMMANE', 'PAGENAMEE' ),
'namespace' => array( '1', 'RUANGNAMA', 'RUNAM', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesIt.php b/languages/messages/MessagesIt.php
index 7c0f1a7b..27bbe784 100644
--- a/languages/messages/MessagesIt.php
+++ b/languages/messages/MessagesIt.php
@@ -62,21 +62,21 @@ $specialPageAliases = array(
'ChangeEmail' => array( 'CambiaEmail' ),
'ChangePassword' => array( 'CambiaPassword' ),
'ComparePages' => array( 'ComparaPagine' ),
- 'Confirmemail' => array( 'ConfermaEMail' ),
+ 'Confirmemail' => array( 'ConfermaEmail' ),
'Contributions' => array( 'Contributi', 'ContributiUtente', 'Edit' ),
- 'CreateAccount' => array( 'CreaAccount' ),
+ 'CreateAccount' => array( 'CreaUtenza', 'CreaAccount' ),
'Deadendpages' => array( 'PagineSenzaUscita' ),
'DeletedContributions' => array( 'ContributiCancellati' ),
'DoubleRedirects' => array( 'RedirectDoppi' ),
'EditWatchlist' => array( 'ModificaOsservati', 'ModificaOsservatiSpeciali', 'ModificaListaSeguiti' ),
- 'Emailuser' => array( 'InviaEMail' ),
+ 'Emailuser' => array( 'InviaEmail' ),
'ExpandTemplates' => array( 'EspandiTemplate' ),
'Export' => array( 'Esporta' ),
'Fewestrevisions' => array( 'PagineConMenoRevisioni' ),
'FileDuplicateSearch' => array( 'CercaFileDuplicati' ),
'Filepath' => array( 'Percorso' ),
'Import' => array( 'Importa' ),
- 'Invalidateemail' => array( 'InvalidaEMail' ),
+ 'Invalidateemail' => array( 'InvalidaEmail' ),
'JavaScriptTest' => array( 'TestJavaScript' ),
'BlockList' => array( 'IPBloccati', 'ElencoBlocchi', 'Blocchi' ),
'LinkSearch' => array( 'CercaCollegamenti', 'CercaLink' ),
@@ -84,13 +84,14 @@ $specialPageAliases = array(
'Listbots' => array( 'Bot', 'ElencoBot' ),
'Listfiles' => array( 'File', 'Immagini' ),
'Listgrouprights' => array( 'ElencoPermessiGruppi', 'Privilegi' ),
- 'Listredirects' => array( 'Redirect', 'ElencoRedirect' ),
+ 'Listredirects' => array( 'ElencoRedirect' ),
+ 'ListDuplicatedFiles' => array( 'ElencoFileDuplicati' ),
'Listusers' => array( 'Utenti', 'ElencoUtenti' ),
'Lockdb' => array( 'BloccaDB' ),
'Log' => array( 'Registri', 'Registro' ),
'Lonelypages' => array( 'PagineOrfane' ),
'Longpages' => array( 'PaginePiùLunghe' ),
- 'MergeHistory' => array( 'FondiCronologia', 'UnificaCronologia' ),
+ 'MergeHistory' => array( 'UnisciCronologia' ),
'MIMEsearch' => array( 'RicercaMIME' ),
'Mostcategories' => array( 'PagineConPiùCategorie' ),
'Mostimages' => array( 'ImmaginiPiùRichiamate' ),
@@ -107,6 +108,7 @@ $specialPageAliases = array(
'Myuploads' => array( 'MieiUpload', 'MieiEdit' ),
'Newimages' => array( 'ImmaginiRecenti' ),
'Newpages' => array( 'PaginePiùRecenti' ),
+ 'PagesWithProp' => array( 'PagineConProprietà' ),
'PasswordReset' => array( 'ReimpostaPassword' ),
'PermanentLink' => array( 'LinkPermanente' ),
'Popularpages' => array( 'PaginePiùVisitate' ),
@@ -119,12 +121,14 @@ $specialPageAliases = array(
'Randomredirect' => array( 'RedirectCasuale' ),
'Recentchanges' => array( 'UltimeModifiche' ),
'Recentchangeslinked' => array( 'ModificheCorrelate' ),
+ 'ResetTokens' => array( 'ReimpostaToken' ),
'Revisiondelete' => array( 'CancellaRevisione' ),
'Search' => array( 'Ricerca', 'Cerca', 'Trova' ),
'Shortpages' => array( 'PaginePiùCorte' ),
'Specialpages' => array( 'PagineSpeciali' ),
'Statistics' => array( 'Statistiche' ),
'Tags' => array( 'Etichette', 'Tag' ),
+ 'TrackingCategories' => array( 'CategorieMonitoraggio' ),
'Unblock' => array( 'ElencoSblocchi', 'Sblocchi' ),
'Uncategorizedcategories' => array( 'CategorieSenzaCategorie' ),
'Uncategorizedimages' => array( 'ImmaginiSenzaCategorie' ),
@@ -180,7 +184,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NUMEROUTENTI', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NUMEROUTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NUMEROMODIFICHE', 'NUMEROEDIT', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NUMEROVISITE', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'TITOLOPAGINA', 'PAGENAME' ),
'pagenamee' => array( '1', 'TITOLOPAGINAE', 'PAGENAMEE' ),
'subpagename' => array( '1', 'NOMESOTTOPAGINA', 'SUBPAGENAME' ),
diff --git a/languages/messages/MessagesJa.php b/languages/messages/MessagesJa.php
index aef8dad7..caca23dd 100644
--- a/languages/messages/MessagesJa.php
+++ b/languages/messages/MessagesJa.php
@@ -60,7 +60,8 @@ $namespaceAliases = array(
$specialPageAliases = array(
'Activeusers' => array( '活動中の利用者', '活動中の利用者一覧' ),
- 'Allmessages' => array( 'メッセージ一覧', 'システムメッセージの一覧', '表示メッセージの一覧' ),
+ 'Allmessages' => array( 'メッセージ一覧', 'システムメッセージの一覧', '表示メッセージの一覧', '全メッセージ' ),
+ 'AllMyUploads' => array( '自分の全アップロード' ),
'Allpages' => array( 'ページ一覧', '全ページ' ),
'Ancientpages' => array( '更新されていないページ' ),
'Badtitle' => array( '不正なページ名' ),
@@ -77,6 +78,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'アカウント作成', 'アカウントの作成' ),
'Deadendpages' => array( '有効なページへのリンクがないページ', '行き止まりページ' ),
'DeletedContributions' => array( '削除された投稿記録', '削除された投稿履歴', '削除歴' ),
+ 'Diff' => array( '差分' ),
'DoubleRedirects' => array( '二重リダイレクト', '二重転送' ),
'EditWatchlist' => array( 'ウォッチリストの編集', 'ウォッチリスト編集' ),
'Emailuser' => array( 'メール送信', 'ウィキメール' ),
@@ -95,11 +97,13 @@ $specialPageAliases = array(
'Listfiles' => array( 'ファイル一覧', 'ファイルリスト' ),
'Listgrouprights' => array( '利用者グループ権限', '利用者グループの権限一覧', '利用者権限一覧' ),
'Listredirects' => array( 'リダイレクト一覧', 'リダイレクトの一覧', 'リダイレクトリスト' ),
+ 'ListDuplicatedFiles' => array( '重複ファイル一覧' ),
'Listusers' => array( '登録利用者一覧', '登録利用者の一覧' ),
'Lockdb' => array( 'データベースロック' ),
'Log' => array( 'ログ', '記録' ),
'Lonelypages' => array( '孤立しているページ' ),
'Longpages' => array( '長いページ' ),
+ 'MediaStatistics' => array( 'メディア統計' ),
'MergeHistory' => array( '履歴統合' ),
'MIMEsearch' => array( 'MIME検索', 'MIMEタイプ検索' ),
'Mostcategories' => array( 'カテゴリの多いページ', 'カテゴリの多い項目' ),
@@ -118,6 +122,7 @@ $specialPageAliases = array(
'Newimages' => array( '新着ファイル', '新しいファイルの一覧', '新着画像展示室' ),
'Newpages' => array( '新しいページ' ),
'PagesWithProp' => array( 'プロパティがあるページ' ),
+ 'PageLanguage' => array( 'ページ言語' ),
'PasswordReset' => array( 'パスワード再設定', 'パスワードの再設定', 'パスワードのリセット', 'パスワードリセット' ),
'PermanentLink' => array( '固定リンク', 'パーマリンク' ),
'Popularpages' => array( '人気ページ' ),
@@ -126,7 +131,7 @@ $specialPageAliases = array(
'Protectedpages' => array( '保護されているページ' ),
'Protectedtitles' => array( '作成保護されているページ名' ),
'Randompage' => array( 'おまかせ表示' ),
- 'RandomInCategory' => array( 'カテゴリ内おまかせ表示', 'カテゴリ中のランダムなページ' ),
+ 'RandomInCategory' => array( 'カテゴリ内おまかせ表示' ),
'Randomredirect' => array( 'おまかせリダイレクト', 'おまかせ転送' ),
'Recentchanges' => array( '最近の更新', '最近更新したページ' ),
'Recentchangeslinked' => array( '関連ページの更新状況', 'リンク先の更新状況' ),
@@ -138,6 +143,7 @@ $specialPageAliases = array(
'Specialpages' => array( '特別ページ一覧' ),
'Statistics' => array( '統計' ),
'Tags' => array( 'タグ一覧' ),
+ 'TrackingCategories' => array( '追跡カテゴリ' ),
'Unblock' => array( 'ブロック解除' ),
'Uncategorizedcategories' => array( 'カテゴリ未導入のカテゴリ' ),
'Uncategorizedimages' => array( 'カテゴリ未導入のファイル' ),
@@ -199,19 +205,21 @@ $magicWords = array(
'numberofusers' => array( '1', '利用者数', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', '活動利用者数', '有効な利用者数', '有効利用者数', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', '編集回数', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', '閲覧回数', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'ページ名', 'PAGENAME' ),
'pagenamee' => array( '1', 'ページ名E', 'ページ名E', 'PAGENAMEE' ),
'namespace' => array( '1', '名前空間', 'NAMESPACE' ),
'namespacee' => array( '1', '名前空間E', '名前空間E', 'NAMESPACEE' ),
+ 'namespacenumber' => array( '1', '名前空間番号', 'NAMESPACENUMBER' ),
'talkspace' => array( '1', 'トーク空間', 'ノート空間', '会話空間', 'トークスペース', 'TALKSPACE' ),
'talkspacee' => array( '1', 'トーク空間E', 'トーク空間E', 'ノート空間E', '会話空間E', 'ノート空間E', '会話空間E', 'トークスペースE', 'トークスペースE', 'TALKSPACEE' ),
'subjectspace' => array( '1', '主空間', '標準空間', '記事空間', 'SUBJECTSPACE', 'ARTICLESPACE' ),
'subjectspacee' => array( '1', '主空間E', '標準空間E', '標準空間E', '記事空間E', '記事空間E', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
'fullpagename' => array( '1', '完全なページ名', 'フルページ名', '完全な記事名', '完全記事名', 'FULLPAGENAME' ),
'fullpagenamee' => array( '1', '完全なページ名E', 'フルページ名E', 'フルページ名E', '完全なページ名E', 'FULLPAGENAMEE' ),
- 'subpagename' => array( '1', 'サブページ名', 'SUBPAGENAME' ),
- 'subpagenamee' => array( '1', 'サブページ名E', 'サブページ名E', 'SUBPAGENAMEE' ),
+ 'subpagename' => array( '1', 'サブページ名', '下位ページ名', 'SUBPAGENAME' ),
+ 'subpagenamee' => array( '1', 'サブページ名E', 'サブページ名E', '下位ページ名E', '下位ページ名E', 'SUBPAGENAMEE' ),
+ 'rootpagename' => array( '1', 'ルートページ名', 'ROOTPAGENAME' ),
+ 'rootpagenamee' => array( '1', 'ルートページ名E', 'ルートページ名E', 'ROOTPAGENAMEE' ),
'basepagename' => array( '1', '親ページ名', 'BASEPAGENAME' ),
'basepagenamee' => array( '1', '親ページ名E', '親ページ名E', 'BASEPAGENAMEE' ),
'talkpagename' => array( '1', 'トークページ名', '会話ページ名', 'TALKPAGENAME' ),
@@ -251,6 +259,7 @@ $magicWords = array(
'localurl' => array( '0', 'ローカルURL:', 'ローカルURL:', 'LOCALURL:' ),
'localurle' => array( '0', 'ローカルURLE:', 'ローカルURLE:', 'LOCALURLE:' ),
'articlepath' => array( '0', '記事パス', 'ARTICLEPATH' ),
+ 'pageid' => array( '0', 'ページID', 'ページID', 'PAGEID' ),
'server' => array( '0', 'サーバー', 'サーバ', 'SERVER' ),
'servername' => array( '0', 'サーバー名', 'サーバーネーム', 'サーバ名', 'サーバネーム', 'SERVERNAME' ),
'scriptpath' => array( '0', 'スクリプトパス', 'SCRIPTPATH' ),
@@ -300,7 +309,7 @@ $magicWords = array(
'defaultsort' => array( '1', 'デフォルトソート:', 'デフォルトソート:', 'デフォルトソートキー:', 'デフォルトカテゴリソート:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'ファイルパス:', 'ファイルパス:', 'FILEPATH:' ),
'tag' => array( '0', 'タグ', 'tag' ),
- 'hiddencat' => array( '1', '__カテゴリ非表示__', '__カテ非表示__', '__非表示カテ__', '__HIDDENCAT__' ),
+ 'hiddencat' => array( '1', '__カテゴリ非表示__', '__カテ非表示__', '__非表示カテ__', '__隠しカテゴリ__', '__HIDDENCAT__' ),
'pagesincategory' => array( '1', 'カテゴリ内ページ数', 'PAGESINCATEGORY', 'PAGESINCAT' ),
'pagesize' => array( '1', 'ページサイズ', 'PAGESIZE' ),
'index' => array( '1', '__インデックス__', '__インデックス__', '__INDEX__' ),
diff --git a/languages/messages/MessagesKhw.php b/languages/messages/MessagesKhw.php
index 4cd2495f..bcc83289 100644
--- a/languages/messages/MessagesKhw.php
+++ b/languages/messages/MessagesKhw.php
@@ -12,7 +12,6 @@ $fallback = 'ur';
$rtl = true;
$namespaceNames = array(
- NS_MAIN => '',
NS_MEDIA => 'میڈیا',
NS_SPECIAL => 'خاص',
NS_TALK => 'مشقولگی',
diff --git a/languages/messages/MessagesKk_arab.php b/languages/messages/MessagesKk_arab.php
index a33efef6..8749ccbe 100644
--- a/languages/messages/MessagesKk_arab.php
+++ b/languages/messages/MessagesKk_arab.php
@@ -50,7 +50,6 @@ $fallback8bitEncoding = 'windows-1256';
$namespaceNames = array(
NS_MEDIA => 'تاسپا',
NS_SPECIAL => 'ارنايى',
- NS_MAIN => '',
NS_TALK => 'تالقىلاۋ',
NS_USER => 'قاتىسۋشى',
NS_USER_TALK => 'قاتىسۋشى_تالقىلاۋى',
diff --git a/languages/messages/MessagesKo.php b/languages/messages/MessagesKo.php
index 4e83fe3d..d34e249a 100644
--- a/languages/messages/MessagesKo.php
+++ b/languages/messages/MessagesKo.php
@@ -76,6 +76,7 @@ $specialPageAliases = array(
'Allmessages' => array( '모든메시지' ),
'AllMyUploads' => array( '모든내올린파일', '모든내파일' ),
'Allpages' => array( '모든문서' ),
+ 'ApiHelp' => array( 'Api도움말' ),
'Ancientpages' => array( '오래된문서' ),
'Badtitle' => array( '잘못된제목', '인식불가제목', '잘못된이름', '인식불가이름' ),
'Blankpage' => array( '빈문서' ),
@@ -84,16 +85,17 @@ $specialPageAliases = array(
'BrokenRedirects' => array( '끊긴넘겨주기' ),
'Categories' => array( '분류' ),
'ChangeEmail' => array( '이메일바꾸기', '이메일변경' ),
- 'ChangePassword' => array( '비밀번호바꾸기', '비밀번호변경', '비밀단어바꾸기', '비밀단어변경' ),
+ 'ChangePassword' => array( '비밀번호바꾸기', '비밀번호변경' ),
'ComparePages' => array( '문서비교' ),
- 'Confirmemail' => array( '이메일인증' ),
+ 'Confirmemail' => array( '이메일확인', '이메일인증' ),
'Contributions' => array( '기여', '기여목록' ),
'CreateAccount' => array( '계정만들기', '가입' ),
'Deadendpages' => array( '막다른문서' ),
'DeletedContributions' => array( '삭제된기여' ),
+ 'Diff' => array( '차이' ),
'DoubleRedirects' => array( '이중넘겨주기' ),
'EditWatchlist' => array( '주시문서목록편집' ),
- 'Emailuser' => array( '이메일보내기' ),
+ 'Emailuser' => array( '이메일보내기', '이메일' ),
'ExpandTemplates' => array( '틀전개' ),
'Export' => array( '내보내기' ),
'Fewestrevisions' => array( '역사짧은문서' ),
@@ -109,11 +111,13 @@ $specialPageAliases = array(
'Listfiles' => array( '파일', '그림', '파일목록', '그림목록' ),
'Listgrouprights' => array( '사용자권한', '권한목록' ),
'Listredirects' => array( '넘겨주기목록' ),
+ 'ListDuplicatedFiles' => array( '중복된파일목록' ),
'Listusers' => array( '사용자', '사용자목록' ),
'Lockdb' => array( 'DB잠금', 'DB잠그기' ),
'Log' => array( '기록', '로그' ),
'Lonelypages' => array( '외톨이문서', '홀로된문서' ),
'Longpages' => array( '긴문서' ),
+ 'MediaStatistics' => array( '미디어통계' ),
'MergeHistory' => array( '역사합치기' ),
'MIMEsearch' => array( 'MIME검색', 'MIME찾기' ),
'Mostcategories' => array( '많이분류된문서' ),
@@ -132,7 +136,8 @@ $specialPageAliases = array(
'Newimages' => array( '새파일', '새그림' ),
'Newpages' => array( '새문서' ),
'PagesWithProp' => array( '속성별문서' ),
- 'PasswordReset' => array( '비밀번호재설정', '비밀단어재설정', '비밀번호초기화', '비밀단어초기화' ),
+ 'PageLanguage' => array( '문서언어' ),
+ 'PasswordReset' => array( '비밀번호재설정', '비밀번호초기화' ),
'PermanentLink' => array( '고유링크', '영구링크' ),
'Popularpages' => array( '인기있는문서' ),
'Preferences' => array( '환경설정' ),
@@ -140,18 +145,20 @@ $specialPageAliases = array(
'Protectedpages' => array( '보호된문서' ),
'Protectedtitles' => array( '만들기보호된문서', '생성보호된문서' ),
'Randompage' => array( '임의문서' ),
- 'RandomInCategory' => array( '분류에있는임의문서' ),
+ 'RandomInCategory' => array( '분류안의임의문서' ),
'Randomredirect' => array( '임의넘겨주기' ),
'Recentchanges' => array( '최근바뀜' ),
'Recentchangeslinked' => array( '링크최근바뀜' ),
'Redirect' => array( '넘겨주기' ),
'ResetTokens' => array( '토큰재설정' ),
'Revisiondelete' => array( '특정판삭제' ),
+ 'RunJobs' => array( '작업실행' ),
'Search' => array( '검색', '찾기' ),
'Shortpages' => array( '짧은문서' ),
'Specialpages' => array( '특수문서', '특수기능' ),
'Statistics' => array( '통계' ),
'Tags' => array( '태그' ),
+ 'TrackingCategories' => array( '추적용분류' ),
'Unblock' => array( '차단해제' ),
'Uncategorizedcategories' => array( '분류안된분류' ),
'Uncategorizedimages' => array( '분류안된파일', '분류안된그림' ),
@@ -165,8 +172,8 @@ $specialPageAliases = array(
'Unwatchedpages' => array( '주시안되는문서' ),
'Upload' => array( '올리기', '파일올리기', '그림올리기', '업로드' ),
'UploadStash' => array( '올린비공개파일', '비공개로올린파일' ),
- 'Userlogin' => array( '로그인' ),
- 'Userlogout' => array( '로그아웃' ),
+ 'Userlogin' => array( '로그인', '사용자로그인' ),
+ 'Userlogout' => array( '로그아웃', '사용자로그아웃' ),
'Userrights' => array( '권한조정', '관리자하기', '봇하기' ),
'Version' => array( '버전' ),
'Wantedcategories' => array( '필요한분류' ),
@@ -213,7 +220,6 @@ $magicWords = array(
'numberofusers' => array( '1', '사용자수', '계정수', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', '활동중인사용자수', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', '편집수', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', '조회수', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', '문서이름', 'PAGENAME' ),
'pagenamee' => array( '1', '문서이름E', 'PAGENAMEE' ),
'namespace' => array( '1', '이름공간', 'NAMESPACE' ),
@@ -263,7 +269,7 @@ $magicWords = array(
'img_link' => array( '1', '링크=$1', 'link=$1' ),
'img_alt' => array( '1', '대체글=$1', 'alt=$1' ),
'img_class' => array( '1', '클래스=$1', 'class=$1' ),
- 'int' => array( '0', '정수:', 'INT:' ),
+ 'int' => array( '0', '인터페이스:', 'INT:' ),
'sitename' => array( '1', '사이트이름', 'SITENAME' ),
'ns' => array( '0', '이름:', '이름공간:', 'NS:' ),
'nse' => array( '0', '이름E:', '이름공간E:', 'NSE:' ),
@@ -302,7 +308,7 @@ $magicWords = array(
'lc' => array( '0', '소문자:', 'LC:' ),
'uc' => array( '0', '대문자:', 'UC:' ),
'raw' => array( '0', '원본:', 'RAW:' ),
- 'displaytitle' => array( '1', '제목보이기', '제목표시', 'DISPLAYTITLE' ),
+ 'displaytitle' => array( '1', '보일제목', '표시제목', 'DISPLAYTITLE' ),
'rawsuffix' => array( '1', '원', 'R' ),
'nocommafysuffix' => array( '0', '구분자없음', 'NOSEP' ),
'newsectionlink' => array( '1', '__새글쓰기__', '__NEWSECTIONLINK__' ),
@@ -333,6 +339,7 @@ $magicWords = array(
'numberingroup' => array( '1', '권한별사용자수', '그룹별사용자수', 'NUMBERINGROUP', 'NUMINGROUP' ),
'staticredirect' => array( '1', '__넘겨주기고정__', '__STATICREDIRECT__' ),
'protectionlevel' => array( '1', '보호수준', 'PROTECTIONLEVEL' ),
+ 'cascadingsources' => array( '1', '계단식원본', 'CASCADINGSOURCES' ),
'formatdate' => array( '0', '날짜형식', 'formatdate', 'dateformat' ),
'url_path' => array( '0', '경로', 'PATH' ),
'url_wiki' => array( '0', '위키', 'WIKI' ),
diff --git a/languages/messages/MessagesKs_arab.php b/languages/messages/MessagesKs_arab.php
index 89f877f1..cdea1f49 100644
--- a/languages/messages/MessagesKs_arab.php
+++ b/languages/messages/MessagesKs_arab.php
@@ -16,7 +16,6 @@ $rtl = true;
$namespaceNames = array(
NS_MEDIA => 'میڈیا',
NS_SPECIAL => 'خاص',
- NS_MAIN => '',
NS_TALK => 'بَحَژ',
NS_USER => 'رُکُن',
NS_USER_TALK => 'رُکُن_بَحَژ',
diff --git a/languages/messages/MessagesKsh.php b/languages/messages/MessagesKsh.php
index e338b42e..b1c9d3b3 100644
--- a/languages/messages/MessagesKsh.php
+++ b/languages/messages/MessagesKsh.php
@@ -125,7 +125,7 @@ $specialPageAliases = array(
'Deadendpages' => array( 'Sigge_ohne_Links_dren' ),
'DeletedContributions' => array( 'Fotjeschmeße' ),
'DoubleRedirects' => array( 'Ömleitunge_op_Ömleitunge' ),
- 'Emailuser' => array( 'Email', 'E-mail' ),
+ 'Emailuser' => array( 'E-mail' ),
'Export' => array( 'Expocht' ),
'Fewestrevisions' => array( 'Winnig_beärbeit', 'Winnish_beärbeidt', 'Winnich_bearbeit' ),
'FileDuplicateSearch' => array( 'Dubbel_Dateie' ),
diff --git a/languages/messages/MessagesKw.php b/languages/messages/MessagesKw.php
index ea7384a9..b093b584 100644
--- a/languages/messages/MessagesKw.php
+++ b/languages/messages/MessagesKw.php
@@ -165,7 +165,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NIVERADHEVNYDHYORYON', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NIVERADHEVNYDHYORYONVYW', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NIVERAJANJYOW', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NIVERAWELYANSOW', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'HANOWANFOLEN', 'PAGENAME' ),
'fullpagename' => array( '1', 'HANOWLEUNANFOLEN', 'FULLPAGENAME' ),
'img_thumbnail' => array( '1', 'skeusennik', 'thumbnail', 'thumb' ),
diff --git a/languages/messages/MessagesLb.php b/languages/messages/MessagesLb.php
index 02fdb1c5..203788c6 100644
--- a/languages/messages/MessagesLb.php
+++ b/languages/messages/MessagesLb.php
@@ -54,6 +54,7 @@ $namespaceGenderAliases = array();
$specialPageAliases = array(
'Activeusers' => array( 'Aktiv_Benotzer' ),
'Allmessages' => array( 'All_Systemmessagen' ),
+ 'AllMyUploads' => array( 'All_meng_Fichieren' ),
'Allpages' => array( 'All_Säiten' ),
'Ancientpages' => array( 'Al_Säiten' ),
'Badtitle' => array( 'Falschen_Titel' ),
@@ -64,19 +65,19 @@ $specialPageAliases = array(
'Categories' => array( 'Kategorien' ),
'ChangeEmail' => array( 'E-Mailadress_änneren' ),
'ChangePassword' => array( 'Passwuert_zrécksetzen' ),
- 'ComparePages' => array( 'Säite_vergkäichen' ),
+ 'ComparePages' => array( 'Säite_vergläichen' ),
'Confirmemail' => array( 'E-Mail_confirméieren' ),
'Contributions' => array( 'Kontributiounen' ),
'CreateAccount' => array( 'Benotzerkont_opmaachen' ),
'Deadendpages' => array( 'Sakgaasse-Säiten' ),
- 'DeletedContributions' => array( 'Geläschte_Kontributiounen' ),
+ 'DeletedContributions' => array( 'Geläscht_Kontributiounen' ),
'DoubleRedirects' => array( 'Duebel_Viruleedungen' ),
'EditWatchlist' => array( 'Iwwerwaachungslëscht_änneren' ),
'Emailuser' => array( 'Dësem_Benotzer_eng_E-Mail_schécken' ),
'ExpandTemplates' => array( 'Schablounen_erweideren' ),
'Export' => array( 'Exportéieren' ),
'Fewestrevisions' => array( 'Säite_mat_de_mannsten_Ännerungen' ),
- 'FileDuplicateSearch' => array( 'No_duebele_Fichieren_sichen' ),
+ 'FileDuplicateSearch' => array( 'No_duebele_Fichiere_sichen' ),
'Filepath' => array( 'Pad_bäi_de_Fichier' ),
'Import' => array( 'Importéieren' ),
'Invalidateemail' => array( 'E-Mailadress_net_confirméieren' ),
@@ -88,6 +89,7 @@ $specialPageAliases = array(
'Listfiles' => array( 'Billerlëscht' ),
'Listgrouprights' => array( 'Lëscht_vun_de_Grupperechter' ),
'Listredirects' => array( 'Viruleedungen' ),
+ 'ListDuplicatedFiles' => array( 'Lëscht_vun_den_duebele_Fichieren' ),
'Listusers' => array( 'Lëscht_vun_de_Benotzer' ),
'Lockdb' => array( 'Datebank_spären' ),
'Log' => array( 'Logbicher' ),
@@ -96,11 +98,11 @@ $specialPageAliases = array(
'MergeHistory' => array( 'Versiounen_zesummeleeën' ),
'MIMEsearch' => array( 'No_MIME-Zorte_sichen' ),
'Mostcategories' => array( 'Säite_mat_de_meeschte_Kategorien' ),
- 'Mostimages' => array( 'Dacks_benotzte_Biller' ),
+ 'Mostimages' => array( 'Dacks_benotzt_Biller' ),
'Mostinterwikis' => array( 'Meescht_Interwikien' ),
- 'Mostlinked' => array( 'Dacks_verlinkte_Säiten' ),
- 'Mostlinkedcategories' => array( 'Dacks_benotzte_Kategorien' ),
- 'Mostlinkedtemplates' => array( 'Dacks_benotzte_Schablounen' ),
+ 'Mostlinked' => array( 'Dacks_verlinkt_Säiten' ),
+ 'Mostlinkedcategories' => array( 'Dacks_benotzt_Kategorien' ),
+ 'Mostlinkedtemplates' => array( 'Dacks_benotzt_Schablounen' ),
'Mostrevisions' => array( 'Säite_mat_de_meeschten_Ännerungen' ),
'Movepage' => array( 'Säit_réckelen' ),
'Mycontributions' => array( 'Meng_Kontributiounen' ),
@@ -110,19 +112,22 @@ $specialPageAliases = array(
'Myuploads' => array( 'Meng_eropgeluede_Fichieren' ),
'Newimages' => array( 'Nei_Biller' ),
'Newpages' => array( 'Nei_Säiten' ),
+ 'PagesWithProp' => array( 'Säite_mat_Eegeschaften' ),
+ 'PageLanguage' => array( 'Sprooch_vun_der_Säit' ),
'PasswordReset' => array( 'Zrécksetze_vum_Passwuert' ),
'PermanentLink' => array( 'Permanente_Link' ),
- 'Popularpages' => array( 'Beléifste_Säiten' ),
+ 'Popularpages' => array( 'Beléifst_Säiten' ),
'Preferences' => array( 'Astellungen' ),
'Prefixindex' => array( 'Indexsich' ),
'Protectedpages' => array( 'Protegéiert_Säiten' ),
- 'Protectedtitles' => array( 'Gespaarte_Säiten' ),
+ 'Protectedtitles' => array( 'Gespaart_Säiten' ),
'Randompage' => array( 'Zoufälleg_Säit' ),
- 'RandomInCategory' => array( 'Zoufälleg_Säit_aus_der_Kategorie' ),
+ 'RandomInCategory' => array( 'Zoufälleg_Säit_an_der_Kategorie' ),
'Randomredirect' => array( 'Zoufälleg_Viruleedung' ),
'Recentchanges' => array( 'Rezent_Ännerungen' ),
'Recentchangeslinked' => array( 'Ännerungen_op_verlinkte_Säiten' ),
'Redirect' => array( 'Viruleedung' ),
+ 'ResetTokens' => array( 'Token_zrécksetzen' ),
'Revisiondelete' => array( 'Versioun_läschen' ),
'Search' => array( 'Sichen' ),
'Shortpages' => array( 'Kuerz_Säiten' ),
@@ -136,19 +141,19 @@ $specialPageAliases = array(
'Uncategorizedtemplates' => array( 'Schablounen_ouni_Kategorie' ),
'Undelete' => array( 'Restauréieren' ),
'Unlockdb' => array( 'Spär_vun_der_Datebank_ophiewen' ),
- 'Unusedcategories' => array( 'Onbenotze_Kategorien' ),
- 'Unusedimages' => array( 'Onbenotzte_Biller' ),
- 'Unusedtemplates' => array( 'Onbenotzte_Schablounen' ),
+ 'Unusedcategories' => array( 'Onbenotz_Kategorien' ),
+ 'Unusedimages' => array( 'Onbenotzt_Biller' ),
+ 'Unusedtemplates' => array( 'Onbenotzt_Schablounen' ),
'Unwatchedpages' => array( 'Säiten_déi_net_iwwerwaacht_ginn' ),
'Upload' => array( 'Eroplueden' ),
'Userlogin' => array( 'Umellen' ),
'Userlogout' => array( 'Ofmellen' ),
'Userrights' => array( 'Benotzerrechter' ),
'Version' => array( 'Versioun' ),
- 'Wantedcategories' => array( 'Gewënschte_Kategorien' ),
- 'Wantedfiles' => array( 'Gewënschte_Fichieren' ),
- 'Wantedpages' => array( 'Gewënschte_Säiten' ),
- 'Wantedtemplates' => array( 'Gewënschte_Schablounen' ),
+ 'Wantedcategories' => array( 'Gewënscht_Kategorien' ),
+ 'Wantedfiles' => array( 'Gewënscht_Fichieren' ),
+ 'Wantedpages' => array( 'Gewënscht_Säiten' ),
+ 'Wantedtemplates' => array( 'Gewënscht_Schablounen' ),
'Watchlist' => array( 'Iwwerwaachungslëscht' ),
'Whatlinkshere' => array( 'Linken_op_dës_Säit' ),
'Withoutinterwiki' => array( 'Säiten_ouni_Interwiki-Linken' ),
@@ -175,6 +180,7 @@ $magicWords = array(
'img_page' => array( '1', 'Säit=$1', 'Säit_$1', 'seite=$1', 'seite $1', 'page=$1', 'page $1' ),
'img_border' => array( '1', 'bord', 'rand', 'border' ),
'img_top' => array( '1', 'uewen', 'oben', 'top' ),
+ 'img_middle' => array( '1', 'mëtt', 'mitte', 'middle' ),
'img_bottom' => array( '1', 'ënnen', 'unten', 'bottom' ),
'grammar' => array( '0', 'GRAMMAIRE', 'GRAMMATIK:', 'GRAMMAR:' ),
'plural' => array( '0', 'PLURAL', 'PLURAL:' ),
diff --git a/languages/messages/MessagesLrc.php b/languages/messages/MessagesLrc.php
index 1a23b3f7..ada5dc28 100644
--- a/languages/messages/MessagesLrc.php
+++ b/languages/messages/MessagesLrc.php
@@ -1,5 +1,5 @@
<?php
-/** لوری (لوری)
+/** Luri (لوری)
*
* To improve a translation please visit https://translatewiki.net
*
@@ -12,3 +12,135 @@
$rtl = true;
+$namespaceNames = array(
+ NS_MEDIA => 'رسانه',
+ NS_SPECIAL => 'ویجه',
+ NS_TALK => 'چک_چنه',
+ NS_USER => 'کارور',
+ NS_USER_TALK => 'چک_چنه_کارور',
+ NS_PROJECT_TALK => 'چک_چنه_$1',
+ NS_FILE => 'جانیا',
+ NS_FILE_TALK => 'جانیا_چک_چنه',
+ NS_MEDIAWIKI => 'ویکی_رسانه',
+ NS_MEDIAWIKI_TALK => 'چک_چنه_ویکی_رسانه',
+ NS_TEMPLATE => 'قالو',
+ NS_TEMPLATE_TALK => 'قالو_چک_چنه',
+ NS_HELP => 'هومیاری',
+ NS_HELP_TALK => 'چک_چنه_هومیاری',
+ NS_CATEGORY => 'دسه',
+ NS_CATEGORY_TALK => 'دسه_چک_چنه',
+);
+
+$specialPageAliases = array(
+ 'Activeusers' => array( 'کاریاریا_کنشتکار' ),
+ 'Allmessages' => array( 'همه_پیغومیا' ),
+ 'AllMyUploads' => array( 'همه_سوارکردیا_مه', 'همه_جانیایا_مه' ),
+ 'Allpages' => array( 'همه_بلگه_یا' ),
+ 'ApiHelp' => array( 'هومیاری_آ_پی_آی' ),
+ 'Ancientpages' => array( 'بلگه_یا_دماتری' ),
+ 'Badtitle' => array( 'داسون_گن' ),
+ 'Blankpage' => array( 'بلگه_حالی' ),
+ 'Block' => array( 'نهاگری', 'نهاگری_آی_پی', 'نهاگری_کاریار' ),
+ 'Booksources' => array( 'نهاگری_سرچشمه_یا' ),
+ 'BrokenRedirects' => array( 'واگردونیا_بی_سرانجوم' ),
+ 'Categories' => array( 'دسه_یا' ),
+ 'ChangeEmail' => array( 'آلشت_دئن_ایمیل' ),
+ 'ChangePassword' => array( 'آلشت_دئن_رازینه_گواردن' ),
+ 'ComparePages' => array( 'تی_یک_نیائن_بلگه_یا' ),
+ 'Confirmemail' => array( 'پشت_راس_کاری_ایمیل' ),
+ 'Contributions' => array( 'هومیاری_کردنیا' ),
+ 'CreateAccount' => array( 'راس_کردن_حساو' ),
+ 'Deadendpages' => array( 'بلگه_یا_بی_ویرگار' ),
+ 'DeletedContributions' => array( 'هومیاریا_پاکسا_بیه' ),
+ 'Diff' => array( 'فرخ' ),
+ 'DoubleRedirects' => array( 'واگردونیا_دو_کونه' ),
+ 'EditWatchlist' => array( 'ویرایشت_سیل_برگ' ),
+ 'Emailuser' => array( 'ایمیل_کاریار', 'ایمیل' ),
+ 'ExpandTemplates' => array( 'گپ_کلونکاری_چوئه_یا' ),
+ 'Export' => array( 'وه_در_دئن' ),
+ 'Fewestrevisions' => array( 'کمتری_وانئریا' ),
+ 'FileDuplicateSearch' => array( 'پی_جوری_دو_کونه_جانیا' ),
+ 'Filepath' => array( 'مسیر_جانیا' ),
+ 'Import' => array( 'وا_مین_اوردن' ),
+ 'Invalidateemail' => array( 'بی_اعتوار_کردن_ایمیل' ),
+ 'JavaScriptTest' => array( 'ازماشت_نیسسه_یا_جاوا' ),
+ 'BlockList' => array( 'نهاگری_نومگه', 'نومگه_نهاگری', 'نومگه_نهاگری_آی_پی' ),
+ 'LinkSearch' => array( 'پی_جوری_هوم_پیوند' ),
+ 'Listadmins' => array( 'نومگه_سردیوونیاریا' ),
+ 'Listbots' => array( 'نومگه_بوتیا' ),
+ 'Listfiles' => array( 'نومگه_جانیایا', 'نومگه_جانیا', 'نومگه_عسگ' ),
+ 'Listgrouprights' => array( 'نومگه_حقوق_گرویی', 'حقوق_کاریاری_گرویی' ),
+ 'Listredirects' => array( 'نومگه_واگردونیا' ),
+ 'ListDuplicatedFiles' => array( 'نومگه_جانیایا_دو_کونه', 'نومگه_دو_کونه_بیین_جانیا' ),
+ 'Listusers' => array( 'نومگه_کاریاریا', 'نومگه_کاریاری' ),
+ 'Lockdb' => array( 'قلف_کردن_رسینه_جا' ),
+ 'Log' => array( 'پهرستنومه', 'پهرستنومه_یا' ),
+ 'Lonelypages' => array( 'بلگه_یا_تکی', 'بلگه_یا_بی_حامین' ),
+ 'Longpages' => array( 'بلگه_یا_فره_بلنگ' ),
+ 'MediaStatistics' => array( 'آماریا_وارسگر' ),
+ 'MergeHistory' => array( 'سریک_سازی_ویرگار' ),
+ 'MIMEsearch' => array( 'پی_چوری_ام_آی_ام_ای' ),
+ 'Mostcategories' => array( 'بیشتر_دسه_یا' ),
+ 'Mostimages' => array( 'بیشتر_جانیایا_هوم_پیوند_بیه', 'بیشتر_جانیایا', 'بیشتر_عسگیا' ),
+ 'Mostinterwikis' => array( 'بیشتر_مین_ویکی_یا' ),
+ 'Mostlinked' => array( 'بیشتر_بلگه_یا_هوم_پیوند_بیه', 'بیشتر_هوم_پیوند_بیه_یا' ),
+ 'Mostlinkedcategories' => array( 'بیشتر_دسه_یا_هوم_پیوند_بیه', 'بیشتر_دسه_یا_وه_کار_گرته_بیه' ),
+ 'Mostlinkedtemplates' => array( 'بیشتر_بلگه_فره_پر_بیه', 'بیشتر_چوئه_یا_هوم_پیوند_بیه', 'بیشتر_چوئه_یا_وه_کار_گرته_بیه' ),
+ 'Mostrevisions' => array( 'بیشتر_وانئریا' ),
+ 'Movepage' => array( 'جا_وه_جا_کردن_بلگه' ),
+ 'Mycontributions' => array( 'هومیاریا_مه' ),
+ 'MyLanguage' => array( 'زون_مه' ),
+ 'Mypage' => array( 'بلگه_مه' ),
+ 'Mytalk' => array( 'چک_چنه_مه' ),
+ 'Myuploads' => array( 'سوارکردیا_مه', 'جانیایا_مه' ),
+ 'Newimages' => array( 'جانیایا_تازه', 'عسگیا_تازه' ),
+ 'Newpages' => array( 'بلگه_یا_تازه' ),
+ 'PagesWithProp' => array( 'بلگه_یا_حامیندار' ),
+ 'PageLanguage' => array( 'بلگه_زون' ),
+ 'PasswordReset' => array( 'د_نو_زنه_کردن_رازینه_گواردن' ),
+ 'PermanentLink' => array( 'هوم_پیوند_دایمی' ),
+ 'Popularpages' => array( 'صفحه‌های_محبوب' ),
+ 'Preferences' => array( 'میزونکاریا' ),
+ 'Prefixindex' => array( 'پیشون_سیائه' ),
+ 'Protectedpages' => array( 'بلگه_یا_پر_و_پیم_بیه' ),
+ 'Protectedtitles' => array( 'داسونا_پر_و_پیم_بیه' ),
+ 'Randompage' => array( 'شامسکی', 'بلگه_یا_شامسکی' ),
+ 'RandomInCategory' => array( 'دسه_شامسکی' ),
+ 'Randomredirect' => array( 'واگردونی_شامسکی' ),
+ 'Recentchanges' => array( 'آلشتیا_ایسنی' ),
+ 'Recentchangeslinked' => array( 'آلشتیا_هوم_پیوند_بیه_ایسنی', 'آلشتیا_مرتوط' ),
+ 'Redirect' => array( 'واگردونی' ),
+ 'ResetTokens' => array( 'د_نو_زنه_کردن_شناسیاریا' ),
+ 'Revisiondelete' => array( 'وانئری_پاکسا_کردن' ),
+ 'RunJobs' => array( 'انجوم_دئن_کاریا' ),
+ 'Search' => array( 'پی_جوری' ),
+ 'Shortpages' => array( 'بلگه_یا_کوچک' ),
+ 'Specialpages' => array( 'بلگه_یا_ویجه' ),
+ 'Statistics' => array( 'آماریا' ),
+ 'Tags' => array( 'سردیسیا' ),
+ 'TrackingCategories' => array( 'دماگری_دسه_یا' ),
+ 'Unblock' => array( 'وا_کردن_قلف' ),
+ 'Uncategorizedcategories' => array( 'دسه_یا_دسه_بنی_نبیه' ),
+ 'Uncategorizedimages' => array( 'جانیا_دسه_بنی_نبیه', 'عسگیا_دسه_بنی_نبیه' ),
+ 'Uncategorizedpages' => array( 'بلگه_یا_دسه_بنی_نبیه' ),
+ 'Uncategorizedtemplates' => array( 'چوئه_یا_دسه_بنی_نبیه' ),
+ 'Undelete' => array( 'پاکسا_نکردن' ),
+ 'Unlockdb' => array( 'وا_کردن_قلف_رسینه_جا' ),
+ 'Unusedcategories' => array( 'دسه_یا_وه_کار_گرته_نبیه' ),
+ 'Unusedimages' => array( 'جانیایا_وه_کار_گرته_نبیه', 'عسگیا_وه_کار_گرته_نبیه' ),
+ 'Unusedtemplates' => array( 'چوئه_یا_وه_کار_گرته_نبیه' ),
+ 'Unwatchedpages' => array( 'بلگه_یا_سیل_نکرده' ),
+ 'Upload' => array( 'سوارکرد' ),
+ 'UploadStash' => array( 'اماییه_جا_سوارکرد' ),
+ 'Userlogin' => array( 'وامین_اومائن_کاریار', 'وامین_اومائن' ),
+ 'Userlogout' => array( 'وه_در_اومائن_کاریار', 'وه_در_اومائن' ),
+ 'Userrights' => array( 'حقوق_کاریار', 'سردیوونکار_بیین', 'بوت_بیین' ),
+ 'Version' => array( 'نسفه' ),
+ 'Wantedcategories' => array( 'دسه_یا_حاستنی' ),
+ 'Wantedfiles' => array( 'جانیایا_حاستنی' ),
+ 'Wantedpages' => array( 'بلگه_یا_حاستنی', 'هوم_پیوندیا_د_بین_رئته' ),
+ 'Wantedtemplates' => array( 'چوئه_یا_حاستنی' ),
+ 'Watchlist' => array( 'سیل_برگ' ),
+ 'Whatlinkshere' => array( 'چه_هوم_پیوندیایی_ها_ایچه' ),
+ 'Withoutinterwiki' => array( 'بی_مین_ویکی' ),
+); \ No newline at end of file
diff --git a/languages/messages/MessagesLzh.php b/languages/messages/MessagesLzh.php
index 85c0c26a..45c32160 100644
--- a/languages/messages/MessagesLzh.php
+++ b/languages/messages/MessagesLzh.php
@@ -27,6 +27,7 @@ $specialPageAliases = array(
'Booksources' => array( '書海' ),
'BrokenRedirects' => array( '斷渡' ),
'Categories' => array( '類' ),
+ 'ChangeEmail' => array( '易郵' ),
'ChangePassword' => array( '易符節' ),
'ComparePages' => array( '較頁' ),
'Confirmemail' => array( '核郵驛' ),
@@ -34,6 +35,7 @@ $specialPageAliases = array(
'CreateAccount' => array( '增簿' ),
'Deadendpages' => array( '此無路也' ),
'DeletedContributions' => array( '已刪之積' ),
+ 'Diff' => array( '異' ),
'DoubleRedirects' => array( '窮渡' ),
'EditWatchlist' => array( '治哨站' ),
'Emailuser' => array( '遺書' ),
@@ -63,6 +65,8 @@ $specialPageAliases = array(
'Mostrevisions' => array( '屢審' ),
'Movepage' => array( '遷' ),
'Mycontributions' => array( '吾績' ),
+ 'Mypage' => array( '吾頁' ),
+ 'Mytalk' => array( '吾書房' ),
'Newimages' => array( '新圖之廊' ),
'Newpages' => array( '新灶' ),
'Preferences' => array( '簿註' ),
diff --git a/languages/messages/MessagesMai.php b/languages/messages/MessagesMai.php
index 09ae5a6a..abba5404 100644
--- a/languages/messages/MessagesMai.php
+++ b/languages/messages/MessagesMai.php
@@ -26,3 +26,21 @@
$fallback = 'hi';
+$namespaceNames = array(
+ NS_MEDIA => 'मेडिया',
+ NS_SPECIAL => 'विशेष',
+ NS_TALK => 'वार्ता',
+ NS_USER => 'प्रयोगकर्ता',
+ NS_USER_TALK => 'प्रयोगकर्ता_वार्ता',
+ NS_PROJECT_TALK => '$1_वार्ता',
+ NS_FILE => 'फाइल',
+ NS_FILE_TALK => 'फाइल_वार्ता',
+ NS_MEDIAWIKI => 'मेडियाविकि',
+ NS_MEDIAWIKI_TALK => 'मेडियाविकि_वार्ता',
+ NS_TEMPLATE => 'आकृति',
+ NS_TEMPLATE_TALK => 'आकृति_वार्ता',
+ NS_HELP => 'मद्दत',
+ NS_HELP_TALK => 'मद्दत_वार्ता',
+ NS_CATEGORY => 'श्रेणी',
+ NS_CATEGORY_TALK => 'श्रेणी_वार्ता',
+);
diff --git a/languages/messages/MessagesMg.php b/languages/messages/MessagesMg.php
index 11535000..4c962add 100644
--- a/languages/messages/MessagesMg.php
+++ b/languages/messages/MessagesMg.php
@@ -49,7 +49,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'ISAMPIKAMBANA', 'NOMBREUTILISATEURS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'ISAMPIKAMBANAMANOVA', 'NOMBREUTILISATEURSACTIFS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'ISAFANOVANA', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'ISATOPIMASO', 'NOMBREVUES', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'ANARAMPEJY', 'ANARANAPEJY', 'NOMPAGE', 'PAGENAME' ),
'pagenamee' => array( '1', 'ANARAMPEJYX', 'ANARANAPEJYX', 'NOMPAGEX', 'PAGENAMEE' ),
'namespace' => array( '1', 'ANARANTSEHATRA', 'ANARANASEHATRA', 'ESPACENOMMAGE', 'NAMESPACE' ),
@@ -126,40 +125,47 @@ $namespaceAliases = array(
$namespaceGenderAliases = array();
$specialPageAliases = array(
- 'Activeusers' => array( 'Mpikambana_mavitrika' ),
- 'Allmessages' => array( 'Hafatra_rehetra' ),
- 'Allpages' => array( 'Pejy_rehetra' ),
- 'Ancientpages' => array( 'Pejy_antitra' ),
- 'Blankpage' => array( 'Pejy_fotsy' ),
- 'Block' => array( 'Hanakana' ),
- 'Booksources' => array( 'Boky_loharano' ),
- 'BrokenRedirects' => array( 'Fihodinana_tapaka' ),
+ 'Activeusers' => array( 'Mpikambana_mavitrika', 'MpikambanaMavitrika' ),
+ 'Allmessages' => array( 'Hafatra_rehetra', 'HafatraRehetra' ),
+ 'AllMyUploads' => array( 'Fanondranana_rehetra', 'FanondrananaRehetra' ),
+ 'Allpages' => array( 'Pejy_rehetra', 'PejyRehetra' ),
+ 'Ancientpages' => array( 'Pejy_antitra', 'PejyAntitra' ),
+ 'Badtitle' => array( 'LohatenyDiso', 'Lohateny_diso' ),
+ 'Blankpage' => array( 'Pejy_fotsy', 'PejyFotsy' ),
+ 'Block' => array( 'Hanakana', 'Fanakanana', 'Sakana' ),
+ 'Booksources' => array( 'Boky_loharano', 'BokyLoharano', 'BokyLoharanon-torohay' ),
+ 'BrokenRedirects' => array( 'Fihodinana_tapaka', 'Fihodinana_vaky', 'FihodinanaTapaka', 'FihodinanaVaky' ),
'Categories' => array( 'Sokajy' ),
- 'ChangePassword' => array( 'Hiova_tenimiafina' ),
- 'ComparePages' => array( 'Fampitaha_pejy' ),
- 'Confirmemail' => array( 'Fankatoavana_ny_adiresy_imailaka' ),
- 'Contributions' => array( 'Fandraisan\'anjara' ),
- 'CreateAccount' => array( 'Hamorona_kaonty' ),
- 'Deadendpages' => array( 'Pejy_tsy_misy_rohy' ),
- 'DeletedContributions' => array( 'Fandraisan\'anjara_voafafa' ),
+ 'ChangeEmail' => array( 'HanovaNyMailaka', 'Hanova_ny_mailaka' ),
+ 'ChangePassword' => array( 'Hiova_tenimiafina', 'HiovaTenimiafina', 'Fiovantenimiafina' ),
+ 'ComparePages' => array( 'Fampitaham-pejy', 'Fampitahampejy', 'HampitahaPejy', 'Hampitaha_pejy' ),
+ 'Confirmemail' => array( 'FanamarinanaAdiresyMailaka', 'Fanamarinana_adiresy_mailaka' ),
+ 'Contributions' => array( 'Fandraisan\'anjara', 'Fandraisananjara' ),
+ 'CreateAccount' => array( 'Hamorona_kaonty', 'HamoronaKaonty' ),
+ 'Deadendpages' => array( 'Pejy_tsy_misy_rohy', 'Pejy_tsy_mandrohy' ),
+ 'DeletedContributions' => array( 'Fandraisan\'anjara_voafafa', 'FandraisananjaraVoafafa' ),
+ 'Diff' => array( 'Fahasmhf.' ),
'DoubleRedirects' => array( 'Fihodinana_miroa' ),
- 'EditWatchlist' => array( 'Hanova_ny_pejy_arahana' ),
- 'Emailuser' => array( 'Handefa_imailaka' ),
- 'Export' => array( 'Hamoa-pejy' ),
+ 'EditWatchlist' => array( 'Hanova_ny_pejy_arahana', 'HanovaPejyArahana' ),
+ 'Emailuser' => array( 'Handefa_mailaka', 'HandefaMailaka' ),
+ 'ExpandTemplates' => array( 'Hamelatra_endrika', 'HamelatraEndrika' ),
+ 'Export' => array( 'Hanondrana_pejy', 'HanondranaPejy' ),
'Fewestrevisions' => array( 'Pejy_vitsy_mpanova_indrindra' ),
'FileDuplicateSearch' => array( 'Fikarohan-drakitra_miroa' ),
'Filepath' => array( 'Lalan-drakitra' ),
'Import' => array( 'Hampidi-pejy' ),
- 'BlockList' => array( 'Lisitry_ny_fanakanana' ),
+ 'Invalidateemail' => array( 'Hampandiso_ny_mailaka', 'HampandisoMailaka' ),
+ 'JavaScriptTest' => array( 'AndranaJavaScript' ),
+ 'BlockList' => array( 'Lisitry_ny_sakana', 'Lisi-tsakana' ),
'LinkSearch' => array( 'Fikarohan-drohy' ),
- 'Listadmins' => array( 'Lisitry_ny_mpandrindra' ),
- 'Listbots' => array( 'Lisitry_ny_rôbô' ),
- 'Listfiles' => array( 'Lisitran\'ny_rakitra' ),
+ 'Listadmins' => array( 'Lisitry_ny_mpandrindra', 'LisitraMpandrindra' ),
+ 'Listbots' => array( 'Lisitry_ny_rôbô', 'LisitraRôbô', 'LisitraRobo' ),
+ 'Listfiles' => array( 'Lisitry_ny_rakitra', 'LisitraRakitra' ),
'Listgrouprights' => array( 'Lisitry_ny_satam-pikambana' ),
'Listredirects' => array( 'Lisitry_ny_fihodinana' ),
'Listusers' => array( 'Lisitran\'ny_mpikambana' ),
'Lockdb' => array( 'Hanidy_ny_database' ),
- 'Log' => array( 'Tatitr\'asa' ),
+ 'Log' => array( 'Laogy' ),
'Lonelypages' => array( 'Pejy_manirery' ),
'Longpages' => array( 'Pejy_lavabe' ),
'MergeHistory' => array( 'Hampiaraka_ny_tantaram-pejy' ),
@@ -174,23 +180,33 @@ $specialPageAliases = array(
'Mycontributions' => array( 'Fandraisan\'anjarako' ),
'Mypage' => array( 'Pejiko' ),
'Mytalk' => array( 'Pejin-dresako' ),
+ 'Myuploads' => array( 'Fanondranako' ),
'Newimages' => array( 'Sary_vaovao' ),
'Newpages' => array( 'Pejy_vaovao' ),
+ 'PagesWithProp' => array( 'Pejy_misy_tondro', 'PejyMisyTondro' ),
+ 'PageLanguage' => array( 'Fitenim-pejy', 'Fitenimpejy' ),
+ 'PasswordReset' => array( 'Famerenan-tenimiafina', 'Famerenantenimiafina' ),
+ 'PermanentLink' => array( 'Rohy_maharitra', 'RohyMaharitra' ),
'Popularpages' => array( 'Pejy_be_mpitsidika_indrindra' ),
'Preferences' => array( 'Safidy' ),
'Prefixindex' => array( 'Index' ),
'Protectedpages' => array( 'Pejy_voaaro' ),
'Protectedtitles' => array( 'Lohateny_voaaro' ),
'Randompage' => array( 'Kisendra' ),
- 'Randomredirect' => array( 'Fihodinana_kisendta' ),
- 'Recentchanges' => array( 'Fanovàna_farany' ),
- 'Recentchangeslinked' => array( 'Fanarahana_ny_rohy' ),
- 'Revisiondelete' => array( 'Santiôna_voafafa' ),
- 'Search' => array( 'Fikarohana' ),
- 'Shortpages' => array( 'Pejy_fohy' ),
- 'Specialpages' => array( 'Pejy_manokana' ),
+ 'RandomInCategory' => array( 'Pejy_kisendra_anaty_sokajy_iray', 'PejyKisendraAnatySokajy' ),
+ 'Randomredirect' => array( 'Fihodinana_kisendra', 'FihodinanaKisendra' ),
+ 'Recentchanges' => array( 'Fiovana_farany', 'FiovanaFarany' ),
+ 'Recentchangeslinked' => array( 'Fanarahana_ny_rohy', 'FanarahanaRohy' ),
+ 'Redirect' => array( 'Fihodinana' ),
+ 'ResetTokens' => array( 'HamerinaToken' ),
+ 'Revisiondelete' => array( 'Versiona_voafafa', 'VersionaVoafafa' ),
+ 'RunJobs' => array( 'Runjob' ),
+ 'Search' => array( 'Fikarohana', 'Karoka' ),
+ 'Shortpages' => array( 'Pejy_fohy', 'PejyFohy' ),
+ 'Specialpages' => array( 'Pejy_manokana', 'PejyManokana' ),
'Statistics' => array( 'Statistika' ),
'Tags' => array( 'Balizy' ),
+ 'TrackingCategories' => array( 'Sokajy_fanarahana', 'SokajyFanarahana' ),
'Unblock' => array( 'Hanala_ny_fanakanana' ),
'Uncategorizedcategories' => array( 'Sokajy_tsy_misy_sokajy' ),
'Uncategorizedimages' => array( 'Sary_tsy_misy_sokajy', 'Rakitra_tsy_misy_sokajy' ),
@@ -203,6 +219,7 @@ $specialPageAliases = array(
'Unusedtemplates' => array( 'Endrika_tsy_misy_mpampiasa' ),
'Unwatchedpages' => array( 'Pejy_tsy_misy_mpanaraka' ),
'Upload' => array( 'Hanafatra' ),
+ 'UploadStash' => array( 'Fanondranana_stash' ),
'Userlogin' => array( 'Fidirana' ),
'Userlogout' => array( 'Fialàna' ),
'Userrights' => array( 'Fahefana' ),
diff --git a/languages/messages/MessagesMhr.php b/languages/messages/MessagesMhr.php
index 9ab687a5..074e0404 100644
--- a/languages/messages/MessagesMhr.php
+++ b/languages/messages/MessagesMhr.php
@@ -68,7 +68,7 @@ $namespaceGenderAliases = array();
$specialPageAliases = array(
'Blankpage' => array( 'Пуста_лаштык' ),
- 'BrokenRedirects' => array( 'Кӱрылтшӧ__вес_вере_колтымаш-влак' ),
+ 'BrokenRedirects' => array( 'Кӱрылтшӧ_вес_вере_колтымаш-влак' ),
'Categories' => array( 'Категорий-влак' ),
'ComparePages' => array( 'Лаштык-влакым_тергымаш' ),
'Emailuser' => array( 'Пайдаланышылан_серышым_колташ' ),
diff --git a/languages/messages/MessagesMin.php b/languages/messages/MessagesMin.php
index 5ab67ae5..451e3734 100644
--- a/languages/messages/MessagesMin.php
+++ b/languages/messages/MessagesMin.php
@@ -109,7 +109,7 @@ $specialPageAliases = array(
'Movepage' => array( 'PindahLaman', 'Pindahkan_laman' ),
'Mycontributions' => array( 'JariahDenai', 'Jariah_Ambo' ),
'Mypage' => array( 'LamanDenai', 'Laman_Ambo' ),
- 'Mytalk' => array( 'RundiangDenai', 'Laman_rundiang__Ambo' ),
+ 'Mytalk' => array( 'RundiangDenai', 'Laman_rundiang_Ambo' ),
'Myuploads' => array( 'DenaiMuek', 'Nan_Ambo_muek' ),
'Newimages' => array( 'BerkasBaru', 'Berkas_baru' ),
'Newpages' => array( 'LamanBaru', 'Laman_baru' ),
@@ -156,8 +156,8 @@ $specialPageAliases = array(
$magicWords = array(
'redirect' => array( '0', '#ALIAH', '#ALIH', '#REDIRECT' ),
- 'pagesincategory_all' => array( '0', 'sado', 'all' ),
- 'pagesincategory_pages' => array( '0', 'laman', 'pages' ),
+ 'pagesincategory_all' => array( '0', 'sado', 'semua', 'all' ),
+ 'pagesincategory_pages' => array( '0', 'laman', 'halaman', 'pages' ),
'pagesincategory_files' => array( '0', 'berkas', 'files' ),
);
diff --git a/languages/messages/MessagesMk.php b/languages/messages/MessagesMk.php
index 3d29b6b9..9f74d16a 100644
--- a/languages/messages/MessagesMk.php
+++ b/languages/messages/MessagesMk.php
@@ -96,6 +96,7 @@ $specialPageAliases = array(
'Allmessages' => array( 'СитеПораки' ),
'AllMyUploads' => array( 'СитеМоиПодигања' ),
'Allpages' => array( 'СитеСтраници' ),
+ 'ApiHelp' => array( 'ИзвршникПомош' ),
'Ancientpages' => array( 'НајстариСтраници' ),
'Badtitle' => array( 'Лошнаслов' ),
'Blankpage' => array( 'ПразнаСтраница' ),
@@ -109,14 +110,15 @@ $specialPageAliases = array(
'Confirmemail' => array( 'Потврди_е-пошта' ),
'Contributions' => array( 'Придонеси' ),
'CreateAccount' => array( 'СоздајКорисничкаСметка' ),
- 'Deadendpages' => array( 'ЌорсокакСтраници' ),
+ 'Deadendpages' => array( 'СлепиСтраници' ),
'DeletedContributions' => array( 'ИзбришаниПридонеси' ),
+ 'Diff' => array( 'Разлики' ),
'DoubleRedirects' => array( 'ДвојниПренасочувања' ),
'EditWatchlist' => array( 'УредиНабљудувања' ),
'Emailuser' => array( 'Пиши_е-пошта_на_корисникот' ),
'ExpandTemplates' => array( 'ПрошириШаблони' ),
'Export' => array( 'Извоз' ),
- 'Fewestrevisions' => array( 'НајмалкуРевизии' ),
+ 'Fewestrevisions' => array( 'НајмалкуПреработки' ),
'FileDuplicateSearch' => array( 'ПребарувањеДупликатПодатотека' ),
'Filepath' => array( 'ПатДоПодатотека' ),
'Import' => array( 'Увоз' ),
@@ -129,11 +131,13 @@ $specialPageAliases = array(
'Listfiles' => array( 'СписокНаПодатотеки', 'СписокНаСлики' ),
'Listgrouprights' => array( 'СписокНаГрупниПрава' ),
'Listredirects' => array( 'СписокНаПренасочувања' ),
+ 'ListDuplicatedFiles' => array( 'ИспишиДуплираниПодатотеки' ),
'Listusers' => array( 'СписокНаКорисници', 'СписокКорисници' ),
'Lockdb' => array( 'ЗаклучиБаза' ),
'Log' => array( 'Дневник', 'Дневници' ),
'Lonelypages' => array( 'ОсамениСтраници', 'СтранциСирачиња' ),
'Longpages' => array( 'ДолгиСтраници' ),
+ 'MediaStatistics' => array( 'МедиумскиСтатистики' ),
'MergeHistory' => array( 'СпојувањеИсторија' ),
'MIMEsearch' => array( 'MIMEПребарување' ),
'Mostcategories' => array( 'НајмногуКатегории' ),
@@ -142,7 +146,7 @@ $specialPageAliases = array(
'Mostlinked' => array( 'СоНајмногуВрски', 'СтранициСоНајмногуВрски' ),
'Mostlinkedcategories' => array( 'НајупотребуваниКатегории' ),
'Mostlinkedtemplates' => array( 'НајупотребуваниШаблони' ),
- 'Mostrevisions' => array( 'НајмногуРевизии' ),
+ 'Mostrevisions' => array( 'НајмногуПреработки' ),
'Movepage' => array( 'ПреместиСтраница' ),
'Mycontributions' => array( 'МоиПридонеси' ),
'MyLanguage' => array( 'МојЈазик' ),
@@ -152,6 +156,7 @@ $specialPageAliases = array(
'Newimages' => array( 'НовиСлики', 'НовиПодатотеки' ),
'Newpages' => array( 'НовиСтраници' ),
'PagesWithProp' => array( 'СтранициСоСвојство' ),
+ 'PageLanguage' => array( 'ЈазикНаСтраницата' ),
'PasswordReset' => array( 'ПроменаНаЛозинка' ),
'PermanentLink' => array( 'ПостојанаВрска' ),
'Popularpages' => array( 'ПопуларниСтраници' ),
@@ -166,12 +171,14 @@ $specialPageAliases = array(
'Recentchangeslinked' => array( 'ПоврзаниПромени' ),
'Redirect' => array( 'Пренасочување' ),
'ResetTokens' => array( 'ВратиОдновоЗнаци' ),
- 'Revisiondelete' => array( 'БришењеРевизија' ),
+ 'Revisiondelete' => array( 'БришењеПреработка' ),
+ 'RunJobs' => array( 'ПуштиЗадачи' ),
'Search' => array( 'Барај' ),
'Shortpages' => array( 'КраткиСтраници' ),
- 'Specialpages' => array( 'СпецијалниСтраници' ),
+ 'Specialpages' => array( 'СлужбениСтраници' ),
'Statistics' => array( 'Статистики' ),
'Tags' => array( 'Oзнаки', 'Приврзоци' ),
+ 'TrackingCategories' => array( 'КатегорииЗаСледење' ),
'Unblock' => array( 'Одблокирај' ),
'Uncategorizedcategories' => array( 'НекатегоризираниКатегории' ),
'Uncategorizedimages' => array( 'НекатегоризираниСлики' ),
@@ -191,7 +198,7 @@ $specialPageAliases = array(
'Version' => array( 'Верзија' ),
'Wantedcategories' => array( 'ПотребниКатегории' ),
'Wantedfiles' => array( 'ПотребниПодатотеки' ),
- 'Wantedpages' => array( 'ПрекинатиВрски' ),
+ 'Wantedpages' => array( 'ПотребниСтраници' ),
'Wantedtemplates' => array( 'ПотребниШаблони' ),
'Watchlist' => array( 'СписокНаНабљудувања' ),
'Whatlinkshere' => array( 'ШтоВодиОвде' ),
@@ -233,7 +240,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'БРОЈНАКОРИСНИЦИ', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'БРОЈНААКТИВНИКОРИСНИЦИ', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'БРОЈНАУРЕДУВАЊА', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'БРОЈНАПРЕГЛЕДУВАЊА', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
'pagenamee' => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
'namespace' => array( '1', 'ИМЕПРОСТОР', 'ИМЕНСКИПРОСТОР', 'NAMESPACE' ),
@@ -288,15 +294,15 @@ $magicWords = array(
'currentdow' => array( '1', 'ТЕКОВЕНДЕНВОСЕДМИЦАТА', 'CURRENTDOW' ),
'localweek' => array( '1', 'СЕДМИЦА_ЛОКАЛНО', 'LOCALWEEK' ),
'localdow' => array( '1', 'ЛОКАЛЕНДЕНВОСЕДМИЦАТА', 'LOCALDOW' ),
- 'revisionid' => array( '1', 'НАЗНАКАНАРЕВИЗИЈА', 'REVISIONID' ),
- 'revisionday' => array( '1', 'ДЕННАРЕВИЗИЈА', 'REVISIONDAY' ),
- 'revisionday2' => array( '1', 'ДЕННАРЕВИЗИЈА2', 'REVISIONDAY2' ),
- 'revisionmonth' => array( '1', 'МЕСЕЦНАРЕВИЗИЈА', 'REVISIONMONTH' ),
- 'revisionmonth1' => array( '1', 'МЕСЕЦНАРЕВИЗИЈА1', 'REVISIONMONTH1' ),
- 'revisionyear' => array( '1', 'ГОДИНАНАРЕВИЗИЈА', 'REVISIONYEAR' ),
- 'revisiontimestamp' => array( '1', 'ВРЕМЕНАРЕВИЗИЈА', 'REVISIONTIMESTAMP' ),
- 'revisionuser' => array( '1', 'КОРИСНИКНАНАРЕВИЗИЈА', 'REVISIONUSER' ),
- 'revisionsize' => array( '1', 'ГОЛЕМИНАНАРЕВИЗИЈА', 'REVISIONSIZE' ),
+ 'revisionid' => array( '1', 'НАЗНАКАНАПРЕРАБОТКА', 'REVISIONID' ),
+ 'revisionday' => array( '1', 'ДЕННАПРЕРАБОТКА', 'REVISIONDAY' ),
+ 'revisionday2' => array( '1', 'ДЕННАПРЕРАБОТКА2', 'REVISIONDAY2' ),
+ 'revisionmonth' => array( '1', 'МЕСЕЦНАПРЕРАБОТКА', 'REVISIONMONTH' ),
+ 'revisionmonth1' => array( '1', 'МЕСЕЦНАПРЕРАБОТКА1', 'REVISIONMONTH1' ),
+ 'revisionyear' => array( '1', 'ГОДИНАНАПРЕРАБОТКА', 'REVISIONYEAR' ),
+ 'revisiontimestamp' => array( '1', 'ВРЕМЕНАПРЕРАБОТКА', 'REVISIONTIMESTAMP' ),
+ 'revisionuser' => array( '1', 'КОРИСНИКНАНАПРЕРАБОТКА', 'REVISIONUSER' ),
+ 'revisionsize' => array( '1', 'ГОЛЕМИНАНАПРЕРАБОТКА', 'REVISIONSIZE' ),
'plural' => array( '0', 'МНОЖИНА:', 'PLURAL:' ),
'fullurl' => array( '0', 'ПОЛНАURL:', 'FULLURL:' ),
'fullurle' => array( '0', 'ПОЛНАURLE:', 'FULLURLE:' ),
@@ -325,7 +331,7 @@ $magicWords = array(
'formatnum' => array( '0', 'ФОРМАТБРОЈ', 'FORMATNUM' ),
'padleft' => array( '0', 'ПОСТАВИЛЕВО', 'PADLEFT' ),
'padright' => array( '0', 'ПОСТАВИДЕСНО', 'PADRIGHT' ),
- 'special' => array( '0', 'специјална', 'специјални', 'special' ),
+ 'special' => array( '0', 'службена', 'службени', 'special' ),
'defaultsort' => array( '1', 'ОСНОВНОПОДРЕДУВАЊЕ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'ПОДАТОТЕЧНАПАТЕКА:', 'FILEPATH:' ),
'tag' => array( '0', 'ознака', 'tag' ),
@@ -337,12 +343,15 @@ $magicWords = array(
'numberingroup' => array( '1', 'БРОЈВОГРУПА', 'NUMBERINGROUP', 'NUMINGROUP' ),
'staticredirect' => array( '1', '__СТАТИЧНОПРЕНАСОЧУВАЊЕ__', '__STATICREDIRECT__' ),
'protectionlevel' => array( '1', 'НИВОНАЗАШТИТА', 'PROTECTIONLEVEL' ),
+ 'cascadingsources' => array( '1', 'КАСКАДНИИЗВОРИ', 'CASCADINGSOURCES' ),
'formatdate' => array( '0', 'форматдатум', 'formatdate', 'dateformat' ),
'url_path' => array( '0', 'ПАТЕКА', 'PATH' ),
'url_wiki' => array( '0', 'ВИКИ', 'WIKI' ),
'url_query' => array( '0', 'БАРАЊЕ', 'QUERY' ),
'defaultsort_noerror' => array( '0', 'безгрешки', 'noerror' ),
'defaultsort_noreplace' => array( '0', 'беззамена', 'noreplace' ),
+ 'displaytitle_noerror' => array( '0', 'безгрешка', 'noerror' ),
+ 'displaytitle_noreplace' => array( '0', 'незаменувај', 'noreplace' ),
'pagesincategory_all' => array( '0', 'сите', 'all' ),
'pagesincategory_pages' => array( '0', 'страници', 'pages' ),
'pagesincategory_subcats' => array( '0', 'поткатегории', 'subcats' ),
diff --git a/languages/messages/MessagesMl.php b/languages/messages/MessagesMl.php
index 5b87ace5..39f48b23 100644
--- a/languages/messages/MessagesMl.php
+++ b/languages/messages/MessagesMl.php
@@ -102,6 +102,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'അംഗത്വമെടുക്കൽ' ),
'Deadendpages' => array( 'അന്ത്യസ്ഥാനത്തുള്ള_താളുകൾ' ),
'DeletedContributions' => array( 'മായ്ച്ച_സേവനങ്ങൾ' ),
+ 'Diff' => array( 'വ്യത്യാസം' ),
'DoubleRedirects' => array( 'ഇരട്ടത്തിരിച്ചുവിടലുകൾ' ),
'EditWatchlist' => array( 'ശ്രദ്ധിക്കുന്നവയുടെപട്ടികതിരുത്തുക' ),
'Emailuser' => array( 'ഉപയോക്തൃഇമെയിൽ' ),
@@ -120,6 +121,7 @@ $specialPageAliases = array(
'Listfiles' => array( 'പ്രമാണങ്ങളുടെ_പട്ടിക', 'ചിത്രങ്ങളുടെ_പട്ടിക' ),
'Listgrouprights' => array( 'സമൂഹത്തിന്റെ_അവകാശങ്ങളുടെ_പട്ടിക' ),
'Listredirects' => array( 'തിരിച്ചുവിടൽ‌പട്ടിക' ),
+ 'ListDuplicatedFiles' => array( 'അപരപ്രമാണപട്ടിക' ),
'Listusers' => array( 'ഉപയോക്താക്കളുടെ_പട്ടിക' ),
'Lockdb' => array( 'ഡി.ബി.ബന്ധിക്കുക' ),
'Log' => array( 'രേഖ', 'രേഖകൾ' ),
@@ -143,6 +145,7 @@ $specialPageAliases = array(
'Newimages' => array( 'പുതിയ_പ്രമാണങ്ങൾ', 'പുതിയ_ചിത്രങ്ങൾ' ),
'Newpages' => array( 'പുതിയ_താളുകൾ' ),
'PagesWithProp' => array( 'താളുകളുടെഉള്ളടക്കപ്രത്യേകതകൾ' ),
+ 'PageLanguage' => array( 'താളിന്റെഭാഷ' ),
'PasswordReset' => array( 'രഹസ്യവാക്ക്‌‌പുനക്രമീകരണം' ),
'PermanentLink' => array( 'സ്ഥിരംകണ്ണി' ),
'Popularpages' => array( 'ജനപ്രിയതാളുകൾ' ),
@@ -158,11 +161,13 @@ $specialPageAliases = array(
'Redirect' => array( 'തിരിച്ചുവിടൽ' ),
'ResetTokens' => array( 'ചീട്ട്പുനഃസജ്ജീകരിക്കുക' ),
'Revisiondelete' => array( 'നാൾപ്പതിപ്പ്_മായ്ക്കൽ' ),
+ 'RunJobs' => array( 'പ്രവൃത്തിനടപ്പാക്കൽ' ),
'Search' => array( 'അന്വേഷണം' ),
'Shortpages' => array( 'ചെറിയ_താളുകൾ' ),
'Specialpages' => array( 'പ്രത്യേകതാളുകൾ' ),
'Statistics' => array( 'സ്ഥിതിവിവരം' ),
'Tags' => array( 'റ്റാഗുകൾ' ),
+ 'TrackingCategories' => array( 'പിന്തുടരൽവർഗ്ഗങ്ങൾ' ),
'Unblock' => array( 'തടയൽനീക്കുക' ),
'Uncategorizedcategories' => array( 'വർഗ്ഗീകരിക്കാത്ത_വർഗ്ഗങ്ങൾ' ),
'Uncategorizedimages' => array( 'വർഗ്ഗീകരിക്കാത്ത_പ്രമാണങ്ങൾ' ),
@@ -224,7 +229,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'ഉപയോക്താക്കളുടെയെണ്ണം', 'അംഗങ്ങളുടെയെണ്ണം', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'സജീവോപയാക്താക്കളുടെയെണ്ണം', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'തിരുത്തലുകളുടെണ്ണം', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'എടുത്തുനോക്കലുകളുടെണ്ണം', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'താളിന്റെപേര്‌', 'PAGENAME' ),
'pagenamee' => array( '1', 'താളിന്റെപേര്‌സമഗ്രം', 'PAGENAMEE' ),
'namespace' => array( '1', 'നാമമേഖല', 'NAMESPACE' ),
@@ -302,6 +306,7 @@ $magicWords = array(
'revisionyear' => array( '1', 'തിരുത്തിയവർഷം', 'REVISIONYEAR' ),
'revisiontimestamp' => array( '1', 'തിരുത്തിയസമയമുദ്ര', 'REVISIONTIMESTAMP' ),
'revisionuser' => array( '1', 'അവസാനംതിരുത്തിയയാൾ', 'REVISIONUSER' ),
+ 'revisionsize' => array( '1', 'നാൾപ്പതിപ്പിന്റെവലിപ്പം', 'REVISIONSIZE' ),
'plural' => array( '0', 'ബഹുവചനം:', 'PLURAL:' ),
'fullurl' => array( '0', 'പൂർണ്ണവിലാസം:', 'FULLURL:' ),
'fullurle' => array( '0', 'പൂർണ്ണവിലാസംസമഗ്രം:', 'FULLURLE:' ),
@@ -326,7 +331,7 @@ $magicWords = array(
'padright' => array( '0', 'വലത്ത്നിറക്കുക', 'PADRIGHT' ),
'special' => array( '0', 'പ്രത്യേകം', 'special' ),
'speciale' => array( '0', 'സവിശേഷം', 'speciale' ),
- 'defaultsort' => array( '1', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽ:', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽചാവി:', 'സ്വതവേയുള്ളവർഗ്ഗക്രമപ്പെടുത്തൽ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+ 'defaultsort' => array( '1', 'സ്വതേയുള്ളക്രമപ്പെടുത്തൽ:', 'സ്വതേയുള്ളക്രമപ്പെടുത്തൽചാവി:', 'സ്വതേയുള്ളവർഗ്ഗക്രമപ്പെടുത്തൽ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'പ്രമാണപഥം:', 'FILEPATH:' ),
'tag' => array( '0', 'റ്റാഗ്', 'ടാഗ്', 'tag' ),
'hiddencat' => array( '1', '‌‌__മറഞ്ഞിരിക്കുംവർഗ്ഗം__', '__HIDDENCAT__' ),
diff --git a/languages/messages/MessagesMn.php b/languages/messages/MessagesMn.php
index 667108aa..977ebaec 100644
--- a/languages/messages/MessagesMn.php
+++ b/languages/messages/MessagesMn.php
@@ -42,5 +42,9 @@ $namespaceAliases = array(
'Зургийн_хэлэлцүүлэг' => NS_FILE_TALK,
);
+$magicWords = array(
+ 'redirect' => array( '0', '#ЧИГЛҮҮЛЭГ', '#REDIRECT' ),
+);
+
$linkTrail = '/^([a-zабвгдеёжзийклмнопрстуфхцчшщъыьэюя“»]+)(.*)$/sDu';
diff --git a/languages/messages/MessagesMr.php b/languages/messages/MessagesMr.php
index 68064430..4f9b0cd0 100644
--- a/languages/messages/MessagesMr.php
+++ b/languages/messages/MessagesMr.php
@@ -202,7 +202,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'सदस्यसंख्या', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'सक्रीयसदस्यसंख्या', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'संपादनसंख्या', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'धडकसंख्या', 'प्रेक्षासंख्या', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'लेखनाव', 'PAGENAME' ),
'pagenamee' => array( '1', 'लेखानावव', 'PAGENAMEE' ),
'namespace' => array( '1', 'नामविश्व', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesMs.php b/languages/messages/MessagesMs.php
index b6da3739..fb972b0a 100644
--- a/languages/messages/MessagesMs.php
+++ b/languages/messages/MessagesMs.php
@@ -107,10 +107,13 @@ $magicWords = array(
$specialPageAliases = array(
'Activeusers' => array( 'Pengguna_aktif' ),
'Allmessages' => array( 'Semua_pesanan', 'Semua_mesej' ),
+ 'AllMyUploads' => array( 'Semua_muat_naik_saya', 'Semua_fail_saya' ),
'Allpages' => array( 'Semua_laman' ),
+ 'ApiHelp' => array( 'Bantuan_API' ),
'Ancientpages' => array( 'Laman_lapuk' ),
+ 'Badtitle' => array( 'Tajuk_salah' ),
'Blankpage' => array( 'Laman_kosong' ),
- 'Block' => array( 'Sekat_IP' ),
+ 'Block' => array( 'Sekat', 'Sekat_IP', 'Sekat_pengguna' ),
'Booksources' => array( 'Sumber_buku' ),
'BrokenRedirects' => array( 'Lencongan_rosak', 'Pelencongan_rosak' ),
'Categories' => array( 'Kategori' ),
@@ -122,7 +125,9 @@ $specialPageAliases = array(
'CreateAccount' => array( 'Buka_akaun' ),
'Deadendpages' => array( 'Laman_buntu' ),
'DeletedContributions' => array( 'Sumbangan_dihapuskan' ),
+ 'Diff' => array( 'Beza' ),
'DoubleRedirects' => array( 'Lencongan_berganda', 'Pelencongan_berganda' ),
+ 'EditWatchlist' => array( 'Sunting_senarai_pantau' ),
'Emailuser' => array( 'E-mel_pengguna' ),
'ExpandTemplates' => array( 'Kembangkan_templat' ),
'Export' => array( 'Eksport' ),
@@ -130,47 +135,59 @@ $specialPageAliases = array(
'FileDuplicateSearch' => array( 'Cari_fail_berganda' ),
'Filepath' => array( 'Laluan_fail' ),
'Invalidateemail' => array( 'Batalkan_pengesahan_e-mel' ),
+ 'JavaScriptTest' => array( 'Kaji_JavaScript' ),
'BlockList' => array( 'Sekatan_IP' ),
'LinkSearch' => array( 'Cari_pautan' ),
'Listadmins' => array( 'Senarai_pentadbir' ),
'Listbots' => array( 'Senarai_bot' ),
'Listfiles' => array( 'Senarai_imej' ),
- 'Listgrouprights' => array( 'Senarai_hak_kumpulan' ),
+ 'Listgrouprights' => array( 'Hak_kumpulan', 'Senarai_hak_kumpulan' ),
'Listredirects' => array( 'Senarai_lencongan', 'Senarai_pelencongan' ),
+ 'ListDuplicatedFiles' => array( 'Senarai_fail_disalin' ),
'Listusers' => array( 'Senarai_pengguna' ),
'Lockdb' => array( 'Kunci_pangkalan_data' ),
'Lonelypages' => array( 'Laman_yatim' ),
'Longpages' => array( 'Laman_panjang' ),
+ 'MediaStatistics' => array( 'Statistik_media' ),
'MergeHistory' => array( 'Gabung_sejarah' ),
'MIMEsearch' => array( 'Gelintar_MIME' ),
'Mostcategories' => array( 'Kategori_terbanyak' ),
'Mostimages' => array( 'Imej_terbanyak' ),
+ 'Mostinterwikis' => array( 'Interwiki_terbanyak' ),
'Mostlinked' => array( 'Laman_dipaut_terbanyak' ),
'Mostlinkedcategories' => array( 'Kategori_dipaut_terbanyak' ),
'Mostlinkedtemplates' => array( 'Templat_dipaut_terbanyak' ),
'Mostrevisions' => array( 'Semakan_terbanyak' ),
'Movepage' => array( 'Pindah_laman' ),
'Mycontributions' => array( 'Sumbangan_saya' ),
+ 'MyLanguage' => array( 'Bahasa_saya' ),
'Mypage' => array( 'Laman_saya' ),
'Mytalk' => array( 'Perbincangan_saya' ),
'Myuploads' => array( 'Muat_naik_saya' ),
'Newimages' => array( 'Imej_baru' ),
'Newpages' => array( 'Laman_baru' ),
+ 'PagesWithProp' => array( 'Laman_dengan_sifat' ),
+ 'PageLanguage' => array( 'Bahasa_laman' ),
+ 'PasswordReset' => array( 'Tetap_semula_kata_kunci' ),
+ 'PermanentLink' => array( 'Pautan_kekal' ),
'Popularpages' => array( 'Laman_popular' ),
'Preferences' => array( 'Keutamaan' ),
'Prefixindex' => array( 'Indeks_awalan' ),
'Protectedpages' => array( 'Laman_dilindungi' ),
'Protectedtitles' => array( 'Tajuk_dilindungi' ),
- 'Randompage' => array( 'Laman_rawak' ),
+ 'Randompage' => array( 'Rawak', 'Laman_rawak' ),
+ 'RandomInCategory' => array( 'Rawak_dalam_kategori' ),
'Randomredirect' => array( 'Lencongan_rawak', 'Pelencongan_rawak' ),
'Recentchanges' => array( 'Perubahan_terkini' ),
'Recentchangeslinked' => array( 'Perubahan_berkaitan' ),
+ 'Redirect' => array( 'Lencong' ),
'Revisiondelete' => array( 'Hapus_semakan' ),
- 'Search' => array( 'Gelintar' ),
+ 'Search' => array( 'Cari', 'Gelintar' ),
'Shortpages' => array( 'Laman_pendek' ),
'Specialpages' => array( 'Laman_khas' ),
'Statistics' => array( 'Statistik' ),
- 'Tags' => array( 'Label' ),
+ 'Tags' => array( 'Teg', 'Label' ),
+ 'TrackingCategories' => array( 'Kategori_penjejak' ),
'Unblock' => array( 'Nyahsekat' ),
'Uncategorizedcategories' => array( 'Kategori_tanpa_kategori' ),
'Uncategorizedimages' => array( 'Imej_tanpa_kategori' ),
@@ -192,7 +209,7 @@ $specialPageAliases = array(
'Wantedpages' => array( 'Laman_dikehendaki' ),
'Wantedtemplates' => array( 'Templat_dikehendaki' ),
'Watchlist' => array( 'Senarai_pantau' ),
- 'Whatlinkshere' => array( 'Pautan_ke' ),
+ 'Whatlinkshere' => array( 'Pautan_ke_sini', 'Pautan_ke' ),
'Withoutinterwiki' => array( 'Laman_tanpa_pautan_bahasa' ),
);
diff --git a/languages/messages/MessagesMt.php b/languages/messages/MessagesMt.php
index e5dd967c..2529cc98 100644
--- a/languages/messages/MessagesMt.php
+++ b/languages/messages/MessagesMt.php
@@ -173,7 +173,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NUMRUTA\'UTENTI', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NUMRUTA\'UTENTIATTIVI', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NUMBRUTA\'MODIFIKI', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NUMRUTA\'VISTI', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'ISEMTAL-PAĠNA', 'PAGENAME' ),
'pagenamee' => array( '1', 'ISEMTAL-PAĠNAE', 'PAGENAMEE' ),
'namespace' => array( '1', 'SPAZJUTAL-ISEM', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesMzn.php b/languages/messages/MessagesMzn.php
index ad73dc1d..6203b24a 100644
--- a/languages/messages/MessagesMzn.php
+++ b/languages/messages/MessagesMzn.php
@@ -26,7 +26,6 @@ $rtl = true;
$namespaceNames = array(
NS_MEDIA => 'مدیا',
NS_SPECIAL => 'شا',
- NS_MAIN => '',
NS_TALK => 'گپ',
NS_USER => 'کارور',
NS_USER_TALK => 'کارور_گپ',
@@ -107,7 +106,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'تعدادکارورون', 'تعدادکاربران', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'کارورون_فعال', 'کاربران_فعال', 'کاربران‌فعال', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'تعداددچی‌یه‌ئون', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'تعدادبازدید', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
'pagenamee' => array( '1', 'نام‌صفحه‌کد', 'نام_صفحه_کد', 'PAGENAMEE' ),
'namespace' => array( '1', 'فضای‌نام', 'فضای_نام', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesNan.php b/languages/messages/MessagesNan.php
index 8d0d14c4..10af14b7 100644
--- a/languages/messages/MessagesNan.php
+++ b/languages/messages/MessagesNan.php
@@ -13,14 +13,60 @@
$fallback = 'cdo, zh-hant';
+$namespaceNames = array(
+ NS_MEDIA => 'Mûi-thé',
+ NS_SPECIAL => 'Tek-pia̍t',
+ NS_TALK => 'Thó-lūn',
+ NS_USER => 'Iōng-chiá',
+ NS_USER_TALK => 'Iōng-chiá_thó-lūn',
+ NS_PROJECT_TALK => '$1_thó-lūn',
+ NS_FILE => 'tóng-àn',
+ NS_FILE_TALK => 'tóng-àn_thó-lūn',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_MEDIAWIKI_TALK => 'MediaWiki_thó-lūn',
+ NS_TEMPLATE => 'Pang-bô͘',
+ NS_TEMPLATE_TALK => 'Pang-bô͘_thó-lūn',
+ NS_HELP => 'Pang-chān',
+ NS_HELP_TALK => 'Pang-chān_thó-lūn',
+ NS_CATEGORY => 'Lūi-pia̍t',
+ NS_CATEGORY_TALK => 'Lūi-pia̍t_thó-lūn',
+);
+
+$namespaceAliases = array(
+ '媒體' => NS_MEDIA,
+ '特殊' => NS_SPECIAL,
+ '討論' => NS_TALK,
+ '用戶' => NS_USER,
+ '用戶討論' => NS_USER_TALK,
+ '$1討論' => NS_PROJECT_TALK,
+ '文件' => NS_FILE,
+ '文件討論' => NS_FILE_TALK,
+ '媒體維基' => NS_MEDIAWIKI,
+ '媒體維基討論' => NS_MEDIAWIKI_TALK,
+ '模板' => NS_TEMPLATE,
+ '模板討論' => NS_TEMPLATE_TALK,
+ '幫助' => NS_HELP,
+ '幫助討論' => NS_HELP_TALK,
+ '分類' => NS_CATEGORY,
+ '分類討論' => NS_CATEGORY_TALK,
+);
+
+$specialPageAliases = array(
+ 'Recentchangeslinked' => array( 'Siong-koan_ê_kái-piàn' ),
+ 'Specialpages' => array( 'Te̍k-sû_ia̍h' ),
+ 'Upload' => array( 'Kā_tóng-àn_chiūⁿ-bāng' ),
+ 'Whatlinkshere' => array( 'Tó-ūi_liân_kàu_chia' ),
+);
+
$datePreferences = array(
'default',
'ISO 8601',
);
+
$defaultDateFormat = 'nan';
+
$dateFormats = array(
'nan time' => 'H:i',
'nan date' => 'Y-"nî" n-"goe̍h" j-"ji̍t" (l)',
'nan both' => 'Y-"nî" n-"goe̍h" j-"ji̍t" (D) H:i',
);
-
diff --git a/languages/messages/MessagesNb.php b/languages/messages/MessagesNb.php
index e53cefdc..6f9cf1f9 100644
--- a/languages/messages/MessagesNb.php
+++ b/languages/messages/MessagesNb.php
@@ -100,6 +100,7 @@ $dateFormats = array(
$specialPageAliases = array(
'Activeusers' => array( 'Aktive_brukere' ),
'Allmessages' => array( 'Alle_systembeskjeder' ),
+ 'AllMyUploads' => array( 'Alle_mine_opplastinger' ),
'Allpages' => array( 'Alle_sider' ),
'Ancientpages' => array( 'Gamle_sider' ),
'Badtitle' => array( 'Ugyldig_tittel' ),
@@ -126,6 +127,7 @@ $specialPageAliases = array(
'Filepath' => array( 'Filsti' ),
'Import' => array( 'Importer' ),
'Invalidateemail' => array( 'Ugyldiggjøre_e-post' ),
+ 'JavaScriptTest' => array( 'Javascript-test' ),
'BlockList' => array( 'Blokkeringsliste', 'IP-blokkeringsliste' ),
'LinkSearch' => array( 'Lenkesøk' ),
'Listadmins' => array( 'Administratorliste', 'Administratorer' ),
@@ -142,6 +144,7 @@ $specialPageAliases = array(
'MIMEsearch' => array( 'MIME-søk' ),
'Mostcategories' => array( 'Flest_kategorier' ),
'Mostimages' => array( 'Mest_lenkede_filer', 'Flest_filer', 'Flest_bilder' ),
+ 'Mostinterwikis' => array( 'Flest_interrwikilenker' ),
'Mostlinked' => array( 'Mest_lenkede_sider', 'Mest_lenket' ),
'Mostlinkedcategories' => array( 'Mest_lenkede_kategorier', 'Mest_brukte_kategorier' ),
'Mostlinkedtemplates' => array( 'Mest_lenkede_maler', 'Mest_brukte_maler' ),
@@ -154,6 +157,7 @@ $specialPageAliases = array(
'Myuploads' => array( 'Mine_opplastinger' ),
'Newimages' => array( 'Nye_filer', 'Nye_bilder' ),
'Newpages' => array( 'Nye_sider' ),
+ 'PagesWithProp' => array( 'Sider_med_egenskap' ),
'PasswordReset' => array( 'Nullstill_passord' ),
'PermanentLink' => array( 'Permanent_lenke' ),
'Popularpages' => array( 'Populære_sider' ),
@@ -166,6 +170,7 @@ $specialPageAliases = array(
'Randomredirect' => array( 'Tilfeldig_omdirigering' ),
'Recentchanges' => array( 'Siste_endringer' ),
'Recentchangeslinked' => array( 'Relaterte_endringer' ),
+ 'Redirect' => array( 'Omdirigering' ),
'Revisiondelete' => array( 'Revisjonssletting' ),
'Search' => array( 'Søk' ),
'Shortpages' => array( 'Korte_sider' ),
@@ -232,7 +237,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'ANTALLBRUKERE', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'ANTALLAKTIVEBRUKERE', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'ANTALLREDIGERINGER', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'ANTALLVISNINGER', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'SIDENAVN', 'PAGENAME' ),
'pagenamee' => array( '1', 'SIDENAVNE', 'PAGENAMEE' ),
'namespace' => array( '1', 'NAVNEROM', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesNds.php b/languages/messages/MessagesNds.php
index e66cb02d..f87d770c 100644
--- a/languages/messages/MessagesNds.php
+++ b/languages/messages/MessagesNds.php
@@ -96,7 +96,6 @@ $bookstoreList = array(
$namespaceNames = array(
NS_MEDIA => 'Media',
NS_SPECIAL => 'Spezial',
- NS_MAIN => '',
NS_TALK => 'Diskuschoon',
NS_USER => 'Bruker',
NS_USER_TALK => 'Bruker_Diskuschoon',
diff --git a/languages/messages/MessagesNds_nl.php b/languages/messages/MessagesNds_nl.php
index 43e19e0e..5e82e82c 100644
--- a/languages/messages/MessagesNds_nl.php
+++ b/languages/messages/MessagesNds_nl.php
@@ -73,7 +73,6 @@ $bookstoreList = array(
'Koninklijke Bibliotheek' => 'http://opc4.kb.nl/DB=1/SET=5/TTL=1/CMD?ACT=SRCH&IKT=1007&SRT=RLV&TRM=$1'
);
-#!!# Translation <b>HLEERSTE:</b> is used more than once for <a href="#mw-sp-magic-lcfirst">lcfirst</a> and <a href="#mw-sp-magic-ucfirst">ucfirst</a>.
$magicWords = array(
'redirect' => array( '0', '#DEURVERWIEZING', '#DUURVERWIEZING', '#DOORVERWIJZING', '#REDIRECT' ),
'notoc' => array( '0', '__GIENONDERWARPEN__', '__GEENINHOUD__', '__NOTOC__' ),
@@ -109,7 +108,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'ANTALGEBRUKERS', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'ANTALAKTIEVEGEBRUKERS', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'ANTALBEWARKINGEN', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'ANTALKERENBEKEKEN', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'ZIEDNAAM', 'PAGINANAAM', 'PAGENAME' ),
'pagenamee' => array( '1', 'ZIEDNAAME', 'PAGINANAAME', 'PAGENAMEE' ),
'namespace' => array( '1', 'NAAMRUUMTE', 'NAAMRUIMTE', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesNe.php b/languages/messages/MessagesNe.php
index 7184f6c3..7142bb16 100644
--- a/languages/messages/MessagesNe.php
+++ b/languages/messages/MessagesNe.php
@@ -40,6 +40,11 @@ $namespaceNames = array(
NS_CATEGORY_TALK => 'श्रेणी_वार्ता',
);
+$specialPageAliases = array(
+ 'Activeusers' => array( 'सक्रिय_प्रयोगकर्ताहरु' ),
+ 'Listgrouprights' => array( 'प्रयोगकर्ता_समूह_अधिकार' ),
+);
+
$digitTransformTable = array(
'0' => '०', # &#x0966;
'1' => '१', # &#x0967;
diff --git a/languages/messages/MessagesNl.php b/languages/messages/MessagesNl.php
index 0132437b..7d7fa054 100644
--- a/languages/messages/MessagesNl.php
+++ b/languages/messages/MessagesNl.php
@@ -146,7 +146,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'AANTALGEBRUIKERS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'AANTALACTIEVEGEBRUIKERS', 'ACTIEVEGEBRUIKERS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'AANTALBEWERKINGEN', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'AANTALKERENBEKEKEN', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'PAGINANAAM', 'PAGENAME' ),
'pagenamee' => array( '1', 'PAGINANAAME', 'PAGENAMEE' ),
'namespace' => array( '1', 'NAAMRUIMTE', 'NAMESPACE' ),
@@ -275,6 +274,7 @@ $specialPageAliases = array(
'Allmessages' => array( 'AlleBerichten', 'Systeemberichten' ),
'AllMyUploads' => array( 'AlMijnUploads' ),
'Allpages' => array( 'AllePaginas', 'AllePagina’s', 'AllePagina\'s' ),
+ 'ApiHelp' => array( 'ApiHulp' ),
'Ancientpages' => array( 'OudstePaginas', 'OudstePagina’s', 'OudstePagina\'s' ),
'Badtitle' => array( 'OnjuistePaginanaam' ),
'Blankpage' => array( 'LegePagina' ),
@@ -307,11 +307,13 @@ $specialPageAliases = array(
'Listfiles' => array( 'Bestandenlijst', 'Afbeeldingenlijst' ),
'Listgrouprights' => array( 'GroepsrechtenWeergeven' ),
'Listredirects' => array( 'Doorverwijzinglijst', 'Redirectlijst' ),
+ 'ListDuplicatedFiles' => array( 'DuplicaatbestandenWeergeven' ),
'Listusers' => array( 'Gebruikerslijst', 'Gebruikerlijst' ),
'Lockdb' => array( 'DBblokkeren', 'DbBlokkeren', 'BlokkeerDB' ),
'Log' => array( 'Logboeken', 'Logboek' ),
'Lonelypages' => array( 'Weespaginas', 'Weespagina\'s' ),
'Longpages' => array( 'LangePaginas', 'LangePagina’s', 'LangePagina\'s' ),
+ 'MediaStatistics' => array( 'Mediastatistieken' ),
'MergeHistory' => array( 'GeschiedenisSamenvoegen' ),
'MIMEsearch' => array( 'MIMEzoeken', 'MIME-zoeken' ),
'Mostcategories' => array( 'MeesteCategorieën' ),
@@ -330,6 +332,7 @@ $specialPageAliases = array(
'Newimages' => array( 'NieuweBestanden', 'NieuweAfbeeldingen' ),
'Newpages' => array( 'NieuwePaginas', 'NieuwePagina’s', 'NieuwePagina\'s' ),
'PagesWithProp' => array( 'PaginasMetEigenschap', 'Pagina\'sMetEigenschap' ),
+ 'PageLanguage' => array( 'Paginataal' ),
'PasswordReset' => array( 'WachtwoordOpnieuwInstellen' ),
'PermanentLink' => array( 'PermanenteVerwijzing' ),
'Popularpages' => array( 'PopulairePaginas', 'PopulairePagina’s', 'PopulairePagina\'s' ),
@@ -345,11 +348,13 @@ $specialPageAliases = array(
'Redirect' => array( 'Doorverwijzen' ),
'ResetTokens' => array( 'TokensOpnieuwInstellen' ),
'Revisiondelete' => array( 'VersieVerwijderen', 'HerzieningVerwijderen', 'RevisieVerwijderen' ),
+ 'RunJobs' => array( 'TakenUitvoeren' ),
'Search' => array( 'Zoeken' ),
'Shortpages' => array( 'KortePaginas', 'KortePagina’s', 'KortePagina\'s' ),
'Specialpages' => array( 'SpecialePaginas', 'SpecialePagina’s', 'SpecialePagina\'s' ),
'Statistics' => array( 'Statistieken' ),
'Tags' => array( 'Labels' ),
+ 'TrackingCategories' => array( 'Trackingcategorieen' ),
'Unblock' => array( 'Deblokkeren' ),
'Uncategorizedcategories' => array( 'NietGecategoriseerdeCategorieën', 'Niet-GecategoriseerdeCategorieën' ),
'Uncategorizedimages' => array( 'NietGecategoriseerdeBestanden', 'NietGecategoriseerdeAfbeeldingen', 'Niet-GecategoriseerdeAfbeeldingen' ),
diff --git a/languages/messages/MessagesNn.php b/languages/messages/MessagesNn.php
index 991a513d..606f7205 100644
--- a/languages/messages/MessagesNn.php
+++ b/languages/messages/MessagesNn.php
@@ -101,7 +101,7 @@ $bookstoreList = array(
);
$magicWords = array(
- 'redirect' => array( '0', '#omdiriger', '#REDIRECT' ),
+ 'redirect' => array( '0', '#OMDIRIGER', '#omdiriger', '#REDIRECT' ),
'notoc' => array( '0', '__INGAINNHALDSLISTE__', '__INGENINNHOLDSLISTE__', '__NOTOC__' ),
'nogallery' => array( '0', '__INKJEGALLERI__', '__NOGALLERY__' ),
'forcetoc' => array( '0', '__ALLTIDINNHALDSLISTE__', '__ALLTIDINNHOLDSLISTE__', '__FORCETOC__' ),
@@ -122,7 +122,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'BRUKARTAL', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'AKTIVEBRUKARAR', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'ENDRINGSTAL', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'VISINGSTAL', 'TALPÅVISINGAR', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'SIDENAMN', 'SIDENAVN', 'PAGENAME' ),
'pagenamee' => array( '1', 'SIDENAMNE', 'SIDENAVNE', 'PAGENAMEE' ),
'namespace' => array( '1', 'NAMNEROM', 'NAVNEROM', 'NAMESPACE' ),
@@ -143,6 +142,7 @@ $magicWords = array(
'img_center' => array( '1', 'sentrum', 'center', 'centre' ),
'img_framed' => array( '1', 'ramme', 'ramma', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'rammelaus', 'frameless' ),
+ 'img_lang' => array( '1', 'språk=$1', 'lang=$1' ),
'img_page' => array( '1', 'side=$1', 'side_$1', 'page=$1', 'page $1' ),
'img_link' => array( '1', 'lenkje=$1', 'lenke=$1', 'link=$1' ),
'sitename' => array( '1', 'NETTSTADNAMN', 'SITENAME' ),
@@ -280,15 +280,18 @@ $specialPageAliases = array(
'Protectedpages' => array( 'Verna_sider' ),
'Protectedtitles' => array( 'Verna_sidenamn' ),
'Randompage' => array( 'Tilfeldig_side' ),
+ 'RandomInCategory' => array( 'Tilfeldig_frå_kategori' ),
'Randomredirect' => array( 'Tilfeldig_omdirigering' ),
'Recentchanges' => array( 'Siste_endringar', 'Siste_endringane' ),
'Recentchangeslinked' => array( 'Relaterte_endringar' ),
+ 'Redirect' => array( 'Omdiriger' ),
'Revisiondelete' => array( 'Versjonssletting' ),
'Search' => array( 'Søk' ),
'Shortpages' => array( 'Korte_sider', 'Stutte_sider' ),
'Specialpages' => array( 'Spesialsider', 'Særsider' ),
'Statistics' => array( 'Statistikk' ),
'Tags' => array( 'Merke' ),
+ 'TrackingCategories' => array( 'Sporingskategoriar' ),
'Uncategorizedcategories' => array( 'Ukategoriserte_kategoriar' ),
'Uncategorizedimages' => array( 'Ukategoriserte_filer' ),
'Uncategorizedpages' => array( 'Ukategoriserte_sider' ),
diff --git a/languages/messages/MessagesOc.php b/languages/messages/MessagesOc.php
index 925513c0..64220d89 100644
--- a/languages/messages/MessagesOc.php
+++ b/languages/messages/MessagesOc.php
@@ -73,7 +73,7 @@ $specialPageAliases = array(
'Deadendpages' => array( 'Paginas_sul_camin_d\'enlòc' ),
'DeletedContributions' => array( 'Contribucions_escafadas', 'ContribucionsEscafadas' ),
'DoubleRedirects' => array( 'Redireccions_doblas', 'RedireccionsDoblas' ),
- 'Emailuser' => array( 'Corrièr_electronic', 'Email', 'Emèl', 'Emèil' ),
+ 'Emailuser' => array( 'Corrièr_electronic', 'Emèl', 'Emèil' ),
'Export' => array( 'Exportar', 'Exportacion' ),
'Fewestrevisions' => array( 'Mens_de_revisions' ),
'FileDuplicateSearch' => array( 'Recèrca_fichièr_en_doble', 'RecèrcaFichièrEnDoble' ),
@@ -177,7 +177,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NOMBREUTILIZAIRES', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NOMBREUTILIZAIRESACTIUS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NOMBREEDICIONS', 'NOMBREMODIFS', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NOMBREVISTAS', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NOMPAGINA', 'PAGENAME' ),
'pagenamee' => array( '1', 'NOMPAGINAX', 'PAGENAMEE' ),
'namespace' => array( '1', 'ESPACINOMENATGE', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesOr.php b/languages/messages/MessagesOr.php
index db25e5a4..f3bea174 100644
--- a/languages/messages/MessagesOr.php
+++ b/languages/messages/MessagesOr.php
@@ -203,7 +203,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'ବ୍ୟବାହାରକାରୀ_ସଂଖ୍ୟା', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'ସଚଳ_ବ୍ୟବାହାରକାରୀଙ୍କ_ସଂଖ୍ୟା', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'ବଦଳ_ସଂଖ୍ୟା', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'କେତେଥର_ଦେଖାଯାଇଛି', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'ପୃଷ୍ଠା_ନାଆଁ', 'PAGENAME' ),
'pagenamee' => array( '1', 'ପୃଷ୍ଠା_ନାମକାରଣକାରୀ', 'PAGENAMEE' ),
'namespace' => array( '1', 'ନେମସ୍ପେସ', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesPa.php b/languages/messages/MessagesPa.php
index 3412c808..3e3090c6 100644
--- a/languages/messages/MessagesPa.php
+++ b/languages/messages/MessagesPa.php
@@ -66,6 +66,7 @@ $namespaceAliases = array(
$specialPageAliases = array(
'Activeusers' => array( 'ਸਰਗਰਮ_ਵਰਤੋਂਕਾਰ' ),
'Allmessages' => array( 'ਸਾਰੇ_ਸਨੇਹੇ' ),
+ 'AllMyUploads' => array( 'ਮੇਰੇ_ਸਾਰੇ_ਅੱਪਲੋਡ' ),
'Allpages' => array( 'ਸਾਰੇ_ਸਫ਼ੇ' ),
'Ancientpages' => array( 'ਪੁਰਾਣੇ_ਸਫ਼ੇ' ),
'Badtitle' => array( 'ਖ਼ਰਾਬ_ਸਿਰਲੇਖ' ),
@@ -73,38 +74,41 @@ $specialPageAliases = array(
'Block' => array( 'ਪਾਬੰਦੀ_ਲਾਓ', 'IP_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ', 'ਵਰਤੋਂਕਾਰ_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ' ),
'Booksources' => array( 'ਕਿਤਾਬ_ਸਰੋਤ' ),
'BrokenRedirects' => array( 'ਟੁੱਟੇ_ਰੀਡਿਰੈਕਟ' ),
- 'Categories' => array( 'ਸ਼੍ਰੇਣੀਆਂ' ),
- 'ChangeEmail' => array( 'ਈ-ਮੇਲ_ਬਦਲੋ' ),
+ 'Categories' => array( 'ਸ਼੍ਰੇਣੀਆਂ', 'ਵਰਗ' ),
+ 'ChangeEmail' => array( 'ਈ-ਮੇਲ_ਬਦਲੋ', 'ਈਮੇਲ_ਬਦਲੋ' ),
'ChangePassword' => array( 'ਪਾਸਵਰਡ_ਬਦਲੋ', 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ_ਕਰੋ' ),
'ComparePages' => array( 'ਸਫ਼ਿਆਂ_ਦੀ_ਤੁਲਨਾ_ਕਰੋ' ),
- 'Confirmemail' => array( 'ਈ-ਮੇਲ_ਤਸਦੀਕ_ਕਰੋ' ),
- 'Contributions' => array( 'ਯੋਗਦਾਨ' ),
+ 'Confirmemail' => array( 'ਈ-ਮੇਲ_ਤਸਦੀਕ_ਕਰੋ', 'ਈਮੇਲ_ਤਸਦੀਕ_ਕਰੋ' ),
+ 'Contributions' => array( 'ਯੋਗਦਾਨ', 'ਹਿੱਸੇਦਾਰੀ' ),
'CreateAccount' => array( 'ਖਾਤਾ_ਬਣਾਓ' ),
'Deadendpages' => array( 'ਬੰਦ_ਸਫ਼ੇ' ),
'DeletedContributions' => array( 'ਮਿਟਾਏ_ਯੋਗਦਾਨ' ),
+ 'Diff' => array( 'ਫ਼ਰਕ' ),
'DoubleRedirects' => array( 'ਦੂਹਰੇ_ਰੀਡਿਰੈਕਟ' ),
- 'EditWatchlist' => array( 'ਨਿਗਰਾਨੀ-ਲਿਸਟ_ਸੋਧੋ' ),
+ 'EditWatchlist' => array( 'ਨਿਗਰਾਨੀ-ਲਿਸਟ_ਸੋਧੋ', 'ਨਿਗਰਾਨੀਲਿਸਟ_ਸੋਧੋ' ),
'Emailuser' => array( 'ਵਰਤੋਂਕਾਰ_ਨੂੰ_ਈ-ਮੇਲ_ਕਰੋ' ),
+ 'ExpandTemplates' => array( 'ਫਰਮੇ_ਖੋਲ੍ਹੋ' ),
'Export' => array( 'ਨਿਰਯਾਤ' ),
'Fewestrevisions' => array( 'ਸਭ_ਤੋਂ_ਘੱਟ_ਰੀਵਿਜ਼ਨਾਂ' ),
- 'FileDuplicateSearch' => array( 'ਨਕਲੀ_ਫ਼ਾਈਲ_ਖੋਜੋ' ),
- 'Filepath' => array( 'ਫ਼ਾਈਲ_ਪਥ' ),
+ 'FileDuplicateSearch' => array( 'ਨਕਲੀ_ਫ਼ਾਈਲ_ਖੋਜੋ', 'ਨਕਲੀ_ਫ਼ਾਇਲ_ਖੋਜੋ' ),
+ 'Filepath' => array( 'ਫ਼ਾਈਲ_ਪਥ', 'ਫ਼ਾਇਲ_ਪਥ' ),
'Import' => array( 'ਆਯਾਤ' ),
'Invalidateemail' => array( 'ਗਲਤ_ਈ-ਮੇਲ_ਪਤਾ' ),
'JavaScriptTest' => array( 'ਜਾਵਾਸਕ੍ਰਿਪਟ_ਪਰਖ' ),
'BlockList' => array( 'ਪਾਬੰਦੀਆਂ_ਦੀ_ਲਿਸਟ' ),
- 'LinkSearch' => array( 'ਲਿੰਕ_ਖੋਜੋ' ),
+ 'LinkSearch' => array( 'ਲਿੰਕ_ਖੋਜੋ', 'ਕੜੀ_ਖੋਜੋ' ),
'Listadmins' => array( 'ਪ੍ਰਬੰਧਕਾਂ_ਦੀ_ਲਿਸਟ' ),
- 'Listbots' => array( 'ਬੋਟਾਂ_ਦੀ_ਲਿਸਟ' ),
- 'Listfiles' => array( 'ਫ਼ਾਈਲਾਂ_ਦੀ_ਲਿਸਟ' ),
+ 'Listbots' => array( 'ਬੋਟ_ਲਿਸਟ' ),
+ 'Listfiles' => array( 'ਫ਼ਾਈਲ_ਲਿਸਟ', 'ਫ਼ਾਇਲ_ਲਿਸਟ', 'ਤਸਵੀਰ_ਲਿਸਟ' ),
'Listgrouprights' => array( 'ਵਰਤੋਂਕਾਰ_ਹੱਕਾਂ_ਦੀ_ਲਿਸਟ' ),
'Listredirects' => array( 'ਰੀਡਿਰੈਕਟਾਂ_ਦੀ_ਲਿਸਟ' ),
+ 'ListDuplicatedFiles' => array( 'ਨਕਲੀ_ਫ਼ਾਇਲ_ਲਿਸਟ' ),
'Listusers' => array( 'ਵਰਤੋਂਕਾਰਾਂ_ਦੀ_ਲਿਸਟ' ),
'Lockdb' => array( 'ਡੈਟਾਬੇਸ_’ਤੇ_ਤਾਲਾ_ਲਗਾਓ' ),
'Log' => array( 'ਚਿੱਠਾ', 'ਚਿੱਠੇ' ),
'Lonelypages' => array( 'ਇਕੱਲੇ_ਸਫ਼ੇ' ),
'Longpages' => array( 'ਲੰਬੇ_ਸਫ਼ੇ' ),
- 'MergeHistory' => array( 'ਰਲਾਉਣ_ਦਾ_ਅਤੀਤ' ),
+ 'MergeHistory' => array( 'ਰਲਾਉਣ_ਦਾ_ਅਤੀਤ', 'ਰਲ਼ਾਉਣ_ਦਾ_ਅਤੀਤ' ),
'MIMEsearch' => array( 'MIME_ਖੋਜੋ' ),
'Mostcategories' => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਸ਼੍ਰੇਣੀਆਂ' ),
'Mostimages' => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਜੁੜੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
@@ -114,24 +118,27 @@ $specialPageAliases = array(
'Mostlinkedtemplates' => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਜੁੜੇ_ਫਰਮੇ' ),
'Mostrevisions' => array( 'ਸਭ_ਤੋਂ_ਵੱਧ_ਰੀਵਿਜ਼ਨ' ),
'Movepage' => array( 'ਸਿਰਲੇਖ_ਬਦਲੋ' ),
- 'Mycontributions' => array( 'ਮੇਰੇ_ਯੋਗਦਾਨ' ),
+ 'Mycontributions' => array( 'ਮੇਰੇ_ਯੋਗਦਾਨ', 'ਮੇਰੀ_ਹਿੱਸੇਦਾਰੀ' ),
'MyLanguage' => array( 'ਮੇਰੀ_ਭਾਸ਼ਾ', 'ਮੇਰੀ_ਬੋਲੀ' ),
'Mypage' => array( 'ਮੇਰਾ_ਸਫ਼ਾ' ),
- 'Mytalk' => array( 'ਮੇਰੀ_ਚਰਚਾ' ),
- 'Myuploads' => array( 'ਮੇਰੇ_ਅੱਪਲੋਡ' ),
- 'Newimages' => array( 'ਨਵੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
+ 'Mytalk' => array( 'ਮੇਰੀ_ਚਰਚਾ', 'ਮੇਰੀ_ਗੱਲ-ਬਾਤ' ),
+ 'Myuploads' => array( 'ਮੇਰੇ_ਅੱਪਲੋਡ', 'ਮੇਰੀਆਂ_ਫ਼ਾਇਲਾਂ' ),
+ 'Newimages' => array( 'ਨਵੀਆਂ_ਫ਼ਾਈਲਾਂ', 'ਨਵੀਆਂ_ਤਸਵੀਰਾਂ' ),
'Newpages' => array( 'ਨਵੇਂ_ਸਫ਼ੇ' ),
+ 'PageLanguage' => array( 'ਸਫ਼ੇ_ਦੀ_ਭਾਸ਼ਾ' ),
'PasswordReset' => array( 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ' ),
- 'PermanentLink' => array( 'ਪੱਕਾ_ਲਿੰਕ' ),
+ 'PermanentLink' => array( 'ਪੱਕਾ_ਲਿੰਕ', 'ਪੱਕੀ_ਕੜੀ' ),
'Popularpages' => array( 'ਮਸ਼ਹੂਰ_ਸਫ਼ੇ' ),
'Preferences' => array( 'ਪਸੰਦਾਂ' ),
'Prefixindex' => array( 'ਅਗੇਤਰ_ਤਤਕਰਾ' ),
'Protectedpages' => array( 'ਸੁਰੱਖਿਅਤ_ਸਫ਼ੇ' ),
'Protectedtitles' => array( 'ਸੁਰੱਖਿਅਤ_ਸਿਰਲੇਖ' ),
'Randompage' => array( 'ਰਲਵਾਂ_ਸਫ਼ਾ' ),
+ 'RandomInCategory' => array( 'ਰਲਵੀਂ_ਸ਼੍ਰੇਣੀ' ),
'Randomredirect' => array( 'ਸੁਰੱਖਿਅਤ_ਰੀਡਿਰੈਕਟ' ),
- 'Recentchanges' => array( 'ਹਾਲੀਆ_ਤਬਦੀਲੀਆਂ' ),
- 'Recentchangeslinked' => array( 'ਜੁੜੀਆਂ_ਤਾਜ਼ਾ_ਤਬਦੀਲੀਆਂ' ),
+ 'Recentchanges' => array( 'ਤਾਜ਼ਾ_ਤਬਦੀਲੀਆਂ' ),
+ 'Recentchangeslinked' => array( 'ਜੁੜੀਆਂ_ਹਾਲੀਆ_ਤਬਦੀਲੀਆਂ', 'ਸਬੰਧਤ_ਹਾਲੀਆ_ਤਬਦੀਲੀਆਂ' ),
+ 'Redirect' => array( 'ਰੀਡਿਰੈਕਟ' ),
'Revisiondelete' => array( 'ਰੀਵਿਜ਼ਨ_ਮਿਟਾਓ' ),
'Search' => array( 'ਖੋਜੋ' ),
'Shortpages' => array( 'ਛੋਟੇ_ਸਫ਼ੇ' ),
@@ -149,11 +156,11 @@ $specialPageAliases = array(
'Unusedimages' => array( 'ਅਣਵਰਤੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
'Unusedtemplates' => array( 'ਅਣਵਰਤੇ_ਫਰਮੇ' ),
'Unwatchedpages' => array( 'ਬੇ-ਨਿਗਰਾਨ_ਸਫ਼ੇ' ),
- 'Upload' => array( 'ਅੱਪਲੋਡ' ),
+ 'Upload' => array( 'ਅੱਪਲੋਡ_ਕਰੋ' ),
'Userlogin' => array( 'ਵਰਤੋਂਕਾਰ_ਲਾਗਇਨ' ),
'Userlogout' => array( 'ਵਰਤੋਂਕਾਰ_ਲਾਗਆਊਟ' ),
'Userrights' => array( 'ਵਰਤੋਂਕਾਰ_ਹੱਕ', 'ਪ੍ਰਬੰਧਕ_ਬਣਾਓ', 'ਬੋਟ_ਬਣਾਓ' ),
- 'Version' => array( 'ਰੂਪ' ),
+ 'Version' => array( 'ਰੂਪ', 'ਵਰਜਨ' ),
'Wantedcategories' => array( 'ਚਾਹੀਦੀਆਂ_ਸ਼੍ਰੇਣੀਆਂ' ),
'Wantedfiles' => array( 'ਚਾਹੀਦੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
'Wantedpages' => array( 'ਚਾਹੀਦੇ_ਸਫ਼ੇ', 'ਟੁੱਟੇ_ਜੋੜ' ),
diff --git a/languages/messages/MessagesPl.php b/languages/messages/MessagesPl.php
index f3f2ef5d..4c822760 100644
--- a/languages/messages/MessagesPl.php
+++ b/languages/messages/MessagesPl.php
@@ -293,8 +293,8 @@ $magicWords = array(
'localdow' => array( '1', 'DZIEŃTYGODNIANR', 'LOCALDOW' ),
'plural' => array( '0', 'MNOGA:', 'PLURAL:' ),
'fullurl' => array( '0', 'PEŁNYURL', 'FULLURL:' ),
- 'lcfirst' => array( '0', 'ZMAŁEJ:', 'LCFIRST:' ),
- 'ucfirst' => array( '0', 'ZWIELKIEJ:', 'ZDUŻEJ:', 'UCFIRST:' ),
+ 'lcfirst' => array( '0', 'ZMAŁEJ:', 'ODMAŁEJ:', 'LCFIRST:' ),
+ 'ucfirst' => array( '0', 'ZWIELKIEJ:', 'ZDUŻEJ:', 'ODWIELKIEJ:', 'ODDUŻEJ:', 'UCFIRST:' ),
'lc' => array( '0', 'MAŁE:', 'LC:' ),
'uc' => array( '0', 'WIELKIE:', 'DUŻE:', 'UC:' ),
'displaytitle' => array( '1', 'WYŚWIETLANYTYTUŁ', 'DISPLAYTITLE' ),
@@ -305,7 +305,7 @@ $magicWords = array(
'padleft' => array( '0', 'DOLEWEJ', 'PADLEFT' ),
'padright' => array( '0', 'DOPRAWEJ', 'PADRIGHT' ),
'special' => array( '0', 'specjalna', 'special' ),
- 'defaultsort' => array( '1', 'DOMYŚLNIESORTUJ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+ 'defaultsort' => array( '1', 'SORTUJ', 'DOMYŚLNIESORTUJ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'ŚCIEŻKAPLIKU', 'FILEPATH:' ),
'hiddencat' => array( '1', '__KATEGORIAUKRYTA__', '__HIDDENCAT__' ),
'pagesincategory' => array( '1', 'STRONYWKATEGORII', 'PAGESINCATEGORY', 'PAGESINCAT' ),
@@ -315,5 +315,7 @@ $magicWords = array(
'protectionlevel' => array( '1', '__POZIOMZABEZPIECZEŃ__', 'PROTECTIONLEVEL' ),
'url_path' => array( '0', 'ŚCIEŻKA', 'PATH' ),
'url_query' => array( '0', 'ZAPYTANIE', 'QUERY' ),
+ 'pagesincategory_pages' => array( '0', 'strony', 'pages' ),
+ 'pagesincategory_files' => array( '0', 'pliki', 'files' ),
);
diff --git a/languages/messages/MessagesPt.php b/languages/messages/MessagesPt.php
index 5dd94ab3..7a293f6d 100644
--- a/languages/messages/MessagesPt.php
+++ b/languages/messages/MessagesPt.php
@@ -124,6 +124,7 @@ $specialPageAliases = array(
'Booksources' => array( 'Fontes_de_livros' ),
'BrokenRedirects' => array( 'Redireccionamentos_quebrados', 'Redirecionamentos_quebrados' ),
'Categories' => array( 'Categorias' ),
+ 'ChangeEmail' => array( 'Alterar_e-mail', 'Alterar_correio_electrónico' ),
'ChangePassword' => array( 'Reiniciar_palavra-chave', 'Repor_senha', 'Zerar_senha' ),
'ComparePages' => array( 'Comparar_páginas' ),
'Confirmemail' => array( 'Confirmar_correio_electrónico', 'Confirmar_e-mail', 'Confirmar_email' ),
@@ -131,6 +132,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'Criar_conta' ),
'Deadendpages' => array( 'Páginas_sem_saída', 'Artigos_sem_saída' ),
'DeletedContributions' => array( 'Contribuições_eliminadas', 'Edições_eliminadas' ),
+ 'Diff' => array( 'Diferenças_entre_edições', 'Mudanças_entre_edições' ),
'DoubleRedirects' => array( 'Redireccionamentos_duplos', 'Redirecionamentos_duplos' ),
'EditWatchlist' => array( 'Editar_lista_de_páginas_vigiadas' ),
'Emailuser' => array( 'Contactar_utilizador', 'Contactar_usuário', 'Contatar_usuário' ),
@@ -148,6 +150,7 @@ $specialPageAliases = array(
'Listfiles' => array( 'Lista_de_ficheiros', 'Lista_de_imagens', 'Lista_de_arquivos' ),
'Listgrouprights' => array( 'Lista_de_privilégios_de_grupos', 'Listar_privilégios_de_grupos' ),
'Listredirects' => array( 'Redireccionamentos', 'Redirecionamentos', 'Lista_de_redireccionamentos', 'Lista_de_redirecionamentos' ),
+ 'ListDuplicatedFiles' => array( 'Lista_de_ficheiros_duplicados', 'Lista_de_arquivos_duplicados' ),
'Listusers' => array( 'Lista_de_utilizadores', 'Lista_de_usuários' ),
'Lockdb' => array( 'Bloquear_base_de_dados', 'Bloquear_a_base_de_dados', 'Bloquear_banco_de_dados' ),
'Log' => array( 'Registo', 'Registos', 'Registro', 'Registros' ),
@@ -157,6 +160,7 @@ $specialPageAliases = array(
'MIMEsearch' => array( 'Busca_MIME' ),
'Mostcategories' => array( 'Páginas_com_mais_categorias', 'Artigos_com_mais_categorias' ),
'Mostimages' => array( 'Ficheiros_com_mais_afluentes', 'Imagens_com_mais_afluentes', 'Arquivos_com_mais_afluentes' ),
+ 'Mostinterwikis' => array( 'Páginas_com_mais_interwikis' ),
'Mostlinked' => array( 'Páginas_com_mais_afluentes', 'Artigos_com_mais_afluentes' ),
'Mostlinkedcategories' => array( 'Categorias_com_mais_afluentes', 'Categorias_mais_usadas' ),
'Mostlinkedtemplates' => array( 'Predefinições_com_mais_afluentes', 'Predefinições_mais_usadas' ),
@@ -167,6 +171,8 @@ $specialPageAliases = array(
'Mytalk' => array( 'Minha_discussão' ),
'Newimages' => array( 'Ficheiros_novos', 'Imagens_novas', 'Arquivos_novos' ),
'Newpages' => array( 'Páginas_novas', 'Artigos_novos' ),
+ 'PagesWithProp' => array( 'Propriedades_de_página' ),
+ 'PasswordReset' => array( 'Redefinir_autenticação' ),
'PermanentLink' => array( 'Ligação_permanente', 'Link_permanente' ),
'Popularpages' => array( 'Páginas_populares', 'Artigos_populares' ),
'Preferences' => array( 'Preferências' ),
@@ -174,15 +180,19 @@ $specialPageAliases = array(
'Protectedpages' => array( 'Páginas_protegidas', 'Artigos_protegidos' ),
'Protectedtitles' => array( 'Títulos_protegidos' ),
'Randompage' => array( 'Aleatória', 'Aleatório', 'Página_aleatória', 'Artigo_aleatório' ),
+ 'RandomInCategory' => array( 'Aleatória_na_Categoria', 'Aleatório_na_Categoria' ),
'Randomredirect' => array( 'Redireccionamento_aleatório', 'Redirecionamento_aleatório' ),
'Recentchanges' => array( 'Mudanças_recentes' ),
'Recentchangeslinked' => array( 'Alterações_relacionadas', 'Novidades_relacionadas', 'Mudanças_relacionadas' ),
+ 'Redirect' => array( 'Redirecionar', 'Redireccionar' ),
+ 'ResetTokens' => array( 'Reiniciar_tokens', 'Reiniciar_os_tokens' ),
'Revisiondelete' => array( 'Eliminar_edição', 'Eliminar_revisão', 'Apagar_edição', 'Apagar_revisão' ),
'Search' => array( 'Pesquisar', 'Busca', 'Buscar', 'Procurar', 'Pesquisa' ),
'Shortpages' => array( 'Páginas_curtas', 'Artigos_curtos' ),
'Specialpages' => array( 'Páginas_especiais' ),
'Statistics' => array( 'Estatísticas' ),
'Tags' => array( 'Etiquetas' ),
+ 'TrackingCategories' => array( 'Categorias_de_rastreamento', 'Monitoramento_de_Categorias' ),
'Unblock' => array( 'Desbloquear' ),
'Uncategorizedcategories' => array( 'Categorias_não_categorizadas', 'Categorias_sem_categorias' ),
'Uncategorizedimages' => array( 'Ficheiros_não_categorizados', 'Imagens_não_categorizadas', 'Imagens_sem_categorias', 'Ficheiros_sem_categorias', 'Arquivos_sem_categorias' ),
@@ -195,6 +205,7 @@ $specialPageAliases = array(
'Unusedtemplates' => array( 'Predefinições_não_utilizadas', 'Predefinições_sem_uso' ),
'Unwatchedpages' => array( 'Páginas_não_vigiadas', 'Páginas_não-vigiadas', 'Artigos_não-vigiados', 'Artigos_não_vigiados' ),
'Upload' => array( 'Carregar_imagem', 'Carregar_ficheiro', 'Carregar_arquivo', 'Enviar' ),
+ 'UploadStash' => array( 'Envios_ocultos', 'Ficheiros_ocultos', 'Arquivos_ocultos', 'Envios_escondidos', 'Ficheiros_escondidos', 'Arquivos_escondidos' ),
'Userlogin' => array( 'Entrar' ),
'Userlogout' => array( 'Sair' ),
'Userrights' => array( 'Privilégios', 'Direitos', 'Estatutos' ),
@@ -241,7 +252,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
'pagenamee' => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
'namespace' => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesPt_br.php b/languages/messages/MessagesPt_br.php
index b981b373..8a634706 100644
--- a/languages/messages/MessagesPt_br.php
+++ b/languages/messages/MessagesPt_br.php
@@ -140,6 +140,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'Criar_conta' ),
'Deadendpages' => array( 'Páginas_sem_saída', 'Artigos_sem_saída' ),
'DeletedContributions' => array( 'Contribuições_eliminadas', 'Edições_eliminadas' ),
+ 'Diff' => array( 'Mudanças_entre_edições', 'Diferenças_entre_edições' ),
'DoubleRedirects' => array( 'Redirecionamentos_duplos' ),
'EditWatchlist' => array( 'Editar_lista_de_páginas_vigiadas' ),
'Emailuser' => array( 'Contatar_usuário', 'Contactar_usuário', 'Contactar_utilizador' ),
@@ -249,7 +250,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NUMERODEUSUARIOS', 'NÚMERODEUSUÁRIOS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NUMERODEUSUARIOSATIVOS', 'NÚMERODEUSUÁRIOSATIVOS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NUMERODEEDICOES', 'NÚMERODEEDIÇÕES', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NUMERODEEXIBICOES', 'NÚMERODEEXIBIÇÕES', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NOMEDAPAGINA', 'NOMEDAPÁGINA', 'PAGENAME' ),
'pagenamee' => array( '1', 'NOMEDAPAGINAC', 'NOMEDAPÁGINAC', 'PAGENAMEE' ),
'namespace' => array( '1', 'DOMINIO', 'DOMÍNIO', 'ESPACONOMINAL', 'ESPAÇONOMINAL', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesQu.php b/languages/messages/MessagesQu.php
index f0578105..97afe6ba 100644
--- a/languages/messages/MessagesQu.php
+++ b/languages/messages/MessagesQu.php
@@ -40,22 +40,30 @@ $namespaceNames = array(
$namespaceGenderAliases = array();
$specialPageAliases = array(
+ 'Activeusers' => array( 'KuchiRuraqkuna' ),
'Allmessages' => array( 'TukuyWillaykuna' ),
+ 'AllMyUploads' => array( 'TukuyChurkusqaykuna' ),
'Allpages' => array( 'TukuyPanqakuna' ),
'Ancientpages' => array( 'MawkaPanqa' ),
+ 'Badtitle' => array( 'ManaAllinSuti' ),
'Blankpage' => array( 'PanqataChusaqchay' ),
'Block' => array( 'Harkay', 'RuraqtaHarkay', 'IPHarkay' ),
'Booksources' => array( 'PukyuLiwru' ),
'BrokenRedirects' => array( 'PantaPusapuna', 'PitisqaPusapuna' ),
'Categories' => array( 'Katiguriyakuna' ),
- 'ChangePassword' => array( 'YaykunaRimataKutichiy' ),
+ 'ChangeEmail' => array( 'EChaskitaHukchay' ),
+ 'ChangePassword' => array( 'YaykunaRimataKutichiy', 'YaykunaRimataHukchay' ),
+ 'ComparePages' => array( 'PanqakunataWakinchay' ),
'Confirmemail' => array( 'EChaskitaTakyachiy' ),
'Contributions' => array( 'Rurasqakuna', 'Llamkapusqakuna' ),
'CreateAccount' => array( 'RakiqunaKamariy' ),
'Deadendpages' => array( 'Lluqsinannaq' ),
'DeletedContributions' => array( 'QullusqaRurasqa', 'QullusqaLlamkapusqa' ),
+ 'Diff' => array( 'WakinKay' ),
'DoubleRedirects' => array( 'IskayllaPusapuna' ),
+ 'EditWatchlist' => array( 'WatiqasqakunataLlamkapuy' ),
'Emailuser' => array( 'EChaskitaManakuy' ),
+ 'ExpandTemplates' => array( 'PlantillakunataHuknachay' ),
'Export' => array( 'HawamanQuy' ),
'Fewestrevisions' => array( 'AsllaLlamkapusqa', 'AsllaKutiLlamkapusqa' ),
'FileDuplicateSearch' => array( 'IskayllaWillaniqitaMaskay' ),
@@ -87,22 +95,30 @@ $specialPageAliases = array(
'MyLanguage' => array( 'Rimayniy' ),
'Mypage' => array( 'Panqay', 'NuqapPanqay' ),
'Mytalk' => array( 'Rimachinay', 'RimanakuyPanqay', 'NuqapRimachinay', 'NuqapRimanakuyPanqay' ),
+ 'Myuploads' => array( 'Churkusqaykuna' ),
'Newimages' => array( 'MusuqRikcha', 'MusuqRikchakuna' ),
'Newpages' => array( 'MusuqPanqa' ),
+ 'PasswordReset' => array( 'YaykunaRimaKutichina' ),
+ 'PermanentLink' => array( 'KakuqTinki' ),
'Popularpages' => array( 'WatukuqsapaPanqa', 'RikuqsapaPanqa', 'QhawaqsapaPanqa' ),
'Preferences' => array( 'Allinkachina', 'Allinkachinakuna' ),
'Prefixindex' => array( 'QallarinaKaskaSutisuyu' ),
'Protectedpages' => array( 'AmachasqaPanqa' ),
'Protectedtitles' => array( 'AmachasqaSuti' ),
'Randompage' => array( 'MayninpiPanqa' ),
+ 'RandomInCategory' => array( 'KatiguriyapiKikinmanta' ),
'Randomredirect' => array( 'KikinmantaPusapuna' ),
'Recentchanges' => array( 'NaqhaHukchasqa' ),
'Recentchangeslinked' => array( 'HukchasqaTinkimuq' ),
+ 'Redirect' => array( 'Pusapuna', 'Pusapuy' ),
+ 'ResetTokens' => array( 'LlawikunataKutichiy' ),
'Revisiondelete' => array( 'MusuqchasqaQulluy' ),
'Search' => array( 'Maskay' ),
'Shortpages' => array( 'UchuyPanqa' ),
'Specialpages' => array( 'SapaqPanqa', 'SapaqPanqakuna' ),
'Statistics' => array( 'Ranuy', 'Kanchachani' ),
+ 'Tags' => array( 'Unanchachakuna' ),
+ 'Unblock' => array( 'AmanaHarkaychu' ),
'Uncategorizedcategories' => array( 'KatiguriyannaqKatiguriya' ),
'Uncategorizedimages' => array( 'KatiguriyannaqRikcha' ),
'Uncategorizedpages' => array( 'KatiguriyannaqPanqa' ),
@@ -114,6 +130,7 @@ $specialPageAliases = array(
'Unusedtemplates' => array( 'ManaLlamkachisqaPlantilla' ),
'Unwatchedpages' => array( 'ManaWatiqasqa' ),
'Upload' => array( 'Churkuy' ),
+ 'UploadStash' => array( 'PakasqaWillaniqikuna' ),
'Userlogin' => array( 'RuraqYaykuy' ),
'Userlogout' => array( 'RuraqLluqsiy' ),
'Userrights' => array( 'RuraqpaHaynin' ),
@@ -160,7 +177,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'HAYKARURAQ', 'NÚMERODEUSUARIOS', 'NUMERODEUSUARIOS', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'HAYKARURACHKAQ', 'NÚMERODEUSUARIOSACTIVOS', 'NUMERODEUSUARIOSACTIVOS', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'HAYKALLAMKAPUSQA', 'NÚMERODEEDICIONES', 'NUMERODEEDICIONES', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'HAYKAQHAWASQA', 'HAYKAQAWASQA', 'NÚMERODEVISTAS', 'NUMERODEVISTAS', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'PANQASUTI', 'NOMBREDEPAGINA', 'NOMBREDEPÁGINA', 'PAGENAME' ),
'pagenamee' => array( '1', 'PANQASUTIE', 'NOMBREDEPAGINAC', 'NOMBREDEPÁGINAC', 'PAGENAMEE' ),
'namespace' => array( '1', 'SUTIKITI', 'ESPACIODENOMBRE', 'NAMESPACE' ),
@@ -206,7 +222,7 @@ $magicWords = array(
'int' => array( '0', 'WILLAY:', 'INT:' ),
'sitename' => array( '1', 'TIYAYSUTI', 'NOMBREDESITIO', 'NOMBREDELSITIO', 'SITENAME' ),
'ns' => array( '0', 'SKITI:', 'EN:', 'NS:' ),
- 'localurl' => array( '0', 'KAYLLAURL:', 'URLLOCAL', 'LOCALURL:' ),
+ 'localurl' => array( '0', 'KAYLLAURL:', 'URLLOCAL', 'URLLOCAL:', 'LOCALURL:' ),
'localurle' => array( '0', 'KAYLLAURLE:', 'URLLOCALC:', 'LOCALURLE:' ),
'server' => array( '0', 'SIRWIQ', 'SERVIDOR', 'SERVER' ),
'servername' => array( '0', 'SIRWIQSUTI', 'NOMBRESERVIDOR', 'SERVERNAME' ),
@@ -229,11 +245,11 @@ $magicWords = array(
'plural' => array( '0', 'ACHKA:', 'PLURAL:' ),
'fullurl' => array( '0', 'HUNTAURL:', 'URLCOMPLETA:', 'FULLURL:' ),
'fullurle' => array( '0', 'HUNTAURLE:', 'URLCOMPLETAC:', 'FULLURLE:' ),
- 'lcfirst' => array( '0', 'UCHUYÑAWPAQ:', 'UCHUYNAWPAQ:', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'LCFIRST:' ),
- 'ucfirst' => array( '0', 'HATUNÑAWPAQ:', 'HATUNNAWPAQ:', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
+ 'lcfirst' => array( '0', 'UCHUYÑAWPAQ:', 'UCHUYNAWPAQ:', 'PRIMEROMINUS;', 'PRIMEROMINÚS:', 'PRIMEROMINUS:', 'LCFIRST:' ),
+ 'ucfirst' => array( '0', 'HATUNÑAWPAQ:', 'HATUNNAWPAQ:', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'PRIMEROMAYUS:', 'UCFIRST:' ),
'lc' => array( '0', 'UCHUY:', 'MINUS:', 'MINÚS:', 'LC:' ),
'uc' => array( '0', 'HATUN:', 'MAYUS:', 'MAYÚS:', 'UC:' ),
- 'raw' => array( '0', 'CHAWA:', 'SINFORMATO', 'SINPUNTOS', 'RAW:' ),
+ 'raw' => array( '0', 'CHAWA:', 'SINFORMATO', 'SINPUNTOS', 'SINFORMATO:', 'SINPUNTOS:', 'RAW:' ),
'displaytitle' => array( '1', 'SUTITARIKUCHIY', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
'currentversion' => array( '1', 'KUNANMUSUQCHASQA', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
'urlencode' => array( '0', 'URLLLAWICHAY', 'URL-LLAWICHAY', 'CODIFICAR', 'CODIFICARURL:', 'URLENCODE:' ),
@@ -260,5 +276,6 @@ $magicWords = array(
'numberingroup' => array( '1', 'HUÑUPIYUPAY', 'HUNUPIYUPAY', 'NÚMEROENGRUPO', 'NUMEROENGRUPO', 'NUMENGRUPO', 'NÚMENGRUPO', 'NUMBERINGROUP', 'NUMINGROUP' ),
'staticredirect' => array( '1', '__TIYAQLLAPUSAPUNA__', '__REDIRECCIONESTATICA__', '__REDIRECCIÓNESTÁTICA__', '__STATICREDIRECT__' ),
'protectionlevel' => array( '1', 'HAYKAAMACHAY', 'IMASINCHIAMACHAY', 'NIVELDEPROTECCIÓN', 'PROTECTIONLEVEL' ),
+ 'formatdate' => array( '0', 'punchawrikchakuy', 'formatodefecha', 'formatearfecha', 'formatdate', 'dateformat' ),
);
diff --git a/languages/messages/MessagesRo.php b/languages/messages/MessagesRo.php
index a3c15c6c..3d62d431 100644
--- a/languages/messages/MessagesRo.php
+++ b/languages/messages/MessagesRo.php
@@ -66,7 +66,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NUMARDEUTILIZATORI', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NUMARDEUTILIZATORIACTIVI', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NUMARDEMODIFICARI', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NUMARDEVIZUALIZARI', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'NUMEPAGINA', 'PAGENAME' ),
'pagenamee' => array( '1', 'NUMEEPAGINA', 'PAGENAMEE' ),
'namespace' => array( '1', 'SPATIUDENUME', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesRu.php b/languages/messages/MessagesRu.php
index 02b79721..a74c9db9 100644
--- a/languages/messages/MessagesRu.php
+++ b/languages/messages/MessagesRu.php
@@ -150,6 +150,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'Создать_учётную_запись', 'Создать_пользователя', 'Зарегистрироваться' ),
'Deadendpages' => array( 'Тупиковые_страницы' ),
'DeletedContributions' => array( 'Удалённый_вклад' ),
+ 'Diff' => array( 'Изменения' ),
'DoubleRedirects' => array( 'Двойные_перенаправления' ),
'EditWatchlist' => array( 'Править_список_наблюдения' ),
'Emailuser' => array( 'Письмо_участнику', 'Отправить_письмо' ),
@@ -168,6 +169,7 @@ $specialPageAliases = array(
'Listfiles' => array( 'Список_файлов', 'Список_изображений' ),
'Listgrouprights' => array( 'Права_групп_участников', 'Список_прав_групп' ),
'Listredirects' => array( 'Список_перенаправлений' ),
+ 'ListDuplicatedFiles' => array( 'Список_файлов-дубликатов' ),
'Listusers' => array( 'Список_участников' ),
'Lockdb' => array( 'Заблокировать_БД', 'Заблокировать_базу_данных' ),
'Log' => array( 'Журналы', 'Журнал' ),
@@ -267,7 +269,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
'pagenamee' => array( '1', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
'namespace' => array( '1', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesRue.php b/languages/messages/MessagesRue.php
index bdfcd8ef..cb237418 100644
--- a/languages/messages/MessagesRue.php
+++ b/languages/messages/MessagesRue.php
@@ -45,6 +45,7 @@ $namespaceAliases = array(
$specialPageAliases = array(
'Activeusers' => array( 'Актівны_хоснователї' ),
'Allmessages' => array( 'Сістемовы_повідомлїня' ),
+ 'AllMyUploads' => array( 'Вшыткы_мої_файлы' ),
'Allpages' => array( 'Вшыткы_сторінкы' ),
'Ancientpages' => array( 'Давны_сторінкы' ),
'Badtitle' => array( 'Планый_тітул' ),
@@ -91,6 +92,7 @@ $specialPageAliases = array(
'Mostrevisions' => array( 'Найбівше_ревізій' ),
'Movepage' => array( 'Переменовати' ),
'Mycontributions' => array( 'Мій_вклад' ),
+ 'MyLanguage' => array( 'Мій_язык' ),
'Mypage' => array( 'Моя_сторінка' ),
'Mytalk' => array( 'Моя_діскузія' ),
'Myuploads' => array( 'Мої_награня_файлів' ),
@@ -100,17 +102,31 @@ $specialPageAliases = array(
'PermanentLink' => array( 'Тырвалый_одказ' ),
'Popularpages' => array( 'Популарны_сторінкы' ),
'Preferences' => array( 'Наставлїня' ),
+ 'Protectedpages' => array( 'Замкнуты_сторінкы' ),
+ 'Protectedtitles' => array( 'Замкнуты_назвы' ),
'Randompage' => array( 'Нагодна_статя' ),
'Randomredirect' => array( 'Нагодне_напрямлїня' ),
'Recentchanges' => array( 'Послїднї_зміны' ),
'Recentchangeslinked' => array( 'Повязаны_едітованя' ),
'Search' => array( 'Гляданя' ),
'Shortpages' => array( 'Курты_сторінкы' ),
- 'Specialpages' => array( 'Шпеціялны_сторінкы' ),
+ 'Specialpages' => array( 'Шпеціалны_сторінкы' ),
'Statistics' => array( 'Штатістіка' ),
'Tags' => array( 'Позначкы' ),
'Unblock' => array( 'Одблоковати' ),
'Uncategorizedcategories' => array( 'Некатеґорізованы_катеґорії' ),
'Uncategorizedimages' => array( 'Некатеґорізованы_файлы' ),
+ 'Uncategorizedpages' => array( 'Некатеґорізованы_сторінкы' ),
+ 'Uncategorizedtemplates' => array( 'Некатеґорізованы_шаблоны' ),
+ 'Unusedcategories' => array( 'Нехоснованы_катеґорії' ),
+ 'Unusedimages' => array( 'Нехоснованы_файлы' ),
+ 'Unusedtemplates' => array( 'Нехоснованы_шаблоны' ),
+ 'Unwatchedpages' => array( 'Неслїдованы_сторінкы' ),
+ 'Wantedcategories' => array( 'Пожадованы_катеґорії' ),
+ 'Wantedfiles' => array( 'Пожадованы_файлы' ),
+ 'Wantedpages' => array( 'Пожадованы_сторінкы' ),
+ 'Wantedtemplates' => array( 'Пожадованы_шаблоны' ),
+ 'Whatlinkshere' => array( 'Одказы_гев' ),
+ 'Withoutinterwiki' => array( 'Без_інтервікі' ),
);
diff --git a/languages/messages/MessagesSa.php b/languages/messages/MessagesSa.php
index 6b15283c..14a8f99f 100644
--- a/languages/messages/MessagesSa.php
+++ b/languages/messages/MessagesSa.php
@@ -203,7 +203,6 @@ $magicWords = array(
'numberoffiles' => array( '1', 'संचिकानाम्‌‌सङ्ख्या', 'NUMBEROFFILES' ),
'numberofusers' => array( '1', 'योजकस्यसङ्ख्या', 'NUMBEROFUSERS' ),
'numberofedits' => array( '1', 'सम्पादनसङ्ख्या', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'दृष्टिसङ्ख्या', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'पृष्ठनाम', 'PAGENAME' ),
'namespace' => array( '1', 'नामविश्व', 'NAMESPACE' ),
'talkspace' => array( '1', 'व्यासपिठ', 'TALKSPACE' ),
diff --git a/languages/messages/MessagesSes.php b/languages/messages/MessagesSes.php
new file mode 100644
index 00000000..9d9e0099
--- /dev/null
+++ b/languages/messages/MessagesSes.php
@@ -0,0 +1,10 @@
+<?php
+/** Koyraboro Senni
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ */
+
+$fallback = 'fr';
diff --git a/languages/messages/MessagesSh.php b/languages/messages/MessagesSh.php
index c5dbf12e..f8aa19f7 100644
--- a/languages/messages/MessagesSh.php
+++ b/languages/messages/MessagesSh.php
@@ -148,7 +148,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'BROJKORISNIKA', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'BROJAKTIVNIHKORISNIKA', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'BROJIZMJENA', 'BROJIZMENA', 'BROJUREĐIVANJA', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'BROJPREGLEDA', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'STRANICA', 'IMESTRANICE', 'PAGENAME' ),
'pagenamee' => array( '1', 'STRANICE', 'IMESTRANICEE', 'PAGENAMEE' ),
'namespace' => array( '1', 'IMENSKIPROSTOR', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesSq.php b/languages/messages/MessagesSq.php
index 3c27597d..987464a3 100644
--- a/languages/messages/MessagesSq.php
+++ b/languages/messages/MessagesSq.php
@@ -156,7 +156,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'NUMRIIPËRDORUESVE', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'NUMRIIPËRDORUESVEAKTIVË', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NUMRIREDAKTIMEVE', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'NUMRIISHIKIMEVE', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'EMRIFAQES', 'PAGENAME' ),
'namespace' => array( '1', 'HAPËSIRA', 'NAMESPACE' ),
'fullpagename' => array( '1', 'EMRIIPLOTËIFAQES', 'FULLPAGENAME' ),
diff --git a/languages/messages/MessagesSr_ec.php b/languages/messages/MessagesSr_ec.php
index e9d8aa98..0f89cca6 100644
--- a/languages/messages/MessagesSr_ec.php
+++ b/languages/messages/MessagesSr_ec.php
@@ -96,39 +96,45 @@ $specialPageAliases = array(
'Activeusers' => array( 'АктивниКорисници', 'Активни_корисници' ),
'Allmessages' => array( 'СвеПоруке', 'Све_поруке' ),
'Allpages' => array( 'Све_странице' ),
- 'Ancientpages' => array( 'НајстаријиЧланци' ),
+ 'Ancientpages' => array( 'НајстаријеСтранице', 'НајстаријиЧланци' ),
'Badtitle' => array( 'Лош_наслов' ),
+ 'Blankpage' => array( 'ПразнаСтраница' ),
'Block' => array( 'Блокирај', 'БлокирајИП', 'БлокирајКорисника' ),
'BrokenRedirects' => array( 'Покварена_преусмерења', 'Неисправна_преусмерења' ),
'Categories' => array( 'Категорије' ),
+ 'ChangePassword' => array( 'ПромениЛозинку' ),
'ComparePages' => array( 'Упореди_странице' ),
'Confirmemail' => array( 'ПотврдиЕ-пошту', 'Потврда_е-поште' ),
'Contributions' => array( 'Доприноси', 'Прилози' ),
'CreateAccount' => array( 'ОтвориНалог', 'Отвори_налог' ),
+ 'DeletedContributions' => array( 'ОбрисаниДоприноси' ),
'DoubleRedirects' => array( 'Двострука_преусмерења' ),
'Export' => array( 'Извези' ),
- 'Fewestrevisions' => array( 'ЧланциСаНајмањеРевизија' ),
+ 'Fewestrevisions' => array( 'НајмањеИзмена', 'ЧланциСаНајмањеРевизија' ),
'Filepath' => array( 'Путања_датотеке' ),
'Import' => array( 'Увези' ),
- 'Listadmins' => array( 'ПописАдминистратора', 'Списак_администратора' ),
- 'Listbots' => array( 'ПописБотова', 'Списак_ботова' ),
- 'Listfiles' => array( 'СписакСлика', 'Списак_датотека' ),
+ 'BlockList' => array( 'СписакБлокираних', 'ПописБлокираних' ),
+ 'Listadmins' => array( 'СписакАдминистратора', 'ПописАдминистратора', 'Списак_администратора' ),
+ 'Listbots' => array( 'СписакБотова', 'ПописБотова', 'Списак_ботова' ),
+ 'Listfiles' => array( 'СписакДатотека', 'СписакСлика', 'Списак_датотека' ),
'Listgrouprights' => array( 'СписакКорисничкихПрава', 'Списак_корисничких_права' ),
'Listredirects' => array( 'СписакПреусмерења', 'Списак_преусмерења' ),
+ 'ListDuplicatedFiles' => array( 'СписакДупликата' ),
'Listusers' => array( 'СписакКорисника', 'КорисничкиСписак', 'Списак_корисника', 'Кориснички_списак' ),
'Lockdb' => array( 'ЗакључајБазу', 'Закључај_базу' ),
'Log' => array( 'Извештај', 'Извештаји' ),
'Lonelypages' => array( 'Сирочићи' ),
'Longpages' => array( 'ДугачкеСтране' ),
- 'MergeHistory' => array( 'Споји_историју' ),
+ 'MergeHistory' => array( 'СпојиИсторију', 'Споји_историју' ),
'MIMEsearch' => array( 'MIME_претрага' ),
- 'Mostcategories' => array( 'ЧланциСаНајвишеКатегорија' ),
- 'Mostimages' => array( 'НајповезанијеСлике' ),
+ 'Mostcategories' => array( 'НајвишеКатегорија', 'ЧланциСаНајвишеКатегорија' ),
+ 'Mostimages' => array( 'НајповезанијеДатотеке', 'НајповезанијеСлике' ),
+ 'Mostinterwikis' => array( 'НајвишеМеђувикија' ),
'Mostlinked' => array( 'НајповезанијеСтране' ),
'Mostlinkedcategories' => array( 'НајповезанијеКатегорије' ),
'Mostlinkedtemplates' => array( 'НајповезанијиШаблони' ),
- 'Mostrevisions' => array( 'ЧланциСаНајвишеРевизија' ),
- 'Movepage' => array( 'Преусмери', 'Премести_страницу' ),
+ 'Mostrevisions' => array( 'НајвишеРевизија', 'ЧланциСаНајвишеРевизија' ),
+ 'Movepage' => array( 'Премести', 'Преусмери', 'Премести_страницу' ),
'Mycontributions' => array( 'МојиДоприноси', 'Моји_доприноси', 'Моји_прилози' ),
'MyLanguage' => array( 'Мој_језик' ),
'Mypage' => array( 'МојаСтраница', 'Моја_страница' ),
@@ -140,34 +146,39 @@ $specialPageAliases = array(
'Popularpages' => array( 'Популарне_странице' ),
'Preferences' => array( 'Подешавања', 'Поставке' ),
'Protectedpages' => array( 'ЗаштићенеСтранице', 'Заштићене_странице' ),
- 'Protectedtitles' => array( 'Заштићени_наслови' ),
+ 'Protectedtitles' => array( 'ЗаштићениНаслови', 'Заштићени_наслови' ),
'Randompage' => array( 'СлучајнаСтрана', 'Насумична_страница' ),
+ 'Randomredirect' => array( 'СлучајноПреусмерење' ),
'Recentchanges' => array( 'СкорашњеИзмене', 'Скорашње_измене' ),
'Search' => array( 'Претражи' ),
- 'Shortpages' => array( 'КраткиЧланци' ),
+ 'Shortpages' => array( 'КраткеСтранице', 'КраткиЧланци' ),
'Specialpages' => array( 'СпецијалнеСтране', 'Посебне_странице' ),
'Statistics' => array( 'Статистике' ),
'Tags' => array( 'Ознаке' ),
- 'Uncategorizedcategories' => array( 'КатегоријеБезКатегорија', 'Несврстане_категорије' ),
- 'Uncategorizedimages' => array( 'СликеБезКатегорија', 'ДатотекеБезКатегорија' ),
- 'Uncategorizedpages' => array( 'ЧланциБезКатегорија', 'Чланци_без_категорија' ),
- 'Uncategorizedtemplates' => array( 'ШаблониБезКатегорија' ),
+ 'Unblock' => array( 'Деблокирај' ),
+ 'Uncategorizedcategories' => array( 'НекатегорисанеКатегорије', 'КатегоријеБезКатегорија' ),
+ 'Uncategorizedimages' => array( 'НекатегорисанеДатотеке', 'СликеБезКатегорија' ),
+ 'Uncategorizedpages' => array( 'НекатегорисанеСтранице', 'ЧланциБезКатегорија', 'Чланци_без_категорија' ),
+ 'Uncategorizedtemplates' => array( 'НекатегорисаниШаблони', 'ШаблониБезКатегорија' ),
'Undelete' => array( 'Врати' ),
'Unlockdb' => array( 'ОткључајБазу', 'Откључај_базу' ),
'Unusedcategories' => array( 'НеискоришћенеКатегорије' ),
- 'Unusedimages' => array( 'НеискоришћенеСлике', 'НеискоришћенеДатотеке' ),
+ 'Unusedimages' => array( 'НеискоришћенеДатотеке', 'НеискоришћенеСлике' ),
+ 'Unusedtemplates' => array( 'НеискоришћениШаблони' ),
+ 'Unwatchedpages' => array( 'НенадгледанеСтранице' ),
'Upload' => array( 'Пошаљи' ),
'UploadStash' => array( 'Складиште' ),
'Userlogin' => array( 'Корисничка_пријава' ),
'Userlogout' => array( 'Корисничка_одјава' ),
+ 'Userrights' => array( 'КорисничкаПрава' ),
'Version' => array( 'Верзија', 'Издање' ),
'Wantedcategories' => array( 'ТраженеКатегорије' ),
- 'Wantedfiles' => array( 'ТраженеСлике' ),
+ 'Wantedfiles' => array( 'ТраженеДатотеке', 'ТраженеСлике' ),
'Wantedpages' => array( 'ТраженеСтране' ),
'Wantedtemplates' => array( 'ТражениШаблони' ),
'Watchlist' => array( 'СписакНадгледања', 'Списак_надгледања' ),
- 'Whatlinkshere' => array( 'Шта_је_повезано_овде' ),
- 'Withoutinterwiki' => array( 'Без_међувикије' ),
+ 'Whatlinkshere' => array( 'ШтаВодиОвде', 'Шта_је_повезано_овде' ),
+ 'Withoutinterwiki' => array( 'Без_међувикија' ),
);
$datePreferences = array(
@@ -281,11 +292,11 @@ $magicWords = array(
'numberofusers' => array( '1', 'БРОЈКОРИСНИКА', 'БРОЈ_КОРИСНИКА', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'БРОЈАКТИВНИХКОРИСНИКА', 'БРОЈ_АКТИВНИХ_КОРИСНИКА', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'БРОЈИЗМЕНА', 'БРОЈ_ИЗМЕНА', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'БРОЈПРЕГЛЕДА', 'БРОЈ_ПРЕГЛЕДА', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'ИМЕСТРАНИЦЕ', 'ИМЕ_СТРАНИЦЕ', 'СТРАНИЦА', 'PAGENAME' ),
'pagenamee' => array( '1', 'ИМЕНАСТРАНИЦА', 'ИМЕНА_СТРАНИЦА', 'СТРАНИЦЕ', 'PAGENAMEE' ),
'namespace' => array( '1', 'ИМЕНСКИПРОСТОР', 'ИМЕНСКИ_ПРОСТОР', 'NAMESPACE' ),
'namespacee' => array( '1', 'ИМЕНСКИПРОСТОРИ', 'ИМЕНСКИ_ПРОСТОРИ', 'NAMESPACEE' ),
+ 'namespacenumber' => array( '1', 'БРОЈИМЕНСКОГПРОСТОРА', 'NAMESPACENUMBER' ),
'talkspace' => array( '1', 'РАЗГОВОР', 'TALKSPACE' ),
'talkspacee' => array( '1', 'РАЗГОВОРИ', 'TALKSPACEE' ),
'subjectspace' => array( '1', 'ИМЕНСКИПРОСТОРЧЛАНКА', 'ИМЕНСКИ_ПРОСТОР_ЧЛАНКА', 'SUBJECTSPACE', 'ARTICLESPACE' ),
@@ -301,7 +312,7 @@ $magicWords = array(
'subjectpagename' => array( '1', 'ИМЕЧЛАНКА', 'ИМЕ_ЧЛАНКА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
'subjectpagenamee' => array( '1', 'ИМЕНАЧЛАНАКА', 'ИМЕНА_ЧЛАНАКА', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
'msg' => array( '0', 'ПОР:', 'MSG:' ),
- 'subst' => array( '0', 'ЗАМЕНИ:', 'ЗАМЕНА:', 'SUBST:' ),
+ 'subst' => array( '0', 'ЗАМЕНИ:', 'ЗАМЕНА:', 'СУБСТ', 'SUBST:' ),
'safesubst' => array( '0', 'БЕЗБЕДНАЗАМЕНА', 'БЕЗБЕДНА_ЗАМЕНА', 'SAFESUBST:' ),
'msgnw' => array( '0', 'НВПОР:', 'MSGNW:' ),
'img_thumbnail' => array( '1', 'мини', 'умањено', 'thumbnail', 'thumb' ),
@@ -309,13 +320,13 @@ $magicWords = array(
'img_right' => array( '1', 'десно', 'д', 'right' ),
'img_left' => array( '1', 'лево', 'л', 'left' ),
'img_none' => array( '1', 'без', 'н', 'none' ),
- 'img_width' => array( '1', '$1пискел', '$1п', '$1px' ),
- 'img_center' => array( '1', 'центар', 'ц', 'center', 'centre' ),
+ 'img_width' => array( '1', '$1пискел', '$1п', '$1p', '$1px' ),
+ 'img_center' => array( '1', 'центар', 'ц', 'c', 'center', 'centre' ),
'img_framed' => array( '1', 'оквир', 'рам', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'безоквира', 'без_оквира', 'безрама', 'без_рама', 'frameless' ),
'img_page' => array( '1', 'страница=$1', 'страна=$1', 'страница_$1', 'страна_$1', 'page=$1', 'page $1' ),
'img_upright' => array( '1', 'усправно', 'усправно=$1', 'усправно_$1', 'upright', 'upright=$1', 'upright $1' ),
- 'img_border' => array( '1', 'ивица', 'border' ),
+ 'img_border' => array( '1', 'ивица', 'оивичено', 'border' ),
'img_baseline' => array( '1', 'основа', 'baseline' ),
'img_sub' => array( '1', 'под', 'sub' ),
'img_super' => array( '1', 'супер', 'super', 'sup' ),
@@ -332,6 +343,7 @@ $magicWords = array(
'localurl' => array( '0', 'ЛОКАЛНААДРЕСА:', 'ЛОКАЛНА_АДРЕСА:', 'LOCALURL:' ),
'localurle' => array( '0', 'ЛОКАЛНЕАДРЕСЕ:', 'ЛОКАЛНЕ_АДРЕСЕ:', 'LOCALURLE:' ),
'articlepath' => array( '0', 'ПУТАЊАЧЛАНКА', 'ПУТАЊА_ЧЛАНКА', 'ARTICLEPATH' ),
+ 'pageid' => array( '0', 'БРОЈСТРАНИЦЕ', 'PAGEID' ),
'server' => array( '0', 'СЕРВЕР', 'SERVER' ),
'servername' => array( '0', 'ИМЕСЕРВЕРА', 'ИМЕ_СЕРВЕРА', 'SERVERNAME' ),
'scriptpath' => array( '0', 'СКРИПТА', 'SCRIPTPATH' ),
@@ -339,7 +351,7 @@ $magicWords = array(
'grammar' => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
'gender' => array( '0', 'РОД:', 'ЛИЦЕ:', 'GENDER:' ),
'notitleconvert' => array( '0', '__БЕЗКН__', '__BEZKN__', '__NOTITLECONVERT__', '__NOTC__' ),
- 'nocontentconvert' => array( '0', '__БЕЗЦЦ__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+ 'nocontentconvert' => array( '0', '__БЕЗКС__', '__БЕЗЦЦ__', '__BEZKS__', '__NOCONTENTCONVERT__', '__NOCC__' ),
'currentweek' => array( '1', 'ТРЕНУТНАНЕДЕЉА', 'ТРЕНУТНА_НЕДЕЉА', 'ТЕКУЋАНЕДЕЉА', 'ТЕКУЋА_НЕДЕЉА', 'CURRENTWEEK' ),
'currentdow' => array( '1', 'ТРЕНУТНИДОВ', 'ТЕКУЋИДУН', 'CURRENTDOW' ),
'localweek' => array( '1', 'ЛОКАЛНАНЕДЕЉА', 'ЛОКАЛНА_НЕДЕЉА', 'LOCALWEEK' ),
@@ -390,6 +402,8 @@ $magicWords = array(
'url_path' => array( '0', 'ПУТАЊА', 'PATH' ),
'url_wiki' => array( '0', 'ВИКИ', 'WIKI' ),
'url_query' => array( '0', 'РЕДОСЛЕД', 'QUERY' ),
+ 'pagesincategory_all' => array( '0', 'све', 'all' ),
+ 'pagesincategory_files' => array( '0', 'датотеке', 'files' ),
);
$separatorTransformTable = array( ',' => '.', '.' => ',' );
diff --git a/languages/messages/MessagesSr_el.php b/languages/messages/MessagesSr_el.php
index 6a5817c3..d13c6541 100644
--- a/languages/messages/MessagesSr_el.php
+++ b/languages/messages/MessagesSr_el.php
@@ -194,11 +194,11 @@ $magicWords = array(
'numberofusers' => array( '1', 'BROJKORISNIKA', 'BROJ_KORISNIKA', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'BROJAKTIVNIHKORISNIKA', 'BROJ_AKTIVNIH_KORISNIKA', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'BROJIZMENA', 'BROJ_IZMENA', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'BROJPREGLEDA', 'BROJ_PREGLEDA', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'IMESTRANICE', 'IME_STRANICE', 'STRANICA', 'PAGENAME' ),
'pagenamee' => array( '1', 'IMENASTRANICA', 'IMENA_STRANICA', 'STRANICE', 'PAGENAMEE' ),
'namespace' => array( '1', 'IMENSKIPROSTOR', 'IMENSKI_PROSTOR', 'NAMESPACE' ),
'namespacee' => array( '1', 'IMENSKIPROSTORI', 'IMENSKI_PROSTORI', 'NAMESPACEE' ),
+ 'namespacenumber' => array( '1', 'BROJIMENSKOGPROSTORA', 'NAMESPACENUMBER' ),
'talkspace' => array( '1', 'RAZGOVOR', 'TALKSPACE' ),
'talkspacee' => array( '1', 'RAZGOVORI', 'TALKSPACEE' ),
'subjectspace' => array( '1', 'IMENSKIPROSTORČLANKA', 'IMENSKI_PROSTOR_ČLANKA', 'SUBJECTSPACE', 'ARTICLESPACE' ),
diff --git a/languages/messages/MessagesSv.php b/languages/messages/MessagesSv.php
index b3d09966..48e35111 100644
--- a/languages/messages/MessagesSv.php
+++ b/languages/messages/MessagesSv.php
@@ -90,24 +90,29 @@ $namespaceAliases = array(
'Hjälp_diskussion' => NS_HELP_TALK
);
-#!!# Translation <b>Prefixindex</b> for <a href="#mw-sp-magic-Prefixindex">Prefixindex</a> is not in normalised form, which is <b>PrefixIndex</b>
$specialPageAliases = array(
+ 'Activeusers' => array( 'Aktiva_användare' ),
'Allmessages' => array( 'Systemmeddelanden' ),
+ 'AllMyUploads' => array( 'Alla_mina_uppladdnignar', 'Alla_mina_filer' ),
'Allpages' => array( 'Alla_sidor' ),
'Ancientpages' => array( 'Gamla_sidor' ),
+ 'Badtitle' => array( 'Dålig_titel' ),
'Blankpage' => array( 'Tom_sida' ),
'Block' => array( 'Blockera' ),
'Booksources' => array( 'Bokkällor' ),
'BrokenRedirects' => array( 'Trasiga_omdirigeringar', 'Dåliga_omdirigeringar' ),
'Categories' => array( 'Kategorier' ),
- 'ChangePassword' => array( 'Återställ_lösenord' ),
+ 'ChangeEmail' => array( 'Ändra_e-postadress' ),
+ 'ChangePassword' => array( 'Ändra_lösenord' ),
+ 'ComparePages' => array( 'Jämför_sidor' ),
'Confirmemail' => array( 'Bekräfta_epost' ),
'Contributions' => array( 'Bidrag' ),
'CreateAccount' => array( 'Skapa_konto' ),
'Deadendpages' => array( 'Sidor_utan_länkar', 'Sidor_utan_länkar_från' ),
'DeletedContributions' => array( 'Raderade_bidrag' ),
'DoubleRedirects' => array( 'Dubbla_omdirigeringar' ),
- 'Emailuser' => array( 'E-mail' ),
+ 'EditWatchlist' => array( 'Redigera_bevakningslista' ),
+ 'Emailuser' => array( 'E-post', 'E-mail' ),
'ExpandTemplates' => array( 'Expandera_mallar', 'Utöka_mallar' ),
'Export' => array( 'Exportera' ),
'Fewestrevisions' => array( 'Minst_versioner' ),
@@ -115,6 +120,7 @@ $specialPageAliases = array(
'Filepath' => array( 'Filsökväg' ),
'Import' => array( 'Importera' ),
'Invalidateemail' => array( 'Ogiltigförklara_epost' ),
+ 'JavaScriptTest' => array( 'JavaScript_test' ),
'BlockList' => array( 'Blockeringslista' ),
'LinkSearch' => array( 'Länksökning' ),
'Listadmins' => array( 'Administratörer' ),
@@ -122,15 +128,18 @@ $specialPageAliases = array(
'Listfiles' => array( 'Fillista', 'Bildlista' ),
'Listgrouprights' => array( 'Grupprättighetslista' ),
'Listredirects' => array( 'Omdirigeringar' ),
+ 'ListDuplicatedFiles' => array( 'Lista_dubblettfiler' ),
'Listusers' => array( 'Användare', 'Användarlista' ),
'Lockdb' => array( 'Lås_databasen' ),
'Log' => array( 'Logg' ),
'Lonelypages' => array( 'Föräldralösa_sidor', 'Övergivna_sidor', 'Sidor_utan_länkar_till' ),
'Longpages' => array( 'Långa_sidor' ),
+ 'MediaStatistics' => array( 'Media_statistik' ),
'MergeHistory' => array( 'Slå_ihop_historik' ),
'MIMEsearch' => array( 'MIME-sökning' ),
'Mostcategories' => array( 'Flest_kategorier' ),
'Mostimages' => array( 'Mest_länkade_filer', 'Flest_bilder' ),
+ 'Mostinterwikis' => array( 'Flest_interwikilänkar' ),
'Mostlinked' => array( 'Mest_länkade_sidor' ),
'Mostlinkedcategories' => array( 'Största_kategorier' ),
'Mostlinkedtemplates' => array( 'Mest_använda_mallar' ),
@@ -141,22 +150,30 @@ $specialPageAliases = array(
'Mypage' => array( 'Min_sida' ),
'Mytalk' => array( 'Min_diskussion' ),
'Myuploads' => array( 'Mina_uppladdningar' ),
- 'Newimages' => array( 'Nya_bilder' ),
+ 'Newimages' => array( 'Nya_filer', 'Nya_bilder' ),
'Newpages' => array( 'Nya_sidor' ),
+ 'PagesWithProp' => array( 'Sidor_med_en_sidegenskap' ),
+ 'PageLanguage' => array( 'Sidspråk' ),
+ 'PasswordReset' => array( 'Återställ_lösenord' ),
+ 'PermanentLink' => array( 'Permanent_länk' ),
'Popularpages' => array( 'Populära_sidor' ),
'Preferences' => array( 'Inställningar' ),
'Protectedpages' => array( 'Skyddade_sidor' ),
'Protectedtitles' => array( 'Skyddade_titlar' ),
'Randompage' => array( 'Slumpsida' ),
+ 'RandomInCategory' => array( 'Slumpsida_i_kategori' ),
'Randomredirect' => array( 'Slumpomdirigering' ),
'Recentchanges' => array( 'Senaste_ändringar' ),
'Recentchangeslinked' => array( 'Senaste_relaterade_ändringar' ),
+ 'Redirect' => array( 'Omdirigering' ),
+ 'ResetTokens' => array( 'Återställ_nycklar' ),
'Revisiondelete' => array( 'Radera_version' ),
'Search' => array( 'Sök' ),
'Shortpages' => array( 'Korta_sidor' ),
'Specialpages' => array( 'Specialsidor' ),
'Statistics' => array( 'Statistik' ),
'Tags' => array( 'Märken', 'Taggar' ),
+ 'TrackingCategories' => array( 'Spårningskategorier' ),
'Unblock' => array( 'Avblockera' ),
'Uncategorizedcategories' => array( 'Okategoriserade_kategorier' ),
'Uncategorizedimages' => array( 'Okategoriserade_filer', 'Okategoriserade_bilder' ),
@@ -214,7 +231,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'ANTALANVÄNDARE', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'ANTALAKTIVAANVÄNDARE', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'ANTALREDIGERINGAR', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'ANTALVISNINGAR', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'SIDNAMN', 'PAGENAME' ),
'pagenamee' => array( '1', 'SIDNAMNE', 'PAGENAMEE' ),
'namespace' => array( '1', 'NAMNRYMD', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesTe.php b/languages/messages/MessagesTe.php
index b5f131a1..5a5e44bf 100644
--- a/languages/messages/MessagesTe.php
+++ b/languages/messages/MessagesTe.php
@@ -61,19 +61,27 @@ $namespaceAliases = array(
);
$specialPageAliases = array(
+ 'Activeusers' => array( 'చురుగ్గావున్నవాడుకరులు' ),
'Allmessages' => array( 'అన్నిసందేశాలు' ),
+ 'AllMyUploads' => array( 'నాయెక్కింపులన్నీ' ),
'Allpages' => array( 'అన్నిపేజీలు' ),
'Ancientpages' => array( 'పురాతనపేజీలు' ),
+ 'Badtitle' => array( 'చెడుశీర్షిక' ),
'Blankpage' => array( 'ఖాళీపేజి' ),
'Block' => array( 'అడ్డగించు', 'ఐపినిఅడ్డగించు', 'వాడుకరినిఅడ్డగించు' ),
'Booksources' => array( 'పుస్తకమూలాలు' ),
'BrokenRedirects' => array( 'తెగిపోయినదారిమార్పులు' ),
'Categories' => array( 'వర్గాలు' ),
+ 'ChangeEmail' => array( 'ఈమెయిలుమార్పు' ),
'ChangePassword' => array( 'సంకేతపదముమార్చు' ),
+ 'ComparePages' => array( 'పేజీలనుపోల్చు' ),
'Confirmemail' => array( 'ఈమెయిలుధ్రువపరచు' ),
+ 'Contributions' => array( 'చేర్పులు' ),
'CreateAccount' => array( 'ఖాతాసృష్టించు' ),
'Deadendpages' => array( 'అగాధపేజీలు' ),
- 'DoubleRedirects' => array( 'రెండుసార్లుదారిమార్పు' ),
+ 'DeletedContributions' => array( 'తొలగించినచేర్పులు' ),
+ 'Diff' => array( 'తేడా' ),
+ 'DoubleRedirects' => array( 'జమిలిదారిమార్పు' ),
'Emailuser' => array( 'వాడుకరికిఈమెయిలుచెయ్యి' ),
'Export' => array( 'ఎగుమతి' ),
'Fewestrevisions' => array( 'అతితక్కువకూర్పులు' ),
diff --git a/languages/messages/MessagesTet.php b/languages/messages/MessagesTet.php
index c48704a5..1327bd48 100644
--- a/languages/messages/MessagesTet.php
+++ b/languages/messages/MessagesTet.php
@@ -50,7 +50,7 @@ $specialPageAliases = array(
'Listfiles' => array( 'Lista_imajen' ),
'Listusers' => array( 'Lista_uza-na\'in' ),
'Longpages' => array( 'Pájina_naruk' ),
- 'Movepage' => array( 'Book' ),
+ 'Movepage' => array( 'Book_pájina', 'Book' ),
'Mypage' => array( 'Ha\'u-nia_pájina' ),
'Newimages' => array( 'Imajen_foun' ),
'Preferences' => array( 'Preferénsia' ),
diff --git a/languages/messages/MessagesTly.php b/languages/messages/MessagesTly.php
index f1d9a4b7..30cf401e 100644
--- a/languages/messages/MessagesTly.php
+++ b/languages/messages/MessagesTly.php
@@ -97,7 +97,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'ИШТИРОКӘКОН_ҒӘДӘР', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'ТИЛИКӘ_ИШТИРОКӘКОН_ҒӘДӘР', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'ДӘГИШОН_ҒӘДӘР', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'ДИЈӘ_КАРДЕ_ҒӘДӘР', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'СӘҺИФӘ_НОМ', 'PAGENAME' ),
'pagenamee' => array( '1', 'СӘҺИФӘ_НОМ_2', 'PAGENAMEE' ),
'namespace' => array( '1', 'НОМОН_МӘКОН', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesTr.php b/languages/messages/MessagesTr.php
index 21cc341b..0f61a96b 100644
--- a/languages/messages/MessagesTr.php
+++ b/languages/messages/MessagesTr.php
@@ -230,7 +230,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'KULLANICISAYISI', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'AKTİFKULLANICISAYISI', 'ETKİNKULLANICISAYISI', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'DEĞİŞİKLİKSAYISI', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'GÖRÜNTÜLEMESAYISI', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'SAYFAADI', 'PAGENAME' ),
'pagenamee' => array( '1', 'SAYFAADIU', 'PAGENAMEE' ),
'namespace' => array( '1', 'ADALANI', 'İSİMALANI', 'NAMESPACE' ),
diff --git a/languages/messages/MessagesTt_cyrl.php b/languages/messages/MessagesTt_cyrl.php
index 457ca9ab..a9dbf3a9 100644
--- a/languages/messages/MessagesTt_cyrl.php
+++ b/languages/messages/MessagesTt_cyrl.php
@@ -157,12 +157,12 @@ $specialPageAliases = array(
'Specialpages' => array( 'Махсус_битләр' ),
'Statistics' => array( 'Статистика' ),
'Tags' => array( 'Теглар' ),
- 'Uncategorizedcategories' => array( 'Үзләштерелмәгән__бүлекләр' ),
+ 'Uncategorizedcategories' => array( 'Үзләштерелмәгән_бүлекләр' ),
'Uncategorizedimages' => array( 'Үзләштерелмәгән_файллар' ),
'Uncategorizedpages' => array( 'Үзләштерелмәгән_битләр' ),
- 'Uncategorizedtemplates' => array( 'Үзләштерелмәгән__үрнәкләр' ),
+ 'Uncategorizedtemplates' => array( 'Үзләштерелмәгән_үрнәкләр' ),
'Unusedcategories' => array( 'Кулланылмаган_төркемнәр' ),
- 'Unusedimages' => array( 'Кулланылмаучы__файллар' ),
+ 'Unusedimages' => array( 'Кулланылмаучы_файллар' ),
'Upload' => array( 'Йөкләү' ),
'Userlogin' => array( 'Кулланучы_исеме' ),
'Userlogout' => array( 'Чыгу' ),
diff --git a/languages/messages/MessagesTyv.php b/languages/messages/MessagesTyv.php
index 77759a17..b369096c 100644
--- a/languages/messages/MessagesTyv.php
+++ b/languages/messages/MessagesTyv.php
@@ -49,6 +49,20 @@ $namespaceAliases = array(
);
$specialPageAliases = array(
+ 'Activeusers' => array( 'Идекпейжилер' ),
+ 'Allmessages' => array( 'Шупту_медеглелдер' ),
+ 'AllMyUploads' => array( 'Шупту_файлдарым' ),
+ 'Allpages' => array( 'Шупту_арыннар' ),
+ 'Badtitle' => array( 'Хоржок_ат-сып' ),
+ 'Blankpage' => array( 'Куруг_арын' ),
+ 'Block' => array( 'Дуглаар' ),
+ 'Booksources' => array( 'Ном_үндезини' ),
+ 'BrokenRedirects' => array( 'Үзүлген_көжүрүглер' ),
+ 'Categories' => array( 'Аңгылалдар' ),
+ 'ChangeEmail' => array( 'Э-шуудаң_солуур' ),
+ 'ChangePassword' => array( 'Уруң_солуур' ),
+ 'ComparePages' => array( 'Арыннар_деңнээр' ),
+ 'Confirmemail' => array( 'Э-шуудаң_бадыткаар' ),
'MyLanguage' => array( 'Дылым' ),
);
diff --git a/languages/messages/MessagesUk.php b/languages/messages/MessagesUk.php
index 861b9368..2caaefaa 100644
--- a/languages/messages/MessagesUk.php
+++ b/languages/messages/MessagesUk.php
@@ -116,6 +116,7 @@ $bookstoreList = array(
$specialPageAliases = array(
'Activeusers' => array( 'Активні_дописувачі' ),
'Allmessages' => array( 'Системні_повідомлення' ),
+ 'AllMyUploads' => array( 'Усі_мої_файли' ),
'Allpages' => array( 'Усі_сторінки' ),
'Ancientpages' => array( 'Давні_сторінки' ),
'Badtitle' => array( 'Помилковий_заголовок' ),
@@ -142,6 +143,7 @@ $specialPageAliases = array(
'Filepath' => array( 'Шлях_до_файлу' ),
'Import' => array( 'Імпорт' ),
'Invalidateemail' => array( 'Неперевірена_email-адреса' ),
+ 'JavaScriptTest' => array( 'JavaScript_тест' ),
'BlockList' => array( 'Список_блокувань', 'Блокування', 'Блокування_IP-адрес' ),
'LinkSearch' => array( 'Пошук_посилань' ),
'Listadmins' => array( 'Список_адміністраторів' ),
@@ -149,6 +151,7 @@ $specialPageAliases = array(
'Listfiles' => array( 'Список_файлів' ),
'Listgrouprights' => array( 'Список_прав_груп', 'Права_груп_користувачів' ),
'Listredirects' => array( 'Список_перенаправлень' ),
+ 'ListDuplicatedFiles' => array( 'Список_дубльованих_файлів' ),
'Listusers' => array( 'Список_користувачів' ),
'Lockdb' => array( 'Заблокувати_базу_даних' ),
'Log' => array( 'Журнали' ),
@@ -182,6 +185,7 @@ $specialPageAliases = array(
'Randomredirect' => array( 'Випадкове_перенаправлення' ),
'Recentchanges' => array( 'Нові_редагування' ),
'Recentchangeslinked' => array( 'Пов\'язані_редагування' ),
+ 'Redirect' => array( 'Перенаправлення' ),
'Revisiondelete' => array( 'Вилучити_редагування' ),
'Search' => array( 'Пошук' ),
'Shortpages' => array( 'Короткі_сторінки' ),
@@ -237,19 +241,18 @@ $magicWords = array(
'localmonthname' => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА', 'LOCALMONTHNAME' ),
'localmonthnamegen' => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ_РОД', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_РОД', 'LOCALMONTHNAMEGEN' ),
'localmonthabbrev' => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_МІСЯЦЯ_АБР', 'НАЗВАНИЕ_МЕСТНОГО_МЕСЯЦА_АБР', 'LOCALMONTHABBREV' ),
- 'localday' => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
- 'localday2' => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ_2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
- 'localdayname' => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_ДНЯ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
- 'localyear' => array( '1', 'ЛОКАЛЬНИЙ_РІК', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
- 'localtime' => array( '1', 'ЛОКАЛЬНИЙ_ЧАС', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
- 'localhour' => array( '1', 'ЛОКАЛЬНА_ГОДИНА', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
+ 'localday' => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ', 'МІСЦЕВИЙ_ДЕНЬ', 'МЕСТНЫЙ_ДЕНЬ', 'LOCALDAY' ),
+ 'localday2' => array( '1', 'ЛОКАЛЬНИЙ_ДЕНЬ_2', 'МІСЦЕВИЙ_ДЕНЬ_2', 'МЕСТНЫЙ_ДЕНЬ_2', 'LOCALDAY2' ),
+ 'localdayname' => array( '1', 'НАЗВА_ЛОКАЛЬНОГО_ДНЯ', 'НАЗВА_МІСЦЕВОГО_ДНЯ', 'НАЗВАНИЕ_МЕСТНОГО_ДНЯ', 'LOCALDAYNAME' ),
+ 'localyear' => array( '1', 'ЛОКАЛЬНИЙ_РІК', 'МІСЦЕВИЙ_РІК', 'МЕСТНЫЙ_ГОД', 'LOCALYEAR' ),
+ 'localtime' => array( '1', 'ЛОКАЛЬНИЙ_ЧАС', 'МІСЦЕВИЙ_ЧАС', 'МЕСТНОЕ_ВРЕМЯ', 'LOCALTIME' ),
+ 'localhour' => array( '1', 'ЛОКАЛЬНА_ГОДИНА', 'МІСЦЕВА_ГОДИНА', 'МЕСТНЫЙ_ЧАС', 'LOCALHOUR' ),
'numberofpages' => array( '1', 'КІЛЬКІСТЬ_СТОРІНОК', 'КОЛИЧЕСТВО_СТРАНИЦ', 'NUMBEROFPAGES' ),
'numberofarticles' => array( '1', 'КІЛЬКІСТЬ_СТАТЕЙ', 'КОЛИЧЕСТВО_СТАТЕЙ', 'NUMBEROFARTICLES' ),
'numberoffiles' => array( '1', 'КІЛЬКІСТЬ_ФАЙЛІВ', 'КОЛИЧЕСТВО_ФАЙЛОВ', 'NUMBEROFFILES' ),
'numberofusers' => array( '1', 'КІЛЬКІСТЬ_КОРИСТУВАЧІВ', 'КОЛИЧЕСТВО_УЧАСТНИКОВ', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'КІЛЬКІСТЬ_АКТИВНИХ_КОРИСТУВАЧІВ', 'КОЛИЧЕСТВО_АКТИВНЫХ_УЧАСТНИКОВ', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'КІЛЬКІСТЬ_РЕДАГУВАНЬ', 'КОЛИЧЕСТВО_ПРАВОК', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'КІЛЬКІСТЬ_ПЕРЕГЛЯДІВ', 'КОЛИЧЕСТВО_ПРОСМОТРОВ', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'НАЗВА_СТОРІНКИ', 'НАЗВАНИЕ_СТРАНИЦЫ', 'PAGENAME' ),
'pagenamee' => array( '1', 'НАЗВА_СТОРІНКИ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_2', 'PAGENAMEE' ),
'namespace' => array( '1', 'ПРОСТІР_НАЗВ', 'ПРОСТРАНСТВО_ИМЁН', 'NAMESPACE' ),
@@ -266,8 +269,8 @@ $magicWords = array(
'basepagenamee' => array( '1', 'ОСНОВА_НАЗВИ_ПІДСТОРІНКИ_2', 'ОСНОВА_НАЗВАНИЯ_СТРАНИЦЫ_2', 'BASEPAGENAMEE' ),
'talkpagename' => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ', 'TALKPAGENAME' ),
'talkpagenamee' => array( '1', 'НАЗВА_СТОРІНКИ_ОБГОВОРЕННЯ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_ОБСУЖДЕНИЯ_2', 'TALKPAGENAMEE' ),
- 'subjectpagename' => array( '1', 'НАЗВА_СТАТТІ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
- 'subjectpagenamee' => array( '1', 'НАЗВА_СТАТТІ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+ 'subjectpagename' => array( '1', 'НАЗВА_СТАТТІ', 'НАЗВА_СТОРІНКИ_СТАТТІ', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+ 'subjectpagenamee' => array( '1', 'НАЗВА_СТАТТІ_2', 'НАЗВА_СТОРІНКИ_СТАТТІ_2', 'НАЗВАНИЕ_СТРАНИЦЫ_СТАТЬИ_2', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
'msg' => array( '0', 'ПОВІД:', 'ПОВІДОМЛЕННЯ:', 'СООБЩЕНИЕ:', 'СООБЩ:', 'MSG:' ),
'subst' => array( '0', 'ПІДСТ:', 'ПІДСТАНОВКА:', 'ПОДСТАНОВКА:', 'ПОДСТ:', 'SUBST:' ),
'safesubst' => array( '0', 'БЕЗПЕЧНА_ПІДСТАНОВКА:', 'ЗАЩПОДСТ:', 'SAFESUBST:' ),
@@ -281,9 +284,9 @@ $magicWords = array(
'img_center' => array( '1', 'центр', 'center', 'centre' ),
'img_framed' => array( '1', 'обрамити', 'рамка', 'обрамить', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'безрамки', 'frameless' ),
- 'img_page' => array( '1', 'сторінка=$1', 'сторінка_$1', 'страница=$1', 'страница_$1', 'страница $1', 'page=$1', 'page $1' ),
- 'img_upright' => array( '1', 'зверхуправоруч', 'зверхуправоруч=$1', 'зверхуправоруч_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа_$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
- 'img_border' => array( '1', 'межа', 'граница', 'border' ),
+ 'img_page' => array( '1', 'сторінка=$1', 'сторінка_$1', 'страница=$1', 'страница $1', 'page=$1', 'page $1' ),
+ 'img_upright' => array( '1', 'зверхуправоруч', 'зверхуправоруч=$1', 'зверхуправоруч_$1', 'сверхусправа', 'сверхусправа=$1', 'сверхусправа $1', 'upright', 'upright=$1', 'upright $1' ),
+ 'img_border' => array( '1', 'межа', 'границя', 'граница', 'border' ),
'img_baseline' => array( '1', 'основа', 'основание', 'baseline' ),
'img_sub' => array( '1', 'під', 'под', 'sub' ),
'img_super' => array( '1', 'над', 'super', 'sup' ),
@@ -300,6 +303,8 @@ $magicWords = array(
'nse' => array( '0', 'ПН_2:', 'ПИК:', 'NSE:' ),
'localurl' => array( '0', 'ЛОКАЛЬНА_АДРЕСА:', 'ЛОКАЛЬНЫЙ_АДРЕС:', 'LOCALURL:' ),
'localurle' => array( '0', 'ЛОКАЛЬНА_АДРЕСА_2:', 'ЛОКАЛЬНЫЙ_АДРЕС_2:', 'LOCALURLE:' ),
+ 'articlepath' => array( '0', 'ШЛЯХ_ДО_СТАТТІ', 'ПУТЬ_К_СТАТЬЕ', 'ARTICLEPATH' ),
+ 'pageid' => array( '0', 'ІДЕНТИФІКАТОР_СТОРІНКИ', 'ИДЕНТИФИКАТОР_СТРАНИЦЫ', 'PAGEID' ),
'server' => array( '0', 'СЕРВЕР', 'SERVER' ),
'servername' => array( '0', 'НАЗВА_СЕРВЕРА', 'НАЗВАНИЕ_СЕРВЕРА', 'SERVERNAME' ),
'scriptpath' => array( '0', 'ШЛЯХ_ДО_СКРИПТУ', 'ПУТЬ_К_СКРИПТУ', 'SCRIPTPATH' ),
@@ -323,10 +328,10 @@ $magicWords = array(
'plural' => array( '0', 'МНОЖИНА:', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
'fullurl' => array( '0', 'ПОВНА_АДРЕСА:', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
'fullurle' => array( '0', 'ПОВНА_АДРЕСА_2:', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ),
- 'lcfirst' => array( '0', 'НР_ПЕРША:', 'ПЕРША_БУКВА_МАЛА:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
- 'ucfirst' => array( '0', 'ВР_ПЕРША:', 'ПЕРША_БУКВА_ВЕЛИКА:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
- 'lc' => array( '0', 'НР:', 'НИЖНІЙ_РЕГІСТР:', 'МАЛИМИ_БУКВАМИ:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
- 'uc' => array( '0', 'ВР:', 'ВЕРХНІЙ_РЕГІСТР:', 'ВЕЛИКИМИ_БУКВАМИ:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
+ 'lcfirst' => array( '0', 'НР_ПЕРША:', 'ПЕРША_БУКВА_МАЛА:', 'ПЕРША_ЛІТЕРА_МАЛА:', 'МАЛА_ПЕРША_ЛІТЕРА:', 'ПЕРВАЯ_БУКВА_МАЛЕНЬКАЯ:', 'LCFIRST:' ),
+ 'ucfirst' => array( '0', 'ВР_ПЕРША:', 'ПЕРША_БУКВА_ВЕЛИКА:', 'ПЕША_ДІТЕРА_ВЕЛИКА:', 'ВЕЛИКА_ПЕРША_ЛІТЕРА:', 'ПЕРВАЯ_БУКВА_БОЛЬШАЯ:', 'UCFIRST:' ),
+ 'lc' => array( '0', 'НР:', 'НИЖНІЙ_РЕГІСТР:', 'МАЛИМИ_БУКВАМИ:', 'МАЛИМИ_ЛІТЕРАМИ:', 'МАЛЕНЬКИМИ_БУКВАМИ:', 'LC:' ),
+ 'uc' => array( '0', 'ВР:', 'ВЕРХНІЙ_РЕГІСТР:', 'ВЕЛИКИМИ_БУКВАМИ:', 'ВЕЛИКИМИ_ЛІТЕРАМИ:', 'БОЛЬШИМИ_БУКВАМИ:', 'UC:' ),
'raw' => array( '0', 'НЕОБРОБ:', 'НЕОБРАБ:', 'RAW:' ),
'displaytitle' => array( '1', 'ПОКАЗАТИ_ЗАГОЛОВОК', 'ПОКАЗАТЬ_ЗАГОЛОВОК', 'DISPLAYTITLE' ),
'rawsuffix' => array( '1', 'Н', 'R' ),
@@ -346,11 +351,11 @@ $magicWords = array(
'padleft' => array( '0', 'ЗАПОВНИТИ_ЛІВОРУЧ', 'ЗАПОЛНИТЬ_СЛЕВА', 'PADLEFT' ),
'padright' => array( '0', 'ЗАПОВНИТИ_ПРАВОРУЧ', 'ЗАПОЛНИТЬ_СПРАВА', 'PADRIGHT' ),
'special' => array( '0', 'спеціальна', 'служебная', 'special' ),
- 'defaultsort' => array( '1', 'СТАНДАРТНЕ_СОРТУВАННЯ:', 'СОРТУВАННЯ:', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+ 'defaultsort' => array( '1', 'СТАНДАРТНЕ_СОРТУВАННЯ:_КЛЮЧ_СОРТУВАННЯ', 'СОРТИРОВКА_ПО_УМОЛЧАНИЮ', 'КЛЮЧ_СОРТИРОВКИ', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'ШЛЯХ_ДО_ФАЙЛУ:', 'ПУТЬ_К_ФАЙЛУ:', 'FILEPATH:' ),
- 'tag' => array( '0', 'тег', 'мітка', 'метка', 'тэг', 'tag' ),
- 'hiddencat' => array( '1', '__ПРИХОВ_КАТ__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
- 'pagesincategory' => array( '1', 'СТОР_В_КАТ', 'СТОР_У_КАТ', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+ 'tag' => array( '0', 'тег', 'мітка', 'теґ', 'метка', 'тэг', 'tag' ),
+ 'hiddencat' => array( '1', '__ПРИХОВ_КАТ__', '__ПРИХОВАНА_КАТЕГОРІЯ__', '__СКРЫТАЯ_КАТЕГОРИЯ__', '__HIDDENCAT__' ),
+ 'pagesincategory' => array( '1', 'СТОР_В_КАТ', 'СТОР_У_КАТ', 'СТОРІНОК_У_КАТЕГОРІЇ', 'СТРАНИЦ_В_КАТЕГОРИИ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
'pagesize' => array( '1', 'РОЗМІР', 'РОЗМІР_СТОРІНКИ', 'РАЗМЕР_СТРАНИЦЫ', 'PAGESIZE' ),
'index' => array( '1', '__ІНДЕКС__', '__ИНДЕКС__', '__INDEX__' ),
'noindex' => array( '1', '__БЕЗ_ІНДЕКСУ__', '__БЕЗ_ИНДЕКСА__', '__NOINDEX__' ),
@@ -361,6 +366,9 @@ $magicWords = array(
'url_path' => array( '0', 'ШЛЯХ', 'ПУТЬ', 'PATH' ),
'url_wiki' => array( '0', 'ВІКІ', 'ВИКИ', 'WIKI' ),
'url_query' => array( '0', 'ЗАПИТ', 'ЗАПРОС', 'QUERY' ),
+ 'pagesincategory_all' => array( '0', 'усе', 'все', 'all' ),
+ 'pagesincategory_pages' => array( '0', 'сторінки', 'страницы', 'pages' ),
+ 'pagesincategory_subcats' => array( '0', 'підкатегорії', 'подкатегории', 'subcats' ),
);
$linkTrail = '/^([a-zабвгґдеєжзиіїйклмнопрстуфхцчшщьєюяёъы“»]+)(.*)$/sDu';
diff --git a/languages/messages/MessagesUr.php b/languages/messages/MessagesUr.php
index 7ee1fe8b..81a6d2f0 100644
--- a/languages/messages/MessagesUr.php
+++ b/languages/messages/MessagesUr.php
@@ -31,7 +31,6 @@ $rtl = true;
$namespaceNames = array(
NS_MEDIA => 'وسیط',
NS_SPECIAL => 'خاص',
- NS_MAIN => '',
NS_TALK => 'تبادلۂ_خیال',
NS_USER => 'صارف',
NS_USER_TALK => 'تبادلۂ_خیال_صارف',
@@ -63,7 +62,7 @@ $specialPageAliases = array(
'Ancientpages' => array( 'قدیم_صفحات' ),
'Badtitle' => array( 'خراب_عنوان' ),
'Blankpage' => array( 'خالی_صفحہ' ),
- 'Block' => array( 'پابندی', 'دستور_شبکی_پابندی', 'پابندی_بر_صارف' ),
+ 'Block' => array( 'پابندی', 'آئی_پی_پتہ_پابندی،_پابندی_بر_صارف' ),
'Booksources' => array( 'کتابی_وسائل' ),
'BrokenRedirects' => array( 'شکستہ_رجوع_مکررات' ),
'Categories' => array( 'زمرہ_جات' ),
@@ -119,6 +118,8 @@ $specialPageAliases = array(
'Shortpages' => array( 'مختصر_صفحات' ),
'Specialpages' => array( 'خصوصی_صفحات' ),
'Statistics' => array( 'شماریات' ),
+ 'Tags' => array( 'ٹیگز' ),
+ 'Unblock' => array( 'پابندی_ختم' ),
'Uncategorizedcategories' => array( 'غیر_زمرہ_بند_زمرہ_جات' ),
'Uncategorizedimages' => array( 'غیر_زمرہ_بند_املاف', 'غیر_زمرہ_بند_تصاویر' ),
'Uncategorizedpages' => array( 'غیر_زمرہ_بند_صفحات' ),
@@ -133,10 +134,10 @@ $specialPageAliases = array(
'Userlogout' => array( 'خارج_نوشتگی' ),
'Userrights' => array( 'صارفی_اختیارات' ),
'Version' => array( 'اخراجہ' ),
- 'Wantedcategories' => array( 'مطلوب_زمرہ_جات' ),
- 'Wantedfiles' => array( 'مطلوب_املاف' ),
- 'Wantedpages' => array( 'مطلوب_صفحات', 'شکستہ_روابط' ),
- 'Wantedtemplates' => array( 'مطلوب_سانچے' ),
+ 'Wantedcategories' => array( 'مطلوبہ_زمرہ_جات' ),
+ 'Wantedfiles' => array( 'مطلوبہ_املاف' ),
+ 'Wantedpages' => array( 'مطلوبہ_صفحات', 'شکستہ_روابط' ),
+ 'Wantedtemplates' => array( 'مطلوبہ_سانچے' ),
'Watchlist' => array( 'زیر_نظر_فہرست' ),
'Whatlinkshere' => array( 'یہاں_کس_کا_رابطہ' ),
'Withoutinterwiki' => array( 'بدون_بین_الویکی' ),
diff --git a/languages/messages/MessagesUz.php b/languages/messages/MessagesUz.php
index 1c474cc5..33d36bcd 100644
--- a/languages/messages/MessagesUz.php
+++ b/languages/messages/MessagesUz.php
@@ -88,7 +88,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'FOYDALANUVCHISONI', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'FAOLFOYDALANUVCHISONI', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'OZGARISHSONI', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'KORISHSONI', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'SAHIFANOMI', 'PAGENAME' ),
'namespace' => array( '1', 'NOMFAZO', 'NAMESPACE' ),
'gender' => array( '0', 'JINS', 'GENDER:' ),
diff --git a/languages/messages/MessagesVi.php b/languages/messages/MessagesVi.php
index c691b0e1..2724a60a 100644
--- a/languages/messages/MessagesVi.php
+++ b/languages/messages/MessagesVi.php
@@ -62,6 +62,7 @@ $specialPageAliases = array(
'Allmessages' => array( 'Mọi_thông_điệp', 'Mọi_thông_báo' ),
'AllMyUploads' => array( 'Mọi_tập_tin_của_tôi', 'Mọi_tập_tin_tôi_tải_lên' ),
'Allpages' => array( 'Mọi_bài' ),
+ 'ApiHelp' => array( 'Trợ_giúp_API' ),
'Ancientpages' => array( 'Trang_cũ' ),
'Badtitle' => array( 'Tựa_đề_hỏng' ),
'Blankpage' => array( 'Trang_trắng' ),
@@ -77,6 +78,7 @@ $specialPageAliases = array(
'CreateAccount' => array( 'Mở_tài_khoản', 'Đăng_ký', 'Đăng_kí' ),
'Deadendpages' => array( 'Trang_đường_cùng' ),
'DeletedContributions' => array( 'Đóng_góp_bị_xóa', 'Đóng_góp_bị_xoá' ),
+ 'Diff' => array( 'Khác', 'Khác_biệt' ),
'DoubleRedirects' => array( 'Đổi_hướng_kép' ),
'EditWatchlist' => array( 'Sửa_danh_sách_theo_dõi' ),
'Emailuser' => array( 'Gửi_thư', 'Gửi_thư_điện_tử' ),
@@ -95,11 +97,13 @@ $specialPageAliases = array(
'Listfiles' => array( 'Danh_sách_tập_tin', 'Danh_sách_hình' ),
'Listgrouprights' => array( 'Quyền_nhóm_người_dùng' ),
'Listredirects' => array( 'Trang_đổi_hướng' ),
+ 'ListDuplicatedFiles' => array( 'Tập_tin_trùng_lắp' ),
'Listusers' => array( 'Danh_sách_thành_viên' ),
'Lockdb' => array( 'Khóa_CSDL', 'Khóa_cơ_sở_dữ_liệu', 'Khoá_CSDL', 'Khoá_cơ_sở_dữ_liệu' ),
'Log' => array( 'Nhật_trình' ),
'Lonelypages' => array( 'Trang_mồ_côi' ),
'Longpages' => array( 'Trang_dài' ),
+ 'MediaStatistics' => array( 'Thống_kê_phương_tiện' ),
'MergeHistory' => array( 'Trộn_lịch_sử' ),
'MIMEsearch' => array( 'Tìm_MIME' ),
'Mostcategories' => array( 'Thể_loại_lớn_nhất' ),
@@ -118,6 +122,7 @@ $specialPageAliases = array(
'Newimages' => array( 'Tập_tin_mới', 'Hình_mới' ),
'Newpages' => array( 'Trang_mới' ),
'PagesWithProp' => array( 'Trang_theo_thuộc_tính' ),
+ 'PageLanguage' => array( 'Ngôn_ngữ_trang' ),
'PasswordReset' => array( 'Tái_tạo_mật_khẩu', 'Đặt_lại_mật_khẩu' ),
'PermanentLink' => array( 'Liên_kết_thường_trực' ),
'Popularpages' => array( 'Trang_phổ_biến' ),
@@ -133,11 +138,13 @@ $specialPageAliases = array(
'Redirect' => array( 'Đổi_hướng' ),
'ResetTokens' => array( 'Đặt_lại_dấu_hiệu' ),
'Revisiondelete' => array( 'Xóa_phiên_bản', 'Xoá_phiên_bản' ),
+ 'RunJobs' => array( 'Chạy_việc' ),
'Search' => array( 'Tìm_kiếm' ),
'Shortpages' => array( 'Trang_ngắn' ),
'Specialpages' => array( 'Trang_đặc_biệt' ),
'Statistics' => array( 'Thống_kê' ),
'Tags' => array( 'Thẻ' ),
+ 'TrackingCategories' => array( 'Thể_loại_theo_dõi' ),
'Unblock' => array( 'Bỏ_cấm' ),
'Uncategorizedcategories' => array( 'Thể_loại_chưa_phân_loại' ),
'Uncategorizedimages' => array( 'Tập_tin_chưa_phân_loại', 'Hình_chưa_phân_loại' ),
@@ -198,7 +205,6 @@ $magicWords = array(
'numberofusers' => array( '1', 'SỐ_THÀNH_VIÊN', 'SỐTHÀNHVIÊN', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', 'SỐ_THÀNH_VIÊN_TÍCH_CỰC', 'SỐTHÀNHVIÊNTÍCHCỰC', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'SỐ_SỬA_ĐỔI', 'SỐSỬAĐỔI', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', 'SỐ_LẦN_XEM', 'SỐLẦNXEM', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'TÊN_TRANG', 'TÊNTRANG', 'PAGENAME' ),
'pagenamee' => array( '1', 'TÊN_TRANG_2', 'TÊNTRANG2', 'PAGENAMEE' ),
'namespace' => array( '1', 'KHÔNG_GIAN_TÊN', 'KHÔNGGIANTÊN', 'NAMESPACE' ),
@@ -212,6 +218,7 @@ $magicWords = array(
'subjectpagename' => array( '1', 'TÊN_TRANG_NỘI_DUNG', 'TÊNTRANGNỘIDUNG', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
'msg' => array( '0', 'NHẮN:', 'MSG:' ),
'subst' => array( '0', 'THẾ:', 'SUBST:' ),
+ 'safesubst' => array( '0', 'THẾ_AN_TOÀN:', 'SAFESUBST:' ),
'msgnw' => array( '0', 'NHẮN_MỚI:', 'NHẮNMỚI:', 'MSGNW:' ),
'img_thumbnail' => array( '1', 'nhỏ', 'thumbnail', 'thumb' ),
'img_manualthumb' => array( '1', 'nhỏ=$1', 'thumbnail=$1', 'thumb=$1' ),
@@ -220,6 +227,8 @@ $magicWords = array(
'img_none' => array( '1', 'không', 'none' ),
'img_center' => array( '1', 'giữa', 'center', 'centre' ),
'img_framed' => array( '1', 'khung', 'framed', 'enframed', 'frame' ),
+ 'img_frameless' => array( '1', 'không_khung', 'frameless' ),
+ 'img_lang' => array( '1', 'tiếng=$1', 'ngôn_ngữ=$1', 'lang=$1' ),
'img_page' => array( '1', 'trang=$1', 'trang_$1', 'page=$1', 'page $1' ),
'img_upright' => array( '1', 'đứng', 'đứng=$1', 'đứng_$1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', 'viền', 'border' ),
@@ -228,9 +237,11 @@ $magicWords = array(
'img_super' => array( '1', 'chỉ-số-trên', 'super', 'sup' ),
'img_top' => array( '1', 'trên', 'top' ),
'img_text_top' => array( '1', 'trên-chữ', 'text-top' ),
+ 'img_middle' => array( '1', 'nửa-chiều-cao', 'middle' ),
'img_bottom' => array( '1', 'dưới', 'bottom' ),
'img_text_bottom' => array( '1', 'dưới-chữ', 'text-bottom' ),
'img_link' => array( '1', 'liên_kết=$1', 'link=$1' ),
+ 'img_alt' => array( '1', 'thế=$1', 'thay_thế=$1', 'alt=$1' ),
'img_class' => array( '1', 'lớp=$1', 'class=$1' ),
'int' => array( '0', 'NỘI:', 'INT:' ),
'sitename' => array( '1', 'TÊN_MẠNG', 'TÊNMẠNG', 'SITENAME' ),
@@ -256,6 +267,7 @@ $magicWords = array(
'revisionyear' => array( '1', 'NĂM_BẢN', 'NĂMBẢN', 'REVISIONYEAR' ),
'revisiontimestamp' => array( '1', 'MỐC_THỜI_GIAN_BẢN', 'MỐCTHỜIGIANBẢN', 'DẤU_THỜI_GIAN_BẢN', 'DẤUTHỜIGIANBẢN', 'REVISIONTIMESTAMP' ),
'revisionuser' => array( '1', 'NGƯỜI_DÙNG_BẢN', 'NGƯỜIDÙNGBẢN', 'REVISIONUSER' ),
+ 'revisionsize' => array( '1', 'CỠ_PHIÊN_BẢN', 'CỠPHIÊNBẢN', 'REVISIONSIZE' ),
'plural' => array( '0', 'SỐ_NHIỀU:', 'SỐNHIỀU:', 'PLURAL:' ),
'fullurl' => array( '0', 'URL_ĐỦ:', 'URLĐỦ:', 'FULLURL:' ),
'canonicalurl' => array( '0', 'URL_CHUẨN:', 'URLCHUẨN:', 'CANONICALURL:' ),
@@ -271,11 +283,13 @@ $magicWords = array(
'anchorencode' => array( '0', 'MÃ_HÓA_NEO', 'MÃHÓANEO', 'MÃ_HOÁ_NEO', 'MÃHOÁNEO', 'ANCHORENCODE' ),
'currenttimestamp' => array( '1', 'MỐC_THỜI_GIAN_NÀY', 'MỐCTHỜIGIANNÀY', 'DẤU_THỜI_GIAN_NÀY', 'DẤUTHỜIGIANNÀY', 'CURRENTTIMESTAMP' ),
'localtimestamp' => array( '1', 'MỐC_THỜI_GIAN_ĐỊA_PHƯƠNG', 'MỐCTHỜIGIANĐỊAPHƯƠNG', 'DẤU_THỜI_GIAN_ĐỊA_PHƯƠNG', 'DẤUTHỜIGIANĐỊAPHƯƠNG', 'LOCALTIMESTAMP' ),
+ 'directionmark' => array( '1', 'DẤU_HƯỚNG_VIẾT', 'DẤUHƯỚNGVIẾT', 'DIRECTIONMARK', 'DIRMARK' ),
'language' => array( '0', '#NGÔN_NGỮ:', '#NGÔNNGỮ:', '#LANGUAGE:' ),
'contentlanguage' => array( '1', 'NGÔN_NGỮ_NỘI_DUNG', 'NGÔNNGỮNỘIDUNG', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
'pagesinnamespace' => array( '1', 'CỠ_KHÔNG_GIAN_TÊN:', 'CỠKHÔNGGIANTÊN:', 'CỠ_KGT:', 'CỠKGT:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
'numberofadmins' => array( '1', 'SỐ_BẢO_QUẢN_VIÊN', 'SỐBẢOQUẢNVIÊN', 'SỐ_QUẢN_LÝ', 'SỐQUẢNLÝ', 'SỐ_QUẢN_LÍ', 'SỐQUẢNLÍ', 'NUMBEROFADMINS' ),
'formatnum' => array( '0', 'PHÂN_CHIA_SỐ', 'PHÂNCHIASỐ', 'FORMATNUM' ),
+ 'special' => array( '0', 'đặc_biệt', 'special' ),
'defaultsort' => array( '1', 'XẾP_MẶC_ĐỊNH:', 'XẾPMẶCĐỊNH:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'ĐƯỜNG_DẪN_TẬP_TIN', 'ĐƯỜNGDẪNTẬPTIN', 'FILEPATH:' ),
'tag' => array( '0', 'thẻ', 'tag' ),
@@ -287,6 +301,8 @@ $magicWords = array(
'numberingroup' => array( '1', 'CỠ_NHÓM', 'CỠNHÓM', 'NUMBERINGROUP', 'NUMINGROUP' ),
'staticredirect' => array( '1', '__ĐỔI_HƯỚNG_NHẤT_ĐỊNH__', '__ĐỔIHƯỚNGNHẤTĐỊNH__', '__STATICREDIRECT__' ),
'protectionlevel' => array( '1', 'MỨC_KHÓA', 'MỨCKHÓA', 'MỨC_KHOÁ', 'MỨCKHOÁ', 'PROTECTIONLEVEL' ),
+ 'cascadingsources' => array( '1', 'NGUỒN_THEO_TẦNG', 'NGUỒNTHEOTẦNG', 'CASCADINGSOURCES' ),
+ 'formatdate' => array( '0', 'định_dạng_ngày', 'địnhdạngngày', 'formatdate', 'dateformat' ),
'url_path' => array( '0', 'ĐƯỜNG_DẪN', 'ĐƯỜNGDẪN', 'PATH' ),
'url_query' => array( '0', 'TRUY_VẤN', 'TRUYVẤN', 'QUERY' ),
'defaultsort_noerror' => array( '0', 'không_lỗi', 'noerror' ),
diff --git a/languages/messages/MessagesYi.php b/languages/messages/MessagesYi.php
index 9b6dad40..ed61df43 100644
--- a/languages/messages/MessagesYi.php
+++ b/languages/messages/MessagesYi.php
@@ -94,6 +94,7 @@ $specialPageAliases = array(
'Log' => array( 'לאגביכער' ),
'Lonelypages' => array( 'פאר\'יתומ\'טע_בלעטער' ),
'Longpages' => array( 'לאנגע_בלעטער' ),
+ 'MergeHistory' => array( 'צונויפמישן_היסטאריע' ),
'MIMEsearch' => array( 'זוכן_MIME' ),
'Mostcategories' => array( 'מערסטע_קאטעגאריעס' ),
'Mostimages' => array( 'מערסטע_פארבונדענע_בילדער' ),
@@ -117,6 +118,7 @@ $specialPageAliases = array(
'Randompage' => array( 'צופעליג', 'צופעליגער_בלאט' ),
'Randomredirect' => array( 'צופעליק_ווײַטערפֿירן' ),
'Recentchanges' => array( 'לעצטע_ענדערונגען' ),
+ 'Redirect' => array( 'ווײַטערפירונג' ),
'Revisiondelete' => array( 'אויסמעקן_ווערסיעס' ),
'Search' => array( 'זוכן' ),
'Shortpages' => array( 'קורצע_בלעטער' ),
@@ -152,6 +154,7 @@ $magicWords = array(
'nogallery' => array( '0', '__קיין_גאלעריע__', '__ללא_גלריה__', '__NOGALLERY__' ),
'toc' => array( '0', '__אינהאלט__', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
'noeditsection' => array( '0', '__נישט_רעדאקטירן__', '__ללא_עריכה__', '__NOEDITSECTION__' ),
+ 'currentmonth' => array( '1', 'לויפיקער_מאנאט', 'חודש נוכחי', 'חודש נוכחי 2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
'currentday' => array( '1', 'לויפיקער_טאג', 'יום נוכחי', 'CURRENTDAY' ),
'currentyear' => array( '1', 'לויפֿיקע_יאָר', 'שנה נוכחית', 'CURRENTYEAR' ),
'currenttime' => array( '1', 'לויפֿיקע_צײַט', 'שעה נוכחית', 'CURRENTTIME' ),
@@ -159,6 +162,7 @@ $magicWords = array(
'numberofarticles' => array( '1', 'צאל_ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ),
'numberoffiles' => array( '1', 'צאל_טעקעס', 'מספר קבצים', 'NUMBEROFFILES' ),
'numberofusers' => array( '1', 'צאל_באניצער', 'מספר משתמשים', 'NUMBEROFUSERS' ),
+ 'numberofactiveusers' => array( '1', 'צאל_טעטיקע_באניצער', 'מספר משתמשים פעילים', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'צאל_רעדאקטירונגען', 'מספר עריכות', 'NUMBEROFEDITS' ),
'pagename' => array( '1', 'בלאטנאמען', 'שם הדף', 'PAGENAME' ),
'namespace' => array( '1', 'נאמענטייל', 'מרחב השם', 'NAMESPACE' ),
@@ -188,8 +192,11 @@ $magicWords = array(
'language' => array( '0', '#שפראך:', '#שפה:', '#LANGUAGE:' ),
'special' => array( '0', 'באזונדער', 'מיוחד', 'special' ),
'defaultsort' => array( '1', 'גרונטסארטיר:', 'מיון רגיל:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+ 'filepath' => array( '0', 'טעקעשטעג:', 'נתיב לקובץ:', 'FILEPATH:' ),
+ 'tag' => array( '0', 'טאג', 'תגית', 'tag' ),
'hiddencat' => array( '1', '__באהאלטענע_קאטעגאריע__', '__באהאלטענע_קאט__', '__קטגוריה_מוסתרת__', '__HIDDENCAT__' ),
'pagesize' => array( '1', 'בלאטגרייס', 'גודל דף', 'PAGESIZE' ),
+ 'url_path' => array( '0', 'שטעג', 'נתיב', 'PATH' ),
'url_wiki' => array( '0', 'וויקי', 'ויקי', 'WIKI' ),
'pagesincategory_pages' => array( '0', 'בלעטער', 'דפים', 'pages' ),
);
diff --git a/languages/messages/MessagesZh.php b/languages/messages/MessagesZh.php
index 9d0573d7..8ee87f07 100644
--- a/languages/messages/MessagesZh.php
+++ b/languages/messages/MessagesZh.php
@@ -98,76 +98,87 @@ $specialPageAliases = array(
'Allmessages' => array( '所有消息', '所有訊息', '所有讯息' ),
'Allpages' => array( '所有页面', '所有頁面' ),
'Ancientpages' => array( '最早页面', '最早頁面' ),
+ 'Badtitle' => array( '错误标题', '无效标题', '錯誤標題' ),
'Blankpage' => array( '空白页面', '空白頁面' ),
- 'Booksources' => array( '网络书源', '網絡書源', '網路書源', '网路书源' ),
- 'BrokenRedirects' => array( '损坏的重定向页', '損壞的重定向頁' ),
+ 'Booksources' => array( '网络书源', '網絡書源', '網路書源' ),
+ 'BrokenRedirects' => array( '受损重定向' ),
'Categories' => array( '页面分类', '頁面分類' ),
'ChangePassword' => array( '修改密码', '修改密碼' ),
'Confirmemail' => array( '确认电子邮件', '確認電子郵件' ),
- 'Contributions' => array( '用户贡献', '用戶貢獻' ),
- 'CreateAccount' => array( '创建账户', '創建帳戶' ),
- 'Deadendpages' => array( '断链页面', '斷鏈頁面', '斷連頁面', '断连页面' ),
- 'DeletedContributions' => array( '已删除的用户贡献', '已刪除的用戶貢獻' ),
- 'DoubleRedirects' => array( '双重重定向页面', '雙重重定向頁面' ),
- 'Emailuser' => array( '电邮用户', '電郵用戶' ),
- 'Export' => array( '导出页面', '導出頁面' ),
+ 'Contributions' => array( '用户贡献', '用戶貢獻', '使用者貢獻', '使用者贡献' ),
+ 'CreateAccount' => array( '创建账户', '創建賬戶', '建立帳戶', '建立帳號', '建立帐号' ),
+ 'Deadendpages' => array( '断链页面', '斷鏈頁面', '斷連頁面' ),
+ 'DeletedContributions' => array( '删除的贡献' ),
+ 'Diff' => array( '差异', '差異' ),
+ 'DoubleRedirects' => array( '双重重定向', '雙重重新導向' ),
+ 'Emailuser' => array( '电邮联系', '電郵聯絡' ),
+ 'Export' => array( '导出页面', '導出頁面', '匯出頁面', '汇出页面' ),
'Fewestrevisions' => array( '最少修订页面', '最少修訂頁面' ),
'Filepath' => array( '文件路径', '文件路徑', '檔案路徑', '档案路径' ),
- 'Import' => array( '导入页面', '導入頁面' ),
- 'Invalidateemail' => array( '不可识别的电邮地址', '不可識別的電郵地址' ),
+ 'Import' => array( '导入页面', '導入頁面', '匯入頁面', '汇入页面' ),
+ 'Invalidateemail' => array( '不可识别的电邮地址', '不可識別的電郵位址' ),
'BlockList' => array( '封禁列表' ),
+ 'LinkSearch' => array( '链接搜索', '鏈接搜索', '連結搜尋', '连结搜寻' ),
'Listadmins' => array( '管理员列表', '管理員列表' ),
- 'Listbots' => array( '机器人列表', '機器人列表' ),
+ 'Listbots' => array( '机器人列表', '機器人清單', '機械人清單' ),
'Listfiles' => array( '文件列表', '檔案列表', '档案列表' ),
'Listgrouprights' => array( '群组权限', '群組權限' ),
- 'Listusers' => array( '用户列表', '用戶列表' ),
+ 'Listredirects' => array( '重定向页列表', '重定向列表', '重新導向清單' ),
+ 'Listusers' => array( '用户列表', '用戶列表', '使用者清單' ),
'Log' => array( '日志', '日誌' ),
'Lonelypages' => array( '孤立页面', '孤立頁面' ),
'Longpages' => array( '长页面', '長頁面' ),
'MergeHistory' => array( '合并历史', '合併歷史' ),
'MIMEsearch' => array( 'MIME搜索', 'MIME搜尋', 'MIME搜寻' ),
'Mostcategories' => array( '最多分类页面', '最多分類頁面' ),
- 'Mostimages' => array( '最多链接文件', '最多鏈接文件', '最多連結檔案', '最多连结档案' ),
+ 'Mostimages' => array( '最多链接文件', '最多鏈接文件', '最多連結檔案' ),
'Mostlinked' => array( '最多链接页面', '最多連結頁面' ),
'Mostlinkedcategories' => array( '最多链接分类', '最多連結分類' ),
'Mostlinkedtemplates' => array( '最多链接模板', '最多連結模板' ),
'Mostrevisions' => array( '最多修订页面', '最多修訂頁面' ),
'Movepage' => array( '移动页面', '移動頁面' ),
'Mycontributions' => array( '我的贡献', '我的貢獻' ),
- 'Mypage' => array( '我的用户页', '我的用戶頁' ),
+ 'MyLanguage' => array( '我的语言', '我的語言' ),
+ 'Mypage' => array( '我的用户页', '我的用戶頁', '我的使用者頁面' ),
'Mytalk' => array( '我的讨论页', '我的討論頁' ),
- 'Newimages' => array( '新建文件', '新建檔案', '新建档案' ),
+ 'Newimages' => array( '新建文件', '新建檔案' ),
'Newpages' => array( '最新页面', '最新頁面' ),
+ 'PasswordReset' => array( '重置密码', '重設密碼' ),
'Popularpages' => array( '热点页面', '熱點頁面' ),
- 'Preferences' => array( '参数设置', '參數設置' ),
- 'Prefixindex' => array( '前缀索引', '前綴索引' ),
+ 'Preferences' => array( '参数设置', '偏好設定', '參數設置' ),
+ 'Prefixindex' => array( '前缀索引', '前綴索引', '字首索引' ),
'Protectedpages' => array( '已保护页面', '已保護頁面' ),
'Protectedtitles' => array( '已保护标题', '已保護標題' ),
'Randompage' => array( '随机页面', '隨機頁面' ),
- 'Recentchanges' => array( '最近更改' ),
- 'Recentchangeslinked' => array( '链出更改', '鏈出更改', '連出更改', '连出更改' ),
- 'Search' => array( '搜索', '搜尋', '搜寻' ),
+ 'Recentchanges' => array( '最近更改', '近期變動' ),
+ 'Recentchangeslinked' => array( '链出更改', '鏈出更改', '連出更改' ),
+ 'Redirect' => array( '重定向', '重新導向' ),
+ 'ResetTokens' => array( '重置密钥', '重設金鑰' ),
+ 'Revisiondelete' => array( '版本删除' ),
+ 'Search' => array( '搜索', '搜尋' ),
'Shortpages' => array( '短页面', '短頁面' ),
'Specialpages' => array( '特殊页面', '特殊頁面' ),
- 'Statistics' => array( '统计信息', '統計信息', '統計资讯', '统计资讯' ),
+ 'Statistics' => array( '统计', '统计信息', '統計', '統計資訊' ),
+ 'Tags' => array( '标签', '標籤' ),
+ 'TrackingCategories' => array( '追踪分类' ),
'Uncategorizedcategories' => array( '未归类分类', '未歸類分類' ),
- 'Uncategorizedimages' => array( '未归类文件', '未歸類文件', '未歸類檔案', '未归类档案' ),
+ 'Uncategorizedimages' => array( '未归类文件', '未歸類文件', '未歸類檔案' ),
'Uncategorizedpages' => array( '未归类页面', '未歸類頁面' ),
'Uncategorizedtemplates' => array( '未归类模板', '未歸類模板' ),
'Undelete' => array( '恢复被删页面', '恢復被刪頁面' ),
'Unusedcategories' => array( '未使用分类', '未使用分類' ),
- 'Unusedimages' => array( '未使用文件', '未使用檔案', '未使用档案' ),
+ 'Unusedimages' => array( '未使用文件', '未使用檔案' ),
'Unusedtemplates' => array( '未使用模板' ),
'Upload' => array( '上传文件', '上傳檔案', '上載檔案', '上载档案' ),
- 'Userlogin' => array( '用户登录', '用戶登錄', '用戶登入', '用户登入' ),
- 'Userlogout' => array( '用户登出', '用戶登出' ),
- 'Userrights' => array( '用户权限', '用戶權限' ),
- 'Version' => array( '版本信息', '版本資訊', '版本资讯' ),
- 'Wantedcategories' => array( '待撰分类', '待撰分類' ),
- 'Wantedfiles' => array( '需要的文件', '需要的檔案', '需要的档案' ),
- 'Wantedpages' => array( '待撰页面', '待撰頁面' ),
+ 'Userlogin' => array( '用户登录', '用戶登入', '使用者登入' ),
+ 'Userlogout' => array( '用户退出', '用戶登出', '使用者登出' ),
+ 'Userrights' => array( '用户权限', '用戶權限', '使用者權限' ),
+ 'Version' => array( '版本' ),
+ 'Wantedcategories' => array( '需要的分类' ),
+ 'Wantedfiles' => array( '需要的文件', '需要的檔案' ),
+ 'Wantedpages' => array( '需要的页面' ),
'Wantedtemplates' => array( '需要的模板' ),
- 'Watchlist' => array( '监视列表', '監視列表' ),
- 'Whatlinkshere' => array( '链入页面', '鏈入頁面', '連入頁面', '连入页面' ),
+ 'Watchlist' => array( '监视列表', '監視列表', '監視清单' ),
+ 'Whatlinkshere' => array( '链入页面', '鏈入頁面', '連入頁面' ),
);
diff --git a/languages/messages/MessagesZh_hans.php b/languages/messages/MessagesZh_hans.php
index e6501c69..84d43734 100644
--- a/languages/messages/MessagesZh_hans.php
+++ b/languages/messages/MessagesZh_hans.php
@@ -136,44 +136,48 @@ $specialPageAliases = array(
'Allmessages' => array( '所有信息' ),
'AllMyUploads' => array( '我上传的所有文件', '我的所有文件' ),
'Allpages' => array( '所有页面' ),
+ 'ApiHelp' => array( 'Api帮助' ),
'Ancientpages' => array( '最老页面' ),
'Badtitle' => array( '错误标题', '无效标题' ),
'Blankpage' => array( '空白页面' ),
- 'Block' => array( '封禁用户' ),
+ 'Block' => array( '封禁', '封禁IP', '封禁用户', '封' ),
'Booksources' => array( '网络书源' ),
'BrokenRedirects' => array( '受损重定向' ),
'Categories' => array( '页面分类' ),
- 'ChangeEmail' => array( '修改邮箱' ),
- 'ChangePassword' => array( '修改密码' ),
- 'ComparePages' => array( '对比页面', '比较页面' ),
+ 'ChangeEmail' => array( '修改邮箱地址' ),
+ 'ChangePassword' => array( '修改密码', '重置密码', '找回密码' ),
+ 'ComparePages' => array( '对比页面' ),
'Confirmemail' => array( '确认电子邮件' ),
- 'Contributions' => array( '用户贡献' ),
+ 'Contributions' => array( '用户贡献', '贡献' ),
'CreateAccount' => array( '创建账户' ),
'Deadendpages' => array( '断链页面' ),
'DeletedContributions' => array( '已删除的用户贡献' ),
+ 'Diff' => array( '编辑差异' ),
'DoubleRedirects' => array( '双重重定向', '两次重定向' ),
'EditWatchlist' => array( '编辑监视列表' ),
'Emailuser' => array( '电邮联系' ),
'ExpandTemplates' => array( '展开模板' ),
- 'Export' => array( '导出页面' ),
+ 'Export' => array( '导出页面', '导出' ),
'Fewestrevisions' => array( '版本最少页面', '最少修订页面' ),
'FileDuplicateSearch' => array( '搜索重复文件' ),
'Filepath' => array( '文件路径' ),
- 'Import' => array( '导入页面' ),
+ 'Import' => array( '导入页面', '导入' ),
'Invalidateemail' => array( '无效电邮地址' ),
'JavaScriptTest' => array( 'JavaScript测试' ),
- 'BlockList' => array( '封禁列表' ),
+ 'BlockList' => array( '封禁列表', 'IP封禁列表' ),
'LinkSearch' => array( '搜索网页链接' ),
'Listadmins' => array( '管理员列表' ),
'Listbots' => array( '机器人列表' ),
- 'Listfiles' => array( '文件列表' ),
+ 'Listfiles' => array( '文件列表', '图像列表' ),
'Listgrouprights' => array( '用户组权限' ),
'Listredirects' => array( '重定向页列表' ),
+ 'ListDuplicatedFiles' => array( '重复文件列表' ),
'Listusers' => array( '用户列表' ),
'Lockdb' => array( '锁定数据库' ),
'Log' => array( '日志' ),
'Lonelypages' => array( '孤立页面' ),
'Longpages' => array( '长页面' ),
+ 'MediaStatistics' => array( '媒体统计' ),
'MergeHistory' => array( '合并历史' ),
'MIMEsearch' => array( 'MIME搜索' ),
'Mostcategories' => array( '最多分类页面' ),
@@ -181,52 +185,55 @@ $specialPageAliases = array(
'Mostinterwikis' => array( '最多跨wiki链接页面' ),
'Mostlinked' => array( '最多链接页面' ),
'Mostlinkedcategories' => array( '最多链接分类' ),
- 'Mostlinkedtemplates' => array( '最多链接模板' ),
+ 'Mostlinkedtemplates' => array( '最多嵌入页面', '最多链接模板', '最多使用模板' ),
'Mostrevisions' => array( '最多修订页面' ),
'Movepage' => array( '移动页面' ),
'Mycontributions' => array( '我的贡献' ),
'MyLanguage' => array( '我的语言' ),
'Mypage' => array( '我的用户页' ),
- 'Mytalk' => array( '我的讨论页' ),
- 'Myuploads' => array( '我上传的文件' ),
- 'Newimages' => array( '新建文件' ),
+ 'Mytalk' => array( '我的讨论页', '我的对话页' ),
+ 'Myuploads' => array( '我上传的文件', '我的文件' ),
+ 'Newimages' => array( '新建文件', '新建图像' ),
'Newpages' => array( '新建页面' ),
- 'PagesWithProp' => array( '带属性的页面' ),
+ 'PagesWithProp' => array( '带属性的页面', '基于属性的页面' ),
+ 'PageLanguage' => array( '页面语言' ),
'PasswordReset' => array( '重设密码' ),
- 'PermanentLink' => array( '永久链接' ),
+ 'PermanentLink' => array( '固定链接', '永久链接' ),
'Popularpages' => array( '热点页面' ),
'Preferences' => array( '参数设置', '设置' ),
'Prefixindex' => array( '前缀索引' ),
'Protectedpages' => array( '已保护页面' ),
'Protectedtitles' => array( '已保护标题' ),
- 'Randompage' => array( '随机页面' ),
+ 'Randompage' => array( '随机', '随机页面' ),
'RandomInCategory' => array( '分类内随机' ),
'Randomredirect' => array( '随机重定向', '随机重定向页' ),
'Recentchanges' => array( '最近更改' ),
- 'Recentchangeslinked' => array( '相关更改', '链出更改' ),
+ 'Recentchangeslinked' => array( '最近链出更改', '相关更改' ),
'Redirect' => array( '重定向' ),
'ResetTokens' => array( '重置权标' ),
- 'Revisiondelete' => array( '删除或恢复修订' ),
+ 'Revisiondelete' => array( '删除修订', '恢复修订' ),
+ 'RunJobs' => array( '运行工作' ),
'Search' => array( '搜索' ),
'Shortpages' => array( '短页面' ),
'Specialpages' => array( '特殊页面' ),
'Statistics' => array( '统计信息' ),
'Tags' => array( '标签' ),
- 'Unblock' => array( '解除封禁' ),
+ 'TrackingCategories' => array( '追踪分类' ),
+ 'Unblock' => array( '解除封禁', '解封' ),
'Uncategorizedcategories' => array( '未分类分类' ),
- 'Uncategorizedimages' => array( '未分类文件' ),
+ 'Uncategorizedimages' => array( '未分类文件', '未分类图像' ),
'Uncategorizedpages' => array( '未分类页面' ),
'Uncategorizedtemplates' => array( '未分类模板' ),
'Undelete' => array( '恢复被删页面' ),
'Unlockdb' => array( '解除数据库锁定' ),
'Unusedcategories' => array( '未使用分类' ),
- 'Unusedimages' => array( '未使用文件' ),
+ 'Unusedimages' => array( '未使用文件', '未使用图像' ),
'Unusedtemplates' => array( '未使用模板' ),
'Unwatchedpages' => array( '未受监视页面' ),
'Upload' => array( '上传文件' ),
'UploadStash' => array( '上传藏匿' ),
- 'Userlogin' => array( '用户登录' ),
- 'Userlogout' => array( '用户退出' ),
+ 'Userlogin' => array( '用户登录', '登录' ),
+ 'Userlogout' => array( '用户退出', '退出' ),
'Userrights' => array( '用户权限' ),
'Version' => array( '版本', '版本信息' ),
'Wantedcategories' => array( '需要的分类', '待撰分类' ),
@@ -235,7 +242,7 @@ $specialPageAliases = array(
'Wantedtemplates' => array( '需要的模板' ),
'Watchlist' => array( '监视列表' ),
'Whatlinkshere' => array( '链入页面' ),
- 'Withoutinterwiki' => array( '无跨维基', '无跨维基链接页面' ),
+ 'Withoutinterwiki' => array( '无跨wiki', '无跨wiki链接页面' ),
);
$magicWords = array(
@@ -256,10 +263,13 @@ $magicWords = array(
'currentyear' => array( '1', '今年', 'CURRENTYEAR' ),
'currenttime' => array( '1', '当前时间', '此时', 'CURRENTTIME' ),
'currenthour' => array( '1', '当前小时', 'CURRENTHOUR' ),
- 'localmonth' => array( '1', '本地月', 'LOCALMONTH', 'LOCALMONTH2' ),
+ 'localmonth' => array( '1', '本地月', '本地月2', 'LOCALMONTH', 'LOCALMONTH2' ),
+ 'localmonth1' => array( '1', '本地月1', 'LOCALMONTH1' ),
'localmonthname' => array( '1', '本地月份名', 'LOCALMONTHNAME' ),
'localmonthnamegen' => array( '1', '本地月历', 'LOCALMONTHNAMEGEN' ),
+ 'localmonthabbrev' => array( '1', '本地月缩写', 'LOCALMONTHABBREV' ),
'localday' => array( '1', '本地日', 'LOCALDAY' ),
+ 'localday2' => array( '1', '本地日2', 'LOCALDAY2' ),
'localdayname' => array( '1', '本地日名', 'LOCALDAYNAME' ),
'localyear' => array( '1', '本地年', 'LOCALYEAR' ),
'localtime' => array( '1', '本地时间', 'LOCALTIME' ),
@@ -270,20 +280,27 @@ $magicWords = array(
'numberofusers' => array( '1', '用户数', 'NUMBEROFUSERS' ),
'numberofactiveusers' => array( '1', '活跃用户数', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', '编辑数', 'NUMBEROFEDITS' ),
- 'numberofviews' => array( '1', '访问数', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', '页名', '页面名', '页面名称', 'PAGENAME' ),
- 'pagenamee' => array( '1', '页名等同', '页面名等同', '页面名E', 'PAGENAMEE' ),
+ 'pagenamee' => array( '1', '页面名等同', '页面名称等同', 'PAGENAMEE' ),
'namespace' => array( '1', '名字空间', 'NAMESPACE' ),
- 'namespacee' => array( '1', '名字空间等同', '名字空间E', 'NAMESPACEE' ),
+ 'namespacee' => array( '1', '名字空间等同', 'NAMESPACEE' ),
'namespacenumber' => array( '1', '名字空间编号', 'NAMESPACENUMBER' ),
'talkspace' => array( '1', '讨论空间', '讨论名字空间', 'TALKSPACE' ),
- 'talkspacee' => array( '1', '讨论空间等同', '讨论名字空间E', 'TALKSPACEE' ),
- 'fullpagename' => array( '1', '页面全名', '完整页面名', 'FULLPAGENAME' ),
- 'fullpagenamee' => array( '1', '完整页面名E', 'FULLPAGENAMEE' ),
- 'subpagename' => array( '1', '子页面名', 'SUBPAGENAME' ),
- 'subpagenamee' => array( '1', '子页面名等同', '子页面名E', 'SUBPAGENAMEE' ),
- 'talkpagename' => array( '1', '讨论页面名', 'TALKPAGENAME' ),
- 'talkpagenamee' => array( '1', '讨论页面名等同', '讨论页面名E', 'TALKPAGENAMEE' ),
+ 'talkspacee' => array( '1', '讨论空间等同', '讨论名字空间等同', 'TALKSPACEE' ),
+ 'subjectspace' => array( '1', '主名字空间', '条目名字空间', 'SUBJECTSPACE', 'ARTICLESPACE' ),
+ 'subjectspacee' => array( '1', '主名字空间等同', '条目名字空间等同', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
+ 'fullpagename' => array( '1', '页面全称', '完整页面名称', 'FULLPAGENAME' ),
+ 'fullpagenamee' => array( '1', '完整页面名称等同', 'FULLPAGENAMEE' ),
+ 'subpagename' => array( '1', '子页面名称', 'SUBPAGENAME' ),
+ 'subpagenamee' => array( '1', '子页面名称等同', 'SUBPAGENAMEE' ),
+ 'rootpagename' => array( '1', '根页面名称', 'ROOTPAGENAME' ),
+ 'rootpagenamee' => array( '1', '根页面名称等同', 'ROOTPAGENAMEE' ),
+ 'basepagename' => array( '1', '基础页面名称', 'BASEPAGENAME' ),
+ 'basepagenamee' => array( '1', '基础页面名称等同', 'BASEPAGENAMEE' ),
+ 'talkpagename' => array( '1', '讨论页面名称', '对话页面名称', 'TALKPAGENAME' ),
+ 'talkpagenamee' => array( '1', '讨论页面名称等同', '对话页面名称等同', 'TALKPAGENAMEE' ),
+ 'subjectpagename' => array( '1', '主名字空间页面名称', '条目页面名称', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+ 'subjectpagenamee' => array( '1', '主名字空间页面名称等同', '条目页面名称等同', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
'subst' => array( '0', '替代:', 'SUBST:' ),
'safesubst' => array( '0', '安全替代:', 'SAFESUBST:' ),
'img_thumbnail' => array( '1', '缩略图', 'thumbnail', 'thumb' ),
@@ -295,15 +312,25 @@ $magicWords = array(
'img_center' => array( '1', '居中', 'center', 'centre' ),
'img_framed' => array( '1', '有框', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', '无框', 'frameless' ),
+ 'img_lang' => array( '1', '语言=$1', 'lang=$1' ),
'img_page' => array( '1', '页数=$1', '$1页', 'page=$1', 'page $1' ),
+ 'img_upright' => array( '1', '右上', '右上=$1', '右上$1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', '边框', 'border' ),
+ 'img_baseline' => array( '1', '基线', 'baseline' ),
+ 'img_sub' => array( '1', '子', 'sub' ),
+ 'img_super' => array( '1', '超', 'super', 'sup' ),
+ 'img_top' => array( '1', '顶部', 'top' ),
+ 'img_text_top' => array( '1', '文字顶部', 'text-top' ),
+ 'img_middle' => array( '1', '中间', 'middle' ),
+ 'img_bottom' => array( '1', '底部', 'bottom' ),
+ 'img_text_bottom' => array( '1', '文字底部', 'text-bottom' ),
'img_link' => array( '1', '链接=$1', 'link=$1' ),
'img_alt' => array( '1', '替代=$1', '替代文本=$1', 'alt=$1' ),
'img_class' => array( '1', '类=$1', 'class=$1' ),
'int' => array( '0', '界面:', 'INT:' ),
'sitename' => array( '1', '站点名称', 'SITENAME' ),
- 'ns' => array( '0', '名字空间:', 'NS:' ),
- 'nse' => array( '0', '名字空间E:', 'NSE:' ),
+ 'ns' => array( '0', '名称空间:', 'NS:' ),
+ 'nse' => array( '0', '名称空间E:', 'NSE:' ),
'localurl' => array( '0', '本地URL:', 'LOCALURL:' ),
'localurle' => array( '0', '本地URLE:', 'LOCALURLE:' ),
'articlepath' => array( '0', '条目路径', 'ARTICLEPATH' ),
@@ -313,17 +340,32 @@ $magicWords = array(
'scriptpath' => array( '0', '脚本路径', 'SCRIPTPATH' ),
'stylepath' => array( '0', '样式路径', 'STYLEPATH' ),
'grammar' => array( '0', '语法:', 'GRAMMAR:' ),
- 'gender' => array( '0', '性:', '性别:', 'GENDER:' ),
+ 'gender' => array( '0', '性别:', 'GENDER:' ),
'notitleconvert' => array( '0', '__不转换标题__', '__NOTITLECONVERT__', '__NOTC__' ),
'nocontentconvert' => array( '0', '__不转换内容__', '__NOCONTENTCONVERT__', '__NOCC__' ),
'currentweek' => array( '1', '本周', 'CURRENTWEEK' ),
+ 'currentdow' => array( '1', '当前DOW', 'CURRENTDOW' ),
+ 'localweek' => array( '1', '本地周', 'LOCALWEEK' ),
+ 'localdow' => array( '1', '本地DOW', 'LOCALDOW' ),
+ 'revisionid' => array( '1', '修订ID', 'REVISIONID' ),
+ 'revisionday' => array( '1', '修订日', 'REVISIONDAY' ),
+ 'revisionday2' => array( '1', '修订日2', 'REVISIONDAY2' ),
+ 'revisionmonth' => array( '1', '修订月', 'REVISIONMONTH' ),
+ 'revisionmonth1' => array( '1', '修订月1', 'REVISIONMONTH1' ),
+ 'revisionyear' => array( '1', '修订年', 'REVISIONYEAR' ),
+ 'revisiontimestamp' => array( '1', '修订时间戳', 'REVISIONTIMESTAMP' ),
+ 'revisionuser' => array( '1', '修订用户', 'REVISIONUSER' ),
+ 'revisionsize' => array( '1', '修订大小', 'REVISIONSIZE' ),
'plural' => array( '0', '复数:', 'PLURAL:' ),
'fullurl' => array( '0', '完整URL:', 'FULLURL:' ),
- 'fullurle' => array( '0', '完整URL等同:', '完整URLE:', 'FULLURLE:' ),
+ 'fullurle' => array( '0', '完整URL等同:', 'FULLURLE:' ),
+ 'canonicalurl' => array( '0', '规范URL:', 'CANONICALURL:' ),
+ 'canonicalurle' => array( '0', '规范URL等同:', 'CANONICALURLE:' ),
'lcfirst' => array( '0', '小写首字:', 'LCFIRST:' ),
'ucfirst' => array( '0', '大写首字:', 'UCFIRST:' ),
'lc' => array( '0', '小写:', 'LC:' ),
'uc' => array( '0', '大写:', 'UC:' ),
+ 'raw' => array( '0', '原始:', 'RAW:' ),
'displaytitle' => array( '1', '显示标题', 'DISPLAYTITLE' ),
'newsectionlink' => array( '1', '__新段落链接__', '__NEWSECTIONLINK__' ),
'nonewsectionlink' => array( '1', '__无新段落链接__', '__NONEWSECTIONLINK__' ),
@@ -341,21 +383,30 @@ $magicWords = array(
'padleft' => array( '0', '左填充', 'PADLEFT' ),
'padright' => array( '0', '右填充', 'PADRIGHT' ),
'special' => array( '0', '特殊', 'special' ),
- 'speciale' => array( '0', '特殊等同', '特殊e', 'speciale' ),
+ 'speciale' => array( '0', '特殊等同', 'speciale' ),
'defaultsort' => array( '1', '默认排序:', '默认排序关键字:', '默认分类排序:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', '文件路径:', 'FILEPATH:' ),
'tag' => array( '0', '标记', 'tag' ),
'hiddencat' => array( '1', '__隐藏分类__', '__HIDDENCAT__' ),
- 'pagesincategory' => array( '1', '分类中页数', '分类中页面数', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+ 'pagesincategory' => array( '1', '分类中页面数', 'PAGESINCATEGORY', 'PAGESINCAT' ),
'pagesize' => array( '1', '页面大小', 'PAGESIZE' ),
'index' => array( '1', '__索引__', '__INDEX__' ),
- 'noindex' => array( '1', '__不索引__', '__NOINDEX__' ),
+ 'noindex' => array( '1', '__无索引__', '__NOINDEX__' ),
'numberingroup' => array( '1', '组中用户数', 'NUMBERINGROUP', 'NUMINGROUP' ),
'staticredirect' => array( '1', '__静态重定向__', '__STATICREDIRECT__' ),
'protectionlevel' => array( '1', '保护级别', 'PROTECTIONLEVEL' ),
+ 'cascadingsources' => array( '1', '级联来源', 'CASCADINGSOURCES' ),
'formatdate' => array( '0', '格式化日期', '日期格式化', 'formatdate', 'dateformat' ),
+ 'url_path' => array( '0', '路径', 'PATH' ),
+ 'url_query' => array( '0', '查询', 'QUERY' ),
'defaultsort_noerror' => array( '0', '不报错', 'noerror' ),
'defaultsort_noreplace' => array( '0', '不替换', 'noreplace' ),
+ 'displaytitle_noerror' => array( '0', '无错误', 'noerror' ),
+ 'displaytitle_noreplace' => array( '0', '无代替', 'noreplace' ),
+ 'pagesincategory_all' => array( '0', '所有', 'all' ),
+ 'pagesincategory_pages' => array( '0', '页面', 'pages' ),
+ 'pagesincategory_subcats' => array( '0', '子分类', 'subcats' ),
+ 'pagesincategory_files' => array( '0', '文件', 'files' ),
);
$linkTrail = '/^()(.*)$/sD';
diff --git a/languages/messages/MessagesZh_hant.php b/languages/messages/MessagesZh_hant.php
index 9b7dc9e0..6e5dea11 100644
--- a/languages/messages/MessagesZh_hant.php
+++ b/languages/messages/MessagesZh_hant.php
@@ -116,122 +116,144 @@ $namespaceAliases = array(
);
$specialPageAliases = array(
- 'Activeusers' => array( '活躍用戶' ),
- 'Allmessages' => array( '所有信息' ),
- 'AllMyUploads' => array( '所有本人上載', '所有本人文件' ),
+ 'Activeusers' => array( '活躍使用者' ),
+ 'Allmessages' => array( '所有訊息' ),
+ 'AllMyUploads' => array( '所有我的上傳', '所有我的檔案', '所有本人上載', '所有本人檔案' ),
'Allpages' => array( '所有頁面' ),
- 'Ancientpages' => array( '最早頁面' ),
+ 'ApiHelp' => array( 'Api使用說明' ),
+ 'Ancientpages' => array( '最舊頁面', '最早頁面' ),
'Badtitle' => array( '無效標題' ),
'Blankpage' => array( '空白頁面' ),
- 'Block' => array( '查封用戶' ),
- 'Booksources' => array( '網絡書源' ),
- 'BrokenRedirects' => array( '損壞的重定向頁' ),
- 'Categories' => array( '頁面分類' ),
- 'ChangeEmail' => array( '修改郵箱' ),
- 'ChangePassword' => array( '修改密碼' ),
+ 'Block' => array( '封鎖', '封鎖IP', '封鎖使用者', '封禁', '封禁IP', '封禁使用者' ),
+ 'Booksources' => array( '書籍來源', '網路書源' ),
+ 'BrokenRedirects' => array( '損壞的重新導向', '損壞的重定向頁' ),
+ 'Categories' => array( '分類', '頁面分類' ),
+ 'ChangeEmail' => array( '更改信箱', '修改郵箱' ),
+ 'ChangePassword' => array( '更改密碼', '修改密碼', '密碼重設' ),
'ComparePages' => array( '頁面比較' ),
- 'Confirmemail' => array( '確認電子郵件' ),
- 'Contributions' => array( '用戶貢獻' ),
- 'CreateAccount' => array( '創建賬戶' ),
- 'Deadendpages' => array( '斷鏈頁面' ),
- 'DeletedContributions' => array( '已刪除的用戶貢獻' ),
- 'DoubleRedirects' => array( '雙重重定向頁面' ),
- 'EditWatchlist' => array( '編輯監視列表' ),
- 'Emailuser' => array( '電郵用戶' ),
+ 'Confirmemail' => array( '確認信箱', '確認電郵' ),
+ 'Contributions' => array( '使用者貢獻', '用戶貢獻' ),
+ 'CreateAccount' => array( '建立帳號', '建立帳戶' ),
+ 'Deadendpages' => array( '無連結頁面', '斷鏈頁面' ),
+ 'DeletedContributions' => array( '已刪除的貢獻', '已刪除的用戶貢獻' ),
+ 'Diff' => array( '編輯差異' ),
+ 'DoubleRedirects' => array( '雙重的重新導向', '雙重重定向頁面' ),
+ 'EditWatchlist' => array( '編輯監視清單', '編輯監視列表' ),
+ 'Emailuser' => array( '寄信給使用者', '寄信', '電郵使用者' ),
'ExpandTemplates' => array( '展開模板' ),
- 'Export' => array( '導出頁面' ),
+ 'Export' => array( '匯出', '匯出頁面' ),
'Fewestrevisions' => array( '最少修訂頁面' ),
- 'FileDuplicateSearch' => array( '搜索重複文件' ),
- 'Filepath' => array( '文件路徑' ),
- 'Import' => array( '導入頁面' ),
- 'Invalidateemail' => array( '不可識別的電郵地址' ),
+ 'FileDuplicateSearch' => array( '重複檔案搜尋', '搜尋重複檔案' ),
+ 'Filepath' => array( '檔案路徑' ),
+ 'Import' => array( '匯入', '匯入頁面' ),
+ 'Invalidateemail' => array( '無效的信箱' ),
'JavaScriptTest' => array( 'JavaScript測試' ),
- 'BlockList' => array( '封禁列表' ),
- 'LinkSearch' => array( '搜索網頁鏈接' ),
- 'Listadmins' => array( '管理員列表' ),
- 'Listbots' => array( '機器人列表' ),
- 'Listfiles' => array( '文件列表' ),
- 'Listgrouprights' => array( '群組權限' ),
- 'Listredirects' => array( '重定向頁面列表' ),
- 'Listusers' => array( '用戶列表' ),
- 'Lockdb' => array( '鎖定數據庫' ),
+ 'BlockList' => array( '封鎖清單', 'IP封鎖清單', '封禁列表', 'IP封禁列表' ),
+ 'LinkSearch' => array( '連結搜尋', '搜尋網頁連結' ),
+ 'Listadmins' => array( '管理員清單', '管理員列表' ),
+ 'Listbots' => array( '機器人清單', '機械人列表' ),
+ 'Listfiles' => array( '檔案清單', '圖片清單', '檔案列表', '圖像列表' ),
+ 'Listgrouprights' => array( '群組權限清單', '使用者群組權限', '群組權限列表' ),
+ 'Listredirects' => array( '重新導向清單', '重定向頁面列表' ),
+ 'ListDuplicatedFiles' => array( '重複檔案清單', '重複檔案列表' ),
+ 'Listusers' => array( '使用者清單', '使用者列表' ),
+ 'Lockdb' => array( '鎖定資料庫', '鎖定數據庫' ),
'Log' => array( '日誌' ),
'Lonelypages' => array( '孤立頁面' ),
- 'Longpages' => array( '長頁面' ),
+ 'Longpages' => array( '過長的頁面', '長頁面' ),
+ 'MediaStatistics' => array( '媒體統計' ),
'MergeHistory' => array( '合併歷史' ),
- 'MIMEsearch' => array( 'MIME搜索' ),
- 'Mostcategories' => array( '最多分類頁面' ),
- 'Mostimages' => array( '最多鏈接文件' ),
- 'Mostinterwikis' => array( '最多跨維基連結' ),
- 'Mostlinked' => array( '最多鏈接頁面' ),
- 'Mostlinkedcategories' => array( '最多鏈接分類' ),
- 'Mostlinkedtemplates' => array( '最多鏈接模板' ),
- 'Mostrevisions' => array( '最多修訂頁面' ),
+ 'MIMEsearch' => array( 'MIME搜尋' ),
+ 'Mostcategories' => array( '最多分類的頁面', '最多分類頁面' ),
+ 'Mostimages' => array( '被連結最多的檔案', '最多連結檔案' ),
+ 'Mostinterwikis' => array( '最多_Interwiki_連結的頁面', '最多跨wiki連結' ),
+ 'Mostlinked' => array( '被連結最多的頁面', '最多連結頁面' ),
+ 'Mostlinkedcategories' => array( '被連結最多的分類', '最多連結分類' ),
+ 'Mostlinkedtemplates' => array( '被引用最多的頁面', '被連結最多的模板', '被使用最多的模板' ),
+ 'Mostrevisions' => array( '最多修訂的頁面', '最多修訂頁面' ),
'Movepage' => array( '移動頁面' ),
'Mycontributions' => array( '我的貢獻' ),
'MyLanguage' => array( '我的語言' ),
- 'Mypage' => array( '我的用戶頁' ),
- 'Mytalk' => array( '我的討論頁' ),
- 'Myuploads' => array( '我的上傳' ),
- 'Newimages' => array( '新建文件' ),
- 'Newpages' => array( '新頁面' ),
- 'PagesWithProp' => array( '帶屬性頁面' ),
+ 'Mypage' => array( '我的使用者頁面', '我的用戶頁' ),
+ 'Mytalk' => array( '我的對話', '我的討論頁' ),
+ 'Myuploads' => array( '我的上傳', '我的上載', '我的檔案' ),
+ 'Newimages' => array( '新增檔案', '新增圖片' ),
+ 'Newpages' => array( '新增頁面', '新頁面' ),
+ 'PagesWithProp' => array( '擁有屬性的頁面', '帶屬性頁面' ),
+ 'PageLanguage' => array( '頁面語言' ),
'PasswordReset' => array( '重設密碼' ),
- 'PermanentLink' => array( '永久連結' ),
- 'Popularpages' => array( '熱點頁面' ),
- 'Preferences' => array( '參數設置' ),
- 'Prefixindex' => array( '前綴索引' ),
- 'Protectedpages' => array( '已保護頁面' ),
- 'Protectedtitles' => array( '已保護標題' ),
+ 'PermanentLink' => array( '靜態連結', '永久連結' ),
+ 'Popularpages' => array( '熱門頁面', '熱點頁面' ),
+ 'Preferences' => array( '偏好設定' ),
+ 'Prefixindex' => array( '字首索引', '前綴索引' ),
+ 'Protectedpages' => array( '受保護頁面', '已保護頁面' ),
+ 'Protectedtitles' => array( '受保護標題', '已保護標題' ),
'Randompage' => array( '隨機頁面' ),
- 'Randomredirect' => array( '隨機重定向頁面' ),
- 'Recentchanges' => array( '最近更改' ),
- 'Recentchangeslinked' => array( '鏈出更改' ),
- 'Redirect' => array( '重定向' ),
- 'ResetTokens' => array( '覆寫令牌' ),
- 'Revisiondelete' => array( '刪除或恢復版本' ),
- 'Search' => array( '搜索' ),
- 'Shortpages' => array( '短頁面' ),
+ 'RandomInCategory' => array( '隨機分類頁面', '於分類中隨機' ),
+ 'Randomredirect' => array( '隨機重新導向', '隨機重定向頁面' ),
+ 'Recentchanges' => array( '最近變更', '最近更改' ),
+ 'Recentchangeslinked' => array( '已連結的最近變更', '相關變更', '連出更改' ),
+ 'Redirect' => array( '重新導向', '重定向' ),
+ 'ResetTokens' => array( '重設密鑰', '覆寫令牌' ),
+ 'Revisiondelete' => array( '修訂刪除', '刪除或恢復版本' ),
+ 'RunJobs' => array( '執行作業', '運行工作' ),
+ 'Search' => array( '搜尋' ),
+ 'Shortpages' => array( '過短的頁面', '短頁面' ),
'Specialpages' => array( '特殊頁面' ),
- 'Statistics' => array( '統計信息' ),
+ 'Statistics' => array( '統計資訊' ),
'Tags' => array( '標籤' ),
- 'Unblock' => array( '解除封禁' ),
- 'Uncategorizedcategories' => array( '未歸類分類' ),
- 'Uncategorizedimages' => array( '未歸類文件' ),
- 'Uncategorizedpages' => array( '未歸類頁面' ),
- 'Uncategorizedtemplates' => array( '未歸類模板' ),
- 'Undelete' => array( '恢復被刪頁面' ),
- 'Unlockdb' => array( '解除數據庫鎖定' ),
- 'Unusedcategories' => array( '未使用分類' ),
- 'Unusedimages' => array( '未使用文件' ),
- 'Unusedtemplates' => array( '未使用模板' ),
- 'Unwatchedpages' => array( '未被監視的頁面' ),
- 'Upload' => array( '上傳文件' ),
- 'UploadStash' => array( '上傳藏匿' ),
- 'Userlogin' => array( '用戶登錄' ),
- 'Userlogout' => array( '用戶登出' ),
- 'Userrights' => array( '用戶權限' ),
- 'Version' => array( '版本信息' ),
- 'Wantedcategories' => array( '待撰分類' ),
- 'Wantedfiles' => array( '需要的文件' ),
- 'Wantedpages' => array( '待撰頁面' ),
+ 'TrackingCategories' => array( '追蹤分類', '跟蹤分類' ),
+ 'Unblock' => array( '解除封鎖', '解除封禁', '解禁' ),
+ 'Uncategorizedcategories' => array( '未分類的分類', '未歸類分類' ),
+ 'Uncategorizedimages' => array( '未分類的檔案', '未分類的圖片', '未歸類檔案' ),
+ 'Uncategorizedpages' => array( '未分類的頁面', '未歸類頁面' ),
+ 'Uncategorizedtemplates' => array( '未分類的模板', '未歸類模板' ),
+ 'Undelete' => array( '取消刪除' ),
+ 'Unlockdb' => array( '解除鎖定資料庫', '解除資料庫鎖定' ),
+ 'Unusedcategories' => array( '未使用的分類', '未使用分類' ),
+ 'Unusedimages' => array( '未使用的檔案', '未使用檔案' ),
+ 'Unusedtemplates' => array( '未使用的模板', '未使用模板' ),
+ 'Unwatchedpages' => array( '未監視的頁面', '未被監視的頁面' ),
+ 'Upload' => array( '上傳', '上載檔案' ),
+ 'UploadStash' => array( '上傳儲藏庫' ),
+ 'Userlogin' => array( '使用者登入' ),
+ 'Userlogout' => array( '使用者登出' ),
+ 'Userrights' => array( '使用者權限' ),
+ 'Version' => array( '版本', '版本資訊' ),
+ 'Wantedcategories' => array( '需要的分類', '待撰分類' ),
+ 'Wantedfiles' => array( '需要的檔案' ),
+ 'Wantedpages' => array( '需要的頁面', '待撰頁面' ),
'Wantedtemplates' => array( '需要的模板' ),
- 'Watchlist' => array( '監視列表' ),
- 'Whatlinkshere' => array( '鏈入頁面' ),
- 'Withoutinterwiki' => array( '沒有跨語言鏈接的頁面' ),
+ 'Watchlist' => array( '監視清單' ),
+ 'Whatlinkshere' => array( '連入頁面' ),
+ 'Withoutinterwiki' => array( '無跨wiki連結頁面', '無跨維基連結頁面' ),
);
$magicWords = array(
- 'redirect' => array( '0', '#重定向', '#REDIRECT' ),
+ 'redirect' => array( '0', '#重新導向', '#重定向', '#REDIRECT' ),
'notoc' => array( '0', '__無目錄__', '__无目录__', '__NOTOC__' ),
'nogallery' => array( '0', '__無圖庫__', '__无图库__', '__NOGALLERY__' ),
'forcetoc' => array( '0', '__強制目錄__', '__强显目录__', '__FORCETOC__' ),
'toc' => array( '0', '__目錄__', '__目录__', '__TOC__' ),
- 'noeditsection' => array( '0', '__無段落編輯__', '__无段落编辑__', '__NOEDITSECTION__' ),
- 'currentmonth' => array( '1', '本月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
- 'currentmonthabbrev' => array( '1', '本月簡稱', '本月简称', 'CURRENTMONTHABBREV' ),
+ 'noeditsection' => array( '0', '__無段落編輯__', '__无编辑段落__', '__无段落编辑__', '__NOEDITSECTION__' ),
+ 'currentmonth' => array( '1', '本月', '本月2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+ 'currentmonthabbrev' => array( '1', '本月縮寫', '本月简称', 'CURRENTMONTHABBREV' ),
'currentday' => array( '1', '今天', 'CURRENTDAY' ),
- 'currenttime' => array( '1', '當前時間', '此時', '此时', '当前时间', 'CURRENTTIME' ),
+ 'currenttime' => array( '1', '目前時間', '当前时间', '此时', 'CURRENTTIME' ),
+ 'numberofpages' => array( '1', '頁面數', '页面数', 'NUMBEROFPAGES' ),
+ 'numberofarticles' => array( '1', '文章數', '条目数', 'NUMBEROFARTICLES' ),
+ 'numberoffiles' => array( '1', '檔案數', '文件数', 'NUMBEROFFILES' ),
+ 'numberofusers' => array( '1', '使用者人數量', '用户数', 'NUMBEROFUSERS' ),
+ 'numberofactiveusers' => array( '1', '活躍使用者人數', '活跃用户数', 'NUMBEROFACTIVEUSERS' ),
+ 'pagename' => array( '1', '頁面名稱', '页名', '页面名', '页面名称', 'PAGENAME' ),
+ 'namespace' => array( '1', '命名空間', '名字空间', 'NAMESPACE' ),
+ 'namespacenumber' => array( '1', '命名空間數', '名字空间编号', 'NAMESPACENUMBER' ),
+ 'talkspace' => array( '1', '對話空間', '讨论空间', '讨论名字空间', 'TALKSPACE' ),
+ 'rootpagename' => array( '1', '根頁面名稱', 'ROOTPAGENAME' ),
+ 'rootpagenamee' => array( '1', '根頁面名稱E', 'ROOTPAGENAMEE' ),
+ 'msg' => array( '0', '訊息:', 'MSG:' ),
+ 'subst' => array( '0', '替換:', '替代:', 'SUBST:' ),
+ 'safesubst' => array( '0', '安全替換:', '安全替代:', 'SAFESUBST:' ),
'img_thumbnail' => array( '1', '縮圖', '缩略图', 'thumbnail', 'thumb' ),
'img_manualthumb' => array( '1', '縮圖=$1', '缩略图=$1', 'thumbnail=$1', 'thumb=$1' ),
'img_right' => array( '1', '右', 'right' ),
@@ -241,24 +263,41 @@ $magicWords = array(
'img_center' => array( '1', '置中', '居中', 'center', 'centre' ),
'img_framed' => array( '1', '有框', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', '無框', '无框', 'frameless' ),
+ 'img_lang' => array( '1', '語言=$1', 'lang=$1' ),
'img_page' => array( '1', '頁=$1', '$1頁', '页数=$1', '$1页', 'page=$1', 'page $1' ),
+ 'img_border' => array( '1', '邊框', '边框', 'border' ),
+ 'img_sub' => array( '1', '下標', 'sub' ),
+ 'img_super' => array( '1', '上標', 'super', 'sup' ),
+ 'img_top' => array( '1', '垂直置頂', 'top' ),
+ 'img_text_top' => array( '1', '文字置頂', 'text-top' ),
+ 'img_middle' => array( '1', '垂直置中', 'middle' ),
+ 'img_bottom' => array( '1', '垂直置底', 'bottom' ),
+ 'img_text_bottom' => array( '1', '文字置底', 'text-bottom' ),
'img_link' => array( '1', '連結=$1', '链接=$1', 'link=$1' ),
+ 'img_alt' => array( '1', '替代文字', '替代=$1', '替代文本=$1', 'alt=$1' ),
+ 'img_class' => array( '1', '類別=$1', '类=$1', 'class=$1' ),
'sitename' => array( '1', '網站名稱', '站点名称', 'SITENAME' ),
- 'ns' => array( '0', '名字空間:', '名字空间:', 'NS:' ),
- 'nse' => array( '0', '名字空間E:', '名字空间E:', 'NSE:' ),
+ 'ns' => array( '0', '命名空間:', '名字空间:', 'NS:' ),
+ 'nse' => array( '0', '命名空間E:', '名字空间E:', 'NSE:' ),
'localurl' => array( '0', '本地URL:', 'LOCALURL:' ),
'localurle' => array( '0', '本地URLE:', 'LOCALURLE:' ),
'pageid' => array( '0', '頁面ID', '页面ID', 'PAGEID' ),
'server' => array( '0', '伺服器', '服务器', 'SERVER' ),
'servername' => array( '0', '伺服器名稱', '服务器名', 'SERVERNAME' ),
- 'gender' => array( '0', '性別:', '性别:', 'GENDER:' ),
+ 'gender' => array( '0', '性別:', '性:', '性别:', 'GENDER:' ),
'notitleconvert' => array( '0', '__不轉換標題__', '__不转换标题__', '__NOTITLECONVERT__', '__NOTC__' ),
'nocontentconvert' => array( '0', '__不轉換內容__', '__不转换内容__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+ 'revisionuser' => array( '1', '修訂使用者', 'REVISIONUSER' ),
'displaytitle' => array( '1', '顯示標題', '显示标题', 'DISPLAYTITLE' ),
- 'currentversion' => array( '1', '當前版本', '当前版本', 'CURRENTVERSION' ),
+ 'currentversion' => array( '1', '目前版本', '当前版本', 'CURRENTVERSION' ),
'language' => array( '0', '#語言:', '#语言:', '#LANGUAGE:' ),
+ 'contentlanguage' => array( '1', '內容語言', '内容语言', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+ 'numberofadmins' => array( '1', '管理員數', '管理员数', 'NUMBEROFADMINS' ),
'hiddencat' => array( '1', '__隱藏分類__', '__隐藏分类__', '__HIDDENCAT__' ),
- 'staticredirect' => array( '1', '__靜態重定向__', '__静态重定向__', '__STATICREDIRECT__' ),
+ 'staticredirect' => array( '1', '__靜態重新導向__', '__静态重定向__', '__STATICREDIRECT__' ),
+ 'url_query' => array( '0', '查詢', 'QUERY' ),
+ 'pagesincategory_pages' => array( '0', '頁面', 'pages' ),
+ 'pagesincategory_files' => array( '0', '檔案', 'files' ),
);
$bookstoreList = array(
diff --git a/languages/messages/MessagesZh_tw.php b/languages/messages/MessagesZh_tw.php
index 067f7dd1..2a79ea9a 100644
--- a/languages/messages/MessagesZh_tw.php
+++ b/languages/messages/MessagesZh_tw.php
@@ -39,22 +39,28 @@ $namespaceAliases = array(
);
$specialPageAliases = array(
+ 'Allmessages' => array( '所有訊息' ),
'Ancientpages' => array( '最舊頁面' ),
- 'Block' => array( '查封用戶' ),
- 'FileDuplicateSearch' => array( '搜索重復文件' ),
- 'Invalidateemail' => array( '無法識別的電郵地址' ),
- 'LinkSearch' => array( '搜索網頁鏈接' ),
- 'Listredirects' => array( '重定向頁面列表' ),
- 'Lockdb' => array( '鎖定數據庫' ),
- 'MIMEsearch' => array( 'MIME搜索' ),
- 'Randomredirect' => array( '隨機重定向頁面' ),
+ 'Block' => array( '封鎖使用者' ),
+ 'CreateAccount' => array( '建立帳號' ),
+ 'FileDuplicateSearch' => array( '搜尋重復檔案' ),
+ 'Invalidateemail' => array( '無法識別的電郵位址' ),
+ 'LinkSearch' => array( '搜尋網頁連結' ),
+ 'Listfiles' => array( '檔案清單' ),
+ 'Listredirects' => array( '重新導向頁面清單' ),
+ 'Lockdb' => array( '鎖定資料庫' ),
+ 'MIMEsearch' => array( 'MIME搜尋' ),
+ 'Newimages' => array( '新增檔案' ),
+ 'Randomredirect' => array( '隨機重新導向頁面' ),
'Recentchanges' => array( '近期變動' ),
'Revisiondelete' => array( '刪除或恢復版本' ),
'Unblock' => array( '解除封鎖' ),
- 'Unlockdb' => array( '解除數據庫鎖定' ),
+ 'Unlockdb' => array( '解除資料庫鎖定' ),
'Unwatchedpages' => array( '未被監視的頁面' ),
- 'Userrights' => array( '用戶權限' ),
- 'Withoutinterwiki' => array( '沒有跨語言鏈接的頁面' ),
+ 'Userrights' => array( '使用者權限' ),
+ 'Watchlist' => array( '監視清單' ),
+ 'Whatlinkshere' => array( '連入頁面' ),
+ 'Withoutinterwiki' => array( '沒有跨語言連結的頁面' ),
);
$datePreferences = array(
diff --git a/load.php b/load.php
index 655f3092..18ecf366 100644
--- a/load.php
+++ b/load.php
@@ -22,32 +22,28 @@
* @author Trevor Parscal
*/
-// Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
- // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
- require dirname( __FILE__ ) . '/includes/PHPVersionError.php';
- wfPHPVersionError( 'load.php' );
-}
+// Bail on old versions of PHP, or if composer has not been run yet to install
+// dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
+require_once dirname( __FILE__ ) . '/includes/PHPVersionCheck.php';
+wfEntryPointCheck( 'load.php' );
require __DIR__ . '/includes/WebStart.php';
-wfProfileIn( 'load.php' );
// URL safety checks
if ( !$wgRequest->checkUrlExtension() ) {
return;
}
-// Respond to resource loading request
-$resourceLoader = new ResourceLoader(
- ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
-);
+// Respond to resource loading request.
+// foo()->bar() syntax is not supported in PHP4, and this file needs to *parse* in PHP4.
+$configFactory = ConfigFactory::getDefaultInstance();
+$resourceLoader = new ResourceLoader( $configFactory->makeConfig( 'main' ) );
$resourceLoader->respond( new ResourceLoaderContext( $resourceLoader, $wgRequest ) );
-wfProfileOut( 'load.php' );
+Profiler::instance()->setTemplated( true );
wfLogProfilingData();
-// Shut down the database. foo()->bar() syntax is not supported in PHP4, and this file
-// needs to *parse* in PHP4, although we'll never get down here to worry about = vs =&
+// Shut down the database.
$lb = wfGetLBFactory();
$lb->shutdown();
diff --git a/load.php5 b/load.php5
index fb3c7646..af161693 100644
--- a/load.php5
+++ b/load.php5
@@ -21,4 +21,6 @@
* @file
*/
+define( 'MW_ENTRY_PHP5', true );
+
require './load.php';
diff --git a/maintenance/Doxyfile b/maintenance/Doxyfile
index ffc8c3b0..1f70f452 100644
--- a/maintenance/Doxyfile
+++ b/maintenance/Doxyfile
@@ -1,4 +1,4 @@
-# Doxyfile 1.7.6.1
+# Doxyfile 1.8.6
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for MediaWiki.
@@ -47,31 +47,39 @@ MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
-ALIASES = "type{1}=<b> \1 </b>:" \
- "types{2}=<b> \1 </b> or <b> \2 </b>:" \
- "types{3}=<b> \1 </b>, <b> \2 </b>, or <b> \3 </b>:" \
- "arrayof{2}=<b> Array </b> of \2" \
- "null=\type{Null}" \
- "boolean=\type{Boolean}" \
- "bool=\type{Boolean}" \
- "integer=\type{Integer}" \
- "int=\type{Integer}" \
- "string=\type{String}" \
- "str=\type{String}" \
- "mixed=\type{Mixed}" \
- "access=\par Access:\n" \
- "private=\access private" \
- "protected=\access protected" \
- "public=\access public" \
- "copyright=\note" \
- "license=\note" \
- "codeCoverageIgnore="
+ALIASES = "type{1}=<b> \1 </b>:" \
+ "types{2}=<b> \1 </b> or <b> \2 </b>:" \
+ "types{3}=<b> \1 </b>, <b> \2 </b>, or <b> \3 </b>:" \
+ "arrayof{2}=<b> Array </b> of \2" \
+ "null=\type{Null}" \
+ "boolean=\type{Boolean}" \
+ "bool=\type{Boolean}" \
+ "integer=\type{Integer}" \
+ "int=\type{Integer}" \
+ "string=\type{String}" \
+ "str=\type{String}" \
+ "mixed=\type{Mixed}" \
+ "access=\par Access:\n" \
+ "private=\access private" \
+ "protected=\access protected" \
+ "public=\access public" \
+ "copyright=\note" \
+ "license=\note" \
+ "codeCoverageIgnore=" \
+ "codingStandardsIgnoreStart=" \
+ "group=" \
+ "covers=" \
+ "dataProvider=" \
+ "expectedException=" \
+ "expectedExceptionMessage="
TCL_SUBST =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
EXTENSION_MAPPING =
+MARKDOWN_SUPPORT = YES
+AUTOLINK_SUPPORT = YES
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
@@ -81,13 +89,13 @@ SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = NO
-SYMBOL_CACHE_SIZE = 0
-LOOKUP_CACHE_SIZE = 1
+LOOKUP_CACHE_SIZE = 2
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
+EXTRACT_PACKAGE = NO
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
@@ -100,6 +108,7 @@ INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
+SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
@@ -115,14 +124,13 @@ GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
-SHOW_DIRECTORIES = YES
SHOW_FILES = YES
SHOW_NAMESPACES = NO
FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
@@ -132,7 +140,7 @@ WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = {{INPUT}}
INPUT_ENCODING = UTF-8
@@ -182,7 +190,12 @@ FILE_PATTERNS = *.c \
RECURSIVE = YES
EXCLUDE = {{EXCLUDE}}
EXCLUDE_SYMLINKS = YES
-EXCLUDE_PATTERNS = LocalSettings.php AdminSettings.php StartProfiler.php .svn */.git/* {{EXCLUDE_PATTERNS}}
+EXCLUDE_PATTERNS = LocalSettings.php \
+ AdminSettings.php \
+ StartProfiler.php \
+ .svn \
+ */.git/* \
+ {{EXCLUDE_PATTERNS}}
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS = *
@@ -192,8 +205,9 @@ INPUT_FILTER = "{{INPUT_FILTER}}"
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
@@ -201,16 +215,17 @@ STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = html
@@ -218,13 +233,14 @@ HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
+HTML_EXTRA_STYLESHEET =
HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES
-HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = NO
+HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
@@ -248,20 +264,26 @@ QHG_LOCATION =
GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
-ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
-USE_INLINE_TREES = YES
+ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
USE_MATHJAX = NO
+MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
MATHJAX_EXTENSIONS =
+MATHJAX_CODEFILE =
SEARCHENGINE = YES
SERVER_BASED_SEARCH = YES
+EXTERNAL_SEARCH = NO
+SEARCHENGINE_URL =
+SEARCHDATA_FILE = searchdata.xml
+EXTERNAL_SEARCH_ID =
+EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
@@ -272,6 +294,7 @@ PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
+LATEX_EXTRA_FILES =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
@@ -279,7 +302,7 @@ LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
#---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
@@ -288,14 +311,14 @@ RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = {{GENERATE_MAN}}
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
@@ -303,11 +326,16 @@ XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK = NO
+DOCBOOK_OUTPUT = docbook
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
@@ -326,18 +354,20 @@ PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE = {{OUTPUT_DIRECTORY}}/html/tagfile.xml
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
+EXTERNAL_PAGES = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
MSCGEN_PATH =
+DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = {{HAVE_DOT}}
DOT_NUM_THREADS = 0
@@ -348,6 +378,7 @@ CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
+UML_LIMIT_NUM_FIELDS = 10
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
@@ -360,10 +391,10 @@ INTERACTIVE_SVG = NO
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
+DIAFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 1000
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = YES
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
-
diff --git a/maintenance/Maintenance.php b/maintenance/Maintenance.php
index 8d30df4c..923c5b41 100644
--- a/maintenance/Maintenance.php
+++ b/maintenance/Maintenance.php
@@ -20,12 +20,10 @@
* @defgroup Maintenance Maintenance
*/
-// Make sure we're on PHP5.3.2 or better
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
- // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
- require_once dirname( __FILE__ ) . '/../includes/PHPVersionError.php';
- wfPHPVersionError( 'cli' );
-}
+// Bail on old versions of PHP, or if composer has not been run yet to install
+// dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
+require_once dirname( __FILE__ ) . '/../includes/PHPVersionCheck.php';
+wfEntryPointCheck( 'cli' );
/**
* @defgroup MaintenanceArchive Maintenance archives
@@ -102,7 +100,7 @@ abstract class Maintenance {
private $mDependantParameters = array();
/**
- * Used by getDD() / setDB()
+ * Used by getDB() / setDB()
* @var DatabaseBase
*/
private $mDb = null;
@@ -446,7 +444,7 @@ abstract class Maintenance {
$this->addOption( 'server', "The protocol and server name to use in URLs, e.g. " .
"http://en.wikipedia.org. This is sometimes necessary because " .
"server name detection may fail in command line scripts.", false, true );
- $this->addOption( 'profiler', 'Set to "text" or "trace" to show profiling output', false, true );
+ $this->addOption( 'profiler', 'Profiler output format (usually "text")', false, true );
# Save generic options to display them separately in help
$this->mGenericParameters = $this->mParams;
@@ -598,6 +596,23 @@ abstract class Maintenance {
}
/**
+ * Activate the profiler (assuming $wgProfiler is set)
+ */
+ protected function activateProfiler() {
+ global $wgProfiler;
+
+ $output = $this->getOption( 'profiler' );
+ if ( $output && is_array( $wgProfiler ) && isset( $wgProfiler['class'] ) ) {
+ $class = $wgProfiler['class'];
+ $profiler = new $class(
+ array( 'sampling' => 1, 'output' => $output ) + $wgProfiler
+ );
+ $profiler->setTemplated( true );
+ Profiler::replaceStubInstance( $profiler );
+ }
+ }
+
+ /**
* Clear all params and arguments.
*/
public function clearParamsAndArgs() {
@@ -679,6 +694,9 @@ abstract class Maintenance {
}
$options[$option] = $param;
}
+ } elseif ( $arg == '-' ) {
+ # Lonely "-", often used to indicate stdin or stdout.
+ $args[] = $arg;
} elseif ( substr( $arg, 0, 1 ) == '-' ) {
# Short options
$argLength = strlen( $arg );
@@ -920,26 +938,19 @@ abstract class Maintenance {
LBFactory::destroyInstance();
}
+ // Per-script profiling; useful for debugging
+ $this->activateProfiler();
+
$this->afterFinalSetup();
$wgShowSQLErrors = true;
- // @codingStandardsIgnoreStart Allow error supppression. wfSuppressWarnings()
- // is not avaiable.
+ // @codingStandardsIgnoreStart Allow error suppression. wfSuppressWarnings()
+ // is not available.
@set_time_limit( 0 );
// @codingStandardsIgnoreStart
$this->adjustMemoryLimit();
-
- // Per-script profiling; useful for debugging
- $forcedProfiler = $this->getOption( 'profiler' );
- if ( $forcedProfiler === 'text' ) {
- Profiler::setInstance( new ProfilerSimpleText( array() ) );
- Profiler::instance()->setTemplated( true );
- } elseif ( $forcedProfiler === 'trace' ) {
- Profiler::setInstance( new ProfilerSimpleTrace( array() ) );
- Profiler::instance()->setTemplated( true );
- }
}
/**
@@ -1063,7 +1074,7 @@ abstract class Maintenance {
*
* @return DatabaseBase
*/
- protected function &getDB( $db, $groups = array(), $wiki = false ) {
+ protected function getDB( $db, $groups = array(), $wiki = false ) {
if ( is_null( $this->mDb ) ) {
return wfGetDB( $db, $groups, $wiki );
} else {
@@ -1076,7 +1087,7 @@ abstract class Maintenance {
*
* @param DatabaseBase $db Database object to be used
*/
- public function setDB( &$db ) {
+ public function setDB( $db ) {
$this->mDb = $db;
}
@@ -1084,7 +1095,7 @@ abstract class Maintenance {
* Lock the search index
* @param DatabaseBase &$db
*/
- private function lockSearchindex( &$db ) {
+ private function lockSearchindex( $db ) {
$write = array( 'searchindex' );
$read = array( 'page', 'revision', 'text', 'interwiki', 'l10n_cache', 'user' );
$db->lockTables( $read, $write, __CLASS__ . '::' . __METHOD__ );
@@ -1094,7 +1105,7 @@ abstract class Maintenance {
* Unlock the tables
* @param DatabaseBase &$db
*/
- private function unlockSearchindex( &$db ) {
+ private function unlockSearchindex( $db ) {
$db->unlockTables( __CLASS__ . '::' . __METHOD__ );
}
@@ -1103,7 +1114,7 @@ abstract class Maintenance {
* Since the lock is low-priority, queued reads will be able to complete
* @param DatabaseBase &$db
*/
- private function relockSearchindex( &$db ) {
+ private function relockSearchindex( $db ) {
$this->unlockSearchindex( $db );
$this->lockSearchindex( $db );
}
@@ -1174,7 +1185,7 @@ abstract class Maintenance {
* We default as considering stdin a tty (for nice readline methods)
* but treating stout as not a tty to avoid color codes
*
- * @param int $fd File descriptor
+ * @param mixed $fd File descriptor
* @return bool
*/
public static function posix_isatty( $fd ) {
@@ -1197,7 +1208,13 @@ abstract class Maintenance {
}
if ( $isatty && function_exists( 'readline' ) ) {
- return readline( $prompt );
+ $resp = readline( $prompt );
+ if ( $resp === null ) {
+ // Workaround for https://github.com/facebook/hhvm/issues/4776
+ return false;
+ } else {
+ return $resp;
+ }
} else {
if ( $isatty ) {
$st = self::readlineEmulation( $prompt );
@@ -1311,7 +1328,7 @@ abstract class LoggedUpdateMaintenance extends Maintenance {
}
/**
- * Message to show the the update log was unable to log the completion of this update
+ * Message to show that the update log was unable to log the completion of this update
* @return string
*/
protected function updatelogFailedMessage() {
diff --git a/maintenance/archives/patch-drop-page_counter.sql b/maintenance/archives/patch-drop-page_counter.sql
new file mode 100644
index 00000000..1d8e701b
--- /dev/null
+++ b/maintenance/archives/patch-drop-page_counter.sql
@@ -0,0 +1,2 @@
+-- field is deprecated and no longer updated as of 1.25
+ALTER TABLE /*_*/page DROP COLUMN page_counter;
diff --git a/maintenance/archives/patch-drop-ss_total_views.sql b/maintenance/archives/patch-drop-ss_total_views.sql
new file mode 100644
index 00000000..00591939
--- /dev/null
+++ b/maintenance/archives/patch-drop-ss_total_views.sql
@@ -0,0 +1,2 @@
+-- field is deprecated and no longer updated as of 1.24
+ALTER TABLE /*_*/site_stats DROP COLUMN ss_total_views; \ No newline at end of file
diff --git a/maintenance/archives/patch-editsummary-length.sql b/maintenance/archives/patch-editsummary-length.sql
new file mode 100644
index 00000000..c8ac1adf
--- /dev/null
+++ b/maintenance/archives/patch-editsummary-length.sql
@@ -0,0 +1,11 @@
+ALTER TABLE /*_*/revision MODIFY rev_comment varbinary(767) NOT NULL;
+ALTER TABLE /*_*/archive MODIFY ar_comment varbinary(767) NOT NULL;
+ALTER TABLE /*_*/image MODIFY img_description varbinary(767) NOT NULL;
+ALTER TABLE /*_*/oldimage MODIFY oi_description varbinary(767) NOT NULL;
+ALTER TABLE /*_*/filearchive MODIFY fa_description varbinary(767);
+ALTER TABLE /*_*/filearchive MODIFY fa_deleted_reason varbinary(767) default '';
+ALTER TABLE /*_*/recentchanges MODIFY rc_comment varbinary(767) NOT NULL default '';
+ALTER TABLE /*_*/logging MODIFY log_comment varbinary(767) NOT NULL default '';
+ALTER TABLE /*_*/ipblocks MODIFY ipb_reason varbinary(767) NOT NULL;
+ALTER TABLE /*_*/protected_titles MODIFY pt_reason varbinary(767);
+
diff --git a/maintenance/archives/patch-hitcounter.sql b/maintenance/archives/patch-hitcounter.sql
deleted file mode 100644
index 2d698f68..00000000
--- a/maintenance/archives/patch-hitcounter.sql
+++ /dev/null
@@ -1,9 +0,0 @@
---
--- hitcounter table is used to buffer page hits before they are periodically
--- counted and added to the cur_counter column in the cur table.
--- December 2003
---
-
-CREATE TABLE /*$wgDBprefix*/hitcounter (
- hc_id INTEGER UNSIGNED NOT NULL
-) ENGINE=MEMORY MAX_ROWS=25000;
diff --git a/maintenance/archives/patch-user-newtalk-userid-unsigned.sql b/maintenance/archives/patch-user-newtalk-userid-unsigned.sql
new file mode 100644
index 00000000..a83e03b9
--- /dev/null
+++ b/maintenance/archives/patch-user-newtalk-userid-unsigned.sql
@@ -0,0 +1 @@
+ALTER TABLE /*_*/user_newtalk MODIFY user_id int unsigned NOT NULL default 0;
diff --git a/maintenance/backupTextPass.inc b/maintenance/backupTextPass.inc
index 5f776373..d83f1fcc 100644
--- a/maintenance/backupTextPass.inc
+++ b/maintenance/backupTextPass.inc
@@ -48,6 +48,8 @@ class TextPassDumper extends BackupDumper {
protected $maxConsecutiveFailedTextRetrievals = 200;
protected $failureTimeout = 5; // Seconds to sleep after db failure
+ protected $bufferSize = 524288; // In bytes. Maximum size to read from the stub in on go.
+
protected $php = "php";
protected $spawn = false;
@@ -186,6 +188,10 @@ class TextPassDumper extends BackupDumper {
$url = $this->processFileOpt( $val, $param );
switch ( $opt ) {
+ case 'buffersize':
+ // Lower bound for xml reading buffer size is 4 KB
+ $this->bufferSize = max( intval( $val ), 4 * 1024 );
+ break;
case 'prefetch':
require_once "$IP/maintenance/backupPrefetch.inc";
$this->prefetch = new BaseDump( $url );
@@ -354,6 +360,8 @@ class TextPassDumper extends BackupDumper {
$this->lastName = "";
$this->thisPage = 0;
$this->thisRev = 0;
+ $this->thisRevModel = null;
+ $this->thisRevFormat = null;
$parser = xml_parser_create( "UTF-8" );
xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false );
@@ -366,12 +374,11 @@ class TextPassDumper extends BackupDumper {
xml_set_character_data_handler( $parser, array( &$this, 'characterData' ) );
$offset = 0; // for context extraction on error reporting
- $bufferSize = 512 * 1024;
do {
if ( $this->checkIfTimeExceeded() ) {
$this->setTimeExceeded();
}
- $chunk = fread( $input, $bufferSize );
+ $chunk = fread( $input, $this->bufferSize );
if ( !xml_parse( $parser, $chunk, feof( $input ) ) ) {
wfDebug( "TextDumpPass::readDump encountered XML parsing error\n" );
@@ -422,7 +429,33 @@ class TextPassDumper extends BackupDumper {
}
/**
+ * Applies applicable export transformations to $text.
+ *
+ * @param string $text
+ * @param string $model
+ * @param string|null $format
+ *
+ * @return string
+ */
+ private function exportTransform( $text, $model, $format = null ) {
+ try {
+ $handler = ContentHandler::getForModelID( $model );
+ $text = $handler->exportTransform( $text, $format );
+ }
+ catch ( MWException $ex ) {
+ $this->progress(
+ "Unable to apply export transformation for content model '$model': " .
+ $ex->getMessage()
+ );
+ }
+
+ return $text;
+ }
+
+ /**
* Tries to get the revision text for a revision id.
+ * Export transformations are applied if the content model can is given or can be
+ * determined from the database.
*
* Upon errors, retries (Up to $this->maxFailures tries each call).
* If still no good revision get could be found even after this retrying, "" is returned.
@@ -431,11 +464,14 @@ class TextPassDumper extends BackupDumper {
* is thrown.
*
* @param string $id The revision id to get the text for
+ * @param string|bool|null $model The content model used to determine applicable export transformations.
+ * If $model is null, it will be determined from the database.
+ * @param string|null $format The content format used when applying export transformations.
*
- * @return string The revision text for $id, or ""
* @throws MWException
+ * @return string The revision text for $id, or ""
*/
- function getText( $id ) {
+ function getText( $id, $model = null, $format = null ) {
global $wgContentHandlerUseDB;
$prefetchNotTried = true; // Whether or not we already tried to get the text via prefetch.
@@ -453,6 +489,24 @@ class TextPassDumper extends BackupDumper {
$oldConsecutiveFailedTextRetrievals = $consecutiveFailedTextRetrievals;
$consecutiveFailedTextRetrievals = 0;
+ if ( $model === null && $wgContentHandlerUseDB ) {
+ $row = $this->db->selectRow(
+ 'revision',
+ array( 'rev_content_model', 'rev_content_format' ),
+ array( 'rev_id' => $this->thisRev ),
+ __METHOD__
+ );
+
+ if ( $row ) {
+ $model = $row->rev_content_model;
+ $format = $row->rev_content_format;
+ }
+ }
+
+ if ( $model === null || $model === '' ) {
+ $model = false;
+ }
+
while ( $failures < $this->maxFailures ) {
// As soon as we found a good text for the $id, we will return immediately.
@@ -469,9 +523,19 @@ class TextPassDumper extends BackupDumper {
$tryIsPrefetch = true;
$text = $this->prefetch->prefetch( intval( $this->thisPage ),
intval( $this->thisRev ) );
+
if ( $text === null ) {
$text = false;
}
+
+ if ( is_string( $text ) && $model !== false ) {
+ // Apply export transformation to text coming from an old dump.
+ // The purpose of this transformation is to convert up from legacy
+ // formats, which may still be used in the older dump that is used
+ // for pre-fetching. Applying the transformation again should not
+ // interfere with content that is already in the correct form.
+ $text = $this->exportTransform( $text, $model, $format );
+ }
}
if ( $text === false ) {
@@ -483,6 +547,12 @@ class TextPassDumper extends BackupDumper {
$text = $this->getTextDb( $id );
}
+ if ( $text !== false && $model !== false ) {
+ // Apply export transformation to text coming from the database.
+ // Prefetched text should already have transformations applied.
+ $text = $this->exportTransform( $text, $model, $format );
+ }
+
// No more checks for texts from DB for now.
// If we received something that is not false,
// We treat it as good text, regardless of whether it actually is or is not
@@ -504,21 +574,8 @@ class TextPassDumper extends BackupDumper {
throw new MWException( "No database available" );
}
- $revLength = strlen( $text );
- if ( $wgContentHandlerUseDB ) {
- $row = $this->db->selectRow(
- 'revision',
- array( 'rev_len', 'rev_content_model' ),
- array( 'rev_id' => $revID ),
- __METHOD__
- );
- if ( $row ) {
- // only check the length for the wikitext content handler,
- // it's a wasted (and failed) check otherwise
- if ( $row->rev_content_model == CONTENT_MODEL_WIKITEXT ) {
- $revLength = $row->rev_len;
- }
- }
+ if ( $model !== CONTENT_MODEL_WIKITEXT ) {
+ $revLength = strlen( $text );
} else {
$revLength = $this->db->selectField( 'revision', 'rev_len', array( 'rev_id' => $revID ) );
}
@@ -757,7 +814,14 @@ class TextPassDumper extends BackupDumper {
}
if ( $name == "text" && isset( $attribs['id'] ) ) {
- $text = $this->getText( $attribs['id'] );
+ $id = $attribs['id'];
+ $model = trim( $this->thisRevModel );
+ $format = trim( $this->thisRevFormat );
+
+ $model = $model === '' ? null : $model;
+ $format = $format === '' ? null : $format;
+
+ $text = $this->getText( $id, $model, $format );
$this->openElement = array( $name, array( 'xml:space' => 'preserve' ) );
if ( strlen( $text ) > 0 ) {
$this->characterData( $parser, $text );
@@ -780,6 +844,8 @@ class TextPassDumper extends BackupDumper {
$this->egress->writeRevision( null, $this->buffer );
$this->buffer = "";
$this->thisRev = "";
+ $this->thisRevModel = null;
+ $this->thisRevFormat = null;
} elseif ( $name == 'page' ) {
if ( !$this->firstPageWritten ) {
$this->firstPageWritten = trim( $this->thisPage );
@@ -834,6 +900,13 @@ class TextPassDumper extends BackupDumper {
$this->thisPage .= $data;
}
}
+ elseif ( $this->lastName == "model" ) {
+ $this->thisRevModel .= $data;
+ }
+ elseif ( $this->lastName == "format" ) {
+ $this->thisRevFormat .= $data;
+ }
+
// have to skip the newline left over from closepagetag line of
// end of checkpoint files. nasty hack!!
if ( $this->checkpointJustWritten ) {
diff --git a/maintenance/benchmarks/bench_HTTP_HTTPS.php b/maintenance/benchmarks/bench_HTTP_HTTPS.php
index bb7499b7..15692348 100644
--- a/maintenance/benchmarks/bench_HTTP_HTTPS.php
+++ b/maintenance/benchmarks/bench_HTTP_HTTPS.php
@@ -46,7 +46,7 @@ class BenchHttpHttps extends Benchmarker {
}
static function doRequest( $proto ) {
- Http::get( "$proto://localhost/" );
+ Http::get( "$proto://localhost/", array(), __METHOD__ );
}
// bench function 1
diff --git a/maintenance/cdb.php b/maintenance/cdb.php
index 86c686b4..2e252adb 100644
--- a/maintenance/cdb.php
+++ b/maintenance/cdb.php
@@ -21,6 +21,8 @@
* @todo document
* @ingroup Maintenance
*/
+use \Cdb\Exception as CdbException;
+use \Cdb\Reader as CdbReader;
/** */
require_once __DIR__ . '/commandLine.inc';
diff --git a/maintenance/checkComposerLockUpToDate.php b/maintenance/checkComposerLockUpToDate.php
new file mode 100644
index 00000000..0b77578d
--- /dev/null
+++ b/maintenance/checkComposerLockUpToDate.php
@@ -0,0 +1,63 @@
+<?php
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Checks whether your composer-installed dependencies are up to date
+ *
+ * Composer creates a "composer.lock" file which specifies which versions are installed
+ * (via `composer install`). It has a hash, which can be compared to the value of
+ * the composer.json file to see if dependencies are up to date.
+ */
+class CheckComposerLockUpToDate extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = 'Checks whether your composer.lock file is up to date with the current composer.json';
+ }
+
+ public function execute() {
+ global $IP;
+ $lockLocation = "$IP/composer.lock";
+ $jsonLocation = "$IP/composer.json";
+ if ( !file_exists( $lockLocation ) ) {
+ // Maybe they're using mediawiki/vendor?
+ $lockLocation = "$IP/vendor/composer.lock";
+ if ( !file_exists( $lockLocation ) ) {
+ $this->error( 'Could not find composer.lock file. Have you run "composer install"?', 1 );
+ }
+ }
+
+ $lock = new ComposerLock( $lockLocation );
+ $json = new ComposerJson( $jsonLocation );
+
+ if ( $lock->getHash() === $json->getHash() ) {
+ $this->output( "Your composer.lock file is up to date with current dependencies!\n" );
+ return;
+ }
+ // Out of date, lets figure out which dependencies are old
+ $found = false;
+ $installed = $lock->getInstalledDependencies();
+ foreach ( $json->getRequiredDependencies() as $name => $version ) {
+ if ( isset( $installed[$name] ) ) {
+ if ( $installed[$name]['version'] !== $version ) {
+ $this->output( "$name: {$installed[$name]['version']} installed, $version required.\n" );
+ $found = true;
+ }
+ } else {
+ $this->output( "$name: not installed, $version required.\n" );
+ $found = true;
+ }
+ }
+ if ( $found ) {
+ $this->error( 'Error: your composer.lock file is not up to date, run "composer update" to install newer dependencies', 1 );
+ } else {
+ // The hash is the entire composer.json file, so it can be updated without any of the dependencies changing
+ // We couldn't find any out-of-date dependencies, so assume everything is ok!
+ $this->output( "Your composer.lock file is up to date with current dependencies!\n" );
+ }
+
+ }
+}
+
+$maintClass = 'CheckComposerLockUpToDate';
+require_once RUN_MAINTENANCE_IF_MAIN; \ No newline at end of file
diff --git a/maintenance/checkLess.php b/maintenance/checkLess.php
index b97e1b0b..2f533cf4 100644
--- a/maintenance/checkLess.php
+++ b/maintenance/checkLess.php
@@ -22,7 +22,6 @@
*/
require_once __DIR__ . '/Maintenance.php';
-require_once 'PHPUnit/Autoload.php';
/**
* @ingroup Maintenance
@@ -43,6 +42,17 @@ class CheckLess extends Maintenance {
// require it here.
require_once __DIR__ . '/../tests/TestsAutoLoader.php';
+ // If phpunit isn't available by autoloader try pulling it in
+ if ( !class_exists( 'PHPUnit_Framework_TestCase' ) ) {
+ require_once 'PHPUnit/Autoload.php';
+ }
+
+ // RequestContext::resetMain() will print warnings unless this
+ // is defined.
+ if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+ define( 'MW_PHPUNIT_TEST', true );
+ }
+
$textUICommand = new PHPUnit_TextUI_Command();
$argv = array(
"$IP/tests/phpunit/phpunit.php",
diff --git a/maintenance/cleanupBlocks.php b/maintenance/cleanupBlocks.php
new file mode 100644
index 00000000..1736203b
--- /dev/null
+++ b/maintenance/cleanupBlocks.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Cleans up user blocks with user names not matching the 'user' table
+ *
+ * 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 to clean up user blocks with user names not matching the
+ * 'user' table.
+ *
+ * @ingroup Maintenance
+ */
+class CleanupBlocks extends Maintenance {
+
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = "Cleanup user blocks with user names not matching the 'user' table";
+ $this->setBatchSize( 1000 );
+ }
+
+ public function execute() {
+ $db = wfGetDB( DB_MASTER );
+
+ $max = $db->selectField( 'ipblocks', 'MAX(ipb_user)' );
+
+ // Step 1: Clean up any duplicate user blocks
+ for ( $from = 1; $from <= $max; $from += $this->mBatchSize ) {
+ $to = min( $max, $from + $this->mBatchSize - 1 );
+ $this->output( "Cleaning up duplicate ipb_user ($from-$to of $max)\n" );
+
+ $delete = array();
+
+ $res = $db->select(
+ 'ipblocks',
+ array( 'ipb_user' ),
+ array(
+ "ipb_user >= $from",
+ "ipb_user <= $to",
+ ),
+ __METHOD__,
+ array(
+ 'GROUP BY' => 'ipb_user',
+ 'HAVING' => 'COUNT(*) > 1',
+ )
+ );
+ foreach ( $res as $row ) {
+ $bestBlock = null;
+ $res2 = $db->select(
+ 'ipblocks',
+ '*',
+ array(
+ 'ipb_user' => $row->ipb_user,
+ )
+ );
+ foreach ( $res2 as $row2 ) {
+ $block = Block::newFromRow( $row2 );
+ if ( !$bestBlock ) {
+ $bestBlock = $block;
+ continue;
+ }
+
+ // Find the most-restrictive block. Can't use
+ // Block::chooseBlock because that's for IP blocks, not
+ // user blocks.
+ $keep = null;
+ if ( $keep === null && $block->getExpiry() !== $bestBlock->getExpiry() ) {
+ // This works for infinite blocks because 'infinity' > '20141024234513'
+ $keep = $block->getExpiry() > $bestBlock->getExpiry();
+ }
+ if ( $keep === null ) {
+ foreach ( array( 'createaccount', 'sendemail', 'editownusertalk' ) as $action ) {
+ if ( $block->prevents( $action ) xor $bestBlock->prevents( $action ) ) {
+ $keep = $block->prevents( $action );
+ break;
+ }
+ }
+ }
+
+ if ( $keep ) {
+ $delete[] = $bestBlock->getId();
+ $bestBlock = $block;
+ } else {
+ $delete[] = $block->getId();
+ }
+ }
+ }
+
+ if ( $delete ) {
+ $db->delete(
+ 'ipblocks',
+ array( 'ipb_id' => $delete ),
+ __METHOD__
+ );
+ }
+ }
+
+ // Step 2: Update the user name in any blocks where it doesn't match
+ for ( $from = 1; $from <= $max; $from += $this->mBatchSize ) {
+ $to = min( $max, $from + $this->mBatchSize - 1 );
+ $this->output( "Cleaning up mismatched user name ($from-$to of $max)\n" );
+
+ $res = $db->select(
+ array( 'ipblocks', 'user' ),
+ array( 'ipb_id', 'user_name' ),
+ array(
+ 'ipb_user = user_id',
+ "ipb_user >= $from",
+ "ipb_user <= $to",
+ 'ipb_address != user_name',
+ ),
+ __METHOD__
+ );
+ foreach ( $res as $row ) {
+ $db->update(
+ 'ipblocks',
+ array( 'ipb_address' => $row->user_name ),
+ array( 'ipb_id' => $row->ipb_id ),
+ __METHOD__
+ );
+ }
+ }
+
+ $this->output( "Done!\n" );
+ }
+}
+
+$maintClass = "CleanupBlocks";
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/cleanupCaps.php b/maintenance/cleanupCaps.php
index 9e88c135..6234db48 100644
--- a/maintenance/cleanupCaps.php
+++ b/maintenance/cleanupCaps.php
@@ -37,6 +37,9 @@ require_once __DIR__ . '/cleanupTable.inc';
* @ingroup Maintenance
*/
class CapsCleanup extends TableCleanup {
+
+ private $user;
+
public function __construct() {
parent::__construct();
$this->mDescription = "Script to cleanup capitalization";
@@ -44,13 +47,13 @@ class CapsCleanup extends TableCleanup {
}
public function execute() {
- global $wgCapitalLinks, $wgUser;
+ global $wgCapitalLinks;
if ( $wgCapitalLinks ) {
$this->error( "\$wgCapitalLinks is on -- no need for caps links cleanup.", true );
}
- $wgUser = User::newFromName( 'Conversion script' );
+ $this->user = User::newFromName( 'Conversion script' );
$this->namespace = intval( $this->getOption( 'namespace', 0 ) );
$this->dryrun = $this->hasOption( 'dry-run' );
@@ -87,7 +90,9 @@ class CapsCleanup extends TableCleanup {
$this->output( "\"$display\" -> \"$targetDisplay\": DRY RUN, NOT MOVED\n" );
$ok = true;
} else {
- $ok = $current->moveTo( $target, false, 'Converting page titles to lowercase' );
+ $mp = new MovePage( $current, $target );
+ $status = $mp->move( $this->user, 'Converting page titles to lowercase', true );
+ $ok = $status->isOK() ? 'OK' : $status->getWikiText();
$this->output( "\"$display\" -> \"$targetDisplay\": $ok\n" );
}
if ( $ok === true ) {
diff --git a/maintenance/convertExtensionToRegistration.php b/maintenance/convertExtensionToRegistration.php
new file mode 100644
index 00000000..acb8d3aa
--- /dev/null
+++ b/maintenance/convertExtensionToRegistration.php
@@ -0,0 +1,226 @@
+<?php
+
+require_once __DIR__ . '/Maintenance.php';
+
+class ConvertExtensionToRegistration extends Maintenance {
+
+ protected $custom = array(
+ 'MessagesDirs' => 'handleMessagesDirs',
+ 'ExtensionMessagesFiles' => 'removeAbsolutePath',
+ 'AutoloadClasses' => 'removeAbsolutePath',
+ 'ExtensionCredits' => 'handleCredits',
+ 'ResourceModules' => 'handleResourceModules',
+ 'ResourceModuleSkinStyles' => 'handleResourceModules',
+ 'Hooks' => 'handleHooks',
+ 'ExtensionFunctions' => 'handleExtensionFunctions',
+ 'ParserTestFiles' => 'removeAbsolutePath',
+ );
+
+ /**
+ * Things that were formerly globals and should still be converted
+ *
+ * @var array
+ */
+ protected $formerGlobals = array(
+ 'TrackingCategories',
+ );
+
+ /**
+ * No longer supported globals (with reason) should not be converted and emit a warning
+ *
+ * @var array
+ */
+ protected $noLongerSupportedGlobals = array(
+ 'SpecialPageGroups' => 'deprecated',
+ );
+
+ /**
+ * Keys that should be put at the top of the generated JSON file (T86608)
+ *
+ * @var array
+ */
+ protected $promote = array(
+ 'name',
+ 'version',
+ 'author',
+ 'url',
+ 'description',
+ 'descriptionmsg',
+ 'namemsg',
+ 'license-name',
+ 'type',
+ );
+
+ private $json, $dir, $hasWarning = false;
+
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = 'Converts extension entry points to the new JSON registration format';
+ $this->addArg( 'path', 'Location to the PHP entry point you wish to convert', /* $required = */ true );
+ $this->addOption( 'skin', 'Whether to write to skin.json', false, false );
+ }
+
+ protected function getAllGlobals() {
+ $processor = new ReflectionClass( 'ExtensionProcessor' );
+ $settings = $processor->getProperty( 'globalSettings' );
+ $settings->setAccessible( true );
+ return $settings->getValue() + $this->formerGlobals;
+ }
+
+ public function execute() {
+ // Extensions will do stuff like $wgResourceModules += array(...) which is a
+ // fatal unless an array is already set. So set an empty value.
+ // And use the weird $__settings name to avoid any conflicts
+ // with real poorly named settings.
+ $__settings = array_merge( $this->getAllGlobals(), array_keys( $this->custom ) );
+ foreach ( $__settings as $var ) {
+ $var = 'wg' . $var;
+ $$var = array();
+ }
+ unset( $var );
+ require $this->getArg( 0 );
+ // Try not to create any local variables before this line
+ $vars = get_defined_vars();
+ unset( $vars['this'] );
+ unset( $vars['__settings'] );
+ $this->dir = dirname( realpath( $this->getArg( 0 ) ) );
+ $this->json = array();
+ $globalSettings = $this->getAllGlobals();
+ foreach ( $vars as $name => $value ) {
+ $realName = substr( $name, 2 ); // Strip 'wg'
+
+ // If it's an empty array that we likely set, skip it
+ if ( is_array( $value ) && count( $value ) === 0 && in_array( $realName, $__settings ) ) {
+ continue;
+ }
+
+ if ( isset( $this->custom[$realName] ) ) {
+ call_user_func_array( array( $this, $this->custom[$realName] ), array( $realName, $value ) );
+ } elseif ( in_array( $realName, $globalSettings ) ) {
+ $this->json[$realName] = $value;
+ } elseif ( array_key_exists( $realName, $this->noLongerSupportedGlobals ) ) {
+ $this->output( 'Warning: Skipped global "' . $name . '" (' .
+ $this->noLongerSupportedGlobals[$realName] . '). ' .
+ "Please update the entry point before convert to registration.\n" );
+ $this->hasWarning = true;
+ } elseif ( strpos( $name, 'wg' ) === 0 ) {
+ // Most likely a config setting
+ $this->json['config'][$realName] = $value;
+ }
+ }
+
+ // Move some keys to the top
+ $out = array();
+ foreach ( $this->promote as $key ) {
+ if ( isset( $this->json[$key] ) ) {
+ $out[$key] = $this->json[$key];
+ unset( $this->json[$key] );
+ }
+ }
+ $out += $this->json;
+
+ $type = $this->hasOption( 'skin' ) ? 'skin' : 'extension';
+ $fname = "{$this->dir}/$type.json";
+ $prettyJSON = FormatJson::encode( $out, "\t", FormatJson::ALL_OK );
+ file_put_contents( $fname, $prettyJSON . "\n" );
+ $this->output( "Wrote output to $fname.\n" );
+ if ( $this->hasWarning ) {
+ $this->output( "Found warnings! Please resolve the warnings and rerun this script.\n" );
+ }
+ }
+
+ protected function handleExtensionFunctions( $realName, $value ) {
+ foreach ( $value as $func ) {
+ if ( $func instanceof Closure ) {
+ $this->error( "Error: Closures cannot be converted to JSON. Please move your extension function somewhere else.", 1 );
+ }
+ }
+
+ $this->json[$realName] = $value;
+ }
+
+ protected function handleMessagesDirs( $realName, $value ) {
+ foreach ( $value as $key => $dirs ) {
+ foreach ( (array)$dirs as $dir ) {
+ $this->json[$realName][$key][] = $this->stripPath( $dir, $this->dir );
+ }
+ }
+ }
+
+ private function stripPath( $val, $dir ) {
+ if ( $val === $dir ) {
+ $val = '';
+ } elseif ( strpos( $val, $dir ) === 0 ) {
+ // +1 is for the trailing / that won't be in $this->dir
+ $val = substr( $val, strlen( $dir ) + 1 );
+ }
+
+ return $val;
+ }
+
+ protected function removeAbsolutePath( $realName, $value ) {
+ $out = array();
+ foreach ( $value as $key => $val ) {
+ $out[$key] = $this->stripPath( $val, $this->dir );
+ }
+ $this->json[$realName] = $out;
+ }
+
+ protected function handleCredits( $realName, $value) {
+ $keys = array_keys( $value );
+ $this->json['type'] = $keys[0];
+ $values = array_values( $value );
+ foreach ( $values[0][0] as $name => $val ) {
+ if ( $name !== 'path' ) {
+ $this->json[$name] = $val;
+ }
+ }
+ }
+
+ public function handleHooks( $realName, $value ) {
+ foreach ( $value as $hookName => $handlers ) {
+ foreach ( $handlers as $func ) {
+ if ( $func instanceof Closure ) {
+ $this->error( "Error: Closures cannot be converted to JSON. Please move the handler for $hookName somewhere else.", 1 );
+ }
+ }
+ }
+ $this->json[$realName] = $value;
+ }
+
+ protected function handleResourceModules( $realName, $value ) {
+ $defaults = array();
+ $remote = $this->hasOption( 'skin' ) ? 'remoteSkinPath' : 'remoteExtPath';
+ foreach ( $value as $name => $data ) {
+ if ( isset( $data['localBasePath'] ) ) {
+ $data['localBasePath'] = $this->stripPath( $data['localBasePath'], $this->dir );
+ if ( !$defaults ) {
+ $defaults['localBasePath'] = $data['localBasePath'];
+ unset( $data['localBasePath'] );
+ if ( isset( $data[$remote] ) ) {
+ $defaults[$remote] = $data[$remote];
+ unset( $data[$remote] );
+ }
+ } else {
+ if ( $data['localBasePath'] === $defaults['localBasePath'] ) {
+ unset( $data['localBasePath'] );
+ }
+ if ( isset( $data[$remote] ) && isset( $defaults[$remote] )
+ && $data[$remote] === $defaults[$remote]
+ ) {
+ unset( $data[$remote] );
+ }
+ }
+ }
+
+
+ $this->json[$realName][$name] = $data;
+ }
+ if ( $defaults ) {
+ $this->json['ResourceFileModulePaths'] = $defaults;
+ }
+ }
+}
+
+$maintClass = 'ConvertExtensionToRegistration';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/dev/includes/router.php b/maintenance/dev/includes/router.php
index 0a65e31e..97c8954a 100644
--- a/maintenance/dev/includes/router.php
+++ b/maintenance/dev/includes/router.php
@@ -98,5 +98,5 @@ if ( $mime ) {
return true;
}
-# Let the php server handle things on it's own otherwise
+# Let the php server handle things on its own otherwise
return false;
diff --git a/maintenance/dictionary/mediawiki.dic b/maintenance/dictionary/mediawiki.dic
index df8a34ca..dd27c8ca 100644
--- a/maintenance/dictionary/mediawiki.dic
+++ b/maintenance/dictionary/mediawiki.dic
@@ -1811,7 +1811,6 @@ historysubmit
historywarning
hit
hitcount
-hitcounter
hits
hlist
hmac
@@ -2248,7 +2247,6 @@ logextract
loggedin
logid
login
-loginend
loginerror
loginfo
loginlanguagelinks
@@ -2259,7 +2257,6 @@ loginreqlink
loginreqpagetext
loginreqtitle
logins
-loginstart
logitem
loglink
loglist
@@ -2901,7 +2898,6 @@ numberofedits
numberoffiles
numberofpages
numberofusers
-numberofviews
numberofwatchingusers
numedits
numentries
@@ -4517,7 +4513,7 @@ what
whatlinkshere
whatwg
wheely
-wheter
+whether
whitelist
whitelisted
whitelistedittext
diff --git a/maintenance/doMaintenance.php b/maintenance/doMaintenance.php
index 46844c9d..4b9ad9c2 100644
--- a/maintenance/doMaintenance.php
+++ b/maintenance/doMaintenance.php
@@ -56,8 +56,8 @@ $self = $maintenance->getName();
# Start the autoloader, so that extensions can derive classes from core files
require_once "$IP/includes/AutoLoader.php";
-# Stub the profiler
-require_once "$IP/includes/profiler/Profiler.php";
+# Grab profiling functions
+require_once "$IP/includes/profiler/ProfilerFunctions.php";
# Start the profiler
$wgProfiler = array();
@@ -68,6 +68,7 @@ if ( file_exists( "$IP/StartProfiler.php" ) ) {
// Some other requires
require_once "$IP/includes/Defines.php";
require_once "$IP/includes/DefaultSettings.php";
+require_once "$IP/includes/GlobalFunctions.php";
# Load composer's autoloader if present
if ( is_readable( "$IP/vendor/autoload.php" ) ) {
@@ -91,29 +92,26 @@ if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
}
}
-$maintenance->setConfig( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
$maintenance->finalSetup();
// Some last includes
require_once "$IP/includes/Setup.php";
+// Initialize main config instance
+$maintenance->setConfig( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
+
// Do the work
-try {
- $maintenance->execute();
+$maintenance->execute();
- // Potentially debug globals
- $maintenance->globals();
+// Potentially debug globals
+$maintenance->globals();
- // Perform deferred updates.
- DeferredUpdates::doUpdates( 'commit' );
+// Perform deferred updates.
+DeferredUpdates::doUpdates( 'commit' );
- // log profiling info
- wfLogProfilingData();
+// log profiling info
+wfLogProfilingData();
- // Commit and close up!
- $factory = wfGetLBFactory();
- $factory->commitMasterChanges();
- $factory->shutdown();
-} catch ( MWException $mwe ) {
- echo $mwe->getText();
- exit( 1 );
-}
+// Commit and close up!
+$factory = wfGetLBFactory();
+$factory->commitMasterChanges();
+$factory->shutdown();
diff --git a/maintenance/dumpIterator.php b/maintenance/dumpIterator.php
index 4b2ff717..d8bc3a4d 100644
--- a/maintenance/dumpIterator.php
+++ b/maintenance/dumpIterator.php
@@ -54,7 +54,7 @@ abstract class DumpIterator extends Maintenance {
$this->checkOptions();
if ( $this->hasOption( 'file' ) ) {
- $revision = new WikiRevision;
+ $revision = new WikiRevision( $this->getConfig() );
$revision->setText( file_get_contents( $this->getOption( 'file' ) ) );
$revision->setTitle( Title::newFromText(
@@ -73,7 +73,7 @@ abstract class DumpIterator extends Maintenance {
$this->error( "Sorry, I don't support dump filenames yet. "
. "Use - and provide it on stdin on the meantime.", true );
}
- $importer = new WikiImporter( $source );
+ $importer = new WikiImporter( $source, $this->getConfig() );
$importer->setRevisionCallback(
array( &$this, 'handleRevision' ) );
diff --git a/maintenance/dumpSisterSites.php b/maintenance/dumpSisterSites.php
deleted file mode 100644
index 784dc7a8..00000000
--- a/maintenance/dumpSisterSites.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Quickie page name dump script for SisterSites usage.
- * http://www.eekim.com/cgi-bin/wiki.pl?SisterSites
- *
- * Copyright © 2006 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Maintenance
- */
-
-require_once __DIR__ . '/Maintenance.php';
-
-/**
- * Maintenance script that generates a page name dump for SisterSites usage.
- *
- * @ingroup Maintenance
- */
-class DumpSisterSites extends Maintenance {
- public function __construct() {
- parent::__construct();
- $this->mDescription = "Quickie page name dump script for SisterSites usage";
- }
-
- public function execute() {
- $dbr = wfGetDB( DB_SLAVE );
- $dbr->bufferResults( false );
- $result = $dbr->select( 'page',
- array( 'page_namespace', 'page_title' ),
- array(
- 'page_namespace' => NS_MAIN,
- 'page_is_redirect' => 0,
- ),
- __METHOD__ );
-
- foreach ( $result as $row ) {
- $title = Title::makeTitle( $row->page_namespace, $row->page_title );
- $url = $title->getFullURL();
- $text = $title->getPrefixedText();
- $this->output( "$url $text\n" );
- }
- }
-}
-
-$maintClass = "DumpSisterSites";
-require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/dumpTextPass.php b/maintenance/dumpTextPass.php
index 7c176071..bde5a076 100644
--- a/maintenance/dumpTextPass.php
+++ b/maintenance/dumpTextPass.php
@@ -59,6 +59,8 @@ Options:
--server=h Force reading from MySQL server h
--current Base ETA on number of pages in database instead of all revisions
--spawn Spawn a subprocess for loading text records
+ --buffersize=<size> Buffer size in bytes to use for reading the stub.
+ (Default: 512KB, Minimum: 4KB)
--help Display this help message
ENDS
);
diff --git a/maintenance/eval.php b/maintenance/eval.php
index 51f2cace..e20c477a 100644
--- a/maintenance/eval.php
+++ b/maintenance/eval.php
@@ -49,23 +49,20 @@ if ( isset( $options['d'] ) ) {
$lb->setServerInfo( $i, $server );
}
}
- if ( $d > 2 ) {
- $wgDebugFunctionEntry = true;
- }
}
-$useReadline = function_exists( 'readline_add_history' )
+$__useReadline = function_exists( 'readline_add_history' )
&& Maintenance::posix_isatty( 0 /*STDIN*/ );
-if ( $useReadline ) {
- $historyFile = isset( $_ENV['HOME'] ) ?
+if ( $__useReadline ) {
+ $__historyFile = isset( $_ENV['HOME'] ) ?
"{$_ENV['HOME']}/.mweval_history" : "$IP/maintenance/.mweval_history";
- readline_read_history( $historyFile );
+ readline_read_history( $__historyFile );
}
-$e = null; // PHP exception
-while ( ( $line = Maintenance::readconsole() ) !== false ) {
- if ( $e && !preg_match( '/^(exit|die);?$/', $line ) ) {
+$__e = null; // PHP exception
+while ( ( $__line = Maintenance::readconsole() ) !== false ) {
+ if ( $__e && !preg_match( '/^(exit|die);?$/', $__line ) ) {
// Internal state may be corrupted or fatals may occur later due
// to some object not being set. Don't drop out of eval in case
// lines were being pasted in (which would then get dumped to the shell).
@@ -73,23 +70,23 @@ while ( ( $line = Maintenance::readconsole() ) !== false ) {
echo "Exception was thrown before; please restart eval.php\n";
continue;
}
- if ( $useReadline ) {
- readline_add_history( $line );
- readline_write_history( $historyFile );
+ if ( $__useReadline ) {
+ readline_add_history( $__line );
+ readline_write_history( $__historyFile );
}
try {
- $val = eval( $line . ";" );
- } catch ( Exception $e ) {
- echo "Caught exception " . get_class( $e ) .
- ": {$e->getMessage()}\n" . $e->getTraceAsString() . "\n";
+ $__val = eval( $__line . ";" );
+ } catch ( Exception $__e ) {
+ echo "Caught exception " . get_class( $__e ) .
+ ": {$__e->getMessage()}\n" . $__e->getTraceAsString() . "\n";
continue;
}
- if ( wfIsHHVM() || is_null( $val ) ) {
+ if ( wfIsHHVM() || is_null( $__val ) ) {
echo "\n";
- } elseif ( is_string( $val ) || is_numeric( $val ) ) {
- echo "$val\n";
+ } elseif ( is_string( $__val ) || is_numeric( $__val ) ) {
+ echo "$__val\n";
} else {
- var_dump( $val );
+ var_dump( $__val );
}
}
diff --git a/maintenance/exportSites.php b/maintenance/exportSites.php
new file mode 100644
index 00000000..1c71dc0e
--- /dev/null
+++ b/maintenance/exportSites.php
@@ -0,0 +1,54 @@
+<?php
+
+$basePath = getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' ) : __DIR__ . '/..';
+
+require_once $basePath . '/maintenance/Maintenance.php';
+
+/**
+ * Maintenance script for exporting site definitions from XML into the sites table.
+ *
+ * @since 1.25
+ *
+ * @licence GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+class ExportSites extends Maintenance {
+
+ public function __construct() {
+ $this->mDescription = 'Exports site definitions the sites table to XML file';
+
+ $this->addArg( 'file', 'A file to write the XML to (see docs/sitelist.txt). Use "php://stdout" to write to stdout.', true );
+
+ parent::__construct();
+ }
+
+ /**
+ * Do the actual work. All child classes will need to implement this
+ */
+ public function execute() {
+ $file = $this->getArg( 0 );
+
+ if ( $file === 'php://output' || $file === 'php://stdout' ) {
+ $this->mQuiet = true;
+ }
+
+ $handle = fopen( $file, 'w' );
+
+ if ( !$handle ) {
+ $this->error( "Failed to open $file for writing.\n", 1 );
+ }
+
+ $exporter = new SiteExporter( $handle );
+
+ $sites = SiteSQLStore::newInstance()->getSites( 'recache' );
+ $exporter->exportSites( $sites );
+
+ fclose( $handle );
+
+ $this->output( "Exported sites to " . realpath( $file ) . ".\n" );
+ }
+
+}
+
+$maintClass = 'ExportSites';
+require_once( RUN_MAINTENANCE_IF_MAIN );
diff --git a/maintenance/fetchText.php b/maintenance/fetchText.php
index fc676b89..dd4f760f 100644
--- a/maintenance/fetchText.php
+++ b/maintenance/fetchText.php
@@ -32,7 +32,8 @@ require_once __DIR__ . '/Maintenance.php';
class FetchText extends Maintenance {
public function __construct() {
parent::__construct();
- $this->mDescription = "Fetch the revision text from an old_id";
+ $this->mDescription = "Fetch the raw revision blob from an old_id.";
+ $this->mDescription .= "\nNOTE: Export transformations are NOT applied. This is left to backupTextPass.php";
}
/**
@@ -43,7 +44,7 @@ class FetchText extends Maintenance {
* \n
* text (may be empty)
*
- * note that that the text string itself is *not* followed by newline
+ * note that the text string itself is *not* followed by newline
*/
public function execute() {
$db = wfGetDB( DB_SLAVE );
diff --git a/maintenance/findHooks.php b/maintenance/findHooks.php
index 36760d7e..5cf45367 100644
--- a/maintenance/findHooks.php
+++ b/maintenance/findHooks.php
@@ -91,6 +91,7 @@ class FindHooks extends Maintenance {
$IP . '/includes/jobqueue/',
$IP . '/includes/json/',
$IP . '/includes/logging/',
+ $IP . '/includes/mail/',
$IP . '/includes/media/',
$IP . '/includes/page/',
$IP . '/includes/parser/',
@@ -163,36 +164,39 @@ class FindHooks extends Maintenance {
* @return array Array of documented hooks
*/
private function getHooksFromOnlineDoc() {
- // All hooks
- $allhookdata = Http::get(
- 'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&'
- . 'cmtitle=Category:MediaWiki_hooks&cmlimit=500&format=php'
+ $allhooks = $this->getHooksFromOnlineDocCategory( 'MediaWiki_hooks' );
+ $removed = $this->getHooksFromOnlineDocCategory( 'Removed_hooks' );
+ return array_diff( $allhooks, $removed );
+ }
+
+ /**
+ * @param string $title
+ * @return array
+ */
+ private function getHooksFromOnlineDocCategory( $title ) {
+ $params = array(
+ 'action' => 'query',
+ 'list' => 'categorymembers',
+ 'cmtitle' => "Category:$title",
+ 'cmlimit' => 500,
+ 'format' => 'json',
+ 'continue' => '',
);
- $allhookdata = unserialize( $allhookdata );
- $allhooks = array();
- foreach ( $allhookdata['query']['categorymembers'] as $page ) {
- $found = preg_match( '/Manual\:Hooks\/([a-zA-Z0-9- :]+)/', $page['title'], $matches );
- if ( $found ) {
- $hook = str_replace( ' ', '_', $matches[1] );
- $allhooks[] = $hook;
+
+ $retval = array();
+ while ( true ) {
+ $json = Http::get( wfAppendQuery( 'http://www.mediawiki.org/w/api.php', $params ), array(), __METHOD__ );
+ $data = FormatJson::decode( $json, true );
+ foreach ( $data['query']['categorymembers'] as $page ) {
+ if ( preg_match( '/Manual\:Hooks\/([a-zA-Z0-9- :]+)/', $page['title'], $m ) ) {
+ $retval[] = str_replace( ' ', '_', $m[1] );
+ }
}
- }
- // Removed hooks
- $oldhookdata = Http::get(
- 'http://www.mediawiki.org/w/api.php?action=query&list=categorymembers&'
- . 'cmtitle=Category:Removed_hooks&cmlimit=500&format=php'
- );
- $oldhookdata = unserialize( $oldhookdata );
- $removed = array();
- foreach ( $oldhookdata['query']['categorymembers'] as $page ) {
- $found = preg_match( '/Manual\:Hooks\/([a-zA-Z0-9- :]+)/', $page['title'], $matches );
- if ( $found ) {
- $hook = str_replace( ' ', '_', $matches[1] );
- $removed[] = $hook;
+ if ( !isset( $data['continue'] ) ) {
+ return $retval;
}
+ $params = array_replace( $params, $data['continue'] );
}
-
- return array_diff( $allhooks, $removed );
}
/**
diff --git a/maintenance/findMissingFiles.php b/maintenance/findMissingFiles.php
index 5f9f643a..5818ee25 100644
--- a/maintenance/findMissingFiles.php
+++ b/maintenance/findMissingFiles.php
@@ -26,7 +26,7 @@ class FindMissingFiles extends Maintenance {
parent::__construct();
$this->mDescription = 'Find registered files with no corresponding file.';
- $this->addOption( 'start', 'Starting file name', false, true );
+ $this->addOption( 'start', 'Start after this file name', false, true );
$this->addOption( 'mtimeafter', 'Only include files changed since this time', false, true );
$this->addOption( 'mtimebefore', 'Only includes files changed before this time', false, true );
$this->setBatchSize( 300 );
@@ -42,9 +42,12 @@ class FindMissingFiles extends Maintenance {
$mtime1 = $dbr->timestampOrNull( $this->getOption( 'mtimeafter', null ) );
$mtime2 = $dbr->timestampOrNull( $this->getOption( 'mtimebefore', null ) );
- $joinTables = array( 'image' );
- $joinConds = array( 'image' => array( 'INNER JOIN', 'img_name = page_title' ) );
+ $joinTables = array();
+ $joinConds = array();
if ( $mtime1 || $mtime2 ) {
+ $joinTables[] = 'page';
+ $joinConds['page'] = array( 'INNER JOIN',
+ array( 'page_title = img_name', 'page_namespace' => NS_FILE ) );
$joinTables[] = 'logging';
$on = array( 'log_page = page_id', 'log_type' => array( 'upload', 'move', 'delete' ) );
if ( $mtime1 ) {
@@ -58,21 +61,22 @@ class FindMissingFiles extends Maintenance {
do {
$res = $dbr->select(
- array_merge( array( 'page' ), $joinTables ),
- array( 'img_name' => 'DISTINCT(page_title)' ),
- array( 'page_namespace' => NS_FILE,
- "page_title >= " . $dbr->addQuotes( $lastName ) ),
+ array_merge( array( 'image' ), $joinTables ),
+ array( 'name' => 'img_name' ),
+ array( "img_name > " . $dbr->addQuotes( $lastName ) ),
__METHOD__,
- array( 'ORDER BY' => 'page_title', 'LIMIT' => $this->mBatchSize ),
+ // DISTINCT causes a pointless filesort
+ array( 'ORDER BY' => 'name', 'GROUP BY' => 'name',
+ 'LIMIT' => $this->mBatchSize ),
$joinConds
);
// Check if any of these files are missing...
$pathsByName = array();
foreach ( $res as $row ) {
- $file = $repo->newFile( $row->img_name );
- $pathsByName[$row->img_name] = $file->getPath();
- $lastName = $row->img_name;
+ $file = $repo->newFile( $row->name );
+ $pathsByName[$row->name] = $file->getPath();
+ $lastName = $row->name;
}
$be->preloadFileStat( array( 'srcs' => $pathsByName ) );
foreach ( $pathsByName as $path ) {
diff --git a/maintenance/fixUserRegistration.php b/maintenance/fixUserRegistration.php
index 878593c7..40e09159 100644
--- a/maintenance/fixUserRegistration.php
+++ b/maintenance/fixUserRegistration.php
@@ -33,37 +33,57 @@ class FixUserRegistration extends Maintenance {
public function __construct() {
parent::__construct();
$this->mDescription = "Fix the user_registration field";
+ $this->setBatchSize( 1000 );
}
public function execute() {
- $dbr = wfGetDB( DB_SLAVE );
$dbw = wfGetDB( DB_MASTER );
- // Get user IDs which need fixing
- $res = $dbr->select( 'user', 'user_id', 'user_registration IS NULL', __METHOD__ );
- foreach ( $res as $row ) {
- $id = $row->user_id;
- // Get first edit time
- $timestamp = $dbr->selectField(
- 'revision',
- 'MIN(rev_timestamp)',
- array( 'rev_user' => $id ),
- __METHOD__
+ $lastId = 0;
+ do {
+ // Get user IDs which need fixing
+ $res = $dbw->select(
+ 'user',
+ 'user_id',
+ array(
+ 'user_id > ' . $dbw->addQuotes( $lastId ),
+ 'user_registration IS NULL'
+ ),
+ __METHOD__,
+ array(
+ 'LIMIT' => $this->mBatchSize,
+ 'ORDER BY' => 'user_id',
+ )
);
- // Update
- if ( !empty( $timestamp ) ) {
- $dbw->update(
- 'user',
- array( 'user_registration' => $timestamp ),
- array( 'user_id' => $id ),
+ foreach ( $res as $row ) {
+ $id = $row->user_id;
+ $lastId = $id;
+ // Get first edit time
+ $timestamp = $dbw->selectField(
+ 'revision',
+ 'MIN(rev_timestamp)',
+ array( 'rev_user' => $id ),
__METHOD__
);
- $this->output( "$id $timestamp\n" );
- } else {
- $this->output( "$id NULL\n" );
+ // Update
+ if ( $timestamp !== null ) {
+ $dbw->update(
+ 'user',
+ array( 'user_registration' => $timestamp ),
+ array( 'user_id' => $id ),
+ __METHOD__
+ );
+ $user = User::newFromId( $id );
+ $user->invalidateCache();
+ $this->output( "Set registration for #$id to $timestamp\n" );
+ } else {
+ $this->output( "Could not find registration for #$id NULL\n" );
+ }
}
- }
- $this->output( "\n" );
+ $this->output( "Waiting for slaves..." );
+ wfWaitForSlaves();
+ $this->output( " done.\n" );
+ } while ( $res->numRows() >= $this->mBatchSize );
}
}
diff --git a/maintenance/generateLocalAutoload.php b/maintenance/generateLocalAutoload.php
new file mode 100644
index 00000000..b8caa4d9
--- /dev/null
+++ b/maintenance/generateLocalAutoload.php
@@ -0,0 +1,25 @@
+<?php
+
+if ( PHP_SAPI != 'cli' ) {
+ die( "This script can only be run from the command line.\n" );
+}
+
+require_once __DIR__ . '/../includes/utils/AutoloadGenerator.php';
+
+// Mediawiki installation directory
+$base = dirname( __DIR__ );
+
+$generator = new AutoloadGenerator( $base, 'local' );
+foreach ( array( 'includes', 'languages', 'maintenance', 'mw-config' ) as $dir ) {
+ $generator->readDir( $base . '/' . $dir );
+}
+foreach ( glob( $base . '/*.php' ) as $file ) {
+ $generator->readFile( $file );
+}
+
+// This class is not defined, but might be added by the installer
+$generator->forceClassPath( 'MyLocalSettingsGenerator', "$base/mw-config/overrides.php" );
+
+// Write out the autoload
+$generator->generateAutoload( 'maintenance/generateLocalAutoload.php' );
+
diff --git a/maintenance/generateSitemap.php b/maintenance/generateSitemap.php
index 1930a22a..12711ea3 100644
--- a/maintenance/generateSitemap.php
+++ b/maintenance/generateSitemap.php
@@ -181,7 +181,14 @@ class GenerateSitemap extends Maintenance {
$this->setNamespacePriorities();
$this->url_limit = 50000;
$this->size_limit = pow( 2, 20 ) * 10;
- $this->fspath = self::init_path( $this->getOption( 'fspath', getcwd() ) );
+
+ # Create directory if needed
+ $fspath = $this->getOption( 'fspath', getcwd() );
+ if ( !wfMkdirParents( $fspath, null, __METHOD__ ) ) {
+ $this->error( "Can not create directory $fspath.", 1 );
+ }
+
+ $this->fspath = realpath( $fspath ) . DIRECTORY_SEPARATOR;
$this->urlpath = $this->getOption( 'urlpath', "" );
if ( $this->urlpath !== "" && substr( $this->urlpath, -1 ) !== '/' ) {
$this->urlpath .= '/';
@@ -239,20 +246,6 @@ class GenerateSitemap extends Maintenance {
}
/**
- * Create directory if it does not exist and return pathname with a trailing slash
- * @param string $fspath
- * @return null|string
- */
- private static function init_path( $fspath ) {
- # Create directory if needed
- if ( $fspath && !is_dir( $fspath ) ) {
- wfMkdirParents( $fspath, null, __METHOD__ ) or die( "Can not create directory $fspath.\n" );
- }
-
- return realpath( $fspath ) . DIRECTORY_SEPARATOR;
- }
-
- /**
* Generate a one-dimensional array of existing namespaces
*/
function generateNamespaces() {
diff --git a/maintenance/importDump.php b/maintenance/importDump.php
index 1f75bccf..ea8c84bb 100644
--- a/maintenance/importDump.php
+++ b/maintenance/importDump.php
@@ -270,7 +270,7 @@ TEXT;
$this->startTime = microtime( true );
$source = new ImportStreamSource( $handle );
- $importer = new WikiImporter( $source );
+ $importer = new WikiImporter( $source, $this->getConfig() );
if ( $this->hasOption( 'debug' ) ) {
$importer->setDebug( true );
diff --git a/maintenance/importImages.inc b/maintenance/importImages.inc
index b803e3da..4b839a0f 100644
--- a/maintenance/importImages.inc
+++ b/maintenance/importImages.inc
@@ -117,7 +117,7 @@ function findAuxFile( $file, $auxExtension, $maxStrip = 1 ) {
function getFileCommentFromSourceWiki( $wiki_host, $file ) {
$url = $wiki_host . '/api.php?action=query&format=xml&titles=File:'
. rawurlencode( $file ) . '&prop=imageinfo&&iiprop=comment';
- $body = Http::get( $url );
+ $body = Http::get( $url, array(), __METHOD__ );
if ( preg_match( '#<ii comment="([^"]*)" />#', $body, $matches ) == 0 ) {
return false;
}
@@ -128,7 +128,7 @@ function getFileCommentFromSourceWiki( $wiki_host, $file ) {
function getFileUserFromSourceWiki( $wiki_host, $file ) {
$url = $wiki_host . '/api.php?action=query&format=xml&titles=File:'
. rawurlencode( $file ) . '&prop=imageinfo&&iiprop=user';
- $body = Http::get( $url );
+ $body = Http::get( $url, array(), __METHOD__ );
if ( preg_match( '#<ii user="([^"]*)" />#', $body, $matches ) == 0 ) {
return false;
}
diff --git a/maintenance/importSiteScripts.php b/maintenance/importSiteScripts.php
index 7705ec9c..6566a60d 100644
--- a/maintenance/importSiteScripts.php
+++ b/maintenance/importSiteScripts.php
@@ -59,7 +59,7 @@ class ImportSiteScripts extends Maintenance {
$url = wfAppendQuery( $baseUrl, array(
'action' => 'raw',
'title' => "MediaWiki:{$page}" ) );
- $text = Http::get( $url );
+ $text = Http::get( $url, array(), __METHOD__ );
$wikiPage = WikiPage::factory( $title );
$content = ContentHandler::makeContent( $text, $wikiPage->getTitle() );
@@ -70,33 +70,40 @@ class ImportSiteScripts extends Maintenance {
protected function fetchScriptList() {
$data = array(
'action' => 'query',
- 'format' => 'php', //'json',
+ 'format' => 'json',
'list' => 'allpages',
'apnamespace' => '8',
'aplimit' => '500',
+ 'continue' => '',
);
$baseUrl = $this->getArg( 0 );
$pages = array();
- do {
+ while ( true ) {
$url = wfAppendQuery( $baseUrl, $data );
- $strResult = Http::get( $url );
- //$result = FormatJson::decode( $strResult ); // Still broken
- $result = unserialize( $strResult );
+ $strResult = Http::get( $url, array(), __METHOD__ );
+ $result = FormatJson::decode( $strResult, true );
- if ( !empty( $result['query']['allpages'] ) ) {
- foreach ( $result['query']['allpages'] as $page ) {
- if ( substr( $page['title'], -3 ) === '.js' ) {
- strtok( $page['title'], ':' );
- $pages[] = strtok( '' );
- }
+ $page = null;
+ foreach ( $result['query']['allpages'] as $page ) {
+ if ( substr( $page['title'], -3 ) === '.js' ) {
+ strtok( $page['title'], ':' );
+ $pages[] = strtok( '' );
}
}
- if ( !empty( $result['query-continue'] ) ) {
- $data['apfrom'] = $result['query-continue']['allpages']['apfrom'];
- $this->output( "Fetching new batch from {$data['apfrom']}\n" );
+
+ if ( $page !== null ) {
+ $this->output( "Fetched list up to {$page['title']}\n" );
+ }
+
+ if ( isset( $result['continue'] ) ) { // >= 1.21
+ $data = array_replace( $data, $result['continue'] );
+ } elseif ( isset( $result['query-continue']['allpages'] ) ) { // <= 1.20
+ $data = array_replace( $data, $result['query-continue']['allpages'] );
+ } else {
+ break;
}
- } while ( isset( $result['query-continue'] ) );
+ }
return $pages;
}
diff --git a/maintenance/importSites.php b/maintenance/importSites.php
new file mode 100644
index 00000000..7abb8d72
--- /dev/null
+++ b/maintenance/importSites.php
@@ -0,0 +1,52 @@
+<?php
+
+$basePath = getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' ) : __DIR__ . '/..';
+
+require_once $basePath . '/maintenance/Maintenance.php';
+
+/**
+ * Maintenance script for importing site definitions from XML into the sites table.
+ *
+ * @since 1.25
+ *
+ * @license GNU GPL v2+
+ * @author Daniel Kinzler
+ */
+class ImportSites extends Maintenance {
+
+ public function __construct() {
+ $this->mDescription = 'Imports site definitions from XML into the sites table.';
+
+ $this->addArg( 'file', 'An XML file containing site definitions (see docs/sitelist.txt). Use "php://stdin" to read from stdin.', true );
+
+ parent::__construct();
+ }
+
+
+ /**
+ * Do the import.
+ */
+ public function execute() {
+ $file = $this->getArg( 0 );
+
+ $importer = new SiteImporter( SiteSQLStore::newInstance() );
+ $importer->setExceptionCallback( array( $this, 'reportException' ) );
+
+ $importer->importFromFile( $file );
+
+ $this->output( "Done.\n" );
+ }
+
+ /**
+ * Outputs a message via the output() method.
+ *
+ * @param Exception $ex
+ */
+ public function reportException( Exception $ex ) {
+ $msg = $ex->getMessage();
+ $this->output( "$msg\n" );
+ }
+}
+
+$maintClass = 'ImportSites';
+require_once( RUN_MAINTENANCE_IF_MAIN );
diff --git a/maintenance/initSiteStats.php b/maintenance/initSiteStats.php
index 49e0e9d7..cac33ecc 100644
--- a/maintenance/initSiteStats.php
+++ b/maintenance/initSiteStats.php
@@ -34,11 +34,7 @@ class InitSiteStats extends Maintenance {
public function __construct() {
parent::__construct();
$this->mDescription = "Re-initialise the site statistics tables";
- $this->addOption(
- 'update',
- 'Update the existing statistics (preserves the ss_total_views field)'
- );
- $this->addOption( 'noviews', "Don't update the page view counter" );
+ $this->addOption( 'update', 'Update the existing statistics' );
$this->addOption( 'active', 'Also update active users count' );
$this->addOption( 'use-master', 'Count using the master database' );
}
@@ -63,12 +59,6 @@ class InitSiteStats extends Maintenance {
$image = $counter->files();
$this->output( "{$image}\n" );
- if ( !$this->hasOption( 'noviews' ) ) {
- $this->output( "Counting total page views..." );
- $views = $counter->views();
- $this->output( "{$views}\n" );
- }
-
if ( $this->hasOption( 'update' ) ) {
$this->output( "\nUpdating site statistics..." );
$counter->refresh();
diff --git a/maintenance/interwiki.list b/maintenance/interwiki.list
index 0660e55f..91c60c1c 100644
--- a/maintenance/interwiki.list
+++ b/maintenance/interwiki.list
@@ -1,77 +1,77 @@
# Based more or less on the public interwiki map from MeatballWiki
# Default interwiki prefixes...
-acronym|http://www.acronymfinder.com/~/search/af.aspx?string=exact&Acronym=$1|0
-advogato|http://www.advogato.org/$1|0
-arxiv|http://www.arxiv.org/abs/$1|0
-c2find|http://c2.com/cgi/wiki?FindPage&value=$1|0
-cache|http://www.google.com/search?q=cache:$1|0
-commons|https://commons.wikimedia.org/wiki/$1|0
-dictionary|http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1|0
-docbook|http://wiki.docbook.org/$1|0
-doi|http://dx.doi.org/$1|0
-drumcorpswiki|http://www.drumcorpswiki.com/$1|0
-dwjwiki|http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1|0
-elibre|http://enciclopedia.us.es/index.php/$1|0
-emacswiki|http://www.emacswiki.org/cgi-bin/wiki.pl?$1|0
-foldoc|http://foldoc.org/?$1|0
-foxwiki|http://fox.wikis.com/wc.dll?Wiki~$1|0
-freebsdman|http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1|0
-gej|http://www.esperanto.de/dej.malnova/aktivikio.pl?$1|0
-gentoo-wiki|http://gentoo-wiki.com/$1|0
-google|http://www.google.com/search?q=$1|0
-googlegroups|http://groups.google.com/groups?q=$1|0
-hammondwiki|http://www.dairiki.org/HammondWiki/$1|0
-hrwiki|http://www.hrwiki.org/wiki/$1|0
-imdb|http://www.imdb.com/find?q=$1&tt=on|0
-jargonfile|http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect=$1|0
-kmwiki|http://kmwiki.wikispaces.com/$1|0
-linuxwiki|http://linuxwiki.de/$1|0
-lojban|http://www.lojban.org/tiki/tiki-index.php?page=$1|0
-lqwiki|http://wiki.linuxquestions.org/wiki/$1|0
-lugkr|http://www.lug-kr.de/wiki/$1|0
-meatball|http://www.usemod.com/cgi-bin/mb.pl?$1|0
-mediawikiwiki|https://www.mediawiki.org/wiki/$1|0
-mediazilla|https://bugzilla.wikimedia.org/$1|0
-memoryalpha|http://en.memory-alpha.org/wiki/$1|0
-metawiki|http://sunir.org/apps/meta.pl?$1|0
-metawikimedia|https://meta.wikimedia.org/wiki/$1|0
-mozillawiki|http://wiki.mozilla.org/$1|0
-mw|http://www.mediawiki.org/wiki/$1|0
-oeis|http://oeis.org/$1|0
-openwiki|http://openwiki.com/ow.asp?$1|0
-ppr|http://c2.com/cgi/wiki?$1|0
-pythoninfo|http://wiki.python.org/moin/$1|0
-rfc|http://www.rfc-editor.org/rfc/rfc$1.txt|0
-s23wiki|http://s23.org/wiki/$1|0
-seattlewireless|http://seattlewireless.net/$1|0
-senseislibrary|http://senseis.xmp.net/?$1|0
-shoutwiki|http://www.shoutwiki.com/wiki/$1|0
-sourceforge|http://sourceforge.net/$1|0
-sourcewatch|http://www.sourcewatch.org/index.php?title=$1|0
-squeak|http://wiki.squeak.org/squeak/$1|0
-tejo|http://www.tejo.org/vikio/$1|0
-tmbw|http://www.tmbw.net/wiki/$1|0
-tmnet|http://www.technomanifestos.net/?$1|0
-theopedia|http://www.theopedia.com/$1|0
-twiki|http://twiki.org/cgi-bin/view/$1|0
-uea|http://uea.org/vikio/index.php/$1|0
-uncyclopedia|http://en.uncyclopedia.co/wiki/$1|0
-unreal|http://wiki.beyondunreal.com/$1|0
-usemod|http://www.usemod.com/cgi-bin/wiki.pl?$1|0
-webseitzwiki|http://webseitz.fluxent.com/wiki/$1|0
-wiki|http://c2.com/cgi/wiki?$1|0
-wikia|http://www.wikia.com/wiki/$1|0
-wikibooks|https://en.wikibooks.org/wiki/$1|0
-wikif1|http://www.wikif1.org/$1|0
-wikihow|http://www.wikihow.com/$1|0
-wikinfo|http://wikinfo.co/English/index.php/$1|0
-wikimedia|https://wikimediafoundation.org/wiki/$1|0
-wikinews|https://en.wikinews.org/wiki/$1|0
-wikipedia|https://en.wikipedia.org/wiki/$1|0
-wikiquote|https://en.wikiquote.org/wiki/$1|0
-wikisource|https://wikisource.org/wiki/$1|0
-wikispecies|https://species.wikimedia.org/wiki/$1|0
-wikiversity|https://en.wikiversity.org/wiki/$1|0
-wikivoyage|https://en.wikivoyage.org/wiki/$1|0
-wikt|https://en.wiktionary.org/wiki/$1|0
-wiktionary|https://en.wiktionary.org/wiki/$1|0
+acronym|http://www.acronymfinder.com/~/search/af.aspx?string=exact&Acronym=$1|0|
+advogato|http://www.advogato.org/$1|0|
+arxiv|http://www.arxiv.org/abs/$1|0|
+c2find|http://c2.com/cgi/wiki?FindPage&value=$1|0|
+cache|http://www.google.com/search?q=cache:$1|0|
+commons|https://commons.wikimedia.org/wiki/$1|0|https://commons.wikimedia.org/w/api.php
+dictionary|http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1|0|
+docbook|http://wiki.docbook.org/$1|0|
+doi|http://dx.doi.org/$1|0|
+drumcorpswiki|http://www.drumcorpswiki.com/$1|0|http://drumcorpswiki.com/api.php
+dwjwiki|http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1|0|
+elibre|http://enciclopedia.us.es/index.php/$1|0|http://enciclopedia.us.es/api.php
+emacswiki|http://www.emacswiki.org/cgi-bin/wiki.pl?$1|0|
+foldoc|http://foldoc.org/?$1|0|
+foxwiki|http://fox.wikis.com/wc.dll?Wiki~$1|0|
+freebsdman|http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1|0|
+gej|http://www.esperanto.de/dej.malnova/aktivikio.pl?$1|0|
+gentoo-wiki|http://gentoo-wiki.com/$1|0|
+google|http://www.google.com/search?q=$1|0|
+googlegroups|http://groups.google.com/groups?q=$1|0|
+hammondwiki|http://www.dairiki.org/HammondWiki/$1|0|
+hrwiki|http://www.hrwiki.org/wiki/$1|0|http://www.hrwiki.org/w/api.php
+imdb|http://www.imdb.com/find?q=$1&tt=on|0|
+jargonfile|http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect=$1|0|
+kmwiki|http://kmwiki.wikispaces.com/$1|0|
+linuxwiki|http://linuxwiki.de/$1|0|
+lojban|http://www.lojban.org/tiki/tiki-index.php?page=$1|0|
+lqwiki|http://wiki.linuxquestions.org/wiki/$1|0|
+lugkr|http://www.lug-kr.de/wiki/$1|0|
+meatball|http://www.usemod.com/cgi-bin/mb.pl?$1|0|
+mediawikiwiki|https://www.mediawiki.org/wiki/$1|0|https://www.mediawiki.org/w/api.php
+mediazilla|https://bugzilla.wikimedia.org/$1|0|
+memoryalpha|http://en.memory-alpha.org/wiki/$1|0|http://en.memory-alpha.org/api.php
+metawiki|http://sunir.org/apps/meta.pl?$1|0|
+metawikimedia|https://meta.wikimedia.org/wiki/$1|0|https://meta.wikimedia.org/w/api.php
+mozillawiki|http://wiki.mozilla.org/$1|0|https://wiki.mozilla.org/api.php
+mw|https://www.mediawiki.org/wiki/$1|0|https://www.mediawiki.org/w/api.php
+oeis|http://oeis.org/$1|0|
+openwiki|http://openwiki.com/ow.asp?$1|0|
+ppr|http://c2.com/cgi/wiki?$1|0|
+pythoninfo|http://wiki.python.org/moin/$1|0|
+rfc|http://www.rfc-editor.org/rfc/rfc$1.txt|0|
+s23wiki|http://s23.org/wiki/$1|0|http://s23.org/w/api.php
+seattlewireless|http://seattlewireless.net/$1|0|
+senseislibrary|http://senseis.xmp.net/?$1|0|
+shoutwiki|http://www.shoutwiki.com/wiki/$1|0|http://www.shoutwiki.com/w/api.php
+sourceforge|http://sourceforge.net/$1|0|
+sourcewatch|http://www.sourcewatch.org/index.php?title=$1|0|http://www.sourcewatch.org/api.php
+squeak|http://wiki.squeak.org/squeak/$1|0|
+tejo|http://www.tejo.org/vikio/$1|0|
+tmbw|http://www.tmbw.net/wiki/$1|0|http://tmbw.net/wiki/api.php
+tmnet|http://www.technomanifestos.net/?$1|0|
+theopedia|http://www.theopedia.com/$1|0|
+twiki|http://twiki.org/cgi-bin/view/$1|0|
+uea|http://uea.org/vikio/index.php/$1|0|http://uea.org/vikio/api.php
+uncyclopedia|http://en.uncyclopedia.co/wiki/$1|0|http://en.uncyclopedia.co/w/api.php
+unreal|http://wiki.beyondunreal.com/$1|0|http://wiki.beyondunreal.com/w/api.php
+usemod|http://www.usemod.com/cgi-bin/wiki.pl?$1|0|
+webseitzwiki|http://webseitz.fluxent.com/wiki/$1|0|
+wiki|http://c2.com/cgi/wiki?$1|0|
+wikia|http://www.wikia.com/wiki/$1|0|
+wikibooks|https://en.wikibooks.org/wiki/$1|0|https://en.wikibooks.org/w/api.php
+wikif1|http://www.wikif1.org/$1|0|
+wikihow|http://www.wikihow.com/$1|0|http://www.wikihow.com/api.php
+wikinfo|http://wikinfo.co/English/index.php/$1|0|
+wikimedia|https://wikimediafoundation.org/wiki/$1|0|https://wikimediafoundation.org/w/api.php
+wikinews|https://en.wikinews.org/wiki/$1|0|https://en.wikinews.org/w/api.php
+wikipedia|https://en.wikipedia.org/wiki/$1|0|https://en.wikipedia.org/w/api.php
+wikiquote|https://en.wikiquote.org/wiki/$1|0|https://en.wikiquote.org/w/api.php
+wikisource|https://wikisource.org/wiki/$1|0|https://wikisource.org/w/api.php
+wikispecies|https://species.wikimedia.org/wiki/$1|0|https://species.wikimedia.org/w/api.php
+wikiversity|https://en.wikiversity.org/wiki/$1|0|https://en.wikiversity.org/w/api.php
+wikivoyage|https://en.wikivoyage.org/wiki/$1|0|https://en.wikivoyage.org/w/api.php
+wikt|https://en.wiktionary.org/wiki/$1|0|https://en.wiktionary.org/w/api.php
+wiktionary|https://en.wiktionary.org/wiki/$1|0|https://en.wiktionary.org/w/api.php
diff --git a/maintenance/interwiki.sql b/maintenance/interwiki.sql
index aad0cc3b..0628773e 100644
--- a/maintenance/interwiki.sql
+++ b/maintenance/interwiki.sql
@@ -1,80 +1,80 @@
-- Based more or less on the public interwiki map from MeatballWiki
-- Default interwiki prefixes...
-REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local) VALUES
-('acronym','http://www.acronymfinder.com/~/search/af.aspx?string=exact&Acronym=$1',0),
-('advogato','http://www.advogato.org/$1',0),
-('arxiv','http://www.arxiv.org/abs/$1',0),
-('c2find','http://c2.com/cgi/wiki?FindPage&value=$1',0),
-('cache','http://www.google.com/search?q=cache:$1',0),
-('commons','https://commons.wikimedia.org/wiki/$1',0),
-('dictionary','http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1',0),
-('docbook','http://wiki.docbook.org/$1',0),
-('doi','http://dx.doi.org/$1',0),
-('drumcorpswiki','http://www.drumcorpswiki.com/$1',0),
-('dwjwiki','http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1',0),
-('elibre','http://enciclopedia.us.es/index.php/$1',0),
-('emacswiki','http://www.emacswiki.org/cgi-bin/wiki.pl?$1',0),
-('foldoc','http://foldoc.org/?$1',0),
-('foxwiki','http://fox.wikis.com/wc.dll?Wiki~$1',0),
-('freebsdman','http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1',0),
-('gej','http://www.esperanto.de/dej.malnova/aktivikio.pl?$1',0),
-('gentoo-wiki','http://gentoo-wiki.com/$1',0),
-('google','http://www.google.com/search?q=$1',0),
-('googlegroups','http://groups.google.com/groups?q=$1',0),
-('hammondwiki','http://www.dairiki.org/HammondWiki/$1',0),
-('hrwiki','http://www.hrwiki.org/wiki/$1',0),
-('imdb','http://www.imdb.com/find?q=$1&tt=on',0),
-('jargonfile','http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect=$1',0),
-('kmwiki','http://kmwiki.wikispaces.com/$1',0),
-('linuxwiki','http://linuxwiki.de/$1',0),
-('lojban','http://www.lojban.org/tiki/tiki-index.php?page=$1',0),
-('lqwiki','http://wiki.linuxquestions.org/wiki/$1',0),
-('lugkr','http://www.lug-kr.de/wiki/$1',0),
-('meatball','http://www.usemod.com/cgi-bin/mb.pl?$1',0),
-('mediawikiwiki','https://www.mediawiki.org/wiki/$1',0),
-('mediazilla','https://bugzilla.wikimedia.org/$1',0),
-('memoryalpha','http://en.memory-alpha.org/wiki/$1',0),
-('metawiki','http://sunir.org/apps/meta.pl?$1',0),
-('metawikimedia','https://meta.wikimedia.org/wiki/$1',0),
-('mozillawiki','http://wiki.mozilla.org/$1',0),
-('mw','http://www.mediawiki.org/wiki/$1',0),
-('oeis','http://oeis.org/$1',0),
-('openwiki','http://openwiki.com/ow.asp?$1',0),
-('ppr','http://c2.com/cgi/wiki?$1',0),
-('pythoninfo','http://wiki.python.org/moin/$1',0),
-('rfc','http://www.rfc-editor.org/rfc/rfc$1.txt',0),
-('s23wiki','http://s23.org/wiki/$1',0),
-('seattlewireless','http://seattlewireless.net/$1',0),
-('senseislibrary','http://senseis.xmp.net/?$1',0),
-('shoutwiki','http://www.shoutwiki.com/wiki/$1',0),
-('sourceforge','http://sourceforge.net/$1',0),
-('sourcewatch','http://www.sourcewatch.org/index.php?title=$1',0),
-('squeak','http://wiki.squeak.org/squeak/$1',0),
-('tejo','http://www.tejo.org/vikio/$1',0),
-('tmbw','http://www.tmbw.net/wiki/$1',0),
-('tmnet','http://www.technomanifestos.net/?$1',0),
-('theopedia','http://www.theopedia.com/$1',0),
-('twiki','http://twiki.org/cgi-bin/view/$1',0),
-('uea','http://uea.org/vikio/index.php/$1',0),
-('uncyclopedia','http://en.uncyclopedia.co/wiki/$1',0),
-('unreal','http://wiki.beyondunreal.com/$1',0),
-('usemod','http://www.usemod.com/cgi-bin/wiki.pl?$1',0),
-('webseitzwiki','http://webseitz.fluxent.com/wiki/$1',0),
-('wiki','http://c2.com/cgi/wiki?$1',0),
-('wikia','http://www.wikia.com/wiki/$1',0),
-('wikibooks','https://en.wikibooks.org/wiki/$1',0),
-('wikif1','http://www.wikif1.org/$1',0),
-('wikihow','http://www.wikihow.com/$1',0),
-('wikinfo','http://wikinfo.co/English/index.php/$1',0),
-('wikimedia','https://wikimediafoundation.org/wiki/$1',0),
-('wikinews','https://en.wikinews.org/wiki/$1',0),
-('wikipedia','https://en.wikipedia.org/wiki/$1',0),
-('wikiquote','https://en.wikiquote.org/wiki/$1',0),
-('wikisource','https://wikisource.org/wiki/$1',0),
-('wikispecies','https://species.wikimedia.org/wiki/$1',0),
-('wikiversity','https://en.wikiversity.org/wiki/$1',0),
-('wikivoyage','https://en.wikivoyage.org/wiki/$1',0),
-('wikt','https://en.wiktionary.org/wiki/$1',0),
-('wiktionary','https://en.wiktionary.org/wiki/$1',0)
+REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local,iw_api) VALUES
+('acronym','http://www.acronymfinder.com/~/search/af.aspx?string=exact&Acronym=$1',0,''),
+('advogato','http://www.advogato.org/$1',0,''),
+('arxiv','http://www.arxiv.org/abs/$1',0,''),
+('c2find','http://c2.com/cgi/wiki?FindPage&value=$1',0,''),
+('cache','http://www.google.com/search?q=cache:$1',0,''),
+('commons','https://commons.wikimedia.org/wiki/$1',0,'https://commons.wikimedia.org/w/api.php'),
+('dictionary','http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query=$1',0,''),
+('docbook','http://wiki.docbook.org/$1',0,''),
+('doi','http://dx.doi.org/$1',0,''),
+('drumcorpswiki','http://www.drumcorpswiki.com/$1',0,'http://drumcorpswiki.com/api.php'),
+('dwjwiki','http://www.suberic.net/cgi-bin/dwj/wiki.cgi?$1',0,''),
+('elibre','http://enciclopedia.us.es/index.php/$1',0,'http://enciclopedia.us.es/api.php'),
+('emacswiki','http://www.emacswiki.org/cgi-bin/wiki.pl?$1',0,''),
+('foldoc','http://foldoc.org/?$1',0,''),
+('foxwiki','http://fox.wikis.com/wc.dll?Wiki~$1',0,''),
+('freebsdman','http://www.FreeBSD.org/cgi/man.cgi?apropos=1&query=$1',0,''),
+('gej','http://www.esperanto.de/dej.malnova/aktivikio.pl?$1',0,''),
+('gentoo-wiki','http://gentoo-wiki.com/$1',0,''),
+('google','http://www.google.com/search?q=$1',0,''),
+('googlegroups','http://groups.google.com/groups?q=$1',0,''),
+('hammondwiki','http://www.dairiki.org/HammondWiki/$1',0,''),
+('hrwiki','http://www.hrwiki.org/wiki/$1',0,'http://www.hrwiki.org/w/api.php'),
+('imdb','http://www.imdb.com/find?q=$1&tt=on',0,''),
+('jargonfile','http://sunir.org/apps/meta.pl?wiki=JargonFile&redirect=$1',0,''),
+('kmwiki','http://kmwiki.wikispaces.com/$1',0,''),
+('linuxwiki','http://linuxwiki.de/$1',0,''),
+('lojban','http://www.lojban.org/tiki/tiki-index.php?page=$1',0,''),
+('lqwiki','http://wiki.linuxquestions.org/wiki/$1',0,''),
+('lugkr','http://www.lug-kr.de/wiki/$1',0,''),
+('meatball','http://www.usemod.com/cgi-bin/mb.pl?$1',0,''),
+('mediawikiwiki','https://www.mediawiki.org/wiki/$1',0,'https://www.mediawiki.org/w/api.php'),
+('mediazilla','https://bugzilla.wikimedia.org/$1',0,''),
+('memoryalpha','http://en.memory-alpha.org/wiki/$1',0,'http://en.memory-alpha.org/api.php'),
+('metawiki','http://sunir.org/apps/meta.pl?$1',0,''),
+('metawikimedia','https://meta.wikimedia.org/wiki/$1',0,'https://meta.wikimedia.org/w/api.php'),
+('mozillawiki','http://wiki.mozilla.org/$1',0,'https://wiki.mozilla.org/api.php'),
+('mw','https://www.mediawiki.org/wiki/$1',0,'https://www.mediawiki.org/w/api.php'),
+('oeis','http://oeis.org/$1',0,''),
+('openwiki','http://openwiki.com/ow.asp?$1',0,''),
+('ppr','http://c2.com/cgi/wiki?$1',0,''),
+('pythoninfo','http://wiki.python.org/moin/$1',0,''),
+('rfc','http://www.rfc-editor.org/rfc/rfc$1.txt',0,''),
+('s23wiki','http://s23.org/wiki/$1',0,'http://s23.org/w/api.php'),
+('seattlewireless','http://seattlewireless.net/$1',0,''),
+('senseislibrary','http://senseis.xmp.net/?$1',0,''),
+('shoutwiki','http://www.shoutwiki.com/wiki/$1',0,'http://www.shoutwiki.com/w/api.php'),
+('sourceforge','http://sourceforge.net/$1',0,''),
+('sourcewatch','http://www.sourcewatch.org/index.php?title=$1',0,'http://www.sourcewatch.org/api.php'),
+('squeak','http://wiki.squeak.org/squeak/$1',0,''),
+('tejo','http://www.tejo.org/vikio/$1',0,''),
+('tmbw','http://www.tmbw.net/wiki/$1',0,'http://tmbw.net/wiki/api.php'),
+('tmnet','http://www.technomanifestos.net/?$1',0,''),
+('theopedia','http://www.theopedia.com/$1',0,''),
+('twiki','http://twiki.org/cgi-bin/view/$1',0,''),
+('uea','http://uea.org/vikio/index.php/$1',0,'http://uea.org/vikio/api.php'),
+('uncyclopedia','http://en.uncyclopedia.co/wiki/$1',0,'http://en.uncyclopedia.co/w/api.php'),
+('unreal','http://wiki.beyondunreal.com/$1',0,'http://wiki.beyondunreal.com/w/api.php'),
+('usemod','http://www.usemod.com/cgi-bin/wiki.pl?$1',0,''),
+('webseitzwiki','http://webseitz.fluxent.com/wiki/$1',0,''),
+('wiki','http://c2.com/cgi/wiki?$1',0,''),
+('wikia','http://www.wikia.com/wiki/$1',0,''),
+('wikibooks','https://en.wikibooks.org/wiki/$1',0,'https://en.wikibooks.org/w/api.php'),
+('wikif1','http://www.wikif1.org/$1',0,''),
+('wikihow','http://www.wikihow.com/$1',0,'http://www.wikihow.com/api.php'),
+('wikinfo','http://wikinfo.co/English/index.php/$1',0,''),
+('wikimedia','https://wikimediafoundation.org/wiki/$1',0,'https://wikimediafoundation.org/w/api.php'),
+('wikinews','https://en.wikinews.org/wiki/$1',0,'https://en.wikinews.org/w/api.php'),
+('wikipedia','https://en.wikipedia.org/wiki/$1',0,'https://en.wikipedia.org/w/api.php'),
+('wikiquote','https://en.wikiquote.org/wiki/$1',0,'https://en.wikiquote.org/w/api.php'),
+('wikisource','https://wikisource.org/wiki/$1',0,'https://wikisource.org/w/api.php'),
+('wikispecies','https://species.wikimedia.org/wiki/$1',0,'https://species.wikimedia.org/w/api.php'),
+('wikiversity','https://en.wikiversity.org/wiki/$1',0,'https://en.wikiversity.org/w/api.php'),
+('wikivoyage','https://en.wikivoyage.org/wiki/$1',0,'https://en.wikivoyage.org/w/api.php'),
+('wikt','https://en.wiktionary.org/wiki/$1',0,'https://en.wiktionary.org/w/api.php'),
+('wiktionary','https://en.wiktionary.org/wiki/$1',0,'https://en.wiktionary.org/w/api.php')
;
diff --git a/maintenance/jsduck/CustomTags.rb b/maintenance/jsduck/CustomTags.rb
deleted file mode 100644
index 2aff9881..00000000
--- a/maintenance/jsduck/CustomTags.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-# Custom tags for JSDuck 5.x
-# See also:
-# - https://github.com/senchalabs/jsduck/wiki/Tags
-# - https://github.com/senchalabs/jsduck/wiki/Custom-tags
-# - https://github.com/senchalabs/jsduck/wiki/Custom-tags/7f5c32e568eab9edc8e3365e935bcb836cb11f1d
-require 'jsduck/tag/tag'
-
-class CommonTag < JsDuck::Tag::Tag
- def initialize
- @html_position = POS_DOC + 0.1
- @repeatable = true
- end
-
- def parse_doc(scanner, position)
- if @multiline
- return { :tagname => @tagname, :doc => :multiline }
- else
- text = scanner.match(/.*$/)
- return { :tagname => @tagname, :doc => text }
- end
- end
-
- def process_doc(context, tags, position)
- context[@tagname] = tags
- end
-
- def format(context, formatter)
- context[@tagname].each do |tag|
- tag[:doc] = formatter.format(tag[:doc])
- end
- end
-end
-
-class SourceTag < CommonTag
- def initialize
- @tagname = :source
- @pattern = "source"
- super
- end
-
- def to_html(context)
- context[@tagname].map do |source|
- <<-EOHTML
- <h3 class='pa'>Source</h3>
- #{source[:doc]}
- EOHTML
- end.join
- end
-end
-
-class SeeTag < CommonTag
- def initialize
- @tagname = :see
- @pattern = "see"
- super
- end
-
- def format(context, formatter)
- position = context[:files][0]
- context[@tagname].each do |tag|
- tag[:doc] = '<li>' + render_long_see(tag[:doc], formatter, position) + '</li>'
- end
- end
-
- def to_html(context)
- <<-EOHTML
- <h3 class="pa">Related</h3>
- <ul>
- #{ context[@tagname].map {|tag| tag[:doc] }.join("\n") }
- </ul>
- EOHTML
- end
-
- def render_long_see(tag, formatter, position)
- if tag =~ /\A([^\s]+)( .*)?\Z/m
- name = $1
- doc = $2 ? ': ' + $2 : ''
- return formatter.format("{@link #{name}} #{doc}")
- else
- JsDuck::Logger.warn(nil, 'Unexpected @see argument: "'+tag+'"', position)
- return tag
- end
- end
-end
-
-class ContextTag < CommonTag
- def initialize
- @tagname = :context
- @pattern = 'context'
- super
- end
-
- def format(context, formatter)
- position = context[:files][0]
- context[@tagname].each do |tag|
- tag[:doc] = render_long_context(tag[:doc], formatter, position)
- end
- end
-
- def to_html(context)
- <<-EOHTML
- <h3 class="pa">Context</h3>
- #{ context[@tagname].last[:doc] }
- EOHTML
- end
-
- def render_long_context(tag, formatter, position)
- if tag =~ /\A([^\s]+)/m
- name = $1
- return formatter.format("`context` : {@link #{name}}")
- else
- JsDuck::Logger.warn(nil, 'Unexpected @context argument: "'+tag+'"', position)
- return tag
- end
- end
-end
diff --git a/maintenance/jsduck/categories.json b/maintenance/jsduck/categories.json
index d6163bde..eab2b632 100644
--- a/maintenance/jsduck/categories.json
+++ b/maintenance/jsduck/categories.json
@@ -13,7 +13,9 @@
"mw.html",
"mw.html.Cdata",
"mw.html.Raw",
- "mw.hook"
+ "mw.hook",
+ "mw.template",
+ "mw.errorLogger"
]
},
{
@@ -21,6 +23,7 @@
"classes": [
"mw.Title",
"mw.Uri",
+ "mw.messagePoster.*",
"mw.notification",
"mw.Notification_",
"mw.user",
@@ -54,7 +57,8 @@
{
"name": "Interfaces",
"classes": [
- "mw.Feedback"
+ "mw.Feedback",
+ "mw.Feedback.Dialog"
]
},
{
@@ -69,8 +73,7 @@
"mw.log",
"mw.inspect",
"mw.inspect.reports",
- "mw.Debug",
- "mw.Debug.profile"
+ "mw.Debug"
]
}
]
diff --git a/maintenance/jsduck/custom_tags.rb b/maintenance/jsduck/custom_tags.rb
new file mode 100644
index 00000000..39589a06
--- /dev/null
+++ b/maintenance/jsduck/custom_tags.rb
@@ -0,0 +1,120 @@
+# Custom tags for JSDuck 5.x
+# See also:
+# - https://github.com/senchalabs/jsduck/wiki/Tags
+# - https://github.com/senchalabs/jsduck/wiki/Custom-tags
+# - https://github.com/senchalabs/jsduck/wiki/Custom-tags/7f5c32e568eab9edc8e3365e935bcb836cb11f1d
+require 'jsduck/tag/tag'
+
+class CommonTag < JsDuck::Tag::Tag
+ def initialize
+ @html_position = POS_DOC + 0.1
+ @repeatable = true
+ end
+
+ def parse_doc(scanner, _position)
+ if @multiline
+ return { tagname: @tagname, doc: :multiline }
+ else
+ text = scanner.match(/.*$/)
+ return { tagname: @tagname, doc: text }
+ end
+ end
+
+ def process_doc(context, tags, _position)
+ context[@tagname] = tags
+ end
+
+ def format(context, formatter)
+ context[@tagname].each do |tag|
+ tag[:doc] = formatter.format(tag[:doc])
+ end
+ end
+end
+
+class SourceTag < CommonTag
+ def initialize
+ @tagname = :source
+ @pattern = 'source'
+ super
+ end
+
+ def to_html(context)
+ context[@tagname].map do |source|
+ <<-EOHTML
+ <h3 class='pa'>Source</h3>
+ #{source[:doc]}
+ EOHTML
+ end.join
+ end
+end
+
+class SeeTag < CommonTag
+ def initialize
+ @tagname = :see
+ @pattern = 'see'
+ super
+ end
+
+ def format(context, formatter)
+ position = context[:files][0]
+ context[@tagname].each do |tag|
+ tag[:doc] = '<li>' + render_long_see(tag[:doc], formatter, position) + '</li>'
+ end
+ end
+
+ def to_html(context)
+ <<-EOHTML
+ <h3 class="pa">Related</h3>
+ <ul>
+ #{ context[@tagname].map { |tag| tag[:doc] }.join("\n") }
+ </ul>
+ EOHTML
+ end
+
+ def render_long_see(tag, formatter, position)
+ match = /\A([^\s]+)( .*)?\Z/m.match(tag)
+
+ if match
+ name = match[1]
+ doc = match[2] ? ': ' + match[2] : ''
+ return formatter.format("{@link #{name}} #{doc}")
+ else
+ JsDuck::Logger.warn(nil, 'Unexpected @see argument: "' + tag + '"', position)
+ return tag
+ end
+ end
+end
+
+class ContextTag < CommonTag
+ def initialize
+ @tagname = :context
+ @pattern = 'context'
+ super
+ end
+
+ def format(context, formatter)
+ position = context[:files][0]
+ context[@tagname].each do |tag|
+ tag[:doc] = render_long_context(tag[:doc], formatter, position)
+ end
+ end
+
+ def to_html(context)
+ <<-EOHTML
+ <h3 class="pa">Context</h3>
+ #{ context[@tagname].last[:doc] }
+ EOHTML
+ end
+
+ def render_long_context(tag, formatter, position)
+ match = /\A([^\s]+)/m.match(tag)
+
+ if match
+ name = match[1]
+ return formatter.format("`context` : {@link #{name}}")
+ else
+ JsDuck::Logger.warn(nil, 'Unexpected @context argument: "' + tag + '"', position)
+ return tag
+ end
+ end
+end
diff --git a/maintenance/jsduck/eg-iframe.html b/maintenance/jsduck/eg-iframe.html
index 7dc4afa8..fca839d9 100644
--- a/maintenance/jsduck/eg-iframe.html
+++ b/maintenance/jsduck/eg-iframe.html
@@ -3,14 +3,46 @@
<head>
<meta charset="utf-8">
<title>MediaWiki Code Example</title>
- <script src="modules/startup.js"></script>
+ <script>
+ /**
+ * Basic log console for the example iframe in documentation pages.
+ */
+ var log = ( function () {
+ var pre;
+ return function () {
+ var str, i, len, line;
+ if ( !pre ) {
+ pre = document.createElement( 'pre' );
+ pre.className = 'mw-jsduck-log';
+ ( document.body || document.documentElement ).appendChild( pre );
+ }
+ str = [];
+ for ( i = 0, len = arguments.length; i < len; i++ ) {
+ str.push( String( arguments[ i ] ) );
+ }
+ line = document.createElement( 'div' );
+ line.className = 'mw-jsduck-log-line';
+ line.appendChild(
+ document.createTextNode( str.join( ' , ' ) + '\n' )
+ );
+ pre.appendChild( line );
+ };
+ }() );
+
+ window.onerror = function ( error, filePath, linerNr ) {
+ log( error + '\n' + filePath + ':' + linerNr );
+ };
+ </script>
+ <script src="modules/src/startup.js"></script>
<script>
function startUp() {
mw.config = new mw.Map();
}
</script>
- <script src="modules/jquery/jquery.js"></script>
- <script src="modules/mediawiki/mediawiki.js"></script>
+ <script src="modules/lib/jquery/jquery.js"></script>
+ <script src="modules/src/mediawiki/mediawiki.js"></script>
+ <script src="modules/src/mediawiki/mediawiki.errorLogger.js"></script>
+ <script src="modules/src/mediawiki/mediawiki.startUp.js"></script>
<style>
.mw-jsduck-log {
position: relative;
@@ -45,30 +77,13 @@
</head>
<body>
<script>
- /**
- * Basic log console for the example iframe in documentation pages.
- */
- ( function () {
- var pre;
- mw.log = function () {
- var str, i, len, line;
- if ( !pre ) {
- pre = document.createElement( 'pre' );
- pre.className = 'mw-jsduck-log';
- document.body.appendChild( pre );
- }
- str = [];
- for ( i = 0, len = arguments.length; i < len; i++ ) {
- str.push( String( arguments[ i ] ) );
- }
- line = document.createElement( 'div' );
- line.className = 'mw-jsduck-log-line';
- line.appendChild(
- document.createTextNode( str.join( ' , ' ) + '\n' )
- );
- pre.appendChild( line );
- };
- }() );
+ if ( window.mw ) {
+ mw.log = log;
+ }
+
+ window.onerror = function ( error, filePath, linerNr ) {
+ log( filePath + ':' + linerNr );
+ };
/**
* Method called by jsduck to execute the example code.
@@ -78,7 +93,7 @@
eval( code );
callback && callback( true );
} catch ( e ) {
- mw.log( 'Uncaught exception: ' + e );
+ log( 'Uncaught ' + e );
callback && callback( false, e );
throw e;
}
diff --git a/maintenance/language/StatOutputs.php b/maintenance/language/StatOutputs.php
index 31ce7024..257fe146 100644
--- a/maintenance/language/StatOutputs.php
+++ b/maintenance/language/StatOutputs.php
@@ -23,7 +23,7 @@
* @author Antoine Musso <hashar at free dot fr>
*/
-/** A general output object. Need to be overriden */
+/** A general output object. Need to be overridden */
class StatsOutput {
function formatPercent( $subset, $total, $revert = false, $accuracy = 2 ) {
wfSuppressWarnings();
diff --git a/maintenance/language/checkLanguage.php b/maintenance/language/checkLanguage.php
index ec6e1226..bd9f9af8 100644
--- a/maintenance/language/checkLanguage.php
+++ b/maintenance/language/checkLanguage.php
@@ -29,6 +29,6 @@ $cli = new CheckLanguageCLI( $options );
try {
$cli->execute();
-} catch ( MWException $e ) {
+} catch ( Exception $e ) {
print 'Error: ' . $e->getMessage() . "\n";
}
diff --git a/maintenance/language/generateCollationData.php b/maintenance/language/generateCollationData.php
index 973cf7bc..550f4a33 100644
--- a/maintenance/language/generateCollationData.php
+++ b/maintenance/language/generateCollationData.php
@@ -323,7 +323,7 @@ class GenerateCollationData extends Maintenance {
$tertiaryCollator->sort( $x );
$cp = $x[0];
- $char = codepointToUtf8( $cp );
+ $char = UtfNormal\Utils::codepointToUtf8( $cp );
$headerChars[] = $char;
if ( $primaryCollator->compare( $char, $prevChar ) <= 0 ) {
$numOutOfOrder++;
@@ -337,7 +337,7 @@ class GenerateCollationData extends Maintenance {
if ( $this->debugOutFile ) {
fwrite( $this->debugOutFile, sprintf( "%05X %s %s (%s)\n", $cp, $weight, $char,
- implode( ' ', array_map( 'codepointToUtf8', $group ) ) ) );
+ implode( ' ', array_map( 'UtfNormal\Utils::codepointToUtf8', $group ) ) ) );
}
}
diff --git a/maintenance/language/generateNormalizerDataAr.php b/maintenance/language/generateNormalizerDataAr.php
index ece0450f..ac50d291 100644
--- a/maintenance/language/generateNormalizerDataAr.php
+++ b/maintenance/language/generateNormalizerDataAr.php
@@ -25,7 +25,7 @@ require_once __DIR__ . '/../Maintenance.php';
/**
* Generates the normalizer data file for Arabic.
- * For NFC see includes/normal.
+ * For NFC see includes/libs/normal.
*
* @ingroup MaintenanceLanguage
*/
@@ -117,8 +117,8 @@ class GenerateNormalizerDataAr extends Maintenance {
continue;
}
- $source = hexSequenceToUtf8( $data['Code'] );
- $dest = hexSequenceToUtf8( $m[2] );
+ $source = UtfNormal\Utils::hexSequenceToUtf8( $data['Code'] );
+ $dest = UtfNormal\Utils::hexSequenceToUtf8( $m[2] );
$pairs[$source] = $dest;
}
}
diff --git a/maintenance/language/generateNormalizerDataMl.php b/maintenance/language/generateNormalizerDataMl.php
index c7237cfe..8580187d 100644
--- a/maintenance/language/generateNormalizerDataMl.php
+++ b/maintenance/language/generateNormalizerDataMl.php
@@ -25,7 +25,7 @@ require_once __DIR__ . '/../Maintenance.php';
/**
* Generates the normalizer data file for Malayalam.
- * For NFC see includes/normal.
+ * For NFC see includes/libs/normal.
*
* @ingroup MaintenanceLanguage
*/
@@ -54,8 +54,8 @@ class GenerateNormalizerDataMl extends Maintenance {
$pairs = array();
foreach ( $hexPairs as $hexSource => $hexDest ) {
- $source = hexSequenceToUtf8( $hexSource );
- $dest = hexSequenceToUtf8( $hexDest );
+ $source = UtfNormal\Utils::hexSequenceToUtf8( $hexSource );
+ $dest = UtfNormal\Utils::hexSequenceToUtf8( $hexDest );
$pairs[$source] = $dest;
}
diff --git a/maintenance/language/generateUtf8Case.php b/maintenance/language/generateUtf8Case.php
index 0fd32427..3520b874 100644
--- a/maintenance/language/generateUtf8Case.php
+++ b/maintenance/language/generateUtf8Case.php
@@ -108,12 +108,12 @@ class GenerateUtf8Case extends Maintenance {
$data[$name] = $numberedData[$number];
}
- $source = hexSequenceToUtf8( $data['Code'] );
+ $source = UtfNormal\Utils::hexSequenceToUtf8( $data['Code'] );
if ( $data['Simple_Uppercase_Mapping'] ) {
- $upper[$source] = hexSequenceToUtf8( $data['Simple_Uppercase_Mapping'] );
+ $upper[$source] = UtfNormal\Utils::hexSequenceToUtf8( $data['Simple_Uppercase_Mapping'] );
}
if ( $data['Simple_Lowercase_Mapping'] ) {
- $lower[$source] = hexSequenceToUtf8( $data['Simple_Lowercase_Mapping'] );
+ $lower[$source] = UtfNormal\Utils::hexSequenceToUtf8( $data['Simple_Lowercase_Mapping'] );
}
}
diff --git a/maintenance/language/zhtable/Makefile.py b/maintenance/language/zhtable/Makefile.py
index f902e581..71641ef1 100644
--- a/maintenance/language/zhtable/Makefile.py
+++ b/maintenance/language/zhtable/Makefile.py
@@ -152,14 +152,12 @@ def applyExcludes( mlist, path ):
return mlist
def charManualTable( path ):
- fp = open( path, 'r', encoding = 'U8' )
- ret = {}
- for line in fp:
- elems = line.split( '#' )[0].split( '|' )
- elems = unichr3( *elems )
- if len( elems ) > 1:
- ret[elems[0]] = elems[1:]
- return ret
+ fp = open( path, 'r', encoding = 'U8' )
+ for line in fp:
+ elems = line.split( '#' )[0].split( '|' )
+ elems = unichr3( *elems )
+ if len( elems ) > 1:
+ yield elems[0], elems[1:]
def toManyRules( src_table ):
tomany = set()
@@ -299,7 +297,9 @@ def main():
# Unihan.txt
( t2s_1tomany, s2t_1tomany ) = unihanParser( han_dest )
+ t2s_1tomany.update( charManualTable( 'symme_supp.manual' ) )
t2s_1tomany.update( charManualTable( 'trad2simp.manual' ) )
+ s2t_1tomany.update( ( t[0], [f] ) for ( f, t ) in charManualTable( 'symme_supp.manual' ) )
s2t_1tomany.update( charManualTable( 'simp2trad.manual' ) )
if pyversion[:1] in ['2']:
@@ -369,8 +369,6 @@ def main():
toCN = dictToSortedList( customRules( 'toCN.manual' ), 1 )
# sorted list toHK
toHK = dictToSortedList( customRules( 'toHK.manual' ), 1 )
- # sorted list toSG
- toSG = dictToSortedList( customRules( 'toSG.manual' ), 1 )
# sorted list toTW
toTW = dictToSortedList( customRules( 'toTW.manual' ), 1 )
@@ -395,8 +393,6 @@ $zh2Hant = array(\n'''
+ PHPArray( toHK ) \
+ '\n);\n\n$zh2CN = array(\n' \
+ PHPArray( toCN ) \
- + '\n);\n\n$zh2SG = array(\n' \
- + PHPArray( toSG ) \
+ '\n);\n'
if pyversion[:1] in ['2']:
diff --git a/maintenance/language/zhtable/README b/maintenance/language/zhtable/README
index 7e3f87e2..e183e56c 100644
--- a/maintenance/language/zhtable/README
+++ b/maintenance/language/zhtable/README
@@ -1,13 +1,12 @@
The various .manual files contains special mappings not included in the
-unihan database, and phrases not included in the SCIM package.
+unihan database, and phrases not included in the SCIM package.
-- simp2trad.manual: Simplified to Traditional character mapping. Most
- data adapted from
+- symme_supp.manual: Supplementary character mapping of symmetric conversion
+ (1 to 1) between Simplified and Traditional Chinese.
- 冯寿忠,“非对称繁简字”对照表, 《语文建设通讯》1997-9第53期.
- /http://www.yywzw.com/jt/feng/fengb01.htm
+- simp2trad.manual: Simplified to Traditional asymmetric charactermapping.
-- trad2simp.manual: Traditional to Simplified character mapping.
+- trad2simp.manual: Traditional to Simplified asymmetric character mapping.
- simp2trad_noconvert.manual: Do not convert the chars as inapporiate.
@@ -18,16 +17,19 @@ unihan database, and phrases not included in the SCIM package.
- simpphrases.manual: Phrases in Simplified Chinese.
-- tradphrases_exclude.manual: Excluding several phrases from
- the SCIM phrases as inappoiated.
+- tradphrases_exclude.manual: Excluding several phrases from
+ the SCIM phrasesas inappoiated.
- simpphrases_exclude.manual: Excluding several phrases from
the SCIM phrases as inapporated.
-- toTrad.manual, toSimp.manual: Special phrase mappings that
+- toTrad.manual, toSimp.manual: Special phrase mappings that
tradphrases.manual or simphrases.manual cannot be handled.
-- toTW.manual, toCN.manual, toSG.manual and toHK.manual: Special phrase
- mappings.
+- toTW.manual, toCN.manual and toHK.manual: Special phrase mappings.
+
+* 為方便轉換,以上均含不完整詞組,請勿隨意刪除。
zhengzhu at gmail dot com & shinjiman at gmail dot com
+
+Modified by User:Chiefwei at Chinese Wikipedia in 2015. \ No newline at end of file
diff --git a/maintenance/language/zhtable/simp2trad.manual b/maintenance/language/zhtable/simp2trad.manual
index 1b84f8e7..da75c446 100644
--- a/maintenance/language/zhtable/simp2trad.manual
+++ b/maintenance/language/zhtable/simp2trad.manual
@@ -1,23 +1,10 @@
-U+03CE0㳠|U+06FBE澾|
-U+0447D䑽|U+26A99𦪙|
-U+0497A䥺|U+091FE釾|
-U+0497D䥽|U+093FA鏺|
-U+04983䦃|U+0942F鐯|
-U+04985䦅|U+09425鐥|
-U+04B6A䭪|U+297AF𩞯|
-U+04C9F䲟|U+09BA3鮣|
-U+04CA0䲠|U+09C06鰆|
-U+04CA1䲡|U+09C0C鰌|
-U+04CA2䲢|U+09C27鰧|
-U+04CA3䲣|U+04C77䱷|
-U+04DAE䶮|U+09F91龑|
U+04E07万|U+0842C萬|U+04E07万|
U+04E0E与|U+08207與|U+04E0E与|
U+04E11丑|U+04E11丑|U+0919C醜|
U+04E2A个|U+0500B個|U+07B87箇|
U+04E30丰|U+08C50豐|U+04E30丰|
U+04E3A为|U+070BA為|U+07232爲|
-U+04E48么|U+04E48么|U+09EBD麽|U+05E7A幺|U+09EBC麼|
+U+04E48么|U+09EBC麼|U+04E48么|U+09EBD麽|U+05E7A幺|
U+04E86了|U+04E86了|U+077AD瞭|
U+04E8E于|U+065BC於|U+04E8E于|
U+04E91云|U+096F2雲|U+04E91云|
@@ -31,13 +18,14 @@ U+04F19伙|U+04F19伙|U+05925夥|
U+04F2A伪|U+0507D偽|U+050DE僞|
U+04F53体|U+09AD4體|U+04F53体|
U+04F59余|U+04F59余|U+09918餘|
-U+04F63佣|U+04F63佣|U+050AD傭|
+U+04F63佣|U+050AD傭|U+04F63佣|
U+0501F借|U+0501F借|U+085C9藉|
U+0513F儿|U+05152兒|U+0513F儿|
U+0514B克|U+0514B克|U+0524B剋|
U+0515A党|U+09EE8黨|U+0515A党|
U+051AC冬|U+051AC冬|U+09F15鼕|
U+051B2冲|U+06C96沖|U+0885D衝|
+U+051C4凄|U+06DD2淒|U+060BD悽|
U+051C6准|U+051C6准|U+06E96準|
U+051E0几|U+05E7E幾|U+051E0几|
U+051EB凫|U+09CE7鳧|U+09CEC鳬|
@@ -52,7 +40,6 @@ U+0535C卜|U+0535C卜|U+08514蔔|
U+05360占|U+05360占|U+04F54佔|
U+05364卤|U+09E75鹵|U+06EF7滷|
U+05377卷|U+05377卷|U+06372捲|
-U+0537A卺|U+05DF9巹|
U+05382厂|U+05EE0廠|U+05382厂|
U+05386历|U+06B77歷|U+066C6曆|U+053A4厤|
U+05395厕|U+05EC1廁|U+053A0厠|
@@ -66,11 +53,12 @@ U+05408合|U+05408合|U+095A4閤|
U+0540A吊|U+0540A吊|U+05F14弔|
U+0540C同|U+0540C同|U+08855衕|
U+0540E后|U+05F8C後|U+0540E后|
-U+05411向|U+05411向|U+056AE嚮|U+066CF曏|
+U+05411向|U+05411向|U+056AE嚮|
U+0542F启|U+0555F啟|U+05553啓|
U+05446呆|U+05446呆|U+07343獃|
U+054B8咸|U+054B8咸|U+09E79鹹|
U+054C4哄|U+054C4哄|U+09B28鬨|
+U+0556E啮|U+09F67齧|U+056D3囓|U+05699嚙|
U+05582喂|U+05582喂|U+09935餵|
U+056DE回|U+056DE回|U+08FF4迴|
U+056E2团|U+05718團|U+07CF0糰|
@@ -78,10 +66,10 @@ U+056F0困|U+056F0困|U+0774F睏|
U+05742坂|U+05742坂|U+0962A阪|
U+0574F坏|U+058DE壞|U+0574F坏|
U+0575B坛|U+058C7壇|U+07F48罈|
-U+057FC埼|U+057FC埼|U+07895碕|
U+05899墙|U+07246牆|U+058BB墻|
U+058F3壳|U+06BBC殼|U+06BBB殻|
U+0590D复|U+05FA9復|U+08907複|
+U+05938夸|U+05938夸|U+08A87誇|
U+05956奖|U+0734E獎|U+0596C奬|
U+05978奸|U+05978奸|U+059E6姦|
U+059AB妫|U+05AAF媯|U+05B00嬀|
@@ -92,12 +80,13 @@ U+05C3D尽|U+076E1盡|U+05118儘|
U+05CB3岳|U+05CB3岳|U+05DBD嶽|
U+05E03布|U+05E03布|U+04F48佈|
U+05E18帘|U+07C3E簾|U+05E18帘|
-U+05E5E幞|U+08946襆|
+U+05E2D席|U+05E2D席|U+084C6蓆|
U+05E72干|U+05E72干|U+04E7E乾|U+05E79幹|U+069A6榦|
+U+05E7A幺|U+04E48么|
U+05E76并|U+04E26並|U+04F75併|
U+05E78幸|U+05E78幸|U+05016倖|
U+05E7F广|U+05EE3廣|U+05E7F广|
-U+05E84庄|U+05E84庄|U+0838A莊|
+U+05E84庄|U+0838A莊|U+05E84庄|
U+05EB5庵|U+05EB5庵|U+083F4菴|
U+05F25弥|U+05F4C彌|U+07030瀰|
U+05F53当|U+07576當|U+05679噹|
@@ -126,6 +115,7 @@ U+066F2曲|U+066F2曲|U+09EAF麯|U+09EB4麯|
U+0672F术|U+08853術|U+0672E朮|
U+06731朱|U+06731朱|U+07843硃|
U+06734朴|U+06734朴|U+06A38樸|
+U+06760杠|U+069D3槓|U+06760杠|
U+0676F杯|U+0676F杯|U+076C3盃|
U+0677E松|U+0677E松|U+09B06鬆|
U+0677F板|U+0677F板|U+095C6闆|
@@ -143,15 +133,18 @@ U+06CE8注|U+06CE8注|U+08A3B註|
U+06D82涂|U+05857塗|U+06D82涂|
U+06D8C涌|U+06D8C涌|U+06E67湧|
U+06DC0淀|U+06DC0淀|U+06FB1澱|
+U+06E16渖|U+0700B瀋|
U+06E38游|U+06E38游|U+0904A遊|
U+06EAF溯|U+06EAF溯|U+06CDD泝|
U+06F13漓|U+06F13漓|U+07055灕|
U+070BC炼|U+07149煉|U+0934A鍊|
+U+07096炖|U+071C9燉|
U+0753B画|U+0756B畫|U+07575畵|
U+075C7症|U+075C7症|U+07665癥|
U+07618瘘|U+0763A瘺|U+0763B瘻|
U+0786E确|U+078BA確|U+0786E确|
-U+07877硷|U+07906礆|U+09E7C鹼|
+U+07877硷|U+09E7C鹼|U+07906礆|
+U+078B1碱|U+09E7C鹼|
U+079CB秋|U+079CB秋|U+097A6鞦|
U+079CD种|U+07A2E種|U+079CD种|
U+07A57穗|U+07A57穗|U+07E50繐|
@@ -163,35 +156,33 @@ U+07D2F累|U+07D2F累|U+07E8D纍|
U+07EA4纤|U+07E96纖|U+07E34縴|
U+07EBF线|U+07DDA線|U+07DAB綫|
U+07EDD绝|U+07D55絕|U+07D76絶|
-U+07EE3绣|U+07D89綉|U+07E61繡|
+U+07EE3绣|U+07E61繡|U+07D89綉|
U+07EE6绦|U+07D5B絛|U+07E27縧|
-U+07EF1绱|U+07DD4緔|U+0979D鞝|
-U+07EF7绷|U+07DB3綳|U+07E43繃|
+U+07EF1绱|U+0979D鞝|U+07DD4緔|
+U+07EF7绷|U+07E43繃|U+07DB3綳|
U+07EFF绿|U+07DA0綠|U+07DD1緑|
+U+07F10缐|U+07DDA線|
U+07F30缰|U+097C1韁|U+07E6E繮|
U+07FA1羡|U+07FA8羨|
U+080DC胜|U+052DD勝|U+080DC胜|
U+080E1胡|U+080E1胡|U+09B0D鬍|U+0885A衚|
-U+0810F脏|U+081DF臟|U+09AD2髒|
+U+0810F脏|U+09AD2髒|U+081DF臟|
U+0814A腊|U+081D8臘|U+0814A腊|
U+081F4致|U+081F4致|U+07DFB緻|
U+0820D舍|U+0820D舍|U+06368捨|
U+082B8芸|U+082B8芸|U+08553蕓|
-U+082CE苎|U+082E7苧|
U+082CF苏|U+08607蘇|U+056CC囌|U+07C64甦|
-U+082E7苧|U+085B4薴|
-U+082F9苹|U+0860B蘋|U+082F9苹|
U+08303范|U+08303范|U+07BC4範|
-U+0836F药|U+0846F葯|U+085E5藥|
+U+0836F药|U+085E5藥|U+0846F葯|
U+083B7获|U+07372獲|U+07A6B穫|
-U+083BC莼|U+08493蒓|U+084F4蓴|
+U+083BC莼|U+084F4蓴|U+08493蒓|
U+08499蒙|U+08499蒙|U+077C7矇|U+06FDB濛|U+061DE懞|
U+084D1蓑|U+084D1蓑|U+07C11簑|
U+08511蔑|U+08511蔑|U+0884A衊|
U+08574蕴|U+0860A蘊|U+085F4藴|
U+0866B虫|U+087F2蟲|U+0866B虫|
U+08721蜡|U+0881F蠟|U+08721蜡|
-U+0874E蝎|U+0880D蠍|
+U+0874E蝎|U+0880D蠍|U+0874E蝎|
U+08868表|U+08868表|U+09336錶|
U+08BF4说|U+08AAA說|U+08AAC説|
U+08C23谣|U+08B20謠|U+08B21謡|
@@ -209,22 +200,22 @@ U+09170酰|U+09170酰|U+091AF醯|
U+09178酸|U+09178酸|U+075E0痠|
U+091C7采|U+091C7采|U+063A1採|U+057F0埰|
U+091CC里|U+091CC里|U+088E1裡|U+088CF裏|
-U+093AD鎭|U+093AE鎮|
U+0949F钟|U+0937E鍾|U+09418鐘|
-U+094A9钩|U+09264鉤|U+0920E鈎|
+U+094A9钩|U+0920E鈎|U+09264鉤|
U+094B5钵|U+07F3D缽|U+09262鉢|
U+094F2铲|U+093DF鏟|U+05277剷|
U+09508锈|U+092B9銹|U+093FD鏽|
U+09510锐|U+092B3銳|U+092ED鋭|
U+09528锨|U+06774杴|U+09341鍁|
+U+0954B镋|U+09482钂|U+093B2鎲|
U+0954C镌|U+0942B鐫|U+093B8鎸|
U+09562镢|U+09481钁|U+0941D鐝|
U+09605阅|U+095B1閱|U+095B2閲|
U+096C7雇|U+096C7雇|U+050F1僱|
U+096D5雕|U+096D5雕|U+09D70鵰|
+U+095F2闲|U+09592閒|U+09591閑|
U+09709霉|U+09709霉|U+09EF4黴|
U+09762面|U+09762面|U+09EB5麵|U+09EAA麪|U+09EAB麫|
-U+097B2鞲|U+097DD韝|
U+0987B须|U+09808須|U+09B1A鬚|
U+09893颓|U+09839頹|U+0983D頽|
U+0989C颜|U+0984F顏|U+09854顔|
@@ -232,141 +223,11 @@ U+09965饥|U+098E2飢|U+09951饑|
U+09980馀|U+09918餘|
U+09986馆|U+09928館|U+08218舘|
U+09A82骂|U+07F75罵|U+099E1駡|
+U+09CC1鳁|U+09C2E鰮|
U+09C87鲇|U+09BF0鯰|U+09B8E鮎|
U+09C9E鲞|U+09BD7鯗|U+09B9D鮝|
U+09CC4鳄|U+09C77鱷|U+09C10鰐|
U+09E21鸡|U+096DE雞|U+09DC4鷄|
U+09E5A鹚|U+09DBF鶿|U+09DC0鷀|
-U+09E6E鹮|U+04D09䴉|
-U+09F44齄|U+09F47齇|
-U+20BB6𠮶|U+055F0嗰|
-U+26216𦈖|U+04308䌈|
-U+28C3E𨰾|U+093B7鎷|
-U+28C3F𨰿|U+091F3釳|
-U+28C40𨱀|U+2895B𨥛|
-U+28C41𨱁|U+09220鈠|
-U+28C42𨱂|U+0920B鈋|
-U+28C43𨱃|U+09232鈲|
-U+28C44𨱄|U+0922F鈯|
-U+28C45𨱅|U+09241鉁|
-U+28C47𨱇|U+092B6銶|
-U+28C48𨱈|U+092C9鋉|
-U+28C49𨱉|U+09344鍄|
-U+28C4A𨱊|U+289F1𨧱|
-U+28C4B𨱋|U+09302錂|
-U+28C4C𨱌|U+093C6鏆|
-U+28C4D𨱍|U+093AF鎯|
-U+28C4E𨱎|U+0936E鍮|
-U+28C4F𨱏|U+0939D鎝|
-U+28C50𨱐|U+28AD2𨫒|
-U+28C52𨱒|U+093C9鏉|
-U+28C53𨱓|U+0940E鐎|
-U+28C54𨱔|U+0940F鐏|
-U+28C55𨱕|U+28B82𨮂|
-U+28E02𨸂|U+0958D閍|
-U+28E03𨸃|U+09590閐|
-U+293FC𩏼|U+04A8F䪏|
-U+293FD𩏽|U+293EA𩏪|
-U+293FE𩏾|U+293A2𩎢|
-U+293FF𩏿|U+04A98䪘|
-U+29400𩐀|U+04A97䪗|
-U+29595𩖕|U+294E3𩓣|
-U+29596𩖖|U+09843顃|
-U+29597𩖗|U+04AF4䫴|
-U+29665𩙥|U+098B0颰|
-U+29666𩙦|U+295C0𩗀|
-U+29667𩙧|U+295E1𩗡|
-U+29668𩙨|U+29639𩘹|
-U+29669𩙩|U+29600𩘀|
-U+2966A𩙪|U+098B7颷|
-U+2966B𩙫|U+098BE颾|
-U+2966C𩙬|U+2963A𩘺|
-U+2966D𩙭|U+2961D𩘝|
-U+2966E𩙮|U+04B18䬘|
-U+2966F𩙯|U+04B1D䬝|
-U+29670𩙰|U+29648𩙈|
-U+29805𩠅|U+297D0𩟐|
-U+29806𩠆|U+29726𩜦|
-U+29807𩠇|U+04B40䭀|
-U+29808𩠈|U+04B43䭃|
-U+2980B𩠋|U+29754𩝔|
-U+2980C𩠌|U+09938餸|
-U+299E6𩧦|U+2987A𩡺|
-U+299E8𩧨|U+099CE駎|
-U+299E9𩧩|U+2990A𩤊|
-U+299EA𩧪|U+04BBE䮾|
-U+299EB𩧫|U+099DA駚|
-U+299EC𩧬|U+298A1𩢡|
-U+299ED𩧭|U+04B7F䭿|
-U+299EE𩧮|U+298BE𩢾|
-U+299EF𩧯|U+09A4B驋|
-U+299F0𩧰|U+04B9D䮝|
-U+299F1𩧱|U+29949𩥉|
-U+299F2𩧲|U+099E7駧|
-U+299F3𩧳|U+298B8𩢸|
-U+299F4𩧴|U+099E9駩|
-U+299F5𩧵|U+298B4𩢴|
-U+299F6𩧶|U+298CF𩣏|
-U+299FA𩧺|U+099F6駶|
-U+299FB𩧻|U+298F5𩣵|
-U+299FC𩧼|U+298FA𩣺|
-U+299FF𩧿|U+04BA0䮠|
-U+29A00𩨀|U+09A14騔|
-U+29A01𩨁|U+04B9E䮞|
-U+29A03𩨃|U+09A1D騝|
-U+29A04𩨄|U+09A2A騪|
-U+29A05𩨅|U+29938𩤸|
-U+29A06𩨆|U+29919𩤙|
-U+29A08𩨈|U+09A1F騟|
-U+29A09𩨉|U+29932𩤲|
-U+29A0A𩨊|U+09A1A騚|
-U+29A0B𩨋|U+29944𩥄|
-U+29A0C𩨌|U+29951𩥑|
-U+29A0D𩨍|U+29947𩥇|
-U+29A0F𩨏|U+04BB3䮳|
-U+29A10𩨐|U+299C6𩧆|
-U+29F79𩽹|U+09B65魥|
-U+29F7A𩽺|U+29D69𩵩|
-U+29F7B𩽻|U+29D79𩵹|
-U+29F7C𩽼|U+09BF6鯶|
-U+29F7D𩽽|U+29DB1𩶱|
-U+29F7E𩽾|U+09B9F鮟|
-U+29F7F𩽿|U+29DB0𩶰|
-U+29F80𩾀|U+09B95鮕|
-U+29F81𩾁|U+09BC4鯄|
-U+29F83𩾃|U+09BB8鮸|
-U+29F84𩾄|U+29DF0𩷰|
-U+29F85𩾅|U+29E03𩸃|
-U+29F86𩾆|U+29E26𩸦|
-U+29F87𩾇|U+09BF1鯱|
-U+29F88𩾈|U+04C59䱙|
-U+29F8A𩾊|U+04C6C䱬|
-U+29F8B𩾋|U+04C70䱰|
-U+29F8C𩾌|U+09C47鱇|
-U+29F8C𩾌|U+09C47鱇|
-U+29F8E𩾎|U+29F47𩽇|
-U+2A242𪉂|U+04CB0䲰|
-U+2A243𪉃|U+09CFC鳼|
-U+2A244𪉄|U+29FEA𩿪|
-U+2A245𪉅|U+2A026𪀦|
-U+2A246𪉆|U+09D32鴲|
-U+2A248𪉈|U+09D1C鴜|
-U+2A249𪉉|U+2A048𪁈|
-U+2A24A𪉊|U+09DE8鷨|
-U+2A24B𪉋|U+2A03E𪀾|
-U+2A24C𪉌|U+2A056𪁖|
-U+2A24D𪉍|U+09D5A鵚|
-U+2A24E𪉎|U+2A086𪂆|
-U+2A24F𪉏|U+2A0CF𪃏|
-U+2A250𪉐|U+2A0CD𪃍|
-U+2A251𪉑|U+09DD4鷔|
-U+2A252𪉒|U+2A115𪄕|
-U+2A254𪉔|U+2A106𪄆|
-U+2A255𪉕|U+2A1F3𪇳|
-U+2A388𪎈|U+04D2C䴬|
-U+2A389𪎉|U+09EB2麲|
-U+2A38A𪎊|U+09EA8麨|
-U+2A38B𪎋|U+04D34䴴|
-U+2A38C𪎌|U+09EB3麳|
-U+2A68F𪚏|U+2A600𪘀|
-U+2A690𪚐|U+2A62F𪘯|
+U+09EB9麹|U+09EB4麴|
+U+080C4胄|U+080C4胄|U+05191冑| \ No newline at end of file
diff --git a/maintenance/language/zhtable/simp2trad_noconvert.manual b/maintenance/language/zhtable/simp2trad_noconvert.manual
index a46560a7..3266168d 100644
--- a/maintenance/language/zhtable/simp2trad_noconvert.manual
+++ b/maintenance/language/zhtable/simp2trad_noconvert.manual
@@ -1,139 +1,10 @@
-=>"余"
-=>"𫗭"
-=>"𪨧"
-=>"𫚭"
-=>"𫔀"
-=>"𫊻"
-=>"𫋌"
-=>"蚃"
-=>"𩾂"
-=>"𫚜"
-=>"𫚢"
-=>"𧉰"
-=>"䙌"
-=>"𫊮"
-=>"𫋇"
-=>"𫉄"
-=>"𫘛"
-=>"𫘜"
-=>"𫘝"
-=>"𫘟"
-=>"𩧨"
-=>"𩧫"
-=>"𫘞"
-=>"𫘠"
-=>"𩧲"
-=>"𩧴"
-=>"𫘡"
-=>"𩧺"
-=>"𫘣"
-=>"𫘤"
-=>"𫘧"
-=>"𫘥"
-=>"𫘦"
-=>"𩨀"
-=>"𩨊"
-=>"𫘩"
-=>"𩨃"
-=>"𫘪"
-=>"𫘪"
-=>"𫘫"
-=>"𫘬"
-=>"𩨈"
-=>"𫘨"
-=>"𩨄"
-=>"𫘭"
-=>"𩧯"
-=>"𫘯"
-=>"𫘰"
-=>"𫘱"
-=>"𫘽"
-=>"𫚉"
-=>"𩽹"
-=>"𫚌"
-=>"𫚍"
-=>"𫚒"
-=>"𫚑"
-=>"𫚖"
-=>"𩽾"
-=>"䲟"
-=>"𫚓"
-=>"𫚗"
-=>"𫚔"
-=>"𫚛"
-=>"𩾃"
-=>"𫚚"
-=>"𩾁"
-=>"𫚙"
-=>"𫚡"
-=>"𫚞"
-=>"𩾇"
-=>"𩽼"
-=>"𫚣"
-=>"䲠"
-=>"䲡"
-=>"𫚊"
-=>"𫚥"
-=>"𫚕"
-=>"𫚤"
-=>"䲢"
-=>"𫚦"
-=>"𫚧"
-=>"𫚋"
-=>"𩾌"
-=>"𫚪"
-=>"𫚫"
-=>"𫚈"
-=>"𫚭"
-=>"𫛛"
-=>"𪉃"
-=>"𫛚"
-=>"𫛜"
-=>"𫛞"
-=>"𫛝"
-=>"𫛤"
-=>"𫛡"
-=>"𫁡"
-=>"𪉈"
-=>"𫛣"
-=>"𫛦"
-=>"𪉆"
-=>"𫛩"
-=>"𫛪"
-=>"𫛥"
-=>"𪉍"
-=>"𫛭"
-=>"𫛨"
-=>"𫛳"
-=>"𫛱"
-=>"𫛲"
-=>"𫛵"
-=>"𫛶"
-=>"𫛸"
-=>"𫛷"
-=>"𫛯"
-=>"𫛫"
-=>"𫛽"
-=>"𫜀"
-=>"𪉑"
-=>"𫜃"
-=>"𫛴"
-=>"𪉊"
-=>"𫜁"
-=>"𫜄"
-=>"𫛢"
-=>"𫛟"
-=>"𪎊"
-=>"𤿲"
-=>"𪎉"
-=>"𪎌"
-=>"𫜑"
-=>"𫜩"
-=>"𫜪"
-=>"𫜭"
-=>"𫜬"
-=>"𫜮"
-=>"𫜰"
+咤
+吒
+疴
+桿
+錶
+蘋
+詑 \ No newline at end of file
diff --git a/maintenance/language/zhtable/simpphrases.manual b/maintenance/language/zhtable/simpphrases.manual
index d8602fec..3b149823 100644
--- a/maintenance/language/zhtable/simpphrases.manual
+++ b/maintenance/language/zhtable/simpphrases.manual
@@ -60,7 +60,7 @@
乾步
乾氏
乾泉
-乾清宫
+乾清
乾渥
乾灵
乾男
@@ -144,2032 +144,15 @@
陈乾生
陈公乾生
字乾生
-不着痕迹
-不着边际
-与着
-与著书
-与著作
-与著名
-与著录
-与著称
-与著者
-与著述
-丑着
-丑著书
-丑著作
-丑著名
-丑著录
-丑著称
-丑著者
-丑著述
-临着
-临著书
-临著作
-临著名
-临著录
-临著称
-临著者
-临著述
-丽着
-丽著书
-丽著作
-丽著名
-丽著录
-丽著称
-丽著者
-丽著述
-乐着
-乐著书
-乐著作
-乐著名
-乐著录
-乐著称
-乐著者
-乐著述
-乘着
-乘著书
-乘著作
-乘著名
-乘著录
-乘著称
-乘著者
-乘著述
-争着
-争著书
-争著作
-争著名
-争著录
-争著称
-争著者
-争著述
-亮着
-亮著书
-亮著作
-亮著名
-亮著录
-亮著称
-亮著者
-亮著述
-仗着
-仗著书
-仗著作
-仗著名
-仗著录
-仗著称
-仗著者
-仗著述
-代表着
-代表著书
-代表著作
-代表著名
-代表著录
-代表著称
-代表著者
-代表著述
-伴着
-伴著书
-伴著作
-伴著名
-伴著录
-伴著称
-伴著者
-伴著述
-低着
-低著书
-低著作
-低著名
-低著录
-低著称
-低著者
-低著述
-住着
-住著书
-住著作
-住著名
-住著录
-住著称
-住著者
-住著述
-侧着
-侧著书
-侧著作
-侧著名
-侧著录
-侧著称
-侧著者
-侧著述
-保障着
-保障著书
-保障著作
-保障著名
-保障著录
-保障著称
-保障著者
-保障著述
-信着
-信著书
-信著作
-信著名
-信著录
-信著称
-信著者
-信著述
-候着
-候著书
-候著作
-候著名
-候著录
-候著称
-候著者
-候著述
-借着
-借著书
-借著作
-借著名
-借著录
-借著称
-借著者
-借著述
-做着
-做著书
-做著作
-做著名
-做著录
-做著称
-做著者
-做著述
-偷着
-偷著书
-偷著作
-偷著名
-偷著录
-偷著称
-偷著者
-偷著述
-光着
-光著书
-光著作
-光著名
-光著录
-光著称
-光著者
-光著述
-关着
-关著书
-关著作
-关著名
-关著录
-关著称
-关著者
-关著述
-冀着
-冀著书
-冀著作
-冀著名
-冀著录
-冀著称
-冀著者
-冀著述
-冒着
-冒著书
-冒著作
-冒著名
-冒著录
-冒著称
-冒著者
-冒著述
-写着
-写著书
-写著作
-写著名
-写著录
-写著称
-写著者
-写著述
-凉着
-凉著书
-凉著作
-凉著名
-凉著录
-凉著称
-凉著者
-凉著述
-制着
-制著书
-制著作
-制著名
-制著录
-制著称
-制著者
-制著述
-刻着
-刻著书
-刻著作
-刻著名
-刻著录
-刻著称
-刻著者
-刻著述
-办着
-办著书
-办著作
-办著名
-办著录
-办著称
-办著者
-办著述
-动着
-动著书
-动著作
-动著名
-动著录
-动著称
-动著者
-动著述
-努力着
-努力著书
-努力著作
-努力著名
-努力著录
-努力著称
-努力著者
-努力著述
-努着
-努著书
-努著作
-努著名
-努著录
-努著称
-努著者
-努著述
-印着
-印著书
-印著作
-印著名
-印著录
-印著称
-印著者
-印著述
-压着
-压著书
-压著作
-压著名
-压著录
-压著称
-压著者
-压著述
-去着
-去著书
-去著作
-去著名
-去著录
-去著称
-去著者
-去著述
-受着
-受著书
-受著作
-受著名
-受著录
-受著称
-受著者
-受著述
-变着
-变著书
-变著作
-变著名
-变著录
-变著称
-变著者
-变著述
-叫着
-叫著书
-叫著作
-叫著名
-叫著录
-叫著称
-叫著者
-叫著述
-向着
-向著书
-向著作
-向著名
-向著录
-向著称
-向著者
-向著述
-含着
-含著书
-含著作
-含著名
-含著录
-含著称
-含著者
-含著述
-听得着
-听不着
-听着
-听著书
-听著作
-听著名
-听著录
-听著称
-听著者
-听著述
-吹着
-吹著书
-吹著作
-吹著名
-吹著录
-吹著称
-吹著者
-吹著述
-味着
-味著书
-味著作
-味著名
-味著录
-味著称
-味著者
-味著述
-响着
-响著书
-响著作
-响著名
-响著录
-响著称
-响著者
-响著述
-哭着
-哭著书
-哭著作
-哭著名
-哭著录
-哭著称
-哭著者
-哭著述
-唱着
-唱著书
-唱著作
-唱著名
-唱著录
-唱著称
-唱著者
-唱著述
-喝着
-喝著书
-喝著作
-喝著名
-喝著录
-喝著称
-喝著者
-喝著述
-嚷着
-嚷著书
-嚷著作
-嚷著名
-嚷著录
-嚷著称
-嚷著者
-嚷著述
-因着
-因著书
-因著作
-因著名
-因著录
-因著称
-因著者
-因著述
-困着
-困著书
-困著作
-困著名
-困著录
-困著称
-困著者
-困著述
-围着
-围著书
-围著作
-围著名
-围著录
-围著称
-围著者
-围著述
-在着
-在著书
-在著作
-在著名
-在著录
-在著称
-在著者
-在著述
-坐着
-坐著书
-坐著作
-坐著名
-坐著录
-坐著称
-坐著者
-坐著述
-备着
-备著书
-备著作
-备著名
-备著录
-备著称
-备著者
-备著述
-夹着
-夹著书
-夹著作
-夹著名
-夹著录
-夹著称
-夹著者
-夹著述
-孤着
-孤著书
-孤著作
-孤著名
-孤著录
-孤著称
-孤著者
-孤著述
-学着
-学著书
-学著作
-学著名
-学著录
-学著称
-学著者
-学著述
-守着
-守著书
-守著作
-守著名
-守著录
-守著称
-守著者
-守著述
-定着
-定著书
-定著作
-定著名
-定著录
-定著称
-定著者
-定著述
-对着
-对著书
-对著作
-对著名
-对著录
-对著称
-对著者
-对著述
-寻着
-寻著书
-寻著作
-寻著名
-寻著录
-寻著称
-寻著者
-寻著述
-展着
-展著书
-展著作
-展著名
-展著录
-展著称
-展著者
-展著述
-带着
-带著书
-带著作
-带著名
-带著录
-带著称
-带著者
-带著述
-帮着
-帮著书
-帮著作
-帮著名
-帮著录
-帮著称
-帮著者
-帮著述
-应着
-应著书
-应著作
-应著名
-应著录
-应著称
-应著者
-应著述
-康着
-康著书
-康著作
-康著名
-康著录
-康著称
-康著者
-康著述
-开着
-开著书
-开著作
-开著名
-开著录
-开著称
-开著者
-开著述
-当着
-当著书
-当著作
-当著名
-当著录
-当著称
-当著者
-当著述
-待着
-待著书
-待著作
-待著名
-待著录
-待著称
-待著者
-待著述
-得着
-得著书
-得著作
-得著名
-得著录
-得著称
-得著者
-得著述
-循着
-循著书
-循著作
-循著名
-循著录
-循著称
-循著者
-循著述
-心着
-心著书
-心著作
-心著名
-心著录
-心著称
-心著者
-心著述
-忍着
-忍著书
-忍著作
-忍著名
-忍著录
-忍著称
-忍著者
-忍著述
-志着
-志著书
-志著作
-志著名
-志著录
-志著称
-志著者
-志著述
-忙着
-忙著书
-忙著作
-忙著名
-忙著录
-忙著称
-忙著者
-忙著述
-怀着
-怀著书
-怀著作
-怀著名
-怀著录
-怀著称
-怀著者
-怀著述
-急着
-急著书
-急著作
-急著名
-急著录
-急著称
-急著者
-急著述
-性着
-性著书
-性著作
-性著名
-性著录
-性著称
-性著者
-性著述
-恋着
-恋著书
-恋著作
-恋著名
-恋著录
-恋著称
-恋著者
-恋著述
-悠着
-悠著书
-悠著作
-悠著名
-悠著录
-悠著称
-悠著者
-悠著述
-惯着
-惯著书
-惯著作
-惯著名
-惯著录
-惯著称
-惯著者
-惯著述
-想着
-想著书
-想著作
-想著名
-想著录
-想著称
-想著者
-想著述
-战着
-战著书
-战著作
-战著名
-战著录
-战著称
-战著者
-战著述
-戴着
-戴著书
-戴著作
-戴著名
-戴著录
-戴著称
-戴著者
-戴著述
-扎着
-扎著书
-扎著作
-扎著名
-扎著录
-扎著称
-扎著者
-扎著述
-打着
-打著书
-打著作
-打著名
-打著录
-打著称
-打著者
-打著述
-扛着
-扛著书
-扛著作
-扛著名
-扛著录
-扛著称
-扛著者
-扛著述
-找得着
-找不着
-抓着
-抓著作
-抓著名
-抓著录
-抓著称
-抓著者
-抓著述
-披着
-披著书
-披著作
-披著名
-披著录
-披著称
-披著者
-披著述
-抬着
-抬著作
-抬著名
-抬著录
-抬著称
-抬著者
-抬著述
-抱着
-抱著作
-抱著名
-抱著录
-抱著称
-抱著者
-抱著述
-拉着
-拉著书
-拉著作
-拉著名
-拉著录
-拉著称
-拉著者
-拉著述
-拎着
-拎著作
-拎著名
-拎著录
-拎著称
-拎著者
-拎著述
-拖着
-拖著作
-拖著名
-拖著录
-拖著称
-拖著者
-拖著述
-拼着
-拼著作
-拼著名
-拼著录
-拼著称
-拼著者
-拼著述
-拿着
-拿著作
-拿著名
-拿著录
-拿著称
-拿著者
-拿著述
-持着
-持著作
-持著名
-持著录
-持著称
-持著者
-持著述
-挑着
-挑著作
-挑著名
-挑著录
-挑著称
-挑著者
-挑著述
-挡着
-挡著作
-挡著名
-挡著录
-挡著称
-挡著者
-挡著述
-挣着
-挣著书
-挣著作
-挣著名
-挣著录
-挣著称
-挣著者
-挣著述
-挥着
-挥著作
-挥著名
-挥著录
-挥著称
-挥著者
-挥著述
-挨着
-挨著作
-挨著名
-挨著录
-挨著称
-挨著者
-挨著述
-捆着
-捆著作
-捆著名
-捆著录
-捆著称
-捆著者
-捆著述
-据着
-据著书
-据著作
-据著名
-据著录
-据著称
-据著者
-据著述
-掖着
-掖著作
-掖著名
-掖著录
-掖著称
-掖著者
-掖著述
-接着
-接著作
-接著名
-接著录
-接著称
-接著者
-接著述
-揉着
-揉著书
-揉著作
-揉著名
-揉著录
-揉著称
-揉著者
-揉著述
-提着
-提著作
-提著名
-提著录
-提著称
-提著者
-提著述
-搂着
-搂著作
-搂著名
-搂著录
-搂著称
-搂著者
-搂著述
-摆着
-摆著作
-摆著名
-摆著录
-摆著称
-摆著者
-摆著述
-撼着
-撼著书
-撼著作
-撼著名
-撼著录
-撼著称
-撼著者
-撼著述
-敞着
-敞著作
-敞著名
-敞著录
-敞著称
-敞著者
-敞著述
-数着
-数著作
-数著名
-数著录
-数著称
-数著者
-数著述
-斗着
-斗著书
-斗著作
-斗著名
-斗著录
-斗著称
-斗著者
-斗著述
-斥着
-斥著书
-斥著作
-斥著名
-斥著录
-斥著称
-斥著者
-斥著述
-昂着
-昂著书
-昂著作
-昂著名
-昂著录
-昂著称
-昂著者
-昂著述
-映着
-映著书
-映著作
-映著名
-映著录
-映著称
-映著者
-映著述
-晃着
-晃著作
-晃著名
-晃著录
-晃著称
-晃著者
-晃著述
-暗着
-暗著书
-暗著作
-暗著名
-暗著录
-暗著称
-暗著者
-暗著述
-有着
-有著书
-有著作
-有著名
-有著录
-有著称
-有著者
-有著述
-望着
-望著作
-望著名
-望著录
-望著称
-望著者
-望著述
-朝着
-朝著作
-朝著名
-朝著录
-朝著称
-朝著者
-朝著述
-本着
-本著书
-本著作
-本著名
-本著录
-本著称
-本著者
-本著述
-杀着
-杀著书
-杀著作
-杀著名
-杀著录
-杀著称
-杀著者
-杀著述
-杂着
-杂著书
-杂著作
-杂著名
-杂著录
-杂著称
-杂著者
-杂著述
-来着
-来著书
-来著作
-来著名
-来著录
-来著称
-来著者
-来著述
-枕着
-枕著作
-枕著名
-枕著录
-枕著称
-枕著者
-枕著述
-梦着
-梦著书
-梦著作
-梦著名
-梦著录
-梦著称
-梦著者
-梦著述
-梳着
-梳著作
-梳著名
-梳著录
-梳著称
-梳著者
-梳著述
-求着
-求著书
-求著作
-求著名
-求著录
-求著称
-求著者
-求著述
-沉着
-沉著书
-沉著作
-沉著名
-沉著录
-沉著称
-沉著者
-沉著述
-沿着
-沿著书
-沿著作
-沿著名
-沿著录
-沿著称
-沿著者
-沿著述
-活着
-活著书
-活著作
-活著名
-活著录
-活著称
-活著者
-活著述
-流着
-流著书
-流著作
-流著名
-流著录
-流著称
-流著者
-流著述
-浮着
-浮著书
-浮著作
-浮著名
-浮著录
-浮著称
-浮著者
-浮著述
-润着
-润著书
-润著作
-润著名
-润著录
-润著称
-润著者
-润著述
-涵着
-涵著书
-涵著作
-涵著名
-涵著录
-涵著称
-涵著者
-涵著述
-渴着
-渴著书
-渴著作
-渴著名
-渴著录
-渴著称
-渴著者
-渴著述
-溢着
-溢著书
-溢著作
-溢著名
-溢著录
-溢著称
-溢著者
-溢著述
-演着
-演著书
-演著作
-演著名
-演著录
-演著称
-演著者
-演著述
-漫着
-漫著书
-漫著作
-漫著名
-漫著录
-漫著称
-漫著者
-漫著述
-点着
-点著作
-点著名
-点著录
-点著称
-点著者
-点著述
-烧着
-烧著作
-烧著名
-烧著录
-烧著称
-烧著者
-烧著述
-照着
-照著书
-照著作
-照著名
-照著录
-照著称
-照著者
-照著述
-爱着
-爱著书
-爱著作
-爱著名
-爱著录
-爱著称
-爱著者
-爱著述
-牵着
-牵著书
-牵著作
-牵著名
-牵著录
-牵著称
-牵著者
-牵著述
-犯得着
-犯不着
-独着
-独著书
-独著作
-独著名
-独著录
-独著称
-独著者
-独著述
-猜着
-猜着书
-猜著作
-猜著名
-猜著录
-猜著称
-猜著者
-猜著述
-甜着
-甜著书
-甜著作
-甜著名
-甜著录
-甜著称
-甜著者
-甜著述
-用得着
-用不着
-用着
-用著书
-用著作
-用著名
-用著录
-用著称
-用著者
-用著述
-留着
-留着书
-留著作
-留著名
-留著录
-留著称
-留著者
-留著述
-疑着
-疑著书
-疑著作
-疑著名
-疑著录
-疑著称
-疑著者
-疑著述
-皱着
-皱著书
-皱著作
-皱著名
-皱著录
-皱著称
-皱著者
-皱著述
-盛着
-盛著书
-盛著作
-盛著名
-盛著录
-盛著称
-盛著者
-盛著述
-盯着
-盯着书
-盯著作
-盯著名
-盯著录
-盯著称
-盯著者
-盯著述
-盾着
-盾著书
-盾著作
-盾著名
-盾著录
-盾著称
-盾著者
-盾著述
-看得着
-看不着
-看着
-看着书
-看著作
-看著名
-看著录
-看著称
-看著者
-看著述
-瞧着
-瞧着书
-瞧著作
-瞧著名
-瞧著录
-瞧著称
-瞧著者
-瞧著述
-着业
-着丝
-着么
-着人
-着什么急
-着他
-着令
-着位
-着体
-着你
-着便
-着凉
-着力
-着劲
-着号
-着呢
-着哩
-着地
-着墨
-着声
-着处
-着她
-着妳
-着姓
-着它
-着定
-着实
-着己
-着帐
-着床
-着庸
-着式
-着录
-着心
-着志
-着忙
-着急
-着恼
-着惊
-着想
-着意
-着慌
-着我
-着手
-着抹
-着摸
-着撰
-着数
-着明
-着末
-着极
-着格
-着棋
-着槁
-着气
-着法
-着浅
-着火
-着然
-着甚
-着生
-着疑
-着白
-着相
-着眼
-着着
-着祂
-着积
-着稿
-着笔
-着籍
-着紧
-着緑
-着绊
-着绩
-着绯
-着绿
-着肉
-着脚
-着舰
-着色
-着节
-着花
-着莫
-着落
-着藁
-着衣
-着装
-着要
-着警
-着趣
-着边
-着迷
-着迹
-着重
-着録
-着闻
-着陆
-着雝
-着鞭
-着题
-着魔
-睡得着
-睡不着
-睡着
-睡著书
-睡著作
-睡著名
-睡著录
-睡著称
-睡著者
-睡著述
-瞒着
-瞒著书
-瞒著作
-瞒著名
-瞒著录
-瞒著称
-瞒著者
-瞒著述
-瞪着
-瞪著书
-瞪著作
-瞪著名
-瞪著录
-瞪著称
-瞪著者
-瞪著述
-福着
-福著书
-福著作
-福著名
-福著录
-福著称
-福著者
-福著述
-空着
-空著书
-空著作
-空著名
-空著录
-空著称
-空著者
-空著述
-穿着
-穿著书
-穿著作
-穿著名
-穿著录
-穿著称
-穿著者
-穿著述
-竖着
-竖著书
-竖著作
-竖著名
-竖著录
-竖著称
-竖著者
-竖著述
-站着
-站著书
-站著作
-站著名
-站著录
-站著称
-站著者
-站著述
-笑着
-笑著书
-笑著作
-笑著名
-笑著录
-笑著称
-笑著者
-笑著述
-管着
-管著书
-管著作
-管著名
-管著录
-管著称
-管著者
-管著述
-绑着
-绑著书
-绑著作
-绑著名
-绑著录
-绑著称
-绑著者
-绑著述
-绕着
-绕著书
-绕著作
-绕著名
-绕著录
-绕著称
-绕著者
-绕著述
-缠着
-缠著书
-缠著作
-缠著名
-缠著录
-缠著称
-缠著者
-缠著述
-罩着
-罩著书
-罩著作
-罩著名
-罩著录
-罩著称
-罩著者
-罩著述
-美着
-美著书
-美著作
-美著名
-美著录
-美著称
-美著者
-美著述
-耀着
-耀著书
-耀著作
-耀著名
-耀著录
-耀著称
-耀著者
-耀著述
-考着
-考著书
-考著作
-考著名
-考著录
-考著称
-考著者
-考著述
-背着
-背著书
-背著作
-背著名
-背著录
-背著称
-背著者
-背著述
-胶着
-胶著书
-胶著作
-胶著名
-胶著录
-胶著称
-胶著者
-胶著述
-艺着
-艺著书
-艺著作
-艺著名
-艺著录
-艺著称
-艺著者
-艺著述
-苦着
-苦著书
-苦著作
-苦著名
-苦著录
-苦著称
-苦著者
-苦著述
-获着
-获著书
-获著作
-获著名
-获著录
-获著称
-获著者
-获著述
-落着
-落著书
-落著作
-落著名
-落著录
-落著称
-落著者
-落著述
-蒙着
-蒙著书
-蒙著作
-蒙著名
-蒙著录
-蒙著称
-蒙著者
-蒙著述
-藏着
-藏著书
-藏著作
-藏著名
-藏著录
-藏著称
-藏著者
-藏著述
-蘸着
-蘸著书
-蘸著作
-蘸著名
-蘸著录
-蘸著称
-蘸著者
-蘸著述
-行着
-行著书
-行著作
-行著名
-行著录
-行著称
-行著者
-行著述
-衣着
-衣著书
-衣著作
-衣著名
-衣著录
-衣著称
-衣著者
-衣著述
-装着
-装著书
-装著作
-装著名
-装著录
-装著称
-装著者
-装著述
-裹着
-裹著书
-裹著作
-裹著名
-裹著录
-裹著称
-裹著者
-裹著述
-见着
-见著书
-见著作
-见著名
-见著录
-见著称
-见著者
-见著述
-记着
-记著书
-记著作
-记著名
-记著录
-记著称
-记著者
-记著述
-试着
-试著书
-试著作
-试著名
-试著录
-试著称
-试著者
-试著述
-语着
-语著书
-语著作
-语著名
-语著录
-语著称
-语著者
-语著述
-豫着
-豫著书
-豫著作
-豫著名
-豫著录
-豫著称
-豫著者
-豫著述
-贞着
-贞著书
-贞著作
-贞著名
-贞著录
-贞著称
-贞著者
-贞著述
-走着
-走著书
-走著作
-走著名
-走著录
-走著称
-走著者
-走著述
-赶着
-赶著书
-赶著作
-赶著名
-赶著录
-赶著称
-赶著者
-赶著述
-趴着
-趴著书
-趴著作
-趴著名
-趴著录
-趴著称
-趴著者
-趴著述
-跃着
-跃著书
-跃著作
-跃著名
-跃著录
-跃著称
-跃著者
-跃著述
-跑着
-跑著书
-跑著作
-跑著名
-跑著录
-跑著称
-跑著者
-跑著述
-跟着
-跟著书
-跟著作
-跟著名
-跟著录
-跟著称
-跟著者
-跟著述
-跪着
-跪著书
-跪著作
-跪著名
-跪著录
-跪著称
-跪著者
-跪著述
-跳着
-跳著书
-跳著作
-跳著名
-跳著录
-跳著称
-跳著者
-跳著述
-踏着
-踏著书
-踏著作
-踏著名
-踏著录
-踏著称
-踏著者
-踏著述
-踩着
-踩著书
-踩著作
-踩著名
-踩著录
-踩著称
-踩著者
-踩著述
-身着
-身著书
-身著作
-身著名
-身著录
-身著称
-身著者
-身著述
-躺着
-躺著书
-躺著作
-躺著名
-躺著录
-躺著称
-躺著者
-躺著述
-转着
-转著书
-转著作
-转著名
-转著录
-转著称
-转著者
-转著述
-载着
-载著书
-载著作
-载著名
-载著录
-载著称
-载著者
-载著述
-达着
-达著书
-达著作
-达著名
-达著录
-达著称
-达著者
-达著述
-远着
-远著书
-远著作
-远著名
-远著录
-远著称
-远著者
-远著述
-连着
-连著书
-连著作
-连著名
-连著录
-连著称
-连著者
-连著述
-追着
-追著书
-追著作
-追著名
-追著录
-追著称
-追著者
-追著述
-逆着
-逆著书
-逆著作
-逆著名
-逆著录
-逆著称
-逆著者
-逆著述
-逼着
-逼著书
-逼著作
-逼著名
-逼著录
-逼著称
-逼著者
-逼著述
-遇着
-遇著书
-遇著作
-遇著名
-遇著录
-遇著称
-遇著者
-遇著述
-配着
-配著书
-配著作
-配著名
-配著录
-配著称
-配著者
-配著述
-酿着
-酿著书
-酿著作
-酿著名
-酿著录
-酿著称
-酿著者
-酿著述
-铺着
-铺著书
-铺著作
-铺著名
-铺著录
-铺著称
-铺著者
-铺著述
-闭着
-闭著书
-闭著作
-闭著名
-闭著录
-闭著称
-闭著者
-闭著述
-闲着
-闲著书
-闲著作
-闲著名
-闲著录
-闲著称
-闲著者
-闲著述
-附着
-附著书
-附著作
-附著名
-附著录
-附著称
-附著者
-附著述
-陋着
-陋著书
-陋著作
-陋著名
-陋著录
-陋著称
-陋著者
-陋著述
-陪着
-陪著书
-陪著作
-陪著名
-陪著录
-陪著称
-陪著者
-陪著述
-随着
-随著书
-随著作
-随著名
-随著录
-随著称
-随著者
-随著述
-隔着
-隔著书
-隔著作
-隔著名
-隔著录
-隔著称
-隔著者
-隔著述
-雅着
-雅著书
-雅著作
-雅著名
-雅著录
-雅著称
-雅著者
-雅著述
-顶着
-顶著书
-顶著作
-顶著名
-顶著录
-顶著称
-顶著者
-顶著述
-顺着
-顺著书
-顺著作
-顺著名
-顺著录
-顺著称
-顺著者
-顺著述
-领着
-领著书
-领著作
-领著名
-领著录
-领著称
-领著者
-领著述
-飘着
-飘著书
-飘著作
-飘著名
-飘著录
-飘著称
-飘著者
-飘著述
-驾着
-驾著书
-驾著作
-驾著名
-驾著录
-驾著称
-驾著者
-驾著述
-骂着
-骂著书
-骂著作
-骂著名
-骂著录
-骂著称
-骂著者
-骂著述
-骑着
-骑著书
-骑著作
-骑著名
-骑著录
-骑著称
-骑著者
-骑著述
-骗着
-骗著书
-骗著作
-骗著名
-骗著录
-骗著称
-骗著者
-骗著述
-高着
-高著书
-高著作
-高著名
-高著录
-高著称
-高著者
-高著述
-髭着
-髭著书
-髭著作
-髭著名
-髭著录
-髭著称
-髭著者
-髭著述
-黏着
-黏著书
-黏著作
-黏著名
-黏著录
-黏著称
-黏著者
-黏著述
-新著龙虎门
-护着
-护著书
-护著作
-护著名
-护著录
-护著称
-护著者
-护著述
-保护着
-爱护着
-庇护着
-传着
-传著书
-传著作
-传著名
-传著录
-传著称
-传著者
-传著述
-标志着
-流露着
-靠着
-靠著作
-靠著名
-靠著录
-靠著称
-靠著者
-靠著述
-玩着
-迫着
-吃得着
-吃不着
-吃着
-闻得着
-闻不着
-闻着
-嗅得着
-嗅不着
-嗅着
-警戒着
+乾神
+乾西
+象乾
+陈遇乾
+曾运乾
+王道乾
+孙乾
+乾潭
+乾贵士
於乎
於戏
魏徵
@@ -2183,8 +166,6 @@
於菟
於潜县
石碁镇
-因著《
-因著〈
李泽钜
於祥玉
於崇文
@@ -2221,9 +202,6 @@
幺二三
幺篇
幺谦
-麴义
-麴英
-麯崇裕
阿部正瞭
醯酱
醯鸡
@@ -2231,9 +209,61 @@
醯醢
醯壶
苧烯
-近角聪信
-米泽瑠美
-峯岸南
-僧伽吒
-王道乾
後姓
+先名后姓
+矇眬
+朱有燉
+缐姓
+缐国安
+仇雠
+雠校
+雠定
+校雠
+雠夷
+雠问
+甚夥
+吴克羣
+宏碁
+石碁
+碁圣
+暗闇
+繙㠾
+惏慄
+惏悷
+目劄
+橡椀
+谢肇淛
+朱淛
+諲譔
+李譔
+扞格
+陈元扞
+祕宜
+李祕
+剋了
+挨剋
+剋架
+皁保
+爨翫
+碁所
+於之莹
+陆徵祥
+瞭台
+文徵明
+博和讬
+楈枒
+米渖
+白渖
+拾渖
+渖液
+醉渖
+墨渖
+如渖
+残渖
+馀渖
+庆馀
+馀庆
+子馀
+郭行馀
+王馀鱼
+馀年无多 \ No newline at end of file
diff --git a/maintenance/language/zhtable/simpphrases_exclude.manual b/maintenance/language/zhtable/simpphrases_exclude.manual
index 3e9d3ecc..b4dd3e01 100644
--- a/maintenance/language/zhtable/simpphrases_exclude.manual
+++ b/maintenance/language/zhtable/simpphrases_exclude.manual
@@ -18,4 +18,13 @@
摺叠
-安甯 \ No newline at end of file
+安甯
+傢俬
+癥瘕
+存摺
+着录
+硷淡
+悽恻
+鲇鱼
+和尚撞一天钟
+余 \ No newline at end of file
diff --git a/maintenance/language/zhtable/symme_supp.manual b/maintenance/language/zhtable/symme_supp.manual
new file mode 100644
index 00000000..09e14155
--- /dev/null
+++ b/maintenance/language/zhtable/symme_supp.manual
@@ -0,0 +1,27 @@
+U+03476㑶|U+03439㐹|
+U+042F9䋹|U+0433F䌿|
+U+043B1䎱|U+043AC䎬|
+U+04C98䲘|U+09CE4鳤|
+U+0508C傌|U+03437㐷|
+U+05DA8嶨|U+05CC3峃|
+U+05ECE廎|U+05EBC庼|
+U+069EE槮|U+0692E椮|
+U+06EAE溮|U+06D49浉|
+U+07069灩|U+06EDF滟|
+U+074A1璡|U+0740E琎|
+U+074B5璵|U+07399玙|
+U+074B8璸|U+07478瑸|
+U+075F2痲|U+075F3痳|
+U+0819E膞|U+043DD䏝|
+U+085ED藭|U+044D6䓖|
+U+08600蘀|U+0841A萚|
+U+08AE1諡|U+08C25谥|
+U+09746靆|U+053C7叇|
+U+09749靉|U+053C6叆|
+U+09A44驄|U+29A02𩨂|
+U+09C1B鰛|U+09CC1鳁|
+U+09EB3麳|U+2A38C𪎌|
+U+295E1𩗡|U+29667𩙧|
+U+298F5𩣵|U+299FB𩧻|
+U+29F47𩽇|U+29F8E𩾎|
+U+2A23C𪈼|U+2A253𪉓| \ No newline at end of file
diff --git a/maintenance/language/zhtable/toCN.manual b/maintenance/language/zhtable/toCN.manual
index 243f61b0..a678ac93 100644
--- a/maintenance/language/zhtable/toCN.manual
+++ b/maintenance/language/zhtable/toCN.manual
@@ -1,57 +1,2283 @@
-」 ”
-「 “
-『 ‘
-』 ’
+餘 余
+諮 咨
+鍅 钫
+鉳 锫
+鑀 锿
+錼 镎
+鋂 镅
+鈽 钚
+鎝 锝
+鉲 锎
+矽 硅
+矽肺 矽肺
+矽塵 矽尘
+矽尘 矽尘
+矽鋼 矽钢
+矽钢 矽钢
+侏儸紀 侏罗纪
+甚麽 什么
+甚麼 什么
+胺基酸 氨基酸
+水氣 水汽
+計畫 计划
+天份 天分
+名份 名分
+職份 职分
+份外 分外
+份內 分内
+部份 部分
+知識份子 知识分子
+積極份子 积极分子
+投機份子 投机分子
+一份子 一分子
+水份 水分
+氧份 养分
+糖份 糖分
+鹽份 盐分
+組份 组分
+成份 成分
+本份 本分
+本本份份 本本分分
+恰如其份 恰如其分
+非份 非分
+過份 过分
+份量 分量
+緣份 缘分
+身分 身份
+煞車 刹车
+疊代 迭代
+叱吒 叱咤
+啸吒 啸咤
+姊姊 姐姐
+姊弟 姐弟
+姊夫 姐夫
+大姊 大姐
+御姊 御姐
+表姊 表姐
+堂姊 堂姐
+學姊 学姐
+乾姊 干姐
+澈底 彻底
+逕庭 径庭
+逕到 径到
+逕取 径取
+逕入 径入
+逕行 径行
+逕自 径自
+逕往 径往
+逕寄 径寄
+逕啟 径启
+逕迎 径迎
+徵狀 症状
+報帳 报账
+本帳 本账
+筆帳 笔账
+查帳 查账
+沖帳 冲账
+呆帳 呆账
+倒帳 倒账
+到帳 到账
+對帳 对账
+放帳 放账
+付帳 付账
+公帳 公账
+關帳 关账
+管帳 管账
+還帳 还账
+糊塗帳 糊涂账
+混帳 混账
+記帳 记账
+假帳 假账
+建帳 建账
+交帳 交账
+結帳 结账
+進帳 进账
+經常帳 经常账
+經濟帳 经济账
+舊帳 旧账
+開帳 开账
+賴帳 赖账
+爛帳 烂账
+流水帳 流水账
+買帳 买账
+明白帳 明白账
+簽帳 签账
+欠帳 欠账
+清帳 清账
+認帳 认账
+入帳 入账
+賒帳 赊账
+收帳 收账
+私帳 私账
+死帳 死账
+算帳 算账
+台帳 台账
+銷帳 销账
+要帳 要账
+轉帳 转账
+總帳 总账
+帳本 账本
+帳簿 账簿
+帳冊 账册
+帳單 账单
+帳房 账房
+帳號 账号
+帳戶 账户
+帳款 账款
+帳面 账面
+帳目 账目
+帳上 账上
+帳外 账外
+帳務 账务
+螢光棒 荧光棒
+辭彙 词汇
+著業 着业
+著絲 着丝
+著麼 着么
+著人 着人
+著什麼 着什么
+著他 着他
+著令 着令
+著位 着位
+著體 着体
+著你 着你
+著便 着便
+著涼 着凉
+著力 着力
+著勁 着劲
+著號 着号
+著呢 着呢
+著哩 着哩
+著地 着地
+著墨 着墨
+著聲 着声
+著處 着处
+著她 着她
+著妳 着妳
+著姓 着姓
+著它 着它
+著定 着定
+著實 着实
+著己 着己
+著帳 着帐
+著床 着床
+著庸 着庸
+著式 着式
+著錄 着录
+著心 着心
+著志 着志
+著忙 着忙
+著急 着急
+著惱 着恼
+著驚 着惊
+著想 着想
+著意 着意
+著慌 着慌
+著我 着我
+著手 着手
+著抹 着抹
+著摸 着摸
+著撰 着撰
+著數 着数
+著明 着明
+著末 着末
+著極 着极
+著格 着格
+著棋 着棋
+著槁 着槁
+著氣 着气
+著法 着法
+著淺 着浅
+著火 着火
+著然 着然
+著甚 着甚
+著生 着生
+著疑 着疑
+著白 着白
+著相 着相
+著眼 着眼
+著著 着着
+著祂 着祂
+著積 着积
+著稿 着稿
+著筆 着笔
+著籍 着籍
+著緊 着紧
+著緑 着緑
+著絆 着绊
+著績 着绩
+著緋 着绯
+著綠 着绿
+著肉 着肉
+著腳 着脚
+著艦 着舰
+著色 着色
+著節 着节
+著花 着花
+著莫 着莫
+著落 着落
+著槁 着藁
+著衣 着衣
+著裝 着装
+著要 着要
+著警 着警
+著趣 着趣
+著邊 着边
+著迷 着迷
+著跡 着迹
+著重 着重
+著録 着録
+著聞 着闻
+著陸 着陆
+著雝 着雝
+著鞭 着鞭
+著題 着题
+著魔 着魔
+不著 不着
+不著書 不著书
+不著名 不著名
+不著錄 不著录
+不著稱 不著称
+不著述 不著述
+與著 与着
+與著書 与著书
+與著作 与著作
+與著名 与著名
+與著錄 与著录
+與著稱 与著称
+與著者 与著者
+與著述 与著述
+醜著 丑着
+醜著書 丑著书
+醜著作 丑著作
+醜著名 丑著名
+醜著錄 丑著录
+醜著稱 丑著称
+醜著者 丑著者
+醜著述 丑著述
+臨著 临着
+臨著書 临著书
+臨著作 临著作
+臨著名 临著名
+臨著錄 临著录
+臨著稱 临著称
+臨著者 临著者
+臨著述 临著述
+麗著 丽着
+麗著書 丽著书
+麗著作 丽著作
+麗著名 丽著名
+麗著錄 丽著录
+麗著稱 丽著称
+麗著者 丽著者
+麗著述 丽著述
+樂著 乐着
+樂著書 乐著书
+樂著作 乐著作
+樂著名 乐著名
+樂著錄 乐著录
+樂著稱 乐著称
+樂著者 乐著者
+樂著述 乐著述
+乘著 乘着
+乘著書 乘著书
+乘著作 乘著作
+乘著名 乘著名
+乘著錄 乘著录
+乘著稱 乘著称
+乘著者 乘著者
+乘著述 乘著述
+爭著 争着
+爭著書 争著书
+爭著作 争著作
+爭著名 争著名
+爭著錄 争著录
+爭著稱 争著称
+爭著者 争著者
+爭著述 争著述
+亮著 亮着
+亮著書 亮著书
+亮著作 亮著作
+亮著名 亮著名
+亮著錄 亮著录
+亮著稱 亮著称
+亮著者 亮著者
+亮著述 亮著述
+仗著 仗着
+仗著書 仗著书
+仗著作 仗著作
+仗著名 仗著名
+仗著錄 仗著录
+仗著稱 仗著称
+仗著者 仗著者
+仗著述 仗著述
+代表著 代表着
+代表著書 代表著书
+代表著作 代表著作
+代表著名 代表著名
+代表著錄 代表著录
+代表著稱 代表著称
+代表著者 代表著者
+代表著述 代表著述
+伴著 伴着
+伴著書 伴著书
+伴著作 伴著作
+伴著名 伴著名
+伴著錄 伴著录
+伴著稱 伴著称
+伴著者 伴著者
+伴著述 伴著述
+低著 低着
+低著書 低著书
+低著作 低著作
+低著名 低著名
+低著錄 低著录
+低著稱 低著称
+低著者 低著者
+低著述 低著述
+住著 住着
+住著書 住著书
+住著作 住著作
+住著名 住著名
+住著錄 住著录
+住著稱 住著称
+住著者 住著者
+住著述 住著述
+側著 侧着
+側著書 侧著书
+側著作 侧著作
+側著名 侧著名
+側著錄 侧著录
+側著稱 侧著称
+側著者 侧著者
+側著述 侧著述
+保障著 保障着
+保障著書 保障著书
+保障著作 保障著作
+保障著名 保障著名
+保障著錄 保障著录
+保障著稱 保障著称
+保障著者 保障著者
+保障著述 保障著述
+信著 信着
+信著書 信著书
+信著作 信著作
+信著名 信著名
+信著錄 信著录
+信著稱 信著称
+信著者 信著者
+信著述 信著述
+候著 候着
+候著書 候著书
+候著作 候著作
+候著名 候著名
+候著錄 候著录
+候著稱 候著称
+候著者 候著者
+候著述 候著述
+借著 借着
+借著書 借著书
+借著作 借著作
+借著名 借著名
+借著錄 借著录
+借著稱 借著称
+借著者 借著者
+借著述 借著述
+做著 做着
+做著書 做著书
+做著作 做著作
+做著名 做著名
+做著錄 做著录
+做著稱 做著称
+做著者 做著者
+做著述 做著述
+偷著 偷着
+偷著書 偷著书
+偷著作 偷著作
+偷著名 偷著名
+偷著錄 偷著录
+偷著稱 偷著称
+偷著者 偷著者
+偷著述 偷著述
+光著 光着
+光著書 光著书
+光著作 光著作
+光著名 光著名
+光著錄 光著录
+光著稱 光著称
+光著者 光著者
+光著述 光著述
+關著 关着
+關著書 关著书
+關著作 关著作
+關著名 关著名
+關著錄 关著录
+關著稱 关著称
+關著者 关著者
+關著述 关著述
+冀著 冀着
+冀著書 冀著书
+冀著作 冀著作
+冀著名 冀著名
+冀著錄 冀著录
+冀著稱 冀著称
+冀著者 冀著者
+冀著述 冀著述
+冒著 冒着
+冒著書 冒著书
+冒著作 冒著作
+冒著名 冒著名
+冒著錄 冒著录
+冒著稱 冒著称
+冒著者 冒著者
+冒著述 冒著述
+寫著 写着
+寫著書 写著书
+寫著作 写著作
+寫著名 写著名
+寫著錄 写著录
+寫著稱 写著称
+寫著者 写著者
+寫著述 写著述
+涼著 凉着
+涼著書 凉著书
+涼著作 凉著作
+涼著名 凉著名
+涼著錄 凉著录
+涼著稱 凉著称
+涼著者 凉著者
+涼著述 凉著述
+制著 制着
+制著書 制著书
+制著作 制著作
+制著名 制著名
+制著錄 制著录
+制著稱 制著称
+制著者 制著者
+制著述 制著述
+刻著 刻着
+刻著書 刻著书
+刻著作 刻著作
+刻著名 刻著名
+刻著錄 刻著录
+刻著稱 刻著称
+刻著者 刻著者
+刻著述 刻著述
+辦著 办着
+辦著書 办著书
+辦著作 办著作
+辦著名 办著名
+辦著錄 办著录
+辦著稱 办著称
+辦著者 办著者
+辦著述 办著述
+動著 动着
+動著書 动著书
+動著作 动著作
+動著名 动著名
+動著錄 动著录
+動著稱 动著称
+動著者 动著者
+動著述 动著述
+努力著 努力着
+努力著書 努力著书
+努力著作 努力著作
+努力著名 努力著名
+努力著錄 努力著录
+努力著稱 努力著称
+努力著者 努力著者
+努力著述 努力著述
+努著 努着
+努著書 努著书
+努著作 努著作
+努著名 努著名
+努著錄 努著录
+努著稱 努著称
+努著者 努著者
+努著述 努著述
+印著 印着
+印著書 印著书
+印著作 印著作
+印著名 印著名
+印著錄 印著录
+印著稱 印著称
+印著者 印著者
+印著述 印著述
+壓著 压着
+壓著書 压著书
+壓著作 压著作
+壓著名 压著名
+壓著錄 压著录
+壓著稱 压著称
+壓著者 压著者
+壓著述 压著述
+去著 去着
+去著書 去著书
+去著作 去著作
+去著名 去著名
+去著錄 去著录
+去著稱 去著称
+去著者 去著者
+去著述 去著述
+受著 受着
+受著書 受著书
+受著作 受著作
+受著名 受著名
+受著錄 受著录
+受著稱 受著称
+受著者 受著者
+受著述 受著述
+變著 变着
+變著書 变著书
+變著作 变著作
+變著名 变著名
+變著錄 变著录
+變著稱 变著称
+變著者 变著者
+變著述 变著述
+叫著 叫着
+叫著書 叫著书
+叫著作 叫著作
+叫著名 叫著名
+叫著錄 叫著录
+叫著稱 叫著称
+叫著者 叫著者
+叫著述 叫著述
+向著 向着
+向著書 向著书
+向著作 向著作
+向著名 向著名
+向著錄 向著录
+向著稱 向著称
+向著者 向著者
+向著述 向著述
+含著 含着
+含著書 含著书
+含著作 含著作
+含著名 含著名
+含著錄 含著录
+含著稱 含著称
+含著者 含著者
+含著述 含著述
+聽著 听着
+聽著書 听著书
+聽著作 听著作
+聽著名 听著名
+聽著錄 听著录
+聽著稱 听著称
+聽著者 听著者
+聽著述 听著述
+吹著 吹着
+吹著書 吹著书
+吹著作 吹著作
+吹著名 吹著名
+吹著錄 吹著录
+吹著稱 吹著称
+吹著者 吹著者
+吹著述 吹著述
+味著 味着
+味著書 味著书
+味著作 味著作
+味著名 味著名
+味著錄 味著录
+味著稱 味著称
+味著者 味著者
+味著述 味著述
+響著 响着
+響著書 响著书
+響著作 响著作
+響著名 响著名
+響著錄 响著录
+響著稱 响著称
+響著者 响著者
+響著述 响著述
+哭著 哭着
+哭著書 哭著书
+哭著作 哭著作
+哭著名 哭著名
+哭著錄 哭著录
+哭著稱 哭著称
+哭著者 哭著者
+哭著述 哭著述
+唱著 唱着
+唱著書 唱著书
+唱著作 唱著作
+唱著名 唱著名
+唱著錄 唱著录
+唱著稱 唱著称
+唱著者 唱著者
+唱著述 唱著述
+喝著 喝着
+喝著書 喝著书
+喝著作 喝著作
+喝著名 喝著名
+喝著錄 喝著录
+喝著稱 喝著称
+喝著者 喝著者
+喝著述 喝著述
+嚷著 嚷着
+嚷著書 嚷著书
+嚷著作 嚷著作
+嚷著名 嚷著名
+嚷著錄 嚷著录
+嚷著稱 嚷著称
+嚷著者 嚷著者
+嚷著述 嚷著述
+因著 因着
+因著書 因著书
+因著作 因著作
+因著名 因著名
+因著錄 因著录
+因著录 因著录
+因著稱 因著称
+因著者 因著者
+因著述 因著述
+因著《 因著《
+因著〈 因著〈
+困著 困着
+困著書 困著书
+困著作 困著作
+困著名 困著名
+困著錄 困著录
+困著稱 困著称
+困著者 困著者
+困著述 困著述
+圍著 围着
+圍著書 围著书
+圍著作 围著作
+圍著名 围著名
+圍著錄 围著录
+圍著稱 围著称
+圍著者 围著者
+圍著述 围著述
+在著 在着
+在著書 在著书
+在著作 在著作
+在著名 在著名
+在著錄 在著录
+在著稱 在著称
+在著者 在著者
+在著述 在著述
+坐著 坐着
+坐著書 坐著书
+坐著作 坐著作
+坐著名 坐著名
+坐著錄 坐著录
+坐著稱 坐著称
+坐著者 坐著者
+坐著述 坐著述
+備著 备着
+備著書 备著书
+備著作 备著作
+備著名 备著名
+備著錄 备著录
+備著稱 备著称
+備著者 备著者
+備著述 备著述
+夾著 夹着
+夾著書 夹著书
+夾著作 夹著作
+夾著名 夹著名
+夾著錄 夹著录
+夾著稱 夹著称
+夾著者 夹著者
+夾著述 夹著述
+孤著 孤着
+孤著書 孤著书
+孤著作 孤著作
+孤著名 孤著名
+孤著錄 孤著录
+孤著稱 孤著称
+孤著者 孤著者
+孤著述 孤著述
+學著 学着
+學著書 学著书
+學著作 学著作
+學著名 学著名
+學著錄 学著录
+學著稱 学著称
+學著者 学著者
+學著述 学著述
+守著 守着
+守著書 守著书
+守著作 守著作
+守著名 守著名
+守著錄 守著录
+守著稱 守著称
+守著者 守著者
+守著述 守著述
+定著 定着
+定著書 定著书
+定著作 定著作
+定著名 定著名
+定著錄 定著录
+定著稱 定著称
+定著者 定著者
+定著述 定著述
+對著 对着
+對著書 对著书
+對著作 对著作
+對著名 对著名
+對著錄 对著录
+對著稱 对著称
+對著者 对著者
+對著述 对著述
+尋著 寻着
+尋著書 寻著书
+尋著作 寻著作
+尋著名 寻著名
+尋著錄 寻著录
+尋著稱 寻著称
+尋著者 寻著者
+尋著述 寻著述
+展著 展着
+展著書 展著书
+展著作 展著作
+展著名 展著名
+展著錄 展著录
+展著稱 展著称
+展著者 展著者
+展著述 展著述
+帶著 带着
+帶著書 带著书
+帶著作 带著作
+帶著名 带著名
+帶著錄 带著录
+帶著稱 带著称
+帶著者 带著者
+帶著述 带著述
+幫著 帮着
+幫著書 帮著书
+幫著作 帮著作
+幫著名 帮著名
+幫著錄 帮著录
+幫著稱 帮著称
+幫著者 帮著者
+幫著述 帮著述
+應著 应着
+應著書 应著书
+應著作 应著作
+應著名 应著名
+應著錄 应著录
+應著稱 应著称
+應著者 应著者
+應著述 应著述
+康著 康着
+康著書 康著书
+康著作 康著作
+康著名 康著名
+康著錄 康著录
+康著稱 康著称
+康著者 康著者
+康著述 康著述
+開著 开着
+開著書 开著书
+開著作 开著作
+開著名 开著名
+開著錄 开著录
+開著稱 开著称
+開著者 开著者
+開著述 开著述
+當著 当着
+當著書 当著书
+當著作 当著作
+當著名 当著名
+當著錄 当著录
+當著稱 当著称
+當著者 当著者
+當著述 当著述
+待著 待着
+待著書 待著书
+待著作 待著作
+待著名 待著名
+待著錄 待著录
+待著稱 待著称
+待著者 待著者
+待著述 待著述
+得著 得着
+得著書 得著书
+得著作 得著作
+得著名 得著名
+得著錄 得著录
+得著稱 得著称
+得著者 得著者
+得著述 得著述
+循著 循着
+循著書 循著书
+循著作 循著作
+循著名 循著名
+循著錄 循著录
+循著稱 循著称
+循著者 循著者
+循著述 循著述
+心著 心着
+心著書 心著书
+心著作 心著作
+心著名 心著名
+心著錄 心著录
+心著稱 心著称
+心著者 心著者
+心著述 心著述
+忍著 忍着
+忍著書 忍著书
+忍著作 忍著作
+忍著名 忍著名
+忍著錄 忍著录
+忍著稱 忍著称
+忍著者 忍著者
+忍著述 忍著述
+志著 志着
+志著書 志著书
+志著作 志著作
+志著名 志著名
+志著錄 志著录
+志著稱 志著称
+志著者 志著者
+志著述 志著述
+忙著 忙着
+忙著書 忙著书
+忙著作 忙著作
+忙著名 忙著名
+忙著錄 忙著录
+忙著稱 忙著称
+忙著者 忙著者
+忙著述 忙著述
+懷著 怀着
+懷著書 怀著书
+懷著作 怀著作
+懷著名 怀著名
+懷著錄 怀著录
+懷著稱 怀著称
+懷著者 怀著者
+懷著述 怀著述
+急著 急着
+急著書 急著书
+急著作 急著作
+急著名 急著名
+急著錄 急著录
+急著稱 急著称
+急著者 急著者
+急著述 急著述
+性著 性着
+性著書 性著书
+性著作 性著作
+性著名 性著名
+性著錄 性著录
+性著稱 性著称
+性著者 性著者
+性著述 性著述
+戀著 恋着
+戀著書 恋著书
+戀著作 恋著作
+戀著名 恋著名
+戀著錄 恋著录
+戀著稱 恋著称
+戀著者 恋著者
+戀著述 恋著述
+悠著 悠着
+悠著書 悠著书
+悠著作 悠著作
+悠著名 悠著名
+悠著錄 悠著录
+悠著稱 悠著称
+悠著者 悠著者
+悠著述 悠著述
+慣著 惯着
+慣著書 惯著书
+慣著作 惯著作
+慣著名 惯著名
+慣著錄 惯著录
+慣著稱 惯著称
+慣著者 惯著者
+慣著述 惯著述
+想著 想着
+想著書 想著书
+想著作 想著作
+想著名 想著名
+想著錄 想著录
+想著稱 想著称
+想著者 想著者
+想著述 想著述
+戰著 战着
+戰著書 战著书
+戰著作 战著作
+戰著名 战著名
+戰著錄 战著录
+戰著稱 战著称
+戰著者 战著者
+戰著述 战著述
+戴著 戴着
+戴著書 戴著书
+戴著作 戴著作
+戴著名 戴著名
+戴著錄 戴著录
+戴著稱 戴著称
+戴著者 戴著者
+戴著述 戴著述
+紮著 扎着
+紮著書 扎著书
+紮著作 扎著作
+紮著名 扎著名
+紮著錄 扎著录
+紮著稱 扎著称
+紮著者 扎著者
+紮著述 扎著述
+打著 打着
+打著書 打著书
+打著作 打著作
+打著名 打著名
+打著錄 打著录
+打著稱 打著称
+打著者 打著者
+打著述 打著述
+扛著 扛着
+扛著書 扛著书
+扛著作 扛著作
+扛著名 扛著名
+扛著錄 扛著录
+扛著稱 扛著称
+扛著者 扛著者
+扛著述 扛著述
+抓著 抓着
+抓著作 抓著作
+抓著名 抓著名
+抓著錄 抓著录
+抓著稱 抓著称
+抓著者 抓著者
+抓著述 抓著述
+披著 披着
+披著書 披著书
+披著作 披著作
+披著名 披著名
+披著錄 披著录
+披著稱 披著称
+披著者 披著者
+披著述 披著述
+抬著 抬着
+抬著作 抬著作
+抬著名 抬著名
+抬著錄 抬著录
+抬著稱 抬著称
+抬著者 抬著者
+抬著述 抬著述
+抱著 抱着
+抱著作 抱著作
+抱著名 抱著名
+抱著錄 抱著录
+抱著稱 抱著称
+抱著者 抱著者
+抱著述 抱著述
+拉著 拉着
+拉著書 拉著书
+拉著作 拉著作
+拉著名 拉著名
+拉著錄 拉著录
+拉著稱 拉著称
+拉著者 拉著者
+拉著述 拉著述
+拎著 拎着
+拎著作 拎著作
+拎著名 拎著名
+拎著錄 拎著录
+拎著稱 拎著称
+拎著者 拎著者
+拎著述 拎著述
+拖著 拖着
+拖著作 拖著作
+拖著名 拖著名
+拖著錄 拖著录
+拖著稱 拖著称
+拖著者 拖著者
+拖著述 拖著述
+拼著 拼着
+拼著作 拼著作
+拼著名 拼著名
+拼著錄 拼著录
+拼著稱 拼著称
+拼著者 拼著者
+拼著述 拼著述
+拿著 拿着
+拿著作 拿著作
+拿著名 拿著名
+拿著錄 拿著录
+拿著稱 拿著称
+拿著者 拿著者
+拿著述 拿著述
+持著 持着
+持著作 持著作
+持著名 持著名
+持著錄 持著录
+持著稱 持著称
+持著者 持著者
+持著述 持著述
+挑著 挑着
+挑著作 挑著作
+挑著名 挑著名
+挑著錄 挑著录
+挑著稱 挑著称
+挑著者 挑著者
+挑著述 挑著述
+擋著 挡着
+擋著作 挡著作
+擋著名 挡著名
+擋著錄 挡著录
+擋著稱 挡著称
+擋著者 挡著者
+擋著述 挡著述
+掙著 挣着
+掙著書 挣著书
+掙著作 挣著作
+掙著名 挣著名
+掙著錄 挣著录
+掙著稱 挣著称
+掙著者 挣著者
+掙著述 挣著述
+揮著 挥着
+揮著作 挥著作
+揮著名 挥著名
+揮著錄 挥著录
+揮著稱 挥著称
+揮著者 挥著者
+揮著述 挥著述
+挨著 挨着
+挨著作 挨著作
+挨著名 挨著名
+挨著錄 挨著录
+挨著稱 挨著称
+挨著者 挨著者
+挨著述 挨著述
+捆著 捆着
+捆著作 捆著作
+捆著名 捆著名
+捆著錄 捆著录
+捆著稱 捆著称
+捆著者 捆著者
+捆著述 捆著述
+據著 据着
+據著書 据著书
+據著作 据著作
+據著名 据著名
+據著錄 据著录
+據著稱 据著称
+據著者 据著者
+據著述 据著述
+掖著 掖着
+掖著作 掖著作
+掖著名 掖著名
+掖著錄 掖著录
+掖著稱 掖著称
+掖著者 掖著者
+掖著述 掖著述
+接著 接着
+接著作 接著作
+接著名 接著名
+接著錄 接著录
+接著稱 接著称
+接著者 接著者
+接著述 接著述
+揉著 揉着
+揉著書 揉著书
+揉著作 揉著作
+揉著名 揉著名
+揉著錄 揉著录
+揉著稱 揉著称
+揉著者 揉著者
+揉著述 揉著述
+提著 提着
+提著作 提著作
+提著名 提著名
+提著錄 提著录
+提著稱 提著称
+提著者 提著者
+提著述 提著述
+摟著 搂着
+摟著作 搂著作
+摟著名 搂著名
+摟著錄 搂著录
+摟著稱 搂著称
+摟著者 搂著者
+摟著述 搂著述
+擺著 摆着
+擺著作 摆著作
+擺著名 摆著名
+擺著錄 摆著录
+擺著稱 摆著称
+擺著者 摆著者
+擺著述 摆著述
+撼著 撼着
+撼著書 撼著书
+撼著作 撼著作
+撼著名 撼著名
+撼著錄 撼著录
+撼著稱 撼著称
+撼著者 撼著者
+撼著述 撼著述
+敞著 敞着
+敞著作 敞著作
+敞著名 敞著名
+敞著錄 敞著录
+敞著稱 敞著称
+敞著者 敞著者
+敞著述 敞著述
+數著 数着
+數著作 数著作
+數著名 数著名
+數著錄 数著录
+數著稱 数著称
+數著者 数著者
+數著述 数著述
+鬥著 斗着
+鬥著書 斗著书
+鬥著作 斗著作
+鬥著名 斗著名
+鬥著錄 斗著录
+鬥著稱 斗著称
+鬥著者 斗著者
+鬥著述 斗著述
+斥著 斥着
+斥著書 斥著书
+斥著作 斥著作
+斥著名 斥著名
+斥著錄 斥著录
+斥著稱 斥著称
+斥著者 斥著者
+斥著述 斥著述
+昂著 昂着
+昂著書 昂著书
+昂著作 昂著作
+昂著名 昂著名
+昂著錄 昂著录
+昂著稱 昂著称
+昂著者 昂著者
+昂著述 昂著述
+映著 映着
+映著書 映著书
+映著作 映著作
+映著名 映著名
+映著錄 映著录
+映著稱 映著称
+映著者 映著者
+映著述 映著述
+晃著 晃着
+晃著作 晃著作
+晃著名 晃著名
+晃著錄 晃著录
+晃著稱 晃著称
+晃著者 晃著者
+晃著述 晃著述
+暗著 暗着
+暗著書 暗著书
+暗著作 暗著作
+暗著名 暗著名
+暗著錄 暗著录
+暗著稱 暗著称
+暗著者 暗著者
+暗著述 暗著述
+有著 有着
+有著書 有著书
+有著作 有著作
+有著名 有著名
+有著錄 有著录
+有著稱 有著称
+有著者 有著者
+有著述 有著述
+望著 望着
+望著作 望著作
+望著名 望著名
+望著錄 望著录
+望著稱 望著称
+望著者 望著者
+望著述 望著述
+朝著 朝着
+朝著作 朝著作
+朝著名 朝著名
+朝著錄 朝著录
+朝著稱 朝著称
+朝著者 朝著者
+朝著述 朝著述
+本著 本着
+本著書 本著书
+本著作 本著作
+本著名 本著名
+本著錄 本著录
+本著稱 本著称
+本著者 本著者
+本著述 本著述
+殺著 杀着
+殺著書 杀著书
+殺著作 杀著作
+殺著名 杀著名
+殺著錄 杀著录
+殺著稱 杀著称
+殺著者 杀著者
+殺著述 杀著述
+雜著 杂着
+雜著書 杂著书
+雜著作 杂著作
+雜著名 杂著名
+雜著錄 杂著录
+雜著稱 杂著称
+雜著者 杂著者
+雜著述 杂著述
+來著 来着
+來著書 来著书
+來著作 来著作
+來著名 来著名
+來著錄 来著录
+來著稱 来著称
+來著者 来著者
+來著述 来著述
+枕著 枕着
+枕著作 枕著作
+枕著名 枕著名
+枕著錄 枕著录
+枕著稱 枕著称
+枕著者 枕著者
+枕著述 枕著述
+夢著 梦着
+夢著書 梦著书
+夢著作 梦著作
+夢著名 梦著名
+夢著錄 梦著录
+夢著稱 梦著称
+夢著者 梦著者
+夢著述 梦著述
+梳著 梳着
+梳著作 梳著作
+梳著名 梳著名
+梳著錄 梳著录
+梳著稱 梳著称
+梳著者 梳著者
+梳著述 梳著述
+求著 求着
+求著書 求著书
+求著作 求著作
+求著名 求著名
+求著錄 求著录
+求著稱 求著称
+求著者 求著者
+求著述 求著述
+沉著 沉着
+沉著書 沉著书
+沉著作 沉著作
+沉著名 沉著名
+沉著錄 沉著录
+沉著稱 沉著称
+沉著者 沉著者
+沉著述 沉著述
+沿著 沿着
+沿著書 沿著书
+沿著作 沿著作
+沿著名 沿著名
+沿著錄 沿著录
+沿著稱 沿著称
+沿著者 沿著者
+沿著述 沿著述
+活著 活着
+活著書 活著书
+活著作 活著作
+活著名 活著名
+活著錄 活著录
+活著稱 活著称
+活著者 活著者
+活著述 活著述
+流著 流着
+流著書 流著书
+流著作 流著作
+流著名 流著名
+流著錄 流著录
+流著稱 流著称
+流著者 流著者
+流著述 流著述
+浮著 浮着
+浮著書 浮著书
+浮著作 浮著作
+浮著名 浮著名
+浮著錄 浮著录
+浮著稱 浮著称
+浮著者 浮著者
+浮著述 浮著述
+潤著 润着
+潤著書 润著书
+潤著作 润著作
+潤著名 润著名
+潤著錄 润著录
+潤著稱 润著称
+潤著者 润著者
+潤著述 润著述
+涵著 涵着
+涵著書 涵著书
+涵著作 涵著作
+涵著名 涵著名
+涵著錄 涵著录
+涵著稱 涵著称
+涵著者 涵著者
+涵著述 涵著述
+渴著 渴着
+渴著書 渴著书
+渴著作 渴著作
+渴著名 渴著名
+渴著錄 渴著录
+渴著稱 渴著称
+渴著者 渴著者
+渴著述 渴著述
+溢著 溢着
+溢著書 溢著书
+溢著作 溢著作
+溢著名 溢著名
+溢著錄 溢著录
+溢著稱 溢著称
+溢著者 溢著者
+溢著述 溢著述
+演著 演着
+演著書 演著书
+演著作 演著作
+演著名 演著名
+演著錄 演著录
+演著稱 演著称
+演著者 演著者
+演著述 演著述
+漫著 漫着
+漫著書 漫著书
+漫著作 漫著作
+漫著名 漫著名
+漫著錄 漫著录
+漫著稱 漫著称
+漫著者 漫著者
+漫著述 漫著述
+點著 点着
+點著作 点著作
+點著名 点著名
+點著錄 点著录
+點著稱 点著称
+點著者 点著者
+點著述 点著述
+燒著 烧着
+燒著作 烧著作
+燒著名 烧著名
+燒著錄 烧著录
+燒著稱 烧著称
+燒著者 烧著者
+燒著述 烧著述
+照著 照着
+照著書 照著书
+照著作 照著作
+照著名 照著名
+照著錄 照著录
+照著稱 照著称
+照著者 照著者
+照著述 照著述
+愛著 爱着
+愛著書 爱著书
+愛著作 爱著作
+愛著名 爱著名
+愛著錄 爱著录
+愛著稱 爱著称
+愛著者 爱著者
+愛著述 爱著述
+牽著 牵着
+牽著書 牵著书
+牽著作 牵著作
+牽著名 牵著名
+牽著錄 牵著录
+牽著稱 牵著称
+牽著者 牵著者
+牽著述 牵著述
+獨著 独着
+獨著書 独著书
+獨著作 独著作
+獨著名 独著名
+獨著錄 独著录
+獨著稱 独著称
+獨著者 独著者
+獨著述 独著述
+猜著 猜着
+猜著書 猜着书
+猜著作 猜著作
+猜著名 猜著名
+猜著錄 猜著录
+猜著稱 猜著称
+猜著者 猜著者
+猜著述 猜著述
+甜著 甜着
+甜著書 甜著书
+甜著作 甜著作
+甜著名 甜著名
+甜著錄 甜著录
+甜著稱 甜著称
+甜著者 甜著者
+甜著述 甜著述
+用著 用着
+用著書 用著书
+用著作 用著作
+用著名 用著名
+用著錄 用著录
+用著稱 用著称
+用著者 用著者
+用著述 用著述
+留著 留着
+留著書 留着书
+留著作 留著作
+留著名 留著名
+留著錄 留著录
+留著稱 留著称
+留著者 留著者
+留著述 留著述
+疑著 疑着
+疑著書 疑著书
+疑著作 疑著作
+疑著名 疑著名
+疑著錄 疑著录
+疑著稱 疑著称
+疑著者 疑著者
+疑著述 疑著述
+皺著 皱着
+皺著書 皱著书
+皺著作 皱著作
+皺著名 皱著名
+皺著錄 皱著录
+皺著稱 皱著称
+皺著者 皱著者
+皺著述 皱著述
+盛著 盛着
+盛著書 盛著书
+盛著作 盛著作
+盛著名 盛著名
+盛著錄 盛著录
+盛著稱 盛著称
+盛著者 盛著者
+盛著述 盛著述
+盯著 盯着
+盯著書 盯着书
+盯著作 盯著作
+盯著名 盯著名
+盯著錄 盯著录
+盯著稱 盯著称
+盯著者 盯著者
+盯著述 盯著述
+盾著 盾着
+盾著書 盾著书
+盾著作 盾著作
+盾著名 盾著名
+盾著錄 盾著录
+盾著稱 盾著称
+盾著者 盾著者
+盾著述 盾著述
+看著 看着
+看著書 看着书
+看著作 看著作
+看著名 看著名
+看著錄 看著录
+看著稱 看著称
+看著者 看著者
+看著述 看著述
+瞧著 瞧着
+瞧著書 瞧着书
+瞧著作 瞧著作
+瞧著名 瞧著名
+瞧著錄 瞧著录
+瞧著稱 瞧著称
+瞧著者 瞧著者
+瞧著述 瞧著述
+存著 存着
+存著名 存著名
+劃著 划着
+別著 别着
+刮著 刮着
+掛著 挂着
+吊著 吊着
+回著 回着
+回著名 回著名
+塗著 涂着
+麼著 么着
+擔著 担着
+負著 负着
+板著臉 板着脸
+為著 为着
+為著作 为著作
+為著名 为著名
+為著錄 为著录
+為著稱 为著称
+為著者 为著者
+為著述 为著述
+為著《 为著《
+畫著 画着
+畫著作 画著作
+畫著名 画著名
+畫著稱 画著称
+畫著者 画著者
+發著 发着
+發著作 发著作
+發著名 发著名
+發著稱 发著称
+發著者 发著者
+發著《 发著《
+簽著 签着
+繃著 绷着
+覆著 覆着
+蓋著 蓋着
+說著 说着
+說著作 说著作
+說著稱 说著称
+說著者 说著者
+說著述 说著述
+湊合著 凑合着
+配合著 配合着
+配合著名 配合著名
+關係著 关系着
+鬧著 闹着
+蒙著 蒙着
+悶著 闷着
+占著 占着
+占著名 占著名
+占著作 占著作
+占著者 占著者
+呆著 呆着
+包著 包着
+駛著 驶着
+睡著 睡着
+睡著書 睡著书
+睡著作 睡著作
+睡著名 睡著名
+睡著錄 睡著录
+睡著稱 睡著称
+睡著者 睡著者
+睡著述 睡著述
+瞞著 瞒着
+瞞著書 瞒著书
+瞞著作 瞒著作
+瞞著名 瞒著名
+瞞著錄 瞒著录
+瞞著稱 瞒著称
+瞞著者 瞒著者
+瞞著述 瞒著述
+瞪著 瞪着
+瞪著書 瞪著书
+瞪著作 瞪著作
+瞪著名 瞪著名
+瞪著錄 瞪著录
+瞪著稱 瞪著称
+瞪著者 瞪著者
+瞪著述 瞪著述
+福著 福着
+福著書 福著书
+福著作 福著作
+福著名 福著名
+福著錄 福著录
+福著稱 福著称
+福著者 福著者
+福著述 福著述
+空著 空着
+空著書 空著书
+空著作 空著作
+空著名 空著名
+空著錄 空著录
+空著稱 空著称
+空著者 空著者
+空著述 空著述
+穿著 穿着
+穿著書 穿著书
+穿著作 穿著作
+穿著名 穿著名
+穿著錄 穿著录
+穿著稱 穿著称
+穿著者 穿著者
+穿著述 穿著述
+豎著 竖着
+豎著書 竖著书
+豎著作 竖著作
+豎著名 竖著名
+豎著錄 竖著录
+豎著稱 竖著称
+豎著者 竖著者
+豎著述 竖著述
+站著 站着
+站著書 站著书
+站著作 站著作
+站著名 站著名
+站著錄 站著录
+站著稱 站著称
+站著者 站著者
+站著述 站著述
+笑著 笑着
+笑著書 笑著书
+笑著作 笑著作
+笑著名 笑著名
+笑著錄 笑著录
+笑著稱 笑著称
+笑著者 笑著者
+笑著述 笑著述
+管著 管着
+管著書 管著书
+管著作 管著作
+管著名 管著名
+管著錄 管著录
+管著稱 管著称
+管著者 管著者
+管著述 管著述
+綁著 绑着
+綁著書 绑著书
+綁著作 绑著作
+綁著名 绑著名
+綁著錄 绑著录
+綁著稱 绑著称
+綁著者 绑著者
+綁著述 绑著述
+繞著 绕着
+繞著書 绕著书
+繞著作 绕著作
+繞著名 绕著名
+繞著錄 绕著录
+繞著稱 绕著称
+繞著者 绕著者
+繞著述 绕著述
+纏著 缠着
+纏著書 缠著书
+纏著作 缠著作
+纏著名 缠著名
+纏著錄 缠著录
+纏著稱 缠著称
+纏著者 缠著者
+纏著述 缠著述
+罩著 罩着
+罩著書 罩著书
+罩著作 罩著作
+罩著名 罩著名
+罩著錄 罩著录
+罩著稱 罩著称
+罩著者 罩著者
+罩著述 罩著述
+美著 美着
+美著書 美著书
+美著作 美著作
+美著名 美著名
+美著錄 美著录
+美著稱 美著称
+美著者 美著者
+美著述 美著述
+耀著 耀着
+耀著書 耀著书
+耀著作 耀著作
+耀著名 耀著名
+耀著錄 耀著录
+耀著稱 耀著称
+耀著者 耀著者
+耀著述 耀著述
+考著 考着
+考著書 考著书
+考著作 考著作
+考著名 考著名
+考著錄 考著录
+考著稱 考著称
+考著者 考著者
+考著述 考著述
+背著 背着
+背著書 背著书
+背著作 背著作
+背著名 背著名
+背著錄 背著录
+背著稱 背著称
+背著者 背著者
+背著述 背著述
+膠著 胶着
+膠著書 胶著书
+膠著作 胶著作
+膠著名 胶著名
+膠著錄 胶著录
+膠著稱 胶著称
+膠著者 胶著者
+膠著述 胶著述
+藝著 艺着
+藝著書 艺著书
+藝著作 艺著作
+藝著名 艺著名
+藝著錄 艺著录
+藝著稱 艺著称
+藝著者 艺著者
+藝著述 艺著述
+苦著 苦着
+苦著書 苦著书
+苦著作 苦著作
+苦著名 苦著名
+苦著錄 苦著录
+苦著稱 苦著称
+苦著者 苦著者
+苦著述 苦著述
+獲著 获着
+獲著書 获著书
+獲著作 获著作
+獲著名 获著名
+獲著錄 获著录
+獲著稱 获著称
+獲著者 获著者
+獲著述 获著述
+落著 落着
+落著書 落著书
+落著作 落著作
+落著名 落著名
+落著錄 落著录
+落著稱 落著称
+落著者 落著者
+落著述 落著述
+蒙著書 蒙著书
+蒙著作 蒙著作
+蒙著名 蒙著名
+蒙著錄 蒙著录
+蒙著稱 蒙著称
+蒙著者 蒙著者
+蒙著述 蒙著述
+藏著 藏着
+藏著書 藏著书
+藏著作 藏著作
+藏著名 藏著名
+藏著錄 藏著录
+藏著稱 藏著称
+藏著者 藏著者
+藏著述 藏著述
+蘸著 蘸着
+蘸著書 蘸著书
+蘸著作 蘸著作
+蘸著名 蘸著名
+蘸著錄 蘸著录
+蘸著稱 蘸著称
+蘸著者 蘸著者
+蘸著述 蘸著述
+行著 行着
+行著書 行著书
+行著作 行著作
+行著名 行著名
+行著錄 行著录
+行著稱 行著称
+行著者 行著者
+行著述 行著述
+衣著 衣着
+衣著書 衣著书
+衣著作 衣著作
+衣著名 衣著名
+衣著錄 衣著录
+衣著稱 衣著称
+衣著者 衣著者
+衣著述 衣著述
+裝著 装着
+裝著書 装著书
+裝著作 装著作
+裝著名 装著名
+裝著錄 装著录
+裝著稱 装著称
+裝著者 装著者
+裝著述 装著述
+裹著 裹着
+裹著書 裹著书
+裹著作 裹著作
+裹著名 裹著名
+裹著錄 裹著录
+裹著稱 裹著称
+裹著者 裹著者
+裹著述 裹著述
+見著 见着
+見著書 见著书
+見著作 见著作
+見著名 见著名
+見著錄 见著录
+見著稱 见著称
+見著者 见著者
+見著述 见著述
+記著 记着
+記著書 记著书
+記著作 记著作
+記著名 记著名
+記著錄 记著录
+記著稱 记著称
+記著者 记著者
+記著述 记著述
+試著 试着
+試著書 试著书
+試著作 试著作
+試著名 试著名
+試著錄 试著录
+試著稱 试著称
+試著者 试著者
+試著述 试著述
+語著 语着
+語著書 语著书
+語著作 语著作
+語著名 语著名
+語著錄 语著录
+語著稱 语著称
+語著者 语著者
+語著述 语著述
+豫著 豫着
+豫著書 豫著书
+豫著作 豫著作
+豫著名 豫著名
+豫著錄 豫著录
+豫著稱 豫著称
+豫著者 豫著者
+豫著述 豫著述
+貞著 贞着
+貞著書 贞著书
+貞著作 贞著作
+貞著名 贞著名
+貞著錄 贞著录
+貞著稱 贞著称
+貞著者 贞著者
+貞著述 贞著述
+走著 走着
+走著書 走著书
+走著作 走著作
+走著名 走著名
+走著錄 走著录
+走著稱 走著称
+走著者 走著者
+走著述 走著述
+趕著 赶着
+趕著書 赶著书
+趕著作 赶著作
+趕著名 赶著名
+趕著錄 赶著录
+趕著稱 赶著称
+趕著者 赶著者
+趕著述 赶著述
+趴著 趴着
+趴著書 趴著书
+趴著作 趴著作
+趴著名 趴著名
+趴著錄 趴著录
+趴著稱 趴著称
+趴著者 趴著者
+趴著述 趴著述
+躍著 跃着
+躍著書 跃著书
+躍著作 跃著作
+躍著名 跃著名
+躍著錄 跃著录
+躍著稱 跃著称
+躍著者 跃著者
+躍著述 跃著述
+跑著 跑着
+跑著書 跑著书
+跑著作 跑著作
+跑著名 跑著名
+跑著錄 跑著录
+跑著稱 跑著称
+跑著者 跑著者
+跑著述 跑著述
+跟著 跟着
+跟著書 跟著书
+跟著作 跟著作
+跟著名 跟著名
+跟著錄 跟著录
+跟著稱 跟著称
+跟著者 跟著者
+跟著述 跟著述
+跪著 跪着
+跪著書 跪著书
+跪著作 跪著作
+跪著名 跪著名
+跪著錄 跪著录
+跪著稱 跪著称
+跪著者 跪著者
+跪著述 跪著述
+跳著 跳着
+跳著書 跳著书
+跳著作 跳著作
+跳著名 跳著名
+跳著錄 跳著录
+跳著稱 跳著称
+跳著者 跳著者
+跳著述 跳著述
+踏著 踏着
+踏著書 踏著书
+踏著作 踏著作
+踏著名 踏著名
+踏著錄 踏著录
+踏著稱 踏著称
+踏著者 踏著者
+踏著述 踏著述
+踩著 踩着
+踩著書 踩著书
+踩著作 踩著作
+踩著名 踩著名
+踩著錄 踩著录
+踩著稱 踩著称
+踩著者 踩著者
+踩著述 踩著述
+身著 身着
+身著書 身著书
+身著作 身著作
+身著名 身著名
+身著錄 身著录
+身著稱 身著称
+身著者 身著者
+身著述 身著述
+躺著 躺着
+躺著書 躺著书
+躺著作 躺著作
+躺著名 躺著名
+躺著錄 躺著录
+躺著稱 躺著称
+躺著者 躺著者
+躺著述 躺著述
+轉著 转着
+轉著書 转著书
+轉著作 转著作
+轉著名 转著名
+轉著錄 转著录
+轉著稱 转著称
+轉著者 转著者
+轉著述 转著述
+載著 载着
+載著書 载著书
+載著作 载著作
+載著名 载著名
+載著錄 载著录
+載著稱 载著称
+載著者 载著者
+載著述 载著述
+達著 达着
+達著書 达著书
+達著作 达著作
+達著名 达著名
+達著錄 达著录
+達著稱 达著称
+達著者 达著者
+達著述 达著述
+遠著 远着
+遠著書 远著书
+遠著作 远著作
+遠著名 远著名
+遠著錄 远著录
+遠著稱 远著称
+遠著者 远著者
+遠著述 远著述
+連著 连着
+連著書 连著书
+連著作 连著作
+連著名 连著名
+連著錄 连著录
+連著稱 连著称
+連著者 连著者
+連著述 连著述
+追著 追着
+追著書 追著书
+追著作 追著作
+追著名 追著名
+追著錄 追著录
+追著稱 追著称
+追著者 追著者
+追著述 追著述
+逆著 逆着
+逆著書 逆著书
+逆著作 逆著作
+逆著名 逆著名
+逆著錄 逆著录
+逆著稱 逆著称
+逆著者 逆著者
+逆著述 逆著述
+逼著 逼着
+逼著書 逼著书
+逼著作 逼著作
+逼著名 逼著名
+逼著錄 逼著录
+逼著稱 逼著称
+逼著者 逼著者
+逼著述 逼著述
+遇著 遇着
+遇著書 遇著书
+遇著作 遇著作
+遇著名 遇著名
+遇著錄 遇著录
+遇著稱 遇著称
+遇著者 遇著者
+遇著述 遇著述
+配著 配着
+配著書 配著书
+配著作 配著作
+配著名 配著名
+配著錄 配著录
+配著稱 配著称
+配著者 配著者
+配著述 配著述
+釀著 酿着
+釀著書 酿著书
+釀著作 酿著作
+釀著名 酿著名
+釀著錄 酿著录
+釀著稱 酿著称
+釀著者 酿著者
+釀著述 酿著述
+鋪著 铺着
+鋪著書 铺著书
+鋪著作 铺著作
+鋪著名 铺著名
+鋪著錄 铺著录
+鋪著稱 铺著称
+鋪著者 铺著者
+鋪著述 铺著述
+閉著 闭着
+閉著書 闭著书
+閉著作 闭著作
+閉著名 闭著名
+閉著錄 闭著录
+閉著稱 闭著称
+閉著者 闭著者
+閉著述 闭著述
+閑著 闲着
+閑著書 闲著书
+閑著作 闲著作
+閑著名 闲著名
+閑著錄 闲著录
+閑著稱 闲著称
+閑著者 闲著者
+閑著述 闲著述
+附著 附着
+附著書 附著书
+附著作 附著作
+附著名 附著名
+附著錄 附著录
+附著稱 附著称
+附著者 附著者
+附著述 附著述
+陋著 陋着
+陋著書 陋著书
+陋著作 陋著作
+陋著名 陋著名
+陋著錄 陋著录
+陋著稱 陋著称
+陋著者 陋著者
+陋著述 陋著述
+陪著 陪着
+陪著書 陪著书
+陪著作 陪著作
+陪著名 陪著名
+陪著錄 陪著录
+陪著稱 陪著称
+陪著者 陪著者
+陪著述 陪著述
+隨著 随着
+隨著書 随著书
+隨著作 随著作
+隨著名 随著名
+隨著錄 随著录
+隨著稱 随著称
+隨著者 随著者
+隨著述 随著述
+隔著 隔着
+隔著書 隔著书
+隔著作 隔著作
+隔著名 隔著名
+隔著錄 隔著录
+隔著稱 隔著称
+隔著者 隔著者
+隔著述 隔著述
+雅著 雅着
+雅著書 雅著书
+雅著作 雅著作
+雅著名 雅著名
+雅著錄 雅著录
+雅著稱 雅著称
+雅著者 雅著者
+雅著述 雅著述
+頂著 顶着
+頂著書 顶著书
+頂著作 顶著作
+頂著名 顶著名
+頂著錄 顶著录
+頂著稱 顶著称
+頂著者 顶著者
+頂著述 顶著述
+順著 顺着
+順著書 顺著书
+順著作 顺著作
+順著名 顺著名
+順著錄 顺著录
+順著稱 顺著称
+順著者 顺著者
+順著述 顺著述
+領著 领着
+領著書 领著书
+領著作 领著作
+領著名 领著名
+領著錄 领著录
+領著稱 领著称
+領著者 领著者
+領著述 领著述
+飄著 飘着
+飄著書 飘著书
+飄著作 飘著作
+飄著名 飘著名
+飄著錄 飘著录
+飄著稱 飘著称
+飄著者 飘著者
+飄著述 飘著述
+駕著 驾着
+駕著書 驾著书
+駕著作 驾著作
+駕著名 驾著名
+駕著錄 驾著录
+駕著稱 驾著称
+駕著者 驾著者
+駕著述 驾著述
+罵著 骂着
+罵著書 骂著书
+罵著作 骂著作
+罵著名 骂著名
+罵著錄 骂著录
+罵著稱 骂著称
+罵著者 骂著者
+罵著述 骂著述
+騎著 骑着
+騎著書 骑著书
+騎著作 骑著作
+騎著名 骑著名
+騎著錄 骑著录
+騎著稱 骑著称
+騎著者 骑著者
+騎著述 骑著述
+騙著 骗着
+騙著書 骗著书
+騙著作 骗著作
+騙著名 骗著名
+騙著錄 骗著录
+騙著稱 骗著称
+騙著者 骗著者
+騙著述 骗著述
+高著 高着
+高著書 高著书
+高著作 高著作
+高著名 高著名
+高著錄 高著录
+高著稱 高著称
+高著者 高著者
+高著述 高著述
+髭著 髭着
+髭著書 髭著书
+髭著作 髭著作
+髭著名 髭著名
+髭著錄 髭著录
+髭著稱 髭著称
+髭著者 髭著者
+髭著述 髭著述
+黏著 黏着
+黏著書 黏著书
+黏著作 黏著作
+黏著名 黏著名
+黏著錄 黏著录
+黏著稱 黏著称
+黏著者 黏著者
+黏著述 黏著述
+護著 护着
+護著書 护著书
+護著作 护著作
+護著名 护著名
+護著錄 护著录
+護著稱 护著称
+護著者 护著者
+護著述 护著述
+保護著 保护着
+愛護著 爱护着
+庇護著 庇护着
+傳著 传着
+傳著書 传著书
+傳著作 传著作
+傳著名 传著名
+傳著錄 传著录
+傳著稱 传著称
+傳著者 传著者
+傳著述 传著述
+標誌著 标志着
+流露著 流露着
+靠著 靠着
+靠著作 靠著作
+靠著名 靠著名
+靠著錄 靠著录
+靠著稱 靠著称
+靠著者 靠著者
+靠著述 靠著述
+玩著 玩着
+迫著 迫着
+吃著 吃着
+聞著 闻着
+嗅著 嗅着
+警戒著 警戒着
+過著 过着
+過著作 过著作
+過著名 过著名
+過著錄 过著录
+過著稱 过著称
+過著者 过著者
+過著述 过著述
+下著 下着
+下著作 下著作
+下著名 下著名
+下著錄 下著录
+下著录 下著录
+下著稱 下著称
+下著称 下著称
+下著者 下著者
+下著述 下著述
+下著有 下著有
+放著 放着
+放著作 放著作
+放著名 放著名
+放著稱 放著称
+放著称 放著称
+藉著 借着
+显著 显著
+顯著 显著
+標誌著 标志着
+幹著 干着
+幹著名 幹著名
+幹著稱 幹著称
+穫著 获着
+閒著 闲着
+飃著 飘着
+沈著 沉着
+擡著 抬着
+著甚麽 着什么
+滿著 满着
+滿著名 满著名
+滿著作 满著作
+滿著者 满著者
+衝著 冲着
+沖著 冲着
+沖著《 冲著《
+沖著。 冲著。
+沖著, 冲著,
+繫著 系着
+颳著 刮着
+鬥著 斗着
+象徵著 象征着
+象徵著名 象征著名
+三十六著 三十六着
+走為上著 走为上着
記憶體 内存
-預設 默认
-串列 串行
-串列加速器 串列加速器
乙太網 以太网
點陣圖 位图
-常式 例程
-光碟 光盘
光碟機 光驱
-全形 全角
-載入 加载
-半形 半角
-變數 变量
雜訊 噪声
-因數 因子
功能變數名稱 域名
音效卡 声卡
字型大小 字号
字型檔 字库
欄位 字段
-字元 字符
-字元济 字元济
-字元濟 字元济
-字元会 字元会
-字元會 字元会
-存檔 存盘
-定址 寻址
-章節附註 尾注
非同步 异步
匯流排 总线
-括弧 括号
-介面 接口
+介面 界面
控制項 控件
-許可權 权限
-碟片 盘片
矽片 硅片
矽谷 硅谷
硬碟 硬盘
磁碟 磁盘
磁軌 磁道
程式控制 程控
-遠程控制 远程控制
-远程控制 远程控制
運算元 算子
演算法 算法
晶片 芯片
晶元 芯片
片語 词组
軟碟機 软驱
-快閃記憶體 快闪存储器
+快閃記憶體 闪存
滑鼠 鼠标
滑鼠蛇 滑鼠蛇
二進位 二进制
@@ -63,7 +2289,7 @@
滿八進位 满八进位
十進位 十进制
滿十進位 满十进位
-16進位 16进位
+16進位 16进制
滿16進位 满16进位
二進位制 二进位制
六進位制 六进位制
@@ -72,60 +2298,37 @@
16進位制 16进位制
互動式 交互式
優先順序 优先级
-感測 传感
攜帶型 便携式
資訊理論 信息论
迴圈 循环
-防寫 写保护
解析度 分辨率
伺服器 服务器
-等於 等于
區域網 局域网
巨集 宏
-掃瞄器 扫瞄仪
+掃瞄器 扫描仪
寬頻 宽带
資料庫 数据库
-萬曆 万历
-永曆 永历
-辭彙 词汇
母音 元音
-字母 字母
-頭槌 头球
-進球 入球
-顆進球 粒入球
-射門 打门
-蓋火鍋 火锅盖帽
印表機 打印机
-打印機 打印机
位元組 字节
-字節 字节
列印 打印
-打印 打印
硬體 硬件
二極體 二极管
-二極管 二极管
三極體 三极管
-三極管 三极管
軟體 软件
-軟件 软件
+軟體動物 软体动物
+軟體家具 软体家具
網路 网络
-網絡 网络
人工智慧 人工智能
太空梭 航天飞机
穿梭機 航天飞机
網際網路 互联网
-互聯網 互联网
機械人 机器人
-機器人 机器人
行動電話 移动电话
流動電話 移动电话
-調制解調器 调制解调器
數據機 调制解调器
-短訊 短信
-簡訊 短信
烏茲別克 乌兹别克斯坦
葉門 也门
-伯利茲 伯利兹
貝里斯 伯利兹
維德角 佛得角
克羅埃西亞 克罗地亚
@@ -158,19 +2361,15 @@
衣索比亞 埃塞俄比亚
吉里巴斯 基里巴斯
塔吉克 塔吉克斯坦
+塔吉克斯坦 塔吉克斯坦
塞拉利昂 塞拉利昂
塞普勒斯 塞浦路斯
塞席爾 塞舌尔
-多米尼克 多米尼加国
安地卡及巴布達 安提瓜和巴布达
-尼日利亞 尼日利亚
-尼日利亚 尼日利亚
奈及利亞 尼日利亚
尼日爾 尼日尔
-尼日尔 尼日尔
巴貝多 巴巴多斯
巴布亞紐幾內亞 巴布亚新几内亚
-布基納法索 布基纳法索
布吉納法索 布基纳法索
蒲隆地 布隆迪
帛琉 帕劳
@@ -190,20 +2389,15 @@
辛巴威 津巴布韦
宏都拉斯 洪都拉斯
千里達托貝哥 特立尼达和托巴哥
-諾魯 瑙鲁
萬那杜 瓦努阿图
溫納圖 瓦努阿图
葛摩 科摩罗
象牙海岸 科特迪瓦
突尼西亞 突尼斯
-索馬利亞 索马里
寮國 老挝
-肯雅 肯尼亚
-肯亞 肯尼亚
蘇利南 苏里南
莫三比克 莫桑比克
賴索托 莱索托
-貝南 贝宁
尚比亞 赞比亚
亞塞拜然 阿塞拜疆
阿拉伯聯合大公國 阿拉伯联合酋长国
@@ -211,65 +2405,305 @@
馬爾地夫 马尔代夫
馬爾他 马耳他
馬利共和國 马里共和国
-即食麵 方便面
-快速面 方便面
-速食麵 方便面
-泡麵 方便面
笨豬跳 蹦极跳
绑紧跳 蹦极跳
-冷盤 凉菜
-冷菜 凉菜
-散钱 零钱
-谐星 笑星
-夜学 夜校
-华乐 民乐
-中樂 民乐
-軍中樂園 军中乐园
-华乐街 华乐街
-屋价 房价
-計程車 出租车
-單車 自行车
-節慶 节日
-芝士 乾酪
狗隻 犬只
士多啤梨 草莓
忌廉 奶油
-桌球 台球
撞球 台球
-衞生 卫生
-衛生 卫生
賓士 奔驰
-平治 奔驰
-平治之亂 平治之乱
-平治之乱 平治之乱
積架 捷豹
-福斯 大众
-福士 大众
-萬事得 马自达
-寶獅 标志
-拿破崙 拿破仑
布殊 布什
-布希 布什
-布希亞 布希亚
-布希亚 布希亚
柯林頓 克林顿
-海珊 侯赛因
-梵谷 凡高
-大衛碧咸 大卫·贝克汉姆
-米高奧雲 迈克尔·欧文
-卡佩雅蒂 珍妮弗·卡普里亚蒂
-沙芬 马拉特·萨芬
-舒麥加 迈克尔·舒马赫
+梵谷 梵高
+碧咸 贝克汉姆
+米高·奧雲 迈克尔·欧文
+卡佩雅蒂 卡普里亚蒂
+舒麥加 舒马赫
希特拉 希特勒
黛安娜 戴安娜
-榴槤 榴莲
-榴梿 榴莲
-矽 硅
-矽肺 矽肺
-矽塵 矽尘
-矽尘 矽尘
-矽鋼 矽钢
-矽钢 矽钢
-侏儸紀 侏罗纪
-甚麽 什么
-甚麼 什么
+雷諾瓦 雷诺阿
+達文西 达芬奇
+達·文西 达·芬奇
+辛康納利 肖恩·康纳利
+維根斯坦 维特根斯坦
+索忍尼辛 索尔仁尼琴
+索贊尼辛 索尔仁尼琴
+蘇辛尼津 索尔仁尼琴
+皮雅斯·布士南 皮尔斯·布鲁斯南
+甘迺迪 肯尼迪
+梅赫西迪 梅赛德斯
+李奧納多 列奥那多
+普利茲 普利策
+戈巴契夫 戈尔巴乔夫
+德希達 德里达
+席哈克 希拉克
+蘿拉 劳拉
+史達林 斯大林
+史特勞斯 斯特劳斯
+卡斯楚 卡斯特罗
+占士邦 詹姆斯·邦德
+傅利葉 傅里叶
+伊莉莎白 伊丽莎白
+派屈克 帕特里克
+蒲美蓬 普密蓬
+畢卡索 毕加索
+蒲朗克 普朗克
+薛丁格 薛定谔
+克卜勒 开普勒
+都卜勒 多普勒
+邱吉爾 丘吉尔
+狄托 铁托
+查維茲 查韦斯
+班傑明 本杰明
+柯德莉·夏萍 奥黛丽·赫本
+華勒沙 瓦文萨
+華里沙 瓦文萨
+歐巴馬 奥巴马
+北韓 北朝鲜
+寮人民民主共和國 老挝人民民主共和国
+寮語 老挝语
+蘭卡威 浮罗交怡
+雷伊泰灣 莱特湾
+耶加達 雅加达
+伊斯蘭瑪巴德 伊斯兰堡
+喀拉蚩 卡拉奇
+葉里溫 埃里温
+提比里西 第比利斯
+巴斯拉 巴士拉
+杜拜 迪拜
+賽普勒斯 塞浦路斯
+荷姆茲 霍尔木兹
+加薩走廊 加沙地带
+西臺人 赫梯人
+西臺族 赫梯族
+西臺文 赫梯文
+西臺語 赫梯语
+西臺王 赫梯王
+西臺國 赫梯国
+西臺帝 赫梯帝
+坎培拉 堪培拉
+玻里尼西亞 波利尼西亚
+紐幾內亞 新几内亚
+強斯頓環礁 约翰斯顿岛
+帕邁拉環礁 巴尔米拉环礁
+萌島 马恩岛
+伯明罕 伯明翰
+威爾斯 威尔士
+諾曼第 诺曼底
+土魯斯 图卢兹
+坎城 戛纳
+羅亞爾 卢瓦尔
+艾菲爾 埃菲尔
+羅浮宮 卢浮宫
+安哈特 安哈尔特
+布蘭登堡 勃兰登堡
+什勒斯維希 石勒苏益格
+霍爾斯坦 荷尔斯泰因
+前波莫瑞 前波美拉尼亚
+威斯伐倫 威斯特法伦
+德勒斯登 德累斯顿
+杜塞道夫 杜塞尔多夫
+漢諾瓦 汉诺威
+柏林圍牆 柏林墙
+巴塞隆拿 巴塞罗那
+巴塞隆納 巴塞罗那
+西維爾 塞维利亚
+塞維亞 塞维利亚
+華倫西亞 巴伦西亚
+瓦倫西亞 巴伦西亚
+雅爾達 雅尔塔
+車諾比 切尔诺贝利
+馬斯垂克 马斯特里赫特
+波士尼亞 波斯尼亚
+塞拉耶佛 萨拉热窝
+貝爾格勒 贝尔格莱德
+蒙特內哥羅 黑山
+塞爾維亞與蒙特內哥羅 塞尔维亚和黑山
+伊斯坦堡 伊斯坦布尔
+庇里牛斯 比利牛斯
+亞斯文 阿斯旺
+厄立特里亞 厄立特里亚
+厄利垂亚 厄立特里亚
+亞歷山卓 亚历山大
+雅穆索戈 亚穆苏克罗
+畿內亞 几内亚
+索馬利蘭 索马里兰
+吉力馬札羅 乞力马扎罗
+索馬利亞 索马里
+金夏沙 金沙萨
+三蘭港 达累斯萨拉姆
+布隆泉 布隆方丹
+馬拉威 马拉维
+百慕達 百慕大
+三藩市 旧金山
+荷里活 好莱坞
+麻薩諸塞 马萨诸塞
+伊利諾 伊利诺伊
+伊利諾伊 伊利诺伊
+密执安 密歇根
+密西根 密歇根
+紐澤西 新泽西
+蒙特婁 蒙特利尔
+滿地可 蒙特利尔
+千里達及托巴哥 特立尼达和多巴哥
+千里達 特立尼达
+托巴哥 多巴哥
+多明尼加 多米尼加
+頻寬 带宽
+數位相機 数码相机
+單眼相機 单反相机
+單鏡反光機 单反相机
+韌體 固件
+唯讀 只读
+作業系統 操作系统
+外掛程式 插件
+電晶體 晶体管
+顯示卡 显卡
+主機板 主板
+網際網絡 互联网
+原始碼 源代码
+螢幕 屏幕
+螢屏 荧屏
+解像度 分辨率
+IP位址 IP地址
+IP 位址 IP 地址
+程式設計師 程序员
+公尺 米
+公升 升
+英吋 英寸
+英呎 英尺
+高畫質 高清
+飛彈 导弹
+電視影集 电视系列剧
+原子筆 圆珠笔
+智慧卡 智能卡
+鐵達尼號 泰坦尼克号
+轉殖 克隆
+空中巴士 空中客车
+電視劇集 电视剧
+狂牛症 疯牛病
+結他 吉他
+了結他 了结他
+連結他 连结他
+已開發國家 发达国家
+太空飛行員 宇航员
+太空衣 宇航服
+外部連結 外部链接
+網站連結 网站链接
+網頁連結 网页链接
+超連結 超链接
+動畫影集 系列动画片
+全球資訊網 万维网
+伊波拉 埃博拉
+C肝 丙肝
+C型肝炎 丙型肝炎
+B肝 乙肝
+B型肝炎 乙型肝炎
+A肝 甲肝
+A型肝炎 甲型肝炎
+錄影帶 录像带
+音樂錄影帶 音乐录影带
+健力士世界紀錄 吉尼斯世界纪录
+金氏世界紀錄 吉尼斯世界纪录
+祖雲達斯 尤文图斯
+若且唯若 当且仅当
+山葉 雅马哈
+複製人 克隆人
+白朗寧 勃朗宁
+形上學 形而上学
+藍芽 蓝牙
+槍枝 枪支
+掃瞄 扫描
+愛滋 艾滋
+正體中文 繁体中文
+智慧財產權 知识产权
+智財權 知识产权
+哥德式 哥特式
+芮氏0 里氏0
+芮氏1 里氏1
+芮氏2 里氏2
+芮氏3 里氏3
+芮氏4 里氏4
+芮氏5 里氏5
+芮氏6 里氏6
+芮氏7 里氏7
+芮氏8 里氏8
+芮氏9 里氏9
+芮氏規模 里氏震级
+芮氏地震規模 里氏地震规模
+黎克特制 里氏
+機率 概率
+行政總裁 首席执行官
+執行長, 首席执行官,
+執行長、 首席执行官、
+執行長。 首席执行官。
+財務長, 首席财务官,
+財務長、 首席财务官、
+財務長。 首席财务官。
+營運長, 首席运营官,
+營運長、 首席运营官、
+營運長。 首席运营官。
+智慧型 智能
+智慧手機 智能手机
+可攜式 便携式
+電腦程式 计算机程序
+應用程式 应用程序
+雷射 激光
+尖峰時間 高峰时间
+尖峰時段 高峰时段
+咖哩 咖喱
+東協 东盟
+亚细安 东盟
+大英國協 英联邦
+共和联邦 英联邦
+阿布達比 阿布扎比
+蓋曼群島 开曼群岛
+柴契爾 撒切尔
+戴卓爾 撒切尔
+凱薩琳 凯瑟琳
+嘉芙蓮 凯瑟琳
+孟德爾頌 门德尔松
+孟德爾遜 门德尔松
+蕭士塔高維奇 肖斯塔科维奇
+蕭士達高維契 肖斯塔科维奇
+工具機 机床
+空氣品質 空气质量
+空氣質素 空气质量
+伏地挺身 俯卧撑
+掌上壓 俯卧撑
+數位電視 数字电视
+數碼電視 数字电视
+數位技術 数字技术
+數碼技術 数字技术
+數位訊號 数字信号
+數碼訊號 数字信号
+行動網路 移动网络
+流動網絡 移动网络
+咪高峰 麦克风
+幫浦 泵
+電單車 摩托车
+演化論 进化论
+搜尋引擎 搜索引擎
+福馬林 福尔马林
+海洛英 海洛因
+赫魯雪夫 赫鲁晓夫
+公厘 毫米
+公釐 毫米
+海浬 海里
+森巴舞 桑巴舞
+喬治·歐威爾 乔治·奥威尔
+西元1 公元1
+西元2 公元2
+西元3 公元3
+西元4 公元4
+西元5 公元5
+西元6 公元6
+西元7 公元7
+西元8 公元8
+西元9 公元9
+西元前 公元前
+翁山蘇姬 昂山素季
+昂山素姬 昂山素季
+西洋棋 囯际象棋
+私隱 隐私 \ No newline at end of file
diff --git a/maintenance/language/zhtable/toHK.manual b/maintenance/language/zhtable/toHK.manual
index 1f7fe7d0..c31d2320 100644
--- a/maintenance/language/zhtable/toHK.manual
+++ b/maintenance/language/zhtable/toHK.manual
@@ -1,155 +1,582 @@
-” 」
-“ 「
-‘ 『
-’ 』
+裡 裏
鉤 鈎
-衛 衞
+檯 枱
+臥 卧
+醯 酰
+菸 煙
+汙 污
+溼 濕
+硅 矽
+計畫 計劃
+吧台 吧枱
+坐台 坐枱
+妆台 妝枱
+弹珠台 彈珠枱
+折台 摺枱
+台布 枱布
+台历 枱曆
+台灯 枱燈
+写字台 寫字枱
+工作台 工作枱
+弹子台 彈子枱
+台面上 枱面上
+柜台 櫃枱
+球台 球枱
+赌台 賭枱
+办公台 辦公枱
+餐台 餐枱
凶殺 兇殺
凶殘 兇殘
+凶惡 兇惡
緝凶 緝兇
買凶 買兇
-印表機 打印機
-字节 位元組
-字節 位元組
-列印 打印
-硬件 硬件
-硬體 硬件
-二極體 二極管
-三極體 三極管
-軟體 軟件
-網路 網絡
-人工智慧 人工智能
-航天飞机 穿梭機
-太空梭 穿梭機
-因特网 互聯網
-網際網路 互聯網
-机器人 機械人
-機器人 機械人
-移动电话 流動電話
-行動電話 流動電話
-數據機 調制解調器
-短信 短訊
-簡訊 短訊
-查德 乍得
-葉門 也門
-貝里斯 伯利茲
-維德角 佛得角
-克羅埃西亞 克羅地亞
-甘比亞 岡比亞
-幾內亞比索 幾內亞比紹
-列支敦斯登 列支敦士登
-賴比瑞亞 利比里亞
-迦納 加納
-加彭 加蓬
-波札那 博茨瓦納
-盧安達 盧旺達
-瓜地馬拉 危地馬拉
-厄瓜多尔 厄瓜多爾
-厄瓜多爾 厄瓜多爾
-厄瓜多 厄瓜多爾
-厄利垂亞 厄立特里亞
-吉布地 吉布堤
-哥斯大黎加 哥斯達黎加
-吐瓦魯 圖瓦盧
-聖露西亞 聖盧西亞
-圣基茨和尼维斯 聖吉斯納域斯
-聖克里斯多福及尼維斯 聖吉斯納域斯
-聖文森及格瑞那丁 聖文森特和格林納丁斯
-聖馬利諾 聖馬力諾
-蓋亞那 圭亞那
-坦尚尼亞 坦桑尼亞
-衣索匹亞 埃塞俄比亞
-衣索比亞 埃塞俄比亞
-吉里巴斯 基里巴斯
-塞普勒斯 塞浦路斯
-塞席爾 塞舌爾
-安地卡及巴布達 安提瓜和巴布達
-尼日利亚 尼日利亞
-尼日利亞 尼日利亞
-奈及利亞 尼日利亞
-尼日尔 尼日爾
-尼日爾 尼日爾
-尼日 尼日爾
-巴貝多 巴巴多斯
-巴布亞紐幾內亞 巴布亞新畿內亞
-布吉納法索 布基納法索
-蒲隆地 布隆迪
-帕劳 帛琉
-義大利 意大利
-索羅門群島 所羅門群島
-文莱 汶萊
-史瓦濟蘭 斯威士蘭
-斯洛維尼亞 斯洛文尼亞
-紐西蘭 新西蘭
-格瑞那達 格林納達
-茅利塔尼亞 毛里塔尼亞
-毛里求斯 毛里裘斯
-模里西斯 毛里裘斯
-沙地阿拉伯 沙特阿拉伯
-沙烏地阿拉伯 沙特阿拉伯
-波士尼亞赫塞哥維納 波斯尼亞黑塞哥維那
-辛巴威 津巴布韋
-宏都拉斯 洪都拉斯
-千里達托貝哥 特立尼達和多巴哥
-諾魯 瑙魯
-萬那杜 瓦努阿圖
-葛摩 科摩羅
-索馬利亞 索馬里
-寮國 老撾
-肯尼亚 肯雅
-肯亞 肯雅
-莫三比克 莫桑比克
-賴索托 萊索托
-貝南 貝寧
-尚比亞 贊比亞
-亞塞拜然 阿塞拜疆
-阿拉伯聯合大公國 阿拉伯聯合酋長國
-馬爾地夫 馬爾代夫
-馬利共和國 馬里共和國
-方便面 即食麵
-快速面 即食麵
-速食麵 即食麵
-泡麵 即食麵
-土豆 馬鈴薯
-土豆网 土豆網
-土豆網 土豆網
-华乐 中樂
-民乐 中樂
-計程車 的士
-出租车 的士
-公車 巴士
-公車上書 公車上書
-自行车 單車
-犬只 狗隻
-台球 桌球
-撞球 桌球
-冰淇淋 雪糕
-賓士 平治
-捷豹 積架
-福斯 福士
-雪铁龙 先進
-雪鐵龍 先進
-沃尓沃 富豪
-马自达 萬事得
-馬自達 萬事得
-寶獅 標致
-布什 布殊
-布希 布殊
-布希亞 布希亞
-布希亚 布希亞
-柯林頓 克林頓
-萨达姆 薩達姆
-海珊 侯賽因
-大卫·贝克汉姆 大衛碧咸
-迈克尔·欧文 米高奧雲
-珍妮弗·卡普里亚蒂 卡佩雅蒂
-马拉特·萨芬 沙芬
-迈克尔·舒马赫 舒麥加
-希特勒 希特拉
-狄安娜 戴安娜
-黛安娜 戴安娜
颁布 頒佈
頒布 頒佈
+发布 發佈
+發布 發佈
+秀发布 秀發佈
+并发布 並發佈
+分布 分佈
+宣布 宣佈
+公布 公佈
+摆布 擺佈
+擺布 擺佈
+遍布 遍佈
+散布 散佈
+密布 密佈
+布于 佈於
+布於 佈於
+布道 佈道
+布置 佈置
+布景 佈景
+布光 佈光
+布局 佈局
+布防 佈防
+布施 佈施
+布满 佈滿
+布滿 佈滿
+布告 佈告
+布阵 佈陣
+布陣 佈陣
+布点 佈點
+布點 佈點
+布警 佈警
+布控 佈控
+布设 佈設
+布設 佈設
+布展 佈展
+布下了 佈下了
+布下的 佈下的
+星罗棋布 星羅棋佈
+星羅棋布 星羅棋佈
+开诚布公 開誠佈公
+開誠布公 開誠佈公
+空投布雷 空投佈雷
+火箭布雷 火箭佈雷
+海湾布雷 海灣佈雷
+海灣布雷 海灣佈雷
+空中布雷 空中佈雷
+海上布雷 海上佈雷
+布雷的 佈雷的
+布雷, 佈雷,
+布雷、 佈雷、
+布雷。 佈雷。
+布雷; 佈雷;
+布雷舰 佈雷艦
+布雷艦 佈雷艦
+布雷艇 佈雷艇
+布雷速度 佈雷速度
+布雷封锁 佈雷封鎖
+布雷封鎖 佈雷封鎖
+准将 準將
+准將 準將
+准尉 準尉
+迭代 疊代
+彩排 綵排
+彩带 綵帶
+彩帶 綵帶
+彩楼 綵樓
+彩樓 綵樓
+彩牌楼 綵牌樓
+彩牌樓 綵牌樓
+彩球 綵球
+彩绸 綵綢
+彩綢 綵綢
+彩线 綵綫
+彩線 綵線
+彩船 綵船
+彩衣 綵衣
+结彩 結綵
+結彩 結綵
+戏彩娱亲 戲綵娛親
+戲彩娛親 戲綵娛親
+剪彩 剪綵
+占上风 佔上風
+占上風 佔上風
+占下 佔下
+占位 佔位
+占住 佔住
+占占 佔佔
+占便宜 佔便宜
+占个 佔個
+占個 佔個
+占先 佔先
+占光 佔光
+占到 佔到
+占取 佔取
+占在 佔在
+占地 佔地
+占好 佔好
+占得 佔得
+占掉 佔掉
+占据 佔據
+占據 佔據
+占有 佔有
+占满 佔滿
+占滿 佔滿
+占为 佔為
+占為 佔為
+占用 佔用
+占毕 佔畢
+占畢 佔畢
+占尽 佔盡
+占盡 佔盡
+占线 佔線
+占線 佔線
+占起 佔起
+占过 佔過
+占過 佔過
+占领 佔領
+占領 佔領
+占头筹 佔頭籌
+占頭籌 佔頭籌
+占高枝 佔高枝
+侵占 侵佔
+先占 先佔
+分占 分佔
+只占 只佔
+强占 強佔
+強占 強佔
+抢占 搶佔
+搶占 搶佔
+攻占 攻佔
+照占 照佔
+约占 約佔
+約占 約佔
+连占 連佔
+連占 連佔
+进占 進佔
+進占 進佔
+还占 還佔
+還占 還佔
+隐占 隱佔
+隱占 隱佔
+霸占 霸佔
+鸠占 鳩佔
+鳩占 鳩佔
+割占 割佔
+非占不可 非佔不可
+占1 佔1
+占2 佔2
+占3 佔3
+占4 佔4
+占5 佔5
+占6 佔6
+占7 佔7
+占8 佔8
+占9 佔9
+占0 佔0
+占零 佔零
+占〇 佔〇
+占一 佔一
+占二 佔二
+占两 佔兩
+占兩 佔兩
+占三 佔三
+占四 佔四
+占五 佔五
+占六 佔六
+占七 佔七
+占八 佔八
+占九 佔九
+占十 佔十
+占百 佔百
+占千 佔千
+占万 佔萬
+占萬 佔萬
+占亿 佔億
+占億 佔億
+占超过 佔超過
+占超過 佔超過
+占不足 佔不足
+占至少 佔至少
+占少 佔少
+占至多 佔至多
+占半 佔半
+占多 佔多
+占大 佔大
+占小 佔小
+占中 佔中
+占东 佔東
+占東 佔東
+占西 佔西
+占南 佔南
+占北 佔北
+占平均 佔平均
+占总 佔總
+占總 佔總
+独占 獨佔
+獨占 獨佔
+所占 所佔
+市占 市佔
+占率 佔率
+占市 佔市
+占世界 佔世界
+占全 佔全
+占国 佔國
+占國 佔國
+占国桥 占國橋
+占國橋 占國橋
+占美 佔美
+占台 佔台
+占臺 佔臺
+占香 佔香
+占澳 佔澳
+占加 佔加
+占新 佔新
+占马 佔馬
+占馬 佔馬
+占印 佔印
+占英 佔英
+占法 佔法
+占德 佔德
+占葡 佔葡
+占俄 佔俄
+占苏 佔蘇
+占蘇 佔蘇
+占缺 佔缺
+占A 佔A
+占B 佔B
+占C 佔C
+占D 佔D
+占E 佔E
+占F 佔F
+占G 佔G
+占H 佔H
+占I 佔I
+占J 佔J
+占K 佔K
+占L 佔L
+占M 佔M
+占N 佔N
+占O 佔O
+占P 佔P
+占Q 佔Q
+占R 佔R
+占S 佔S
+占T 佔T
+占U 佔U
+占V 佔V
+占W 佔W
+占X 佔X
+占Y 佔Y
+占Z 佔Z
+占不占 佔不佔
+不占 不佔
+占了 佔了
+占资 佔資
+占資 佔資
+占人便宜 佔人便宜
+占主要 佔主要
+占所有 佔所有
+占头 佔頭
+占頭 佔頭
+占道 佔道
+占屋 佔屋
+占网 佔網
+占網 佔網
+占床 佔床
+占座 佔座
+占分 佔分
+占个位 佔個位
+占個位 佔個位
+占後 佔後
+占山为 佔山為
+占山為 佔山為
+占比 佔比
+占下風 佔下風
+占下风 佔下風
+少占 少佔
+多占 多佔
+费占 費佔
+費占 費佔
+占查 佔查
+占压 佔壓
+占壓 佔壓
+占优 佔優
+占優 佔優
+占劣 佔劣
+稳占 穩佔
+穩占 穩佔
+占整 佔整
+占局部 佔局部
+日占 日佔
+美占 美佔
+英占 英佔
+德占 德佔
+法占 法佔
+俄占 俄佔
+葡占 葡佔
+西占 西佔
+奥占 奧佔
+奧占 奧佔
+意占 意佔
+義占 意佔
+地占 地佔
+占场 佔場
+占場 佔場
+占耕 佔耕
+狂占 狂佔
+征占 徵佔
+徵占 徵佔
+圈占 圈佔
+已占 已佔
+占囁 佔囁
+占主 佔主
+占次 佔次
+寡占 寡佔
+占去 佔去
+将占 將佔
+將占 將佔
+将占卜 將占卜
+將占卜 將占卜
+要占 要佔
+要占卜 要占卜
+会占 會佔
+會占 會佔
+会占卜 會占卜
+會占卜 會占卜
+占卜 占卜
+梦有五不占 夢有五不占
+夢有五不占 夢有五不占
+占有五不 占有五不
+吞占 吞佔
+一地里 一地裏
+一年里 一年裏
+中文里 中文裏
+事里 事裏
+井里 井裏
+作品里 作品裏
+个里 個裏
+假里 假裏
+傻里傻气 傻裏傻氣
+丛林里 叢林裏
+口里 口裏
+吃里扒外 吃裏扒外
+吃里爬外 吃裏爬外
+呆里呆气 呆裏呆氣
+哪里 哪裏
+嘴里 嘴裏
+圈里 圈裏
+园里 園裏
+土里 土裏
+坑里 坑裏
+城里 城裏
+域里 域裏
+场里 場裏
+壶里 壺裏
+夜里 夜裏
+梦里 夢裏
+天里 天裏
+子里 子裏
+字里行间 字裏行間
+学里 學裏
+宫里 宮裏
+家里 家裏
+宝里宝气 寶裏寶氣
+封面里 封面裏
+专辑里 專輯裏
+就里 就裏
+局里 局裏
+屋里 屋裏
+屯里 屯裏
+巷里 巷裏
+市里 市裏
+年代里 年代裏
+年里 年裏
+店里 店裏
+庙里 廟裏
+往里 往裏
+从里到外 從裏到外
+从里向外 從裏向外
+心里面 心裏面
+心里 心裏
+忙里 忙裏
+怪里怪气 怪裏怪氣
+慌里慌张 慌裏慌張
+怀里 懷裏
+戏里 戲裏
+房里 房裏
+手里 手裏
+手里剑 手裏劍
+族里 族裏
+日里 日裏
+暗地里 暗地裏
+暗沟里 暗溝裏
+暗里 暗裏
+会里 會裏
+村里 村裏
+森林里 森林裏
+棺材里 棺材裏
+树林里 樹林裏
+历史里 歷史裏
+死里求生 死裏求生
+死里逃生 死裏逃生
+壳里 殼裏
+水来汤里去 水來湯裏去
+水里 水裏
+池里 池裏
+沙里淘金 沙裏淘金
+河里 河裏
+洞里 洞裏
+渊里 淵裏
+湖里 湖裏
+漠里 漠裏
+潜意识里 潛意識裏
+潭里 潭裏
+墙里 牆裏
+狱里 獄裏
+班里 班裏
+田里 田裏
+由表及里 由表及裏
+界里 界裏
+白里透红 白裏透紅
+百科里 百科裏
+皮里春秋 皮裏春秋
+皮里阳秋 皮裏陽秋
+盒里 盒裏
+盘里 盤裏
+眼眶里 眼眶裏
+眼睛里 眼睛裏
+眼里 眼裏
+社里 社裏
+私下里 私下裏
+窝里 窩裏
+笑里藏刀 笑裏藏刀
+箱里 箱裏
+节目里 節目裏
+糊里糊涂 糊裏糊塗
+系列里 系列裏
+系里 系裏
+组里 組裏
+网里 網裏
+县里 縣裏
+缝里 縫裏
+肚里 肚裏
+胃里 胃裏
+背地里 背地裏
+胡里胡涂 胡裏胡塗
+腰里 腰裏
+花盆里 花盆裏
+苑里 苑裏
+苦里 苦裏
+草丛里 草叢裏
+庄里 莊裏
+葫芦里卖甚么药 葫蘆裏賣甚麼藥
+蜜里调油 蜜裏調油
+表里 表裏
+表里一致 表裏一致
+表里不一 表裏不一
+表里如一 表裏如一
+表里山河 表裏山河
+袋里 袋裏
+袖里 袖裏
+被里 被裏
+里勾外连 裏勾外連
+里手 裏手
+里海 裏海
+里屋 裏屋
+里层 裏層
+里带 裏帶
+里弦 裏弦
+里应外合 裏應外合
+里脊 裏脊
+里衣 裏衣
+里通外国 裏通外國
+里通外敌 裏通外敵
+里边 裏邊
+里间 裏間
+里面 裏面
+里面包 裏面包
+里头 裏頭
+衬里 襯裏
+角落里 角落裏
+话里有话 話裏有話
+车库里 車庫裏
+车站里 車站裏
+车里 車裏
+车里雅宾斯克 車里雅賓斯克
+这里 這裏
+邋里邋遢 邋裏邋遢
+那里 那裏
+金装玉里 金裝玉裏
+钟在寺里 鐘在寺裏
+门里 門裏
+间里 間裏
+院里 院裏
+阴沟里翻船 陰溝裏翻船
+集里 集裏
+鸡蛋里挑骨头 雞蛋裏挑骨頭
+雪里 雪裏
+雾里 霧裏
+鞋里 鞋裏
+鞭辟入里 鞭辟入裏
+头里 頭裏
+风里 風裏
+馆里 館裏
+点里 點裏
+点里程 點里程
+鼓里 鼓裏
+世纪里 世紀裏
+夜晚里 夜晚裏
+参数里 參數裏
+集数里 集數裏
+人数里 人數裏
+总数里 總數裏
+函数里 函數裏
+地图里 地圖裏
+版图里 版圖裏
+配图里 配圖裏
+路图里 路圖裏
+线图里 線圖裏
+幅图里 幅圖裏
+镜图里 鏡圖裏
+从图里 從圖裏
+的图里 的圖裏
+图里的 圖裏的
+图里, 圖裏,
+深山里 深山裏
+冰山里 冰山裏
+火山里 火山裏
+在山里 在山裏
+的山里 的山裏
+到山里 到山裏
+去山里 去山裏
+从山里 從山裏
+山里的 山裏的
+山里有 山裏有
+棉里 棉裏
+语里 語裏
+方法里 方法裏
+语法里 語法裏
+看法里 看法裏
+宪法里 憲法裏
+用法里 用法裏
+法里, 法裏,
+苑裡 苑裡
+霄裡 霄裡
+岸裡 岸裡
+裡冷 裡冷
挨著 挨着
愛著 愛着
暗著 暗着
@@ -197,6 +624,7 @@
定著 定着
動著 動着
鬥著 鬥着
+斗着 鬥着
獨著 獨着
對著 對着
盾著 盾着
@@ -222,7 +650,6 @@
揮著 揮着
活著 活着
獲著 獲着
-獲著 獲着
急著 急着
記著 記着
冀著 冀着
@@ -233,7 +660,6 @@
叫著 叫着
接著 接着
借著 借着
-借著 借着
據著 據着
開著 開着
看得著 看得着
@@ -298,7 +724,6 @@
潤著 潤着
燒著 燒着
身著 身着
-沉著 沉着
盛著 盛着
試著 試着
守著 守着
@@ -365,6 +790,14 @@
在著 在着
紮著 紮着
展著 展着
+占着 佔着
+占著 佔着
+占著作 占著作
+占著者 佔著者
+占著名 佔著名
+占著述 占著述
+占著稱 占著稱
+占著錄 占著錄
站著 站着
戰著 戰着
蘸著 蘸着
@@ -378,7 +811,7 @@
爭著 爭着
掙著 掙着
制著 制着
-志著 志着
+標志著 標志着
皺著 皺着
住著 住着
抓著 抓着
@@ -401,6 +834,7 @@
寫著 寫着
遇著 遇着
殺著 殺着
+驶著 驶着
著筆 着筆
著鞭 着鞭
著法 着法
@@ -421,7 +855,7 @@
著妳 着妳
著你 着你
著色 着色
-著什麼急 着什麼急
+著什 着什
著實 着實
著手 着手
著數 着數
@@ -435,7 +869,6 @@
著衣 着衣
著意 着意
著重 着重
-著重 着重
著裝 着裝
著地 着地
不著邊際 不着邊際
@@ -928,13 +1361,6 @@
獲著稱 獲著稱
獲著錄 獲著錄
獲著書 獲著書
-獲著作 獲著作
-獲著者 獲著者
-獲著名 獲著名
-獲著述 獲著述
-獲著稱 獲著稱
-獲著錄 獲著錄
-獲著書 獲著書
急著作 急著作
急著者 急著者
急著名 急著名
@@ -1004,13 +1430,6 @@
借著稱 借著稱
借著錄 借著錄
借著書 借著書
-借著作 借著作
-借著者 借著者
-借著名 借著名
-借著述 借著述
-借著稱 借著稱
-借著錄 借著錄
-借著書 借著書
據著作 據著作
據著者 據著者
據著名 據著名
@@ -1440,13 +1859,6 @@
身著稱 身著稱
身著錄 身著錄
身著書 身著書
-沉著作 沉著作
-沉著者 沉著者
-沉著名 沉著名
-沉著述 沉著述
-沉著稱 沉著稱
-沉著錄 沉著錄
-沉著書 沉著書
盛著作 盛著作
盛著者 盛著者
盛著名 盛著名
@@ -1747,6 +2159,8 @@
因著稱 因著稱
因著錄 因著錄
因著書 因著書
+因著《 因著《
+因著〈 因著〈
印著作 印著作
印著者 印著者
印著名 印著名
@@ -2097,6 +2511,8 @@
殺著書 殺著書
標誌著 標誌着
幹著 幹着
+幹著名 幹著名
+幹著稱 幹著稱
干着 幹着
干着急 干着急
流露著 流露着
@@ -2109,9 +2525,8 @@
靠著称 靠著稱
靠著者 靠著者
靠著述 靠著述
-新著龍虎門 新著龍虎門
迫著 迫着
-心繫著 心繫着
+繫著 繫着
藉著 藉着
吃得著 吃得着
吃不著 吃不着
@@ -2123,16 +2538,101 @@
嗅不著 嗅不着
嗅著 嗅着
警戒著 警戒着
+過著 過着
+過著作 當著作
+過著者 當著者
+過著名 當著名
+過著述 當著述
+過著稱 當著稱
+過著錄 當著錄
+過著書 當著書
+穫著 穫着
+閒著 閒着
+飃著 飃着
+沈著 沈着
+竪著 竪着
+擡著 擡着
+沖著 沖着
+沖著《 沖著《
+沖著。 沖著。
+沖著, 沖著,
+衝著 衝着
+著甚麽 着甚麽
+存著 存着
+存著名 存著名
+劃著 劃着
+別著 別着
+刮著 刮着
+掛著 掛着
+吊著 吊着
+回著 回着
+回著名 回著名
+塗著 塗着
+麼著 麼着
+擔著 擔着
+負著 負着
+板著臉 板着臉
+為著 為着
+為著作 為著作
+為著名 為著名
+為著錄 為著錄
+為著稱 為著稱
+為著者 為著者
+為著述 為著述
+為著《 為著《
+畫著 畫着
+畫著作 畫著作
+畫著名 畫著名
+畫著稱 畫著稱
+畫著者 畫著者
+發著 發着
+發著作 發著作
+發著名 發著名
+發著稱 發著稱
+發著者 發著者
+發著《 發著《
+簽著 簽着
+繃著 繃着
+覆著 覆着
+蓋著 蓋着
+說著 說着
+說著作 說著作
+說著稱 說著稱
+說著者 說著者
+說著述 說著述
+象徵著 象著着
+象徵著名 象徵著名
+湊合著 湊合着
+配合著 配合着
+配合著名 配合著名
+關係著 關係着
+下著 下着
+下著作 下著作
+下著名 下著名
+下著录 下著錄
+下著錄 下著錄
+下著称 下著稱
+下著稱 下著稱
+下著者 下著者
+下著述 下著述
+下著有 下著有
+放著 放着
+放著作 放著作
+放著名 放著名
+放著稱 放著稱
+放著称 放著稱
+三十六著 三十六着
+走為上著 走為上着
+鬧著 鬧着
+悶著 悶着
+呆著 呆着
+包著 包着
+系着 繫着
+颳著 颳着
榴莲 榴槤
榴蓮 榴槤
-发布 發佈
-發布 發佈
-掛鉤 掛鈎
-鉤心鬥角 鈎心鬥角
-咤 咤
叱吒 叱咤
-叱咤 叱咤
-醯 酰
+嘯吒 嘯咤
醯醬 醯醬
醯雞 醯雞
醯酱 醯醬
@@ -2141,160 +2641,404 @@
醯醢 醯醢
醯壶 醯壺
醯壺 醯壺
-菸 煙
-雪裡紅 雪裏紅
-雪裡蕻 雪裏蕻
-雪里蕻 雪裏蕻
-雪里红 雪裏紅
-森林裡 森林裏
-森林里 森林裏
-日子裡 日子裏
-日子里 日子裏
-故事裡 故事裏
-故事里 故事裏
-領域裡 領域裏
-领域里 領域裏
-時間裡 時間裏
-时间里 時間裏
-深淵裡 深淵裏
-深渊里 深渊裏
-醫院裡 醫院裏
-医院里 医院裏
-春假裡 春假裏
-春假里 春假裏
-暑假裡 暑假裏
-暑假里 暑假裏
-秋假裡 秋假裏
-秋假里 秋假裏
-寒假裡 寒假裏
-寒假里 寒假裏
-春天裡 春天裏
-春天里 春天裏
-夏天裡 夏天裏
-夏天里 夏天裏
-秋天裡 秋天裏
-秋天里 秋天裏
-冬天裡 冬天裏
-冬天里 冬天裏
-春日裡 春日裏
-夏日裡 夏日裏
-秋日裡 秋日裏
-冬日裡 冬日裏
-春日里 春日裏
-夏日里 夏日裏
-秋日里 秋日裏
-冬日里 冬日裏
-嘴裡 嘴裏
-嘴里 嘴裏
-心裡 心裏
-心里 心裏
-皮裡陽秋 皮裏陽秋
-皮里阳秋 皮裏陽秋
-肚裡 肚裏
-肚里 肚裏
-苦裡 苦裏
-苦里 苦裏
-裡勾外連 裏勾外連
-里勾外连 裏勾外連
-裡面 裏面
-里面 裏面
-這裡 這裏
-這里 這裏
-點裡 點裏
-点里 點裏
-中文裡 中文裏
-中文里 中文裏
-山洞里 山洞裏
-山洞裡 山洞裏
-近角聪信 近角聰信
-近角聰信 近角聰信
-世界里 世界裏
-世界裡 世界裏
-眼睛里 眼睛裏
-眼睛裡 眼睛裏
-百科裡 百科裏
-百科里 百科裏
-歷史裡 歷史裏
-历史里 歷史裏
-戲裡 戲裏
-戏里 戲裏
-作品裡 作品裏
-作品里 作品裏
-專輯裡 專輯裏
-专辑里 專輯裏
-年代裡 年代裏
-年代里 年代裏
-棺材裡 棺材裏
-棺材里 棺材裏
-學裡 學裏
-学里 學裏
-獄裡 獄裏
-狱里 獄裏
-館裡 館裏
-馆里 館裏
-系列裡 系列裏
-系列里 系列裏
-村子裡 村子裏
-村子里 村子裏
-分布 分佈
-分布于 分佈於
-分布於 分佈於
想象 想像
-無線電視 無綫電視
-无线电视 無綫電視
-無線收費 無綫收費
-无线收费 無綫收費
-無線節目 無綫節目
-无线节目 無綫節目
-無線劇集 無綫劇集
-无线剧集 無綫劇集
-東鐵線 東鐵綫
-东铁线 東鐵綫
-觀塘線 觀塘綫
-观塘线 觀塘綫
-荃灣線 荃灣綫
-荃湾线 荃灣綫
-港島線 港島綫
-港岛线 港島綫
-東涌線 東涌綫
-东涌线 東涌綫
-將軍澳線 將軍澳綫
-将军澳线 將軍澳綫
-西鐵線 西鐵綫
-西铁线 西鐵綫
-馬鞍山線 馬鞍山綫
-马鞍山线 馬鞍山綫
-迪士尼線 迪士尼綫
-迪士尼线 迪士尼綫
-沙田至中環線 沙田至中環綫
-沙田至中环线 沙田至中環綫
-沙中線 沙中綫
-沙中线 沙中綫
-北環線 北環綫
-北环线 北環綫
-機場快線 機場快綫
-机场快线 機場快綫
-505線 505綫
-505线 505綫
-507線 507綫
-507线 507綫
-610線 610綫
-610线 610綫
-614線 614綫
-614线 614綫
-614P線 614P綫
-614P线 614P綫
-615線 615綫
-615线 615綫
-615P線 615P綫
-615P线 615P綫
-705線 705綫
-705线 705綫
-706線 706綫
-706线 706綫
-751線 751綫
-751线 751綫
-751P線 751P綫
-751P线 751P綫
-761P線 761P綫
-761P线 761P綫
+係數 系數
+澈底 徹底
+雇员 僱員
+雇用 僱用
+糊口 餬口
+倒楣 倒霉
+径庭 逕庭
+径到 逕到
+径取 逕取
+径入 逕入
+径行 逕行
+径自 逕自
+径往 逕往
+径寄 逕寄
+径启 逕啟
+径迎 逕迎
+印表機 打印機
+字节 位元組
+字節 位元組
+列印 打印
+硬件 硬件
+硬體 硬件
+二極體 二極管
+三極體 三極管
+軟體 軟件
+軟體動物 軟體動物
+軟體家具 軟體家具
+網路 網絡
+人工智慧 人工智能
+航天飞机 穿梭機
+太空梭 穿梭機
+因特网 互聯網
+網際網路 互聯網
+机器人 機械人
+機器人 機械人
+移动电话 流動電話
+行動電話 流動電話
+數據機 調制解調器
+短信 短訊
+簡訊 短訊
+葉門 也門
+貝里斯 伯利茲
+維德角 佛得角
+克羅埃西亞 克羅地亞
+甘比亞 岡比亞
+幾內亞比索 幾內亞比紹
+列支敦斯登 列支敦士登
+賴比瑞亞 利比里亞
+迦納 加納
+加彭 加蓬
+波札那 博茨瓦納
+盧安達 盧旺達
+瓜地馬拉 危地馬拉
+厄瓜多尔 厄瓜多爾
+厄瓜多爾 厄瓜多爾
+厄瓜多 厄瓜多爾
+厄利垂亞 厄立特里亞
+吉布地 吉布堤
+哥斯大黎加 哥斯達黎加
+吐瓦魯 圖瓦盧
+聖露西亞 聖盧西亞
+圣基茨和尼维斯 聖吉斯納域斯
+聖克里斯多福及尼維斯 聖吉斯納域斯
+聖文森及格瑞那丁 聖文森特和格林納丁斯
+聖馬利諾 聖馬力諾
+蓋亞那 圭亞那
+坦尚尼亞 坦桑尼亞
+衣索匹亞 埃塞俄比亞
+衣索比亞 埃塞俄比亞
+吉里巴斯 基里巴斯
+塞普勒斯 塞浦路斯
+塞席爾 塞舌爾
+安地卡及巴布達 安提瓜和巴布達
+巴貝多 巴巴多斯
+巴布亞紐幾內亞 巴布亞新畿內亞
+布吉納法索 布基納法索
+蒲隆地 布隆迪
+帕劳 帛琉
+義大利 意大利
+索羅門群島 所羅門群島
+文莱 汶萊
+史瓦濟蘭 斯威士蘭
+斯洛維尼亞 斯洛文尼亞
+紐西蘭 新西蘭
+格瑞那達 格林納達
+茅利塔尼亞 毛里塔尼亞
+毛里求斯 毛里裘斯
+模里西斯 毛里裘斯
+沙地阿拉伯 沙特阿拉伯
+沙烏地阿拉伯 沙特阿拉伯
+波士尼亞赫塞哥維納 波斯尼亞黑塞哥維那
+辛巴威 津巴布韋
+宏都拉斯 洪都拉斯
+千里達托貝哥 特立尼達和多巴哥
+萬那杜 瓦努阿圖
+葛摩 科摩羅
+寮國 老撾
+肯尼亚 肯雅
+莫三比克 莫桑比克
+賴索托 萊索托
+尚比亞 贊比亞
+亞塞拜然 阿塞拜疆
+阿拉伯聯合大公國 阿拉伯聯合酋長國
+馬爾地夫 馬爾代夫
+馬利共和國 馬里共和國
+台球 桌球
+撞球 桌球
+冰淇淋 雪糕
+賓士 平治
+捷豹 積架
+雪铁龙 先進
+雪鐵龍 先進
+沃尓沃 富豪
+马自达 萬事得
+馬自達 萬事得
+寶獅 標致
+布什 布殊
+柯林頓 克林頓
+萨达姆 薩達姆
+贝克汉姆 碧咸
+贝克漢 碧咸
+迈克尔·欧文 米高·奧雲
+卡普里亚蒂 卡佩雅蒂
+马拉特·萨芬 馬拉特·沙芬
+舒马赫 舒麥加
+希特勒 希特拉
+狄安娜 戴安娜
+黛安娜 戴安娜
+南朝鲜 南韓
+北朝鲜 北韓
+寮語 老撾語
+寮人民民主共和國 老撾人民民主共和國
+莱特湾 雷伊泰灣
+萊特灣 雷伊泰灣
+蘭卡威 浮羅交怡
+吉尔吉斯斯坦 吉爾吉斯
+撒马尔罕 撒馬爾罕
+伊斯蘭瑪巴德 伊斯蘭堡
+喀拉蚩 卡拉奇
+帕塔亚 芭達亞
+葉里溫 埃里溫
+巴士拉 巴斯拉
+賽普勒斯 塞浦路斯
+荷姆茲 霍爾木茲
+加薩走廊 加沙地帶
+西臺語 赫梯語
+西臺王 赫梯王
+西臺族 赫梯族
+西臺文 赫梯文
+西臺帝 赫梯帝
+西臺國 赫梯國
+西臺人 赫梯人
+阿联酋 阿聯酋
+迪拜 杜拜
+格鲁吉亚 格魯吉亞
+提比里西 第比利斯
+諾鲁 瑙魯
+玻里尼西亞 波利尼西亞
+帛琉 帕勞
+堪培拉 坎培拉
+约翰斯顿岛 強斯頓環礁
+巴尔米拉环礁 帕邁拉環礁
+马恩岛 萌島
+伯明罕 伯明翰
+布里斯托尔 布里斯托
+威尔士 威爾斯
+威爾士 威爾斯
+·威尔士 ·威爾士
+·威爾士 ·威爾士
+土魯斯 圖盧茲
+戛纳 康城
+坎城 康城
+羅亞爾 盧瓦爾
+诺曼底 諾曼第
+卢浮宫 羅浮宮
+埃菲尔 艾菲爾
+霍爾斯坦 荷爾斯泰因
+漢諾瓦 漢諾威
+哥廷根 格丁根
+杜塞道夫 杜塞爾多夫
+德勒斯登 德累斯頓
+安哈特 安哈爾特
+威斯伐倫 威斯特法倫
+布蘭登堡 勃蘭登堡
+前波莫瑞 前波美拉尼亞
+什勒斯維希 石勒蘇益格
+不萊梅 不來梅
+柏林墙 柏林圍牆
+巴塞罗那 巴塞隆拿
+巴塞隆納 巴塞隆拿
+塞维利亚 西維爾
+塞維亞 西維爾
+巴伦西亚 華倫西亞
+巴倫西亞 華倫西亞
+瓦倫西亞 華倫西亞
+雅爾達 雅爾塔
+切尔诺贝利 切爾諾貝爾
+蒙特內哥羅 黑山
+馬斯垂克 馬斯特里赫特
+貝爾格勒 貝爾格萊德
+塞拉耶佛 薩拉熱窩
+波士尼亞 波斯尼亞
+塞爾維亞與蒙特內哥羅 塞爾維亞和黑山
+卢塞恩 琉森
+亞斯文 阿斯旺
+奈及利亞 尼日利亞
+雅穆索戈 雅穆蘇克雷
+幾內亞 畿內亞
+几内亚 畿內亞
+衣索匹亞 埃塞俄比亚
+吉力馬札羅 乞力馬札羅
+厄利垂亚 厄立特里亞
+索馬利亞 索馬里
+索馬利里 索馬里
+马里兰 馬利蘭
+馬里蘭 馬利蘭
+好萊塢 荷里活
+好莱坞 荷里活
+舊金山 三藩市
+旧金山 三藩市
+紐澳良 新奧爾良
+密西根 密歇根
+愛荷華 艾奧瓦
+爱荷华 艾奧瓦
+得克萨斯 德克薩斯
+蒙特婁 蒙特利爾
+滿地可 蒙特利爾
+紐賓士域 紐賓士域
+默多克 梅鐸
+梅鐸 梅鐸
+麦克尔 米高
+迈克尔 米高
+錢尼 切尼
+里瓦尔多 李華度
+罗纳德·里根 朗奴·列根
+达芬奇 達文西
+达·芬奇 達·文西
+谢丽·布莱尔 彭雪玲
+葉爾欽 葉利欽
+菲利普親王 菲臘親王
+菲利普亲王 菲臘親王
+華勒沙 華里沙
+艾里爾·夏隆 阿里埃勒·沙龍
+罗纳尔迪尼奥 朗拿甸奴
+罗纳尔多 朗拿度
+索忍尼辛 索贊尼辛
+索尔仁尼琴 索贊尼辛
+瓦文萨 華里沙
+班傑明 本傑明
+狄托 鐵托
+柴契爾 戴卓爾
+撒切尔 戴卓爾
+斯蒂芬·斯皮尔伯格 史提芬·史匹堡
+斯皮尔伯格 史匹堡
+史蒂芬·史匹柏 史提芬·史匹堡
+史匹柏 史匹堡
+戈巴契夫 戈爾巴喬夫
+席哈克 希拉克
+希拉蕊 希拉里
+布莱尔 貝理雅
+尼克松 尼克遜
+奧黛麗·赫本 柯德莉·夏萍
+奧黛莉·朵杜 柯德莉·塔圖
+奥黛丽·赫本 柯德莉·夏萍
+卡斯楚 卡斯特羅
+肖邦 蕭邦
+恺撒 凱撒
+肯尼迪 甘迺迪
+歐巴馬 奧巴馬
+戈登·布朗 白高敦
+狂牛症 瘋牛症
+A肝 甲肝
+A型肝炎 甲型肝炎
+B肝 乙肝
+B型肝炎 乙型肝炎
+C肝 丙肝
+C型肝炎 丙型肝炎
+艾滋 愛滋
+链接 連結
+分辨率 解像度
+解析度 解像度
+智慧卡 智能卡
+晶元 晶片
+芯片 晶片
+晶體管 電晶體
+晶体管 電晶體
+源代码 原始碼
+IP地址 IP位址
+IP 地址 IP 位址
+屏幕 螢幕
+荧屏 螢屏
+版权信息 版權資訊
+蹦床 彈床
+擊劍 劍擊
+击剑 劍擊
+金氏世界紀錄 健力士世界紀錄
+牛轧 鳥結
+牛軋 鳥結
+數位相機 數碼相機
+單眼相機 單鏡反光機
+单反相机 單鏡反光機
+形上學 形而上學
+吉尼斯世界纪录 健力士世界紀錄
+吉他 結他
+古柯鹼 可卡因
+咖哩 咖喱
+泰坦尼克号 鐵達尼號
+自行火炮 自走炮
+冰激凌 雪糕
+奥斯曼 鄂圖曼
+里氏0 黎克特制0
+里氏1 黎克特制1
+里氏2 黎克特制2
+里氏3 黎克特制3
+里氏4 黎克特制4
+里氏5 黎克特制5
+里氏6 黎克特制6
+里氏7 黎克特制7
+里氏8 黎克特制8
+里氏9 黎克特制9
+芮氏0 黎克特制0
+芮氏1 黎克特制1
+芮氏2 黎克特制2
+芮氏3 黎克特制3
+芮氏4 黎克特制4
+芮氏5 黎克特制5
+芮氏6 黎克特制6
+芮氏7 黎克特制7
+芮氏8 黎克特制8
+芮氏9 黎克特制9
+芮氏規模 黎克特制震級
+芮氏地震規模 黎克特制地震震級
+里氏震级 黎克特制震級
+里氏规模 黎克特制震級
+里氏地震规模 黎克特制地震震級
+埃博拉 伊波拉
+哥特式 哥德式
+正體中文 繁體中文
+板球 木球
+籃板球 籃板球
+智慧財產權 知識產權
+智財權 知識產權
+首席执行官 行政總裁
+智慧型 智能
+智慧手機 智能手機
+计算机程序 電腦程式
+电脑程序 電腦程式
+应用程序 應用程式
+尖峰時間 繁忙時間
+尖峰時段 繁忙時段
+東協 東盟
+亚细安 東盟
+大英國協 英聯邦
+共和联邦 英聯邦
+阿布達比 阿布扎比
+蓋曼群島 開曼群島
+宇航员 太空人
+薛丁格 薛定諤
+凯瑟琳 嘉芙蓮
+凱薩琳 嘉芙蓮
+门德尔松 孟德爾遜
+孟德爾頌 孟德爾遜
+肖斯塔科维奇 蕭士達高維契
+蕭士塔高維奇 蕭士達高維契
+工具機 機床
+伊斯坦堡 伊斯坦布爾
+空气质量 空氣質素
+空氣品質 空氣質素
+俯卧撑 掌上壓
+伏地挺身 掌上壓
+数字电视 數碼電視
+數位電視 數碼電視
+数字技术 數碼技術
+數位技術 數碼技術
+数字信号 數碼訊號
+數碼訊號 數碼訊號
+行動網路 流動網絡
+移动网络 流動網絡
+麥克風 咪高峰
+麦克风 咪高峰
+幫浦 泵
+朝鲜战争 韓戰
+万历朝鲜战争 萬曆朝鮮戰爭
+演化論 進化論
+搜索引擎 搜尋引擎
+福馬林 福爾馬林
+海洛因 海洛英
+高畫質 高清
+赫魯雪夫 赫魯曉夫
+公厘 毫米
+公釐 毫米
+桑巴舞 森巴舞
+乔治·奥威尔 喬治·歐威爾
+程序员 程式設計師
+昂山素季 昂山素姬
+翁山蘇姬 昂山素姬
+西洋棋 國際象棋
+隐私 私隱
+隱私 私隱
+硅藻 硅藻 \ No newline at end of file
diff --git a/maintenance/language/zhtable/toSG.manual b/maintenance/language/zhtable/toSG.manual
deleted file mode 100644
index 2d39aa35..00000000
--- a/maintenance/language/zhtable/toSG.manual
+++ /dev/null
@@ -1,21 +0,0 @@
-」 ”
-「 “
-『 ‘
-』 ’
-方便面 快速面
-速食麵 快速面
-即食麵 快速面
-泡麵 快速面
-蹦极跳 绑紧跳
-笨豬跳 绑紧跳
-凉菜 冷菜
-冷盤 冷菜
-零钱 散钱
-散紙 散钱
-笑星 谐星
-夜校 夜学
-民乐 华乐
-住房 住屋
-房价 屋价
-榴莲 榴梿
-榴蓮 榴梿 \ No newline at end of file
diff --git a/maintenance/language/zhtable/toSimp.manual b/maintenance/language/zhtable/toSimp.manual
index e22447a6..b857e5f4 100644
--- a/maintenance/language/zhtable/toSimp.manual
+++ b/maintenance/language/zhtable/toSimp.manual
@@ -1,10 +1,16 @@
+」 ”
+「 “
+『 ‘
+』 ’
+「 “
+」 ”
乾县 乾县
萧乾 萧乾
乾断 乾断
乾图 乾图
乾纲 乾纲
乾红 乾红
-乾清宫 乾清宫
+乾清 乾清
乾仪 乾仪
乾兴 乾兴
乾冈 乾冈
@@ -51,16 +57,19 @@
男性为乾 男性为乾
男为乾 男为乾
阳为乾 阳为乾
-男性为乾 男性为乾
男性爲乾 男性为乾
-男为乾 男为乾
男爲乾 男为乾
-阳为乾 阳为乾
陽爲乾 阳为乾
乾一组 乾一组
乾一坛 乾一坛
陈乾生 陈乾生
陈公乾生 陈公乾生
+李乾顺 李乾顺
+孙乾 孙乾
+陈遇乾 陈遇乾
+曾运乾 曾运乾
+象乾 象乾
+乾贵士 乾贵士
柳诒徵 柳诒徵
於夫罗 於夫罗
於梨华 於梨华
@@ -76,12 +85,12 @@
藉機 借机
藉此 借此
藉由 借由
-藉著 借着
-藉着 借着
沈積 沉积
沈船 沉船
沈默 沉默
沈沒 沉没
+沈澱 沉淀
+沈重 沉重
彷彿 仿佛
項鍊 项链
肘手鍊足 肘手链足
@@ -96,7 +105,8 @@
銀鍊 银链
鍊錘 链锤
洗鍊 洗练
-石碁镇 石碁镇
+手鍊 手链
+鍊表 链表
反覆 反复
回覆 回复
答覆 答复
@@ -104,14 +114,12 @@
重覆 重复
覆核 复核
覆查 复查
+覆检 复检
鬱姓 鬱姓
鬱氏 鬱氏
-侏儸紀 侏罗纪
夥計 伙计
-吳其濬 吴其濬
-吴其濬 吴其濬
乾泉水 干泉水
-么半群 幺半群
+么半 幺半
么元 幺元
么爹 幺爹
么叔 幺叔
@@ -122,24 +130,21 @@
么娘 幺娘
么孃 幺娘
幺孃 幺娘
+么弟 幺弟
么妹 幺妹
么小 幺小
么姓 幺姓
么氏 幺氏
么蛾子 幺蛾子
幺厮 幺厮
-睪丸 睾丸
-附睪 附睾
-隱睪 隱睾
麼麼 麽麽
么麼 幺麽
-么麼小丑 幺麽小丑
么鳳 幺凤
么二三 幺二三
么篇 幺篇
么謙 幺谦
+六么 六幺
这么 这么
-麴义 麴义
乾乾淨淨 干干净净
乾乾脆脆 干干脆脆
肉乾乾 肉干干
@@ -151,16 +156,113 @@
醯鸡 醯鸡
醯壶 醯壶
苧烯 苧烯
-李乾顺 李乾顺
-幹著 干着
氾濫 泛滥
-显著 显著
-顯著 显著
-標誌著 标志着
近角聪信 近角聪信
-修鍊 修炼
米泽瑠美 米泽瑠美
-太閤 太阁
候覆 候复
待覆 待复
批覆 批复
+矇眬 矇眬
+荠苧 荠苧
+噁心 恶心
+碁圣 碁圣
+慇懃 殷勤
+慇勤 殷勤
+崑崙 昆仑
+崑山 昆山
+崑劇 昆剧
+崑曲 昆曲
+崑腔 昆腔
+崑蘇 昆苏
+崑調 昆调
+諠譁 喧哗
+慫慂 怂恿
+陈元扞 陈元扞
+甦醒 苏醒
+復甦 复苏
+蒐證 搜证
+蒐索 搜索
+蒐藏 搜藏
+蒐羅 搜罗
+蒐購 搜购
+蒐錄 搜录
+蒐集 搜集
+蒐輯 搜辑
+蒐采 搜采
+蒐採 搜采
+偵蒐 侦搜
+情蒐 情搜
+蘋果 苹果
+於之莹 於之莹
+陆徵祥 陆徵祥
+瞭臺 瞭台
+瞭台 瞭台
+慘澹 惨淡
+鍾情 钟情
+鍾愛 钟爱
+鍾意 钟意
+所鍾 所钟
+情鍾 情钟
+獨鍾 独钟
+鍾靈 钟灵
+龍鍾 龙钟
+鍾山 钟山
+一鍾 一钟
+千鍾 千钟
+薰心 熏心
+薰習 熏习
+薰陶 熏陶
+薰沐 熏沐
+薰香 熏香
+餬口 糊口
+跼限 局限
+跼促 局促
+釐清 厘清
+釐訂 厘订
+釐革 厘革
+釐改 厘改
+釐整 厘整
+釐正 厘正
+毫釐 毫厘
+釐毫 厘毫
+剖釐 剖厘
+一釐 一厘
+昇平 升平
+飛昇 飞升
+提昇 提升
+高昇 高升
+初昇 初升
+昇天 升天
+上昇 上升
+昇汞 升汞
+昇華 升华
+昇仙 升仙
+昇降 升降
+竹昇 竹升
+直昇 直升
+高陞 高升
+晉陞 晋升
+歷陞 历升
+官陞 官升
+榮陞 荣升
+又陞 又升
+年陞 年升
+月陞 月升
+陞官 升官
+陞任 升任
+陞為 升为
+陞遷 升迁
+陞用 升用
+陞補 升补
+陞了 升了
+,陞 ,升
+。陞 。升
+爾冬陞 尔冬升
+內聯陞 内联升
+同陞和 同升和
+拿破崙 拿破仑
+酒麴 酒曲
+麴黴 曲霉
+造麴 造曲
+大麴 大曲
+黃麴毒素 黄曲毒素 \ No newline at end of file
diff --git a/maintenance/language/zhtable/toTW.manual b/maintenance/language/zhtable/toTW.manual
index 1a14e99a..14f7eaeb 100644
--- a/maintenance/language/zhtable/toTW.manual
+++ b/maintenance/language/zhtable/toTW.manual
@@ -1,141 +1,170 @@
-” 」
-“ 「
-‘ 『
-’ 』
着 著
+佈 布
鈎 鉤
钩 鉤
-衞 衛
-元凶 元凶
-元兇 元凶
-凶器 凶器
-兇器 凶器
-凶徒 凶徒
-兇徒 凶徒
-凶手 凶手
-兇手 凶手
-凶案 凶案
-兇案 凶案
-凶残 凶殘
-凶殘 凶殘
-兇殘 凶殘
-凶杀 凶殺
-凶殺 凶殺
-兇殺 凶殺
-疑凶 疑凶
-疑兇 疑凶
-真凶 真凶
-真兇 真凶
-缉凶 緝凶
-緝凶 緝凶
-緝兇 緝凶
-行凶 行凶
-行兇 行凶
-行凶后 行凶後
-行凶後 行凶後
-行兇後 行凶後
-买凶 買凶
-買凶 買凶
-買兇 買凶
-追凶 追凶
-追兇 追凶
-逞凶斗狠 逞凶鬥狠
-逞凶鬥狠 逞凶鬥狠
-逞兇鬥狠 逞凶鬥狠
-复苏 復甦
-復蘇 復甦
+账 帳
+枱 檯
+卧 臥
+睾 睪
+酰 醯
+钫 鍅
+锫 鉳
+镎 錼
+镅 鋂
+锿 鑀
+锝 鎝
+锎 鉲
+钚 鈽
+硅 矽
+煙草 菸草
+煙蒂 菸蒂
+煙斗 菸斗
+煙鬼 菸鬼
+煙灰 菸灰
+煙具 菸具
+煙民 菸民
+煙農 菸農
+煙絲 菸絲
+煙頭 菸頭
+煙葉 菸葉
+煙癮 菸癮
+煙嘴 菸嘴
+煙酒 菸酒
+煙袋 菸袋
+煙品 菸品
+煙鹼 菸鹼
+煙捲 菸捲
+香煙 香菸
+捲煙 捲菸
+旱煙 旱菸
+烤煙 烤菸
+禁煙 禁菸
+戒煙 戒菸
+拒煙 拒菸
+紙煙 紙菸
+抽煙 抽菸
+吸煙 吸菸
+反煙 反菸
+私煙 私菸
+點煙 點菸
+洋煙 洋菸
+二手煙 二手菸
+電子煙 電子菸
+呂宋煙 呂宋菸
+雪茄煙 雪茄菸
+無煙日 無菸日
+無煙環境 無菸環境
+榴莲 榴槤
+榴蓮 榴槤
+霉素 黴素
+想象 想像
+迭代 疊代
+叱咤 叱吒
+嘯咤 嘯吒
+叱咤9 叱咤9
+叱咤M 叱咤M
+叱咤樂壇 叱咤樂壇
+叱咤咤 叱咤咤
+叱咤叱 叱咤叱
+正在叱咤 正在叱咤
+氨基酸 胺基酸
+枪支 槍枝
+球杆 球桿
+推杆 推桿
+挥杆 揮桿
+揮杆 揮桿
+一杆 一桿
+二杆 二桿
+三杆 三桿
+四杆 四桿
+五杆 五桿
+六杆 六桿
+七杆 七桿
+八杆 八桿
+九杆 九桿
+十杆 十桿
+1杆 1桿
+2杆 2桿
+3杆 3桿
+4杆 4桿
+5杆 5桿
+6杆 6桿
+7杆 7桿
+8杆 8桿
+9杆 9桿
+0杆 0桿
+标准杆 標準桿
+標準杆 標準桿
+电杆 電桿
+电线杆 電線桿
+木杆 木桿
+铁杆 鐵桿
+鐵杆 鐵桿
+杆头 桿頭
+杆頭 桿頭
+杆身 桿身
+杆弟 桿弟
+锻炼 鍛鍊
+炼金 鍊金
+熏烤 燻烤
+烟熏 煙燻
+熏肉 燻肉
+熏黑 燻黑
+糊口 餬口
+径庭 逕庭
+径到 逕到
+径取 逕取
+径入 逕入
+径行 逕行
+径自 逕自
+径往 逕往
+径寄 逕寄
+径启 逕啟
+径迎 逕迎
+系着 繫著
+关系着 關係著
+冲着 衝著
+干着 幹著
+干着急 干著急
+斗着 鬥著
+徵狀 症狀
+系数 係數
缺省 預設
-串行 串列
-串列加速器 串列加速器
以太网 乙太網
-位图 點陣圖
-例程 常式
-光标 游標
光盘 光碟
光驱 光碟機
-全角 全形
-加载 載入
-半角 半形
-变量 變數
-噪声 雜訊
-脱机 離線
声卡 音效卡
-老字号 老字號
-连字号 連字號
-字号 字型大小
字库 字型檔
字段 欄位
-字符 字元
-字符集 字符集
存盘 存檔
-寻址 定址
-尾注 章節附註
-异步 非同步
-总线 匯流排
-括号 括弧
-接口 介面
+界面 介面
控件 控制項
-权限 許可權
盘片 碟片
-硅片 矽片
-硅谷 矽谷
硬盘 硬碟
磁盘 磁碟
磁道 磁軌
-程控 程式控制
-远程控制 遠程控制
-遠程控制 遠程控制
-行程控制 行程控制
-流程控制 流程控制
端口 埠
算子 運算元
-算法 演算法
芯片 晶片
-芯片 晶元
-词组 片語
译码 解碼
软驱 軟碟機
快闪存储器 快閃記憶體
闪存 快閃記憶體
鼠标 滑鼠
进制 進位
-交互式 互動式
-仿真 模擬
-优先级 優先順序
-传感 感測
-便携式 攜帶型
信息论 資訊理論
写保护 防寫
分辨率 解析度
服务器 伺服器
-等于 等於
局域网 區域網
-扫瞄仪 掃瞄器
宽带 寬頻
数据库 資料庫
-奶酪 乳酪
-手电 手電筒
-手电筒 手電筒
-万历 萬曆
-永历 永曆
-词汇 辭彙
-习用 慣用
-元音 母音
-新纪元 新紀元
-新紀元 新紀元
-宋元 宋元
-头球 頭槌
-入球 進球
-粒入球 顆進球
-打门 射門
-火锅盖帽 蓋火鍋
打印机 印表機
打印機 印表機
字节 位元組
字節 位元組
打印 列印
-打印 列印
-硬件 硬體
+攻打印 攻打印
硬件 硬體
二极管 二極體
二極管 二極體
@@ -143,11 +172,8 @@
三極管 三極體
软件 軟體
軟件 軟體
-网络 網路
-網絡 網路
人工智能 人工智慧
航天飞机 太空梭
-航天大学 航天大學
穿梭機 太空梭
因特网 網際網路
互聯網 網際網路
@@ -158,10 +184,8 @@
调制解调器 數據機
調制解調器 數據機
短信 簡訊
-短訊 簡訊
乌兹别克斯坦 烏茲別克
乍得 查德
-乍得 查德
也门 葉門
也門 葉門
伯利兹 貝里斯
@@ -174,12 +198,8 @@
几内亚比绍 幾內亞比索
幾內亞比紹 幾內亞比索
列支敦士登 列支敦斯登
-列支敦士登 列支敦斯登
利比里亚 賴比瑞亞
利比里亞 賴比瑞亞
-加纳 迦納
-加納 迦納
-加蓬 加彭
加蓬 加彭
博茨瓦纳 波札那
博茨瓦納 波札那
@@ -210,25 +230,17 @@
圣马力诺 聖馬利諾
聖馬力諾 聖馬利諾
圭亚那 蓋亞那
-圭亞那 蓋亞那
+法属圭亚那 法屬蓋亞那
坦桑尼亚 坦尚尼亞
坦桑尼亞 坦尚尼亞
埃塞俄比亚 衣索比亞
埃塞俄比亞 衣索比亞
基里巴斯 吉里巴斯
-基里巴斯 吉里巴斯
塔吉克斯坦 塔吉克
塞拉利昂 獅子山
-塞拉利昂 獅子山
-塞浦路斯 塞普勒斯
塞浦路斯 塞普勒斯
塞舌尔 塞席爾
塞舌爾 塞席爾
-多米尼加共和国 多明尼加
-多米尼加共和國 多明尼加
-多明尼加共和國 多明尼加
-多米尼加国 多米尼克
-多明尼加國 多米尼克
安提瓜和巴布达 安地卡及巴布達
安提瓜和巴布達 安地卡及巴布達
尼日利亚 奈及利亞
@@ -241,7 +253,6 @@
布基纳法索 布吉納法索
布基納法索 布吉納法索
布隆迪 蒲隆地
-布隆迪 蒲隆地
帕劳 帛琉
意大利 義大利
所罗门群岛 索羅門群島
@@ -270,7 +281,6 @@
津巴布韦 辛巴威
津巴布韋 辛巴威
洪都拉斯 宏都拉斯
-洪都拉斯 宏都拉斯
特立尼达和托巴哥 千里達托貝哥
特立尼達和多巴哥 千里達托貝哥
瑙鲁 諾魯
@@ -282,18 +292,13 @@
科摩羅 葛摩
科特迪瓦 象牙海岸
突尼斯 突尼西亞
-索马里 索馬利亞
-索馬里 索馬利亞
老挝 寮國
老撾 寮國
肯尼亚 肯亞
-肯雅 肯亞
苏里南 蘇利南
莫桑比克 莫三比克
莱索托 賴索托
萊索托 賴索托
-贝宁 貝南
-貝寧 貝南
赞比亚 尚比亞
贊比亞 尚比亞
阿塞拜疆 亞塞拜然
@@ -304,108 +309,396 @@
马耳他 馬爾他
马里共和国 馬利共和國
馬里共和國 馬利共和國
-方便面 速食麵
-快速面 速食麵
-即食麵 速食麵
-薯仔 土豆
-土豆网 土豆網
-土豆網 土豆網
蹦极跳 笨豬跳
绑紧跳 笨豬跳
-冷菜 冷盤
-凉菜 冷盤
出租车 計程車
台球 撞球
-桌球 撞球
-卫生 衛生
-衞生 衛生
-平治之亂 平治之亂
-平治之乱 平治之亂
-平治 賓士
-奔驰 賓士
積架 捷豹
-雪铁龙 雪鐵龍
-萬事得 馬自達
-拿破仑 拿破崙
-拿破侖 拿破崙
布什 布希
布殊 布希
克林顿 柯林頓
克林頓 柯林頓
侯赛因 海珊
侯賽因 海珊
-凡高 梵谷
+梵高 梵谷
狄安娜 黛安娜
戴安娜 黛安娜
-颁布 頒布
-頒佈 頒布
-彩带 彩帶
-彩排 彩排
-彩楼 彩樓
-彩牌楼 彩牌樓
-彩球 綵球
-彩绸 綵綢
-彩线 綵線
-彩船 綵船
-彩衣 綵衣
-结彩 結綵
-戏彩娱亲 戲綵娛親
-剪彩 剪綵
-榴莲 榴槤
-榴蓮 榴槤
-掛鈎 掛鉤
-挂钩 掛鉤
-鈎心鬥角 鉤心鬥角
-钩心斗角 鉤心鬥角
-酰 醯
-雪裏紅 雪裡紅
-雪裏蕻 雪裡蕻
-森林裏 森林裡
-日子裏 日子裡
-故事裏 故事裡
-領域裏 領域裡
-時間裏 時間裡
-深淵裏 深淵裡
-醫院裏 醫院裡
-春假裏 春假裡
-暑假裏 暑假裡
-秋假裏 秋假裡
-寒假裏 寒假裡
-春天裏 春天裡
-夏天裏 夏天裡
-秋天裏 秋天裡
-冬天裏 冬天裡
-春日裏 春日裡
-夏日裏 夏日裡
-秋日裏 秋日裡
-冬日裏 冬日裡
-百科裏 百科裡
-歷史裏 歷史裡
-戲裏 戲裡
-作品裏 作品裡
-專輯裏 專輯裡
-年代裏 年代裡
-棺材裏 棺材裡
-嘴裏 嘴裡
-心裏 心裡
-皮裏陽秋 皮裡陽秋
-肚裏 肚裡
-苦裏 苦裡
-裏勾外連 裡勾外連
-裏面 裡面
-這裏 這裡
-點裏 點裡
-中文裏 中文裡
-山洞裏 山洞裡
-世界裏 世界裡
-眼睛裏 眼睛裡
-學裏 學裡
-獄裏 獄裡
-館裏 館裡
-系列裏 系列裡
-村子裏 村子裡
-青霉素 青黴素
-想象 想像
-锎 鉲
-信道 信道
-綫 線
+南朝鲜 南韓
+北朝鲜 北韓
+乔戈里峰 K2
+老挝人民民主共和国 寮人民民主共和國
+老撾人民民主共和國 寮人民民主共和國
+老挝语 寮語
+老撾語 寮語
+浮罗交怡 蘭卡威
+浮羅交怡 蘭卡威
+莱特湾 雷伊泰灣
+萊特灣 雷伊泰灣
+耶加達 雅加達
+吉尔吉斯斯坦 吉爾吉斯
+伊斯兰堡 伊斯蘭瑪巴德
+伊斯蘭堡 伊斯蘭瑪巴德
+卡拉奇 喀拉蚩
+帕塔亚 芭達亞
+埃里温 葉里溫
+埃里溫 葉里溫
+第比利斯 提比里西
+巴士拉 巴斯拉
+塞浦路斯 賽普勒斯
+霍尔木兹 荷姆茲
+霍爾木茲 荷姆茲
+加沙地带 加薩走廊
+加沙地帶 加薩走廊
+赫梯 西臺
+阿联酋 阿聯
+阿聯酋 阿聯
+迪拜 杜拜
+堪培拉 坎培拉
+悉尼 雪梨
+波利尼西亚 玻里尼西亞
+波利尼西亞 玻里尼西亞
+新几内亚 紐幾內亞
+约翰斯顿岛 強斯頓環礁
+巴尔米拉环礁 帕邁拉環礁
+马恩岛 曼島
+萌島 曼島
+伯明翰 伯明罕
+布里斯托尔 布里斯托
+威尔士 威爾斯
+威爾士 威爾斯
+·威尔士 ·威爾士
+·威爾士 ·威爾士
+图卢兹 土魯斯
+圖盧茲 土魯斯
+戛纳 坎城
+卢瓦尔 羅亞爾
+盧瓦爾 羅亞爾
+诺曼底 諾曼第
+卢浮宫 羅浮宮
+埃菲尔 艾菲爾
+荷爾斯泰因 霍爾斯坦
+荷尔斯泰因 霍爾斯坦
+石勒蘇益格 什勒斯維希
+石勒苏益格 什勒斯維希
+漢诺威 漢諾瓦
+汉诺威 漢諾瓦
+格丁根 哥廷根
+杜塞爾多夫 杜塞道夫
+杜塞尔多夫 杜塞道夫
+德累斯顿 德勒斯登
+德累斯頓 德勒斯登
+安哈爾特 安哈特
+安哈尔特 安哈特
+威斯特法倫 威斯伐倫
+威斯特法伦 威斯伐倫
+勃蘭登堡 布蘭登堡
+勃兰登堡 布蘭登堡
+前波美拉尼亞 前波莫瑞
+前波美拉尼亚 前波莫瑞
+不来梅 不萊梅
+不來梅 不萊梅
+柏林墙 柏林圍牆
+柏林牆 柏林圍牆
+巴塞罗那 巴塞隆納
+巴塞隆拿 巴塞隆納
+塞维利亚 塞維亞
+西維爾 塞維亞
+巴伦西亚 瓦倫西亞
+華倫西亞 瓦倫西亞
+佛罗伦萨 佛羅倫斯
+雅尔塔 雅爾達
+雅爾塔 雅爾達
+切尔诺贝利 車諾比
+黑山共和國 蒙特內哥羅共和國
+黑山共和国 蒙特內哥羅共和國
+马斯特里赫特 馬斯垂克
+馬斯特里赫特 馬斯垂克
+贝尔格莱德 貝爾格勒
+貝爾格萊德 貝爾格勒
+薩拉熱窩 塞拉耶佛
+萨拉热窝 塞拉耶佛
+波黑 波赫
+波斯尼亞 波士尼亞
+波斯尼亚 波士尼亞
+比利牛斯 庇里牛斯
+塞黑 塞蒙
+塞爾維亞與蒙特內哥羅 塞爾維亞與蒙特內哥羅
+塞爾維亞和黑山 塞爾維亞與蒙特內哥羅
+塞尔维亚和黑山 塞爾維亞與蒙特內哥羅
+伊斯坦布尔 伊斯坦堡
+伊斯坦布爾 伊斯坦堡
+卢塞恩 琉森
+阿斯旺 亞斯文
+雅穆苏克雷 雅穆索戈
+雅穆蘇克雷 雅穆索戈
+畿內亞 幾內亞
+索马里兰 索馬利蘭
+索馬里蘭 索馬利蘭
+乞力马扎罗 吉力馬札羅
+乞力馬札羅 吉力馬札羅
+厄利垂亚 厄利垂亞
+索马里 索馬利亞
+索馬里 索馬利亞
+扎伊尔 薩伊
+扎伊爾 薩伊
+金沙萨 金夏沙
+金沙薩 金夏沙
+达累斯萨拉姆 三蘭港
+马拉维 馬拉威
+留尼汪 留尼旺
+布隆方丹 布隆泉
+厄瓜多 厄瓜多
+百慕大 百慕達
+圣赫勒拿 聖赫倫那
+马萨诸塞 麻薩諸塞
+馬利蘭 馬里蘭
+里士满 里奇蒙
+荷里活 好萊塢
+荷李活道 荷李活道
+维尔京群岛 維京群島
+維爾京群島 維京群島
+纽黑文 紐哈芬
+特拉華 德拉瓦
+特拉华 德拉瓦
+爱德华州 愛達荷州
+新罕布什尔 新罕布夏
+新奥尔良 紐奧良
+新奧爾良 紐奧良
+得克萨斯 德克薩斯
+弗吉尼亚 維吉尼亞
+康涅狄格 康乃狄克
+密歇根 密西根
+宾西法尼亚 賓夕法尼亞
+威士顿康星 威斯康辛
+伊利诺伊州 伊利諾州
+亚拉巴马 阿拉巴馬
+三藩市 舊金山
+艾奧瓦 愛荷華
+得克薩斯 德克薩斯
+蒙特利尔 蒙特婁
+蒙特利爾 蒙特婁
+滿地可 蒙特婁
+麦克尔 麥可
+迈克尔 麥可
+魯賓斯·巴里切羅 魯本·巴瑞切羅
+雷诺阿 雷諾瓦
+阿里埃勒·沙龙 艾里爾·夏隆
+阿里埃勒·沙龍 艾里爾·夏隆
+铁托 狄托
+鐵托 狄托
+邁凱輪 麥拿輪
+迈凯轮 麥拿輪
+达芬奇 達文西
+达·芬奇 達·文西
+赫鲁晓夫 赫魯雪夫
+赫丘勒·波洛 赫丘勒·白羅
+薛定谔 薛丁格
+葉利欽 葉爾欽
+華里沙 華勒沙
+瓦文萨 華勒沙
+艾森豪威尔 艾森豪
+罗纳德·里根 隆納·雷根
+维特根斯坦 維根斯坦
+约翰逊 詹森
+索尔仁尼琴 索忍尼辛
+索贊尼辛 索忍尼辛
+瓦格纳 華格納
+毕加索 畢卡索
+碧咸 贝克漢
+梅尔·吉布森 梅爾·吉勃遜
+查韦斯 查維茲
+本杰明 班傑明
+本傑明 班傑明
+普密蓬 蒲美蓬
+普利策 普利茲
+施罗德 施洛德
+斯蒂芬 史蒂芬
+斯皮尔伯格 史匹柏
+斯特劳斯 史特勞斯
+斯大林 史達林
+斯坦福 史丹福
+撒切尔 柴契爾
+戴卓爾 柴契爾
+摩根士丹利 摩根史坦利
+拉普兰 拉布蘭
+戴克里先 戴克里先
+戈爾巴喬夫 戈巴契夫
+戈尔巴乔夫 戈巴契夫
+愛德文 愛德溫
+德里达 德希達
+帕特里克 派屈克
+希拉里 希拉蕊
+希拉克 席哈克
+尼克松 尼克森
+威廉姆斯 威廉士
+多普勒 都卜勒
+叶利钦 葉爾欽
+卡斯特罗 卡斯楚
+包豪斯 包浩斯
+勃朗宁 白朗寧
+劳拉 蘿拉
+列奥纳多 李奧納多
+克里斯托弗 克里斯多福
+傅里叶 傅立葉
+伊丽莎白 伊莉莎白
+丘吉尔 邱吉爾
+肖邦 蕭邦
+理查德 理察
+肯尼迪 甘迺迪
+奥巴马 歐巴馬
+奧巴馬 歐巴馬
+概率 機率
+疯牛症 狂牛症
+甲肝 A肝
+甲型肝炎 A型肝炎
+乙肝 B肝
+乙型肝炎 B型肝炎
+丙肝 C肝
+丙型肝炎 C型肝炎
+艾滋 愛滋
+链接 連結
+程序员 程式設計師
+源代码 原始碼
+智能卡 智慧卡
+數據庫 資料庫
+操作系统 作業系統
+人机交互 人機互動
+交互设计 互動設計
+互联网络 網際網路
+互联网 網際網路
+万维网 全球資訊網
+编程语言 程式語言
+晶體管 電晶體
+晶体管 電晶體
+IP地址 IP位址
+IP 地址 IP 位址
+解像度 解析度
+屏幕 螢幕
+荧屏 螢屏
+版权信息 版權資訊
+航天器 太空飛行器
+导弹 飛彈
+宇航服 太空衣
+宇航员 太空人
+太空飛行員 太空人
+独联体 獨立國協
+独立国家联合体 獨立國家國協
+东南亚国家联盟 東南亞國協
+发达国家 已開發國家
+哥特式 哥德式
+落車 下車
+上落客 上下客
+集装箱 貨櫃
+雅马哈 山葉
+避孕套 保險套
+素檀 蘇丹
+珍寶客機 巨無霸客機
+泰坦尼克号 鐵達尼號
+樂行童軍 羅浮童軍
+朝鲜战争 韓戰
+万历朝鲜战争 萬曆朝鮮戰爭
+數碼相機 數位相機
+單鏡反光機 單眼相機
+数码相机 數位相機
+单反相机 單眼相機
+形而上學 形上學
+形而上学 形上學
+当且仅当 若且唯若
+圆珠笔 原子筆
+国际象棋 西洋棋
+可卡因 古柯鹼
+公共交通 公共運輸
+吉尼斯世界纪录 金氏世界紀錄
+健力士世界纪录 金氏世界紀錄
+健力士世界紀錄 金氏世界紀錄
+沙律 沙拉
+忌廉 奶油
+味美思 苦艾酒
+奥斯曼 鄂圖曼
+埃博拉 伊波拉
+克隆人 複製人
+荧光 螢光
+里氏0 芮氏0
+里氏1 芮氏1
+里氏2 芮氏2
+里氏3 芮氏3
+里氏4 芮氏4
+里氏5 芮氏5
+里氏6 芮氏6
+里氏7 芮氏7
+里氏8 芮氏8
+里氏9 芮氏9
+里氏震级 芮氏規模
+里氏规模 芮氏規模
+里氏地震规模 芮氏地震規模
+黎克特制 芮氏
+知识产权 智慧財產權
+知識產權 智慧財產權
+知识产权局 知識產權局
+知識產權局 知識產權署
+知识产权署 知識產權署
+知識產權署 知識產權署
+乒乓球 桌球
+乒乓 桌球
+首席执行官 執行長
+首席财务官 財務長
+首席运营官 營運長
+智能手机 智慧型手機
+智能手機 智慧型手機
+智能电话 智慧型電話
+智能電話 智慧型電話
+便携式 可攜式
+计算机程序 電腦程式
+电脑程序 電腦程式
+应用程序 應用程式
+激光 雷射
+高峰时间 尖峰時間
+高峰时段 尖峰時段
+东盟 東協
+亚细安 東協
+英联邦 大英國協
+英聯邦 大英國協
+共和联邦 大英國協
+阿布扎比 阿布達比
+开曼群岛 蓋曼群島
+開曼群島 蓋曼群島
+凯瑟琳 凱薩琳
+嘉芙蓮 凱薩琳
+门德尔松 孟德爾頌
+孟德爾遜 孟德爾頌
+肖斯塔科维奇 蕭士塔高維奇
+蕭士達高維契 蕭士塔高維奇
+希特拉 希特勒
+自由泳 自由式
+机床 工具機
+機床 工具機
+空气质量 空氣品質
+空氣質素 空氣品質
+俯卧撑 伏地挺身
+掌上壓 伏地挺身
+数字电视 數位電視
+數碼電視 數位電視
+数字技术 數位技術
+數碼技術 數位技術
+数字信号 數位訊號
+數碼訊號 數位訊號
+移动网络 行動網路
+流動網絡 行動網路
+咪高峰 麥克風
+電單車 機車
+搜索引擎 搜尋引擎
+福尔马林 福馬林
+福爾馬林 福馬林
+海洛英 海洛因
+高清电视 高畫質電視
+桑巴舞 森巴舞
+乔治·奥威尔 喬治·歐威爾
+結他 吉他
+了結他 了結他
+連結他 連結他
+昂山素季 翁山蘇姬
+昂山素姬 翁山蘇姬
+囯际象棋 西洋棋
+國際象棋 西洋棋
+私隱 隱私
+硅藻 硅藻 \ No newline at end of file
diff --git a/maintenance/language/zhtable/toTrad.manual b/maintenance/language/zhtable/toTrad.manual
index b0efd28e..7fc60c74 100644
--- a/maintenance/language/zhtable/toTrad.manual
+++ b/maintenance/language/zhtable/toTrad.manual
@@ -1,8 +1,9 @@
+” 」
+“ 「
+‘ 『
+’ 』
+’s ’s
手塚治虫 手塚治虫
-校仇 校讎
-仇校 讎校
-仇夷 讎夷
-仇問 讎問
無言不仇 無言不讎
視如寇仇 視如寇讎
往日無仇 往日無讎
@@ -26,8 +27,6 @@
丰韻 丰韻
丰儀 丰儀
丰標不凡 丰標不凡
-干細胞 幹細胞
-干熱 乾熱
二里頭 二里頭
水里鄉 水里鄉
蒙胧 朦朧
@@ -36,26 +35,29 @@
拜托 拜託
委托书 委託書
委托 委託
-挽詞 輓詞
-挽聯 輓聯
-挽詩 輓詩
於夫罗 於夫羅
府干預 府干預
府干擾 府干擾
-分布圖 分布圖
頁面 頁面
面條目 面條目
黃鈺筑 黃鈺筑
-仿佛 彷彿
-凶殘 兇殘
-凶殺 兇殺
-緝凶 緝兇
-行凶後 行兇後
-買凶 買兇
-逞凶鬥狠 逞兇鬥狠
-合著者 合著者
答复 答覆
反复 反覆
+候复 候覆
+待复 待覆
+批复 批覆
+复信 覆信
+复核 覆核
+的回复 的回覆
+回复中 回覆中
+回复说 回覆說
+回复你 回覆你
+有回复 有回覆
+回复邮件 回覆郵件
+回复意见 回覆意見
+回复帖子 回覆帖子
+得到回复 得到回覆
+回复: 回覆:
索馬里 索馬里
洗练 洗鍊
朝乾夕惕 朝乾夕惕
@@ -65,27 +67,20 @@
不干預 不干預
不干擾 不干擾
不干牠 不干牠
-矽谷 矽谷
范文瀾 范文瀾
-發表 發表
機械系 機械系
頂多 頂多
馬占山 馬占山
-叱咤樂壇 叱咤樂壇
闫怀礼 閆懷禮
-变髒 變髒
薴烯 薴烯
后豐 后豐
于謙 于謙
詩云 詩云
-鄭凱云 鄭凱云
云為 云為
古書云 古書云
古語云 古語云
經有云 經有云
語有云 語有云
-显著标志 顯著標志
-占領 佔領
采納 採納
風采 風采
于樂 于樂
@@ -126,7 +121,6 @@
于鳳桐 于鳳桐
于默奧 于默奧
于爾岑 于爾岑
-于默奧 于默奧
于貝爾 于貝爾
于爾根 于爾根
于雙戈 于雙戈
@@ -141,7 +135,6 @@
涂澤民 涂澤民
涂長望 涂長望
涂敏恆 涂敏恆
-台历 枱曆
艷后 艷后
廢后 廢后
后髮座 后髮座
@@ -154,10 +147,7 @@
蟻后 蟻后
馬格里布 馬格里布
佳里鎮 佳里鎮
-埔裡社撫墾局 埔裏社撫墾局
-埔裏社撫墾局 埔裏社撫墾局
有只採 有只採
-任何表達 任何表達
會干擾 會干擾
党項 党項
余三勝 余三勝
@@ -165,7 +155,6 @@
楊雅筑 楊雅筑
杰威爾音樂 杰威爾音樂
尸羅精舍 尸羅精舍
-索馬里 索馬里
騰格里 騰格里
村里長 村里長
進制 進制
@@ -179,8 +168,318 @@
黎吉雲 黎吉雲
于飛島 于飛島
鄉愿 鄉愿
+愿樸 愿樸
+謹愿 謹愿
奇迹 奇蹟
-候复 候覆
-待复 待覆
-批复 批覆
划槳 划槳
+折子戲 折子戲
+佣錢 佣錢
+佣鈿 佣鈿
+阁府 閤府
+太阁 太閤
+昆仑 崑崙
+昆山 崑山
+昆剧 崑劇
+昆曲 崑曲
+昆腔 崑腔
+昆苏 崑蘇
+昆调 崑調
+昆冈 崑岡
+西昆 西崑
+苏昆 蘇崑
+苏醒 甦醒
+复苏 復甦
+苹果 蘋果
+苹果干 蘋果乾
+后庄 后庄
+龜山庄 龜山庄
+寶山庄 寶山庄
+員山庄 員山庄
+昵称 暱稱
+單于 單于
+鮮于樞 鮮于樞
+鳳凰于飛 鳳凰于飛
+賦范 賦范
+陳士杰 陳士杰
+林杰樑 林杰樑
+茅于軾 茅于軾
+陳有后 陳有后
+天神之后 天神之后
+豔后 豔后
+后綜 后綜
+壽天里 壽天里
+貴子里 貴子里
+東湖里 東湖里
+鹿場里 鹿場里
+水里高級商工 水里高級商工
+水里鳳林 水里鳳林
+水里濁水溪 水里濁水溪
+划不來 划不來
+划來划去 划來划去
+划動 划動
+划得來 划得來
+划著 划著
+划進 划進
+划過 划過
+划龍舟 划龍舟
+只影響 只影響
+么弟 么弟
+六么 六么
+么雞 么雞
+義联 義联
+杠轂 杠轂
+局促 侷促
+開山辟谷 開山辟谷
+戲院里 戲院里
+惨淡 慘澹
+恶心 噁心
+证谏 証諫
+项链 項鍊
+手链 手鍊
+金链 金鍊
+链表 鍊表
+熏心 薰心
+熏习 薰習
+熏陶 薰陶
+熏沐 薰沐
+熏染 薰染
+熏香 薰香
+熏风 薰風
+雨蒙蒙 雨濛濛
+夹衣 袷衣
+夹裙 袷裙
+局蹐 跼蹐
+拳局 拳跼
+踡局 踡跼
+局躅 跼躅
+蹒局 蹣跼
+厘清 釐清
+厘订 釐訂
+厘革 釐革
+厘改 釐改
+厘整 釐整
+厘正 釐正
+毫厘 毫釐
+厘毫 釐毫
+剖厘 剖釐
+一厘一毫 一釐一毫
+升州 昇州
+升平 昇平
+升阳 昇陽
+陈升 陳昇
+南宮适 南宮适
+舊庄 舊庄
+拿破仑 拿破崙
+冗余 冗餘
+课余 課餘
+节余 節餘
+盈余 盈餘
+病余 病餘
+余地 餘地
+余力 餘力
+余子 餘子
+余事 餘事
+扶余 扶餘
+腐余 腐餘
+富余 富餘
+之余 之餘
+余泽 餘澤
+流风余俗 流風餘俗
+流风余韵 流風餘韻
+淋余土 淋餘土
+余一 餘一
+余二 餘二
+余三 餘三
+余四 餘四
+余五 餘五
+余六 餘六
+余七 餘七
+余八 餘八
+余九 餘九
+余十 餘十
+零余 零餘
+〇余 〇餘
+余零 餘零
+余〇 餘〇
+余1 餘1
+余2 餘2
+余3 餘3
+余4 餘4
+余5 餘5
+余6 餘6
+余7 餘7
+余8 餘8
+余9 餘9
+余0 餘0
+余数 餘數
+其余 其餘
+尸居余气 尸居餘氣
+剩余 賸餘
+余孽 餘孽
+残余 殘餘
+业余 業餘
+余割 餘割
+余款 餘款
+余角 餘角
+余切 餘切
+余霞 餘霞
+余下 餘下
+余弦 餘弦
+余震 餘震
+余貾 餘貾
+余额 餘額
+余人 餘人
+余俗 餘俗
+余倍 餘倍
+同余 同餘
+空余 空餘
+余量 餘量
+余年 餘年
+余留 餘留
+余项 餘項
+余式 餘式
+余部 餘部
+编余 編餘
+余墨 餘墨
+唾余 唾餘
+余韵 餘韻
+归余 歸餘
+公余 公餘
+宽余 寬餘
+余粮 餘糧
+余庆 餘慶
+余殃 餘殃
+余烬 餘燼
+劫余 劫餘
+结余 結餘
+烬余 燼餘
+净余 淨餘
+馂余 餕餘
+余晖 餘暉
+余辉 餘輝
+羡余 羨餘
+余悸 餘悸
+心余 心餘
+刑余 刑餘
+绪余 緒餘
+血余 血餘
+朱庆余 朱慶餘
+诸余 諸餘
+余论 餘論
+茶余 茶餘
+厨余 廚餘
+余裕 餘裕
+余气 餘氣
+诗余 詩餘
+词余 詞餘
+余僇 餘僇
+余辜 餘辜
+余责 餘責
+余罪 餘罪
+无余 無餘
+耳余 耳餘
+余烈 餘烈
+余思 餘思
+盐余 鹽餘
+嬴余 嬴餘
+赢余 贏餘
+王余鱼 王餘魚
+纡余 紆餘
+余波 餘波
+余杯 餘杯
+余步 餘步
+余妙 餘妙
+余音 餘音
+余声 餘聲
+余明 餘明
+余风 餘風
+余党 餘黨
+余毒 餘毒
+余桃 餘桃
+余桶 餘桶
+余利 餘利
+余沥 餘瀝
+余膏 餘膏
+余光 餘光
+余杭 餘杭
+余窍 餘竅
+余缺 餘缺
+余暇 餘暇
+余闲 餘閒
+余羡 餘羨
+余响 餘響
+余兴 餘興
+余蓄 餘蓄
+余绪 餘緒
+余珍 餘珍
+余众 餘眾
+余酲 餘酲
+余喘 餘喘
+余食 餘食
+余热 餘熱
+余刃 餘刃
+余闰 餘閏
+余存 餘存
+余业 餘業
+余姚 餘姚
+余荫 餘蔭
+余映 餘映
+余外 餘外
+余威 餘威
+余味 餘味
+余温 餘溫
+余勇 餘勇
+多余 多餘
+剩余 剩餘
+余生 餘生
+余欢 餘歡
+有余 有餘
+一余 一餘
+二余 二餘
+两余 兩餘
+三余 三餘
+四余 四餘
+五余 五餘
+六余 六餘
+七余 七餘
+八余 八餘
+九余 九餘
+十余 十餘
+百余 百餘
+千余 千餘
+万余 萬餘
+亿余 億餘
+兆余 兆餘
+0余 0餘
+1余 1餘
+2余 2餘
+3余 3餘
+4余 4餘
+5余 5餘
+6余 6餘
+7余 7餘
+8余 8餘
+9余 9餘
+于余曲折 于餘曲折
+尸居余气 尸居餘氣
+余光生 余光生
+余光中 余光中
+余思敏 余思敏
+余威德 余威德
+余子明 余子明
+余三胜 余三勝
+咨询 諮詢
+酒曲 酒麴
+曲霉 麴黴
+曲秀才 麴秀才
+曲尘 麴塵
+曲櫱 麴櫱
+黄曲毒素 黃麴毒素
+曲道士 麴道士
+曲钱 麴錢
+曲车 麴車
+鼠曲草 鼠麴草
+大曲酒 大麴酒
+泸州大曲 瀘州大麯 #商標名
+洋河大曲 洋河大麴
+双沟大曲 雙溝大麯 #商標名 \ No newline at end of file
diff --git a/maintenance/language/zhtable/trad2simp.manual b/maintenance/language/zhtable/trad2simp.manual
index 747a240a..f76a9498 100644
--- a/maintenance/language/zhtable/trad2simp.manual
+++ b/maintenance/language/zhtable/trad2simp.manual
@@ -1,153 +1,832 @@
+U+0347A㑺|U+04FCA俊|
+U+034BA㒺|U+07F54罔|
+U+034C2㓂|U+05BC7寇|
+U+03541㕁|U+05374却|
+U+03551㕑|U+053A8厨|
+U+03558㕘|U+053C2参|
+U+03565㕥|U+04EE5以|
+U+0362D㘭|U+05773坳|
+U+0375B㝛|U+05BBF宿|
+U+03760㝠|U+051A5冥|
+U+03800㠀|U+05C9B岛|
+U+0382F㠯|U+04EE5以|
+U+03836㠶|U+05E06帆|
+U+0384C㡌|U+05E3D帽|
+U+03898㢘|U+05EC9廉|
+U+03919㤙|U+06069恩|
+U+03966㥦|U+060EC惬|
+U+0396B㥫|U+060C7惇|
+U+039F1㧱|U+062FF拿|
+U+03A17㨗|U+06377捷|
+U+03A2A㨪|U+06643晃|
+U+03A3F㨿|U+0636E据|
+U+03A57㩗|U+0643A携|
+U+03A66㩦|U+0643A携|
+U+03A9A㪚|U+06563散|
+U+03A9F㪟|U+06566敦|
+U+03B09㬉|U+06696暖|
+U+03B2A㬪|U+053E0叠|
+U+03BED㯭|U+06A79橹|
+U+03C43㱃|U+0996E饮|
+U+03CD2㳒|U+06CD5法|
+U+03D31㴱|U+06DF1深|
+U+03F1D㼝|U+07897碗|
+U+03F5E㽞|U+07559留|
+U+03FDC㿜|U+0762A瘪|
+U+04230䈰|U+07B72筲|
+U+04280䊀|U+07CCA糊|
+U+045EC䗬|U+08702蜂|
+U+0460F䘏|U+06064恤|
+U+04611䘑|U+08109脉|
+U+0461A䘚|U+05352卒|
+U+046D0䛐|U+08BCD词|
+U+046E1䛡|U+08BDD话|
+U+04754䝔|U+0737E獾|
+U+04800䠀|U+08E5A蹚|
+U+04836䠶|U+05C04射|
+U+04965䥥|U+09570镰|
+U+04B03䬃|U+098D2飒|
+U+04B7E䭾|U+09A6E驮|
+U+04C1F䰟|U+09B42魂|
+U+04CD8䳘|U+09E45鹅|
+U+04D8A䶊|U+08844衄|
+U+04E23丣|U+0536F卯|
+U+04E57乗|U+04E58乘|
+U+04E79乹|U+05E72干|
+U+04E81亁|U+05E72干|
U+04E99亙|U+04E98亘|
-U+04F48佈|U+05E03布|
+U+04E9D亝|U+0658B斋|
+U+04EB1亱|U+0591C夜|
+U+04EB7亷|U+05EC9廉|
+U+04EBE亾|U+04EA1亡|
U+04F48佈|U+05E03布|
U+04F54佔|U+05360占|
+U+04FB7侷|U+05C40局|
+U+04FFB俻|U+05907备|
+U+05010倐|U+0500F倏|
U+05016倖|U+05E78幸|
+U+05023倣|U+04EFF仿|
+U+05038倸|U+0776C睬|
+U+0509A傚|U+06548效|
U+050A2傢|U+05BB6家|
+U+050CA僊|U+04ED9仙|
+U+050CD働|U+052A8动|
U+050F1僱|U+096C7雇|
+U+0510C儌|U+04FA5侥|
U+05138儸|U+03469㑩|U+07F57罗|
U+05147兇|U+051F6凶|
+U+0514E兎|U+05154兔|
+U+05160兠|U+0515C兜|
+U+05184冄|U+05189冉|
+U+05190冐|U+05192冒|
+U+05191冑|U+080C4胄|
+U+051BA冺|U+06CEF泯|
+U+051E2凢|U+051E1凡|
+U+051F4凴|U+051ED凭|
+U+05226刦|U+052AB劫|
+U+05227刧|U+052AB劫|
+U+0523C刼|U+052AB劫|
+U+05249剉|U+09509锉|
+U+0524F剏|U+0521B创|
+U+05259剙|U+0521B创|
+U+05273剳|U+0672D札|
U+05277剷|U+094F2铲|
+U+05279剹|U+0622E戮|
+U+05284劄|U+0672D札|
+U+05292劒|U+05251剑|
+U+052B9効|U+06548效|
+U+052C5勅|U+06555敕|
+U+052CC勌|U+05026倦|
+U+052D1勑|U+06555敕|
+U+052E6勦|U+0527F剿|
U+052F3勳|U+052CB勋|
+U+0531F匟|U+07095炕|
+U+05332匲|U+05941奁|
+U+05333匳|U+05941奁|
+U+05379卹|U+06064恤|
U+0537D卽|U+05373即|
+U+05380厀|U+0819D膝|
+U+053A0厠|U+05395厕|
U+053A4厤|U+05386历|
+U+053B0厰|U+05382厂|
+U+0541A吚|U+054BF咿|
+U+0544C呌|U+053EB叫|
+U+0546A呪|U+05492咒|
+U+0548A咊|U+0548C和|
+U+054F6哶|U+054A9咩|
+U+05515唕|U+05523唣|
+U+05518唘|U+0542F启|
+U+05538唸|U+05FF5念|
+U+0554E啎|U+05FE4忤|
+U+05551啑|U+0558B喋|
+U+05553啓|U+0542F启|
+U+05557啗|U+05556啖|
+U+05563啣|U+08854衔|
U+055AB喫|U+05403吃|
-U+05641噁|U+06076恶|
+U+055C1嗁|U+0557C啼|
+U+05605嘅|U+06168慨|
+U+05611嘑|U+0547C呼|
+U+05620嘠|U+0560E嘎|
+U+05637嘷|U+055E5嗥|
+U+05649噉|U+05556啖|
U+05690嚐|U+05C1D尝|
U+056A5嚥|U+054BD咽|
U+056AE嚮|U+05411向|
U+056CC囌|U+082CF苏|
+U+056D3囓|U+0556E啮|
+U+056D9囙|U+056E0因|
+U+05705圅|U+051FD函|
+U+0577F坿|U+09644附|
+U+0579C垜|U+0579B垛|
U+0585A塚|U+051A2冢|
+U+0585F塟|U+0846C葬|
+U+05872塲|U+0573A场|
+U+05896墖|U+05854塔|
U+058B0墰|U+0575B坛|
+U+058BB墻|U+05899墙|
+U+058CE壎|U+057D9埙|
U+058DC壜|U+0575B坛|
-U+05925夥|U+04F19伙|
+U+058FB壻|U+05A7F婿|
+U+05918夘|U+0536F卯|
+U+05925夥|U+04F19伙|U+05925夥|
+U+0596C奬|U+05956奖|
+U+059AC妬|U+05992妒|
+U+059B3妳|U+04F60你|
+U+059B7妷|U+04F84侄|
+U+059C9姉|U+059CA姊|
+U+059D9姙|U+0598A妊|
+U+059EA姪|U+04F84侄|
+U+059F8姸|U+0598D妍|
+U+05A63婣|U+059FB姻|
+U+05A6C婬|U+06DEB淫|
+U+05A8D媍|U+05987妇|
+U+05ABF媿|U+06127愧|
+U+05ACB嫋|U+08885袅|
+U+05AF0嫰|U+05AE9嫩|
+U+05AFA嫺|U+05A34娴|
+U+05B00嬀|U+059AB妫|
+U+05B1D嬝|U+08885袅|
+U+05B2D嬭|U+05976奶|
+U+05B3E嬾|U+061D2懒|
+U+05B43孃|U+05A18娘|
+U+05B7C孼|U+05B7D孽|
+U+05B82宂|U+05197冗|
U+05BC0寀|U+091C7采|
-U+05D11崑|U+06606昆|
-U+05D19崙|U+04ED1仑|
+U+05BC3寃|U+051A4冤|
+U+05BD1寑|U+05BDD寝|
+U+05BF3寳|U+05B9D宝|
+U+05C05尅|U+0514B克|
+U+05C12尒|U+05C14尔|
+U+05C19尙|U+05C1A尚|
+U+05C1F尟|U+09C9C鲜|
+U+05C20尠|U+09C9C鲜|
+U+05C5B屛|U+05C4F屏|
+U+05C6D屭|U+05C43屃|
+U+05C85岅|U+05742坂|
+U+05CDD峝|U+05CD2峒|
U+05D57嵗|U+05C81岁|
+U+05D83嶃|U+05D2D崭|
U+05DBD嶽|U+05CB3岳|
U+05DD6巖|U+05CA9岩|
-U+05DF9巹|U+0537A卺|
+U+05DD7巗|U+05CA9岩|
+U+05DF5巵|U+0536E卮|
+U+05E00帀|U+0531D匝|
+U+05E0B帋|U+07EB8纸|
+U+05E2C帬|U+088D9裙|
+U+05E47幇|U+05E2E帮|
+U+05E51幑|U+05FBD徽|
+U+05E59幙|U+05E55幕|
+U+05E5A幚|U+05E2E帮|
+U+05EBB庻|U+05EB6庶|
+U+05EBD庽|U+05BD3寓|
+U+05ED0廐|U+053A9厩|
+U+05ED5廕|U+0836B荫|
+U+05EF5廵|U+05DE1巡|
+U+05EF9廹|U+08FEB迫|
+U+05EFB廻|U+056DE回|
+U+05EFC廼|U+04E43乃|
U+05F14弔|U+0540A吊|
U+05F46彆|U+0522B别|
+U+05F6B彫|U+096D5雕|
+U+05F83徃|U+05F80往|
+U+05FA7徧|U+0904D遍|
+U+06031怱|U+05306匆|
+U+06033怳|U+0604D恍|
+U+06060恠|U+0602A怪|
+U+06061恡|U+0541D吝|
+U+060A4悤|U+05306匆|
+U+060BD悽|U+051C4凄|
+U+060CF惏|U+05A6A婪|
+U+060E5惥|U+0607F恿|
+U+060F7惷|U+08822蠢|
+U+0613D愽|U+0535A博|
+U+06159慙|U+060ED惭|
+U+06164慤|U+060AB悫|
+U+06174慴|U+06151慑|
U+0617C慼|U+0621A戚|
+U+0617D慽|U+0621A戚|
U+0617E慾|U+06B32欲|
+U+06187憇|U+061A9憩|
U+061DE懞|U+08499蒙|
+U+0621E戞|U+0621B戛|
+U+0622F戯|U+0620F戏|
+U+06239戹|U+05384厄|
+U+0625E扞|U+0634D捍|
+U+0629D抝|U+062D7拗|
U+062DA拚|U+062FC拼|
U+06331挱|U+06332挲|
-U+06371捱|U+06328挨|
+U+06335挵|U+05F04弄|
+U+06344捄|U+06551救|
U+06372捲|U+05377卷|
+U+063BD掽|U+078B0碰|
+U+063D1揑|U+0634F捏|
+U+063EB揫|U+063EA揪|
+U+063F7揷|U+063D2插|
+U+063F9揹|U+080CC背|
+U+06406搆|U+06784构|
+U+06407搇|U+063FF揿|
+U+06409搉|U+069B7榷|
+U+06424搤|U+0627C扼|
+U+06425搥|U+06376捶|
+U+06428搨|U+062D3拓|
+U+0642F搯|U+0638F掏|
+U+0643E搾|U+069A8榨|
+U+06443摃|U+0625B扛|
U+0647A摺|U+06298折|
+U+064A1撡|U+064CD操|
+U+064A6撦|U+0626F扯|
+U+064D5擕|U+0643A携|
+U+064E7擧|U+04E3E举|
+U+06529攩|U+06321挡|
+U+06537攷|U+08003考|
+U+06542敂|U+053E9叩|
+U+0654D敍|U+053D9叙|
+U+0657A敺|U+09A71驱|
U+065C2旂|U+065D7旗|
U+065E3旣|U+065E2既|
-U+06607昇|U+05347升|
+U+065E4旤|U+07978祸|
+U+065F9旹|U+065F6时|
+U+065FE旾|U+06625春|
+U+06607昇|U+06607昇|U+05347升|
+U+0662C昬|U+0660F昏|
+U+066B1暱|U+06635昵|
+U+066E1曡|U+053E0叠|
+U+0671E朞|U+0671F期|
+U+06722朢|U+0671B望|
U+0672E朮|U+0672F术|
+U+06736朶|U+06735朵|
+U+06792枒|U+04E2B桠|
+U+067B1枱|U+053F0台|
+U+067FA柺|U+062D0拐|
+U+067FB査|U+067E5查|
+U+06801栁|U+067F3柳|
+U+0681E栞|U+0520A刊|
+U+06822栢|U+067CF柏|
+U+06830栰|U+07B4F筏|
+U+06852桒|U+06851桑|
+U+0686E桮|U+0676F杯|
+U+0687A桺|U+067F3柳|
U+068CA棊|U+068CB棋|
+U+06900椀|U+07897碗|
+U+06909椉|U+04E58乘|
+U+06917椗|U+07887碇|
+U+06936椶|U+068D5棕|
+U+06937椷|U+07F04缄|
+U+0693E椾|U+07B3A笺|
+U+06965楥|U+06966楦|
U+069A6榦|U+05E72干|
U+069D3槓|U+06760杠|
+U+069D5槕|U+0684C桌|
U+06A11樑|U+06881梁|
+U+06A5C橜|U+06A5B橛|
+U+06AC8櫈|U+051F3凳|
U+06B05欅|U+06989榉|
+U+06B1D欝|U+090C1郁|
+U+06B35欵|U+06B3E款|
U+06B4E歎|U+053F9叹|
+U+06B5B歛|U+0655B敛|
+U+06B74歴|U+05386历|
+U+06B80殀|U+0592D夭|
U+06BAD殭|U+050F5僵|
+U+06BBB殻|U+058F3壳|
+U+06BE7毧|U+07ED2绒|
+U+06BEC毬|U+07403球|
+U+06C0A氊|U+06BE1毡|
+U+06C37氷|U+051B0冰|
U+06C59汙|U+06C61污|
+U+06C5A汚|U+06C61污|
+U+06C88瀋|U+06C88沈|U+0700B渖|
U+06CDD泝|U+06EAF溯|
U+06D29洩|U+06CC4泄|
+U+06D96涖|U+08385莅|
U+06DD2淒|U+051C4凄|
+U+06DDB淛|U+06D59浙|
U+06DE8淨|U+051C0净|
U+06DE9淩|U+051CC凌|
U+06E67湧|U+06D8C涌|
+U+06E7B湻|U+06DF3淳|
+U+06E7C湼|U+06D85涅|
+U+06EBC溼|U+06E7F湿|
U+06ED9滙|U+06C47汇|
+U+06EDB滛|U+06DEB淫|
+U+06EF7滷|U+05364卤|
+U+06F44潄|U+06F31漱|
+U+06F59潙|U+06CA9沩|
+U+06F81澁|U+06DA9涩|
U+06F90澐|U+06C84沄|
U+06FBE澾|U+03CE0㳠|
+U+06FC7濇|U+06DA9涩|
U+06FDB濛|U+06FDB濛|U+08499蒙|
+U+06FF6濶|U+09614阔|
U+07030瀰|U+05F25弥|
+U+0704B灋|U+06CD5法|
+U+070D6烖|U+0707E灾|
+U+07151煑|U+0716E煮|
+U+07157煗|U+06696暖|
+U+07188熈|U+07199熙|
+U+071C4燄|U+07130焰|
+U+071C9燉|U+07096炖|U+071C9燉|
U+071EC燬|U+06BC1毁|
+U+071FB燻|U+0718F熏|
+U+07217爗|U+070E8烨|
U+07232爲|U+04E3A为|
+U+07240牀|U+05E8A床|
+U+0724B牋|U+07B3A笺|
+U+0724E牎|U+07A97窗|
+U+07250牐|U+095F8闸|
+U+07253牓|U+0699C榜|
+U+07255牕|U+07A97窗|
+U+07260牠|U+05B83它|
+U+07274牴|U+062B5抵|
+U+072E5狥|U+05F87徇|
+U+07302猂|U+0608D悍|
+U+07328猨|U+0733F猿|
U+07343獃|U+05446呆|
+U+07358獘|U+06BD9毙|
+U+07367獧|U+072F7狷|
+U+07385玅|U+05999妙|
+U+07416琖|U+076CF盏|
+U+07431琱|U+096D5雕|
+U+07447瑇|U+073B3玳|
+U+0746F瑯|U+07405琅|
+U+074A2璢|U+07460瑠|
+U+0750E甎|U+07816砖|
U+07515甕|U+074EE瓮|
-U+07526甦|U+082CF苏|
-U+0752F甯|U+05B81宁|
+U+07516甖|U+07F42罂|
+U+0751E甞|U+05C1D尝|
+U+07523産|U+04EA7产|
+U+07526甦|U+07526甦|U+082CF苏|
+U+0752F甯|U+0752F甯|U+05B81宁|
+U+07542畂|U+04EA9亩|
+U+07546畆|U+04EA9亩|
+U+07567畧|U+07565略|
U+0756B畫|U+0753B画|U+05212划|
+U+0756E畮|U+04EA9亩|
+U+07571畱|U+07559留|
U+07575畵|U+0753B画|U+05212划|
+U+0758E疎|U+0758F疏|
+U+07598疘|U+0809B肛|
+U+075BF疿|U+075F1痱|
+U+075D0痐|U+086D4蛔|
U+075E0痠|U+09178酸|
+U+075FA痺|U+075F9痹|
+U+07609瘉|U+06108愈|
+U+07616瘖|U+05591喑|
+U+0763B瘻|U+07618瘘|
+U+07644癄|U+06194憔|
+U+07645癅|U+07624瘤|
+U+07648癈|U+05E9F废|
U+07652癒|U+06108愈|
U+07661癡|U+075F4痴|
+U+07681皁|U+07682皂|
+U+07690皐|U+0768B皋|
+U+0769C皜|U+07693皓|
+U+076B7皷|U+09F13鼓|
U+076C3盃|U+0676F杯|
+U+076C7盇|U+076CD盍|
+U+076CC盌|U+07897碗|
+U+0770E眎|U+089C6视|
U+0771E眞|U+0771F真|
+U+07721眡|U+089C6视|
+U+07760睠|U+07737眷|
+U+0776A睪|U+0777E睾|
+U+07787瞇|U+0772F眯|
+U+07796瞖|U+07FF3翳|
U+077AD瞭|U+04E86了|
-U+077C7矇|U+08499蒙|
+U+077C1矁|U+07785瞅|
+U+077C7矇|U+08499蒙|U+077C7矇|
+U+077D9矙|U+077B0瞰|
+U+07832砲|U+070AE炮|
U+07843硃|U+06731朱|
-U+07895碕|U+057FC埼|
+U+07881碁|U+068CB棋|
+U+078AA碪|U+07827砧|
+U+078DF磟|U+0788C碌|
+U+07906礆|U+078B1碱|
+U+0792E礮|U+070AE炮|
+U+07955祕|U+079D8秘|
U+07958祘|U+07B97算|
+U+079CA秊|U+05E74年|
+U+079CC秌|U+079CB秋|
+U+079D6秖|U+053EA只|
+U+07A09稉|U+07CB3粳|
U+07A1C稜|U+068F1棱|
+U+07A2C稬|U+07CEF糯|
+U+07A2D稭|U+079F8秸|
+U+07A3E稾|U+07A3F稿|
+U+07A64穤|U+07CEF糯|
+U+07A68穨|U+09893颓|
+U+07A7D穽|U+09631阱|
+U+07A93窓|U+07A97窗|
+U+07AB0窰|U+07A91窑|
+U+07ABB窻|U+07A97窗|
+U+07AC8竈|U+07076灶|
+U+07ADA竚|U+04F2B伫|
+U+07ADD竝|U+05E76并|
+U+07AE2竢|U+04FDF俟|
+U+07AEA竪|U+07AD6竖|
+U+07B5E筞|U+07B56策|
+U+07B69筩|U+07B52筒|
+U+07B6F筯|U+07BB8箸|
U+07B87箇|U+04E2A个|
+U+07B92箒|U+05E1A帚|
+U+07BA0箠|U+068F0棰|
+U+07BDB篛|U+07BAC箬|
U+07C11簑|U+084D1蓑|
+U+07C12簒|U+07BE1篡|
+U+07C2E簮|U+07C2A簪|
+U+07C37簷|U+06A90檐|
+U+07C50籐|U+085E4藤|
U+07C64籤|U+07B7E签|
U+07C72籲|U+05401吁|
+U+07C83粃|U+079D5秕|
+U+07CA7粧|U+05986妆|
+U+07CC9糉|U+07CBD粽|
U+07CF0糰|U+056E2团|
+U+07D25紥|U+0624E扎|
U+07D2E紮|U+0624E扎|
+U+07D43絃|U+05F26弦|
+U+07D4F絏|U+07EC1绁|
+U+07D89綉|U+07EE3绣|
+U+07D91綑|U+06346捆|
U+07DAB綫|U+07EBF线|
U+07DB5綵|U+05F69彩|U+0433D䌽|
+U+07DD0緐|U+07E41繁|
+U+07DD1緑|U+07EFF绿|
+U+07DD4緔|U+07EF1绱|
+U+07DDA線|U+07EBF线|U+07F10缐|
+U+07DDC緜|U+07EF5绵|
+U+07DE5緥|U+08913褓|
+U+07DFC緼|U+07F0A缊|
+U+07E27縧|U+07EE6绦|
U+07E34縴|U+07EA4纤|
U+07E50繐|U+07A57穗|
+U+07E56繖|U+04F1E伞|
+U+07E59繙|U+07FFB翻|
+U+07E66繦|U+08941襁|
+U+07E6E繮|U+07F30缰|
U+07E94纔|U+0624D才|
+U+07F47罇|U+06A3D樽|
+U+07F4B罋|U+074EE瓮|
U+07F4E罎|U+0575B坛|
+U+07F78罸|U+07F5A罚|
+U+07F97羗|U+07F8C羌|
+U+07FA2羢|U+07ED2绒|
+U+07FA3羣|U+07FA4群|
U+07FA8羨|U+07FA1羡|
+U+07FB6羶|U+081BB膻|
+U+07FC4翄|U+07FC5翅|
+U+07FEB翫|U+073A9玩|
+U+07FF6翶|U+07FF1翱|
+U+08021耡|U+09504锄|
+U+0808E肎|U+080AF肯|
+U+08090肐|U+080F3胳|
+U+080A7肧|U+080DA胚|
+U+080F7胷|U+080F8胸|
+U+08103脃|U+08106脆|
+U+08107脇|U+080C1胁|
+U+08117脗|U+0543B吻|
U+08123脣|U+05507唇|
+U+08141腁|U+080FC胼|
+U+08193膓|U+080A0肠|
+U+081C8臈|U+0814A腊|
+U+081CB臋|U+081C0臀|
+U+081D5臕|U+08198膘|
+U+081D9臙|U+080ED胭|
+U+081DD臝|U+088F8裸|
U+081E5臥|U+05367卧|
+U+081EF臯|U+0768B皋|
+U+08216舖|U+094FA铺|
U+08218舘|U+09986馆|
-U+083F4菴|U+05EB5庵|
+U+08229舩|U+08239船|
+U+08262艢|U+06A2F樯|
+U+08263艣|U+06A79橹|
+U+0826A艪|U+06A79橹|
+U+082B2芲|U+082B1花|
+U+08318茘|U+08354荔|
+U+08373荳|U+08C46豆|
+U+083F8菸|U+070DF烟|
+U+08432萲|U+08431萱|
U+08457著|U+08457著|U+07740着|
+U+08460葠|U+053C2参|
+U+0846F葯|U+0836F药|
+U+08493蒓|U+083BC莼|
+U+084C6蓆|U+05E2D席|
+U+084E1蓡|U+053C2参|
+U+084F4蓴|U+083BC莼|
+U+08514蔔|U+0535C卜|
+U+08515蔕|U+08482蒂|
U+08518蔘|U+053C2参|
+U+0855A蕚|U+0843C萼|
+U+0857F蕿|U+08431萱|
U+08591薑|U+059DC姜|
U+085C9藉|U+085C9藉|U+0501F借|
+U+085F4藴|U+08574蕴|
+U+085F7藷|U+085AF薯|
+U+085FC藼|U+08431萱|
+U+08610蘐|U+08431萱|
+U+08613蘓|U+082CF苏|
+U+08624蘤|U+082B1花|
+U+08698蚘|U+086D4蛔|
+U+086D5蛕|U+086D4蛔|
+U+0870B蜋|U+08782螂|
+U+08716蜖|U+086D4蛔|
+U+08728蜨|U+08776蝶|
+U+08768蝨|U+08671虱|
+U+0876F蝯|U+0733F猿|
+U+08771蝱|U+0867B虻|
+U+0878E螎|U+0878D融|
+U+087A1螡|U+0868A蚊|
+U+087C1蟁|U+0868A蚊|
+U+087C7蟇|U+087C6蟆|
U+0880D蠍|U+0874E蝎|
+U+0880F蠏|U+087F9蟹|
+U+08812蠒|U+08327茧|
+U+08814蠔|U+0869D蚝|
+U+0882D蠭|U+08702蜂|
+U+08842衂|U+08844衄|
+U+08846衆|U+04F17众|
+U+08847衇|U+08109脉|
U+0884A衊|U+08511蔑|
+U+08856衖|U+05F04弄|
+U+0885E衞|U+0536B卫|
+U+0887A衺|U+090AA邪|
+U+0889F袟|U+05E19帙|
+U+088B5袵|U+0887D衽|
+U+088CC裌|U+088B7袷|
U+088CF裏|U+091CC里|
-U+08946襆|U+05E5E幞|
+U+088E0裠|U+088D9裙|
+U+0892D褭|U+08885袅|
+U+08943襃|U+08912褒|
+U+0894D襍|U+06742杂|
U+08986覆|U+08986覆|U+0590D复|
+U+08987覇|U+09738霸|
+U+08988覈|U+06838核|
+U+0898A覊|U+07F81羁|
+U+08994覔|U+089C5觅|
+U+089A9覩|U+07779睹|
+U+089D4觔|U+065A4斤|
+U+089DD觝|U+062B5抵|
U+08A17託|U+06258托|U+08BAC讬|
-U+08AEE諮|U+054A8咨|U+08C18谘|
+U+08A3C証|U+08BC1证|
+U+08A76詶|U+0916C酬|
+U+08A96誖|U+06096悖|
+U+08AAC説|U+08BF4说|
+U+08AEE諮|U+08C18谘|U+054A8咨|
+U+08B0C謌|U+06B4C歌|
+U+08B21謡|U+08C23谣|
+U+08B2D謭|U+08C2B谫|
+U+08B41譁|U+054D7哗|
+U+08B46譆|U+0563B嘻|
+U+08B4C譌|U+08BB9讹|
+U+08B54譔|U+064B0撰|
+U+08B5F譟|U+0566A噪|
U+08B6D譭|U+06BC1毁|
-U+08B8E讎|U+04EC7仇|
+U+08B81讁|U+08C2A谪|
+U+08B8E讎|U+04EC7仇|U+096E0雠|
+U+08B90讐|U+096E0雠|
U+08B9A讚|U+08D5E赞|
+U+08C53豓|U+08273艳|
U+08C54豔|U+08273艳|
+U+08C8D貍|U+072F8狸|
+U+08C9B貛|U+0737E獾|
+U+08CC9賉|U+06064恤|
+U+08CDB賛|U+08D5E赞|
+U+08CEB賫|U+08D4D赍|
+U+08CF7賷|U+08D4D赍|
+U+08D0B贋|U+08D5D赝|
+U+08D11贑|U+08D63赣|
+U+08D1C贜|U+08D43赃|
+U+08D82趂|U+08D81趁|
+U+08DE5跥|U+08DFA跺|
+U+08DF4跴|U+08E29踩|
+U+08E01踁|U+080EB胫|
+U+08E2B踫|U+078B0碰|
+U+08E30踰|U+0903E逾|
+U+08E4F蹏|U+08E44蹄|
+U+08E54蹔|U+06682暂|
+U+08E5F蹟|U+08FF9迹|
+U+08E60蹠|U+08DD6跖|
+U+08E67蹧|U+07CDF糟|
+U+08E75蹵|U+08E74蹴|
+U+08EAD躭|U+0803D耽|
+U+08EB3躳|U+08EAC躬|
+U+08EB6躶|U+088F8裸|
+U+08F19輙|U+08F84辄|
+U+08F2D輭|U+08F6F软|
+U+08F3C輼|U+08F92辒|
+U+08FA0辠|U+07F6A罪|
+U+08FA2辢|U+08FA3辣|
+U+08FA4辤|U+08F9E辞|
+U+08FB3辳|U+0519C农|
U+08FF4迴|U+056DE回|
+U+08FFB迻|U+079FB移|
+U+09008逈|U+08FE5迥|
+U+09025逥|U+056DE回|
+U+09029逩|U+05954奔|
+U+0902C逬|U+08FF8迸|
U+09031週|U+05468周|
+U+09049遉|U+04FA6侦|
U+0904A遊|U+06E38游|
U+09061遡|U+06EAF溯|
+U+0906F遯|U+09041遁|
+U+09076遶|U+07ED5绕|
+U+09156酖|U+09E29鸩|
+U+09167酧|U+0916C酬|
+U+09183醃|U+0814C腌|
+U+09186醆|U+076CF盏|
+U+09195醕|U+09187醇|
U+091A3醣|U+07CD6糖|
U+091AF醯|U+09170酰|
+U+091BB醻|U+0916C酬|
+U+091BC醼|U+05BB4宴|
+U+091E6釦|U+06263扣|
+U+091EC釬|U+0710A焊|
+U+09205鈅|U+094A5钥|
+U+0920E鈎|U+094A9钩|
+U+09246鉆|U+094BB钻|
+U+09262鉢|U+094B5钵|
+U+092B2銲|U+0710A焊|
+U+092ED鋭|U+09510锐|
+U+09332録|U+05F55录|
+U+09341鍁|U+09528锨|
U+0934A鍊|U+070BC炼|U+094FE链|
+U+0936B鍫|U+09539锹|
+U+09373鍳|U+09274鉴|
+U+0937E鍾|U+0953A锺|U+0949F钟|
U+0938C鎌|U+09570镰|
+U+09397鎗|U+067AA枪|
+U+0939A鎚|U+09524锤|
U+093AD鎭|U+093AE镇|
+U+093AD鎭|U+09547镇|
+U+093B8鎸|U+0954C镌|
+U+093BB鎻|U+09501锁|
U+093DA鏚|U+0621A戚|
+U+0941D鐝|U+09562镢|
U+09451鑑|U+09274鉴|
-U+0955F镟|U+065CB旋|
+U+0945A鑚|U+094BB钻|
+U+0945B鑛|U+077FF矿|
+U+09464鑤|U+05228刨|
+U+09475鑵|U+07F50罐|
+U+09482钂|U+0954B镋|
U+09592閒|U+095F2闲|
-U+095A4閤|U+05408合|
+U+09599閙|U+095F9闹|
+U+095A4閤|U+09601阁|U+05408合|
+U+095A7閧|U+054C4哄|
+U+095B2閲|U+09605阅|
+U+095C7闇|U+06697暗|
+U+095DA闚|U+07AA5窥|
U+095E2闢|U+08F9F辟|
+U+09628阨|U+05384厄|
U+0962A阪|U+0962A阪|U+05742坂|
-U+0965E陞|U+05347升|
+U+0962C阬|U+05751坑|
+U+09657陗|U+05CED峭|
+U+0965C陜|U+09655陕|
+U+0965E陞|U+0965E陞|U+05347升|
+U+0967B陻|U+05819堙|
+U+0967F陿|U+072ED狭|
+U+09682隂|U+09634阴|
+U+09684隄|U+05824堤|
+U+09696隖|U+0575E坞|
+U+096A3隣|U+090BB邻|
+U+096B7隷|U+096B6隶|
+U+0976D靭|U+097E7韧|
+U+09771靱|U+097E7韧|
+U+0978C鞌|U+0978D鞍|
U+097A6鞦|U+079CB秋|U+097A7鞧|
+U+097B5鞵|U+0978B鞋|
+U+097BE鞾|U+09774靴|
U+097C6韆|U+05343千|
-U+097DD韝|U+097B2鞲|
+U+097C8韈|U+0889C袜|
+U+097E4韤|U+0889C袜|
+U+097EE韮|U+097ED韭|
+U+0981F頟|U+0989D额|
+U+0983C頼|U+08D56赖|
+U+0983D頽|U+09893颓|
+U+09847顇|U+060B4悴|
+U+0984B顋|U+0816E腮|
+U+09854顔|U+0989C颜|
U+09858願|U+0613F愿|
+U+09866顦|U+06194憔|
+U+098C3飃|U+098D8飘|
+U+098DC飜|U+07FFB翻|
+U+098E4飤|U+09972饲|
U+098F1飱|U+098E7飧|
-U+09918餘|U+04F59余|U+09980馀|
-U+09931餱|U+07CC7糇|
-U+09935餵|U+05582喂|
+U+09901餁|U+0996A饪|
+U+09908餈|U+07CCD糍|
+U+09918餘|U+09980馀|U+04F59余|
+U+09939餹|U+07CD6糖|
+U+0993B餻|U+07CD5糕|
+U+0993D餽|U+09988馈|
+U+0994D饍|U+081B3膳|
+U+09951饑|U+09965饥|
+U+0995D饝|U+0998D馍|
+U+099C8駈|U+09A71驱|
+U+099E1駡|U+09A82骂|
+U+099EE駮|U+09A73驳|
+U+09A10騐|U+09A8C验|
+U+09A23騣|U+09B03鬃|
+U+09A58驘|U+09AA1骡|
+U+09ABD骽|U+0817F腿|
+U+09ABE骾|U+09CA0鲠|
+U+09AC8髈|U+08180膀|
+U+09AE3髣|U+04EFF仿|
+U+09AE5髥|U+09AEF髯|
+U+09AF4髴|U+04F5B佛|
+U+09B00鬀|U+05243剃|
+U+09B09鬉|U+09B03鬃|
+U+09B26鬦|U+06597斗|
U+09B28鬨|U+054C4哄|
+U+09B2A鬪|U+06597斗|
+U+09B2D鬭|U+06597斗|
+U+09B30鬰|U+090C1郁|
+U+09B8E鮎|U+09C87鲇|
+U+09B9D鮝|U+09C9E鲞|
+U+09BF0鯰|U+09CB6鲶|U+09C87鲇|
+U+09C10鰐|U+09CC4鳄|
+U+09C1B鰛|U+09CC1鳁|
+U+09C2E鰮|U+09CC1鳁|
+U+09CEC鳬|U+051EB凫|
+U+09D08鴈|U+096C1雁|
+U+09D5E鵞|U+09E45鹅|
U+09D70鵰|U+096D5雕|U+05F6B彫|
+U+09D76鵶|U+09E26鸦|
+U+09DC0鷀|U+09E5A鹚|
+U+09DC4鷄|U+09E21鸡|
+U+09DF0鷰|U+071D5燕|
+U+09DF4鷴|U+09E47鹇|
+U+09E0E鸎|U+083BA莺|
+U+09E7B鹻|U+078B1碱|
U+09E7C鹼|U+078B1碱|U+07877硷|
U+09EAA麪|U+09762面|
U+09EAB麫|U+09762面|
U+09EAF麯|U+066F2曲|
-U+09EB4麴|U+066F2曲|U+09EB4麴|
+U+09EB4麴|U+09EB9麹|U+066F2曲|
+U+09EB5麵|U+09762面|U+09EBA麺|
U+09EF4黴|U+09709霉|
+U+09F03鼃|U+086D9蛙|
+U+09F07鼇|U+09CCC鳌|
+U+09F08鼈|U+09CD6鳖|
U+09F15鼕|U+051AC冬|
-U+09F47齇|U+09F44齄|
U+09F63齣|U+051FA出|
-U+09F91龑|U+04DAE䶮|
+U+09F67齧|U+0556E啮|
+U+09F69齩|U+054AC咬|
+U+201EE𠇮|U+0547D命|
+U+20302𠌂|U+04F1E伞|
+U+20542𠕂|U+0518D再|
+U+20545𠕅|U+0518D再|
+U+20587𠖇|U+051A5冥|
+U+207B0𠞰|U+0527F剿|
+U+20ABE𠪾|U+05386历|
+U+20D1F𠴟|U+054A9咩|
+U+20EF3𠻳|U+055FD嗽|
+U+21428𡐨|U+091CE野|
+U+21681𡚁|U+05F0A弊|
+U+21A18𡨘|U+051A4冤|
+U+21A25𡨥|U+05BC7寇|
+U+21B36𡬶|U+05BFB寻|
U+21ED5𡻕|U+05C81岁|
-U+298F5𩣵|U+299FB𩧻|
+U+22B38𢬸|U+062EC括|
+U+22B4F𢭏|U+06363捣|
+U+22BA5𢮥|U+064CD操|
+U+22DEC𢷬|U+06363捣|
+U+2365C𣙜|U+069B7榷|
+U+242EE𤋮|U+07199熙|
+U+24A0F𤨏|U+07410琐|
+U+24C1C𤰜|U+04EA9亩|
+U+24C48𤱈|U+04EA9亩|
+U+24C4A𤱊|U+07559留|
+U+24EA5𤺥|U+07629瘩|
+U+25128𥄨|U+07785瞅|
+U+25997𥦗|U+07A97窗|
+U+25CBB𥲻|U+07E82纂|
+U+260B3𦂳|U+07D27紧|
+U+260C2𦃂|U+07D27紧|
+U+26246𦉆|U+078B4碴|
+U+262B1𦊱|U+06302挂|
+U+26351𦍑|U+07F8C羌|
+U+26548𦕈|U+07707眇|
+U+26A99𦪙|U+0447D䑽|
+U+26D4F𦵏|U+0846C葬|
+U+28F7B𨽻|U+096B6隶|
+U+294D0𩓐|U+08116脖|
+U+295D7𩗗|U+098D3飓| \ No newline at end of file
diff --git a/maintenance/language/zhtable/trad2simp_noconvert.manual b/maintenance/language/zhtable/trad2simp_noconvert.manual
index 052bab69..15192eaf 100644
--- a/maintenance/language/zhtable/trad2simp_noconvert.manual
+++ b/maintenance/language/zhtable/trad2simp_noconvert.manual
@@ -3,3 +3,12 @@
=>"獃"
𫚭
+咤
+吒
+曏
+痾
+枒
+幺
+苹
+厘
+𫍟 \ No newline at end of file
diff --git a/maintenance/language/zhtable/tradphrases.manual b/maintenance/language/zhtable/tradphrases.manual
index 69b2c832..4d313b42 100644
--- a/maintenance/language/zhtable/tradphrases.manual
+++ b/maintenance/language/zhtable/tradphrases.manual
@@ -20,16 +20,6 @@
7隻
8隻
9隻
-0隻
-1隻
-2隻
-3隻
-4隻
-5隻
-6隻
-7隻
-8隻
-9隻
0只支援
1只支援
2只支援
@@ -58,36 +48,46 @@
至多
頂多
多隻
-0多隻
-0多隻
-零多隻
-十多隻
-百多隻
-千多隻
-萬多隻
-億多隻
這只能
這只可
這只在
這只是
這只需
+這只須
這只會
這只用
+這只比
+這只限
+這只應
+這只不過
+這只包括
那只能
那只可
那只在
那只是
那只需
+那只須
那只會
那只用
+那只怕
+那只比
+那只限
+那只應
+那只不過
+那只包括
多只能
多只可
多只在
多只有
多只是
多只需
+多只須
多只會
多只用
+多只含
+多只比
+多只限
+多只包括
大只能
大只可
大只在
@@ -102,6 +102,23 @@
小只是
小只需
小只會
+數隻
+數只能
+數只可
+數只在
+數只有
+數只是
+數只需
+數只須
+數只會
+數只含
+數只比
+數只限
+數只應
+數只包括
+人數只
+參數只
+總數只
隻身
形單影隻
首隻
@@ -134,24 +151,12 @@
7天後
8天後
9天後
-0天後
-1天後
-2天後
-3天後
-4天後
-5天後
-6天後
-7天後
-8天後
-9天後
天後來
天後天
天後半
後印
萬象
-並存著
乾絲
-乾著急
乾魚
魚乾
乾梅
@@ -176,7 +181,6 @@
淚乾
沒幹
沒乾沒淨
-枝不得大於榦
杯乾
打幹
打乾噦
@@ -249,7 +253,6 @@
乾咽
乾和
幹吏
-乾吊著下巴
乾號
乾颱
乾卦
@@ -271,136 +274,23 @@
乾麵
乾柴
枯乾
-晒乾
+曬乾
顛乾倒坤
強幹
-乾著
乾眼
幹的停當
+井幹
乾巴
偎乾
眼乾
-偷雞不著
-几絲
-划著
-划著走
-別著
-刮著
-千絲萬縷
-參合
-參考價值
-參與
-參與人員
-參與制
-參與感
-參與者
-參觀團
-參觀團體
-參閱
-吃著不盡
-合著
-吊帶褲
-吊掛著
-吊著
-吊褲
-吊褲帶
-向著
-嚴絲合縫
-回絲
-回著
-塗著
-壟斷價格
-壟斷資產
-壟斷集團
-姜絲
-帶團參加
-干著急
-幾絲
-彆著
-怎麼著
-憑藉著
-憑藉
-接著說
-擔著
-擔負著
-敘說著
-斗轉參橫
-旋繞著
-板著臉
-正當著
-沈著
-沖著
-派團參加
-涂著
-湊合著
-瀰漫著
-為著
-煙斗絲
-率團參加
-畫著
-當著
-發著
-直接參与
-睡著了
-秋褲
-積极參与
-積极參加
-簽著
-系著
-絕對參照
-絲來線去
-絲布
-絲板
-絲瓜布
-絲絨布
-絲線
-絲織廠
-絲蟲
-緊繃著
-繃著
-繃著臉
-繃著臉兒
-繫著
-罵著
肉絲麵
-背向著
-菌絲體
-著兒
-著書立說
-著色軟體
-著重指出
-著錄
-著錄規則
薑絲
-藉著
-蘊含著
-蘊涵著
-衝著
-被覆著
-覆著
-覆蓋著
反覆
-訴說著
-說著
-請參閱
-謝絕參觀
-豎著
豐濱
豐濱鄉
豐度
-象徵著
-這麼著
-那麼著
-配合著
-醞釀著
-錄著
-鍛鍊出
-關係著
雞絲
雞絲麵
-面朝著
-面臨著
-颳著
髮絲
斷髮
不斷發
@@ -411,9 +301,6 @@
打斷發
披頭散髮
髮禁
-鬥著
-鬧著玩兒
-鯰魚
世界盃
其次辟地
開闢
@@ -451,20 +338,15 @@
一彆頭
并州
併兼
-併產
併骨
併網
併線
併流
逼併
併名
-併當
併火
併肩子
-併除
併疊
-忙併
-打併
簡併
並發表
並發現
@@ -481,21 +363,8 @@
數罪併罰
催併
狂併潮
-薝蔔
提摩太後書
-當家纔知柴米價
-剛纔一載
裏海
-骨頭裡掙出來的錢纔做得肉
-恰纔
-遠縣纔至
-別日南鴻纔北去
-然身死纔數月耳
-纔得兩年
-纔則
-纔此
-你纔子發昏
-纔可容顏十五餘
不採
披榛採蘭
謬採虛聲
@@ -558,28 +427,7 @@
官地為寀
寮寀
蔘綏
-個人# “個人參數”不是“個人蔘數”
-人蔘
蕭蔘
-人參與
-人參選
-人參觀
-人參考
-人參展
-人參加
-人參議
-人參謀
-人參酌
-人參照
-人參政
-人參戰
-人參拜
-人參閱
-人參禪
-人參贊
-人參見
-人參透
-人參看
東衝西突
天克地衝
六衝
@@ -665,13 +513,6 @@
丑表功
公孫丑
么麼小丑
-齣電影
-齣電視
-齣動畫
-齣節目
-齣卡通
-齣戲
-齣劇
平平當當
滿滿當當
當當丁丁
@@ -680,7 +521,6 @@
快快當當
咯噹
啷噹
-党參
党進
党太尉
党項
@@ -739,6 +579,67 @@
髮屋
櫛髮工
鬒髮
+令人髮指
+爆發指數
+開發
+剪其髮
+吐哺捉髮
+吐哺握髮
+含齒戴髮
+大金髮苔
+寸髮千金
+心長髮短
+戴髮含齒
+拔髮
+拔鬚
+揪髮
+揪鬚
+整髮用品
+斷髮文身
+滿頭洋髮
+燙一個髮
+燙一次髮
+燙個髮
+燙完髮
+燙次髮
+理一個髮
+理一次髮
+理個髮
+理完髮
+理次髮
+細如髮
+繫於一髮
+皮膚
+生華髮
+蒼髮
+被髮佯狂
+被髮入山
+被髮左衽
+被髮纓冠
+被髮陽狂
+身體髮膚
+髮光可鑑
+髮已霜白
+髮油
+髮為血之本
+髮網
+髮踊沖冠
+髮際
+黃髮
+齒落髮白
+長髮姑娘
+長髮公主
+長髮妹
+的髮小
+是髮小
+代理發行
+美髮店
+美髮館
+美髮師
+美髮學
+美髮業
+美髮沙龍
+美容美髮
模范棒棒堂
模范三軍
模范七棒
@@ -801,19 +702,6 @@
複流
反複製
複對數
-顛覆
-答覆
-覆沒
-覆亡
-覆水難收
-翻雲覆雨
-覆雨翻雲
-覆轍
-覆巢之下無完卵
-覆蓋
-覆命
-天翻地覆
-天覆地載
撥穀
扁擬穀盜蟲
不穀
@@ -909,6 +797,7 @@
言大而夸
睏覺
愛睏
+睏了
纍堆
纍紲
纍臣
@@ -920,9 +809,7 @@
澤滲灕而下降
裏勾外連
裏手
-水里鄉
水里溪
-水里濁水溪
二里頭
年歷史
西歷史
@@ -939,7 +826,7 @@
穆罕默德曆
大明曆
大曆
-台曆
+檯曆
太初曆
通曆
曆本
@@ -997,14 +884,12 @@
懞直
老懞
放懞掙
-矇著
矇聵
矇瞍
矇事
矇頭轉
矇松雨
藏矇歌兒
-矇著鍋兒
朦朧
濛濛細雨
濛汜
@@ -1049,7 +934,6 @@
小米麵
壯麵
吃板刀麵
-吃辣麵
扯麵
搋麵
重羅麵
@@ -1064,13 +948,20 @@
湯下麵
茶麵
麵糰
+北山索麵
+土索麵
+米麵
+椒麵
+掛麵
+臊子麵
+龍鬚麵
+油潑麵
+辣麵
+肉麵
+燴麵
+雲吞麵
冷面相
糞穢衊面
-湟潦生苹
-食野之苹
-苹縈
-青苹
-青蘋果
僕僕
有僕
冉有僕
@@ -1091,6 +982,8 @@
僮僕
金僕姑
僕婢
+惡僕
+從僕
樸實
樸訥
樸念仁
@@ -1152,10 +1045,29 @@
上簽字
上簽收
上簽寫
+上簽訂
+上簽定
+上簽署
+上簽發
+上簽約
+中簽名
+中簽字
+中簽收
+中簽寫
+中簽訂
+中簽定
+中簽署
+中簽發
+中簽約
下簽名
下簽字
下簽收
下簽寫
+下簽訂
+下簽定
+下簽署
+下簽發
+下簽約
犖确
磽确
确瘠
@@ -1186,6 +1098,7 @@
蒼朮
赤朮
朮赤
+博爾朮
髼鬆
皮鬆
濛鬆雨
@@ -1201,9 +1114,11 @@
鬆一口氣
鬆元音
鬆喉
+鬆化
囉囉囌囌
囉囌
骨罈
+菜罈
罈騞
餵驢
剪牡丹喂牛
@@ -1263,6 +1178,7 @@
鬱鬱不樂
鬱鬱寡歡
鬱鬱蔥蔥
+鬱鬱蒼蒼
鬱鬱而終
愿樸
愿而恭
@@ -1290,21 +1206,12 @@
种放
种師道
种師中
-後庄
-舊庄
正官庄
-龜山庄
-寶山庄
冬山庄
-員山庄
松山庄
厂部
-閤府
-佈道
-剪綵
衝量
衝車
-書獃子
相干
府干預
府干涉
@@ -1315,6 +1222,7 @@
一干人
未乾
未干涉
+未干預
抹乾
餅乾
拭乾
@@ -1356,8 +1264,6 @@
乾季
葡萄乾
提子乾
-蘿蔔乾
-蘋果乾
芒果乾
菠蘿乾
鳳梨乾
@@ -1376,7 +1282,7 @@
幹事
幹什麼
幹細胞
-悶著頭兒幹
+頭兒幹
配水幹管
繐幃飄井幹
站乾岸兒
@@ -1410,18 +1316,21 @@
二不稜登
有稜有角
威稜
-負債纍纍
-傷痕纍纍
+債纍纍
+果纍纍
+實纍纍
儒略曆
伊斯蘭曆
酒麴
-昇平
爾冬陞
澹臺
拜託
委託
輓曲
敬輓
+輓車
+輓輸
+輓辭
万俟
万旗
鬚鯨
@@ -1442,8 +1351,6 @@
叶韻
叶音
叶恭弘
-叶 恭弘
-叶 恭弘
於1
於2
於3
@@ -1454,16 +1361,6 @@
於8
於9
於0
-於1
-於2
-於3
-於4
-於5
-於6
-於7
-於8
-於9
-於0
於一
於二
於三
@@ -1478,7 +1375,6 @@
於夫羅
於梨華
置於
-佈於
散於
播於
國於
@@ -1635,8 +1531,6 @@
心於
集於
容於
-髒詞
-髒心
新紮
紙紮
紮鐵
@@ -1654,252 +1548,6 @@
百紮
千紮
萬紮
-佔1
-佔2
-佔3
-佔4
-佔5
-佔6
-佔7
-佔8
-佔9
-佔0
-佔1
-佔2
-佔3
-佔4
-佔5
-佔6
-佔7
-佔8
-佔9
-佔0
-佔零
-佔〇
-佔一
-佔二
-佔兩
-佔三
-佔四
-佔五
-佔六
-佔七
-佔八
-佔九
-佔十
-佔百
-佔千
-佔万
-佔億
-佔超過
-佔不足
-佔至少
-佔少
-佔至多
-佔半
-佔多
-佔大
-佔小
-佔中
-佔東
-佔西
-佔南
-佔北
-佔平均
-佔總
-獨佔鰲頭
-所佔
-市佔
-佔率
-市佔率
-佔市場
-佔世界
-佔全
-佔國內
-佔美
-佔台
-佔香
-佔澳
-佔加
-佔新
-佔馬
-佔印
-佔英
-佔法
-佔德
-佔葡
-佔俄
-佔蘇
-佔缺
-佔A
-佔B
-佔C
-佔D
-佔E
-佔F
-佔G
-佔H
-佔I
-佔J
-佔K
-佔L
-佔M
-佔N
-佔O
-佔P
-佔Q
-佔R
-佔S
-佔T
-佔U
-佔V
-佔W
-佔X
-佔Y
-佔Z
-佔a
-佔b
-佔c
-佔d
-佔e
-佔f
-佔g
-佔h
-佔i
-佔j
-佔k
-佔l
-佔m
-佔n
-佔o
-佔p
-佔q
-佔r
-佔s
-佔t
-佔u
-佔v
-佔w
-佔x
-佔y
-佔z
-佔A
-佔B
-佔C
-佔D
-佔E
-佔F
-佔G
-佔H
-佔I
-佔J
-佔K
-佔L
-佔M
-佔N
-佔O
-佔P
-佔Q
-佔R
-佔S
-佔T
-佔U
-佔V
-佔W
-佔X
-佔Y
-佔Z
-佔a
-佔b
-佔c
-佔d
-佔e
-佔f
-佔g
-佔h
-佔i
-佔j
-佔k
-佔l
-佔m
-佔n
-佔o
-佔p
-佔q
-佔r
-佔s
-佔t
-佔u
-佔v
-佔w
-佔x
-佔y
-佔z
-佔不佔
-不佔
-佔了
-佔穩
-佔資源
-佔人便宜
-佔頭
-佔道
-佔屋
-佔網
-佔床
-佔座
-佔分
-佔飯
-佔個位
-佔後
-佔著
-佔山
-馬占山
-佔比
-佔停車
-佔哺乳
-佔下風
-少佔
-多佔
-費佔
-佔查
-佔壓
-佔優
-佔劣
-穩佔
-佔整體
-佔局部
-日佔
-美佔
-英佔
-德佔
-法佔
-俄佔
-葡佔
-西佔
-奧佔
-意佔
-義佔
-地佔
-佔場
-佔耕
-狂佔
-徵佔
-圈佔
-已佔
-佔囁
-佔主
-佔次
-寡佔
-佔去
-將佔
-將占卜
-要佔
-要占卜
-會佔
-會占卜
-占卜
-夢有五不占
-占有五不驗
誌異
筑前
筑後
@@ -2012,12 +1660,8 @@
鐘表面
南京鐘
南京鐘錶
-造鐘錶
造鐘
-九龍表行
-鐘錶行
鐘行
-錶行
小型鐘表面
小型鐘面
小型鐘錶
@@ -2054,12 +1698,8 @@
他鐘
寺鐘
座鐘
-盜鐘
大笨鐘
大本鐘
-鐘錶歷史
-錶的歷史
-鐘錶的歷史
點多鐘
點半鐘
分多鐘
@@ -2070,9 +1710,6 @@
操作鐘
南屏晚鐘
敲鐘
-瞧著鐘
-瞧著鐘錶
-瞧著錶
警報鐘
猶如鐘
猶如鐘錶
@@ -2085,10 +1722,7 @@
鐘差
任何鐘錶
任何鐘
-任何錶
-任何表示
-任何表達
-任何表演
+手錶
選手表現
選手表達
選手表示
@@ -2104,8 +1738,6 @@
鐘速
紅鐘
各類鐘
-打著鐘
-鐘意
衛星鐘
該鐘
錶轉
@@ -2119,23 +1751,14 @@
逆鐘
拂鐘無聲
鐘不空則啞
-看著鐘錶
-看著鐘
-看著錶
晚鐘
潛水鐘錶
潛水鐘
潛水錶
樂器鐘
鐘左右
-埋頭尋鐘錶
-埋頭尋鐘
-埋頭尋錶
鐘陳列
驚鐘
-望著鐘錶
-望著鐘
-望著錶
鐘錶停
鐘停
銫鐘
@@ -2162,10 +1785,6 @@
華嚴鐘
懷鐘
生物鐘
-鐘錶的
-錶的嘀嗒
-的鐘錶
-嘀嗒的錶
鐘好
鐘太
鐘不
@@ -2185,9 +1804,18 @@
舊錶
台鐘
鐘響
-叩鐘
計時錶
防水錶
+顯示表格
+顯示表頭
+顯示表面
+顯示表達
+顯示表明
+顯示表現
+顯示表示
+電錶
+水錶
+咪錶
射鵰
神鵰
神雕像
@@ -2200,8 +1828,7 @@
村落發
蛇髮女妖
畢生發展
-對華發動
-中美發表
+對華發
尸魂界
樹樑
屋樑
@@ -2209,152 +1836,20 @@
柱樑
下樑
上梁山
-昇陽
僥倖
夏遊
秋遊
冬遊
+傲遊 # 浏览器名
+網遊
+桌遊
+遊輪
+遊牧
+遊蕩
+遊刃
黑奴籲天錄
林郁方
讚歌
-編餘
-餘墨
-唾餘
-餘韻
-歸餘
-公餘
-寬餘
-餘糧
-餘慶
-餘殃
-餘燼
-劫餘
-結餘
-燼餘
-淨餘
-餕餘
-餘暉
-餘輝
-羨餘
-餘悸
-心餘
-刑餘
-緒餘
-血餘
-朱慶餘
-諸餘
-餘論
-茶餘
-廚餘
-餘裕
-餘氣
-詩餘
-詞餘
-餘僇
-餘辜
-餘責
-餘罪
-無餘
-耳餘
-餘烈
-餘思
-鹽餘
-嬴餘
-贏餘
-王餘魚
-紆餘
-餘波
-餘杯
-餘步
-餘妙
-餘音
-餘聲
-餘明
-餘風
-餘黨
-餘毒
-餘桃
-餘桶
-餘利
-餘瀝
-餘膏
-餘光
-餘杭
-餘竅
-餘缺
-餘暇
-餘閒
-餘羨
-餘響
-餘興
-餘蓄
-餘緒
-餘珍
-餘眾
-餘酲
-餘喘
-餘食
-餘熱
-餘刃
-餘閏
-餘存
-餘業
-餘姚
-餘蔭
-餘映
-餘外
-餘威
-餘味
-餘溫
-餘勇
-多餘
-剩餘
-餘生
-餘歡
-有餘
-一餘
-二餘
-兩餘
-三餘
-四餘
-五餘
-六餘
-七餘
-八餘
-九餘
-十餘
-百餘
-千餘
-萬餘
-億餘
-兆餘
-0餘
-1餘
-2餘
-3餘
-4餘
-5餘
-6餘
-7餘
-8餘
-9餘
-0餘
-1餘
-2餘
-3餘
-4餘
-5餘
-6餘
-7餘
-8餘
-9餘
-余姓
-余光生
-余光中
-余思敏
-余威德
-余子明
-余三勝
崑山
崑曲
崑腔
@@ -2362,36 +1857,19 @@
崑劇
崑蘇
蘇崑
-分布圖
一干家中
星期後
-不准你
-不准我
-不准他
-不准她
-不准它
-不准誰
-不准許
-准不准你
-准不准我
-准不准他
-准不准她
-准不准它
-准不准誰
-准不准許
依依不捨
戀戀不捨
窮追不捨
緊追不捨
鍥而不捨
稜登
-前言不答後語
繃扒弔拷
不弔
不通弔慶
陪弔
盆弔
-屁股大弔了心
撇弔
憑弔
門弔兒
@@ -2400,37 +1878,27 @@
搗鬼弔白
弔膀子
弔民
-弔民伐罪
弔奠
弔頭
弔古
-弔古尋幽
弔詭
-弔詭矜奇
弔客
弔拷
-弔拷繃扒
弔扣
弔賀迎送
弔鶴
弔喉
弔謊
弔祭
+弔恤
弔腳兒事
-弔頸
-弔橋
弔取
弔孝
弔紙
弔者大悅
-弔場
-弔書
弔詞
-弔死問孤
-弔死問疾
弔撒
弔喪
-弔喪問疾
弔腰撒跨
弔唁
弔宴
@@ -2439,10 +1907,7 @@
弔慰
弔文
弔問
-頭巾弔在水裡
-提心弔膽
弄鬼弔猴
-管人弔腳兒事
開弔
鶴弔
昊天不弔
@@ -2451,12 +1916,9 @@
吉凶慶弔
蟣蝨相弔
祭弔
-祭弔文
-青蠅弔客
慶弔
-形影相弔
+影相弔
哀弔
-一弔
唁弔
於水
安於
@@ -2534,7 +1996,6 @@
源於
且於
長於
-短於
現於
較於
於之
@@ -2545,9 +2006,10 @@
晚於
感於
鬼谷子
+谷子敬
+洪谷子
于美人
緊緻
-冗餘
曰云
若干
徵婚
@@ -2614,7 +2076,7 @@
鬥風
鬥雪紅
鬥暴
-鬥閑氣
+鬥閒氣
龍鬥虎傷
殷師牛鬥
二虎相鬥
@@ -2638,82 +2100,7 @@
藏歷史
頁面
方面
-表面
面條目
-課餘
-節餘
-盈餘
-病餘
-餘地
-餘力
-餘子
-餘事
-扶餘國
-腐餘
-富餘
-之餘
-餘澤
-流風餘俗
-流風餘韻
-淋餘土
-餘一
-餘二
-餘三
-餘四
-餘五
-餘六
-餘七
-餘八
-餘九
-餘十
-零餘
-〇餘
-餘零
-餘〇
-餘1
-餘2
-餘3
-餘4
-餘5
-餘6
-餘7
-餘8
-餘9
-餘0
-餘1
-餘2
-餘3
-餘4
-餘5
-餘6
-餘7
-餘8
-餘9
-餘0
-餘數
-其餘
-尸居餘氣
-賸餘
-餘孽
-殘餘
-業餘
-餘割
-餘款
-餘角
-餘切
-餘霞
-餘下
-餘弦
-餘震
-餘貾
-餘額
-禹餘糧
-餘人
-編余
-病余
-餘俗
-餘倍
-同餘
大讚
唄讚
褒讚
@@ -2782,42 +2169,7 @@
本徵
船鐘
黃鈺筑
-齊莊
-鴻案相莊
-項莊
-韋莊
-鍋莊
-鄭莊公
-通莊
-蒙莊
-端莊
-票莊
-矜莊
-楚莊問鼎
-楚莊絕纓
-整莊
-打路莊板
-莊騷
-莊語
-莊舄越吟
-莊房
-莊客
-莊農
-平泉莊
-布莊
香山庄
-寶莊
-坐莊
-周莊王
-發莊
-卞莊
-包莊
-剔莊貨
-劉克莊
-冷莊子
-石家莊
-卞莊子
-新莊市
當準
憑準
沒準
@@ -2838,7 +2190,6 @@
三準
鵝準
有準
-崑崙
鎌倉
請君入甕
甕安
@@ -2849,8 +2200,39 @@
癒合
槓桿
宣洩
+鑑別
+鑑察
+鑑定
+鑑戒
+鑑諒
+鑑賞
+鑑於
+鑑證
+鑑湖
+鑑識
+鑑藏
+鑑往知來
+品鑑
+評鑑
+可鑑
+為鑑
+之鑑
+鑑古
+明鑑
+寶鑑
+破鑑
+年鑑
圖鑑
-諮詢
+通鑑
+綱鑑
+鸞鑑
+借鑑
+龜鑑
+衡鑑
+史鑑
+殷鑑
+印鑑
+王鑑
勳章
張勳
趙治勳
@@ -2871,7 +2253,9 @@
兇槍
很兇
兇巴巴
-行兇前
+頂兇
+太兇
+好兇
凝鍊
鍊貧
鍊度
@@ -2968,30 +2352,8 @@
母醜
一齣子
齣兒
-賣獃
-發獃
-大獃
-獃獃
-獃等
-獃頭
-獃腦
-獃根
-獃磕
-獃憨獃
-獃話
-獃氣
-獃想
-獃性
-獃滯
-獃著
-獃痴
獃串了皮
-獃事
-獃人
-獃子
-好獃
占便宜的是獃
-阿獃
丰標
丰姿
丰韻
@@ -3002,56 +2364,6 @@
撲鼕鼕
普鼕鼕
鼕鼕鼓
-令人髮指
-爆發指數
-開發
-剪其髮
-吐哺捉髮
-吐哺握髮
-含齒戴髮
-大金髮苔
-寸髮千金
-心長髮短
-戴髮含齒
-拔髮
-拔鬚
-揪髮
-揪鬚
-整髮用品
-斷髮文身
-滿頭洋髮
-燙一個髮
-燙一次髮
-燙個髮
-燙完髮
-燙次髮
-理一個髮
-理一次髮
-理個髮
-理完髮
-理次髮
-細如髮
-繫於一髮
-膚髮
-皮膚
-生華髮
-蒼髮
-被髮佯狂
-被髮入山
-被髮左衽
-被髮纓冠
-被髮陽狂
-身體髮膚
-髒髮
-髮光可鑑
-髮已霜白
-髮油
-髮為血之本
-髮網
-髮踊沖冠
-髮際
-黃髮
-齒落髮白
剷頭
剷刈
口燥唇乾
@@ -3076,8 +2388,6 @@
對表揚
對表中
對表明
-不準確
-並不準確
一伙頭
一伙食
一半只
@@ -3089,7 +2399,6 @@
萬一只
上面糊
不克自制
-不准沒
不加自制
不占凶吉
不占卜
@@ -3193,7 +2502,10 @@
台子女
台子孫
台布景
-台面前
+台州
+台風穩健
+穩健的台風
+台風獎
合府上
後面店
向往常
@@ -3212,9 +2524,6 @@
好斗篷
好斗膽
好斗蓬
-家具體
-家具備
-家具有
小几
尸利
尸祿
@@ -3359,12 +2668,11 @@
面包涵
面包管
面包羅
-面包著
面包藏
面包裝
面包裹
面包起
-面店舖
+面店鋪
面粉碎
面粉紅
面食麵
@@ -3392,12 +2700,9 @@
恕乏价催
悲筑
折子戲
-揮杆
搤肮拊背
文采郁郁
-木杆
洪适
-球杆
腊之以為餌
腊毒
蜡月
@@ -3406,83 +2711,14 @@
宜云
貴价
郁郁菲菲
-馬杆
-造麯
-麴生
-麴秀才
-麴塵
-麴櫱
-大麴
-黃麴毒素
-酒醴麴櫱
-麴道士
-麴錢
-麴車
-麴院
-鼠麴草
不乾不淨
生發生
必須
須根據
·范
-、剋制
-,剋制
-。剋制
-!剋制
-?剋制
-;剋制
-:剋制
-不剋制
-也剋制
-了剋制
-他剋制
-們剋制
-剋制不了
-剋制不住
-力剋制
-力求剋制
-可以剋制
-和剋制
-在剋制
-地剋制
-夠剋制
-她剋制
-你剋制
-您剋制
-就剋制
-彼此剋制
-得剋制
-快剋制
-想剋制
-意剋制
-應剋制
-我剋制
-才剋制
-於剋制
-易剋制
-無法剋制
-的剋制
-盡量剋制
-而剋制
-能剋制
-與剋制
-著剋制
-要剋制
-軍隊剋制
-空投佈雷
-火箭佈雷
-海灣佈雷
-空中佈雷
-海上佈雷
-佈雷的
-佈雷,
-佈雷、
-佈雷。
-佈雷;
-佈雷艦
-佈雷艇
-佈雷速度
-佈雷封鎖
+剋剝
+科尼亞克期
+馬斯垂克期
滿拚自盡
拚生盡死
拚卻
@@ -3529,12 +2765,8 @@
范文藤
范文虎
范文照
-發表
乾重
-若干
鈎心鬥角
-若干
-乾重
全面包圍
全面包裹
機械系
@@ -3542,19 +2774,8 @@
心理
複分解
鹰鵰
-叱咤903
-叱咤MY903
-叱咤My903
-叱咤樂壇
-叱咤咤
-叱咤叱咤叱咤咤
-叱咤叱叱咤
-正在叱咤
-空餘
-變髒
天地志狼
薴烯
-阿斯圖里亞斯
雙折射
心繫家
心繫國
@@ -3603,7 +2824,6 @@
心繫病
心繫故
心繫哪
-心繫中
心繫英
心繫美
心繫日
@@ -3668,7 +2888,9 @@
心繫夫
心繫女
心繫子
-心繫著
+繫鞋帶
+繫船
+繫着
重回
挑大樑
扛大樑
@@ -3677,15 +2899,17 @@
限制
控制
製取
-第四出局
心臟
肝臟
脾臟
肺臟
腎臟
-參與
浮誇
-星巴克
+誇人
+誇姣
+誇容
+誇毗
+誇麗
于謙
于寘
淳于
@@ -3717,25 +2941,19 @@
電子表格
雪裡紅
雪裡蕻
+樹林裡
+叢林裡
森林裡
-日子裡
-故事裡
-領域裡
-時間裡
-深淵裡
-醫院裡
-春假裡
-暑假裡
-秋假裡
-寒假裡
-春天裡
-夏天裡
-秋天裡
-冬天裡
-春日裡
-夏日裡
-秋日裡
-冬日裡
+水裡
+子裡
+事裡
+域裡
+間裡
+淵裡
+院裡
+假裡
+天裡
+日裡
嘴裡
心裡
皮裡陽秋
@@ -3745,9 +2963,109 @@
裡面
這裡
中文裡
-山洞裡
-世界裡
+洞裡
+界裡
眼睛裡
+百科裡
+歷史裡
+戲裡
+作品裡
+專輯裡
+年代裡
+棺材裡
+假里白
+天里村
+上天里
+天里昂
+人生天里
+白子里
+朴子里
+翁子里
+田子里
+部子里
+曹子里
+埔子里
+廍子里
+廓子里
+堡子里
+墨子里
+瑞城里
+金城里
+西湖里
+子里甲
+水里商工
+車里雅賓斯克
+漠裡
+集裡
+節目裡
+場裡
+世紀裡
+亞美尼亞曆
+注釋
+月面
+路面
+修杰楷
+修杰麟
+學裡
+獄裡
+館裡
+箱裡
+系列裡
+點裡
+點里程
+家裡
+忙裡偷閒
+夜晚裡
+參數裡
+集數裡
+人數裡
+總數裡
+代數裡
+函數裡
+素數裡
+質數裡
+自然數裡
+索馬里 # (及以下)避免里海=>裏海的轉換
+西西里
+騰格里
+阿里
+村里長
+峇里海
+里海崖
+里海茨
+里海大學
+孛里海
+布里海
+公里海
+地圖裡
+版圖裡
+配圖裡
+路圖裡
+線圖裡
+幅圖裡
+鏡圖裡
+從圖裡
+的圖裡
+圖裡的
+圖裡,
+深山裡
+冰山裡
+火山裡
+在山裡
+的山裡
+到山裡
+去山裡
+從山裡
+山裡的
+山裡有
+棉裡
+語裡
+方法裡
+語法裡
+看法裡
+憲法裡
+用法裡
+法裡,
首發
夸脫
誰幹的
@@ -3758,15 +3076,11 @@
字碼表
電碼表
科斗
-佔領
灕水
-點裡
-這只是
這只不
這只容
這只允
這只採
-這只用
有只是
有只不
有只容
@@ -3778,16 +3092,7 @@
包括
特别致
分别致
-會上簽訂
-會上簽署
-周一 # (及以下)避免“周一齣版”的錯誤
-周二
-周三
-周四
-周五
-周六
韶山沖
-總裁制
于丹
于樂
于冕
@@ -3876,9 +3181,7 @@
于風政
于鳳桐
于默奧
-于家堡
于爾岑
-于默奧
于貝爾
于爾根
于雙戈
@@ -3907,93 +3210,13 @@
涂醒哲
涂善妮
涂敏恆
-總裁制
故云
強制作用
鬱南
西米谷
-一出生
-二出生
-三出生
-四出生
-五出生
-六出生
-七出生
-八出生
-九出生
-十出生
-一出版
-二出版
-三出版
-四出版
-五出版
-六出版
-七出版
-八出版
-九出版
-十出版
-一出刊
-二出刊
-三出刊
-四出刊
-五出刊
-六出刊
-七出刊
-八出刊
-九出刊
-十出刊
-一出逃
-二出逃
-三出逃
-四出逃
-五出逃
-六出逃
-七出逃
-八出逃
-九出逃
-十出逃
-一出口
-二出口
-三出口
-四出口
-五出口
-六出口
-七出口
-八出口
-九出口
-十出口
-一出祁山
-二出祁山
-三出祁山
-四出祁山
-五出祁山
-六出祁山
-七出祁山
-八出祁山
-九出祁山
-十出祁山
鬱林
饑荒
免徵
-亞美尼亞曆
-百科裡
-歷史裡
-戲裡
-作品裡
-專輯裡
-年代裡
-棺材裡
-注釋
-月面
-路面
-修杰楷
-修杰麟
-學裡
-獄裡
-館裡
-箱裡
-系列裡
-村子裡
艷后
廢后
妖后
@@ -4017,7 +3240,8 @@
后街
后羿
后稷
-后座
+仙后座
+六樓后座
后平路
后安路
后土
@@ -4050,37 +3274,29 @@
伊里布
劃入
中庄子
-埔裏社撫墾局
+埔裏社
懸掛
僱傭
四捨六入
宿舍
+校舍
會干擾
-代表
高清愿
瓷製
竹製
絲製
莜麵
-劃入
簡筑翎
楊雅筑
魔杰座
杰威爾音樂
彭于晏
尸羅精舍
-索馬里 # (及以下)避免里海=>裏海的轉換
-西西里
-騰格里
-阿里
-村里長
進制
黃詩杰
-陳冲
何杰
劉佳怜
于小惠
-于品海
于耘婕
于洋
于澄
@@ -4089,7 +3305,6 @@
于國治
于楓
于熙珍
-涂善妮
邱于庭
熊杰
卜云吉
@@ -4097,11 +3312,8 @@
于飛島
代表
水無怜奈
-傲遊 # 浏览器名
-夏于喬
賭后
-后海灣
-立后綜
+山仔后
甲后路
劉芸后
謝華后
@@ -4110,22 +3322,18 @@
聖后
陳有后
許虬
-網遊
狄志杰
伊適杰
于冠華
-于台煙
于雲鶴
于忠肅集
于友澤
于和偉
于來山
-于樂
于天龍
于謹
于榮光
電波鐘
-余三勝
掛名
啟發式
舞后
@@ -4141,16 +3349,6 @@
7年
8年
9年
-0年
-1年
-2年
-3年
-4年
-5年
-6年
-7年
-8年
-9年
〇年
零年
一年
@@ -4179,16 +3377,6 @@
7周後
8周後
9周後
-0周後
-1周後
-2周後
-3周後
-4周後
-5周後
-6周後
-7周後
-8周後
-9周後
零周後
〇周後
一周後
@@ -4231,6 +3419,10 @@
于鬯
于仲文
于再清
+茅于軾
+張樂于張徐
+鮮于樞
+于寶軒
于震
於震前
於震后
@@ -4247,66 +3439,351 @@
划行
划算
總裁制
+仲裁制
+獨裁制
恒生
嚴云農
手裏劍
-秦莊襄王
伊東怜
衛後莊公
-餘量
並行
郁郁青青
協防
-對表格
-對表示
-對表達
-對表演
-對表明
了然後
戴表元
-張樂于張徐
余力為
葉叶琴
-万俟
幾個
澀谷區
-協調
-選手
併發症
併發重症
併發模式
併發型模式
-金色長髮
-紅色長髮
-一頭長髮
+色長髮
+頭長髮
的長髮
-黑色長髮
-前天
-昨天
-今天
-明天
後天
-數學家
-科學家
-物理學家
-化學家
-生物學家
-天文學家
+學家
游離
-子晳
紅后假說
書面
不只
高涌泉
-請求
-考試
-測試
-筆試
-口試
-冰冷
王田里
后姓
-台州
田庄英雄
計劃
抑制劑
+党姓
+党家
+种丹妮
+當當網
+縴繩
+佣金
+佣錢
+佣鈿
+回佣
+蕓薹
+宋王臺
+臺佟
+臺靜農
+改採
+林鵞峰
+沙羡
+最多只
+大多只
+至多只
+只影響
+測不準
+說不準
+對不準
+量不準
+準不準
+音不準
+預報不準
+時間不準
+不太準
+非常準
+很準
+萬曆
+永曆
+囓蟲
+勳勞
+勳績
+勳爵
+勳業
+授勳
+奇勳
+功勳
+蝎虎
+磨蝎
+鬥劍
+激鬥
+政鬥
+沈海蓉
+方志恒
+古蹟
+瀋撫
+賦范
+騰衝
+沖天
+豐臺
+陽穀
+蒸乾
+太醜
+御製
+合併
+聖人曆
+电影後
+封為后
+皮托管
+白面包青天
+天神之后
+栗栖溪
+羅馬曆
+羅馬歷史
+羅馬歷代
+你誇
+誇你
+誇我
+誇他
+誇她
+誇了
+被誇
+誇辯
+誇大
+誇誕
+誇官
+誇口
+誇誇其談
+誇海口
+誇獎
+誇強說會
+誇下海口
+誇詡
+誇張
+誇示
+誇飾
+誇勝道強
+誇說
+誇才
+誇耀
+矜誇
+誇能
+自誇
+誇稱
+誇讚
+更加注
+繼承制
+布穀鳥
+黎克特制
+筆桿
+袋桿
+槍桿
+秤桿
+兩桿
+桿菌
+桿秤
+桿槍
+四桿鐵筆
+徒杠
+杠梁
+杠轂
+杠人
+石杠
+墨瀋
+米瀋
+拾瀋
+乾物
+姦污
+託兒
+同人誌
+文學誌
+衝着
+確係
+乃係
+開山辟谷
+穀祿
+製衣
+巨製
+不捲
+漫捲
+捲地
+捲葉蛾
+捲尾猴
+捲積雲
+窗簾
+吉徵
+凶徵
+臟腑
+臟胸
+弄髒胸
+腸臟
+養臟
+膵臟
+驚慄
+支配慾
+利慾
+悽美
+滷煮
+滷蝦
+滷鴨
+滷鵝
+滷牛
+滷五花
+滷子
+滷料
+滷豆
+滷了
+滷的
+滷好
+打滷
+滷麵
+烤滷
+錦滷
+汤滷
+浸滷
+石鐘
+石鐘山
+花葯
+聚葯雄蕊
+遺蹟
+開山闢谷
+受僱
+僱請
+僱車
+僱船
+米糰
+謹愿
+瞎矇
+里舖
+喧譁
+譁眾
+譁囂
+譁然
+譁噪
+譁笑
+譁變
+鼓譟
+譟詐
+蕩氣
+木籤
+薝蔔
+斗牛星
+告劄
+點劄
+嚮慕
+儘自
+憑閑
+倚閑
+踰閑
+閑邪
+摺檯
+球檯
+櫃檯
+吧檯
+賭檯
+坐檯
+妝檯
+餐檯
+工作檯
+辦公檯
+檯面上
+上檯面
+牴觸
+牴牾
+角牴
+扼肮
+搤肮
+嫩薑
+酸薑
+薑啤
+鹹濕
+騰湧
+草蓆
+竹蓆
+藤蓆
+涼蓆
+灘蓆
+麻將蓆
+裏水鎮
+被廢後
+蒸製
+體徵
+綜合徵
+价川
+商標准許
+批准確定
+御嶽山
+兩齣
+進兩出
+幾進幾出
+十出生
+十出頭
+十出擊
+十出家
+十出祁山
+0齣
+0出現
+0出線
+第一齣
+第二齣
+第三齣
+第四齣
+第五齣
+第六齣
+第七齣
+第八齣
+第九齣
+第一出現
+第一出線
+第二出線
+第三出局
+第四出局
+第五出局
+這齣
+這出現
+這出乎
+這出人
+這出生
+這出世
+這出身
+這出色
+這出版
+這出道
+本齣戲
+整齣戲
+一齣戲
+三齣戲
+一齣好戲
+一齣電影
+首齣電影
+多齣電影
+整齣電影
+一齣劇
+整齣劇
+一齣悲劇
+一齣喜劇
+捨入
+舍入口
+繫上了
+繫上頭
+繫上紅
+繫上黑
+繫上絲
+繫上繩
+繫上安全
+上繫上
+被繫上
+繫上,
+繫上。
+亂發生
+亂發脾氣
+秀發村
+秀發動
+秀發表
+秀發布
+秀發現
+秀發生
+秀發起
+秀發展 \ No newline at end of file
diff --git a/maintenance/language/zhtable/tradphrases_exclude.manual b/maintenance/language/zhtable/tradphrases_exclude.manual
index e6abb4e1..4a3613b6 100644
--- a/maintenance/language/zhtable/tradphrases_exclude.manual
+++ b/maintenance/language/zhtable/tradphrases_exclude.manual
@@ -27,7 +27,6 @@
弔架
弔桶
弔桿
-弔橋
弔燈
弔環
弔籃
@@ -54,11 +53,7 @@
饑餓
饑不擇食
饑荒
-憑藉
-藉故
-藉口
藉端
-藉詞
藉酒
蛋捲
行李捲
@@ -91,7 +86,6 @@
獃氣
獃子
獃頭獃腦
-儘量
希腊
腊肉
瞭如
@@ -301,7 +295,6 @@
光採
鍾錶
複原
-參与
浮夸
剋日
@@ -328,3 +321,345 @@
姦污
併發
衚衕
+轉檯
+檯子
+佣人
+佣工
+佣仆
+男佣
+女佣
+傢俱
+傢具
+華冑
+裔冑
+貴冑
+美髮
+癥狀
+癥候
+不準
+囓合
+囓齒類
+編製
+索麵
+專註
+鬥上
+古迹
+划了
+合并
+划出
+划到
+題籤
+克複
+意麵
+明裡
+華髮
+迴流
+採的
+複名
+看錶
+嚮應
+複電
+綵排
+綵帶
+綵樓
+綵牌樓
+綵球
+綵綢
+綵線
+綵船
+綵衣
+結綵
+戲綵娛親
+剪綵
+複檢
+黃曲霉
+佔有慾
+不佔
+佔上風
+佔下
+佔了
+佔位
+佔住
+佔佔
+佔便宜
+佔個
+佔優勢
+佔先
+佔光
+佔到
+佔去
+佔取
+佔在
+佔地
+佔多數
+佔好
+佔得
+佔掉
+佔據
+佔有
+佔滿
+佔為
+佔用
+佔畢
+佔盡
+佔線
+佔起
+佔過
+佔領
+佔頭籌
+佔高枝兒
+侵佔
+先佔
+分佔
+只佔
+強佔
+搶佔
+攻佔
+會佔
+照佔
+約佔
+連佔
+進佔
+還佔
+隱佔
+霸佔
+非佔不可
+鳩佔鵲巢
+占
+佔0
+佔1
+佔2
+佔3
+佔4
+佔5
+佔6
+佔7
+佔8
+佔9
+佔A
+佔B
+佔C
+佔D
+佔E
+佔F
+佔G
+佔H
+佔I
+佔J
+佔K
+佔L
+佔M
+佔N
+佔O
+佔P
+佔Q
+佔R
+佔S
+佔T
+佔U
+佔V
+佔W
+佔X
+佔Y
+佔Z
+佔〇
+佔一
+佔七
+佔三
+佔下風
+佔不佔
+佔不足
+佔世界
+佔中
+佔主
+佔九
+佔二
+佔五
+佔人便宜
+佔俄
+佔個位
+佔億
+佔優
+佔全
+佔兩
+佔八
+佔六
+佔分
+佔加
+佔劣
+佔北
+佔十
+佔千
+佔半
+佔南
+佔印
+佔台
+佔囁
+佔四
+佔國
+佔場
+佔壓
+佔多
+佔大
+佔小
+佔少
+佔局部
+佔屋
+佔山為
+佔市
+佔平均
+佔床
+佔座
+佔後
+佔德
+佔整
+佔新
+佔東
+佔查
+佔次
+佔比
+佔法
+佔澳
+佔率
+佔百
+佔網
+佔總
+佔缺
+佔美
+佔耕
+佔至多
+佔至少
+佔臺
+佔英
+佔萬
+佔葡
+佔蘇
+佔西
+佔資
+佔超過
+佔道
+佔零
+佔頭
+佔香
+佔馬
+俄佔
+圈佔
+地佔
+多佔
+奧佔
+寡佔
+將佔
+少佔
+已佔
+市佔
+徵佔
+德佔
+意佔
+所佔
+日佔
+法佔
+狂佔
+獨佔
+穩佔
+美佔
+義佔
+英佔
+葡佔
+西佔
+要佔
+費佔
+標準桿
+單杠
+杠子
+杠鈴
+經濟杠桿
+高低杠
+陞官
+姦汙
+興緻
+景緻
+別緻
+雅緻
+崑
+表
+錶
+小夥子
+夸父
+夸特
+夸脫
+心臟痲痹
+心臟麻痺
+悽涼
+悽悽
+悽豔
+悽切
+悽楚
+家裏
+利欲熏心
+遊離票
+遊離份子
+閑
+鍊鋼
+事迹
+痕迹
+遺迹
+僱員
+僱用
+霉素
+遊盪
+搖蕩
+激蕩
+動蕩
+跌蕩
+震蕩
+充饑
+儘力
+彈葯
+炸葯
+醫葯
+骯臟
+釐升
+蓆地
+晒
+窗檯
+和尚撞一天鍾
+製為
+裡布
+里布
+圖裡
+山裡
+複發
+照準
+四齣
+五齣
+六齣
+弔兒郎當
+髮小
+髮網
+修鍊
+麵線
+繫上
+清湯掛麵
+牛肉麵
+檯面
+庄
+複信
+複核
+三複
+來複
+匡複
+傾複
+墾複
+往複
+被複
+複仞年如
+複以百萬
+複位
+複合
+複員
+複壯
+複復
+複流
+複畝珍
+起複
+餘 \ No newline at end of file
diff --git a/maintenance/mergeMessageFileList.php b/maintenance/mergeMessageFileList.php
index 2a6f8a8b..b4914971 100644
--- a/maintenance/mergeMessageFileList.php
+++ b/maintenance/mergeMessageFileList.php
@@ -85,12 +85,24 @@ class MergeMessageFileList extends Maintenance {
if ( $extname == '.' || $extname == '..' || !is_dir( "$extdir/$extname" ) ) {
continue;
}
- $extfile = "{$extdir}/{$extname}/{$extname}.php";
- if ( file_exists( $extfile ) ) {
- $mmfl['setupFiles'][] = $extfile;
- } else {
+ $possibilities = array(
+ "$extdir/$extname/extension.json",
+ "$extdir/$extname/skin.json",
+ "$extdir/$extname/$extname.php"
+ );
+ $found = false;
+ foreach ( $possibilities as $extfile ) {
+ if ( file_exists( $extfile ) ) {
+ $mmfl['setupFiles'][] = $extfile;
+ $found = true;
+ break;
+ }
+ }
+
+ if ( !$found ) {
$this->hasError = true;
- $this->error( "Extension {$extname} in {$extdir} lacks expected {$extname}.php" );
+ $this->error( "Extension {$extname} in {$extdir} lacks expected entry point: " .
+ "extension.json, skin.json, or {$extname}.php." );
}
}
}
@@ -150,6 +162,7 @@ class MergeMessageFileList extends Maintenance {
require_once RUN_MAINTENANCE_IF_MAIN;
+$queue = array();
foreach ( $mmfl['setupFiles'] as $fileName ) {
if ( strval( $fileName ) === '' ) {
continue;
@@ -157,12 +170,24 @@ foreach ( $mmfl['setupFiles'] as $fileName ) {
if ( empty( $mmfl['quiet'] ) ) {
fwrite( STDERR, "Loading data from $fileName\n" );
}
- // Include the extension to update $wgExtensionMessagesFiles
- if ( !( include_once $fileName ) ) {
- fwrite( STDERR, "Unable to read $fileName\n" );
- exit( 1 );
+ // Using extension.json or skin.json
+ if ( substr( $fileName, -strlen( '.json' ) ) === '.json' ) {
+ $queue[$fileName] = 1;
+ } else {
+ require_once $fileName;
+ }
+}
+
+if ( $queue ) {
+ $registry = new ExtensionRegistry();
+ $data = $registry->readFromQueue( $queue );
+ foreach ( array( 'wgExtensionMessagesFiles', 'wgMessagesDirs' ) as $var ) {
+ if ( isset( $data['globals'][$var] ) ) {
+ $GLOBALS[$var] = array_merge( $data['globals'][$var], $GLOBALS[$var] );
+ }
}
}
+
fwrite( STDERR, "\n" );
$s =
"<" . "?php\n" .
diff --git a/maintenance/moveBatch.php b/maintenance/moveBatch.php
index 713753f2..a27a7726 100644
--- a/maintenance/moveBatch.php
+++ b/maintenance/moveBatch.php
@@ -103,10 +103,10 @@ class MoveBatch extends Maintenance {
$this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() );
$dbw->begin( __METHOD__ );
- $err = $source->moveTo( $dest, false, $reason, !$noredirects );
- if ( $err !== true ) {
- $msg = array_shift( $err[0] );
- $this->output( "\nFAILED: " . wfMessage( $msg, $err[0] )->text() );
+ $mp = new MovePage( $source, $dest );
+ $status = $mp->move( $wgUser, $reason, !$noredirects );
+ if ( !$status->isOK() ) {
+ $this->output( "\nFAILED: " . $status->getWikiText() );
}
$dbw->commit( __METHOD__ );
$this->output( "\n" );
diff --git a/maintenance/mssql/tables.sql b/maintenance/mssql/tables.sql
index b9cd7159..5b09ffdc 100644
--- a/maintenance/mssql/tables.sql
+++ b/maintenance/mssql/tables.sql
@@ -111,7 +111,6 @@ CREATE TABLE /*_*/page (
page_namespace INT NOT NULL,
page_title NVARCHAR(255) NOT NULL,
page_restrictions NVARCHAR(255) NOT NULL,
- page_counter BIGINT NOT NULL DEFAULT 0,
page_is_redirect BIT NOT NULL DEFAULT 0,
page_is_new BIT NOT NULL DEFAULT 0,
page_random real NOT NULL DEFAULT RAND(),
@@ -422,9 +421,6 @@ CREATE TABLE /*_*/site_stats (
-- The single row should contain 1 here.
ss_row_id int NOT NULL,
- -- Total number of page views, if hit counters are enabled.
- ss_total_views bigint default 0,
-
-- Total number of edits performed.
ss_total_edits bigint default 0,
@@ -453,18 +449,6 @@ CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
--
--- Stores an ID for every time any article is visited;
--- depending on $wgHitcounterUpdateFreq, it is
--- periodically cleared and the page_counter column
--- in the page table updated for all the articles
--- that have been visited.)
---
-CREATE TABLE /*_*/hitcounter (
- hc_id int NOT NULL
-);
-
-
---
-- The internet is full of jerks, alas. Sometimes it's handy
-- to block a vandal or troll account.
--
diff --git a/maintenance/mwdoc-filter.php b/maintenance/mwdoc-filter.php
index c80981b5..0cc7bde8 100644
--- a/maintenance/mwdoc-filter.php
+++ b/maintenance/mwdoc-filter.php
@@ -16,8 +16,33 @@ if ( PHP_SAPI != 'cli' ) {
}
$source = file_get_contents( $argv[1] );
-$regexp = '#\@var\s+([^\s]+)([^/]+)/\s+(var|public|protected|private)\s+(\$[^\s;=]+)#';
-$replac = '${2} */ ${3} ${1} ${4}';
+$regexp = '#'
+ . '\@var'
+ . '\s+'
+ // Type hint
+ . '([^\s]+)'
+ . '\s+'
+ // Any text or line(s) between type hint and '/' closing the comment
+ // (includes the star of "*/"). Descriptions containing a slash
+ // are not supported. Those will have to to be rewritten to have their
+ // description *before* the @var:
+ // /**
+ // * Description with / in it.
+ // * @var array
+ // */
+ // instead of:
+ // /**
+ // * @var array Description with / in it.
+ // */
+ . '([^/]+)'
+ . '/'
+ . '\s+'
+ . '(var|public|protected|private)'
+ . '\s+'
+ // Variable name
+ . '(\$[^\s;=]+)'
+ . '#';
+$replac = '${2}/ ${3} ${1} ${4}';
$source = preg_replace( $regexp, $replac, $source );
echo $source;
diff --git a/maintenance/mwdocgen.php b/maintenance/mwdocgen.php
index ee0ff017..49eae4a5 100644
--- a/maintenance/mwdocgen.php
+++ b/maintenance/mwdocgen.php
@@ -91,6 +91,7 @@ class MWDocGen extends Maintenance {
$this->template = $IP . '/maintenance/Doxyfile';
$this->excludes = array(
'vendor',
+ 'node_modules',
'images',
'static',
);
diff --git a/maintenance/namespaceDupes.php b/maintenance/namespaceDupes.php
index cbc389be..96e01fe4 100644
--- a/maintenance/namespaceDupes.php
+++ b/maintenance/namespaceDupes.php
@@ -39,28 +39,46 @@ class NamespaceConflictChecker extends Maintenance {
*/
protected $db;
+ private $resolvableCount = 0;
+ private $totalPages = 0;
+
public function __construct() {
parent::__construct();
$this->mDescription = "";
$this->addOption( 'fix', 'Attempt to automatically fix errors' );
- $this->addOption( 'suffix', "Dupes will be renamed with correct namespace with " .
+ $this->addOption( 'merge', "Instead of renaming conflicts, do a history merge with " .
+ "the correct title" );
+ $this->addOption( 'add-suffix', "Dupes will be renamed with correct namespace with " .
"<text> appended after the article name", false, true );
- $this->addOption( 'prefix', "Do an explicit check for the given title prefix " .
- "appended after the article name", false, true );
+ $this->addOption( 'add-prefix', "Dupes will be renamed with correct namespace with " .
+ "<text> prepended before the article name", false, true );
+ $this->addOption( 'source-pseudo-namespace', "Move all pages with the given source " .
+ "prefix (with an implied colon following it). If --dest-namespace is not specified, " .
+ "the colon will be replaced with a hyphen.",
+ false, true );
+ $this->addOption( 'dest-namespace', "In combination with --source-pseudo-namespace, " .
+ "specify the namespace ID of the destination.", false, true );
+ $this->addOption( 'move-talk', "If this is specified, pages in the Talk namespace that " .
+ "begin with a conflicting prefix will be renamed, for example " .
+ "Talk:File:Foo -> File_Talk:Foo" );
}
public function execute() {
$this->db = wfGetDB( DB_MASTER );
- $fix = $this->hasOption( 'fix' );
- $suffix = $this->getOption( 'suffix', '' );
- $prefix = $this->getOption( 'prefix', '' );
- $key = intval( $this->getOption( 'key', 0 ) );
-
- if ( $prefix ) {
- $retval = $this->checkPrefix( $key, $prefix, $fix, $suffix );
+ $options = array(
+ 'fix' => $this->hasOption( 'fix' ),
+ 'merge' => $this->hasOption( 'merge' ),
+ 'add-suffix' => $this->getOption( 'add-suffix', '' ),
+ 'add-prefix' => $this->getOption( 'add-prefix', '' ),
+ 'move-talk' => $this->hasOption( 'move-talk' ),
+ 'source-pseudo-namespace' => $this->getOption( 'source-pseudo-namespace', '' ),
+ 'dest-namespace' => intval( $this->getOption( 'dest-namespace', 0 ) ) );
+
+ if ( $options['source-pseudo-namespace'] !== '' ) {
+ $retval = $this->checkPrefix( $options );
} else {
- $retval = $this->checkAll( $fix, $suffix );
+ $retval = $this->checkAll( $options );
}
if ( $retval ) {
@@ -71,13 +89,13 @@ class NamespaceConflictChecker extends Maintenance {
}
/**
- * @todo Document
- * @param bool $fix Whether or not to fix broken entries
- * @param string $suffix Suffix to append to renamed articles
+ * Check all namespaces
+ *
+ * @param array $options Associative array of validated command-line options
*
* @return bool
*/
- private function checkAll( $fix, $suffix = '' ) {
+ private function checkAll( $options ) {
global $wgContLang, $wgNamespaceAliases, $wgCapitalLinks;
$spaces = array();
@@ -131,14 +149,31 @@ class NamespaceConflictChecker extends Maintenance {
}
}
- ksort( $spaces );
- asort( $spaces );
+ // Sort by namespace index, and if there are two with the same index,
+ // break the tie by sorting by name
+ $origSpaces = $spaces;
+ uksort( $spaces, function ( $a, $b ) use ( $origSpaces ) {
+ if ( $origSpaces[$a] < $origSpaces[$b] ) {
+ return -1;
+ } elseif ( $origSpaces[$a] > $origSpaces[$b] ) {
+ return 1;
+ } elseif ( $a < $b ) {
+ return -1;
+ } elseif ( $a > $b ) {
+ return 1;
+ } else {
+ return 0;
+ }
+ } );
$ok = true;
foreach ( $spaces as $name => $ns ) {
- $ok = $this->checkNamespace( $ns, $name, $fix, $suffix ) && $ok;
+ $ok = $this->checkNamespace( $ns, $name, $options ) && $ok;
}
+ $this->output( "{$this->totalPages} pages to fix, " .
+ "{$this->resolvableCount} were resolvable.\n" );
+
return $ok;
}
@@ -158,178 +193,273 @@ class NamespaceConflictChecker extends Maintenance {
}
/**
- * @todo Document
- * @param int $ns A namespace id
+ * Check a given prefix and try to move it into the given destination namespace
+ *
+ * @param int $ns Destination namespace id
* @param string $name
- * @param bool $fix Whether to fix broken entries
- * @param string $suffix Suffix to append to renamed articles
+ * @param array $options Associative array of validated command-line options
* @return bool
*/
- private function checkNamespace( $ns, $name, $fix, $suffix = '' ) {
- $conflicts = $this->getConflicts( $ns, $name );
- $count = count( $conflicts );
+ private function checkNamespace( $ns, $name, $options ) {
+ $targets = $this->getTargetList( $ns, $name, $options );
+ $count = $targets->numRows();
+ $this->totalPages += $count;
if ( $count == 0 ) {
return true;
}
+ $dryRunNote = $options['fix'] ? '' : ' DRY RUN ONLY';
+
$ok = true;
- foreach ( $conflicts as $row ) {
- $resolvable = $this->reportConflict( $row, $suffix );
- $ok = $ok && $resolvable;
- if ( $fix && ( $resolvable || $suffix != '' ) ) {
- $ok = $this->resolveConflict( $row, $resolvable, $suffix ) && $ok;
+ foreach ( $targets as $row ) {
+
+ // Find the new title and determine the action to take
+
+ $newTitle = $this->getDestinationTitle( $ns, $name, $row, $options );
+ $logStatus = false;
+ if ( !$newTitle ) {
+ $logStatus = 'invalid title';
+ $action = 'abort';
+ } elseif ( $newTitle->exists() ) {
+ if ( $options['merge'] ) {
+ if ( $this->canMerge( $row->page_id, $newTitle, $logStatus ) ) {
+ $action = 'merge';
+ } else {
+ $action = 'abort';
+ }
+ } elseif ( $options['add-prefix'] == '' && $options['add-suffix'] == '' ) {
+ $action = 'abort';
+ $logStatus = 'dest title exists and --add-prefix not specified';
+ } else {
+ $newTitle = $this->getAlternateTitle( $newTitle, $options );
+ if ( !$newTitle ) {
+ $action = 'abort';
+ $logStatus = 'alternate title is invalid';
+ } elseif ( $newTitle->exists() ) {
+ $action = 'abort';
+ $logStatus = 'title conflict';
+ } else {
+ $action = 'move';
+ $logStatus = 'alternate';
+ }
+ }
+ } else {
+ $action = 'move';
+ $logStatus = 'no conflict';
+ }
+
+ // Take the action or log a dry run message
+
+ $logTitle = "id={$row->page_id} ns={$row->page_namespace} dbk={$row->page_title}";
+ $pageOK = true;
+
+ switch ( $action ) {
+ case 'abort':
+ $this->output( "$logTitle *** $logStatus\n" );
+ $pageOK = false;
+ break;
+ case 'move':
+ $this->output( "$logTitle -> " .
+ $newTitle->getPrefixedDBkey() . " ($logStatus)$dryRunNote\n" );
+
+ if ( $options['fix'] ) {
+ $pageOK = $this->movePage( $row->page_id, $newTitle );
+ }
+ break;
+ case 'merge':
+ $this->output( "$logTitle => " .
+ $newTitle->getPrefixedDBkey() . " (merge)$dryRunNote\n" );
+
+ if ( $options['fix'] ) {
+ $pageOK = $this->mergePage( $row->page_id, $newTitle );
+ }
+ break;
+ }
+
+ if ( $pageOK ) {
+ $this->resolvableCount++;
+ } else {
+ $ok = false;
}
}
+ // @fixme Also needs to do like self::getTargetList() on the
+ // *_namespace and *_title fields of pagelinks, templatelinks, and
+ // redirects, and schedule a LinksUpdate job or similar for each found
+ // *_from.
+
return $ok;
}
/**
- * @todo Do this for real
- * @param int $key
- * @param string $prefix
- * @param bool $fix
- * @param string $suffix
+ * Move the given pseudo-namespace, either replacing the colon with a hyphen
+ * (useful for pseudo-namespaces that conflict with interwiki links) or move
+ * them to another namespace if specified.
+ * @param array $options Associative array of validated command-line options
* @return bool
*/
- private function checkPrefix( $key, $prefix, $fix, $suffix = '' ) {
- $this->output( "Checking prefix \"$prefix\" vs namespace $key\n" );
+ private function checkPrefix( $options ) {
+ $prefix = $options['source-pseudo-namespace'];
+ $ns = $options['dest-namespace'];
+ $this->output( "Checking prefix \"$prefix\" vs namespace $ns\n" );
- return $this->checkNamespace( $key, $prefix, $fix, $suffix );
+ return $this->checkNamespace( $ns, $prefix, $options );
}
/**
- * Find pages in mainspace that have a prefix of the new namespace
- * so we know titles that will need migrating
+ * Find pages in main and talk namespaces that have a prefix of the new
+ * namespace so we know titles that will need migrating
*
- * @param int $ns Namespace id (id for new namespace?)
+ * @param int $ns Destination namespace id
* @param string $name Prefix that is being made a namespace
+ * @param array $options Associative array of validated command-line options
*
- * @return array
+ * @return ResultWrapper
*/
- private function getConflicts( $ns, $name ) {
- $titleSql = "TRIM(LEADING {$this->db->addQuotes( "$name:" )} FROM page_title)";
- if ( $ns == 0 ) {
- // An interwiki; try an alternate encoding with '-' for ':'
- $titleSql = $this->db->buildConcat( array(
- $this->db->addQuotes( "$name-" ),
- $titleSql,
- ) );
+ private function getTargetList( $ns, $name, $options ) {
+ if ( $options['move-talk'] && MWNamespace::isSubject( $ns ) ) {
+ $checkNamespaces = array( NS_MAIN, NS_TALK );
+ } else {
+ $checkNamespaces = NS_MAIN;
}
- return iterator_to_array( $this->db->select( 'page',
+ return $this->db->select( 'page',
array(
- 'id' => 'page_id',
- 'oldtitle' => 'page_title',
- 'namespace' => $this->db->addQuotes( $ns ) . ' + page_namespace',
- 'title' => $titleSql,
- 'oldnamespace' => 'page_namespace',
+ 'page_id',
+ 'page_title',
+ 'page_namespace',
),
array(
- 'page_namespace' => array( 0, 1 ),
+ 'page_namespace' => $checkNamespaces,
'page_title' . $this->db->buildLike( "$name:", $this->db->anyString() ),
),
__METHOD__
- ) );
+ );
}
/**
- * Report any conflicts we find
- *
+ * Get the preferred destination title for a given target page row.
+ * @param integer $ns The destination namespace ID
+ * @param string $name The conflicting prefix
* @param stdClass $row
- * @param string $suffix
- * @return bool
+ * @param array $options Associative array of validated command-line options
+ * @return Title|false
*/
- private function reportConflict( $row, $suffix ) {
- $newTitle = Title::makeTitleSafe( $row->namespace, $row->title );
- if ( is_null( $newTitle ) || !$newTitle->canExist() ) {
- // Title is also an illegal title...
- // For the moment we'll let these slide to cleanupTitles or whoever.
- $this->output( sprintf( "... %d (%d,\"%s\")\n",
- $row->id,
- $row->oldnamespace,
- $row->oldtitle ) );
- $this->output( "... *** cannot resolve automatically; illegal title ***\n" );
-
- return false;
+ private function getDestinationTitle( $ns, $name, $row, $options ) {
+ $dbk = substr( $row->page_title, strlen( "$name:" ) );
+ if ( $ns == 0 ) {
+ // An interwiki; try an alternate encoding with '-' for ':'
+ $dbk = "$name-" . $dbk;
}
-
- $this->output( sprintf( "... %d (%d,\"%s\") -> (%d,\"%s\") [[%s]]\n",
- $row->id,
- $row->oldnamespace,
- $row->oldtitle,
- $newTitle->getNamespace(),
- $newTitle->getDBkey(),
- $newTitle->getPrefixedText() ) );
-
- $id = $newTitle->getArticleID();
- if ( $id ) {
- $this->output( "... *** cannot resolve automatically; page exists with ID $id ***\n" );
-
+ $destNS = $ns;
+ if ( $row->page_namespace == NS_TALK && MWNamespace::isSubject( $ns ) ) {
+ // This is an associated talk page moved with the --move-talk feature.
+ $destNS = MWNamespace::getTalk( $destNS );
+ }
+ $newTitle = Title::makeTitleSafe( $destNS, $dbk );
+ if ( !$newTitle || !$newTitle->canExist() ) {
return false;
- } else {
- return true;
}
+ return $newTitle;
}
/**
- * Resolve any conflicts
+ * Get an alternative title to move a page to. This is used if the
+ * preferred destination title already exists.
*
- * @param stClass $row Row from the page table to fix
- * @param bool $resolvable
- * @param string $suffix Suffix to append to the fixed page
- * @return bool
+ * @param Title $title
+ * @param array $options Associative array of validated command-line options
+ * @return Title|bool
*/
- private function resolveConflict( $row, $resolvable, $suffix ) {
- if ( !$resolvable ) {
- $this->output( "... *** old title {$row->title}\n" );
- while ( true ) {
- $row->title .= $suffix;
- $this->output( "... *** new title {$row->title}\n" );
- $title = Title::makeTitleSafe( $row->namespace, $row->title );
- if ( !$title ) {
- $this->output( "... !!! invalid title\n" );
-
- return false;
- }
- $id = $title->getArticleID();
- if ( $id ) {
- $this->output( "... *** page exists with ID $id ***\n" );
- } else {
- break;
- }
+ private function getAlternateTitle( $title, $options ) {
+ $prefix = $options['add-prefix'];
+ $suffix = $options['add-suffix'];
+ if ( $prefix == '' && $suffix == '' ) {
+ return false;
+ }
+ while ( true ) {
+ $dbk = $prefix . $title->getDBkey() . $suffix;
+ $title = Title::makeTitleSafe( $title->getNamespace(), $dbk );
+ if ( !$title ) {
+ return false;
+ }
+ if ( !$title->exists() ) {
+ return $title;
}
- $this->output( "... *** using suffixed form [[" . $title->getPrefixedText() . "]] ***\n" );
}
- $this->resolveConflictOn( $row, 'page', 'page' );
-
- return true;
}
/**
- * Resolve a given conflict
+ * Move a page
+ *
+ * @fixme Update pl_from_namespace etc.
*
- * @param stdClass $row Row from the old broken entry
- * @param string $table Table to update
- * @param string $prefix Prefix for column name, like page or ar
+ * @param integer $id The page_id
+ * @param Title $newTitle The new title
* @return bool
*/
- private function resolveConflictOn( $row, $table, $prefix ) {
- $this->output( "... resolving on $table... " );
- $newTitle = Title::makeTitleSafe( $row->namespace, $row->title );
- $this->db->update( $table,
+ private function movePage( $id, Title $newTitle ) {
+ $this->db->update( 'page',
array(
- "{$prefix}_namespace" => $newTitle->getNamespace(),
- "{$prefix}_title" => $newTitle->getDBkey(),
+ "page_namespace" => $newTitle->getNamespace(),
+ "page_title" => $newTitle->getDBkey(),
),
array(
- // "{$prefix}_namespace" => 0,
- // "{$prefix}_title" => $row->oldtitle,
- "{$prefix}_id" => $row->id,
+ "page_id" => $id,
),
__METHOD__ );
- $this->output( "ok.\n" );
+ // @fixme Needs updating the *_from_namespace fields in categorylinks,
+ // pagelinks, templatelinks and imagelinks.
+
+ return true;
+ }
+
+ /**
+ * Determine if we can merge a page.
+ * We check if an inaccessible revision would become the latest and
+ * deny the merge if so -- it's theoretically possible to update the
+ * latest revision, but opens a can of worms -- search engine updates,
+ * recentchanges review, etc.
+ *
+ * @param integer $id The page_id
+ * @param Title $newTitle The new title
+ * @param string $logStatus This is set to the log status message on failure
+ * @return bool
+ */
+ private function canMerge( $id, Title $newTitle, &$logStatus ) {
+ $latestDest = Revision::newFromTitle( $newTitle, 0, Revision::READ_LATEST );
+ $latestSource = Revision::newFromPageId( $id, 0, Revision::READ_LATEST );
+ if ( $latestSource->getTimestamp() > $latestDest->getTimestamp() ) {
+ $logStatus = 'cannot merge since source is later';
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Merge page histories
+ *
+ * @param integer $id The page_id
+ * @param Title $newTitle The new title
+ */
+ private function mergePage( $id, Title $newTitle ) {
+ $destId = $newTitle->getArticleId();
+ $this->db->begin( __METHOD__ );
+ $this->db->update( 'revision',
+ // SET
+ array( 'rev_page' => $destId ),
+ // WHERE
+ array( 'rev_page' => $id ),
+ __METHOD__ );
+
+ $this->db->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
+
+ // @fixme Need WikiPage::doDeleteUpdates() or similar to avoid orphan
+ // rows in the links tables.
+
+ $this->db->commit( __METHOD__ );
return true;
}
}
diff --git a/maintenance/oracle/tables.sql b/maintenance/oracle/tables.sql
index 36be16e4..12f6518a 100644
--- a/maintenance/oracle/tables.sql
+++ b/maintenance/oracle/tables.sql
@@ -69,7 +69,6 @@ CREATE TABLE &mw_prefix.page (
page_namespace NUMBER DEFAULT 0 NOT NULL,
page_title VARCHAR2(255) NOT NULL,
page_restrictions VARCHAR2(255),
- page_counter NUMBER DEFAULT 0 NOT NULL,
page_is_redirect CHAR(1) DEFAULT '0' NOT NULL,
page_is_new CHAR(1) DEFAULT '0' NOT NULL,
page_random NUMBER(15,14) NOT NULL,
@@ -247,7 +246,6 @@ CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui02 ON &mw_prefix.iwlinks (iwl_prefix, i
CREATE TABLE &mw_prefix.site_stats (
ss_row_id NUMBER NOT NULL ,
- ss_total_views NUMBER DEFAULT 0,
ss_total_edits NUMBER DEFAULT 0,
ss_good_articles NUMBER DEFAULT 0,
ss_total_pages NUMBER DEFAULT -1,
@@ -257,10 +255,6 @@ CREATE TABLE &mw_prefix.site_stats (
);
CREATE UNIQUE INDEX &mw_prefix.site_stats_u01 ON &mw_prefix.site_stats (ss_row_id);
-CREATE TABLE &mw_prefix.hitcounter (
- hc_id NUMBER NOT NULL
-);
-
CREATE SEQUENCE ipblocks_ipb_id_seq;
CREATE TABLE &mw_prefix.ipblocks (
ipb_id NUMBER NOT NULL,
diff --git a/maintenance/parse.php b/maintenance/parse.php
index 638d7c5b..7b05cb7b 100644
--- a/maintenance/parse.php
+++ b/maintenance/parse.php
@@ -3,7 +3,7 @@
* Parse some wikitext.
*
* Wikitext can be given by stdin or using a file. The wikitext will be parsed
- * using 'CLIParser' as a title. This can be overriden with --title option.
+ * using 'CLIParser' as a title. This can be overridden with --title option.
*
* Example1:
* @code
@@ -110,7 +110,7 @@ class CLIParser extends Maintenance {
/**
* Title object to use for CLI parsing.
- * Default title is 'CLIParser', it can be overriden with the option
+ * Default title is 'CLIParser', it can be overridden with the option
* --title <Your:Title>
*
* @return Title
diff --git a/maintenance/populateBloomCache.php b/maintenance/populateBloomCache.php
deleted file mode 100644
index 40ad5fc6..00000000
--- a/maintenance/populateBloomCache.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/**
- * Script to populate a bloom filter with a BloomFilter* class
- *
- * 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';
-
-/**
- * Script to populate a bloom filter with a BloomFilter* class
- *
- * @ingroup Maintenance
- */
-class PopulateBloomFilter extends Maintenance {
- public function __construct() {
- parent::__construct();
- $this->addOption( 'cache', 'Bloom cache store name', true, true );
- $this->addOption( 'filter', 'Bloom filter name', true, true );
- $this->addOption( 'domain', 'Bloom filter domain', true, true );
- $this->addOption( 'delay', 'Sleep delay between batches (us)', false, true );
- $this->mDescription = "Populate the specified bloom filter";
- }
-
- public function execute() {
- $type = $this->getOption( 'filter' );
- $domain = $this->getOption( 'domain' );
- $bcache = BloomCache::get( $this->getOption( 'cache' ) );
- $delay = $this->getOption( 'delay', 1e5 );
-
- if ( !method_exists( "BloomFilter{$type}", 'merge' ) ) {
- $this->error( "No \"BloomFilter{$type}::merge\" method found.", 1 );
- }
-
- $virtualKey = "$domain:$type";
- $status = $bcache->getStatus( $virtualKey );
- if ( $status == false ) {
- $this->error( "Could not query virtual bloom filter '$virtualKey'.", 1 );
- }
-
- $startTime = microtime( true );
- $this->output( "Current timestamp is '$startTime'.\n" );
- $this->output( "Current filter timestamp is '{$status['asOfTime']}'.\n" );
-
- do {
- $status = call_user_func_array(
- array( "BloomFilter{$type}", 'merge' ),
- array( $bcache, $domain, $virtualKey, $status )
- );
- if ( $status == false ) {
- $this->error( "Could not query virtual bloom filter '$virtualKey'.", 1 );
- }
- $this->output( "Filter updated to timestamp '{$status['asOfTime']}'.\n" );
- usleep( $delay );
- } while ( $status['asOfTime'] && $status['asOfTime'] < $startTime );
-
- $this->output( "Done, filter $type of domain $domain reached time '$startTime'.\n" );
- }
-}
-
-$maintClass = "PopulateBloomFilter";
-require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/populateParentId.php b/maintenance/populateParentId.php
index f77978fc..686d9f2b 100644
--- a/maintenance/populateParentId.php
+++ b/maintenance/populateParentId.php
@@ -84,7 +84,7 @@ class PopulateParentId extends LoggedUpdateMaintenance {
"rev_id < " . intval( $row->rev_id ) ),
__METHOD__,
array( 'ORDER BY' => 'rev_id DESC' ) );
- # If there are none, check the the highest ID with a lower timestamp
+ # If there are none, check the highest ID with a lower timestamp
if ( !$previousID ) {
# Get the highest older timestamp
$lastTimestamp = $db->selectField(
diff --git a/maintenance/populateRevisionSha1.php b/maintenance/populateRevisionSha1.php
index f06b56be..b401db03 100644
--- a/maintenance/populateRevisionSha1.php
+++ b/maintenance/populateRevisionSha1.php
@@ -153,7 +153,7 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
? Revision::newFromArchiveRow( $row )
: new Revision( $row );
$text = $rev->getSerializedData();
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$this->output( "Data of revision with {$idCol}={$row->$idCol} unavailable!\n" );
return false; // bug 22624?
@@ -182,7 +182,7 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
$db = $this->getDB( DB_MASTER );
try {
$rev = Revision::newFromArchiveRow( $row );
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$this->output( "Text of revision with timestamp {$row->ar_timestamp} unavailable!\n" );
return false; // bug 22624?
diff --git a/maintenance/postgres/compare_schemas.pl b/maintenance/postgres/compare_schemas.pl
index 53aeb147..bb08237b 100644
--- a/maintenance/postgres/compare_schemas.pl
+++ b/maintenance/postgres/compare_schemas.pl
@@ -395,7 +395,6 @@ ss_active_users bigint INTEGER
ss_good_articles bigint INTEGER
ss_total_edits bigint INTEGER
ss_total_pages bigint INTEGER
-ss_total_views bigint INTEGER
ss_users bigint INTEGER
## True IP - keep an eye on these, coders tend to make textual assumptions
diff --git a/maintenance/postgres/tables.sql b/maintenance/postgres/tables.sql
index 12e357fc..60762063 100644
--- a/maintenance/postgres/tables.sql
+++ b/maintenance/postgres/tables.sql
@@ -81,7 +81,6 @@ CREATE TABLE page (
page_namespace SMALLINT NOT NULL,
page_title TEXT NOT NULL,
page_restrictions TEXT,
- page_counter BIGINT NOT NULL DEFAULT 0,
page_is_redirect SMALLINT NOT NULL DEFAULT 0,
page_is_new SMALLINT NOT NULL DEFAULT 0,
page_random NUMERIC(15,14) NOT NULL DEFAULT RANDOM(),
@@ -262,7 +261,6 @@ CREATE INDEX langlinks_lang_title ON langlinks (ll_lang,ll_title);
CREATE TABLE site_stats (
ss_row_id INTEGER NOT NULL UNIQUE,
- ss_total_views INTEGER DEFAULT 0,
ss_total_edits INTEGER DEFAULT 0,
ss_good_articles INTEGER DEFAULT 0,
ss_total_pages INTEGER DEFAULT -1,
@@ -272,10 +270,6 @@ CREATE TABLE site_stats (
ss_images INTEGER DEFAULT 0
);
-CREATE TABLE hitcounter (
- hc_id BIGINT NOT NULL
-);
-
CREATE SEQUENCE ipblocks_ipb_id_seq;
CREATE TABLE ipblocks (
diff --git a/maintenance/preprocessorFuzzTest.php b/maintenance/preprocessorFuzzTest.php
index cb55f0f2..e1710c14 100644
--- a/maintenance/preprocessorFuzzTest.php
+++ b/maintenance/preprocessorFuzzTest.php
@@ -64,7 +64,7 @@ class PPFuzzTester {
self::$currentTest = new PPFuzzTest( $this );
self::$currentTest->execute();
$passed = 'passed';
- } catch ( MWException $e ) {
+ } catch ( Exception $e ) {
$testReport = self::$currentTest->getReport();
$exceptionReport = $e->getText();
$hash = md5( $testReport );
diff --git a/maintenance/purgeChangedFiles.php b/maintenance/purgeChangedFiles.php
index 1e702dea..d21a296d 100644
--- a/maintenance/purgeChangedFiles.php
+++ b/maintenance/purgeChangedFiles.php
@@ -2,7 +2,6 @@
/**
* Scan the logging table and purge affected files within a timeframe.
*
- * @section LICENSE
* 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
diff --git a/maintenance/purgeChangedPages.php b/maintenance/purgeChangedPages.php
index 67022094..56e22c40 100644
--- a/maintenance/purgeChangedPages.php
+++ b/maintenance/purgeChangedPages.php
@@ -2,7 +2,6 @@
/**
* Send purge requests for pages edited in date range to squid/varnish.
*
- * @section LICENSE
* 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
diff --git a/maintenance/rebuildLocalisationCache.php b/maintenance/rebuildLocalisationCache.php
index b04639c0..47866dc0 100644
--- a/maintenance/rebuildLocalisationCache.php
+++ b/maintenance/rebuildLocalisationCache.php
@@ -113,6 +113,7 @@ class RebuildLocalisationCache extends Maintenance {
$total = count( $codes );
$chunks = array_chunk( $codes, ceil( count( $codes ) / $threads ) );
$pids = array();
+ $parentStatus = 0;
foreach ( $chunks as $codes ) {
// Do not fork for only one thread
$pid = ( $threads > 1 ) ? pcntl_fork() : -1;
@@ -121,9 +122,8 @@ class RebuildLocalisationCache extends Maintenance {
// Child, reseed because there is no bug in PHP:
// http://bugs.php.net/bug.php?id=42465
mt_srand( getmypid() );
- $numRebuilt = $this->doRebuild( $codes, $lc, $force );
- // Abuse the exit value for the count of rebuild languages
- exit( $numRebuilt );
+ $this->doRebuild( $codes, $lc, $force );
+ exit( 0 );
} elseif ( $pid === -1 ) {
// Fork failed or one thread, do it serialized
$numRebuilt += $this->doRebuild( $codes, $lc, $force );
@@ -136,13 +136,20 @@ class RebuildLocalisationCache extends Maintenance {
foreach ( $pids as $pid ) {
$status = 0;
pcntl_waitpid( $pid, $status );
- // Fetch the count from the return value
- $numRebuilt += pcntl_wexitstatus( $status );
+ if ( pcntl_wexitstatus( $status ) ) {
+ // Pass a fatal error code through to the caller
+ $parentStatus = pcntl_wexitstatus( $status );
+ }
}
- $this->output( "$numRebuilt languages rebuilt out of $total\n" );
- if ( $numRebuilt === 0 ) {
- $this->output( "Use --force to rebuild the caches which are still fresh.\n" );
+ if ( !$pids ) {
+ $this->output( "$numRebuilt languages rebuilt out of $total\n" );
+ if ( $numRebuilt === 0 ) {
+ $this->output( "Use --force to rebuild the caches which are still fresh.\n" );
+ }
+ }
+ if ( $parentStatus ) {
+ exit( $parentStatus );
}
}
diff --git a/maintenance/rebuildSitesCache.php b/maintenance/rebuildSitesCache.php
new file mode 100644
index 00000000..2bc75108
--- /dev/null
+++ b/maintenance/rebuildSitesCache.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script to dump a SiteStore as a static json file.
+ *
+ * @ingroup Maintenance
+ */
+class RebuildSitesCache extends Maintenance {
+
+ public function __construct() {
+ parent::__construct();
+
+ $this->mDescription = "Cache sites as json for file-based lookup.";
+ $this->addOption( 'file', 'File to output the json to', false, true );
+ }
+
+ public function execute() {
+ $sitesCacheFileBuilder = new SitesCacheFileBuilder(
+ new DBSiteStore(),
+ $this->getCacheFile()
+ );
+
+ $sitesCacheFileBuilder->build();
+ }
+
+ /**
+ * @return string
+ */
+ private function getCacheFile() {
+ if ( $this->hasOption( 'file' ) ) {
+ $jsonFile = $this->getOption( 'file' );
+ } else {
+ $jsonFile = $this->getConfig()->get( 'SitesCacheFile' );
+
+ if ( $jsonFile === false ) {
+ $this->error( 'Error: No file set in configuration for SitesCacheFile.', 1 );
+ }
+ }
+
+ return $jsonFile;
+ }
+
+}
+
+$maintClass = "RebuildSitesCache";
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/rebuildtextindex.php b/maintenance/rebuildtextindex.php
index bc85c666..e29d89e1 100644
--- a/maintenance/rebuildtextindex.php
+++ b/maintenance/rebuildtextindex.php
@@ -70,6 +70,7 @@ class RebuildTextIndex extends Maintenance {
if ( $this->db->getType() == 'mysql' ) {
$this->dropMysqlTextIndex();
+ $this->clearSearchIndex();
$this->populateSearchIndex();
$this->createMysqlTextIndex();
} else {
diff --git a/maintenance/refreshLinks.php b/maintenance/refreshLinks.php
index 0c2f722c..e1b6ac68 100644
--- a/maintenance/refreshLinks.php
+++ b/maintenance/refreshLinks.php
@@ -36,42 +36,51 @@ class RefreshLinks extends Maintenance {
$this->addOption( 'new-only', 'Only affect articles with just a single edit' );
$this->addOption( 'redirects-only', 'Only fix redirects, not all links' );
$this->addOption( 'old-redirects-only', 'Only fix redirects with no redirect table entry' );
- $this->addOption( 'm', 'Maximum replication lag', false, true );
$this->addOption( 'e', 'Last page id to refresh', false, true );
+ $this->addOption( 'dfn-chunk-size', 'Maximum number of existent IDs to check per ' .
+ 'query, default 100000', false, true );
$this->addArg( 'start', 'Page_id to start from, default 1', false );
$this->setBatchSize( 100 );
}
public function execute() {
- $max = $this->getOption( 'm', 0 );
+ // Note that there is a difference between not specifying the start
+ // and end IDs and using the minimum and maximum values from the page
+ // table. In the latter case, deleteLinksFromNonexistent() will not
+ // delete entries for nonexistent IDs that fall outside the range.
+ $start = (int)$this->getArg( 0 ) ?: null;
+ $end = (int)$this->getOption( 'e' ) ?: null;
+ $dfnChunkSize = (int)$this->getOption( 'dfn-chunk-size', 100000 );
if ( !$this->hasOption( 'dfn-only' ) ) {
- $start = $this->getArg( 0, 1 );
$new = $this->getOption( 'new-only', false );
- $end = $this->getOption( 'e', 0 );
$redir = $this->getOption( 'redirects-only', false );
$oldRedir = $this->getOption( 'old-redirects-only', false );
- $this->doRefreshLinks( $start, $new, $max, $end, $redir, $oldRedir );
+ $this->doRefreshLinks( $start, $new, $end, $redir, $oldRedir );
+ $this->deleteLinksFromNonexistent( null, null, $this->mBatchSize, $dfnChunkSize );
+ } else {
+ $this->deleteLinksFromNonexistent( $start, $end, $this->mBatchSize, $dfnChunkSize );
}
- $this->deleteLinksFromNonexistent( $max, $this->mBatchSize );
}
/**
* Do the actual link refreshing.
- * @param int $start Page_id to start from
+ * @param int|null $start Page_id to start from
* @param bool $newOnly Only do pages with 1 edit
- * @param int $maxLag Max DB replication lag
- * @param int $end Page_id to stop at
+ * @param int|null $end Page_id to stop at
* @param bool $redirectsOnly Only fix redirects
* @param bool $oldRedirectsOnly Only fix redirects without redirect entries
*/
- private function doRefreshLinks( $start, $newOnly = false, $maxLag = false,
- $end = 0, $redirectsOnly = false, $oldRedirectsOnly = false
+ private function doRefreshLinks( $start, $newOnly = false,
+ $end = null, $redirectsOnly = false, $oldRedirectsOnly = false
) {
global $wgParser, $wgUseTidy;
$reportingInterval = 100;
$dbr = wfGetDB( DB_SLAVE );
- $start = intval( $start );
+
+ if ( $start === null ) {
+ $start = 1;
+ }
// Give extensions a chance to optimize settings
wfRunHooks( 'MaintenanceRefreshLinksInit', array( $this ) );
@@ -89,15 +98,10 @@ class RefreshLinks extends Maintenance {
$conds = array(
"page_is_redirect=1",
- "rd_from IS NULL"
+ "rd_from IS NULL",
+ self::intervalCond( $dbr, 'page_id', $start, $end ),
);
- if ( $end == 0 ) {
- $conds[] = "page_id >= $start";
- } else {
- $conds[] = "page_id BETWEEN $start AND $end";
- }
-
$res = $dbr->select(
array( 'page', 'redirect' ),
'page_id',
@@ -124,7 +128,8 @@ class RefreshLinks extends Maintenance {
array( 'page_id' ),
array(
'page_is_new' => 1,
- "page_id >= $start" ),
+ self::intervalCond( $dbr, 'page_id', $start, $end ),
+ ),
__METHOD__
);
$num = $res->numRows();
@@ -253,19 +258,60 @@ class RefreshLinks extends Maintenance {
* Removes non-existing links from pages from pagelinks, imagelinks,
* categorylinks, templatelinks, externallinks, interwikilinks, langlinks and redirect tables.
*
- * @param int $maxLag
+ * @param int|null $start Page_id to start from
+ * @param int|null $end Page_id to stop at
* @param int $batchSize The size of deletion batches
+ * @param int $chunkSize Maximum number of existent IDs to check per query
*
* @author Merlijn van Deen <valhallasw@arctus.nl>
*/
- private function deleteLinksFromNonexistent( $maxLag = 0, $batchSize = 100 ) {
+ private function deleteLinksFromNonexistent( $start = null, $end = null, $batchSize = 100,
+ $chunkSize = 100000
+ ) {
wfWaitForSlaves();
+ $this->output( "Deleting illegal entries from the links tables...\n" );
+ $dbr = wfGetDB( DB_SLAVE );
+ do {
+ // Find the start of the next chunk. This is based only
+ // on existent page_ids.
+ $nextStart = $dbr->selectField(
+ 'page',
+ 'page_id',
+ self::intervalCond( $dbr, 'page_id', $start, $end ),
+ __METHOD__,
+ array( 'ORDER BY' => 'page_id', 'OFFSET' => $chunkSize )
+ );
- $dbw = wfGetDB( DB_MASTER );
+ if ( $nextStart !== false ) {
+ // To find the end of the current chunk, subtract one.
+ // This will serve to limit the number of rows scanned in
+ // dfnCheckInterval(), per query, to at most the sum of
+ // the chunk size and deletion batch size.
+ $chunkEnd = $nextStart - 1;
+ } else {
+ // This is the last chunk. Check all page_ids up to $end.
+ $chunkEnd = $end;
+ }
+
+ $fmtStart = $start !== null ? "[$start" : '(-INF';
+ $fmtChunkEnd = $chunkEnd !== null ? "$chunkEnd]" : 'INF)';
+ $this->output( " Checking interval $fmtStart, $fmtChunkEnd\n" );
+ $this->dfnCheckInterval( $start, $chunkEnd, $batchSize );
+
+ $start = $nextStart;
- $lb = wfGetLBFactory()->newMainLB();
- $dbr = $lb->getConnection( DB_SLAVE );
- $dbr->bufferResults( false );
+ } while ( $nextStart !== false );
+ }
+
+ /**
+ * @see RefreshLinks::deleteLinksFromNonexistent()
+ * @param int|null $start Page_id to start from
+ * @param int|null $end Page_id to stop at
+ * @param int $batchSize The size of deletion batches
+ */
+ private function dfnCheckInterval( $start = null, $end = null, $batchSize = 100 ) {
+ $dbw = wfGetDB( DB_MASTER );
+ $dbr = wfGetDB( DB_SLAVE );
$linksTables = array( // table name => page_id field
'pagelinks' => 'pl_from',
@@ -280,40 +326,58 @@ class RefreshLinks extends Maintenance {
);
foreach ( $linksTables as $table => $field ) {
- $this->output( "Retrieving illegal entries from $table... " );
-
- // SELECT DISTINCT( $field ) FROM $table LEFT JOIN page ON $field=page_id WHERE page_id IS NULL;
- $results = $dbr->select(
- array( $table, 'page' ),
- $field,
- array( 'page_id' => null ),
- __METHOD__,
- 'DISTINCT',
- array( 'page' => array( 'LEFT JOIN', "$field=page_id" ) )
- );
-
+ $this->output( " $table: 0" );
$counter = 0;
- $list = array();
- $this->output( "0.." );
- foreach ( $results as $row ) {
- $counter++;
- $list[] = $row->$field;
- if ( ( $counter % $batchSize ) == 0 ) {
+ do {
+ $ids = $dbr->selectFieldValues(
+ $table,
+ $field,
+ array(
+ self::intervalCond( $dbr, $field, $start, $end ),
+ "$field NOT IN ({$dbr->selectSQLText( 'page', 'page_id' )})",
+ ),
+ __METHOD__,
+ array( 'DISTINCT', 'ORDER BY' => $field, 'LIMIT' => $batchSize )
+ );
+
+ $numIds = count( $ids );
+ if ( $numIds ) {
+ $counter += $numIds;
wfWaitForSlaves();
- $dbw->delete( $table, array( $field => $list ), __METHOD__ );
-
- $this->output( $counter . ".." );
- $list = array();
+ $dbw->delete( $table, array( $field => $ids ), __METHOD__ );
+ $this->output( ", $counter" );
+ $start = $ids[$numIds - 1] + 1;
}
- }
- $this->output( $counter );
- if ( count( $list ) > 0 ) {
- $dbw->delete( $table, array( $field => $list ), __METHOD__ );
- }
- $this->output( "\n" );
+
+ } while ( $numIds >= $batchSize && ( $end === null || $start <= $end ) );
+
+ $this->output( " deleted.\n" );
+
wfWaitForSlaves();
}
- $lb->closeAll();
+ }
+
+ /**
+ * Build a SQL expression for a closed interval (i.e. BETWEEN).
+ *
+ * By specifying a null $start or $end, it is also possible to create
+ * half-bounded or unbounded intervals using this function.
+ *
+ * @param IDatabase $db Database connection
+ * @param string $var Field name
+ * @param mixed $start First value to include or null
+ * @param mixed $end Last value to include or null
+ */
+ private static function intervalCond( IDatabase $db, $var, $start, $end ) {
+ if ( $start === null && $end === null ) {
+ return "$var IS NOT NULL";
+ } elseif ( $end === null ) {
+ return "$var >= {$db->addQuotes( $start )}";
+ } elseif ( $start === null ) {
+ return "$var <= {$db->addQuotes( $end )}";
+ } else {
+ return "$var BETWEEN {$db->addQuotes( $start )} AND {$db->addQuotes( $end )}";
+ }
}
}
diff --git a/maintenance/removeInvalidEmails.php b/maintenance/removeInvalidEmails.php
new file mode 100644
index 00000000..265723a4
--- /dev/null
+++ b/maintenance/removeInvalidEmails.php
@@ -0,0 +1,78 @@
+<?php
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * A script to remove emails that are invalid from
+ * the user_email column of the user table. Emails
+ * are validated before users can add them, but
+ * this was not always the case so older users may
+ * have invalid ones.
+ *
+ * By default it does a dry-run, pass --commit
+ * to actually update the database.
+ */
+class RemoveInvalidEmails extends Maintenance {
+
+ private $commit = false;
+
+ public function __construct() {
+ parent::__construct();
+ $this->addOption( 'commit', 'Whether to actually update the database', false, false );
+ $this->setBatchSize( 500 );
+ }
+ public function execute() {
+ $this->commit = $this->hasOption( 'commit' );
+ $dbr = $this->getDB( DB_SLAVE );
+ $dbw = $this->getDB( DB_MASTER );
+ $lastId = 0;
+ do {
+ $rows = $dbr->select(
+ 'user',
+ array( 'user_id', 'user_email' ),
+ array(
+ 'user_id > ' . $dbr->addQuotes( $lastId ),
+ 'user_email != ""',
+ 'user_email_authenticated IS NULL'
+ ),
+ __METHOD__,
+ array( 'LIMIT' => $this->mBatchSize )
+ );
+ $count = $rows->numRows();
+ $badIds = array();
+ foreach ( $rows as $row ) {
+ if ( !Sanitizer::validateEmail( trim( $row->user_email ) ) ) {
+ $this->output( "Found bad email: {$row->user_email} for user #{$row->user_id}\n" );
+ $badIds[] = $row->user_id;
+ }
+ if ( $row->user_id > $lastId ) {
+ $lastId = $row->user_id;
+ }
+ }
+
+ if ( $badIds ) {
+ $badCount = count( $badIds );
+ if ( $this->commit ) {
+ $this->output( "Removing $badCount emails from the database.\n" );
+ $dbw->update(
+ 'user',
+ array( 'user_email' => '' ),
+ array( 'user_id' => $badIds ),
+ __METHOD__
+ );
+ foreach ( $badIds as $badId ) {
+ User::newFromId( $badId )->invalidateCache();
+ }
+ wfWaitForSlaves();
+ } else {
+ $this->output( "Would have removed $badCount emails from the database.\n" );
+
+ }
+ }
+ } while ( $count !== 0 );
+ $this->output( "Done.\n" );
+ }
+}
+
+$maintClass = 'RemoveInvalidEmails';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/renderDump.php b/maintenance/renderDump.php
index 169f512c..2218a5e7 100644
--- a/maintenance/renderDump.php
+++ b/maintenance/renderDump.php
@@ -61,7 +61,7 @@ class DumpRenderer extends Maintenance {
}
$source = new ImportStreamSource( $this->getStdin() );
- $importer = new WikiImporter( $source );
+ $importer = new WikiImporter( $source, $this->getConfig() );
$importer->setRevisionCallback(
array( &$this, 'handleRevision' ) );
diff --git a/maintenance/resources/update-oojs-ui.sh b/maintenance/resources/update-oojs-ui.sh
index 1b352922..f6245f27 100644
--- a/maintenance/resources/update-oojs-ui.sh
+++ b/maintenance/resources/update-oojs-ui.sh
@@ -1,95 +1,69 @@
#!/usr/bin/env bash
-# This script generates a commit that updates our distribution copy of OOjs UI
+# This script generates a commit that updates our copy of OOjs UI
-if [ -z "$1" ]
+if [ -n "$2" ]
then
- # Missing required parameter
- echo >&2 "Usage: $0 path/to/repo/for/oojs-ui"
+ # Too many parameters
+ echo >&2 "Usage: $0 [<version>]"
exit 1
fi
-TARGET_REPO=$(cd "$(dirname $0)/../.."; pwd)
-TARGET_DIR=resources/lib/oojs-ui
-UI_REPO=$1
-
-function oojsuihash() {
- grep "OOjs UI v" "$TARGET_REPO/$TARGET_DIR/oojs-ui.js" \
- | head -n 1 \
- | grep -Eo '\([a-z0-9]+\)' \
- | sed 's/^(//' \
- | sed 's/)$//'
-}
-
-function oojsuitag() {
- grep "OOjs UI v" "$TARGET_REPO/$TARGET_DIR/oojs-ui.js" \
- | head -n 1 \
- | grep -Eo '\bv[0-9a-z.-]+\b'
-}
-
-function oojsuiversion() {
- grep "OOjs UI v" "$TARGET_REPO/$TARGET_DIR/oojs-ui.js" \
- | head -n 1 \
- | grep -Eo '\bv[0-9a-z.-]+\b.*$'
-}
+REPO_DIR=$(cd "$(dirname $0)/../.."; pwd) # Root dir of the git repo working tree
+TARGET_DIR="resources/lib/oojs-ui" # Destination relative to the root of the repo
+NPM_DIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'update-oojs-ui') # e.g. /tmp/update-oojs-ui.rI0I5Vir
# Prepare working tree
-cd "$TARGET_REPO" &&
+cd "$REPO_DIR" &&
+git reset composer.json && git checkout composer.json &&
git reset $TARGET_DIR && git checkout $TARGET_DIR && git fetch origin &&
-git checkout -B upstream-oojsui origin/master || exit 1
-
-cd $UI_REPO || exit 1
+git checkout -B upstream-oojs-ui origin/master || exit 1
-# Read the old version and check for changes
-OLDHASH=$(oojsuihash)
-if [ -z "$OLDHASH" ]
+# Fetch upstream version
+cd $NPM_DIR
+if [ -n "$1" ]
then
- OLDTAG=$(oojsuitag)
+ npm install "oojs-ui@$1" || exit 1
+else
+ npm install oojs-ui || exit 1
fi
-if [ "$OLDHASH" == "" ]
-then
- OLDHASH=$(git rev-parse "$OLDTAG")
- if [ $? != 0 ]
- then
- echo "Could not find OOjs UI version"
- cd -
- exit 1
- fi
-fi
-if [ "$(git rev-parse $OLDHASH)" == "$(git rev-parse HEAD)" ]
+
+OOJSUI_VERSION=$(node -e 'console.log(require("./node_modules/oojs-ui/package.json").version);')
+if [ "$OOJSUI_VERSION" == "" ]
then
- echo "No changes (already at $OLDHASH)"
- cd -
- exit 0
+ echo 'Could not find OOjs UI version'
+ exit 1
fi
-# Build the distribution
-npm install && grunt git-build || exit 1
-
-# Get the list of changes
-NEWCHANGES=$(git log $OLDHASH.. --oneline --no-merges --reverse --color=never)
-NEWCHANGESDISPLAY=$(git log $OLDHASH.. --oneline --no-merges --reverse --color=always)
-
-# Copy files
-# - Exclude the default non-svg stylesheet
-rsync --recursive --delete --force --exclude 'oojs-ui.css' --exclude 'oojs-ui*.rtl.css' ./dist/ "$TARGET_REPO/$TARGET_DIR" || exit 1
-
-# Read the new version
-NEWVERSION=$(oojsuiversion)
+# Copy files, excluding:
+# * the Apex theme files,
+# * the minimised distribution files, and
+# * the RTL sheets for non-CSSJanus environments
+# * the raster- and vector-only distribution sheets
+rsync --force --recursive --delete \
+ --exclude '*apex*' \
+ --exclude 'oojs-ui*.min.*' \
+ --exclude 'oojs-ui*.rtl.css' \
+ --exclude 'oojs-ui*.raster.css' \
+ --exclude 'oojs-ui*.vector.css' \
+ ./node_modules/oojs-ui/dist/ "$REPO_DIR/$TARGET_DIR" || exit 1
+
+# Clean up temporary area
+rm -rf "$NPM_DIR"
# Generate commit
-cd "$TARGET_REPO"
+cd $REPO_DIR || exit 1
+
COMMITMSG=$(cat <<END
-Update OOjs UI to $NEWVERSION
+Update OOjs UI to v$OOJSUI_VERSION
-New changes:
-$NEWCHANGES
+Release notes:
+ https://git.wikimedia.org/blob/oojs%2Fui.git/v$OOJSUI_VERSION/History.md
END
)
-git add -u $TARGET_DIR && git add $TARGET_DIR && git commit -m "$COMMITMSG"
-cat >&2 <<END
+# Update composer.json as well
+composer require oojs/oojs-ui $OOJSUI_VERSION --no-update
-Created commit with changes:
-$NEWCHANGESDISPLAY
-END
+# Stage deletion, modification and creation of files. Then commit.
+git add --update $TARGET_DIR && git add $TARGET_DIR && git add composer.json && git commit -m "$COMMITMSG" || exit 1
diff --git a/maintenance/resources/update-oojs.sh b/maintenance/resources/update-oojs.sh
index d9e6fb9d..1d5c2b17 100644
--- a/maintenance/resources/update-oojs.sh
+++ b/maintenance/resources/update-oojs.sh
@@ -1,5 +1,7 @@
#!/usr/bin/env bash
+# This script generates a commit that updates our copy of OOjs
+
if [ -n "$2" ]
then
# Too many parameters
@@ -25,7 +27,7 @@ else
npm install oojs || exit 1
fi
-OOJS_VERSION=$(node -e 'console.log(JSON.parse(require("fs").readFileSync("./node_modules/oojs/package.json")).version);')
+OOJS_VERSION=$(node -e 'console.log(require("./node_modules/oojs/package.json").version);')
if [ "$OOJS_VERSION" == "" ]
then
echo 'Could not find OOjs version'
diff --git a/maintenance/runJobs.php b/maintenance/runJobs.php
index 40605ceb..3864e3c6 100644
--- a/maintenance/runJobs.php
+++ b/maintenance/runJobs.php
@@ -23,6 +23,8 @@
require_once __DIR__ . '/Maintenance.php';
+use MediaWiki\Logger\LoggerFactory;
+
/**
* Maintenance script that runs pending jobs.
*
@@ -68,7 +70,7 @@ class RunJobs extends Maintenance {
$json = ( $this->getOption( 'result' ) === 'json' );
- $runner = new JobRunner();
+ $runner = new JobRunner( LoggerFactory::getInstance( 'runJobs' ) );
if ( !$json ) {
$runner->setDebugHandler( array( $this, 'debugInternal' ) );
}
diff --git a/maintenance/showJobs.php b/maintenance/showJobs.php
index b8dc5548..9e9ad327 100644
--- a/maintenance/showJobs.php
+++ b/maintenance/showJobs.php
@@ -38,16 +38,19 @@ class ShowJobs extends Maintenance {
parent::__construct();
$this->mDescription = "Show number of jobs waiting in master database";
$this->addOption( 'group', 'Show number of jobs per job type' );
- $this->addOption(
- 'list',
- 'Show a complete list of all jobs in a machine-readable format, instead of statistics'
- );
+ $this->addOption( 'list',
+ 'Show a list of all jobs in a machine-readable format, instead of statistics' );
+ $this->addOption( 'type', 'Only show/count jobs of a given type', false, true );
}
public function execute() {
+ $filterType = $this->getOption( 'type', '' );
$group = JobQueueGroup::singleton();
if ( $this->hasOption( 'list' ) ) {
foreach ( $group->getQueueTypes() as $type ) {
+ if ( $filterType != '' && $type != $filterType ) {
+ continue;
+ }
$queue = $group->get( $type );
foreach ( $queue->getAllQueuedJobs() as $job ) {
$this->output( $job->toString() . " status=unclaimed\n" );
@@ -55,9 +58,15 @@ class ShowJobs extends Maintenance {
foreach ( $queue->getAllDelayedJobs() as $job ) {
$this->output( $job->toString() . " status=delayed\n" );
}
+ foreach ( $queue->getAllAbandonedJobs() as $job ) {
+ $this->output( $job->toString() . " status=abandoned\n" );
+ }
}
} elseif ( $this->hasOption( 'group' ) ) {
foreach ( $group->getQueueTypes() as $type ) {
+ if ( $filterType != '' && $type != $filterType ) {
+ continue;
+ }
$queue = $group->get( $type );
$delayed = $queue->getDelayedCount();
$pending = $queue->getSize();
@@ -75,6 +84,9 @@ class ShowJobs extends Maintenance {
} else {
$count = 0;
foreach ( $group->getQueueTypes() as $type ) {
+ if ( $filterType != '' && $type != $filterType ) {
+ continue;
+ }
$count += $group->get( $type )->getSize();
}
$this->output( "$count\n" );
diff --git a/maintenance/showSiteStats.php b/maintenance/showSiteStats.php
index 374a66e9..370d14eb 100644
--- a/maintenance/showSiteStats.php
+++ b/maintenance/showSiteStats.php
@@ -44,7 +44,6 @@ class ShowSiteStats extends Maintenance {
public function execute() {
$fields = array(
- 'ss_total_views' => 'Total views',
'ss_total_edits' => 'Total edits',
'ss_good_articles' => 'Number of articles',
'ss_total_pages' => 'Total pages',
diff --git a/maintenance/sql.php b/maintenance/sql.php
index afa3ef72..886e3f10 100644
--- a/maintenance/sql.php
+++ b/maintenance/sql.php
@@ -39,7 +39,8 @@ class MwSql extends Maintenance {
}
public function execute() {
- $wiki = $this->getOption( 'wikidb' ) ?: false;
+ // We wan't to allow "" for the wikidb, meaning don't call select_db()
+ $wiki = $this->hasOption( 'wikidb' ) ? $this->getOption( 'wikidb' ) : false;
// Get the appropriate load balancer (for this wiki)
if ( $this->hasOption( 'cluster' ) ) {
$lb = wfGetLBFactory()->getExternalLB( $this->getOption( 'cluster' ), $wiki );
diff --git a/maintenance/sqlite.inc b/maintenance/sqlite.inc
index 5c0fd07f..e1731908 100644
--- a/maintenance/sqlite.inc
+++ b/maintenance/sqlite.inc
@@ -59,7 +59,7 @@ class Sqlite {
'blob', // NULL type is omitted intentionally
) );
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
try {
foreach ( $files as $file ) {
$err = $db->sourceFile( $file );
diff --git a/maintenance/sqlite.php b/maintenance/sqlite.php
index edc9e145..7e02a4b2 100644
--- a/maintenance/sqlite.php
+++ b/maintenance/sqlite.php
@@ -81,7 +81,7 @@ class SqliteMaintenance extends Maintenance {
}
private function vacuum() {
- $prevSize = filesize( $this->db->mDatabaseFile );
+ $prevSize = filesize( $this->db->getDbFilePath() );
if ( $prevSize == 0 ) {
$this->error( "Can't vacuum an empty database.\n", true );
}
@@ -89,7 +89,7 @@ class SqliteMaintenance extends Maintenance {
$this->output( 'VACUUM: ' );
if ( $this->db->query( 'VACUUM' ) ) {
clearstatcache();
- $newSize = filesize( $this->db->mDatabaseFile );
+ $newSize = filesize( $this->db->getDbFilePath() );
$this->output( sprintf( "Database size was %d, now %d (%.1f%% reduction).\n",
$prevSize, $newSize, ( $prevSize - $newSize ) * 100.0 / $prevSize ) );
} else {
@@ -115,7 +115,7 @@ class SqliteMaintenance extends Maintenance {
private function backup( $fileName ) {
$this->output( "Backing up database:\n Locking..." );
$this->db->query( 'BEGIN IMMEDIATE TRANSACTION', __METHOD__ );
- $ourFile = $this->db->mDatabaseFile;
+ $ourFile = $this->db->getDbFilePath();
$this->output( " Copying database file $ourFile to $fileName... " );
wfSuppressWarnings( false );
if ( !copy( $ourFile, $fileName ) ) {
diff --git a/maintenance/sqlite/archives/initial-indexes.sql b/maintenance/sqlite/archives/initial-indexes.sql
index 954c85d3..f322a03c 100644
--- a/maintenance/sqlite/archives/initial-indexes.sql
+++ b/maintenance/sqlite/archives/initial-indexes.sql
@@ -69,7 +69,6 @@ CREATE TABLE /*_*/page_tmp (
page_namespace int NOT NULL,
page_title varchar(255) binary NOT NULL,
page_restrictions tinyblob NOT NULL,
- page_counter bigint unsigned NOT NULL default 0,
page_is_redirect tinyint unsigned NOT NULL default 0,
page_is_new tinyint unsigned NOT NULL default 0,
page_random real unsigned NOT NULL,
@@ -164,7 +163,6 @@ CREATE INDEX /*i*/ll_lang_title ON /*_*/langlinks_tmp (ll_lang, ll_title);
CREATE TABLE /*_*/site_stats_tmp (
ss_row_id int unsigned NOT NULL,
- ss_total_views bigint unsigned default 0,
ss_total_edits bigint unsigned default 0,
ss_good_articles bigint unsigned default 0,
ss_total_pages bigint default '-1',
diff --git a/maintenance/sqlite/archives/patch-drop-page_counter.sql b/maintenance/sqlite/archives/patch-drop-page_counter.sql
new file mode 100644
index 00000000..ac8151da
--- /dev/null
+++ b/maintenance/sqlite/archives/patch-drop-page_counter.sql
@@ -0,0 +1,31 @@
+-- field is deprecated and no longer updated as of 1.25
+CREATE TABLE /*_*/page_tmp (
+ page_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ page_namespace int NOT NULL,
+ page_title varchar(255) binary NOT NULL,
+ page_restrictions tinyblob NOT NULL,
+ page_is_redirect tinyint unsigned NOT NULL default 0,
+ page_is_new tinyint unsigned NOT NULL default 0,
+ page_random real unsigned NOT NULL,
+ page_touched binary(14) NOT NULL default '',
+ page_links_updated varbinary(14) NULL default NULL,
+ page_latest int unsigned NOT NULL,
+ page_len int unsigned NOT NULL,
+ page_content_model varbinary(32) DEFAULT NULL,
+ page_lang varbinary(35) DEFAULT NULL
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/page_tmp
+ SELECT page_id, page_namespace, page_title, page_restrictions, page_is_redirect,
+ page_is_new, page_random, page_touched, page_links_updated, page_latest, page_len,
+ page_content_model, page_lang
+ FROM /*_*/page;
+
+DROP TABLE /*_*/page;
+
+ALTER TABLE /*_*/page_tmp RENAME TO /*_*/page;
+
+CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
+CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
+CREATE INDEX /*i*/page_len ON /*_*/page (page_len);
+CREATE INDEX /*i*/page_redirect_namespace_len ON /*_*/page (page_is_redirect, page_namespace, page_len);
diff --git a/maintenance/sqlite/archives/patch-drop-ss_admins.sql b/maintenance/sqlite/archives/patch-drop-ss_admins.sql
index 9951e17e..39606630 100644
--- a/maintenance/sqlite/archives/patch-drop-ss_admins.sql
+++ b/maintenance/sqlite/archives/patch-drop-ss_admins.sql
@@ -1,7 +1,6 @@
-- field is deprecated and no longer updated as of 1.5
CREATE TABLE /*_*/site_stats_tmp (
ss_row_id int unsigned NOT NULL,
- ss_total_views bigint unsigned default 0,
ss_total_edits bigint unsigned default 0,
ss_good_articles bigint unsigned default 0,
ss_total_pages bigint default '-1',
@@ -11,7 +10,7 @@ CREATE TABLE /*_*/site_stats_tmp (
) /*$wgDBTableOptions*/;
INSERT INTO /*_*/site_stats_tmp
- SELECT ss_row_id, ss_total_views, ss_total_edits, ss_good_articles,
+ SELECT ss_row_id, ss_total_edits, ss_good_articles,
ss_total_pages, ss_users, ss_active_users, ss_images
FROM /*_*/site_stats;
diff --git a/maintenance/sqlite/archives/patch-drop-ss_total_views.sql b/maintenance/sqlite/archives/patch-drop-ss_total_views.sql
new file mode 100644
index 00000000..ad80988d
--- /dev/null
+++ b/maintenance/sqlite/archives/patch-drop-ss_total_views.sql
@@ -0,0 +1,21 @@
+-- field is deprecated and no longer updated as of 1.25
+CREATE TABLE /*_*/site_stats_tmp (
+ ss_row_id int unsigned NOT NULL,
+ ss_total_edits bigint unsigned default 0,
+ ss_good_articles bigint unsigned default 0,
+ ss_total_pages bigint default '-1',
+ ss_users bigint default '-1',
+ ss_active_users bigint default '-1',
+ ss_images int default 0
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/site_stats_tmp
+ SELECT ss_row_id, ss_total_edits, ss_good_articles, ss_total_pages,
+ ss_users, ss_active_users, ss_images
+ FROM /*_*/site_stats;
+
+DROP TABLE /*_*/site_stats;
+
+ALTER TABLE /*_*/site_stats_tmp RENAME TO /*_*/site_stats;
+
+CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
diff --git a/maintenance/sqlite/archives/patch-editsummary-length.sql b/maintenance/sqlite/archives/patch-editsummary-length.sql
new file mode 100644
index 00000000..f86b2ada
--- /dev/null
+++ b/maintenance/sqlite/archives/patch-editsummary-length.sql
@@ -0,0 +1,65 @@
+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") 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;
+
+
+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));
+
diff --git a/maintenance/storage/checkStorage.php b/maintenance/storage/checkStorage.php
index 0f996625..c0f6c7b6 100644
--- a/maintenance/storage/checkStorage.php
+++ b/maintenance/storage/checkStorage.php
@@ -39,6 +39,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
/**
* Maintenance script to do various checks on external storage.
*
+ * @fixme this should extend the base Maintenance class
* @ingroup Maintenance ExternalStorage
*/
class CheckStorage {
@@ -466,7 +467,10 @@ class CheckStorage {
$dbw->ping();
$source = new ImportStreamSource( $file );
- $importer = new WikiImporter( $source );
+ $importer = new WikiImporter(
+ $source,
+ ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+ );
$importer->setRevisionCallback( array( &$this, 'importRevision' ) );
$importer->doImport();
}
diff --git a/maintenance/storage/compressOld.php b/maintenance/storage/compressOld.php
index cfffbbca..3cb4a2ba 100644
--- a/maintenance/storage/compressOld.php
+++ b/maintenance/storage/compressOld.php
@@ -50,9 +50,15 @@ require_once __DIR__ . '/../Maintenance.php';
*/
class CompressOld extends Maintenance {
/**
- * @todo document
+ * Option to load each revision individually.
+ *
*/
const LS_INDIVIDUAL = 0;
+
+ /**
+ * Option to load revisions in chunks.
+ *
+ */
const LS_CHUNKED = 1;
public function __construct() {
@@ -137,7 +143,8 @@ class CompressOld extends Maintenance {
}
/**
- * @todo document
+ * Fetch the text row-by-row to 'compressPage' function for compression.
+ *
* @param int $start
* @param string $extdb
*/
@@ -172,7 +179,8 @@ class CompressOld extends Maintenance {
}
/**
- * @todo document
+ * Compress the text in gzip format.
+ *
* @param stdClass $row
* @param string $extdb
* @return bool
@@ -214,6 +222,8 @@ class CompressOld extends Maintenance {
}
/**
+ * Compress the text in chunks after concatenating the revisions.
+ *
* @param int $startId
* @param int $maxChunkSize
* @param string $beginDate
diff --git a/maintenance/storage/moveToExternal.php b/maintenance/storage/moveToExternal.php
index 348fb773..ab59cb8d 100644
--- a/maintenance/storage/moveToExternal.php
+++ b/maintenance/storage/moveToExternal.php
@@ -25,7 +25,6 @@ define( 'REPORTING_INTERVAL', 1 );
if ( !defined( 'MEDIAWIKI' ) ) {
require_once __DIR__ . '/../commandLine.inc';
- require_once __DIR__ . '/../../includes/externalstore/ExternalStoreDB.php';
require_once 'resolveStubs.php';
$fname = 'moveToExternal';
diff --git a/maintenance/storage/recompressTracked.php b/maintenance/storage/recompressTracked.php
index 910f56bd..3562df62 100644
--- a/maintenance/storage/recompressTracked.php
+++ b/maintenance/storage/recompressTracked.php
@@ -22,6 +22,8 @@
* @ingroup Maintenance ExternalStorage
*/
+use MediaWiki\Logger\LegacyLogger;
+
$optionsWithArgs = RecompressTracked::getOptionsWithArgs();
require __DIR__ . '/../commandLine.inc';
@@ -141,7 +143,7 @@ class RecompressTracked {
$header .= "({$this->slaveId})";
}
$header .= ' ' . wfWikiID();
- wfErrorLog( sprintf( "%-50s %s\n", $header, $msg ), $file );
+ LegacyLogger::emit( sprintf( "%-50s %s\n", $header, $msg ), $file );
}
/**
@@ -471,7 +473,7 @@ class RecompressTracked {
* @param int $pageId
*/
function doPage( $pageId ) {
- $title = Title::newFromId( $pageId );
+ $title = Title::newFromID( $pageId );
if ( $title ) {
$titleText = $title->getPrefixedText();
} else {
diff --git a/maintenance/storage/resolveStubs.php b/maintenance/storage/resolveStubs.php
index 290f1649..36741cb2 100644
--- a/maintenance/storage/resolveStubs.php
+++ b/maintenance/storage/resolveStubs.php
@@ -22,8 +22,6 @@
* @ingroup Maintenance ExternalStorage
*/
-define( 'REPORTING_INTERVAL', 100 );
-
if ( !defined( 'MEDIAWIKI' ) ) {
$optionsWithArgs = array( 'm' );
diff --git a/maintenance/tables.sql b/maintenance/tables.sql
index 02286848..bf93a232 100644
--- a/maintenance/tables.sql
+++ b/maintenance/tables.sql
@@ -182,7 +182,7 @@ CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg
--
CREATE TABLE /*_*/user_newtalk (
-- Key to user.user_id
- user_id int NOT NULL default 0,
+ user_id int unsigned NOT NULL default 0,
-- If the user is an anonymous user their IP address is stored here
-- since the user_id of 0 is ambiguous
user_ip varbinary(40) NOT NULL default '',
@@ -241,9 +241,6 @@ CREATE TABLE /*_*/page (
-- can move or edit the page.
page_restrictions tinyblob NOT NULL,
- -- Number of times this page has been viewed.
- page_counter bigint unsigned NOT NULL default 0,
-
-- 1 indicates the article is a redirect.
page_is_redirect tinyint unsigned NOT NULL default 0,
@@ -307,7 +304,7 @@ CREATE TABLE /*_*/revision (
-- Text comment summarizing the change.
-- This text is shown in the history and other changes lists,
-- rendered in a subset of wiki markup by Linker::formatComment()
- rev_comment tinyblob NOT NULL,
+ rev_comment varbinary(767) NOT NULL,
-- Key to user.user_id of the user who made this edit.
-- Stores 0 for anonymous edits and for some mass imports.
@@ -374,13 +371,20 @@ CREATE TABLE /*_*/text (
-- Comma-separated list of flags:
-- gzip: text is compressed with PHP's gzdeflate() function.
- -- utf8: text was stored as UTF-8.
- -- If $wgLegacyEncoding option is on, rows *without* this flag
- -- will be converted to UTF-8 transparently at load time.
+ -- utf-8: text was stored as UTF-8.
+ -- If $wgLegacyEncoding option is on, rows *without* this flag
+ -- will be converted to UTF-8 transparently at load time. Note
+ -- that due to a bug in a maintenance script, this flag may
+ -- have been stored as 'utf8' in some cases (T18841).
-- object: text field contained a serialized PHP object.
-- The object either contains multiple versions compressed
-- together to achieve a better compression ratio, or it refers
-- to another row where the text can be found.
+ -- external: text was stored in an external location specified by old_text.
+ -- Any additional flags apply to the data stored at that URL, not
+ -- the URL itself. The 'object' flag is *not* set for URLs of the
+ -- form 'DB://cluster/id/itemid', because the external storage
+ -- system itself decompresses these.
old_flags tinyblob NOT NULL
) /*$wgDBTableOptions*/ MAX_ROWS=10000000 AVG_ROW_LENGTH=10240;
-- In case tables are created as MyISAM, use row hints for MySQL <5.0 to avoid 4GB limit
@@ -407,7 +411,7 @@ CREATE TABLE /*_*/archive (
ar_text mediumblob NOT NULL,
-- Basic revision stuff...
- ar_comment tinyblob NOT NULL,
+ ar_comment varbinary(767) NOT NULL,
ar_user int unsigned NOT NULL default 0,
ar_user_text varchar(255) binary NOT NULL,
ar_timestamp binary(14) NOT NULL default '',
@@ -697,9 +701,6 @@ CREATE TABLE /*_*/site_stats (
-- The single row should contain 1 here.
ss_row_id int unsigned NOT NULL,
- -- Total number of page views, if hit counters are enabled.
- ss_total_views bigint unsigned default 0,
-
-- Total number of edits performed.
ss_total_edits bigint unsigned default 0,
@@ -726,19 +727,6 @@ CREATE TABLE /*_*/site_stats (
-- Pointless index to assuage developer superstitions
CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id);
-
---
--- Stores an ID for every time any article is visited;
--- depending on $wgHitcounterUpdateFreq, it is
--- periodically cleared and the page_counter column
--- in the page table updated for all the articles
--- that have been visited.)
---
-CREATE TABLE /*_*/hitcounter (
- hc_id int unsigned NOT NULL
-) ENGINE=MEMORY MAX_ROWS=25000;
-
-
--
-- The internet is full of jerks, alas. Sometimes it's handy
-- to block a vandal or troll account.
@@ -760,7 +748,7 @@ CREATE TABLE /*_*/ipblocks (
ipb_by_text varchar(255) binary NOT NULL default '',
-- Text comment made by blocker.
- ipb_reason tinyblob NOT NULL,
+ ipb_reason varbinary(767) NOT NULL,
-- Creation (or refresh) date in standard YMDHMS form.
-- IP blocks expire automatically.
@@ -858,7 +846,7 @@ CREATE TABLE /*_*/image (
-- Description field as entered by the uploader.
-- This is displayed in image upload history and logs.
- img_description tinyblob NOT NULL,
+ img_description varbinary(767) NOT NULL,
-- user_id and user_name of uploader.
img_user int unsigned NOT NULL default 0,
@@ -900,7 +888,7 @@ CREATE TABLE /*_*/oldimage (
oi_width int NOT NULL default 0,
oi_height int NOT NULL default 0,
oi_bits int NOT NULL default 0,
- oi_description tinyblob NOT NULL,
+ 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 '',
@@ -948,7 +936,7 @@ CREATE TABLE /*_*/filearchive (
-- Deletion information, if this file is deleted.
fa_deleted_user int,
fa_deleted_timestamp binary(14) default '',
- fa_deleted_reason text,
+ fa_deleted_reason varbinary(767) default '',
-- Duped fields from image
fa_size int unsigned default 0,
@@ -959,7 +947,7 @@ CREATE TABLE /*_*/filearchive (
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 tinyblob,
+ fa_description varbinary(767),
fa_user int unsigned default 0,
fa_user_text varchar(255) binary,
fa_timestamp binary(14) default '',
@@ -1057,7 +1045,7 @@ CREATE TABLE /*_*/recentchanges (
rc_title varchar(255) binary NOT NULL default '',
-- as in revision...
- rc_comment varchar(255) binary NOT NULL default '',
+ rc_comment varbinary(767) NOT NULL default '',
rc_minor tinyint unsigned NOT NULL default 0,
-- Edits by user accounts with the 'bot' rights key are
@@ -1265,7 +1253,7 @@ CREATE TABLE /*_*/logging (
log_page int unsigned NULL,
-- Freeform text. Interpreted as edit history comments.
- log_comment varchar(255) NOT NULL default '',
+ log_comment varbinary(767) NOT NULL default '',
-- miscellaneous parameters:
-- LF separated list (old system) or serialized PHP array (new system)
@@ -1424,7 +1412,7 @@ CREATE TABLE /*_*/protected_titles (
pt_namespace int NOT NULL,
pt_title varchar(255) binary NOT NULL,
pt_user int unsigned NOT NULL,
- pt_reason tinyblob,
+ pt_reason varbinary(767),
pt_timestamp binary(14) NOT NULL,
pt_expiry varbinary(14) NOT NULL default '',
pt_create_perm varbinary(60) NOT NULL
diff --git a/maintenance/update.php b/maintenance/update.php
index 046d73cd..7e0748be 100644
--- a/maintenance/update.php
+++ b/maintenance/update.php
@@ -26,11 +26,6 @@
* @ingroup Maintenance
*/
-if ( !function_exists( 'version_compare' ) || ( version_compare( PHP_VERSION, '5.3.2' ) < 0 ) ) {
- require dirname( __FILE__ ) . '/../includes/PHPVersionError.php';
- wfPHPVersionError( 'cli' );
-}
-
$wgUseMasterForMaintenance = true;
require_once __DIR__ . '/Maintenance.php';
@@ -56,6 +51,10 @@ class UpdateMediaWiki extends Maintenance {
true
);
$this->addOption( 'force', 'Override when $wgAllowSchemaUpdates disables this script' );
+ $this->addOption(
+ 'skip-external-dependencies',
+ 'Skips checking whether external dependencies are up to date, mostly for developers'
+ );
}
function getDbType() {
@@ -131,13 +130,23 @@ class UpdateMediaWiki extends Maintenance {
wfCountdown( 5 );
}
+ // Check external dependencies are up to date
+ if ( !$this->hasOption( 'skip-external-dependencies' ) ) {
+ $composerLockUpToDate = $this->runChild( 'CheckComposerLockUpToDate' );
+ $composerLockUpToDate->execute();
+ } else {
+ $this->output(
+ "Skipping checking whether external dependencies are up to date, proceed at your own risk\n"
+ );
+ }
+
# Attempt to connect to the database as a privileged user
# This will vomit up an error if there are permissions problems
$db = wfGetDB( DB_MASTER );
$this->output( "Going to run database updates for " . wfWikiID() . "\n" );
if ( $db->getType() === 'sqlite' ) {
- $this->output( "Using SQLite file: '{$db->mDatabaseFile}'\n" );
+ $this->output( "Using SQLite file: '{$db->getDbFilePath()}'\n" );
}
$this->output( "Depending on the size of your database this may take a while!\n" );
@@ -178,11 +187,12 @@ class UpdateMediaWiki extends Maintenance {
}
}
+ $updater->setFileAccess();
if ( !$this->hasOption( 'nopurge' ) ) {
$updater->purgeCache();
}
- $time2 = new MWTimestamp();
+ $time2 = new MWTimestamp();
$timeDiff = $time2->diff( $time1 );
$this->output( "\nDone in " . $timeDiff->format( "%i:%S" ) . ".\n" );
}
diff --git a/maintenance/updateArticleCount.php b/maintenance/updateArticleCount.php
index 470647a4..55f535d2 100644
--- a/maintenance/updateArticleCount.php
+++ b/maintenance/updateArticleCount.php
@@ -37,12 +37,18 @@ class UpdateArticleCount extends Maintenance {
parent::__construct();
$this->mDescription = "Count of the number of articles and update the site statistics table";
$this->addOption( 'update', 'Update the site_stats table with the new count' );
+ $this->addOption( 'use-master', 'Count using the master database' );
}
public function execute() {
$this->output( "Counting articles..." );
- $counter = new SiteStatsInit( false );
+ if ( $this->hasOption( 'use-master' ) ) {
+ $dbr = wfGetDB( DB_MASTER );
+ } else {
+ $dbr = wfGetDB( DB_SLAVE, 'vslow' );
+ }
+ $counter = new SiteStatsInit( $dbr );
$result = $counter->articles();
$this->output( "found {$result}.\n" );
diff --git a/maintenance/updateSpecialPages.php b/maintenance/updateSpecialPages.php
index 61642828..d67ef6bb 100644
--- a/maintenance/updateSpecialPages.php
+++ b/maintenance/updateSpecialPages.php
@@ -81,16 +81,16 @@ class UpdateSpecialPages extends Maintenance {
if ( !$this->hasOption( 'only' ) || $this->getOption( 'only' ) == $queryPage->getName() ) {
$this->output( sprintf( '%-30s [QueryPage] ', $special ) );
if ( $queryPage->isExpensive() ) {
- $t1 = explode( ' ', microtime() );
+ $t1 = microtime( true );
# Do the query
$num = $queryPage->recache( $limit === null ? $wgQueryCacheLimit : $limit );
- $t2 = explode( ' ', microtime() );
+ $t2 = microtime( true );
if ( $num === false ) {
$this->output( "FAILED: database error\n" );
} else {
$this->output( "got $num rows in " );
- $elapsed = ( $t2[0] - $t1[0] ) + ( $t2[1] - $t1[1] );
+ $elapsed = $t2 - $t1;
$hours = intval( $elapsed / 3600 );
$minutes = intval( $elapsed % 3600 / 60 );
$seconds = $elapsed - $hours * 3600 - $minutes * 60;
@@ -139,12 +139,12 @@ class UpdateSpecialPages extends Maintenance {
continue;
}
$this->output( sprintf( '%-30s [callback] ', $special ) );
- $t1 = explode( ' ', microtime() );
+ $t1 = microtime( true );
call_user_func( $call, $dbw );
- $t2 = explode( ' ', microtime() );
+ $t2 = microtime( true );
$this->output( "completed in " );
- $elapsed = ( $t2[0] - $t1[0] ) + ( $t2[1] - $t1[1] );
+ $elapsed = $t2 - $t1;
$hours = intval( $elapsed / 3600 );
$minutes = intval( $elapsed % 3600 / 60 );
$seconds = $elapsed - $hours * 3600 - $minutes * 60;
diff --git a/maintenance/validateRegistrationFile.php b/maintenance/validateRegistrationFile.php
new file mode 100644
index 00000000..e7646610
--- /dev/null
+++ b/maintenance/validateRegistrationFile.php
@@ -0,0 +1,37 @@
+<?php
+
+require_once __DIR__ . '/Maintenance.php';
+
+class ValidateRegistrationFile extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addArg( 'path', 'Path to extension.json/skin.json file.', true );
+ }
+ public function execute() {
+ if ( !class_exists( 'JsonSchema\Uri\UriRetriever' ) ) {
+ $this->error( 'The JsonSchema library cannot be found, please install it through composer.', 1 );
+ }
+
+ $retriever = new JsonSchema\Uri\UriRetriever();
+ $schema = $retriever->retrieve('file://' . dirname( __DIR__ ) . '/docs/extension.schema.json' );
+ $path = $this->getArg( 0 );
+ $data = json_decode( file_get_contents( $path ) );
+ if ( !is_object( $data ) ) {
+ $this->error( "$path is not a valid JSON file.", 1 );
+ }
+
+ $validator = new JsonSchema\Validator();
+ $validator->check( $data, $schema );
+ if ( $validator->isValid() ) {
+ $this->output( "$path validates against the schema!\n" );
+ } else {
+ foreach ( $validator->getErrors() as $error ) {
+ $this->output( "[{$error['property']}] {$error['message']}\n" );
+ }
+ $this->error( "$path does not validate.", 1 );
+ }
+ }
+}
+
+$maintClass = 'ValidateRegistrationFile';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/mw-config/index.php b/mw-config/index.php
index a6cebc39..be811dc9 100644
--- a/mw-config/index.php
+++ b/mw-config/index.php
@@ -20,12 +20,10 @@
* @file
*/
-// Bail if PHP is too low
-if ( !function_exists( 'version_compare' ) || version_compare( PHP_VERSION, '5.3.2' ) < 0 ) {
- // We need to use dirname( __FILE__ ) here cause __DIR__ is PHP5.3+
- require dirname( dirname( __FILE__ ) ) . '/includes/PHPVersionError.php';
- wfPHPVersionError( 'mw-config/index.php' );
-}
+// Bail on old versions of PHP, or if composer has not been run yet to install
+// dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
+require_once dirname( __FILE__ ) . '/../includes/PHPVersionCheck.php';
+wfEntryPointCheck( 'mw-config/index.php' );
define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
define( 'MEDIAWIKI_INSTALL', true );
diff --git a/mw-config/overrides.php b/mw-config/overrides.php
index 57581525..40b3ddee 100644
--- a/mw-config/overrides.php
+++ b/mw-config/overrides.php
@@ -38,7 +38,7 @@ Then add the following to the bottom of this file:
class MyLocalSettingsGenerator extends LocalSettingsGenerator {
function getText() {
// Modify an existing setting
- $this->values['wgResourceLoaderMaxQueryLength'] = 512;
+ $this->values['wgDefaultSkin'] = 'vector';
// add a new setting
$ls = parent::getText();
return $ls . "\n\$wgUseTex = true;\n";
diff --git a/opensearch_desc.php b/opensearch_desc.php
index ecd5051c..5e5e35d3 100644
--- a/opensearch_desc.php
+++ b/opensearch_desc.php
@@ -78,13 +78,18 @@ $urls[] = array(
'method' => 'get',
'template' => $searchPage->getCanonicalURL( 'search={searchTerms}' ) );
-if ( $wgEnableAPI ) {
- // JSON interface for search suggestions.
- // Supported in Firefox 2 and later.
- $urls[] = array(
- 'type' => 'application/x-suggestions+json',
- 'method' => 'get',
- 'template' => SearchEngine::getOpenSearchTemplate() );
+foreach ( $wgOpenSearchTemplates as $type => $template ) {
+ if ( !$template && $wgEnableAPI ) {
+ $template = ApiOpenSearch::getOpenSearchTemplate( $type );
+ }
+
+ if ( $template ) {
+ $urls[] = array(
+ 'type' => $type,
+ 'method' => 'get',
+ 'template' => $template,
+ );
+ }
}
// Allow hooks to override the suggestion URL settings in a more
diff --git a/opensearch_desc.php5 b/opensearch_desc.php5
index a4dde371..874920ea 100644
--- a/opensearch_desc.php5
+++ b/opensearch_desc.php5
@@ -21,4 +21,6 @@
* @file
*/
+define( 'MW_ENTRY_PHP5', true );
+
require './opensearch_desc.php';
diff --git a/profileinfo.php b/profileinfo.php
index 762af69c..f172cfb6 100644
--- a/profileinfo.php
+++ b/profileinfo.php
@@ -27,7 +27,7 @@
ini_set( 'zlib.output_compression', 'off' );
-$wgEnableProfileInfo = $wgProfileToDatabase = false;
+$wgEnableProfileInfo = false;
require __DIR__ . '/includes/WebStart.php';
header( 'Content-Type: text/html; charset=utf-8' );
@@ -36,7 +36,7 @@ header( 'Content-Type: text/html; charset=utf-8' );
<!DOCTYPE html>
<html>
<head>
- <meta charset="UTF-8">
+ <meta charset="UTF-8" />
<title>Profiling data</title>
<style>
/* noc.wikimedia.org/base.css */
@@ -149,8 +149,8 @@ $dbr = wfGetDB( DB_SLAVE );
if ( !$dbr->tableExists( 'profiling' ) ) {
echo '<p>No <code>profiling</code> table exists, so we can\'t show you anything.</p>'
- . '<p>If you want to log profiling data, enable <code>$wgProfileToDatabase</code>'
- . ' in your LocalSettings.php and run <code>maintenance/update.php</code> to'
+ . '<p>If you want to log profiling data, enable <code>$wgProfiler[\'output\'] = \'db\'</code>'
+ . ' in your StartProfiler.php and run <code>maintenance/update.php</code> to'
. ' create the profiling table.'
. '</body></html>';
exit( 1 );
@@ -384,7 +384,7 @@ if ( isset( $_REQUEST['filter'] ) ) {
$last = false;
foreach ( $res as $o ) {
$next = new profile_point( $o->pf_name, $o->pf_count, $o->pf_time, $o->pf_memory );
- if ( $next->name() == '-total' ) {
+ if ( $next->name() == '-total' || $next->name() == 'main()' ) {
profile_point::$totaltime = $next->time();
profile_point::$totalcount = $next->count();
profile_point::$totalmemory = $next->memory();
@@ -422,7 +422,7 @@ if ( isset( $_REQUEST['filter'] ) ) {
?>
</tbody>
</table>
-<hr>
+<hr />
<p>Total time: <code><?php printf( '%5.02f', profile_point::$totaltime ); ?></code></p>
<p>Total memory: <code><?php printf( '%5.02f', profile_point::$totalmemory / 1024 ); ?></code></p>
diff --git a/profileinfo.php5 b/profileinfo.php5
index 14ef4214..6d430f60 100644
--- a/profileinfo.php5
+++ b/profileinfo.php5
@@ -21,4 +21,6 @@
* @file
*/
+define( 'MW_ENTRY_PHP5', true );
+
require './profileinfo.php';
diff --git a/resources/Resources.php b/resources/Resources.php
index ec1c0fc4..2c0ca9d9 100644
--- a/resources/Resources.php
+++ b/resources/Resources.php
@@ -29,12 +29,19 @@ return array(
/**
* Special modules who have their own classes
*/
+ 'startup' => array( 'class' => 'ResourceLoaderStartUpModule' ),
// Scripts managed by the local wiki (stored in the MediaWiki namespace)
'site' => array( 'class' => 'ResourceLoaderSiteModule' ),
- 'noscript' => array( 'class' => 'ResourceLoaderNoscriptModule' ),
- 'startup' => array( 'class' => 'ResourceLoaderStartUpModule' ),
- 'filepage' => array( 'class' => 'ResourceLoaderFilePageModule' ),
+ 'noscript' => array(
+ 'class' => 'ResourceLoaderWikiModule',
+ 'styles' => array( 'MediaWiki:Noscript.css' ),
+ 'group' => 'noscript',
+ ),
+ 'filepage' => array(
+ 'class' => 'ResourceLoaderWikiModule',
+ 'styles' => array( 'MediaWiki:Filepage.css' ),
+ ),
'user.groups' => array( 'class' => 'ResourceLoaderUserGroupsModule' ),
// Scripts managed by the current user (stored in their user space)
@@ -44,6 +51,7 @@ return array(
'user.cssprefs' => array( 'class' => 'ResourceLoaderUserCSSPrefsModule' ),
// Populate mediawiki.user placeholders with information about the current user
+ 'user.defaults' => array( 'class' => 'ResourceLoaderUserDefaultsModule' ),
'user.options' => array( 'class' => 'ResourceLoaderUserOptionsModule' ),
'user.tokens' => array( 'class' => 'ResourceLoaderUserTokensModule' ),
@@ -93,6 +101,7 @@ return array(
),
),
'mediawiki.skinning.interface' => array(
+ 'class' => 'ResourceLoaderSkinModule',
// Used in the web installer. Test it after modifying this definition!
'styles' => array(
'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ),
@@ -120,14 +129,9 @@ return array(
/* jQuery */
'jquery' => array(
- 'scripts' => ( $GLOBALS['wgIncludejQueryMigrate'] ?
- array(
- 'resources/lib/jquery/jquery.js',
- 'resources/lib/jquery/jquery.migrate.js'
- ) :
- array(
- 'resources/lib/jquery/jquery.js'
- ) ),
+ 'scripts' => array(
+ 'resources/lib/jquery/jquery.js',
+ ),
'raw' => true,
'targets' => array( 'desktop', 'mobile' ),
),
@@ -181,7 +185,7 @@ return array(
'styles' => 'resources/lib/jquery.chosen/chosen.css',
),
'jquery.client' => array(
- 'scripts' => 'resources/src/jquery/jquery.client.js',
+ 'scripts' => 'resources/lib/jquery.client/jquery.client.js',
'targets' => array( 'desktop', 'mobile' ),
),
'jquery.color' => array(
@@ -244,14 +248,6 @@ return array(
'jquery.hoverIntent' => array(
'scripts' => 'resources/lib/jquery/jquery.hoverIntent.js',
),
- 'jquery.json' => array(
- // @deprecated since 1.24: Use the 'json' module and global JSON object instead.
- 'scripts' => array(
- 'resources/lib/jquery/jquery.json.js',
- 'resources/src/jquery.json-deprecate.js',
- ),
- 'targets' => array( 'mobile', 'desktop' ),
- ),
'jquery.localize' => array(
'scripts' => 'resources/src/jquery/jquery.localize.js',
),
@@ -277,8 +273,8 @@ return array(
'targets' => array( 'desktop', 'mobile' ),
),
'jquery.qunit' => array(
- 'scripts' => 'resources/lib/jquery/jquery.qunit.js',
- 'styles' => 'resources/lib/jquery/jquery.qunit.css',
+ 'scripts' => 'resources/lib/qunitjs/qunit.js',
+ 'styles' => 'resources/lib/qunitjs/qunit.css',
'position' => 'top',
'targets' => array( 'desktop', 'mobile' ),
),
@@ -318,6 +314,7 @@ return array(
),
'jquery.throttle-debounce' => array(
'scripts' => 'resources/lib/jquery/jquery.ba-throttle-debounce.js',
+ 'targets' => array( 'desktop', 'mobile' ),
),
'jquery.validate' => array(
'scripts' => 'resources/lib/jquery/jquery.validate.js',
@@ -769,16 +766,44 @@ return array(
'zh-cn' => 'resources/lib/moment/locale/zh-cn.js',
'zh-tw' => 'resources/lib/moment/locale/zh-tw.js',
),
+ 'targets' => array( 'desktop', 'mobile' ),
),
/* MediaWiki */
'mediawiki' => array(
- 'scripts' => 'resources/src/mediawiki/mediawiki.js',
+ // Keep maintenance/jsduck/eg-iframe.html in sync
+ 'scripts' => array(
+ 'resources/src/mediawiki/mediawiki.js',
+ 'resources/src/mediawiki/mediawiki.errorLogger.js',
+ 'resources/src/mediawiki/mediawiki.startUp.js',
+ ),
'debugScripts' => 'resources/src/mediawiki/mediawiki.log.js',
'raw' => true,
'targets' => array( 'desktop', 'mobile' ),
),
+ 'mediawiki.apihelp' => array(
+ 'styles' => 'resources/src/mediawiki/mediawiki.apihelp.css',
+ 'targets' => array( 'desktop' ),
+ 'dependencies' => 'mediawiki.hlist',
+ 'position' => 'top',
+ ),
+ 'mediawiki.template' => array(
+ 'scripts' => 'resources/src/mediawiki/mediawiki.template.js',
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
+ 'mediawiki.template.mustache' => array(
+ 'scripts' => array(
+ 'resources/lib/mustache/mustache.js',
+ 'resources/src/mediawiki/mediawiki.template.mustache.js',
+ ),
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
+ 'mediawiki.apipretty' => array(
+ 'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
+ 'targets' => array( 'desktop', 'mobile' ),
+ 'position' => 'top',
+ ),
'mediawiki.api' => array(
'scripts' => 'resources/src/mediawiki.api/mediawiki.api.js',
'dependencies' => 'mediawiki.util',
@@ -798,12 +823,16 @@ return array(
'mediawiki.Title',
'user.tokens',
),
+ 'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.api.login' => array(
'scripts' => 'resources/src/mediawiki.api/mediawiki.api.login.js',
- 'dependencies' => array(
- 'mediawiki.api',
- ),
+ 'dependencies' => 'mediawiki.api',
+ ),
+ 'mediawiki.api.options' => array(
+ 'scripts' => 'resources/src/mediawiki.api/mediawiki.api.options.js',
+ 'dependencies' => 'mediawiki.api',
+ 'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.api.parse' => array(
'scripts' => 'resources/src/mediawiki.api/mediawiki.api.parse.js',
@@ -819,14 +848,18 @@ return array(
'mediawiki.content.json' => array(
'styles' => 'resources/src/mediawiki/mediawiki.content.json.css',
),
+ 'mediawiki.confirmCloseWindow' => array(
+ 'scripts' => array(
+ 'resources/src/mediawiki/mediawiki.confirmCloseWindow.js',
+ ),
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
'mediawiki.debug' => array(
'scripts' => array(
'resources/src/mediawiki/mediawiki.debug.js',
- 'resources/src/mediawiki/mediawiki.debug.profile.js'
),
'styles' => array(
'resources/src/mediawiki/mediawiki.debug.less',
- 'resources/src/mediawiki/mediawiki.debug.profile.css'
),
'dependencies' => array(
'jquery.footHovzer',
@@ -845,48 +878,73 @@ return array(
'scripts' => 'resources/src/mediawiki/mediawiki.feedback.js',
'styles' => 'resources/src/mediawiki/mediawiki.feedback.css',
'dependencies' => array(
- 'mediawiki.api.edit',
+ 'mediawiki.messagePoster',
'mediawiki.Title',
- 'mediawiki.jqueryMsg',
- 'jquery.ui.dialog',
+ 'oojs-ui',
),
'messages' => array(
+ 'feedback-adding',
+ 'feedback-back',
+ 'feedback-bugcheck',
+ 'feedback-dialog-intro',
+ 'feedback-external-bug-report-button',
+ 'feedback-bugnew',
'feedback-bugornote',
- 'feedback-subject',
- 'feedback-message',
'feedback-cancel',
- 'feedback-submit',
- 'feedback-adding',
+ 'feedback-close',
+ 'feedback-dialog-title',
+ 'feedback-error-title',
'feedback-error1',
'feedback-error2',
'feedback-error3',
+ 'feedback-error4',
+ 'feedback-message',
+ 'feedback-subject',
+ 'feedback-submit',
+ 'feedback-terms',
+ 'feedback-termsofuse',
'feedback-thanks',
- 'feedback-close',
- 'feedback-bugcheck',
- 'feedback-bugnew',
+ 'feedback-thanks-title',
+ 'feedback-useragent'
),
),
- 'mediawiki.hidpi' => array(
- 'scripts' => 'resources/src/mediawiki/mediawiki.hidpi.js',
+
+ 'mediawiki.filewarning' => array(
+ 'scripts' => 'resources/src/mediawiki/mediawiki.filewarning.js',
+ 'styles' => 'resources/src/mediawiki/mediawiki.filewarning.less',
'dependencies' => array(
- 'jquery.hidpi',
+ 'oojs-ui',
+ ),
+ ),
+
+ 'mediawiki.helplink' => array(
+ 'styles' => array(
+ 'resources/src/mediawiki/mediawiki.helplink.less',
),
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
+ 'mediawiki.hidpi' => array(
+ 'scripts' => 'resources/src/mediawiki/mediawiki.hidpi.js',
+ 'dependencies' => 'jquery.hidpi',
'skipFunction' => 'resources/src/mediawiki.hidpi-skip.js',
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.hlist' => array(
'styles' => 'resources/src/mediawiki/mediawiki.hlist.css',
'scripts' => 'resources/src/mediawiki/mediawiki.hlist.js',
- 'dependencies' => array(
- 'jquery.client',
- ),
+ 'dependencies' => 'jquery.client',
),
'mediawiki.htmlform' => array(
'scripts' => 'resources/src/mediawiki/mediawiki.htmlform.js',
'dependencies' => array(
'jquery.mwExtension',
+ 'jquery.byteLimit',
+ ),
+ 'messages' => array(
+ 'htmlform-chosen-placeholder',
+ // @todo Load this message in content language
+ 'colon-separator',
),
- 'messages' => array( 'htmlform-chosen-placeholder' ),
),
'mediawiki.icon' => array(
'styles' => 'resources/src/mediawiki/mediawiki.icon.less',
@@ -899,6 +957,27 @@ return array(
),
'targets' => array( 'desktop', 'mobile' ),
),
+ 'mediawiki.messagePoster' => array(
+ 'scripts' => array(
+ 'resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js',
+ 'resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js',
+ ),
+ 'dependencies' => array(
+ 'oojs',
+ 'mediawiki.api',
+ ),
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
+ 'mediawiki.messagePoster.wikitext' => array(
+ 'scripts' => array(
+ 'resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js',
+ ),
+ 'dependencies' => array(
+ 'mediawiki.api.edit',
+ 'mediawiki.messagePoster',
+ ),
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
'mediawiki.notification' => array(
'styles' => array(
'resources/src/mediawiki/mediawiki.notification.css',
@@ -906,9 +985,7 @@ return array(
=> array( 'media' => 'print' ),
),
'scripts' => 'resources/src/mediawiki/mediawiki.notification.js',
- 'dependencies' => array(
- 'mediawiki.page.startup',
- ),
+ 'dependencies' => 'mediawiki.page.startup',
'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.notify' => array(
@@ -930,9 +1007,15 @@ return array(
'jquery.client',
'jquery.placeholder',
'jquery.suggestions',
+ 'jquery.getAttrs',
'mediawiki.api',
),
),
+ 'mediawiki.sectionAnchor' => array(
+ // Back-compat to hide it on cached pages (T18691; Ie9e334e973; 2015-03-17)
+ 'styles' => 'resources/src/mediawiki/mediawiki.sectionAnchor.css',
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
'mediawiki.Title' => array(
'scripts' => 'resources/src/mediawiki/mediawiki.Title.js',
'dependencies' => array(
@@ -943,9 +1026,7 @@ return array(
),
'mediawiki.toc' => array(
'scripts' => 'resources/src/mediawiki/mediawiki.toc.js',
- 'dependencies' => array(
- 'jquery.cookie',
- ),
+ 'dependencies' => 'jquery.cookie',
'messages' => array( 'showtoc', 'hidetoc' ),
'targets' => array( 'desktop', 'mobile' ),
),
@@ -964,6 +1045,13 @@ return array(
),
'targets' => array( 'desktop', 'mobile' ),
),
+ 'mediawiki.userSuggest' => array(
+ 'scripts' => 'resources/src/mediawiki/mediawiki.userSuggest.js',
+ 'dependencies' => array(
+ 'jquery.suggestions',
+ 'mediawiki.api'
+ )
+ ),
'mediawiki.util' => array(
'scripts' => 'resources/src/mediawiki/mediawiki.util.js',
'dependencies' => array(
@@ -976,9 +1064,14 @@ return array(
),
'mediawiki.cookie' => array(
'scripts' => 'resources/src/mediawiki/mediawiki.cookie.js',
- 'dependencies' => array(
- 'jquery.cookie',
- ),
+ 'dependencies' => 'jquery.cookie',
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
+ 'mediawiki.toolbar' => array(
+ 'class' => 'ResourceLoaderEditToolbarModule',
+ 'scripts' => 'resources/src/mediawiki.toolbar/toolbar.js',
+ 'styles' => 'resources/src/mediawiki.toolbar/toolbar.less',
+ 'position' => 'top',
),
/* MediaWiki Action */
@@ -988,7 +1081,6 @@ return array(
'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.css',
'dependencies' => array(
'mediawiki.action.edit.styles',
- 'mediawiki.action.edit.toolbar',
'jquery.textSelection',
'jquery.byteLimit',
),
@@ -998,10 +1090,6 @@ return array(
'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.styles.css',
'position' => 'top',
),
- 'mediawiki.action.edit.toolbar' => array(
- 'class' => 'ResourceLoaderEditToolbarModule',
- 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less',
- ),
'mediawiki.action.edit.collapsibleFooter' => array(
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js',
'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.css',
@@ -1016,7 +1104,33 @@ return array(
'dependencies' => array(
'jquery.form',
'jquery.spinner',
+ 'jquery.textSelection',
+ 'mediawiki.api',
'mediawiki.action.history.diff',
+ 'mediawiki.util',
+ 'mediawiki.jqueryMsg',
+ ),
+ 'messages' => array(
+ // Keep the uses message keys in sync with EditPage#setHeaders
+ 'creating',
+ 'editconflict',
+ 'editing',
+ 'editingcomment',
+ 'editingsection',
+ 'pagetitle',
+ 'otherlanguages',
+ 'tooltip-p-lang',
+ 'summary-preview',
+ 'subject-preview',
+ 'parentheses',
+ 'previewerrortext',
+ ),
+ ),
+ 'mediawiki.action.edit.stash' => array(
+ 'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.stash.js',
+ 'dependencies' => array(
+ 'jquery.getAttrs',
+ 'mediawiki.api',
),
),
'mediawiki.action.history' => array(
@@ -1025,7 +1139,12 @@ return array(
'group' => 'mediawiki.action.history',
),
'mediawiki.action.history.diff' => array(
- 'styles' => 'resources/src/mediawiki.action/mediawiki.action.history.diff.css',
+ 'styles' => array(
+ 'resources/src/mediawiki.action/mediawiki.action.history.diff.css',
+ 'resources/src/mediawiki.action/mediawiki.action.history.diff.print.css' => array(
+ 'media' => 'print'
+ ),
+ ),
'group' => 'mediawiki.action.history',
'targets' => array( 'desktop', 'mobile' ),
),
@@ -1034,6 +1153,7 @@ return array(
'dependencies' => array(
'mediawiki.util',
'mediawiki.page.startup',
+ 'user.options',
),
),
'mediawiki.action.view.metadata' => array(
@@ -1044,7 +1164,14 @@ return array(
'metadata-collapse',
),
),
+ 'mediawiki.action.view.categoryPage.styles' => array(
+ 'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less',
+ 'targets' => array( 'desktop', 'mobile' )
+ ),
'mediawiki.action.view.postEdit' => array(
+ 'templates' => array(
+ 'postEdit.html' => 'resources/src/mediawiki.action/templates/postEdit.html',
+ ),
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.postEdit.js',
'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.postEdit.css',
'dependencies' => array(
@@ -1059,9 +1186,7 @@ return array(
),
'mediawiki.action.view.redirect' => array(
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.redirect.js',
- 'dependencies' => array(
- 'jquery.client',
- ),
+ 'dependencies' => 'jquery.client',
'position' => 'top',
),
'mediawiki.action.view.redirectPage' => array(
@@ -1075,10 +1200,12 @@ return array(
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js',
'dependencies' => array(
'jquery.textSelection',
- 'mediawiki.jqueryMsg'
+ 'mediawiki.jqueryMsg',
+ 'mediawiki.confirmCloseWindow',
),
'messages' => array(
'editwarning-warning',
+ // editwarning-warning uses {{int:prefs-editing}}
'prefs-editing'
),
),
@@ -1107,9 +1234,9 @@ return array(
'uk' => 'resources/src/mediawiki.language/languages/uk.js',
),
'dependencies' => array(
- 'mediawiki.language.data',
- 'mediawiki.cldr',
- ),
+ 'mediawiki.language.data',
+ 'mediawiki.cldr',
+ ),
'targets' => array( 'desktop', 'mobile' ),
'messages' => array(
'and',
@@ -1157,6 +1284,10 @@ return array(
'mediawiki.language.names' => array( 'class' => 'ResourceLoaderLanguageNamesModule' ),
+ 'mediawiki.language.specialCharacters' => array(
+ 'class' => 'ResourceLoaderSpecialCharacterDataModule'
+ ),
+
/* MediaWiki Libs */
'mediawiki.libs.jpegmeta' => array(
@@ -1167,6 +1298,9 @@ return array(
'mediawiki.page.gallery' => array(
'scripts' => 'resources/src/mediawiki.page/mediawiki.page.gallery.js',
+ 'dependencies' => array(
+ 'jquery.throttle-debounce',
+ )
),
'mediawiki.page.ready' => array(
'scripts' => 'resources/src/mediawiki.page/mediawiki.page.ready.js',
@@ -1181,9 +1315,7 @@ return array(
),
'mediawiki.page.startup' => array(
'scripts' => 'resources/src/mediawiki.page/mediawiki.page.startup.js',
- 'dependencies' => array(
- 'mediawiki.util',
- ),
+ 'dependencies' => 'mediawiki.util',
'position' => 'top',
'targets' => array( 'desktop', 'mobile' ),
),
@@ -1242,16 +1374,12 @@ return array(
'mediawiki.special.block' => array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.block.js',
'styles' => 'resources/src/mediawiki.special/mediawiki.special.block.css',
- 'dependencies' => array(
- 'mediawiki.util',
- ),
+ 'dependencies' => 'mediawiki.util',
),
'mediawiki.special.changeemail' => array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.changeemail.js',
'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeemail.css',
- 'dependencies' => array(
- 'mediawiki.util',
- ),
+ 'dependencies' => 'mediawiki.util',
'messages' => array(
'email-address-validity-valid',
'email-address-validity-invalid',
@@ -1273,6 +1401,20 @@ return array(
'mediawiki.special.changeslist.enhanced' => array(
'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css',
),
+ 'mediawiki.special.edittags' => array(
+ 'scripts' => 'resources/src/mediawiki.special/mediawiki.special.edittags.js',
+ 'dependencies' => array(
+ 'jquery.chosen',
+ ),
+ 'messages' => array(
+ 'tags-edit-chosen-placeholder',
+ 'tags-edit-chosen-no-results',
+ ),
+ ),
+ 'mediawiki.special.edittags.styles' => array(
+ 'styles' => 'resources/src/mediawiki.special/mediawiki.special.edittags.css',
+ 'position' => 'top',
+ ),
'mediawiki.special.import' => array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.import.js',
),
@@ -1297,11 +1439,12 @@ return array(
),
'dependencies' => array(
'mediawiki.language',
+ 'mediawiki.confirmCloseWindow',
),
),
'mediawiki.special.recentchanges' => array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.recentchanges.js',
- 'dependencies' => array( 'mediawiki.special' ),
+ 'dependencies' => 'mediawiki.special',
'position' => 'top',
),
'mediawiki.special.search' => array(
@@ -1317,6 +1460,9 @@ return array(
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.undelete.js',
),
'mediawiki.special.upload' => array(
+ 'templates' => array(
+ 'thumbnail.html' => 'resources/src/mediawiki.special/templates/thumbnail.html',
+ ),
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.upload.js',
'messages' => array(
'widthheight',
@@ -1325,13 +1471,18 @@ return array(
'size-megabytes',
'size-gigabytes',
'largefileserver',
+ 'editwarning-warning',
+ // editwarning-warning uses {{int:prefs-editing}}
+ 'prefs-editing',
),
'dependencies' => array(
'jquery.spinner',
+ 'mediawiki.jqueryMsg',
'mediawiki.api',
'mediawiki.libs.jpegmeta',
'mediawiki.Title',
'mediawiki.util',
+ 'mediawiki.confirmCloseWindow',
),
),
'mediawiki.special.userlogin.common.styles' => array(
@@ -1401,9 +1552,7 @@ return array(
'colon-separator',
'javascripttest-pagetext-skins',
) ),
- 'dependencies' => array(
- 'mediawiki.Uri',
- ),
+ 'dependencies' => 'mediawiki.Uri',
'position' => 'top',
'targets' => array( 'desktop', 'mobile' ),
),
@@ -1437,9 +1586,7 @@ return array(
),
'mediawiki.legacy.protect' => array(
'scripts' => 'resources/src/mediawiki.legacy/protect.js',
- 'dependencies' => array(
- 'jquery.byteLimit',
- ),
+ 'dependencies' => 'jquery.byteLimit',
'messages' => array( 'protect-unchain-permissions' )
),
'mediawiki.legacy.shared' => array(
@@ -1455,9 +1602,7 @@ return array(
),
'mediawiki.legacy.wikibits' => array(
'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
- 'dependencies' => array(
- 'mediawiki.util',
- ),
+ 'dependencies' => 'mediawiki.util',
'position' => 'top',
),
@@ -1481,6 +1626,15 @@ return array(
'position' => 'top',
'targets' => array( 'desktop', 'mobile' ),
),
+ 'mediawiki.ui.radio' => array(
+ 'skinStyles' => array(
+ 'default' => array(
+ 'resources/src/mediawiki.ui/components/radio.less',
+ ),
+ ),
+ 'position' => 'top',
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
// Lightweight module for anchor styles
'mediawiki.ui.anchor' => array(
'skinStyles' => array(
@@ -1510,6 +1664,25 @@ return array(
'position' => 'top',
'targets' => array( 'desktop', 'mobile' ),
),
+ 'mediawiki.ui.icon' => array(
+ 'skinStyles' => array(
+ 'default' => array(
+ 'resources/src/mediawiki.ui/components/icons.less',
+ ),
+ ),
+ 'position' => 'top',
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
+ // Lightweight module for text styles
+ 'mediawiki.ui.text' => array(
+ 'skinStyles' => array(
+ 'default' => array(
+ 'resources/src/mediawiki.ui/components/text.less',
+ ),
+ ),
+ 'position' => 'top',
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
/* es5-shim */
'es5-shim' => array(
@@ -1540,29 +1713,37 @@ return array(
'scripts' => array(
'resources/lib/oojs-ui/oojs-ui.js',
),
- 'styles' => array(
- 'resources/lib/oojs-ui/oojs-ui.svg.css',
+ 'skinScripts' => array(
+ 'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.js',
),
- 'skinStyles' => array(
- 'default' => 'resources/lib/oojs-ui/oojs-ui-apex.css',
- // FIXME As of July 2014, this is to be gone "in a couple of months".
- 'minerva' => 'resources/lib/oojs-ui/oojs-ui-minerva.css',
+ 'dependencies' => array(
+ 'es5-shim',
+ 'oojs',
+ 'oojs-ui.styles',
),
'messages' => array(
- 'ooui-outline-control-move-down',
- 'ooui-outline-control-move-up',
- 'ooui-outline-control-remove',
- 'ooui-toolbar-more',
'ooui-dialog-message-accept',
'ooui-dialog-message-reject',
+ 'ooui-dialog-process-continue',
'ooui-dialog-process-dismiss',
'ooui-dialog-process-error',
'ooui-dialog-process-retry',
+ 'ooui-outline-control-move-down',
+ 'ooui-outline-control-move-up',
+ 'ooui-outline-control-remove',
+ 'ooui-toolbar-more',
+ 'ooui-toolgroup-collapse',
+ 'ooui-toolgroup-expand',
),
- 'dependencies' => array(
- 'es5-shim',
- 'oojs',
+ 'targets' => array( 'desktop', 'mobile' ),
+ ),
+
+ 'oojs-ui.styles' => array(
+ 'position' => 'top',
+ 'skinStyles' => array(
+ 'default' => 'resources/lib/oojs-ui/oojs-ui-mediawiki.css',
),
'targets' => array( 'desktop', 'mobile' ),
),
+
);
diff --git a/resources/assets/file-type-icons/COPYING b/resources/assets/file-type-icons/COPYING
index 136530a9..19a775a8 100644
--- a/resources/assets/file-type-icons/COPYING
+++ b/resources/assets/file-type-icons/COPYING
@@ -1,4 +1,4 @@
-The icons used here are derived from the crystalsvg icons in the the
+The icons used here are derived from the crystalsvg icons in the
pics/crystalsvg/ directory of kdelibs-3.4.0 they were modified on 2005-05-15
by Ævar Arnfjörð Bjarmason for use in MediaWiki.
diff --git a/resources/assets/poweredby_mediawiki_132x47.png b/resources/assets/poweredby_mediawiki_132x47.png
new file mode 100644
index 00000000..a784ecff
--- /dev/null
+++ b/resources/assets/poweredby_mediawiki_132x47.png
Binary files differ
diff --git a/resources/assets/poweredby_mediawiki_176x62.png b/resources/assets/poweredby_mediawiki_176x62.png
new file mode 100644
index 00000000..79708012
--- /dev/null
+++ b/resources/assets/poweredby_mediawiki_176x62.png
Binary files differ
diff --git a/resources/lib/jquery.client/AUTHORS.txt b/resources/lib/jquery.client/AUTHORS.txt
new file mode 100644
index 00000000..9f186cac
--- /dev/null
+++ b/resources/lib/jquery.client/AUTHORS.txt
@@ -0,0 +1,9 @@
+Trevor Parscal <trevorparscal@gmail.com>
+Timo Tijhof <krinklemail@gmail.com>
+Roan Kattouw <roan.kattouw@gmail.com>
+Derk-Jan Hartman <hartman.wiki@gmail.com>
+Bartosz Dziewoński <matma.rex@gmail.com>
+Rob Moen <rmoen@wikimedia.org>
+Ed Sanders <esanders@wikimedia.org>
+Alex Monk <krenair@gmail.com>
+James D. Forrester <jforrester@wikimedia.org>
diff --git a/resources/lib/jquery.client/LICENSE-MIT.txt b/resources/lib/jquery.client/LICENSE-MIT.txt
new file mode 100644
index 00000000..f149289d
--- /dev/null
+++ b/resources/lib/jquery.client/LICENSE-MIT.txt
@@ -0,0 +1,20 @@
+Copyright 2010-2015 jquery-client maintainers and other contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/resources/lib/jquery.client/README.md b/resources/lib/jquery.client/README.md
new file mode 100644
index 00000000..02b5dd41
--- /dev/null
+++ b/resources/lib/jquery.client/README.md
@@ -0,0 +1,6 @@
+[![Build Status](https://travis-ci.org/wikimedia/jquery-client.svg?branch=master)](https://travis-ci.org/wikimedia/jquery-client) [![npm](https://img.shields.io/npm/v/jquery-client.svg?style=flat)](https://www.npmjs.com/package/jquery-client)
+
+jQuery Client
+=================
+
+jQuery Client is a jQuery plugin for user-agent detection.
diff --git a/resources/src/jquery/jquery.client.js b/resources/lib/jquery.client/jquery.client.js
index 662a6887..1560c7d2 100644
--- a/resources/src/jquery/jquery.client.js
+++ b/resources/lib/jquery.client/jquery.client.js
@@ -1,3 +1,12 @@
+/*!
+ * jQuery Client v1.0.0
+ * https://www.mediawiki.org/wiki/JQuery_Client
+ *
+ * Copyright 2010-2015 jquery-client maintainers and other contributors.
+ * Released under the MIT license
+ * http://jquery-client.mit-license.org
+ */
+
/**
* User-agent detection
*
@@ -33,7 +42,7 @@
* }
*/
profile: function ( nav ) {
- /*jshint boss: true */
+ /*jshint boss:true */
if ( nav === undefined ) {
nav = window.navigator;
@@ -87,11 +96,11 @@
// Tanslations for conforming browser names
nameTranslations = [],
// Names of known layout engines
- layouts = ['gecko', 'konqueror', 'msie', 'trident', 'opera', 'webkit'],
+ layouts = ['gecko', 'konqueror', 'msie', 'trident', 'edge', 'opera', 'webkit'],
// Translations for conforming layout names
layoutTranslations = [ ['konqueror', 'khtml'], ['msie', 'trident'], ['opera', 'presto'] ],
// Names of supported layout engines for version number
- layoutVersions = ['applewebkit', 'gecko', 'trident'],
+ layoutVersions = ['applewebkit', 'gecko', 'trident', 'edge'],
// Names of known operating systems
platforms = ['win', 'wow64', 'mac', 'linux', 'sunos', 'solaris', 'iphone'],
// Translations for conforming operating system names
@@ -173,6 +182,13 @@
version = match[1];
}
}
+ // And IE 12's different lies about not being IE
+ if ( name === 'chrome' && ( match = ua.match( /\bedge\/([0-9\.]*)/ ) ) ) {
+ name = 'msie';
+ version = match[1];
+ layout = 'edge';
+ layoutversion = parseInt( match[1], 10 );
+ }
// And Amazon Silk's lies about being Android on mobile or Safari on desktop
if ( match = ua.match( /\bsilk\/([0-9.\-_]*)/ ) ) {
if ( match[1] ) {
@@ -236,7 +252,7 @@
* @return {boolean} The current browser is in the support map
*/
test: function ( map, profile, exactMatchOnly ) {
- /*jshint evil: true */
+ /*jshint evil:true */
var conditions, dir, i, op, val, j, pieceVersion, pieceVal, compare;
profile = $.isPlainObject( profile ) ? profile : $.client.profile();
@@ -285,7 +301,7 @@
}
}
// compare will be -1, 0 or 1, depending on comparison result
- if ( !( eval( '' + compare + op + '0' ) ) ) {
+ if ( !( eval( String( compare + op + '0' ) ) ) ) {
return false;
}
} else if ( typeof val === 'number' ) {
diff --git a/resources/lib/jquery.ui/themes/smoothness/PATCHES b/resources/lib/jquery.ui/themes/smoothness/PATCHES
new file mode 100644
index 00000000..53fbe1fc
--- /dev/null
+++ b/resources/lib/jquery.ui/themes/smoothness/PATCHES
@@ -0,0 +1,3 @@
+jquery.ui.theme.css
+* Removed ".ui-widget-content a { color: #222222; }" and
+ ".ui-widget-header a { color: #222222; }" due to bug T85857.
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css
index 2e088ca1..d4f7db3b 100644
--- a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css
+++ b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.core.css
@@ -14,7 +14,7 @@
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; border-collapse: collapse; }
.ui-helper-clearfix:after { clear: both; }
.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
diff --git a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.theme.css b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.theme.css
index d170081b..1d8b8a8f 100644
--- a/resources/lib/jquery.ui/themes/smoothness/jquery.ui.theme.css
+++ b/resources/lib/jquery.ui/themes/smoothness/jquery.ui.theme.css
@@ -18,9 +18,7 @@
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; color: #222222; }
-.ui-widget-content a { color: #222222; }
.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; color: #222222; font-weight: bold; }
-.ui-widget-header a { color: #222222; }
/* Interaction states
----------------------------------*/
@@ -245,4 +243,4 @@
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } \ No newline at end of file
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
diff --git a/resources/lib/jquery/jquery.jStorage.js b/resources/lib/jquery/jquery.jStorage.js
index cc11aed1..45e19ac6 100644
--- a/resources/lib/jquery/jquery.jStorage.js
+++ b/resources/lib/jquery/jquery.jStorage.js
@@ -34,12 +34,15 @@
* For more information, please refer to <http://unlicense.org/>
*/
+/* global ActiveXObject: false */
+/* jshint browser: true */
+
(function() {
'use strict';
var
/* jStorage version */
- JSTORAGE_VERSION = '0.4.10',
+ JSTORAGE_VERSION = '0.4.12',
/* detect a dollar object or create one if not found */
$ = window.jQuery || window.$ || (window.$ = {}),
@@ -58,7 +61,7 @@
};
// Break if no JSON support was found
- if (!('parse' in JSON) || !('stringify' in JSON)) {
+ if (typeof JSON.parse !== 'function' || typeof JSON.stringify !== 'function') {
throw new Error('No JSON support found, include //cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js to page');
}
@@ -536,16 +539,21 @@
return;
}
var pubelm,
- _pubsubCurrent = _pubsub_last;
+ _pubsubCurrent = _pubsub_last,
+ needFired = [];
for (i = len = _storage.__jstorage_meta.PubSub.length - 1; i >= 0; i--) {
pubelm = _storage.__jstorage_meta.PubSub[i];
if (pubelm[0] > _pubsub_last) {
_pubsubCurrent = pubelm[0];
- _fireSubscribers(pubelm[1], pubelm[2]);
+ needFired.unshift(pubelm);
}
}
+ for (i = needFired.length - 1; i >= 0; i--) {
+ _fireSubscribers(needFired[i][1], needFired[i][2]);
+ }
+
_pubsub_last = _pubsubCurrent;
}
@@ -653,8 +661,10 @@
switch (l) {
case 3:
h ^= (str.charCodeAt(i + 2) & 0xff) << 16;
+ /* falls through */
case 2:
h ^= (str.charCodeAt(i + 1) & 0xff) << 8;
+ /* falls through */
case 1:
h ^= (str.charCodeAt(i) & 0xff);
h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));
@@ -983,4 +993,4 @@
// Initialize jStorage
_init();
-})(); \ No newline at end of file
+})();
diff --git a/resources/lib/jquery/jquery.js b/resources/lib/jquery/jquery.js
index 1c3aa822..6feb1108 100644
--- a/resources/lib/jquery/jquery.js
+++ b/resources/lib/jquery/jquery.js
@@ -1,5 +1,5 @@
/*!
- * jQuery JavaScript Library v1.11.2
+ * jQuery JavaScript Library v1.11.3
* http://jquery.com/
*
* Includes Sizzle.js
@@ -9,7 +9,7 @@
* Released under the MIT license
* http://jquery.org/license
*
- * Date: 2014-12-17T15:27Z
+ * Date: 2015-04-28T16:19Z
*/
(function( global, factory ) {
@@ -64,7 +64,7 @@ var support = {};
var
- version = "1.11.2",
+ version = "1.11.3",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
@@ -569,7 +569,12 @@ jQuery.each("Boolean Number String Function Array Date RegExp Object Error".spli
});
function isArraylike( obj ) {
- var length = obj.length,
+
+ // Support: iOS 8.2 (not reproducible in simulator)
+ // `in` check used to prevent JIT error (gh-2145)
+ // hasOwn isn't used here due to false negatives
+ // regarding Nodelist length in IE
+ var length = "length" in obj && obj.length,
type = jQuery.type( obj );
if ( type === "function" || jQuery.isWindow( obj ) ) {
diff --git a/resources/lib/jquery/jquery.json.js b/resources/lib/jquery/jquery.json.js
deleted file mode 100644
index 75953f4d..00000000
--- a/resources/lib/jquery/jquery.json.js
+++ /dev/null
@@ -1,199 +0,0 @@
-/**
- * jQuery JSON plugin 2.4.0
- *
- * @author Brantley Harris, 2009-2011
- * @author Timo Tijhof, 2011-2012
- * @source This plugin is heavily influenced by MochiKit's serializeJSON, which is
- * copyrighted 2005 by Bob Ippolito.
- * @source Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
- * website's http://www.json.org/json2.js, which proclaims:
- * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
- * I uphold.
- * @license MIT License <http://www.opensource.org/licenses/mit-license.php>
- */
-(function ($) {
- 'use strict';
-
- var escape = /["\\\x00-\x1f\x7f-\x9f]/g,
- meta = {
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- hasOwn = Object.prototype.hasOwnProperty;
-
- /**
- * jQuery.toJSON
- * Converts the given argument into a JSON representation.
- *
- * @param o {Mixed} The json-serializable *thing* to be converted
- *
- * If an object has a toJSON prototype, that will be used to get the representation.
- * Non-integer/string keys are skipped in the object, as are keys that point to a
- * function.
- *
- */
- $.toJSON = typeof JSON === 'object' && JSON.stringify ? JSON.stringify : function (o) {
- if (o === null) {
- return 'null';
- }
-
- var pairs, k, name, val,
- type = $.type(o);
-
- if (type === 'undefined') {
- return undefined;
- }
-
- // Also covers instantiated Number and Boolean objects,
- // which are typeof 'object' but thanks to $.type, we
- // catch them here. I don't know whether it is right
- // or wrong that instantiated primitives are not
- // exported to JSON as an {"object":..}.
- // We choose this path because that's what the browsers did.
- if (type === 'number' || type === 'boolean') {
- return String(o);
- }
- if (type === 'string') {
- return $.quoteString(o);
- }
- if (typeof o.toJSON === 'function') {
- return $.toJSON(o.toJSON());
- }
- if (type === 'date') {
- var month = o.getUTCMonth() + 1,
- day = o.getUTCDate(),
- year = o.getUTCFullYear(),
- hours = o.getUTCHours(),
- minutes = o.getUTCMinutes(),
- seconds = o.getUTCSeconds(),
- milli = o.getUTCMilliseconds();
-
- if (month < 10) {
- month = '0' + month;
- }
- if (day < 10) {
- day = '0' + day;
- }
- if (hours < 10) {
- hours = '0' + hours;
- }
- if (minutes < 10) {
- minutes = '0' + minutes;
- }
- if (seconds < 10) {
- seconds = '0' + seconds;
- }
- if (milli < 100) {
- milli = '0' + milli;
- }
- if (milli < 10) {
- milli = '0' + milli;
- }
- return '"' + year + '-' + month + '-' + day + 'T' +
- hours + ':' + minutes + ':' + seconds +
- '.' + milli + 'Z"';
- }
-
- pairs = [];
-
- if ($.isArray(o)) {
- for (k = 0; k < o.length; k++) {
- pairs.push($.toJSON(o[k]) || 'null');
- }
- return '[' + pairs.join(',') + ']';
- }
-
- // Any other object (plain object, RegExp, ..)
- // Need to do typeof instead of $.type, because we also
- // want to catch non-plain objects.
- if (typeof o === 'object') {
- for (k in o) {
- // Only include own properties,
- // Filter out inherited prototypes
- if (hasOwn.call(o, k)) {
- // Keys must be numerical or string. Skip others
- type = typeof k;
- if (type === 'number') {
- name = '"' + k + '"';
- } else if (type === 'string') {
- name = $.quoteString(k);
- } else {
- continue;
- }
- type = typeof o[k];
-
- // Invalid values like these return undefined
- // from toJSON, however those object members
- // shouldn't be included in the JSON string at all.
- if (type !== 'function' && type !== 'undefined') {
- val = $.toJSON(o[k]);
- pairs.push(name + ':' + val);
- }
- }
- }
- return '{' + pairs.join(',') + '}';
- }
- };
-
- /**
- * jQuery.evalJSON
- * Evaluates a given json string.
- *
- * @param str {String}
- */
- $.evalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
- /*jshint evil: true */
- return eval('(' + str + ')');
- };
-
- /**
- * jQuery.secureEvalJSON
- * Evals JSON in a way that is *more* secure.
- *
- * @param str {String}
- */
- $.secureEvalJSON = typeof JSON === 'object' && JSON.parse ? JSON.parse : function (str) {
- var filtered =
- str
- .replace(/\\["\\\/bfnrtu]/g, '@')
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
- .replace(/(?:^|:|,)(?:\s*\[)+/g, '');
-
- if (/^[\],:{}\s]*$/.test(filtered)) {
- /*jshint evil: true */
- return eval('(' + str + ')');
- }
- throw new SyntaxError('Error parsing JSON, source is not valid.');
- };
-
- /**
- * jQuery.quoteString
- * Returns a string-repr of a string, escaping quotes intelligently.
- * Mostly a support function for toJSON.
- * Examples:
- * >>> jQuery.quoteString('apple')
- * "apple"
- *
- * >>> jQuery.quoteString('"Where are we going?", she asked.')
- * "\"Where are we going?\", she asked."
- */
- $.quoteString = function (str) {
- if (str.match(escape)) {
- return '"' + str.replace(escape, function (a) {
- var c = meta[a];
- if (typeof c === 'string') {
- return c;
- }
- c = a.charCodeAt();
- return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
- }) + '"';
- }
- return '"' + str + '"';
- };
-
-}(jQuery));
diff --git a/resources/lib/jquery/jquery.migrate.js b/resources/lib/jquery/jquery.migrate.js
deleted file mode 100644
index 5b182366..00000000
--- a/resources/lib/jquery/jquery.migrate.js
+++ /dev/null
@@ -1,551 +0,0 @@
-/*!
- * jQuery Migrate - v1.2.1 - 2013-05-08
- * https://github.com/jquery/jquery-migrate
- * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT
- *
- * Patched for MediaWiki to add mw.track calls. --Krinkle 2014-04-14
- */
-(function( jQuery, window, undefined ) {
-// See http://bugs.jquery.com/ticket/13335
-// "use strict";
-
-
-var warnedAbout = {};
-
-// List of warnings already given; public read only
-jQuery.migrateWarnings = [];
-
-// Set to true to prevent console output; migrateWarnings still maintained
-// jQuery.migrateMute = false;
-
-// Show a message on the console so devs know we're active
-if ( !jQuery.migrateMute && window.console && window.console.log ) {
- window.console.log("JQMIGRATE: Logging is active");
-}
-
-// Set to false to disable traces that appear with warnings
-if ( jQuery.migrateTrace === undefined ) {
- jQuery.migrateTrace = true;
-}
-
-// Forget any warnings we've already given; public
-jQuery.migrateReset = function() {
- warnedAbout = {};
- jQuery.migrateWarnings.length = 0;
-};
-
-function migrateWarn( msg, key ) {
- var console = window.console;
- /*
- MediaWiki patch for tracking usage.
-
- Custom keys:
- - andSelf
- - attr-pass
- - attr-prop
- - bind-error
- - clean
- - create-html
- - data-events
- - die
- - event-ajax
- - event-global
- - event-hover
- - event-handle
- - input-type
- - json-invalid
- - live
- - sub
- - toggle-handle
-
- Prop keys:
- - attrFn
- - browser
- */
- mw.track( "jquery.migrate", key || "unknown" );
-
- if ( !warnedAbout[ msg ] ) {
- warnedAbout[ msg ] = true;
- jQuery.migrateWarnings.push( msg );
- if ( console && console.warn && !jQuery.migrateMute ) {
- console.warn( "JQMIGRATE: " + msg );
- if ( jQuery.migrateTrace && console.trace ) {
- console.trace();
- }
- }
- }
-}
-
-function migrateWarnProp( obj, prop, value, msg, key ) {
- if ( Object.defineProperty ) {
- // On ES5 browsers (non-oldIE), warn if the code tries to get prop;
- // allow property to be overwritten in case some other plugin wants it
- try {
- Object.defineProperty( obj, prop, {
- configurable: true,
- enumerable: true,
- get: function() {
- migrateWarn( msg, key || prop );
- return value;
- },
- set: function( newValue ) {
- migrateWarn( msg, key || prop );
- value = newValue;
- }
- });
- return;
- } catch( err ) {
- // IE8 is a dope about Object.defineProperty, can't warn there
- }
- }
-
- // Non-ES5 (or broken) browser; just set the property
- jQuery._definePropertyBroken = true;
- obj[ prop ] = value;
-}
-
-if ( document.compatMode === "BackCompat" ) {
- // jQuery has never supported or tested Quirks Mode
- migrateWarn( "jQuery is not compatible with Quirks Mode" );
-}
-
-
-var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,
- oldAttr = jQuery.attr,
- valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
- function() { return null; },
- valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
- function() { return undefined; },
- rnoType = /^(?:input|button)$/i,
- rnoAttrNodeType = /^[238]$/,
- rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
- ruseDefault = /^(?:checked|selected)$/i;
-
-// jQuery.attrFn
-migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );
-
-jQuery.attr = function( elem, name, value, pass ) {
- var lowerName = name.toLowerCase(),
- nType = elem && elem.nodeType;
-
- if ( pass ) {
- // Since pass is used internally, we only warn for new jQuery
- // versions where there isn't a pass arg in the formal params
- if ( oldAttr.length < 4 ) {
- migrateWarn("jQuery.fn.attr( props, pass ) is deprecated", "attr-pass" );
- }
- if ( elem && !rnoAttrNodeType.test( nType ) &&
- (attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
- return jQuery( elem )[ name ]( value );
- }
- }
-
- // Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
- // for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
- if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {
- migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8", "input-type");
- }
-
- // Restore boolHook for boolean property/attribute synchronization
- if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {
- jQuery.attrHooks[ lowerName ] = {
- get: function( elem, name ) {
- // Align boolean attributes with corresponding properties
- // Fall back to attribute presence where some booleans are not supported
- var attrNode,
- property = jQuery.prop( elem, name );
- return property === true || typeof property !== "boolean" &&
- ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
-
- name.toLowerCase() :
- undefined;
- },
- set: function( elem, value, name ) {
- var propName;
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- // value is true since we know at this point it's type boolean and not false
- // Set boolean attributes to the same name and set the DOM property
- propName = jQuery.propFix[ name ] || name;
- if ( propName in elem ) {
- // Only set the IDL specifically if it already exists on the element
- elem[ propName ] = true;
- }
-
- elem.setAttribute( name, name.toLowerCase() );
- }
- return name;
- }
- };
-
- // Warn only for attributes that can remain distinct from their properties post-1.9
- if ( ruseDefault.test( lowerName ) ) {
- migrateWarn( "jQuery.fn.attr('" + lowerName + "') may use property instead of attribute", "attr-prop" );
- }
- }
-
- return oldAttr.call( jQuery, elem, name, value );
-};
-
-// attrHooks: value
-jQuery.attrHooks.value = {
- get: function( elem, name ) {
- var nodeName = ( elem.nodeName || "" ).toLowerCase();
- if ( nodeName === "button" ) {
- return valueAttrGet.apply( this, arguments );
- }
- if ( nodeName !== "input" && nodeName !== "option" ) {
- migrateWarn("jQuery.fn.attr('value') no longer gets properties", "attr-prop");
- }
- return name in elem ?
- elem.value :
- null;
- },
- set: function( elem, value ) {
- var nodeName = ( elem.nodeName || "" ).toLowerCase();
- if ( nodeName === "button" ) {
- return valueAttrSet.apply( this, arguments );
- }
- if ( nodeName !== "input" && nodeName !== "option" ) {
- migrateWarn("jQuery.fn.attr('value', val) no longer sets properties", "attr-prop");
- }
- // Does not return so that setAttribute is also used
- elem.value = value;
- }
-};
-
-
-var matched, browser,
- oldInit = jQuery.fn.init,
- oldParseJSON = jQuery.parseJSON,
- // Note: XSS check is done below after string is trimmed
- rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
-
-// $(html) "looks like html" rule change
-jQuery.fn.init = function( selector, context, rootjQuery ) {
- var match;
-
- if ( selector && typeof selector === "string" && !jQuery.isPlainObject( context ) &&
- (match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {
- // This is an HTML string according to the "old" rules; is it still?
- if ( selector.charAt( 0 ) !== "<" ) {
- migrateWarn("$(html) HTML strings must start with '<' character", "create-html");
- }
- if ( match[ 3 ] ) {
- migrateWarn("$(html) HTML text after last tag is ignored", "create-html");
- }
- // Consistently reject any HTML-like string starting with a hash (#9521)
- // Note that this may break jQuery 1.6.x code that otherwise would work.
- if ( match[ 0 ].charAt( 0 ) === "#" ) {
- migrateWarn("HTML string cannot start with a '#' character", "create-html");
- jQuery.error("JQMIGRATE: Invalid selector string (XSS)");
- }
- // Now process using loose rules; let pre-1.8 play too
- if ( context && context.context ) {
- // jQuery object as context; parseHTML expects a DOM object
- context = context.context;
- }
- if ( jQuery.parseHTML ) {
- return oldInit.call( this, jQuery.parseHTML( match[ 2 ], context, true ),
- context, rootjQuery );
- }
- }
- return oldInit.apply( this, arguments );
-};
-jQuery.fn.init.prototype = jQuery.fn;
-
-// Let $.parseJSON(falsy_value) return null
-jQuery.parseJSON = function( json ) {
- if ( !json && json !== null ) {
- migrateWarn("jQuery.parseJSON requires a valid JSON string", "json-invalid");
- return null;
- }
- return oldParseJSON.apply( this, arguments );
-};
-
-jQuery.uaMatch = function( ua ) {
- ua = ua.toLowerCase();
-
- var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
- /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
- /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
- /(msie) ([\w.]+)/.exec( ua ) ||
- ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
- [];
-
- return {
- browser: match[ 1 ] || "",
- version: match[ 2 ] || "0"
- };
-};
-
-// Don't clobber any existing jQuery.browser in case it's different
-if ( !jQuery.browser ) {
- matched = jQuery.uaMatch( navigator.userAgent );
- browser = {};
-
- if ( matched.browser ) {
- browser[ matched.browser ] = true;
- browser.version = matched.version;
- }
-
- // Chrome is Webkit, but Webkit is also Safari.
- if ( browser.chrome ) {
- browser.webkit = true;
- } else if ( browser.webkit ) {
- browser.safari = true;
- }
-
- jQuery.browser = browser;
-}
-
-// Warn if the code tries to get jQuery.browser
-migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );
-
-jQuery.sub = function() {
- function jQuerySub( selector, context ) {
- return new jQuerySub.fn.init( selector, context );
- }
- jQuery.extend( true, jQuerySub, this );
- jQuerySub.superclass = this;
- jQuerySub.fn = jQuerySub.prototype = this();
- jQuerySub.fn.constructor = jQuerySub;
- jQuerySub.sub = this.sub;
- jQuerySub.fn.init = function init( selector, context ) {
- if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
- context = jQuerySub( context );
- }
-
- return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
- };
- jQuerySub.fn.init.prototype = jQuerySub.fn;
- var rootjQuerySub = jQuerySub(document);
- migrateWarn( "jQuery.sub() is deprecated", "sub" );
- return jQuerySub;
-};
-
-
-// Ensure that $.ajax gets the new parseJSON defined in core.js
-jQuery.ajaxSetup({
- converters: {
- "text json": jQuery.parseJSON
- }
-});
-
-
-var oldFnData = jQuery.fn.data;
-
-jQuery.fn.data = function( name ) {
- var ret, evt,
- elem = this[0];
-
- // Handles 1.7 which has this behavior and 1.8 which doesn't
- if ( elem && name === "events" && arguments.length === 1 ) {
- ret = jQuery.data( elem, name );
- evt = jQuery._data( elem, name );
- if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {
- migrateWarn("Use of jQuery.fn.data('events') is deprecated", "data-events");
- return evt;
- }
- }
- return oldFnData.apply( this, arguments );
-};
-
-
-var rscriptType = /\/(java|ecma)script/i,
- oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
-
-jQuery.fn.andSelf = function() {
- migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()", "andSelf");
- return oldSelf.apply( this, arguments );
-};
-
-// Since jQuery.clean is used internally on older versions, we only shim if it's missing
-if ( !jQuery.clean ) {
- jQuery.clean = function( elems, context, fragment, scripts ) {
- // Set context per 1.8 logic
- context = context || document;
- context = !context.nodeType && context[0] || context;
- context = context.ownerDocument || context;
-
- migrateWarn("jQuery.clean() is deprecated", "clean");
-
- var i, elem, handleScript, jsTags,
- ret = [];
-
- jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );
-
- // Complex logic lifted directly from jQuery 1.8
- if ( fragment ) {
- // Special handling of each script element
- handleScript = function( elem ) {
- // Check if we consider it executable
- if ( !elem.type || rscriptType.test( elem.type ) ) {
- // Detach the script and store it in the scripts array (if provided) or the fragment
- // Return truthy to indicate that it has been handled
- return scripts ?
- scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
- fragment.appendChild( elem );
- }
- };
-
- for ( i = 0; (elem = ret[i]) != null; i++ ) {
- // Check if we're done after handling an executable script
- if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
- // Append to fragment and handle embedded scripts
- fragment.appendChild( elem );
- if ( typeof elem.getElementsByTagName !== "undefined" ) {
- // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
- jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
-
- // Splice the scripts into ret after their former ancestor and advance our index beyond them
- ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
- i += jsTags.length;
- }
- }
- }
- }
-
- return ret;
- };
-}
-
-var eventAdd = jQuery.event.add,
- eventRemove = jQuery.event.remove,
- eventTrigger = jQuery.event.trigger,
- oldToggle = jQuery.fn.toggle,
- oldLive = jQuery.fn.live,
- oldDie = jQuery.fn.die,
- ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",
- rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),
- rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
- hoverHack = function( events ) {
- if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {
- return events;
- }
- if ( rhoverHack.test( events ) ) {
- migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'", "event-hover");
- }
- return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
- };
-
-// Event props removed in 1.9, put them back if needed; no practical way to warn them
-if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {
- jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" );
-}
-
-// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
-if ( jQuery.event.dispatch ) {
- migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated", "event-handle" );
-}
-
-// Support for 'hover' pseudo-event and ajax event warnings
-jQuery.event.add = function( elem, types, handler, data, selector ){
- if ( elem !== document && rajaxEvent.test( types ) ) {
- migrateWarn( "AJAX events should be attached to document: " + types, "event-ajax" );
- }
- eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );
-};
-jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){
- eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes );
-};
-
-jQuery.fn.error = function() {
- var args = Array.prototype.slice.call( arguments, 0);
- migrateWarn("jQuery.fn.error() is deprecated", "bind-error");
- args.splice( 0, 0, "error" );
- if ( arguments.length ) {
- return this.bind.apply( this, args );
- }
- // error event should not bubble to window, although it does pre-1.7
- this.triggerHandler.apply( this, args );
- return this;
-};
-
-jQuery.fn.toggle = function( fn, fn2 ) {
-
- // Don't mess with animation or css toggles
- if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
- return oldToggle.apply( this, arguments );
- }
- migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated", "toggle-handle");
-
- // Save reference to arguments for access in closure
- var args = arguments,
- guid = fn.guid || jQuery.guid++,
- i = 0,
- toggler = function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- };
-
- // link all the functions, so any of them can unbind this click handler
- toggler.guid = guid;
- while ( i < args.length ) {
- args[ i++ ].guid = guid;
- }
-
- return this.click( toggler );
-};
-
-jQuery.fn.live = function( types, data, fn ) {
- migrateWarn("jQuery.fn.live() is deprecated", "live");
- if ( oldLive ) {
- return oldLive.apply( this, arguments );
- }
- jQuery( this.context ).on( types, this.selector, data, fn );
- return this;
-};
-
-jQuery.fn.die = function( types, fn ) {
- migrateWarn("jQuery.fn.die() is deprecated", "die");
- if ( oldDie ) {
- return oldDie.apply( this, arguments );
- }
- jQuery( this.context ).off( types, this.selector || "**", fn );
- return this;
-};
-
-// Turn global events into document-triggered events
-jQuery.event.trigger = function( event, data, elem, onlyHandlers ){
- if ( !elem && !rajaxEvent.test( event ) ) {
- migrateWarn( "Global events are undocumented and deprecated", "event-global" );
- }
- return eventTrigger.call( this, event, data, elem || document, onlyHandlers );
-};
-jQuery.each( ajaxEvents.split("|"),
- function( _, name ) {
- jQuery.event.special[ name ] = {
- setup: function() {
- var elem = this;
-
- // The document needs no shimming; must be !== for oldIE
- if ( elem !== document ) {
- jQuery.event.add( document, name + "." + jQuery.guid, function() {
- jQuery.event.trigger( name, null, elem, true );
- });
- jQuery._data( this, name, jQuery.guid++ );
- }
- return false;
- },
- teardown: function() {
- if ( this !== document ) {
- jQuery.event.remove( document, name + "." + jQuery._data( this, name ) );
- }
- return false;
- }
- };
- }
-);
-
-
-})( jQuery, window );
diff --git a/resources/lib/jquery/jquery.qunit.css b/resources/lib/jquery/jquery.qunit.css
deleted file mode 100644
index 93026e3b..00000000
--- a/resources/lib/jquery/jquery.qunit.css
+++ /dev/null
@@ -1,237 +0,0 @@
-/*!
- * QUnit 1.14.0
- * http://qunitjs.com/
- *
- * Copyright 2013 jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-01-31T16:40Z
- */
-
-/** Font Family and Sizes */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
- font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
-}
-
-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
-#qunit-tests { font-size: smaller; }
-
-
-/** Resets */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
- margin: 0;
- padding: 0;
-}
-
-
-/** Header */
-
-#qunit-header {
- padding: 0.5em 0 0.5em 1em;
-
- color: #8699A4;
- background-color: #0D3349;
-
- font-size: 1.5em;
- line-height: 1em;
- font-weight: 400;
-
- border-radius: 5px 5px 0 0;
-}
-
-#qunit-header a {
- text-decoration: none;
- color: #C2CCD1;
-}
-
-#qunit-header a:hover,
-#qunit-header a:focus {
- color: #FFF;
-}
-
-#qunit-testrunner-toolbar label {
- display: inline-block;
- padding: 0 0.5em 0 0.1em;
-}
-
-#qunit-banner {
- height: 5px;
-}
-
-#qunit-testrunner-toolbar {
- padding: 0.5em 0 0.5em 2em;
- color: #5E740B;
- background-color: #EEE;
- overflow: hidden;
-}
-
-#qunit-userAgent {
- padding: 0.5em 0 0.5em 2.5em;
- background-color: #2B81AF;
- color: #FFF;
- text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
-}
-
-#qunit-modulefilter-container {
- float: right;
-}
-
-/** Tests: Pass/Fail */
-
-#qunit-tests {
- list-style-position: inside;
-}
-
-#qunit-tests li {
- padding: 0.4em 0.5em 0.4em 2.5em;
- border-bottom: 1px solid #FFF;
- list-style-position: inside;
-}
-
-#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
- display: none;
-}
-
-#qunit-tests li strong {
- cursor: pointer;
-}
-
-#qunit-tests li a {
- padding: 0.5em;
- color: #C2CCD1;
- text-decoration: none;
-}
-#qunit-tests li a:hover,
-#qunit-tests li a:focus {
- color: #000;
-}
-
-#qunit-tests li .runtime {
- float: right;
- font-size: smaller;
-}
-
-.qunit-assert-list {
- margin-top: 0.5em;
- padding: 0.5em;
-
- background-color: #FFF;
-
- border-radius: 5px;
-}
-
-.qunit-collapsed {
- display: none;
-}
-
-#qunit-tests table {
- border-collapse: collapse;
- margin-top: 0.2em;
-}
-
-#qunit-tests th {
- text-align: right;
- vertical-align: top;
- padding: 0 0.5em 0 0;
-}
-
-#qunit-tests td {
- vertical-align: top;
-}
-
-#qunit-tests pre {
- margin: 0;
- white-space: pre-wrap;
- word-wrap: break-word;
-}
-
-#qunit-tests del {
- background-color: #E0F2BE;
- color: #374E0C;
- text-decoration: none;
-}
-
-#qunit-tests ins {
- background-color: #FFCACA;
- color: #500;
- text-decoration: none;
-}
-
-/*** Test Counts */
-
-#qunit-tests b.counts { color: #000; }
-#qunit-tests b.passed { color: #5E740B; }
-#qunit-tests b.failed { color: #710909; }
-
-#qunit-tests li li {
- padding: 5px;
- background-color: #FFF;
- border-bottom: none;
- list-style-position: inside;
-}
-
-/*** Passing Styles */
-
-#qunit-tests li li.pass {
- color: #3C510C;
- background-color: #FFF;
- border-left: 10px solid #C6E746;
-}
-
-#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
-#qunit-tests .pass .test-name { color: #366097; }
-
-#qunit-tests .pass .test-actual,
-#qunit-tests .pass .test-expected { color: #999; }
-
-#qunit-banner.qunit-pass { background-color: #C6E746; }
-
-/*** Failing Styles */
-
-#qunit-tests li li.fail {
- color: #710909;
- background-color: #FFF;
- border-left: 10px solid #EE5757;
- white-space: pre;
-}
-
-#qunit-tests > li:last-child {
- border-radius: 0 0 5px 5px;
-}
-
-#qunit-tests .fail { color: #000; background-color: #EE5757; }
-#qunit-tests .fail .test-name,
-#qunit-tests .fail .module-name { color: #000; }
-
-#qunit-tests .fail .test-actual { color: #EE5757; }
-#qunit-tests .fail .test-expected { color: #008000; }
-
-#qunit-banner.qunit-fail { background-color: #EE5757; }
-
-
-/** Result */
-
-#qunit-testresult {
- padding: 0.5em 0.5em 0.5em 2.5em;
-
- color: #2B81AF;
- background-color: #D2E0E6;
-
- border-bottom: 1px solid #FFF;
-}
-#qunit-testresult .module-name {
- font-weight: 700;
-}
-
-/** Fixture */
-
-#qunit-fixture {
- position: absolute;
- top: -10000px;
- left: -10000px;
- width: 1000px;
- height: 1000px;
-}
diff --git a/resources/lib/jquery/jquery.qunit.js b/resources/lib/jquery/jquery.qunit.js
deleted file mode 100644
index 0e279fde..00000000
--- a/resources/lib/jquery/jquery.qunit.js
+++ /dev/null
@@ -1,2288 +0,0 @@
-/*!
- * QUnit 1.14.0
- * http://qunitjs.com/
- *
- * Copyright 2013 jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-01-31T16:40Z
- */
-
-(function( window ) {
-
-var QUnit,
- assert,
- config,
- onErrorFnPrev,
- testId = 0,
- fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- // Keep a local reference to Date (GH-283)
- Date = window.Date,
- setTimeout = window.setTimeout,
- clearTimeout = window.clearTimeout,
- defined = {
- document: typeof window.document !== "undefined",
- setTimeout: typeof window.setTimeout !== "undefined",
- sessionStorage: (function() {
- var x = "qunit-test-string";
- try {
- sessionStorage.setItem( x, x );
- sessionStorage.removeItem( x );
- return true;
- } catch( e ) {
- return false;
- }
- }())
- },
- /**
- * Provides a normalized error string, correcting an issue
- * with IE 7 (and prior) where Error.prototype.toString is
- * not properly implemented
- *
- * Based on http://es5.github.com/#x15.11.4.4
- *
- * @param {String|Error} error
- * @return {String} error message
- */
- errorString = function( error ) {
- var name, message,
- errorString = error.toString();
- if ( errorString.substring( 0, 7 ) === "[object" ) {
- name = error.name ? error.name.toString() : "Error";
- message = error.message ? error.message.toString() : "";
- if ( name && message ) {
- return name + ": " + message;
- } else if ( name ) {
- return name;
- } else if ( message ) {
- return message;
- } else {
- return "Error";
- }
- } else {
- return errorString;
- }
- },
- /**
- * Makes a clone of an object using only Array or Object as base,
- * and copies over the own enumerable properties.
- *
- * @param {Object} obj
- * @return {Object} New object with only the own properties (recursively).
- */
- objectValues = function( obj ) {
- // Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
- /*jshint newcap: false */
- var key, val,
- vals = QUnit.is( "array", obj ) ? [] : {};
- for ( key in obj ) {
- if ( hasOwn.call( obj, key ) ) {
- val = obj[key];
- vals[key] = val === Object(val) ? objectValues(val) : val;
- }
- }
- return vals;
- };
-
-
-// Root QUnit object.
-// `QUnit` initialized at top of scope
-QUnit = {
-
- // call on start of module test to prepend name to all tests
- module: function( name, testEnvironment ) {
- config.currentModule = name;
- config.currentModuleTestEnvironment = testEnvironment;
- config.modules[name] = true;
- },
-
- asyncTest: function( testName, expected, callback ) {
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
- }
-
- QUnit.test( testName, expected, callback, true );
- },
-
- test: function( testName, expected, callback, async ) {
- var test,
- nameHtml = "<span class='test-name'>" + escapeText( testName ) + "</span>";
-
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
- }
-
- if ( config.currentModule ) {
- nameHtml = "<span class='module-name'>" + escapeText( config.currentModule ) + "</span>: " + nameHtml;
- }
-
- test = new Test({
- nameHtml: nameHtml,
- testName: testName,
- expected: expected,
- async: async,
- callback: callback,
- module: config.currentModule,
- moduleTestEnvironment: config.currentModuleTestEnvironment,
- stack: sourceFromStacktrace( 2 )
- });
-
- if ( !validTest( test ) ) {
- return;
- }
-
- test.queue();
- },
-
- // Specify the number of expected assertions to guarantee that failed test (no assertions are run at all) don't slip through.
- expect: function( asserts ) {
- if (arguments.length === 1) {
- config.current.expected = asserts;
- } else {
- return config.current.expected;
- }
- },
-
- start: function( count ) {
- // QUnit hasn't been initialized yet.
- // Note: RequireJS (et al) may delay onLoad
- if ( config.semaphore === undefined ) {
- QUnit.begin(function() {
- // This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
- setTimeout(function() {
- QUnit.start( count );
- });
- });
- return;
- }
-
- config.semaphore -= count || 1;
- // don't start until equal number of stop-calls
- if ( config.semaphore > 0 ) {
- return;
- }
- // ignore if start is called more often then stop
- if ( config.semaphore < 0 ) {
- config.semaphore = 0;
- QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
- return;
- }
- // A slight delay, to avoid any current callbacks
- if ( defined.setTimeout ) {
- setTimeout(function() {
- if ( config.semaphore > 0 ) {
- return;
- }
- if ( config.timeout ) {
- clearTimeout( config.timeout );
- }
-
- config.blocking = false;
- process( true );
- }, 13);
- } else {
- config.blocking = false;
- process( true );
- }
- },
-
- stop: function( count ) {
- config.semaphore += count || 1;
- config.blocking = true;
-
- if ( config.testTimeout && defined.setTimeout ) {
- clearTimeout( config.timeout );
- config.timeout = setTimeout(function() {
- QUnit.ok( false, "Test timed out" );
- config.semaphore = 1;
- QUnit.start();
- }, config.testTimeout );
- }
- }
-};
-
-// We use the prototype to distinguish between properties that should
-// be exposed as globals (and in exports) and those that shouldn't
-(function() {
- function F() {}
- F.prototype = QUnit;
- QUnit = new F();
- // Make F QUnit's constructor so that we can add to the prototype later
- QUnit.constructor = F;
-}());
-
-/**
- * Config object: Maintain internal state
- * Later exposed as QUnit.config
- * `config` initialized at top of scope
- */
-config = {
- // The queue of tests to run
- queue: [],
-
- // block until document ready
- blocking: true,
-
- // when enabled, show only failing tests
- // gets persisted through sessionStorage and can be changed in UI via checkbox
- hidepassed: false,
-
- // by default, run previously failed tests first
- // very useful in combination with "Hide passed tests" checked
- reorder: true,
-
- // by default, modify document.title when suite is done
- altertitle: true,
-
- // by default, scroll to top of the page when suite is done
- scrolltop: true,
-
- // when enabled, all tests must call expect()
- requireExpects: false,
-
- // add checkboxes that are persisted in the query-string
- // when enabled, the id is set to `true` as a `QUnit.config` property
- urlConfig: [
- {
- id: "noglobals",
- label: "Check for Globals",
- tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
- },
- {
- id: "notrycatch",
- label: "No try-catch",
- tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
- }
- ],
-
- // Set of all modules.
- modules: {},
-
- // logging callback queues
- begin: [],
- done: [],
- log: [],
- testStart: [],
- testDone: [],
- moduleStart: [],
- moduleDone: []
-};
-
-// Initialize more QUnit.config and QUnit.urlParams
-(function() {
- var i, current,
- location = window.location || { search: "", protocol: "file:" },
- params = location.search.slice( 1 ).split( "&" ),
- length = params.length,
- urlParams = {};
-
- if ( params[ 0 ] ) {
- for ( i = 0; i < length; i++ ) {
- current = params[ i ].split( "=" );
- current[ 0 ] = decodeURIComponent( current[ 0 ] );
-
- // allow just a key to turn on a flag, e.g., test.html?noglobals
- current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
- if ( urlParams[ current[ 0 ] ] ) {
- urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] );
- } else {
- urlParams[ current[ 0 ] ] = current[ 1 ];
- }
- }
- }
-
- QUnit.urlParams = urlParams;
-
- // String search anywhere in moduleName+testName
- config.filter = urlParams.filter;
-
- // Exact match of the module name
- config.module = urlParams.module;
-
- config.testNumber = [];
- if ( urlParams.testNumber ) {
-
- // Ensure that urlParams.testNumber is an array
- urlParams.testNumber = [].concat( urlParams.testNumber );
- for ( i = 0; i < urlParams.testNumber.length; i++ ) {
- current = urlParams.testNumber[ i ];
- config.testNumber.push( parseInt( current, 10 ) );
- }
- }
-
- // Figure out if we're running the tests from a server or not
- QUnit.isLocal = location.protocol === "file:";
-}());
-
-extend( QUnit, {
-
- config: config,
-
- // Initialize the configuration options
- init: function() {
- extend( config, {
- stats: { all: 0, bad: 0 },
- moduleStats: { all: 0, bad: 0 },
- started: +new Date(),
- updateRate: 1000,
- blocking: false,
- autostart: true,
- autorun: false,
- filter: "",
- queue: [],
- semaphore: 1
- });
-
- var tests, banner, result,
- qunit = id( "qunit" );
-
- if ( qunit ) {
- qunit.innerHTML =
- "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
- "<h2 id='qunit-banner'></h2>" +
- "<div id='qunit-testrunner-toolbar'></div>" +
- "<h2 id='qunit-userAgent'></h2>" +
- "<ol id='qunit-tests'></ol>";
- }
-
- tests = id( "qunit-tests" );
- banner = id( "qunit-banner" );
- result = id( "qunit-testresult" );
-
- if ( tests ) {
- tests.innerHTML = "";
- }
-
- if ( banner ) {
- banner.className = "";
- }
-
- if ( result ) {
- result.parentNode.removeChild( result );
- }
-
- if ( tests ) {
- result = document.createElement( "p" );
- result.id = "qunit-testresult";
- result.className = "result";
- tests.parentNode.insertBefore( result, tests );
- result.innerHTML = "Running...<br/>&nbsp;";
- }
- },
-
- // Resets the test setup. Useful for tests that modify the DOM.
- /*
- DEPRECATED: Use multiple tests instead of resetting inside a test.
- Use testStart or testDone for custom cleanup.
- This method will throw an error in 2.0, and will be removed in 2.1
- */
- reset: function() {
- var fixture = id( "qunit-fixture" );
- if ( fixture ) {
- fixture.innerHTML = config.fixture;
- }
- },
-
- // Safe object type checking
- is: function( type, obj ) {
- return QUnit.objectType( obj ) === type;
- },
-
- objectType: function( obj ) {
- if ( typeof obj === "undefined" ) {
- return "undefined";
- }
-
- // Consider: typeof null === object
- if ( obj === null ) {
- return "null";
- }
-
- var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
- type = match && match[1] || "";
-
- switch ( type ) {
- case "Number":
- if ( isNaN(obj) ) {
- return "nan";
- }
- return "number";
- case "String":
- case "Boolean":
- case "Array":
- case "Date":
- case "RegExp":
- case "Function":
- return type.toLowerCase();
- }
- if ( typeof obj === "object" ) {
- return "object";
- }
- return undefined;
- },
-
- push: function( result, actual, expected, message ) {
- if ( !config.current ) {
- throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
- }
-
- var output, source,
- details = {
- module: config.current.module,
- name: config.current.testName,
- result: result,
- message: message,
- actual: actual,
- expected: expected
- };
-
- message = escapeText( message ) || ( result ? "okay" : "failed" );
- message = "<span class='test-message'>" + message + "</span>";
- output = message;
-
- if ( !result ) {
- expected = escapeText( QUnit.jsDump.parse(expected) );
- actual = escapeText( QUnit.jsDump.parse(actual) );
- output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
-
- if ( actual !== expected ) {
- output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
- output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
- }
-
- source = sourceFromStacktrace();
-
- if ( source ) {
- details.source = source;
- output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
- }
-
- output += "</table>";
- }
-
- runLoggingCallbacks( "log", QUnit, details );
-
- config.current.assertions.push({
- result: !!result,
- message: output
- });
- },
-
- pushFailure: function( message, source, actual ) {
- if ( !config.current ) {
- throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
- }
-
- var output,
- details = {
- module: config.current.module,
- name: config.current.testName,
- result: false,
- message: message
- };
-
- message = escapeText( message ) || "error";
- message = "<span class='test-message'>" + message + "</span>";
- output = message;
-
- output += "<table>";
-
- if ( actual ) {
- output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeText( actual ) + "</pre></td></tr>";
- }
-
- if ( source ) {
- details.source = source;
- output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
- }
-
- output += "</table>";
-
- runLoggingCallbacks( "log", QUnit, details );
-
- config.current.assertions.push({
- result: false,
- message: output
- });
- },
-
- url: function( params ) {
- params = extend( extend( {}, QUnit.urlParams ), params );
- var key,
- querystring = "?";
-
- for ( key in params ) {
- if ( hasOwn.call( params, key ) ) {
- querystring += encodeURIComponent( key ) + "=" +
- encodeURIComponent( params[ key ] ) + "&";
- }
- }
- return window.location.protocol + "//" + window.location.host +
- window.location.pathname + querystring.slice( 0, -1 );
- },
-
- extend: extend,
- id: id,
- addEvent: addEvent,
- addClass: addClass,
- hasClass: hasClass,
- removeClass: removeClass
- // load, equiv, jsDump, diff: Attached later
-});
-
-/**
- * @deprecated: Created for backwards compatibility with test runner that set the hook function
- * into QUnit.{hook}, instead of invoking it and passing the hook function.
- * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
- * Doing this allows us to tell if the following methods have been overwritten on the actual
- * QUnit object.
- */
-extend( QUnit.constructor.prototype, {
-
- // Logging callbacks; all receive a single argument with the listed properties
- // run test/logs.html for any related changes
- begin: registerLoggingCallback( "begin" ),
-
- // done: { failed, passed, total, runtime }
- done: registerLoggingCallback( "done" ),
-
- // log: { result, actual, expected, message }
- log: registerLoggingCallback( "log" ),
-
- // testStart: { name }
- testStart: registerLoggingCallback( "testStart" ),
-
- // testDone: { name, failed, passed, total, runtime }
- testDone: registerLoggingCallback( "testDone" ),
-
- // moduleStart: { name }
- moduleStart: registerLoggingCallback( "moduleStart" ),
-
- // moduleDone: { name, failed, passed, total }
- moduleDone: registerLoggingCallback( "moduleDone" )
-});
-
-if ( !defined.document || document.readyState === "complete" ) {
- config.autorun = true;
-}
-
-QUnit.load = function() {
- runLoggingCallbacks( "begin", QUnit, {} );
-
- // Initialize the config, saving the execution queue
- var banner, filter, i, j, label, len, main, ol, toolbar, val, selection,
- urlConfigContainer, moduleFilter, userAgent,
- numModules = 0,
- moduleNames = [],
- moduleFilterHtml = "",
- urlConfigHtml = "",
- oldconfig = extend( {}, config );
-
- QUnit.init();
- extend(config, oldconfig);
-
- config.blocking = false;
-
- len = config.urlConfig.length;
-
- for ( i = 0; i < len; i++ ) {
- val = config.urlConfig[i];
- if ( typeof val === "string" ) {
- val = {
- id: val,
- label: val
- };
- }
- config[ val.id ] = QUnit.urlParams[ val.id ];
- if ( !val.value || typeof val.value === "string" ) {
- urlConfigHtml += "<input id='qunit-urlconfig-" + escapeText( val.id ) +
- "' name='" + escapeText( val.id ) +
- "' type='checkbox'" +
- ( val.value ? " value='" + escapeText( val.value ) + "'" : "" ) +
- ( config[ val.id ] ? " checked='checked'" : "" ) +
- " title='" + escapeText( val.tooltip ) +
- "'><label for='qunit-urlconfig-" + escapeText( val.id ) +
- "' title='" + escapeText( val.tooltip ) + "'>" + val.label + "</label>";
- } else {
- urlConfigHtml += "<label for='qunit-urlconfig-" + escapeText( val.id ) +
- "' title='" + escapeText( val.tooltip ) +
- "'>" + val.label +
- ": </label><select id='qunit-urlconfig-" + escapeText( val.id ) +
- "' name='" + escapeText( val.id ) +
- "' title='" + escapeText( val.tooltip ) +
- "'><option></option>";
- selection = false;
- if ( QUnit.is( "array", val.value ) ) {
- for ( j = 0; j < val.value.length; j++ ) {
- urlConfigHtml += "<option value='" + escapeText( val.value[j] ) + "'" +
- ( config[ val.id ] === val.value[j] ?
- (selection = true) && " selected='selected'" :
- "" ) +
- ">" + escapeText( val.value[j] ) + "</option>";
- }
- } else {
- for ( j in val.value ) {
- if ( hasOwn.call( val.value, j ) ) {
- urlConfigHtml += "<option value='" + escapeText( j ) + "'" +
- ( config[ val.id ] === j ?
- (selection = true) && " selected='selected'" :
- "" ) +
- ">" + escapeText( val.value[j] ) + "</option>";
- }
- }
- }
- if ( config[ val.id ] && !selection ) {
- urlConfigHtml += "<option value='" + escapeText( config[ val.id ] ) +
- "' selected='selected' disabled='disabled'>" +
- escapeText( config[ val.id ] ) +
- "</option>";
- }
- urlConfigHtml += "</select>";
- }
- }
- for ( i in config.modules ) {
- if ( config.modules.hasOwnProperty( i ) ) {
- moduleNames.push(i);
- }
- }
- numModules = moduleNames.length;
- moduleNames.sort( function( a, b ) {
- return a.localeCompare( b );
- });
- moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " +
- ( config.module === undefined ? "selected='selected'" : "" ) +
- ">< All Modules ></option>";
-
-
- for ( i = 0; i < numModules; i++) {
- moduleFilterHtml += "<option value='" + escapeText( encodeURIComponent(moduleNames[i]) ) + "' " +
- ( config.module === moduleNames[i] ? "selected='selected'" : "" ) +
- ">" + escapeText(moduleNames[i]) + "</option>";
- }
- moduleFilterHtml += "</select>";
-
- // `userAgent` initialized at top of scope
- userAgent = id( "qunit-userAgent" );
- if ( userAgent ) {
- userAgent.innerHTML = navigator.userAgent;
- }
-
- // `banner` initialized at top of scope
- banner = id( "qunit-header" );
- if ( banner ) {
- banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
- }
-
- // `toolbar` initialized at top of scope
- toolbar = id( "qunit-testrunner-toolbar" );
- if ( toolbar ) {
- // `filter` initialized at top of scope
- filter = document.createElement( "input" );
- filter.type = "checkbox";
- filter.id = "qunit-filter-pass";
-
- addEvent( filter, "click", function() {
- var tmp,
- ol = id( "qunit-tests" );
-
- if ( filter.checked ) {
- ol.className = ol.className + " hidepass";
- } else {
- tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
- ol.className = tmp.replace( / hidepass /, " " );
- }
- if ( defined.sessionStorage ) {
- if (filter.checked) {
- sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
- } else {
- sessionStorage.removeItem( "qunit-filter-passed-tests" );
- }
- }
- });
-
- if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
- filter.checked = true;
- // `ol` initialized at top of scope
- ol = id( "qunit-tests" );
- ol.className = ol.className + " hidepass";
- }
- toolbar.appendChild( filter );
-
- // `label` initialized at top of scope
- label = document.createElement( "label" );
- label.setAttribute( "for", "qunit-filter-pass" );
- label.setAttribute( "title", "Only show tests and assertions that fail. Stored in sessionStorage." );
- label.innerHTML = "Hide passed tests";
- toolbar.appendChild( label );
-
- urlConfigContainer = document.createElement("span");
- urlConfigContainer.innerHTML = urlConfigHtml;
- // For oldIE support:
- // * Add handlers to the individual elements instead of the container
- // * Use "click" instead of "change" for checkboxes
- // * Fallback from event.target to event.srcElement
- addEvents( urlConfigContainer.getElementsByTagName("input"), "click", function( event ) {
- var params = {},
- target = event.target || event.srcElement;
- params[ target.name ] = target.checked ?
- target.defaultValue || true :
- undefined;
- window.location = QUnit.url( params );
- });
- addEvents( urlConfigContainer.getElementsByTagName("select"), "change", function( event ) {
- var params = {},
- target = event.target || event.srcElement;
- params[ target.name ] = target.options[ target.selectedIndex ].value || undefined;
- window.location = QUnit.url( params );
- });
- toolbar.appendChild( urlConfigContainer );
-
- if (numModules > 1) {
- moduleFilter = document.createElement( "span" );
- moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
- moduleFilter.innerHTML = moduleFilterHtml;
- addEvent( moduleFilter.lastChild, "change", function() {
- var selectBox = moduleFilter.getElementsByTagName("select")[0],
- selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
-
- window.location = QUnit.url({
- module: ( selectedModule === "" ) ? undefined : selectedModule,
- // Remove any existing filters
- filter: undefined,
- testNumber: undefined
- });
- });
- toolbar.appendChild(moduleFilter);
- }
- }
-
- // `main` initialized at top of scope
- main = id( "qunit-fixture" );
- if ( main ) {
- config.fixture = main.innerHTML;
- }
-
- if ( config.autostart ) {
- QUnit.start();
- }
-};
-
-if ( defined.document ) {
- addEvent( window, "load", QUnit.load );
-}
-
-// `onErrorFnPrev` initialized at top of scope
-// Preserve other handlers
-onErrorFnPrev = window.onerror;
-
-// Cover uncaught exceptions
-// Returning true will suppress the default browser handler,
-// returning false will let it run.
-window.onerror = function ( error, filePath, linerNr ) {
- var ret = false;
- if ( onErrorFnPrev ) {
- ret = onErrorFnPrev( error, filePath, linerNr );
- }
-
- // Treat return value as window.onerror itself does,
- // Only do our handling if not suppressed.
- if ( ret !== true ) {
- if ( QUnit.config.current ) {
- if ( QUnit.config.current.ignoreGlobalErrors ) {
- return true;
- }
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- } else {
- QUnit.test( "global failure", extend( function() {
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- }, { validTest: validTest } ) );
- }
- return false;
- }
-
- return ret;
-};
-
-function done() {
- config.autorun = true;
-
- // Log the last module results
- if ( config.previousModule ) {
- runLoggingCallbacks( "moduleDone", QUnit, {
- name: config.previousModule,
- failed: config.moduleStats.bad,
- passed: config.moduleStats.all - config.moduleStats.bad,
- total: config.moduleStats.all
- });
- }
- delete config.previousModule;
-
- var i, key,
- banner = id( "qunit-banner" ),
- tests = id( "qunit-tests" ),
- runtime = +new Date() - config.started,
- passed = config.stats.all - config.stats.bad,
- html = [
- "Tests completed in ",
- runtime,
- " milliseconds.<br/>",
- "<span class='passed'>",
- passed,
- "</span> assertions of <span class='total'>",
- config.stats.all,
- "</span> passed, <span class='failed'>",
- config.stats.bad,
- "</span> failed."
- ].join( "" );
-
- if ( banner ) {
- banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
- }
-
- if ( tests ) {
- id( "qunit-testresult" ).innerHTML = html;
- }
-
- if ( config.altertitle && defined.document && document.title ) {
- // show ✖ for good, ✔ for bad suite result in title
- // use escape sequences in case file gets loaded with non-utf-8-charset
- document.title = [
- ( config.stats.bad ? "\u2716" : "\u2714" ),
- document.title.replace( /^[\u2714\u2716] /i, "" )
- ].join( " " );
- }
-
- // clear own sessionStorage items if all tests passed
- if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
- // `key` & `i` initialized at top of scope
- for ( i = 0; i < sessionStorage.length; i++ ) {
- key = sessionStorage.key( i++ );
- if ( key.indexOf( "qunit-test-" ) === 0 ) {
- sessionStorage.removeItem( key );
- }
- }
- }
-
- // scroll back to top to show results
- if ( config.scrolltop && window.scrollTo ) {
- window.scrollTo(0, 0);
- }
-
- runLoggingCallbacks( "done", QUnit, {
- failed: config.stats.bad,
- passed: passed,
- total: config.stats.all,
- runtime: runtime
- });
-}
-
-/** @return Boolean: true if this test should be ran */
-function validTest( test ) {
- var include,
- filter = config.filter && config.filter.toLowerCase(),
- module = config.module && config.module.toLowerCase(),
- fullName = ( test.module + ": " + test.testName ).toLowerCase();
-
- // Internally-generated tests are always valid
- if ( test.callback && test.callback.validTest === validTest ) {
- delete test.callback.validTest;
- return true;
- }
-
- if ( config.testNumber.length > 0 ) {
- if ( inArray( test.testNumber, config.testNumber ) < 0 ) {
- return false;
- }
- }
-
- if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
- return false;
- }
-
- if ( !filter ) {
- return true;
- }
-
- include = filter.charAt( 0 ) !== "!";
- if ( !include ) {
- filter = filter.slice( 1 );
- }
-
- // If the filter matches, we need to honour include
- if ( fullName.indexOf( filter ) !== -1 ) {
- return include;
- }
-
- // Otherwise, do the opposite
- return !include;
-}
-
-// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
-// Later Safari and IE10 are supposed to support error.stack as well
-// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
-function extractStacktrace( e, offset ) {
- offset = offset === undefined ? 3 : offset;
-
- var stack, include, i;
-
- if ( e.stacktrace ) {
- // Opera
- return e.stacktrace.split( "\n" )[ offset + 3 ];
- } else if ( e.stack ) {
- // Firefox, Chrome
- stack = e.stack.split( "\n" );
- if (/^error$/i.test( stack[0] ) ) {
- stack.shift();
- }
- if ( fileName ) {
- include = [];
- for ( i = offset; i < stack.length; i++ ) {
- if ( stack[ i ].indexOf( fileName ) !== -1 ) {
- break;
- }
- include.push( stack[ i ] );
- }
- if ( include.length ) {
- return include.join( "\n" );
- }
- }
- return stack[ offset ];
- } else if ( e.sourceURL ) {
- // Safari, PhantomJS
- // hopefully one day Safari provides actual stacktraces
- // exclude useless self-reference for generated Error objects
- if ( /qunit.js$/.test( e.sourceURL ) ) {
- return;
- }
- // for actual exceptions, this is useful
- return e.sourceURL + ":" + e.line;
- }
-}
-function sourceFromStacktrace( offset ) {
- try {
- throw new Error();
- } catch ( e ) {
- return extractStacktrace( e, offset );
- }
-}
-
-/**
- * Escape text for attribute or text content.
- */
-function escapeText( s ) {
- if ( !s ) {
- return "";
- }
- s = s + "";
- // Both single quotes and double quotes (for attributes)
- return s.replace( /['"<>&]/g, function( s ) {
- switch( s ) {
- case "'":
- return "&#039;";
- case "\"":
- return "&quot;";
- case "<":
- return "&lt;";
- case ">":
- return "&gt;";
- case "&":
- return "&amp;";
- }
- });
-}
-
-function synchronize( callback, last ) {
- config.queue.push( callback );
-
- if ( config.autorun && !config.blocking ) {
- process( last );
- }
-}
-
-function process( last ) {
- function next() {
- process( last );
- }
- var start = new Date().getTime();
- config.depth = config.depth ? config.depth + 1 : 1;
-
- while ( config.queue.length && !config.blocking ) {
- if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
- config.queue.shift()();
- } else {
- setTimeout( next, 13 );
- break;
- }
- }
- config.depth--;
- if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
- done();
- }
-}
-
-function saveGlobal() {
- config.pollution = [];
-
- if ( config.noglobals ) {
- for ( var key in window ) {
- if ( hasOwn.call( window, key ) ) {
- // in Opera sometimes DOM element ids show up here, ignore them
- if ( /^qunit-test-output/.test( key ) ) {
- continue;
- }
- config.pollution.push( key );
- }
- }
- }
-}
-
-function checkPollution() {
- var newGlobals,
- deletedGlobals,
- old = config.pollution;
-
- saveGlobal();
-
- newGlobals = diff( config.pollution, old );
- if ( newGlobals.length > 0 ) {
- QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
- }
-
- deletedGlobals = diff( old, config.pollution );
- if ( deletedGlobals.length > 0 ) {
- QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
- }
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
- var i, j,
- result = a.slice();
-
- for ( i = 0; i < result.length; i++ ) {
- for ( j = 0; j < b.length; j++ ) {
- if ( result[i] === b[j] ) {
- result.splice( i, 1 );
- i--;
- break;
- }
- }
- }
- return result;
-}
-
-function extend( a, b ) {
- for ( var prop in b ) {
- if ( hasOwn.call( b, prop ) ) {
- // Avoid "Member not found" error in IE8 caused by messing with window.constructor
- if ( !( prop === "constructor" && a === window ) ) {
- if ( b[ prop ] === undefined ) {
- delete a[ prop ];
- } else {
- a[ prop ] = b[ prop ];
- }
- }
- }
- }
-
- return a;
-}
-
-/**
- * @param {HTMLElement} elem
- * @param {string} type
- * @param {Function} fn
- */
-function addEvent( elem, type, fn ) {
- if ( elem.addEventListener ) {
-
- // Standards-based browsers
- elem.addEventListener( type, fn, false );
- } else if ( elem.attachEvent ) {
-
- // support: IE <9
- elem.attachEvent( "on" + type, fn );
- } else {
-
- // Caller must ensure support for event listeners is present
- throw new Error( "addEvent() was called in a context without event listener support" );
- }
-}
-
-/**
- * @param {Array|NodeList} elems
- * @param {string} type
- * @param {Function} fn
- */
-function addEvents( elems, type, fn ) {
- var i = elems.length;
- while ( i-- ) {
- addEvent( elems[i], type, fn );
- }
-}
-
-function hasClass( elem, name ) {
- return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
-}
-
-function addClass( elem, name ) {
- if ( !hasClass( elem, name ) ) {
- elem.className += (elem.className ? " " : "") + name;
- }
-}
-
-function removeClass( elem, name ) {
- var set = " " + elem.className + " ";
- // Class name may appear multiple times
- while ( set.indexOf(" " + name + " ") > -1 ) {
- set = set.replace(" " + name + " " , " ");
- }
- // If possible, trim it for prettiness, but not necessarily
- elem.className = typeof set.trim === "function" ? set.trim() : set.replace(/^\s+|\s+$/g, "");
-}
-
-function id( name ) {
- return defined.document && document.getElementById && document.getElementById( name );
-}
-
-function registerLoggingCallback( key ) {
- return function( callback ) {
- config[key].push( callback );
- };
-}
-
-// Supports deprecated method of completely overwriting logging callbacks
-function runLoggingCallbacks( key, scope, args ) {
- var i, callbacks;
- if ( QUnit.hasOwnProperty( key ) ) {
- QUnit[ key ].call(scope, args );
- } else {
- callbacks = config[ key ];
- for ( i = 0; i < callbacks.length; i++ ) {
- callbacks[ i ].call( scope, args );
- }
- }
-}
-
-// from jquery.js
-function inArray( elem, array ) {
- if ( array.indexOf ) {
- return array.indexOf( elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
-}
-
-function Test( settings ) {
- extend( this, settings );
- this.assertions = [];
- this.testNumber = ++Test.count;
-}
-
-Test.count = 0;
-
-Test.prototype = {
- init: function() {
- var a, b, li,
- tests = id( "qunit-tests" );
-
- if ( tests ) {
- b = document.createElement( "strong" );
- b.innerHTML = this.nameHtml;
-
- // `a` initialized at top of scope
- a = document.createElement( "a" );
- a.innerHTML = "Rerun";
- a.href = QUnit.url({ testNumber: this.testNumber });
-
- li = document.createElement( "li" );
- li.appendChild( b );
- li.appendChild( a );
- li.className = "running";
- li.id = this.id = "qunit-test-output" + testId++;
-
- tests.appendChild( li );
- }
- },
- setup: function() {
- if (
- // Emit moduleStart when we're switching from one module to another
- this.module !== config.previousModule ||
- // They could be equal (both undefined) but if the previousModule property doesn't
- // yet exist it means this is the first test in a suite that isn't wrapped in a
- // module, in which case we'll just emit a moduleStart event for 'undefined'.
- // Without this, reporters can get testStart before moduleStart which is a problem.
- !hasOwn.call( config, "previousModule" )
- ) {
- if ( hasOwn.call( config, "previousModule" ) ) {
- runLoggingCallbacks( "moduleDone", QUnit, {
- name: config.previousModule,
- failed: config.moduleStats.bad,
- passed: config.moduleStats.all - config.moduleStats.bad,
- total: config.moduleStats.all
- });
- }
- config.previousModule = this.module;
- config.moduleStats = { all: 0, bad: 0 };
- runLoggingCallbacks( "moduleStart", QUnit, {
- name: this.module
- });
- }
-
- config.current = this;
-
- this.testEnvironment = extend({
- setup: function() {},
- teardown: function() {}
- }, this.moduleTestEnvironment );
-
- this.started = +new Date();
- runLoggingCallbacks( "testStart", QUnit, {
- name: this.testName,
- module: this.module
- });
-
- /*jshint camelcase:false */
-
-
- /**
- * Expose the current test environment.
- *
- * @deprecated since 1.12.0: Use QUnit.config.current.testEnvironment instead.
- */
- QUnit.current_testEnvironment = this.testEnvironment;
-
- /*jshint camelcase:true */
-
- if ( !config.pollution ) {
- saveGlobal();
- }
- if ( config.notrycatch ) {
- this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
- return;
- }
- try {
- this.testEnvironment.setup.call( this.testEnvironment, QUnit.assert );
- } catch( e ) {
- QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
- }
- },
- run: function() {
- config.current = this;
-
- var running = id( "qunit-testresult" );
-
- if ( running ) {
- running.innerHTML = "Running: <br/>" + this.nameHtml;
- }
-
- if ( this.async ) {
- QUnit.stop();
- }
-
- this.callbackStarted = +new Date();
-
- if ( config.notrycatch ) {
- this.callback.call( this.testEnvironment, QUnit.assert );
- this.callbackRuntime = +new Date() - this.callbackStarted;
- return;
- }
-
- try {
- this.callback.call( this.testEnvironment, QUnit.assert );
- this.callbackRuntime = +new Date() - this.callbackStarted;
- } catch( e ) {
- this.callbackRuntime = +new Date() - this.callbackStarted;
-
- QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
- // else next test will carry the responsibility
- saveGlobal();
-
- // Restart the tests if they're blocking
- if ( config.blocking ) {
- QUnit.start();
- }
- }
- },
- teardown: function() {
- config.current = this;
- if ( config.notrycatch ) {
- if ( typeof this.callbackRuntime === "undefined" ) {
- this.callbackRuntime = +new Date() - this.callbackStarted;
- }
- this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
- return;
- } else {
- try {
- this.testEnvironment.teardown.call( this.testEnvironment, QUnit.assert );
- } catch( e ) {
- QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
- }
- }
- checkPollution();
- },
- finish: function() {
- config.current = this;
- if ( config.requireExpects && this.expected === null ) {
- QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
- } else if ( this.expected !== null && this.expected !== this.assertions.length ) {
- QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
- } else if ( this.expected === null && !this.assertions.length ) {
- QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
- }
-
- var i, assertion, a, b, time, li, ol,
- test = this,
- good = 0,
- bad = 0,
- tests = id( "qunit-tests" );
-
- this.runtime = +new Date() - this.started;
- config.stats.all += this.assertions.length;
- config.moduleStats.all += this.assertions.length;
-
- if ( tests ) {
- ol = document.createElement( "ol" );
- ol.className = "qunit-assert-list";
-
- for ( i = 0; i < this.assertions.length; i++ ) {
- assertion = this.assertions[i];
-
- li = document.createElement( "li" );
- li.className = assertion.result ? "pass" : "fail";
- li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
- ol.appendChild( li );
-
- if ( assertion.result ) {
- good++;
- } else {
- bad++;
- config.stats.bad++;
- config.moduleStats.bad++;
- }
- }
-
- // store result when possible
- if ( QUnit.config.reorder && defined.sessionStorage ) {
- if ( bad ) {
- sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
- } else {
- sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
- }
- }
-
- if ( bad === 0 ) {
- addClass( ol, "qunit-collapsed" );
- }
-
- // `b` initialized at top of scope
- b = document.createElement( "strong" );
- b.innerHTML = this.nameHtml + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
-
- addEvent(b, "click", function() {
- var next = b.parentNode.lastChild,
- collapsed = hasClass( next, "qunit-collapsed" );
- ( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
- });
-
- addEvent(b, "dblclick", function( e ) {
- var target = e && e.target ? e.target : window.event.srcElement;
- if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
- target = target.parentNode;
- }
- if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
- window.location = QUnit.url({ testNumber: test.testNumber });
- }
- });
-
- // `time` initialized at top of scope
- time = document.createElement( "span" );
- time.className = "runtime";
- time.innerHTML = this.runtime + " ms";
-
- // `li` initialized at top of scope
- li = id( this.id );
- li.className = bad ? "fail" : "pass";
- li.removeChild( li.firstChild );
- a = li.firstChild;
- li.appendChild( b );
- li.appendChild( a );
- li.appendChild( time );
- li.appendChild( ol );
-
- } else {
- for ( i = 0; i < this.assertions.length; i++ ) {
- if ( !this.assertions[i].result ) {
- bad++;
- config.stats.bad++;
- config.moduleStats.bad++;
- }
- }
- }
-
- runLoggingCallbacks( "testDone", QUnit, {
- name: this.testName,
- module: this.module,
- failed: bad,
- passed: this.assertions.length - bad,
- total: this.assertions.length,
- runtime: this.runtime,
- // DEPRECATED: this property will be removed in 2.0.0, use runtime instead
- duration: this.runtime
- });
-
- QUnit.reset();
-
- config.current = undefined;
- },
-
- queue: function() {
- var bad,
- test = this;
-
- synchronize(function() {
- test.init();
- });
- function run() {
- // each of these can by async
- synchronize(function() {
- test.setup();
- });
- synchronize(function() {
- test.run();
- });
- synchronize(function() {
- test.teardown();
- });
- synchronize(function() {
- test.finish();
- });
- }
-
- // `bad` initialized at top of scope
- // defer when previous test run passed, if storage is available
- bad = QUnit.config.reorder && defined.sessionStorage &&
- +sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
-
- if ( bad ) {
- run();
- } else {
- synchronize( run, true );
- }
- }
-};
-
-// `assert` initialized at top of scope
-// Assert helpers
-// All of these must either call QUnit.push() or manually do:
-// - runLoggingCallbacks( "log", .. );
-// - config.current.assertions.push({ .. });
-assert = QUnit.assert = {
- /**
- * Asserts rough true-ish result.
- * @name ok
- * @function
- * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
- */
- ok: function( result, msg ) {
- if ( !config.current ) {
- throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
- }
- result = !!result;
- msg = msg || ( result ? "okay" : "failed" );
-
- var source,
- details = {
- module: config.current.module,
- name: config.current.testName,
- result: result,
- message: msg
- };
-
- msg = "<span class='test-message'>" + escapeText( msg ) + "</span>";
-
- if ( !result ) {
- source = sourceFromStacktrace( 2 );
- if ( source ) {
- details.source = source;
- msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" +
- escapeText( source ) +
- "</pre></td></tr></table>";
- }
- }
- runLoggingCallbacks( "log", QUnit, details );
- config.current.assertions.push({
- result: result,
- message: msg
- });
- },
-
- /**
- * Assert that the first two arguments are equal, with an optional message.
- * Prints out both actual and expected values.
- * @name equal
- * @function
- * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
- */
- equal: function( actual, expected, message ) {
- /*jshint eqeqeq:false */
- QUnit.push( expected == actual, actual, expected, message );
- },
-
- /**
- * @name notEqual
- * @function
- */
- notEqual: function( actual, expected, message ) {
- /*jshint eqeqeq:false */
- QUnit.push( expected != actual, actual, expected, message );
- },
-
- /**
- * @name propEqual
- * @function
- */
- propEqual: function( actual, expected, message ) {
- actual = objectValues(actual);
- expected = objectValues(expected);
- QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name notPropEqual
- * @function
- */
- notPropEqual: function( actual, expected, message ) {
- actual = objectValues(actual);
- expected = objectValues(expected);
- QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name deepEqual
- * @function
- */
- deepEqual: function( actual, expected, message ) {
- QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name notDeepEqual
- * @function
- */
- notDeepEqual: function( actual, expected, message ) {
- QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
- },
-
- /**
- * @name strictEqual
- * @function
- */
- strictEqual: function( actual, expected, message ) {
- QUnit.push( expected === actual, actual, expected, message );
- },
-
- /**
- * @name notStrictEqual
- * @function
- */
- notStrictEqual: function( actual, expected, message ) {
- QUnit.push( expected !== actual, actual, expected, message );
- },
-
- "throws": function( block, expected, message ) {
- var actual,
- expectedOutput = expected,
- ok = false;
-
- // 'expected' is optional
- if ( !message && typeof expected === "string" ) {
- message = expected;
- expected = null;
- }
-
- config.current.ignoreGlobalErrors = true;
- try {
- block.call( config.current.testEnvironment );
- } catch (e) {
- actual = e;
- }
- config.current.ignoreGlobalErrors = false;
-
- if ( actual ) {
-
- // we don't want to validate thrown error
- if ( !expected ) {
- ok = true;
- expectedOutput = null;
-
- // expected is an Error object
- } else if ( expected instanceof Error ) {
- ok = actual instanceof Error &&
- actual.name === expected.name &&
- actual.message === expected.message;
-
- // expected is a regexp
- } else if ( QUnit.objectType( expected ) === "regexp" ) {
- ok = expected.test( errorString( actual ) );
-
- // expected is a string
- } else if ( QUnit.objectType( expected ) === "string" ) {
- ok = expected === errorString( actual );
-
- // expected is a constructor
- } else if ( actual instanceof expected ) {
- ok = true;
-
- // expected is a validation function which returns true is validation passed
- } else if ( expected.call( {}, actual ) === true ) {
- expectedOutput = null;
- ok = true;
- }
-
- QUnit.push( ok, actual, expectedOutput, message );
- } else {
- QUnit.pushFailure( message, null, "No exception was thrown." );
- }
- }
-};
-
-/**
- * @deprecated since 1.8.0
- * Kept assertion helpers in root for backwards compatibility.
- */
-extend( QUnit.constructor.prototype, assert );
-
-/**
- * @deprecated since 1.9.0
- * Kept to avoid TypeErrors for undefined methods.
- */
-QUnit.constructor.prototype.raises = function() {
- QUnit.push( false, false, false, "QUnit.raises has been deprecated since 2012 (fad3c1ea), use QUnit.throws instead" );
-};
-
-/**
- * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
- * Kept to avoid TypeErrors for undefined methods.
- */
-QUnit.constructor.prototype.equals = function() {
- QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
-};
-QUnit.constructor.prototype.same = function() {
- QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
-};
-
-// Test for equality any JavaScript type.
-// Author: Philippe Rathé <prathe@gmail.com>
-QUnit.equiv = (function() {
-
- // Call the o related callback with the given arguments.
- function bindCallbacks( o, callbacks, args ) {
- var prop = QUnit.objectType( o );
- if ( prop ) {
- if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
- return callbacks[ prop ].apply( callbacks, args );
- } else {
- return callbacks[ prop ]; // or undefined
- }
- }
- }
-
- // the real equiv function
- var innerEquiv,
- // stack to decide between skip/abort functions
- callers = [],
- // stack to avoiding loops from circular referencing
- parents = [],
- parentsB = [],
-
- getProto = Object.getPrototypeOf || function ( obj ) {
- /*jshint camelcase:false */
- return obj.__proto__;
- },
- callbacks = (function () {
-
- // for string, boolean, number and null
- function useStrictEquality( b, a ) {
- /*jshint eqeqeq:false */
- if ( b instanceof a.constructor || a instanceof b.constructor ) {
- // to catch short annotation VS 'new' annotation of a
- // declaration
- // e.g. var i = 1;
- // var j = new Number(1);
- return a == b;
- } else {
- return a === b;
- }
- }
-
- return {
- "string": useStrictEquality,
- "boolean": useStrictEquality,
- "number": useStrictEquality,
- "null": useStrictEquality,
- "undefined": useStrictEquality,
-
- "nan": function( b ) {
- return isNaN( b );
- },
-
- "date": function( b, a ) {
- return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
- },
-
- "regexp": function( b, a ) {
- return QUnit.objectType( b ) === "regexp" &&
- // the regex itself
- a.source === b.source &&
- // and its modifiers
- a.global === b.global &&
- // (gmi) ...
- a.ignoreCase === b.ignoreCase &&
- a.multiline === b.multiline &&
- a.sticky === b.sticky;
- },
-
- // - skip when the property is a method of an instance (OOP)
- // - abort otherwise,
- // initial === would have catch identical references anyway
- "function": function() {
- var caller = callers[callers.length - 1];
- return caller !== Object && typeof caller !== "undefined";
- },
-
- "array": function( b, a ) {
- var i, j, len, loop, aCircular, bCircular;
-
- // b could be an object literal here
- if ( QUnit.objectType( b ) !== "array" ) {
- return false;
- }
-
- len = a.length;
- if ( len !== b.length ) {
- // safe and faster
- return false;
- }
-
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
- for ( i = 0; i < len; i++ ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[j] === a[i];
- bCircular = parentsB[j] === b[i];
- if ( aCircular || bCircular ) {
- if ( a[i] === b[i] || aCircular && bCircular ) {
- loop = true;
- } else {
- parents.pop();
- parentsB.pop();
- return false;
- }
- }
- }
- if ( !loop && !innerEquiv(a[i], b[i]) ) {
- parents.pop();
- parentsB.pop();
- return false;
- }
- }
- parents.pop();
- parentsB.pop();
- return true;
- },
-
- "object": function( b, a ) {
- /*jshint forin:false */
- var i, j, loop, aCircular, bCircular,
- // Default to true
- eq = true,
- aProperties = [],
- bProperties = [];
-
- // comparing constructors is more strict than using
- // instanceof
- if ( a.constructor !== b.constructor ) {
- // Allow objects with no prototype to be equivalent to
- // objects with Object as their constructor.
- if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
- ( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
- return false;
- }
- }
-
- // stack constructor before traversing properties
- callers.push( a.constructor );
-
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
-
- // be strict: don't ensure hasOwnProperty and go deep
- for ( i in a ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[j] === a[i];
- bCircular = parentsB[j] === b[i];
- if ( aCircular || bCircular ) {
- if ( a[i] === b[i] || aCircular && bCircular ) {
- loop = true;
- } else {
- eq = false;
- break;
- }
- }
- }
- aProperties.push(i);
- if ( !loop && !innerEquiv(a[i], b[i]) ) {
- eq = false;
- break;
- }
- }
-
- parents.pop();
- parentsB.pop();
- callers.pop(); // unstack, we are done
-
- for ( i in b ) {
- bProperties.push( i ); // collect b's properties
- }
-
- // Ensures identical properties name
- return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
- }
- };
- }());
-
- innerEquiv = function() { // can take multiple arguments
- var args = [].slice.apply( arguments );
- if ( args.length < 2 ) {
- return true; // end transition
- }
-
- return (function( a, b ) {
- if ( a === b ) {
- return true; // catch the most you can
- } else if ( a === null || b === null || typeof a === "undefined" ||
- typeof b === "undefined" ||
- QUnit.objectType(a) !== QUnit.objectType(b) ) {
- return false; // don't lose time with error prone cases
- } else {
- return bindCallbacks(a, callbacks, [ b, a ]);
- }
-
- // apply transition with (1..n) arguments
- }( args[0], args[1] ) && innerEquiv.apply( this, args.splice(1, args.length - 1 )) );
- };
-
- return innerEquiv;
-}());
-
-/**
- * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
- * http://flesler.blogspot.com Licensed under BSD
- * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
- *
- * @projectDescription Advanced and extensible data dumping for Javascript.
- * @version 1.0.0
- * @author Ariel Flesler
- * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
- */
-QUnit.jsDump = (function() {
- function quote( str ) {
- return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
- }
- function literal( o ) {
- return o + "";
- }
- function join( pre, arr, post ) {
- var s = jsDump.separator(),
- base = jsDump.indent(),
- inner = jsDump.indent(1);
- if ( arr.join ) {
- arr = arr.join( "," + s + inner );
- }
- if ( !arr ) {
- return pre + post;
- }
- return [ pre, inner + arr, base + post ].join(s);
- }
- function array( arr, stack ) {
- var i = arr.length, ret = new Array(i);
- this.up();
- while ( i-- ) {
- ret[i] = this.parse( arr[i] , undefined , stack);
- }
- this.down();
- return join( "[", ret, "]" );
- }
-
- var reName = /^function (\w+)/,
- jsDump = {
- // type is used mostly internally, you can fix a (custom)type in advance
- parse: function( obj, type, stack ) {
- stack = stack || [ ];
- var inStack, res,
- parser = this.parsers[ type || this.typeOf(obj) ];
-
- type = typeof parser;
- inStack = inArray( obj, stack );
-
- if ( inStack !== -1 ) {
- return "recursion(" + (inStack - stack.length) + ")";
- }
- if ( type === "function" ) {
- stack.push( obj );
- res = parser.call( this, obj, stack );
- stack.pop();
- return res;
- }
- return ( type === "string" ) ? parser : this.parsers.error;
- },
- typeOf: function( obj ) {
- var type;
- if ( obj === null ) {
- type = "null";
- } else if ( typeof obj === "undefined" ) {
- type = "undefined";
- } else if ( QUnit.is( "regexp", obj) ) {
- type = "regexp";
- } else if ( QUnit.is( "date", obj) ) {
- type = "date";
- } else if ( QUnit.is( "function", obj) ) {
- type = "function";
- } else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
- type = "window";
- } else if ( obj.nodeType === 9 ) {
- type = "document";
- } else if ( obj.nodeType ) {
- type = "node";
- } else if (
- // native arrays
- toString.call( obj ) === "[object Array]" ||
- // NodeList objects
- ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
- ) {
- type = "array";
- } else if ( obj.constructor === Error.prototype.constructor ) {
- type = "error";
- } else {
- type = typeof obj;
- }
- return type;
- },
- separator: function() {
- return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
- },
- // extra can be a number, shortcut for increasing-calling-decreasing
- indent: function( extra ) {
- if ( !this.multiline ) {
- return "";
- }
- var chr = this.indentChar;
- if ( this.HTML ) {
- chr = chr.replace( /\t/g, " " ).replace( / /g, "&nbsp;" );
- }
- return new Array( this.depth + ( extra || 0 ) ).join(chr);
- },
- up: function( a ) {
- this.depth += a || 1;
- },
- down: function( a ) {
- this.depth -= a || 1;
- },
- setParser: function( name, parser ) {
- this.parsers[name] = parser;
- },
- // The next 3 are exposed so you can use them
- quote: quote,
- literal: literal,
- join: join,
- //
- depth: 1,
- // This is the list of parsers, to modify them, use jsDump.setParser
- parsers: {
- window: "[Window]",
- document: "[Document]",
- error: function(error) {
- return "Error(\"" + error.message + "\")";
- },
- unknown: "[Unknown]",
- "null": "null",
- "undefined": "undefined",
- "function": function( fn ) {
- var ret = "function",
- // functions never have name in IE
- name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
-
- if ( name ) {
- ret += " " + name;
- }
- ret += "( ";
-
- ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
- return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
- },
- array: array,
- nodelist: array,
- "arguments": array,
- object: function( map, stack ) {
- /*jshint forin:false */
- var ret = [ ], keys, key, val, i;
- QUnit.jsDump.up();
- keys = [];
- for ( key in map ) {
- keys.push( key );
- }
- keys.sort();
- for ( i = 0; i < keys.length; i++ ) {
- key = keys[ i ];
- val = map[ key ];
- ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
- }
- QUnit.jsDump.down();
- return join( "{", ret, "}" );
- },
- node: function( node ) {
- var len, i, val,
- open = QUnit.jsDump.HTML ? "&lt;" : "<",
- close = QUnit.jsDump.HTML ? "&gt;" : ">",
- tag = node.nodeName.toLowerCase(),
- ret = open + tag,
- attrs = node.attributes;
-
- if ( attrs ) {
- for ( i = 0, len = attrs.length; i < len; i++ ) {
- val = attrs[i].nodeValue;
- // IE6 includes all attributes in .attributes, even ones not explicitly set.
- // Those have values like undefined, null, 0, false, "" or "inherit".
- if ( val && val !== "inherit" ) {
- ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
- }
- }
- }
- ret += close;
-
- // Show content of TextNode or CDATASection
- if ( node.nodeType === 3 || node.nodeType === 4 ) {
- ret += node.nodeValue;
- }
-
- return ret + open + "/" + tag + close;
- },
- // function calls it internally, it's the arguments part of the function
- functionArgs: function( fn ) {
- var args,
- l = fn.length;
-
- if ( !l ) {
- return "";
- }
-
- args = new Array(l);
- while ( l-- ) {
- // 97 is 'a'
- args[l] = String.fromCharCode(97+l);
- }
- return " " + args.join( ", " ) + " ";
- },
- // object calls it internally, the key part of an item in a map
- key: quote,
- // function calls it internally, it's the content of the function
- functionCode: "[code]",
- // node calls it internally, it's an html attribute value
- attribute: quote,
- string: quote,
- date: quote,
- regexp: literal,
- number: literal,
- "boolean": literal
- },
- // if true, entities are escaped ( <, >, \t, space and \n )
- HTML: false,
- // indentation unit
- indentChar: " ",
- // if true, items in a collection, are separated by a \n, else just a space.
- multiline: true
- };
-
- return jsDump;
-}());
-
-/*
- * Javascript Diff Algorithm
- * By John Resig (http://ejohn.org/)
- * Modified by Chu Alan "sprite"
- *
- * Released under the MIT license.
- *
- * More Info:
- * http://ejohn.org/projects/javascript-diff-algorithm/
- *
- * Usage: QUnit.diff(expected, actual)
- *
- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
- */
-QUnit.diff = (function() {
- /*jshint eqeqeq:false, eqnull:true */
- function diff( o, n ) {
- var i,
- ns = {},
- os = {};
-
- for ( i = 0; i < n.length; i++ ) {
- if ( !hasOwn.call( ns, n[i] ) ) {
- ns[ n[i] ] = {
- rows: [],
- o: null
- };
- }
- ns[ n[i] ].rows.push( i );
- }
-
- for ( i = 0; i < o.length; i++ ) {
- if ( !hasOwn.call( os, o[i] ) ) {
- os[ o[i] ] = {
- rows: [],
- n: null
- };
- }
- os[ o[i] ].rows.push( i );
- }
-
- for ( i in ns ) {
- if ( hasOwn.call( ns, i ) ) {
- if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
- n[ ns[i].rows[0] ] = {
- text: n[ ns[i].rows[0] ],
- row: os[i].rows[0]
- };
- o[ os[i].rows[0] ] = {
- text: o[ os[i].rows[0] ],
- row: ns[i].rows[0]
- };
- }
- }
- }
-
- for ( i = 0; i < n.length - 1; i++ ) {
- if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
- n[ i + 1 ] == o[ n[i].row + 1 ] ) {
-
- n[ i + 1 ] = {
- text: n[ i + 1 ],
- row: n[i].row + 1
- };
- o[ n[i].row + 1 ] = {
- text: o[ n[i].row + 1 ],
- row: i + 1
- };
- }
- }
-
- for ( i = n.length - 1; i > 0; i-- ) {
- if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
- n[ i - 1 ] == o[ n[i].row - 1 ]) {
-
- n[ i - 1 ] = {
- text: n[ i - 1 ],
- row: n[i].row - 1
- };
- o[ n[i].row - 1 ] = {
- text: o[ n[i].row - 1 ],
- row: i - 1
- };
- }
- }
-
- return {
- o: o,
- n: n
- };
- }
-
- return function( o, n ) {
- o = o.replace( /\s+$/, "" );
- n = n.replace( /\s+$/, "" );
-
- var i, pre,
- str = "",
- out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
- oSpace = o.match(/\s+/g),
- nSpace = n.match(/\s+/g);
-
- if ( oSpace == null ) {
- oSpace = [ " " ];
- }
- else {
- oSpace.push( " " );
- }
-
- if ( nSpace == null ) {
- nSpace = [ " " ];
- }
- else {
- nSpace.push( " " );
- }
-
- if ( out.n.length === 0 ) {
- for ( i = 0; i < out.o.length; i++ ) {
- str += "<del>" + out.o[i] + oSpace[i] + "</del>";
- }
- }
- else {
- if ( out.n[0].text == null ) {
- for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
- str += "<del>" + out.o[n] + oSpace[n] + "</del>";
- }
- }
-
- for ( i = 0; i < out.n.length; i++ ) {
- if (out.n[i].text == null) {
- str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
- }
- else {
- // `pre` initialized at top of scope
- pre = "";
-
- for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
- pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
- }
- str += " " + out.n[i].text + nSpace[i] + pre;
- }
- }
- }
-
- return str;
- };
-}());
-
-// For browser, export only select globals
-if ( typeof window !== "undefined" ) {
- extend( window, QUnit.constructor.prototype );
- window.QUnit = QUnit;
-}
-
-// For CommonJS environments, export everything
-if ( typeof module !== "undefined" && module.exports ) {
- module.exports = QUnit;
-}
-
-
-// Get a reference to the global object, like window in browsers
-}( (function() {
- return this;
-})() ));
diff --git a/resources/lib/moment/locale/af.js b/resources/lib/moment/locale/af.js
index 1b8c5207..2fb7adff 100644
--- a/resources/lib/moment/locale/af.js
+++ b/resources/lib/moment/locale/af.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('af', {
@@ -26,6 +26,7 @@
},
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -54,6 +55,7 @@
y : '\'n jaar',
yy : '%d jaar'
},
+ ordinalParse: /\d{1,2}(ste|de)/,
ordinal : function (number) {
return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
},
diff --git a/resources/lib/moment/locale/ar-ma.js b/resources/lib/moment/locale/ar-ma.js
index 5b2095a8..7add1722 100644
--- a/resources/lib/moment/locale/ar-ma.js
+++ b/resources/lib/moment/locale/ar-ma.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('ar-ma', {
@@ -20,6 +20,7 @@
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
diff --git a/resources/lib/moment/locale/ar-sa.js b/resources/lib/moment/locale/ar-sa.js
index f7867eac..ea7e2f6b 100644
--- a/resources/lib/moment/locale/ar-sa.js
+++ b/resources/lib/moment/locale/ar-sa.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var symbolMap = {
@@ -43,6 +43,7 @@
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -79,7 +80,7 @@
yy : '%d سنوات'
},
preparse: function (string) {
- return string.replace(/[۰-۹]/g, function (match) {
+ return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
return numberMap[match];
}).replace(/،/g, ',');
},
diff --git a/resources/lib/moment/locale/ar.js b/resources/lib/moment/locale/ar.js
index 1791a6b3..d6450087 100644
--- a/resources/lib/moment/locale/ar.js
+++ b/resources/lib/moment/locale/ar.js
@@ -10,7 +10,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var symbolMap = {
@@ -76,6 +76,7 @@
weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -112,7 +113,7 @@
yy : pluralize('y')
},
preparse: function (string) {
- return string.replace(/[۰-۹]/g, function (match) {
+ return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
return numberMap[match];
}).replace(/،/g, ',');
},
diff --git a/resources/lib/moment/locale/az.js b/resources/lib/moment/locale/az.js
index e82f6e11..d4d14342 100644
--- a/resources/lib/moment/locale/az.js
+++ b/resources/lib/moment/locale/az.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var suffixes = {
@@ -44,6 +44,7 @@
weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -83,6 +84,7 @@
return 'axşam';
}
},
+ ordinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
ordinal : function (number) {
if (number === 0) { // special case for zero
return number + '-ıncı';
diff --git a/resources/lib/moment/locale/be.js b/resources/lib/moment/locale/be.js
index fe3186a1..68a6f37c 100644
--- a/resources/lib/moment/locale/be.js
+++ b/resources/lib/moment/locale/be.js
@@ -10,7 +10,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function plural(word, num) {
@@ -71,6 +71,7 @@
weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY г.',
LLL : 'D MMMM YYYY г., LT',
@@ -127,6 +128,7 @@
}
},
+ ordinalParse: /\d{1,2}-(і|ы|га)/,
ordinal: function (number, period) {
switch (period) {
case 'M':
diff --git a/resources/lib/moment/locale/bg.js b/resources/lib/moment/locale/bg.js
index 41b1e3af..540e17b5 100644
--- a/resources/lib/moment/locale/bg.js
+++ b/resources/lib/moment/locale/bg.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('bg', {
@@ -19,6 +19,7 @@
weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'D.MM.YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -59,6 +60,7 @@
y : 'година',
yy : '%d години'
},
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
ordinal : function (number) {
var lastDigit = number % 10,
last2Digits = number % 100;
diff --git a/resources/lib/moment/locale/bn.js b/resources/lib/moment/locale/bn.js
index 7e8ccfd5..e9549d99 100644
--- a/resources/lib/moment/locale/bn.js
+++ b/resources/lib/moment/locale/bn.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var symbolMap = {
@@ -44,6 +44,7 @@
weekdaysMin : 'রব_সম_মঙ্গ_বু_ব্রিহ_শু_শনি'.split('_'),
longDateFormat : {
LT : 'A h:mm সময়',
+ LTS : 'A h:mm:ss সময়',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY, LT',
diff --git a/resources/lib/moment/locale/bo.js b/resources/lib/moment/locale/bo.js
index 0d44e47f..cece8d13 100644
--- a/resources/lib/moment/locale/bo.js
+++ b/resources/lib/moment/locale/bo.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var symbolMap = {
@@ -44,6 +44,7 @@
weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
longDateFormat : {
LT : 'A h:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY, LT',
diff --git a/resources/lib/moment/locale/br.js b/resources/lib/moment/locale/br.js
index a4f1491d..1f8dd614 100644
--- a/resources/lib/moment/locale/br.js
+++ b/resources/lib/moment/locale/br.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function relativeTimeWithMutation(number, withoutSuffix, key) {
@@ -67,6 +67,7 @@
weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
longDateFormat : {
LT : 'h[e]mm A',
+ LTS : 'h[e]mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D [a viz] MMMM YYYY',
LLL : 'D [a viz] MMMM YYYY LT',
@@ -95,6 +96,7 @@
y : 'ur bloaz',
yy : specialMutationForYears
},
+ ordinalParse: /\d{1,2}(añ|vet)/,
ordinal : function (number) {
var output = (number === 1) ? 'añ' : 'vet';
return number + output;
diff --git a/resources/lib/moment/locale/bs.js b/resources/lib/moment/locale/bs.js
index b9a58516..c59f46ba 100644
--- a/resources/lib/moment/locale/bs.js
+++ b/resources/lib/moment/locale/bs.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function translate(number, withoutSuffix, key) {
@@ -66,13 +66,14 @@
}
return moment.defineLocale('bs', {
- months : 'januar_februar_mart_april_maj_juni_juli_avgust_septembar_oktobar_novembar_decembar'.split('_'),
- monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
+ months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'DD. MM. YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY LT',
@@ -129,6 +130,7 @@
y : 'godinu',
yy : translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/ca.js b/resources/lib/moment/locale/ca.js
index fd41ff54..4f0d3fe0 100644
--- a/resources/lib/moment/locale/ca.js
+++ b/resources/lib/moment/locale/ca.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('ca', {
@@ -19,6 +19,7 @@
weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -57,7 +58,17 @@
y : 'un any',
yy : '%d anys'
},
- ordinal : '%dº',
+ ordinalParse: /\d{1,2}(r|n|t|è|a)/,
+ ordinal : function (number, period) {
+ var output = (number === 1) ? 'r' :
+ (number === 2) ? 'n' :
+ (number === 3) ? 'r' :
+ (number === 4) ? 't' : 'è';
+ if (period === 'w' || period === 'W') {
+ output = 'a';
+ }
+ return number + output;
+ },
week : {
dow : 1, // Monday is the first day of the week.
doy : 4 // The week that contains Jan 4th is the first week of the year.
diff --git a/resources/lib/moment/locale/cs.js b/resources/lib/moment/locale/cs.js
index 87dec552..b61658dc 100644
--- a/resources/lib/moment/locale/cs.js
+++ b/resources/lib/moment/locale/cs.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
@@ -87,7 +87,8 @@
weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
longDateFormat : {
LT: 'H:mm',
- L : 'DD. MM. YYYY',
+ LTS : 'LT:ss',
+ L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY LT',
LLLL : 'dddd D. MMMM YYYY LT'
@@ -146,6 +147,7 @@
y : translate,
yy : translate
},
+ ordinalParse : /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/cv.js b/resources/lib/moment/locale/cv.js
index 138b6c15..ea8e314d 100644
--- a/resources/lib/moment/locale/cv.js
+++ b/resources/lib/moment/locale/cv.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('cv', {
@@ -19,6 +19,7 @@
weekdaysMin : 'вр_тн_ыт_юн_кç_эр_шм'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD-MM-YYYY',
LL : 'YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ]',
LLL : 'YYYY [çулхи] MMMM [уйăхĕн] D[-мĕшĕ], LT',
@@ -50,6 +51,7 @@
y : 'пĕр çул',
yy : '%d çул'
},
+ ordinalParse: /\d{1,2}-мĕш/,
ordinal : '%d-мĕш',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/cy.js b/resources/lib/moment/locale/cy.js
index 65fb356b..72b2f91d 100644
--- a/resources/lib/moment/locale/cy.js
+++ b/resources/lib/moment/locale/cy.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('cy', {
@@ -20,6 +20,7 @@
// time formats are the same as en-gb
longDateFormat: {
LT: 'HH:mm',
+ LTS : 'LT:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY LT',
@@ -48,6 +49,7 @@
y: 'blwyddyn',
yy: '%d flynedd'
},
+ ordinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
// traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
ordinal: function (number) {
var b = number,
diff --git a/resources/lib/moment/locale/da.js b/resources/lib/moment/locale/da.js
index 5e9ef96d..686ce009 100644
--- a/resources/lib/moment/locale/da.js
+++ b/resources/lib/moment/locale/da.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('da', {
@@ -19,6 +19,7 @@
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY LT',
@@ -47,6 +48,7 @@
y : 'et år',
yy : '%d år'
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/de-at.js b/resources/lib/moment/locale/de-at.js
index ff715f89..c9826382 100644
--- a/resources/lib/moment/locale/de-at.js
+++ b/resources/lib/moment/locale/de-at.js
@@ -10,7 +10,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function processRelativeTime(number, withoutSuffix, key, isFuture) {
@@ -34,19 +34,20 @@
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
longDateFormat : {
- LT: 'HH:mm [Uhr]',
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY LT',
LLLL : 'dddd, D. MMMM YYYY LT'
},
calendar : {
- sameDay: '[Heute um] LT',
+ sameDay: '[Heute um] LT [Uhr]',
sameElse: 'L',
- nextDay: '[Morgen um] LT',
- nextWeek: 'dddd [um] LT',
- lastDay: '[Gestern um] LT',
- lastWeek: '[letzten] dddd [um] LT'
+ nextDay: '[Morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[Gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
},
relativeTime : {
future : 'in %s',
@@ -63,6 +64,7 @@
y : processRelativeTime,
yy : processRelativeTime
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/de.js b/resources/lib/moment/locale/de.js
index 11ab9ace..f6d89a90 100644
--- a/resources/lib/moment/locale/de.js
+++ b/resources/lib/moment/locale/de.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function processRelativeTime(number, withoutSuffix, key, isFuture) {
@@ -33,19 +33,20 @@
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
longDateFormat : {
- LT: 'HH:mm [Uhr]',
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY LT',
LLLL : 'dddd, D. MMMM YYYY LT'
},
calendar : {
- sameDay: '[Heute um] LT',
+ sameDay: '[Heute um] LT [Uhr]',
sameElse: 'L',
- nextDay: '[Morgen um] LT',
- nextWeek: 'dddd [um] LT',
- lastDay: '[Gestern um] LT',
- lastWeek: '[letzten] dddd [um] LT'
+ nextDay: '[Morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[Gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
},
relativeTime : {
future : 'in %s',
@@ -62,6 +63,7 @@
y : processRelativeTime,
yy : processRelativeTime
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/el.js b/resources/lib/moment/locale/el.js
index eb8eb1a9..6dc769e2 100644
--- a/resources/lib/moment/locale/el.js
+++ b/resources/lib/moment/locale/el.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('el', {
@@ -38,6 +38,7 @@
meridiemParse : /[ΠΜ]\.?Μ?\.?/i,
longDateFormat : {
LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -71,7 +72,7 @@
relativeTime : {
future : 'σε %s',
past : '%s πριν',
- s : 'δευτερόλεπτα',
+ s : 'λίγα δευτερόλεπτα',
m : 'ένα λεπτό',
mm : '%d λεπτά',
h : 'μία ώρα',
@@ -83,9 +84,8 @@
y : 'ένας χρόνος',
yy : '%d χρόνια'
},
- ordinal : function (number) {
- return number + 'η';
- },
+ ordinalParse: /\d{1,2}η/,
+ ordinal: '%dη',
week : {
dow : 1, // Monday is the first day of the week.
doy : 4 // The week that contains Jan 4st is the first week of the year.
diff --git a/resources/lib/moment/locale/en-au.js b/resources/lib/moment/locale/en-au.js
index 75ad34a1..a382b0ae 100644
--- a/resources/lib/moment/locale/en-au.js
+++ b/resources/lib/moment/locale/en-au.js
@@ -7,7 +7,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('en-au', {
@@ -18,6 +18,7 @@
weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
longDateFormat : {
LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -46,6 +47,7 @@
y : 'a year',
yy : '%d years'
},
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
ordinal : function (number) {
var b = number % 10,
output = (~~(number % 100 / 10) === 1) ? 'th' :
diff --git a/resources/lib/moment/locale/en-ca.js b/resources/lib/moment/locale/en-ca.js
index 077dc8b5..2dec8a61 100644
--- a/resources/lib/moment/locale/en-ca.js
+++ b/resources/lib/moment/locale/en-ca.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('en-ca', {
@@ -19,6 +19,7 @@
weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
longDateFormat : {
LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
L : 'YYYY-MM-DD',
LL : 'D MMMM, YYYY',
LLL : 'D MMMM, YYYY LT',
@@ -47,6 +48,7 @@
y : 'a year',
yy : '%d years'
},
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
ordinal : function (number) {
var b = number % 10,
output = (~~(number % 100 / 10) === 1) ? 'th' :
diff --git a/resources/lib/moment/locale/en-gb.js b/resources/lib/moment/locale/en-gb.js
index 4491d4a1..4ea2b29e 100644
--- a/resources/lib/moment/locale/en-gb.js
+++ b/resources/lib/moment/locale/en-gb.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('en-gb', {
@@ -19,6 +19,7 @@
weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -47,6 +48,7 @@
y : 'a year',
yy : '%d years'
},
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
ordinal : function (number) {
var b = number % 10,
output = (~~(number % 100 / 10) === 1) ? 'th' :
diff --git a/resources/lib/moment/locale/eo.js b/resources/lib/moment/locale/eo.js
index 735ed8ea..6a3d097b 100644
--- a/resources/lib/moment/locale/eo.js
+++ b/resources/lib/moment/locale/eo.js
@@ -10,7 +10,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('eo', {
@@ -21,6 +21,7 @@
weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'YYYY-MM-DD',
LL : 'D[-an de] MMMM, YYYY',
LLL : 'D[-an de] MMMM, YYYY LT',
@@ -56,6 +57,7 @@
y : 'jaro',
yy : '%d jaroj'
},
+ ordinalParse: /\d{1,2}a/,
ordinal : '%da',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/es.js b/resources/lib/moment/locale/es.js
index 04b83a80..b6e30b10 100644
--- a/resources/lib/moment/locale/es.js
+++ b/resources/lib/moment/locale/es.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
@@ -28,6 +28,7 @@
weekdaysMin : 'Do_Lu_Ma_Mi_Ju_Vi_Sá'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
LLL : 'D [de] MMMM [de] YYYY LT',
@@ -66,6 +67,7 @@
y : 'un año',
yy : '%d años'
},
+ ordinalParse : /\d{1,2}º/,
ordinal : '%dº',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/et.js b/resources/lib/moment/locale/et.js
index 242ee169..7dbcee72 100644
--- a/resources/lib/moment/locale/et.js
+++ b/resources/lib/moment/locale/et.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function processRelativeTime(number, withoutSuffix, key, isFuture) {
@@ -39,6 +39,7 @@
weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY LT',
@@ -67,6 +68,7 @@
y : processRelativeTime,
yy : processRelativeTime
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/eu.js b/resources/lib/moment/locale/eu.js
index 8fb89b49..c455c466 100644
--- a/resources/lib/moment/locale/eu.js
+++ b/resources/lib/moment/locale/eu.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('eu', {
@@ -19,6 +19,7 @@
weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'YYYY-MM-DD',
LL : 'YYYY[ko] MMMM[ren] D[a]',
LLL : 'YYYY[ko] MMMM[ren] D[a] LT',
@@ -51,6 +52,7 @@
y : 'urte bat',
yy : '%d urte'
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/fa.js b/resources/lib/moment/locale/fa.js
index b1151bdd..ad2087a2 100644
--- a/resources/lib/moment/locale/fa.js
+++ b/resources/lib/moment/locale/fa.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var symbolMap = {
@@ -43,6 +43,7 @@
weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -88,6 +89,7 @@
return symbolMap[match];
}).replace(/,/g, '،');
},
+ ordinalParse: /\d{1,2}م/,
ordinal : '%dم',
week : {
dow : 6, // Saturday is the first day of the week.
diff --git a/resources/lib/moment/locale/fi.js b/resources/lib/moment/locale/fi.js
index 1fedcaba..f884c3ef 100644
--- a/resources/lib/moment/locale/fi.js
+++ b/resources/lib/moment/locale/fi.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
@@ -64,6 +64,7 @@
weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
longDateFormat : {
LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
L : 'DD.MM.YYYY',
LL : 'Do MMMM[ta] YYYY',
LLL : 'Do MMMM[ta] YYYY, [klo] LT',
@@ -96,6 +97,7 @@
y : translate,
yy : translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/fo.js b/resources/lib/moment/locale/fo.js
index a27f9da6..6b940e8e 100644
--- a/resources/lib/moment/locale/fo.js
+++ b/resources/lib/moment/locale/fo.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('fo', {
@@ -19,6 +19,7 @@
weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -47,6 +48,7 @@
y : 'eitt ár',
yy : '%d ár'
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/fr-ca.js b/resources/lib/moment/locale/fr-ca.js
index c0f1bdc6..6cac1b84 100644
--- a/resources/lib/moment/locale/fr-ca.js
+++ b/resources/lib/moment/locale/fr-ca.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('fr-ca', {
@@ -19,6 +19,7 @@
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'YYYY-MM-DD',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -47,6 +48,7 @@
y : 'un an',
yy : '%d ans'
},
+ ordinalParse: /\d{1,2}(er|)/,
ordinal : function (number) {
return number + (number === 1 ? 'er' : '');
}
diff --git a/resources/lib/moment/locale/fr.js b/resources/lib/moment/locale/fr.js
index f217ff1d..4a7cbcc5 100644
--- a/resources/lib/moment/locale/fr.js
+++ b/resources/lib/moment/locale/fr.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('fr', {
@@ -19,6 +19,7 @@
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -47,6 +48,7 @@
y : 'un an',
yy : '%d ans'
},
+ ordinalParse: /\d{1,2}(er|)/,
ordinal : function (number) {
return number + (number === 1 ? 'er' : '');
},
diff --git a/resources/lib/moment/locale/gl.js b/resources/lib/moment/locale/gl.js
index ac638629..5ff9e3fe 100644
--- a/resources/lib/moment/locale/gl.js
+++ b/resources/lib/moment/locale/gl.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('gl', {
@@ -19,6 +19,7 @@
weekdaysMin : 'Do_Lu_Ma_Mé_Xo_Ve_Sá'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -62,6 +63,7 @@
y : 'un ano',
yy : '%d anos'
},
+ ordinalParse : /\d{1,2}º/,
ordinal : '%dº',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/he.js b/resources/lib/moment/locale/he.js
index 06f954f4..9f9f4705 100644
--- a/resources/lib/moment/locale/he.js
+++ b/resources/lib/moment/locale/he.js
@@ -10,7 +10,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('he', {
@@ -21,6 +21,7 @@
weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D [ב]MMMM YYYY',
LLL : 'D [ב]MMMM YYYY LT',
diff --git a/resources/lib/moment/locale/hi.js b/resources/lib/moment/locale/hi.js
index 4e64560a..73deba5b 100644
--- a/resources/lib/moment/locale/hi.js
+++ b/resources/lib/moment/locale/hi.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var symbolMap = {
@@ -44,6 +44,7 @@
weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
longDateFormat : {
LT : 'A h:mm बजे',
+ LTS : 'A h:mm:ss बजे',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY, LT',
diff --git a/resources/lib/moment/locale/hr.js b/resources/lib/moment/locale/hr.js
index 9e3f6fa3..65264dc2 100644
--- a/resources/lib/moment/locale/hr.js
+++ b/resources/lib/moment/locale/hr.js
@@ -10,7 +10,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function translate(number, withoutSuffix, key) {
@@ -74,6 +74,7 @@
weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'DD. MM. YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY LT',
@@ -130,6 +131,7 @@
y : 'godinu',
yy : translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/hu.js b/resources/lib/moment/locale/hu.js
index 73fdb83f..7eccd1d9 100644
--- a/resources/lib/moment/locale/hu.js
+++ b/resources/lib/moment/locale/hu.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
@@ -57,6 +57,7 @@
weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'YYYY.MM.DD.',
LL : 'YYYY. MMMM D.',
LLL : 'YYYY. MMMM D., LT',
@@ -96,6 +97,7 @@
y : translate,
yy : translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/hy-am.js b/resources/lib/moment/locale/hy-am.js
index affcd7e8..053a845e 100644
--- a/resources/lib/moment/locale/hy-am.js
+++ b/resources/lib/moment/locale/hy-am.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function monthsCaseReplace(m, format) {
@@ -44,6 +44,7 @@
weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY թ.',
LLL : 'D MMMM YYYY թ., LT',
@@ -89,6 +90,7 @@
}
},
+ ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
ordinal: function (number, period) {
switch (period) {
case 'DDD':
diff --git a/resources/lib/moment/locale/id.js b/resources/lib/moment/locale/id.js
index 143426aa..36a841a6 100644
--- a/resources/lib/moment/locale/id.js
+++ b/resources/lib/moment/locale/id.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('id', {
@@ -20,6 +20,7 @@
weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
longDateFormat : {
LT : 'HH.mm',
+ LTS : 'LT.ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY [pukul] LT',
diff --git a/resources/lib/moment/locale/is.js b/resources/lib/moment/locale/is.js
index 479f82d9..21888aa2 100644
--- a/resources/lib/moment/locale/is.js
+++ b/resources/lib/moment/locale/is.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function plural(n) {
@@ -87,6 +87,7 @@
weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY [kl.] LT',
@@ -115,6 +116,7 @@
y : translate,
yy : translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/it.js b/resources/lib/moment/locale/it.js
index 66953909..9d14714f 100644
--- a/resources/lib/moment/locale/it.js
+++ b/resources/lib/moment/locale/it.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('it', {
@@ -20,6 +20,7 @@
weekdaysMin : 'D_L_Ma_Me_G_V_S'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -30,7 +31,14 @@
nextDay: '[Domani alle] LT',
nextWeek: 'dddd [alle] LT',
lastDay: '[Ieri alle] LT',
- lastWeek: '[lo scorso] dddd [alle] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[la scorsa] dddd [alle] LT';
+ default:
+ return '[lo scorso] dddd [alle] LT';
+ }
+ },
sameElse: 'L'
},
relativeTime : {
@@ -50,6 +58,7 @@
y : 'un anno',
yy : '%d anni'
},
+ ordinalParse : /\d{1,2}º/,
ordinal: '%dº',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/ja.js b/resources/lib/moment/locale/ja.js
index f14fa4e6..3f55bcfd 100644
--- a/resources/lib/moment/locale/ja.js
+++ b/resources/lib/moment/locale/ja.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('ja', {
@@ -19,6 +19,7 @@
weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
longDateFormat : {
LT : 'Ah時m分',
+ LTS : 'LTs秒',
L : 'YYYY/MM/DD',
LL : 'YYYY年M月D日',
LLL : 'YYYY年M月D日LT',
diff --git a/resources/lib/moment/locale/ka.js b/resources/lib/moment/locale/ka.js
index 73eb9c75..b56e18cb 100644
--- a/resources/lib/moment/locale/ka.js
+++ b/resources/lib/moment/locale/ka.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function monthsCaseReplace(m, format) {
@@ -45,6 +45,7 @@
weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
longDateFormat : {
LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -84,6 +85,7 @@
y : 'წელი',
yy : '%d წელი'
},
+ ordinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
ordinal : function (number) {
if (number === 0) {
return number;
diff --git a/resources/lib/moment/locale/km.js b/resources/lib/moment/locale/km.js
index 9ba4888b..8d7b9b85 100644
--- a/resources/lib/moment/locale/km.js
+++ b/resources/lib/moment/locale/km.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('km', {
@@ -19,6 +19,7 @@
weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
longDateFormat: {
LT: 'HH:mm',
+ LTS : 'LT:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY LT',
diff --git a/resources/lib/moment/locale/ko.js b/resources/lib/moment/locale/ko.js
index 57017f5e..956345bd 100644
--- a/resources/lib/moment/locale/ko.js
+++ b/resources/lib/moment/locale/ko.js
@@ -11,7 +11,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('ko', {
@@ -22,6 +22,7 @@
weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
longDateFormat : {
LT : 'A h시 m분',
+ LTS : 'A h시 m분 s초',
L : 'YYYY.MM.DD',
LL : 'YYYY년 MMMM D일',
LLL : 'YYYY년 MMMM D일 LT',
@@ -54,6 +55,7 @@
y : '일년',
yy : '%d년'
},
+ ordinalParse : /\d{1,2}일/,
ordinal : '%d일',
meridiemParse : /(오전|오후)/,
isPM : function (token) {
diff --git a/resources/lib/moment/locale/lb.js b/resources/lib/moment/locale/lb.js
index 14fab973..2e84dab3 100644
--- a/resources/lib/moment/locale/lb.js
+++ b/resources/lib/moment/locale/lb.js
@@ -12,7 +12,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function processRelativeTime(number, withoutSuffix, key, isFuture) {
@@ -91,6 +91,7 @@
weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
longDateFormat: {
LT: 'H:mm [Auer]',
+ LTS: 'H:mm:ss [Auer]',
L: 'DD.MM.YYYY',
LL: 'D. MMMM YYYY',
LLL: 'D. MMMM YYYY LT',
@@ -128,6 +129,7 @@
y : processRelativeTime,
yy : '%d Joer'
},
+ ordinalParse: /\d{1,2}\./,
ordinal: '%d.',
week: {
dow: 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/lt.js b/resources/lib/moment/locale/lt.js
index 013f8f1e..2d87e04c 100644
--- a/resources/lib/moment/locale/lt.js
+++ b/resources/lib/moment/locale/lt.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var units = {
@@ -75,6 +75,7 @@
weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'YYYY-MM-DD',
LL : 'YYYY [m.] MMMM D [d.]',
LLL : 'YYYY [m.] MMMM D [d.], LT [val.]',
@@ -107,6 +108,7 @@
y : translateSingular,
yy : translate
},
+ ordinalParse: /\d{1,2}-oji/,
ordinal : function (number) {
return number + '-oji';
},
diff --git a/resources/lib/moment/locale/lv.js b/resources/lib/moment/locale/lv.js
index 7e1892e3..47a0708c 100644
--- a/resources/lib/moment/locale/lv.js
+++ b/resources/lib/moment/locale/lv.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var units = {
@@ -40,6 +40,7 @@
weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'YYYY. [gada] D. MMMM',
LLL : 'YYYY. [gada] D. MMMM, LT',
@@ -68,6 +69,7 @@
y : 'gadu',
yy : relativeTimeWithPlural
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/mk.js b/resources/lib/moment/locale/mk.js
index 94c7fc1a..de366319 100644
--- a/resources/lib/moment/locale/mk.js
+++ b/resources/lib/moment/locale/mk.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('mk', {
@@ -19,6 +19,7 @@
weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'D.MM.YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -59,6 +60,7 @@
y : 'година',
yy : '%d години'
},
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
ordinal : function (number) {
var lastDigit = number % 10,
last2Digits = number % 100;
diff --git a/resources/lib/moment/locale/ml.js b/resources/lib/moment/locale/ml.js
index ea4d9490..38509141 100644
--- a/resources/lib/moment/locale/ml.js
+++ b/resources/lib/moment/locale/ml.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('ml', {
@@ -19,6 +19,7 @@
weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
longDateFormat : {
LT : 'A h:mm -നു',
+ LTS : 'A h:mm:ss -നു',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY, LT',
diff --git a/resources/lib/moment/locale/mr.js b/resources/lib/moment/locale/mr.js
index 141eaf86..45c200e8 100644
--- a/resources/lib/moment/locale/mr.js
+++ b/resources/lib/moment/locale/mr.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var symbolMap = {
@@ -44,6 +44,7 @@
weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
longDateFormat : {
LT : 'A h:mm वाजता',
+ LTS : 'A h:mm:ss वाजता',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY, LT',
diff --git a/resources/lib/moment/locale/ms-my.js b/resources/lib/moment/locale/ms-my.js
index 7efcbaaa..09ec280b 100644
--- a/resources/lib/moment/locale/ms-my.js
+++ b/resources/lib/moment/locale/ms-my.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('ms-my', {
@@ -19,6 +19,7 @@
weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
longDateFormat : {
LT : 'HH.mm',
+ LTS : 'LT.ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY [pukul] LT',
diff --git a/resources/lib/moment/locale/my.js b/resources/lib/moment/locale/my.js
index 138d1014..31f5c9ea 100644
--- a/resources/lib/moment/locale/my.js
+++ b/resources/lib/moment/locale/my.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var symbolMap = {
@@ -42,6 +42,7 @@
weekdaysMin: 'နွေ_လာ_င်္ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
longDateFormat: {
LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
L: 'DD/MM/YYYY',
LL: 'D MMMM YYYY',
LLL: 'D MMMM YYYY LT',
diff --git a/resources/lib/moment/locale/nb.js b/resources/lib/moment/locale/nb.js
index 533659d5..4764b505 100644
--- a/resources/lib/moment/locale/nb.js
+++ b/resources/lib/moment/locale/nb.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('nb', {
@@ -20,6 +20,7 @@
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
longDateFormat : {
LT : 'H.mm',
+ LTS : 'LT.ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY [kl.] LT',
@@ -48,6 +49,7 @@
y : 'ett år',
yy : '%d år'
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/ne.js b/resources/lib/moment/locale/ne.js
index 51629ebd..ceb28341 100644
--- a/resources/lib/moment/locale/ne.js
+++ b/resources/lib/moment/locale/ne.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var symbolMap = {
@@ -44,6 +44,7 @@
weekdaysMin : 'आइ._सो._मङ्_बु._बि._शु._श.'.split('_'),
longDateFormat : {
LT : 'Aको h:mm बजे',
+ LTS : 'Aको h:mm:ss बजे',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY, LT',
diff --git a/resources/lib/moment/locale/nl.js b/resources/lib/moment/locale/nl.js
index 213beeb8..9f4fdfe7 100644
--- a/resources/lib/moment/locale/nl.js
+++ b/resources/lib/moment/locale/nl.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
@@ -28,6 +28,7 @@
weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD-MM-YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -56,6 +57,7 @@
y : 'één jaar',
yy : '%d jaar'
},
+ ordinalParse: /\d{1,2}(ste|de)/,
ordinal : function (number) {
return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
},
diff --git a/resources/lib/moment/locale/nn.js b/resources/lib/moment/locale/nn.js
index c5b65055..d7a82380 100644
--- a/resources/lib/moment/locale/nn.js
+++ b/resources/lib/moment/locale/nn.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('nn', {
@@ -19,6 +19,7 @@
weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -47,6 +48,7 @@
y : 'eit år',
yy : '%d år'
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/pl.js b/resources/lib/moment/locale/pl.js
index 63a62f13..418ca817 100644
--- a/resources/lib/moment/locale/pl.js
+++ b/resources/lib/moment/locale/pl.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
@@ -50,6 +50,7 @@
weekdaysMin : 'N_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -89,6 +90,7 @@
y : 'rok',
yy : translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/pt-br.js b/resources/lib/moment/locale/pt-br.js
index 44eedaf0..813c2de4 100644
--- a/resources/lib/moment/locale/pt-br.js
+++ b/resources/lib/moment/locale/pt-br.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('pt-br', {
@@ -19,6 +19,7 @@
weekdaysMin : 'dom_2ª_3ª_4ª_5ª_6ª_sáb'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
LLL : 'D [de] MMMM [de] YYYY [às] LT',
@@ -51,6 +52,7 @@
y : 'um ano',
yy : '%d anos'
},
+ ordinalParse: /\d{1,2}º/,
ordinal : '%dº'
});
}));
diff --git a/resources/lib/moment/locale/pt.js b/resources/lib/moment/locale/pt.js
index aced692e..4afd5643 100644
--- a/resources/lib/moment/locale/pt.js
+++ b/resources/lib/moment/locale/pt.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('pt', {
@@ -19,6 +19,7 @@
weekdaysMin : 'dom_2ª_3ª_4ª_5ª_6ª_sáb'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D [de] MMMM [de] YYYY',
LLL : 'D [de] MMMM [de] YYYY LT',
@@ -51,6 +52,7 @@
y : 'um ano',
yy : '%d anos'
},
+ ordinalParse: /\d{1,2}º/,
ordinal : '%dº',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/ro.js b/resources/lib/moment/locale/ro.js
index dc34d3c3..fcc7d07d 100644
--- a/resources/lib/moment/locale/ro.js
+++ b/resources/lib/moment/locale/ro.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function relativeTimeWithPlural(number, withoutSuffix, key) {
@@ -36,6 +36,7 @@
weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY H:mm',
diff --git a/resources/lib/moment/locale/ru.js b/resources/lib/moment/locale/ru.js
index 2f15233b..5adfa9ac 100644
--- a/resources/lib/moment/locale/ru.js
+++ b/resources/lib/moment/locale/ru.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function plural(word, num) {
@@ -48,7 +48,7 @@
function monthsShortCaseReplace(m, format) {
var monthsShort = {
- 'nominative': 'янв_фев_мар_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
+ 'nominative': 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_')
},
@@ -65,7 +65,7 @@
'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_')
},
- nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую)? ?\] ?dddd/).test(format) ?
+ nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/).test(format) ?
'accusative' :
'nominative';
@@ -81,6 +81,7 @@
monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i],
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY г.',
LLL : 'D MMMM YYYY г., LT',
@@ -93,18 +94,26 @@
nextWeek: function () {
return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';
},
- lastWeek: function () {
- switch (this.day()) {
- case 0:
- return '[В прошлое] dddd [в] LT';
- case 1:
- case 2:
- case 4:
- return '[В прошлый] dddd [в] LT';
- case 3:
- case 5:
- case 6:
- return '[В прошлую] dddd [в] LT';
+ lastWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В прошлое] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В прошлый] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В прошлую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
}
},
sameElse: 'L'
@@ -142,6 +151,7 @@
}
},
+ ordinalParse: /\d{1,2}-(й|го|я)/,
ordinal: function (number, period) {
switch (period) {
case 'M':
diff --git a/resources/lib/moment/locale/sk.js b/resources/lib/moment/locale/sk.js
index 991afebb..f9d74c5d 100644
--- a/resources/lib/moment/locale/sk.js
+++ b/resources/lib/moment/locale/sk.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),
@@ -88,6 +88,7 @@
weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
longDateFormat : {
LT: 'H:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY LT',
@@ -147,6 +148,7 @@
y : translate,
yy : translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/sl.js b/resources/lib/moment/locale/sl.js
index 2bdbf1cd..232695fa 100644
--- a/resources/lib/moment/locale/sl.js
+++ b/resources/lib/moment/locale/sl.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function translate(number, withoutSuffix, key) {
@@ -80,6 +80,7 @@
weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
longDateFormat : {
LT : 'H:mm',
+ LTS : 'LT:ss',
L : 'DD. MM. YYYY',
LL : 'D. MMMM YYYY',
LLL : 'D. MMMM YYYY LT',
@@ -135,6 +136,7 @@
y : 'eno leto',
yy : translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/sq.js b/resources/lib/moment/locale/sq.js
index 6ae41787..415495aa 100644
--- a/resources/lib/moment/locale/sq.js
+++ b/resources/lib/moment/locale/sq.js
@@ -10,7 +10,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('sq', {
@@ -24,6 +24,7 @@
},
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -52,6 +53,7 @@
y : 'një vit',
yy : '%d vite'
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/sr-cyrl.js b/resources/lib/moment/locale/sr-cyrl.js
index 7278de6e..57619b64 100644
--- a/resources/lib/moment/locale/sr-cyrl.js
+++ b/resources/lib/moment/locale/sr-cyrl.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var translator = {
@@ -42,6 +42,7 @@
weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
longDateFormat: {
LT: 'H:mm',
+ LTS : 'LT:ss',
L: 'DD. MM. YYYY',
LL: 'D. MMMM YYYY',
LLL: 'D. MMMM YYYY LT',
@@ -96,6 +97,7 @@
y : 'годину',
yy : translator.translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/sr.js b/resources/lib/moment/locale/sr.js
index d008282e..6f142843 100644
--- a/resources/lib/moment/locale/sr.js
+++ b/resources/lib/moment/locale/sr.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var translator = {
@@ -42,6 +42,7 @@
weekdaysMin: ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],
longDateFormat: {
LT: 'H:mm',
+ LTS : 'LT:ss',
L: 'DD. MM. YYYY',
LL: 'D. MMMM YYYY',
LLL: 'D. MMMM YYYY LT',
@@ -96,6 +97,7 @@
y : 'godinu',
yy : translator.translate
},
+ ordinalParse: /\d{1,2}\./,
ordinal : '%d.',
week : {
dow : 1, // Monday is the first day of the week.
diff --git a/resources/lib/moment/locale/sv.js b/resources/lib/moment/locale/sv.js
index 634b3cfe..6e149580 100644
--- a/resources/lib/moment/locale/sv.js
+++ b/resources/lib/moment/locale/sv.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('sv', {
@@ -19,6 +19,7 @@
weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'YYYY-MM-DD',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -47,6 +48,7 @@
y : 'ett år',
yy : '%d år'
},
+ ordinalParse: /\d{1,2}(e|a)/,
ordinal : function (number) {
var b = number % 10,
output = (~~(number % 100 / 10) === 1) ? 'e' :
diff --git a/resources/lib/moment/locale/ta.js b/resources/lib/moment/locale/ta.js
index 53bab0d9..d0356a3e 100644
--- a/resources/lib/moment/locale/ta.js
+++ b/resources/lib/moment/locale/ta.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
/*var symbolMap = {
@@ -44,6 +44,7 @@
weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY, LT',
@@ -82,6 +83,7 @@
return symbolMap[match];
});
},*/
+ ordinalParse: /\d{1,2}வது/,
ordinal : function (number) {
return number + 'வது';
},
diff --git a/resources/lib/moment/locale/th.js b/resources/lib/moment/locale/th.js
index fc99701d..e3c54229 100644
--- a/resources/lib/moment/locale/th.js
+++ b/resources/lib/moment/locale/th.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('th', {
@@ -19,6 +19,7 @@
weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
longDateFormat : {
LT : 'H นาฬิกา m นาที',
+ LTS : 'LT s วินาที',
L : 'YYYY/MM/DD',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY เวลา LT',
diff --git a/resources/lib/moment/locale/tl-ph.js b/resources/lib/moment/locale/tl-ph.js
index c15cc1f0..40dbb075 100644
--- a/resources/lib/moment/locale/tl-ph.js
+++ b/resources/lib/moment/locale/tl-ph.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('tl-ph', {
@@ -19,6 +19,7 @@
weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'MM/D/YYYY',
LL : 'MMMM D, YYYY',
LLL : 'MMMM D, YYYY LT',
@@ -47,6 +48,7 @@
y : 'isang taon',
yy : '%d taon'
},
+ ordinalParse: /\d{1,2}/,
ordinal : function (number) {
return number;
},
diff --git a/resources/lib/moment/locale/tr.js b/resources/lib/moment/locale/tr.js
index 36e8fca1..cd0a7462 100644
--- a/resources/lib/moment/locale/tr.js
+++ b/resources/lib/moment/locale/tr.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
var suffixes = {
@@ -46,6 +46,7 @@
weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
@@ -74,6 +75,7 @@
y : 'bir yıl',
yy : '%d yıl'
},
+ ordinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,
ordinal : function (number) {
if (number === 0) { // special case for zero
return number + '\'ıncı';
diff --git a/resources/lib/moment/locale/tzm-latn.js b/resources/lib/moment/locale/tzm-latn.js
index 31897725..34592b45 100644
--- a/resources/lib/moment/locale/tzm-latn.js
+++ b/resources/lib/moment/locale/tzm-latn.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('tzm-latn', {
@@ -19,6 +19,7 @@
weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
diff --git a/resources/lib/moment/locale/tzm.js b/resources/lib/moment/locale/tzm.js
index 0a7f3f1e..95915212 100644
--- a/resources/lib/moment/locale/tzm.js
+++ b/resources/lib/moment/locale/tzm.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('tzm', {
@@ -19,6 +19,7 @@
weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS: 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
diff --git a/resources/lib/moment/locale/uk.js b/resources/lib/moment/locale/uk.js
index bc22fff9..3dce4bca 100644
--- a/resources/lib/moment/locale/uk.js
+++ b/resources/lib/moment/locale/uk.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
function plural(word, num) {
@@ -79,6 +79,7 @@
weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD.MM.YYYY',
LL : 'D MMMM YYYY р.',
LLL : 'D MMMM YYYY р., LT',
@@ -134,6 +135,7 @@
}
},
+ ordinalParse: /\d{1,2}-(й|го)/,
ordinal: function (number, period) {
switch (period) {
case 'M':
diff --git a/resources/lib/moment/locale/uz.js b/resources/lib/moment/locale/uz.js
index 62fb89e0..139e4deb 100644
--- a/resources/lib/moment/locale/uz.js
+++ b/resources/lib/moment/locale/uz.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('uz', {
@@ -19,6 +19,7 @@
weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM YYYY',
LLL : 'D MMMM YYYY LT',
diff --git a/resources/lib/moment/locale/vi.js b/resources/lib/moment/locale/vi.js
index 20e3ffe2..15ec7dda 100644
--- a/resources/lib/moment/locale/vi.js
+++ b/resources/lib/moment/locale/vi.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('vi', {
@@ -19,6 +19,7 @@
weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
longDateFormat : {
LT : 'HH:mm',
+ LTS : 'LT:ss',
L : 'DD/MM/YYYY',
LL : 'D MMMM [năm] YYYY',
LLL : 'D MMMM [năm] YYYY LT',
@@ -51,6 +52,7 @@
y : 'một năm',
yy : '%d năm'
},
+ ordinalParse: /\d{1,2}/,
ordinal : function (number) {
return number;
},
diff --git a/resources/lib/moment/locale/zh-cn.js b/resources/lib/moment/locale/zh-cn.js
index aff26c5e..b8a0bd2e 100644
--- a/resources/lib/moment/locale/zh-cn.js
+++ b/resources/lib/moment/locale/zh-cn.js
@@ -9,7 +9,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('zh-cn', {
@@ -20,6 +20,7 @@
weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
longDateFormat : {
LT : 'Ah点mm',
+ LTS : 'Ah点m分s秒',
L : 'YYYY-MM-DD',
LL : 'YYYY年MMMD日',
LLL : 'YYYY年MMMD日LT',
@@ -69,6 +70,7 @@
},
sameElse : 'LL'
},
+ ordinalParse: /\d{1,2}(日|月|周)/,
ordinal : function (number, period) {
switch (period) {
case 'd':
diff --git a/resources/lib/moment/locale/zh-tw.js b/resources/lib/moment/locale/zh-tw.js
index 71f99a26..b3c4439c 100644
--- a/resources/lib/moment/locale/zh-tw.js
+++ b/resources/lib/moment/locale/zh-tw.js
@@ -8,7 +8,7 @@
} else if (typeof exports === 'object') {
module.exports = factory(require('../moment')); // Node
} else {
- factory(window.moment); // Browser global
+ factory((typeof global !== 'undefined' ? global : this).moment); // node or other global
}
}(function (moment) {
return moment.defineLocale('zh-tw', {
@@ -19,6 +19,7 @@
weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
longDateFormat : {
LT : 'Ah點mm',
+ LTS : 'Ah點m分s秒',
L : 'YYYY年MMMD日',
LL : 'YYYY年MMMD日',
LLL : 'YYYY年MMMD日LT',
@@ -50,6 +51,7 @@
lastWeek : '[上]ddddLT',
sameElse : 'L'
},
+ ordinalParse: /\d{1,2}(日|月|週)/,
ordinal : function (number, period) {
switch (period) {
case 'd' :
diff --git a/resources/lib/moment/moment.js b/resources/lib/moment/moment.js
index d100a9c4..85e190d4 100644
--- a/resources/lib/moment/moment.js
+++ b/resources/lib/moment/moment.js
@@ -1,5 +1,5 @@
//! moment.js
-//! version : 2.8.3
+//! version : 2.8.4
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT
//! momentjs.com
@@ -10,7 +10,7 @@
************************************/
var moment,
- VERSION = '2.8.3',
+ VERSION = '2.8.4',
// the global-scope this is NOT the global object in Node.js
globalScope = typeof global !== 'undefined' ? global : this,
oldGlobalMoment,
@@ -33,7 +33,7 @@
momentProperties = [],
// check for nodeJS
- hasModule = (typeof module !== 'undefined' && module.exports),
+ hasModule = (typeof module !== 'undefined' && module && module.exports),
// ASP.NET json date format regex
aspNetJsonRegex = /^\/?Date\((\-?\d+)/i,
@@ -44,8 +44,8 @@
isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,
// format tokens
- formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,
- localFormattingTokens = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,
+ formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,
+ localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
// parsing token regexes
parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99
@@ -56,8 +56,8 @@
parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic.
parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
parseTokenT = /T/i, // T (ISO separator)
+ parseTokenOffsetMs = /[\+\-]?\d+/, // 1234567890123
parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
- parseTokenOrdinal = /\d{1,2}/,
//strict parsing regexes
parseTokenOneDigit = /\d/, // 0 - 9
@@ -272,6 +272,9 @@
zz : function () {
return this.zoneName();
},
+ x : function () {
+ return this.valueOf();
+ },
X : function () {
return this.unix();
},
@@ -698,7 +701,10 @@
overflow =
m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH :
m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE :
- m._a[HOUR] < 0 || m._a[HOUR] > 23 ? HOUR :
+ m._a[HOUR] < 0 || m._a[HOUR] > 24 ||
+ (m._a[HOUR] === 24 && (m._a[MINUTE] !== 0 ||
+ m._a[SECOND] !== 0 ||
+ m._a[MILLISECOND] !== 0)) ? HOUR :
m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE :
m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND :
m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND :
@@ -725,7 +731,8 @@
if (m._strict) {
m._isValid = m._isValid &&
m._pf.charsLeftOver === 0 &&
- m._pf.unusedTokens.length === 0;
+ m._pf.unusedTokens.length === 0 &&
+ m._pf.bigHour === undefined;
}
}
return m._isValid;
@@ -777,8 +784,18 @@
// Return a moment from input, that is local/utc/zone equivalent to model.
function makeAs(input, model) {
- return model._isUTC ? moment(input).zone(model._offset || 0) :
- moment(input).local();
+ var res, diff;
+ if (model._isUTC) {
+ res = model.clone();
+ diff = (moment.isMoment(input) || isDate(input) ?
+ +input : +moment(input)) - (+res);
+ // Use low-level api, because this fn is low-level api.
+ res._d.setTime(+res._d + diff);
+ moment.updateOffset(res, false);
+ return res;
+ } else {
+ return moment(input).local();
+ }
}
/************************************
@@ -798,6 +815,9 @@
this['_' + i] = prop;
}
}
+ // Lenient ordinal parsing accepts just a number in addition to
+ // number + (possibly) stuff coming from _ordinalParseLenient.
+ this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source);
},
_months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
@@ -810,22 +830,32 @@
return this._monthsShort[m.month()];
},
- monthsParse : function (monthName) {
+ monthsParse : function (monthName, format, strict) {
var i, mom, regex;
if (!this._monthsParse) {
this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
}
for (i = 0; i < 12; i++) {
// make the regex if we don't have it already
- if (!this._monthsParse[i]) {
- mom = moment.utc([2000, i]);
+ mom = moment.utc([2000, i]);
+ if (strict && !this._longMonthsParse[i]) {
+ this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+ this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+ }
+ if (!strict && !this._monthsParse[i]) {
regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
}
// test the regex
- if (this._monthsParse[i].test(monthName)) {
+ if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (!strict && this._monthsParse[i].test(monthName)) {
return i;
}
}
@@ -868,6 +898,7 @@
},
_longDateFormat : {
+ LTS : 'h:mm:ss A',
LT : 'h:mm A',
L : 'MM/DD/YYYY',
LL : 'MMMM D, YYYY',
@@ -908,9 +939,9 @@
lastWeek : '[Last] dddd [at] LT',
sameElse : 'L'
},
- calendar : function (key, mom) {
+ calendar : function (key, mom, now) {
var output = this._calendar[key];
- return typeof output === 'function' ? output.apply(mom) : output;
+ return typeof output === 'function' ? output.apply(mom, [now]) : output;
},
_relativeTime : {
@@ -945,6 +976,7 @@
return this._ordinal.replace('%d', number);
},
_ordinal : '%d',
+ _ordinalParse : /\d{1,2}/,
preparse : function (string) {
return string;
@@ -1086,6 +1118,8 @@
case 'a':
case 'A':
return config._locale._meridiemParse;
+ case 'x':
+ return parseTokenOffsetMs;
case 'X':
return parseTokenTimestampMs;
case 'Z':
@@ -1120,7 +1154,7 @@
case 'E':
return parseTokenOneOrTwoDigits;
case 'Do':
- return parseTokenOrdinal;
+ return strict ? config._locale._ordinalParse : config._locale._ordinalParseLenient;
default :
a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i'));
return a;
@@ -1157,7 +1191,7 @@
break;
case 'MMM' : // fall through to MMMM
case 'MMMM' :
- a = config._locale.monthsParse(input);
+ a = config._locale.monthsParse(input, token, config._strict);
// if we didn't find a month name, mark the date as invalid.
if (a != null) {
datePartArray[MONTH] = a;
@@ -1174,7 +1208,8 @@
break;
case 'Do' :
if (input != null) {
- datePartArray[DATE] = toInt(parseInt(input, 10));
+ datePartArray[DATE] = toInt(parseInt(
+ input.match(/\d{1,2}/)[0], 10));
}
break;
// DAY OF YEAR
@@ -1199,11 +1234,13 @@
case 'A' :
config._isPm = config._locale.isPM(input);
break;
- // 24 HOUR
- case 'H' : // fall through to hh
- case 'HH' : // fall through to hh
+ // HOUR
case 'h' : // fall through to hh
case 'hh' :
+ config._pf.bigHour = true;
+ /* falls through */
+ case 'H' : // fall through to HH
+ case 'HH' :
datePartArray[HOUR] = toInt(input);
break;
// MINUTE
@@ -1223,6 +1260,10 @@
case 'SSSS' :
datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000);
break;
+ // UNIX OFFSET (MILLISECONDS)
+ case 'x':
+ config._d = new Date(toInt(input));
+ break;
// UNIX TIMESTAMP WITH MS
case 'X':
config._d = new Date(parseFloat(input) * 1000);
@@ -1359,12 +1400,25 @@
config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
}
+ // Check for 24:00:00.000
+ if (config._a[HOUR] === 24 &&
+ config._a[MINUTE] === 0 &&
+ config._a[SECOND] === 0 &&
+ config._a[MILLISECOND] === 0) {
+ config._nextDay = true;
+ config._a[HOUR] = 0;
+ }
+
config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input);
// Apply timezone offset from input. The actual zone can be changed
// with parseZone.
if (config._tzm != null) {
config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm);
}
+
+ if (config._nextDay) {
+ config._a[HOUR] = 24;
+ }
}
function dateFromObject(config) {
@@ -1378,7 +1432,7 @@
config._a = [
normalizedInput.year,
normalizedInput.month,
- normalizedInput.day,
+ normalizedInput.day || normalizedInput.date,
normalizedInput.hour,
normalizedInput.minute,
normalizedInput.second,
@@ -1451,6 +1505,10 @@
config._pf.unusedInput.push(string);
}
+ // clear _12h flag if hour is <= 12
+ if (config._pf.bigHour === true && config._a[HOUR] <= 12) {
+ config._pf.bigHour = undefined;
+ }
// handle am pm
if (config._isPm && config._a[HOUR] < 12) {
config._a[HOUR] += 12;
@@ -1459,7 +1517,6 @@
if (config._isPm === false && config._a[HOUR] === 12) {
config._a[HOUR] = 0;
}
-
dateFromConfig(config);
checkOverflow(config);
}
@@ -1719,7 +1776,8 @@
function makeMoment(config) {
var input = config._i,
- format = config._f;
+ format = config._f,
+ res;
config._locale = config._locale || moment.localeData(config._l);
@@ -1743,7 +1801,14 @@
makeDateFromInput(config);
}
- return new Moment(config);
+ res = new Moment(config);
+ if (res._nextDay) {
+ // Adding is smart enough around DST
+ res.add(1, 'd');
+ res._nextDay = undefined;
+ }
+
+ return res;
}
moment = function (input, format, locale, strict) {
@@ -1775,7 +1840,7 @@
'release. Please refer to ' +
'https://github.com/moment/moment/issues/1407 for more info.',
function (config) {
- config._d = new Date(config._i);
+ config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
}
);
@@ -2087,7 +2152,12 @@
toISOString : function () {
var m = moment(this).utc();
if (0 < m.year() && m.year() <= 9999) {
- return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ if ('function' === typeof Date.prototype.toISOString) {
+ // native implementation is ~50x faster, use it when we can
+ return this.toDate().toISOString();
+ } else {
+ return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ }
} else {
return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
}
@@ -2206,7 +2276,7 @@
diff < 1 ? 'sameDay' :
diff < 2 ? 'nextDay' :
diff < 7 ? 'nextWeek' : 'sameElse';
- return this.format(this.localeData().calendar(format, this));
+ return this.format(this.localeData().calendar(format, this, moment(now)));
},
isLeapYear : function () {
@@ -2275,36 +2345,45 @@
endOf: function (units) {
units = normalizeUnits(units);
+ if (units === undefined || units === 'millisecond') {
+ return this;
+ }
return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
},
isAfter: function (input, units) {
+ var inputMs;
units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
if (units === 'millisecond') {
input = moment.isMoment(input) ? input : moment(input);
return +this > +input;
} else {
- return +this.clone().startOf(units) > +moment(input).startOf(units);
+ inputMs = moment.isMoment(input) ? +input : +moment(input);
+ return inputMs < +this.clone().startOf(units);
}
},
isBefore: function (input, units) {
+ var inputMs;
units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
if (units === 'millisecond') {
input = moment.isMoment(input) ? input : moment(input);
return +this < +input;
} else {
- return +this.clone().startOf(units) < +moment(input).startOf(units);
+ inputMs = moment.isMoment(input) ? +input : +moment(input);
+ return +this.clone().endOf(units) < inputMs;
}
},
isSame: function (input, units) {
+ var inputMs;
units = normalizeUnits(units || 'millisecond');
if (units === 'millisecond') {
input = moment.isMoment(input) ? input : moment(input);
return +this === +input;
} else {
- return +this.clone().startOf(units) === +makeAs(input, this).startOf(units);
+ inputMs = +moment(input);
+ return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units));
}
},
@@ -2481,7 +2560,7 @@
},
lang : deprecate(
- 'moment().lang() is deprecated. Use moment().localeData() instead.',
+ 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
function (key) {
if (key === undefined) {
return this.localeData();
@@ -2702,7 +2781,7 @@
return units === 'month' ? months : months / 12;
} else {
// handle milliseconds separately because of floating point math errors (issue #1867)
- days = this._days + yearsToDays(this._months / 12);
+ days = this._days + Math.round(yearsToDays(this._months / 12));
switch (units) {
case 'week': return days / 7 + this._milliseconds / 6048e5;
case 'day': return days + this._milliseconds / 864e5;
@@ -2804,6 +2883,7 @@
// Set default locale, other locale will inherit from English.
moment.locale('en', {
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
ordinal : function (number) {
var b = number % 10,
output = (toInt(number % 100 / 10) === 1) ? 'th' :
diff --git a/resources/lib/mustache/mustache.js b/resources/lib/mustache/mustache.js
new file mode 100644
index 00000000..dbc98231
--- /dev/null
+++ b/resources/lib/mustache/mustache.js
@@ -0,0 +1,578 @@
+/*!
+ * mustache.js - Logic-less {{mustache}} templates with JavaScript
+ * http://github.com/janl/mustache.js
+ */
+
+/*global define: false*/
+
+(function (global, factory) {
+ if (typeof exports === "object" && exports) {
+ factory(exports); // CommonJS
+ } else if (typeof define === "function" && define.amd) {
+ define(['exports'], factory); // AMD
+ } else {
+ factory(global.Mustache = {}); // <script>
+ }
+}(this, function (mustache) {
+
+ var Object_toString = Object.prototype.toString;
+ var isArray = Array.isArray || function (object) {
+ return Object_toString.call(object) === '[object Array]';
+ };
+
+ function isFunction(object) {
+ return typeof object === 'function';
+ }
+
+ function escapeRegExp(string) {
+ return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+ }
+
+ // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577
+ // See https://github.com/janl/mustache.js/issues/189
+ var RegExp_test = RegExp.prototype.test;
+ function testRegExp(re, string) {
+ return RegExp_test.call(re, string);
+ }
+
+ var nonSpaceRe = /\S/;
+ function isWhitespace(string) {
+ return !testRegExp(nonSpaceRe, string);
+ }
+
+ var entityMap = {
+ "&": "&amp;",
+ "<": "&lt;",
+ ">": "&gt;",
+ '"': '&quot;',
+ "'": '&#39;',
+ "/": '&#x2F;'
+ };
+
+ function escapeHtml(string) {
+ return String(string).replace(/[&<>"'\/]/g, function (s) {
+ return entityMap[s];
+ });
+ }
+
+ var whiteRe = /\s*/;
+ var spaceRe = /\s+/;
+ var equalsRe = /\s*=/;
+ var curlyRe = /\s*\}/;
+ var tagRe = /#|\^|\/|>|\{|&|=|!/;
+
+ /**
+ * Breaks up the given `template` string into a tree of tokens. If the `tags`
+ * argument is given here it must be an array with two string values: the
+ * opening and closing tags used in the template (e.g. [ "<%", "%>" ]). Of
+ * course, the default is to use mustaches (i.e. mustache.tags).
+ *
+ * A token is an array with at least 4 elements. The first element is the
+ * mustache symbol that was used inside the tag, e.g. "#" or "&". If the tag
+ * did not contain a symbol (i.e. {{myValue}}) this element is "name". For
+ * all text that appears outside a symbol this element is "text".
+ *
+ * The second element of a token is its "value". For mustache tags this is
+ * whatever else was inside the tag besides the opening symbol. For text tokens
+ * this is the text itself.
+ *
+ * The third and fourth elements of the token are the start and end indices,
+ * respectively, of the token in the original template.
+ *
+ * Tokens that are the root node of a subtree contain two more elements: 1) an
+ * array of tokens in the subtree and 2) the index in the original template at
+ * which the closing tag for that section begins.
+ */
+ function parseTemplate(template, tags) {
+ if (!template)
+ return [];
+
+ var sections = []; // Stack to hold section tokens
+ var tokens = []; // Buffer to hold the tokens
+ var spaces = []; // Indices of whitespace tokens on the current line
+ var hasTag = false; // Is there a {{tag}} on the current line?
+ var nonSpace = false; // Is there a non-space char on the current line?
+
+ // Strips all whitespace tokens array for the current line
+ // if there was a {{#tag}} on it and otherwise only space.
+ function stripSpace() {
+ if (hasTag && !nonSpace) {
+ while (spaces.length)
+ delete tokens[spaces.pop()];
+ } else {
+ spaces = [];
+ }
+
+ hasTag = false;
+ nonSpace = false;
+ }
+
+ var openingTagRe, closingTagRe, closingCurlyRe;
+ function compileTags(tags) {
+ if (typeof tags === 'string')
+ tags = tags.split(spaceRe, 2);
+
+ if (!isArray(tags) || tags.length !== 2)
+ throw new Error('Invalid tags: ' + tags);
+
+ openingTagRe = new RegExp(escapeRegExp(tags[0]) + '\\s*');
+ closingTagRe = new RegExp('\\s*' + escapeRegExp(tags[1]));
+ closingCurlyRe = new RegExp('\\s*' + escapeRegExp('}' + tags[1]));
+ }
+
+ compileTags(tags || mustache.tags);
+
+ var scanner = new Scanner(template);
+
+ var start, type, value, chr, token, openSection;
+ while (!scanner.eos()) {
+ start = scanner.pos;
+
+ // Match any text between tags.
+ value = scanner.scanUntil(openingTagRe);
+
+ if (value) {
+ for (var i = 0, valueLength = value.length; i < valueLength; ++i) {
+ chr = value.charAt(i);
+
+ if (isWhitespace(chr)) {
+ spaces.push(tokens.length);
+ } else {
+ nonSpace = true;
+ }
+
+ tokens.push([ 'text', chr, start, start + 1 ]);
+ start += 1;
+
+ // Check for whitespace on the current line.
+ if (chr === '\n')
+ stripSpace();
+ }
+ }
+
+ // Match the opening tag.
+ if (!scanner.scan(openingTagRe))
+ break;
+
+ hasTag = true;
+
+ // Get the tag type.
+ type = scanner.scan(tagRe) || 'name';
+ scanner.scan(whiteRe);
+
+ // Get the tag value.
+ if (type === '=') {
+ value = scanner.scanUntil(equalsRe);
+ scanner.scan(equalsRe);
+ scanner.scanUntil(closingTagRe);
+ } else if (type === '{') {
+ value = scanner.scanUntil(closingCurlyRe);
+ scanner.scan(curlyRe);
+ scanner.scanUntil(closingTagRe);
+ type = '&';
+ } else {
+ value = scanner.scanUntil(closingTagRe);
+ }
+
+ // Match the closing tag.
+ if (!scanner.scan(closingTagRe))
+ throw new Error('Unclosed tag at ' + scanner.pos);
+
+ token = [ type, value, start, scanner.pos ];
+ tokens.push(token);
+
+ if (type === '#' || type === '^') {
+ sections.push(token);
+ } else if (type === '/') {
+ // Check section nesting.
+ openSection = sections.pop();
+
+ if (!openSection)
+ throw new Error('Unopened section "' + value + '" at ' + start);
+
+ if (openSection[1] !== value)
+ throw new Error('Unclosed section "' + openSection[1] + '" at ' + start);
+ } else if (type === 'name' || type === '{' || type === '&') {
+ nonSpace = true;
+ } else if (type === '=') {
+ // Set the tags for the next time around.
+ compileTags(value);
+ }
+ }
+
+ // Make sure there are no open sections when we're done.
+ openSection = sections.pop();
+
+ if (openSection)
+ throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos);
+
+ return nestTokens(squashTokens(tokens));
+ }
+
+ /**
+ * Combines the values of consecutive text tokens in the given `tokens` array
+ * to a single token.
+ */
+ function squashTokens(tokens) {
+ var squashedTokens = [];
+
+ var token, lastToken;
+ for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
+ token = tokens[i];
+
+ if (token) {
+ if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {
+ lastToken[1] += token[1];
+ lastToken[3] = token[3];
+ } else {
+ squashedTokens.push(token);
+ lastToken = token;
+ }
+ }
+ }
+
+ return squashedTokens;
+ }
+
+ /**
+ * Forms the given array of `tokens` into a nested tree structure where
+ * tokens that represent a section have two additional items: 1) an array of
+ * all tokens that appear in that section and 2) the index in the original
+ * template that represents the end of that section.
+ */
+ function nestTokens(tokens) {
+ var nestedTokens = [];
+ var collector = nestedTokens;
+ var sections = [];
+
+ var token, section;
+ for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
+ token = tokens[i];
+
+ switch (token[0]) {
+ case '#':
+ case '^':
+ collector.push(token);
+ sections.push(token);
+ collector = token[4] = [];
+ break;
+ case '/':
+ section = sections.pop();
+ section[5] = token[2];
+ collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;
+ break;
+ default:
+ collector.push(token);
+ }
+ }
+
+ return nestedTokens;
+ }
+
+ /**
+ * A simple string scanner that is used by the template parser to find
+ * tokens in template strings.
+ */
+ function Scanner(string) {
+ this.string = string;
+ this.tail = string;
+ this.pos = 0;
+ }
+
+ /**
+ * Returns `true` if the tail is empty (end of string).
+ */
+ Scanner.prototype.eos = function () {
+ return this.tail === "";
+ };
+
+ /**
+ * Tries to match the given regular expression at the current position.
+ * Returns the matched text if it can match, the empty string otherwise.
+ */
+ Scanner.prototype.scan = function (re) {
+ var match = this.tail.match(re);
+
+ if (!match || match.index !== 0)
+ return '';
+
+ var string = match[0];
+
+ this.tail = this.tail.substring(string.length);
+ this.pos += string.length;
+
+ return string;
+ };
+
+ /**
+ * Skips all text until the given regular expression can be matched. Returns
+ * the skipped string, which is the entire tail if no match can be made.
+ */
+ Scanner.prototype.scanUntil = function (re) {
+ var index = this.tail.search(re), match;
+
+ switch (index) {
+ case -1:
+ match = this.tail;
+ this.tail = "";
+ break;
+ case 0:
+ match = "";
+ break;
+ default:
+ match = this.tail.substring(0, index);
+ this.tail = this.tail.substring(index);
+ }
+
+ this.pos += match.length;
+
+ return match;
+ };
+
+ /**
+ * Represents a rendering context by wrapping a view object and
+ * maintaining a reference to the parent context.
+ */
+ function Context(view, parentContext) {
+ this.view = view == null ? {} : view;
+ this.cache = { '.': this.view };
+ this.parent = parentContext;
+ }
+
+ /**
+ * Creates a new context using the given view with this context
+ * as the parent.
+ */
+ Context.prototype.push = function (view) {
+ return new Context(view, this);
+ };
+
+ /**
+ * Returns the value of the given name in this context, traversing
+ * up the context hierarchy if the value is absent in this context's view.
+ */
+ Context.prototype.lookup = function (name) {
+ var cache = this.cache;
+
+ var value;
+ if (name in cache) {
+ value = cache[name];
+ } else {
+ var context = this, names, index;
+
+ while (context) {
+ if (name.indexOf('.') > 0) {
+ value = context.view;
+ names = name.split('.');
+ index = 0;
+
+ while (value != null && index < names.length)
+ value = value[names[index++]];
+ } else if (typeof context.view == 'object') {
+ value = context.view[name];
+ }
+
+ if (value != null)
+ break;
+
+ context = context.parent;
+ }
+
+ cache[name] = value;
+ }
+
+ if (isFunction(value))
+ value = value.call(this.view);
+
+ return value;
+ };
+
+ /**
+ * A Writer knows how to take a stream of tokens and render them to a
+ * string, given a context. It also maintains a cache of templates to
+ * avoid the need to parse the same template twice.
+ */
+ function Writer() {
+ this.cache = {};
+ }
+
+ /**
+ * Clears all cached templates in this writer.
+ */
+ Writer.prototype.clearCache = function () {
+ this.cache = {};
+ };
+
+ /**
+ * Parses and caches the given `template` and returns the array of tokens
+ * that is generated from the parse.
+ */
+ Writer.prototype.parse = function (template, tags) {
+ var cache = this.cache;
+ var tokens = cache[template];
+
+ if (tokens == null)
+ tokens = cache[template] = parseTemplate(template, tags);
+
+ return tokens;
+ };
+
+ /**
+ * High-level method that is used to render the given `template` with
+ * the given `view`.
+ *
+ * The optional `partials` argument may be an object that contains the
+ * names and templates of partials that are used in the template. It may
+ * also be a function that is used to load partial templates on the fly
+ * that takes a single argument: the name of the partial.
+ */
+ Writer.prototype.render = function (template, view, partials) {
+ var tokens = this.parse(template);
+ var context = (view instanceof Context) ? view : new Context(view);
+ return this.renderTokens(tokens, context, partials, template);
+ };
+
+ /**
+ * Low-level method that renders the given array of `tokens` using
+ * the given `context` and `partials`.
+ *
+ * Note: The `originalTemplate` is only ever used to extract the portion
+ * of the original template that was contained in a higher-order section.
+ * If the template doesn't use higher-order sections, this argument may
+ * be omitted.
+ */
+ Writer.prototype.renderTokens = function (tokens, context, partials, originalTemplate) {
+ var buffer = '';
+
+ // This function is used to render an arbitrary template
+ // in the current context by higher-order sections.
+ var self = this;
+ function subRender(template) {
+ return self.render(template, context, partials);
+ }
+
+ var token, value;
+ for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
+ token = tokens[i];
+
+ switch (token[0]) {
+ case '#':
+ value = context.lookup(token[1]);
+
+ if (!value)
+ continue;
+
+ if (isArray(value)) {
+ for (var j = 0, valueLength = value.length; j < valueLength; ++j) {
+ buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate);
+ }
+ } else if (typeof value === 'object' || typeof value === 'string') {
+ buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate);
+ } else if (isFunction(value)) {
+ if (typeof originalTemplate !== 'string')
+ throw new Error('Cannot use higher-order sections without the original template');
+
+ // Extract the portion of the original template that the section contains.
+ value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);
+
+ if (value != null)
+ buffer += value;
+ } else {
+ buffer += this.renderTokens(token[4], context, partials, originalTemplate);
+ }
+
+ break;
+ case '^':
+ value = context.lookup(token[1]);
+
+ // Use JavaScript's definition of falsy. Include empty arrays.
+ // See https://github.com/janl/mustache.js/issues/186
+ if (!value || (isArray(value) && value.length === 0))
+ buffer += this.renderTokens(token[4], context, partials, originalTemplate);
+
+ break;
+ case '>':
+ if (!partials)
+ continue;
+
+ value = isFunction(partials) ? partials(token[1]) : partials[token[1]];
+
+ if (value != null)
+ buffer += this.renderTokens(this.parse(value), context, partials, value);
+
+ break;
+ case '&':
+ value = context.lookup(token[1]);
+
+ if (value != null)
+ buffer += value;
+
+ break;
+ case 'name':
+ value = context.lookup(token[1]);
+
+ if (value != null)
+ buffer += mustache.escape(value);
+
+ break;
+ case 'text':
+ buffer += token[1];
+ break;
+ }
+ }
+
+ return buffer;
+ };
+
+ mustache.name = "mustache.js";
+ mustache.version = "0.8.2";
+ mustache.tags = [ "{{", "}}" ];
+
+ // All high-level mustache.* functions use this writer.
+ var defaultWriter = new Writer();
+
+ /**
+ * Clears all cached templates in the default writer.
+ */
+ mustache.clearCache = function () {
+ return defaultWriter.clearCache();
+ };
+
+ /**
+ * Parses and caches the given template in the default writer and returns the
+ * array of tokens it contains. Doing this ahead of time avoids the need to
+ * parse templates on the fly as they are rendered.
+ */
+ mustache.parse = function (template, tags) {
+ return defaultWriter.parse(template, tags);
+ };
+
+ /**
+ * Renders the `template` with the given `view` and `partials` using the
+ * default writer.
+ */
+ mustache.render = function (template, view, partials) {
+ return defaultWriter.render(template, view, partials);
+ };
+
+ // This is here for backwards compatibility with 0.4.x.
+ mustache.to_html = function (template, view, partials, send) {
+ var result = mustache.render(template, view, partials);
+
+ if (isFunction(send)) {
+ send(result);
+ } else {
+ return result;
+ }
+ };
+
+ // Export the escaping function so that the user may override it.
+ // See https://github.com/janl/mustache.js/issues/244
+ mustache.escape = escapeHtml;
+
+ // Export these mainly for testing, but also for advanced usage.
+ mustache.Scanner = Scanner;
+ mustache.Context = Context;
+ mustache.Writer = Writer;
+
+}));
diff --git a/resources/lib/oojs-ui/i18n/ace.json b/resources/lib/oojs-ui/i18n/ace.json
index b37e9bce..0fdc1a89 100644
--- a/resources/lib/oojs-ui/i18n/ace.json
+++ b/resources/lib/oojs-ui/i18n/ace.json
@@ -4,7 +4,6 @@
"Si Gam Acèh"
]
},
- "ooui-dialog-action-close": "Tôp",
"ooui-outline-control-move-down": "Pinah item u yup",
"ooui-outline-control-move-up": "Pinah item u ateuëh",
"ooui-toolbar-more": "Lom"
diff --git a/resources/lib/oojs-ui/i18n/af.json b/resources/lib/oojs-ui/i18n/af.json
index c5984af0..6f79e370 100644
--- a/resources/lib/oojs-ui/i18n/af.json
+++ b/resources/lib/oojs-ui/i18n/af.json
@@ -4,7 +4,16 @@
"Naudefj"
]
},
- "ooui-dialog-action-close": "Sluit",
"ooui-outline-control-move-down": "Skuif item af",
- "ooui-outline-control-move-up": "Skuif item op"
+ "ooui-outline-control-move-up": "Skuif item op",
+ "ooui-outline-control-remove": "Verwyder item",
+ "ooui-toolbar-more": "Meer",
+ "ooui-toolgroup-expand": "Meer",
+ "ooui-toolgroup-collapse": "Minder",
+ "ooui-dialog-message-accept": "Regso",
+ "ooui-dialog-message-reject": "Kanselleer",
+ "ooui-dialog-process-error": "Iets het verkeerd gegaan",
+ "ooui-dialog-process-dismiss": "Sluit",
+ "ooui-dialog-process-retry": "Probeer weer",
+ "ooui-dialog-process-continue": "Gaan voort"
}
diff --git a/resources/lib/oojs-ui/i18n/am.json b/resources/lib/oojs-ui/i18n/am.json
index 0e070c60..bfe9d5c3 100644
--- a/resources/lib/oojs-ui/i18n/am.json
+++ b/resources/lib/oojs-ui/i18n/am.json
@@ -3,6 +3,5 @@
"authors": [
"Elfalem"
]
- },
- "ooui-dialog-action-close": "ለመዝጋት"
+ }
}
diff --git a/resources/lib/oojs-ui/i18n/ar.json b/resources/lib/oojs-ui/i18n/ar.json
index b01e2cd4..058a1491 100644
--- a/resources/lib/oojs-ui/i18n/ar.json
+++ b/resources/lib/oojs-ui/i18n/ar.json
@@ -9,16 +9,20 @@
"OsamaK",
"زكريا",
"مشعل الحربي",
- "ترجمان05"
+ "ترجمان05",
+ "Abanima"
]
},
"ooui-outline-control-move-down": "انقل العنصر للأسفل",
"ooui-outline-control-move-up": "انقل العنصر للأعلى",
"ooui-outline-control-remove": "أزل العنصر",
"ooui-toolbar-more": "مزيد",
+ "ooui-toolgroup-expand": "مزيد",
+ "ooui-toolgroup-collapse": "أقل",
"ooui-dialog-message-accept": "موافق",
"ooui-dialog-message-reject": "ألغ",
"ooui-dialog-process-error": "حدث خطأ",
"ooui-dialog-process-dismiss": "أغلق",
- "ooui-dialog-process-retry": "حاول مرة أخرى"
+ "ooui-dialog-process-retry": "حاول مرة أخرى",
+ "ooui-dialog-process-continue": "استمر"
}
diff --git a/resources/lib/oojs-ui/i18n/arc.json b/resources/lib/oojs-ui/i18n/arc.json
index 7eb02a7b..de5b7aff 100644
--- a/resources/lib/oojs-ui/i18n/arc.json
+++ b/resources/lib/oojs-ui/i18n/arc.json
@@ -3,6 +3,5 @@
"authors": [
"Basharh"
]
- },
- "ooui-dialog-action-close": "ܣܟܘܪ"
+ }
}
diff --git a/resources/lib/oojs-ui/i18n/awa.json b/resources/lib/oojs-ui/i18n/awa.json
new file mode 100644
index 00000000..f78ed326
--- /dev/null
+++ b/resources/lib/oojs-ui/i18n/awa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "ooui-toolbar-more": "अउर"
+}
diff --git a/resources/lib/oojs-ui/i18n/az.json b/resources/lib/oojs-ui/i18n/az.json
index aa835e28..fc12d1b3 100644
--- a/resources/lib/oojs-ui/i18n/az.json
+++ b/resources/lib/oojs-ui/i18n/az.json
@@ -6,7 +6,6 @@
"Jduranboger"
]
},
- "ooui-dialog-action-close": "Bağla",
"ooui-outline-control-move-down": "Bəndi aşağı apar",
"ooui-outline-control-move-up": "Bəndi yuxarı apar",
"ooui-outline-control-remove": "Bəndi sil",
diff --git a/resources/lib/oojs-ui/i18n/ba.json b/resources/lib/oojs-ui/i18n/ba.json
index 0bfa299b..ff915b06 100644
--- a/resources/lib/oojs-ui/i18n/ba.json
+++ b/resources/lib/oojs-ui/i18n/ba.json
@@ -9,7 +9,6 @@
"Рустам Нурыев"
]
},
- "ooui-dialog-action-close": "Ябырға",
"ooui-outline-control-move-down": "Аҫҡа күсерергә",
"ooui-outline-control-move-up": "Өҫкә күсерергә"
}
diff --git a/resources/lib/oojs-ui/i18n/bcc.json b/resources/lib/oojs-ui/i18n/bcc.json
new file mode 100644
index 00000000..a340a881
--- /dev/null
+++ b/resources/lib/oojs-ui/i18n/bcc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "ooui-dialog-message-accept": "اوکی",
+ "ooui-dialog-process-retry": "پدا کوشش کورتین"
+}
diff --git a/resources/lib/oojs-ui/i18n/bcl.json b/resources/lib/oojs-ui/i18n/bcl.json
index f3db6398..bc2251e8 100644
--- a/resources/lib/oojs-ui/i18n/bcl.json
+++ b/resources/lib/oojs-ui/i18n/bcl.json
@@ -5,7 +5,6 @@
"Sky Harbor"
]
},
- "ooui-dialog-action-close": "Seraduhon",
"ooui-outline-control-move-down": "Balyuhon an aytem paibaba",
"ooui-outline-control-move-up": "Balyuhon an aytem paitaas",
"ooui-toolbar-more": "Kadugangan"
diff --git a/resources/lib/oojs-ui/i18n/be-tarask.json b/resources/lib/oojs-ui/i18n/be-tarask.json
index c3f1abfe..c5475f85 100644
--- a/resources/lib/oojs-ui/i18n/be-tarask.json
+++ b/resources/lib/oojs-ui/i18n/be-tarask.json
@@ -7,7 +7,6 @@
"Zedlik"
]
},
- "ooui-dialog-action-close": "Закрыць",
"ooui-outline-control-move-down": "Перасунуць ніжэй",
"ooui-outline-control-move-up": "Перасунуць вышэй",
"ooui-toolbar-more": "Болей"
diff --git a/resources/lib/oojs-ui/i18n/be.json b/resources/lib/oojs-ui/i18n/be.json
index 08fbe0b4..fb0f6880 100644
--- a/resources/lib/oojs-ui/i18n/be.json
+++ b/resources/lib/oojs-ui/i18n/be.json
@@ -5,9 +5,6 @@
"Artificial123"
]
},
- "ooui-dialog-action-close": "Закрыць",
- "ooui-dialog-confirm-title": "Пацвердзіць",
- "ooui-dialog-confirm-default-prompt": "Вы ўпэўненыя?",
- "ooui-dialog-confirm-default-ok": "ОК",
- "ooui-dialog-confirm-default-cancel": "Адмяніць"
+ "ooui-dialog-message-accept": "ОК",
+ "ooui-dialog-message-reject": "Адмяніць"
}
diff --git a/resources/lib/oojs-ui/i18n/bg.json b/resources/lib/oojs-ui/i18n/bg.json
index c2839736..02d95b52 100644
--- a/resources/lib/oojs-ui/i18n/bg.json
+++ b/resources/lib/oojs-ui/i18n/bg.json
@@ -7,7 +7,6 @@
"Mitzev"
]
},
- "ooui-dialog-action-close": "Затваряне",
"ooui-outline-control-remove": "Премахване на обекта",
"ooui-toolbar-more": "Още"
}
diff --git a/resources/lib/oojs-ui/i18n/bn.json b/resources/lib/oojs-ui/i18n/bn.json
index f7105ce7..1cfa6c45 100644
--- a/resources/lib/oojs-ui/i18n/bn.json
+++ b/resources/lib/oojs-ui/i18n/bn.json
@@ -6,15 +6,21 @@
"Jayantanth",
"Nasir8891",
"Runab",
- "Sayak Sarkar"
+ "Sayak Sarkar",
+ "Aftabuzzaman",
+ "RYasmeen (WMF)"
]
},
- "ooui-dialog-action-close": "বন্ধ",
"ooui-outline-control-move-down": "আইটেম নিচে স্থানান্তর",
"ooui-outline-control-move-up": "আইটেম উপরে স্থানান্তর",
"ooui-outline-control-remove": "আইটেম সরান",
"ooui-toolbar-more": "আরও",
- "ooui-dialog-confirm-title": "নিশ্চিত করুন",
- "ooui-dialog-confirm-default-ok": "ঠিক আছে",
- "ooui-dialog-confirm-default-cancel": "বাতিল"
+ "ooui-toolgroup-expand": "আরও",
+ "ooui-toolgroup-collapse": "কম দেখাও",
+ "ooui-dialog-message-accept": "ঠিক আছে",
+ "ooui-dialog-message-reject": "বাতিল",
+ "ooui-dialog-process-error": "কিছু একটায় ত্রুটি হয়েছে",
+ "ooui-dialog-process-dismiss": "বাতিল করুন",
+ "ooui-dialog-process-retry": "আবার চেষ্টা করুন",
+ "ooui-dialog-process-continue": "অগ্রসর হোন"
}
diff --git a/resources/lib/oojs-ui/i18n/br.json b/resources/lib/oojs-ui/i18n/br.json
index 69591917..83af863c 100644
--- a/resources/lib/oojs-ui/i18n/br.json
+++ b/resources/lib/oojs-ui/i18n/br.json
@@ -3,16 +3,20 @@
"authors": [
"Fohanno",
"Fulup",
- "Y-M D"
+ "Y-M D",
+ "Maoris"
]
},
"ooui-outline-control-move-down": "Lakaat an elfenn da ziskenn",
"ooui-outline-control-move-up": "Lakaat an elfenn da bignat",
"ooui-outline-control-remove": "Tennañ an elfenn",
"ooui-toolbar-more": "Muioc'h",
+ "ooui-toolgroup-expand": "Muioc'h",
+ "ooui-toolgroup-collapse": "Nebeutoc'h",
"ooui-dialog-message-accept": "Mat eo",
"ooui-dialog-message-reject": "Nullañ",
"ooui-dialog-process-error": "Un dra bennak a-dreuz a zo bet",
"ooui-dialog-process-dismiss": "Disteurel",
- "ooui-dialog-process-retry": "Klask en-dro"
+ "ooui-dialog-process-retry": "Klask en-dro",
+ "ooui-dialog-process-continue": "Kenderc'hel"
}
diff --git a/resources/lib/oojs-ui/i18n/bs.json b/resources/lib/oojs-ui/i18n/bs.json
index 14280a79..130bd8e5 100644
--- a/resources/lib/oojs-ui/i18n/bs.json
+++ b/resources/lib/oojs-ui/i18n/bs.json
@@ -4,13 +4,16 @@
"DzWiki"
]
},
- "ooui-dialog-action-close": "Zatvori",
"ooui-outline-control-move-down": "Premjesti stavku dole",
"ooui-outline-control-move-up": "Premjesti stavku gore",
"ooui-outline-control-remove": "Ukloni stavku",
"ooui-toolbar-more": "Više",
- "ooui-dialog-confirm-title": "Potvrdi",
- "ooui-dialog-confirm-default-prompt": "Da li ste sigurni?",
- "ooui-dialog-confirm-default-ok": "U redu",
- "ooui-dialog-confirm-default-cancel": "Otkaži"
+ "ooui-toolgroup-expand": "Više",
+ "ooui-toolgroup-collapse": "Manje",
+ "ooui-dialog-message-accept": "U redu",
+ "ooui-dialog-message-reject": "Otkaži",
+ "ooui-dialog-process-error": "Nešto je pošlo naopako",
+ "ooui-dialog-process-dismiss": "Odbaci",
+ "ooui-dialog-process-retry": "Pokušajte ponovo",
+ "ooui-dialog-process-continue": "Nastavi"
}
diff --git a/resources/lib/oojs-ui/i18n/ca.json b/resources/lib/oojs-ui/i18n/ca.json
index c3e80fea..ce3afa43 100644
--- a/resources/lib/oojs-ui/i18n/ca.json
+++ b/resources/lib/oojs-ui/i18n/ca.json
@@ -9,12 +9,20 @@
"SMP",
"Vriullop",
"Toniher",
- "Edustus"
+ "Edustus",
+ "Davidpar"
]
},
- "ooui-outline-control-move-down": "Baixa element",
- "ooui-outline-control-move-up": "Puja element",
+ "ooui-outline-control-move-down": "Baixa l'element",
+ "ooui-outline-control-move-up": "Puja l'element",
+ "ooui-outline-control-remove": "Esborra l'ítem",
"ooui-toolbar-more": "Més",
+ "ooui-toolgroup-expand": "Més",
+ "ooui-toolgroup-collapse": "Menys",
+ "ooui-dialog-message-accept": "D'acord",
+ "ooui-dialog-message-reject": "Cancel·la",
+ "ooui-dialog-process-error": "Alguna cosa no ha funcionat",
"ooui-dialog-process-dismiss": "Descarta",
- "ooui-dialog-process-retry": "Torneu-ho a provar"
+ "ooui-dialog-process-retry": "Torneu-ho a provar",
+ "ooui-dialog-process-continue": "Continua"
}
diff --git a/resources/lib/oojs-ui/i18n/ce.json b/resources/lib/oojs-ui/i18n/ce.json
index de86daf0..562dc3d5 100644
--- a/resources/lib/oojs-ui/i18n/ce.json
+++ b/resources/lib/oojs-ui/i18n/ce.json
@@ -5,13 +5,13 @@
"Умар"
]
},
- "ooui-dialog-action-close": "ДӀачӀагӀа",
"ooui-outline-control-move-down": "Лаха яккха элемент",
"ooui-outline-control-move-up": "Лаккха яккха элемент",
"ooui-outline-control-remove": "ДӀадаха меттиг",
"ooui-toolbar-more": "Кхин",
- "ooui-dialog-confirm-title": "Бакъдан",
- "ooui-dialog-confirm-default-prompt": "Бакъалла лаьий хӀуна?",
- "ooui-dialog-confirm-default-ok": "ХӀаъ",
- "ooui-dialog-confirm-default-cancel": "Цаоьшу"
+ "ooui-toolgroup-expand": "Дукха",
+ "ooui-toolgroup-collapse": "КӀезиг",
+ "ooui-dialog-message-accept": "ХӀаъ",
+ "ooui-dialog-message-reject": "Цаоьшу",
+ "ooui-dialog-process-continue": "Кхин дӀа"
}
diff --git a/resources/lib/oojs-ui/i18n/ckb.json b/resources/lib/oojs-ui/i18n/ckb.json
index eadae998..0c66619d 100644
--- a/resources/lib/oojs-ui/i18n/ckb.json
+++ b/resources/lib/oojs-ui/i18n/ckb.json
@@ -6,8 +6,6 @@
"Serwan"
]
},
- "ooui-dialog-action-close": "دایخە",
- "ooui-dialog-confirm-default-prompt": "ئایا تۆ دڵنیات ؟",
- "ooui-dialog-confirm-default-ok": "باشە",
- "ooui-dialog-confirm-default-cancel": "پاشگەزبوونەوە"
+ "ooui-dialog-message-accept": "باشە",
+ "ooui-dialog-message-reject": "پاشگەزبوونەوە"
}
diff --git a/resources/lib/oojs-ui/i18n/co.json b/resources/lib/oojs-ui/i18n/co.json
index 19c2f5cd..01d181d7 100644
--- a/resources/lib/oojs-ui/i18n/co.json
+++ b/resources/lib/oojs-ui/i18n/co.json
@@ -4,7 +4,6 @@
"Paulu"
]
},
- "ooui-dialog-action-close": "Chjude",
"ooui-outline-control-move-down": "Fà falà l'ogettu",
"ooui-outline-control-move-up": "Fà cullà l'ogettu"
}
diff --git a/resources/lib/oojs-ui/i18n/crh-cyrl.json b/resources/lib/oojs-ui/i18n/crh-cyrl.json
new file mode 100644
index 00000000..ccc00269
--- /dev/null
+++ b/resources/lib/oojs-ui/i18n/crh-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Don Alessandro"
+ ]
+ },
+ "ooui-toolbar-more": "Даа зияде"
+}
diff --git a/resources/lib/oojs-ui/i18n/crh-latn.json b/resources/lib/oojs-ui/i18n/crh-latn.json
new file mode 100644
index 00000000..7ad7b0bb
--- /dev/null
+++ b/resources/lib/oojs-ui/i18n/crh-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Don Alessandro"
+ ]
+ },
+ "ooui-toolbar-more": "Daa ziyade"
+}
diff --git a/resources/lib/oojs-ui/i18n/cs.json b/resources/lib/oojs-ui/i18n/cs.json
index a75cf0ba..1db9aed5 100644
--- a/resources/lib/oojs-ui/i18n/cs.json
+++ b/resources/lib/oojs-ui/i18n/cs.json
@@ -10,16 +10,20 @@
"Mormegil",
"Polda18",
"Tchoř",
- "ශ්වෙත"
+ "ශ්වෙත",
+ "Vojtěch Dostál"
]
},
"ooui-outline-control-move-down": "Přesunout položku dolů",
"ooui-outline-control-move-up": "Přesunout položku nahoru",
"ooui-outline-control-remove": "Odstranit položku",
"ooui-toolbar-more": "Další",
+ "ooui-toolgroup-expand": "Více",
+ "ooui-toolgroup-collapse": "Méně",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Storno",
"ooui-dialog-process-error": "Něco se pokazilo",
"ooui-dialog-process-dismiss": "Zavřít",
- "ooui-dialog-process-retry": "Zkusit znovu"
+ "ooui-dialog-process-retry": "Zkusit znovu",
+ "ooui-dialog-process-continue": "Pokračovat"
}
diff --git a/resources/lib/oojs-ui/i18n/cu.json b/resources/lib/oojs-ui/i18n/cu.json
index 45cd2012..aa916af0 100644
--- a/resources/lib/oojs-ui/i18n/cu.json
+++ b/resources/lib/oojs-ui/i18n/cu.json
@@ -4,6 +4,6 @@
"ОйЛ"
]
},
- "ooui-dialog-action-close": "ꙁакрꙑи",
- "ooui-toolbar-more": "вѧщє"
+ "ooui-toolbar-more": "вѧщє",
+ "ooui-toolgroup-expand": "вѧщє"
}
diff --git a/resources/lib/oojs-ui/i18n/cy.json b/resources/lib/oojs-ui/i18n/cy.json
index ff712519..b74cd064 100644
--- a/resources/lib/oojs-ui/i18n/cy.json
+++ b/resources/lib/oojs-ui/i18n/cy.json
@@ -7,7 +7,6 @@
"DChan (WMF)"
]
},
- "ooui-dialog-action-close": "Cau",
"ooui-outline-control-move-down": "Symud yr eitem i lawr",
"ooui-outline-control-move-up": "Symud yr eitem i fyny",
"ooui-outline-control-remove": "Tynnu'r eitem",
diff --git a/resources/lib/oojs-ui/i18n/da.json b/resources/lib/oojs-ui/i18n/da.json
index 156a6bc1..0b847be1 100644
--- a/resources/lib/oojs-ui/i18n/da.json
+++ b/resources/lib/oojs-ui/i18n/da.json
@@ -10,7 +10,6 @@
"Tehnix"
]
},
- "ooui-dialog-action-close": "Luk",
"ooui-outline-control-move-down": "Flyt ned",
"ooui-outline-control-move-up": "Flyt op",
"ooui-toolbar-more": "Mere"
diff --git a/resources/lib/oojs-ui/i18n/de.json b/resources/lib/oojs-ui/i18n/de.json
index 546689b9..15624fd4 100644
--- a/resources/lib/oojs-ui/i18n/de.json
+++ b/resources/lib/oojs-ui/i18n/de.json
@@ -17,9 +17,12 @@
"ooui-outline-control-move-up": "Element nach oben verschieben",
"ooui-outline-control-remove": "Element entfernen",
"ooui-toolbar-more": "Mehr",
+ "ooui-toolgroup-expand": "Mehr",
+ "ooui-toolgroup-collapse": "Weniger",
"ooui-dialog-message-accept": "Okay",
"ooui-dialog-message-reject": "Abbrechen",
"ooui-dialog-process-error": "Etwas ist schief gelaufen",
"ooui-dialog-process-dismiss": "Ausblenden",
- "ooui-dialog-process-retry": "Erneut versuchen"
+ "ooui-dialog-process-retry": "Erneut versuchen",
+ "ooui-dialog-process-continue": "Fortfahren"
}
diff --git a/resources/lib/oojs-ui/i18n/diq.json b/resources/lib/oojs-ui/i18n/diq.json
index 09415fd2..881ff674 100644
--- a/resources/lib/oojs-ui/i18n/diq.json
+++ b/resources/lib/oojs-ui/i18n/diq.json
@@ -9,7 +9,6 @@
"Se4598"
]
},
- "ooui-dialog-action-close": "Racnê",
"ooui-outline-control-move-down": "Bendi bere cêr",
"ooui-outline-control-move-up": "Bendi bere cor",
"ooui-outline-control-remove": "Obcey wedare",
diff --git a/resources/lib/oojs-ui/i18n/dsb.json b/resources/lib/oojs-ui/i18n/dsb.json
index d963ac89..7ad3f200 100644
--- a/resources/lib/oojs-ui/i18n/dsb.json
+++ b/resources/lib/oojs-ui/i18n/dsb.json
@@ -4,7 +4,6 @@
"Michawiki"
]
},
- "ooui-dialog-action-close": "Zacyniś",
"ooui-outline-control-move-down": "Element dołoj pśesunuś",
"ooui-outline-control-move-up": "Element górjej pśesunuś",
"ooui-outline-control-remove": "Zapisk wótpóraś",
diff --git a/resources/lib/oojs-ui/i18n/egl.json b/resources/lib/oojs-ui/i18n/egl.json
index d4ef2d56..624ecaa3 100644
--- a/resources/lib/oojs-ui/i18n/egl.json
+++ b/resources/lib/oojs-ui/i18n/egl.json
@@ -5,13 +5,10 @@
"Gloria sah"
]
},
- "ooui-dialog-action-close": "Sèra",
"ooui-outline-control-move-down": "Spôsta in bâs",
"ooui-outline-control-move-up": "Spôsta in êlt",
"ooui-outline-control-remove": "Armōv l'elemèint",
"ooui-toolbar-more": "Êter",
- "ooui-dialog-confirm-title": "Cunfermèr",
- "ooui-dialog-confirm-default-prompt": "Sî-'v sicùr?",
- "ooui-dialog-confirm-default-ok": "'D acòrdi",
- "ooui-dialog-confirm-default-cancel": "Scanślèr"
+ "ooui-dialog-message-accept": "'D acòrdi",
+ "ooui-dialog-message-reject": "Scanślèr"
}
diff --git a/resources/lib/oojs-ui/i18n/el.json b/resources/lib/oojs-ui/i18n/el.json
index cddd46e6..6fb7dbad 100644
--- a/resources/lib/oojs-ui/i18n/el.json
+++ b/resources/lib/oojs-ui/i18n/el.json
@@ -15,9 +15,12 @@
"ooui-outline-control-move-up": "Μετακίνηση στοιχείου προς τα επάνω",
"ooui-outline-control-remove": "Αφαίρεση στοιχείου",
"ooui-toolbar-more": "Περισσότερα",
+ "ooui-toolgroup-expand": "Περισσότερα",
+ "ooui-toolgroup-collapse": "Λιγότερα",
"ooui-dialog-message-accept": "ΟΚ",
"ooui-dialog-message-reject": "Ακύρωση",
"ooui-dialog-process-error": "Κάτι πήγε στραβά",
"ooui-dialog-process-dismiss": "Απόρριψη",
- "ooui-dialog-process-retry": "Δοκιμάστε ξανά"
+ "ooui-dialog-process-retry": "Δοκιμάστε ξανά",
+ "ooui-dialog-process-continue": "Συνέχεια"
}
diff --git a/resources/lib/oojs-ui/i18n/eml.json b/resources/lib/oojs-ui/i18n/eml.json
index 0b54f41d..6d9e8bf0 100644
--- a/resources/lib/oojs-ui/i18n/eml.json
+++ b/resources/lib/oojs-ui/i18n/eml.json
@@ -5,13 +5,10 @@
"Lévi"
]
},
- "ooui-dialog-action-close": "Sèra",
"ooui-outline-control-move-down": "Spôsta in bâs",
"ooui-outline-control-move-up": "Spôsta in êlta",
"ooui-outline-control-remove": "Tór vìa 'l elemèint",
"ooui-toolbar-more": "Êter",
- "ooui-dialog-confirm-title": "Cunfirmèr",
- "ooui-dialog-confirm-default-prompt": "Sî-'v sicùr?",
- "ooui-dialog-confirm-default-ok": "'D acòrdi",
- "ooui-dialog-confirm-default-cancel": "Scanślèr"
+ "ooui-dialog-message-accept": "'D acòrdi",
+ "ooui-dialog-message-reject": "Scanślèr"
}
diff --git a/resources/lib/oojs-ui/i18n/en.json b/resources/lib/oojs-ui/i18n/en.json
index 9e99440c..1db3fd85 100644
--- a/resources/lib/oojs-ui/i18n/en.json
+++ b/resources/lib/oojs-ui/i18n/en.json
@@ -20,9 +20,12 @@
"ooui-outline-control-move-up": "Move item up",
"ooui-outline-control-remove": "Remove item",
"ooui-toolbar-more": "More",
+ "ooui-toolgroup-expand": "More",
+ "ooui-toolgroup-collapse": "Fewer",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Cancel",
"ooui-dialog-process-error": "Something went wrong",
"ooui-dialog-process-dismiss": "Dismiss",
- "ooui-dialog-process-retry": "Try again"
+ "ooui-dialog-process-retry": "Try again",
+ "ooui-dialog-process-continue": "Continue"
}
diff --git a/resources/lib/oojs-ui/i18n/eo.json b/resources/lib/oojs-ui/i18n/eo.json
index 101f0af7..8d9714c6 100644
--- a/resources/lib/oojs-ui/i18n/eo.json
+++ b/resources/lib/oojs-ui/i18n/eo.json
@@ -7,7 +7,6 @@
"Yekrats"
]
},
- "ooui-dialog-action-close": "Fermi",
"ooui-outline-control-move-down": "Movi eron suben",
"ooui-outline-control-move-up": "Movi eron supren",
"ooui-toolbar-more": "Pli"
diff --git a/resources/lib/oojs-ui/i18n/es.json b/resources/lib/oojs-ui/i18n/es.json
index 7660d4a9..915791e6 100644
--- a/resources/lib/oojs-ui/i18n/es.json
+++ b/resources/lib/oojs-ui/i18n/es.json
@@ -22,9 +22,12 @@
"ooui-outline-control-move-up": "Subir elemento",
"ooui-outline-control-remove": "Eliminar elemento",
"ooui-toolbar-more": "Más",
+ "ooui-toolgroup-expand": "Más",
+ "ooui-toolgroup-collapse": "Menos",
"ooui-dialog-message-accept": "Aceptar",
"ooui-dialog-message-reject": "Cancelar",
"ooui-dialog-process-error": "Algo salió mal",
"ooui-dialog-process-dismiss": "Descartar",
- "ooui-dialog-process-retry": "Intentar de nuevo"
+ "ooui-dialog-process-retry": "Intentar de nuevo",
+ "ooui-dialog-process-continue": "Continuar"
}
diff --git a/resources/lib/oojs-ui/i18n/et.json b/resources/lib/oojs-ui/i18n/et.json
index ac3af74e..6a212b6b 100644
--- a/resources/lib/oojs-ui/i18n/et.json
+++ b/resources/lib/oojs-ui/i18n/et.json
@@ -9,9 +9,12 @@
"ooui-outline-control-move-up": "Liiguta üksust ülespoole",
"ooui-outline-control-remove": "Eemalda üksus",
"ooui-toolbar-more": "Veel",
+ "ooui-toolgroup-expand": "Veel",
+ "ooui-toolgroup-collapse": "Vähem",
"ooui-dialog-message-accept": "Sobib",
"ooui-dialog-message-reject": "Loobu",
"ooui-dialog-process-error": "Midagi läks valesti",
"ooui-dialog-process-dismiss": "Hülga",
- "ooui-dialog-process-retry": "Proovi uuesti"
+ "ooui-dialog-process-retry": "Proovi uuesti",
+ "ooui-dialog-process-continue": "Jätka"
}
diff --git a/resources/lib/oojs-ui/i18n/eu.json b/resources/lib/oojs-ui/i18n/eu.json
index f1ce0bba..e947582d 100644
--- a/resources/lib/oojs-ui/i18n/eu.json
+++ b/resources/lib/oojs-ui/i18n/eu.json
@@ -3,11 +3,18 @@
"authors": [
"An13sa",
"Unai Fdz. de Betoño",
- "Xabier Armendaritz"
+ "Xabier Armendaritz",
+ "Subi"
]
},
- "ooui-dialog-action-close": "Itxi",
"ooui-outline-control-move-down": "Mugitu itema beherantz",
"ooui-outline-control-move-up": "Mugitu itema gorantz",
- "ooui-toolbar-more": "Gehiago"
+ "ooui-toolbar-more": "Gehiago",
+ "ooui-toolgroup-expand": "Gehiago",
+ "ooui-toolgroup-collapse": "Gutxiago",
+ "ooui-dialog-message-accept": "Ados",
+ "ooui-dialog-message-reject": "Utzi",
+ "ooui-dialog-process-error": "Zerbaitek huts egin du",
+ "ooui-dialog-process-retry": "Saiatu berriro",
+ "ooui-dialog-process-continue": "Jarraitu"
}
diff --git a/resources/lib/oojs-ui/i18n/fa.json b/resources/lib/oojs-ui/i18n/fa.json
index b0ec8030..7cfcfa21 100644
--- a/resources/lib/oojs-ui/i18n/fa.json
+++ b/resources/lib/oojs-ui/i18n/fa.json
@@ -10,16 +10,20 @@
"Reza1615",
"Taha",
"درفش کاویانی",
- "Armin1392"
+ "Armin1392",
+ "Alirezaaa"
]
},
"ooui-outline-control-move-down": "انتقال مورد به پایین",
"ooui-outline-control-move-up": "انتقال مورد به بالا",
"ooui-outline-control-remove": "حذف مورد",
"ooui-toolbar-more": "بیشتر",
+ "ooui-toolgroup-expand": "بیشتر",
+ "ooui-toolgroup-collapse": "کمتر",
"ooui-dialog-message-accept": "تأیید",
"ooui-dialog-message-reject": "لغو",
"ooui-dialog-process-error": "مشکلی وجود دارد",
"ooui-dialog-process-dismiss": "نپذیرفتن",
- "ooui-dialog-process-retry": "دوباره امتحان کن"
+ "ooui-dialog-process-retry": "دوباره امتحان کن",
+ "ooui-dialog-process-continue": "ادامه"
}
diff --git a/resources/lib/oojs-ui/i18n/fi.json b/resources/lib/oojs-ui/i18n/fi.json
index efaabed5..3fb4110c 100644
--- a/resources/lib/oojs-ui/i18n/fi.json
+++ b/resources/lib/oojs-ui/i18n/fi.json
@@ -20,9 +20,12 @@
"ooui-outline-control-move-up": "Siirrä kohdetta ylöspäin",
"ooui-outline-control-remove": "Poista kohde",
"ooui-toolbar-more": "Lisää",
+ "ooui-toolgroup-expand": "Enemmän",
+ "ooui-toolgroup-collapse": "Vähemmän",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Peruuta",
"ooui-dialog-process-error": "Jokin meni pieleen",
"ooui-dialog-process-dismiss": "Hylkää",
- "ooui-dialog-process-retry": "Yritä uudelleen"
+ "ooui-dialog-process-retry": "Yritä uudelleen",
+ "ooui-dialog-process-continue": "Jatka"
}
diff --git a/resources/lib/oojs-ui/i18n/fo.json b/resources/lib/oojs-ui/i18n/fo.json
index 1810080f..6230cc9b 100644
--- a/resources/lib/oojs-ui/i18n/fo.json
+++ b/resources/lib/oojs-ui/i18n/fo.json
@@ -4,8 +4,16 @@
"EileenSanda"
]
},
- "ooui-dialog-action-close": "Lat aftur",
"ooui-outline-control-move-down": "Flyt lutin niður",
"ooui-outline-control-move-up": "Flyt lutin upp",
- "ooui-toolbar-more": "Meira"
+ "ooui-outline-control-remove": "Tak ein lut burtur",
+ "ooui-toolbar-more": "Meira",
+ "ooui-toolgroup-expand": "Meira",
+ "ooui-toolgroup-collapse": "Færri",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Avbrót",
+ "ooui-dialog-process-error": "Okkurt gekk galið",
+ "ooui-dialog-process-dismiss": "Lat aftur",
+ "ooui-dialog-process-retry": "Royn aftur",
+ "ooui-dialog-process-continue": "Halt fram"
}
diff --git a/resources/lib/oojs-ui/i18n/fr.json b/resources/lib/oojs-ui/i18n/fr.json
index 8ff54750..9144cb01 100644
--- a/resources/lib/oojs-ui/i18n/fr.json
+++ b/resources/lib/oojs-ui/i18n/fr.json
@@ -26,16 +26,20 @@
"Urhixidur",
"Verdy p",
"Wyz",
- "SnowedEarth"
+ "SnowedEarth",
+ "Jdforrester"
]
},
"ooui-outline-control-move-down": "Faire descendre l’élément",
"ooui-outline-control-move-up": "Faire monter l’élément",
"ooui-outline-control-remove": "Supprimer l’élément",
"ooui-toolbar-more": "Plus",
+ "ooui-toolgroup-expand": "Plus",
+ "ooui-toolgroup-collapse": "Moins",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Annuler",
"ooui-dialog-process-error": "Quelque chose a mal tourné",
"ooui-dialog-process-dismiss": "Rejeter",
- "ooui-dialog-process-retry": "Réessayez"
+ "ooui-dialog-process-retry": "Réessayez",
+ "ooui-dialog-process-continue": "Continuer"
}
diff --git a/resources/lib/oojs-ui/i18n/frr.json b/resources/lib/oojs-ui/i18n/frr.json
index d98f4abd..54d0fb22 100644
--- a/resources/lib/oojs-ui/i18n/frr.json
+++ b/resources/lib/oojs-ui/i18n/frr.json
@@ -5,7 +5,6 @@
"Murma174"
]
},
- "ooui-dialog-action-close": "Slütj",
"ooui-outline-control-move-down": "Element efter onern sküüw",
"ooui-outline-control-move-up": "Element efter boowen sküüw",
"ooui-outline-control-remove": "Element wechnem",
diff --git a/resources/lib/oojs-ui/i18n/fur.json b/resources/lib/oojs-ui/i18n/fur.json
index e1c129b6..83c2fd9e 100644
--- a/resources/lib/oojs-ui/i18n/fur.json
+++ b/resources/lib/oojs-ui/i18n/fur.json
@@ -5,7 +5,6 @@
"Tocaibon"
]
},
- "ooui-dialog-action-close": "Siere",
"ooui-outline-control-move-down": "sposte sot",
"ooui-outline-control-move-up": "sposte in su",
"ooui-toolbar-more": "Altri"
diff --git a/resources/lib/oojs-ui/i18n/fy.json b/resources/lib/oojs-ui/i18n/fy.json
new file mode 100644
index 00000000..ddf9ff75
--- /dev/null
+++ b/resources/lib/oojs-ui/i18n/fy.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin0van0der0vliet"
+ ]
+ },
+ "ooui-toolbar-more": "Mear",
+ "ooui-toolgroup-expand": "Mear",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Annulearje"
+}
diff --git a/resources/lib/oojs-ui/i18n/gl.json b/resources/lib/oojs-ui/i18n/gl.json
index eac992fd..a4339f47 100644
--- a/resources/lib/oojs-ui/i18n/gl.json
+++ b/resources/lib/oojs-ui/i18n/gl.json
@@ -3,16 +3,20 @@
"authors": [
"Alison",
"Kscanne",
- "Toliño"
+ "Toliño",
+ "Elisardojm"
]
},
"ooui-outline-control-move-down": "Mover o elemento abaixo",
"ooui-outline-control-move-up": "Mover o elemento arriba",
"ooui-outline-control-remove": "Eliminar o elemento",
"ooui-toolbar-more": "Máis",
+ "ooui-toolgroup-expand": "Máis",
+ "ooui-toolgroup-collapse": "Menos",
"ooui-dialog-message-accept": "Aceptar",
"ooui-dialog-message-reject": "Cancelar",
"ooui-dialog-process-error": "Algo foi mal",
"ooui-dialog-process-dismiss": "Agochar",
- "ooui-dialog-process-retry": "Inténteo de novo"
+ "ooui-dialog-process-retry": "Inténteo de novo",
+ "ooui-dialog-process-continue": "Continuar"
}
diff --git a/resources/lib/oojs-ui/i18n/he.json b/resources/lib/oojs-ui/i18n/he.json
index bbaf4c1f..cadc416c 100644
--- a/resources/lib/oojs-ui/i18n/he.json
+++ b/resources/lib/oojs-ui/i18n/he.json
@@ -19,9 +19,12 @@
"ooui-outline-control-move-up": "להזיז את הפריט מעלה",
"ooui-outline-control-remove": "להסיר את הפריט",
"ooui-toolbar-more": "עוד",
+ "ooui-toolgroup-expand": "יותר",
+ "ooui-toolgroup-collapse": "פחות",
"ooui-dialog-message-accept": "אישור",
"ooui-dialog-message-reject": "ביטול",
"ooui-dialog-process-error": "משהו השתבש",
"ooui-dialog-process-dismiss": "לוותר",
- "ooui-dialog-process-retry": "לנסות שוב"
+ "ooui-dialog-process-retry": "לנסות שוב",
+ "ooui-dialog-process-continue": "המשך"
}
diff --git a/resources/lib/oojs-ui/i18n/hi.json b/resources/lib/oojs-ui/i18n/hi.json
index 5a9bef0d..ce86aaab 100644
--- a/resources/lib/oojs-ui/i18n/hi.json
+++ b/resources/lib/oojs-ui/i18n/hi.json
@@ -5,12 +5,20 @@
"Devayon",
"Rajesh",
"Siddhartha Ghai",
- "Goelujjwal"
+ "Goelujjwal",
+ "Ankita-ks"
]
},
- "ooui-dialog-action-close": "बंद करें",
"ooui-outline-control-move-down": "प्रविष्टि नीचे ले जाएँ",
"ooui-outline-control-move-up": "प्रविष्टि ऊपर ले जाएँ",
"ooui-outline-control-remove": "आइटम हटाएँ",
- "ooui-toolbar-more": "अधिक"
+ "ooui-toolbar-more": "अधिक",
+ "ooui-toolgroup-expand": "अधिक",
+ "ooui-toolgroup-collapse": "कम",
+ "ooui-dialog-message-accept": "ठीक है",
+ "ooui-dialog-message-reject": "रद्द करें",
+ "ooui-dialog-process-error": "कुछ गलत हुअा है",
+ "ooui-dialog-process-dismiss": "ख़ारिज करें",
+ "ooui-dialog-process-retry": "पुनः प्रयास करें",
+ "ooui-dialog-process-continue": "जारी रखें"
}
diff --git a/resources/lib/oojs-ui/i18n/hr.json b/resources/lib/oojs-ui/i18n/hr.json
index c3724cfa..91188984 100644
--- a/resources/lib/oojs-ui/i18n/hr.json
+++ b/resources/lib/oojs-ui/i18n/hr.json
@@ -11,6 +11,8 @@
"ooui-outline-control-move-up": "Premjesti stavku gore",
"ooui-outline-control-remove": "Ukloni",
"ooui-toolbar-more": "Više",
+ "ooui-toolgroup-expand": "Više",
+ "ooui-toolgroup-collapse": "Manje",
"ooui-dialog-message-accept": "U redu",
"ooui-dialog-message-reject": "Odustani",
"ooui-dialog-process-error": "Nešto je pošlo po zlu",
diff --git a/resources/lib/oojs-ui/i18n/hsb.json b/resources/lib/oojs-ui/i18n/hsb.json
index 371b4f35..00894e4e 100644
--- a/resources/lib/oojs-ui/i18n/hsb.json
+++ b/resources/lib/oojs-ui/i18n/hsb.json
@@ -5,9 +5,16 @@
"Michawiki"
]
},
- "ooui-dialog-action-close": "Začinić",
"ooui-outline-control-move-down": "Zapisk dele přesunyć",
"ooui-outline-control-move-up": "Zapisk horje přesunyć",
"ooui-outline-control-remove": "Zapisk wotstronić",
- "ooui-toolbar-more": "Wjace"
+ "ooui-toolbar-more": "Wjace",
+ "ooui-toolgroup-expand": "Wjace",
+ "ooui-toolgroup-collapse": "Mjenje",
+ "ooui-dialog-message-accept": "W porjadku",
+ "ooui-dialog-message-reject": "Přetorhnyć",
+ "ooui-dialog-process-error": "Něšto je so nimokuliło",
+ "ooui-dialog-process-dismiss": "Schować",
+ "ooui-dialog-process-retry": "Hišće raz spytać",
+ "ooui-dialog-process-continue": "Dale"
}
diff --git a/resources/lib/oojs-ui/i18n/hu.json b/resources/lib/oojs-ui/i18n/hu.json
index 9117a05e..d50e62da 100644
--- a/resources/lib/oojs-ui/i18n/hu.json
+++ b/resources/lib/oojs-ui/i18n/hu.json
@@ -13,8 +13,11 @@
"ooui-outline-control-move-up": "Elem mozgatása felfelé",
"ooui-outline-control-remove": "Elem eltávolítása",
"ooui-toolbar-more": "Tovább...",
+ "ooui-toolgroup-expand": "Több",
+ "ooui-toolgroup-collapse": "Kevesebb",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Mégse",
"ooui-dialog-process-dismiss": "Elrejt",
- "ooui-dialog-process-retry": "Próbáld újra"
+ "ooui-dialog-process-retry": "Próbáld újra",
+ "ooui-dialog-process-continue": "Folytatás"
}
diff --git a/resources/lib/oojs-ui/i18n/hy.json b/resources/lib/oojs-ui/i18n/hy.json
index ebb28609..2aaf4e46 100644
--- a/resources/lib/oojs-ui/i18n/hy.json
+++ b/resources/lib/oojs-ui/i18n/hy.json
@@ -10,9 +10,12 @@
"ooui-outline-control-move-up": "Բարձրացնել կետը",
"ooui-outline-control-remove": "Հեռացնել տարրը",
"ooui-toolbar-more": "Ավելին",
+ "ooui-toolgroup-expand": "Ավելին",
+ "ooui-toolgroup-collapse": "Պակաս",
"ooui-dialog-message-accept": "Լավ",
"ooui-dialog-message-reject": "Չեղարկել",
"ooui-dialog-process-error": "Ինչ-որ սխալ է տեղի ունեցել",
"ooui-dialog-process-dismiss": "Փակել",
- "ooui-dialog-process-retry": "Կրկին փորձել"
+ "ooui-dialog-process-retry": "Կրկին փորձել",
+ "ooui-dialog-process-continue": "Շարունակել"
}
diff --git a/resources/lib/oojs-ui/i18n/id.json b/resources/lib/oojs-ui/i18n/id.json
index 1710bc66..bd65e71a 100644
--- a/resources/lib/oojs-ui/i18n/id.json
+++ b/resources/lib/oojs-ui/i18n/id.json
@@ -11,8 +11,16 @@
"William Surya Permana"
]
},
- "ooui-dialog-action-close": "Tutup",
"ooui-outline-control-move-down": "Pindahkan butir ke bawah",
"ooui-outline-control-move-up": "Pindahkan butir ke atas",
- "ooui-toolbar-more": "Lainnya"
+ "ooui-outline-control-remove": "Hapus butir",
+ "ooui-toolbar-more": "Lainnya",
+ "ooui-toolgroup-expand": "Selengkapnya",
+ "ooui-toolgroup-collapse": "Secukupnya",
+ "ooui-dialog-message-accept": "Oke",
+ "ooui-dialog-message-reject": "Batal",
+ "ooui-dialog-process-error": "Ada yang tidak beres",
+ "ooui-dialog-process-dismiss": "Tutup",
+ "ooui-dialog-process-retry": "Coba lagi",
+ "ooui-dialog-process-continue": "Lanjutkan"
}
diff --git a/resources/lib/oojs-ui/i18n/ie.json b/resources/lib/oojs-ui/i18n/ie.json
index 4a9f1c46..241cc331 100644
--- a/resources/lib/oojs-ui/i18n/ie.json
+++ b/resources/lib/oojs-ui/i18n/ie.json
@@ -4,7 +4,6 @@
"Makuba"
]
},
- "ooui-dialog-action-close": "Terminar",
"ooui-outline-control-move-down": "Mover element a infra",
"ooui-outline-control-move-up": "Mover element a supra",
"ooui-toolbar-more": "Plu"
diff --git a/resources/lib/oojs-ui/i18n/ilo.json b/resources/lib/oojs-ui/i18n/ilo.json
index 81a91ed4..b37beae1 100644
--- a/resources/lib/oojs-ui/i18n/ilo.json
+++ b/resources/lib/oojs-ui/i18n/ilo.json
@@ -8,9 +8,12 @@
"ooui-outline-control-move-up": "Ipangato ti banag",
"ooui-outline-control-remove": "Ikkaten ti banag",
"ooui-toolbar-more": "Adu pay",
+ "ooui-toolgroup-expand": "Adu pay",
+ "ooui-toolgroup-collapse": "Basbassit",
"ooui-dialog-message-accept": "Sige",
"ooui-dialog-message-reject": "Ukasen",
"ooui-dialog-process-error": "Adda madi a napasamak",
"ooui-dialog-process-dismiss": "Pugsayen",
- "ooui-dialog-process-retry": "Padasen manen"
+ "ooui-dialog-process-retry": "Padasen manen",
+ "ooui-dialog-process-continue": "Agtuloy"
}
diff --git a/resources/lib/oojs-ui/i18n/is.json b/resources/lib/oojs-ui/i18n/is.json
index 58fc1b88..3a4e1454 100644
--- a/resources/lib/oojs-ui/i18n/is.json
+++ b/resources/lib/oojs-ui/i18n/is.json
@@ -5,8 +5,16 @@
"Snævar"
]
},
- "ooui-dialog-action-close": "Loka",
"ooui-outline-control-move-down": "Færa atriði niður",
"ooui-outline-control-move-up": "Færa atriði upp",
- "ooui-toolbar-more": "Fleira"
+ "ooui-outline-control-remove": "Fjarlægja atriði",
+ "ooui-toolbar-more": "Fleira",
+ "ooui-toolgroup-expand": "Fleira",
+ "ooui-toolgroup-collapse": "Færra",
+ "ooui-dialog-message-accept": "Í lagi",
+ "ooui-dialog-message-reject": "Hætta við",
+ "ooui-dialog-process-error": "Eitthvað mistókst",
+ "ooui-dialog-process-dismiss": "Loka",
+ "ooui-dialog-process-retry": "Reyna aftur",
+ "ooui-dialog-process-continue": "Halda áfram"
}
diff --git a/resources/lib/oojs-ui/i18n/it.json b/resources/lib/oojs-ui/i18n/it.json
index 3d4e0490..0ff8af8f 100644
--- a/resources/lib/oojs-ui/i18n/it.json
+++ b/resources/lib/oojs-ui/i18n/it.json
@@ -19,9 +19,12 @@
"ooui-outline-control-move-up": "Sposta in alto",
"ooui-outline-control-remove": "Rimuovi elemento",
"ooui-toolbar-more": "Altro",
+ "ooui-toolgroup-expand": "Più",
+ "ooui-toolgroup-collapse": "Meno",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Annulla",
"ooui-dialog-process-error": "Qualcosa è andato storto",
"ooui-dialog-process-dismiss": "Nascondi",
- "ooui-dialog-process-retry": "Riprova"
+ "ooui-dialog-process-retry": "Riprova",
+ "ooui-dialog-process-continue": "Continua"
}
diff --git a/resources/lib/oojs-ui/i18n/ja.json b/resources/lib/oojs-ui/i18n/ja.json
index 2ac8dc19..ec86124e 100644
--- a/resources/lib/oojs-ui/i18n/ja.json
+++ b/resources/lib/oojs-ui/i18n/ja.json
@@ -5,16 +5,20 @@
"Miya",
"Penn Station",
"Shirayuki",
- "Takot"
+ "Takot",
+ "Los688"
]
},
"ooui-outline-control-move-down": "項目を下に移動させる",
"ooui-outline-control-move-up": "項目を上に移動させる",
"ooui-outline-control-remove": "項目を除去",
"ooui-toolbar-more": "その他",
+ "ooui-toolgroup-expand": "続き",
+ "ooui-toolgroup-collapse": "折り畳む",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "キャンセル",
"ooui-dialog-process-error": "エラーが発生しました…",
"ooui-dialog-process-dismiss": "閉じる",
- "ooui-dialog-process-retry": "もう一度お試しください"
+ "ooui-dialog-process-retry": "もう一度お試しください",
+ "ooui-dialog-process-continue": "続行"
}
diff --git a/resources/lib/oojs-ui/i18n/jv.json b/resources/lib/oojs-ui/i18n/jv.json
index 38d35f79..8827af38 100644
--- a/resources/lib/oojs-ui/i18n/jv.json
+++ b/resources/lib/oojs-ui/i18n/jv.json
@@ -6,6 +6,5 @@
"Pras"
]
},
- "ooui-dialog-action-close": "Tutup",
"ooui-outline-control-move-down": "Pindhahaken butir mangandhap"
}
diff --git a/resources/lib/oojs-ui/i18n/ka.json b/resources/lib/oojs-ui/i18n/ka.json
index ef59f1b3..60ef661b 100644
--- a/resources/lib/oojs-ui/i18n/ka.json
+++ b/resources/lib/oojs-ui/i18n/ka.json
@@ -11,8 +11,16 @@
"Tokoko"
]
},
- "ooui-dialog-action-close": "დახურვა",
"ooui-outline-control-move-down": "ელემენტის ქვემოთ გადატანა",
"ooui-outline-control-move-up": "ელემენტის ზემოთ გადატანა",
- "ooui-toolbar-more": "მეტი"
+ "ooui-outline-control-remove": "წაშლა",
+ "ooui-toolbar-more": "მეტი",
+ "ooui-toolgroup-expand": "მეტი",
+ "ooui-toolgroup-collapse": "რამდენიმე",
+ "ooui-dialog-message-accept": "კარგი",
+ "ooui-dialog-message-reject": "გაუქმება",
+ "ooui-dialog-process-error": "მოხდა რაღაც შეცდომა",
+ "ooui-dialog-process-dismiss": "დამალვა",
+ "ooui-dialog-process-retry": "კიდევ სცადეთ",
+ "ooui-dialog-process-continue": "გაგრძელება"
}
diff --git a/resources/lib/oojs-ui/i18n/kk-cyrl.json b/resources/lib/oojs-ui/i18n/kk-cyrl.json
index c1a0f192..1d7317b2 100644
--- a/resources/lib/oojs-ui/i18n/kk-cyrl.json
+++ b/resources/lib/oojs-ui/i18n/kk-cyrl.json
@@ -4,9 +4,16 @@
"Arystanbek"
]
},
- "ooui-dialog-action-close": "Жабу",
"ooui-outline-control-move-down": "Элементті төмен жылжыту",
"ooui-outline-control-move-up": "Элементті жоғары жылжыту",
"ooui-outline-control-remove": "Элементті алып тастау",
- "ooui-toolbar-more": "толығырақ"
+ "ooui-toolbar-more": "толығырақ",
+ "ooui-toolgroup-expand": "Тағы",
+ "ooui-toolgroup-collapse": "Азырақ",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Қажет емес",
+ "ooui-dialog-process-error": "Бірдеңеден қате кетті",
+ "ooui-dialog-process-dismiss": "Тоқтату",
+ "ooui-dialog-process-retry": "Қайта байқап көріңіз",
+ "ooui-dialog-process-continue": "Жалғастыру"
}
diff --git a/resources/lib/oojs-ui/i18n/km.json b/resources/lib/oojs-ui/i18n/km.json
index f7bfca50..c0d72c4f 100644
--- a/resources/lib/oojs-ui/i18n/km.json
+++ b/resources/lib/oojs-ui/i18n/km.json
@@ -4,7 +4,6 @@
"Sovichet"
]
},
- "ooui-dialog-action-close": "បិទ",
"ooui-outline-control-move-down": "រុញ​ទៅ​ក្រោម",
"ooui-outline-control-move-up": "រុញ​ទៅ​លើ",
"ooui-outline-control-remove": "ដក​វត្ថុ​ចេញ",
diff --git a/resources/lib/oojs-ui/i18n/kn.json b/resources/lib/oojs-ui/i18n/kn.json
index 0b89e37d..982a3cdf 100644
--- a/resources/lib/oojs-ui/i18n/kn.json
+++ b/resources/lib/oojs-ui/i18n/kn.json
@@ -2,16 +2,21 @@
"@metadata": {
"authors": [
"Vikassy",
- "Nayvik"
+ "Nayvik",
+ "Omshivaprakash",
+ "Pavanaja"
]
},
- "ooui-outline-control-move-down": "ವಸ್ತು ಕೆಲ್ಗೆ ಸ್ಥಲಾನ್ಥರಿಸು",
- "ooui-outline-control-move-up": "ವಸ್ತು ಮೆಲೆ ಸ್ಥಲಾನ್ಥರಿಸು",
- "ooui-outline-control-remove": "ವಸ್ತು ತೆಗೆ",
- "ooui-toolbar-more": "ಹೆಚ್ಚು",
+ "ooui-outline-control-move-down": "ವಸ್ತುವನ್ನು ಕೆಳಗೆ ಸರಿಸು",
+ "ooui-outline-control-move-up": "ವಸ್ತುವನ್ನು ಮೇಲೆ ಸರಿಸು",
+ "ooui-outline-control-remove": "ವಸ್ತುವನ್ನು ತೆಗೆ",
+ "ooui-toolbar-more": "ಇನ್ನಷ್ಟು",
+ "ooui-toolgroup-expand": "ಇನ್ನಷ್ಟು",
+ "ooui-toolgroup-collapse": "ಕೆಲವೇ ಕೆಲವು",
"ooui-dialog-message-accept": "ಸರಿ",
- "ooui-dialog-message-reject": "ರದ್ದು",
- "ooui-dialog-process-error": "ಎನೋ ಎಡವಟ್ಟಾಗಿದೆ....",
+ "ooui-dialog-message-reject": "ರದ್ದುಮಾಡು",
+ "ooui-dialog-process-error": "ಏನೋ ಎಡವಟ್ಟಾಗಿದೆ....",
"ooui-dialog-process-dismiss": "ತೆಗೆದುಹಾಕು",
- "ooui-dialog-process-retry": "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ"
+ "ooui-dialog-process-retry": "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ",
+ "ooui-dialog-process-continue": "ಮುಂದುವರೆಸು"
}
diff --git a/resources/lib/oojs-ui/i18n/ko.json b/resources/lib/oojs-ui/i18n/ko.json
index 82d91ab3..196dc2c3 100644
--- a/resources/lib/oojs-ui/i18n/ko.json
+++ b/resources/lib/oojs-ui/i18n/ko.json
@@ -7,13 +7,16 @@
"LFM",
"아라",
"고기랑",
- "Ryuch"
+ "Ryuch",
+ "Revi",
+ "Infinity"
]
},
"ooui-outline-control-move-down": "항목을 아래로 옮기기",
"ooui-outline-control-move-up": "항목을 위로 옮기기",
"ooui-outline-control-remove": "항목 지우기",
"ooui-toolbar-more": "더 보기",
+ "ooui-toolgroup-expand": "더 보기",
"ooui-dialog-message-accept": "확인",
"ooui-dialog-message-reject": "취소",
"ooui-dialog-process-error": "무언가가 잘못되었습니다",
diff --git a/resources/lib/oojs-ui/i18n/krc.json b/resources/lib/oojs-ui/i18n/krc.json
index 18c66e93..ef92e49f 100644
--- a/resources/lib/oojs-ui/i18n/krc.json
+++ b/resources/lib/oojs-ui/i18n/krc.json
@@ -4,9 +4,16 @@
"Iltever"
]
},
- "ooui-dialog-action-close": "Джаб",
"ooui-outline-control-move-down": "Элементни тюбюне кёчюр",
"ooui-outline-control-move-up": "Элементни башына кёчюр",
"ooui-outline-control-remove": "Пунктну кетер",
- "ooui-toolbar-more": "Энтда"
+ "ooui-toolbar-more": "Энтда",
+ "ooui-toolgroup-expand": "Энтда",
+ "ooui-toolgroup-collapse": "Артха",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Ызына ал",
+ "ooui-dialog-process-error": "Не эсе да табсыз кетди",
+ "ooui-dialog-process-dismiss": "Джаб",
+ "ooui-dialog-process-retry": "Энтда сынаб кёр",
+ "ooui-dialog-process-continue": "Бардыр"
}
diff --git a/resources/lib/oojs-ui/i18n/ksh.json b/resources/lib/oojs-ui/i18n/ksh.json
new file mode 100644
index 00000000..c975e825
--- /dev/null
+++ b/resources/lib/oojs-ui/i18n/ksh.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "ooui-outline-control-move-down": "Öm eine Plaz noh onge schiehbe",
+ "ooui-outline-control-move-up": "Öm eine Plaz noh bovve schiehbe",
+ "ooui-outline-control-remove": "Dä Plaz läddesch maache → fott domet!",
+ "ooui-toolbar-more": "Mih",
+ "ooui-toolgroup-expand": "Mih",
+ "ooui-toolgroup-collapse": "Winnijer",
+ "ooui-dialog-message-accept": "Lohß Jonn!",
+ "ooui-dialog-message-reject": "Ophühre",
+ "ooui-dialog-process-error": "Öhnsjädd es scheif jejange",
+ "ooui-dialog-process-dismiss": "Maach fott, ha_sch jelässe",
+ "ooui-dialog-process-retry": "Norr_ens versöhke",
+ "ooui-dialog-process-continue": "Wigger maache"
+}
diff --git a/resources/lib/oojs-ui/i18n/ku-latn.json b/resources/lib/oojs-ui/i18n/ku-latn.json
new file mode 100644
index 00000000..be9a8abd
--- /dev/null
+++ b/resources/lib/oojs-ui/i18n/ku-latn.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "George Animal"
+ ]
+ },
+ "ooui-toolgroup-expand": "Bêhtir",
+ "ooui-toolgroup-collapse": "Kêmtir",
+ "ooui-dialog-message-accept": "Baş e",
+ "ooui-dialog-message-reject": "Betal bike",
+ "ooui-dialog-process-retry": "Dîsa hewl bide",
+ "ooui-dialog-process-continue": "Bidomîne"
+}
diff --git a/resources/lib/oojs-ui/i18n/kw.json b/resources/lib/oojs-ui/i18n/kw.json
index c7f28876..a6c6d8ab 100644
--- a/resources/lib/oojs-ui/i18n/kw.json
+++ b/resources/lib/oojs-ui/i18n/kw.json
@@ -5,6 +5,5 @@
"Nrowe",
"Purodha"
]
- },
- "ooui-dialog-action-close": "Degea"
+ }
}
diff --git a/resources/lib/oojs-ui/i18n/ky.json b/resources/lib/oojs-ui/i18n/ky.json
index 7c6b994e..e2b8ab7a 100644
--- a/resources/lib/oojs-ui/i18n/ky.json
+++ b/resources/lib/oojs-ui/i18n/ky.json
@@ -7,6 +7,5 @@
"Tynchtyk Chorotegin",
"Викиней"
]
- },
- "ooui-dialog-action-close": "Жабуу"
+ }
}
diff --git a/resources/lib/oojs-ui/i18n/lb.json b/resources/lib/oojs-ui/i18n/lb.json
index 1cbcb8ad..119d1be9 100644
--- a/resources/lib/oojs-ui/i18n/lb.json
+++ b/resources/lib/oojs-ui/i18n/lb.json
@@ -14,9 +14,12 @@
"ooui-outline-control-move-up": "Element erop réckelen",
"ooui-outline-control-remove": "Element ewechhuelen",
"ooui-toolbar-more": "Méi",
+ "ooui-toolgroup-expand": "Méi",
+ "ooui-toolgroup-collapse": "Manner",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Ofbriechen",
"ooui-dialog-process-error": "Et ass eppes schif gaang",
"ooui-dialog-process-dismiss": "Verwerfen",
- "ooui-dialog-process-retry": "Nach eng Kéier probéieren"
+ "ooui-dialog-process-retry": "Nach eng Kéier probéieren",
+ "ooui-dialog-process-continue": "Virufueren"
}
diff --git a/resources/lib/oojs-ui/i18n/lmo.json b/resources/lib/oojs-ui/i18n/lmo.json
index 3156e84e..87309db0 100644
--- a/resources/lib/oojs-ui/i18n/lmo.json
+++ b/resources/lib/oojs-ui/i18n/lmo.json
@@ -4,7 +4,6 @@
"Ninonino"
]
},
- "ooui-dialog-action-close": "Sèra",
"ooui-outline-control-move-down": "Spòsta 'n zó",
"ooui-outline-control-move-up": "Spòsta 'n sö",
"ooui-toolbar-more": "Amò"
diff --git a/resources/lib/oojs-ui/i18n/lt.json b/resources/lib/oojs-ui/i18n/lt.json
index e2957044..ecd06a8a 100644
--- a/resources/lib/oojs-ui/i18n/lt.json
+++ b/resources/lib/oojs-ui/i18n/lt.json
@@ -6,6 +6,5 @@
"Mantak111"
]
},
- "ooui-dialog-action-close": "Uždaryti",
"ooui-outline-control-remove": "Šalinti elementus"
}
diff --git a/resources/lib/oojs-ui/i18n/lv.json b/resources/lib/oojs-ui/i18n/lv.json
index 32fc9fe5..9ff787ac 100644
--- a/resources/lib/oojs-ui/i18n/lv.json
+++ b/resources/lib/oojs-ui/i18n/lv.json
@@ -11,7 +11,11 @@
"ooui-outline-control-move-down": "Pārvietot vienumu uz leju",
"ooui-outline-control-move-up": "Pārvietot vienumu uz augšu",
"ooui-toolbar-more": "Vairāk",
+ "ooui-toolgroup-expand": "Vairāk",
+ "ooui-toolgroup-collapse": "Mazāk",
"ooui-dialog-message-accept": "Labi",
"ooui-dialog-message-reject": "Atcelt",
- "ooui-dialog-process-retry": "Mēģināt vēlreiz"
+ "ooui-dialog-process-error": "Kaut kas nogāja greizi",
+ "ooui-dialog-process-retry": "Mēģināt vēlreiz",
+ "ooui-dialog-process-continue": "Turpināt"
}
diff --git a/resources/lib/oojs-ui/i18n/lzh.json b/resources/lib/oojs-ui/i18n/lzh.json
index f296c3a4..2b3ad53c 100644
--- a/resources/lib/oojs-ui/i18n/lzh.json
+++ b/resources/lib/oojs-ui/i18n/lzh.json
@@ -4,5 +4,5 @@
"Joe young yu"
]
},
- "ooui-dialog-confirm-default-ok": "可"
+ "ooui-dialog-message-accept": "可"
}
diff --git a/resources/lib/oojs-ui/i18n/mg.json b/resources/lib/oojs-ui/i18n/mg.json
index 2f276149..af97d171 100644
--- a/resources/lib/oojs-ui/i18n/mg.json
+++ b/resources/lib/oojs-ui/i18n/mg.json
@@ -3,6 +3,5 @@
"authors": [
"Jagwar"
]
- },
- "ooui-dialog-action-close": "Hidiana"
+ }
}
diff --git a/resources/lib/oojs-ui/i18n/min.json b/resources/lib/oojs-ui/i18n/min.json
index 6dfe34a1..b8790d31 100644
--- a/resources/lib/oojs-ui/i18n/min.json
+++ b/resources/lib/oojs-ui/i18n/min.json
@@ -5,13 +5,10 @@
"Jagwar"
]
},
- "ooui-dialog-action-close": "Tutuik",
"ooui-outline-control-move-down": "Pindahan ko ka bawah",
"ooui-outline-control-move-up": "Pindahan ko ka ateh",
"ooui-outline-control-remove": "Hapuih ko",
"ooui-toolbar-more": "Lainnyo",
- "ooui-dialog-confirm-title": "Pastian",
- "ooui-dialog-confirm-default-prompt": "Yakin?",
- "ooui-dialog-confirm-default-ok": "Yo",
- "ooui-dialog-confirm-default-cancel": "Batal"
+ "ooui-dialog-message-accept": "Yo",
+ "ooui-dialog-message-reject": "Batal"
}
diff --git a/resources/lib/oojs-ui/i18n/mk.json b/resources/lib/oojs-ui/i18n/mk.json
index d628034b..7962336c 100644
--- a/resources/lib/oojs-ui/i18n/mk.json
+++ b/resources/lib/oojs-ui/i18n/mk.json
@@ -10,9 +10,12 @@
"ooui-outline-control-move-up": "Помести нагоре",
"ooui-outline-control-remove": "Отстрани ставка",
"ooui-toolbar-more": "Повеќе",
+ "ooui-toolgroup-expand": "Повеќе",
+ "ooui-toolgroup-collapse": "Помалку",
"ooui-dialog-message-accept": "ОК",
"ooui-dialog-message-reject": "Откажи",
"ooui-dialog-process-error": "Нешто не е во ред",
"ooui-dialog-process-dismiss": "Тргни",
- "ooui-dialog-process-retry": "Обиди се пак"
+ "ooui-dialog-process-retry": "Обиди се пак",
+ "ooui-dialog-process-continue": "Продолжи"
}
diff --git a/resources/lib/oojs-ui/i18n/ml.json b/resources/lib/oojs-ui/i18n/ml.json
index 48b05f58..0ce0c3fd 100644
--- a/resources/lib/oojs-ui/i18n/ml.json
+++ b/resources/lib/oojs-ui/i18n/ml.json
@@ -7,7 +7,6 @@
"Vssun"
]
},
- "ooui-dialog-action-close": "അടയ്ക്കുക",
"ooui-outline-control-move-down": "ഇനം താഴേയ്ക്ക് മാറ്റുക",
"ooui-outline-control-move-up": "ഇനം മുകളിലേയ്ക്ക് മാറ്റുക",
"ooui-toolbar-more": "കൂടുതൽ"
diff --git a/resources/lib/oojs-ui/i18n/mr.json b/resources/lib/oojs-ui/i18n/mr.json
index 618b5dc0..70061907 100644
--- a/resources/lib/oojs-ui/i18n/mr.json
+++ b/resources/lib/oojs-ui/i18n/mr.json
@@ -9,7 +9,6 @@
"संतोष दहिवळ"
]
},
- "ooui-dialog-action-close": "बंद करा",
"ooui-outline-control-move-down": "घटक (आयटम) खाली सरकवा",
"ooui-outline-control-move-up": "घटक (आयटम) वर सरकवा",
"ooui-toolbar-more": "अधिक"
diff --git a/resources/lib/oojs-ui/i18n/nap.json b/resources/lib/oojs-ui/i18n/nap.json
index 2cee4137..91660373 100644
--- a/resources/lib/oojs-ui/i18n/nap.json
+++ b/resources/lib/oojs-ui/i18n/nap.json
@@ -6,6 +6,5 @@
"PiRSquared17"
]
},
- "ooui-dialog-action-close": "Chiure",
"ooui-toolbar-more": "Atro"
}
diff --git a/resources/lib/oojs-ui/i18n/nb.json b/resources/lib/oojs-ui/i18n/nb.json
index 3fe75e3f..9e773924 100644
--- a/resources/lib/oojs-ui/i18n/nb.json
+++ b/resources/lib/oojs-ui/i18n/nb.json
@@ -6,16 +6,20 @@
"Jeblad",
"Laaknor",
"Njardarlogar",
- "Jdforrester"
+ "Jdforrester",
+ "Apple farmer"
]
},
"ooui-outline-control-move-down": "Flytt ned",
"ooui-outline-control-move-up": "Flytt opp",
"ooui-outline-control-remove": "Fjern element",
"ooui-toolbar-more": "Mer",
+ "ooui-toolgroup-expand": "Mer",
+ "ooui-toolgroup-collapse": "Færre",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Avbryt",
"ooui-dialog-process-error": "Noe gikk galt",
"ooui-dialog-process-dismiss": "Lukk",
- "ooui-dialog-process-retry": "Prøv igjen"
+ "ooui-dialog-process-retry": "Prøv igjen",
+ "ooui-dialog-process-continue": "Fortsett"
}
diff --git a/resources/lib/oojs-ui/i18n/nds-nl.json b/resources/lib/oojs-ui/i18n/nds-nl.json
index e8f0c83d..d3db318b 100644
--- a/resources/lib/oojs-ui/i18n/nds-nl.json
+++ b/resources/lib/oojs-ui/i18n/nds-nl.json
@@ -4,7 +4,16 @@
"Servien"
]
},
- "ooui-dialog-action-close": "Sluten",
"ooui-outline-control-move-down": "Onderwarp ummeneer zetten",
- "ooui-outline-control-move-up": "Onderwarp umhoge zetten"
+ "ooui-outline-control-move-up": "Onderwarp umhoge zetten",
+ "ooui-outline-control-remove": "Element vortdoon",
+ "ooui-toolbar-more": "Meer",
+ "ooui-toolgroup-expand": "Meer",
+ "ooui-toolgroup-collapse": "Minder",
+ "ooui-dialog-message-accept": "Okee",
+ "ooui-dialog-message-reject": "Aofbreken",
+ "ooui-dialog-process-error": "Der gung iets fout",
+ "ooui-dialog-process-dismiss": "Sluten",
+ "ooui-dialog-process-retry": "Opniej proberen",
+ "ooui-dialog-process-continue": "Deurgaon"
}
diff --git a/resources/lib/oojs-ui/i18n/nds.json b/resources/lib/oojs-ui/i18n/nds.json
index c5d16ba0..1e5b83dd 100644
--- a/resources/lib/oojs-ui/i18n/nds.json
+++ b/resources/lib/oojs-ui/i18n/nds.json
@@ -4,7 +4,6 @@
"Zylbath"
]
},
- "ooui-dialog-action-close": "Dichtmaken",
"ooui-outline-control-move-down": "Element na ünnen schuven",
"ooui-outline-control-move-up": "Element na baven schuven",
"ooui-toolbar-more": "Mehr"
diff --git a/resources/lib/oojs-ui/i18n/ne.json b/resources/lib/oojs-ui/i18n/ne.json
index da4b829d..4ca5ab72 100644
--- a/resources/lib/oojs-ui/i18n/ne.json
+++ b/resources/lib/oojs-ui/i18n/ne.json
@@ -6,13 +6,15 @@
"Ganesh Paudel"
]
},
- "ooui-dialog-action-close": "बन्द गर्ने",
"ooui-outline-control-move-down": "वस्तुलाई तल सार्ने",
"ooui-outline-control-move-up": "वस्तुलाई माथि सार्ने",
"ooui-outline-control-remove": "वस्तुलाई हटाउने",
"ooui-toolbar-more": "थप",
- "ooui-dialog-confirm-title": "निश्चित गर्ने",
- "ooui-dialog-confirm-default-prompt": "निश्चित हुनुहुन्छ ?",
- "ooui-dialog-confirm-default-ok": "हुन्छ",
- "ooui-dialog-confirm-default-cancel": "रद्द गर्ने"
+ "ooui-toolgroup-expand": "थप",
+ "ooui-toolgroup-collapse": "कम",
+ "ooui-dialog-message-accept": "हुन्छ",
+ "ooui-dialog-message-reject": "रद्द गर्ने",
+ "ooui-dialog-process-dismiss": "खारेज गर्ने",
+ "ooui-dialog-process-retry": "पुन प्रयास गर्नुहोस",
+ "ooui-dialog-process-continue": "जारी राख्ने"
}
diff --git a/resources/lib/oojs-ui/i18n/nl.json b/resources/lib/oojs-ui/i18n/nl.json
index a7b4c084..7c7b1767 100644
--- a/resources/lib/oojs-ui/i18n/nl.json
+++ b/resources/lib/oojs-ui/i18n/nl.json
@@ -24,9 +24,12 @@
"ooui-outline-control-move-up": "Item omhoog verplaatsen",
"ooui-outline-control-remove": "Item verwijderen",
"ooui-toolbar-more": "Meer",
+ "ooui-toolgroup-expand": "Meer",
+ "ooui-toolgroup-collapse": "Minder",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Annuleren",
"ooui-dialog-process-error": "Er is iets misgegaan",
"ooui-dialog-process-dismiss": "Sluiten",
- "ooui-dialog-process-retry": "Opnieuw proberen"
+ "ooui-dialog-process-retry": "Opnieuw proberen",
+ "ooui-dialog-process-continue": "Doorgaan"
}
diff --git a/resources/lib/oojs-ui/i18n/nn.json b/resources/lib/oojs-ui/i18n/nn.json
index 07a40b17..943e6adc 100644
--- a/resources/lib/oojs-ui/i18n/nn.json
+++ b/resources/lib/oojs-ui/i18n/nn.json
@@ -5,7 +5,6 @@
"Njardarlogar"
]
},
- "ooui-dialog-action-close": "Lat att",
"ooui-outline-control-move-down": "Flytt element ned",
"ooui-outline-control-move-up": "Flytt element opp",
"ooui-toolbar-more": "Fleire"
diff --git a/resources/lib/oojs-ui/i18n/oc.json b/resources/lib/oojs-ui/i18n/oc.json
index a7f43a3e..4d35b6c9 100644
--- a/resources/lib/oojs-ui/i18n/oc.json
+++ b/resources/lib/oojs-ui/i18n/oc.json
@@ -5,12 +5,9 @@
"Gloria sah"
]
},
- "ooui-dialog-action-close": "Tampar",
"ooui-outline-control-move-down": "Far davalar l’element",
"ooui-outline-control-move-up": "Far montar l’element",
"ooui-outline-control-remove": "Suprimir l’element",
"ooui-toolbar-more": "Mai",
- "ooui-dialog-confirm-title": "Confirmar",
- "ooui-dialog-confirm-default-prompt": "Sètz segur ?",
- "ooui-dialog-confirm-default-cancel": "Anullar"
+ "ooui-dialog-message-reject": "Anullar"
}
diff --git a/resources/lib/oojs-ui/i18n/om.json b/resources/lib/oojs-ui/i18n/om.json
index c62782ef..ecf95971 100644
--- a/resources/lib/oojs-ui/i18n/om.json
+++ b/resources/lib/oojs-ui/i18n/om.json
@@ -9,9 +9,12 @@
"ooui-outline-control-move-up": "Ol baasi",
"ooui-outline-control-remove": "Balleessi",
"ooui-toolbar-more": "Dabalata",
+ "ooui-toolgroup-expand": "Dabalata",
+ "ooui-toolgroup-collapse": "Xiqqaa",
"ooui-dialog-message-accept": "Tole",
"ooui-dialog-message-reject": "Dhiisi",
"ooui-dialog-process-error": "Dogoggorri wayii ummameera",
"ooui-dialog-process-dismiss": "Didi",
- "ooui-dialog-process-retry": "Itti deebi'ii yaali"
+ "ooui-dialog-process-retry": "Itti deebi'ii yaali",
+ "ooui-dialog-process-continue": "Itti fufi"
}
diff --git a/resources/lib/oojs-ui/i18n/or.json b/resources/lib/oojs-ui/i18n/or.json
index a7083ae1..dde49bf1 100644
--- a/resources/lib/oojs-ui/i18n/or.json
+++ b/resources/lib/oojs-ui/i18n/or.json
@@ -6,5 +6,16 @@
"ଶିତିକଣ୍ଠ ଦାଶ"
]
},
- "ooui-dialog-action-close": "ବନ୍ଦ କରିବେ"
+ "ooui-outline-control-move-down": "ବସ୍ତୁଟିକୁ ତଳକୁ ଘୁଞ୍ଚାନ୍ତୁ",
+ "ooui-outline-control-move-up": "ବସ୍ତୁଟିକୁ ଉପରକୁ ଘୁଞ୍ଚାନ୍ତୁ",
+ "ooui-outline-control-remove": "ବସ୍ତୁଟିକୁ ଲିଭାନ୍ତୁ",
+ "ooui-toolbar-more": "ଅଧିକ",
+ "ooui-toolgroup-expand": "ଅଧିକ",
+ "ooui-toolgroup-collapse": "ଅଳ୍ପ",
+ "ooui-dialog-message-accept": "ହେଉ",
+ "ooui-dialog-message-reject": "ନାକଚ",
+ "ooui-dialog-process-error": "ଅସୁବିଧାଟିଏ ଘଟିଲା",
+ "ooui-dialog-process-dismiss": "ଖାରଜ",
+ "ooui-dialog-process-retry": "ଆଉ ଥରେ ଚେଷ୍ଟା କରନ୍ତୁ",
+ "ooui-dialog-process-continue": "ଚାଲୁରଖିବେ"
}
diff --git a/resources/lib/oojs-ui/i18n/pa.json b/resources/lib/oojs-ui/i18n/pa.json
index 8f75286d..8c7a1e7c 100644
--- a/resources/lib/oojs-ui/i18n/pa.json
+++ b/resources/lib/oojs-ui/i18n/pa.json
@@ -4,8 +4,19 @@
"Amikeco",
"Babanwalia",
"Bouron",
- "Nasir8891"
+ "Nasir8891",
+ "Satdeep gill"
]
},
- "ooui-dialog-action-close": "বন্ধ"
+ "ooui-outline-control-move-down": "ਨੀਚੇ ਲੈਕੇ ਜਾਓ",
+ "ooui-outline-control-move-up": "ਉੱਤੇ ਲੈਕੇ ਜਾਓ",
+ "ooui-toolbar-more": "ਹੋਰ",
+ "ooui-toolgroup-expand": "ਹੋਰ",
+ "ooui-toolgroup-collapse": "ਥੋੜੇ",
+ "ooui-dialog-message-accept": "ਠੀਕ ਹੈ",
+ "ooui-dialog-message-reject": "ਰੱਦ ਕਰੋ",
+ "ooui-dialog-process-error": "ਕੁਝ ਗਲਤ ਹੋ ਗਿਆ",
+ "ooui-dialog-process-dismiss": "ਰੱਦ ਕਰੋ",
+ "ooui-dialog-process-retry": "ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ",
+ "ooui-dialog-process-continue": "ਜਾਰੀ ਰੱਖੋ"
}
diff --git a/resources/lib/oojs-ui/i18n/pfl.json b/resources/lib/oojs-ui/i18n/pfl.json
index b51f70dc..02d08426 100644
--- a/resources/lib/oojs-ui/i18n/pfl.json
+++ b/resources/lib/oojs-ui/i18n/pfl.json
@@ -4,12 +4,10 @@
"Manuae"
]
},
- "ooui-dialog-action-close": "Schließe",
"ooui-outline-control-move-down": "Bweeschs nunna",
"ooui-outline-control-move-up": "Bweeschs nuff",
"ooui-outline-control-remove": "Leschs",
"ooui-toolbar-more": "Mea",
- "ooui-dialog-confirm-default-prompt": "Bischda sischa?",
- "ooui-dialog-confirm-default-ok": "OK",
- "ooui-dialog-confirm-default-cancel": "Abbresche"
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Abbresche"
}
diff --git a/resources/lib/oojs-ui/i18n/pl.json b/resources/lib/oojs-ui/i18n/pl.json
index 7978673b..fbd0c8cc 100644
--- a/resources/lib/oojs-ui/i18n/pl.json
+++ b/resources/lib/oojs-ui/i18n/pl.json
@@ -23,9 +23,12 @@
"ooui-outline-control-move-up": "Przenieś wyżej",
"ooui-outline-control-remove": "Usuń element",
"ooui-toolbar-more": "Więcej",
+ "ooui-toolgroup-expand": "Więcej",
+ "ooui-toolgroup-collapse": "Mniej",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Anuluj",
"ooui-dialog-process-error": "Coś poszło nie tak",
"ooui-dialog-process-dismiss": "Ukryj",
- "ooui-dialog-process-retry": "Spróbuj ponownie"
+ "ooui-dialog-process-retry": "Spróbuj ponownie",
+ "ooui-dialog-process-continue": "Kontynuuj"
}
diff --git a/resources/lib/oojs-ui/i18n/pms.json b/resources/lib/oojs-ui/i18n/pms.json
index a202a02d..b8fd3a58 100644
--- a/resources/lib/oojs-ui/i18n/pms.json
+++ b/resources/lib/oojs-ui/i18n/pms.json
@@ -6,7 +6,6 @@
"පසිඳු කාවින්ද"
]
},
- "ooui-dialog-action-close": "Saré",
"ooui-outline-control-move-down": "Fé calé giù l'element",
"ooui-outline-control-move-up": "Fé monté l'element",
"ooui-toolbar-more": "Ëd pi"
diff --git a/resources/lib/oojs-ui/i18n/ps.json b/resources/lib/oojs-ui/i18n/ps.json
index 06d3b879..ebffe539 100644
--- a/resources/lib/oojs-ui/i18n/ps.json
+++ b/resources/lib/oojs-ui/i18n/ps.json
@@ -4,8 +4,15 @@
"Ahmed-Najib-Biabani-Ibrahimkhel"
]
},
- "ooui-dialog-action-close": "تړل",
"ooui-outline-control-move-down": "توکی ښکته راوړل",
"ooui-outline-control-move-up": "توکی پورته راوړل",
- "ooui-toolbar-more": "نور"
+ "ooui-outline-control-remove": "توکی غورځول",
+ "ooui-toolbar-more": "نور",
+ "ooui-toolgroup-expand": "نور",
+ "ooui-toolgroup-collapse": "لږ تر لږ",
+ "ooui-dialog-message-accept": "ښه",
+ "ooui-dialog-message-reject": "ناگارل",
+ "ooui-dialog-process-error": "يوه ستونزه رامنځ ته شوه",
+ "ooui-dialog-process-dismiss": "تړل",
+ "ooui-dialog-process-retry": "بيا هڅه"
}
diff --git a/resources/lib/oojs-ui/i18n/pt-br.json b/resources/lib/oojs-ui/i18n/pt-br.json
index a8cced8a..94ea0895 100644
--- a/resources/lib/oojs-ui/i18n/pt-br.json
+++ b/resources/lib/oojs-ui/i18n/pt-br.json
@@ -12,7 +12,6 @@
555
]
},
- "ooui-dialog-action-close": "Fechar",
"ooui-outline-control-move-down": "Mover item para baixo",
"ooui-outline-control-move-up": "Mover item para cima",
"ooui-toolbar-more": "Mais"
diff --git a/resources/lib/oojs-ui/i18n/pt.json b/resources/lib/oojs-ui/i18n/pt.json
index 5cb3e3d8..7b3176fb 100644
--- a/resources/lib/oojs-ui/i18n/pt.json
+++ b/resources/lib/oojs-ui/i18n/pt.json
@@ -17,9 +17,12 @@
"ooui-outline-control-move-up": "Mover item para cima",
"ooui-outline-control-remove": "Remover elemento",
"ooui-toolbar-more": "Mais",
+ "ooui-toolgroup-expand": "Mais",
+ "ooui-toolgroup-collapse": "Menos",
"ooui-dialog-message-accept": "Aceitar",
"ooui-dialog-message-reject": "Cancelar",
"ooui-dialog-process-error": "Algo correu mal",
"ooui-dialog-process-dismiss": "Ignorar",
- "ooui-dialog-process-retry": "Tentar novamente"
+ "ooui-dialog-process-retry": "Tentar novamente",
+ "ooui-dialog-process-continue": "Continuar"
}
diff --git a/resources/lib/oojs-ui/i18n/qqq.json b/resources/lib/oojs-ui/i18n/qqq.json
index 9b3bb605..c1b794ab 100644
--- a/resources/lib/oojs-ui/i18n/qqq.json
+++ b/resources/lib/oojs-ui/i18n/qqq.json
@@ -24,9 +24,12 @@
"ooui-outline-control-move-up": "Tool tip for a button that moves items in a list up one place",
"ooui-outline-control-remove": "Tool tip for a button that removes items from a list.\n{{Identical|Remove item}}",
"ooui-toolbar-more": "Label for the toolbar group that contains a list of all other available tools.\n{{Identical|More}}",
+ "ooui-toolgroup-expand": "Label for the fake tool that expands the full list of tools in a toolbar group.\n\nSee also:\n* {{msg-mw|Ooui-toolgroup-collapse}}\n{{Identical|More}}",
+ "ooui-toolgroup-collapse": "Label for the fake tool that collapses the full list of tools in a toolbar group.\n\nSee also:\n* {{msg-mw|Ooui-toolgroup-expand}}\n{{Identical|Fewer}}",
"ooui-dialog-message-accept": "Default label for the accept button of a message dialog\n{{Identical|OK}}",
"ooui-dialog-message-reject": "Default label for the reject button of a message dialog\n{{Identical|Cancel}}",
"ooui-dialog-process-error": "Title for process dialog error description",
"ooui-dialog-process-dismiss": "Label for process dialog dismiss error button, visible when describing errors\n{{Identical|Dismiss}}",
- "ooui-dialog-process-retry": "Label for process dialog retry action button, visible when describing recoverable errors\n{{Identical|Try again}}"
+ "ooui-dialog-process-retry": "Label for process dialog retry action button, visible when describing recoverable errors\n{{Identical|Try again}}",
+ "ooui-dialog-process-continue": "Label for process dialog retry action button, visible when describing only warnings\n{{Identical|Continue}}"
}
diff --git a/resources/lib/oojs-ui/i18n/qu.json b/resources/lib/oojs-ui/i18n/qu.json
index 5141f342..cb0b2c33 100644
--- a/resources/lib/oojs-ui/i18n/qu.json
+++ b/resources/lib/oojs-ui/i18n/qu.json
@@ -5,7 +5,6 @@
"Jduranboger"
]
},
- "ooui-dialog-action-close": "Wichq'ay",
"ooui-outline-control-move-down": "Qallawata uraykuchiy",
"ooui-outline-control-move-up": "Qallawata huqariy",
"ooui-outline-control-remove": "P'anqa sutikunata qichuy",
diff --git a/resources/lib/oojs-ui/i18n/ro.json b/resources/lib/oojs-ui/i18n/ro.json
index 06e0f1de..258f3e74 100644
--- a/resources/lib/oojs-ui/i18n/ro.json
+++ b/resources/lib/oojs-ui/i18n/ro.json
@@ -12,9 +12,12 @@
"ooui-outline-control-move-up": "Mută elementul mai sus",
"ooui-outline-control-remove": "Elimină elementul",
"ooui-toolbar-more": "Mai mult",
+ "ooui-toolgroup-expand": "Mai multe",
+ "ooui-toolgroup-collapse": "Mai puține",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Revocare",
"ooui-dialog-process-error": "Ceva nu a funcționat",
"ooui-dialog-process-dismiss": "Renunțare",
- "ooui-dialog-process-retry": "Reîncearcă"
+ "ooui-dialog-process-retry": "Reîncearcă",
+ "ooui-dialog-process-continue": "Continuă"
}
diff --git a/resources/lib/oojs-ui/i18n/roa-tara.json b/resources/lib/oojs-ui/i18n/roa-tara.json
index 11427ec3..f6f422a2 100644
--- a/resources/lib/oojs-ui/i18n/roa-tara.json
+++ b/resources/lib/oojs-ui/i18n/roa-tara.json
@@ -4,8 +4,16 @@
"Joetaras"
]
},
- "ooui-dialog-action-close": "Achiude",
"ooui-outline-control-move-down": "Spuèste 'a vôsce sotte",
"ooui-outline-control-move-up": "Spuèste 'a vôsce sus",
- "ooui-toolbar-more": "De cchiù"
+ "ooui-outline-control-remove": "Live 'a vôsce",
+ "ooui-toolbar-more": "De cchiù",
+ "ooui-toolgroup-expand": "De cchiù",
+ "ooui-toolgroup-collapse": "De mene",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Annulle",
+ "ooui-dialog-process-error": "Quacche cose ha sciute stuèrte",
+ "ooui-dialog-process-dismiss": "Scitte",
+ "ooui-dialog-process-retry": "Pruève arrete",
+ "ooui-dialog-process-continue": "Condinue"
}
diff --git a/resources/lib/oojs-ui/i18n/ru.json b/resources/lib/oojs-ui/i18n/ru.json
index efd10627..129dd6a2 100644
--- a/resources/lib/oojs-ui/i18n/ru.json
+++ b/resources/lib/oojs-ui/i18n/ru.json
@@ -15,16 +15,20 @@
"Putnik",
"Sunpriat",
"Yury Katkov",
- "Умар"
+ "Умар",
+ "Камалист"
]
},
"ooui-outline-control-move-down": "Переместить элемент вниз",
"ooui-outline-control-move-up": "Переместить элемент вверх",
"ooui-outline-control-remove": "Удалить пункт",
"ooui-toolbar-more": "Ещё",
+ "ooui-toolgroup-expand": "Больше",
+ "ooui-toolgroup-collapse": "Меньше",
"ooui-dialog-message-accept": "ОК",
"ooui-dialog-message-reject": "Отмена",
"ooui-dialog-process-error": "Что-то пошло не так",
"ooui-dialog-process-dismiss": "Закрыть",
- "ooui-dialog-process-retry": "Попробовать ещё раз"
+ "ooui-dialog-process-retry": "Попробовать ещё раз",
+ "ooui-dialog-process-continue": "Продолжить"
}
diff --git a/resources/lib/oojs-ui/i18n/sah.json b/resources/lib/oojs-ui/i18n/sah.json
index 82d76a64..85a94cd5 100644
--- a/resources/lib/oojs-ui/i18n/sah.json
+++ b/resources/lib/oojs-ui/i18n/sah.json
@@ -4,6 +4,5 @@
"Gazeb",
"HalanTul"
]
- },
- "ooui-dialog-action-close": "Сап"
+ }
}
diff --git a/resources/lib/oojs-ui/i18n/scn.json b/resources/lib/oojs-ui/i18n/scn.json
index a063cc8e..22a212f9 100644
--- a/resources/lib/oojs-ui/i18n/scn.json
+++ b/resources/lib/oojs-ui/i18n/scn.json
@@ -7,9 +7,7 @@
"Gloria sah"
]
},
- "ooui-dialog-action-close": "Chiùi",
"ooui-outline-control-move-down": "Sposta di sutta",
"ooui-outline-control-move-up": "Sposta di supra",
- "ooui-toolbar-more": "Àutri cosi",
- "ooui-dialog-confirm-title": "Cunferma"
+ "ooui-toolbar-more": "Àutri cosi"
}
diff --git a/resources/lib/oojs-ui/i18n/sco.json b/resources/lib/oojs-ui/i18n/sco.json
index 085f908a..0a26a5c8 100644
--- a/resources/lib/oojs-ui/i18n/sco.json
+++ b/resources/lib/oojs-ui/i18n/sco.json
@@ -4,7 +4,6 @@
"John Reid"
]
},
- "ooui-dialog-action-close": "Claise",
"ooui-outline-control-move-down": "Muiv eetem doon",
"ooui-outline-control-move-up": "Muiv eetem up",
"ooui-outline-control-remove": "Remuiv eetem",
diff --git a/resources/lib/oojs-ui/i18n/sh.json b/resources/lib/oojs-ui/i18n/sh.json
index ab9f9fd6..b40fa04e 100644
--- a/resources/lib/oojs-ui/i18n/sh.json
+++ b/resources/lib/oojs-ui/i18n/sh.json
@@ -4,7 +4,6 @@
"OC Ripper"
]
},
- "ooui-dialog-action-close": "Zatvori",
"ooui-outline-control-move-down": "Pomakni stavku dolje",
"ooui-outline-control-move-up": "Pomakni stavku gore"
}
diff --git a/resources/lib/oojs-ui/i18n/si.json b/resources/lib/oojs-ui/i18n/si.json
index b5c0b692..5988773b 100644
--- a/resources/lib/oojs-ui/i18n/si.json
+++ b/resources/lib/oojs-ui/i18n/si.json
@@ -6,7 +6,6 @@
"ශ්වෙත"
]
},
- "ooui-dialog-action-close": "නිමවන්න",
"ooui-outline-control-move-down": "අයිතමය පහලටදමන්න",
"ooui-outline-control-move-up": "අයිතමය ඉහලටදමන්න"
}
diff --git a/resources/lib/oojs-ui/i18n/sk.json b/resources/lib/oojs-ui/i18n/sk.json
index 07d98286..c8246da9 100644
--- a/resources/lib/oojs-ui/i18n/sk.json
+++ b/resources/lib/oojs-ui/i18n/sk.json
@@ -5,8 +5,8 @@
"Teslaton"
]
},
- "ooui-dialog-action-close": "Zatvoriť",
"ooui-outline-control-move-down": "Posunúť položku nadol",
"ooui-outline-control-move-up": "Posunúť položku nahor",
+ "ooui-outline-control-remove": "Odstrániť položku",
"ooui-toolbar-more": "Viac"
}
diff --git a/resources/lib/oojs-ui/i18n/sl.json b/resources/lib/oojs-ui/i18n/sl.json
index 5737548e..a40728ad 100644
--- a/resources/lib/oojs-ui/i18n/sl.json
+++ b/resources/lib/oojs-ui/i18n/sl.json
@@ -11,9 +11,12 @@
"ooui-outline-control-move-up": "Prestavi predmet višje",
"ooui-outline-control-remove": "Odstrani vnos",
"ooui-toolbar-more": "Več",
+ "ooui-toolgroup-expand": "Več",
+ "ooui-toolgroup-collapse": "Manj",
"ooui-dialog-message-accept": "V redu",
"ooui-dialog-message-reject": "Prekliči",
"ooui-dialog-process-error": "Nekaj je šlo narobe",
"ooui-dialog-process-dismiss": "Skrij",
- "ooui-dialog-process-retry": "Poskusi znova"
+ "ooui-dialog-process-retry": "Poskusi znova",
+ "ooui-dialog-process-continue": "Nadaljuj"
}
diff --git a/resources/lib/oojs-ui/i18n/sr-ec.json b/resources/lib/oojs-ui/i18n/sr-ec.json
index d6533569..c827554e 100644
--- a/resources/lib/oojs-ui/i18n/sr-ec.json
+++ b/resources/lib/oojs-ui/i18n/sr-ec.json
@@ -10,9 +10,12 @@
"ooui-outline-control-move-up": "Премести ставку на горе",
"ooui-outline-control-remove": "Уклони ставку",
"ooui-toolbar-more": "Више",
+ "ooui-toolgroup-expand": "Више",
+ "ooui-toolgroup-collapse": "Мање",
"ooui-dialog-message-accept": "У реду",
"ooui-dialog-message-reject": "Откажи",
"ooui-dialog-process-error": "Нешто је пошло наопако",
"ooui-dialog-process-dismiss": "Одбаци",
- "ooui-dialog-process-retry": "Покушај поново"
+ "ooui-dialog-process-retry": "Покушај поново",
+ "ooui-dialog-process-continue": "Настави"
}
diff --git a/resources/lib/oojs-ui/i18n/sr-el.json b/resources/lib/oojs-ui/i18n/sr-el.json
index 889b0f68..704a1860 100644
--- a/resources/lib/oojs-ui/i18n/sr-el.json
+++ b/resources/lib/oojs-ui/i18n/sr-el.json
@@ -4,10 +4,16 @@
"Milicevic01"
]
},
- "ooui-dialog-action-close": "Zatvori",
"ooui-outline-control-move-down": "Premesti stavku na dole",
"ooui-outline-control-move-up": "Premesti stavku na gore",
"ooui-outline-control-remove": "Ukloni stavku",
"ooui-toolbar-more": "Više",
- "ooui-dialog-confirm-default-prompt": "Jeste li sigurni?"
+ "ooui-toolgroup-expand": "Više",
+ "ooui-toolgroup-collapse": "Manje",
+ "ooui-dialog-message-accept": "U redu",
+ "ooui-dialog-message-reject": "Otkaži",
+ "ooui-dialog-process-error": "Nešto je pošlo naopako",
+ "ooui-dialog-process-dismiss": "Odbaci",
+ "ooui-dialog-process-retry": "Pokušaj ponovo",
+ "ooui-dialog-process-continue": "Nastavi"
}
diff --git a/resources/lib/oojs-ui/i18n/sv.json b/resources/lib/oojs-ui/i18n/sv.json
index 40305d0a..d499427c 100644
--- a/resources/lib/oojs-ui/i18n/sv.json
+++ b/resources/lib/oojs-ui/i18n/sv.json
@@ -18,9 +18,12 @@
"ooui-outline-control-move-up": "Flytta upp objekt",
"ooui-outline-control-remove": "Ta bort objekt",
"ooui-toolbar-more": "Mer",
+ "ooui-toolgroup-expand": "Fler",
+ "ooui-toolgroup-collapse": "Färre",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Avbryt",
"ooui-dialog-process-error": "Något gick fel",
"ooui-dialog-process-dismiss": "Stäng",
- "ooui-dialog-process-retry": "Försök igen"
+ "ooui-dialog-process-retry": "Försök igen",
+ "ooui-dialog-process-continue": "Fortsätt"
}
diff --git a/resources/lib/oojs-ui/i18n/ta.json b/resources/lib/oojs-ui/i18n/ta.json
index dd8294fe..122d4a27 100644
--- a/resources/lib/oojs-ui/i18n/ta.json
+++ b/resources/lib/oojs-ui/i18n/ta.json
@@ -4,8 +4,10 @@
"Jayarathina",
"Sank",
"Shanmugamp7",
- "மதனாஹரன்"
+ "மதனாஹரன்",
+ "ElangoRamanujam"
]
},
- "ooui-dialog-action-close": "மூடுக"
+ "ooui-toolgroup-expand": "மேலும்",
+ "ooui-dialog-process-continue": "தொடரவும்"
}
diff --git a/resources/lib/oojs-ui/i18n/te.json b/resources/lib/oojs-ui/i18n/te.json
index f220fa3f..d4868706 100644
--- a/resources/lib/oojs-ui/i18n/te.json
+++ b/resources/lib/oojs-ui/i18n/te.json
@@ -9,6 +9,5 @@
"Visdaviva",
"மதனாஹரன்"
]
- },
- "ooui-dialog-action-close": "మూయి"
+ }
}
diff --git a/resources/lib/oojs-ui/i18n/tg-cyrl.json b/resources/lib/oojs-ui/i18n/tg-cyrl.json
index 908c8947..1429bedd 100644
--- a/resources/lib/oojs-ui/i18n/tg-cyrl.json
+++ b/resources/lib/oojs-ui/i18n/tg-cyrl.json
@@ -4,7 +4,6 @@
"Ibrahim"
]
},
- "ooui-dialog-action-close": "Пӯшиш",
"ooui-outline-control-move-down": "Ҳаракати мавод ба поён",
"ooui-outline-control-move-up": "Ҳаракати мавод ба боло",
"ooui-outline-control-remove": "Ҳазви мавод",
diff --git a/resources/lib/oojs-ui/i18n/th.json b/resources/lib/oojs-ui/i18n/th.json
index f36dd6a2..94527935 100644
--- a/resources/lib/oojs-ui/i18n/th.json
+++ b/resources/lib/oojs-ui/i18n/th.json
@@ -5,7 +5,6 @@
"Taweetham"
]
},
- "ooui-dialog-action-close": "ปิด",
"ooui-outline-control-move-down": "เลื่อนรายการลง",
"ooui-outline-control-move-up": "ย้ายรายการขึ้น"
}
diff --git a/resources/lib/oojs-ui/i18n/tl.json b/resources/lib/oojs-ui/i18n/tl.json
index 178384cd..b3a9f246 100644
--- a/resources/lib/oojs-ui/i18n/tl.json
+++ b/resources/lib/oojs-ui/i18n/tl.json
@@ -5,13 +5,10 @@
"Sky Harbor"
]
},
- "ooui-dialog-action-close": "Isara",
"ooui-outline-control-move-down": "Ilipat ang aytem pababa",
"ooui-outline-control-move-up": "Ilipat ang aytem pataas",
"ooui-outline-control-remove": "Tanggalin ang aytem",
"ooui-toolbar-more": "Marami pa",
- "ooui-dialog-confirm-title": "Tiyakin",
- "ooui-dialog-confirm-default-prompt": "Nakatitiyak ka ba?",
- "ooui-dialog-confirm-default-ok": "Sige",
- "ooui-dialog-confirm-default-cancel": "Huwag ituloy"
+ "ooui-dialog-message-accept": "Sige",
+ "ooui-dialog-message-reject": "Huwag ituloy"
}
diff --git a/resources/lib/oojs-ui/i18n/tr.json b/resources/lib/oojs-ui/i18n/tr.json
index 82f7c6c0..7b4d4921 100644
--- a/resources/lib/oojs-ui/i18n/tr.json
+++ b/resources/lib/oojs-ui/i18n/tr.json
@@ -8,11 +8,20 @@
"Rapsar",
"Talha Samil Cakir",
"TurkishStyles",
- "Sayginer"
+ "Sayginer",
+ "Meelo"
]
},
"ooui-outline-control-move-down": "Ögeyi aşağı taşı",
"ooui-outline-control-move-up": "Ögeyi yukarı taşı",
- "ooui-toolbar-more": "Daha fazla",
- "ooui-dialog-process-retry": "Tekrar dene"
+ "ooui-outline-control-remove": "Ögeyi kaldır",
+ "ooui-toolbar-more": "Dahası",
+ "ooui-toolgroup-expand": "Dahası",
+ "ooui-toolgroup-collapse": "Daha az",
+ "ooui-dialog-message-accept": "Tamam",
+ "ooui-dialog-message-reject": "İptal",
+ "ooui-dialog-process-error": "Bir şeyler yanlış gitti",
+ "ooui-dialog-process-dismiss": "Kapat",
+ "ooui-dialog-process-retry": "Tekrar dene",
+ "ooui-dialog-process-continue": "Devam et"
}
diff --git a/resources/lib/oojs-ui/i18n/tt-cyrl.json b/resources/lib/oojs-ui/i18n/tt-cyrl.json
index 257e13cd..408a1b4a 100644
--- a/resources/lib/oojs-ui/i18n/tt-cyrl.json
+++ b/resources/lib/oojs-ui/i18n/tt-cyrl.json
@@ -4,7 +4,6 @@
"Ajdar"
]
},
- "ooui-dialog-action-close": "Ябу",
"ooui-outline-control-move-down": "Элементны аска күчерү",
"ooui-outline-control-move-up": "Элементны өскә күчерү"
}
diff --git a/resources/lib/oojs-ui/i18n/uk.json b/resources/lib/oojs-ui/i18n/uk.json
index d6034f05..0197a4ce 100644
--- a/resources/lib/oojs-ui/i18n/uk.json
+++ b/resources/lib/oojs-ui/i18n/uk.json
@@ -14,16 +14,20 @@
"SteveR",
"Tel'et",
"Tifinaghes",
- "Ата"
+ "Ата",
+ "Piramidion"
]
},
"ooui-outline-control-move-down": "Перемістити елемент униз",
"ooui-outline-control-move-up": "Перемістити елемент вгору",
"ooui-outline-control-remove": "Видалити елемент",
"ooui-toolbar-more": "Більше",
+ "ooui-toolgroup-expand": "Більше",
+ "ooui-toolgroup-collapse": "Менше",
"ooui-dialog-message-accept": "Готово",
"ooui-dialog-message-reject": "Скасувати",
"ooui-dialog-process-error": "Щось пішло не так",
"ooui-dialog-process-dismiss": "Приховати",
- "ooui-dialog-process-retry": "Спробуйте ще раз"
+ "ooui-dialog-process-retry": "Спробуйте ще раз",
+ "ooui-dialog-process-continue": "Продовжити"
}
diff --git a/resources/lib/oojs-ui/i18n/uz.json b/resources/lib/oojs-ui/i18n/uz.json
index 03b78089..7c6263e4 100644
--- a/resources/lib/oojs-ui/i18n/uz.json
+++ b/resources/lib/oojs-ui/i18n/uz.json
@@ -7,7 +7,6 @@
"පසිඳු කාවින්ද"
]
},
- "ooui-dialog-action-close": "Yopish",
"ooui-outline-control-move-down": "Elementni pastga koʻchirish",
"ooui-outline-control-move-up": "Elementni yuqoriga koʻchirish",
"ooui-toolbar-more": "Yana"
diff --git a/resources/lib/oojs-ui/i18n/vec.json b/resources/lib/oojs-ui/i18n/vec.json
index 1a91cdb0..4de584bf 100644
--- a/resources/lib/oojs-ui/i18n/vec.json
+++ b/resources/lib/oojs-ui/i18n/vec.json
@@ -6,10 +6,8 @@
"Gloria sah"
]
},
- "ooui-dialog-action-close": "Sara",
"ooui-outline-control-move-down": "Sposta in baso",
"ooui-outline-control-move-up": "Sposta in sima",
"ooui-toolbar-more": "Altro",
- "ooui-dialog-confirm-title": "Conferma",
- "ooui-dialog-confirm-default-ok": "Va ben"
+ "ooui-dialog-message-accept": "Va ben"
}
diff --git a/resources/lib/oojs-ui/i18n/vi.json b/resources/lib/oojs-ui/i18n/vi.json
index 205cbe89..d5c1e364 100644
--- a/resources/lib/oojs-ui/i18n/vi.json
+++ b/resources/lib/oojs-ui/i18n/vi.json
@@ -3,16 +3,20 @@
"authors": [
"Cheers!",
"Jdforrester",
- "Minh Nguyen"
+ "Minh Nguyen",
+ "Max20091"
]
},
"ooui-outline-control-move-down": "Chuyển mục xuống",
"ooui-outline-control-move-up": "Chuyển mục lên",
"ooui-outline-control-remove": "Xóa khoản",
"ooui-toolbar-more": "Thêm",
+ "ooui-toolgroup-expand": "Mở rộng",
+ "ooui-toolgroup-collapse": "Rút gọn",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "Hủy bỏ",
"ooui-dialog-process-error": "Đã bị trục trặc",
"ooui-dialog-process-dismiss": "Bỏ qua",
- "ooui-dialog-process-retry": "Thử lại"
+ "ooui-dialog-process-retry": "Thử lại",
+ "ooui-dialog-process-continue": "Tiếp tục"
}
diff --git a/resources/lib/oojs-ui/i18n/vo.json b/resources/lib/oojs-ui/i18n/vo.json
index 7e359a5c..3510ca93 100644
--- a/resources/lib/oojs-ui/i18n/vo.json
+++ b/resources/lib/oojs-ui/i18n/vo.json
@@ -4,6 +4,5 @@
"Malafaya"
]
},
- "ooui-dialog-action-close": "Färmükön",
"ooui-toolbar-more": "Pluikos"
}
diff --git a/resources/lib/oojs-ui/i18n/yo.json b/resources/lib/oojs-ui/i18n/yo.json
index bbb8f30d..d979fc13 100644
--- a/resources/lib/oojs-ui/i18n/yo.json
+++ b/resources/lib/oojs-ui/i18n/yo.json
@@ -4,7 +4,6 @@
"Demmy"
]
},
- "ooui-dialog-action-close": "Ìpadé",
"ooui-outline-control-move-down": "Sún onítòún sí sàlẹ̀",
"ooui-outline-control-move-up": "Sún onítòún s'ókè",
"ooui-toolbar-more": "Míràn"
diff --git a/resources/lib/oojs-ui/i18n/zh-hans.json b/resources/lib/oojs-ui/i18n/zh-hans.json
index 02bdafad..ed2f61e4 100644
--- a/resources/lib/oojs-ui/i18n/zh-hans.json
+++ b/resources/lib/oojs-ui/i18n/zh-hans.json
@@ -19,13 +19,16 @@
"Great Brightstar"
]
},
- "ooui-outline-control-move-down": "下移项",
- "ooui-outline-control-move-up": "上移项",
- "ooui-outline-control-remove": "删除项",
+ "ooui-outline-control-move-down": "项目下移",
+ "ooui-outline-control-move-up": "项目上移",
+ "ooui-outline-control-remove": "移除项目",
"ooui-toolbar-more": "更多",
+ "ooui-toolgroup-expand": "更多",
+ "ooui-toolgroup-collapse": "更少",
"ooui-dialog-message-accept": "确定",
"ooui-dialog-message-reject": "取消",
"ooui-dialog-process-error": "发生一些错误",
"ooui-dialog-process-dismiss": "解除",
- "ooui-dialog-process-retry": "重试"
+ "ooui-dialog-process-retry": "重试",
+ "ooui-dialog-process-continue": "继续"
}
diff --git a/resources/lib/oojs-ui/i18n/zh-hant.json b/resources/lib/oojs-ui/i18n/zh-hant.json
index 05fb20d1..3fd8d361 100644
--- a/resources/lib/oojs-ui/i18n/zh-hant.json
+++ b/resources/lib/oojs-ui/i18n/zh-hant.json
@@ -13,16 +13,20 @@
"Simon Shek",
"Spring Roll Conan",
"Waihorace",
- "Cwlin0416"
+ "Cwlin0416",
+ "LNDDYL"
]
},
"ooui-outline-control-move-down": "項目下移",
"ooui-outline-control-move-up": "項目上移",
"ooui-outline-control-remove": "移除項目",
"ooui-toolbar-more": "更多",
+ "ooui-toolgroup-expand": "更多",
+ "ooui-toolgroup-collapse": "更少",
"ooui-dialog-message-accept": "確定",
"ooui-dialog-message-reject": "取消",
"ooui-dialog-process-error": "發生不明錯誤",
- "ooui-dialog-process-dismiss": "放棄",
- "ooui-dialog-process-retry": "再試一次"
+ "ooui-dialog-process-dismiss": "關閉",
+ "ooui-dialog-process-retry": "再試一次",
+ "ooui-dialog-process-continue": "繼續"
}
diff --git a/resources/lib/oojs-ui/images/anchor.png b/resources/lib/oojs-ui/images/anchor.png
deleted file mode 100644
index 470a7ac7..00000000
--- a/resources/lib/oojs-ui/images/anchor.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/anchor.svg b/resources/lib/oojs-ui/images/anchor.svg
deleted file mode 100644
index 3694391e..00000000
--- a/resources/lib/oojs-ui/images/anchor.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="15" height="8" viewBox="0 0 15 8">
- <g id="anchor">
- <polygon id="outline" style="fill:#808080;" points="7.609,2.499 2.096,8 13.125,8"/>
- <polygon id="fill" style="fill:#FFFFFF;" points="7.609,3 2.598,8 12.622,8"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/grab.cur b/resources/lib/oojs-ui/images/grab.cur
new file mode 100644
index 00000000..fba3ddc8
--- /dev/null
+++ b/resources/lib/oojs-ui/images/grab.cur
Binary files differ
diff --git a/resources/lib/oojs-ui/images/grabbing.cur b/resources/lib/oojs-ui/images/grabbing.cur
new file mode 100644
index 00000000..41aaa62a
--- /dev/null
+++ b/resources/lib/oojs-ui/images/grabbing.cur
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/accept.png b/resources/lib/oojs-ui/images/icons/accept.png
deleted file mode 100644
index 76df4795..00000000
--- a/resources/lib/oojs-ui/images/icons/accept.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/accept.svg b/resources/lib/oojs-ui/images/icons/accept.svg
deleted file mode 100644
index b385a74c..00000000
--- a/resources/lib/oojs-ui/images/icons/accept.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="accept" opacity=".75">
- <path id="check" d="M19.062 5.139l-1.644-1.139-8.551 12.357-3.454-3.454-1.413 1.413 5.021 5.022z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/add-item.png b/resources/lib/oojs-ui/images/icons/add-item.png
deleted file mode 100644
index a7788c72..00000000
--- a/resources/lib/oojs-ui/images/icons/add-item.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/add-item.svg b/resources/lib/oojs-ui/images/icons/add-item.svg
deleted file mode 100644
index c42731a1..00000000
--- a/resources/lib/oojs-ui/images/icons/add-item.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="add-item" opacity=".75">
- <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/advanced.png b/resources/lib/oojs-ui/images/icons/advanced.png
deleted file mode 100644
index 7609ec91..00000000
--- a/resources/lib/oojs-ui/images/icons/advanced.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/advanced.svg b/resources/lib/oojs-ui/images/icons/advanced.svg
deleted file mode 100644
index 0f85e44b..00000000
--- a/resources/lib/oojs-ui/images/icons/advanced.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="settings" opacity=".75">
- <path id="gear" d="M20.869 13.476c.079-.482.131-.972.131-1.476s-.052-.994-.131-1.476l-2.463-.259c-.149-.556-.367-1.082-.648-1.57l1.558-1.924c-.576-.806-1.281-1.511-2.087-2.087l-1.924 1.558c-.488-.281-1.015-.499-1.57-.648l-.259-2.463c-.482-.079-.972-.131-1.476-.131s-.994.052-1.476.131l-.259 2.463c-.555.149-1.081.367-1.57.648l-1.924-1.557c-.805.576-1.51 1.281-2.086 2.086l1.558 1.924c-.281.488-.499 1.015-.648 1.57l-2.463.259c-.08.482-.132.972-.132 1.476s.052.994.131 1.476l2.463.259c.149.556.367 1.082.648 1.57l-1.558 1.924c.576.806 1.281 1.511 2.087 2.087l1.924-1.558c.488.281 1.015.499 1.57.648l.259 2.463c.482.079.972.131 1.476.131s.994-.052 1.476-.131l.259-2.463c.556-.149 1.082-.367 1.57-.648l1.924 1.558c.806-.576 1.511-1.281 2.087-2.087l-1.558-1.924c.281-.488.499-1.015.648-1.57l2.463-.259zm-8.869 2.522c-2.209 0-3.998-1.789-3.998-3.998s1.789-3.998 3.998-3.998 3.998 1.789 3.998 3.998-1.789 3.998-3.998 3.998z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/alert.png b/resources/lib/oojs-ui/images/icons/alert.png
deleted file mode 100644
index a45ad31e..00000000
--- a/resources/lib/oojs-ui/images/icons/alert.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/alert.svg b/resources/lib/oojs-ui/images/icons/alert.svg
deleted file mode 100644
index 819e062a..00000000
--- a/resources/lib/oojs-ui/images/icons/alert.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="alert" opacity=".75">
- <path id="point" d="M11 16h2v2h-2z"/>
- <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
- <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.png b/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.png
deleted file mode 100644
index c48f55df..00000000
--- a/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.svg b/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.svg
deleted file mode 100644
index 9fd2866f..00000000
--- a/resources/lib/oojs-ui/images/icons/arched-arrow-ltr.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="arched-arrow-ltr" opacity=".75">
- <path id="arrow" d="M19.925 14.937l-2.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 6.782-.01z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.png b/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.png
deleted file mode 100644
index 51c8de4f..00000000
--- a/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.svg b/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.svg
deleted file mode 100644
index b16c1b47..00000000
--- a/resources/lib/oojs-ui/images/icons/arched-arrow-rtl.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="arched-arrow-rtl" opacity=".75">
- <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/check.png b/resources/lib/oojs-ui/images/icons/check.png
deleted file mode 100644
index 9a2c9dbf..00000000
--- a/resources/lib/oojs-ui/images/icons/check.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/check.svg b/resources/lib/oojs-ui/images/icons/check.svg
deleted file mode 100644
index 8d4a1f8b..00000000
--- a/resources/lib/oojs-ui/images/icons/check.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
- <g id="check">
- <path d="M7.105 13.473l1.422-1.423 1.901 1.902 4.81-6.952 1.657 1.148-6.26 8.852z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/clear.png b/resources/lib/oojs-ui/images/icons/clear.png
deleted file mode 100644
index 02d6bb39..00000000
--- a/resources/lib/oojs-ui/images/icons/clear.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/clear.svg b/resources/lib/oojs-ui/images/icons/clear.svg
deleted file mode 100644
index 8409c679..00000000
--- a/resources/lib/oojs-ui/images/icons/clear.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="clear" opacity=".75">
- <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/close.png b/resources/lib/oojs-ui/images/icons/close.png
deleted file mode 100644
index 06d49217..00000000
--- a/resources/lib/oojs-ui/images/icons/close.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/code.png b/resources/lib/oojs-ui/images/icons/code.png
deleted file mode 100644
index 783e1e0d..00000000
--- a/resources/lib/oojs-ui/images/icons/code.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/code.svg b/resources/lib/oojs-ui/images/icons/code.svg
deleted file mode 100644
index a45ab1e3..00000000
--- a/resources/lib/oojs-ui/images/icons/code.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
- <g id="code" opacity=".75">
- <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
- <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/collapse.png b/resources/lib/oojs-ui/images/icons/collapse.png
deleted file mode 100644
index 2c4ecee6..00000000
--- a/resources/lib/oojs-ui/images/icons/collapse.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/collapse.svg b/resources/lib/oojs-ui/images/icons/collapse.svg
deleted file mode 100644
index c677e9e5..00000000
--- a/resources/lib/oojs-ui/images/icons/collapse.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="collapse" opacity=".75">
- <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/comment.png b/resources/lib/oojs-ui/images/icons/comment.png
deleted file mode 100644
index 5be2b72f..00000000
--- a/resources/lib/oojs-ui/images/icons/comment.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/comment.svg b/resources/lib/oojs-ui/images/icons/comment.svg
deleted file mode 100644
index 0348035b..00000000
--- a/resources/lib/oojs-ui/images/icons/comment.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="comment" opacity=".75">
- <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/expand.png b/resources/lib/oojs-ui/images/icons/expand.png
deleted file mode 100644
index 3ae27c06..00000000
--- a/resources/lib/oojs-ui/images/icons/expand.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/expand.svg b/resources/lib/oojs-ui/images/icons/expand.svg
deleted file mode 100644
index f41b9f9d..00000000
--- a/resources/lib/oojs-ui/images/icons/expand.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="expand" opacity=".75">
- <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/help.png b/resources/lib/oojs-ui/images/icons/help.png
deleted file mode 100644
index c1190fcc..00000000
--- a/resources/lib/oojs-ui/images/icons/help.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/help.svg b/resources/lib/oojs-ui/images/icons/help.svg
deleted file mode 100644
index ce129a74..00000000
--- a/resources/lib/oojs-ui/images/icons/help.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="help" opacity=".75">
- <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
- <g id="question-mark">
- <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
- <path id="bottom" d="M11 16h2v2h-2z"/>
- </g>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/history.png b/resources/lib/oojs-ui/images/icons/history.png
deleted file mode 100644
index 8a9862fc..00000000
--- a/resources/lib/oojs-ui/images/icons/history.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/history.svg b/resources/lib/oojs-ui/images/icons/history.svg
deleted file mode 100644
index 91e072f5..00000000
--- a/resources/lib/oojs-ui/images/icons/history.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="history" opacity=".75">
- <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
- <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/info.png b/resources/lib/oojs-ui/images/icons/info.png
deleted file mode 100644
index a74fb186..00000000
--- a/resources/lib/oojs-ui/images/icons/info.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/info.svg b/resources/lib/oojs-ui/images/icons/info.svg
deleted file mode 100644
index 9ba57d7a..00000000
--- a/resources/lib/oojs-ui/images/icons/info.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
- <g id="info" opacity=".75">
- <path id="circled-i" d="M11.499 17c-3.036 0-5.499-2.464-5.499-5.5 0-3.037 2.462-5.5 5.499-5.5 3.037 0 5.501 2.462 5.501 5.5 0 3.036-2.464 5.5-5.501 5.5zm.002-12c-3.591 0-6.501 2.91-6.501 6.5s2.91 6.5 6.501 6.5c3.588 0 6.499-2.911 6.499-6.5s-2.911-6.5-6.499-6.5zM12 10v4h1v1h-3v-1h1v-3h-1v-1zM11 8h1v1h-1z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/link.png b/resources/lib/oojs-ui/images/icons/link.png
deleted file mode 100644
index e51657d0..00000000
--- a/resources/lib/oojs-ui/images/icons/link.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/menu.png b/resources/lib/oojs-ui/images/icons/menu.png
deleted file mode 100644
index e53aed64..00000000
--- a/resources/lib/oojs-ui/images/icons/menu.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/menu.svg b/resources/lib/oojs-ui/images/icons/menu.svg
deleted file mode 100644
index 2d047896..00000000
--- a/resources/lib/oojs-ui/images/icons/menu.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="menu" opacity=".75">
- <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/move-ltr.png b/resources/lib/oojs-ui/images/icons/move-ltr.png
deleted file mode 100644
index 4b9f3bfd..00000000
--- a/resources/lib/oojs-ui/images/icons/move-ltr.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/move-ltr.svg b/resources/lib/oojs-ui/images/icons/move-ltr.svg
deleted file mode 100644
index eea75d8f..00000000
--- a/resources/lib/oojs-ui/images/icons/move-ltr.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="move-ltr" opacity=".75">
- <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/move-rtl.png b/resources/lib/oojs-ui/images/icons/move-rtl.png
deleted file mode 100644
index 7cd9cff5..00000000
--- a/resources/lib/oojs-ui/images/icons/move-rtl.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/move-rtl.svg b/resources/lib/oojs-ui/images/icons/move-rtl.svg
deleted file mode 100644
index 2dc5eaf6..00000000
--- a/resources/lib/oojs-ui/images/icons/move-rtl.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="move-rtl" opacity=".75">
- <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/picture.png b/resources/lib/oojs-ui/images/icons/picture.png
deleted file mode 100644
index ef9daec2..00000000
--- a/resources/lib/oojs-ui/images/icons/picture.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/picture.svg b/resources/lib/oojs-ui/images/icons/picture.svg
deleted file mode 100644
index 4862fbc5..00000000
--- a/resources/lib/oojs-ui/images/icons/picture.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="picture" opacity=".75">
- <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
- <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
- <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/remove-item.png b/resources/lib/oojs-ui/images/icons/remove-item.png
deleted file mode 100644
index 0d15c3b6..00000000
--- a/resources/lib/oojs-ui/images/icons/remove-item.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/remove-item.svg b/resources/lib/oojs-ui/images/icons/remove-item.svg
deleted file mode 100644
index 723e70fb..00000000
--- a/resources/lib/oojs-ui/images/icons/remove-item.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
- <g id="remove-item">
- <path id="minus" d="M8 11h8v2h-8z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/remove.png b/resources/lib/oojs-ui/images/icons/remove.png
deleted file mode 100644
index 8baeee0a..00000000
--- a/resources/lib/oojs-ui/images/icons/remove.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/remove.svg b/resources/lib/oojs-ui/images/icons/remove.svg
deleted file mode 100644
index 61f4d2da..00000000
--- a/resources/lib/oojs-ui/images/icons/remove.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="remove" opacity=".75">
- <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/search.png b/resources/lib/oojs-ui/images/icons/search.png
deleted file mode 100644
index 19bc1784..00000000
--- a/resources/lib/oojs-ui/images/icons/search.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/search.svg b/resources/lib/oojs-ui/images/icons/search.svg
deleted file mode 100644
index 75b38c8f..00000000
--- a/resources/lib/oojs-ui/images/icons/search.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="search" opacity=".75">
- <path id="magnifying-glass" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/settings.png b/resources/lib/oojs-ui/images/icons/settings.png
deleted file mode 100644
index 0314960c..00000000
--- a/resources/lib/oojs-ui/images/icons/settings.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/settings.svg b/resources/lib/oojs-ui/images/icons/settings.svg
deleted file mode 100644
index 6e45b60d..00000000
--- a/resources/lib/oojs-ui/images/icons/settings.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
- <g id="settings" opacity=".75">
- <path id="gear" d="M3 4h3v2h-3zM12 4h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 11h9v2h-9zM18 11h3v2h-3zM14 10h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2h-6zM15 18h6v2h-6zM11 17h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/tag.png b/resources/lib/oojs-ui/images/icons/tag.png
deleted file mode 100644
index 98028564..00000000
--- a/resources/lib/oojs-ui/images/icons/tag.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/tag.svg b/resources/lib/oojs-ui/images/icons/tag.svg
deleted file mode 100644
index 1d61b814..00000000
--- a/resources/lib/oojs-ui/images/icons/tag.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="tag" opacity=".75">
- <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/icons/window.png b/resources/lib/oojs-ui/images/icons/window.png
deleted file mode 100644
index bee8a3d9..00000000
--- a/resources/lib/oojs-ui/images/icons/window.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/icons/window.svg b/resources/lib/oojs-ui/images/icons/window.svg
deleted file mode 100644
index 44f7ba75..00000000
--- a/resources/lib/oojs-ui/images/icons/window.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="window" opacity=".75">
- <path id="title" d="M7 10h10v1h-10z"/>
- <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/alert.png b/resources/lib/oojs-ui/images/indicators/alert.png
deleted file mode 100644
index dc41e497..00000000
--- a/resources/lib/oojs-ui/images/indicators/alert.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/indicators/alert.svg b/resources/lib/oojs-ui/images/indicators/alert.svg
deleted file mode 100644
index e2e49a87..00000000
--- a/resources/lib/oojs-ui/images/indicators/alert.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="alert" opacity=".75">
- <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-down.png b/resources/lib/oojs-ui/images/indicators/arrow-down.png
deleted file mode 100644
index edbc84f7..00000000
--- a/resources/lib/oojs-ui/images/indicators/arrow-down.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-down.svg b/resources/lib/oojs-ui/images/indicators/arrow-down.svg
deleted file mode 100644
index 55670deb..00000000
--- a/resources/lib/oojs-ui/images/indicators/arrow-down.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="down" opacity=".75">
- <path id="arrow" d="M2 3l3.5 6 3.5-6z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/images/indicators/arrow-ltr.png
deleted file mode 100644
index 8a85a05b..00000000
--- a/resources/lib/oojs-ui/images/indicators/arrow-ltr.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-ltr.svg b/resources/lib/oojs-ui/images/indicators/arrow-ltr.svg
deleted file mode 100644
index 5092d889..00000000
--- a/resources/lib/oojs-ui/images/indicators/arrow-ltr.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="ltr" opacity=".75">
- <path id="arrow" d="M3 9v-7l6 3.5z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/images/indicators/arrow-rtl.png
deleted file mode 100644
index 07cc8885..00000000
--- a/resources/lib/oojs-ui/images/indicators/arrow-rtl.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-rtl.svg b/resources/lib/oojs-ui/images/indicators/arrow-rtl.svg
deleted file mode 100644
index 8d39de82..00000000
--- a/resources/lib/oojs-ui/images/indicators/arrow-rtl.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="rtl" opacity=".75">
- <path id="arrow" d="M3 5.5l6 3.5v-7z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-up.png b/resources/lib/oojs-ui/images/indicators/arrow-up.png
deleted file mode 100644
index f25858d7..00000000
--- a/resources/lib/oojs-ui/images/indicators/arrow-up.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/indicators/arrow-up.svg b/resources/lib/oojs-ui/images/indicators/arrow-up.svg
deleted file mode 100644
index b9d725e4..00000000
--- a/resources/lib/oojs-ui/images/indicators/arrow-up.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="up" opacity=".75">
- <path id="arrow" d="M5.5 2l-3.5 6h7z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/required.png b/resources/lib/oojs-ui/images/indicators/required.png
deleted file mode 100644
index bca07c60..00000000
--- a/resources/lib/oojs-ui/images/indicators/required.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/images/indicators/required.svg b/resources/lib/oojs-ui/images/indicators/required.svg
deleted file mode 100644
index 45035f4e..00000000
--- a/resources/lib/oojs-ui/images/indicators/required.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="required" opacity=".75">
- <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
- </g>
-</svg>
diff --git a/resources/lib/oojs-ui/oojs-ui-apex.css b/resources/lib/oojs-ui/oojs-ui-apex.css
deleted file mode 100644
index fdf41ae6..00000000
--- a/resources/lib/oojs-ui/oojs-ui-apex.css
+++ /dev/null
@@ -1,1945 +0,0 @@
-/*!
- * OOjs UI v0.1.0-pre (f2c3f12959)
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-09-18T23:22:20Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-/*
- * Base styles.
- *
- * Themes should include this file after defining their variables and mixins.
- */
-/* @noflip */
-.oo-ui-rtl {
- direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
- direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
- cursor: pointer;
- display: inline-block;
- vertical-align: middle;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
- cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
- display: inline-block;
- position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- display: inline-block;
- vertical-align: top;
- text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
- color: #333333;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-left: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- margin-right: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- opacity: 0.8;
- width: 1.9em;
- height: 1.9em;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
- /*.oo-ui-transition(opacity 200ms);*/
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon {
- opacity: 1;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
- color: #000000;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #333333;
- margin-left: 0.25em;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #087ecc;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #76ab36;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #d45353;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #cccccc;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- margin: 0.1em 0;
- padding: 0.2em 0.8em;
- border-radius: 0.3em;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
- border: 1px #c9c9c9 solid;
- -webkit-transition: border-color 100ms ease-in-out;
- -moz-transition: border-color 100ms ease-in-out;
- -ms-transition: border-color 100ms ease-in-out;
- -o-transition: border-color 100ms ease-in-out;
- transition: border-color 100ms ease-in-out;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
- border-color: #aaaaaa;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- line-height: 1.9em;
-}
-.oo-ui-buttonElement-framed.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
- color: black;
- border-color: #c9c9c9;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-left: -0.5em;
- margin-right: -0.5em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-left: -0.5em;
- margin-right: 0.3em;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button {
- border: solid 1px #a6cee1;
- background: #cde7f4;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
- background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
- border-color: #9dc2d4;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- border: solid 1px #a6cee1;
- background: #cde7f4;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
- background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
- border: solid 1px #b8d892;
- background: #daf0be;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
- background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
- border-color: #adcb89;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- border: solid 1px #b8d892;
- background: #daf0be;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
- background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
- color: #d45353;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- opacity: 0.5;
- box-shadow: none;
- color: #333333;
- background: #eeeeee;
- border-color: #cccccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:focus,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:focus,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:focus {
- border-color: #cccccc;
- box-shadow: none;
-}
-.oo-ui-clippableElement-clippable {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
- padding: 2em;
-}
-.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 3em;
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- padding: 1.5em;
-}
-.oo-ui-bookletLayout-outlinePanel {
- border-right: solid 1px #dddddd;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-fieldLayout {
- margin-bottom: 1em;
-}
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
- content: " ";
- display: table;
-}
-.oo-ui-fieldLayout:after {
- clear: both;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- display: block;
- float: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- display: block;
- float: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- text-align: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
- display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
- z-index: 1;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
- float: right;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
- padding: 0.5em 0.75em;
-}
-.oo-ui-fieldLayout:last-child {
- margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- padding-top: 0.5em;
- margin-right: 5%;
- width: 35%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- width: 60%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
- padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
- color: #cccccc;
-}
-.oo-ui-fieldsetLayout {
- position: relative;
- margin: 0;
- padding: 0;
- border: none;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
- display: block;
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
- display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
- margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
- font-size: 1.5em;
- margin-bottom: 0.5em;
- padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
- padding-left: 1.75em;
- line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
- left: 0;
- top: 0.25em;
- width: 2em;
- height: 2em;
-}
-.oo-ui-gridLayout {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-.oo-ui-panelLayout {
- position: relative;
-}
-.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-.oo-ui-panelLayout-padded {
- padding: 1.25em;
-}
-.oo-ui-stackLayout > .oo-ui-panelLayout {
- display: none;
-}
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
- display: block;
- position: relative;
-}
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
- z-index: 4;
-}
-.oo-ui-popupTool .oo-ui-popupWidget {
- margin-left: 1.25em;
- font-size: 0.8em;
-}
-.oo-ui-toolGroup {
- display: inline-block;
- vertical-align: middle;
- margin: 0.3em;
- border-radius: 0.25em;
- border: solid 1px transparent;
- -webkit-transition: border-color 300ms ease-in-out;
- -moz-transition: border-color 300ms ease-in-out;
- -ms-transition: border-color 300ms ease-in-out;
- -o-transition: border-color 300ms ease-in-out;
- transition: border-color 300ms ease-in-out;
-}
-.oo-ui-toolGroup-empty {
- display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #000000;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-label {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool {
- display: inline-block;
- position: relative;
- vertical-align: top;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
- display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
- display: none;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
- cursor: pointer;
-}
-.oo-ui-barToolGroup .oo-ui-tool {
- margin: -1px 0 -1px -1px;
- border: solid 1px transparent;
-}
-.oo-ui-barToolGroup .oo-ui-tool:first-child {
- border-top-left-radius: 0.25em;
- border-bottom-left-radius: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool:last-child {
- margin-right: -1px;
- border-top-right-radius: 0.25em;
- border-bottom-right-radius: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
- height: 1.5em;
- padding: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- height: 1.5em;
- width: 1.5em;
- opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
- border-color: rgba(0, 0, 0, 0.2);
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
- border-left-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 1;
-}
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-popupToolGroup {
- position: relative;
- height: 2em;
- min-width: 2.5em;
-}
-.oo-ui-popupToolGroup-handle {
- display: block;
- cursor: pointer;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
- cursor: default;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- display: none;
- position: absolute;
- z-index: 4;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
- display: block;
-}
-.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
- left: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
- right: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
- display: none;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
- min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- top: 0;
- width: 2em;
- height: 2em;
- opacity: 0.8;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
- right: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- left: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 1em;
-}
-.oo-ui-popupToolGroup-header {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 0.6em;
- font-weight: bold;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-}
-.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- margin-left: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- margin-right: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- top: 2em;
- margin: 0 -1px;
- border: solid 1px #cccccc;
- background-color: white;
- box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- height: 2em;
- width: 2em;
- margin-right: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- line-height: 2em;
- font-size: 0.8em;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em;
-}
-.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-listToolGroup .oo-ui-tool {
- border: solid 1px transparent;
- margin: -1px 0;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
- padding-right: 0.5em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
- border-color: rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
- border-top-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.8;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 1;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #cccccc;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
- color: #cccccc;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-menuToolGroup {
- border-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
- display: block;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
- min-width: 8em;
-}
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em 0 0.25em 0;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
- border-color: rgba(0, 0, 0, 0.25);
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- padding: 0 1em 0 0.25em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
- background-color: #e1f3ff;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #cccccc;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled {
- color: #cccccc;
- border-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-toolbar {
- clear: both;
-}
-.oo-ui-toolbar-bar {
- line-height: 1em;
-}
-.oo-ui-toolbar-actions {
- float: right;
-}
-.oo-ui-toolbar-tools {
- display: inline;
-}
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
- -webkit-touch-callout: default;
- -webkit-user-select: all;
- -moz-user-select: all;
- -ms-user-select: all;
- user-select: all;
-}
-.oo-ui-toolbar-shadow {
- background-position: left top;
- background-repeat: repeat-x;
- position: absolute;
- width: 100%;
- pointer-events: none;
-}
-.oo-ui-toolbar-bar {
- border-bottom: solid 1px #cccccc;
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
- border: none;
- background: none;
-}
-.oo-ui-toolbar-shadow {
- background-image: /* @embed */ url(images/toolbar-shadow.png);
- bottom: -9px;
- height: 9px;
- opacity: 0.125;
- -webkit-transition: opacity 500ms ease-in-out;
- -moz-transition: opacity 500ms ease-in-out;
- -ms-transition: opacity 500ms ease-in-out;
- -o-transition: opacity 500ms ease-in-out;
- transition: opacity 500ms ease-in-out;
-}
-.oo-ui-optionWidget {
- position: relative;
- display: block;
- cursor: pointer;
- padding: 0.5em 2em 0.5em 3em;
- border: none;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
- display: block;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-.oo-ui-optionWidget-highlighted {
- background-color: #e1f3ff;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
- line-height: 1.5em;
-}
-.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
- background-color: #a7dcff;
-}
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed {
- background-color: #a7dcff;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- color: #cccccc;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- position: absolute;
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- top: 50%;
- width: 2em;
- height: 2em;
- margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
- left: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- right: 0.5em;
-}
-.oo-ui-buttonSelectWidget {
- display: inline-block;
- white-space: nowrap;
- border-radius: 0.3em;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- border-radius: 0;
- margin-left: -1px;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
- border-bottom-left-radius: 0.3em;
- border-top-left-radius: 0.3em;
- margin-left: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
-}
-.oo-ui-buttonOptionWidget {
- display: inline-block;
- padding: 0;
- background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- position: static;
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- height: 1.9em;
- margin-top: 0;
-}
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
- background-color: transparent;
-}
-.oo-ui-labelWidget {
- display: inline-block;
- padding: 0.5em 0;
-}
-.oo-ui-iconWidget {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- opacity: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-.oo-ui-indicatorWidget {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- opacity: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-.oo-ui-buttonWidget {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
- display: inline-block;
- white-space: nowrap;
- border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- border-radius: 0;
- margin-bottom: -1px;
- margin-left: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
- border-bottom-left-radius: 0.3em;
- border-top-left-radius: 0.3em;
- margin-left: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
-}
-.oo-ui-toggleSwitchWidget {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- overflow: hidden;
- cursor: pointer;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transform: translateZ(0px);
- -moz-transform: translateZ(0px);
- -ms-transform: translateZ(0px);
- -o-transform: translateZ(0px);
- transform: translateZ(0px);
- height: 2em;
- width: 4em;
- border-radius: 1em;
- box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd;
- border: solid 1px #cccccc;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-toggleSwitchWidget-grip {
- position: absolute;
- display: block;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- position: absolute;
- top: 0;
- bottom: 0;
- right: 0;
- left: 0;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: none;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- opacity: 0.5;
-}
-.oo-ui-toggleSwitchWidget-grip {
- top: 0.25em;
- left: 0.25em;
- width: 1.5em;
- height: 1.5em;
- margin-top: -1px;
- border-radius: 1em;
- box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
- border: 1px #c9c9c9 solid;
- -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
- border-color: #aaaaaa;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- border-radius: 1em;
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
- -webkit-transition: opacity 200ms ease-in-out;
- -moz-transition: opacity 200ms ease-in-out;
- -ms-transition: opacity 200ms ease-in-out;
- -o-transition: opacity 200ms ease-in-out;
- transition: opacity 200ms ease-in-out;
- background: #cde7f4;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
- background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
- opacity: 1;
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
- left: 2.25em;
- margin-left: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: block;
- opacity: 0;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
- left: 0.25em;
- margin-left: 0;
-}
-.oo-ui-actionWidget.oo-ui-pendingElement-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-popupWidget-popup {
- position: absolute;
- overflow: hidden;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchor {
- display: none;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- display: block;
- position: absolute;
- background-repeat: no-repeat;
-}
-.oo-ui-popupWidget-head {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- float: right;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
- float: left;
- cursor: default;
-}
-.oo-ui-popupWidget-body {
- clear: both;
- overflow: hidden;
-}
-.oo-ui-popupWidget-popup {
- border: solid 1px #cccccc;
- border-radius: 0.25em;
- background-color: #ffffff;
- box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
- margin-top: 7px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- width: 15px;
- height: 8px;
- margin-left: -7px;
- background-image: /* @embed */ url(images/anchor.svg);
-}
-.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
- -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
- -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
- -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
- -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
- transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-}
-.oo-ui-popupWidget-head {
- height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
- margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body {
- box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-popupWidget-body-padded {
- padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
- position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
- position: absolute;
- left: 1em;
- cursor: auto;
-}
-.oo-ui-textInputWidget {
- position: relative;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- width: 20em;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- display: inline-block;
- width: 100%;
- resize: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
- position: absolute;
- top: 0;
- height: 100%;
- background-repeat: no-repeat;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
- left: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
- right: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- padding: 0.5em;
- font-size: 1em;
- font-family: sans-serif;
- background-color: #ffffff;
- border: solid 1px #cccccc;
- box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd;
- border-radius: 0.25em;
- -webkit-transition: border-color 200ms, box-shadow 200ms;
- -moz-transition: border-color 200ms, box-shadow 200ms;
- -ms-transition: border-color 200ms, box-shadow 200ms;
- -o-transition: border-color 200ms, box-shadow 200ms;
- transition: border-color 200ms, box-shadow 200ms;
-}
-.oo-ui-textInputWidget-decorated input,
-.oo-ui-textInputWidget-decorated textarea {
- padding-left: 2em;
-}
-.oo-ui-textInputWidget-icon {
- width: 2em;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
- outline: none;
- border-color: #a7dcff;
- box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
-}
-.oo-ui-textInputWidget input[readonly],
-.oo-ui-textInputWidget textarea[readonly] {
- color: #777777;
- text-shadow: 0 1px 1px #ffffff;
-}
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
- background-color: transparent;
-}
-.oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
- color: #cccccc;
- text-shadow: 0 1px 1px #ffffff;
- border-color: #dddddd;
- background-color: #f3f3f3;
-}
-.oo-ui-textInputWidget .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget .oo-ui-indicatorElement-indicator {
- opacity: 0.8;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement input,
-.oo-ui-textInputWidget.oo-ui-iconElement textarea {
- padding-left: 2em;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- width: 2em;
- background-position: right center;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement input,
-.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
- padding-right: 1.5em;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- width: 1.5em;
- background-position: left center;
-}
-.oo-ui-menuWidget {
- position: absolute;
- background: #ffffff;
- margin-top: -1px;
- border: solid 1px #cccccc;
- border-radius: 0 0 0.25em 0.25em;
- box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuWidget input {
- position: absolute;
- width: 0;
- height: 0;
- overflow: hidden;
- opacity: 0;
-}
-.oo-ui-menuItemWidget {
- position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
- display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
- display: block;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
- background-color: #e1f3ff;
-}
-.oo-ui-menuSectionItemWidget {
- cursor: default;
- padding: 0.33em 0.75em;
- color: #888888;
-}
-.oo-ui-inlineMenuWidget {
- position: relative;
- display: inline-block;
- margin: 0.25em 0;
- min-width: 20em;
-}
-.oo-ui-inlineMenuWidget-handle {
- width: 100%;
- display: inline-block;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
- z-index: 1;
- width: 100%;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- cursor: default;
-}
-.oo-ui-inlineMenuWidget-handle {
- height: 2.5em;
- border: solid 1px rgba(0, 0, 0, 0.1);
- border-radius: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
- right: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- left: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- line-height: 2.5em;
- margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- top: 0;
- width: 2.5em;
- height: 2.5em;
- opacity: 0.8;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- color: #cccccc;
- text-shadow: 0 1px 1px #ffffff;
- border-color: #dddddd;
- background-color: #f3f3f3;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
- opacity: 0.2;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- margin-left: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- margin-right: 2em;
-}
-.oo-ui-outlineItemWidget {
- position: relative;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- font-size: 1.1em;
- padding: 0.75em;
-}
-.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
- padding-right: 1.5em;
-}
-.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- opacity: 0.5;
-}
-.oo-ui-outlineItemWidget-level-0 {
- padding-left: 3.5em;
-}
-.oo-ui-outlineItemWidget-level-0 .oo-ui-iconElement-icon {
- left: 1em;
-}
-.oo-ui-outlineItemWidget-level-1 {
- padding-left: 5em;
-}
-.oo-ui-outlineItemWidget-level-1 .oo-ui-iconElement-icon {
- left: 2.5em;
-}
-.oo-ui-outlineItemWidget-level-2 {
- padding-left: 6.5em;
-}
-.oo-ui-outlineItemWidget-level-2 .oo-ui-iconElement-icon {
- left: 4em;
-}
-.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
- background-color: #a7dcff;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-important {
- font-weight: bold;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-placeholder {
- font-style: italic;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
- opacity: 0.5;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
- color: #777777;
-}
-.oo-ui-outlineControlsWidget {
- height: 3em;
- background-color: #ffffff;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- float: left;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
- float: left;
- background-position: right center;
- background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
- float: left;
-}
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
- float: left;
-}
-.oo-ui-outlineControlsWidget-movers {
- float: right;
-}
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
- float: right;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- height: 2em;
- margin: 0.5em;
- padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
- width: 1.5em;
- height: 2em;
- margin: 0.5em 0 0.5em 0.5em;
- opacity: 0.2;
-}
-.oo-ui-outlineControlsWidget-items {
- margin-left: 0;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
- z-index: 1;
- min-width: 20em;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget-handle {
- border: solid 1px rgba(0, 0, 0, 0.1);
- border-radius: 0.25em;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget-handle:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget-empty .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- cursor: default;
- opacity: 0.2;
-}
-.oo-ui-searchWidget-query {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- width: 100%;
-}
-.oo-ui-searchWidget-results {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
- height: 4em;
- padding: 0 1em;
- box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
- top: 4em;
- padding: 1em;
- line-height: 0;
-}
-.oo-ui-window {
- line-height: 1em;
- /* Content div takes focus when opened, so hide outline */
-}
-.oo-ui-window-frame {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
- margin: 0;
- padding: 0;
-}
-.oo-ui-window-content:focus {
- outline: none;
-}
-.oo-ui-window-head,
-.oo-ui-window-foot {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-window-body {
- margin: 0;
- padding: 0;
- background: none;
-}
-.oo-ui-window-overlay {
- position: absolute;
- top: 0;
- left: 0;
-}
-.oo-ui-window-isolated {
- background-color: transparent;
- background-image: none;
- font-family: sans-serif;
- font-size: 0.8em;
-}
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
- position: absolute;
- left: 0;
- right: 0;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-dialog-content > .oo-ui-window-head {
- z-index: 1;
- top: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-head.oo-ui-pendingElement-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
- z-index: 2;
- top: 0;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-foot {
- z-index: 1;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-overlay {
- z-index: 3;
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
- box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-messageDialog-actions-horizontal {
- display: table;
- table-layout: fixed;
- width: 100%;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- display: table-cell;
- width: 1%;
-}
-.oo-ui-messageDialog-actions-vertical {
- display: block;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
- position: relative;
- text-align: center;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
- display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
- position: relative;
- top: auto;
- bottom: auto;
- display: inline;
- white-space: nowrap;
-}
-.oo-ui-messageDialog-content .oo-ui-window-body {
- box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
-}
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
- display: block;
- text-align: center;
- padding-top: 0.5em;
-}
-.oo-ui-messageDialog-title {
- font-size: 1.5em;
- line-height: 1em;
- color: #000000;
-}
-.oo-ui-messageDialog-message {
- font-size: 0.9em;
- line-height: 1.25em;
- color: #666666;
-}
-.oo-ui-messageDialog-message-verbose {
- font-size: 1.1em;
- line-height: 1.5em;
- text-align: left;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- border-right: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
- border-right-width: 0;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- border-bottom: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
- border-bottom-width: 0;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
- text-align: center;
- line-height: 3.4em;
- padding: 0 2em;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
- font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.oo-ui-processDialog-title {
- display: inline;
- padding: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
- white-space: nowrap;
-}
-.oo-ui-processDialog-actions-safe,
-.oo-ui-processDialog-actions-primary {
- position: absolute;
- top: 0;
- bottom: 0;
-}
-.oo-ui-processDialog-actions-safe {
- left: 0;
-}
-.oo-ui-processDialog-actions-primary {
- right: 0;
-}
-.oo-ui-processDialog-errors {
- display: none;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- z-index: 2;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.oo-ui-processDialog-content .oo-ui-window-head {
- height: 3.4em;
-}
-.oo-ui-processDialog-content .oo-ui-window-body {
- top: 3.4em;
- box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
-}
-.oo-ui-processDialog-navigation {
- position: relative;
- height: 3.4em;
- padding: 0 1em;
-}
-.oo-ui-processDialog-location {
- padding: 0.75em 0;
- height: 1.9em;
- cursor: default;
- text-align: center;
-}
-.oo-ui-processDialog-title {
- font-weight: bold;
- line-height: 1.9em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
- padding-top: 0.75em;
- padding-bottom: 0.75em;
- min-width: 1.9em;
- min-height: 1.9em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
- line-height: 1.9em;
- padding: 0 1em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
- position: absolute;
- margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
- margin: 0.75em 0 0.75em 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- padding: 0;
- vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
- margin: 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- /* Adjust for border so text aligns with title */
- margin: -1px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
- font-weight: bold;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- left: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
- padding-left: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- right: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
- padding-right: 2.25em;
-}
-.oo-ui-processDialog > .oo-ui-window-frame {
- min-height: 5em;
-}
-.oo-ui-processDialog-errors {
- background-color: rgba(255, 255, 255, 0.9);
- padding: 3em 3em 1.5em 3em;
- text-align: center;
-}
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
- margin: 2em 1em 2em 1em;
-}
-.oo-ui-processDialog-errors-title {
- font-size: 1.5em;
- color: #000000;
- margin-bottom: 2em;
-}
-.oo-ui-processDialog-error {
- text-align: left;
- margin: 1em;
- padding: 1em;
- border: solid 1px #ff9e9e;
- background-color: #fff7f7;
- border-radius: 0.25em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- position: fixed;
- width: 0;
- height: 0;
- overflow: hidden;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
- width: auto;
- height: auto;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
- position: absolute;
- right: 0;
- left: 0;
- margin: auto;
- overflow: hidden;
- max-width: 100%;
- max-height: 100%;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
-}
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
- width: 100%;
- height: 100%;
- top: 0;
- bottom: 0;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- background-color: rgba(255, 255, 255, 0.5);
- opacity: 0;
- -webkit-transition: opacity 250ms ease-in-out;
- -moz-transition: opacity 250ms ease-in-out;
- -ms-transition: opacity 250ms ease-in-out;
- -o-transition: opacity 250ms ease-in-out;
- transition: opacity 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
- top: 1em;
- bottom: 1em;
- background-color: #ffffff;
- -webkit-transform: scale(0.5);
- -moz-transform: scale(0.5);
- -ms-transform: scale(0.5);
- -o-transform: scale(0.5);
- transform: scale(0.5);
- -webkit-transition: all 250ms ease-in-out;
- -moz-transition: all 250ms ease-in-out;
- -ms-transition: all 250ms ease-in-out;
- -o-transition: all 250ms ease-in-out;
- transition: all 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- opacity: 1;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- -webkit-transform: scale(1);
- -moz-transform: scale(1);
- -ms-transform: scale(1);
- -o-transform: scale(1);
- transform: scale(1);
-}
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
- border: solid 1px #cccccc;
- border-radius: 0.5em;
- box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-apex.rtl.css b/resources/lib/oojs-ui/oojs-ui-apex.rtl.css
deleted file mode 100644
index 7dd7b61b..00000000
--- a/resources/lib/oojs-ui/oojs-ui-apex.rtl.css
+++ /dev/null
@@ -1,1929 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-09-11T19:39:50Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-/*
- * Base styles.
- *
- * Themes should include this file after defining their variables and mixins.
- */
-/* @noflip */
-.oo-ui-rtl {
- direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
- direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
- cursor: pointer;
- display: inline-block;
- vertical-align: middle;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
- cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
- display: inline-block;
- position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- display: inline-block;
- vertical-align: top;
- text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
- color: #333;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-right: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- margin-left: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- opacity: 0.8;
- width: 1.9em;
- height: 1.9em;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
- /*.oo-ui-transition(opacity 200ms);*/
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon {
- opacity: 1;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
- color: #000;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #333;
- margin-right: 0.25em;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #087ecc;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #76ab36;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #d45353;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- color: #ccc;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- margin: 0.1em 0;
- padding: 0.2em 0.8em;
- border-radius: 0.3em;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
- border: 1px #c9c9c9 solid;
- -webkit-transition: border-color 100ms ease-in-out;
- -moz-transition: border-color 100ms ease-in-out;
- -ms-transition: border-color 100ms ease-in-out;
- -o-transition: border-color 100ms ease-in-out;
- transition: border-color 100ms ease-in-out;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
- border-color: #aaa;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- line-height: 1.9em;
-}
-.oo-ui-buttonElement-framed.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
- color: black;
- border-color: #c9c9c9;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-right: -0.5em;
- margin-left: -0.5em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-right: -0.5em;
- margin-left: 0.3em;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button {
- border: solid 1px #a6cee1;
- background: #cde7f4;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
- background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
- border-color: #9dc2d4;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- border: solid 1px #a6cee1;
- background: #cde7f4;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
- background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
- border: solid 1px #b8d892;
- background: #daf0be;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
- background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
- border-color: #adcb89;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- border: solid 1px #b8d892;
- background: #daf0be;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
- background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
- color: #d45353;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- opacity: 0.5;
- box-shadow: none;
- color: #333;
- background: #eee;
- border-color: #ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:focus,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:focus,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:focus {
- border-color: #ccc;
- box-shadow: none;
-}
-.oo-ui-clippableElement-clippable {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
- padding: 2em;
-}
-.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- bottom: 3em;
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- position: absolute;
- bottom: 0;
- right: 0;
- left: 0;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- padding: 1.5em;
-}
-.oo-ui-bookletLayout-outlinePanel {
- border-left: solid 1px #ddd;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-fieldLayout {
- margin-bottom: 1em;
-}
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
- content: " ";
- display: table;
-}
-.oo-ui-fieldLayout:after {
- clear: both;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- display: block;
- float: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- display: block;
- float: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- text-align: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
- display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
- z-index: 1;
-}
-.oo-ui-fieldLayout:last-child {
- margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- padding-top: 0.5em;
- margin-left: 5%;
- width: 35%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- width: 60%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
- padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
- color: #ccc;
-}
-.oo-ui-fieldsetLayout {
- position: relative;
- margin: 0;
- padding: 0;
- border: none;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
- display: block;
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
- display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
- margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
- font-size: 1.5em;
- margin-bottom: 0.5em;
- padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
- padding-right: 1.75em;
- line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
- right: 0;
- top: 0.25em;
- width: 2em;
- height: 2em;
-}
-.oo-ui-gridLayout {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- bottom: 0;
-}
-.oo-ui-panelLayout {
- position: relative;
-}
-.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- bottom: 0;
-}
-.oo-ui-panelLayout-padded {
- padding: 1.25em;
-}
-.oo-ui-stackLayout > .oo-ui-panelLayout {
- display: none;
-}
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
- display: block;
- position: relative;
-}
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
- z-index: 4;
-}
-.oo-ui-popupTool .oo-ui-popupWidget {
- margin-right: 1.25em;
- font-size: 0.8em;
-}
-.oo-ui-toolGroup {
- display: inline-block;
- vertical-align: middle;
- margin: 0.3em;
- border-radius: 0.25em;
- border: solid 1px transparent;
- -webkit-transition: border-color 300ms ease-in-out;
- -moz-transition: border-color 300ms ease-in-out;
- -ms-transition: border-color 300ms ease-in-out;
- -o-transition: border-color 300ms ease-in-out;
- transition: border-color 300ms ease-in-out;
-}
-.oo-ui-toolGroup-empty {
- display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #000;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-label {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool {
- display: inline-block;
- position: relative;
- vertical-align: top;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
- display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
- display: none;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
- cursor: pointer;
-}
-.oo-ui-barToolGroup .oo-ui-tool {
- margin: -1px -1px -1px 0;
- border: solid 1px transparent;
-}
-.oo-ui-barToolGroup .oo-ui-tool:first-child {
- border-top-right-radius: 0.25em;
- border-bottom-right-radius: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool:last-child {
- margin-left: -1px;
- border-top-left-radius: 0.25em;
- border-bottom-left-radius: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
- height: 1.5em;
- padding: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- height: 1.5em;
- width: 1.5em;
- opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
- border-color: rgba(0, 0, 0, 0.2);
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
- border-right-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 1;
-}
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-popupToolGroup {
- position: relative;
- height: 2em;
- min-width: 2.5em;
-}
-.oo-ui-popupToolGroup-handle {
- display: block;
- cursor: pointer;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
- cursor: default;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- display: none;
- position: absolute;
- z-index: 4;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
- display: block;
-}
-.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
- right: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
- left: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
- display: none;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
- min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- top: 0;
- width: 2em;
- height: 2em;
- opacity: 0.8;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
- left: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- right: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 1em;
-}
-.oo-ui-popupToolGroup-header {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 0.6em;
- font-weight: bold;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-}
-.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- margin-right: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- margin-left: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- top: 2em;
- margin: 0 -1px;
- border: solid 1px #ccc;
- background-color: white;
- box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- height: 2em;
- width: 2em;
- margin-left: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- line-height: 2em;
- font-size: 0.8em;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em;
-}
-.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-listToolGroup .oo-ui-tool {
- border: solid 1px transparent;
- margin: -1px 0;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
- padding-left: 0.5em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
- border-color: rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
- border-top-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.8;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 1;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #ccc;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
- color: #ccc;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-menuToolGroup {
- border-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
- display: block;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
- min-width: 8em;
-}
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em 0 0.25em 0;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
- border-color: rgba(0, 0, 0, 0.25);
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- padding: 0 0.25em 0 1em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
- background-color: #e1f3ff;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #ccc;
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled {
- color: #ccc;
- border-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
- opacity: 0.2;
-}
-.oo-ui-toolbar {
- clear: both;
-}
-.oo-ui-toolbar-bar {
- line-height: 1em;
-}
-.oo-ui-toolbar-actions {
- float: left;
-}
-.oo-ui-toolbar-tools {
- display: inline;
-}
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
- -webkit-touch-callout: default;
- -webkit-user-select: all;
- -moz-user-select: all;
- -ms-user-select: all;
- user-select: all;
-}
-.oo-ui-toolbar-shadow {
- background-position: right top;
- background-repeat: repeat-x;
- position: absolute;
- width: 100%;
- pointer-events: none;
-}
-.oo-ui-toolbar-bar {
- border-bottom: solid 1px #ccc;
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
- border: none;
- background: none;
-}
-.oo-ui-toolbar-shadow {
- background-image: /* @embed */ url(images/toolbar-shadow.png);
- bottom: -9px;
- height: 9px;
- opacity: 0.125;
- -webkit-transition: opacity 500ms ease-in-out;
- -moz-transition: opacity 500ms ease-in-out;
- -ms-transition: opacity 500ms ease-in-out;
- -o-transition: opacity 500ms ease-in-out;
- transition: opacity 500ms ease-in-out;
-}
-.oo-ui-optionWidget {
- position: relative;
- display: block;
- cursor: pointer;
- padding: 0.5em 3em 0.5em 2em;
- border: none;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
- display: block;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-.oo-ui-optionWidget-highlighted {
- background-color: #e1f3ff;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
- line-height: 1.5em;
-}
-.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
- background-color: #a7dcff;
-}
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed {
- background-color: #a7dcff;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- color: #ccc;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- position: absolute;
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- top: 50%;
- width: 2em;
- height: 2em;
- margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
- right: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- left: 0.5em;
-}
-.oo-ui-buttonSelectWidget {
- display: inline-block;
- white-space: nowrap;
- border-radius: 0.3em;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- border-radius: 0;
- margin-right: -1px;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
- margin-right: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
- border-bottom-left-radius: 0.3em;
- border-top-left-radius: 0.3em;
-}
-.oo-ui-buttonOptionWidget {
- display: inline-block;
- padding: 0;
- background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- position: static;
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- height: 1.9em;
- margin-top: 0;
-}
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
- background-color: transparent;
-}
-.oo-ui-labelWidget {
- display: inline-block;
- padding: 0.5em 0;
-}
-.oo-ui-iconWidget {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- opacity: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-.oo-ui-indicatorWidget {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- opacity: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-.oo-ui-buttonWidget {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
- display: inline-block;
- white-space: nowrap;
- border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- border-radius: 0;
- margin-bottom: -1px;
- margin-right: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
- margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
- border-bottom-left-radius: 0.3em;
- border-top-left-radius: 0.3em;
-}
-.oo-ui-toggleSwitchWidget {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- overflow: hidden;
- cursor: pointer;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transform: translateZ(0px);
- -moz-transform: translateZ(0px);
- -ms-transform: translateZ(0px);
- -o-transform: translateZ(0px);
- transform: translateZ(0px);
- height: 2em;
- width: 4em;
- border-radius: 1em;
- box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
- border: solid 1px #ccc;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-toggleSwitchWidget-grip {
- position: absolute;
- display: block;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: none;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- opacity: 0.5;
-}
-.oo-ui-toggleSwitchWidget-grip {
- top: 0.25em;
- right: 0.25em;
- width: 1.5em;
- height: 1.5em;
- margin-top: -1px;
- border-radius: 1em;
- box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
- border: 1px #c9c9c9 solid;
- -webkit-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -moz-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -ms-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -o-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
- border-color: #aaa;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- border-radius: 1em;
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
- -webkit-transition: opacity 200ms ease-in-out;
- -moz-transition: opacity 200ms ease-in-out;
- -ms-transition: opacity 200ms ease-in-out;
- -o-transition: opacity 200ms ease-in-out;
- transition: opacity 200ms ease-in-out;
- background: #cde7f4;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
- background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
- opacity: 1;
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
- right: 2.25em;
- margin-right: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: block;
- opacity: 0;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
- right: 0.25em;
- margin-right: 0;
-}
-.oo-ui-popupWidget-popup {
- position: absolute;
- overflow: hidden;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchor {
- display: none;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- display: block;
- position: absolute;
- background-repeat: no-repeat;
-}
-.oo-ui-popupWidget-head {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- float: left;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
- float: right;
- cursor: default;
-}
-.oo-ui-popupWidget-body {
- clear: both;
- overflow: hidden;
-}
-.oo-ui-popupWidget-popup {
- border: solid 1px #ccc;
- border-radius: 0.25em;
- background-color: #fff;
- box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
- margin-top: 7px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- width: 15px;
- height: 8px;
- margin-right: -7px;
- background-image: /* @embed */ url(images/anchor.svg);
-}
-.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
- -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
- -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
- -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
- -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
- transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
-}
-.oo-ui-popupWidget-head {
- height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
- margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body {
- box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-popupWidget-body-padded {
- padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
- position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
- position: absolute;
- right: 1em;
- cursor: auto;
-}
-.oo-ui-textInputWidget {
- position: relative;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- width: 20em;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- display: inline-block;
- width: 100%;
- resize: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
- position: absolute;
- top: 0;
- height: 100%;
- background-repeat: no-repeat;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
- right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
- left: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- padding: 0.5em;
- font-size: 1em;
- font-family: sans-serif;
- background-color: #fff;
- border: solid 1px #ccc;
- box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
- border-radius: 0.25em;
- -webkit-transition: border-color 200ms, box-shadow 200ms;
- -moz-transition: border-color 200ms, box-shadow 200ms;
- -ms-transition: border-color 200ms, box-shadow 200ms;
- -o-transition: border-color 200ms, box-shadow 200ms;
- transition: border-color 200ms, box-shadow 200ms;
-}
-.oo-ui-textInputWidget-decorated input,
-.oo-ui-textInputWidget-decorated textarea {
- padding-right: 2em;
-}
-.oo-ui-textInputWidget-icon {
- width: 2em;
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
- outline: none;
- border-color: #a7dcff;
- box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
-}
-.oo-ui-textInputWidget input[readonly],
-.oo-ui-textInputWidget textarea[readonly] {
- color: #777;
- text-shadow: 0 1px 1px #fff;
-}
-.oo-ui-textInputWidget-pending input,
-.oo-ui-textInputWidget-pending textarea {
- background-color: transparent;
-}
-.oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
- color: #ccc;
- text-shadow: 0 1px 1px #fff;
- border-color: #ddd;
- background-color: #f3f3f3;
-}
-.oo-ui-textInputWidget .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget .oo-ui-indicatorElement-indicator {
- opacity: 0.8;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement input,
-.oo-ui-textInputWidget.oo-ui-iconElement textarea {
- padding-right: 2em;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- width: 2em;
- background-position: left center;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement input,
-.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
- padding-left: 1.5em;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- width: 1.5em;
- background-position: right center;
-}
-.oo-ui-menuWidget {
- position: absolute;
- background: #fff;
- margin-top: -1px;
- border: solid 1px #ccc;
- border-radius: 0 0 0.25em 0.25em;
- box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuWidget input {
- position: absolute;
- width: 0;
- height: 0;
- overflow: hidden;
- opacity: 0;
-}
-.oo-ui-menuItemWidget {
- position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
- display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
- display: block;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
- background-color: #e1f3ff;
-}
-.oo-ui-menuSectionItemWidget {
- cursor: default;
- padding: 0.33em 0.75em;
- color: #888;
-}
-.oo-ui-inlineMenuWidget {
- position: relative;
- display: inline-block;
- margin: 0.25em 0;
- min-width: 20em;
-}
-.oo-ui-inlineMenuWidget-handle {
- width: 100%;
- display: inline-block;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
- z-index: 1;
- width: 100%;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- cursor: default;
-}
-.oo-ui-inlineMenuWidget-handle {
- height: 2.5em;
- border: solid 1px rgba(0, 0, 0, 0.1);
- border-radius: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
- left: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- right: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- line-height: 2.5em;
- margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- top: 0;
- width: 2.5em;
- height: 2.5em;
- opacity: 0.8;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- color: #ccc;
- text-shadow: 0 1px 1px #fff;
- border-color: #ddd;
- background-color: #f3f3f3;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
- opacity: 0.2;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- margin-right: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- margin-left: 2em;
-}
-.oo-ui-outlineItemWidget {
- position: relative;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- font-size: 1.1em;
- padding: 0.75em;
-}
-.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
- padding-left: 1.5em;
-}
-.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- opacity: 0.5;
-}
-.oo-ui-outlineItemWidget-level-0 {
- padding-right: 3.5em;
-}
-.oo-ui-outlineItemWidget-level-0 .oo-ui-iconElement-icon {
- right: 1em;
-}
-.oo-ui-outlineItemWidget-level-1 {
- padding-right: 5em;
-}
-.oo-ui-outlineItemWidget-level-1 .oo-ui-iconElement-icon {
- right: 2.5em;
-}
-.oo-ui-outlineItemWidget-level-2 {
- padding-right: 6.5em;
-}
-.oo-ui-outlineItemWidget-level-2 .oo-ui-iconElement-icon {
- right: 4em;
-}
-.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
- background-color: #a7dcff;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-important {
- font-weight: bold;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-placeholder {
- font-style: italic;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
- opacity: 0.5;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
- color: #777;
-}
-.oo-ui-outlineControlsWidget {
- height: 3em;
- background-color: #fff;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- float: right;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
- float: right;
- background-position: left center;
- background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
- float: right;
-}
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
- float: right;
-}
-.oo-ui-outlineControlsWidget-movers {
- float: left;
-}
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
- float: left;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- height: 2em;
- margin: 0.5em;
- padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
- width: 1.5em;
- height: 2em;
- margin: 0.5em 0.5em 0.5em 0;
- opacity: 0.2;
-}
-.oo-ui-outlineControlsWidget-items {
- margin-right: 0;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
- z-index: 1;
- min-width: 20em;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget-handle {
- border: solid 1px rgba(0, 0, 0, 0.1);
- border-radius: 0.25em;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget-handle:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget-empty .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- cursor: default;
- opacity: 0.2;
-}
-.oo-ui-searchWidget-query {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- width: 100%;
-}
-.oo-ui-searchWidget-results {
- position: absolute;
- bottom: 0;
- right: 0;
- left: 0;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
- height: 4em;
- padding: 0 1em;
- box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
- top: 4em;
- padding: 1em;
- line-height: 0;
-}
-.oo-ui-window {
- line-height: 1em;
- /* Content div takes focus when opened, so hide outline */
-}
-.oo-ui-window-frame {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
- margin: 0;
- padding: 0;
-}
-.oo-ui-window-content:focus {
- outline: none;
-}
-.oo-ui-window-head,
-.oo-ui-window-foot {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-window-body {
- margin: 0;
- padding: 0;
- background: none;
-}
-.oo-ui-window-overlay {
- position: absolute;
- top: 0;
- right: 0;
-}
-.oo-ui-window-isolated {
- background-color: transparent;
- background-image: none;
- font-family: sans-serif;
- font-size: 0.8em;
-}
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
- position: absolute;
- right: 0;
- left: 0;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-dialog-content > .oo-ui-window-head {
- z-index: 1;
- top: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
- z-index: 2;
- top: 0;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-foot {
- z-index: 1;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-overlay {
- z-index: 3;
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
- box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-messageDialog-actions-horizontal {
- display: table;
- table-layout: fixed;
- width: 100%;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- display: table-cell;
- width: 1%;
-}
-.oo-ui-messageDialog-actions-vertical {
- display: block;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
- position: relative;
- text-align: center;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
- display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
- position: relative;
- top: auto;
- bottom: auto;
- display: inline;
- white-space: nowrap;
-}
-.oo-ui-messageDialog-content .oo-ui-window-body {
- box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
-}
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
- display: block;
- text-align: center;
- padding-top: 0.5em;
-}
-.oo-ui-messageDialog-title {
- font-size: 1.5em;
- line-height: 1em;
- color: #000;
-}
-.oo-ui-messageDialog-message {
- font-size: 0.9em;
- line-height: 1.25em;
- color: #666;
-}
-.oo-ui-messageDialog-message-verbose {
- font-size: 1.1em;
- line-height: 1.5em;
- text-align: right;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- border-left: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
- border-left-width: 0;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- border-bottom: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
- border-bottom-width: 0;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
- text-align: center;
- line-height: 3.4em;
- padding: 0 2em;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
- font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.oo-ui-processDialog-title {
- display: inline;
- padding: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
- white-space: nowrap;
-}
-.oo-ui-processDialog-actions-safe,
-.oo-ui-processDialog-actions-primary {
- position: absolute;
- top: 0;
- bottom: 0;
-}
-.oo-ui-processDialog-actions-safe {
- right: 0;
-}
-.oo-ui-processDialog-actions-primary {
- left: 0;
-}
-.oo-ui-processDialog-errors {
- display: none;
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- bottom: 0;
- z-index: 2;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.oo-ui-processDialog-content .oo-ui-window-head {
- height: 3.4em;
-}
-.oo-ui-processDialog-content .oo-ui-window-body {
- top: 3.4em;
- box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
-}
-.oo-ui-processDialog-navigation {
- position: relative;
- height: 3.4em;
- padding: 0 1em;
-}
-.oo-ui-processDialog-location {
- padding: 0.75em 0;
- height: 1.9em;
- cursor: default;
- text-align: center;
-}
-.oo-ui-processDialog-title {
- font-weight: bold;
- line-height: 1.9em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
- padding-top: 0.75em;
- padding-bottom: 0.75em;
- min-width: 1.9em;
- min-height: 1.9em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
- line-height: 1.9em;
- padding: 0 1em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
- position: absolute;
- margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
- margin: 0.75em 0.75em 0.75em 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- padding: 0;
- vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
- margin: 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- /* Adjust for border so text aligns with title */
- margin: -1px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
- font-weight: bold;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- right: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
- padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- left: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
- padding-left: 2.25em;
-}
-.oo-ui-processDialog > .oo-ui-window-frame {
- min-height: 5em;
-}
-.oo-ui-processDialog-errors {
- background-color: rgba(255, 255, 255, 0.9);
- padding: 3em 3em 1.5em 3em;
- text-align: center;
-}
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
- margin: 2em 1em 2em 1em;
-}
-.oo-ui-processDialog-errors-title {
- font-size: 1.5em;
- color: #000;
- margin-bottom: 2em;
-}
-.oo-ui-processDialog-error {
- text-align: right;
- margin: 1em;
- padding: 1em;
- border: solid 1px #ff9e9e;
- background-color: #fff7f7;
- border-radius: 0.25em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- position: fixed;
- width: 0;
- height: 0;
- overflow: hidden;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
- width: auto;
- height: auto;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
- position: fixed;
- left: 0;
- right: 0;
- margin: auto;
- overflow: hidden;
- max-width: 100%;
- max-height: 100%;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
-}
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
- width: 100%;
- height: 100%;
- top: 0;
- bottom: 0;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- background-color: rgba(255, 255, 255, 0.5);
- opacity: 0;
- -webkit-transition: opacity 250ms ease-in-out;
- -moz-transition: opacity 250ms ease-in-out;
- -ms-transition: opacity 250ms ease-in-out;
- -o-transition: opacity 250ms ease-in-out;
- transition: opacity 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
- top: 1em;
- bottom: 1em;
- background-color: #fff;
- -webkit-transform: scale(0.5);
- -moz-transform: scale(0.5);
- -ms-transform: scale(0.5);
- -o-transform: scale(0.5);
- transform: scale(0.5);
- -webkit-transition: all 250ms ease-in-out;
- -moz-transition: all 250ms ease-in-out;
- -ms-transition: all 250ms ease-in-out;
- -o-transition: all 250ms ease-in-out;
- transition: all 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- opacity: 1;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- -webkit-transform: scale(1);
- -moz-transform: scale(1);
- -ms-transform: scale(1);
- -o-transform: scale(1);
- transform: scale(1);
-}
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
- border: solid 1px #ccc;
- border-radius: 0.5em;
- box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css
new file mode 100644
index 00000000..545c64d0
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-alerts.css
@@ -0,0 +1,64 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-bell {
+ background-image: url("themes/mediawiki/images/icons/bell.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bell.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bell.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bell.png");
+}
+.oo-ui-icon-bellOn {
+ background-image: url("themes/mediawiki/images/icons/bellOn-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bellOn-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bellOn-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bellOn-ltr.png");
+}
+.oo-ui-icon-eye {
+ background-image: url("themes/mediawiki/images/icons/eye.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eye.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eye.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/eye.png");
+}
+.oo-ui-icon-eyeClosed {
+ background-image: url("themes/mediawiki/images/icons/eyeClosed.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eyeClosed.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/eyeClosed.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/eyeClosed.png");
+}
+.oo-ui-icon-message {
+ background-image: url("themes/mediawiki/images/icons/message-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/message-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/message-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/message-ltr.png");
+}
+.oo-ui-icon-signature {
+ background-image: url("themes/mediawiki/images/icons/signature-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/signature-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/signature-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/signature-ltr.png");
+}
+.oo-ui-icon-speechBubble {
+ background-image: url("themes/mediawiki/images/icons/speechBubble-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubble-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubble-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubble-ltr.png");
+}
+.oo-ui-icon-speechBubbleAdd {
+ background-image: url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubbleAdd-ltr.png");
+}
+.oo-ui-icon-speechBubbles {
+ background-image: url("themes/mediawiki/images/icons/speechBubbles-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbles-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/speechBubbles-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/speechBubbles-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css
new file mode 100644
index 00000000..acd14255
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-content.css
@@ -0,0 +1,76 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-article {
+ background-image: url("themes/mediawiki/images/icons/article-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/article-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/article-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/article-ltr.png");
+}
+.oo-ui-icon-articleCheck {
+ background-image: url("themes/mediawiki/images/icons/articleCheck-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleCheck-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleCheck-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/articleCheck-ltr.png");
+}
+.oo-ui-icon-articleSearch {
+ background-image: url("themes/mediawiki/images/icons/articleSearch-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleSearch-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/articleSearch-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/articleSearch-ltr.png");
+}
+.oo-ui-icon-book {
+ background-image: url("themes/mediawiki/images/icons/book-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/book-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/book-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/book-ltr.png");
+}
+.oo-ui-icon-citeArticle {
+ background-image: url("themes/mediawiki/images/icons/citeArticle-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/citeArticle-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/citeArticle-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/citeArticle-ltr.png");
+}
+.oo-ui-icon-die {
+ background-image: url("themes/mediawiki/images/icons/die-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/die-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/die-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/die-ltr.png");
+}
+.oo-ui-icon-download {
+ background-image: url("themes/mediawiki/images/icons/download-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/download-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/download-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/download-ltr.png");
+}
+.oo-ui-icon-folderPlaceholder {
+ background-image: url("themes/mediawiki/images/icons/folderPlaceholder-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/folderPlaceholder-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/folderPlaceholder-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/folderPlaceholder-ltr.png");
+}
+.oo-ui-icon-journal {
+ background-image: url("themes/mediawiki/images/icons/journal-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/journal-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/journal-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/journal-ltr.png");
+}
+.oo-ui-icon-newspaper {
+ background-image: url("themes/mediawiki/images/icons/newspaper-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newspaper-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newspaper-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newspaper-ltr.png");
+}
+.oo-ui-icon-upload {
+ background-image: url("themes/mediawiki/images/icons/upload-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upload-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upload-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/upload-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css
new file mode 100644
index 00000000..5f4cb821
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-advanced.css
@@ -0,0 +1,166 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-alignCentre {
+ background-image: url("themes/mediawiki/images/icons/align-center.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-center.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-center.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-center.png");
+}
+.oo-ui-icon-alignLeft {
+ background-image: url("themes/mediawiki/images/icons/align-float-left.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-left.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-left.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-float-left.png");
+}
+.oo-ui-icon-alignRight {
+ background-image: url("themes/mediawiki/images/icons/align-float-right.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-right.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/align-float-right.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/align-float-right.png");
+}
+.oo-ui-icon-find {
+ background-image: url("themes/mediawiki/images/icons/find-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/find-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/find-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/find-ltr.png");
+}
+.oo-ui-icon-insert {
+ background-image: url("themes/mediawiki/images/icons/insert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/insert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/insert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/insert.png");
+}
+.oo-ui-icon-layout {
+ background-image: url("themes/mediawiki/images/icons/layout-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/layout-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/layout-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/layout-ltr.png");
+}
+.oo-ui-icon-newline {
+ background-image: url("themes/mediawiki/images/icons/newline-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newline-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newline-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newline-ltr.png");
+}
+.oo-ui-icon-redirect {
+ background-image: url("themes/mediawiki/images/icons/redirect-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/redirect-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/redirect-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/redirect-ltr.png");
+}
+.oo-ui-icon-noWikiText {
+ background-image: url("themes/mediawiki/images/icons/noWikiText-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/noWikiText-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/noWikiText-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/noWikiText-ltr.png");
+}
+.oo-ui-icon-outline {
+ background-image: url("themes/mediawiki/images/icons/outline-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outline-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outline-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/outline-ltr.png");
+}
+.oo-ui-icon-puzzle {
+ background-image: url("themes/mediawiki/images/icons/puzzle-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/puzzle-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/puzzle-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/puzzle-ltr.png");
+}
+.oo-ui-icon-quotes {
+ background-image: url("themes/mediawiki/images/icons/quotes-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotes-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotes-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/quotes-ltr.png");
+}
+.oo-ui-icon-quotesAdd {
+ background-image: url("themes/mediawiki/images/icons/quotesAdd-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotesAdd-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/quotesAdd-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/quotesAdd-ltr.png");
+}
+.oo-ui-icon-searchCaseSensitive {
+ background-image: url("themes/mediawiki/images/icons/case-sensitive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/case-sensitive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/case-sensitive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/case-sensitive.png");
+}
+.oo-ui-icon-searchRegularExpression {
+ background-image: url("themes/mediawiki/images/icons/regular-expression.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/regular-expression.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/regular-expression.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/regular-expression.png");
+}
+.oo-ui-icon-specialCharacter {
+ background-image: url("themes/mediawiki/images/icons/specialCharacter.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/specialCharacter.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/specialCharacter.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/specialCharacter.png");
+}
+.oo-ui-icon-table {
+ background-image: url("themes/mediawiki/images/icons/table.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table.png");
+}
+.oo-ui-icon-tableAddColumnAfter {
+ background-image: url("themes/mediawiki/images/icons/table-insert-column-rtl.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-rtl.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-rtl.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-column-rtl.png");
+}
+.oo-ui-icon-tableAddColumnBefore {
+ background-image: url("themes/mediawiki/images/icons/table-insert-column-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-column-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-column-ltr.png");
+}
+.oo-ui-icon-tableAddRowAfter {
+ background-image: url("themes/mediawiki/images/icons/table-insert-row-after.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-after.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-after.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-row-after.png");
+}
+.oo-ui-icon-tableAddRowBefore {
+ background-image: url("themes/mediawiki/images/icons/table-insert-row-before.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-before.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-insert-row-before.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-insert-row-before.png");
+}
+.oo-ui-icon-tableCaption {
+ background-image: url("themes/mediawiki/images/icons/table-caption.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-caption.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-caption.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-caption.png");
+}
+.oo-ui-icon-tableMergeCells {
+ background-image: url("themes/mediawiki/images/icons/table-merge-cells.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-merge-cells.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/table-merge-cells.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/table-merge-cells.png");
+}
+.oo-ui-icon-templateAdd {
+ background-image: url("themes/mediawiki/images/icons/templateAdd-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/templateAdd-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/templateAdd-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/templateAdd-ltr.png");
+}
+.oo-ui-icon-translation {
+ background-image: url("themes/mediawiki/images/icons/translation-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/translation-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/translation-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/translation-ltr.png");
+}
+.oo-ui-icon-wikiText {
+ background-image: url("themes/mediawiki/images/icons/wikiText.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikiText.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikiText.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/wikiText.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css
new file mode 100644
index 00000000..7f3b236f
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-core.css
@@ -0,0 +1,88 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-edit {
+ background-image: url("themes/mediawiki/images/icons/edit-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/edit-ltr.png");
+}
+.oo-ui-icon-edit-progressive {
+ background-image: url("themes/mediawiki/images/icons/edit-ltr-progressive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr-progressive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr-progressive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/edit-ltr-progressive.png");
+}
+.oo-ui-icon-edit-invert {
+ background-image: url("themes/mediawiki/images/icons/edit-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/edit-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/edit-ltr-invert.png");
+}
+.oo-ui-icon-editLock {
+ background-image: url("themes/mediawiki/images/icons/editLock-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editLock-ltr.png");
+}
+.oo-ui-icon-editLock-invert {
+ background-image: url("themes/mediawiki/images/icons/editLock-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editLock-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editLock-ltr-invert.png");
+}
+.oo-ui-icon-editUndo {
+ background-image: url("themes/mediawiki/images/icons/editUndo-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editUndo-ltr.png");
+}
+.oo-ui-icon-editUndo-invert {
+ background-image: url("themes/mediawiki/images/icons/editUndo-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/editUndo-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/editUndo-ltr-invert.png");
+}
+.oo-ui-icon-link {
+ background-image: url("themes/mediawiki/images/icons/link-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/link-ltr.png");
+}
+.oo-ui-icon-link-invert {
+ background-image: url("themes/mediawiki/images/icons/link-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/link-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/link-ltr-invert.png");
+}
+.oo-ui-icon-linkExternal {
+ background-image: url("themes/mediawiki/images/icons/external-link-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/external-link-ltr.png");
+}
+.oo-ui-icon-linkExternal-invert {
+ background-image: url("themes/mediawiki/images/icons/external-link-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/external-link-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/external-link-ltr-invert.png");
+}
+.oo-ui-icon-linkSecure {
+ background-image: url("themes/mediawiki/images/icons/secure-link.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/secure-link.png");
+}
+.oo-ui-icon-linkSecure-invert {
+ background-image: url("themes/mediawiki/images/icons/secure-link-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/secure-link-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/secure-link-invert.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css
new file mode 100644
index 00000000..9708223a
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-list.css
@@ -0,0 +1,34 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-indent {
+ background-image: url("themes/mediawiki/images/icons/indent-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/indent-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/indent-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/indent-ltr.png");
+}
+.oo-ui-icon-listBullet {
+ background-image: url("themes/mediawiki/images/icons/listBullet-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listBullet-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listBullet-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/listBullet-ltr.png");
+}
+.oo-ui-icon-listNumbered {
+ background-image: url("themes/mediawiki/images/icons/listNumbered-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listNumbered-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/listNumbered-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/listNumbered-ltr.png");
+}
+.oo-ui-icon-outdent {
+ background-image: url("themes/mediawiki/images/icons/outdent-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outdent-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/outdent-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/outdent-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css
new file mode 100644
index 00000000..ce739dcb
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-editing-styling.css
@@ -0,0 +1,495 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-bigger {
+ background-image: url("themes/mediawiki/images/icons/bigger-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bigger-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bigger-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bigger-ltr.png");
+}
+.oo-ui-icon-smaller {
+ background-image: url("themes/mediawiki/images/icons/smaller-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/smaller-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/smaller-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/smaller-ltr.png");
+}
+.oo-ui-icon-subscript {
+ background-image: url("themes/mediawiki/images/icons/subscript-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/subscript-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/subscript-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/subscript-ltr.png");
+}
+.oo-ui-icon-superscript {
+ background-image: url("themes/mediawiki/images/icons/superscript-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/superscript-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/superscript-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/superscript-ltr.png");
+}
+.oo-ui-icon-bold {
+ background-image: url("themes/mediawiki/images/icons/bold-a.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-a.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-a.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-a.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(ar) {
+ background-image: url("themes/mediawiki/images/icons/bold-arab-ain.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-ain.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-ain.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(be) {
+ background-image: url("themes/mediawiki/images/icons/bold-cyrl-te.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-te.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-te.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(cs) {
+ background-image: url("themes/mediawiki/images/icons/bold-b.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(en) {
+ background-image: url("themes/mediawiki/images/icons/bold-b.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(he) {
+ background-image: url("themes/mediawiki/images/icons/bold-b.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(ml) {
+ background-image: url("themes/mediawiki/images/icons/bold-b.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(pl) {
+ background-image: url("themes/mediawiki/images/icons/bold-b.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-b.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-b.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(da) {
+ background-image: url("themes/mediawiki/images/icons/bold-f.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(de) {
+ background-image: url("themes/mediawiki/images/icons/bold-f.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(hu) {
+ background-image: url("themes/mediawiki/images/icons/bold-f.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(ksh) {
+ background-image: url("themes/mediawiki/images/icons/bold-f.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(nn) {
+ background-image: url("themes/mediawiki/images/icons/bold-f.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(no) {
+ background-image: url("themes/mediawiki/images/icons/bold-f.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(sv) {
+ background-image: url("themes/mediawiki/images/icons/bold-f.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-f.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-f.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(es) {
+ background-image: url("themes/mediawiki/images/icons/bold-n.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(gl) {
+ background-image: url("themes/mediawiki/images/icons/bold-n.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(pt) {
+ background-image: url("themes/mediawiki/images/icons/bold-n.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-n.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-n.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(eu) {
+ background-image: url("themes/mediawiki/images/icons/bold-l.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(fi) {
+ background-image: url("themes/mediawiki/images/icons/bold-l.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-l.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-l.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(fa) {
+ background-image: url("themes/mediawiki/images/icons/bold-arab-dad.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-arab-dad.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-arab-dad.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(fr) {
+ background-image: url("themes/mediawiki/images/icons/bold-g.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(it) {
+ background-image: url("themes/mediawiki/images/icons/bold-g.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-g.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-g.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(hy) {
+ background-image: url("themes/mediawiki/images/icons/bold-armn-to.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-armn-to.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-armn-to.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(ka) {
+ background-image: url("themes/mediawiki/images/icons/bold-geor-man.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-geor-man.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-geor-man.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(ky) {
+ background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(ru) {
+ background-image: url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-zhe.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-zhe.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(nl) {
+ background-image: url("themes/mediawiki/images/icons/bold-v.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-v.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-v.png");
+}
+/* @noflip */
+.oo-ui-icon-bold:lang(os) {
+ background-image: url("themes/mediawiki/images/icons/bold-cyrl-be.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-be.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bold-cyrl-be.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bold-cyrl-be.png");
+}
+.oo-ui-icon-italic {
+ background-image: url("themes/mediawiki/images/icons/italic-a.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-a.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-a.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-a.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(ar) {
+ background-image: url("themes/mediawiki/images/icons/italic-arab-meem.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-meem.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-meem.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(cs) {
+ background-image: url("themes/mediawiki/images/icons/italic-i.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(en) {
+ background-image: url("themes/mediawiki/images/icons/italic-i.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(fr) {
+ background-image: url("themes/mediawiki/images/icons/italic-i.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(he) {
+ background-image: url("themes/mediawiki/images/icons/italic-i.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(ml) {
+ background-image: url("themes/mediawiki/images/icons/italic-i.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(pl) {
+ background-image: url("themes/mediawiki/images/icons/italic-i.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(pt) {
+ background-image: url("themes/mediawiki/images/icons/italic-i.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-i.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-i.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(be) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(da) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(de) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(fi) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(ky) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(nn) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(no) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(os) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(sv) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(ru) {
+ background-image: url("themes/mediawiki/images/icons/italic-k.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-k.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-k.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(es) {
+ background-image: url("themes/mediawiki/images/icons/italic-c.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(gl) {
+ background-image: url("themes/mediawiki/images/icons/italic-c.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(it) {
+ background-image: url("themes/mediawiki/images/icons/italic-c.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(nl) {
+ background-image: url("themes/mediawiki/images/icons/italic-c.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-c.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-c.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(eu) {
+ background-image: url("themes/mediawiki/images/icons/italic-e.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-e.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-e.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(fa) {
+ background-image: url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-arab-keheh-jeem.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(hu) {
+ background-image: url("themes/mediawiki/images/icons/italic-d.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-d.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-d.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(hy) {
+ background-image: url("themes/mediawiki/images/icons/italic-armn-sha.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-armn-sha.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-armn-sha.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(ksh) {
+ background-image: url("themes/mediawiki/images/icons/italic-s.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-s.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-s.png");
+}
+/* @noflip */
+.oo-ui-icon-italic:lang(ka) {
+ background-image: url("themes/mediawiki/images/icons/italic-geor-kan.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-geor-kan.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/italic-geor-kan.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/italic-geor-kan.png");
+}
+.oo-ui-icon-strikethrough {
+ background-image: url("themes/mediawiki/images/icons/strikethrough-a.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-a.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-a.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-a.png");
+}
+/* @noflip */
+.oo-ui-icon-strikethrough:lang(en) {
+ background-image: url("themes/mediawiki/images/icons/strikethrough-s.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-s.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-s.png");
+}
+/* @noflip */
+.oo-ui-icon-strikethrough:lang(fi) {
+ background-image: url("themes/mediawiki/images/icons/strikethrough-y.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-y.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/strikethrough-y.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/strikethrough-y.png");
+}
+.oo-ui-icon-underline {
+ background-image: url("themes/mediawiki/images/icons/underline-a.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-a.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-a.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/underline-a.png");
+}
+/* @noflip */
+.oo-ui-icon-underline:lang(en) {
+ background-image: url("themes/mediawiki/images/icons/underline-u.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-u.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/underline-u.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/underline-u.png");
+}
+.oo-ui-icon-textLanguage {
+ background-image: url("themes/mediawiki/images/icons/language.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/language.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/language.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/language.png");
+}
+.oo-ui-icon-textDirLTR {
+ background-image: url("themes/mediawiki/images/icons/text-dir-lefttoright.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-lefttoright.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-lefttoright.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-dir-lefttoright.png");
+}
+.oo-ui-icon-textDirRTL {
+ background-image: url("themes/mediawiki/images/icons/text-dir-righttoleft.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-righttoleft.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-dir-righttoleft.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-dir-righttoleft.png");
+}
+.oo-ui-icon-textStyle {
+ background-image: url("themes/mediawiki/images/icons/text-style.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-style.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/text-style.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/text-style.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css
new file mode 100644
index 00000000..23bad66d
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-interactions.css
@@ -0,0 +1,106 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-beta {
+ background-image: url("themes/mediawiki/images/icons/beta.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/beta.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/beta.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/beta.png");
+}
+.oo-ui-icon-betaLaunch {
+ background-image: url("themes/mediawiki/images/icons/betaLaunch.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/betaLaunch.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/betaLaunch.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/betaLaunch.png");
+}
+.oo-ui-icon-bookmark {
+ background-image: url("themes/mediawiki/images/icons/bookmark-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bookmark-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/bookmark-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/bookmark-ltr.png");
+}
+.oo-ui-icon-browser {
+ background-image: url("themes/mediawiki/images/icons/browser-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/browser-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/browser-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/browser-ltr.png");
+}
+.oo-ui-icon-clear {
+ background-image: url("themes/mediawiki/images/icons/clear.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clear.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clear.png");
+}
+.oo-ui-icon-clock {
+ background-image: url("themes/mediawiki/images/icons/clock.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clock.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/clock.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/clock.png");
+}
+.oo-ui-icon-funnel {
+ background-image: url("themes/mediawiki/images/icons/funnel-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/funnel-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/funnel-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/funnel-ltr.png");
+}
+.oo-ui-icon-heart {
+ background-image: url("themes/mediawiki/images/icons/heart.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/heart.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/heart.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/heart.png");
+}
+.oo-ui-icon-key {
+ background-image: url("themes/mediawiki/images/icons/key-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/key-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/key-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/key-ltr.png");
+}
+.oo-ui-icon-keyboard {
+ background-image: url("themes/mediawiki/images/icons/keyboard-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/keyboard-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/keyboard-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/keyboard-ltr.png");
+}
+.oo-ui-icon-logOut {
+ background-image: url("themes/mediawiki/images/icons/logOut-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logOut-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logOut-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logOut-ltr.png");
+}
+.oo-ui-icon-newWindow {
+ background-image: url("themes/mediawiki/images/icons/newWindow-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newWindow-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/newWindow-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/newWindow-ltr.png");
+}
+.oo-ui-icon-printer {
+ background-image: url("themes/mediawiki/images/icons/printer-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/printer-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/printer-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/printer-ltr.png");
+}
+.oo-ui-icon-ribbonPrize {
+ background-image: url("themes/mediawiki/images/icons/ribbonPrize.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ribbonPrize.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ribbonPrize.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ribbonPrize.png");
+}
+.oo-ui-icon-sun {
+ background-image: url("themes/mediawiki/images/icons/sun-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/sun-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/sun-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/sun-ltr.png");
+}
+.oo-ui-icon-watchlist {
+ background-image: url("themes/mediawiki/images/icons/watchlist-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/watchlist-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/watchlist-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/watchlist-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css
new file mode 100644
index 00000000..35ad9012
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-layout.css
@@ -0,0 +1,100 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-stripeFlow {
+ background-image: url("themes/mediawiki/images/icons/stripeFlow-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeFlow-ltr.png");
+}
+.oo-ui-icon-stripeFlow-invert {
+ background-image: url("themes/mediawiki/images/icons/stripeFlow-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeFlow-ltr-invert.png");
+}
+.oo-ui-icon-stripeSideMenu {
+ background-image: url("themes/mediawiki/images/icons/stripeSideMenu.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSideMenu.png");
+}
+.oo-ui-icon-stripeSideMenu-invert {
+ background-image: url("themes/mediawiki/images/icons/stripeSideMenu-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSideMenu-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSideMenu-invert.png");
+}
+.oo-ui-icon-stripeSummary {
+ background-image: url("themes/mediawiki/images/icons/stripeSummary-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSummary-ltr.png");
+}
+.oo-ui-icon-stripeSummary-invert {
+ background-image: url("themes/mediawiki/images/icons/stripeSummary-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeSummary-ltr-invert.png");
+}
+.oo-ui-icon-stripeToC {
+ background-image: url("themes/mediawiki/images/icons/stripeToC-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeToC-ltr.png");
+}
+.oo-ui-icon-stripeToC-progressive {
+ background-image: url("themes/mediawiki/images/icons/stripeToC-ltr-progressive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeToC-ltr-progressive.png");
+}
+.oo-ui-icon-stripeToC-invert {
+ background-image: url("themes/mediawiki/images/icons/stripeToC-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stripeToC-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stripeToC-ltr-invert.png");
+}
+.oo-ui-icon-viewCompact {
+ background-image: url("themes/mediawiki/images/icons/viewCompact.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewCompact.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewCompact.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/viewCompact.png");
+}
+.oo-ui-icon-viewCompact-invert {
+ background-image: url("themes/mediawiki/images/icons/viewCompact-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewCompact-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewCompact-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/viewCompact-invert.png");
+}
+.oo-ui-icon-viewDetails {
+ background-image: url("themes/mediawiki/images/icons/viewDetails-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewDetails-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewDetails-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/viewDetails-ltr.png");
+}
+.oo-ui-icon-viewDetails-invert {
+ background-image: url("themes/mediawiki/images/icons/viewDetails-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewDetails-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/viewDetails-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/viewDetails-ltr-invert.png");
+}
+.oo-ui-icon-visionSimulator {
+ background-image: url("themes/mediawiki/images/icons/visionSimulator.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/visionSimulator.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/visionSimulator.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/visionSimulator.png");
+}
+.oo-ui-icon-visionSimulator-invert {
+ background-image: url("themes/mediawiki/images/icons/visionSimulator-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/visionSimulator-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/visionSimulator-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/visionSimulator-invert.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css
new file mode 100644
index 00000000..d7dad243
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-location.css
@@ -0,0 +1,34 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-map {
+ background-image: url("themes/mediawiki/images/icons/map-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/map-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/map-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/map-ltr.png");
+}
+.oo-ui-icon-mapPin {
+ background-image: url("themes/mediawiki/images/icons/mapPin.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPin.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPin.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/mapPin.png");
+}
+.oo-ui-icon-mapPinAdd {
+ background-image: url("themes/mediawiki/images/icons/mapPinAdd-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPinAdd-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/mapPinAdd-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/mapPinAdd-ltr.png");
+}
+.oo-ui-icon-wikitrail {
+ background-image: url("themes/mediawiki/images/icons/wikitrail-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikitrail-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/wikitrail-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/wikitrail-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css
new file mode 100644
index 00000000..650cfa2f
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-media.css
@@ -0,0 +1,46 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-image {
+ background-image: url("themes/mediawiki/images/icons/image-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/image-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/image-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/image-ltr.png");
+}
+.oo-ui-icon-imageAdd {
+ background-image: url("themes/mediawiki/images/icons/imageAdd-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageAdd-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageAdd-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/imageAdd-ltr.png");
+}
+.oo-ui-icon-imageLock {
+ background-image: url("themes/mediawiki/images/icons/imageLock-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageLock-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/imageLock-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/imageLock-ltr.png");
+}
+.oo-ui-icon-photoGallery {
+ background-image: url("themes/mediawiki/images/icons/photoGallery-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/photoGallery-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/photoGallery-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/photoGallery-ltr.png");
+}
+.oo-ui-icon-play {
+ background-image: url("themes/mediawiki/images/icons/play-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/play-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/play-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/play-ltr.png");
+}
+.oo-ui-icon-stop {
+ background-image: url("themes/mediawiki/images/icons/stop.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stop.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/stop.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/stop.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css
new file mode 100644
index 00000000..97eb0d52
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-moderation.css
@@ -0,0 +1,148 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-block {
+ background-image: url("themes/mediawiki/images/icons/block.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/block.png");
+}
+.oo-ui-icon-block-destructive {
+ background-image: url("themes/mediawiki/images/icons/block-destructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block-destructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block-destructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/block-destructive.png");
+}
+.oo-ui-icon-block-invert {
+ background-image: url("themes/mediawiki/images/icons/block-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/block-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/block-invert.png");
+}
+.oo-ui-icon-blockUndo {
+ background-image: url("themes/mediawiki/images/icons/blockUndo-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/blockUndo-ltr.png");
+}
+.oo-ui-icon-blockUndo-invert {
+ background-image: url("themes/mediawiki/images/icons/blockUndo-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/blockUndo-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/blockUndo-ltr-invert.png");
+}
+.oo-ui-icon-flag {
+ background-image: url("themes/mediawiki/images/icons/flag-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flag-ltr.png");
+}
+.oo-ui-icon-flag-invert {
+ background-image: url("themes/mediawiki/images/icons/flag-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flag-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flag-ltr-invert.png");
+}
+.oo-ui-icon-flagUndo {
+ background-image: url("themes/mediawiki/images/icons/flagUndo-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flagUndo-ltr.png");
+}
+.oo-ui-icon-flagUndo-invert {
+ background-image: url("themes/mediawiki/images/icons/flagUndo-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/flagUndo-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/flagUndo-ltr-invert.png");
+}
+.oo-ui-icon-lock {
+ background-image: url("themes/mediawiki/images/icons/lock-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/lock-ltr.png");
+}
+.oo-ui-icon-lock-destructive {
+ background-image: url("themes/mediawiki/images/icons/lock-ltr-destructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr-destructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr-destructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/lock-ltr-destructive.png");
+}
+.oo-ui-icon-lock-invert {
+ background-image: url("themes/mediawiki/images/icons/lock-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/lock-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/lock-ltr-invert.png");
+}
+.oo-ui-icon-star {
+ background-image: url("themes/mediawiki/images/icons/star.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/star.png");
+}
+.oo-ui-icon-star-invert {
+ background-image: url("themes/mediawiki/images/icons/star-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/star-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/star-invert.png");
+}
+.oo-ui-icon-trash {
+ background-image: url("themes/mediawiki/images/icons/trash.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trash.png");
+}
+.oo-ui-icon-trash-invert {
+ background-image: url("themes/mediawiki/images/icons/trash-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trash-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trash-invert.png");
+}
+.oo-ui-icon-trashUndo {
+ background-image: url("themes/mediawiki/images/icons/trashUndo-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trashUndo-ltr.png");
+}
+.oo-ui-icon-trashUndo-invert {
+ background-image: url("themes/mediawiki/images/icons/trashUndo-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/trashUndo-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/trashUndo-ltr-invert.png");
+}
+.oo-ui-icon-unLock {
+ background-image: url("themes/mediawiki/images/icons/unLock-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unLock-ltr.png");
+}
+.oo-ui-icon-unLock-destructive {
+ background-image: url("themes/mediawiki/images/icons/unLock-ltr-destructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr-destructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr-destructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unLock-ltr-destructive.png");
+}
+.oo-ui-icon-unLock-invert {
+ background-image: url("themes/mediawiki/images/icons/unLock-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unLock-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unLock-ltr-invert.png");
+}
+.oo-ui-icon-unStar {
+ background-image: url("themes/mediawiki/images/icons/unStar.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unStar.png");
+}
+.oo-ui-icon-unStar-invert {
+ background-image: url("themes/mediawiki/images/icons/unStar-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/unStar-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/unStar-invert.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css
new file mode 100644
index 00000000..148b54e5
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-movement.css
@@ -0,0 +1,64 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-arrowNext {
+ background-image: url("themes/mediawiki/images/icons/arrow-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arrow-ltr.png");
+}
+.oo-ui-icon-arrowLast {
+ background-image: url("themes/mediawiki/images/icons/arrow-rtl.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-rtl.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arrow-rtl.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arrow-rtl.png");
+}
+.oo-ui-icon-caretNext {
+ background-image: url("themes/mediawiki/images/icons/caret-rtl.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-rtl.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-rtl.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caret-rtl.png");
+}
+.oo-ui-icon-caretLast {
+ background-image: url("themes/mediawiki/images/icons/caret-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caret-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caret-ltr.png");
+}
+.oo-ui-icon-caretDown {
+ background-image: url("themes/mediawiki/images/icons/caretDown.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretDown.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretDown.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caretDown.png");
+}
+.oo-ui-icon-caretUp {
+ background-image: url("themes/mediawiki/images/icons/caretUp.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretUp.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/caretUp.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/caretUp.png");
+}
+.oo-ui-icon-downTriangle {
+ background-image: url("themes/mediawiki/images/icons/downTriangle.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/downTriangle.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/downTriangle.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/downTriangle.png");
+}
+.oo-ui-icon-move {
+ background-image: url("themes/mediawiki/images/icons/move.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move.png");
+}
+.oo-ui-icon-upTriangle {
+ background-image: url("themes/mediawiki/images/icons/upTriangle.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upTriangle.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/upTriangle.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/upTriangle.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css
new file mode 100644
index 00000000..9eabc174
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-user.css
@@ -0,0 +1,34 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-userActive {
+ background-image: url("themes/mediawiki/images/icons/userActive-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userActive-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userActive-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userActive-ltr.png");
+}
+.oo-ui-icon-userAvatar {
+ background-image: url("themes/mediawiki/images/icons/userAvatar.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userAvatar.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userAvatar.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userAvatar.png");
+}
+.oo-ui-icon-userInactive {
+ background-image: url("themes/mediawiki/images/icons/userInactive-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userInactive-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userInactive-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userInactive-ltr.png");
+}
+.oo-ui-icon-userTalk {
+ background-image: url("themes/mediawiki/images/icons/userTalk-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userTalk-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/userTalk-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/userTalk-ltr.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css
new file mode 100644
index 00000000..0c905d08
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-icons-wikimedia.css
@@ -0,0 +1,28 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+.oo-ui-icon-logoCC {
+ background-image: url("themes/mediawiki/images/icons/logo-cc.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-cc.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-cc.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-cc.png");
+}
+.oo-ui-icon-logoWikimediaCommons {
+ background-image: url("themes/mediawiki/images/icons/logo-wikimediaCommons.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikimediaCommons.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikimediaCommons.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-wikimediaCommons.png");
+}
+.oo-ui-icon-logoWikipedia {
+ background-image: url("themes/mediawiki/images/icons/logo-wikipedia.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikipedia.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/logo-wikipedia.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/logo-wikipedia.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css b/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
new file mode 100644
index 00000000..12e80c11
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
@@ -0,0 +1,2660 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+@-webkit-keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+@-moz-keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+@-ms-keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+@-o-keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+@keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+/* @noflip */
+.oo-ui-rtl {
+ direction: rtl;
+}
+/* @noflip */
+.oo-ui-ltr {
+ direction: ltr;
+}
+.oo-ui-element-hidden {
+ display: none !important;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+ cursor: pointer;
+ display: inline-block;
+ vertical-align: middle;
+ font: inherit;
+ white-space: nowrap;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ display: none;
+}
+.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ cursor: default;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-buttonElement-frameless {
+ display: inline-block;
+ position: relative;
+}
+.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+ display: inline-block;
+ vertical-align: top;
+ text-align: center;
+}
+.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ cursor: default;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+ font-weight: bold;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: 0;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ height: 0.9375em;
+ margin: 0.46875em;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-left: 0.46875em;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ width: 1.875em;
+ height: 1.875em;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.2);
+ outline: none;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
+ margin-right: 0;
+}
+.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ margin-left: 0.25em;
+ margin-right: 0.25em;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #555555;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #444444;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+ color: #347bff;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #1f4999;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+ color: #00af89;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #005946;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+ color: #d11d13;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #73100a;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ color: #cccccc;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+ margin: 0.1em 0;
+ padding: 0.2em 0.8em;
+ border-radius: 2px;
+ -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+ -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+ -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+ -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+ transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
+ outline: none;
+}
+.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ line-height: 1.875em;
+}
+.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: -0.5em;
+ margin-right: -0.5em;
+}
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-right: 0.3em;
+}
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ /* -0.5 - 0.475 */
+ margin-left: -0.005em;
+ margin-right: -0.005em;
+}
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-left: 0.46875em;
+ margin-right: -0.275em;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background: #dddddd;
+ border: 1px solid #dddddd;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+ color: #555555;
+ background-color: #ffffff;
+ border: 1px solid #cdcdcd;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover {
+ background-color: #ebebeb;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ background-color: #d9d9d9;
+ border-color: #d9d9d9;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
+ color: #347bff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
+ background-color: rgba(52, 123, 255, 0.1);
+ border-color: rgba(31, 73, 153, 0.5);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #1f4999;
+ border-color: #1f4999;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #1f4999;
+ border-color: #1f4999;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+ color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
+ background-color: rgba(0, 171, 137, 0.1);
+ border-color: rgba(0, 89, 70, 0.5);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #005946;
+ border-color: #005946;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #005946;
+ border-color: #005946;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+ color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
+ background-color: rgba(209, 29, 19, 0.1);
+ border-color: rgba(115, 16, 10, 0.5);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #73100a;
+ border-color: #73100a;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #73100a;
+ border-color: #73100a;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #347bff;
+ border-color: #347bff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
+ background: #2962cc;
+ border-color: #2962cc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #ffffff;
+ border-color: #347bff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #1f4999;
+ border-color: #1f4999;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #00af89;
+ border-color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
+ background: #008064;
+ border-color: #008064;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #ffffff;
+ border-color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #005946;
+ border-color: #005946;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #d11d13;
+ border-color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
+ background: #8c130d;
+ border-color: #8c130d;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #ffffff;
+ border-color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #73100a;
+ border-color: #73100a;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-clippableElement-clippable {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-draggableElement {
+ cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
+ /*
+ * HACK: In order to style horizontally, we must override
+ * OO.ui.OptionWidget's display rule that is currently set
+ * to be 'block'
+ */
+}
+.oo-ui-draggableElement-dragging {
+ cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move;
+ background: rgba(0, 0, 0, 0.2);
+ opacity: 0.4;
+}
+.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget {
+ display: inline-block;
+}
+.oo-ui-draggableGroupElement-placeholder {
+ position: absolute;
+ display: block;
+ background: rgba(0, 0, 0, 0.4);
+}
+.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-iconElement.oo-ui-iconElement-icon {
+ background-size: contain;
+ background-position: center center;
+}
+.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
+.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
+ background-size: contain;
+ background-position: center center;
+}
+.oo-ui-lookupElement > .oo-ui-menuSelectWidget {
+ z-index: 1;
+ width: 100%;
+}
+.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
+ overflow-y: hidden;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable {
+ overflow-y: auto;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded {
+ padding: 2em;
+}
+.oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 3em;
+ overflow-y: auto;
+}
+.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
+ padding: 1.5em;
+}
+.oo-ui-bookletLayout-outlinePanel {
+ border-right: 1px solid #dddddd;
+}
+.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
+ box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
+}
+.oo-ui-indexLayout > .oo-ui-menuLayout-menu {
+ height: 3em;
+}
+.oo-ui-indexLayout > .oo-ui-menuLayout-content {
+ top: 3em;
+}
+.oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout {
+ padding: 1.5em;
+}
+.oo-ui-fieldLayout {
+ display: block;
+ margin-bottom: 1em;
+}
+.oo-ui-fieldLayout:before,
+.oo-ui-fieldLayout:after {
+ content: " ";
+ display: table;
+}
+.oo-ui-fieldLayout:after {
+ clear: both;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ display: block;
+ float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ text-align: right;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body {
+ display: table;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ display: table-cell;
+ vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-top > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ display: inline-block;
+}
+.oo-ui-fieldLayout > .oo-ui-fieldLayout-help {
+ float: right;
+}
+.oo-ui-fieldLayout > .oo-ui-fieldLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+ z-index: 1;
+}
+.oo-ui-fieldLayout > .oo-ui-fieldLayout-help .oo-ui-fieldLayout-help-content {
+ padding: 0.5em 0.75em;
+ line-height: 1.5em;
+}
+.oo-ui-fieldLayout:last-child {
+ margin-bottom: 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding-top: 0.5em;
+ margin-right: 5%;
+ width: 35%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ width: 60%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding: 0.5em;
+ padding-left: 1em;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ padding: 0.5em 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding: 0.5em 0;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget {
+ margin-right: 0;
+ margin-top: 0.25em;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+ color: #cccccc;
+}
+.oo-ui-actionFieldLayout-field {
+ display: table;
+ table-layout: fixed;
+ width: 100%;
+}
+.oo-ui-actionFieldLayout-input,
+.oo-ui-actionFieldLayout-button {
+ display: table-cell;
+ vertical-align: middle;
+}
+.oo-ui-actionFieldLayout-input {
+ padding-right: 1em;
+}
+.oo-ui-actionFieldLayout-button {
+ width: 1%;
+ white-space: nowrap;
+}
+.oo-ui-fieldsetLayout {
+ position: relative;
+ margin: 0;
+ padding: 0;
+ border: none;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ display: block;
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
+ display: inline-block;
+}
+.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help {
+ float: right;
+}
+.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+ z-index: 1;
+}
+.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help .oo-ui-fieldsetLayout-help-content {
+ padding: 0.5em 0.75em;
+ line-height: 1.5em;
+}
+.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout,
+.oo-ui-fieldsetLayout + .oo-ui-formLayout {
+ margin-top: 2em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
+ font-size: 1.1em;
+ margin-bottom: 0.5em;
+ padding: 0.25em 0;
+ font-weight: bold;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
+ padding-left: 2em;
+ line-height: 1.8em;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ left: 0;
+ top: 0.25em;
+ width: 1.875em;
+ height: 1.875em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget {
+ margin-right: 0;
+}
+.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-formLayout + .oo-ui-fieldsetLayout,
+.oo-ui-formLayout + .oo-ui-formLayout {
+ margin-top: 2em;
+}
+.oo-ui-menuLayout {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-menuLayout-menu,
+.oo-ui-menuLayout-content {
+ position: absolute;
+ -webkit-transition: all ease-in-out 200ms;
+ -moz-transition: all ease-in-out 200ms;
+ -ms-transition: all ease-in-out 200ms;
+ -o-transition: all ease-in-out 200ms;
+ transition: all ease-in-out 200ms;
+}
+.oo-ui-menuLayout-menu {
+ height: 18em;
+ width: 18em;
+}
+.oo-ui-menuLayout-content {
+ top: 18em;
+ left: 18em;
+ right: 18em;
+ bottom: 18em;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-menu {
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-content {
+ top: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-menu {
+ width: auto !important;
+ left: 0;
+ top: 0;
+ right: 0;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-content {
+ right: 0 !important;
+ bottom: 0 !important;
+ left: 0 !important;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-menu {
+ height: auto !important;
+ top: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-content {
+ bottom: 0 !important;
+ left: 0 !important;
+ top: 0 !important;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu {
+ width: auto !important;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-content {
+ left: 0 !important;
+ top: 0 !important;
+ right: 0 !important;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-menu {
+ height: auto !important;
+ bottom: 0;
+ left: 0;
+ top: 0;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-content {
+ top: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+}
+.oo-ui-panelLayout {
+ position: relative;
+}
+.oo-ui-panelLayout-scrollable {
+ overflow-y: auto;
+}
+.oo-ui-panelLayout-expanded {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-panelLayout-padded {
+ padding: 1.25em;
+}
+.oo-ui-panelLayout-framed {
+ border: 1px solid #aaaaaa;
+ border-radius: 0.2em;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
+ display: block;
+ position: relative;
+}
+.oo-ui-popupTool .oo-ui-popupWidget-popup,
+.oo-ui-popupTool .oo-ui-popupWidget-anchor {
+ z-index: 4;
+}
+.oo-ui-popupTool .oo-ui-popupWidget {
+ /* @noflip */
+ margin-left: 1.25em;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup {
+ border: 0;
+ border-radius: 0;
+ margin: 0;
+}
+.oo-ui-toolGroupTool > .oo-ui-toolGroup {
+ border-right: none;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle {
+ height: 2.5em;
+ padding: 0.3125em;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ height: 2.5em;
+ width: 1.875em;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ line-height: 2.1em;
+}
+.oo-ui-toolGroup {
+ display: inline-block;
+ vertical-align: middle;
+ border-radius: 0;
+ border-right: 1px solid #dddddd;
+}
+.oo-ui-toolGroup-empty {
+ display: none;
+}
+.oo-ui-toolGroup .oo-ui-tool-link {
+ text-decoration: none;
+}
+.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup {
+ margin-left: 0;
+}
+.oo-ui-toolGroup .oo-ui-toolGroup .oo-ui-widget-enabled {
+ border-right: none !important;
+}
+.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
+.oo-ui-barToolGroup > .oo-ui-labelElement-label {
+ display: none;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+ cursor: pointer;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ display: inline-block;
+ position: relative;
+ vertical-align: top;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+ display: block;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel {
+ display: none;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: top;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-tool-title {
+ display: none;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement.oo-ui-tool-with-label > .oo-ui-tool-link .oo-ui-tool-title {
+ display: inline;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+ height: 1.875em;
+ padding: 0.625em;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ height: 1.875em;
+ width: 1.875em;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title {
+ line-height: 2.1em;
+ padding: 0 0.4em;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+ background-color: #eeeeee;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-tool-title {
+ color: #555555;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled {
+ border-color: rgba(0, 0, 0, 0.2);
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background-color: #e5e5e5;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled:hover {
+ background-color: #eeeeee;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-left-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-tool-title {
+ color: #cccccc;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.7;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.9;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:active {
+ background-color: #e7e7e7;
+}
+.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-tool-title {
+ color: #cccccc;
+}
+.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-popupToolGroup {
+ position: relative;
+ height: 3.125em;
+ min-width: 2em;
+}
+.oo-ui-popupToolGroup-handle {
+ display: block;
+ cursor: pointer;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
+ cursor: default;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+ display: none;
+ position: absolute;
+ z-index: 4;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
+ display: block;
+}
+.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
+ left: 0;
+}
+.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
+ right: 0;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link {
+ display: table;
+ width: 100%;
+ vertical-align: middle;
+ white-space: nowrap;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ display: table-cell;
+ vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
+ text-align: right;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel:not(:empty) {
+ padding-left: 3em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup {
+ min-width: 1.875em;
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement {
+ min-width: 3.125em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-iconElement {
+ min-width: 2.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+ min-width: 4.375em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+ min-width: 3.75em;
+}
+.oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ line-height: 2.6em;
+ margin: 0 1em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin: 0 0.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-left: 2.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-right: 2em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-right: 1.75em;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-enabled .oo-ui-popupToolGroup-handle:hover {
+ background-color: #eeeeee;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-enabled .oo-ui-popupToolGroup-handle:active {
+ background-color: #e5e5e5;
+}
+.oo-ui-popupToolGroup-handle {
+ padding: 0.3125em;
+ height: 2.5em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ height: 1.625em;
+ margin: 0.78125em 0.5em;
+ top: 0;
+ right: 0;
+ opacity: 0.3;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+ right: -0.3125em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ width: 1.875em;
+ height: 2.6em;
+ margin: 0.25em;
+ top: 0;
+ left: 0.3125em;
+ opacity: 0.7;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ left: 0;
+}
+.oo-ui-popupToolGroup-header {
+ line-height: 2.6em;
+ margin: 0 0.6em;
+ font-weight: bold;
+}
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background-color: #eeeeee;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+ top: 3.125em;
+ margin: 0 -1px;
+ border: 1px solid #cccccc;
+ background-color: #ffffff;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2);
+ min-width: 16em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link {
+ padding: 0.4em 0.625em;
+ box-sizing: border-box;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ height: 2.5em;
+ width: 1.875em;
+ min-width: 1.875em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ padding-left: 0.5em;
+ color: #000000;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ line-height: 2em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
+ color: #888888;
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+ display: block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+ cursor: pointer;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
+ border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+ background-color: #eeeeee;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:active {
+ background-color: #e7e7e7;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.9;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-color: rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background-color: #e5e5e5;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-top-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+ background-color: #eeeeee;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
+ color: #cccccc;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-accel {
+ color: #dddddd;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-listToolGroup.oo-ui-widget-disabled {
+ color: #cccccc;
+}
+.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
+.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+ display: block;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+ cursor: pointer;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+ min-width: 10em;
+}
+.oo-ui-toolbar-narrow .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+ min-width: 8.125em;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-image: none;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-image: url("themes/mediawiki/images/icons/check.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+ background-color: #eeeeee;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
+ color: #cccccc;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-menuToolGroup.oo-ui-widget-disabled {
+ color: #cccccc;
+}
+.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
+.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-toolbar {
+ clear: both;
+}
+.oo-ui-toolbar-bar {
+ line-height: 1em;
+ position: relative;
+}
+.oo-ui-toolbar-actions {
+ float: right;
+}
+.oo-ui-toolbar-actions .oo-ui-toolbar {
+ display: inline-block;
+}
+.oo-ui-toolbar-tools {
+ display: inline;
+ white-space: nowrap;
+}
+.oo-ui-toolbar-narrow .oo-ui-toolbar-tools {
+ white-space: normal;
+}
+.oo-ui-toolbar-tools .oo-ui-tool {
+ white-space: normal;
+}
+.oo-ui-toolbar-tools,
+.oo-ui-toolbar-actions,
+.oo-ui-toolbar-shadow {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-toolbar-actions .oo-ui-popupWidget {
+ -webkit-touch-callout: default;
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+}
+.oo-ui-toolbar-shadow {
+ background-position: left top;
+ background-repeat: repeat-x;
+ position: absolute;
+ width: 100%;
+ pointer-events: none;
+}
+.oo-ui-toolbar-bar {
+ border-bottom: 1px solid #cccccc;
+ background-color: #ffffff;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+ font-weight: 500;
+ color: #555555;
+}
+.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
+ border: none;
+ background: none;
+ box-shadow: none;
+}
+.oo-ui-toolbar-actions > .oo-ui-buttonElement {
+ margin-top: 0.25em;
+ margin-bottom: 0.25em;
+}
+.oo-ui-toolbar-actions > .oo-ui-toolbar,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement:last-child {
+ margin-right: 0.5em;
+}
+.oo-ui-optionWidget {
+ position: relative;
+ display: block;
+ cursor: pointer;
+ padding: 0.25em 0.5em;
+ border: none;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+ cursor: default;
+}
+.oo-ui-optionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ display: block;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+.oo-ui-optionWidget-highlighted {
+ background-color: #eeeeee;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+ line-height: 1.5em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected,
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed,
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted,
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
+ background-color: #d0d0d0;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+ color: #cccccc;
+}
+.oo-ui-decoratedOptionWidget {
+ padding: 0.5em 2em 0.5em 3em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ top: 0;
+ height: 100%;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ width: 1.875em;
+ left: 0.5em;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ right: 0.5em;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+}
+.oo-ui-buttonSelectWidget {
+ display: inline-block;
+ white-space: nowrap;
+ border-radius: 2px;
+ margin-right: 0.5em;
+}
+.oo-ui-buttonSelectWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-left: -1px;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: 2px;
+ border-top-left-radius: 2px;
+ margin-left: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: 2px;
+ border-top-right-radius: 2px;
+}
+.oo-ui-buttonOptionWidget {
+ display: inline-block;
+ padding: 0;
+ background-color: transparent;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ position: relative;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ position: static;
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ height: 1.875em;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ margin-top: 0;
+}
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
+ background-color: transparent;
+}
+.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+ opacity: 1;
+}
+.oo-ui-radioOptionWidget {
+ cursor: default;
+ padding: 0.25em 0;
+ background-color: transparent;
+}
+.oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-radioOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-radioOptionWidget.oo-ui-optionWidget-pressed,
+.oo-ui-radioOptionWidget.oo-ui-optionWidget-highlighted {
+ background-color: transparent;
+}
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ padding: 0.25em;
+ padding-left: 1em;
+}
+.oo-ui-radioOptionWidget .oo-ui-radioInputWidget {
+ margin-right: 0;
+}
+.oo-ui-labelWidget {
+ display: inline-block;
+}
+.oo-ui-iconWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+ line-height: 2.5em;
+ height: 1.875em;
+ width: 1.875em;
+}
+.oo-ui-iconWidget.oo-ui-widget-disabled {
+ opacity: 0.2;
+}
+.oo-ui-indicatorWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+ line-height: 2.5em;
+ height: 0.9375em;
+ width: 0.9375em;
+ margin: 0.46875em;
+}
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+ opacity: 0.2;
+}
+.oo-ui-buttonWidget {
+ display: inline-block;
+ vertical-align: middle;
+ margin-right: 0.5em;
+}
+.oo-ui-buttonWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonGroupWidget {
+ display: inline-block;
+ white-space: nowrap;
+ border-radius: 2px;
+ margin-right: 0.5em;
+}
+.oo-ui-buttonGroupWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement {
+ margin-right: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-left: -1px;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: 2px;
+ border-top-left-radius: 2px;
+ margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: 2px;
+ border-top-right-radius: 2px;
+}
+.oo-ui-toggleButtonWidget {
+ display: inline-block;
+ vertical-align: middle;
+ margin-right: 0.5em;
+}
+.oo-ui-toggleButtonWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-toggleSwitchWidget {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ overflow: hidden;
+ cursor: pointer;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-transform: translateZ(0px);
+ -moz-transform: translateZ(0px);
+ -ms-transform: translateZ(0px);
+ -o-transform: translateZ(0px);
+ transform: translateZ(0px);
+ height: 2em;
+ width: 4em;
+ border-radius: 1em;
+ border: 1px #dddddd solid;
+ margin-right: 0.5em;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+ cursor: default;
+}
+.oo-ui-toggleSwitchWidget-grip {
+ position: absolute;
+ display: block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+ display: none;
+}
+.oo-ui-toggleSwitchWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-toggleSwitchWidget-grip {
+ top: 0.25em;
+ left: 0.25em;
+ width: 1.5em;
+ height: 1.5em;
+ margin-top: -1px;
+ border-radius: 1em;
+ border: 1px #dddddd solid;
+ background-color: #f7f7f7;
+ -webkit-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+ -moz-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+ -ms-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+ -o-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+ transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+}
+.oo-ui-toggleSwitchWidget-glow {
+ border-radius: 1em;
+ background-color: #f7f7f7;
+ -webkit-transition: background-color 0.1s ease-in-out;
+ -moz-transition: background-color 0.1s ease-in-out;
+ -ms-transition: background-color 0.1s ease-in-out;
+ -o-transition: background-color 0.1s ease-in-out;
+ transition: background-color 0.1s ease-in-out;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+ left: 2.25em;
+ margin-left: -2px;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+ display: block;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
+ left: 0.25em;
+ margin-left: 0;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
+ border: 1px #cccccc solid;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover {
+ border-color: #aaaaaa;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip {
+ background-color: #ffffff;
+ border-color: #aaaaaa;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
+ background-color: #d0d0d0;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+ background-color: #ffffff;
+}
+.oo-ui-progressBarWidget {
+ max-width: 50em;
+ border: 1px solid #cccccc;
+ border-radius: 0.1em;
+ overflow: hidden;
+}
+.oo-ui-progressBarWidget-bar {
+ height: 1em;
+ background: #dddddd;
+ -webkit-transition: width 200ms, margin-left 200ms;
+ -moz-transition: width 200ms, margin-left 200ms;
+ -ms-transition: width 200ms, margin-left 200ms;
+ -o-transition: width 200ms, margin-left 200ms;
+ transition: width 200ms, margin-left 200ms;
+}
+.oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
+ -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ -ms-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ -o-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ width: 40%;
+ margin-left: -10%;
+ border-left-width: 1px;
+}
+.oo-ui-progressBarWidget.oo-ui-widget-disabled {
+ opacity: 0.6;
+}
+.oo-ui-actionWidget.oo-ui-pendingElement-pending {
+ background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-popupWidget {
+ position: absolute;
+ /* @noflip */
+ left: 0;
+}
+.oo-ui-popupWidget-popup {
+ position: relative;
+ overflow: hidden;
+ z-index: 1;
+}
+.oo-ui-popupWidget-anchor {
+ display: none;
+ z-index: 1;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
+ display: block;
+ position: absolute;
+ top: 0;
+ /* @noflip */
+ left: 0;
+ background-repeat: no-repeat;
+}
+.oo-ui-popupWidget-head {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+ float: right;
+}
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+ float: left;
+ cursor: default;
+}
+.oo-ui-popupWidget-body {
+ clear: both;
+ overflow: hidden;
+}
+.oo-ui-popupWidget-popup {
+ border: 1px solid #aaaaaa;
+ border-radius: 0.2em;
+ background-color: #ffffff;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
+ margin-top: 9px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before,
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+ content: "";
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-style: solid;
+ border-color: transparent;
+ border-top: 0;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before {
+ bottom: -10px;
+ left: -9px;
+ border-bottom-color: #888888;
+ border-width: 10px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+ bottom: -10px;
+ left: -8px;
+ border-bottom-color: #ffffff;
+ border-width: 9px;
+}
+.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
+ -webkit-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+ -moz-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+ -ms-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+ -o-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+ transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+}
+.oo-ui-popupWidget-head {
+ height: 2.5em;
+}
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+ margin: 0.25em;
+}
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+ margin: 0.75em 1em;
+}
+.oo-ui-popupWidget-body-padded {
+ padding: 0 1em;
+}
+.oo-ui-popupButtonWidget {
+ position: relative;
+}
+.oo-ui-popupButtonWidget .oo-ui-popupWidget {
+ position: absolute;
+ cursor: auto;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget {
+ /* @noflip */
+ left: 1em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+ /* @noflip */
+ left: 1.75em;
+}
+.oo-ui-inputWidget {
+ margin-right: 0.5em;
+}
+.oo-ui-inputWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonInputWidget {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-checkboxInputWidget {
+ position: relative;
+ line-height: 1.6em;
+ white-space: nowrap;
+}
+.oo-ui-checkboxInputWidget * {
+ font: inherit;
+ vertical-align: middle;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] {
+ opacity: 0;
+ z-index: 1;
+ position: relative;
+ margin: 0;
+ width: 1.6em;
+ height: 1.6em;
+ max-width: none;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] + span {
+ cursor: pointer;
+ -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: absolute;
+ left: 0;
+ border-radius: 2px;
+ width: 1.6em;
+ height: 1.6em;
+ background-color: white;
+ border: 1px solid #777777;
+ background-image: url("themes/mediawiki/images/icons/check-constructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png");
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-origin: border-box;
+ background-size: 0 0;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span {
+ background-size: 100% 100%;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span {
+ background-color: #dddddd;
+ border-color: #dddddd;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span {
+ border-width: 2px;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span,
+.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span {
+ border-bottom-width: 3px;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
+ cursor: default;
+ background-color: #eeeeee;
+ border-color: #eeeeee;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span {
+ background-image: url("themes/mediawiki/images/icons/check-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png");
+}
+.oo-ui-dropdownInputWidget {
+ position: relative;
+ vertical-align: middle;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ max-width: 50em;
+}
+.oo-ui-dropdownInputWidget select {
+ display: inline-block;
+ width: 100%;
+ resize: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-dropdownInputWidget select {
+ height: 2.5em;
+ padding: 0.5em;
+ font-size: inherit;
+ font-family: inherit;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid #cccccc;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover,
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus {
+ border-color: #aaaaaa;
+ outline: none;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-disabled select {
+ color: #cccccc;
+ border-color: #dddddd;
+ background-color: #f3f3f3;
+}
+.oo-ui-radioInputWidget {
+ position: relative;
+ line-height: 1.6em;
+ white-space: nowrap;
+}
+.oo-ui-radioInputWidget * {
+ font: inherit;
+ vertical-align: middle;
+}
+.oo-ui-radioInputWidget input[type="radio"] {
+ opacity: 0;
+ z-index: 1;
+ position: relative;
+ margin: 0;
+ width: 1.6em;
+ height: 1.6em;
+ max-width: none;
+}
+.oo-ui-radioInputWidget input[type="radio"] + span {
+ cursor: pointer;
+ -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: absolute;
+ left: 0;
+ border-radius: 100%;
+ width: 1.6em;
+ height: 1.6em;
+ background: white;
+ border: 1px solid #777777;
+ background-image: url("themes/mediawiki/images/icons/circle-constructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png");
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-origin: border-box;
+ background-size: 0 0;
+}
+.oo-ui-radioInputWidget input[type="radio"]:checked + span {
+ background-size: 100% 100%;
+}
+.oo-ui-radioInputWidget input[type="radio"]:active + span {
+ background-color: #dddddd;
+ border-color: #dddddd;
+}
+.oo-ui-radioInputWidget input[type="radio"]:focus + span {
+ border-width: 2px;
+}
+.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span,
+.oo-ui-radioInputWidget input[type="radio"]:hover + span {
+ border-bottom-width: 3px;
+}
+.oo-ui-radioInputWidget input[type="radio"]:disabled + span {
+ cursor: default;
+ background-color: #eeeeee;
+ border-color: #eeeeee;
+}
+.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span {
+ background-image: url("themes/mediawiki/images/icons/circle-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-invert.png");
+}
+.oo-ui-textInputWidget {
+ position: relative;
+ vertical-align: middle;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ max-width: 50em;
+}
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+ display: inline-block;
+ width: 100%;
+ resize: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+ display: none;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
+ display: block;
+ position: absolute;
+ top: 0;
+ height: 100%;
+ background-repeat: no-repeat;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
+ cursor: pointer;
+}
+.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
+ display: block;
+}
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
+ left: 0;
+}
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
+ right: 0;
+}
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+ position: absolute;
+ top: 0;
+}
+.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
+ right: 0;
+}
+.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label {
+ left: 0;
+}
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+ padding: 0.5em;
+ margin: 0;
+ font-size: inherit;
+ font-family: inherit;
+ background-color: #ffffff;
+ color: black;
+ border: solid 1px #cccccc;
+ box-shadow: inset 0 0 0 0 #347bff;
+ border-radius: 0.1em;
+ -webkit-transition: box-shadow 0.1s ease-in-out;
+ -moz-transition: box-shadow 0.1s ease-in-out;
+ -ms-transition: box-shadow 0.1s ease-in-out;
+ -o-transition: box-shadow 0.1s ease-in-out;
+ transition: box-shadow 0.1s ease-in-out;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-textInputWidget-decorated input,
+.oo-ui-textInputWidget-decorated textarea {
+ padding-left: 2em;
+}
+.oo-ui-textInputWidget-icon {
+ width: 2em;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
+ -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+ -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+ -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+ -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+ transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
+ outline: none;
+ border-color: #347bff;
+ box-shadow: inset 0 0 0 0.1em #347bff;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
+ color: #777777;
+ text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:focus {
+ border-color: #cccccc;
+ box-shadow: inset 0 0 0 0.1em #cccccc;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input,
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea {
+ border-color: red;
+ box-shadow: inset 0 0 0 0 red;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea:focus {
+ border-color: red;
+ box-shadow: inset 0 0 0 0.1em red;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled input,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
+ color: #cccccc;
+ text-shadow: 0 1px 1px #ffffff;
+ border-color: #dddddd;
+ background-color: #f3f3f3;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
+ color: #dddddd;
+ text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+ background-color: transparent;
+ background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-textInputWidget.oo-ui-iconElement input,
+.oo-ui-textInputWidget.oo-ui-iconElement textarea {
+ padding-left: 2.75em;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ left: 0.4em;
+ width: 1.875em;
+ margin-left: 0.1em;
+ height: 100%;
+ background-position: right center;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement input,
+.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
+ padding-right: 1.875em;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ margin: 0 0.775em;
+ height: 100%;
+}
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+ padding: 0.4em;
+ line-height: 1.5em;
+ color: #888888;
+}
+.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
+ margin-right: 2em;
+}
+.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
+ margin-left: 2.5em;
+}
+.oo-ui-menuSelectWidget {
+ position: absolute;
+ background: #ffffff;
+ margin-top: -1px;
+ border: 1px solid #aaaaaa;
+ border-radius: 0 0 0.2em 0.2em;
+ padding-bottom: 0.25em;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-menuSelectWidget input {
+ position: absolute;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ opacity: 0;
+}
+.oo-ui-menuOptionWidget {
+ position: relative;
+ padding: 0.5em 1em;
+}
+.oo-ui-menuOptionWidget .oo-ui-iconElement-icon {
+ display: none;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
+ background-color: transparent;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+ display: block;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
+ background-color: #d8e6fe;
+ color: rgba(0, 0, 0, 0.8);
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+ display: none;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
+ background-color: #eeeeee;
+ color: black;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
+ background-color: #d8e6fe;
+}
+.oo-ui-menuSectionOptionWidget {
+ cursor: default;
+ padding: 0.33em 0.75em;
+ color: #888888;
+}
+.oo-ui-dropdownWidget {
+ display: inline-block;
+ position: relative;
+ margin: 0.25em 0;
+ width: 100%;
+ max-width: 50em;
+ margin-right: 0.5em;
+}
+.oo-ui-dropdownWidget-handle {
+ width: 100%;
+ display: inline-block;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-dropdownWidget > .oo-ui-menuSelectWidget {
+ z-index: 1;
+ width: 100%;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+ cursor: default;
+}
+.oo-ui-dropdownWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-dropdownWidget-handle {
+ height: 2.5em;
+ border: 1px solid #cccccc;
+ border-radius: 0.1em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+ right: 0;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+ left: 0.25em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ line-height: 2.5em;
+ margin: 0 1em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+ top: 0;
+ width: 0.9375em;
+ height: 0.9375em;
+ margin: 0.775em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+ top: 0;
+ width: 1.875em;
+ height: 1.875em;
+ margin: 0.3em;
+}
+.oo-ui-dropdownWidget:hover .oo-ui-dropdownWidget-handle {
+ border-color: #aaaaaa;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+ color: #cccccc;
+ text-shadow: 0 1px 1px #ffffff;
+ border-color: #dddddd;
+ background-color: #f3f3f3;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+}
+.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+}
+.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ margin-right: 2em;
+}
+.oo-ui-dropdownWidget .oo-ui-selectWidget {
+ border-top-color: #ffffff;
+}
+.oo-ui-outlineOptionWidget {
+ position: relative;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ font-size: 1.1em;
+ padding: 0.75em;
+}
+.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
+}
+.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ opacity: 0.5;
+}
+.oo-ui-outlineOptionWidget-level-0 {
+ padding-left: 3.5em;
+}
+.oo-ui-outlineOptionWidget-level-0 .oo-ui-iconElement-icon {
+ left: 1em;
+}
+.oo-ui-outlineOptionWidget-level-1 {
+ padding-left: 5em;
+}
+.oo-ui-outlineOptionWidget-level-1 .oo-ui-iconElement-icon {
+ left: 2.5em;
+}
+.oo-ui-outlineOptionWidget-level-2 {
+ padding-left: 6.5em;
+}
+.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon {
+ left: 4em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected {
+ background-color: #d0d0d0;
+ text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important {
+ font-weight: bold;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-placeholder {
+ font-style: italic;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
+ opacity: 0.5;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
+ color: #777777;
+}
+.oo-ui-outlineControlsWidget {
+ height: 3em;
+ background-color: #ffffff;
+}
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+ float: left;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+ float: left;
+ background-position: right center;
+ background-repeat: no-repeat;
+}
+.oo-ui-outlineControlsWidget-items {
+ float: left;
+}
+.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
+ float: left;
+}
+.oo-ui-outlineControlsWidget-movers {
+ float: right;
+}
+.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
+ float: right;
+}
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+ height: 2em;
+ margin: 0.5em 0.5em 0.5em 0;
+ padding: 0;
+}
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+ width: 1.5em;
+ height: 2em;
+ margin: 0.5em 0 0.5em 0.5em;
+ opacity: 0.2;
+}
+.oo-ui-tabSelectWidget {
+ text-align: left;
+ white-space: nowrap;
+ overflow: hidden;
+ background-color: #dddddd;
+}
+.oo-ui-tabOptionWidget {
+ display: inline-block;
+ vertical-align: bottom;
+ padding: 0.35em 1em;
+ margin: 0.5em 0 0 0.75em;
+ border: 1px solid transparent;
+ border-bottom: none;
+ border-top-left-radius: 2px;
+ border-top-right-radius: 2px;
+ color: #666666;
+ font-weight: bold;
+}
+.oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover {
+ background-color: rgba(255, 255, 255, 0.3);
+}
+.oo-ui-tabOptionWidget.oo-ui-widget-enabled:active {
+ background-color: rgba(255, 255, 255, 0.8);
+}
+.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
+}
+.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ opacity: 0.5;
+}
+.oo-ui-selectWidget-pressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-selectWidget-depressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-tabOptionWidget.oo-ui-optionWidget-selected:hover {
+ background-color: #ffffff;
+ color: #333333;
+}
+.oo-ui-comboBoxWidget {
+ display: inline-block;
+ position: relative;
+ width: 100%;
+ max-width: 50em;
+ margin-right: 0.5em;
+}
+.oo-ui-comboBoxWidget > .oo-ui-menuSelectWidget {
+ z-index: 1;
+ width: 100%;
+}
+.oo-ui-comboBoxWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-comboBoxWidget .oo-ui-textInputWidget input,
+.oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
+ height: 2.35em;
+}
+.oo-ui-searchWidget-query {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+ width: 100%;
+}
+.oo-ui-searchWidget-results {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.oo-ui-searchWidget-query {
+ height: 4em;
+ padding: 0 1em;
+ border-bottom: 1px solid #cccccc;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+ margin: 0.75em 0;
+}
+.oo-ui-searchWidget-results {
+ top: 4em;
+ padding: 1em;
+ line-height: 0;
+}
+.oo-ui-window {
+ background: transparent;
+}
+.oo-ui-window-frame {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-window-content:focus {
+ outline: none;
+}
+.oo-ui-window-head,
+.oo-ui-window-foot {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-window-body {
+ margin: 0;
+ padding: 0;
+ background: none;
+}
+.oo-ui-window-overlay {
+ position: absolute;
+ top: 0;
+ /* @noflip */
+ left: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-head,
+.oo-ui-dialog-content > .oo-ui-window-body,
+.oo-ui-dialog-content > .oo-ui-window-foot {
+ position: absolute;
+ left: 0;
+ right: 0;
+ overflow: hidden;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-dialog-content > .oo-ui-window-head {
+ z-index: 1;
+ top: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-body {
+ z-index: 2;
+ top: 0;
+ bottom: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-foot {
+ z-index: 1;
+ bottom: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-body {
+ outline: 1px solid #aaaaaa;
+}
+.oo-ui-messageDialog-actions-horizontal {
+ display: table;
+ table-layout: fixed;
+ width: 100%;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+ display: table-cell;
+ width: 1%;
+}
+.oo-ui-messageDialog-actions-vertical {
+ display: block;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget {
+ position: relative;
+ text-align: center;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
+ display: block;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
+ position: relative;
+ top: auto;
+ bottom: auto;
+ display: inline;
+ white-space: nowrap;
+}
+.oo-ui-messageDialog-title,
+.oo-ui-messageDialog-message {
+ display: block;
+ text-align: center;
+ padding-top: 0.5em;
+}
+.oo-ui-messageDialog-title {
+ font-size: 1.5em;
+ line-height: 1em;
+ color: #000000;
+}
+.oo-ui-messageDialog-message {
+ font-size: 0.9em;
+ line-height: 1.25em;
+ color: #666666;
+}
+.oo-ui-messageDialog-message-verbose {
+ font-size: 1.1em;
+ line-height: 1.5em;
+ text-align: left;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+ border-right: 1px solid #e5e5e5;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
+ border-right-width: 0;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
+ border-bottom: 1px solid #e5e5e5;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
+ border-bottom-width: 0;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget {
+ height: 3.4em;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ text-align: center;
+ line-height: 3.4em;
+ padding: 0 2em;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
+ background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
+ background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
+ font-weight: bold;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
+ background-color: rgba(118, 171, 54, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+ background-color: rgba(118, 171, 54, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
+ background-color: rgba(212, 83, 83, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+ background-color: rgba(212, 83, 83, 0.1);
+}
+.oo-ui-processDialog-location {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.oo-ui-processDialog-title {
+ display: inline;
+ padding: 0;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
+ white-space: nowrap;
+}
+.oo-ui-processDialog-actions-safe,
+.oo-ui-processDialog-actions-primary {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+}
+.oo-ui-processDialog-actions-safe {
+ left: 0;
+}
+.oo-ui-processDialog-actions-primary {
+ right: 0;
+}
+.oo-ui-processDialog-errors {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 2;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.oo-ui-processDialog-content .oo-ui-window-head {
+ height: 3.4em;
+}
+.oo-ui-processDialog-content .oo-ui-window-head.oo-ui-pendingElement-pending {
+ background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-processDialog-content .oo-ui-window-body {
+ top: 3.4em;
+ outline: 1px solid rgba(0, 0, 0, 0.2);
+}
+.oo-ui-processDialog-navigation {
+ position: relative;
+ height: 3.4em;
+ padding: 0 1em;
+}
+.oo-ui-processDialog-location {
+ padding: 0.75em 0;
+ height: 1.875em;
+ cursor: default;
+ text-align: center;
+}
+.oo-ui-processDialog-title {
+ font-weight: bold;
+ line-height: 1.875em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
+ min-width: 1.875em;
+ min-height: 1.875em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
+ line-height: 1.875em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ margin-top: -0.125em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
+ margin: 0.75em 0 0.75em 0.75em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ padding: 0 1em;
+ vertical-align: middle;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
+ margin: 0.75em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ /* Adjust for border so text aligns with title */
+ margin: -1px;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
+ background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
+ background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
+ font-weight: bold;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
+ background-color: rgba(118, 171, 54, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+ background-color: rgba(118, 171, 54, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
+ background-color: rgba(212, 83, 83, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+ background-color: rgba(212, 83, 83, 0.1);
+}
+.oo-ui-processDialog > .oo-ui-window-frame {
+ min-height: 5em;
+}
+.oo-ui-processDialog-errors {
+ background-color: rgba(255, 255, 255, 0.9);
+ padding: 3em 3em 1.5em 3em;
+ text-align: center;
+}
+.oo-ui-processDialog-errors .oo-ui-buttonWidget {
+ margin: 2em 1em 2em 1em;
+}
+.oo-ui-processDialog-errors-title {
+ font-size: 1.5em;
+ color: #000000;
+ margin-bottom: 2em;
+}
+.oo-ui-processDialog-error {
+ text-align: left;
+ margin: 1em;
+ padding: 1em;
+ border: 1px solid #ff9e9e;
+ background-color: #fff7f7;
+ border-radius: 0.25em;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+ position: fixed;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-active {
+ width: auto;
+ height: auto;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1em;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
+ position: absolute;
+ right: 0;
+ left: 0;
+ margin: auto;
+ overflow: hidden;
+ max-width: 100%;
+ max-height: 100%;
+}
+.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ bottom: 0;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+ background-color: rgba(255, 255, 255, 0.5);
+ opacity: 0;
+ -webkit-transition: opacity 250ms ease-in-out;
+ -moz-transition: opacity 250ms ease-in-out;
+ -ms-transition: opacity 250ms ease-in-out;
+ -o-transition: opacity 250ms ease-in-out;
+ transition: opacity 250ms ease-in-out;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
+ top: 1em;
+ bottom: 1em;
+ background-color: #ffffff;
+ opacity: 0;
+ -webkit-transform: scale(0.5);
+ -moz-transform: scale(0.5);
+ -ms-transform: scale(0.5);
+ -o-transform: scale(0.5);
+ transform: scale(0.5);
+ -webkit-transition: all 250ms ease-in-out;
+ -moz-transition: all 250ms ease-in-out;
+ -ms-transition: all 250ms ease-in-out;
+ -o-transition: all 250ms ease-in-out;
+ transition: all 250ms ease-in-out;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
+ /* Fade window overlay */
+ opacity: 1;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+ /* Fade frame */
+ opacity: 1;
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+}
+.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
+ border: 1px solid #aaaaaa;
+ border-radius: 0.2em;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.css
new file mode 100644
index 00000000..63569f6e
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.css
@@ -0,0 +1,3204 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:44Z
+ */
+@-webkit-keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+@-moz-keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+@-ms-keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+@-o-keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+@keyframes oo-ui-progressBarWidget-slide {
+ from {
+ margin-left: -40%;
+ }
+ to {
+ margin-left: 100%;
+ }
+}
+/* @noflip */
+.oo-ui-rtl {
+ direction: rtl;
+}
+/* @noflip */
+.oo-ui-ltr {
+ direction: ltr;
+}
+.oo-ui-element-hidden {
+ display: none !important;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+ cursor: pointer;
+ display: inline-block;
+ vertical-align: middle;
+ font: inherit;
+ white-space: nowrap;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ display: none;
+}
+.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ cursor: default;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-buttonElement-frameless {
+ display: inline-block;
+ position: relative;
+}
+.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+ display: inline-block;
+ vertical-align: top;
+ text-align: center;
+}
+.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ cursor: default;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+ font-weight: bold;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: 0;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ height: 0.9375em;
+ margin: 0.46875em;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-left: 0.46875em;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ width: 1.875em;
+ height: 1.875em;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0 1px rgba(0, 0, 0, 0.2);
+ outline: none;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
+ margin-right: 0;
+}
+.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ margin-left: 0.25em;
+ margin-right: 0.25em;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #555555;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #444444;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+ color: #347bff;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #1f4999;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+ color: #00af89;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #005946;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+ color: #d11d13;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #777777;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #73100a;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ color: #cccccc;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+ margin: 0.1em 0;
+ padding: 0.2em 0.8em;
+ border-radius: 2px;
+ -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+ -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+ -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+ -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+ transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
+ outline: none;
+}
+.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ line-height: 1.875em;
+}
+.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: -0.5em;
+ margin-right: -0.5em;
+}
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-right: 0.3em;
+}
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ /* -0.5 - 0.475 */
+ margin-left: -0.005em;
+ margin-right: -0.005em;
+}
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-left: 0.46875em;
+ margin-right: -0.275em;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background: #dddddd;
+ border: 1px solid #dddddd;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
+ color: #555555;
+ background-color: #ffffff;
+ border: 1px solid #cdcdcd;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover {
+ background-color: #ebebeb;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ background-color: #d9d9d9;
+ border-color: #d9d9d9;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
+ color: #347bff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
+ background-color: rgba(52, 123, 255, 0.1);
+ border-color: rgba(31, 73, 153, 0.5);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #1f4999;
+ border-color: #1f4999;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #1f4999;
+ border-color: #1f4999;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+ color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
+ background-color: rgba(0, 171, 137, 0.1);
+ border-color: rgba(0, 89, 70, 0.5);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #005946;
+ border-color: #005946;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #005946;
+ border-color: #005946;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+ color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
+ background-color: rgba(209, 29, 19, 0.1);
+ border-color: rgba(115, 16, 10, 0.5);
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #73100a;
+ border-color: #73100a;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #73100a;
+ border-color: #73100a;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #347bff;
+ border-color: #347bff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {
+ background: #2962cc;
+ border-color: #2962cc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #ffffff;
+ border-color: #347bff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #1f4999;
+ border-color: #1f4999;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #00af89;
+ border-color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover {
+ background: #008064;
+ border-color: #008064;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #ffffff;
+ border-color: #00af89;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #005946;
+ border-color: #005946;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #d11d13;
+ border-color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover {
+ background: #8c130d;
+ border-color: #8c130d;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
+ box-shadow: inset 0 0 0 1px #ffffff;
+ border-color: #d11d13;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: #ffffff;
+ background-color: #73100a;
+ border-color: #73100a;
+ box-shadow: none;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: #999999;
+ color: #ffffff;
+}
+.oo-ui-clippableElement-clippable {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-draggableElement {
+ cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
+ /*
+ * HACK: In order to style horizontally, we must override
+ * OO.ui.OptionWidget's display rule that is currently set
+ * to be 'block'
+ */
+}
+.oo-ui-draggableElement-dragging {
+ cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move;
+ background: rgba(0, 0, 0, 0.2);
+ opacity: 0.4;
+}
+.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement.oo-ui-optionWidget {
+ display: inline-block;
+}
+.oo-ui-draggableGroupElement-placeholder {
+ position: absolute;
+ display: block;
+ background: rgba(0, 0, 0, 0.4);
+}
+.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-iconElement.oo-ui-iconElement-icon {
+ background-size: contain;
+ background-position: center center;
+}
+.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
+.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
+ background-size: contain;
+ background-position: center center;
+}
+.oo-ui-lookupElement > .oo-ui-menuSelectWidget {
+ z-index: 1;
+ width: 100%;
+}
+.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
+ overflow-y: hidden;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable {
+ overflow-y: auto;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded {
+ padding: 2em;
+}
+.oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 3em;
+ overflow-y: auto;
+}
+.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+}
+.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
+ padding: 1.5em;
+}
+.oo-ui-bookletLayout-outlinePanel {
+ border-right: 1px solid #dddddd;
+}
+.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
+ box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
+}
+.oo-ui-indexLayout > .oo-ui-menuLayout-menu {
+ height: 3em;
+}
+.oo-ui-indexLayout > .oo-ui-menuLayout-content {
+ top: 3em;
+}
+.oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout {
+ padding: 1.5em;
+}
+.oo-ui-fieldLayout {
+ display: block;
+ margin-bottom: 1em;
+}
+.oo-ui-fieldLayout:before,
+.oo-ui-fieldLayout:after {
+ content: " ";
+ display: table;
+}
+.oo-ui-fieldLayout:after {
+ clear: both;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ display: block;
+ float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ text-align: right;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body {
+ display: table;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ display: table-cell;
+ vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-top > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ display: inline-block;
+}
+.oo-ui-fieldLayout > .oo-ui-fieldLayout-help {
+ float: right;
+}
+.oo-ui-fieldLayout > .oo-ui-fieldLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+ z-index: 1;
+}
+.oo-ui-fieldLayout > .oo-ui-fieldLayout-help .oo-ui-fieldLayout-help-content {
+ padding: 0.5em 0.75em;
+ line-height: 1.5em;
+}
+.oo-ui-fieldLayout:last-child {
+ margin-bottom: 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding-top: 0.5em;
+ margin-right: 5%;
+ width: 35%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ width: 60%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding: 0.5em;
+ padding-left: 1em;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ padding: 0.5em 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding: 0.5em 0;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget {
+ margin-right: 0;
+ margin-top: 0.25em;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+ color: #cccccc;
+}
+.oo-ui-actionFieldLayout-field {
+ display: table;
+ table-layout: fixed;
+ width: 100%;
+}
+.oo-ui-actionFieldLayout-input,
+.oo-ui-actionFieldLayout-button {
+ display: table-cell;
+ vertical-align: middle;
+}
+.oo-ui-actionFieldLayout-input {
+ padding-right: 1em;
+}
+.oo-ui-actionFieldLayout-button {
+ width: 1%;
+ white-space: nowrap;
+}
+.oo-ui-fieldsetLayout {
+ position: relative;
+ margin: 0;
+ padding: 0;
+ border: none;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ display: block;
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
+ display: inline-block;
+}
+.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help {
+ float: right;
+}
+.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+ z-index: 1;
+}
+.oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-help .oo-ui-fieldsetLayout-help-content {
+ padding: 0.5em 0.75em;
+ line-height: 1.5em;
+}
+.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout,
+.oo-ui-fieldsetLayout + .oo-ui-formLayout {
+ margin-top: 2em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
+ font-size: 1.1em;
+ margin-bottom: 0.5em;
+ padding: 0.25em 0;
+ font-weight: bold;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
+ padding-left: 2em;
+ line-height: 1.8em;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ left: 0;
+ top: 0.25em;
+ width: 1.875em;
+ height: 1.875em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget {
+ margin-right: 0;
+}
+.oo-ui-fieldsetLayout > .oo-ui-popupButtonWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-formLayout + .oo-ui-fieldsetLayout,
+.oo-ui-formLayout + .oo-ui-formLayout {
+ margin-top: 2em;
+}
+.oo-ui-menuLayout {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-menuLayout-menu,
+.oo-ui-menuLayout-content {
+ position: absolute;
+ -webkit-transition: all ease-in-out 200ms;
+ -moz-transition: all ease-in-out 200ms;
+ -ms-transition: all ease-in-out 200ms;
+ -o-transition: all ease-in-out 200ms;
+ transition: all ease-in-out 200ms;
+}
+.oo-ui-menuLayout-menu {
+ height: 18em;
+ width: 18em;
+}
+.oo-ui-menuLayout-content {
+ top: 18em;
+ left: 18em;
+ right: 18em;
+ bottom: 18em;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-menu {
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-hideMenu .oo-ui-menuLayout-content {
+ top: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-menu {
+ width: auto !important;
+ left: 0;
+ top: 0;
+ right: 0;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-top .oo-ui-menuLayout-content {
+ right: 0 !important;
+ bottom: 0 !important;
+ left: 0 !important;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-menu {
+ height: auto !important;
+ top: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-after .oo-ui-menuLayout-content {
+ bottom: 0 !important;
+ left: 0 !important;
+ top: 0 !important;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-menu {
+ width: auto !important;
+ right: 0;
+ bottom: 0;
+ left: 0;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-bottom .oo-ui-menuLayout-content {
+ left: 0 !important;
+ top: 0 !important;
+ right: 0 !important;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-menu {
+ height: auto !important;
+ bottom: 0;
+ left: 0;
+ top: 0;
+}
+.oo-ui-menuLayout.oo-ui-menuLayout-showMenu.oo-ui-menuLayout-before .oo-ui-menuLayout-content {
+ top: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+}
+.oo-ui-panelLayout {
+ position: relative;
+}
+.oo-ui-panelLayout-scrollable {
+ overflow-y: auto;
+}
+.oo-ui-panelLayout-expanded {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-panelLayout-padded {
+ padding: 1.25em;
+}
+.oo-ui-panelLayout-framed {
+ border: 1px solid #aaaaaa;
+ border-radius: 0.2em;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
+ display: block;
+ position: relative;
+}
+.oo-ui-popupTool .oo-ui-popupWidget-popup,
+.oo-ui-popupTool .oo-ui-popupWidget-anchor {
+ z-index: 4;
+}
+.oo-ui-popupTool .oo-ui-popupWidget {
+ /* @noflip */
+ margin-left: 1.25em;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup {
+ border: 0;
+ border-radius: 0;
+ margin: 0;
+}
+.oo-ui-toolGroupTool > .oo-ui-toolGroup {
+ border-right: none;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle {
+ height: 2.5em;
+ padding: 0.3125em;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ height: 2.5em;
+ width: 1.875em;
+}
+.oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ line-height: 2.1em;
+}
+.oo-ui-toolGroup {
+ display: inline-block;
+ vertical-align: middle;
+ border-radius: 0;
+ border-right: 1px solid #dddddd;
+}
+.oo-ui-toolGroup-empty {
+ display: none;
+}
+.oo-ui-toolGroup .oo-ui-tool-link {
+ text-decoration: none;
+}
+.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup {
+ margin-left: 0;
+}
+.oo-ui-toolGroup .oo-ui-toolGroup .oo-ui-widget-enabled {
+ border-right: none !important;
+}
+.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
+.oo-ui-barToolGroup > .oo-ui-labelElement-label {
+ display: none;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+ cursor: pointer;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ display: inline-block;
+ position: relative;
+ vertical-align: top;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+ display: block;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-accel {
+ display: none;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: top;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement > .oo-ui-tool-link .oo-ui-tool-title {
+ display: none;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-iconElement.oo-ui-tool-with-label > .oo-ui-tool-link .oo-ui-tool-title {
+ display: inline;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link {
+ height: 1.875em;
+ padding: 0.625em;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ height: 1.875em;
+ width: 1.875em;
+}
+.oo-ui-barToolGroup > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title {
+ line-height: 2.1em;
+ padding: 0 0.4em;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+ background-color: #eeeeee;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-tool-title {
+ color: #555555;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled {
+ border-color: rgba(0, 0, 0, 0.2);
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background-color: #e5e5e5;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled:hover {
+ background-color: #eeeeee;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-left-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-tool-title {
+ color: #cccccc;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.7;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.9;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:active {
+ background-color: #e7e7e7;
+}
+.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-tool-title {
+ color: #cccccc;
+}
+.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > a.oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-popupToolGroup {
+ position: relative;
+ height: 3.125em;
+ min-width: 2em;
+}
+.oo-ui-popupToolGroup-handle {
+ display: block;
+ cursor: pointer;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
+ cursor: default;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+ display: none;
+ position: absolute;
+ z-index: 4;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
+ display: block;
+}
+.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
+ left: 0;
+}
+.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
+ right: 0;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link {
+ display: table;
+ width: 100%;
+ vertical-align: middle;
+ white-space: nowrap;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ display: table-cell;
+ vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
+ text-align: right;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel:not(:empty) {
+ padding-left: 3em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup {
+ min-width: 1.875em;
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement {
+ min-width: 3.125em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-iconElement {
+ min-width: 2.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+ min-width: 4.375em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+ min-width: 3.75em;
+}
+.oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ line-height: 2.6em;
+ margin: 0 1em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin: 0 0.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-left: 2.5em;
+}
+.oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-right: 2em;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-right: 1.75em;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-enabled .oo-ui-popupToolGroup-handle:hover {
+ background-color: #eeeeee;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-enabled .oo-ui-popupToolGroup-handle:active {
+ background-color: #e5e5e5;
+}
+.oo-ui-popupToolGroup-handle {
+ padding: 0.3125em;
+ height: 2.5em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ height: 1.625em;
+ margin: 0.78125em 0.5em;
+ top: 0;
+ right: 0;
+ opacity: 0.3;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+ right: -0.3125em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ width: 1.875em;
+ height: 2.6em;
+ margin: 0.25em;
+ top: 0;
+ left: 0.3125em;
+ opacity: 0.7;
+}
+.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ left: 0;
+}
+.oo-ui-popupToolGroup-header {
+ line-height: 2.6em;
+ margin: 0 0.6em;
+ font-weight: bold;
+}
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background-color: #eeeeee;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+ top: 3.125em;
+ margin: 0 -1px;
+ border: 1px solid #cccccc;
+ background-color: #ffffff;
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2);
+ min-width: 16em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link {
+ padding: 0.4em 0.625em;
+ box-sizing: border-box;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ height: 2.5em;
+ width: 1.875em;
+ min-width: 1.875em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ padding-left: 0.5em;
+ color: #000000;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ line-height: 2em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
+ color: #888888;
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+ display: block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+ cursor: pointer;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
+ border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+ background-color: #eeeeee;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:active {
+ background-color: #e7e7e7;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.9;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-color: rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background-color: #e5e5e5;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-top-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+ background-color: #eeeeee;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
+ color: #cccccc;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-accel {
+ color: #dddddd;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-listToolGroup.oo-ui-widget-disabled {
+ color: #cccccc;
+}
+.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
+.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+ display: block;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+ cursor: pointer;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+ min-width: 10em;
+}
+.oo-ui-toolbar-narrow .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+ min-width: 8.125em;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-image: none;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-image: url("themes/mediawiki/images/icons/check.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+ background-color: #eeeeee;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
+ color: #cccccc;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-menuToolGroup.oo-ui-widget-disabled {
+ color: #cccccc;
+}
+.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
+.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-toolbar {
+ clear: both;
+}
+.oo-ui-toolbar-bar {
+ line-height: 1em;
+ position: relative;
+}
+.oo-ui-toolbar-actions {
+ float: right;
+}
+.oo-ui-toolbar-actions .oo-ui-toolbar {
+ display: inline-block;
+}
+.oo-ui-toolbar-tools {
+ display: inline;
+ white-space: nowrap;
+}
+.oo-ui-toolbar-narrow .oo-ui-toolbar-tools {
+ white-space: normal;
+}
+.oo-ui-toolbar-tools .oo-ui-tool {
+ white-space: normal;
+}
+.oo-ui-toolbar-tools,
+.oo-ui-toolbar-actions,
+.oo-ui-toolbar-shadow {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-toolbar-actions .oo-ui-popupWidget {
+ -webkit-touch-callout: default;
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+}
+.oo-ui-toolbar-shadow {
+ background-position: left top;
+ background-repeat: repeat-x;
+ position: absolute;
+ width: 100%;
+ pointer-events: none;
+}
+.oo-ui-toolbar-bar {
+ border-bottom: 1px solid #cccccc;
+ background-color: #ffffff;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
+ font-weight: 500;
+ color: #555555;
+}
+.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
+ border: none;
+ background: none;
+ box-shadow: none;
+}
+.oo-ui-toolbar-actions > .oo-ui-buttonElement {
+ margin-top: 0.25em;
+ margin-bottom: 0.25em;
+}
+.oo-ui-toolbar-actions > .oo-ui-toolbar,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement:last-child {
+ margin-right: 0.5em;
+}
+.oo-ui-optionWidget {
+ position: relative;
+ display: block;
+ cursor: pointer;
+ padding: 0.25em 0.5em;
+ border: none;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+ cursor: default;
+}
+.oo-ui-optionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ display: block;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+.oo-ui-optionWidget-highlighted {
+ background-color: #eeeeee;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+ line-height: 1.5em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected,
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed,
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted,
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
+ background-color: #d0d0d0;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+ color: #cccccc;
+}
+.oo-ui-decoratedOptionWidget {
+ padding: 0.5em 2em 0.5em 3em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ top: 0;
+ height: 100%;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ width: 1.875em;
+ left: 0.5em;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ right: 0.5em;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+}
+.oo-ui-buttonSelectWidget {
+ display: inline-block;
+ white-space: nowrap;
+ border-radius: 2px;
+ margin-right: 0.5em;
+}
+.oo-ui-buttonSelectWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-left: -1px;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: 2px;
+ border-top-left-radius: 2px;
+ margin-left: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: 2px;
+ border-top-right-radius: 2px;
+}
+.oo-ui-buttonOptionWidget {
+ display: inline-block;
+ padding: 0;
+ background-color: transparent;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ position: relative;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ position: static;
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ height: 1.875em;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ margin-top: 0;
+}
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
+ background-color: transparent;
+}
+.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+ opacity: 1;
+}
+.oo-ui-radioOptionWidget {
+ cursor: default;
+ padding: 0.25em 0;
+ background-color: transparent;
+}
+.oo-ui-radioOptionWidget .oo-ui-radioInputWidget,
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-radioOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-radioOptionWidget.oo-ui-optionWidget-pressed,
+.oo-ui-radioOptionWidget.oo-ui-optionWidget-highlighted {
+ background-color: transparent;
+}
+.oo-ui-radioOptionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ padding: 0.25em;
+ padding-left: 1em;
+}
+.oo-ui-radioOptionWidget .oo-ui-radioInputWidget {
+ margin-right: 0;
+}
+.oo-ui-labelWidget {
+ display: inline-block;
+}
+.oo-ui-iconWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+ line-height: 2.5em;
+ height: 1.875em;
+ width: 1.875em;
+}
+.oo-ui-iconWidget.oo-ui-widget-disabled {
+ opacity: 0.2;
+}
+.oo-ui-indicatorWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+ line-height: 2.5em;
+ height: 0.9375em;
+ width: 0.9375em;
+ margin: 0.46875em;
+}
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+ opacity: 0.2;
+}
+.oo-ui-buttonWidget {
+ display: inline-block;
+ vertical-align: middle;
+ margin-right: 0.5em;
+}
+.oo-ui-buttonWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonGroupWidget {
+ display: inline-block;
+ white-space: nowrap;
+ border-radius: 2px;
+ margin-right: 0.5em;
+}
+.oo-ui-buttonGroupWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement {
+ margin-right: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-left: -1px;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: 2px;
+ border-top-left-radius: 2px;
+ margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: 2px;
+ border-top-right-radius: 2px;
+}
+.oo-ui-toggleButtonWidget {
+ display: inline-block;
+ vertical-align: middle;
+ margin-right: 0.5em;
+}
+.oo-ui-toggleButtonWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-toggleSwitchWidget {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ overflow: hidden;
+ cursor: pointer;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-transform: translateZ(0px);
+ -moz-transform: translateZ(0px);
+ -ms-transform: translateZ(0px);
+ -o-transform: translateZ(0px);
+ transform: translateZ(0px);
+ height: 2em;
+ width: 4em;
+ border-radius: 1em;
+ border: 1px #dddddd solid;
+ margin-right: 0.5em;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+ cursor: default;
+}
+.oo-ui-toggleSwitchWidget-grip {
+ position: absolute;
+ display: block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+ display: none;
+}
+.oo-ui-toggleSwitchWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-toggleSwitchWidget-grip {
+ top: 0.25em;
+ left: 0.25em;
+ width: 1.5em;
+ height: 1.5em;
+ margin-top: -1px;
+ border-radius: 1em;
+ border: 1px #dddddd solid;
+ background-color: #f7f7f7;
+ -webkit-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+ -moz-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+ -ms-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+ -o-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+ transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+}
+.oo-ui-toggleSwitchWidget-glow {
+ border-radius: 1em;
+ background-color: #f7f7f7;
+ -webkit-transition: background-color 0.1s ease-in-out;
+ -moz-transition: background-color 0.1s ease-in-out;
+ -ms-transition: background-color 0.1s ease-in-out;
+ -o-transition: background-color 0.1s ease-in-out;
+ transition: background-color 0.1s ease-in-out;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+ left: 2.25em;
+ margin-left: -2px;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+ display: block;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
+ left: 0.25em;
+ margin-left: 0;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
+ border: 1px #cccccc solid;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover {
+ border-color: #aaaaaa;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip {
+ background-color: #ffffff;
+ border-color: #aaaaaa;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
+ background-color: #d0d0d0;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+ background-color: #ffffff;
+}
+.oo-ui-progressBarWidget {
+ max-width: 50em;
+ border: 1px solid #cccccc;
+ border-radius: 0.1em;
+ overflow: hidden;
+}
+.oo-ui-progressBarWidget-bar {
+ height: 1em;
+ background: #dddddd;
+ -webkit-transition: width 200ms, margin-left 200ms;
+ -moz-transition: width 200ms, margin-left 200ms;
+ -ms-transition: width 200ms, margin-left 200ms;
+ -o-transition: width 200ms, margin-left 200ms;
+ transition: width 200ms, margin-left 200ms;
+}
+.oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
+ -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ -ms-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ -o-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+ width: 40%;
+ margin-left: -10%;
+ border-left-width: 1px;
+}
+.oo-ui-progressBarWidget.oo-ui-widget-disabled {
+ opacity: 0.6;
+}
+.oo-ui-actionWidget.oo-ui-pendingElement-pending {
+ background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-popupWidget {
+ position: absolute;
+ /* @noflip */
+ left: 0;
+}
+.oo-ui-popupWidget-popup {
+ position: relative;
+ overflow: hidden;
+ z-index: 1;
+}
+.oo-ui-popupWidget-anchor {
+ display: none;
+ z-index: 1;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
+ display: block;
+ position: absolute;
+ top: 0;
+ /* @noflip */
+ left: 0;
+ background-repeat: no-repeat;
+}
+.oo-ui-popupWidget-head {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+ float: right;
+}
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+ float: left;
+ cursor: default;
+}
+.oo-ui-popupWidget-body {
+ clear: both;
+ overflow: hidden;
+}
+.oo-ui-popupWidget-popup {
+ border: 1px solid #aaaaaa;
+ border-radius: 0.2em;
+ background-color: #ffffff;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
+ margin-top: 9px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before,
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+ content: "";
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-style: solid;
+ border-color: transparent;
+ border-top: 0;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before {
+ bottom: -10px;
+ left: -9px;
+ border-bottom-color: #888888;
+ border-width: 10px;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
+ bottom: -10px;
+ left: -8px;
+ border-bottom-color: #ffffff;
+ border-width: 9px;
+}
+.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
+ -webkit-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+ -moz-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+ -ms-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+ -o-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+ transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+}
+.oo-ui-popupWidget-head {
+ height: 2.5em;
+}
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+ margin: 0.25em;
+}
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+ margin: 0.75em 1em;
+}
+.oo-ui-popupWidget-body-padded {
+ padding: 0 1em;
+}
+.oo-ui-popupButtonWidget {
+ position: relative;
+}
+.oo-ui-popupButtonWidget .oo-ui-popupWidget {
+ position: absolute;
+ cursor: auto;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-frameless > .oo-ui-popupWidget {
+ /* @noflip */
+ left: 1em;
+}
+.oo-ui-popupButtonWidget.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+ /* @noflip */
+ left: 1.75em;
+}
+.oo-ui-inputWidget {
+ margin-right: 0.5em;
+}
+.oo-ui-inputWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-buttonInputWidget {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-checkboxInputWidget {
+ position: relative;
+ line-height: 1.6em;
+ white-space: nowrap;
+}
+.oo-ui-checkboxInputWidget * {
+ font: inherit;
+ vertical-align: middle;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] {
+ opacity: 0;
+ z-index: 1;
+ position: relative;
+ margin: 0;
+ width: 1.6em;
+ height: 1.6em;
+ max-width: none;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"] + span {
+ cursor: pointer;
+ -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: absolute;
+ left: 0;
+ border-radius: 2px;
+ width: 1.6em;
+ height: 1.6em;
+ background-color: white;
+ border: 1px solid #777777;
+ background-image: url("themes/mediawiki/images/icons/check-constructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png");
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-origin: border-box;
+ background-size: 0 0;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:checked + span {
+ background-size: 100% 100%;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:active + span {
+ background-color: #dddddd;
+ border-color: #dddddd;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus + span {
+ border-width: 2px;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:focus:hover + span,
+.oo-ui-checkboxInputWidget input[type="checkbox"]:hover + span {
+ border-bottom-width: 3px;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled + span {
+ cursor: default;
+ background-color: #eeeeee;
+ border-color: #eeeeee;
+}
+.oo-ui-checkboxInputWidget input[type="checkbox"]:disabled:checked + span {
+ background-image: url("themes/mediawiki/images/icons/check-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png");
+}
+.oo-ui-dropdownInputWidget {
+ position: relative;
+ vertical-align: middle;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ max-width: 50em;
+}
+.oo-ui-dropdownInputWidget select {
+ display: inline-block;
+ width: 100%;
+ resize: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-dropdownInputWidget select {
+ height: 2.5em;
+ padding: 0.5em;
+ font-size: inherit;
+ font-family: inherit;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid #cccccc;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover,
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus {
+ border-color: #aaaaaa;
+ outline: none;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-disabled select {
+ color: #cccccc;
+ border-color: #dddddd;
+ background-color: #f3f3f3;
+}
+.oo-ui-radioInputWidget {
+ position: relative;
+ line-height: 1.6em;
+ white-space: nowrap;
+}
+.oo-ui-radioInputWidget * {
+ font: inherit;
+ vertical-align: middle;
+}
+.oo-ui-radioInputWidget input[type="radio"] {
+ opacity: 0;
+ z-index: 1;
+ position: relative;
+ margin: 0;
+ width: 1.6em;
+ height: 1.6em;
+ max-width: none;
+}
+.oo-ui-radioInputWidget input[type="radio"] + span {
+ cursor: pointer;
+ -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ position: absolute;
+ left: 0;
+ border-radius: 100%;
+ width: 1.6em;
+ height: 1.6em;
+ background: white;
+ border: 1px solid #777777;
+ background-image: url("themes/mediawiki/images/icons/circle-constructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png");
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-origin: border-box;
+ background-size: 0 0;
+}
+.oo-ui-radioInputWidget input[type="radio"]:checked + span {
+ background-size: 100% 100%;
+}
+.oo-ui-radioInputWidget input[type="radio"]:active + span {
+ background-color: #dddddd;
+ border-color: #dddddd;
+}
+.oo-ui-radioInputWidget input[type="radio"]:focus + span {
+ border-width: 2px;
+}
+.oo-ui-radioInputWidget input[type="radio"]:focus:hover + span,
+.oo-ui-radioInputWidget input[type="radio"]:hover + span {
+ border-bottom-width: 3px;
+}
+.oo-ui-radioInputWidget input[type="radio"]:disabled + span {
+ cursor: default;
+ background-color: #eeeeee;
+ border-color: #eeeeee;
+}
+.oo-ui-radioInputWidget input[type="radio"]:disabled:checked + span {
+ background-image: url("themes/mediawiki/images/icons/circle-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-invert.png");
+}
+.oo-ui-textInputWidget {
+ position: relative;
+ vertical-align: middle;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 100%;
+ max-width: 50em;
+}
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+ display: inline-block;
+ width: 100%;
+ resize: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+ display: none;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
+ display: block;
+ position: absolute;
+ top: 0;
+ height: 100%;
+ background-repeat: no-repeat;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
+ cursor: pointer;
+}
+.oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
+ display: block;
+}
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
+ left: 0;
+}
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
+ right: 0;
+}
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+ position: absolute;
+ top: 0;
+}
+.oo-ui-textInputWidget-labelPosition-after > .oo-ui-labelElement-label {
+ right: 0;
+}
+.oo-ui-textInputWidget-labelPosition-before > .oo-ui-labelElement-label {
+ left: 0;
+}
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+ padding: 0.5em;
+ margin: 0;
+ font-size: inherit;
+ font-family: inherit;
+ background-color: #ffffff;
+ color: black;
+ border: solid 1px #cccccc;
+ box-shadow: inset 0 0 0 0 #347bff;
+ border-radius: 0.1em;
+ -webkit-transition: box-shadow 0.1s ease-in-out;
+ -moz-transition: box-shadow 0.1s ease-in-out;
+ -ms-transition: box-shadow 0.1s ease-in-out;
+ -o-transition: box-shadow 0.1s ease-in-out;
+ transition: box-shadow 0.1s ease-in-out;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-textInputWidget-decorated input,
+.oo-ui-textInputWidget-decorated textarea {
+ padding-left: 2em;
+}
+.oo-ui-textInputWidget-icon {
+ width: 2em;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
+ -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+ -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+ -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+ -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+ transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
+ outline: none;
+ border-color: #347bff;
+ box-shadow: inset 0 0 0 0.1em #347bff;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
+ color: #777777;
+ text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:focus {
+ border-color: #cccccc;
+ box-shadow: inset 0 0 0 0.1em #cccccc;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input,
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea {
+ border-color: red;
+ box-shadow: inset 0 0 0 0 red;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea:focus {
+ border-color: red;
+ box-shadow: inset 0 0 0 0.1em red;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled input,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
+ color: #cccccc;
+ text-shadow: 0 1px 1px #ffffff;
+ border-color: #dddddd;
+ background-color: #f3f3f3;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+}
+.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
+ color: #dddddd;
+ text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
+.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
+ background-color: transparent;
+ background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-textInputWidget.oo-ui-iconElement input,
+.oo-ui-textInputWidget.oo-ui-iconElement textarea {
+ padding-left: 2.75em;
+}
+.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ left: 0.4em;
+ width: 1.875em;
+ margin-left: 0.1em;
+ height: 100%;
+ background-position: right center;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement input,
+.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
+ padding-right: 1.875em;
+}
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ margin: 0 0.775em;
+ height: 100%;
+}
+.oo-ui-textInputWidget > .oo-ui-labelElement-label {
+ padding: 0.4em;
+ line-height: 1.5em;
+ color: #888888;
+}
+.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
+ margin-right: 2em;
+}
+.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
+ margin-left: 2.5em;
+}
+.oo-ui-menuSelectWidget {
+ position: absolute;
+ background: #ffffff;
+ margin-top: -1px;
+ border: 1px solid #aaaaaa;
+ border-radius: 0 0 0.2em 0.2em;
+ padding-bottom: 0.25em;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+}
+.oo-ui-menuSelectWidget input {
+ position: absolute;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ opacity: 0;
+}
+.oo-ui-menuOptionWidget {
+ position: relative;
+ padding: 0.5em 1em;
+}
+.oo-ui-menuOptionWidget .oo-ui-iconElement-icon {
+ display: none;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
+ background-color: transparent;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+ display: block;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
+ background-color: #d8e6fe;
+ color: rgba(0, 0, 0, 0.8);
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+ display: none;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
+ background-color: #eeeeee;
+ color: black;
+}
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
+ background-color: #d8e6fe;
+}
+.oo-ui-menuSectionOptionWidget {
+ cursor: default;
+ padding: 0.33em 0.75em;
+ color: #888888;
+}
+.oo-ui-dropdownWidget {
+ display: inline-block;
+ position: relative;
+ margin: 0.25em 0;
+ width: 100%;
+ max-width: 50em;
+ margin-right: 0.5em;
+}
+.oo-ui-dropdownWidget-handle {
+ width: 100%;
+ display: inline-block;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-dropdownWidget > .oo-ui-menuSelectWidget {
+ z-index: 1;
+ width: 100%;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+ cursor: default;
+}
+.oo-ui-dropdownWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-dropdownWidget-handle {
+ height: 2.5em;
+ border: 1px solid #cccccc;
+ border-radius: 0.1em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+ right: 0;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+ left: 0.25em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ line-height: 2.5em;
+ margin: 0 1em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+ top: 0;
+ width: 0.9375em;
+ height: 0.9375em;
+ margin: 0.775em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+ top: 0;
+ width: 1.875em;
+ height: 1.875em;
+ margin: 0.3em;
+}
+.oo-ui-dropdownWidget:hover .oo-ui-dropdownWidget-handle {
+ border-color: #aaaaaa;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+ color: #cccccc;
+ text-shadow: 0 1px 1px #ffffff;
+ border-color: #dddddd;
+ background-color: #f3f3f3;
+}
+.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+}
+.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+}
+.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ margin-right: 2em;
+}
+.oo-ui-dropdownWidget .oo-ui-selectWidget {
+ border-top-color: #ffffff;
+}
+.oo-ui-outlineOptionWidget {
+ position: relative;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ font-size: 1.1em;
+ padding: 0.75em;
+}
+.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
+}
+.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ opacity: 0.5;
+}
+.oo-ui-outlineOptionWidget-level-0 {
+ padding-left: 3.5em;
+}
+.oo-ui-outlineOptionWidget-level-0 .oo-ui-iconElement-icon {
+ left: 1em;
+}
+.oo-ui-outlineOptionWidget-level-1 {
+ padding-left: 5em;
+}
+.oo-ui-outlineOptionWidget-level-1 .oo-ui-iconElement-icon {
+ left: 2.5em;
+}
+.oo-ui-outlineOptionWidget-level-2 {
+ padding-left: 6.5em;
+}
+.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon {
+ left: 4em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-outlineOptionWidget.oo-ui-optionWidget-selected {
+ background-color: #d0d0d0;
+ text-shadow: 0 1px 1px #ffffff;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important {
+ font-weight: bold;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-placeholder {
+ font-style: italic;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
+ opacity: 0.5;
+}
+.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
+ color: #777777;
+}
+.oo-ui-outlineControlsWidget {
+ height: 3em;
+ background-color: #ffffff;
+}
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+ float: left;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+ float: left;
+ background-position: right center;
+ background-repeat: no-repeat;
+}
+.oo-ui-outlineControlsWidget-items {
+ float: left;
+}
+.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
+ float: left;
+}
+.oo-ui-outlineControlsWidget-movers {
+ float: right;
+}
+.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
+ float: right;
+}
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+ height: 2em;
+ margin: 0.5em 0.5em 0.5em 0;
+ padding: 0;
+}
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+ width: 1.5em;
+ height: 2em;
+ margin: 0.5em 0 0.5em 0.5em;
+ opacity: 0.2;
+}
+.oo-ui-tabSelectWidget {
+ text-align: left;
+ white-space: nowrap;
+ overflow: hidden;
+ background-color: #dddddd;
+}
+.oo-ui-tabOptionWidget {
+ display: inline-block;
+ vertical-align: bottom;
+ padding: 0.35em 1em;
+ margin: 0.5em 0 0 0.75em;
+ border: 1px solid transparent;
+ border-bottom: none;
+ border-top-left-radius: 2px;
+ border-top-right-radius: 2px;
+ color: #666666;
+ font-weight: bold;
+}
+.oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover {
+ background-color: rgba(255, 255, 255, 0.3);
+}
+.oo-ui-tabOptionWidget.oo-ui-widget-enabled:active {
+ background-color: rgba(255, 255, 255, 0.8);
+}
+.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
+}
+.oo-ui-tabOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ opacity: 0.5;
+}
+.oo-ui-selectWidget-pressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-selectWidget-depressed .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-tabOptionWidget.oo-ui-optionWidget-selected:hover {
+ background-color: #ffffff;
+ color: #333333;
+}
+.oo-ui-comboBoxWidget {
+ display: inline-block;
+ position: relative;
+ width: 100%;
+ max-width: 50em;
+ margin-right: 0.5em;
+}
+.oo-ui-comboBoxWidget > .oo-ui-menuSelectWidget {
+ z-index: 1;
+ width: 100%;
+}
+.oo-ui-comboBoxWidget:last-child {
+ margin-right: 0;
+}
+.oo-ui-comboBoxWidget .oo-ui-textInputWidget input,
+.oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
+ height: 2.35em;
+}
+.oo-ui-searchWidget-query {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+ width: 100%;
+}
+.oo-ui-searchWidget-results {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.oo-ui-searchWidget-query {
+ height: 4em;
+ padding: 0 1em;
+ border-bottom: 1px solid #cccccc;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+ margin: 0.75em 0;
+}
+.oo-ui-searchWidget-results {
+ top: 4em;
+ padding: 1em;
+ line-height: 0;
+}
+.oo-ui-window {
+ background: transparent;
+}
+.oo-ui-window-frame {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-window-content:focus {
+ outline: none;
+}
+.oo-ui-window-head,
+.oo-ui-window-foot {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-window-body {
+ margin: 0;
+ padding: 0;
+ background: none;
+}
+.oo-ui-window-overlay {
+ position: absolute;
+ top: 0;
+ /* @noflip */
+ left: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-head,
+.oo-ui-dialog-content > .oo-ui-window-body,
+.oo-ui-dialog-content > .oo-ui-window-foot {
+ position: absolute;
+ left: 0;
+ right: 0;
+ overflow: hidden;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-dialog-content > .oo-ui-window-head {
+ z-index: 1;
+ top: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-body {
+ z-index: 2;
+ top: 0;
+ bottom: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-foot {
+ z-index: 1;
+ bottom: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-body {
+ outline: 1px solid #aaaaaa;
+}
+.oo-ui-messageDialog-actions-horizontal {
+ display: table;
+ table-layout: fixed;
+ width: 100%;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+ display: table-cell;
+ width: 1%;
+}
+.oo-ui-messageDialog-actions-vertical {
+ display: block;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget {
+ position: relative;
+ text-align: center;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
+ display: block;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
+ position: relative;
+ top: auto;
+ bottom: auto;
+ display: inline;
+ white-space: nowrap;
+}
+.oo-ui-messageDialog-title,
+.oo-ui-messageDialog-message {
+ display: block;
+ text-align: center;
+ padding-top: 0.5em;
+}
+.oo-ui-messageDialog-title {
+ font-size: 1.5em;
+ line-height: 1em;
+ color: #000000;
+}
+.oo-ui-messageDialog-message {
+ font-size: 0.9em;
+ line-height: 1.25em;
+ color: #666666;
+}
+.oo-ui-messageDialog-message-verbose {
+ font-size: 1.1em;
+ line-height: 1.5em;
+ text-align: left;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+ border-right: 1px solid #e5e5e5;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
+ border-right-width: 0;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
+ border-bottom: 1px solid #e5e5e5;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
+ border-bottom-width: 0;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget {
+ height: 3.4em;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ text-align: center;
+ line-height: 3.4em;
+ padding: 0 2em;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
+ background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
+ background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
+ font-weight: bold;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
+ background-color: rgba(118, 171, 54, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+ background-color: rgba(118, 171, 54, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
+ background-color: rgba(212, 83, 83, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+ background-color: rgba(212, 83, 83, 0.1);
+}
+.oo-ui-processDialog-location {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.oo-ui-processDialog-title {
+ display: inline;
+ padding: 0;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
+ white-space: nowrap;
+}
+.oo-ui-processDialog-actions-safe,
+.oo-ui-processDialog-actions-primary {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+}
+.oo-ui-processDialog-actions-safe {
+ left: 0;
+}
+.oo-ui-processDialog-actions-primary {
+ right: 0;
+}
+.oo-ui-processDialog-errors {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 2;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.oo-ui-processDialog-content .oo-ui-window-head {
+ height: 3.4em;
+}
+.oo-ui-processDialog-content .oo-ui-window-head.oo-ui-pendingElement-pending {
+ background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
+.oo-ui-processDialog-content .oo-ui-window-body {
+ top: 3.4em;
+ outline: 1px solid rgba(0, 0, 0, 0.2);
+}
+.oo-ui-processDialog-navigation {
+ position: relative;
+ height: 3.4em;
+ padding: 0 1em;
+}
+.oo-ui-processDialog-location {
+ padding: 0.75em 0;
+ height: 1.875em;
+ cursor: default;
+ text-align: center;
+}
+.oo-ui-processDialog-title {
+ font-weight: bold;
+ line-height: 1.875em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
+ min-width: 1.875em;
+ min-height: 1.875em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
+ line-height: 1.875em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ margin-top: -0.125em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
+ margin: 0.75em 0 0.75em 0.75em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ padding: 0 1em;
+ vertical-align: middle;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
+ margin: 0.75em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ /* Adjust for border so text aligns with title */
+ margin: -1px;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover {
+ background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active {
+ background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label {
+ font-weight: bold;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
+ background-color: rgba(118, 171, 54, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+ background-color: rgba(118, 171, 54, 0.1);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
+ background-color: rgba(212, 83, 83, 0.05);
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+ background-color: rgba(212, 83, 83, 0.1);
+}
+.oo-ui-processDialog > .oo-ui-window-frame {
+ min-height: 5em;
+}
+.oo-ui-processDialog-errors {
+ background-color: rgba(255, 255, 255, 0.9);
+ padding: 3em 3em 1.5em 3em;
+ text-align: center;
+}
+.oo-ui-processDialog-errors .oo-ui-buttonWidget {
+ margin: 2em 1em 2em 1em;
+}
+.oo-ui-processDialog-errors-title {
+ font-size: 1.5em;
+ color: #000000;
+ margin-bottom: 2em;
+}
+.oo-ui-processDialog-error {
+ text-align: left;
+ margin: 1em;
+ padding: 1em;
+ border: 1px solid #ff9e9e;
+ background-color: #fff7f7;
+ border-radius: 0.25em;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+ position: fixed;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-active {
+ width: auto;
+ height: auto;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1em;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
+ position: absolute;
+ right: 0;
+ left: 0;
+ margin: auto;
+ overflow: hidden;
+ max-width: 100%;
+ max-height: 100%;
+}
+.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ bottom: 0;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+ background-color: rgba(255, 255, 255, 0.5);
+ opacity: 0;
+ -webkit-transition: opacity 250ms ease-in-out;
+ -moz-transition: opacity 250ms ease-in-out;
+ -ms-transition: opacity 250ms ease-in-out;
+ -o-transition: opacity 250ms ease-in-out;
+ transition: opacity 250ms ease-in-out;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
+ top: 1em;
+ bottom: 1em;
+ background-color: #ffffff;
+ opacity: 0;
+ -webkit-transform: scale(0.5);
+ -moz-transform: scale(0.5);
+ -ms-transform: scale(0.5);
+ -o-transform: scale(0.5);
+ transform: scale(0.5);
+ -webkit-transition: all 250ms ease-in-out;
+ -moz-transition: all 250ms ease-in-out;
+ -ms-transition: all 250ms ease-in-out;
+ -o-transition: all 250ms ease-in-out;
+ transition: all 250ms ease-in-out;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
+ /* Fade window overlay */
+ opacity: 1;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+ /* Fade frame */
+ opacity: 1;
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+}
+.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
+ border: 1px solid #aaaaaa;
+ border-radius: 0.2em;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+}
+
+.oo-ui-icon-add {
+ background-image: url("themes/mediawiki/images/icons/add.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add.png");
+}
+.oo-ui-image-constructive .oo-ui-icon-add,
+.oo-ui-image-constructive.oo-ui-icon-add {
+ background-image: url("themes/mediawiki/images/icons/add-constructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-constructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-constructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add-constructive.png");
+}
+.oo-ui-image-invert .oo-ui-icon-add,
+.oo-ui-image-invert.oo-ui-icon-add {
+ background-image: url("themes/mediawiki/images/icons/add-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/add-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/add-invert.png");
+}
+.oo-ui-icon-advanced {
+ background-image: url("themes/mediawiki/images/icons/advanced.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/advanced.png");
+}
+.oo-ui-image-invert .oo-ui-icon-advanced,
+.oo-ui-image-invert.oo-ui-icon-advanced {
+ background-image: url("themes/mediawiki/images/icons/advanced-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/advanced-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/advanced-invert.png");
+}
+.oo-ui-icon-alert {
+ background-image: url("themes/mediawiki/images/icons/alert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert.png");
+}
+.oo-ui-image-warning .oo-ui-icon-alert,
+.oo-ui-image-warning.oo-ui-icon-alert {
+ background-image: url("themes/mediawiki/images/icons/alert-warning.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-warning.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-warning.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert-warning.png");
+}
+.oo-ui-image-invert .oo-ui-icon-alert,
+.oo-ui-image-invert.oo-ui-icon-alert {
+ background-image: url("themes/mediawiki/images/icons/alert-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/alert-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/alert-invert.png");
+}
+.oo-ui-icon-cancel {
+ background-image: url("themes/mediawiki/images/icons/cancel.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/cancel.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/cancel.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/cancel.png");
+}
+.oo-ui-image-invert .oo-ui-icon-cancel,
+.oo-ui-image-invert.oo-ui-icon-cancel {
+ background-image: url("themes/mediawiki/images/icons/cancel-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/cancel-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/cancel-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/cancel-invert.png");
+}
+.oo-ui-icon-check {
+ background-image: url("themes/mediawiki/images/icons/check.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
+}
+.oo-ui-image-constructive .oo-ui-icon-check,
+.oo-ui-image-constructive.oo-ui-icon-check {
+ background-image: url("themes/mediawiki/images/icons/check-constructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-constructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-constructive.png");
+}
+.oo-ui-image-progressive .oo-ui-icon-check,
+.oo-ui-image-progressive.oo-ui-icon-check {
+ background-image: url("themes/mediawiki/images/icons/check-progressive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-progressive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-progressive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-progressive.png");
+}
+.oo-ui-image-invert .oo-ui-icon-check,
+.oo-ui-image-invert.oo-ui-icon-check {
+ background-image: url("themes/mediawiki/images/icons/check-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check-invert.png");
+}
+.oo-ui-icon-circle {
+ background-image: url("themes/mediawiki/images/icons/circle.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle.png");
+}
+.oo-ui-image-constructive .oo-ui-icon-circle,
+.oo-ui-image-constructive.oo-ui-icon-circle {
+ background-image: url("themes/mediawiki/images/icons/circle-constructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-constructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-constructive.png");
+}
+.oo-ui-image-invert .oo-ui-icon-circle,
+.oo-ui-image-invert.oo-ui-icon-circle {
+ background-image: url("themes/mediawiki/images/icons/circle-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/circle-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/circle-invert.png");
+}
+.oo-ui-icon-close {
+ background-image: url("themes/mediawiki/images/icons/close-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/close-ltr.png");
+}
+.oo-ui-image-invert .oo-ui-icon-close,
+.oo-ui-image-invert.oo-ui-icon-close {
+ background-image: url("themes/mediawiki/images/icons/close-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/close-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/close-ltr-invert.png");
+}
+.oo-ui-icon-code {
+ background-image: url("themes/mediawiki/images/icons/code.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/code.png");
+}
+.oo-ui-image-invert .oo-ui-icon-code,
+.oo-ui-image-invert.oo-ui-icon-code {
+ background-image: url("themes/mediawiki/images/icons/code-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/code-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/code-invert.png");
+}
+.oo-ui-icon-collapse {
+ background-image: url("themes/mediawiki/images/icons/collapse.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/collapse.png");
+}
+.oo-ui-image-invert .oo-ui-icon-collapse,
+.oo-ui-image-invert.oo-ui-icon-collapse {
+ background-image: url("themes/mediawiki/images/icons/collapse-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/collapse-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/collapse-invert.png");
+}
+.oo-ui-icon-comment {
+ background-image: url("themes/mediawiki/images/icons/comment.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/comment.png");
+}
+.oo-ui-image-invert .oo-ui-icon-comment,
+.oo-ui-image-invert.oo-ui-icon-comment {
+ background-image: url("themes/mediawiki/images/icons/comment-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/comment-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/comment-invert.png");
+}
+.oo-ui-icon-ellipsis {
+ background-image: url("themes/mediawiki/images/icons/ellipsis.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ellipsis.png");
+}
+.oo-ui-image-invert .oo-ui-icon-ellipsis,
+.oo-ui-image-invert.oo-ui-icon-ellipsis {
+ background-image: url("themes/mediawiki/images/icons/ellipsis-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/ellipsis-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/ellipsis-invert.png");
+}
+.oo-ui-icon-expand {
+ background-image: url("themes/mediawiki/images/icons/expand.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/expand.png");
+}
+.oo-ui-image-invert .oo-ui-icon-expand,
+.oo-ui-image-invert.oo-ui-icon-expand {
+ background-image: url("themes/mediawiki/images/icons/expand-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/expand-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/expand-invert.png");
+}
+.oo-ui-icon-help {
+ background-image: url("themes/mediawiki/images/icons/help-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
+}
+/* @noflip */
+.oo-ui-icon-help:lang(he) {
+ background-image: url("themes/mediawiki/images/icons/help-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
+}
+/* @noflip */
+.oo-ui-icon-help:lang(yi) {
+ background-image: url("themes/mediawiki/images/icons/help-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr.png");
+}
+.oo-ui-image-invert .oo-ui-icon-help,
+.oo-ui-image-invert.oo-ui-icon-help {
+ background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
+}
+/* @noflip */
+.oo-ui-image-invert .oo-ui-icon-help:lang(he),
+.oo-ui-image-invert.oo-ui-icon-help:lang(he) {
+ background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
+}
+/* @noflip */
+.oo-ui-image-invert .oo-ui-icon-help:lang(yi),
+.oo-ui-image-invert.oo-ui-icon-help:lang(yi) {
+ background-image: url("themes/mediawiki/images/icons/help-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/help-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/help-ltr-invert.png");
+}
+.oo-ui-icon-history {
+ background-image: url("themes/mediawiki/images/icons/history.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/history.png");
+}
+.oo-ui-image-invert .oo-ui-icon-history,
+.oo-ui-image-invert.oo-ui-icon-history {
+ background-image: url("themes/mediawiki/images/icons/history-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/history-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/history-invert.png");
+}
+.oo-ui-icon-info {
+ background-image: url("themes/mediawiki/images/icons/info.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/info.png");
+}
+.oo-ui-image-invert .oo-ui-icon-info,
+.oo-ui-image-invert.oo-ui-icon-info {
+ background-image: url("themes/mediawiki/images/icons/info-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/info-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/info-invert.png");
+}
+.oo-ui-icon-menu {
+ background-image: url("themes/mediawiki/images/icons/menu.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/menu.png");
+}
+.oo-ui-image-invert .oo-ui-icon-menu,
+.oo-ui-image-invert.oo-ui-icon-menu {
+ background-image: url("themes/mediawiki/images/icons/menu-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/menu-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/menu-invert.png");
+}
+.oo-ui-icon-next {
+ background-image: url("themes/mediawiki/images/icons/move-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-ltr.png");
+}
+.oo-ui-image-invert .oo-ui-icon-next,
+.oo-ui-image-invert.oo-ui-icon-next {
+ background-image: url("themes/mediawiki/images/icons/move-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-ltr-invert.png");
+}
+.oo-ui-icon-picture {
+ background-image: url("themes/mediawiki/images/icons/picture.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/picture.png");
+}
+.oo-ui-image-invert .oo-ui-icon-picture,
+.oo-ui-image-invert.oo-ui-icon-picture {
+ background-image: url("themes/mediawiki/images/icons/picture-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/picture-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/picture-invert.png");
+}
+.oo-ui-icon-previous {
+ background-image: url("themes/mediawiki/images/icons/move-rtl.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-rtl.png");
+}
+.oo-ui-image-invert .oo-ui-icon-previous,
+.oo-ui-image-invert.oo-ui-icon-previous {
+ background-image: url("themes/mediawiki/images/icons/move-rtl-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/move-rtl-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/move-rtl-invert.png");
+}
+.oo-ui-icon-redo {
+ background-image: url("themes/mediawiki/images/icons/arched-arrow-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-ltr.png");
+}
+.oo-ui-image-invert .oo-ui-icon-redo,
+.oo-ui-image-invert.oo-ui-icon-redo {
+ background-image: url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-ltr-invert.png");
+}
+.oo-ui-icon-remove {
+ background-image: url("themes/mediawiki/images/icons/remove.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove.png");
+}
+.oo-ui-image-destructive .oo-ui-icon-remove,
+.oo-ui-image-destructive.oo-ui-icon-remove {
+ background-image: url("themes/mediawiki/images/icons/remove-destructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-destructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-destructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove-destructive.png");
+}
+.oo-ui-image-invert .oo-ui-icon-remove,
+.oo-ui-image-invert.oo-ui-icon-remove {
+ background-image: url("themes/mediawiki/images/icons/remove-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/remove-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/remove-invert.png");
+}
+.oo-ui-icon-search {
+ background-image: url("themes/mediawiki/images/icons/search-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/search-ltr.png");
+}
+.oo-ui-image-invert .oo-ui-icon-search,
+.oo-ui-image-invert.oo-ui-icon-search {
+ background-image: url("themes/mediawiki/images/icons/search-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/search-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/search-ltr-invert.png");
+}
+.oo-ui-icon-settings {
+ background-image: url("themes/mediawiki/images/icons/settings.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/settings.png");
+}
+.oo-ui-image-invert .oo-ui-icon-settings,
+.oo-ui-image-invert.oo-ui-icon-settings {
+ background-image: url("themes/mediawiki/images/icons/settings-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/settings-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/settings-invert.png");
+}
+.oo-ui-icon-tag {
+ background-image: url("themes/mediawiki/images/icons/tag.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag.png");
+}
+.oo-ui-image-destructive .oo-ui-icon-tag,
+.oo-ui-image-destructive.oo-ui-icon-tag {
+ background-image: url("themes/mediawiki/images/icons/tag-destructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-destructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-destructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-destructive.png");
+}
+.oo-ui-image-warning .oo-ui-icon-tag,
+.oo-ui-image-warning.oo-ui-icon-tag {
+ background-image: url("themes/mediawiki/images/icons/tag-warning.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-warning.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-warning.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-warning.png");
+}
+.oo-ui-image-constructive .oo-ui-icon-tag,
+.oo-ui-image-constructive.oo-ui-icon-tag {
+ background-image: url("themes/mediawiki/images/icons/tag-constructive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-constructive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-constructive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-constructive.png");
+}
+.oo-ui-image-progressive .oo-ui-icon-tag,
+.oo-ui-image-progressive.oo-ui-icon-tag {
+ background-image: url("themes/mediawiki/images/icons/tag-progressive.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-progressive.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-progressive.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-progressive.png");
+}
+.oo-ui-image-invert .oo-ui-icon-tag,
+.oo-ui-image-invert.oo-ui-icon-tag {
+ background-image: url("themes/mediawiki/images/icons/tag-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/tag-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/tag-invert.png");
+}
+.oo-ui-icon-undo {
+ background-image: url("themes/mediawiki/images/icons/arched-arrow-rtl.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-rtl.png");
+}
+.oo-ui-image-invert .oo-ui-icon-undo,
+.oo-ui-image-invert.oo-ui-icon-undo {
+ background-image: url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/arched-arrow-rtl-invert.png");
+}
+.oo-ui-icon-window {
+ background-image: url("themes/mediawiki/images/icons/window.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/window.png");
+}
+.oo-ui-image-invert .oo-ui-icon-window,
+.oo-ui-image-invert.oo-ui-icon-window {
+ background-image: url("themes/mediawiki/images/icons/window-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/window-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/window-invert.png");
+}
+
+.oo-ui-indicator-alert {
+ background-image: url("themes/mediawiki/images/indicators/alert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/alert.png");
+}
+.oo-ui-image-invert .oo-ui-indicator-alert,
+.oo-ui-image-invert.oo-ui-indicator-alert {
+ background-image: url("themes/mediawiki/images/indicators/alert-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/alert-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/alert-invert.png");
+}
+.oo-ui-indicator-up {
+ background-image: url("themes/mediawiki/images/indicators/arrow-up.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-up.png");
+}
+.oo-ui-image-invert .oo-ui-indicator-up,
+.oo-ui-image-invert.oo-ui-indicator-up {
+ background-image: url("themes/mediawiki/images/indicators/arrow-up-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-up-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-up-invert.png");
+}
+.oo-ui-indicator-down {
+ background-image: url("themes/mediawiki/images/indicators/arrow-down.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-down.png");
+}
+.oo-ui-image-invert .oo-ui-indicator-down,
+.oo-ui-image-invert.oo-ui-indicator-down {
+ background-image: url("themes/mediawiki/images/indicators/arrow-down-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-down-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-down-invert.png");
+}
+.oo-ui-indicator-next {
+ background-image: url("themes/mediawiki/images/indicators/arrow-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-ltr.png");
+}
+.oo-ui-image-invert .oo-ui-indicator-next,
+.oo-ui-image-invert.oo-ui-indicator-next {
+ background-image: url("themes/mediawiki/images/indicators/arrow-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-ltr-invert.png");
+}
+.oo-ui-indicator-previous {
+ background-image: url("themes/mediawiki/images/indicators/arrow-rtl.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-rtl.png");
+}
+.oo-ui-image-invert .oo-ui-indicator-previous,
+.oo-ui-image-invert.oo-ui-indicator-previous {
+ background-image: url("themes/mediawiki/images/indicators/arrow-rtl-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/arrow-rtl-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/arrow-rtl-invert.png");
+}
+.oo-ui-indicator-required {
+ background-image: url("themes/mediawiki/images/indicators/required.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/required.png");
+}
+.oo-ui-image-invert .oo-ui-indicator-required,
+.oo-ui-image-invert.oo-ui-indicator-required {
+ background-image: url("themes/mediawiki/images/indicators/required-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/required-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/required-invert.png");
+}
+.oo-ui-indicator-search {
+ background-image: url("themes/mediawiki/images/indicators/search-ltr.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/search-ltr.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/search-ltr.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/search-ltr.png");
+}
+.oo-ui-image-invert .oo-ui-indicator-search,
+.oo-ui-image-invert.oo-ui-indicator-search {
+ background-image: url("themes/mediawiki/images/indicators/search-ltr-invert.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/search-ltr-invert.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/indicators/search-ltr-invert.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/indicators/search-ltr-invert.png");
+}
+
+.oo-ui-texture-pending {
+ background-image: url("themes/mediawiki/images/textures/pending.gif");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/pending.gif");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/pending.gif");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/textures/pending.gif");
+}
+.oo-ui-texture-transparency {
+ background-image: url("themes/mediawiki/images/textures/transparency.png");
+ background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/transparency.svg");
+ background-image: linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/textures/transparency.svg");
+ background-image: -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/textures/transparency.png");
+}
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.js b/resources/lib/oojs-ui/oojs-ui-mediawiki.js
new file mode 100644
index 00000000..eaca1f15
--- /dev/null
+++ b/resources/lib/oojs-ui/oojs-ui-mediawiki.js
@@ -0,0 +1,66 @@
+/*!
+ * OOjs UI v0.11.3
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2015 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2015-05-12T12:15:37Z
+ */
+/**
+ * @class
+ * @extends OO.ui.Theme
+ *
+ * @constructor
+ */
+OO.ui.MediaWikiTheme = function OoUiMediaWikiTheme() {
+ // Parent constructor
+ OO.ui.MediaWikiTheme.super.call( this );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.MediaWikiTheme, OO.ui.Theme );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
+ // Parent method
+ var variant,
+ variants = {
+ warning: false,
+ invert: false,
+ progressive: false,
+ constructive: false,
+ destructive: false
+ },
+ // Parent method
+ classes = OO.ui.MediaWikiTheme.super.prototype.getElementClasses.call( this, element ),
+ isFramed;
+
+ if ( element.supports( [ 'hasFlag' ] ) ) {
+ isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed();
+ if ( isFramed && ( element.isDisabled() || element.hasFlag( 'primary' ) ) ) {
+ variants.invert = true;
+ } else {
+ variants.progressive = element.hasFlag( 'progressive' );
+ variants.constructive = element.hasFlag( 'constructive' );
+ variants.destructive = element.hasFlag( 'destructive' );
+ variants.warning = element.hasFlag( 'warning' );
+ }
+ }
+
+ for ( variant in variants ) {
+ classes[ variants[ variant ] ? 'on' : 'off' ].push( 'oo-ui-image-' + variant );
+ }
+
+ return classes;
+};
+
+/* Instantiation */
+
+OO.ui.theme = new OO.ui.MediaWikiTheme();
diff --git a/resources/lib/oojs-ui/oojs-ui-minerva.css b/resources/lib/oojs-ui/oojs-ui-minerva.css
deleted file mode 100644
index 36492c05..00000000
--- a/resources/lib/oojs-ui/oojs-ui-minerva.css
+++ /dev/null
@@ -1,1397 +0,0 @@
-/*!
- * OOjs UI v0.1.0-pre (f2c3f12959)
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-09-18T23:22:20Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-/*
- * Base styles.
- *
- * Themes should include this file after defining their variables and mixins.
- */
-/* @noflip */
-.oo-ui-rtl {
- direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
- direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
- cursor: pointer;
- display: inline-block;
- vertical-align: middle;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
- cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
- display: inline-block;
- position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- display: inline-block;
- vertical-align: top;
- text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-left: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- margin-right: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- width: 3.35em;
- height: 3.35em;
- background-size: 2em auto;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- margin-left: 0.25em;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- line-height: 1.9em;
-}
-.oo-ui-clippableElement-clippable {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
- padding: 2em;
-}
-.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 3em;
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- padding: 0 0 1em;
-}
-.oo-ui-fieldLayout {
- margin-bottom: 1em;
-}
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
- content: " ";
- display: table;
-}
-.oo-ui-fieldLayout:after {
- clear: both;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- display: block;
- float: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- display: block;
- float: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- text-align: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
- display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
- z-index: 1;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
- float: right;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
- padding: 0.5em 0.75em;
-}
-.oo-ui-fieldLayout:last-child {
- margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- padding-top: 0.5em;
- margin-right: 5%;
- width: 35%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- width: 60%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
- padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
- color: #cccccc;
-}
-.oo-ui-fieldsetLayout {
- position: relative;
- margin: 0;
- padding: 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
- display: block;
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
- display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
- margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
- margin-bottom: 0.5em;
- padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
- padding-left: 1.75em;
- line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
- left: 0;
- top: 0.25em;
- width: 2em;
- height: 2em;
-}
-.oo-ui-gridLayout {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-.oo-ui-panelLayout {
- position: relative;
- padding: 1em 3.35em;
-}
-.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-.oo-ui-stackLayout > .oo-ui-panelLayout {
- display: none;
-}
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
- display: block;
- position: relative;
-}
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
- z-index: 4;
-}
-.oo-ui-popupTool .oo-ui-popupWidget {
- margin-left: 1.25em;
- font-size: 0.8em;
-}
-.oo-ui-toolGroup {
- display: inline-block;
- vertical-align: middle;
- margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
- display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-label {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool {
- display: inline-block;
- position: relative;
- vertical-align: top;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
- display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
- display: none;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
- cursor: pointer;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
- height: 1.5em;
- padding: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- height: 1.5em;
- width: 1.5em;
-}
-.oo-ui-popupToolGroup {
- position: relative;
- height: 2em;
- min-width: 2.5em;
-}
-.oo-ui-popupToolGroup-handle {
- display: block;
- cursor: pointer;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
- cursor: default;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- display: none;
- position: absolute;
- z-index: 4;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
- display: block;
-}
-.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
- left: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
- right: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
- display: none;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
- min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- top: 0;
- width: 2em;
- height: 2em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
- right: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- left: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 1em;
-}
-.oo-ui-popupToolGroup-header {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 0.6em;
- font-weight: bold;
-}
-.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- margin-left: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- margin-right: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- top: 2.3em;
- margin: 0 -1px;
- border: solid 1px #dddddd;
- background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- height: 2em;
- width: 2em;
- margin-right: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- line-height: 2em;
- font-size: 0.8em;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
- padding-right: 0.5em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
- display: block;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
- min-width: 8em;
-}
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em 0 0.25em 0;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- padding: 0 1em 0 0.25em;
-}
-.oo-ui-toolbar {
- clear: both;
-}
-.oo-ui-toolbar-bar {
- line-height: 1em;
-}
-.oo-ui-toolbar-actions {
- float: right;
-}
-.oo-ui-toolbar-tools {
- display: inline;
-}
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
- -webkit-touch-callout: default;
- -webkit-user-select: all;
- -moz-user-select: all;
- -ms-user-select: all;
- user-select: all;
-}
-.oo-ui-toolbar-shadow {
- background-position: left top;
- background-repeat: repeat-x;
- position: absolute;
- width: 100%;
- pointer-events: none;
-}
-.oo-ui-toolbar-bar {
- border-bottom: solid 1px #dddddd;
- background: white;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
- border: none;
- background: none;
-}
-.oo-ui-selectWidget {
- margin: 0;
- padding: 0;
-}
-.oo-ui-optionWidget {
- position: relative;
- display: block;
- cursor: pointer;
- padding: 0.8em 1em 0.8em 3.35em;
- border: none;
- font-weight: bold;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
- display: block;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
- line-height: 1.5em;
-}
-.oo-ui-optionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
- padding-right: 1.5em;
-}
-.oo-ui-optionWidget-level-0 {
- padding-left: 3.5em;
-}
-.oo-ui-optionWidget-level-0 .oo-ui-iconElement-icon {
- left: 1em;
-}
-.oo-ui-optionWidget-level-1 {
- padding-left: 5em;
-}
-.oo-ui-optionWidget-level-1 .oo-ui-iconElement-icon {
- left: 2.5em;
-}
-.oo-ui-optionWidget-level-2 {
- padding-left: 6.5em;
-}
-.oo-ui-optionWidget-level-2 .oo-ui-iconElement-icon {
- left: 4em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- position: absolute;
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- top: 50%;
- width: 2em;
- height: 2em;
- margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
- left: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- right: 0.5em;
-}
-.oo-ui-buttonSelectWidget {
- display: inline-block;
- white-space: nowrap;
-}
-.oo-ui-buttonOptionWidget {
- display: inline-block;
- padding: 0;
- background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- position: static;
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- height: 1.9em;
- margin-top: 0;
-}
-.oo-ui-labelWidget {
- display: inline-block;
- padding: 0.5em 0;
-}
-.oo-ui-iconWidget {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- opacity: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-.oo-ui-indicatorWidget {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- opacity: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-.oo-ui-buttonWidget {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
- border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- border-radius: 0;
- margin-bottom: -1px;
- margin-left: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
- border-bottom-left-radius: 0.3em;
- border-top-left-radius: 0.3em;
- margin-left: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
-}
-.oo-ui-toggleSwitchWidget {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- overflow: hidden;
- cursor: pointer;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transform: translateZ(0px);
- -moz-transform: translateZ(0px);
- -ms-transform: translateZ(0px);
- -o-transform: translateZ(0px);
- transform: translateZ(0px);
- height: 2em;
- width: 4em;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-toggleSwitchWidget-grip {
- position: absolute;
- display: block;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- position: absolute;
- top: 0;
- bottom: 0;
- right: 0;
- left: 0;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: none;
-}
-.oo-ui-toggleSwitchWidget-grip {
- top: 0.25em;
- left: 0.25em;
- width: 1.5em;
- height: 1.5em;
- margin-top: -1px;
- -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- -webkit-transition: opacity 200ms ease-in-out;
- -moz-transition: opacity 200ms ease-in-out;
- -ms-transition: opacity 200ms ease-in-out;
- -o-transition: opacity 200ms ease-in-out;
- transition: opacity 200ms ease-in-out;
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
- left: 2.25em;
- margin-left: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
- left: 0.25em;
- margin-left: 0;
-}
-.oo-ui-actionWidget.oo-ui-pendingElement-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-popupWidget-popup {
- position: absolute;
- overflow: hidden;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchor {
- display: none;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- display: block;
- position: absolute;
- background-repeat: no-repeat;
-}
-.oo-ui-popupWidget-head {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- float: right;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
- float: left;
- cursor: default;
-}
-.oo-ui-popupWidget-body {
- clear: both;
- overflow: hidden;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
- margin-top: 7px;
-}
-.oo-ui-popupWidget-head {
- height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
- margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body-padded {
- padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
- position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
- position: absolute;
- left: 1em;
- cursor: auto;
-}
-.oo-ui-lookupInputWidget-menu {
- background-color: #ffffff;
-}
-.oo-ui-textInputWidget {
- position: relative;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- display: inline-block;
- width: 100%;
- resize: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
- position: absolute;
- top: 0;
- height: 100%;
- background-repeat: no-repeat;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
- left: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
- right: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- padding: 0.8em 1em;
-}
-.oo-ui-menuWidget {
- position: absolute;
- background: white;
- border: solid 1px #dddddd;
-}
-.oo-ui-menuWidget input {
- position: absolute;
- width: 0;
- height: 0;
- overflow: hidden;
- opacity: 0;
-}
-.oo-ui-menuItemWidget {
- position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
- display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
- display: block;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background: #347bff;
- color: #ffffff;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
- background-size: 24px auto;
-}
-.oo-ui-menuSectionItemWidget {
- cursor: default;
- font-weight: normal;
- color: #777777;
- border: none;
-}
-.oo-ui-inlineMenuWidget {
- position: relative;
- display: inline-block;
- margin: 0.25em 0;
- min-width: 20em;
-}
-.oo-ui-inlineMenuWidget-handle {
- width: 100%;
- display: inline-block;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
- z-index: 1;
- width: 100%;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- cursor: default;
-}
-.oo-ui-inlineMenuWidget-handle {
- height: 2.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- top: 0;
- width: 2.5em;
- height: 2.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
- right: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- left: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- line-height: 2.5em;
- margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- margin-left: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- margin-right: 2em;
-}
-.oo-ui-outlineItemWidget {
- position: relative;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- padding: 0.75em;
-}
-.oo-ui-outlineControlsWidget {
- height: 3em;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- float: left;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
- float: left;
- background-position: right center;
- background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
- float: left;
-}
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
- float: left;
-}
-.oo-ui-outlineControlsWidget-movers {
- float: right;
-}
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
- float: right;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- height: 2em;
- margin: 0.5em;
- padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
- width: 1.5em;
- height: 2em;
- margin: 0.5em 0 0.5em 0.5em;
-}
-.oo-ui-outlineControlsWidget-items {
- margin-left: 0;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
- z-index: 1;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget > .oo-ui-selectWidget {
- min-width: 20em;
-}
-.oo-ui-searchWidget-query {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- width: 100%;
-}
-.oo-ui-searchWidget-results {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
- height: 4em;
- padding: 0 1em;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
- top: 4em;
- padding: 1em;
- line-height: 0;
-}
-.oo-ui-window {
- line-height: 1em;
- /* Content div takes focus when opened, so hide outline */
-}
-.oo-ui-window-frame {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
- margin: 0;
- padding: 0;
-}
-.oo-ui-window-content:focus {
- outline: none;
-}
-.oo-ui-window-head,
-.oo-ui-window-foot {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-window-body {
- margin: 0;
- padding: 0;
- background: none;
-}
-.oo-ui-window-overlay {
- position: absolute;
- top: 0;
- left: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
- position: absolute;
- left: 0;
- right: 0;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-dialog-content > .oo-ui-window-head {
- z-index: 1;
- top: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-head.oo-ui-pendingElement-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
- z-index: 2;
- top: 0;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-foot {
- z-index: 1;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-overlay {
- z-index: 3;
-}
-.oo-ui-messageDialog-actions-horizontal {
- display: table;
- table-layout: fixed;
- width: 100%;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- display: table-cell;
- width: 1%;
-}
-.oo-ui-messageDialog-actions-vertical {
- display: block;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
- position: relative;
- text-align: center;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
- display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
- position: relative;
- top: auto;
- bottom: auto;
- display: inline;
- white-space: nowrap;
-}
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
- display: block;
- text-align: center;
- padding-top: 0.5em;
-}
-.oo-ui-messageDialog-title {
- font-size: 1.5em;
- line-height: 1em;
- color: #000000;
-}
-.oo-ui-messageDialog-message {
- font-size: 0.9em;
- line-height: 1.25em;
- color: #666666;
-}
-.oo-ui-messageDialog-message-verbose {
- font-size: 1.1em;
- line-height: 1.5em;
- text-align: left;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- border-right: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
- border-right-width: 0;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- border-bottom: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
- border-bottom-width: 0;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
- text-align: center;
- line-height: 3.4em;
- padding: 0 2em;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
- font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.oo-ui-processDialog-title {
- display: inline;
- padding: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
- white-space: nowrap;
-}
-.oo-ui-processDialog-actions-safe,
-.oo-ui-processDialog-actions-primary {
- position: absolute;
- top: 0;
- bottom: 0;
-}
-.oo-ui-processDialog-actions-safe {
- left: 0;
-}
-.oo-ui-processDialog-actions-primary {
- right: 0;
-}
-.oo-ui-processDialog-errors {
- display: none;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- z-index: 2;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.oo-ui-processDialog-content .oo-ui-window-head {
- height: 3.35em;
- border-bottom: 1px solid #dddddd;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-processDialog-content .oo-ui-window-body {
- top: 3.35em;
- padding: 2em 0;
-}
-.oo-ui-processDialog-navigation {
- position: relative;
- height: 3.35em;
- padding: 0 1em;
-}
-.oo-ui-processDialog-location {
- padding: 0.75em 0;
- height: 1.85em;
- cursor: default;
- text-align: center;
-}
-.oo-ui-processDialog-title {
- font-weight: bold;
- line-height: 1.85em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
- padding: 0.35em 0.75em;
- min-width: 1.85em;
- min-height: 1.85em;
- border: 1px solid #dddddd;
- border-radius: 4px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
- line-height: 1.85em;
- padding: 0 1em;
- font-weight: bold;
- color: #777777;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
- position: absolute;
- margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
- border: 1px solid transparent;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label {
- color: #d11d13;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button {
- padding: 0.75em 0.35em;
- border: none;
- border-radius: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
- background-color: #347bff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
- color: #ffffff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- left: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
- padding-left: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- right: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
- padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-other {
- position: absolute;
- bottom: 1em;
-}
-.oo-ui-processDialog > .oo-ui-window-frame {
- min-height: 5em;
-}
-.oo-ui-processDialog-errors {
- background-color: rgba(255, 255, 255, 0.9);
- padding: 3em 3em 1.5em 3em;
- text-align: center;
-}
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
- margin: 2em 1em 2em 1em;
-}
-.oo-ui-processDialog-errors-title {
- font-size: 1.5em;
- color: #000000;
- margin-bottom: 2em;
-}
-.oo-ui-processDialog-error {
- text-align: left;
- margin: 1em;
- padding: 1em;
- border: solid 1px #ff9e9e;
- background-color: #fff7f7;
- border-radius: 0.25em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- position: fixed;
- width: 0;
- height: 0;
- overflow: hidden;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
- width: auto;
- height: auto;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
- position: absolute;
- right: 0;
- left: 0;
- margin: auto;
- overflow: hidden;
- max-width: 100%;
- max-height: 100%;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
-}
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
- width: 100%;
- height: 100%;
- top: 0;
- bottom: 0;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- background-color: rgba(255, 255, 255, 0.5);
- opacity: 0;
- -webkit-transition: opacity 250ms ease-in-out;
- -moz-transition: opacity 250ms ease-in-out;
- -ms-transition: opacity 250ms ease-in-out;
- -o-transition: opacity 250ms ease-in-out;
- transition: opacity 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
- top: 0;
- bottom: 0;
- background-color: #ffffff;
- -webkit-transform: translate3d(0, -200%, 0);
- -moz-transform: translate3d(0, -200%, 0);
- -ms-transform: translate3d(0, -200%, 0);
- -o-transform: translate3d(0, -200%, 0);
- transform: translate3d(0, -200%, 0);
- -webkit-transition: transform 250ms ease-in-out;
- -moz-transition: transform 250ms ease-in-out;
- -ms-transition: transform 250ms ease-in-out;
- -o-transition: transform 250ms ease-in-out;
- transition: transform 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- opacity: 1;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- -webkit-transform: translate3d(0, 0, 0);
- -moz-transform: translate3d(0, 0, 0);
- -ms-transform: translate3d(0, 0, 0);
- -o-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
- border: solid 1px #cccccc;
- border-radius: 0.5em;
- box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-.oo-ui-icon-check {
- background-image: /* @embed */ url(themes/minerva/images/icons/check.png);
- background: #347bff;
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-minerva.rtl.css b/resources/lib/oojs-ui/oojs-ui-minerva.rtl.css
deleted file mode 100644
index e452952a..00000000
--- a/resources/lib/oojs-ui/oojs-ui-minerva.rtl.css
+++ /dev/null
@@ -1,1381 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-09-11T19:39:50Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-/*
- * Base styles.
- *
- * Themes should include this file after defining their variables and mixins.
- */
-/* @noflip */
-.oo-ui-rtl {
- direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
- direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
- cursor: pointer;
- display: inline-block;
- vertical-align: middle;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
- cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
- display: inline-block;
- position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- display: inline-block;
- vertical-align: top;
- text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
- cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-right: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- margin-left: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- width: 3.35em;
- height: 3.35em;
- background-size: 2em auto;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- margin-right: 0.25em;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- line-height: 1.9em;
-}
-.oo-ui-clippableElement-clippable {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
- padding: 2em;
-}
-.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- bottom: 3em;
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- position: absolute;
- bottom: 0;
- right: 0;
- left: 0;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- padding: 0 0 1em;
-}
-.oo-ui-fieldLayout {
- margin-bottom: 1em;
-}
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
- content: " ";
- display: table;
-}
-.oo-ui-fieldLayout:after {
- clear: both;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- display: block;
- float: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- display: block;
- float: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- text-align: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
- display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
- z-index: 1;
-}
-.oo-ui-fieldLayout:last-child {
- margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
- padding-top: 0.5em;
- margin-left: 5%;
- width: 35%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- width: 60%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
- padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
- color: #ccc;
-}
-.oo-ui-fieldsetLayout {
- position: relative;
- margin: 0;
- padding: 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
- display: block;
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
- display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
- margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
- margin-bottom: 0.5em;
- padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
- padding-right: 1.75em;
- line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
- right: 0;
- top: 0.25em;
- width: 2em;
- height: 2em;
-}
-.oo-ui-gridLayout {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- bottom: 0;
-}
-.oo-ui-panelLayout {
- position: relative;
- padding: 1em 3.35em;
-}
-.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- bottom: 0;
-}
-.oo-ui-stackLayout > .oo-ui-panelLayout {
- display: none;
-}
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
- display: block;
- position: relative;
-}
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
- z-index: 4;
-}
-.oo-ui-popupTool .oo-ui-popupWidget {
- margin-right: 1.25em;
- font-size: 0.8em;
-}
-.oo-ui-toolGroup {
- display: inline-block;
- vertical-align: middle;
- margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
- display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-label {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool {
- display: inline-block;
- position: relative;
- vertical-align: top;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
- display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- display: block;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
- display: none;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
- cursor: pointer;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
- height: 1.5em;
- padding: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- height: 1.5em;
- width: 1.5em;
-}
-.oo-ui-popupToolGroup {
- position: relative;
- height: 2em;
- min-width: 2.5em;
-}
-.oo-ui-popupToolGroup-handle {
- display: block;
- cursor: pointer;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
- cursor: default;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- display: none;
- position: absolute;
- z-index: 4;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
- display: block;
-}
-.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
- right: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
- left: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
- display: none;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
- min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- top: 0;
- width: 2em;
- height: 2em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
- left: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
- right: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 1em;
-}
-.oo-ui-popupToolGroup-header {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 0.6em;
- font-weight: bold;
-}
-.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- margin-right: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- margin-left: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- top: 2.3em;
- margin: 0 -1px;
- border: solid 1px #dddddd;
- background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- height: 2em;
- width: 2em;
- margin-left: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- line-height: 2em;
- font-size: 0.8em;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
- padding-left: 0.5em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
- display: block;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
- min-width: 8em;
-}
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em 0 0.25em 0;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- padding: 0 0.25em 0 1em;
-}
-.oo-ui-toolbar {
- clear: both;
-}
-.oo-ui-toolbar-bar {
- line-height: 1em;
-}
-.oo-ui-toolbar-actions {
- float: left;
-}
-.oo-ui-toolbar-tools {
- display: inline;
-}
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
- -webkit-touch-callout: default;
- -webkit-user-select: all;
- -moz-user-select: all;
- -ms-user-select: all;
- user-select: all;
-}
-.oo-ui-toolbar-shadow {
- background-position: right top;
- background-repeat: repeat-x;
- position: absolute;
- width: 100%;
- pointer-events: none;
-}
-.oo-ui-toolbar-bar {
- border-bottom: solid 1px #dddddd;
- background: white;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
- border: none;
- background: none;
-}
-.oo-ui-selectWidget {
- margin: 0;
- padding: 0;
-}
-.oo-ui-optionWidget {
- position: relative;
- display: block;
- cursor: pointer;
- padding: 0.8em 3.35em 0.8em 1em;
- border: none;
- font-weight: bold;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
- display: block;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
- line-height: 1.5em;
-}
-.oo-ui-optionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
- padding-left: 1.5em;
-}
-.oo-ui-optionWidget-level-0 {
- padding-right: 3.5em;
-}
-.oo-ui-optionWidget-level-0 .oo-ui-iconElement-icon {
- right: 1em;
-}
-.oo-ui-optionWidget-level-1 {
- padding-right: 5em;
-}
-.oo-ui-optionWidget-level-1 .oo-ui-iconElement-icon {
- right: 2.5em;
-}
-.oo-ui-optionWidget-level-2 {
- padding-right: 6.5em;
-}
-.oo-ui-optionWidget-level-2 .oo-ui-iconElement-icon {
- right: 4em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- position: absolute;
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- top: 50%;
- width: 2em;
- height: 2em;
- margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
- right: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
- left: 0.5em;
-}
-.oo-ui-buttonSelectWidget {
- display: inline-block;
- white-space: nowrap;
-}
-.oo-ui-buttonOptionWidget {
- display: inline-block;
- padding: 0;
- background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- position: static;
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
- height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- height: 1.9em;
- margin-top: 0;
-}
-.oo-ui-labelWidget {
- display: inline-block;
- padding: 0.5em 0;
-}
-.oo-ui-iconWidget {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- opacity: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-.oo-ui-indicatorWidget {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- opacity: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-.oo-ui-buttonWidget {
- display: inline-block;
- vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
- border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- border-radius: 0;
- margin-bottom: -1px;
- margin-right: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
- margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
- border-bottom-left-radius: 0.3em;
- border-top-left-radius: 0.3em;
-}
-.oo-ui-toggleSwitchWidget {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- overflow: hidden;
- cursor: pointer;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transform: translateZ(0px);
- -moz-transform: translateZ(0px);
- -ms-transform: translateZ(0px);
- -o-transform: translateZ(0px);
- transform: translateZ(0px);
- height: 2em;
- width: 4em;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-toggleSwitchWidget-grip {
- position: absolute;
- display: block;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: none;
-}
-.oo-ui-toggleSwitchWidget-grip {
- top: 0.25em;
- right: 0.25em;
- width: 1.5em;
- height: 1.5em;
- margin-top: -1px;
- -webkit-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -moz-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -ms-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -o-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- -webkit-transition: opacity 200ms ease-in-out;
- -moz-transition: opacity 200ms ease-in-out;
- -ms-transition: opacity 200ms ease-in-out;
- -o-transition: opacity 200ms ease-in-out;
- transition: opacity 200ms ease-in-out;
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
- right: 2.25em;
- margin-right: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
- right: 0.25em;
- margin-right: 0;
-}
-.oo-ui-popupWidget-popup {
- position: absolute;
- overflow: hidden;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchor {
- display: none;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- display: block;
- position: absolute;
- background-repeat: no-repeat;
-}
-.oo-ui-popupWidget-head {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- float: left;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
- float: right;
- cursor: default;
-}
-.oo-ui-popupWidget-body {
- clear: both;
- overflow: hidden;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
- margin-top: 7px;
-}
-.oo-ui-popupWidget-head {
- height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
- margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body-padded {
- padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
- position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
- position: absolute;
- right: 1em;
- cursor: auto;
-}
-.oo-ui-lookupInputWidget-menu {
- background-color: #fff;
-}
-.oo-ui-textInputWidget {
- position: relative;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- display: inline-block;
- width: 100%;
- resize: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
- position: absolute;
- top: 0;
- height: 100%;
- background-repeat: no-repeat;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
- right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
- left: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- padding: .8em 1em;
-}
-.oo-ui-menuWidget {
- position: absolute;
- background: white;
- border: solid 1px #dddddd;
-}
-.oo-ui-menuWidget input {
- position: absolute;
- width: 0;
- height: 0;
- overflow: hidden;
- opacity: 0;
-}
-.oo-ui-menuItemWidget {
- position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
- display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
- display: block;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background: #347bff;
- color: #ffffff;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
- background-size: 24px auto;
-}
-.oo-ui-menuSectionItemWidget {
- cursor: default;
- font-weight: normal;
- color: #777777;
- border: none;
-}
-.oo-ui-inlineMenuWidget {
- position: relative;
- display: inline-block;
- margin: 0.25em 0;
- min-width: 20em;
-}
-.oo-ui-inlineMenuWidget-handle {
- width: 100%;
- display: inline-block;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- position: absolute;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
- z-index: 1;
- width: 100%;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- cursor: default;
-}
-.oo-ui-inlineMenuWidget-handle {
- height: 2.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- top: 0;
- width: 2.5em;
- height: 2.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
- left: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
- right: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- line-height: 2.5em;
- margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- margin-right: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
- margin-left: 2em;
-}
-.oo-ui-outlineItemWidget {
- position: relative;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- padding: 0.75em;
-}
-.oo-ui-outlineControlsWidget {
- height: 3em;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- float: right;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
- float: right;
- background-position: left center;
- background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
- float: right;
-}
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
- float: right;
-}
-.oo-ui-outlineControlsWidget-movers {
- float: left;
-}
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
- float: left;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- height: 2em;
- margin: 0.5em;
- padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
- width: 1.5em;
- height: 2em;
- margin: 0.5em 0.5em 0.5em 0;
-}
-.oo-ui-outlineControlsWidget-items {
- margin-right: 0;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
- z-index: 1;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget > .oo-ui-selectWidget {
- min-width: 20em;
-}
-.oo-ui-searchWidget-query {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- width: 100%;
-}
-.oo-ui-searchWidget-results {
- position: absolute;
- bottom: 0;
- right: 0;
- left: 0;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
- height: 4em;
- padding: 0 1em;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
- top: 4em;
- padding: 1em;
- line-height: 0;
-}
-.oo-ui-window {
- line-height: 1em;
- /* Content div takes focus when opened, so hide outline */
-}
-.oo-ui-window-frame {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
- margin: 0;
- padding: 0;
-}
-.oo-ui-window-content:focus {
- outline: none;
-}
-.oo-ui-window-head,
-.oo-ui-window-foot {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-window-body {
- margin: 0;
- padding: 0;
- background: none;
-}
-.oo-ui-window-overlay {
- position: absolute;
- top: 0;
- right: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
- position: absolute;
- right: 0;
- left: 0;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-dialog-content > .oo-ui-window-head {
- z-index: 1;
- top: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
- z-index: 2;
- top: 0;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-foot {
- z-index: 1;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-overlay {
- z-index: 3;
-}
-.oo-ui-messageDialog-actions-horizontal {
- display: table;
- table-layout: fixed;
- width: 100%;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- display: table-cell;
- width: 1%;
-}
-.oo-ui-messageDialog-actions-vertical {
- display: block;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
- position: relative;
- text-align: center;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
- display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
- position: relative;
- top: auto;
- bottom: auto;
- display: inline;
- white-space: nowrap;
-}
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
- display: block;
- text-align: center;
- padding-top: 0.5em;
-}
-.oo-ui-messageDialog-title {
- font-size: 1.5em;
- line-height: 1em;
- color: #000;
-}
-.oo-ui-messageDialog-message {
- font-size: 0.9em;
- line-height: 1.25em;
- color: #666;
-}
-.oo-ui-messageDialog-message-verbose {
- font-size: 1.1em;
- line-height: 1.5em;
- text-align: right;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- border-left: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
- border-left-width: 0;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- border-bottom: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
- border-bottom-width: 0;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
- text-align: center;
- line-height: 3.4em;
- padding: 0 2em;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
- font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.oo-ui-processDialog-title {
- display: inline;
- padding: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
- white-space: nowrap;
-}
-.oo-ui-processDialog-actions-safe,
-.oo-ui-processDialog-actions-primary {
- position: absolute;
- top: 0;
- bottom: 0;
-}
-.oo-ui-processDialog-actions-safe {
- right: 0;
-}
-.oo-ui-processDialog-actions-primary {
- left: 0;
-}
-.oo-ui-processDialog-errors {
- display: none;
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- bottom: 0;
- z-index: 2;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.oo-ui-processDialog-content .oo-ui-window-head {
- height: 3.35em;
- border-bottom: 1px solid #dddddd;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-processDialog-content .oo-ui-window-body {
- top: 3.35em;
- padding: 2em 0;
-}
-.oo-ui-processDialog-navigation {
- position: relative;
- height: 3.35em;
- padding: 0 1em;
-}
-.oo-ui-processDialog-location {
- padding: 0.75em 0;
- height: 1.85em;
- cursor: default;
- text-align: center;
-}
-.oo-ui-processDialog-title {
- font-weight: bold;
- line-height: 1.85em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
- padding: 0.35em 0.75em;
- min-width: 1.85em;
- min-height: 1.85em;
- border: 1px solid #dddddd;
- border-radius: 4px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
- line-height: 1.85em;
- padding: 0 1em;
- font-weight: bold;
- color: #777777;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
- position: absolute;
- margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
- vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
- border: 1px solid transparent;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label {
- color: #d11d13;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button {
- padding: 0.75em 0.35em;
- border: none;
- border-radius: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
- background-color: #347bff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
- color: #ffffff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- right: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
- padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- left: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
- padding-left: 2.25em;
-}
-.oo-ui-processDialog-actions-other {
- position: absolute;
- bottom: 1em;
-}
-.oo-ui-processDialog > .oo-ui-window-frame {
- min-height: 5em;
-}
-.oo-ui-processDialog-errors {
- background-color: rgba(255, 255, 255, 0.9);
- padding: 3em 3em 1.5em 3em;
- text-align: center;
-}
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
- margin: 2em 1em 2em 1em;
-}
-.oo-ui-processDialog-errors-title {
- font-size: 1.5em;
- color: #000;
- margin-bottom: 2em;
-}
-.oo-ui-processDialog-error {
- text-align: right;
- margin: 1em;
- padding: 1em;
- border: solid 1px #ff9e9e;
- background-color: #fff7f7;
- border-radius: 0.25em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- position: fixed;
- width: 0;
- height: 0;
- overflow: hidden;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
- width: auto;
- height: auto;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
- position: fixed;
- left: 0;
- right: 0;
- margin: auto;
- overflow: hidden;
- max-width: 100%;
- max-height: 100%;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
-}
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
- width: 100%;
- height: 100%;
- top: 0;
- bottom: 0;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- background-color: rgba(255, 255, 255, 0.5);
- opacity: 0;
- -webkit-transition: opacity 250ms ease-in-out;
- -moz-transition: opacity 250ms ease-in-out;
- -ms-transition: opacity 250ms ease-in-out;
- -o-transition: opacity 250ms ease-in-out;
- transition: opacity 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
- top: 0;
- bottom: 0;
- background-color: #fff;
- -webkit-transform: translate3d(0, -200%, 0);
- -moz-transform: translate3d(0, -200%, 0);
- -ms-transform: translate3d(0, -200%, 0);
- -o-transform: translate3d(0, -200%, 0);
- transform: translate3d(0, -200%, 0);
- -webkit-transition: transform 250ms ease-in-out;
- -moz-transition: transform 250ms ease-in-out;
- -ms-transition: transform 250ms ease-in-out;
- -o-transition: transform 250ms ease-in-out;
- transition: transform 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- opacity: 1;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- -webkit-transform: translate3d(0, 0, 0);
- -moz-transform: translate3d(0, 0, 0);
- -ms-transform: translate3d(0, 0, 0);
- -o-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
- border: solid 1px #ccc;
- border-radius: 0.5em;
- box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-.oo-ui-icon-check {
- background-image: /* @embed */ url(themes/minerva/images/icons/check.png);
- background: #347bff;
-}
diff --git a/resources/lib/oojs-ui/oojs-ui.css b/resources/lib/oojs-ui/oojs-ui.css
deleted file mode 100644
index fa077068..00000000
--- a/resources/lib/oojs-ui/oojs-ui.css
+++ /dev/null
@@ -1,1159 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: Fri May 30 2014 12:12:37 GMT-0700 (PDT)
- */
-
-/* Textures */
-
-.oo-ui-texture-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-
-.oo-ui-texture-transparency {
- background-image: /* @embed */ url(images/textures/transparency.png);
-}
-
-/* RTL Definitions */
-
-/* @noflip */
-
-.oo-ui-rtl {
- direction: rtl;
-}
-
-/* @noflip */
-
-.oo-ui-ltr {
- direction: ltr;
-}
-
-.oo-ui-dialog {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1em;
- line-height: 1em;
- /* Fix for strange opacity-related rendering issues.
- CAUTION: -webkit-backface-visibility: hidden; is EXTREMELY DANGEROUS.
- If applied to a VE surface directly, it will break selection of
- FocusableNodes, and in the past it's caused transparent PNGs to
- render as opaque black images. For some reason applying it to the dialog
- wrapper in the main document fixes opacity-related behavior in the iframe
- document, but doesn't break the surface inside the iframe. */
-
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
-}
-
-.oo-ui-dialog > .oo-ui-window-frame {
- position: fixed;
- right: 0;
- left: 0;
- min-height: 12em;
- margin: auto;
- overflow: hidden;
-}
-
-.oo-ui-dialog > .oo-ui-window-frame .oo-ui-frame {
- width: 100%;
- height: 100%;
-}
-
-.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-buttonedElement-framed {
- float: left;
-}
-
-.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-primary,
-.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-constructive,
-.oo-ui-dialog-content .oo-ui-window-foot .oo-ui-flaggableElement-destructive {
- float: right;
-}
-
-.oo-ui-dialog-content-footless .oo-ui-window-foot {
- display: none;
-}
-
-.oo-ui-frame {
- padding: 0;
- margin: 0;
-}
-
-.oo-ui-frame-body {
- padding: 0;
- margin: 0;
- background: none;
-}
-
-.oo-ui-frame-content:focus {
- outline: none;
-}
-
-.oo-ui-toolbar {
- clear: both;
-}
-
-.oo-ui-toolbar-bar {
- line-height: 1em;
-}
-
-.oo-ui-toolbar-bottom .oo-ui-toolbar-bar {
- position: absolute;
-}
-
-.oo-ui-toolbar-actions {
- float: right;
-}
-
-.oo-ui-toolbar-tools {
- float: left;
-}
-
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
- -webkit-user-select: all;
- -moz-user-select: all;
- -ms-user-select: all;
- user-select: all;
- -webkit-touch-callout: default;
-}
-
-.oo-ui-toolbar-shadow {
- position: absolute;
- width: 100%;
- pointer-events: none;
- background-position: left top;
- background-repeat: repeat-x;
-}
-
-.oo-ui-toolGroup {
- display: inline-block;
- margin: 0.3em;
- vertical-align: middle;
-}
-
-.oo-ui-toolGroup-empty {
- display: none;
-}
-
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-window-head {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-window-icon {
- float: left;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-window-title {
- float: left;
- white-space: nowrap;
- cursor: default;
-}
-
-.oo-ui-window-overlay {
- position: absolute;
- top: 0;
- left: 0;
-}
-
-.oo-ui-buttonedElement .oo-ui-buttonedElement-button {
- display: inline-block;
- vertical-align: middle;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-buttonedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- display: none;
- margin-left: 0;
-}
-
-.oo-ui-buttonedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
- display: none;
- margin-right: -0.75em;
-}
-
-.oo-ui-buttonedElement.oo-ui-widget-disabled .oo-ui-buttonedElement-button {
- cursor: default;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-buttonedElement-frameless {
- position: relative;
- display: inline-block;
-}
-
-.oo-ui-buttonedElement-frameless .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- display: inline-block;
- margin-left: 0.25em;
- vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- display: inline-block;
- text-align: center;
- vertical-align: top;
-}
-
-.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- display: inline-block;
- line-height: 1.9em;
- vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
- cursor: default;
-}
-
-.oo-ui-clippableElement-clippable {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
- padding: 2em;
-}
-
-.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 3em;
- left: 0;
- overflow-y: auto;
-}
-
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- position: absolute;
- right: 0;
- bottom: 0;
- left: 0;
-}
-
-.oo-ui-fieldLayout {
- margin-bottom: 1em;
-}
-
-.oo-ui-fieldLayout:last-child {
- margin-bottom: 0;
-}
-
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
- display: table;
- content: " ";
-}
-
-.oo-ui-fieldLayout:after {
- clear: both;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
- display: block;
- float: left;
- width: 35%;
- padding-top: 0.5em;
- margin-right: 5%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- display: block;
- float: left;
- width: 60%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
- text-align: right;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
- display: inline-block;
- padding: 0.75em 0.5em 0.5em 0.5em;
- vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- display: inline-block;
- padding: 0.5em 0;
- vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
- padding: 0.5em 0;
-}
-
-.oo-ui-fieldsetLayout {
- position: relative;
- padding: 0;
- margin: 0;
-}
-
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
- margin-top: 2em;
-}
-
-.oo-ui-fieldsetLayout-labeled {
- margin-top: -0.75em;
-}
-
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
- padding: 0.25em 0;
- margin-bottom: 0.5em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label {
- padding-left: 1.75em;
- line-height: 1.33em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0.25em;
- left: 0;
- display: block;
- width: 2em;
- height: 2em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-gridLayout {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
-}
-
-.oo-ui-labelWidget {
- padding: 0.5em 0;
-}
-
-.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-
-.oo-ui-stackLayout > .oo-ui-panelLayout {
- display: none;
-}
-
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
- position: relative;
- display: block;
-}
-
-.oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labeledElement-label {
- display: none;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool {
- position: relative;
- display: inline-block;
- vertical-align: top;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link {
- display: block;
- height: 1.5em;
- padding: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- display: block;
- width: 1.5em;
- height: 1.5em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: none;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
- display: none;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
- cursor: pointer;
-}
-
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-link {
- display: block;
- padding-right: 0.5em;
- white-space: nowrap;
- cursor: pointer;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
- min-width: 8em;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool {
- display: block;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- display: block;
- padding: 0.25em 1em 0.25em 0.25em;
- white-space: nowrap;
- cursor: pointer;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-image: none;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-image: /* @embed */ url(images/icons/check.png);
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-popupToolGroup {
- position: relative;
- height: 2em;
- min-width: 2.5em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
- min-width: 3.5em;
-}
-
-.oo-ui-popupToolGroup-handle {
- display: block;
- cursor: pointer;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0;
- width: 2em;
- height: 2em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
- right: 0;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- left: 0.25em;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin: 0 1em;
- font-size: 0.8em;
- line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup-header {
- margin: 0 0.6em;
- font-size: 0.8em;
- font-weight: bold;
- line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
- cursor: default;
-}
-
-.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin-left: 3em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin-right: 2.25em;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- position: absolute;
- top: 2em;
- left: -1px;
- z-index: 4;
- display: none;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
- display: block;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- display: inline-block;
- width: 2em;
- height: 2em;
- margin-right: 0.25em;
- vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: inline-block;
- font-size: 0.8em;
- line-height: 2em;
- vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
- display: none;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget {
- margin-left: 1.25em;
- font-size: 0.8em;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-tail {
- z-index: 4;
-}
-
-.oo-ui-iconWidget {
- display: inline-block;
- width: 1.9em;
- height: 1.9em;
- line-height: 2.5em;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- opacity: 0.8;
-}
-
-.oo-ui-iconWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-
-.oo-ui-indicatorWidget {
- display: inline-block;
- width: 1.9em;
- height: 1.9em;
- line-height: 2.5em;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- opacity: 0.8;
-}
-
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-
-.oo-ui-selectWidget {
- padding: 0;
- margin: 0;
- list-style: none;
-}
-
-.oo-ui-optionWidget {
- position: relative;
- display: block;
- margin: 0;
- list-style: none;
- cursor: pointer;
- border: none;
-}
-
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-
-.oo-ui-optionWidget .oo-ui-labeledElement-label {
- display: block;
- overflow: hidden;
- line-height: 1.5em;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.oo-ui-optionWidget .oo-ui-iconedElement-icon,
-.oo-ui-optionWidget .oo-ui-indicatedElement-indicator {
- position: absolute;
- top: 50%;
- width: 2em;
- height: 2em;
- margin-top: -1em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-optionWidget .oo-ui-iconedElement-icon {
- left: 0.5em;
-}
-
-.oo-ui-optionWidget .oo-ui-indicatedElement-indicator {
- right: 0.5em;
-}
-
-.oo-ui-menuWidget {
- position: absolute;
-}
-
-.oo-ui-menuWidget input {
- position: absolute;
- width: 0;
- height: 0;
- overflow: hidden;
- opacity: 0;
-}
-
-.oo-ui-popupWidget-popup {
- position: absolute;
- overflow: hidden;
-}
-
-.oo-ui-popupWidget-tail {
- display: none;
-}
-
-.oo-ui-popupWidget-tailed .oo-ui-popupWidget-popup {
- margin-top: 7px;
-}
-
-.oo-ui-popupWidget-tailed .oo-ui-popupWidget-tail {
- position: absolute;
- display: block;
- background-repeat: no-repeat;
-}
-
-.oo-ui-popupWidget-head {
- height: 2.5em;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- float: right;
- margin: 0.25em;
-}
-
-.oo-ui-popupWidget-head .oo-ui-labeledElement-label {
- float: left;
- margin: 0.75em 1em;
- cursor: default;
-}
-
-.oo-ui-popupWidget-body {
- clear: both;
-}
-
-.oo-ui-buttonGroupWidget {
- border-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- margin-bottom: -1px;
- margin-left: -1px;
- border-radius: 0;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
- margin-left: 0;
- border-bottom-left-radius: 0.3em;
- border-top-left-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
- border-top-right-radius: 0.3em;
- border-bottom-right-radius: 0.3em;
-}
-
-.oo-ui-buttonOptionWidget {
- display: inline-block;
- background-color: transparent;
-}
-
-.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
- position: relative;
- height: 1.9em;
-}
-
-.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
- position: static;
- display: inline-block;
- height: 1.9em;
- margin-top: 0;
- vertical-align: middle;
-}
-
-.oo-ui-buttonSelectWidget {
- display: inline-block;
- white-space: nowrap;
-}
-
-.oo-ui-buttonWidget {
- display: inline-block;
- vertical-align: middle;
-}
-
-.oo-ui-inlineMenuWidget {
- position: relative;
- display: inline-block;
- min-width: 20em;
- margin: 0.25em 0;
-}
-
-.oo-ui-inlineMenuWidget-handle {
- display: inline-block;
- width: 100%;
- height: 2.5em;
- cursor: pointer;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0;
- width: 2.5em;
- height: 2.5em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
- right: 0;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- left: 0.25em;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin: 0 0.5em;
- line-height: 2.5em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin-left: 3em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin-right: 2em;
-}
-
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
- z-index: 1;
- width: 100%;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- cursor: default;
-}
-
-.oo-ui-menuItemWidget {
- position: relative;
-}
-
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
- display: none;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
- display: block;
-}
-
-.oo-ui-menuSectionItemWidget {
- cursor: default;
-}
-
-.oo-ui-outlineControlsWidget {
- height: 3em;
-}
-
-.oo-ui-outlineControlsWidget-adders,
-.oo-ui-outlineControlsWidget-movers {
- float: left;
- height: 2em;
- padding: 0;
- margin: 0.5em;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
- float: left;
- width: 1.5em;
- height: 2em;
- margin: 0.5em 0 0.5em 0.5em;
- background-position: right center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-outlineControlsWidget-adders {
- float: left;
- margin-left: 0;
-}
-
-.oo-ui-outlineControlsWidget-adders .oo-ui-buttonWidget {
- float: left;
-}
-
-.oo-ui-outlineControlsWidget-movers {
- float: right;
-}
-
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
- float: right;
-}
-
-.oo-ui-outlineItemWidget {
- position: relative;
- padding: 0.75em;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-popupButtonWidget {
- position: relative;
-}
-
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
- position: absolute;
- left: 1em;
- cursor: auto;
-}
-
-.oo-ui-searchWidget-query {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- height: 4em;
- padding: 0 1em;
-}
-
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- width: 100%;
- margin: 0.75em 0;
-}
-
-.oo-ui-searchWidget-results {
- position: absolute;
- top: 4em;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1em;
- overflow-x: hidden;
- overflow-y: auto;
- line-height: 0;
-}
-
-.oo-ui-textInputWidget {
- position: relative;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- resize: none;
-}
-
-.oo-ui-textInputWidget-icon {
- position: absolute;
- top: 0;
- left: 0;
- height: 100%;
- background-position: right center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-toggleSwitchWidget {
- position: relative;
- display: inline-block;
- width: 4em;
- height: 2em;
- overflow: hidden;
- vertical-align: middle;
- cursor: pointer;
- -webkit-transform: translateZ(0);
- -moz-transform: translateZ(0);
- -ms-transform: translateZ(0);
- -o-transform: translateZ(0);
- transform: translateZ(0);
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-
-.oo-ui-toggleSwitchWidget-grip {
- position: absolute;
- top: 0.25em;
- left: 0.25em;
- display: block;
- width: 1.5em;
- height: 1.5em;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-}
-
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- -webkit-transition: opacity 200ms ease-in-out;
- -moz-transition: opacity 200ms ease-in-out;
- -ms-transition: opacity 200ms ease-in-out;
- -o-transition: opacity 200ms ease-in-out;
- transition: opacity 200ms ease-in-out;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
- left: 2.25em;
- margin-left: -2px;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
- left: 0.25em;
- margin-left: 0;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: none;
-}
-
-/* Icons */
-
-.oo-ui-icon-add-item {
- background-image: /* @embed */ url(images/icons/add-item.png);
-}
-
-.oo-ui-icon-advanced {
- background-image: /* @embed */ url(images/icons/advanced.png);
-}
-
-.oo-ui-icon-alert {
- background-image: /* @embed */ url(images/icons/alert.png);
-}
-
-.oo-ui-icon-check {
- background-image: /* @embed */ url(images/icons/check.png);
-}
-
-.oo-ui-icon-clear {
- background-image: /* @embed */ url(images/icons/clear.png);
-}
-
-.oo-ui-icon-close {
- background-image: /* @embed */ url(images/icons/close.png);
-}
-
-.oo-ui-icon-code {
- background-image: /* @embed */ url(images/icons/code.png);
-}
-
-.oo-ui-icon-collapse {
- background-image: /* @embed */ url(images/icons/collapse.png);
-}
-
-.oo-ui-icon-comment {
- background-image: /* @embed */ url(images/icons/comment.png);
-}
-
-.oo-ui-icon-expand {
- background-image: /* @embed */ url(images/icons/expand.png);
-}
-
-.oo-ui-icon-help {
- background-image: /* @embed */ url(images/icons/help.png);
-}
-
-.oo-ui-icon-info {
- background-image: /* @embed */ url(images/icons/info.png);
-}
-
-.oo-ui-icon-link {
- background-image: /* @embed */ url(images/icons/link.png);
-}
-
-.oo-ui-icon-menu {
- background-image: /* @embed */ url(images/icons/menu.png);
-}
-
-.oo-ui-icon-next {
- background-image: /* @embed */ url(images/icons/move-ltr.png);
-}
-
-.oo-ui-icon-picture {
- background-image: /* @embed */ url(images/icons/picture.png);
-}
-
-.oo-ui-icon-previous {
- background-image: /* @embed */ url(images/icons/move-rtl.png);
-}
-
-.oo-ui-icon-redo {
- background-image: /* @embed */ url(images/icons/arched-arrow-ltr.png);
-}
-
-.oo-ui-icon-remove {
- background-image: /* @embed */ url(images/icons/remove.png);
-}
-
-.oo-ui-icon-search {
- background-image: /* @embed */ url(images/icons/search.png);
-}
-
-.oo-ui-icon-settings {
- background-image: /* @embed */ url(images/icons/settings.png);
-}
-
-.oo-ui-icon-tag {
- background-image: /* @embed */ url(images/icons/tag.png);
-}
-
-.oo-ui-icon-undo {
- background-image: /* @embed */ url(images/icons/arched-arrow-rtl.png);
-}
-
-.oo-ui-icon-window {
- background-image: /* @embed */ url(images/icons/window.png);
-}
-
-/* Indicators */
-
-.oo-ui-indicator-alert {
- background-image: /* @embed */ url(images/indicators/alert.png);
-}
-
-.oo-ui-indicator-down {
- background-image: /* @embed */ url(images/indicators/down.png);
-}
-
-.oo-ui-indicator-required {
- background-image: /* @embed */ url(images/indicators/required.png);
-}
-
-.oo-ui-indicator-up {
- background-image: /* @embed */ url(images/indicators/up.png);
-} \ No newline at end of file
diff --git a/resources/lib/oojs-ui/oojs-ui.js b/resources/lib/oojs-ui/oojs-ui.js
index 33c8238d..9692d5cf 100644
--- a/resources/lib/oojs-ui/oojs-ui.js
+++ b/resources/lib/oojs-ui/oojs-ui.js
@@ -1,12 +1,12 @@
/*!
- * OOjs UI v0.1.0-pre (f2c3f12959)
+ * OOjs UI v0.11.3
* https://www.mediawiki.org/wiki/OOjs_UI
*
- * Copyright 2011–2014 OOjs Team and other contributors.
+ * Copyright 2011–2015 OOjs Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2014-09-18T23:22:20Z
+ * Date: 2015-05-12T12:15:37Z
*/
( function ( OO ) {
@@ -45,6 +45,39 @@ OO.ui.Keys = {
};
/**
+ * Check if an element is focusable.
+ * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14
+ *
+ * @param {jQuery} element Element to test
+ * @return {Boolean} [description]
+ */
+OO.ui.isFocusableElement = function ( $element ) {
+ var node = $element[0],
+ nodeName = node.nodeName.toLowerCase(),
+ // Check if the element have tabindex set
+ isInElementGroup = /^(input|select|textarea|button|object)$/.test( nodeName ),
+ // Check if the element is a link with href or if it has tabindex
+ isOtherElement = (
+ ( nodeName === 'a' && node.href ) ||
+ !isNaN( $element.attr( 'tabindex' ) )
+ ),
+ // Check if the element is visible
+ isVisible = (
+ // This is quicker than calling $element.is( ':visible' )
+ $.expr.filters.visible( node ) &&
+ // Check that all parents are visible
+ !$element.parents().addBack().filter( function () {
+ return $.css( this, 'visibility' ) === 'hidden';
+ } ).length
+ );
+
+ return (
+ ( isInElementGroup ? !node.disabled : isOtherElement ) &&
+ isVisible
+ );
+};
+
+/**
* Get the user's language and any fallback languages.
*
* These language codes are used to localize user interface elements in the user's language.
@@ -70,29 +103,100 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
var i, len, langs;
// Requested language
- if ( obj[lang] ) {
- return obj[lang];
+ if ( obj[ lang ] ) {
+ return obj[ lang ];
}
// Known user language
langs = OO.ui.getUserLanguages();
for ( i = 0, len = langs.length; i < len; i++ ) {
- lang = langs[i];
- if ( obj[lang] ) {
- return obj[lang];
+ lang = langs[ i ];
+ if ( obj[ lang ] ) {
+ return obj[ lang ];
}
}
// Fallback language
- if ( obj[fallback] ) {
- return obj[fallback];
+ if ( obj[ fallback ] ) {
+ return obj[ fallback ];
}
// First existing language
for ( lang in obj ) {
- return obj[lang];
+ return obj[ lang ];
}
return undefined;
};
+/**
+ * Check if a node is contained within another node
+ *
+ * Similar to jQuery#contains except a list of containers can be supplied
+ * and a boolean argument allows you to include the container in the match list
+ *
+ * @param {HTMLElement|HTMLElement[]} containers Container node(s) to search in
+ * @param {HTMLElement} contained Node to find
+ * @param {boolean} [matchContainers] Include the container(s) in the list of nodes to match, otherwise only match descendants
+ * @return {boolean} The node is in the list of target nodes
+ */
+OO.ui.contains = function ( containers, contained, matchContainers ) {
+ var i;
+ if ( !Array.isArray( containers ) ) {
+ containers = [ containers ];
+ }
+ for ( i = containers.length - 1; i >= 0; i-- ) {
+ if ( ( matchContainers && contained === containers[ i ] ) || $.contains( containers[ i ], contained ) ) {
+ return true;
+ }
+ }
+ return false;
+};
+
+/**
+ * Return a function, that, as long as it continues to be invoked, will not
+ * be triggered. The function will be called after it stops being called for
+ * N milliseconds. If `immediate` is passed, trigger the function on the
+ * leading edge, instead of the trailing.
+ *
+ * Ported from: http://underscorejs.org/underscore.js
+ *
+ * @param {Function} func
+ * @param {number} wait
+ * @param {boolean} immediate
+ * @return {Function}
+ */
+OO.ui.debounce = function ( func, wait, immediate ) {
+ var timeout;
+ return function () {
+ var context = this,
+ args = arguments,
+ later = function () {
+ timeout = null;
+ if ( !immediate ) {
+ func.apply( context, args );
+ }
+ };
+ if ( immediate && !timeout ) {
+ func.apply( context, args );
+ }
+ clearTimeout( timeout );
+ timeout = setTimeout( later, wait );
+ };
+};
+
+/**
+ * Reconstitute a JavaScript object corresponding to a widget created by
+ * the PHP implementation.
+ *
+ * This is an alias for `OO.ui.Element.static.infuse()`.
+ *
+ * @param {string|HTMLElement|jQuery} idOrNode
+ * A DOM id (if a string) or node for the widget to infuse.
+ * @return {OO.ui.Element}
+ * The `OO.ui.Element` corresponding to this (infusable) document node.
+ */
+OO.ui.infuse = function ( idOrNode ) {
+ return OO.ui.Element.static.infuse( idOrNode );
+};
+
( function () {
/**
* Message store for the default implementation of OO.ui.msg
@@ -111,6 +215,10 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
'ooui-outline-control-remove': 'Remove item',
// Label for the toolbar group that contains a list of all other available tools
'ooui-toolbar-more': 'More',
+ // Label for the fake tool that expands the full list of tools in a toolbar group
+ 'ooui-toolgroup-expand': 'More',
+ // Label for the fake tool that collapses the full list of tools in a toolbar group
+ 'ooui-toolgroup-collapse': 'Fewer',
// Default label for the accept button of a confirmation dialog
'ooui-dialog-message-accept': 'OK',
// Default label for the reject button of a confirmation dialog
@@ -119,8 +227,10 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
'ooui-dialog-process-error': 'Something went wrong',
// Label for process dialog dismiss error button, visible when describing errors
'ooui-dialog-process-dismiss': 'Dismiss',
- // Label for process dialog retry action button, visible when describing recoverable errors
- 'ooui-dialog-process-retry': 'Try again'
+ // Label for process dialog retry action button, visible when describing only recoverable errors
+ 'ooui-dialog-process-retry': 'Try again',
+ // Label for process dialog retry action button, visible when describing only warnings
+ 'ooui-dialog-process-continue': 'Continue'
};
/**
@@ -141,12 +251,13 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
* @return {string} Translated message with parameters substituted
*/
OO.ui.msg = function ( key ) {
- var message = messages[key], params = Array.prototype.slice.call( arguments, 1 );
+ var message = messages[ key ],
+ params = Array.prototype.slice.call( arguments, 1 );
if ( typeof message === 'string' ) {
// Perform $1 substitution
message = message.replace( /\$(\d+)/g, function ( unused, n ) {
var i = parseInt( n, 10 );
- return params[i - 1] !== undefined ? params[i - 1] : '$' + n;
+ return params[ i - 1 ] !== undefined ? params[ i - 1 ] : '$' + n;
} );
} else {
// Return placeholder if message not found
@@ -196,9 +307,10 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
*
* @constructor
* @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$pending] Element to mark as pending, defaults to this.$element
*/
OO.ui.PendingElement = function OoUiPendingElement( config ) {
- // Config initialisation
+ // Configuration initialization
config = config || {};
// Properties
@@ -248,6 +360,7 @@ OO.ui.PendingElement.prototype.isPending = function () {
OO.ui.PendingElement.prototype.pushPending = function () {
if ( this.pending === 0 ) {
this.$pending.addClass( 'oo-ui-pendingElement-pending' );
+ this.updateThemeClasses();
}
this.pending++;
@@ -264,6 +377,7 @@ OO.ui.PendingElement.prototype.pushPending = function () {
OO.ui.PendingElement.prototype.popPending = function () {
if ( this.pending === 1 ) {
this.$pending.removeClass( 'oo-ui-pendingElement-pending' );
+ this.updateThemeClasses();
}
this.pending = Math.max( 0, this.pending - 1 );
@@ -271,7 +385,76 @@ OO.ui.PendingElement.prototype.popPending = function () {
};
/**
- * List of actions.
+ * ActionSets manage the behavior of the {@link OO.ui.ActionWidget action widgets} that comprise them.
+ * Actions can be made available for specific contexts (modes) and circumstances
+ * (abilities). Action sets are primarily used with {@link OO.ui.Dialog Dialogs}.
+ *
+ * ActionSets contain two types of actions:
+ *
+ * - Special: Special actions are the first visible actions with special flags, such as 'safe' and 'primary', the default special flags. Additional special flags can be configured in subclasses with the static #specialFlags property.
+ * - Other: Other actions include all non-special visible actions.
+ *
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ *
+ * @example
+ * // Example: An action set used in a process dialog
+ * function MyProcessDialog( config ) {
+ * MyProcessDialog.super.call( this, config );
+ * }
+ * OO.inheritClass( MyProcessDialog, OO.ui.ProcessDialog );
+ * MyProcessDialog.static.title = 'An action set in a process dialog';
+ * // An action set that uses modes ('edit' and 'help' mode, in this example).
+ * MyProcessDialog.static.actions = [
+ * { action: 'continue', modes: 'edit', label: 'Continue', flags: [ 'primary', 'constructive' ] },
+ * { action: 'help', modes: 'edit', label: 'Help' },
+ * { modes: 'edit', label: 'Cancel', flags: 'safe' },
+ * { action: 'back', modes: 'help', label: 'Back', flags: 'safe' }
+ * ];
+ *
+ * MyProcessDialog.prototype.initialize = function () {
+ * MyProcessDialog.super.prototype.initialize.apply( this, arguments );
+ * this.panel1 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ * this.panel1.$element.append( '<p>This dialog uses an action set (continue, help, cancel, back) configured with modes. This is edit mode. Click \'help\' to see help mode.</p>' );
+ * this.panel2 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ * this.panel2.$element.append( '<p>This is help mode. Only the \'back\' action widget is configured to be visible here. Click \'back\' to return to \'edit\' mode.</p>' );
+ * this.stackLayout = new OO.ui.StackLayout( {
+ * items: [ this.panel1, this.panel2 ]
+ * } );
+ * this.$body.append( this.stackLayout.$element );
+ * };
+ * MyProcessDialog.prototype.getSetupProcess = function ( data ) {
+ * return MyProcessDialog.super.prototype.getSetupProcess.call( this, data )
+ * .next( function () {
+ * this.actions.setMode( 'edit' );
+ * }, this );
+ * };
+ * MyProcessDialog.prototype.getActionProcess = function ( action ) {
+ * if ( action === 'help' ) {
+ * this.actions.setMode( 'help' );
+ * this.stackLayout.setItem( this.panel2 );
+ * } else if ( action === 'back' ) {
+ * this.actions.setMode( 'edit' );
+ * this.stackLayout.setItem( this.panel1 );
+ * } else if ( action === 'continue' ) {
+ * var dialog = this;
+ * return new OO.ui.Process( function () {
+ * dialog.close();
+ * } );
+ * }
+ * return MyProcessDialog.super.prototype.getActionProcess.call( this, action );
+ * };
+ * MyProcessDialog.prototype.getBodyHeight = function () {
+ * return this.panel1.$element.outerHeight( true );
+ * };
+ * var windowManager = new OO.ui.WindowManager();
+ * $( 'body' ).append( windowManager.$element );
+ * var dialog = new MyProcessDialog( {
+ * size: 'medium'
+ * } );
+ * windowManager.addWindows( [ dialog ] );
+ * windowManager.openWindow( dialog );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets
*
* @abstract
* @class
@@ -281,7 +464,7 @@ OO.ui.PendingElement.prototype.popPending = function () {
* @param {Object} [config] Configuration options
*/
OO.ui.ActionSet = function OoUiActionSet( config ) {
- // Configuration intialization
+ // Configuration initialization
config = config || {};
// Mixin constructors
@@ -309,7 +492,11 @@ OO.mixinClass( OO.ui.ActionSet, OO.EventEmitter );
/* Static Properties */
/**
- * Symbolic name of dialog.
+ * Symbolic name of the flags used to identify special actions. Special actions are displayed in the
+ * header of a {@link OO.ui.ProcessDialog process dialog}.
+ * See the [OOjs UI documentation on MediaWiki][2] for more information and examples.
+ *
+ * [2]:https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs
*
* @abstract
* @static
@@ -322,26 +509,43 @@ OO.ui.ActionSet.static.specialFlags = [ 'safe', 'primary' ];
/**
* @event click
+ *
+ * A 'click' event is emitted when an action is clicked.
+ *
* @param {OO.ui.ActionWidget} action Action that was clicked
*/
/**
* @event resize
+ *
+ * A 'resize' event is emitted when an action widget is resized.
+ *
* @param {OO.ui.ActionWidget} action Action that was resized
*/
/**
* @event add
+ *
+ * An 'add' event is emitted when actions are {@link #method-add added} to the action set.
+ *
* @param {OO.ui.ActionWidget[]} added Actions added
*/
/**
* @event remove
+ *
+ * A 'remove' event is emitted when actions are {@link #method-remove removed}
+ * or {@link #clear cleared}.
+ *
* @param {OO.ui.ActionWidget[]} added Actions removed
*/
/**
* @event change
+ *
+ * A 'change' event is emitted when actions are {@link #method-add added}, {@link #clear cleared},
+ * or {@link #method-remove removed} from the action set or when the {@link #setMode mode} is changed.
+ *
*/
/* Methods */
@@ -349,6 +553,7 @@ OO.ui.ActionSet.static.specialFlags = [ 'safe', 'primary' ];
/**
* Handle action change events.
*
+ * @private
* @fires change
*/
OO.ui.ActionSet.prototype.onActionChange = function () {
@@ -361,7 +566,7 @@ OO.ui.ActionSet.prototype.onActionChange = function () {
};
/**
- * Check if a action is one of the special actions.
+ * Check if an action is one of the special actions.
*
* @param {OO.ui.ActionWidget} action Action to check
* @return {boolean} Action is special
@@ -370,7 +575,7 @@ OO.ui.ActionSet.prototype.isSpecial = function ( action ) {
var flag;
for ( flag in this.special ) {
- if ( action === this.special[flag] ) {
+ if ( action === this.special[ flag ] ) {
return true;
}
}
@@ -379,15 +584,16 @@ OO.ui.ActionSet.prototype.isSpecial = function ( action ) {
};
/**
- * Get actions.
+ * Get action widgets based on the specified filter: ‘actions’, ‘flags’, ‘modes’, ‘visible’,
+ * or ‘disabled’.
*
* @param {Object} [filters] Filters to use, omit to get all actions
- * @param {string|string[]} [filters.actions] Actions that actions must have
- * @param {string|string[]} [filters.flags] Flags that actions must have
- * @param {string|string[]} [filters.modes] Modes that actions must have
- * @param {boolean} [filters.visible] Actions must be visible
- * @param {boolean} [filters.disabled] Actions must be disabled
- * @return {OO.ui.ActionWidget[]} Actions matching all criteria
+ * @param {string|string[]} [filters.actions] Actions that action widgets must have
+ * @param {string|string[]} [filters.flags] Flags that action widgets must have (e.g., 'safe')
+ * @param {string|string[]} [filters.modes] Modes that action widgets must have
+ * @param {boolean} [filters.visible] Action widgets must be visible
+ * @param {boolean} [filters.disabled] Action widgets must be disabled
+ * @return {OO.ui.ActionWidget[]} Action widgets matching all criteria
*/
OO.ui.ActionSet.prototype.get = function ( filters ) {
var i, len, list, category, actions, index, match, matches;
@@ -398,13 +604,13 @@ OO.ui.ActionSet.prototype.get = function ( filters ) {
// Collect category candidates
matches = [];
for ( category in this.categorized ) {
- list = filters[category];
+ list = filters[ category ];
if ( list ) {
if ( !Array.isArray( list ) ) {
list = [ list ];
}
for ( i = 0, len = list.length; i < len; i++ ) {
- actions = this.categorized[category][list[i]];
+ actions = this.categorized[ category ][ list[ i ] ];
if ( Array.isArray( actions ) ) {
matches.push.apply( matches, actions );
}
@@ -413,7 +619,7 @@ OO.ui.ActionSet.prototype.get = function ( filters ) {
}
// Remove by boolean filters
for ( i = 0, len = matches.length; i < len; i++ ) {
- match = matches[i];
+ match = matches[ i ];
if (
( filters.visible !== undefined && match.isVisible() !== filters.visible ) ||
( filters.disabled !== undefined && match.isDisabled() !== filters.disabled )
@@ -425,7 +631,7 @@ OO.ui.ActionSet.prototype.get = function ( filters ) {
}
// Remove duplicates
for ( i = 0, len = matches.length; i < len; i++ ) {
- match = matches[i];
+ match = matches[ i ];
index = matches.lastIndexOf( match );
while ( index !== i ) {
matches.splice( index, 1 );
@@ -439,12 +645,12 @@ OO.ui.ActionSet.prototype.get = function ( filters ) {
};
/**
- * Get special actions.
+ * Get 'special' actions.
*
- * Special actions are the first visible actions with special flags, such as 'safe' and 'primary'.
- * Special flags can be configured by changing #static-specialFlags in a subclass.
+ * Special actions are the first visible action widgets with special flags, such as 'safe' and 'primary'.
+ * Special flags can be configured in subclasses by changing the static #specialFlags property.
*
- * @return {OO.ui.ActionWidget|null} Safe action
+ * @return {OO.ui.ActionWidget[]|null} 'Special' action widgets.
*/
OO.ui.ActionSet.prototype.getSpecial = function () {
this.organize();
@@ -452,11 +658,11 @@ OO.ui.ActionSet.prototype.getSpecial = function () {
};
/**
- * Get other actions.
+ * Get 'other' actions.
*
- * Other actions include all non-special visible actions.
+ * Other actions include all non-special visible action widgets.
*
- * @return {OO.ui.ActionWidget[]} Other actions
+ * @return {OO.ui.ActionWidget[]} 'Other' action widgets
*/
OO.ui.ActionSet.prototype.getOthers = function () {
this.organize();
@@ -464,12 +670,11 @@ OO.ui.ActionSet.prototype.getOthers = function () {
};
/**
- * Toggle actions based on their modes.
- *
- * Unlike calling toggle on actions with matching flags, this will enforce mutually exclusive
- * visibility; matching actions will be shown, non-matching actions will be hidden.
+ * Set the mode (e.g., ‘edit’ or ‘view’). Only {@link OO.ui.ActionWidget#modes actions} configured
+ * to be available in the specified mode will be made visible. All other actions will be hidden.
*
- * @param {string} mode Mode actions must have
+ * @param {string} mode The mode. Only actions configured to be available in the specified
+ * mode will be made visible.
* @chainable
* @fires toggle
* @fires change
@@ -479,7 +684,7 @@ OO.ui.ActionSet.prototype.setMode = function ( mode ) {
this.changing = true;
for ( i = 0, len = this.list.length; i < len; i++ ) {
- action = this.list[i];
+ action = this.list[ i ];
action.toggle( action.hasMode( mode ) );
}
@@ -491,22 +696,24 @@ OO.ui.ActionSet.prototype.setMode = function ( mode ) {
};
/**
- * Change which actions are able to be performed.
+ * Set the abilities of the specified actions.
*
- * Actions with matching actions will be disabled/enabled. Other actions will not be changed.
+ * Action widgets that are configured with the specified actions will be enabled
+ * or disabled based on the boolean values specified in the `actions`
+ * parameter.
*
- * @param {Object.<string,boolean>} actions List of abilities, keyed by action name, values
- * indicate actions are able to be performed
+ * @param {Object.<string,boolean>} actions A list keyed by action name with boolean
+ * values that indicate whether or not the action should be enabled.
* @chainable
*/
OO.ui.ActionSet.prototype.setAbilities = function ( actions ) {
var i, len, action, item;
for ( i = 0, len = this.list.length; i < len; i++ ) {
- item = this.list[i];
+ item = this.list[ i ];
action = item.getAction();
- if ( actions[action] !== undefined ) {
- item.setDisabled( !actions[action] );
+ if ( actions[ action ] !== undefined ) {
+ item.setDisabled( !actions[ action ] );
}
}
@@ -517,9 +724,9 @@ OO.ui.ActionSet.prototype.setAbilities = function ( actions ) {
* Executes a function once per action.
*
* When making changes to multiple actions, use this method instead of iterating over the actions
- * manually to defer emitting a change event until after all actions have been changed.
+ * manually to defer emitting a #change event until after all actions have been changed.
*
- * @param {Object|null} actions Filters to use for which actions to iterate over; see #get
+ * @param {Object|null} actions Filters to use to determine which actions to iterate over; see #get
* @param {Function} callback Callback to run for each action; callback is invoked with three
* arguments: the action, the action's index, the list of actions being iterated over
* @chainable
@@ -537,9 +744,9 @@ OO.ui.ActionSet.prototype.forEach = function ( filter, callback ) {
};
/**
- * Add actions.
+ * Add action widgets to the action set.
*
- * @param {OO.ui.ActionWidget[]} actions Actions to add
+ * @param {OO.ui.ActionWidget[]} actions Action widgets to add
* @chainable
* @fires add
* @fires change
@@ -549,7 +756,7 @@ OO.ui.ActionSet.prototype.add = function ( actions ) {
this.changing = true;
for ( i = 0, len = actions.length; i < len; i++ ) {
- action = actions[i];
+ action = actions[ i ];
action.connect( this, {
click: [ 'emit', 'click', action ],
resize: [ 'emit', 'resize', action ],
@@ -566,9 +773,11 @@ OO.ui.ActionSet.prototype.add = function ( actions ) {
};
/**
- * Remove actions.
+ * Remove action widgets from the set.
+ *
+ * To remove all actions, you may wish to use the #clear method instead.
*
- * @param {OO.ui.ActionWidget[]} actions Actions to remove
+ * @param {OO.ui.ActionWidget[]} actions Action widgets to remove
* @chainable
* @fires remove
* @fires change
@@ -578,7 +787,7 @@ OO.ui.ActionSet.prototype.remove = function ( actions ) {
this.changing = true;
for ( i = 0, len = actions.length; i < len; i++ ) {
- action = actions[i];
+ action = actions[ i ];
index = this.list.indexOf( action );
if ( index !== -1 ) {
action.disconnect( this );
@@ -594,7 +803,9 @@ OO.ui.ActionSet.prototype.remove = function ( actions ) {
};
/**
- * Remove all actions.
+ * Remove all action widets from the set.
+ *
+ * To remove only specified actions, use the {@link #method-remove remove} method instead.
*
* @chainable
* @fires remove
@@ -606,7 +817,7 @@ OO.ui.ActionSet.prototype.clear = function () {
this.changing = true;
for ( i = 0, len = this.list.length; i < len; i++ ) {
- action = this.list[i];
+ action = this.list[ i ];
action.disconnect( this );
}
@@ -623,7 +834,7 @@ OO.ui.ActionSet.prototype.clear = function () {
/**
* Organize actions.
*
- * This is called whenver organized information is requested. It will only reorganize the actions
+ * This is called whenever organized information is requested. It will only reorganize the actions
* if something has changed since the last time it ran.
*
* @private
@@ -638,31 +849,31 @@ OO.ui.ActionSet.prototype.organize = function () {
this.special = {};
this.others = [];
for ( i = 0, iLen = this.list.length; i < iLen; i++ ) {
- action = this.list[i];
+ action = this.list[ i ];
if ( action.isVisible() ) {
- // Populate catgeories
+ // Populate categories
for ( category in this.categories ) {
- if ( !this.categorized[category] ) {
- this.categorized[category] = {};
+ if ( !this.categorized[ category ] ) {
+ this.categorized[ category ] = {};
}
- list = action[this.categories[category]]();
+ list = action[ this.categories[ category ] ]();
if ( !Array.isArray( list ) ) {
list = [ list ];
}
for ( j = 0, jLen = list.length; j < jLen; j++ ) {
- item = list[j];
- if ( !this.categorized[category][item] ) {
- this.categorized[category][item] = [];
+ item = list[ j ];
+ if ( !this.categorized[ category ][ item ] ) {
+ this.categorized[ category ][ item ] = [];
}
- this.categorized[category][item].push( action );
+ this.categorized[ category ][ item ].push( action );
}
}
// Populate special/others
special = false;
for ( j = 0, jLen = specialFlags.length; j < jLen; j++ ) {
- flag = specialFlags[j];
- if ( !this.special[flag] && action.hasFlag( flag ) ) {
- this.special[flag] = action;
+ flag = specialFlags[ j ];
+ if ( !this.special[ flag ] && action.hasFlag( flag ) ) {
+ this.special[ flag ] = action;
special = true;
break;
}
@@ -679,35 +890,71 @@ OO.ui.ActionSet.prototype.organize = function () {
};
/**
- * DOM element abstraction.
+ * Each Element represents a rendering in the DOM—a button or an icon, for example, or anything
+ * that is visible to a user. Unlike {@link OO.ui.Widget widgets}, plain elements usually do not have events
+ * connected to them and can't be interacted with.
*
* @abstract
* @class
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {Function} [$] jQuery for the frame the widget is in
- * @cfg {string[]} [classes] CSS class names
+ * @cfg {string[]} [classes] The names of the CSS classes to apply to the element. CSS styles are added
+ * to the top level (e.g., the outermost div) of the element. See the [OOjs UI documentation on MediaWiki][2]
+ * for an example.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#cssExample
+ * @cfg {string} [id] The HTML id attribute used in the rendered tag.
* @cfg {string} [text] Text to insert
- * @cfg {jQuery} [$content] Content elements to append (after text)
+ * @cfg {Array} [content] An array of content elements to append (after #text).
+ * Strings will be html-escaped; use an OO.ui.HtmlSnippet to append raw HTML.
+ * Instances of OO.ui.Element will have their $element appended.
+ * @cfg {jQuery} [$content] Content elements to append (after #text)
+ * @cfg {Mixed} [data] Custom data of any type or combination of types (e.g., string, number, array, object).
+ * Data can also be specified with the #setData method.
*/
OO.ui.Element = function OoUiElement( config ) {
// Configuration initialization
config = config || {};
// Properties
- this.$ = config.$ || OO.ui.Element.getJQuery( document );
- this.$element = this.$( this.$.context.createElement( this.getTagName() ) );
+ this.$ = $;
+ this.visible = true;
+ this.data = config.data;
+ this.$element = config.$element ||
+ $( document.createElement( this.getTagName() ) );
this.elementGroup = null;
+ this.debouncedUpdateThemeClassesHandler = this.debouncedUpdateThemeClasses.bind( this );
+ this.updateThemeClassesPending = false;
// Initialization
- if ( $.isArray( config.classes ) ) {
+ if ( Array.isArray( config.classes ) ) {
this.$element.addClass( config.classes.join( ' ' ) );
}
+ if ( config.id ) {
+ this.$element.attr( 'id', config.id );
+ }
if ( config.text ) {
this.$element.text( config.text );
}
+ if ( config.content ) {
+ // The `content` property treats plain strings as text; use an
+ // HtmlSnippet to append HTML content. `OO.ui.Element`s get their
+ // appropriate $element appended.
+ this.$element.append( config.content.map( function ( v ) {
+ if ( typeof v === 'string' ) {
+ // Escape string so it is properly represented in HTML.
+ return document.createTextNode( v );
+ } else if ( v instanceof OO.ui.HtmlSnippet ) {
+ // Bypass escaping.
+ return v.toString();
+ } else if ( v instanceof OO.ui.Element ) {
+ return v.$element;
+ }
+ return v;
+ } ) );
+ }
if ( config.$content ) {
+ // The `$content` property treats plain strings as HTML.
this.$element.append( config.$content );
}
};
@@ -719,9 +966,9 @@ OO.initClass( OO.ui.Element );
/* Static Properties */
/**
- * HTML tag name.
+ * The name of the HTML tag used by the element.
*
- * This may be ignored if getTagName is overridden.
+ * The static value may be ignored if the #getTagName method is overridden.
*
* @static
* @inheritable
@@ -732,6 +979,103 @@ OO.ui.Element.static.tagName = 'div';
/* Static Methods */
/**
+ * Reconstitute a JavaScript object corresponding to a widget created
+ * by the PHP implementation.
+ *
+ * @param {string|HTMLElement|jQuery} idOrNode
+ * A DOM id (if a string) or node for the widget to infuse.
+ * @return {OO.ui.Element}
+ * The `OO.ui.Element` corresponding to this (infusable) document node.
+ * For `Tag` objects emitted on the HTML side (used occasionally for content)
+ * the value returned is a newly-created Element wrapping around the existing
+ * DOM node.
+ */
+OO.ui.Element.static.infuse = function ( idOrNode ) {
+ var obj = OO.ui.Element.static.unsafeInfuse( idOrNode, true );
+ // Verify that the type matches up.
+ // FIXME: uncomment after T89721 is fixed (see T90929)
+ /*
+ if ( !( obj instanceof this['class'] ) ) {
+ throw new Error( 'Infusion type mismatch!' );
+ }
+ */
+ return obj;
+};
+
+/**
+ * Implementation helper for `infuse`; skips the type check and has an
+ * extra property so that only the top-level invocation touches the DOM.
+ * @private
+ * @param {string|HTMLElement|jQuery} idOrNode
+ * @param {boolean} top True only for top-level invocation.
+ * @return {OO.ui.Element}
+ */
+OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) {
+ // look for a cached result of a previous infusion.
+ var id, $elem, data, cls, obj;
+ if ( typeof idOrNode === 'string' ) {
+ id = idOrNode;
+ $elem = $( document.getElementById( id ) );
+ } else {
+ $elem = $( idOrNode );
+ id = $elem.attr( 'id' );
+ }
+ data = $elem.data( 'ooui-infused' );
+ if ( data ) {
+ // cached!
+ if ( data === true ) {
+ throw new Error( 'Circular dependency! ' + id );
+ }
+ return data;
+ }
+ if ( !$elem.length ) {
+ throw new Error( 'Widget not found: ' + id );
+ }
+ data = $elem.attr( 'data-ooui' );
+ if ( !data ) {
+ throw new Error( 'No infusion data found: ' + id );
+ }
+ try {
+ data = $.parseJSON( data );
+ } catch ( _ ) {
+ data = null;
+ }
+ if ( !( data && data._ ) ) {
+ throw new Error( 'No valid infusion data found: ' + id );
+ }
+ if ( data._ === 'Tag' ) {
+ // Special case: this is a raw Tag; wrap existing node, don't rebuild.
+ return new OO.ui.Element( { $element: $elem } );
+ }
+ cls = OO.ui[data._];
+ if ( !cls ) {
+ throw new Error( 'Unknown widget type: ' + id );
+ }
+ $elem.data( 'ooui-infused', true ); // prevent loops
+ data.id = id; // implicit
+ data = OO.copy( data, null, function deserialize( value ) {
+ if ( OO.isPlainObject( value ) ) {
+ if ( value.tag ) {
+ return OO.ui.Element.static.unsafeInfuse( value.tag, false );
+ }
+ if ( value.html ) {
+ return new OO.ui.HtmlSnippet( value.html );
+ }
+ }
+ } );
+ // jscs:disable requireCapitalizedConstructors
+ obj = new cls( data ); // rebuild widget
+ // now replace old DOM with this new DOM.
+ if ( top ) {
+ $elem.replaceWith( obj.$element );
+ }
+ obj.$element.data( 'ooui-infused', obj );
+ // set the 'data-ooui' attribute so we can identify infused widgets
+ obj.$element.attr( 'data-ooui', '' );
+ return obj;
+};
+
+/**
* Get a jQuery function within a specific document.
*
* @static
@@ -740,7 +1084,7 @@ OO.ui.Element.static.tagName = 'div';
* not in an iframe
* @return {Function} Bound jQuery function
*/
-OO.ui.Element.getJQuery = function ( context, $iframe ) {
+OO.ui.Element.static.getJQuery = function ( context, $iframe ) {
function wrapper( selector ) {
return $( selector, wrapper.context );
}
@@ -761,9 +1105,9 @@ OO.ui.Element.getJQuery = function ( context, $iframe ) {
* @param {jQuery|HTMLElement|HTMLDocument|Window} obj Object to get the document for
* @return {HTMLDocument|null} Document object
*/
-OO.ui.Element.getDocument = function ( obj ) {
+OO.ui.Element.static.getDocument = function ( obj ) {
// jQuery - selections created "offscreen" won't have a context, so .context isn't reliable
- return ( obj[0] && obj[0].ownerDocument ) ||
+ return ( obj[ 0 ] && obj[ 0 ].ownerDocument ) ||
// Empty jQuery selections might have a context
obj.context ||
// HTMLElement
@@ -782,7 +1126,7 @@ OO.ui.Element.getDocument = function ( obj ) {
* @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the window for
* @return {Window} Window object
*/
-OO.ui.Element.getWindow = function ( obj ) {
+OO.ui.Element.static.getWindow = function ( obj ) {
var doc = this.getDocument( obj );
return doc.parentWindow || doc.defaultView;
};
@@ -792,13 +1136,13 @@ OO.ui.Element.getWindow = function ( obj ) {
*
* @static
* @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the direction for
- * @return {string} Text direction, either `ltr` or `rtl`
+ * @return {string} Text direction, either 'ltr' or 'rtl'
*/
-OO.ui.Element.getDir = function ( obj ) {
+OO.ui.Element.static.getDir = function ( obj ) {
var isDoc, isWin;
if ( obj instanceof jQuery ) {
- obj = obj[0];
+ obj = obj[ 0 ];
}
isDoc = obj.nodeType === 9;
isWin = obj.document !== undefined;
@@ -822,7 +1166,7 @@ OO.ui.Element.getDir = function ( obj ) {
* @param {Object} [offset] Offset to start with, used internally
* @return {Object} Offset object, containing left and top properties
*/
-OO.ui.Element.getFrameOffset = function ( from, to, offset ) {
+OO.ui.Element.static.getFrameOffset = function ( from, to, offset ) {
var i, len, frames, frame, rect;
if ( !to ) {
@@ -838,8 +1182,8 @@ OO.ui.Element.getFrameOffset = function ( from, to, offset ) {
// Get iframe element
frames = from.parent.document.getElementsByTagName( 'iframe' );
for ( i = 0, len = frames.length; i < len; i++ ) {
- if ( frames[i].contentWindow === from ) {
- frame = frames[i];
+ if ( frames[ i ].contentWindow === from ) {
+ frame = frames[ i ];
break;
}
}
@@ -859,15 +1203,35 @@ OO.ui.Element.getFrameOffset = function ( from, to, offset ) {
/**
* Get the offset between two elements.
*
+ * The two elements may be in a different frame, but in that case the frame $element is in must
+ * be contained in the frame $anchor is in.
+ *
* @static
- * @param {jQuery} $from
- * @param {jQuery} $to
+ * @param {jQuery} $element Element whose position to get
+ * @param {jQuery} $anchor Element to get $element's position relative to
* @return {Object} Translated position coordinates, containing top and left properties
*/
-OO.ui.Element.getRelativePosition = function ( $from, $to ) {
- var from = $from.offset(),
- to = $to.offset();
- return { top: Math.round( from.top - to.top ), left: Math.round( from.left - to.left ) };
+OO.ui.Element.static.getRelativePosition = function ( $element, $anchor ) {
+ var iframe, iframePos,
+ pos = $element.offset(),
+ anchorPos = $anchor.offset(),
+ elementDocument = this.getDocument( $element ),
+ anchorDocument = this.getDocument( $anchor );
+
+ // If $element isn't in the same document as $anchor, traverse up
+ while ( elementDocument !== anchorDocument ) {
+ iframe = elementDocument.defaultView.frameElement;
+ if ( !iframe ) {
+ throw new Error( '$element frame is not contained in $anchor frame' );
+ }
+ iframePos = $( iframe ).offset();
+ pos.left += iframePos.left;
+ pos.top += iframePos.top;
+ elementDocument = iframe.ownerDocument;
+ }
+ pos.left -= anchorPos.left;
+ pos.top -= anchorPos.top;
+ return pos;
};
/**
@@ -877,7 +1241,7 @@ OO.ui.Element.getRelativePosition = function ( $from, $to ) {
* @param {HTMLElement} el Element to measure
* @return {Object} Dimensions object with `top`, `left`, `bottom` and `right` properties
*/
-OO.ui.Element.getBorders = function ( el ) {
+OO.ui.Element.static.getBorders = function ( el ) {
var doc = el.ownerDocument,
win = doc.parentWindow || doc.defaultView,
style = win && win.getComputedStyle ?
@@ -890,10 +1254,10 @@ OO.ui.Element.getBorders = function ( el ) {
right = parseFloat( style ? style.borderRightWidth : $el.css( 'borderRightWidth' ) ) || 0;
return {
- top: Math.round( top ),
- left: Math.round( left ),
- bottom: Math.round( bottom ),
- right: Math.round( right )
+ top: top,
+ left: left,
+ bottom: bottom,
+ right: right
};
};
@@ -904,7 +1268,7 @@ OO.ui.Element.getBorders = function ( el ) {
* @param {HTMLElement|Window} el Element to measure
* @return {Object} Dimensions object with `borders`, `scroll`, `scrollbar` and `rect` properties
*/
-OO.ui.Element.getDimensions = function ( el ) {
+OO.ui.Element.static.getDimensions = function ( el ) {
var $el, $win,
doc = el.ownerDocument || el.document,
win = doc.parentWindow || doc.defaultView;
@@ -943,6 +1307,38 @@ OO.ui.Element.getDimensions = function ( el ) {
};
/**
+ * Get scrollable object parent
+ *
+ * documentElement can't be used to get or set the scrollTop
+ * property on Blink. Changing and testing its value lets us
+ * use 'body' or 'documentElement' based on what is working.
+ *
+ * https://code.google.com/p/chromium/issues/detail?id=303131
+ *
+ * @static
+ * @param {HTMLElement} el Element to find scrollable parent for
+ * @return {HTMLElement} Scrollable parent
+ */
+OO.ui.Element.static.getRootScrollableElement = function ( el ) {
+ var scrollTop, body;
+
+ if ( OO.ui.scrollableElement === undefined ) {
+ body = el.ownerDocument.body;
+ scrollTop = body.scrollTop;
+ body.scrollTop = 1;
+
+ if ( body.scrollTop === 1 ) {
+ body.scrollTop = scrollTop;
+ OO.ui.scrollableElement = 'body';
+ } else {
+ OO.ui.scrollableElement = 'documentElement';
+ }
+ }
+
+ return el.ownerDocument[ OO.ui.scrollableElement ];
+};
+
+/**
* Get closest scrollable container.
*
* Traverses up until either a scrollable element or the root is reached, in which case the window
@@ -953,7 +1349,7 @@ OO.ui.Element.getDimensions = function ( el ) {
* @param {string} [dimension] Dimension of scrolling to look for; `x`, `y` or omit for either
* @return {HTMLElement} Closest scrollable container
*/
-OO.ui.Element.getClosestScrollableContainer = function ( el, dimension ) {
+OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) {
var i, val,
props = [ 'overflow' ],
$parent = $( el ).parent();
@@ -963,14 +1359,14 @@ OO.ui.Element.getClosestScrollableContainer = function ( el, dimension ) {
}
while ( $parent.length ) {
- if ( $parent[0] === el.ownerDocument.body ) {
- return $parent[0];
+ if ( $parent[ 0 ] === this.getRootScrollableElement( el ) ) {
+ return $parent[ 0 ];
}
i = props.length;
while ( i-- ) {
- val = $parent.css( props[i] );
+ val = $parent.css( props[ i ] );
if ( val === 'auto' || val === 'scroll' ) {
- return $parent[0];
+ return $parent[ 0 ];
}
}
$parent = $parent.parent();
@@ -983,13 +1379,13 @@ OO.ui.Element.getClosestScrollableContainer = function ( el, dimension ) {
*
* @static
* @param {HTMLElement} el Element to scroll into view
- * @param {Object} [config={}] Configuration config
+ * @param {Object} [config] Configuration options
* @param {string} [config.duration] jQuery animation duration value
* @param {string} [config.direction] Scroll in only one direction, e.g. 'x' or 'y', omit
* to scroll in both directions
* @param {Function} [config.complete] Function to call when scrolling completes
*/
-OO.ui.Element.scrollIntoView = function ( el, config ) {
+OO.ui.Element.static.scrollIntoView = function ( el, config ) {
// Configuration initialization
config = config || {};
@@ -1002,8 +1398,8 @@ OO.ui.Element.scrollIntoView = function ( el, config ) {
$win = $( this.getWindow( el ) );
// Compute the distances between the edges of el and the edges of the scroll viewport
- if ( $sc.is( 'body' ) ) {
- // If the scrollable container is the <body> this is easy
+ if ( $sc.is( 'html, body' ) ) {
+ // If the scrollable container is the root, this is easy
rel = {
top: eld.rect.top,
bottom: $win.innerHeight() - eld.rect.bottom,
@@ -1049,9 +1445,126 @@ OO.ui.Element.scrollIntoView = function ( el, config ) {
}
};
+/**
+ * Force the browser to reconsider whether it really needs to render scrollbars inside the element
+ * and reserve space for them, because it probably doesn't.
+ *
+ * Workaround primarily for <https://code.google.com/p/chromium/issues/detail?id=387290>, but also
+ * similar bugs in other browsers. "Just" forcing a reflow is not sufficient in all cases, we need
+ * to first actually detach (or hide, but detaching is simpler) all children, *then* force a reflow,
+ * and then reattach (or show) them back.
+ *
+ * @static
+ * @param {HTMLElement} el Element to reconsider the scrollbars on
+ */
+OO.ui.Element.static.reconsiderScrollbars = function ( el ) {
+ var i, len, nodes = [];
+ // Detach all children
+ while ( el.firstChild ) {
+ nodes.push( el.firstChild );
+ el.removeChild( el.firstChild );
+ }
+ // Force reflow
+ void el.offsetHeight;
+ // Reattach all children
+ for ( i = 0, len = nodes.length; i < len; i++ ) {
+ el.appendChild( nodes[ i ] );
+ }
+};
+
/* Methods */
/**
+ * Toggle visibility of an element.
+ *
+ * @param {boolean} [show] Make element visible, omit to toggle visibility
+ * @fires visible
+ * @chainable
+ */
+OO.ui.Element.prototype.toggle = function ( show ) {
+ show = show === undefined ? !this.visible : !!show;
+
+ if ( show !== this.isVisible() ) {
+ this.visible = show;
+ this.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );
+ this.emit( 'toggle', show );
+ }
+
+ return this;
+};
+
+/**
+ * Check if element is visible.
+ *
+ * @return {boolean} element is visible
+ */
+OO.ui.Element.prototype.isVisible = function () {
+ return this.visible;
+};
+
+/**
+ * Get element data.
+ *
+ * @return {Mixed} Element data
+ */
+OO.ui.Element.prototype.getData = function () {
+ return this.data;
+};
+
+/**
+ * Set element data.
+ *
+ * @param {Mixed} Element data
+ * @chainable
+ */
+OO.ui.Element.prototype.setData = function ( data ) {
+ this.data = data;
+ return this;
+};
+
+/**
+ * Check if element supports one or more methods.
+ *
+ * @param {string|string[]} methods Method or list of methods to check
+ * @return {boolean} All methods are supported
+ */
+OO.ui.Element.prototype.supports = function ( methods ) {
+ var i, len,
+ support = 0;
+
+ methods = Array.isArray( methods ) ? methods : [ methods ];
+ for ( i = 0, len = methods.length; i < len; i++ ) {
+ if ( $.isFunction( this[ methods[ i ] ] ) ) {
+ support++;
+ }
+ }
+
+ return methods.length === support;
+};
+
+/**
+ * Update the theme-provided classes.
+ *
+ * @localdoc This is called in element mixins and widget classes any time state changes.
+ * Updating is debounced, minimizing overhead of changing multiple attributes and
+ * guaranteeing that theme updates do not occur within an element's constructor
+ */
+OO.ui.Element.prototype.updateThemeClasses = function () {
+ if ( !this.updateThemeClassesPending ) {
+ this.updateThemeClassesPending = true;
+ setTimeout( this.debouncedUpdateThemeClassesHandler );
+ }
+};
+
+/**
+ * @private
+ */
+OO.ui.Element.prototype.debouncedUpdateThemeClasses = function () {
+ OO.ui.theme.updateElementClasses( this );
+ this.updateThemeClassesPending = false;
+};
+
+/**
* Get the HTML tag name.
*
* Override this method to base the result on instance information.
@@ -1067,7 +1580,7 @@ OO.ui.Element.prototype.getTagName = function () {
* @return {boolean} The element is attached to the DOM
*/
OO.ui.Element.prototype.isElementAttached = function () {
- return $.contains( this.getElementDocument(), this.$element[0] );
+ return $.contains( this.getElementDocument(), this.$element[ 0 ] );
};
/**
@@ -1076,7 +1589,8 @@ OO.ui.Element.prototype.isElementAttached = function () {
* @return {HTMLDocument} Document object
*/
OO.ui.Element.prototype.getElementDocument = function () {
- return OO.ui.Element.getDocument( this.$element );
+ // Don't cache this in other ways either because subclasses could can change this.$element
+ return OO.ui.Element.static.getDocument( this.$element );
};
/**
@@ -1085,14 +1599,14 @@ OO.ui.Element.prototype.getElementDocument = function () {
* @return {Window} Window object
*/
OO.ui.Element.prototype.getElementWindow = function () {
- return OO.ui.Element.getWindow( this.$element );
+ return OO.ui.Element.static.getWindow( this.$element );
};
/**
* Get closest scrollable container.
*/
OO.ui.Element.prototype.getClosestScrollableElementContainer = function () {
- return OO.ui.Element.getClosestScrollableContainer( this.$element[0] );
+ return OO.ui.Element.static.getClosestScrollableContainer( this.$element[ 0 ] );
};
/**
@@ -1118,67 +1632,18 @@ OO.ui.Element.prototype.setElementGroup = function ( group ) {
/**
* Scroll element into view.
*
- * @param {Object} [config={}]
+ * @param {Object} [config] Configuration options
*/
OO.ui.Element.prototype.scrollElementIntoView = function ( config ) {
- return OO.ui.Element.scrollIntoView( this.$element[0], config );
-};
-
-/**
- * Bind a handler for an event on this.$element
- *
- * @deprecated Use jQuery#on instead.
- * @param {string} event
- * @param {Function} callback
- */
-OO.ui.Element.prototype.onDOMEvent = function ( event, callback ) {
- OO.ui.Element.onDOMEvent( this.$element, event, callback );
-};
-
-/**
- * Unbind a handler bound with #offDOMEvent
- *
- * @deprecated Use jQuery#off instead.
- * @param {string} event
- * @param {Function} callback
- */
-OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
- OO.ui.Element.offDOMEvent( this.$element, event, callback );
+ return OO.ui.Element.static.scrollIntoView( this.$element[ 0 ], config );
};
-( function () {
- /**
- * Bind a handler for an event on a DOM element.
- *
- * Used to be for working around a jQuery bug (jqbug.com/14180),
- * but obsolete as of jQuery 1.11.0.
- *
- * @static
- * @deprecated Use jQuery#on instead.
- * @param {HTMLElement|jQuery} el DOM element
- * @param {string} event Event to bind
- * @param {Function} callback Callback to call when the event fires
- */
- OO.ui.Element.onDOMEvent = function ( el, event, callback ) {
- $( el ).on( event, callback );
- };
-
- /**
- * Unbind a handler bound with #static-method-onDOMEvent.
- *
- * @deprecated Use jQuery#off instead.
- * @static
- * @param {HTMLElement|jQuery} el DOM element
- * @param {string} event Event to unbind
- * @param {Function} [callback] Callback to unbind
- */
- OO.ui.Element.offDOMEvent = function ( el, event, callback ) {
- $( el ).off( event, callback );
- };
-}() );
-
/**
- * Container for elements.
+ * Layouts are containers for elements and are used to arrange other widgets of arbitrary type in a way
+ * that is centrally controlled and can be updated dynamically. Layouts can be, and usually are, combined.
+ * See {@link OO.ui.FieldsetLayout FieldsetLayout}, {@link OO.ui.FieldLayout FieldLayout}, {@link OO.ui.FormLayout FormLayout},
+ * {@link OO.ui.PanelLayout PanelLayout}, {@link OO.ui.StackLayout StackLayout}, {@link OO.ui.PageLayout PageLayout},
+ * and {@link OO.ui.BookletLayout BookletLayout} for more information and examples.
*
* @abstract
* @class
@@ -1189,7 +1654,7 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
* @param {Object} [config] Configuration options
*/
OO.ui.Layout = function OoUiLayout( config ) {
- // Initialize config
+ // Configuration initialization
config = config || {};
// Parent constructor
@@ -1208,7 +1673,9 @@ OO.inheritClass( OO.ui.Layout, OO.ui.Element );
OO.mixinClass( OO.ui.Layout, OO.EventEmitter );
/**
- * User interface control.
+ * Widgets are compositions of one or more OOjs UI elements that users can both view
+ * and interact with. All widgets can be configured and modified via a standard API,
+ * and their state can change dynamically according to a model.
*
* @abstract
* @class
@@ -1217,7 +1684,8 @@ OO.mixinClass( OO.ui.Layout, OO.EventEmitter );
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {boolean} [disabled=false] Disable
+ * @cfg {boolean} [disabled=false] Disable the widget. Disabled widgets cannot be used and their
+ * appearance reflects this state.
*/
OO.ui.Widget = function OoUiWidget( config ) {
// Initialize config
@@ -1230,7 +1698,6 @@ OO.ui.Widget = function OoUiWidget( config ) {
OO.EventEmitter.call( this );
// Properties
- this.visible = true;
this.disabled = null;
this.wasDisabled = null;
@@ -1248,11 +1715,17 @@ OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
/**
* @event disable
+ *
+ * A 'disable' event is emitted when a widget is disabled.
+ *
* @param {boolean} disabled Widget is disabled
*/
/**
* @event toggle
+ *
+ * A 'toggle' event is emitted when the visibility of the widget changes.
+ *
* @param {boolean} visible Widget is visible
*/
@@ -1261,25 +1734,16 @@ OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
/**
* Check if the widget is disabled.
*
- * @param {boolean} Button is disabled
+ * @return {boolean} Widget is disabled
*/
OO.ui.Widget.prototype.isDisabled = function () {
return this.disabled;
};
/**
- * Check if widget is visible.
- *
- * @return {boolean} Widget is visible
- */
-OO.ui.Widget.prototype.isVisible = function () {
- return this.visible;
-};
-
-/**
- * Set the disabled state of the widget.
+ * Set the 'disabled' state of the widget.
*
- * This should probably change the widgets' appearance and prevent it from being used.
+ * When a widget is disabled, it cannot be used and its appearance is updated to reflect this state.
*
* @param {boolean} disabled Disable widget
* @chainable
@@ -1292,7 +1756,9 @@ OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
if ( isDisabled !== this.wasDisabled ) {
this.$element.toggleClass( 'oo-ui-widget-disabled', isDisabled );
this.$element.toggleClass( 'oo-ui-widget-enabled', !isDisabled );
+ this.$element.attr( 'aria-disabled', isDisabled.toString() );
this.emit( 'disable', isDisabled );
+ this.updateThemeClasses();
}
this.wasDisabled = isDisabled;
@@ -1300,25 +1766,6 @@ OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
};
/**
- * Toggle visibility of widget.
- *
- * @param {boolean} [show] Make widget visible, omit to toggle visibility
- * @fires visible
- * @chainable
- */
-OO.ui.Widget.prototype.toggle = function ( show ) {
- show = show === undefined ? !this.visible : !!show;
-
- if ( show !== this.isVisible() ) {
- this.visible = show;
- this.$element.toggle( show );
- this.emit( 'toggle', show );
- }
-
- return this;
-};
-
-/**
* Update the disabled state, in case of changes in parent widget.
*
* @chainable
@@ -1329,45 +1776,49 @@ OO.ui.Widget.prototype.updateDisabled = function () {
};
/**
- * Container for elements in a child frame.
+ * A window is a container for elements that are in a child frame. They are used with
+ * a window manager (OO.ui.WindowManager), which is used to open and close the window and control
+ * its presentation. The size of a window is specified using a symbolic name (e.g., ‘small’, ‘medium’,
+ * ‘large’), which is interpreted by the window manager. If the requested size is not recognized,
+ * the window manager will choose a sensible fallback.
*
- * Use together with OO.ui.WindowManager.
+ * The lifecycle of a window has three primary stages (opening, opened, and closing) in which
+ * different processes are executed:
*
- * @abstract
- * @class
- * @extends OO.ui.Element
- * @mixins OO.EventEmitter
- *
- * When a window is opened, the setup and ready processes are executed. Similarly, the hold and
- * teardown processes are executed when the window is closed.
+ * **opening**: The opening stage begins when the window manager's {@link OO.ui.WindowManager#openWindow
+ * openWindow} or the window's {@link #open open} methods are used, and the window manager begins to open
+ * the window.
*
- * - {@link OO.ui.WindowManager#openWindow} or {@link #open} methods are used to start opening
- * - Window manager begins opening window
* - {@link #getSetupProcess} method is called and its result executed
* - {@link #getReadyProcess} method is called and its result executed
- * - Window is now open
*
- * - {@link OO.ui.WindowManager#closeWindow} or {@link #close} methods are used to start closing
- * - Window manager begins closing window
+ * **opened**: The window is now open
+ *
+ * **closing**: The closing stage begins when the window manager's
+ * {@link OO.ui.WindowManager#closeWindow closeWindow}
+ * or the window's {@link #close} methods are used, and the window manager begins to close the window.
+ *
* - {@link #getHoldProcess} method is called and its result executed
- * - {@link #getTeardownProcess} method is called and its result executed
- * - Window is now closed
+ * - {@link #getTeardownProcess} method is called and its result executed. The window is now closed
+ *
+ * Each of the window's processes (setup, ready, hold, and teardown) can be extended in subclasses
+ * by overriding the window's #getSetupProcess, #getReadyProcess, #getHoldProcess and #getTeardownProcess
+ * methods. Note that each {@link OO.ui.Process process} is executed in series, so asynchronous
+ * processing can complete. Always assume window processes are executed asynchronously.
*
- * Each process (setup, ready, hold and teardown) can be extended in subclasses by overriding
- * {@link #getSetupProcess}, {@link #getReadyProcess}, {@link #getHoldProcess} and
- * {@link #getTeardownProcess} respectively. Each process is executed in series, so asynchonous
- * processing can complete. Always assume window processes are executed asychronously. See
- * OO.ui.Process for more details about how to work with processes. Some events, as well as the
- * #open and #close methods, provide promises which are resolved when the window enters a new state.
+ * For more information, please see the [OOjs UI documentation on MediaWiki] [1].
*
- * Sizing of windows is specified using symbolic names which are interpreted by the window manager.
- * If the requested size is not recognized, the window manager will choose a sensible fallback.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {string} [size] Symbolic name of dialog size, `small`, `medium`, `large` or `full`; omit to
- * use #static-size
- * @fires initialize
+ * @cfg {string} [size] Symbolic name of the dialog size: `small`, `medium`, `large`, `larger` or
+ * `full`. If omitted, the value of the {@link #static-size static size} property will be used.
*/
OO.ui.Window = function OoUiWindow( config ) {
// Configuration initialization
@@ -1381,23 +1832,29 @@ OO.ui.Window = function OoUiWindow( config ) {
// Properties
this.manager = null;
- this.initialized = false;
- this.visible = false;
- this.opening = null;
- this.closing = null;
- this.opened = null;
- this.timing = null;
- this.loading = null;
this.size = config.size || this.constructor.static.size;
- this.$frame = this.$( '<div>' );
+ this.$frame = $( '<div>' );
+ this.$overlay = $( '<div>' );
+ this.$content = $( '<div>' );
// Initialization
+ this.$overlay.addClass( 'oo-ui-window-overlay' );
+ this.$content
+ .addClass( 'oo-ui-window-content' )
+ .attr( 'tabindex', 0 );
+ this.$frame
+ .addClass( 'oo-ui-window-frame' )
+ .append( this.$content );
+
this.$element
.addClass( 'oo-ui-window' )
- .append( this.$frame );
- this.$frame.addClass( 'oo-ui-window-frame' );
+ .append( this.$frame, this.$overlay );
- // NOTE: Additional intitialization will occur when #setManager is called
+ // Initially hidden - using #toggle may cause errors if subclasses override toggle with methods
+ // that reference properties not initialized at that time of parent class construction
+ // TODO: Find a better way to handle post-constructor setup
+ this.visible = false;
+ this.$element.addClass( 'oo-ui-element-hidden' );
};
/* Setup */
@@ -1405,19 +1862,12 @@ OO.ui.Window = function OoUiWindow( config ) {
OO.inheritClass( OO.ui.Window, OO.ui.Element );
OO.mixinClass( OO.ui.Window, OO.EventEmitter );
-/* Events */
-
-/**
- * @event resize
- * @param {string} size Symbolic size name, e.g. 'small', 'medium', 'large', 'full'
- */
-
/* Static Properties */
/**
- * Symbolic name of size.
+ * Symbolic name of the window size: `small`, `medium`, `large`, `larger` or `full`.
*
- * Size is used if no size is configured during construction.
+ * The static size is used if no #size is configured during construction.
*
* @static
* @inheritable
@@ -1425,143 +1875,34 @@ OO.mixinClass( OO.ui.Window, OO.EventEmitter );
*/
OO.ui.Window.static.size = 'medium';
-/* Static Methods */
-
-/**
- * Transplant the CSS styles from as parent document to a frame's document.
- *
- * This loops over the style sheets in the parent document, and copies their nodes to the
- * frame's document. It then polls the document to see when all styles have loaded, and once they
- * have, resolves the promise.
- *
- * If the styles still haven't loaded after a long time (5 seconds by default), we give up waiting
- * and resolve the promise anyway. This protects against cases like a display: none; iframe in
- * Firefox, where the styles won't load until the iframe becomes visible.
- *
- * For details of how we arrived at the strategy used in this function, see #load.
- *
- * @static
- * @inheritable
- * @param {HTMLDocument} parentDoc Document to transplant styles from
- * @param {HTMLDocument} frameDoc Document to transplant styles to
- * @param {number} [timeout=5000] How long to wait before giving up (in ms). If 0, never give up.
- * @return {jQuery.Promise} Promise resolved when styles have loaded
- */
-OO.ui.Window.static.transplantStyles = function ( parentDoc, frameDoc, timeout ) {
- var i, numSheets, styleNode, styleText, newNode, timeoutID, pollNodeId, $pendingPollNodes,
- $pollNodes = $( [] ),
- // Fake font-family value
- fontFamily = 'oo-ui-frame-transplantStyles-loaded',
- nextIndex = parentDoc.oouiFrameTransplantStylesNextIndex || 0,
- deferred = $.Deferred();
-
- for ( i = 0, numSheets = parentDoc.styleSheets.length; i < numSheets; i++ ) {
- styleNode = parentDoc.styleSheets[i].ownerNode;
- if ( styleNode.disabled ) {
- continue;
- }
-
- if ( styleNode.nodeName.toLowerCase() === 'link' ) {
- // External stylesheet; use @import
- styleText = '@import url(' + styleNode.href + ');';
- } else {
- // Internal stylesheet; just copy the text
- // For IE10 we need to fall back to .cssText, BUT that's undefined in
- // other browsers, so fall back to '' rather than 'undefined'
- styleText = styleNode.textContent || parentDoc.styleSheets[i].cssText || '';
- }
-
- // Create a node with a unique ID that we're going to monitor to see when the CSS
- // has loaded
- if ( styleNode.oouiFrameTransplantStylesId ) {
- // If we're nesting transplantStyles operations and this node already has
- // a CSS rule to wait for loading, reuse it
- pollNodeId = styleNode.oouiFrameTransplantStylesId;
- } else {
- // Otherwise, create a new ID
- pollNodeId = 'oo-ui-frame-transplantStyles-loaded-' + nextIndex;
- nextIndex++;
-
- // Add #pollNodeId { font-family: ... } to the end of the stylesheet / after the @import
- // The font-family rule will only take effect once the @import finishes
- styleText += '\n' + '#' + pollNodeId + ' { font-family: ' + fontFamily + '; }';
- }
-
- // Create a node with id=pollNodeId
- $pollNodes = $pollNodes.add( $( '<div>', frameDoc )
- .attr( 'id', pollNodeId )
- .appendTo( frameDoc.body )
- );
-
- // Add our modified CSS as a <style> tag
- newNode = frameDoc.createElement( 'style' );
- newNode.textContent = styleText;
- newNode.oouiFrameTransplantStylesId = pollNodeId;
- frameDoc.head.appendChild( newNode );
- }
- frameDoc.oouiFrameTransplantStylesNextIndex = nextIndex;
-
- // Poll every 100ms until all external stylesheets have loaded
- $pendingPollNodes = $pollNodes;
- timeoutID = setTimeout( function pollExternalStylesheets() {
- while (
- $pendingPollNodes.length > 0 &&
- $pendingPollNodes.eq( 0 ).css( 'font-family' ) === fontFamily
- ) {
- $pendingPollNodes = $pendingPollNodes.slice( 1 );
- }
-
- if ( $pendingPollNodes.length === 0 ) {
- // We're done!
- if ( timeoutID !== null ) {
- timeoutID = null;
- $pollNodes.remove();
- deferred.resolve();
- }
- } else {
- timeoutID = setTimeout( pollExternalStylesheets, 100 );
- }
- }, 100 );
- // ...but give up after a while
- if ( timeout !== 0 ) {
- setTimeout( function () {
- if ( timeoutID ) {
- clearTimeout( timeoutID );
- timeoutID = null;
- $pollNodes.remove();
- deferred.reject();
- }
- }, timeout || 5000 );
- }
-
- return deferred.promise();
-};
-
/* Methods */
/**
* Handle mouse down events.
*
+ * @private
* @param {jQuery.Event} e Mouse down event
*/
OO.ui.Window.prototype.onMouseDown = function ( e ) {
// Prevent clicking on the click-block from stealing focus
- if ( e.target === this.$element[0] ) {
+ if ( e.target === this.$element[ 0 ] ) {
return false;
}
};
/**
- * Check if window has been initialized.
+ * Check if the window has been initialized.
+ *
+ * Initialization occurs when a window is added to a manager.
*
* @return {boolean} Window has been initialized
*/
OO.ui.Window.prototype.isInitialized = function () {
- return this.initialized;
+ return !!this.manager;
};
/**
- * Check if window is visible.
+ * Check if the window is visible.
*
* @return {boolean} Window is visible
*/
@@ -1570,27 +1911,10 @@ OO.ui.Window.prototype.isVisible = function () {
};
/**
- * Check if window is loading.
- *
- * @return {boolean} Window is loading
- */
-OO.ui.Window.prototype.isLoading = function () {
- return this.loading && this.loading.state() === 'pending';
-};
-
-/**
- * Check if window is loaded.
+ * Check if the window is opening.
*
- * @return {boolean} Window is loaded
- */
-OO.ui.Window.prototype.isLoaded = function () {
- return this.loading && this.loading.state() === 'resolved';
-};
-
-/**
- * Check if window is opening.
- *
- * This is a wrapper around OO.ui.WindowManager#isOpening.
+ * This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isOpening isOpening}
+ * method.
*
* @return {boolean} Window is opening
*/
@@ -1599,9 +1923,9 @@ OO.ui.Window.prototype.isOpening = function () {
};
/**
- * Check if window is closing.
+ * Check if the window is closing.
*
- * This is a wrapper around OO.ui.WindowManager#isClosing.
+ * This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isClosing isClosing} method.
*
* @return {boolean} Window is closing
*/
@@ -1610,9 +1934,9 @@ OO.ui.Window.prototype.isClosing = function () {
};
/**
- * Check if window is opened.
+ * Check if the window is opened.
*
- * This is a wrapper around OO.ui.WindowManager#isOpened.
+ * This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isOpened isOpened} method.
*
* @return {boolean} Window is opened
*/
@@ -1623,6 +1947,9 @@ OO.ui.Window.prototype.isOpened = function () {
/**
* Get the window manager.
*
+ * All windows must be attached to a window manager, which is used to open
+ * and close the window and control its presentation.
+ *
* @return {OO.ui.WindowManager} Manager of window
*/
OO.ui.Window.prototype.getManager = function () {
@@ -1630,27 +1957,69 @@ OO.ui.Window.prototype.getManager = function () {
};
/**
- * Get the window size.
+ * Get the symbolic name of the window size (e.g., `small` or `medium`).
*
- * @return {string} Symbolic size name, e.g. 'small', 'medium', 'large', 'full'
+ * @return {string} Symbolic name of the size: `small`, `medium`, `large`, `larger`, `full`
*/
OO.ui.Window.prototype.getSize = function () {
return this.size;
};
/**
- * Get the height of the dialog contents.
+ * Disable transitions on window's frame for the duration of the callback function, then enable them
+ * back.
*
- * @return {number} Content height
+ * @private
+ * @param {Function} callback Function to call while transitions are disabled
+ */
+OO.ui.Window.prototype.withoutSizeTransitions = function ( callback ) {
+ // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements.
+ // Disable transitions first, otherwise we'll get values from when the window was animating.
+ var oldTransition,
+ styleObj = this.$frame[ 0 ].style;
+ oldTransition = styleObj.transition || styleObj.OTransition || styleObj.MsTransition ||
+ styleObj.MozTransition || styleObj.WebkitTransition;
+ styleObj.transition = styleObj.OTransition = styleObj.MsTransition =
+ styleObj.MozTransition = styleObj.WebkitTransition = 'none';
+ callback();
+ // Force reflow to make sure the style changes done inside callback really are not transitioned
+ this.$frame.height();
+ styleObj.transition = styleObj.OTransition = styleObj.MsTransition =
+ styleObj.MozTransition = styleObj.WebkitTransition = oldTransition;
+};
+
+/**
+ * Get the height of the full window contents (i.e., the window head, body and foot together).
+ *
+ * What consistitutes the head, body, and foot varies depending on the window type.
+ * A {@link OO.ui.MessageDialog message dialog} displays a title and message in its body,
+ * and any actions in the foot. A {@link OO.ui.ProcessDialog process dialog} displays a title
+ * and special actions in the head, and dialog content in the body.
+ *
+ * To get just the height of the dialog body, use the #getBodyHeight method.
+ *
+ * @return {number} The height of the window contents (the dialog head, body and foot) in pixels
*/
OO.ui.Window.prototype.getContentHeight = function () {
- // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements
- var bodyHeight, oldHeight = this.$frame[0].style.height;
- this.$frame[0].style.height = '1px';
- bodyHeight = this.getBodyHeight();
- this.$frame[0].style.height = oldHeight;
+ var bodyHeight,
+ win = this,
+ bodyStyleObj = this.$body[ 0 ].style,
+ frameStyleObj = this.$frame[ 0 ].style;
+
+ // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements.
+ // Disable transitions first, otherwise we'll get values from when the window was animating.
+ this.withoutSizeTransitions( function () {
+ var oldHeight = frameStyleObj.height,
+ oldPosition = bodyStyleObj.position;
+ frameStyleObj.height = '1px';
+ // Force body to resize to new width
+ bodyStyleObj.position = 'relative';
+ bodyHeight = win.getBodyHeight();
+ frameStyleObj.height = oldHeight;
+ bodyStyleObj.position = oldPosition;
+ } );
- return Math.round(
+ return (
// Add buffer for border
( this.$frame.outerHeight() - this.$frame.innerHeight() ) +
// Use combined heights of children
@@ -1659,34 +2028,42 @@ OO.ui.Window.prototype.getContentHeight = function () {
};
/**
- * Get the height of the dialog contents.
+ * Get the height of the window body.
+ *
+ * To get the height of the full window contents (the window body, head, and foot together),
+ * use #getContentHeight.
*
- * When this function is called, the dialog will temporarily have been resized
+ * When this function is called, the window will temporarily have been resized
* to height=1px, so .scrollHeight measurements can be taken accurately.
*
- * @return {number} Height of content
+ * @return {number} Height of the window body in pixels
*/
OO.ui.Window.prototype.getBodyHeight = function () {
- return this.$body[0].scrollHeight;
+ return this.$body[ 0 ].scrollHeight;
};
/**
- * Get the directionality of the frame
+ * Get the directionality of the frame (right-to-left or left-to-right).
*
- * @return {string} Directionality, 'ltr' or 'rtl'
+ * @return {string} Directionality: `'ltr'` or `'rtl'`
*/
OO.ui.Window.prototype.getDir = function () {
return this.dir;
};
/**
- * Get a process for setting up a window for use.
+ * Get the 'setup' process.
*
- * Each time the window is opened this process will set it up for use in a particular context, based
- * on the `data` argument.
+ * The setup process is used to set up a window for use in a particular context,
+ * based on the `data` argument. This method is called during the opening phase of the window’s
+ * lifecycle.
*
- * When you override this method, you can add additional setup steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * Override this method to add additional steps to the ‘setup’ process the parent method provides
+ * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods
+ * of OO.ui.Process.
+ *
+ * To add window content that persists between openings, you may wish to use the #initialize method
+ * instead.
*
* @abstract
* @param {Object} [data] Window opening data
@@ -1697,30 +2074,34 @@ OO.ui.Window.prototype.getSetupProcess = function () {
};
/**
- * Get a process for readying a window for use.
+ * Get the ‘ready’ process.
*
- * Each time the window is open and setup, this process will ready it up for use in a particular
- * context, based on the `data` argument.
+ * The ready process is used to ready a window for use in a particular
+ * context, based on the `data` argument. This method is called during the opening phase of
+ * the window’s lifecycle, after the window has been {@link #getSetupProcess setup}.
*
- * When you override this method, you can add additional setup steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * Override this method to add additional steps to the ‘ready’ process the parent method
+ * provides using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next}
+ * methods of OO.ui.Process.
*
* @abstract
* @param {Object} [data] Window opening data
- * @return {OO.ui.Process} Setup process
+ * @return {OO.ui.Process} Ready process
*/
OO.ui.Window.prototype.getReadyProcess = function () {
return new OO.ui.Process();
};
/**
- * Get a process for holding a window from use.
+ * Get the 'hold' process.
*
- * Each time the window is closed, this process will hold it from use in a particular context, based
- * on the `data` argument.
+ * The hold proccess is used to keep a window from being used in a particular context,
+ * based on the `data` argument. This method is called during the closing phase of the window’s
+ * lifecycle.
*
- * When you override this method, you can add additional setup steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * Override this method to add additional steps to the 'hold' process the parent method provides
+ * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods
+ * of OO.ui.Process.
*
* @abstract
* @param {Object} [data] Window closing data
@@ -1731,13 +2112,15 @@ OO.ui.Window.prototype.getHoldProcess = function () {
};
/**
- * Get a process for tearing down a window after use.
+ * Get the ‘teardown’ process.
*
- * Each time the window is closed this process will tear it down and do something with the user's
- * interactions within the window, based on the `data` argument.
+ * The teardown process is used to teardown a window after use. During teardown,
+ * user interactions within the window are conveyed and the window is closed, based on the `data`
+ * argument. This method is called during the closing phase of the window’s lifecycle.
*
- * When you override this method, you can add additional teardown steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * Override this method to add additional steps to the ‘teardown’ process the parent method provides
+ * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods
+ * of OO.ui.Process.
*
* @abstract
* @param {Object} [data] Window closing data
@@ -1748,41 +2131,12 @@ OO.ui.Window.prototype.getTeardownProcess = function () {
};
/**
- * Toggle visibility of window.
- *
- * If the window is isolated and hasn't fully loaded yet, the visiblity property will be used
- * instead of display.
- *
- * @param {boolean} [show] Make window visible, omit to toggle visibility
- * @fires visible
- * @chainable
- */
-OO.ui.Window.prototype.toggle = function ( show ) {
- show = show === undefined ? !this.visible : !!show;
-
- if ( show !== this.isVisible() ) {
- this.visible = show;
-
- if ( this.isolated && !this.isLoaded() ) {
- // Hide the window using visibility instead of display until loading is complete
- // Can't use display: none; because that prevents the iframe from loading in Firefox
- this.$element.css( 'visibility', show ? 'visible' : 'hidden' );
- } else {
- this.$element.toggle( show ).css( 'visibility', '' );
- }
- this.emit( 'toggle', show );
- }
-
- return this;
-};
-
-/**
* Set the window manager.
*
- * This must be called before initialize. Calling it more than once will cause an error.
+ * This will cause the window to initialize. Calling it more than once will cause an error.
*
* @param {OO.ui.WindowManager} manager Manager for this window
- * @throws {Error} If called more than once
+ * @throws {Error} An error is thrown if the method is called more than once
* @chainable
*/
OO.ui.Window.prototype.setManager = function ( manager ) {
@@ -1790,49 +2144,46 @@ OO.ui.Window.prototype.setManager = function ( manager ) {
throw new Error( 'Cannot set window manager, window already has a manager' );
}
- // Properties
this.manager = manager;
- this.isolated = manager.shouldIsolate();
-
- // Initialization
- if ( this.isolated ) {
- this.$iframe = this.$( '<iframe>' );
- this.$iframe.attr( { frameborder: 0, scrolling: 'no' } );
- this.$frame.append( this.$iframe );
- this.$ = function () {
- throw new Error( 'this.$() cannot be used until the frame has been initialized.' );
- };
- // WARNING: Do not use this.$ again until #initialize is called
- } else {
- this.$content = this.$( '<div>' );
- this.$document = $( this.getElementDocument() );
- this.$content.addClass( 'oo-ui-window-content' );
- this.$frame.append( this.$content );
- }
- this.toggle( false );
-
- // Figure out directionality:
- this.dir = OO.ui.Element.getDir( this.$iframe || this.$content ) || 'ltr';
+ this.initialize();
return this;
};
/**
- * Set the window size.
+ * Set the window size by symbolic name (e.g., 'small' or 'medium')
*
- * @param {string} size Symbolic size name, e.g. 'small', 'medium', 'large', 'full'
+ * @param {string} size Symbolic name of size: `small`, `medium`, `large`, `larger` or
+ * `full`
* @chainable
*/
OO.ui.Window.prototype.setSize = function ( size ) {
this.size = size;
+ this.updateSize();
+ return this;
+};
+
+/**
+ * Update the window size.
+ *
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
+ * @chainable
+ */
+OO.ui.Window.prototype.updateSize = function () {
+ if ( !this.manager ) {
+ throw new Error( 'Cannot update window size, must be attached to a manager' );
+ }
+
this.manager.updateWindowSize( this );
+
return this;
};
/**
- * Set window dimensions.
+ * Set window dimensions. This method is called by the {@link OO.ui.WindowManager window manager}
+ * when the window is opening. In general, setDimensions should not be called directly.
*
- * Properties are applied to the frame container.
+ * To set the size of the window, use the #setSize method.
*
* @param {Object} dim CSS dimension properties
* @param {string|number} [dim.width] Width
@@ -1844,29 +2195,43 @@ OO.ui.Window.prototype.setSize = function ( size ) {
* @chainable
*/
OO.ui.Window.prototype.setDimensions = function ( dim ) {
- // Apply width before height so height is not based on wrapping content using the wrong width
+ var height,
+ win = this,
+ styleObj = this.$frame[ 0 ].style;
+
+ // Calculate the height we need to set using the correct width
+ if ( dim.height === undefined ) {
+ this.withoutSizeTransitions( function () {
+ var oldWidth = styleObj.width;
+ win.$frame.css( 'width', dim.width || '' );
+ height = win.getContentHeight();
+ styleObj.width = oldWidth;
+ } );
+ } else {
+ height = dim.height;
+ }
+
this.$frame.css( {
width: dim.width || '',
minWidth: dim.minWidth || '',
- maxWidth: dim.maxWidth || ''
- } );
- this.$frame.css( {
- height: ( dim.height !== undefined ? dim.height : this.getContentHeight() ) || '',
+ maxWidth: dim.maxWidth || '',
+ height: height || '',
minHeight: dim.minHeight || '',
maxHeight: dim.maxHeight || ''
} );
+
return this;
};
/**
* Initialize window contents.
*
- * The first time the window is opened, #initialize is called when it's safe to begin populating
- * its contents. See #getSetupProcess for a way to make changes each time the window opens.
+ * Before the window is opened for the first time, #initialize is called so that content that
+ * persists between openings can be added to the window.
*
- * Once this method is called, this.$ can be used to create elements within the frame.
+ * To set up a window with new content each time the window opens, use #getSetupProcess.
*
- * @throws {Error} If not attached to a manager
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
* @chainable
*/
OO.ui.Window.prototype.initialize = function () {
@@ -1875,55 +2240,73 @@ OO.ui.Window.prototype.initialize = function () {
}
// Properties
- this.$head = this.$( '<div>' );
- this.$body = this.$( '<div>' );
- this.$foot = this.$( '<div>' );
- this.$overlay = this.$( '<div>' );
+ this.$head = $( '<div>' );
+ this.$body = $( '<div>' );
+ this.$foot = $( '<div>' );
+ this.dir = OO.ui.Element.static.getDir( this.$content ) || 'ltr';
+ this.$document = $( this.getElementDocument() );
// Events
- this.$element.on( 'mousedown', OO.ui.bind( this.onMouseDown, this ) );
+ this.$element.on( 'mousedown', this.onMouseDown.bind( this ) );
// Initialization
this.$head.addClass( 'oo-ui-window-head' );
this.$body.addClass( 'oo-ui-window-body' );
this.$foot.addClass( 'oo-ui-window-foot' );
- this.$overlay.addClass( 'oo-ui-window-overlay' );
- this.$content.append( this.$head, this.$body, this.$foot, this.$overlay );
+ this.$content.append( this.$head, this.$body, this.$foot );
return this;
};
/**
- * Open window.
+ * Open the window.
*
- * This is a wrapper around calling {@link OO.ui.WindowManager#openWindow} on the window manager.
- * To do something each time the window opens, use #getSetupProcess or #getReadyProcess.
+ * This method is a wrapper around a call to the window manager’s {@link OO.ui.WindowManager#openWindow openWindow}
+ * method, which returns a promise resolved when the window is done opening.
+ *
+ * To customize the window each time it opens, use #getSetupProcess or #getReadyProcess.
*
* @param {Object} [data] Window opening data
- * @return {jQuery.Promise} Promise resolved when window is opened; when the promise is resolved the
- * first argument will be a promise which will be resolved when the window begins closing
+ * @return {jQuery.Promise} Promise resolved with a value when the window is opened, or rejected
+ * if the window fails to open. When the promise is resolved successfully, the first argument of the
+ * value is a new promise, which is resolved when the window begins closing.
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
*/
OO.ui.Window.prototype.open = function ( data ) {
+ if ( !this.manager ) {
+ throw new Error( 'Cannot open window, must be attached to a manager' );
+ }
+
return this.manager.openWindow( this, data );
};
/**
- * Close window.
+ * Close the window.
+ *
+ * This method is a wrapper around a call to the window
+ * manager’s {@link OO.ui.WindowManager#closeWindow closeWindow} method,
+ * which returns a closing promise resolved when the window is done closing.
*
- * This is a wrapper around calling OO.ui.WindowManager#closeWindow on the window manager.
- * To do something each time the window closes, use #getHoldProcess or #getTeardownProcess.
+ * The window's #getHoldProcess and #getTeardownProcess methods are called during the closing
+ * phase of the window’s lifecycle and can be used to specify closing behavior each time
+ * the window closes.
*
* @param {Object} [data] Window closing data
* @return {jQuery.Promise} Promise resolved when window is closed
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
*/
OO.ui.Window.prototype.close = function ( data ) {
+ if ( !this.manager ) {
+ throw new Error( 'Cannot close window, must be attached to a manager' );
+ }
+
return this.manager.closeWindow( this, data );
};
/**
* Setup window.
*
- * This is called by OO.ui.WindowManager durring window opening, and should not be called directly
+ * This is called by OO.ui.WindowManager during window opening, and should not be called directly
* by other systems.
*
* @param {Object} [data] Window opening data
@@ -1933,11 +2316,11 @@ OO.ui.Window.prototype.setup = function ( data ) {
var win = this,
deferred = $.Deferred();
- this.$element.show();
- this.visible = true;
+ this.toggle( true );
+
this.getSetupProcess( data ).execute().done( function () {
// Force redraw by asking the browser to measure the elements' widths
- win.$element.addClass( 'oo-ui-window-setup' ).width();
+ win.$element.addClass( 'oo-ui-window-active oo-ui-window-setup' ).width();
win.$content.addClass( 'oo-ui-window-content-setup' ).width();
deferred.resolve();
} );
@@ -1948,7 +2331,7 @@ OO.ui.Window.prototype.setup = function ( data ) {
/**
* Ready window.
*
- * This is called by OO.ui.WindowManager durring window opening, and should not be called directly
+ * This is called by OO.ui.WindowManager during window opening, and should not be called directly
* by other systems.
*
* @param {Object} [data] Window opening data
@@ -1972,7 +2355,7 @@ OO.ui.Window.prototype.ready = function ( data ) {
/**
* Hold window.
*
- * This is called by OO.ui.WindowManager durring window closing, and should not be called directly
+ * This is called by OO.ui.WindowManager during window closing, and should not be called directly
* by other systems.
*
* @param {Object} [data] Window closing data
@@ -1984,11 +2367,11 @@ OO.ui.Window.prototype.hold = function ( data ) {
this.getHoldProcess( data ).execute().done( function () {
// Get the focused element within the window's content
- var $focus = win.$content.find( OO.ui.Element.getDocument( win.$content ).activeElement );
+ var $focus = win.$content.find( OO.ui.Element.static.getDocument( win.$content ).activeElement );
// Blur the focused element
if ( $focus.length ) {
- $focus[0].blur();
+ $focus[ 0 ].blur();
}
// Force redraw by asking the browser to measure the elements' widths
@@ -2003,146 +2386,57 @@ OO.ui.Window.prototype.hold = function ( data ) {
/**
* Teardown window.
*
- * This is called by OO.ui.WindowManager durring window closing, and should not be called directly
+ * This is called by OO.ui.WindowManager during window closing, and should not be called directly
* by other systems.
*
* @param {Object} [data] Window closing data
* @return {jQuery.Promise} Promise resolved when window is torn down
*/
OO.ui.Window.prototype.teardown = function ( data ) {
- var win = this,
- deferred = $.Deferred();
-
- this.getTeardownProcess( data ).execute().done( function () {
- // Force redraw by asking the browser to measure the elements' widths
- win.$element.removeClass( 'oo-ui-window-setup' ).width();
- win.$content.removeClass( 'oo-ui-window-content-setup' ).width();
- win.$element.hide();
- win.visible = false;
- deferred.resolve();
- } );
-
- return deferred.promise();
-};
-
-/**
- * Load the frame contents.
- *
- * Once the iframe's stylesheets are loaded, the `load` event will be emitted and the returned
- * promise will be resolved. Calling while loading will return a promise but not trigger a new
- * loading cycle. Calling after loading is complete will return a promise that's already been
- * resolved.
- *
- * Sounds simple right? Read on...
- *
- * When you create a dynamic iframe using open/write/close, the window.load event for the
- * iframe is triggered when you call close, and there's no further load event to indicate that
- * everything is actually loaded.
- *
- * In Chrome, stylesheets don't show up in document.styleSheets until they have loaded, so we could
- * just poll that array and wait for it to have the right length. However, in Firefox, stylesheets
- * are added to document.styleSheets immediately, and the only way you can determine whether they've
- * loaded is to attempt to access .cssRules and wait for that to stop throwing an exception. But
- * cross-domain stylesheets never allow .cssRules to be accessed even after they have loaded.
- *
- * The workaround is to change all `<link href="...">` tags to `<style>@import url(...)</style>`
- * tags. Because `@import` is blocking, Chrome won't add the stylesheet to document.styleSheets
- * until the `@import` has finished, and Firefox won't allow .cssRules to be accessed until the
- * `@import` has finished. And because the contents of the `<style>` tag are from the same origin,
- * accessing .cssRules is allowed.
- *
- * However, now that we control the styles we're injecting, we might as well do away with
- * browser-specific polling hacks like document.styleSheets and .cssRules, and instead inject
- * `<style>@import url(...); #foo { font-family: someValue; }</style>`, then create `<div id="foo">`
- * and wait for its font-family to change to someValue. Because `@import` is blocking, the
- * font-family rule is not applied until after the `@import` finishes.
- *
- * All this stylesheet injection and polling magic is in #transplantStyles.
- *
- * @return {jQuery.Promise} Promise resolved when loading is complete
- * @fires load
- */
-OO.ui.Window.prototype.load = function () {
- var sub, doc, loading,
- win = this;
-
- // Non-isolated windows are already "loaded"
- if ( !this.loading && !this.isolated ) {
- this.loading = $.Deferred().resolve();
- this.initialize();
- // Set initialized state after so sub-classes aren't confused by it being set by calling
- // their parent initialize method
- this.initialized = true;
- }
-
- // Return existing promise if already loading or loaded
- if ( this.loading ) {
- return this.loading.promise();
- }
-
- // Load the frame
- loading = this.loading = $.Deferred();
- sub = this.$iframe.prop( 'contentWindow' );
- doc = sub.document;
-
- // Initialize contents
- doc.open();
- doc.write(
- '<!doctype html>' +
- '<html>' +
- '<body class="oo-ui-window-isolated oo-ui-' + this.dir + '"' +
- ' style="direction:' + this.dir + ';" dir="' + this.dir + '">' +
- '<div class="oo-ui-window-content"></div>' +
- '</body>' +
- '</html>'
- );
- doc.close();
-
- // Properties
- this.$ = OO.ui.Element.getJQuery( doc, this.$element );
- this.$content = this.$( '.oo-ui-window-content' ).attr( 'tabIndex', 0 );
- this.$document = this.$( doc );
-
- // Initialization
- this.constructor.static.transplantStyles( this.getElementDocument(), this.$document[0] )
- .always( function () {
- // Initialize isolated windows
- win.initialize();
- // Set initialized state after so sub-classes aren't confused by it being set by calling
- // their parent initialize method
- win.initialized = true;
- // Undo the visibility: hidden; hack and apply display: none;
- // We can do this safely now that the iframe has initialized
- // (don't do this from within #initialize because it has to happen
- // after the all subclasses have been handled as well).
- win.toggle( win.isVisible() );
-
- loading.resolve();
+ var win = this;
+
+ return this.getTeardownProcess( data ).execute()
+ .done( function () {
+ // Force redraw by asking the browser to measure the elements' widths
+ win.$element.removeClass( 'oo-ui-window-active oo-ui-window-setup' ).width();
+ win.$content.removeClass( 'oo-ui-window-content-setup' ).width();
+ win.toggle( false );
} );
-
- return loading.promise();
};
/**
- * Base class for all dialogs.
- *
- * Logic:
- * - Manage the window (open and close, etc.).
- * - Store the internal name and display title.
- * - A stack to track one or more pending actions.
- * - Manage a set of actions that can be performed.
- * - Configure and create action widgets.
- *
- * User interface:
- * - Close the dialog with Escape key.
- * - Visually lock the dialog while an action is in
- * progress (aka "pending").
- *
- * Subclass responsibilities:
- * - Display the title somewhere.
- * - Add content to the dialog.
- * - Provide a UI to close the dialog.
- * - Display the action widgets somewhere.
+ * The Dialog class serves as the base class for the other types of dialogs.
+ * Unless extended to include controls, the rendered dialog box is a simple window
+ * that users can close by hitting the ‘Esc’ key. Dialog windows are used with OO.ui.WindowManager,
+ * which opens, closes, and controls the presentation of the window. See the
+ * [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * @example
+ * // A simple dialog window.
+ * function MyDialog( config ) {
+ * MyDialog.super.call( this, config );
+ * }
+ * OO.inheritClass( MyDialog, OO.ui.Dialog );
+ * MyDialog.prototype.initialize = function () {
+ * MyDialog.super.prototype.initialize.call( this );
+ * this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ * this.content.$element.append( '<p>A simple dialog window. Press \'Esc\' to close.</p>' );
+ * this.$body.append( this.content.$element );
+ * };
+ * MyDialog.prototype.getBodyHeight = function () {
+ * return this.content.$element.outerHeight( true );
+ * };
+ * var myDialog = new MyDialog( {
+ * size: 'medium'
+ * } );
+ * // Create and append a window manager, which opens and closes the window.
+ * var windowManager = new OO.ui.WindowManager();
+ * $( 'body' ).append( windowManager.$element );
+ * windowManager.addWindows( [ myDialog ] );
+ * // Open the window!
+ * windowManager.openWindow( myDialog );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Dialogs
*
* @abstract
* @class
@@ -2163,6 +2457,7 @@ OO.ui.Dialog = function OoUiDialog( config ) {
this.actions = new OO.ui.ActionSet();
this.attachedActions = [];
this.currentAction = null;
+ this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
// Events
this.actions.connect( this, {
@@ -2187,6 +2482,11 @@ OO.mixinClass( OO.ui.Dialog, OO.ui.PendingElement );
/**
* Symbolic name of dialog.
*
+ * The dialog class must have a symbolic name in order to be registered with OO.Factory.
+ * Please see the [OOjs UI documentation on MediaWiki] [3] for more information.
+ *
+ * [3]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
+ *
* @abstract
* @static
* @inheritable
@@ -2195,26 +2495,35 @@ OO.mixinClass( OO.ui.Dialog, OO.ui.PendingElement );
OO.ui.Dialog.static.name = '';
/**
- * Dialog title.
+ * The dialog title.
+ *
+ * The title can be specified as a plaintext string, a {@link OO.ui.LabelElement Label} node, or a function
+ * that will produce a Label node or string. The title can also be specified with data passed to the
+ * constructor (see #getSetupProcess). In this case, the static value will be overriden.
*
* @abstract
* @static
* @inheritable
- * @property {jQuery|string|Function} Label nodes, text or a function that returns nodes or text
+ * @property {jQuery|string|Function}
*/
OO.ui.Dialog.static.title = '';
/**
- * List of OO.ui.ActionWidget configuration options.
+ * An array of configured {@link OO.ui.ActionWidget action widgets}.
+ *
+ * Actions can also be specified with data passed to the constructor (see #getSetupProcess). In this case, the static
+ * value will be overriden.
+ *
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets
*
* @static
- * inheritable
+ * @inheritable
* @property {Object[]}
*/
OO.ui.Dialog.static.actions = [];
/**
- * Close dialog when the escape key is pressed.
+ * Close the dialog when the 'Esc' key is pressed.
*
* @static
* @abstract
@@ -2228,18 +2537,21 @@ OO.ui.Dialog.static.escapable = true;
/**
* Handle frame document key down events.
*
+ * @private
* @param {jQuery.Event} e Key down event
*/
OO.ui.Dialog.prototype.onDocumentKeyDown = function ( e ) {
if ( e.which === OO.ui.Keys.ESCAPE ) {
this.close();
- return false;
+ e.preventDefault();
+ e.stopPropagation();
}
};
/**
* Handle action resized events.
*
+ * @private
* @param {OO.ui.ActionWidget} action Action that was resized
*/
OO.ui.Dialog.prototype.onActionResize = function () {
@@ -2249,17 +2561,19 @@ OO.ui.Dialog.prototype.onActionResize = function () {
/**
* Handle action click events.
*
+ * @private
* @param {OO.ui.ActionWidget} action Action that was clicked
*/
OO.ui.Dialog.prototype.onActionClick = function ( action ) {
if ( !this.isPending() ) {
- this.currentAction = action;
this.executeAction( action.getAction() );
}
};
/**
* Handle actions change event.
+ *
+ * @private
*/
OO.ui.Dialog.prototype.onActionsChange = function () {
this.detachActions();
@@ -2269,7 +2583,7 @@ OO.ui.Dialog.prototype.onActionsChange = function () {
};
/**
- * Get set of actions.
+ * Get the set of actions used by the dialog.
*
* @return {OO.ui.ActionSet}
*/
@@ -2280,8 +2594,9 @@ OO.ui.Dialog.prototype.getActions = function () {
/**
* Get a process for taking action.
*
- * When you override this method, you can add additional accept steps to the process the parent
- * method provides using the 'first' and 'next' methods.
+ * When you override this method, you can create a new OO.ui.Process and return it, or add additional
+ * accept steps to the process the parent method provides using the {@link OO.ui.Process#first 'first'}
+ * and {@link OO.ui.Process#next 'next'} methods of OO.ui.Process.
*
* @abstract
* @param {string} [action] Symbolic name of action
@@ -2302,9 +2617,10 @@ OO.ui.Dialog.prototype.getActionProcess = function ( action ) {
* @inheritdoc
*
* @param {Object} [data] Dialog opening data
- * @param {jQuery|string|Function|null} [data.title] Dialog title, omit to use #static-title
- * @param {Object[]} [data.actions] List of OO.ui.ActionWidget configuration options for each
- * action item, omit to use #static-actions
+ * @param {jQuery|string|Function|null} [data.title] Dialog title, omit to use
+ * the {@link #static-title static title}
+ * @param {Object[]} [data.actions] List of configuration options for each
+ * {@link OO.ui.ActionWidget action widget}, omit to use {@link #static-actions static actions}.
*/
OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
data = data || {};
@@ -2312,20 +2628,17 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
// Parent method
return OO.ui.Dialog.super.prototype.getSetupProcess.call( this, data )
.next( function () {
- var i, len,
- items = [],
- config = this.constructor.static,
+ var config = this.constructor.static,
actions = data.actions !== undefined ? data.actions : config.actions;
this.title.setLabel(
data.title !== undefined ? data.title : this.constructor.static.title
);
- for ( i = 0, len = actions.length; i < len; i++ ) {
- items.push(
- new OO.ui.ActionWidget( $.extend( { $: this.$ }, actions[i] ) )
- );
+ this.actions.add( this.getActionWidgets( actions ) );
+
+ if ( this.constructor.static.escapable ) {
+ this.$document.on( 'keydown', this.onDocumentKeyDownHandler );
}
- this.actions.add( items );
}, this );
};
@@ -2336,6 +2649,10 @@ OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
// Parent method
return OO.ui.Dialog.super.prototype.getTeardownProcess.call( this, data )
.first( function () {
+ if ( this.constructor.static.escapable ) {
+ this.$document.off( 'keydown', this.onDocumentKeyDownHandler );
+ }
+
this.actions.clear();
this.currentAction = null;
}, this );
@@ -2349,12 +2666,7 @@ OO.ui.Dialog.prototype.initialize = function () {
OO.ui.Dialog.super.prototype.initialize.call( this );
// Properties
- this.title = new OO.ui.LabelWidget( { $: this.$ } );
-
- // Events
- if ( this.constructor.static.escapable ) {
- this.$document.on( 'keydown', OO.ui.bind( this.onDocumentKeyDown, this ) );
- }
+ this.title = new OO.ui.LabelWidget();
// Initialization
this.$content.addClass( 'oo-ui-dialog-content' );
@@ -2362,7 +2674,25 @@ OO.ui.Dialog.prototype.initialize = function () {
};
/**
+ * Get action widgets from a list of configs
+ *
+ * @param {Object[]} actions Action widget configs
+ * @return {OO.ui.ActionWidget[]} Action widgets
+ */
+OO.ui.Dialog.prototype.getActionWidgets = function ( actions ) {
+ var i, len, widgets = [];
+ for ( i = 0, len = actions.length; i < len; i++ ) {
+ widgets.push(
+ new OO.ui.ActionWidget( actions[ i ] )
+ );
+ }
+ return widgets;
+};
+
+/**
* Attach action actions.
+ *
+ * @protected
*/
OO.ui.Dialog.prototype.attachActions = function () {
// Remember the list of potentially attached actions
@@ -2372,6 +2702,7 @@ OO.ui.Dialog.prototype.attachActions = function () {
/**
* Detach action actions.
*
+ * @protected
* @chainable
*/
OO.ui.Dialog.prototype.detachActions = function () {
@@ -2379,7 +2710,7 @@ OO.ui.Dialog.prototype.detachActions = function () {
// Detach all actions that may have been previously attached
for ( i = 0, len = this.attachedActions.length; i < len; i++ ) {
- this.attachedActions[i].$element.detach();
+ this.attachedActions[ i ].$element.detach();
}
this.attachedActions = [];
};
@@ -2392,52 +2723,65 @@ OO.ui.Dialog.prototype.detachActions = function () {
*/
OO.ui.Dialog.prototype.executeAction = function ( action ) {
this.pushPending();
+ this.currentAction = action;
return this.getActionProcess( action ).execute()
- .always( OO.ui.bind( this.popPending, this ) );
+ .always( this.popPending.bind( this ) );
};
/**
- * Collection of windows.
+ * Window managers are used to open and close {@link OO.ui.Window windows} and control their presentation.
+ * Managed windows are mutually exclusive. If a new window is opened while a current window is opening
+ * or is opened, the current window will be closed and any ongoing {@link OO.ui.Process process} will be cancelled. Windows
+ * themselves are persistent and—rather than being torn down when closed—can be repopulated with the
+ * pertinent data and reused.
+ *
+ * Over the lifecycle of a window, the window manager makes available three promises: `opening`,
+ * `opened`, and `closing`, which represent the primary stages of the cycle:
+ *
+ * **Opening**: the opening stage begins when the window manager’s #openWindow or a window’s
+ * {@link OO.ui.Window#open open} method is used, and the window manager begins to open the window.
+ *
+ * - an `opening` event is emitted with an `opening` promise
+ * - the #getSetupDelay method is called and the returned value is used to time a pause in execution before
+ * the window’s {@link OO.ui.Window#getSetupProcess getSetupProcess} method is called on the
+ * window and its result executed
+ * - a `setup` progress notification is emitted from the `opening` promise
+ * - the #getReadyDelay method is called the returned value is used to time a pause in execution before
+ * the window’s {@link OO.ui.Window#getReadyProcess getReadyProcess} method is called on the
+ * window and its result executed
+ * - a `ready` progress notification is emitted from the `opening` promise
+ * - the `opening` promise is resolved with an `opened` promise
+ *
+ * **Opened**: the window is now open.
+ *
+ * **Closing**: the closing stage begins when the window manager's #closeWindow or the
+ * window's {@link OO.ui.Window#close close} methods is used, and the window manager begins
+ * to close the window.
+ *
+ * - the `opened` promise is resolved with `closing` promise and a `closing` event is emitted
+ * - the #getHoldDelay method is called and the returned value is used to time a pause in execution before
+ * the window's {@link OO.ui.Window#getHoldProcess getHoldProces} method is called on the
+ * window and its result executed
+ * - a `hold` progress notification is emitted from the `closing` promise
+ * - the #getTeardownDelay() method is called and the returned value is used to time a pause in execution before
+ * the window's {@link OO.ui.Window#getTeardownProcess getTeardownProcess} method is called on the
+ * window and its result executed
+ * - a `teardown` progress notification is emitted from the `closing` promise
+ * - the `closing` promise is resolved. The window is now closed
+ *
+ * See the [OOjs UI documentation on MediaWiki][1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
*
* @class
* @extends OO.ui.Element
* @mixins OO.EventEmitter
*
- * Managed windows are mutually exclusive. If a window is opened while there is a current window
- * already opening or opened, the current window will be closed without data. Empty closing data
- * should always result in the window being closed without causing constructive or destructive
- * action.
- *
- * As a window is opened and closed, it passes through several stages and the manager emits several
- * corresponding events.
- *
- * - {@link #openWindow} or {@link OO.ui.Window#open} methods are used to start opening
- * - {@link #event-opening} is emitted with `opening` promise
- * - {@link #getSetupDelay} is called the returned value is used to time a pause in execution
- * - {@link OO.ui.Window#getSetupProcess} method is called on the window and its result executed
- * - `setup` progress notification is emitted from opening promise
- * - {@link #getReadyDelay} is called the returned value is used to time a pause in execution
- * - {@link OO.ui.Window#getReadyProcess} method is called on the window and its result executed
- * - `ready` progress notification is emitted from opening promise
- * - `opening` promise is resolved with `opened` promise
- * - Window is now open
- *
- * - {@link #closeWindow} or {@link OO.ui.Window#close} methods are used to start closing
- * - `opened` promise is resolved with `closing` promise
- * - {@link #event-closing} is emitted with `closing` promise
- * - {@link #getHoldDelay} is called the returned value is used to time a pause in execution
- * - {@link OO.ui.Window#getHoldProcess} method is called on the window and its result executed
- * - `hold` progress notification is emitted from opening promise
- * - {@link #getTeardownDelay} is called the returned value is used to time a pause in execution
- * - {@link OO.ui.Window#getTeardownProcess} method is called on the window and its result executed
- * - `teardown` progress notification is emitted from opening promise
- * - Closing promise is resolved
- * - Window is now closed
- *
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {boolean} [isolate] Configure managed windows to isolate their content using inline frames
* @cfg {OO.Factory} [factory] Window factory to use for automatic instantiation
+ * Note that window classes that are instantiated with a factory must have
+ * a {@link OO.ui.Dialog#static-name static name} property that specifies a symbolic name.
* @cfg {boolean} [modal=true] Prevent interaction outside the dialog
*/
OO.ui.WindowManager = function OoUiWindowManager( config ) {
@@ -2453,22 +2797,18 @@ OO.ui.WindowManager = function OoUiWindowManager( config ) {
// Properties
this.factory = config.factory;
this.modal = config.modal === undefined || !!config.modal;
- this.isolate = !!config.isolate;
this.windows = {};
this.opening = null;
this.opened = null;
this.closing = null;
this.preparingToOpen = null;
this.preparingToClose = null;
- this.size = null;
this.currentWindow = null;
+ this.globalEvents = false;
this.$ariaHidden = null;
- this.requestedSize = null;
this.onWindowResizeTimeout = null;
- this.onWindowResizeHandler = OO.ui.bind( this.onWindowResize, this );
- this.afterWindowResizeHandler = OO.ui.bind( this.afterWindowResize, this );
- this.onWindowMouseWheelHandler = OO.ui.bind( this.onWindowMouseWheel, this );
- this.onDocumentKeyDownHandler = OO.ui.bind( this.onDocumentKeyDown, this );
+ this.onWindowResizeHandler = this.onWindowResize.bind( this );
+ this.afterWindowResizeHandler = this.afterWindowResize.bind( this );
// Initialization
this.$element
@@ -2484,36 +2824,39 @@ OO.mixinClass( OO.ui.WindowManager, OO.EventEmitter );
/* Events */
/**
- * Window is opening.
- *
- * Fired when the window begins to be opened.
+ * An 'opening' event is emitted when the window begins to be opened.
*
* @event opening
* @param {OO.ui.Window} win Window that's being opened
- * @param {jQuery.Promise} opening Promise resolved when window is opened; when the promise is
- * resolved the first argument will be a promise which will be resolved when the window begins
- * closing, the second argument will be the opening data; progress notifications will be fired on
- * the promise for `setup` and `ready` when those processes are completed respectively.
+ * @param {jQuery.Promise} opening An `opening` promise resolved with a value when the window is opened successfully.
+ * When the `opening` promise is resolved, the first argument of the value is an 'opened' promise, the second argument
+ * is the opening data. The `opening` promise emits `setup` and `ready` notifications when those processes are complete.
* @param {Object} data Window opening data
*/
/**
- * Window is closing.
- *
- * Fired when the window begins to be closed.
+ * A 'closing' event is emitted when the window begins to be closed.
*
* @event closing
* @param {OO.ui.Window} win Window that's being closed
- * @param {jQuery.Promise} opening Promise resolved when window is closed; when the promise
- * is resolved the first argument will be a the closing data; progress notifications will be fired
- * on the promise for `hold` and `teardown` when those processes are completed respectively.
+ * @param {jQuery.Promise} closing A `closing` promise is resolved with a value when the window
+ * is closed successfully. The promise emits `hold` and `teardown` notifications when those
+ * processes are complete. When the `closing` promise is resolved, the first argument of its value
+ * is the closing data.
* @param {Object} data Window closing data
*/
+/**
+ * A 'resize' event is emitted when a window is resized.
+ *
+ * @event resize
+ * @param {OO.ui.Window} win Window that was resized
+ */
+
/* Static Properties */
/**
- * Map of symbolic size names and CSS properties.
+ * Map of the symbolic name of each window size and its CSS properties.
*
* @static
* @inheritable
@@ -2529,6 +2872,9 @@ OO.ui.WindowManager.static.sizes = {
large: {
width: 700
},
+ larger: {
+ width: 900
+ },
full: {
// These can be non-numeric because they are never used in calculations
width: '100%',
@@ -2537,9 +2883,9 @@ OO.ui.WindowManager.static.sizes = {
};
/**
- * Symbolic name of default size.
+ * Symbolic name of the default window size.
*
- * Default size is used if the window's requested size is not recognized.
+ * The default size is used if the window's requested size is not recognized.
*
* @static
* @inheritable
@@ -2552,6 +2898,7 @@ OO.ui.WindowManager.static.defaultSize = 'medium';
/**
* Handle window resize events.
*
+ * @private
* @param {jQuery.Event} e Window resize event
*/
OO.ui.WindowManager.prototype.onWindowResize = function () {
@@ -2562,6 +2909,7 @@ OO.ui.WindowManager.prototype.onWindowResize = function () {
/**
* Handle window resize events.
*
+ * @private
* @param {jQuery.Event} e Window resize event
*/
OO.ui.WindowManager.prototype.afterWindowResize = function () {
@@ -2571,35 +2919,6 @@ OO.ui.WindowManager.prototype.afterWindowResize = function () {
};
/**
- * Handle window mouse wheel events.
- *
- * @param {jQuery.Event} e Mouse wheel event
- */
-OO.ui.WindowManager.prototype.onWindowMouseWheel = function () {
- return false;
-};
-
-/**
- * Handle document key down events.
- *
- * @param {jQuery.Event} e Key down event
- */
-OO.ui.WindowManager.prototype.onDocumentKeyDown = function ( e ) {
- switch ( e.which ) {
- case OO.ui.Keys.PAGEUP:
- case OO.ui.Keys.PAGEDOWN:
- case OO.ui.Keys.END:
- case OO.ui.Keys.HOME:
- case OO.ui.Keys.LEFT:
- case OO.ui.Keys.UP:
- case OO.ui.Keys.RIGHT:
- case OO.ui.Keys.DOWN:
- // Prevent any key events that might cause scrolling
- return false;
- }
-};
-
-/**
* Check if window is opening.
*
* @return {boolean} Window is opening
@@ -2627,17 +2946,6 @@ OO.ui.WindowManager.prototype.isOpened = function ( win ) {
};
/**
- * Check if window contents should be isolated.
- *
- * Window content isolation is done using inline frames.
- *
- * @return {boolean} Window contents should be isolated
- */
-OO.ui.WindowManager.prototype.shouldIsolate = function () {
- return this.isolate;
-};
-
-/**
* Check if a window is being managed.
*
* @param {OO.ui.Window} win Window to check
@@ -2647,7 +2955,7 @@ OO.ui.WindowManager.prototype.hasWindow = function ( win ) {
var name;
for ( name in this.windows ) {
- if ( this.windows[name] === win ) {
+ if ( this.windows[ name ] === win ) {
return true;
}
}
@@ -2656,7 +2964,7 @@ OO.ui.WindowManager.prototype.hasWindow = function ( win ) {
};
/**
- * Get the number of milliseconds to wait between beginning opening and executing setup process.
+ * Get the number of milliseconds to wait after opening begins before executing the ‘setup’ process.
*
* @param {OO.ui.Window} win Window being opened
* @param {Object} [data] Window opening data
@@ -2667,7 +2975,7 @@ OO.ui.WindowManager.prototype.getSetupDelay = function () {
};
/**
- * Get the number of milliseconds to wait between finishing setup and executing ready process.
+ * Get the number of milliseconds to wait after setup has finished before executing the ‘ready’ process.
*
* @param {OO.ui.Window} win Window being opened
* @param {Object} [data] Window opening data
@@ -2678,7 +2986,7 @@ OO.ui.WindowManager.prototype.getReadyDelay = function () {
};
/**
- * Get the number of milliseconds to wait between beginning closing and executing hold process.
+ * Get the number of milliseconds to wait after closing has begun before executing the 'hold' process.
*
* @param {OO.ui.Window} win Window being closed
* @param {Object} [data] Window closing data
@@ -2689,7 +2997,8 @@ OO.ui.WindowManager.prototype.getHoldDelay = function () {
};
/**
- * Get the number of milliseconds to wait between finishing hold and executing teardown process.
+ * Get the number of milliseconds to wait after the ‘hold’ process has finished before
+ * executing the ‘teardown’ process.
*
* @param {OO.ui.Window} win Window being closed
* @param {Object} [data] Window closing data
@@ -2700,18 +3009,21 @@ OO.ui.WindowManager.prototype.getTeardownDelay = function () {
};
/**
- * Get managed window by symbolic name.
+ * Get a window by its symbolic name.
*
- * If window is not yet instantiated, it will be instantiated and added automatically.
+ * If the window is not yet instantiated and its symbolic name is recognized by a factory, it will be
+ * instantiated and added to the window manager automatically. Please see the [OOjs UI documentation on MediaWiki][3]
+ * for more information about using factories.
+ * [3]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
*
- * @param {string} name Symbolic window name
+ * @param {string} name Symbolic name of the window
* @return {jQuery.Promise} Promise resolved with matching window, or rejected with an OO.ui.Error
- * @throws {Error} If the symbolic name is unrecognized by the factory
- * @throws {Error} If the symbolic name unrecognized as a managed window
+ * @throws {Error} An error is thrown if the symbolic name is not recognized by the factory.
+ * @throws {Error} An error is thrown if the named window is not recognized as a managed window.
*/
OO.ui.WindowManager.prototype.getWindow = function ( name ) {
var deferred = $.Deferred(),
- win = this.windows[name];
+ win = this.windows[ name ];
if ( !( win instanceof OO.ui.Window ) ) {
if ( this.factory ) {
@@ -2720,7 +3032,7 @@ OO.ui.WindowManager.prototype.getWindow = function ( name ) {
'Cannot auto-instantiate window: symbolic name is unrecognized by the factory'
) );
} else {
- win = this.factory.create( name, this, { $: this.$ } );
+ win = this.factory.create( name );
this.addWindows( [ win ] );
deferred.resolve( win );
}
@@ -2750,13 +3062,12 @@ OO.ui.WindowManager.prototype.getCurrentWindow = function () {
*
* @param {OO.ui.Window|string} win Window object or symbolic name of window to open
* @param {Object} [data] Window opening data
- * @return {jQuery.Promise} Promise resolved when window is done opening; see {@link #event-opening}
- * for more details about the `opening` promise
+ * @return {jQuery.Promise} An `opening` promise resolved when the window is done opening.
+ * See {@link #event-opening 'opening' event} for more information about `opening` promises.
* @fires opening
*/
OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
var manager = this,
- preparing = [],
opening = $.Deferred();
// Argument handling
@@ -2779,20 +3090,8 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
// Window opening
if ( opening.state() !== 'rejected' ) {
- // Begin loading the window if it's not loading or loaded already - may take noticable time
- // and we want to do this in paralell with any other preparatory actions
- if ( !win.isLoading() && !win.isLoaded() ) {
- // Finish initializing the window (must be done after manager is attached to DOM)
- win.setManager( this );
- preparing.push( win.load() );
- }
-
- if ( this.closing ) {
- // If a window is currently closing, wait for it to complete
- preparing.push( this.closing );
- }
-
- this.preparingToOpen = $.when.apply( $, preparing );
+ // If a window is currently closing, wait for it to complete
+ this.preparingToOpen = $.when( this.closing );
// Ensure handlers get called after preparingToOpen is set
this.preparingToOpen.done( function () {
if ( manager.modal ) {
@@ -2828,20 +3127,19 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
*
* @param {OO.ui.Window|string} win Window object or symbolic name of window to close
* @param {Object} [data] Window closing data
- * @return {jQuery.Promise} Promise resolved when window is done closing; see {@link #event-closing}
- * for more details about the `closing` promise
- * @throws {Error} If no window by that name is being managed
+ * @return {jQuery.Promise} A `closing` promise resolved when the window is done closing.
+ * See {@link #event-closing 'closing' event} for more information about closing promises.
+ * @throws {Error} An error is thrown if the window is not managed by the window manager.
* @fires closing
*/
OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
var manager = this,
- preparing = [],
closing = $.Deferred(),
- opened = this.opened;
+ opened;
// Argument handling
if ( typeof win === 'string' ) {
- win = this.windows[win];
+ win = this.windows[ win ];
} else if ( !this.hasWindow( win ) ) {
win = null;
}
@@ -2863,17 +3161,14 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
// Window closing
if ( closing.state() !== 'rejected' ) {
- if ( this.opening ) {
- // If the window is currently opening, close it when it's done
- preparing.push( this.opening );
- }
-
- this.preparingToClose = $.when.apply( $, preparing );
+ // If the window is currently opening, close it when it's done
+ this.preparingToClose = $.when( this.opening );
// Ensure handlers get called after preparingToClose is set
this.preparingToClose.done( function () {
manager.closing = closing;
manager.preparingToClose = null;
manager.emit( 'closing', win, closing, data );
+ opened = manager.opened;
manager.opened = null;
opened.resolve( closing.promise(), data );
setTimeout( function () {
@@ -2900,71 +3195,82 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
};
/**
- * Add windows.
+ * Add windows to the window manager.
+ *
+ * Windows can be added by reference, symbolic name, or explicitly defined symbolic names.
+ * See the [OOjs ui documentation on MediaWiki] [2] for examples.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
*
- * @param {Object.<string,OO.ui.Window>|OO.ui.Window[]} windows Windows to add
- * @throws {Error} If one of the windows being added without an explicit symbolic name does not have
- * a statically configured symbolic name
+ * @param {Object.<string,OO.ui.Window>|OO.ui.Window[]} windows An array of window objects specified
+ * by reference, symbolic name, or explicitly defined symbolic names.
+ * @throws {Error} An error is thrown if a window is added by symbolic name, but has neither an
+ * explicit nor a statically configured symbolic name.
*/
OO.ui.WindowManager.prototype.addWindows = function ( windows ) {
var i, len, win, name, list;
- if ( $.isArray( windows ) ) {
+ if ( Array.isArray( windows ) ) {
// Convert to map of windows by looking up symbolic names from static configuration
list = {};
for ( i = 0, len = windows.length; i < len; i++ ) {
- name = windows[i].constructor.static.name;
+ name = windows[ i ].constructor.static.name;
if ( typeof name !== 'string' ) {
throw new Error( 'Cannot add window' );
}
- list[name] = windows[i];
+ list[ name ] = windows[ i ];
}
- } else if ( $.isPlainObject( windows ) ) {
+ } else if ( OO.isPlainObject( windows ) ) {
list = windows;
}
// Add windows
for ( name in list ) {
- win = list[name];
- this.windows[name] = win;
+ win = list[ name ];
+ this.windows[ name ] = win.toggle( false );
this.$element.append( win.$element );
+ win.setManager( this );
}
};
/**
- * Remove windows.
+ * Remove the specified windows from the windows manager.
*
- * Windows will be closed before they are removed.
+ * Windows will be closed before they are removed. If you wish to remove all windows, you may wish to use
+ * the #clearWindows method instead. If you no longer need the window manager and want to ensure that it no
+ * longer listens to events, use the #destroy method.
*
- * @param {string} name Symbolic name of window to remove
+ * @param {string[]} names Symbolic names of windows to remove
* @return {jQuery.Promise} Promise resolved when window is closed and removed
- * @throws {Error} If windows being removed are not being managed
+ * @throws {Error} An error is thrown if the named windows are not managed by the window manager.
*/
OO.ui.WindowManager.prototype.removeWindows = function ( names ) {
- var i, len, win, name,
+ var i, len, win, name, cleanupWindow,
manager = this,
promises = [],
cleanup = function ( name, win ) {
- delete manager.windows[name];
+ delete manager.windows[ name ];
win.$element.detach();
};
for ( i = 0, len = names.length; i < len; i++ ) {
- name = names[i];
- win = this.windows[name];
+ name = names[ i ];
+ win = this.windows[ name ];
if ( !win ) {
throw new Error( 'Cannot remove window' );
}
- promises.push( this.closeWindow( name ).then( OO.ui.bind( cleanup, null, name, win ) ) );
+ cleanupWindow = cleanup.bind( null, name, win );
+ promises.push( this.closeWindow( name ).then( cleanupWindow, cleanupWindow ) );
}
return $.when.apply( $, promises );
};
/**
- * Remove all windows.
+ * Remove all windows from the window manager.
*
- * Windows will be closed before they are removed.
+ * Windows will be closed before they are removed. Note that the window manager, though not in use, will still
+ * listen to events. If the window manager will not be used again, you may wish to use the #destroy method instead.
+ * To remove just a subset of windows, use the #removeWindows method.
*
* @return {jQuery.Promise} Promise resolved when all windows are closed and removed
*/
@@ -2973,7 +3279,7 @@ OO.ui.WindowManager.prototype.clearWindows = function () {
};
/**
- * Set dialog size.
+ * Set dialog size. In general, this method should not be called directly.
*
* Fullscreen mode will be used if the dialog is too wide to fit in the screen.
*
@@ -2985,20 +3291,22 @@ OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
return;
}
- var viewport = OO.ui.Element.getDimensions( win.getElementWindow() ),
+ var viewport = OO.ui.Element.static.getDimensions( win.getElementWindow() ),
sizes = this.constructor.static.sizes,
size = win.getSize();
- if ( !sizes[size] ) {
+ if ( !sizes[ size ] ) {
size = this.constructor.static.defaultSize;
}
- if ( size !== 'full' && viewport.rect.right - viewport.rect.left < sizes[size].width ) {
+ if ( size !== 'full' && viewport.rect.right - viewport.rect.left < sizes[ size ].width ) {
size = 'full';
}
this.$element.toggleClass( 'oo-ui-windowManager-fullscreen', size === 'full' );
this.$element.toggleClass( 'oo-ui-windowManager-floating', size !== 'full' );
- win.setDimensions( sizes[size] );
+ win.setDimensions( sizes[ size ] );
+
+ this.emit( 'resize', win );
return this;
};
@@ -3006,40 +3314,51 @@ OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
/**
* Bind or unbind global events for scrolling.
*
+ * @private
* @param {boolean} [on] Bind global events
* @chainable
*/
OO.ui.WindowManager.prototype.toggleGlobalEvents = function ( on ) {
on = on === undefined ? !!this.globalEvents : !!on;
+ var scrollWidth, bodyMargin,
+ $body = $( this.getElementDocument().body ),
+ // We could have multiple window managers open so only modify
+ // the body css at the bottom of the stack
+ stackDepth = $body.data( 'windowManagerGlobalEvents' ) || 0 ;
+
if ( on ) {
if ( !this.globalEvents ) {
- this.$( this.getElementDocument() ).on( {
- // Prevent scrolling by keys in top-level window
- keydown: this.onDocumentKeyDownHandler
- } );
- this.$( this.getElementWindow() ).on( {
- // Prevent scrolling by wheel in top-level window
- mousewheel: this.onWindowMouseWheelHandler,
+ $( this.getElementWindow() ).on( {
// Start listening for top-level window dimension changes
'orientationchange resize': this.onWindowResizeHandler
} );
+ if ( stackDepth === 0 ) {
+ scrollWidth = window.innerWidth - document.documentElement.clientWidth;
+ bodyMargin = parseFloat( $body.css( 'margin-right' ) ) || 0;
+ $body.css( {
+ overflow: 'hidden',
+ 'margin-right': bodyMargin + scrollWidth
+ } );
+ }
+ stackDepth++;
this.globalEvents = true;
}
} else if ( this.globalEvents ) {
- // Unbind global events
- this.$( this.getElementDocument() ).off( {
- // Allow scrolling by keys in top-level window
- keydown: this.onDocumentKeyDownHandler
- } );
- this.$( this.getElementWindow() ).off( {
- // Allow scrolling by wheel in top-level window
- mousewheel: this.onWindowMouseWheelHandler,
+ $( this.getElementWindow() ).off( {
// Stop listening for top-level window dimension changes
'orientationchange resize': this.onWindowResizeHandler
} );
+ stackDepth--;
+ if ( stackDepth === 0 ) {
+ $body.css( {
+ overflow: '',
+ 'margin-right': ''
+ } );
+ }
this.globalEvents = false;
}
+ $body.data( 'windowManagerGlobalEvents', stackDepth );
return this;
};
@@ -3047,6 +3366,7 @@ OO.ui.WindowManager.prototype.toggleGlobalEvents = function ( on ) {
/**
* Toggle screen reader visibility of content other than the window manager.
*
+ * @private
* @param {boolean} [isolate] Make only the window manager visible to screen readers
* @chainable
*/
@@ -3062,7 +3382,7 @@ OO.ui.WindowManager.prototype.toggleAriaIsolation = function ( isolate ) {
.attr( 'aria-hidden', '' );
}
} else if ( this.$ariaHidden ) {
- // Restore screen reader visiblity
+ // Restore screen reader visibility
this.$ariaHidden.removeAttr( 'aria-hidden' );
this.$ariaHidden = null;
}
@@ -3071,32 +3391,61 @@ OO.ui.WindowManager.prototype.toggleAriaIsolation = function ( isolate ) {
};
/**
- * Destroy window manager.
+ * Destroy the window manager.
*
- * Windows will not be closed, only removed from the DOM.
+ * Destroying the window manager ensures that it will no longer listen to events. If you would like to
+ * continue using the window manager, but wish to remove all windows from it, use the #clearWindows method
+ * instead.
*/
OO.ui.WindowManager.prototype.destroy = function () {
this.toggleGlobalEvents( false );
this.toggleAriaIsolation( false );
+ this.clearWindows();
this.$element.remove();
};
/**
- * @abstract
+ * Errors contain a required message (either a string or jQuery selection) that is used to describe what went wrong
+ * in a {@link OO.ui.Process process}. The error's #recoverable and #warning configurations are used to customize the
+ * appearance and functionality of the error interface.
+ *
+ * The basic error interface contains a formatted error message as well as two buttons: 'Dismiss' and 'Try again' (i.e., the error
+ * is 'recoverable' by default). If the error is not recoverable, the 'Try again' button will not be rendered and the widget
+ * that initiated the failed process will be disabled.
+ *
+ * If the error is a warning, the error interface will include a 'Dismiss' and a 'Continue' button, which will try the
+ * process again.
+ *
+ * For an example of error interfaces, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Processes_and_errors
+ *
* @class
*
* @constructor
* @param {string|jQuery} message Description of error
* @param {Object} [config] Configuration options
- * @cfg {boolean} [recoverable=true] Error is recoverable
+ * @cfg {boolean} [recoverable=true] Error is recoverable.
+ * By default, errors are recoverable, and users can try the process again.
+ * @cfg {boolean} [warning=false] Error is a warning.
+ * If the error is a warning, the error interface will include a
+ * 'Dismiss' and a 'Continue' button. It is the responsibility of the developer to ensure that the warning
+ * is not triggered a second time if the user chooses to continue.
*/
-OO.ui.Error = function OoUiElement( message, config ) {
+OO.ui.Error = function OoUiError( message, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( message ) && config === undefined ) {
+ config = message;
+ message = config.message;
+ }
+
// Configuration initialization
config = config || {};
// Properties
this.message = message instanceof jQuery ? message : String( message );
this.recoverable = config.recoverable === undefined || !!config.recoverable;
+ this.warning = !!config.warning;
};
/* Setup */
@@ -3106,7 +3455,9 @@ OO.initClass( OO.ui.Error );
/* Methods */
/**
- * Check if error can be recovered from.
+ * Check if the error is recoverable.
+ *
+ * If the error is recoverable, users are able to try the process again.
*
* @return {boolean} Error is recoverable
*/
@@ -3115,6 +3466,17 @@ OO.ui.Error.prototype.isRecoverable = function () {
};
/**
+ * Check if the error is a warning.
+ *
+ * If the error is a warning, the error interface will include a 'Dismiss' and a 'Continue' button.
+ *
+ * @return {boolean} Error is warning
+ */
+OO.ui.Error.prototype.isWarning = function () {
+ return this.warning;
+};
+
+/**
* Get error message as DOM nodes.
*
* @return {jQuery} Error message in DOM nodes
@@ -3126,7 +3488,7 @@ OO.ui.Error.prototype.getMessage = function () {
};
/**
- * Get error message as text.
+ * Get the error message text.
*
* @return {string} Error message
*/
@@ -3135,19 +3497,57 @@ OO.ui.Error.prototype.getMessageText = function () {
};
/**
- * A list of functions, called in sequence.
+ * Wraps an HTML snippet for use with configuration values which default
+ * to strings. This bypasses the default html-escaping done to string
+ * values.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {string} [content] HTML content
+ */
+OO.ui.HtmlSnippet = function OoUiHtmlSnippet( content ) {
+ // Properties
+ this.content = content;
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.HtmlSnippet );
+
+/* Methods */
+
+/**
+ * Render into HTML.
+ *
+ * @return {string} Unchanged HTML snippet.
+ */
+OO.ui.HtmlSnippet.prototype.toString = function () {
+ return this.content;
+};
+
+/**
+ * A Process is a list of steps that are called in sequence. The step can be a number, a jQuery promise,
+ * or a function:
*
- * If a function added to a process returns boolean false the process will stop; if it returns an
- * object with a `promise` method the process will use the promise to either continue to the next
- * step when the promise is resolved or stop when the promise is rejected.
+ * - **number**: the process will wait for the specified number of milliseconds before proceeding.
+ * - **promise**: the process will continue to the next step when the promise is successfully resolved
+ * or stop if the promise is rejected.
+ * - **function**: the process will execute the function. The process will stop if the function returns
+ * either a boolean `false` or a promise that is rejected; if the function returns a number, the process
+ * will wait for that number of milliseconds before proceeding.
+ *
+ * If the process fails, an {@link OO.ui.Error error} is generated. Depending on how the error is
+ * configured, users can dismiss the error and try the process again, or not. If a process is stopped,
+ * its remaining steps will not be performed.
*
* @class
*
* @constructor
- * @param {number|jQuery.Promise|Function} step Time to wait, promise to wait for or function to
- * call, see #createStep for more information
- * @param {Object} [context=null] Context to call the step function in, ignored if step is a number
- * or a promise
+ * @param {number|jQuery.Promise|Function} step Number of miliseconds to wait before proceeding, promise
+ * that must be resolved before proceeding, or a function to execute. See #createStep for more information. see #createStep for more information
+ * @param {Object} [context=null] Execution context of the function. The context is ignored if the step is
+ * a number or promise.
* @return {Object} Step object, with `callback` and `context` properties
*/
OO.ui.Process = function ( step, context ) {
@@ -3169,9 +3569,9 @@ OO.initClass( OO.ui.Process );
/**
* Start the process.
*
- * @return {jQuery.Promise} Promise that is resolved when all steps have completed or rejected when
- * any of the steps return boolean false or a promise which gets rejected; upon stopping the
- * process, the remaining steps will not be taken
+ * @return {jQuery.Promise} Promise that is resolved when all steps have successfully completed.
+ * If any of the steps return a promise that is rejected or a boolean false, this promise is rejected
+ * and any remaining steps are not performed.
*/
OO.ui.Process.prototype.execute = function () {
var i, len, promise;
@@ -3206,7 +3606,7 @@ OO.ui.Process.prototype.execute = function () {
// Use rejected promise for error
return $.Deferred().reject( [ result ] ).promise();
}
- if ( $.isArray( result ) && result.length && result[0] instanceof OO.ui.Error ) {
+ if ( Array.isArray( result ) && result.length && result[ 0 ] instanceof OO.ui.Error ) {
// Use rejected promise for list of errors
return $.Deferred().reject( result ).promise();
}
@@ -3222,9 +3622,9 @@ OO.ui.Process.prototype.execute = function () {
if ( this.steps.length ) {
// Generate a chain reaction of promises
- promise = proceed( this.steps[0] )();
+ promise = proceed( this.steps[ 0 ] )();
for ( i = 1, len = this.steps.length; i < len; i++ ) {
- promise = promise.then( proceed( this.steps[i] ) );
+ promise = promise.then( proceed( this.steps[ i ] ) );
}
} else {
promise = $.Deferred().resolve().promise();
@@ -3239,16 +3639,16 @@ OO.ui.Process.prototype.execute = function () {
* @private
* @param {number|jQuery.Promise|Function} step
*
- * - Number of milliseconds to wait; or
- * - Promise to wait to be resolved; or
+ * - Number of milliseconds to wait before proceeding
+ * - Promise that must be resolved before proceeding
* - Function to execute
- * - If it returns boolean false the process will stop
- * - If it returns an object with a `promise` method the process will use the promise to either
- * continue to the next step when the promise is resolved or stop when the promise is rejected
- * - If it returns a number, the process will wait for that number of milliseconds before
- * proceeding
- * @param {Object} [context=null] Context to call the step function in, ignored if step is a number
- * or a promise
+ * - If the function returns a boolean false the process will stop
+ * - If the function returns a promise, the process will continue to the next
+ * step when the promise is resolved or stop if the promise is rejected
+ * - If the function returns a number, the process will wait for that number of
+ * milliseconds before proceeding
+ * @param {Object} [context=null] Execution context of the function. The context is
+ * ignored if the step is a number or promise.
* @return {Object} Step object, with `callback` and `context` properties
*/
OO.ui.Process.prototype.createStep = function ( step, context ) {
@@ -3311,7 +3711,15 @@ OO.inheritClass( OO.ui.ToolFactory, OO.Factory );
/* Methods */
-/** */
+/**
+ * Get tools from the factory
+ *
+ * @param {Array} include Included tools
+ * @param {Array} exclude Excluded tools
+ * @param {Array} promote Promoted tools
+ * @param {Array} demote Demoted tools
+ * @return {string[]} List of tools
+ */
OO.ui.ToolFactory.prototype.getTools = function ( include, exclude, promote, demote ) {
var i, len, included, promoted, demoted,
auto = [],
@@ -3326,8 +3734,8 @@ OO.ui.ToolFactory.prototype.getTools = function ( include, exclude, promote, dem
// Auto
for ( i = 0, len = included.length; i < len; i++ ) {
- if ( !used[included[i]] ) {
- auto.push( included[i] );
+ if ( !used[ included[ i ] ] ) {
+ auto.push( included[ i ] );
}
}
@@ -3355,22 +3763,22 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
if ( collection === '*' ) {
for ( name in this.registry ) {
- tool = this.registry[name];
+ tool = this.registry[ name ];
if (
// Only add tools by group name when auto-add is enabled
tool.static.autoAddToCatchall &&
// Exclude already used tools
- ( !used || !used[name] )
+ ( !used || !used[ name ] )
) {
names.push( name );
if ( used ) {
- used[name] = true;
+ used[ name ] = true;
}
}
}
- } else if ( $.isArray( collection ) ) {
+ } else if ( Array.isArray( collection ) ) {
for ( i = 0, len = collection.length; i < len; i++ ) {
- item = collection[i];
+ item = collection[ i ];
// Allow plain strings as shorthand for named tools
if ( typeof item === 'string' ) {
item = { name: item };
@@ -3378,26 +3786,26 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
if ( OO.isPlainObject( item ) ) {
if ( item.group ) {
for ( name in this.registry ) {
- tool = this.registry[name];
+ tool = this.registry[ name ];
if (
// Include tools with matching group
tool.static.group === item.group &&
// Only add tools by group name when auto-add is enabled
tool.static.autoAddToGroup &&
// Exclude already used tools
- ( !used || !used[name] )
+ ( !used || !used[ name ] )
) {
names.push( name );
if ( used ) {
- used[name] = true;
+ used[ name ] = true;
}
}
}
// Include tools with matching name and exclude already used tools
- } else if ( item.name && ( !used || !used[item.name] ) ) {
+ } else if ( item.name && ( !used || !used[ item.name ] ) ) {
names.push( item.name );
if ( used ) {
- used[item.name] = true;
+ used[ item.name ] = true;
}
}
}
@@ -3422,7 +3830,7 @@ OO.ui.ToolGroupFactory = function OoUiToolGroupFactory() {
// Register default toolgroups
for ( i = 0, l = defaultClasses.length; i < l; i++ ) {
- this.register( defaultClasses[i] );
+ this.register( defaultClasses[ i ] );
}
};
@@ -3446,19 +3854,207 @@ OO.ui.ToolGroupFactory.static.getDefaultClasses = function () {
};
/**
- * Element with a button.
+ * Theme logic.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.Theme = function OoUiTheme( config ) {
+ // Configuration initialization
+ config = config || {};
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.Theme );
+
+/* Methods */
+
+/**
+ * Get a list of classes to be applied to a widget.
+ *
+ * The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or removes,
+ * otherwise state transitions will not work properly.
+ *
+ * @param {OO.ui.Element} element Element for which to get classes
+ * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
+ */
+OO.ui.Theme.prototype.getElementClasses = function ( /* element */ ) {
+ return { on: [], off: [] };
+};
+
+/**
+ * Update CSS classes provided by the theme.
+ *
+ * For elements with theme logic hooks, this should be called any time there's a state change.
+ *
+ * @param {OO.ui.Element} element Element for which to update classes
+ * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
+ */
+OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
+ var classes = this.getElementClasses( element );
+
+ element.$element
+ .removeClass( classes.off.join( ' ' ) )
+ .addClass( classes.on.join( ' ' ) );
+};
+
+/**
+ * The TabIndexedElement class is an attribute mixin used to add additional functionality to an
+ * element created by another class. The mixin provides a ‘tabIndex’ property, which specifies the
+ * order in which users will navigate through the focusable elements via the "tab" key.
+ *
+ * @example
+ * // TabIndexedElement is mixed into the ButtonWidget class
+ * // to provide a tabIndex property.
+ * var button1 = new OO.ui.ButtonWidget( {
+ * label: 'fourth',
+ * tabIndex: 4
+ * } );
+ * var button2 = new OO.ui.ButtonWidget( {
+ * label: 'second',
+ * tabIndex: 2
+ * } );
+ * var button3 = new OO.ui.ButtonWidget( {
+ * label: 'third',
+ * tabIndex: 3
+ * } );
+ * var button4 = new OO.ui.ButtonWidget( {
+ * label: 'first',
+ * tabIndex: 1
+ * } );
+ * $( 'body' ).append( button1.$element, button2.$element, button3.$element, button4.$element );
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$tabIndexed] The element that should use the tabindex functionality. By default,
+ * the functionality is applied to the element created by the class ($element). If a different element is specified, the tabindex
+ * functionality will be applied to it instead.
+ * @cfg {number|null} [tabIndex=0] Number that specifies the element’s position in the tab-navigation
+ * order (e.g., 1 for the first focusable element). Use 0 to use the default navigation order; use -1
+ * to remove the element from the tab-navigation flow.
+ */
+OO.ui.TabIndexedElement = function OoUiTabIndexedElement( config ) {
+ // Configuration initialization
+ config = $.extend( { tabIndex: 0 }, config );
+
+ // Properties
+ this.$tabIndexed = null;
+ this.tabIndex = null;
+
+ // Events
+ this.connect( this, { disable: 'onDisable' } );
+
+ // Initialization
+ this.setTabIndex( config.tabIndex );
+ this.setTabIndexedElement( config.$tabIndexed || this.$element );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.TabIndexedElement );
+
+/* Methods */
+
+/**
+ * Set the element that should use the tabindex functionality.
+ *
+ * This method is used to retarget a tabindex mixin so that its functionality applies
+ * to the specified element. If an element is currently using the functionality, the mixin’s
+ * effect on that element is removed before the new element is set up.
+ *
+ * @param {jQuery} $tabIndexed Element that should use the tabindex functionality
+ * @chainable
+ */
+OO.ui.TabIndexedElement.prototype.setTabIndexedElement = function ( $tabIndexed ) {
+ var tabIndex = this.tabIndex;
+ // Remove attributes from old $tabIndexed
+ this.setTabIndex( null );
+ // Force update of new $tabIndexed
+ this.$tabIndexed = $tabIndexed;
+ this.tabIndex = tabIndex;
+ return this.updateTabIndex();
+};
+
+/**
+ * Set the value of the tabindex.
*
- * Buttons are used for controls which can be clicked. They can be configured to use tab indexing
- * and access keys for accessibility purposes.
+ * @param {number|null} tabIndex Tabindex value, or `null` for no tabindex
+ * @chainable
+ */
+OO.ui.TabIndexedElement.prototype.setTabIndex = function ( tabIndex ) {
+ tabIndex = typeof tabIndex === 'number' ? tabIndex : null;
+
+ if ( this.tabIndex !== tabIndex ) {
+ this.tabIndex = tabIndex;
+ this.updateTabIndex();
+ }
+
+ return this;
+};
+
+/**
+ * Update the `tabindex` attribute, in case of changes to tab index or
+ * disabled state.
*
+ * @private
+ * @chainable
+ */
+OO.ui.TabIndexedElement.prototype.updateTabIndex = function () {
+ if ( this.$tabIndexed ) {
+ if ( this.tabIndex !== null ) {
+ // Do not index over disabled elements
+ this.$tabIndexed.attr( {
+ tabindex: this.isDisabled() ? -1 : this.tabIndex,
+ // ChromeVox and NVDA do not seem to inherit this from parent elements
+ 'aria-disabled': this.isDisabled().toString()
+ } );
+ } else {
+ this.$tabIndexed.removeAttr( 'tabindex aria-disabled' );
+ }
+ }
+ return this;
+};
+
+/**
+ * Handle disable events.
+ *
+ * @private
+ * @param {boolean} disabled Element is disabled
+ */
+OO.ui.TabIndexedElement.prototype.onDisable = function () {
+ this.updateTabIndex();
+};
+
+/**
+ * Get the value of the tabindex.
+ *
+ * @return {number|null} Tabindex value
+ */
+OO.ui.TabIndexedElement.prototype.getTabIndex = function () {
+ return this.tabIndex;
+};
+
+/**
+ * ButtonElement is often mixed into other classes to generate a button, which is a clickable
+ * interface element that can be configured with access keys for accessibility.
+ * See the [OOjs UI documentation on MediaWiki] [1] for examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Buttons
* @abstract
* @class
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {jQuery} [$button] Button node, assigned to #$button, omit to use a generated `<a>`
- * @cfg {boolean} [framed=true] Render button with a frame
- * @cfg {number} [tabIndex=0] Button's tab index, use null to have no tabIndex
+ * @cfg {jQuery} [$button] The button element created by the class.
+ * If this configuration is omitted, the button element will use a generated `<a>`.
+ * @cfg {boolean} [framed=true] Render the button with a frame
* @cfg {string} [accessKey] Button's access key
*/
OO.ui.ButtonElement = function OoUiButtonElement( config ) {
@@ -3468,18 +4064,20 @@ OO.ui.ButtonElement = function OoUiButtonElement( config ) {
// Properties
this.$button = null;
this.framed = null;
- this.tabIndex = null;
this.accessKey = null;
this.active = false;
- this.onMouseUpHandler = OO.ui.bind( this.onMouseUp, this );
- this.onMouseDownHandler = OO.ui.bind( this.onMouseDown, this );
+ this.onMouseUpHandler = this.onMouseUp.bind( this );
+ this.onMouseDownHandler = this.onMouseDown.bind( this );
+ this.onKeyDownHandler = this.onKeyDown.bind( this );
+ this.onKeyUpHandler = this.onKeyUp.bind( this );
+ this.onClickHandler = this.onClick.bind( this );
+ this.onKeyPressHandler = this.onKeyPress.bind( this );
// Initialization
this.$element.addClass( 'oo-ui-buttonElement' );
this.toggleFramed( config.framed === undefined || config.framed );
- this.setTabIndex( config.tabIndex || 0 );
this.setAccessKey( config.accessKey );
- this.setButtonElement( config.$button || this.$( '<a>' ) );
+ this.setButtonElement( config.$button || $( '<a>' ) );
};
/* Setup */
@@ -3491,18 +4089,33 @@ OO.initClass( OO.ui.ButtonElement );
/**
* Cancel mouse down events.
*
+ * This property is usually set to `true` to prevent the focus from changing when the button is clicked.
+ * Classes such as {@link OO.ui.DraggableElement DraggableElement} and {@link OO.ui.ButtonOptionWidget ButtonOptionWidget}
+ * use a value of `false` so that dragging behavior is possible and mousedown events can be handled by a
+ * parent widget.
+ *
* @static
* @inheritable
* @property {boolean}
*/
OO.ui.ButtonElement.static.cancelButtonMouseDownEvents = true;
+/* Events */
+
+/**
+ * A 'click' event is emitted when the button element is clicked.
+ *
+ * @event click
+ */
+
/* Methods */
/**
* Set the button element.
*
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * This method is used to retarget a button mixin so that its functionality applies to
+ * the specified button element instead of the one created by the class. If a button element
+ * is already set, the method will remove the mixin’s effect on that element.
*
* @param {jQuery} $button Element to use as button
*/
@@ -3510,30 +4123,39 @@ OO.ui.ButtonElement.prototype.setButtonElement = function ( $button ) {
if ( this.$button ) {
this.$button
.removeClass( 'oo-ui-buttonElement-button' )
- .removeAttr( 'role accesskey tabindex' )
- .off( this.onMouseDownHandler );
+ .removeAttr( 'role accesskey' )
+ .off( {
+ mousedown: this.onMouseDownHandler,
+ keydown: this.onKeyDownHandler,
+ click: this.onClickHandler,
+ keypress: this.onKeyPressHandler
+ } );
}
this.$button = $button
.addClass( 'oo-ui-buttonElement-button' )
- .attr( { role: 'button', accesskey: this.accessKey, tabindex: this.tabIndex } )
- .on( 'mousedown', this.onMouseDownHandler );
+ .attr( { role: 'button', accesskey: this.accessKey } )
+ .on( {
+ mousedown: this.onMouseDownHandler,
+ keydown: this.onKeyDownHandler,
+ click: this.onClickHandler,
+ keypress: this.onKeyPressHandler
+ } );
};
/**
* Handles mouse down events.
*
+ * @protected
* @param {jQuery.Event} e Mouse down event
*/
OO.ui.ButtonElement.prototype.onMouseDown = function ( e ) {
if ( this.isDisabled() || e.which !== 1 ) {
- return false;
+ return;
}
- // Remove the tab-index while the button is down to prevent the button from stealing focus
- this.$button.removeAttr( 'tabindex' );
this.$element.addClass( 'oo-ui-buttonElement-pressed' );
// Run the mouseup handler no matter where the mouse is when the button is let go, so we can
- // reliably reapply the tabindex and remove the pressed class
+ // reliably remove the pressed class
this.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );
// Prevent change of focus unless specifically configured otherwise
if ( this.constructor.static.cancelButtonMouseDownEvents ) {
@@ -3544,62 +4166,109 @@ OO.ui.ButtonElement.prototype.onMouseDown = function ( e ) {
/**
* Handles mouse up events.
*
+ * @protected
* @param {jQuery.Event} e Mouse up event
*/
OO.ui.ButtonElement.prototype.onMouseUp = function ( e ) {
if ( this.isDisabled() || e.which !== 1 ) {
- return false;
+ return;
}
- // Restore the tab-index after the button is up to restore the button's accesssibility
- this.$button.attr( 'tabindex', this.tabIndex );
this.$element.removeClass( 'oo-ui-buttonElement-pressed' );
// Stop listening for mouseup, since we only needed this once
this.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );
};
/**
- * Toggle frame.
+ * Handles mouse click events.
*
- * @param {boolean} [framed] Make button framed, omit to toggle
- * @chainable
+ * @protected
+ * @param {jQuery.Event} e Mouse click event
+ * @fires click
*/
-OO.ui.ButtonElement.prototype.toggleFramed = function ( framed ) {
- framed = framed === undefined ? !this.framed : !!framed;
- if ( framed !== this.framed ) {
- this.framed = framed;
- this.$element
- .toggleClass( 'oo-ui-buttonElement-frameless', !framed )
- .toggleClass( 'oo-ui-buttonElement-framed', framed );
+OO.ui.ButtonElement.prototype.onClick = function ( e ) {
+ if ( !this.isDisabled() && e.which === 1 ) {
+ if ( this.emit( 'click' ) ) {
+ return false;
+ }
}
+};
- return this;
+/**
+ * Handles key down events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.ButtonElement.prototype.onKeyDown = function ( e ) {
+ if ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {
+ return;
+ }
+ this.$element.addClass( 'oo-ui-buttonElement-pressed' );
+ // Run the keyup handler no matter where the key is when the button is let go, so we can
+ // reliably remove the pressed class
+ this.getElementDocument().addEventListener( 'keyup', this.onKeyUpHandler, true );
};
/**
- * Set tab index.
+ * Handles key up events.
*
- * @param {number|null} tabIndex Button's tab index, use null to remove
- * @chainable
+ * @protected
+ * @param {jQuery.Event} e Key up event
*/
-OO.ui.ButtonElement.prototype.setTabIndex = function ( tabIndex ) {
- tabIndex = typeof tabIndex === 'number' && tabIndex >= 0 ? tabIndex : null;
+OO.ui.ButtonElement.prototype.onKeyUp = function ( e ) {
+ if ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {
+ return;
+ }
+ this.$element.removeClass( 'oo-ui-buttonElement-pressed' );
+ // Stop listening for keyup, since we only needed this once
+ this.getElementDocument().removeEventListener( 'keyup', this.onKeyUpHandler, true );
+};
- if ( this.tabIndex !== tabIndex ) {
- if ( this.$button ) {
- if ( tabIndex !== null ) {
- this.$button.attr( 'tabindex', tabIndex );
- } else {
- this.$button.removeAttr( 'tabindex' );
- }
+/**
+ * Handles key press events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key press event
+ * @fires click
+ */
+OO.ui.ButtonElement.prototype.onKeyPress = function ( e ) {
+ if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+ if ( this.emit( 'click' ) ) {
+ return false;
}
- this.tabIndex = tabIndex;
+ }
+};
+
+/**
+ * Check if button has a frame.
+ *
+ * @return {boolean} Button is framed
+ */
+OO.ui.ButtonElement.prototype.isFramed = function () {
+ return this.framed;
+};
+
+/**
+ * Render the button with or without a frame. Omit the `framed` parameter to toggle the button frame on and off.
+ *
+ * @param {boolean} [framed] Make button framed, omit to toggle
+ * @chainable
+ */
+OO.ui.ButtonElement.prototype.toggleFramed = function ( framed ) {
+ framed = framed === undefined ? !this.framed : !!framed;
+ if ( framed !== this.framed ) {
+ this.framed = framed;
+ this.$element
+ .toggleClass( 'oo-ui-buttonElement-frameless', !framed )
+ .toggleClass( 'oo-ui-buttonElement-framed', framed );
+ this.updateThemeClasses();
}
return this;
};
/**
- * Set access key.
+ * Set the button's access key.
*
* @param {string} accessKey Button's access key, use empty string to remove
* @chainable
@@ -3622,7 +4291,11 @@ OO.ui.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
};
/**
- * Set active state.
+ * Set the button to its 'active' state.
+ *
+ * The active state occurs when a {@link OO.ui.ButtonOptionWidget ButtonOptionWidget} or
+ * a {@link OO.ui.ToggleButtonWidget ToggleButtonWidget} is pressed. This method does nothing
+ * for other button types.
*
* @param {boolean} [value] Make button active
* @chainable
@@ -3633,17 +4306,23 @@ OO.ui.ButtonElement.prototype.setActive = function ( value ) {
};
/**
- * Element containing a sequence of child elements.
+ * Any OOjs UI widget that contains other widgets (such as {@link OO.ui.ButtonWidget buttons} or
+ * {@link OO.ui.OptionWidget options}) mixes in GroupElement. Adding, removing, and clearing
+ * items from the group is done through the interface the class provides.
+ * For more information, please see the [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Groups
*
* @abstract
* @class
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {jQuery} [$group] Container node, assigned to #$group, omit to use a generated `<div>`
+ * @cfg {jQuery} [$group] The container element created by the class. If this configuration
+ * is omitted, the group element will use a generated `<div>`.
*/
OO.ui.GroupElement = function OoUiGroupElement( config ) {
- // Configuration
+ // Configuration initialization
config = config || {};
// Properties
@@ -3652,7 +4331,7 @@ OO.ui.GroupElement = function OoUiGroupElement( config ) {
this.aggregateItemEvents = {};
// Initialization
- this.setGroupElement( config.$group || this.$( '<div>' ) );
+ this.setGroupElement( config.$group || $( '<div>' ) );
};
/* Methods */
@@ -3669,12 +4348,12 @@ OO.ui.GroupElement.prototype.setGroupElement = function ( $group ) {
this.$group = $group;
for ( i = 0, len = this.items.length; i < len; i++ ) {
- this.$group.append( this.items[i].$element );
+ this.$group.append( this.items[ i ].$element );
}
};
/**
- * Check if there are no items.
+ * Check if a group contains no items.
*
* @return {boolean} Group is empty
*/
@@ -3683,60 +4362,113 @@ OO.ui.GroupElement.prototype.isEmpty = function () {
};
/**
- * Get items.
+ * Get all items in the group.
*
- * @return {OO.ui.Element[]} Items
+ * The method returns an array of item references (e.g., [button1, button2, button3]) and is useful
+ * when synchronizing groups of items, or whenever the references are required (e.g., when removing items
+ * from a group).
+ *
+ * @return {OO.ui.Element[]} An array of items.
*/
OO.ui.GroupElement.prototype.getItems = function () {
return this.items.slice( 0 );
};
/**
- * Add an aggregate item event.
+ * Get an item by its data.
*
- * Aggregated events are listened to on each item and then emitted by the group under a new name,
- * and with an additional leading parameter containing the item that emitted the original event.
- * Other arguments that were emitted from the original event are passed through.
+ * Only the first item with matching data will be returned. To return all matching items,
+ * use the #getItemsFromData method.
*
- * @param {Object.<string,string|null>} events Aggregate events emitted by group, keyed by item
- * event, use null value to remove aggregation
- * @throws {Error} If aggregation already exists
+ * @param {Object} data Item data to search for
+ * @return {OO.ui.Element|null} Item with equivalent data, `null` if none exists
+ */
+OO.ui.GroupElement.prototype.getItemFromData = function ( data ) {
+ var i, len, item,
+ hash = OO.getHash( data );
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[ i ];
+ if ( hash === OO.getHash( item.getData() ) ) {
+ return item;
+ }
+ }
+
+ return null;
+};
+
+/**
+ * Get items by their data.
+ *
+ * All items with matching data will be returned. To return only the first match, use the #getItemFromData method instead.
+ *
+ * @param {Object} data Item data to search for
+ * @return {OO.ui.Element[]} Items with equivalent data
+ */
+OO.ui.GroupElement.prototype.getItemsFromData = function ( data ) {
+ var i, len, item,
+ hash = OO.getHash( data ),
+ items = [];
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[ i ];
+ if ( hash === OO.getHash( item.getData() ) ) {
+ items.push( item );
+ }
+ }
+
+ return items;
+};
+
+/**
+ * Aggregate the events emitted by the group.
+ *
+ * When events are aggregated, the group will listen to all contained items for the event,
+ * and then emit the event under a new name. The new event will contain an additional leading
+ * parameter containing the item that emitted the original event. Other arguments emitted from
+ * the original event are passed through.
+ *
+ * @param {Object.<string,string|null>} events An object keyed by the name of the event that should be
+ * aggregated (e.g., ‘click’) and the value of the new name to use (e.g., ‘groupClick’).
+ * A `null` value will remove aggregated events.
+
+ * @throws {Error} An error is thrown if aggregation already exists.
*/
OO.ui.GroupElement.prototype.aggregate = function ( events ) {
var i, len, item, add, remove, itemEvent, groupEvent;
for ( itemEvent in events ) {
- groupEvent = events[itemEvent];
+ groupEvent = events[ itemEvent ];
// Remove existing aggregated event
- if ( itemEvent in this.aggregateItemEvents ) {
+ if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
// Don't allow duplicate aggregations
if ( groupEvent ) {
throw new Error( 'Duplicate item event aggregation for ' + itemEvent );
}
// Remove event aggregation from existing items
for ( i = 0, len = this.items.length; i < len; i++ ) {
- item = this.items[i];
+ item = this.items[ i ];
if ( item.connect && item.disconnect ) {
remove = {};
- remove[itemEvent] = [ 'emit', groupEvent, item ];
+ remove[ itemEvent ] = [ 'emit', groupEvent, item ];
item.disconnect( this, remove );
}
}
// Prevent future items from aggregating event
- delete this.aggregateItemEvents[itemEvent];
+ delete this.aggregateItemEvents[ itemEvent ];
}
// Add new aggregate event
if ( groupEvent ) {
// Make future items aggregate event
- this.aggregateItemEvents[itemEvent] = groupEvent;
+ this.aggregateItemEvents[ itemEvent ] = groupEvent;
// Add event aggregation to existing items
for ( i = 0, len = this.items.length; i < len; i++ ) {
- item = this.items[i];
+ item = this.items[ i ];
if ( item.connect && item.disconnect ) {
add = {};
- add[itemEvent] = [ 'emit', groupEvent, item ];
+ add[ itemEvent ] = [ 'emit', groupEvent, item ];
item.connect( this, add );
}
}
@@ -3745,12 +4477,13 @@ OO.ui.GroupElement.prototype.aggregate = function ( events ) {
};
/**
- * Add items.
+ * Add items to the group.
*
- * Adding an existing item (by value) will move it.
+ * Items will be added to the end of the group array unless the optional `index` parameter specifies
+ * a different insertion point. Adding an existing item will move it to the end of the array or the point specified by the `index`.
*
- * @param {OO.ui.Element[]} items Item
- * @param {number} [index] Index to insert items at
+ * @param {OO.ui.Element[]} items An array of items to add to the group
+ * @param {number} [index] Index of the insertion point
* @chainable
*/
OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
@@ -3758,7 +4491,7 @@ OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
itemElements = [];
for ( i = 0, len = items.length; i < len; i++ ) {
- item = items[i];
+ item = items[ i ];
// Check if item exists then remove it first, effectively "moving" it
currentIndex = $.inArray( item, this.items );
@@ -3773,7 +4506,7 @@ OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
if ( item.connect && item.disconnect && !$.isEmptyObject( this.aggregateItemEvents ) ) {
events = {};
for ( event in this.aggregateItemEvents ) {
- events[event] = [ 'emit', this.aggregateItemEvents[event], item ];
+ events[ event ] = [ 'emit', this.aggregateItemEvents[ event ], item ];
}
item.connect( this, events );
}
@@ -3788,7 +4521,7 @@ OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
this.$group.prepend( itemElements );
this.items.unshift.apply( this.items, items );
} else {
- this.items[index].$element.before( itemElements );
+ this.items[ index ].$element.before( itemElements );
this.items.splice.apply( this.items, [ index, 0 ].concat( items ) );
}
@@ -3796,11 +4529,12 @@ OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
};
/**
- * Remove items.
+ * Remove the specified items from a group.
*
- * Items will be detached, not removed, so they can be used later.
+ * Removed items are detached (not removed) from the DOM so that they may be reused.
+ * To remove all items from a group, you may wish to use the #clearItems method instead.
*
- * @param {OO.ui.Element[]} items Items to remove
+ * @param {OO.ui.Element[]} items An array of items to remove
* @chainable
*/
OO.ui.GroupElement.prototype.removeItems = function ( items ) {
@@ -3808,7 +4542,7 @@ OO.ui.GroupElement.prototype.removeItems = function ( items ) {
// Remove specific items
for ( i = 0, len = items.length; i < len; i++ ) {
- item = items[i];
+ item = items[ i ];
index = $.inArray( item, this.items );
if ( index !== -1 ) {
if (
@@ -3816,8 +4550,8 @@ OO.ui.GroupElement.prototype.removeItems = function ( items ) {
!$.isEmptyObject( this.aggregateItemEvents )
) {
remove = {};
- if ( itemEvent in this.aggregateItemEvents ) {
- remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
+ if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
+ remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
}
item.disconnect( this, remove );
}
@@ -3831,9 +4565,10 @@ OO.ui.GroupElement.prototype.removeItems = function ( items ) {
};
/**
- * Clear all items.
+ * Clear all items from the group.
*
- * Items will be detached, not removed, so they can be used later.
+ * Cleared items are detached from the DOM, not removed, so that they may be reused.
+ * To remove only a subset of items from a group, use the #removeItems method.
*
* @chainable
*/
@@ -3842,14 +4577,14 @@ OO.ui.GroupElement.prototype.clearItems = function () {
// Remove all items
for ( i = 0, len = this.items.length; i < len; i++ ) {
- item = this.items[i];
+ item = this.items[ i ];
if (
item.connect && item.disconnect &&
!$.isEmptyObject( this.aggregateItemEvents )
) {
remove = {};
- if ( itemEvent in this.aggregateItemEvents ) {
- remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
+ if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
+ remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
}
item.disconnect( this, remove );
}
@@ -3862,26 +4597,450 @@ OO.ui.GroupElement.prototype.clearItems = function () {
};
/**
- * Element containing an icon.
+ * DraggableElement is a mixin class used to create elements that can be clicked
+ * and dragged by a mouse to a new position within a group. This class must be used
+ * in conjunction with OO.ui.DraggableGroupElement, which provides a container for
+ * the draggable elements.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ */
+OO.ui.DraggableElement = function OoUiDraggableElement() {
+ // Properties
+ this.index = null;
+
+ // Initialize and events
+ this.$element
+ .attr( 'draggable', true )
+ .addClass( 'oo-ui-draggableElement' )
+ .on( {
+ dragstart: this.onDragStart.bind( this ),
+ dragover: this.onDragOver.bind( this ),
+ dragend: this.onDragEnd.bind( this ),
+ drop: this.onDrop.bind( this )
+ } );
+};
+
+OO.initClass( OO.ui.DraggableElement );
+
+/* Events */
+
+/**
+ * @event dragstart
+ *
+ * A dragstart event is emitted when the user clicks and begins dragging an item.
+ * @param {OO.ui.DraggableElement} item The item the user has clicked and is dragging with the mouse.
+ */
+
+/**
+ * @event dragend
+ * A dragend event is emitted when the user drags an item and releases the mouse,
+ * thus terminating the drag operation.
+ */
+
+/**
+ * @event drop
+ * A drop event is emitted when the user drags an item and then releases the mouse button
+ * over a valid target.
+ */
+
+/* Static Properties */
+
+/**
+ * @inheritdoc OO.ui.ButtonElement
+ */
+OO.ui.DraggableElement.static.cancelButtonMouseDownEvents = false;
+
+/* Methods */
+
+/**
+ * Respond to dragstart event.
+ *
+ * @private
+ * @param {jQuery.Event} event jQuery event
+ * @fires dragstart
+ */
+OO.ui.DraggableElement.prototype.onDragStart = function ( e ) {
+ var dataTransfer = e.originalEvent.dataTransfer;
+ // Define drop effect
+ dataTransfer.dropEffect = 'none';
+ dataTransfer.effectAllowed = 'move';
+ // We must set up a dataTransfer data property or Firefox seems to
+ // ignore the fact the element is draggable.
+ try {
+ dataTransfer.setData( 'application-x/OOjs-UI-draggable', this.getIndex() );
+ } catch ( err ) {
+ // The above is only for firefox. No need to set a catch clause
+ // if it fails, move on.
+ }
+ // Add dragging class
+ this.$element.addClass( 'oo-ui-draggableElement-dragging' );
+ // Emit event
+ this.emit( 'dragstart', this );
+ return true;
+};
+
+/**
+ * Respond to dragend event.
*
- * Icons are graphics, about the size of normal text. They can be used to aid the user in locating
- * a control or convey information in a more space efficient way. Icons should rarely be used
- * without labels; such as in a toolbar where space is at a premium or within a context where the
- * meaning is very clear to the user.
+ * @private
+ * @fires dragend
+ */
+OO.ui.DraggableElement.prototype.onDragEnd = function () {
+ this.$element.removeClass( 'oo-ui-draggableElement-dragging' );
+ this.emit( 'dragend' );
+};
+
+/**
+ * Handle drop event.
+ *
+ * @private
+ * @param {jQuery.Event} event jQuery event
+ * @fires drop
+ */
+OO.ui.DraggableElement.prototype.onDrop = function ( e ) {
+ e.preventDefault();
+ this.emit( 'drop', e );
+};
+
+/**
+ * In order for drag/drop to work, the dragover event must
+ * return false and stop propogation.
+ *
+ * @private
+ */
+OO.ui.DraggableElement.prototype.onDragOver = function ( e ) {
+ e.preventDefault();
+};
+
+/**
+ * Set item index.
+ * Store it in the DOM so we can access from the widget drag event
+ *
+ * @private
+ * @param {number} Item index
+ */
+OO.ui.DraggableElement.prototype.setIndex = function ( index ) {
+ if ( this.index !== index ) {
+ this.index = index;
+ this.$element.data( 'index', index );
+ }
+};
+
+/**
+ * Get item index
+ *
+ * @private
+ * @return {number} Item index
+ */
+OO.ui.DraggableElement.prototype.getIndex = function () {
+ return this.index;
+};
+
+/**
+ * DraggableGroupElement is a mixin class used to create a group element to
+ * contain draggable elements, which are items that can be clicked and dragged by a mouse.
+ * The class is used with OO.ui.DraggableElement.
*
* @abstract
* @class
+ * @mixins OO.ui.GroupElement
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {jQuery} [$icon] Icon node, assigned to #$icon, omit to use a generated `<span>`
- * @cfg {Object|string} [icon=''] Symbolic icon name, or map of icon names keyed by language ID;
- * use the 'default' key to specify the icon to be used when there is no icon in the user's
- * language
- * @cfg {string} [iconTitle] Icon title text or a function that returns text
+ * @cfg {string} [orientation] Item orientation: 'horizontal' or 'vertical'. The orientation
+ * should match the layout of the items. Items displayed in a single row
+ * or in several rows should use horizontal orientation. The vertical orientation should only be
+ * used when the items are displayed in a single column. Defaults to 'vertical'
+ */
+OO.ui.DraggableGroupElement = function OoUiDraggableGroupElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.GroupElement.call( this, config );
+
+ // Properties
+ this.orientation = config.orientation || 'vertical';
+ this.dragItem = null;
+ this.itemDragOver = null;
+ this.itemKeys = {};
+ this.sideInsertion = '';
+
+ // Events
+ this.aggregate( {
+ dragstart: 'itemDragStart',
+ dragend: 'itemDragEnd',
+ drop: 'itemDrop'
+ } );
+ this.connect( this, {
+ itemDragStart: 'onItemDragStart',
+ itemDrop: 'onItemDrop',
+ itemDragEnd: 'onItemDragEnd'
+ } );
+ this.$element.on( {
+ dragover: $.proxy( this.onDragOver, this ),
+ dragleave: $.proxy( this.onDragLeave, this )
+ } );
+
+ // Initialize
+ if ( Array.isArray( config.items ) ) {
+ this.addItems( config.items );
+ }
+ this.$placeholder = $( '<div>' )
+ .addClass( 'oo-ui-draggableGroupElement-placeholder' );
+ this.$element
+ .addClass( 'oo-ui-draggableGroupElement' )
+ .append( this.$status )
+ .toggleClass( 'oo-ui-draggableGroupElement-horizontal', this.orientation === 'horizontal' )
+ .prepend( this.$placeholder );
+};
+
+/* Setup */
+OO.mixinClass( OO.ui.DraggableGroupElement, OO.ui.GroupElement );
+
+/* Events */
+
+/**
+ * A 'reorder' event is emitted when the order of items in the group changes.
+ *
+ * @event reorder
+ * @param {OO.ui.DraggableElement} item Reordered item
+ * @param {number} [newIndex] New index for the item
+ */
+
+/* Methods */
+
+/**
+ * Respond to item drag start event
+ *
+ * @private
+ * @param {OO.ui.DraggableElement} item Dragged item
+ */
+OO.ui.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {
+ var i, len;
+
+ // Map the index of each object
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ this.items[ i ].setIndex( i );
+ }
+
+ if ( this.orientation === 'horizontal' ) {
+ // Set the height of the indicator
+ this.$placeholder.css( {
+ height: item.$element.outerHeight(),
+ width: 2
+ } );
+ } else {
+ // Set the width of the indicator
+ this.$placeholder.css( {
+ height: 2,
+ width: item.$element.outerWidth()
+ } );
+ }
+ this.setDragItem( item );
+};
+
+/**
+ * Respond to item drag end event
+ *
+ * @private
+ */
+OO.ui.DraggableGroupElement.prototype.onItemDragEnd = function () {
+ this.unsetDragItem();
+ return false;
+};
+
+/**
+ * Handle drop event and switch the order of the items accordingly
+ *
+ * @private
+ * @param {OO.ui.DraggableElement} item Dropped item
+ * @fires reorder
+ */
+OO.ui.DraggableGroupElement.prototype.onItemDrop = function ( item ) {
+ var toIndex = item.getIndex();
+ // Check if the dropped item is from the current group
+ // TODO: Figure out a way to configure a list of legally droppable
+ // elements even if they are not yet in the list
+ if ( this.getDragItem() ) {
+ // If the insertion point is 'after', the insertion index
+ // is shifted to the right (or to the left in RTL, hence 'after')
+ if ( this.sideInsertion === 'after' ) {
+ toIndex++;
+ }
+ // Emit change event
+ this.emit( 'reorder', this.getDragItem(), toIndex );
+ }
+ this.unsetDragItem();
+ // Return false to prevent propogation
+ return false;
+};
+
+/**
+ * Handle dragleave event.
+ *
+ * @private
+ */
+OO.ui.DraggableGroupElement.prototype.onDragLeave = function () {
+ // This means the item was dragged outside the widget
+ this.$placeholder
+ .css( 'left', 0 )
+ .addClass( 'oo-ui-element-hidden' );
+};
+
+/**
+ * Respond to dragover event
+ *
+ * @private
+ * @param {jQuery.Event} event Event details
+ */
+OO.ui.DraggableGroupElement.prototype.onDragOver = function ( e ) {
+ var dragOverObj, $optionWidget, itemOffset, itemMidpoint, itemBoundingRect,
+ itemSize, cssOutput, dragPosition, itemIndex, itemPosition,
+ clientX = e.originalEvent.clientX,
+ clientY = e.originalEvent.clientY;
+
+ // Get the OptionWidget item we are dragging over
+ dragOverObj = this.getElementDocument().elementFromPoint( clientX, clientY );
+ $optionWidget = $( dragOverObj ).closest( '.oo-ui-draggableElement' );
+ if ( $optionWidget[ 0 ] ) {
+ itemOffset = $optionWidget.offset();
+ itemBoundingRect = $optionWidget[ 0 ].getBoundingClientRect();
+ itemPosition = $optionWidget.position();
+ itemIndex = $optionWidget.data( 'index' );
+ }
+
+ if (
+ itemOffset &&
+ this.isDragging() &&
+ itemIndex !== this.getDragItem().getIndex()
+ ) {
+ if ( this.orientation === 'horizontal' ) {
+ // Calculate where the mouse is relative to the item width
+ itemSize = itemBoundingRect.width;
+ itemMidpoint = itemBoundingRect.left + itemSize / 2;
+ dragPosition = clientX;
+ // Which side of the item we hover over will dictate
+ // where the placeholder will appear, on the left or
+ // on the right
+ cssOutput = {
+ left: dragPosition < itemMidpoint ? itemPosition.left : itemPosition.left + itemSize,
+ top: itemPosition.top
+ };
+ } else {
+ // Calculate where the mouse is relative to the item height
+ itemSize = itemBoundingRect.height;
+ itemMidpoint = itemBoundingRect.top + itemSize / 2;
+ dragPosition = clientY;
+ // Which side of the item we hover over will dictate
+ // where the placeholder will appear, on the top or
+ // on the bottom
+ cssOutput = {
+ top: dragPosition < itemMidpoint ? itemPosition.top : itemPosition.top + itemSize,
+ left: itemPosition.left
+ };
+ }
+ // Store whether we are before or after an item to rearrange
+ // For horizontal layout, we need to account for RTL, as this is flipped
+ if ( this.orientation === 'horizontal' && this.$element.css( 'direction' ) === 'rtl' ) {
+ this.sideInsertion = dragPosition < itemMidpoint ? 'after' : 'before';
+ } else {
+ this.sideInsertion = dragPosition < itemMidpoint ? 'before' : 'after';
+ }
+ // Add drop indicator between objects
+ this.$placeholder
+ .css( cssOutput )
+ .removeClass( 'oo-ui-element-hidden' );
+ } else {
+ // This means the item was dragged outside the widget
+ this.$placeholder
+ .css( 'left', 0 )
+ .addClass( 'oo-ui-element-hidden' );
+ }
+ // Prevent default
+ e.preventDefault();
+};
+
+/**
+ * Set a dragged item
+ *
+ * @param {OO.ui.DraggableElement} item Dragged item
+ */
+OO.ui.DraggableGroupElement.prototype.setDragItem = function ( item ) {
+ this.dragItem = item;
+};
+
+/**
+ * Unset the current dragged item
+ */
+OO.ui.DraggableGroupElement.prototype.unsetDragItem = function () {
+ this.dragItem = null;
+ this.itemDragOver = null;
+ this.$placeholder.addClass( 'oo-ui-element-hidden' );
+ this.sideInsertion = '';
+};
+
+/**
+ * Get the item that is currently being dragged.
+ *
+ * @return {OO.ui.DraggableElement|null} The currently dragged item, or `null` if no item is being dragged
+ */
+OO.ui.DraggableGroupElement.prototype.getDragItem = function () {
+ return this.dragItem;
+};
+
+/**
+ * Check if an item in the group is currently being dragged.
+ *
+ * @return {Boolean} Item is being dragged
+ */
+OO.ui.DraggableGroupElement.prototype.isDragging = function () {
+ return this.getDragItem() !== null;
+};
+
+/**
+ * IconElement is often mixed into other classes to generate an icon.
+ * Icons are graphics, about the size of normal text. They are used to aid the user
+ * in locating a control or to convey information in a space-efficient way. See the
+ * [OOjs UI documentation on MediaWiki] [1] for a list of icons
+ * included in the library.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$icon] The icon element created by the class. If this configuration is omitted,
+ * the icon element will use a generated `<span>`. To use a different HTML tag, or to specify that
+ * the icon element be set to an existing icon instead of the one generated by this class, set a
+ * value using a jQuery selection. For example:
+ *
+ * // Use a <div> tag instead of a <span>
+ * $icon: $("<div>")
+ * // Use an existing icon element instead of the one generated by the class
+ * $icon: this.$element
+ * // Use an icon element from a child widget
+ * $icon: this.childwidget.$element
+ * @cfg {Object|string} [icon=''] The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of
+ * symbolic names. A map is used for i18n purposes and contains a `default` icon
+ * name and additional names keyed by language code. The `default` name is used when no icon is keyed
+ * by the user's language.
+ *
+ * Example of an i18n map:
+ *
+ * { default: 'bold-a', en: 'bold-b', de: 'bold-f' }
+ * See the [OOjs UI documentation on MediaWiki] [2] for a list of icons included in the library.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ * @cfg {string|Function} [iconTitle] A text string used as the icon title, or a function that returns title
+ * text. The icon title is displayed when users move the mouse over the icon.
*/
OO.ui.IconElement = function OoUiIconElement( config ) {
- // Config intialization
+ // Configuration initialization
config = config || {};
// Properties
@@ -3892,7 +5051,7 @@ OO.ui.IconElement = function OoUiIconElement( config ) {
// Initialization
this.setIcon( config.icon || this.constructor.static.icon );
this.setIconTitle( config.iconTitle || this.constructor.static.iconTitle );
- this.setIconElement( config.$icon || this.$( '<span>' ) );
+ this.setIconElement( config.$icon || $( '<span>' ) );
};
/* Setup */
@@ -3902,40 +5061,41 @@ OO.initClass( OO.ui.IconElement );
/* Static Properties */
/**
- * Icon.
- *
- * Value should be the unique portion of an icon CSS class name, such as 'up' for 'oo-ui-icon-up'.
+ * The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names. A map is used
+ * for i18n purposes and contains a `default` icon name and additional names keyed by
+ * language code. The `default` name is used when no icon is keyed by the user's language.
*
- * For i18n purposes, this property can be an object containing a `default` icon name property and
- * additional icon names keyed by language code.
+ * Example of an i18n map:
*
- * Example of i18n icon definition:
* { default: 'bold-a', en: 'bold-b', de: 'bold-f' }
*
+ * Note: the static property will be overridden if the #icon configuration is used.
+ *
* @static
* @inheritable
- * @property {Object|string} Symbolic icon name, or map of icon names keyed by language ID;
- * use the 'default' key to specify the icon to be used when there is no icon in the user's
- * language
+ * @property {Object|string}
*/
OO.ui.IconElement.static.icon = null;
/**
- * Icon title.
+ * The icon title, displayed when users move the mouse over the icon. The value can be text, a
+ * function that returns title text, or `null` for no title.
+ *
+ * The static property will be overridden if the #iconTitle configuration is used.
*
* @static
* @inheritable
- * @property {string|Function|null} Icon title text, a function that returns text or null for no
- * icon title
+ * @property {string|Function|null}
*/
OO.ui.IconElement.static.iconTitle = null;
/* Methods */
/**
- * Set the icon element.
- *
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * Set the icon element. This method is used to retarget an icon mixin so that its functionality
+ * applies to the specified icon element instead of the one created by the class. If an icon
+ * element is already set, the mixin’s effect on that element is removed. Generated CSS classes
+ * and mixin methods will no longer affect the element.
*
* @param {jQuery} $icon Element to use as icon
*/
@@ -3955,11 +5115,12 @@ OO.ui.IconElement.prototype.setIconElement = function ( $icon ) {
};
/**
- * Set icon.
+ * Set icon by symbolic name (e.g., ‘remove’ or ‘menu’). Use `null` to remove an icon.
+ * The icon parameter can also be set to a map of icon names. See the #icon config setting
+ * for an example.
*
- * @param {Object|string|null} icon Symbolic icon name, or map of icon names keyed by language ID;
- * use the 'default' key to specify the icon to be used when there is no icon in the user's
- * language, use null to remove icon
+ * @param {Object|string|null} icon A symbolic icon name, a {@link #icon map of icon names} keyed
+ * by language code, or `null` to remove the icon.
* @chainable
*/
OO.ui.IconElement.prototype.setIcon = function ( icon ) {
@@ -3979,15 +5140,16 @@ OO.ui.IconElement.prototype.setIcon = function ( icon ) {
}
this.$element.toggleClass( 'oo-ui-iconElement', !!this.icon );
+ this.updateThemeClasses();
return this;
};
/**
- * Set icon title.
+ * Set the icon title. Use `null` to remove the title.
*
- * @param {string|Function|null} icon Icon title text, a function that returns text or null
- * for no icon title
+ * @param {string|Function|null} iconTitle A text string used as the icon title,
+ * a function that returns title text, or `null` for no title.
* @chainable
*/
OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
@@ -4010,34 +5172,54 @@ OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
};
/**
- * Get icon.
+ * Get the symbolic name of the icon.
*
- * @return {string} Icon
+ * @return {string} Icon name
*/
OO.ui.IconElement.prototype.getIcon = function () {
return this.icon;
};
/**
- * Element containing an indicator.
+ * Get the icon title. The title text is displayed when a user moves the mouse over the icon.
*
- * Indicators are graphics, smaller than normal text. They can be used to describe unique status or
- * behavior. Indicators should only be used in exceptional cases; such as a button that opens a menu
- * instead of performing an action directly, or an item in a list which has errors that need to be
- * resolved.
+ * @return {string} Icon title text
+ */
+OO.ui.IconElement.prototype.getIconTitle = function () {
+ return this.iconTitle;
+};
+
+/**
+ * IndicatorElement is often mixed into other classes to generate an indicator.
+ * Indicators are small graphics that are generally used in two ways:
+ *
+ * - To draw attention to the status of an item. For example, an indicator might be
+ * used to show that an item in a list has errors that need to be resolved.
+ * - To clarify the function of a control that acts in an exceptional way (a button
+ * that opens a menu instead of performing an action directly, for example).
+ *
+ * For a list of indicators included in the library, please see the
+ * [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
*
* @abstract
* @class
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {jQuery} [$indicator] Indicator node, assigned to #$indicator, omit to use a generated
- * `<span>`
- * @cfg {string} [indicator] Symbolic indicator name
- * @cfg {string} [indicatorTitle] Indicator title text or a function that returns text
+ * @cfg {jQuery} [$indicator] The indicator element created by the class. If this
+ * configuration is omitted, the indicator element will use a generated `<span>`.
+ * @cfg {string} [indicator] Symbolic name of the indicator (e.g., ‘alert’ or ‘down’).
+ * See the [OOjs UI documentation on MediaWiki][2] for a list of indicators included
+ * in the library.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
+ * @cfg {string|Function} [indicatorTitle] A text string used as the indicator title,
+ * or a function that returns title text. The indicator title is displayed when users move
+ * the mouse over the indicator.
*/
OO.ui.IndicatorElement = function OoUiIndicatorElement( config ) {
- // Config intialization
+ // Configuration initialization
config = config || {};
// Properties
@@ -4048,7 +5230,7 @@ OO.ui.IndicatorElement = function OoUiIndicatorElement( config ) {
// Initialization
this.setIndicator( config.indicator || this.constructor.static.indicator );
this.setIndicatorTitle( config.indicatorTitle || this.constructor.static.indicatorTitle );
- this.setIndicatorElement( config.$indicator || this.$( '<span>' ) );
+ this.setIndicatorElement( config.$indicator || $( '<span>' ) );
};
/* Setup */
@@ -4058,21 +5240,22 @@ OO.initClass( OO.ui.IndicatorElement );
/* Static Properties */
/**
- * indicator.
+ * Symbolic name of the indicator (e.g., ‘alert’ or ‘down’).
+ * The static property will be overridden if the #indicator configuration is used.
*
* @static
* @inheritable
- * @property {string|null} Symbolic indicator name or null for no indicator
+ * @property {string|null}
*/
OO.ui.IndicatorElement.static.indicator = null;
/**
- * Indicator title.
+ * A text string used as the indicator title, a function that returns title text, or `null`
+ * for no title. The static property will be overridden if the #indicatorTitle configuration is used.
*
* @static
* @inheritable
- * @property {string|Function|null} Indicator title text, a function that returns text or null for no
- * indicator title
+ * @property {string|Function|null}
*/
OO.ui.IndicatorElement.static.indicatorTitle = null;
@@ -4096,14 +5279,14 @@ OO.ui.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {
.addClass( 'oo-ui-indicatorElement-indicator' )
.toggleClass( 'oo-ui-indicator-' + this.indicator, !!this.indicator );
if ( this.indicatorTitle !== null ) {
- this.$indicatorTitle.attr( 'title', this.indicatorTitle );
+ this.$indicator.attr( 'title', this.indicatorTitle );
}
};
/**
- * Set indicator.
+ * Set the indicator by its symbolic name: ‘alert’, ‘down’, ‘next’, ‘previous’, ‘required’, ‘up’. Use `null` to remove the indicator.
*
- * @param {string|null} indicator Symbolic name of indicator to use or null for no indicator
+ * @param {string|null} indicator Symbolic name of indicator, or `null` for no indicator
* @chainable
*/
OO.ui.IndicatorElement.prototype.setIndicator = function ( indicator ) {
@@ -4122,15 +5305,18 @@ OO.ui.IndicatorElement.prototype.setIndicator = function ( indicator ) {
}
this.$element.toggleClass( 'oo-ui-indicatorElement', !!this.indicator );
+ this.updateThemeClasses();
return this;
};
/**
- * Set indicator title.
+ * Set the indicator title.
+ *
+ * The title is displayed when a user moves the mouse over the indicator.
*
- * @param {string|Function|null} indicator Indicator title text, a function that returns text or
- * null for no indicator title
+ * @param {string|Function|null} indicator Indicator title text, a function that returns text, or
+ * `null` for no indicator title
* @chainable
*/
OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
@@ -4153,16 +5339,18 @@ OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle )
};
/**
- * Get indicator.
+ * Get the symbolic name of the indicator (e.g., ‘alert’ or ‘down’).
*
- * @return {string} title Symbolic name of indicator
+ * @return {string} Symbolic name of indicator
*/
OO.ui.IndicatorElement.prototype.getIndicator = function () {
return this.indicator;
};
/**
- * Get indicator title.
+ * Get the indicator title.
+ *
+ * The title is displayed when a user moves the mouse over the indicator.
*
* @return {string} Indicator title text
*/
@@ -4171,19 +5359,28 @@ OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
};
/**
- * Element containing a label.
+ * LabelElement is often mixed into other classes to generate a label, which
+ * helps identify the function of an interface element.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels
*
* @abstract
* @class
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {jQuery} [$label] Label node, assigned to #$label, omit to use a generated `<span>`
- * @cfg {jQuery|string|Function} [label] Label nodes, text or a function that returns nodes or text
- * @cfg {boolean} [autoFitLabel=true] Whether to fit the label or not.
+ * @cfg {jQuery} [$label] The label element created by the class. If this
+ * configuration is omitted, the label element will use a generated `<span>`.
+ * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [label] The label text. The label can be specified
+ * as a plaintext string, a jQuery selection of elements, or a function that will produce a string
+ * in the future. See the [OOjs UI documentation on MediaWiki] [2] for examples.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels
+ * @cfg {boolean} [autoFitLabel=true] Fit the label to the width of the parent element.
+ * The label will be truncated to fit if necessary.
*/
OO.ui.LabelElement = function OoUiLabelElement( config ) {
- // Config intialization
+ // Configuration initialization
config = config || {};
// Properties
@@ -4193,22 +5390,30 @@ OO.ui.LabelElement = function OoUiLabelElement( config ) {
// Initialization
this.setLabel( config.label || this.constructor.static.label );
- this.setLabelElement( config.$label || this.$( '<span>' ) );
+ this.setLabelElement( config.$label || $( '<span>' ) );
};
/* Setup */
OO.initClass( OO.ui.LabelElement );
+/* Events */
+
+/**
+ * @event labelChange
+ * @param {string} value
+ */
+
/* Static Properties */
/**
- * Label.
+ * The label text. The label can be specified as a plaintext string, a function that will
+ * produce a string in the future, or `null` for no label. The static value will
+ * be overridden if a label is specified with the #label config option.
*
* @static
* @inheritable
- * @property {string|Function|null} Label text; a function that returns nodes or text; or null for
- * no label
+ * @property {string|Function|null}
*/
OO.ui.LabelElement.static.label = null;
@@ -4234,32 +5439,33 @@ OO.ui.LabelElement.prototype.setLabelElement = function ( $label ) {
* Set the label.
*
* An empty string will result in the label being hidden. A string containing only whitespace will
- * be converted to a single &nbsp;
+ * be converted to a single `&nbsp;`.
*
- * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ * @param {jQuery|string|OO.ui.HtmlSnippet|Function|null} label Label nodes; text; a function that returns nodes or
* text; or null for no label
* @chainable
*/
OO.ui.LabelElement.prototype.setLabel = function ( label ) {
label = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label;
- label = ( typeof label === 'string' && label.length ) || label instanceof jQuery ? label : null;
+ label = ( ( typeof label === 'string' && label.length ) || label instanceof jQuery || label instanceof OO.ui.HtmlSnippet ) ? label : null;
+
+ this.$element.toggleClass( 'oo-ui-labelElement', !!label );
if ( this.label !== label ) {
if ( this.$label ) {
this.setLabelContent( label );
}
this.label = label;
+ this.emit( 'labelChange' );
}
- this.$element.toggleClass( 'oo-ui-labelElement', !!this.label );
-
return this;
};
/**
* Get the label.
*
- * @return {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ * @return {jQuery|string|Function|null} Label nodes; text; a function that returns nodes or
* text; or null for no label
*/
OO.ui.LabelElement.prototype.getLabel = function () {
@@ -4296,16 +5502,373 @@ OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
} else {
this.$label.text( label );
}
+ } else if ( label instanceof OO.ui.HtmlSnippet ) {
+ this.$label.html( label.toString() );
} else if ( label instanceof jQuery ) {
this.$label.empty().append( label );
} else {
this.$label.empty();
}
- this.$label.css( 'display', !label ? 'none' : '' );
};
/**
- * Element containing an OO.ui.PopupWidget object.
+ * LookupElement is a mixin that creates a {@link OO.ui.TextInputMenuSelectWidget menu} of suggested values for
+ * a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on the characters the user types
+ * into the text input field and, in general, the menu is only displayed when the user types. If a suggested value is chosen
+ * from the lookup menu, that value becomes the value of the input field.
+ *
+ * Note that a new menu of suggested items is displayed when a value is chosen from the lookup menu. If this is
+ * not the desired behavior, disable lookup menus with the #setLookupsDisabled method, then set the value, then
+ * re-enable lookups.
+ *
+ * See the [OOjs UI demos][1] for an example.
+ *
+ * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/index.html#widgets-apex-vector-ltr
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$overlay] Overlay for the lookup menu; defaults to relative positioning
+ * @cfg {jQuery} [$container=this.$element] The container element. The lookup menu is rendered beneath the specified element.
+ * @cfg {boolean} [allowSuggestionsWhenEmpty=false] Request and display a lookup menu when the text input is empty.
+ * By default, the lookup menu is not generated and displayed until the user begins to type.
+ */
+OO.ui.LookupElement = function OoUiLookupElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$overlay = config.$overlay || this.$element;
+ this.lookupMenu = new OO.ui.TextInputMenuSelectWidget( this, {
+ widget: this,
+ input: this,
+ $container: config.$container
+ } );
+
+ this.allowSuggestionsWhenEmpty = config.allowSuggestionsWhenEmpty || false;
+
+ this.lookupCache = {};
+ this.lookupQuery = null;
+ this.lookupRequest = null;
+ this.lookupsDisabled = false;
+ this.lookupInputFocused = false;
+
+ // Events
+ this.$input.on( {
+ focus: this.onLookupInputFocus.bind( this ),
+ blur: this.onLookupInputBlur.bind( this ),
+ mousedown: this.onLookupInputMouseDown.bind( this )
+ } );
+ this.connect( this, { change: 'onLookupInputChange' } );
+ this.lookupMenu.connect( this, {
+ toggle: 'onLookupMenuToggle',
+ choose: 'onLookupMenuItemChoose'
+ } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-lookupElement' );
+ this.lookupMenu.$element.addClass( 'oo-ui-lookupElement-menu' );
+ this.$overlay.append( this.lookupMenu.$element );
+};
+
+/* Methods */
+
+/**
+ * Handle input focus event.
+ *
+ * @protected
+ * @param {jQuery.Event} e Input focus event
+ */
+OO.ui.LookupElement.prototype.onLookupInputFocus = function () {
+ this.lookupInputFocused = true;
+ this.populateLookupMenu();
+};
+
+/**
+ * Handle input blur event.
+ *
+ * @protected
+ * @param {jQuery.Event} e Input blur event
+ */
+OO.ui.LookupElement.prototype.onLookupInputBlur = function () {
+ this.closeLookupMenu();
+ this.lookupInputFocused = false;
+};
+
+/**
+ * Handle input mouse down event.
+ *
+ * @protected
+ * @param {jQuery.Event} e Input mouse down event
+ */
+OO.ui.LookupElement.prototype.onLookupInputMouseDown = function () {
+ // Only open the menu if the input was already focused.
+ // This way we allow the user to open the menu again after closing it with Esc
+ // by clicking in the input. Opening (and populating) the menu when initially
+ // clicking into the input is handled by the focus handler.
+ if ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) {
+ this.populateLookupMenu();
+ }
+};
+
+/**
+ * Handle input change event.
+ *
+ * @protected
+ * @param {string} value New input value
+ */
+OO.ui.LookupElement.prototype.onLookupInputChange = function () {
+ if ( this.lookupInputFocused ) {
+ this.populateLookupMenu();
+ }
+};
+
+/**
+ * Handle the lookup menu being shown/hidden.
+ *
+ * @protected
+ * @param {boolean} visible Whether the lookup menu is now visible.
+ */
+OO.ui.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {
+ if ( !visible ) {
+ // When the menu is hidden, abort any active request and clear the menu.
+ // This has to be done here in addition to closeLookupMenu(), because
+ // MenuSelectWidget will close itself when the user presses Esc.
+ this.abortLookupRequest();
+ this.lookupMenu.clearItems();
+ }
+};
+
+/**
+ * Handle menu item 'choose' event, updating the text input value to the value of the clicked item.
+ *
+ * @protected
+ * @param {OO.ui.MenuOptionWidget} item Selected item
+ */
+OO.ui.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {
+ this.setValue( item.getData() );
+};
+
+/**
+ * Get lookup menu.
+ *
+ * @private
+ * @return {OO.ui.TextInputMenuSelectWidget}
+ */
+OO.ui.LookupElement.prototype.getLookupMenu = function () {
+ return this.lookupMenu;
+};
+
+/**
+ * Disable or re-enable lookups.
+ *
+ * When lookups are disabled, calls to #populateLookupMenu will be ignored.
+ *
+ * @param {boolean} disabled Disable lookups
+ */
+OO.ui.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {
+ this.lookupsDisabled = !!disabled;
+};
+
+/**
+ * Open the menu. If there are no entries in the menu, this does nothing.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.openLookupMenu = function () {
+ if ( !this.lookupMenu.isEmpty() ) {
+ this.lookupMenu.toggle( true );
+ }
+ return this;
+};
+
+/**
+ * Close the menu, empty it, and abort any pending request.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.closeLookupMenu = function () {
+ this.lookupMenu.toggle( false );
+ this.abortLookupRequest();
+ this.lookupMenu.clearItems();
+ return this;
+};
+
+/**
+ * Request menu items based on the input's current value, and when they arrive,
+ * populate the menu with these items and show the menu.
+ *
+ * If lookups have been disabled with #setLookupsDisabled, this function does nothing.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.populateLookupMenu = function () {
+ var widget = this,
+ value = this.getValue();
+
+ if ( this.lookupsDisabled ) {
+ return;
+ }
+
+ // If the input is empty, clear the menu, unless suggestions when empty are allowed.
+ if ( !this.allowSuggestionsWhenEmpty && value === '' ) {
+ this.closeLookupMenu();
+ // Skip population if there is already a request pending for the current value
+ } else if ( value !== this.lookupQuery ) {
+ this.getLookupMenuItems()
+ .done( function ( items ) {
+ widget.lookupMenu.clearItems();
+ if ( items.length ) {
+ widget.lookupMenu
+ .addItems( items )
+ .toggle( true );
+ widget.initializeLookupMenuSelection();
+ } else {
+ widget.lookupMenu.toggle( false );
+ }
+ } )
+ .fail( function () {
+ widget.lookupMenu.clearItems();
+ } );
+ }
+
+ return this;
+};
+
+/**
+ * Highlight the first selectable item in the menu.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.initializeLookupMenuSelection = function () {
+ if ( !this.lookupMenu.getSelectedItem() ) {
+ this.lookupMenu.highlightItem( this.lookupMenu.getFirstSelectableItem() );
+ }
+};
+
+/**
+ * Get lookup menu items for the current query.
+ *
+ * @private
+ * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument of
+ * the done event. If the request was aborted to make way for a subsequent request, this promise
+ * will not be rejected: it will remain pending forever.
+ */
+OO.ui.LookupElement.prototype.getLookupMenuItems = function () {
+ var widget = this,
+ value = this.getValue(),
+ deferred = $.Deferred(),
+ ourRequest;
+
+ this.abortLookupRequest();
+ if ( Object.prototype.hasOwnProperty.call( this.lookupCache, value ) ) {
+ deferred.resolve( this.getLookupMenuOptionsFromData( this.lookupCache[ value ] ) );
+ } else {
+ this.pushPending();
+ this.lookupQuery = value;
+ ourRequest = this.lookupRequest = this.getLookupRequest();
+ ourRequest
+ .always( function () {
+ // We need to pop pending even if this is an old request, otherwise
+ // the widget will remain pending forever.
+ // TODO: this assumes that an aborted request will fail or succeed soon after
+ // being aborted, or at least eventually. It would be nice if we could popPending()
+ // at abort time, but only if we knew that we hadn't already called popPending()
+ // for that request.
+ widget.popPending();
+ } )
+ .done( function ( response ) {
+ // If this is an old request (and aborting it somehow caused it to still succeed),
+ // ignore its success completely
+ if ( ourRequest === widget.lookupRequest ) {
+ widget.lookupQuery = null;
+ widget.lookupRequest = null;
+ widget.lookupCache[ value ] = widget.getLookupCacheDataFromResponse( response );
+ deferred.resolve( widget.getLookupMenuOptionsFromData( widget.lookupCache[ value ] ) );
+ }
+ } )
+ .fail( function () {
+ // If this is an old request (or a request failing because it's being aborted),
+ // ignore its failure completely
+ if ( ourRequest === widget.lookupRequest ) {
+ widget.lookupQuery = null;
+ widget.lookupRequest = null;
+ deferred.reject();
+ }
+ } );
+ }
+ return deferred.promise();
+};
+
+/**
+ * Abort the currently pending lookup request, if any.
+ *
+ * @private
+ */
+OO.ui.LookupElement.prototype.abortLookupRequest = function () {
+ var oldRequest = this.lookupRequest;
+ if ( oldRequest ) {
+ // First unset this.lookupRequest to the fail handler will notice
+ // that the request is no longer current
+ this.lookupRequest = null;
+ this.lookupQuery = null;
+ oldRequest.abort();
+ }
+};
+
+/**
+ * Get a new request object of the current lookup query value.
+ *
+ * @protected
+ * @abstract
+ * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method
+ */
+OO.ui.LookupElement.prototype.getLookupRequest = function () {
+ // Stub, implemented in subclass
+ return null;
+};
+
+/**
+ * Pre-process data returned by the request from #getLookupRequest.
+ *
+ * The return value of this function will be cached, and any further queries for the given value
+ * will use the cache rather than doing API requests.
+ *
+ * @protected
+ * @abstract
+ * @param {Mixed} response Response from server
+ * @return {Mixed} Cached result data
+ */
+OO.ui.LookupElement.prototype.getLookupCacheDataFromResponse = function () {
+ // Stub, implemented in subclass
+ return [];
+};
+
+/**
+ * Get a list of menu option widgets from the (possibly cached) data returned by
+ * #getLookupCacheDataFromResponse.
+ *
+ * @protected
+ * @abstract
+ * @param {Mixed} data Cached result data, usually an array
+ * @return {OO.ui.MenuOptionWidget[]} Menu items
+ */
+OO.ui.LookupElement.prototype.getLookupMenuOptionsFromData = function () {
+ // Stub, implemented in subclass
+ return [];
+};
+
+/**
+ * PopupElement is mixed into other classes to generate a {@link OO.ui.PopupWidget popup widget}.
+ * A popup is a container for content. It is overlaid and positioned absolutely. By default, each
+ * popup has an anchor, which is an arrow-like protrusion that points toward the popup’s origin.
+ * See {@link OO.ui.PopupWidget PopupWidget} for an example.
*
* @abstract
* @class
@@ -4313,7 +5876,7 @@ OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
* @constructor
* @param {Object} [config] Configuration options
* @cfg {Object} [popup] Configuration to pass to popup
- * @cfg {boolean} [autoClose=true] Popup auto-closes when it loses focus
+ * @cfg {boolean} [popup.autoClose=true] Popup auto-closes when it loses focus
*/
OO.ui.PopupElement = function OoUiPopupElement( config ) {
// Configuration initialization
@@ -4323,7 +5886,7 @@ OO.ui.PopupElement = function OoUiPopupElement( config ) {
this.popup = new OO.ui.PopupWidget( $.extend(
{ autoClose: true },
config.popup,
- { $: this.$, $autoCloseIgnore: this.$element }
+ { $autoCloseIgnore: this.$element }
) );
};
@@ -4339,21 +5902,55 @@ OO.ui.PopupElement.prototype.getPopup = function () {
};
/**
- * Element with named flags that can be added, removed, listed and checked.
+ * The FlaggedElement class is an attribute mixin, meaning that it is used to add
+ * additional functionality to an element created by another class. The class provides
+ * a ‘flags’ property assigned the name (or an array of names) of styling flags,
+ * which are used to customize the look and feel of a widget to better describe its
+ * importance and functionality.
+ *
+ * The library currently contains the following styling flags for general use:
+ *
+ * - **progressive**: Progressive styling is applied to convey that the widget will move the user forward in a process.
+ * - **destructive**: Destructive styling is applied to convey that the widget will remove something.
+ * - **constructive**: Constructive styling is applied to convey that the widget will create something.
+ *
+ * The flags affect the appearance of the buttons:
+ *
+ * @example
+ * // FlaggedElement is mixed into ButtonWidget to provide styling flags
+ * var button1 = new OO.ui.ButtonWidget( {
+ * label: 'Constructive',
+ * flags: 'constructive'
+ * } );
+ * var button2 = new OO.ui.ButtonWidget( {
+ * label: 'Destructive',
+ * flags: 'destructive'
+ * } );
+ * var button3 = new OO.ui.ButtonWidget( {
+ * label: 'Progressive',
+ * flags: 'progressive'
+ * } );
+ * $( 'body' ).append( button1.$element, button2.$element, button3.$element );
*
- * A flag, when set, adds a CSS class on the `$element` by combining `oo-ui-flaggedElement-` with
- * the flag name. Flags are primarily useful for styling.
+ * {@link OO.ui.ActionWidget ActionWidgets}, which are a special kind of button that execute an action, use these flags: **primary** and **safe**.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged
*
* @abstract
* @class
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {string[]} [flags=[]] Styling flags, e.g. 'primary', 'destructive' or 'constructive'
- * @cfg {jQuery} [$flagged] Flagged node, assigned to #$flagged, omit to use #$element
+ * @cfg {string|string[]} [flags] The name or names of the flags (e.g., 'constructive' or 'primary') to apply.
+ * Please see the [OOjs UI documentation on MediaWiki] [2] for more information about available flags.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged
+ * @cfg {jQuery} [$flagged] The flagged element. By default,
+ * the flagged functionality is applied to the element created by the class ($element).
+ * If a different element is specified, the flagged functionality will be applied to it instead.
*/
OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
- // Config initialization
+ // Configuration initialization
config = config || {};
// Properties
@@ -4369,8 +5966,12 @@ OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
/**
* @event flag
- * @param {Object.<string,boolean>} changes Object keyed by flag name containing boolean
- * added/removed properties
+ * A flag event is emitted when the #clearFlags or #setFlags methods are used. The `changes`
+ * parameter contains the name of each modified flag and indicates whether it was
+ * added or removed.
+ *
+ * @param {Object.<string,boolean>} changes Object keyed by flag name. A Boolean `true` indicates
+ * that the flag was added, `false` that the flag was removed.
*/
/* Methods */
@@ -4378,9 +5979,10 @@ OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
/**
* Set the flagged element.
*
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * This method is used to retarget a flagged mixin so that its functionality applies to the specified element.
+ * If an element is already set, the method will remove the mixin’s effect on that element.
*
- * @param {jQuery} $flagged Element to add flags to
+ * @param {jQuery} $flagged Element that should be flagged
*/
OO.ui.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
var classNames = Object.keys( this.flags ).map( function ( flag ) {
@@ -4395,10 +5997,10 @@ OO.ui.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
};
/**
- * Check if a flag is set.
+ * Check if the specified flag is set.
*
* @param {string} flag Name of flag
- * @return {boolean} Has flag
+ * @return {boolean} The flag is set
*/
OO.ui.FlaggedElement.prototype.hasFlag = function ( flag ) {
return flag in this.flags;
@@ -4407,7 +6009,7 @@ OO.ui.FlaggedElement.prototype.hasFlag = function ( flag ) {
/**
* Get the names of all flags set.
*
- * @return {string[]} flags Flag names
+ * @return {string[]} Flag names
*/
OO.ui.FlaggedElement.prototype.getFlags = function () {
return Object.keys( this.flags );
@@ -4427,8 +6029,8 @@ OO.ui.FlaggedElement.prototype.clearFlags = function () {
for ( flag in this.flags ) {
className = classPrefix + flag;
- changes[flag] = false;
- delete this.flags[flag];
+ changes[ flag ] = false;
+ delete this.flags[ flag ];
remove.push( className );
}
@@ -4436,6 +6038,7 @@ OO.ui.FlaggedElement.prototype.clearFlags = function () {
this.$flagged.removeClass( remove.join( ' ' ) );
}
+ this.updateThemeClasses();
this.emit( 'flag', changes );
return this;
@@ -4444,8 +6047,9 @@ OO.ui.FlaggedElement.prototype.clearFlags = function () {
/**
* Add one or more flags.
*
- * @param {string|string[]|Object.<string, boolean>} flags One or more flags to add, or an object
- * keyed by flag name containing boolean set/remove instructions.
+ * @param {string|string[]|Object.<string, boolean>} flags A flag name, an array of flag names,
+ * or an object keyed by flag name with a boolean value that indicates whether the flag should
+ * be added (`true`) or removed (`false`).
* @chainable
* @fires flag
*/
@@ -4459,36 +6063,36 @@ OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
if ( typeof flags === 'string' ) {
className = classPrefix + flags;
// Set
- if ( !this.flags[flags] ) {
- this.flags[flags] = true;
+ if ( !this.flags[ flags ] ) {
+ this.flags[ flags ] = true;
add.push( className );
}
- } else if ( $.isArray( flags ) ) {
+ } else if ( Array.isArray( flags ) ) {
for ( i = 0, len = flags.length; i < len; i++ ) {
- flag = flags[i];
+ flag = flags[ i ];
className = classPrefix + flag;
// Set
- if ( !this.flags[flag] ) {
- changes[flag] = true;
- this.flags[flag] = true;
+ if ( !this.flags[ flag ] ) {
+ changes[ flag ] = true;
+ this.flags[ flag ] = true;
add.push( className );
}
}
} else if ( OO.isPlainObject( flags ) ) {
for ( flag in flags ) {
className = classPrefix + flag;
- if ( flags[flag] ) {
+ if ( flags[ flag ] ) {
// Set
- if ( !this.flags[flag] ) {
- changes[flag] = true;
- this.flags[flag] = true;
+ if ( !this.flags[ flag ] ) {
+ changes[ flag ] = true;
+ this.flags[ flag ] = true;
add.push( className );
}
} else {
// Remove
- if ( this.flags[flag] ) {
- changes[flag] = false;
- delete this.flags[flag];
+ if ( this.flags[ flag ] ) {
+ changes[ flag ] = false;
+ delete this.flags[ flag ];
remove.push( className );
}
}
@@ -4501,27 +6105,39 @@ OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
.removeClass( remove.join( ' ' ) );
}
+ this.updateThemeClasses();
this.emit( 'flag', changes );
return this;
};
/**
- * Element with a title.
+ * TitledElement is mixed into other classes to provide a `title` attribute.
+ * Titles are rendered by the browser and are made visible when the user moves
+ * the mouse over the element. Titles are not visible on touch devices.
*
- * Titles are rendered by the browser and are made visible when hovering the element. Titles are
- * not visible on touch devices.
+ * @example
+ * // TitledElement provides a 'title' attribute to the
+ * // ButtonWidget class
+ * var button = new OO.ui.ButtonWidget( {
+ * label: 'Button with Title',
+ * title: 'I am a button'
+ * } );
+ * $( 'body' ).append( button.$element );
*
* @abstract
* @class
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {jQuery} [$titled] Titled node, assigned to #$titled, omit to use #$element
- * @cfg {string|Function} [title] Title text or a function that returns text
+ * @cfg {jQuery} [$titled] The element to which the `title` attribute is applied.
+ * If this config is omitted, the title functionality is applied to $element, the
+ * element created by the class.
+ * @cfg {string|Function} [title] The title text or a function that returns text. If
+ * this config is omitted, the value of the {@link #static-title static title} property is used.
*/
OO.ui.TitledElement = function OoUiTitledElement( config ) {
- // Config intialization
+ // Configuration initialization
config = config || {};
// Properties
@@ -4540,11 +6156,12 @@ OO.initClass( OO.ui.TitledElement );
/* Static Properties */
/**
- * Title.
+ * The title text, a function that returns text, or `null` for no title. The value of the static property
+ * is overridden if the #title config option is used.
*
* @static
* @inheritable
- * @property {string|Function} Title text or a function that returns text
+ * @property {string|Function|null}
*/
OO.ui.TitledElement.static.title = null;
@@ -4553,9 +6170,10 @@ OO.ui.TitledElement.static.title = null;
/**
* Set the titled element.
*
- * If an element is already set, it will be cleaned up before setting up the new element.
+ * This method is used to retarget a titledElement mixin so that its functionality applies to the specified element.
+ * If an element is already set, the mixin’s effect on that element is removed before the new element is set up.
*
- * @param {jQuery} $titled Element to set title on
+ * @param {jQuery} $titled Element that should use the 'titled' functionality
*/
OO.ui.TitledElement.prototype.setTitledElement = function ( $titled ) {
if ( this.$titled ) {
@@ -4571,7 +6189,7 @@ OO.ui.TitledElement.prototype.setTitledElement = function ( $titled ) {
/**
* Set title.
*
- * @param {string|Function|null} title Title text, a function that returns text or null for no title
+ * @param {string|Function|null} title Title text, a function that returns text, or `null` for no title
* @chainable
*/
OO.ui.TitledElement.prototype.setTitle = function ( title ) {
@@ -4627,8 +6245,8 @@ OO.ui.ClippableElement = function OoUiClippableElement( config ) {
this.$clippableWindow = null;
this.idealWidth = null;
this.idealHeight = null;
- this.onClippableContainerScrollHandler = OO.ui.bind( this.clip, this );
- this.onClippableWindowResizeHandler = OO.ui.bind( this.clip, this );
+ this.onClippableContainerScrollHandler = this.clip.bind( this );
+ this.onClippableWindowResizeHandler = this.clip.bind( this );
// Initialization
this.setClippableElement( config.$clippable || this.$element );
@@ -4646,9 +6264,8 @@ OO.ui.ClippableElement = function OoUiClippableElement( config ) {
OO.ui.ClippableElement.prototype.setClippableElement = function ( $clippable ) {
if ( this.$clippable ) {
this.$clippable.removeClass( 'oo-ui-clippableElement-clippable' );
- this.$clippable.css( { width: '', height: '' } );
- this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
- this.$clippable.css( { overflowX: '', overflowY: '' } );
+ this.$clippable.css( { width: '', height: '', overflowX: '', overflowY: '' } );
+ OO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );
}
this.$clippable = $clippable.addClass( 'oo-ui-clippableElement-clippable' );
@@ -4669,21 +6286,20 @@ OO.ui.ClippableElement.prototype.toggleClipping = function ( clipping ) {
if ( this.clipping !== clipping ) {
this.clipping = clipping;
if ( clipping ) {
- this.$clippableContainer = this.$( this.getClosestScrollableElementContainer() );
- // If the clippable container is the body, we have to listen to scroll events and check
+ this.$clippableContainer = $( this.getClosestScrollableElementContainer() );
+ // If the clippable container is the root, we have to listen to scroll events and check
// jQuery.scrollTop on the window because of browser inconsistencies
- this.$clippableScroller = this.$clippableContainer.is( 'body' ) ?
- this.$( OO.ui.Element.getWindow( this.$clippableContainer ) ) :
+ this.$clippableScroller = this.$clippableContainer.is( 'html, body' ) ?
+ $( OO.ui.Element.static.getWindow( this.$clippableContainer ) ) :
this.$clippableContainer;
this.$clippableScroller.on( 'scroll', this.onClippableContainerScrollHandler );
- this.$clippableWindow = this.$( this.getElementWindow() )
+ this.$clippableWindow = $( this.getElementWindow() )
.on( 'resize', this.onClippableWindowResizeHandler );
// Initial clip after visible
this.clip();
} else {
- this.$clippable.css( { width: '', height: '' } );
- this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
- this.$clippable.css( { overflowX: '', overflowY: '' } );
+ this.$clippable.css( { width: '', height: '', overflowX: '', overflowY: '' } );
+ OO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );
this.$clippableContainer = null;
this.$clippableScroller.off( 'scroll', this.onClippableContainerScrollHandler );
@@ -4764,35 +6380,42 @@ OO.ui.ClippableElement.prototype.clip = function () {
return this;
}
- var buffer = 10,
+ var buffer = 7, // Chosen by fair dice roll
cOffset = this.$clippable.offset(),
- $container = this.$clippableContainer.is( 'body' ) ?
+ $container = this.$clippableContainer.is( 'html, body' ) ?
this.$clippableWindow : this.$clippableContainer,
ccOffset = $container.offset() || { top: 0, left: 0 },
ccHeight = $container.innerHeight() - buffer,
ccWidth = $container.innerWidth() - buffer,
+ cHeight = this.$clippable.outerHeight() + buffer,
+ cWidth = this.$clippable.outerWidth() + buffer,
scrollTop = this.$clippableScroller.scrollTop(),
scrollLeft = this.$clippableScroller.scrollLeft(),
- desiredWidth = ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
- desiredHeight = ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
+ desiredWidth = cOffset.left < 0 ?
+ cWidth + cOffset.left :
+ ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
+ desiredHeight = cOffset.top < 0 ?
+ cHeight + cOffset.top :
+ ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
naturalWidth = this.$clippable.prop( 'scrollWidth' ),
naturalHeight = this.$clippable.prop( 'scrollHeight' ),
clipWidth = desiredWidth < naturalWidth,
clipHeight = desiredHeight < naturalHeight;
if ( clipWidth ) {
- this.$clippable.css( { overflowX: 'auto', width: desiredWidth } );
+ this.$clippable.css( { overflowX: 'scroll', width: desiredWidth } );
} else {
- this.$clippable.css( 'width', this.idealWidth || '' );
- this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
- this.$clippable.css( 'overflowX', '' );
+ this.$clippable.css( { width: this.idealWidth || '', overflowX: '' } );
}
if ( clipHeight ) {
- this.$clippable.css( { overflowY: 'auto', height: desiredHeight } );
+ this.$clippable.css( { overflowY: 'scroll', height: desiredHeight } );
} else {
- this.$clippable.css( 'height', this.idealHeight || '' );
- this.$clippable.height(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
- this.$clippable.css( 'overflowY', '' );
+ this.$clippable.css( { height: this.idealHeight || '', overflowY: '' } );
+ }
+
+ // If we stopped clipping in at least one of the dimensions
+ if ( !clipWidth || !clipHeight ) {
+ OO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );
}
this.clippedHorizontally = clipWidth;
@@ -4808,6 +6431,8 @@ OO.ui.ClippableElement.prototype.clip = function () {
* @class
* @extends OO.ui.Widget
* @mixins OO.ui.IconElement
+ * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {OO.ui.ToolGroup} toolGroup
@@ -4815,32 +6440,48 @@ OO.ui.ClippableElement.prototype.clip = function () {
* @cfg {string|Function} [title] Title text or a function that returns text
*/
OO.ui.Tool = function OoUiTool( toolGroup, config ) {
- // Config intialization
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+ config = toolGroup;
+ toolGroup = config.toolGroup;
+ }
+
+ // Configuration initialization
config = config || {};
// Parent constructor
OO.ui.Tool.super.call( this, config );
- // Mixin constructors
- OO.ui.IconElement.call( this, config );
-
// Properties
this.toolGroup = toolGroup;
this.toolbar = this.toolGroup.getToolbar();
this.active = false;
- this.$title = this.$( '<span>' );
- this.$link = this.$( '<a>' );
+ this.$title = $( '<span>' );
+ this.$accel = $( '<span>' );
+ this.$link = $( '<a>' );
this.title = null;
+ // Mixin constructors
+ OO.ui.IconElement.call( this, config );
+ OO.ui.FlaggedElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$link } ) );
+
// Events
this.toolbar.connect( this, { updateState: 'onUpdateState' } );
// Initialization
this.$title.addClass( 'oo-ui-tool-title' );
+ this.$accel
+ .addClass( 'oo-ui-tool-accel' )
+ .prop( {
+ // This may need to be changed if the key names are ever localized,
+ // but for now they are essentially written in English
+ dir: 'ltr',
+ lang: 'en'
+ } );
this.$link
.addClass( 'oo-ui-tool-link' )
- .append( this.$icon, this.$title )
- .prop( 'tabIndex', 0 )
+ .append( this.$icon, this.$title, this.$accel )
.attr( 'role', 'button' );
this.$element
.data( 'oo-ui-tool', this )
@@ -4848,6 +6489,7 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
'oo-ui-tool ' + 'oo-ui-tool-name-' +
this.constructor.static.name.replace( /^([^\/]+)\/([^\/]+).*$/, '$1-$2' )
)
+ .toggleClass( 'oo-ui-tool-with-label', this.constructor.static.displayBothIconAndLabel )
.append( this.$link );
this.setTitle( config.title || this.constructor.static.title );
};
@@ -4856,6 +6498,8 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
OO.inheritClass( OO.ui.Tool, OO.ui.Widget );
OO.mixinClass( OO.ui.Tool, OO.ui.IconElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.TabIndexedElement );
/* Events */
@@ -4907,6 +6551,16 @@ OO.ui.Tool.static.group = '';
OO.ui.Tool.static.title = '';
/**
+ * Whether this tool should be displayed with both title and label when used in a bar tool group.
+ * Normally only the icon is displayed, or only the label if no icon is given.
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.Tool.static.displayBothIconAndLabel = false;
+
+/**
* Tool can be automatically added to catch-all groups.
*
* @static
@@ -4967,7 +6621,7 @@ OO.ui.Tool.prototype.onSelect = function () {
/**
* Check if the button is active.
*
- * @param {boolean} Button is active
+ * @return {boolean} Button is active
*/
OO.ui.Tool.prototype.isActive = function () {
return this.active;
@@ -5026,13 +6680,8 @@ OO.ui.Tool.prototype.updateTitle = function () {
accel = this.toolbar.getToolAccelerator( this.constructor.static.name ),
tooltipParts = [];
- this.$title.empty()
- .text( this.title )
- .append(
- this.$( '<span>' )
- .addClass( 'oo-ui-tool-accel' )
- .text( accel )
- );
+ this.$title.text( this.title );
+ this.$accel.text( accel );
if ( titleTooltips && typeof this.title === 'string' && this.title.length ) {
tooltipParts.push( this.title );
@@ -5058,6 +6707,254 @@ OO.ui.Tool.prototype.destroy = function () {
/**
* Collection of tool groups.
*
+ * The following is a minimal example using several tools and tool groups.
+ *
+ * @example
+ * // Create the toolbar
+ * var toolFactory = new OO.ui.ToolFactory();
+ * var toolGroupFactory = new OO.ui.ToolGroupFactory();
+ * var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
+ *
+ * // We will be placing status text in this element when tools are used
+ * var $area = $( '<p>' ).text( 'Toolbar example' );
+ *
+ * // Define the tools that we're going to place in our toolbar
+ *
+ * // Create a class inheriting from OO.ui.Tool
+ * function PictureTool() {
+ * PictureTool.super.apply( this, arguments );
+ * }
+ * OO.inheritClass( PictureTool, OO.ui.Tool );
+ * // Each tool must have a 'name' (used as an internal identifier, see later) and at least one
+ * // of 'icon' and 'title' (displayed icon and text).
+ * PictureTool.static.name = 'picture';
+ * PictureTool.static.icon = 'picture';
+ * PictureTool.static.title = 'Insert picture';
+ * // Defines the action that will happen when this tool is selected (clicked).
+ * PictureTool.prototype.onSelect = function () {
+ * $area.text( 'Picture tool clicked!' );
+ * // Never display this tool as "active" (selected).
+ * this.setActive( false );
+ * };
+ * // Make this tool available in our toolFactory and thus our toolbar
+ * toolFactory.register( PictureTool );
+ *
+ * // Register two more tools, nothing interesting here
+ * function SettingsTool() {
+ * SettingsTool.super.apply( this, arguments );
+ * }
+ * OO.inheritClass( SettingsTool, OO.ui.Tool );
+ * SettingsTool.static.name = 'settings';
+ * SettingsTool.static.icon = 'settings';
+ * SettingsTool.static.title = 'Change settings';
+ * SettingsTool.prototype.onSelect = function () {
+ * $area.text( 'Settings tool clicked!' );
+ * this.setActive( false );
+ * };
+ * toolFactory.register( SettingsTool );
+ *
+ * // Register two more tools, nothing interesting here
+ * function StuffTool() {
+ * StuffTool.super.apply( this, arguments );
+ * }
+ * OO.inheritClass( StuffTool, OO.ui.Tool );
+ * StuffTool.static.name = 'stuff';
+ * StuffTool.static.icon = 'ellipsis';
+ * StuffTool.static.title = 'More stuff';
+ * StuffTool.prototype.onSelect = function () {
+ * $area.text( 'More stuff tool clicked!' );
+ * this.setActive( false );
+ * };
+ * toolFactory.register( StuffTool );
+ *
+ * // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a
+ * // little popup window (a PopupWidget).
+ * function HelpTool( toolGroup, config ) {
+ * OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {
+ * padded: true,
+ * label: 'Help',
+ * head: true
+ * } }, config ) );
+ * this.popup.$body.append( '<p>I am helpful!</p>' );
+ * }
+ * OO.inheritClass( HelpTool, OO.ui.PopupTool );
+ * HelpTool.static.name = 'help';
+ * HelpTool.static.icon = 'help';
+ * HelpTool.static.title = 'Help';
+ * toolFactory.register( HelpTool );
+ *
+ * // Finally define which tools and in what order appear in the toolbar. Each tool may only be
+ * // used once (but not all defined tools must be used).
+ * toolbar.setup( [
+ * {
+ * // 'bar' tool groups display tools' icons only, side-by-side.
+ * type: 'bar',
+ * include: [ 'picture', 'help' ]
+ * },
+ * {
+ * // 'list' tool groups display both the titles and icons, in a dropdown list.
+ * type: 'list',
+ * indicator: 'down',
+ * label: 'More',
+ * include: [ 'settings', 'stuff' ]
+ * }
+ * // Note how the tools themselves are toolgroup-agnostic - the same tool can be displayed
+ * // either in a 'list' or a 'bar'. There is a 'menu' tool group too, not showcased here,
+ * // since it's more complicated to use. (See the next example snippet on this page.)
+ * ] );
+ *
+ * // Create some UI around the toolbar and place it in the document
+ * var frame = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * framed: true
+ * } );
+ * var contentFrame = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * padded: true
+ * } );
+ * frame.$element.append(
+ * toolbar.$element,
+ * contentFrame.$element.append( $area )
+ * );
+ * $( 'body' ).append( frame.$element );
+ *
+ * // Here is where the toolbar is actually built. This must be done after inserting it into the
+ * // document.
+ * toolbar.initialize();
+ *
+ * The following example extends the previous one to illustrate 'menu' tool groups and the usage of
+ * 'updateState' event.
+ *
+ * @example
+ * // Create the toolbar
+ * var toolFactory = new OO.ui.ToolFactory();
+ * var toolGroupFactory = new OO.ui.ToolGroupFactory();
+ * var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
+ *
+ * // We will be placing status text in this element when tools are used
+ * var $area = $( '<p>' ).text( 'Toolbar example' );
+ *
+ * // Define the tools that we're going to place in our toolbar
+ *
+ * // Create a class inheriting from OO.ui.Tool
+ * function PictureTool() {
+ * PictureTool.super.apply( this, arguments );
+ * }
+ * OO.inheritClass( PictureTool, OO.ui.Tool );
+ * // Each tool must have a 'name' (used as an internal identifier, see later) and at least one
+ * // of 'icon' and 'title' (displayed icon and text).
+ * PictureTool.static.name = 'picture';
+ * PictureTool.static.icon = 'picture';
+ * PictureTool.static.title = 'Insert picture';
+ * // Defines the action that will happen when this tool is selected (clicked).
+ * PictureTool.prototype.onSelect = function () {
+ * $area.text( 'Picture tool clicked!' );
+ * // Never display this tool as "active" (selected).
+ * this.setActive( false );
+ * };
+ * // The toolbar can be synchronized with the state of some external stuff, like a text
+ * // editor's editing area, highlighting the tools (e.g. a 'bold' tool would be shown as active
+ * // when the text cursor was inside bolded text). Here we simply disable this feature.
+ * PictureTool.prototype.onUpdateState = function () {
+ * };
+ * // Make this tool available in our toolFactory and thus our toolbar
+ * toolFactory.register( PictureTool );
+ *
+ * // Register two more tools, nothing interesting here
+ * function SettingsTool() {
+ * SettingsTool.super.apply( this, arguments );
+ * this.reallyActive = false;
+ * }
+ * OO.inheritClass( SettingsTool, OO.ui.Tool );
+ * SettingsTool.static.name = 'settings';
+ * SettingsTool.static.icon = 'settings';
+ * SettingsTool.static.title = 'Change settings';
+ * SettingsTool.prototype.onSelect = function () {
+ * $area.text( 'Settings tool clicked!' );
+ * // Toggle the active state on each click
+ * this.reallyActive = !this.reallyActive;
+ * this.setActive( this.reallyActive );
+ * // To update the menu label
+ * this.toolbar.emit( 'updateState' );
+ * };
+ * SettingsTool.prototype.onUpdateState = function () {
+ * };
+ * toolFactory.register( SettingsTool );
+ *
+ * // Register two more tools, nothing interesting here
+ * function StuffTool() {
+ * StuffTool.super.apply( this, arguments );
+ * this.reallyActive = false;
+ * }
+ * OO.inheritClass( StuffTool, OO.ui.Tool );
+ * StuffTool.static.name = 'stuff';
+ * StuffTool.static.icon = 'ellipsis';
+ * StuffTool.static.title = 'More stuff';
+ * StuffTool.prototype.onSelect = function () {
+ * $area.text( 'More stuff tool clicked!' );
+ * // Toggle the active state on each click
+ * this.reallyActive = !this.reallyActive;
+ * this.setActive( this.reallyActive );
+ * // To update the menu label
+ * this.toolbar.emit( 'updateState' );
+ * };
+ * StuffTool.prototype.onUpdateState = function () {
+ * };
+ * toolFactory.register( StuffTool );
+ *
+ * // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a
+ * // little popup window (a PopupWidget). 'onUpdateState' is also already implemented.
+ * function HelpTool( toolGroup, config ) {
+ * OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {
+ * padded: true,
+ * label: 'Help',
+ * head: true
+ * } }, config ) );
+ * this.popup.$body.append( '<p>I am helpful!</p>' );
+ * }
+ * OO.inheritClass( HelpTool, OO.ui.PopupTool );
+ * HelpTool.static.name = 'help';
+ * HelpTool.static.icon = 'help';
+ * HelpTool.static.title = 'Help';
+ * toolFactory.register( HelpTool );
+ *
+ * // Finally define which tools and in what order appear in the toolbar. Each tool may only be
+ * // used once (but not all defined tools must be used).
+ * toolbar.setup( [
+ * {
+ * // 'bar' tool groups display tools' icons only, side-by-side.
+ * type: 'bar',
+ * include: [ 'picture', 'help' ]
+ * },
+ * {
+ * // 'menu' tool groups display both the titles and icons, in a dropdown menu.
+ * // Menu label indicates which items are selected.
+ * type: 'menu',
+ * indicator: 'down',
+ * include: [ 'settings', 'stuff' ]
+ * }
+ * ] );
+ *
+ * // Create some UI around the toolbar and place it in the document
+ * var frame = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * framed: true
+ * } );
+ * var contentFrame = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * padded: true
+ * } );
+ * frame.$element.append(
+ * toolbar.$element,
+ * contentFrame.$element.append( $area )
+ * );
+ * $( 'body' ).append( frame.$element );
+ *
+ * // Here is where the toolbar is actually built. This must be done after inserting it into the
+ * // document.
+ * toolbar.initialize();
+ * toolbar.emit( 'updateState' );
+ *
* @class
* @extends OO.ui.Element
* @mixins OO.EventEmitter
@@ -5071,6 +6968,13 @@ OO.ui.Tool.prototype.destroy = function () {
* @cfg {boolean} [shadow] Add a shadow below the toolbar
*/
OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolFactory ) && config === undefined ) {
+ config = toolFactory;
+ toolFactory = config.toolFactory;
+ toolGroupFactory = config.toolGroupFactory;
+ }
+
// Configuration initialization
config = config || {};
@@ -5086,23 +6990,24 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
this.toolGroupFactory = toolGroupFactory;
this.groups = [];
this.tools = {};
- this.$bar = this.$( '<div>' );
- this.$actions = this.$( '<div>' );
+ this.$bar = $( '<div>' );
+ this.$actions = $( '<div>' );
this.initialized = false;
+ this.onWindowResizeHandler = this.onWindowResize.bind( this );
// Events
this.$element
.add( this.$bar ).add( this.$group ).add( this.$actions )
- .on( 'mousedown touchstart', OO.ui.bind( this.onPointerDown, this ) );
+ .on( 'mousedown keydown', this.onPointerDown.bind( this ) );
// Initialization
this.$group.addClass( 'oo-ui-toolbar-tools' );
- this.$bar.addClass( 'oo-ui-toolbar-bar' ).append( this.$group );
if ( config.actions ) {
- this.$actions.addClass( 'oo-ui-toolbar-actions' );
- this.$bar.append( this.$actions );
+ this.$bar.append( this.$actions.addClass( 'oo-ui-toolbar-actions' ) );
}
- this.$bar.append( '<div style="clear:both"></div>' );
+ this.$bar
+ .addClass( 'oo-ui-toolbar-bar' )
+ .append( this.$group, '<div style="clear:both"></div>' );
if ( config.shadow ) {
this.$bar.append( '<div class="oo-ui-toolbar-shadow"></div>' );
}
@@ -5141,19 +7046,35 @@ OO.ui.Toolbar.prototype.getToolGroupFactory = function () {
* @param {jQuery.Event} e Mouse down event
*/
OO.ui.Toolbar.prototype.onPointerDown = function ( e ) {
- var $closestWidgetToEvent = this.$( e.target ).closest( '.oo-ui-widget' ),
+ var $closestWidgetToEvent = $( e.target ).closest( '.oo-ui-widget' ),
$closestWidgetToToolbar = this.$element.closest( '.oo-ui-widget' );
- if ( !$closestWidgetToEvent.length || $closestWidgetToEvent[0] === $closestWidgetToToolbar[0] ) {
+ if ( !$closestWidgetToEvent.length || $closestWidgetToEvent[ 0 ] === $closestWidgetToToolbar[ 0 ] ) {
return false;
}
};
/**
+ * Handle window resize event.
+ *
+ * @private
+ * @param {jQuery.Event} e Window resize event
+ */
+OO.ui.Toolbar.prototype.onWindowResize = function () {
+ this.$element.toggleClass(
+ 'oo-ui-toolbar-narrow',
+ this.$bar.width() <= this.narrowThreshold
+ );
+};
+
+/**
* Sets up handles and preloads required information for the toolbar to work.
- * This must be called immediately after it is attached to a visible document.
+ * This must be called after it is attached to a visible document and before doing anything else.
*/
OO.ui.Toolbar.prototype.initialize = function () {
this.initialized = true;
+ this.narrowThreshold = this.$group.width() + this.$actions.width();
+ $( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
+ this.onWindowResize();
};
/**
@@ -5181,20 +7102,20 @@ OO.ui.Toolbar.prototype.setup = function ( groups ) {
// Build out new groups
for ( i = 0, len = groups.length; i < len; i++ ) {
- group = groups[i];
+ group = groups[ i ];
if ( group.include === '*' ) {
// Apply defaults to catch-all groups
if ( group.type === undefined ) {
group.type = 'list';
}
if ( group.label === undefined ) {
- group.label = 'ooui-toolbar-more';
+ group.label = OO.ui.msg( 'ooui-toolbar-more' );
}
}
// Check type has been registered
type = this.getToolGroupFactory().lookup( group.type ) ? group.type : defaultType;
items.push(
- this.getToolGroupFactory().create( type, this, $.extend( { $: this.$ }, group ) )
+ this.getToolGroupFactory().create( type, this, group )
);
}
this.addItems( items );
@@ -5209,7 +7130,7 @@ OO.ui.Toolbar.prototype.reset = function () {
this.groups = [];
this.tools = {};
for ( i = 0, len = this.items.length; i < len; i++ ) {
- this.items[i].destroy();
+ this.items[ i ].destroy();
}
this.clearItems();
};
@@ -5220,6 +7141,7 @@ OO.ui.Toolbar.prototype.reset = function () {
* Call this whenever you are done using a toolbar.
*/
OO.ui.Toolbar.prototype.destroy = function () {
+ $( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
this.reset();
this.$element.remove();
};
@@ -5231,7 +7153,7 @@ OO.ui.Toolbar.prototype.destroy = function () {
* @return {boolean} Tool is available
*/
OO.ui.Toolbar.prototype.isToolAvailable = function ( name ) {
- return !this.tools[name];
+ return !this.tools[ name ];
};
/**
@@ -5240,7 +7162,7 @@ OO.ui.Toolbar.prototype.isToolAvailable = function ( name ) {
* @param {OO.ui.Tool} tool Tool to reserve
*/
OO.ui.Toolbar.prototype.reserveTool = function ( tool ) {
- this.tools[tool.getName()] = tool;
+ this.tools[ tool.getName() ] = tool;
};
/**
@@ -5249,7 +7171,7 @@ OO.ui.Toolbar.prototype.reserveTool = function ( tool ) {
* @param {OO.ui.Tool} tool Tool to release
*/
OO.ui.Toolbar.prototype.releaseTool = function ( tool ) {
- delete this.tools[tool.getName()];
+ delete this.tools[ tool.getName() ];
};
/**
@@ -5287,6 +7209,12 @@ OO.ui.Toolbar.prototype.getToolAccelerator = function () {
* @cfg {Array|string} [demote=[]] List of tools to demote to the end
*/
OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
// Configuration initialization
config = config || {};
@@ -5305,14 +7233,18 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
this.exclude = config.exclude || [];
this.promote = config.promote || [];
this.demote = config.demote || [];
- this.onCapturedMouseUpHandler = OO.ui.bind( this.onCapturedMouseUp, this );
+ this.onCapturedMouseKeyUpHandler = this.onCapturedMouseKeyUp.bind( this );
// Events
this.$element.on( {
- 'mousedown touchstart': OO.ui.bind( this.onPointerDown, this ),
- 'mouseup touchend': OO.ui.bind( this.onPointerUp, this ),
- mouseover: OO.ui.bind( this.onMouseOver, this ),
- mouseout: OO.ui.bind( this.onMouseOut, this )
+ mousedown: this.onMouseKeyDown.bind( this ),
+ mouseup: this.onMouseKeyUp.bind( this ),
+ keydown: this.onMouseKeyDown.bind( this ),
+ keyup: this.onMouseKeyUp.bind( this ),
+ focus: this.onMouseOverFocus.bind( this ),
+ blur: this.onMouseOutBlur.bind( this ),
+ mouseover: this.onMouseOverFocus.bind( this ),
+ mouseout: this.onMouseOutBlur.bind( this )
} );
this.toolbar.getToolFactory().connect( this, { register: 'onToolFactoryRegister' } );
this.aggregate( { disable: 'itemDisable' } );
@@ -5383,7 +7315,7 @@ OO.ui.ToolGroup.prototype.updateDisabled = function () {
if ( this.constructor.static.autoDisable ) {
for ( i = this.items.length - 1; i >= 0; i-- ) {
- item = this.items[i];
+ item = this.items[ i ];
if ( !item.isDisabled() ) {
allDisabled = false;
break;
@@ -5395,59 +7327,64 @@ OO.ui.ToolGroup.prototype.updateDisabled = function () {
};
/**
- * Handle mouse down events.
+ * Handle mouse down and key down events.
*
- * @param {jQuery.Event} e Mouse down event
+ * @param {jQuery.Event} e Mouse down or key down event
*/
-OO.ui.ToolGroup.prototype.onPointerDown = function ( e ) {
- // e.which is 0 for touch events, 1 for left mouse button
- if ( !this.isDisabled() && e.which <= 1 ) {
+OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {
+ if (
+ !this.isDisabled() &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
this.pressed = this.getTargetTool( e );
if ( this.pressed ) {
this.pressed.setActive( true );
- this.getElementDocument().addEventListener(
- 'mouseup', this.onCapturedMouseUpHandler, true
- );
+ this.getElementDocument().addEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );
+ this.getElementDocument().addEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );
}
+ return false;
}
- return false;
};
/**
- * Handle captured mouse up events.
+ * Handle captured mouse up and key up events.
*
- * @param {Event} e Mouse up event
+ * @param {Event} e Mouse up or key up event
*/
-OO.ui.ToolGroup.prototype.onCapturedMouseUp = function ( e ) {
- this.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseUpHandler, true );
- // onPointerUp may be called a second time, depending on where the mouse is when the button is
+OO.ui.ToolGroup.prototype.onCapturedMouseKeyUp = function ( e ) {
+ this.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );
+ this.getElementDocument().removeEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );
+ // onMouseKeyUp may be called a second time, depending on where the mouse is when the button is
// released, but since `this.pressed` will no longer be true, the second call will be ignored.
- this.onPointerUp( e );
+ this.onMouseKeyUp( e );
};
/**
- * Handle mouse up events.
+ * Handle mouse up and key up events.
*
- * @param {jQuery.Event} e Mouse up event
+ * @param {jQuery.Event} e Mouse up or key up event
*/
-OO.ui.ToolGroup.prototype.onPointerUp = function ( e ) {
+OO.ui.ToolGroup.prototype.onMouseKeyUp = function ( e ) {
var tool = this.getTargetTool( e );
- // e.which is 0 for touch events, 1 for left mouse button
- if ( !this.isDisabled() && e.which <= 1 && this.pressed && this.pressed === tool ) {
+ if (
+ !this.isDisabled() && this.pressed && this.pressed === tool &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
this.pressed.onSelect();
+ this.pressed = null;
+ return false;
}
this.pressed = null;
- return false;
};
/**
- * Handle mouse over events.
+ * Handle mouse over and focus events.
*
- * @param {jQuery.Event} e Mouse over event
+ * @param {jQuery.Event} e Mouse over or focus event
*/
-OO.ui.ToolGroup.prototype.onMouseOver = function ( e ) {
+OO.ui.ToolGroup.prototype.onMouseOverFocus = function ( e ) {
var tool = this.getTargetTool( e );
if ( this.pressed && this.pressed === tool ) {
@@ -5456,11 +7393,11 @@ OO.ui.ToolGroup.prototype.onMouseOver = function ( e ) {
};
/**
- * Handle mouse out events.
+ * Handle mouse out and blur events.
*
- * @param {jQuery.Event} e Mouse out event
+ * @param {jQuery.Event} e Mouse out or blur event
*/
-OO.ui.ToolGroup.prototype.onMouseOut = function ( e ) {
+OO.ui.ToolGroup.prototype.onMouseOutBlur = function ( e ) {
var tool = this.getTargetTool( e );
if ( this.pressed && this.pressed === tool ) {
@@ -5480,7 +7417,7 @@ OO.ui.ToolGroup.prototype.onMouseOut = function ( e ) {
*/
OO.ui.ToolGroup.prototype.getTargetTool = function ( e ) {
var tool,
- $item = this.$( e.target ).closest( '.oo-ui-tool-link' );
+ $item = $( e.target ).closest( '.oo-ui-tool-link' );
if ( $item.length ) {
tool = $item.parent().data( 'oo-ui-tool' );
@@ -5527,31 +7464,34 @@ OO.ui.ToolGroup.prototype.populate = function () {
// Build a list of needed tools
for ( i = 0, len = list.length; i < len; i++ ) {
- name = list[i];
+ name = list[ i ];
if (
// Tool exists
toolFactory.lookup( name ) &&
// Tool is available or is already in this group
- ( this.toolbar.isToolAvailable( name ) || this.tools[name] )
+ ( this.toolbar.isToolAvailable( name ) || this.tools[ name ] )
) {
- tool = this.tools[name];
+ // Hack to prevent infinite recursion via ToolGroupTool. We need to reserve the tool before
+ // creating it, but we can't call reserveTool() yet because we haven't created the tool.
+ this.toolbar.tools[ name ] = true;
+ tool = this.tools[ name ];
if ( !tool ) {
// Auto-initialize tools on first use
- this.tools[name] = tool = toolFactory.create( name, this );
+ this.tools[ name ] = tool = toolFactory.create( name, this );
tool.updateTitle();
}
this.toolbar.reserveTool( tool );
add.push( tool );
- names[name] = true;
+ names[ name ] = true;
}
}
// Remove tools that are no longer needed
for ( name in this.tools ) {
- if ( !names[name] ) {
- this.tools[name].destroy();
- this.toolbar.releaseTool( this.tools[name] );
- remove.push( this.tools[name] );
- delete this.tools[name];
+ if ( !names[ name ] ) {
+ this.tools[ name ].destroy();
+ this.toolbar.releaseTool( this.tools[ name ] );
+ remove.push( this.tools[ name ] );
+ delete this.tools[ name ];
}
}
if ( remove.length ) {
@@ -5578,19 +7518,47 @@ OO.ui.ToolGroup.prototype.destroy = function () {
this.clearItems();
this.toolbar.getToolFactory().disconnect( this );
for ( name in this.tools ) {
- this.toolbar.releaseTool( this.tools[name] );
- this.tools[name].disconnect( this ).destroy();
- delete this.tools[name];
+ this.toolbar.releaseTool( this.tools[ name ] );
+ this.tools[ name ].disconnect( this ).destroy();
+ delete this.tools[ name ];
}
this.$element.remove();
};
/**
- * Dialog for showing a message.
+ * MessageDialogs display a confirmation or alert message. By default, the rendered dialog box
+ * consists of a header that contains the dialog title, a body with the message, and a footer that
+ * contains any {@link OO.ui.ActionWidget action widgets}. The MessageDialog class is the only type
+ * of {@link OO.ui.Dialog dialog} that is usually instantiated directly.
+ *
+ * There are two basic types of message dialogs, confirmation and alert:
+ *
+ * - **confirmation**: the dialog title describes what a progressive action will do and the message provides
+ * more details about the consequences.
+ * - **alert**: the dialog title describes which event occurred and the message provides more information
+ * about why the event occurred.
+ *
+ * The MessageDialog class specifies two actions: ‘accept’, the primary
+ * action (e.g., ‘ok’) and ‘reject,’ the safe action (e.g., ‘cancel’). Both will close the window,
+ * passing along the selected action.
+ *
+ * For more information and examples, please see the [OOjs UI documentation on MediaWiki][1].
*
- * User interface:
- * - Registers two actions by default (safe and primary).
- * - Renders action widgets in the footer.
+ * @example
+ * // Example: Creating and opening a message dialog window.
+ * var messageDialog = new OO.ui.MessageDialog();
+ *
+ * // Create and append a window manager.
+ * var windowManager = new OO.ui.WindowManager();
+ * $( 'body' ).append( windowManager.$element );
+ * windowManager.addWindows( [ messageDialog ] );
+ * // Open the window.
+ * windowManager.openWindow( messageDialog, {
+ * title: 'Basic message dialog',
+ * message: 'This is the message'
+ * } );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Message_Dialogs
*
* @class
* @extends OO.ui.Dialog
@@ -5624,21 +7592,23 @@ OO.ui.MessageDialog.static.verbose = false;
/**
* Dialog title.
*
- * A confirmation dialog's title should describe what the progressive action will do. An alert
- * dialog's title should describe what event occured.
+ * The title of a confirmation dialog describes what a progressive action will do. The
+ * title of an alert dialog describes which event occurred.
*
* @static
- * inheritable
+ * @inheritable
* @property {jQuery|string|Function|null}
*/
OO.ui.MessageDialog.static.title = null;
/**
- * A confirmation dialog's message should describe the consequences of the progressive action. An
- * alert dialog's message should describe why the event occured.
+ * The message displayed in the dialog body.
+ *
+ * A confirmation message describes the consequences of a progressive action. An alert
+ * message describes why an event occurred.
*
* @static
- * inheritable
+ * @inheritable
* @property {jQuery|string|Function|null}
*/
OO.ui.MessageDialog.static.message = null;
@@ -5653,14 +7623,44 @@ OO.ui.MessageDialog.static.actions = [
/**
* @inheritdoc
*/
+OO.ui.MessageDialog.prototype.setManager = function ( manager ) {
+ OO.ui.MessageDialog.super.prototype.setManager.call( this, manager );
+
+ // Events
+ this.manager.connect( this, {
+ resize: 'onResize'
+ } );
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
OO.ui.MessageDialog.prototype.onActionResize = function ( action ) {
this.fitActions();
- return OO.ui.ProcessDialog.super.prototype.onActionResize.call( this, action );
+ return OO.ui.MessageDialog.super.prototype.onActionResize.call( this, action );
+};
+
+/**
+ * Handle window resized events.
+ *
+ * @private
+ */
+OO.ui.MessageDialog.prototype.onResize = function () {
+ var dialog = this;
+ dialog.fitActions();
+ // Wait for CSS transition to finish and do it again :(
+ setTimeout( function () {
+ dialog.fitActions();
+ }, 300 );
};
/**
* Toggle action layout between vertical and horizontal.
*
+ *
+ * @private
* @param {boolean} [value] Layout actions vertically, omit to toggle
* @chainable
*/
@@ -5722,7 +7722,39 @@ OO.ui.MessageDialog.prototype.getSetupProcess = function ( data ) {
* @inheritdoc
*/
OO.ui.MessageDialog.prototype.getBodyHeight = function () {
- return Math.round( this.text.$element.outerHeight( true ) );
+ var bodyHeight, oldOverflow,
+ $scrollable = this.container.$element;
+
+ oldOverflow = $scrollable[ 0 ].style.overflow;
+ $scrollable[ 0 ].style.overflow = 'hidden';
+
+ OO.ui.Element.static.reconsiderScrollbars( $scrollable[ 0 ] );
+
+ bodyHeight = this.text.$element.outerHeight( true );
+ $scrollable[ 0 ].style.overflow = oldOverflow;
+
+ return bodyHeight;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.setDimensions = function ( dim ) {
+ var $scrollable = this.container.$element;
+ OO.ui.MessageDialog.super.prototype.setDimensions.call( this, dim );
+
+ // Twiddle the overflow property, otherwise an unnecessary scrollbar will be produced.
+ // Need to do it after transition completes (250ms), add 50ms just in case.
+ setTimeout( function () {
+ var oldOverflow = $scrollable[ 0 ].style.overflow;
+ $scrollable[ 0 ].style.overflow = 'hidden';
+
+ OO.ui.Element.static.reconsiderScrollbars( $scrollable[ 0 ] );
+
+ $scrollable[ 0 ].style.overflow = oldOverflow;
+ }, 300 );
+
+ return this;
};
/**
@@ -5733,15 +7765,15 @@ OO.ui.MessageDialog.prototype.initialize = function () {
OO.ui.MessageDialog.super.prototype.initialize.call( this );
// Properties
- this.$actions = this.$( '<div>' );
+ this.$actions = $( '<div>' );
this.container = new OO.ui.PanelLayout( {
- $: this.$, scrollable: true, classes: [ 'oo-ui-messageDialog-container' ]
+ scrollable: true, classes: [ 'oo-ui-messageDialog-container' ]
} );
this.text = new OO.ui.PanelLayout( {
- $: this.$, padded: true, expanded: false, classes: [ 'oo-ui-messageDialog-text' ]
+ padded: true, expanded: false, classes: [ 'oo-ui-messageDialog-text' ]
} );
this.message = new OO.ui.LabelWidget( {
- $: this.$, classes: [ 'oo-ui-messageDialog-message' ]
+ classes: [ 'oo-ui-messageDialog-message' ]
} );
// Initialization
@@ -5771,7 +7803,7 @@ OO.ui.MessageDialog.prototype.attachActions = function () {
}
if ( others.length ) {
for ( i = 0, len = others.length; i < len; i++ ) {
- other = others[i];
+ other = others[ i ];
this.$actions.append( other.$element );
other.toggleFramed( false );
}
@@ -5781,51 +7813,96 @@ OO.ui.MessageDialog.prototype.attachActions = function () {
special.primary.toggleFramed( false );
}
- this.fitActions();
if ( !this.isOpening() ) {
- this.manager.updateWindowSize( this );
+ // If the dialog is currently opening, this will be called automatically soon.
+ // This also calls #fitActions.
+ this.updateSize();
}
- this.$body.css( 'bottom', this.$foot.outerHeight( true ) );
};
/**
* Fit action actions into columns or rows.
*
* Columns will be used if all labels can fit without overflow, otherwise rows will be used.
+ *
+ * @private
*/
OO.ui.MessageDialog.prototype.fitActions = function () {
var i, len, action,
+ previous = this.verticalActionLayout,
actions = this.actions.get();
// Detect clipping
this.toggleVerticalActionLayout( false );
for ( i = 0, len = actions.length; i < len; i++ ) {
- action = actions[i];
+ action = actions[ i ];
if ( action.$element.innerWidth() < action.$label.outerWidth( true ) ) {
this.toggleVerticalActionLayout( true );
break;
}
}
-};
-/**
- * Navigation dialog window.
- *
- * Logic:
- * - Show and hide errors.
- * - Retry an action.
- *
- * User interface:
- * - Renders header with dialog title and one action widget on either side
- * (a 'safe' button on the left, and a 'primary' button on the right, both of
- * which close the dialog).
- * - Displays any action widgets in the footer (none by default).
- * - Ability to dismiss errors.
- *
- * Subclass responsibilities:
- * - Register a 'safe' action.
- * - Register a 'primary' action.
- * - Add content to the dialog.
+ // Move the body out of the way of the foot
+ this.$body.css( 'bottom', this.$foot.outerHeight( true ) );
+
+ if ( this.verticalActionLayout !== previous ) {
+ // We changed the layout, window height might need to be updated.
+ this.updateSize();
+ }
+};
+
+/**
+ * ProcessDialog windows encapsulate a {@link OO.ui.Process process} and all of the code necessary
+ * to complete it. If the process terminates with an error, a customizable {@link OO.ui.Error error
+ * interface} alerts users to the trouble, permitting the user to dismiss the error and try again when
+ * relevant. The ProcessDialog class is always extended and customized with the actions and content
+ * required for each process.
+ *
+ * The process dialog box consists of a header that visually represents the ‘working’ state of long
+ * processes with an animation. The header contains the dialog title as well as
+ * two {@link OO.ui.ActionWidget action widgets}: a ‘safe’ action on the left (e.g., ‘Cancel’) and
+ * a ‘primary’ action on the right (e.g., ‘Done’).
+ *
+ * Like other windows, the process dialog is managed by a {@link OO.ui.WindowManager window manager}.
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information and examples.
+ *
+ * @example
+ * // Example: Creating and opening a process dialog window.
+ * function MyProcessDialog( config ) {
+ * MyProcessDialog.super.call( this, config );
+ * }
+ * OO.inheritClass( MyProcessDialog, OO.ui.ProcessDialog );
+ *
+ * MyProcessDialog.static.title = 'Process dialog';
+ * MyProcessDialog.static.actions = [
+ * { action: 'save', label: 'Done', flags: 'primary' },
+ * { label: 'Cancel', flags: 'safe' }
+ * ];
+ *
+ * MyProcessDialog.prototype.initialize = function () {
+ * MyProcessDialog.super.prototype.initialize.apply( this, arguments );
+ * this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ * this.content.$element.append( '<p>This is a process dialog window. The header contains the title and two buttons: \'Cancel\' (a safe action) on the left and \'Done\' (a primary action) on the right.</p>' );
+ * this.$body.append( this.content.$element );
+ * };
+ * MyProcessDialog.prototype.getActionProcess = function ( action ) {
+ * var dialog = this;
+ * if ( action ) {
+ * return new OO.ui.Process( function () {
+ * dialog.close( { action: action } );
+ * } );
+ * }
+ * return MyProcessDialog.super.prototype.getActionProcess.call( this, action );
+ * };
+ *
+ * var windowManager = new OO.ui.WindowManager();
+ * $( 'body' ).append( windowManager.$element );
+ *
+ * var dialog = new MyProcessDialog();
+ * windowManager.addWindows( [ dialog ] );
+ * windowManager.openWindow( dialog );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs
*
* @abstract
* @class
@@ -5852,6 +7929,8 @@ OO.inheritClass( OO.ui.ProcessDialog, OO.ui.Dialog );
* Handle dismiss button click events.
*
* Hides errors.
+ *
+ * @private
*/
OO.ui.ProcessDialog.prototype.onDismissErrorButtonClick = function () {
this.hideErrors();
@@ -5861,10 +7940,12 @@ OO.ui.ProcessDialog.prototype.onDismissErrorButtonClick = function () {
* Handle retry button click events.
*
* Hides errors and then tries again.
+ *
+ * @private
*/
OO.ui.ProcessDialog.prototype.onRetryButtonClick = function () {
this.hideErrors();
- this.executeAction( this.currentAction.getAction() );
+ this.executeAction( this.currentAction );
};
/**
@@ -5885,21 +7966,17 @@ OO.ui.ProcessDialog.prototype.initialize = function () {
OO.ui.ProcessDialog.super.prototype.initialize.call( this );
// Properties
- this.$navigation = this.$( '<div>' );
- this.$location = this.$( '<div>' );
- this.$safeActions = this.$( '<div>' );
- this.$primaryActions = this.$( '<div>' );
- this.$otherActions = this.$( '<div>' );
+ this.$navigation = $( '<div>' );
+ this.$location = $( '<div>' );
+ this.$safeActions = $( '<div>' );
+ this.$primaryActions = $( '<div>' );
+ this.$otherActions = $( '<div>' );
this.dismissButton = new OO.ui.ButtonWidget( {
- $: this.$,
label: OO.ui.msg( 'ooui-dialog-process-dismiss' )
} );
- this.retryButton = new OO.ui.ButtonWidget( {
- $: this.$,
- label: OO.ui.msg( 'ooui-dialog-process-retry' )
- } );
- this.$errors = this.$( '<div>' );
- this.$errorsTitle = this.$( '<div>' );
+ this.retryButton = new OO.ui.ButtonWidget();
+ this.$errors = $( '<div>' );
+ this.$errorsTitle = $( '<div>' );
// Events
this.dismissButton.connect( this, { click: 'onDismissErrorButtonClick' } );
@@ -5917,7 +7994,7 @@ OO.ui.ProcessDialog.prototype.initialize = function () {
.addClass( 'oo-ui-processDialog-errors-title' )
.text( OO.ui.msg( 'ooui-dialog-process-error' ) );
this.$errors
- .addClass( 'oo-ui-processDialog-errors' )
+ .addClass( 'oo-ui-processDialog-errors oo-ui-element-hidden' )
.append( this.$errorsTitle, this.dismissButton.$element, this.retryButton.$element );
this.$content
.addClass( 'oo-ui-processDialog-content' )
@@ -5932,6 +8009,19 @@ OO.ui.ProcessDialog.prototype.initialize = function () {
/**
* @inheritdoc
*/
+OO.ui.ProcessDialog.prototype.getActionWidgets = function ( actions ) {
+ var i, len, widgets = [];
+ for ( i = 0, len = actions.length; i < len; i++ ) {
+ widgets.push(
+ new OO.ui.ActionWidget( $.extend( { framed: true }, actions[ i ] ) )
+ );
+ }
+ return widgets;
+};
+
+/**
+ * @inheritdoc
+ */
OO.ui.ProcessDialog.prototype.attachActions = function () {
var i, len, other, special, others;
@@ -5942,18 +8032,13 @@ OO.ui.ProcessDialog.prototype.attachActions = function () {
others = this.actions.getOthers();
if ( special.primary ) {
this.$primaryActions.append( special.primary.$element );
- special.primary.toggleFramed( true );
}
- if ( others.length ) {
- for ( i = 0, len = others.length; i < len; i++ ) {
- other = others[i];
- this.$otherActions.append( other.$element );
- other.toggleFramed( true );
- }
+ for ( i = 0, len = others.length; i < len; i++ ) {
+ other = others[ i ];
+ this.$otherActions.append( other.$element );
}
if ( special.safe ) {
this.$safeActions.append( special.safe.$element );
- special.safe.toggleFramed( true );
}
this.fitLabel();
@@ -5964,13 +8049,17 @@ OO.ui.ProcessDialog.prototype.attachActions = function () {
* @inheritdoc
*/
OO.ui.ProcessDialog.prototype.executeAction = function ( action ) {
- OO.ui.ProcessDialog.super.prototype.executeAction.call( this, action )
- .fail( OO.ui.bind( this.showErrors, this ) );
+ var process = this;
+ return OO.ui.ProcessDialog.super.prototype.executeAction.call( this, action )
+ .fail( function ( errors ) {
+ process.showErrors( errors || [] );
+ } );
};
/**
* Fit label between actions.
*
+ * @private
* @chainable
*/
OO.ui.ProcessDialog.prototype.fitLabel = function () {
@@ -5984,59 +8073,740 @@ OO.ui.ProcessDialog.prototype.fitLabel = function () {
};
/**
- * Handle errors that occured durring accept or reject processes.
+ * Handle errors that occurred during accept or reject processes.
*
- * @param {OO.ui.Error[]} errors Errors to be handled
+ * @private
+ * @param {OO.ui.Error[]|OO.ui.Error} errors Errors to be handled
*/
OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
- var i, len, $item,
+ var i, len, $item, actions,
items = [],
- recoverable = true;
+ abilities = {},
+ recoverable = true,
+ warning = false;
+
+ if ( errors instanceof OO.ui.Error ) {
+ errors = [ errors ];
+ }
for ( i = 0, len = errors.length; i < len; i++ ) {
- if ( !errors[i].isRecoverable() ) {
+ if ( !errors[ i ].isRecoverable() ) {
recoverable = false;
}
- $item = this.$( '<div>' )
+ if ( errors[ i ].isWarning() ) {
+ warning = true;
+ }
+ $item = $( '<div>' )
.addClass( 'oo-ui-processDialog-error' )
- .append( errors[i].getMessage() );
- items.push( $item[0] );
+ .append( errors[ i ].getMessage() );
+ items.push( $item[ 0 ] );
}
- this.$errorItems = this.$( items );
+ this.$errorItems = $( items );
if ( recoverable ) {
- this.retryButton.clearFlags().setFlags( this.currentAction.getFlags() );
+ abilities[this.currentAction] = true;
+ // Copy the flags from the first matching action
+ actions = this.actions.get( { actions: this.currentAction } );
+ if ( actions.length ) {
+ this.retryButton.clearFlags().setFlags( actions[0].getFlags() );
+ }
+ } else {
+ abilities[this.currentAction] = false;
+ this.actions.setAbilities( abilities );
+ }
+ if ( warning ) {
+ this.retryButton.setLabel( OO.ui.msg( 'ooui-dialog-process-continue' ) );
} else {
- this.currentAction.setDisabled( true );
+ this.retryButton.setLabel( OO.ui.msg( 'ooui-dialog-process-retry' ) );
}
this.retryButton.toggle( recoverable );
this.$errorsTitle.after( this.$errorItems );
- this.$errors.show().scrollTop( 0 );
+ this.$errors.removeClass( 'oo-ui-element-hidden' ).scrollTop( 0 );
};
/**
* Hide errors.
+ *
+ * @private
*/
OO.ui.ProcessDialog.prototype.hideErrors = function () {
- this.$errors.hide();
- this.$errorItems.remove();
- this.$errorItems = null;
+ this.$errors.addClass( 'oo-ui-element-hidden' );
+ if ( this.$errorItems ) {
+ this.$errorItems.remove();
+ this.$errorItems = null;
+ }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
+ // Parent method
+ return OO.ui.ProcessDialog.super.prototype.getTeardownProcess.call( this, data )
+ .first( function () {
+ // Make sure to hide errors
+ this.hideErrors();
+ }, this );
+};
+
+/**
+ * FieldLayouts are used with OO.ui.FieldsetLayout. Each FieldLayout requires a field-widget,
+ * which is a widget that is specified by reference before any optional configuration settings.
+ *
+ * Field layouts can be configured with help text and/or labels. Labels are aligned in one of four ways:
+ *
+ * - **left**: The label is placed before the field-widget and aligned with the left margin.
+ * A left-alignment is used for forms with many fields.
+ * - **right**: The label is placed before the field-widget and aligned to the right margin.
+ * A right-alignment is used for long but familiar forms which users tab through,
+ * verifying the current field with a quick glance at the label.
+ * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms
+ * that users fill out from top to bottom.
+ * - **inline**: The label is placed after the field-widget and aligned to the left.
+ * An inline-alignment is best used with checkboxes or radio buttons.
+ *
+ * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for examples and more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.LabelElement
+ *
+ * @constructor
+ * @param {OO.ui.Widget} fieldWidget Field widget
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [align='left'] Alignment of the label: 'left', 'right', 'top' or 'inline'
+ * @cfg {string} [help] Help text. When help text is specified, a help icon will appear
+ * in the upper-right corner of the rendered field.
+ */
+OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
+ config = fieldWidget;
+ fieldWidget = config.fieldWidget;
+ }
+
+ var hasInputWidget = fieldWidget instanceof OO.ui.InputWidget;
+
+ // Configuration initialization
+ config = $.extend( { align: 'left' }, config );
+
+ // Parent constructor
+ OO.ui.FieldLayout.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.LabelElement.call( this, config );
+
+ // Properties
+ this.fieldWidget = fieldWidget;
+ this.$field = $( '<div>' );
+ this.$body = $( '<' + ( hasInputWidget ? 'label' : 'div' ) + '>' );
+ this.align = null;
+ if ( config.help ) {
+ this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
+ classes: [ 'oo-ui-fieldLayout-help' ],
+ framed: false,
+ icon: 'info'
+ } );
+
+ this.popupButtonWidget.getPopup().$body.append(
+ $( '<div>' )
+ .text( config.help )
+ .addClass( 'oo-ui-fieldLayout-help-content' )
+ );
+ this.$help = this.popupButtonWidget.$element;
+ } else {
+ this.$help = $( [] );
+ }
+
+ // Events
+ if ( hasInputWidget ) {
+ this.$label.on( 'click', this.onLabelClick.bind( this ) );
+ }
+ this.fieldWidget.connect( this, { disable: 'onFieldDisable' } );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-fieldLayout' )
+ .append( this.$help, this.$body );
+ this.$body.addClass( 'oo-ui-fieldLayout-body' );
+ this.$field
+ .addClass( 'oo-ui-fieldLayout-field' )
+ .toggleClass( 'oo-ui-fieldLayout-disable', this.fieldWidget.isDisabled() )
+ .append( this.fieldWidget.$element );
+
+ this.setAlignment( config.align );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
+OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabelElement );
+
+/* Methods */
+
+/**
+ * Handle field disable events.
+ *
+ * @private
+ * @param {boolean} value Field is disabled
+ */
+OO.ui.FieldLayout.prototype.onFieldDisable = function ( value ) {
+ this.$element.toggleClass( 'oo-ui-fieldLayout-disabled', value );
+};
+
+/**
+ * Handle label mouse click events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.FieldLayout.prototype.onLabelClick = function () {
+ this.fieldWidget.simulateLabelClick();
+ return false;
+};
+
+/**
+ * Get the widget contained by the field.
+ *
+ * @return {OO.ui.Widget} Field widget
+ */
+OO.ui.FieldLayout.prototype.getField = function () {
+ return this.fieldWidget;
+};
+
+/**
+ * Set the field alignment mode.
+ *
+ * @private
+ * @param {string} value Alignment mode, either 'left', 'right', 'top' or 'inline'
+ * @chainable
+ */
+OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
+ if ( value !== this.align ) {
+ // Default to 'left'
+ if ( [ 'left', 'right', 'top', 'inline' ].indexOf( value ) === -1 ) {
+ value = 'left';
+ }
+ // Reorder elements
+ if ( value === 'inline' ) {
+ this.$body.append( this.$field, this.$label );
+ } else {
+ this.$body.append( this.$label, this.$field );
+ }
+ // Set classes. The following classes can be used here:
+ // * oo-ui-fieldLayout-align-left
+ // * oo-ui-fieldLayout-align-right
+ // * oo-ui-fieldLayout-align-top
+ // * oo-ui-fieldLayout-align-inline
+ if ( this.align ) {
+ this.$element.removeClass( 'oo-ui-fieldLayout-align-' + this.align );
+ }
+ this.$element.addClass( 'oo-ui-fieldLayout-align-' + value );
+ this.align = value;
+ }
+
+ return this;
+};
+
+/**
+ * ActionFieldLayouts are used with OO.ui.FieldsetLayout. The layout consists of a field-widget, a button,
+ * and an optional label and/or help text. The field-widget (e.g., a {@link OO.ui.TextInputWidget TextInputWidget}),
+ * is required and is specified before any optional configuration settings.
+ *
+ * Labels can be aligned in one of four ways:
+ *
+ * - **left**: The label is placed before the field-widget and aligned with the left margin.
+ * A left-alignment is used for forms with many fields.
+ * - **right**: The label is placed before the field-widget and aligned to the right margin.
+ * A right-alignment is used for long but familiar forms which users tab through,
+ * verifying the current field with a quick glance at the label.
+ * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms
+ * that users fill out from top to bottom.
+ * - **inline**: The label is placed after the field-widget and aligned to the left.
+ * An inline-alignment is best used with checkboxes or radio buttons.
+ *
+ * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout when help
+ * text is specified.
+ *
+ * @example
+ * // Example of an ActionFieldLayout
+ * var actionFieldLayout = new OO.ui.ActionFieldLayout(
+ * new OO.ui.TextInputWidget( {
+ * placeholder: 'Field widget'
+ * } ),
+ * new OO.ui.ButtonWidget( {
+ * label: 'Button'
+ * } ),
+ * {
+ * label: 'An ActionFieldLayout. This label is aligned top',
+ * align: 'top',
+ * help: 'This is help text'
+ * }
+ * );
+ *
+ * $( 'body' ).append( actionFieldLayout.$element );
+ *
+ *
+ * @class
+ * @extends OO.ui.FieldLayout
+ *
+ * @constructor
+ * @param {OO.ui.Widget} fieldWidget Field widget
+ * @param {OO.ui.ButtonWidget} buttonWidget Button widget
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [align='left'] Alignment of the label: 'left', 'right', 'top' or 'inline'
+ * @cfg {string} [help] Help text. When help text is specified, a help icon will appear in the
+ * upper-right corner of the rendered field.
+ */
+OO.ui.ActionFieldLayout = function OoUiActionFieldLayout( fieldWidget, buttonWidget, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
+ config = fieldWidget;
+ fieldWidget = config.fieldWidget;
+ buttonWidget = config.buttonWidget;
+ }
+
+ // Configuration initialization
+ config = $.extend( { align: 'left' }, config );
+
+ // Parent constructor
+ OO.ui.ActionFieldLayout.super.call( this, fieldWidget, config );
+
+ // Properties
+ this.fieldWidget = fieldWidget;
+ this.buttonWidget = buttonWidget;
+ this.$button = $( '<div>' )
+ .addClass( 'oo-ui-actionFieldLayout-button' )
+ .append( this.buttonWidget.$element );
+ this.$input = $( '<div>' )
+ .addClass( 'oo-ui-actionFieldLayout-input' )
+ .append( this.fieldWidget.$element );
+ this.$field
+ .addClass( 'oo-ui-actionFieldLayout' )
+ .append( this.$input, this.$button );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ActionFieldLayout, OO.ui.FieldLayout );
+
+/**
+ * FieldsetLayouts are composed of one or more {@link OO.ui.FieldLayout FieldLayouts},
+ * which each contain an individual widget and, optionally, a label. Each Fieldset can be
+ * configured with a label as well. For more information and examples,
+ * please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example of a fieldset layout
+ * var input1 = new OO.ui.TextInputWidget( {
+ * placeholder: 'A text input field'
+ * } );
+ *
+ * var input2 = new OO.ui.TextInputWidget( {
+ * placeholder: 'A text input field'
+ * } );
+ *
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'Example of a fieldset layout'
+ * } );
+ *
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( input1, {
+ * label: 'Field One'
+ * } ),
+ * new OO.ui.FieldLayout( input2, {
+ * label: 'Field Two'
+ * } )
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets
+ *
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.FieldLayout[]} [items] An array of fields to add to the fieldset. See OO.ui.FieldLayout for more information about fields.
+ */
+OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.FieldsetLayout.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.IconElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.GroupElement.call( this, config );
+
+ if ( config.help ) {
+ this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
+ classes: [ 'oo-ui-fieldsetLayout-help' ],
+ framed: false,
+ icon: 'info'
+ } );
+
+ this.popupButtonWidget.getPopup().$body.append(
+ $( '<div>' )
+ .text( config.help )
+ .addClass( 'oo-ui-fieldsetLayout-help-content' )
+ );
+ this.$help = this.popupButtonWidget.$element;
+ } else {
+ this.$help = $( [] );
+ }
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-fieldsetLayout' )
+ .prepend( this.$help, this.$icon, this.$label, this.$group );
+ if ( Array.isArray( config.items ) ) {
+ this.addItems( config.items );
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
+
+/**
+ * FormLayouts are used to wrap {@link OO.ui.FieldsetLayout FieldsetLayouts} when you intend to use browser-based
+ * form submission for the fields instead of handling them in JavaScript. Form layouts can be configured with an
+ * HTML form action, an encoding type, and a method using the #action, #enctype, and #method configs, respectively.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
+ *
+ * Only widgets from the {@link OO.ui.InputWidget InputWidget} family support form submission. It
+ * includes standard form elements like {@link OO.ui.CheckboxInputWidget checkboxes}, {@link
+ * OO.ui.RadioInputWidget radio buttons} and {@link OO.ui.TextInputWidget text fields}, as well as
+ * some fancier controls. Some controls have both regular and InputWidget variants, for example
+ * OO.ui.DropdownWidget and OO.ui.DropdownInputWidget – only the latter support form submission and
+ * often have simplified APIs to match the capabilities of HTML forms.
+ * See the [OOjs UI Inputs documentation on MediaWiki] [2] for more information about InputWidgets.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Forms
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @example
+ * // Example of a form layout that wraps a fieldset layout
+ * var input1 = new OO.ui.TextInputWidget( {
+ * placeholder: 'Username'
+ * } );
+ * var input2 = new OO.ui.TextInputWidget( {
+ * placeholder: 'Password',
+ * type: 'password'
+ * } );
+ * var submit = new OO.ui.ButtonInputWidget( {
+ * label: 'Submit'
+ * } );
+ *
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'A form layout'
+ * } );
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( input1, {
+ * label: 'Username',
+ * align: 'top'
+ * } ),
+ * new OO.ui.FieldLayout( input2, {
+ * label: 'Password',
+ * align: 'top'
+ * } ),
+ * new OO.ui.FieldLayout( submit )
+ * ] );
+ * var form = new OO.ui.FormLayout( {
+ * items: [ fieldset ],
+ * action: '/api/formhandler',
+ * method: 'get'
+ * } )
+ * $( 'body' ).append( form.$element );
+ *
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [method] HTML form `method` attribute
+ * @cfg {string} [action] HTML form `action` attribute
+ * @cfg {string} [enctype] HTML form `enctype` attribute
+ * @cfg {OO.ui.FieldsetLayout[]} [items] Fieldset layouts to add to the form layout.
+ */
+OO.ui.FormLayout = function OoUiFormLayout( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.FormLayout.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
+ // Events
+ this.$element.on( 'submit', this.onFormSubmit.bind( this ) );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-formLayout' )
+ .attr( {
+ method: config.method,
+ action: config.action,
+ enctype: config.enctype
+ } );
+ if ( Array.isArray( config.items ) ) {
+ this.addItems( config.items );
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.FormLayout, OO.ui.Layout );
+OO.mixinClass( OO.ui.FormLayout, OO.ui.GroupElement );
+
+/* Events */
+
+/**
+ * A 'submit' event is emitted when the form is submitted.
+ *
+ * @event submit
+ */
+
+/* Static Properties */
+
+OO.ui.FormLayout.static.tagName = 'form';
+
+/* Methods */
+
+/**
+ * Handle form submit events.
+ *
+ * @private
+ * @param {jQuery.Event} e Submit event
+ * @fires submit
+ */
+OO.ui.FormLayout.prototype.onFormSubmit = function () {
+ if ( this.emit( 'submit' ) ) {
+ return false;
+ }
};
/**
- * Layout containing a series of pages.
+ * 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)
+ * and its size is customized with the #menuSize config. The content area will fill all remaining space.
+ *
+ * @example
+ * var menuLayout = new OO.ui.MenuLayout( {
+ * position: 'top'
+ * } ),
+ * menuPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),
+ * contentPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),
+ * select = new OO.ui.SelectWidget( {
+ * items: [
+ * new OO.ui.OptionWidget( {
+ * data: 'before',
+ * label: 'Before',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'after',
+ * label: 'After',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'top',
+ * label: 'Top',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'bottom',
+ * label: 'Bottom',
+ * } )
+ * ]
+ * } ).on( 'select', function ( item ) {
+ * menuLayout.setMenuPosition( item.getData() );
+ * } );
+ *
+ * menuLayout.$menu.append(
+ * menuPanel.$element.append( '<b>Menu panel</b>', select.$element )
+ * );
+ * menuLayout.$content.append(
+ * contentPanel.$element.append( '<b>Content panel</b>', '<p>Note that the menu is positioned relative to the content panel: top, bottom, after, before.</p>')
+ * );
+ * $( 'body' ).append( menuLayout.$element );
+ *
+ * If menu size needs to be overridden, it can be accomplished using CSS similar to the snippet
+ * below. MenuLayout's CSS will override the appropriate values with 'auto' or '0' to display the
+ * menu correctly. If `menuPosition` is known beforehand, CSS rules corresponding to other positions
+ * may be omitted.
+ *
+ * .oo-ui-menuLayout-menu {
+ * height: 200px;
+ * width: 200px;
+ * }
+ * .oo-ui-menuLayout-content {
+ * top: 200px;
+ * left: 200px;
+ * right: 200px;
+ * bottom: 200px;
+ * }
*
* @class
* @extends OO.ui.Layout
*
* @constructor
* @param {Object} [config] Configuration options
+ * @cfg {boolean} [showMenu=true] Show menu
+ * @cfg {string} [menuPosition='before'] Position of menu: `top`, `after`, `bottom` or `before`
+ */
+OO.ui.MenuLayout = function OoUiMenuLayout( config ) {
+ // Configuration initialization
+ config = $.extend( {
+ showMenu: true,
+ menuPosition: 'before'
+ }, config );
+
+ // Parent constructor
+ OO.ui.MenuLayout.super.call( this, config );
+
+ /**
+ * Menu DOM node
+ *
+ * @property {jQuery}
+ */
+ this.$menu = $( '<div>' );
+ /**
+ * Content DOM node
+ *
+ * @property {jQuery}
+ */
+ this.$content = $( '<div>' );
+
+ // Initialization
+ this.$menu
+ .addClass( 'oo-ui-menuLayout-menu' );
+ this.$content.addClass( 'oo-ui-menuLayout-content' );
+ this.$element
+ .addClass( 'oo-ui-menuLayout' )
+ .append( this.$content, this.$menu );
+ this.setMenuPosition( config.menuPosition );
+ this.toggleMenu( config.showMenu );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.MenuLayout, OO.ui.Layout );
+
+/* Methods */
+
+/**
+ * Toggle menu.
+ *
+ * @param {boolean} showMenu Show menu, omit to toggle
+ * @chainable
+ */
+OO.ui.MenuLayout.prototype.toggleMenu = function ( showMenu ) {
+ showMenu = showMenu === undefined ? !this.showMenu : !!showMenu;
+
+ if ( this.showMenu !== showMenu ) {
+ this.showMenu = showMenu;
+ this.$element
+ .toggleClass( 'oo-ui-menuLayout-showMenu', this.showMenu )
+ .toggleClass( 'oo-ui-menuLayout-hideMenu', !this.showMenu );
+ }
+
+ return this;
+};
+
+/**
+ * Check if menu is visible
+ *
+ * @return {boolean} Menu is visible
+ */
+OO.ui.MenuLayout.prototype.isMenuVisible = function () {
+ return this.showMenu;
+};
+
+/**
+ * Set menu position.
+ *
+ * @param {string} position Position of menu, either `top`, `after`, `bottom` or `before`
+ * @throws {Error} If position value is not supported
+ * @chainable
+ */
+OO.ui.MenuLayout.prototype.setMenuPosition = function ( position ) {
+ this.$element.removeClass( 'oo-ui-menuLayout-' + this.menuPosition );
+ this.menuPosition = position;
+ this.$element.addClass( 'oo-ui-menuLayout-' + position );
+
+ return this;
+};
+
+/**
+ * Get menu position.
+ *
+ * @return {string} Menu position
+ */
+OO.ui.MenuLayout.prototype.getMenuPosition = function () {
+ return this.menuPosition;
+};
+
+/**
+ * BookletLayouts contain {@link OO.ui.PageLayout page layouts} as well as
+ * an {@link OO.ui.OutlineSelectWidget outline} that allows users to easily navigate
+ * through the pages and select which one to display. By default, only one page is
+ * displayed at a time and the outline is hidden. When a user navigates to a new page,
+ * the booklet layout automatically focuses on the first focusable element, unless the
+ * default setting is changed. Optionally, booklets can be configured to show
+ * {@link OO.ui.OutlineControlsWidget controls} for adding, moving, and removing items.
+ *
+ * @example
+ * // Example of a BookletLayout that contains two PageLayouts.
+ *
+ * function PageOneLayout( name, config ) {
+ * PageOneLayout.super.call( this, name, config );
+ * this.$element.append( '<p>First page</p><p>(This booklet has an outline, displayed on the left)</p>' );
+ * }
+ * OO.inheritClass( PageOneLayout, OO.ui.PageLayout );
+ * PageOneLayout.prototype.setupOutlineItem = function () {
+ * this.outlineItem.setLabel( 'Page One' );
+ * };
+ *
+ * function PageTwoLayout( name, config ) {
+ * PageTwoLayout.super.call( this, name, config );
+ * this.$element.append( '<p>Second page</p>' );
+ * }
+ * OO.inheritClass( PageTwoLayout, OO.ui.PageLayout );
+ * PageTwoLayout.prototype.setupOutlineItem = function () {
+ * this.outlineItem.setLabel( 'Page Two' );
+ * };
+ *
+ * var page1 = new PageOneLayout( 'one' ),
+ * page2 = new PageTwoLayout( 'two' );
+ *
+ * var booklet = new OO.ui.BookletLayout( {
+ * outlined: true
+ * } );
+ *
+ * booklet.addPages ( [ page1, page2 ] );
+ * $( 'body' ).append( booklet.$element );
+ *
+ * @class
+ * @extends OO.ui.MenuLayout
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
* @cfg {boolean} [continuous=false] Show all pages, one after another
- * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when changing to a page
- * @cfg {boolean} [outlined=false] Show an outline
+ * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new page is displayed.
+ * @cfg {boolean} [outlined=false] Show the outline. The outline is used to navigate through the pages of the booklet.
* @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages
*/
OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
- // Initialize configuration
+ // Configuration initialization
config = config || {};
// Parent constructor
@@ -6046,35 +8816,34 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
this.currentPageName = null;
this.pages = {};
this.ignoreFocus = false;
- this.stackLayout = new OO.ui.StackLayout( { $: this.$, continuous: !!config.continuous } );
+ this.stackLayout = new OO.ui.StackLayout( { continuous: !!config.continuous } );
+ this.$content.append( this.stackLayout.$element );
this.autoFocus = config.autoFocus === undefined || !!config.autoFocus;
this.outlineVisible = false;
this.outlined = !!config.outlined;
if ( this.outlined ) {
this.editable = !!config.editable;
this.outlineControlsWidget = null;
- this.outlineWidget = new OO.ui.OutlineWidget( { $: this.$ } );
- this.outlinePanel = new OO.ui.PanelLayout( { $: this.$, scrollable: true } );
- this.gridLayout = new OO.ui.GridLayout(
- [ this.outlinePanel, this.stackLayout ],
- { $: this.$, widths: [ 1, 2 ] }
- );
+ this.outlineSelectWidget = new OO.ui.OutlineSelectWidget();
+ this.outlinePanel = new OO.ui.PanelLayout( { scrollable: true } );
+ this.$menu.append( this.outlinePanel.$element );
this.outlineVisible = true;
if ( this.editable ) {
this.outlineControlsWidget = new OO.ui.OutlineControlsWidget(
- this.outlineWidget, { $: this.$ }
+ this.outlineSelectWidget
);
}
}
+ this.toggleMenu( this.outlined );
// Events
this.stackLayout.connect( this, { set: 'onStackLayoutSet' } );
if ( this.outlined ) {
- this.outlineWidget.connect( this, { select: 'onOutlineWidgetSelect' } );
+ this.outlineSelectWidget.connect( this, { select: 'onOutlineSelectWidgetSelect' } );
}
if ( this.autoFocus ) {
// Event 'focus' does not bubble, but 'focusin' does
- this.stackLayout.onDOMEvent( 'focusin', OO.ui.bind( this.onStackLayoutFocus, this ) );
+ this.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );
}
// Initialization
@@ -6083,36 +8852,39 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
if ( this.outlined ) {
this.outlinePanel.$element
.addClass( 'oo-ui-bookletLayout-outlinePanel' )
- .append( this.outlineWidget.$element );
+ .append( this.outlineSelectWidget.$element );
if ( this.editable ) {
this.outlinePanel.$element
.addClass( 'oo-ui-bookletLayout-outlinePanel-editable' )
.append( this.outlineControlsWidget.$element );
}
- this.$element.append( this.gridLayout.$element );
- } else {
- this.$element.append( this.stackLayout.$element );
}
};
/* Setup */
-OO.inheritClass( OO.ui.BookletLayout, OO.ui.Layout );
+OO.inheritClass( OO.ui.BookletLayout, OO.ui.MenuLayout );
/* Events */
/**
+ * A 'set' event is emitted when a page is {@link #setPage set} to be displayed by the booklet layout.
* @event set
* @param {OO.ui.PageLayout} page Current page
*/
/**
+ * An 'add' event is emitted when pages are {@link #addPages added} to the booklet layout.
+ *
* @event add
* @param {OO.ui.PageLayout[]} page Added pages
* @param {number} index Index pages were added at
*/
/**
+ * A 'remove' event is emitted when pages are {@link #clearPages cleared} or
+ * {@link #removePages removed} from the booklet.
+ *
* @event remove
* @param {OO.ui.PageLayout[]} pages Removed pages
*/
@@ -6122,6 +8894,7 @@ OO.inheritClass( OO.ui.BookletLayout, OO.ui.Layout );
/**
* Handle stack layout focus.
*
+ * @private
* @param {jQuery.Event} e Focusin event
*/
OO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {
@@ -6131,7 +8904,7 @@ OO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {
$target = $( e.target ).closest( '.oo-ui-pageLayout' );
for ( name in this.pages ) {
// Check for page match, exclude current page to find only page changes
- if ( this.pages[name].$element[0] === $target[0] && name !== this.currentPageName ) {
+ if ( this.pages[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentPageName ) {
this.setPage( name );
break;
}
@@ -6141,31 +8914,89 @@ OO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {
/**
* Handle stack layout set events.
*
+ * @private
* @param {OO.ui.PanelLayout|null} page The page panel that is now the current panel
*/
OO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {
- var $input, layout = this;
+ var layout = this;
if ( page ) {
page.scrollElementIntoView( { complete: function () {
if ( layout.autoFocus ) {
- // Set focus to the first input if nothing on the page is focused yet
- if ( !page.$element.find( ':focus' ).length ) {
- $input = page.$element.find( ':input:first' );
- if ( $input.length ) {
- $input[0].focus();
- }
- }
+ layout.focus();
}
} } );
}
};
/**
+ * Focus the first input in the current page.
+ *
+ * If no page is selected, the first selectable page will be selected.
+ * If the focus is already in an element on the current page, nothing will happen.
+ * @param {number} [itemIndex] A specific item to focus on
+ */
+OO.ui.BookletLayout.prototype.focus = function ( itemIndex ) {
+ var $input, page,
+ items = this.stackLayout.getItems();
+
+ if ( itemIndex !== undefined && items[ itemIndex ] ) {
+ page = items[ itemIndex ];
+ } else {
+ page = this.stackLayout.getCurrentItem();
+ }
+
+ if ( !page && this.outlined ) {
+ this.selectFirstSelectablePage();
+ page = this.stackLayout.getCurrentItem();
+ }
+ if ( !page ) {
+ return;
+ }
+ // Only change the focus if is not already in the current page
+ if ( !page.$element.find( ':focus' ).length ) {
+ $input = page.$element.find( ':input:first' );
+ if ( $input.length ) {
+ $input[ 0 ].focus();
+ }
+ }
+};
+
+/**
+ * Find the first focusable input in the booklet layout and focus
+ * on it.
+ */
+OO.ui.BookletLayout.prototype.focusFirstFocusable = function () {
+ var i, len,
+ found = false,
+ items = this.stackLayout.getItems(),
+ checkAndFocus = function () {
+ if ( OO.ui.isFocusableElement( $( this ) ) ) {
+ $( this ).focus();
+ found = true;
+ return false;
+ }
+ };
+
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ if ( found ) {
+ break;
+ }
+ // Find all potentially focusable elements in the item
+ // and check if they are focusable
+ items[i].$element
+ .find( 'input, select, textarea, button, object' )
+ /* jshint loopfunc:true */
+ .each( checkAndFocus );
+ }
+};
+
+/**
* Handle outline widget select events.
*
+ * @private
* @param {OO.ui.OptionWidget|null} item Selected item
*/
-OO.ui.BookletLayout.prototype.onOutlineWidgetSelect = function ( item ) {
+OO.ui.BookletLayout.prototype.onOutlineSelectWidgetSelect = function ( item ) {
if ( item ) {
this.setPage( item.getData() );
}
@@ -6174,7 +9005,7 @@ OO.ui.BookletLayout.prototype.onOutlineWidgetSelect = function ( item ) {
/**
* Check if booklet has an outline.
*
- * @return {boolean}
+ * @return {boolean} Booklet has an outline
*/
OO.ui.BookletLayout.prototype.isOutlined = function () {
return this.outlined;
@@ -6183,7 +9014,7 @@ OO.ui.BookletLayout.prototype.isOutlined = function () {
/**
* Check if booklet has editing controls.
*
- * @return {boolean}
+ * @return {boolean} Booklet is editable
*/
OO.ui.BookletLayout.prototype.isEditable = function () {
return this.editable;
@@ -6192,7 +9023,7 @@ OO.ui.BookletLayout.prototype.isEditable = function () {
/**
* Check if booklet has a visible outline.
*
- * @return {boolean}
+ * @return {boolean} Outline is visible
*/
OO.ui.BookletLayout.prototype.isOutlineVisible = function () {
return this.outlined && this.outlineVisible;
@@ -6208,17 +9039,17 @@ OO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {
if ( this.outlined ) {
show = show === undefined ? !this.outlineVisible : !!show;
this.outlineVisible = show;
- this.gridLayout.layout( show ? [ 1, 2 ] : [ 0, 1 ], [ 1 ] );
+ this.toggleMenu( show );
}
return this;
};
/**
- * Get the outline widget.
+ * Get the page closest to the specified page.
*
- * @param {OO.ui.PageLayout} page Page to be selected
- * @return {OO.ui.PageLayout|null} Closest page to another
+ * @param {OO.ui.PageLayout} page Page to use as a reference point
+ * @return {OO.ui.PageLayout|null} Page closest to the specified page
*/
OO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {
var next, prev, level,
@@ -6226,20 +9057,20 @@ OO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {
index = $.inArray( page, pages );
if ( index !== -1 ) {
- next = pages[index + 1];
- prev = pages[index - 1];
+ next = pages[ index + 1 ];
+ prev = pages[ index - 1 ];
// Prefer adjacent pages at the same level
if ( this.outlined ) {
- level = this.outlineWidget.getItemFromData( page.getName() ).getLevel();
+ level = this.outlineSelectWidget.getItemFromData( page.getName() ).getLevel();
if (
prev &&
- level === this.outlineWidget.getItemFromData( prev.getName() ).getLevel()
+ level === this.outlineSelectWidget.getItemFromData( prev.getName() ).getLevel()
) {
return prev;
}
if (
next &&
- level === this.outlineWidget.getItemFromData( next.getName() ).getLevel()
+ level === this.outlineSelectWidget.getItemFromData( next.getName() ).getLevel()
) {
return next;
}
@@ -6251,14 +9082,18 @@ OO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {
/**
* Get the outline widget.
*
- * @return {OO.ui.OutlineWidget|null} Outline widget, or null if boolet has no outline
+ * If the booklet is not outlined, the method will return `null`.
+ *
+ * @return {OO.ui.OutlineSelectWidget|null} Outline widget, or null if the booklet is not outlined
*/
OO.ui.BookletLayout.prototype.getOutline = function () {
- return this.outlineWidget;
+ return this.outlineSelectWidget;
};
/**
- * Get the outline controls widget. If the outline is not editable, null is returned.
+ * Get the outline controls widget.
+ *
+ * If the outline is not editable, the method will return `null`.
*
* @return {OO.ui.OutlineControlsWidget|null} The outline controls widget.
*/
@@ -6267,32 +9102,42 @@ OO.ui.BookletLayout.prototype.getOutlineControls = function () {
};
/**
- * Get a page by name.
+ * Get a page by its symbolic name.
*
* @param {string} name Symbolic name of page
* @return {OO.ui.PageLayout|undefined} Page, if found
*/
OO.ui.BookletLayout.prototype.getPage = function ( name ) {
- return this.pages[name];
+ return this.pages[ name ];
};
/**
- * Get the current page name.
+ * Get the current page.
*
- * @return {string|null} Current page name
+ * @return {OO.ui.PageLayout|undefined} Current page, if found
*/
-OO.ui.BookletLayout.prototype.getPageName = function () {
+OO.ui.BookletLayout.prototype.getCurrentPage = function () {
+ var name = this.getCurrentPageName();
+ return name ? this.getPage( name ) : undefined;
+};
+
+/**
+ * Get the symbolic name of the current page.
+ *
+ * @return {string|null} Symbolic name of the current page
+ */
+OO.ui.BookletLayout.prototype.getCurrentPageName = function () {
return this.currentPageName;
};
/**
- * Add a page to the layout.
+ * Add pages to the booklet layout
*
* When pages are added with the same names as existing pages, the existing pages will be
* automatically removed before the new pages are added.
*
* @param {OO.ui.PageLayout[]} pages Pages to add
- * @param {number} index Index to insert pages after
+ * @param {number} index Index of the insertion point
* @fires add
* @chainable
*/
@@ -6304,16 +9149,16 @@ OO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {
// Remove pages with same names
for ( i = 0, len = pages.length; i < len; i++ ) {
- page = pages[i];
+ page = pages[ i ];
name = page.getName();
if ( Object.prototype.hasOwnProperty.call( this.pages, name ) ) {
// Correct the insertion index
- currentIndex = $.inArray( this.pages[name], stackLayoutPages );
+ currentIndex = $.inArray( this.pages[ name ], stackLayoutPages );
if ( currentIndex !== -1 && currentIndex + 1 < index ) {
index--;
}
- remove.push( this.pages[name] );
+ remove.push( this.pages[ name ] );
}
}
if ( remove.length ) {
@@ -6322,19 +9167,19 @@ OO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {
// Add new pages
for ( i = 0, len = pages.length; i < len; i++ ) {
- page = pages[i];
+ page = pages[ i ];
name = page.getName();
- this.pages[page.getName()] = page;
+ this.pages[ page.getName() ] = page;
if ( this.outlined ) {
- item = new OO.ui.OutlineItemWidget( name, page, { $: this.$ } );
+ item = new OO.ui.OutlineOptionWidget( { data: name } );
page.setOutlineItem( item );
items.push( item );
}
}
if ( this.outlined && items.length ) {
- this.outlineWidget.addItems( items, index );
- this.updateOutlineWidget();
+ this.outlineSelectWidget.addItems( items, index );
+ this.selectFirstSelectablePage();
}
this.stackLayout.addItems( pages, index );
this.emit( 'add', pages, index );
@@ -6343,8 +9188,11 @@ OO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {
};
/**
- * Remove a page from the layout.
+ * Remove the specified pages from the booklet layout.
+ *
+ * To remove all pages from the booklet, you may wish to use the #clearPages method instead.
*
+ * @param {OO.ui.PageLayout[]} pages An array of pages to remove
* @fires remove
* @chainable
*/
@@ -6353,17 +9201,17 @@ OO.ui.BookletLayout.prototype.removePages = function ( pages ) {
items = [];
for ( i = 0, len = pages.length; i < len; i++ ) {
- page = pages[i];
+ page = pages[ i ];
name = page.getName();
- delete this.pages[name];
+ delete this.pages[ name ];
if ( this.outlined ) {
- items.push( this.outlineWidget.getItemFromData( name ) );
+ items.push( this.outlineSelectWidget.getItemFromData( name ) );
page.setOutlineItem( null );
}
}
if ( this.outlined && items.length ) {
- this.outlineWidget.removeItems( items );
- this.updateOutlineWidget();
+ this.outlineSelectWidget.removeItems( items );
+ this.selectFirstSelectablePage();
}
this.stackLayout.removeItems( pages );
this.emit( 'remove', pages );
@@ -6372,7 +9220,9 @@ OO.ui.BookletLayout.prototype.removePages = function ( pages ) {
};
/**
- * Clear all pages from the layout.
+ * Clear all pages from the booklet layout.
+ *
+ * To remove only a subset of pages from the booklet, use the #removePages method.
*
* @fires remove
* @chainable
@@ -6384,9 +9234,9 @@ OO.ui.BookletLayout.prototype.clearPages = function () {
this.pages = {};
this.currentPageName = null;
if ( this.outlined ) {
- this.outlineWidget.clearItems();
+ this.outlineSelectWidget.clearItems();
for ( i = 0, len = pages.length; i < len; i++ ) {
- pages[i].setOutlineItem( null );
+ pages[ i ].setOutlineItem( null );
}
}
this.stackLayout.clearItems();
@@ -6397,7 +9247,7 @@ OO.ui.BookletLayout.prototype.clearPages = function () {
};
/**
- * Set the current page by name.
+ * Set the current page by symbolic name.
*
* @fires set
* @param {string} name Symbolic name of page
@@ -6405,25 +9255,25 @@ OO.ui.BookletLayout.prototype.clearPages = function () {
OO.ui.BookletLayout.prototype.setPage = function ( name ) {
var selectedItem,
$focused,
- page = this.pages[name];
+ page = this.pages[ name ];
if ( name !== this.currentPageName ) {
if ( this.outlined ) {
- selectedItem = this.outlineWidget.getSelectedItem();
+ selectedItem = this.outlineSelectWidget.getSelectedItem();
if ( selectedItem && selectedItem.getData() !== name ) {
- this.outlineWidget.selectItem( this.outlineWidget.getItemFromData( name ) );
+ this.outlineSelectWidget.selectItemByData( name );
}
}
if ( page ) {
- if ( this.currentPageName && this.pages[this.currentPageName] ) {
- this.pages[this.currentPageName].setActive( false );
+ if ( this.currentPageName && this.pages[ this.currentPageName ] ) {
+ this.pages[ this.currentPageName ].setActive( false );
// Blur anything focused if the next page doesn't have anything focusable - this
// is not needed if the next page has something focusable because once it is focused
// this blur happens automatically
if ( this.autoFocus && !page.$element.find( ':input' ).length ) {
- $focused = this.pages[this.currentPageName].$element.find( ':focus' );
+ $focused = this.pages[ this.currentPageName ].$element.find( ':focus' );
if ( $focused.length ) {
- $focused[0].blur();
+ $focused[ 0 ].blur();
}
}
}
@@ -6436,421 +9286,484 @@ OO.ui.BookletLayout.prototype.setPage = function ( name ) {
};
/**
- * Call this after adding or removing items from the OutlineWidget.
+ * Select the first selectable page.
*
* @chainable
*/
-OO.ui.BookletLayout.prototype.updateOutlineWidget = function () {
- // Auto-select first item when nothing is selected anymore
- if ( !this.outlineWidget.getSelectedItem() ) {
- this.outlineWidget.selectItem( this.outlineWidget.getFirstSelectableItem() );
+OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
+ if ( !this.outlineSelectWidget.getSelectedItem() ) {
+ this.outlineSelectWidget.selectItem( this.outlineSelectWidget.getFirstSelectableItem() );
}
return this;
};
/**
- * Layout made of a field and optional label.
+ * IndexLayouts contain {@link OO.ui.CardLayout card layouts} as well as
+ * {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the cards and
+ * select which one to display. By default, only one card is displayed at a time. When a user
+ * navigates to a new card, the index layout automatically focuses on the first focusable element,
+ * unless the default setting is changed.
*
- * @class
- * @extends OO.ui.Layout
- * @mixins OO.ui.LabelElement
+ * TODO: This class is similar to BookletLayout, we may want to refactor to reduce duplication
+ *
+ * @example
+ * // Example of a IndexLayout that contains two CardLayouts.
+ *
+ * function CardOneLayout( name, config ) {
+ * CardOneLayout.super.call( this, name, config );
+ * this.$element.append( '<p>First card</p>' );
+ * }
+ * OO.inheritClass( CardOneLayout, OO.ui.CardLayout );
+ * CardOneLayout.prototype.setupTabItem = function () {
+ * this.tabItem.setLabel( 'Card One' );
+ * };
+ *
+ * function CardTwoLayout( name, config ) {
+ * CardTwoLayout.super.call( this, name, config );
+ * this.$element.append( '<p>Second card</p>' );
+ * }
+ * OO.inheritClass( CardTwoLayout, OO.ui.CardLayout );
+ * CardTwoLayout.prototype.setupTabItem = function () {
+ * this.tabItem.setLabel( 'Card Two' );
+ * };
+ *
+ * var card1 = new CardOneLayout( 'one' ),
+ * card2 = new CardTwoLayout( 'two' );
+ *
+ * var index = new OO.ui.IndexLayout();
*
- * Available label alignment modes include:
- * - left: Label is before the field and aligned away from it, best for when the user will be
- * scanning for a specific label in a form with many fields
- * - right: Label is before the field and aligned toward it, best for forms the user is very
- * familiar with and will tab through field checking quickly to verify which field they are in
- * - top: Label is before the field and above it, best for when the use will need to fill out all
- * fields from top to bottom in a form with few fields
- * - inline: Label is after the field and aligned toward it, best for small boolean fields like
- * checkboxes or radio buttons
+ * index.addCards ( [ card1, card2 ] );
+ * $( 'body' ).append( index.$element );
+ *
+ * @class
+ * @extends OO.ui.MenuLayout
*
* @constructor
- * @param {OO.ui.Widget} field Field widget
* @param {Object} [config] Configuration options
- * @cfg {string} [align='left'] Alignment mode, either 'left', 'right', 'top' or 'inline'
- * @cfg {string} [help] Explanatory text shown as a '?' icon.
+ * @cfg {boolean} [continuous=false] Show all cards, one after another
+ * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new card is displayed.
*/
-OO.ui.FieldLayout = function OoUiFieldLayout( field, config ) {
- // Config initialization
- config = $.extend( { align: 'left' }, config );
+OO.ui.IndexLayout = function OoUiIndexLayout( config ) {
+ // Configuration initialization
+ config = $.extend( {}, config, { menuPosition: 'top' } );
// Parent constructor
- OO.ui.FieldLayout.super.call( this, config );
-
- // Mixin constructors
- OO.ui.LabelElement.call( this, config );
+ OO.ui.IndexLayout.super.call( this, config );
// Properties
- this.$field = this.$( '<div>' );
- this.field = field;
- this.align = null;
- if ( config.help ) {
- this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
- $: this.$,
- classes: [ 'oo-ui-fieldLayout-help' ],
- framed: false,
- icon: 'info'
- } );
+ this.currentCardName = null;
+ this.cards = {};
+ this.ignoreFocus = false;
+ this.stackLayout = new OO.ui.StackLayout( { continuous: !!config.continuous } );
+ this.$content.append( this.stackLayout.$element );
+ this.autoFocus = config.autoFocus === undefined || !!config.autoFocus;
- this.popupButtonWidget.getPopup().$body.append(
- this.$( '<div>' )
- .text( config.help )
- .addClass( 'oo-ui-fieldLayout-help-content' )
- );
- this.$help = this.popupButtonWidget.$element;
- } else {
- this.$help = this.$( [] );
- }
+ this.tabSelectWidget = new OO.ui.TabSelectWidget();
+ this.tabPanel = new OO.ui.PanelLayout();
+ this.$menu.append( this.tabPanel.$element );
+
+ this.toggleMenu( true );
// Events
- if ( this.field instanceof OO.ui.InputWidget ) {
- this.$label.on( 'click', OO.ui.bind( this.onLabelClick, this ) );
+ this.stackLayout.connect( this, { set: 'onStackLayoutSet' } );
+ this.tabSelectWidget.connect( this, { select: 'onTabSelectWidgetSelect' } );
+ if ( this.autoFocus ) {
+ // Event 'focus' does not bubble, but 'focusin' does
+ this.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );
}
- this.field.connect( this, { disable: 'onFieldDisable' } );
// Initialization
- this.$element.addClass( 'oo-ui-fieldLayout' );
- this.$field
- .addClass( 'oo-ui-fieldLayout-field' )
- .toggleClass( 'oo-ui-fieldLayout-disable', this.field.isDisabled() )
- .append( this.field.$element );
- this.setAlignment( config.align );
+ this.$element.addClass( 'oo-ui-indexLayout' );
+ this.stackLayout.$element.addClass( 'oo-ui-indexLayout-stackLayout' );
+ this.tabPanel.$element
+ .addClass( 'oo-ui-indexLayout-tabPanel' )
+ .append( this.tabSelectWidget.$element );
};
/* Setup */
-OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
-OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabelElement );
+OO.inheritClass( OO.ui.IndexLayout, OO.ui.MenuLayout );
-/* Methods */
+/* Events */
/**
- * Handle field disable events.
- *
- * @param {boolean} value Field is disabled
+ * A 'set' event is emitted when a card is {@link #setCard set} to be displayed by the index layout.
+ * @event set
+ * @param {OO.ui.CardLayout} card Current card
*/
-OO.ui.FieldLayout.prototype.onFieldDisable = function ( value ) {
- this.$element.toggleClass( 'oo-ui-fieldLayout-disabled', value );
-};
/**
- * Handle label mouse click events.
+ * An 'add' event is emitted when cards are {@link #addCards added} to the index layout.
*
- * @param {jQuery.Event} e Mouse click event
+ * @event add
+ * @param {OO.ui.CardLayout[]} card Added cards
+ * @param {number} index Index cards were added at
*/
-OO.ui.FieldLayout.prototype.onLabelClick = function () {
- this.field.simulateLabelClick();
- return false;
-};
/**
- * Get the field.
+ * A 'remove' event is emitted when cards are {@link #clearCards cleared} or
+ * {@link #removeCards removed} from the index.
*
- * @return {OO.ui.Widget} Field widget
+ * @event remove
+ * @param {OO.ui.CardLayout[]} cards Removed cards
*/
-OO.ui.FieldLayout.prototype.getField = function () {
- return this.field;
-};
+
+/* Methods */
/**
- * Set the field alignment mode.
+ * Handle stack layout focus.
*
- * @param {string} value Alignment mode, either 'left', 'right', 'top' or 'inline'
- * @chainable
+ * @private
+ * @param {jQuery.Event} e Focusin event
*/
-OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
- if ( value !== this.align ) {
- // Default to 'left'
- if ( [ 'left', 'right', 'top', 'inline' ].indexOf( value ) === -1 ) {
- value = 'left';
- }
- // Reorder elements
- if ( value === 'inline' ) {
- this.$element.append( this.$field, this.$label, this.$help );
- } else {
- this.$element.append( this.$help, this.$label, this.$field );
- }
- // Set classes
- if ( this.align ) {
- this.$element.removeClass( 'oo-ui-fieldLayout-align-' + this.align );
+OO.ui.IndexLayout.prototype.onStackLayoutFocus = function ( e ) {
+ var name, $target;
+
+ // Find the card that an element was focused within
+ $target = $( e.target ).closest( '.oo-ui-cardLayout' );
+ for ( name in this.cards ) {
+ // Check for card match, exclude current card to find only card changes
+ if ( this.cards[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentCardName ) {
+ this.setCard( name );
+ break;
}
- this.align = value;
- // The following classes can be used here:
- // oo-ui-fieldLayout-align-left
- // oo-ui-fieldLayout-align-right
- // oo-ui-fieldLayout-align-top
- // oo-ui-fieldLayout-align-inline
- this.$element.addClass( 'oo-ui-fieldLayout-align-' + this.align );
}
-
- return this;
};
/**
- * Layout made of a fieldset and optional legend.
- *
- * Just add OO.ui.FieldLayout items.
- *
- * @class
- * @extends OO.ui.Layout
- * @mixins OO.ui.LabelElement
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.GroupElement
+ * Handle stack layout set events.
*
- * @constructor
- * @param {Object} [config] Configuration options
- * @cfg {string} [icon] Symbolic icon name
- * @cfg {OO.ui.FieldLayout[]} [items] Items to add
+ * @private
+ * @param {OO.ui.PanelLayout|null} card The card panel that is now the current panel
*/
-OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
- // Config initialization
- config = config || {};
+OO.ui.IndexLayout.prototype.onStackLayoutSet = function ( card ) {
+ var layout = this;
+ if ( card ) {
+ card.scrollElementIntoView( { complete: function () {
+ if ( layout.autoFocus ) {
+ layout.focus();
+ }
+ } } );
+ }
+};
- // Parent constructor
- OO.ui.FieldsetLayout.super.call( this, config );
+/**
+ * Focus the first input in the current card.
+ *
+ * If no card is selected, the first selectable card will be selected.
+ * If the focus is already in an element on the current card, nothing will happen.
+ * @param {number} [itemIndex] A specific item to focus on
+ */
+OO.ui.IndexLayout.prototype.focus = function ( itemIndex ) {
+ var $input, card,
+ items = this.stackLayout.getItems();
- // Mixin constructors
- OO.ui.IconElement.call( this, config );
- OO.ui.LabelElement.call( this, config );
- OO.ui.GroupElement.call( this, config );
+ if ( itemIndex !== undefined && items[ itemIndex ] ) {
+ card = items[ itemIndex ];
+ } else {
+ card = this.stackLayout.getCurrentItem();
+ }
- // Initialization
- this.$element
- .addClass( 'oo-ui-fieldsetLayout' )
- .prepend( this.$icon, this.$label, this.$group );
- if ( $.isArray( config.items ) ) {
- this.addItems( config.items );
+ if ( !card ) {
+ this.selectFirstSelectableCard();
+ card = this.stackLayout.getCurrentItem();
+ }
+ if ( !card ) {
+ return;
+ }
+ // Only change the focus if is not already in the current card
+ if ( !card.$element.find( ':focus' ).length ) {
+ $input = card.$element.find( ':input:first' );
+ if ( $input.length ) {
+ $input[ 0 ].focus();
+ }
}
};
-/* Setup */
-
-OO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconElement );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
-
-/* Static Properties */
+/**
+ * Find the first focusable input in the index layout and focus
+ * on it.
+ */
+OO.ui.IndexLayout.prototype.focusFirstFocusable = function () {
+ var i, len,
+ found = false,
+ items = this.stackLayout.getItems(),
+ checkAndFocus = function () {
+ if ( OO.ui.isFocusableElement( $( this ) ) ) {
+ $( this ).focus();
+ found = true;
+ return false;
+ }
+ };
-OO.ui.FieldsetLayout.static.tagName = 'div';
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ if ( found ) {
+ break;
+ }
+ // Find all potentially focusable elements in the item
+ // and check if they are focusable
+ items[i].$element
+ .find( 'input, select, textarea, button, object' )
+ .each( checkAndFocus );
+ }
+};
/**
- * Layout with an HTML form.
- *
- * @class
- * @extends OO.ui.Layout
+ * Handle tab widget select events.
*
- * @constructor
- * @param {Object} [config] Configuration options
+ * @private
+ * @param {OO.ui.OptionWidget|null} item Selected item
*/
-OO.ui.FormLayout = function OoUiFormLayout( config ) {
- // Configuration initialization
- config = config || {};
-
- // Parent constructor
- OO.ui.FormLayout.super.call( this, config );
-
- // Events
- this.$element.on( 'submit', OO.ui.bind( this.onFormSubmit, this ) );
-
- // Initialization
- this.$element.addClass( 'oo-ui-formLayout' );
+OO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {
+ if ( item ) {
+ this.setCard( item.getData() );
+ }
};
-/* Setup */
-
-OO.inheritClass( OO.ui.FormLayout, OO.ui.Layout );
+/**
+ * Get the card closest to the specified card.
+ *
+ * @param {OO.ui.CardLayout} card Card to use as a reference point
+ * @return {OO.ui.CardLayout|null} Card closest to the specified card
+ */
+OO.ui.IndexLayout.prototype.getClosestCard = function ( card ) {
+ var next, prev, level,
+ cards = this.stackLayout.getItems(),
+ index = $.inArray( card, cards );
-/* Events */
+ if ( index !== -1 ) {
+ next = cards[ index + 1 ];
+ prev = cards[ index - 1 ];
+ // Prefer adjacent cards at the same level
+ level = this.tabSelectWidget.getItemFromData( card.getName() ).getLevel();
+ if (
+ prev &&
+ level === this.tabSelectWidget.getItemFromData( prev.getName() ).getLevel()
+ ) {
+ return prev;
+ }
+ if (
+ next &&
+ level === this.tabSelectWidget.getItemFromData( next.getName() ).getLevel()
+ ) {
+ return next;
+ }
+ }
+ return prev || next || null;
+};
/**
- * @event submit
+ * Get the tabs widget.
+ *
+ * @return {OO.ui.TabSelectWidget} Tabs widget
*/
+OO.ui.IndexLayout.prototype.getTabs = function () {
+ return this.tabSelectWidget;
+};
-/* Static Properties */
-
-OO.ui.FormLayout.static.tagName = 'form';
+/**
+ * Get a card by its symbolic name.
+ *
+ * @param {string} name Symbolic name of card
+ * @return {OO.ui.CardLayout|undefined} Card, if found
+ */
+OO.ui.IndexLayout.prototype.getCard = function ( name ) {
+ return this.cards[ name ];
+};
-/* Methods */
+/**
+ * Get the current card.
+ *
+ * @return {OO.ui.CardLayout|undefined} Current card, if found
+ */
+OO.ui.IndexLayout.prototype.getCurrentCard = function () {
+ var name = this.getCurrentCardName();
+ return name ? this.getCard( name ) : undefined;
+};
/**
- * Handle form submit events.
+ * Get the symbolic name of the current card.
*
- * @param {jQuery.Event} e Submit event
- * @fires submit
+ * @return {string|null} Symbolic name of the current card
*/
-OO.ui.FormLayout.prototype.onFormSubmit = function () {
- this.emit( 'submit' );
- return false;
+OO.ui.IndexLayout.prototype.getCurrentCardName = function () {
+ return this.currentCardName;
};
/**
- * Layout made of proportionally sized columns and rows.
+ * Add cards to the index layout
*
- * @class
- * @extends OO.ui.Layout
+ * When cards are added with the same names as existing cards, the existing cards will be
+ * automatically removed before the new cards are added.
*
- * @constructor
- * @param {OO.ui.PanelLayout[]} panels Panels in the grid
- * @param {Object} [config] Configuration options
- * @cfg {number[]} [widths] Widths of columns as ratios
- * @cfg {number[]} [heights] Heights of columns as ratios
+ * @param {OO.ui.CardLayout[]} cards Cards to add
+ * @param {number} index Index of the insertion point
+ * @fires add
+ * @chainable
*/
-OO.ui.GridLayout = function OoUiGridLayout( panels, config ) {
- var i, len, widths;
-
- // Config initialization
- config = config || {};
+OO.ui.IndexLayout.prototype.addCards = function ( cards, index ) {
+ var i, len, name, card, item, currentIndex,
+ stackLayoutCards = this.stackLayout.getItems(),
+ remove = [],
+ items = [];
- // Parent constructor
- OO.ui.GridLayout.super.call( this, config );
+ // Remove cards with same names
+ for ( i = 0, len = cards.length; i < len; i++ ) {
+ card = cards[ i ];
+ name = card.getName();
- // Properties
- this.panels = [];
- this.widths = [];
- this.heights = [];
-
- // Initialization
- this.$element.addClass( 'oo-ui-gridLayout' );
- for ( i = 0, len = panels.length; i < len; i++ ) {
- this.panels.push( panels[i] );
- this.$element.append( panels[i].$element );
- }
- if ( config.widths || config.heights ) {
- this.layout( config.widths || [ 1 ], config.heights || [ 1 ] );
- } else {
- // Arrange in columns by default
- widths = [];
- for ( i = 0, len = this.panels.length; i < len; i++ ) {
- widths[i] = 1;
+ if ( Object.prototype.hasOwnProperty.call( this.cards, name ) ) {
+ // Correct the insertion index
+ currentIndex = $.inArray( this.cards[ name ], stackLayoutCards );
+ if ( currentIndex !== -1 && currentIndex + 1 < index ) {
+ index--;
+ }
+ remove.push( this.cards[ name ] );
}
- this.layout( widths, [ 1 ] );
}
-};
-
-/* Setup */
+ if ( remove.length ) {
+ this.removeCards( remove );
+ }
-OO.inheritClass( OO.ui.GridLayout, OO.ui.Layout );
+ // Add new cards
+ for ( i = 0, len = cards.length; i < len; i++ ) {
+ card = cards[ i ];
+ name = card.getName();
+ this.cards[ card.getName() ] = card;
+ item = new OO.ui.TabOptionWidget( { data: name } );
+ card.setTabItem( item );
+ items.push( item );
+ }
-/* Events */
+ if ( items.length ) {
+ this.tabSelectWidget.addItems( items, index );
+ this.selectFirstSelectableCard();
+ }
+ this.stackLayout.addItems( cards, index );
+ this.emit( 'add', cards, index );
-/**
- * @event layout
- */
+ return this;
+};
/**
- * @event update
+ * Remove the specified cards from the index layout.
+ *
+ * To remove all cards from the index, you may wish to use the #clearCards method instead.
+ *
+ * @param {OO.ui.CardLayout[]} cards An array of cards to remove
+ * @fires remove
+ * @chainable
*/
+OO.ui.IndexLayout.prototype.removeCards = function ( cards ) {
+ var i, len, name, card,
+ items = [];
-/* Static Properties */
-
-OO.ui.GridLayout.static.tagName = 'div';
+ for ( i = 0, len = cards.length; i < len; i++ ) {
+ card = cards[ i ];
+ name = card.getName();
+ delete this.cards[ name ];
+ items.push( this.tabSelectWidget.getItemFromData( name ) );
+ card.setTabItem( null );
+ }
+ if ( items.length ) {
+ this.tabSelectWidget.removeItems( items );
+ this.selectFirstSelectableCard();
+ }
+ this.stackLayout.removeItems( cards );
+ this.emit( 'remove', cards );
-/* Methods */
+ return this;
+};
/**
- * Set grid dimensions.
+ * Clear all cards from the index layout.
+ *
+ * To remove only a subset of cards from the index, use the #removeCards method.
*
- * @param {number[]} widths Widths of columns as ratios
- * @param {number[]} heights Heights of rows as ratios
- * @fires layout
- * @throws {Error} If grid is not large enough to fit all panels
+ * @fires remove
+ * @chainable
*/
-OO.ui.GridLayout.prototype.layout = function ( widths, heights ) {
- var x, y,
- xd = 0,
- yd = 0,
- cols = widths.length,
- rows = heights.length;
+OO.ui.IndexLayout.prototype.clearCards = function () {
+ var i, len,
+ cards = this.stackLayout.getItems();
- // Verify grid is big enough to fit panels
- if ( cols * rows < this.panels.length ) {
- throw new Error( 'Grid is not large enough to fit ' + this.panels.length + 'panels' );
+ this.cards = {};
+ this.currentCardName = null;
+ this.tabSelectWidget.clearItems();
+ for ( i = 0, len = cards.length; i < len; i++ ) {
+ cards[ i ].setTabItem( null );
}
+ this.stackLayout.clearItems();
- // Sum up denominators
- for ( x = 0; x < cols; x++ ) {
- xd += widths[x];
- }
- for ( y = 0; y < rows; y++ ) {
- yd += heights[y];
- }
- // Store factors
- this.widths = [];
- this.heights = [];
- for ( x = 0; x < cols; x++ ) {
- this.widths[x] = widths[x] / xd;
- }
- for ( y = 0; y < rows; y++ ) {
- this.heights[y] = heights[y] / yd;
- }
- // Synchronize view
- this.update();
- this.emit( 'layout' );
+ this.emit( 'remove', cards );
+
+ return this;
};
/**
- * Update panel positions and sizes.
+ * Set the current card by symbolic name.
*
- * @fires update
+ * @fires set
+ * @param {string} name Symbolic name of card
*/
-OO.ui.GridLayout.prototype.update = function () {
- var x, y, panel,
- i = 0,
- left = 0,
- top = 0,
- dimensions,
- width = 0,
- height = 0,
- cols = this.widths.length,
- rows = this.heights.length;
+OO.ui.IndexLayout.prototype.setCard = function ( name ) {
+ var selectedItem,
+ $focused,
+ card = this.cards[ name ];
- for ( y = 0; y < rows; y++ ) {
- height = this.heights[y];
- for ( x = 0; x < cols; x++ ) {
- panel = this.panels[i];
- width = this.widths[x];
- dimensions = {
- width: Math.round( width * 100 ) + '%',
- height: Math.round( height * 100 ) + '%',
- top: Math.round( top * 100 ) + '%',
- // HACK: Work around IE bug by setting visibility: hidden; if width or height is zero
- visibility: width === 0 || height === 0 ? 'hidden' : ''
- };
- // If RTL, reverse:
- if ( OO.ui.Element.getDir( this.$.context ) === 'rtl' ) {
- dimensions.right = Math.round( left * 100 ) + '%';
- } else {
- dimensions.left = Math.round( left * 100 ) + '%';
+ if ( name !== this.currentCardName ) {
+ selectedItem = this.tabSelectWidget.getSelectedItem();
+ if ( selectedItem && selectedItem.getData() !== name ) {
+ this.tabSelectWidget.selectItemByData( name );
+ }
+ if ( card ) {
+ if ( this.currentCardName && this.cards[ this.currentCardName ] ) {
+ this.cards[ this.currentCardName ].setActive( false );
+ // Blur anything focused if the next card doesn't have anything focusable - this
+ // is not needed if the next card has something focusable because once it is focused
+ // this blur happens automatically
+ if ( this.autoFocus && !card.$element.find( ':input' ).length ) {
+ $focused = this.cards[ this.currentCardName ].$element.find( ':focus' );
+ if ( $focused.length ) {
+ $focused[ 0 ].blur();
+ }
+ }
}
- panel.$element.css( dimensions );
- i++;
- left += width;
+ this.currentCardName = name;
+ this.stackLayout.setItem( card );
+ card.setActive( true );
+ this.emit( 'set', card );
}
- top += height;
- left = 0;
}
-
- this.emit( 'update' );
};
/**
- * Get a panel at a given position.
+ * Select the first selectable card.
*
- * The x and y position is affected by the current grid layout.
- *
- * @param {number} x Horizontal position
- * @param {number} y Vertical position
- * @return {OO.ui.PanelLayout} The panel at the given postion
+ * @chainable
*/
-OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
- return this.panels[( x * this.widths.length ) + y];
+OO.ui.IndexLayout.prototype.selectFirstSelectableCard = function () {
+ if ( !this.tabSelectWidget.getSelectedItem() ) {
+ this.tabSelectWidget.selectItem( this.tabSelectWidget.getFirstSelectableItem() );
+ }
+
+ return this;
};
/**
- * Layout that expands to cover the entire area of its parent, with optional scrolling and padding.
+ * PanelLayouts expand to cover the entire area of their parent. They can be configured with scrolling, padding,
+ * and a frame, and are often used together with {@link OO.ui.StackLayout StackLayouts}.
+ *
+ * @example
+ * // Example of a panel layout
+ * var panel = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * framed: true,
+ * padded: true,
+ * $content: $( '<p>A panel layout with padding and a frame.</p>' )
+ * } );
+ * $( 'body' ).append( panel.$element );
*
* @class
* @extends OO.ui.Layout
@@ -6858,12 +9771,18 @@ OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
* @constructor
* @param {Object} [config] Configuration options
* @cfg {boolean} [scrollable=false] Allow vertical scrolling
- * @cfg {boolean} [padded=false] Pad the content from the edges
- * @cfg {boolean} [expanded=true] Expand size to fill the entire parent element
+ * @cfg {boolean} [padded=false] Add padding between the content and the edges of the panel.
+ * @cfg {boolean} [expanded=true] Expand the panel to fill the entire parent element.
+ * @cfg {boolean} [framed=false] Render the panel with a frame to visually separate it from outside content.
*/
OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
- // Config initialization
- config = config || {};
+ // Configuration initialization
+ config = $.extend( {
+ scrollable: false,
+ padded: false,
+ expanded: true,
+ framed: false
+ }, config );
// Parent constructor
OO.ui.PanelLayout.super.call( this, config );
@@ -6873,14 +9792,15 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
if ( config.scrollable ) {
this.$element.addClass( 'oo-ui-panelLayout-scrollable' );
}
-
if ( config.padded ) {
this.$element.addClass( 'oo-ui-panelLayout-padded' );
}
-
- if ( config.expanded === undefined || config.expanded ) {
+ if ( config.expanded ) {
this.$element.addClass( 'oo-ui-panelLayout-expanded' );
}
+ if ( config.framed ) {
+ this.$element.addClass( 'oo-ui-panelLayout-framed' );
+ }
};
/* Setup */
@@ -6888,7 +9808,152 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
/**
- * Page within an booklet layout.
+ * CardLayouts are used within {@link OO.ui.IndexLayout index layouts} to create cards that users can select and display
+ * from the index's optional {@link OO.ui.TabSelectWidget tab} navigation. Cards are usually not instantiated directly,
+ * rather extended to include the required content and functionality.
+ *
+ * Each card must have a unique symbolic name, which is passed to the constructor. In addition, the card's tab
+ * item is customized (with a label) using the #setupTabItem method. See
+ * {@link OO.ui.IndexLayout IndexLayout} for an example.
+ *
+ * @class
+ * @extends OO.ui.PanelLayout
+ *
+ * @constructor
+ * @param {string} name Unique symbolic name of card
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.CardLayout = function OoUiCardLayout( name, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( name ) && config === undefined ) {
+ config = name;
+ name = config.name;
+ }
+
+ // Configuration initialization
+ config = $.extend( { scrollable: true }, config );
+
+ // Parent constructor
+ OO.ui.CardLayout.super.call( this, config );
+
+ // Properties
+ this.name = name;
+ this.tabItem = null;
+ this.active = false;
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-cardLayout' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.CardLayout, OO.ui.PanelLayout );
+
+/* Events */
+
+/**
+ * An 'active' event is emitted when the card becomes active. Cards become active when they are
+ * shown in a index layout that is configured to display only one card at a time.
+ *
+ * @event active
+ * @param {boolean} active Card is active
+ */
+
+/* Methods */
+
+/**
+ * Get the symbolic name of the card.
+ *
+ * @return {string} Symbolic name of card
+ */
+OO.ui.CardLayout.prototype.getName = function () {
+ return this.name;
+};
+
+/**
+ * Check if card is active.
+ *
+ * Cards become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is configured to display
+ * only one card at a time. Additional CSS is applied to the card's tab item to reflect the active state.
+ *
+ * @return {boolean} Card is active
+ */
+OO.ui.CardLayout.prototype.isActive = function () {
+ return this.active;
+};
+
+/**
+ * Get tab item.
+ *
+ * The tab item allows users to access the card from the index's tab
+ * navigation. The tab item itself can be customized (with a label, level, etc.) using the #setupTabItem method.
+ *
+ * @return {OO.ui.TabOptionWidget|null} Tab option widget
+ */
+OO.ui.CardLayout.prototype.getTabItem = function () {
+ return this.tabItem;
+};
+
+/**
+ * Set or unset the tab item.
+ *
+ * Specify a {@link OO.ui.TabOptionWidget tab option} to set it,
+ * or `null` to clear the tab item. To customize the tab item itself (e.g., to set a label or tab
+ * level), use #setupTabItem instead of this method.
+ *
+ * @param {OO.ui.TabOptionWidget|null} tabItem Tab option widget, null to clear
+ * @chainable
+ */
+OO.ui.CardLayout.prototype.setTabItem = function ( tabItem ) {
+ this.tabItem = tabItem || null;
+ if ( tabItem ) {
+ this.setupTabItem();
+ }
+ return this;
+};
+
+/**
+ * Set up the tab item.
+ *
+ * Use this method to customize the tab item (e.g., to add a label or tab level). To set or unset
+ * the tab item itself (with a {@link OO.ui.TabOptionWidget tab option} or `null`), use
+ * the #setTabItem method instead.
+ *
+ * @param {OO.ui.TabOptionWidget} tabItem Tab option widget to set up
+ * @chainable
+ */
+OO.ui.CardLayout.prototype.setupTabItem = function () {
+ return this;
+};
+
+/**
+ * Set the card to its 'active' state.
+ *
+ * Cards become active when they are shown in a index layout that is configured to display only one card at a time. Additional
+ * CSS is applied to the tab item to reflect the card's active state. Outside of the index
+ * context, setting the active state on a card does nothing.
+ *
+ * @param {boolean} value Card is active
+ * @fires active
+ */
+OO.ui.CardLayout.prototype.setActive = function ( active ) {
+ active = !!active;
+
+ if ( active !== this.active ) {
+ this.active = active;
+ this.$element.toggleClass( 'oo-ui-cardLayout-active', this.active );
+ this.emit( 'active', this.active );
+ }
+};
+
+/**
+ * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display
+ * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,
+ * rather extended to include the required content and functionality.
+ *
+ * Each page must have a unique symbolic name, which is passed to the constructor. In addition, the page's outline
+ * item is customized (with a label, outline level, etc.) using the #setupOutlineItem method. See
+ * {@link OO.ui.BookletLayout BookletLayout} for an example.
*
* @class
* @extends OO.ui.PanelLayout
@@ -6896,9 +9961,14 @@ OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
* @constructor
* @param {string} name Unique symbolic name of page
* @param {Object} [config] Configuration options
- * @param {string} [outlineItem] Outline item widget
*/
OO.ui.PageLayout = function OoUiPageLayout( name, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( name ) && config === undefined ) {
+ config = name;
+ name = config.name;
+ }
+
// Configuration initialization
config = $.extend( { scrollable: true }, config );
@@ -6907,7 +9977,7 @@ OO.ui.PageLayout = function OoUiPageLayout( name, config ) {
// Properties
this.name = name;
- this.outlineItem = config.outlineItem || null;
+ this.outlineItem = null;
this.active = false;
// Initialization
@@ -6921,6 +9991,9 @@ OO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );
/* Events */
/**
+ * An 'active' event is emitted when the page becomes active. Pages become active when they are
+ * shown in a booklet layout that is configured to display only one page at a time.
+ *
* @event active
* @param {boolean} active Page is active
*/
@@ -6928,7 +10001,7 @@ OO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );
/* Methods */
/**
- * Get page name.
+ * Get the symbolic name of the page.
*
* @return {string} Symbolic name of page
*/
@@ -6939,6 +10012,9 @@ OO.ui.PageLayout.prototype.getName = function () {
/**
* Check if page is active.
*
+ * Pages become active when they are shown in a {@link OO.ui.BookletLayout booklet layout} that is configured to display
+ * only one page at a time. Additional CSS is applied to the page's outline item to reflect the active state.
+ *
* @return {boolean} Page is active
*/
OO.ui.PageLayout.prototype.isActive = function () {
@@ -6948,21 +10024,23 @@ OO.ui.PageLayout.prototype.isActive = function () {
/**
* Get outline item.
*
- * @return {OO.ui.OutlineItemWidget|null} Outline item widget
+ * The outline item allows users to access the page from the booklet's outline
+ * navigation. The outline item itself can be customized (with a label, level, etc.) using the #setupOutlineItem method.
+ *
+ * @return {OO.ui.OutlineOptionWidget|null} Outline option widget
*/
OO.ui.PageLayout.prototype.getOutlineItem = function () {
return this.outlineItem;
};
/**
- * Set outline item.
+ * Set or unset the outline item.
*
- * @localdoc Subclasses should override #setupOutlineItem instead of this method to adjust the
- * outline item as desired; this method is called for setting (with an object) and unsetting
- * (with null) and overriding methods would have to check the value of `outlineItem` to avoid
- * operating on null instead of an OO.ui.OutlineItemWidget object.
+ * Specify an {@link OO.ui.OutlineOptionWidget outline option} to set it,
+ * or `null` to clear the outline item. To customize the outline item itself (e.g., to set a label or outline
+ * level), use #setupOutlineItem instead of this method.
*
- * @param {OO.ui.OutlineItemWidget|null} outlineItem Outline item widget, null to clear
+ * @param {OO.ui.OutlineOptionWidget|null} outlineItem Outline option widget, null to clear
* @chainable
*/
OO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {
@@ -6974,11 +10052,13 @@ OO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {
};
/**
- * Setup outline item.
+ * Set up the outline item.
*
- * @localdoc Subclasses should override this method to adjust the outline item as desired.
+ * Use this method to customize the outline item (e.g., to add a label or outline level). To set or unset
+ * the outline item itself (with an {@link OO.ui.OutlineOptionWidget outline option} or `null`), use
+ * the #setOutlineItem method instead.
*
- * @param {OO.ui.OutlineItemWidget} outlineItem Outline item widget to setup
+ * @param {OO.ui.OutlineOptionWidget} outlineItem Outline option widget to set up
* @chainable
*/
OO.ui.PageLayout.prototype.setupOutlineItem = function () {
@@ -6986,9 +10066,13 @@ OO.ui.PageLayout.prototype.setupOutlineItem = function () {
};
/**
- * Set page active state.
+ * Set the page to its 'active' state.
+ *
+ * Pages become active when they are shown in a booklet layout that is configured to display only one page at a time. Additional
+ * CSS is applied to the outline item to reflect the page's active state. Outside of the booklet
+ * context, setting the active state on a page does nothing.
*
- * @param {boolean} Page is active
+ * @param {boolean} value Page is active
* @fires active
*/
OO.ui.PageLayout.prototype.setActive = function ( active ) {
@@ -7002,7 +10086,28 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
};
/**
- * Layout containing a series of mutually exclusive pages.
+ * StackLayouts contain a series of {@link OO.ui.PanelLayout panel layouts}. By default, only one panel is displayed
+ * at a time, though the stack layout can also be configured to show all contained panels, one after another,
+ * by setting the #continuous option to 'true'.
+ *
+ * @example
+ * // A stack layout with two panels, configured to be displayed continously
+ * var myStack = new OO.ui.StackLayout( {
+ * items: [
+ * new OO.ui.PanelLayout( {
+ * $content: $( '<p>Panel One</p>' ),
+ * padded: true,
+ * framed: true
+ * } ),
+ * new OO.ui.PanelLayout( {
+ * $content: $( '<p>Panel Two</p>' ),
+ * padded: true,
+ * framed: true
+ * } )
+ * ],
+ * continuous: true
+ * } );
+ * $( 'body' ).append( myStack.$element );
*
* @class
* @extends OO.ui.PanelLayout
@@ -7010,12 +10115,11 @@ OO.ui.PageLayout.prototype.setActive = function ( active ) {
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {boolean} [continuous=false] Show all pages, one after another
- * @cfg {string} [icon=''] Symbolic icon name
- * @cfg {OO.ui.Layout[]} [items] Layouts to add
+ * @cfg {boolean} [continuous=false] Show all panels, one after another. By default, only one panel is displayed at a time.
+ * @cfg {OO.ui.Layout[]} [items] Panel layouts to add to the stack layout.
*/
OO.ui.StackLayout = function OoUiStackLayout( config ) {
- // Config initialization
+ // Configuration initialization
config = $.extend( { scrollable: true }, config );
// Parent constructor
@@ -7033,7 +10137,7 @@ OO.ui.StackLayout = function OoUiStackLayout( config ) {
if ( this.continuous ) {
this.$element.addClass( 'oo-ui-stackLayout-continuous' );
}
- if ( $.isArray( config.items ) ) {
+ if ( Array.isArray( config.items ) ) {
this.addItems( config.items );
}
};
@@ -7046,14 +10150,17 @@ OO.mixinClass( OO.ui.StackLayout, OO.ui.GroupElement );
/* Events */
/**
+ * A 'set' event is emitted when panels are {@link #addItems added}, {@link #removeItems removed},
+ * {@link #clearItems cleared} or {@link #setItem displayed}.
+ *
* @event set
- * @param {OO.ui.Layout|null} item Current item or null if there is no longer a layout shown
+ * @param {OO.ui.Layout|null} item Current panel or `null` if no panel is shown
*/
/* Methods */
/**
- * Get the current item.
+ * Get the current panel.
*
* @return {OO.ui.Layout|null}
*/
@@ -7079,31 +10186,37 @@ OO.ui.StackLayout.prototype.unsetCurrentItem = function () {
};
/**
- * Add items.
+ * Add panel layouts to the stack layout.
*
- * Adding an existing item (by value) will move it.
+ * Panels will be added to the end of the stack layout array unless the optional index parameter specifies a different
+ * insertion point. Adding a panel that is already in the stack will move it to the end of the array or the point specified
+ * by the index.
*
- * @param {OO.ui.Layout[]} items Items to add
- * @param {number} [index] Index to insert items after
+ * @param {OO.ui.Layout[]} items Panels to add
+ * @param {number} [index] Index of the insertion point
* @chainable
*/
OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
+ // Update the visibility
+ this.updateHiddenState( items, this.currentItem );
+
// Mixin method
OO.ui.GroupElement.prototype.addItems.call( this, items, index );
if ( !this.currentItem && items.length ) {
- this.setItem( items[0] );
+ this.setItem( items[ 0 ] );
}
return this;
};
/**
- * Remove items.
+ * Remove the specified panels from the stack layout.
*
- * Items will be detached, not removed, so they can be used later.
+ * Removed panels are detached from the DOM, not removed, so that they may be reused. To remove all panels,
+ * you may wish to use the #clearItems method instead.
*
- * @param {OO.ui.Layout[]} items Items to remove
+ * @param {OO.ui.Layout[]} items Panels to remove
* @chainable
* @fires set
*/
@@ -7113,7 +10226,7 @@ OO.ui.StackLayout.prototype.removeItems = function ( items ) {
if ( $.inArray( this.currentItem, items ) !== -1 ) {
if ( this.items.length ) {
- this.setItem( this.items[0] );
+ this.setItem( this.items[ 0 ] );
} else {
this.unsetCurrentItem();
}
@@ -7123,9 +10236,10 @@ OO.ui.StackLayout.prototype.removeItems = function ( items ) {
};
/**
- * Clear all items.
+ * Clear all panels from the stack layout.
*
- * Items will be detached, not removed, so they can be used later.
+ * Cleared panels are detached from the DOM, not removed, so that they may be reused. To remove only
+ * a subset of panels, use the #removeItems method.
*
* @chainable
* @fires set
@@ -7138,30 +10252,19 @@ OO.ui.StackLayout.prototype.clearItems = function () {
};
/**
- * Show item.
- *
- * Any currently shown item will be hidden.
+ * Show the specified panel.
*
- * FIXME: If the passed item to show has not been added in the items list, then
- * this method drops it and unsets the current item.
+ * If another panel is currently displayed, it will be hidden.
*
- * @param {OO.ui.Layout} item Item to show
+ * @param {OO.ui.Layout} item Panel to show
* @chainable
* @fires set
*/
OO.ui.StackLayout.prototype.setItem = function ( item ) {
- var i, len;
-
if ( item !== this.currentItem ) {
- if ( !this.continuous ) {
- for ( i = 0, len = this.items.length; i < len; i++ ) {
- this.items[i].$element.css( 'display', '' );
- }
- }
+ this.updateHiddenState( this.items, item );
+
if ( $.inArray( item, this.items ) !== -1 ) {
- if ( !this.continuous ) {
- item.$element.css( 'display', 'block' );
- }
this.currentItem = item;
this.emit( 'set', item );
} else {
@@ -7173,6 +10276,31 @@ OO.ui.StackLayout.prototype.setItem = function ( item ) {
};
/**
+ * Update the visibility of all items in case of non-continuous view.
+ *
+ * Ensure all items are hidden except for the selected one.
+ * This method does nothing when the stack is continuous.
+ *
+ * @private
+ * @param {OO.ui.Layout[]} items Item list iterate over
+ * @param {OO.ui.Layout} [selectedItem] Selected item to show
+ */
+OO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem ) {
+ var i, len;
+
+ if ( !this.continuous ) {
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ if ( !selectedItem || selectedItem !== items[ i ] ) {
+ items[ i ].$element.addClass( 'oo-ui-element-hidden' );
+ }
+ }
+ if ( selectedItem ) {
+ selectedItem.$element.removeClass( 'oo-ui-element-hidden' );
+ }
+ }
+};
+
+/**
* Horizontal bar layout of tools as icon buttons.
*
* @class
@@ -7183,6 +10311,12 @@ OO.ui.StackLayout.prototype.setItem = function ( item ) {
* @param {Object} [config] Configuration options
*/
OO.ui.BarToolGroup = function OoUiBarToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
// Parent constructor
OO.ui.BarToolGroup.super.call( this, toolbar, config );
@@ -7213,6 +10347,7 @@ OO.ui.BarToolGroup.static.name = 'bar';
* @mixins OO.ui.LabelElement
* @mixins OO.ui.TitledElement
* @mixins OO.ui.ClippableElement
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {OO.ui.Toolbar} toolbar
@@ -7220,29 +10355,38 @@ OO.ui.BarToolGroup.static.name = 'bar';
* @cfg {string} [header] Text to display at the top of the pop-up
*/
OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
// Configuration initialization
config = config || {};
// Parent constructor
OO.ui.PopupToolGroup.super.call( this, toolbar, config );
+ // Properties
+ this.active = false;
+ this.dragging = false;
+ this.onBlurHandler = this.onBlur.bind( this );
+ this.$handle = $( '<span>' );
+
// Mixin constructors
OO.ui.IconElement.call( this, config );
OO.ui.IndicatorElement.call( this, config );
OO.ui.LabelElement.call( this, config );
OO.ui.TitledElement.call( this, config );
OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
-
- // Properties
- this.active = false;
- this.dragging = false;
- this.onBlurHandler = OO.ui.bind( this.onBlur, this );
- this.$handle = this.$( '<span>' );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
// Events
this.$handle.on( {
- 'mousedown touchstart': OO.ui.bind( this.onHandlePointerDown, this ),
- 'mouseup touchend': OO.ui.bind( this.onHandlePointerUp, this )
+ keydown: this.onHandleMouseKeyDown.bind( this ),
+ keyup: this.onHandleMouseKeyUp.bind( this ),
+ mousedown: this.onHandleMouseKeyDown.bind( this ),
+ mouseup: this.onHandleMouseKeyUp.bind( this )
} );
// Initialization
@@ -7254,7 +10398,7 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
// OO.ui.HeaderedElement mixin constructor.
if ( config.header !== undefined ) {
this.$group
- .prepend( this.$( '<span>' )
+ .prepend( $( '<span>' )
.addClass( 'oo-ui-popupToolGroup-header' )
.text( config.header )
);
@@ -7272,8 +10416,7 @@ OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatorElement );
OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabelElement );
OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TitledElement );
OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.ClippableElement );
-
-/* Static Properties */
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TabIndexedElement );
/* Methods */
@@ -7292,13 +10435,13 @@ OO.ui.PopupToolGroup.prototype.setDisabled = function () {
/**
* Handle focus being lost.
*
- * The event is actually generated from a mouseup, so it is not a normal blur event object.
+ * The event is actually generated from a mouseup/keyup, so it is not a normal blur event object.
*
- * @param {jQuery.Event} e Mouse up event
+ * @param {jQuery.Event} e Mouse up or key up event
*/
OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
// Only deactivate when clicking outside the dropdown element
- if ( this.$( e.target ).closest( '.oo-ui-popupToolGroup' )[0] !== this.$element[0] ) {
+ if ( $( e.target ).closest( '.oo-ui-popupToolGroup' )[ 0 ] !== this.$element[ 0 ] ) {
this.setActive( false );
}
};
@@ -7306,34 +10449,44 @@ OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
/**
* @inheritdoc
*/
-OO.ui.PopupToolGroup.prototype.onPointerUp = function ( e ) {
- // e.which is 0 for touch events, 1 for left mouse button
- if ( !this.isDisabled() && e.which <= 1 ) {
+OO.ui.PopupToolGroup.prototype.onMouseKeyUp = function ( e ) {
+ // Only close toolgroup when a tool was actually selected
+ if (
+ !this.isDisabled() && this.pressed && this.pressed === this.getTargetTool( e ) &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
this.setActive( false );
}
- return OO.ui.PopupToolGroup.super.prototype.onPointerUp.call( this, e );
+ return OO.ui.PopupToolGroup.super.prototype.onMouseKeyUp.call( this, e );
};
/**
- * Handle mouse up events.
+ * Handle mouse up and key up events.
*
- * @param {jQuery.Event} e Mouse up event
+ * @param {jQuery.Event} e Mouse up or key up event
*/
-OO.ui.PopupToolGroup.prototype.onHandlePointerUp = function () {
- return false;
+OO.ui.PopupToolGroup.prototype.onHandleMouseKeyUp = function ( e ) {
+ if (
+ !this.isDisabled() &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
+ return false;
+ }
};
/**
- * Handle mouse down events.
+ * Handle mouse down and key down events.
*
- * @param {jQuery.Event} e Mouse down event
+ * @param {jQuery.Event} e Mouse down or key down event
*/
-OO.ui.PopupToolGroup.prototype.onHandlePointerDown = function ( e ) {
- // e.which is 0 for touch events, 1 for left mouse button
- if ( !this.isDisabled() && e.which <= 1 ) {
+OO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) {
+ if (
+ !this.isDisabled() &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
this.setActive( !this.active );
+ return false;
}
- return false;
};
/**
@@ -7347,6 +10500,7 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
this.active = value;
if ( value ) {
this.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true );
+ this.getElementDocument().addEventListener( 'keyup', this.onBlurHandler, true );
// Try anchoring the popup to the left first
this.$element.addClass( 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left' );
@@ -7361,6 +10515,7 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
}
} else {
this.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true );
+ this.getElementDocument().removeEventListener( 'keyup', this.onBlurHandler, true );
this.$element.removeClass(
'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left oo-ui-popupToolGroup-right'
);
@@ -7372,14 +10527,38 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
/**
* Drop down list layout of tools as labeled icon buttons.
*
+ * This layout allows some tools to be collapsible, controlled by a "More" / "Fewer" option at the
+ * bottom of the main list. These are not automatically positioned at the bottom of the list; you
+ * may want to use the 'promote' and 'demote' configuration options to achieve this.
+ *
* @class
* @extends OO.ui.PopupToolGroup
*
* @constructor
* @param {OO.ui.Toolbar} toolbar
* @param {Object} [config] Configuration options
+ * @cfg {Array} [allowCollapse] List of tools that can be collapsed. Remaining tools will be always
+ * shown.
+ * @cfg {Array} [forceExpand] List of tools that *may not* be collapsed. All remaining tools will be
+ * allowed to be collapsed.
+ * @cfg {boolean} [expanded=false] Whether the collapsible tools are expanded by default
*/
OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
+ // Properties (must be set before parent constructor, which calls #populate)
+ this.allowCollapse = config.allowCollapse;
+ this.forceExpand = config.forceExpand;
+ this.expanded = config.expanded !== undefined ? config.expanded : false;
+ this.collapsibleTools = [];
+
// Parent constructor
OO.ui.ListToolGroup.super.call( this, toolbar, config );
@@ -7393,10 +10572,92 @@ OO.inheritClass( OO.ui.ListToolGroup, OO.ui.PopupToolGroup );
/* Static Properties */
-OO.ui.ListToolGroup.static.accelTooltips = true;
-
OO.ui.ListToolGroup.static.name = 'list';
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ListToolGroup.prototype.populate = function () {
+ var i, len, allowCollapse = [];
+
+ OO.ui.ListToolGroup.super.prototype.populate.call( this );
+
+ // Update the list of collapsible tools
+ if ( this.allowCollapse !== undefined ) {
+ allowCollapse = this.allowCollapse;
+ } else if ( this.forceExpand !== undefined ) {
+ allowCollapse = OO.simpleArrayDifference( Object.keys( this.tools ), this.forceExpand );
+ }
+
+ this.collapsibleTools = [];
+ for ( i = 0, len = allowCollapse.length; i < len; i++ ) {
+ if ( this.tools[ allowCollapse[ i ] ] !== undefined ) {
+ this.collapsibleTools.push( this.tools[ allowCollapse[ i ] ] );
+ }
+ }
+
+ // Keep at the end, even when tools are added
+ this.$group.append( this.getExpandCollapseTool().$element );
+
+ this.getExpandCollapseTool().toggle( this.collapsibleTools.length !== 0 );
+ this.updateCollapsibleState();
+};
+
+OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {
+ if ( this.expandCollapseTool === undefined ) {
+ var ExpandCollapseTool = function () {
+ ExpandCollapseTool.super.apply( this, arguments );
+ };
+
+ OO.inheritClass( ExpandCollapseTool, OO.ui.Tool );
+
+ ExpandCollapseTool.prototype.onSelect = function () {
+ this.toolGroup.expanded = !this.toolGroup.expanded;
+ this.toolGroup.updateCollapsibleState();
+ this.setActive( false );
+ };
+ ExpandCollapseTool.prototype.onUpdateState = function () {
+ // Do nothing. Tool interface requires an implementation of this function.
+ };
+
+ ExpandCollapseTool.static.name = 'more-fewer';
+
+ this.expandCollapseTool = new ExpandCollapseTool( this );
+ }
+ return this.expandCollapseTool;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ListToolGroup.prototype.onMouseKeyUp = function ( e ) {
+ // Do not close the popup when the user wants to show more/fewer tools
+ if (
+ $( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
+ // HACK: Prevent the popup list from being hidden. Skip the PopupToolGroup implementation (which
+ // hides the popup list when a tool is selected) and call ToolGroup's implementation directly.
+ return OO.ui.ListToolGroup.super.super.prototype.onMouseKeyUp.call( this, e );
+ } else {
+ return OO.ui.ListToolGroup.super.prototype.onMouseKeyUp.call( this, e );
+ }
+};
+
+OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
+ var i, len;
+
+ this.getExpandCollapseTool()
+ .setIcon( this.expanded ? 'collapse' : 'expand' )
+ .setTitle( OO.ui.msg( this.expanded ? 'ooui-toolgroup-collapse' : 'ooui-toolgroup-expand' ) );
+
+ for ( i = 0, len = this.collapsibleTools.length; i < len; i++ ) {
+ this.collapsibleTools[ i ].toggle( this.expanded );
+ }
+};
+
/**
* Drop down menu layout of tools as selectable menu items.
*
@@ -7408,6 +10669,12 @@ OO.ui.ListToolGroup.static.name = 'list';
* @param {Object} [config] Configuration options
*/
OO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
// Configuration initialization
config = config || {};
@@ -7427,8 +10694,6 @@ OO.inheritClass( OO.ui.MenuToolGroup, OO.ui.PopupToolGroup );
/* Static Properties */
-OO.ui.MenuToolGroup.static.accelTooltips = true;
-
OO.ui.MenuToolGroup.static.name = 'menu';
/* Methods */
@@ -7444,8 +10709,8 @@ OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
labelTexts = [];
for ( name in this.tools ) {
- if ( this.tools[name].isActive() ) {
- labelTexts.push( this.tools[name].getTitle() );
+ if ( this.tools[ name ].isActive() ) {
+ labelTexts.push( this.tools[ name ].getTitle() );
}
}
@@ -7461,12 +10726,18 @@ OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
* @mixins OO.ui.PopupElement
*
* @constructor
- * @param {OO.ui.Toolbar} toolbar
+ * @param {OO.ui.ToolGroup} toolGroup
* @param {Object} [config] Configuration options
*/
-OO.ui.PopupTool = function OoUiPopupTool( toolbar, config ) {
+OO.ui.PopupTool = function OoUiPopupTool( toolGroup, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+ config = toolGroup;
+ toolGroup = config.toolGroup;
+ }
+
// Parent constructor
- OO.ui.PopupTool.super.call( this, toolbar, config );
+ OO.ui.PopupTool.super.call( this, toolGroup, config );
// Mixin constructors
OO.ui.PopupElement.call( this, config );
@@ -7507,10 +10778,108 @@ OO.ui.PopupTool.prototype.onUpdateState = function () {
};
/**
+ * Tool that has a tool group inside. This is a bad workaround for the lack of proper hierarchical
+ * menus in toolbars (T74159).
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Tool
+ *
+ * @constructor
+ * @param {OO.ui.ToolGroup} toolGroup
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ToolGroupTool = function OoUiToolGroupTool( toolGroup, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+ config = toolGroup;
+ toolGroup = config.toolGroup;
+ }
+
+ // Parent constructor
+ OO.ui.ToolGroupTool.super.call( this, toolGroup, config );
+
+ // Properties
+ this.innerToolGroup = this.createGroup( this.constructor.static.groupConfig );
+
+ // Events
+ this.innerToolGroup.connect( this, { disable: 'onToolGroupDisable' } );
+
+ // Initialization
+ this.$link.remove();
+ this.$element
+ .addClass( 'oo-ui-toolGroupTool' )
+ .append( this.innerToolGroup.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ToolGroupTool, OO.ui.Tool );
+
+/* Static Properties */
+
+/**
+ * Tool group configuration. See OO.ui.Toolbar#setup for the accepted values.
+ *
+ * @property {Object.<string,Array>}
+ */
+OO.ui.ToolGroupTool.static.groupConfig = {};
+
+/* Methods */
+
+/**
+ * Handle the tool being selected.
+ *
+ * @inheritdoc
+ */
+OO.ui.ToolGroupTool.prototype.onSelect = function () {
+ this.innerToolGroup.setActive( !this.innerToolGroup.active );
+ return false;
+};
+
+/**
+ * Synchronize disabledness state of the tool with the inner toolgroup.
+ *
+ * @private
+ * @param {boolean} disabled Element is disabled
+ */
+OO.ui.ToolGroupTool.prototype.onToolGroupDisable = function ( disabled ) {
+ this.setDisabled( disabled );
+};
+
+/**
+ * Handle the toolbar state being updated.
+ *
+ * @inheritdoc
+ */
+OO.ui.ToolGroupTool.prototype.onUpdateState = function () {
+ this.setActive( false );
+};
+
+/**
+ * Build a OO.ui.ToolGroup from the configuration.
+ *
+ * @param {Object.<string,Array>} group Tool group configuration. See OO.ui.Toolbar#setup for the
+ * accepted values.
+ * @return {OO.ui.ListToolGroup}
+ */
+OO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {
+ if ( group.include === '*' ) {
+ // Apply defaults to catch-all groups
+ if ( group.label === undefined ) {
+ group.label = OO.ui.msg( 'ooui-toolbar-more' );
+ }
+ }
+
+ return this.toolbar.getToolGroupFactory().create( 'list', this.toolbar, group );
+};
+
+/**
* Mixin for OO.ui.Widget subclasses to provide OO.ui.GroupElement.
*
* Use together with OO.ui.ItemWidget to make disabled state inheritable.
*
+ * @private
* @abstract
* @class
* @extends OO.ui.GroupElement
@@ -7547,7 +10916,7 @@ OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
// During construction, #setDisabled is called before the OO.ui.GroupElement constructor
if ( this.items ) {
for ( i = 0, len = this.items.length; i < len; i++ ) {
- this.items[i].updateDisabled();
+ this.items[ i ].updateDisabled();
}
}
@@ -7558,10 +10927,11 @@ OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
* Mixin for widgets used as items in widgets that inherit OO.ui.GroupWidget.
*
* Item widgets have a reference to a OO.ui.GroupWidget while they are attached to the group. This
- * allows bidrectional communication.
+ * allows bidirectional communication.
*
* Use together with OO.ui.GroupWidget to make disabled state inheritable.
*
+ * @private
* @abstract
* @class
*
@@ -7603,245 +10973,9 @@ OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
};
/**
- * Mixin that adds a menu showing suggested values for a text input.
- *
- * Subclasses must handle `select` and `choose` events on #lookupMenu to make use of selections.
- *
- * @class
- * @abstract
- *
- * @constructor
- * @param {OO.ui.TextInputWidget} input Input widget
- * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$overlay=this.$( 'body' )] Overlay layer
- */
-OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
- // Config intialization
- config = config || {};
-
- // Properties
- this.lookupInput = input;
- this.$overlay = config.$overlay || this.$( 'body,.oo-ui-window-overlay' ).last();
- this.lookupMenu = new OO.ui.TextInputMenuWidget( this, {
- $: OO.ui.Element.getJQuery( this.$overlay ),
- input: this.lookupInput,
- $container: config.$container
- } );
- this.lookupCache = {};
- this.lookupQuery = null;
- this.lookupRequest = null;
- this.populating = false;
-
- // Events
- this.$overlay.append( this.lookupMenu.$element );
-
- this.lookupInput.$input.on( {
- focus: OO.ui.bind( this.onLookupInputFocus, this ),
- blur: OO.ui.bind( this.onLookupInputBlur, this ),
- mousedown: OO.ui.bind( this.onLookupInputMouseDown, this )
- } );
- this.lookupInput.connect( this, { change: 'onLookupInputChange' } );
-
- // Initialization
- this.$element.addClass( 'oo-ui-lookupWidget' );
- this.lookupMenu.$element.addClass( 'oo-ui-lookupWidget-menu' );
-};
-
-/* Methods */
-
-/**
- * Handle input focus event.
- *
- * @param {jQuery.Event} e Input focus event
- */
-OO.ui.LookupInputWidget.prototype.onLookupInputFocus = function () {
- this.openLookupMenu();
-};
-
-/**
- * Handle input blur event.
- *
- * @param {jQuery.Event} e Input blur event
- */
-OO.ui.LookupInputWidget.prototype.onLookupInputBlur = function () {
- this.lookupMenu.toggle( false );
-};
-
-/**
- * Handle input mouse down event.
- *
- * @param {jQuery.Event} e Input mouse down event
- */
-OO.ui.LookupInputWidget.prototype.onLookupInputMouseDown = function () {
- this.openLookupMenu();
-};
-
-/**
- * Handle input change event.
- *
- * @param {string} value New input value
- */
-OO.ui.LookupInputWidget.prototype.onLookupInputChange = function () {
- this.openLookupMenu();
-};
-
-/**
- * Get lookup menu.
- *
- * @return {OO.ui.TextInputMenuWidget}
- */
-OO.ui.LookupInputWidget.prototype.getLookupMenu = function () {
- return this.lookupMenu;
-};
-
-/**
- * Open the menu.
- *
- * @chainable
- */
-OO.ui.LookupInputWidget.prototype.openLookupMenu = function () {
- var value = this.lookupInput.getValue();
-
- if ( this.lookupMenu.$input.is( ':focus' ) && $.trim( value ) !== '' ) {
- this.populateLookupMenu();
- this.lookupMenu.toggle( true );
- } else {
- this.lookupMenu
- .clearItems()
- .toggle( false );
- }
-
- return this;
-};
-
-/**
- * Populate lookup menu with current information.
- *
- * @chainable
- */
-OO.ui.LookupInputWidget.prototype.populateLookupMenu = function () {
- var widget = this;
-
- if ( !this.populating ) {
- this.populating = true;
- this.getLookupMenuItems()
- .done( function ( items ) {
- widget.lookupMenu.clearItems();
- if ( items.length ) {
- widget.lookupMenu
- .addItems( items )
- .toggle( true );
- widget.initializeLookupMenuSelection();
- widget.openLookupMenu();
- } else {
- widget.lookupMenu.toggle( true );
- }
- widget.populating = false;
- } )
- .fail( function () {
- widget.lookupMenu.clearItems();
- widget.populating = false;
- } );
- }
-
- return this;
-};
-
-/**
- * Set selection in the lookup menu with current information.
- *
- * @chainable
- */
-OO.ui.LookupInputWidget.prototype.initializeLookupMenuSelection = function () {
- if ( !this.lookupMenu.getSelectedItem() ) {
- this.lookupMenu.selectItem( this.lookupMenu.getFirstSelectableItem() );
- }
- this.lookupMenu.highlightItem( this.lookupMenu.getSelectedItem() );
-};
-
-/**
- * Get lookup menu items for the current query.
- *
- * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument
- * of the done event
- */
-OO.ui.LookupInputWidget.prototype.getLookupMenuItems = function () {
- var widget = this,
- value = this.lookupInput.getValue(),
- deferred = $.Deferred();
-
- if ( value && value !== this.lookupQuery ) {
- // Abort current request if query has changed
- if ( this.lookupRequest ) {
- this.lookupRequest.abort();
- this.lookupQuery = null;
- this.lookupRequest = null;
- }
- if ( value in this.lookupCache ) {
- deferred.resolve( this.getLookupMenuItemsFromData( this.lookupCache[value] ) );
- } else {
- this.lookupQuery = value;
- this.lookupRequest = this.getLookupRequest()
- .always( function () {
- widget.lookupQuery = null;
- widget.lookupRequest = null;
- } )
- .done( function ( data ) {
- widget.lookupCache[value] = widget.getLookupCacheItemFromData( data );
- deferred.resolve( widget.getLookupMenuItemsFromData( widget.lookupCache[value] ) );
- } )
- .fail( function () {
- deferred.reject();
- } );
- this.pushPending();
- this.lookupRequest.always( function () {
- widget.popPending();
- } );
- }
- }
- return deferred.promise();
-};
-
-/**
- * Get a new request object of the current lookup query value.
- *
- * @abstract
- * @return {jqXHR} jQuery AJAX object, or promise object with an .abort() method
- */
-OO.ui.LookupInputWidget.prototype.getLookupRequest = function () {
- // Stub, implemented in subclass
- return null;
-};
-
-/**
- * Handle successful lookup request.
- *
- * Overriding methods should call #populateLookupMenu when results are available and cache results
- * for future lookups in #lookupCache as an array of #OO.ui.MenuItemWidget objects.
- *
- * @abstract
- * @param {Mixed} data Response from server
- */
-OO.ui.LookupInputWidget.prototype.onLookupRequestDone = function () {
- // Stub, implemented in subclass
-};
-
-/**
- * Get a list of menu item widgets from the data stored by the lookup request's done handler.
- *
- * @abstract
- * @param {Mixed} data Cached result data, usually an array
- * @return {OO.ui.MenuItemWidget[]} Menu items
- */
-OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
- // Stub, implemented in subclass
- return [];
-};
-
-/**
- * Set of controls for an OO.ui.OutlineWidget.
- *
+ * OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.
* Controls include moving items up and down, removing items, and adding different kinds of items.
+ * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
*
* @class
* @extends OO.ui.Widget
@@ -7849,12 +10983,21 @@ OO.ui.LookupInputWidget.prototype.getLookupMenuItemsFromData = function () {
* @mixins OO.ui.IconElement
*
* @constructor
- * @param {OO.ui.OutlineWidget} outline Outline to control
+ * @param {OO.ui.OutlineSelectWidget} outline Outline to control
* @param {Object} [config] Configuration options
+ * @cfg {Object} [abilities] List of abilties
+ * @cfg {boolean} [abilities.move=true] Allow moving movable items
+ * @cfg {boolean} [abilities.remove=true] Allow removing removable items
*/
OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( outline ) && config === undefined ) {
+ config = outline;
+ outline = config.outline;
+ }
+
// Configuration initialization
- config = $.extend( { icon: 'add-item' }, config );
+ config = $.extend( { icon: 'add' }, config );
// Parent constructor
OO.ui.OutlineControlsWidget.super.call( this, config );
@@ -7865,25 +11008,23 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
// Properties
this.outline = outline;
- this.$movers = this.$( '<div>' );
+ this.$movers = $( '<div>' );
this.upButton = new OO.ui.ButtonWidget( {
- $: this.$,
framed: false,
icon: 'collapse',
title: OO.ui.msg( 'ooui-outline-control-move-up' )
} );
this.downButton = new OO.ui.ButtonWidget( {
- $: this.$,
framed: false,
icon: 'expand',
title: OO.ui.msg( 'ooui-outline-control-move-down' )
} );
this.removeButton = new OO.ui.ButtonWidget( {
- $: this.$,
framed: false,
icon: 'remove',
title: OO.ui.msg( 'ooui-outline-control-remove' )
} );
+ this.abilities = { move: true, remove: true };
// Events
outline.connect( this, {
@@ -7902,6 +11043,7 @@ OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, confi
.addClass( 'oo-ui-outlineControlsWidget-movers' )
.append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );
this.$element.append( this.$icon, this.$group, this.$movers );
+ this.setAbilities( config.abilities || {} );
};
/* Setup */
@@ -7924,28 +11066,49 @@ OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconElement );
/* Methods */
/**
+ * Set abilities.
+ *
+ * @param {Object} abilities List of abilties
+ * @param {boolean} [abilities.move] Allow moving movable items
+ * @param {boolean} [abilities.remove] Allow removing removable items
+ */
+OO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {
+ var ability;
+
+ for ( ability in this.abilities ) {
+ if ( abilities[ability] !== undefined ) {
+ this.abilities[ability] = !!abilities[ability];
+ }
+ }
+
+ this.onOutlineChange();
+};
+
+/**
+ *
+ * @private
* Handle outline change events.
*/
OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
var i, len, firstMovable, lastMovable,
items = this.outline.getItems(),
selectedItem = this.outline.getSelectedItem(),
- movable = selectedItem && selectedItem.isMovable(),
- removable = selectedItem && selectedItem.isRemovable();
+ movable = this.abilities.move && selectedItem && selectedItem.isMovable(),
+ removable = this.abilities.remove && selectedItem && selectedItem.isRemovable();
if ( movable ) {
i = -1;
len = items.length;
while ( ++i < len ) {
- if ( items[i].isMovable() ) {
- firstMovable = items[i];
+ if ( items[ i ].isMovable() ) {
+ firstMovable = items[ i ];
break;
}
}
i = len;
while ( i-- ) {
- if ( items[i].isMovable() ) {
- lastMovable = items[i];
+ if ( items[ i ].isMovable() ) {
+ lastMovable = items[ i ];
break;
}
}
@@ -7956,19 +11119,25 @@ OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
};
/**
- * Mixin for widgets with a boolean on/off state.
+ * ToggleWidget implements basic behavior of widgets with an on/off state.
+ * Please see OO.ui.ToggleButtonWidget and OO.ui.ToggleSwitchWidget for examples.
*
* @abstract
* @class
+ * @extends OO.ui.Widget
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {boolean} [value=false] Initial value
+ * @cfg {boolean} [value=false] The toggle’s initial on/off state.
+ * By default, the toggle is in the 'off' state.
*/
OO.ui.ToggleWidget = function OoUiToggleWidget( config ) {
// Configuration initialization
config = config || {};
+ // Parent constructor
+ OO.ui.ToggleWidget.super.call( this, config );
+
// Properties
this.value = null;
@@ -7977,28 +11146,35 @@ OO.ui.ToggleWidget = function OoUiToggleWidget( config ) {
this.setValue( !!config.value );
};
+/* Setup */
+
+OO.inheritClass( OO.ui.ToggleWidget, OO.ui.Widget );
+
/* Events */
/**
* @event change
- * @param {boolean} value Changed value
+ *
+ * A change event is emitted when the on/off state of the toggle changes.
+ *
+ * @param {boolean} value Value representing the new state of the toggle
*/
/* Methods */
/**
- * Get the value of the toggle.
+ * Get the value representing the toggle’s state.
*
- * @return {boolean}
+ * @return {boolean} The on/off state of the toggle
*/
OO.ui.ToggleWidget.prototype.getValue = function () {
return this.value;
};
/**
- * Set the value of the toggle.
+ * Set the state of the toggle: `true` for 'on', `false' for 'off'.
*
- * @param {boolean} value New value
+ * @param {boolean} value The state of the toggle
* @fires change
* @chainable
*/
@@ -8009,14 +11185,34 @@ OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
this.emit( 'change', value );
this.$element.toggleClass( 'oo-ui-toggleWidget-on', value );
this.$element.toggleClass( 'oo-ui-toggleWidget-off', !value );
+ this.$element.attr( 'aria-checked', value.toString() );
}
return this;
};
/**
- * Group widget for multiple related buttons.
- *
- * Use together with OO.ui.ButtonWidget.
+ * A ButtonGroupWidget groups related buttons and is used together with OO.ui.ButtonWidget and
+ * its subclasses. Each button in a group is addressed by a unique reference. Buttons can be added,
+ * removed, and cleared from the group.
+ *
+ * @example
+ * // Example: A ButtonGroupWidget with two buttons
+ * var button1 = new OO.ui.PopupButtonWidget( {
+ * label: 'Select a category',
+ * icon: 'menu',
+ * popup: {
+ * $content: $( '<p>List of categories...</p>' ),
+ * padded: true,
+ * align: 'left'
+ * }
+ * } );
+ * var button2 = new OO.ui.ButtonWidget( {
+ * label: 'Add item'
+ * });
+ * var buttonGroup = new OO.ui.ButtonGroupWidget( {
+ * items: [button1, button2]
+ * } );
+ * $( 'body' ).append( buttonGroup.$element );
*
* @class
* @extends OO.ui.Widget
@@ -8024,9 +11220,12 @@ OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {OO.ui.ButtonWidget} [items] Buttons to add
+ * @cfg {OO.ui.ButtonWidget[]} [items] Buttons to add
*/
OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
// Parent constructor
OO.ui.ButtonGroupWidget.super.call( this, config );
@@ -8035,7 +11234,7 @@ OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
// Initialization
this.$element.addClass( 'oo-ui-buttonGroupWidget' );
- if ( $.isArray( config.items ) ) {
+ if ( Array.isArray( config.items ) ) {
this.addItems( config.items );
}
};
@@ -8046,7 +11245,23 @@ OO.inheritClass( OO.ui.ButtonGroupWidget, OO.ui.Widget );
OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
/**
- * Generic widget for buttons.
+ * ButtonWidget is a generic widget for buttons. A wide variety of looks,
+ * feels, and functionality can be customized via the class’s configuration options
+ * and methods. Please see the [OOjs UI documentation on MediaWiki] [1] for more information
+ * and examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches
+ *
+ * @example
+ * // A button widget
+ * var button = new OO.ui.ButtonWidget( {
+ * label: 'Button with Icon',
+ * icon: 'remove',
+ * iconTitle: 'Remove'
+ * } );
+ * $( 'body' ).append( button.$element );
+ *
+ * NOTE: HTML form buttons should use the OO.ui.ButtonInputWidget class.
*
* @class
* @extends OO.ui.Widget
@@ -8056,15 +11271,17 @@ OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
* @mixins OO.ui.LabelElement
* @mixins OO.ui.TitledElement
* @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {string} [href] Hyperlink to visit when clicked
- * @cfg {string} [target] Target to open hyperlink in
+ * @cfg {string} [href] Hyperlink to visit when the button is clicked.
+ * @cfg {string} [target] The frame or window in which to open the hyperlink.
+ * @cfg {boolean} [noFollow] Search engine traversal hint (default: true)
*/
OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
// Configuration initialization
- config = $.extend( { target: '_blank' }, config );
+ config = config || {};
// Parent constructor
OO.ui.ButtonWidget.super.call( this, config );
@@ -8074,19 +11291,17 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
OO.ui.IconElement.call( this, config );
OO.ui.IndicatorElement.call( this, config );
OO.ui.LabelElement.call( this, config );
- OO.ui.TitledElement.call( this, config, $.extend( {}, config, { $titled: this.$button } ) );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
OO.ui.FlaggedElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
// Properties
this.href = null;
this.target = null;
- this.isHyperlink = false;
+ this.noFollow = false;
// Events
- this.$button.on( {
- click: OO.ui.bind( this.onClick, this ),
- keypress: OO.ui.bind( this.onKeyPress, this )
- } );
+ this.connect( this, { disable: 'onDisable' } );
// Initialization
this.$button.append( this.$icon, this.$label, this.$indicator );
@@ -8095,6 +11310,7 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
.append( this.$button );
this.setHref( config.href );
this.setTarget( config.target );
+ this.setNoFollow( config.noFollow );
};
/* Setup */
@@ -8106,45 +11322,32 @@ OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IndicatorElement );
OO.mixinClass( OO.ui.ButtonWidget, OO.ui.LabelElement );
OO.mixinClass( OO.ui.ButtonWidget, OO.ui.TitledElement );
OO.mixinClass( OO.ui.ButtonWidget, OO.ui.FlaggedElement );
-
-/* Events */
-
-/**
- * @event click
- */
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.TabIndexedElement );
/* Methods */
/**
- * Handles mouse click events.
- *
- * @param {jQuery.Event} e Mouse click event
- * @fires click
+ * @inheritdoc
*/
-OO.ui.ButtonWidget.prototype.onClick = function () {
+OO.ui.ButtonWidget.prototype.onMouseDown = function ( e ) {
if ( !this.isDisabled() ) {
- this.emit( 'click' );
- if ( this.isHyperlink ) {
- return true;
- }
+ // Remove the tab-index while the button is down to prevent the button from stealing focus
+ this.$button.removeAttr( 'tabindex' );
}
- return false;
+
+ return OO.ui.ButtonElement.prototype.onMouseDown.call( this, e );
};
/**
- * Handles keypress events.
- *
- * @param {jQuery.Event} e Keypress event
- * @fires click
+ * @inheritdoc
*/
-OO.ui.ButtonWidget.prototype.onKeyPress = function ( e ) {
- if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
- this.onClick();
- if ( this.isHyperlink ) {
- return true;
- }
+OO.ui.ButtonWidget.prototype.onMouseUp = function ( e ) {
+ if ( !this.isDisabled() ) {
+ // Restore the tab-index after the button is up to restore the button's accessibility
+ this.$button.attr( 'tabindex', this.tabIndex );
}
- return false;
+
+ return OO.ui.ButtonElement.prototype.onMouseUp.call( this, e );
};
/**
@@ -8166,6 +11369,15 @@ OO.ui.ButtonWidget.prototype.getTarget = function () {
};
/**
+ * Get search engine traversal hint.
+ *
+ * @return {boolean} Whether search engines should avoid traversing this hyperlink
+ */
+OO.ui.ButtonWidget.prototype.getNoFollow = function () {
+ return this.noFollow;
+};
+
+/**
* Set hyperlink location.
*
* @param {string|null} href Hyperlink location, null to remove
@@ -8175,19 +11387,40 @@ OO.ui.ButtonWidget.prototype.setHref = function ( href ) {
if ( href !== this.href ) {
this.href = href;
- if ( href !== null ) {
- this.$button.attr( 'href', href );
- this.isHyperlink = true;
- } else {
- this.$button.removeAttr( 'href' );
- this.isHyperlink = false;
- }
+ this.updateHref();
+ }
+
+ return this;
+};
+
+/**
+ * Update the `href` attribute, in case of changes to href or
+ * disabled state.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.ButtonWidget.prototype.updateHref = function () {
+ if ( this.href !== null && !this.isDisabled() ) {
+ this.$button.attr( 'href', this.href );
+ } else {
+ this.$button.removeAttr( 'href' );
}
return this;
};
/**
+ * Handle disable events.
+ *
+ * @private
+ * @param {boolean} disabled Element is disabled
+ */
+OO.ui.ButtonWidget.prototype.onDisable = function () {
+ this.updateHref();
+};
+
+/**
* Set hyperlink target.
*
* @param {string|null} target Hyperlink target, null to remove
@@ -8208,7 +11441,35 @@ OO.ui.ButtonWidget.prototype.setTarget = function ( target ) {
};
/**
- * Button widget that executes an action and is managed by an OO.ui.ActionSet.
+ * Set search engine traversal hint.
+ *
+ * @param {boolean} noFollow True if search engines should avoid traversing this hyperlink
+ */
+OO.ui.ButtonWidget.prototype.setNoFollow = function ( noFollow ) {
+ noFollow = typeof noFollow === 'boolean' ? noFollow : true;
+
+ if ( noFollow !== this.noFollow ) {
+ this.noFollow = noFollow;
+ if ( noFollow ) {
+ this.$button.attr( 'rel', 'nofollow' );
+ } else {
+ this.$button.removeAttr( 'rel' );
+ }
+ }
+
+ return this;
+};
+
+/**
+ * An ActionWidget is a {@link OO.ui.ButtonWidget button widget} that executes an action.
+ * Action widgets are used with OO.ui.ActionSet, which manages the behavior and availability
+ * of the actions.
+ *
+ * Both actions and action sets are primarily used with {@link OO.ui.Dialog Dialogs}.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information
+ * and examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets
*
* @class
* @extends OO.ui.ButtonWidget
@@ -8216,11 +11477,14 @@ OO.ui.ButtonWidget.prototype.setTarget = function ( target ) {
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {string} [action] Symbolic action name
- * @cfg {string[]} [modes] Symbolic mode names
+ * @cfg {string} [action] Symbolic name of the action (e.g., ‘continue’ or ‘cancel’).
+ * @cfg {string[]} [modes] Symbolic names of the modes (e.g., ‘edit’ or ‘read’) in which the action
+ * should be made available. See the action set's {@link OO.ui.ActionSet#setMode setMode} method
+ * for more information about setting modes.
+ * @cfg {boolean} [framed=false] Render the action button with a frame
*/
OO.ui.ActionWidget = function OoUiActionWidget( config ) {
- // Config intialization
+ // Configuration initialization
config = $.extend( { framed: false }, config );
// Parent constructor
@@ -8247,23 +11511,25 @@ OO.mixinClass( OO.ui.ActionWidget, OO.ui.PendingElement );
/* Events */
/**
+ * A resize event is emitted when the size of the widget changes.
+ *
* @event resize
*/
/* Methods */
/**
- * Check if action is available in a certain mode.
+ * Check if the action is configured to be available in the specified `mode`.
*
* @param {string} mode Name of mode
- * @return {boolean} Has mode
+ * @return {boolean} The action is configured with the mode
*/
OO.ui.ActionWidget.prototype.hasMode = function ( mode ) {
return this.modes.indexOf( mode ) !== -1;
};
/**
- * Get symbolic action name.
+ * Get the symbolic name of the action (e.g., ‘continue’ or ‘cancel’).
*
* @return {string}
*/
@@ -8272,9 +11538,13 @@ OO.ui.ActionWidget.prototype.getAction = function () {
};
/**
- * Get symbolic action name.
+ * Get the symbolic name of the mode or modes for which the action is configured to be available.
*
- * @return {string}
+ * The current mode is set with the action set's {@link OO.ui.ActionSet#setMode setMode} method.
+ * Only actions that are configured to be avaiable in the current mode will be visible. All other actions
+ * are hidden.
+ *
+ * @return {string[]}
*/
OO.ui.ActionWidget.prototype.getModes = function () {
return this.modes.slice();
@@ -8283,6 +11553,7 @@ OO.ui.ActionWidget.prototype.getModes = function () {
/**
* Emit a resize event if the size has changed.
*
+ * @private
* @chainable
*/
OO.ui.ActionWidget.prototype.propagateResize = function () {
@@ -8347,7 +11618,7 @@ OO.ui.ActionWidget.prototype.clearFlags = function () {
};
/**
- * Toggle visibility of button.
+ * Toggle the visibility of the action button.
*
* @param {boolean} [show] Show button, omit to toggle visibility
* @chainable
@@ -8361,7 +11632,22 @@ OO.ui.ActionWidget.prototype.toggle = function () {
};
/**
- * Button that shows and hides a popup.
+ * PopupButtonWidgets toggle the visibility of a contained {@link OO.ui.PopupWidget PopupWidget},
+ * which is used to display additional information or options.
+ *
+ * @example
+ * // Example of a popup button.
+ * var popupButton = new OO.ui.PopupButtonWidget( {
+ * label: 'Popup button with options',
+ * icon: 'menu',
+ * popup: {
+ * $content: $( '<p>Additional options here.</p>' ),
+ * padded: true,
+ * align: 'force-left'
+ * }
+ * } );
+ * // Append the button to the DOM.
+ * $( 'body' ).append( popupButton.$element );
*
* @class
* @extends OO.ui.ButtonWidget
@@ -8377,9 +11663,13 @@ OO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) {
// Mixin constructors
OO.ui.PopupElement.call( this, config );
+ // Events
+ this.connect( this, { click: 'onAction' } );
+
// Initialization
this.$element
.addClass( 'oo-ui-popupButtonWidget' )
+ .attr( 'aria-haspopup', 'true' )
.append( this.popup.$element );
};
@@ -8391,34 +11681,50 @@ OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopupElement );
/* Methods */
/**
- * Handles mouse click events.
+ * Handle the button action being triggered.
*
- * @param {jQuery.Event} e Mouse click event
+ * @private
*/
-OO.ui.PopupButtonWidget.prototype.onClick = function ( e ) {
- // Skip clicks within the popup
- if ( $.contains( this.popup.$element[0], e.target ) ) {
- return;
- }
-
- if ( !this.isDisabled() ) {
- this.popup.toggle();
- // Parent method
- OO.ui.PopupButtonWidget.super.prototype.onClick.call( this );
- }
- return false;
+OO.ui.PopupButtonWidget.prototype.onAction = function () {
+ this.popup.toggle();
};
/**
- * Button that toggles on and off.
+ * ToggleButtons are buttons that have a state (‘on’ or ‘off’) that is represented by a
+ * Boolean value. Like other {@link OO.ui.ButtonWidget buttons}, toggle buttons can be
+ * configured with {@link OO.ui.IconElement icons}, {@link OO.ui.IndicatorElement indicators},
+ * {@link OO.ui.TitledElement titles}, {@link OO.ui.FlaggedElement styling flags},
+ * and {@link OO.ui.LabelElement labels}. Please see
+ * the [OOjs UI documentation][1] on MediaWiki for more information.
+ *
+ * @example
+ * // Toggle buttons in the 'off' and 'on' state.
+ * var toggleButton1 = new OO.ui.ToggleButtonWidget( {
+ * label: 'Toggle Button off'
+ * } );
+ * var toggleButton2 = new OO.ui.ToggleButtonWidget( {
+ * label: 'Toggle Button on',
+ * value: true
+ * } );
+ * // Append the buttons to the DOM.
+ * $( 'body' ).append( toggleButton1.$element, toggleButton2.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Toggle_buttons
*
* @class
- * @extends OO.ui.ButtonWidget
- * @mixins OO.ui.ToggleWidget
+ * @extends OO.ui.ToggleWidget
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {boolean} [value=false] Initial value
+ * @cfg {boolean} [value=false] The toggle button’s initial on/off
+ * state. By default, the button is in the 'off' state.
*/
OO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {
// Configuration initialization
@@ -8428,29 +11734,44 @@ OO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {
OO.ui.ToggleButtonWidget.super.call( this, config );
// Mixin constructors
- OO.ui.ToggleWidget.call( this, config );
+ OO.ui.ButtonElement.call( this, config );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
+ OO.ui.FlaggedElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+
+ // Events
+ this.connect( this, { click: 'onAction' } );
// Initialization
- this.$element.addClass( 'oo-ui-toggleButtonWidget' );
+ this.$button.append( this.$icon, this.$label, this.$indicator );
+ this.$element
+ .addClass( 'oo-ui-toggleButtonWidget' )
+ .append( this.$button );
};
/* Setup */
-OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonWidget );
-OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
+OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TabIndexedElement );
/* Methods */
/**
- * @inheritdoc
+ * Handle the button action being triggered.
+ *
+ * @private
*/
-OO.ui.ToggleButtonWidget.prototype.onClick = function () {
- if ( !this.isDisabled() ) {
- this.setValue( !this.value );
- }
-
- // Parent method
- return OO.ui.ToggleButtonWidget.super.prototype.onClick.call( this );
+OO.ui.ToggleButtonWidget.prototype.onAction = function () {
+ this.setValue( !this.value );
};
/**
@@ -8459,98 +11780,62 @@ OO.ui.ToggleButtonWidget.prototype.onClick = function () {
OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
value = !!value;
if ( value !== this.value ) {
+ // Might be called from parent constructor before ButtonElement constructor
+ if ( this.$button ) {
+ this.$button.attr( 'aria-pressed', value.toString() );
+ }
this.setActive( value );
}
- // Parent method (from mixin)
- OO.ui.ToggleWidget.prototype.setValue.call( this, value );
+ // Parent method
+ OO.ui.ToggleButtonWidget.super.prototype.setValue.call( this, value );
return this;
};
/**
- * Icon widget.
- *
- * See OO.ui.IconElement for more information.
- *
- * @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.IconElement
- * @mixins OO.ui.TitledElement
- *
- * @constructor
- * @param {Object} [config] Configuration options
+ * @inheritdoc
*/
-OO.ui.IconWidget = function OoUiIconWidget( config ) {
- // Config intialization
- config = config || {};
-
- // Parent constructor
- OO.ui.IconWidget.super.call( this, config );
-
- // Mixin constructors
- OO.ui.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );
- OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
-
- // Initialization
- this.$element.addClass( 'oo-ui-iconWidget' );
+OO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {
+ if ( this.$button ) {
+ this.$button.removeAttr( 'aria-pressed' );
+ }
+ OO.ui.ButtonElement.prototype.setButtonElement.call( this, $button );
+ this.$button.attr( 'aria-pressed', this.value.toString() );
};
-/* Setup */
-
-OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
-
-/* Static Properties */
-
-OO.ui.IconWidget.static.tagName = 'span';
-
/**
- * Indicator widget.
+ * DropdownWidgets are not menus themselves, rather they contain a menu of options created with
+ * OO.ui.MenuOptionWidget. The DropdownWidget takes care of opening and displaying the menu so that
+ * users can interact with it.
*
- * See OO.ui.IndicatorElement for more information.
+ * @example
+ * // Example: A DropdownWidget with a menu that contains three options
+ * var dropDown = new OO.ui.DropdownWidget( {
+ * label: 'Dropdown menu: Select a menu option',
+ * menu: {
+ * items: [
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'a',
+ * label: 'First'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'b',
+ * label: 'Second'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'c',
+ * label: 'Third'
+ * } )
+ * ]
+ * }
+ * } );
*
- * @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.IndicatorElement
- * @mixins OO.ui.TitledElement
- *
- * @constructor
- * @param {Object} [config] Configuration options
- */
-OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
- // Config intialization
- config = config || {};
-
- // Parent constructor
- OO.ui.IndicatorWidget.super.call( this, config );
-
- // Mixin constructors
- OO.ui.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );
- OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
-
- // Initialization
- this.$element.addClass( 'oo-ui-indicatorWidget' );
-};
-
-/* Setup */
-
-OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
-
-/* Static Properties */
-
-OO.ui.IndicatorWidget.static.tagName = 'span';
-
-/**
- * Inline menu of options.
+ * $( 'body' ).append( dropDown.$element );
*
- * Inline menus provide a control for accessing a menu and compose a menu within the widget, which
- * can be accessed using the #getMenu method.
+ * For more information, please see the [OOjs UI documentation on MediaWiki] [1].
*
- * Use with OO.ui.MenuOptionWidget.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
*
* @class
* @extends OO.ui.Widget
@@ -8558,66 +11843,75 @@ OO.ui.IndicatorWidget.static.tagName = 'span';
* @mixins OO.ui.IndicatorElement
* @mixins OO.ui.LabelElement
* @mixins OO.ui.TitledElement
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {Object} [config] Configuration options
* @cfg {Object} [menu] Configuration options to pass to menu widget
*/
-OO.ui.InlineMenuWidget = function OoUiInlineMenuWidget( config ) {
+OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
// Configuration initialization
config = $.extend( { indicator: 'down' }, config );
// Parent constructor
- OO.ui.InlineMenuWidget.super.call( this, config );
+ OO.ui.DropdownWidget.super.call( this, config );
+
+ // Properties (must be set before TabIndexedElement constructor call)
+ this.$handle = this.$( '<span>' );
// Mixin constructors
OO.ui.IconElement.call( this, config );
OO.ui.IndicatorElement.call( this, config );
OO.ui.LabelElement.call( this, config );
OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
// Properties
- this.menu = new OO.ui.MenuWidget( $.extend( { $: this.$, widget: this }, config.menu ) );
- this.$handle = this.$( '<span>' );
+ this.menu = new OO.ui.MenuSelectWidget( $.extend( { widget: this }, config.menu ) );
// Events
- this.$element.on( { click: OO.ui.bind( this.onClick, this ) } );
+ this.$handle.on( {
+ click: this.onClick.bind( this ),
+ keypress: this.onKeyPress.bind( this )
+ } );
this.menu.connect( this, { select: 'onMenuSelect' } );
// Initialization
this.$handle
- .addClass( 'oo-ui-inlineMenuWidget-handle' )
+ .addClass( 'oo-ui-dropdownWidget-handle' )
.append( this.$icon, this.$label, this.$indicator );
this.$element
- .addClass( 'oo-ui-inlineMenuWidget' )
+ .addClass( 'oo-ui-dropdownWidget' )
.append( this.$handle, this.menu.$element );
};
/* Setup */
-OO.inheritClass( OO.ui.InlineMenuWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IconElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IndicatorElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.LabelElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.TitledElement );
+OO.inheritClass( OO.ui.DropdownWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.TabIndexedElement );
/* Methods */
/**
* Get the menu.
*
- * @return {OO.ui.MenuWidget} Menu of widget
+ * @return {OO.ui.MenuSelectWidget} Menu of widget
*/
-OO.ui.InlineMenuWidget.prototype.getMenu = function () {
+OO.ui.DropdownWidget.prototype.getMenu = function () {
return this.menu;
};
/**
* Handles menu select events.
*
- * @param {OO.ui.MenuItemWidget} item Selected menu item
+ * @private
+ * @param {OO.ui.MenuOptionWidget} item Selected menu item
*/
-OO.ui.InlineMenuWidget.prototype.onMenuSelect = function ( item ) {
+OO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {
var selectedLabel;
if ( !item ) {
@@ -8635,43 +11929,163 @@ OO.ui.InlineMenuWidget.prototype.onMenuSelect = function ( item ) {
};
/**
- * Handles mouse click events.
+ * Handle mouse click events.
*
+ * @private
* @param {jQuery.Event} e Mouse click event
*/
-OO.ui.InlineMenuWidget.prototype.onClick = function ( e ) {
- // Skip clicks within the menu
- if ( $.contains( this.menu.$element[0], e.target ) ) {
- return;
+OO.ui.DropdownWidget.prototype.onClick = function ( e ) {
+ if ( !this.isDisabled() && e.which === 1 ) {
+ this.menu.toggle();
}
+ return false;
+};
- if ( !this.isDisabled() ) {
- if ( this.menu.isVisible() ) {
- this.menu.toggle( false );
- } else {
- this.menu.toggle( true );
- }
+/**
+ * Handle key press events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.DropdownWidget.prototype.onKeyPress = function ( e ) {
+ if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+ this.menu.toggle();
+ return false;
}
- return false;
};
/**
- * Base class for input widgets.
+ * IconWidget is a generic widget for {@link OO.ui.IconElement icons}. In general, IconWidgets should be used with OO.ui.LabelWidget,
+ * which creates a label that identifies the icon’s function. See the [OOjs UI documentation on MediaWiki] [1]
+ * for a list of icons included in the library.
+ *
+ * @example
+ * // An icon widget with a label
+ * var myIcon = new OO.ui.IconWidget( {
+ * icon: 'help',
+ * iconTitle: 'Help'
+ * } );
+ * // Create a label.
+ * var iconLabel = new OO.ui.LabelWidget( {
+ * label: 'Help'
+ * } );
+ * $( 'body' ).append( myIcon.$element, iconLabel.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IconWidget = function OoUiIconWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.IconWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+ OO.ui.FlaggedElement.call( this, $.extend( {}, config, { $flagged: this.$element } ) );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-iconWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.FlaggedElement );
+
+/* Static Properties */
+
+OO.ui.IconWidget.static.tagName = 'span';
+
+/**
+ * IndicatorWidgets create indicators, which are small graphics that are generally used to draw
+ * attention to the status of an item or to clarify the function of a control. For a list of
+ * indicators included in the library, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example of an indicator widget
+ * var indicator1 = new OO.ui.IndicatorWidget( {
+ * indicator: 'alert'
+ * } );
+ *
+ * // Create a fieldset layout to add a label
+ * var fieldset = new OO.ui.FieldsetLayout();
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( indicator1, { label: 'An alert indicator:' } )
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.IndicatorWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-indicatorWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
+
+/* Static Properties */
+
+OO.ui.IndicatorWidget.static.tagName = 'span';
+
+/**
+ * InputWidget is the base class for all input widgets, which
+ * include {@link OO.ui.TextInputWidget text inputs}, {@link OO.ui.CheckboxInputWidget checkbox inputs},
+ * {@link OO.ui.RadioInputWidget radio inputs}, and {@link OO.ui.ButtonInputWidget button inputs}.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
*
* @abstract
* @class
* @extends OO.ui.Widget
+ * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {string} [name=''] HTML input name
- * @cfg {string} [value=''] Input value
- * @cfg {boolean} [readOnly=false] Prevent changes
- * @cfg {Function} [inputFilter] Filter function to apply to the input. Takes a string argument and returns a string.
+ * @cfg {string} [name=''] The value of the input’s HTML `name` attribute.
+ * @cfg {string} [value=''] The value of the input.
+ * @cfg {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input
+ * before it is accepted.
*/
OO.ui.InputWidget = function OoUiInputWidget( config ) {
- // Config intialization
- config = $.extend( { readOnly: false }, config );
+ // Configuration initialization
+ config = config || {};
// Parent constructor
OO.ui.InputWidget.super.call( this, config );
@@ -8679,30 +12093,37 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
// Properties
this.$input = this.getInputElement( config );
this.value = '';
- this.readOnly = false;
this.inputFilter = config.inputFilter;
+ // Mixin constructors
+ OO.ui.FlaggedElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );
+
// Events
- this.$input.on( 'keydown mouseup cut paste change input select', OO.ui.bind( this.onEdit, this ) );
+ this.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );
// Initialization
this.$input
.attr( 'name', config.name )
.prop( 'disabled', this.isDisabled() );
- this.setReadOnly( config.readOnly );
- this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input );
+ this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input, $( '<span>' ) );
this.setValue( config.value );
};
/* Setup */
OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.InputWidget, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.InputWidget, OO.ui.TabIndexedElement );
/* Events */
/**
* @event change
- * @param value
+ *
+ * A change event is emitted when the value of the input changes.
+ *
+ * @param {string} value
*/
/* Methods */
@@ -8710,16 +12131,21 @@ OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
/**
* Get input element.
*
- * @param {Object} [config] Configuration options
+ * Subclasses of OO.ui.InputWidget use the `config` parameter to produce different elements in
+ * different circumstances. The element must have a `value` property (like form elements).
+ *
+ * @private
+ * @param {Object} config Configuration options
* @return {jQuery} Input element
*/
OO.ui.InputWidget.prototype.getInputElement = function () {
- return this.$( '<input>' );
+ return $( '<input>' );
};
/**
* Handle potentially value-changing events.
*
+ * @private
* @param {jQuery.Event} e Key down, mouse up, cut, paste, change, input, or select event
*/
OO.ui.InputWidget.prototype.onEdit = function () {
@@ -8738,22 +12164,23 @@ OO.ui.InputWidget.prototype.onEdit = function () {
* @return {string} Input value
*/
OO.ui.InputWidget.prototype.getValue = function () {
+ // Resynchronize our internal data with DOM data. Other scripts executing on the page can modify
+ // it, and we won't know unless they're kind enough to trigger a 'change' event.
+ var value = this.$input.val();
+ if ( this.value !== value ) {
+ this.setValue( value );
+ }
return this.value;
};
/**
- * Sets the direction of the current input, either RTL or LTR
+ * Set the direction of the input, either RTL (right-to-left) or LTR (left-to-right).
*
* @param {boolean} isRTL
+ * Direction is right-to-left
*/
OO.ui.InputWidget.prototype.setRTL = function ( isRTL ) {
- if ( isRTL ) {
- this.$input.removeClass( 'oo-ui-ltr' );
- this.$input.addClass( 'oo-ui-rtl' );
- } else {
- this.$input.removeClass( 'oo-ui-rtl' );
- this.$input.addClass( 'oo-ui-ltr' );
- }
+ this.$input.prop( 'dir', isRTL ? 'rtl' : 'ltr' );
};
/**
@@ -8764,28 +12191,29 @@ OO.ui.InputWidget.prototype.setRTL = function ( isRTL ) {
* @chainable
*/
OO.ui.InputWidget.prototype.setValue = function ( value ) {
- value = this.sanitizeValue( value );
+ value = this.cleanUpValue( value );
+ // Update the DOM if it has changed. Note that with cleanUpValue, it
+ // is possible for the DOM value to change without this.value changing.
+ if ( this.$input.val() !== value ) {
+ this.$input.val( value );
+ }
if ( this.value !== value ) {
this.value = value;
this.emit( 'change', this.value );
}
- // Update the DOM if it has changed. Note that with sanitizeValue, it
- // is possible for the DOM value to change without this.value changing.
- if ( this.$input.val() !== this.value ) {
- this.$input.val( this.value );
- }
return this;
};
/**
- * Sanitize incoming value.
+ * Clean up incoming value.
*
- * Ensures value is a string, and converts undefined and null to empty strings.
+ * Ensures value is a string, and converts undefined and null to empty string.
*
+ * @private
* @param {string} value Original value
- * @return {string} Sanitized value
+ * @return {string} Cleaned up value
*/
-OO.ui.InputWidget.prototype.sanitizeValue = function ( value ) {
+OO.ui.InputWidget.prototype.cleanUpValue = function ( value ) {
if ( value === undefined || value === null ) {
return '';
} else if ( this.inputFilter ) {
@@ -8796,159 +12224,572 @@ OO.ui.InputWidget.prototype.sanitizeValue = function ( value ) {
};
/**
- * Simulate the behavior of clicking on a label bound to this input.
+ * Simulate the behavior of clicking on a label bound to this input. This method is only called by
+ * {@link OO.ui.LabelWidget LabelWidget} and {@link OO.ui.FieldLayout FieldLayout}. It should not be
+ * called directly.
*/
OO.ui.InputWidget.prototype.simulateLabelClick = function () {
if ( !this.isDisabled() ) {
- if ( this.$input.is( ':checkbox,:radio' ) ) {
+ if ( this.$input.is( ':checkbox, :radio' ) ) {
this.$input.click();
- } else if ( this.$input.is( ':input' ) ) {
- this.$input[0].focus();
+ }
+ if ( this.$input.is( ':input' ) ) {
+ this.$input[ 0 ].focus();
}
}
};
/**
- * Check if the widget is read-only.
- *
- * @return {boolean}
+ * @inheritdoc
*/
-OO.ui.InputWidget.prototype.isReadOnly = function () {
- return this.readOnly;
+OO.ui.InputWidget.prototype.setDisabled = function ( state ) {
+ OO.ui.InputWidget.super.prototype.setDisabled.call( this, state );
+ if ( this.$input ) {
+ this.$input.prop( 'disabled', this.isDisabled() );
+ }
+ return this;
};
/**
- * Set the read-only state of the widget.
+ * Focus the input.
*
- * This should probably change the widgets's appearance and prevent it from being used.
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.focus = function () {
+ this.$input[ 0 ].focus();
+ return this;
+};
+
+/**
+ * Blur the input.
*
- * @param {boolean} state Make input read-only
* @chainable
*/
-OO.ui.InputWidget.prototype.setReadOnly = function ( state ) {
- this.readOnly = !!state;
- this.$input.prop( 'readOnly', this.readOnly );
+OO.ui.InputWidget.prototype.blur = function () {
+ this.$input[ 0 ].blur();
return this;
};
/**
- * @inheritdoc
+ * ButtonInputWidget is used to submit HTML forms and is intended to be used within
+ * a OO.ui.FormLayout. If you do not need the button to work with HTML forms, you probably
+ * want to use OO.ui.ButtonWidget instead. Button input widgets can be rendered as either an
+ * HTML `<button/>` (the default) or an HTML `<input/>` tags. See the
+ * [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * @example
+ * // A ButtonInputWidget rendered as an HTML button, the default.
+ * var button = new OO.ui.ButtonInputWidget( {
+ * label: 'Input button',
+ * icon: 'check',
+ * value: 'check'
+ * } );
+ * $( 'body' ).append( button.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs#Button_inputs
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [type='button'] The value of the HTML `'type'` attribute: 'button', 'submit' or 'reset'.
+ * @cfg {boolean} [useInputTag=false] Use an `<input/>` tag instead of a `<button/>` tag, the default.
+ * Widgets configured to be an `<input/>` do not support {@link #icon icons} and {@link #indicator indicators},
+ * non-plaintext {@link #label labels}, or {@link #value values}. In general, useInputTag should only
+ * be set to `true` when there’s need to support IE6 in a form with multiple buttons.
*/
-OO.ui.InputWidget.prototype.setDisabled = function ( state ) {
- OO.ui.InputWidget.super.prototype.setDisabled.call( this, state );
- if ( this.$input ) {
- this.$input.prop( 'disabled', this.isDisabled() );
+OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
+ // Configuration initialization
+ config = $.extend( { type: 'button', useInputTag: false }, config );
+
+ // Properties (must be set before parent constructor, which calls #setValue)
+ this.useInputTag = config.useInputTag;
+
+ // Parent constructor
+ OO.ui.ButtonInputWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.ButtonElement.call( this, $.extend( {}, config, { $button: this.$input } ) );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
+
+ // Initialization
+ if ( !config.useInputTag ) {
+ this.$input.append( this.$icon, this.$label, this.$indicator );
}
- return this;
+ this.$element.addClass( 'oo-ui-buttonInputWidget' );
};
+/* Setup */
+
+OO.inheritClass( OO.ui.ButtonInputWidget, OO.ui.InputWidget );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.TitledElement );
+
+/* Methods */
+
/**
- * Focus the input.
+ * @inheritdoc
+ * @private
+ */
+OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
+ var html = '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + config.type + '">';
+ return $( html );
+};
+
+/**
+ * Set label value.
+ *
+ * If #useInputTag is `true`, the label is set as the `value` of the `<input/>` tag.
*
+ * @param {jQuery|string|Function|null} label Label nodes, text, a function that returns nodes or
+ * text, or `null` for no label
* @chainable
*/
-OO.ui.InputWidget.prototype.focus = function () {
- this.$input[0].focus();
+OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
+ OO.ui.LabelElement.prototype.setLabel.call( this, label );
+
+ if ( this.useInputTag ) {
+ if ( typeof label === 'function' ) {
+ label = OO.ui.resolveMsg( label );
+ }
+ if ( label instanceof jQuery ) {
+ label = label.text();
+ }
+ if ( !label ) {
+ label = '';
+ }
+ this.$input.val( label );
+ }
+
return this;
};
/**
- * Blur the input.
+ * Set the value of the input.
+ *
+ * This method is disabled for button inputs configured as {@link #useInputTag <input/> tags}, as
+ * they do not support {@link #value values}.
*
+ * @param {string} value New value
* @chainable
*/
-OO.ui.InputWidget.prototype.blur = function () {
- this.$input[0].blur();
+OO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {
+ if ( !this.useInputTag ) {
+ OO.ui.ButtonInputWidget.super.prototype.setValue.call( this, value );
+ }
return this;
};
/**
- * Checkbox input widget.
+ * CheckboxInputWidgets, like HTML checkboxes, can be selected and/or configured with a value.
+ * Note that these {@link OO.ui.InputWidget input widgets} are best laid out
+ * in {@link OO.ui.FieldLayout field layouts} that use the {@link OO.ui.FieldLayout#align inline}
+ * alignment. For more information, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * This widget can be used inside a HTML form, such as a OO.ui.FormLayout.
+ *
+ * @example
+ * // An example of selected, unselected, and disabled checkbox inputs
+ * var checkbox1=new OO.ui.CheckboxInputWidget( {
+ * value: 'a',
+ * selected: true
+ * } );
+ * var checkbox2=new OO.ui.CheckboxInputWidget( {
+ * value: 'b'
+ * } );
+ * var checkbox3=new OO.ui.CheckboxInputWidget( {
+ * value:'c',
+ * disabled: true
+ * } );
+ * // Create a fieldset layout with fields for each checkbox.
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'Checkboxes'
+ * } );
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( checkbox1, { label: 'Selected checkbox', align: 'inline' } ),
+ * new OO.ui.FieldLayout( checkbox2, { label: 'Unselected checkbox', align: 'inline' } ),
+ * new OO.ui.FieldLayout( checkbox3, { label: 'Disabled checkbox', align: 'inline' } ),
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
*
* @class
* @extends OO.ui.InputWidget
*
* @constructor
* @param {Object} [config] Configuration options
+ * @cfg {boolean} [selected=false] Select the checkbox initially. By default, the checkbox is not selected.
*/
OO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
// Parent constructor
OO.ui.CheckboxInputWidget.super.call( this, config );
// Initialization
this.$element.addClass( 'oo-ui-checkboxInputWidget' );
+ this.setSelected( config.selected !== undefined ? config.selected : false );
};
/* Setup */
OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
-/* Events */
-
/* Methods */
/**
- * Get input element.
- *
- * @return {jQuery} Input element
+ * @inheritdoc
+ * @private
*/
OO.ui.CheckboxInputWidget.prototype.getInputElement = function () {
- return this.$( '<input type="checkbox" />' );
+ return $( '<input type="checkbox" />' );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
+ var widget = this;
+ if ( !this.isDisabled() ) {
+ // Allow the stack to clear so the value will be updated
+ setTimeout( function () {
+ widget.setSelected( widget.$input.prop( 'checked' ) );
+ } );
+ }
};
/**
- * Get checked state of the checkbox
+ * Set selection state of this checkbox.
*
- * @return {boolean} If the checkbox is checked
+ * @param {boolean} state `true` for selected
+ * @chainable
*/
-OO.ui.CheckboxInputWidget.prototype.getValue = function () {
- return this.value;
+OO.ui.CheckboxInputWidget.prototype.setSelected = function ( state ) {
+ state = !!state;
+ if ( this.selected !== state ) {
+ this.selected = state;
+ this.$input.prop( 'checked', this.selected );
+ this.emit( 'change', this.selected );
+ }
+ return this;
};
/**
- * Set value
+ * Check if this checkbox is selected.
+ *
+ * @return {boolean} Checkbox is selected
*/
-OO.ui.CheckboxInputWidget.prototype.setValue = function ( value ) {
- value = !!value;
- if ( this.value !== value ) {
- this.value = value;
- this.$input.prop( 'checked', this.value );
- this.emit( 'change', this.value );
+OO.ui.CheckboxInputWidget.prototype.isSelected = function () {
+ // Resynchronize our internal data with DOM data. Other scripts executing on the page can modify
+ // it, and we won't know unless they're kind enough to trigger a 'change' event.
+ var selected = this.$input.prop( 'checked' );
+ if ( this.selected !== selected ) {
+ this.setSelected( selected );
}
+ return this.selected;
};
/**
+ * DropdownInputWidget is a {@link OO.ui.DropdownWidget DropdownWidget} intended to be used
+ * within a HTML form, such as a OO.ui.FormLayout. The selected value is synchronized with the value
+ * of a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for
+ * more information about input widgets.
+ *
+ * @example
+ * // Example: A DropdownInputWidget with three options
+ * var dropDown = new OO.ui.DropdownInputWidget( {
+ * label: 'Dropdown menu: Select a menu option',
+ * options: [
+ * { data: 'a', label: 'First' } ,
+ * { data: 'b', label: 'Second'} ,
+ * { data: 'c', label: 'Third' }
+ * ]
+ * } );
+ * $( 'body' ).append( dropDown.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`
+ */
+OO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties (must be done before parent constructor which calls #setDisabled)
+ this.dropdownWidget = new OO.ui.DropdownWidget();
+
+ // Parent constructor
+ OO.ui.DropdownInputWidget.super.call( this, config );
+
+ // Events
+ this.dropdownWidget.getMenu().connect( this, { select: 'onMenuSelect' } );
+
+ // Initialization
+ this.setOptions( config.options || [] );
+ this.$element
+ .addClass( 'oo-ui-dropdownInputWidget' )
+ .append( this.dropdownWidget.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.DropdownInputWidget, OO.ui.InputWidget );
+
+/* Methods */
+
+/**
* @inheritdoc
+ * @private
*/
-OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
- var widget = this;
- if ( !this.isDisabled() ) {
- // Allow the stack to clear so the value will be updated
- setTimeout( function () {
- widget.setValue( widget.$input.prop( 'checked' ) );
- } );
+OO.ui.DropdownInputWidget.prototype.getInputElement = function () {
+ return $( '<input type="hidden">' );
+};
+
+/**
+ * Handles menu select events.
+ *
+ * @private
+ * @param {OO.ui.MenuOptionWidget} item Selected menu item
+ */
+OO.ui.DropdownInputWidget.prototype.onMenuSelect = function ( item ) {
+ this.setValue( item.getData() );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {
+ this.dropdownWidget.getMenu().selectItemByData( value );
+ OO.ui.DropdownInputWidget.super.prototype.setValue.call( this, value );
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.DropdownInputWidget.prototype.setDisabled = function ( state ) {
+ this.dropdownWidget.setDisabled( state );
+ OO.ui.DropdownInputWidget.super.prototype.setDisabled.call( this, state );
+ return this;
+};
+
+/**
+ * Set the options available for this input.
+ *
+ * @param {Object[]} options Array of menu options in the format `{ data: …, label: … }`
+ * @chainable
+ */
+OO.ui.DropdownInputWidget.prototype.setOptions = function ( options ) {
+ var value = this.getValue();
+
+ // Rebuild the dropdown menu
+ this.dropdownWidget.getMenu()
+ .clearItems()
+ .addItems( options.map( function ( opt ) {
+ return new OO.ui.MenuOptionWidget( {
+ data: opt.data,
+ label: opt.label !== undefined ? opt.label : opt.data
+ } );
+ } ) );
+
+ // Restore the previous value, or reset to something sensible
+ if ( this.dropdownWidget.getMenu().getItemFromData( value ) ) {
+ // Previous value is still available, ensure consistency with the dropdown
+ this.setValue( value );
+ } else {
+ // No longer valid, reset
+ if ( options.length ) {
+ this.setValue( options[ 0 ].data );
+ }
}
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.DropdownInputWidget.prototype.focus = function () {
+ this.dropdownWidget.getMenu().toggle( true );
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.DropdownInputWidget.prototype.blur = function () {
+ this.dropdownWidget.getMenu().toggle( false );
+ return this;
+};
+
+/**
+ * RadioInputWidget creates a single radio button. Because radio buttons are usually used as a set,
+ * in most cases you will want to use a {@link OO.ui.RadioSelectWidget radio select}
+ * with {@link OO.ui.RadioOptionWidget radio options} instead of this class. For more information,
+ * please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * This widget can be used inside a HTML form, such as a OO.ui.FormLayout.
+ *
+ * @example
+ * // An example of selected, unselected, and disabled radio inputs
+ * var radio1 = new OO.ui.RadioInputWidget( {
+ * value: 'a',
+ * selected: true
+ * } );
+ * var radio2 = new OO.ui.RadioInputWidget( {
+ * value: 'b'
+ * } );
+ * var radio3 = new OO.ui.RadioInputWidget( {
+ * value: 'c',
+ * disabled: true
+ * } );
+ * // Create a fieldset layout with fields for each radio button.
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'Radio inputs'
+ * } );
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( radio1, { label: 'Selected', align: 'inline' } ),
+ * new OO.ui.FieldLayout( radio2, { label: 'Unselected', align: 'inline' } ),
+ * new OO.ui.FieldLayout( radio3, { label: 'Disabled', align: 'inline' } ),
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [selected=false] Select the radio button initially. By default, the radio button is not selected.
+ */
+OO.ui.RadioInputWidget = function OoUiRadioInputWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.RadioInputWidget.super.call( this, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-radioInputWidget' );
+ this.setSelected( config.selected !== undefined ? config.selected : false );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.RadioInputWidget, OO.ui.InputWidget );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ * @private
+ */
+OO.ui.RadioInputWidget.prototype.getInputElement = function () {
+ return $( '<input type="radio" />' );
};
/**
- * Input widget with a text field.
+ * @inheritdoc
+ */
+OO.ui.RadioInputWidget.prototype.onEdit = function () {
+ // RadioInputWidget doesn't track its state.
+};
+
+/**
+ * Set selection state of this radio button.
+ *
+ * @param {boolean} state `true` for selected
+ * @chainable
+ */
+OO.ui.RadioInputWidget.prototype.setSelected = function ( state ) {
+ // RadioInputWidget doesn't track its state.
+ this.$input.prop( 'checked', state );
+ return this;
+};
+
+/**
+ * Check if this radio button is selected.
+ *
+ * @return {boolean} Radio is selected
+ */
+OO.ui.RadioInputWidget.prototype.isSelected = function () {
+ return this.$input.prop( 'checked' );
+};
+
+/**
+ * TextInputWidgets, like HTML text inputs, can be configured with options that customize the
+ * size of the field as well as its presentation. In addition, these widgets can be configured
+ * with {@link OO.ui.IconElement icons}, {@link OO.ui.IndicatorElement indicators}, an optional
+ * validation-pattern (used to determine if an input value is valid or not) and an input filter,
+ * which modifies incoming values rather than validating them.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
+ *
+ * This widget can be used inside a HTML form, such as a OO.ui.FormLayout.
+ *
+ * @example
+ * // Example of a text input widget
+ * var textInput = new OO.ui.TextInputWidget( {
+ * value: 'Text input'
+ * } )
+ * $( 'body' ).append( textInput.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
*
* @class
* @extends OO.ui.InputWidget
* @mixins OO.ui.IconElement
* @mixins OO.ui.IndicatorElement
* @mixins OO.ui.PendingElement
+ * @mixins OO.ui.LabelElement
*
* @constructor
* @param {Object} [config] Configuration options
+ * @cfg {string} [type='text'] The value of the HTML `type` attribute
* @cfg {string} [placeholder] Placeholder text
+ * @cfg {boolean} [autofocus=false] Use an HTML `autofocus` attribute to
+ * instruct the browser to focus this widget.
+ * @cfg {boolean} [readOnly=false] Prevent changes to the value of the text input.
+ * @cfg {number} [maxLength] Maximum number of characters allowed in the input.
* @cfg {boolean} [multiline=false] Allow multiple lines of text
- * @cfg {boolean} [autosize=false] Automatically resize to fit content
- * @cfg {boolean} [maxRows=10] Maximum number of rows to make visible when autosizing
+ * @cfg {boolean} [autosize=false] Automatically resize the text input to fit its content.
+ * Use the #maxRows config to specify a maximum number of displayed rows.
+ * @cfg {boolean} [maxRows=10] Maximum number of rows to display when #autosize is set to true.
+ * @cfg {string} [labelPosition='after'] The position of the inline label relative to that of
+ * the value or placeholder text: `'before'` or `'after'`
+ * @cfg {boolean} [required=false] Mark the field as required
+ * @cfg {RegExp|Function|string} [validate] Validation pattern: when string, a symbolic name of a
+ * pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer'
+ * (the value must contain only numbers); when RegExp, a regular expression that must match the
+ * value for it to be considered valid; when Function, a function receiving the value as parameter
+ * that must return true, or promise resolving to true, for it to be considered valid.
*/
OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
// Configuration initialization
- config = config || {};
+ config = $.extend( {
+ type: 'text',
+ labelPosition: 'after',
+ maxRows: 10
+ }, config );
// Parent constructor
OO.ui.TextInputWidget.super.call( this, config );
@@ -8957,26 +12798,61 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
OO.ui.IconElement.call( this, config );
OO.ui.IndicatorElement.call( this, config );
OO.ui.PendingElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
// Properties
+ this.readOnly = false;
this.multiline = !!config.multiline;
this.autosize = !!config.autosize;
- this.maxRows = config.maxRows !== undefined ? config.maxRows : 10;
+ this.maxRows = config.maxRows;
+ this.validate = null;
+
+ // Clone for resizing
+ if ( this.autosize ) {
+ this.$clone = this.$input
+ .clone()
+ .insertAfter( this.$input )
+ .attr( 'aria-hidden', 'true' )
+ .addClass( 'oo-ui-element-hidden' );
+ }
+
+ this.setValidation( config.validate );
+ this.setLabelPosition( config.labelPosition );
// Events
- this.$input.on( 'keypress', OO.ui.bind( this.onKeyPress, this ) );
- this.$element.on( 'DOMNodeInsertedIntoDocument', OO.ui.bind( this.onElementAttach, this ) );
- this.$icon.on( 'mousedown', OO.ui.bind( this.onIconMouseDown, this ) );
- this.$indicator.on( 'mousedown', OO.ui.bind( this.onIndicatorMouseDown, this ) );
+ this.$input.on( {
+ keypress: this.onKeyPress.bind( this ),
+ blur: this.onBlur.bind( this )
+ } );
+ this.$input.one( {
+ focus: this.onElementAttach.bind( this )
+ } );
+ this.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );
+ this.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );
+ this.on( 'labelChange', this.updatePosition.bind( this ) );
+ this.connect( this, { change: 'onChange' } );
// Initialization
this.$element
.addClass( 'oo-ui-textInputWidget' )
.append( this.$icon, this.$indicator );
+ this.setReadOnly( !!config.readOnly );
if ( config.placeholder ) {
this.$input.attr( 'placeholder', config.placeholder );
}
- this.$element.attr( 'role', 'textbox' );
+ if ( config.maxLength !== undefined ) {
+ this.$input.attr( 'maxlength', config.maxLength );
+ }
+ if ( config.autofocus ) {
+ this.$input.attr( 'autofocus', 'autofocus' );
+ }
+ if ( config.required ) {
+ this.$input.attr( 'required', 'required' );
+ this.$input.attr( 'aria-required', 'true' );
+ }
+ if ( this.label || config.autosize ) {
+ this.installParentChangeDetector();
+ }
};
/* Setup */
@@ -8985,41 +12861,37 @@ OO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );
OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IconElement );
OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IndicatorElement );
OO.mixinClass( OO.ui.TextInputWidget, OO.ui.PendingElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.LabelElement );
+
+/* Static properties */
+
+OO.ui.TextInputWidget.static.validationPatterns = {
+ 'non-empty': /.+/,
+ integer: /^\d+$/
+};
/* Events */
/**
- * User presses enter inside the text box.
+ * An `enter` event is emitted when the user presses 'enter' inside the text box.
*
- * Not called if input is multiline.
+ * Not emitted if the input is multiline.
*
* @event enter
*/
-/**
- * User clicks the icon.
- *
- * @event icon
- */
-
-/**
- * User clicks the indicator.
- *
- * @event indicator
- */
-
/* Methods */
/**
* Handle icon mouse down events.
*
+ * @private
* @param {jQuery.Event} e Mouse down event
* @fires icon
*/
OO.ui.TextInputWidget.prototype.onIconMouseDown = function ( e ) {
if ( e.which === 1 ) {
- this.$input[0].focus();
- this.emit( 'icon' );
+ this.$input[ 0 ].focus();
return false;
}
};
@@ -9027,13 +12899,13 @@ OO.ui.TextInputWidget.prototype.onIconMouseDown = function ( e ) {
/**
* Handle indicator mouse down events.
*
+ * @private
* @param {jQuery.Event} e Mouse down event
* @fires indicator
*/
OO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
if ( e.which === 1 ) {
- this.$input[0].focus();
- this.emit( 'indicator' );
+ this.$input[ 0 ].focus();
return false;
}
};
@@ -9041,96 +12913,203 @@ OO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
/**
* Handle key press events.
*
+ * @private
* @param {jQuery.Event} e Key press event
* @fires enter If enter key is pressed and input is not multiline
*/
OO.ui.TextInputWidget.prototype.onKeyPress = function ( e ) {
if ( e.which === OO.ui.Keys.ENTER && !this.multiline ) {
- this.emit( 'enter' );
+ this.emit( 'enter', e );
}
};
/**
+ * Handle blur events.
+ *
+ * @private
+ * @param {jQuery.Event} e Blur event
+ */
+OO.ui.TextInputWidget.prototype.onBlur = function () {
+ this.setValidityFlag();
+};
+
+/**
* Handle element attach events.
*
+ * @private
* @param {jQuery.Event} e Element attach event
*/
OO.ui.TextInputWidget.prototype.onElementAttach = function () {
+ // Any previously calculated size is now probably invalid if we reattached elsewhere
+ this.valCache = null;
this.adjustSize();
+ this.positionLabel();
};
/**
- * @inheritdoc
+ * Handle change events.
+ *
+ * @param {string} value
+ * @private
*/
-OO.ui.TextInputWidget.prototype.onEdit = function () {
+OO.ui.TextInputWidget.prototype.onChange = function () {
+ this.setValidityFlag();
this.adjustSize();
-
- // Parent method
- return OO.ui.TextInputWidget.super.prototype.onEdit.call( this );
};
/**
- * @inheritdoc
+ * Check if the input is {@link #readOnly read-only}.
+ *
+ * @return {boolean}
*/
-OO.ui.TextInputWidget.prototype.setValue = function ( value ) {
- // Parent method
- OO.ui.TextInputWidget.super.prototype.setValue.call( this, value );
+OO.ui.TextInputWidget.prototype.isReadOnly = function () {
+ return this.readOnly;
+};
- this.adjustSize();
+/**
+ * Set the {@link #readOnly read-only} state of the input.
+ *
+ * @param {boolean} state Make input read-only
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {
+ this.readOnly = !!state;
+ this.$input.prop( 'readOnly', this.readOnly );
return this;
};
/**
+ * Support function for making #onElementAttach work across browsers.
+ *
+ * This whole function could be replaced with one line of code using the DOMNodeInsertedIntoDocument
+ * event, but it's not supported by Firefox and allegedly deprecated, so we only use it as fallback.
+ *
+ * Due to MutationObserver performance woes, #onElementAttach is only somewhat reliably called the
+ * first time that the element gets attached to the documented.
+ */
+OO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {
+ var mutationObserver, onRemove, topmostNode, fakeParentNode,
+ MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
+ widget = this;
+
+ if ( MutationObserver ) {
+ // The new way. If only it wasn't so ugly.
+
+ if ( this.$element.closest( 'html' ).length ) {
+ // Widget is attached already, do nothing. This breaks the functionality of this function when
+ // the widget is detached and reattached. Alas, doing this correctly with MutationObserver
+ // would require observation of the whole document, which would hurt performance of other,
+ // more important code.
+ return;
+ }
+
+ // Find topmost node in the tree
+ topmostNode = this.$element[0];
+ while ( topmostNode.parentNode ) {
+ topmostNode = topmostNode.parentNode;
+ }
+
+ // We have no way to detect the $element being attached somewhere without observing the entire
+ // DOM with subtree modifications, which would hurt performance. So we cheat: we hook to the
+ // parent node of $element, and instead detect when $element is removed from it (and thus
+ // probably attached somewhere else). If there is no parent, we create a "fake" one. If it
+ // doesn't get attached, we end up back here and create the parent.
+
+ mutationObserver = new MutationObserver( function ( mutations ) {
+ var i, j, removedNodes;
+ for ( i = 0; i < mutations.length; i++ ) {
+ removedNodes = mutations[ i ].removedNodes;
+ for ( j = 0; j < removedNodes.length; j++ ) {
+ if ( removedNodes[ j ] === topmostNode ) {
+ setTimeout( onRemove, 0 );
+ return;
+ }
+ }
+ }
+ } );
+
+ onRemove = function () {
+ // If the node was attached somewhere else, report it
+ if ( widget.$element.closest( 'html' ).length ) {
+ widget.onElementAttach();
+ }
+ mutationObserver.disconnect();
+ widget.installParentChangeDetector();
+ };
+
+ // Create a fake parent and observe it
+ fakeParentNode = $( '<div>' ).append( this.$element )[0];
+ mutationObserver.observe( fakeParentNode, { childList: true } );
+ } else {
+ // Using the DOMNodeInsertedIntoDocument event is much nicer and less magical, and works for
+ // detachment and reattachment, but it's not supported by Firefox and allegedly deprecated.
+ this.$element.on( 'DOMNodeInsertedIntoDocument', this.onElementAttach.bind( this ) );
+ }
+};
+
+/**
* Automatically adjust the size of the text input.
*
- * This only affects multi-line inputs that are auto-sized.
+ * This only affects #multiline inputs that are {@link #autosize autosized}.
*
* @chainable
*/
OO.ui.TextInputWidget.prototype.adjustSize = function () {
- var $clone, scrollHeight, innerHeight, outerHeight, maxInnerHeight, idealHeight;
+ var scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError, idealHeight;
- if ( this.multiline && this.autosize ) {
- $clone = this.$input.clone()
+ if ( this.multiline && this.autosize && this.$input.val() !== this.valCache ) {
+ this.$clone
.val( this.$input.val() )
- .css( { height: 0 } )
- .insertAfter( this.$input );
- // Set inline height property to 0 to measure scroll height
- scrollHeight = $clone[0].scrollHeight;
+ .attr( 'rows', '' )
+ // Set inline height property to 0 to measure scroll height
+ .css( 'height', 0 );
+
+ this.$clone.removeClass( 'oo-ui-element-hidden' );
+
+ this.valCache = this.$input.val();
+
+ scrollHeight = this.$clone[ 0 ].scrollHeight;
+
// Remove inline height property to measure natural heights
- $clone.css( 'height', '' );
- innerHeight = $clone.innerHeight();
- outerHeight = $clone.outerHeight();
+ this.$clone.css( 'height', '' );
+ innerHeight = this.$clone.innerHeight();
+ outerHeight = this.$clone.outerHeight();
+
// Measure max rows height
- $clone.attr( 'rows', this.maxRows ).css( 'height', 'auto' );
- maxInnerHeight = $clone.innerHeight();
- $clone.removeAttr( 'rows' ).css( 'height', '' );
- $clone.remove();
- idealHeight = Math.min( maxInnerHeight, scrollHeight );
+ this.$clone
+ .attr( 'rows', this.maxRows )
+ .css( 'height', 'auto' )
+ .val( '' );
+ maxInnerHeight = this.$clone.innerHeight();
+
+ // Difference between reported innerHeight and scrollHeight with no scrollbars present
+ // Equals 1 on Blink-based browsers and 0 everywhere else
+ measurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;
+ idealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );
+
+ this.$clone.addClass( 'oo-ui-element-hidden' );
+
// Only apply inline height when expansion beyond natural height is needed
- this.$input.css(
- 'height',
+ if ( idealHeight > innerHeight ) {
// Use the difference between the inner and outer height as a buffer
- idealHeight > outerHeight ? idealHeight + ( outerHeight - innerHeight ) : ''
- );
+ this.$input.css( 'height', idealHeight + ( outerHeight - innerHeight ) );
+ } else {
+ this.$input.css( 'height', '' );
+ }
}
return this;
};
/**
- * Get input element.
- *
- * @param {Object} [config] Configuration options
- * @return {jQuery} Input element
+ * @inheritdoc
+ * @private
*/
OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
- return config.multiline ? this.$( '<textarea>' ) : this.$( '<input type="text" />' );
+ return config.multiline ? $( '<textarea>' ) : $( '<input type="' + config.type + '" />' );
};
-/* Methods */
-
/**
- * Check if input supports multiple lines.
+ * Check if the input supports multiple lines.
*
* @return {boolean}
*/
@@ -9139,7 +13118,7 @@ OO.ui.TextInputWidget.prototype.isMultiline = function () {
};
/**
- * Check if input automatically adjusts its size.
+ * Check if the input automatically adjusts its size.
*
* @return {boolean}
*/
@@ -9148,7 +13127,7 @@ OO.ui.TextInputWidget.prototype.isAutosizing = function () {
};
/**
- * Select the contents of the input.
+ * Select the entire text of the input.
*
* @chainable
*/
@@ -9158,15 +13137,198 @@ OO.ui.TextInputWidget.prototype.select = function () {
};
/**
- * Text input with a menu of optional values.
+ * Set the validation pattern.
+ *
+ * The validation pattern is either a regular expression, a function, or the symbolic name of a
+ * pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer' (the
+ * value must contain only numbers).
+ *
+ * @param {RegExp|Function|string|null} validate Regular expression, function, or the symbolic name
+ * of a pattern (either ‘integer’ or ‘non-empty’) defined by the class.
+ */
+OO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {
+ if ( validate instanceof RegExp || validate instanceof Function ) {
+ this.validate = validate;
+ } else {
+ this.validate = this.constructor.static.validationPatterns[ validate ] || /.*/;
+ }
+};
+
+/**
+ * Sets the 'invalid' flag appropriately.
+ *
+ * @param {boolean} [isValid] Optionally override validation result
+ */
+OO.ui.TextInputWidget.prototype.setValidityFlag = function ( isValid ) {
+ var widget = this,
+ setFlag = function ( valid ) {
+ if ( !valid ) {
+ widget.$input.attr( 'aria-invalid', 'true' );
+ } else {
+ widget.$input.removeAttr( 'aria-invalid' );
+ }
+ widget.setFlags( { invalid: !valid } );
+ };
+
+ if ( isValid !== undefined ) {
+ setFlag( isValid );
+ } else {
+ this.isValid().done( setFlag );
+ }
+};
+
+/**
+ * Check if a value is valid.
+ *
+ * This method returns a promise that resolves with a boolean `true` if the current value is
+ * considered valid according to the supplied {@link #validate validation pattern}.
+ *
+ * @return {jQuery.Promise} A promise that resolves to a boolean `true` if the value is valid.
+ */
+OO.ui.TextInputWidget.prototype.isValid = function () {
+ if ( this.validate instanceof Function ) {
+ var result = this.validate( this.getValue() );
+ if ( $.isFunction( result.promise ) ) {
+ return result.promise();
+ } else {
+ return $.Deferred().resolve( !!result ).promise();
+ }
+ } else {
+ return $.Deferred().resolve( !!this.getValue().match( this.validate ) ).promise();
+ }
+};
+
+/**
+ * Set the position of the inline label relative to that of the value: `‘before’` or `‘after’`.
+ *
+ * @param {string} labelPosition Label position, 'before' or 'after'
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.setLabelPosition = function ( labelPosition ) {
+ this.labelPosition = labelPosition;
+ this.updatePosition();
+ return this;
+};
+
+/**
+ * Deprecated alias of #setLabelPosition
+ *
+ * @deprecated Use setLabelPosition instead.
+ */
+OO.ui.TextInputWidget.prototype.setPosition =
+ OO.ui.TextInputWidget.prototype.setLabelPosition;
+
+/**
+ * Update the position of the inline label.
+ *
+ * This method is called by #setLabelPosition, and can also be called on its own if
+ * something causes the label to be mispositioned.
+ *
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.updatePosition = function () {
+ var after = this.labelPosition === 'after';
+
+ this.$element
+ .toggleClass( 'oo-ui-textInputWidget-labelPosition-after', !!this.label && after )
+ .toggleClass( 'oo-ui-textInputWidget-labelPosition-before', !!this.label && !after );
+
+ if ( this.label ) {
+ this.positionLabel();
+ }
+
+ return this;
+};
+
+/**
+ * Position the label by setting the correct padding on the input.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.positionLabel = function () {
+ // Clear old values
+ this.$input
+ // Clear old values if present
+ .css( {
+ 'padding-right': '',
+ 'padding-left': ''
+ } );
+
+ if ( this.label ) {
+ this.$element.append( this.$label );
+ } else {
+ this.$label.detach();
+ return;
+ }
+
+ var after = this.labelPosition === 'after',
+ rtl = this.$element.css( 'direction' ) === 'rtl',
+ property = after === rtl ? 'padding-left' : 'padding-right';
+
+ this.$input.css( property, this.$label.outerWidth( true ) );
+
+ return this;
+};
+
+/**
+ * ComboBoxWidgets combine a {@link OO.ui.TextInputWidget text input} (where a value
+ * can be entered manually) and a {@link OO.ui.MenuSelectWidget menu of options} (from which
+ * a value can be chosen instead). Users can choose options from the combo box in one of two ways:
+ *
+ * - by typing a value in the text input field. If the value exactly matches the value of a menu
+ * option, that option will appear to be selected.
+ * - by choosing a value from the menu. The value of the chosen option will then appear in the text
+ * input field.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example: A ComboBoxWidget.
+ * var comboBox = new OO.ui.ComboBoxWidget( {
+ * label: 'ComboBoxWidget',
+ * input: { value: 'Option One' },
+ * menu: {
+ * items: [
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 1',
+ * label: 'Option One'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 2',
+ * label: 'Option Two'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 3',
+ * label: 'Option Three'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 4',
+ * label: 'Option Four'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 5',
+ * label: 'Option Five'
+ * } )
+ * ]
+ * }
+ * } );
+ * $( 'body' ).append( comboBox.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
*
* @class
* @extends OO.ui.Widget
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {Object} [menu] Configuration options to pass to menu widget
- * @cfg {Object} [input] Configuration options to pass to input widget
+ * @cfg {Object} [menu] Configuration options to pass to the {@link OO.ui.MenuSelectWidget menu select widget}.
+ * @cfg {Object} [input] Configuration options to pass to the {@link OO.ui.TextInputWidget text input widget}.
+ * @cfg {jQuery} [$overlay] Render the menu into a separate layer. This configuration is useful in cases where
+ * the expanded menu is larger than its containing `<div>`. The specified overlay layer is usually on top of the
+ * containing `<div>` and has a larger area. By default, the menu uses relative positioning.
*/
OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
// Configuration initialization
@@ -9175,20 +13337,42 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
// Parent constructor
OO.ui.ComboBoxWidget.super.call( this, config );
+ // Properties (must be set before TabIndexedElement constructor call)
+ this.$indicator = this.$( '<span>' );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$indicator } ) );
+
// Properties
+ this.$overlay = config.$overlay || this.$element;
this.input = new OO.ui.TextInputWidget( $.extend(
- { $: this.$, indicator: 'down', disabled: this.isDisabled() },
+ {
+ indicator: 'down',
+ $indicator: this.$indicator,
+ disabled: this.isDisabled()
+ },
config.input
) );
- this.menu = new OO.ui.MenuWidget( $.extend(
- { $: this.$, widget: this, input: this.input, disabled: this.isDisabled() },
+ this.input.$input.eq( 0 ).attr( {
+ role: 'combobox',
+ 'aria-autocomplete': 'list'
+ } );
+ this.menu = new OO.ui.TextInputMenuSelectWidget( this.input, $.extend(
+ {
+ widget: this,
+ input: this.input,
+ disabled: this.isDisabled()
+ },
config.menu
) );
// Events
+ this.$indicator.on( {
+ click: this.onClick.bind( this ),
+ keypress: this.onKeyPress.bind( this )
+ } );
this.input.connect( this, {
change: 'onInputChange',
- indicator: 'onInputIndicator',
enter: 'onInputEnter'
} );
this.menu.connect( this, {
@@ -9198,28 +13382,39 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
} );
// Initialization
- this.$element.addClass( 'oo-ui-comboBoxWidget' ).append(
- this.input.$element,
- this.menu.$element
- );
+ this.$element.addClass( 'oo-ui-comboBoxWidget' ).append( this.input.$element );
+ this.$overlay.append( this.menu.$element );
this.onMenuItemsChange();
};
/* Setup */
OO.inheritClass( OO.ui.ComboBoxWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.ComboBoxWidget, OO.ui.TabIndexedElement );
/* Methods */
/**
+ * Get the combobox's menu.
+ * @return {OO.ui.TextInputMenuSelectWidget} Menu widget
+ */
+OO.ui.ComboBoxWidget.prototype.getMenu = function () {
+ return this.menu;
+};
+
+/**
* Handle input change events.
*
+ * @private
* @param {string} value New value
*/
OO.ui.ComboBoxWidget.prototype.onInputChange = function ( value ) {
var match = this.menu.getItemFromData( value );
this.menu.selectItem( match );
+ if ( this.menu.getHighlightedItem() ) {
+ this.menu.highlightItem( match );
+ }
if ( !this.isDisabled() ) {
this.menu.toggle( true );
@@ -9227,16 +13422,39 @@ OO.ui.ComboBoxWidget.prototype.onInputChange = function ( value ) {
};
/**
- * Handle input indicator events.
+ * Handle mouse click events.
+ *
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse click event
*/
-OO.ui.ComboBoxWidget.prototype.onInputIndicator = function () {
- if ( !this.isDisabled() ) {
+OO.ui.ComboBoxWidget.prototype.onClick = function ( e ) {
+ if ( !this.isDisabled() && e.which === 1 ) {
+ this.menu.toggle();
+ this.input.$input[ 0 ].focus();
+ }
+ return false;
+};
+
+/**
+ * Handle key press events.
+ *
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.ComboBoxWidget.prototype.onKeyPress = function ( e ) {
+ if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
this.menu.toggle();
+ this.input.$input[ 0 ].focus();
+ return false;
}
};
/**
* Handle input enter events.
+ *
+ * @private
*/
OO.ui.ComboBoxWidget.prototype.onInputEnter = function () {
if ( !this.isDisabled() ) {
@@ -9247,18 +13465,24 @@ OO.ui.ComboBoxWidget.prototype.onInputEnter = function () {
/**
* Handle menu choose events.
*
+ * @private
* @param {OO.ui.OptionWidget} item Chosen item
*/
OO.ui.ComboBoxWidget.prototype.onMenuChoose = function ( item ) {
- if ( item ) {
- this.input.setValue( item.getData() );
- }
+ this.input.setValue( item.getData() );
};
/**
* Handle menu item change events.
+ *
+ * @private
*/
OO.ui.ComboBoxWidget.prototype.onMenuItemsChange = function () {
+ var match = this.menu.getItemFromData( this.input.getValue() );
+ this.menu.selectItem( match );
+ if ( this.menu.getHighlightedItem() ) {
+ this.menu.highlightItem( match );
+ }
this.$element.toggleClass( 'oo-ui-comboBoxWidget-empty', this.menu.isEmpty() );
};
@@ -9280,7 +13504,34 @@ OO.ui.ComboBoxWidget.prototype.setDisabled = function ( disabled ) {
};
/**
- * Label widget.
+ * LabelWidgets help identify the function of interface elements. Each LabelWidget can
+ * be configured with a `label` option that is set to a string, a label node, or a function:
+ *
+ * - String: a plaintext string
+ * - jQuery selection: a jQuery selection, used for anything other than a plaintext label, e.g., a
+ * label that includes a link or special styling, such as a gray color or additional graphical elements.
+ * - Function: a function that will produce a string in the future. Functions are used
+ * in cases where the value of the label is not currently defined.
+ *
+ * In addition, the LabelWidget can be associated with an {@link OO.ui.InputWidget input widget}, which
+ * will come into focus when the label is clicked.
+ *
+ * @example
+ * // Examples of LabelWidgets
+ * var label1 = new OO.ui.LabelWidget( {
+ * label: 'plaintext label'
+ * } );
+ * var label2 = new OO.ui.LabelWidget( {
+ * label: $( '<a href="default.html">jQuery label</a>' )
+ * } );
+ * // Create a fieldset layout with fields for each example
+ * var fieldset = new OO.ui.FieldsetLayout();
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( label1 ),
+ * new OO.ui.FieldLayout( label2 )
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
*
* @class
* @extends OO.ui.Widget
@@ -9288,9 +13539,11 @@ OO.ui.ComboBoxWidget.prototype.setDisabled = function ( disabled ) {
*
* @constructor
* @param {Object} [config] Configuration options
+ * @cfg {OO.ui.InputWidget} [input] {@link OO.ui.InputWidget Input widget} that uses the label.
+ * Clicking the label will focus the specified input field.
*/
OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
- // Config intialization
+ // Configuration initialization
config = config || {};
// Parent constructor
@@ -9298,13 +13551,14 @@ OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
// Mixin constructors
OO.ui.LabelElement.call( this, $.extend( {}, config, { $label: this.$element } ) );
+ OO.ui.TitledElement.call( this, config );
// Properties
this.input = config.input;
// Events
if ( this.input instanceof OO.ui.InputWidget ) {
- this.$element.on( 'click', OO.ui.bind( this.onClick, this ) );
+ this.$element.on( 'click', this.onClick.bind( this ) );
}
// Initialization
@@ -9315,6 +13569,7 @@ OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
OO.inheritClass( OO.ui.LabelWidget, OO.ui.Widget );
OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.LabelWidget, OO.ui.TitledElement );
/* Static Properties */
@@ -9325,6 +13580,7 @@ OO.ui.LabelWidget.static.tagName = 'span';
/**
* Handles label mouse click events.
*
+ * @private
* @param {jQuery.Event} e Mouse click event
*/
OO.ui.LabelWidget.prototype.onClick = function () {
@@ -9333,7 +13589,12 @@ OO.ui.LabelWidget.prototype.onClick = function () {
};
/**
- * Generic option widget for use with OO.ui.SelectWidget.
+ * OptionWidgets are special elements that can be selected and configured with data. The
+ * data is often unique for each option, but it does not have to be. OptionWidgets are used
+ * with OO.ui.SelectWidget to create a selection of mutually exclusive options. For more information
+ * and examples, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
*
* @class
* @extends OO.ui.Widget
@@ -9341,12 +13602,10 @@ OO.ui.LabelWidget.prototype.onClick = function () {
* @mixins OO.ui.FlaggedElement
*
* @constructor
- * @param {Mixed} data Option data
* @param {Object} [config] Configuration options
- * @cfg {string} [rel] Value for `rel` attribute in DOM, allowing per-option styling
*/
-OO.ui.OptionWidget = function OoUiOptionWidget( data, config ) {
- // Config intialization
+OO.ui.OptionWidget = function OoUiOptionWidget( config ) {
+ // Configuration initialization
config = config || {};
// Parent constructor
@@ -9358,7 +13617,6 @@ OO.ui.OptionWidget = function OoUiOptionWidget( data, config ) {
OO.ui.FlaggedElement.call( this, config );
// Properties
- this.data = data;
this.selected = false;
this.highlighted = false;
this.pressed = false;
@@ -9366,13 +13624,9 @@ OO.ui.OptionWidget = function OoUiOptionWidget( data, config ) {
// Initialization
this.$element
.data( 'oo-ui-optionWidget', this )
- .attr( 'rel', config.rel )
.attr( 'role', 'option' )
.addClass( 'oo-ui-optionWidget' )
.append( this.$label );
- this.$element
- .prepend( this.$icon )
- .append( this.$indicator );
};
/* Setup */
@@ -9395,7 +13649,7 @@ OO.ui.OptionWidget.static.scrollIntoViewOnSelect = false;
/* Methods */
/**
- * Check if option can be selected.
+ * Check if the option can be selected.
*
* @return {boolean} Item is selectable
*/
@@ -9404,7 +13658,9 @@ OO.ui.OptionWidget.prototype.isSelectable = function () {
};
/**
- * Check if option can be highlighted.
+ * Check if the option can be highlighted. A highlight indicates that the option
+ * may be selected when a user presses enter or clicks. Disabled items cannot
+ * be highlighted.
*
* @return {boolean} Item is highlightable
*/
@@ -9413,7 +13669,8 @@ OO.ui.OptionWidget.prototype.isHighlightable = function () {
};
/**
- * Check if option can be pressed.
+ * Check if the option can be pressed. The pressed state occurs when a user mouses
+ * down on an item, but has not yet let go of the mouse.
*
* @return {boolean} Item is pressable
*/
@@ -9422,7 +13679,7 @@ OO.ui.OptionWidget.prototype.isPressable = function () {
};
/**
- * Check if option is selected.
+ * Check if the option is selected.
*
* @return {boolean} Item is selected
*/
@@ -9431,7 +13688,8 @@ OO.ui.OptionWidget.prototype.isSelected = function () {
};
/**
- * Check if option is highlighted.
+ * Check if the option is highlighted. A highlight indicates that the
+ * item may be selected when a user presses enter or clicks.
*
* @return {boolean} Item is highlighted
*/
@@ -9440,7 +13698,9 @@ OO.ui.OptionWidget.prototype.isHighlighted = function () {
};
/**
- * Check if option is pressed.
+ * Check if the option is pressed. The pressed state occurs when a user mouses
+ * down on an item, but has not yet let go of the mouse. The item may appear
+ * selected, but it will not be selected until the user releases the mouse.
*
* @return {boolean} Item is pressed
*/
@@ -9449,7 +13709,9 @@ OO.ui.OptionWidget.prototype.isPressed = function () {
};
/**
- * Set selected state.
+ * Set the option’s selected state. In general, all modifications to the selection
+ * should be handled by the SelectWidget’s {@link OO.ui.SelectWidget#selectItem selectItem( [item] )}
+ * method instead of this method.
*
* @param {boolean} [state=false] Select option
* @chainable
@@ -9457,16 +13719,22 @@ OO.ui.OptionWidget.prototype.isPressed = function () {
OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
if ( this.constructor.static.selectable ) {
this.selected = !!state;
- this.$element.toggleClass( 'oo-ui-optionWidget-selected', state );
+ this.$element
+ .toggleClass( 'oo-ui-optionWidget-selected', state )
+ .attr( 'aria-selected', state.toString() );
if ( state && this.constructor.static.scrollIntoViewOnSelect ) {
this.scrollElementIntoView();
}
+ this.updateThemeClasses();
}
return this;
};
/**
- * Set highlighted state.
+ * Set the option’s highlighted state. In general, all programmatic
+ * modifications to the highlight should be handled by the
+ * SelectWidget’s {@link OO.ui.SelectWidget#highlightItem highlightItem( [item] )}
+ * method instead of this method.
*
* @param {boolean} [state=false] Highlight option
* @chainable
@@ -9475,12 +13743,16 @@ OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
if ( this.constructor.static.highlightable ) {
this.highlighted = !!state;
this.$element.toggleClass( 'oo-ui-optionWidget-highlighted', state );
+ this.updateThemeClasses();
}
return this;
};
/**
- * Set pressed state.
+ * Set the option’s pressed state. In general, all
+ * programmatic modifications to the pressed state should be handled by the
+ * SelectWidget’s {@link OO.ui.SelectWidget#pressItem pressItem( [item] )}
+ * method instead of this method.
*
* @param {boolean} [state=false] Press option
* @chainable
@@ -9489,53 +13761,37 @@ OO.ui.OptionWidget.prototype.setPressed = function ( state ) {
if ( this.constructor.static.pressable ) {
this.pressed = !!state;
this.$element.toggleClass( 'oo-ui-optionWidget-pressed', state );
+ this.updateThemeClasses();
}
return this;
};
/**
- * Make the option's highlight flash.
- *
- * While flashing, the visual style of the pressed state is removed if present.
- *
- * @return {jQuery.Promise} Promise resolved when flashing is done
- */
-OO.ui.OptionWidget.prototype.flash = function () {
- var widget = this,
- $element = this.$element,
- deferred = $.Deferred();
-
- if ( !this.isDisabled() && this.constructor.static.pressable ) {
- $element.removeClass( 'oo-ui-optionWidget-highlighted oo-ui-optionWidget-pressed' );
- setTimeout( function () {
- // Restore original classes
- $element
- .toggleClass( 'oo-ui-optionWidget-highlighted', widget.highlighted )
- .toggleClass( 'oo-ui-optionWidget-pressed', widget.pressed );
-
- setTimeout( function () {
- deferred.resolve();
- }, 100 );
-
- }, 100 );
- }
-
- return deferred.promise();
-};
-
-/**
- * Get option data.
- *
- * @return {Mixed} Option data
- */
-OO.ui.OptionWidget.prototype.getData = function () {
- return this.data;
-};
-
-/**
- * Option widget with an option icon and indicator.
- *
- * Use together with OO.ui.SelectWidget.
+ * DecoratedOptionWidgets are {@link OO.ui.OptionWidget options} that can be configured
+ * with an {@link OO.ui.IconElement icon} and/or {@link OO.ui.IndicatorElement indicator}.
+ * This class is used with OO.ui.SelectWidget to create a selection of mutually exclusive
+ * options. For more information about options and selects, please see the
+ * [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Decorated options in a select widget
+ * var select = new OO.ui.SelectWidget( {
+ * items: [
+ * new OO.ui.DecoratedOptionWidget( {
+ * data: 'a',
+ * label: 'Option with icon',
+ * icon: 'help'
+ * } ),
+ * new OO.ui.DecoratedOptionWidget( {
+ * data: 'b',
+ * label: 'Option with indicator',
+ * indicator: 'next'
+ * } )
+ * ]
+ * } );
+ * $( 'body' ).append( select.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
*
* @class
* @extends OO.ui.OptionWidget
@@ -9543,12 +13799,11 @@ OO.ui.OptionWidget.prototype.getData = function () {
* @mixins OO.ui.IndicatorElement
*
* @constructor
- * @param {Mixed} data Option data
* @param {Object} [config] Configuration options
*/
-OO.ui.DecoratedOptionWidget = function OoUiDecoratedOptionWidget( data, config ) {
+OO.ui.DecoratedOptionWidget = function OoUiDecoratedOptionWidget( config ) {
// Parent constructor
- OO.ui.DecoratedOptionWidget.super.call( this, data, config );
+ OO.ui.DecoratedOptionWidget.super.call( this, config );
// Mixin constructors
OO.ui.IconElement.call( this, config );
@@ -9568,24 +13823,31 @@ OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconElement );
OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatorElement );
/**
- * Option widget that looks like a button.
+ * ButtonOptionWidget is a special type of {@link OO.ui.ButtonElement button element} that
+ * can be selected and configured with data. The class is
+ * used with OO.ui.ButtonSelectWidget to create a selection of button options. Please see the
+ * [OOjs UI documentation on MediaWiki] [1] for more information.
*
- * Use together with OO.ui.ButtonSelectWidget.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_options
*
* @class
* @extends OO.ui.DecoratedOptionWidget
* @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
- * @param {Mixed} data Option data
* @param {Object} [config] Configuration options
*/
-OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( data, config ) {
+OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {
+ // Configuration initialization
+ config = $.extend( { tabIndex: -1 }, config );
+
// Parent constructor
- OO.ui.ButtonOptionWidget.super.call( this, data, config );
+ OO.ui.ButtonOptionWidget.super.call( this, config );
// Mixin constructors
OO.ui.ButtonElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
// Initialization
this.$element.addClass( 'oo-ui-buttonOptionWidget' );
@@ -9597,12 +13859,15 @@ OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( data, config ) {
OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.DecoratedOptionWidget );
OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.TabIndexedElement );
/* Static Properties */
// Allow button mouse down events to pass through so they can be handled by the parent select widget
OO.ui.ButtonOptionWidget.static.cancelButtonMouseDownEvents = false;
+OO.ui.ButtonOptionWidget.static.highlightable = false;
+
/* Methods */
/**
@@ -9619,78 +13884,183 @@ OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
};
/**
- * Item of an OO.ui.MenuWidget.
+ * RadioOptionWidget is an option widget that looks like a radio button.
+ * The class is used with OO.ui.RadioSelectWidget to create a selection of radio options.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_option
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.RadioOptionWidget = function OoUiRadioOptionWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties (must be done before parent constructor which calls #setDisabled)
+ this.radio = new OO.ui.RadioInputWidget( { value: config.data, tabIndex: -1 } );
+
+ // Parent constructor
+ OO.ui.RadioOptionWidget.super.call( this, config );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-radioOptionWidget' )
+ .prepend( this.radio.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.RadioOptionWidget, OO.ui.OptionWidget );
+
+/* Static Properties */
+
+OO.ui.RadioOptionWidget.static.highlightable = false;
+
+OO.ui.RadioOptionWidget.static.scrollIntoViewOnSelect = true;
+
+OO.ui.RadioOptionWidget.static.pressable = false;
+
+OO.ui.RadioOptionWidget.static.tagName = 'label';
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioOptionWidget.prototype.setSelected = function ( state ) {
+ OO.ui.RadioOptionWidget.super.prototype.setSelected.call( this, state );
+
+ this.radio.setSelected( state );
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioOptionWidget.prototype.setDisabled = function ( disabled ) {
+ OO.ui.RadioOptionWidget.super.prototype.setDisabled.call( this, disabled );
+
+ this.radio.setDisabled( this.isDisabled() );
+
+ return this;
+};
+
+/**
+ * MenuOptionWidget is an option widget that looks like a menu item. The class is used with
+ * OO.ui.MenuSelectWidget to create a menu of mutually exclusive options. Please see
+ * the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
*
* @class
* @extends OO.ui.DecoratedOptionWidget
*
* @constructor
- * @param {Mixed} data Item data
* @param {Object} [config] Configuration options
*/
-OO.ui.MenuItemWidget = function OoUiMenuItemWidget( data, config ) {
+OO.ui.MenuOptionWidget = function OoUiMenuOptionWidget( config ) {
// Configuration initialization
config = $.extend( { icon: 'check' }, config );
// Parent constructor
- OO.ui.MenuItemWidget.super.call( this, data, config );
+ OO.ui.MenuOptionWidget.super.call( this, config );
// Initialization
this.$element
.attr( 'role', 'menuitem' )
- .addClass( 'oo-ui-menuItemWidget' );
+ .addClass( 'oo-ui-menuOptionWidget' );
};
/* Setup */
-OO.inheritClass( OO.ui.MenuItemWidget, OO.ui.DecoratedOptionWidget );
+OO.inheritClass( OO.ui.MenuOptionWidget, OO.ui.DecoratedOptionWidget );
-/**
- * Section to group one or more items in a OO.ui.MenuWidget.
+/* Static Properties */
+
+OO.ui.MenuOptionWidget.static.scrollIntoViewOnSelect = true;
+
+/**
+ * MenuSectionOptionWidgets are used inside {@link OO.ui.MenuSelectWidget menu select widgets} to group one or more related
+ * {@link OO.ui.MenuOptionWidget menu options}. MenuSectionOptionWidgets cannot be highlighted or selected.
+ *
+ * @example
+ * var myDropdown = new OO.ui.DropdownWidget( {
+ * menu: {
+ * items: [
+ * new OO.ui.MenuSectionOptionWidget( {
+ * label: 'Dogs'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'corgi',
+ * label: 'Welsh Corgi'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'poodle',
+ * label: 'Standard Poodle'
+ * } ),
+ * new OO.ui.MenuSectionOptionWidget( {
+ * label: 'Cats'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'lion',
+ * label: 'Lion'
+ * } )
+ * ]
+ * }
+ * } );
+ * $( 'body' ).append( myDropdown.$element );
+ *
*
* @class
* @extends OO.ui.DecoratedOptionWidget
*
* @constructor
- * @param {Mixed} data Item data
* @param {Object} [config] Configuration options
*/
-OO.ui.MenuSectionItemWidget = function OoUiMenuSectionItemWidget( data, config ) {
+OO.ui.MenuSectionOptionWidget = function OoUiMenuSectionOptionWidget( config ) {
// Parent constructor
- OO.ui.MenuSectionItemWidget.super.call( this, data, config );
+ OO.ui.MenuSectionOptionWidget.super.call( this, config );
// Initialization
- this.$element.addClass( 'oo-ui-menuSectionItemWidget' );
+ this.$element.addClass( 'oo-ui-menuSectionOptionWidget' );
};
/* Setup */
-OO.inheritClass( OO.ui.MenuSectionItemWidget, OO.ui.DecoratedOptionWidget );
+OO.inheritClass( OO.ui.MenuSectionOptionWidget, OO.ui.DecoratedOptionWidget );
/* Static Properties */
-OO.ui.MenuSectionItemWidget.static.selectable = false;
+OO.ui.MenuSectionOptionWidget.static.selectable = false;
-OO.ui.MenuSectionItemWidget.static.highlightable = false;
+OO.ui.MenuSectionOptionWidget.static.highlightable = false;
/**
- * Items for an OO.ui.OutlineWidget.
+ * OutlineOptionWidget is an item in an {@link OO.ui.OutlineSelectWidget OutlineSelectWidget}.
+ *
+ * Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}, which contain
+ * {@link OO.ui.PageLayout page layouts}. See {@link OO.ui.BookletLayout BookletLayout}
+ * for an example.
*
* @class
* @extends OO.ui.DecoratedOptionWidget
*
* @constructor
- * @param {Mixed} data Item data
* @param {Object} [config] Configuration options
* @cfg {number} [level] Indentation level
- * @cfg {boolean} [movable] Allow modification from outline controls
+ * @cfg {boolean} [movable] Allow modification from {@link OO.ui.OutlineControlsWidget outline controls}.
*/
-OO.ui.OutlineItemWidget = function OoUiOutlineItemWidget( data, config ) {
- // Config intialization
+OO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) {
+ // Configuration initialization
config = config || {};
// Parent constructor
- OO.ui.OutlineItemWidget.super.call( this, data, config );
+ OO.ui.OutlineOptionWidget.super.call( this, config );
// Properties
this.level = 0;
@@ -9698,45 +14068,45 @@ OO.ui.OutlineItemWidget = function OoUiOutlineItemWidget( data, config ) {
this.removable = !!config.removable;
// Initialization
- this.$element.addClass( 'oo-ui-outlineItemWidget' );
+ this.$element.addClass( 'oo-ui-outlineOptionWidget' );
this.setLevel( config.level );
};
/* Setup */
-OO.inheritClass( OO.ui.OutlineItemWidget, OO.ui.DecoratedOptionWidget );
+OO.inheritClass( OO.ui.OutlineOptionWidget, OO.ui.DecoratedOptionWidget );
/* Static Properties */
-OO.ui.OutlineItemWidget.static.highlightable = false;
+OO.ui.OutlineOptionWidget.static.highlightable = false;
-OO.ui.OutlineItemWidget.static.scrollIntoViewOnSelect = true;
+OO.ui.OutlineOptionWidget.static.scrollIntoViewOnSelect = true;
-OO.ui.OutlineItemWidget.static.levelClass = 'oo-ui-outlineItemWidget-level-';
+OO.ui.OutlineOptionWidget.static.levelClass = 'oo-ui-outlineOptionWidget-level-';
-OO.ui.OutlineItemWidget.static.levels = 3;
+OO.ui.OutlineOptionWidget.static.levels = 3;
/* Methods */
/**
* Check if item is movable.
*
- * Movablilty is used by outline controls.
+ * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
*
* @return {boolean} Item is movable
*/
-OO.ui.OutlineItemWidget.prototype.isMovable = function () {
+OO.ui.OutlineOptionWidget.prototype.isMovable = function () {
return this.movable;
};
/**
* Check if item is removable.
*
- * Removablilty is used by outline controls.
+ * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
*
* @return {boolean} Item is removable
*/
-OO.ui.OutlineItemWidget.prototype.isRemovable = function () {
+OO.ui.OutlineOptionWidget.prototype.isRemovable = function () {
return this.removable;
};
@@ -9745,33 +14115,35 @@ OO.ui.OutlineItemWidget.prototype.isRemovable = function () {
*
* @return {number} Indentation level
*/
-OO.ui.OutlineItemWidget.prototype.getLevel = function () {
+OO.ui.OutlineOptionWidget.prototype.getLevel = function () {
return this.level;
};
/**
* Set movability.
*
- * Movablilty is used by outline controls.
+ * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
*
* @param {boolean} movable Item is movable
* @chainable
*/
-OO.ui.OutlineItemWidget.prototype.setMovable = function ( movable ) {
+OO.ui.OutlineOptionWidget.prototype.setMovable = function ( movable ) {
this.movable = !!movable;
+ this.updateThemeClasses();
return this;
};
/**
* Set removability.
*
- * Removablilty is used by outline controls.
+ * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
*
* @param {boolean} movable Item is removable
* @chainable
*/
-OO.ui.OutlineItemWidget.prototype.setRemovable = function ( removable ) {
+OO.ui.OutlineOptionWidget.prototype.setRemovable = function ( removable ) {
this.removable = !!removable;
+ this.updateThemeClasses();
return this;
};
@@ -9781,7 +14153,7 @@ OO.ui.OutlineItemWidget.prototype.setRemovable = function ( removable ) {
* @param {number} [level=0] Indentation level, in the range of [0,#maxLevel]
* @chainable
*/
-OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
+OO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {
var levels = this.constructor.static.levels,
levelClass = this.constructor.static.levelClass,
i = levels;
@@ -9794,12 +14166,61 @@ OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
this.$element.removeClass( levelClass + i );
}
}
+ this.updateThemeClasses();
return this;
};
/**
- * Container for content that is overlaid and positioned absolutely.
+ * TabOptionWidget is an item in a {@link OO.ui.TabSelectWidget TabSelectWidget}.
+ *
+ * Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}, which contain
+ * {@link OO.ui.CardLayout card layouts}. See {@link OO.ui.IndexLayout IndexLayout}
+ * for an example.
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.TabOptionWidget = function OoUiTabOptionWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.TabOptionWidget.super.call( this, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-tabOptionWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.TabOptionWidget, OO.ui.OptionWidget );
+
+/* Static Properties */
+
+OO.ui.TabOptionWidget.static.highlightable = false;
+
+/**
+ * PopupWidget is a container for content. The popup is overlaid and positioned absolutely.
+ * By default, each popup has an anchor that points toward its origin.
+ * Please see the [OOjs UI documentation on Mediawiki] [1] for more information and examples.
+ *
+ * @example
+ * // A popup widget.
+ * var popup = new OO.ui.PopupWidget( {
+ * $content: $( '<p>Hi there!</p>' ),
+ * padded: true,
+ * width: 300
+ * } );
+ *
+ * $( 'body' ).append( popup.$element );
+ * // To display the popup, toggle the visibility to 'true'.
+ * popup.toggle( true );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups
*
* @class
* @extends OO.ui.Widget
@@ -9808,43 +14229,60 @@ OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
* @constructor
* @param {Object} [config] Configuration options
* @cfg {number} [width=320] Width of popup in pixels
- * @cfg {number} [height] Height of popup, omit to use automatic height
+ * @cfg {number} [height] Height of popup in pixels. Omit to use the automatic height.
* @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup
- * @cfg {string} [align='center'] Alignment of popup to origin
- * @cfg {jQuery} [$container] Container to prevent popup from rendering outside of
+ * @cfg {string} [align='center'] Alignment of the popup: `center`, `force-left`, `force-right`, `backwards` or `forwards`.
+ * If the popup is forced-left the popup body is leaning towards the left. For force-right alignment, the body of the
+ * popup is leaning towards the right of the screen.
+ * Using 'backwards' is a logical direction which will result in the popup leaning towards the beginning of the sentence
+ * in the given language, which means it will flip to the correct positioning in right-to-left languages.
+ * Using 'forward' will also result in a logical alignment where the body of the popup leans towards the end of the
+ * sentence in the given language.
+ * @cfg {jQuery} [$container] Constrain the popup to the boundaries of the specified container.
+ * See the [OOjs UI docs on MediaWiki][3] for an example.
+ * [3]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#containerExample
+ * @cfg {number} [containerPadding=10] Padding between the popup and its container, specified as a number of pixels.
* @cfg {jQuery} [$content] Content to append to the popup's body
- * @cfg {boolean} [autoClose=false] Popup auto-closes when it loses focus
- * @cfg {jQuery} [$autoCloseIgnore] Elements to not auto close when clicked
- * @cfg {boolean} [head] Show label and close button at the top
- * @cfg {boolean} [padded] Add padding to the body
+ * @cfg {boolean} [autoClose=false] Automatically close the popup when it loses focus.
+ * @cfg {jQuery} [$autoCloseIgnore] Elements that will not close the popup when clicked.
+ * This config option is only relevant if #autoClose is set to `true`. See the [OOjs UI docs on MediaWiki][2]
+ * for an example.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#autocloseExample
+ * @cfg {boolean} [head] Show a popup header that contains a #label (if specified) and close
+ * button.
+ * @cfg {boolean} [padded] Add padding to the popup's body
*/
OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
- // Config intialization
+ // Configuration initialization
config = config || {};
// Parent constructor
OO.ui.PopupWidget.super.call( this, config );
+ // Properties (must be set before ClippableElement constructor call)
+ this.$body = $( '<div>' );
+
// Mixin constructors
OO.ui.LabelElement.call( this, config );
- OO.ui.ClippableElement.call( this, config );
+ OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$body } ) );
// Properties
- this.visible = false;
- this.$popup = this.$( '<div>' );
- this.$head = this.$( '<div>' );
- this.$body = this.$( '<div>' );
- this.$anchor = this.$( '<div>' );
- this.$container = config.$container; // If undefined, will be computed lazily in updateDimensions()
+ this.$popup = $( '<div>' );
+ this.$head = $( '<div>' );
+ this.$anchor = $( '<div>' );
+ // If undefined, will be computed lazily in updateDimensions()
+ this.$container = config.$container;
+ this.containerPadding = config.containerPadding !== undefined ? config.containerPadding : 10;
this.autoClose = !!config.autoClose;
this.$autoCloseIgnore = config.$autoCloseIgnore;
this.transitionTimeout = null;
this.anchor = null;
this.width = config.width !== undefined ? config.width : 320;
this.height = config.height !== undefined ? config.height : null;
- this.align = config.align || 'center';
- this.closeButton = new OO.ui.ButtonWidget( { $: this.$, framed: false, icon: 'close' } );
- this.onMouseDownHandler = OO.ui.bind( this.onMouseDown, this );
+ this.setAlignment( config.align );
+ this.closeButton = new OO.ui.ButtonWidget( { framed: false, icon: 'close' } );
+ this.onMouseDownHandler = this.onMouseDown.bind( this );
+ this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
// Events
this.closeButton.connect( this, { click: 'onCloseButtonClick' } );
@@ -9857,13 +14295,12 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
.addClass( 'oo-ui-popupWidget-head' )
.append( this.$label, this.closeButton.$element );
if ( !config.head ) {
- this.$head.hide();
+ this.$head.addClass( 'oo-ui-element-hidden' );
}
this.$popup
.addClass( 'oo-ui-popupWidget-popup' )
.append( this.$head, this.$body );
this.$element
- .hide()
.addClass( 'oo-ui-popupWidget' )
.append( this.$popup, this.$anchor );
// Move content, which was added to #$element by OO.ui.Widget, to the body
@@ -9873,7 +14310,12 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
if ( config.padded ) {
this.$body.addClass( 'oo-ui-popupWidget-body-padded' );
}
- this.setClippableElement( this.$body );
+
+ // Initially hidden - using #toggle may cause errors if subclasses override toggle with methods
+ // that reference properties not initialized at that time of parent class construction
+ // TODO: Find a better way to handle post-constructor setup
+ this.visible = false;
+ this.$element.addClass( 'oo-ui-element-hidden' );
};
/* Setup */
@@ -9882,27 +14324,18 @@ OO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );
OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabelElement );
OO.mixinClass( OO.ui.PopupWidget, OO.ui.ClippableElement );
-/* Events */
-
-/**
- * @event hide
- */
-
-/**
- * @event show
- */
-
/* Methods */
/**
* Handles mouse down events.
*
- * @param {jQuery.Event} e Mouse down event
+ * @private
+ * @param {MouseEvent} e Mouse down event
*/
OO.ui.PopupWidget.prototype.onMouseDown = function ( e ) {
if (
this.isVisible() &&
- !$.contains( this.$element[0], e.target ) &&
+ !$.contains( this.$element[ 0 ], e.target ) &&
( !this.$autoCloseIgnore || !this.$autoCloseIgnore.has( e.target ).length )
) {
this.toggle( false );
@@ -9911,6 +14344,8 @@ OO.ui.PopupWidget.prototype.onMouseDown = function ( e ) {
/**
* Bind mouse down listener.
+ *
+ * @private
*/
OO.ui.PopupWidget.prototype.bindMouseDownListener = function () {
// Capture clicks outside popup
@@ -9919,6 +14354,8 @@ OO.ui.PopupWidget.prototype.bindMouseDownListener = function () {
/**
* Handles close button click events.
+ *
+ * @private
*/
OO.ui.PopupWidget.prototype.onCloseButtonClick = function () {
if ( this.isVisible() ) {
@@ -9928,13 +14365,50 @@ OO.ui.PopupWidget.prototype.onCloseButtonClick = function () {
/**
* Unbind mouse down listener.
+ *
+ * @private
*/
OO.ui.PopupWidget.prototype.unbindMouseDownListener = function () {
this.getElementWindow().removeEventListener( 'mousedown', this.onMouseDownHandler, true );
};
/**
- * Set whether to show a anchor.
+ * Handles key down events.
+ *
+ * @private
+ * @param {KeyboardEvent} e Key down event
+ */
+OO.ui.PopupWidget.prototype.onDocumentKeyDown = function ( e ) {
+ if (
+ e.which === OO.ui.Keys.ESCAPE &&
+ this.isVisible()
+ ) {
+ this.toggle( false );
+ e.preventDefault();
+ e.stopPropagation();
+ }
+};
+
+/**
+ * Bind key down listener.
+ *
+ * @private
+ */
+OO.ui.PopupWidget.prototype.bindKeyDownListener = function () {
+ this.getElementWindow().addEventListener( 'keydown', this.onDocumentKeyDownHandler, true );
+};
+
+/**
+ * Unbind key down listener.
+ *
+ * @private
+ */
+OO.ui.PopupWidget.prototype.unbindKeyDownListener = function () {
+ this.getElementWindow().removeEventListener( 'keydown', this.onDocumentKeyDownHandler, true );
+};
+
+/**
+ * Show, hide, or toggle the visibility of the anchor.
*
* @param {boolean} [show] Show anchor, omit to toggle
*/
@@ -9952,9 +14426,9 @@ OO.ui.PopupWidget.prototype.toggleAnchor = function ( show ) {
};
/**
- * Check if showing a anchor.
+ * Check if the anchor is visible.
*
- * @return {boolean} anchor is visible
+ * @return {boolean} Anchor is visible
*/
OO.ui.PopupWidget.prototype.hasAnchor = function () {
return this.anchor;
@@ -9975,6 +14449,7 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) {
if ( show ) {
if ( this.autoClose ) {
this.bindMouseDownListener();
+ this.bindKeyDownListener();
}
this.updateDimensions();
this.toggleClipping( true );
@@ -9982,6 +14457,7 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) {
this.toggleClipping( false );
if ( this.autoClose ) {
this.unbindMouseDownListener();
+ this.unbindKeyDownListener();
}
}
}
@@ -9994,8 +14470,8 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) {
*
* Changing the size may also change the popup's position depending on the alignment.
*
- * @param {number} width Width
- * @param {number} height Height
+ * @param {number} width Width in pixels
+ * @param {number} height Height in pixels
* @param {boolean} [transition=false] Use a smooth transition
* @chainable
*/
@@ -10019,12 +14495,12 @@ OO.ui.PopupWidget.prototype.setSize = function ( width, height, transition ) {
OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
var popupOffset, originOffset, containerLeft, containerWidth, containerRight,
popupLeft, popupRight, overlapLeft, overlapRight, anchorWidth,
- widget = this,
- padding = 10;
+ align = this.align,
+ widget = this;
if ( !this.$container ) {
// Lazy-initialize $container if not specified in constructor
- this.$container = this.$( this.getClosestScrollableElementContainer() );
+ this.$container = $( this.getClosestScrollableElementContainer() );
}
// Set height and width before measuring things, since it might cause our measurements
@@ -10034,16 +14510,26 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
height: this.height !== null ? this.height : 'auto'
} );
+ // If we are in RTL, we need to flip the alignment, unless it is center
+ if ( align === 'forwards' || align === 'backwards' ) {
+ if ( this.$container.css( 'direction' ) === 'rtl' ) {
+ align = ( { forwards: 'force-left', backwards: 'force-right' } )[ this.align ];
+ } else {
+ align = ( { forwards: 'force-right', backwards: 'force-left' } )[ this.align ];
+ }
+
+ }
+
// Compute initial popupOffset based on alignment
- popupOffset = this.width * ( { left: 0, center: -0.5, right: -1 } )[this.align];
+ popupOffset = this.width * ( { 'force-left': -1, center: -0.5, 'force-right': 0 } )[ align ];
// Figure out if this will cause the popup to go beyond the edge of the container
- originOffset = Math.round( this.$element.offset().left );
- containerLeft = Math.round( this.$container.offset().left );
+ originOffset = this.$element.offset().left;
+ containerLeft = this.$container.offset().left;
containerWidth = this.$container.innerWidth();
containerRight = containerLeft + containerWidth;
- popupLeft = popupOffset - padding;
- popupRight = popupOffset + padding + this.width + padding;
+ popupLeft = popupOffset - this.containerPadding;
+ popupRight = popupOffset + this.containerPadding + this.width + this.containerPadding;
overlapLeft = ( originOffset + popupLeft ) - containerLeft;
overlapRight = containerRight - ( originOffset + popupRight );
@@ -10055,11 +14541,13 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
}
// Adjust offset to avoid anchor being rendered too close to the edge
- anchorWidth = this.$anchor.width();
- if ( this.align === 'right' ) {
- popupOffset += anchorWidth;
- } else if ( this.align === 'left' ) {
- popupOffset -= anchorWidth;
+ // $anchor.width() doesn't work with the pure CSS anchor (returns 0)
+ // TODO: Find a measurement that works for CSS anchors and image anchors
+ anchorWidth = this.$anchor[ 0 ].scrollWidth * 2;
+ if ( popupOffset + this.width < anchorWidth ) {
+ popupOffset = anchorWidth - this.width;
+ } else if ( -popupOffset < anchorWidth ) {
+ popupOffset = -anchorWidth;
}
// Prevent transition from being interrupted
@@ -10070,7 +14558,7 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
}
// Position body relative to anchor
- this.$popup.css( 'left', popupOffset );
+ this.$popup.css( 'margin-left', popupOffset );
if ( transition ) {
// Prevent transitioning after transition is complete
@@ -10082,14 +14570,143 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
this.$element.removeClass( 'oo-ui-popupWidget-transitioning' );
}
+ // Reevaluate clipping state since we've relocated and resized the popup
+ this.clip();
+
return this;
};
/**
- * Search widget.
+ * Set popup alignment
+ * @param {string} align Alignment of the popup, `center`, `force-left`, `force-right`,
+ * `backwards` or `forwards`.
+ */
+OO.ui.PopupWidget.prototype.setAlignment = function ( align ) {
+ // Validate alignment and transform deprecated values
+ if ( [ 'left', 'right', 'force-left', 'force-right', 'backwards', 'forwards', 'center' ].indexOf( align ) > -1 ) {
+ this.align = { left: 'force-right', right: 'force-left' }[ align ] || align;
+ } else {
+ this.align = 'center';
+ }
+};
+
+/**
+ * Get popup alignment
+ * @return {string} align Alignment of the popup, `center`, `force-left`, `force-right`,
+ * `backwards` or `forwards`.
+ */
+OO.ui.PopupWidget.prototype.getAlignment = function () {
+ return this.align;
+};
+
+/**
+ * Progress bars visually display the status of an operation, such as a download,
+ * and can be either determinate or indeterminate:
+ *
+ * - **determinate** process bars show the percent of an operation that is complete.
*
- * Search widgets combine a query input, placed above, and a results selection widget, placed below.
- * Results are cleared and populated each time the query is changed.
+ * - **indeterminate** process bars use a visual display of motion to indicate that an operation
+ * is taking place. Because the extent of an indeterminate operation is unknown, the bar does
+ * not use percentages.
+ *
+ * The value of the `progress` configuration determines whether the bar is determinate or indeterminate.
+ *
+ * @example
+ * // Examples of determinate and indeterminate progress bars.
+ * var progressBar1 = new OO.ui.ProgressBarWidget( {
+ * progress: 33
+ * } );
+ * var progressBar2 = new OO.ui.ProgressBarWidget();
+ *
+ * // Create a FieldsetLayout to layout progress bars
+ * var fieldset = new OO.ui.FieldsetLayout;
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( progressBar1, {label: 'Determinate', align: 'top'}),
+ * new OO.ui.FieldLayout( progressBar2, {label: 'Indeterminate', align: 'top'})
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * @class
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {number|boolean} [progress=false] The type of progress bar (determinate or indeterminate).
+ * To create a determinate progress bar, specify a number that reflects the initial percent complete.
+ * By default, the progress bar is indeterminate.
+ */
+OO.ui.ProgressBarWidget = function OoUiProgressBarWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.ProgressBarWidget.super.call( this, config );
+
+ // Properties
+ this.$bar = $( '<div>' );
+ this.progress = null;
+
+ // Initialization
+ this.setProgress( config.progress !== undefined ? config.progress : false );
+ this.$bar.addClass( 'oo-ui-progressBarWidget-bar' );
+ this.$element
+ .attr( {
+ role: 'progressbar',
+ 'aria-valuemin': 0,
+ 'aria-valuemax': 100
+ } )
+ .addClass( 'oo-ui-progressBarWidget' )
+ .append( this.$bar );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ProgressBarWidget, OO.ui.Widget );
+
+/* Static Properties */
+
+OO.ui.ProgressBarWidget.static.tagName = 'div';
+
+/* Methods */
+
+/**
+ * Get the percent of the progress that has been completed. Indeterminate progresses will return `false`.
+ *
+ * @return {number|boolean} Progress percent
+ */
+OO.ui.ProgressBarWidget.prototype.getProgress = function () {
+ return this.progress;
+};
+
+/**
+ * Set the percent of the process completed or `false` for an indeterminate process.
+ *
+ * @param {number|boolean} progress Progress percent or `false` for indeterminate
+ */
+OO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {
+ this.progress = progress;
+
+ if ( progress !== false ) {
+ this.$bar.css( 'width', this.progress + '%' );
+ this.$element.attr( 'aria-valuenow', this.progress );
+ } else {
+ this.$bar.css( 'width', '' );
+ this.$element.removeAttr( 'aria-valuenow' );
+ }
+ this.$element.toggleClass( 'oo-ui-progressBarWidget-indeterminate', !progress );
+};
+
+/**
+ * SearchWidgets combine a {@link OO.ui.TextInputWidget text input field}, where users can type a search query,
+ * and a {@link OO.ui.TextInputMenuSelectWidget menu} of search results, which is displayed beneath the query
+ * field. Unlike {@link OO.ui.LookupElement lookup menus}, search result menus are always visible to the user.
+ * Users can choose an item from the menu or type a query into the text field to search for a matching result item.
+ * In general, search widgets are used inside a separate {@link OO.ui.Dialog dialog} window.
+ *
+ * Each time the query is changed, the search result menu is cleared and repopulated. Please see
+ * the [OOjs UI demos][1] for an example.
+ *
+ * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/#dialogs-mediawiki-vector-ltr
*
* @class
* @extends OO.ui.Widget
@@ -10100,7 +14717,7 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
* @cfg {string} [value] Initial query value
*/
OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
- // Configuration intialization
+ // Configuration initialization
config = config || {};
// Parent constructor
@@ -10108,14 +14725,13 @@ OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
// Properties
this.query = new OO.ui.TextInputWidget( {
- $: this.$,
icon: 'search',
placeholder: config.placeholder,
value: config.value
} );
- this.results = new OO.ui.SelectWidget( { $: this.$ } );
- this.$query = this.$( '<div>' );
- this.$results = this.$( '<div>' );
+ this.results = new OO.ui.SelectWidget();
+ this.$query = $( '<div>' );
+ this.$results = $( '<div>' );
// Events
this.query.connect( this, {
@@ -10126,7 +14742,7 @@ OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
highlight: 'onResultsHighlight',
select: 'onResultsSelect'
} );
- this.query.$input.on( 'keydown', OO.ui.bind( this.onQueryKeydown, this ) );
+ this.query.$input.on( 'keydown', this.onQueryKeydown.bind( this ) );
// Initialization
this.$query
@@ -10147,12 +14763,22 @@ OO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );
/* Events */
/**
+ * A 'highlight' event is emitted when an item is highlighted. The highlight indicates which
+ * item will be selected. When a user mouses over a menu item, it is highlighted. If a search
+ * string is typed into the query field instead, the first menu item that matches the query
+ * will be highlighted.
+
* @event highlight
+ * @deprecated Connect straight to getResults() events instead
* @param {Object|null} item Item data or null if no item is highlighted
*/
/**
+ * A 'select' event is emitted when an item is selected. A menu item is selected when it is clicked,
+ * or when a user types a search query, a menu result is highlighted, and the user presses enter.
+ *
* @event select
+ * @deprecated Connect straight to getResults() events instead
* @param {Object|null} item Item data or null if no item is selected
*/
@@ -10161,6 +14787,7 @@ OO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );
/**
* Handle query key down events.
*
+ * @private
* @param {jQuery.Event} e Key down event
*/
OO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {
@@ -10183,6 +14810,7 @@ OO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {
*
* Clears existing results. Subclasses should repopulate items according to new query.
*
+ * @private
* @param {string} value New value
*/
OO.ui.SearchWidget.prototype.onQueryChange = function () {
@@ -10195,6 +14823,7 @@ OO.ui.SearchWidget.prototype.onQueryChange = function () {
*
* Selects highlighted item.
*
+ * @private
* @param {string} value New value
*/
OO.ui.SearchWidget.prototype.onQueryEnter = function () {
@@ -10205,6 +14834,8 @@ OO.ui.SearchWidget.prototype.onQueryEnter = function () {
/**
* Handle select widget highlight events.
*
+ * @private
+ * @deprecated Connect straight to getResults() events instead
* @param {OO.ui.OptionWidget} item Highlighted item
* @fires highlight
*/
@@ -10215,6 +14846,8 @@ OO.ui.SearchWidget.prototype.onResultsHighlight = function ( item ) {
/**
* Handle select widget select events.
*
+ * @private
+ * @deprecated Connect straight to getResults() events instead
* @param {OO.ui.OptionWidget} item Selected item
* @fires select
*/
@@ -10232,32 +14865,59 @@ OO.ui.SearchWidget.prototype.getQuery = function () {
};
/**
- * Get the results list.
+ * Get the search results menu.
*
- * @return {OO.ui.SelectWidget} Select list
+ * @return {OO.ui.SelectWidget} Menu of search results
*/
OO.ui.SearchWidget.prototype.getResults = function () {
return this.results;
};
/**
- * Generic selection of options.
- *
- * Items can contain any rendering, and are uniquely identified by a has of thier data. Any widget
- * that provides options, from which the user must choose one, should be built on this class.
- *
- * Use together with OO.ui.OptionWidget.
+ * A SelectWidget is of a generic selection of options. The OOjs UI library contains several types of
+ * select widgets, including {@link OO.ui.ButtonSelectWidget button selects},
+ * {@link OO.ui.RadioSelectWidget radio selects}, and {@link OO.ui.MenuSelectWidget
+ * menu selects}.
+ *
+ * This class should be used together with OO.ui.OptionWidget or OO.ui.DecoratedOptionWidget. For more
+ * information, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example of a select widget with three options
+ * var select = new OO.ui.SelectWidget( {
+ * items: [
+ * new OO.ui.OptionWidget( {
+ * data: 'a',
+ * label: 'Option One',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'b',
+ * label: 'Option Two',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'c',
+ * label: 'Option Three',
+ * } )
+ * ]
+ * } );
+ * $( 'body' ).append( select.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
*
+ * @abstract
* @class
* @extends OO.ui.Widget
* @mixins OO.ui.GroupElement
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {OO.ui.OptionWidget[]} [items] Options to add
+ * @cfg {OO.ui.OptionWidget[]} [items] An array of options to add to the select.
+ * Options are created with {@link OO.ui.OptionWidget OptionWidget} classes. See
+ * the [OOjs UI documentation on MediaWiki] [2] for examples.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
*/
OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
- // Config intialization
+ // Configuration initialization
config = config || {};
// Parent constructor
@@ -10269,20 +14929,22 @@ OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
// Properties
this.pressed = false;
this.selecting = null;
- this.hashes = {};
- this.onMouseUpHandler = OO.ui.bind( this.onMouseUp, this );
- this.onMouseMoveHandler = OO.ui.bind( this.onMouseMove, this );
+ this.onMouseUpHandler = this.onMouseUp.bind( this );
+ this.onMouseMoveHandler = this.onMouseMove.bind( this );
+ this.onKeyDownHandler = this.onKeyDown.bind( this );
// Events
this.$element.on( {
- mousedown: OO.ui.bind( this.onMouseDown, this ),
- mouseover: OO.ui.bind( this.onMouseOver, this ),
- mouseleave: OO.ui.bind( this.onMouseLeave, this )
+ mousedown: this.onMouseDown.bind( this ),
+ mouseover: this.onMouseOver.bind( this ),
+ mouseleave: this.onMouseLeave.bind( this )
} );
// Initialization
- this.$element.addClass( 'oo-ui-selectWidget oo-ui-selectWidget-depressed' );
- if ( $.isArray( config.items ) ) {
+ this.$element
+ .addClass( 'oo-ui-selectWidget oo-ui-selectWidget-depressed' )
+ .attr( 'role', 'listbox' );
+ if ( Array.isArray( config.items ) ) {
this.addItems( config.items );
}
};
@@ -10299,32 +14961,50 @@ OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget );
/**
* @event highlight
+ *
+ * A `highlight` event is emitted when the highlight is changed with the #highlightItem method.
+ *
* @param {OO.ui.OptionWidget|null} item Highlighted item
*/
/**
* @event press
+ *
+ * A `press` event is emitted when the #pressItem method is used to programmatically modify the
+ * pressed state of an option.
+ *
* @param {OO.ui.OptionWidget|null} item Pressed item
*/
/**
* @event select
+ *
+ * A `select` event is emitted when the selection is modified programmatically with the #selectItem method.
+ *
* @param {OO.ui.OptionWidget|null} item Selected item
*/
/**
* @event choose
- * @param {OO.ui.OptionWidget|null} item Chosen item
+ * A `choose` event is emitted when an item is chosen with the #chooseItem method.
+ * @param {OO.ui.OptionWidget} item Chosen item
*/
/**
* @event add
+ *
+ * An `add` event is emitted when options are added to the select with the #addItems method.
+ *
* @param {OO.ui.OptionWidget[]} items Added items
- * @param {number} index Index items were added at
+ * @param {number} index Index of insertion point
*/
/**
* @event remove
+ *
+ * A `remove` event is emitted when options are removed from the select with the #clearItems
+ * or #removeItems methods.
+ *
* @param {OO.ui.OptionWidget[]} items Removed items
*/
@@ -10445,6 +15125,82 @@ OO.ui.SelectWidget.prototype.onMouseLeave = function () {
};
/**
+ * Handle key down events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.SelectWidget.prototype.onKeyDown = function ( e ) {
+ var nextItem,
+ handled = false,
+ currentItem = this.getHighlightedItem() || this.getSelectedItem();
+
+ if ( !this.isDisabled() && this.isVisible() ) {
+ switch ( e.keyCode ) {
+ case OO.ui.Keys.ENTER:
+ if ( currentItem && currentItem.constructor.static.highlightable ) {
+ // Was only highlighted, now let's select it. No-op if already selected.
+ this.chooseItem( currentItem );
+ handled = true;
+ }
+ break;
+ case OO.ui.Keys.UP:
+ case OO.ui.Keys.LEFT:
+ nextItem = this.getRelativeSelectableItem( currentItem, -1 );
+ handled = true;
+ break;
+ case OO.ui.Keys.DOWN:
+ case OO.ui.Keys.RIGHT:
+ nextItem = this.getRelativeSelectableItem( currentItem, 1 );
+ handled = true;
+ break;
+ case OO.ui.Keys.ESCAPE:
+ case OO.ui.Keys.TAB:
+ if ( currentItem && currentItem.constructor.static.highlightable ) {
+ currentItem.setHighlighted( false );
+ }
+ this.unbindKeyDownListener();
+ // Don't prevent tabbing away / defocusing
+ handled = false;
+ break;
+ }
+
+ if ( nextItem ) {
+ if ( nextItem.constructor.static.highlightable ) {
+ this.highlightItem( nextItem );
+ } else {
+ this.chooseItem( nextItem );
+ }
+ nextItem.scrollElementIntoView();
+ }
+
+ if ( handled ) {
+ // Can't just return false, because e is not always a jQuery event
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ }
+};
+
+/**
+ * Bind key down listener.
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.bindKeyDownListener = function () {
+ this.getElementWindow().addEventListener( 'keydown', this.onKeyDownHandler, true );
+};
+
+/**
+ * Unbind key down listener.
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {
+ this.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );
+};
+
+/**
* Get the closest item to a jQuery.Event.
*
* @private
@@ -10452,11 +15208,7 @@ OO.ui.SelectWidget.prototype.onMouseLeave = function () {
* @return {OO.ui.OptionWidget|null} Outline item widget, `null` if none was found
*/
OO.ui.SelectWidget.prototype.getTargetItem = function ( e ) {
- var $item = this.$( e.target ).closest( '.oo-ui-optionWidget' );
- if ( $item.length ) {
- return $item.data( 'oo-ui-optionWidget' );
- }
- return null;
+ return $( e.target ).closest( '.oo-ui-optionWidget' ).data( 'oo-ui-optionWidget' ) || null;
};
/**
@@ -10468,8 +15220,8 @@ OO.ui.SelectWidget.prototype.getSelectedItem = function () {
var i, len;
for ( i = 0, len = this.items.length; i < len; i++ ) {
- if ( this.items[i].isSelected() ) {
- return this.items[i];
+ if ( this.items[ i ].isSelected() ) {
+ return this.items[ i ];
}
}
return null;
@@ -10484,32 +15236,20 @@ OO.ui.SelectWidget.prototype.getHighlightedItem = function () {
var i, len;
for ( i = 0, len = this.items.length; i < len; i++ ) {
- if ( this.items[i].isHighlighted() ) {
- return this.items[i];
+ if ( this.items[ i ].isHighlighted() ) {
+ return this.items[ i ];
}
}
return null;
};
/**
- * Get an existing item with equivilant data.
- *
- * @param {Object} data Item data to search for
- * @return {OO.ui.OptionWidget|null} Item with equivilent value, `null` if none exists
- */
-OO.ui.SelectWidget.prototype.getItemFromData = function ( data ) {
- var hash = OO.getHash( data );
-
- if ( hash in this.hashes ) {
- return this.hashes[hash];
- }
-
- return null;
-};
-
-/**
* Toggle pressed state.
*
+ * Press is a state that occurs when a user mouses down on an item, but
+ * has not yet let go of the mouse. The item may appear selected, but it will not be selected
+ * until the user releases the mouse.
+ *
* @param {boolean} pressed An option is being pressed
*/
OO.ui.SelectWidget.prototype.togglePressed = function ( pressed ) {
@@ -10525,11 +15265,10 @@ OO.ui.SelectWidget.prototype.togglePressed = function ( pressed ) {
};
/**
- * Highlight an item.
+ * Highlight an option. If the `item` param is omitted, no options will be highlighted
+ * and any existing highlight will be removed. The highlight is mutually exclusive.
*
- * Highlighting is mutually exclusive.
- *
- * @param {OO.ui.OptionWidget} [item] Item to highlight, omit to deselect all
+ * @param {OO.ui.OptionWidget} [item] Item to highlight, omit for no highlight
* @fires highlight
* @chainable
*/
@@ -10538,9 +15277,9 @@ OO.ui.SelectWidget.prototype.highlightItem = function ( item ) {
changed = false;
for ( i = 0, len = this.items.length; i < len; i++ ) {
- highlighted = this.items[i] === item;
- if ( this.items[i].isHighlighted() !== highlighted ) {
- this.items[i].setHighlighted( highlighted );
+ highlighted = this.items[ i ] === item;
+ if ( this.items[ i ].isHighlighted() !== highlighted ) {
+ this.items[ i ].setHighlighted( highlighted );
changed = true;
}
}
@@ -10552,7 +15291,24 @@ OO.ui.SelectWidget.prototype.highlightItem = function ( item ) {
};
/**
- * Select an item.
+ * Programmatically select an option by its data. If the `data` parameter is omitted,
+ * or if the item does not exist, all options will be deselected.
+ *
+ * @param {Object|string} [data] Value of the item to select, omit to deselect all
+ * @fires select
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.selectItemByData = function ( data ) {
+ var itemFromData = this.getItemFromData( data );
+ if ( data === undefined || !itemFromData ) {
+ return this.selectItem();
+ }
+ return this.selectItem( itemFromData );
+};
+
+/**
+ * Programmatically select an option by its reference. If the `item` parameter is omitted,
+ * all options will be deselected.
*
* @param {OO.ui.OptionWidget} [item] Item to select, omit to deselect all
* @fires select
@@ -10563,9 +15319,9 @@ OO.ui.SelectWidget.prototype.selectItem = function ( item ) {
changed = false;
for ( i = 0, len = this.items.length; i < len; i++ ) {
- selected = this.items[i] === item;
- if ( this.items[i].isSelected() !== selected ) {
- this.items[i].setSelected( selected );
+ selected = this.items[ i ] === item;
+ if ( this.items[ i ].isSelected() !== selected ) {
+ this.items[ i ].setSelected( selected );
changed = true;
}
}
@@ -10579,6 +15335,10 @@ OO.ui.SelectWidget.prototype.selectItem = function ( item ) {
/**
* Press an item.
*
+ * Press is a state that occurs when a user mouses down on an item, but has not
+ * yet let go of the mouse. The item may appear selected, but it will not be selected until the user
+ * releases the mouse.
+ *
* @param {OO.ui.OptionWidget} [item] Item to press, omit to depress all
* @fires press
* @chainable
@@ -10588,9 +15348,9 @@ OO.ui.SelectWidget.prototype.pressItem = function ( item ) {
changed = false;
for ( i = 0, len = this.items.length; i < len; i++ ) {
- pressed = this.items[i] === item;
- if ( this.items[i].isPressed() !== pressed ) {
- this.items[i].setPressed( pressed );
+ pressed = this.items[ i ] === item;
+ if ( this.items[ i ].isPressed() !== pressed ) {
+ this.items[ i ].setPressed( pressed );
changed = true;
}
}
@@ -10604,8 +15364,12 @@ OO.ui.SelectWidget.prototype.pressItem = function ( item ) {
/**
* Choose an item.
*
- * Identical to #selectItem, but may vary in subclasses that want to take additional action when
- * an item is selected using the keyboard or mouse.
+ * Note that ‘choose’ should never be modified programmatically. A user can choose
+ * an option with the keyboard or mouse and it becomes selected. To select an item programmatically,
+ * use the #selectItem method.
+ *
+ * This method is identical to #selectItem, but may vary in subclasses that take additional action
+ * when users choose an item with the keyboard or mouse.
*
* @param {OO.ui.OptionWidget} item Item to choose
* @fires choose
@@ -10619,48 +15383,50 @@ OO.ui.SelectWidget.prototype.chooseItem = function ( item ) {
};
/**
- * Get an item relative to another one.
+ * Get an option by its position relative to the specified item (or to the start of the option array,
+ * if item is `null`). The direction in which to search through the option array is specified with a
+ * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or
+ * `null` if there are no options in the array.
*
- * @param {OO.ui.OptionWidget} item Item to start at
- * @param {number} direction Direction to move in
- * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the menu
+ * @param {OO.ui.OptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.
+ * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward
+ * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the select
*/
OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direction ) {
- var inc = direction > 0 ? 1 : -1,
- len = this.items.length,
- index = item instanceof OO.ui.OptionWidget ?
- $.inArray( item, this.items ) : ( inc > 0 ? -1 : 0 ),
- stopAt = Math.max( Math.min( index, len - 1 ), 0 ),
- i = inc > 0 ?
- // Default to 0 instead of -1, if nothing is selected let's start at the beginning
- Math.max( index, -1 ) :
- // Default to n-1 instead of -1, if nothing is selected let's start at the end
- Math.min( index, len );
-
- while ( true ) {
- i = ( i + inc + len ) % len;
- item = this.items[i];
+ var currentIndex, nextIndex, i,
+ increase = direction > 0 ? 1 : -1,
+ len = this.items.length;
+
+ if ( item instanceof OO.ui.OptionWidget ) {
+ currentIndex = $.inArray( item, this.items );
+ nextIndex = ( currentIndex + increase + len ) % len;
+ } else {
+ // If no item is selected and moving forward, start at the beginning.
+ // If moving backward, start at the end.
+ nextIndex = direction > 0 ? 0 : len - 1;
+ }
+
+ for ( i = 0; i < len; i++ ) {
+ item = this.items[ nextIndex ];
if ( item instanceof OO.ui.OptionWidget && item.isSelectable() ) {
return item;
}
- // Stop iterating when we've looped all the way around
- if ( i === stopAt ) {
- break;
- }
+ nextIndex = ( nextIndex + increase + len ) % len;
}
return null;
};
/**
- * Get the next selectable item.
+ * Get the next selectable item or `null` if there are no selectable items.
+ * Disabled options and menu-section markers and breaks are not selectable.
*
- * @return {OO.ui.OptionWidget|null} Item, `null` if ther aren't any selectable items
+ * @return {OO.ui.OptionWidget|null} Item, `null` if there aren't any selectable items
*/
OO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {
var i, len, item;
for ( i = 0, len = this.items.length; i < len; i++ ) {
- item = this.items[i];
+ item = this.items[ i ];
if ( item instanceof OO.ui.OptionWidget && item.isSelectable() ) {
return item;
}
@@ -10670,10 +15436,8 @@ OO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {
};
/**
- * Add items.
- *
- * When items are added with the same values as existing items, the existing items will be
- * automatically removed before the new items are added.
+ * Add an array of options to the select. Optionally, an index number can be used to
+ * specify an insertion point.
*
* @param {OO.ui.OptionWidget[]} items Items to add
* @param {number} [index] Index to insert items after
@@ -10681,22 +15445,6 @@ OO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {
* @chainable
*/
OO.ui.SelectWidget.prototype.addItems = function ( items, index ) {
- var i, len, item, hash,
- remove = [];
-
- for ( i = 0, len = items.length; i < len; i++ ) {
- item = items[i];
- hash = OO.getHash( item.getData() );
- if ( hash in this.hashes ) {
- // Remove item with same value
- remove.push( this.hashes[hash] );
- }
- this.hashes[hash] = item;
- }
- if ( remove.length ) {
- this.removeItems( remove );
- }
-
// Mixin method
OO.ui.GroupWidget.prototype.addItems.call( this, items, index );
@@ -10707,24 +15455,20 @@ OO.ui.SelectWidget.prototype.addItems = function ( items, index ) {
};
/**
- * Remove items.
- *
- * Items will be detached, not removed, so they can be used later.
+ * Remove the specified array of options from the select. Options will be detached
+ * from the DOM, not removed, so they can be reused later. To remove all options from
+ * the select, you may wish to use the #clearItems method instead.
*
* @param {OO.ui.OptionWidget[]} items Items to remove
* @fires remove
* @chainable
*/
OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
- var i, len, item, hash;
+ var i, len, item;
+ // Deselect items being removed
for ( i = 0, len = items.length; i < len; i++ ) {
- item = items[i];
- hash = OO.getHash( item.getData() );
- if ( hash in this.hashes ) {
- // Remove existing item
- delete this.hashes[hash];
- }
+ item = items[ i ];
if ( item.isSelected() ) {
this.selectItem( null );
}
@@ -10739,9 +15483,9 @@ OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
};
/**
- * Clear all items.
- *
- * Items will be detached, not removed, so they can be used later.
+ * Clear all options from the select. Options will be detached from the DOM, not removed,
+ * so that they can be reused later. To remove a subset of options from the select, use
+ * the #removeItems method.
*
* @fires remove
* @chainable
@@ -10749,10 +15493,10 @@ OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
OO.ui.SelectWidget.prototype.clearItems = function () {
var items = this.items.slice();
- // Clear all items
- this.hashes = {};
// Mixin method
OO.ui.GroupWidget.prototype.clearItems.call( this );
+
+ // Clear selection
this.selectItem( null );
this.emit( 'remove', items );
@@ -10761,12 +15505,42 @@ OO.ui.SelectWidget.prototype.clearItems = function () {
};
/**
- * Select widget containing button options.
+ * ButtonSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains
+ * button options and is used together with
+ * OO.ui.ButtonOptionWidget. The ButtonSelectWidget provides an interface for
+ * highlighting, choosing, and selecting mutually exclusive options. Please see
+ * the [OOjs UI documentation on MediaWiki] [1] for more information.
*
- * Use together with OO.ui.ButtonOptionWidget.
+ * @example
+ * // Example: A ButtonSelectWidget that contains three ButtonOptionWidgets
+ * var option1 = new OO.ui.ButtonOptionWidget( {
+ * data: 1,
+ * label: 'Option 1',
+ * title: 'Button option 1'
+ * } );
+ *
+ * var option2 = new OO.ui.ButtonOptionWidget( {
+ * data: 2,
+ * label: 'Option 2',
+ * title: 'Button option 2'
+ * } );
+ *
+ * var option3 = new OO.ui.ButtonOptionWidget( {
+ * data: 3,
+ * label: 'Option 3',
+ * title: 'Button option 3'
+ * } );
+ *
+ * var buttonSelect=new OO.ui.ButtonSelectWidget( {
+ * items: [ option1, option2, option3 ]
+ * } );
+ * $( 'body' ).append( buttonSelect.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
*
* @class
* @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {Object} [config] Configuration options
@@ -10775,6 +15549,15 @@ OO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {
// Parent constructor
OO.ui.ButtonSelectWidget.super.call( this, config );
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, config );
+
+ // Events
+ this.$element.on( {
+ focus: this.bindKeyDownListener.bind( this ),
+ blur: this.unbindKeyDownListener.bind( this )
+ } );
+
// Initialization
this.$element.addClass( 'oo-ui-buttonSelectWidget' );
};
@@ -10782,179 +15565,232 @@ OO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {
/* Setup */
OO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.TabIndexedElement );
/**
- * Overlaid menu of options.
+ * RadioSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains radio
+ * options and is used together with OO.ui.RadioOptionWidget. The RadioSelectWidget provides
+ * an interface for adding, removing and selecting options.
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ *
+ * @example
+ * // A RadioSelectWidget with RadioOptions.
+ * var option1 = new OO.ui.RadioOptionWidget( {
+ * data: 'a',
+ * label: 'Selected radio option'
+ * } );
*
- * Menus are clipped to the visible viewport. They do not provide a control for opening or closing
- * the menu.
+ * var option2 = new OO.ui.RadioOptionWidget( {
+ * data: 'b',
+ * label: 'Unselected radio option'
+ * } );
*
- * Use together with OO.ui.MenuItemWidget.
+ * var radioSelect=new OO.ui.RadioSelectWidget( {
+ * items: [ option1, option2 ]
+ * } );
+ *
+ * // Select 'option 1' using the RadioSelectWidget's selectItem() method.
+ * radioSelect.selectItem( option1 );
+ *
+ * $( 'body' ).append( radioSelect.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+
*
* @class
* @extends OO.ui.SelectWidget
- * @mixins OO.ui.ClippableElement
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {OO.ui.InputWidget} [input] Input to bind keyboard handlers to
- * @cfg {OO.ui.Widget} [widget] Widget to bind mouse handlers to
- * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu
*/
-OO.ui.MenuWidget = function OoUiMenuWidget( config ) {
- // Config intialization
+OO.ui.RadioSelectWidget = function OoUiRadioSelectWidget( config ) {
+ // Parent constructor
+ OO.ui.RadioSelectWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, config );
+
+ // Events
+ this.$element.on( {
+ focus: this.bindKeyDownListener.bind( this ),
+ blur: this.unbindKeyDownListener.bind( this )
+ } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-radioSelectWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.RadioSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.TabIndexedElement );
+
+/**
+ * MenuSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains options and
+ * is used together with OO.ui.MenuOptionWidget. It is designed be used as part of another widget.
+ * See {@link OO.ui.DropdownWidget DropdownWidget}, {@link OO.ui.ComboBoxWidget ComboBoxWidget},
+ * and {@link OO.ui.LookupElement LookupElement} for examples of widgets that contain menus.
+ * MenuSelectWidgets themselves are not instantiated directly, rather subclassed
+ * and customized to be opened, closed, and displayed as needed.
+ *
+ * By default, menus are clipped to the visible viewport and are not visible when a user presses the
+ * mouse outside the menu.
+ *
+ * Menus also have support for keyboard interaction:
+ *
+ * - Enter/Return key: choose and select a menu option
+ * - Up-arrow key: highlight the previous menu option
+ * - Down-arrow key: highlight the next menu option
+ * - Esc key: hide the menu
+ *
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.ClippableElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.TextInputWidget} [input] Text input used to implement option highlighting for menu items that match
+ * the text the user types. This config is used by {@link OO.ui.ComboBoxWidget ComboBoxWidget}
+ * and {@link OO.ui.LookupElement LookupElement}
+ * @cfg {OO.ui.Widget} [widget] Widget associated with the menu’s active state. If the user clicks the mouse
+ * anywhere on the page outside of this widget, the menu is hidden.
+ * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.
+ */
+OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
+ // Configuration initialization
config = config || {};
// Parent constructor
- OO.ui.MenuWidget.super.call( this, config );
+ OO.ui.MenuSelectWidget.super.call( this, config );
// Mixin constructors
OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
// Properties
- this.flashing = false;
- this.visible = false;
this.newItems = null;
this.autoHide = config.autoHide === undefined || !!config.autoHide;
this.$input = config.input ? config.input.$input : null;
this.$widget = config.widget ? config.widget.$element : null;
- this.$previousFocus = null;
- this.isolated = !config.input;
- this.onKeyDownHandler = OO.ui.bind( this.onKeyDown, this );
- this.onDocumentMouseDownHandler = OO.ui.bind( this.onDocumentMouseDown, this );
+ this.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );
// Initialization
this.$element
- .hide()
- .attr( 'role', 'menu' )
- .addClass( 'oo-ui-menuWidget' );
+ .addClass( 'oo-ui-menuSelectWidget' )
+ .attr( 'role', 'menu' );
+
+ // Initially hidden - using #toggle may cause errors if subclasses override toggle with methods
+ // that reference properties not initialized at that time of parent class construction
+ // TODO: Find a better way to handle post-constructor setup
+ this.visible = false;
+ this.$element.addClass( 'oo-ui-element-hidden' );
};
/* Setup */
-OO.inheritClass( OO.ui.MenuWidget, OO.ui.SelectWidget );
-OO.mixinClass( OO.ui.MenuWidget, OO.ui.ClippableElement );
+OO.inheritClass( OO.ui.MenuSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.ClippableElement );
/* Methods */
/**
* Handles document mouse down events.
*
+ * @protected
* @param {jQuery.Event} e Key down event
*/
-OO.ui.MenuWidget.prototype.onDocumentMouseDown = function ( e ) {
- if ( !$.contains( this.$element[0], e.target ) && ( !this.$widget || !$.contains( this.$widget[0], e.target ) ) ) {
+OO.ui.MenuSelectWidget.prototype.onDocumentMouseDown = function ( e ) {
+ if (
+ !OO.ui.contains( this.$element[ 0 ], e.target, true ) &&
+ ( !this.$widget || !OO.ui.contains( this.$widget[ 0 ], e.target, true ) )
+ ) {
this.toggle( false );
}
};
/**
- * Handles key down events.
- *
- * @param {jQuery.Event} e Key down event
+ * @inheritdoc
*/
-OO.ui.MenuWidget.prototype.onKeyDown = function ( e ) {
- var nextItem,
- handled = false,
- highlightItem = this.getHighlightedItem();
+OO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
+ var currentItem = this.getHighlightedItem() || this.getSelectedItem();
if ( !this.isDisabled() && this.isVisible() ) {
- if ( !highlightItem ) {
- highlightItem = this.getSelectedItem();
- }
switch ( e.keyCode ) {
- case OO.ui.Keys.ENTER:
- this.chooseItem( highlightItem );
- handled = true;
- break;
- case OO.ui.Keys.UP:
- nextItem = this.getRelativeSelectableItem( highlightItem, -1 );
- handled = true;
- break;
- case OO.ui.Keys.DOWN:
- nextItem = this.getRelativeSelectableItem( highlightItem, 1 );
- handled = true;
+ case OO.ui.Keys.LEFT:
+ case OO.ui.Keys.RIGHT:
+ // Do nothing if a text field is associated, arrow keys will be handled natively
+ if ( !this.$input ) {
+ OO.ui.MenuSelectWidget.super.prototype.onKeyDown.call( this, e );
+ }
break;
case OO.ui.Keys.ESCAPE:
- if ( highlightItem ) {
- highlightItem.setHighlighted( false );
+ case OO.ui.Keys.TAB:
+ if ( currentItem ) {
+ currentItem.setHighlighted( false );
}
this.toggle( false );
- handled = true;
+ // Don't prevent tabbing away, prevent defocusing
+ if ( e.keyCode === OO.ui.Keys.ESCAPE ) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
break;
- }
-
- if ( nextItem ) {
- this.highlightItem( nextItem );
- nextItem.scrollElementIntoView();
- }
-
- if ( handled ) {
- e.preventDefault();
- e.stopPropagation();
- return false;
+ default:
+ OO.ui.MenuSelectWidget.super.prototype.onKeyDown.call( this, e );
+ return;
}
}
};
/**
- * Bind key down listener.
+ * @inheritdoc
*/
-OO.ui.MenuWidget.prototype.bindKeyDownListener = function () {
+OO.ui.MenuSelectWidget.prototype.bindKeyDownListener = function () {
if ( this.$input ) {
this.$input.on( 'keydown', this.onKeyDownHandler );
} else {
- // Capture menu navigation keys
- this.getElementWindow().addEventListener( 'keydown', this.onKeyDownHandler, true );
+ OO.ui.MenuSelectWidget.super.prototype.bindKeyDownListener.call( this );
}
};
/**
- * Unbind key down listener.
+ * @inheritdoc
*/
-OO.ui.MenuWidget.prototype.unbindKeyDownListener = function () {
+OO.ui.MenuSelectWidget.prototype.unbindKeyDownListener = function () {
if ( this.$input ) {
- this.$input.off( 'keydown' );
+ this.$input.off( 'keydown', this.onKeyDownHandler );
} else {
- this.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );
+ OO.ui.MenuSelectWidget.super.prototype.unbindKeyDownListener.call( this );
}
};
/**
* Choose an item.
*
- * This will close the menu when done, unlike selectItem which only changes selection.
+ * When a user chooses an item, the menu is closed.
*
+ * Note that ‘choose’ should never be modified programmatically. A user can choose an option with the keyboard
+ * or mouse and it becomes selected. To select an item programmatically, use the #selectItem method.
* @param {OO.ui.OptionWidget} item Item to choose
* @chainable
*/
-OO.ui.MenuWidget.prototype.chooseItem = function ( item ) {
- var widget = this;
-
- // Parent method
- OO.ui.MenuWidget.super.prototype.chooseItem.call( this, item );
-
- if ( item && !this.flashing ) {
- this.flashing = true;
- item.flash().done( function () {
- widget.toggle( false );
- widget.flashing = false;
- } );
- } else {
- this.toggle( false );
- }
-
+OO.ui.MenuSelectWidget.prototype.chooseItem = function ( item ) {
+ OO.ui.MenuSelectWidget.super.prototype.chooseItem.call( this, item );
+ this.toggle( false );
return this;
};
/**
* @inheritdoc
*/
-OO.ui.MenuWidget.prototype.addItems = function ( items, index ) {
+OO.ui.MenuSelectWidget.prototype.addItems = function ( items, index ) {
var i, len, item;
// Parent method
- OO.ui.MenuWidget.super.prototype.addItems.call( this, items, index );
+ OO.ui.MenuSelectWidget.super.prototype.addItems.call( this, items, index );
// Auto-initialize
if ( !this.newItems ) {
@@ -10962,7 +15798,7 @@ OO.ui.MenuWidget.prototype.addItems = function ( items, index ) {
}
for ( i = 0, len = items.length; i < len; i++ ) {
- item = items[i];
+ item = items[ i ];
if ( this.isVisible() ) {
// Defer fitting label until item has been attached
item.fitLabel();
@@ -10980,9 +15816,9 @@ OO.ui.MenuWidget.prototype.addItems = function ( items, index ) {
/**
* @inheritdoc
*/
-OO.ui.MenuWidget.prototype.removeItems = function ( items ) {
+OO.ui.MenuSelectWidget.prototype.removeItems = function ( items ) {
// Parent method
- OO.ui.MenuWidget.super.prototype.removeItems.call( this, items );
+ OO.ui.MenuSelectWidget.super.prototype.removeItems.call( this, items );
// Reevaluate clipping
this.clip();
@@ -10993,9 +15829,9 @@ OO.ui.MenuWidget.prototype.removeItems = function ( items ) {
/**
* @inheritdoc
*/
-OO.ui.MenuWidget.prototype.clearItems = function () {
+OO.ui.MenuSelectWidget.prototype.clearItems = function () {
// Parent method
- OO.ui.MenuWidget.super.prototype.clearItems.call( this );
+ OO.ui.MenuSelectWidget.super.prototype.clearItems.call( this );
// Reevaluate clipping
this.clip();
@@ -11006,27 +15842,22 @@ OO.ui.MenuWidget.prototype.clearItems = function () {
/**
* @inheritdoc
*/
-OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
+OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
var i, len,
change = visible !== this.isVisible();
// Parent method
- OO.ui.MenuWidget.super.prototype.toggle.call( this, visible );
+ OO.ui.MenuSelectWidget.super.prototype.toggle.call( this, visible );
if ( change ) {
if ( visible ) {
this.bindKeyDownListener();
- // Change focus to enable keyboard navigation
- if ( this.isolated && this.$input && !this.$input.is( ':focus' ) ) {
- this.$previousFocus = this.$( ':focus' );
- this.$input[0].focus();
- }
if ( this.newItems && this.newItems.length ) {
for ( i = 0, len = this.newItems.length; i < len; i++ ) {
- this.newItems[i].fitLabel();
+ this.newItems[ i ].fitLabel();
}
this.newItems = null;
}
@@ -11040,10 +15871,6 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
}
} else {
this.unbindKeyDownListener();
- if ( this.isolated && this.$previousFocus ) {
- this.$previousFocus[0].focus();
- this.$previousFocus = null;
- }
this.getElementDocument().removeEventListener(
'mousedown', this.onDocumentMouseDownHandler, true
);
@@ -11055,53 +15882,62 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
};
/**
- * Menu for a text input widget.
- *
- * This menu is specially designed to be positioned beneath the text input widget. Even if the input
- * is in a different frame, the menu's position is automatically calulated and maintained when the
- * menu is toggled or the window is resized.
+ * TextInputMenuSelectWidget is a menu that is specially designed to be positioned beneath
+ * a {@link OO.ui.TextInputWidget text input} field. The menu's position is automatically
+ * calculated and maintained when the menu is toggled or the window is resized.
+ * See OO.ui.ComboBoxWidget for an example of a widget that uses this class.
*
* @class
- * @extends OO.ui.MenuWidget
+ * @extends OO.ui.MenuSelectWidget
*
* @constructor
- * @param {OO.ui.TextInputWidget} input Text input widget to provide menu for
+ * @param {OO.ui.TextInputWidget} inputWidget Text input widget to provide menu for
* @param {Object} [config] Configuration options
* @cfg {jQuery} [$container=input.$element] Element to render menu under
*/
-OO.ui.TextInputMenuWidget = function OoUiTextInputMenuWidget( input, config ) {
+OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( inputWidget, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( inputWidget ) && config === undefined ) {
+ config = inputWidget;
+ inputWidget = config.inputWidget;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
// Parent constructor
- OO.ui.TextInputMenuWidget.super.call( this, config );
+ OO.ui.TextInputMenuSelectWidget.super.call( this, config );
// Properties
- this.input = input;
- this.$container = config.$container || this.input.$element;
- this.onWindowResizeHandler = OO.ui.bind( this.onWindowResize, this );
+ this.inputWidget = inputWidget;
+ this.$container = config.$container || this.inputWidget.$element;
+ this.onWindowResizeHandler = this.onWindowResize.bind( this );
// Initialization
- this.$element.addClass( 'oo-ui-textInputMenuWidget' );
+ this.$element.addClass( 'oo-ui-textInputMenuSelectWidget' );
};
/* Setup */
-OO.inheritClass( OO.ui.TextInputMenuWidget, OO.ui.MenuWidget );
+OO.inheritClass( OO.ui.TextInputMenuSelectWidget, OO.ui.MenuSelectWidget );
/* Methods */
/**
* Handle window resize event.
*
+ * @private
* @param {jQuery.Event} e Window resize event
*/
-OO.ui.TextInputMenuWidget.prototype.onWindowResize = function () {
+OO.ui.TextInputMenuSelectWidget.prototype.onWindowResize = function () {
this.position();
};
/**
* @inheritdoc
*/
-OO.ui.TextInputMenuWidget.prototype.toggle = function ( visible ) {
- visible = !!visible;
+OO.ui.TextInputMenuSelectWidget.prototype.toggle = function ( visible ) {
+ visible = visible === undefined ? !this.isVisible() : !!visible;
var change = visible !== this.isVisible();
@@ -11113,14 +15949,14 @@ OO.ui.TextInputMenuWidget.prototype.toggle = function ( visible ) {
}
// Parent method
- OO.ui.TextInputMenuWidget.super.prototype.toggle.call( this, visible );
+ OO.ui.TextInputMenuSelectWidget.super.prototype.toggle.call( this, visible );
if ( change ) {
if ( this.isVisible() ) {
this.position();
- this.$( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
+ $( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
} else {
- this.$( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
+ $( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
}
}
@@ -11130,33 +15966,18 @@ OO.ui.TextInputMenuWidget.prototype.toggle = function ( visible ) {
/**
* Position the menu.
*
+ * @private
* @chainable
*/
-OO.ui.TextInputMenuWidget.prototype.position = function () {
- var frameOffset,
- $container = this.$container,
- dimensions = $container.offset();
+OO.ui.TextInputMenuSelectWidget.prototype.position = function () {
+ var $container = this.$container,
+ pos = OO.ui.Element.static.getRelativePosition( $container, this.$element.offsetParent() );
// Position under input
- dimensions.top += $container.height();
+ pos.top += $container.height();
+ this.$element.css( pos );
- // Compensate for frame position if in a differnt frame
- if ( this.input.$.$iframe && this.input.$.context !== this.$element[0].ownerDocument ) {
- frameOffset = OO.ui.Element.getRelativePosition(
- this.input.$.$iframe, this.$element.offsetParent()
- );
- dimensions.left += frameOffset.left;
- dimensions.top += frameOffset.top;
- } else {
- // Fix for RTL (for some reason, no need to fix if the frameoffset is set)
- if ( this.$element.css( 'direction' ) === 'rtl' ) {
- dimensions.right = this.$element.parent().position().left -
- $container.width() - dimensions.left;
- // Erase the value for 'left':
- delete dimensions.left;
- }
- }
- this.$element.css( dimensions );
+ // Set width
this.setIdealSize( $container.width() );
// We updated the position, so re-evaluate the clipping state
this.clip();
@@ -11165,83 +15986,165 @@ OO.ui.TextInputMenuWidget.prototype.position = function () {
};
/**
- * Structured list of items.
+ * OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}
+ * A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.
*
- * Use with OO.ui.OutlineItemWidget.
+ * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
*
* @class
* @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {Object} [config] Configuration options
*/
-OO.ui.OutlineWidget = function OoUiOutlineWidget( config ) {
- // Config intialization
- config = config || {};
+OO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {
+ // Parent constructor
+ OO.ui.OutlineSelectWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, config );
+
+ // Events
+ this.$element.on( {
+ focus: this.bindKeyDownListener.bind( this ),
+ blur: this.unbindKeyDownListener.bind( this )
+ } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-outlineSelectWidget' );
+};
+
+/* Setup */
+OO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.TabIndexedElement );
+
+/**
+ * TabSelectWidget is a list that contains {@link OO.ui.TabOptionWidget tab options}
+ *
+ * ####Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.####
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {
// Parent constructor
- OO.ui.OutlineWidget.super.call( this, config );
+ OO.ui.TabSelectWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, config );
+
+ // Events
+ this.$element.on( {
+ focus: this.bindKeyDownListener.bind( this ),
+ blur: this.unbindKeyDownListener.bind( this )
+ } );
// Initialization
- this.$element.addClass( 'oo-ui-outlineWidget' );
+ this.$element.addClass( 'oo-ui-tabSelectWidget' );
};
/* Setup */
-OO.inheritClass( OO.ui.OutlineWidget, OO.ui.SelectWidget );
+OO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.TabSelectWidget, OO.ui.TabIndexedElement );
/**
- * Switch that slides on and off.
+ * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean
+ * value (`true` for ‘on’, and `false` otherwise, the default). The ‘off’ state is represented
+ * visually by a slider in the leftmost position.
+ *
+ * @example
+ * // Toggle switches in the 'off' and 'on' position.
+ * var toggleSwitch1 = new OO.ui.ToggleSwitchWidget();
+ * var toggleSwitch2 = new OO.ui.ToggleSwitchWidget( {
+ * value: true
+ * } );
+ *
+ * // Create a FieldsetLayout to layout and label switches
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'Toggle switches'
+ * } );
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( toggleSwitch1, { label: 'Off', align: 'top' } ),
+ * new OO.ui.FieldLayout( toggleSwitch2, { label: 'On', align: 'top' } )
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
*
* @class
- * @extends OO.ui.Widget
- * @mixins OO.ui.ToggleWidget
+ * @extends OO.ui.ToggleWidget
+ * @mixins OO.ui.TabIndexedElement
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {boolean} [value=false] Initial value
+ * @cfg {boolean} [value=false] The toggle switch’s initial on/off state.
+ * By default, the toggle switch is in the 'off' position.
*/
OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
// Parent constructor
OO.ui.ToggleSwitchWidget.super.call( this, config );
// Mixin constructors
- OO.ui.ToggleWidget.call( this, config );
+ OO.ui.TabIndexedElement.call( this, config );
// Properties
this.dragging = false;
this.dragStart = null;
this.sliding = false;
- this.$glow = this.$( '<span>' );
- this.$grip = this.$( '<span>' );
+ this.$glow = $( '<span>' );
+ this.$grip = $( '<span>' );
// Events
- this.$element.on( 'click', OO.ui.bind( this.onClick, this ) );
+ this.$element.on( {
+ click: this.onClick.bind( this ),
+ keypress: this.onKeyPress.bind( this )
+ } );
// Initialization
this.$glow.addClass( 'oo-ui-toggleSwitchWidget-glow' );
this.$grip.addClass( 'oo-ui-toggleSwitchWidget-grip' );
this.$element
.addClass( 'oo-ui-toggleSwitchWidget' )
+ .attr( 'role', 'checkbox' )
.append( this.$glow, this.$grip );
};
/* Setup */
-OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );
+OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );
+OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.TabIndexedElement );
/* Methods */
/**
- * Handle mouse down events.
+ * Handle mouse click events.
*
- * @param {jQuery.Event} e Mouse down event
+ * @private
+ * @param {jQuery.Event} e Mouse click event
*/
OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {
if ( !this.isDisabled() && e.which === 1 ) {
this.setValue( !this.value );
}
+ return false;
+};
+
+/**
+ * Handle key press events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.ToggleSwitchWidget.prototype.onKeyPress = function ( e ) {
+ if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+ this.setValue( !this.value );
+ return false;
+ }
};
}( OO ) );
diff --git a/resources/lib/oojs-ui/oojs-ui.rtl.css b/resources/lib/oojs-ui/oojs-ui.rtl.css
deleted file mode 100644
index 7f1fa344..00000000
--- a/resources/lib/oojs-ui/oojs-ui.rtl.css
+++ /dev/null
@@ -1,112 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-09-11T19:39:50Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-.oo-ui-icon-add-item {
- background-image: /* @embed */ url(images/icons/add-item.png);
-}
-.oo-ui-icon-advanced {
- background-image: /* @embed */ url(images/icons/advanced.png);
-}
-.oo-ui-icon-alert {
- background-image: /* @embed */ url(images/icons/alert.png);
-}
-.oo-ui-icon-check {
- background-image: /* @embed */ url(images/icons/check.png);
-}
-.oo-ui-icon-clear {
- background-image: /* @embed */ url(images/icons/clear.png);
-}
-.oo-ui-icon-close {
- background-image: /* @embed */ url(images/icons/close.png);
-}
-.oo-ui-icon-code {
- background-image: /* @embed */ url(images/icons/code.png);
-}
-.oo-ui-icon-collapse {
- background-image: /* @embed */ url(images/icons/collapse.png);
-}
-.oo-ui-icon-comment {
- background-image: /* @embed */ url(images/icons/comment.png);
-}
-.oo-ui-icon-expand {
- background-image: /* @embed */ url(images/icons/expand.png);
-}
-.oo-ui-icon-help {
- background-image: /* @embed */ url(images/icons/help.png);
-}
-.oo-ui-icon-info {
- background-image: /* @embed */ url(images/icons/info.png);
-}
-.oo-ui-icon-link {
- background-image: /* @embed */ url(images/icons/link.png);
-}
-.oo-ui-icon-menu {
- background-image: /* @embed */ url(images/icons/menu.png);
-}
-.oo-ui-icon-next {
- background-image: /* @embed */ url(images/icons/move-rtl.png);
-}
-.oo-ui-icon-picture {
- background-image: /* @embed */ url(images/icons/picture.png);
-}
-.oo-ui-icon-previous {
- background-image: /* @embed */ url(images/icons/move-ltr.png);
-}
-.oo-ui-icon-redo {
- background-image: /* @embed */ url(images/icons/arched-arrow-rtl.png);
-}
-.oo-ui-icon-remove {
- background-image: /* @embed */ url(images/icons/remove.png);
-}
-.oo-ui-icon-search {
- background-image: /* @embed */ url(images/icons/search.png);
-}
-.oo-ui-icon-settings {
- background-image: /* @embed */ url(images/icons/settings.png);
-}
-.oo-ui-icon-tag {
- background-image: /* @embed */ url(images/icons/tag.png);
-}
-.oo-ui-icon-undo {
- background-image: /* @embed */ url(images/icons/arched-arrow-ltr.png);
-}
-.oo-ui-icon-window {
- background-image: /* @embed */ url(images/icons/window.png);
-}
-.oo-ui-indicator-alert {
- background-image: /* @embed */ url(images/indicators/alert.png);
-}
-.oo-ui-indicator-down {
- background-image: /* @embed */ url(images/indicators/arrow-down.png);
-}
-.oo-ui-indicator-next {
- background-image: /* @embed */ url(images/indicators/arrow-rtl.png);
-}
-.oo-ui-indicator-previous {
- background-image: /* @embed */ url(images/indicators/arrow-ltr.png);
-}
-.oo-ui-indicator-required {
- background-image: /* @embed */ url(images/indicators/required.png);
-}
-.oo-ui-indicator-up {
- background-image: /* @embed */ url(images/indicators/arrow-up.png);
-}
-.oo-ui-texture-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
- background-image: /* @embed */ url(images/textures/transparency.png);
-}
diff --git a/resources/lib/oojs-ui/oojs-ui.svg.css b/resources/lib/oojs-ui/oojs-ui.svg.css
deleted file mode 100644
index aafdff36..00000000
--- a/resources/lib/oojs-ui/oojs-ui.svg.css
+++ /dev/null
@@ -1,112 +0,0 @@
-/*!
- * OOjs UI v0.1.0-pre (f2c3f12959)
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-09-18T23:22:20Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-.oo-ui-icon-add-item {
- background-image: /* @embed */ url(images/icons/add-item.svg);
-}
-.oo-ui-icon-advanced {
- background-image: /* @embed */ url(images/icons/advanced.svg);
-}
-.oo-ui-icon-alert {
- background-image: /* @embed */ url(images/icons/alert.svg);
-}
-.oo-ui-icon-check {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-.oo-ui-icon-clear {
- background-image: /* @embed */ url(images/icons/clear.svg);
-}
-.oo-ui-icon-close {
- background-image: /* @embed */ url(images/icons/close.svg);
-}
-.oo-ui-icon-code {
- background-image: /* @embed */ url(images/icons/code.svg);
-}
-.oo-ui-icon-collapse {
- background-image: /* @embed */ url(images/icons/collapse.svg);
-}
-.oo-ui-icon-comment {
- background-image: /* @embed */ url(images/icons/comment.svg);
-}
-.oo-ui-icon-expand {
- background-image: /* @embed */ url(images/icons/expand.svg);
-}
-.oo-ui-icon-help {
- background-image: /* @embed */ url(images/icons/help.svg);
-}
-.oo-ui-icon-info {
- background-image: /* @embed */ url(images/icons/info.svg);
-}
-.oo-ui-icon-link {
- background-image: /* @embed */ url(images/icons/link.svg);
-}
-.oo-ui-icon-menu {
- background-image: /* @embed */ url(images/icons/menu.svg);
-}
-.oo-ui-icon-next {
- background-image: /* @embed */ url(images/icons/move-ltr.svg);
-}
-.oo-ui-icon-picture {
- background-image: /* @embed */ url(images/icons/picture.svg);
-}
-.oo-ui-icon-previous {
- background-image: /* @embed */ url(images/icons/move-rtl.svg);
-}
-.oo-ui-icon-redo {
- background-image: /* @embed */ url(images/icons/arched-arrow-ltr.svg);
-}
-.oo-ui-icon-remove {
- background-image: /* @embed */ url(images/icons/remove.svg);
-}
-.oo-ui-icon-search {
- background-image: /* @embed */ url(images/icons/search.svg);
-}
-.oo-ui-icon-settings {
- background-image: /* @embed */ url(images/icons/settings.svg);
-}
-.oo-ui-icon-tag {
- background-image: /* @embed */ url(images/icons/tag.svg);
-}
-.oo-ui-icon-undo {
- background-image: /* @embed */ url(images/icons/arched-arrow-rtl.svg);
-}
-.oo-ui-icon-window {
- background-image: /* @embed */ url(images/icons/window.svg);
-}
-.oo-ui-indicator-alert {
- background-image: /* @embed */ url(images/indicators/alert.svg);
-}
-.oo-ui-indicator-down {
- background-image: /* @embed */ url(images/indicators/arrow-down.svg);
-}
-.oo-ui-indicator-next {
- background-image: /* @embed */ url(images/indicators/arrow-ltr.svg);
-}
-.oo-ui-indicator-previous {
- background-image: /* @embed */ url(images/indicators/arrow-rtl.svg);
-}
-.oo-ui-indicator-required {
- background-image: /* @embed */ url(images/indicators/required.svg);
-}
-.oo-ui-indicator-up {
- background-image: /* @embed */ url(images/indicators/arrow-up.svg);
-}
-.oo-ui-texture-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
- background-image: /* @embed */ url(images/textures/transparency.svg);
-}
diff --git a/resources/lib/oojs-ui/oojs-ui.svg.rtl.css b/resources/lib/oojs-ui/oojs-ui.svg.rtl.css
deleted file mode 100644
index 5a78d6b5..00000000
--- a/resources/lib/oojs-ui/oojs-ui.svg.rtl.css
+++ /dev/null
@@ -1,112 +0,0 @@
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-09-11T19:39:50Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-.oo-ui-icon-add-item {
- background-image: /* @embed */ url(images/icons/add-item.svg);
-}
-.oo-ui-icon-advanced {
- background-image: /* @embed */ url(images/icons/advanced.svg);
-}
-.oo-ui-icon-alert {
- background-image: /* @embed */ url(images/icons/alert.svg);
-}
-.oo-ui-icon-check {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-.oo-ui-icon-clear {
- background-image: /* @embed */ url(images/icons/clear.svg);
-}
-.oo-ui-icon-close {
- background-image: /* @embed */ url(images/icons/close.svg);
-}
-.oo-ui-icon-code {
- background-image: /* @embed */ url(images/icons/code.svg);
-}
-.oo-ui-icon-collapse {
- background-image: /* @embed */ url(images/icons/collapse.svg);
-}
-.oo-ui-icon-comment {
- background-image: /* @embed */ url(images/icons/comment.svg);
-}
-.oo-ui-icon-expand {
- background-image: /* @embed */ url(images/icons/expand.svg);
-}
-.oo-ui-icon-help {
- background-image: /* @embed */ url(images/icons/help.svg);
-}
-.oo-ui-icon-info {
- background-image: /* @embed */ url(images/icons/info.svg);
-}
-.oo-ui-icon-link {
- background-image: /* @embed */ url(images/icons/link.svg);
-}
-.oo-ui-icon-menu {
- background-image: /* @embed */ url(images/icons/menu.svg);
-}
-.oo-ui-icon-next {
- background-image: /* @embed */ url(images/icons/move-rtl.svg);
-}
-.oo-ui-icon-picture {
- background-image: /* @embed */ url(images/icons/picture.svg);
-}
-.oo-ui-icon-previous {
- background-image: /* @embed */ url(images/icons/move-ltr.svg);
-}
-.oo-ui-icon-redo {
- background-image: /* @embed */ url(images/icons/arched-arrow-rtl.svg);
-}
-.oo-ui-icon-remove {
- background-image: /* @embed */ url(images/icons/remove.svg);
-}
-.oo-ui-icon-search {
- background-image: /* @embed */ url(images/icons/search.svg);
-}
-.oo-ui-icon-settings {
- background-image: /* @embed */ url(images/icons/settings.svg);
-}
-.oo-ui-icon-tag {
- background-image: /* @embed */ url(images/icons/tag.svg);
-}
-.oo-ui-icon-undo {
- background-image: /* @embed */ url(images/icons/arched-arrow-ltr.svg);
-}
-.oo-ui-icon-window {
- background-image: /* @embed */ url(images/icons/window.svg);
-}
-.oo-ui-indicator-alert {
- background-image: /* @embed */ url(images/indicators/alert.svg);
-}
-.oo-ui-indicator-down {
- background-image: /* @embed */ url(images/indicators/arrow-down.svg);
-}
-.oo-ui-indicator-next {
- background-image: /* @embed */ url(images/indicators/arrow-rtl.svg);
-}
-.oo-ui-indicator-previous {
- background-image: /* @embed */ url(images/indicators/arrow-ltr.svg);
-}
-.oo-ui-indicator-required {
- background-image: /* @embed */ url(images/indicators/required.svg);
-}
-.oo-ui-indicator-up {
- background-image: /* @embed */ url(images/indicators/arrow-up.svg);
-}
-.oo-ui-texture-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
- background-image: /* @embed */ url(images/textures/transparency.svg);
-}
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png
new file mode 100644
index 00000000..c65a5c1e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg
new file mode 100644
index 00000000..0d37afab
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00AF89 }</style>
+ <g id="add">
+ <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png
new file mode 100644
index 00000000..d6144e3d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.svg
new file mode 100644
index 00000000..93a1c6ef
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="add">
+ <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png
new file mode 100644
index 00000000..730d1029
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.svg
new file mode 100644
index 00000000..29e5dba8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="add">
+ <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png
new file mode 100644
index 00000000..733c3f97
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg
new file mode 100644
index 00000000..fe3dc5b2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M20 14.5v-2.9l-1.8-.3c-.1-.4-.3-.8-.6-1.4l1.1-1.5-2.1-2.1-1.5 1.1c-.5-.3-1-.5-1.4-.6l-.2-1.8h-2.9l-.3 1.8c-.5.1-.9.3-1.4.6l-1.5-1.1-2.1 2.1 1 1.5c-.3.5-.4.9-.6 1.4l-1.7.2v2.9l1.8.3c.1.5.3.9.6 1.4l-1 1.5 2.1 2.1 1.5-1c.4.2.9.4 1.4.6l.3 1.8h3l.3-1.8c.5-.1.9-.3 1.4-.6l1.5 1.1 2.1-2.1-1.1-1.5c.3-.5.5-1 .6-1.4l1.5-.3zm-8 1.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png
new file mode 100644
index 00000000..7dab898d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg
new file mode 100644
index 00000000..b4629bf9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M20 14.5v-2.9l-1.8-.3c-.1-.4-.3-.8-.6-1.4l1.1-1.5-2.1-2.1-1.5 1.1c-.5-.3-1-.5-1.4-.6l-.2-1.8h-2.9l-.3 1.8c-.5.1-.9.3-1.4.6l-1.5-1.1-2.1 2.1 1 1.5c-.3.5-.4.9-.6 1.4l-1.7.2v2.9l1.8.3c.1.5.3.9.6 1.4l-1 1.5 2.1 2.1 1.5-1c.4.2.9.4 1.4.6l.3 1.8h3l.3-1.8c.5-.1.9-.3 1.4-.6l1.5 1.1 2.1-2.1-1.1-1.5c.3-.5.5-1 .6-1.4l1.5-.3zm-8 1.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png
new file mode 100644
index 00000000..5440113f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.svg
new file mode 100644
index 00000000..715a3f55
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="alert">
+ <path id="point" d="M11 16h2v2h-2z"/>
+ <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
+ <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png
new file mode 100644
index 00000000..fcf98c5d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.svg
new file mode 100644
index 00000000..6928cab4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FF5D00 }</style>
+ <g id="alert">
+ <path id="point" d="M11 16h2v2h-2z"/>
+ <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
+ <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png
new file mode 100644
index 00000000..e98a14a9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.svg
new file mode 100644
index 00000000..f0c65224
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="alert">
+ <path id="point" d="M11 16h2v2h-2z"/>
+ <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
+ <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png
new file mode 100644
index 00000000..92d231e2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.svg
new file mode 100644
index 00000000..887c2f66
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-center.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="align-center">
+ <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png
new file mode 100644
index 00000000..2880478c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.svg
new file mode 100644
index 00000000..ce9761e2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-left.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="align-float-left">
+ <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM13.5 9h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 12h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 15h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png
new file mode 100644
index 00000000..e9c2f0ea
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.svg
new file mode 100644
index 00000000..557692ae
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/align-float-right.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="align-float-right">
+ <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zM10.5 9h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 12h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 15h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 6h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 18h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
new file mode 100644
index 00000000..37b57fe5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg
new file mode 100644
index 00000000..9aca4158
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>
+<path d="M-472.8,494.7l6.3,5.7l-6.3,5.7v-3.8h-1.3c-3.2,0-6.3,1.3-7.6,3.8c0-4.7,2.8-7.6,7.9-7.6h0.9V494.7z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png
new file mode 100644
index 00000000..7d2113f2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg
new file mode 100644
index 00000000..049f21e2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<path d="M-472.8,494.7l6.3,5.7l-6.3,5.7v-3.8h-1.3c-3.2,0-6.3,1.3-7.6,3.8c0-4.7,2.8-7.6,7.9-7.6h0.9V494.7z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
new file mode 100644
index 00000000..a50b3066
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg
new file mode 100644
index 00000000..11fffcb2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>
+<path d="M-476.3,494.7l-6.3,5.7l6.3,5.7v-3.8h1.3c3.2,0,6.3,1.3,7.6,3.8c0-4.7-2.8-7.6-7.9-7.6h-0.9V494.7z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png
new file mode 100644
index 00000000..ed69a011
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg
new file mode 100644
index 00000000..20875f34
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<path d="M-476.3,494.7l-6.3,5.7l6.3,5.7v-3.8h1.3c3.2,0,6.3,1.3,7.6,3.8c0-4.7-2.8-7.6-7.9-7.6h-0.9V494.7z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png
new file mode 100644
index 00000000..8bef0a51
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.svg
new file mode 100644
index 00000000..b07621e8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M16 12h-10c-1.7 0-3 1.3-3 3h13v3l5-4.5-5-4.5v3z" id="path6"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png
new file mode 100644
index 00000000..26e3e69f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.svg
new file mode 100644
index 00000000..a0189283
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arrow-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M8 12h10c1.7 0 3 1.3 3 3h-13v3l-5-4.5 5-4.5v3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png
new file mode 100644
index 00000000..99dd6382
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.svg
new file mode 100644
index 00000000..b719946d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M12 10h4v-5h-4v5zm-5 2h9v-1h-9v1zm0 2h9v-1h-9v1zm0 2h9v-1h-9v1zm4-9h-4v1h4v-1zm0 2h-4v1h4v-1zm0-4h-4v1h4v-1zm-6-2h13v16h-10c-1.7 0-3-1.3-3-3v-13z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png
new file mode 100644
index 00000000..e5e47aa6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.svg
new file mode 100644
index 00000000..f14dfbda
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/article-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g16">
+ <path d="M11 10h-4v-5h4v5zm5 2h-9v-1h9v1zm0 2h-9v-1h9v1zm0 2h-9v-1h9v1zm-4-9h4v1h-4v-1zm0 2h4v1h-4v-1zm0-4h4v1h-4v-1zm6-2h-13v16h10c1.7 0 3-1.3 3-3v-13z" id="path18"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png
new file mode 100644
index 00000000..a7c76b80
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.svg
new file mode 100644
index 00000000..77119710
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <g>
+ <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
+ </g>
+ <path d="M17 14v-11h-13v13c0 1.7 1.3 3 3 3h5l-3-3h-3v-1h2.6l1-1h-3.6v-1h9v1h-2l1 1h2l1-1zm-11-9h4v1h-4v-1zm0 2h4v1h-4v-1zm0 2h4v1h-4v-1zm9 3h-9v-1h9v1zm-4-2v-5h4v5h-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png
new file mode 100644
index 00000000..314b8eb4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.svg
new file mode 100644
index 00000000..771b3ffb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleCheck-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g28">
+ <g id="g30">
+ <path d="M5 11l6 7 4-4 1 1-5 5-7-8z" id="path32"/>
+ </g>
+ <path d="M9 14v-11h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1h3.6v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4v-1zm0 2h-4v1h4v-1zm0 2h-4v1h4v-1zm-9 3h9v-1h-9v1zm4-2v-5h-4v5h4z" id="path34"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png
new file mode 100644
index 00000000..93f8624d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.svg
new file mode 100644
index 00000000..e54c0c4a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zm-4.2-5.2c.3-.4.6-.7 1-1h-5.8v-1h9s1.2 0 2 .6v-8.6h-13v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3h-3.8v-1h3.9l.3-1h-4.2v-1h4.8zm.2-8h4v5h-4v-5zm-5 0h4v1h-4v-1zm0 2h4v1h-4v-1zm0 2h4v1h-4v-1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png
new file mode 100644
index 00000000..7cf4ac86
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.svg
new file mode 100644
index 00000000..31134f1c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/articleSearch-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g44">
+ <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7-1.1-1.1 2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6v-8.6h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4v-5zm5 0h-4v1h4v-1zm0 2h-4v1h4v-1zm0 2h-4v1h4v-1z" id="path46"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png
new file mode 100644
index 00000000..948443fd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.svg
new file mode 100644
index 00000000..df08800f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bell.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M17.5 14v-5c0-3-2.3-5-5.5-5s-5.5 2-5.5 5v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zm-5.5 6h-3c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png
new file mode 100644
index 00000000..4450e690
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.svg
new file mode 100644
index 00000000..f419e79f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M17.8 14.7l1.7-4.7c1-2.8-.5-5.5-3.5-6.6s-5.9 0-6.9 2.8l-1.7 4.7c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zm-5.8 5.1l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png
new file mode 100644
index 00000000..b236b999
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.svg
new file mode 100644
index 00000000..e4c3a3fa
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bellOn-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6.209 14.7l-1.7-4.7c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z" id="path56"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png
new file mode 100644
index 00000000..ef3e20ad
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.svg
new file mode 100644
index 00000000..51a5c782
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/beta.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 12l-3-2-1 4-1-4-3 2 2-3-4-1 4-1-2-3 3 2 1-4 1 4 3-2-2 3 4 1-4 1 2 3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.png
new file mode 100644
index 00000000..f1e48aca
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.svg
new file mode 100644
index 00000000..a693b59b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/betaLaunch.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15.3 14.7c.8-3.8-.6-10.7-3.3-10.7-2.7 0-4.2 6.7-3.4 10.5l-1.6 3.5h2.7l.3 1h4c.2-.3.1-.5.3-1h2.7l-1.7-3.3zm-3.3-4.7c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png
new file mode 100644
index 00000000..b1c13a23
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.svg
new file mode 100644
index 00000000..94ec6704
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-ltr.svg
@@ -0,0 +1,7 @@
+<?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="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z" id="a"/>
+ <g id="up">
+ <path id="arrow" d="M15.5 9h7l-3.5-6z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png
new file mode 100644
index 00000000..052ae37f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.svg
new file mode 100644
index 00000000..b2a6c139
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bigger-rtl.svg
@@ -0,0 +1,7 @@
+<?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="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
+ <g id="up">
+ <path id="arrow" d="M1.5 9h7L5 3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png
new file mode 100644
index 00000000..3e919971
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg
new file mode 100644
index 00000000..c850e65b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-destructive.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
+ <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png
new file mode 100644
index 00000000..9529e5b0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.svg
new file mode 100644
index 00000000..289ef4fd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png
new file mode 100644
index 00000000..181daceb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.svg
new file mode 100644
index 00000000..0ddd1d47
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/block.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png
new file mode 100644
index 00000000..aeee727b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.svg
new file mode 100644
index 00000000..94089371
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g66">
+ <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4l5.6 5.6h4zm-13-7l-1 1 2.4 2.4c-.9 1.3-1.4 2.9-1.4 4.6 0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4l2.4 2.4 1-1-16-16zm3 9v-2h2l2 2h-4z" id="path68"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png
new file mode 100644
index 00000000..76e0db4b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.svg
new file mode 100644
index 00000000..3d9cfd7d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g66">
+ <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4l5.6 5.6h4zm-13-7l-1 1 2.4 2.4c-.9 1.3-1.4 2.9-1.4 4.6 0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4l2.4 2.4 1-1-16-16zm3 9v-2h2l2 2h-4z" id="path68"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png
new file mode 100644
index 00000000..46b680c4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.svg
new file mode 100644
index 00000000..ba48235d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g66">
+ <path d="M7 11v2h2l-3.6 3.6c-.9-1.3-1.4-2.9-1.4-4.6 0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4l-5.6 5.6h-4zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4l-2.4 2.4-1-1 16-16zm-3 9v-2h-2l-2 2h4z" id="path68"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png
new file mode 100644
index 00000000..e31809e5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.svg
new file mode 100644
index 00000000..8f807596
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/blockUndo-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g66">
+ <path d="M7 11v2h2l-3.6 3.6c-.9-1.3-1.4-2.9-1.4-4.6 0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4l-5.6 5.6h-4zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4l-2.4 2.4-1-1 16-16zm-3 9v-2h-2l-2 2h4z" id="path68"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png
new file mode 100644
index 00000000..86611e35
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.svg
new file mode 100644
index 00000000..4b828779
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-a.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-a">
+ <path d="M16 18h3l-5-12h-3l-5 12h3l1.25-3h4.5l1.25 3zm-4.917-5l1.417-3.4 1.417 3.4h-2.834z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png
new file mode 100644
index 00000000..871da471
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg
new file mode 100644
index 00000000..f96cebce
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-arab-ain">
+ <path id="arab-ain" d="M9.337 13.616c0 1.349 1.386 2.101 4.159 2.258l2.187-.029.318.044c-.03.127-.251.345-.665.652l-.089.066c-1.236.929-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.711-.99-.65-.66-.975-1.559-.975-2.698.005-1.354.566-2.573 1.684-3.658v-.044l-.606-.55c-.148-.181-.222-.391-.222-.63 0-.489.239-1.109.717-1.862.65-1.046 1.303-1.566 1.958-1.561.886.005 1.618.42 2.194 1.246.325.479-.03.552-1.064.22-.842-.327-1.527-.051-2.054.828l.015.073 1.123.865.052.007c1.404-.498 2.418-.74 3.043-.726-.059.117-.14.362-.244.733-.103.357-.204.684-.303.982l-.126.374-.384.051c-1.743.239-2.992.716-3.745 1.429-.463.464-.697.973-.702 1.525"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png
new file mode 100644
index 00000000..ad6f342f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg
new file mode 100644
index 00000000..f04c6aad
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-arab-dad">
+ <path id="arab-dad" d="M16.411 8.232l-1.676-.665.694-1.567 1.688.64-.707 1.592m.775 3.078c-.509-.286-1-.427-1.476-.423-.471 0-.982.205-1.532.616l-.506.379.006.025c1.084.066 1.934.099 2.551.099h.313c.567-.021.992-.064 1.276-.131-.067-.17-.275-.359-.625-.566h-.006m-6.803 3.296c-.017-.904-.329-1.87-.938-2.898l1.294-1.729.119.149c.267.336.504.924.713 1.766l.063.05c.496-.008.942-.17 1.338-.485v-.006l1.732-1.53c.679-.601 1.282-.902 1.807-.902.383.004.848.195 1.394.572.55.377.884.696 1 .958.063.149.094.386.094.709 0 .696-.11 1.229-.331 1.598-.192.311-.473.555-.844.734-.438.207-1.549.311-3.333.311-.8 0-1.795-.021-2.983-.062l-.144.429c-.254.672-.463 1.113-.625 1.324-.725.937-1.786 1.405-3.183 1.405-1.705-.008-2.557-.922-2.557-2.742.004-.941.279-1.814.825-2.618.15-.216.298-.367.444-.454.225-.133.288-.091.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png
new file mode 100644
index 00000000..c4af66e7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg
new file mode 100644
index 00000000..4dbec6d9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-armn-to">
+ <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.058.257-.15.367-.274.114-.13.205-.302.273-.516.073-.213.11-.48.11-.797V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.218.175.395.29.53.12.136.247.232.383.29.14.05.276.077.406.077m-2.97-7.84c-.37.082-.695.247-.976.45-.28.198-.505.47-.672.813-.16.343-.242.78-.242 1.312V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.348.49.738.64 1.17.15.433.226 1.094.226 1.61h1.353v2.04H17.78v1.6c0 .58-.103 1.092-.31 1.54-.21.442-.49.815-.845 1.117-.35.302-.834.53-1.297.687-.464.15-.953.226-1.47.226-.51 0-.996-.078-1.46-.234-.464-.156-.87-.39-1.22-.703-.348-.313-.626-.703-.835-1.172-.203-.473-.304-1.028-.304-1.663s.105-1.182.32-1.64c.213-.46.497-.685.85-.977.355-.297.76-.513 1.22-.648.458-.14.935-.21 1.43-.21h1.132c-.01-.49-.04-1.043-.242-1.36-.198-.323-.453-.58-.766-.766-.312-.193-.598-.332-.984-.426-.374-.09-.577-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png
new file mode 100644
index 00000000..b1c6955b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.svg
new file mode 100644
index 00000000..4f648203
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-b.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-b">
+ <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.011-1.975-1.989-3 2-.975 1.989-1.935 1.989-3 0-2-2-3-4-3h-6v12zm7-8c0 1.001 0 1-2 1h-2v-3h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png
new file mode 100644
index 00000000..dc310511
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg
new file mode 100644
index 00000000..279466d4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-cyrl-be">
+ <path id="cyrl-be" d="M7 6h9v2h-6v3h2.649c.893 0 1.633.109 2.22.327.588.218 1.088.622 1.502 1.211.419.589.629 1.187.629 1.978 0 .813-.21 1.398-.629 1.977-.419.578-.898.974-1.437 1.187-.533.213-1.295.319-2.286.319h-5.649m4.767-2c.751 0 1.279-.049 1.584-.12.305-.076.569-.246.792-.508.229-.262.343-.473.343-.855 0-.557-.199-.868-.596-1.119-.392-.256-1.064-.398-2.016-.398h-1.873v3"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png
new file mode 100644
index 00000000..6058d8f1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.svg
new file mode 100644
index 00000000..fdeeb6c5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-te.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-cyrl-te">
+ <path id="te" d="M11 18v-10h-4v-2h11v2h-4v10"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png
new file mode 100644
index 00000000..3084fef2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg
new file mode 100644
index 00000000..5996c813
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-cyrl-zhe">
+ <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.181.705-.447.168-.266.401-.873.698-1.821.39-1.241.789-2.033 1.197-2.374.403-.336 1.075-.504 2.014-.504l.386-.008v1.78l-.386-.008c-.399 0-.691.062-.878.187-.186.119-.337.304-.452.553-.115.249-.286.762-.512 1.537-.12.412-.25.756-.392 1.033-.137.276-.383.537-.738.78.439.157.8.466 1.084.927.288.455.603 1.103.944 1.943l1.33 3.268h-2.314l-1.17-3.081-.113-.252-.239-.561c-.248-.569-.452-.932-.612-1.089-.16-.157-.317-.236-.552-.236v5.22h-2v-5.22c-.226 0-.382.076-.546.228-.164.152-.368.518-.612 1.098l-.246.561-.113.252-1.17 3.081h-2.314l1.33-3.268c.328-.808.636-1.447.924-1.919.293-.477.663-.794 1.11-.951-.355-.244-.603-.501-.745-.772-.137-.276-.268-.623-.392-1.041-.222-.759-.39-1.266-.505-1.52-.111-.255-.261-.444-.452-.569-.186-.125-.492-.187-.917-.187l-.352.008v-1.78l.386.008c.953 0 1.631.171 2.034.512.399.347.791 1.136 1.177 2.366.301.954.534 1.564.698 1.829.168.26.377.406.705.439v-5.154"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png
new file mode 100644
index 00000000..e650eb60
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.svg
new file mode 100644
index 00000000..357d2e5d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-f.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-f">
+ <path id="f" d="M16 8v-2h-8v12h3v-5h4v-2h-4v-3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png
new file mode 100644
index 00000000..e30e1fea
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg
new file mode 100644
index 00000000..e032542e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-g">
+ <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.259-.941.359-1.896.538-2.864.538-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.257-2.282.77-3.222.513-.939 1.265-1.66 2.255-2.161.754-.385 1.693-.578 2.816-.578 1.46 0 2.6.303 3.418.91.824.602 1.353 1.435 1.589 2.501l-2.359.435c-.166-.57-.479-1.018-.939-1.346-.455-.332-1.024-.499-1.709-.499-1.038 0-1.864.325-2.479.974-.61.649-.915 1.612-.915 2.889 0 1.377.31 2.412.931 3.103.62.686 1.433 1.029 2.439 1.029.497 0 .995-.095 1.492-.285.503-.195 1.332-.571 1.691-.845v-.867"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png
new file mode 100644
index 00000000..814eff89
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.svg
new file mode 100644
index 00000000..b211bf7a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-geor-man.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-geor-man">
+ <path id="geor-man" d="M13.832 14.061c0-1.715-.394-2.573-1.182-2.573-.868 0-1.302.779-1.302 2.338-.01 1.624.421 2.436 1.295 2.436.793 0 1.189-.734 1.189-2.201m2.168 0c0 2.626-1.116 3.939-3.349 3.939-2.434 0-3.651-1.386-3.651-4.159 0-2.738 1.217-4.106 3.651-4.106.841 0 1.182.63 1.182.63v-1.579c0-.789-.449-1.184-1.347-1.184-.572 0-.858.374-.858 1.123h-2.341c.005-1.817 1.064-2.725 3.176-2.725 2.368 0 3.548.946 3.538 2.839"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png
new file mode 100644
index 00000000..ff021ce3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.svg
new file mode 100644
index 00000000..16797938
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-l.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-l">
+ <path id="l" d="M8 18v-12h3v10h5v2"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png
new file mode 100644
index 00000000..7ae9321b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.svg
new file mode 100644
index 00000000..73ad019a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-n.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-n">
+ <path id="n" d="M7 18v-12h3l4 8v-8h3v12h-3l-4-8v8h-3"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png
new file mode 100644
index 00000000..39c2be04
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.svg
new file mode 100644
index 00000000..146943a5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-v.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-v">
+ <path id="v" d="M10.5 18l-4.5-12h3l3 8 3-8h3l-4.5 12"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png
new file mode 100644
index 00000000..636d3bde
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.svg
new file mode 100644
index 00000000..7a058ed3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3h-6v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6v-13h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9c0-1.4 1.1-2.5 2.5-2.5h4.5v11z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png
new file mode 100644
index 00000000..87f91891
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.svg
new file mode 100644
index 00000000..6ae47ec5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/book-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2h-6v-13h6zm-5 12h5c1.7 0 2 .4 2 .4v-8.9c0-1.4-1.1-2.5-2.5-2.5h-4.5v11z" id="path78"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png
new file mode 100644
index 00000000..371dfc6c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.svg
new file mode 100644
index 00000000..d803d6be
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15 5h-7c-1.1 0-2 .9-2 2v3h3v11l4-3 4 3v-14c0-1.1-.9-2-2-2zm-6 4h-2v-2c0-.6.4-1 1-1h1v3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png
new file mode 100644
index 00000000..4a50c17d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.svg
new file mode 100644
index 00000000..744d0f4e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bookmark-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M8 5h7c1.1 0 2 .9 2 2v3h-3v11l-4-3-4 3v-14c0-1.1.9-2 2-2zm6 4h2v-2c0-.6-.4-1-1-1h-1v3z" id="path88"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png
new file mode 100644
index 00000000..80f1a476
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.svg
new file mode 100644
index 00000000..7bd04250
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M3 6v11c0 1.7 1.3 3 3 3h15v-14h-18zm2.5 1c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5.7-1.5 1.5-1.5zm14.5 12h-14c-1.1 0-2-.9-2-2v-6h16v8z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png
new file mode 100644
index 00000000..ea215df9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.svg
new file mode 100644
index 00000000..84b18dae
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/browser-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M21 6v11c0 1.7-1.3 3-3 3h-15v-14h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5 1.5-.7 1.5-1.5-.7-1.5-1.5-1.5zm-14.5 12h14c1.1 0 2-.9 2-2v-6h-16v8z" id="path98"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png
new file mode 100644
index 00000000..5668e127
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg
new file mode 100644
index 00000000..8a9d3d4d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="cancel">
+ <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png
new file mode 100644
index 00000000..51a33ff8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg
new file mode 100644
index 00000000..bfc1b44b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="cancel">
+ <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png
new file mode 100644
index 00000000..a42aaa5d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.svg
new file mode 100644
index 00000000..f31ec095
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 13.1l8.9 8.9c.8-.8.8-2 0-2.8l-6.1-6.1 6-6.1c.8-.8.8-2 0-2.8l-8.8 8.9z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png
new file mode 100644
index 00000000..9064f617
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.svg
new file mode 100644
index 00000000..02b4e387
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caret-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16.5 13.1l-8.9 8.9c-.8-.8-.8-2 0-2.8l6.1-6.1-6-6.1c-.8-.8-.8-2 0-2.8l8.8 8.9z" id="path108"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png
new file mode 100644
index 00000000..bc453ea5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.svg
new file mode 100644
index 00000000..a04ca572
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretDown.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 16l8.9-8.9c-.8-.8-2-.8-2.8 0l-6.1 6.1-6.1-6c-.8-.8-2-.8-2.8 0l8.9 8.8z" id="path4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png
new file mode 100644
index 00000000..55910950
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.svg
new file mode 100644
index 00000000..d0e0c283
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/caretUp.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 6.5l8.9 8.9c-.8.8-2 .8-2.8 0l-6.1-6.1-6.1 6c-.8.8-2 .8-2.8 0l8.9-8.8z" id="path4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png
new file mode 100644
index 00000000..e30bf2dd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg
new file mode 100644
index 00000000..824790c5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="regular-expression">
+ <path id="upper-case" d="M 7.53125,7 4,17 l 2.0625,0 0.71875,-2.40625 3.625,0 L 11.125,17 13.1875,17 9.65625,7 7.53125,7 z M 8.59375,8.53125 9.9375,13 7.25,13 8.59375,8.53125 z" />
+ <path id="lower-case" d="m 18.548697,17 -0.183254,-1.035072 -0.05451,0 c -0.349771,0.440361 -0.710892,0.746796 -1.083366,0.919307 -0.367941,0.167972 -0.849436,0.251959 -1.444489,0.251959 -0.564328,0 -0.954665,-0.20883 -1.377109,-0.626492 -0.417903,-0.417659 -0.626854,-1.012371 -0.626853,-1.784137 -1e-6,-0.80808 0.281628,-1.402791 0.844889,-1.784137 0.567801,-0.385878 1.193222,-0.607062 2.208372,-0.640111 l 1.321843,-0.04086 0,-0.333674 c 0,-0.771759 -0.395195,-1.15764 -1.185571,-1.157647 -0.608688,7e-6 -1.324118,0.183867 -2.146293,0.551584 L 14.134181,9.9184512 c 0.876685,-0.4585114 1.848761,-0.6877705 2.916233,-0.6877783 1.022038,7.8e-6 1.586855,0.2224573 2.131951,0.6673492 C 19.727448,10.342928 20,11.019356 20,11.927309 l 0,5.073215 -1.451303,0 m -0.394476,-3.527417 -0.804008,0.02724 c -0.604145,0.01816 -1.053844,0.127119 -1.349098,0.326866 -0.29526,0.199753 -0.442889,0.503919 -0.442886,0.912498 -3e-6,0.585634 0.336136,0.878451 1.008417,0.878449 0.481492,2e-6 0.865326,-0.138462 1.151503,-0.415391 0.29071,-0.276925 0.436067,-0.644648 0.436072,-1.103169 l 0,-0.626491" />
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png
new file mode 100644
index 00000000..875fa68c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg
new file mode 100644
index 00000000..e55233f3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-constructive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00AF89 }</style>
+ <g id="check">
+ <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png
new file mode 100644
index 00000000..83ba2b0f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.svg
new file mode 100644
index 00000000..77d90dca
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="check">
+ <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png
new file mode 100644
index 00000000..343d52f8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.svg
new file mode 100644
index 00000000..cd9e501a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-progressive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347BFF }</style>
+ <g id="check">
+ <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png
new file mode 100644
index 00000000..1ea326df
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.svg
new file mode 100644
index 00000000..cf7858ba
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="check">
+ <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png
new file mode 100644
index 00000000..0e0d9c24
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg
new file mode 100644
index 00000000..085e6677
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-constructive.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00AF89 }</style><circle cx="12" cy="12" r="6"></circle></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.png
new file mode 100644
index 00000000..82c327a4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.svg
new file mode 100644
index 00000000..f5285c73
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle-invert.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style><circle cx="12" cy="12" r="6"></circle></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.png
new file mode 100644
index 00000000..3bdc8e28
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.svg
new file mode 100644
index 00000000..436259e5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/circle.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><circle cx="12" cy="12" r="6"></circle></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.png
new file mode 100644
index 00000000..ae1621c5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.svg
new file mode 100644
index 00000000..28ba0cb5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M7 12h9v-1h-9v1zm0 2h9v-1h-9v1zm0 2h9v-1h-9v1zm4-9h-4v1h4v-1zm0 2h-4v1h4v-1zm0-4h-4v1h4v-1zm5-2h2v16h-10c-1.7 0-3-1.3-3-3v-13h8v7l1.5-2 1.5 2v-7z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png
new file mode 100644
index 00000000..4acaa0fb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.svg
new file mode 100644
index 00000000..7625307c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/citeArticle-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g128">
+ <path d="M16 12h-9v-1h9v1zm0 2h-9v-1h9v1zm0 2h-9v-1h9v1zm-4-9h4v1h-4v-1zm0 2h4v1h-4v-1zm0-4h4v1h-4v-1zm-5-2h-2v16h10c1.7 0 3-1.3 3-3v-13h-8v7l-1.5-2-1.5 2v-7z" id="path130"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png
new file mode 100644
index 00000000..b18e2e68
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg
new file mode 100644
index 00000000..55a26c97
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="clear">
+ <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png
new file mode 100644
index 00000000..e62c52cd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.svg
new file mode 100644
index 00000000..1cf72670
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clock.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 12l-4-3v-6h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png
new file mode 100644
index 00000000..6d8abc3b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg
new file mode 100644
index 00000000..ec44c925
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M18.4 8.1c.8-.8.8-2 0-2.8l-6.4 6.5-5.6-5.6-1.4 1.4 5.6 5.6-5 5c-.8.8-.8 2 0 2.8l6.4-6.4 5.6 5.6 1.4-1.4-5.6-5.6 5-5.1z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png
new file mode 100644
index 00000000..ea65697c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg
new file mode 100644
index 00000000..4f0f64ec
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M18.4 8.1c.8-.8.8-2 0-2.8l-6.4 6.5-5.6-5.6-1.4 1.4 5.6 5.6-5 5c-.8.8-.8 2 0 2.8l6.4-6.4 5.6 5.6 1.4-1.4-5.6-5.6 5-5.1z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png
new file mode 100644
index 00000000..004a5186
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg
new file mode 100644
index 00000000..b5ae392f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6 1.4 1.4-5.6 5.6 5 5c.8.8.8 2 0 2.8l-6.4-6.4-5.6 5.6-1.4-1.4 5.6-5.6-5-5.1z" id="path140"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png
new file mode 100644
index 00000000..1cb898d1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg
new file mode 100644
index 00000000..d9829d0e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6 1.4 1.4-5.6 5.6 5 5c.8.8.8 2 0 2.8l-6.4-6.4-5.6 5.6-1.4-1.4 5.6-5.6-5-5.1z" id="path140"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png
new file mode 100644
index 00000000..23c59835
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg
new file mode 100644
index 00000000..bc4ae943
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="code">
+ <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+ <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png
new file mode 100644
index 00000000..ee58c9a7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg
new file mode 100644
index 00000000..32f140d9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+ <g id="code">
+ <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+ <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png
new file mode 100644
index 00000000..a9d0d33b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.svg
new file mode 100644
index 00000000..451e0fee
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="collapse">
+ <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png
new file mode 100644
index 00000000..353ac798
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.svg
new file mode 100644
index 00000000..55aa8f8f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="collapse">
+ <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png
new file mode 100644
index 00000000..0ed3528e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.svg
new file mode 100644
index 00000000..b6152fe9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="comment">
+ <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png
new file mode 100644
index 00000000..265a3e41
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.svg
new file mode 100644
index 00000000..0ae7e63f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="comment">
+ <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png
new file mode 100644
index 00000000..07abcbe8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.svg
new file mode 100644
index 00000000..eb4c360d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16 5h-12v12c0 1.6 1.3 3 3 3h12v-12c0-1.7-1.4-3-3-3zm-8.5 12c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png
new file mode 100644
index 00000000..54c0af75
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.svg
new file mode 100644
index 00000000..e929fdb1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/die-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 5h12v12c0 1.6-1.3 3-3 3h-12v-12c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5z" id="path150"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png
new file mode 100644
index 00000000..9408199e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.svg
new file mode 100644
index 00000000..7bc1c228
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/downTriangle.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 18l8-10h-16z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png
new file mode 100644
index 00000000..b63ca2da
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.svg
new file mode 100644
index 00000000..d0d5bb5b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M16 11h-3v-7c-1.7 0-3 1.3-3 3v4h-3l4.5 5 4.5-5zm1 2v5h-10c-.6 0-1-.4-1-1v-4h-2v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png
new file mode 100644
index 00000000..457ef94f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.svg
new file mode 100644
index 00000000..9abb2ae4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/download-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g160">
+ <path d="M7 11h3v-7c1.7 0 3 1.3 3 3v4h3l-4.5 5-4.5-5zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3h-12v-7h2z" id="path162"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png
new file mode 100644
index 00000000..65b4c659
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.svg
new file mode 100644
index 00000000..add25a45
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="Layer_3">
+ <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png
new file mode 100644
index 00000000..ee2be2d8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.svg
new file mode 100644
index 00000000..bceb7c16
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr-progressive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347BFF }</style>
+ <g id="Layer_3">
+ <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png
new file mode 100644
index 00000000..afaddc5a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.svg
new file mode 100644
index 00000000..3972e070
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_3">
+ <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png
new file mode 100644
index 00000000..2b311a9c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.svg
new file mode 100644
index 00000000..339c8309
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="Layer_3">
+ <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png
new file mode 100644
index 00000000..8d36fa8a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.svg
new file mode 100644
index 00000000..d526fb4c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl-progressive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347BFF }</style>
+ <g id="Layer_3">
+ <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png
new file mode 100644
index 00000000..4750795c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.svg
new file mode 100644
index 00000000..978b2fd1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/edit-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_3">
+ <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png
new file mode 100644
index 00000000..fe073925
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.svg
new file mode 100644
index 00000000..30d10218
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="Layer_2">
+ <g id="g184">
+ <path d="M21 4v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-1.5 0h-3v-1s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zm-6.5 5.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9v-1.8l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png
new file mode 100644
index 00000000..966bfcbc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.svg
new file mode 100644
index 00000000..7e376824
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_2">
+ <g id="g184">
+ <path d="M21 4v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-1.5 0h-3v-1s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zm-6.5 5.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9v-1.8l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png
new file mode 100644
index 00000000..ff54699b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.svg
new file mode 100644
index 00000000..0e975b59
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="Layer_2">
+ <g id="g184">
+ <path d="M4 4v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm1.5 0h3v-1s0-1.5-1.5-1.5c-1.48.06-1.5 1.5-1.5 1.5zm6.5 5.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9v-1.8l9 9 1 5-5-1-8-8h3z" id="path186"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png
new file mode 100644
index 00000000..961abe69
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.svg
new file mode 100644
index 00000000..0b4751d2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_2">
+ <g id="g184">
+ <path d="M4 4v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm1.5 0h3v-1s0-1.5-1.5-1.5c-1.48.06-1.5 1.5-1.5 1.5zm6.5 5.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9v-1.8l9 9 1 5-5-1-8-8h3z" id="path186"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png
new file mode 100644
index 00000000..3952442e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.svg
new file mode 100644
index 00000000..cc8b61f6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr-invert.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g196">
+ <g id="g198">
+ <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3.5-6.8 1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
+ </g>
+ </g>
+ <g id="g204">
+ <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8h-1.8l-4.1 4.1-1 5 5-1 7.8-7.8-1.6-.1zm5.4-5.1c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png
new file mode 100644
index 00000000..fe8631ea
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.svg
new file mode 100644
index 00000000..f346874e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g196">
+ <g id="g198">
+ <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3.5-6.8 1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
+ </g>
+ </g>
+ <g id="g204">
+ <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8h-1.8l-4.1 4.1-1 5 5-1 7.8-7.8-1.6-.1zm5.4-5.1c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png
new file mode 100644
index 00000000..53469ce9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.svg
new file mode 100644
index 00000000..82018f0b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl-invert.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g196">
+ <g id="g198">
+ <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3-.5-6.8-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
+ </g>
+ </g>
+ <g id="g204">
+ <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8l4.1 4.1 1 5-5-1-7.8-7.8 1.6-.1zm-5.4-5.1c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3-.9 1.4-4-4c0-.3.1-.7.2-1h.2z" id="path206"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png
new file mode 100644
index 00000000..ca5596ee
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.svg
new file mode 100644
index 00000000..5b59d452
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/editUndo-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g196">
+ <g id="g198">
+ <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3-.5-6.8-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
+ </g>
+ </g>
+ <g id="g204">
+ <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8l4.1 4.1 1 5-5-1-7.8-7.8 1.6-.1zm-5.4-5.1c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3-.9 1.4-4-4c0-.3.1-.7.2-1h.2z" id="path206"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png
new file mode 100644
index 00000000..1c876e33
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.svg
new file mode 100644
index 00000000..510cf3d2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis-invert.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g>
+ <g>
+ <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ <g>
+ <path d="M14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ <g>
+ <path d="M20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png
new file mode 100644
index 00000000..1e4050c9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.svg
new file mode 100644
index 00000000..dd36a30d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ellipsis.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <g>
+ <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ <g>
+ <path d="M14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ <g>
+ <path d="M20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png
new file mode 100644
index 00000000..05f7138b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.svg
new file mode 100644
index 00000000..a3cadb48
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="expand">
+ <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png
new file mode 100644
index 00000000..9073d243
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.svg
new file mode 100644
index 00000000..7666b41d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="expand">
+ <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png
new file mode 100644
index 00000000..3be50ba0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg
new file mode 100644
index 00000000..c1bad9e6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+ <g id="external">
+ <path id="box" d="M2 2h3v1h-2v6h6v-2h1v3h-8z"/>
+ <path id="arrow" d="M6.211 2h3.789v3.789l-1.421-1.421-2.132 2.132-.947-.947 2.132-2.132z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png
new file mode 100644
index 00000000..10927e16
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg
new file mode 100644
index 00000000..827bc1b1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="external">
+ <path id="box" d="M2 2h3v1h-2v6h6v-2h1v3h-8z"/>
+ <path id="arrow" d="M6.211 2h3.789v3.789l-1.421-1.421-2.132 2.132-.947-.947 2.132-2.132z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png
new file mode 100644
index 00000000..eaeaf6ee
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg
new file mode 100644
index 00000000..f448c879
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+ <g id="external">
+ <path id="box" d="M7 3h2v6h-6v-2h-1v3h8v-8h-3z"/>
+ <path id="arrow" d="M2 5.789l1.421-1.421 2.132 2.132.947-.947-2.132-2.132 1.421-1.421h-3.789z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png
new file mode 100644
index 00000000..7a3454e9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg
new file mode 100644
index 00000000..c375ca0f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="external">
+ <path id="box" d="M7 3h2v6h-6v-2h-1v3h8v-8h-3z"/>
+ <path id="arrow" d="M2 5.789l1.421-1.421 2.132 2.132.947-.947-2.132-2.132 1.421-1.421h-3.789z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png
new file mode 100644
index 00000000..26accd8c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.svg
new file mode 100644
index 00000000..fa3bc3c1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eye.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M12 8c-5 0-11 6-11 6s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path6"/>
+ <circle cx="12" cy="14" r="2" id="circle8"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png
new file mode 100644
index 00000000..301bf8cb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.svg
new file mode 100644
index 00000000..fa1167df
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/eyeClosed.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6h-1.5c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png
new file mode 100644
index 00000000..4336892a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg
new file mode 100644
index 00000000..f8578cf8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="find">
+ <path id="magnifying-glass" d="m 13.65625,11 c -1.921,0 -3.5,1.54775 -3.5,3.46875 0,1.92 1.579,3.5 3.5,3.5 0.749,0 1.432,-0.25225 2,-0.65625 l 0.09375,0.15625 2.375,2.375 c 0.19,0.189 0.53425,0.15325 0.78125,-0.09375 0.247,-0.247 0.314,-0.59125 0.125,-0.78125 l -2.375,-2.375 L 16.46875,16.5 C 16.87175,15.934 17.125,15.21775 17.125,14.46875 17.124,12.54875 15.57525,11 13.65625,11 z m 0,1.65625 c 1.011306,0 1.8125,0.801194 1.8125,1.8125 0,1.011306 -0.801194,1.84375 -1.8125,1.84375 -1.011306,0 -1.84375,-0.832444 -1.84375,-1.84375 0,-1.011306 0.832444,-1.8125 1.84375,-1.8125 z" />
+ <path id="text" d="M 6,5 6,7 16,7 16,5 6,5 z m 0,3 0,2 11,0 0,-2 -11,0 z m 0,3 0,2 3.53125,0 c 0.2825289,-0.797203 0.786096,-1.486208 1.4375,-2 L 6,11 z m 0,3 0,2 3.53125,0 C 9.3537004,15.520243 9.25,15.010236 9.25,14.46875 9.25,14.309811 9.2962033,14.154621 9.3125,14 L 6,14 z" />
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png
new file mode 100644
index 00000000..f492c791
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg
new file mode 100644
index 00000000..2a1e9c6f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="find">
+ <path id="magnifying-glass" d="m 11.343828,11.000025 c 1.921,0 3.5,1.54775 3.5,3.46875 0,1.92 -1.579,3.5 -3.5,3.5 -0.749,0 -1.432,-0.25225 -2,-0.65625 l -0.09375,0.15625 -2.375,2.375 c -0.19,0.189 -0.53425,0.15325 -0.78125,-0.09375 -0.247,-0.247 -0.314,-0.59125 -0.125,-0.78125 l 2.375,-2.375 0.1875,-0.09375 c -0.403,-0.566 -0.65625,-1.28225 -0.65625,-2.03125 10e-4,-1.92 1.54975,-3.46875 3.46875,-3.46875 z m 0,1.65625 c -1.011306,0 -1.8125,0.801194 -1.8125,1.8125 0,1.011306 0.801194,1.84375 1.8125,1.84375 1.011306,0 1.84375,-0.832444 1.84375,-1.84375 0,-1.011306 -0.832444,-1.8125 -1.84375,-1.8125 z" />
+ <path id="text" d="M 19,5 19,7 9,7 9,5 z m 0,3 0,2 -11,0 0,-2 z m 0,3 0,2 -3.53125,0 c -0.282529,-0.797203 -0.786096,-1.486208 -1.4375,-2 z m 0,3 0,2 -3.53125,0 C 15.6463,15.520243 15.75,15.010236 15.75,14.46875 15.75,14.309811 15.703797,14.154621 15.6875,14 z" />
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png
new file mode 100644
index 00000000..b9ad2b8f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.svg
new file mode 100644
index 00000000..37ddb247
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z" id="path216"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png
new file mode 100644
index 00000000..63ceaafb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.svg
new file mode 100644
index 00000000..6e81d2bc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z" id="path216"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png
new file mode 100644
index 00000000..da059cfb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.svg
new file mode 100644
index 00000000..4875a443
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z" id="path216"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png
new file mode 100644
index 00000000..80835c0c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.svg
new file mode 100644
index 00000000..4b743aac
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flag-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z" id="path216"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png
new file mode 100644
index 00000000..fd7f2ae8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.svg
new file mode 100644
index 00000000..dcea1eb7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr-invert.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g2990">
+ <g id="Layer_1">
+ <path id="path227" d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z"/>
+ </g>
+ <g id="Layer_2">
+ <g id="g230">
+ <path id="path232" d="M17.997 1.989l.99.99-15.98 15.98-.99-.99z"/>
+ </g>
+ <g id="g234">
+ <path id="path236" d="M16.999 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png
new file mode 100644
index 00000000..fff89fe8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.svg
new file mode 100644
index 00000000..49cdb7a2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-ltr.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g2990">
+ <g id="Layer_1">
+ <path id="path227" d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z"/>
+ </g>
+ <g id="Layer_2">
+ <g id="g230">
+ <path id="path232" d="M17.997 1.989l.99.99-15.98 15.98-.99-.99z"/>
+ </g>
+ <g id="g234">
+ <path id="path236" d="M16.999 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png
new file mode 100644
index 00000000..1ae130d1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.svg
new file mode 100644
index 00000000..d6ffceaa
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl-invert.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g2990">
+ <g id="Layer_1">
+ <path id="path227" d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z"/>
+ </g>
+ <g id="Layer_2">
+ <g id="g230">
+ <path id="path232" d="M7.003 1.989l-.99.99 15.98 15.98.99-.99z"/>
+ </g>
+ <g id="g234">
+ <path id="path236" d="M8.001 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png
new file mode 100644
index 00000000..89674cc7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.svg
new file mode 100644
index 00000000..e470de42
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/flagUndo-rtl.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g2990">
+ <g id="Layer_1">
+ <path id="path227" d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z"/>
+ </g>
+ <g id="Layer_2">
+ <g id="g230">
+ <path id="path232" d="M7.003 1.989l-.99.99 15.98 15.98.99-.99z"/>
+ </g>
+ <g id="g234">
+ <path id="path236" d="M8.001 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png
new file mode 100644
index 00000000..163465e1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg
new file mode 100644
index 00000000..63e0b1aa
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M2 5v15h20v-15h-20zm15 11h-9c-.6 0-1-.4-1-1v-6h3l2 1h5v6z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png
new file mode 100644
index 00000000..4856f62c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg
new file mode 100644
index 00000000..25bec742
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M22 5v15h-20v-15h20zm-15 11h9c.6 0 1-.4 1-1v-6h-3l-2 1h-5v6z" id="path246"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png
new file mode 100644
index 00000000..df174d62
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.svg
new file mode 100644
index 00000000..191584eb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M11 13l-6-7h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.png
new file mode 100644
index 00000000..1204eb1e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.svg
new file mode 100644
index 00000000..45f2f642
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/funnel-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g256">
+ <path d="M14 13l6-7h-15l6 7v7c1.7 0 3-1.3 3-3v-4z" id="path258"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.png
new file mode 100644
index 00000000..0bd2124a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.svg
new file mode 100644
index 00000000..6433201a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/heart.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png
new file mode 100644
index 00000000..185c1a27
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg
new file mode 100644
index 00000000..3670661a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="help">
+ <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
+ <g id="question-mark">
+ <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+ <path id="bottom" d="M11 16h2v2h-2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png
new file mode 100644
index 00000000..b80df009
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg
new file mode 100644
index 00000000..bb2545c5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="help">
+ <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
+ <g id="question-mark">
+ <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+ <path id="bottom" d="M11 16h2v2h-2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png
new file mode 100644
index 00000000..dfb9c031
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg
new file mode 100644
index 00000000..203f8f9b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="help">
+ <path id="circle" d="M11.999 2.085c5.478 0 9.916 4.438 9.916 9.916 0 5.476-4.438 9.914-9.916 9.914-5.476 0-9.914-4.438-9.914-9.914 0-5.478 4.438-9.916 9.914-9.916zm-.001 18c4.465 0 8.084-3.619 8.084-8.083 0-4.465-3.619-8.084-8.084-8.084-4.464 0-8.083 3.619-8.083 8.084 0 4.464 3.619 8.083 8.083 8.083z"/>
+ <g id="question-mark">
+ <path id="top" d="M12.234 6.688c2.5 0 3.219 2.188 3.219 2.188l-1.411.854s-.298-.791-.901-1.229c-.516-.375-1.625-.625-2.219.125-.701.885.17 1.587 1.078 2.719.953 1.186 1 3.655 1 3.655h-1.969s-.135-2.318-1.041-3.381c-.603-.707-1.443-1.338-1.443-2.494 0-1.156 1.187-2.437 3.687-2.437z"/>
+ <path id="bottom" d="M13 16h-2v2h2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png
new file mode 100644
index 00000000..62f3d21a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg
new file mode 100644
index 00000000..99c7f842
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="help">
+ <path id="circle" d="M11.999 2.085c5.478 0 9.916 4.438 9.916 9.916 0 5.476-4.438 9.914-9.916 9.914-5.476 0-9.914-4.438-9.914-9.914 0-5.478 4.438-9.916 9.914-9.916zm-.001 18c4.465 0 8.084-3.619 8.084-8.083 0-4.465-3.619-8.084-8.084-8.084-4.464 0-8.083 3.619-8.083 8.084 0 4.464 3.619 8.083 8.083 8.083z"/>
+ <g id="question-mark">
+ <path id="top" d="M12.234 6.688c2.5 0 3.219 2.188 3.219 2.188l-1.411.854s-.298-.791-.901-1.229c-.516-.375-1.625-.625-2.219.125-.701.885.17 1.587 1.078 2.719.953 1.186 1 3.655 1 3.655h-1.969s-.135-2.318-1.041-3.381c-.603-.707-1.443-1.338-1.443-2.494 0-1.156 1.187-2.437 3.687-2.437z"/>
+ <path id="bottom" d="M13 16h-2v2h2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png
new file mode 100644
index 00000000..24d3e17f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg
new file mode 100644
index 00000000..fb613827
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="history">
+ <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
+ <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png
new file mode 100644
index 00000000..f5a7d36e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg
new file mode 100644
index 00000000..35f15afe
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="history">
+ <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
+ <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png
new file mode 100644
index 00000000..58bf5643
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg
new file mode 100644
index 00000000..bebe0a9e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20 18l-4-4-2 2-4-4-2 1-4 5h16zm2-13v15h-20v-15h20z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png
new file mode 100644
index 00000000..73ee31a3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.svg
new file mode 100644
index 00000000..88e0e3c0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/image-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g278">
+ <path d="M4 18l4-4 2 2 4-4 2 1 4 5h-16zm-2-13v15h20v-15h-20z" id="path280"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png
new file mode 100644
index 00000000..7ed8b7e7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.svg
new file mode 100644
index 00000000..300e4b15
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-ltr.svg
@@ -0,0 +1,7 @@
+<?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 12v-4h-4v-3h-13v15h20v-8h-3zm-15 6l4-5 2-1 4 4 2-2 4 4h-16z"/>
+ <g>
+ <path d="M24 5h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png
new file mode 100644
index 00000000..74b6ef39
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.svg
new file mode 100644
index 00000000..70e32486
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageAdd-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 12v-4h4v-3h13v15h-20v-8h3zm15 6l-4-5-2-1-4 4-2-2-4 4h16z" id="path290"/>
+ <g id="g292">
+ <path d="M0 5h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path294"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png
new file mode 100644
index 00000000..c636a8df
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.svg
new file mode 100644
index 00000000..8cec9f5a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19.5 4h-3v-1s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zm1.5 0v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-8 7v-6h-11v15h20v-9zm-9 7l4-5 2-1 4 4 2-2 4 4z" id="path304"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png
new file mode 100644
index 00000000..59439aa8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg
new file mode 100644
index 00000000..6bb78f71
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M4.5 4h3v-1s0-1.5-1.5-1.5c-1.5.06-1.5 1.5-1.5 1.5zm-1.5 0v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm8 7v-6h11v15h-20v-9zm9 7l-4-5-2-1-4 4-2-2-4 4z" id="path304"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.png
new file mode 100644
index 00000000..daf4257a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.svg
new file mode 100644
index 00000000..ada33959
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M10 8h9v2h-9v-2zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8h-18v-2h18v2zm0 14h-18v-2h18v2zm-18-12v8l5-4-5-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png
new file mode 100644
index 00000000..6ebe883d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.svg
new file mode 100644
index 00000000..9afedbbd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/indent-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g314">
+ <path d="M14 8h-9v2h9v-2zm0 3h-9v2h9v-2zm0 3h-6v2h6v-2zm-11-8h18v-2h-18v2zm0 14h18v-2h-18v2zm18-12v8l-5-4 5-4z" id="path316"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png
new file mode 100644
index 00000000..83b00a27
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.svg
new file mode 100644
index 00000000..04cd8890
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="info">
+ <path id="circled-i" d="M11.499 17c-3.036 0-5.499-2.464-5.499-5.5 0-3.037 2.462-5.5 5.499-5.5 3.037 0 5.501 2.462 5.501 5.5 0 3.036-2.464 5.5-5.501 5.5zm.002-12c-3.591 0-6.501 2.91-6.501 6.5s2.91 6.5 6.501 6.5c3.588 0 6.499-2.911 6.499-6.5s-2.911-6.5-6.499-6.5zM12 10v4h1v1h-3v-1h1v-3h-1v-1zM11 8h1v1h-1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png
new file mode 100644
index 00000000..eb0fb468
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.svg
new file mode 100644
index 00000000..4bdefd46
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="info">
+ <path id="circled-i" d="M11.499 17c-3.036 0-5.499-2.464-5.499-5.5 0-3.037 2.462-5.5 5.499-5.5 3.037 0 5.501 2.462 5.501 5.5 0 3.036-2.464 5.5-5.501 5.5zm.002-12c-3.591 0-6.501 2.91-6.501 6.5s2.91 6.5 6.501 6.5c3.588 0 6.499-2.911 6.499-6.5s-2.911-6.5-6.499-6.5zM12 10v4h1v1h-3v-1h1v-3h-1v-1zM11 8h1v1h-1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.png
new file mode 100644
index 00000000..97927a84
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.svg
new file mode 100644
index 00000000..0833f84f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/insert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="insert">
+ <path d="M13 5h-2v6h-6v2h6v6h2v-6h6v-2h-6z" id="plus"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png
new file mode 100644
index 00000000..a81e803d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.svg
new file mode 100644
index 00000000..a0e66bff
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-a.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-a">
+ <path id="a" d="M14.667 6h-1.372l-7 12h1.705l2.333-4h4l.667 4h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png
new file mode 100644
index 00000000..7cf774fa
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg
new file mode 100644
index 00000000..d4bff1be
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-arab-keheh-jeem">
+ <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.299-.774.712-.875 1.125-.064.263-.035.572.063.781.189.405.539.574.844.813l.094-.125.531.625c.14.164.343.513.469.938.137.463.08.725 0 1.125h-3.438c-.338 0-.592.007-.766-.02-.339-.053-.256-.208-.234-.34.332-.127.564-.173.938-.141.29-.494.593-.885.906-1.313-.98.037-1.878.015-2.688-.094-.346-.047-.698-.186-1.094-.156-.357.026-.768.239-1.031.719-.246.448-.434.839-.656 1.281l.75-.469c.23-.142.484-.227.719-.219.157.005.275.054.406.094-.231.205-.509.402-.719.563-.301.26-.702.688-.906 1-.403.615-.694 1.084-.875 1.781-.179.689.004 1.339.469 1.75.426.376.846.519 1.281.563.65.065 1.205.093 2-.188.657-.231 1.021-.553 1.5-.969-.883.11-1.817.089-2.531.031-.871-.07-1.268-.384-1.469-.594-.271-.283-.307-.64-.156-1.219.036-.141.097-.323.25-.531.168-.228.364-.435.594-.656.451-.436 1.011-.737 1.461-.938-.045.206-.107.443-.055.688.049.229.248.379.438.469.259.122.506.155.688.156 1.421.011 2.862 0 4.281 0 .247 0 .452-.163.594-.375.139-.208.249-.481.344-.844.131-.499.094-1.062-.094-1.625-.182-.543-.418-1.009-.719-1.406-.335-.443-.674-.829-1-1.219 1.257-.815 2.716-1.239 3.969-1.688.121-.452.224-.926.313-1.313zm-9.469 8.438c-.262.394-.584.691-.875 1 .375.286.748.556 1.094.813.335-.303.626-.674.875-.969-.39-.268-.771-.588-1.094-.844z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png
new file mode 100644
index 00000000..e8f2b620
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg
new file mode 100644
index 00000000..bfbc9bf5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-arab-meem">
+ <path id="arab-meem" d="M16 9.729l-.93 2.19h-4.663c-.479 0-.857.122-1.135.367l-.061.11c-.184 2.016-.502 3.558-.955 4.627-.272.641-.633 1.252-1.082 1.833-.177.226-.219.186-.126-.119l.142-.504.17-.669.234-.87.002-.009.202-1.045.258-1.411.353-1.906c.191-.312.424-.638.699-.98.276-.342.589-.706.94-1.09.129-.092.697-.18 1.705-.266 1.05-.086 1.638-.183 1.765-.293l.065-.128c.007-.11-.011-.241-.054-.394-.043-.153-.12-.327-.231-.522-.22-.428-.438-.641-.654-.641-.294 0-.915.269-1.864.806-.359.208-.376.125-.051-.247 1.558-1.71 2.708-2.566 3.45-2.566.383 0 .671.131.863.394.135.195.25.599.344 1.21l.203 1.2c.106.586.242.895.409.925"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png
new file mode 100644
index 00000000..4d4178ac
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg
new file mode 100644
index 00000000..63de0f6c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-armn-sha">
+ <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.586 6h1.724c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.324 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.038-.356-.057-.576-.057-.583 0-1.137.095-1.663.284-.524.19-1 .46-1.425.812-.42.35-.777.78-1.072 1.283-.294.504-.504 1.074-.63 1.71-.242 1.255-.152 2.21.268 2.868.426.652 1.19.978 2.294.978.55 0 1.045-.08 1.48-.237.437-.156.815-.377 1.136-.66.326-.29.59-.633.796-1.033.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.026-1.214 1.425-.488.394-1.053.7-1.694.922-.642.215-1.343.323-2.105.323-.767 0-1.434-.113-2-.34-.568-.225-1.025-.553-1.372-.984-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.567.697-1.066 1.144-1.496.445-.436.944-.794 1.496-1.072.55-.284 1.13-.475 1.733-.575l-.466-.23"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png
new file mode 100644
index 00000000..fc6133ca
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg
new file mode 100644
index 00000000..b468deac
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-c">
+ <path id="c" d="M15.008 13.718l1.481.214c-.468 1.34-1.15 2.354-2.046 3.04-.896.686-1.901 1.029-3.015 1.029-1.359 0-2.438-.43-3.237-1.29-.794-.86-1.191-2.092-1.191-3.697 0-2.09.606-3.818 1.817-5.185 1.079-1.219 2.42-1.828 4.023-1.828 1.186 0 2.145.33 2.878.989.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.839-.453-1.464-.916-1.876-.458-.417-1.051-.625-1.779-.625-1.369 0-2.476.631-3.321 1.892-.733 1.087-1.099 2.377-1.099 3.871 0 1.193.282 2.103.847 2.731.565.628 1.3.942 2.206.942.774 0 1.473-.261 2.099-.784.626-.522 1.081-1.261 1.366-2.216"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png
new file mode 100644
index 00000000..1711ef95
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg
new file mode 100644
index 00000000..92a834d9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-d">
+ <path id="d" d="M7 18l2.462-12h3.557c.853 0 1.505.063 1.955.188.644.169 1.194.472 1.65.909.456.431.799.971 1.03 1.621.231.649.346 1.378.346 2.186 0 .966-.145 1.847-.435 2.644-.284.791-.66 1.49-1.127 2.095-.461.6-.947 1.072-1.456 1.416-.504.338-1.102.589-1.794.753-.526.126-1.172.188-1.939.188h-4.249m1.859-1.359h1.867c.842 0 1.591-.079 2.245-.237.408-.098.756-.243 1.046-.434.381-.246.727-.57 1.038-.974.408-.535.732-1.143.974-1.825.247-.688.37-1.468.37-2.341 0-.971-.166-1.716-.499-2.235-.333-.524-.756-.87-1.271-1.04-.381-.126-.974-.188-1.778-.188h-1.85l-1.907 9.274"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png
new file mode 100644
index 00000000..f5b44d9e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.svg
new file mode 100644
index 00000000..66a5ef5d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-e">
+ <path id="e" d="M7 18l2.474-12h8.526l-.282 1.367h-6.947l-.75 3.633h6.09l-.282 1.367h-6.09l-.877 4.274h7.438l-.282 1.359h-9.018"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png
new file mode 100644
index 00000000..e728cd7b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg
new file mode 100644
index 00000000..3398904d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-geor-kan">
+ <path id="geor-kan" d="M15.057 14.663c-.441 2.225-1.834 3.337-4.178 3.337-1.919 0-2.879-.787-2.879-2.36 0-.298.036-.624.108-.977.083-.431.245-.836.488-1.217l1.241.605-.207.613c-.055.259-.083.497-.083.712 0 .972.521 1.458 1.564 1.458 1.307 0 2.101-.723 2.383-2.17l.058-.331c.044-.221.066-.425.066-.613 0-.928-.546-1.391-1.638-1.391h-1.117l.248-1.259h1.117c1.202-.005 1.908-.552 2.118-1.64.039-.182.058-.356.058-.522 0-1.143-.899-1.714-2.697-1.714l.232-1.193c2.708 0 4.062.875 4.062 2.625 0 .248-.028.516-.083.803-.204 1.093-1.051 1.825-2.54 2.195l-.033.166c1.23.199 1.845.823 1.845 1.872 0 .21-.025.433-.074.671l-.058.331"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png
new file mode 100644
index 00000000..3c6b3c1b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.svg
new file mode 100644
index 00000000..93bec5a6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-i.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-i">
+ <path id="i" d="M12.5 17.999l.249-.994h-1.5l2.509-10.037h1.5l.242-.967h-5l-.242.967h1.5l-2.509 10.037h-1.5l-.249.994z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png
new file mode 100644
index 00000000..4f87e9ae
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.svg
new file mode 100644
index 00000000..d4831549
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-k.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-k">
+ <path id="k" d="M12.018 10.652l4.982-4.652h-2l-5.309 5.234 1.309-5.234h-1.5l-3 12h1.5l1.173-4.693 1.54-1.438c.287 4.131 3.287 6.131 3.287 6.131h2s-4-2-3.982-7.348z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png
new file mode 100644
index 00000000..4fc10c50
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg
new file mode 100644
index 00000000..4f6364cb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-s">
+ <path id="s" d="M16.474 6.589l-.302 1.526c-.522-.279-1.041-.488-1.557-.628-.511-.145-1.007-.217-1.487-.217-.935 0-1.679.204-2.231.612-.553.408-.829.95-.829 1.627 0 .372.101.658.302.86.207.196.733.408 1.58.635l.937.232c1.059.274 1.795.622 2.208 1.046.413.418.62 1.007.62 1.766 0 1.167-.46 2.117-1.379 2.851-.914.733-2.12 1.1-3.618 1.1-.615 0-1.232-.062-1.852-.186-.62-.119-1.242-.302-1.867-.55l.318-1.611c.573.356 1.147.625 1.72.806.578.181 1.154.271 1.728.271.976 0 1.759-.217 2.347-.651.589-.434.883-.999.883-1.697 0-.465-.119-.816-.356-1.054-.232-.243-.736-.462-1.511-.658l-.937-.24c-1.069-.279-1.8-.599-2.192-.961-.387-.367-.581-.878-.581-1.534 0-1.152.442-2.094 1.325-2.828.888-.739 2.043-1.108 3.463-1.108.553 0 1.1.049 1.642.147.542.098 1.085.245 1.627.442"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png
new file mode 100644
index 00000000..b08c1d4b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.svg
new file mode 100644
index 00000000..c7e16033
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16 9v-1h-6v1h6zm-2 2v-1h-4v1h4zm-8-6h1v16h-1v-16zm2 0h10v13c0 1.7-1.3 3-3 3h-7v-16z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png
new file mode 100644
index 00000000..31dbb886
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg
new file mode 100644
index 00000000..2d16be37
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/journal-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M8 9v-1h6v1h-6zm2 2v-1h4v1h-4zm8-6h-1v16h1v-16zm-2 0h-10v13c0 1.7 1.3 3 3 3h7v-16z" id="path326"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png
new file mode 100644
index 00000000..ba9ce73d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.svg
new file mode 100644
index 00000000..8dfb89ae
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M14.5 4c-3 0-5.5 2.5-5.5 5.5 0 1 .3 1.9.7 2.8l-5.7 5.7v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5s-2.5-5.5-5.5-5.5zm1.5 5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png
new file mode 100644
index 00000000..65ed300a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.svg
new file mode 100644
index 00000000..06392874
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/key-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8l5.7 5.7v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5s2.5-5.5 5.5-5.5zm-1.5 5c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5z" id="path336"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png
new file mode 100644
index 00000000..7af24724
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.svg
new file mode 100644
index 00000000..ea5055c8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M3 7v9c0 1.7 1.3 3 3 3h15v-12h-18zm8 2h2v2h-2v-2zm0 3h2v2h-2v-2zm-3-3h2v2h-2v-2zm0 3h2v2h-2v-2zm-1 5h-1c-.6 0-1-.4-1-1v-1h2v2zm0-3h-2v-2h2v2zm0-3h-2v-2h2v2zm9 6h-8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2v-2h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2v-2h2v2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png
new file mode 100644
index 00000000..b6e9b6ed
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.svg
new file mode 100644
index 00000000..b35d108d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/keyboard-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g346">
+ <path d="M21 7v9c0 1.7-1.3 3-3 3h-15v-12h18zm-8 2h-2v2h2v-2zm0 3h-2v2h2v-2zm3-3h-2v2h2v-2zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2v-2h-2v2zm-9 6h8v-2h-8v2zm0-3h2v-2h-2v2zm0-3h2v-2h-2v2zm-3 6h2v-2h-2v2zm0-3h2v-2h-2v2zm0-3h2v-2h-2v2z" id="path348"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png
new file mode 100644
index 00000000..c864384e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg
new file mode 100644
index 00000000..081e49a1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="language">
+ <path id="japanese" d="M17.533 9.81l.271-.59 1.041.407-.18.363c.661.271 1.101.468 1.312.589.331.211.618.514.86.905.211.393.316.846.316 1.358 0 .786-.302 1.479-.905 2.083-.604.634-1.66 1.057-3.169 1.268-.121-.361-.258-.679-.408-.95.965-.151 1.645-.333 2.037-.545.454-.21.785-.481.998-.813.21-.303.314-.663.314-1.087 0-.482-.136-.905-.407-1.269-.331-.331-.8-.589-1.402-.77-.333.634-.649 1.117-.951 1.449-.242.332-.694.906-1.358 1.721.09.393.181.709.272.951l-1.042.362-.091-.498c-.423.361-.801.617-1.133.77-.361.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.301-.362-.68-.362-1.132 0-.604.136-1.147.407-1.63.241-.453.603-.89 1.086-1.313.272-.241.725-.528 1.359-.86 0-.271.03-.799.09-1.585-.514.03-.921.045-1.222.045-.393 0-.711-.015-.951-.045l-.046-1.041c.725.091 1.494.135 2.31.135 0-.149.075-.738.227-1.766l1.177.183c-.151.542-.256 1.041-.316 1.493.242-.029.543-.075.906-.136.362-.061.573-.091.634-.091s.648-.15 1.766-.453l.046 1.041c-.967.243-2.145.439-3.532.591-.062.663-.092 1.086-.092 1.266.663-.151 1.284-.225 1.857-.225zm-2.672 3.893c-.061-.481-.136-1.252-.227-2.31-.573.424-1.041.86-1.403 1.313-.303.423-.452.875-.452 1.358 0 .241.044.438.136.588.09.092.195.137.316.137.363.001.907-.361 1.63-1.086zm.771-2.763c0 .483.029 1.088.09 1.811.604-.905 1.057-1.599 1.359-2.082-.574.06-1.058.151-1.449.271z"/>
+ <path id="english" d="M9.497 15.981h1.851l-3.084-8.949h-1.85l-3.081 8.949h1.85l.557-1.981h3.209l.548 1.981zm-3.489-3.377l1.331-3.782 1.344 3.782h-2.675z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png
new file mode 100644
index 00000000..dac7b2cc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.svg
new file mode 100644
index 00000000..47e71b39
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="layout-ltr">
+ <path id="text" d="M5 19v-14h6v8h8v6h-14z"/>
+ <path id="float" d="M13 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png
new file mode 100644
index 00000000..470b7855
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.svg
new file mode 100644
index 00000000..fe9ee617
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/layout-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="layout-rtl">
+ <path id="text" d="M5 19v-6h8v-8h6v14h-14z"/>
+ <path id="float" d="M5 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png
new file mode 100644
index 00000000..1b1e2ed3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg
new file mode 100644
index 00000000..c98df5cf
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>
+<g>
+ <path d="M-471.2,493.6c-2.1,0-3.6,1.9-5.1,3.3c0.2,0,0.5-0.1,0.8-0.1c0.5,0,1,0.1,1.5,0.3c0.8-0.8,1.6-1.7,2.8-1.7
+ c0.6,0,1.3,0.3,1.8,0.7c1,1,1,2.6,0,3.6l-2.6,2.6c-0.4,0.4-1.2,0.7-1.8,0.7c-1.4,0-2.1-0.9-2.6-2l-1.3,1.3c0.8,1.5,2,2.6,3.8,2.6
+ c1.2,0,2.3-0.5,3-1.3l2.6-2.6c0.9-0.9,1.5-2,1.5-3.3C-467,495.5-469,493.6-471.2,493.6z M-475.5,505.7l-0.9,0.9
+ c-0.4,0.4-1.2,0.7-1.8,0.7c-0.6,0-1.3-0.3-1.8-0.7c-1-1-1-2.7,0-3.6l2.6-2.6c0.4-0.4,1.2-0.7,1.8-0.7c1.4,0,2.1,1,2.6,2l1.3-1.3
+ c-0.8-1.5-2-2.6-3.8-2.6c-1.2,0-2.3,0.5-3,1.3l-2.6,2.6c-1.7,1.7-1.7,4.4,0,6c1.6,1.6,4.4,1.7,5.9,0l1.9-1.9
+ c-0.3,0.1-0.6,0.1-0.9,0.1C-474.7,505.9-475.1,505.9-475.5,505.7z"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png
new file mode 100644
index 00000000..1fe66f1e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg
new file mode 100644
index 00000000..841ba7d4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<g>
+ <path d="M-471.2,493.6c-2.1,0-3.6,1.9-5.1,3.3c0.2,0,0.5-0.1,0.8-0.1c0.5,0,1,0.1,1.5,0.3c0.8-0.8,1.6-1.7,2.8-1.7
+ c0.6,0,1.3,0.3,1.8,0.7c1,1,1,2.6,0,3.6l-2.6,2.6c-0.4,0.4-1.2,0.7-1.8,0.7c-1.4,0-2.1-0.9-2.6-2l-1.3,1.3c0.8,1.5,2,2.6,3.8,2.6
+ c1.2,0,2.3-0.5,3-1.3l2.6-2.6c0.9-0.9,1.5-2,1.5-3.3C-467,495.5-469,493.6-471.2,493.6z M-475.5,505.7l-0.9,0.9
+ c-0.4,0.4-1.2,0.7-1.8,0.7c-0.6,0-1.3-0.3-1.8-0.7c-1-1-1-2.7,0-3.6l2.6-2.6c0.4-0.4,1.2-0.7,1.8-0.7c1.4,0,2.1,1,2.6,2l1.3-1.3
+ c-0.8-1.5-2-2.6-3.8-2.6c-1.2,0-2.3,0.5-3,1.3l-2.6,2.6c-1.7,1.7-1.7,4.4,0,6c1.6,1.6,4.4,1.7,5.9,0l1.9-1.9
+ c-0.3,0.1-0.6,0.1-0.9,0.1C-474.7,505.9-475.1,505.9-475.5,505.7z"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png
new file mode 100644
index 00000000..ead64bcc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.svg
new file mode 100644
index 00000000..91687845
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g358">
+ <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z" id="path360"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.png
new file mode 100644
index 00000000..024c2dbf
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.svg
new file mode 100644
index 00000000..d4c2fd66
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g358">
+ <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z" id="path360"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png
new file mode 100644
index 00000000..c73e1a14
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.svg
new file mode 100644
index 00000000..09a4ff5d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M21 7h-12v-2h12v2zm-14-1c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7h-12v-2h12v2zm-14-1c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7h-12v-2h12v2zm-14-1c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png
new file mode 100644
index 00000000..e586f02e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.svg
new file mode 100644
index 00000000..67b9dfee
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listBullet-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M3 7h12v-2h-12v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-14 7h12v-2h-12v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-14 7h12v-2h-12v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z" id="path370"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png
new file mode 100644
index 00000000..ab6dfe0d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.svg
new file mode 100644
index 00000000..87e8854e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M21 7h-13v-2h13v2zm0 6h-13v-2h13v2zm0 6h-13v-2h13v2zm-17-15h2v4h-1v-3h-1zm-1 6v-1h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png
new file mode 100644
index 00000000..b433b2c8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.svg
new file mode 100644
index 00000000..831a5fb9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/listNumbered-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M3 7h13v-2h-13zm0 6h13v-2h-13zm0 6h13v-2h-13zm15-15h2v4h-1v-3h-1zm0 6v-1h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z" id="path380"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png
new file mode 100644
index 00000000..16974b22
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.svg
new file mode 100644
index 00000000..934cb4e5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
+ <g id="g390">
+ <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png
new file mode 100644
index 00000000..082f2e94
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.svg
new file mode 100644
index 00000000..7aed0f67
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g390">
+ <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png
new file mode 100644
index 00000000..06a6afb5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.svg
new file mode 100644
index 00000000..59454922
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g390">
+ <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png
new file mode 100644
index 00000000..4bafac84
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.svg
new file mode 100644
index 00000000..64c23244
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
+ <g id="g390">
+ <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png
new file mode 100644
index 00000000..c5d842a5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.svg
new file mode 100644
index 00000000..63cb2ebb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g390">
+ <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png
new file mode 100644
index 00000000..15dd61e2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.svg
new file mode 100644
index 00000000..0591f661
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g390">
+ <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png
new file mode 100644
index 00000000..a08b6295
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.svg
new file mode 100644
index 00000000..4af765ca
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M15 14v3l5-4.5-5-4.5v3h-7c0 1.7 1.3 3 3 3h4zm-1-9h-10v15h10v-2h-8v-11h8v-2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png
new file mode 100644
index 00000000..135df451
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.svg
new file mode 100644
index 00000000..f72c04ad
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logOut-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g402">
+ <path d="M9 14v3l-5-4.5 5-4.5v3h7c0 1.7-1.3 3-3 3h-4zm1-9h10v15h-10v-2h8v-11h-8v-2z" id="path404"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png
new file mode 100644
index 00000000..7c2c123a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.svg
new file mode 100644
index 00000000..124b2101
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-cc.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M12 6c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 13c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm-1.7-4.6c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5zm4 0c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.png
new file mode 100644
index 00000000..df8600bd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.svg
new file mode 100644
index 00000000..079e1773
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikimediaCommons.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1v-.8l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1-1.5-1v.8h-1c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4c-1.5 1.4-2.5 3.5-2.5 5.8 0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
+ <circle cx="12" cy="15" r="3"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png
new file mode 100644
index 00000000..8629f29e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.svg
new file mode 100644
index 00000000..6672d9dc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/logo-wikipedia.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4l-2.6-5.5-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4l-4.3-10.1c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4-1.7-3.6c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png
new file mode 100644
index 00000000..3629f55f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.svg
new file mode 100644
index 00000000..0fc47737
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15 6l-6-2-6 2v15l6-2 6 2 6-2v-15l-6 2zm-6.3 12.1l-4.7 1.5v-12.9l5-1.7v12.9l-.3.2zm11.3.2l-5 1.7v-12.9l.3-.1 4.7-1.6v12.9z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png
new file mode 100644
index 00000000..5d1362fc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.svg
new file mode 100644
index 00000000..b33f1e39
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/map-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M9 6l6-2 6 2v15l-6-2-6 2-6-2v-15l6 2zm6.3 12.1l4.7 1.5v-12.9l-5-1.7v12.9l.3.2zm-11.3.2l5 1.7v-12.9l-.3-.1-4.7-1.6v12.9z" id="path424"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png
new file mode 100644
index 00000000..46b31a4e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.svg
new file mode 100644
index 00000000..f422c84f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPin.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19 12c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7l5.9 7.3 5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 4c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png
new file mode 100644
index 00000000..6d51b9ac
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.svg
new file mode 100644
index 00000000..9a54eb6a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g434">
+ <g id="g436">
+ <path d="M24 4h-4v-4h-2v4h-4v2h4v4h2v-4h4z" id="path438"/>
+ </g>
+ </g>
+ <path d="M18 11h-1v-3.9l-.1-.1h-3.9v-1.9c-.3-.1-.7-.1-1-.1-3.9 0-7 3.1-7 7 0 1.4.4 2.6 1.1 3.7l5.9 7.3 5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7 0-.3 0-.7-.1-1h-.9zm-6 5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path440"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png
new file mode 100644
index 00000000..b7797c40
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.svg
new file mode 100644
index 00000000..d3e152e0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapPinAdd-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g434">
+ <g id="g436">
+ <path d="M0 4h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path438"/>
+ </g>
+ </g>
+ <path d="M6 11h1v-3.9l.1-.1h3.9v-1.9c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7l-5.9 7.3-5.9-7.3c-.7-1.1-1.1-2.3-1.1-3.7 0-.3 0-.7.1-1h.9zm6 5c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4z" id="path440"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png
new file mode 100644
index 00000000..0246e4d3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg
new file mode 100644
index 00000000..61b8877f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve"><style>* { fill: #FFFFFF }</style>
+<g id="menu">
+ <path id="lines" d="M-481,505h12c0.6,0,1,0.4,1,1v1c0,0.6-0.4,1-1,1h-12c-0.6,0-1-0.4-1-1v-1C-482,505.4-481.6,505-481,505z
+ M-482,501v1c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,500-482,500.4-482,501z M-482,496v1
+ c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,495-482,495.4-482,496z"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png
new file mode 100644
index 00000000..de7b1d24
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg
new file mode 100644
index 00000000..89fd9789
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<g id="menu">
+ <path id="lines" d="M-481,505h12c0.6,0,1,0.4,1,1v1c0,0.6-0.4,1-1,1h-12c-0.6,0-1-0.4-1-1v-1C-482,505.4-481.6,505-481,505z
+ M-482,501v1c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,500-482,500.4-482,501z M-482,496v1
+ c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,495-482,495.4-482,496z"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png
new file mode 100644
index 00000000..279c61d1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.svg
new file mode 100644
index 00000000..3f308ff7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M21 9c0-1.7-1.3-3-3-3h-15v3l9 4 9-4zm-18 2v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png
new file mode 100644
index 00000000..c44dea05
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.svg
new file mode 100644
index 00000000..fa61aa18
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/message-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g450">
+ <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3h-15v-9l9 4 9-4z" id="path452"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png
new file mode 100644
index 00000000..7c9bdc1c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.svg
new file mode 100644
index 00000000..10f0c4e5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="move-ltr">
+ <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png
new file mode 100644
index 00000000..fc4cd390
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.svg
new file mode 100644
index 00000000..51e6611a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="move-ltr">
+ <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png
new file mode 100644
index 00000000..e97d37b9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg
new file mode 100644
index 00000000..002ec0f6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="move-rtl">
+ <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png
new file mode 100644
index 00000000..dbce05ec
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg
new file mode 100644
index 00000000..bcee09d9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="move-rtl">
+ <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png
new file mode 100644
index 00000000..7ba0ee93
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.svg
new file mode 100644
index 00000000..9063bd48
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M20 11l-4-3v2h-3v-3h2l-3-4-3 4h2v3h-3v-2l-4 3 4 3v-2h3v3h-2l3 4 3-4h-2v-3h3v2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png
new file mode 100644
index 00000000..ed7b930f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.svg
new file mode 100644
index 00000000..b8ea833e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M12 5l2.5 2.5-3.5 3.5c-1.2 1.2-1.2 2.8 0 4l5.5-5.5 2.5 2.5v-7h-7zm5 12h-9c-.6 0-1-.4-1-1v-9h3l-2-2h-3v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z" id="path6"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png
new file mode 100644
index 00000000..46567c77
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.svg
new file mode 100644
index 00000000..58a9eeb2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newWindow-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g462">
+ <path d="M12 5l-2.5 2.5 3.5 3.5c1.2 1.2 1.2 2.8 0 4l-5.5-5.5-2.5 2.5v-7h7zm-5 12h9c.6 0 1-.4 1-1v-9h-3l2-2h3v11c0 1.7-1.3 3-3 3h-11v-3l2-2v3z" id="path464"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png
new file mode 100644
index 00000000..d4b638a2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.svg
new file mode 100644
index 00000000..dad5f51c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="line_return">
+ <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3h-5.1v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png
new file mode 100644
index 00000000..20f5d0db
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.svg
new file mode 100644
index 00000000..fd758cc6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newline-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="line_return">
+ <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.png
new file mode 100644
index 00000000..056e7dd8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.svg
new file mode 100644
index 00000000..46471a33
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6 7v12c-.6 0-1-.4-1-1v-9h-1v9c0 1.1.9 2 2 2h15v-13h-15zm9 11h-7v-1h7v1zm0-2h-7v-1h7v1zm0-2h-7v-1h7v1zm4 4h-3v-5h3v5zm0-7h-11v-2h11v2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png
new file mode 100644
index 00000000..8221a093
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.svg
new file mode 100644
index 00000000..7564dff0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/newspaper-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19 7v12c.6 0 1-.4 1-1v-9h1v9c0 1.1-.9 2-2 2h-15v-13h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5h-3v5zm0-7h11v-2h-11v2z" id="path474"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png
new file mode 100644
index 00000000..8b15525d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.svg
new file mode 100644
index 00000000..601428e2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M16 14l2 2v-11h-4v2h2zm0 2l-7-7-2-2-1-1-1-1-3-3-1 1 2 2h-1v14h4v-2h-2v-10h1l2 2v10h4v-2h-2v-6l6 6h-1v2h3l4 4 1-1-4-4zm-5-9v-2h-4l2 2zm8-2v2h2v10h-2l2 2h2v-14z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png
new file mode 100644
index 00000000..f7bab384
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.svg
new file mode 100644
index 00000000..31785a3c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/noWikiText-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g484">
+ <path d="M8 14l-2 2v-11h4v2h-2zm0 2l7-7 2-2 1-1 1-1 3-3 1 1-2 2h1v14h-4v-2h2v-10h-1l-2 2v10h-4v-2h2v-6l-6 6h1v2h-3l-4 4-1-1 4-4zm5-9v-2h4l-2 2zm-8-2v2h-2v10h2l-2 2h-2v-14z" id="path486"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png
new file mode 100644
index 00000000..4ac336c4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.svg
new file mode 100644
index 00000000..4264ff08
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M10 8h9v2h-9v-2zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8h-18v-2h18v2zm0 14h-18v-2h18v2zm-18-8l5 4v-8l-5 4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png
new file mode 100644
index 00000000..68577dd0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.svg
new file mode 100644
index 00000000..2479343e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outdent-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g496">
+ <path d="M14 8h-9v2h9v-2zm0 3h-9v2h9v-2zm0 3h-6v2h6v-2zm-11-8h18v-2h-18v2zm0 14h18v-2h-18v2zm18-8l-5 4v-8l5 4z" id="path498"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png
new file mode 100644
index 00000000..a9a186b0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.svg
new file mode 100644
index 00000000..9c0ea598
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="outline-ltr">
+ <path id="text" d="M5 13h14v6h-14v-6z"/>
+ <path id="float" d="M5 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png
new file mode 100644
index 00000000..b7f025d8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.svg
new file mode 100644
index 00000000..2a3428e9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/outline-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="outline-rtl">
+ <path id="text" d="M19 19h-14v-6h14v6z"/>
+ <path id="float" d="M13 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png
new file mode 100644
index 00000000..38a90e22
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg
new file mode 100644
index 00000000..92fc07ed
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M2 3h18v2h-16v12h-2v-14zm13 13l-4-4-4 5h13l-3-3-2 2zm-10-10h17v13h-17v-13z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.png
new file mode 100644
index 00000000..bcb805d2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.svg
new file mode 100644
index 00000000..d989d3d4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/photoGallery-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g508">
+ <path d="M22 3h-18v2h16v12h2v-14zm-13 13l4-4 4 5h-13l3-3 2 2zm10-10h-17v13h17v-13z" id="path510"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png
new file mode 100644
index 00000000..d6dc62c4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.svg
new file mode 100644
index 00000000..55e0b7f1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="picture">
+ <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
+ <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
+ <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png
new file mode 100644
index 00000000..20434248
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg
new file mode 100644
index 00000000..7400bca9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="picture">
+ <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
+ <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
+ <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png
new file mode 100644
index 00000000..c5050e0b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.svg
new file mode 100644
index 00000000..5ce95636
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12v-8l6 4-6 4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png
new file mode 100644
index 00000000..1264e9f4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.svg
new file mode 100644
index 00000000..591a5d3a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/play-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g520">
+ <path d="M12 5c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12v-8l-6 4 6 4z" id="path522"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png
new file mode 100644
index 00000000..051ab1d2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.svg
new file mode 100644
index 00000000..baae35e9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M18 8h-1v-4h-10v4h-4v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zm-10-3h8v3h-8v-3zm8 14h-8v-6h8v6z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png
new file mode 100644
index 00000000..18e247d4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.svg
new file mode 100644
index 00000000..8294afd5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/printer-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6 8h1v-4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3h-10v-3h-4v-6c0-1.7 1.3-3 3-3zm10-3h-8v3h8v-3zm-8 14h8v-6h-8v6z" id="path532"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png
new file mode 100644
index 00000000..f6a9c860
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.svg
new file mode 100644
index 00000000..97b77bb4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M18 9.9c-.7 0-1.4.3-1.8.9v-4.8h-4c.2-.4.4-.8.4-1.2 0-1.2-1-2.2-2.2-2.2-1.3-.1-2.3.9-2.3 2.2 0 .4.2.8.4 1.2h-4.4v3.6l.6-.1c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5c-.2 0-.4 0-.6-.1v3.6h4.9c-.5.4-.9 1-.9 1.8 0 1.2 1 2.2 2.3 2.2 1.2 0 2.2-1 2.2-2.2 0-.7-.3-1.4-.9-1.8h4.5v-4.5c.4.5 1 .9 1.8.9 1.2 0 2.2-1 2.2-2.2 0-1.3-1-2.3-2.2-2.3z" id="path542"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png
new file mode 100644
index 00000000..03050e1c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.svg
new file mode 100644
index 00000000..0ad5f375
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/puzzle-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6.3 9.9c.7 0 1.4.3 1.8.9v-4.8h4c-.2-.4-.4-.8-.4-1.2 0-1.2 1-2.2 2.2-2.2 1.3-.1 2.3.9 2.3 2.2 0 .4-.2.8-.4 1.2h4.4v3.6l-.6-.1c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5c.2 0 .4 0 .6-.1v3.6h-4.9c.5.4.9 1 .9 1.8 0 1.2-1 2.2-2.3 2.2-1.2 0-2.2-1-2.2-2.2 0-.7.3-1.4.9-1.8h-4.5v-4.5c-.4.5-1 .9-1.8.9-1.2 0-2.2-1-2.2-2.2 0-1.3 1-2.3 2.2-2.3z" id="path542"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png
new file mode 100644
index 00000000..ffe3601d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg
new file mode 100644
index 00000000..b3b923e5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<g>
+ <path d="M-468.9,498.1c0.2-0.1,0.5-0.2,0.6-0.5s0.2-0.5,0.2-0.9V496c-1,0.2-1.5,0.2-2.6,0.6c-0.7,0.4-1.2,0.9-1.7,1.4
+ c-0.5,0.5-1.9,2.6-1.9,5.8v3.1h4.7c0.9,0,1.6-0.7,1.6-1.6v-4.7h-3.1c0,0,0.1-0.7,0.6-1.4C-470,498.7-469.5,498.3-468.9,498.1z
+ M-480.1,498c-0.5,0.5-1.9,2.9-1.9,6v2.9h4.7c0.9,0,1.6-0.7,1.6-1.6v-4.7h-3.1c0,0,0.1-0.7,0.6-1.4c0.5-0.5,1-0.9,1.6-1.2
+ c0.2-0.1,0.5-0.2,0.6-0.5s0.2-0.5,0.2-0.9V496c-1,0.2-1.5,0.2-2.6,0.6C-479,497-479.6,497.5-480.1,498z"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png
new file mode 100644
index 00000000..a2acf5e9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg
new file mode 100644
index 00000000..b40a8ac9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<g>
+ <path d="M-479.5,499.3c0.5,0.7,0.6,1.4,0.6,1.4h-3.1v4.7c0,0.9,0.7,1.6,1.6,1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8
+ c-0.5-0.5-1-1-1.7-1.4c-1.1-0.5-1.6-0.5-2.6-0.6v0.8c0,0.3,0.1,0.6,0.2,0.9s0.4,0.4,0.6,0.5C-480.5,498.3-480,498.7-479.5,499.3z
+ M-471.7,496.6c-1.1-0.5-1.6-0.5-2.6-0.6v0.8c0,0.3,0.1,0.6,0.2,0.9s0.4,0.4,0.6,0.5c0.6,0.2,1.2,0.6,1.6,1.2
+ c0.5,0.7,0.6,1.4,0.6,1.4h-3.1v4.7c0,0.9,0.7,1.6,1.6,1.6h4.7V504c0-3.1-1.5-5.4-1.9-6C-470.4,497.5-471,497-471.7,496.6z"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png
new file mode 100644
index 00000000..b04ec747
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.svg
new file mode 100644
index 00000000..24fca8f5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M3.5 8.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6.2-.3.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8zm15.5-3.6v-4h-2v4h-4v2h4v4h2v-4h4v-2zm-4 7s.1-.9.8-1.8l.2-.2v-2h-1.9l-.6.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4z" id="path6"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png
new file mode 100644
index 00000000..9e912026
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.svg
new file mode 100644
index 00000000..736f2a6d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotesAdd-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M20.5 8.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8zm-15.5-3.6v-4h2v4h4v2h-4v4h-2v-4h-4v-2zm4 7s-.1-.9-.8-1.8l-.2-.2v-2h1.9l.6.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4z" id="path6"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png
new file mode 100644
index 00000000..3bca20fe
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.svg
new file mode 100644
index 00000000..884d40df
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="create_redirect">
+ <g>
+ <path d="M17.7 2.4c-.3-.3-.7-.4-1.2-.4h-12.1v16.2c0 .5.1.8.4 1.1s.7.7 1.2.7h10.2c-.6-.2-1.2-.5-1.9-1-.4-.3-.8-.6-1.2-1l-.5-.6h-6.2v-1.4h5.4s-.4-1.5-.4-2h-5v-1h9v1c.4.1 1.1.1 1.5.1.4 0 .7 0 1.1-.1v-10.5c.1-.5-.1-.9-.3-1.1zm-5.2 1.6h3v4.5h-3v-4.5zm-6.1 0h4v1.6h-4v-1.6zm0 3h4v1.5h-4v-1.5zm0 3h9v1.5h-9v-1.5zm12.7 3.1l4.9 3.8-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.png
new file mode 100644
index 00000000..dc9b0e63
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.svg
new file mode 100644
index 00000000..a07e8364
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/redirect-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="create_redirect">
+ <g id="g3264">
+ <path d="M6.3 2.4c.3-.3.7-.4 1.2-.4h12.1v16.2c0 .5-.1.8-.4 1.1-.3.3-.7.7-1.2.7h-10.2c.6-.2 1.2-.5 1.9-1 .4-.3.8-.6 1.2-1l.5-.6h6.2v-1.4h-5.4s.4-1.5.4-2h5v-1h-9v1c-.4.1-1.1.1-1.5.1-.4 0-.7 0-1.1-.1v-10.5c-.1-.5.1-.9.3-1.1zm5.2 1.6h-3v4.5h3v-4.5zm6.1 0h-4v1.6h4v-1.6zm0 3h-4v1.5h4v-1.5zm0 3h-9v1.5h9v-1.5z" id="path3266"/>
+ <path d="M4.9 13.1l-4.9 3.8 4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3" id="path3268"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png
new file mode 100644
index 00000000..46439283
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg
new file mode 100644
index 00000000..7b672618
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="regular-expression">
+ <path id="left-bracket" d="m 3,12.044797 c -5e-7,-0.989171 0.150394,-1.914889 0.451184,-2.7771612 C 3.7558785,8.4053812 4.1933899,7.6495032 4.7637193,7 L 6.2286026,7 C 5.6778034,7.7204251 5.261777,8.511764 4.9805221,9.3740188 4.6992623,10.236291 4.5586337,11.122815 4.5586357,12.033598 c -2e-6,0.914522 0.1425798,1.799179 0.427746,2.653974 C 5.2754491,15.538635 5.6856161,16.309444 6.2168835,17 L 4.7637193,17 C 4.1894835,16.365435 3.7519721,15.624488 3.451184,14.777158 3.150394,13.929828 3,13.019042 3,12.044797" />
+ <path id="dot" d="m 10,16 c 0,0.552285 -0.4477153,1 -1,1 -0.5522847,0 -1,-0.447715 -1,-1 0,-0.552285 0.4477153,-1 1,-1 0.5522847,0 1,0.447715 1,1 z" />
+ <path id="star" d="m 14.250652,7.0127142 -0.240235,2.15625 2.185547,-0.609375 0.193359,1.4765618 -1.992187,0.140625 1.306641,1.740234 -1.330079,0.708985 -0.914062,-1.833985 -0.802734,1.822266 -1.382813,-0.697266 1.294922,-1.740234 -1.980469,-0.152343 0.228516,-1.4648438 2.138672,0.609375 -0.240235,-2.15625 1.535157,0" />
+ <path id="right-bracket" d="m 21,12.044797 c -3e-6,0.981711 -0.152351,1.896229 -0.457043,2.743558 C 20.241767,15.635686 19.806209,16.3729 19.235883,17 l -1.453164,0 c 0.527356,-0.686824 0.93557,-1.455766 1.224642,-2.306829 0.289069,-0.854795 0.433604,-1.741318 0.433606,-2.659573 -2e-6,-0.910783 -0.140631,-1.797307 -0.421886,-2.6595792 C 18.737821,8.511764 18.321795,7.7204251 17.771,7 l 1.464883,0 c 0.574232,0.653236 1.011744,1.4128466 1.312536,2.2788341 0.300785,0.8622719 0.45118,1.7842569 0.451183,2.7659629" />
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png
new file mode 100644
index 00000000..84e64984
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.svg
new file mode 100644
index 00000000..3551e582
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
+ <g id="remove">
+ <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png
new file mode 100644
index 00000000..3343de8b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.svg
new file mode 100644
index 00000000..ddc352fe
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="remove">
+ <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png
new file mode 100644
index 00000000..9dc34b8a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.svg
new file mode 100644
index 00000000..6ad79174
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="remove">
+ <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png
new file mode 100644
index 00000000..ebce3c0b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.svg
new file mode 100644
index 00000000..6e4979f8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/ribbonPrize.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_1">
+ <g>
+ <circle cx="11.5" cy="8.5" r="2.5"/>
+ <path d="M16.3 8.7l.7-.7-.8-.8.4-.8-1.1-.5.1-.9-1.2-.2-.1-.9-1.2.2-.4-.8-1.1.5-.6-.8-.8.8-.9-.4-.5 1.1-.9-.2-.2 1.2-.9.2.2 1.2-.9.4.5 1.1-.6.6.8.8-.4.8 1.1.5-.1.9 1.2.2.1.9 1.2-.2.4.8 1.1-.5.6.8.8-.8.8.4.5-1.1.9.1.2-1.2.9-.1-.2-1.2.8-.4-.4-1zm-4.8 3.3c-1.9 0-3.5-1.6-3.5-3.5s1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5-1.6 3.5-3.5 3.5zm.5 3l-.7-.7-1.1.6-.4-.7-.8.3v8.5l2.5-3 2.5 3v-8.5l-1-.5z"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png
new file mode 100644
index 00000000..4b6ecd2f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg
new file mode 100644
index 00000000..3d587833
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="search">
+ <path id="magnifying-glass" d="M 10.5,4 C 6.9101491,4 4,6.9101491 4,10.5 c 0,3.589851 2.9101491,6.5 6.5,6.5 1.02211,0 1.983324,-0.235899 2.84375,-0.65625 L 16,19 c 1.4,1.4 2.5,1.5 4,0 L 15.5625,14.5625 C 16.462737,13.447115 17,12.044969 17,10.5 17,6.9101491 14.089851,4 10.5,4 z m 0,2 C 12.985281,6 15,8.0147186 15,10.5 15,12.985281 12.985281,15 10.5,15 8.0147186,15 6,12.985281 6,10.5 6,8.0147186 8.0147186,6 10.5,6 z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png
new file mode 100644
index 00000000..c10dc664
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg
new file mode 100644
index 00000000..cdcbc30d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="search">
+ <path id="magnifying-glass" d="M 10.5,4 C 6.9101491,4 4,6.9101491 4,10.5 c 0,3.589851 2.9101491,6.5 6.5,6.5 1.02211,0 1.983324,-0.235899 2.84375,-0.65625 L 16,19 c 1.4,1.4 2.5,1.5 4,0 L 15.5625,14.5625 C 16.462737,13.447115 17,12.044969 17,10.5 17,6.9101491 14.089851,4 10.5,4 z m 0,2 C 12.985281,6 15,8.0147186 15,10.5 15,12.985281 12.985281,15 10.5,15 8.0147186,15 6,12.985281 6,10.5 6,8.0147186 8.0147186,6 10.5,6 z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png
new file mode 100644
index 00000000..7868dc11
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg
new file mode 100644
index 00000000..91130f08
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="search">
+ <path id="magnifying-glass" d="m 13.5,4 c 3.589851,0 6.5,2.9101491 6.5,6.5 0,3.589851 -2.910149,6.5 -6.5,6.5 -1.02211,0 -1.983324,-0.235899 -2.84375,-0.65625 L 8,19 C 6.6,20.4 5.5,20.5 4,19 L 8.4375,14.5625 C 7.537263,13.447115 7,12.044969 7,10.5 7,6.9101491 9.910149,4 13.5,4 z m 0,2 C 11.014719,6 9,8.0147186 9,10.5 9,12.985281 11.014719,15 13.5,15 15.985281,15 18,12.985281 18,10.5 18,8.0147186 15.985281,6 13.5,6 z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png
new file mode 100644
index 00000000..dab4ff14
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg
new file mode 100644
index 00000000..c6753493
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="search">
+ <path id="magnifying-glass" d="m 13.5,4 c 3.589851,0 6.5,2.9101491 6.5,6.5 0,3.589851 -2.910149,6.5 -6.5,6.5 -1.02211,0 -1.983324,-0.235899 -2.84375,-0.65625 L 8,19 C 6.6,20.4 5.5,20.5 4,19 L 8.4375,14.5625 C 7.537263,13.447115 7,12.044969 7,10.5 7,6.9101491 9.910149,4 13.5,4 z m 0,2 C 11.014719,6 9,8.0147186 9,10.5 9,12.985281 11.014719,15 13.5,15 15.985281,15 18,12.985281 18,10.5 18,8.0147186 15.985281,6 13.5,6 z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png
new file mode 100644
index 00000000..0e9a5c57
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg
new file mode 100644
index 00000000..2aeba4ea
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+ <g id="secure">
+ <path id="lock" d="M8 5h.019v-.997c.001-.057.004-1.409-.832-2.255-.434-.438-.998-.66-1.679-.66s-1.245.222-1.678.659c-.837.847-.833 2.199-.832 2.251v1.002h.002c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1v-3c0-.553-.447-1-1-1zm-4.002 0v-1.007c0-.01.005-.999.543-1.543.482-.485 1.449-.487 1.932-.002.544.546.546 1.536.546 1.55v1.002h-3.021z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png
new file mode 100644
index 00000000..918b3d7b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg
new file mode 100644
index 00000000..a9c7d276
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="secure">
+ <path id="lock" d="M8 5h.019v-.997c.001-.057.004-1.409-.832-2.255-.434-.438-.998-.66-1.679-.66s-1.245.222-1.678.659c-.837.847-.833 2.199-.832 2.251v1.002h.002c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1v-3c0-.553-.447-1-1-1zm-4.002 0v-1.007c0-.01.005-.999.543-1.543.482-.485 1.449-.487 1.932-.002.544.546.546 1.536.546 1.55v1.002h-3.021z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png
new file mode 100644
index 00000000..17b4379c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.svg
new file mode 100644
index 00000000..c6eba159
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="settings">
+ <path id="gear" d="M3 4h3v2h-3zM12 4h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 11h9v2h-9zM18 11h3v2h-3zM14 10h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2h-6zM15 18h6v2h-6zM11 17h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png
new file mode 100644
index 00000000..dd2706b4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.svg
new file mode 100644
index 00000000..bcd665ee
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="settings">
+ <path id="gear" d="M3 4h3v2h-3zM12 4h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 11h9v2h-9zM18 11h3v2h-3zM14 10h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2h-6zM15 18h6v2h-6zM11 17h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.png
new file mode 100644
index 00000000..30e88db9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.svg
new file mode 100644
index 00000000..0d495049
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M0 20h24v1h-24v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1h1.4c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png
new file mode 100644
index 00000000..3d9fb230
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.svg
new file mode 100644
index 00000000..6c0ae5e0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/signature-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M24 20h-24v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zm-15.6 3.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1h-1.4c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z" id="path576"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png
new file mode 100644
index 00000000..7181e6d4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.svg
new file mode 100644
index 00000000..e8b427b1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-ltr.svg
@@ -0,0 +1,7 @@
+<?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 id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+ <g id="down">
+ <path id="arrow" d="M22 3l-3.5 6L15 3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.png
new file mode 100644
index 00000000..cc539f0e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.svg
new file mode 100644
index 00000000..e5e95196
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smaller-rtl.svg
@@ -0,0 +1,7 @@
+<?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 id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+ <g id="down">
+ <path id="arrow" d="M9 3L5.5 9 2 3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png
new file mode 100644
index 00000000..51ccb89c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg
new file mode 100644
index 00000000..4d601281
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="special-character">
+ <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.311.366-.531.808-.66 1.327-.128.513-.192 1.08-.192 1.699 0 .513.058 1 .174 1.46.122.46.311.87.568 1.23.629.863 1.155 1.139 2.011 1.363l.247 3.035h-5v-3h.605l.531 1.354.394.053.605.044.751.035.456.009h.66l-.092-.894c-.629-.094-.811-.268-1.336-.522-.525-.26-.98-.59-1.365-.991-.379-.401-.675-.867-.889-1.398-.214-.537-.321-1.13-.321-1.779 0-.82.131-1.537.394-2.15.269-.619.656-1.133 1.163-1.54.507-.407 1.133-.711 1.878-.912.745-.206 1.6-.31 2.565-.31.959 0 1.811.103 2.556.31.751.201 1.38.504 1.887.912.507.407.892.92 1.154 1.54.269.614.403 1.33.403 2.15 0 .649-.107 1.242-.321 1.779-.214.531-.513.997-.898 1.398-.379.401-.831.732-1.356.991-.525.254-.707.428-1.336.522l-.092.894h.66l.447-.009.751-.035.605-.044.403-.053.531-1.354h.605v3h-5l.247-3.035c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.619-.064-1.186-.192-1.699-.128-.519-.348-.962-.66-1.327-.311-.372-.73-.661-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png
new file mode 100644
index 00000000..902d5482
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.svg
new file mode 100644
index 00000000..f3fb8b31
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M19 20h-17l3-3v-11h17v11c0 1.7-1.3 3-3 3z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png
new file mode 100644
index 00000000..133ef1d6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.svg
new file mode 100644
index 00000000..fd9b7bd9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubble-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g586">
+ <path d="M5 20h17l-3-3v-11h-17v11c0 1.7 1.3 3 3 3z" id="path588"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png
new file mode 100644
index 00000000..53e3f2cb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg
new file mode 100644
index 00000000..333c1e86
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M19 20h-17l3-3v-11h17v11c0 1.7-1.3 3-3 3z"/>
+ </g>
+ <path fill="#fff" d="M13 9h1v7h-1zm-3 3h7v1h-7z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.png
new file mode 100644
index 00000000..ef78b5ec
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg
new file mode 100644
index 00000000..4e6313f1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g598">
+ <path d="M5 20h17l-3-3v-11h-17v11c0 1.7 1.3 3 3 3z" id="path600"/>
+ </g>
+ <path d="M11 9h-1v7h1zm3 3h-7v1h7z" id="path602" fill="#fff"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png
new file mode 100644
index 00000000..ed649b84
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.svg
new file mode 100644
index 00000000..c4b4a2f7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20 9v9l2 2h-14v-11h12zm-17-5h12v4h-8v7h-6l2-2v-9z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png
new file mode 100644
index 00000000..fa3bd324
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.svg
new file mode 100644
index 00000000..c452fbbd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/speechBubbles-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g612">
+ <path d="M3 9v9l-2 2h14v-11h-12zm17-5h-12v4h8v7h6l-2-2v-9z" id="path614"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.png
new file mode 100644
index 00000000..445f2d45
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.svg
new file mode 100644
index 00000000..f58e8ce5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5 1.9-3.6m0-3.4l-2.8 5.6-6.2.9 4.5 4.4-1.1 6.1 5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9-2.7-5.5z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png
new file mode 100644
index 00000000..046bbf7e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.svg
new file mode 100644
index 00000000..ea8c26c6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/star.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5 1.9-3.6m0-3.4l-2.8 5.6-6.2.9 4.5 4.4-1.1 6.1 5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9-2.7-5.5z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png
new file mode 100644
index 00000000..b7e20ef6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.svg
new file mode 100644
index 00000000..7bd06331
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stop.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 6c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7m0-1c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-3 5h6v6h-6z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png
new file mode 100644
index 00000000..cab7a980
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.svg
new file mode 100644
index 00000000..480189f5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-a.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="strikethrough-a">
+ <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
+ <path id="a" d="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png
new file mode 100644
index 00000000..8aafe3f6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg
new file mode 100644
index 00000000..d57b652f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="strikethrough-s">
+ <path id="strikethrough" d="M6 12h12v1h-12v-1z"/>
+ <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .889.221 1.602.719 2.13.498.528 1.279.91 2.312 1.14l.812.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.531 1.26-.358.291-.894.45-1.625.45-.477 0-.969-.074-1.469-.24-.502-.166-1.031-.417-1.562-.75l-.375-.238v2.158l.156.062c.58.237 1.143.417 1.688.54.549.121 1.07.18 1.562.18 1.286 0 2.297-.293 3-.9.709-.605 1.062-1.486 1.062-2.608 0-.943-.256-1.726-.781-2.312-.521-.592-1.305-1-2.344-1.229l-.812-.181c-.716-.148-1.204-.352-1.406-.539-.205-.203-.312-.485-.312-.935 0-.533.162-.899.5-1.17.342-.271.836-.42 1.531-.42.395 0 .818.052 1.25.181.433.127.908.333 1.406.6l.375.18v-2.041s-1.188-.383-1.688-.479c-.499-.098-.984-.151-1.468-.151z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png
new file mode 100644
index 00000000..a0065cbb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.svg
new file mode 100644
index 00000000..8409dc15
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-y.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="strikethrough-y">
+ <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
+ <path id="a" d="M7 6h1.724l3.288 4.935 3.264-4.935h1.724l-4.194 6.285v5.715h-1.612v-5.715l-4.194-6.285"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png
new file mode 100644
index 00000000..35e68374
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg
new file mode 100644
index 00000000..4fbd4ecd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M4 9h12v2h-12v-2zm0 3h8v2h-8v-2zm0-7h16v3h-16v-3zm16 14h-16v-3h16v3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png
new file mode 100644
index 00000000..093b1a93
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.svg
new file mode 100644
index 00000000..acacc362
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M4 9h12v2h-12v-2zm0 3h8v2h-8v-2zm0-7h16v3h-16v-3zm16 14h-16v-3h16v3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png
new file mode 100644
index 00000000..2ae83c7d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.svg
new file mode 100644
index 00000000..b18ddc46
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M20 9h-12v2h12v-2zm0 3h-8v2h8v-2zm0-7h-16v3h16v-3zm-16 14h16v-3h-16v3z" id="path624"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png
new file mode 100644
index 00000000..e8aea5e2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.svg
new file mode 100644
index 00000000..c38a283f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeFlow-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M20 9h-12v2h12v-2zm0 3h-8v2h8v-2zm0-7h-16v3h16v-3zm-16 14h16v-3h-16v3z" id="path624"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png
new file mode 100644
index 00000000..b9444904
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.svg
new file mode 100644
index 00000000..47eff5dd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu-invert.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g>
+ <path d="M20 19h-16v-2h16v2z"/>
+ </g>
+ <g>
+ <path d="M20 15h-16v-2h16v2z"/>
+ </g>
+ <g>
+ <path d="M20 11h-16v-2h16v2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png
new file mode 100644
index 00000000..a49eaefc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.svg
new file mode 100644
index 00000000..47e70d74
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSideMenu.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20 19h-16v-2h16v2z"/>
+ </g>
+ <g>
+ <path d="M20 15h-16v-2h16v2z"/>
+ </g>
+ <g>
+ <path d="M20 11h-16v-2h16v2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png
new file mode 100644
index 00000000..88d26c24
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg
new file mode 100644
index 00000000..d694cb15
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g>
+ <path d="M20 11h-16v-2h16v2zm-16 1h8v2h-8v-2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png
new file mode 100644
index 00000000..2c1e230d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.svg
new file mode 100644
index 00000000..7f8822bc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20 11h-16v-2h16v2zm-16 1h8v2h-8v-2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png
new file mode 100644
index 00000000..279d80a2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.svg
new file mode 100644
index 00000000..86a52ee8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g654">
+ <path d="M4 11h16v-2h-16v2zm16 1h-8v2h8v-2z" id="path656"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png
new file mode 100644
index 00000000..5ce176cc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.svg
new file mode 100644
index 00000000..fcb10bad
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeSummary-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g654">
+ <path d="M4 11h16v-2h-16v2zm16 1h-8v2h8v-2z" id="path656"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png
new file mode 100644
index 00000000..57ac8b74
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.svg
new file mode 100644
index 00000000..d2e9786e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g>
+ <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png
new file mode 100644
index 00000000..5d9fca8a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg
new file mode 100644
index 00000000..be303204
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr-progressive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347BFF }</style>
+ <g>
+ <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png
new file mode 100644
index 00000000..533a915d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.svg
new file mode 100644
index 00000000..76c80d20
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png
new file mode 100644
index 00000000..72d49068
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.svg
new file mode 100644
index 00000000..6266319d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g666">
+ <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png
new file mode 100644
index 00000000..a51e389c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.svg
new file mode 100644
index 00000000..c5847b1f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl-progressive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347BFF }</style>
+ <g id="g666">
+ <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png
new file mode 100644
index 00000000..282c6527
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.svg
new file mode 100644
index 00000000..308c2e62
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/stripeToC-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g666">
+ <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png
new file mode 100644
index 00000000..f8b8766c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.svg
new file mode 100644
index 00000000..b7507daf
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-ltr.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+ <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.png
new file mode 100644
index 00000000..f01e11db
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.svg
new file mode 100644
index 00000000..9fe5325f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/subscript-rtl.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+ <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png
new file mode 100644
index 00000000..1f829c1b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.svg
new file mode 100644
index 00000000..f1b7caf3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-ltr.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9s-.5.4-.8.4h-2v-1.3zm-6.2-5v-3.2c.3 0 .6.1.9.4s.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zm-11.6-12.2c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2h-3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zm1.8 5.6l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
+ <circle cx="12" cy="11" r="4"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png
new file mode 100644
index 00000000..1e6f362f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.svg
new file mode 100644
index 00000000..a625fb90
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/sun-rtl.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M5.9 5.1c0 .3.1.6.3.9l1.4 1.4.9-.8-2.2-2.2c-.3.1-.4.4-.4.7zm.5 5.3h-3.2c0 .3.1.6.4.9.3.3.5.4.8.4h2v-1.3zm6.2-5v-3.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zm-6.4 11.7c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zm11.6-12.2c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zm-1.8 5.6l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z" id="path678"/>
+ <circle cx="12" cy="11" r="4" id="circle680" transform="matrix(-1 0 0 1 24 0)"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.png
new file mode 100644
index 00000000..69fe6e7a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.svg
new file mode 100644
index 00000000..39f30a76
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-ltr.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+ <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.png
new file mode 100644
index 00000000..eac3d1d7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.svg
new file mode 100644
index 00000000..eabab21c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/superscript-rtl.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+ <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.png
new file mode 100644
index 00000000..1389d3d8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.svg
new file mode 100644
index 00000000..15bb06a6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-caption.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-caption">
+ <path id="caption" d="M6 6h12v3H6z"/>
+ <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png
new file mode 100644
index 00000000..dfd5e512
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.svg
new file mode 100644
index 00000000..798ee4a1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-column-ltr">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 5,5 2,0 0,14 -2,0 z"
+ id="column" />
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png
new file mode 100644
index 00000000..1354a882
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.svg
new file mode 100644
index 00000000..dfa33a08
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-column-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-column-rtl">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 17,5 2,0 0,14 -2,0 z"
+ id="column" />
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png
new file mode 100644
index 00000000..3d8091e8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.svg
new file mode 100644
index 00000000..91d06644
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-after.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-row-after">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 5,17 14,0 0,2 -14,0 z"
+ id="row" />
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png
new file mode 100644
index 00000000..e357f90e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.svg
new file mode 100644
index 00000000..4b71f2a8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-insert-row-before.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-row-before">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 5,5 14,0 0,2 -14,0 z"
+ id="row" />
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png
new file mode 100644
index 00000000..202a1209
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.svg
new file mode 100644
index 00000000..6a8b77d8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table-merge-cells.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-merge-cells">
+ <g id="merge-cell-left">
+ <path id="cell-border" d="m 4,7 0,9 7,0 0,-3 -1,0.834 L 10,15 5,15 5,8 10,8 10,9.167 11,10 11,7 z" />
+ <path id="arrow" d="m 8,9 0,2 -2,0 0,1 2,0 0,2 3,-2.5 z" />
+ </g>
+ <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1,0,0,1,24,0)" />
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png
new file mode 100644
index 00000000..fb6b985b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.svg
new file mode 100644
index 00000000..1ba8c440
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/table.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+
+ <g id="table-insert">
+ <path id="table" d="M4 5v13h16v-13zm2 2h5v4h-5zm7 0h5v4h-5zm-7 5h5v4h-5zm7 0h5v4h-5z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png
new file mode 100644
index 00000000..66af3753
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
new file mode 100644
index 00000000..82171db6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00AF89 }</style>
+ <g id="tag">
+ <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png
new file mode 100644
index 00000000..1de90d48
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg
new file mode 100644
index 00000000..3d485128
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
+ <g id="tag">
+ <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png
new file mode 100644
index 00000000..c2334293
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg
new file mode 100644
index 00000000..e5734295
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="tag">
+ <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png
new file mode 100644
index 00000000..a6759e21
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg
new file mode 100644
index 00000000..f52e06ce
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347BFF }</style>
+ <g id="tag">
+ <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png
new file mode 100644
index 00000000..77fc366a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg
new file mode 100644
index 00000000..337adb63
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FF5D00 }</style>
+ <g id="tag">
+ <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png
new file mode 100644
index 00000000..8e100fcb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg
new file mode 100644
index 00000000..534824c8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="tag">
+ <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png
new file mode 100644
index 00000000..dd52d120
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.svg
new file mode 100644
index 00000000..6b594b29
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M24 6h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+ </g>
+ <path d="M19 13v7h-16c-1.1 0-2-.9-2-2v-11h12v-1h-13v12c0 1.7 1.3 3 3 3h17v-8h-1z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png
new file mode 100644
index 00000000..08b1613c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.svg
new file mode 100644
index 00000000..36b25a3e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/templateAdd-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g690">
+ <path d="M0 6h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path692"/>
+ </g>
+ <path d="M5 13v7h16c1.1 0 2-.9 2-2v-11h-12v-1h13v12c0 1.7-1.3 3-3 3h-17v-8h1z" id="path694"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png
new file mode 100644
index 00000000..ffd190a1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.svg
new file mode 100644
index 00000000..62526a03
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-lefttoright.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="text-dir-ltr">
+ <path d="M7 7h-2v-1h2l.469.5.531-.5h2v1h-2v10h2v1h-2l-.5-.531-.5.531h-2v-1h2zM13.976 16v-2h-2.976v-4h2.976v-1.956l6.024 3.978z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png
new file mode 100644
index 00000000..214f8d14
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.svg
new file mode 100644
index 00000000..913bbfd6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-dir-righttoleft.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="text-dir-rtl">
+ <path d="M17 17h2v1h-2l-.469-.5-.531.5h-2v-1h2v-10h-2v-1h2l.5.531.5-.531h2v1h-2zM10.024 8v2h2.976v4h-2.976v1.956l-6.024-3.978z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png
new file mode 100644
index 00000000..4484496f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg
new file mode 100644
index 00000000..0198c355
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="text-style">
+ <path id="a" d="M15.296 18h2.789l-1.14-12h-2.789l-8.156 12h2.789l2.039-3h4.183l.285 3zm-3.109-5l2.311-3.4.323 3.4h-2.634z"/>
+ <path id="underline" d="M6 19h12v1h-12v-1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.png
new file mode 100644
index 00000000..10254613
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.svg
new file mode 100644
index 00000000..7740e43e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M11.1 13.1c-1.8-2.1-2.7-4.3-3-5.1h4.7l.7-2h-5.5v-3h-2v3h-5v2h5c-.2.9-1.3 4.8-5.1 7.6l1.2 1.6c2.7-2 4.3-4.5 5.1-6.4.7 1.3 1.7 3 3.2 4.5l.7-2.2zm1.4 6.9l1.3-4h5.3l1.3 4h2.2l-4.6-14h-3l-4.7 14h2.2zm4-12l2 6h-4l2-6z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png
new file mode 100644
index 00000000..17f543ca
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.svg
new file mode 100644
index 00000000..c78e6222
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/translation-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12.4 13.1c1.8-2.1 2.7-4.3 3-5.1h-4.7l-.7-2h5.5v-3h2v3h5v2h-5c.2.9 1.3 4.8 5.1 7.6l-1.2 1.6c-2.7-2-4.3-4.5-5.1-6.4-.7 1.3-1.7 3-3.2 4.5l-.7-2.2zm-1.4 6.9l-1.3-4h-5.3l-1.3 4h-2.2l4.6-14h3l4.7 14h-2.2zm-4-12l-2 6h4l-2-6z" id="path704"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png
new file mode 100644
index 00000000..d730765d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.svg
new file mode 100644
index 00000000..baa31f6c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2h-12zm1 1h10l-1 11h-8z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png
new file mode 100644
index 00000000..dfee886c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.svg
new file mode 100644
index 00000000..f5914312
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trash.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2h-12zm1 1h10l-1 11h-8z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png
new file mode 100644
index 00000000..bc977a77
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.svg
new file mode 100644
index 00000000..20cd2991
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g>
+ <path d="M20.5 20.5l-15.5-15.5-1 1 3 3 1 11h8l.2-1.8 3.3 3.3zm-3.5-11.5h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1h-2l2 2h8z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png
new file mode 100644
index 00000000..594836ec
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.svg
new file mode 100644
index 00000000..0731f056
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20.5 20.5l-15.5-15.5-1 1 3 3 1 11h8l.2-1.8 3.3 3.3zm-3.5-11.5h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1h-2l2 2h8z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png
new file mode 100644
index 00000000..162d9a92
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.svg
new file mode 100644
index 00000000..aebedec7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="g714">
+ <path d="M4 20.5l15.5-15.5 1 1-3 3-1 11h-8l-.2-1.8-3.3 3.3zm3.5-11.5h6l-5.5 5.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png
new file mode 100644
index 00000000..182e56d9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.svg
new file mode 100644
index 00000000..2a92cbef
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/trashUndo-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g714">
+ <path d="M4 20.5l15.5-15.5 1 1-3 3-1 11h-8l-.2-1.8-3.3 3.3zm3.5-11.5h6l-5.5 5.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png
new file mode 100644
index 00000000..b4c13665
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.svg
new file mode 100644
index 00000000..97fcdc4c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
+ <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png
new file mode 100644
index 00000000..3a0bc75b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.svg
new file mode 100644
index 00000000..b496a065
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png
new file mode 100644
index 00000000..8f261a88
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.svg
new file mode 100644
index 00000000..66c024a9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png
new file mode 100644
index 00000000..03d91f22
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.svg
new file mode 100644
index 00000000..a52f0fe3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
+ <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png
new file mode 100644
index 00000000..b8233255
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.svg
new file mode 100644
index 00000000..814af1dd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png
new file mode 100644
index 00000000..e683c521
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.svg
new file mode 100644
index 00000000..07cecbfe
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.png
new file mode 100644
index 00000000..03a56873
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.svg
new file mode 100644
index 00000000..b66ce2a8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png
new file mode 100644
index 00000000..bdb1c4fe
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.svg
new file mode 100644
index 00000000..724d1901
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/unStar.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png
new file mode 100644
index 00000000..81713bdd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.svg
new file mode 100644
index 00000000..dd6dde36
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="underline-a">
+ <path id="a" d="M14.424 16h2.076l-3.463-10h-2.077l-3.46 10h2.077l.627-2h3.604l.616 2zm-3.921-3.623l1.496-4.379 1.511 4.379h-3z"/>
+ <path id="underline" d="M7 17h10v1h-10v-1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png
new file mode 100644
index 00000000..c4eb2a21
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg
new file mode 100644
index 00000000..fbd7c147
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="underline-u">
+ <path id="u" d="M8 6h2v5.959c-.104 1.707.695 2.002 2 2.041 1.777.062 2.002-.879 2-2.041v-5.959h2v6.123c0 1.279-.338 2.245-1.016 2.898-.672.651-1.666.979-2.98.979-1.32 0-2.319-.326-2.996-.979-.672-.653-1.008-1.619-1.008-2.898v-6.123"/>
+ <path id="underline" d="M7 17h10v1h-10v-1z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png
new file mode 100644
index 00000000..1b655891
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.svg
new file mode 100644
index 00000000..9e5e72f6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upTriangle.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 8l8 10h-16z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png
new file mode 100644
index 00000000..fa2da24e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.svg
new file mode 100644
index 00000000..18879e32
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M10 13c0 1.7 1.3 3 3 3v-7h3l-4.5-5-4.5 5h3v4zm7 0v5h-10c-.6 0-1-.4-1-1v-4h-2v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png
new file mode 100644
index 00000000..1ac6106a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.svg
new file mode 100644
index 00000000..7a3535ba
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/upload-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g736">
+ <path d="M13 13c0 1.7-1.3 3-3 3v-7h-3l4.5-5 4.5 5h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3h-12v-7h2z" id="path738"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png
new file mode 100644
index 00000000..bc94f180
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.svg
new file mode 100644
index 00000000..5dcc3179
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16 5h-12v12c0 1.7 1.3 3 3 3h12v-12c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2.5-1.2 1.2-1.2zm-5 0c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png
new file mode 100644
index 00000000..6fb01ceb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.svg
new file mode 100644
index 00000000..a5e4dc95
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userActive-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 5h12v12c0 1.7-1.3 3-3 3h-12v-12c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2-.5-1.2-1.2-1.2zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z" id="path748"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png
new file mode 100644
index 00000000..3c3fb473
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.svg
new file mode 100644
index 00000000..e9687fa6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userAvatar.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <g id="g6">
+ <path d="M11.5 13c1.7 0 3.5-2 3.5-5 0-.1 0-4-3.5-4s-3.5 3.9-3.5 4c0 3 1.8 5 3.5 5zm3.5-1c-.4.7-1.7 2-3.5 2s-3.2-1.3-3.5-2h-2c-1.1 0-2 .9-2 2v6h15v-6c0-1.1-.9-2-2-2h-2z" id="path8"/>
+ </g>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png
new file mode 100644
index 00000000..7e4cfd1a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.svg
new file mode 100644
index 00000000..bb5b0968
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16 5h-12v12c0 1.7 1.3 3 3 3h12v-12c0-1.7-1.3-3-3-3zm-9.3 5.4c-.5-.4-.7-.8-.7-1.4.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6-.7-.8-.7-1.4c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png
new file mode 100644
index 00000000..d71a08b8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.svg
new file mode 100644
index 00000000..4a9fd0d7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userInactive-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 5h12v12c0 1.7-1.3 3-3 3h-12v-12c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9s-1.9-.3-2.5-.9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9s-1.9-.3-2.5-.9c0 .6.2 1 .7 1.4z" id="path758"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png
new file mode 100644
index 00000000..952410a8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.svg
new file mode 100644
index 00000000..f516539c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3v-11h-17zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z" id="path6"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png
new file mode 100644
index 00000000..1a0983d1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.svg
new file mode 100644
index 00000000..8963fafc
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/userTalk-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19 6v11l3 3h-17c-1.7 0-3-1.3-3-3v-11h17zm-11.2 2.5c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zm-2.7 8.5c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z" id="path770"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png
new file mode 100644
index 00000000..8e0abb0d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.svg
new file mode 100644
index 00000000..ed1913ab
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact-invert.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="viewCompact">
+ <circle cx="6" cy="6" r="2"/>
+ <circle cx="12" cy="6" r="2"/>
+ <circle cx="18" cy="6" r="2"/>
+ <circle cx="6" cy="12" r="2"/>
+ <circle cx="12" cy="12" r="2"/>
+ <circle cx="18" cy="12" r="2"/>
+ <circle cx="6" cy="18" r="2"/>
+ <circle cx="12" cy="18" r="2"/>
+ <circle cx="18" cy="18" r="2"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png
new file mode 100644
index 00000000..bc4bc260
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.svg
new file mode 100644
index 00000000..d96a2e3f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewCompact.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="viewCompact">
+ <circle cx="6" cy="6" r="2"/>
+ <circle cx="12" cy="6" r="2"/>
+ <circle cx="18" cy="6" r="2"/>
+ <circle cx="6" cy="12" r="2"/>
+ <circle cx="12" cy="12" r="2"/>
+ <circle cx="18" cy="12" r="2"/>
+ <circle cx="6" cy="18" r="2"/>
+ <circle cx="12" cy="18" r="2"/>
+ <circle cx="18" cy="18" r="2"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png
new file mode 100644
index 00000000..35bbc8d2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.svg
new file mode 100644
index 00000000..14e435db
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr-invert.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="viewDetails">
+ <circle cx="5.5" cy="8.5" r="2.5"/>
+ <path d="M10 6h12v1H10zM10 8h9v1h-9zM10 10h4v1h-4z"/>
+ <circle cx="5.5" cy="16.5" r="2.5"/>
+ <path d="M10 14h12v1H10zM10 16h9v1h-9zM10 18h4v1h-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png
new file mode 100644
index 00000000..4ab5394b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.svg
new file mode 100644
index 00000000..4f5f9b3d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="viewDetails">
+ <circle cx="5.5" cy="8.5" r="2.5"/>
+ <path d="M10 6h12v1H10zM10 8h9v1h-9zM10 10h4v1h-4z"/>
+ <circle cx="5.5" cy="16.5" r="2.5"/>
+ <path d="M10 14h12v1H10zM10 16h9v1h-9zM10 18h4v1h-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png
new file mode 100644
index 00000000..c45dd114
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.svg
new file mode 100644
index 00000000..f4838fe5
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl-invert.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="viewDetails">
+ <circle cx="18.5" cy="8.5" r="2.5"/>
+ <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+ <circle cx="18.5" cy="16.5" r="2.5"/>
+ <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png
new file mode 100644
index 00000000..46587ecf
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.svg
new file mode 100644
index 00000000..f43b05f1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/viewDetails-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="viewDetails">
+ <circle cx="18.5" cy="8.5" r="2.5"/>
+ <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+ <circle cx="18.5" cy="16.5" r="2.5"/>
+ <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png
new file mode 100644
index 00000000..118e4687
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg
new file mode 100644
index 00000000..ae0d94e2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png
new file mode 100644
index 00000000..e1afbaef
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.svg
new file mode 100644
index 00000000..ae6ba27a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png
new file mode 100644
index 00000000..4b94c1ae
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.svg
new file mode 100644
index 00000000..79c7d5ca
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.png
new file mode 100644
index 00000000..f9cc5ea7
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.svg
new file mode 100644
index 00000000..6bbc2fa2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/watchlist-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g780">
+ <path d="M11 14h-5v1h5v-1zm0 3h-5v-1h5v1zm0 1h-5v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z" id="path782"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png
new file mode 100644
index 00000000..4b15161c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.svg
new file mode 100644
index 00000000..eebd9b1a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikiText.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M23 5h-4v2h2v10h-2v2h4z"/>
+ </g>
+ <g>
+ <path d="M18 5h-4v2h2v10h-2v2h4z"/>
+ </g>
+ <g>
+ <path d="M2 5h4v2h-2v10h2v2h-4z"/>
+ </g>
+ <g>
+ <path d="M7 5h4v2h-2v10h2v2h-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png
new file mode 100644
index 00000000..41743b3a
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg
new file mode 100644
index 00000000..c606becd
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2l-2.5-1zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6l-1.1-1.7c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7c-.3-1.2-.3-2.3.2-3.3zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5s-3.5-1.6-3.5-3.5 1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5z"/>
+ </g>
+ <path d="M24 8l-1-1-1.5 1.5-1.5-1.5-1 1 1.5 1.5-1.5 1.5 1 1 1.5-1.5 1.5 1.5 1-1-1.5-1.5z"/>
+ <circle cx="8" cy="5" r="2"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png
new file mode 100644
index 00000000..29dc26b9
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg
new file mode 100644
index 00000000..f304f6ed
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g792">
+ <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5z" id="path794"/>
+ </g>
+ <path d="M.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z" id="path796"/>
+ <circle cx="8" cy="5" r="2" id="circle798" transform="matrix(-1 0 0 1 24.095 0)"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png
new file mode 100644
index 00000000..1c6ed1f3
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.svg
new file mode 100644
index 00000000..0aeb6168
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+ <g id="window">
+ <path id="title" d="M7 10h10v1h-10z"/>
+ <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png
new file mode 100644
index 00000000..db726a19
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.svg
new file mode 100644
index 00000000..cd3b76c2
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="window">
+ <path id="title" d="M7 10h10v1h-10z"/>
+ <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png
new file mode 100644
index 00000000..28c8704c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg
new file mode 100644
index 00000000..cd666495
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+ <g id="alert">
+ <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png
new file mode 100644
index 00000000..5bf08278
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg
new file mode 100644
index 00000000..d9dc6a87
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="alert">
+ <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
new file mode 100644
index 00000000..f18841d4
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg
new file mode 100644
index 00000000..847f9358
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve"><style>* { fill: #FFFFFF }</style>
+<g id="down">
+ <path id="arrow" d="M883.3,341H116.7L500,724.3l0,0l0,0L883.3,341"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
new file mode 100644
index 00000000..15ec5861
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg
new file mode 100644
index 00000000..17380577
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
+<g id="down">
+ <path id="arrow" d="M883.3,341H116.7L500,724.3l0,0l0,0L883.3,341"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png
new file mode 100644
index 00000000..22bf8977
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg
new file mode 100644
index 00000000..2a91c027
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve"><style>* { fill: #FFFFFF }</style>
+<g id="ltr">
+ <path id="arrow" d="M-489,496v10l5-5h0h0L-489,496"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png
new file mode 100644
index 00000000..44403291
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg
new file mode 100644
index 00000000..fb366e64
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">
+<g id="ltr">
+ <path id="arrow" d="M-489,496v10l5-5h0h0L-489,496"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png
new file mode 100644
index 00000000..4f3c9d16
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg
new file mode 100644
index 00000000..3cce872e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve"><style>* { fill: #FFFFFF }</style>
+<g id="rtl">
+ <path id="arrow" d="M-485,506v-10l-5,5h0h0L-485,506"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png
new file mode 100644
index 00000000..5f1f868f
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg
new file mode 100644
index 00000000..62b6bb50
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">
+<g id="rtl">
+ <path id="arrow" d="M-485,506v-10l-5,5h0h0L-485,506"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png
new file mode 100644
index 00000000..e6fad56e
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg
new file mode 100644
index 00000000..50da8de0
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve"><style>* { fill: #FFFFFF }</style>
+<g id="up">
+ <path id="arrow" d="M-492,503h10l-5-5v0v0L-492,503"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png
new file mode 100644
index 00000000..38d01c7d
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg
new file mode 100644
index 00000000..20e734fb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">
+<g id="up">
+ <path id="arrow" d="M-492,503h10l-5-5v0v0L-492,503"/>
+</g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png
new file mode 100644
index 00000000..614c6e86
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg
new file mode 100644
index 00000000..30baa50c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+ <g id="required">
+ <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png
new file mode 100644
index 00000000..45eb03b6
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg
new file mode 100644
index 00000000..969fa2d8
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="required">
+ <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png
new file mode 100644
index 00000000..2840bef1
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg
new file mode 100644
index 00000000..f46b1eeb
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+ <g id="search">
+ <path id="path3051" d="M10.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png
new file mode 100644
index 00000000..df1c61ed
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg
new file mode 100644
index 00000000..266349ed
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="search">
+ <path id="path3051" d="M10.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png
new file mode 100644
index 00000000..665a088b
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg
new file mode 100644
index 00000000..bd962d93
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+ <g id="search">
+ <path id="path3051" d="M1.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png
new file mode 100644
index 00000000..c9443d79
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg
new file mode 100644
index 00000000..5368fd7c
--- /dev/null
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="search">
+ <path id="path3051" d="M1.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/textures/pending.gif b/resources/lib/oojs-ui/themes/mediawiki/images/textures/pending.gif
index 1194eed2..1194eed2 100644
--- a/resources/lib/oojs-ui/images/textures/pending.gif
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/textures/pending.gif
Binary files differ
diff --git a/resources/lib/oojs-ui/images/textures/transparency.png b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png
index 1843f27d..1843f27d 100644
--- a/resources/lib/oojs-ui/images/textures/transparency.png
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png
Binary files differ
diff --git a/resources/lib/oojs-ui/images/textures/transparency.svg b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.svg
index 63a0b57c..63a0b57c 100644
--- a/resources/lib/oojs-ui/images/textures/transparency.svg
+++ b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.svg
diff --git a/resources/lib/oojs-ui/themes/minerva/images/icons/check.png b/resources/lib/oojs-ui/themes/minerva/images/icons/check.png
deleted file mode 100644
index 65026a0f..00000000
--- a/resources/lib/oojs-ui/themes/minerva/images/icons/check.png
+++ /dev/null
Binary files differ
diff --git a/resources/lib/oojs-ui/themes/minerva/images/icons/check.svg b/resources/lib/oojs-ui/themes/minerva/images/icons/check.svg
deleted file mode 100644
index 6a91939f..00000000
--- a/resources/lib/oojs-ui/themes/minerva/images/icons/check.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="44.075px" height="44.076px" viewBox="0 0 44.075 44.076" enable-background="new 0 0 44.075 44.076" xml:space="preserve">
-<polygon fill="#FFFFFF" points="41.673,12.657 15.385,37.159 15.201,36.961 10.037,31.424 2.402,23.239 8.057,17.962 15.693,26.157
- 36.319,6.917 "/>
-</svg>
diff --git a/resources/lib/oojs/oojs.jquery.js b/resources/lib/oojs/oojs.jquery.js
index c62df221..18dc5649 100644
--- a/resources/lib/oojs/oojs.jquery.js
+++ b/resources/lib/oojs/oojs.jquery.js
@@ -1,12 +1,12 @@
/*!
- * OOjs v1.1.1 optimised for jQuery
+ * OOjs v1.1.6 optimised for jQuery
* https://www.mediawiki.org/wiki/OOjs
*
- * Copyright 2011-2014 OOjs Team and other contributors.
+ * Copyright 2011-2015 OOjs Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2014-09-11T00:40:09Z
+ * Date: 2015-03-19T00:42:55Z
*/
( function ( global ) {
@@ -20,6 +20,7 @@ var
* @singleton
*/
oo = {},
+ // Optimisation: Local reference to Object.prototype.hasOwnProperty
hasOwn = oo.hasOwnProperty,
toString = oo.toString;
@@ -159,6 +160,64 @@ oo.mixinClass = function ( targetFn, originFn ) {
/* Object Methods */
/**
+ * Get a deeply nested property of an object using variadic arguments, protecting against
+ * undefined property errors.
+ *
+ * `quux = oo.getProp( obj, 'foo', 'bar', 'baz' );` is equivalent to `quux = obj.foo.bar.baz;`
+ * except that the former protects against JS errors if one of the intermediate properties
+ * is undefined. Instead of throwing an error, this function will return undefined in
+ * that case.
+ *
+ * @param {Object} obj
+ * @param {Mixed...} [keys]
+ * @return obj[arguments[1]][arguments[2]].... or undefined
+ */
+oo.getProp = function ( obj ) {
+ var i,
+ retval = obj;
+ for ( i = 1; i < arguments.length; i++ ) {
+ if ( retval === undefined || retval === null ) {
+ // Trying to access a property of undefined or null causes an error
+ return undefined;
+ }
+ retval = retval[arguments[i]];
+ }
+ return retval;
+};
+
+/**
+ * Set a deeply nested property of an object using variadic arguments, protecting against
+ * undefined property errors.
+ *
+ * `oo.setProp( obj, 'foo', 'bar', 'baz' );` is equivalent to `obj.foo.bar = baz;` except that
+ * the former protects against JS errors if one of the intermediate properties is
+ * undefined. Instead of throwing an error, undefined intermediate properties will be
+ * initialized to an empty object. If an intermediate property is not an object, or if obj itself
+ * is not an object, this function will silently abort.
+ *
+ * @param {Object} obj
+ * @param {Mixed...} [keys]
+ * @param {Mixed} [value]
+ */
+oo.setProp = function ( obj ) {
+ var i,
+ prop = obj;
+ if ( Object( obj ) !== obj ) {
+ return;
+ }
+ for ( i = 1; i < arguments.length - 2; i++ ) {
+ if ( prop[arguments[i]] === undefined ) {
+ prop[arguments[i]] = {};
+ }
+ if ( Object( prop[arguments[i]] ) !== prop[arguments[i]] ) {
+ return;
+ }
+ prop = prop[arguments[i]];
+ }
+ prop[arguments[arguments.length - 2]] = arguments[arguments.length - 1];
+};
+
+/**
* Create a new object that is an instance of the same
* constructor as the input, inherits from the same object
* and contains the same own properties.
@@ -228,7 +287,8 @@ oo.getObjectValues = function ( obj ) {
*
* @param {Object|undefined|null} a First object to compare
* @param {Object|undefined|null} b Second object to compare
- * @param {boolean} [asymmetrical] Whether to check only that b contains values from a
+ * @param {boolean} [asymmetrical] Whether to check only that a's values are equal to b's
+ * (i.e. a is a subset of b)
* @return {boolean} If the objects contain the same values as each other
*/
oo.compare = function ( a, b, asymmetrical ) {
@@ -241,10 +301,16 @@ oo.compare = function ( a, b, asymmetrical ) {
a = a || {};
b = b || {};
+ if ( typeof a.nodeType === 'number' && typeof a.isEqualNode === 'function' ) {
+ return a.isEqualNode( b );
+ }
+
for ( k in a ) {
- if ( !hasOwn.call( a, k ) ) {
- // Support es3-shim: Without this filter, comparing [] to {} will be false in ES3
+ if ( !hasOwn.call( a, k ) || a[k] === undefined || a[k] === b[k] ) {
+ // Support es3-shim: Without the hasOwn filter, comparing [] to {} will be false in ES3
// because the shimmed "forEach" is enumerable and shows up in Array but not Object.
+ // Also ignore undefined values, because there is no conceptual difference between
+ // a key that is absent and a key that is present but whose value is undefined.
continue;
}
@@ -257,7 +323,7 @@ oo.compare = function ( a, b, asymmetrical ) {
( aType === 'string' || aType === 'number' || aType === 'boolean' ) &&
aValue !== bValue
) ||
- ( aValue === Object( aValue ) && !oo.compare( aValue, bValue, asymmetrical ) ) ) {
+ ( aValue === Object( aValue ) && !oo.compare( aValue, bValue, true ) ) ) {
return false;
}
}
@@ -370,6 +436,21 @@ oo.getHash.keySortReplacer = function ( key, val ) {
};
/**
+ * Get the unique values of an array, removing duplicates
+ *
+ * @param {Array} arr Array
+ * @return {Array} Unique values in array
+ */
+oo.unique = function ( arr ) {
+ return arr.reduce( function ( result, current ) {
+ if ( result.indexOf( current ) === -1 ) {
+ result.push( current );
+ }
+ return result;
+ }, [] );
+};
+
+/**
* Compute the union (duplicate-free merge) of a set of arrays.
*
* Arrays values must be convertable to object keys (strings).
@@ -506,11 +587,6 @@ oo.isPlainObject = $.isPlainObject;
if ( context === undefined || context === null ) {
throw new Error( 'Method name "' + method + '" has no context.' );
}
- if ( !( method in context ) ) {
- // Technically the method does not need to exist yet: it could be
- // added before call time. But this probably signals a typo.
- throw new Error( 'Method not found: "' + method + '"' );
- }
if ( typeof context[method] !== 'function' ) {
// Technically the property could be replaced by a function before
// call time. But this probably signals a typo.
@@ -565,11 +641,11 @@ oo.isPlainObject = $.isPlainObject;
*/
oo.EventEmitter.prototype.once = function ( event, listener ) {
var eventEmitter = this,
- listenerWrapper = function () {
- eventEmitter.off( event, listenerWrapper );
- listener.apply( eventEmitter, Array.prototype.slice.call( arguments, 0 ) );
+ wrapper = function () {
+ eventEmitter.off( event, wrapper );
+ return listener.apply( this, arguments );
};
- return this.on( event, listenerWrapper );
+ return this.on( event, wrapper );
};
/**
@@ -593,7 +669,7 @@ oo.isPlainObject = $.isPlainObject;
validateMethod( method, context );
- if ( !( event in this.bindings ) || !this.bindings[event].length ) {
+ if ( !hasOwn.call( this.bindings, event ) || !this.bindings[event].length ) {
// No matching bindings
return this;
}
@@ -630,12 +706,15 @@ oo.isPlainObject = $.isPlainObject;
* @return {boolean} If event was handled by at least one listener
*/
oo.EventEmitter.prototype.emit = function ( event ) {
- var i, len, binding, bindings, args, method;
+ var args = [],
+ i, len, binding, bindings, method;
- if ( event in this.bindings ) {
+ if ( hasOwn.call( this.bindings, event ) ) {
// Slicing ensures that we don't get tripped up by event handlers that add/remove bindings
bindings = this.bindings[event].slice();
- args = Array.prototype.slice.call( arguments, 1 );
+ for ( i = 1, len = arguments.length; i < len; i++ ) {
+ args.push( arguments[i] );
+ }
for ( i = 0, len = bindings.length; i < len; i++ ) {
binding = bindings[i];
if ( typeof binding.method === 'string' ) {
@@ -849,7 +928,8 @@ oo.Factory.prototype.register = function ( constructor ) {
* @throws {Error} Unknown object name
*/
oo.Factory.prototype.create = function ( name ) {
- var args, obj,
+ var obj, i,
+ args = [],
constructor = this.lookup( name );
if ( !constructor ) {
@@ -857,7 +937,9 @@ oo.Factory.prototype.create = function ( name ) {
}
// Convert arguments to array and shift the first argument (name) off
- args = Array.prototype.slice.call( arguments, 1 );
+ for ( i = 1; i < arguments.length; i++ ) {
+ args.push( arguments[i] );
+ }
// We can't use the "new" operator with .apply directly because apply needs a
// context. So instead just do what "new" does: create an object that inherits from
diff --git a/resources/lib/qunitjs/qunit.css b/resources/lib/qunitjs/qunit.css
new file mode 100644
index 00000000..0eb0b017
--- /dev/null
+++ b/resources/lib/qunitjs/qunit.css
@@ -0,0 +1,280 @@
+/*!
+ * QUnit 1.17.1
+ * http://qunitjs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-01-20T19:39Z
+ */
+
+/** Font Family and Sizes */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+ font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
+}
+
+#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+#qunit-tests { font-size: smaller; }
+
+
+/** Resets */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
+ margin: 0;
+ padding: 0;
+}
+
+
+/** Header */
+
+#qunit-header {
+ padding: 0.5em 0 0.5em 1em;
+
+ color: #8699A4;
+ background-color: #0D3349;
+
+ font-size: 1.5em;
+ line-height: 1em;
+ font-weight: 400;
+
+ border-radius: 5px 5px 0 0;
+}
+
+#qunit-header a {
+ text-decoration: none;
+ color: #C2CCD1;
+}
+
+#qunit-header a:hover,
+#qunit-header a:focus {
+ color: #FFF;
+}
+
+#qunit-testrunner-toolbar label {
+ display: inline-block;
+ padding: 0 0.5em 0 0.1em;
+}
+
+#qunit-banner {
+ height: 5px;
+}
+
+#qunit-testrunner-toolbar {
+ padding: 0.5em 1em 0.5em 1em;
+ color: #5E740B;
+ background-color: #EEE;
+ overflow: hidden;
+}
+
+#qunit-userAgent {
+ padding: 0.5em 1em 0.5em 1em;
+ background-color: #2B81AF;
+ color: #FFF;
+ text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+}
+
+#qunit-modulefilter-container {
+ float: right;
+ padding: 0.2em;
+}
+
+.qunit-url-config {
+ display: inline-block;
+ padding: 0.1em;
+}
+
+.qunit-filter {
+ display: block;
+ float: right;
+ margin-left: 1em;
+}
+
+/** Tests: Pass/Fail */
+
+#qunit-tests {
+ list-style-position: inside;
+}
+
+#qunit-tests li {
+ padding: 0.4em 1em 0.4em 1em;
+ border-bottom: 1px solid #FFF;
+ list-style-position: inside;
+}
+
+#qunit-tests > li {
+ display: none;
+}
+
+#qunit-tests li.running,
+#qunit-tests li.pass,
+#qunit-tests li.fail,
+#qunit-tests li.skipped {
+ display: list-item;
+}
+
+#qunit-tests.hidepass li.running,
+#qunit-tests.hidepass li.pass {
+ display: none;
+}
+
+#qunit-tests li strong {
+ cursor: pointer;
+}
+
+#qunit-tests li.skipped strong {
+ cursor: default;
+}
+
+#qunit-tests li a {
+ padding: 0.5em;
+ color: #C2CCD1;
+ text-decoration: none;
+}
+#qunit-tests li a:hover,
+#qunit-tests li a:focus {
+ color: #000;
+}
+
+#qunit-tests li .runtime {
+ float: right;
+ font-size: smaller;
+}
+
+.qunit-assert-list {
+ margin-top: 0.5em;
+ padding: 0.5em;
+
+ background-color: #FFF;
+
+ border-radius: 5px;
+}
+
+.qunit-collapsed {
+ display: none;
+}
+
+#qunit-tests table {
+ border-collapse: collapse;
+ margin-top: 0.2em;
+}
+
+#qunit-tests th {
+ text-align: right;
+ vertical-align: top;
+ padding: 0 0.5em 0 0;
+}
+
+#qunit-tests td {
+ vertical-align: top;
+}
+
+#qunit-tests pre {
+ margin: 0;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+
+#qunit-tests del {
+ background-color: #E0F2BE;
+ color: #374E0C;
+ text-decoration: none;
+}
+
+#qunit-tests ins {
+ background-color: #FFCACA;
+ color: #500;
+ text-decoration: none;
+}
+
+/*** Test Counts */
+
+#qunit-tests b.counts { color: #000; }
+#qunit-tests b.passed { color: #5E740B; }
+#qunit-tests b.failed { color: #710909; }
+
+#qunit-tests li li {
+ padding: 5px;
+ background-color: #FFF;
+ border-bottom: none;
+ list-style-position: inside;
+}
+
+/*** Passing Styles */
+
+#qunit-tests li li.pass {
+ color: #3C510C;
+ background-color: #FFF;
+ border-left: 10px solid #C6E746;
+}
+
+#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
+#qunit-tests .pass .test-name { color: #366097; }
+
+#qunit-tests .pass .test-actual,
+#qunit-tests .pass .test-expected { color: #999; }
+
+#qunit-banner.qunit-pass { background-color: #C6E746; }
+
+/*** Failing Styles */
+
+#qunit-tests li li.fail {
+ color: #710909;
+ background-color: #FFF;
+ border-left: 10px solid #EE5757;
+ white-space: pre;
+}
+
+#qunit-tests > li:last-child {
+ border-radius: 0 0 5px 5px;
+}
+
+#qunit-tests .fail { color: #000; background-color: #EE5757; }
+#qunit-tests .fail .test-name,
+#qunit-tests .fail .module-name { color: #000; }
+
+#qunit-tests .fail .test-actual { color: #EE5757; }
+#qunit-tests .fail .test-expected { color: #008000; }
+
+#qunit-banner.qunit-fail { background-color: #EE5757; }
+
+/*** Skipped tests */
+
+#qunit-tests .skipped {
+ background-color: #EBECE9;
+}
+
+#qunit-tests .qunit-skipped-label {
+ background-color: #F4FF77;
+ display: inline-block;
+ font-style: normal;
+ color: #366097;
+ line-height: 1.8em;
+ padding: 0 0.5em;
+ margin: -0.4em 0.4em -0.4em 0;
+}
+
+/** Result */
+
+#qunit-testresult {
+ padding: 0.5em 1em 0.5em 1em;
+
+ color: #2B81AF;
+ background-color: #D2E0E6;
+
+ border-bottom: 1px solid #FFF;
+}
+#qunit-testresult .module-name {
+ font-weight: 700;
+}
+
+/** Fixture */
+
+#qunit-fixture {
+ position: absolute;
+ top: -10000px;
+ left: -10000px;
+ width: 1000px;
+ height: 1000px;
+}
diff --git a/resources/lib/qunitjs/qunit.js b/resources/lib/qunitjs/qunit.js
new file mode 100644
index 00000000..006ca474
--- /dev/null
+++ b/resources/lib/qunitjs/qunit.js
@@ -0,0 +1,2875 @@
+/*!
+ * QUnit 1.17.1
+ * http://qunitjs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-01-20T19:39Z
+ */
+
+(function( window ) {
+
+var QUnit,
+ config,
+ onErrorFnPrev,
+ loggingCallbacks = {},
+ fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" ),
+ toString = Object.prototype.toString,
+ hasOwn = Object.prototype.hasOwnProperty,
+ // Keep a local reference to Date (GH-283)
+ Date = window.Date,
+ now = Date.now || function() {
+ return new Date().getTime();
+ },
+ globalStartCalled = false,
+ runStarted = false,
+ setTimeout = window.setTimeout,
+ clearTimeout = window.clearTimeout,
+ defined = {
+ document: window.document !== undefined,
+ setTimeout: window.setTimeout !== undefined,
+ sessionStorage: (function() {
+ var x = "qunit-test-string";
+ try {
+ sessionStorage.setItem( x, x );
+ sessionStorage.removeItem( x );
+ return true;
+ } catch ( e ) {
+ return false;
+ }
+ }())
+ },
+ /**
+ * Provides a normalized error string, correcting an issue
+ * with IE 7 (and prior) where Error.prototype.toString is
+ * not properly implemented
+ *
+ * Based on http://es5.github.com/#x15.11.4.4
+ *
+ * @param {String|Error} error
+ * @return {String} error message
+ */
+ errorString = function( error ) {
+ var name, message,
+ errorString = error.toString();
+ if ( errorString.substring( 0, 7 ) === "[object" ) {
+ name = error.name ? error.name.toString() : "Error";
+ message = error.message ? error.message.toString() : "";
+ if ( name && message ) {
+ return name + ": " + message;
+ } else if ( name ) {
+ return name;
+ } else if ( message ) {
+ return message;
+ } else {
+ return "Error";
+ }
+ } else {
+ return errorString;
+ }
+ },
+ /**
+ * Makes a clone of an object using only Array or Object as base,
+ * and copies over the own enumerable properties.
+ *
+ * @param {Object} obj
+ * @return {Object} New object with only the own properties (recursively).
+ */
+ objectValues = function( obj ) {
+ var key, val,
+ vals = QUnit.is( "array", obj ) ? [] : {};
+ for ( key in obj ) {
+ if ( hasOwn.call( obj, key ) ) {
+ val = obj[ key ];
+ vals[ key ] = val === Object( val ) ? objectValues( val ) : val;
+ }
+ }
+ return vals;
+ };
+
+QUnit = {};
+
+/**
+ * Config object: Maintain internal state
+ * Later exposed as QUnit.config
+ * `config` initialized at top of scope
+ */
+config = {
+ // The queue of tests to run
+ queue: [],
+
+ // block until document ready
+ blocking: true,
+
+ // by default, run previously failed tests first
+ // very useful in combination with "Hide passed tests" checked
+ reorder: true,
+
+ // by default, modify document.title when suite is done
+ altertitle: true,
+
+ // by default, scroll to top of the page when suite is done
+ scrolltop: true,
+
+ // when enabled, all tests must call expect()
+ requireExpects: false,
+
+ // add checkboxes that are persisted in the query-string
+ // when enabled, the id is set to `true` as a `QUnit.config` property
+ urlConfig: [
+ {
+ id: "hidepassed",
+ label: "Hide passed tests",
+ tooltip: "Only show tests and assertions that fail. Stored as query-strings."
+ },
+ {
+ id: "noglobals",
+ label: "Check for Globals",
+ tooltip: "Enabling this will test if any test introduces new properties on the " +
+ "`window` object. Stored as query-strings."
+ },
+ {
+ id: "notrycatch",
+ label: "No try-catch",
+ tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging " +
+ "exceptions in IE reasonable. Stored as query-strings."
+ }
+ ],
+
+ // Set of all modules.
+ modules: [],
+
+ // The first unnamed module
+ currentModule: {
+ name: "",
+ tests: []
+ },
+
+ callbacks: {}
+};
+
+// Push a loose unnamed module to the modules collection
+config.modules.push( config.currentModule );
+
+// Initialize more QUnit.config and QUnit.urlParams
+(function() {
+ var i, current,
+ location = window.location || { search: "", protocol: "file:" },
+ params = location.search.slice( 1 ).split( "&" ),
+ length = params.length,
+ urlParams = {};
+
+ if ( params[ 0 ] ) {
+ for ( i = 0; i < length; i++ ) {
+ current = params[ i ].split( "=" );
+ current[ 0 ] = decodeURIComponent( current[ 0 ] );
+
+ // allow just a key to turn on a flag, e.g., test.html?noglobals
+ current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
+ if ( urlParams[ current[ 0 ] ] ) {
+ urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] );
+ } else {
+ urlParams[ current[ 0 ] ] = current[ 1 ];
+ }
+ }
+ }
+
+ if ( urlParams.filter === true ) {
+ delete urlParams.filter;
+ }
+
+ QUnit.urlParams = urlParams;
+
+ // String search anywhere in moduleName+testName
+ config.filter = urlParams.filter;
+
+ config.testId = [];
+ if ( urlParams.testId ) {
+
+ // Ensure that urlParams.testId is an array
+ urlParams.testId = [].concat( urlParams.testId );
+ for ( i = 0; i < urlParams.testId.length; i++ ) {
+ config.testId.push( urlParams.testId[ i ] );
+ }
+ }
+
+ // Figure out if we're running the tests from a server or not
+ QUnit.isLocal = location.protocol === "file:";
+}());
+
+// Root QUnit object.
+// `QUnit` initialized at top of scope
+extend( QUnit, {
+
+ // call on start of module test to prepend name to all tests
+ module: function( name, testEnvironment ) {
+ var currentModule = {
+ name: name,
+ testEnvironment: testEnvironment,
+ tests: []
+ };
+
+ // DEPRECATED: handles setup/teardown functions,
+ // beforeEach and afterEach should be used instead
+ if ( testEnvironment && testEnvironment.setup ) {
+ testEnvironment.beforeEach = testEnvironment.setup;
+ delete testEnvironment.setup;
+ }
+ if ( testEnvironment && testEnvironment.teardown ) {
+ testEnvironment.afterEach = testEnvironment.teardown;
+ delete testEnvironment.teardown;
+ }
+
+ config.modules.push( currentModule );
+ config.currentModule = currentModule;
+ },
+
+ // DEPRECATED: QUnit.asyncTest() will be removed in QUnit 2.0.
+ asyncTest: function( testName, expected, callback ) {
+ if ( arguments.length === 2 ) {
+ callback = expected;
+ expected = null;
+ }
+
+ QUnit.test( testName, expected, callback, true );
+ },
+
+ test: function( testName, expected, callback, async ) {
+ var test;
+
+ if ( arguments.length === 2 ) {
+ callback = expected;
+ expected = null;
+ }
+
+ test = new Test({
+ testName: testName,
+ expected: expected,
+ async: async,
+ callback: callback
+ });
+
+ test.queue();
+ },
+
+ skip: function( testName ) {
+ var test = new Test({
+ testName: testName,
+ skip: true
+ });
+
+ test.queue();
+ },
+
+ // DEPRECATED: The functionality of QUnit.start() will be altered in QUnit 2.0.
+ // In QUnit 2.0, invoking it will ONLY affect the `QUnit.config.autostart` blocking behavior.
+ start: function( count ) {
+ var globalStartAlreadyCalled = globalStartCalled;
+
+ if ( !config.current ) {
+ globalStartCalled = true;
+
+ if ( runStarted ) {
+ throw new Error( "Called start() outside of a test context while already started" );
+ } else if ( globalStartAlreadyCalled || count > 1 ) {
+ throw new Error( "Called start() outside of a test context too many times" );
+ } else if ( config.autostart ) {
+ throw new Error( "Called start() outside of a test context when " +
+ "QUnit.config.autostart was true" );
+ } else if ( !config.pageLoaded ) {
+
+ // The page isn't completely loaded yet, so bail out and let `QUnit.load` handle it
+ config.autostart = true;
+ return;
+ }
+ } else {
+
+ // If a test is running, adjust its semaphore
+ config.current.semaphore -= count || 1;
+
+ // Don't start until equal number of stop-calls
+ if ( config.current.semaphore > 0 ) {
+ return;
+ }
+
+ // throw an Error if start is called more often than stop
+ if ( config.current.semaphore < 0 ) {
+ config.current.semaphore = 0;
+
+ QUnit.pushFailure(
+ "Called start() while already started (test's semaphore was 0 already)",
+ sourceFromStacktrace( 2 )
+ );
+ return;
+ }
+ }
+
+ resumeProcessing();
+ },
+
+ // DEPRECATED: QUnit.stop() will be removed in QUnit 2.0.
+ stop: function( count ) {
+
+ // If there isn't a test running, don't allow QUnit.stop() to be called
+ if ( !config.current ) {
+ throw new Error( "Called stop() outside of a test context" );
+ }
+
+ // If a test is running, adjust its semaphore
+ config.current.semaphore += count || 1;
+
+ pauseProcessing();
+ },
+
+ config: config,
+
+ // Safe object type checking
+ is: function( type, obj ) {
+ return QUnit.objectType( obj ) === type;
+ },
+
+ objectType: function( obj ) {
+ if ( typeof obj === "undefined" ) {
+ return "undefined";
+ }
+
+ // Consider: typeof null === object
+ if ( obj === null ) {
+ return "null";
+ }
+
+ var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ),
+ type = match && match[ 1 ] || "";
+
+ switch ( type ) {
+ case "Number":
+ if ( isNaN( obj ) ) {
+ return "nan";
+ }
+ return "number";
+ case "String":
+ case "Boolean":
+ case "Array":
+ case "Date":
+ case "RegExp":
+ case "Function":
+ return type.toLowerCase();
+ }
+ if ( typeof obj === "object" ) {
+ return "object";
+ }
+ return undefined;
+ },
+
+ extend: extend,
+
+ load: function() {
+ config.pageLoaded = true;
+
+ // Initialize the configuration options
+ extend( config, {
+ stats: { all: 0, bad: 0 },
+ moduleStats: { all: 0, bad: 0 },
+ started: 0,
+ updateRate: 1000,
+ autostart: true,
+ filter: ""
+ }, true );
+
+ config.blocking = false;
+
+ if ( config.autostart ) {
+ resumeProcessing();
+ }
+ }
+});
+
+// Register logging callbacks
+(function() {
+ var i, l, key,
+ callbacks = [ "begin", "done", "log", "testStart", "testDone",
+ "moduleStart", "moduleDone" ];
+
+ function registerLoggingCallback( key ) {
+ var loggingCallback = function( callback ) {
+ if ( QUnit.objectType( callback ) !== "function" ) {
+ throw new Error(
+ "QUnit logging methods require a callback function as their first parameters."
+ );
+ }
+
+ config.callbacks[ key ].push( callback );
+ };
+
+ // DEPRECATED: This will be removed on QUnit 2.0.0+
+ // Stores the registered functions allowing restoring
+ // at verifyLoggingCallbacks() if modified
+ loggingCallbacks[ key ] = loggingCallback;
+
+ return loggingCallback;
+ }
+
+ for ( i = 0, l = callbacks.length; i < l; i++ ) {
+ key = callbacks[ i ];
+
+ // Initialize key collection of logging callback
+ if ( QUnit.objectType( config.callbacks[ key ] ) === "undefined" ) {
+ config.callbacks[ key ] = [];
+ }
+
+ QUnit[ key ] = registerLoggingCallback( key );
+ }
+})();
+
+// `onErrorFnPrev` initialized at top of scope
+// Preserve other handlers
+onErrorFnPrev = window.onerror;
+
+// Cover uncaught exceptions
+// Returning true will suppress the default browser handler,
+// returning false will let it run.
+window.onerror = function( error, filePath, linerNr ) {
+ var ret = false;
+ if ( onErrorFnPrev ) {
+ ret = onErrorFnPrev( error, filePath, linerNr );
+ }
+
+ // Treat return value as window.onerror itself does,
+ // Only do our handling if not suppressed.
+ if ( ret !== true ) {
+ if ( QUnit.config.current ) {
+ if ( QUnit.config.current.ignoreGlobalErrors ) {
+ return true;
+ }
+ QUnit.pushFailure( error, filePath + ":" + linerNr );
+ } else {
+ QUnit.test( "global failure", extend(function() {
+ QUnit.pushFailure( error, filePath + ":" + linerNr );
+ }, { validTest: true } ) );
+ }
+ return false;
+ }
+
+ return ret;
+};
+
+function done() {
+ var runtime, passed;
+
+ config.autorun = true;
+
+ // Log the last module results
+ if ( config.previousModule ) {
+ runLoggingCallbacks( "moduleDone", {
+ name: config.previousModule.name,
+ tests: config.previousModule.tests,
+ failed: config.moduleStats.bad,
+ passed: config.moduleStats.all - config.moduleStats.bad,
+ total: config.moduleStats.all,
+ runtime: now() - config.moduleStats.started
+ });
+ }
+ delete config.previousModule;
+
+ runtime = now() - config.started;
+ passed = config.stats.all - config.stats.bad;
+
+ runLoggingCallbacks( "done", {
+ failed: config.stats.bad,
+ passed: passed,
+ total: config.stats.all,
+ runtime: runtime
+ });
+}
+
+// Doesn't support IE6 to IE9
+// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+function extractStacktrace( e, offset ) {
+ offset = offset === undefined ? 4 : offset;
+
+ var stack, include, i;
+
+ if ( e.stacktrace ) {
+
+ // Opera 12.x
+ return e.stacktrace.split( "\n" )[ offset + 3 ];
+ } else if ( e.stack ) {
+
+ // Firefox, Chrome, Safari 6+, IE10+, PhantomJS and Node
+ stack = e.stack.split( "\n" );
+ if ( /^error$/i.test( stack[ 0 ] ) ) {
+ stack.shift();
+ }
+ if ( fileName ) {
+ include = [];
+ for ( i = offset; i < stack.length; i++ ) {
+ if ( stack[ i ].indexOf( fileName ) !== -1 ) {
+ break;
+ }
+ include.push( stack[ i ] );
+ }
+ if ( include.length ) {
+ return include.join( "\n" );
+ }
+ }
+ return stack[ offset ];
+ } else if ( e.sourceURL ) {
+
+ // Safari < 6
+ // exclude useless self-reference for generated Error objects
+ if ( /qunit.js$/.test( e.sourceURL ) ) {
+ return;
+ }
+
+ // for actual exceptions, this is useful
+ return e.sourceURL + ":" + e.line;
+ }
+}
+
+function sourceFromStacktrace( offset ) {
+ var e = new Error();
+ if ( !e.stack ) {
+ try {
+ throw e;
+ } catch ( err ) {
+ // This should already be true in most browsers
+ e = err;
+ }
+ }
+ return extractStacktrace( e, offset );
+}
+
+function synchronize( callback, last ) {
+ if ( QUnit.objectType( callback ) === "array" ) {
+ while ( callback.length ) {
+ synchronize( callback.shift() );
+ }
+ return;
+ }
+ config.queue.push( callback );
+
+ if ( config.autorun && !config.blocking ) {
+ process( last );
+ }
+}
+
+function process( last ) {
+ function next() {
+ process( last );
+ }
+ var start = now();
+ config.depth = ( config.depth || 0 ) + 1;
+
+ while ( config.queue.length && !config.blocking ) {
+ if ( !defined.setTimeout || config.updateRate <= 0 ||
+ ( ( now() - start ) < config.updateRate ) ) {
+ if ( config.current ) {
+
+ // Reset async tracking for each phase of the Test lifecycle
+ config.current.usedAsync = false;
+ }
+ config.queue.shift()();
+ } else {
+ setTimeout( next, 13 );
+ break;
+ }
+ }
+ config.depth--;
+ if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
+ done();
+ }
+}
+
+function begin() {
+ var i, l,
+ modulesLog = [];
+
+ // If the test run hasn't officially begun yet
+ if ( !config.started ) {
+
+ // Record the time of the test run's beginning
+ config.started = now();
+
+ verifyLoggingCallbacks();
+
+ // Delete the loose unnamed module if unused.
+ if ( config.modules[ 0 ].name === "" && config.modules[ 0 ].tests.length === 0 ) {
+ config.modules.shift();
+ }
+
+ // Avoid unnecessary information by not logging modules' test environments
+ for ( i = 0, l = config.modules.length; i < l; i++ ) {
+ modulesLog.push({
+ name: config.modules[ i ].name,
+ tests: config.modules[ i ].tests
+ });
+ }
+
+ // The test run is officially beginning now
+ runLoggingCallbacks( "begin", {
+ totalTests: Test.count,
+ modules: modulesLog
+ });
+ }
+
+ config.blocking = false;
+ process( true );
+}
+
+function resumeProcessing() {
+ runStarted = true;
+
+ // A slight delay to allow this iteration of the event loop to finish (more assertions, etc.)
+ if ( defined.setTimeout ) {
+ setTimeout(function() {
+ if ( config.current && config.current.semaphore > 0 ) {
+ return;
+ }
+ if ( config.timeout ) {
+ clearTimeout( config.timeout );
+ }
+
+ begin();
+ }, 13 );
+ } else {
+ begin();
+ }
+}
+
+function pauseProcessing() {
+ config.blocking = true;
+
+ if ( config.testTimeout && defined.setTimeout ) {
+ clearTimeout( config.timeout );
+ config.timeout = setTimeout(function() {
+ if ( config.current ) {
+ config.current.semaphore = 0;
+ QUnit.pushFailure( "Test timed out", sourceFromStacktrace( 2 ) );
+ } else {
+ throw new Error( "Test timed out" );
+ }
+ resumeProcessing();
+ }, config.testTimeout );
+ }
+}
+
+function saveGlobal() {
+ config.pollution = [];
+
+ if ( config.noglobals ) {
+ for ( var key in window ) {
+ if ( hasOwn.call( window, key ) ) {
+ // in Opera sometimes DOM element ids show up here, ignore them
+ if ( /^qunit-test-output/.test( key ) ) {
+ continue;
+ }
+ config.pollution.push( key );
+ }
+ }
+ }
+}
+
+function checkPollution() {
+ var newGlobals,
+ deletedGlobals,
+ old = config.pollution;
+
+ saveGlobal();
+
+ newGlobals = diff( config.pollution, old );
+ if ( newGlobals.length > 0 ) {
+ QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) );
+ }
+
+ deletedGlobals = diff( old, config.pollution );
+ if ( deletedGlobals.length > 0 ) {
+ QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) );
+ }
+}
+
+// returns a new Array with the elements that are in a but not in b
+function diff( a, b ) {
+ var i, j,
+ result = a.slice();
+
+ for ( i = 0; i < result.length; i++ ) {
+ for ( j = 0; j < b.length; j++ ) {
+ if ( result[ i ] === b[ j ] ) {
+ result.splice( i, 1 );
+ i--;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+function extend( a, b, undefOnly ) {
+ for ( var prop in b ) {
+ if ( hasOwn.call( b, prop ) ) {
+
+ // Avoid "Member not found" error in IE8 caused by messing with window.constructor
+ if ( !( prop === "constructor" && a === window ) ) {
+ if ( b[ prop ] === undefined ) {
+ delete a[ prop ];
+ } else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) {
+ a[ prop ] = b[ prop ];
+ }
+ }
+ }
+ }
+
+ return a;
+}
+
+function runLoggingCallbacks( key, args ) {
+ var i, l, callbacks;
+
+ callbacks = config.callbacks[ key ];
+ for ( i = 0, l = callbacks.length; i < l; i++ ) {
+ callbacks[ i ]( args );
+ }
+}
+
+// DEPRECATED: This will be removed on 2.0.0+
+// This function verifies if the loggingCallbacks were modified by the user
+// If so, it will restore it, assign the given callback and print a console warning
+function verifyLoggingCallbacks() {
+ var loggingCallback, userCallback;
+
+ for ( loggingCallback in loggingCallbacks ) {
+ if ( QUnit[ loggingCallback ] !== loggingCallbacks[ loggingCallback ] ) {
+
+ userCallback = QUnit[ loggingCallback ];
+
+ // Restore the callback function
+ QUnit[ loggingCallback ] = loggingCallbacks[ loggingCallback ];
+
+ // Assign the deprecated given callback
+ QUnit[ loggingCallback ]( userCallback );
+
+ if ( window.console && window.console.warn ) {
+ window.console.warn(
+ "QUnit." + loggingCallback + " was replaced with a new value.\n" +
+ "Please, check out the documentation on how to apply logging callbacks.\n" +
+ "Reference: http://api.qunitjs.com/category/callbacks/"
+ );
+ }
+ }
+ }
+}
+
+// from jquery.js
+function inArray( elem, array ) {
+ if ( array.indexOf ) {
+ return array.indexOf( elem );
+ }
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ if ( array[ i ] === elem ) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+function Test( settings ) {
+ var i, l;
+
+ ++Test.count;
+
+ extend( this, settings );
+ this.assertions = [];
+ this.semaphore = 0;
+ this.usedAsync = false;
+ this.module = config.currentModule;
+ this.stack = sourceFromStacktrace( 3 );
+
+ // Register unique strings
+ for ( i = 0, l = this.module.tests; i < l.length; i++ ) {
+ if ( this.module.tests[ i ].name === this.testName ) {
+ this.testName += " ";
+ }
+ }
+
+ this.testId = generateHash( this.module.name, this.testName );
+
+ this.module.tests.push({
+ name: this.testName,
+ testId: this.testId
+ });
+
+ if ( settings.skip ) {
+
+ // Skipped tests will fully ignore any sent callback
+ this.callback = function() {};
+ this.async = false;
+ this.expected = 0;
+ } else {
+ this.assert = new Assert( this );
+ }
+}
+
+Test.count = 0;
+
+Test.prototype = {
+ before: function() {
+ if (
+
+ // Emit moduleStart when we're switching from one module to another
+ this.module !== config.previousModule ||
+
+ // They could be equal (both undefined) but if the previousModule property doesn't
+ // yet exist it means this is the first test in a suite that isn't wrapped in a
+ // module, in which case we'll just emit a moduleStart event for 'undefined'.
+ // Without this, reporters can get testStart before moduleStart which is a problem.
+ !hasOwn.call( config, "previousModule" )
+ ) {
+ if ( hasOwn.call( config, "previousModule" ) ) {
+ runLoggingCallbacks( "moduleDone", {
+ name: config.previousModule.name,
+ tests: config.previousModule.tests,
+ failed: config.moduleStats.bad,
+ passed: config.moduleStats.all - config.moduleStats.bad,
+ total: config.moduleStats.all,
+ runtime: now() - config.moduleStats.started
+ });
+ }
+ config.previousModule = this.module;
+ config.moduleStats = { all: 0, bad: 0, started: now() };
+ runLoggingCallbacks( "moduleStart", {
+ name: this.module.name,
+ tests: this.module.tests
+ });
+ }
+
+ config.current = this;
+
+ this.testEnvironment = extend( {}, this.module.testEnvironment );
+ delete this.testEnvironment.beforeEach;
+ delete this.testEnvironment.afterEach;
+
+ this.started = now();
+ runLoggingCallbacks( "testStart", {
+ name: this.testName,
+ module: this.module.name,
+ testId: this.testId
+ });
+
+ if ( !config.pollution ) {
+ saveGlobal();
+ }
+ },
+
+ run: function() {
+ var promise;
+
+ config.current = this;
+
+ if ( this.async ) {
+ QUnit.stop();
+ }
+
+ this.callbackStarted = now();
+
+ if ( config.notrycatch ) {
+ promise = this.callback.call( this.testEnvironment, this.assert );
+ this.resolvePromise( promise );
+ return;
+ }
+
+ try {
+ promise = this.callback.call( this.testEnvironment, this.assert );
+ this.resolvePromise( promise );
+ } catch ( e ) {
+ this.pushFailure( "Died on test #" + ( this.assertions.length + 1 ) + " " +
+ this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
+
+ // else next test will carry the responsibility
+ saveGlobal();
+
+ // Restart the tests if they're blocking
+ if ( config.blocking ) {
+ QUnit.start();
+ }
+ }
+ },
+
+ after: function() {
+ checkPollution();
+ },
+
+ queueHook: function( hook, hookName ) {
+ var promise,
+ test = this;
+ return function runHook() {
+ config.current = test;
+ if ( config.notrycatch ) {
+ promise = hook.call( test.testEnvironment, test.assert );
+ test.resolvePromise( promise, hookName );
+ return;
+ }
+ try {
+ promise = hook.call( test.testEnvironment, test.assert );
+ test.resolvePromise( promise, hookName );
+ } catch ( error ) {
+ test.pushFailure( hookName + " failed on " + test.testName + ": " +
+ ( error.message || error ), extractStacktrace( error, 0 ) );
+ }
+ };
+ },
+
+ // Currently only used for module level hooks, can be used to add global level ones
+ hooks: function( handler ) {
+ var hooks = [];
+
+ // Hooks are ignored on skipped tests
+ if ( this.skip ) {
+ return hooks;
+ }
+
+ if ( this.module.testEnvironment &&
+ QUnit.objectType( this.module.testEnvironment[ handler ] ) === "function" ) {
+ hooks.push( this.queueHook( this.module.testEnvironment[ handler ], handler ) );
+ }
+
+ return hooks;
+ },
+
+ finish: function() {
+ config.current = this;
+ if ( config.requireExpects && this.expected === null ) {
+ this.pushFailure( "Expected number of assertions to be defined, but expect() was " +
+ "not called.", this.stack );
+ } else if ( this.expected !== null && this.expected !== this.assertions.length ) {
+ this.pushFailure( "Expected " + this.expected + " assertions, but " +
+ this.assertions.length + " were run", this.stack );
+ } else if ( this.expected === null && !this.assertions.length ) {
+ this.pushFailure( "Expected at least one assertion, but none were run - call " +
+ "expect(0) to accept zero assertions.", this.stack );
+ }
+
+ var i,
+ bad = 0;
+
+ this.runtime = now() - this.started;
+ config.stats.all += this.assertions.length;
+ config.moduleStats.all += this.assertions.length;
+
+ for ( i = 0; i < this.assertions.length; i++ ) {
+ if ( !this.assertions[ i ].result ) {
+ bad++;
+ config.stats.bad++;
+ config.moduleStats.bad++;
+ }
+ }
+
+ runLoggingCallbacks( "testDone", {
+ name: this.testName,
+ module: this.module.name,
+ skipped: !!this.skip,
+ failed: bad,
+ passed: this.assertions.length - bad,
+ total: this.assertions.length,
+ runtime: this.runtime,
+
+ // HTML Reporter use
+ assertions: this.assertions,
+ testId: this.testId,
+
+ // DEPRECATED: this property will be removed in 2.0.0, use runtime instead
+ duration: this.runtime
+ });
+
+ // QUnit.reset() is deprecated and will be replaced for a new
+ // fixture reset function on QUnit 2.0/2.1.
+ // It's still called here for backwards compatibility handling
+ QUnit.reset();
+
+ config.current = undefined;
+ },
+
+ queue: function() {
+ var bad,
+ test = this;
+
+ if ( !this.valid() ) {
+ return;
+ }
+
+ function run() {
+
+ // each of these can by async
+ synchronize([
+ function() {
+ test.before();
+ },
+
+ test.hooks( "beforeEach" ),
+
+ function() {
+ test.run();
+ },
+
+ test.hooks( "afterEach" ).reverse(),
+
+ function() {
+ test.after();
+ },
+ function() {
+ test.finish();
+ }
+ ]);
+ }
+
+ // `bad` initialized at top of scope
+ // defer when previous test run passed, if storage is available
+ bad = QUnit.config.reorder && defined.sessionStorage &&
+ +sessionStorage.getItem( "qunit-test-" + this.module.name + "-" + this.testName );
+
+ if ( bad ) {
+ run();
+ } else {
+ synchronize( run, true );
+ }
+ },
+
+ push: function( result, actual, expected, message ) {
+ var source,
+ details = {
+ module: this.module.name,
+ name: this.testName,
+ result: result,
+ message: message,
+ actual: actual,
+ expected: expected,
+ testId: this.testId,
+ runtime: now() - this.started
+ };
+
+ if ( !result ) {
+ source = sourceFromStacktrace();
+
+ if ( source ) {
+ details.source = source;
+ }
+ }
+
+ runLoggingCallbacks( "log", details );
+
+ this.assertions.push({
+ result: !!result,
+ message: message
+ });
+ },
+
+ pushFailure: function( message, source, actual ) {
+ if ( !this instanceof Test ) {
+ throw new Error( "pushFailure() assertion outside test context, was " +
+ sourceFromStacktrace( 2 ) );
+ }
+
+ var details = {
+ module: this.module.name,
+ name: this.testName,
+ result: false,
+ message: message || "error",
+ actual: actual || null,
+ testId: this.testId,
+ runtime: now() - this.started
+ };
+
+ if ( source ) {
+ details.source = source;
+ }
+
+ runLoggingCallbacks( "log", details );
+
+ this.assertions.push({
+ result: false,
+ message: message
+ });
+ },
+
+ resolvePromise: function( promise, phase ) {
+ var then, message,
+ test = this;
+ if ( promise != null ) {
+ then = promise.then;
+ if ( QUnit.objectType( then ) === "function" ) {
+ QUnit.stop();
+ then.call(
+ promise,
+ QUnit.start,
+ function( error ) {
+ message = "Promise rejected " +
+ ( !phase ? "during" : phase.replace( /Each$/, "" ) ) +
+ " " + test.testName + ": " + ( error.message || error );
+ test.pushFailure( message, extractStacktrace( error, 0 ) );
+
+ // else next test will carry the responsibility
+ saveGlobal();
+
+ // Unblock
+ QUnit.start();
+ }
+ );
+ }
+ }
+ },
+
+ valid: function() {
+ var include,
+ filter = config.filter,
+ module = QUnit.urlParams.module && QUnit.urlParams.module.toLowerCase(),
+ fullName = ( this.module.name + ": " + this.testName ).toLowerCase();
+
+ // Internally-generated tests are always valid
+ if ( this.callback && this.callback.validTest ) {
+ return true;
+ }
+
+ if ( config.testId.length > 0 && inArray( this.testId, config.testId ) < 0 ) {
+ return false;
+ }
+
+ if ( module && ( !this.module.name || this.module.name.toLowerCase() !== module ) ) {
+ return false;
+ }
+
+ if ( !filter ) {
+ return true;
+ }
+
+ include = filter.charAt( 0 ) !== "!";
+ if ( !include ) {
+ filter = filter.toLowerCase().slice( 1 );
+ }
+
+ // If the filter matches, we need to honour include
+ if ( fullName.indexOf( filter ) !== -1 ) {
+ return include;
+ }
+
+ // Otherwise, do the opposite
+ return !include;
+ }
+
+};
+
+// Resets the test setup. Useful for tests that modify the DOM.
+/*
+DEPRECATED: Use multiple tests instead of resetting inside a test.
+Use testStart or testDone for custom cleanup.
+This method will throw an error in 2.0, and will be removed in 2.1
+*/
+QUnit.reset = function() {
+
+ // Return on non-browser environments
+ // This is necessary to not break on node tests
+ if ( typeof window === "undefined" ) {
+ return;
+ }
+
+ var fixture = defined.document && document.getElementById &&
+ document.getElementById( "qunit-fixture" );
+
+ if ( fixture ) {
+ fixture.innerHTML = config.fixture;
+ }
+};
+
+QUnit.pushFailure = function() {
+ if ( !QUnit.config.current ) {
+ throw new Error( "pushFailure() assertion outside test context, in " +
+ sourceFromStacktrace( 2 ) );
+ }
+
+ // Gets current test obj
+ var currentTest = QUnit.config.current;
+
+ return currentTest.pushFailure.apply( currentTest, arguments );
+};
+
+// Based on Java's String.hashCode, a simple but not
+// rigorously collision resistant hashing function
+function generateHash( module, testName ) {
+ var hex,
+ i = 0,
+ hash = 0,
+ str = module + "\x1C" + testName,
+ len = str.length;
+
+ for ( ; i < len; i++ ) {
+ hash = ( ( hash << 5 ) - hash ) + str.charCodeAt( i );
+ hash |= 0;
+ }
+
+ // Convert the possibly negative integer hash code into an 8 character hex string, which isn't
+ // strictly necessary but increases user understanding that the id is a SHA-like hash
+ hex = ( 0x100000000 + hash ).toString( 16 );
+ if ( hex.length < 8 ) {
+ hex = "0000000" + hex;
+ }
+
+ return hex.slice( -8 );
+}
+
+function Assert( testContext ) {
+ this.test = testContext;
+}
+
+// Assert helpers
+QUnit.assert = Assert.prototype = {
+
+ // Specify the number of expected assertions to guarantee that failed test
+ // (no assertions are run at all) don't slip through.
+ expect: function( asserts ) {
+ if ( arguments.length === 1 ) {
+ this.test.expected = asserts;
+ } else {
+ return this.test.expected;
+ }
+ },
+
+ // Increment this Test's semaphore counter, then return a single-use function that
+ // decrements that counter a maximum of once.
+ async: function() {
+ var test = this.test,
+ popped = false;
+
+ test.semaphore += 1;
+ test.usedAsync = true;
+ pauseProcessing();
+
+ return function done() {
+ if ( !popped ) {
+ test.semaphore -= 1;
+ popped = true;
+ resumeProcessing();
+ } else {
+ test.pushFailure( "Called the callback returned from `assert.async` more than once",
+ sourceFromStacktrace( 2 ) );
+ }
+ };
+ },
+
+ // Exports test.push() to the user API
+ push: function( /* result, actual, expected, message */ ) {
+ var assert = this,
+ currentTest = ( assert instanceof Assert && assert.test ) || QUnit.config.current;
+
+ // Backwards compatibility fix.
+ // Allows the direct use of global exported assertions and QUnit.assert.*
+ // Although, it's use is not recommended as it can leak assertions
+ // to other tests from async tests, because we only get a reference to the current test,
+ // not exactly the test where assertion were intended to be called.
+ if ( !currentTest ) {
+ throw new Error( "assertion outside test context, in " + sourceFromStacktrace( 2 ) );
+ }
+
+ if ( currentTest.usedAsync === true && currentTest.semaphore === 0 ) {
+ currentTest.pushFailure( "Assertion after the final `assert.async` was resolved",
+ sourceFromStacktrace( 2 ) );
+
+ // Allow this assertion to continue running anyway...
+ }
+
+ if ( !( assert instanceof Assert ) ) {
+ assert = currentTest.assert;
+ }
+ return assert.test.push.apply( assert.test, arguments );
+ },
+
+ /**
+ * Asserts rough true-ish result.
+ * @name ok
+ * @function
+ * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+ */
+ ok: function( result, message ) {
+ message = message || ( result ? "okay" : "failed, expected argument to be truthy, was: " +
+ QUnit.dump.parse( result ) );
+ this.push( !!result, result, true, message );
+ },
+
+ /**
+ * Assert that the first two arguments are equal, with an optional message.
+ * Prints out both actual and expected values.
+ * @name equal
+ * @function
+ * @example equal( format( "{0} bytes.", 2), "2 bytes.", "replaces {0} with next argument" );
+ */
+ equal: function( actual, expected, message ) {
+ /*jshint eqeqeq:false */
+ this.push( expected == actual, actual, expected, message );
+ },
+
+ /**
+ * @name notEqual
+ * @function
+ */
+ notEqual: function( actual, expected, message ) {
+ /*jshint eqeqeq:false */
+ this.push( expected != actual, actual, expected, message );
+ },
+
+ /**
+ * @name propEqual
+ * @function
+ */
+ propEqual: function( actual, expected, message ) {
+ actual = objectValues( actual );
+ expected = objectValues( expected );
+ this.push( QUnit.equiv( actual, expected ), actual, expected, message );
+ },
+
+ /**
+ * @name notPropEqual
+ * @function
+ */
+ notPropEqual: function( actual, expected, message ) {
+ actual = objectValues( actual );
+ expected = objectValues( expected );
+ this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
+ },
+
+ /**
+ * @name deepEqual
+ * @function
+ */
+ deepEqual: function( actual, expected, message ) {
+ this.push( QUnit.equiv( actual, expected ), actual, expected, message );
+ },
+
+ /**
+ * @name notDeepEqual
+ * @function
+ */
+ notDeepEqual: function( actual, expected, message ) {
+ this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
+ },
+
+ /**
+ * @name strictEqual
+ * @function
+ */
+ strictEqual: function( actual, expected, message ) {
+ this.push( expected === actual, actual, expected, message );
+ },
+
+ /**
+ * @name notStrictEqual
+ * @function
+ */
+ notStrictEqual: function( actual, expected, message ) {
+ this.push( expected !== actual, actual, expected, message );
+ },
+
+ "throws": function( block, expected, message ) {
+ var actual, expectedType,
+ expectedOutput = expected,
+ ok = false;
+
+ // 'expected' is optional unless doing string comparison
+ if ( message == null && typeof expected === "string" ) {
+ message = expected;
+ expected = null;
+ }
+
+ this.test.ignoreGlobalErrors = true;
+ try {
+ block.call( this.test.testEnvironment );
+ } catch (e) {
+ actual = e;
+ }
+ this.test.ignoreGlobalErrors = false;
+
+ if ( actual ) {
+ expectedType = QUnit.objectType( expected );
+
+ // we don't want to validate thrown error
+ if ( !expected ) {
+ ok = true;
+ expectedOutput = null;
+
+ // expected is a regexp
+ } else if ( expectedType === "regexp" ) {
+ ok = expected.test( errorString( actual ) );
+
+ // expected is a string
+ } else if ( expectedType === "string" ) {
+ ok = expected === errorString( actual );
+
+ // expected is a constructor, maybe an Error constructor
+ } else if ( expectedType === "function" && actual instanceof expected ) {
+ ok = true;
+
+ // expected is an Error object
+ } else if ( expectedType === "object" ) {
+ ok = actual instanceof expected.constructor &&
+ actual.name === expected.name &&
+ actual.message === expected.message;
+
+ // expected is a validation function which returns true if validation passed
+ } else if ( expectedType === "function" && expected.call( {}, actual ) === true ) {
+ expectedOutput = null;
+ ok = true;
+ }
+
+ this.push( ok, actual, expectedOutput, message );
+ } else {
+ this.test.pushFailure( message, null, "No exception was thrown." );
+ }
+ }
+};
+
+// Provide an alternative to assert.throws(), for enviroments that consider throws a reserved word
+// Known to us are: Closure Compiler, Narwhal
+(function() {
+ /*jshint sub:true */
+ Assert.prototype.raises = Assert.prototype[ "throws" ];
+}());
+
+// Test for equality any JavaScript type.
+// Author: Philippe Rathé <prathe@gmail.com>
+QUnit.equiv = (function() {
+
+ // Call the o related callback with the given arguments.
+ function bindCallbacks( o, callbacks, args ) {
+ var prop = QUnit.objectType( o );
+ if ( prop ) {
+ if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
+ return callbacks[ prop ].apply( callbacks, args );
+ } else {
+ return callbacks[ prop ]; // or undefined
+ }
+ }
+ }
+
+ // the real equiv function
+ var innerEquiv,
+
+ // stack to decide between skip/abort functions
+ callers = [],
+
+ // stack to avoiding loops from circular referencing
+ parents = [],
+ parentsB = [],
+
+ getProto = Object.getPrototypeOf || function( obj ) {
+ /* jshint camelcase: false, proto: true */
+ return obj.__proto__;
+ },
+ callbacks = (function() {
+
+ // for string, boolean, number and null
+ function useStrictEquality( b, a ) {
+
+ /*jshint eqeqeq:false */
+ if ( b instanceof a.constructor || a instanceof b.constructor ) {
+
+ // to catch short annotation VS 'new' annotation of a
+ // declaration
+ // e.g. var i = 1;
+ // var j = new Number(1);
+ return a == b;
+ } else {
+ return a === b;
+ }
+ }
+
+ return {
+ "string": useStrictEquality,
+ "boolean": useStrictEquality,
+ "number": useStrictEquality,
+ "null": useStrictEquality,
+ "undefined": useStrictEquality,
+
+ "nan": function( b ) {
+ return isNaN( b );
+ },
+
+ "date": function( b, a ) {
+ return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
+ },
+
+ "regexp": function( b, a ) {
+ return QUnit.objectType( b ) === "regexp" &&
+
+ // the regex itself
+ a.source === b.source &&
+
+ // and its modifiers
+ a.global === b.global &&
+
+ // (gmi) ...
+ a.ignoreCase === b.ignoreCase &&
+ a.multiline === b.multiline &&
+ a.sticky === b.sticky;
+ },
+
+ // - skip when the property is a method of an instance (OOP)
+ // - abort otherwise,
+ // initial === would have catch identical references anyway
+ "function": function() {
+ var caller = callers[ callers.length - 1 ];
+ return caller !== Object && typeof caller !== "undefined";
+ },
+
+ "array": function( b, a ) {
+ var i, j, len, loop, aCircular, bCircular;
+
+ // b could be an object literal here
+ if ( QUnit.objectType( b ) !== "array" ) {
+ return false;
+ }
+
+ len = a.length;
+ if ( len !== b.length ) {
+ // safe and faster
+ return false;
+ }
+
+ // track reference to avoid circular references
+ parents.push( a );
+ parentsB.push( b );
+ for ( i = 0; i < len; i++ ) {
+ loop = false;
+ for ( j = 0; j < parents.length; j++ ) {
+ aCircular = parents[ j ] === a[ i ];
+ bCircular = parentsB[ j ] === b[ i ];
+ if ( aCircular || bCircular ) {
+ if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
+ loop = true;
+ } else {
+ parents.pop();
+ parentsB.pop();
+ return false;
+ }
+ }
+ }
+ if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+ parents.pop();
+ parentsB.pop();
+ return false;
+ }
+ }
+ parents.pop();
+ parentsB.pop();
+ return true;
+ },
+
+ "object": function( b, a ) {
+
+ /*jshint forin:false */
+ var i, j, loop, aCircular, bCircular,
+ // Default to true
+ eq = true,
+ aProperties = [],
+ bProperties = [];
+
+ // comparing constructors is more strict than using
+ // instanceof
+ if ( a.constructor !== b.constructor ) {
+
+ // Allow objects with no prototype to be equivalent to
+ // objects with Object as their constructor.
+ if ( !( ( getProto( a ) === null && getProto( b ) === Object.prototype ) ||
+ ( getProto( b ) === null && getProto( a ) === Object.prototype ) ) ) {
+ return false;
+ }
+ }
+
+ // stack constructor before traversing properties
+ callers.push( a.constructor );
+
+ // track reference to avoid circular references
+ parents.push( a );
+ parentsB.push( b );
+
+ // be strict: don't ensure hasOwnProperty and go deep
+ for ( i in a ) {
+ loop = false;
+ for ( j = 0; j < parents.length; j++ ) {
+ aCircular = parents[ j ] === a[ i ];
+ bCircular = parentsB[ j ] === b[ i ];
+ if ( aCircular || bCircular ) {
+ if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
+ loop = true;
+ } else {
+ eq = false;
+ break;
+ }
+ }
+ }
+ aProperties.push( i );
+ if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+ eq = false;
+ break;
+ }
+ }
+
+ parents.pop();
+ parentsB.pop();
+ callers.pop(); // unstack, we are done
+
+ for ( i in b ) {
+ bProperties.push( i ); // collect b's properties
+ }
+
+ // Ensures identical properties name
+ return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
+ }
+ };
+ }());
+
+ innerEquiv = function() { // can take multiple arguments
+ var args = [].slice.apply( arguments );
+ if ( args.length < 2 ) {
+ return true; // end transition
+ }
+
+ return ( (function( a, b ) {
+ if ( a === b ) {
+ return true; // catch the most you can
+ } else if ( a === null || b === null || typeof a === "undefined" ||
+ typeof b === "undefined" ||
+ QUnit.objectType( a ) !== QUnit.objectType( b ) ) {
+
+ // don't lose time with error prone cases
+ return false;
+ } else {
+ return bindCallbacks( a, callbacks, [ b, a ] );
+ }
+
+ // apply transition with (1..n) arguments
+ }( args[ 0 ], args[ 1 ] ) ) &&
+ innerEquiv.apply( this, args.splice( 1, args.length - 1 ) ) );
+ };
+
+ return innerEquiv;
+}());
+
+// Based on jsDump by Ariel Flesler
+// http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html
+QUnit.dump = (function() {
+ function quote( str ) {
+ return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
+ }
+ function literal( o ) {
+ return o + "";
+ }
+ function join( pre, arr, post ) {
+ var s = dump.separator(),
+ base = dump.indent(),
+ inner = dump.indent( 1 );
+ if ( arr.join ) {
+ arr = arr.join( "," + s + inner );
+ }
+ if ( !arr ) {
+ return pre + post;
+ }
+ return [ pre, inner + arr, base + post ].join( s );
+ }
+ function array( arr, stack ) {
+ var i = arr.length,
+ ret = new Array( i );
+
+ if ( dump.maxDepth && dump.depth > dump.maxDepth ) {
+ return "[object Array]";
+ }
+
+ this.up();
+ while ( i-- ) {
+ ret[ i ] = this.parse( arr[ i ], undefined, stack );
+ }
+ this.down();
+ return join( "[", ret, "]" );
+ }
+
+ var reName = /^function (\w+)/,
+ dump = {
+
+ // objType is used mostly internally, you can fix a (custom) type in advance
+ parse: function( obj, objType, stack ) {
+ stack = stack || [];
+ var res, parser, parserType,
+ inStack = inArray( obj, stack );
+
+ if ( inStack !== -1 ) {
+ return "recursion(" + ( inStack - stack.length ) + ")";
+ }
+
+ objType = objType || this.typeOf( obj );
+ parser = this.parsers[ objType ];
+ parserType = typeof parser;
+
+ if ( parserType === "function" ) {
+ stack.push( obj );
+ res = parser.call( this, obj, stack );
+ stack.pop();
+ return res;
+ }
+ return ( parserType === "string" ) ? parser : this.parsers.error;
+ },
+ typeOf: function( obj ) {
+ var type;
+ if ( obj === null ) {
+ type = "null";
+ } else if ( typeof obj === "undefined" ) {
+ type = "undefined";
+ } else if ( QUnit.is( "regexp", obj ) ) {
+ type = "regexp";
+ } else if ( QUnit.is( "date", obj ) ) {
+ type = "date";
+ } else if ( QUnit.is( "function", obj ) ) {
+ type = "function";
+ } else if ( obj.setInterval !== undefined &&
+ obj.document !== undefined &&
+ obj.nodeType === undefined ) {
+ type = "window";
+ } else if ( obj.nodeType === 9 ) {
+ type = "document";
+ } else if ( obj.nodeType ) {
+ type = "node";
+ } else if (
+
+ // native arrays
+ toString.call( obj ) === "[object Array]" ||
+
+ // NodeList objects
+ ( typeof obj.length === "number" && obj.item !== undefined &&
+ ( obj.length ? obj.item( 0 ) === obj[ 0 ] : ( obj.item( 0 ) === null &&
+ obj[ 0 ] === undefined ) ) )
+ ) {
+ type = "array";
+ } else if ( obj.constructor === Error.prototype.constructor ) {
+ type = "error";
+ } else {
+ type = typeof obj;
+ }
+ return type;
+ },
+ separator: function() {
+ return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? "&#160;" : " ";
+ },
+ // extra can be a number, shortcut for increasing-calling-decreasing
+ indent: function( extra ) {
+ if ( !this.multiline ) {
+ return "";
+ }
+ var chr = this.indentChar;
+ if ( this.HTML ) {
+ chr = chr.replace( /\t/g, " " ).replace( / /g, "&#160;" );
+ }
+ return new Array( this.depth + ( extra || 0 ) ).join( chr );
+ },
+ up: function( a ) {
+ this.depth += a || 1;
+ },
+ down: function( a ) {
+ this.depth -= a || 1;
+ },
+ setParser: function( name, parser ) {
+ this.parsers[ name ] = parser;
+ },
+ // The next 3 are exposed so you can use them
+ quote: quote,
+ literal: literal,
+ join: join,
+ //
+ depth: 1,
+ maxDepth: 5,
+
+ // This is the list of parsers, to modify them, use dump.setParser
+ parsers: {
+ window: "[Window]",
+ document: "[Document]",
+ error: function( error ) {
+ return "Error(\"" + error.message + "\")";
+ },
+ unknown: "[Unknown]",
+ "null": "null",
+ "undefined": "undefined",
+ "function": function( fn ) {
+ var ret = "function",
+
+ // functions never have name in IE
+ name = "name" in fn ? fn.name : ( reName.exec( fn ) || [] )[ 1 ];
+
+ if ( name ) {
+ ret += " " + name;
+ }
+ ret += "( ";
+
+ ret = [ ret, dump.parse( fn, "functionArgs" ), "){" ].join( "" );
+ return join( ret, dump.parse( fn, "functionCode" ), "}" );
+ },
+ array: array,
+ nodelist: array,
+ "arguments": array,
+ object: function( map, stack ) {
+ var keys, key, val, i, nonEnumerableProperties,
+ ret = [];
+
+ if ( dump.maxDepth && dump.depth > dump.maxDepth ) {
+ return "[object Object]";
+ }
+
+ dump.up();
+ keys = [];
+ for ( key in map ) {
+ keys.push( key );
+ }
+
+ // Some properties are not always enumerable on Error objects.
+ nonEnumerableProperties = [ "message", "name" ];
+ for ( i in nonEnumerableProperties ) {
+ key = nonEnumerableProperties[ i ];
+ if ( key in map && !( key in keys ) ) {
+ keys.push( key );
+ }
+ }
+ keys.sort();
+ for ( i = 0; i < keys.length; i++ ) {
+ key = keys[ i ];
+ val = map[ key ];
+ ret.push( dump.parse( key, "key" ) + ": " +
+ dump.parse( val, undefined, stack ) );
+ }
+ dump.down();
+ return join( "{", ret, "}" );
+ },
+ node: function( node ) {
+ var len, i, val,
+ open = dump.HTML ? "&lt;" : "<",
+ close = dump.HTML ? "&gt;" : ">",
+ tag = node.nodeName.toLowerCase(),
+ ret = open + tag,
+ attrs = node.attributes;
+
+ if ( attrs ) {
+ for ( i = 0, len = attrs.length; i < len; i++ ) {
+ val = attrs[ i ].nodeValue;
+
+ // IE6 includes all attributes in .attributes, even ones not explicitly
+ // set. Those have values like undefined, null, 0, false, "" or
+ // "inherit".
+ if ( val && val !== "inherit" ) {
+ ret += " " + attrs[ i ].nodeName + "=" +
+ dump.parse( val, "attribute" );
+ }
+ }
+ }
+ ret += close;
+
+ // Show content of TextNode or CDATASection
+ if ( node.nodeType === 3 || node.nodeType === 4 ) {
+ ret += node.nodeValue;
+ }
+
+ return ret + open + "/" + tag + close;
+ },
+
+ // function calls it internally, it's the arguments part of the function
+ functionArgs: function( fn ) {
+ var args,
+ l = fn.length;
+
+ if ( !l ) {
+ return "";
+ }
+
+ args = new Array( l );
+ while ( l-- ) {
+
+ // 97 is 'a'
+ args[ l ] = String.fromCharCode( 97 + l );
+ }
+ return " " + args.join( ", " ) + " ";
+ },
+ // object calls it internally, the key part of an item in a map
+ key: quote,
+ // function calls it internally, it's the content of the function
+ functionCode: "[code]",
+ // node calls it internally, it's an html attribute value
+ attribute: quote,
+ string: quote,
+ date: quote,
+ regexp: literal,
+ number: literal,
+ "boolean": literal
+ },
+ // if true, entities are escaped ( <, >, \t, space and \n )
+ HTML: false,
+ // indentation unit
+ indentChar: " ",
+ // if true, items in a collection, are separated by a \n, else just a space.
+ multiline: true
+ };
+
+ return dump;
+}());
+
+// back compat
+QUnit.jsDump = QUnit.dump;
+
+// For browser, export only select globals
+if ( typeof window !== "undefined" ) {
+
+ // Deprecated
+ // Extend assert methods to QUnit and Global scope through Backwards compatibility
+ (function() {
+ var i,
+ assertions = Assert.prototype;
+
+ function applyCurrent( current ) {
+ return function() {
+ var assert = new Assert( QUnit.config.current );
+ current.apply( assert, arguments );
+ };
+ }
+
+ for ( i in assertions ) {
+ QUnit[ i ] = applyCurrent( assertions[ i ] );
+ }
+ })();
+
+ (function() {
+ var i, l,
+ keys = [
+ "test",
+ "module",
+ "expect",
+ "asyncTest",
+ "start",
+ "stop",
+ "ok",
+ "equal",
+ "notEqual",
+ "propEqual",
+ "notPropEqual",
+ "deepEqual",
+ "notDeepEqual",
+ "strictEqual",
+ "notStrictEqual",
+ "throws"
+ ];
+
+ for ( i = 0, l = keys.length; i < l; i++ ) {
+ window[ keys[ i ] ] = QUnit[ keys[ i ] ];
+ }
+ })();
+
+ window.QUnit = QUnit;
+}
+
+// For nodejs
+if ( typeof module !== "undefined" && module && module.exports ) {
+ module.exports = QUnit;
+
+ // For consistency with CommonJS environments' exports
+ module.exports.QUnit = QUnit;
+}
+
+// For CommonJS with exports, but without module.exports, like Rhino
+if ( typeof exports !== "undefined" && exports ) {
+ exports.QUnit = QUnit;
+}
+
+// Get a reference to the global object, like window in browsers
+}( (function() {
+ return this;
+})() ));
+
+/*istanbul ignore next */
+// jscs:disable maximumLineLength
+/*
+ * Javascript Diff Algorithm
+ * By John Resig (http://ejohn.org/)
+ * Modified by Chu Alan "sprite"
+ *
+ * Released under the MIT license.
+ *
+ * More Info:
+ * http://ejohn.org/projects/javascript-diff-algorithm/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+ */
+QUnit.diff = (function() {
+ var hasOwn = Object.prototype.hasOwnProperty;
+
+ /*jshint eqeqeq:false, eqnull:true */
+ function diff( o, n ) {
+ var i,
+ ns = {},
+ os = {};
+
+ for ( i = 0; i < n.length; i++ ) {
+ if ( !hasOwn.call( ns, n[ i ] ) ) {
+ ns[ n[ i ] ] = {
+ rows: [],
+ o: null
+ };
+ }
+ ns[ n[ i ] ].rows.push( i );
+ }
+
+ for ( i = 0; i < o.length; i++ ) {
+ if ( !hasOwn.call( os, o[ i ] ) ) {
+ os[ o[ i ] ] = {
+ rows: [],
+ n: null
+ };
+ }
+ os[ o[ i ] ].rows.push( i );
+ }
+
+ for ( i in ns ) {
+ if ( hasOwn.call( ns, i ) ) {
+ if ( ns[ i ].rows.length === 1 && hasOwn.call( os, i ) && os[ i ].rows.length === 1 ) {
+ n[ ns[ i ].rows[ 0 ] ] = {
+ text: n[ ns[ i ].rows[ 0 ] ],
+ row: os[ i ].rows[ 0 ]
+ };
+ o[ os[ i ].rows[ 0 ] ] = {
+ text: o[ os[ i ].rows[ 0 ] ],
+ row: ns[ i ].rows[ 0 ]
+ };
+ }
+ }
+ }
+
+ for ( i = 0; i < n.length - 1; i++ ) {
+ if ( n[ i ].text != null && n[ i + 1 ].text == null && n[ i ].row + 1 < o.length && o[ n[ i ].row + 1 ].text == null &&
+ n[ i + 1 ] == o[ n[ i ].row + 1 ] ) {
+
+ n[ i + 1 ] = {
+ text: n[ i + 1 ],
+ row: n[ i ].row + 1
+ };
+ o[ n[ i ].row + 1 ] = {
+ text: o[ n[ i ].row + 1 ],
+ row: i + 1
+ };
+ }
+ }
+
+ for ( i = n.length - 1; i > 0; i-- ) {
+ if ( n[ i ].text != null && n[ i - 1 ].text == null && n[ i ].row > 0 && o[ n[ i ].row - 1 ].text == null &&
+ n[ i - 1 ] == o[ n[ i ].row - 1 ] ) {
+
+ n[ i - 1 ] = {
+ text: n[ i - 1 ],
+ row: n[ i ].row - 1
+ };
+ o[ n[ i ].row - 1 ] = {
+ text: o[ n[ i ].row - 1 ],
+ row: i - 1
+ };
+ }
+ }
+
+ return {
+ o: o,
+ n: n
+ };
+ }
+
+ return function( o, n ) {
+ o = o.replace( /\s+$/, "" );
+ n = n.replace( /\s+$/, "" );
+
+ var i, pre,
+ str = "",
+ out = diff( o === "" ? [] : o.split( /\s+/ ), n === "" ? [] : n.split( /\s+/ ) ),
+ oSpace = o.match( /\s+/g ),
+ nSpace = n.match( /\s+/g );
+
+ if ( oSpace == null ) {
+ oSpace = [ " " ];
+ } else {
+ oSpace.push( " " );
+ }
+
+ if ( nSpace == null ) {
+ nSpace = [ " " ];
+ } else {
+ nSpace.push( " " );
+ }
+
+ if ( out.n.length === 0 ) {
+ for ( i = 0; i < out.o.length; i++ ) {
+ str += "<del>" + out.o[ i ] + oSpace[ i ] + "</del>";
+ }
+ } else {
+ if ( out.n[ 0 ].text == null ) {
+ for ( n = 0; n < out.o.length && out.o[ n ].text == null; n++ ) {
+ str += "<del>" + out.o[ n ] + oSpace[ n ] + "</del>";
+ }
+ }
+
+ for ( i = 0; i < out.n.length; i++ ) {
+ if ( out.n[ i ].text == null ) {
+ str += "<ins>" + out.n[ i ] + nSpace[ i ] + "</ins>";
+ } else {
+
+ // `pre` initialized at top of scope
+ pre = "";
+
+ for ( n = out.n[ i ].row + 1; n < out.o.length && out.o[ n ].text == null; n++ ) {
+ pre += "<del>" + out.o[ n ] + oSpace[ n ] + "</del>";
+ }
+ str += " " + out.n[ i ].text + nSpace[ i ] + pre;
+ }
+ }
+ }
+
+ return str;
+ };
+}());
+// jscs:enable
+
+(function() {
+
+// Deprecated QUnit.init - Ref #530
+// Re-initialize the configuration options
+QUnit.init = function() {
+ var tests, banner, result, qunit,
+ config = QUnit.config;
+
+ config.stats = { all: 0, bad: 0 };
+ config.moduleStats = { all: 0, bad: 0 };
+ config.started = 0;
+ config.updateRate = 1000;
+ config.blocking = false;
+ config.autostart = true;
+ config.autorun = false;
+ config.filter = "";
+ config.queue = [];
+
+ // Return on non-browser environments
+ // This is necessary to not break on node tests
+ if ( typeof window === "undefined" ) {
+ return;
+ }
+
+ qunit = id( "qunit" );
+ if ( qunit ) {
+ qunit.innerHTML =
+ "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+ "<h2 id='qunit-banner'></h2>" +
+ "<div id='qunit-testrunner-toolbar'></div>" +
+ "<h2 id='qunit-userAgent'></h2>" +
+ "<ol id='qunit-tests'></ol>";
+ }
+
+ tests = id( "qunit-tests" );
+ banner = id( "qunit-banner" );
+ result = id( "qunit-testresult" );
+
+ if ( tests ) {
+ tests.innerHTML = "";
+ }
+
+ if ( banner ) {
+ banner.className = "";
+ }
+
+ if ( result ) {
+ result.parentNode.removeChild( result );
+ }
+
+ if ( tests ) {
+ result = document.createElement( "p" );
+ result.id = "qunit-testresult";
+ result.className = "result";
+ tests.parentNode.insertBefore( result, tests );
+ result.innerHTML = "Running...<br />&#160;";
+ }
+};
+
+// Don't load the HTML Reporter on non-Browser environments
+if ( typeof window === "undefined" ) {
+ return;
+}
+
+var config = QUnit.config,
+ hasOwn = Object.prototype.hasOwnProperty,
+ defined = {
+ document: window.document !== undefined,
+ sessionStorage: (function() {
+ var x = "qunit-test-string";
+ try {
+ sessionStorage.setItem( x, x );
+ sessionStorage.removeItem( x );
+ return true;
+ } catch ( e ) {
+ return false;
+ }
+ }())
+ },
+ modulesList = [];
+
+/**
+* Escape text for attribute or text content.
+*/
+function escapeText( s ) {
+ if ( !s ) {
+ return "";
+ }
+ s = s + "";
+
+ // Both single quotes and double quotes (for attributes)
+ return s.replace( /['"<>&]/g, function( s ) {
+ switch ( s ) {
+ case "'":
+ return "&#039;";
+ case "\"":
+ return "&quot;";
+ case "<":
+ return "&lt;";
+ case ">":
+ return "&gt;";
+ case "&":
+ return "&amp;";
+ }
+ });
+}
+
+/**
+ * @param {HTMLElement} elem
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvent( elem, type, fn ) {
+ if ( elem.addEventListener ) {
+
+ // Standards-based browsers
+ elem.addEventListener( type, fn, false );
+ } else if ( elem.attachEvent ) {
+
+ // support: IE <9
+ elem.attachEvent( "on" + type, fn );
+ }
+}
+
+/**
+ * @param {Array|NodeList} elems
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvents( elems, type, fn ) {
+ var i = elems.length;
+ while ( i-- ) {
+ addEvent( elems[ i ], type, fn );
+ }
+}
+
+function hasClass( elem, name ) {
+ return ( " " + elem.className + " " ).indexOf( " " + name + " " ) >= 0;
+}
+
+function addClass( elem, name ) {
+ if ( !hasClass( elem, name ) ) {
+ elem.className += ( elem.className ? " " : "" ) + name;
+ }
+}
+
+function toggleClass( elem, name ) {
+ if ( hasClass( elem, name ) ) {
+ removeClass( elem, name );
+ } else {
+ addClass( elem, name );
+ }
+}
+
+function removeClass( elem, name ) {
+ var set = " " + elem.className + " ";
+
+ // Class name may appear multiple times
+ while ( set.indexOf( " " + name + " " ) >= 0 ) {
+ set = set.replace( " " + name + " ", " " );
+ }
+
+ // trim for prettiness
+ elem.className = typeof set.trim === "function" ? set.trim() : set.replace( /^\s+|\s+$/g, "" );
+}
+
+function id( name ) {
+ return defined.document && document.getElementById && document.getElementById( name );
+}
+
+function getUrlConfigHtml() {
+ var i, j, val,
+ escaped, escapedTooltip,
+ selection = false,
+ len = config.urlConfig.length,
+ urlConfigHtml = "";
+
+ for ( i = 0; i < len; i++ ) {
+ val = config.urlConfig[ i ];
+ if ( typeof val === "string" ) {
+ val = {
+ id: val,
+ label: val
+ };
+ }
+
+ escaped = escapeText( val.id );
+ escapedTooltip = escapeText( val.tooltip );
+
+ if ( config[ val.id ] === undefined ) {
+ config[ val.id ] = QUnit.urlParams[ val.id ];
+ }
+
+ if ( !val.value || typeof val.value === "string" ) {
+ urlConfigHtml += "<input id='qunit-urlconfig-" + escaped +
+ "' name='" + escaped + "' type='checkbox'" +
+ ( val.value ? " value='" + escapeText( val.value ) + "'" : "" ) +
+ ( config[ val.id ] ? " checked='checked'" : "" ) +
+ " title='" + escapedTooltip + "' /><label for='qunit-urlconfig-" + escaped +
+ "' title='" + escapedTooltip + "'>" + val.label + "</label>";
+ } else {
+ urlConfigHtml += "<label for='qunit-urlconfig-" + escaped +
+ "' title='" + escapedTooltip + "'>" + val.label +
+ ": </label><select id='qunit-urlconfig-" + escaped +
+ "' name='" + escaped + "' title='" + escapedTooltip + "'><option></option>";
+
+ if ( QUnit.is( "array", val.value ) ) {
+ for ( j = 0; j < val.value.length; j++ ) {
+ escaped = escapeText( val.value[ j ] );
+ urlConfigHtml += "<option value='" + escaped + "'" +
+ ( config[ val.id ] === val.value[ j ] ?
+ ( selection = true ) && " selected='selected'" : "" ) +
+ ">" + escaped + "</option>";
+ }
+ } else {
+ for ( j in val.value ) {
+ if ( hasOwn.call( val.value, j ) ) {
+ urlConfigHtml += "<option value='" + escapeText( j ) + "'" +
+ ( config[ val.id ] === j ?
+ ( selection = true ) && " selected='selected'" : "" ) +
+ ">" + escapeText( val.value[ j ] ) + "</option>";
+ }
+ }
+ }
+ if ( config[ val.id ] && !selection ) {
+ escaped = escapeText( config[ val.id ] );
+ urlConfigHtml += "<option value='" + escaped +
+ "' selected='selected' disabled='disabled'>" + escaped + "</option>";
+ }
+ urlConfigHtml += "</select>";
+ }
+ }
+
+ return urlConfigHtml;
+}
+
+// Handle "click" events on toolbar checkboxes and "change" for select menus.
+// Updates the URL with the new state of `config.urlConfig` values.
+function toolbarChanged() {
+ var updatedUrl, value,
+ field = this,
+ params = {};
+
+ // Detect if field is a select menu or a checkbox
+ if ( "selectedIndex" in field ) {
+ value = field.options[ field.selectedIndex ].value || undefined;
+ } else {
+ value = field.checked ? ( field.defaultValue || true ) : undefined;
+ }
+
+ params[ field.name ] = value;
+ updatedUrl = setUrl( params );
+
+ if ( "hidepassed" === field.name && "replaceState" in window.history ) {
+ config[ field.name ] = value || false;
+ if ( value ) {
+ addClass( id( "qunit-tests" ), "hidepass" );
+ } else {
+ removeClass( id( "qunit-tests" ), "hidepass" );
+ }
+
+ // It is not necessary to refresh the whole page
+ window.history.replaceState( null, "", updatedUrl );
+ } else {
+ window.location = updatedUrl;
+ }
+}
+
+function setUrl( params ) {
+ var key,
+ querystring = "?";
+
+ params = QUnit.extend( QUnit.extend( {}, QUnit.urlParams ), params );
+
+ for ( key in params ) {
+ if ( hasOwn.call( params, key ) ) {
+ if ( params[ key ] === undefined ) {
+ continue;
+ }
+ querystring += encodeURIComponent( key );
+ if ( params[ key ] !== true ) {
+ querystring += "=" + encodeURIComponent( params[ key ] );
+ }
+ querystring += "&";
+ }
+ }
+ return location.protocol + "//" + location.host +
+ location.pathname + querystring.slice( 0, -1 );
+}
+
+function applyUrlParams() {
+ var selectBox = id( "qunit-modulefilter" ),
+ selection = decodeURIComponent( selectBox.options[ selectBox.selectedIndex ].value ),
+ filter = id( "qunit-filter-input" ).value;
+
+ window.location = setUrl({
+ module: ( selection === "" ) ? undefined : selection,
+ filter: ( filter === "" ) ? undefined : filter,
+
+ // Remove testId filter
+ testId: undefined
+ });
+}
+
+function toolbarUrlConfigContainer() {
+ var urlConfigContainer = document.createElement( "span" );
+
+ urlConfigContainer.innerHTML = getUrlConfigHtml();
+ addClass( urlConfigContainer, "qunit-url-config" );
+
+ // For oldIE support:
+ // * Add handlers to the individual elements instead of the container
+ // * Use "click" instead of "change" for checkboxes
+ addEvents( urlConfigContainer.getElementsByTagName( "input" ), "click", toolbarChanged );
+ addEvents( urlConfigContainer.getElementsByTagName( "select" ), "change", toolbarChanged );
+
+ return urlConfigContainer;
+}
+
+function toolbarLooseFilter() {
+ var filter = document.createElement( "form" ),
+ label = document.createElement( "label" ),
+ input = document.createElement( "input" ),
+ button = document.createElement( "button" );
+
+ addClass( filter, "qunit-filter" );
+
+ label.innerHTML = "Filter: ";
+
+ input.type = "text";
+ input.value = config.filter || "";
+ input.name = "filter";
+ input.id = "qunit-filter-input";
+
+ button.innerHTML = "Go";
+
+ label.appendChild( input );
+
+ filter.appendChild( label );
+ filter.appendChild( button );
+ addEvent( filter, "submit", function( ev ) {
+ applyUrlParams();
+
+ if ( ev && ev.preventDefault ) {
+ ev.preventDefault();
+ }
+
+ return false;
+ });
+
+ return filter;
+}
+
+function toolbarModuleFilterHtml() {
+ var i,
+ moduleFilterHtml = "";
+
+ if ( !modulesList.length ) {
+ return false;
+ }
+
+ modulesList.sort(function( a, b ) {
+ return a.localeCompare( b );
+ });
+
+ moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label>" +
+ "<select id='qunit-modulefilter' name='modulefilter'><option value='' " +
+ ( QUnit.urlParams.module === undefined ? "selected='selected'" : "" ) +
+ ">< All Modules ></option>";
+
+ for ( i = 0; i < modulesList.length; i++ ) {
+ moduleFilterHtml += "<option value='" +
+ escapeText( encodeURIComponent( modulesList[ i ] ) ) + "' " +
+ ( QUnit.urlParams.module === modulesList[ i ] ? "selected='selected'" : "" ) +
+ ">" + escapeText( modulesList[ i ] ) + "</option>";
+ }
+ moduleFilterHtml += "</select>";
+
+ return moduleFilterHtml;
+}
+
+function toolbarModuleFilter() {
+ var toolbar = id( "qunit-testrunner-toolbar" ),
+ moduleFilter = document.createElement( "span" ),
+ moduleFilterHtml = toolbarModuleFilterHtml();
+
+ if ( !toolbar || !moduleFilterHtml ) {
+ return false;
+ }
+
+ moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
+ moduleFilter.innerHTML = moduleFilterHtml;
+
+ addEvent( moduleFilter.lastChild, "change", applyUrlParams );
+
+ toolbar.appendChild( moduleFilter );
+}
+
+function appendToolbar() {
+ var toolbar = id( "qunit-testrunner-toolbar" );
+
+ if ( toolbar ) {
+ toolbar.appendChild( toolbarUrlConfigContainer() );
+ toolbar.appendChild( toolbarLooseFilter() );
+ }
+}
+
+function appendHeader() {
+ var header = id( "qunit-header" );
+
+ if ( header ) {
+ header.innerHTML = "<a href='" +
+ setUrl({ filter: undefined, module: undefined, testId: undefined }) +
+ "'>" + header.innerHTML + "</a> ";
+ }
+}
+
+function appendBanner() {
+ var banner = id( "qunit-banner" );
+
+ if ( banner ) {
+ banner.className = "";
+ }
+}
+
+function appendTestResults() {
+ var tests = id( "qunit-tests" ),
+ result = id( "qunit-testresult" );
+
+ if ( result ) {
+ result.parentNode.removeChild( result );
+ }
+
+ if ( tests ) {
+ tests.innerHTML = "";
+ result = document.createElement( "p" );
+ result.id = "qunit-testresult";
+ result.className = "result";
+ tests.parentNode.insertBefore( result, tests );
+ result.innerHTML = "Running...<br />&#160;";
+ }
+}
+
+function storeFixture() {
+ var fixture = id( "qunit-fixture" );
+ if ( fixture ) {
+ config.fixture = fixture.innerHTML;
+ }
+}
+
+function appendUserAgent() {
+ var userAgent = id( "qunit-userAgent" );
+ if ( userAgent ) {
+ userAgent.innerHTML = "";
+ userAgent.appendChild( document.createTextNode( navigator.userAgent ) );
+ }
+}
+
+function appendTestsList( modules ) {
+ var i, l, x, z, test, moduleObj;
+
+ for ( i = 0, l = modules.length; i < l; i++ ) {
+ moduleObj = modules[ i ];
+
+ if ( moduleObj.name ) {
+ modulesList.push( moduleObj.name );
+ }
+
+ for ( x = 0, z = moduleObj.tests.length; x < z; x++ ) {
+ test = moduleObj.tests[ x ];
+
+ appendTest( test.name, test.testId, moduleObj.name );
+ }
+ }
+}
+
+function appendTest( name, testId, moduleName ) {
+ var title, rerunTrigger, testBlock, assertList,
+ tests = id( "qunit-tests" );
+
+ if ( !tests ) {
+ return;
+ }
+
+ title = document.createElement( "strong" );
+ title.innerHTML = getNameHtml( name, moduleName );
+
+ rerunTrigger = document.createElement( "a" );
+ rerunTrigger.innerHTML = "Rerun";
+ rerunTrigger.href = setUrl({ testId: testId });
+
+ testBlock = document.createElement( "li" );
+ testBlock.appendChild( title );
+ testBlock.appendChild( rerunTrigger );
+ testBlock.id = "qunit-test-output-" + testId;
+
+ assertList = document.createElement( "ol" );
+ assertList.className = "qunit-assert-list";
+
+ testBlock.appendChild( assertList );
+
+ tests.appendChild( testBlock );
+}
+
+// HTML Reporter initialization and load
+QUnit.begin(function( details ) {
+ var qunit = id( "qunit" );
+
+ // Fixture is the only one necessary to run without the #qunit element
+ storeFixture();
+
+ if ( qunit ) {
+ qunit.innerHTML =
+ "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+ "<h2 id='qunit-banner'></h2>" +
+ "<div id='qunit-testrunner-toolbar'></div>" +
+ "<h2 id='qunit-userAgent'></h2>" +
+ "<ol id='qunit-tests'></ol>";
+ }
+
+ appendHeader();
+ appendBanner();
+ appendTestResults();
+ appendUserAgent();
+ appendToolbar();
+ appendTestsList( details.modules );
+ toolbarModuleFilter();
+
+ if ( qunit && config.hidepassed ) {
+ addClass( qunit.lastChild, "hidepass" );
+ }
+});
+
+QUnit.done(function( details ) {
+ var i, key,
+ banner = id( "qunit-banner" ),
+ tests = id( "qunit-tests" ),
+ html = [
+ "Tests completed in ",
+ details.runtime,
+ " milliseconds.<br />",
+ "<span class='passed'>",
+ details.passed,
+ "</span> assertions of <span class='total'>",
+ details.total,
+ "</span> passed, <span class='failed'>",
+ details.failed,
+ "</span> failed."
+ ].join( "" );
+
+ if ( banner ) {
+ banner.className = details.failed ? "qunit-fail" : "qunit-pass";
+ }
+
+ if ( tests ) {
+ id( "qunit-testresult" ).innerHTML = html;
+ }
+
+ if ( config.altertitle && defined.document && document.title ) {
+
+ // show ✖ for good, ✔ for bad suite result in title
+ // use escape sequences in case file gets loaded with non-utf-8-charset
+ document.title = [
+ ( details.failed ? "\u2716" : "\u2714" ),
+ document.title.replace( /^[\u2714\u2716] /i, "" )
+ ].join( " " );
+ }
+
+ // clear own sessionStorage items if all tests passed
+ if ( config.reorder && defined.sessionStorage && details.failed === 0 ) {
+ for ( i = 0; i < sessionStorage.length; i++ ) {
+ key = sessionStorage.key( i++ );
+ if ( key.indexOf( "qunit-test-" ) === 0 ) {
+ sessionStorage.removeItem( key );
+ }
+ }
+ }
+
+ // scroll back to top to show results
+ if ( config.scrolltop && window.scrollTo ) {
+ window.scrollTo( 0, 0 );
+ }
+});
+
+function getNameHtml( name, module ) {
+ var nameHtml = "";
+
+ if ( module ) {
+ nameHtml = "<span class='module-name'>" + escapeText( module ) + "</span>: ";
+ }
+
+ nameHtml += "<span class='test-name'>" + escapeText( name ) + "</span>";
+
+ return nameHtml;
+}
+
+QUnit.testStart(function( details ) {
+ var running, testBlock;
+
+ testBlock = id( "qunit-test-output-" + details.testId );
+ if ( testBlock ) {
+ testBlock.className = "running";
+ } else {
+
+ // Report later registered tests
+ appendTest( details.name, details.testId, details.module );
+ }
+
+ running = id( "qunit-testresult" );
+ if ( running ) {
+ running.innerHTML = "Running: <br />" + getNameHtml( details.name, details.module );
+ }
+
+});
+
+QUnit.log(function( details ) {
+ var assertList, assertLi,
+ message, expected, actual,
+ testItem = id( "qunit-test-output-" + details.testId );
+
+ if ( !testItem ) {
+ return;
+ }
+
+ message = escapeText( details.message ) || ( details.result ? "okay" : "failed" );
+ message = "<span class='test-message'>" + message + "</span>";
+ message += "<span class='runtime'>@ " + details.runtime + " ms</span>";
+
+ // pushFailure doesn't provide details.expected
+ // when it calls, it's implicit to also not show expected and diff stuff
+ // Also, we need to check details.expected existence, as it can exist and be undefined
+ if ( !details.result && hasOwn.call( details, "expected" ) ) {
+ expected = escapeText( QUnit.dump.parse( details.expected ) );
+ actual = escapeText( QUnit.dump.parse( details.actual ) );
+ message += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" +
+ expected +
+ "</pre></td></tr>";
+
+ if ( actual !== expected ) {
+ message += "<tr class='test-actual'><th>Result: </th><td><pre>" +
+ actual + "</pre></td></tr>" +
+ "<tr class='test-diff'><th>Diff: </th><td><pre>" +
+ QUnit.diff( expected, actual ) + "</pre></td></tr>";
+ }
+
+ if ( details.source ) {
+ message += "<tr class='test-source'><th>Source: </th><td><pre>" +
+ escapeText( details.source ) + "</pre></td></tr>";
+ }
+
+ message += "</table>";
+
+ // this occours when pushFailure is set and we have an extracted stack trace
+ } else if ( !details.result && details.source ) {
+ message += "<table>" +
+ "<tr class='test-source'><th>Source: </th><td><pre>" +
+ escapeText( details.source ) + "</pre></td></tr>" +
+ "</table>";
+ }
+
+ assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
+
+ assertLi = document.createElement( "li" );
+ assertLi.className = details.result ? "pass" : "fail";
+ assertLi.innerHTML = message;
+ assertList.appendChild( assertLi );
+});
+
+QUnit.testDone(function( details ) {
+ var testTitle, time, testItem, assertList,
+ good, bad, testCounts, skipped,
+ tests = id( "qunit-tests" );
+
+ if ( !tests ) {
+ return;
+ }
+
+ testItem = id( "qunit-test-output-" + details.testId );
+
+ assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
+
+ good = details.passed;
+ bad = details.failed;
+
+ // store result when possible
+ if ( config.reorder && defined.sessionStorage ) {
+ if ( bad ) {
+ sessionStorage.setItem( "qunit-test-" + details.module + "-" + details.name, bad );
+ } else {
+ sessionStorage.removeItem( "qunit-test-" + details.module + "-" + details.name );
+ }
+ }
+
+ if ( bad === 0 ) {
+ addClass( assertList, "qunit-collapsed" );
+ }
+
+ // testItem.firstChild is the test name
+ testTitle = testItem.firstChild;
+
+ testCounts = bad ?
+ "<b class='failed'>" + bad + "</b>, " + "<b class='passed'>" + good + "</b>, " :
+ "";
+
+ testTitle.innerHTML += " <b class='counts'>(" + testCounts +
+ details.assertions.length + ")</b>";
+
+ if ( details.skipped ) {
+ testItem.className = "skipped";
+ skipped = document.createElement( "em" );
+ skipped.className = "qunit-skipped-label";
+ skipped.innerHTML = "skipped";
+ testItem.insertBefore( skipped, testTitle );
+ } else {
+ addEvent( testTitle, "click", function() {
+ toggleClass( assertList, "qunit-collapsed" );
+ });
+
+ testItem.className = bad ? "fail" : "pass";
+
+ time = document.createElement( "span" );
+ time.className = "runtime";
+ time.innerHTML = details.runtime + " ms";
+ testItem.insertBefore( time, assertList );
+ }
+});
+
+if ( !defined.document || document.readyState === "complete" ) {
+ config.pageLoaded = true;
+ config.autorun = true;
+}
+
+if ( defined.document ) {
+ addEvent( window, "load", QUnit.load );
+}
+
+})();
diff --git a/resources/src/jquery.json-deprecate.js b/resources/src/jquery.json-deprecate.js
deleted file mode 100644
index f38decd9..00000000
--- a/resources/src/jquery.json-deprecate.js
+++ /dev/null
@@ -1,8 +0,0 @@
-( function ( mw, $ ) {
- // @deprecated since 1.24. The 'jquery.json' module will be removed in MW 1.25. Use the 'json' module.
-
- mw.log.deprecate( $, 'toJSON', $.toJSON, 'Use JSON.stringify instead (module "json" for polyfill).' );
- mw.log.deprecate( $, 'evalJSON', $.evalJSON, 'Use JSON.parse instead (module "json" for polyfill).' );
- mw.log.deprecate( $, 'secureEvalJSON', $.secureEvalJSON, 'Use JSON.parse instead (module "json" for polyfill).' );
- mw.log.deprecate( $, 'quoteString', $.quoteString, 'Use JSON.stringify instead (module "json" for polyfill).' );
-}( mediaWiki, jQuery ) );
diff --git a/resources/src/jquery.tipsy/jquery.tipsy.js b/resources/src/jquery.tipsy/jquery.tipsy.js
index 58a99a59..2a37fa86 100644
--- a/resources/src/jquery.tipsy/jquery.tipsy.js
+++ b/resources/src/jquery.tipsy/jquery.tipsy.js
@@ -6,7 +6,7 @@
// * This installation of tipsy includes several local modifications to both Javascript and CSS.
// Please be careful when upgrading.
-(function($) {
+( function ( mw, $ ) {
function maybeCall(thing, ctx) {
return (typeof thing == 'function') ? (thing.call(ctx)) : thing;
@@ -182,11 +182,22 @@
if (!options.live) this.each(function() { get(this); });
- if (options.trigger != 'manual') {
- var binder = options.live ? 'live' : 'bind',
- eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
+ if ( options.trigger != 'manual' ) {
+ var eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
- this[binder](eventIn, enter)[binder](eventOut, leave);
+ if ( options.live ) {
+ mw.track( 'mw.deprecate', 'tipsy-live' );
+ mw.log.warn( 'Use of the "live" option of jquery.tipsy is deprecated.' );
+ // XXX: The official status of 'context' is deprecated, and the official status of
+ // 'selector' is removed, so this really needs to go.
+ $( this.context )
+ .on( eventIn, this.selector, enter )
+ .on( eventOut, this.selector, leave );
+ } else {
+ this
+ .on( eventIn, enter )
+ .on( eventOut, leave );
+ }
}
return this;
@@ -256,4 +267,4 @@
}
};
-})(jQuery);
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/jquery/jquery.accessKeyLabel.js b/resources/src/jquery/jquery.accessKeyLabel.js
index 7b49cb2d..867c25e7 100644
--- a/resources/src/jquery/jquery.accessKeyLabel.js
+++ b/resources/src/jquery/jquery.accessKeyLabel.js
@@ -8,7 +8,7 @@
// Cached access key prefix for used browser
var cachedAccessKeyPrefix,
- // Wether to use 'test-' instead of correct prefix (used for testing)
+ // Whether to use 'test-' instead of correct prefix (used for testing)
useTestPrefix = false,
// tag names which can have a label tag
diff --git a/resources/src/jquery/jquery.arrowSteps.js b/resources/src/jquery/jquery.arrowSteps.js
index f8641e10..629ce32c 100644
--- a/resources/src/jquery/jquery.arrowSteps.js
+++ b/resources/src/jquery/jquery.arrowSteps.js
@@ -80,7 +80,7 @@
$.each( $steps, function ( i, step ) {
var $step = $( step );
if ( $step.is( selector ) ) {
- if ($previous) {
+ if ( $previous ) {
$previous.addClass( 'tail' );
}
$step.addClass( 'head' );
diff --git a/resources/src/jquery/jquery.badge.css b/resources/src/jquery/jquery.badge.css
index fa7ea702..34cdf76c 100644
--- a/resources/src/jquery/jquery.badge.css
+++ b/resources/src/jquery/jquery.badge.css
@@ -13,7 +13,7 @@
font-weight: bold;
color: white;
vertical-align: baseline;
- text-shadow: 0 1px rgba(0, 0, 0, 0.4);
+ text-shadow: 0 1px rgba(0, 0, 0, 0.4);
}
.mw-badge-inline {
diff --git a/resources/src/jquery/jquery.badge.js b/resources/src/jquery/jquery.badge.js
index 023b6e28..77738661 100644
--- a/resources/src/jquery/jquery.badge.js
+++ b/resources/src/jquery/jquery.badge.js
@@ -45,7 +45,8 @@
$.fn.badge = function ( text, inline, displayZero ) {
var $badge = this.find( '.mw-badge' ),
badgeStyleClass = 'mw-badge-' + ( inline ? 'inline' : 'overlay' ),
- isImportant = true, displayBadge = true;
+ isImportant = true,
+ displayBadge = true;
// If we're displaying zero, ensure style to be non-important
if ( mw.language.convertNumber( text, true ) === 0 ) {
diff --git a/resources/src/jquery/jquery.confirmable.js b/resources/src/jquery/jquery.confirmable.js
index 339e65a4..1ecce6ca 100644
--- a/resources/src/jquery/jquery.confirmable.js
+++ b/resources/src/jquery/jquery.confirmable.js
@@ -40,6 +40,8 @@
* @param {string} [options.i18n.confirm] Text to use for the confirmation question.
* @param {string} [options.i18n.yes] Text to use for the 'Yes' button.
* @param {string} [options.i18n.no] Text to use for the 'No' button.
+ * @param {string} [options.i18n.yesTitle] Title text to use for the 'Yes' button.
+ * @param {string} [options.i18n.noTitle] Title text to use for the 'No' button.
*
* @chainable
*/
@@ -108,6 +110,9 @@
if ( options.handler ) {
$buttonYes.on( options.events, options.handler );
}
+ if ( options.i18n.yesTitle ) {
+ $buttonYes.attr( 'title', options.i18n.yesTitle );
+ }
$buttonYes = options.buttonCallback( $buttonYes, 'yes' );
// Clone it without any events and prevent default action to represent the 'No' button.
@@ -120,6 +125,11 @@
$interface.css( 'width', 0 );
e.preventDefault();
} );
+ if ( options.i18n.noTitle ) {
+ $buttonNo.attr( 'title', options.i18n.noTitle );
+ } else {
+ $buttonNo.removeAttr( 'title' );
+ }
$buttonNo = options.buttonCallback( $buttonNo, 'no' );
// Prevent memory leaks
@@ -164,7 +174,9 @@
space: ' ',
confirm: 'Are you sure?',
yes: 'Yes',
- no: 'No'
+ no: 'No',
+ yesTitle: undefined,
+ noTitle: undefined
}
};
}( jQuery ) );
diff --git a/resources/src/jquery/jquery.confirmable.mediawiki.js b/resources/src/jquery/jquery.confirmable.mediawiki.js
index d4a106e3..daf23a99 100644
--- a/resources/src/jquery/jquery.confirmable.mediawiki.js
+++ b/resources/src/jquery/jquery.confirmable.mediawiki.js
@@ -9,6 +9,8 @@
space: mw.message( 'word-separator' ).text(),
confirm: mw.message( 'confirmable-confirm', mw.user ).text(),
yes: mw.message( 'confirmable-yes' ).text(),
- no: mw.message( 'confirmable-no' ).text()
+ no: mw.message( 'confirmable-no' ).text(),
+ yesTitle: undefined,
+ noTitle: undefined
};
}( mediaWiki, jQuery ) );
diff --git a/resources/src/jquery/jquery.expandableField.js b/resources/src/jquery/jquery.expandableField.js
index 732cc6ec..48341bc5 100644
--- a/resources/src/jquery/jquery.expandableField.js
+++ b/resources/src/jquery/jquery.expandableField.js
@@ -134,7 +134,7 @@
// Store the context for next time
$( this ).data( 'expandableField-context', context );
} );
- return returnValue !== undefined ? returnValue : $(this);
+ return returnValue !== undefined ? returnValue : $( this );
};
}( jQuery ) );
diff --git a/resources/src/jquery/jquery.footHovzer.js b/resources/src/jquery/jquery.footHovzer.js
index de745c33..e601ddb1 100644
--- a/resources/src/jquery/jquery.footHovzer.js
+++ b/resources/src/jquery/jquery.footHovzer.js
@@ -2,7 +2,7 @@
* @class jQuery.plugin.footHovzer
*/
( function ( $ ) {
- var $hovzer, footHovzer, prevHeight, newHeight;
+ var $hovzer, footHovzer, $spacer;
function getHovzer() {
if ( $hovzer === undefined ) {
@@ -46,15 +46,15 @@
var $body;
$body = $( 'body' );
- if ( prevHeight === undefined ) {
- prevHeight = getHovzer().outerHeight( /* includeMargin = */ true );
- $body.css( 'paddingBottom', '+=' + prevHeight + 'px' );
- } else {
- newHeight = getHovzer().outerHeight( true );
- $body.css( 'paddingBottom', ( parseFloat( $body.css( 'paddingBottom' ) ) - prevHeight ) + newHeight );
- prevHeight = newHeight;
+ if ( $spacer === undefined ) {
+ $spacer = $( '<div>' ).attr( 'id', 'jquery-foot-hovzer-spacer' );
+ $spacer.appendTo( $body );
}
+ // Ensure CSS is applied by browser before using .outerHeight()
+ setTimeout( function () {
+ $spacer.css( 'height', getHovzer().outerHeight( /* includeMargin = */ true ) );
+ }, 0 );
}
};
diff --git a/resources/src/jquery/jquery.getAttrs.js b/resources/src/jquery/jquery.getAttrs.js
index c44831c4..64827fb7 100644
--- a/resources/src/jquery/jquery.getAttrs.js
+++ b/resources/src/jquery/jquery.getAttrs.js
@@ -2,38 +2,37 @@
* @class jQuery.plugin.getAttrs
*/
+function serializeControls( controls ) {
+ var i,
+ data = {},
+ len = controls.length;
+
+ for ( i = 0; i < len; i++ ) {
+ data[ controls[i].name ] = controls[i].value;
+ }
+
+ return data;
+}
+
/**
* Get the attributes of an element directy as a plain object.
*
- * If there are more elements in the collection, like most jQuery get/read methods,
- * this method will use the first element in the collection.
- *
- * In IE6, the `attributes` map of a node includes *all* allowed attributes
- * for an element (including those not set). Those will have values like
- * `undefined`, `null`, `0`, `false`, `""` or `"inherit"`.
+ * If there is more than one element in the collection, similar to most other jQuery getter methods,
+ * this will use the first element in the collection.
*
- * However there may be attributes genuinely set to one of those values, and there
- * is no way to distinguish between attributes set to that and those not set and
- * it being the default. If you need them, set `all` to `true`. They are filtered out
- * by default.
- *
- * @param {boolean} [all=false]
* @return {Object}
*/
-jQuery.fn.getAttrs = function ( all ) {
- var map = this[0].attributes,
- attrs = {},
- len = map.length,
- i, v;
-
- for ( i = 0; i < len; i++ ) {
- v = map[i].nodeValue;
- if ( all || ( v && v !== 'inherit' ) ) {
- attrs[ map[i].nodeName ] = v;
- }
- }
+jQuery.fn.getAttrs = function () {
+ return serializeControls( this[0].attributes );
+};
- return attrs;
+/**
+ * Get form data as a plain object mapping form control names to their values.
+ *
+ * @return {Object}
+ */
+jQuery.fn.serializeObject = function () {
+ return serializeControls( this.serializeArray() );
};
/**
diff --git a/resources/src/jquery/jquery.hidpi.js b/resources/src/jquery/jquery.hidpi.js
index 4ecfeb88..8fca0567 100644
--- a/resources/src/jquery/jquery.hidpi.js
+++ b/resources/src/jquery/jquery.hidpi.js
@@ -73,11 +73,11 @@ $.fn.hidpi = function () {
match;
if ( typeof srcset === 'string' && srcset !== '' ) {
match = $.matchSrcSet( devicePixelRatio, srcset );
- if (match !== null ) {
+ if ( match !== null ) {
$img.attr( 'src', match );
}
}
- });
+ } );
}
return $target;
diff --git a/resources/src/jquery/jquery.makeCollapsible.css b/resources/src/jquery/jquery.makeCollapsible.css
index 0f471509..2e5efbac 100644
--- a/resources/src/jquery/jquery.makeCollapsible.css
+++ b/resources/src/jquery/jquery.makeCollapsible.css
@@ -6,18 +6,38 @@
-ms-user-select: none;
user-select: none;
}
+/* Align the toggle based on the direction of the content language */
+/* @noflip */
+.mw-content-ltr .mw-collapsible-toggle,
+.mw-content-rtl .mw-content-ltr .mw-collapsible-toggle {
+ float: right;
+}
+/* @noflip */
+.mw-content-rtl .mw-collapsible-toggle,
+.mw-content-ltr .mw-content-rtl .mw-collapsible-toggle {
+ float: left;
+}
+
.mw-customtoggle,
.mw-collapsible-toggle {
cursor: pointer;
}
/* collapse links in captions should be inline */
-caption .mw-collapsible-toggle {
+caption .mw-collapsible-toggle,
+.mw-content-ltr caption .mw-collapsible-toggle,
+.mw-content-rtl caption .mw-collapsible-toggle,
+.mw-content-rtl .mw-content-ltr caption .mw-collapsible-toggle,
+.mw-content-ltr .mw-content-rtl caption .mw-collapsible-toggle {
float: none;
}
/* list-items go as wide as their parent element, don't float them inside list items */
-li .mw-collapsible-toggle {
+li .mw-collapsible-toggle,
+.mw-content-ltr li .mw-collapsible-toggle,
+.mw-content-rtl li .mw-collapsible-toggle,
+.mw-content-rtl .mw-content-ltr li .mw-collapsible-toggle,
+.mw-content-ltr .mw-content-rtl li .mw-collapsible-toggle {
float: none;
}
diff --git a/resources/src/jquery/jquery.makeCollapsible.js b/resources/src/jquery/jquery.makeCollapsible.js
index c4e25203..f7c42177 100644
--- a/resources/src/jquery/jquery.makeCollapsible.js
+++ b/resources/src/jquery/jquery.makeCollapsible.js
@@ -208,7 +208,7 @@
* Enable collapsible-functionality on all elements in the collection.
*
* - Will prevent binding twice to the same element.
- * - Initial state is expanded by default, this can be overriden by adding class
+ * - Initial state is expanded by default, this can be overridden by adding class
* "mw-collapsed" to the "mw-collapsible" element.
* - Elements made collapsible have jQuery data "mw-made-collapsible" set to true.
* - The inner content is wrapped in a "div.mw-collapsible-content" (except for tables and lists).
@@ -330,7 +330,7 @@
.prop( 'tabIndex', 0 );
}
} else {
- // The toggle-link will be in one the the cells (td or th) of the first row
+ // The toggle-link will be in one of the cells (td or th) of the first row
$firstItem = $collapsible.find( 'tr:first th, tr:first td' );
$toggle = $firstItem.find( '> .mw-collapsible-toggle' );
diff --git a/resources/src/jquery/jquery.mwExtension.js b/resources/src/jquery/jquery.mwExtension.js
index dc7aaa45..e6e33ade 100644
--- a/resources/src/jquery/jquery.mwExtension.js
+++ b/resources/src/jquery/jquery.mwExtension.js
@@ -15,16 +15,16 @@
return str.charAt( 0 ).toUpperCase() + str.slice( 1 );
},
escapeRE: function ( str ) {
- return str.replace ( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
+ return str.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
},
isDomElement: function ( el ) {
return !!el && !!el.nodeType;
},
isEmpty: function ( v ) {
var key;
- if ( v === '' || v === 0 || v === '0' || v === null
- || v === false || v === undefined )
- {
+ if (
+ v === '' || v === 0 || v === '0' || v === null || v === false || v === undefined
+ ) {
return true;
}
// the for-loop could potentially contain prototypes
diff --git a/resources/src/jquery/jquery.placeholder.js b/resources/src/jquery/jquery.placeholder.js
index d4580190..d50422e2 100644
--- a/resources/src/jquery/jquery.placeholder.js
+++ b/resources/src/jquery/jquery.placeholder.js
@@ -13,7 +13,7 @@
* @version 2.1.0
* @license MIT
*/
-(function ($) {
+( function ($) {
var isInputSupported = 'placeholder' in document.createElement('input'),
isTextareaSupported = 'placeholder' in document.createElement('textarea'),
@@ -49,7 +49,7 @@
$this
.filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')
- .filter(function () {
+ .filter( function () {
return !$(this).data('placeholder-enabled');
})
.bind({
@@ -114,12 +114,12 @@
propHooks.value = hooks;
}
- $(function () {
+ $( function () {
// Look for forms
$(document).delegate('form', 'submit.placeholder', function () {
// Clear the placeholder values so they don't get submitted
var $inputs = $('.placeholder', this).each(clearPlaceholder);
- setTimeout(function () {
+ setTimeout( function () {
$inputs.each(setPlaceholder);
}, 10);
});
@@ -127,7 +127,7 @@
// Clear placeholder values upon page reload
$(window).bind('beforeunload.placeholder', function () {
- $('.placeholder').each(function () {
+ $('.placeholder').each( function () {
this.value = '';
});
});
diff --git a/resources/src/jquery/jquery.qunit.completenessTest.js b/resources/src/jquery/jquery.qunit.completenessTest.js
index 8d38401e..556bf8c7 100644
--- a/resources/src/jquery/jquery.qunit.completenessTest.js
+++ b/resources/src/jquery/jquery.qunit.completenessTest.js
@@ -17,8 +17,8 @@
var util,
hasOwn = Object.prototype.hasOwnProperty,
- log = (window.console && window.console.log)
- ? function () { return window.console.log.apply(window.console, arguments); }
+ log = ( window.console && window.console.log )
+ ? function () { return window.console.log.apply( window.console, arguments ); }
: function () {};
// Simplified version of a few jQuery methods, except that they don't
@@ -91,7 +91,7 @@
// Restore warnings
mw.log.warn = warn;
warn = undefined;
- });
+ } );
QUnit.done( function () {
that.populateMissingTests();
@@ -114,7 +114,7 @@
var elItem = document.createElement( 'li' );
elItem.textContent = key;
elList.appendChild( elItem );
- });
+ } );
elFoot = document.createElement( 'p' );
elFoot.innerHTML = '<em>&mdash; CompletenessTest</em>';
@@ -133,7 +133,7 @@
util.each( style, function ( key, value ) {
elOutputWrapper.style[key] = value;
- });
+ } );
return elOutputWrapper;
}
@@ -171,7 +171,7 @@
if ( toolbar ) {
toolbar.insertBefore( testResults, toolbar.firstChild );
}
- });
+ } );
return this;
}
@@ -248,7 +248,7 @@
var ct = this;
util.each( ct.injectionTracker, function ( key ) {
ct.hasTest( key );
- });
+ } );
},
/**
diff --git a/resources/src/jquery/jquery.suggestions.js b/resources/src/jquery/jquery.suggestions.js
index 3369cde2..813c37ce 100644
--- a/resources/src/jquery/jquery.suggestions.js
+++ b/resources/src/jquery/jquery.suggestions.js
@@ -1,58 +1,102 @@
/**
* This plugin provides a generic way to add suggestions to a text box.
*
- * Usage:
- *
* Set options:
+ *
* $( '#textbox' ).suggestions( { option1: value1, option2: value2 } );
* $( '#textbox' ).suggestions( option, value );
+ *
* Get option:
+ *
* value = $( '#textbox' ).suggestions( option );
+ *
* Initialize:
+ *
* $( '#textbox' ).suggestions();
*
- * Options:
+ * Uses jQuery.suggestions singleteon internally.
*
- * fetch(query): Callback that should fetch suggestions and set the suggestions property.
- * Executed in the context of the textbox
- * Type: Function
- * cancel: Callback function to call when any pending asynchronous suggestions fetches
- * should be canceled. Executed in the context of the textbox
- * Type: Function
- * special: Set of callbacks for rendering and selecting
- * Type: Object of Functions 'render' and 'select'
- * result: Set of callbacks for rendering and selecting
- * Type: Object of Functions 'render' and 'select'
- * $region: jQuery selection of element to place the suggestions below and match width of
- * Type: jQuery Object, Default: $( this )
- * suggestions: Suggestions to display
- * Type: Array of strings
- * maxRows: Maximum number of suggestions to display at one time
- * Type: Number, Range: 1 - 100, Default: 7
- * delay: Number of ms to wait for the user to stop typing
- * Type: Number, Range: 0 - 1200, Default: 120
- * cache: Whether to cache results from a fetch
- * Type: Boolean, Default: false
- * cacheMaxAge: Number of ms to cache results from a fetch
- * Type: Number, Range: 1 - Infinity, Default: 60000 (1 minute)
- * submitOnClick: Whether to submit the form containing the textbox when a suggestion is clicked
- * Type: Boolean, Default: false
- * maxExpandFactor: Maximum suggestions box width relative to the textbox width. If set
- * to e.g. 2, the suggestions box will never be grown beyond 2 times the width of the textbox.
- * Type: Number, Range: 1 - infinity, Default: 3
- * expandFrom: Which direction to offset the suggestion box from.
- * Values 'start' and 'end' translate to left and right respectively depending on the
- * directionality of the current document, according to $( 'html' ).css( 'direction' ).
- * Type: String, default: 'auto', options: 'left', 'right', 'start', 'end', 'auto'.
- * positionFromLeft: Sets expandFrom=left, for backwards compatibility
- * Type: Boolean, Default: true
- * highlightInput: Whether to hightlight matched portions of the input or not
- * Type: Boolean, Default: false
+ * @class jQuery.plugin.suggestions
+ */
+/**
+ * @method suggestions
+ * @return {jQuery}
+ * @chainable
+ *
+ * @param {Object} options
+ *
+ * @param {Function} [options.fetch] Callback that should fetch suggestions and set the suggestions
+ * property. Called in context of the text box.
+ * @param {string} options.fetch.query
+ * @param {Function} options.fetch.response Callback to receive the suggestions with
+ * @param {Array} options.fetch.response.suggestions
+ * @param {number} options.fetch.maxRows
+ *
+ * @param {Function} [options.cancel] Callback function to call when any pending asynchronous
+ * suggestions fetches. Called in context of the text box.
+ *
+ * @param {Object} [options.special] Set of callbacks for rendering and selecting.
+ *
+ * @param {Function} options.special.render Called in context of the suggestions-special element.
+ * @param {string} options.special.render.query
+ * @param {Object} options.special.render.context
+ *
+ * @param {Function} options.special.select Called in context of the suggestions-result-current element.
+ * @param {jQuery} options.special.select.$textbox
+ *
+ * @param {Object} [options.result] Set of callbacks for rendering and selecting
+ *
+ * @param {Function} options.result.render Called in context of the suggestions-result element.
+ * @param {string} options.result.render.suggestion
+ * @param {Object} options.result.render.context
+ *
+ * @param {Function} options.result.select Called in context of the suggestions-result-current element.
+ * @param {jQuery} options.result.select.$textbox
+ *
+ * @param {jQuery} [options.$region=this] The element to place the suggestions below and match width of.
+ *
+ * @param {string[]} [options.suggestions] Array of suggestions to display.
+ *
+ * @param {number} [options.maxRows=10] Maximum number of suggestions to display at one time.
+ * Must be between 1 and 100.
+ *
+ * @param {number} [options.delay=120] Number of milliseconds to wait for the user to stop typing.
+ * Must be between 0 and 1200.
+ *
+ * @param {boolean} [options.cache=false] Whether to cache results from a fetch.
+ *
+ * @param {number} [options.cacheMaxAge=60000] Number of milliseconds to cache results from a fetch.
+ * Must be higher than 1. Defaults to 1 minute.
+ *
+ * @param {boolean} [options.submitOnClick=false] Whether to submit the form containing the textbox
+ * when a suggestion is clicked.
+ *
+ * @param {number} [options.maxExpandFactor=3] Maximum suggestions box width relative to the textbox
+ * width. If set to e.g. 2, the suggestions box will never be grown beyond 2 times the width of
+ * the textbox. Must be higher than 1.
+ *
+ * @param {string} [options.expandFrom=auto] Which direction to offset the suggestion box from.
+ * Values 'start' and 'end' translate to left and right respectively depending on the directionality
+ * of the current document, according to `$( 'html' ).css( 'direction' )`.
+ * Valid values: "left", "right", "start", "end", and "auto".
+ *
+ * @param {boolean} [options.positionFromLeft] Sets `expandFrom=left`, for backwards
+ * compatibility.
+ *
+ * @param {boolean} [options.highlightInput=false] Whether to hightlight matched portions of the
+ * input or not.
*/
( function ( $ ) {
var hasOwn = Object.hasOwnProperty;
+/**
+ * Used by jQuery.plugin.suggestions.
+ *
+ * @class jQuery.suggestions
+ * @singleton
+ * @private
+ */
$.suggestions = {
/**
* Cancel any delayed maybeFetch() call and callback the context so
@@ -92,7 +136,7 @@ $.suggestions = {
* call to this function still pending will be canceled. If the value in the
* textbox is empty or hasn't changed since the last time suggestions were fetched,
* this function does nothing.
- * @param {Boolean} delayed Whether or not to delay this by the currently configured amount of time
+ * @param {boolean} delayed Whether or not to delay this by the currently configured amount of time
*/
update: function ( context, delayed ) {
function maybeFetch() {
@@ -125,6 +169,7 @@ $.suggestions = {
context.data.$textbox,
val,
function ( suggestions ) {
+ suggestions = suggestions.slice( 0, context.config.maxRows );
context.data.$textbox.suggestions( 'suggestions', suggestions );
if ( context.config.cache ) {
cache[ val ] = {
@@ -132,7 +177,8 @@ $.suggestions = {
timestamp: +new Date()
};
}
- }
+ },
+ context.config.maxRows
);
}
}
@@ -167,8 +213,8 @@ $.suggestions = {
/**
* Sets the value of a property, and updates the widget accordingly
- * @param property String Name of property
- * @param value Mixed Value to set property with
+ * @param {string} property Name of property
+ * @param {Mixed} value Value to set property with
*/
configure: function ( context, property, value ) {
var newCSS,
@@ -352,8 +398,8 @@ $.suggestions = {
/**
* Highlight a result in the results table
- * @param result <tr> to highlight: jQuery object, or 'prev' or 'next'
- * @param updateTextbox If true, put the suggestion in the textbox
+ * @param {jQuery|string} result `<tr>` to highlight, or 'prev' or 'next'
+ * @param {boolean} updateTextbox If true, put the suggestion in the textbox
*/
highlight: function ( context, result, updateTextbox ) {
var selected = context.data.$container.find( '.suggestions-result-current' );
@@ -421,7 +467,7 @@ $.suggestions = {
/**
* Respond to keypress event
- * @param key Integer Code of key pressed
+ * @param {number} key Code of key pressed
*/
keypress: function ( e, context, key ) {
var selected,
@@ -474,8 +520,6 @@ $.suggestions = {
}
}
} else {
- $.suggestions.highlight( context, selected, true );
-
if ( typeof context.config.result.select === 'function' ) {
// Allow the callback to decide whether to prevent default or not
if ( context.config.result.select.call( selected, context.data.$textbox ) === true ) {
@@ -494,6 +538,8 @@ $.suggestions = {
}
}
};
+
+// See file header for method documentation
$.fn.suggestions = function () {
// Multi-context fields
@@ -503,7 +549,7 @@ $.fn.suggestions = function () {
$( this ).each( function () {
var context, key;
- /* Construction / Loading */
+ /* Construction and Loading */
context = $( this ).data( 'suggestions-context' );
if ( context === undefined || context === null ) {
@@ -515,7 +561,7 @@ $.fn.suggestions = function () {
result: {},
$region: $( this ),
suggestions: [],
- maxRows: 7,
+ maxRows: 10,
delay: 120,
cache: false,
cacheMaxAge: 60000,
@@ -681,4 +727,9 @@ $.fn.suggestions = function () {
return returnValue !== undefined ? returnValue : $( this );
};
+/**
+ * @class jQuery
+ * @mixins jQuery.plugin.suggestions
+ */
+
}( jQuery ) );
diff --git a/resources/src/jquery/jquery.tabIndex.js b/resources/src/jquery/jquery.tabIndex.js
index 46cc8f2c..ed37aa1e 100644
--- a/resources/src/jquery/jquery.tabIndex.js
+++ b/resources/src/jquery/jquery.tabIndex.js
@@ -10,8 +10,8 @@
*/
$.fn.firstTabIndex = function () {
var minTabIndex = null;
- $(this).find( '[tabindex]' ).each( function () {
- var tabIndex = parseInt( $(this).prop( 'tabindex' ), 10 );
+ $( this ).find( '[tabindex]' ).each( function () {
+ var tabIndex = parseInt( $( this ).prop( 'tabindex' ), 10 );
// In IE6/IE7 the above jQuery selector returns all elements,
// becuase it has a default value for tabIndex in IE6/IE7 of 0
// (rather than null/undefined). Therefore check "> 0" as well.
@@ -35,8 +35,8 @@
*/
$.fn.lastTabIndex = function () {
var maxTabIndex = null;
- $(this).find( '[tabindex]' ).each( function () {
- var tabIndex = parseInt( $(this).prop( 'tabindex' ), 10 );
+ $( this ).find( '[tabindex]' ).each( function () {
+ var tabIndex = parseInt( $( this ).prop( 'tabindex' ), 10 );
if ( tabIndex > 0 && !isNaN( tabIndex ) ) {
// Initial value
if ( maxTabIndex === null ) {
diff --git a/resources/src/jquery/jquery.tablesorter.js b/resources/src/jquery/jquery.tablesorter.js
index ea2c5f92..ff5ff0a9 100644
--- a/resources/src/jquery/jquery.tablesorter.js
+++ b/resources/src/jquery/jquery.tablesorter.js
@@ -15,7 +15,7 @@
*/
/**
*
- * @description Create a sortable table with multi-column sorting capabilitys
+ * @description Create a sortable table with multi-column sorting capabilities
*
* @example $( 'table' ).tablesorter();
* @desc Create a simple tablesorter interface.
@@ -35,15 +35,9 @@
* to sortable tr elements in the thead on a descending sort. Default
* value: "headerSortDown"
*
- * @option String sortInitialOrder ( optional ) A string of the inital sorting
- * order can be asc or desc. Default value: "asc"
- *
* @option String sortMultisortKey ( optional ) A string of the multi-column sort
* key. Default value: "shiftKey"
*
- * @option Boolean sortLocaleCompare ( optional ) Boolean flag indicating whatever
- * to use String.localeCampare method or not. Set to false.
- *
* @option Boolean cancelSelection ( optional ) Boolean flag indicating if
* tablesorter should cancel selection of the table headers text.
* Default value: true
@@ -53,9 +47,6 @@
* { <Integer column index>: <String 'asc' or 'desc'> }
* Default value: []
*
- * @option Boolean debug ( optional ) Boolean flag indicating if tablesorter
- * should display debuging information usefull for development.
- *
* @event sortEnd.tablesorter: Triggered as soon as any sorting has been applied.
*
* @type jQuery
@@ -192,7 +183,8 @@
var i, j, $row, cols,
totalRows = ( table.tBodies[0] && table.tBodies[0].rows.length ) || 0,
totalCells = ( table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length ) || 0,
- parsers = table.config.parsers,
+ config = $( table ).data( 'tablesorter' ).config,
+ parsers = config.parsers,
cache = {
row: [],
normalized: []
@@ -206,7 +198,7 @@
// if this is a child row, add it to the last row's children and
// continue to the next row
- if ( $row.hasClass( table.config.cssChildRow ) ) {
+ if ( $row.hasClass( config.cssChildRow ) ) {
cache.row[cache.row.length - 1] = cache.row[cache.row.length - 1].add( $row );
// go to the next for loop
continue;
@@ -288,10 +280,12 @@
}
function buildHeaders( table, msg ) {
- var maxSeen = 0,
+ var config = $( table ).data( 'tablesorter' ).config,
+ maxSeen = 0,
colspanOffset = 0,
columns,
i,
+ $cell,
rowspan,
colspan,
headerCount,
@@ -344,30 +338,31 @@
// as each header can span over multiple columns (using colspan=N),
// we have to bidirectionally map headers to their columns and columns to their headers
- table.headerToColumns = [];
- table.columnToHeader = [];
-
$tableHeaders.each( function ( headerIndex ) {
+ $cell = $( this );
columns = [];
+
for ( i = 0; i < this.colSpan; i++ ) {
- table.columnToHeader[ colspanOffset + i ] = headerIndex;
+ config.columnToHeader[ colspanOffset + i ] = headerIndex;
columns.push( colspanOffset + i );
}
- table.headerToColumns[ headerIndex ] = columns;
+ config.headerToColumns[ headerIndex ] = columns;
colspanOffset += this.colSpan;
- this.headerIndex = headerIndex;
- this.order = 0;
- this.count = 0;
+ $cell.data( {
+ headerIndex: headerIndex,
+ order: 0,
+ count: 0
+ } );
- if ( $( this ).hasClass( table.config.unsortableClass ) ) {
- this.sortDisabled = true;
+ if ( $cell.hasClass( config.unsortableClass ) ) {
+ $cell.data( 'sortDisabled', true );
}
- if ( !this.sortDisabled ) {
- $( this )
- .addClass( table.config.cssHeader )
+ if ( !$cell.data( 'sortDisabled' ) ) {
+ $cell
+ .addClass( config.cssHeader )
.prop( 'tabIndex', 0 )
.attr( {
role: 'columnheader button',
@@ -376,7 +371,7 @@
}
// add cell to headerList
- table.config.headerList[headerIndex] = this;
+ config.headerList[headerIndex] = this;
} );
return $tableHeaders;
@@ -396,18 +391,23 @@
$.each( headerToColumns, function ( headerIndex, columns ) {
$.each( columns, function ( i, columnIndex ) {
- var header = $headers[headerIndex];
+ var header = $headers[headerIndex],
+ $header = $( header );
if ( !isValueInArray( columnIndex, sortList ) ) {
// Column shall not be sorted: Reset header count and order.
- header.order = 0;
- header.count = 0;
+ $header.data( {
+ order: 0,
+ count: 0
+ } );
} else {
// Column shall be sorted: Apply designated count and order.
$.each( sortList, function ( j, sortColumn ) {
if ( sortColumn[0] === i ) {
- header.order = sortColumn[1];
- header.count = sortColumn[1] + 1;
+ $header.data( {
+ order: sortColumn[1],
+ count: sortColumn[1] + 1
+ } );
return false;
}
} );
@@ -550,7 +550,7 @@
*/
function explodeRowspans( $table ) {
var spanningRealCellIndex, rowSpan, colSpan,
- cell, i, $tds, $clone, $nextRows,
+ cell, cellData, i, $tds, $clone, $nextRows,
rowspanCells = $table.find( '> tbody > tr > [rowspan]' ).get();
// Short circuit
@@ -566,8 +566,10 @@
col = 0,
l = this.cells.length;
for ( i = 0; i < l; i++ ) {
- this.cells[i].realCellIndex = col;
- this.cells[i].realRowIndex = this.rowIndex;
+ $( this.cells[i] ).data( 'tablesorter', {
+ realCellIndex: col,
+ realRowIndex: this.rowIndex
+ } );
col += this.cells[i].colSpan;
}
} );
@@ -577,45 +579,55 @@
// Re-sort whenever a rowspanned cell's realCellIndex is changed, because it
// might change the sort order.
function resortCells() {
+ var cellAData,
+ cellBData,
+ ret;
rowspanCells = rowspanCells.sort( function ( a, b ) {
- var ret = a.realCellIndex - b.realCellIndex;
+ cellAData = $.data( a, 'tablesorter' );
+ cellBData = $.data( b, 'tablesorter' );
+ ret = cellAData.realCellIndex - cellBData.realCellIndex;
if ( !ret ) {
- ret = a.realRowIndex - b.realRowIndex;
+ ret = cellAData.realRowIndex - cellBData.realRowIndex;
}
return ret;
} );
$.each( rowspanCells, function () {
- this.needResort = false;
+ $.data( this, 'tablesorter' ).needResort = false;
} );
}
resortCells();
function filterfunc() {
- return this.realCellIndex >= spanningRealCellIndex;
+ return $.data( this, 'tablesorter' ).realCellIndex >= spanningRealCellIndex;
}
function fixTdCellIndex() {
- this.realCellIndex += colSpan;
+ $.data( this, 'tablesorter' ).realCellIndex += colSpan;
if ( this.rowSpan > 1 ) {
- this.needResort = true;
+ $.data( this, 'tablesorter' ).needResort = true;
}
}
while ( rowspanCells.length ) {
- if ( rowspanCells[0].needResort ) {
+ if ( $.data( rowspanCells[0], 'tablesorter' ).needResort ) {
resortCells();
}
cell = rowspanCells.shift();
+ cellData = $.data( cell, 'tablesorter' );
rowSpan = cell.rowSpan;
colSpan = cell.colSpan;
- spanningRealCellIndex = cell.realCellIndex;
+ spanningRealCellIndex = cellData.realCellIndex;
cell.rowSpan = 1;
$nextRows = $( cell ).parent().nextAll();
for ( i = 0; i < rowSpan - 1; i++ ) {
$tds = $( $nextRows[i].cells ).filter( filterfunc );
$clone = $( cell ).clone();
- $clone[0].realCellIndex = spanningRealCellIndex;
+ $clone.data( 'tablesorter', {
+ realCellIndex: spanningRealCellIndex,
+ realRowIndex: cellData.realRowIndex + i,
+ needResort: true
+ } );
if ( $tds.length ) {
$tds.each( fixTdCellIndex );
$tds.first().before( $clone );
@@ -702,18 +714,14 @@
cssAsc: 'headerSortUp',
cssDesc: 'headerSortDown',
cssChildRow: 'expand-child',
- sortInitialOrder: 'asc',
sortMultiSortKey: 'shiftKey',
- sortLocaleCompare: false,
unsortableClass: 'unsortable',
parsers: {},
- widgets: [],
- headers: {},
cancelSelection: true,
sortList: [],
headerList: [],
- selectorHeaders: 'thead tr:eq(0) th',
- debug: false
+ headerToColumns: [],
+ columnToHeader: []
},
dateRegex: [],
@@ -746,17 +754,13 @@
}
$table.addClass( 'jquery-tablesorter' );
- // FIXME config should probably not be stored in the plain table node
- // New config object.
- table.config = {};
-
- // Merge and extend.
- config = $.extend( table.config, $.tablesorter.defaultOptions, settings );
+ // Merge and extend
+ config = $.extend( {}, $.tablesorter.defaultOptions, settings );
// Save the settings where they read
$.data( table, 'tablesorter', { config: config } );
- // Get the CSS class names, could be done else where.
+ // Get the CSS class names, could be done elsewhere
sortCSS = [ config.cssDesc, config.cssAsc ];
sortMsg = [ mw.msg( 'sort-descending' ), mw.msg( 'sort-ascending' ) ];
@@ -781,7 +785,7 @@
buildCollationTable();
// Legacy fix of .sortbottoms
- // Wrap them inside inside a tfoot (because that's what they actually want to be) &
+ // Wrap them inside a tfoot (because that's what they actually want to be)
// and put the <tfoot> at the end of the <table>
var $tfoot,
$sortbottoms = $table.find( '> tbody > tr.sortbottom' );
@@ -796,14 +800,14 @@
explodeRowspans( $table );
- // try to auto detect column type, and store in tables config
- table.config.parsers = buildParserCache( table, $headers );
+ // Try to auto detect column type, and store in tables config
+ config.parsers = buildParserCache( table, $headers );
}
// Apply event handling to headers
// this is too big, perhaps break it out?
- $headers.not( '.' + table.config.unsortableClass ).on( 'keypress click', function ( e ) {
- var cell, columns, newSortList, i,
+ $headers.not( '.' + config.unsortableClass ).on( 'keypress click', function ( e ) {
+ var cell, $cell, columns, newSortList, i,
totalRows,
j, s, o;
@@ -832,16 +836,21 @@
totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
if ( !table.sortDisabled && totalRows > 0 ) {
+ cell = this;
+ $cell = $( cell );
+
// Get current column sort order
- this.order = this.count % 2;
- this.count++;
+ $cell.data( {
+ order: $cell.data( 'count' ) % 2,
+ count: $cell.data( 'count' ) + 1
+ } );
cell = this;
// Get current column index
- columns = table.headerToColumns[ this.headerIndex ];
+ columns = config.headerToColumns[ $cell.data( 'headerIndex' ) ];
newSortList = $.map( columns, function ( c ) {
// jQuery "helpfully" flattens the arrays...
- return [[c, cell.order]];
+ return [[c, $cell.data( 'order' )]];
} );
// Index of first column belonging to this header
i = columns[0];
@@ -861,9 +870,8 @@
s = config.sortList[j];
o = config.headerList[s[0]];
if ( isValueInArray( s[0], newSortList ) ) {
- o.count = s[1];
- o.count++;
- s[1] = o.count % 2;
+ $( o ).data( 'count', s[1] + 1 );
+ s[1] = $( o ).data( 'count' ) % 2;
}
}
} else {
@@ -873,10 +881,10 @@
}
// Reset order/counts of cells not affected by sorting
- setHeadersOrder( $headers, config.sortList, table.headerToColumns );
+ setHeadersOrder( $headers, config.sortList, config.headerToColumns );
// Set CSS for headers
- setHeadersCss( $table[0], $headers, config.sortList, sortCSS, sortMsg, table.columnToHeader );
+ setHeadersCss( $table[0], $headers, config.sortList, sortCSS, sortMsg, config.columnToHeader );
appendToTable(
$table[0], multisort( $table[0], config.sortList, cache )
);
@@ -917,13 +925,13 @@
// Set each column's sort count to be able to determine the correct sort
// order when clicking on a header cell the next time
- setHeadersOrder( $headers, sortList, table.headerToColumns );
+ setHeadersOrder( $headers, sortList, config.headerToColumns );
// re-build the cache for the tbody cells
cache = buildCache( table );
// set css for headers
- setHeadersCss( table, $headers, sortList, sortCSS, sortMsg, table.columnToHeader );
+ setHeadersCss( table, $headers, sortList, sortCSS, sortMsg, config.columnToHeader );
// sort the table and append it to the dom
appendToTable( table, multisort( table, sortList, cache ) );
@@ -983,6 +991,15 @@
clearTableBody: function ( table ) {
$( table.tBodies[0] ).empty();
+ },
+
+ getParser: function ( id ) {
+ buildTransformTable();
+ buildDateTable();
+ cacheRegexs();
+ buildCollationTable();
+
+ return getParserById( id );
}
};
@@ -1104,9 +1121,9 @@
return '99999999';
}
} else if ( ( match = s.match( ts.dateRegex[1] ) ) !== null ) {
- s = [ match[3], '' + ts.monthNames[match[2]], match[1] ];
+ s = [ match[3], String( ts.monthNames[match[2]] ), match[1] ];
} else if ( ( match = s.match( ts.dateRegex[2] ) ) !== null ) {
- s = [ match[3], '' + ts.monthNames[match[1]], match[2] ];
+ s = [ match[3], String( ts.monthNames[match[1]] ), match[2] ];
} else {
// Should never get here
return '99999999';
diff --git a/resources/src/jquery/jquery.textSelection.js b/resources/src/jquery/jquery.textSelection.js
index 8d440fdc..51119305 100644
--- a/resources/src/jquery/jquery.textSelection.js
+++ b/resources/src/jquery/jquery.textSelection.js
@@ -24,8 +24,9 @@
$.fn.textSelection = function ( command, options ) {
var fn,
+ alternateFn,
context,
- hasWikiEditorSurface, // The alt edit surface needs to implement the WikiEditor API
+ hasWikiEditor,
needSave,
retval;
@@ -210,9 +211,10 @@
endPos = this.selectionEnd;
scrollTop = this.scrollTop;
checkSelectedText();
- if ( options.selectionStart !== undefined
- && endPos - startPos !== options.selectionEnd - options.selectionStart )
- {
+ if (
+ options.selectionStart !== undefined &&
+ endPos - startPos !== options.selectionEnd - options.selectionStart
+ ) {
// This means there is a difference in the selection range returned by browser and what we passed.
// This happens for Chrome in the case of composite characters. Ref bug #30130
// Set the startPos to the correct position.
@@ -242,7 +244,7 @@
selText = selText.replace( /\r?\n/g, '\r\n' );
post = post.replace( /\r?\n/g, '\r\n' );
}
- if ( isSample && options.selectPeri && !options.splitlines ) {
+ if ( isSample && options.selectPeri && ( !options.splitlines || ( options.splitlines && selText.indexOf( '\n' ) === -1 ) ) ) {
this.selectionStart = startPos + pre.length;
this.selectionEnd = startPos + pre.length + selText.length;
} else {
@@ -507,11 +509,13 @@
}
};
+ alternateFn = $( this ).data( 'jquery.textSelection' );
+
// Apply defaults
switch ( command ) {
- //case 'getContents': // no params
- //case 'setContents': // no params with defaults
- //case 'getSelection': // no params
+ // case 'getContents': // no params
+ // case 'setContents': // no params with defaults
+ // case 'getSelection': // no params
case 'encapsulateSelection':
options = $.extend( {
pre: '', // Text to insert before the cursor/selection
@@ -550,19 +554,30 @@
force: false // Force a scroll even if the caret position is already visible
}, options );
break;
+ case 'register':
+ if ( alternateFn ) {
+ throw new Error( 'Another textSelection API was already registered' );
+ }
+ $( this ).data( 'jquery.textSelection', options );
+ // No need to update alternateFn as this command only stores the options.
+ // A command that uses it will set it again.
+ return;
+ case 'unregister':
+ $( this ).removeData( 'jquery.textSelection' );
+ return;
}
context = $( this ).data( 'wikiEditor-context' );
- hasWikiEditorSurface = ( context !== undefined && context.$iframe !== undefined );
+ hasWikiEditor = ( context !== undefined && context.$iframe !== undefined );
// IE selection restore voodoo
needSave = false;
- if ( hasWikiEditorSurface && context.savedSelection !== null ) {
+ if ( hasWikiEditor && context.savedSelection !== null ) {
context.fn.restoreSelection();
needSave = true;
}
- retval = ( hasWikiEditorSurface && context.fn[command] !== undefined ? context.fn : fn )[command].call( this, options );
- if ( hasWikiEditorSurface && needSave ) {
+ retval = ( alternateFn && alternateFn[command] || fn[command] ).call( this, options );
+ if ( hasWikiEditor && needSave ) {
context.fn.saveSelection();
}
diff --git a/resources/src/mediawiki.action/images/nextredirect-ltr.png b/resources/src/mediawiki.action/images/nextredirect-ltr.png
index cd657c33..e0a6bd7f 100644
--- a/resources/src/mediawiki.action/images/nextredirect-ltr.png
+++ b/resources/src/mediawiki.action/images/nextredirect-ltr.png
Binary files differ
diff --git a/resources/src/mediawiki.action/images/nextredirect-ltr.svg b/resources/src/mediawiki.action/images/nextredirect-ltr.svg
new file mode 100644
index 00000000..6932e580
--- /dev/null
+++ b/resources/src/mediawiki.action/images/nextredirect-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="42" height="20" viewBox="0 0 42 20">
+ <g id="Layer_2">
+ <path fill="#fff" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M11 10h17.064"/>
+ </g>
+ <g id="Layer_3">
+ <path d="M23 6l8 4-8 4z"/>
+ </g>
+</svg>
diff --git a/resources/src/mediawiki.action/images/nextredirect-rtl.png b/resources/src/mediawiki.action/images/nextredirect-rtl.png
index b788f334..ddb5273b 100644
--- a/resources/src/mediawiki.action/images/nextredirect-rtl.png
+++ b/resources/src/mediawiki.action/images/nextredirect-rtl.png
Binary files differ
diff --git a/resources/src/mediawiki.action/images/nextredirect-rtl.svg b/resources/src/mediawiki.action/images/nextredirect-rtl.svg
new file mode 100644
index 00000000..b309da94
--- /dev/null
+++ b/resources/src/mediawiki.action/images/nextredirect-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="42" height="20" viewBox="0 0 42 20">
+ <g id="Layer_2">
+ <path fill="#fff" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M31 10H13.936"/>
+ </g>
+ <g id="Layer_3">
+ <path d="M19 6l-8 4 8 4z"/>
+ </g>
+</svg>
diff --git a/resources/src/mediawiki.action/images/redirect-ltr.png b/resources/src/mediawiki.action/images/redirect-ltr.png
index 695f2a13..0734d731 100644
--- a/resources/src/mediawiki.action/images/redirect-ltr.png
+++ b/resources/src/mediawiki.action/images/redirect-ltr.png
Binary files differ
diff --git a/resources/src/mediawiki.action/images/redirect-ltr.svg b/resources/src/mediawiki.action/images/redirect-ltr.svg
new file mode 100644
index 00000000..713be6cb
--- /dev/null
+++ b/resources/src/mediawiki.action/images/redirect-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="47" height="20" viewBox="0 0 47 20">
+ <g id="Layer_1">
+ <path fill="none" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M14.98 2.5V11c0 1.04 1.02 1.98 2.02 1.98h6l3 .02"/>
+ </g>
+ <g id="Layer_3">
+ <path d="M23.48 9.5l.02 7L30 13z"/>
+ </g>
+</svg>
diff --git a/resources/src/mediawiki.action/images/redirect-rtl.png b/resources/src/mediawiki.action/images/redirect-rtl.png
index c954a2ad..c883795e 100644
--- a/resources/src/mediawiki.action/images/redirect-rtl.png
+++ b/resources/src/mediawiki.action/images/redirect-rtl.png
Binary files differ
diff --git a/resources/src/mediawiki.action/images/redirect-rtl.svg b/resources/src/mediawiki.action/images/redirect-rtl.svg
new file mode 100644
index 00000000..ce0c7c92
--- /dev/null
+++ b/resources/src/mediawiki.action/images/redirect-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="47" height="20" viewBox="0 0 47 20">
+ <g id="Layer_1">
+ <path fill="none" stroke="#000" stroke-width="2" stroke-miterlimit="10" d="M32.002 2.5V11c0 1.04-1.02 1.98-2.02 1.98h-6l-3 .02"/>
+ </g>
+ <g id="Layer_3">
+ <path d="M23.502 9.5l-.02 7-6.5-3.5z"/>
+ </g>
+</svg>
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js b/resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js
index b5654400..6b330128 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js
+++ b/resources/src/mediawiki.action/mediawiki.action.edit.editWarning.js
@@ -5,54 +5,37 @@
'use strict';
$( function () {
- var savedWindowOnBeforeUnload,
- $wpTextbox1 = $( '#wpTextbox1' ),
- $wpSummary = $( '#wpSummary' );
+ var allowCloseWindow,
+ $textBox = $( '#wpTextbox1' ),
+ $summary = $( '#wpSummary' ),
+ $both = $textBox.add( $summary );
+
// Check if EditWarning is enabled and if we need it
- if ( $wpTextbox1.length === 0 ) {
+ if ( !mw.user.options.get( 'useeditwarning' ) ) {
return true;
}
- // Get the original values of some form elements
- $wpTextbox1.add( $wpSummary ).each( function () {
- $( this ).data( 'origtext', $( this ).val() );
+
+ // Save the original value of the text fields
+ $both.each( function ( index, element ) {
+ var $element = $( element );
+ $element.data( 'origtext', $element.textSelection( 'getContents' ) );
} );
- $( window )
- .on( 'beforeunload.editwarning', function () {
- var retval;
- // Check if the current values of some form elements are the same as
- // the original values
- if (
- mw.config.get( 'wgAction' ) === 'submit' ||
- $wpTextbox1.data( 'origtext' ) !== $wpTextbox1.textSelection( 'getContents' ) ||
- $wpSummary.data( 'origtext' ) !== $wpSummary.textSelection( 'getContents' )
- ) {
- // Return our message
- retval = mw.msg( 'editwarning-warning' );
- }
+ allowCloseWindow = mw.confirmCloseWindow( {
+ test: function () {
+ // We use .textSelection, because editors might not have updated the form yet.
+ return mw.config.get( 'wgAction' ) === 'submit' ||
+ $textBox.data( 'origtext' ) !== $textBox.textSelection( 'getContents' ) ||
+ $summary.data( 'origtext' ) !== $summary.textSelection( 'getContents' );
+ },
- // Unset the onbeforeunload handler so we don't break page caching in Firefox
- savedWindowOnBeforeUnload = window.onbeforeunload;
- window.onbeforeunload = null;
- if ( retval !== undefined ) {
- // ...but if the user chooses not to leave the page, we need to rebind it
- setTimeout( function () {
- window.onbeforeunload = savedWindowOnBeforeUnload;
- }, 1 );
- return retval;
- }
- } )
- .on( 'pageshow.editwarning', function () {
- // Re-add onbeforeunload handler
- if ( !window.onbeforeunload ) {
- window.onbeforeunload = savedWindowOnBeforeUnload;
- }
- } );
+ message: mw.msg( 'editwarning-warning' ),
+ namespace: 'editwarning'
+ } );
// Add form submission handler
$( '#editform' ).submit( function () {
- // Unbind our handlers
- $( window ).off( '.editwarning' );
+ allowCloseWindow();
} );
} );
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.js b/resources/src/mediawiki.action/mediawiki.action.edit.js
index 4519b049..01a25f3b 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.js
+++ b/resources/src/mediawiki.action/mediawiki.action.edit.js
@@ -1,217 +1,23 @@
-/**
- * Interface for the classic edit toolbar.
- *
- * @class mw.toolbar
- * @singleton
+/*!
+ * Scripts for action=edit at domready
*/
-( function ( mw, $ ) {
- var toolbar, isReady, $toolbar, queue, slice, $currentFocused;
-
- /**
- * Internal helper that does the actual insertion of the button into the toolbar.
- *
- * See #addButton for parameter documentation.
- *
- * @private
- */
- function insertButton( b, speedTip, tagOpen, tagClose, sampleText, imageId ) {
- var $button;
-
- // Backwards compatibility
- if ( typeof b !== 'object' ) {
- b = {
- imageFile: b,
- speedTip: speedTip,
- tagOpen: tagOpen,
- tagClose: tagClose,
- sampleText: sampleText,
- imageId: imageId
- };
- }
-
- if ( b.imageFile ) {
- $button = $( '<img>' ).attr( {
- src: b.imageFile,
- alt: b.speedTip,
- title: b.speedTip,
- id: b.imageId || undefined,
- 'class': 'mw-toolbar-editbutton'
- } );
- } else {
- $button = $( '<div>' ).attr( {
- title: b.speedTip,
- id: b.imageId || undefined,
- 'class': 'mw-toolbar-editbutton'
- } );
+jQuery( function ( $ ) {
+ var editBox, scrollTop, $editForm;
+
+ // Make sure edit summary does not exceed byte limit
+ $( '#wpSummary' ).byteLimit( 255 );
+
+ // Restore the edit box scroll state following a preview operation,
+ // and set up a form submission handler to remember this state.
+ editBox = document.getElementById( 'wpTextbox1' );
+ scrollTop = document.getElementById( 'wpScrolltop' );
+ $editForm = $( '#editform' );
+ if ( $editForm.length && editBox && scrollTop ) {
+ if ( scrollTop.value ) {
+ editBox.scrollTop = scrollTop.value;
}
-
- $button.click( function ( e ) {
- if ( b.onClick !== undefined ) {
- b.onClick( e );
- } else {
- toolbar.insertTags( b.tagOpen, b.tagClose, b.sampleText );
- }
-
- return false;
+ $editForm.submit( function () {
+ scrollTop.value = editBox.scrollTop;
} );
-
- $toolbar.append( $button );
}
-
- isReady = false;
- $toolbar = false;
-
- /**
- * @private
- * @property {Array}
- * Contains button objects (and for backwards compatibilty, it can
- * also contains an arguments array for insertButton).
- */
- queue = [];
- slice = queue.slice;
-
- toolbar = {
-
- /**
- * Add buttons to the toolbar.
- *
- * Takes care of race conditions and time-based dependencies
- * by placing buttons in a queue if this method is called before
- * the toolbar is created.
- *
- * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
- * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
- *
- * @param {Object} button Object with the following properties.
- * You are required to provide *either* the `onClick` parameter, or the three parameters
- * `tagOpen`, `tagClose` and `sampleText`, but not both (they're mutually exclusive).
- * @param {string} [button.imageFile] Image to use for the button.
- * @param {string} button.speedTip Tooltip displayed when user mouses over the button.
- * @param {Function} [button.onClick] Function to be executed when the button is clicked.
- * @param {string} [button.tagOpen]
- * @param {string} [button.tagClose]
- * @param {string} [button.sampleText] Alternative to `onClick`. `tagOpen`, `tagClose` and
- * `sampleText` together provide the markup that should be inserted into page text at
- * current cursor position.
- * @param {string} [button.imageId] `id` attribute of the button HTML element. Can be
- * used to define the image with CSS if it's not provided as `imageFile`.
- */
- addButton: function () {
- if ( isReady ) {
- insertButton.apply( toolbar, arguments );
- } else {
- // Convert arguments list to array
- queue.push( slice.call( arguments ) );
- }
- },
- /**
- * Add multiple buttons to the toolbar (see also #addButton).
- *
- * Example usage:
- *
- * addButtons( [ { .. }, { .. }, { .. } ] );
- * addButtons( { .. }, { .. } );
- *
- * @param {Object|Array...} [buttons] An array of button objects or the first
- * button object in a list of variadic arguments.
- */
- addButtons: function ( buttons ) {
- if ( !$.isArray( buttons ) ) {
- buttons = slice.call( arguments );
- }
- if ( isReady ) {
- $.each( buttons, function () {
- insertButton( this );
- } );
- } else {
- // Push each button into the queue
- queue.push.apply( queue, buttons );
- }
- },
-
- /**
- * Apply tagOpen/tagClose to selection in currently focused textarea.
- *
- * Uses `sampleText` if selection is empty.
- *
- * @param {string} tagOpen
- * @param {string} tagClose
- * @param {string} sampleText
- */
- insertTags: function ( tagOpen, tagClose, sampleText ) {
- if ( $currentFocused && $currentFocused.length ) {
- $currentFocused.textSelection(
- 'encapsulateSelection', {
- pre: tagOpen,
- peri: sampleText,
- post: tagClose
- }
- );
- }
- },
-
- // For backwards compatibility,
- // Called from EditPage.php, maybe in other places as well.
- init: function () {}
- };
-
- // Legacy (for compatibility with the code previously in skins/common.edit.js)
- mw.log.deprecate( window, 'addButton', toolbar.addButton, 'Use mw.toolbar.addButton instead.' );
- mw.log.deprecate( window, 'insertTags', toolbar.insertTags, 'Use mw.toolbar.insertTags instead.' );
-
- // Expose API publicly
- mw.toolbar = toolbar;
-
- $( function () {
- var i, b, editBox, scrollTop, $editForm;
-
- // Used to determine where to insert tags
- $currentFocused = $( '#wpTextbox1' );
-
- // Populate the selector cache for $toolbar
- $toolbar = $( '#toolbar' );
-
- for ( i = 0; i < queue.length; i++ ) {
- b = queue[i];
- if ( $.isArray( b ) ) {
- // Forwarded arguments array from mw.toolbar.addButton
- insertButton.apply( toolbar, b );
- } else {
- // Raw object from mw.toolbar.addButtons
- insertButton( b );
- }
- }
-
- // Clear queue
- queue.length = 0;
-
- // This causes further calls to addButton to go to insertion directly
- // instead of to the queue.
- // It is important that this is after the one and only loop through
- // the the queue
- isReady = true;
-
- // Make sure edit summary does not exceed byte limit
- $( '#wpSummary' ).byteLimit( 255 );
-
- // Restore the edit box scroll state following a preview operation,
- // and set up a form submission handler to remember this state.
- editBox = document.getElementById( 'wpTextbox1' );
- scrollTop = document.getElementById( 'wpScrolltop' );
- $editForm = $( '#editform' );
- if ( $editForm.length && editBox && scrollTop ) {
- if ( scrollTop.value ) {
- editBox.scrollTop = scrollTop.value;
- }
- $editForm.submit( function () {
- scrollTop.value = editBox.scrollTop;
- } );
- }
-
- // Apply to dynamically created textboxes as well as normal ones
- $( document ).on( 'focus', 'textarea, input:text', function () {
- $currentFocused = $( this );
- } );
- } );
-
-}( mediaWiki, jQuery ) );
+} );
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.preview.js b/resources/src/mediawiki.action/mediawiki.action.edit.preview.js
index 6b212c28..f24703af 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.preview.js
+++ b/resources/src/mediawiki.action/mediawiki.action.edit.preview.js
@@ -8,17 +8,29 @@
* @param {jQuery.Event} e
*/
function doLivePreview( e ) {
- var $wikiPreview, $editform, copySelectors, $copyElements, $spinner,
- targetUrl, postData, $previewDataHolder;
-
- e.preventDefault();
-
- // Deprecated: Use mw.hook instead
- $( mw ).trigger( 'LivePreviewPrepare' );
+ var isDiff, api, request, postData, copySelectors, section,
+ $wikiPreview, $wikiDiff, $editform, $textbox, $summary, $copyElements, $spinner, $errorBox;
+ isDiff = ( e.target.name === 'wpDiff' );
$wikiPreview = $( '#wikiPreview' );
+ $wikiDiff = $( '#wikiDiff' );
$editform = $( '#editform' );
+ $textbox = $editform.find( '#wpTextbox1' );
+ $summary = $editform.find( '#wpSummary' );
+ $errorBox = $( '.errorbox' );
+ section = $editform.find( '[name="wpSection"]' ).val();
+
+ if ( $textbox.length === 0 ) {
+ return;
+ }
+ // Show changes for a new section is not yet supported
+ if ( isDiff && section === 'new' ) {
+ return;
+ }
+ e.preventDefault();
+ // Remove any previously displayed errors
+ $errorBox.remove();
// Show #wikiPreview if it's hidden to be able to scroll to it
// (if it is hidden, it's also empty, so nothing changes in the rendering)
$wikiPreview.show();
@@ -26,15 +38,12 @@
// Jump to where the preview will appear
$wikiPreview[0].scrollIntoView();
- // List of selectors matching elements that we will
- // update from from the ajax-loaded preview page.
copySelectors = [
// Main
'#firstHeading',
'#wikiPreview',
'#wikiDiff',
'#catlinks',
- '.hiddencats',
'#p-lang',
// Editing-related
'.templatesUsed',
@@ -59,70 +68,184 @@
// (e.g. empty #catlinks)
$copyElements.animate( { opacity: 0.4 }, 'fast' );
- $previewDataHolder = $( '<div>' );
- targetUrl = $editform.attr( 'action' );
- targetUrl += targetUrl.indexOf( '?' ) !== -1 ? '&' : '?';
- targetUrl += $.param( {
- debug: mw.config.get( 'debug' ),
+ api = new mw.Api();
+ postData = {
+ action: 'parse',
uselang: mw.config.get( 'wgUserLanguage' ),
- useskin: mw.config.get( 'skin' )
- } );
+ title: mw.config.get( 'wgPageName' ),
+ text: $textbox.textSelection( 'getContents' ),
+ summary: $summary.textSelection( 'getContents' )
+ };
- // Gather all the data from the form
- postData = $editform.formToArray();
- postData.push( {
- name: e.target.name,
- value: ''
- } );
+ if ( section !== '' ) {
+ postData.sectionpreview = '';
+ if ( section === 'new' ) {
+ postData.section = section;
+ postData.sectiontitle = postData.summary;
+ }
+ }
- // Load new preview data.
- // TODO: This should use the action=parse API instead of loading the entire page,
- // although that requires figuring out how to convert that raw data into proper HTML.
- $previewDataHolder.load( targetUrl + ' ' + copySelectors.join( ',' ), postData, function () {
- var i, $from, $next, $parent;
+ if ( isDiff ) {
+ $wikiPreview.hide();
- // Copy the contents of the specified elements from the loaded page to the real page.
- // Also copy their class attributes.
- for ( i = 0; i < copySelectors.length; i++ ) {
- $from = $previewDataHolder.find( copySelectors[i] );
+ // First PST the input, then diff it
+ postData.onlypst = '';
+ request = api.post( postData );
+ request.done( function ( response ) {
+ var postData;
+ postData = {
+ action: 'query',
+ indexpageids: '',
+ prop: 'revisions',
+ titles: mw.config.get( 'wgPageName' ),
+ rvdifftotext: response.parse.text['*'],
+ rvprop: ''
+ };
+ if ( section !== '' ) {
+ postData.rvsection = section;
+ }
+ return api.post( postData ).done( function ( result2 ) {
+ try {
+ var diffHtml = result2.query.pages[result2.query.pageids[0]]
+ .revisions[0].diff['*'];
+ $wikiDiff.find( 'table.diff tbody' ).html( diffHtml );
+ } catch ( e ) {
+ // "result.blah is undefined" error, ignore
+ mw.log.warn( e );
+ }
+ $wikiDiff.show();
+ } );
+ } );
+ } else {
+ $wikiDiff.hide();
+ $.extend( postData, {
+ pst: '',
+ preview: '',
+ prop: 'text|displaytitle|modules|categorieshtml|templates|langlinks|limitreporthtml',
+ disableeditsection: true
+ } );
+ request = api.post( postData );
+ request.done( function ( response ) {
+ var li, newList, $displaytitle, $content, $parent, $list;
+ if ( response.parse.modules ) {
+ mw.loader.load( response.parse.modules.concat(
+ response.parse.modulescripts,
+ response.parse.modulestyles,
+ response.parse.modulemessages ) );
+ }
+ if ( response.parse.displaytitle ) {
+ $displaytitle = $( $.parseHTML( response.parse.displaytitle ) );
+ $( '#firstHeading' ).msg(
+ mw.config.get( 'wgEditMessage', 'editing' ),
+ $displaytitle
+ );
+ document.title = mw.msg(
+ 'pagetitle',
+ mw.msg(
+ mw.config.get( 'wgEditMessage', 'editing' ),
+ $displaytitle.text()
+ )
+ );
+ }
+ if ( response.parse.categorieshtml ) {
+ $( '#catlinks' ).replaceWith( response.parse.categorieshtml['*'] );
+ }
+ if ( response.parse.templates ) {
+ newList = [];
+ $.each( response.parse.templates, function ( i, template ) {
+ li = $( '<li>' )
+ .append( $( '<a>' )
+ .attr( {
+ 'href': mw.util.getUrl( template['*'] ),
+ 'class': ( template.exists !== undefined ? '' : 'new' )
+ } )
+ .text( template['*'] )
+ );
+ newList.push( li );
+ } );
- if ( copySelectors[i] === '#wikiPreview' ) {
- $next = $wikiPreview.next();
- // If there is no next node, use parent instead.
- // Only query parent if needed, false otherwise.
- $parent = !$next.length && $wikiPreview.parent();
+ $editform.find( '.templatesUsed .mw-editfooter-list' ).detach().empty().append( newList ).appendTo( '.templatesUsed' );
+ }
+ if ( response.parse.limitreporthtml ) {
+ $( '.limitreport' ).html( response.parse.limitreporthtml['*'] );
+ }
+ if ( response.parse.langlinks && mw.config.get( 'skin' ) === 'vector' ) {
+ newList = [];
+ $.each( response.parse.langlinks, function ( i, langlink ) {
+ li = $( '<li>' )
+ .addClass( 'interlanguage-link interwiki-' + langlink.lang )
+ .append( $( '<a>' )
+ .attr( {
+ 'href': langlink.url,
+ 'title': langlink['*'] + ' - ' + langlink.langname,
+ 'lang': langlink.lang,
+ 'hreflang': langlink.lang
+ } )
+ .text( langlink.autonym )
+ );
+ newList.push( li );
+ } );
+ $list = $( '#p-lang ul' );
+ $parent = $list.parent();
+ $list.detach().empty().append( newList ).prependTo( $parent );
+ }
- $wikiPreview
+ if ( response.parse.text['*'] ) {
+ $content = $wikiPreview.children( '.mw-content-ltr,.mw-content-rtl' );
+ $content
.detach()
- .empty()
- .append( $from.contents() )
- .attr( 'class', $from.attr( 'class' ) );
+ .html( response.parse.text['*'] );
- mw.hook( 'wikipage.content' ).fire( $wikiPreview );
+ mw.hook( 'wikipage.content' ).fire( $content );
// Reattach
- if ( $parent ) {
- $parent.append( $wikiPreview );
- } else {
- $next.before( $wikiPreview );
- }
+ $wikiPreview.append( $content );
+
+ $wikiPreview.show();
- } else {
- $( copySelectors[i] )
- .empty()
- .append( $from.contents() )
- .attr( 'class', $from.attr( 'class' ) );
}
+ } );
+ }
+ request.done( function ( response ) {
+ var isSubject = ( section === 'new' ),
+ summaryMsg = isSubject ? 'subject-preview' : 'summary-preview';
+ if ( response.parse.parsedsummary ) {
+ $editform.find( '.mw-summary-preview' )
+ .empty()
+ .append(
+ mw.message( summaryMsg ).parse(),
+ ' ',
+ $( '<span>' ).addClass( 'comment' ).html(
+ // There is no equivalent to rawParams
+ mw.message( 'parentheses' ).escaped()
+ .replace( '$1', response.parse.parsedsummary['*'] )
+ )
+ );
}
-
- // Deprecated: Use mw.hook instead
- $( mw ).trigger( 'LivePreviewDone', [copySelectors] );
-
+ } );
+ request.always( function () {
$spinner.remove();
$copyElements.animate( {
opacity: 1
}, 'fast' );
} );
+ request.fail( function ( code, result ) {
+ var errorMsg = 'API error: ' + code;
+ if ( code === 'http' ) {
+ errorMsg = 'HTTP error: ';
+ if ( result.exception ) {
+ errorMsg += result.exception;
+ } else {
+ errorMsg += result.textStatus;
+ }
+ }
+ $errorBox = $( '<div>' )
+ .addClass( 'errorbox' )
+ .html( '<strong>' + mw.message( 'previewerrortext' ).escaped() + '</strong><br>' )
+ .append( document.createTextNode( errorMsg ) );
+ $wikiDiff.hide();
+ $wikiPreview.hide().before( $errorBox );
+ } );
}
$( function () {
@@ -138,21 +261,33 @@
// have to fish and (hopefully) put them in the right place (since skins
// can change where they are output).
- if ( !document.getElementById( 'p-lang' ) && document.getElementById( 'p-tb' ) ) {
- $( '#p-tb' ).after(
- $( '<div>' ).attr( 'id', 'p-lang' )
+ if ( !document.getElementById( 'p-lang' ) && document.getElementById( 'p-tb' ) && mw.config.get( 'skin' ) === 'vector' ) {
+ $( '.portal:last' ).after(
+ $( '<div>' ).attr( {
+ 'class': 'portal',
+ 'id': 'p-lang',
+ 'role': 'navigation',
+ 'title': mw.msg( 'tooltip-p-lang' ),
+ 'aria-labelledby': 'p-lang-label'
+ } )
+ .append( $( '<h3>' ).attr( 'id', 'p-lang-label' ).text( mw.msg( 'otherlanguages' ) ) )
+ .append( $( '<div>' ).addClass( 'body' ).append( '<ul>' ) )
);
}
if ( !$( '.mw-summary-preview' ).length ) {
- $( '.editCheckboxes' ).before(
+ $( '#wpSummary' ).after(
$( '<div>' ).addClass( 'mw-summary-preview' )
);
}
if ( !document.getElementById( 'wikiDiff' ) && document.getElementById( 'wikiPreview' ) ) {
$( '#wikiPreview' ).after(
- $( '<div>' ).attr( 'id', 'wikiDiff' )
+ $( '<div>' )
+ .hide()
+ .attr( 'id', 'wikiDiff' )
+ .html( '<table class="diff"><col class="diff-marker"/><col class="diff-content"/>' +
+ '<col class="diff-marker"/><col class="diff-content"/><tbody/></table>' )
);
}
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.stash.js b/resources/src/mediawiki.action/mediawiki.action.edit.stash.js
new file mode 100644
index 00000000..29c533d8
--- /dev/null
+++ b/resources/src/mediawiki.action/mediawiki.action.edit.stash.js
@@ -0,0 +1,76 @@
+/*!
+ * Scripts for pre-emptive edit preparing on action=edit
+ */
+( function ( mw, $ ) {
+ $( function () {
+ var idleTimeout = 4000,
+ api = new mw.Api(),
+ pending = null,
+ $form = $( '#editform' ),
+ $text = $form.find( '#wpTextbox1' ),
+ data = {},
+ timer = null;
+
+ function stashEdit( token ) {
+ data = $form.serializeObject();
+
+ pending = api.post( {
+ action: 'stashedit',
+ token: token,
+ title: mw.config.get( 'wgPageName' ),
+ section: data.wpSection,
+ sectiontitle: '',
+ text: data.wpTextbox1,
+ contentmodel: data.model,
+ contentformat: data.format,
+ baserevid: data.parentRevId
+ } );
+ }
+
+ /* Has the edit body text changed since the last stashEdit() call? */
+ function isChanged() {
+ // Normalize line endings to CRLF, like $.fn.serializeObject does.
+ var newText = $text.val().replace( /\r?\n/g, '\r\n' );
+ return newText !== data.wpTextbox1;
+ }
+
+ function onEditChanged() {
+ if ( !isChanged() ) {
+ return;
+ }
+
+ // If a request is in progress, abort it; its payload is stale.
+ if ( pending ) {
+ pending.abort();
+ }
+
+ api.getToken( 'edit' ).then( stashEdit );
+ }
+
+ function onKeyPress( e ) {
+ // Ignore keystrokes that don't modify text, like cursor movements.
+ // See <http://stackoverflow.com/q/2284844>.
+ if ( e.which === 0 ) {
+ return;
+ }
+
+ clearTimeout( timer );
+
+ if ( pending ) {
+ pending.abort();
+ }
+
+ timer = setTimeout( onEditChanged, idleTimeout );
+ }
+
+ // We don't attempt to stash new section edits because in such cases
+ // the parser output varies on the edit summary (since it determines
+ // the new section's name).
+ if ( $form.find( 'input[name=wpSection]' ).val() === 'new' ) {
+ return;
+ }
+
+ $text.on( { change: onEditChanged, keypress: onKeyPress } );
+
+ } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.styles.css b/resources/src/mediawiki.action/mediawiki.action.edit.styles.css
index 7148b964..4209aa1f 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.styles.css
+++ b/resources/src/mediawiki.action/mediawiki.action.edit.styles.css
@@ -8,14 +8,6 @@
display: block;
}
-.editOptions {
- background-color: #F0F0F0;
- border: 1px solid silver;
- border-top: none;
- padding: 1em 1em 1.5em 1em;
- margin-bottom: 2em;
-}
-
/* Adjustments to edit form elements */
.editCheckboxes {
margin-bottom: 1em;
diff --git a/resources/src/mediawiki.action/mediawiki.action.history.diff.css b/resources/src/mediawiki.action/mediawiki.action.history.diff.css
index afe92468..0887476e 100644
--- a/resources/src/mediawiki.action/mediawiki.action.history.diff.css
+++ b/resources/src/mediawiki.action/mediawiki.action.history.diff.css
@@ -1,8 +1,7 @@
-/*
-** Diff rendering
-*/
+/*!
+ * Diff rendering
+ */
table.diff {
- background-color: white;
border: none;
border-spacing: 4px;
margin: 0;
diff --git a/resources/src/mediawiki.action/mediawiki.action.history.diff.print.css b/resources/src/mediawiki.action/mediawiki.action.history.diff.print.css
new file mode 100644
index 00000000..76b5c9b7
--- /dev/null
+++ b/resources/src/mediawiki.action/mediawiki.action.history.diff.print.css
@@ -0,0 +1,16 @@
+/*!
+ * Diff rendering
+ */
+td.diff-context,
+td.diff-addedline .diffchange,
+td.diff-deletedline .diffchange {
+ background-color: transparent;
+}
+
+td.diff-addedline .diffchange {
+ text-decoration: underline;
+}
+
+td.diff-deletedline .diffchange {
+ text-decoration: line-through;
+}
diff --git a/resources/src/mediawiki.action/mediawiki.action.history.js b/resources/src/mediawiki.action/mediawiki.action.history.js
index ac48c596..2ebfe921 100644
--- a/resources/src/mediawiki.action/mediawiki.action.history.js
+++ b/resources/src/mediawiki.action/mediawiki.action.history.js
@@ -85,7 +85,8 @@ jQuery( function ( $ ) {
$copyForm.find( 'input[name^="ids["]:checked' ).prop( 'checked', false );
// Remove diff=&oldid=, change action=historysubmit to revisiondelete, remove revisiondelete
- } else if ( $historySubmitter.hasClass( 'mw-history-revisiondelete-button' ) ) {
+ } else if ( $historySubmitter.hasClass( 'mw-history-revisiondelete-button' ) ||
+ $historySubmitter.hasClass( 'mw-history-editchangetags-button' ) ) {
$copyRadios.remove();
$copyAction.val( $historySubmitter.attr( 'name' ) );
$copyForm.find( ':submit' ).remove();
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less b/resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less
new file mode 100644
index 00000000..387b0207
--- /dev/null
+++ b/resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less
@@ -0,0 +1,11 @@
+@import "mediawiki.mixins";
+
+.mw-category {
+ .column-count(3);
+ .column-width(24em);
+ .mw-category-group {
+ li {
+ .column-break-inside-avoid;
+ }
+ }
+}
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js b/resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js
index 2ded40cf..2be29f09 100644
--- a/resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js
+++ b/resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js
@@ -4,9 +4,16 @@
( function ( mw, $ ) {
$( function () {
mw.util.$content.dblclick( function ( e ) {
- e.preventDefault();
- // Trigger native HTMLElement click instead of opening URL (bug 43052)
- $( '#ca-edit a' ).get( 0 ).click();
+ // Recheck preference so extensions can do a hack to disable this code.
+ if ( parseInt( mw.user.options.get( 'editondblclick' ), 10 ) ) {
+ e.preventDefault();
+ // Trigger native HTMLElement click instead of opening URL (bug 43052)
+ var $a = $( '#ca-edit a' );
+ // Not every page has an edit link (bug 57713)
+ if ( $a.length ) {
+ $a.get( 0 ).click();
+ }
+ }
} );
} );
}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.metadata.css b/resources/src/mediawiki.action/mediawiki.action.view.metadata.css
index 2c8d2e65..9f786ecb 100644
--- a/resources/src/mediawiki.action/mediawiki.action.view.metadata.css
+++ b/resources/src/mediawiki.action/mediawiki.action.view.metadata.css
@@ -4,3 +4,13 @@
table.collapsed tr.collapsable {
display: none;
}
+
+/*
+ * Exclude user interface elements from selection.
+ */
+.mw-metadata-show-hide-extended {
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js b/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
index 4d2c47a5..c008dfd8 100644
--- a/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
+++ b/resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
@@ -30,14 +30,7 @@
data.message = $.parseHTML( mw.message( 'postedit-confirmation-saved', data.user || mw.user ).escaped() );
}
- $div = $(
- '<div class="postedit-container">' +
- '<div class="postedit">' +
- '<div class="postedit-icon postedit-icon-checkmark postedit-content"></div>' +
- '<a href="#" class="postedit-close">&times;</a>' +
- '</div>' +
- '</div>'
- );
+ $div = mw.template.get( 'mediawiki.action.view.postEdit', 'postEdit.html' ).render();
if ( typeof data.message === 'string' ) {
$div.find( '.postedit-content' ).text( data.message );
@@ -83,4 +76,4 @@
mw.cookie.set( cookieKey, null );
}
-} ( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.redirect.js b/resources/src/mediawiki.action/mediawiki.action.view.redirect.js
index 52e0d4e3..e66d8f69 100644
--- a/resources/src/mediawiki.action/mediawiki.action.view.redirect.js
+++ b/resources/src/mediawiki.action/mediawiki.action.view.redirect.js
@@ -11,9 +11,6 @@
fragment = null,
shouldChangeFragment, index;
- // Clear internal mw.config entries, so that no one tries to depend on them
- mw.config.set( 'wgInternalRedirectTargetUrl', null );
-
index = canonical.indexOf( '#' );
if ( index !== -1 ) {
fragment = canonical.slice( index );
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css b/resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css
index fdbb655f..a92f1c16 100644
--- a/resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css
+++ b/resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css
@@ -24,15 +24,21 @@
margin: 0;
padding: 0;
padding-left: 42px;
+ background: transparent url(images/nextredirect-ltr.png) bottom left no-repeat;
/* @embed */
- background: url(images/nextredirect-ltr.png) bottom left no-repeat;
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/nextredirect-ltr.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/nextredirect-ltr.svg);
}
/* @noflip */
.mw-content-ltr .redirectText li:first-child {
padding-left: 47px;
+ background: transparent url(images/redirect-ltr.png) bottom left no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/redirect-ltr.svg);
/* @embed */
- background: url(images/redirect-ltr.png) bottom left no-repeat;
+ background-image: linear-gradient(transparent, transparent), url(images/redirect-ltr.svg);
}
/* @noflip */
@@ -41,13 +47,19 @@
margin: 0;
padding: 0;
padding-right: 42px;
+ background: transparent url(images/nextredirect-rtl.png) bottom right no-repeat;
/* @embed */
- background: url(images/nextredirect-rtl.png) bottom right no-repeat;
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/nextredirect-rtl.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/nextredirect-rtl.svg);
}
/* @noflip */
.mw-content-rtl .redirectText li:first-child {
padding-right: 47px;
+ background: transparent url(images/redirect-rtl.png) bottom right no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/redirect-rtl.svg);
/* @embed */
- background: url(images/redirect-rtl.png) bottom right no-repeat;
+ background-image: linear-gradient(transparent, transparent), url(images/redirect-rtl.svg);
}
diff --git a/resources/src/mediawiki.action/templates/postEdit.html b/resources/src/mediawiki.action/templates/postEdit.html
new file mode 100644
index 00000000..dbb482a6
--- /dev/null
+++ b/resources/src/mediawiki.action/templates/postEdit.html
@@ -0,0 +1,6 @@
+<div class="postedit-container">
+ <div class="postedit">
+ <div class="postedit-icon postedit-icon-checkmark postedit-content"></div>
+ <a href="#" class="postedit-close">&times;</a>
+ </div>
+</div>
diff --git a/resources/src/mediawiki.api/mediawiki.api.category.js b/resources/src/mediawiki.api/mediawiki.api.category.js
index 7dd9730f..14077e02 100644
--- a/resources/src/mediawiki.api/mediawiki.api.category.js
+++ b/resources/src/mediawiki.api/mediawiki.api.category.js
@@ -3,29 +3,21 @@
*/
( function ( mw, $ ) {
- var msg = 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.';
$.extend( mw.Api.prototype, {
/**
* Determine if a category exists.
*
* @param {mw.Title|string} title
- * @param {Function} [ok] Success callback (deprecated)
- * @param {Function} [err] Error callback (deprecated)
* @return {jQuery.Promise}
* @return {Function} return.done
* @return {boolean} return.done.isCategory Whether the category exists.
*/
- isCategory: function ( title, ok, err ) {
+ isCategory: function ( title ) {
var apiPromise = this.get( {
prop: 'categoryinfo',
titles: String( title )
} );
- if ( ok || err ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( msg );
- }
-
return apiPromise
.then( function ( data ) {
var exists = false;
@@ -38,8 +30,6 @@
}
return exists;
} )
- .done( ok )
- .fail( err )
.promise( { abort: apiPromise.abort } );
},
@@ -49,13 +39,11 @@
* E.g. given "Foo", return "Food", "Foolish people", "Foosball tables"...
*
* @param {string} prefix Prefix to match.
- * @param {Function} [ok] Success callback (deprecated)
- * @param {Function} [err] Error callback (deprecated)
* @return {jQuery.Promise}
* @return {Function} return.done
* @return {string[]} return.done.categories Matched categories
*/
- getCategoriesByPrefix: function ( prefix, ok, err ) {
+ getCategoriesByPrefix: function ( prefix ) {
// Fetch with allpages to only get categories that have a corresponding description page.
var apiPromise = this.get( {
list: 'allpages',
@@ -63,11 +51,6 @@
apnamespace: mw.config.get( 'wgNamespaceIds' ).category
} );
- if ( ok || err ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( msg );
- }
-
return apiPromise
.then( function ( data ) {
var texts = [];
@@ -78,8 +61,6 @@
}
return texts;
} )
- .done( ok )
- .fail( err )
.promise( { abort: apiPromise.abort } );
},
@@ -87,34 +68,17 @@
* Get the categories that a particular page on the wiki belongs to.
*
* @param {mw.Title|string} title
- * @param {Function} [ok] Success callback (deprecated)
- * @param {Function} [err] Error callback (deprecated)
- * @param {boolean} [async=true] Asynchronousness (deprecated)
* @return {jQuery.Promise}
* @return {Function} return.done
* @return {boolean|mw.Title[]} return.done.categories List of category titles or false
* if title was not found.
*/
- getCategories: function ( title, ok, err, async ) {
+ getCategories: function ( title ) {
var apiPromise = this.get( {
prop: 'categories',
titles: String( title )
- }, {
- async: async === undefined ? true : async
} );
- if ( ok || err ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( msg );
- }
- if ( async !== undefined ) {
- mw.track( 'mw.deprecate', 'api.async' );
- mw.log.warn(
- 'Use of mediawiki.api async=false param is deprecated. ' +
- 'The sychronous mode will be removed in the future.'
- );
- }
-
return apiPromise
.then( function ( data ) {
var titles = false;
@@ -132,8 +96,6 @@
}
return titles;
} )
- .done( ok )
- .fail( err )
.promise( { abort: apiPromise.abort } );
}
} );
diff --git a/resources/src/mediawiki.api/mediawiki.api.edit.js b/resources/src/mediawiki.api/mediawiki.api.edit.js
index e88ae5e2..dbe45bf6 100644
--- a/resources/src/mediawiki.api/mediawiki.api.edit.js
+++ b/resources/src/mediawiki.api/mediawiki.api.edit.js
@@ -3,7 +3,6 @@
*/
( function ( mw, $ ) {
- var msg = 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.';
$.extend( mw.Api.prototype, {
/**
@@ -12,35 +11,21 @@
* cached token and start over.
*
* @param {Object} params API parameters
- * @param {Function} [ok] Success callback (deprecated)
- * @param {Function} [err] Error callback (deprecated)
* @return {jQuery.Promise} See #post
*/
- postWithEditToken: function ( params, ok, err ) {
- if ( ok || err ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( msg );
- }
-
- return this.postWithToken( 'edit', params ).done( ok ).fail( err );
+ postWithEditToken: function ( params ) {
+ return this.postWithToken( 'edit', params );
},
/**
* API helper to grab an edit token.
*
- * @param {Function} [ok] Success callback (deprecated)
- * @param {Function} [err] Error callback (deprecated)
* @return {jQuery.Promise}
* @return {Function} return.done
* @return {string} return.done.token Received token.
*/
- getEditToken: function ( ok, err ) {
- if ( ok || err ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( msg );
- }
-
- return this.getToken( 'edit' ).done( ok ).fail( err );
+ getEditToken: function () {
+ return this.getToken( 'edit' );
},
/**
@@ -50,32 +35,16 @@
* @param {string} header
* @param {string} message wikitext message
* @param {Object} [additionalParams] Additional API parameters, e.g. `{ redirect: true }`
- * @param {Function} [ok] Success handler (deprecated)
- * @param {Function} [err] Error handler (deprecated)
* @return {jQuery.Promise}
*/
- newSection: function ( title, header, message, additionalParams, ok, err ) {
- // Until we remove 'ok' and 'err' parameters, we have to support code that passes them,
- // but not additionalParams...
- if ( $.isFunction( additionalParams ) ) {
- err = ok;
- ok = additionalParams;
- additionalParams = undefined;
- }
-
- if ( ok || err ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( msg );
- }
-
+ newSection: function ( title, header, message, additionalParams ) {
return this.postWithEditToken( $.extend( {
action: 'edit',
section: 'new',
- format: 'json',
title: String( title ),
summary: header,
text: message
- }, additionalParams ) ).done( ok ).fail( err );
+ }, additionalParams ) );
}
} );
diff --git a/resources/src/mediawiki.api/mediawiki.api.js b/resources/src/mediawiki.api/mediawiki.api.js
index 51b3238c..3a19e021 100644
--- a/resources/src/mediawiki.api/mediawiki.api.js
+++ b/resources/src/mediawiki.api/mediawiki.api.js
@@ -49,6 +49,16 @@
* console.log( data );
* } );
*
+ * Multiple values for a parameter can be specified using an array (since MW 1.25):
+ *
+ * var api = new mw.Api();
+ * api.get( {
+ * action: 'query',
+ * meta: [ 'userinfo', 'siteinfo' ] // same effect as 'userinfo|siteinfo'
+ * } ).done ( function ( data ) {
+ * console.log( data );
+ * } );
+ *
* @class
*
* @constructor
@@ -75,31 +85,14 @@
mw.Api.prototype = {
/**
- * Normalize the ajax options for compatibility and/or convenience methods.
- *
- * @param {Object} [arg] An object contaning one or more of options.ajax.
- * @return {Object} Normalized ajax options.
- */
- normalizeAjaxOptions: function ( arg ) {
- // Arg argument is usually empty
- // (before MW 1.20 it was used to pass ok callbacks)
- var opts = arg || {};
- // Options can also be a success callback handler
- if ( typeof arg === 'function' ) {
- opts = { ok: arg };
- }
- return opts;
- },
-
- /**
* Perform API get request
*
* @param {Object} parameters
- * @param {Object|Function} [ajaxOptions]
+ * @param {Object} [ajaxOptions]
* @return {jQuery.Promise}
*/
get: function ( parameters, ajaxOptions ) {
- ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
+ ajaxOptions = ajaxOptions || {};
ajaxOptions.type = 'GET';
return this.ajax( parameters, ajaxOptions );
},
@@ -110,11 +103,11 @@
* TODO: Post actions for non-local hostnames will need proxy.
*
* @param {Object} parameters
- * @param {Object|Function} [ajaxOptions]
+ * @param {Object} [ajaxOptions]
* @return {jQuery.Promise}
*/
post: function ( parameters, ajaxOptions ) {
- ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
+ ajaxOptions = ajaxOptions || {};
ajaxOptions.type = 'POST';
return this.ajax( parameters, ajaxOptions );
},
@@ -130,7 +123,6 @@
ajax: function ( parameters, ajaxOptions ) {
var token,
apiDeferred = $.Deferred(),
- msg = 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.',
xhr, key, formData;
parameters = $.extend( {}, this.defaults.parameters, parameters );
@@ -142,6 +134,12 @@
delete parameters.token;
}
+ for ( key in parameters ) {
+ if ( $.isArray( parameters[key] ) ) {
+ parameters[key] = parameters[key].join( '|' );
+ }
+ }
+
// If multipart/form-data has been requested and emulation is possible, emulate it
if (
ajaxOptions.type === 'POST' &&
@@ -183,21 +181,6 @@
}
}
- // Backwards compatibility: Before MediaWiki 1.20,
- // callbacks were done with the 'ok' and 'err' property in ajaxOptions.
- if ( ajaxOptions.ok ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( msg );
- apiDeferred.done( ajaxOptions.ok );
- delete ajaxOptions.ok;
- }
- if ( ajaxOptions.err ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( msg );
- apiDeferred.fail( ajaxOptions.err );
- delete ajaxOptions.err;
- }
-
// Make the AJAX request
xhr = $.ajax( ajaxOptions )
// If AJAX fails, reject API call with error code 'http'
@@ -251,13 +234,7 @@
postWithToken: function ( tokenType, params, ajaxOptions ) {
var api = this;
- // Do not allow deprecated ok-callback
- // FIXME: Remove this check when the deprecated ok-callback is removed in #post
- if ( $.isFunction( ajaxOptions ) ) {
- ajaxOptions = undefined;
- }
-
- return api.getToken( tokenType ).then( function ( token ) {
+ return api.getToken( tokenType, params.assert ).then( function ( token ) {
params.token = token;
return api.post( params, ajaxOptions ).then(
// If no error, return to caller as-is
@@ -270,7 +247,7 @@
params.token = undefined;
// Try again, once
- return api.getToken( tokenType ).then( function ( token ) {
+ return api.getToken( tokenType, params.assert ).then( function ( token ) {
params.token = token;
return api.post( params, ajaxOptions );
} );
@@ -286,19 +263,21 @@
/**
* Get a token for a certain action from the API.
*
+ * The assert parameter is only for internal use by postWithToken.
+ *
* @param {string} type Token type
* @return {jQuery.Promise}
* @return {Function} return.done
* @return {string} return.done.token Received token.
* @since 1.22
*/
- getToken: function ( type ) {
+ getToken: function ( type, assert ) {
var apiPromise,
promiseGroup = promises[ this.defaults.ajax.url ],
d = promiseGroup && promiseGroup[ type + 'Token' ];
if ( !d ) {
- apiPromise = this.get( { action: 'tokens', type: type } );
+ apiPromise = this.get( { action: 'tokens', type: type, assert: assert } );
d = apiPromise
.then( function ( data ) {
@@ -357,7 +336,6 @@
'nomodule',
'mustbeposted',
'badaccess-groups',
- 'stashfailed',
'missingresult',
'missingparam',
'invalid-file-key',
@@ -379,7 +357,18 @@
'fetchfileerror',
'fileexists-shared-forbidden',
'invalidtitle',
- 'notloggedin'
+ 'notloggedin',
+
+ // Stash-specific errors - expanded
+ 'stashfailed',
+ 'stasherror',
+ 'stashedfilenotfound',
+ 'stashpathinvalid',
+ 'stashfilestorage',
+ 'stashzerolength',
+ 'stashnotloggedin',
+ 'stashwrongowner',
+ 'stashnosuchfilekey'
];
/**
diff --git a/resources/src/mediawiki.api/mediawiki.api.login.js b/resources/src/mediawiki.api/mediawiki.api.login.js
index ccbae06c..25257927 100644
--- a/resources/src/mediawiki.api/mediawiki.api.login.js
+++ b/resources/src/mediawiki.api/mediawiki.api.login.js
@@ -14,8 +14,7 @@
* @return {jQuery.Promise} See mw.Api#post
*/
login: function ( username, password ) {
- var params, request,
- deferred = $.Deferred(),
+ var params, apiPromise, innerPromise,
api = this;
params = {
@@ -24,25 +23,31 @@
lgpassword: password
};
- request = api.post( params );
- request.fail( deferred.reject );
- request.done( function ( data ) {
- params.lgtoken = data.login.token;
- api.post( params )
- .fail( deferred.reject )
- .done( function ( data ) {
- var code;
- if ( data.login && data.login.result === 'Success' ) {
- deferred.resolve( data );
- } else {
- // Set proper error code whenever possible
- code = data.error && data.error.code || 'unknown';
- deferred.reject( code, data );
- }
- } );
- } );
+ apiPromise = api.post( params );
- return deferred.promise( { abort: request.abort } );
+ return apiPromise
+ .then( function ( data ) {
+ params.lgtoken = data.login.token;
+ innerPromise = api.post( params )
+ .then( function ( data ) {
+ var code;
+ if ( data.login.result !== 'Success' ) {
+ // Set proper error code whenever possible
+ code = data.error && data.error.code || 'unknown';
+ return $.Deferred().reject( code, data );
+ }
+ return data;
+ } );
+ return innerPromise;
+ } )
+ .promise( {
+ abort: function () {
+ apiPromise.abort();
+ if ( innerPromise ) {
+ innerPromise.abort();
+ }
+ }
+ } );
}
} );
diff --git a/resources/src/mediawiki.api/mediawiki.api.options.js b/resources/src/mediawiki.api/mediawiki.api.options.js
new file mode 100644
index 00000000..b839fbdc
--- /dev/null
+++ b/resources/src/mediawiki.api/mediawiki.api.options.js
@@ -0,0 +1,89 @@
+/**
+ * @class mw.Api.plugin.options
+ */
+( function ( mw, $ ) {
+
+ $.extend( mw.Api.prototype, {
+
+ /**
+ * Asynchronously save the value of a single user option using the API. See #saveOptions.
+ *
+ * @param {string} name
+ * @param {string|null} value
+ * @return {jQuery.Promise}
+ */
+ saveOption: function ( name, value ) {
+ var param = {};
+ param[name] = value;
+ return this.saveOptions( param );
+ },
+
+ /**
+ * Asynchronously save the values of user options using the API.
+ *
+ * If a value of `null` is provided, the given option will be reset to the default value.
+ *
+ * Any warnings returned by the API, including warnings about invalid option names or values,
+ * are ignored. However, do not rely on this behavior.
+ *
+ * If necessary, the options will be saved using several parallel API requests. Only one promise
+ * is always returned that will be resolved when all requests complete.
+ *
+ * @param {Object} options Options as a `{ name: value, … }` object
+ * @return {jQuery.Promise}
+ */
+ saveOptions: function ( options ) {
+ var name, value, bundleable,
+ grouped = [],
+ deferreds = [];
+
+ for ( name in options ) {
+ value = options[name] === null ? null : String( options[name] );
+
+ // Can we bundle this option, or does it need a separate request?
+ bundleable =
+ ( value === null || value.indexOf( '|' ) === -1 ) &&
+ ( name.indexOf( '|' ) === -1 && name.indexOf( '=' ) === -1 );
+
+ if ( bundleable ) {
+ if ( value !== null ) {
+ grouped.push( name + '=' + value );
+ } else {
+ // Omitting value resets the option
+ grouped.push( name );
+ }
+ } else {
+ if ( value !== null ) {
+ deferreds.push( this.postWithToken( 'options', {
+ action: 'options',
+ optionname: name,
+ optionvalue: value
+ } ) );
+ } else {
+ // Omitting value resets the option
+ deferreds.push( this.postWithToken( 'options', {
+ action: 'options',
+ optionname: name
+ } ) );
+ }
+ }
+ }
+
+ if ( grouped.length ) {
+ deferreds.push( this.postWithToken( 'options', {
+ action: 'options',
+ change: grouped.join( '|' )
+ } ) );
+ }
+
+ return $.when.apply( $, deferreds );
+ }
+
+ } );
+
+ /**
+ * @class mw.Api
+ * @mixins mw.Api.plugin.options
+ */
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.api/mediawiki.api.parse.js b/resources/src/mediawiki.api/mediawiki.api.parse.js
index b1f1d2b0..2dcf8078 100644
--- a/resources/src/mediawiki.api/mediawiki.api.parse.js
+++ b/resources/src/mediawiki.api/mediawiki.api.parse.js
@@ -8,31 +8,21 @@
* Convenience method for 'action=parse'.
*
* @param {string} wikitext
- * @param {Function} [ok] Success callback (deprecated)
- * @param {Function} [err] Error callback (deprecated)
* @return {jQuery.Promise}
* @return {Function} return.done
* @return {string} return.done.data Parsed HTML of `wikitext`.
*/
- parse: function ( wikitext, ok, err ) {
+ parse: function ( wikitext ) {
var apiPromise = this.get( {
action: 'parse',
contentmodel: 'wikitext',
text: wikitext
} );
- // Backwards compatibility (< MW 1.20)
- if ( ok || err ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.' );
- }
-
return apiPromise
.then( function ( data ) {
return data.parse.text['*'];
} )
- .done( ok )
- .fail( err )
.promise( { abort: apiPromise.abort } );
}
} );
diff --git a/resources/src/mediawiki.api/mediawiki.api.watch.js b/resources/src/mediawiki.api/mediawiki.api.watch.js
index af2dee10..40ba136d 100644
--- a/resources/src/mediawiki.api/mediawiki.api.watch.js
+++ b/resources/src/mediawiki.api/mediawiki.api.watch.js
@@ -12,8 +12,6 @@
* @param {string|mw.Title|string[]|mw.Title[]} pages Full page name or instance of mw.Title, or an
* array thereof. If an array is passed, the return value passed to the promise will also be an
* array of appropriate objects.
- * @param {Function} [ok] Success callback (deprecated)
- * @param {Function} [err] Error callback (deprecated)
* @return {jQuery.Promise}
* @return {Function} return.done
* @return {Object|Object[]} return.done.watch Object or list of objects (depends on the `pages`
@@ -22,7 +20,7 @@
* @return {boolean} return.done.watch.watched Whether the page is now watched or unwatched
* @return {string} return.done.watch.message Parsed HTML of the confirmational interface message
*/
- function doWatchInternal( pages, ok, err, addParams ) {
+ function doWatchInternal( pages, addParams ) {
// XXX: Parameter addParams is undocumented because we inherit this
// documentation in the public method...
var apiPromise = this.postWithToken( 'watch',
@@ -36,19 +34,11 @@
)
);
- // Backwards compatibility (< MW 1.20)
- if ( ok || err ) {
- mw.track( 'mw.deprecate', 'api.cbParam' );
- mw.log.warn( 'Use of mediawiki.api callback params is deprecated. Use the Promise instead.' );
- }
-
return apiPromise
.then( function ( data ) {
// If a single page was given (not an array) respond with a single item as well.
return $.isArray( pages ) ? data.watch : data.watch[0];
} )
- .done( ok )
- .fail( err )
.promise( { abort: apiPromise.abort } );
}
@@ -58,16 +48,17 @@
*
* @inheritdoc #doWatchInternal
*/
- watch: function ( pages, ok, err ) {
- return doWatchInternal.call( this, pages, ok, err );
+ watch: function ( pages ) {
+ return doWatchInternal.call( this, pages );
},
+
/**
* Convenience method for `action=watch&unwatch=1`.
*
* @inheritdoc #doWatchInternal
*/
- unwatch: function ( pages, ok, err ) {
- return doWatchInternal.call( this, pages, ok, err, { unwatch: 1 } );
+ unwatch: function ( pages ) {
+ return doWatchInternal.call( this, pages, { unwatch: 1 } );
}
} );
diff --git a/resources/src/mediawiki.language/languages/fi.js b/resources/src/mediawiki.language/languages/fi.js
index 453a675d..d9c2b06d 100644
--- a/resources/src/mediawiki.language/languages/fi.js
+++ b/resources/src/mediawiki.language/languages/fi.js
@@ -17,7 +17,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
if ( word.match( /wiki$/i ) ) {
aou = false;
}
- //append i after final consonant
+ // append i after final consonant
if ( word.match( /[bcdfghjklmnpqrstvwxz]$/i ) ) {
word += 'i';
}
diff --git a/resources/src/mediawiki.language/languages/hsb.js b/resources/src/mediawiki.language/languages/hsb.js
index 2d6b733e..2c0abd3d 100644
--- a/resources/src/mediawiki.language/languages/hsb.js
+++ b/resources/src/mediawiki.language/languages/hsb.js
@@ -14,6 +14,6 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
case 'lokatiw': // lokatiw
word = 'wo ' + word;
break;
- }
+ }
return word;
};
diff --git a/resources/src/mediawiki.language/languages/hy.js b/resources/src/mediawiki.language/languages/hy.js
index 9cae360b..c4a1cf73 100644
--- a/resources/src/mediawiki.language/languages/hy.js
+++ b/resources/src/mediawiki.language/languages/hy.js
@@ -24,6 +24,6 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
word = word + 'ի';
}
break;
- }
+ }
return word;
};
diff --git a/resources/src/mediawiki.language/languages/os.js b/resources/src/mediawiki.language/languages/os.js
index 787be36d..554e99d4 100644
--- a/resources/src/mediawiki.language/languages/os.js
+++ b/resources/src/mediawiki.language/languages/os.js
@@ -21,15 +21,14 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
if ( word.match( /тæ$/i ) ) {
word = word.slice( 0, -1 );
endAllative = 'æм';
- }
- // Works if word is in singular form.
- // Checking if word ends on one of the vowels: е, ё, и, о, ы, э, ю, я.
- else if ( word.match( /[аæеёиоыэюя]$/i ) ) {
+ } else if ( word.match( /[аæеёиоыэюя]$/i ) ) {
+ // Works if word is in singular form.
+ // Checking if word ends on one of the vowels: е, ё, и, о, ы, э, ю, я.
jot = 'й';
- }
- // Checking if word ends on 'у'. 'У' can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
- // Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.
- else if ( word.match( /у$/i ) ) {
+ } else if ( word.match( /у$/i ) ) {
+ // Checking if word ends on 'у'. 'У' can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
+ // Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.
+
if ( !word.slice( -2, -1 ).match( /[аæеёиоыэюя]$/i ) ) {
jot = 'й';
}
@@ -50,8 +49,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
case 'ablative':
if ( jot === 'й' ) {
ending = hyphen + jot + 'æ';
- }
- else {
+ } else {
ending = hyphen + jot + 'æй';
}
break;
diff --git a/resources/src/mediawiki.language/mediawiki.language.init.js b/resources/src/mediawiki.language/mediawiki.language.init.js
index df95d751..b3765c85 100644
--- a/resources/src/mediawiki.language/mediawiki.language.init.js
+++ b/resources/src/mediawiki.language/mediawiki.language.init.js
@@ -54,6 +54,7 @@
*/
getData: function ( langCode, dataKey ) {
var langData = mw.language.data;
+ langCode = langCode.toLowerCase();
if ( langData && langData[langCode] instanceof mw.Map ) {
return langData[langCode].get( dataKey );
}
@@ -71,6 +72,7 @@
*/
setData: function ( langCode, dataKey, value ) {
var langData = mw.language.data;
+ langCode = langCode.toLowerCase();
if ( !( langData[langCode] instanceof mw.Map ) ) {
langData[langCode] = new mw.Map();
}
diff --git a/resources/src/mediawiki.language/mediawiki.language.js b/resources/src/mediawiki.language/mediawiki.language.js
index d4f3c69e..78e39191 100644
--- a/resources/src/mediawiki.language/mediawiki.language.js
+++ b/resources/src/mediawiki.language/mediawiki.language.js
@@ -40,39 +40,18 @@ $.extend( mw.language, {
*
* @param {number} count Non-localized quantifier
* @param {Array} forms List of plural forms
+ * @param {Object} [explicitPluralForms] List of explicit plural forms
* @return {string} Correct form for quantifier in this language
*/
- convertPlural: function ( count, forms ) {
+ convertPlural: function ( count, forms, explicitPluralForms ) {
var pluralRules,
- formCount,
- form,
- index,
- equalsPosition,
pluralFormIndex = 0;
- if ( !forms || forms.length === 0 ) {
- return '';
- }
-
- // Handle for explicit n= forms
- for ( index = 0; index < forms.length; index++ ) {
- form = forms[index];
- if ( /^\d+=/.test( form ) ) {
- equalsPosition = form.indexOf( '=' );
- formCount = parseInt( form.slice( 0, equalsPosition ), 10 );
- if ( formCount === count ) {
- return form.slice( equalsPosition + 1 );
- }
- forms[index] = undefined;
- }
+ if ( explicitPluralForms && explicitPluralForms[count] ) {
+ return explicitPluralForms[count];
}
- // Remove explicit plural forms from the forms.
- forms = $.map( forms, function ( form ) {
- return form;
- } );
-
- if ( forms.length === 0 ) {
+ if ( !forms || forms.length === 0 ) {
return '';
}
@@ -107,7 +86,7 @@ $.extend( mw.language, {
* Usage in message text: `{{gender:[gender|user object]|masculine|feminine|neutral}}`.
* If second or third parameter are not specified, masculine is used.
*
- * These details may be overriden per language.
+ * These details may be overridden per language.
*
* @param {string} gender 'male', 'female', or anything else for neutral.
* @param {Array} forms List of gender forms
@@ -155,7 +134,9 @@ $.extend( mw.language, {
* @return {string}
*/
listToText: function ( list ) {
- var text = '', i = 0;
+ var text = '',
+ i = 0;
+
for ( ; i < list.length; i++ ) {
text += list[i];
if ( list.length - 2 === i ) {
@@ -165,6 +146,10 @@ $.extend( mw.language, {
}
}
return text;
+ },
+
+ setSpecialCharacters: function ( data ) {
+ this.specialCharacters = data;
}
} );
diff --git a/resources/src/mediawiki.language/mediawiki.language.numbers.js b/resources/src/mediawiki.language/mediawiki.language.numbers.js
index a0b81410..3c13055b 100644
--- a/resources/src/mediawiki.language/mediawiki.language.numbers.js
+++ b/resources/src/mediawiki.language/mediawiki.language.numbers.js
@@ -187,8 +187,12 @@
tmp[ transformTable[ i ] ] = i;
}
transformTable = tmp;
- numberString = num + '';
+ numberString = String( num );
} else {
+ // Ignore transform table if wgTranslateNumerals is false
+ if ( !mw.config.get( 'wgTranslateNumerals' ) ) {
+ transformTable = [];
+ }
numberString = mw.language.commafy( num, pattern );
}
diff --git a/resources/src/mediawiki.language/specialcharacters.json b/resources/src/mediawiki.language/specialcharacters.json
new file mode 100644
index 00000000..bab92a1b
--- /dev/null
+++ b/resources/src/mediawiki.language/specialcharacters.json
@@ -0,0 +1 @@
+{"latin":["Á","á","À","à","Â","â","Ä","ä","Ã","ã","Ǎ","ǎ","Ā","ā","Ă","ă","Ą","ą","Å","å","Ć","ć","Ĉ","ĉ","Ç","ç","Č","č","Ċ","ċ","Đ","đ","Ď","ď","É","é","È","è","Ê","ê","Ë","ë","Ě","ě","Ē","ē","Ĕ","ĕ","Ė","ė","Ę","ę","Ĝ","ĝ","Ģ","ģ","Ğ","ğ","Ġ","ġ","Ĥ","ĥ","Ħ","ħ","Í","í","Ì","ì","Î","î","Ï","ï","Ĩ","ĩ","Ǐ","ǐ","Ī","ī","Ĭ","ĭ","İ","ı","Į","į","Ĵ","ĵ","Ķ","ķ","Ĺ","ĺ","Ļ","ļ","Ľ","ľ","Ł","ł","Ń","ń","Ñ","ñ","Ņ","ņ","Ň","ň","Ó","ó","Ò","ò","Ô","ô","Ö","ö","Õ","õ","Ǒ","ǒ","Ō","ō","Ŏ","ŏ","Ǫ","ǫ","Ő","ő","Ŕ","ŕ","Ŗ","ŗ","Ř","ř","Ś","ś","Ŝ","ŝ","Ş","ş","Š","š","Ș","ș","Ț","ț","Ť","ť","Ú","ú","Ù","ù","Û","û","Ü","ü","Ũ","ũ","Ů","ů","Ǔ","ǔ","Ū","ū","ǖ","ǘ","ǚ","ǜ","Ŭ","ŭ","Ų","ų","Ű","ű","Ŵ","ŵ","Ý","ý","Ŷ","ŷ","Ÿ","ÿ","Ȳ","ȳ","Ź","ź","Ž","ž","Ż","ż","Æ","æ","Ǣ","ǣ","Ø","ø","Œ","œ","ß","Ð","ð","Þ","þ","Ə","ə"],"latinextended":["Ḁ","ḁ","ẚ","Ạ","ạ","Ả","ả","Ấ","ấ","Ầ","ầ","Ẩ","ẩ","Ẫ","ẫ","Ậ","ậ","Ắ","ắ","Ằ","ằ","Ẳ","ẳ","Ẵ","ẵ","Ặ","ặ","Ḃ","ḃ","Ḅ","ḅ","Ḇ","ḇ","Ḉ","ḉ","Ḋ","ḋ","Ḍ","ḍ","Ḏ","ḏ","Ḑ","ḑ","Ḓ","ḓ","Ḕ","ḕ","Ḗ","ḗ","Ḙ","ḙ","Ḛ","ḛ","Ḝ","ḝ","Ẹ","ẹ","Ẻ","ẻ","Ẽ","ẽ","Ế","ế","Ề","ề","Ể","ể","Ễ","ễ","Ệ","ệ","Ḟ","ḟ","Ḡ","ḡ","Ḣ","ḣ","Ḥ","ḥ","Ḧ","ḧ","Ḩ","ḩ","Ḫ","ḫ","ẖ","Ḭ","ḭ","Ḯ","ḯ","Ỉ","ỉ","Ị","ị","Ḱ","ḱ","Ḳ","ḳ","Ḵ","ḵ","Ḷ","ḷ","Ḹ","ḹ","Ḻ","ḻ","Ḽ","ḽ","Ỻ","ỻ","Ḿ","ḿ","Ṁ","ṁ","Ṃ","ṃ","Ṅ","ṅ","Ṇ","ṇ","Ṉ","ṉ","Ṋ","ṋ","Ṍ","ṍ","Ṏ","ṏ","Ṑ","ṑ","Ṓ","ṓ","Ọ","ọ","Ỏ","ỏ","Ố","ố","Ồ","ồ","Ổ","ổ","Ỗ","ỗ","Ộ","ộ","Ớ","ớ","Ờ","ờ","Ở","ở","Ỡ","ỡ","Ợ","ợ","Ǿ","ǿ","Ơ","ơ","Ṕ","ṕ","Ṗ","ṗ","Ṙ","ṙ","Ṛ","ṛ","Ṝ","ṝ","Ṟ","ṟ","Ṡ","ṡ","ẛ","Ṣ","ṣ","Ṥ","ṥ","Ṧ","ṧ","Ṩ","ṩ","ẜ","ẝ","Ṫ","ṫ","Ṭ","ṭ","Ṯ","ṯ","Ṱ","ṱ","ẗ","Ṳ","ṳ","Ṵ","ṵ","Ṷ","ṷ","Ṹ","ṹ","Ṻ","ṻ","Ụ","ụ","Ủ","ủ","Ứ","ứ","Ừ","ừ","Ử","ử","Ữ","ữ","Ự","ự","Ư","ư","Ǖ","Ǘ","Ǚ","Ǜ","Ṽ","ṽ","Ṿ","ṿ","Ỽ","ỽ","Ẁ","ẁ","Ẃ","ẃ","Ẅ","ẅ","Ẇ","ẇ","Ẉ","ẉ","ẘ","Ẋ","ẋ","Ẍ","ẍ","Ẏ","ẏ","ẙ","Ỳ","ỳ","Ỵ","ỵ","Ỷ","ỷ","Ỹ","ỹ","Ỿ","ỿ","Ẑ","ẑ","Ẓ","ẓ","Ẕ","ẕ","Ǽ","ǽ","ẞ","ẟ"],"ipa":["p","t̪","t","ʈ","c","k","q","ʡ","ʔ","b","d̪","d","ɖ","ɟ","ɡ","ɢ","ɓ","ɗ","ʄ","ɠ","ʛ","t͡s","t͡ʃ","t͡ɕ","d͡z","d͡ʒ","d͡ʑ","ɸ","f","θ","s","ʃ","ʅ","ʆ","ʂ","ɕ","ç","ɧ","x","χ","ħ","ʜ","h","β","v","ʍ","ð","z","ʒ","ʓ","ʐ","ʑ","ʝ","ɣ","ʁ","ʕ","ʖ","ʢ","ɦ","ɬ","ɮ","m","m̩","ɱ","ɱ̩","ɱ̍","n̪","n̪̍","n","n̩","ɳ","ɳ̩","ɲ","ɲ̩","ŋ","ŋ̍","ŋ̩","ɴ","ɴ̩","ʙ","ʙ̩","r","r̩","ʀ","ʀ̩","ɾ","ɽ","ɿ","ɺ","l̪","l̪̩","l","l̩","ɫ","ɫ̩","ɭ","ɭ̩","ʎ","ʎ̩","ʟ","ʟ̩","w","ɥ","ʋ","ɹ","ɻ","j","ɰ","ʘ","ǂ","ǀ","!","ǁ","ʰ","ʱ","ʷ","ʸ","ʲ","ʳ","ⁿ","ˡ","ʴ","ʵ","ˢ","ˣ","ˠ","ʶ","ˤ","ˁ","ˀ","ʼ","i","i̯","ĩ","y","y̯","ỹ","ɪ","ɪ̯","ɪ̃","ʏ","ʏ̯","ʏ̃","ɨ","ɨ̯","ɨ̃","ʉ","ʉ̯","ʉ̃","ɯ","ɯ̯","ɯ̃","u","u̯","ũ","ʊ","ʊ̯","ʊ̃","e","e̯","ẽ","ø","ø̯","ø̃","ɘ","ɘ̯","ɘ̃","ɵ","ɵ̯","ɵ̃","ɤ","ɤ̯","ɤ̃","o","o̯","õ","ɛ","ɛ̯","ɛ̃","œ","œ̯","œ̃","ɜ","ɜ̯","ɜ̃","ə","ə̯","ə̃","ɞ","ɞ̯","ɞ̃","ʌ","ʌ̯","ʌ̃","ɔ","ɔ̯","ɔ̃","æ","æ̯","æ̃","ɶ","ɶ̯","ɶ̃","a","a̯","ã","ɐ","ɐ̯","ɐ̃","ɑ","ɑ̯","ɑ̃","ɒ","ɒ̯","ɒ̃","ˈ","ˌ","ː","ˑ","˘",".","‿","|","‖","ɚ","ɝ"],"symbols":["~","|","¡","¿","†","‡","↔","↑","↓","•","¶","#","½","⅓","⅔","¼","¾","⅛","⅜","⅝","⅞","∞","‘","’",{"label":"“”","action":{"type":"encapsulate","options":{"pre":"“","post":"”"}}},{"label":"„“","action":{"type":"encapsulate","options":{"pre":"„","post":"“"}}},{"label":"„”","action":{"type":"encapsulate","options":{"pre":"„","post":"”"}}},{"label":"«»","action":{"type":"encapsulate","options":{"pre":"«","post":"»"}}},"¤","₳","฿","₵","¢","₡","₢","$","₫","₯","€","₠","₣","ƒ","₴","₭","₤","ℳ","₥","₦","№","₧","₰","£","៛","₨","₪","৳","₮","₩","¥","♠","♣","♥","♦","m²","m³",{"label":"–","titleMsg":"special-characters-title-endash","action":{"type":"replace","options":{"peri":"–","selectPeri":false}}},{"label":"—","titleMsg":"special-characters-title-emdash","action":{"type":"replace","options":{"peri":"—","selectPeri":false}}},"…","‘","’","“","”","°","′","″","≈","≠","≤","≥","±",{"label":"−","titleMsg":"special-characters-title-minus","action":{"type":"replace","options":{"peri":"−","selectPeri":false}}},"×","÷","←","→","·","§","‽"],"greek":["Α","Ά","α","ά","Β","β","Γ","γ","Δ","δ","Ε","Έ","ε","έ","Ζ","ζ","Η","Ή","η","ή","Θ","θ","Ι","Ί","ι","ί","Κ","κ","Λ","λ","Μ","μ","Ν","ν","Ξ","ξ","Ο","Ό","ο","ό","Π","π","Ρ","ρ","Σ","σ","ς","Τ","τ","Υ","Ύ","υ","ύ","Φ","φ","Χ","χ","Ψ","ψ","Ω","Ώ","ω","ώ"],"cyrillic":["А","а","Ӑ","ӑ","Ӓ","ӓ","Ә","ә","Ӛ","ӛ","Б","б","В","в","Г","г","Ґ","ґ","Ӷ","ӷ","Ѓ","ѓ","Ӻ","ӻ","Ғ","ғ","Ҕ","ҕ","Д","д","Ԁ","ԁ","Ԃ","ԃ","Ђ","ђ","Е","е","Ѐ","ѐ","Є","є","Ё","ё","Ӗ","ӗ","Ҽ","ҽ","Ҿ","ҿ","Ж","ж","Җ","җ","Ӂ","ӂ","Ӝ","ӝ","З","з","Ҙ","ҙ","Ӟ","ӟ","Ԑ","ԑ","Ӡ","ӡ","Ѕ","ѕ","Ԅ","ԅ","Ԇ","ԇ","И","и","І","і","Ї","ї",["◌Ӏ","Ӏ"],["◌ӏ","ӏ"],"Й","й","Ӣ","ӣ","Ѝ","ѝ","Ҋ","ҋ","Ӥ","ӥ","Ј","ј","К","к","Ќ","ќ","Қ","қ","Ҝ","ҝ","Ҟ","ҟ","Ҡ","ҡ","Ӄ","ӄ","Ԛ","ԛ","Л","л","Љ","љ","Ԉ","ԉ","Ԓ","ԓ","Ӆ","ӆ","М","м","Ӎ","ӎ","Н","н","Њ","њ","Ң","ң","Ҥ","ҥ","Ӈ","ӈ","Ԋ","ԋ","Ӊ","ӊ","О","о","Ҩ","ҩ","Ӧ","ӧ","Ө","ө","Ӫ","ӫ","П","п","Ԥ","ԥ","Ҧ","ҧ","Р","р","Ҏ","ҏ","С","с","Ҫ","ҫ","Т","т","Ћ","ћ","Ԍ","ԍ","Ҭ","ҭ","Ԏ","ԏ","У","у","Ў","ў","Ӯ","ӯ","Ӱ","ӱ","Ӳ","ӳ","Ү","ү","Ұ","ұ","Ф","ф","Х","х","Ҳ","ҳ","Ӽ","ӽ","Ӿ","ӿ","Һ","һ","Ц","ц","Ч","ч","Ҵ","ҵ","Ҷ","ҷ","Ҹ","ҹ","Ӌ","ӌ","Ӵ","ӵ","Џ","џ","Ш","ш","Щ","щ","Ъ","ъ","Ы","ы","Ӹ","ӹ","Ь","ь","Ҍ","ҍ","Э","э","Ӭ","ӭ","Ю","ю","Я","я","Ԝ","ԝ","Ѡ","ѡ","Ѣ","ѣ","Ѥ","ѥ","Ѧ","ѧ","Ѩ","ѩ","Ѫ","ѫ","Ѭ","ѭ","Ѯ","ѯ","Ѱ","ѱ","Ѳ","ѳ","Ѵ","ѵ","Ѷ","ѷ","Ѹ","ѹ","Ѻ","ѻ","Ѽ","ѽ","Ѿ","ѿ","Ҁ","ҁ"],"arabic":["ا","ب","ت","ث","ج","ح","خ","د","ذ","ر","ز","س","ش","ص","ض","ط","ظ","ع","غ","ف","ق","ك","ل","م","ن","ه","و","ي","ء","آ","أ","إ","ٱ","ؤ","ئ","ى","ة","َ","ُ","ِ","ً","ٌ","ٍ","ّ","ْ","ٰ","،","؛","؟","ـ","٠","١","٢","٣","٤","٥","٦","٧","٨","٩","٪","٫","٬","٭",["ZWNJ","‌"],["ZWJ","‍"]],"arabicextended":["ٲ","ٳ","ٴ","ٵ","ݳ","ݴ","ٮ","ٻ","پ","ڀ","ݐ","ݑ","ݒ","ݓ","ݔ","ݕ","ݖ","ٹ","ٺ","ټ","ٽ","ٿ","ځ","ڂ","ڃ","ڄ","څ","چ","ڇ","ڿ","ݗ","ݘ","ݮ","ݯ","ݲ","ݼ","ڈ","ډ","ڊ","ڋ","ڌ","ڍ","ڎ","ڏ","ڐ","ۮ","ݙ","ݚ","ڑ","ڒ","ړ","ڔ","ڕ","ږ","ڗ","ژ","ڙ","ۯ","ݛ","ݫ","ݬ","ݱ","ښ","ڛ","ڜ","ݽ","ۺ","ݜ","ݭ","ݰ","ݾ","ڝ","ڞ","ۻ","ڟ","ڠ","ݝ","ݞ","ݟ","ۼ","ڡ","ڢ","ڣ","ڤ","ڥ","ڦ","ݠ","ݡ","ٯ","ڧ","ڨ","ػ","ؼ","ک","ڪ","ګ","ڬ","ڭ","ڮ","گ","ڰ","ڱ","ڲ","ڳ","ڴ","ݢ","ݣ","ݤ","ݿ","ڵ","ڶ","ڷ","ڸ","ݪ","ݥ","ݦ","ڹ","ں","ڻ","ڼ","ڽ","ݧ","ݨ","ݩ","ھ","ۀ","ہ","ۂ","ۃ","ە","ۿ","ٶ","ٷ","ۄ","ۅ","ۆ","ۇ","ۈ","ۉ","ۊ","ۋ","ۏ","ݸ","ݹ","ؠ","ؽ","ؾ","ؿ","ٸ","ی","ۍ","ێ","ې","ۑ","ے","ۓ","ݵ","ݶ","ݷ","ݺ","ݻ","ٖ","ٗ","٘","ٙ","ٚ","ٛ","ٜ","ٝ","ٞ","ٟ","۔","۽","۾","۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"],"hebrew":["א","ב","ג","ד","ה","ו","ז","ח","ט","י","כ","ך","ל","מ","ם","נ","ן","ס","ע","פ","ף","צ","ץ","ק","ר","ש","ת","װ","ױ","ײ","׳","״","־","–",{"label":"„”","action":{"type":"encapsulate","options":{"pre":"„","post":"”"}}},{"label":"‚’","action":{"type":"encapsulate","options":{"pre":"‚","post":"’"}}},["◌ְ","ְ"],["◌ֱ","ֱ"],["◌ֲ","ֲ"],["◌ֳ","ֳ"],["◌ִ","ִ"],["◌ֵ","ֵ"],["◌ֶ","ֶ"],["◌ַ","ַ"],["◌ָ","ָ"],["◌ֹ","ֹ"],["◌ֻ","ֻ"],["◌ּ","ּ"],["◌ׁ","ׁ"],["◌ׂ","ׂ"],["◌ׇ","ׇ"],["◌֑","֑"],["◌֒","֒"],["◌֓","֓"],["◌֔","֔"],["◌֕","֕"],["◌֖","֖"],["◌֗","֗"],["◌֘","֘"],["◌֙","֙"],["◌֚","֚"],["◌֛","֛"],["◌֜","֜"],["◌֝","֝"],["◌֞","֞"],["◌֟","֟"],["◌֠","֠"],["◌֡","֡"],["◌֢","֢"],["◌֣","֣"],["◌֤","֤"],["◌֥","֥"],["◌֦","֦"],["◌֧","֧"],["◌֨","֨"],["◌֩","֩"],["◌֪","֪"],["◌֫","֫"],["◌֬","֬"],["◌֭","֭"],["◌֮","֮"],["◌֯","֯"],["◌ֿ","ֿ"],["◌׀","׀"],["◌׃","׃"]],"bangla":["অ","আ","ই","ঈ","উ","ঊ","ঋ","এ","ঐ","ও","ঔ","া","ি","ী","ু","ূ","ৃ","ে","ৈ","ো","ৌ","ক","খ","গ","ঘ","ঙ","চ","ছ","জ","ঝ","ঞ","ট","ঠ","ড","ঢ","ণ","ত","থ","দ","ধ","ন","প","ফ","ব","ভ","ম","য","র","ল","শ","ষ","স","হ","ড়","ঢ়","য়","ৎ","ং","ঃ","ঁ","্","১","২","৩","৪","৫","৬","৭","৮","৯","০"],"tamil":["௦","௧","௨","௩","௪","௫","௬","௭","௮","௯","௰","௱","௲","௳","௴","௵","௶","௷","௸","௹","௺","ௐ"],"telugu":["ఁ","ం","ః","అ","ఆ","ఇ","ఈ","ఉ","ఊ","ఋ","ౠ","ఌ","ౡ","ఎ","ఏ","ఐ","ఒ","ఓ","ఔ","క","ఖ","గ","ఘ","ఙ","చ","ఛ","జ","ఝ","ఞ","ట","ఠ","డ","ఢ","ణ","త","థ","ద","ధ","న","ప","ఫ","బ","భ","మ","య","ర","ఱ","ల","ళ","వ","శ","ష","స","హ","ా","ి","ీ","ు","ూ","ృ","ౄ","ె","ే","ై","ొ","ో","ౌ","్","ౢ","ౣ","ౘ","ౙ","౦","౧","౨","౩","౪","౫","౬","౭","౮","౯","ఽ","౸","౹","౺","౻","౼","౽","౾","౿"],"sinhala":["අ","ආ","ඇ","ඈ","ඉ","ඊ","උ","ඌ","ඍ","ඎ","ඏ","ඐ","එ","ඒ","ඓ","ඔ","ඕ","ඖ","ක","ඛ","ග","ඝ","ඞ","ඟ","ච","ඡ","ජ","ඣ","ඤ","ඥ","ඦ","ට","ඨ","ඩ","ඪ","ණ","ඬ","ත","ථ","ද","ධ","න","ඳ","ප","ඵ","බ","භ","ම","ඹ","ය","ර","ල","ව","ශ","ෂ","ස","හ","ළ","ෆ",["◌ා","ා"],["◌ැ","ැ"],["◌ෑ","ෑ"],["◌ි","ි"],["◌ී","ී"],["◌ු","ු"],["◌ූ","ූ"],["◌ෘ","ෘ"],["◌ෲ","ෲ"],["◌ෟ","ෟ"],["◌ෳ","ෳ"],["◌ෙ","ෙ"],["◌ේ","ේ"],["◌ො","ො"],["◌ෝ","ෝ"],["◌ෞ","ෞ"],["◌්","්"]],"devanagari":["ऀ","ँ","ं","ः","ऄ","अ","आ","इ","ई","उ","ऊ","ऋ","ऌ","ऍ","ऎ","ए","ऐ","ऑ","ऒ","ओ","औ","क","ख","ग","घ","ङ","च","छ","ज","झ","ञ","ट","ठ","ड","ढ","ण","त","थ","द","ध","न","ऩ","प","फ","ब","भ","म","य","र","ऱ","ल","ळ","ऴ","व","श","ष","स","ह","ऺ","ऻ","़","ऽ","ा","ि","ी","ु","ू","ृ","ॄ","ॅ","ॆ","े","ै","ॉ","ॊ","ो","ौ","्","ॎ","ॏ","ॐ","॑","॒","॓","॔","ॕ","ॖ","ॗ","क़","ख़","ग़","ज़","ड़","ढ़","फ़","य़","ॠ","ॡ","ॢ","ॣ","।","॥","०","१","२","३","४","५","६","७","८","९","॰","ॱ","ॲ","ॳ","ॴ","ॵ","ॶ","ॷ","ॹ","ॺ","ॻ","ॼ","ॽ","ॾ","ॿ"],"gujarati":["ૐ","ઁ","ં","ઃ","અ","આ","ઇ","ઈ","ઉ","ઊ","એ","ઐ","ઓ","ઔ","અં","ઋ","ઍ","ઑ","ઌ","ૠ","ૡ","ક","ખ","ગ","ઘ","ઙ","ચ","છ","જ","ઝ","ઞ","ટ","ઠ","ડ","ઢ","ણ","ત","થ","દ","ધ","ન","પ","ફ","બ","ભ","મ","ય","ર","લ","ળ","વ","શ","ષ","સ","હ","ક્ષ","જ્ઞ","ઽ","ા","િ","ી","ી","ુ","ૂ","ૃ","ૄ","ૅ","ે","ૈ","ૉ","ો","ૌ","ૢ","ૣ","્","૦","૧","૨","૩","૪","૫","૬","૭","૮","૯","૱"],"thai":["ก","ข","ฃ","ค","ฅ","ฆ","ง","จ","ฉ","ช","ซ","ฌ","ญ","ฎ","ฏ","ฐ","ฑ","ฒ","ณ","ด","ต","ถ","ท","ธ","น","บ","ป","ผ","ฝ","พ","ฟ","ภ","ม","ย","ร","ฤ","ล","ฦ","ว","ศ","ษ","ส","ห","ฬ","อ","ฮ","ะ","ั","า","ๅ","ำ","ิ","ี","ึ","ื","ุ","ู","เ","แ","โ","ใ","ไ","็","่","้","๊","๋","์","ํ","ฺ","๎","๐","๑","๒","๓","๔","๕","๖","๗","๘","๙","฿","ๆ","ฯ","๚","๏","๛"],"lao":["ກ","ຂ","ຄ","ງ","ຈ","ສ","ຊ","ຍ","ດ","ຕ","ຖ","ທ","ນ","ບ","ປ","ຜ","ຝ","ພ","ຟ","ມ","ຢ","ລ","ວ","ຫ","ອ","ຮ","ຣ","ໜ","ໝ","ຼ","ຽ","ະ","ັ","າ","ຳ","ິ","ີ","ຶ","ື","ຸ","ູ","ົ","ເ","ແ","ໂ","ໃ","ໄ","່","້","໊","໋","໌","ໍ","໐","໑","໒","໓","໔","໕","໖","໗","໘","໙","₭","ໆ","ຯ"],"khmer":["ក","ខ","គ","ឃ","ង","ច","ឆ","ជ","ឈ","ញ","ដ","ឋ","ឌ","ឍ","ណ","ត","ថ","ទ","ធ","ន","ប","ផ","ព","ភ","ម","យ","រ","ល","វ","ស","ហ","ឡ","អ","ឣ","ឤ","ឥ","ឦ","ឧ","ឨ","ឩ","ឪ","ឫ","ឬ","ឭ","ឮ","ឯ","ឰ","ឱ","ឲ","ឳ","្","឴","឵","ា","ិ","ី","ឹ","ឺ","ុ","ូ","ួ","ើ","ឿ","ៀ","េ","ែ","ៃ","ោ","ៅ","ំ","ះ","ៈ","៉","៊","់","៌","៍","៎","៏","័","៑","៓","៝","ៜ","០","១","២","៣","៤","៥","៦","៧","៨","៩","៛","។","៕","៖","ៗ","៘","៙","៚","៰","៱","៲","៳","៴","៵","៶","៷","៸","៹","᧠","᧡","᧢","᧣","᧤","᧥","᧦","᧧","᧨","᧩","᧪","᧫","᧬","᧭","᧮","᧯","᧰","᧱","᧲","᧳","᧴","᧵","᧶","᧷","᧸","᧹","᧺","᧻","᧼","᧽","᧾","᧿"]} \ No newline at end of file
diff --git a/resources/src/mediawiki.legacy/ajax.js b/resources/src/mediawiki.legacy/ajax.js
index 6b9464a9..3660c205 100644
--- a/resources/src/mediawiki.legacy/ajax.js
+++ b/resources/src/mediawiki.legacy/ajax.js
@@ -5,190 +5,190 @@
* http://www.modernmethod.com/sajax/
*/
-/*jshint camelcase:false */
+/*jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
/*global alert */
( function ( mw ) {
-/**
- * if sajax_debug_mode is true, this function outputs given the message into
- * the element with id = sajax_debug; if no such element exists in the document,
- * it is injected.
- */
-function debug( text ) {
- if ( !window.sajax_debug_mode ) {
- return false;
- }
+ /**
+ * if sajax_debug_mode is true, this function outputs given the message into
+ * the element with id = sajax_debug; if no such element exists in the document,
+ * it is injected.
+ */
+ function debug( text ) {
+ if ( !window.sajax_debug_mode ) {
+ return false;
+ }
- var b, m,
- e = document.getElementById( 'sajax_debug' );
+ var b, m,
+ e = document.getElementById( 'sajax_debug' );
- if ( !e ) {
- e = document.createElement( 'p' );
- e.className = 'sajax_debug';
- e.id = 'sajax_debug';
+ if ( !e ) {
+ e = document.createElement( 'p' );
+ e.className = 'sajax_debug';
+ e.id = 'sajax_debug';
- b = document.getElementsByTagName( 'body' )[0];
+ b = document.getElementsByTagName( 'body' )[0];
- if ( b.firstChild ) {
- b.insertBefore( e, b.firstChild );
- } else {
- b.appendChild( e );
+ if ( b.firstChild ) {
+ b.insertBefore( e, b.firstChild );
+ } else {
+ b.appendChild( e );
+ }
}
- }
- m = document.createElement( 'div' );
- m.appendChild( document.createTextNode( text ) );
+ m = document.createElement( 'div' );
+ m.appendChild( document.createTextNode( text ) );
- e.appendChild( m );
+ e.appendChild( m );
- return true;
-}
+ return true;
+ }
-/**
- * Compatibility wrapper for creating a new XMLHttpRequest object.
- */
-function createXhr() {
- debug( 'sajax_init_object() called..' );
- var a;
- try {
- // Try the new style before ActiveX so we don't
- // unnecessarily trigger warnings in IE 7 when
- // set to prompt about ActiveX usage
- a = new XMLHttpRequest();
- } catch ( xhrE ) {
+ /**
+ * Compatibility wrapper for creating a new XMLHttpRequest object.
+ */
+ function createXhr() {
+ debug( 'sajax_init_object() called..' );
+ var a;
try {
- a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
- } catch ( msXmlE ) {
+ // Try the new style before ActiveX so we don't
+ // unnecessarily trigger warnings in IE 7 when
+ // set to prompt about ActiveX usage
+ a = new XMLHttpRequest();
+ } catch ( xhrE ) {
try {
- a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
- } catch ( msXhrE ) {
- a = null;
+ a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
+ } catch ( msXmlE ) {
+ try {
+ a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
+ } catch ( msXhrE ) {
+ a = null;
+ }
}
}
- }
- if ( !a ) {
- debug( 'Could not create connection object.' );
- }
+ if ( !a ) {
+ debug( 'Could not create connection object.' );
+ }
- return a;
-}
+ return a;
+ }
-/**
- * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
- * func_name - the name of the function to call. Must be registered in $wgAjaxExportList
- * args - an array of arguments to that function
- * target - the target that will handle the result of the call. If this is a function,
- * if will be called with the XMLHttpRequest as a parameter; if it's an input
- * element, its value will be set to the resultText; if it's another type of
- * element, its innerHTML will be set to the resultText.
- *
- * Example:
- * sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
- *
- * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
- * (1, 2, 3) as the parameter list, and will show the result in the element
- * with id = showFoo
- */
-function doAjaxRequest( func_name, args, target ) {
- var i, x, uri, post_data;
- uri = mw.util.wikiScript() + '?action=ajax';
- if ( window.sajax_request_type === 'GET' ) {
- if ( uri.indexOf( '?' ) === -1 ) {
- uri = uri + '?rs=' + encodeURIComponent( func_name );
+ /**
+ * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
+ * func_name - the name of the function to call. Must be registered in $wgAjaxExportList
+ * args - an array of arguments to that function
+ * target - the target that will handle the result of the call. If this is a function,
+ * if will be called with the XMLHttpRequest as a parameter; if it's an input
+ * element, its value will be set to the resultText; if it's another type of
+ * element, its innerHTML will be set to the resultText.
+ *
+ * Example:
+ * sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
+ *
+ * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
+ * (1, 2, 3) as the parameter list, and will show the result in the element
+ * with id = showFoo
+ */
+ function doAjaxRequest( func_name, args, target ) {
+ var i, x, uri, post_data;
+ uri = mw.util.wikiScript() + '?action=ajax';
+ if ( window.sajax_request_type === 'GET' ) {
+ if ( uri.indexOf( '?' ) === -1 ) {
+ uri = uri + '?rs=' + encodeURIComponent( func_name );
+ } else {
+ uri = uri + '&rs=' + encodeURIComponent( func_name );
+ }
+ for ( i = 0; i < args.length; i++ ) {
+ uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
+ }
+ // uri = uri + '&rsrnd=' + new Date().getTime();
+ post_data = null;
} else {
- uri = uri + '&rs=' + encodeURIComponent( func_name );
- }
- for ( i = 0; i < args.length; i++ ) {
- uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
+ post_data = 'rs=' + encodeURIComponent( func_name );
+ for ( i = 0; i < args.length; i++ ) {
+ post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
+ }
}
- //uri = uri + '&rsrnd=' + new Date().getTime();
- post_data = null;
- } else {
- post_data = 'rs=' + encodeURIComponent( func_name );
- for ( i = 0; i < args.length; i++ ) {
- post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
+ x = createXhr();
+ if ( !x ) {
+ alert( 'AJAX not supported' );
+ return false;
}
- }
- x = createXhr();
- if ( !x ) {
- alert( 'AJAX not supported' );
- return false;
- }
- try {
- x.open( window.sajax_request_type, uri, true );
- } catch ( e ) {
- if ( location.hostname === 'localhost' ) {
- alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
+ try {
+ x.open( window.sajax_request_type, uri, true );
+ } catch ( e ) {
+ if ( location.hostname === 'localhost' ) {
+ alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
+ }
+ throw e;
}
- throw e;
- }
- if ( window.sajax_request_type === 'POST' ) {
- x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
- x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
- }
- x.setRequestHeader( 'Pragma', 'cache=yes' );
- x.setRequestHeader( 'Cache-Control', 'no-transform' );
- x.onreadystatechange = function () {
- if ( x.readyState !== 4 ) {
- return;
+ if ( window.sajax_request_type === 'POST' ) {
+ x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
+ x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
}
+ x.setRequestHeader( 'Pragma', 'cache=yes' );
+ x.setRequestHeader( 'Cache-Control', 'no-transform' );
+ x.onreadystatechange = function () {
+ if ( x.readyState !== 4 ) {
+ return;
+ }
- debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
+ debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
- //if ( x.status != 200 )
- // alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
- //else
+ // if ( x.status != 200 )
+ // alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
+ // else
- if ( typeof target === 'function' ) {
- target( x );
- } else if ( typeof target === 'object' ) {
- if ( target.tagName === 'INPUT' ) {
- if ( x.status === 200 ) {
- target.value = x.responseText;
- }
- //else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
- } else {
- if ( x.status === 200 ) {
- target.innerHTML = x.responseText;
+ if ( typeof target === 'function' ) {
+ target( x );
+ } else if ( typeof target === 'object' ) {
+ if ( target.tagName === 'INPUT' ) {
+ if ( x.status === 200 ) {
+ target.value = x.responseText;
+ }
+ // else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
} else {
- target.innerHTML = '<div class="error">Error: ' + x.status +
- ' ' + x.statusText + ' (' + x.responseText + ')</div>';
+ if ( x.status === 200 ) {
+ target.innerHTML = x.responseText;
+ } else {
+ target.innerHTML = '<div class="error">Error: ' + x.status +
+ ' ' + x.statusText + ' (' + x.responseText + ')</div>';
+ }
}
+ } else {
+ alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
}
- } else {
- alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
- }
- };
+ };
+
+ debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
+ x.send( post_data );
+ debug( func_name + ' waiting..' );
- debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
- x.send( post_data );
- debug( func_name + ' waiting..' );
+ return true;
+ }
- return true;
-}
+ /**
+ * @return {boolean} Whether the browser supports AJAX
+ */
+ function wfSupportsAjax() {
+ var request = createXhr(),
+ supportsAjax = request ? true : false;
-/**
- * @return {boolean} Whether the browser supports AJAX
- */
-function wfSupportsAjax() {
- var request = createXhr(),
- supportsAjax = request ? true : false;
-
- request = undefined;
- return supportsAjax;
-}
-
-// Expose + Mark as deprecated
-var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
-
-// Variables
-mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
-mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
-// Methods
-mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
-mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
-mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
-mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
+ request = undefined;
+ return supportsAjax;
+ }
+
+ // Expose + Mark as deprecated
+ var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
+
+ // Variables
+ mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
+ mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
+ // Methods
+ mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
+ mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
+ mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
+ mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
}( mediaWiki ) );
diff --git a/resources/src/mediawiki.legacy/commonPrint.css b/resources/src/mediawiki.legacy/commonPrint.css
index 830b02fa..9a8d3918 100644
--- a/resources/src/mediawiki.legacy/commonPrint.css
+++ b/resources/src/mediawiki.legacy/commonPrint.css
@@ -23,7 +23,6 @@ div#column-one,
#toc.tochidden,
div#f-poweredbyico,
div#f-copyrightico,
-li#viewcount,
li#about,
li#disclaimer,
li#mobileview,
@@ -35,6 +34,7 @@ span.mw-filepage-other-resolutions,
#filetoc,
.usermessage,
.patrollink,
+.ns-0 .mw-redirectedfrom,
#mw-navigation,
#siteNotice {
display: none;
@@ -203,6 +203,7 @@ a.stub {
/**
* Floating divs
*/
+/* @noflip */
div.floatright {
float: right;
clear: right;
@@ -214,6 +215,7 @@ div.floatright p {
font-style: italic;
}
+/* @noflip */
div.floatleft {
float: left;
clear: left;
@@ -323,44 +325,6 @@ div.gallerytext {
}
/**
- * Diff rendering
- */
-table.diff {
- background: white;
-}
-
-td.diff-otitle {
- background: #ffffff;
-}
-
-td.diff-ntitle {
- background: #ffffff;
-}
-
-td.diff-addedline {
- background: #ccffcc;
- font-size: smaller;
- border: solid 2px black;
-}
-
-td.diff-deletedline {
- background: #ffffaa;
- font-size: smaller;
- border: dotted 2px black;
-}
-
-td.diff-context {
- background: #eeeeee;
- font-size: smaller;
-}
-
-.diffchange {
- color: silver;
- font-weight: bold;
- text-decoration: underline;
-}
-
-/**
* Table rendering
* As on shared.css but with white background.
*/
diff --git a/resources/src/mediawiki.legacy/images/magnify-clip-ltr.png b/resources/src/mediawiki.legacy/images/magnify-clip-ltr.png
new file mode 100644
index 00000000..712b1b48
--- /dev/null
+++ b/resources/src/mediawiki.legacy/images/magnify-clip-ltr.png
Binary files differ
diff --git a/resources/src/mediawiki.legacy/images/magnify-clip-ltr.svg b/resources/src/mediawiki.legacy/images/magnify-clip-ltr.svg
new file mode 100644
index 00000000..4d3dcb65
--- /dev/null
+++ b/resources/src/mediawiki.legacy/images/magnify-clip-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 15" width="15" height="11">
+ <g id="magnify-clip" fill="#fff" stroke="#000">
+ <path id="bigbox" d="M1.509 1.865h10.99v7.919h-10.99z"/>
+ <path id="smallbox" d="M-1.499 6.868h5.943v4.904h-5.943z"/>
+ </g>
+</svg>
diff --git a/resources/src/mediawiki.legacy/images/magnify-clip-rtl.png b/resources/src/mediawiki.legacy/images/magnify-clip-rtl.png
new file mode 100644
index 00000000..1d03a8c0
--- /dev/null
+++ b/resources/src/mediawiki.legacy/images/magnify-clip-rtl.png
Binary files differ
diff --git a/resources/src/mediawiki.legacy/images/magnify-clip-rtl.svg b/resources/src/mediawiki.legacy/images/magnify-clip-rtl.svg
new file mode 100644
index 00000000..582e4ae7
--- /dev/null
+++ b/resources/src/mediawiki.legacy/images/magnify-clip-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 15" width="15" height="11">
+ <g id="magnify-clip" fill="#fff" stroke="#000">
+ <path id="bigbox" d="M9.491 1.865h-10.99v7.919h10.99z"/>
+ <path id="smallbox" d="M12.499 6.868h-5.943v4.904h5.943z"/>
+ </g>
+</svg>
diff --git a/resources/src/mediawiki.legacy/oldshared.css b/resources/src/mediawiki.legacy/oldshared.css
index d92d3bb9..c2bd5a73 100644
--- a/resources/src/mediawiki.legacy/oldshared.css
+++ b/resources/src/mediawiki.legacy/oldshared.css
@@ -119,8 +119,12 @@ div.magnify a {
/* …and replace it with the image */
width: 15px;
height: 11px;
- /* @embed */
+ /* Use same SVG support hack as mediawiki.legacy's shared.css */
background: url(images/magnify-clip-ltr.png) center center no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
/* Don't annoy people who copy-paste everything too much */
-moz-user-select: none;
-webkit-user-select: none;
diff --git a/resources/src/mediawiki.legacy/protect.js b/resources/src/mediawiki.legacy/protect.js
index f9069b6f..3f4b263e 100644
--- a/resources/src/mediawiki.legacy/protect.js
+++ b/resources/src/mediawiki.legacy/protect.js
@@ -6,7 +6,8 @@ var ProtectionForm = window.ProtectionForm = {
* on the protection form
*/
init: function () {
- var $cell = $( '<td>' ), $row = $( '<tr>' ).append( $cell );
+ var $cell = $( '<td>' ),
+ $row = $( '<tr>' ).append( $cell );
if ( !$( '#mwProtectSet' ).length ) {
return false;
@@ -63,7 +64,7 @@ var ProtectionForm = window.ProtectionForm = {
},
/**
- * Checks if a cerain protection level is cascadeable.
+ * Checks if a certain protection level is cascadeable.
*
* @param {string} level
* @return {boolean}
diff --git a/resources/src/mediawiki.legacy/shared.css b/resources/src/mediawiki.legacy/shared.css
index 0604773e..3657b127 100644
--- a/resources/src/mediawiki.legacy/shared.css
+++ b/resources/src/mediawiki.legacy/shared.css
@@ -91,6 +91,18 @@ abbr[title],
color: #aaa; /* gray */
}
+/*
+ * Bidi-isolate these numbers.
+ * See https://phabricator.wikimedia.org/T93484
+ */
+.mw-plusminus-pos,
+.mw-plusminus-neg,
+.mw-plusminus-null {
+ unicode-bidi: -moz-isolate;
+ unicode-bidi: -webkit-isolate;
+ unicode-bidi: isolate;
+}
+
/**
* Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
* [[Special:Watchlist/edit]] and in category listings.
@@ -414,7 +426,7 @@ p.mw-upload-editlicenses {
border: 1px dashed #aaa;
}
-.mw-history-revisiondelete-button, #mw-fileduplicatesearch-icon {
+.mw-history-revisionactions, #mw-fileduplicatesearch-icon {
float: right;
}
@@ -506,7 +518,7 @@ a.feedlink {
table.wikitable {
margin: 1em 0;
background-color: #f9f9f9;
- border: 1px #aaa solid;
+ border: 1px solid #aaa;
border-collapse: collapse;
color: black;
}
@@ -515,8 +527,8 @@ table.wikitable > tr > th,
table.wikitable > tr > td,
table.wikitable > * > tr > th,
table.wikitable > * > tr > td {
- border: 1px #aaa solid;
- padding: 0.2em;
+ border: 1px solid #aaa;
+ padding: 0.2em 0.4em;
}
table.wikitable > tr > th,
@@ -584,7 +596,7 @@ table.wikitable > caption {
}
.successbox {
- color: #009000;
+ color: #008000;
border-color: #b7fdb5;
background-color: #e1fddf;
}
@@ -934,11 +946,14 @@ h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
/* Localised ordered list numbering for some languages */
ol:lang(bcc) li,
+ol:lang(bgn) li,
ol:lang(bqi) li,
ol:lang(fa) li,
ol:lang(glk) li,
ol:lang(kk-arab) li,
-ol:lang(mzn) li {
+ol:lang(lrc) li,
+ol:lang(mzn) li,
+ol:lang(sdh) li {
list-style-type: -moz-persian;
list-style-type: persian;
}
@@ -1124,6 +1139,7 @@ table.floatleft {
.mw-editsection,
.toctoggle,
+.tochidden,
#jump-to-nav {
-moz-user-select: none;
-webkit-user-select: none;
diff --git a/resources/src/mediawiki.legacy/wikibits.js b/resources/src/mediawiki.legacy/wikibits.js
index a4039966..32cd79a5 100644
--- a/resources/src/mediawiki.legacy/wikibits.js
+++ b/resources/src/mediawiki.legacy/wikibits.js
@@ -5,200 +5,214 @@
var msg,
win = window,
ua = navigator.userAgent.toLowerCase(),
- onloadFuncts = [];
-
-/**
- * User-agent sniffing.
- *
- * @deprecated since 1.17 Use jquery.client instead
- */
-
-msg = 'Use feature detection or module jquery.client instead.';
-
-mw.log.deprecate( win, 'clientPC', ua, msg );
-
-// Ignored dummy values
-mw.log.deprecate( win, 'is_gecko', false, msg );
-mw.log.deprecate( win, 'is_chrome_mac', false, msg );
-mw.log.deprecate( win, 'is_chrome', false, msg );
-mw.log.deprecate( win, 'webkit_version', false, msg );
-mw.log.deprecate( win, 'is_safari_win', false, msg );
-mw.log.deprecate( win, 'is_safari', false, msg );
-mw.log.deprecate( win, 'webkit_match', false, msg );
-mw.log.deprecate( win, 'is_ff2', false, msg );
-mw.log.deprecate( win, 'ff2_bugs', false, msg );
-mw.log.deprecate( win, 'is_ff2_win', false, msg );
-mw.log.deprecate( win, 'is_ff2_x11', false, msg );
-mw.log.deprecate( win, 'opera95_bugs', false, msg );
-mw.log.deprecate( win, 'opera7_bugs', false, msg );
-mw.log.deprecate( win, 'opera6_bugs', false, msg );
-mw.log.deprecate( win, 'is_opera_95', false, msg );
-mw.log.deprecate( win, 'is_opera_preseven', false, msg );
-mw.log.deprecate( win, 'is_opera', false, msg );
-mw.log.deprecate( win, 'ie6_bugs', false, msg );
-
-/**
- * DOM utilities for handling of events, text nodes and selecting elements
- *
- * @deprecated since 1.17 Use jQuery instead
- */
-msg = 'Use jQuery instead.';
-
-// Ignored dummy values
-mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
-mw.log.deprecate( win, 'onloadFuncts', [], msg );
-mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
-mw.log.deprecate( win, 'changeText', $.noop, msg );
-mw.log.deprecate( win, 'killEvt', $.noop, msg );
-mw.log.deprecate( win, 'addHandler', $.noop, msg );
-mw.log.deprecate( win, 'hookEvent', $.noop, msg );
-mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
-mw.log.deprecate( win, 'removeHandler', $.noop, msg );
-mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
-mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
-
-// Run a function after the window onload event is fired
-mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
- if ( onloadFuncts ) {
- onloadFuncts.push(hookFunct);
- } else {
- // If func queue is gone the event has happened already,
- // run immediately instead of queueing.
- hookFunct();
+ onloadFuncts = [],
+ loadedScripts = {};
+
+ /**
+ * User-agent sniffing.
+ *
+ * @deprecated since 1.17 Use jquery.client instead
+ */
+
+ msg = 'Use feature detection or module jquery.client instead.';
+
+ mw.log.deprecate( win, 'clientPC', ua, msg );
+
+ // Ignored dummy values
+ mw.log.deprecate( win, 'is_gecko', false, msg );
+ mw.log.deprecate( win, 'is_chrome_mac', false, msg );
+ mw.log.deprecate( win, 'is_chrome', false, msg );
+ mw.log.deprecate( win, 'webkit_version', false, msg );
+ mw.log.deprecate( win, 'is_safari_win', false, msg );
+ mw.log.deprecate( win, 'is_safari', false, msg );
+ mw.log.deprecate( win, 'webkit_match', false, msg );
+ mw.log.deprecate( win, 'is_ff2', false, msg );
+ mw.log.deprecate( win, 'ff2_bugs', false, msg );
+ mw.log.deprecate( win, 'is_ff2_win', false, msg );
+ mw.log.deprecate( win, 'is_ff2_x11', false, msg );
+ mw.log.deprecate( win, 'opera95_bugs', false, msg );
+ mw.log.deprecate( win, 'opera7_bugs', false, msg );
+ mw.log.deprecate( win, 'opera6_bugs', false, msg );
+ mw.log.deprecate( win, 'is_opera_95', false, msg );
+ mw.log.deprecate( win, 'is_opera_preseven', false, msg );
+ mw.log.deprecate( win, 'is_opera', false, msg );
+ mw.log.deprecate( win, 'ie6_bugs', false, msg );
+
+ /**
+ * DOM utilities for handling of events, text nodes and selecting elements
+ *
+ * @deprecated since 1.17 Use jQuery instead
+ */
+ msg = 'Use jQuery instead.';
+
+ // Ignored dummy values
+ mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
+ mw.log.deprecate( win, 'onloadFuncts', [], msg );
+ mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
+ mw.log.deprecate( win, 'changeText', $.noop, msg );
+ mw.log.deprecate( win, 'killEvt', $.noop, msg );
+ mw.log.deprecate( win, 'addHandler', $.noop, msg );
+ mw.log.deprecate( win, 'hookEvent', $.noop, msg );
+ mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
+ mw.log.deprecate( win, 'removeHandler', $.noop, msg );
+ mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
+ mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
+
+ // Run a function after the window onload event is fired
+ mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
+ if ( onloadFuncts ) {
+ onloadFuncts.push( hookFunct );
+ } else {
+ // If func queue is gone the event has happened already,
+ // run immediately instead of queueing.
+ hookFunct();
+ }
+ }, msg );
+
+ $( win ).on( 'load', function () {
+ var i, functs;
+
+ // Don't run twice
+ if ( !onloadFuncts ) {
+ return;
+ }
+
+ // Deference and clear onloadFuncts before running any
+ // hooks to make sure we don't miss any addOnloadHook
+ // calls.
+ functs = onloadFuncts.slice();
+ onloadFuncts = undefined;
+
+ // Execute the queued functions
+ for ( i = 0; i < functs.length; i++ ) {
+ functs[i]();
+ }
+ } );
+
+ /**
+ * Toggle checkboxes with shift selection
+ *
+ * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
+ */
+ msg = 'Use jquery.checkboxShiftClick instead.';
+ mw.log.deprecate( win, 'checkboxes', [], msg );
+ mw.log.deprecate( win, 'lastCheckbox', null, msg );
+ mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
+ mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
+ mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
+
+ /**
+ * Add a button to the default editor toolbar
+ *
+ * @deprecated since 1.17 Use mw.toolbar instead
+ */
+ mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
+ mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
+
+ /**
+ * Spinner creation, injection and removal
+ *
+ * @deprecated since 1.18 Use jquery.spinner instead
+ */
+ mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
+ mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
+
+ /**
+ * Escape utilities
+ *
+ * @deprecated since 1.18 Use mw.html instead
+ */
+ mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
+ mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
+
+ /**
+ * Display a message to the user
+ *
+ * @deprecated since 1.17 Use mediawiki.notify instead
+ * @param {string|HTMLElement} message To be put inside the message box
+ */
+ mw.log.deprecate( win, 'jsMsg', function ( message ) {
+ if ( !arguments.length || message === '' || message === null ) {
+ return true;
+ }
+ if ( typeof message !== 'object' ) {
+ message = $.parseHTML( message );
+ }
+ mw.notify( message, { autoHide: true, tag: 'legacy' } );
+ return true;
+ }, 'Use mediawiki.notify instead.' );
+
+ /**
+ * Misc. utilities
+ *
+ * @deprecated since 1.17 Use mediawiki.util or jquery.accessKeyLabel instead
+ */
+ msg = 'Use mediawiki.util instead.';
+ mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
+ mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
+ msg = 'Use jquery.accessKeyLabel instead.';
+ mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
+ mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
+ // mw.util.updateTooltipAccessKeys already generates a deprecation message.
+ win.updateTooltipAccessKeys = function () {
+ return mw.util.updateTooltipAccessKeys.apply( null, arguments );
+ };
+
+ /**
+ * Wikipage import methods
+ *
+ * See https://www.mediawiki.org/wiki/ResourceLoader/Legacy_JavaScript#wikibits.js
+ */
+
+ function importScript( page ) {
+ var uri = mw.config.get( 'wgScript' ) + '?title=' +
+ mw.util.wikiUrlencode( page ) +
+ '&action=raw&ctype=text/javascript';
+ return importScriptURI( uri );
}
-}, msg );
-
-$( win ).on( 'load', function () {
- var i, functs;
- // Don't run twice
- if ( !onloadFuncts ) {
- return;
+ /**
+ * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
+ */
+ function importScriptURI( url ) {
+ if ( loadedScripts[url] ) {
+ return null;
+ }
+ loadedScripts[url] = true;
+ var s = document.createElement( 'script' );
+ s.setAttribute( 'src', url );
+ s.setAttribute( 'type', 'text/javascript' );
+ document.getElementsByTagName( 'head' )[0].appendChild( s );
+ return s;
}
- // Deference and clear onloadFuncts before running any
- // hooks to make sure we don't miss any addOnloadHook
- // calls.
- functs = onloadFuncts.slice();
- onloadFuncts = undefined;
-
- // Execute the queued functions
- for ( i = 0; i < functs.length; i++ ) {
- functs[i]();
+ function importStylesheet( page ) {
+ var uri = mw.config.get( 'wgScript' ) + '?title=' +
+ mw.util.wikiUrlencode( page ) +
+ '&action=raw&ctype=text/css';
+ return importStylesheetURI( uri );
}
-} );
-
-/**
- * Toggle checkboxes with shift selection
- *
- * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
- */
-msg = 'Use jquery.checkboxShiftClick instead.';
-mw.log.deprecate( win, 'checkboxes', [], msg );
-mw.log.deprecate( win, 'lastCheckbox', null, msg );
-mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
-mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
-mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
-
-/**
- * Add a button to the default editor toolbar
- *
- * @deprecated since 1.17 Use mw.toolbar instead
- */
-mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
-mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
-
-/**
- * Spinner creation, injection and removal
- *
- * @deprecated since 1.18 Use jquery.spinner instead
- */
-mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
-mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
-/**
- * Escape utilities
- *
- * @deprecated since 1.18 Use mw.html instead
- */
-mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
-mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
-
-/**
- * Display a message to the user
- *
- * @deprecated since 1.17 Use mediawiki.notify instead
- * @param {string|HTMLElement} message To be put inside the message box
- */
-mw.log.deprecate( win, 'jsMsg', function ( message ) {
- if ( !arguments.length || message === '' || message === null ) {
- return true;
+ /**
+ * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
+ */
+ function importStylesheetURI( url, media ) {
+ var l = document.createElement( 'link' );
+ l.rel = 'stylesheet';
+ l.href = url;
+ if ( media ) {
+ l.media = media;
+ }
+ document.getElementsByTagName( 'head' )[0].appendChild( l );
+ return l;
}
- if ( typeof message !== 'object' ) {
- message = $.parseHTML( message );
- }
- mw.notify( message, { autoHide: true, tag: 'legacy' } );
- return true;
-}, 'Use mediawiki.notify instead.' );
-
-/**
- * Misc. utilities
- *
- * @deprecated since 1.17 Use mediawiki.util or jquery.accessKeyLabel instead
- */
-msg = 'Use mediawiki.util instead.';
-mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
-mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
-msg = 'Use jquery.accessKeyLabel instead.';
-mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
-mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
-// mw.util.updateTooltipAccessKeys already generates a deprecation message.
-win.updateTooltipAccessKeys = function () {
- return mw.util.updateTooltipAccessKeys.apply( null, arguments );
-};
-
-/**
- * Wikipage import methods
- */
-// included-scripts tracker
-win.loadedScripts = {};
-
-win.importScript = function ( page ) {
- var uri = mw.config.get( 'wgScript' ) + '?title=' +
- mw.util.wikiUrlencode( page ) +
- '&action=raw&ctype=text/javascript';
- return win.importScriptURI( uri );
-};
-
-win.importScriptURI = function ( url ) {
- if ( win.loadedScripts[url] ) {
- return null;
- }
- win.loadedScripts[url] = true;
- var s = document.createElement( 'script' );
- s.setAttribute( 'src', url );
- s.setAttribute( 'type', 'text/javascript' );
- document.getElementsByTagName( 'head' )[0].appendChild( s );
- return s;
-};
-
-win.importStylesheet = function ( page ) {
- var uri = mw.config.get( 'wgScript' ) + '?title=' +
- mw.util.wikiUrlencode( page ) +
- '&action=raw&ctype=text/css';
- return win.importStylesheetURI( uri );
-};
-
-win.importStylesheetURI = function ( url, media ) {
- var l = document.createElement( 'link' );
- l.rel = 'stylesheet';
- l.href = url;
- if ( media ) {
- l.media = media;
- }
- document.getElementsByTagName('head')[0].appendChild( l );
- return l;
-};
+ msg = 'Use mw.loader instead.';
+ mw.log.deprecate( win, 'loadedScripts', loadedScripts, msg );
+ mw.log.deprecate( win, 'importScriptURI', importScriptURI, msg );
+ mw.log.deprecate( win, 'importStylesheetURI', importStylesheetURI, msg );
+ // Not quite deprecated yet.
+ win.importScript = importScript;
+ win.importStylesheet = importStylesheet;
}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.less/mediawiki.mixins.less b/resources/src/mediawiki.less/mediawiki.mixins.less
index c360e1f4..3366f1e1 100644
--- a/resources/src/mediawiki.less/mediawiki.mixins.less
+++ b/resources/src/mediawiki.less/mediawiki.mixins.less
@@ -1,19 +1,26 @@
-/**
- * Common LESS mixin library for MediaWiki
- *
- * By default the folder containing this file is included in $wgResourceLoaderLESSImportPaths,
- * which makes this file importable by all less files via '@import "mediawiki.mixins";'.
- *
- * The mixins included below are considered a public interface for MediaWiki extensions.
- * The signatures of parametrized mixins should be kept as stable as possible.
- *
- * See <http://lesscss.org/#-mixins> for more information about how to write mixins.
- */
+// Common LESS mixin library for MediaWiki
+//
+// By default the folder containing this file is included in $wgResourceLoaderLESSImportPaths,
+// which makes this file importable by all less files via '@import "mediawiki.mixins";'.
+//
+// The mixins included below are considered a public interface for MediaWiki extensions.
+// The signatures of parametrized mixins should be kept as stable as possible.
+//
+// See <http://lesscss.org/#-mixins> for more information about how to write mixins.
.background-image(@url) {
background-image: e('/* @embed */') url(@url);
}
+.background-size(@width, @height) {
+ // Vendor prefix for certain older opera browsers e.g. nintendo ds
+ -o-background-size: @width @height;
+ // Vendor prefix is added to support Android 2
+ -webkit-background-size: @width @height;
+ background-size: @width @height;
+}
+
+
.vertical-gradient(@startColor: gray, @endColor: white, @startPos: 0, @endPos: 100%) {
background-color: @endColor;
background-image: -moz-linear-gradient( top, @startColor @startPos, @endColor @endPos ); // Firefox 3.6+
@@ -22,26 +29,32 @@
background-image: linear-gradient( @startColor @startPos, @endColor @endPos ); // Standard
}
-/*
- * SVG support using a transparent gradient to guarantee cross-browser
- * compatibility (browsers able to understand gradient syntax support also SVG).
- * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique
- *
- * We use gzip compression, which means that it is okay to embed twice.
- *
- * We do not embed the fallback image on the assumption that the gain for old browsers
- * is not worth the harm done to modern ones.
- */
+// SVG support using a transparent gradient to guarantee cross-browser
+// compatibility (browsers able to understand gradient syntax support also SVG).
+// http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique
+//
+// We use gzip compression, which means that it is okay to embed twice.
+//
+// We do not embed the fallback image on the assumption that the gain for old browsers
+// is not worth the harm done to modern ones.
.background-image-svg(@svg, @fallback) {
background-image: url(@fallback);
background-image: -webkit-linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
background-image: linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
+ // Do not serve SVG to Opera 12, bad rendering with border-radius or background-size (T87504)
+ background-image: -o-linear-gradient(transparent, transparent), url(@fallback);
}
.list-style-image(@url) {
list-style-image: e('/* @embed */') url(@url);
}
+.list-style-image-svg(@svg, @fallback) {
+ list-style-image: e('/* @embed */') url(@svg);
+ /* Fallback to PNG bullet for IE 8 and below using CSS hack */
+ list-style-image: e('/* @embed */') url(@fallback)\9;
+}
+
.transition(@value) {
-webkit-transition: @value; // Safari 3.1-6.0, iOS 3.2-6.1, Android 2.1-4.3
-moz-transition: @value; // Firefox 4-15
@@ -59,3 +72,21 @@
-webkit-box-shadow: @value; // Safari 3.1-5.0, iOS 3.2-4.3, Android 2.1-3.0
box-shadow: @value; // Chrome 10+, Firefox 4+, IE 9+, Safari 5.1+, Opera 11+, iOS 5+, Android 4+
}
+
+.column-count(@value) {
+ -webkit-column-count: @value;
+ -moz-column-count: @value;
+ column-count: @value;
+}
+
+.column-width(@value) {
+ -webkit-column-width: @value;// Chrome Any, Safari 3+, Opera 11.1+
+ -moz-column-width: @value;// Firefox 1.5+
+ column-width: @value;// IE 10+
+}
+
+.column-break-inside-avoid {
+ -webkit-column-break-inside: avoid; // Chrome Any, Safari 3+, Opera 11.1+
+ page-break-inside: avoid; // Firefox 1.5+
+ break-inside: avoid-column; // IE 10+
+}
diff --git a/resources/src/mediawiki.less/mediawiki.ui/mixins.less b/resources/src/mediawiki.less/mediawiki.ui/mixins.less
index ec9888f2..2d684572 100644
--- a/resources/src/mediawiki.less/mediawiki.ui/mixins.less
+++ b/resources/src/mediawiki.less/mediawiki.ui/mixins.less
@@ -36,11 +36,16 @@
.button-colors(@bgColor) {
background: @bgColor;
- &:hover,
- &:focus {
+ &:hover {
// The inner bottom bevel should match the active background color.
box-shadow: 0 1px rgba(0, 0, 0, 10%), inset 0 -3px rgba(0, 0, 0, 20%);
border-bottom-color: mix(#000, @bgColor, 20%);
+ }
+
+ &:focus {
+ border-color: rgba(0,0,0,0.2);
+ box-shadow: inset 0 0 0 1px rgba(0,0,0,0.2);
+
outline: none;
// remove outline in Firefox
&::-moz-focus-inner {
@@ -62,6 +67,13 @@
color: @colorButtonText;
border: 1px solid @colorGray12;
+ &:hover,
+ &:active,
+ &:visited {
+ // make sure that is isn't inheriting from a general rule
+ color: @colorButtonText;
+ }
+
&:disabled {
color: @colorDisabledText;
@@ -77,16 +89,13 @@
.button-colors(@bgColor) when (lightness(@bgColor) < 70%) {
color: #fff;
// border of the same color as background so that light background and
- // dark background buttons are the same height (only top and bottom to
- // make box shadow on hover cover the corners too)
+ // dark background buttons are the same height and width
border: 1px solid @bgColor;
- border-left: none;
- border-right: none;
text-shadow: 0 1px rgba(0, 0, 0, .1);
&:disabled {
- background: @colorGray12;
- border-color: @colorGray12;
+ background: @colorGray13;
+ border-color: @colorGray13;
// make sure disabled buttons don't have hover and active states
&:hover,
@@ -104,9 +113,7 @@
&:hover,
&:focus {
- // lessphp doesn't implement tint, see above
- // color: tint(@textColor, 20%);
- color: mix(#fff, @textColor, 20%);
+ color: @textColor;
}
&:active,
diff --git a/resources/src/mediawiki.libs/CLDRPluralRuleParser.js b/resources/src/mediawiki.libs/CLDRPluralRuleParser.js
index 83c25245..31c8fef9 100644
--- a/resources/src/mediawiki.libs/CLDRPluralRuleParser.js
+++ b/resources/src/mediawiki.libs/CLDRPluralRuleParser.js
@@ -1,12 +1,13 @@
-/* This is CLDRPluralRuleParser v1.1, ported to MediaWiki ResourceLoader */
+/* This is CLDRPluralRuleParser v1.1.3, ported to MediaWiki ResourceLoader */
/**
* CLDRPluralRuleParser.js
* A parser engine for CLDR plural rules.
*
-* Copyright 2012 GPLV3+, Santhosh Thottingal
+* Copyright 2012-2014 Santhosh Thottingal and other contributors
+* Released under the MIT license
+* http://opensource.org/licenses/MIT
*
-* @version 0.1.0-alpha
* @source https://github.com/santhoshtr/CLDRPluralRuleParser
* @author Santhosh Thottingal <santhosh.thottingal@gmail.com>
* @author Timo Tijhof
@@ -22,6 +23,8 @@
*/
function pluralRuleParser(rule, number) {
+ 'use strict';
+
/*
Syntax: see http://unicode.org/reports/tr35/#Language_Plural_Rules
-----------------------------------------------------------------
@@ -44,14 +47,15 @@ function pluralRuleParser(rule, number) {
decimalValue = value ('.' value)?
*/
- // we don't evaluate the samples section of the rule. Ignore it.
+ // We don't evaluate the samples section of the rule. Ignore it.
rule = rule.split('@')[0].replace(/^\s*/, '').replace(/\s*$/, '');
if (!rule.length) {
- // empty rule or 'other' rule.
+ // Empty rule or 'other' rule.
return true;
}
- // Indicates current position in the rule as we parse through it.
+
+ // Indicates the current position in the rule as we parse through it.
// Shared among all parsing functions below.
var pos = 0,
operand,
@@ -87,15 +91,18 @@ function pluralRuleParser(rule, number) {
debug('pluralRuleParser', rule, number);
// Try parsers until one works, if none work return null
-
function choice(parserSyntax) {
return function() {
- for (var i = 0; i < parserSyntax.length; i++) {
- var result = parserSyntax[i]();
+ var i, result;
+
+ for (i = 0; i < parserSyntax.length; i++) {
+ result = parserSyntax[i]();
+
if (result !== null) {
return result;
}
}
+
return null;
};
}
@@ -103,46 +110,56 @@ function pluralRuleParser(rule, number) {
// Try several parserSyntax-es in a row.
// All must succeed; otherwise, return null.
// This is the only eager one.
-
function sequence(parserSyntax) {
- var originalPos = pos;
- var result = [];
- for (var i = 0; i < parserSyntax.length; i++) {
- var res = parserSyntax[i]();
- if (res === null) {
+ var i, parserRes,
+ originalPos = pos,
+ result = [];
+
+ for (i = 0; i < parserSyntax.length; i++) {
+ parserRes = parserSyntax[i]();
+
+ if (parserRes === null) {
pos = originalPos;
+
return null;
}
- result.push(res);
+
+ result.push(parserRes);
}
+
return result;
}
// Run the same parser over and over until it fails.
// Must succeed a minimum of n times; otherwise, return null.
-
function nOrMore(n, p) {
return function() {
- var originalPos = pos;
- var result = [];
- var parsed = p();
+ var originalPos = pos,
+ result = [],
+ parsed = p();
+
while (parsed !== null) {
result.push(parsed);
parsed = p();
}
+
if (result.length < n) {
pos = originalPos;
+
return null;
}
+
return result;
};
}
- // Helpers -- just make parserSyntax out of simpler JS builtin types
+ // Helpers - just make parserSyntax out of simpler JS builtin types
function makeStringParser(s) {
var len = s.length;
+
return function() {
var result = null;
+
if (rule.substr(pos, len) === s) {
result = s;
pos += len;
@@ -155,95 +172,122 @@ function pluralRuleParser(rule, number) {
function makeRegexParser(regex) {
return function() {
var matches = rule.substr(pos).match(regex);
+
if (matches === null) {
return null;
}
+
pos += matches[0].length;
+
return matches[0];
};
}
- /*
- * integer digits of n.
+ /**
+ * Integer digits of n.
*/
function i() {
var result = _i_();
+
if (result === null) {
debug(' -- failed i', parseInt(number, 10));
+
return result;
}
+
result = parseInt(number, 10);
debug(' -- passed i ', result);
+
return result;
}
- /*
- * absolute value of the source number (integer and decimals).
+ /**
+ * Absolute value of the source number (integer and decimals).
*/
function n() {
var result = _n_();
+
if (result === null) {
debug(' -- failed n ', number);
+
return result;
}
+
result = parseFloat(number, 10);
debug(' -- passed n ', result);
+
return result;
}
- /*
- * visible fractional digits in n, with trailing zeros.
+ /**
+ * Visible fractional digits in n, with trailing zeros.
*/
function f() {
var result = _f_();
+
if (result === null) {
debug(' -- failed f ', number);
+
return result;
}
+
result = (number + '.').split('.')[1] || 0;
debug(' -- passed f ', result);
+
return result;
}
- /*
- * visible fractional digits in n, without trailing zeros.
+ /**
+ * Visible fractional digits in n, without trailing zeros.
*/
function t() {
var result = _t_();
+
if (result === null) {
debug(' -- failed t ', number);
+
return result;
}
+
result = (number + '.').split('.')[1].replace(/0$/, '') || 0;
debug(' -- passed t ', result);
+
return result;
}
- /*
- * number of visible fraction digits in n, with trailing zeros.
+ /**
+ * Number of visible fraction digits in n, with trailing zeros.
*/
function v() {
var result = _v_();
+
if (result === null) {
debug(' -- failed v ', number);
+
return result;
}
+
result = (number + '.').split('.')[1].length || 0;
debug(' -- passed v ', result);
+
return result;
}
- /*
- * number of visible fraction digits in n, without trailing zeros.
+ /**
+ * Number of visible fraction digits in n, without trailing zeros.
*/
function w() {
var result = _w_();
+
if (result === null) {
debug(' -- failed w ', number);
+
return result;
}
+
result = (number + '.').split('.')[1].replace(/0$/, '').length || 0;
debug(' -- passed w ', result);
+
return result;
}
@@ -254,19 +298,27 @@ function pluralRuleParser(rule, number) {
expression = choice([mod, operand]);
function mod() {
- var result = sequence([operand, whitespace, choice([_mod_, _percent_]), whitespace, value]);
+ var result = sequence(
+ [operand, whitespace, choice([_mod_, _percent_]), whitespace, value]
+ );
+
if (result === null) {
debug(' -- failed mod');
+
return null;
}
+
debug(' -- passed ' + parseInt(result[0], 10) + ' ' + result[2] + ' ' + parseInt(result[4], 10));
+
return parseInt(result[0], 10) % parseInt(result[4], 10);
}
function not() {
var result = sequence([whitespace, _not_]);
+
if (result === null) {
debug(' -- failed not');
+
return null;
}
@@ -276,120 +328,170 @@ function pluralRuleParser(rule, number) {
// is_relation = expr 'is' ('not')? value
function is() {
var result = sequence([expression, whitespace, choice([_is_]), whitespace, value]);
+
if (result !== null) {
debug(' -- passed is : ' + result[0] + ' == ' + parseInt(result[4], 10));
+
return result[0] === parseInt(result[4], 10);
}
+
debug(' -- failed is');
+
return null;
}
// is_relation = expr 'is' ('not')? value
function isnot() {
- var result = sequence([expression, whitespace, choice([_isnot_, _isnot_sign_]), whitespace, value]);
+ var result = sequence(
+ [expression, whitespace, choice([_isnot_, _isnot_sign_]), whitespace, value]
+ );
+
if (result !== null) {
debug(' -- passed isnot: ' + result[0] + ' != ' + parseInt(result[4], 10));
+
return result[0] !== parseInt(result[4], 10);
}
+
debug(' -- failed isnot');
+
return null;
}
function not_in() {
- var result = sequence([expression, whitespace, _isnot_sign_, whitespace, rangeList]);
+ var i, range_list,
+ result = sequence([expression, whitespace, _isnot_sign_, whitespace, rangeList]);
+
if (result !== null) {
debug(' -- passed not_in: ' + result[0] + ' != ' + result[4]);
- var range_list = result[4];
- for (var i = 0; i < range_list.length; i++) {
+ range_list = result[4];
+
+ for (i = 0; i < range_list.length; i++) {
if (parseInt(range_list[i], 10) === parseInt(result[0], 10)) {
return false;
}
}
+
return true;
}
+
debug(' -- failed not_in');
+
return null;
}
// range_list = (range | value) (',' range_list)*
function rangeList() {
- var result = sequence([choice([range, value]), nOrMore(0, rangeTail)]);
- var resultList = [];
+ var result = sequence([choice([range, value]), nOrMore(0, rangeTail)]),
+ resultList = [];
+
if (result !== null) {
resultList = resultList.concat(result[0]);
+
if (result[1][0]) {
resultList = resultList.concat(result[1][0]);
}
+
return resultList;
}
+
debug(' -- failed rangeList');
+
return null;
}
function rangeTail() {
// ',' range_list
var result = sequence([_comma_, rangeList]);
+
if (result !== null) {
return result[1];
}
+
debug(' -- failed rangeTail');
+
return null;
}
// range = value'..'value
-
function range() {
- var i;
- var result = sequence([value, _range_, value]);
+ var i, array, left, right,
+ result = sequence([value, _range_, value]);
+
if (result !== null) {
debug(' -- passed range');
- var array = [];
- var left = parseInt(result[0], 10);
- var right = parseInt(result[2], 10);
+
+ array = [];
+ left = parseInt(result[0], 10);
+ right = parseInt(result[2], 10);
+
for (i = left; i <= right; i++) {
array.push(i);
}
+
return array;
}
+
debug(' -- failed range');
+
return null;
}
function _in() {
+ var result, range_list, i;
+
// in_relation = expr ('not')? 'in' range_list
- var result = sequence([expression, nOrMore(0, not), whitespace, choice([_in_, _equal_]), whitespace, rangeList]);
+ result = sequence(
+ [expression, nOrMore(0, not), whitespace, choice([_in_, _equal_]), whitespace, rangeList]
+ );
+
if (result !== null) {
debug(' -- passed _in:' + result);
- var range_list = result[5];
- for (var i = 0; i < range_list.length; i++) {
+
+ range_list = result[5];
+
+ for (i = 0; i < range_list.length; i++) {
if (parseInt(range_list[i], 10) === parseInt(result[0], 10)) {
return (result[1][0] !== 'not');
}
}
+
return (result[1][0] === 'not');
}
+
debug(' -- failed _in ');
+
return null;
}
- /*
- * The difference between in and within is that in only includes integers in the specified range,
- * while within includes all values.
+ /**
+ * The difference between "in" and "within" is that
+ * "in" only includes integers in the specified range,
+ * while "within" includes all values.
*/
-
function within() {
+ var range_list, result;
+
// within_relation = expr ('not')? 'within' range_list
- var result = sequence([expression, nOrMore(0, not), whitespace, _within_, whitespace, rangeList]);
+ result = sequence(
+ [expression, nOrMore(0, not), whitespace, _within_, whitespace, rangeList]
+ );
+
if (result !== null) {
debug(' -- passed within');
- var range_list = result[5];
+
+ range_list = result[5];
+
if ((result[0] >= parseInt(range_list[0], 10)) &&
(result[0] < parseInt(range_list[range_list.length - 1], 10))) {
+
return (result[1][0] !== 'not');
}
+
return (result[1][0] === 'not');
}
+
debug(' -- failed within ');
+
return null;
}
@@ -398,65 +500,83 @@ function pluralRuleParser(rule, number) {
// and_condition = relation ('and' relation)*
function and() {
- var result = sequence([relation, nOrMore(0, andTail)]);
+ var i,
+ result = sequence([relation, nOrMore(0, andTail)]);
+
if (result) {
if (!result[0]) {
return false;
}
- for (var i = 0; i < result[1].length; i++) {
+
+ for (i = 0; i < result[1].length; i++) {
if (!result[1][i]) {
return false;
}
}
+
return true;
}
+
debug(' -- failed and');
+
return null;
}
// ('and' relation)*
function andTail() {
var result = sequence([whitespace, _and_, whitespace, relation]);
+
if (result !== null) {
debug(' -- passed andTail' + result);
+
return result[3];
}
+
debug(' -- failed andTail');
+
return null;
}
// ('or' and_condition)*
function orTail() {
var result = sequence([whitespace, _or_, whitespace, and]);
+
if (result !== null) {
debug(' -- passed orTail: ' + result[3]);
+
return result[3];
}
+
debug(' -- failed orTail');
- return null;
+ return null;
}
// condition = and_condition ('or' and_condition)*
function condition() {
- var result = sequence([and, nOrMore(0, orTail)]);
+ var i,
+ result = sequence([and, nOrMore(0, orTail)]);
+
if (result) {
- for (var i = 0; i < result[1].length; i++) {
+ for (i = 0; i < result[1].length; i++) {
if (result[1][i]) {
return true;
}
}
- return result[0];
+ return result[0];
}
+
return false;
}
result = condition();
- /*
+
+ /**
* For success, the pos must have gotten to the end of the rule
* and returned a non-null.
- * n.b. This is part of language infrastructure, so we do not throw an internationalizable message.
+ * n.b. This is part of language infrastructure,
+ * so we do not throw an internationalizable message.
*/
if (result === null) {
throw new Error('Parse error at position ' + pos.toString() + ' for rule: ' + rule);
diff --git a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js
new file mode 100644
index 00000000..91366ff5
--- /dev/null
+++ b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js
@@ -0,0 +1,38 @@
+/*global OO*/
+( function ( mw ) {
+ /**
+ * This is the abstract base class for MessagePoster implementations.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {mw.Title} title Title to post to
+ */
+ mw.messagePoster.MessagePoster = function MwMessagePoster() {};
+
+ OO.initClass( mw.messagePoster.MessagePoster );
+
+ /**
+ * Post a message (with subject and body) to a talk page.
+ *
+ * @param {string} subject Subject/topic title; plaintext only (no wikitext or HTML)
+ * @param {string} body Body, as wikitext. Signature code will automatically be added
+ * by MessagePosters that require one, unless the message already contains the string
+ * ~~~.
+ * @return {jQuery.Promise} Promise completing when the post succeeds or fails.
+ * For failure, will be rejected with three arguments:
+ *
+ * - primaryError - Primary error code. For a mw.Api failure,
+ * this should be 'api-fail'.
+ * - secondaryError - Secondary error code. For a mw.Api failure,
+ * this, should be mw.Api's code, e.g. 'http', 'ok-but-empty', or the error passed through
+ * from the server.
+ * - details - Further details about the error
+ *
+ * @localdoc
+ * The base class currently does nothing, but could be used for shared analytics or
+ * something.
+ */
+ mw.messagePoster.MessagePoster.prototype.post = function () {};
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js
new file mode 100644
index 00000000..296576b4
--- /dev/null
+++ b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.WikitextMessagePoster.js
@@ -0,0 +1,53 @@
+/*global OO*/
+( function ( mw, $ ) {
+ /**
+ * This is an implementation of MessagePoster for wikitext talk pages.
+ *
+ * @class mw.messagePoster.WikitextMessagePoster
+ * @extends mw.messagePoster.MessagePoster
+ *
+ * @constructor
+ * @param {mw.Title} title Wikitext page in a talk namespace, to post to
+ */
+ function WikitextMessagePoster( title ) {
+ this.api = new mw.Api();
+ this.title = title;
+ }
+
+ OO.inheritClass(
+ WikitextMessagePoster,
+ mw.messagePoster.MessagePoster
+ );
+
+ /**
+ * @inheritdoc
+ */
+ WikitextMessagePoster.prototype.post = function ( subject, body ) {
+ mw.messagePoster.WikitextMessagePoster.parent.prototype.post.call( this, subject, body );
+
+ // Add signature if needed
+ if ( body.indexOf( '~~~' ) === -1 ) {
+ body += '\n\n~~~~';
+ }
+
+ return this.api.newSection(
+ this.title,
+ subject,
+ body,
+ { redirect: true }
+ ).then( function ( resp, jqXHR ) {
+ if ( resp.edit.result === 'Success' ) {
+ return $.Deferred().resolve( resp, jqXHR );
+ } else {
+ // mediawiki.api.js checks for resp.error. Are there actually cases where the
+ // request fails, but it's not caught there?
+ return $.Deferred().reject( 'api-unexpected' );
+ }
+ }, function ( code, details ) {
+ return $.Deferred().reject( 'api-fail', code, details );
+ } ).promise();
+ };
+
+ mw.messagePoster.factory.register( 'wikitext', WikitextMessagePoster );
+ mw.messagePoster.WikitextMessagePoster = WikitextMessagePoster;
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
new file mode 100644
index 00000000..9d280800
--- /dev/null
+++ b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
@@ -0,0 +1,109 @@
+/*global OO*/
+( function ( mw, $ ) {
+ /**
+ * This is a factory for MessagePoster objects, which allows a pluggable to way to script leaving a
+ * talk page message.
+ *
+ * @class mw.messagePoster.factory
+ * @singleton
+ */
+ function MwMessagePosterFactory() {
+ this.api = new mw.Api();
+ this.contentModelToClass = {};
+ }
+
+ OO.initClass( MwMessagePosterFactory );
+
+ // Note: This registration scheme is currently not compatible with LQT, since that doesn't
+ // have its own content model, just islqttalkpage. LQT pages will be passed to the wikitext
+ // MessagePoster.
+ /**
+ * Registers a MessagePoster subclass for a given content model.
+ *
+ * @param {string} contentModel Content model of pages this MessagePoster can post to
+ * @param {Function} messagePosterConstructor Constructor for MessagePoster
+ */
+ MwMessagePosterFactory.prototype.register = function ( contentModel, messagePosterConstructor ) {
+ if ( this.contentModelToClass[contentModel] !== undefined ) {
+ throw new Error( 'The content model \'' + contentModel + '\' is already registered.' );
+ }
+
+ this.contentModelToClass[contentModel] = messagePosterConstructor;
+ };
+
+ /**
+ * Unregisters a given content model
+ * This is exposed for testing and should not normally be needed.
+ *
+ * @param {string} contentModel Content model to unregister
+ */
+ MwMessagePosterFactory.prototype.unregister = function ( contentModel ) {
+ delete this.contentModelToClass[contentModel];
+ };
+
+ /**
+ * Creates a MessagePoster, given a title. A promise for this is returned.
+ * This works by determining the content model, then loading the corresponding
+ * module (which will register the MessagePoster class), and finally constructing it.
+ *
+ * This does not require the message and should be called as soon as possible, so it does the
+ * API and ResourceLoader requests in the background.
+ *
+ * @param {mw.Title} title Title that will be posted to
+ * @return {jQuery.Promise} Promise resolving to a mw.messagePoster.MessagePoster.
+ * For failure, rejected with up to three arguments:
+ *
+ * - errorCode Error code string
+ * - error Error explanation
+ * - details Further error details
+ */
+ MwMessagePosterFactory.prototype.create = function ( title ) {
+ var pageId, page, contentModel, moduleName,
+ factory = this;
+
+ return this.api.get( {
+ action: 'query',
+ prop: 'info',
+ indexpageids: 1,
+ titles: title.getPrefixedDb()
+ } ).then( function ( result ) {
+ if ( result.query.pageids.length > 0 ) {
+ pageId = result.query.pageids[0];
+ page = result.query.pages[pageId];
+
+ contentModel = page.contentmodel;
+ moduleName = 'mediawiki.messagePoster.' + contentModel;
+ return mw.loader.using( moduleName ).then( function () {
+ return factory.createForContentModel(
+ contentModel,
+ title
+ );
+ }, function () {
+ return $.Deferred().reject( 'failed-to-load-module', 'Failed to load the \'' + moduleName + '\' module' );
+ } );
+ } else {
+ return $.Deferred().reject( 'unexpected-response', 'Unexpected API response' );
+ }
+ }, function ( errorCode, details ) {
+ return $.Deferred().reject( 'content-model-query-failed', errorCode, details );
+ } ).promise();
+ };
+
+ /**
+ * Creates a MessagePoster instance, given a title and content model
+ *
+ * @private
+ *
+ * @param {string} contentModel Content model of title
+ * @param {mw.Title} title Title being posted to
+ * @return {mw.messagePoster.MessagePoster}
+ *
+ */
+ MwMessagePosterFactory.prototype.createForContentModel = function ( contentModel, title ) {
+ return new this.contentModelToClass[contentModel]( title );
+ };
+
+ mw.messagePoster = {
+ factory: new MwMessagePosterFactory()
+ };
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.page/mediawiki.page.gallery.js b/resources/src/mediawiki.page/mediawiki.page.gallery.js
index 1892967a..95140704 100644
--- a/resources/src/mediawiki.page/mediawiki.page.gallery.js
+++ b/resources/src/mediawiki.page/mediawiki.page.gallery.js
@@ -2,211 +2,266 @@
* Show gallery captions when focused. Copied directly from jquery.mw-jump.js.
* Also Dynamically resize images to justify them.
*/
-( function ( $ ) {
- $( function () {
- var isTouchScreen,
- gettingFocus,
- galleries = 'ul.mw-gallery-packed-overlay, ul.mw-gallery-packed-hover, ul.mw-gallery-packed';
-
+( function ( mw, $ ) {
+ var $galleries,
+ bound = false,
// Is there a better way to detect a touchscreen? Current check taken from stack overflow.
- isTouchScreen = !!( window.ontouchstart !== undefined || window.DocumentTouch !== undefined && document instanceof window.DocumentTouch );
+ isTouchScreen = !!( window.ontouchstart !== undefined ||
+ window.DocumentTouch !== undefined && document instanceof window.DocumentTouch
+ );
- if ( isTouchScreen ) {
- // Always show the caption for a touch screen.
- $( 'ul.mw-gallery-packed-hover' )
- .addClass( 'mw-gallery-packed-overlay' )
- .removeClass( 'mw-gallery-packed-hover' );
- } else {
- // Note use of just "a", not a.image, since we want this to trigger if a link in
- // the caption receives focus
- $( 'ul.mw-gallery-packed-hover li.gallerybox' ).on( 'focus blur', 'a', function ( e ) {
- // Confusingly jQuery leaves e.type as focusout for delegated blur events
- gettingFocus = e.type !== 'blur' && e.type !== 'focusout';
- $( this ).closest( 'li.gallerybox' ).toggleClass( 'mw-gallery-focused', gettingFocus );
- } );
- }
+ /**
+ * Perform the layout justification.
+ * @ignore
+ * @context {HTMLElement} A `ul.mw-gallery-*` element
+ */
+ function justify() {
+ var lastTop,
+ $img,
+ imgWidth,
+ imgHeight,
+ captionWidth,
+ rows = [],
+ $gallery = $( this );
- // Now on to justification.
- // We may still get ragged edges if someone resizes their window. Could bind to
- // that event, otoh do we really want to constantly be resizing galleries?
- $( galleries ).each( function () {
- var lastTop,
- $img,
- imgWidth,
- imgHeight,
- rows = [],
- $gallery = $( this );
-
- $gallery.children( 'li' ).each( function () {
- // Math.floor to be paranoid if things are off by 0.00000000001
- var top = Math.floor( $( this ).position().top ),
- $this = $( this );
-
- if ( top !== lastTop ) {
- rows[rows.length] = [];
- lastTop = top;
- }
+ $gallery.children( 'li' ).each( function () {
+ // Math.floor to be paranoid if things are off by 0.00000000001
+ var top = Math.floor( $( this ).position().top ),
+ $this = $( this );
- $img = $this.find( 'div.thumb a.image img' );
- if ( $img.length && $img[0].height ) {
- imgHeight = $img[0].height;
- imgWidth = $img[0].width;
- } else {
- // If we don't have a real image, get the containing divs width/height.
- // Note that if we do have a real image, using this method will generally
- // give the same answer, but can be different in the case of a very
- // narrow image where extra padding is added.
- imgHeight = $this.children().children( 'div:first' ).height();
- imgWidth = $this.children().children( 'div:first' ).width();
- }
+ if ( top !== lastTop ) {
+ rows[rows.length] = [];
+ lastTop = top;
+ }
- // Hack to make an edge case work ok
- if ( imgHeight < 30 ) {
- // Don't try and resize this item.
- imgHeight = 0;
- }
+ $img = $this.find( 'div.thumb a.image img' );
+ if ( $img.length && $img[0].height ) {
+ imgHeight = $img[0].height;
+ imgWidth = $img[0].width;
+ } else {
+ // If we don't have a real image, get the containing divs width/height.
+ // Note that if we do have a real image, using this method will generally
+ // give the same answer, but can be different in the case of a very
+ // narrow image where extra padding is added.
+ imgHeight = $this.children().children( 'div:first' ).height();
+ imgWidth = $this.children().children( 'div:first' ).width();
+ }
- rows[rows.length - 1][rows[rows.length - 1].length] = {
- $elm: $this,
- width: $this.outerWidth(),
- imgWidth: imgWidth,
- // XXX: can divide by 0 ever happen?
- aspect: imgWidth / imgHeight,
- captionWidth: $this.children().children( 'div.gallerytextwrapper' ).width(),
- height: imgHeight
- };
- } );
+ // Hack to make an edge case work ok
+ if ( imgHeight < 30 ) {
+ // Don't try and resize this item.
+ imgHeight = 0;
+ }
- ( function () {
- var maxWidth,
- combinedAspect,
- combinedPadding,
- curRow,
- curRowHeight,
- wantedWidth,
- preferredHeight,
- newWidth,
- padding,
- $outerDiv,
- $innerDiv,
- $imageDiv,
- $imageElm,
- imageElm,
- $caption,
- i,
- j,
- avgZoom,
- totalZoom = 0;
-
- for ( i = 0; i < rows.length; i++ ) {
- maxWidth = $gallery.width();
- combinedAspect = 0;
- combinedPadding = 0;
- curRow = rows[i];
- curRowHeight = 0;
-
- for ( j = 0; j < curRow.length; j++ ) {
- if ( curRowHeight === 0 ) {
- if ( isFinite( curRow[j].height ) ) {
- // Get the height of this row, by taking the first
- // non-out of bounds height
- curRowHeight = curRow[j].height;
- }
- }
+ captionWidth = $this.children().children( 'div.gallerytextwrapper' ).width();
+ rows[rows.length - 1][rows[rows.length - 1].length] = {
+ $elm: $this,
+ width: $this.outerWidth(),
+ imgWidth: imgWidth,
+ // XXX: can divide by 0 ever happen?
+ aspect: imgWidth / imgHeight,
+ captionWidth: captionWidth,
+ height: imgHeight
+ };
- if ( curRow[j].aspect === 0 || !isFinite( curRow[j].aspect ) ) {
- // One of the dimensions are 0. Probably should
- // not try to resize.
- combinedPadding += curRow[j].width;
- } else {
- combinedAspect += curRow[j].aspect;
- combinedPadding += curRow[j].width - curRow[j].imgWidth;
- }
- }
+ // Save all boundaries so we can restore them on window resize
+ $this.data( 'imgWidth', imgWidth );
+ $this.data( 'imgHeight', imgHeight );
+ $this.data( 'width', $this.outerWidth() );
+ $this.data( 'captionWidth', captionWidth );
+ } );
- // Add some padding for inter-element spacing.
- combinedPadding += 5 * curRow.length;
- wantedWidth = maxWidth - combinedPadding;
- preferredHeight = wantedWidth / combinedAspect;
-
- if ( preferredHeight > curRowHeight * 1.5 ) {
- // Only expand at most 1.5 times current size
- // As that's as high a resolution as we have.
- // Also on the off chance there is a bug in this
- // code, would prevent accidentally expanding to
- // be 10 billion pixels wide.
- if ( i === rows.length - 1 ) {
- // If its the last row, and we can't fit it,
- // don't make the entire row huge.
- avgZoom = ( totalZoom / ( rows.length - 1 ) ) * curRowHeight;
- if ( isFinite( avgZoom ) && avgZoom >= 1 && avgZoom <= 1.5 ) {
- preferredHeight = avgZoom;
- } else {
- // Probably a single row gallery
- preferredHeight = curRowHeight;
- }
- } else {
- preferredHeight = 1.5 * curRowHeight;
+ ( function () {
+ var maxWidth,
+ combinedAspect,
+ combinedPadding,
+ curRow,
+ curRowHeight,
+ wantedWidth,
+ preferredHeight,
+ newWidth,
+ padding,
+ $outerDiv,
+ $innerDiv,
+ $imageDiv,
+ $imageElm,
+ imageElm,
+ $caption,
+ i,
+ j,
+ avgZoom,
+ totalZoom = 0;
+
+ for ( i = 0; i < rows.length; i++ ) {
+ maxWidth = $gallery.width();
+ combinedAspect = 0;
+ combinedPadding = 0;
+ curRow = rows[i];
+ curRowHeight = 0;
+
+ for ( j = 0; j < curRow.length; j++ ) {
+ if ( curRowHeight === 0 ) {
+ if ( isFinite( curRow[j].height ) ) {
+ // Get the height of this row, by taking the first
+ // non-out of bounds height
+ curRowHeight = curRow[j].height;
}
}
- if ( !isFinite( preferredHeight ) ) {
- // This *definitely* should not happen.
- // Skip this row.
- continue;
- }
- if ( preferredHeight < 5 ) {
- // Well something clearly went wrong...
- // Skip this row.
- continue;
- }
- if ( preferredHeight / curRowHeight > 1 ) {
- totalZoom += preferredHeight / curRowHeight;
+ if ( curRow[j].aspect === 0 || !isFinite( curRow[j].aspect ) ) {
+ // One of the dimensions are 0. Probably should
+ // not try to resize.
+ combinedPadding += curRow[j].width;
} else {
- // If we shrink, still consider that a zoom of 1
- totalZoom += 1;
+ combinedAspect += curRow[j].aspect;
+ combinedPadding += curRow[j].width - curRow[j].imgWidth;
}
+ }
- for ( j = 0; j < curRow.length; j++ ) {
- newWidth = preferredHeight * curRow[j].aspect;
- padding = curRow[j].width - curRow[j].imgWidth;
- $outerDiv = curRow[j].$elm;
- $innerDiv = $outerDiv.children( 'div' ).first();
- $imageDiv = $innerDiv.children( 'div.thumb' );
- $imageElm = $imageDiv.find( 'img' ).first();
- imageElm = $imageElm.length ? $imageElm[0] : null;
- $caption = $outerDiv.find( 'div.gallerytextwrapper' );
-
- // Since we are going to re-adjust the height, the vertical
- // centering margins need to be reset.
- $imageDiv.children( 'div' ).css( 'margin', '0px auto' );
-
- if ( newWidth < 60 || !isFinite( newWidth ) ) {
- // Making something skinnier than this will mess up captions,
- if ( newWidth < 1 || !isFinite( newWidth ) ) {
- $innerDiv.height( preferredHeight );
- // Don't even try and touch the image size if it could mean
- // making it disappear.
- continue;
- }
+ // Add some padding for inter-element spacing.
+ combinedPadding += 5 * curRow.length;
+ wantedWidth = maxWidth - combinedPadding;
+ preferredHeight = wantedWidth / combinedAspect;
+
+ if ( preferredHeight > curRowHeight * 1.5 ) {
+ // Only expand at most 1.5 times current size
+ // As that's as high a resolution as we have.
+ // Also on the off chance there is a bug in this
+ // code, would prevent accidentally expanding to
+ // be 10 billion pixels wide.
+ if ( i === rows.length - 1 ) {
+ // If its the last row, and we can't fit it,
+ // don't make the entire row huge.
+ avgZoom = ( totalZoom / ( rows.length - 1 ) ) * curRowHeight;
+ if ( isFinite( avgZoom ) && avgZoom >= 1 && avgZoom <= 1.5 ) {
+ preferredHeight = avgZoom;
} else {
- $outerDiv.width( newWidth + padding );
- $innerDiv.width( newWidth + padding );
- $imageDiv.width( newWidth );
- $caption.width( curRow[j].captionWidth + ( newWidth - curRow[j].imgWidth ) );
+ // Probably a single row gallery
+ preferredHeight = curRowHeight;
}
+ } else {
+ preferredHeight = 1.5 * curRowHeight;
+ }
+ }
+ if ( !isFinite( preferredHeight ) ) {
+ // This *definitely* should not happen.
+ // Skip this row.
+ continue;
+ }
+ if ( preferredHeight < 5 ) {
+ // Well something clearly went wrong...
+ // Skip this row.
+ continue;
+ }
- if ( imageElm ) {
- // We don't always have an img, e.g. in the case of an invalid file.
- imageElm.width = newWidth;
- imageElm.height = preferredHeight;
- } else {
- // Not a file box.
- $imageDiv.height( preferredHeight );
+ if ( preferredHeight / curRowHeight > 1 ) {
+ totalZoom += preferredHeight / curRowHeight;
+ } else {
+ // If we shrink, still consider that a zoom of 1
+ totalZoom += 1;
+ }
+
+ for ( j = 0; j < curRow.length; j++ ) {
+ newWidth = preferredHeight * curRow[j].aspect;
+ padding = curRow[j].width - curRow[j].imgWidth;
+ $outerDiv = curRow[j].$elm;
+ $innerDiv = $outerDiv.children( 'div' ).first();
+ $imageDiv = $innerDiv.children( 'div.thumb' );
+ $imageElm = $imageDiv.find( 'img' ).first();
+ imageElm = $imageElm.length ? $imageElm[0] : null;
+ $caption = $outerDiv.find( 'div.gallerytextwrapper' );
+
+ // Since we are going to re-adjust the height, the vertical
+ // centering margins need to be reset.
+ $imageDiv.children( 'div' ).css( 'margin', '0px auto' );
+
+ if ( newWidth < 60 || !isFinite( newWidth ) ) {
+ // Making something skinnier than this will mess up captions,
+ if ( newWidth < 1 || !isFinite( newWidth ) ) {
+ $innerDiv.height( preferredHeight );
+ // Don't even try and touch the image size if it could mean
+ // making it disappear.
+ continue;
}
+ } else {
+ $outerDiv.width( newWidth + padding );
+ $innerDiv.width( newWidth + padding );
+ $imageDiv.width( newWidth );
+ $caption.width( curRow[j].captionWidth + ( newWidth - curRow[j].imgWidth ) );
+ }
+
+ if ( imageElm ) {
+ // We don't always have an img, e.g. in the case of an invalid file.
+ imageElm.width = newWidth;
+ imageElm.height = preferredHeight;
+ } else {
+ // Not a file box.
+ $imageDiv.height( preferredHeight );
}
}
- }() );
+ }
+ }() );
+ }
+
+ function handleResizeStart() {
+ $galleries.children( 'li' ).each( function () {
+ var imgWidth = $( this ).data( 'imgWidth' ),
+ imgHeight = $( this ).data( 'imgHeight' ),
+ width = $( this ).data( 'width' ),
+ captionWidth = $( this ).data( 'captionWidth' ),
+ $innerDiv = $( this ).children( 'div' ).first(),
+ $imageDiv = $innerDiv.children( 'div.thumb' ),
+ $imageElm, imageElm;
+
+ // Restore original sizes so we can arrange the elements as on freshly loaded page
+ $( this ).width( width );
+ $innerDiv.width( width );
+ $imageDiv.width( imgWidth );
+ $( this ).find( 'div.gallerytextwrapper' ).width( captionWidth );
+
+ $imageElm = $( this ).find( 'img' ).first();
+ imageElm = $imageElm.length ? $imageElm[0] : null;
+ if ( imageElm ) {
+ imageElm.width = imgWidth;
+ imageElm.height = imgHeight;
+ } else {
+ $imageDiv.height( imgHeight );
+ }
+ } );
+ }
+
+ function handleResizeEnd() {
+ $galleries.each( justify );
+ }
+
+ mw.hook( 'wikipage.content' ).add( function ( $content ) {
+ if ( isTouchScreen ) {
+ // Always show the caption for a touch screen.
+ $content.find( 'ul.mw-gallery-packed-hover' )
+ .addClass( 'mw-gallery-packed-overlay' )
+ .removeClass( 'mw-gallery-packed-hover' );
+ } else {
+ // Note use of just "a", not a.image, since we want this to trigger if a link in
+ // the caption receives focus
+ $content.find( 'ul.mw-gallery-packed-hover li.gallerybox' ).on( 'focus blur', 'a', function ( e ) {
+ // Confusingly jQuery leaves e.type as focusout for delegated blur events
+ var gettingFocus = e.type !== 'blur' && e.type !== 'focusout';
+ $( this ).closest( 'li.gallerybox' ).toggleClass( 'mw-gallery-focused', gettingFocus );
+ } );
+ }
+
+ $galleries = $content.find( 'ul.mw-gallery-packed-overlay, ul.mw-gallery-packed-hover, ul.mw-gallery-packed' );
+ // Call the justification asynchronous because live preview fires the hook with detached $content.
+ setTimeout( function () {
+ $galleries.each( justify );
+
+ // Bind here instead of in the top scope as the callbacks use $galleries.
+ if ( !bound ) {
+ bound = true;
+ $( window )
+ .resize( $.debounce( 300, true, handleResizeStart ) )
+ .resize( $.debounce( 300, handleResizeEnd ) );
+ }
} );
} );
-}( jQuery ) );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.page/mediawiki.page.image.pagination.js b/resources/src/mediawiki.page/mediawiki.page.image.pagination.js
index 622e818d..9ad9c30a 100644
--- a/resources/src/mediawiki.page/mediawiki.page.image.pagination.js
+++ b/resources/src/mediawiki.page/mediawiki.page.image.pagination.js
@@ -2,23 +2,66 @@
* Implement AJAX navigation for multi-page images so the user may browse without a full page reload.
*/
( function ( mw, $ ) {
- var jqXhr, $multipageimage, $spinner;
+ var jqXhr, $multipageimage, $spinner,
+ cache = {},
+ cacheOrder = [];
- /* Fetch the next page and use jQuery to swap the table.multipageimage contents.
+ /* Fetch the next page, caching up to 10 last-loaded pages.
* @param {string} url
- * @param {boolean} [hist=false] Whether this is a load triggered by history navigation (if
- * true, this function won't push a new history state, for the browser did so already).
+ * @return {jQuery.Promise}
*/
- function loadPage( url, hist ) {
- var $tr;
- if ( jqXhr ) {
+ function fetchPageData( url ) {
+ if ( jqXhr && jqXhr.abort ) {
// Prevent race conditions and piling up pending requests
jqXhr.abort();
- jqXhr = undefined;
}
+ jqXhr = undefined;
+
+ // Try the cache
+ if ( cache[url] ) {
+ // Update access freshness
+ cacheOrder.splice( $.inArray( url, cacheOrder ), 1 );
+ cacheOrder.push( url );
+ return $.Deferred().resolve( cache[url] ).promise();
+ }
+
+ // @todo Don't fetch the entire page. Ideally we'd only fetch the content portion or the data
+ // (thumbnail urls) and update the interface manually.
+ jqXhr = $.ajax( url ).then( function ( data ) {
+ return $( data ).find( 'table.multipageimage' ).contents();
+ } );
- // Add a new spinner if one doesn't already exist
- if ( !$spinner ) {
+ // Handle cache updates
+ jqXhr.done( function ( $contents ) {
+ jqXhr = undefined;
+
+ // Cache the newly loaded page
+ cache[url] = $contents;
+ cacheOrder.push( url );
+
+ // Remove the oldest entry if we're over the limit
+ if ( cacheOrder.length > 10 ) {
+ delete cache[ cacheOrder[0] ];
+ cacheOrder = cacheOrder.slice( 1 );
+ }
+ } );
+
+ return jqXhr.promise();
+ }
+
+ /* Fetch the next page and use jQuery to swap the table.multipageimage contents.
+ * @param {string} url
+ * @param {boolean} [hist=false] Whether this is a load triggered by history navigation (if
+ * true, this function won't push a new history state, for the browser did so already).
+ */
+ function switchPage( url, hist ) {
+ var $tr, promise;
+
+ // Start fetching data (might be cached)
+ promise = fetchPageData( url );
+
+ // Add a new spinner if one doesn't already exist and the data is not already ready
+ if ( !$spinner && promise.state() !== 'resolved' ) {
$tr = $multipageimage.find( 'tr' );
$spinner = $.createSpinner( {
size: 'large',
@@ -34,13 +77,11 @@
$multipageimage.empty().append( $spinner );
}
- // @todo Don't fetch the entire page. Ideally we'd only fetch the content portion or the data
- // (thumbnail urls) and update the interface manually.
- jqXhr = $.ajax( url ).done( function ( data ) {
- jqXhr = $spinner = undefined;
+ promise.done( function ( $contents ) {
+ $spinner = undefined;
// Replace table contents
- $multipageimage.empty().append( $( data ).find( 'table.multipageimage' ).contents() );
+ $multipageimage.empty().append( $contents.clone() );
bindPageNavigation( $multipageimage );
@@ -66,12 +107,12 @@
.extend( { title: mw.config.get( 'wgPageName' ), page: page } )
.toString();
- loadPage( uri );
+ switchPage( uri );
e.preventDefault();
} );
$container.find( 'form[name="pageselector"]' ).one( 'change submit', function ( e ) {
- loadPage( this.action + '?' + $( this ).serialize() );
+ switchPage( this.action + '?' + $( this ).serialize() );
e.preventDefault();
} );
}
@@ -93,7 +134,7 @@
$( window ).on( 'popstate', function ( e ) {
var state = e.originalEvent.state;
if ( state && state.tag === 'mw-pagination' ) {
- loadPage( location.href, true );
+ switchPage( location.href, true );
}
} );
}
diff --git a/resources/src/mediawiki.page/mediawiki.page.ready.js b/resources/src/mediawiki.page/mediawiki.page.ready.js
index 246cc817..36eb9d4f 100644
--- a/resources/src/mediawiki.page/mediawiki.page.ready.js
+++ b/resources/src/mediawiki.page/mediawiki.page.ready.js
@@ -7,7 +7,7 @@
// it works only comparing to window.self or window.window (http://stackoverflow.com/q/4850978/319266)
if ( window.top !== window.self ) {
// Un-trap us from framesets
- window.top.location = window.location;
+ window.top.location.href = location.href;
}
}
diff --git a/resources/src/mediawiki.page/mediawiki.page.startup.js b/resources/src/mediawiki.page/mediawiki.page.startup.js
index 4aae6069..ddd4f0c4 100644
--- a/resources/src/mediawiki.page/mediawiki.page.startup.js
+++ b/resources/src/mediawiki.page/mediawiki.page.startup.js
@@ -4,7 +4,7 @@
// Client profile classes for <html>
// Allows for easy hiding/showing of JS or no-JS-specific UI elements
- $( 'html' )
+ $( document.documentElement )
.addClass( 'client-js' )
.removeClass( 'client-nojs' );
diff --git a/resources/src/mediawiki.skinning/content.css b/resources/src/mediawiki.skinning/content.css
index 7a417081..7dd5ee7f 100644
--- a/resources/src/mediawiki.skinning/content.css
+++ b/resources/src/mediawiki.skinning/content.css
@@ -8,7 +8,8 @@
/* Table of Contents */
#toc,
.toc,
-.mw-warning {
+.mw-warning,
+.toccolours {
border: 1px solid #aaa;
background-color: #f9f9f9;
padding: 5px;
@@ -87,13 +88,6 @@ table.toc td {
font-size: 94%;
}
-.toccolours {
- border: 1px solid #aaa;
- background-color: #f9f9f9;
- padding: 5px;
- font-size: 95%;
-}
-
/* Warning */
.mw-warning {
margin-left: 50px;
@@ -165,8 +159,13 @@ div.magnify a {
width: 15px;
height: 11px;
/* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
+
+ /* Use same SVG support hack as mediawiki.legacy's shared.css */
+ background-image: url(images/magnify-clip-ltr.png);
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
/* @embed */
- background: url(images/magnify-clip-ltr.png) center center no-repeat;
+ background-image: linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
/* Don't annoy people who copy-paste everything too much */
-moz-user-select: none;
-webkit-user-select: none;
@@ -194,8 +193,12 @@ img.thumbborder {
/* @noflip */
.mw-content-ltr div.magnify a {
- /* @embed */
+ /* Use same SVG support hack as mediawiki.legacy's shared.css */
background-image: url(images/magnify-clip-ltr.png);
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
}
/* @noflip */
@@ -212,8 +215,12 @@ img.thumbborder {
/* @noflip */
.mw-content-rtl div.magnify a {
- /* @embed */
+ /* Use same SVG support hack as mediawiki.legacy's shared.css */
background-image: url(images/magnify-clip-rtl.png);
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/magnify-clip-rtl.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/magnify-clip-rtl.svg);
}
/* @noflip */
diff --git a/resources/src/mediawiki.skinning/elements.css b/resources/src/mediawiki.skinning/elements.css
index 392a2a66..8140d1a5 100644
--- a/resources/src/mediawiki.skinning/elements.css
+++ b/resources/src/mediawiki.skinning/elements.css
@@ -112,7 +112,7 @@ h6 {
}
h3 {
- font-size: 132%;
+ font-size: 128%;
}
h4 {
@@ -141,7 +141,6 @@ h5 {
p {
margin: .4em 0 .5em 0;
- line-height: 1.5em;
}
p img {
@@ -149,14 +148,12 @@ p img {
}
ul {
- line-height: 1.5em;
list-style-type: square;
margin: .3em 0 0 1.6em;
padding: 0;
}
ol {
- line-height: 1.5em;
margin: .3em 0 0 3.2em;
padding: 0;
list-style-image: none;
@@ -177,17 +174,10 @@ dl {
}
dd {
- line-height: 1.5em;
margin-left: 1.6em;
margin-bottom: .1em;
}
-/* IE 6 and 7 lack support for quotes aroud the <q> element ('::before' and '::after'
- pseudoelements, 'quotes' property). Let's italicize it instead (using the star hack). */
-q {
- *font-style: italic;
-}
-
pre, code, tt, kbd, samp, .mw-code {
/*
* Some browsers will render the monospace text too small, namely Firefox, Chrome and Safari.
@@ -221,7 +211,6 @@ fieldset {
border: 1px solid #2f6fab;
margin: 1em 0 1em 0;
padding: 0 1em 1em;
- line-height: 1.5em;
}
fieldset.nested {
diff --git a/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png b/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png
index 00a9cee1..712b1b48 100644
--- a/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png
+++ b/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png
Binary files differ
diff --git a/resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg b/resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg
new file mode 100644
index 00000000..4d3dcb65
--- /dev/null
+++ b/resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 15" width="15" height="11">
+ <g id="magnify-clip" fill="#fff" stroke="#000">
+ <path id="bigbox" d="M1.509 1.865h10.99v7.919h-10.99z"/>
+ <path id="smallbox" d="M-1.499 6.868h5.943v4.904h-5.943z"/>
+ </g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png b/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png
index ff85c077..1d03a8c0 100644
--- a/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png
+++ b/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png
Binary files differ
diff --git a/resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg b/resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg
new file mode 100644
index 00000000..582e4ae7
--- /dev/null
+++ b/resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 15" width="15" height="11">
+ <g id="magnify-clip" fill="#fff" stroke="#000">
+ <path id="bigbox" d="M9.491 1.865h-10.99v7.919h10.99z"/>
+ <path id="smallbox" d="M12.499 6.868h-5.943v4.904h5.943z"/>
+ </g>
+</svg>
diff --git a/resources/src/mediawiki.skinning/interface.css b/resources/src/mediawiki.skinning/interface.css
index 398a132d..b57ee367 100644
--- a/resources/src/mediawiki.skinning/interface.css
+++ b/resources/src/mediawiki.skinning/interface.css
@@ -15,6 +15,14 @@
clear: both;
}
+.editOptions {
+ background-color: #F0F0F0;
+ border: 1px solid silver;
+ border-top: none;
+ padding: 1em 1em 1.5em 1em;
+ margin-bottom: 2em;
+}
+
.usermessage {
background-color: #ffce7b;
border: 1px solid #ffa500;
diff --git a/resources/src/mediawiki.special/mediawiki.special.block.js b/resources/src/mediawiki.special/mediawiki.special.block.js
index 8579e054..aca335ee 100644
--- a/resources/src/mediawiki.special/mediawiki.special.block.js
+++ b/resources/src/mediawiki.special/mediawiki.special.block.js
@@ -12,7 +12,7 @@
function updateBlockOptions( instant ) {
var blocktarget = $.trim( $blockTarget.val() ),
isEmpty = blocktarget === '',
- isIp = mw.util.isIPv4Address( blocktarget, true ) || mw.util.isIPv6Address( blocktarget, true ),
+ isIp = mw.util.isIPAddress( blocktarget, true ),
isIpRange = isIp && blocktarget.match( /\/\d+$/ );
if ( isIp && !isEmpty ) {
diff --git a/resources/src/mediawiki.special/mediawiki.special.changeslist.css b/resources/src/mediawiki.special/mediawiki.special.changeslist.css
index c92db167..16fdf38a 100644
--- a/resources/src/mediawiki.special/mediawiki.special.changeslist.css
+++ b/resources/src/mediawiki.special/mediawiki.special.changeslist.css
@@ -5,3 +5,11 @@
.mw-changeslist-line-watched .mw-title {
font-weight: bold;
}
+
+/*
+ * Titles, including username links, are especially prone for getting jumbled up
+ * with other titles, usernames, etc. in mixed RTL-LTR environment.
+ */
+.mw-changeslist .mw-title {
+ unicode-bidi: embed;
+}
diff --git a/resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css b/resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css
index 6b0bf991..14f6aeee 100644
--- a/resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css
+++ b/resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css
@@ -20,10 +20,14 @@
.mw-changeslist-legend dt {
float: left;
- margin-right: 0.5em;
+ margin: 0 0.5em 0 0;
}
.mw-changeslist-legend dd {
margin-left: 1.5em;
+}
+
+.mw-changeslist-legend dt,
+.mw-changeslist-legend dd {
line-height: 1.3em;
}
diff --git a/resources/src/mediawiki.special/mediawiki.special.css b/resources/src/mediawiki.special/mediawiki.special.css
index 0356fc74..d2457262 100644
--- a/resources/src/mediawiki.special/mediawiki.special.css
+++ b/resources/src/mediawiki.special/mediawiki.special.css
@@ -118,3 +118,8 @@ table.mw-userrights-groups * td,
table.mw-userrights-groups * th {
padding-right: 1.5em;
}
+
+/* Special:Contributions */
+.mw-contributions-form select {
+ vertical-align: middle;
+}
diff --git a/resources/src/mediawiki.special/mediawiki.special.edittags.css b/resources/src/mediawiki.special/mediawiki.special.edittags.css
new file mode 100644
index 00000000..204009c9
--- /dev/null
+++ b/resources/src/mediawiki.special/mediawiki.special.edittags.css
@@ -0,0 +1,15 @@
+/*!
+ * Styling for Special:EditTags and action=editchangetags
+ */
+#mw-edittags-tags-selector td {
+ vertical-align: top;
+}
+
+#mw-edittags-tags-selector-multi td {
+ vertical-align: top;
+ padding-right: 1.5em;
+}
+
+#mw-edittags-tag-list {
+ min-width: 20em;
+}
diff --git a/resources/src/mediawiki.special/mediawiki.special.edittags.js b/resources/src/mediawiki.special/mediawiki.special.edittags.js
new file mode 100644
index 00000000..69a2a67a
--- /dev/null
+++ b/resources/src/mediawiki.special/mediawiki.special.edittags.js
@@ -0,0 +1,24 @@
+/*!
+ * JavaScript for Special:EditTags
+ */
+( function ( mw, $ ) {
+ $( function () {
+ var $tagList = $( '#mw-edittags-tag-list' );
+ if ( $tagList.length ) {
+ $tagList.chosen( {
+ /*jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
+ placeholder_text_multiple: mw.msg( 'tags-edit-chosen-placeholder' ),
+ no_results_text: mw.msg( 'tags-edit-chosen-no-results' )
+ } );
+ }
+
+ $( '#mw-edittags-remove-all' ).on( 'change', function ( e ) {
+ $( '.mw-edittags-remove-checkbox' ).prop( 'checked', e.target.checked );
+ } );
+ $( '.mw-edittags-remove-checkbox' ).on( 'change', function ( e ) {
+ if ( !e.target.checked ) {
+ $( '#mw-edittags-remove-all' ).prop( 'checked', false );
+ }
+ } );
+ } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.import.js b/resources/src/mediawiki.special/mediawiki.special.import.js
index a9a985eb..5622b32a 100644
--- a/resources/src/mediawiki.special/mediawiki.special.import.js
+++ b/resources/src/mediawiki.special/mediawiki.special.import.js
@@ -2,7 +2,7 @@
* JavaScript for Special:Import
*/
( function ( $ ) {
- function updateImportSubprojectList() {
+ function updateImportSubprojectList( firstTime ) {
var $projectField = $( '#mw-import-table-interwiki #interwiki' ),
$subprojectField = $projectField.parent().find( '#subproject' ),
$selected = $projectField.find( ':selected' ),
@@ -14,7 +14,7 @@
option = document.createElement( 'option' );
option.appendChild( document.createTextNode( el ) );
option.setAttribute( 'value', el );
- if ( oldValue === el ) {
+ if ( oldValue === el && firstTime !== true ) {
option.setAttribute( 'selected', 'selected' );
}
return option;
@@ -29,7 +29,7 @@
var $projectField = $( '#mw-import-table-interwiki #interwiki' );
if ( $projectField.length ) {
$projectField.change( updateImportSubprojectList );
- updateImportSubprojectList();
+ updateImportSubprojectList( true );
}
} );
}( jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.pageLanguage.js b/resources/src/mediawiki.special/mediawiki.special.pageLanguage.js
index ba7f7342..7c2269fa 100644
--- a/resources/src/mediawiki.special/mediawiki.special.pageLanguage.js
+++ b/resources/src/mediawiki.special/mediawiki.special.pageLanguage.js
@@ -6,4 +6,4 @@
$( '#mw-pl-options-2' ).prop( 'checked', true );
} );
} );
-} ( jQuery ) );
+}( jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.js b/resources/src/mediawiki.special/mediawiki.special.preferences.js
index 1f6429b2..4bd747b2 100644
--- a/resources/src/mediawiki.special/mediawiki.special.preferences.js
+++ b/resources/src/mediawiki.special/mediawiki.special.preferences.js
@@ -5,15 +5,18 @@ jQuery( function ( $ ) {
var $preftoc, $preferences, $fieldsets, $legends,
hash, labelFunc,
$tzSelect, $tzTextbox, $localtimeHolder, servertime,
- $checkBoxes, savedWindowOnBeforeUnload;
+ $checkBoxes, allowCloseWindowFn;
labelFunc = function () {
return this.id.replace( /^mw-prefsection/g, 'preftab' );
};
$( '#prefsubmit' ).attr( 'id', 'prefcontrol' );
- $preftoc = $( '<ul id="preftoc"></ul>' )
- .attr( 'role', 'tablist' );
+ $preftoc = $( '<ul>' )
+ .attr( {
+ id: 'preftoc',
+ role: 'tablist'
+ } );
$preferences = $( '#preferences' )
.addClass( 'jsprefs' )
.before( $preftoc );
@@ -41,7 +44,7 @@ jQuery( function ( $ ) {
} else {
$( this ).css( 'height', 'auto' );
}
- } ).insertBefore( $preftoc );
+ } ).insertBefore( $preftoc );
/**
* It uses document.getElementById for security reasons (HTML injections in $()).
@@ -57,7 +60,7 @@ jQuery( function ( $ ) {
// therefore save and restore scrollTop to prevent jumping.
scrollTop = $( window ).scrollTop();
if ( mode !== 'noHash' ) {
- window.location.hash = '#mw-prefsection-' + name;
+ location.hash = '#mw-prefsection-' + name;
}
$( window ).scrollTop( scrollTop );
@@ -127,7 +130,7 @@ jQuery( function ( $ ) {
// If we've reloaded the page or followed an open-in-new-window,
// make the selected tab visible.
- hash = window.location.hash;
+ hash = location.hash;
if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
}
@@ -142,7 +145,7 @@ jQuery( function ( $ ) {
( document.documentMode === undefined || document.documentMode >= 8 )
) {
$( window ).on( 'hashchange', function () {
- var hash = window.location.hash;
+ var hash = location.hash;
if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
} else if ( hash === '' ) {
@@ -223,12 +226,8 @@ jQuery( function ( $ ) {
localTime = servertime + minuteDiff;
// Bring time within the [0,1440) range.
- while ( localTime < 0 ) {
- localTime += 1440;
- }
- while ( localTime >= 1440 ) {
- localTime -= 1440;
- }
+ localTime = ( ( localTime % 1440 ) + 1440 ) % 1440;
+
$localtimeHolder.text( mediaWiki.language.convertNumber( minutesToHours( localTime ) ) );
}
@@ -267,39 +266,14 @@ jQuery( function ( $ ) {
// Set up a message to notify users if they try to leave the page without
// saving.
$( '#mw-prefs-form' ).data( 'origdata', $( '#mw-prefs-form' ).serialize() );
- $( window )
- .on( 'beforeunload.prefswarning', function () {
- var retval;
-
- // Check if anything changed
- if ( $( '#mw-prefs-form' ).serialize() !== $( '#mw-prefs-form' ).data( 'origdata' ) ) {
- // Return our message
- retval = mediaWiki.msg( 'prefswarning-warning', mediaWiki.msg( 'saveprefs' ) );
- }
+ allowCloseWindowFn = mediaWiki.confirmCloseWindow( {
+ test: function () {
+ return $( '#mw-prefs-form' ).serialize() !== $( '#mw-prefs-form' ).data( 'origdata' );
+ },
- // Unset the onbeforeunload handler so we don't break page caching in Firefox
- savedWindowOnBeforeUnload = window.onbeforeunload;
- window.onbeforeunload = null;
- if ( retval !== undefined ) {
- // ...but if the user chooses not to leave the page, we need to rebind it
- setTimeout( function () {
- window.onbeforeunload = savedWindowOnBeforeUnload;
- }, 1 );
- return retval;
- }
- } )
- .on( 'pageshow.prefswarning', function () {
- // Re-add onbeforeunload handler
- if ( !window.onbeforeunload ) {
- window.onbeforeunload = savedWindowOnBeforeUnload;
- }
- } );
- $( '#mw-prefs-form' ).submit( function () {
- // Unbind our beforeunload handler
- $( window ).off( '.prefswarning' );
- } );
- $( '#mw-prefs-restoreprefs' ).click( function () {
- // Unbind our beforeunload handler
- $( window ).off( '.prefswarning' );
+ message: mediaWiki.msg( 'prefswarning-warning', mediaWiki.msg( 'saveprefs' ) ),
+ namespace: 'prefswarning'
} );
+ $( '#mw-prefs-form' ).submit( allowCloseWindowFn );
+ $( '#mw-prefs-restoreprefs' ).click( allowCloseWindowFn );
} );
diff --git a/resources/src/mediawiki.special/mediawiki.special.search.css b/resources/src/mediawiki.special/mediawiki.special.search.css
index ef955077..8f845dfa 100644
--- a/resources/src/mediawiki.special/mediawiki.special.search.css
+++ b/resources/src/mediawiki.special/mediawiki.special.search.css
@@ -40,34 +40,34 @@ div.searchresult {
color: green;
font-size: 97%;
}
-.mw-search-formheader {
+.mw-search-profile-tabs {
background-color: #f3f3f3;
margin-top: 1em;
border: 1px solid silver;
}
-.mw-search-formheader div.search-types {
+.mw-search-profile-tabs div.search-types {
float: left;
padding-left: 0.25em;
}
-.mw-search-formheader div.search-types ul {
+.mw-search-profile-tabs div.search-types ul {
margin: 0 !important;
padding: 0 !important;
list-style: none !important;
}
-.mw-search-formheader div.search-types ul li {
+.mw-search-profile-tabs div.search-types ul li {
float: left;
margin: 0;
padding: 0;
}
-.mw-search-formheader div.search-types ul li a {
+.mw-search-profile-tabs div.search-types ul li a {
display: block;
padding: 0.5em;
}
-.mw-search-formheader div.search-types ul li.current a {
+.mw-search-profile-tabs div.search-types ul li.current a {
color: #333333;
cursor: default;
}
-.mw-search-formheader div.search-types ul li.current a:hover {
+.mw-search-profile-tabs div.search-types ul li.current a:hover {
text-decoration: none;
}
#mw-search-top-table div.results-info {
@@ -106,9 +106,10 @@ fieldset#mw-searchoptions div#mw-search-togglebox input {
fieldset#mw-searchoptions table {
float: left;
margin-right: 3em;
+ border-collapse: collapse;
}
fieldset#mw-searchoptions table td {
- padding-right: 1em;
+ padding: 0 1em 0 0;
white-space: nowrap;
}
fieldset#mw-searchoptions div.divider {
diff --git a/resources/src/mediawiki.special/mediawiki.special.upload.js b/resources/src/mediawiki.special/mediawiki.special.upload.js
index 286befcc..eeccda59 100644
--- a/resources/src/mediawiki.special/mediawiki.special.upload.js
+++ b/resources/src/mediawiki.special/mediawiki.special.upload.js
@@ -6,8 +6,9 @@
* @singleton
*/
( function ( mw, $ ) {
- var ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
- $license = $( '#wpLicense' ), uploadWarning, uploadLicense;
+ var uploadWarning, uploadLicense,
+ ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
+ $license = $( '#wpLicense' );
window.wgUploadWarningObj = uploadWarning = {
responseCache: { '': '&nbsp;' },
@@ -136,11 +137,6 @@
};
$( function () {
- // Disable URL box if the URL copy upload source type is not selected
- if ( !$( '#wpSourceTypeurl' ).prop( 'checked' ) ) {
- $( '#wpUploadFileURL' ).prop( 'disabled', true );
- }
-
// AJAX wpDestFile warnings
if ( ajaxUploadDestCheck ) {
// Insert an event handler that fetches upload warnings when wpDestFile
@@ -202,6 +198,7 @@
// URLs are less likely to have a useful extension, so don't include them in the
// extension check.
if (
+ mw.config.get( 'wgCheckFileExtensions' ) &&
mw.config.get( 'wgStrictFileExtensions' ) &&
mw.config.get( 'wgFileExtensions' ) &&
$( this ).attr( 'id' ) !== 'wpUploadFileURL'
@@ -294,12 +291,7 @@
ctx,
meta,
previewSize = 180,
- thumb = $( '<div id="mw-upload-thumbnail" class="thumb tright">' +
- '<div class="thumbinner">' +
- '<div class="mw-small-spinner" style="width: 180px; height: 180px"></div>' +
- '<div class="thumbcaption"><div class="filename"></div><div class="fileinfo"></div></div>' +
- '</div>' +
- '</div>' );
+ thumb = mw.template.get( 'mediawiki.special.upload', 'thumbnail.html' ).render();
thumb.find( '.filename' ).text( file.name ).end()
.find( '.fileinfo' ).text( prettySize( file.size ) ).end();
@@ -387,10 +379,11 @@
};
img.src = dataURL;
}, mw.config.get( 'wgFileCanRotate' ) ? function ( data ) {
- /*jshint camelcase:false, nomen:false */
try {
meta = mw.libs.jpegmeta( data, file.fileName );
+ // jscs:disable requireCamelCaseOrUpperCaseIdentifiers, disallowDanglingUnderscores
meta._binary_data = null;
+ // jscs:enable
} catch ( e ) {
meta = null;
}
@@ -534,32 +527,58 @@
// Disable all upload source fields except the selected one
$( function () {
- var i, $row,
- $rows = $( '.mw-htmlform-field-UploadSourceField' );
+ var $rows = $( '.mw-htmlform-field-UploadSourceField' );
- /**
- * @param {jQuery} $currentRow
- * @return {Function} Handler
- * @return {jQuery.Event} return.e
- */
- function createHandler( $currentRow ) {
- return function () {
- $( '.mw-upload-source-error' ).remove();
- if ( this.checked ) {
- // Disable all inputs
- $rows.find( 'input[name!="wpSourceType"]' ).prop( 'disabled', true );
- // Re-enable the current one
- $currentRow.find( 'input' ).prop( 'disabled', false );
- }
- };
- }
+ $rows.on( 'change', 'input[type="radio"]', function ( e ) {
+ var currentRow = e.delegateTarget;
+
+ if ( !this.checked ) {
+ return;
+ }
+
+ $( '.mw-upload-source-error' ).remove();
+
+ // Enable selected upload method
+ $( currentRow ).find( 'input' ).prop( 'disabled', false );
- for ( i = $rows.length; i; i-- ) {
- $row = $rows.eq( i - 1 );
- $row
- .find( 'input[name="wpSourceType"]' )
- .change( createHandler( $row ) );
+ // Disable inputs of other upload methods
+ // (except for the radio button to re-enable it)
+ $rows
+ .not( currentRow )
+ .find( 'input[type!="radio"]' )
+ .prop( 'disabled', true );
+ } );
+
+ // Set initial state
+ if ( !$( '#wpSourceTypeurl' ).prop( 'checked' ) ) {
+ $( '#wpUploadFileURL' ).prop( 'disabled', true );
}
} );
+ $( function () {
+ // Prevent losing work
+ var allowCloseWindow,
+ $uploadForm = $( '#mw-upload-form' );
+
+ if ( !mw.user.options.get( 'useeditwarning' ) ) {
+ // If the user doesn't want edit warnings, don't set things up.
+ return;
+ }
+
+ $uploadForm.data( 'origtext', $uploadForm.serialize() );
+
+ allowCloseWindow = mw.confirmCloseWindow( {
+ test: function () {
+ return $( '#wpUploadFile' ).get( 0 ).files.length !== 0 ||
+ $uploadForm.data( 'origtext' ) !== $uploadForm.serialize();
+ },
+
+ message: mw.msg( 'editwarning-warning' ),
+ namespace: 'uploadwarning'
+ } );
+
+ $uploadForm.submit( function () {
+ allowCloseWindow();
+ } );
+ } );
}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
index 28b14462..30f000bf 100644
--- a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
+++ b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
@@ -1,5 +1,5 @@
/* Styles for user login and signup forms */
-#mw-userlogin-help {
+.mw-form-related-link-container {
text-align: center;
}
diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.js b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.js
index 247f8141..f5289dee 100644
--- a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.js
+++ b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.js
@@ -20,7 +20,7 @@
if ( !$submit.length ) {
return;
}
- tabIndex = $submit.prop( 'tabindex' ) - 1;
+ tabIndex = $submit.prop( 'tabIndex' ) - 1;
$captchaStuff = $content.find( '.captcha' );
if ( $captchaStuff.length ) {
diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css b/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css
index 64471b27..df3db574 100644
--- a/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css
+++ b/resources/src/mediawiki.special/mediawiki.special.userlogin.login.css
@@ -7,16 +7,3 @@
margin: 0 auto;
padding-top: 4em;
}
-
-#mw-createaccount-cta,
-#mw-createaccount-another {
- font-size: 0.9em;
- font-weight: normal;
- text-align: center;
-}
-
-#mw-createaccount-join {
- margin-left: 0.75em;
- width: auto;
- display: inline-block;
-}
diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js b/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js
index 68d3f61b..a32a7902 100644
--- a/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js
+++ b/resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js
@@ -135,6 +135,6 @@
} );
}
- $input.on( events, $.debounce( 250, updateUsernameStatus ) );
+ $input.on( events, $.debounce( 1000, updateUsernameStatus ) );
} );
}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.version.css b/resources/src/mediawiki.special/mediawiki.special.version.css
index 764e3777..7c87d68f 100644
--- a/resources/src/mediawiki.special/mediawiki.special.version.css
+++ b/resources/src/mediawiki.special/mediawiki.special.version.css
@@ -12,3 +12,7 @@
th.mw-version-ext-col-label {
font-size: 0.9em;
}
+
+.mw-version-ext-vcs-version {
+ unicode-bidi: embed;
+}
diff --git a/resources/src/mediawiki.special/templates/thumbnail.html b/resources/src/mediawiki.special/templates/thumbnail.html
new file mode 100644
index 00000000..73042f24
--- /dev/null
+++ b/resources/src/mediawiki.special/templates/thumbnail.html
@@ -0,0 +1,9 @@
+<div id="mw-upload-thumbnail" class="thumb tright">
+ <div class="thumbinner">
+ <div class="mw-small-spinner" style="width: 180px; height: 180px"></div>
+ <div class="thumbcaption">
+ <div class="filename"></div>
+ <div class="fileinfo"></div>
+ </div>
+ </div>
+</div>
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_bold.png b/resources/src/mediawiki.toolbar/images/ar/button_bold.png
index e524f6cb..e524f6cb 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_bold.png
+++ b/resources/src/mediawiki.toolbar/images/ar/button_bold.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_headline.png b/resources/src/mediawiki.toolbar/images/ar/button_headline.png
index 398e5614..398e5614 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_headline.png
+++ b/resources/src/mediawiki.toolbar/images/ar/button_headline.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_italic.png b/resources/src/mediawiki.toolbar/images/ar/button_italic.png
index 6ec73e9e..6ec73e9e 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_italic.png
+++ b/resources/src/mediawiki.toolbar/images/ar/button_italic.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_link.png b/resources/src/mediawiki.toolbar/images/ar/button_link.png
index c9c63f6c..c9c63f6c 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_link.png
+++ b/resources/src/mediawiki.toolbar/images/ar/button_link.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_nowiki.png b/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png
index 743ea61b..743ea61b 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_nowiki.png
+++ b/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_bold.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png
index 5c10cfe2..5c10cfe2 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_bold.png
+++ b/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_italic.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png
index 72209d74..72209d74 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_italic.png
+++ b/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_link.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png
index 09c86fb1..09c86fb1 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_link.png
+++ b/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_bold.png b/resources/src/mediawiki.toolbar/images/de/button_bold.png
index 367d5bc1..367d5bc1 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_bold.png
+++ b/resources/src/mediawiki.toolbar/images/de/button_bold.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_italic.png b/resources/src/mediawiki.toolbar/images/de/button_italic.png
index fdd8c9f9..fdd8c9f9 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_italic.png
+++ b/resources/src/mediawiki.toolbar/images/de/button_italic.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_bold.png b/resources/src/mediawiki.toolbar/images/en/button_bold.png
index 75c3f109..75c3f109 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_bold.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_bold.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_extlink.png b/resources/src/mediawiki.toolbar/images/en/button_extlink.png
index 458943c1..458943c1 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_extlink.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_extlink.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_headline.png b/resources/src/mediawiki.toolbar/images/en/button_headline.png
index 9cf751d9..9cf751d9 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_headline.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_headline.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_hr.png b/resources/src/mediawiki.toolbar/images/en/button_hr.png
index 47e1ca40..47e1ca40 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_hr.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_hr.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_image.png b/resources/src/mediawiki.toolbar/images/en/button_image.png
index 69192965..69192965 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_image.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_image.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_italic.png b/resources/src/mediawiki.toolbar/images/en/button_italic.png
index 527fbd14..527fbd14 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_italic.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_italic.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_link.png b/resources/src/mediawiki.toolbar/images/en/button_link.png
index eb5634b9..eb5634b9 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_link.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_link.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_media.png b/resources/src/mediawiki.toolbar/images/en/button_media.png
index 4194ec18..4194ec18 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_media.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_media.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_nowiki.png b/resources/src/mediawiki.toolbar/images/en/button_nowiki.png
index 2ba818de..2ba818de 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_nowiki.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_nowiki.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_sig.png b/resources/src/mediawiki.toolbar/images/en/button_sig.png
index fe34b3fb..fe34b3fb 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_sig.png
+++ b/resources/src/mediawiki.toolbar/images/en/button_sig.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_bold.png b/resources/src/mediawiki.toolbar/images/fa/button_bold.png
index c54d094c..c54d094c 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_bold.png
+++ b/resources/src/mediawiki.toolbar/images/fa/button_bold.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_headline.png b/resources/src/mediawiki.toolbar/images/fa/button_headline.png
index 9890d155..9890d155 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_headline.png
+++ b/resources/src/mediawiki.toolbar/images/fa/button_headline.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_italic.png b/resources/src/mediawiki.toolbar/images/fa/button_italic.png
index 33f91ed6..33f91ed6 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_italic.png
+++ b/resources/src/mediawiki.toolbar/images/fa/button_italic.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_link.png b/resources/src/mediawiki.toolbar/images/fa/button_link.png
index 76b939e6..76b939e6 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_link.png
+++ b/resources/src/mediawiki.toolbar/images/fa/button_link.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_nowiki.png b/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png
index 743ea61b..743ea61b 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_nowiki.png
+++ b/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/LICENSE b/resources/src/mediawiki.toolbar/images/ksh/LICENSE
index 47ecfe4e..47ecfe4e 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/LICENSE
+++ b/resources/src/mediawiki.toolbar/images/ksh/LICENSE
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/button_italic.png b/resources/src/mediawiki.toolbar/images/ksh/button_italic.png
index 15496c08..15496c08 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/button_italic.png
+++ b/resources/src/mediawiki.toolbar/images/ksh/button_italic.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/LICENSE b/resources/src/mediawiki.toolbar/images/ru/LICENSE
index bedcec66..bedcec66 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/LICENSE
+++ b/resources/src/mediawiki.toolbar/images/ru/LICENSE
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_bold.png b/resources/src/mediawiki.toolbar/images/ru/button_bold.png
index eae30d98..eae30d98 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_bold.png
+++ b/resources/src/mediawiki.toolbar/images/ru/button_bold.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_italic.png b/resources/src/mediawiki.toolbar/images/ru/button_italic.png
index b958d220..b958d220 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_italic.png
+++ b/resources/src/mediawiki.toolbar/images/ru/button_italic.png
Binary files differ
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_link.png b/resources/src/mediawiki.toolbar/images/ru/button_link.png
index 12ad3731..12ad3731 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_link.png
+++ b/resources/src/mediawiki.toolbar/images/ru/button_link.png
Binary files differ
diff --git a/resources/src/mediawiki.toolbar/toolbar.js b/resources/src/mediawiki.toolbar/toolbar.js
new file mode 100644
index 00000000..70d54ce3
--- /dev/null
+++ b/resources/src/mediawiki.toolbar/toolbar.js
@@ -0,0 +1,202 @@
+/**
+ * Interface for the classic edit toolbar.
+ *
+ * @class mw.toolbar
+ * @singleton
+ */
+( function ( mw, $ ) {
+ var toolbar, isReady, $toolbar, queue, slice, $currentFocused;
+
+ /**
+ * Internal helper that does the actual insertion of the button into the toolbar.
+ *
+ * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
+ * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
+ *
+ * @private
+ *
+ * @param {Object} button Object with the following properties.
+ * You are required to provide *either* the `onClick` parameter, or the three parameters
+ * `tagOpen`, `tagClose` and `sampleText`, but not both (they're mutually exclusive).
+ * @param {string} [button.imageFile] Image to use for the button.
+ * @param {string} button.speedTip Tooltip displayed when user mouses over the button.
+ * @param {Function} [button.onClick] Function to be executed when the button is clicked.
+ * @param {string} [button.tagOpen]
+ * @param {string} [button.tagClose]
+ * @param {string} [button.sampleText] Alternative to `onClick`. `tagOpen`, `tagClose` and
+ * `sampleText` together provide the markup that should be inserted into page text at
+ * current cursor position.
+ * @param {string} [button.imageId] `id` attribute of the button HTML element. Can be
+ * used to define the image with CSS if it's not provided as `imageFile`.
+ */
+ function insertButton( button, speedTip, tagOpen, tagClose, sampleText, imageId ) {
+ var $button;
+
+ // Backwards compatibility
+ if ( typeof button !== 'object' ) {
+ button = {
+ imageFile: button,
+ speedTip: speedTip,
+ tagOpen: tagOpen,
+ tagClose: tagClose,
+ sampleText: sampleText,
+ imageId: imageId
+ };
+ }
+
+ if ( button.imageFile ) {
+ $button = $( '<img>' ).attr( {
+ src: button.imageFile,
+ alt: button.speedTip,
+ title: button.speedTip,
+ id: button.imageId || undefined,
+ 'class': 'mw-toolbar-editbutton'
+ } );
+ } else {
+ $button = $( '<div>' ).attr( {
+ title: button.speedTip,
+ id: button.imageId || undefined,
+ 'class': 'mw-toolbar-editbutton'
+ } );
+ }
+
+ $button.click( function ( e ) {
+ if ( button.onClick !== undefined ) {
+ button.onClick( e );
+ } else {
+ toolbar.insertTags( button.tagOpen, button.tagClose, button.sampleText );
+ }
+
+ return false;
+ } );
+
+ $toolbar.append( $button );
+ }
+
+ isReady = false;
+ $toolbar = false;
+
+ /**
+ * @private
+ * @property {Array}
+ * Contains button objects (and for backwards compatibilty, it can
+ * also contains an arguments array for insertButton).
+ */
+ queue = [];
+ slice = queue.slice;
+
+ toolbar = {
+
+ /**
+ * Add buttons to the toolbar.
+ *
+ * Takes care of race conditions and time-based dependencies by placing buttons in a queue if
+ * this method is called before the toolbar is created.
+ *
+ * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
+ * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
+ *
+ * @inheritdoc #insertButton
+ */
+ addButton: function () {
+ if ( isReady ) {
+ insertButton.apply( toolbar, arguments );
+ } else {
+ // Convert arguments list to array
+ queue.push( slice.call( arguments ) );
+ }
+ },
+
+ /**
+ * Add multiple buttons to the toolbar (see also #addButton).
+ *
+ * Example usage:
+ *
+ * addButtons( [ { .. }, { .. }, { .. } ] );
+ * addButtons( { .. }, { .. } );
+ *
+ * @param {Object|Array...} [buttons] An array of button objects or the first
+ * button object in a list of variadic arguments.
+ */
+ addButtons: function ( buttons ) {
+ if ( !$.isArray( buttons ) ) {
+ buttons = slice.call( arguments );
+ }
+ if ( isReady ) {
+ $.each( buttons, function () {
+ insertButton( this );
+ } );
+ } else {
+ // Push each button into the queue
+ queue.push.apply( queue, buttons );
+ }
+ },
+
+ /**
+ * Apply tagOpen/tagClose to selection in currently focused textarea.
+ *
+ * Uses `sampleText` if selection is empty.
+ *
+ * @param {string} tagOpen
+ * @param {string} tagClose
+ * @param {string} sampleText
+ */
+ insertTags: function ( tagOpen, tagClose, sampleText ) {
+ if ( $currentFocused && $currentFocused.length ) {
+ $currentFocused.textSelection(
+ 'encapsulateSelection', {
+ pre: tagOpen,
+ peri: sampleText,
+ post: tagClose
+ }
+ );
+ }
+ }
+ };
+
+ // Legacy (for compatibility with the code previously in skins/common.edit.js)
+ mw.log.deprecate( window, 'addButton', toolbar.addButton, 'Use mw.toolbar.addButton instead.' );
+ mw.log.deprecate( window, 'insertTags', toolbar.insertTags, 'Use mw.toolbar.insertTags instead.' );
+
+ // For backwards compatibility. Used to be called from EditPage.php, maybe other places as well.
+ mw.log.deprecate( toolbar, 'init', $.noop );
+
+ // Expose API publicly
+ mw.toolbar = toolbar;
+
+ $( function () {
+ var i, button;
+
+ // Used to determine where to insert tags
+ $currentFocused = $( '#wpTextbox1' );
+
+ // Populate the selector cache for $toolbar
+ $toolbar = $( '#toolbar' );
+
+ for ( i = 0; i < queue.length; i++ ) {
+ button = queue[i];
+ if ( $.isArray( button ) ) {
+ // Forwarded arguments array from mw.toolbar.addButton
+ insertButton.apply( toolbar, button );
+ } else {
+ // Raw object from mw.toolbar.addButtons
+ insertButton( button );
+ }
+ }
+
+ // Clear queue
+ queue.length = 0;
+
+ // This causes further calls to addButton to go to insertion directly
+ // instead of to the queue.
+ // It is important that this is after the one and only loop through
+ // the queue
+ isReady = true;
+
+ // Apply to dynamically created textboxes as well as normal ones
+ $( document ).on( 'focus', 'textarea, input:text', function () {
+ $currentFocused = $( this );
+ } );
+ } );
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less b/resources/src/mediawiki.toolbar/toolbar.less
index d65b2842..d65b2842 100644
--- a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less
+++ b/resources/src/mediawiki.toolbar/toolbar.less
diff --git a/resources/src/mediawiki.ui/components/anchors.less b/resources/src/mediawiki.ui/components/anchors.less
index e1b258dd..f0fb7b95 100644
--- a/resources/src/mediawiki.ui/components/anchors.less
+++ b/resources/src/mediawiki.ui/components/anchors.less
@@ -3,13 +3,8 @@
@import "mediawiki.ui/mixins";
// Helpers
-.mw-ui-anchor( @mainColor ) {
- // Make all context classes take the main color in IE6
- .select-ie6-only& {
- &:link, &:visited, &:hover, &:focus, &:active {
- color: @mainColor;
- }
- }
+.mixin-mw-ui-anchor-styles( @mainColor ) {
+ color: @mainColor;
// Hover state
&:hover {
@@ -21,57 +16,65 @@
outline: none; // outline fix
}
- color: @mainColor;
-
// Quiet mode is gray at first
&.mw-ui-quiet {
- .mw-ui-anchor-quiet( @mainColor );
+ .mixin-mw-ui-anchor-styles-quiet( @mainColor );
}
}
-.mw-ui-anchor-quiet( @mainColor ) {
- color: @colorTextLight;
- text-decoration: none;
+/*
+Anchors
- &:hover {
- color: @mainColor;
- }
- &:focus, &:active {
- color: darken( @mainColor, @colorDarkenPercentage );
- }
-}
+The anchor base type can be applied to A elements when a basic context styling needs to be given to a link, without
+having to assign it as a button type. mw-ui-anchor only changes the text color, and should not be used in combination
+with other base classes, such as mw-ui-button.
-/*
-Text & Anchors
+Markup:
+<a href="#" class="mw-ui-anchor mw-ui-progressive">Progressive</a>
+<a href="#" class="mw-ui-anchor mw-ui-constructive">Constructive</a>
+<a href="#" class="mw-ui-anchor mw-ui-destructive">Destructive</a>
-Allows you to give text a context as to the type of action it is indicating.
+.mw-ui-quiet - Quiet until interaction.
-Styleguide 6.
+Styleguide 6.2.
*/
+// Setup compound anchor selectors (such as .mw-ui-anchor.mw-ui-progressive)
+.mw-ui-anchor {
+ &.mw-ui-progressive {
+ .mixin-mw-ui-anchor-styles( @colorProgressive );
+ }
+
+ &.mw-ui-constructive {
+ .mixin-mw-ui-anchor-styles( @colorConstructive );
+ }
+
+ &.mw-ui-destructive {
+ .mixin-mw-ui-anchor-styles( @colorDestructive );
+ }
+}
+
/*
-Guidelines
+Quiet anchors
-This context should only applied on elements without special behavior (DIV, SPAN, etc.), including A elements. These classes cannot be applied for styling purposes on other elements (such as form elements), except when used in combination with .mw-ui-button to alter a button context.
+Use quiet anchors when they are less important and alongside other progressive/destructive/progressive
+anchors. Use of quiet anchors is not recommended on mobile/tablet due to lack of hover state.
Markup:
-<a href=# class="mw-ui-progressive {$modifiers}">Progressive</a>
-<a href=# class="mw-ui-constructive {$modifiers}">Constructive</a>
-<a href=# class="mw-ui-destructive {$modifiers}">Destructive</a>
+<a href="#" class="mw-ui-anchor mw-ui-progressive mw-ui-quiet">Progressive</a>
+<a href="#" class="mw-ui-anchor mw-ui-constructive mw-ui-quiet">Constructive</a>
+<a href="#" class="mw-ui-anchor mw-ui-destructive mw-ui-quiet">Destructive</a>
-.mw-ui-quiet - Quiet until interaction.
-
-Styleguide 6.1.
+Styleguide 6.2.1.
*/
-.mw-ui-progressive {
- .mw-ui-anchor( @colorProgressive );
-}
-.mw-ui-constructive {
- .mw-ui-anchor( @colorConstructive );
-}
-.mw-ui-destructive {
- .mw-ui-anchor( @colorDestructive );
-}
-.mw-ui-quiet {
- .mw-ui-anchor-quiet( @colorTextLight );
+.mixin-mw-ui-anchor-styles-quiet( @mainColor ) {
+ color: @colorTextLight;
+ text-decoration: none;
+
+ &:hover {
+ color: @mainColor;
+ }
+ &:focus, &:active {
+ color: darken( @mainColor, @colorDarkenPercentage );
+ }
}
diff --git a/resources/src/mediawiki.ui/components/buttons.less b/resources/src/mediawiki.ui/components/buttons.less
index f6a44fd4..f88f3ee6 100644
--- a/resources/src/mediawiki.ui/components/buttons.less
+++ b/resources/src/mediawiki.ui/components/buttons.less
@@ -17,6 +17,8 @@
// Neutral button styling
//
+// These are the main actions on the page/workflow. The page should have only one of progressive, constructive and desctructive buttons, the rest being quiet.
+//
// Markup:
// <div>
// <button class="mw-ui-button">.mw-ui-button</button>
@@ -47,7 +49,7 @@
// Container styling
.button-colors(#FFF);
border-radius: @borderRadius;
- min-width: 80px;
+ min-width: 4em;
// Ensure that buttons and inputs are nicely aligned when they have differing heights
vertical-align: middle;
@@ -165,8 +167,7 @@
// Destructive buttons
//
- // Use destructive buttons for actions which result in the destruction of data.
- // e.g. deleting a page.
+ // Use destructive buttons for actions that remove or limit, such as deleting a page or blocking a user.
// This should not be used for cancel buttons.
//
// Markup:
@@ -188,7 +189,8 @@
// Quiet buttons
//
- // Use quiet buttons when they are less important and alongisde other progressive/destructive/progressive buttons.
+ // Use quiet buttons when they are less important and alongside other constructive, 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>
@@ -257,6 +259,7 @@ a.mw-ui-button {
//
// Styleguide 2.2.
.mw-ui-button-group > * {
+ min-width: 48px;
border-radius: 0;
float: left;
diff --git a/resources/src/mediawiki.ui/components/checkbox.less b/resources/src/mediawiki.ui/components/checkbox.less
index e39646bc..4829f5f6 100644
--- a/resources/src/mediawiki.ui/components/checkbox.less
+++ b/resources/src/mediawiki.ui/components/checkbox.less
@@ -11,27 +11,42 @@
//
// Markup:
// <div class="mw-ui-checkbox">
-// <input type="checkbox" id="kss-example-5"><label for="kss-example-5">Standard checkbox</label>
+// <input type="checkbox" id="kss-example-3">
+// <label for="kss-example-3">Standard checkbox</label>
// </div>
// <div class="mw-ui-checkbox">
-// <input type="checkbox" id="kss-example-5-2" disabled><label for="kss-example-5-2">Disabled checkbox</label>
+// <input type="checkbox" id="kss-example-3-checked" checked>
+// <label for="kss-example-3-checked">Standard checked checkbox</label>
+// </div>
+// <div class="mw-ui-checkbox">
+// <input type="checkbox" id="kss-example-3-disabled" disabled>
+// <label for="kss-example-3-disabled">Disabled checkbox</label>
+// </div>
+// <div class="mw-ui-checkbox">
+// <input type="checkbox" id="kss-example-3-disabled-checked" disabled checked>
+// <label for="kss-example-3-disabled-checked">Disabled checked checkbox</label>
// </div>
//
-// Styleguide 5.
+// Styleguide 3.
.mw-ui-checkbox {
display: inline-block;
vertical-align: middle;
}
-@checkboxSize: 24px;
+@checkboxSize: 2em;
// We use the not selector to cancel out styling on IE 8 and below
-.mw-ui-checkbox:not(#noop) {
+// We also disable this styling on javascript disabled devices. This fixes the issue with
+// Opera Mini where checking/unchecking doesn't apply styling but potentially leaves other
+// more capable browsers with unstyled checkboxes.
+.client-js .mw-ui-checkbox:not(#noop) {
// Position relatively so we can make use of absolute pseudo elements
position: relative;
- line-height: @checkboxSize;
+ display: table;
* {
+ // reset font sizes (see bug 72727)
+ font: inherit;
vertical-align: middle;
}
@@ -42,59 +57,70 @@
// ensure the invisible checkbox takes up the required width
width: @checkboxSize;
height: @checkboxSize;
+ // This is needed for Firefox mobile (See bug 71750 to workaround default Firefox stylesheet)
+ max-width: none;
+ margin: 0;
+ margin-right: 0.4em;
+ display: table-cell;
- // the pseudo before element of the label after the checkbox now looks like a checkbox
& + label {
- cursor: pointer;
+ display: table-cell;
+ }
- &::before {
- content: '';
- position: absolute;
- left: 0;
- display: inline-block;
- border-radius: @borderRadius;
- margin-right: 18px;
- width: @checkboxSize;
- height: @checkboxSize;
- background-color: #fff;
- border: 1px solid grey;
- }
+ // the pseudo before element of the label after the checkbox now looks like a checkbox
+ & + label::before {
+ .transition( 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275) );
+ content: '';
+ cursor: pointer;
+ .box-sizing(border-box);
+ position: absolute;
+ left: 0;
+ border-radius: @borderRadius;
+ width: @checkboxSize;
+ height: @checkboxSize;
+ line-height: @checkboxSize;
+ background-color: #fff;
+ border: 1px solid @colorGray7;
+ // align the checkbox to middle of the text
+ top: 50%;
+ margin-top: -1em;
+ .background-image-svg('images/checked.svg', 'images/checked.png');
+ .background-size( @checkboxSize - 0.2em, @checkboxSize - 0.2em );
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-origin: border-box;
+ background-size: 0 0;
}
// when the input is checked, style the label pseudo before element that followed as a checked checkbox
- &:checked {
- + label {
- &::before {
- .background-image-svg('images/checked.svg', 'images/checked.png');
- background-repeat: no-repeat;
- background-position: center top;
- }
- }
+ &:checked + label::before {
+ background-size: 100% 100%;
+ }
+
+ &:active + label::before {
+ background-color: @colorGray13;
+ border-color: @colorGray13;
}
- @focusBottomBorderSize: 3px;
- &:active,
- &:focus {
- + label {
- &::after {
- content: '';
- position: absolute;
- width: @checkboxSize;
- height: @checkboxSize - @focusBottomBorderSize + 1; // offset by bottom border
- // offset from the checkbox by 1px to account for left border
- left: 1px;
- border-bottom: solid @focusBottomBorderSize lightgrey;
- }
- }
+ &:focus + label::before {
+ border-width: 2px;
}
- // disabled checked boxes have a gray background
- &:disabled + label {
+ &:focus:hover + label::before,
+ &:hover + label::before {
+ border-bottom-width: 3px;
+ }
+
+ // disabled checkboxes have a gray background
+ &:disabled + label::before {
cursor: default;
+ background-color: @colorGray14;
+ border-color: @colorGray14;
+ }
- &::before {
- background-color: lightgrey;
- }
+ // disabled and checked checkboxes have a white circle
+ &:disabled:checked + label::before {
+ .background-image-svg('images/checked_disabled.svg', 'images/checked_disabled.png');
}
}
}
diff --git a/resources/src/mediawiki.ui/components/forms.less b/resources/src/mediawiki.ui/components/forms.less
index 592a3098..dc49e202 100644
--- a/resources/src/mediawiki.ui/components/forms.less
+++ b/resources/src/mediawiki.ui/components/forms.less
@@ -15,7 +15,7 @@
// Forms
//
-// Styleguide 3.
+// Styleguide 5.
// VForm
//
@@ -34,7 +34,7 @@
// </div>
// </form>
//
-// Styleguide 3.1.
+// Styleguide 5.1.
.mw-ui-vform {
.box-sizing(border-box);
@@ -102,7 +102,7 @@
// </div>
// </form>
//
- // Styleguide 3.2.
+ // Styleguide 5.2.
.error,
.errorbox,
.warningbox,
@@ -153,14 +153,15 @@
// 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(); // mixins/forms.less
+ .agora-label-styling();
}
// 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>
+//
+// <label class="mw-ui-radio-label">
+// <input type="radio">The label text
+// </label>
.mw-ui-radio-label {
.agora-inline-label-styling();
}
diff --git a/resources/src/mediawiki.ui/components/icons.less b/resources/src/mediawiki.ui/components/icons.less
new file mode 100644
index 00000000..ad951b08
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/icons.less
@@ -0,0 +1,107 @@
+@import "mediawiki.mixins";
+
+// Variables
+@iconSize: 1.4em;
+@gutterWidth: 1em;
+
+// Mixins
+.mixin-mw-ui-icon-bgimage(@iconSvg, @iconPng) {
+ &.mw-ui-icon {
+ &:after,
+ &:before {
+ .background-image-svg(@iconSvg, @iconPng);
+ }
+ }
+}
+
+// Icons
+//
+// To use icons you must be using a browser that supports pseudo elements.
+// This includes support for IE8.
+// http://caniuse.com/#feat=css-gencontent
+//
+// For elements that are intended to have both an icon and text, browsers that
+// do not support pseudo-selectors will degrade to text-only.
+//
+// However, icon-only elements do not yet degrade to text-only elements in these
+// browsers.
+//
+// Styleguide 6.
+
+.mw-ui-icon {
+ position: relative;
+ min-height: @iconSize;
+ min-width: @iconSize;
+
+ // Standalone icons
+ //
+ // Markup:
+ // <div class="mw-ui-icon mw-ui-icon-element mw-ui-icon-ok">OK</div><br/>
+ // <div class="mw-ui-icon mw-ui-icon-element mw-ui-icon-ok mw-ui-button mw-ui-progressive">OK</div><br/>
+ // <button class="mw-ui-icon mw-ui-icon-ok mw-ui-icon-element mw-ui-button mw-ui-quiet" title="">Close</button>
+ //
+ // Styleguide 6.1.1.
+ &.mw-ui-icon-element {
+ @width: @iconSize + ( 2 * @gutterWidth );
+
+ text-indent: -999px;
+ overflow: hidden;
+ width: @width;
+ min-width: @width;
+ max-width: @width;
+ &:before {
+ left: 0;
+ right: 0;
+ position: absolute;
+ margin: 0 @gutterWidth;
+ }
+ }
+
+ &.mw-ui-icon-after:after,
+ &.mw-ui-icon-before:before,
+ &.mw-ui-icon-element:before {
+ background-position: 50% 50%;
+ float: left;
+ display: block;
+ background-repeat: no-repeat;
+ background-size: 100% auto;
+ min-height: @iconSize;
+ content: '';
+ }
+
+
+ // Icons with text
+ //
+ // Markup:
+ // <div class="mw-ui-icon mw-ui-icon-before mw-ui-icon-ok">OK</div>
+ // <div class="mw-ui-icon mw-ui-icon-before mw-ui-icon-ok mw-ui-progressive mw-ui-button">OK</div>
+ //
+ // Styleguide 6.1.2
+ &.mw-ui-icon-before {
+ &:before {
+ position: relative;
+ width: @iconSize;
+ margin-right: @gutterWidth;
+ }
+ }
+
+ // Icons with text before
+ //
+ // Markup:
+ // <div class="mw-ui-icon mw-ui-icon-after mw-ui-icon-ok mw-ui-progressive mw-ui-button">OK</div>
+ //
+ // Styleguide 6.1.3
+ &.mw-ui-icon-after {
+ &:after {
+ position: relative;
+ float: right;
+ width: @iconSize;
+ margin-left: @gutterWidth;
+ }
+ }
+}
+
+// Icons
+.mw-ui-icon-ok {
+ .mixin-mw-ui-icon-bgimage('images/ok.svg', 'images/ok.png');
+}
diff --git a/resources/src/mediawiki.ui/components/images/checked.svg b/resources/src/mediawiki.ui/components/images/checked.svg
index aea69db4..aca2b2b0 100644
--- a/resources/src/mediawiki.ui/components/images/checked.svg
+++ b/resources/src/mediawiki.ui/components/images/checked.svg
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M4 12l5 5 11-12" stroke="#00B78C" stroke-width="3" fill="none"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M4 12l5 5L20 5" stroke="#00B78C" stroke-width="3" fill="none"/></svg>
diff --git a/resources/src/mediawiki.ui/components/images/checked_disabled.png b/resources/src/mediawiki.ui/components/images/checked_disabled.png
new file mode 100644
index 00000000..523b880f
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/images/checked_disabled.png
Binary files differ
diff --git a/resources/src/mediawiki.ui/components/images/checked_disabled.svg b/resources/src/mediawiki.ui/components/images/checked_disabled.svg
new file mode 100644
index 00000000..ba4010ee
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/images/checked_disabled.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M4 12l5 5L20 5" stroke="#fff" stroke-width="3" fill="none"/></svg>
diff --git a/resources/src/mediawiki.ui/components/images/ok.png b/resources/src/mediawiki.ui/components/images/ok.png
new file mode 100644
index 00000000..1ea6aa2d
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/images/ok.png
Binary files differ
diff --git a/resources/src/mediawiki.ui/components/images/ok.svg b/resources/src/mediawiki.ui/components/images/ok.svg
new file mode 100644
index 00000000..a3d3058a
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/images/ok.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22"><path d="M18.125 1.813l-10.5 10.75-3.844-3.75L0 12.719l7.72 7.452L22 5.625z" fill="#f0f0f0"/></svg>
diff --git a/resources/src/mediawiki.ui/components/images/radio_checked.png b/resources/src/mediawiki.ui/components/images/radio_checked.png
new file mode 100644
index 00000000..d5735164
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/images/radio_checked.png
Binary files differ
diff --git a/resources/src/mediawiki.ui/components/images/radio_checked.svg b/resources/src/mediawiki.ui/components/images/radio_checked.svg
new file mode 100644
index 00000000..c8b9b625
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/images/radio_checked.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><circle fill="#00AF89" cx="12" cy="12" r="6"/></svg>
diff --git a/resources/src/mediawiki.ui/components/images/radio_disabled.png b/resources/src/mediawiki.ui/components/images/radio_disabled.png
new file mode 100644
index 00000000..945b3dde
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/images/radio_disabled.png
Binary files differ
diff --git a/resources/src/mediawiki.ui/components/images/radio_disabled.svg b/resources/src/mediawiki.ui/components/images/radio_disabled.svg
new file mode 100644
index 00000000..ec8ffe3e
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/images/radio_disabled.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><circle fill="#fff" cx="12" cy="12" r="6"/></svg>
diff --git a/resources/src/mediawiki.ui/components/inputs.less b/resources/src/mediawiki.ui/components/inputs.less
index 1da42a45..2f761312 100644
--- a/resources/src/mediawiki.ui/components/inputs.less
+++ b/resources/src/mediawiki.ui/components/inputs.less
@@ -9,7 +9,7 @@
font-style: italic;
font-weight: normal;
}
-// Inputs
+// Text inputs
//
// Apply the mw-ui-input class to input and textarea fields.
//
@@ -32,16 +32,14 @@
border: 1px solid @colorFieldBorder;
.box-sizing(border-box);
width: 100%;
- padding: .4em .3em .2em .6em;
+ padding: .3em .3em .3em .6em;
display: block;
vertical-align: middle;
border-radius: @borderRadius;
- // Override user agent stylesheet properties. Instead use parent element.
- color: inherit;
font-family: inherit;
font-size: inherit;
line-height: inherit;
- .transition(~"border linear .2s, box-shadow linear .2s");
+ .transition(~"border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1)");
// Placeholder text styling must be set individually for each browser @winter
&::-webkit-input-placeholder { // webkit
@@ -66,11 +64,17 @@
}
&:focus {
- box-shadow: inset .45em 0 0 @colorProgressive;
- border-color: @colorGrayDark;
+ box-shadow: inset 0 0 0 2px @colorProgressive;
+ // Color being used to match inset shadow, not semantic reasons
+ border-color: @colorProgressive;
// Remove focus glow on input[type="search"]
outline: 0;
}
+
+ &:disabled {
+ border-color: @colorGray14;
+ color: @colorGray12;
+ }
}
textarea.mw-ui-input {
@@ -83,7 +87,7 @@ textarea.mw-ui-input {
//
// Markup:
// <input class="mw-ui-input mw-ui-input-inline">
-// <button class="mw-ui-button mw-ui-constructive">go</button>
+// <button class="mw-ui-button mw-ui-constructive">Submit</button>
//
// Styleguide 1.2.
input[type="number"],
diff --git a/resources/src/mediawiki.ui/components/radio.less b/resources/src/mediawiki.ui/components/radio.less
new file mode 100644
index 00000000..1928699b
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/radio.less
@@ -0,0 +1,116 @@
+@import "mediawiki.mixins";
+@import "mediawiki.ui/variables";
+
+// Radio
+//
+// Styling radios in a way that works cross browser is a tricky problem to solve.
+// In MediaWiki UI put a radio and label inside a mw-ui-radio div.
+// This renders in all browsers except IE6-8 which do not support the :checked selector;
+// these are kept backwards-compatible using the :not(#noop) selector.
+// You should give the radio and label matching "id" and "for" attributes, respectively.
+//
+// Markup:
+// <div class="mw-ui-radio">
+// <input type="radio" id="kss-example-4" name="kss-example-4">
+// <label for="kss-example-4">Standard radio</label>
+// </div>
+// <div class="mw-ui-radio">
+// <input type="radio" id="kss-example-4-checked" name="kss-example-4" checked>
+// <label for="kss-example-4-checked">Standard checked radio</label>
+// </div>
+// <div class="mw-ui-radio">
+// <input type="radio" id="kss-example-4-disabled" name="kss-example-4-disabled" disabled>
+// <label for="kss-example-4-disabled">Disabled radio</label>
+// </div>
+// <div class="mw-ui-radio">
+// <input type="radio" id="kss-example-4-disabled-checked" name="kss-example-4-disabled" disabled checked>
+// <label for="kss-example-4-disabled-checked">Disabled checked radio</label>
+// </div>
+//
+// Styleguide 4.
+.mw-ui-radio {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+@radioSize: 2em;
+
+// We use the not selector to cancel out styling on IE 8 and below.
+// We also disable this styling on javascript disabled devices. This fixes the issue with
+// Opera Mini where checking/unchecking doesn't apply styling but potentially leaves other
+// more capable browsers with unstyled radio buttons.
+.client-js .mw-ui-radio:not(#noop) {
+ // Position relatively so we can make use of absolute pseudo elements
+ position: relative;
+ line-height: @radioSize;
+
+ * {
+ // reset font sizes (see bug 72727)
+ font: inherit;
+ vertical-align: middle;
+ }
+
+ input[type="radio"] {
+ // we hide the input element as instead we will style the label that follows
+ // we use opacity so that VoiceOver software can still identify it
+ opacity: 0;
+ // ensure the invisible radio takes up the required width
+ width: @radioSize;
+ height: @radioSize;
+ // This is needed for Firefox mobile (See bug 71750 to workaround default Firefox stylesheet)
+ max-width: none;
+ margin-right: 0.4em;
+
+ // the pseudo before element of the label after the radio now looks like a radio
+ & + label::before {
+ .transition( 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275) );
+ content: '';
+ cursor: pointer;
+ .box-sizing(border-box);
+ position: absolute;
+ left: 0;
+ border-radius: 100%;
+ width: @radioSize;
+ height: @radioSize;
+ background-color: #fff;
+ border: 1px solid @colorGray7;
+ .background-image-svg('images/radio_checked.svg', 'images/radio_checked.png');
+ .background-size( @radioSize, @radioSize );
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-origin: border-box;
+ background-size: 0 0;
+ }
+
+ // when the input is checked, style the label pseudo before element that followed as a checked radio
+ &:checked + label::before {
+ background-size: 100% 100%;
+ }
+
+ &:active + label::before {
+ background-color: @colorGray13;
+ border-color: @colorGray13;
+ }
+
+ &:focus + label::before {
+ border-width: 2px;
+ }
+
+ &:focus:hover + label::before,
+ &:hover + label::before {
+ border-bottom-width: 3px;
+ }
+
+ // disabled radios have a gray background
+ &:disabled + label::before {
+ cursor: default;
+ background-color: @colorGray14;
+ border-color: @colorGray14;
+ }
+
+ // disabled and checked radios have a white circle
+ &:disabled:checked + label::before {
+ .background-image-svg('images/radio_disabled.svg', 'images/radio_disabled.png');
+ }
+ }
+}
diff --git a/resources/src/mediawiki.ui/components/text.less b/resources/src/mediawiki.ui/components/text.less
new file mode 100644
index 00000000..500d42c4
--- /dev/null
+++ b/resources/src/mediawiki.ui/components/text.less
@@ -0,0 +1,40 @@
+@import "mediawiki.mixins";
+@import "mediawiki.ui/variables";
+@import "mediawiki.ui/mixins";
+
+/*
+Text & Anchors
+
+Allows you to give text a context as to the type of action it is indicating.
+
+Styleguide 6.
+*/
+
+/*
+Text
+
+Context classes may be used on elements with only plain-text content with the mw-ui-text base. When the context classes
+are used on interactive and block-level elements, the appropriate alternative base type classes should also be used. For
+example, mw-ui-anchor with A, or mw-ui-button with buttons.
+
+Markup:
+<span class="mw-ui-text mw-ui-progressive">Progressive</span>
+<span class="mw-ui-text mw-ui-constructive">Constructive</span>
+<span class="mw-ui-text mw-ui-destructive">Destructive</span>
+
+Styleguide 6.1.
+*/
+
+.mw-ui-text {
+ // The selector order is like this on purpose; IE6 ignores the second selector,
+ // so we don't want to accidentally apply this color on all mw-ui-CONTEXT classes
+ .mw-ui-progressive& {
+ color: @colorProgressive;
+ }
+ .mw-ui-constructive& {
+ color: @colorConstructive;
+ }
+ .mw-ui-destructive& {
+ color: @colorDestructive;
+ }
+} \ No newline at end of file
diff --git a/resources/src/mediawiki/images/help.png b/resources/src/mediawiki/images/help.png
new file mode 100644
index 00000000..99105822
--- /dev/null
+++ b/resources/src/mediawiki/images/help.png
Binary files differ
diff --git a/resources/src/mediawiki/images/help.svg b/resources/src/mediawiki/images/help.svg
new file mode 100644
index 00000000..3662cb58
--- /dev/null
+++ b/resources/src/mediawiki/images/help.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g><path d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/><g><path d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/><path d="M11 16h2v2h-2z"/></g></g></svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.svg b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.svg
new file mode 100644
index 00000000..b34fb382
--- /dev/null
+++ b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-ltr.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="30"
+ height="30"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(0.41333074,0,0,0.41333074,-183.39876,-197.95599)"
+ id="layer1">
+ <g
+ transform="translate(455.60433,484.94177)"
+ id="g3163">
+ <path
+ d="M 0,0.03543307 0,60.519684 43.192915,30.259842 z"
+ id="path3165"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ <path
+ d="m 43.157481,0.03543307 5.633859,0 0,60.48425093 -5.633859,0 z"
+ id="path3167"
+ style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ </g>
+ </g>
+</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.svg b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.svg
new file mode 100644
index 00000000..529e8d0f
--- /dev/null
+++ b/resources/src/mediawiki/images/pager-arrow-disabled-fastforward-rtl.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="30"
+ height="30"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(0.4132798,0,0,0.4132798,-87.72955,-233.35372)"
+ id="layer1">
+ <path
+ d="m 272.96237,570.69005 0,60.4894 -43.19393,-30.2447 z"
+ id="path3023-7"
+ style="fill:#cccccc;fill-opacity:1;stroke:none" />
+ <rect
+ width="5.6406202"
+ height="60.489399"
+ x="-229.82111"
+ y="570.68774"
+ transform="scale(-1,1)"
+ id="rect3799-9"
+ style="color:#000000;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.svg b/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.svg
new file mode 100644
index 00000000..9fbcf20e
--- /dev/null
+++ b/resources/src/mediawiki/images/pager-arrow-disabled-forward-ltr.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="30"
+ height="30"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(0.41329555,0,0,0.41329555,-111.35036,-135.3531)"
+ id="layer1">
+ <path
+ d="m 284.11732,333.54605 0,60.4894 43.19395,-30.2447 z"
+ id="path3023-7-2"
+ style="fill:#cccccc;fill-opacity:1;stroke:none" />
+ </g>
+</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.svg b/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.svg
new file mode 100644
index 00000000..3130f109
--- /dev/null
+++ b/resources/src/mediawiki/images/pager-arrow-disabled-forward-rtl.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="30"
+ height="30"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(0.41329555,0,0,0.41329555,-139.69062,-163.69336)"
+ id="layer1">
+ <path
+ d="m 395.88269,402.11748 0,60.4894 -43.19395,-30.2447 z"
+ id="path3023-7-2-8"
+ style="fill:#cccccc;fill-opacity:1;stroke:none" />
+ </g>
+</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.svg b/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.svg
new file mode 100644
index 00000000..57df4c0d
--- /dev/null
+++ b/resources/src/mediawiki/images/pager-arrow-fastforward-ltr.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="30"
+ height="30"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(0.41327999,0,0,0.41327999,-98.356798,-226.26904)"
+ id="layer1">
+ <path
+ d="m 249.89477,553.5472 0,60.4894 43.19391,-30.2447 z"
+ id="path3023"
+ style="fill:#0000aa;fill-opacity:1;stroke:none" />
+ <rect
+ width="5.6406202"
+ height="60.489399"
+ x="293.03604"
+ y="553.54492"
+ id="rect3799"
+ style="color:#000000;fill:#0000aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.svg b/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.svg
new file mode 100644
index 00000000..dbb473bb
--- /dev/null
+++ b/resources/src/mediawiki/images/pager-arrow-fastforward-rtl.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ width="30"
+ height="30"
+ id="svg2"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="pager-arrow-fastforward-rtl.svg">
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1366"
+ inkscape:window-height="692"
+ id="namedview8"
+ showgrid="false"
+ inkscape:zoom="17.4"
+ inkscape:cx="7.0114943"
+ inkscape:cy="15"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2" />
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(0.07055556,0,0,0.07055556,-9.1581596,-2.7587241)"
+ id="layer1">
+ <path
+ d="m 485.26916,74.546776 0,354.317014 -253.00859,-177.15851 z"
+ id="path3023-2"
+ style="fill:#0000aa;fill-opacity:1;stroke:none"
+ inkscape:connector-curvature="0" />
+ <rect
+ width="33.039963"
+ height="354.31699"
+ x="-232.56898"
+ y="74.533081"
+ transform="scale(-1,1)"
+ id="rect3799-6"
+ style="color:#000000;fill:#0000aa;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-forward-ltr.svg b/resources/src/mediawiki/images/pager-arrow-forward-ltr.svg
new file mode 100644
index 00000000..1ebf9c15
--- /dev/null
+++ b/resources/src/mediawiki/images/pager-arrow-forward-ltr.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="30"
+ height="30"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(0.41329555,0,0,0.41329555,-162.12666,-110.55537)"
+ id="layer1">
+ <path
+ d="m 406.97447,273.54605 0,60.4894 43.19391,-30.2447 z"
+ id="path3023-3-9"
+ style="fill:#0000aa;fill-opacity:1;stroke:none" />
+ </g>
+</svg>
diff --git a/resources/src/mediawiki/images/pager-arrow-forward-rtl.svg b/resources/src/mediawiki/images/pager-arrow-forward-rtl.svg
new file mode 100644
index 00000000..b494409a
--- /dev/null
+++ b/resources/src/mediawiki/images/pager-arrow-forward-rtl.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.1"
+ width="30"
+ height="30"
+ id="svg2">
+ <defs
+ id="defs4" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(0.41329555,0,0,0.41329555,-78.28671,-153.06577)"
+ id="layer1">
+ <path
+ d="m 247.31124,376.4032 0,60.4894 -43.19391,-30.2447 z"
+ id="path3023-3"
+ style="fill:#0000aa;fill-opacity:1;stroke:none" />
+ </g>
+</svg>
diff --git a/resources/src/mediawiki/mediawiki.Title.js b/resources/src/mediawiki/mediawiki.Title.js
index 7ced42fe..3efb7eca 100644
--- a/resources/src/mediawiki/mediawiki.Title.js
+++ b/resources/src/mediawiki/mediawiki.Title.js
@@ -8,7 +8,7 @@
/**
* @class mw.Title
*
- * Parse titles into an object struture. Note that when using the constructor
+ * Parse titles into an object structure. Note that when using the constructor
* directly, passing invalid titles will result in an exception. Use #newFromText to use the
* logic directly and get null for invalid titles which is easier to work with.
*
@@ -119,7 +119,7 @@
rSplit = /^(.+?)_*:_*(.*)$/,
- // See Title.php#getTitleInvalidRegex
+ // See MediaWikiTitleCodec.php#getTitleInvalidRegex
rInvalid = new RegExp(
'[^' + mw.config.get( 'wgLegalTitleChars' ) + ']' +
// URL percent encoding sequences interfere with the ability
@@ -508,7 +508,7 @@
normalizeExtension = function ( extension ) {
// Remove only trailing space (that is removed by MW anyway)
- extension = extension.toLowerCase().replace(/\s*$/, '');
+ extension = extension.toLowerCase().replace( /\s*$/, '' );
return extension;
};
@@ -731,7 +731,10 @@
set: function ( titles, state ) {
titles = $.isArray( titles ) ? titles : [titles];
state = state === undefined ? true : !!state;
- var pages = this.pages, i, len = titles.length;
+ var i,
+ pages = this.pages,
+ len = titles.length;
+
for ( i = 0; i < len; i++ ) {
pages[ titles[i] ] = state;
}
diff --git a/resources/src/mediawiki/mediawiki.Uri.js b/resources/src/mediawiki/mediawiki.Uri.js
index 55663128..abfb2790 100644
--- a/resources/src/mediawiki/mediawiki.Uri.js
+++ b/resources/src/mediawiki/mediawiki.Uri.js
@@ -127,15 +127,29 @@
*/
/**
- * A factory method to create a variation of mw.Uri with a different default location (for
- * relative URLs, including protocol-relative URLs). Used so the library is still testable &
- * purely functional.
+ * A factory method to create a Uri class with a default location to resolve relative URLs
+ * against (including protocol-relative URLs).
*
* @method
+ * @param {string|Function} documentLocation A full url, or function returning one.
+ * If passed a function, the return value may change over time and this will be honoured. (T74334)
* @member mw
*/
mw.UriRelative = function ( documentLocation ) {
- var defaultUri;
+ var getDefaultUri = ( function () {
+ // Cache
+ var href, uri;
+
+ return function () {
+ var hrefCur = typeof documentLocation === 'string' ? documentLocation : documentLocation();
+ if ( href === hrefCur ) {
+ return uri;
+ }
+ href = hrefCur;
+ uri = new Uri( href );
+ return uri;
+ };
+ }() );
/**
* @class mw.Uri
@@ -147,8 +161,8 @@
* @param {Object|string} [uri] URI string, or an Object with appropriate properties (especially
* another URI object to clone). Object must have non-blank `protocol`, `host`, and `path`
* properties. If omitted (or set to `undefined`, `null` or empty string), then an object
- * will be created for the default `uri` of this constructor (`document.location` for
- * mw.Uri, other values for other instances -- see mw.UriRelative for details).
+ * will be created for the default `uri` of this constructor (`location.href` for mw.Uri,
+ * other values for other instances -- see mw.UriRelative for details).
* @param {Object|boolean} [options] Object with options, or (backwards compatibility) a boolean
* for strictMode
* @param {boolean} [options.strictMode=false] Trigger strict mode parsing of the url.
@@ -156,6 +170,9 @@
* override each other (`true`) or automagically convert them to an array (`false`).
*/
function Uri( uri, options ) {
+ var prop,
+ defaultUri = getDefaultUri();
+
options = typeof options === 'object' ? options : { strictMode: !!options };
options = $.extend( {
strictMode: false,
@@ -167,7 +184,7 @@
this.parse( uri, options );
} else if ( typeof uri === 'object' ) {
// Copy data over from existing URI object
- for ( var prop in uri ) {
+ for ( prop in uri ) {
// Only copy direct properties, not inherited ones
if ( uri.hasOwnProperty( prop ) ) {
// Deep copy object properties
@@ -390,14 +407,12 @@
}
};
- defaultUri = new Uri( documentLocation );
-
return Uri;
};
- // If we are running in a browser, inject the current document location (for relative URLs).
- if ( document && document.location && document.location.href ) {
- mw.Uri = mw.UriRelative( document.location.href );
- }
+ // Default to the current browsing location (for relative URLs).
+ mw.Uri = mw.UriRelative( function () {
+ return location.href;
+ } );
}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.apihelp.css b/resources/src/mediawiki/mediawiki.apihelp.css
new file mode 100644
index 00000000..d1272323
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.apihelp.css
@@ -0,0 +1,86 @@
+.apihelp-header {
+ clear: both;
+ margin-bottom: 0.1em;
+}
+
+div.apihelp-linktrail {
+ font-size: smaller;
+}
+
+.apihelp-block {
+ margin-top: 0.5em;
+}
+
+.apihelp-block-head {
+ font-weight: bold;
+}
+
+.apihelp-flags {
+ font-size: smaller;
+ float: right;
+ border: 1px solid black;
+ padding: 0.25em;
+ width: 20em;
+}
+
+.apihelp-deprecated, .apihelp-flag-deprecated,
+.apihelp-flag-internal strong {
+ font-weight: bold;
+ color: red;
+}
+
+.apihelp-empty {
+ color: #888;
+}
+
+.apihelp-help-urls ul {
+ list-style-image: none;
+ list-style-type: none;
+ margin-left: 0;
+}
+
+.apihelp-parameters dl,
+.apihelp-examples dl,
+.apihelp-permissions dl {
+ margin-left: 2em;
+}
+
+.apihelp-parameters dt {
+ float: left;
+ clear: left;
+ min-width: 10em;
+ white-space: nowrap;
+ line-height: 1.5em;
+}
+
+.apihelp-parameters dt:after {
+ content: ':\A0'
+}
+
+.apihelp-parameters dd {
+ margin: 0 0 0.5em 10em;
+ line-height: 1.5em;
+}
+
+.apihelp-parameters dd p:first-child {
+ margin-top: 0;
+}
+
+.apihelp-parameters dd.info {
+ margin-left: 12em;
+ text-indent: -2em;
+}
+
+.apihelp-examples dt {
+ font-weight: normal;
+}
+
+.api-main-links {
+ text-align: center;
+}
+.api-main-links ul:before {
+ content: '[';
+}
+.api-main-links ul:after {
+ content: ']';
+}
diff --git a/resources/src/mediawiki/mediawiki.apipretty.css b/resources/src/mediawiki/mediawiki.apipretty.css
new file mode 100644
index 00000000..fe5e634d
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.apipretty.css
@@ -0,0 +1,11 @@
+h1.firstHeading {
+ display: none;
+}
+
+.api-pretty-header {
+ font-size: small;
+}
+
+.api-pretty-content {
+ white-space: pre-wrap;
+}
diff --git a/resources/src/mediawiki/mediawiki.confirmCloseWindow.js b/resources/src/mediawiki/mediawiki.confirmCloseWindow.js
new file mode 100644
index 00000000..7fc5c424
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.confirmCloseWindow.js
@@ -0,0 +1,68 @@
+( function ( mw, $ ) {
+ /**
+ * @method confirmCloseWindow
+ * @member mw
+ *
+ * Prevent the closing of a window with a confirm message (the onbeforeunload event seems to
+ * work in most browsers.)
+ *
+ * This supersedes any previous onbeforeunload handler. If there was a handler before, it is
+ * restored when you execute the returned function.
+ *
+ * var allowCloseWindow = mw.confirmCloseWindow();
+ * // ... do stuff that can't be interrupted ...
+ * allowCloseWindow();
+ *
+ * @param {Object} [options]
+ * @param {string} [options.namespace] Namespace for the event registration
+ * @param {string} [options.message]
+ * @param {string} options.message.return The string message to show in the confirm dialog.
+ * @param {Function} [options.test]
+ * @param {boolean} [options.test.return=true] Whether to show the dialog to the user.
+ * @return {Function} Execute this when you want to allow the user to close the window
+ */
+ mw.confirmCloseWindow = function ( options ) {
+ var savedUnloadHandler,
+ mainEventName = 'beforeunload',
+ showEventName = 'pageshow';
+
+ options = $.extend( {
+ message: mw.message( 'mwe-prevent-close' ).text(),
+ test: function () { return true; }
+ }, options );
+
+ if ( options.namespace ) {
+ mainEventName += '.' + options.namespace;
+ showEventName += '.' + options.namespace;
+ }
+
+ $( window ).on( mainEventName, function () {
+ if ( options.test() ) {
+ // remove the handler while the alert is showing - otherwise breaks caching in Firefox (3?).
+ // but if they continue working on this page, immediately re-register this handler
+ savedUnloadHandler = window.onbeforeunload;
+ window.onbeforeunload = null;
+ setTimeout( function () {
+ window.onbeforeunload = savedUnloadHandler;
+ }, 1 );
+
+ // show an alert with this message
+ if ( $.isFunction( options.message ) ) {
+ return options.message();
+ } else {
+ return options.message;
+ }
+ }
+ } ).on( showEventName, function () {
+ // Re-add onbeforeunload handler
+ if ( !window.onbeforeunload && savedUnloadHandler ) {
+ window.onbeforeunload = savedUnloadHandler;
+ }
+ } );
+
+ // return the function they can use to stop this
+ return function () {
+ $( window ).off( mainEventName + ' ' + showEventName );
+ };
+ };
+} )( mediaWiki, jQuery );
diff --git a/resources/src/mediawiki/mediawiki.content.json.css b/resources/src/mediawiki/mediawiki.content.json.css
index d93e291e..9e20264f 100644
--- a/resources/src/mediawiki/mediawiki.content.json.css
+++ b/resources/src/mediawiki/mediawiki.content.json.css
@@ -18,19 +18,25 @@
padding: 0.5em 1em;
}
-.mw-json td {
- background-color: #eee;
- font-style: italic;
-}
-
-.mw-json .value {
+.mw-json .value,
+.mw-json-single-value {
background-color: #dcfae3;
font-family: monospace, monospace;
white-space: pre-wrap;
}
+.mw-json-single-value {
+ background-color: #eee;
+}
+
+.mw-json-empty {
+ background-color: #fff;
+ font-style: italic;
+}
+
.mw-json tr {
margin-bottom: 0.5em;
+ background-color: #eee;
}
.mw-json th {
diff --git a/resources/src/mediawiki/mediawiki.cookie.js b/resources/src/mediawiki/mediawiki.cookie.js
index 6f9f0abb..8f091e4d 100644
--- a/resources/src/mediawiki/mediawiki.cookie.js
+++ b/resources/src/mediawiki/mediawiki.cookie.js
@@ -27,13 +27,14 @@
* @param {string|null} value Value of cookie. If `value` is `null` then this method will
* instead remove a cookie by name of `key`.
* @param {Object|Date} [options] Options object, or expiry date
- * @param {Date|null} [options.expires=wgCookieExpiration] The expiry date of the cookie.
+ * @param {Date|number|null} [options.expires] The expiry date of the cookie, or lifetime in seconds.
*
- * Default cookie expiration is based on `wgCookieExpiration`. If `wgCookieExpiration` is
- * 0, a session cookie is set (expires when the browser is closed). For non-zero values of
- * `wgCookieExpiration`, the cookie expires `wgCookieExpiration` seconds from now.
+ * If `options.expires` is null, then a session cookie is set.
+ *
+ * By default cookie expiration is based on `wgCookieExpiration`. Similar to `WebResponse`
+ * in PHP, we set a session cookie if `wgCookieExpiration` is 0. And for non-zero values
+ * it is interpreted as lifetime in seconds.
*
- * If options.expires is null, then a session cookie is set.
* @param {string} [options.prefix=wgCookiePrefix] The prefix of the key
* @param {string} [options.domain=wgCookieDomain] The domain attribute of the cookie
* @param {string} [options.path=wgCookiePath] The path attribute of the cookie
@@ -69,16 +70,20 @@
options = $.extend( defaultOptions, options );
}
- // $.cookie makes session cookies when expiry is omitted,
- // however our default is to expire wgCookieExpiration seconds from now.
- // Note: If wgCookieExpiration is 0, that is considered a special value indicating
+ // Default to using wgCookieExpiration (lifetime in seconds).
+ // If wgCookieExpiration is 0, that is considered a special value indicating
// all cookies should be session cookies by default.
if ( options.expires === undefined && config.wgCookieExpiration !== 0 ) {
date = new Date();
date.setTime( Number( date ) + ( config.wgCookieExpiration * 1000 ) );
options.expires = date;
+ } else if ( typeof options.expires === 'number' ) {
+ // Lifetime in seconds
+ date = new Date();
+ date.setTime( Number( date ) + ( options.expires * 1000 ) );
+ options.expires = date;
} else if ( options.expires === null ) {
- // $.cookie makes a session cookie when expires is omitted
+ // $.cookie makes a session cookie when options.expires is omitted
delete options.expires;
}
@@ -123,4 +128,4 @@
}
};
-} ( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.debug.js b/resources/src/mediawiki/mediawiki.debug.js
index 4935984f..bdff99f7 100644
--- a/resources/src/mediawiki/mediawiki.debug.js
+++ b/resources/src/mediawiki/mediawiki.debug.js
@@ -170,8 +170,6 @@
paneTriggerBitDiv( 'includes', 'PHP includes', this.data.includes.length );
- paneTriggerBitDiv( 'profile', 'Profile', this.data.profile.length );
-
gitInfo = '';
if ( this.data.gitRevision !== false ) {
gitInfo = '(' + this.data.gitRevision.slice( 0, 7 ) + ')';
@@ -211,8 +209,7 @@
querylist: this.buildQueryTable(),
debuglog: this.buildDebugLogTable(),
request: this.buildRequestPane(),
- includes: this.buildIncludesPane(),
- profile: this.buildProfilePane()
+ includes: this.buildIncludesPane()
};
for ( id in panes ) {
@@ -381,10 +378,6 @@
}
return $table;
- },
-
- buildProfilePane: function () {
- return mw.Debug.profile.init();
}
};
diff --git a/resources/src/mediawiki/mediawiki.debug.profile.css b/resources/src/mediawiki/mediawiki.debug.profile.css
deleted file mode 100644
index ab27da9d..00000000
--- a/resources/src/mediawiki/mediawiki.debug.profile.css
+++ /dev/null
@@ -1,45 +0,0 @@
-.mw-debug-profile-tipsy .tipsy-inner {
- /* undo max-width from vector on .tipsy-inner */
- max-width: none;
- /* needed for some browsers to provide space for the scrollbar without wrapping text */
- min-width: 100%;
- max-height: 150px;
- overflow-y: auto;
-}
-
-.mw-debug-profile-underline {
- stroke-width: 1;
- stroke: #dfdfdf;
-}
-
-.mw-debug-profile-period {
- fill: red;
-}
-
-/* connecting line between endpoints on long events */
-.mw-debug-profile-period line {
- stroke: red;
- stroke-width: 2;
-}
-
-.mw-debug-profile-tipsy,
-.mw-debug-profile-timeline text {
- color: #444;
- fill: #444;
- /* using em's causes the two locations to have different sizes */
- font-size: 12px;
- font-family: sans-serif;
-}
-
-.mw-debug-profile-meta,
-.mw-debug-profile-timeline tspan {
- /* using em's causes the two locations to have different sizes */
- font-size: 10px;
-}
-
-.mw-debug-profile-no-data {
- text-align: center;
- padding-top: 5em;
- font-weight: bold;
- font-size: 1.2em;
-}
diff --git a/resources/src/mediawiki/mediawiki.debug.profile.js b/resources/src/mediawiki/mediawiki.debug.profile.js
deleted file mode 100644
index 04f7acd0..00000000
--- a/resources/src/mediawiki/mediawiki.debug.profile.js
+++ /dev/null
@@ -1,556 +0,0 @@
-/*!
- * JavaScript for the debug toolbar profiler, enabled through $wgDebugToolbar
- * and StartProfiler.php.
- *
- * @author Erik Bernhardson
- * @since 1.23
- */
-
-( function ( mw, $ ) {
- 'use strict';
-
- /**
- * @singleton
- * @class mw.Debug.profile
- */
- var profile = mw.Debug.profile = {
- /**
- * Object containing data for the debug toolbar
- *
- * @property ProfileData
- */
- data: null,
-
- /**
- * @property DOMElement
- */
- container: null,
-
- /**
- * Initializes the profiling pane.
- */
- init: function ( data, width, mergeThresholdPx, dropThresholdPx ) {
- data = data || mw.config.get( 'debugInfo' ).profile;
- profile.width = width || $(window).width() - 20;
- // merge events from same pixel(some events are very granular)
- mergeThresholdPx = mergeThresholdPx || 2;
- // only drop events if requested
- dropThresholdPx = dropThresholdPx || 0;
-
- if (
- !Array.prototype.map ||
- !Array.prototype.reduce ||
- !Array.prototype.filter ||
- !document.createElementNS ||
- !document.createElementNS.bind
- ) {
- profile.container = profile.buildRequiresBrowserFeatures();
- } else if ( data.length === 0 ) {
- profile.container = profile.buildNoData();
- } else {
- // Initialize createSvgElement (now that we know we have
- // document.createElementNS and bind)
- this.createSvgElement = document.createElementNS.bind( document, 'http://www.w3.org/2000/svg' );
-
- // generate a flyout
- profile.data = new ProfileData( data, profile.width, mergeThresholdPx, dropThresholdPx );
- // draw it
- profile.container = profile.buildSvg( profile.container );
- profile.attachFlyout();
- }
-
- return profile.container;
- },
-
- buildRequiresBrowserFeatures: function () {
- return $( '<div>' )
- .text( 'Certain browser features, including parts of ECMAScript 5 and document.createElementNS, are required for the profile visualization.' )
- .get( 0 );
- },
-
- buildNoData: function () {
- return $( '<div>' ).addClass( 'mw-debug-profile-no-data' )
- .text( 'No events recorded, ensure profiling is enabled in StartProfiler.php.' )
- .get( 0 );
- },
-
- /**
- * Creates DOM nodes appropriately namespaced for SVG.
- * Initialized in init after checking support
- *
- * @param string tag to create
- * @return DOMElement
- */
- createSvgElement: null,
-
- /**
- * @param DOMElement|undefined
- */
- buildSvg: function ( node ) {
- var container, group, i, g,
- timespan = profile.data.timespan,
- gapPerEvent = 38,
- space = 10.5,
- currentHeight = space,
- totalHeight = 0;
-
- profile.ratio = ( profile.width - space * 2 ) / ( timespan.end - timespan.start );
- totalHeight += gapPerEvent * profile.data.groups.length;
-
- if ( node ) {
- $( node ).empty();
- } else {
- node = profile.createSvgElement( 'svg' );
- node.setAttribute( 'version', '1.2' );
- node.setAttribute( 'baseProfile', 'tiny' );
- }
- node.style.height = totalHeight;
- node.style.width = profile.width;
-
- // use a container that can be transformed
- container = profile.createSvgElement( 'g' );
- node.appendChild( container );
-
- for ( i = 0; i < profile.data.groups.length; i++ ) {
- group = profile.data.groups[i];
- g = profile.buildTimeline( group );
-
- g.setAttribute( 'transform', 'translate( 0 ' + currentHeight + ' )' );
- container.appendChild( g );
-
- currentHeight += gapPerEvent;
- }
-
- return node;
- },
-
- /**
- * @param Object group of periods to transform into graphics
- */
- buildTimeline: function ( group ) {
- var text, tspan, line, i,
- sum = group.timespan.sum,
- ms = ' ~ ' + ( sum < 1 ? sum.toFixed( 2 ) : sum.toFixed( 0 ) ) + ' ms',
- timeline = profile.createSvgElement( 'g' );
-
- timeline.setAttribute( 'class', 'mw-debug-profile-timeline' );
-
- // draw label
- text = profile.createSvgElement( 'text' );
- text.setAttribute( 'x', profile.xCoord( group.timespan.start ) );
- text.setAttribute( 'y', 0 );
- text.textContent = group.name;
- timeline.appendChild( text );
-
- // draw metadata
- tspan = profile.createSvgElement( 'tspan' );
- tspan.textContent = ms;
- text.appendChild( tspan );
-
- // draw timeline periods
- for ( i = 0; i < group.periods.length; i++ ) {
- timeline.appendChild( profile.buildPeriod( group.periods[i] ) );
- }
-
- // full-width line under each timeline
- line = profile.createSvgElement( 'line' );
- line.setAttribute( 'class', 'mw-debug-profile-underline' );
- line.setAttribute( 'x1', 0 );
- line.setAttribute( 'y1', 28 );
- line.setAttribute( 'x2', profile.width );
- line.setAttribute( 'y2', 28 );
- timeline.appendChild( line );
-
- return timeline;
- },
-
- /**
- * @param Object period to transform into graphics
- */
- buildPeriod: function ( period ) {
- var node,
- head = profile.xCoord( period.start ),
- tail = profile.xCoord( period.end ),
- g = profile.createSvgElement( 'g' );
-
- g.setAttribute( 'class', 'mw-debug-profile-period' );
- $( g ).data( 'period', period );
-
- if ( head + 16 > tail ) {
- node = profile.createSvgElement( 'rect' );
- node.setAttribute( 'x', head );
- node.setAttribute( 'y', 8 );
- node.setAttribute( 'width', 2 );
- node.setAttribute( 'height', 9 );
- g.appendChild( node );
-
- node = profile.createSvgElement( 'rect' );
- node.setAttribute( 'x', head );
- node.setAttribute( 'y', 8 );
- node.setAttribute( 'width', ( period.end - period.start ) * profile.ratio || 2 );
- node.setAttribute( 'height', 6 );
- g.appendChild( node );
- } else {
- node = profile.createSvgElement( 'polygon' );
- node.setAttribute( 'points', pointList( [
- [ head, 8 ],
- [ head, 19 ],
- [ head + 8, 8 ],
- [ head, 8]
- ] ) );
- g.appendChild( node );
-
- node = profile.createSvgElement( 'polygon' );
- node.setAttribute( 'points', pointList( [
- [ tail, 8 ],
- [ tail, 19 ],
- [ tail - 8, 8 ],
- [ tail, 8 ]
- ] ) );
- g.appendChild( node );
-
- node = profile.createSvgElement( 'line' );
- node.setAttribute( 'x1', head );
- node.setAttribute( 'y1', 9 );
- node.setAttribute( 'x2', tail );
- node.setAttribute( 'y2', 9 );
- g.appendChild( node );
- }
-
- return g;
- },
-
- /**
- * @param Object
- */
- buildFlyout: function ( period ) {
- var contained, sum, ms, mem, i,
- node = $( '<div>' );
-
- for ( i = 0; i < period.contained.length; i++ ) {
- contained = period.contained[i];
- sum = contained.end - contained.start;
- ms = '' + ( sum < 1 ? sum.toFixed( 2 ) : sum.toFixed( 0 ) ) + ' ms';
- mem = formatBytes( contained.memory );
-
- $( '<div>' ).text( contained.source.name )
- .append( $( '<span>' ).text( ' ~ ' + ms + ' / ' + mem ).addClass( 'mw-debug-profile-meta' ) )
- .appendTo( node );
- }
-
- return node;
- },
-
- /**
- * Attach a hover flyout to all .mw-debug-profile-period groups.
- */
- attachFlyout: function () {
- // for some reason addClass and removeClass from jQuery
- // arn't working on svg elements in chrome <= 33.0 (possibly more)
- var $container = $( profile.container ),
- addClass = function ( node, value ) {
- var current = node.getAttribute( 'class' ),
- list = current ? current.split( ' ' ) : false,
- idx = list ? list.indexOf( value ) : -1;
-
- if ( idx === -1 ) {
- node.setAttribute( 'class', current ? ( current + ' ' + value ) : value );
- }
- },
- removeClass = function ( node, value ) {
- var current = node.getAttribute( 'class' ),
- list = current ? current.split( ' ' ) : false,
- idx = list ? list.indexOf( value ) : -1;
-
- if ( idx !== -1 ) {
- list.splice( idx, 1 );
- node.setAttribute( 'class', list.join( ' ' ) );
- }
- },
- // hide all tipsy flyouts
- hide = function () {
- $container.find( '.mw-debug-profile-period.tipsy-visible' )
- .each( function () {
- removeClass( this, 'tipsy-visible' );
- $( this ).tipsy( 'hide' );
- } );
- };
-
- $container.find( '.mw-debug-profile-period' ).tipsy( {
- fade: true,
- gravity: function () {
- return $.fn.tipsy.autoNS.call( this ) + $.fn.tipsy.autoWE.call( this );
- },
- className: 'mw-debug-profile-tipsy',
- center: false,
- html: true,
- trigger: 'manual',
- title: function () {
- return profile.buildFlyout( $( this ).data( 'period' ) ).html();
- }
- } ).on( 'mouseenter', function () {
- hide();
- addClass( this, 'tipsy-visible' );
- $( this ).tipsy( 'show' );
- } );
-
- $container.on( 'mouseleave', function ( event ) {
- var $from = $( event.relatedTarget ),
- $to = $( event.target );
- // only close the tipsy if we are not
- if ( $from.closest( '.tipsy' ).length === 0 &&
- $to.closest( '.tipsy' ).length === 0 &&
- $to.get( 0 ).namespaceURI !== 'http://www.w4.org/2000/svg'
- ) {
- hide();
- }
- } ).on( 'click', function () {
- // convenience method for closing
- hide();
- } );
- },
-
- /**
- * @return number the x co-ordinate for the specified timestamp
- */
- xCoord: function ( msTimestamp ) {
- return ( msTimestamp - profile.data.timespan.start ) * profile.ratio;
- }
- };
-
- function ProfileData( data, width, mergeThresholdPx, dropThresholdPx ) {
- // validate input data
- this.data = data.map( function ( event ) {
- event.periods = event.periods.filter( function ( period ) {
- return period.start && period.end
- && period.start < period.end
- // period start must be a reasonable ms timestamp
- && period.start > 1000000;
- } );
- return event;
- } ).filter( function ( event ) {
- return event.name && event.periods.length > 0;
- } );
-
- // start and end time of the data
- this.timespan = this.data.reduce( function ( result, event ) {
- return event.periods.reduce( periodMinMax, result );
- }, periodMinMax.initial() );
-
- // transform input data
- this.groups = this.collate( width, mergeThresholdPx, dropThresholdPx );
-
- return this;
- }
-
- /**
- * There are too many unique events to display a line for each,
- * so this does a basic grouping.
- */
- ProfileData.groupOf = function ( label ) {
- var pos, prefix = 'Profile section ended by close(): ';
- if ( label.indexOf( prefix ) === 0 ) {
- label = label.slice( prefix.length );
- }
-
- pos = [ '::', ':', '-' ].reduce( function ( result, separator ) {
- var pos = label.indexOf( separator );
- if ( pos === -1 ) {
- return result;
- } else if ( result === -1 ) {
- return pos;
- } else {
- return Math.min( result, pos );
- }
- }, -1 );
-
- if ( pos === -1 ) {
- return label;
- } else {
- return label.slice( 0, pos );
- }
- };
-
- /**
- * @return Array list of objects with `name` and `events` keys
- */
- ProfileData.groupEvents = function ( events ) {
- var group, i,
- groups = {};
-
- // Group events together
- for ( i = events.length - 1; i >= 0; i-- ) {
- group = ProfileData.groupOf( events[i].name );
- if ( groups[group] ) {
- groups[group].push( events[i] );
- } else {
- groups[group] = [events[i]];
- }
- }
-
- // Return an array of groups
- return Object.keys( groups ).map( function ( group ) {
- return {
- name: group,
- events: groups[group]
- };
- } );
- };
-
- ProfileData.periodSorter = function ( a, b ) {
- if ( a.start === b.start ) {
- return a.end - b.end;
- }
- return a.start - b.start;
- };
-
- ProfileData.genMergePeriodReducer = function ( mergeThresholdMs ) {
- return function ( result, period ) {
- if ( result.length === 0 ) {
- // period is first result
- return [{
- start: period.start,
- end: period.end,
- contained: [period]
- }];
- }
- var last = result[result.length - 1];
- if ( period.end < last.end ) {
- // end is contained within previous
- result[result.length - 1].contained.push( period );
- } else if ( period.start - mergeThresholdMs < last.end ) {
- // neighbors within merging distance
- result[result.length - 1].end = period.end;
- result[result.length - 1].contained.push( period );
- } else {
- // period is next result
- result.push( {
- start: period.start,
- end: period.end,
- contained: [period]
- } );
- }
- return result;
- };
- };
-
- /**
- * Collect all periods from the grouped events and apply merge and
- * drop transformations
- */
- ProfileData.extractPeriods = function ( events, mergeThresholdMs, dropThresholdMs ) {
- // collect the periods from all events
- return events.reduce( function ( result, event ) {
- if ( !event.periods.length ) {
- return result;
- }
- result.push.apply( result, event.periods.map( function ( period ) {
- // maintain link from period to event
- period.source = event;
- return period;
- } ) );
- return result;
- }, [] )
- // sort combined periods
- .sort( ProfileData.periodSorter )
- // Apply merge threshold. Original periods
- // are maintained in the `contained` property
- .reduce( ProfileData.genMergePeriodReducer( mergeThresholdMs ), [] )
- // Apply drop threshold
- .filter( function ( period ) {
- return period.end - period.start > dropThresholdMs;
- } );
- };
-
- /**
- * runs a callback on all periods in the group. Only valid after
- * groups.periods[0..n].contained are populated. This runs against
- * un-transformed data and is better suited to summing or other
- * stat collection
- */
- ProfileData.reducePeriods = function ( group, callback, result ) {
- return group.periods.reduce( function ( result, period ) {
- return period.contained.reduce( callback, result );
- }, result );
- };
-
- /**
- * Transforms this.data grouping by labels, merging neighboring
- * events in the groups, and drops events and groups below the
- * display threshold. Groups are returned sorted by starting time.
- */
- ProfileData.prototype.collate = function ( width, mergeThresholdPx, dropThresholdPx ) {
- // ms to pixel ratio
- var ratio = ( this.timespan.end - this.timespan.start ) / width,
- // transform thresholds to ms
- mergeThresholdMs = mergeThresholdPx * ratio,
- dropThresholdMs = dropThresholdPx * ratio;
-
- return ProfileData.groupEvents( this.data )
- // generate data about the grouped events
- .map( function ( group ) {
- // Cleaned periods from all events
- group.periods = ProfileData.extractPeriods( group.events, mergeThresholdMs, dropThresholdMs );
- // min and max timestamp per group
- group.timespan = ProfileData.reducePeriods( group, periodMinMax, periodMinMax.initial() );
- // ms from first call to end of last call
- group.timespan.length = group.timespan.end - group.timespan.start;
- // collect the un-transformed periods
- group.timespan.sum = ProfileData.reducePeriods( group, function ( result, period ) {
- result.push( period );
- return result;
- }, [] )
- // sort by start time
- .sort( ProfileData.periodSorter )
- // merge overlapping
- .reduce( ProfileData.genMergePeriodReducer( 0 ), [] )
- // sum
- .reduce( function ( result, period ) {
- return result + period.end - period.start;
- }, 0 );
-
- return group;
- }, this )
- // remove groups that have had all their periods filtered
- .filter( function ( group ) {
- return group.periods.length > 0;
- } )
- // sort events by first start
- .sort( function ( a, b ) {
- return ProfileData.periodSorter( a.timespan, b.timespan );
- } );
- };
-
- // reducer to find edges of period array
- function periodMinMax( result, period ) {
- if ( period.start < result.start ) {
- result.start = period.start;
- }
- if ( period.end > result.end ) {
- result.end = period.end;
- }
- return result;
- }
-
- periodMinMax.initial = function () {
- return { start: Number.POSITIVE_INFINITY, end: Number.NEGATIVE_INFINITY };
- };
-
- function formatBytes( bytes ) {
- var i, sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
- if ( bytes === 0 ) {
- return '0 Bytes';
- }
- i = parseInt( Math.floor( Math.log( bytes ) / Math.log( 1024 ) ), 10 );
- return Math.round( bytes / Math.pow( 1024, i ), 2 ) + ' ' + sizes[i];
- }
-
- // turns a 2d array into a point list for svg
- // polygon points attribute
- // ex: [[1,2],[3,4],[4,2]] = '1,2 3,4 4,2'
- function pointList( pairs ) {
- return pairs.map( function ( pair ) {
- return pair.join( ',' );
- } ).join( ' ' );
- }
-}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.errorLogger.js b/resources/src/mediawiki/mediawiki.errorLogger.js
new file mode 100644
index 00000000..9f4f19dd
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.errorLogger.js
@@ -0,0 +1,49 @@
+/**
+ * Try to catch errors in modules which don't do their own error handling.
+ * @class mw.errorLogger
+ * @singleton
+ */
+( function ( mw ) {
+ 'use strict';
+
+ mw.errorLogger = {
+ /**
+ * Fired via mw.track when an error is not handled by local code and is caught by the
+ * window.onerror handler.
+ *
+ * @event global_error
+ * @param {string} errorMessage Error errorMessage.
+ * @param {string} url URL where error was raised.
+ * @param {number} lineNumber Line number where error was raised.
+ * @param {number} [columnNumber] Line number where error was raised. Not all browsers
+ * support this.
+ * @param {Error|Mixed} [errorObject] The error object. Typically an instance of Error, but anything
+ * (even a primitive value) passed to a throw clause will end up here.
+ */
+
+ /**
+ * Install a window.onerror handler that will report via mw.track, while preserving
+ * any previous handler.
+ * @param {Object} window
+ */
+ installGlobalHandler: function ( window ) {
+ // We will preserve the return value of the previous handler. window.onerror works the
+ // 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; };
+
+ /**
+ * Dumb window.onerror handler which forwards the errors via mw.track.
+ * @fires global_error
+ */
+ window.onerror = function ( errorMessage, url, lineNumber, columnNumber, errorObject ) {
+ mw.track( 'global.error', { errorMessage: errorMessage, url: url,
+ lineNumber: lineNumber, columnNumber: columnNumber, errorObject: errorObject } );
+ return oldHandler.apply( this, arguments );
+ };
+ }
+ };
+
+ mw.errorLogger.installGlobalHandler( window );
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki/mediawiki.feedback.css b/resources/src/mediawiki/mediawiki.feedback.css
index 6bd47bb2..f2859db3 100644
--- a/resources/src/mediawiki/mediawiki.feedback.css
+++ b/resources/src/mediawiki/mediawiki.feedback.css
@@ -7,3 +7,16 @@
width: 18px;
height: 18px;
}
+
+.mw-feedbackDialog-welcome-message,
+.mw-feedbackDialog-feedback-terms {
+ line-height: 1.2em;
+}
+
+.mw-feedbackDialog-feedback-form {
+ margin-top: 1em;
+}
+
+.mw-feedbackDialog-feedback-termsofuse {
+ margin-left: 2.5em;
+}
diff --git a/resources/src/mediawiki/mediawiki.feedback.js b/resources/src/mediawiki/mediawiki.feedback.js
index 1c0d8332..d9401001 100644
--- a/resources/src/mediawiki/mediawiki.feedback.js
+++ b/resources/src/mediawiki/mediawiki.feedback.js
@@ -3,8 +3,11 @@
*
* @author Ryan Kaldari, 2010
* @author Neil Kandalgaonkar, 2010-11
+ * @author Moriel Schottlender, 2015
* @since 1.19
*/
+/*jshint es3:false */
+/*global OO*/
( function ( mw, $ ) {
/**
* This is a way of getting simple feedback from users. It's useful
@@ -32,289 +35,469 @@
*
* @class
* @constructor
- * @param {Object} [options]
- * @param {mw.Api} [options.api] if omitted, will just create a standard API
- * @param {mw.Title} [options.title="Feedback"] The title of the page where you collect
- * feedback.
- * @param {string} [options.dialogTitleMessageKey="feedback-submit"] Message key for the
- * title of the dialog box
- * @param {string} [options.bugsLink="//bugzilla.wikimedia.org/enter_bug.cgi"] URL where
- * bugs can be posted
- * @param {mw.Uri|string} [options.bugsListLink="//bugzilla.wikimedia.org/query.cgi"]
- * URL where bugs can be listed
+ * @param {Object} [config] Configuration object
+ * @cfg {mw.Title} [title="Feedback"] The title of the page where you collect
+ * feedback.
+ * @cfg {string} [dialogTitleMessageKey="feedback-dialog-title"] Message key for the
+ * title of the dialog box
+ * @cfg {mw.Uri|string} [bugsLink="//phabricator.wikimedia.org/maniphest/task/create/"] URL where
+ * bugs can be posted
+ * @cfg {mw.Uri|string} [bugsListLink="//phabricator.wikimedia.org/maniphest/query/advanced"] URL
+ * where bugs can be listed
+ * @cfg {boolean} [showUseragentCheckbox=false] Show a Useragent agreement checkbox as part of the form.
+ * @cfg {boolean} [useragentCheckboxMandatory=false] Make the Useragent checkbox mandatory.
+ * @cfg {string|jQuery} [useragentCheckboxMessage] Supply a custom message for the useragent checkbox.
+ * defaults to the message 'feedback-terms'.
*/
- mw.Feedback = function ( options ) {
- if ( options === undefined ) {
- options = {};
- }
+ mw.Feedback = function MwFeedback( config ) {
+ config = config || {};
- if ( options.api === undefined ) {
- options.api = new mw.Api();
- }
+ this.dialogTitleMessageKey = config.dialogTitleMessageKey || 'feedback-dialog-title';
- if ( options.title === undefined ) {
- options.title = new mw.Title( 'Feedback' );
- }
+ // Feedback page title
+ this.feedbackPageTitle = config.title || new mw.Title( 'Feedback' );
- if ( options.dialogTitleMessageKey === undefined ) {
- options.dialogTitleMessageKey = 'feedback-submit';
- }
+ this.messagePosterPromise = mw.messagePoster.factory.create( this.feedbackPageTitle );
- if ( options.bugsLink === undefined ) {
- options.bugsLink = '//bugzilla.wikimedia.org/enter_bug.cgi';
- }
+ // Links
+ this.bugsTaskSubmissionLink = config.bugsLink || '//phabricator.wikimedia.org/maniphest/task/create/';
+ this.bugsTaskListLink = config.bugsListLink || '//phabricator.wikimedia.org/maniphest/query/advanced';
- if ( options.bugsListLink === undefined ) {
- options.bugsListLink = '//bugzilla.wikimedia.org/query.cgi';
- }
+ // Terms of use
+ this.useragentCheckboxShow = !!config.showUseragentCheckbox;
+ this.useragentCheckboxMandatory = !!config.useragentCheckboxMandatory;
+ this.useragentCheckboxMessage = config.useragentCheckboxMessage ||
+ $( '<p>' ).append( mw.msg( 'feedback-terms' ) );
- $.extend( this, options );
- this.setup();
+ // Message dialog
+ this.thankYouDialog = new OO.ui.MessageDialog();
};
- mw.Feedback.prototype = {
- /**
- * Sets up interface
- */
- setup: function () {
- var $feedbackPageLink,
- $bugNoteLink,
- $bugsListLink,
- fb = this;
-
- $feedbackPageLink = $( '<a>' )
- .attr( {
- href: fb.title.getUrl(),
- target: '_blank'
- } )
- .css( {
- whiteSpace: 'nowrap'
- } );
+ /* Initialize */
+ OO.initClass( mw.Feedback );
- $bugNoteLink = $( '<a>' ).attr( { href: '#' } ).click( function () {
- fb.displayBugs();
- } );
-
- $bugsListLink = $( '<a>' ).attr( {
- href: fb.bugsListLink,
- target: '_blank'
- } );
-
- // TODO: Use a stylesheet instead of these inline styles
- this.$dialog =
- $( '<div style="position: relative;"></div>' ).append(
- $( '<div class="feedback-mode feedback-form"></div>' ).append(
- $( '<small>' ).append(
- $( '<p>' ).msg(
- 'feedback-bugornote',
- $bugNoteLink,
- fb.title.getNameText(),
- $feedbackPageLink.clone()
- )
- ),
- $( '<div style="margin-top: 1em;"></div>' )
- .msg( 'feedback-subject' )
- .append(
- $( '<br>' ),
- $( '<input type="text" class="feedback-subject" name="subject" maxlength="60" style="width: 100%; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;"/>' )
- ),
- $( '<div style="margin-top: 0.4em;"></div>' )
- .msg( 'feedback-message' )
- .append(
- $( '<br>' ),
- $( '<textarea name="message" class="feedback-message" rows="5" cols="60"></textarea>' )
- )
- ),
- $( '<div class="feedback-mode feedback-bugs"></div>' ).append(
- $( '<p>' ).msg( 'feedback-bugcheck', $bugsListLink )
- ),
- $( '<div class="feedback-mode feedback-submitting" style="text-align: center; margin: 3em 0;"></div>' )
- .msg( 'feedback-adding' )
- .append(
- $( '<br>' ),
- $( '<span class="feedback-spinner"></span>' )
- ),
- $( '<div class="feedback-mode feedback-thanks" style="text-align: center; margin:1em"></div>' ).msg(
- 'feedback-thanks', fb.title.getNameText(), $feedbackPageLink.clone()
+ /* Static Properties */
+ mw.Feedback.static.windowManager = null;
+ mw.Feedback.static.dialog = null;
+
+ /* Methods */
+
+ /**
+ * Respond to dialog submit event. If the information was
+ * submitted, either successfully or with an error, open
+ * a MessageDialog to thank the user.
+ * @param {string} [status] A status of the end of operation
+ * of the main feedback dialog. Empty if the dialog was
+ * dismissed with no action or the user followed the button
+ * to the external task reporting site.
+ */
+ mw.Feedback.prototype.onDialogSubmit = function ( status ) {
+ var dialogConfig = {};
+ switch ( status ) {
+ case 'submitted':
+ dialogConfig = {
+ title: mw.msg( 'feedback-thanks-title' ),
+ message: $( '<span>' ).append(
+ mw.message(
+ 'feedback-thanks',
+ this.feedbackPageTitle.getNameText(),
+ $( '<a>' )
+ .attr( {
+ target: '_blank',
+ href: this.feedbackPageTitle.getUrl()
+ } )
+ ).parse()
),
- $( '<div class="feedback-mode feedback-error" style="position: relative;"></div>' ).append(
- $( '<div class="feedback-error-msg style="color: #990000; margin-top: 0.4em;"></div>' )
- )
- );
+ actions: [
+ {
+ action: 'accept',
+ label: mw.msg( 'feedback-close' ),
+ flags: 'primary'
+ }
+ ]
+ };
+ break;
+ case 'error1':
+ case 'error2':
+ case 'error3':
+ case 'error4':
+ dialogConfig = {
+ title: mw.msg( 'feedback-error-title' ),
+ message: mw.msg( 'feedback-' + status ),
+ actions: [
+ {
+ action: 'accept',
+ label: mw.msg( 'feedback-close' ),
+ flags: 'primary'
+ }
+ ]
+ };
+ break;
+ }
- this.$dialog.dialog( {
- width: 500,
- autoOpen: false,
- title: mw.message( this.dialogTitleMessageKey ).escaped(),
- modal: true,
- buttons: fb.buttons
- } );
+ // Show the message dialog
+ if ( !$.isEmptyObject( dialogConfig ) ) {
+ this.constructor.static.windowManager.openWindow(
+ this.thankYouDialog,
+ dialogConfig
+ );
+ }
+ };
- this.subjectInput = this.$dialog.find( 'input.feedback-subject' ).get( 0 );
- this.messageInput = this.$dialog.find( 'textarea.feedback-message' ).get( 0 );
- },
+ /**
+ * Modify the display form, and then open it, focusing interface on the subject.
+ *
+ * @param {Object} [contents] Prefilled contents for the feedback form.
+ * @param {string} [contents.subject] The subject of the feedback, as plaintext
+ * @param {string} [contents.message] The content of the feedback, as wikitext
+ */
+ mw.Feedback.prototype.launch = function ( contents ) {
+ // Dialog
+ if ( !this.constructor.static.dialog ) {
+ this.constructor.static.dialog = new mw.Feedback.Dialog();
+ this.constructor.static.dialog.connect( this, { submit: 'onDialogSubmit' } );
+ }
+ if ( !this.constructor.static.windowManager ) {
+ this.constructor.static.windowManager = new OO.ui.WindowManager();
+ this.constructor.static.windowManager.addWindows( [
+ this.constructor.static.dialog,
+ this.thankYouDialog
+ ] );
+ $( 'body' )
+ .append( this.constructor.static.windowManager.$element );
+ }
+ // Open the dialog
+ this.constructor.static.windowManager.openWindow(
+ this.constructor.static.dialog,
+ {
+ title: mw.msg( this.dialogTitleMessageKey ),
+ settings: {
+ messagePosterPromise: this.messagePosterPromise,
+ title: this.feedbackPageTitle,
+ dialogTitleMessageKey: this.dialogTitleMessageKey,
+ bugsTaskSubmissionLink: this.bugsTaskSubmissionLink,
+ bugsTaskListLink: this.bugsTaskListLink,
+ useragentCheckbox: {
+ show: this.useragentCheckboxShow,
+ mandatory: this.useragentCheckboxMandatory,
+ message: this.useragentCheckboxMessage
+ }
+ },
+ contents: contents
+ }
+ );
+ };
- /**
- * Displays a section of the dialog.
- *
- * @param {"form"|"bugs"|"submitting"|"thanks"|"error"} s
- * The section of the dialog to show.
- */
- display: function ( s ) {
- // Hide the buttons
- this.$dialog.dialog( { buttons: {} } );
- // Hide everything
- this.$dialog.find( '.feedback-mode' ).hide();
- // Show the desired div
- this.$dialog.find( '.feedback-' + s ).show();
- },
+ /**
+ * mw.Feedback Dialog
+ *
+ * @class
+ * @extends OO.ui.ProcessDialog
+ *
+ * @constructor
+ * @param {Object} config Configuration object
+ */
+ mw.Feedback.Dialog = function mwFeedbackDialog( config ) {
+ // Parent constructor
+ mw.Feedback.Dialog.super.call( this, config );
+
+ this.status = '';
+ this.feedbackPageTitle = null;
+ // Initialize
+ this.$element.addClass( 'mwFeedback-Dialog' );
+ };
- /**
- * Display the submitting section.
- */
- displaySubmitting: function () {
- this.display( 'submitting' );
+ OO.inheritClass( mw.Feedback.Dialog, OO.ui.ProcessDialog );
+
+ /* Static properties */
+ mw.Feedback.Dialog.static.name = 'mwFeedbackDialog';
+ mw.Feedback.Dialog.static.title = mw.msg( 'feedback-dialog-title' );
+ mw.Feedback.Dialog.static.size = 'medium';
+ mw.Feedback.Dialog.static.actions = [
+ {
+ action: 'submit',
+ label: mw.msg( 'feedback-submit' ),
+ flags: [ 'primary', 'constructive' ]
},
-
- /**
- * Display the bugs section.
- */
- displayBugs: function () {
- var fb = this,
- bugsButtons = {};
-
- this.display( 'bugs' );
- bugsButtons[ mw.msg( 'feedback-bugnew' ) ] = function () {
- window.open( fb.bugsLink, '_blank' );
- };
- bugsButtons[ mw.msg( 'feedback-cancel' ) ] = function () {
- fb.cancel();
- };
- this.$dialog.dialog( {
- buttons: bugsButtons
- } );
+ {
+ action: 'external',
+ label: mw.msg( 'feedback-external-bug-report-button' ),
+ flags: 'constructive'
},
+ {
+ action: 'cancel',
+ label: mw.msg( 'feedback-cancel' ),
+ flags: 'safe'
+ }
+ ];
- /**
- * Display the thanks section.
- */
- displayThanks: function () {
- var fb = this,
- closeButton = {};
-
- this.display( 'thanks' );
- closeButton[ mw.msg( 'feedback-close' ) ] = function () {
- fb.$dialog.dialog( 'close' );
- };
- this.$dialog.dialog( {
- buttons: closeButton
- } );
- },
+ /**
+ * @inheritdoc
+ */
+ mw.Feedback.Dialog.prototype.initialize = function () {
+ var feedbackSubjectFieldLayout, feedbackMessageFieldLayout,
+ feedbackFieldsetLayout, termsOfUseLabel;
+
+ // Parent method
+ mw.Feedback.Dialog.super.prototype.initialize.call( this );
+
+ this.feedbackPanel = new OO.ui.PanelLayout( {
+ scrollable: false,
+ expanded: false,
+ padded: true
+ } );
+
+ this.$spinner = $( '<div>' )
+ .addClass( 'feedback-spinner' );
+
+ // Feedback form
+ this.feedbackMessageLabel = new OO.ui.LabelWidget( {
+ classes: [ 'mw-feedbackDialog-welcome-message' ]
+ } );
+ this.feedbackSubjectInput = new OO.ui.TextInputWidget( {
+ multiline: false
+ } );
+ this.feedbackMessageInput = new OO.ui.TextInputWidget( {
+ autosize: true,
+ multiline: true
+ } );
+ feedbackSubjectFieldLayout = new OO.ui.FieldLayout( this.feedbackSubjectInput, {
+ label: mw.msg( 'feedback-subject' )
+ } );
+ feedbackMessageFieldLayout = new OO.ui.FieldLayout( this.feedbackMessageInput, {
+ label: mw.msg( 'feedback-message' )
+ } );
+ feedbackFieldsetLayout = new OO.ui.FieldsetLayout( {
+ items: [ feedbackSubjectFieldLayout, feedbackMessageFieldLayout ],
+ classes: [ 'mw-feedbackDialog-feedback-form' ]
+ } );
+
+ // Useragent terms of use
+ this.useragentCheckbox = new OO.ui.CheckboxInputWidget();
+ this.useragentFieldLayout = new OO.ui.FieldLayout( this.useragentCheckbox, {
+ classes: [ 'mw-feedbackDialog-feedback-terms' ],
+ align: 'inline'
+ } );
+
+ termsOfUseLabel = new OO.ui.LabelWidget( {
+ classes: [ 'mw-feedbackDialog-feedback-termsofuse' ],
+ label: $( '<p>' ).append( mw.msg( 'feedback-termsofuse' ) )
+ } );
+
+ this.feedbackPanel.$element.append(
+ this.feedbackMessageLabel.$element,
+ feedbackFieldsetLayout.$element,
+ this.useragentFieldLayout.$element,
+ termsOfUseLabel.$element
+ );
+
+ // Events
+ this.feedbackSubjectInput.connect( this, { change: 'validateFeedbackForm' } );
+ this.feedbackMessageInput.connect( this, { change: 'validateFeedbackForm' } );
+ this.feedbackMessageInput.connect( this, { change: 'updateSize' } );
+ this.useragentCheckbox.connect( this, { change: 'validateFeedbackForm' } );
+
+ this.$body.append( this.feedbackPanel.$element );
+ };
- /**
- * Display the feedback form
- * @param {Object} [contents] Prefilled contents for the feedback form.
- * @param {string} [contents.subject] The subject of the feedback
- * @param {string} [contents.message] The content of the feedback
- */
- displayForm: function ( contents ) {
- var fb = this,
- formButtons = {};
-
- this.subjectInput.value = ( contents && contents.subject ) ? contents.subject : '';
- this.messageInput.value = ( contents && contents.message ) ? contents.message : '';
-
- this.display( 'form' );
-
- // Set up buttons for dialog box. We have to do it the hard way since the json keys are localized
- formButtons[ mw.msg( 'feedback-submit' ) ] = function () {
- fb.submit();
- };
- formButtons[ mw.msg( 'feedback-cancel' ) ] = function () {
- fb.cancel();
- };
- this.$dialog.dialog( { buttons: formButtons } ); // put the buttons back
- },
+ /**
+ * Validate the feedback form
+ */
+ mw.Feedback.Dialog.prototype.validateFeedbackForm = function () {
+ var isValid = (
+ (
+ !this.useragentMandatory ||
+ this.useragentCheckbox.isSelected()
+ ) &&
+ (
+ !!this.feedbackMessageInput.getValue() ||
+ !!this.feedbackSubjectInput.getValue()
+ )
+ );
+
+ this.actions.setAbilities( { submit: isValid } );
+ };
- /**
- * Display an error on the form.
- *
- * @param {string} message Should be a valid message key.
- */
- displayError: function ( message ) {
- var fb = this,
- closeButton = {};
-
- this.display( 'error' );
- this.$dialog.find( '.feedback-error-msg' ).msg( message );
- closeButton[ mw.msg( 'feedback-close' ) ] = function () {
- fb.$dialog.dialog( 'close' );
- };
- this.$dialog.dialog( { buttons: closeButton } );
- },
+ /**
+ * @inheritdoc
+ */
+ mw.Feedback.Dialog.prototype.getBodyHeight = function () {
+ return this.feedbackPanel.$element.outerHeight( true );
+ };
- /**
- * Close the feedback form.
- */
- cancel: function () {
- this.$dialog.dialog( 'close' );
- },
+ /**
+ * @inheritdoc
+ */
+ mw.Feedback.Dialog.prototype.getSetupProcess = function ( data ) {
+ return mw.Feedback.Dialog.super.prototype.getSetupProcess.call( this, data )
+ .next( function () {
+ var plainMsg, parsedMsg,
+ settings = data.settings;
+ data.contents = data.contents || {};
+
+ // Prefill subject/message
+ this.feedbackSubjectInput.setValue( data.contents.subject );
+ this.feedbackMessageInput.setValue( data.contents.message );
+
+ this.status = '';
+ this.messagePosterPromise = settings.messagePosterPromise;
+ this.setBugReportLink( settings.bugsTaskSubmissionLink );
+ this.feedbackPageTitle = settings.title;
+ this.feedbackPageName = settings.title.getNameText();
+ this.feedbackPageUrl = settings.title.getUrl();
+
+ // Useragent checkbox
+ if ( settings.useragentCheckbox.show ) {
+ this.useragentFieldLayout.setLabel( settings.useragentCheckbox.message );
+ }
- /**
- * Submit the feedback form.
- */
- submit: function () {
- var subject, message,
- fb = this;
-
- // Get the values to submit.
- subject = this.subjectInput.value;
-
- // We used to include "mw.html.escape( navigator.userAgent )" but there are legal issues
- // with posting this without their explicit consent
- message = this.messageInput.value;
- if ( message.indexOf( '~~~' ) === -1 ) {
- message += ' ~~~~';
- }
+ this.useragentMandatory = settings.useragentCheckbox.mandatory;
+ this.useragentFieldLayout.toggle( settings.useragentCheckbox.show );
+
+ // HACK: Setting a link in the messages doesn't work. There is already a report
+ // about this, and the bug report offers a somewhat hacky work around that
+ // includes setting a separate message to be parsed.
+ // We want to make sure the user can configure both the title of the page and
+ // a separate url, so this must be allowed to parse correctly.
+ // See https://phabricator.wikimedia.org/T49395#490610
+ mw.messages.set( {
+ 'feedback-dialog-temporary-message':
+ '<a href="' + this.feedbackPageUrl + '" target="_blank">' + this.feedbackPageName + '</a>'
+ } );
+ plainMsg = mw.message( 'feedback-dialog-temporary-message' ).plain();
+ mw.messages.set( { 'feedback-dialog-temporary-message-parsed': plainMsg } );
+ parsedMsg = mw.message( 'feedback-dialog-temporary-message-parsed' );
+ this.feedbackMessageLabel.setLabel(
+ // Double-parse
+ $( '<span>' )
+ .append( mw.message( 'feedback-dialog-intro', parsedMsg ).parse() )
+ );
- this.displaySubmitting();
-
- // Post the message, resolving redirects
- this.api.newSection(
- this.title,
- subject,
- message,
- { redirect: true }
- )
- .done( function ( result ) {
- if ( result.edit !== undefined ) {
- if ( result.edit.result === 'Success' ) {
- fb.displayThanks();
- } else {
- // unknown API result
- fb.displayError( 'feedback-error1' );
- }
- } else {
- // edit failed
- fb.displayError( 'feedback-error2' );
+ this.validateFeedbackForm();
+ }, this );
+ };
+
+ /**
+ * @inheritdoc
+ */
+ mw.Feedback.Dialog.prototype.getReadyProcess = function ( data ) {
+ return mw.Feedback.Dialog.super.prototype.getReadyProcess.call( this, data )
+ .next( function () {
+ this.feedbackSubjectInput.focus();
+ }, this );
+ };
+
+ /**
+ * @inheritdoc
+ */
+ mw.Feedback.Dialog.prototype.getActionProcess = function ( action ) {
+ if ( action === 'cancel' ) {
+ return new OO.ui.Process( function () {
+ this.close( { action: action } );
+ }, this );
+ } else if ( action === 'external' ) {
+ return new OO.ui.Process( function () {
+ // Open in a new window
+ window.open( this.getBugReportLink(), '_blank' );
+ // Close the dialog
+ this.close();
+ }, this );
+ } else if ( action === 'submit' ) {
+ return new OO.ui.Process( function () {
+ var fb = this,
+ userAgentMessage = ':' +
+ '<small>' +
+ mw.msg( 'feedback-useragent' ) +
+ ' ' +
+ mw.html.escape( navigator.userAgent ) +
+ '</small>\n\n',
+ subject = this.feedbackSubjectInput.getValue(),
+ message = this.feedbackMessageInput.getValue();
+
+ // Add user agent if checkbox is selected
+ if ( this.useragentCheckbox.isSelected() ) {
+ message = userAgentMessage + message;
}
- } )
- .fail( function () {
- // ajax request failed
- fb.displayError( 'feedback-error3' );
- } );
- },
- /**
- * Modify the display form, and then open it, focusing interface on the subject.
- * @param {Object} [contents] Prefilled contents for the feedback form.
- * @param {string} [contents.subject] The subject of the feedback
- * @param {string} [contents.message] The content of the feedback
- */
- launch: function ( contents ) {
- this.displayForm( contents );
- this.$dialog.dialog( 'open' );
- this.subjectInput.focus();
+ // Post the message
+ return this.messagePosterPromise.then( function ( poster ) {
+ return fb.postMessage( poster, subject, message );
+ }, function () {
+ fb.status = 'error4';
+ mw.log.warn( 'Feedback report failed because MessagePoster could not be fetched' );
+ } ).always( function () {
+ fb.close();
+ } );
+ }, this );
}
+ // Fallback to parent handler
+ return mw.Feedback.Dialog.super.prototype.getActionProcess.call( this, action );
};
+
+ /**
+ * Posts the message
+ *
+ * @private
+ *
+ * @param {mw.messagePoster.MessagePoster} poster Poster implementation used to leave feedback
+ * @param {string} subject Subject of message
+ * @param {string} message Body of message
+ * @return {jQuery.Promise} Promise representing success of message posting action
+ */
+ mw.Feedback.Dialog.prototype.postMessage = function ( poster, subject, message ) {
+ var fb = this;
+
+ return poster.post(
+ subject,
+ message
+ ).then( function () {
+ fb.status = 'submitted';
+ }, function ( mainCode, secondaryCode, details ) {
+ if ( mainCode === 'api-fail' ) {
+ if ( secondaryCode === 'http' ) {
+ fb.status = 'error3';
+ // ajax request failed
+ mw.log.warn( 'Feedback report failed with HTTP error: ' + details.textStatus );
+ } else {
+ fb.status = 'error2';
+ mw.log.warn( 'Feedback report failed with API error: ' + secondaryCode );
+ }
+ } else {
+ fb.status = 'error1';
+ }
+ } );
+ };
+
+ /**
+ * @inheritdoc
+ */
+ mw.Feedback.Dialog.prototype.getTeardownProcess = function ( data ) {
+ return mw.Feedback.Dialog.super.prototype.getTeardownProcess.call( this, data )
+ .first( function () {
+ this.emit( 'submit', this.status, this.feedbackPageName, this.feedbackPageUrl );
+ // Cleanup
+ this.status = '';
+ this.feedbackPageTitle = null;
+ this.feedbackSubjectInput.setValue( '' );
+ this.feedbackMessageInput.setValue( '' );
+ this.useragentCheckbox.setSelected( false );
+ }, this );
+ };
+
+ /**
+ * Set the bug report link
+ * @param {string} link Link to the external bug report form
+ */
+ mw.Feedback.Dialog.prototype.setBugReportLink = function ( link ) {
+ this.bugReportLink = link;
+ };
+
+ /**
+ * Get the bug report link
+ * @returns {string} Link to the external bug report form
+ */
+ mw.Feedback.Dialog.prototype.getBugReportLink = function () {
+ return this.bugReportLink;
+ };
+
}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.filewarning.js b/resources/src/mediawiki/mediawiki.filewarning.js
new file mode 100644
index 00000000..882affe1
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.filewarning.js
@@ -0,0 +1,68 @@
+/*!
+ * mediawiki.filewarning
+ *
+ * @author Mark Holmquist, 2015
+ * @since 1.25
+ */
+/*global OO*/
+( function ( mw, $, oo ) {
+ var warningConfig = mw.config.get( 'wgFileWarning' ),
+ warningMessages = warningConfig.messages,
+ warningLink = warningConfig.link,
+ $origMimetype = $( '.fullMedia .fileInfo .mime-type' ),
+ $mimetype = $origMimetype.clone(),
+ $header = $( '<h3>' )
+ .addClass( 'mediawiki-filewarning-header empty' ),
+ $main = $( '<p>' )
+ .addClass( 'mediawiki-filewarning-main empty' ),
+ $info = $( '<a>' )
+ .addClass( 'mediawiki-filewarning-info empty' ),
+ $footer = $( '<p>' )
+ .addClass( 'mediawiki-filewarning-footer empty' ),
+ dialog = new oo.ui.PopupButtonWidget( {
+ classes: [ 'mediawiki-filewarning-anchor' ],
+ label: $mimetype,
+ flags: [ 'warning' ],
+ icon: 'alert',
+ framed: false,
+ popup: {
+ classes: [ 'mediawiki-filewarning' ],
+ padded: true,
+ width: 400,
+ $content: $header.add( $main ).add( $info ).add( $footer )
+ }
+ } );
+
+ function loadMessage( $target, message ) {
+ if ( message ) {
+ $target.removeClass( 'empty' )
+ .text( mw.message( message ).text() );
+ }
+ }
+
+ // The main message must be populated for the dialog to show.
+ if ( warningConfig && warningConfig.messages && warningConfig.messages.main ) {
+ $mimetype.addClass( 'has-warning' );
+
+ $origMimetype.replaceWith( dialog.$element );
+
+ if ( warningMessages ) {
+ loadMessage( $main, warningMessages.main );
+ loadMessage( $header, warningMessages.header );
+ loadMessage( $footer, warningMessages.footer );
+
+ if ( warningLink ) {
+ loadMessage( $info, warningMessages.info );
+ $info.attr( 'href', warningLink );
+ }
+ }
+
+ // Make OOUI open the dialog, it won't appear until the user
+ // hovers over the warning.
+ dialog.getPopup().toggle( true );
+
+ // Override toggle handler because we don't need it for this popup
+ // object at all. Sort of nasty, but it gets the job done.
+ dialog.getPopup().toggle = $.noop;
+ }
+}( mediaWiki, jQuery, OO ) );
diff --git a/resources/src/mediawiki/mediawiki.filewarning.less b/resources/src/mediawiki/mediawiki.filewarning.less
new file mode 100644
index 00000000..489ac428
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.filewarning.less
@@ -0,0 +1,29 @@
+@import "mediawiki.ui/variables"
+
+.mediawiki-filewarning {
+ display: none;
+
+ .mediawiki-filewarning-header {
+ padding: 0;
+ font-weight: 600;
+ }
+
+ .mediawiki-filewarning-footer {
+ color: #888888;
+ }
+
+ .empty {
+ display: none;
+ }
+
+ .mediawiki-filewarning-anchor:hover & {
+ display: block;
+ }
+}
+
+.mime-type {
+ &.has-warning {
+ font-weight: bold;
+ color: @colorMediumSevere;
+ }
+}
diff --git a/resources/src/mediawiki/mediawiki.helplink.less b/resources/src/mediawiki/mediawiki.helplink.less
new file mode 100644
index 00000000..dd6bf745
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.helplink.less
@@ -0,0 +1,11 @@
+@import "mediawiki.mixins";
+
+#mw-indicator-mw-helplink a {
+ .background-image-svg('images/help.svg', 'images/help.png');
+ background-repeat: no-repeat;
+ background-position: left center;
+ padding-left: 28px;
+ display: inline-block;
+ height: 24px;
+ line-height: 24px;
+}
diff --git a/resources/src/mediawiki/mediawiki.hlist.js b/resources/src/mediawiki/mediawiki.hlist.js
index 0bbf8fad..8ba57f6f 100644
--- a/resources/src/mediawiki/mediawiki.hlist.js
+++ b/resources/src/mediawiki/mediawiki.hlist.js
@@ -1,31 +1,15 @@
/*!
- * .hlist fallbacks for IE 6, 7 and 8.
+ * .hlist fallbacks for IE 8.
* @author [[User:Edokter]]
*/
( function ( mw, $ ) {
var profile = $.client.profile();
- if ( profile.name === 'msie' ) {
- if ( profile.versionNumber === 8 ) {
- /* IE 8: Add pseudo-selector class to last-child list items */
- mw.hook( 'wikipage.content' ).add( function ( $content ) {
- $content.find( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
- .addClass( 'hlist-last-child' );
- } );
- }
- else if ( profile.versionNumber <= 7 ) {
- /* IE 7 and below: Generate interpuncts and parentheses */
- mw.hook( 'wikipage.content' ).add( function ( $content ) {
- var $hlists = $content.find( '.hlist' );
- $hlists.find( 'dt:not(:last-child)' )
- .append( ': ' );
- $hlists.find( 'dd:not(:last-child)' )
- .append( '<b>·</b> ' );
- $hlists.find( 'li:not(:last-child)' )
- .append( '<b>·</b> ' );
- $hlists.find( 'dl dl, dl ol, dl ul, ol dl, ol ol, ol ul, ul dl, ul ol, ul ul' )
- .prepend( '( ' ).append( ') ' );
- } );
- }
+ if ( profile.name === 'msie' && profile.versionNumber === 8 ) {
+ /* Add pseudo-selector class to last-child list items */
+ mw.hook( 'wikipage.content' ).add( function ( $content ) {
+ $content.find( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
+ .addClass( 'hlist-last-child' );
+ } );
}
}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.htmlform.js b/resources/src/mediawiki/mediawiki.htmlform.js
index 594800e1..4a4a97e9 100644
--- a/resources/src/mediawiki/mediawiki.htmlform.js
+++ b/resources/src/mediawiki/mediawiki.htmlform.js
@@ -237,7 +237,9 @@
} );
function enhance( $root ) {
- var $matrixTooltips, $autocomplete;
+ var $matrixTooltips, $autocomplete,
+ // cache the separator to avoid object creation on each keypress
+ colonSeparator = mw.message( 'colon-separator' ).text();
/**
* @ignore
@@ -261,6 +263,36 @@
handleSelectOrOther.call( this, true );
} );
+ // Add a dynamic max length to the reason field of SelectAndOther
+ // This checks the length together with the value from the select field
+ // When the reason list is changed and the bytelimit is longer than the allowed,
+ // nothing is done
+ $root
+ .find( '.mw-htmlform-select-and-other-field' )
+ .each( function () {
+ var $this = $( this ),
+ // find the reason list
+ $reasonList = $root.find( '#' + $this.data( 'id-select' ) ),
+ // cache the current selection to avoid expensive lookup
+ currentValReasonList = $reasonList.val();
+
+ $reasonList.change( function () {
+ currentValReasonList = $reasonList.val();
+ } );
+
+ $this.byteLimit( function ( input ) {
+ // Should be built the same as in HTMLSelectAndOtherField::loadDataFromRequest
+ var comment = currentValReasonList;
+ if ( comment === 'other' ) {
+ comment = input;
+ } else if ( input !== '' ) {
+ // Entry from drop down menu + additional comment
+ comment += colonSeparator + input;
+ }
+ return comment;
+ } );
+ } );
+
// Set up hide-if elements
$root.find( '.mw-htmlform-hide-if' ).each( function () {
var v, $fields, test, func,
@@ -368,12 +400,12 @@
}
// Add/remove cloner clones without having to resubmit the form
- $root.find( '.mw-htmlform-cloner-delete-button' ).click( function ( ev ) {
+ $root.find( '.mw-htmlform-cloner-delete-button' ).filter( ':input' ).click( function ( ev ) {
ev.preventDefault();
$( this ).closest( 'li.mw-htmlform-cloner-li' ).remove();
} );
- $root.find( '.mw-htmlform-cloner-create-button' ).click( function ( ev ) {
+ $root.find( '.mw-htmlform-cloner-create-button' ).filter( ':input' ).click( function ( ev ) {
var $ul, $li, html;
ev.preventDefault();
diff --git a/resources/src/mediawiki/mediawiki.inspect.js b/resources/src/mediawiki/mediawiki.inspect.js
index 8e9fc89f..22d3cbb3 100644
--- a/resources/src/mediawiki/mediawiki.inspect.js
+++ b/resources/src/mediawiki/mediawiki.inspect.js
@@ -7,6 +7,9 @@
/*jshint devel:true */
( function ( mw, $ ) {
+ var inspect,
+ hasOwn = Object.prototype.hasOwnProperty;
+
function sortByProperty( array, prop, descending ) {
var order = descending ? -1 : 1;
return array.sort( function ( a, b ) {
@@ -16,16 +19,20 @@
function humanSize( bytes ) {
if ( !$.isNumeric( bytes ) || bytes === 0 ) { return bytes; }
- var i = 0, units = [ '', ' kB', ' MB', ' GB', ' TB', ' PB' ];
+ var i = 0,
+ units = [ '', ' kB', ' MB', ' GB', ' TB', ' PB' ];
+
for ( ; bytes >= 1024; bytes /= 1024 ) { i++; }
- return bytes.toFixed( 1 ) + units[i];
+ // Maintain one decimal for kB and above, but don't
+ // add ".0" for bytes.
+ return bytes.toFixed( i > 0 ? 1 : 0 ) + units[i];
}
/**
* @class mw.inspect
* @singleton
*/
- var inspect = {
+ inspect = {
/**
* Return a map of all dependency relationships between loaded modules.
@@ -34,16 +41,21 @@
* two properties, 'requires' and 'requiredBy'.
*/
getDependencyGraph: function () {
- var modules = inspect.getLoadedModules(), graph = {};
+ var modules = inspect.getLoadedModules(),
+ graph = {};
$.each( modules, function ( moduleIndex, moduleName ) {
var dependencies = mw.loader.moduleRegistry[moduleName].dependencies || [];
- graph[moduleName] = graph[moduleName] || { requiredBy: [] };
+ if ( !hasOwn.call( graph, moduleName ) ) {
+ graph[moduleName] = { requiredBy: [] };
+ }
graph[moduleName].requires = dependencies;
$.each( dependencies, function ( depIndex, depName ) {
- graph[depName] = graph[depName] || { requiredBy: [] };
+ if ( !hasOwn.call( graph, depName ) ) {
+ graph[depName] = { requiredBy: [] };
+ }
graph[depName].requiredBy.push( moduleName );
} );
} );
diff --git a/resources/src/mediawiki/mediawiki.jqueryMsg.js b/resources/src/mediawiki/mediawiki.jqueryMsg.js
index ad71b083..79939f64 100644
--- a/resources/src/mediawiki/mediawiki.jqueryMsg.js
+++ b/resources/src/mediawiki/mediawiki.jqueryMsg.js
@@ -136,7 +136,7 @@
* Returns a function suitable for use as a global, to construct strings from the message key (and optional replacements).
* e.g.
*
- * window.gM = mediaWiki.parser.getMessageFunction( options );
+ * window.gM = mediaWiki.jqueryMsg.getMessageFunction( options );
* $( 'p#headline' ).html( gM( 'hello-user', username ) );
*
* Like the old gM() function this returns only strings, so it destroys any bindings. If you want to preserve bindings use the
@@ -178,7 +178,7 @@
* the current selector. Bindings to passed-in jquery elements are preserved. Functions become click handlers for [$1 linktext] links.
* e.g.
*
- * $.fn.msg = mediaWiki.parser.getJqueryPlugin( options );
+ * $.fn.msg = mediaWiki.jqueryMsg.getPlugin( options );
* var userlink = $( '<a>' ).click( function () { alert( "hello!!" ) } );
* $( 'p#headline' ).msg( 'hello-user', userlink );
*
@@ -267,7 +267,8 @@
* @return {string|Array} string of '[key]' if message missing, simple string if possible, array of arrays if needs parsing
*/
getAst: function ( key ) {
- var cacheKey = [key, this.settings.onlyCurlyBraceTransform].join( ':' ), wikiText;
+ var wikiText,
+ cacheKey = [key, this.settings.onlyCurlyBraceTransform].join( ':' );
if ( this.astCache[ cacheKey ] === undefined ) {
wikiText = this.settings.messages.get( key );
@@ -290,7 +291,7 @@
* @return {Mixed} abstract syntax tree
*/
wikiTextToAst: function ( input ) {
- var pos, settings = this.settings, concat = Array.prototype.concat,
+ var pos,
regularLiteral, regularLiteralWithoutBar, regularLiteralWithoutSpace, regularLiteralWithSquareBrackets,
doubleQuote, singleQuote, backslash, anyCharacter, asciiAlphabetLiteral,
escapedOrLiteralWithoutSpace, escapedOrLiteralWithoutBar, escapedOrRegularLiteral,
@@ -298,7 +299,9 @@
htmlAttributeEquals, openHtmlStartTag, optionalForwardSlash, openHtmlEndTag, closeHtmlTag,
openExtlink, closeExtlink, wikilinkPage, wikilinkContents, openWikilink, closeWikilink, templateName, pipe, colon,
templateContents, openTemplate, closeTemplate,
- nonWhitespaceExpression, paramExpression, expression, curlyBraceTransformExpression, result;
+ nonWhitespaceExpression, paramExpression, expression, curlyBraceTransformExpression, result,
+ settings = this.settings,
+ concat = Array.prototype.concat;
// Indicates current position in input as we parse through it.
// Shared among all parsing functions below.
@@ -686,10 +689,10 @@
// Subset of allowed HTML markup.
// Most elements and many attributes allowed on the server are not supported yet.
function html() {
- var result = null, parsedOpenTagResult, parsedHtmlContents,
- parsedCloseTagResult, wrappedAttributes, attributes,
- startTagName, endTagName, startOpenTagPos, startCloseTagPos,
- endOpenTagPos, endCloseTagPos;
+ var parsedOpenTagResult, parsedHtmlContents, parsedCloseTagResult,
+ wrappedAttributes, attributes, startTagName, endTagName, startOpenTagPos,
+ startCloseTagPos, endOpenTagPos, endCloseTagPos,
+ result = null;
// Break into three sequence calls. That should allow accurate reconstruction of the original HTML, and requiring an exact tag name match.
// 1. open through closeHtmlTag
@@ -1015,16 +1018,11 @@
page = nodes[0];
url = mw.util.getUrl( page );
- // [[Some Page]] or [[Namespace:Some Page]]
if ( nodes.length === 1 ) {
+ // [[Some Page]] or [[Namespace:Some Page]]
anchor = page;
- }
-
- /*
- * [[Some Page|anchor text]] or
- * [[Namespace:Some Page|anchor]
- */
- else {
+ } else {
+ // [[Some Page|anchor text]] or [[Namespace:Some Page|anchor]]
anchor = nodes[1];
}
@@ -1129,17 +1127,42 @@
* @return {string} selected pluralized form according to current language
*/
plural: function ( nodes ) {
- var forms, formIndex, node, count;
+ var forms, firstChild, firstChildText, explicitPluralFormNumber, formIndex, form, count,
+ explicitPluralForms = {};
+
count = parseFloat( this.language.convertNumber( nodes[0], true ) );
forms = nodes.slice( 1 );
for ( formIndex = 0; formIndex < forms.length; formIndex++ ) {
- node = forms[formIndex];
- if ( node.jquery && node.hasClass( 'mediaWiki_htmlEmitter' ) ) {
- // This is a nested node, already expanded.
- forms[formIndex] = forms[formIndex].html();
+ form = forms[formIndex];
+
+ if ( form.jquery && form.hasClass( 'mediaWiki_htmlEmitter' ) ) {
+ // This is a nested node, may be an explicit plural form like 5=[$2 linktext]
+ firstChild = form.contents().get( 0 );
+ if ( firstChild && firstChild.nodeType === Node.TEXT_NODE ) {
+ firstChildText = firstChild.textContent;
+ if ( /^\d+=/.test( firstChildText ) ) {
+ explicitPluralFormNumber = parseInt( firstChildText.split( /=/ )[0], 10 );
+ // Use the digit part as key and rest of first text node and
+ // rest of child nodes as value.
+ firstChild.textContent = firstChildText.slice( firstChildText.indexOf( '=' ) + 1 );
+ explicitPluralForms[explicitPluralFormNumber] = form;
+ forms[formIndex] = undefined;
+ }
+ }
+ } else if ( /^\d+=/.test( form ) ) {
+ // Simple explicit plural forms like 12=a dozen
+ explicitPluralFormNumber = parseInt( form.split( /=/ )[0], 10 );
+ explicitPluralForms[explicitPluralFormNumber] = form.slice( form.indexOf( '=' ) + 1 );
+ forms[formIndex] = undefined;
}
}
- return forms.length ? this.language.convertPlural( count, forms ) : '';
+
+ // Remove explicit plural forms from the forms. They were set undefined in the above loop.
+ forms = $.map( forms, function ( form ) {
+ return form;
+ } );
+
+ return this.language.convertPlural( count, forms, explicitPluralForms );
},
/**
diff --git a/resources/src/mediawiki/mediawiki.js b/resources/src/mediawiki/mediawiki.js
index e29c734d..ee57c21f 100644
--- a/resources/src/mediawiki/mediawiki.js
+++ b/resources/src/mediawiki/mediawiki.js
@@ -1,7 +1,7 @@
/**
* Base library for MediaWiki.
*
- * Exposed as globally as `mediaWiki` with `mw` as shortcut.
+ * Exposed globally as `mediaWiki` with `mw` as shortcut.
*
* @class mw
* @alternateClassName mediaWiki
@@ -10,8 +10,6 @@
( function ( $ ) {
'use strict';
- /* Private Members */
-
var mw,
hasOwn = Object.prototype.hasOwnProperty,
slice = Array.prototype.slice,
@@ -19,87 +17,104 @@
trackQueue = [];
/**
- * Log a message to window.console, if possible. Useful to force logging of some
- * errors that are otherwise hard to detect (I.e., this logs also in production mode).
- * Gets console references in each invocation, so that delayed debugging tools work
- * fine. No need for optimization here, which would only result in losing logs.
- *
- * @private
- * @method log_
- * @param {string} msg text for the log entry.
- * @param {Error} [e]
- */
- function log( msg, e ) {
- var console = window.console;
- if ( console && console.log ) {
- console.log( msg );
- // If we have an exception object, log it through .error() to trigger
- // proper stacktraces in browsers that support it. There are no (known)
- // browsers that don't support .error(), that do support .log() and
- // have useful exception handling through .log().
- if ( e && console.error ) {
- console.error( String( e ), e );
- }
- }
- }
-
- /* Object constructors */
-
- /**
- * Creates an object that can be read from or written to from prototype functions
- * that allow both single and multiple variables at once.
+ * Create an object that can be read from or written to from methods that allow
+ * interaction both with single and multiple properties at once.
*
* @example
*
- * var addies, wanted, results;
+ * var collection, query, results;
*
* // Create your address book
- * addies = new mw.Map();
+ * collection = new mw.Map();
*
* // This data could be coming from an external source (eg. API/AJAX)
- * addies.set( {
- * 'John Doe' : '10 Wall Street, New York, USA',
- * 'Jane Jackson' : '21 Oxford St, London, UK',
- * 'Dominique van Halen' : 'Kalverstraat 7, Amsterdam, NL'
+ * collection.set( {
+ * 'John Doe': 'john@example.org',
+ * 'Jane Doe': 'jane@example.org',
+ * 'George van Halen': 'gvanhalen@example.org'
* } );
*
- * wanted = ['Dominique van Halen', 'George Johnson', 'Jane Jackson'];
+ * wanted = ['John Doe', 'Jane Doe', 'Daniel Jackson'];
*
* // You can detect missing keys first
- * if ( !addies.exists( wanted ) ) {
- * // One or more are missing (in this case: "George Johnson")
+ * if ( !collection.exists( wanted ) ) {
+ * // One or more are missing (in this case: "Daniel Jackson")
* mw.log( 'One or more names were not found in your address book' );
* }
*
- * // Or just let it give you what it can
- * results = addies.get( wanted, 'Middle of Nowhere, Alaska, US' );
- * mw.log( results['Jane Jackson'] ); // "21 Oxford St, London, UK"
- * mw.log( results['George Johnson'] ); // "Middle of Nowhere, Alaska, US"
+ * // Or just let it give you what it can. Optionally fill in from a default.
+ * results = collection.get( wanted, 'nobody@example.com' );
+ * mw.log( results['Jane Doe'] ); // "jane@example.org"
+ * mw.log( results['Daniel Jackson'] ); // "nobody@example.com"
*
* @class mw.Map
*
* @constructor
- * @param {Object|boolean} [values] Value-bearing object to map, or boolean
- * true to map over the global object. Defaults to an empty object.
+ * @param {Object|boolean} [values] The value-baring object to be mapped. Defaults to an
+ * empty object.
+ * For backwards-compatibility with mw.config, this can also be `true` in which case values
+ * are copied to the Window object as global variables (T72470). Values are copied in
+ * one direction only. Changes to globals are not reflected in the map.
*/
function Map( values ) {
- this.values = values === true ? window : ( values || {} );
- return this;
+ if ( values === true ) {
+ this.values = {};
+
+ // Override #set to also set the global variable
+ this.set = function ( selection, value ) {
+ var s;
+
+ if ( $.isPlainObject( selection ) ) {
+ for ( s in selection ) {
+ setGlobalMapValue( this, s, selection[s] );
+ }
+ return true;
+ }
+ if ( typeof selection === 'string' && arguments.length ) {
+ setGlobalMapValue( this, selection, value );
+ return true;
+ }
+ return false;
+ };
+
+ return;
+ }
+
+ this.values = values || {};
+ }
+
+ /**
+ * Alias property to the global object.
+ *
+ * @private
+ * @static
+ * @param {mw.Map} map
+ * @param {string} key
+ * @param {Mixed} value
+ */
+ function setGlobalMapValue( map, key, value ) {
+ map.values[key] = value;
+ mw.log.deprecate(
+ window,
+ key,
+ value,
+ // Deprecation notice for mw.config globals (T58550, T72470)
+ map === mw.config && 'Use mw.config instead.'
+ );
}
Map.prototype = {
/**
- * Get the value of one or multiple a keys.
+ * Get the value of one or more keys.
*
- * If called with no arguments, all values will be returned.
+ * If called with no arguments, all values are returned.
*
- * @param {string|Array} selection String key or array of keys to get values for.
- * @param {Mixed} [fallback] Value to use in case key(s) do not exist.
- * @return mixed If selection was a string returns the value or null,
- * If selection was an array, returns an object of key/values (value is null if not found),
- * If selection was not passed or invalid, will return the 'values' object member (be careful as
- * objects are always passed by reference in JavaScript!).
- * @return {string|Object|null} Values as a string or object, null if invalid/inexistant.
+ * @param {string|Array} [selection] Key or array of keys to retrieve values for.
+ * @param {Mixed} [fallback=null] Value for keys that don't exist.
+ * @return {Mixed|Object| null} If selection was a string, returns the value,
+ * If selection was an array, returns an object of key/values.
+ * If no selection is passed, the 'values' container is returned. (Beware that,
+ * as is the default in JavaScript, the object is returned by reference.)
*/
get: function ( selection, fallback ) {
var results, i;
@@ -127,16 +142,16 @@
return this.values;
}
- // invalid selection key
+ // Invalid selection key
return null;
},
/**
- * Sets one or multiple key/value pairs.
+ * Set one or more key/value pairs.
*
- * @param {string|Object} selection String key to set value for, or object mapping keys to values.
+ * @param {string|Object} selection Key to set value for, or object mapping keys to values
* @param {Mixed} [value] Value to set (optional, only in use when key is a string)
- * @return {Boolean} This returns true on success, false on failure.
+ * @return {boolean} True on success, false on failure
*/
set: function ( selection, value ) {
var s;
@@ -155,10 +170,10 @@
},
/**
- * Checks if one or multiple keys exist.
+ * Check if one or more keys exist.
*
- * @param {Mixed} selection String key or array of keys to check
- * @return {boolean} Existence of key(s)
+ * @param {Mixed} selection Key or array of keys to check
+ * @return {boolean} True if the key(s) exist
*/
exists: function ( selection ) {
var s;
@@ -230,7 +245,7 @@
* @class mw.Message
*
* @constructor
- * @param {mw.Map} map Message storage
+ * @param {mw.Map} map Message store
* @param {string} key
* @param {Array} [parameters]
*/
@@ -244,24 +259,22 @@
Message.prototype = {
/**
- * Simple message parser, does $N replacement and nothing else.
+ * Get parsed contents of the message.
*
+ * The default parser does simple $N replacements and nothing else.
* This may be overridden to provide a more complex message parser.
- *
- * The primary override is in mediawiki.jqueryMsg.
+ * The primary override is in the mediawiki.jqueryMsg module.
*
* This function will not be called for nonexistent messages.
+ *
+ * @return {string} Parsed message
*/
parser: function () {
- var parameters = this.parameters;
- return this.map.get( this.key ).replace( /\$(\d+)/g, function ( str, match ) {
- var index = parseInt( match, 10 ) - 1;
- return parameters[index] !== undefined ? parameters[index] : '$' + match;
- } );
+ return mw.format.apply( null, [ this.map.get( this.key ) ].concat( this.parameters ) );
},
/**
- * Appends (does not replace) parameters for replacement to the .parameters property.
+ * Add (does not replace) parameters for `N$` placeholder values.
*
* @param {Array} parameters
* @chainable
@@ -275,9 +288,10 @@
},
/**
- * Converts message object to its string form based on the state of format.
+ * Convert message object to its string form based on current format.
*
- * @return {string} Message as a string in the current form or `<key>` if key does not exist.
+ * @return {string} Message as a string in the current form, or `<key>` if key
+ * does not exist.
*/
toString: function () {
var text;
@@ -304,7 +318,7 @@
},
/**
- * Changes format to 'parse' and converts message to string
+ * Change format to 'parse' and convert message to string
*
* If jqueryMsg is loaded, this parses the message text from wikitext
* (where supported) to HTML
@@ -319,7 +333,7 @@
},
/**
- * Changes format to 'plain' and converts message to string
+ * Change format to 'plain' and convert message to string
*
* This substitutes parameters, but otherwise does not change the
* message text.
@@ -332,12 +346,14 @@
},
/**
- * Changes format to 'text' and converts message to string
+ * Change format to 'text' and convert message to string
*
* If jqueryMsg is loaded, {{-transformation is done where supported
* (such as {{plural:}}, {{gender:}}, {{int:}}).
*
- * Otherwise, it is equivalent to plain.
+ * Otherwise, it is equivalent to plain
+ *
+ * @return {string} String form of text message
*/
text: function () {
this.format = 'text';
@@ -345,9 +361,9 @@
},
/**
- * Changes the format to 'escaped' and converts message to string
+ * Change the format to 'escaped' and convert message to string
*
- * This is equivalent to using the 'text' format (see text method), then
+ * This is equivalent to using the 'text' format (see #text), then
* HTML-escaping the output.
*
* @return {string} String form of html escaped message
@@ -358,7 +374,7 @@
},
/**
- * Checks if message exists
+ * Check if a message exists
*
* @see mw.Map#exists
* @return {boolean}
@@ -372,7 +388,6 @@
* @class mw
*/
mw = {
- /* Public Members */
/**
* Get the current time, measured in milliseconds since January 1, 1970 (UTC).
@@ -392,6 +407,24 @@
}() ),
/**
+ * Format a string. Replace $1, $2 ... $N with positional arguments.
+ *
+ * Used by Message#parser().
+ *
+ * @since 1.25
+ * @param {string} fmt Format string
+ * @param {Mixed...} parameters Values for $N replacements
+ * @return {string} Formatted string
+ */
+ format: function ( formatString ) {
+ var parameters = slice.call( arguments, 1 );
+ return formatString.replace( /\$(\d+)/g, function ( str, match ) {
+ var index = parseInt( match, 10 ) - 1;
+ return parameters[index] !== undefined ? parameters[index] : '$' + match;
+ } );
+ },
+
+ /**
* Track an analytic event.
*
* This method provides a generic means for MediaWiki JavaScript code to capture state
@@ -413,7 +446,7 @@
},
/**
- * Register a handler for subset of analytic events, specified by topic
+ * Register a handler for subset of analytic events, specified by topic.
*
* Handlers will be called once for each tracked event, including any events that fired before the
* handler was registered; 'this' is set to a plain object with a 'timeStamp' property indicating
@@ -423,6 +456,8 @@
*
* @param {string} topic Handle events whose name starts with this string prefix
* @param {Function} callback Handler to call for each matching tracked event
+ * @param {string} callback.topic
+ * @param {Object} [callback.data]
*/
trackSubscribe: function ( topic, callback ) {
var seen = 0;
@@ -438,14 +473,14 @@
} );
},
- // Make the Map constructor publicly available.
+ // Expose Map constructor
Map: Map,
- // Make the Message constructor publicly available.
+ // Expose Message constructor
Message: Message,
/**
- * Map of configuration values
+ * Map of configuration values.
*
* Check out [the complete list of configuration values](https://www.mediawiki.org/wiki/Manual:Interface/JavaScript#mw.config)
* on mediawiki.org.
@@ -455,11 +490,14 @@
*
* @property {mw.Map} config
*/
- // Dummy placeholder. Re-assigned in ResourceLoaderStartupModule to an instance of `mw.Map`.
+ // Dummy placeholder later assigned in ResourceLoaderStartUpModule
config: null,
/**
- * Empty object that plugins can be installed in.
+ * Empty object for third-party libraries, for cases where you don't
+ * want to add a new global, or the global is bad and needs containment
+ * or wrapping.
+ *
* @property
*/
libs: {},
@@ -478,12 +516,18 @@
legacy: {},
/**
- * Localization system
+ * Store for messages.
+ *
* @property {mw.Map}
*/
messages: new Map(),
- /* Public Methods */
+ /**
+ * Store for templates associated with a module.
+ *
+ * @property {mw.Map}
+ */
+ templates: new Map(),
/**
* Get a message object.
@@ -492,11 +536,10 @@
*
* @see mw.Message
* @param {string} key Key of message to get
- * @param {Mixed...} parameters Parameters for the $N replacements in messages.
+ * @param {Mixed...} parameters Values for $N replacements
* @return {mw.Message}
*/
message: function ( key ) {
- // Variadic arguments
var parameters = slice.call( arguments, 1 );
return new Message( mw.messages, key, parameters );
},
@@ -508,7 +551,7 @@
*
* @see mw.Message
* @param {string} key Key of message to get
- * @param {Mixed...} parameters Parameters for the $N replacements in messages.
+ * @param {Mixed...} parameters Values for $N replacements
* @return {string}
*/
msg: function () {
@@ -532,7 +575,7 @@
/**
* Write a message the console's warning channel.
* Also logs a stacktrace for easier debugging.
- * Each action is silently ignored if the browser doesn't support it.
+ * Actions not supported by the browser console are silently ignored.
*
* @param {string...} msg Messages to output to console
*/
@@ -553,12 +596,14 @@
* @param {Object} obj Host object of deprecated property
* @param {string} key Name of property to create in `obj`
* @param {Mixed} val The value this property should return when accessed
- * @param {string} [msg] Optional text to include in the deprecation message.
+ * @param {string} [msg] Optional text to include in the deprecation message
*/
log.deprecate = !Object.defineProperty ? function ( obj, key, val ) {
obj[key] = val;
} : function ( obj, key, val, msg ) {
msg = 'Use of "' + key + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' );
+ // Support: IE8
+ // Can throw on Object.defineProperty.
try {
Object.defineProperty( obj, key, {
configurable: true,
@@ -575,7 +620,7 @@
}
} );
} catch ( err ) {
- // IE8 can throw on Object.defineProperty
+ // Fallback to creating a copy of the value to the object.
obj[key] = val;
}
};
@@ -584,42 +629,74 @@
}() ),
/**
- * Client-side module loader which integrates with the MediaWiki ResourceLoader
+ * Client for ResourceLoader server end point.
+ *
+ * This client is in charge of maintaining the module registry and state
+ * machine, initiating network (batch) requests for loading modules, as
+ * well as dependency resolution and execution of source code.
+ *
+ * For more information, refer to
+ * <https://www.mediawiki.org/wiki/ResourceLoader/Features>
+ *
* @class mw.loader
* @singleton
*/
loader: ( function () {
- /* Private Members */
+ /**
+ * Fired via mw.track on various resource loading errors.
+ *
+ * @event resourceloader_exception
+ * @param {Error|Mixed} e The error that was thrown. Almost always an Error
+ * object, but in theory module code could manually throw something else, and that
+ * might also end up here.
+ * @param {string} [module] Name of the module which caused the error. Omitted if the
+ * error is not module-related or the module cannot be easily identified due to
+ * batched handling.
+ * @param {string} source Source of the error. Possible values:
+ *
+ * - style: stylesheet error (only affects old IE where a special style loading method
+ * is used)
+ * - load-callback: exception thrown by user callback
+ * - module-execute: exception thrown by module code
+ * - store-eval: could not evaluate module code cached in localStorage
+ * - store-localstorage-init: localStorage or JSON parse error in mw.loader.store.init
+ * - store-localstorage-json: JSON conversion error in mw.loader.store.set
+ * - store-localstorage-update: localStorage or JSON conversion error in mw.loader.store.update
+ */
/**
- * Mapping of registered modules
+ * Fired via mw.track on resource loading error conditions.
+ *
+ * @event resourceloader_assert
+ * @param {string} source Source of the error. Possible values:
*
- * The jquery module is pre-registered, because it must have already
- * been provided for this object to have been built, and in debug mode
- * jquery would have been provided through a unique loader request,
- * making it impossible to hold back registration of jquery until after
- * mediawiki.
+ * - bug-T59567: failed to cache script due to an Opera function -> string conversion
+ * bug; see <https://phabricator.wikimedia.org/T59567> for details
+ */
+
+ /**
+ * Mapping of registered modules.
*
- * For exact details on support for script, style and messages, look at
- * mw.loader.implement.
+ * See #implement for exact details on support for script, style and messages.
*
* Format:
+ *
* {
* 'moduleName': {
- * // At registry
- * 'version': ############## (unix timestamp),
+ * // From startup mdoule
+ * 'version': ############## (unix timestamp)
* 'dependencies': ['required.foo', 'bar.also', ...], (or) function () {}
- * 'group': 'somegroup', (or) null,
- * 'source': 'local', 'someforeignwiki', (or) null
- * 'state': 'registered', 'loaded', 'loading', 'ready', 'error' or 'missing'
+ * 'group': 'somegroup', (or) null
+ * 'source': 'local', (or) 'anotherwiki'
* 'skip': 'return !!window.Example', (or) null
+ * 'state': 'registered', 'loaded', 'loading', 'ready', 'error', or 'missing'
*
* // Added during implementation
- * 'skipped': true,
- * 'script': ...,
- * 'style': ...,
- * 'messages': { 'key': 'value' },
+ * 'skipped': true
+ * 'script': ...
+ * 'style': ...
+ * 'messages': { 'key': 'value' }
* }
* }
*
@@ -627,32 +704,37 @@
* @private
*/
var registry = {},
- //
// Mapping of sources, keyed by source-id, values are strings.
+ //
// Format:
- // {
- // 'sourceId': 'http://foo.bar/w/load.php'
- // }
+ //
+ // {
+ // 'sourceId': 'http://example.org/w/load.php'
+ // }
//
sources = {},
+
// List of modules which will be loaded as when ready
batch = [],
+
// List of modules to be loaded
queue = [],
+
// List of callback functions waiting for modules to be ready to be called
jobs = [],
+
// Selector cache for the marker element. Use getMarker() to get/use the marker!
$marker = null,
- // Buffer for addEmbeddedCSS.
+
+ // Buffer for #addEmbeddedCSS
cssBuffer = '',
- // Callbacks for addEmbeddedCSS.
- cssCallbacks = $.Callbacks();
- /* Private methods */
+ // Callbacks for #addEmbeddedCSS
+ cssCallbacks = $.Callbacks();
function getMarker() {
- // Cached
if ( !$marker ) {
+ // Cache
$marker = $( 'meta[name="ResourceLoaderDynamicStyles"]' );
if ( !$marker.length ) {
mw.log( 'No <meta name="ResourceLoaderDynamicStyles"> found, inserting dynamically' );
@@ -663,60 +745,35 @@
}
/**
- * Create a new style tag and add it to the DOM.
+ * Create a new style element and add it to the DOM.
*
* @private
* @param {string} text CSS text
- * @param {HTMLElement|jQuery} [nextnode=document.head] The element where the style tag should be
- * inserted before. Otherwise it will be appended to `<head>`.
- * @return {HTMLElement} Reference to the created `<style>` element.
+ * @param {HTMLElement|jQuery} [nextnode=document.head] The element where the style tag
+ * should be inserted before
+ * @return {HTMLElement} Reference to the created style element
*/
function newStyleTag( text, nextnode ) {
var s = document.createElement( 'style' );
- // Insert into document before setting cssText (bug 33305)
+ // Support: IE
+ // Must attach to document before setting cssText (bug 33305)
if ( nextnode ) {
- // Must be inserted with native insertBefore, not $.fn.before.
- // When using jQuery to insert it, like $nextnode.before( s ),
- // then IE6 will throw "Access is denied" when trying to append
- // to .cssText later. Some kind of weird security measure.
- // http://stackoverflow.com/q/12586482/319266
- // Works: jsfiddle.net/zJzMy/1
- // Fails: jsfiddle.net/uJTQz
- // Works again: http://jsfiddle.net/Azr4w/ (diff: the next 3 lines)
- if ( nextnode.jquery ) {
- nextnode = nextnode.get( 0 );
- }
- nextnode.parentNode.insertBefore( s, nextnode );
+ $( nextnode ).before( s );
} else {
document.getElementsByTagName( 'head' )[0].appendChild( s );
}
if ( s.styleSheet ) {
- // IE
+ // Support: IE6-10
+ // Old IE ignores appended text nodes, access stylesheet directly.
s.styleSheet.cssText = text;
} else {
- // Other browsers.
- // (Safari sometimes borks on non-string values,
- // play safe by casting to a string, just in case.)
- s.appendChild( document.createTextNode( String( text ) ) );
+ // Standard behaviour
+ s.appendChild( document.createTextNode( text ) );
}
return s;
}
/**
- * Checks whether it is safe to add this css to a stylesheet.
- *
- * @private
- * @param {string} cssText
- * @return {boolean} False if a new one must be created.
- */
- function canExpandStylesheetWith( cssText ) {
- // Makes sure that cssText containing `@import`
- // rules will end up in a new stylesheet (as those only work when
- // placed at the start of a stylesheet; bug 35562).
- return cssText.indexOf( '@import' ) === -1;
- }
-
- /**
* Add a bit of CSS text to the current browser page.
*
* The CSS will be appended to an existing ResourceLoader-created `<style>` tag
@@ -736,16 +793,18 @@
// Yield once before inserting the <style> tag. There are likely
// more calls coming up which we can combine this way.
// Appending a stylesheet and waiting for the browser to repaint
- // is fairly expensive, this reduces it (bug 45810)
+ // is fairly expensive, this reduces that (bug 45810)
if ( cssText ) {
- // Be careful not to extend the buffer with css that needs a new stylesheet
- if ( !cssBuffer || canExpandStylesheetWith( cssText ) ) {
+ // Be careful not to extend the buffer with css that needs a new stylesheet.
+ // cssText containing `@import` rules needs to go at the start of a buffer,
+ // since those only work when placed at the start of a stylesheet; bug 35562.
+ if ( !cssBuffer || cssText.slice( 0, '@import'.length ) !== '@import' ) {
// Linebreak for somewhat distinguishable sections
// (the rl-cachekey comment separating each)
cssBuffer += '\n' + cssText;
// TODO: Use requestAnimationFrame in the future which will
// perform even better by not injecting styles while the browser
- // is paiting.
+ // is painting.
setTimeout( function () {
// Can't pass addEmbeddedCSS to setTimeout directly because Firefox
// (below version 13) has the non-standard behaviour of passing a
@@ -760,8 +819,9 @@
} else if ( cssBuffer ) {
cssText = cssBuffer;
cssBuffer = '';
+
} else {
- // This is a delayed call, but buffer is already cleared by
+ // This is a delayed call, but buffer was already cleared by
// another delayed call.
return;
}
@@ -774,21 +834,22 @@
if ( 'documentMode' in document && document.documentMode <= 9 ) {
$style = getMarker().prev();
- // Verify that the the element before Marker actually is a
+ // Verify that the element before the marker actually is a
// <style> tag and one that came from ResourceLoader
// (not some other style tag or even a `<meta>` or `<script>`).
if ( $style.data( 'ResourceLoaderDynamicStyleTag' ) === true ) {
// There's already a dynamic <style> tag present and
- // canExpandStylesheetWith() gave a green light to append more to it.
+ // we are able to append more to it.
styleEl = $style.get( 0 );
+ // Support: IE6-10
if ( styleEl.styleSheet ) {
try {
- styleEl.styleSheet.cssText += cssText; // IE
+ styleEl.styleSheet.cssText += cssText;
} catch ( e ) {
- log( 'Stylesheet error', e );
+ mw.track( 'resourceloader.exception', { exception: e, source: 'stylesheet' } );
}
} else {
- styleEl.appendChild( document.createTextNode( String( cssText ) ) );
+ styleEl.appendChild( document.createTextNode( cssText ) );
}
cssCallbacks.fire().empty();
return;
@@ -801,39 +862,57 @@
}
/**
- * Generates an ISO8601 "basic" string from a UNIX timestamp
+ * Zero-pad three numbers.
+ *
+ * @private
+ * @param {number} a
+ * @param {number} b
+ * @param {number} c
+ * @return {string}
+ */
+ function pad( a, b, c ) {
+ return (
+ ( a < 10 ? '0' : '' ) + a +
+ ( b < 10 ? '0' : '' ) + b +
+ ( c < 10 ? '0' : '' ) + c
+ );
+ }
+
+ /**
+ * Convert UNIX timestamp to ISO8601 format.
+ *
* @private
+ * @param {number} timestamp UNIX timestamp
*/
function formatVersionNumber( timestamp ) {
var d = new Date();
- function pad( a, b, c ) {
- return [a < 10 ? '0' + a : a, b < 10 ? '0' + b : b, c < 10 ? '0' + c : c].join( '' );
- }
d.setTime( timestamp * 1000 );
return [
- pad( d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate() ), 'T',
- pad( d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds() ), 'Z'
+ pad( d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate() ),
+ 'T',
+ pad( d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds() ),
+ 'Z'
].join( '' );
}
/**
- * Resolves dependencies and detects circular references.
+ * Resolve dependencies and detect circular references.
*
* @private
* @param {string} module Name of the top-level module whose dependencies shall be
- * resolved and sorted.
+ * resolved and sorted.
* @param {Array} resolved Returns a topological sort of the given module and its
- * dependencies, such that later modules depend on earlier modules. The array
- * contains the module names. If the array contains already some module names,
- * this function appends its result to the pre-existing array.
+ * dependencies, such that later modules depend on earlier modules. The array
+ * contains the module names. If the array contains already some module names,
+ * this function appends its result to the pre-existing array.
* @param {Object} [unresolved] Hash used to track the current dependency
- * chain; used to report loops in the dependency graph.
+ * chain; used to report loops in the dependency graph.
* @throws {Error} If any unregistered module or a dependency loop is encountered
*/
function sortDependencies( module, resolved, unresolved ) {
var n, deps, len, skip;
- if ( registry[module] === undefined ) {
+ if ( !hasOwn.call( registry, module ) ) {
throw new Error( 'Unknown dependency: ' + module );
}
@@ -859,10 +938,10 @@
}
}
if ( $.inArray( module, resolved ) !== -1 ) {
- // Module already resolved; nothing to do.
+ // Module already resolved; nothing to do
return;
}
- // unresolved is optional, supply it if not passed in
+ // Create unresolved if not passed in
if ( !unresolved ) {
unresolved = {};
}
@@ -888,81 +967,37 @@
}
/**
- * Gets a list of module names that a module depends on in their proper dependency
+ * Get a list of module names that a module depends on in their proper dependency
* order.
*
* @private
- * @param {string} module Module name or array of string module names
- * @return {Array} list of dependencies, including 'module'.
- * @throws {Error} If circular reference is detected
+ * @param {string[]} module Array of string module names
+ * @return {Array} List of dependencies, including 'module'.
*/
- function resolve( module ) {
- var m, resolved;
-
- // Allow calling with an array of module names
- if ( $.isArray( module ) ) {
- resolved = [];
- for ( m = 0; m < module.length; m += 1 ) {
- sortDependencies( module[m], resolved );
- }
- return resolved;
- }
-
- if ( typeof module === 'string' ) {
- resolved = [];
+ function resolve( modules ) {
+ var resolved = [];
+ $.each( modules, function ( idx, module ) {
sortDependencies( module, resolved );
- return resolved;
- }
-
- throw new Error( 'Invalid module argument: ' + module );
+ } );
+ return resolved;
}
/**
- * Narrows a list of module names down to those matching a specific
- * state (see comment on top of this scope for a list of valid states).
- * One can also filter for 'unregistered', which will return the
- * modules names that don't have a registry entry.
+ * Determine whether all dependencies are in state 'ready', which means we may
+ * execute the module or job now.
*
* @private
- * @param {string|string[]} states Module states to filter by
- * @param {Array} [modules] List of module names to filter (optional, by default the entire
- * registry is used)
- * @return {Array} List of filtered module names
+ * @param {Array} module Names of modules to be checked
+ * @return {boolean} True if all modules are in state 'ready', false otherwise
*/
- function filter( states, modules ) {
- var list, module, s, m;
-
- // Allow states to be given as a string
- if ( typeof states === 'string' ) {
- states = [states];
- }
- // If called without a list of modules, build and use a list of all modules
- list = [];
- if ( modules === undefined ) {
- modules = [];
- for ( module in registry ) {
- modules[modules.length] = module;
- }
- }
- // Build a list of modules which are in one of the specified states
- for ( s = 0; s < states.length; s += 1 ) {
- for ( m = 0; m < modules.length; m += 1 ) {
- if ( registry[modules[m]] === undefined ) {
- // Module does not exist
- if ( states[s] === 'unregistered' ) {
- // OK, undefined
- list[list.length] = modules[m];
- }
- } else {
- // Module exists, check state
- if ( registry[modules[m]].state === states[s] ) {
- // OK, correct state
- list[list.length] = modules[m];
- }
- }
+ function allReady( modules ) {
+ var i;
+ for ( i = 0; i < modules.length; i++ ) {
+ if ( mw.loader.getState( modules[i] ) !== 'ready' ) {
+ return false;
}
}
- return list;
+ return true;
}
/**
@@ -970,18 +1005,27 @@
* execute the module or job now.
*
* @private
- * @param {Array} dependencies Dependencies (module names) to be checked.
- * @return {boolean} True if all dependencies are in state 'ready', false otherwise
+ * @param {Array} modules Names of modules to be checked
+ * @return {boolean} True if no modules are in state 'error' or 'missing', false otherwise
*/
- function allReady( dependencies ) {
- return filter( 'ready', dependencies ).length === dependencies.length;
+ function anyFailed( modules ) {
+ var i, state;
+ for ( i = 0; i < modules.length; i++ ) {
+ state = mw.loader.getState( modules[i] );
+ if ( state === 'error' || state === 'missing' ) {
+ return true;
+ }
+ }
+ return false;
}
/**
- * A module has entered state 'ready', 'error', or 'missing'. Automatically update pending jobs
- * and modules that depend upon this module. if the given module failed, propagate the 'error'
- * state up the dependency tree; otherwise, execute all jobs/modules that now have all their
- * dependencies satisfied. On jobs depending on a failed module, run the error callback, if any.
+ * A module has entered state 'ready', 'error', or 'missing'. Automatically update
+ * pending jobs and modules that depend upon this module. If the given module failed,
+ * propagate the 'error' state up the dependency tree. Otherwise, go ahead an execute
+ * all jobs/modules now having their dependencies satisfied.
+ *
+ * Jobs that depend on a failed module, will have their error callback ran (if any).
*
* @private
* @param {string} module Name of module that entered one of the states 'ready', 'error', or 'missing'.
@@ -989,16 +1033,15 @@
function handlePending( module ) {
var j, job, hasErrors, m, stateChange;
- // Modules.
- if ( $.inArray( registry[module].state, ['error', 'missing'] ) !== -1 ) {
+ if ( registry[module].state === 'error' || registry[module].state === 'missing' ) {
// If the current module failed, mark all dependent modules also as failed.
// Iterate until steady-state to propagate the error state upwards in the
// dependency tree.
do {
stateChange = false;
for ( m in registry ) {
- if ( $.inArray( registry[m].state, ['error', 'missing'] ) === -1 ) {
- if ( filter( ['error', 'missing'], registry[m].dependencies ).length > 0 ) {
+ if ( registry[m].state !== 'error' && registry[m].state !== 'missing' ) {
+ if ( anyFailed( registry[m].dependencies ) ) {
registry[m].state = 'error';
stateChange = true;
}
@@ -1009,7 +1052,7 @@
// Execute all jobs whose dependencies are either all satisfied or contain at least one failed module.
for ( j = 0; j < jobs.length; j += 1 ) {
- hasErrors = filter( ['error', 'missing'], jobs[j].dependencies ).length > 0;
+ hasErrors = anyFailed( jobs[j].dependencies );
if ( hasErrors || allReady( jobs[j].dependencies ) ) {
// All dependencies satisfied, or some have errors
job = jobs[j];
@@ -1028,7 +1071,7 @@
} catch ( e ) {
// A user-defined callback raised an exception.
// Swallow it to protect our state machine!
- log( 'Exception thrown by user callback', e );
+ mw.track( 'resourceloader.exception', { exception: e, module: module, source: 'load-callback' } );
}
}
}
@@ -1091,7 +1134,7 @@
var key, value, media, i, urls, cssHandle, checkCssHandles,
cssHandlesRegistered = false;
- if ( registry[module] === undefined ) {
+ if ( !hasOwn.call( registry, module ) ) {
throw new Error( 'Module has not been registered yet: ' + module );
} else if ( registry[module].state === 'registered' ) {
throw new Error( 'Module has not been requested from the server yet: ' + module );
@@ -1108,7 +1151,8 @@
*/
function addLink( media, url ) {
var el = document.createElement( 'link' );
- // For IE: Insert in document *before* setting href
+ // Support: IE
+ // Insert in document *before* setting href
getMarker().before( el );
el.rel = 'stylesheet';
if ( media && media !== 'all' ) {
@@ -1153,8 +1197,8 @@
} catch ( e ) {
// This needs to NOT use mw.log because these errors are common in production mode
// and not in debug mode, such as when a symbol that should be global isn't exported
- log( 'Exception thrown by ' + module, e );
registry[module].state = 'error';
+ mw.track( 'resourceloader.exception', { exception: e, module: module, source: 'module-execute' } );
handlePending( module );
}
}
@@ -1170,6 +1214,11 @@
mw.messages.set( registry[module].messages );
}
+ // Initialise templates
+ if ( registry[module].templates ) {
+ mw.templates.set( module, registry[module].templates );
+ }
+
if ( $.isReady || registry[module].async ) {
// Make sure we don't run the scripts until all (potentially asynchronous)
// stylesheet insertions have completed.
@@ -1187,7 +1236,7 @@
var check = checkCssHandles;
pending++;
return function () {
- if (check) {
+ if ( check ) {
pending--;
check();
check = undefined; // Revoke
@@ -1271,8 +1320,6 @@
* Ignored (and defaulted to `true`) if the document-ready event has already occurred.
*/
function request( dependencies, ready, error, async ) {
- var n;
-
// Allow calling by single module name
if ( typeof dependencies === 'string' ) {
dependencies = [dependencies];
@@ -1281,33 +1328,33 @@
// Add ready and error callbacks if they were given
if ( ready !== undefined || error !== undefined ) {
jobs[jobs.length] = {
- 'dependencies': filter(
- ['registered', 'loading', 'loaded'],
- dependencies
- ),
- 'ready': ready,
- 'error': error
+ dependencies: $.grep( dependencies, function ( module ) {
+ var state = mw.loader.getState( module );
+ return state === 'registered' || state === 'loaded' || state === 'loading';
+ } ),
+ ready: ready,
+ error: error
};
}
- // Queue up any dependencies that are registered
- dependencies = filter( ['registered'], dependencies );
- for ( n = 0; n < dependencies.length; n += 1 ) {
- if ( $.inArray( dependencies[n], queue ) === -1 ) {
- queue[queue.length] = dependencies[n];
+ $.each( dependencies, function ( idx, module ) {
+ var state = mw.loader.getState( module );
+ if ( state === 'registered' && $.inArray( module, queue ) === -1 ) {
+ queue.push( module );
if ( async ) {
- // Mark this module as async in the registry
- registry[dependencies[n]].async = true;
+ registry[module].async = true;
}
}
- }
+ } );
- // Work the queue
mw.loader.work();
}
function sortQuery( o ) {
- var sorted = {}, key, a = [];
+ var key,
+ sorted = {},
+ a = [];
+
for ( key in o ) {
if ( hasOwn.call( o, key ) ) {
a.push( key );
@@ -1326,7 +1373,9 @@
* @private
*/
function buildModulesString( moduleMap ) {
- var arr = [], p, prefix;
+ var p, prefix,
+ arr = [];
+
for ( prefix in moduleMap ) {
p = prefix === '' ? '' : prefix + '.';
arr.push( p + moduleMap[prefix].join( ',' ) );
@@ -1350,10 +1399,33 @@
currReqBase
);
request = sortQuery( request );
- // Append &* to avoid triggering the IE6 extension check
+ // Support: IE6
+ // Append &* to satisfy load.php's WebRequest::checkUrlExtension test. This script
+ // isn't actually used in IE6, but MediaWiki enforces it in general.
addScript( sourceLoadScript + '?' + $.param( request ) + '&*', null, async );
}
+ /**
+ * Resolve indexed dependencies.
+ *
+ * ResourceLoader uses an optimization to save space which replaces module names in
+ * dependency lists with the index of that module within the array of module
+ * registration data if it exists. The benefit is a significant reduction in the data
+ * size of the startup module. This function changes those dependency lists back to
+ * arrays of strings.
+ *
+ * @param {Array} modules Modules array
+ */
+ function resolveIndexedDependencies( modules ) {
+ $.each( modules, function ( idx, module ) {
+ if ( module[2] ) {
+ module[2] = $.map( module[2], function ( dep ) {
+ return typeof dep === 'number' ? modules[dep][0] : dep;
+ } );
+ }
+ } );
+ }
+
/* Public Members */
return {
/**
@@ -1389,12 +1461,12 @@
};
// Split module batch by source and by group.
splits = {};
- maxQueryLength = mw.config.get( 'wgResourceLoaderMaxQueryLength', -1 );
+ maxQueryLength = mw.config.get( 'wgResourceLoaderMaxQueryLength', 2000 );
// Appends a list of modules from the queue to the batch
for ( q = 0; q < queue.length; q += 1 ) {
// Only request modules which are registered
- if ( registry[queue[q]] !== undefined && registry[queue[q]].state === 'registered' ) {
+ if ( hasOwn.call( registry, queue[q] ) && registry[queue[q]].state === 'registered' ) {
// Prevent duplicate entries
if ( $.inArray( queue[q], batch ) === -1 ) {
batch[batch.length] = queue[q];
@@ -1433,7 +1505,7 @@
// repopulate these modules to the cache.
// This means that at most one module will be useless (the one that had
// the error) instead of all of them.
- log( 'Error while evaluating data from mw.loader.store', err );
+ mw.track( 'resourceloader.exception', { exception: err, source: 'store-eval' } );
origBatch = $.grep( origBatch, function ( module ) {
return registry[module].state === 'loading';
} );
@@ -1457,10 +1529,10 @@
for ( b = 0; b < batch.length; b += 1 ) {
bSource = registry[batch[b]].source;
bGroup = registry[batch[b]].group;
- if ( splits[bSource] === undefined ) {
+ if ( !hasOwn.call( splits, bSource ) ) {
splits[bSource] = {};
}
- if ( splits[bSource][bGroup] === undefined ) {
+ if ( !hasOwn.call( splits[bSource], bGroup ) ) {
splits[bSource][bGroup] = [];
}
bSourceGroup = splits[bSource][bGroup];
@@ -1513,7 +1585,7 @@
prefix = modules[i].substr( 0, lastDotIndex );
suffix = modules[i].slice( lastDotIndex + 1 );
- bytesAdded = moduleMap[prefix] !== undefined
+ bytesAdded = hasOwn.call( moduleMap, prefix )
? suffix.length + 3 // '%2C'.length == 3
: modules[i].length + 3; // '%7C'.length == 3
@@ -1526,8 +1598,9 @@
moduleMap = {};
async = true;
l = currReqBaseLength + 9;
+ mw.track( 'resourceloader.splitRequest', { maxQueryLength: maxQueryLength } );
}
- if ( moduleMap[prefix] === undefined ) {
+ if ( !hasOwn.call( moduleMap, prefix ) ) {
moduleMap[prefix] = [];
}
moduleMap[prefix].push( suffix );
@@ -1569,7 +1642,7 @@
return true;
}
- if ( sources[id] !== undefined ) {
+ if ( hasOwn.call( sources, id ) ) {
throw new Error( 'source already registered: ' + id );
}
@@ -1586,7 +1659,12 @@
* Register a module, letting the system know about it and its
* properties. Startup modules contain calls to this function.
*
- * @param {string} module Module name
+ * When using multiple module registration by passing an array, dependencies that
+ * are specified as references to modules within the array will be resolved before
+ * the modules are registered.
+ *
+ * @param {string|Array} module Module name or array of arrays, each containing
+ * a list of arguments compatible with this method
* @param {number} version Module version number as a timestamp (falls backs to 0)
* @param {string|Array|Function} dependencies One string or array of strings of module
* names on which this module depends, or a function that returns that array.
@@ -1595,16 +1673,17 @@
* @param {string} [skip=null] Script body of the skip function
*/
register: function ( module, version, dependencies, group, source, skip ) {
- var m;
+ var i, len;
// Allow multiple registration
if ( typeof module === 'object' ) {
- for ( m = 0; m < module.length; m += 1 ) {
+ resolveIndexedDependencies( module );
+ for ( i = 0, len = module.length; i < len; i++ ) {
// module is an array of module names
- if ( typeof module[m] === 'string' ) {
- mw.loader.register( module[m] );
+ if ( typeof module[i] === 'string' ) {
+ mw.loader.register( module[i] );
// module is an array of arrays
- } else if ( typeof module[m] === 'object' ) {
- mw.loader.register.apply( mw.loader, module[m] );
+ } else if ( typeof module[i] === 'object' ) {
+ mw.loader.register.apply( mw.loader, module[i] );
}
}
return;
@@ -1613,7 +1692,7 @@
if ( typeof module !== 'string' ) {
throw new Error( 'module must be a string, not a ' + typeof module );
}
- if ( registry[module] !== undefined ) {
+ if ( hasOwn.call( registry, module ) ) {
throw new Error( 'module already registered: ' + module );
}
// List the module as registered
@@ -1646,7 +1725,7 @@
* @param {string} module Name of module
* @param {Function|Array} script Function with module code or Array of URLs to
* be used as the src attribute of a new `<script>` tag.
- * @param {Object} style Should follow one of the following patterns:
+ * @param {Object} [style] Should follow one of the following patterns:
*
* { "css": [css, ..] }
* { "url": { <media>: [url, ..] } }
@@ -1657,36 +1736,41 @@
* { <media>: [url, ..] }
*
* The reason css strings are not concatenated anymore is bug 31676. We now check
- * whether it's safe to extend the stylesheet (see #canExpandStylesheetWith).
+ * whether it's safe to extend the stylesheet.
*
- * @param {Object} msgs List of key/value pairs to be added to mw#messages.
+ * @param {Object} [msgs] List of key/value pairs to be added to mw#messages.
+ * @param {Object} [templates] List of key/value pairs to be added to mw#templates.
*/
- implement: function ( module, script, style, msgs ) {
+ implement: function ( module, script, style, msgs, templates ) {
// Validate input
if ( typeof module !== 'string' ) {
- throw new Error( 'module must be a string, not a ' + typeof module );
+ throw new Error( 'module must be of type string, not ' + typeof module );
}
- if ( !$.isFunction( script ) && !$.isArray( script ) ) {
- throw new Error( 'script must be a function or an array, not a ' + typeof script );
+ if ( script && !$.isFunction( script ) && !$.isArray( script ) ) {
+ throw new Error( 'script must be of type function or array, not ' + typeof script );
}
- if ( !$.isPlainObject( style ) ) {
- throw new Error( 'style must be an object, not a ' + typeof style );
+ if ( style && !$.isPlainObject( style ) ) {
+ throw new Error( 'style must be of type object, not ' + typeof style );
}
- if ( !$.isPlainObject( msgs ) ) {
- throw new Error( 'msgs must be an object, not a ' + typeof msgs );
+ if ( msgs && !$.isPlainObject( msgs ) ) {
+ throw new Error( 'msgs must be of type object, not a ' + typeof msgs );
+ }
+ if ( templates && !$.isPlainObject( templates ) ) {
+ throw new Error( 'templates must be of type object, not a ' + typeof templates );
}
// Automatically register module
- if ( registry[module] === undefined ) {
+ if ( !hasOwn.call( registry, module ) ) {
mw.loader.register( module );
}
// Check for duplicate implementation
- if ( registry[module] !== undefined && registry[module].script !== undefined ) {
+ if ( hasOwn.call( registry, module ) && registry[module].script !== undefined ) {
throw new Error( 'module already implemented: ' + module );
}
// Attach components
- registry[module].script = script;
- registry[module].style = style;
- registry[module].messages = msgs;
+ registry[module].script = script || [];
+ registry[module].style = style || {};
+ registry[module].messages = msgs || {};
+ registry[module].templates = templates || {};
// The module may already have been marked as erroneous
if ( $.inArray( registry[module].state, ['error', 'missing'] ) === -1 ) {
registry[module].state = 'loaded';
@@ -1710,6 +1794,7 @@
* @param {Function} [ready] Callback to execute when all dependencies are ready
* @param {Function} [error] Callback to execute if one or more dependencies failed
* @return {jQuery.Promise}
+ * @since 1.23 this returns a promise
*/
using: function ( dependencies, ready, error ) {
var deferred = $.Deferred();
@@ -1734,7 +1819,7 @@
if ( allReady( dependencies ) ) {
// Run ready immediately
deferred.resolve();
- } else if ( filter( ['error', 'missing'], dependencies ).length ) {
+ } else if ( anyFailed( dependencies ) ) {
// Execute error immediately if any dependencies have errors
deferred.reject(
new Error( 'One or more dependencies failed to load' ),
@@ -1761,7 +1846,7 @@
* Defaults to `true` if loading a URL, `false` otherwise.
*/
load: function ( modules, type, async ) {
- var filtered, m, module, l;
+ var filtered, l;
// Validate input
if ( typeof modules !== 'object' && typeof modules !== 'string' ) {
@@ -1769,16 +1854,16 @@
}
// Allow calling with an external url or single dependency as a string
if ( typeof modules === 'string' ) {
- // Support adding arbitrary external scripts
if ( /^(https?:)?\/\//.test( modules ) ) {
if ( async === undefined ) {
// Assume async for bug 34542
async = true;
}
if ( type === 'text/css' ) {
- // IE7-8 throws security warnings when inserting a <link> tag
- // with a protocol-relative URL set though attributes (instead of
- // properties) - when on HTTPS. See also bug 41331.
+ // Support: IE 7-8
+ // Use properties instead of attributes as IE throws security
+ // warnings when inserting a <link> tag with a protocol-relative
+ // URL set though attributes - when on HTTPS. See bug 41331.
l = document.createElement( 'link' );
l.rel = 'stylesheet';
l.href = modules;
@@ -1801,26 +1886,18 @@
// Undefined modules are acceptable here in load(), because load() takes
// an array of unrelated modules, whereas the modules passed to
// using() are related and must all be loaded.
- for ( filtered = [], m = 0; m < modules.length; m += 1 ) {
- module = registry[modules[m]];
- if ( module !== undefined ) {
- if ( $.inArray( module.state, ['error', 'missing'] ) === -1 ) {
- filtered[filtered.length] = modules[m];
- }
- }
- }
+ filtered = $.grep( modules, function ( module ) {
+ var state = mw.loader.getState( module );
+ return state !== null && state !== 'error' && state !== 'missing';
+ } );
if ( filtered.length === 0 ) {
return;
}
// Resolve entire dependency map
filtered = resolve( filtered );
- // If all modules are ready, nothing to be done
- if ( allReady( filtered ) ) {
- return;
- }
- // If any modules have errors: also quit.
- if ( filter( ['error', 'missing'], filtered ).length ) {
+ // If all modules are ready, or if any modules have errors, nothing to be done.
+ if ( allReady( filtered ) || anyFailed( filtered ) ) {
return;
}
// Since some modules are not yet ready, queue up a request.
@@ -1842,7 +1919,7 @@
}
return;
}
- if ( registry[module] === undefined ) {
+ if ( !hasOwn.call( registry, module ) ) {
mw.loader.register( module );
}
if ( $.inArray( state, ['ready', 'error', 'missing'] ) !== -1
@@ -1859,27 +1936,29 @@
/**
* Get the version of a module.
*
- * @param {string} module Name of module to get version for
+ * @param {string} module Name of module
* @return {string|null} The version, or null if the module (or its version) is not
* in the registry.
*/
getVersion: function ( module ) {
- if ( registry[module] !== undefined && registry[module].version !== undefined ) {
- return formatVersionNumber( registry[module].version );
+ if ( !hasOwn.call( registry, module ) || registry[module].version === undefined ) {
+ return null;
}
- return null;
+ return formatVersionNumber( registry[module].version );
},
/**
* Get the state of a module.
*
- * @param {string} module Name of module to get state for
+ * @param {string} module Name of module
+ * @return {string|null} The state, or null if the module (or its state) is not
+ * in the registry.
*/
getState: function ( module ) {
- if ( registry[module] !== undefined && registry[module].state !== undefined ) {
- return registry[module].state;
+ if ( !hasOwn.call( registry, module ) || registry[module].state === undefined ) {
+ return null;
}
- return null;
+ return registry[module].state;
},
/**
@@ -1944,7 +2023,7 @@
},
/**
- * Get a string key on which to vary the module cache.
+ * Get a key on which to vary the module cache.
* @return {string} String of concatenated vary conditions.
*/
getVary: function () {
@@ -1956,13 +2035,13 @@
},
/**
- * Get a string key for a specific module. The key format is '[name]@[version]'.
+ * Get a key for a specific module. The key format is '[name]@[version]'.
*
* @param {string} module Module name
* @return {string|null} Module key or null if module does not exist
*/
getModuleKey: function ( module ) {
- return typeof registry[module] === 'object' ?
+ return hasOwn.call( registry, module ) ?
( module + '@' + registry[module].version ) : null;
},
@@ -1985,8 +2064,15 @@
return;
}
- if ( !mw.config.get( 'wgResourceLoaderStorageEnabled' ) || mw.config.get( 'debug' ) ) {
- // Disabled by configuration, or because debug mode is set
+ if ( !mw.config.get( 'wgResourceLoaderStorageEnabled' ) ) {
+ // Disabled by configuration.
+ // Clear any previous store to free up space. (T66721)
+ mw.loader.store.clear();
+ mw.loader.store.enabled = false;
+ return;
+ }
+ if ( mw.config.get( 'debug' ) ) {
+ // Disable module store in debug mode
mw.loader.store.enabled = false;
return;
}
@@ -2001,7 +2087,7 @@
return;
}
} catch ( e ) {
- log( 'Storage error', e );
+ mw.track( 'resourceloader.exception', { exception: e, source: 'store-localstorage-init' } );
}
if ( raw === undefined ) {
@@ -2057,7 +2143,8 @@
// Unversioned, private, or site-/user-specific
( !descriptor.version || $.inArray( descriptor.group, [ 'private', 'user', 'site' ] ) !== -1 ) ||
// Partial descriptor
- $.inArray( undefined, [ descriptor.script, descriptor.style, descriptor.messages ] ) !== -1
+ $.inArray( undefined, [ descriptor.script, descriptor.style,
+ descriptor.messages, descriptor.templates ] ) !== -1
) {
// Decline to store
return false;
@@ -2070,16 +2157,17 @@
String( descriptor.script ) :
JSON.stringify( descriptor.script ),
JSON.stringify( descriptor.style ),
- JSON.stringify( descriptor.messages )
+ JSON.stringify( descriptor.messages ),
+ JSON.stringify( descriptor.templates )
];
- // Attempted workaround for a possible Opera bug (bug 57567).
+ // Attempted workaround for a possible Opera bug (bug T59567).
// This regex should never match under sane conditions.
if ( /^\s*\(/.test( args[1] ) ) {
args[1] = 'function' + args[1];
- log( 'Detected malformed function stringification (bug 57567)' );
+ mw.track( 'resourceloader.assert', { source: 'bug-T59567' } );
}
} catch ( e ) {
- log( 'Storage error', e );
+ mw.track( 'resourceloader.exception', { exception: e, source: 'store-localstorage-json' } );
return;
}
@@ -2151,7 +2239,7 @@
data = JSON.stringify( mw.loader.store );
localStorage.setItem( key, data );
} catch ( e ) {
- log( 'Storage error', e );
+ mw.track( 'resourceloader.exception', { exception: e, source: 'store-localstorage-update' } );
}
}
@@ -2223,8 +2311,8 @@
* - null or undefined: The short closing form is used, e.g. `<br/>`.
* - this.Raw: The value attribute is included without escaping.
* - this.Cdata: The value attribute is included, and an exception is
- * thrown if it contains an illegal ETAGO delimiter.
- * See <http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.3.2>.
+ * thrown if it contains an illegal ETAGO delimiter.
+ * See <http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.3.2>.
* @return {string} HTML
*/
element: function ( name, attrs, contents ) {
@@ -2387,13 +2475,49 @@
// @deprecated since 1.23 Use $ or jQuery instead
mw.log.deprecate( window, '$j', $, 'Use $ or jQuery instead.' );
- // Attach to window and globally alias
- window.mw = window.mediaWiki = mw;
+ /**
+ * Log a message to window.console, if possible.
+ *
+ * Useful to force logging of some errors that are otherwise hard to detect (i.e., this logs
+ * also in production mode). Gets console references in each invocation instead of caching the
+ * reference, so that debugging tools loaded later are supported (e.g. Firebug Lite in IE).
+ *
+ * @private
+ * @method log_
+ * @param {string} topic Stream name passed by mw.track
+ * @param {Object} data Data passed by mw.track
+ * @param {Error} [data.exception]
+ * @param {string} data.source Error source
+ * @param {string} [data.module] Name of module which caused the error
+ */
+ function log( topic, data ) {
+ var msg,
+ e = data.exception,
+ source = data.source,
+ module = data.module,
+ console = window.console;
- // Auto-register from pre-loaded startup scripts
- if ( $.isFunction( window.startUp ) ) {
- window.startUp();
- window.startUp = undefined;
+ if ( console && console.log ) {
+ msg = ( e ? 'Exception' : 'Error' ) + ' in ' + source;
+ if ( module ) {
+ msg += ' in module ' + module;
+ }
+ msg += ( e ? ':' : '.' );
+ console.log( msg );
+
+ // If we have an exception object, log it to the error channel to trigger a
+ // proper stacktraces in browsers that support it. No fallback as we have no browsers
+ // that don't support error(), but do support log().
+ if ( e && console.error ) {
+ console.error( String( e ), e );
+ }
+ }
}
+ // subscribe to error streams
+ mw.trackSubscribe( 'resourceloader.exception', log );
+ mw.trackSubscribe( 'resourceloader.assert', log );
+
+ // Attach to window and globally alias
+ window.mw = window.mediaWiki = mw;
}( jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.notification.js b/resources/src/mediawiki/mediawiki.notification.js
index 1968aa94..132c334f 100644
--- a/resources/src/mediawiki/mediawiki.notification.js
+++ b/resources/src/mediawiki/mediawiki.notification.js
@@ -12,7 +12,7 @@
/**
* A Notification object for 1 message.
*
- * The "_" in the name is to avoid a bug (http://github.com/senchalabs/jsduck/issues/304).
+ * The underscore in the name is to avoid a bug <https://github.com/senchalabs/jsduck/issues/304>.
* It is not part of the actual class name.
*
* @class mw.Notification_
diff --git a/resources/src/mediawiki/mediawiki.pager.tablePager.less b/resources/src/mediawiki/mediawiki.pager.tablePager.less
index d37aec5b..822c8147 100644
--- a/resources/src/mediawiki/mediawiki.pager.tablePager.less
+++ b/resources/src/mediawiki/mediawiki.pager.tablePager.less
@@ -37,48 +37,48 @@
.TablePager_nav td.TablePager_nav-first .TablePager_nav-disabled {
padding-top: 25px;
- /* @embed */
- background: url(images/pager-arrow-disabled-fastforward-rtl.png) center top no-repeat;
+ background: none center top no-repeat;
+ .background-image-svg('images/pager-arrow-disabled-fastforward-rtl.svg', 'images/pager-arrow-disabled-fastforward-rtl.png');
}
.TablePager_nav td.TablePager_nav-prev .TablePager_nav-disabled {
padding-top: 25px;
- /* @embed */
- background: url(images/pager-arrow-disabled-forward-rtl.png) center top no-repeat;
+ background: none center top no-repeat;
+ .background-image-svg('images/pager-arrow-disabled-forward-rtl.svg', 'images/pager-arrow-disabled-forward-rtl.png');
}
.TablePager_nav td.TablePager_nav-next .TablePager_nav-disabled {
padding-top: 25px;
- /* @embed */
- background: url(images/pager-arrow-disabled-forward-ltr.png) center top no-repeat;
+ background: none center top no-repeat;
+ .background-image-svg('images/pager-arrow-disabled-forward-ltr.svg', 'images/pager-arrow-disabled-forward-ltr.png');
}
.TablePager_nav td.TablePager_nav-last .TablePager_nav-disabled {
padding-top: 25px;
- /* @embed */
- background: url(images/pager-arrow-disabled-fastforward-ltr.png) center top no-repeat;
+ background: none center top no-repeat;
+ .background-image-svg('images/pager-arrow-disabled-fastforward-ltr.svg', 'images/pager-arrow-disabled-fastforward-ltr.png');
}
.TablePager_nav td.TablePager_nav-first .TablePager_nav-enabled {
padding-top: 25px;
- /* @embed */
- background: url(images/pager-arrow-fastforward-rtl.png) center top no-repeat;
+ background: none center top no-repeat;
+ .background-image-svg('images/pager-arrow-fastforward-rtl.svg', 'images/pager-arrow-fastforward-rtl.png');
}
.TablePager_nav td.TablePager_nav-prev .TablePager_nav-enabled {
padding-top: 25px;
- /* @embed */
- background: url(images/pager-arrow-forward-rtl.png) center top no-repeat;
+ background: none center top no-repeat;
+ .background-image-svg('images/pager-arrow-forward-rtl.svg', 'images/pager-arrow-forward-rtl.png');
}
.TablePager_nav td.TablePager_nav-next .TablePager_nav-enabled {
padding-top: 25px;
- /* @embed */
- background: url(images/pager-arrow-forward-ltr.png) center top no-repeat;
+ background: none center top no-repeat;
+ .background-image-svg('images/pager-arrow-forward-ltr.svg', 'images/pager-arrow-forward-ltr.png');
}
.TablePager_nav td.TablePager_nav-last .TablePager_nav-enabled {
padding-top: 25px;
- /* @embed */
- background: url(images/pager-arrow-fastforward-ltr.png) center top no-repeat;
+ background: none center top no-repeat;
+ .background-image-svg('images/pager-arrow-fastforward-ltr.svg', 'images/pager-arrow-fastforward-ltr.png');
}
diff --git a/resources/src/mediawiki/mediawiki.searchSuggest.js b/resources/src/mediawiki/mediawiki.searchSuggest.js
index a214cb3f..7b7ccf3f 100644
--- a/resources/src/mediawiki/mediawiki.searchSuggest.js
+++ b/resources/src/mediawiki/mediawiki.searchSuggest.js
@@ -41,10 +41,7 @@
baseHref = $form.attr( 'action' );
baseHref += baseHref.indexOf( '?' ) > -1 ? '&' : '?';
- linkParams = {};
- $.each( $form.serializeArray(), function ( idx, obj ) {
- linkParams[ obj.name ] = obj.value;
- } );
+ linkParams = $form.serializeObject();
return {
textParam: context.data.$textbox.attr( 'name' ),
@@ -122,7 +119,7 @@
];
$( searchboxesSelectors.join( ', ' ) )
.suggestions( {
- fetch: function ( query, response ) {
+ fetch: function ( query, response, maxRows ) {
var node = this[0];
api = api || new mw.Api();
@@ -131,6 +128,7 @@
action: 'opensearch',
search: query,
namespace: 0,
+ limit: maxRows,
suggest: ''
} ).done( function ( data ) {
response( data[ 1 ] );
diff --git a/resources/src/mediawiki/mediawiki.sectionAnchor.css b/resources/src/mediawiki/mediawiki.sectionAnchor.css
new file mode 100644
index 00000000..f8f00221
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.sectionAnchor.css
@@ -0,0 +1,3 @@
+.mw-headline-anchor {
+ display: none;
+}
diff --git a/resources/src/mediawiki/mediawiki.startUp.js b/resources/src/mediawiki/mediawiki.startUp.js
new file mode 100644
index 00000000..028784c2
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.startUp.js
@@ -0,0 +1,11 @@
+/*!
+ * Auto-register from pre-loaded startup scripts
+ */
+( function ( $ ) {
+ 'use strict';
+
+ if ( $.isFunction( window.startUp ) ) {
+ window.startUp();
+ window.startUp = undefined;
+ }
+}( jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.template.js b/resources/src/mediawiki/mediawiki.template.js
new file mode 100644
index 00000000..61bbb0d7
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.template.js
@@ -0,0 +1,123 @@
+/**
+ * @class mw.template
+ * @singleton
+ */
+( function ( mw, $ ) {
+ var compiledTemplates = {},
+ compilers = {};
+
+ mw.template = {
+ /**
+ * Register a new compiler and template.
+ *
+ * @param {string} name of compiler. Should also match with any file extensions of templates that want to use it.
+ * @param {Function} compiler which must implement a compile function
+ */
+ registerCompiler: function ( name, compiler ) {
+ if ( !compiler.compile ) {
+ throw new Error( 'Compiler must implement compile method.' );
+ }
+ compilers[name] = compiler;
+ },
+
+ /**
+ * Get the name of the compiler associated with a template based on its name.
+ *
+ * @param {string} templateName Name of template (including file suffix)
+ * @return {String} Name of compiler
+ */
+ getCompilerName: function ( templateName ) {
+ var templateParts = templateName.split( '.' );
+
+ if ( templateParts.length < 2 ) {
+ throw new Error( 'Unable to identify compiler. Template name must have a suffix.' );
+ }
+ return templateParts[ templateParts.length - 1 ];
+ },
+
+ /**
+ * Get the compiler for a given compiler name.
+ *
+ * @param {string} compilerName Name of the compiler
+ * @return {Object} The compiler associated with that name
+ */
+ getCompiler: function ( compilerName ) {
+ var compiler = compilers[ compilerName ];
+ if ( !compiler ) {
+ throw new Error( 'Unknown compiler ' + compilerName );
+ }
+ return compiler;
+ },
+
+ /**
+ * Register a template associated with a module.
+ *
+ * Compiles the newly added template based on the suffix in its name.
+ *
+ * @param {string} moduleName Name of ResourceLoader module to get the template from
+ * @param {string} templateName Name of template to add including file extension
+ * @param {string} templateBody Contents of a template (e.g. html markup)
+ * @return {Function} Compiled template
+ */
+ add: function ( moduleName, templateName, templateBody ) {
+ var compiledTemplate,
+ compilerName = this.getCompilerName( templateName );
+
+ if ( !compiledTemplates[moduleName] ) {
+ compiledTemplates[moduleName] = {};
+ }
+
+ compiledTemplate = this.compile( templateBody, compilerName );
+ compiledTemplates[moduleName][ templateName ] = compiledTemplate;
+ return compiledTemplate;
+ },
+
+ /**
+ * Retrieve a template by module and template name.
+ *
+ * @param {string} moduleName Name of the module to retrieve the template from
+ * @param {string} templateName Name of template to be retrieved
+ * @return {Object} Compiled template
+ */
+ get: function ( moduleName, templateName ) {
+ var moduleTemplates, compiledTemplate;
+
+ // Check if the template has already been compiled, compile it if not
+ if ( !compiledTemplates[ moduleName ] || !compiledTemplates[ moduleName ][ templateName ] ) {
+ moduleTemplates = mw.templates.get( moduleName );
+ if ( !moduleTemplates || !moduleTemplates[ templateName ] ) {
+ throw new Error( 'Template ' + templateName + ' not found in module ' + moduleName );
+ }
+
+ // Add compiled version
+ compiledTemplate = this.add( moduleName, templateName, moduleTemplates[ templateName ] );
+ } else {
+ compiledTemplate = compiledTemplates[ moduleName ][ templateName ];
+ }
+ return compiledTemplate;
+ },
+
+ /**
+ * Wrap our template engine of choice.
+ *
+ * @param {string} templateBody Template body
+ * @param {string} compilerName The name of a registered compiler
+ * @return {Object} Template interface
+ */
+ compile: function ( templateBody, compilerName ) {
+ return this.getCompiler( compilerName ).compile( templateBody );
+ }
+ };
+
+ // Register basic html compiler
+ mw.template.registerCompiler( 'html', {
+ compile: function ( src ) {
+ return {
+ render: function () {
+ return $( $.parseHTML( $.trim( src ) ) );
+ }
+ };
+ }
+ } );
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.template.mustache.js b/resources/src/mediawiki/mediawiki.template.mustache.js
new file mode 100644
index 00000000..dcc3842b
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.template.mustache.js
@@ -0,0 +1,14 @@
+/*global Mustache */
+( function ( mw, $ ) {
+ // Register mustache compiler
+ mw.template.registerCompiler( 'mustache', {
+ compile: function ( src ) {
+ return {
+ render: function ( data ) {
+ return $.parseHTML( Mustache.render( src, data ) );
+ }
+ };
+ }
+ } );
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.user.js b/resources/src/mediawiki/mediawiki.user.js
index e93707ec..817c856c 100644
--- a/resources/src/mediawiki/mediawiki.user.js
+++ b/resources/src/mediawiki/mediawiki.user.js
@@ -3,12 +3,9 @@
* @singleton
*/
( function ( mw, $ ) {
- var user,
+ var i,
deferreds = {},
- // Extend the skeleton mw.user from mediawiki.js
- // This is kind of ugly but we're stuck with this for b/c reasons
- options = mw.user.options || new mw.Map(),
- tokens = mw.user.tokens || new mw.Map();
+ byteToHex = [];
/**
* Get the current user's groups or rights
@@ -44,27 +41,65 @@
return deferreds[info].promise();
}
- mw.user = user = {
- options: options,
- tokens: tokens,
+ // Map from numbers 0-255 to a hex string (with padding)
+ for ( i = 0; i < 256; i++ ) {
+ // Padding: Add a full byte (0x100, 256) and strip the extra character
+ byteToHex[i] = ( i + 256 ).toString( 16 ).slice( 1 );
+ }
+
+ // mw.user with the properties options and tokens gets defined in mediawiki.js.
+ $.extend( mw.user, {
/**
- * Generate a random user session ID (32 alpha-numeric characters)
+ * Generate a random user session ID.
*
* This information would potentially be stored in a cookie to identify a user during a
- * session or series of sessions. Its uniqueness should not be depended on.
+ * session or series of sessions. Its uniqueness should not be depended on unless the
+ * browser supports the crypto API.
+ *
+ * Known problems with Math.random():
+ * Using the Math.random function we have seen sets
+ * with 1% of non uniques among 200,000 values with Safari providing most of these.
+ * Given the prevalence of Safari in mobile the percentage of duplicates in
+ * mobile usages of this code is probably higher.
*
- * @return {string} Random set of 32 alpha-numeric characters
+ * Rationale:
+ * We need about 64 bits to make sure that probability of collision
+ * on 500 million (5*10^8) is <= 1%
+ * See https://en.wikipedia.org/wiki/Birthday_problem#Probability_table
+ *
+ * @return {string} 64 bit integer in hex format, padded
*/
generateRandomSessionId: function () {
- var i, r,
- id = '',
- seed = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
- for ( i = 0; i < 32; i++ ) {
- r = Math.floor( Math.random() * seed.length );
- id += seed.charAt( r );
+ /*jshint bitwise:false */
+ var rnds, i, r,
+ hexRnds = new Array( 8 ),
+ // Support: IE 11
+ crypto = window.crypto || window.msCrypto;
+
+ // Based on https://github.com/broofa/node-uuid/blob/bfd9f96127/uuid.js
+ if ( crypto && crypto.getRandomValues ) {
+ // Fill an array with 8 random values, each of which is 8 bits.
+ // Note that Uint8Array is array-like but does not implement Array.
+ rnds = new Uint8Array( 8 );
+ crypto.getRandomValues( rnds );
+ } else {
+ rnds = new Array( 8 );
+ for ( i = 0; i < 8; i++ ) {
+ if ( ( i & 3 ) === 0 ) {
+ r = Math.random() * 0x100000000;
+ }
+ rnds[i] = r >>> ( ( i & 3 ) << 3 ) & 255;
+ }
+ }
+ // Convert from number to hex
+ for ( i = 0; i < 8; i++ ) {
+ hexRnds[i] = byteToHex[rnds[i]];
}
- return id;
+
+ // Concatenation of two random integers with entrophy n and m
+ // returns a string with entrophy n+m if those strings are independent
+ return hexRnds.join( '' );
},
/**
@@ -95,15 +130,15 @@
*/
getRegistration: function () {
var registration = mw.config.get( 'wgUserRegistration' );
- if ( user.isAnon() ) {
+ if ( mw.user.isAnon() ) {
return false;
- } else if ( registration === null ) {
+ }
+ if ( registration === null ) {
// Information may not be available if they signed up before
// MW began storing this.
return null;
- } else {
- return new Date( registration );
}
+ return new Date( registration );
},
/**
@@ -112,7 +147,7 @@
* @return {boolean}
*/
isAnon: function () {
- return user.getName() === null;
+ return mw.user.getName() === null;
},
/**
@@ -126,7 +161,7 @@
sessionId: function () {
var sessionId = $.cookie( 'mediaWiki.user.sessionId' );
if ( sessionId === undefined || sessionId === null ) {
- sessionId = user.generateRandomSessionId();
+ sessionId = mw.user.generateRandomSessionId();
$.cookie( 'mediaWiki.user.sessionId', sessionId, { expires: null, path: '/' } );
}
return sessionId;
@@ -140,7 +175,7 @@
* @return {string} User name or random session ID
*/
id: function () {
- return user.getName() || user.sessionId();
+ return mw.user.getName() || mw.user.sessionId();
},
/**
@@ -239,20 +274,6 @@
getRights: function ( callback ) {
return getUserInfo( 'rights' ).done( callback );
}
- };
-
- /**
- * @method name
- * @inheritdoc #getName
- * @deprecated since 1.20 Use #getName instead
- */
- mw.log.deprecate( user, 'name', user.getName, 'Use mw.user.getName instead.' );
-
- /**
- * @method anonymous
- * @inheritdoc #isAnon
- * @deprecated since 1.20 Use #isAnon instead
- */
- mw.log.deprecate( user, 'anonymous', user.isAnon, 'Use mw.user.isAnon instead.' );
+ } );
}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.userSuggest.js b/resources/src/mediawiki/mediawiki.userSuggest.js
new file mode 100644
index 00000000..3964f0b2
--- /dev/null
+++ b/resources/src/mediawiki/mediawiki.userSuggest.js
@@ -0,0 +1,41 @@
+/*!
+ * Add autocomplete suggestions for names of registered users.
+ */
+( function ( mw, $ ) {
+ var api, config;
+
+ config = {
+ fetch: function ( userInput, response, maxRows ) {
+ var node = this[0];
+
+ api = api || new mw.Api();
+
+ $.data( node, 'request', api.get( {
+ action: 'query',
+ list: 'allusers',
+ // Prefix of list=allusers is case sensitive. Normalise first
+ // character to uppercase so that "fo" may yield "Foo".
+ auprefix: userInput.charAt( 0 ).toUpperCase() + userInput.slice( 1 ),
+ aulimit: maxRows
+ } ).done( function ( data ) {
+ var users = $.map( data.query.allusers, function ( userObj ) {
+ return userObj.name;
+ } );
+ response( users );
+ } ) );
+ },
+ cancel: function () {
+ var node = this[0],
+ request = $.data( node, 'request' );
+
+ if ( request ) {
+ request.abort();
+ $.removeData( node, 'request' );
+ }
+ }
+ };
+
+ $( function () {
+ $( '.mw-autocomplete-user' ).suggestions( config );
+ } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.util.js b/resources/src/mediawiki/mediawiki.util.js
index 26629137..6723e5f9 100644
--- a/resources/src/mediawiki/mediawiki.util.js
+++ b/resources/src/mediawiki/mediawiki.util.js
@@ -88,7 +88,7 @@
/**
* Get the link to a page name (relative to `wgServer`),
*
- * @param {string} str Page name
+ * @param {string|null} [str=wgPageName] Page name
* @param {Object} [params] A mapping of query parameter names to values,
* e.g. `{ action: 'edit' }`
* @return {string} Url of the page with name of `str`
@@ -151,12 +151,12 @@
* Returns null if not found.
*
* @param {string} param The parameter name.
- * @param {string} [url=document.location.href] URL to search through, defaulting to the current document's URL.
+ * @param {string} [url=location.href] URL to search through, defaulting to the current browsing location.
* @return {Mixed} Parameter value or null.
*/
getParamValue: function ( param, url ) {
if ( url === undefined ) {
- url = document.location.href;
+ url = location.href;
}
// Get last match, stop at hash
var re = new RegExp( '^[^#]*[&?]' + $.escapeRE( param ) + '=([^&#]*)' ),
@@ -196,7 +196,7 @@
* p-cactions (Content actions), p-personal (Personal tools),
* p-navigation (Navigation), p-tb (Toolbox)
*
- * The first three paramters are required, the others are optional and
+ * The first three parameters are required, the others are optional and
* may be null. Though providing an id and tooltip is recommended.
*
* By default the new link will be added to the end of the list. To
@@ -228,7 +228,7 @@
addPortletLink: function ( portlet, href, text, id, tooltip, accesskey, nextnode ) {
var $item, $link, $portlet, $ul;
- // Check if there's atleast 3 arguments to prevent a TypeError
+ // Check if there's at least 3 arguments to prevent a TypeError
if ( arguments.length < 3 ) {
return null;
}
@@ -286,30 +286,38 @@
}
if ( tooltip ) {
- $link.attr( 'title', tooltip ).updateTooltipAccessKeys();
+ $link.attr( 'title', tooltip );
}
if ( nextnode ) {
+ // Case: nextnode is a DOM element (was the only option before MW 1.17, in wikibits.js)
+ // Case: nextnode is a CSS selector for jQuery
if ( nextnode.nodeType || typeof nextnode === 'string' ) {
- // nextnode is a DOM element (was the only option before MW 1.17, in wikibits.js)
- // or nextnode is a CSS selector for jQuery
nextnode = $ul.find( nextnode );
- } else if ( !nextnode.jquery || ( nextnode.length && nextnode[0].parentNode !== $ul[0] ) ) {
- // Fallback
- $ul.append( $item );
- return $item[0];
+ } else if ( !nextnode.jquery ) {
+ // Error: Invalid nextnode
+ nextnode = undefined;
}
- if ( nextnode.length === 1 ) {
- // nextnode is a jQuery object that represents exactly one element
- nextnode.before( $item );
- return $item[0];
+ if ( nextnode && ( nextnode.length !== 1 || nextnode[0].parentNode !== $ul[0] ) ) {
+ // Error: nextnode must resolve to a single node
+ // Error: nextnode must have the associated <ul> as its parent
+ nextnode = undefined;
}
}
- // Fallback (this is the default behavior)
- $ul.append( $item );
- return $item[0];
+ // Case: nextnode is a jQuery-wrapped DOM element
+ if ( nextnode ) {
+ nextnode.before( $item );
+ } else {
+ // Fallback (this is the default behavior)
+ $ul.append( $item );
+ }
+
+ // Update tooltip for the access key after inserting into DOM
+ // to get a localized access key label (bug 67946).
+ $link.updateTooltipAccessKeys();
+ return $item[0];
},
/**
@@ -332,7 +340,7 @@
// HTML5 defines a string as valid e-mail address if it matches
// the ABNF:
- // 1 * ( atext / "." ) "@" ldh-str 1*( "." ldh-str )
+ // 1 * ( atext / "." ) "@" ldh-str 1*( "." ldh-str )
// With:
// - atext : defined in RFC 5322 section 3.2.3
// - ldh-str : defined in RFC 1034 section 3.5
@@ -353,12 +361,12 @@
rfc5322Atext = 'a-z0-9!#$%&\'*+\\-/=?^_`{|}~';
// Next define the RFC 1034 'ldh-str'
- // <domain> ::= <subdomain> | " "
- // <subdomain> ::= <label> | <subdomain> "." <label>
- // <label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
- // <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
- // <let-dig-hyp> ::= <let-dig> | "-"
- // <let-dig> ::= <letter> | <digit>
+ // <domain> ::= <subdomain> | " "
+ // <subdomain> ::= <label> | <subdomain> "." <label>
+ // <label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
+ // <ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
+ // <let-dig-hyp> ::= <let-dig> | "-"
+ // <let-dig> ::= <letter> | <digit>
rfc1034LdhStr = 'a-z0-9\\-';
html5EmailRegexp = new RegExp(
@@ -435,6 +443,19 @@
return address.search( new RegExp( '^' + RE_IPV6_ADD + block + '$' ) ) !== -1
&& address.search( /::/ ) !== -1 && address.search( /::.*::/ ) === -1;
+ },
+
+ /**
+ * Check whether a string is an IP address
+ *
+ * @since 1.25
+ * @param {string} address String to check
+ * @param {boolean} allowBlock True if a block of IPs should be allowed
+ * @return {boolean}
+ */
+ isIPAddress: function ( address, allowBlock ) {
+ return util.isIPv4Address( address, allowBlock ) ||
+ util.isIPv6Address( address, allowBlock );
}
};
diff --git a/skins/ArchLinux/ArchLinux.php b/skins/ArchLinux/ArchLinux.php
index 75f776d6..fce0e822 100644
--- a/skins/ArchLinux/ArchLinux.php
+++ b/skins/ArchLinux/ArchLinux.php
@@ -1,53 +1,14 @@
<?php
-/**
- * ArchLinux skin (based on MonoBook)
- *
- * Translated from gwicke's previous TAL template version to remove
- * dependency on PHPTAL.
- *
- * 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 Skins
- */
-$wgExtensionCredits['skin'][] = array(
- 'path' => __FILE__,
- 'name' => 'ArchLinux',
- 'description' => 'MediaWiki skin based on MonoBook, customized for Parabola',
- 'url' => 'https://www.parabola.nu/',
- 'author' => array( 'Pierre Schmitz' ),
- 'license-name' => 'GPLv2+',
-);
-
-// Register files
-$wgAutoloadClasses['SkinArchLinux'] = __DIR__ . '/SkinArchLinux.php';
-$wgAutoloadClasses['ArchLinuxTemplate'] = __DIR__ . '/ArchLinuxTemplate.php';
-
-// Register skin
-$wgValidSkinNames['archlinux'] = 'ArchLinux';
-
-// Register modules
-$wgResourceModules['skins.archlinux.styles'] = array(
- 'styles' => array(
- 'main.css' => array( 'media' => 'screen' ),
- 'archnavbar.css' => array( 'media' => 'screen' ),
- 'arch.css' => array( 'media' => 'screen' ),
- 'print.css' => array( 'media' => 'print' )
- ),
- 'remoteSkinPath' => 'ArchLinux',
- 'localBasePath' => __DIR__,
-);
+if ( function_exists( 'wfLoadSkin' ) ) {
+ wfLoadSkin( 'ArchLinux' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['MonoBook'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for MonoBook skin. Please use wfLoadSkin instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the ArchLinux skin requires MediaWiki 1.25+' );
+}
diff --git a/skins/ArchLinux/ArchLinuxTemplate.php b/skins/ArchLinux/ArchLinuxTemplate.php
index ba65cb8a..938cd36f 100644
--- a/skins/ArchLinux/ArchLinuxTemplate.php
+++ b/skins/ArchLinux/ArchLinuxTemplate.php
@@ -72,11 +72,12 @@ class ArchLinuxTemplate extends BaseTemplate {
}
?>
+ <?php echo $this->getIndicators(); ?>
<h1 id="firstHeading" class="firstHeading" lang="<?php
$this->data['pageLanguage'] =
$this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
$this->text( 'pageLanguage' );
- ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+ ?>"><?php $this->html( 'title' ) ?></h1>
<div id="bodyContent" class="mw-body-content">
<div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
@@ -143,8 +144,10 @@ class ArchLinuxTemplate extends BaseTemplate {
<?php
echo Html::element( 'a', array(
'href' => $this->data['nav_urls']['mainpage']['href'],
- 'style' => "background-image: url({$this->data['logopath']});" )
- + Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ); ?>
+ 'class' => 'mw-wiki-logo',
+ )
+ + Linker::tooltipAndAccesskeyAttribs( 'p-logo' )
+ ); ?>
</div>
<?php
@@ -200,6 +203,7 @@ class ArchLinuxTemplate extends BaseTemplate {
$this->printTrail();
echo Html::closeElement( 'body' );
echo Html::closeElement( 'html' );
+ echo "\n";
wfRestoreWarnings();
} // end of execute() method
@@ -224,6 +228,9 @@ class ArchLinuxTemplate extends BaseTemplate {
continue;
}
+ // Numeric strings gets an integer when set as key, cast back - T73639
+ $boxName = (string)$boxName;
+
if ( $boxName == 'SEARCH' ) {
$this->searchBox();
} elseif ( $boxName == 'TOOLBOX' ) {
diff --git a/skins/ArchLinux/COPYING b/skins/ArchLinux/COPYING
index 019694a9..d159169d 100644
--- a/skins/ArchLinux/COPYING
+++ b/skins/ArchLinux/COPYING
@@ -1,65 +1,65 @@
-== GNU GENERAL PUBLIC LICENSE ==
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
-Version 2, June 1991
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
+ Preamble
-=== Preamble ===
-
-The licenses for most software are designed to take away your
+ The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
+the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
-When we speak of free software, we are referring to freedom, not
+ When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
-To protect your rights, we need to make restrictions that forbid
+ To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
-For example, if you distribute copies of such a program, whether
+ For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
-We protect your rights with two steps: (1) copyright the software, and
+ We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
-Also, for each author's protection and ours, we want to make certain
+ Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
-Finally, any free program is threatened constantly by software
+ Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
-The precise terms and conditions for copying, distribution and
+ The precise terms and conditions for copying, distribution and
modification follow.
-== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-'''0.''' This License applies to any program or other work which contains
+ 0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
@@ -76,7 +76,7 @@ is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
-'''1.''' You may copy and distribute verbatim copies of the Program's
+ 1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
@@ -87,29 +87,29 @@ along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
-'''2.''' You may modify your copy or copies of the Program or any portion
+ 2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
- '''a)''' You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- '''b)''' You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- '''c)''' If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
@@ -131,26 +131,26 @@ with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
-'''3.''' You may copy and distribute the Program (or a work based on it,
+ 3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
- '''a)''' Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
- '''b)''' Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
- '''c)''' Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
@@ -169,7 +169,7 @@ access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
-'''4.''' You may not copy, modify, sublicense, or distribute the Program
+ 4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
@@ -177,7 +177,7 @@ However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
-'''5.''' You are not required to accept this License, since you have not
+ 5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
@@ -186,7 +186,7 @@ Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
-'''6.''' Each time you redistribute the Program (or any work based on the
+ 6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
@@ -194,7 +194,7 @@ restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
-'''7.''' If, as a consequence of a court judgment or allegation of patent
+ 7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
@@ -226,7 +226,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
-'''8.''' If the distribution and/or use of the Program is restricted in
+ 8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
@@ -234,7 +234,7 @@ those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
-'''9.''' The Free Software Foundation may publish revised and/or new versions
+ 9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
@@ -247,7 +247,7 @@ Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
-'''10.''' If you wish to incorporate parts of the Program into other free
+ 10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
@@ -255,9 +255,9 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
-=== NO WARRANTY ===
+ NO WARRANTY
-'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
@@ -267,7 +267,7 @@ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
-'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
@@ -277,47 +277,45 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
- '''END OF TERMS AND CONDITIONS'''
+ END OF TERMS AND CONDITIONS
-== How to Apply These Terms to Your New Programs ==
+ How to Apply These Terms to Your New Programs
-If you develop a new program, and you want it to be of the greatest
+ If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
-To do so, attach the following notices to the program. It is safest
+ To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
- <one line to give the program's name and a brief idea of what it does.>
-
- Copyright (C) <year> <name of author>
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
- 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 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
+ 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.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
@@ -328,15 +326,14 @@ You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
- Ty Coon, President of Vice
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
+library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
diff --git a/skins/ArchLinux/arch.css b/skins/ArchLinux/arch.css
index 9432d813..c8abb749 100644
--- a/skins/ArchLinux/arch.css
+++ b/skins/ArchLinux/arch.css
@@ -111,12 +111,12 @@ a.new,
/* bump down the personal toolbar (top menu) */
#p-personal {
- top: 70px;
+ top: 5px;
}
/* bump down the action tabs (page, discuss, edit, etc.) */
#p-cactions {
- top: 92px;
+ top: 27px;
}
/* bump down the main content to make room for navbar */
diff --git a/skins/ArchLinux/main.css b/skins/ArchLinux/main.css
index e0e0dc77..809fe184 100644
--- a/skins/ArchLinux/main.css
+++ b/skins/ArchLinux/main.css
@@ -63,6 +63,8 @@ div#globalWrapper {
width: 100%;
margin: 0;
padding: 0;
+ position: relative;
+ z-index: 0;
}
/* general styles */
@@ -91,6 +93,20 @@ pre, .mw-code {
#firstHeading {
padding-top: 0;
+ overflow: visible;
+}
+
+.mw-indicators {
+ float: right;
+ line-height: 1.5em;
+ font-size: 95%;
+}
+
+.mw-indicator {
+ display: -moz-inline-block;
+ display: inline-block;
+ zoom: 1;
+ *display: inline;
}
/*
diff --git a/skins/ArchLinux/skin.json b/skins/ArchLinux/skin.json
new file mode 100644
index 00000000..631a57db
--- /dev/null
+++ b/skins/ArchLinux/skin.json
@@ -0,0 +1,37 @@
+{
+ "name": "ArchLinux",
+ "author": [ "Pierre Schmitz" ],
+ "url": "https://www.parabola.nu",
+ "description": "MediaWiki skin based on MonoBook, customized for Parabola",
+ "license-name": "GPL-2.0+",
+ "type": "skin",
+ "ValidSkinNames": {
+ "archlinux": "ArchLinux"
+ },
+ "ResourceModules": {
+ "skins.archlinux.styles": {
+ "styles": {
+ "main.css": {
+ "media": "screen"
+ },
+ "archnavbar.css": {
+ "media": "screen"
+ },
+ "arch.css": {
+ "media": "screen"
+ },
+ "print.css": {
+ "media": "print"
+ }
+ }
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteSkinPath": "ArchLinux"
+ },
+ "AutoloadClasses": {
+ "SkinArchLinux": "SkinArchLinux.php",
+ "ArchLinuxTemplate": "ArchLinuxTemplate.php"
+ }
+}
diff --git a/skins/CologneBlue/COPYING b/skins/CologneBlue/COPYING
index 019694a9..d159169d 100644
--- a/skins/CologneBlue/COPYING
+++ b/skins/CologneBlue/COPYING
@@ -1,65 +1,65 @@
-== GNU GENERAL PUBLIC LICENSE ==
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
-Version 2, June 1991
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
+ Preamble
-=== Preamble ===
-
-The licenses for most software are designed to take away your
+ The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
+the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
-When we speak of free software, we are referring to freedom, not
+ When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
-To protect your rights, we need to make restrictions that forbid
+ To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
-For example, if you distribute copies of such a program, whether
+ For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
-We protect your rights with two steps: (1) copyright the software, and
+ We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
-Also, for each author's protection and ours, we want to make certain
+ Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
-Finally, any free program is threatened constantly by software
+ Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
-The precise terms and conditions for copying, distribution and
+ The precise terms and conditions for copying, distribution and
modification follow.
-== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-'''0.''' This License applies to any program or other work which contains
+ 0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
@@ -76,7 +76,7 @@ is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
-'''1.''' You may copy and distribute verbatim copies of the Program's
+ 1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
@@ -87,29 +87,29 @@ along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
-'''2.''' You may modify your copy or copies of the Program or any portion
+ 2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
- '''a)''' You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- '''b)''' You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- '''c)''' If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
@@ -131,26 +131,26 @@ with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
-'''3.''' You may copy and distribute the Program (or a work based on it,
+ 3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
- '''a)''' Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
- '''b)''' Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
- '''c)''' Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
@@ -169,7 +169,7 @@ access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
-'''4.''' You may not copy, modify, sublicense, or distribute the Program
+ 4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
@@ -177,7 +177,7 @@ However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
-'''5.''' You are not required to accept this License, since you have not
+ 5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
@@ -186,7 +186,7 @@ Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
-'''6.''' Each time you redistribute the Program (or any work based on the
+ 6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
@@ -194,7 +194,7 @@ restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
-'''7.''' If, as a consequence of a court judgment or allegation of patent
+ 7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
@@ -226,7 +226,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
-'''8.''' If the distribution and/or use of the Program is restricted in
+ 8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
@@ -234,7 +234,7 @@ those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
-'''9.''' The Free Software Foundation may publish revised and/or new versions
+ 9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
@@ -247,7 +247,7 @@ Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
-'''10.''' If you wish to incorporate parts of the Program into other free
+ 10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
@@ -255,9 +255,9 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
-=== NO WARRANTY ===
+ NO WARRANTY
-'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
@@ -267,7 +267,7 @@ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
-'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
@@ -277,47 +277,45 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
- '''END OF TERMS AND CONDITIONS'''
+ END OF TERMS AND CONDITIONS
-== How to Apply These Terms to Your New Programs ==
+ How to Apply These Terms to Your New Programs
-If you develop a new program, and you want it to be of the greatest
+ If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
-To do so, attach the following notices to the program. It is safest
+ To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
- <one line to give the program's name and a brief idea of what it does.>
-
- Copyright (C) <year> <name of author>
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
- 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 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
+ 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.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
@@ -328,15 +326,14 @@ You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
- Ty Coon, President of Vice
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
+library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
diff --git a/skins/CologneBlue/CologneBlue.php b/skins/CologneBlue/CologneBlue.php
index a8fee10e..96001516 100644
--- a/skins/CologneBlue/CologneBlue.php
+++ b/skins/CologneBlue/CologneBlue.php
@@ -1,50 +1,14 @@
<?php
-/**
- * CologneBlue skin
- *
- * @file
- * @ingroup Extensions
- *
- * 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
- */
-$wgExtensionCredits['skin'][] = array(
- 'path' => __FILE__,
- 'name' => 'Cologne Blue',
- 'namemsg' => 'skinname-cologneblue',
- 'descriptionmsg' => 'cologneblue-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Skin:Cologne_Blue',
- 'author' => array( 'Lee Daniel Crocker', '...' ),
- 'license-name' => 'GPLv2+',
-);
-
-// Register files
-$wgAutoloadClasses['SkinCologneBlue'] = __DIR__ . '/SkinCologneBlue.php';
-$wgAutoloadClasses['CologneBlueTemplate'] = __DIR__ . '/SkinCologneBlue.php';
-$wgMessagesDirs['CologneBlue'] = __DIR__ . '/i18n';
-
-// Register skin
-$wgValidSkinNames['cologneblue'] = 'CologneBlue';
-
-// Register modules
-$wgResourceModules['skins.cologneblue'] = array(
- 'styles' => array(
- 'resources/screen.css' => array( 'media' => 'screen' ),
- 'resources/print.css' => array( 'media' => 'print' ),
- ),
- 'remoteBasePath' => $GLOBALS['wgStylePath'] . '/CologneBlue',
- 'localBasePath' => __DIR__,
-);
+if ( function_exists( 'wfLoadSkin' ) ) {
+ wfLoadSkin( 'CologneBlue' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['CologneBlue'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for CologneBlue skin. Please use wfLoadSkin instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the CologneBlue skin requires MediaWiki 1.25+' );
+}
diff --git a/skins/CologneBlue/SkinCologneBlue.php b/skins/CologneBlue/SkinCologneBlue.php
index 41bc0bae..7b7aabd5 100644
--- a/skins/CologneBlue/SkinCologneBlue.php
+++ b/skins/CologneBlue/SkinCologneBlue.php
@@ -348,10 +348,11 @@ class CologneBlueTemplate extends BaseTemplate {
<?php
}
?>
+ <?php echo $this->getIndicators(); ?>
<h1 id="firstHeading" lang="<?php
$this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
$this->text( 'pageLanguage' );
- ?>"><span dir="auto"><?php echo $this->data['title'] ?></span></h1>
+ ?>"><?php echo $this->data['title'] ?></h1>
<?php
if ( $this->translator->translate( 'tagline' ) ) {
?>
diff --git a/skins/CologneBlue/i18n/af.json b/skins/CologneBlue/i18n/af.json
index e4bd3045..9bf97ed0 100644
--- a/skins/CologneBlue/i18n/af.json
+++ b/skins/CologneBlue/i18n/af.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Keulen blou"
}
diff --git a/skins/CologneBlue/i18n/ar.json b/skins/CologneBlue/i18n/ar.json
index b03e7811..2c9b7f88 100644
--- a/skins/CologneBlue/i18n/ar.json
+++ b/skins/CologneBlue/i18n/ar.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "Meno25"
+ "Meno25",
+ "Khaled"
]
},
"cologneblue.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة كولون بلو */",
"cologneblue.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة كولون بلو */",
- "skinname-cologneblue": "كولون بلو"
+ "skinname-cologneblue": "كولون بلو",
+ "cologneblue-desc": "تصميم خفيف بالحد الأدنى من التنسيقات."
}
diff --git a/skins/CologneBlue/i18n/av.json b/skins/CologneBlue/i18n/av.json
new file mode 100644
index 00000000..2cc4277d
--- /dev/null
+++ b/skins/CologneBlue/i18n/av.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazimagomedov"
+ ]
+ },
+ "cologneblue-desc": "Бищун дагьаб форматированиегун бигьаяб куцалъул тема"
+}
diff --git a/skins/CologneBlue/i18n/bcc.json b/skins/CologneBlue/i18n/bcc.json
index 51780c74..f94cc62f 100644
--- a/skins/CologneBlue/i18n/bcc.json
+++ b/skins/CologneBlue/i18n/bcc.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "نیلی کولاجن"
}
diff --git a/skins/CologneBlue/i18n/be-tarask.json b/skins/CologneBlue/i18n/be-tarask.json
index fa74c299..e7967a38 100644
--- a/skins/CologneBlue/i18n/be-tarask.json
+++ b/skins/CologneBlue/i18n/be-tarask.json
@@ -1,3 +1,9 @@
{
- "skinname-cologneblue": "Кёльнскі смутак"
+ "@metadata": {
+ "authors": [
+ "Red Winged Duck"
+ ]
+ },
+ "skinname-cologneblue": "Кёльнскі смутак",
+ "cologneblue-desc": "Лёгкая тэма афармленьня зь мінімальным фарматаваньнем"
}
diff --git a/skins/CologneBlue/i18n/be.json b/skins/CologneBlue/i18n/be.json
index 472776eb..a4829c2f 100644
--- a/skins/CologneBlue/i18n/be.json
+++ b/skins/CologneBlue/i18n/be.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Сіні Кёльн"
}
diff --git a/skins/CologneBlue/i18n/bg.json b/skins/CologneBlue/i18n/bg.json
index 73269582..973e81bb 100644
--- a/skins/CologneBlue/i18n/bg.json
+++ b/skins/CologneBlue/i18n/bg.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Кьолнско синьо"
}
diff --git a/skins/CologneBlue/i18n/ca.json b/skins/CologneBlue/i18n/ca.json
index ded284b1..897ff14d 100644
--- a/skins/CologneBlue/i18n/ca.json
+++ b/skins/CologneBlue/i18n/ca.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Colònia blava"
}
diff --git a/skins/CologneBlue/i18n/crh-cyrl.json b/skins/CologneBlue/i18n/crh-cyrl.json
index 26d10080..020b8a5a 100644
--- a/skins/CologneBlue/i18n/crh-cyrl.json
+++ b/skins/CologneBlue/i18n/crh-cyrl.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Кёльн асретлиги"
}
diff --git a/skins/CologneBlue/i18n/crh-latn.json b/skins/CologneBlue/i18n/crh-latn.json
index afda05cc..4f01276c 100644
--- a/skins/CologneBlue/i18n/crh-latn.json
+++ b/skins/CologneBlue/i18n/crh-latn.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Köln asretligi"
}
diff --git a/skins/CologneBlue/i18n/cy.json b/skins/CologneBlue/i18n/cy.json
index 7508e147..7d341874 100644
--- a/skins/CologneBlue/i18n/cy.json
+++ b/skins/CologneBlue/i18n/cy.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Glas Cwlen"
}
diff --git a/skins/CologneBlue/i18n/da.json b/skins/CologneBlue/i18n/da.json
index fdd70276..57d11427 100644
--- a/skins/CologneBlue/i18n/da.json
+++ b/skins/CologneBlue/i18n/da.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Kølnerblå"
}
diff --git a/skins/CologneBlue/i18n/de.json b/skins/CologneBlue/i18n/de.json
index 1dc8193d..d28846fa 100644
--- a/skins/CologneBlue/i18n/de.json
+++ b/skins/CologneBlue/i18n/de.json
@@ -1,11 +1,12 @@
{
"@metadata": {
"authors": [
- "Metalhead64"
+ "Metalhead64",
+ "Kghbln"
]
},
"cologneblue.css": "/* Das folgende CSS wird für Benutzer der Kölnisch-Blau-Benutzeroberfläche geladen. */",
"cologneblue.js": "/* Das folgende JavaScript wird für Benutzer der Kölnisch-Blau-Benutzeroberfläche geladen. */",
"skinname-cologneblue": "Kölnisch Blau",
- "cologneblue-desc": "Eine leichtgewichtige Benutzeroberfläche mit minimaler Formatierung"
+ "cologneblue-desc": "Stellt eine minimalistische Benutzeroberfläche bereit"
}
diff --git a/skins/CologneBlue/i18n/dsb.json b/skins/CologneBlue/i18n/dsb.json
index 5118afbf..a7d4be9d 100644
--- a/skins/CologneBlue/i18n/dsb.json
+++ b/skins/CologneBlue/i18n/dsb.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Kölnski Módry"
}
diff --git a/skins/CologneBlue/i18n/eu.json b/skins/CologneBlue/i18n/eu.json
index 1c79342b..f204e102 100644
--- a/skins/CologneBlue/i18n/eu.json
+++ b/skins/CologneBlue/i18n/eu.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Cologne Blue"
}
diff --git a/skins/CologneBlue/i18n/fi.json b/skins/CologneBlue/i18n/fi.json
index bf6de1c2..1d7a143b 100644
--- a/skins/CologneBlue/i18n/fi.json
+++ b/skins/CologneBlue/i18n/fi.json
@@ -2,10 +2,12 @@
"@metadata": {
"authors": [
"Crt",
- "Nedergard"
+ "Nedergard",
+ "McSalama"
]
},
"cologneblue.css": "/* Tämä sivu sisältää Kölnin sininen -ulkoasua muuttavia tyylejä. */",
"cologneblue.js": "/* Tämän sivun JavaScript-koodi liitetään Kölnin sininen -tyyliin */",
- "skinname-cologneblue": "Kölnin sininen"
+ "skinname-cologneblue": "Kölnin sininen",
+ "cologneblue-desc": "Kevyt teema minimaalisella muotoilulla"
}
diff --git a/skins/CologneBlue/i18n/fo.json b/skins/CologneBlue/i18n/fo.json
index e07b65aa..e927df18 100644
--- a/skins/CologneBlue/i18n/fo.json
+++ b/skins/CologneBlue/i18n/fo.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Cologne-bláur"
}
diff --git a/skins/CologneBlue/i18n/gl.json b/skins/CologneBlue/i18n/gl.json
index db86c26a..15cfa25b 100644
--- a/skins/CologneBlue/i18n/gl.json
+++ b/skins/CologneBlue/i18n/gl.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "Toliño"
+ "Toliño",
+ "Elisardojm"
]
},
"cologneblue.css": "/* O CSS que se coloque aquí afectará a quen use a aparencia Azul colonial */",
"cologneblue.js": "/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Azul colonial */",
- "skinname-cologneblue": "Azul colonial"
+ "skinname-cologneblue": "Azul colonial",
+ "cologneblue-desc": "Un tema lixeiro con formato minimalista"
}
diff --git a/skins/CologneBlue/i18n/hi.json b/skins/CologneBlue/i18n/hi.json
new file mode 100644
index 00000000..ae5564c6
--- /dev/null
+++ b/skins/CologneBlue/i18n/hi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Siddhartha Ghai"
+ ]
+ },
+ "cologneblue-desc": "न्यूनतम प्रारूपण वाली एक हलकी-फुल्की त्वचा"
+}
diff --git a/skins/CologneBlue/i18n/hr.json b/skins/CologneBlue/i18n/hr.json
index 0ad4e574..bc0e97cf 100644
--- a/skins/CologneBlue/i18n/hr.json
+++ b/skins/CologneBlue/i18n/hr.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Kölnska plava"
}
diff --git a/skins/CologneBlue/i18n/hy.json b/skins/CologneBlue/i18n/hy.json
index 136f637d..c1e3f551 100644
--- a/skins/CologneBlue/i18n/hy.json
+++ b/skins/CologneBlue/i18n/hy.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Քյոլնի թախիծ"
}
diff --git a/skins/CologneBlue/i18n/is.json b/skins/CologneBlue/i18n/is.json
index 2b109669..67b6b8f7 100644
--- a/skins/CologneBlue/i18n/is.json
+++ b/skins/CologneBlue/i18n/is.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Kölnarblátt"
}
diff --git a/skins/CologneBlue/i18n/kk-arab.json b/skins/CologneBlue/i18n/kk-arab.json
index 49ea4fb1..962dc77e 100644
--- a/skins/CologneBlue/i18n/kk-arab.json
+++ b/skins/CologneBlue/i18n/kk-arab.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"cologneblue.css": "/* مىندا ورنالاستىرىلعان CSS تەك «كولن زەڭگىرلىگى» (cologneblue) مانەرىن پايدالانۋشىلارىنا ىقپال ەتەدى skin */",
"cologneblue.js": "/* مىنداعى JavaScript تەك «كولن زەڭگىرلىگى» (cologneblue) مانەرىن پايدالانۋشىلار ٴۇشىن جەگىلەدى */",
"skinname-cologneblue": "كولن زەڭگىرلىگى (cologneblue)"
diff --git a/skins/CologneBlue/i18n/kk-latn.json b/skins/CologneBlue/i18n/kk-latn.json
index 0f29340a..d11974c3 100644
--- a/skins/CologneBlue/i18n/kk-latn.json
+++ b/skins/CologneBlue/i18n/kk-latn.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"cologneblue.css": "/* Mında ornalastırılğan CSS tek «Köln zeñgirligi» (cologneblue) mänerin paýdalanwşılarına ıqpal etedi skin */",
"cologneblue.js": "/* Mındağı JavaScript tek «Köln zeñgirligi» (cologneblue) mänerin paýdalanwşılar üşin jegiledi */",
"skinname-cologneblue": "Köln zeñgirligi (cologneblue)"
diff --git a/skins/CologneBlue/i18n/ksh.json b/skins/CologneBlue/i18n/ksh.json
index 0a0649ae..e5338591 100644
--- a/skins/CologneBlue/i18n/ksh.json
+++ b/skins/CologneBlue/i18n/ksh.json
@@ -4,7 +4,8 @@
"Purodha"
]
},
- "cologneblue.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Kölsch Blau“ */",
- "cologneblue.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Kölsch Blou\" jescheck */",
- "skinname-cologneblue": "Kölsch Blau"
+ "cologneblue.css": "/* Dat CSS heh aan dä Schtäll wirrek blohß op de Bedehnbovverfläsch „Kölsch Blou“ */",
+ "cologneblue.js": "/* De JavaSkreppte fun heh krijje alle Sigge met dä Bedehnbovverfläsch „Kölsch Blou“ jescheck */",
+ "skinname-cologneblue": "Kölsch Blou",
+ "cologneblue-desc": "En einfache Bedehnbovverfläsch met winnesch Schnikschnak."
}
diff --git a/skins/CologneBlue/i18n/la.json b/skins/CologneBlue/i18n/la.json
index bbc2ffe1..fe5d28b1 100644
--- a/skins/CologneBlue/i18n/la.json
+++ b/skins/CologneBlue/i18n/la.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Caerulus Colonia"
}
diff --git a/skins/CologneBlue/i18n/li.json b/skins/CologneBlue/i18n/li.json
index b355ea26..6aeab06a 100644
--- a/skins/CologneBlue/i18n/li.json
+++ b/skins/CologneBlue/i18n/li.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Keuls blauw"
}
diff --git a/skins/CologneBlue/i18n/lt.json b/skins/CologneBlue/i18n/lt.json
index 56049718..61c7067f 100644
--- a/skins/CologneBlue/i18n/lt.json
+++ b/skins/CologneBlue/i18n/lt.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Kelno mėlyna"
}
diff --git a/skins/CologneBlue/i18n/lzh.json b/skins/CologneBlue/i18n/lzh.json
index 33372f1b..c88f4bc0 100644
--- a/skins/CologneBlue/i18n/lzh.json
+++ b/skins/CologneBlue/i18n/lzh.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"cologneblue.css": "/* 此之 CSS 用於馨藍面之簿也 */",
"cologneblue.js": "/* 此之JavaScript將載於用馨藍面之簿 */",
"skinname-cologneblue": "馨藍"
diff --git a/skins/CologneBlue/i18n/mr.json b/skins/CologneBlue/i18n/mr.json
index 85be6199..8a1a9cdf 100644
--- a/skins/CologneBlue/i18n/mr.json
+++ b/skins/CologneBlue/i18n/mr.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "सुरेखनीळी"
}
diff --git a/skins/CologneBlue/i18n/mwl.json b/skins/CologneBlue/i18n/mwl.json
index c00c3693..2dd05b46 100644
--- a/skins/CologneBlue/i18n/mwl.json
+++ b/skins/CologneBlue/i18n/mwl.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Azul"
}
diff --git a/skins/CologneBlue/i18n/nap.json b/skins/CologneBlue/i18n/nap.json
new file mode 100644
index 00000000..2910821f
--- /dev/null
+++ b/skins/CologneBlue/i18n/nap.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "cologneblue-desc": "Skin leggera co' furmattazione minima"
+}
diff --git a/skins/CologneBlue/i18n/nb.json b/skins/CologneBlue/i18n/nb.json
index 124cb786..5eb0b9b3 100644
--- a/skins/CologneBlue/i18n/nb.json
+++ b/skins/CologneBlue/i18n/nb.json
@@ -1,5 +1,7 @@
{
+ "@metadata": [],
"cologneblue.css": "/* CSS i denne fila vil gjelde alle som bruker drakta Kølnerblå */",
"cologneblue.js": "/* Javascript i denne fila vil gjelde for brukere av drakta Kølnerblå */",
- "skinname-cologneblue": "Kølnerblå"
+ "skinname-cologneblue": "Kølnerblå",
+ "cologneblue-desc": "En lettvekterdrakt med minimal formatering"
}
diff --git a/skins/CologneBlue/i18n/nds-nl.json b/skins/CologneBlue/i18n/nds-nl.json
index b355ea26..6aeab06a 100644
--- a/skins/CologneBlue/i18n/nds-nl.json
+++ b/skins/CologneBlue/i18n/nds-nl.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Keuls blauw"
}
diff --git a/skins/CologneBlue/i18n/nds.json b/skins/CologneBlue/i18n/nds.json
index 05bba6ab..3587d5a9 100644
--- a/skins/CologneBlue/i18n/nds.json
+++ b/skins/CologneBlue/i18n/nds.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Kölsch Blau"
}
diff --git a/skins/CologneBlue/i18n/nl.json b/skins/CologneBlue/i18n/nl.json
index c6ead3fe..26d7a693 100644
--- a/skins/CologneBlue/i18n/nl.json
+++ b/skins/CologneBlue/i18n/nl.json
@@ -6,5 +6,6 @@
},
"cologneblue.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Keuls blauw */",
"cologneblue.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Keuls blauw gebruiken */",
- "skinname-cologneblue": "Keuls blauw"
+ "skinname-cologneblue": "Keuls blauw",
+ "cologneblue-desc": "Een lichtgewicht uiterlijk met minimale opmaak"
}
diff --git a/skins/CologneBlue/i18n/os.json b/skins/CologneBlue/i18n/os.json
index c0295711..d7483528 100644
--- a/skins/CologneBlue/i18n/os.json
+++ b/skins/CologneBlue/i18n/os.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Кёльны æрхæндæг"
}
diff --git a/skins/CologneBlue/i18n/ps.json b/skins/CologneBlue/i18n/ps.json
index 48a15cf5..190488e6 100644
--- a/skins/CologneBlue/i18n/ps.json
+++ b/skins/CologneBlue/i18n/ps.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "شين کلون"
}
diff --git a/skins/CologneBlue/i18n/qqq.json b/skins/CologneBlue/i18n/qqq.json
index b13f7ca4..e6277cec 100644
--- a/skins/CologneBlue/i18n/qqq.json
+++ b/skins/CologneBlue/i18n/qqq.json
@@ -9,5 +9,5 @@
"cologneblue.css": "{{optional}}",
"cologneblue.js": "{{optional}}",
"skinname-cologneblue": "{{optional}}",
- "cologneblue-desc": "Used in [[Special:Version]], description of Cologne Blue skin."
+ "cologneblue-desc": "{{desc|what=skin|name=Cologne Blue|url=https://www.mediawiki.org/wiki/Skin:Cologne_Blue}}"
}
diff --git a/skins/CologneBlue/i18n/roa-tara.json b/skins/CologneBlue/i18n/roa-tara.json
index 0a881c34..75d08a7c 100644
--- a/skins/CologneBlue/i18n/roa-tara.json
+++ b/skins/CologneBlue/i18n/roa-tara.json
@@ -6,5 +6,6 @@
},
"cologneblue.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Blu Cologne */",
"cologneblue.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Blu Cologne */",
- "skinname-cologneblue": "Blu Cologne"
+ "skinname-cologneblue": "Blu Cologne",
+ "cologneblue-desc": "'Nu skin leggere cu 'nu picca-picche de formattazzione"
}
diff --git a/skins/CologneBlue/i18n/ru.json b/skins/CologneBlue/i18n/ru.json
index a318aaf5..d411c209 100644
--- a/skins/CologneBlue/i18n/ru.json
+++ b/skins/CologneBlue/i18n/ru.json
@@ -3,11 +3,12 @@
"authors": [
"Kaganer",
"Okras",
- "Rave"
+ "Rave",
+ "NBS"
]
},
"cologneblue.css": "/* Размещённый здесь CSS будет применяться к теме оформления Cologne Blue */",
"cologneblue.js": "/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Cologne Blue */",
"skinname-cologneblue": "Кёльнская тоска",
- "cologneblue-desc": "Легкая тема оформления с минимальным форматированием"
+ "cologneblue-desc": "Лёгкая тема оформления с минимальным форматированием."
}
diff --git a/skins/CologneBlue/i18n/sa.json b/skins/CologneBlue/i18n/sa.json
index 6354a6be..15c6281b 100644
--- a/skins/CologneBlue/i18n/sa.json
+++ b/skins/CologneBlue/i18n/sa.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "नील"
}
diff --git a/skins/CologneBlue/i18n/sco.json b/skins/CologneBlue/i18n/sco.json
new file mode 100644
index 00000000..64822bf6
--- /dev/null
+++ b/skins/CologneBlue/i18n/sco.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "John Reid"
+ ]
+ },
+ "cologneblue-desc": "Ae lichtweicht skin wi minimal formattin"
+}
diff --git a/skins/CologneBlue/i18n/sq.json b/skins/CologneBlue/i18n/sq.json
index 3b730dfb..8e4ed953 100644
--- a/skins/CologneBlue/i18n/sq.json
+++ b/skins/CologneBlue/i18n/sq.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Kolonjë Blu"
}
diff --git a/skins/CologneBlue/i18n/sr-ec.json b/skins/CologneBlue/i18n/sr-ec.json
index f191c034..3a4a4a1e 100644
--- a/skins/CologneBlue/i18n/sr-ec.json
+++ b/skins/CologneBlue/i18n/sr-ec.json
@@ -7,5 +7,6 @@
},
"cologneblue.css": "/* CSS постављен овде ће утицати на све кориснике теме „Келнско плава“ */",
"cologneblue.js": "/* Јаваскрипт постављен овде ће се учитати за све оне који користе тему „Келнско плава“ */",
- "skinname-cologneblue": "Келнско плава"
+ "skinname-cologneblue": "Келнско плава",
+ "cologneblue-desc": "Лагана тема са минималним форматирањем"
}
diff --git a/skins/CologneBlue/i18n/sr-el.json b/skins/CologneBlue/i18n/sr-el.json
index b2320d03..cb17eb7c 100644
--- a/skins/CologneBlue/i18n/sr-el.json
+++ b/skins/CologneBlue/i18n/sr-el.json
@@ -1,5 +1,11 @@
{
+ "@metadata": {
+ "authors": [
+ "Milicevic01"
+ ]
+ },
"cologneblue.css": "/* CSS postavljen ovde će uticati na sve korisnike teme „Kelnsko plava“ */",
"cologneblue.js": "/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Kelnsko plava“ */",
- "skinname-cologneblue": "Kelnsko plava"
+ "skinname-cologneblue": "Kelnsko plava",
+ "cologneblue-desc": "Lagana tema sa minimalnim formatiranjem"
}
diff --git a/skins/CologneBlue/i18n/ta.json b/skins/CologneBlue/i18n/ta.json
index a7f6896e..d3b6d402 100644
--- a/skins/CologneBlue/i18n/ta.json
+++ b/skins/CologneBlue/i18n/ta.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "கொலோன் (Cologne) நீலம் Blue"
}
diff --git a/skins/CologneBlue/i18n/tet.json b/skins/CologneBlue/i18n/tet.json
index ddc23fa7..3574f0c6 100644
--- a/skins/CologneBlue/i18n/tet.json
+++ b/skins/CologneBlue/i18n/tet.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Kolónia azúl"
}
diff --git a/skins/CologneBlue/i18n/tyv.json b/skins/CologneBlue/i18n/tyv.json
index 1c79342b..f204e102 100644
--- a/skins/CologneBlue/i18n/tyv.json
+++ b/skins/CologneBlue/i18n/tyv.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Cologne Blue"
}
diff --git a/skins/CologneBlue/i18n/ur.json b/skins/CologneBlue/i18n/ur.json
new file mode 100644
index 00000000..761e258a
--- /dev/null
+++ b/skins/CologneBlue/i18n/ur.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Obaid Raza"
+ ]
+ },
+ "cologneblue-desc": "کم سے کم لکھائی کے ساتھ سادہ صورت"
+}
diff --git a/skins/CologneBlue/i18n/vro.json b/skins/CologneBlue/i18n/vro.json
index 751ff4c4..00c1cd7e 100644
--- a/skins/CologneBlue/i18n/vro.json
+++ b/skins/CologneBlue/i18n/vro.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-cologneblue": "Array"
}
diff --git a/skins/CologneBlue/i18n/yue.json b/skins/CologneBlue/i18n/yue.json
index e161c692..746879ce 100644
--- a/skins/CologneBlue/i18n/yue.json
+++ b/skins/CologneBlue/i18n/yue.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"cologneblue.css": "/* 響呢度放 CSS 碼去改用戶用嘅科隆藍畫面 */",
"cologneblue.js": "/* 響每一次個頁面載入時,用科隆藍畫面嘅用戶都會載入呢度任何嘅JavaScript */",
"skinname-cologneblue": "科隆藍"
diff --git a/skins/CologneBlue/i18n/zh-hans.json b/skins/CologneBlue/i18n/zh-hans.json
index 07e16f8e..44fb2292 100644
--- a/skins/CologneBlue/i18n/zh-hans.json
+++ b/skins/CologneBlue/i18n/zh-hans.json
@@ -2,11 +2,12 @@
"@metadata": {
"authors": [
"Liuxinyu970226",
- "Xiaomingyan"
+ "Xiaomingyan",
+ "Yfdyh000"
]
},
"cologneblue.css": "/* 放置于这里的CSS将影响使用科隆香水蓝皮肤的用户 */",
"cologneblue.js": "/* 这里的任何JavaScript将为使用科隆香水蓝皮肤的用户加载 */",
"skinname-cologneblue": "科隆香水蓝",
- "cologneblue-desc": "使用最低格式的轻量级皮肤"
+ "cologneblue-desc": "使用最少量格式的轻量级皮肤"
}
diff --git a/skins/CologneBlue/resources/screen.css b/skins/CologneBlue/resources/screen.css
index 58823965..7bc3c3d7 100644
--- a/skins/CologneBlue/resources/screen.css
+++ b/skins/CologneBlue/resources/screen.css
@@ -148,6 +148,17 @@ h1#firstHeading {
margin-bottom: 0;
}
+.mw-indicators {
+ float: right;
+}
+
+.mw-indicator {
+ display: -moz-inline-block;
+ display: inline-block;
+ zoom: 1;
+ *display: inline;
+}
+
#article p.subtitle, #article p.subpages, #article p.tagline {
color: #666666;
font-size: 11pt;
diff --git a/skins/CologneBlue/resources/sectionAnchor.css b/skins/CologneBlue/resources/sectionAnchor.css
new file mode 100644
index 00000000..84f813c2
--- /dev/null
+++ b/skins/CologneBlue/resources/sectionAnchor.css
@@ -0,0 +1,4 @@
+/* Hide section anchor link, no space for it in the UI */
+.mw-headline-anchor {
+ display: none;
+}
diff --git a/skins/CologneBlue/skin.json b/skins/CologneBlue/skin.json
new file mode 100644
index 00000000..1aa03902
--- /dev/null
+++ b/skins/CologneBlue/skin.json
@@ -0,0 +1,45 @@
+{
+ "name": "Cologne Blue",
+ "author": [
+ "Lee Daniel Crocker",
+ "..."
+ ],
+ "url": "https://www.mediawiki.org/wiki/Skin:Cologne_Blue",
+ "descriptionmsg": "cologneblue-desc",
+ "namemsg": "skinname-cologneblue",
+ "license-name": "GPL-2.0+",
+ "type": "skin",
+ "ValidSkinNames": {
+ "cologneblue": "CologneBlue"
+ },
+ "MessagesDirs": {
+ "CologneBlue": [
+ "i18n"
+ ]
+ },
+ "ResourceModules": {
+ "skins.cologneblue": {
+ "styles": {
+ "resources/screen.css": {
+ "media": "screen"
+ },
+ "resources/print.css": {
+ "media": "print"
+ }
+ }
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteSkinPath": "CologneBlue"
+ },
+ "ResourceModuleSkinStyles": {
+ "cologneblue": {
+ "mediawiki.sectionAnchor": "resources/sectionAnchor.css"
+ }
+ },
+ "AutoloadClasses": {
+ "SkinCologneBlue": "SkinCologneBlue.php",
+ "CologneBlueTemplate": "SkinCologneBlue.php"
+ }
+}
diff --git a/skins/Modern/COPYING b/skins/Modern/COPYING
index 019694a9..d159169d 100644
--- a/skins/Modern/COPYING
+++ b/skins/Modern/COPYING
@@ -1,65 +1,65 @@
-== GNU GENERAL PUBLIC LICENSE ==
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
-Version 2, June 1991
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
+ Preamble
-=== Preamble ===
-
-The licenses for most software are designed to take away your
+ The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
+the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
-When we speak of free software, we are referring to freedom, not
+ When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
-To protect your rights, we need to make restrictions that forbid
+ To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
-For example, if you distribute copies of such a program, whether
+ For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
-We protect your rights with two steps: (1) copyright the software, and
+ We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
-Also, for each author's protection and ours, we want to make certain
+ Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
-Finally, any free program is threatened constantly by software
+ Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
-The precise terms and conditions for copying, distribution and
+ The precise terms and conditions for copying, distribution and
modification follow.
-== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-'''0.''' This License applies to any program or other work which contains
+ 0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
@@ -76,7 +76,7 @@ is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
-'''1.''' You may copy and distribute verbatim copies of the Program's
+ 1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
@@ -87,29 +87,29 @@ along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
-'''2.''' You may modify your copy or copies of the Program or any portion
+ 2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
- '''a)''' You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- '''b)''' You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- '''c)''' If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
@@ -131,26 +131,26 @@ with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
-'''3.''' You may copy and distribute the Program (or a work based on it,
+ 3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
- '''a)''' Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
- '''b)''' Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
- '''c)''' Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
@@ -169,7 +169,7 @@ access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
-'''4.''' You may not copy, modify, sublicense, or distribute the Program
+ 4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
@@ -177,7 +177,7 @@ However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
-'''5.''' You are not required to accept this License, since you have not
+ 5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
@@ -186,7 +186,7 @@ Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
-'''6.''' Each time you redistribute the Program (or any work based on the
+ 6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
@@ -194,7 +194,7 @@ restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
-'''7.''' If, as a consequence of a court judgment or allegation of patent
+ 7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
@@ -226,7 +226,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
-'''8.''' If the distribution and/or use of the Program is restricted in
+ 8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
@@ -234,7 +234,7 @@ those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
-'''9.''' The Free Software Foundation may publish revised and/or new versions
+ 9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
@@ -247,7 +247,7 @@ Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
-'''10.''' If you wish to incorporate parts of the Program into other free
+ 10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
@@ -255,9 +255,9 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
-=== NO WARRANTY ===
+ NO WARRANTY
-'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
@@ -267,7 +267,7 @@ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
-'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
@@ -277,47 +277,45 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
- '''END OF TERMS AND CONDITIONS'''
+ END OF TERMS AND CONDITIONS
-== How to Apply These Terms to Your New Programs ==
+ How to Apply These Terms to Your New Programs
-If you develop a new program, and you want it to be of the greatest
+ If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
-To do so, attach the following notices to the program. It is safest
+ To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
- <one line to give the program's name and a brief idea of what it does.>
-
- Copyright (C) <year> <name of author>
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
- 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 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
+ 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.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
@@ -328,15 +326,14 @@ You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
- Ty Coon, President of Vice
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
+library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
diff --git a/skins/Modern/Modern.php b/skins/Modern/Modern.php
index f1a3ce34..4ba6c476 100644
--- a/skins/Modern/Modern.php
+++ b/skins/Modern/Modern.php
@@ -1,50 +1,14 @@
<?php
-/**
- * Modern skin
- *
- * @file
- * @ingroup Skins
- *
- * 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
- */
-$wgExtensionCredits['skin'][] = array(
- 'path' => __FILE__,
- 'name' => 'Modern',
- 'namemsg' => 'skinname-modern',
- 'descriptionmsg' => 'modern-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Skin:Modern',
- 'author' => array( 'River Tarnell', '...' ),
- 'license-name' => 'GPLv2+',
-);
-
-// Register files
-$wgAutoloadClasses['SkinModern'] = __DIR__ . '/SkinModern.php';
-$wgAutoloadClasses['ModernTemplate'] = __DIR__ . '/SkinModern.php';
-$wgMessagesDirs['Modern'] = __DIR__ . '/i18n';
-
-// Register skin
-$wgValidSkinNames['modern'] = 'Modern';
-
-// Register modules
-$wgResourceModules['skins.modern'] = array(
- 'styles' => array(
- 'resources/main.css' => array( 'media' => 'screen' ),
- 'resources/print.css' => array( 'media' => 'print' ),
- ),
- 'remoteBasePath' => $GLOBALS['wgStylePath'] . '/Modern',
- 'localBasePath' => __DIR__,
-);
+if ( function_exists( 'wfLoadSkin' ) ) {
+ wfLoadSkin( 'Modern' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Modern'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Modern skin. Please use wfLoadSkin instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the Modern skin requires MediaWiki 1.25+' );
+}
diff --git a/skins/Modern/SkinModern.php b/skins/Modern/SkinModern.php
index e12ad357..3c36a1a7 100644
--- a/skins/Modern/SkinModern.php
+++ b/skins/Modern/SkinModern.php
@@ -66,10 +66,13 @@ class ModernTemplate extends MonoBookTemplate {
?>
<!-- heading -->
- <div id="mw_header"><h1 id="firstHeading" lang="<?php
+ <div id="mw_header">
+ <?php echo $this->getIndicators(); ?>
+ <h1 id="firstHeading" lang="<?php
$this->data['pageLanguage'] = $this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
$this->text( 'pageLanguage' );
- ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1></div>
+ ?>"><?php $this->html( 'title' ) ?></h1>
+ </div>
<div id="mw_main">
<div id="mw_contentwrapper">
diff --git a/skins/Modern/i18n/ar.json b/skins/Modern/i18n/ar.json
index fe3fa710..80971198 100644
--- a/skins/Modern/i18n/ar.json
+++ b/skins/Modern/i18n/ar.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "Meno25"
+ "Meno25",
+ "Khaled"
]
},
"modern.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مودرن */",
"modern.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مودرن */",
- "skinname-modern": "مودرن"
+ "skinname-modern": "مودرن",
+ "modern-desc": "مظهر ازرق/رمادي بشريط جانبي وعلوي. مشتق من مونوبوك"
}
diff --git a/skins/Modern/i18n/av.json b/skins/Modern/i18n/av.json
new file mode 100644
index 00000000..11f3d30a
--- /dev/null
+++ b/skins/Modern/i18n/av.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazimagomedov"
+ ]
+ },
+ "modern-desc": "ХъахӀилаб/цӀцӀахӀилаб тема бокӀоналъул ва тӀасияб панелгун. MonoBook'алъул гьабураб"
+}
diff --git a/skins/Modern/i18n/bcc.json b/skins/Modern/i18n/bcc.json
index 036721e0..bbc32039 100644
--- a/skins/Modern/i18n/bcc.json
+++ b/skins/Modern/i18n/bcc.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "مدرن"
}
diff --git a/skins/Modern/i18n/bcl.json b/skins/Modern/i18n/bcl.json
index 84f5a0b2..e4f318e7 100644
--- a/skins/Modern/i18n/bcl.json
+++ b/skins/Modern/i18n/bcl.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "Bago"
}
diff --git a/skins/Modern/i18n/be-tarask.json b/skins/Modern/i18n/be-tarask.json
index bdd735cf..896f46b7 100644
--- a/skins/Modern/i18n/be-tarask.json
+++ b/skins/Modern/i18n/be-tarask.json
@@ -1,3 +1,9 @@
{
- "skinname-modern": "Сучаснае"
+ "@metadata": {
+ "authors": [
+ "Red Winged Duck"
+ ]
+ },
+ "skinname-modern": "Сучаснае",
+ "modern-desc": "Блакітная/шэрая тэма з бакавой і верхняй панэлямі. Паходзіць ад MonoBook."
}
diff --git a/skins/Modern/i18n/be.json b/skins/Modern/i18n/be.json
index 52a2be37..8a9670f8 100644
--- a/skins/Modern/i18n/be.json
+++ b/skins/Modern/i18n/be.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "Сучаснасць"
}
diff --git a/skins/Modern/i18n/bg.json b/skins/Modern/i18n/bg.json
index ad220251..322df9a2 100644
--- a/skins/Modern/i18n/bg.json
+++ b/skins/Modern/i18n/bg.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "Модерен"
}
diff --git a/skins/Modern/i18n/da.json b/skins/Modern/i18n/da.json
index 62c98826..51151604 100644
--- a/skins/Modern/i18n/da.json
+++ b/skins/Modern/i18n/da.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "Moderne"
}
diff --git a/skins/Modern/i18n/de.json b/skins/Modern/i18n/de.json
index a666783b..4b14cdbd 100644
--- a/skins/Modern/i18n/de.json
+++ b/skins/Modern/i18n/de.json
@@ -1,11 +1,12 @@
{
"@metadata": {
"authors": [
- "Metalhead64"
+ "Metalhead64",
+ "Kghbln"
]
},
"modern.css": "/* Das folgende CSS wird für Benutzer der Modern-Benutzeroberfläche geladen. */",
"modern.js": "/* Das folgende JavaScript wird für Benutzer der Modern-Benutzeroberfläche geladen. */",
"skinname-modern": "Modern",
- "modern-desc": "Ein Thema in blau und grau mit Seiten- und Kopfleiste. Abgeleitet von MonoBook."
+ "modern-desc": "Stellt eine klassische Benutzeroberfläche bereit"
}
diff --git a/skins/Modern/i18n/el.json b/skins/Modern/i18n/el.json
index b824d77a..01dce87a 100644
--- a/skins/Modern/i18n/el.json
+++ b/skins/Modern/i18n/el.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "Dead3y3"
+ "Dead3y3",
+ "Geraki"
]
},
"modern.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Modern skin */",
"modern.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Modern skin */",
- "skinname-modern": "Μοντέρνο"
+ "skinname-modern": "Μοντέρνο",
+ "modern-desc": "Ένα μπλε/γκρι θέμα με πλαϊνή μπάρα και μπάρα στην κορυφή. Προέρχεται από το MonoBook."
}
diff --git a/skins/Modern/i18n/en.json b/skins/Modern/i18n/en.json
index 398e5329..a22435e4 100644
--- a/skins/Modern/i18n/en.json
+++ b/skins/Modern/i18n/en.json
@@ -2,5 +2,5 @@
"modern.css": "/* CSS placed here will affect users of the Modern skin */",
"modern.js": "/* Any JavaScript here will be loaded for users using the Modern skin */",
"skinname-modern": "Modern",
- "modern-desc": "A blue/grey theme with sidebar and top bar. Derived from MonoBook."
+ "modern-desc": "A blue/grey theme with sidebar and top bar. Derived from MonoBook"
}
diff --git a/skins/Modern/i18n/fi.json b/skins/Modern/i18n/fi.json
index df0fec75..fcbcf0eb 100644
--- a/skins/Modern/i18n/fi.json
+++ b/skins/Modern/i18n/fi.json
@@ -3,10 +3,12 @@
"authors": [
"Nedergard",
"Nike",
- "Str4nd"
+ "Str4nd",
+ "McSalama"
]
},
"modern.css": "/* Tämä sivu sisältää Moderni-ulkoasua muuttavia tyylejä. */",
"modern.js": "/* Tämän sivun JavaScript-koodi liitetään Moderni-tyyliin */",
- "skinname-modern": "Moderni"
+ "skinname-modern": "Moderni",
+ "modern-desc": "Siniharmaa teema sivu- ja yläpalkilla. Muunnettu MonoBookista"
}
diff --git a/skins/Modern/i18n/fur.json b/skins/Modern/i18n/fur.json
index 62c98826..51151604 100644
--- a/skins/Modern/i18n/fur.json
+++ b/skins/Modern/i18n/fur.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "Moderne"
}
diff --git a/skins/Modern/i18n/gl.json b/skins/Modern/i18n/gl.json
index 5067710a..9d227c9f 100644
--- a/skins/Modern/i18n/gl.json
+++ b/skins/Modern/i18n/gl.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "Toliño"
+ "Toliño",
+ "Elisardojm"
]
},
"modern.css": "/* O CSS que se coloque aquí afectará a quen use a aparencia Moderna */",
"modern.js": "/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Moderna */",
- "skinname-modern": "Moderna"
+ "skinname-modern": "Moderna",
+ "modern-desc": "Un tema azul e gris, con barras lateral e superior. Derivado de MonoBook."
}
diff --git a/skins/Modern/i18n/he.json b/skins/Modern/i18n/he.json
index 27f64752..51662949 100644
--- a/skins/Modern/i18n/he.json
+++ b/skins/Modern/i18n/he.json
@@ -1,5 +1,11 @@
{
+ "@metadata": {
+ "authors": [
+ "Amire80"
+ ]
+ },
"modern.css": "/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Modern בלבד */",
"modern.js": "/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Modern */",
- "skinname-modern": "מודרני"
+ "skinname-modern": "מודרני",
+ "modern-desc": "עיצוב כחול־אפור עם סרגל צד וסרגל עליון. נגזר ממונובוק"
}
diff --git a/skins/Modern/i18n/hi.json b/skins/Modern/i18n/hi.json
new file mode 100644
index 00000000..df6edb25
--- /dev/null
+++ b/skins/Modern/i18n/hi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Siddhartha Ghai"
+ ]
+ },
+ "modern-desc": "ऊपर एवं किनारे की पट्टी के साथ एक नीला/ग्रे थीम। मोनोबुक पर आधारित।"
+}
diff --git a/skins/Modern/i18n/ilo.json b/skins/Modern/i18n/ilo.json
new file mode 100644
index 00000000..3437a471
--- /dev/null
+++ b/skins/Modern/i18n/ilo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "modern-desc": "Ti asul/kolordapo a tema nga addaan iti igid a baras ken ngato a baras. Napataud manipud ti MonoBook"
+}
diff --git a/skins/Modern/i18n/is.json b/skins/Modern/i18n/is.json
index 7e18fc5a..910832ae 100644
--- a/skins/Modern/i18n/is.json
+++ b/skins/Modern/i18n/is.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "Nútímalegt"
}
diff --git a/skins/Modern/i18n/kk-arab.json b/skins/Modern/i18n/kk-arab.json
index 937f5fcb..505c7636 100644
--- a/skins/Modern/i18n/kk-arab.json
+++ b/skins/Modern/i18n/kk-arab.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"modern.css": "/* مىندا ورنالاستىرىلعان CSS تەك «زاماناۋىي» (modern) مانەرىن پايدالانۋشىلارىنا ىقپال ەتەدى */",
"modern.js": "/* مىنداعى JavaScript تەك «زاماناۋىي» (modern) مانەرىن پايدالانۋشىلار ٴۇشىن جەگىلەدى */",
"skinname-modern": "زاماناۋىي (modern)"
diff --git a/skins/Modern/i18n/kk-cyrl.json b/skins/Modern/i18n/kk-cyrl.json
index c7055c9c..9f32a343 100644
--- a/skins/Modern/i18n/kk-cyrl.json
+++ b/skins/Modern/i18n/kk-cyrl.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"modern.css": "/* Мында орналастырылған CSS тек «Заманауи» (modern) мәнерін пайдаланушыларына ықпал етеді */",
"modern.js": "/* Мындағы JavaScript тек «Заманауи» (modern) мәнерін пайдаланушылар үшін жегіледі */",
"skinname-modern": "Заманауи (modern)"
diff --git a/skins/Modern/i18n/kk-latn.json b/skins/Modern/i18n/kk-latn.json
index 41764951..1ae1e2df 100644
--- a/skins/Modern/i18n/kk-latn.json
+++ b/skins/Modern/i18n/kk-latn.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"modern.css": "/* Mında ornalastırılğan CSS tek «Zamanawï» (modern) mänerin paýdalanwşılarına ıqpal etedi */",
"modern.js": "/* Mındağı JavaScript tek «Zamanawï» (modern) mänerin paýdalanwşılar üşin jegiledi */",
"skinname-modern": "Zamanawï (modern)"
diff --git a/skins/Modern/i18n/ko.json b/skins/Modern/i18n/ko.json
index 3a5703ec..4a4056e6 100644
--- a/skins/Modern/i18n/ko.json
+++ b/skins/Modern/i18n/ko.json
@@ -6,5 +6,6 @@
},
"modern.css": "/* 이 CSS 설정은 모던 스킨을 사용하는 사용자에게 적용됩니다 */",
"modern.js": "/* 이 자바스크립트 설정은 모던 스킨을 사용하는 사용자에게 적용됩니다 */",
- "skinname-modern": "모던"
+ "skinname-modern": "모던",
+ "modern-desc": "사이드바와 위 막대가 있는 파랑/회색 테마입니다. 모노북에서 파생되었습니다."
}
diff --git a/skins/Modern/i18n/ksh.json b/skins/Modern/i18n/ksh.json
index a2175809..a90e0749 100644
--- a/skins/Modern/i18n/ksh.json
+++ b/skins/Modern/i18n/ksh.json
@@ -4,7 +4,8 @@
"Purodha"
]
},
- "modern.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Modern“ */",
- "modern.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Modern\" jescheck */",
- "skinname-modern": "Modern"
+ "modern.css": "/* at CSS heh aan dä Schtäll wirrek nur op di Bedehnbovverflääsch „Modärn“ */",
+ "modern.js": "/* De JavaSkreppte fun heh krejje alle Sigge met de Bedehnbovverflääsch „Modärn“ jescheck */",
+ "skinname-modern": "Modärn",
+ "modern-desc": "En blou-jroue Bedehnbovverfläsch med enem Menüh aan de Sigg un einem bovve drövver. Ene Affkömmleng vum Monobohch."
}
diff --git a/skins/Modern/i18n/lzh.json b/skins/Modern/i18n/lzh.json
index 052736eb..88f1760d 100644
--- a/skins/Modern/i18n/lzh.json
+++ b/skins/Modern/i18n/lzh.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"modern.css": "/* 此之 CSS 用於時髦面之簿也 */",
"modern.js": "/* 此之JavaScript將載於用時髦面之簿 */",
"skinname-modern": "時髦"
diff --git a/skins/Modern/i18n/mr.json b/skins/Modern/i18n/mr.json
index 8bce4a6b..c06601b3 100644
--- a/skins/Modern/i18n/mr.json
+++ b/skins/Modern/i18n/mr.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "आधुनिक"
}
diff --git a/skins/Modern/i18n/mwl.json b/skins/Modern/i18n/mwl.json
index ec5086ef..3b25d7cc 100644
--- a/skins/Modern/i18n/mwl.json
+++ b/skins/Modern/i18n/mwl.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "Moderno"
}
diff --git a/skins/Modern/i18n/myv.json b/skins/Modern/i18n/myv.json
index f2d412f3..efe00393 100644
--- a/skins/Modern/i18n/myv.json
+++ b/skins/Modern/i18n/myv.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "НееньШкань"
}
diff --git a/skins/Modern/i18n/nap.json b/skins/Modern/i18n/nap.json
new file mode 100644
index 00000000..5eb9f31d
--- /dev/null
+++ b/skins/Modern/i18n/nap.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "modern-desc": "Verziona 'n blu e grigio cu barra laterale e supiriore. Derivata 'a MonoBook."
+}
diff --git a/skins/Modern/i18n/nb.json b/skins/Modern/i18n/nb.json
index 74fe02b8..da77d690 100644
--- a/skins/Modern/i18n/nb.json
+++ b/skins/Modern/i18n/nb.json
@@ -1,5 +1,7 @@
{
+ "@metadata": [],
"modern.css": "/* CSS i denne fila vil gjelde alle som bruker drakta Modern */",
"modern.js": "/* Javascript i denne fila vil gjelde for brukere av drakta Modern */",
- "skinname-modern": "Moderne"
+ "skinname-modern": "Moderne",
+ "modern-desc": "En blågrå drakt med sidestolpe og topplinje. Basert på MonoBook"
}
diff --git a/skins/Modern/i18n/nl.json b/skins/Modern/i18n/nl.json
index efd95d57..27717073 100644
--- a/skins/Modern/i18n/nl.json
+++ b/skins/Modern/i18n/nl.json
@@ -6,5 +6,6 @@
},
"modern.css": "/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Modern */",
"modern.js": "/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Modern gebruiken */",
- "skinname-modern": "Modern"
+ "skinname-modern": "Modern",
+ "modern-desc": "Een blauw-grijs uiterlijk met een zij- en bovenmenu, afgeleid van MonoBook"
}
diff --git a/skins/Modern/i18n/ps.json b/skins/Modern/i18n/ps.json
index c687dfda..c0838ea3 100644
--- a/skins/Modern/i18n/ps.json
+++ b/skins/Modern/i18n/ps.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "نوی"
}
diff --git a/skins/Modern/i18n/qqq.json b/skins/Modern/i18n/qqq.json
index a620a1d7..f7087455 100644
--- a/skins/Modern/i18n/qqq.json
+++ b/skins/Modern/i18n/qqq.json
@@ -7,5 +7,6 @@
},
"modern.css": "{{optional}}",
"modern.js": "{{optional}}",
- "skinname-modern": "{{optional}}\n{{Identical|Modern}}"
+ "skinname-modern": "{{optional}}\n{{Identical|Modern}}",
+ "modern-desc": "{{desc|what=skin|name=Modern|url=https://www.mediawiki.org/wiki/Skin:Modern}}"
}
diff --git a/skins/Modern/i18n/roa-tara.json b/skins/Modern/i18n/roa-tara.json
index 5ba5bc97..df3e0d11 100644
--- a/skins/Modern/i18n/roa-tara.json
+++ b/skins/Modern/i18n/roa-tara.json
@@ -6,5 +6,6 @@
},
"modern.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Moderne */",
"modern.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Moderne */",
- "skinname-modern": "Moderne"
+ "skinname-modern": "Moderne",
+ "modern-desc": "'Nu teme blu/grigge cu le barre laterale e de sus. Derivate da MonoBook"
}
diff --git a/skins/Modern/i18n/sah.json b/skins/Modern/i18n/sah.json
index f389250d..31842423 100644
--- a/skins/Modern/i18n/sah.json
+++ b/skins/Modern/i18n/sah.json
@@ -1,3 +1,4 @@
{
+ "@metadata": [],
"skinname-modern": "Билиҥҥи"
}
diff --git a/skins/Modern/i18n/sco.json b/skins/Modern/i18n/sco.json
new file mode 100644
index 00000000..d61b4c8c
--- /dev/null
+++ b/skins/Modern/i18n/sco.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "John Reid"
+ ]
+ },
+ "modern-desc": "Ae blue/gray theme wi sidebaur n tap baur. Basit oan MonoBook."
+}
diff --git a/skins/Modern/i18n/sr-el.json b/skins/Modern/i18n/sr-el.json
index 33899819..d829c287 100644
--- a/skins/Modern/i18n/sr-el.json
+++ b/skins/Modern/i18n/sr-el.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"modern.css": "/* CSS postavljen ovde će uticati na sve korisnike teme „Savremeno“ */",
"modern.js": "/* Javaskript postavljen ovde će se učitati za sve one koji koriste temu „Savremeno“ */",
"skinname-modern": "Savremeno"
diff --git a/skins/Modern/i18n/uk.json b/skins/Modern/i18n/uk.json
index 9aa7a2a5..8ba258b8 100644
--- a/skins/Modern/i18n/uk.json
+++ b/skins/Modern/i18n/uk.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "Dim Grits"
+ "Dim Grits",
+ "Andriykopanytsia"
]
},
"modern.css": "/* Розміщений тут CSS-код буде використаний в темі оформлення Сучасне */",
"modern.js": "/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Сучасне */",
- "skinname-modern": "Сучасне"
+ "skinname-modern": "Сучасне",
+ "modern-desc": "Синя/сіра тема з бічною та верхньою панелями. Похідна від MonoBook."
}
diff --git a/skins/Modern/i18n/yue.json b/skins/Modern/i18n/yue.json
index 3c28d364..3cec7249 100644
--- a/skins/Modern/i18n/yue.json
+++ b/skins/Modern/i18n/yue.json
@@ -1,4 +1,5 @@
{
+ "@metadata": [],
"modern.css": "/* 響呢度放 CSS 碼去改用戶用嘅摩登畫面 */",
"modern.js": "/* 響每一次個頁面載入時,用摩登畫面嘅用戶都會載入呢度任何嘅JavaScript */",
"skinname-modern": "摩登"
diff --git a/skins/Modern/i18n/zh-hans.json b/skins/Modern/i18n/zh-hans.json
index 756f801d..7ee50a3d 100644
--- a/skins/Modern/i18n/zh-hans.json
+++ b/skins/Modern/i18n/zh-hans.json
@@ -8,5 +8,5 @@
"modern.css": "/* 放置于这里的CSS将影响使用现代皮肤的用户 */",
"modern.js": "/* 这里的任何JavaScript将为使用现代皮肤的用户加载 */",
"skinname-modern": "现代",
- "modern-desc": "带侧边栏和顶栏的蓝灰色主题。从MonoBook衍生而来。"
+ "modern-desc": "带侧边栏和顶栏的蓝灰色主题。从MonoBook衍生而来"
}
diff --git a/skins/Modern/i18n/zh-hant.json b/skins/Modern/i18n/zh-hant.json
index 431c568d..25e3b3ba 100644
--- a/skins/Modern/i18n/zh-hant.json
+++ b/skins/Modern/i18n/zh-hant.json
@@ -1,11 +1,12 @@
{
"@metadata": {
"authors": [
- "Cwlin0416"
+ "Cwlin0416",
+ "Liuxinyu970226"
]
},
"modern.css": "/* 此 CSS 會影響使用 Modern 介面外觀的使用者 */",
"modern.js": "/* 此 JavaScript 會用於使用 Modern 介面外觀的使用者 */",
"skinname-modern": "現代",
- "modern-desc": "擁有側邊欄與上方列的藍灰色主題。 自 MonoBook 衍生而來。"
+ "modern-desc": "擁有側邊欄與上方列的藍灰色主題。自 MonoBook 衍生而來"
}
diff --git a/skins/Modern/resources/main.css b/skins/Modern/resources/main.css
index 1ce8ada4..8c8ce3c8 100644
--- a/skins/Modern/resources/main.css
+++ b/skins/Modern/resources/main.css
@@ -27,11 +27,21 @@ body {
border: none;
height: 2em;
width: 100%;
-
background-color: #003366;
color: white;
}
+.mw-indicators {
+ float: right;
+}
+
+.mw-indicator {
+ display: -moz-inline-block;
+ display: inline-block;
+ zoom: 1;
+ *display: inline;
+}
+
#mw_header h1 {
margin: 0 0 0 0.5em;
padding: 0 0 0 0;
@@ -47,7 +57,6 @@ body {
margin: 0 0 0 0;
padding: 0 0 0 0;
width: 100%;
-
}
#p-personal div.pBody {
@@ -649,7 +658,6 @@ table.toc td {
margin: 0 0 0 0;
}
-#mw_header h1,
#p-personal,
#p-cactions {
overflow: hidden;
diff --git a/skins/Modern/skin.json b/skins/Modern/skin.json
new file mode 100644
index 00000000..98ba815a
--- /dev/null
+++ b/skins/Modern/skin.json
@@ -0,0 +1,40 @@
+{
+ "name": "Modern",
+ "author": [
+ "River Tarnell",
+ "..."
+ ],
+ "url": "https://www.mediawiki.org/wiki/Skin:Modern",
+ "descriptionmsg": "modern-desc",
+ "namemsg": "skinname-modern",
+ "license-name": "GPL-2.0+",
+ "type": "skin",
+ "ValidSkinNames": {
+ "modern": "Modern"
+ },
+ "MessagesDirs": {
+ "Modern": [
+ "i18n"
+ ]
+ },
+ "ResourceModules": {
+ "skins.modern": {
+ "styles": {
+ "resources/main.css": {
+ "media": "screen"
+ },
+ "resources/print.css": {
+ "media": "print"
+ }
+ }
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteSkinPath": "Modern"
+ },
+ "AutoloadClasses": {
+ "SkinModern": "SkinModern.php",
+ "ModernTemplate": "SkinModern.php"
+ }
+}
diff --git a/skins/MonoBook/COPYING b/skins/MonoBook/COPYING
index 019694a9..d159169d 100644
--- a/skins/MonoBook/COPYING
+++ b/skins/MonoBook/COPYING
@@ -1,65 +1,65 @@
-== GNU GENERAL PUBLIC LICENSE ==
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
-Version 2, June 1991
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
+ Preamble
-=== Preamble ===
-
-The licenses for most software are designed to take away your
+ The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
+the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
-When we speak of free software, we are referring to freedom, not
+ When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
-To protect your rights, we need to make restrictions that forbid
+ To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
-For example, if you distribute copies of such a program, whether
+ For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
-We protect your rights with two steps: (1) copyright the software, and
+ We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
-Also, for each author's protection and ours, we want to make certain
+ Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
-Finally, any free program is threatened constantly by software
+ Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
-The precise terms and conditions for copying, distribution and
+ The precise terms and conditions for copying, distribution and
modification follow.
-== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-'''0.''' This License applies to any program or other work which contains
+ 0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
@@ -76,7 +76,7 @@ is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
-'''1.''' You may copy and distribute verbatim copies of the Program's
+ 1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
@@ -87,29 +87,29 @@ along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
-'''2.''' You may modify your copy or copies of the Program or any portion
+ 2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
- '''a)''' You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- '''b)''' You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- '''c)''' If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
@@ -131,26 +131,26 @@ with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
-'''3.''' You may copy and distribute the Program (or a work based on it,
+ 3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
- '''a)''' Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
- '''b)''' Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
- '''c)''' Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
@@ -169,7 +169,7 @@ access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
-'''4.''' You may not copy, modify, sublicense, or distribute the Program
+ 4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
@@ -177,7 +177,7 @@ However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
-'''5.''' You are not required to accept this License, since you have not
+ 5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
@@ -186,7 +186,7 @@ Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
-'''6.''' Each time you redistribute the Program (or any work based on the
+ 6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
@@ -194,7 +194,7 @@ restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
-'''7.''' If, as a consequence of a court judgment or allegation of patent
+ 7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
@@ -226,7 +226,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
-'''8.''' If the distribution and/or use of the Program is restricted in
+ 8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
@@ -234,7 +234,7 @@ those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
-'''9.''' The Free Software Foundation may publish revised and/or new versions
+ 9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
@@ -247,7 +247,7 @@ Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
-'''10.''' If you wish to incorporate parts of the Program into other free
+ 10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
@@ -255,9 +255,9 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
-=== NO WARRANTY ===
+ NO WARRANTY
-'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
@@ -267,7 +267,7 @@ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
-'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
@@ -277,47 +277,45 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
- '''END OF TERMS AND CONDITIONS'''
+ END OF TERMS AND CONDITIONS
-== How to Apply These Terms to Your New Programs ==
+ How to Apply These Terms to Your New Programs
-If you develop a new program, and you want it to be of the greatest
+ If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
-To do so, attach the following notices to the program. It is safest
+ To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
- <one line to give the program's name and a brief idea of what it does.>
-
- Copyright (C) <year> <name of author>
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
- 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 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
+ 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.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
@@ -328,15 +326,14 @@ You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
- Ty Coon, President of Vice
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
+library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
diff --git a/skins/MonoBook/MonoBook.php b/skins/MonoBook/MonoBook.php
index 97c0cd84..eee8ca13 100644
--- a/skins/MonoBook/MonoBook.php
+++ b/skins/MonoBook/MonoBook.php
@@ -1,52 +1,14 @@
<?php
-/**
- * MonoBook nouveau.
- *
- * Translated from gwicke's previous TAL template version to remove
- * dependency on PHPTAL.
- *
- * 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 Skins
- */
-$wgExtensionCredits['skin'][] = array(
- 'path' => __FILE__,
- 'name' => 'MonoBook',
- 'namemsg' => 'skinname-monobook',
- 'descriptionmsg' => 'monobook-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Skin:MonoBook',
- 'author' => array( 'Gabriel Wicke', '...' ),
- 'license-name' => 'GPLv2+',
-);
-
-// Register files
-$wgAutoloadClasses['SkinMonoBook'] = __DIR__ . '/SkinMonoBook.php';
-$wgAutoloadClasses['MonoBookTemplate'] = __DIR__ . '/MonoBookTemplate.php';
-$wgMessagesDirs['MonoBook'] = __DIR__ . '/i18n';
-
-// Register skin
-$wgValidSkinNames['monobook'] = 'MonoBook';
-
-// Register modules
-$wgResourceModules['skins.monobook.styles'] = array(
- 'styles' => array(
- 'main.css' => array( 'media' => 'screen' ),
- ),
- 'remoteSkinPath' => 'MonoBook',
- 'localBasePath' => __DIR__,
-);
+if ( function_exists( 'wfLoadSkin' ) ) {
+ wfLoadSkin( 'MonoBook' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['MonoBook'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for MonoBook skin. Please use wfLoadSkin instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the MonoBook skin requires MediaWiki 1.25+' );
+}
diff --git a/skins/MonoBook/MonoBookTemplate.php b/skins/MonoBook/MonoBookTemplate.php
index 8637b087..12f7016f 100644
--- a/skins/MonoBook/MonoBookTemplate.php
+++ b/skins/MonoBook/MonoBookTemplate.php
@@ -55,11 +55,12 @@ class MonoBookTemplate extends BaseTemplate {
}
?>
+ <?php echo $this->getIndicators(); ?>
<h1 id="firstHeading" class="firstHeading" lang="<?php
$this->data['pageLanguage'] =
$this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
$this->text( 'pageLanguage' );
- ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+ ?>"><?php $this->html( 'title' ) ?></h1>
<div id="bodyContent" class="mw-body-content">
<div id="siteSub"><?php $this->msg( 'tagline' ) ?></div>
@@ -126,8 +127,10 @@ class MonoBookTemplate extends BaseTemplate {
<?php
echo Html::element( 'a', array(
'href' => $this->data['nav_urls']['mainpage']['href'],
- 'style' => "background-image: url({$this->data['logopath']});" )
- + Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ); ?>
+ 'class' => 'mw-wiki-logo',
+ )
+ + Linker::tooltipAndAccesskeyAttribs( 'p-logo' )
+ ); ?>
</div>
<?php
@@ -183,6 +186,7 @@ class MonoBookTemplate extends BaseTemplate {
$this->printTrail();
echo Html::closeElement( 'body' );
echo Html::closeElement( 'html' );
+ echo "\n";
wfRestoreWarnings();
} // end of execute() method
diff --git a/skins/MonoBook/i18n/ar.json b/skins/MonoBook/i18n/ar.json
index 05cad213..920a5ec6 100644
--- a/skins/MonoBook/i18n/ar.json
+++ b/skins/MonoBook/i18n/ar.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "Meno25"
+ "Meno25",
+ "Khaled"
]
},
"skinname-monobook": "مونوبوك",
+ "monobook-desc": "تصميم ميديا ويكي الكلاسيكي منذ العام 2004، سمي على اسم الصورة البيضاء والسوداء من كتاب في خلفية الصفحة",
"monobook.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مونوبوك */",
"monobook.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مونوبوك */"
}
diff --git a/skins/MonoBook/i18n/av.json b/skins/MonoBook/i18n/av.json
new file mode 100644
index 00000000..c4ab7749
--- /dev/null
+++ b/skins/MonoBook/i18n/av.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazimagomedov"
+ ]
+ },
+ "monobook-desc": "Класикияб MediaWikiялъул куцалъул тема, 2004 соналъ чӀегӀер-хъахӀаб, тӀехьалъул сураталъул фоналдасан бахъараб, сураталъул цӀар швараб."
+}
diff --git a/skins/MonoBook/i18n/be-tarask.json b/skins/MonoBook/i18n/be-tarask.json
index 2b4aa8c0..0d8662d4 100644
--- a/skins/MonoBook/i18n/be-tarask.json
+++ b/skins/MonoBook/i18n/be-tarask.json
@@ -1,4 +1,9 @@
{
- "@metadata": [],
- "skinname-monobook": "Монакніга"
+ "@metadata": {
+ "authors": [
+ "Red Winged Duck"
+ ]
+ },
+ "skinname-monobook": "Монакніга",
+ "monobook-desc": "Клясычная тэма афармленьня MediaWiki з 2004 году, названая паводле чорна-белага фотаздымка кнігі на фоне старонкі"
}
diff --git a/skins/MonoBook/i18n/de.json b/skins/MonoBook/i18n/de.json
index 047b91df..08fdccf8 100644
--- a/skins/MonoBook/i18n/de.json
+++ b/skins/MonoBook/i18n/de.json
@@ -2,11 +2,12 @@
"@metadata": {
"authors": [
"Geitost",
- "Metalhead64"
+ "Metalhead64",
+ "Kghbln"
]
},
"skinname-monobook": "MonoBook",
- "monobook-desc": "Ergänzt die klassische MediaWiki-Benutzeroberfläche seit 2004, benannt nach dem Schwarzweißfoto eines Buches im Seitenhintergrund",
- "monobook.css": "/* Das folgende CSS wird für Benutzer der MonoBook-Benutzeroberfläche geladen */",
- "monobook.js": "/* Das folgende JavaScript wird für Benutzer der Monobook-Benutzeroberfläche geladen. */"
+ "monobook-desc": "Stellt eine klassische Benutzeroberfläche bereit",
+ "monobook.css": "/* Das folgende CSS wird für Benutzer der Benutzeroberfläche MonoBook geladen */",
+ "monobook.js": "/* Das folgende JavaScript wird für Benutzer der Benutzeroberfläche MonoBook geladen. */"
}
diff --git a/skins/MonoBook/i18n/el.json b/skins/MonoBook/i18n/el.json
index 1e7f7b86..eb9a0891 100644
--- a/skins/MonoBook/i18n/el.json
+++ b/skins/MonoBook/i18n/el.json
@@ -1,9 +1,11 @@
{
"@metadata": {
"authors": [
- "Dead3y3"
+ "Dead3y3",
+ "Geraki"
]
},
+ "monobook-desc": "Το κλασικό θέμα του MediaWiki από το 2004, που πήρε το όνομά του από την ασπρόμαυρη φωτογραφία ενός βιβλίου στο φόντο της σελίδας",
"monobook.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Monobook skin */",
"monobook.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το MonoBook skin */"
}
diff --git a/skins/MonoBook/i18n/fi.json b/skins/MonoBook/i18n/fi.json
index f516bddb..804e5344 100644
--- a/skins/MonoBook/i18n/fi.json
+++ b/skins/MonoBook/i18n/fi.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "Crt"
+ "Crt",
+ "McSalama"
]
},
"skinname-monobook": "Monobook",
+ "monobook-desc": "Klassinen MediaWiki teema vuodesta 2004, saanut nimensä mustavalkoisesta kirjan kuvasta sivun taustalla",
"monobook.css": "/* Tämä sivu sisältää Monobook-ulkoasua muuttavia tyylejä. */",
"monobook.js": "/* Tämän sivun JavaScript-koodi liitetään Monobook-tyyliin */"
}
diff --git a/skins/MonoBook/i18n/hu.json b/skins/MonoBook/i18n/hu.json
index 07e3a104..d8041059 100644
--- a/skins/MonoBook/i18n/hu.json
+++ b/skins/MonoBook/i18n/hu.json
@@ -1,10 +1,12 @@
{
"@metadata": {
"authors": [
- "Dani"
+ "Dani",
+ "Tacsipacsi"
]
},
"skinname-monobook": "MonoBook",
+ "monobook-desc": "A klasszikus MediaWiki-felület 2004 óta; egy könyv fekete-fehér fotója alapján kapta a nevét",
"monobook.css": "/* Az ide elhelyezett CSS hatással lesz a Monobook felület használóira */",
"monobook.js": "/* A Monobook felületet használó szerkesztők számára betöltendő JavaScriptek */"
}
diff --git a/skins/MonoBook/i18n/ksh.json b/skins/MonoBook/i18n/ksh.json
index 6c8c8106..88250625 100644
--- a/skins/MonoBook/i18n/ksh.json
+++ b/skins/MonoBook/i18n/ksh.json
@@ -4,7 +4,8 @@
"Purodha"
]
},
- "skinname-monobook": "MonoBoch",
- "monobook.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Monobooch“ */",
- "monobook.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Monnobooch\" jescheck */"
+ "skinname-monobook": "Monobohch",
+ "monobook-desc": "De klaßesche Bedehnbovverfläsch vum MehdijaWikki zigg 2004. Se es noh däm eijnfarbesch jroue Bohch benannt, wat doh als Hengerjrondbeld bei es.",
+ "monobook.css": "/* Dat CSS heh aan dä Stell wirrek blohß op de Bedehnbovverflääsch „Monobohch“ */",
+ "monobook.js": "/* De JavaSkrippte fun heh krejje alle Sigge met dä Bedehnbovverflääsch „Monobohch“ jescheck */"
}
diff --git a/skins/MonoBook/i18n/nap.json b/skins/MonoBook/i18n/nap.json
new file mode 100644
index 00000000..653374d4
--- /dev/null
+++ b/skins/MonoBook/i18n/nap.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "C.R."
+ ]
+ },
+ "monobook-desc": "'A skin classica 'e MediaWiki 'a 2004, piglia nomme ' a ll'immaggene 'n janco e niro d' 'o libbro ausata comme sfunno d' 'a paggena"
+}
diff --git a/skins/MonoBook/i18n/roa-tara.json b/skins/MonoBook/i18n/roa-tara.json
index d7b52b07..097eb608 100644
--- a/skins/MonoBook/i18n/roa-tara.json
+++ b/skins/MonoBook/i18n/roa-tara.json
@@ -5,6 +5,7 @@
]
},
"skinname-monobook": "MonoBook",
+ "monobook-desc": "'U skin classeche de MediaUicchi da 'u 2004, nnomenate apprisse 'a fote vianghe e gnore de 'nu libbre jndr'à pàgene de sfonde",
"monobook.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Monobook */",
"monobook.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere MonoBook */"
}
diff --git a/skins/MonoBook/i18n/sco.json b/skins/MonoBook/i18n/sco.json
new file mode 100644
index 00000000..00f18ca4
--- /dev/null
+++ b/skins/MonoBook/i18n/sco.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "John Reid"
+ ]
+ },
+ "monobook-desc": "The classeec MediaWiki skin sin 2004, named efter the blaik-n-white photæ o ae buik in the page backgroond"
+}
diff --git a/skins/MonoBook/main.css b/skins/MonoBook/main.css
index e0e0dc77..809fe184 100644
--- a/skins/MonoBook/main.css
+++ b/skins/MonoBook/main.css
@@ -63,6 +63,8 @@ div#globalWrapper {
width: 100%;
margin: 0;
padding: 0;
+ position: relative;
+ z-index: 0;
}
/* general styles */
@@ -91,6 +93,20 @@ pre, .mw-code {
#firstHeading {
padding-top: 0;
+ overflow: visible;
+}
+
+.mw-indicators {
+ float: right;
+ line-height: 1.5em;
+ font-size: 95%;
+}
+
+.mw-indicator {
+ display: -moz-inline-block;
+ display: inline-block;
+ zoom: 1;
+ *display: inline;
}
/*
diff --git a/skins/MonoBook/skin.json b/skins/MonoBook/skin.json
new file mode 100644
index 00000000..1a4efc8d
--- /dev/null
+++ b/skins/MonoBook/skin.json
@@ -0,0 +1,37 @@
+{
+ "name": "MonoBook",
+ "author": [
+ "Gabriel Wicke",
+ "..."
+ ],
+ "url": "https://www.mediawiki.org/wiki/Skin:MonoBook",
+ "descriptionmsg": "monobook-desc",
+ "namemsg": "skinname-monobook",
+ "license-name": "GPL-2.0+",
+ "type": "skin",
+ "ValidSkinNames": {
+ "monobook": "MonoBook"
+ },
+ "MessagesDirs": {
+ "MonoBook": [
+ "i18n"
+ ]
+ },
+ "ResourceModules": {
+ "skins.monobook.styles": {
+ "styles": {
+ "main.css": {
+ "media": "screen"
+ }
+ }
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteSkinPath": "MonoBook"
+ },
+ "AutoloadClasses": {
+ "SkinMonoBook": "SkinMonoBook.php",
+ "MonoBookTemplate": "MonoBookTemplate.php"
+ }
+}
diff --git a/skins/README b/skins/README
index 4145b354..7a980f7b 100644
--- a/skins/README
+++ b/skins/README
@@ -11,7 +11,10 @@ directory and make a symbolic link:
mediawiki/skins$ ln -s ../../skins-trunk/FooBar
-Most skins are available through Git:
+The default skin Vector can be installed by cloning from Git:
+ git clone https://git.wikimedia.org/git/mediawiki/skins/Vector.git
+
+Other skins are also available:
https://gerrit.wikimedia.org/r/#/admin/projects/?filter=mediawiki%252Fskins%252F
https://git.wikimedia.org/project/mediawiki
diff --git a/skins/Vector/COPYING b/skins/Vector/COPYING
index 019694a9..d159169d 100644
--- a/skins/Vector/COPYING
+++ b/skins/Vector/COPYING
@@ -1,65 +1,65 @@
-== GNU GENERAL PUBLIC LICENSE ==
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
-Version 2, June 1991
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
+ Preamble
-=== Preamble ===
-
-The licenses for most software are designed to take away your
+ The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
+the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
-When we speak of free software, we are referring to freedom, not
+ When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
-To protect your rights, we need to make restrictions that forbid
+ To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
-For example, if you distribute copies of such a program, whether
+ For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
-We protect your rights with two steps: (1) copyright the software, and
+ We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
-Also, for each author's protection and ours, we want to make certain
+ Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
-Finally, any free program is threatened constantly by software
+ Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
-The precise terms and conditions for copying, distribution and
+ The precise terms and conditions for copying, distribution and
modification follow.
-== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-'''0.''' This License applies to any program or other work which contains
+ 0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
@@ -76,7 +76,7 @@ is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
-'''1.''' You may copy and distribute verbatim copies of the Program's
+ 1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
@@ -87,29 +87,29 @@ along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
-'''2.''' You may modify your copy or copies of the Program or any portion
+ 2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
- '''a)''' You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- '''b)''' You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- '''c)''' If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
@@ -131,26 +131,26 @@ with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
-'''3.''' You may copy and distribute the Program (or a work based on it,
+ 3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
- '''a)''' Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
- '''b)''' Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
- '''c)''' Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
@@ -169,7 +169,7 @@ access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
-'''4.''' You may not copy, modify, sublicense, or distribute the Program
+ 4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
@@ -177,7 +177,7 @@ However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
-'''5.''' You are not required to accept this License, since you have not
+ 5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
@@ -186,7 +186,7 @@ Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
-'''6.''' Each time you redistribute the Program (or any work based on the
+ 6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
@@ -194,7 +194,7 @@ restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
-'''7.''' If, as a consequence of a court judgment or allegation of patent
+ 7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
@@ -226,7 +226,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
-'''8.''' If the distribution and/or use of the Program is restricted in
+ 8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
@@ -234,7 +234,7 @@ those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
-'''9.''' The Free Software Foundation may publish revised and/or new versions
+ 9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
@@ -247,7 +247,7 @@ Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
-'''10.''' If you wish to incorporate parts of the Program into other free
+ 10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
@@ -255,9 +255,9 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
-=== NO WARRANTY ===
+ NO WARRANTY
-'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
@@ -267,7 +267,7 @@ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
-'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
@@ -277,47 +277,45 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
- '''END OF TERMS AND CONDITIONS'''
+ END OF TERMS AND CONDITIONS
-== How to Apply These Terms to Your New Programs ==
+ How to Apply These Terms to Your New Programs
-If you develop a new program, and you want it to be of the greatest
+ If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
-To do so, attach the following notices to the program. It is safest
+ To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
- <one line to give the program's name and a brief idea of what it does.>
-
- Copyright (C) <year> <name of author>
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
- 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 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
+ 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.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
@@ -328,15 +326,14 @@ You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
- Ty Coon, President of Vice
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
+library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
diff --git a/skins/Vector/SkinVector.php b/skins/Vector/SkinVector.php
index 565c64bb..f5e3634c 100644
--- a/skins/Vector/SkinVector.php
+++ b/skins/Vector/SkinVector.php
@@ -39,8 +39,6 @@ class SkinVector extends SkinTemplate {
$this->vectorConfig = ConfigFactory::getDefaultInstance()->makeConfig( 'vector' );
}
- protected static $bodyClasses = array( 'vector-animateLayout' );
-
/**
* Initializes output page and sets up skin-specific parameters
* @param OutputPage $out Object to initialize
@@ -79,18 +77,4 @@ class SkinVector extends SkinTemplate {
public function setupTemplate( $classname, $repository = false, $cache_dir = false ) {
return new $classname( $this->vectorConfig );
}
-
- /**
- * Adds classes to the body element.
- *
- * @param OutputPage $out
- * @param array &$bodyAttrs Array of attributes that will be set on the body element
- */
- function addToBodyAttributes( $out, &$bodyAttrs ) {
- if ( isset( $bodyAttrs['class'] ) && strlen( $bodyAttrs['class'] ) > 0 ) {
- $bodyAttrs['class'] .= ' ' . implode( ' ', static::$bodyClasses );
- } else {
- $bodyAttrs['class'] = implode( ' ', static::$bodyClasses );
- }
- }
}
diff --git a/skins/Vector/Vector.php b/skins/Vector/Vector.php
index 2ffc3a7b..872b5bf7 100644
--- a/skins/Vector/Vector.php
+++ b/skins/Vector/Vector.php
@@ -1,110 +1,14 @@
<?php
-/**
- * Vector - Modern version of MonoBook with fresh look and many usability
- * improvements.
- *
- * 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 Skins
- */
-$GLOBALS['wgExtensionCredits']['skin'][] = array(
- 'path' => __FILE__,
- 'name' => 'Vector',
- 'namemsg' => 'skinname-vector',
- 'descriptionmsg' => 'vector-skin-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Skin:Vector',
- 'author' => array( 'Trevor Parscal', 'Roan Kattouw', '...' ),
- 'license-name' => 'GPLv2+',
-);
-
-// Register files
-$GLOBALS['wgAutoloadClasses']['SkinVector'] = __DIR__ . '/SkinVector.php';
-$GLOBALS['wgAutoloadClasses']['VectorTemplate'] = __DIR__ . '/VectorTemplate.php';
-$GLOBALS['wgMessagesDirs']['Vector'] = __DIR__ . '/i18n';
-
-// Register skin
-$GLOBALS['wgValidSkinNames']['vector'] = 'Vector';
-
-// Register config
-$GLOBALS['wgConfigRegistry']['vector'] = 'GlobalVarConfig::newInstance';
-
-// Configuration options
-/**
- * Search form look.
- * - true = use an icon search button
- * - false = use Go & Search buttons
- */
-$GLOBALS['wgVectorUseSimpleSearch'] = true;
-
-/**
- * Watch and unwatch as an icon rather than a link.
- * - true = use an icon watch/unwatch button
- * - false = use watch/unwatch text link
- */
-$GLOBALS['wgVectorUseIconWatch'] = true;
-
-// Register modules
-$GLOBALS['wgResourceModules']['skins.vector.styles'] = array(
- 'styles' => array(
- 'screen.less' => array( 'media' => 'screen' ),
- 'screen-hd.less' => array( 'media' => 'screen and (min-width: 982px)' ),
- ),
- 'remoteSkinPath' => 'Vector',
- 'localBasePath' => __DIR__,
-);
-
-$GLOBALS['wgResourceModules']['skins.vector.js'] = array(
- 'scripts' => array(
- 'collapsibleTabs.js',
- 'vector.js',
- ),
- 'position' => 'top',
- 'dependencies' => array(
- 'jquery.throttle-debounce',
- 'jquery.tabIndex',
- ),
- 'remoteSkinPath' => 'Vector',
- 'localBasePath' => __DIR__,
-);
-
-// Apply module customizations
-$GLOBALS['wgResourceModuleSkinStyles']['vector'] = array(
- 'jquery.tipsy' => 'skinStyles/jquery.tipsy.less',
- 'jquery.ui.core' => array(
- 'skinStyles/jquery.ui/jquery.ui.core.css',
- 'skinStyles/jquery.ui/jquery.ui.theme.css',
- ),
- 'jquery.ui.accordion' => 'skinStyles/jquery.ui/jquery.ui.accordion.css',
- 'jquery.ui.autocomplete' => 'skinStyles/jquery.ui/jquery.ui.autocomplete.css',
- 'jquery.ui.button' => 'skinStyles/jquery.ui/jquery.ui.button.css',
- 'jquery.ui.datepicker' => 'skinStyles/jquery.ui/jquery.ui.datepicker.css',
- 'jquery.ui.dialog' => 'skinStyles/jquery.ui/jquery.ui.dialog.css',
- 'jquery.ui.menu' => 'skinStyles/jquery.ui/jquery.ui.menu.css',
- 'jquery.ui.progressbar' => 'skinStyles/jquery.ui/jquery.ui.progressbar.css',
- 'jquery.ui.resizable' => 'skinStyles/jquery.ui/jquery.ui.resizable.css',
- 'jquery.ui.selectable' => 'skinStyles/jquery.ui/jquery.ui.selectable.css',
- 'jquery.ui.slider' => 'skinStyles/jquery.ui/jquery.ui.slider.css',
- 'jquery.ui.spinner' => 'skinStyles/jquery.ui/jquery.ui.spinner.css',
- 'jquery.ui.tabs' => 'skinStyles/jquery.ui/jquery.ui.tabs.css',
- 'jquery.ui.tooltips' => 'skinStyles/jquery.ui/jquery.ui.tooltips.css',
- 'mediawiki.notification' => 'skinStyles/mediawiki.notification.less',
- 'mediawiki.special' => 'skinStyles/mediawiki.special.less',
- 'mediawiki.special.preferences' => 'skinStyles/mediawiki.special.preferences.less',
- 'remoteSkinPath' => 'Vector',
- 'localBasePath' => __DIR__,
-);
+if ( function_exists( 'wfLoadSkin' ) ) {
+ wfLoadSkin( 'Vector' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Vector'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Vector skin. Please use wfLoadSkin instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return true;
+} else {
+ die( 'This version of the Vector skin requires MediaWiki 1.25+' );
+} \ No newline at end of file
diff --git a/skins/Vector/VectorTemplate.php b/skins/Vector/VectorTemplate.php
index 6e4e2f1e..fa3de5e0 100644
--- a/skins/Vector/VectorTemplate.php
+++ b/skins/Vector/VectorTemplate.php
@@ -102,11 +102,16 @@ class VectorTemplate extends BaseTemplate {
<?php
}
?>
+ <?php
+ if ( is_callable( array( $this, 'getIndicators' ) ) ) {
+ echo $this->getIndicators();
+ }
+ ?>
<h1 id="firstHeading" class="firstHeading" lang="<?php
$this->data['pageLanguage'] =
$this->getSkin()->getTitle()->getPageViewLanguage()->getHtmlCode();
$this->text( 'pageLanguage' );
- ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
+ ?>"><?php $this->html( 'title' ) ?></h1>
<?php $this->html( 'prebodyhtml' ) ?>
<div id="bodyContent" class="mw-body-content">
<?php
@@ -135,7 +140,7 @@ class VectorTemplate extends BaseTemplate {
?>
<div id="jump-to-nav" class="mw-jump">
<?php $this->msg( 'jumpto' ) ?>
- <a href="#mw-navigation"><?php
+ <a href="#mw-head"><?php
$this->msg( 'jumptonavigation' )
?></a><?php
$this->msg( 'comma-separator' )
@@ -187,9 +192,7 @@ class VectorTemplate extends BaseTemplate {
</div>
</div>
<div id="mw-panel">
- <div id="p-logo" role="banner"><a style="background-image: url(<?php
- $this->text( 'logopath' )
- ?>);" href="<?php
+ <div id="p-logo" role="banner"><a class="mw-wiki-logo" href="<?php
echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] )
?>" <?php
echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) )
@@ -254,7 +257,7 @@ class VectorTemplate extends BaseTemplate {
</body>
</html>
- <?php
+<?php
}
/**
@@ -466,7 +469,10 @@ class VectorTemplate extends BaseTemplate {
?>><span><a href="<?php
echo htmlspecialchars( $link['href'] )
?>" <?php
- echo $link['key']
+ echo $link['key'];
+ if ( isset ( $link['rel'] ) ) {
+ echo ' rel="' . htmlspecialchars( $link['rel'] ) . '"';
+ }
?>><?php
// $link['text'] can be undefined - bug 27764
if ( array_key_exists( 'text', $link ) ) {
diff --git a/skins/Vector/collapsibleTabs.js b/skins/Vector/collapsibleTabs.js
index e24bea95..6fd8c496 100644
--- a/skins/Vector/collapsibleTabs.js
+++ b/skins/Vector/collapsibleTabs.js
@@ -95,7 +95,7 @@
if ( $( data.collapsedContainer + ' ' + data.collapsible ).length > 0 &&
data.expandCondition( $.collapsibleTabs.getSettings( $( data.collapsedContainer ).children(
data.collapsible + ':first' ) ).expandedWidth ) ) {
- //move the element from the dropdown to the tab
+ // move the element from the dropdown to the tab
$el.trigger( 'beforeTabExpand' );
$.collapsibleTabs
.moveToExpanded( data.collapsedContainer + ' ' + data.collapsible + ':first' );
diff --git a/skins/Vector/components/animations.less b/skins/Vector/components/animations.less
deleted file mode 100644
index ab273dc0..00000000
--- a/skins/Vector/components/animations.less
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Animate between standard and high definition layouts */
-body.vector-animateLayout {
- .mw-body,
- div#footer,
- #left-navigation {
- .transition(margin-left 250ms, padding 250ms;);
- }
-
- #p-logo {
- .transition(left 250ms);
- }
-
- #mw-panel {
- .transition(padding-right 250ms);
- }
-
- #p-search {
- .transition(margin-right 250ms);
- }
-
- #p-personal {
- .transition(right 250ms);
- }
-
- #mw-head-base {
- .transition(margin-left 250ms);
- }
-}
diff --git a/skins/Vector/components/common.less b/skins/Vector/components/common.less
index ac4b8509..088b373e 100644
--- a/skins/Vector/components/common.less
+++ b/skins/Vector/components/common.less
@@ -50,16 +50,14 @@ body {
}
h1,
- h2,
- #firstHeading {
+ h2 {
font-family: @content-heading-font-family;
line-height: @heading-line-height;
margin-bottom: 0.25em;
padding: 0;
}
- h1,
- #firstHeading {
+ h1 {
font-size: @content-heading-font-size;
}
@@ -98,6 +96,27 @@ body {
font-size: 100%; /* (reset) */
font-family: @content-font-family;
}
+
+ .firstHeading {
+ /* Change the default from mediawiki.skinning CSS to let indicators float into heading area */
+ overflow: visible;
+ }
+
+ .mw-indicators {
+ float: right;
+ line-height: @content-line-height;
+ font-size: @content-font-size;
+ /* Ensure that this is displayed on top of .mw-body-content and clickable */
+ position: relative;
+ z-index: 1;
+ }
+
+ .mw-indicator {
+ display: -moz-inline-block;
+ display: inline-block;
+ zoom: 1;
+ *display: inline;
+ }
}
/* Hide empty portlets */
@@ -107,7 +126,7 @@ div.emptyPortlet {
ul {
list-style-type: disc;
- .list-style-image('images/bullet-icon.png');
+ .list-style-image-svg('images/bullet-icon.svg', 'images/bullet-icon.png');
}
pre, .mw-code {
@@ -123,12 +142,9 @@ pre, .mw-code {
font-size: 140%;
}
-.redirectMsg img {
- vertical-align: text-bottom;
-}
-
.mw-body-content {
position: relative;
line-height: @content-line-height;
font-size: @content-font-size;
+ z-index: 0;
}
diff --git a/skins/Vector/components/navigation.less b/skins/Vector/components/navigation.less
index 8b384acf..e9c5e4af 100644
--- a/skins/Vector/components/navigation.less
+++ b/skins/Vector/components/navigation.less
@@ -129,16 +129,17 @@ div#mw-panel {
}
}
}
+ }
- &.first {
- background-image: none;
- margin-top: 0;
- h3 {
- display: none;
- }
- div.body {
- margin-left: 0.5em;
- }
+ /* First sidebar portlet. Not using :first-of-type for IE<=8 support. */
+ #p-logo + div.portal {
+ background-image: none;
+ margin-top: 0;
+ h3 {
+ display: none;
+ }
+ div.body {
+ margin-left: 0.5em;
}
}
}
diff --git a/skins/Vector/components/tabs.less b/skins/Vector/components/tabs.less
index a5647345..2d28d938 100644
--- a/skins/Vector/components/tabs.less
+++ b/skins/Vector/components/tabs.less
@@ -134,7 +134,6 @@ div#mw-head div.vectorMenu h3 {
.background-image('images/tab-break.png');
background-repeat: no-repeat;
background-position: bottom right;
- margin-left: -1px;
font-size: 1em;
height: 2.5em;
// This effectively moves the "background border" outside of the element to act like a real
diff --git a/skins/Vector/i18n/ace.json b/skins/Vector/i18n/ace.json
index befc427a..94454259 100644
--- a/skins/Vector/i18n/ace.json
+++ b/skins/Vector/i18n/ace.json
@@ -15,5 +15,6 @@
"vector-view-edit": "Andam",
"vector-view-history": "Eu riwayat",
"vector-view-view": "Beuët",
- "vector-view-viewsource": "Eu nè"
+ "vector-view-viewsource": "Eu nè",
+ "vector-more-actions": "Lom"
}
diff --git a/skins/Vector/i18n/aeb.json b/skins/Vector/i18n/aeb.json
index b3c71f9e..9b6c041f 100644
--- a/skins/Vector/i18n/aeb.json
+++ b/skins/Vector/i18n/aeb.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Csisc",
- "Malekbr"
+ "Malekbr",
+ "GeekEmad"
]
},
"vector-action-addsection": "أضف موضوعا",
@@ -13,7 +14,7 @@
"vector-action-unprotect": "غير الحماية",
"vector-view-create": "أنشئ",
"vector-view-edit": "Baddel",
- "vector-view-history": "Warri l'historique",
+ "vector-view-history": "Warri listorik",
"vector-view-view": "Aqra",
"vector-view-viewsource": "اعرض المصدر"
}
diff --git a/skins/Vector/i18n/ang.json b/skins/Vector/i18n/ang.json
index 56321dc0..534aa78f 100644
--- a/skins/Vector/i18n/ang.json
+++ b/skins/Vector/i18n/ang.json
@@ -14,5 +14,6 @@
"vector-view-edit": "Adihtan",
"vector-view-history": "Stǣr",
"vector-view-view": "Rǣdan",
- "vector-view-viewsource": "Sēon fruman"
+ "vector-view-viewsource": "Sēon fruman",
+ "vector-more-actions": "Mā"
}
diff --git a/skins/Vector/i18n/ar.json b/skins/Vector/i18n/ar.json
index 9c07d9b8..4baeb272 100644
--- a/skins/Vector/i18n/ar.json
+++ b/skins/Vector/i18n/ar.json
@@ -7,10 +7,12 @@
"Mido",
"OsamaK",
"أحمد",
- "زكريا"
+ "زكريا",
+ "Khaled"
]
},
"skinname-vector": "فكتور",
+ "vector-skin-desc": "نسة حديثة من مونوبوك بمظهر جديد وسهولة الاستخدام",
"vector.css": "/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة فكتور */",
"vector.js": "/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة فكتور */",
"vector-action-addsection": "أضف موضوعا",
diff --git a/skins/Vector/i18n/arq.json b/skins/Vector/i18n/arq.json
index 740ab9b7..1673efbb 100644
--- a/skins/Vector/i18n/arq.json
+++ b/skins/Vector/i18n/arq.json
@@ -15,5 +15,6 @@
"vector-view-edit": "بدل",
"vector-view-history": "روح للتاريخي",
"vector-view-view": "أقرى",
- "vector-view-viewsource": "شوف المصدر"
+ "vector-view-viewsource": "شوف المصدر",
+ "vector-more-actions": "زيادة"
}
diff --git a/skins/Vector/i18n/av.json b/skins/Vector/i18n/av.json
index e7a6452b..97be52f5 100644
--- a/skins/Vector/i18n/av.json
+++ b/skins/Vector/i18n/av.json
@@ -1,8 +1,21 @@
{
"@metadata": {
"authors": [
- "Умар"
+ "Умар",
+ "Gazimagomedov"
]
},
- "vector-view-edit": "Хисизабизе"
+ "vector-skin-desc": "MonoBook'алъул цӀияб версия цияб куцгун ва цӀиял юзабилитиялгун",
+ "vector-action-addsection": "Тема жубазе",
+ "vector-action-delete": "БацIцIине",
+ "vector-action-move": "ЦӀар хисизе",
+ "vector-action-protect": "Хиса-басияздасан цIунизе",
+ "vector-action-undelete": "БукӀараб гӀадин гьабизе",
+ "vector-action-unprotect": "ЦӀуни хисизе",
+ "vector-view-create": "Гьабизе",
+ "vector-view-edit": "Хисизабизе",
+ "vector-view-history": "Тарих балагьизе",
+ "vector-view-view": "ЦӀализе",
+ "vector-view-viewsource": "Вики-текст балагьизе",
+ "vector-more-actions": "Жеги"
}
diff --git a/skins/Vector/i18n/awa.json b/skins/Vector/i18n/awa.json
new file mode 100644
index 00000000..2aebbedc
--- /dev/null
+++ b/skins/Vector/i18n/awa.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "vector-action-addsection": "शिर्षक जोडा जाय",
+ "vector-action-delete": "मेटावा जाय",
+ "vector-action-move": "घुस्कावा जाय",
+ "vector-action-protect": "सुरक्षित करा जाय",
+ "vector-action-undelete": "हटाइब वापस लिहा जाय",
+ "vector-action-unprotect": "सुरक्षा परिवर्तन करा जाय",
+ "vector-view-create": "बनावा जाय",
+ "vector-view-edit": "सम्पादन",
+ "vector-view-history": "इतिहास देखा जाय",
+ "vector-view-view": "पढा जाय",
+ "vector-view-viewsource": "स्रोत देखा जाय",
+ "vector-more-actions": "अउर"
+}
diff --git a/skins/Vector/i18n/azb.json b/skins/Vector/i18n/azb.json
index ae46e1ce..cc06620e 100644
--- a/skins/Vector/i18n/azb.json
+++ b/skins/Vector/i18n/azb.json
@@ -3,7 +3,8 @@
"authors": [
"E THP",
"Ebrahimi-amir",
- "Mousa"
+ "Mousa",
+ "Amir a57"
]
},
"vector-action-addsection": "قوْنو آرتیر",
@@ -16,5 +17,6 @@
"vector-view-edit": "دَییشدیر",
"vector-view-history": "گئچمیشه باخ",
"vector-view-view": "اوْخو",
- "vector-view-viewsource": "قایناغا باخ"
+ "vector-view-viewsource": "قایناغا باخ",
+ "vector-more-actions": "داها"
}
diff --git a/skins/Vector/i18n/be-tarask.json b/skins/Vector/i18n/be-tarask.json
index 4bbef699..29219fc2 100644
--- a/skins/Vector/i18n/be-tarask.json
+++ b/skins/Vector/i18n/be-tarask.json
@@ -7,6 +7,7 @@
]
},
"skinname-vector": "Вэктар",
+ "vector-skin-desc": "Сучасная вэрсія MonoBook з абноўленым выглядам і шматлікімі паляпшэньнямі",
"vector-action-addsection": "Дадаць тэму",
"vector-action-delete": "Выдаліць",
"vector-action-move": "Перанесьці",
diff --git a/skins/Vector/i18n/bgn.json b/skins/Vector/i18n/bgn.json
new file mode 100644
index 00000000..6e3941f2
--- /dev/null
+++ b/skins/Vector/i18n/bgn.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "vector-action-addsection": "یک بخش ئی لۆڑ کورتین",
+ "vector-action-move": "انتقال",
+ "vector-view-create": "جوڑ\t کورتین",
+ "vector-view-edit": "ایڈیٹ",
+ "vector-view-history": "تاریخچه ئی دیستین",
+ "vector-view-view": "وانتین",
+ "vector-more-actions": "گیشتیر"
+}
diff --git a/skins/Vector/i18n/bho.json b/skins/Vector/i18n/bho.json
index e41f3322..ec61c4cd 100644
--- a/skins/Vector/i18n/bho.json
+++ b/skins/Vector/i18n/bho.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Ganesh",
- "Nepaboy"
+ "Nepaboy",
+ "SatyamMishra"
]
},
"vector-action-addsection": "विषय जोड़ीं",
@@ -15,5 +16,6 @@
"vector-view-edit": "सम्पादन",
"vector-view-history": "इतिहास देखीं",
"vector-view-view": "पढ़ीं",
- "vector-view-viewsource": "स्त्रोत देखीं"
+ "vector-view-viewsource": "स्रोत देखीं",
+ "vector-more-actions": "अधिक"
}
diff --git a/skins/Vector/i18n/bn.json b/skins/Vector/i18n/bn.json
index a2c37b3d..1f4521c0 100644
--- a/skins/Vector/i18n/bn.json
+++ b/skins/Vector/i18n/bn.json
@@ -18,7 +18,7 @@
"vector-action-unprotect": "সুরক্ষা পরিবর্তন",
"vector-view-create": "তৈরি",
"vector-view-edit": "সম্পাদনা",
- "vector-view-history": "ইতিহাস",
+ "vector-view-history": "ইতিহাস দেখুন",
"vector-view-view": "পড়ুন",
"vector-view-viewsource": "উৎস দেখুন",
"vector-more-actions": "আরও"
diff --git a/skins/Vector/i18n/ca.json b/skins/Vector/i18n/ca.json
index c494f64f..bba84347 100644
--- a/skins/Vector/i18n/ca.json
+++ b/skins/Vector/i18n/ca.json
@@ -13,7 +13,7 @@
},
"skinname-vector": "Vector",
"vector-skin-desc": "Versió moderna del MonoBook amb un nou aspesctes i moltes millores en la usabilitat",
- "vector-action-addsection": "Secció nova",
+ "vector-action-addsection": "Afegeix un tema",
"vector-action-delete": "Esborra",
"vector-action-move": "Reanomena",
"vector-action-protect": "Protegeix",
@@ -21,7 +21,7 @@
"vector-action-unprotect": "Desprotegeix",
"vector-view-create": "Crea",
"vector-view-edit": "Modifica",
- "vector-view-history": "Mostra l'historial",
+ "vector-view-history": "Mostra l’historial",
"vector-view-view": "Mostra",
"vector-view-viewsource": "Mostra el codi",
"vector-more-actions": "Més"
diff --git a/skins/Vector/i18n/cv.json b/skins/Vector/i18n/cv.json
index 6206af8d..cda61b0b 100644
--- a/skins/Vector/i18n/cv.json
+++ b/skins/Vector/i18n/cv.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Chavash",
- "FLAGELLVM DEI"
+ "FLAGELLVM DEI",
+ "Chuvash2014"
]
},
"vector-action-addsection": "Тема хуш",
@@ -11,7 +12,8 @@
"vector-action-protect": "Хӳтĕле",
"vector-view-create": "Çĕннине ту",
"vector-view-edit": "Тӳрлет",
- "vector-view-history": "Кун-çул",
+ "vector-view-history": "Истори",
"vector-view-view": "Вула",
- "vector-view-viewsource": "пуçламăш текста пăх"
+ "vector-view-viewsource": "Кодне пăх",
+ "vector-more-actions": "Тата"
}
diff --git a/skins/Vector/i18n/de-ch.json b/skins/Vector/i18n/de-ch.json
new file mode 100644
index 00000000..9fd82d4b
--- /dev/null
+++ b/skins/Vector/i18n/de-ch.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Marcell0"
+ ]
+ },
+ "vector-more-actions": "Mehr"
+}
diff --git a/skins/Vector/i18n/de.json b/skins/Vector/i18n/de.json
index d2201c2f..2a9c159a 100644
--- a/skins/Vector/i18n/de.json
+++ b/skins/Vector/i18n/de.json
@@ -8,7 +8,7 @@
]
},
"skinname-vector": "Vector",
- "vector-skin-desc": "Moderne Version von Monobook mit frischem Aussehen und vielen Verbesserungen an der Benutzerfreundlichkeit",
+ "vector-skin-desc": "Stellt eine modernisierte Benutzeroberfläche bereit",
"vector.css": "/* Das folgende CSS wird für Benutzer der Vector-Benutzeroberfläche geladen. */",
"vector.js": "/* Das folgende JavaScript wird für Benutzer der Vector-Benutzeroberfläche geladen. */",
"vector-action-addsection": "Abschnitt hinzufügen",
diff --git a/skins/Vector/i18n/dv.json b/skins/Vector/i18n/dv.json
index 9e530568..a3567224 100644
--- a/skins/Vector/i18n/dv.json
+++ b/skins/Vector/i18n/dv.json
@@ -1,17 +1,20 @@
{
"@metadata": {
"authors": [
- "Ushau97"
+ "Ushau97",
+ "Glaisher"
]
},
"vector-action-addsection": "ޚިޔާލެއް އިތުރުކުރައްވާ",
"vector-action-delete": "ފޮހެލައްވާ",
"vector-action-move": "ތަން ބަދަލުކުރައްވާ",
"vector-action-protect": "ދިފާޢުކުރައްވާ",
+ "vector-action-undelete": "އިޔާދަކުރައްވާ",
"vector-action-unprotect": "ދިފާޢުކުރުން ބަދަލުކުރައްވާ",
"vector-view-create": "ފަށްޓަވާ",
"vector-view-edit": "އުނިއިތުރު ގެންނަވާ",
"vector-view-history": "ޞަފްޙާގެ ތާރީޚް",
"vector-view-view": "ކިޔުއްވާ",
- "vector-view-viewsource": "މަސްދަރު ބައްލަވާ"
+ "vector-view-viewsource": "މަސްދަރު ބައްލަވާ",
+ "vector-more-actions": "އިތުރަށް"
}
diff --git a/skins/Vector/i18n/el.json b/skins/Vector/i18n/el.json
index 06fa36b8..0b57e52c 100644
--- a/skins/Vector/i18n/el.json
+++ b/skins/Vector/i18n/el.json
@@ -6,9 +6,11 @@
"Evropi",
"Omnipaedista",
"Protnet",
- "ZaDiak"
+ "ZaDiak",
+ "Geraki"
]
},
+ "vector-skin-desc": "Σύγχρονη έκδοση του MonoBook με φρέσκια ματιά και πολλές βελτιώσεις χρηστικότητας",
"vector.css": "/* Το τοποθετημένο εδώ CSS θα επηρεάσει χρήστες του Vector skin */",
"vector.js": "/* Οποιοσδήποτε κώδικας JavaScript εδώ θα φορτωθεί για χρήστες που χρησιμοποιούν το Vector skin */",
"vector-action-addsection": "Προσθήκη θέματος",
diff --git a/skins/Vector/i18n/eo.json b/skins/Vector/i18n/eo.json
index 5f92fe8a..730aa2cc 100644
--- a/skins/Vector/i18n/eo.json
+++ b/skins/Vector/i18n/eo.json
@@ -11,7 +11,7 @@
"vector.js": "/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Vektora temo. */",
"vector-action-addsection": "Aldoni temon",
"vector-action-delete": "Forigi",
- "vector-action-move": "Alinomigi",
+ "vector-action-move": "Alinomi",
"vector-action-protect": "Protekti",
"vector-action-undelete": "Malforigi",
"vector-action-unprotect": "Ŝanĝi protektadon",
diff --git a/skins/Vector/i18n/eu.json b/skins/Vector/i18n/eu.json
index 856742c2..1fc829bf 100644
--- a/skins/Vector/i18n/eu.json
+++ b/skins/Vector/i18n/eu.json
@@ -3,9 +3,11 @@
"authors": [
"Unai Fdz. de Betoño",
"Xabier Armendaritz",
- "Fitoschido"
+ "Fitoschido",
+ "Subi"
]
},
+ "vector-skin-desc": "MonoBook-en bertsio modernoa, itxura berriarekin eta erabilgarritasun hobekuntza askorekin",
"vector-action-addsection": "Gehitu atala",
"vector-action-delete": "Ezabatu",
"vector-action-move": "Mugitu",
diff --git a/skins/Vector/i18n/fi.json b/skins/Vector/i18n/fi.json
index 75336897..5cbeb84c 100644
--- a/skins/Vector/i18n/fi.json
+++ b/skins/Vector/i18n/fi.json
@@ -4,9 +4,11 @@
"Crt",
"Nedergard",
"Nike",
- "Pxos"
+ "Pxos",
+ "SuperPete"
]
},
+ "vector-skin-desc": "Uudistettu versio MonoBookista raikkaalla ulkoasulla ja useilla käytettävyysparannuksilla",
"vector.css": "/* Tämä sivu sisältää Vector-ulkoasua muuttavia tyylejä. */",
"vector.js": "/* Tämän sivun JavaScript-koodi liitetään Vector-tyyliin */",
"vector-action-addsection": "Lisää aihe",
diff --git a/skins/Vector/i18n/frc.json b/skins/Vector/i18n/frc.json
index f13d8ce6..47339730 100644
--- a/skins/Vector/i18n/frc.json
+++ b/skins/Vector/i18n/frc.json
@@ -1,9 +1,16 @@
{
"@metadata": {
"authors": [
- "Ebe123"
+ "Ebe123",
+ "Hangmanwa7id"
]
},
"vector-action-delete": "Supprimer",
- "vector-action-protect": "Protéger"
+ "vector-action-move": "Renommer",
+ "vector-action-protect": "Protéger",
+ "vector-view-create": "Créer",
+ "vector-view-edit": "Changer",
+ "vector-view-view": "Lire",
+ "vector-view-viewsource": "Regarder la source",
+ "vector-more-actions": "Plus"
}
diff --git a/skins/Vector/i18n/fy.json b/skins/Vector/i18n/fy.json
index 328193d3..bafda6d9 100644
--- a/skins/Vector/i18n/fy.json
+++ b/skins/Vector/i18n/fy.json
@@ -2,17 +2,20 @@
"@metadata": {
"authors": [
"Kening Aldgilles",
- "SK-luuut"
+ "SK-luuut",
+ "Robin0van0der0vliet"
]
},
+ "vector-action-addsection": "Kopke tafoegje",
"vector-action-delete": "Fuortsmite",
"vector-action-move": "Werneam",
"vector-action-protect": "Beskermje",
"vector-action-undelete": "Tebeksette",
"vector-action-unprotect": "Beskerming fuorthelje",
"vector-view-create": "Oanmeitsje",
- "vector-view-edit": "Wizigje",
+ "vector-view-edit": "Bewurkje",
"vector-view-history": "Skiednis sjen litte",
"vector-view-view": "Lês",
- "vector-view-viewsource": "Besjoch de boarne"
+ "vector-view-viewsource": "Besjoch de boarne",
+ "vector-more-actions": "Mear"
}
diff --git a/skins/Vector/i18n/gom-deva.json b/skins/Vector/i18n/gom-deva.json
index 044d43c0..244d8625 100644
--- a/skins/Vector/i18n/gom-deva.json
+++ b/skins/Vector/i18n/gom-deva.json
@@ -15,5 +15,6 @@
"vector-view-edit": "बदल",
"vector-view-history": "इतिहास पळेयात",
"vector-view-view": "वाचचें",
- "vector-view-viewsource": "उगम पळेयात"
+ "vector-view-viewsource": "उगम पळेयात",
+ "vector-more-actions": "आनीक"
}
diff --git a/skins/Vector/i18n/hr.json b/skins/Vector/i18n/hr.json
index 1887ee51..fb288f1a 100644
--- a/skins/Vector/i18n/hr.json
+++ b/skins/Vector/i18n/hr.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Ex13",
- "Tivek"
+ "Tivek",
+ "Bugoslav"
]
},
"vector-action-addsection": "Dodaj temu",
@@ -15,5 +16,6 @@
"vector-view-edit": "Uredi",
"vector-view-history": "Vidi stare izmjene",
"vector-view-view": "Čitaj",
- "vector-view-viewsource": "Vidi izvor"
+ "vector-view-viewsource": "Vidi izvor",
+ "vector-more-actions": "Više"
}
diff --git a/skins/Vector/i18n/hu.json b/skins/Vector/i18n/hu.json
index a144ece2..22db6af8 100644
--- a/skins/Vector/i18n/hu.json
+++ b/skins/Vector/i18n/hu.json
@@ -9,6 +9,7 @@
"Tgr"
]
},
+ "vector-skin-desc": "A MonoBook felület modern változata frissebb kinézettel és sok használhatóságot javító fejlesztéssel",
"vector.css": "/* Az ide elhelyezett CSS hatással lesz a Vector felület használóira */",
"vector.js": "/* A Vector felületet használó szerkesztők számára betöltendő JavaScriptek */",
"vector-action-addsection": "Új téma nyitása",
diff --git a/skins/Vector/i18n/ilo.json b/skins/Vector/i18n/ilo.json
index d83586d0..54a925df 100644
--- a/skins/Vector/i18n/ilo.json
+++ b/skins/Vector/i18n/ilo.json
@@ -5,7 +5,7 @@
"Saluyot"
]
},
- "vector-skin-desc": "Modernno a bersion ti MonoBook nga addaan iti baro a langa ken adu kadagiti naserbi a panagpasayaat",
+ "vector-skin-desc": "Moderno a bersion ti MonoBook nga addaan iti baro a langa ken adu kadagiti naserbi a panagpasayaat",
"vector-action-addsection": "Agnayon ti topiko",
"vector-action-delete": "Ikkaten",
"vector-action-move": "Iyalis",
diff --git a/skins/Vector/i18n/is.json b/skins/Vector/i18n/is.json
index dc54f1b6..221a7ad0 100644
--- a/skins/Vector/i18n/is.json
+++ b/skins/Vector/i18n/is.json
@@ -17,5 +17,6 @@
"vector-view-edit": "Breyta",
"vector-view-history": "Breytingaskrá",
"vector-view-view": "Lesa",
- "vector-view-viewsource": "Sýna frumkóða"
+ "vector-view-viewsource": "Sýna frumkóða",
+ "vector-more-actions": "Meira"
}
diff --git a/skins/Vector/i18n/it.json b/skins/Vector/i18n/it.json
index 2edac078..53997c2f 100644
--- a/skins/Vector/i18n/it.json
+++ b/skins/Vector/i18n/it.json
@@ -6,7 +6,8 @@
"Gianfranco",
"Melos",
"Pietrodn",
- "FRacco"
+ "FRacco",
+ "Elitre"
]
},
"vector-skin-desc": "Versione moderna del MonoBook con un aspetto rinnovato e molti miglioramenti dell'usabilità",
@@ -22,6 +23,6 @@
"vector-view-edit": "Modifica",
"vector-view-history": "Cronologia",
"vector-view-view": "Leggi",
- "vector-view-viewsource": "Visualizza sorgente",
+ "vector-view-viewsource": "Visualizza wikitesto",
"vector-more-actions": "Altro"
}
diff --git a/skins/Vector/i18n/kn.json b/skins/Vector/i18n/kn.json
index aae7272b..fcd84f70 100644
--- a/skins/Vector/i18n/kn.json
+++ b/skins/Vector/i18n/kn.json
@@ -3,7 +3,8 @@
"authors": [
"Ktkaushik",
"Nayvik",
- "VASANTH S.N."
+ "VASANTH S.N.",
+ "Omshivaprakash"
]
},
"vector-action-addsection": "ವಿಷಯ ಸೇರಿಸಿ",
@@ -16,5 +17,6 @@
"vector-view-edit": "ಸಂಪಾದಿಸಿ",
"vector-view-history": "ಇತಿಹಾಸವನ್ನು ನೋಡಿ",
"vector-view-view": "ಓದು",
- "vector-view-viewsource": "ಆಕರ ವೀಕ್ಷಿಸು"
+ "vector-view-viewsource": "ಆಕರ ವೀಕ್ಷಿಸು",
+ "vector-more-actions": "ಇನ್ನಷ್ಟು"
}
diff --git a/skins/Vector/i18n/ksh.json b/skins/Vector/i18n/ksh.json
index 7d91fae5..05360965 100644
--- a/skins/Vector/i18n/ksh.json
+++ b/skins/Vector/i18n/ksh.json
@@ -4,18 +4,20 @@
"Purodha"
]
},
- "skinname-vector": "Vektor",
- "vector.css": "/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Vector“ */",
- "vector.js": "/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch \"Vector\" jescheck */",
- "vector-action-addsection": "Ne neue Afschnet onge draan!",
- "vector-action-delete": "Fottschmiiße!",
+ "skinname-vector": "Väktor",
+ "vector-skin-desc": "En modärne Väsjohn vun dä ällere Bedehnbovverfläsch „Monobooch“ met enem neue Ußsinn un Verbäßeronge bem Bedehne.",
+ "vector.css": "/* Dat CSS heh aan dä Schtäll wirrek blohß op de Bedehnbovverfläsch „Väktor“ */",
+ "vector.js": "/* De JavaSkreppte fun heh krejje alle Sigge met dä Bedehnbovverfläsch „Väktor“ jeschek */",
+ "vector-action-addsection": "Ne neue Afschnet onge drahn!",
+ "vector-action-delete": "Fottschmihße!",
"vector-action-move": "Ömnänne!",
"vector-action-protect": "Schöze!",
"vector-action-undelete": "Zerökholle!",
"vector-action-unprotect": "Schoz ändere!",
- "vector-view-create": "Neu Schriive!",
- "vector-view-edit": "Ändere!",
+ "vector-view-create": "Neu Schrihve!",
+ "vector-view-edit": "Änndere!",
"vector-view-history": "Versione zeije!",
- "vector-view-view": "Lesse!",
- "vector-view-viewsource": "Wikitex aanlooere!"
+ "vector-view-view": "Lässe!",
+ "vector-view-viewsource": "Der Wikitäx aanlohre!",
+ "vector-more-actions": "Mieh"
}
diff --git a/skins/Vector/i18n/li.json b/skins/Vector/i18n/li.json
index 8fe7e265..ae9c2cc4 100644
--- a/skins/Vector/i18n/li.json
+++ b/skins/Vector/i18n/li.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Ooswesthoesbes"
+ "Ooswesthoesbes",
+ "Robin0van0der0vliet"
]
},
"vector-action-addsection": "Voog köpke toe",
@@ -14,5 +15,6 @@
"vector-view-edit": "Bewirk",
"vector-view-history": "Bekiek de gesjiedenis",
"vector-view-view": "Laes",
- "vector-view-viewsource": "Bekiek bróntèks"
+ "vector-view-viewsource": "Bekiek bróntèks",
+ "vector-more-actions": "Mieë"
}
diff --git a/skins/Vector/i18n/ln.json b/skins/Vector/i18n/ln.json
index 5fb40110..19cc48aa 100644
--- a/skins/Vector/i18n/ln.json
+++ b/skins/Vector/i18n/ln.json
@@ -15,5 +15,6 @@
"vector-view-edit": "Kobɔngisa",
"vector-view-history": "Komɔ́nisa mokóló",
"vector-view-view": "Kotánga",
- "vector-view-viewsource": "Komɔ́nisa mosólo"
+ "vector-view-viewsource": "Komɔ́nisa mosólo",
+ "vector-more-actions": "Elandí"
}
diff --git a/skins/Vector/i18n/lrc.json b/skins/Vector/i18n/lrc.json
index 2f756b55..d77bb7ba 100644
--- a/skins/Vector/i18n/lrc.json
+++ b/skins/Vector/i18n/lrc.json
@@ -4,15 +4,16 @@
"Mogoeilor"
]
},
- "vector-action-addsection": "موضوع اضاف بكيد",
+ "vector-action-addsection": "داسون اضاف بكيد",
"vector-action-delete": "پاکسا کردن",
"vector-action-move": "جاوه جا بوئيت",
- "vector-action-protect": "حمايت بكيد",
+ "vector-action-protect": "پر و پیم بكيد",
"vector-action-undelete": "حذف نبيئني",
"vector-action-unprotect": "حمايت آلشت بكيد",
"vector-view-create": "راس كردن",
"vector-view-edit": "ويرايشت",
"vector-view-history": "ديئن ويرگار",
"vector-view-view": "حنن",
- "vector-view-viewsource": "سرچشمه نه بوينيت"
+ "vector-view-viewsource": "سرچشمه نه بوينيت",
+ "vector-more-actions": "بیشتر"
}
diff --git a/skins/Vector/i18n/lt.json b/skins/Vector/i18n/lt.json
index 40886a84..a097eb99 100644
--- a/skins/Vector/i18n/lt.json
+++ b/skins/Vector/i18n/lt.json
@@ -4,7 +4,9 @@
"Garas",
"Homo",
"Matasg",
- "Perkunas"
+ "Perkunas",
+ "Hugo.arg",
+ "Tomasdd"
]
},
"skinname-vector": "Vektorinė",
@@ -16,7 +18,8 @@
"vector-action-unprotect": "Keisti apsaugą",
"vector-view-create": "Kurti",
"vector-view-edit": "Redaguoti",
- "vector-view-history": "Istorija",
+ "vector-view-history": "Peržiūrėti istoriją",
"vector-view-view": "Skaityti",
- "vector-view-viewsource": "Žiūrėti kodą"
+ "vector-view-viewsource": "Žiūrėti kodą",
+ "vector-more-actions": "Daugiau"
}
diff --git a/skins/Vector/i18n/mai.json b/skins/Vector/i18n/mai.json
index 068e67d9..b7d984d4 100644
--- a/skins/Vector/i18n/mai.json
+++ b/skins/Vector/i18n/mai.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Ggajendra",
- "Umeshberma"
+ "Umeshberma",
+ "Tulsi Bhagat"
]
},
"skinname-vector": "सदिश",
@@ -16,5 +17,6 @@
"vector-view-edit": "सम्पादन करू",
"vector-view-history": "इतिहास देखू",
"vector-view-view": "पढ़ू",
- "vector-view-viewsource": "जड़ि देखू"
+ "vector-view-viewsource": "जड़ि देखू",
+ "vector-more-actions": "आर"
}
diff --git a/skins/Vector/i18n/mo.json b/skins/Vector/i18n/mo.json
new file mode 100644
index 00000000..8b8ab8ab
--- /dev/null
+++ b/skins/Vector/i18n/mo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "TheChampionMan1234"
+ ]
+ },
+ "vector-more-actions": "Май мулт"
+}
diff --git a/skins/Vector/i18n/nap.json b/skins/Vector/i18n/nap.json
index 51e03a52..0117c5e0 100644
--- a/skins/Vector/i18n/nap.json
+++ b/skins/Vector/i18n/nap.json
@@ -5,6 +5,7 @@
"C.R."
]
},
+ "vector-skin-desc": "Verziona muderna 'e MonoBook cu n'aspetto nuovo nuovo e tante migliuramente d'uso",
"vector-action-addsection": "Aggiunge chiacchierata",
"vector-action-delete": "Scancèlla",
"vector-action-move": "Spusta",
@@ -15,5 +16,6 @@
"vector-view-edit": "Càgna",
"vector-view-history": "Vere cronologgia",
"vector-view-view": "Liegge",
- "vector-view-viewsource": "Vere sorgente"
+ "vector-view-viewsource": "Vere sorgente",
+ "vector-more-actions": "Cchiù"
}
diff --git a/skins/Vector/i18n/ne.json b/skins/Vector/i18n/ne.json
index 443becb9..49ccae7a 100644
--- a/skins/Vector/i18n/ne.json
+++ b/skins/Vector/i18n/ne.json
@@ -3,7 +3,8 @@
"authors": [
"Bhawani Gautam",
"RajeshPandey",
- "सरोज कुमार ढकाल"
+ "सरोज कुमार ढकाल",
+ "बिप्लब आनन्द"
]
},
"skinname-vector": "भेक्टर",
@@ -18,5 +19,6 @@
"vector-view-edit": "सम्पादन",
"vector-view-history": "इतिहास हेर्ने",
"vector-view-view": "पढ्ने",
- "vector-view-viewsource": "स्रोत हेर्ने"
+ "vector-view-viewsource": "स्रोत हेर्ने",
+ "vector-more-actions": "थप"
}
diff --git a/skins/Vector/i18n/oc.json b/skins/Vector/i18n/oc.json
index 2aa517e9..5fb2c094 100644
--- a/skins/Vector/i18n/oc.json
+++ b/skins/Vector/i18n/oc.json
@@ -17,5 +17,6 @@
"vector-view-edit": "Modificar",
"vector-view-history": "Veire l'istoric",
"vector-view-view": "Legir",
- "vector-view-viewsource": "Veire la font"
+ "vector-view-viewsource": "Veire la font",
+ "vector-more-actions": "Mai"
}
diff --git a/skins/Vector/i18n/os.json b/skins/Vector/i18n/os.json
index a1782896..58d41d31 100644
--- a/skins/Vector/i18n/os.json
+++ b/skins/Vector/i18n/os.json
@@ -15,5 +15,6 @@
"vector-view-edit": "Ивын",
"vector-view-history": "Истори",
"vector-view-view": "Кæсын",
- "vector-view-viewsource": "Код кæсын"
+ "vector-view-viewsource": "Код кæсын",
+ "vector-more-actions": "Фылдæр"
}
diff --git a/skins/Vector/i18n/pa.json b/skins/Vector/i18n/pa.json
index 5f153999..c2f3811e 100644
--- a/skins/Vector/i18n/pa.json
+++ b/skins/Vector/i18n/pa.json
@@ -17,5 +17,6 @@
"vector-view-edit": "ਸੋਧੋ",
"vector-view-history": "ਅਤੀਤ ਵੇਖੋ",
"vector-view-view": "ਪੜ੍ਹੋ",
- "vector-view-viewsource": "ਸਰੋਤ ਵੇਖੋ"
+ "vector-view-viewsource": "ਸਰੋਤ ਵੇਖੋ",
+ "vector-more-actions": "ਹੋਰ"
}
diff --git a/skins/Vector/i18n/pfl.json b/skins/Vector/i18n/pfl.json
index 419eb4e6..a4c39f4a 100644
--- a/skins/Vector/i18n/pfl.json
+++ b/skins/Vector/i18n/pfl.json
@@ -9,9 +9,10 @@
"vector-action-move": "Vaschiewe",
"vector-action-protect": "Schidze",
"vector-action-undelete": "Zriggbringe",
- "vector-view-create": "Õleesche",
- "vector-view-edit": "Drõ schaffe",
+ "vector-view-create": "Oaleesche",
+ "vector-view-edit": "Droa schaffe",
"vector-view-history": "Dadaigschischd",
"vector-view-view": "Lese",
- "vector-view-viewsource": "Gwelltegschd zaische"
+ "vector-view-viewsource": "Gwelltegschd zaische",
+ "vector-more-actions": "Mea"
}
diff --git a/skins/Vector/i18n/pms.json b/skins/Vector/i18n/pms.json
index 79627b0d..40dab80e 100644
--- a/skins/Vector/i18n/pms.json
+++ b/skins/Vector/i18n/pms.json
@@ -14,5 +14,6 @@
"vector-view-edit": "Modifiché",
"vector-view-history": "Smon-e la stòria",
"vector-view-view": "Lese",
- "vector-view-viewsource": "Vëdde la sorgiss"
+ "vector-view-viewsource": "Vëdde la sorgiss",
+ "vector-more-actions": "Ëd pi"
}
diff --git a/skins/Vector/i18n/ps.json b/skins/Vector/i18n/ps.json
index 2ccb2658..474fac18 100644
--- a/skins/Vector/i18n/ps.json
+++ b/skins/Vector/i18n/ps.json
@@ -7,7 +7,7 @@
"skinname-vector": "وېکټور",
"vector.css": "/* د CSS هره بڼه چې دلته ځای پر ځای کېږي هغه به د وېکټور د پوښ ټولو کارنانو لپاره کار کوي */",
"vector.js": "/* د جاوا هر يو سکرېپټ چې دلته ځای پر ځای کېږي هغه به د وېکټور د پوښ ټولو کارنانو لپاره کار کوي */",
- "vector-action-addsection": "سرليکونه ورگډول",
+ "vector-action-addsection": "سرليک ورگډول",
"vector-action-delete": "ړنگول",
"vector-action-move": "لېږدول",
"vector-action-protect": "ژغورل",
@@ -17,5 +17,6 @@
"vector-view-edit": "سمول",
"vector-view-history": "پېښليک کتل",
"vector-view-view": "لوستل",
- "vector-view-viewsource": "سرچينه کتل"
+ "vector-view-viewsource": "سرچينه کتل",
+ "vector-more-actions": "نور"
}
diff --git a/skins/Vector/i18n/pt-br.json b/skins/Vector/i18n/pt-br.json
index db476759..93c16401 100644
--- a/skins/Vector/i18n/pt-br.json
+++ b/skins/Vector/i18n/pt-br.json
@@ -5,7 +5,8 @@
"Diego Queiroz",
"Giro720",
"Helder.wiki",
- 555
+ 555,
+ "He7d3r"
]
},
"vector.js": "/* Qualquer JavaScript aqui colocado afetará os usuários do skin Vector */",
diff --git a/skins/Vector/i18n/qqq.json b/skins/Vector/i18n/qqq.json
index fea395be..25b94339 100644
--- a/skins/Vector/i18n/qqq.json
+++ b/skins/Vector/i18n/qqq.json
@@ -6,14 +6,15 @@
"Lloffiwr",
"Shirayuki",
"Umherirrender",
- "Matma Rex"
+ "Matma Rex",
+ "Liuxinyu970226"
]
},
"skinname-vector": "{{optional}}",
"vector-skin-desc": "{{desc|what=skin|name=Vector|url=https://www.mediawiki.org/wiki/Skin:Vector}}",
"vector.css": "{{optional}}",
"vector.js": "{{optional}}",
- "vector-action-addsection": "Used in the Vector skin. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}",
+ "vector-action-addsection": "Used in the Vector skin. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}\n{{Identical|Add topic}}",
"vector-action-delete": "Used in the Vector skin, as the name of a tab at the top of the page. See for example {{canonicalurl:Main_Page|useskin=vector}}\n\n{{Identical|Delete}}",
"vector-action-move": "Used in the Vector skin, on the tabs at the top of the page. See for example {{canonicalurl:Talk:Main_Page|useskin=vector}}\n\n{{Identical|Move}}",
"vector-action-protect": "Tab at top of page, in vector skin\n\n{{Identical|Protect}}",
diff --git a/skins/Vector/i18n/ro.json b/skins/Vector/i18n/ro.json
index 96725c0b..b1d80733 100644
--- a/skins/Vector/i18n/ro.json
+++ b/skins/Vector/i18n/ro.json
@@ -9,6 +9,7 @@
]
},
"skinname-vector": "Vector",
+ "vector-skin-desc": "Versiunea modernă pentru MonoBook cu o înfățișare reîmprospătată și multe îmbunătățiri de uzabilitate",
"vector.css": "/* CSS plasate aici vor afecta utilizatorii stilului Vector */",
"vector-action-addsection": "Mesaj nou",
"vector-action-delete": "Ștergere",
diff --git a/skins/Vector/i18n/roa-tara.json b/skins/Vector/i18n/roa-tara.json
index c5721e77..37ea6d98 100644
--- a/skins/Vector/i18n/roa-tara.json
+++ b/skins/Vector/i18n/roa-tara.json
@@ -5,6 +5,7 @@
]
},
"skinname-vector": "Vettore",
+ "vector-skin-desc": "Versione moderne de MonoBook cu 'nu sguarde aggiornate e 'nu sbuènne de miglioramende sus a l'ausabbilità",
"vector.css": "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Vettore */",
"vector.js": "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Vettore */",
"vector-action-addsection": "Aggiunge 'na discussiona",
@@ -17,5 +18,6 @@
"vector-view-edit": "Cange",
"vector-view-history": "Vide 'u cunde",
"vector-view-view": "Ligge",
- "vector-view-viewsource": "Vide 'u sorgende"
+ "vector-view-viewsource": "Vide 'u sorgende",
+ "vector-more-actions": "De cchiù"
}
diff --git a/skins/Vector/i18n/ru.json b/skins/Vector/i18n/ru.json
index cd344b9b..696ee0ef 100644
--- a/skins/Vector/i18n/ru.json
+++ b/skins/Vector/i18n/ru.json
@@ -19,7 +19,7 @@
"vector-action-protect": "Защитить",
"vector-action-undelete": "Восстановить",
"vector-action-unprotect": "Изменить защиту",
- "vector-view-create": "Создание",
+ "vector-view-create": "Создать",
"vector-view-edit": "Править",
"vector-view-history": "История",
"vector-view-view": "Читать",
diff --git a/skins/Vector/i18n/rue.json b/skins/Vector/i18n/rue.json
index 2147f80e..1302c681 100644
--- a/skins/Vector/i18n/rue.json
+++ b/skins/Vector/i18n/rue.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "Gazeb"
+ "Gazeb",
+ "Tkalyn"
]
},
"vector-action-addsection": "Придати тему",
@@ -14,5 +15,6 @@
"vector-view-edit": "Едітовати",
"vector-view-history": "Видїти історію",
"vector-view-view": "Чітати",
- "vector-view-viewsource": "Видїти код"
+ "vector-view-viewsource": "Видїти код",
+ "vector-more-actions": "Веце"
}
diff --git a/skins/Vector/i18n/sah.json b/skins/Vector/i18n/sah.json
index 9d44db50..92b32649 100644
--- a/skins/Vector/i18n/sah.json
+++ b/skins/Vector/i18n/sah.json
@@ -14,5 +14,6 @@
"vector-view-edit": "Уларыт",
"vector-view-history": "Устуоруйатын көрүү",
"vector-view-view": "Ааҕыы",
- "vector-view-viewsource": "Бэлиэлэрин көрүү"
+ "vector-view-viewsource": "Бэлиэлэрин көрүү",
+ "vector-more-actions": "Эбии"
}
diff --git a/skins/Vector/i18n/scn.json b/skins/Vector/i18n/scn.json
index a9483c4e..1a068959 100644
--- a/skins/Vector/i18n/scn.json
+++ b/skins/Vector/i18n/scn.json
@@ -2,19 +2,21 @@
"@metadata": {
"authors": [
"Gmelfi",
- "Melos"
+ "Melos",
+ "Pippinu"
]
},
+ "vector-skin-desc": "Virsioni muderna di MonoBook cu' n'aspettu novu e tanti migghiuramenti nta l'usabbilità",
"vector-action-addsection": "Agghiunci argumentu",
- "vector-action-delete": "Elìmina",
+ "vector-action-delete": "Cancella",
"vector-action-move": "Sposta",
"vector-action-protect": "Pruteggi",
- "vector-action-undelete": "Riprìstina",
+ "vector-action-undelete": "Annulla la cancillazzioni",
"vector-action-unprotect": "Cancia la prutizzioni",
"vector-view-create": "Crea",
"vector-view-edit": "Cancia",
- "vector-view-history": "Talìa a storia",
+ "vector-view-history": "Talìa la crunuluggìa",
"vector-view-view": "Leggi",
- "vector-view-viewsource": "Talìa la fonti",
+ "vector-view-viewsource": "Talìa lu surgenti",
"vector-more-actions": "Àutri cosi"
}
diff --git a/skins/Vector/i18n/sco.json b/skins/Vector/i18n/sco.json
index acf5387a..a8a4e360 100644
--- a/skins/Vector/i18n/sco.json
+++ b/skins/Vector/i18n/sco.json
@@ -6,6 +6,7 @@
"Omnipaedista"
]
},
+ "vector-skin-desc": "Modern version o MonoBook wi ae fresh luik n monie uisabeelitie impruivments",
"vector-action-addsection": "Eik topic",
"vector-action-delete": "Delyte",
"vector-action-move": "Muiv",
@@ -16,5 +17,6 @@
"vector-view-edit": "Eedit",
"vector-view-history": "See histerie",
"vector-view-view": "Read",
- "vector-view-viewsource": "See Soorce"
+ "vector-view-viewsource": "See Soorce",
+ "vector-more-actions": "Mair"
}
diff --git a/skins/Vector/i18n/sgs.json b/skins/Vector/i18n/sgs.json
index 7b2591c4..8b60f540 100644
--- a/skins/Vector/i18n/sgs.json
+++ b/skins/Vector/i18n/sgs.json
@@ -14,5 +14,6 @@
"vector-view-edit": "Taisītė",
"vector-view-history": "Veizietė istuorėjė",
"vector-view-view": "Skaitītė",
- "vector-view-viewsource": "Veizietė kuoda"
+ "vector-view-viewsource": "Veizietė kuoda",
+ "vector-more-actions": "Dā"
}
diff --git a/skins/Vector/i18n/shn.json b/skins/Vector/i18n/shn.json
index c2cea6a6..ad8a3c0c 100644
--- a/skins/Vector/i18n/shn.json
+++ b/skins/Vector/i18n/shn.json
@@ -1,13 +1,17 @@
{
"@metadata": {
"authors": [
- "Saiddzone"
+ "Saiddzone",
+ "Saimawnkham"
]
},
+ "vector-action-addsection": "ထႅမ်သႂ်ႇ ႁူဝ်ၶေႃႈ",
+ "vector-action-move": "ၶၢႆႉ",
"vector-action-protect": "ႁေႉၵင်ႈ",
"vector-view-create": "သၢင်ႈ",
"vector-view-edit": "မူၼ်ႉမႄး",
"vector-view-history": "တူၺ်းပိုၼ်း",
"vector-view-view": "လူတူၺ်း",
- "vector-view-viewsource": "တူၺ်း ငဝ်ႈငႃႇ"
+ "vector-view-viewsource": "တူၺ်း ငဝ်ႈငႃႇ",
+ "vector-more-actions": "ၼမ်လိူဝ်"
}
diff --git a/skins/Vector/i18n/szl.json b/skins/Vector/i18n/szl.json
index 9e8c1063..1b67a26f 100644
--- a/skins/Vector/i18n/szl.json
+++ b/skins/Vector/i18n/szl.json
@@ -3,7 +3,8 @@
"authors": [
"Britscher",
"Gaj777",
- "Przemub"
+ "Przemub",
+ "Krol111"
]
},
"vector-action-addsection": "Nowo tajla",
@@ -16,5 +17,6 @@
"vector-view-edit": "Sprowjej",
"vector-view-history": "Uobocz gyszichta",
"vector-view-view": "Czytej",
- "vector-view-viewsource": "Zdrzůdłowy tekst"
+ "vector-view-viewsource": "Zdrzůdłowy tekst",
+ "vector-more-actions": "Wjyncyj"
}
diff --git a/skins/Vector/i18n/tcy.json b/skins/Vector/i18n/tcy.json
index 0001fe58..f73ce306 100644
--- a/skins/Vector/i18n/tcy.json
+++ b/skins/Vector/i18n/tcy.json
@@ -15,5 +15,6 @@
"vector-view-edit": "ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ",
"vector-view-history": "ಇತಿಹಾಸೊನು ತೂಲೆ",
"vector-view-view": "ಓದ್ಲೇ",
- "vector-view-viewsource": "ಮೂಲೊನು ತೂಲೆ"
+ "vector-view-viewsource": "ಮೂಲೊನು ತೂಲೆ",
+ "vector-more-actions": "ನನಲಾ"
}
diff --git a/skins/Vector/i18n/tt-cyrl.json b/skins/Vector/i18n/tt-cyrl.json
index 606fbe35..80b54b4d 100644
--- a/skins/Vector/i18n/tt-cyrl.json
+++ b/skins/Vector/i18n/tt-cyrl.json
@@ -4,7 +4,8 @@
"Don Alessandro",
"Rinatus",
"Ильнар",
- "Рашат Якупов"
+ "Рашат Якупов",
+ "Derslek"
]
},
"skinname-vector": "Сызымлы",
@@ -18,5 +19,6 @@
"vector-view-edit": "Үзгәртү",
"vector-view-history": "Тарихын карау",
"vector-view-view": "Уку",
- "vector-view-viewsource": "Чыганагын карау"
+ "vector-view-viewsource": "Чыганагын карау",
+ "vector-more-actions": "Тагын"
}
diff --git a/skins/Vector/i18n/ur.json b/skins/Vector/i18n/ur.json
index 595477e6..88aa8401 100644
--- a/skins/Vector/i18n/ur.json
+++ b/skins/Vector/i18n/ur.json
@@ -5,7 +5,8 @@
"Istabani",
"Noor2020",
"Tahir mq",
- "محبوب عالم"
+ "محبوب عالم",
+ "عثمان خان شاہ"
]
},
"vector-action-addsection": "نیا موضوع",
@@ -16,8 +17,8 @@
"vector-action-unprotect": "تحفظ میں تبدیلی",
"vector-view-create": "تخلیق",
"vector-view-edit": "ترمیم",
- "vector-view-history": "تاریخ",
+ "vector-view-history": "تاریخچہ دکھائیے",
"vector-view-view": "مطالعہ",
"vector-view-viewsource": "مسودہ",
- "vector-more-actions": "زیادہ"
+ "vector-more-actions": "مزید"
}
diff --git a/skins/Vector/i18n/uz.json b/skins/Vector/i18n/uz.json
index ee75d39a..05d3d63f 100644
--- a/skins/Vector/i18n/uz.json
+++ b/skins/Vector/i18n/uz.json
@@ -5,7 +5,8 @@
"Arystanbek",
"Casual",
"CoderSI",
- "Sociologist"
+ "Sociologist",
+ "Nataev"
]
},
"skinname-vector": "Vektor",
@@ -14,7 +15,7 @@
"vector-action-move": "Ko‘chirish",
"vector-action-protect": "Himoyalash",
"vector-action-undelete": "Tiklash",
- "vector-action-unprotect": "Himoyalashni oʻzgartirish",
+ "vector-action-unprotect": "Himoyani oʻzgartirish",
"vector-view-create": "Yaratish",
"vector-view-edit": "Tahrirlash",
"vector-view-history": "Tarix",
diff --git a/skins/Vector/i18n/vec.json b/skins/Vector/i18n/vec.json
index 96228289..67febc07 100644
--- a/skins/Vector/i18n/vec.json
+++ b/skins/Vector/i18n/vec.json
@@ -8,15 +8,15 @@
"Vajotwo"
]
},
- "vector-action-addsection": "Zonta discusion",
- "vector-action-delete": "Scanseła",
+ "vector-action-addsection": "Xonta discusion",
+ "vector-action-delete": "Scanseƚa",
"vector-action-move": "Sposta",
- "vector-action-protect": "Protezi",
+ "vector-action-protect": "Protegi",
"vector-action-undelete": "Recupera",
- "vector-action-unprotect": "Canbia ła protesion",
+ "vector-action-unprotect": "Canbia ƚa protesion",
"vector-view-create": "Crea",
"vector-view-edit": "Canbia",
- "vector-view-history": "Varda ła storia",
- "vector-view-view": "Lezi",
+ "vector-view-history": "Varda ƚa stòria",
+ "vector-view-view": "Lexi",
"vector-view-viewsource": "Varda el testo"
}
diff --git a/skins/Vector/i18n/vo.json b/skins/Vector/i18n/vo.json
index 1bd30425..ec384175 100644
--- a/skins/Vector/i18n/vo.json
+++ b/skins/Vector/i18n/vo.json
@@ -14,5 +14,6 @@
"vector-view-edit": "Redakön",
"vector-view-history": "Logön jenotemi",
"vector-view-view": "Reidön",
- "vector-view-viewsource": "Logön fonäti"
+ "vector-view-viewsource": "Logön fonäti",
+ "vector-more-actions": "Pluikos"
}
diff --git a/skins/Vector/i18n/yi.json b/skins/Vector/i18n/yi.json
index 16907ade..66a79602 100644
--- a/skins/Vector/i18n/yi.json
+++ b/skins/Vector/i18n/yi.json
@@ -2,7 +2,8 @@
"@metadata": {
"authors": [
"Joystick",
- "פוילישער"
+ "פוילישער",
+ "Har-wradim"
]
},
"skinname-vector": "וועקטאר",
@@ -16,7 +17,7 @@
"vector-action-unprotect": "ענדערונג באַשיצונג",
"vector-view-create": "שאַפֿן",
"vector-view-edit": "רעדאַקטירן",
- "vector-view-history": "ווײַזן היסטאָריע",
+ "vector-view-history": "ווייזן היסטאָריע",
"vector-view-view": "לייענען",
"vector-view-viewsource": "ווײַזן מקור",
"vector-more-actions": "נאך"
diff --git a/skins/Vector/i18n/yue.json b/skins/Vector/i18n/yue.json
index 3aa23090..c104579d 100644
--- a/skins/Vector/i18n/yue.json
+++ b/skins/Vector/i18n/yue.json
@@ -2,10 +2,12 @@
"@metadata": {
"authors": [
"Ktchankt",
- "Waihorace"
+ "Waihorace",
+ "Yueman"
]
},
"skinname-vector": "Vector",
+ "vector-skin-desc": "MonoBook嘅摩登版,有新嘅樣,又有好多功能改進",
"vector.css": "/* 響呢度放 CSS 碼去改用戶用嘅域達畫面 */",
"vector.js": "/* 響每一次個頁面載入時,用域達畫面嘅用戶都會載入呢度任何嘅JavaScript */",
"vector-action-addsection": "加主題",
diff --git a/skins/Vector/i18n/zh-hant.json b/skins/Vector/i18n/zh-hant.json
index 556db105..bee74a31 100644
--- a/skins/Vector/i18n/zh-hant.json
+++ b/skins/Vector/i18n/zh-hant.json
@@ -11,7 +11,7 @@
"vector-skin-desc": "現代版的 MonoBook,有著較新穎的外觀與許多使用性的改進",
"vector.css": "/* 此 CSS 會影響使用 Vector 介面外觀的使用者 */",
"vector.js": "/* 此 JavaScript 會用於使用 Vector 介面外觀的使用者 */",
- "vector-action-addsection": "加入主題",
+ "vector-action-addsection": "新增主題",
"vector-action-delete": "刪除",
"vector-action-move": "移動",
"vector-action-protect": "保護",
diff --git a/skins/Vector/images/bullet-icon.svg b/skins/Vector/images/bullet-icon.svg
new file mode 100644
index 00000000..dede350a
--- /dev/null
+++ b/skins/Vector/images/bullet-icon.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="5" height="13">
+<circle cx="2.5" cy="9.5" r="2.5" fill="#00528c"/>
+</svg>
diff --git a/skins/Vector/images/user-icon.svg b/skins/Vector/images/user-icon.svg
index 87eeb8ea..c37d464a 100644
--- a/skins/Vector/images/user-icon.svg
+++ b/skins/Vector/images/user-icon.svg
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="12px" height="13.836px" viewBox="0 0 12 13.836" enable-background="new 0 0 12 13.836" xml:space="preserve">
-<path fill="#777777" d="M1.938,6.656c-1.32,1.485-1.47,3.15-0.97,4.25c0.323,0.707,0.78,1.127,1.313,1.375
- c0.496,0.229,1.074,0.273,1.658,0.282c0.023,0,0.04,0.03,0.062,0.03h4.187c0.61,0,1.225-0.125,1.75-0.405
- c0.527-0.28,0.961-0.718,1.188-1.376c0.335-0.964,0.175-2.529-1.094-4.03C9.094,7.954,7.68,8.719,6.065,8.719
- c-1.677,0-3.182-0.812-4.125-2.063H1.938z"/>
-<path fill="#777777" d="M6.063,0c-1.89,0-3.595,1.674-3.594,3.563C2.467,5.45,4.173,7.155,6.06,7.155
- c1.89,0,3.564-1.705,3.563-3.593C9.625,1.673,7.95,0,6.063,0L6.063,0z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="13.836px" viewBox="0 0 12 13.836" enable-background="new 0 0 12 13.836" xml:space="preserve">
+<path fill="#777777" d="M1.938,6.656c-1.32,1.485-1.47,3.15-0.97,4.25c0.323,0.707,0.78,1.127,1.313,1.375
+ c0.496,0.229,1.074,0.273,1.658,0.282c0.023,0,0.04,0.03,0.062,0.03h4.187c0.61,0,1.225-0.125,1.75-0.405
+ c0.527-0.28,0.961-0.718,1.188-1.376c0.335-0.964,0.175-2.529-1.094-4.03C9.094,7.954,7.68,8.719,6.065,8.719
+ c-1.677,0-3.182-0.812-4.125-2.063H1.938z"/>
+<path fill="#777777" d="M6.063,0c-1.89,0-3.595,1.674-3.594,3.563C2.467,5.45,4.173,7.155,6.06,7.155
+ c1.89,0,3.564-1.705,3.563-3.593C9.625,1.673,7.95,0,6.063,0L6.063,0z"/>
+</svg>
diff --git a/skins/Vector/screen.less b/skins/Vector/screen.less
index da0dec53..353f35fc 100644
--- a/skins/Vector/screen.less
+++ b/skins/Vector/screen.less
@@ -3,7 +3,6 @@
@import "variables.less";
@import "components/common.less";
-@import "components/animations.less";
@import "components/navigation.less";
@import "components/footer.less";
@import "components/externalLinks.less";
diff --git a/skins/Vector/skin.json b/skins/Vector/skin.json
new file mode 100644
index 00000000..1d1ac1b6
--- /dev/null
+++ b/skins/Vector/skin.json
@@ -0,0 +1,85 @@
+{
+ "name": "Vector",
+ "author": [
+ "Trevor Parscal",
+ "Roan Kattouw",
+ "..."
+ ],
+ "url": "https://www.mediawiki.org/wiki/Skin:Vector",
+ "descriptionmsg": "vector-skin-desc",
+ "namemsg": "skinname-vector",
+ "license-name": "GPL-2.0+",
+ "type": "skin",
+ "ConfigRegistry": {
+ "vector": "GlobalVarConfig::newInstance"
+ },
+ "ValidSkinNames": {
+ "vector": "Vector"
+ },
+ "MessagesDirs": {
+ "Vector": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "SkinVector": "SkinVector.php",
+ "VectorTemplate": "VectorTemplate.php"
+ },
+ "ResourceModules": {
+ "skins.vector.styles": {
+ "styles": {
+ "screen.less": {
+ "media": "screen"
+ },
+ "screen-hd.less": {
+ "media": "screen and (min-width: 982px)"
+ }
+ }
+ },
+ "skins.vector.js": {
+ "scripts": [
+ "collapsibleTabs.js",
+ "vector.js"
+ ],
+ "position": "top",
+ "dependencies": [
+ "jquery.throttle-debounce",
+ "jquery.tabIndex"
+ ]
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteSkinPath": "Vector"
+ },
+ "ResourceModuleSkinStyles": {
+ "vector": {
+ "jquery.tipsy": "skinStyles/jquery.tipsy.less",
+ "jquery.ui.core": [
+ "skinStyles/jquery.ui/jquery.ui.core.css",
+ "skinStyles/jquery.ui/jquery.ui.theme.css"
+ ],
+ "jquery.ui.accordion": "skinStyles/jquery.ui/jquery.ui.accordion.css",
+ "jquery.ui.autocomplete": "skinStyles/jquery.ui/jquery.ui.autocomplete.css",
+ "jquery.ui.button": "skinStyles/jquery.ui/jquery.ui.button.css",
+ "jquery.ui.datepicker": "skinStyles/jquery.ui/jquery.ui.datepicker.css",
+ "jquery.ui.dialog": "skinStyles/jquery.ui/jquery.ui.dialog.css",
+ "jquery.ui.menu": "skinStyles/jquery.ui/jquery.ui.menu.css",
+ "jquery.ui.progressbar": "skinStyles/jquery.ui/jquery.ui.progressbar.css",
+ "jquery.ui.resizable": "skinStyles/jquery.ui/jquery.ui.resizable.css",
+ "jquery.ui.selectable": "skinStyles/jquery.ui/jquery.ui.selectable.css",
+ "jquery.ui.slider": "skinStyles/jquery.ui/jquery.ui.slider.css",
+ "jquery.ui.spinner": "skinStyles/jquery.ui/jquery.ui.spinner.css",
+ "jquery.ui.tabs": "skinStyles/jquery.ui/jquery.ui.tabs.css",
+ "jquery.ui.tooltips": "skinStyles/jquery.ui/jquery.ui.tooltips.css",
+ "mediawiki.notification": "skinStyles/mediawiki.notification.less",
+ "+mediawiki.sectionAnchor": "skinStyles/mediawiki.sectionAnchor.less",
+ "mediawiki.special": "skinStyles/mediawiki.special.less",
+ "mediawiki.special.preferences": "skinStyles/mediawiki.special.preferences.less"
+ }
+ },
+ "config": {
+ "VectorUseSimpleSearch": true,
+ "VectorUseIconWatch": true
+ }
+}
diff --git a/skins/Vector/skinStyles/jquery.ui/jquery.ui.core.css b/skins/Vector/skinStyles/jquery.ui/jquery.ui.core.css
index 2e088ca1..d4f7db3b 100644
--- a/skins/Vector/skinStyles/jquery.ui/jquery.ui.core.css
+++ b/skins/Vector/skinStyles/jquery.ui/jquery.ui.core.css
@@ -14,7 +14,7 @@
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; border-collapse: collapse; }
.ui-helper-clearfix:after { clear: both; }
.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
diff --git a/skins/Vector/skinStyles/mediawiki.sectionAnchor.less b/skins/Vector/skinStyles/mediawiki.sectionAnchor.less
new file mode 100644
index 00000000..6a748108
--- /dev/null
+++ b/skins/Vector/skinStyles/mediawiki.sectionAnchor.less
@@ -0,0 +1,45 @@
+@media screen {
+ .mw-headline-anchor {
+ margin-left: -16px;
+ width: 16px;
+ }
+
+ .mw-content-ltr .mw-headline-anchor,
+ .mw-content-rtl .mw-content-ltr .mw-headline-anchor {
+ /* @noflip */
+ margin-left: -16px;
+ /* @noflip */
+ margin-right: 0;
+ }
+
+ .mw-content-rtl .mw-headline-anchor,
+ .mw-content-ltr .mw-content-rtl .mw-headline-anchor {
+ /* @noflip */
+ margin-left: 0;
+ /* @noflip */
+ margin-right: -16px;
+ }
+}
+
+@media screen and (min-width: 982px) {
+ .mw-headline-anchor {
+ margin-left: -20px;
+ width: 20px;
+ }
+
+ .mw-content-ltr .mw-headline-anchor,
+ .mw-content-rtl .mw-content-ltr .mw-headline-anchor {
+ /* @noflip */
+ margin-left: -20px;
+ /* @noflip */
+ margin-right: 0;
+ }
+
+ .mw-content-rtl .mw-headline-anchor,
+ .mw-content-ltr .mw-content-rtl .mw-headline-anchor {
+ /* @noflip */
+ margin-left: 0;
+ /* @noflip */
+ margin-right: -20px;
+ }
+}
diff --git a/skins/Vector/vector.js b/skins/Vector/vector.js
index 7be35355..8f839186 100644
--- a/skins/Vector/vector.js
+++ b/skins/Vector/vector.js
@@ -34,11 +34,6 @@ jQuery( function ( $ ) {
} );
/**
- * Sidebar
- */
- $( '#mw-panel > .portal:first' ).addClass( 'first' );
-
- /**
* Collapsible tabs
*/
var $cactions = $( '#p-cactions' ),
@@ -54,16 +49,16 @@ jQuery( function ( $ ) {
$cactions
.removeClass( 'emptyPortlet' )
.find( 'h3' )
- .css( 'width', '1px' ).animate( { 'width': originalDropdownWidth }, 'normal' );
+ .css( 'width', '1px' ).animate( { width: originalDropdownWidth }, 'normal' );
}
} )
.bind( 'beforeTabExpand', function () {
// If we're removing the last child node right now, hide the dropdown
if ( $cactions.find( 'li' ).length === 1 ) {
- $cactions.find( 'h3' ).animate( { 'width': '1px' }, 'normal', function () {
+ $cactions.find( 'h3' ).animate( { width: '1px' }, 'normal', function () {
$( this ).attr( 'style', '' )
.parent().addClass( 'emptyPortlet' );
- });
+ } );
}
} )
.collapsibleTabs( {
diff --git a/tests/TestsAutoLoader.php b/tests/TestsAutoLoader.php
index 2e8fed44..def23dad 100644
--- a/tests/TestsAutoLoader.php
+++ b/tests/TestsAutoLoader.php
@@ -44,18 +44,18 @@ $wgAutoloadClasses += array(
'ResourceLoaderTestCase' => "$testDir/phpunit/ResourceLoaderTestCase.php",
'ResourceLoaderTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
'ResourceLoaderFileModuleTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
- 'ResourceLoaderWikiModuleTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
'TestUser' => "$testDir/phpunit/includes/TestUser.php",
'LessFileCompilationTest' => "$testDir/phpunit/LessFileCompilationTest.php",
# tests/phpunit/includes
- 'BlockTest' => "$testDir/phpunit/includes/BlockTest.php",
- 'RevisionStorageTest' => "$testDir/phpunit/includes/RevisionStorageTest.php",
- 'WikiPageTest' => "$testDir/phpunit/includes/WikiPageTest.php",
+ 'TestingAccessWrapper' => "$testDir/phpunit/includes/TestingAccessWrapper.php",
# tests/phpunit/includes/api
'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php",
+ 'ApiQueryTestBase' => "$testDir/phpunit/includes/api/query/ApiQueryTestBase.php",
+ 'ApiQueryContinueTestBase' => "$testDir/phpunit/includes/api/query/ApiQueryContinueTestBase.php",
'ApiTestCase' => "$testDir/phpunit/includes/api/ApiTestCase.php",
+ 'ApiTestCaseUpload' => "$testDir/phpunit/includes/api/ApiTestCaseUpload.php",
'ApiTestContext' => "$testDir/phpunit/includes/api/ApiTestContext.php",
'MockApi' => "$testDir/phpunit/includes/api/MockApi.php",
'MockApiQueryBase' => "$testDir/phpunit/includes/api/MockApiQueryBase.php",
@@ -79,9 +79,16 @@ $wgAutoloadClasses += array(
'PageORMTableForTesting' => "$testDir/phpunit/includes/db/ORMTableTest.php",
'DatabaseTestHelper' => "$testDir/phpunit/includes/db/DatabaseTestHelper.php",
- # tests/phpunit/includes/passwords
+ # tests/phpunit/includes/diff
+ 'FakeDiffOp' => "$testDir/phpunit/includes/diff/FakeDiffOp.php",
+
+ # tests/phpunit/includes/password
'PasswordTestCase' => "$testDir/phpunit/includes/password/PasswordTestCase.php",
+ # tests/phpunit/includes/resourceloader
+ 'ResourceLoaderImageModuleTest' => "$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php",
+ 'ResourceLoaderImageModuleTestable' => "$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php",
+
# tests/phpunit/languages
'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php",
@@ -112,4 +119,7 @@ $wgAutoloadClasses += array(
# tests/phpunit/includes/site
'SiteTest' => "$testDir/phpunit/includes/site/SiteTest.php",
'TestSites' => "$testDir/phpunit/includes/site/TestSites.php",
+
+ # tests/phpunit/includes/specialpage
+ 'SpecialPageTestHelper' => "$testDir/phpunit/includes/specialpage/SpecialPageTestHelper.php",
);
diff --git a/tests/browser/Gemfile.lock b/tests/browser/Gemfile.lock
deleted file mode 100644
index 1ea4eb55..00000000
--- a/tests/browser/Gemfile.lock
+++ /dev/null
@@ -1,82 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- builder (3.2.2)
- childprocess (0.5.3)
- ffi (~> 1.0, >= 1.0.11)
- cucumber (1.3.16)
- builder (>= 2.1.2)
- diff-lcs (>= 1.1.3)
- gherkin (~> 2.12)
- multi_json (>= 1.7.5, < 2.0)
- multi_test (>= 0.1.1)
- data_magic (0.19)
- faker (>= 1.1.2)
- yml_reader (>= 0.3)
- diff-lcs (1.2.5)
- domain_name (0.5.20)
- unf (>= 0.0.5, < 1.0.0)
- faker (1.4.3)
- i18n (~> 0.5)
- faraday (0.9.0)
- multipart-post (>= 1.2, < 3)
- faraday-cookie_jar (0.0.6)
- faraday (>= 0.7.4)
- http-cookie (~> 1.0.0)
- ffi (1.9.3)
- gherkin (2.12.2)
- multi_json (~> 1.3)
- headless (1.0.2)
- http-cookie (1.0.2)
- domain_name (~> 0.5)
- i18n (0.6.11)
- json (1.8.1)
- mediawiki_api (0.2.1)
- faraday (~> 0.9, >= 0.9.0)
- faraday-cookie_jar (~> 0.0, >= 0.0.6)
- mediawiki_selenium (0.3.2)
- cucumber (~> 1.3, >= 1.3.10)
- headless (~> 1.0, >= 1.0.1)
- json (~> 1.8, >= 1.8.1)
- mediawiki_api (~> 0.2, >= 0.2.1)
- page-object (~> 1.0)
- rest-client (~> 1.6, >= 1.6.7)
- rspec-expectations (~> 2.14, >= 2.14.4)
- syntax (~> 1.2, >= 1.2.0)
- mime-types (2.3)
- multi_json (1.10.1)
- multi_test (0.1.1)
- multipart-post (2.0.0)
- netrc (0.7.7)
- page-object (1.0.2)
- page_navigation (>= 0.9)
- selenium-webdriver (>= 2.42.0)
- watir-webdriver (>= 0.6.9)
- page_navigation (0.9)
- data_magic (>= 0.14)
- rest-client (1.7.2)
- mime-types (>= 1.16, < 3.0)
- netrc (~> 0.7)
- rspec-expectations (2.99.2)
- diff-lcs (>= 1.1.3, < 2.0)
- rubyzip (1.1.6)
- selenium-webdriver (2.42.0)
- childprocess (>= 0.5.0)
- multi_json (~> 1.0)
- rubyzip (~> 1.0)
- websocket (~> 1.0.4)
- syntax (1.2.0)
- unf (0.1.4)
- unf_ext
- unf_ext (0.0.6)
- watir-webdriver (0.6.10)
- selenium-webdriver (>= 2.18.0)
- websocket (1.0.7)
- yml_reader (0.3)
-
-PLATFORMS
- ruby
-
-DEPENDENCIES
- mediawiki_api
- mediawiki_selenium
diff --git a/tests/browser/environment_variables b/tests/browser/environment_variables
deleted file mode 100644
index 25c45775..00000000
--- a/tests/browser/environment_variables
+++ /dev/null
@@ -1,5 +0,0 @@
-export MEDIAWIKI_URL=http://localhost/wiki/
-export MEDIAWIKI_API_URL=http://localhost/w/api.php
-export MEDIAWIKI_USER=Selenium_user
-export MEDIAWIKI_PASSWORD=Selenium_password
-export BROWSER=firefox
diff --git a/tests/browser/environments.yml b/tests/browser/environments.yml
new file mode 100644
index 00000000..8f8381ed
--- /dev/null
+++ b/tests/browser/environments.yml
@@ -0,0 +1,35 @@
+# Customize this configuration as necessary to provide defaults for various
+# test environments.
+#
+# The set of defaults to use is determined by the MEDIAWIKI_ENVIRONMENT
+# environment variable.
+#
+# export MEDIAWIKI_ENVIRONMENT=mw-vagrant-host
+# bundle exec cucumber
+#
+# Additional variables set by the environment will override the corresponding
+# defaults defined here.
+#
+# export MEDIAWIKI_ENVIRONMENT=mw-vagrant-host
+# export MEDIAWIKI_USER=Selenium_user2
+# bundle exec cucumber
+#
+mw-vagrant-host:
+ mediawiki_url: http://127.0.0.1:8080/wiki/
+ mediawiki_user: Selenium_user
+ mediawiki_password: vagrant
+
+mw-vagrant-guest:
+ mediawiki_url: http://127.0.0.1/wiki/
+ mediawiki_user: Selenium_user
+ mediawiki_password: vagrant
+
+beta:
+ mediawiki_url: http://en.wikipedia.beta.wmflabs.org/wiki/
+ mediawiki_user: Selenium_user
+ # mediawiki_password: SET THIS IN THE ENVIRONMENT!
+
+test2:
+ mediawiki_url: http://test2.wikipedia.org/wiki/
+ mediawiki_user: Selenium_user
+ # mediawiki_password: SET THIS IN THE ENVIRONMENT!
diff --git a/tests/browser/features/file.feature b/tests/browser/features/file.feature
index 0bd36ed6..35a6675d 100644
--- a/tests/browser/features/file.feature
+++ b/tests/browser/features/file.feature
@@ -1,14 +1,3 @@
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
@chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs
Feature: File
diff --git a/tests/browser/features/login.feature b/tests/browser/features/login.feature
index c34d23d3..2cb63564 100644
--- a/tests/browser/features/login.feature
+++ b/tests/browser/features/login.feature
@@ -1,14 +1,3 @@
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
@chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @phantomjs
Feature: Log in
diff --git a/tests/browser/features/preferences.feature b/tests/browser/features/preferences.feature
index 9e3abfde..9fed9cf4 100644
--- a/tests/browser/features/preferences.feature
+++ b/tests/browser/features/preferences.feature
@@ -1,14 +1,3 @@
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
@chrome @clean @firefox @internet_explorer_6 @internet_explorer_7 @internet_explorer_8 @internet_explorer_9 @internet_explorer_10 @login @phantomjs
Feature: Preferences
diff --git a/tests/browser/features/step_definitions/create_account_steps.rb b/tests/browser/features/step_definitions/create_account_steps.rb
index 7fa29843..03bff66f 100644
--- a/tests/browser/features/step_definitions/create_account_steps.rb
+++ b/tests/browser/features/step_definitions/create_account_steps.rb
@@ -10,9 +10,9 @@
# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
#
Given(/^I go to Create account page at (.+)$/) do |path|
- visit(CreateAccountPage, :using_params => {:page_title => path})
+ visit(CreateAccountPage, using_params: { page_title: path })
end
Then(/^form has Create account button$/) do
- on(CreateAccountPage).create_account_element.should exist
+ expect(on(CreateAccountPage).create_account_element).to exist
end
diff --git a/tests/browser/features/step_definitions/create_and_follow_wiki_link_steps.rb b/tests/browser/features/step_definitions/create_and_follow_wiki_link_steps.rb
index ba41f7fb..504d3454 100644
--- a/tests/browser/features/step_definitions/create_and_follow_wiki_link_steps.rb
+++ b/tests/browser/features/step_definitions/create_and_follow_wiki_link_steps.rb
@@ -1,28 +1,26 @@
Given(/^I go to the "(.+)" page with content "(.+)"$/) do |page_title, page_content|
@wikitext = page_content
- on(APIPage).create page_title, page_content
+ api.create_page page_title, page_content
step "I am on the #{page_title} page"
end
Given(/^I am on the (.+) page$/) do |article|
article = article.gsub(/ /, '_')
- visit(ZtargetPage, :using_params => {:article_name => article})
+ visit(ZtargetPage, using_params: { article_name: article })
end
Given(/^I create page "(.*?)" with content "(.*?)"$/) do |page_title, page_content|
- on(APIPage).create page_title, page_content
+ api.create_page page_title, page_content
end
-
When(/^I click the Link Target link$/) do
on(ZtargetPage).link_target_page_link
end
Then(/^I should be on the Link Target Test Page$/) do
- @browser.url.should match /Link_Target_Test_Page/
+ expect(@browser.url).to match /Link_Target_Test_Page/
end
Then(/^the page content should contain "(.*?)"$/) do |content|
- on(ZtargetPage).page_content.should match content
+ expect(on(ZtargetPage).page_content).to match content
end
-
diff --git a/tests/browser/features/step_definitions/edit_page_steps.rb b/tests/browser/features/step_definitions/edit_page_steps.rb
index 5ab02bec..0e0aeb17 100644
--- a/tests/browser/features/step_definitions/edit_page_steps.rb
+++ b/tests/browser/features/step_definitions/edit_page_steps.rb
@@ -19,6 +19,5 @@ When(/^I save the edit$/) do
end
Then(/^the edited page content should contain "(.*?)"$/) do |content|
- on(MainPage).page_content.should match(content + @random_string)
+ expect(on(MainPage).page_content).to match(content + @random_string)
end
-
diff --git a/tests/browser/features/step_definitions/file_steps.rb b/tests/browser/features/step_definitions/file_steps.rb
index a2ed1bfc..a80ca504 100644
--- a/tests/browser/features/step_definitions/file_steps.rb
+++ b/tests/browser/features/step_definitions/file_steps.rb
@@ -10,9 +10,9 @@
# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
#
Given(/^I am at file that does not exist$/) do
- visit(FileDoesNotExistPage, using_params: {page_name: @random_string})
+ visit(FileDoesNotExistPage, using_params: { page_name: @random_string })
end
Then(/^page should show that no such file exists$/) do
- on(FileDoesNotExistPage).file_does_not_exist_message_element.should be_visible
+ expect(on(FileDoesNotExistPage).file_does_not_exist_message_element).to be_visible
end
diff --git a/tests/browser/features/step_definitions/login_steps.rb b/tests/browser/features/step_definitions/login_steps.rb
index b654b2d3..bff5bddd 100644
--- a/tests/browser/features/step_definitions/login_steps.rb
+++ b/tests/browser/features/step_definitions/login_steps.rb
@@ -14,52 +14,52 @@ Given(/^I am at Log in page$/) do
end
When(/^I log in with incorrect password$/) do
- on(LoginPage).login_with(ENV["MEDIAWIKI_USER"], "incorrect password", false)
+ on(LoginPage).login_with(user, 'incorrect password', false)
end
When(/^I log in with incorrect username$/) do
- on(LoginPage).login_with("incorrect username", ENV["MEDIAWIKI_PASSWORD"], false)
+ on(LoginPage).login_with('incorrect username', password, false)
end
When(/^I log in without entering credentials$/) do
- on(LoginPage).login_with("", "", false)
+ on(LoginPage).login_with('', '', false)
end
When(/^I log in without entering password$/) do
- on(LoginPage).login_with(ENV["MEDIAWIKI_USER"], "", false)
+ on(LoginPage).login_with(user, '', false)
end
Then(/^error box should be visible$/) do
- on(LoginErrorPage).error_box_element.should be_visible
+ expect(on(LoginErrorPage).error_box_element).to be_visible
end
Then(/^error box should not be visible$/) do
- on(LoginErrorPage).error_box_element.should_not be_visible
+ expect(on(LoginErrorPage).error_box_element).not_to be_visible
end
Then(/^feedback should be (.+)$/) do |feedback|
on(LoginPage) do |page|
page.feedback_element.when_present.click
- page.feedback.should match Regexp.escape(feedback)
+ expect(page.feedback).to match Regexp.escape(feedback)
end
end
Then(/^Log in element should be there$/) do
- on(LoginPage).login_element.should exist
+ expect(on(LoginPage).login_element).to exist
end
Then(/^main page should open$/) do
- @browser.url.should == on(MainPage).class.url
+ expect(@browser.url).to eq on(MainPage).class.url
end
Then(/^Password element should be there$/) do
- on(LoginPage).password_element.should exist
+ expect(on(LoginPage).password_element).to exist
end
Then(/^there should be a link to (.+)$/) do |text|
- on(LoginPage).username_displayed_element.when_present.text.should == text
+ expect(on(LoginPage).username_displayed_element.when_present.text).to eq text
end
Then(/^Username element should be there$/) do
- on(LoginPage).username_element.should exist
+ expect(on(LoginPage).username_element).to exist
end
diff --git a/tests/browser/features/step_definitions/main_page_links_steps.rb b/tests/browser/features/step_definitions/main_page_links_steps.rb
index c76fd2ba..7f588c05 100644
--- a/tests/browser/features/step_definitions/main_page_links_steps.rb
+++ b/tests/browser/features/step_definitions/main_page_links_steps.rb
@@ -3,45 +3,45 @@ Given(/^I open the main wiki URL$/) do
end
Then(/^I should see a link for View History$/) do
- on(MainPage).view_history_link_element.should be_visible
+ expect(on(MainPage).view_history_link_element).to be_visible
end
Then(/^I should see a link for Edit$/) do
- on(MainPage).edit_link_element.should be_visible
+ expect(on(MainPage).edit_link_element).to be_visible
end
Then(/^I should see a link for Recent changes$/) do
- on(MainPage).recent_changes_link_element.should be_visible
+ expect(on(MainPage).recent_changes_link_element).to be_visible
end
Then(/^I should see a link for Random page$/) do
- on(MainPage).random_page_link_element.should be_visible
+ expect(on(MainPage).random_page_link_element).to be_visible
end
Then(/^I should see a link for Help$/) do
- on(MainPage).help_link_element.should be_visible
+ expect(on(MainPage).help_link_element).to be_visible
end
Then(/^I should see a link for What links here$/) do
- on(MainPage).what_links_here_link_element.should be_visible
+ expect(on(MainPage).what_links_here_link_element).to be_visible
end
Then(/^I should see a link for Related changes$/) do
- on(MainPage).related_changes_link_element.should be_visible
+ expect(on(MainPage).related_changes_link_element).to be_visible
end
Then(/^I should see a link for Special pages$/) do
- on(MainPage).special_pages_link_element.should be_visible
+ expect(on(MainPage).special_pages_link_element).to be_visible
end
Then(/^I should see a link for Printable version$/) do
- on(MainPage).printable_version_link_element.should be_visible
+ expect(on(MainPage).printable_version_link_element).to be_visible
end
Then(/^I should see a link for Permanent link$/) do
- on(MainPage).permanent_link_link_element.should be_visible
+ expect(on(MainPage).permanent_link_link_element).to be_visible
end
Then(/^I should see a link for Page information$/) do
- on(MainPage).page_information_link_element.should be_visible
+ expect(on(MainPage).page_information_link_element).to be_visible
end
diff --git a/tests/browser/features/step_definitions/preferences_appearance_steps.rb b/tests/browser/features/step_definitions/preferences_appearance_steps.rb
index 0046af69..133eec3b 100644
--- a/tests/browser/features/step_definitions/preferences_appearance_steps.rb
+++ b/tests/browser/features/step_definitions/preferences_appearance_steps.rb
@@ -18,68 +18,66 @@ When(/^I navigate to Preferences$/) do
end
Then(/^I can click Save$/) do
- on(PreferencesPage).save_button_element.should exist
+ expect(on(PreferencesPage).save_button_element).to exist
end
Then(/^I can restore default settings$/) do
- on(PreferencesAppearancePage).restore_default_link_element.should exist
+ expect(on(PreferencesAppearancePage).restore_default_link_element).to exist
end
Then(/^I can see local time$/) do
- on(PreferencesAppearancePage).local_time_span_element.should exist
+ expect(on(PreferencesAppearancePage).local_time_span_element).to exist
end
Then(/^I can see time offset section$/) do
- on(PreferencesAppearancePage).time_offset_table_element.should be_visible
+ expect(on(PreferencesAppearancePage).time_offset_table_element).to be_visible
end
Then(/^I can select date format$/) do
on(PreferencesAppearancePage) do |page|
- page.no_preference_radio_element.should exist
- page.mo_day_year_radio_element.should exist
- page.day_mo_year_radio_element.should exist
- page.year_mo_day_radio_element.should exist
- page.iso_8601_radio_element.should exist
+ expect(page.no_preference_radio_element).to exist
+ expect(page.mo_day_year_radio_element).to exist
+ expect(page.day_mo_year_radio_element).to exist
+ expect(page.year_mo_day_radio_element).to exist
+ expect(page.iso_8601_radio_element).to exist
end
end
Then(/^I can select image size$/) do
- on(PreferencesAppearancePage).size_select_element.should exist
+ expect(on(PreferencesAppearancePage).size_select_element).to exist
end
Then(/^I can select my time zone$/) do
on(PreferencesAppearancePage) do |page|
- page.time_offset_select_element.should exist
- page.other_offset_element.should exist
+ expect(page.time_offset_select_element).to exist
+ expect(page.other_offset_element).to exist
end
end
Then(/^I can select skins$/) do
on(PreferencesAppearancePage) do |page|
- page.cologne_blue_element.should exist
- page.modern_element.should exist
- page.monobook_element.should exist
- page.vector_element.should exist
+ expect(page.cologne_blue_element).to exist
+ expect(page.modern_element).to exist
+ expect(page.monobook_element).to exist
+ expect(page.vector_element).to exist
end
end
Then(/^I can select Threshold for stub link$/) do
- on(PreferencesAppearancePage).threshold_select_element.should exist
+ expect(on(PreferencesAppearancePage).threshold_select_element).to exist
end
Then(/^I can select thumbnail size$/) do
- on(PreferencesAppearancePage).thumb_select_element.should exist
+ expect(on(PreferencesAppearancePage).thumb_select_element).to exist
end
Then(/^I can select underline preferences$/) do
- on(PreferencesAppearancePage).underline_select_element.should exist
+ expect(on(PreferencesAppearancePage).underline_select_element).to exist
end
Then(/^I have advanced options checkboxes$/) do
on(PreferencesAppearancePage) do |page|
- page.hidden_categories_check_element.should exist
- page.auto_number_check_element.should exist
+ expect(page.hidden_categories_check_element).to exist
+ expect(page.auto_number_check_element).to exist
end
end
-
-
diff --git a/tests/browser/features/step_definitions/preferences_editing_steps.rb b/tests/browser/features/step_definitions/preferences_editing_steps.rb
index ad29a745..0a98e889 100644
--- a/tests/browser/features/step_definitions/preferences_editing_steps.rb
+++ b/tests/browser/features/step_definitions/preferences_editing_steps.rb
@@ -14,41 +14,41 @@ When(/^I click Editing$/) do
end
Then(/^I can select edit area font style$/) do
- on(PreferencesEditingPage).edit_area_font_style_select_element.when_present.should exist
+ expect(on(PreferencesEditingPage).edit_area_font_style_select_element.when_present).to exist
end
Then(/^I can select live preview$/) do
- on(PreferencesEditingPage).live_preview_check_element.when_present.should exist
+ expect(on(PreferencesEditingPage).live_preview_check_element.when_present).to exist
end
Then(/^I can select section editing by double clicking$/) do
- on(PreferencesEditingPage).edit_section_double_click_check_element.when_present.should exist
+ expect(on(PreferencesEditingPage).edit_section_double_click_check_element.when_present).to exist
end
Then(/^I can select section editing by right clicking$/) do
- on(PreferencesEditingPage).edit_section_right_click_check_element.when_present.should exist
+ expect(on(PreferencesEditingPage).edit_section_right_click_check_element.when_present).to exist
end
Then(/^I can select section editing via edit links$/) do
- on(PreferencesEditingPage).edit_section_edit_link_element.when_present.should exist
+ expect(on(PreferencesEditingPage).edit_section_edit_link_element.when_present).to exist
end
Then(/^I can select show edit toolbar$/) do
- on(PreferencesEditingPage).show_edit_toolbar_check_element.when_present.should exist
+ expect(on(PreferencesEditingPage).show_edit_toolbar_check_element.when_present).to exist
end
Then(/^I can select show preview before edit box$/) do
- on(PreferencesEditingPage).preview_on_top_check_element.when_present.should exist
+ expect(on(PreferencesEditingPage).preview_on_top_check_element.when_present).to exist
end
Then(/^I can select show preview on first edit$/) do
- on(PreferencesEditingPage).preview_on_first_check_element.when_present.should exist
+ expect(on(PreferencesEditingPage).preview_on_first_check_element.when_present).to exist
end
Then(/^I can select to prompt me when entering a blank edit summary$/) do
- on(PreferencesEditingPage).forced_edit_summary_check_element.when_present.should exist
+ expect(on(PreferencesEditingPage).forced_edit_summary_check_element.when_present).to exist
end
Then(/^I can select to warn me when I leave an edit page with unsaved changes$/) do
- on(PreferencesEditingPage).unsaved_changes_check_element.when_present.should exist
+ expect(on(PreferencesEditingPage).unsaved_changes_check_element.when_present).to exist
end
diff --git a/tests/browser/features/step_definitions/preferences_user_profile_steps.rb b/tests/browser/features/step_definitions/preferences_user_profile_steps.rb
index 529af66d..9c65db83 100644
--- a/tests/browser/features/step_definitions/preferences_user_profile_steps.rb
+++ b/tests/browser/features/step_definitions/preferences_user_profile_steps.rb
@@ -15,29 +15,28 @@ end
Then(/^I can change my gender$/) do
on(PreferencesUserProfilePage) do |page|
- page.gender_undefined_radio_element.should exist
- page.gender_male_radio_element.should exist
- page.gender_female_radio_element.should exist
+ expect(page.gender_undefined_radio_element).to exist
+ expect(page.gender_male_radio_element).to exist
+ expect(page.gender_female_radio_element).to exist
end
end
Then(/^I can change my language$/) do
- on(PreferencesUserProfilePage).lang_select_element.should exist
+ expect(on(PreferencesUserProfilePage).lang_select_element).to exist
end
Then(/^I can change my signature$/) do
- on(PreferencesUserProfilePage).signature_field_element.should exist
+ expect(on(PreferencesUserProfilePage).signature_field_element).to exist
end
Then(/^I can see my Basic informations$/) do
- on(PreferencesUserProfilePage).basic_info_table_element.should exist
+ expect(on(PreferencesUserProfilePage).basic_info_table_element).to exist
end
Then(/^I can see my email$/) do
- on(PreferencesUserProfilePage).email_table_element.should exist
+ expect(on(PreferencesUserProfilePage).email_table_element).to exist
end
Then(/^I can see my signature$/) do
- on(PreferencesUserProfilePage).signature_table_element.should exist
+ expect(on(PreferencesUserProfilePage).signature_table_element).to exist
end
-
diff --git a/tests/browser/features/step_definitions/view_history_steps.rb b/tests/browser/features/step_definitions/view_history_steps.rb
index 1ecc0085..d9b93817 100644
--- a/tests/browser/features/step_definitions/view_history_steps.rb
+++ b/tests/browser/features/step_definitions/view_history_steps.rb
@@ -3,6 +3,5 @@ When(/^I click View History$/) do
end
Then(/^I should see a link to a previous version of the page$/) do
- on(ViewHistoryPage).old_version_link_element.should be_visible
+ expect(on(ViewHistoryPage).old_version_link_element).to be_visible
end
-
diff --git a/tests/browser/features/support/env.rb b/tests/browser/features/support/env.rb
index 7c122366..5eff4ce5 100644
--- a/tests/browser/features/support/env.rb
+++ b/tests/browser/features/support/env.rb
@@ -1,2 +1,4 @@
-require "mediawiki_api"
-require "mediawiki_selenium"
+require 'mediawiki_selenium'
+
+require 'mediawiki_selenium/support'
+require 'mediawiki_selenium/step_definitions'
diff --git a/tests/browser/features/support/modules/url_module.rb b/tests/browser/features/support/modules/url_module.rb
deleted file mode 100644
index 6c329e87..00000000
--- a/tests/browser/features/support/modules/url_module.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-module URL
- def self.url(name)
- if ENV["MEDIAWIKI_URL"]
- mediawiki_url = ENV["MEDIAWIKI_URL"]
- else
- mediawiki_url = "http://127.0.0.1:80/w/index.php"
- end
- "#{mediawiki_url}#{name}"
- end
-end
diff --git a/tests/browser/features/support/pages/create_account_page.rb b/tests/browser/features/support/pages/create_account_page.rb
index 380bccbc..98b893a6 100644
--- a/tests/browser/features/support/pages/create_account_page.rb
+++ b/tests/browser/features/support/pages/create_account_page.rb
@@ -12,8 +12,7 @@
class CreateAccountPage
include PageObject
- include URL
- page_url URL.url("<%=params[:page_title]%>")
+ page_url '<%=params[:page_title]%>'
- button(:create_account, id: "wpCreateaccount")
+ button(:create_account, id: 'wpCreateaccount')
end
diff --git a/tests/browser/features/support/pages/edit_page.rb b/tests/browser/features/support/pages/edit_page.rb
index b619c342..b0f6bffe 100644
--- a/tests/browser/features/support/pages/edit_page.rb
+++ b/tests/browser/features/support/pages/edit_page.rb
@@ -1,8 +1,8 @@
class EditPage
include PageObject
- text_area(:edit_page_content, id: "wpTextbox1")
- button(:preview_button, id: "wpPreview")
- button(:show_changes_button, id: "wpDiff")
- button(:save_button, id: "wpSave")
-end \ No newline at end of file
+ text_area(:edit_page_content, id: 'wpTextbox1')
+ button(:preview_button, id: 'wpPreview')
+ button(:show_changes_button, id: 'wpDiff')
+ button(:save_button, id: 'wpSave')
+end
diff --git a/tests/browser/features/support/pages/file_does_not_exist_page.rb b/tests/browser/features/support/pages/file_does_not_exist_page.rb
index c8491f3b..90762d22 100644
--- a/tests/browser/features/support/pages/file_does_not_exist_page.rb
+++ b/tests/browser/features/support/pages/file_does_not_exist_page.rb
@@ -12,8 +12,7 @@
class FileDoesNotExistPage
include PageObject
- include URL
- page_url URL.url("File:<%=params[:page_name]%>")
+ page_url 'File:<%=params[:page_name]%>'
- div(:file_does_not_exist_message, id: "mw-imagepage-nofile")
+ div(:file_does_not_exist_message, id: 'mw-imagepage-nofile')
end
diff --git a/tests/browser/features/support/pages/login_error_page.rb b/tests/browser/features/support/pages/login_error_page.rb
index 4fc9ca7f..9a1805f3 100644
--- a/tests/browser/features/support/pages/login_error_page.rb
+++ b/tests/browser/features/support/pages/login_error_page.rb
@@ -1,5 +1,5 @@
class LoginErrorPage
include PageObject
- div(:error_box, class: "errorbox")
-end \ No newline at end of file
+ div(:error_box, class: 'errorbox')
+end
diff --git a/tests/browser/features/support/pages/main_page.rb b/tests/browser/features/support/pages/main_page.rb
index 7d96c2b2..6d76b01c 100644
--- a/tests/browser/features/support/pages/main_page.rb
+++ b/tests/browser/features/support/pages/main_page.rb
@@ -1,19 +1,18 @@
class MainPage
include PageObject
- include URL
- page_url URL.url("")
+ page_url ''
a(:edit_link, href: /action=edit/)
- li(:help_link, id: "n-help")
- div(:page_content, id: "content")
- li(:page_information_link, id: "t-info")
- li(:permanent_link_link, id: "t-permalink")
+ li(:help_link, id: 'n-help')
+ div(:page_content, id: 'content')
+ li(:page_information_link, id: 't-info')
+ li(:permanent_link_link, id: 't-permalink')
a(:printable_version_link, href: /printable=yes/)
- li(:random_page_link, id: "n-randompage")
- li(:recent_changes_link, id: "n-recentchanges")
- li(:related_changes_link, id: "t-recentchangeslinked")
- li(:special_pages_link, id: "t-specialpages")
+ li(:random_page_link, id: 'n-randompage')
+ li(:recent_changes_link, id: 'n-recentchanges')
+ li(:related_changes_link, id: 't-recentchangeslinked')
+ li(:special_pages_link, id: 't-specialpages')
a(:view_history_link, href: /action=history/)
- li(:what_links_here_link, id: "t-whatlinkshere")
-end \ No newline at end of file
+ li(:what_links_here_link, id: 't-whatlinkshere')
+end
diff --git a/tests/browser/features/support/pages/preferences_appearance_page.rb b/tests/browser/features/support/pages/preferences_appearance_page.rb
index c24e3862..83c3952f 100644
--- a/tests/browser/features/support/pages/preferences_appearance_page.rb
+++ b/tests/browser/features/support/pages/preferences_appearance_page.rb
@@ -12,30 +12,28 @@
class PreferencesAppearancePage
include PageObject
- include URL
- page_url URL.url("Special:Preferences#mw-prefsection-rendering")
+ page_url 'Special:Preferences#mw-prefsection-rendering'
- checkbox(:auto_number_check, id: "mw-input-wpnumberheadings")
- radio_button(:cologne_blue, id: "mw-input-wpskin-cologneblue")
- radio_button(:day_mo_year_radio, id: "mw-input-wpdate-dmy")
- checkbox(:dont_show_aft_check, id: "mw-input-wparticlefeedback-disable")
- checkbox(:exclude_from_experiments_check, id: "mw-input-wpvector-noexperiments")
- checkbox(:hidden_categories_check, id: "mw-input-wpshowhiddencats")
- radio_button(:iso_8601_radio, id: "mw-input-wpdate-ISO_8601")
- span(:local_time_span, id: "wpLocalTime")
- radio_button(:mo_day_year_radio, id: "mw-input-wpdate-mdy")
- radio_button(:modern, id: "mw-input-wpskin-modern")
- radio_button(:monobook, id: "mw-input-wpskin-monobook")
- radio_button(:no_preference_radio, id: "mw-input-wpdate-default")
- text_field(:other_offset, id: "mw-input-wptimecorrection-other")
+ checkbox(:auto_number_check, id: 'mw-input-wpnumberheadings')
+ radio_button(:cologne_blue, id: 'mw-input-wpskin-cologneblue')
+ radio_button(:day_mo_year_radio, id: 'mw-input-wpdate-dmy')
+ checkbox(:dont_show_aft_check, id: 'mw-input-wparticlefeedback-disable')
+ checkbox(:exclude_from_experiments_check, id: 'mw-input-wpvector-noexperiments')
+ checkbox(:hidden_categories_check, id: 'mw-input-wpshowhiddencats')
+ radio_button(:iso_8601_radio, id: 'mw-input-wpdate-ISO_8601')
+ span(:local_time_span, id: 'wpLocalTime')
+ radio_button(:mo_day_year_radio, id: 'mw-input-wpdate-mdy')
+ radio_button(:modern, id: 'mw-input-wpskin-modern')
+ radio_button(:monobook, id: 'mw-input-wpskin-monobook')
+ radio_button(:no_preference_radio, id: 'mw-input-wpdate-default')
+ text_field(:other_offset, id: 'mw-input-wptimecorrection-other')
a(:restore_default_link, href: /reset/)
- select_list(:size_select, id: "mw-input-wpimagesize")
- select_list(:threshold_select, id: "mw-input-wpstubthreshold")
- select_list(:time_offset_select, id: "mw-input-wptimecorrection")
- table(:time_offset_table, id: "mw-htmlform-timeoffset")
- select_list(:thumb_select, id: "mw-input-wpthumbsize")
- select_list(:underline_select, id: "mw-input-wpunderline")
- radio_button(:vector, id: "mw-input-wpskin-vector")
- radio_button(:year_mo_day_radio, id: "mw-input-wpdate-ymd")
+ select_list(:size_select, id: 'mw-input-wpimagesize')
+ select_list(:threshold_select, id: 'mw-input-wpstubthreshold')
+ select_list(:time_offset_select, id: 'mw-input-wptimecorrection')
+ table(:time_offset_table, id: 'mw-htmlform-timeoffset')
+ select_list(:thumb_select, id: 'mw-input-wpthumbsize')
+ select_list(:underline_select, id: 'mw-input-wpunderline')
+ radio_button(:vector, id: 'mw-input-wpskin-vector')
+ radio_button(:year_mo_day_radio, id: 'mw-input-wpdate-ymd')
end
-
diff --git a/tests/browser/features/support/pages/preferences_editing_page.rb b/tests/browser/features/support/pages/preferences_editing_page.rb
index aed9c41d..25c384f7 100644
--- a/tests/browser/features/support/pages/preferences_editing_page.rb
+++ b/tests/browser/features/support/pages/preferences_editing_page.rb
@@ -12,17 +12,16 @@
class PreferencesEditingPage
include PageObject
- include URL
- page_url URL.url("Special:Preferences#mw-prefsection-rendering")
+ page_url 'Special:Preferences#mw-prefsection-rendering'
- select_list(:edit_area_font_style_select, id: "mw-input-wpeditfont")
- checkbox(:edit_section_double_click_check, id: "mw-input-wpeditondblclick")
- checkbox(:edit_section_edit_link, id: "mw-input-wpeditsectiononrightclick")
- checkbox(:edit_section_right_click_check, id: "mw-input-wpeditsectiononrightclick")
- checkbox(:forced_edit_summary_check, id: "mw-input-wpforceeditsummary")
- checkbox(:live_preview_check, id: "mw-input-wpuselivepreview")
- checkbox(:preview_on_first_check, id: "mw-input-wppreviewonfirst")
- checkbox(:preview_on_top_check, id: "mw-input-wppreviewontop")
- checkbox(:show_edit_toolbar_check, id: "mw-input-wpshowtoolbar")
- checkbox(:unsaved_changes_check, id: "mw-input-wpuseeditwarning")
+ select_list(:edit_area_font_style_select, id: 'mw-input-wpeditfont')
+ checkbox(:edit_section_double_click_check, id: 'mw-input-wpeditondblclick')
+ checkbox(:edit_section_edit_link, id: 'mw-input-wpeditsectiononrightclick')
+ checkbox(:edit_section_right_click_check, id: 'mw-input-wpeditsectiononrightclick')
+ checkbox(:forced_edit_summary_check, id: 'mw-input-wpforceeditsummary')
+ checkbox(:live_preview_check, id: 'mw-input-wpuselivepreview')
+ checkbox(:preview_on_first_check, id: 'mw-input-wppreviewonfirst')
+ checkbox(:preview_on_top_check, id: 'mw-input-wppreviewontop')
+ checkbox(:show_edit_toolbar_check, id: 'mw-input-wpshowtoolbar')
+ checkbox(:unsaved_changes_check, id: 'mw-input-wpuseeditwarning')
end
diff --git a/tests/browser/features/support/pages/preferences_page.rb b/tests/browser/features/support/pages/preferences_page.rb
index 919ba27f..b305ee2c 100644
--- a/tests/browser/features/support/pages/preferences_page.rb
+++ b/tests/browser/features/support/pages/preferences_page.rb
@@ -12,11 +12,10 @@
class PreferencesPage
include PageObject
- include URL
- page_url URL.url("Special:Preferences")
+ page_url 'Special:Preferences'
- a(:appearance_link, id: "preftab-rendering")
- a(:editing_link, id: "preftab-editing")
- a(:user_profile_link, id: "preftab-personal")
- button(:save_button, id: "prefcontrol")
+ a(:appearance_link, id: 'preftab-rendering')
+ a(:editing_link, id: 'preftab-editing')
+ a(:user_profile_link, id: 'preftab-personal')
+ button(:save_button, id: 'prefcontrol')
end
diff --git a/tests/browser/features/support/pages/preferences_user_profile_page.rb b/tests/browser/features/support/pages/preferences_user_profile_page.rb
index 28e10b97..9e95eb5a 100644
--- a/tests/browser/features/support/pages/preferences_user_profile_page.rb
+++ b/tests/browser/features/support/pages/preferences_user_profile_page.rb
@@ -12,17 +12,16 @@
class PreferencesUserProfilePage
include PageObject
- include URL
- page_url URL.url("Special:Preferences#mw-prefsection-personal")
+ page_url 'Special:Preferences#mw-prefsection-personal'
- table(:basic_info_table, id: "mw-htmlform-info")
- link(:change_password_link, text: "Change password")
- table(:email_table, id: "mw-htmlform-email")
- radio_button(:gender_female_radio, id: "mw-input-wpgender-male")
- radio_button(:gender_male_radio, id: "mw-input-wpgender-female")
- radio_button(:gender_undefined_radio, id: "mw-input-wpgender-unknown")
- select_list(:lang_select, id: "mw-input-wplanguage")
- checkbox(:remember_password_check, id: "mw-input-wprememberpassword")
- text_field(:signature_field, id: "mw-input-wpnickname")
- table(:signature_table, id: "mw-htmlform-signature")
+ table(:basic_info_table, id: 'mw-htmlform-info')
+ link(:change_password_link, text: 'Change password')
+ table(:email_table, id: 'mw-htmlform-email')
+ radio_button(:gender_female_radio, id: 'mw-input-wpgender-male')
+ radio_button(:gender_male_radio, id: 'mw-input-wpgender-female')
+ radio_button(:gender_undefined_radio, id: 'mw-input-wpgender-unknown')
+ select_list(:lang_select, id: 'mw-input-wplanguage')
+ checkbox(:remember_password_check, id: 'mw-input-wprememberpassword')
+ text_field(:signature_field, id: 'mw-input-wpnickname')
+ table(:signature_table, id: 'mw-htmlform-signature')
end
diff --git a/tests/browser/features/support/pages/view_history_page.rb b/tests/browser/features/support/pages/view_history_page.rb
index 66895986..bb9c5862 100644
--- a/tests/browser/features/support/pages/view_history_page.rb
+++ b/tests/browser/features/support/pages/view_history_page.rb
@@ -3,5 +3,4 @@ class ViewHistoryPage
a(:view_history_link, href: /action=history/)
a(:old_version_link, href: /oldid=/)
-
-end \ No newline at end of file
+end
diff --git a/tests/browser/features/support/pages/ztargetpage.rb b/tests/browser/features/support/pages/ztargetpage.rb
index c1f46eca..da789e5e 100644
--- a/tests/browser/features/support/pages/ztargetpage.rb
+++ b/tests/browser/features/support/pages/ztargetpage.rb
@@ -1,7 +1,7 @@
class ZtargetPage < MainPage
- include URL
- page_url URL.url("<%=params[:article_name]%>")
include PageObject
- a(:link_target_page_link, text: "link to the test target page")
-end \ No newline at end of file
+ page_url '<%=params[:article_name]%>'
+
+ a(:link_target_page_link, text: 'link to the test target page')
+end
diff --git a/tests/parser/ParserTestResult.php b/tests/parser/ParserTestResult.php
index 7d9415a2..a7b36721 100644
--- a/tests/parser/ParserTestResult.php
+++ b/tests/parser/ParserTestResult.php
@@ -1,10 +1,9 @@
<?php
/**
+ * @file
+ *
* @copyright Copyright © 2013, Antoine Musso
* @copyright Copyright © 2013, Wikimedia Foundation Inc.
- * @license GNU GPL v2
- *
- * @file
*/
/**
diff --git a/tests/parser/parserTest.inc b/tests/parser/parserTest.inc
index a9df6832..1cffa20c 100644
--- a/tests/parser/parserTest.inc
+++ b/tests/parser/parserTest.inc
@@ -559,7 +559,7 @@ class ParserTest {
$parser->setTransparentTagHook( $tag, $callback );
}
- wfRunHooks( 'ParserTestParser', array( &$parser ) );
+ Hooks::run( 'ParserTestParser', array( &$parser ) );
return $parser;
}
@@ -593,6 +593,14 @@ class ParserTest {
}
}
+ if ( isset( $opts['tidy'] ) ) {
+ if ( !$this->tidySupport->isEnabled() ) {
+ return $this->showSkipped();
+ } else {
+ $options->setTidy( true );
+ }
+ }
+
if ( isset( $opts['title'] ) ) {
$titleText = $opts['title'];
} else {
@@ -624,10 +632,6 @@ class ParserTest {
$output->setTOCEnabled( !isset( $opts['notoc'] ) );
$out = $output->getText();
if ( isset( $opts['tidy'] ) ) {
- if ( !$this->tidySupport->isEnabled() ) {
- return $this->showSkipped();
- }
- $out = MWTidy::tidy( $out );
$out = preg_replace( '/\s+$/', '', $out );
}
@@ -639,6 +643,14 @@ class ParserTest {
$out = "$title\n$out";
}
+ if ( isset( $opts['showindicators'] ) ) {
+ $indicators = '';
+ foreach ( $output->getIndicators() as $id => $content ) {
+ $indicators .= "$id=$content\n";
+ }
+ $out = $indicators . $out;
+ }
+
if ( isset( $opts['ill'] ) ) {
$out = implode( ' ', $output->getLanguageLinks() );
} elseif ( isset( $opts['cat'] ) ) {
@@ -877,10 +889,7 @@ class ParserTest {
'wgDisableLangConversion' => false,
'wgDisableTitleConversion' => false,
// Tidy options.
- // We always set 'wgUseTidy' to false when parsing, but certain
- // test-running modes still use tidy if available, so ensure
- // that the tidy-related options are all set to their defaults.
- 'wgUseTidy' => false,
+ 'wgUseTidy' => isset( $opts['tidy'] ),
'wgAlwaysUseTidy' => false,
'wgDebugTidy' => false,
'wgTidyConf' => $IP . '/includes/tidy.conf',
@@ -901,7 +910,7 @@ class ParserTest {
$this->savedGlobals = array();
/** @since 1.20 */
- wfRunHooks( 'ParserTestGlobals', array( &$settings ) );
+ Hooks::run( 'ParserTestGlobals', array( &$settings ) );
foreach ( $settings as $var => $val ) {
if ( array_key_exists( $var, $GLOBALS ) ) {
@@ -941,7 +950,7 @@ class ParserTest {
$tables = array( 'user', 'user_properties', 'user_former_groups', 'page', 'page_restrictions',
'protected_titles', 'revision', 'text', 'pagelinks', 'imagelinks',
'categorylinks', 'templatelinks', 'externallinks', 'langlinks', 'iwlinks',
- 'site_stats', 'hitcounter', 'ipblocks', 'image', 'oldimage',
+ 'site_stats', 'ipblocks', 'image', 'oldimage',
'recentchanges', 'watchlist', 'interwiki', 'logging',
'querycache', 'objectcache', 'job', 'l10n_cache', 'redirect', 'querycachetwo',
'archive', 'user_groups', 'page_props', 'category', 'msg_resource', 'msg_resource_links'
@@ -954,7 +963,7 @@ class ParserTest {
// Allow extensions to add to the list of tables to duplicate;
// may be necessary if they hook into page save or other code
// which will require them while running tests.
- wfRunHooks( 'ParserTestTables', array( &$tables ) );
+ Hooks::run( 'ParserTestTables', array( &$tables ) );
return $tables;
}
@@ -1493,8 +1502,10 @@ class ParserTest {
* Insert a temporary test article
* @param string $name The title, including any prefix
* @param string $text The article text
- * @param int $line The input line number, for reporting errors
- * @param bool $ignoreDuplicate Whether to silently ignore duplicate pages
+ * @param int|string $line The input line number, for reporting errors
+ * @param bool|string $ignoreDuplicate Whether to silently ignore duplicate pages
+ * @throws Exception
+ * @throws MWException
*/
public static function addArticle( $name, $text, $line = 'unknown', $ignoreDuplicate = '' ) {
global $wgCapitalLinks;
diff --git a/tests/parser/parserTests.txt b/tests/parser/parserTests.txt
index f915922f..e9653529 100644
--- a/tests/parser/parserTests.txt
+++ b/tests/parser/parserTests.txt
@@ -16,7 +16,7 @@
# cat add category links
# ill add inter-language links
# subpage enable subpages (disabled by default)
-# noxml don't check for XML well formdness
+# noxml don't check for XML well-formedness
# title=[[XXX]] run test using article title XXX
# language=XXX set content language to XXX for this test
# variant=XXX set the variant of language for this test (eg zh-tw)
@@ -26,6 +26,7 @@
# php php-only test (not run by the parsoid parser unless
# the test includes an html/parsoid section)
# showtitle make the first line the title
+# showindicators make the first lines the page status indicators
# comment run through Linker::formatComment() instead of main parser
# local format section links in edit comment text as local links
# notoc disable table of contents
@@ -69,6 +70,12 @@ Template:pipe
|
!! endarticle
+!! article
+Template:=
+!! text
+<nowiki>=</nowiki>
+!! endarticle
+
!!article
MediaWiki:bad image list
!!text
@@ -112,22 +119,50 @@ Template:echo_with_div
!! endarticle
!! article
-Template:attr_str
+Template:table_attribs
!! text
-{{{1}}}="{{{2}}}"
+<noinclude>
+|</noinclude>style="color:red;"|Foo
!! endarticle
!! article
-Template:table_attribs
+Template:table_attribs_2
+!! text
+<noinclude>
+|</noinclude>style="color:red;"|Foo
+|Bar||Baz
+!! endarticle
+
+!! article
+Template:table_attribs_3
+!! text
+<noinclude>
+|</noinclude>style{{=}}"background:&#35;f9f9f9;"|Foo
+!! endarticle
+
+!! article
+Template:table_attribs_4
+!! text
+| style="background-color:#DC241f;" width="10px" |
+!! endarticle
+
+!! article
+Template:table_attribs_5
!! text
<noinclude>
-|</noinclude>style="color: red"| Foo
+|</noinclude>style="color:red;"||Bar
+!! endarticle
+
+!! article
+Template:table_header_cells
+!! text
+{{table_attribs}}!!style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz
!! endarticle
!! article
Template:table_cells
!! text
-{{table_attribs}} || Bar || Baz
+{{table_attribs}}||style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz
!! endarticle
!! article
@@ -137,6 +172,22 @@ Template:image_attribs
[[File:foobar.jpg|</noinclude>right|Caption text<noinclude>]]</noinclude>
!! endarticle
+## See T48811 for details
+!! article
+Template:mixed_attr_content_template
+!! text
+style="color:red;" title="T48811"
+|-
+|foo
+!! endarticle
+
+!! article
+Template:definition_list
+!! text
+one
+::two
+!! endarticle
+
!! article
A?b
!! text
@@ -155,6 +206,39 @@ Template:OpenTable
{|
!!endarticle
+!!article
+Template:EmptyLITest
+!!text
+*a
+*
+*
+*b
+!!endarticle
+
+!!article
+Template:EmptyTRTest
+!!text
+{|
+|-
+|-
+|foo
+|-
+|-
+|bar
+|}
+!!endarticle
+
+!!article
+Template:EmptyTRWithHTMLAttrTest
+!!text
+<table>
+<tr align="center"></tr>
+<tr><td>foo</td></tr>
+<tr align="center"></tr>
+<tr><td>bar</td></tr>
+</table>
+!!endarticle
+
###
### Basic tests
###
@@ -505,11 +589,8 @@ Italics and bold: 2-quote opening sequence: (2,2)
</p>
!!end
-
!! test
Italics and bold: 2-quote opening sequence: (2,3)
-!! options
-parsoid=wt2html
!! wikitext
''foo'''
!! html/*
@@ -517,18 +598,6 @@ parsoid=wt2html
</p>
!!end
-
-# same html as previous, but wikitext adjusted to match parsoid html2wt
-!! test
-Italics and bold: 2-quote opening sequence: (2,3) w/ nowiki
-!! wikitext
-''<nowiki>foo'</nowiki>''
-!! html
-<p><i>foo'</i>
-</p>
-!! end
-
-
!! test
Italics and bold: 2-quote opening sequence: (2,4)
!! options
@@ -540,18 +609,16 @@ parsoid=wt2html
</p>
!!end
-
# same html as previous, but wikitext adjusted to match parsoid html2wt
!! test
Italics and bold: 2-quote opening sequence: (2,4) w/ nowiki
!! wikitext
-''<nowiki>foo''</nowiki>''
+''foo<nowiki>''</nowiki>''
!! html
<p><i>foo''</i>
</p>
!! end
-
# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
!! test
Italics and bold: 2-quote opening sequence: (2,5)
@@ -589,12 +656,11 @@ Italics and bold: 2-quote opening sequence: (2,5+3) w/ nowiki
Italics and bold: 3-quote opening sequence: (3,2)
!! wikitext
'''foo''
-!! html
+!! html/*
<p>'<i>foo</i>
</p>
!!end
-
!! test
Italics and bold: 3-quote opening sequence: (3,3)
!! wikitext
@@ -604,11 +670,8 @@ Italics and bold: 3-quote opening sequence: (3,3)
</p>
!!end
-
!! test
Italics and bold: 3-quote opening sequence: (3,4)
-!! options
-parsoid=wt2html
!! wikitext
'''foo''''
!! html/*
@@ -616,18 +679,6 @@ parsoid=wt2html
</p>
!!end
-
-# same html as previous, but wikitext adjusted to match parsoid html2wt
-!! test
-Italics and bold: 3-quote opening sequence: (3,4) w/ nowiki
-!! wikitext
-'''<nowiki>foo'</nowiki>'''
-!! html
-<p><b>foo'</b>
-</p>
-!! end
-
-
# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
!! test
Italics and bold: 3-quote opening sequence: (3,5)
@@ -672,7 +723,6 @@ parsoid=wt2html
</p>
!!end
-
# same html as previous, but wikitext adjusted to match parsoid html2wt
!! test
Italics and bold: 4-quote opening sequence: (4,2) w/ nowiki
@@ -683,17 +733,15 @@ Italics and bold: 4-quote opening sequence: (4,2) w/ nowiki
</p>
!! end
-
!! test
Italics and bold: 4-quote opening sequence: (4,3)
!! wikitext
''''foo'''
-!! html
+!! html/*
<p>'<b>foo</b>
</p>
!!end
-
!! test
Italics and bold: 4-quote opening sequence: (4,4)
!! options
@@ -705,18 +753,16 @@ parsoid=wt2html
</p>
!!end
-
# same html as previous, but wikitext adjusted to match parsoid html2wt
!! test
Italics and bold: 4-quote opening sequence: (4,4) w/ nowiki
!! wikitext
-''''<nowiki>foo'</nowiki>'''
+'<nowiki/>'''foo''''
!! html
<p>'<b>foo'</b>
</p>
!! end
-
# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
!! test
Italics and bold: 4-quote opening sequence: (4,5)
@@ -736,7 +782,7 @@ parsoid=wt2html
!! test
Italics and bold: 4-quote opening sequence: (4,5+2) w/ nowiki
!! wikitext
-''''foo'''''<nowiki/>''
+'<nowiki/>'''foo'''''<nowiki/>''
!! html/php
<p>'<b>foo</b>
</p>
@@ -761,7 +807,6 @@ parsoid=wt2html
</p>
!!end
-
# same html as previous, but wikitext adjusted to match parsoid html2wt
# skipping wt2html and html2html because it wants to put <i> before <b>
!! test
@@ -786,7 +831,6 @@ parsoid=wt2html
</p>
!!end
-
# same html as previous, but wikitext adjusted to match parsoid html2wt
!! test
Italics and bold: 5-quote opening sequence: (5,3+2)
@@ -797,7 +841,6 @@ Italics and bold: 5-quote opening sequence: (5,3+2)
</p>
!! end
-
!! test
Italics and bold: 5-quote opening sequence: (5,4)
!! options
@@ -809,18 +852,6 @@ parsoid=wt2html
</p>
!!end
-
-# same html as previous, but wikitext adjusted to match parsoid html2wt
-!! test
-Italics and bold: 5-quote opening sequence: (5,4+2) w/ nowiki
-!! wikitext
-'''''<nowiki>foo'</nowiki>'''''
-!! html
-<p><i><b>foo'</b></i>
-</p>
-!! end
-
-
!! test
Italics and bold: 5-quote opening sequence: (5,5)
!! wikitext
@@ -830,6 +861,15 @@ Italics and bold: 5-quote opening sequence: (5,5)
</p>
!!end
+!! test
+Italics and bold: 5-quote opening sequence: (5,6)
+!! wikitext
+'''''foo''''''
+!! html/*
+<p><i><b>foo'</b></i>
+</p>
+!! end
+
###
### multiple quote sequences in a line
###
@@ -849,7 +889,7 @@ parsoid=wt2html
!! test
Italics and bold: multiple quote sequences: (2,4,2+3) w/ nowiki
!! wikitext
-''<nowiki>foo'</nowiki>'''bar'''''
+''foo'<nowiki/>'''bar'''''
!! html
<p><i>foo'<b>bar</b></i>
</p>
@@ -872,7 +912,7 @@ parsoid=wt2html
!! test
Italics and bold: multiple quote sequences: (2,4,3+2) w/ nowiki
!! wikitext
-''<nowiki>foo'</nowiki>'''bar'''''
+''foo'<nowiki/>'''bar'''''
!! html
<p><i>foo'<b>bar</b></i>
</p>
@@ -895,7 +935,7 @@ parsoid=wt2html
!! test
Italics and bold: multiple quote sequences: (2,4,4+2) w/ nowiki
!! wikitext
-''<nowiki>foo'</nowiki>'''<nowiki>bar'</nowiki>'''''
+''foo'<nowiki/>'''bar'<nowiki/>'''''
!! html
<p><i>foo'<b>bar'</b></i>
</p>
@@ -997,14 +1037,11 @@ parsoid=wt2html
# same html as previous, but wikitext adjusted to match parsoid html2wt
-# add 'parsoid' option to use 'parsoid' normalization of the placeholder
!! test
Italics and bold: other quote tests: (3,2,3+2+2,2)
-!! options
-parsoid
!! wikitext
'''this is about ''foo'''''<nowiki/>''s family''
-!! html/*
+!! html
<p><b>this is about <i>foo</i></b><i>s family</i>
</p>
!! end
@@ -1012,10 +1049,9 @@ parsoid
!! test
Italics and bold: other quote tests: (3,2,3,3)
-!! options
!! wikitext
'''this is about ''foo'''s family'''
-!! html
+!! html/*
<p>'<i>this is about </i>foo<b>s family</b>
</p>
!!end
@@ -1035,9 +1071,11 @@ Italics and bold: other quote tests: (3,(2,2),3)
Italicized possessive
!! wikitext
The ''[[Main Page]]'''s talk page.
-!! html
+!! html/php
<p>The <i><a href="/wiki/Main_Page" title="Main Page">Main Page</a>'</i>s talk page.
</p>
+!! html/parsoid
+<p>The <i><a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a>'</i>s talk page.</p>
!! end
!! test
@@ -1201,38 +1239,84 @@ Ruby markup (W3C-style)
</p>
!! end
-# There is a tidy bug here: http://sourceforge.net/p/tidy/bugs/946/
+# The next two test different paths in the sanitizer.
!! test
Non-word characters don't terminate tag names (bug 17663, 40670, 52022)
!! wikitext
-<b→> doesn't work! </b→>
+<blockquote|>a</blockquote>
+
+<b→> doesn't terminate </b→>
-<bä> doesn't work! </bä>
+<bä> doesn't terminate </bä>
-<boo> works fine </boo>
+<boo> doesn't terminate </boo>
-<s.foo>s.foo</s.foo>
+<s.foo> doesn't terminate </s.foo>
<sub-ID#1>
!! html
-<p>&lt;b→&gt; doesn't work! &lt;/b→&gt;
-</p><p>&lt;bä&gt; doesn't work! &lt;/bä&gt;
-</p><p>&lt;boo&gt; works fine &lt;/boo&gt;
-</p><p>&lt;s.foo&gt;s.foo&lt;/s.foo&gt;
+<p>&lt;blockquote|&gt;a&lt;/blockquote&gt;
+</p><p>&lt;b→&gt; doesn't terminate &lt;/b→&gt;
+</p><p>&lt;bä&gt; doesn't terminate &lt;/bä&gt;
+</p><p>&lt;boo&gt; doesn't terminate &lt;/boo&gt;
+</p><p>&lt;s.foo&gt; doesn't terminate &lt;/s.foo&gt;
</p><p>&lt;sub-ID#1&gt;
</p>
!! end
+# There is a tidy bug here: http://sourceforge.net/p/tidy/bugs/946/
+# If the non-word-character tag made it through the sanitizer, tidy
+# would munge it up.
+!! test
+Non-word characters don't terminate tag names + tidy
+!! wikitext
+<blockquote|>a</blockquote>
+
+<b→> doesn't terminate </b→>
+
+<bä> doesn't terminate </bä>
+
+<boo> doesn't terminate </boo>
+
+<s.foo> doesn't terminate </s.foo>
+
+<sub-ID#1>
+!! html+tidy
+<p>&lt;blockquote|&gt;a</p>
+<p>&lt;b→&gt; doesn't terminate &lt;/b→&gt;</p>
+<p>&lt;bä&gt; doesn't terminate &lt;/bä&gt;</p>
+<p>&lt;boo&gt; doesn't terminate &lt;/boo&gt;</p>
+<p>&lt;s.foo&gt; doesn't terminate &lt;/s.foo&gt;</p>
+<p>&lt;sub-ID#1&gt;</p>
+!! end
+
+###
+### See tests/parser/parserTestsParserHook.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.
+###
+!! test
+Non-word characters are valid in extension tags (T19663)
+!! wikitext
+<tåg>tåg</tåg>
+!! html
+<pre>
+'tåg'
+array (
+)
+</pre>
+
+!! end
+
!! test
Isolated close tags should be treated as literal text (bug 52760)
!! wikitext
</b>
<s.foo>s</s>
-!! html
-<p>&lt;/b&gt;
-</p><p>&lt;s.foo&gt;s&lt;/s&gt;
-</p>
+!! html+tidy
+<p>&lt;s.foo&gt;s</p>
!! end
###
@@ -1328,18 +1412,75 @@ parsoid
!! wikitext
{{echo|&ndash;}}
!! html
-<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span>
-</p>
+<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span></p>
!! end
!! test
Properly escape nowiki when combined with other wiki markup
!! options
parsoid=html2wt
+!! html
+<p>* &lt;/nowiki&gt; tag</p>
!! wikitext
<nowiki>* &lt;/nowiki&gt;</nowiki> tag
+!! end
+
+!! test
+T71950: 1. Put nowiki as close to cause as possible, even with non-quote escapable chars
+!! options
+parsoid=html2wt
!! html
-<p>* &lt;/nowiki&gt; tag</p>
+<p>This text: L'<a rel="mw:WikiLink" href="./Foo">Foo</a>
+This text: L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
+This text: L'''<a rel="mw:WikiLink" href="./Foo">Foo</a>''</p>
+!! wikitext
+This text: L'[[Foo]]
+This text: L<nowiki>''</nowiki>[[Foo]]
+This text: L<nowiki>'''</nowiki>[[Foo]]<nowiki>''</nowiki>
+!! end
+
+# This test fails because wikitext whitespace is not normalized before comparing.
+!! test
+T71950: 2. Put nowiki as close to cause as possible, after ' :'
+!! options
+parsoid=html2wt
+!! html
+<p>This text : L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
+</p>
+!! wikitext
+This text : L<nowiki>''</nowiki>[[Foo]]
+!! end
+
+# This test and the next one are html2wt only as they test that incorrect wikitext
+# passed in template arguments gets escaped or wrapped in nowikis where required.
+!! test
+T71482: Use {{!}} instead of nowiki for single pipe in template argument
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo|bar&quot;}},&quot;i&quot;:0}}]}" about="#mwt1"></span>
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo|bar |[[&quot;}},&quot;i&quot;:0}}]}" about="#mwt2"></p>
+!! wikitext
+{{echo|foo{{!}}bar}}
+{{echo|<nowiki>foo|bar |[[</nowiki>}}
+!! end
+
+!! test
+T53961: Output correct nowikis in template arguments
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a [ b&quot;}},&quot;i&quot;:0}}]}" about="#mwt1"></span>
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a }} b&quot;}},&quot;i&quot;:0}}]}" about="#mwt2"></span>
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a [[ b&quot;}},&quot;i&quot;:0}}]}" about="#mwt3"></span>
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a | {{ ]]&quot;}},&quot;i&quot;:0}}]}" about="#mwt4"></span>
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a }&quot;}},&quot;i&quot;:0}}]}" about="#mwt5"></span></p>
+!! wikitext
+{{echo|a [ b}}
+{{echo|a <nowiki>}}</nowiki> b}}
+{{echo|<nowiki>a [[ b</nowiki>}}
+{{echo|a {{!}} <nowiki>{{ ]]</nowiki>}}
+{{echo|a <nowiki>}</nowiki>}}
!! end
###
@@ -1488,6 +1629,19 @@ Comment semantics: unclosed comment at end
!! end
+# Bug 58184: document parsoid's behaviour
+!! test
+Suppress comment closing tag in lenient browsers
+!! options
+parsoid=wt2html,html2html
+!! wikitext
+<!-- Browsers--!> think this is closed -->
+!! html/php
+
+!! html/parsoid
+<!-- Browsers--¡> think this is closed -->
+!! end
+
!! test
Comment in template title
!! wikitext
@@ -1649,6 +1803,11 @@ x <div>foo</div> z
<p>z</p>
!! end
+# Tidy strips out the empty <div> tags. Parsoid doesn't.
+# So, we have a separate section for Parsoid. We don't want
+# to mimic this stripping behavior in Parsoid. It affects
+# editing experience and also requires us to maintain additional
+# info for RT-ing.
!! test
Empty lines between lines with block tags
!! wikitext
@@ -1687,10 +1846,22 @@ b
<p>d</p>
<p><br /></p>
<div>e</div>
+!! html/parsoid
+<div data-parsoid='{"stx":"html"}'></div>
+
+<p><br /></p>
+<div data-parsoid='{"stx":"html"}'></div><p>a</p>
+
+<p>b</p>
+<div data-parsoid='{"stx":"html"}'>a</div><p>b</p>
+
+<div data-parsoid='{"stx":"html"}'>b</div><p>d</p>
+
+<p><br /></p>
+<div data-parsoid='{"stx":"html"}'>e</div>
!! end
## PHP parser emits output which is broken
-## XXX The parsoid output doesn't match the tidy output.
!! test
Unclosed HTML p-tags should be handled properly
!! wikitext
@@ -1700,15 +1871,42 @@ a
b
!! html/php+tidy
<div>
-<p>foo&lt;/div&gt;</p>
+<p>foo</p>
+</div>
<p>a</p>
-b</div>
+<p>b</p>
!! html/parsoid
<div data-parsoid='{"stx":"html"}'><p data-parsoid='{"stx":"html", "autoInsertedEnd":true}'>foo</p></div>
<p>a</p>
<p>b</p>
!! end
+## SSS FIXME: I can come up with other scenarios where this doesn't work because
+## of eager output of buffered tokens in the p-wrapper. But, I'm going to ignore
+## them for now.
+!! test
+1. P-wrapping should leave sol-transparent tags outside p-tags where possible
+!! options
+parsoid=wt2html
+!! wikitext
+a [[Category:A1]] [[Category:A2]]
+[[Category:A3]]
+[[Category:A4]]
+!! html/parsoid
+<p>a</p>
+<link href="Category:A1"/> <link href="Category:A2"/> <link href="Category:A3"/> <link href="Category:A4"/>
+!! end
+
+!! test
+2. P-wrapping should leave sol-transparent tags outside p-tags where possible
+!! options
+parsoid=wt2html
+!! wikitext
+[[Category:A1]]a
+!! html/parsoid
+<link href="Category:A1"/><p>a</p>
+!! end
+
###
### Preformatted text
###
@@ -1966,8 +2164,11 @@ Entities inside <pre>
</p>
!! end
+# Parsoid doesn't strip empty tags, like Tidy does.
!! test
Empty pre; pre inside other HTML tags (bug 54946)
+!! options
+parsoid=wt2html,wt2wt
!! wikitext
a
@@ -1975,7 +2176,7 @@ a
foo
</pre></div>
<pre></pre>
-!! html
+!! html/php
<p>a
</p>
<div><pre>
@@ -1983,12 +2184,18 @@ foo
</pre></div>
<pre></pre>
-!! html+tidy
+!! html/php+tidy
<p>a</p>
<div>
<pre>
foo
</pre></div>
+!! html/parsoid
+<p>a</p>
+
+<div><pre>foo
+</pre></div>
+<pre></pre>
!! end
!! test
@@ -2156,10 +2363,11 @@ parsoid=wt2html
<table><pre></pre></table>
!! html/parsoid
-<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>&lt;pre </span>
-<pre>x</pre>
+<pre about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"a":{"&lt;pre":null},"sa":{"&lt;pre":""},"stx":"html","pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>x</pre>
+
+
+<p>&lt;pre </p>
-<span>&lt;pre </span>
<table></table>
!! end
@@ -2335,6 +2543,41 @@ Templates: Handle comments in the target
<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo"}},"i":0}}]}'>foo</p>
!!end
+!! test
+Templates: Handle comments in parameter names (bug 67657)
+!! wikitext
+{{echo|1
+<!-- should be ignored -->
+=foo}}
+
+{{echo|
+<!-- should be ignored -->
+1 = foo}}
+
+{{echo|1<!-- should be ignored --> = foo}}
+
+{{echo|<!-- should be ignored -->1 = foo}}
+!!html/parsoid
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"1\n&lt;!-- should be ignored -->"}}},"i":0}}]}'>foo</p>
+
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"&lt;!-- should be ignored -->\n1"}}},"i":0}}]}'>foo</p>
+
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"1&lt;!-- should be ignored -->"}}},"i":0}}]}'>foo</p>
+
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo","key":{"wt":"&lt;!-- should be ignored -->1"}}},"i":0}}]}'>foo</p>
+!!end
+
+!! test
+Templates: Other wikitext in parameter names (bug 67657)
+!! wikitext
+{{echo|''1''=foo}}
+!!html/parsoid
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"&#39;&#39;1&#39;&#39;":{"wt":"foo"}},"i":0}}]}'>{{{1}}}</p>
+!!html/php
+<p>{{{1}}}
+</p>
+!!end
+
#--------------------------------------------------------------------
# Transclusion parameter escaping tests
#--------------------------------------------------------------------
@@ -2431,6 +2674,18 @@ parsoid
<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a : b"}},"i":0}}]}'>a<span typeof="mw:Placeholder" data-parsoid='{"isDisplayHack":true}'> </span>: b</p>
!! end
+## Bug T73412
+!! test
+Templates: Preserve blank parameter names
+!! wikitext
+{{echo|=foo}}
+!! html/php
+<p>{{{1}}}
+</p>
+!! html/parsoid
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"":{"wt":"foo"}},"i":0}}]}'>{{{1}}}</p>
+!! end
+
###
### Parsoid-centric tests for testing RT edge cases for pre
###
@@ -2559,12 +2814,8 @@ c
!! html/parsoid
<pre>a</pre>
-
-<table>
-
-<tbody>
-<tr>
-<td> b</td></tr>
+ <table>
+ <tbody><tr><td> b</td></tr>
</tbody></table>
!!end
@@ -2613,6 +2864,12 @@ a
c <blockquote> foo </blockquote>
<pre><span> foo </span>
</pre>
+!! html/parsoid
+ <p>a </p><p data-parsoid='{"stx":"html"}'> foo </p>
+ <p>b </p><div data-parsoid='{"stx":"html"}'> foo </div>
+ <p>c </p><blockquote data-parsoid='{"stx":"html"}'> foo </blockquote>
+<pre><span> foo </span>
+</pre>
!! html+tidy
<p>a</p>
<p>foo</p>
@@ -2637,6 +2894,9 @@ a
</pre>
b <div> foo </div>
+!! html/parsoid
+<pre>a <span data-parsoid='{"stx":"html"}'>foo</span></pre>
+ b <div data-parsoid='{"stx":"html"}'> foo </div>
!! html+tidy
<pre>
a <span>foo</span>
@@ -2718,7 +2978,7 @@ File:foobar.jpg
!! html
a <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="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
<div class="gallerytext">
</div>
</div></li>
@@ -2730,7 +2990,7 @@ File:foobar.jpg
<li class="gallerybox" style="width: 155px">
<div style="width: 155px">
<div class="thumb" style="width: 150px;">
-<div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div>
+<div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div>
</div>
<div class="gallerytext"></div>
</div>
@@ -2878,8 +3138,7 @@ parsoid=wt2html,wt2wt
{{echo| [[Category:foo]]}} <!-- No pre-wrapping -->
!! html
<link rel="mw:PageProp/Category" href="./Category:Foo"> <!-- No pre-wrapping -->
-<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span>
-<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre-wrapping -->
+<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre-wrapping -->
!! end
!! test
@@ -2892,7 +3151,6 @@ parsoid=wt2html,wt2wt
!! html
<pre>
<link rel="mw:PageProp/Category" href="./Category:Foo"> a
-
<link rel="mw:PageProp/Category" href="./Category:Foo"> <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b"}},"i":0}}]}'>b</span></pre>
!! end
@@ -3110,10 +3368,12 @@ Definition list with wikilink containing colon
Definition list with news link containing colon
!! wikitext
; news:alt.wikipedia.rox: This isn't even a real newsgroup!
-!! html
+!! html/php
<dl><dt> <a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a></dt>
<dd> This isn't even a real newsgroup!</dd></dl>
+!! html/parsoid
+<dl><dt> <a rel="mw:ExtLink" href="news:alt.wikipedia.rox" data-parsoid='{"stx":"url"}'>news:alt.wikipedia.rox</a></dt><dd data-parsoid='{"stx":"row"}'> This isn't even a real newsgroup!</dd></dl>
!! end
!! test
@@ -3803,7 +4063,7 @@ Definition Lists: Weird Ones: Test 1
<dl>
<dt>
<dl>
-<dt> foo<span typeof="mw:Placeholder" data-parsoid='{"src":" "}'>&nbsp;</span></dt>
+<dt> foo<span typeof="mw:Placeholder">&nbsp;</span></dt>
<dd data-parsoid='{"stx":"row"}'> bar (who uses this?)</dd>
</dl></dt>
</dl></dd>
@@ -3815,6 +4075,122 @@ Definition Lists: Weird Ones: Test 1
</ul>
!! end
+!! test
+Definition Lists: colons occurring in tags
+!! wikitext
+;a:b
+;'''a:b'''
+;<i>a:b</i>
+;<span>a:b</span>
+;<div>a:b</div>
+;<div>a
+:b</div>
+;{{echo|a:b}}
+;{{echo|''a:b''}}
+;;;''a:b''
+!! html+tidy
+<dl>
+<dt>a</dt>
+<dd>b</dd>
+<dt><b>a:b</b></dt>
+<dt><i>a:b</i></dt>
+<dt><span>a:b</span></dt>
+<dd>
+<div>a:b</div>
+</dd>
+<dd>
+<div>a
+<dl>
+<dd>b</dd>
+</dl>
+</div>
+</dd>
+<dt>a</dt>
+<dd>b</dd>
+<dt><i>a:b</i></dt>
+</dl>
+<dl>
+<dd>
+<dl>
+<dd>
+<dl>
+<dt><i>a:b</i></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+</dl>
+!! end
+
+!! test
+Definition Lists: colons and tables 1
+!! wikitext
+:{|
+| x
+|}
+:{|
+| y
+|}
+!! html
+<dl><dd><table>
+<tr>
+<td> x
+</td></tr></table></dd></dl>
+<dl><dd><table>
+<tr>
+<td> y
+</td></tr></table></dd></dl>
+
+!! end
+
+# Parsoid's output (as documented below) differs from php's in this case.
+# This is probably a bug. If we fixup parsoid to match php's output, the
+# above test should pass and the below test case can be removed. It is
+# unclear which output is more desirable.
+
+!! test
+Definition Lists: colons and tables 2
+!! wikitext
+:{|
+| x
+|}
+:{|
+| y
+|}
+!! html/parsoid
+<dl><dd><table>
+<tr>
+<td> x
+</td></tr></table></dd>
+<dd><table>
+<tr>
+<td> y
+</td></tr></table></dd></dl>
+!! end
+
+!! test
+Definition Lists: template interaction
+!! wikitext
+::{{definition_list}}
+
+:one
+::{{definition_list}}
+:::two
+:::three
+::four
+!! html/parsoid
+<dl><dd><dl data-parsoid='{}'><dd about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[":",{"template":{"target":{"wt":"definition_list","href":"./Template:Definition_list"},"params":{},"i":0}}]}'>one</dd><span about="#mwt1">
+</span><dd about="#mwt1">two</dd></dl></dd></dl>
+
+<dl><dd data-parsoid='{}'>one
+<dl><dd about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":["::",{"template":{"target":{"wt":"definition_list","href":"./Template:Definition_list"},"params":{},"i":0}},"\n:::two\n:::three"]}'>one</dd><span about="#mwt2">
+</span><dd about="#mwt2">two
+<dl><dd>two</dd>
+<dd>three</dd></dl></dd>
+<dd data-parsoid='{}'>four</dd></dl></dd></dl>
+!! end
+
+
###
### External links
###
@@ -4004,8 +4380,79 @@ External links: with no contents
</p>
!! html/parsoid
<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"></a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo">Bar</a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"><span>Bar</span></a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="wikipedia:Foo">Bar</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="wikipedia:Foo"><span>Bar</span></a></p>
+!! end
+
+!! test
+External links: Free with trailing punctuation
+!! wikitext
+http://example.com,
+http://example.com;
+http://example.com\
+http://example.com.
+http://example.com:
+http://example.com!
+http://example.com?
+http://example.com)
+http://example.com/url_with_(brackets)
+(http://example.com/url_without_brackets)
+http://example.com/url_with_entity&nbsp;
+http://example.com/url_with_entity&#xA0;
+http://example.com/url_with_entity&#160;
+http://example.com/url_with_entity&lt;
+http://example.com/url_with_entity&#x3C;
+http://example.com/url_with_entity&#60;
+!! html/php
+<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>,
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>;
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>\
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>.
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>:
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>!
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>?
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
+<a rel="nofollow" class="external free" href="http://example.com/url_with_(brackets)">http://example.com/url_with_(brackets)</a>
+(<a rel="nofollow" class="external free" href="http://example.com/url_without_brackets">http://example.com/url_without_brackets</a>)
+<a rel="nofollow" class="external free" href="http://example.com/url_with_entity ">http://example.com/url_with_entity </a>
+<a rel="nofollow" class="external free" href="http://example.com/url_with_entity ">http://example.com/url_with_entity </a>
+<a rel="nofollow" class="external free" href="http://example.com/url_with_entity ">http://example.com/url_with_entity </a>
+<a rel="nofollow" class="external free" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a>&lt;
+<a rel="nofollow" class="external free" href="http://example.com/url_with_entity%3C">http://example.com/url_with_entity%3C</a>
+<a rel="nofollow" class="external free" href="http://example.com/url_with_entity%3C">http://example.com/url_with_entity%3C</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a>,
+<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>;
+<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>\
+<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>.
+<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>:
+<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>!
+<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>?
+<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>)
+<a rel="mw:ExtLink" href="http://example.com/url_with_(brackets)">http://example.com/url_with_(brackets)</a>
+(<a rel="mw:ExtLink" href="http://example.com/url_without_brackets">http://example.com/url_without_brackets</a>)
+<a rel="mw:ExtLink" href="http://example.com/url_with_entity ">http://example.com/url_with_entity </a>
+<a rel="mw:ExtLink" href="http://example.com/url_with_entity ">http://example.com/url_with_entity </a>
+<a rel="mw:ExtLink" href="http://example.com/url_with_entity ">http://example.com/url_with_entity </a>
+<a rel="mw:ExtLink" href="http://example.com/url_with_entity">http://example.com/url_with_entity</a><span typeof="mw:Entity">&lt;</span>
+<a rel="mw:ExtLink" href="http://example.com/url_with_entity&lt;">http://example.com/url_with_entity&lt;</a>
+<a rel="mw:ExtLink" href="http://example.com/url_with_entity&lt;">http://example.com/url_with_entity&lt;</a></p>
+!! end
+
+!! test
+External links: No preceding word characters allowed (bug 65278)
+!! wikitext
+NOPEhttp://example.com
+N0http://example.com
+ok:http://example.com
+ok-http://example.com
+!! html
+<p>NOPEhttp://example.com
+N0http://example.com
+ok:<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
+ok-<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
+</p>
!! end
!! test
@@ -4095,10 +4542,12 @@ URL in text: [http://example.com http://example.com]
External links: Clickable images
!! wikitext
ja-style clickable images: [http://example.com http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png]
-!! html
+!! html/php
<p>ja-style clickable images: <a rel="nofollow" class="external text" href="http://example.com"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" /></a>
</p>
-!!end
+!! html/parsoid
+<p>ja-style clickable images: <a rel="mw:ExtLink" href="http://example.com"><img src="http://meta.wikimedia.org/upload/f/f1/Ncwikicol.png" alt="Ncwikicol.png" data-parsoid='{"type":"extlink"}'/></a></p>
+!! end
!! test
External links: raw ampersand
@@ -4288,10 +4737,12 @@ http://www.example.com/<hello>
BUG 289: literal ">"-token in URL-tail
!! wikitext
http://www.example.com/<b>html</b>
-!! html
+!! html/php
<p><a rel="nofollow" class="external free" href="http://www.example.com/">http://www.example.com/</a><b>html</b>
</p>
-!!end
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.example.com/" data-parsoid='{"stx":"url"}'>http://www.example.com/</a><b data-parsoid='{"stx":"html"}'>html</b></p>
+!! end
!! test
BUG 289: ">"-token in bracketed URL
@@ -4410,7 +4861,7 @@ http://www.example.com/?title=AT%26T
<p><a rel="mw:ExtLink" href="http://www.example.com/?title=AT%26T">http://www.example.com/?title=AT%26T</a></p>
!! end
-# According to http://dev.w3.org/html5/spec/Overview.html#parsing-urls a plain
+# According to http://www.w3.org/TR/2011/WD-html5-20110525/Overview.html#parsing-urls a plain
# % is actually legal in HTML5. Any change in output would need testing though.
!! test
Bug 4781, 5267: %25 in URL
@@ -4751,7 +5202,7 @@ Parenthesis in external links, w/ transclusion or comment
</p><p>(<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
</p>
!! html/parsoid
-<p>(<a data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[20,31,null,null]}\">hi&lt;/span>"}]]}' typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}'>http://example.com/hi</a>)</p>
+<p>(<a typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[20,31,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">hi&lt;/span>"}]]}'>http://example.com/hi</a>)</p>
<p>(<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url","a":{"href":"http://example.com"},"sa":{"href":"http://example.com&lt;!-- hi -->"}}'>http://example.com</a>)</p>
!! end
@@ -5129,8 +5580,8 @@ Accept "!!" in table data
</td></tr></table>
!! html/parsoid
-<table data-parsoid='{}'>
-<tbody data-parsoid='{}'><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'> Foo!! </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'></td></tr>
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'> Foo!! </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'></td></tr>
</tbody></table>
!! end
@@ -5295,7 +5746,6 @@ Invalid attributes in table cell (bug 1830)
!! end
-
# The "|}" to close the table is missing from the input, so parsoid's
# *2wt modes will fail.
!! test
@@ -5320,6 +5770,25 @@ parsoid=wt2html,html2html
<td><a rel="mw:ExtLink" href="ftp://|x||"></a>" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
!! end
+# FIXME: The php output is broken.
+!! test
+! and || in td attributes should not be parsed as <th>/<td>
+!! wikitext
+{|
+| style="color: red !important;" data-contrived="put this here ||" | foo
+|}
+!! html/php
+<table>
+<tr>
+<td> style="color: red !important;" data-contrived="put this here </td>
+<td> foo
+</td></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr><td style="color: red !important;" data-contrived="put this here ||" data-parsoid='{"autoInsertedEnd":true}'> foo</td></tr>
+</tbody></table>
+!! end
!! test
Indented table markup mixed with indented pre content (proposed in bug 6200)
@@ -5344,50 +5813,83 @@ Indented table markup mixed with indented pre content (proposed in bug 6200)
!! end
!! test
-Template-generated table cell attributes and cell content
+1. Template-generated table cell attributes and cell content
!! wikitext
{|
|{{table_attribs}}
| {{table_attribs}}
+|| {{table_attribs_5}}
+| <!--foo--> <!--bar--> <!--baz--> {{table_attribs}}
+|align=center {{table_attribs}}
+| <!--foo--> align=center <!--bar--> {{table_attribs}}
|}
!! html
<table>
<tr>
-<td style="color: red"> Foo
+<td style="color:red;">Foo
</td>
-<td style="color: red"> Foo
+<td style="color:red;">Foo
+</td>
+<td> style="color:red;"</td>
+<td>Bar
+</td>
+<td style="color:red;">Foo
+</td>
+<td align="center" style="color:red;">Foo
+</td>
+<td align="center" style="color:red;">Foo
</td></tr></table>
!! end
!! test
-Template-generated table cell attributes and cell content (2)
+2. Template-generated table cell attributes and cell content
!! wikitext
{|
-|align=center {{table_attribs}}
+|{{table_attribs_2}}
|}
-!! html
+!! html/php
<table>
<tr>
-<td align="center" style="color: red"> Foo
+<td style="color:red;">Foo
+</td>
+<td>Bar</td>
+<td>Baz
</td></tr></table>
+!! html/parsoid
+<table>
+<tbody><tr><td about="#mwt1" typeof="mw:Transclusion" style="color:red;" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_2","href":"./Template:Table_attribs_2"},"params":{},"i":0}}]}'>Foo</td>
+<td about="#mwt1">Bar</td><td about="#mwt1">Baz</td></tr>
+</tbody></table>
!! end
!! test
-Template-generated table cell attributes and cell content (3)
+3. Template-generated table cell attributes and cell content
!! wikitext
{|
+!align=center {{table_header_cells}}
+|-
|align=center {{table_cells}}
|}
-!! html
+!! html/php
<table>
<tr>
-<td align="center" style="color: red"> Foo </td>
-<td> Bar </td>
-<td> Baz
+<th align="center" style="color:red;">Foo</th>
+<th style="color:red;"><i>Bar</i></th>
+<th style="color:brown;"><i>Foo</i> and Baz
+</th></tr>
+<tr>
+<td align="center" style="color:red;">Foo</td>
+<td style="color:red;"><i>Bar</i></td>
+<td style="color:brown;"><i>Foo</i> and Baz
</td></tr></table>
+!! html/parsoid
+<table>
+<tbody><tr><th align="center" style="color:red;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["!align=center ",{"template":{"target":{"wt":"table_header_cells","href":"./Template:Table_header_cells"},"params":{},"i":0}}]}'>Foo</th><th about="#mwt1" style="color:red;"><i about="#mwt1">Bar</i></th><th about="#mwt1" style="color:brown;"><i about="#mwt1">Foo</i> and Baz</th></tr><tr>
+<td align="center" style="color:red;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|align=center ",{"template":{"target":{"wt":"table_cells","href":"./Template:Table_cells"},"params":{},"i":0}}]}'>Foo</td><td about="#mwt1" style="color:red;"><i about="#mwt1">Bar</i></td><td about="#mwt1" style="color:brown;"><i about="#mwt1">Foo</i> and Baz</td></tr>
+</tbody></table>
!! end
!! test
@@ -5450,7 +5952,7 @@ Wikitext table with a lot of comments
<!-- c0 -->
| foo
<!-- c1 -->
-|- <!-- c2 -->
+|-<!-- c2 -->
<!-- c3 -->
|<!-- c4 -->
<!-- c5 -->
@@ -5467,6 +5969,26 @@ Wikitext table with a lot of comments
!! end
!! test
+Wikitext table comments represented in parsoid dom
+!! wikitext
+{|<!--c1--><!--c2-->
+|-<!--c3-->
+| x
+|}
+!! html/php+tidy
+<table>
+<tr>
+<td>x</td>
+</tr>
+</table>
+!! html/parsoid
+<table><!--c1--><!--c2-->
+<tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'><!--c3-->
+<td data-parsoid='{"autoInsertedEnd":true}'> x</td></tr>
+</tbody></table>
+!! end
+
+!! test
Wikitext table with double-line table cell
!! wikitext
{|
@@ -5548,6 +6070,68 @@ Build table with {{!}}
!! end
+!! test
+Build table with pipe as data
+!! wikitext
+{| class="wikitable"
+! header
+! second header
+|- style="color:red;"
+| data || style="color:red;" | second data
+|-
+| style="color:red;" | data with | || style="color:red;" | second data with |
+|-
+|| data with | ||| second data with |
+|}
+!! html
+<table class="wikitable">
+<tr>
+<th> header
+</th>
+<th> second header
+</th></tr>
+<tr style="color:red;">
+<td> data </td>
+<td style="color:red;"> second data
+</td></tr>
+<tr>
+<td style="color:red;"> data with | </td>
+<td style="color:red;"> second data with |
+</td></tr>
+<tr>
+<td> data with | </td>
+<td> second data with |
+</td></tr></table>
+
+!! end
+
+!! test
+Build table with wikilink
+!! wikitext
+{| class="wikitable"
+! header || second header
+|- style="color:red;"
+| data [[Main Page|linktext]] || second data [[Main Page|linktext]]
+|-
+| data || second data [[Main Page|link|text with pipe]]
+|}
+!! html
+<table class="wikitable">
+<tr>
+<th> header </th>
+<th> second header
+</th></tr>
+<tr style="color:red;">
+<td> data <a href="/wiki/Main_Page" title="Main Page">linktext</a> </td>
+<td> second data <a href="/wiki/Main_Page" title="Main Page">linktext</a>
+</td></tr>
+<tr>
+<td> data </td>
+<td> second data <a href="/wiki/Main_Page" title="Main Page">link|text with pipe</a>
+</td></tr></table>
+
+!! end
+
# The expected HTML structure in this test is debatable. The PHP parser does
# not parse this kind of table at all. The main focus for Parsoid is on
# round-tripping, so this output is ok for now. TODO: revisit!
@@ -5574,7 +6158,7 @@ Wikitext table with html-syntax row
!! test
Implicit <td> after a |-
!! options
-parsoid=wt2html,wt2wt
+parsoid=wt2html,html2html
!! wikitext
{|
|-
@@ -5598,7 +6182,7 @@ a
!! test
<pre> tags should be recognized in an explicit <td> context, but not in an implicit <td> context
!! options
-parsoid=wt2html,wt2wt
+parsoid=wt2html,html2html
!! wikitext
{|
|-
@@ -5638,10 +6222,11 @@ a
!! end
# PHP + Tidy strips the list out of the table; Parsoid wraps it.
+# Parsoid generates the missing <td>, so wt2wt won't succeed.
!! test
Lists should be recognized in an implicit <td> context
!! options
-parsoid=wt2html,wt2wt
+parsoid=wt2html,html2html
!! wikitext
{|
|-
@@ -5668,6 +6253,28 @@ parsoid=wt2html,wt2wt
!! end
!! test
+Table cells not properly parsed in an implicit-td context
+!! wikitext
+{|
+|-
+{{table_attribs_4}} || a || b
+|}
+!! html/php+tidy
+<table>
+<tr>
+<td style="background-color:#DC241f;" width="10px"></td>
+<td>a</td>
+<td>b</td>
+</tr>
+</table>
+!! html/parsoid
+<table>
+<tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
+<td style="background-color:#DC241f;" width="10px" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":["",{"template":{"target":{"wt":"table_attribs_4","href":"./Template:Table_attribs_4"},"params":{},"i":0}}," "]}'> </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'> a </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'> b</td></tr>
+</tbody></table>
+!! end
+
+!! test
Parsoid: Round-trip tables directly followed by content (bug 51219)
!! options
parsoid=wt2html,wt2wt
@@ -5679,20 +6286,30 @@ parsoid=wt2html,wt2wt
{|
|baz
|}<b>quux</b>
-!! html
-<table><tbody>
+!! html+tidy
+<table>
<tr>
-<td>foo</td></tr></tbody></table> bar
+<td>foo</td>
+</tr>
+</table>
+<p>bar</p>
<table>
-<tbody>
<tr>
-<td>baz</td></tr></tbody></table><b>quux</b>
+<td>baz</td>
+</tr>
+</table>
+<p><b>quux</b></p>
!! end
!! test
Parsoid: Default to a newline after tables in new content (bug 51219)
!! options
parsoid=html2wt
+!! html
+<table><tbody>
+<tr><td>foo</td></tr></tbody></table> bar
+<table><tbody>
+<tr><td>baz</td></tr></tbody></table><b>quux</b>
!! wikitext
{|
|foo
@@ -5702,23 +6319,18 @@ parsoid=html2wt
|baz
|}
'''quux'''
-!! html
-<table><tbody>
-<tr><td>foo</td></tr></tbody></table> bar
-<table><tbody>
-<tr><td>baz</td></tr></tbody></table><b>quux</b>
!! end
!! test
Parsoid: newline inducing block nodes don't suppress <nowiki>
!! options
parsoid=html2wt
+!! html
+ a<h1>foo</h1>
!! wikitext
<nowiki> </nowiki>a
= foo =
-!! html
- a<h1>foo</h1>
!! end
!! test
@@ -5823,6 +6435,27 @@ parsoid=html2wt
|}
!! end
+!!test
+Testing serialization after deletion of table cells
+!!options
+parsoid={
+ "modes": ["wt2wt", "selser"],
+ "changes": [
+ ["#x", "remove"]
+ ]
+}
+!!wikitext
+{|
+!h1 !!h2 !!h3
+| id="x" |c1 {{!}}{{!}}{{!}}c2 |||c3
+|}
+!! wikitext/edited
+{|
+!h1 !!h2 !!h3
+|c2 |||c3
+|}
+!!end
+
###
### Internal links
###
@@ -5953,9 +6586,11 @@ Bug 43661: Piped links with identical prefixes
Link with HTML entity in suffix / tail
!! wikitext
[[Main Page]]&quot;, [[Main Page]]&#97;
-!! html
+!! html/php
<p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>&quot;, <a href="/wiki/Main_Page" title="Main Page">Main Page</a>&#97;
</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;quot;","srcContent":"\""}'>"</span>, <a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#97;","srcContent":"a"}'>a</span></p>
!! end
!! test
@@ -5990,10 +6625,13 @@ Piped link with extlink-like text
!! wikitext
[[Main Page|[bar]]]
[[Main Page|This is a [bar]]]
-!! html
+!! html/php
<p><a href="/wiki/Main_Page" title="Main Page">[bar]</a>
<a href="/wiki/Main_Page" title="Main Page">This is a [bar]</a>
</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"piped"}'>[bar]</a>
+<a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"piped"}'>This is a [bar]</a></p>
!! end
!! test
@@ -6058,11 +6696,10 @@ Namespace takes precedence over interwiki link (bug 51680)
Link to namespace preferred over interwiki with correct rel attribute
!! options
parsoid=html2wt,html2html
+!! html
+<p><a rel="mw:WikiLink" href="./MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a></p>
!! wikitext
[[MemoryAlpha:AlphaTest]]
-!! html
-<p><a rel="mw:WikiLink" href="./MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a>
-</p>
!! end
!! test
@@ -6213,7 +6850,7 @@ Link containing double-single-quotes '' in text embedded in italics (bug 4598 sa
!! test
Link with double quotes in title part (literal) and alternate part (interpreted)
!! wikitext
-[[File:Denys Savchenko ''Pentecoste''.jpg]]
+[[File:Denys_Savchenko_''Pentecoste''.jpg]]
[[''Pentecoste'']]
@@ -6227,7 +6864,7 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
</p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)"><i>Pentecoste</i></a>
</p>
!! html/parsoid
-<meta typeof="mw:Placeholder"/>
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:Denys_Savchenko_''Pentecoste''.jpg"><img resource="./File:Denys_Savchenko_''Pentecoste''.jpg" src="./Special:FilePath/Denys_Savchenko_''Pentecoste''.jpg" height="220" width="220"/></a></span></p>
<p><a rel="mw:WikiLink" href="''Pentecoste''" title="''Pentecoste''">''Pentecoste''</a></p>
<p><a rel="mw:WikiLink" href="''Pentecoste''" title="''Pentecoste''">Pentecoste</a></p>
<p><a rel="mw:WikiLink" href="''Pentecoste''" title="''Pentecoste''"><i>Pentecoste</i></a></p>
@@ -6237,15 +6874,20 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
Broken image links with HTML captions (bug 39700)
!! wikitext
[[File:Nonexistent|<script></script>]]
-[[File:Nonexistent|100px|<script></script>]]
+[[File:Nonexistent|100x100px|<script></script>]]
[[File:Nonexistent|&lt;]]
[[File:Nonexistent|a<i>b</i>c]]
-!! html
+!! html/php
<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;script&gt;&lt;/script&gt;</a>
<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">&lt;</a>
<a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">abc</a>
</p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&lt;script>&lt;/script>"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220"/></a></span>
+<span typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&lt;script>&lt;/script>"}'><a href="./File:Nonexistent" data-parsoid='{"a":{"href":"./File:Nonexistent"},"sa":{}}'><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="100" width="100"/></a></span>
+<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&amp;lt;"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220"/></a></span>
+<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"a&lt;i>b&lt;/i>c"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220"/></a></span></p>
!! end
!! test
@@ -6483,7 +7125,7 @@ title=[[User:test/123]]
<p><a href="#a">b</a>
</p>
!! html/parsoid
-<p data-parsoid='{}'><a rel="mw:WikiLink" href="../User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"../User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
+<p><a rel="mw:WikiLink" href="../User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"../User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
!! end
!! test
@@ -6503,7 +7145,7 @@ parsoid
!! wikitext
{{echo|Some [[Fool]]}}s
!! html
-<p data-parsoid='{}'><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
!! end
!! test
@@ -6513,7 +7155,7 @@ parsoid
!! wikitext
{{echo|Some [[Fool]]s are '''bold and foolish'''}}
!! html
-<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some <a rel="mw:WikiLink" href="./Fool" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b data-parsoid="{}">bold and foolish</b></p>
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some <a rel="mw:WikiLink" href="./Fool" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b>bold and foolish</b></p>
!! end
!! article
@@ -6562,10 +7204,10 @@ mótmælenda[[söfnuður|söfnuðir]]xxx
Parsoid link trail escaping
!! options
parsoid=html2wt,html2html
-!! wikitext
-[[apple]]<nowiki/>s
!! html
<p><a rel="mw:WikiLink" href="Apple" title="Apple">apple</a>s</p>
+!! wikitext
+[[apple]]<nowiki/>s
!! end
!! test
@@ -6573,10 +7215,10 @@ Parsoid link prefix escaping
!! options
language=is
parsoid=html2wt,html2html
-!! wikitext
-Aðrir mótmælenda<nowiki/>[[söfnuður]]
!! html
<p>Aðrir mótmælenda<a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður">söfnuður</a></p>
+!! wikitext
+Aðrir mótmælenda<nowiki/>[[söfnuður]]
!! end
!! test
@@ -6624,20 +7266,28 @@ Link with angle bracket after anchor
!! test
Inline interwiki link
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
[[MeatBall:SoftSecurity]]
-!! html
+!! html/php
<p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a>
</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a></p>
!! end
!! test
Inline interwiki link with empty title (bug 2372)
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
[[MeatBall:]]
-!! html
+!! html/php
<p><a href="http://www.usemod.com/cgi-bin/mb.pl" class="extiw" title="meatball:">MeatBall:</a>
</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?" title="meatball:">MeatBall:</a></p>
!! end
!! test
@@ -6666,6 +7316,10 @@ Interwiki link with fragment (bug 2130)
!! end
# Ideally the wikipedia: prefix here should be proto-relative too
+# [CSA]: this is kind of a bogus test, as the PHP parser test doesn't
+# define the 'en' prefix, and originally the test used 'wikipedia',
+# which isn't a localinterwiki prefix hence the links to the 'en:Foo'
+# article.
!! test
Different interwiki prefixes mapping to the same URL
!! wikitext
@@ -6683,19 +7337,19 @@ Different interwiki prefixes mapping to the same URL
[[ wikiPEdia :Foo]]
!! html/parsoid
-<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}'>en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}' title="en:Foo">en:Foo</a></p>
-<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}'>Foo</a></p>
+<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}' title="en:Foo">Foo</a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true}'>wikipedia:Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true}' title="wikipedia:Foo">wikipedia:Foo</a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":":wikipedia:Foo"},"isIW":true}'>Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":":wikipedia:Foo"},"isIW":true}' title="wikipedia:Foo">Foo</a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":"wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":"wikipedia:en:Foo"},"isIW":true}' title="wikipedia:en:Foo">wikipedia:en:Foo</a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":":wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":":wikipedia:en:Foo"},"isIW":true}' title="wikipedia:en:Foo">wikipedia:en:Foo</a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":" wikiPEdia :Foo"},"isIW":true}'> wikiPEdia :Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":" wikiPEdia :Foo"},"isIW":true}' title="wikipedia:Foo"> wikiPEdia :Foo</a></p>
!! end
!! test
@@ -6707,60 +7361,97 @@ Interwiki links that cannot be represented in wiki syntax
[http://de.wikipedia.org/wiki/Foo?action=history has query]
[http://de.wikipedia.org/wiki/#foo is just fragment]
+!! html/php
+<p><a href="http://www.usemod.com/cgi-bin/mb.pl?ok" class="extiw" title="meatball:ok">meatball:ok</a>
+<a href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo" class="extiw" title="meatball:ok">ok with fragment</a>
+<a href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well%3F" class="extiw" title="meatball:ok as well?">ok ending with ? mark</a>
+<a rel="nofollow" class="external text" href="http://de.wikipedia.org/wiki/Foo?action=history">has query</a>
+<a rel="nofollow" class="external text" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a>
+</p>
!! html/parsoid
-<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok">meatball:ok</a>
-<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo">ok with fragment</a>
-<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well?">ok ending with ? mark</a>
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok" title="meatball:ok">meatball:ok</a>
+<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo" title="meatball:ok">ok with fragment</a>
+<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well?" title="meatball:ok as well?">ok ending with ? mark</a>
<a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/Foo?action=history">has query</a>
<a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a></p>
!! end
!! test
Interwiki links: trail
-!! options
-parsoid
!! wikitext
[[wikipedia:Foo|Ba]]r
-!! html
-<p data-parsoid='{}'><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true,"tail":"r"}'>Bar</a></p>
+!! html/php
+<p><a href="http://en.wikipedia.org/wiki/Foo" class="extiw" title="wikipedia:Foo">Bar</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true,"tail":"r"}' title="wikipedia:Foo">Bar</a></p>
!! end
!! test
Local interwiki link
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
[[local:Template:Foo]]
-!! html
+!! html/php
<p><a href="/wiki/Template:Foo" title="Template:Foo">local:Template:Foo</a>
</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Template:Foo" title="Template:Foo">local:Template:Foo</a></p>
!! end
+# Parsoid does not mark self-links, by design.
!! test
Local interwiki link: self-link to current page
!! options
title=[[Main Page]]
+parsoid=wt2html,wt2wt,html2html
!! wikitext
[[local:Main Page]]
-!! html
+!! html/php
<p><strong class="selflink">local:Main Page</strong>
</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">local:Main Page</a></p>
!! end
!! test
Local interwiki link: prefix only (bug 64167)
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
[[local:]]
-!! html
+!! html/php
<p><a href="/wiki/Main_Page" title="Main Page">local:</a>
</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">local:</a></p>
!! end
!! test
Local interwiki link: with additional interwiki prefix (bug 61357)
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
[[local:meatball:Hello]]
-!! html
+!! html/php
<p><a href="http://www.usemod.com/cgi-bin/mb.pl?Hello" class="extiw" title="meatball:Hello">local:meatball:Hello</a>
</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?Hello" title="meatball:Hello">local:meatball:Hello</a></p>
+!! end
+
+!! test
+Multiple local interwiki link prefixes
+!! wikitext
+[[local:local:local:local:mi:local:Foo]]
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">local:local:local:local:mi:local:Foo</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo">local:local:local:local:mi:local:Foo</a></p>
!! end
###
@@ -6770,6 +7461,8 @@ Local interwiki link: with additional interwiki prefix (bug 61357)
!! test
Interlanguage link
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
Blah blah blah
[[zh:Chinese]]
@@ -6777,12 +7470,14 @@ Blah blah blah
<p>Blah blah blah
</p>
!! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
!! end
!! test
Interlanguage link with spacing
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
Blah blah blah
[[ zh : Chinese ]]
@@ -6790,12 +7485,14 @@ Blah blah blah
<p>Blah blah blah
</p>
!! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
!! end
!! test
Double interlanguage link
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
Blah blah blah
[[es:Spanish]]
@@ -6804,24 +7501,30 @@ Blah blah blah
<p>Blah blah blah
</p>
!! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish"/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish"/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
!! end
!! test
Interlanguage link variations
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
Blah blah blah
[[ es :Spanish]]
[[ ZH :Chinese]]
+[[es:Foo_bar]]
+[[es:Foo bar]]
!! html/php
<p>Blah blah blah
</p>
!! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish" data-parsoid='{"stx":"simple","a":{"href":"//es.wikipedia.org/wiki/Spanish"},"sa":{"href":" es :Spanish"}}'/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese" data-parsoid='{"stx":"simple","a":{"href":"//zh.wikipedia.org/wiki/Chinese"},"sa":{"href":" ZH :Chinese"}}'/>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish" />
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese" />
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo_bar" />
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo_bar" />
!! end
!! test
@@ -6835,8 +7538,8 @@ Blah blah blah
<p>Blah blah blah
</p>
!! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
!! end
!! test
@@ -6851,9 +7554,9 @@ Blah blah blah
<p>Blah blah blah
</p>
!! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish"/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish"/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
!! end
!! test
@@ -6865,8 +7568,8 @@ Blah blah blah
<p>Blah blah blah
</p>
!! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" title="Multilingual" href="//wikisource.org/wiki/Article"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" title="Multilingual" href="http://wikisource.org/wiki/Article"/>
!! end
!! test
@@ -6884,84 +7587,119 @@ language=ln
Parsoid bug 53221: Wikilinks should be properly entity-escaped
!! options
parsoid=html2wt
+!! html
+<p>He&amp;nbsp;llo <a href="Foo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
+<p>He&amp;nbsp;llo <a href="He&amp;nbsp;llo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
!! wikitext
He&amp;nbsp;llo [[Foo|He&amp;nbsp;llo]]
He&amp;nbsp;llo [[He&amp;nbsp;llo]]
-!! html
-<p>He&amp;nbsp;llo <a href="Foo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
-<p>He&amp;nbsp;llo <a href="He&amp;nbsp;llo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
!! end
!! test
Parsoid: handle constructor well
-!! options
-parsoid
!! wikitext
[[constructor]]
[[constructor:foo]]
-!! html
+!! html/php
+<p><a href="/index.php?title=Constructor&amp;action=edit&amp;redlink=1" class="new" title="Constructor (page does not exist)">constructor</a>
+</p><p><a href="/index.php?title=Constructor:foo&amp;action=edit&amp;redlink=1" class="new" title="Constructor:foo (page does not exist)">constructor:foo</a>
+</p>
+!! html/parsoid
<p><a rel="mw:WikiLink" href="./Constructor" title="Constructor" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Constructor&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor&quot;}}">constructor</a></p>
<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Foo&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor:foo&quot;}}">constructor:foo</a></p>
!! end
+!! article
+ko:
+!! text
+Test.
+!! endarticle
+
+# Note that `ko` isn't a known interlanguage prefix
!! test
Parsoid: recognize interlanguage links without a target page
!! options
-parsoid
+ill
!! wikitext
+[[es:]]
+
[[ko:]]
-!! html
-<p><link rel="mw:PageProp/Language" href="http://ko.wikipedia.org/wiki/"></p>
+!! html/php
+es:
+!! html/parsoid
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/"/>
+
+<p><a rel="mw:WikiLink" href="./Ko:" title="Ko:">ko:</a></p>
!! end
+# Note that `ko` isn't a known interwiki prefix
!! test
Parsoid: recognize interwiki links without a target page
!! options
-parsoid
+parsoid=wt2html,wt2wt,html2html
!! wikitext
+[[:es:]]
+
[[:ko:]]
-!! html
-<p><a rel="mw:ExtLink" href="//ko.wikipedia.org/wiki/">ko:</a></p>
+!! html/php
+<p><a href="http://es.wikipedia.org/wiki/" class="extiw" title="es:">es:</a>
+</p><p><a href="/wiki/Ko:" title="Ko:">ko:</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/" title="es:">es:</a></p>
+<p><a rel="mw:WikiLink" href="./Ko:" title="Ko:">ko:</a></p>
!! end
!! test
-Parsoid: Bug #45209, handle interwiki links pointing to the current wiki as plain wiki links
-!! options
-parsoid
+Handle interwiki links pointing to the current wiki as plain wiki links (bug 45209)
!! wikitext
-[[en:Foo]]
-!! html
-<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"en:Foo"}}'>Foo</a></p>
+[[mi:Foo]]
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">mi:Foo</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"mi:Foo"}}'>mi:Foo</a></p>
!! end
!! test
Interlanguage link with preceding local interwiki link (bug 68085)
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
Blah blah blah
[[local:es:Spanish]]
-!! html
+!! html/php
<p>Blah blah blah
<a href="http://es.wikipedia.org/wiki/Spanish" class="extiw" title="es:Spanish">local:es:Spanish</a>
</p>
+!! html/parsoid
+<p>Blah blah blah
+<a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Spanish" title="es:Spanish">local:es:Spanish</a></p>
!! end
!! test
Looks like an interlanguage link, but is actually a local interwiki
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
Blah blah blah
[[mi:Template:Foo]]
-!! html
+!! html/php
<p>Blah blah blah
<a href="/wiki/Template:Foo" title="Template:Foo">mi:Template:Foo</a>
</p>
+!! html/parsoid
+<p>Blah blah blah
+<a rel="mw:WikiLink" href="Template:Foo" title="Template:Foo">mi:Template:Foo</a></p>
!! end
###
### Redirects, Parsoid-only
###
+
!! test
1. Simple redirect to page
!! options
@@ -6972,17 +7710,20 @@ parsoid
<link rel="mw:PageProp/redirect" href="./Main_Page">
!! end
-# Only wt2html and html2html since "Main_Page" will serialize to "Main Page"
!! test
2. Other redirect variants
-!! options
-parsoid=wt2html,wt2wt
!! wikitext
#REDIRECT [[Main_Page]]
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Main_Page" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./Main_Page"},"sa":{"href":"Main_Page"}}'/>
+!! end
+
+!! test
+3. Other redirect variants
+!! wikitext
#REDIRECT [[<nowiki>[[Bar]]</nowiki>]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Main_Page">
-<link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./%5B%5BBar%5D%5D"},"sa":{"href":"&lt;nowiki>[[Bar]]&lt;/nowiki>"}}'/>
!! end
!! test
@@ -7039,7 +7780,7 @@ parsoid=wt2html
!! test
Redirect to category
!! options
-parsoid=wt2html
+parsoid=wt2wt,wt2html
!! wikitext
#REDIRECT [[Category:Foo]]
!! html
@@ -7059,11 +7800,11 @@ parsoid=wt2html
!! test
Redirect to category page
!! options
-parsoid=wt2html,html2html
+parsoid
!! wikitext
#REDIRECT [[:Category:Foo]]
!! html
-<p><a rel="mw:WikiLink" href="Category:Foo" title="Category:Foo">Category:Foo</a></p>
+<link rel="mw:PageProp/redirect" href="Category:Foo" title="Category:Foo"/>
!! end
!! test
@@ -7093,7 +7834,7 @@ parsoid
!! wikitext
#REDIRECT [[en:File:Wiki.png]]
!! html
-<link rel="mw:PageProp/redirect" href="File:Wiki.png">
+<link rel="mw:PageProp/redirect" href="./File:Wiki.png">
!! end
!! test
@@ -7103,7 +7844,7 @@ parsoid
!! wikitext
#REDIRECT [[meatball:File:Wiki.png]]
!! html
-<link rel="mw:PageProp/redirect" href="File:Wiki.png">
+<link rel="mw:PageProp/redirect" href="./File:Wiki.png">
!! end
!! test
@@ -7118,14 +7859,26 @@ language=is
!! end
!! test
+Redirect syntax under text isn't considered a redirect
+!! wikitext
+some text
+#redirect [[Main Page]]
+!! html/parsoid
+<p>some text</p>
+<ol data-parsoid='{}'><li data-parsoid='{}'>redirect <a rel="mw:WikiLink" href="./Main_Page" title="Main Page" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page"},"sa":{"href":"Main Page"}}'>Main Page</a></li></ol>
+!! end
+
+# FIXME: Should hoist the redirect to the top of the page and ensure there
+# is only one.
+!! test
New redirect
!! options
parsoid=html2wt
+!! html
+<p>Foo<link rel="mw:PageProp/redirect" href="./Foo"></p>
!! wikitext
Foo
#REDIRECT [[Foo]]
-!! html
-<p>Foo<link rel="mw:PageProp/redirect" href="./Foo"></p>
!! end
##
@@ -7151,9 +7904,6 @@ Broken br tag sanitization
!! end
# TODO: Fix html2html mode (bug 51055)!
-# This </br> handling was added as part of bug 50831; but it
-# differs from how PHP+tidy handles this. We should investigate
-# this.
!! test
Parsoid: Broken br tag recognition
!! options
@@ -7162,12 +7912,9 @@ parsoid=wt2html
</br>
<br/ >
-!! html/php+tidy
-<p>&lt;/br&gt;</p>
+!! html+tidy
+<p><br /></p>
<p><br /></p>
-!! html/parsoid
-<p><br></p>
-<p><br/></p>
!! end
!! test
@@ -7192,6 +7939,8 @@ Failing to transform badly formed HTML into correct XHTML
</p>
!!end
+## FIXME: Is Parsoid's acceptance of self-closing html-tags
+## a feature or a bug? See https://phabricator.wikimedia.org/T76962
!! test
Handling html with a div self-closing tag
!! wikitext
@@ -7201,7 +7950,7 @@ Handling html with a div self-closing tag
<div title=bar />
<div title=bar/>
<div title=bar/ >
-!! html
+!! html/php
<p>&lt;div title /&gt;
&lt;div title/&gt;
</p>
@@ -7212,6 +7961,13 @@ Handling html with a div self-closing tag
<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>
+<div title="" data-parsoid='{"stx":"html","selfClose":true,"brokenHTMLTag":true}'></div>
+<div title="bar" data-parsoid='{"stx":"html","selfClose":true}'></div>
+<div title="bar" data-parsoid='{"stx":"html","selfClose":true}'></div>
+<div title="bar/" data-parsoid='{"stx":"html","autoInsertedEnd":true}'></div>
!! end
!! test
@@ -7234,7 +7990,7 @@ Handling html with a br self-closing tag
!! html/parsoid
<p><br title="" />
<br title="" />
-<br />
+<br title="" />
<br title="bar" />
<br title="bar" />
<br title="bar/" />
@@ -7248,11 +8004,12 @@ Horizontal ruler (should it add that extra space?)
<hr >
foo <hr
> bar
-!! html
+!! html+tidy
<hr />
<hr />
-foo <hr /> bar
-
+<p>foo</p>
+<hr />
+<p>bar</p>
!! end
!! test
@@ -7462,6 +8219,16 @@ Nested lists 8 (multiple nesting transitions)
!! end
!! test
+Nested lists 9 (extension interaction)
+!! options
+parsoid
+!! wikitext
+*<references />
+!! html/parsoid
+<ul><li data-parsoid='{}'><ol class="references" typeof="mw:Extension/references" about="#mwt2" data-parsoid='{}' data-mw='{"name":"references","attrs":{}}'></ol></li></ul>
+!! end
+
+!! test
1. Lists with start-of-line-transparent tokens before bullets: Comments
!! wikitext
*foo
@@ -7718,6 +8485,8 @@ Unbalanced closing non-block tags don't break a list
!! test
Unclosed formatting tags that straddle lists are closed and reopened
(php parser relies on Tidy to fix up)
+!! options
+parsoid=wt2html,wt2wt,html2html
!! wikitext
# <s> a
# b </s>
@@ -7727,19 +8496,13 @@ Unclosed formatting tags that straddle lists are closed and reopened
<li><s>b</s></li>
</ol>
!! html/parsoid
-<ol>
-<li> <s> a </s>
-</li>
-<li> <s> b </s>
-</li>
-</ol>
+<ol><li> <s> a</s></li>
+<li><s> b </s></li></ol>
!! end
-# Parsoid fails this test, but it might be tricky to support properly.
# See bug 68395.
!!test
-List embedded in a non-block tag
-(Ugly Parsoid output -- worth fixing; PHP parser relies on Tidy)
+1. List embedded in a formatting tag
!! wikitext
<small>
* foo
@@ -7756,6 +8519,49 @@ List embedded in a non-block tag
</small>
!!end
+## Ugly Parsoid output here
+## Not sure what the right output is.
+!!test
+2. List embedded in a formatting tag
+!! wikitext
+<small>
+*a
+*b</small>
+!! html/php+tidy
+<ul>
+<li><small>a</small></li>
+<li><small>b</small></li>
+</ul>
+!! html/parsoid
+<small></small>
+<ul><small>
+<li>a</li>
+</small>
+<li><small>b</small></li>
+</ul>
+!!end
+
+# Ugly Parsoid and PHP parser output here
+# Not sure if we want to make this a test!
+#
+## !!test
+## 3. Unclosed formatting tags in list elements
+## !! wikitext
+## *<small>a
+## *<small>b
+## !! html/php+tidy
+## <ul>
+## <li><small>a</small></li>
+## <li><small><small>b</small></small></li>
+## </ul>
+## !! html/parsoid
+## <ul>
+## <li><small>a</small></li>
+## <small>
+## <li><small>b</small></li>
+## </small></ul>
+## !!end
+
# This is a bug in the PHP parser + tidy combination.
# (The </tr> tag gets parsed as text and html-escaped by PHP,
# and then fostered out of the table by tidy.)
@@ -7769,14 +8575,7 @@ parsoid=wt2html,wt2wt
<td>foo</td>
</tr>
</table>
-!! html/php+tidy
-<p>&lt;/tr&gt;</p>
-<table>
-<tr>
-<td>foo</td>
-</tr>
-</table>
-!! html/parsoid
+!! html+tidy
<table>
<tr>
<td>foo</td>
@@ -8360,6 +9159,23 @@ Aoeu
</p>
!! end
+# From plwiki:PLOS_ONE
+!! test
+Parsoid: Page property magic word with magic word contents
+!! wikitext
+{{DISPLAYTITLE:''{{PAGENAME}}''}}
+!! html/parsoid
+<meta property="mw:PageProp/displaytitle" content="Main Page" about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"content"},{"html":"&lt;i data-parsoid=\"{&amp;quot;dsr&amp;quot;:[15,31,2,2]}\">&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[]],&amp;quot;dsr&amp;quot;:[17,29,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;PAGENAME&amp;quot;,&amp;quot;function&amp;quot;:&amp;quot;pagename&amp;quot;},&amp;quot;params&amp;quot;:{},&amp;quot;i&amp;quot;:0}}]}\">Main Page&lt;/span>&lt;/i>"}]]}'/>
+!! end
+
+!! test
+Parsoid: Template-generated DISPLAYTITLE
+!! wikitext
+{{{{echo|DISPLAYTITLE}}:Foo}}
+!! html/parsoid
+<meta property="mw:PageProp/displaytitle" content="Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"dsr":[0,29,null,null],"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"{{echo|DISPLAYTITLE}}:Foo"},"params":{},"i":0}}]}'/>
+!! end
+
!! test
Namespace 1 {{ns:1}}
!! wikitext
@@ -8490,10 +9306,10 @@ hi+world%3F%21
Magic Word: prioritize type info over data-parsoid
!! options
parsoid=html2wt
+!! html
+<meta property="mw:PageProp/forcetoc" data-parsoid='{"magicSrc":"__NOTOC__"}'/>
!! wikitext
__FORCETOC__
-!! html
-<meta property="mw:PageProp/forcetoc" data-parsoid='{"src":"__NOTOC__","magicSrc":"__NOTOC__"}'/>
!! end
!! test
@@ -8516,7 +9332,7 @@ language=de
!! wikitext
__NOEDITSECTION__
!! html
-<meta property="mw:PageProp/noeditsection" data-parsoid='{"src":"__NOEDITSECTION__","magicSrc":"__NOEDITSECTION__"}'/>
+<meta property="mw:PageProp/noeditsection" data-parsoid='{"magicSrc":"__NOEDITSECTION__"}'/>
!! end
###
@@ -8541,6 +9357,28 @@ RFC 822
!! end
!! test
+Magic links: RFC (bug 65278)
+!! wikitext
+This is RFC 822 but thisRFC 822 is not RFC 822linked.
+!! html
+<p>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a> but thisRFC 822 is not RFC 822linked.
+</p>
+!! end
+
+!! test
+Magic links: RFC (w/ non-newline whitespace, bug 28950/29025)
+!! wikitext
+RFC &nbsp;&#160;&#0160;&#xA0;&#Xa0; 822
+RFC
+822
+!! html
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
+RFC
+822
+</p>
+!! end
+
+!! test
Magic links: ISBN (bug 1937)
!! wikitext
ISBN 0-306-40615-2
@@ -8550,6 +9388,34 @@ ISBN 0-306-40615-2
!! end
!! test
+Magic links: ISBN (bug 65278)
+!! wikitext
+This is ISBN 978-0-316-09811-3 but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.
+!! html/php
+<p>This is <a href="/wiki/Special:BookSources/9780316098113" class="internal mw-magiclink-isbn">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.
+</p>
+!! html/parsoid
+<p>This is <a href="./Special:BookSources/9780316098113" rel="mw:ExtLink">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.</p>
+!! end
+
+!! test
+Magic links: ISBN (w/ non-newline whitespace, bug 28950/29025)
+!! wikitext
+ISBN &nbsp;&#160;&#0160;&#xA0;&#Xa0; 978&nbsp;0&#160;316&#0160;09811&#xA0;3
+ISBN
+9780316098113
+ISBN 978
+0316098113
+!! html
+<p><a href="/wiki/Special:BookSources/9780316098113" class="internal mw-magiclink-isbn">ISBN 978 0 316 09811 3</a>
+ISBN
+9780316098113
+ISBN 978
+0316098113
+</p>
+!! end
+
+!! test
Magic links: PMID incorrectly converts space to underscore
!! wikitext
PMID 1234
@@ -8558,6 +9424,28 @@ PMID 1234
</p>
!! end
+!! test
+Magic links: PMID (bug 65278)
+!! wikitext
+This is PMID 1234 but thisPMID 1234 is not PMID 1234linked.
+!! html
+<p>This is <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.
+</p>
+!! end
+
+!! test
+Magic links: PMID (w/ non-newline whitespace, bug 28950/29025)
+!! wikitext
+PMID &nbsp;&#160;&#0160;&#xA0;&#Xa0; 1234
+PMID
+1234
+!! html
+<p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
+PMID
+1234
+</p>
+!! end
+
###
### Templates
####
@@ -8783,8 +9671,7 @@ Template with complex template as argument
!! test
Template with thumb image (with link in description)
!! wikitext
-{{paramtest|
- param =[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}}
+{{paramtest|param =[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]}}
!! html/php
This is a test template with parameter <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Noimage.png" class="new" title="File:Noimage.png">File:Noimage.png</a> <div class="thumbcaption"><a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">link</a> <a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">caption</a></div></div></div>
@@ -8795,6 +9682,8 @@ This is a test template with parameter <div class="thumb tright"><div class="thu
<div class="thumbcaption"><a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">link</a> <a href="/index.php?title=No_link&amp;action=edit&amp;redlink=1" class="new" title="No link (page does not exist)">caption</a></div>
</div>
</div>
+!! html/parsoid
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"paramtest","href":"./Template:Paramtest"},"params":{"param":{"wt":"[[Image:noimage.png|thumb|[[no link|link]] [[no link|caption]]]]"}},"i":0}}]}'>This is a test template with parameter </p><figure class="mw-default-size" typeof="mw:Error mw:Image/Thumb" about="#mwt1" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:Noimage.png" ><img resource="./File:Noimage.png" src="./Special:FilePath/Noimage.png" height="220" width="220"/></a><figcaption><a rel="mw:WikiLink" href="./No_link" title="No link">link</a> <a rel="mw:WikiLink" href="./No_link" title="No link">caption</a></figcaption></figure>
!! end
!! article
@@ -8853,15 +9742,6 @@ Template parameter as link source
</p>
!! end
-!!test
-Template-generated attribute string (k='v')
-!! wikitext
-<span {{attr_str|id|v1}}>bar</span>
-!! html
-<p><span id="v1">bar</span>
-</p>
-!!end
-
!!article
Template:paramtest2
!! text
@@ -9237,19 +10117,15 @@ some
<h3><span class="mw-headline" id="here">here</span></h3>
!! html/parsoid
-<!-- comment --><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/><!-- comment --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><!-- comment -->
-<h2 data-parsoid='{}'> hu </h2>
+<!-- comment --><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/><!-- comment --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><!-- comment --><h2> hu </h2>
<meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/>
+<p>some</p>
+<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><ul><li> stuff</li>
+<li> here</li></ul>
-<p data-parsoid='{}'>some</p>
-<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/>
-<ul data-parsoid='{}'>
-<li data-parsoid='{}'> stuff</li>
-
-<li data-parsoid='{}'> here</li></ul>
+<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>can have stuff&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><h3> here </h3>
-<h3 data-parsoid='{}'> here </h3>
!! end
# TODO: test with DOM fragment reuse!
@@ -9270,25 +10146,17 @@ c}}d
b}}
!! html
-a<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b
-<table></table>c"}},"i":0}}]}'>b</span>
-<table about="#mwt1"></table><span about="#mwt1">c</span>d
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b&lt;table>&lt;/table>c"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>ab</p><table about="#mwt1" data-parsoid='{"stx":"html"}'></table><p about="#mwt1">cd</p>
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n&lt;table>&lt;/table>\nc"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>ab</p><span about="#mwt2">
+</span><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><span about="#mwt2">
+</span><p about="#mwt2">cd</p>
-<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n<table></table>\nc"}},"i":0}},"d"]}'>ab</p><span about="#mwt2">
-</span>
-<table about="#mwt2"></table><span about="#mwt2">
-</span>
-<p about="#mwt2">cd</p>
-
+<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n&lt;table>&lt;/table>\n\nb"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>a</p><span about="#mwt3">
-<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n<table></table>\n\nb"}},"i":0}}]}'>a</p><span about="#mwt3">
-
-</span>
-<table about="#mwt3"></table><span about="#mwt3">
+</span><table about="#mwt3" data-parsoid='{"stx":"html"}'></table><span about="#mwt3">
-</span>
-<p about="#mwt3">b</p>
+</span><p about="#mwt3">b</p>
!! end
!! test
@@ -9405,11 +10273,9 @@ parsoid=wt2html,wt2wt
|foo
|}
!!html/parsoid
-<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":""}},"i":0}}]}'></span>
-<table width="100%">
-<tbody>
-<tr>
-<td>foo</td></tr></tbody></table>
+<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":""}},"i":0}}]}'></span><table width="100%">
+<tbody><tr><td>foo</td></tr>
+</tbody></table>
!!end
!!test
@@ -9421,7 +10287,7 @@ parsoid=wt2html,wt2wt
|c
|}
!!html/parsoid
-<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>a&lt;/includeonly>"'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><table about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"{{{b}}}","html":"&lt;span about=\"#mwt1\" typeof=\"mw:Param\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[31,38,null,null],&amp;quot;src&amp;quot;:&amp;quot;{{{b}}}&amp;quot;}\">{{{b}}}&lt;/span>"},{"html":""}]]}' data-parsoid='{"a":{"{{{b}}}":null},"sa":{"{{{b}}}":""}}'>
+<meta typeof="mw:Includes/IncludeOnly"/><meta typeof="mw:Includes/IncludeOnly/End"/><table about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"{{{b}}}","html":"&lt;span about=\"#mwt1\" typeof=\"mw:Param\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[31,38,null,null],&amp;quot;src&amp;quot;:&amp;quot;{{{b}}}&amp;quot;}\">{{{b}}}&lt;/span>"},{"html":""}]]}' data-parsoid='{"a":{"{{{b}}}":null},"sa":{"{{{b}}}":""}}'>
<tbody><tr><td>c</td></tr>
</tbody></table>
@@ -9592,7 +10458,7 @@ Templates: Correctly encapsulate templates producing </p> tag without a correspo
b</p>}}
!! html/parsoid
<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\nb&lt;/p>"}},"i":0}}]}'>a
-b</p><p></p>
+b</p>
!!end
!!test
@@ -9718,6 +10584,9 @@ Templates: HTML Tag: 6. Generation of end piece of HTML attr value
!!end
+# SSS FIXME: While it is great we added support for all this,
+# do we want to make this part of the spec? Maybe we want to
+# deprecate this kind of usage in the future?
!!test
Templates: HTML Tag: 7. Generation of partial attribute key string
!! wikitext
@@ -9727,6 +10596,79 @@ Templates: HTML Tag: 7. Generation of partial attribute key string
!!end
+!! test
+Templates: HTML Tag: 8. Template-generated attribute (k=v)
+!! wikitext
+<div {{echo|1=id="v1"}}>bar</div>
+!! html
+<div id="v1">bar</div>
+
+!!end
+
+!! test
+Templates: HTML Tag: 9. Multiple template-generated attributes
+!! wikitext
+<div {{echo|1=id="v1" title="foo"}}>bar</div>
+!! html
+<div id="v1" title="foo">bar</div>
+
+!!end
+
+!! test
+Templates: Support for templates generating attributes and content
+!! wikitext
+{| {{mixed_attr_content_template}}
+|-
+|bar
+|}
+!! html/php
+<table style="color:red;" title="T48811">
+
+<tr>
+<td>foo
+</td></tr>
+<tr>
+<td>bar
+</td></tr></table>
+
+!! html/parsoid
+<table style="color:red;" title="T48811" about="#mwt1" typeof="mw:Transclusion mw:ExpandedAttrs" data-mw='{"parts":["{| ",{"template":{"target":{"wt":"mixed_attr_content_template","href":"./Template:Mixed_attr_content_template"},"params":{},"i":0}},"\n|-\n|bar\n|}"]}'>
+<tbody><tr>
+<td>foo</td></tr>
+<tr>
+<td>bar</td></tr>
+</tbody></table>
+!!end
+
+!! test
+1. Entities and nowikis inside templated attributes should be handled correctly
+!! wikitext
+<div {{echo|style{{=}}"background:&#35;f9f9f9;"}}>foo</div>
+!! html/php
+<div style="background:#f9f9f9;">foo</div>
+
+!! html/parsoid
+<div style="background:#f9f9f9;" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html"}' data-mw='{"attribs":[[{"txt":"style","html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[5,49,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;style{{=}}\\&amp;quot;background:&amp;amp;#35;f9f9f9;\\&amp;quot;&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">style&lt;/span>&lt;span typeof=\"mw:Nowiki\" about=\"#mwt1\" data-parsoid=\"{}\">=&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">\"background:&lt;/span>&lt;span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;&amp;amp;#35;&amp;quot;,&amp;quot;srcContent&amp;quot;:&amp;quot;#&amp;quot;}\">#&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">f9f9f9;\"&lt;/span>"},{"html":""}]]}'>foo</div>
+!! end
+
+!! test
+2. Entities and nowikis inside templated attributes should be handled correctly
+!! wikitext
+{|
+|{{table_attribs_3}}
+|}
+!! html/php
+<table>
+<tr>
+<td style="background:#f9f9f9;">Foo
+</td></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_3","href":"./Template:Table_attribs_3"},"params":{},"i":0}}]}'>Foo</td></tr>
+</tbody></table>
+!! end
+
!!test
Templates: HTML Tables: 1. Generating start of a HTML table
!! wikitext
@@ -10700,26 +11642,26 @@ parsoid=wt2html
Parsoid: Escape nowiki with trailing space in tags
!! options
parsoid=html2wt
+!! html
+<p>&lt;nowiki &gt; foo &lt/nowiki ></p>
+<p>a&lt;nowiki /&gt;b</p>
+<p>c&lt;nowiki/ &gt;d</p>
!! wikitext
&lt;nowiki &gt; foo &lt;/nowiki &gt;
a&lt;nowiki /&gt;b
c&lt;nowiki/ &gt;d
-!! html
-<p>&lt;nowiki &gt; foo &lt/nowiki ></p>
-<p>a&lt;nowiki /&gt;b</p>
-<p>c&lt;nowiki/ &gt;d</p>
!! end
!! test
Parsoid: Escape weird noWikI capitalizations
!! options
parsoid=html2wt
-!! wikitext
-&lt;noWikI &gt; foo &lt;/NoWikI &gt;
!! html
<p>&lt;noWikI &gt; foo &lt/NoWikI ></p>
+!! wikitext
+&lt;noWikI &gt; foo &lt;/NoWikI &gt;
!! end
###
@@ -10841,8 +11783,7 @@ parsoid=wt2html,wt2wt,html2html
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span>
-</p>
+<p><span class="mw-default-size" typeof="mw:Image"><a 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"/></a></span></p>
!! end
!! test
@@ -10853,8 +11794,7 @@ Simple image (using File: namespace, now canonical)
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span>
-</p>
+<p><span class="mw-default-size" typeof="mw:Image"><a 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"/></a></span></p>
!! end
!! test
@@ -10865,7 +11805,7 @@ Right-aligned image
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></figure>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a 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"/></a></figure>
!! end
!! test
@@ -10876,7 +11816,7 @@ Image with caption
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a 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"/></a><figcaption>Caption text</figcaption></figure>
!! end
!! test
@@ -10887,7 +11827,7 @@ Image with caption, bug 53312 #1
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page stuff"><img alt="Caption page stuff" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption page stuff</figcaption></figure>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a 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"/></a><figcaption>Caption page stuff</figcaption></figure>
!! end
!! test
@@ -10898,7 +11838,7 @@ Image with caption, bug 53312 #2
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page="><img alt="Caption page=" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption page=</figcaption></figure>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a 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"/></a><figcaption>Caption page=</figcaption></figure>
!! end
!! test
@@ -10909,7 +11849,7 @@ Image with caption, bug 53312 #3
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption page=stuff"><img alt="Caption page=stuff" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption page=stuff</figcaption></figure>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a 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"/></a><figcaption>Caption page=stuff</figcaption></figure>
!! end
!! test
@@ -10925,13 +11865,22 @@ thumbsize=220
<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Caption <a href="/index.php?title=Link1&amp;action=edit&amp;redlink=1" class="new" title="Link1 (page does not exist)">Link1</a> [[]] <a href="/index.php?title=Link2&amp;action=edit&amp;redlink=1" class="new" title="Link2 (page does not exist)">Link2</a></div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}],"dsr":[0,59,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[2,null,null,null]}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption data-parsoid='{"dsr":[null,57,null,null]}'>Caption <a rel="mw:WikiLink" href="./Link1" title="Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"},"dsr":[32,41,2,2]}'>Link1</a>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>Caption <a rel="mw:WikiLink" href="./Link1" title="Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"}}'>Link1</a>
[[]]
-<a rel="mw:WikiLink" href="./Link2" title="Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"},"dsr":[47,56,2,2]}'>Link2</a>
+<a rel="mw:WikiLink" href="./Link2" title="Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"}}'>Link2</a>
</figcaption></figure>
!! end
!! test
+Titles in unlinked images (T23454)
+!! wikitext
+[[File:Foobar.jpg|link=|stuff]]
+!! html/php
+<p><img alt="stuff" src="http://example.com/images/3/3a/Foobar.jpg" title="stuff" width="1941" height="220" />
+</p>
+!! end
+
+!! test
Link with empty target
!! wikitext
[[]]
@@ -10941,6 +11890,17 @@ Link with empty target
!! end
!! test
+Image with link trail
+!! wikitext
+Linktrails should not work for images: [[File:Foobar.jpg]]s
+!! html/php
+<p>Linktrails should not work for images: <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>s
+</p>
+!! html/parsoid
+<p>Linktrails should not work for images: <span class="mw-default-size" typeof="mw:Image"><a 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"/></a></span>s</p>
+!! end
+
+!! test
Image with empty attribute
!! options
parsoid=wt2html,wt2wt,html2html
@@ -10950,7 +11910,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a 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"/></a><figcaption>Caption text</figcaption></figure>
!! end
!! test
@@ -10961,7 +11921,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption</div></div></div>
!! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[24,38,null,null]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[24,38,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">137px&lt;/span>"}]]}'><a 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="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
!! end
!! test
@@ -10972,7 +11932,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption</div></div></div>
!! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;thumb&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,32,null,null]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[33,47,null,null]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt3" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,32,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;thumb&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[33,47,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">137px&lt;/span>"}]]}'><a 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="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
!! end
!! test
@@ -10983,7 +11943,7 @@ parsoid=wt2html,wt2wt,html2html
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>
</p>
!! html/parsoid
-<p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;50px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,31,null,null]}\">50px&lt;/span>"}]]}' data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}' data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,31,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;50px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">50px&lt;/span>"}]]}'><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/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
!! end
## Parsoid does not provide editing support for images where templates produce multiple image attributes.
@@ -10996,10 +11956,9 @@ Image with multiple attributes from the same template
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption text"><img alt="Caption text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image mw:Placeholder"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image mw:Placeholder"><a 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"/></a><figcaption>Caption text</figcaption></figure>
!! end
-# Parsoid's output here is broken (incorrect p-wrapping); see bug 64901.
!! test
Image with link tails
!! options
@@ -11028,9 +11987,9 @@ thumbsize=220
</div>
<p>456</p>
!! html/parsoid
-<p>123<span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span>456</p>
-123<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></figure>456
-123<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220"></a></figure>456
+<p>123<span class="mw-default-size" typeof="mw:Image"><a 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"/></a></span>456</p>
+<p>123</p><figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a 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"/></a></figure><p>456</p>
+<p>123</p><figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a></figure><p>456</p>
!! end
!! test
@@ -11041,7 +12000,7 @@ Image with multiple captions -- only last one is accepted
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption3 - accepted"><img alt="Caption3 - accepted" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption3 - accepted</figcaption></figure>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a 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"/></a><figcaption>Caption3 - accepted</figcaption></figure>
!! end
!! test
@@ -11052,7 +12011,7 @@ Image with multiple widths -- use last
<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" width="300" height="34" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/450px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/600px-Foobar.jpg 2x" /></a>
</p>
!! html/parsoid
-<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="34" width="300"/></a></span></p>
+<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a 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="34" width="300"/></a></span></p>
!! end
!! test
@@ -11068,8 +12027,8 @@ thumbsize=220
<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" style="vertical-align: middle" /></a>
</p>
!! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
-<p><span class="mw-default-size mw-valign-middle" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<p><span class="mw-default-size mw-valign-middle" typeof="mw:Image" data-mw='{"caption":"caption"}'><a 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"/></a></span></p>
!! end
!! test
@@ -11084,9 +12043,9 @@ Image with width attribute at different positions
<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
!! html/parsoid
-<figure class="mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" height="23" width="200"></a><figcaption>Caption</figcaption></figure>
-<figure class="mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" height="23" width="200"></a><figcaption>Caption</figcaption></figure>
-<figure class="mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" height="23" width="200"></a><figcaption>Caption</figcaption></figure>
+<figure class="mw-halign-right" typeof="mw:Image"><a 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="23" width="200"/></a><figcaption>Caption</figcaption></figure>
+<figure class="mw-halign-right" typeof="mw:Image"><a 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="23" width="200"/></a><figcaption>Caption</figcaption></figure>
+<figure class="mw-halign-right" typeof="mw:Image"><a 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="23" width="200"/></a><figcaption>Caption</figcaption></figure>
!! end
# a sad bit of backward-compatibility
@@ -11102,7 +12061,7 @@ parsoid=wt2html,wt2wt,html2html
<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/177px-Foobar.jpg" width="177" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/265px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/353px-Foobar.jpg 2x" /></a>
</p>
!! html/parsoid
-<p><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="2" width="20"/></a></span><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="20" width="177"/></a></span></p>
+<p><span typeof="mw:Image"><a 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="2" width="20"/></a></span> <span typeof="mw:Image"><a 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="20" width="177"/></a></span></p>
!! end
!! test
@@ -11113,7 +12072,7 @@ Image with link parameter, wiki target
<p><a href="/wiki/Main_Page" title="Main Page"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="Main_Page"><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></span></p>
!! end
# parsoid bug 49293 (part 1)
@@ -11125,7 +12084,7 @@ Image with link parameter, URL target
<p><a href="http://example.com/" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="http://example.com/"><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></span></p>
!! end
# parsoid bug 49293 (part 2)
@@ -11137,7 +12096,7 @@ Image with link parameter, protocol-less URL target
<p><a href="//example.com/" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="//example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="//example.com/"><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></span></p>
!! end
!! test
@@ -11192,7 +12151,7 @@ Image with empty link parameter
<p><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" />
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><span><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></span></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><span><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"/></span></span></p>
!! end
!! test
@@ -11203,7 +12162,7 @@ Image with link parameter (wiki target) and unnamed parameter
<p><a href="/wiki/Main_Page" title="Title"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="Main_Page"><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></span></p>
!! end
!! test
@@ -11214,7 +12173,7 @@ Image with link parameter (URL target) and unnamed parameter
<p><a href="http://example.com/" title="Title" rel="nofollow"><img alt="Title" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"Title"}'><a href="http://example.com/"><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></span></p>
!! end
!! test
@@ -11228,7 +12187,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="http://example.com/"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="http://example.com/"><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="25" width="220"/></a><figcaption>Title</figcaption></figure>
!! end
!! test
@@ -11241,7 +12200,7 @@ thumbsize=220
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/File:Foobar.jpg"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
!! end
!! test
@@ -11255,7 +12214,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
!! end
!! test
@@ -11269,7 +12228,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="http://example.com"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="http://example.com"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="http://example.com"><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
!! end
!! test
@@ -11283,7 +12242,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><span><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></span><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><span><img resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></span><figcaption>Title</figcaption></figure>
!! end
!! test
@@ -11297,7 +12256,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/Main_Page" title="Main Page"><img alt="alttext" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img alt="alttext" resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-mw='{"thumb":"Thumb.png"}'><a href="Main_Page"><img alt="alttext" resource="./File:Foobar.jpg" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a><figcaption>Title</figcaption></figure>
!! end
!! test
@@ -11310,7 +12269,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a 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"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
!! end
!! test
@@ -11323,7 +12282,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Altitude" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img alt="Altitude" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img alt="Altitude" 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><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
!! end
!! test
@@ -11339,8 +12298,19 @@ parsoid=wt2html,wt2wt,html2html
</p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;testing '''bold''' in alt&quot;}"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
-<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img alt="testing bold in alt" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;testing '''bold''' in alt&quot;}"><a 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"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="testing bold in alt" 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></span></p>
+!! end
+
+!! test
+Alt image option should handle most kinds of wikitext without barfing
+!! wikitext
+[[Image:Foobar.jpg|thumb|This is the image caption|alt=This is a [[link]] and a {{echo|''bold template''}}.]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a link and a bold template." 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>This is the image caption</div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"This is the image caption"},{"ck":"alt","ak":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}."}]}' data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["alt",{"html":"alt=This is a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;link&amp;quot;},&amp;quot;dsr&amp;quot;:[65,73,2,2]}\">link&lt;/a> and a &lt;i about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[80,106,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;&#39;&#39;bold template&#39;&#39;&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">bold template&lt;/i>."}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img alt="This is a link and a bold template." 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":{"alt":"This is a link and a bold template.","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=This is a [[link]] and a {{echo|&#39;&#39;bold template&#39;&#39;}}.","resource":"Image:Foobar.jpg"}}'/></a><figcaption>This is the image caption</figcaption></figure>
!! end
###################
@@ -11364,9 +12334,9 @@ parsoid=wt2html,wt2wt,html2html
</p><p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" 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>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a></span></p>
-<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a></span></p>
-<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a 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="25" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a 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="25" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a 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="25" width="220"/></a></span></p>
!! end
!! test
@@ -11383,7 +12353,9 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption">caption</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a 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"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a 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"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a 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"/></a><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -11400,7 +12372,9 @@ parsoid=wt2html,wt2wt,html2html
<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>caption</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>caption</figcaption></figure>
!! end
###################
@@ -11427,8 +12401,8 @@ parsoid=wt2html,wt2wt,html2html
</p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="2000" height="227" class="thumbborder" /></a>
</p>
!! html/parsoid
-<p><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="227" width="2000"/></a></span></p>
-<p><span class="mw-image-border" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="227" width="2000"/></a></span></p>
+<p><span typeof="mw:Image"><a 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="227" width="2000"/></a></span></p>
+<p><span class="mw-image-border" typeof="mw:Image"><a 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="227" width="2000"/></a></span></p>
!! end
!! test
@@ -11444,8 +12418,8 @@ parsoid=wt2html,wt2wt,html2html
</p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" width="1000" height="113" class="thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/1500px-Foobar.jpg 1.5x, http://example.com/images/3/3a/Foobar.jpg 2x" /></a>
</p>
!! html/parsoid
-<p><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="113" width="1000"/></a></span></p>
-<p><span class="mw-image-border" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="113" width="1000"/></a></span></p>
+<p><span typeof="mw:Image"><a 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="113" width="1000"/></a></span></p>
+<p><span class="mw-image-border" typeof="mw:Image"><a 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="113" width="1000"/></a></span></p>
!! end
!! test
@@ -11458,7 +12432,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:52px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div></div></div></div>
!! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="6" width="50"/></a></figure>
+<figure typeof="mw:Image/Thumb"><a 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="6" width="50"/></a></figure>
!! end
!! test
@@ -11474,8 +12448,8 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:2002px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="Foobar.svg" src="http://example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" width="2000" height="1500" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/3000px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/4000px-Foobar.svg.png 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div></div></div></div>
!! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
-<figure typeof="mw:Image/Thumb"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" height="1500" width="2000"/></a></figure>
+<figure typeof="mw:Image/Thumb"><a 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"/></a></figure>
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="1500" width="2000"/></a></figure>
!! end
!! test
@@ -11488,7 +12462,7 @@ parsoid=wt2html,wt2wt,html2html
<p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>
</p>
!! html/parsoid
-<p><span typeof="mw:Image/Frameless"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="6" width="50"/></a></span></p>
+<p><span typeof="mw:Image/Frameless"><a 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="6" width="50"/></a></span></p>
!! end
!! test
@@ -11504,8 +12478,8 @@ parsoid=wt2html,wt2wt,html2html
</p><p><a href="/wiki/File:Foobar.svg" class="image"><img alt="Foobar.svg" src="http://example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" width="2000" height="1500" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/3000px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/4000px-Foobar.svg.png 2x" /></a>
</p>
!! html/parsoid
-<p><span typeof="mw:Image/Frameless"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
-<p><span typeof="mw:Image/Frameless"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" height="1500" width="2000"/></a></span></p>
+<p><span typeof="mw:Image/Frameless"><a 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"/></a></span></p>
+<p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="1500" width="2000"/></a></span></p>
!! end
!! test
@@ -11527,7 +12501,10 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a> <div class="thumbcaption"></div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure><figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure><figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure><figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a 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"/></a></figure>
+<figure typeof="mw:Image/Frame"><a 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"/></a></figure>
+<figure typeof="mw:Image/Frame"><a 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"/></a></figure>
+<figure typeof="mw:Image/Frame"><a 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"/></a></figure>
!! end
###################
@@ -11560,7 +12537,7 @@ Frameless image caption with a free URL
<p><a href="/wiki/File:Foobar.jpg" class="image" title="http://example.com"><img alt="http://example.com" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"http://example.com"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"http://example.com"}'><a 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"/></a></span></p>
!! end
!! test
@@ -11573,7 +12550,7 @@ thumbsize=220
<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
!! end
!! test
@@ -11587,7 +12564,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Alteration" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img alt="Alteration" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img alt="Alteration" 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="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
!! end
!! test
@@ -11599,7 +12576,7 @@ SVG thumbnails with no language set
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -11612,7 +12589,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=File:Foobar.svg&amp;lang=de" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/langde-180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/langde-270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/langde-360px-Foobar.svg.png 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" lang="de" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" lang="de" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -11625,7 +12602,7 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div>lang=invalid.language.code</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" height="165" width="220"/></a><figcaption>lang=invalid.language.code</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>lang=invalid.language.code</figcaption></figure>
!! end
!! test
@@ -11636,7 +12613,7 @@ BUG 1887: A ISBN with a thumbnail
<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><a href="/wiki/Special:BookSources/1235467890" class="internal mw-magiclink-isbn">ISBN 1235467890</a></div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption><a href="Special:BookSources/1235467890" rel="mw:ExtLink">ISBN 1235467890</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption><a href="Special:BookSources/1235467890" rel="mw:ExtLink">ISBN 1235467890</a></figcaption></figure>
!! end
!! test
@@ -11647,7 +12624,7 @@ BUG 1887: A RFC with a thumbnail
<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>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>This is <a href="//tools.ietf.org/html/rfc12354" rel="mw:ExtLink">RFC 12354</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>This is <a href="//tools.ietf.org/html/rfc12354" rel="mw:ExtLink">RFC 12354</a></figcaption></figure>
!! end
!! test
@@ -11658,7 +12635,7 @@ BUG 1887: A mailto link with a thumbnail
<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>Please <a rel="nofollow" class="external free" href="mailto:nobody@example.com">mailto:nobody@example.com</a></div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>Please <a rel="mw:ExtLink" href="mailto:nobody@example.com">mailto:nobody@example.com</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>Please <a rel="mw:ExtLink" href="mailto:nobody@example.com">mailto:nobody@example.com</a></figcaption></figure>
!! end
# Pending resolution to bug 368
@@ -11670,7 +12647,7 @@ BUG 648: Frameless image caption with a link
<p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]] in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]] in it"}'><a 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"/></a></span></p>
!! end
!! test
@@ -11681,7 +12658,7 @@ BUG 648: Frameless image caption with a link (suffix)
<p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a linkfoo in it"><img alt="text with a linkfoo in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]]foo in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]]foo in it"}'><a 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"/></a></span></p>
!! end
!! test
@@ -11692,7 +12669,7 @@ BUG 648: Frameless image caption with an interwiki link
<p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a MeatBall:Link in it"><img alt="text with a MeatBall:Link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link]] in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link]] in it"}'><a 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"/></a></span></p>
!! end
!! test
@@ -11703,7 +12680,7 @@ BUG 648: Frameless image caption with a piped interwiki link
<p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link|link]] in it"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link|link]] in it"}'><a 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"/></a></span></p>
!! end
!! test
@@ -11714,7 +12691,7 @@ Escape HTML special chars in image alt text
<p><a href="/wiki/File:Foobar.jpg" class="image" title="&amp; &lt; &gt; &quot;"><img alt="&amp; &lt; &gt; &quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp; &lt; > \""}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp; &lt; > \""}'><a 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"/></a></span></p>
!! end
!! test
@@ -11725,7 +12702,7 @@ BUG 499: Alt text should have &#1234;, not &amp;1234;
<p><a href="/wiki/File:Foobar.jpg" class="image" title="♀"><img alt="♀" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp;#9792;"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp;#9792;"}'><a 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"/></a></span></p>
!! end
!! test
@@ -11749,7 +12726,7 @@ Image caption containing another image
<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>This is a caption with another <a href="/wiki/File:Thumb.png" class="image" title="image"><img alt="image" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" /></a> inside it!</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>This is a caption with another <span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"image"}'><a href="File:Thumb.png"><img resource="./File:Thumb.png" src="//example.com/images/e/ea/Thumb.png" height="135" width="135"/></a></span> inside it!</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>This is a caption with another <span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"image"}'><a href="./File:Thumb.png"><img resource="./File:Thumb.png" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a></span> inside it!</figcaption></figure>
!! end
!! test
@@ -11761,7 +12738,7 @@ Image: caption containing a newline
<p><a href="/wiki/File:Foobar.jpg" class="image" title="This *is some text"><img alt="This *is some text" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"This\n*is some text"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"This\n*is some text"}'><a 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"/></a></span></p>
!!end
!!test
@@ -11773,7 +12750,7 @@ Image: caption containing leading space
<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>bar</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption> bar</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption> bar</figcaption></figure>
!!end
!! test
@@ -11792,7 +12769,7 @@ and some more text.]]
<div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is an example image thumbnail caption with a table <table> <tr> <th> Foo </th> <th> Bar </th></tr> <tr> <td> Foo1 </td> <td> Bar1 </td></tr></table> and some more text.</div></div></div>
!! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="23" width="200"/></a><figcaption>This is an example image thumbnail caption with a table
+<figure typeof="mw:Image/Thumb"><a 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="23" width="200"/></a><figcaption>This is an example image thumbnail caption with a table
<table>
<tbody>
<tr><th>Foo </th><th>Bar</th></tr>
@@ -11809,7 +12786,7 @@ Bug 3090: External links other than http: in image captions
<div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This caption has <a rel="nofollow" class="external text" href="irc://example.net">irc</a> and <a rel="nofollow" class="external text" href="https://example.com">Secure</a> ext links in it.</div></div></div>
!! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="23" width="200"/></a><figcaption>This caption has <a rel="mw:ExtLink" href="irc://example.net">irc</a> and <a rel="mw:ExtLink" href="https://example.com">Secure</a> ext links in it.</figcaption></figure>
+<figure typeof="mw:Image/Thumb"><a 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="23" width="200"/></a><figcaption>This caption has <a rel="mw:ExtLink" href="irc://example.net">irc</a> and <a rel="mw:ExtLink" href="https://example.com">Secure</a> ext links in it.</figcaption></figure>
!! end
!! test
@@ -11822,7 +12799,7 @@ parsoid=wt2html,wt2wt,html2html
<p><a href="/wiki/File:Foobar.jpg" class="image" title="a"><img alt="a" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="b" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size b" typeof="mw:Image" data-mw='{"caption":"a"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size b" typeof="mw:Image" data-mw='{"caption":"a"}'><a 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"/></a></span></p>
!! end
!! test
@@ -11836,7 +12813,7 @@ language=es
<div class="floatleft"><a href="/wiki/Foo" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image"><a href="./Foo"><img resource="./Archivo: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><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -11851,7 +12828,7 @@ language=es
<div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/Foo" title="Foo"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/Archivo:Foobar.jpg" class="internal" title="Aumentar"></a></div>caption</div></div></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -11865,7 +12842,7 @@ parsoid=wt2html,wt2wt,html2html
<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="extra thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>
</p>
!! html/parsoid
-<p><span class="mw-default-size mw-image-border extra" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a></span></p>
+<p><span class="mw-default-size mw-image-border extra" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a 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="25" width="220"/></a></span></p>
!! end
# Note that 'right' is the default alignment, despite the misspelled 'righ' below
@@ -11886,7 +12863,9 @@ parsoid=wt2html,wt2wt,html2html
<div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
!! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>caption</figcaption></figure>
!! end
!! article
@@ -11895,11 +12874,13 @@ File:Barfoo.jpg
#REDIRECT [[File:Barfoo.jpg]]
!! endarticle
+# FIXME: Parsoid should run this test -- but we'd need to teach the
+# mockAPI about the redirected Barfoo.jpg image.
!! test
Redirected image
!! wikitext
[[Image:Barfoo.jpg]]
-!! html
+!! html/php
<p><a href="/wiki/File:Barfoo.jpg" title="File:Barfoo.jpg">File:Barfoo.jpg</a>
</p>
!! end
@@ -11909,10 +12890,12 @@ Missing image with uploads disabled
!! options
wgEnableUploads=0
!! wikitext
-[[Image:Foobaz.jpg]]
-!! html
+[[File:Foobaz.jpg]]
+!! html/php
<p><a href="/wiki/File:Foobaz.jpg" title="File:Foobaz.jpg">File:Foobaz.jpg</a>
</p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:Foobaz.jpg"><img resource="./File:Foobaz.jpg" src="./Special:FilePath/Foobaz.jpg" height="220" width="220"/></a></span></p>
!! end
# Parsoid-specific testing for images
@@ -11927,12 +12910,7 @@ Parsoid-specific image handling - simple image with size and middle alignment
!! wikitext
[[File:Foobar.jpg|middle|50px]]
!! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
-</a>
-</span>
-</p>
+<p><span class="mw-valign-middle" typeof="mw:Image"><a 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="6" width="50"/></a></span></p>
!! end
!! test
@@ -11943,12 +12921,7 @@ parsoid=wt2wt,wt2html,html2html
!! wikitext
[[Image:Foobar.jpg|middle|50px]]
!! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
-</a>
-</span>
-</p>
+<p><span class="mw-valign-middle" typeof="mw:Image"><a 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="6" width="50"/></a></span></p>
!! end
!! test
@@ -11957,7 +12930,7 @@ Parsoid-specific image handling - simple image with size and middle alignment
!! wikitext
[[File:Foobar.jpg|50px|middle]]
!! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"middle","ak":"middle"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-valign-middle" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"middle","ak":"middle"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"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="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
!! end
!! test
@@ -11968,12 +12941,7 @@ parsoid=wt2html,wt2wt,html2html
!! wikitext
[[Image:Foobar.jpg|50px|middle]]
!! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
-</a>
-</span>
-</p>
+<p><span class="mw-valign-middle" typeof="mw:Image"><a 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="6" width="50"/></a></span></p>
!! end
!! test
@@ -11981,7 +12949,7 @@ Parsoid-specific image handling - simple image with both sizes, a baseline align
!! wikitext
[[File:Foobar.jpg|500x10px|baseline|caption]]
!! html/parsoid
-<p><span class="mw-valign-baseline" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"500x10px"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption"}],"size":"500x10"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/89px-Foobar.jpg" height="10" width="89" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"10","width":"89"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-valign-baseline" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"500x10px"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption"}],"size":"500x10"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/89px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="10" width="89" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"10","width":"89"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
!! end
!! test
@@ -11989,7 +12957,7 @@ Parsoid-specific image handling - simple image with border and size spec
!! wikitext
[[File:Foobar.jpg|50px|border|caption]]
!! html/parsoid
-<p><span class="mw-image-border" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-image-border" typeof="mw:Image" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
!! end
!! test
@@ -11997,12 +12965,7 @@ Parsoid-specific image handling - thumbnail with halign, valign, and caption
!! wikitext
[[File:Foobar.jpg|left|baseline|thumb|caption content]]
!! html/parsoid
-<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220" />
-</a>
-<figcaption>caption content</figcaption>
-</figure>
+<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>caption content</figcaption></figure>
!! end
!! test
@@ -12011,7 +12974,7 @@ Parsoid-specific image handling - thumbnail with halign, valign, and caption
!! wikitext
[[File:Foobar.jpg|thumb|left|baseline|caption content]]
!! html/parsoid
-<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"left","ak":"left"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption content"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption content</figcaption></figure>
+<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"left","ak":"left"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption content"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-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 content</figcaption></figure>
!! end
!! test
@@ -12019,12 +12982,7 @@ Parsoid-specific image handling - thumbnail with specific size, halign, valign,
!! wikitext
[[Image:Foobar.jpg|right|middle|thumb|50x50px|caption]]
!! html/parsoid
-<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" />
-</a>
-<figcaption>caption</figcaption>
-</figure>
+<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb"><a 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="6" width="50"/></a><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -12033,7 +12991,7 @@ valign, and caption (existing content)
!! wikitext
[[File:Foobar.jpg|thumb|50x50px|right|middle|caption]]
!! html/parsoid
-<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"50x50px"},{"ck":"right","ak":"right"},{"ck":"middle","ak":"middle"},{"ck":"caption","ak":"caption"}],"size":"50x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"50x50px"},{"ck":"right","ak":"right"},{"ck":"middle","ak":"middle"},{"ck":"caption","ak":"caption"}],"size":"50x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -12044,12 +13002,7 @@ parsoid=wt2html,wt2wt,html2html
!! wikitext
[[File:Foobar.jpg|frame|500x50px|caption]]
!! html/parsoid
-<figure typeof="mw:Image/Frame">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941" />
-</a>
-<figcaption>caption</figcaption>
-</figure>
+<figure typeof="mw:Image/Frame"><a 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"/></a><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -12060,12 +13013,7 @@ parsoid=wt2html,wt2wt,html2html
!! wikitext
[[File:Foobar.jpg|left|baseline|frame|500x50px|caption]]
!! html/parsoid
-<figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941" />
-</a>
-<figcaption>caption</figcaption>
-</figure>
+<figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame"><a 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"/></a><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -12073,7 +13021,7 @@ Parsoid-specific image handling - frameless image with specific size, border, an
!! wikitext
[[File:Foobar.jpg|frameless|442x50px|border|caption]]
!! html/parsoid
-<p><span class="mw-image-border" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"frameless","ak":"frameless"},{"ck":"width","ak":"442x50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}],"size":"442x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" height="50" width="442" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"50","width":"442"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-image-border" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}' data-parsoid='{"optList":[{"ck":"frameless","ak":"frameless"},{"ck":"width","ak":"442x50px"},{"ck":"border","ak":"border"},{"ck":"caption","ak":"caption"}],"size":"442x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="50" width="442" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"50","width":"442"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
!! end
!! test
@@ -12081,10 +13029,7 @@ Parsoid-specific image handling - simple image with a formatted caption
!! wikitext
[[File:Foobar.jpg|<table><tr><td>a</td><td>b</td></tr><tr><td>c</td></tr></table>]]
!! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;table>&lt;tr>&lt;td>a&lt;/td>&lt;td>b&lt;/td>&lt;/tr>&lt;tr>&lt;td>c&lt;/td>&lt;/tr>&lt;/table>"}'>
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941">
-</a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;table>&lt;tr>&lt;td>a&lt;/td>&lt;td>b&lt;/td>&lt;/tr>&lt;tr>&lt;td>c&lt;/td>&lt;/tr>&lt;/table>"}'><a 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"/></a></span></p>
!! end
!! test
@@ -12092,7 +13037,7 @@ Parsoid-specific image handling - caption with a template in it
!! wikitext
[[File:Foobar.jpg|thumb|200x23px|This caption has a {{echo|transclusion}} in it.]]
!! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" height="23" width="200"></a><figcaption>This caption has a <span about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;transclusion&quot;}},&quot;i&quot;:0}}]}">transclusion</span> in it.</figcaption></figure>
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"></a><figcaption>This caption has a <span about="#mwt1" typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;transclusion&quot;}},&quot;i&quot;:0}}]}">transclusion</span> in it.</figcaption></figure>
!! end
!! test
@@ -12105,7 +13050,7 @@ foo
bar
!! html/parsoid
<p>foo</p>
-<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="23" width="200"></a><figcaption>This caption has a <center>unbalanced tag in it.</center></figcaption></figure>
+<figure typeof="mw:Image/Thumb"><a 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="23" width="200"/></a><figcaption>This caption has a <center>unbalanced tag in it.</center></figcaption></figure>
<p>bar</p>
!! end
@@ -12116,7 +13061,7 @@ parsoid=wt2html,wt2wt
!! wikitext
[[File:Foobar.jpg|thumb|]]
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption></figcaption></figure>
!! end
# empty captions don't get serialized unless we're in the "round trip" case
@@ -12126,9 +13071,10 @@ Parsoid-specific image handling - empty caption (2)
parsoid=html2wt
!! html/parsoid
<figure class="mw-default-size" typeof="mw:Image/Thumb">
- <a href="File:Foobar.jpg">
+ <a 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="25" width="220"/>
</a>
<figcaption></figcaption>
@@ -12142,7 +13088,7 @@ Parsoid-specific image handling - whitespace caption
!! wikitext
[[File:Foobar.jpg|thumb| ]]
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption> </figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption> </figcaption></figure>
!! end
!! test
@@ -12153,7 +13099,7 @@ foo
bar
!! html/parsoid
<p>foo
-<span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" lang="de" height="180" width="240"/></a></span>
+<span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" lang="de" data-file-width="240" data-file-height="180" data-file-type="drawing" height="180" width="240"/></a></span>
bar</p>
!! end
@@ -12189,7 +13135,12 @@ subpage title=[[Subpage test]]
</p>
!! end
-# TODO: make this PHP-parser compatible!
+!! article
+Subpage test/1/2/subpage
+!! text
+blah
+!! endarticle
+
!! test
Relative subpage noslash link
!! options
@@ -12199,8 +13150,12 @@ subpage title=[[Subpage test/1/2/3/4]]
[[../../subpage/]]
[[../../subpage]]
-!! html
-<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage/" title="Subpage test/1/2/subpage/">subpage</a></p>
+!! html/php
+<p><a href="/wiki/Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">subpage</a>
+</p><p><a href="/wiki/Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage test/1/2/subpage</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">subpage</a></p>
<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage_test/1/2/subpage</a></p>
!! end
@@ -12273,8 +13228,28 @@ Render invalid page names as plain text (bug 51090)
[[foo&lt;bar]]
</p>
!!html/parsoid
-<p>[[./../foo|bar]][[foo�|bar]][[foo/.|bar]][[foo/..|bar]][[foo~~~bar]][[foo>bar]][[foo[bar]][[.]][[..]][[foo././bar]]</p>
-<p>[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"./../foo"}},"i":0}}]}'>./../foo</span>|bar]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/."}},"i":0}}]}'>foo/.</span>|bar]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/.."}},"i":0}}]}'>foo/..</span>|bar]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo~~~~bar"}},"i":0}}]}'>foo~~~~bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo>bar"}},"i":0}}]}'>foo>bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo././bar"}},"i":0}}]}'>foo././bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo{bar"}},"i":0}}]}'>foo{bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo}bar"}},"i":0}}]}'>foo}bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo[bar"}},"i":0}}]}'>foo[bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo]bar"}},"i":0}}]}'>foo]bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;bar"}},"i":0}}]}'>foo&lt;bar</span>]]</p>
+<p>[[./../foo|bar]]
+[[foo�|bar]]
+[[foo/.|bar]]
+[[foo/..|bar]]
+[[foo~~~bar]]
+[[foo>bar]]
+[[foo[bar]]
+[[.]]
+[[..]]
+[[foo././bar]]</p>
+
+<p>[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"./../foo"}},"i":0}}]}'>./../foo</span>|bar]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/."}},"i":0}}]}'>foo/.</span>|bar]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/.."}},"i":0}}]}'>foo/..</span>|bar]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo~~~~bar"}},"i":0}}]}'>foo~~~~bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo>bar"}},"i":0}}]}'>foo>bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo././bar"}},"i":0}}]}'>foo././bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo{bar"}},"i":0}}]}'>foo{bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo}bar"}},"i":0}}]}'>foo}bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo[bar"}},"i":0}}]}'>foo[bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo]bar"}},"i":0}}]}'>foo]bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;bar"}},"i":0}}]}'>foo&lt;bar</span>]]</p>
!!end
!! test
@@ -12496,8 +13471,8 @@ parsoid
[[:File:Foo.png|Bar]]
!! html
<p>
-<a rel="mw:WikiLink" href="File:Foo.png" title="File:Foo.png">File:Foo.png</a>
-<a rel="mw:WikiLink" href="File:Foo.png" title="File:Foo.png">Bar</a>
+<a rel="mw:WikiLink" href="./File:Foo.png" title="File:Foo.png">File:Foo.png</a>
+<a rel="mw:WikiLink" href="./File:Foo.png" title="File:Foo.png">Bar</a>
</p>
!! end
@@ -12514,15 +13489,31 @@ parsoid
!! end
!! test
-Parsoid: Defaultsort
+Normalize hrefs properly before testing for invalid link targets (bug 70894)
!! options
-parsoid
+parsoid=html2wt
+!! html
+<link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne"/>
+!! wikitext
+[[Category:Toxine bactérienne]]
+!! end
+
+!! test
+Parsoid: Defaultsort
!! wikitext
{{DEFAULTSORT:Foo}}
-!! html
+!! html/parsoid
<meta property="mw:PageProp/categorydefaultsort" content="Foo"/>
!! end
+!! test
+Parsoid: Defaultsort (template-generated)
+!! wikitext
+{{{{echo|DEFAULTSORT}}:Foo}}
+!! html/parsoid
+<meta property="mw:PageProp/categorydefaultsort" content="Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"dsr":[0,28,null,null],"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"{{echo|DEFAULTSORT}}:Foo"},"params":{},"i":0}}]}'/>
+!! end
+
###
### Inter-language links
###
@@ -12537,9 +13528,9 @@ ill
!! html/php
es:Alimento fr:Nourriture zh:食品
!! html/parsoid
-<p><link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Alimento"/>
-<link rel="mw:PageProp/Language" href="//fr.wikipedia.org/wiki/Nourriture"/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/食品"/></p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Alimento"/>
+<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/Nourriture"/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/食品"/>
!! end
!! test
@@ -12554,10 +13545,10 @@ ill
!! html/php
es:1 fr:1
!! html/parsoid
-<p><link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/1"/>
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/2"/>
-<link rel="mw:PageProp/Language" href="//fr.wikipedia.org/wiki/1"/>
-<link rel="mw:PageProp/Language" href="//fr.wikipedia.org/wiki/2"/></p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/1"/>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/2"/>
+<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/1"/>
+<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/2"/>
!! end
###
@@ -12631,6 +13622,31 @@ Some text
!! end
+!! test
+TOC anchors don't collide
+!! wikitext
+__FORCETOC__
+== Headline 2 ==
+== Headline ==
+== Headline 2 ==
+== Headline ==
+!! html
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#Headline_2"><span class="tocnumber">1</span> <span class="toctext">Headline 2</span></a></li>
+<li class="toclevel-1 tocsection-2"><a href="#Headline"><span class="tocnumber">2</span> <span class="toctext">Headline</span></a></li>
+<li class="toclevel-1 tocsection-3"><a href="#Headline_2_2"><span class="tocnumber">3</span> <span class="toctext">Headline 2</span></a></li>
+<li class="toclevel-1 tocsection-4"><a href="#Headline_3"><span class="tocnumber">4</span> <span class="toctext">Headline</span></a></li>
+</ul>
+</div>
+
+<h2><span class="mw-headline" id="Headline_2">Headline 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="Headline">Headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Headline">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="Headline_2_2">Headline 2</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Headline 2">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="Headline_3">Headline</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Headline">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+
+!! end
+
# perl -e 'print "="x$_," Level $_ heading","="x$_,"\n" for 1..10'
!! test
Handling of sections up to level 6 and beyond
@@ -12690,7 +13706,7 @@ Handling of sections up to level 6 and beyond
!! end
!! test
-TOC regression (bug 9764)
+TOC regression (T11764)
!! wikitext
== title 1 ==
=== title 1.1 ===
@@ -12862,7 +13878,7 @@ Link inside a section heading
!! end
!! test
-TOC regression (bug 12077)
+TOC regression (T14077)
!! wikitext
__TOC__
== title 1 ==
@@ -12889,10 +13905,12 @@ __TOC__
!! test
BUG 1219 URL next to image (good)
!! wikitext
-http://example.com [[Image:foobar.jpg]]
-!! html
+http://example.com [[File:Foobar.jpg]]
+!! html/php
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a> <span class="mw-default-size" typeof="mw:Image"><a 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"/></a></span></p>
!!end
!! test
@@ -13115,10 +14133,12 @@ c3-->
!! test
BUG 1219 URL next to image (broken)
!! wikitext
-http://example.com[[Image:foobar.jpg]]
-!! html
+http://example.com[[File:Foobar.jpg]]
+!! html/php
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a><span class="mw-default-size" typeof="mw:Image"><a 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"/></a></span></p>
!!end
!! test
@@ -13237,15 +14257,14 @@ parsoid
</tbody></table>
!! end
-# The PHP parser escapes the opening brace to &#123; for some reason, so
-# disabled this test for it.
!! test
div with braces in attribute value
-!! options
-parsoid
!! wikitext
<div title="{}">Foo</div>
-!! html
+!! html/php
+<div title="&#123;}">Foo</div>
+
+!! html/parsoid
<div title="{}">Foo</div>
!! end
@@ -13254,17 +14273,19 @@ parsoid
# 'div with empty attribute value, space before equals'), but strips the
# attribute completely if the space is missing. We hope that not much content
# depends on this, so are implementing the behavior below in Parsoid for
-# consistencies' sake. Disabled for the PHP parser.
+# consistencies' sake.
# FIXME: fix this behavior in the PHP parser?
!! test
div with empty attribute value, no space before equals
!! options
-parsoid
+parsoid=wt2html,html2html
!! wikitext
<div class=>HTML rocks</div>
-!! html
-<div class="">HTML rocks</div>
+!! html/php
+<div>HTML rocks</div>
+!! html/parsoid
+<div class="">HTML rocks</div>
!! end
!! test
@@ -13482,16 +14503,17 @@ Media link with text
!! end
# FIXME: this is still bad HTML tag nesting
+# FIXME: doBlockLevels won't wrap this in a paragraph because it contains a div
!! test
Media link with nasty text
-fixme: doBlockLevels won't wrap this in a paragraph because it contains a div
!! wikitext
[[Media:Foobar.jpg|Safe Link<div style=display:none>" onmouseover="alert(document.cookie)" onfoo="</div>]]
!! html
<a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link&lt;div style="display:none"&gt;" onmouseover="alert(document.cookie)" onfoo="&lt;/div&gt;</a>
!! html+tidy
-<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link&lt;div style="display:none"&gt;" onmouseover="alert(document.cookie)" onfoo="&lt;/div&gt;</a></p>
+<p><a href="http://example.com/images/3/3a/Foobar.jpg" class="internal" title="Foobar.jpg">Safe Link</a></p>
+<div style="display:none">" onmouseover="alert(document.cookie)" onfoo="</div>
!! end
!! test
@@ -13506,19 +14528,23 @@ Media link to nonexistent file (bug 1702)
!! test
Image link to nonexistent file (bug 1850 - good)
!! wikitext
-[[Image:No such.jpg]]
-!! html
+[[File:No_such.jpg]]
+!! html/php
<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=No_such.jpg" class="new" title="File:No such.jpg">File:No such.jpg</a>
</p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:No_such.jpg"><img resource="./File:No_such.jpg" src="./Special:FilePath/No_such.jpg" height="220" width="220"/></a></span></p>
!! end
!! test
:Image link to nonexistent file (bug 1850 - bad)
!! wikitext
[[:Image:No such.jpg]]
-!! html
+!! html/php
<p><a href="/index.php?title=File:No_such.jpg&amp;action=edit&amp;redlink=1" class="new" title="File:No such.jpg (page does not exist)">Image:No such.jpg</a>
</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./File:No_such.jpg" title="File:No such.jpg">Image:No such.jpg</a></p>
!! end
@@ -13685,7 +14711,7 @@ Bug 2304: HTML attribute safety (dangerous template; 2309)
<div title=""></div>
!! html/parsoid
-<div title='" onmouseover="alert(document.cookie)' about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;dangerous attribute&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Dangerous_attribute&amp;quot;},&amp;quot;params&amp;quot;:{},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[]],&amp;quot;dsr&amp;quot;:[12,35,null,null]}\">\" onmouseover=\"alert(document.cookie)&lt;/span>"}]]}' data-parsoid='{"stx":"html","a":{"title":"\" onmouseover=\"alert(document.cookie)"},"sa":{"title":"{{dangerous attribute}}"}}'></div>
+<div title='" onmouseover="alert(document.cookie)' about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"title":"\" onmouseover=\"alert(document.cookie)"},"sa":{"title":"{{dangerous attribute}}"}}' data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[]],&amp;quot;dsr&amp;quot;:[12,35,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;dangerous attribute&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Dangerous_attribute&amp;quot;},&amp;quot;params&amp;quot;:{},&amp;quot;i&amp;quot;:0}}]}\">\" onmouseover=\"alert(document.cookie)&lt;/span>"}]]}'></div>
!! end
!! test
@@ -14005,9 +15031,12 @@ Expansion of multi-line templates in attribute values (bug 6255 sanity check)
!! wikitext
<div style="background:
#00FF00">-</div>
-!! html
+!! html/php
<div style="background: #00FF00">-</div>
+!! html/parsoid
+<div style="background:
+#00FF00">-</div>
!! end
!! test
@@ -14245,6 +15274,10 @@ Nested template calls
###
### Sanitizer
###
+
+# HTML+Tidy effectively strips out the empty tags completely
+# But since Parsoid doesn't it wraps the <s></s> tags in p-tags
+# which Tidy would have done for the PHP parser had there been content inside it.
!! test
Sanitizer: Closing of open tags
!! wikitext
@@ -14252,6 +15285,8 @@ Sanitizer: Closing of open tags
!! html
<s></s><table></table>
+!! html/parsoid
+<p><s></s></p><table></table>
!! end
!! test
@@ -14290,16 +15325,19 @@ Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=
</p>
!! end
+# In HTML5, the restrictions are that id must contain at least one character,
+# and must not contain any space characters.
!! test
Sanitizer: Validating the contents of the id attribute (bug 4515)
!! options
disabled
!! wikitext
-<br id=9 />
+<br id="" /><br id="a space" />
!! html
-Something, but definitely not <br id="9" />...
+Something ...
!! end
+# In HTML5, id must be unique amongst all the ids in the element's home subtree.
!! test
Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301)
!! options
@@ -14397,7 +15435,6 @@ Punctuation: CSS ! important (bug 11874; with space after)
!!end
-
!! test
HTML bullet list, closed tags (bug 5497)
!! wikitext
@@ -14405,29 +15442,36 @@ HTML bullet list, closed tags (bug 5497)
<li>One</li>
<li>Two</li>
</ul>
-!! html
+!! html/php
<ul>
<li>One</li>
<li>Two</li>
</ul>
+!! html/parsoid
+<ul data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html"}'>One</li>
+<li data-parsoid='{"stx":"html"}'>Two</li>
+</ul>
+
!! end
!! test
HTML bullet list, unclosed tags (bug 5497)
-!! options
-disabled
!! wikitext
<ul>
<li>One
<li>Two
</ul>
-!! html
+!! html/php+tidy
<ul>
-<li>One
-</li>
-<li>Two
-</li>
+<li>One</li>
+<li>Two</li>
+</ul>
+!! html/parsoid
+<ul data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
</ul>
!! end
@@ -14439,29 +15483,37 @@ HTML ordered list, closed tags (bug 5497)
<li>One</li>
<li>Two</li>
</ol>
-!! html
+!! html/php
<ol>
<li>One</li>
<li>Two</li>
</ol>
+!! html/parsoid
+<ol data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html"}'>One</li>
+<li data-parsoid='{"stx":"html"}'>Two</li>
+</ol>
+
!! end
!! test
HTML ordered list, unclosed tags (bug 5497)
!! options
-disabled
!! wikitext
<ol>
<li>One
<li>Two
</ol>
-!! html
+!! html/php+tidy
<ol>
-<li>One
-</li>
-<li>Two
-</li>
+<li>One</li>
+<li>Two</li>
+</ol>
+!! html/parsoid
+<ol data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
</ol>
!! end
@@ -14493,8 +15545,6 @@ HTML nested bullet list, closed tags (bug 5497)
!! test
HTML nested bullet list, open tags (bug 5497)
-!! options
-disabled
!! wikitext
<ul>
<li>One
@@ -14504,7 +15554,17 @@ disabled
<li>Sub-two
</ul>
</ul>
-!! html
+!! html/php+tidy
+<ul>
+<li>One</li>
+<li>Two:
+<ul>
+<li>Sub-one</li>
+<li>Sub-two</li>
+</ul>
+</li>
+</ul>
+!! html/parsoid
<ul>
<li>One
</li>
@@ -14547,8 +15607,6 @@ HTML nested ordered list, closed tags (bug 5497)
!! test
HTML nested ordered list, open tags (bug 5497)
-!! options
-disabled
!! wikitext
<ol>
<li>One
@@ -14558,7 +15616,17 @@ disabled
<li>Sub-two
</ol>
</ol>
-!! html
+!! html/php
+<ol>
+<li>One
+<li>Two:
+<ol>
+<li>Sub-one
+<li>Sub-two
+</ol>
+</ol>
+
+!! html/parsoid
<ol>
<li>One
</li>
@@ -14659,6 +15727,7 @@ http://<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
</ul>
</div>
+<p></p>
!! end
!! test
@@ -14798,32 +15867,38 @@ Fuzz testing: Parser25 (bug 6055)
Fuzz testing: URL adjacent extension (with space, clean)
!! wikitext
http://example.com <nowiki>junk</nowiki>
-!! html
+!! html/php
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a> junk
</p>
-!!end
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a> <span typeof="mw:Nowiki">junk</span></p>
+!! end
!!test
Fuzz testing: URL adjacent extension (no space, dirty; nowiki)
!! wikitext
http://example.com<nowiki>junk</nowiki>
-!! html
+!! html/php
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>junk
</p>
-!!end
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a><span typeof="mw:Nowiki">junk</span></p>
+!! end
!!test
Fuzz testing: URL adjacent extension (no space, dirty; pre)
!! wikitext
http://example.com<pre>junk</pre>
-!! html
+!! html/php
<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a><pre>junk</pre>
-!! html+tidy
+!! html/php+tidy
<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></p>
<pre>
junk
</pre>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a></p><pre data-parsoid='{"stx":"html"}'>junk</pre>
!!end
!!test
@@ -14834,7 +15909,7 @@ Fuzz testing: image with bogus manual thumbnail
<div class="thumb tright"><div class="thumbinner" style="width:182px;">Error creating thumbnail: <div class="thumbcaption"></div></div></div>
!! html/parsoid
-<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[Image:foobar.jpg|thumbnail= ]]","optList":[{"ck":"manualthumb","ak":"thumbnail= "}],"dsr":[0,32,null,null]}'/>
+<figure class="mw-default-size" typeof="mw:Error mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"manualthumb","ak":"thumbnail= "}],"dsr":[0,32,2,2]}' data-mw='{"errors":[{"key":"missing-thumbnail","message":"This thumbnail does not exist.","params":{"name":""}}],"thumb":""}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{},"dsr":[2,30,null,null]}'><img resource="./File:Foobar.jpg" src="./Special:FilePath/" height="220" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"220"},"sa":{"resource":"Image:foobar.jpg"}}'/></a></figure>
!!end
!! test
@@ -14912,15 +15987,19 @@ New wiki paragraph
</p>
!! end
+# FIXME: The current php output is documented
+# and desired output is the parsoid target.
!! test
Inline HTML vs wiki block nesting
-!! options
-disabled
!! wikitext
<b>Bold paragraph
New wiki paragraph
-!! html
+!! html/php
+<p><b>Bold paragraph
+</p><p>New wiki paragraph</b>
+</p>
+!! html/parsoid
<p><b>Bold paragraph</b>
</p><p>New wiki paragraph
</p>
@@ -15913,6 +16992,17 @@ Special:Search page linking.
!! end
!! test
+{{!}} is a magic word
+!! wikitext
+{{!}} is a magic word there and {{!}} is still a magic word here
+!! html/php
+<p>| is a magic word there and | is still a magic word here
+</p>
+!! html/parsoid
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","href":"./Template:!"},"params":{},"i":0}}]}' data-parsoid='{"pi":[[]]}'>|</span> is a magic word there and <span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","href":"./Template:!"},"params":{},"i":0}}]}' data-parsoid='{"pi":[[]]}'>|</span> is still a magic word here</p>
+!! end
+
+!! test
Say the magic word
!! options
title=[[Parser test]]
@@ -16025,8 +17115,8 @@ image4 |300px| centre
Gallery (with options)
!! wikitext
<gallery widths='70px' heights='40px' perrow='2' caption='Foo [[Main Page]]' >
-File:Nonexistant.jpg|caption
-File:Nonexistant.jpg
+File:Nonexistent.jpg|caption
+File:Nonexistent.jpg
image:foobar.jpg|some '''caption''' [[Main Page]]
image:foobar.jpg
image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
@@ -16035,31 +17125,31 @@ image:foobar.jpg|Blabla|alt=This is a foo-bar.|blabla.
<ul class="gallery mw-gallery-traditional" style="max-width: 226px;_width: 226px;">
<li class='gallerycaption'>Foo <a href="/wiki/Main_Page" title="Main Page">Main Page</a></li>
<li class="gallerybox" style="width: 105px"><div style="width: 105px">
- <div class="thumb" style="height: 70px;">Nonexistant.jpg</div>
+ <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
<div class="gallerytext">
<p>caption
</p>
</div>
</div></li>
<li class="gallerybox" style="width: 105px"><div style="width: 105px">
- <div class="thumb" style="height: 70px;">Nonexistant.jpg</div>
+ <div class="thumb" style="height: 70px;">Nonexistent.jpg</div>
<div class="gallerytext">
</div>
</div></li>
<li class="gallerybox" style="width: 105px"><div style="width: 105px">
- <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
+ <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
<div class="gallerytext">
<p>some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</p>
</div>
</div></li>
<li class="gallerybox" style="width: 105px"><div style="width: 105px">
- <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
+ <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
<div class="gallerytext">
</div>
</div></li>
<li class="gallerybox" style="width: 105px"><div style="width: 105px">
- <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a foo-bar." src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" /></a></div></div>
+ <div class="thumb" style="width: 100px;"><div style="margin:31px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="This is a foo-bar." src="http://example.com/images/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg" width="70" height="8" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/105px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/140px-Foobar.jpg 2x" /></a></div></div>
<div class="gallerytext">
<p>Blabla|blabla.
</p>
@@ -16080,17 +17170,17 @@ image:foobar.jpg|link=Main Page#section|caption
!! html
<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="/wiki/Main_Page"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page"><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>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
- <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><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>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
- <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/Main_Page#section"><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>caption
</p>
@@ -16110,14 +17200,14 @@ File:foobar.jpg|{{Test|unamedParam|alt=param}}|alt=galleryalt
!! html
<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="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" 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><a href="/wiki/File:Foobar.jpg" class="image" title="desc"><img alt="inneralt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" width="20" height="2" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/30px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/40px-Foobar.jpg 2x" /></a>
</p>
</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="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="galleryalt" 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>This is a test template
</p>
@@ -16131,30 +17221,30 @@ File:foobar.jpg|{{Test|unamedParam|alt=param}}|alt=galleryalt
gallery (with showfilename option)
!! wikitext
<gallery showfilename>
-File:Nonexistant.jpg|caption
-File:Nonexistant.jpg
+File:Nonexistent.jpg|caption
+File:Nonexistent.jpg
image:foobar.jpg|some '''caption''' [[Main Page]]
File:Foobar.jpg
</gallery>
!! html
<ul class="gallery mw-gallery-traditional">
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
- <div class="thumb" style="height: 150px;">Nonexistant.jpg</div>
+ <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
<div class="gallerytext">
-<p><a href="/wiki/File:Nonexistant.jpg" title="File:Nonexistant.jpg">Nonexistant.jpg</a><br />
+<p><a href="/wiki/File:Nonexistent.jpg" title="File:Nonexistent.jpg">Nonexistent.jpg</a><br />
caption
</p>
</div>
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
- <div class="thumb" style="height: 150px;">Nonexistant.jpg</div>
+ <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
<div class="gallerytext">
-<p><a href="/wiki/File:Nonexistant.jpg" title="File:Nonexistant.jpg">Nonexistant.jpg</a><br />
+<p><a href="/wiki/File:Nonexistent.jpg" title="File:Nonexistent.jpg">Nonexistent.jpg</a><br />
</p>
</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" /></a></div></div>
+ <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><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
@@ -16162,7 +17252,7 @@ some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
</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="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
<div class="gallerytext">
<p><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
</p>
@@ -16176,30 +17266,30 @@ some <b>caption</b> <a href="/wiki/Main_Page" title="Main Page">Main Page</a>
Gallery (with namespace-less filenames)
!! wikitext
<gallery>
-File:Nonexistant.jpg
-Nonexistant.jpg
+File:Nonexistent.jpg
+Nonexistent.jpg
image:foobar.jpg
foobar.jpg
</gallery>
!! html
<ul class="gallery mw-gallery-traditional">
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
- <div class="thumb" style="height: 150px;">Nonexistant.jpg</div>
+ <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
<div class="gallerytext">
</div>
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
- <div class="thumb" style="height: 150px;">Nonexistant.jpg</div>
+ <div class="thumb" style="height: 150px;">Nonexistent.jpg</div>
<div class="gallerytext">
</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="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
<div class="gallerytext">
</div>
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
- <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
<div class="gallerytext">
</div>
</div></li>
@@ -16267,6 +17357,8 @@ ISBN 978-0-1234-56&#x20;789
</p>
!! html+tidy
<p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a> 789</p>
+!! html/parsoid
+<p><a href="./Special:BookSources/9780123456" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978-0-1234-56</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#x20;","srcContent":" "}'> </span>789</p>
!! end
!! test
@@ -16282,24 +17374,37 @@ ISBN
Double ISBN
!! wikitext
ISBN ISBN 1234567890
-!! html
+!! html/php
<p>ISBN <a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
</p>
+!! html/parsoid
+<p>ISBN <a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
!! end
!! test
ISBN with an X
!! wikitext
ISBN 3-462-04561-X
-!! html
+ISBN 080442957X
+ISBN 978080442957X
+!! html/php
<p><a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-X</a>
+<a href="/wiki/Special:BookSources/080442957X" class="internal mw-magiclink-isbn">ISBN 080442957X</a>
+<a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957X</a>
</p>
+!! html/parsoid
+<p><a href="./Special:BookSources/346204561X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-X</a>
+<a href="./Special:BookSources/080442957X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957X</a>
+<a href="./Special:BookSources/978080442957X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957X</a></p>
!! end
!! test
ISBN with empty prefix (parsoid test)
!! wikitext
ISBN 1234567890
+!! html/php
+<p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
+</p>
!! html/parsoid
<p><a href="Special:BookSources/1234567890" rel="mw:ExtLink">ISBN 1234567890</a></p>
!! end
@@ -16308,9 +17413,11 @@ ISBN 1234567890
Bug 22905: <abbr> followed by ISBN followed by </a>
!! wikitext
<abbr>(fr)</abbr> ISBN 2753300917 [http://www.example.com example.com]
-!! html
+!! html/php
<p><abbr>(fr)</abbr> <a href="/wiki/Special:BookSources/2753300917" class="internal mw-magiclink-isbn">ISBN 2753300917</a> <a rel="nofollow" class="external text" href="http://www.example.com">example.com</a>
</p>
+!! html/parsoid
+<p><abbr data-parsoid='{"stx":"html"}'>(fr)</abbr> <a href="./Special:BookSources/2753300917" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 2753300917</a> <a rel="mw:ExtLink" href="http://www.example.com">example.com</a></p>
!! end
!! test
@@ -16402,9 +17509,11 @@ Image with page parameter
djvu
!! wikitext
[[File:LoremIpsum.djvu|page=2]]
-!! html
+!! html/php
<p><a href="/index.php?title=File:LoremIpsum.djvu&amp;page=2" class="image"><img alt="LoremIpsum.djvu" src="http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-2480px-LoremIpsum.djvu.jpg" width="2480" height="3508" srcset="http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-3720px-LoremIpsum.djvu.jpg 1.5x, http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-4960px-LoremIpsum.djvu.jpg 2x" /></a>
</p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"page","ak":"page=2"}]}'><a href="./File:LoremIpsum.djvu" data-parsoid='{"a":{"href":"./File:LoremIpsum.djvu"},"sa":{}}'><img resource="./File:LoremIpsum.djvu" src="//example.com/images/5/5f/LoremIpsum.djvu" data-file-width="2480" data-file-height="3508" data-file-type="bitmap" height="3508" width="2480" data-parsoid='{"a":{"resource":"./File:LoremIpsum.djvu","height":"3508","width":"2480"},"sa":{"resource":"File:LoremIpsum.djvu"}}'/></a></span></p>
!! end
!! test
@@ -16416,35 +17525,16 @@ Another italics / bold test
</pre>
!!end
-# Note the results may be incorrect, as parserTest output included this:
-# XML error: Mismatched tag at byte 6120:
-# ...<dd> </dt></dl> </dd...
+# FIXME: The php output seems broken. It's interleaving some open/close tags.
!! test
dt/dd/dl test
-!! options
-disabled
!! wikitext
:;;;::
-!! html
-<dl>
-<dd><dl>
-<dt><dl>
-<dt><dl>
-<dt><dl>
-<dd><dl>
-<dd>
-</dd>
-</dl>
-</dd>
-</dl>
-</dt>
-</dl>
-</dt>
-</dl>
-</dt>
-</dl>
-</dd>
-</dl>
+!! html/php
+<dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dt></dl></dd></dl></dd></dl></dd></dl></dd></dl></dd></dl>
+
+!! html/parsoid
+<dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dd></dl></dd></dl></dt></dl></dt></dl></dt></dl></dd></dl>
!!end
@@ -16458,7 +17548,7 @@ Images with the "|" character in the comment
<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>An <a rel="nofollow" class="external text" href="http://test/?param1=%7Cleft%7C&amp;param2=%7Cx">external</a> URL</div></div></div>
!! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>An <a rel="mw:ExtLink" href="http://test/?param1=|left|&amp;param2=|x">external</a> URL</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>An <a rel="mw:ExtLink" href="http://test/?param1=|left|&amp;param2=|x">external</a> URL</figcaption></figure>
!! end
!! test
@@ -16538,7 +17628,7 @@ subpage title=[[Subpage test/L1/L2/L3]]
!! wikitext
[[../../////]]
!! html
-<p><a href="/index.php?title=Subpage_test/L1////&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1//// (page does not exist)">///</a>
+<p><a href="/index.php?title=Subpage_test/L1&amp;action=edit&amp;redlink=1" class="new" title="Subpage test/L1 (page does not exist)">Subpage test/L1</a>
</p>
!! end
@@ -16587,7 +17677,7 @@ Definition list code coverage
; title : def
; title : def
;title: def
-!! html
+!! html/php
<dl><dt> title &#160;</dt>
<dd> def</dd>
<dt> title&#160;</dt>
@@ -16595,6 +17685,10 @@ Definition list code coverage
<dt>title</dt>
<dd> def</dd></dl>
+!! html/parsoid
+<dl><dt> title <span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
+<dt> title<span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
+<dt>title</dt><dd> def</dd></dl>
!! end
!! test
@@ -17051,7 +18145,7 @@ language=sr variant=sr-ec
!! wikitext
== -{Naslov}- ==
!! html
-<h2><span class="mw-headline" id="-.7BNaslov.7D-">Naslov</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Уредите одељак „Naslov“">уреди</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="-.7BNaslov.7D-">Naslov</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Уреди одељак „Naslov“">уреди</a><span class="mw-editsection-bracket">]</span></span></h2>
!! end
@@ -17277,45 +18371,51 @@ language=sr variant=sr-ec
</p>
!! end
-# This test is currently broken in the PHP parser (bug 52661)
+# FIXME: This test is currently broken in the PHP parser (bug 52661)
!! test
Don't break image parsing if language converter markup is in the caption.
!! options
language=sr
-disabled
!! wikitext
[[File:Foobar.jpg|-{R|caption}-]]
-!! html
+!! html/parsoid
<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
</p>
!! end
-# This test is currently broken in the PHP parser (bug 52661)
+# FIXME: This test is currently broken in the PHP parser (bug 52661)
!! test
Don't break list handling if language converter markup is in the item.
!! options
language=zh variant=zh-cn
-disabled
!! wikitext
;-{zh-cn:AAA;zh-tw:BBB}-
-!! html
+!! html/php
+<dl><dt><span class="error">在手动语言转换规则中检测到错误</span></dd></dl>
+
+!! html/parsoid
<dl><dt>AAA
</dt></dl>
-
!! end
-# This test is currently broken in the PHP parser (bug 52661)
+# FIXME: This test is currently broken in the PHP parser (bug 52661)
!! test
Don't break table handling if language converter markup is in the cell.
!! options
language=sr variant=sr-ec
-disabled
!! wikitext
{|
|-
| -{R|B}-
|}
-!! html
+!! html/php
+<table>
+
+<tr>
+<td>Б}-
+</td></tr></table>
+
+!! html/parsoid
<table>
<tr>
@@ -17534,12 +18634,13 @@ Line two
!! test
Nesting tags, paragraphs on lines which begin with <div>
-!! options
-disabled
!! wikitext
<div></div><strong>A
B</strong>
-!! html
+!! html/php+tidy
+<p><strong>A</strong></p>
+<p><strong>B</strong></p>
+!! html/parsoid
<div></div>
<p><strong>A
B</strong>
@@ -17941,27 +19042,35 @@ comment
<a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">ABC3D% ++</a> <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">+%20</a>
!! end
+# Parsoid doesn't support this yet: see bug 73581
+# but it *should* omit the 'src' attribute if the image is bad.
+# PHP side of tests was disabled in
+# mediawiki/core:6bd31e7d95161a6e88fa86df60871051da997c3c
+# because of issues in the PHP parserTests infrastructure
+# (but the output below is indeed what the PHP side emits)
!! test
Bad images - basic functionality
-!! options
-disabled
!! wikitext
[[File:Bad.jpg]]
-!! html
+!! DISABLED/html/php
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"bad-image","message":"This image is blacklisted in this context."}]}'><a href="./File:Bad.jpg"><img resource="./File:Bad.jpg" height="220" width="220"/></a></span></p>
!! end
!! test
Bad images - bug 16039: text after bad image disappears
-!! options
-disabled
!! wikitext
Foo bar
[[File:Bad.jpg]]
Bar foo
-!! html
+!! DISABLED/html/php
<p>Foo bar
</p><p>Bar foo
</p>
+!! html/parsoid
+<p>Foo bar
+<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"bad-image","message":"This image is blacklisted in this context."}]}'><a href="./File:Bad.jpg"><img resource="./File:Bad.jpg" height="220" width="220"/></a></span>
+Bar foo</p>
!! end
!! test
@@ -18097,6 +19206,82 @@ this is not the the title
!! end
!! test
+Page status indicators: Empty name is invalid
+!! options
+showindicators
+!! wikitext
+<indicator name=" "></indicator>
+<indicator></indicator>
+!! html
+<p><span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
+<span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
+</p>
+!! end
+
+!! test
+Page status indicators: Weird syntaxes that are okay
+!! options
+showindicators
+!! wikitext
+<indicator name="empty" />
+<indicator name></indicator>
+!! html
+empty=
+name=
+<p><br />
+</p>
+!! end
+
+!! test
+Page status indicators: Torture test
+!! options
+showindicators
+!! wikitext
+<indicator name="01">hello world</indicator>
+<indicator name="02">[[Main Page]]</indicator>
+<indicator name="03">[[File:Foobar.jpg|25px|link=]]</indicator>
+<indicator name="04">[[File:Foobar.jpg|25px]]</indicator>
+<indicator name="05">* foo
+* bar</indicator>
+<indicator name="06"><nowiki>foo</nowiki></indicator>
+<indicator name="07"> Preformatted</indicator>
+<indicator name="08"><div>Broken tag</indicator>
+<indicator name="09">{| class=wikitable
+| cell
+|}</indicator>
+<indicator name="10">Two
+
+paragraphs</indicator>
+!! html
+01=hello world
+02=<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
+03=<img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/25px-Foobar.jpg" width="25" height="3" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/38px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg 2x" />
+04=<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/25px-Foobar.jpg" width="25" height="3" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/38px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg 2x" /></a>
+05=<ul><li> foo</li>
+<li> bar</li></ul>
+
+06=foo
+07=<pre>Preformatted
+</pre>
+08=<div>Broken tag</div>
+
+09=<table class="wikitable">
+<tr>
+<td> cell
+</td></tr></table>
+
+10=<p>Two
+</p><p>paragraphs
+</p>
+<p><br />
+</p><p><br />
+</p><p><br />
+</p><p><br />
+</p><p><br />
+</p>
+!! end
+
+!! test
preload: check <noinclude> and <includeonly>
!! options
preload
@@ -18138,18 +19323,22 @@ preload
!! test
Play a bit with r67090 and bug 3158
-!! options
-disabled
!! wikitext
<div style="width:50% !important">&nbsp;</div>
<div style="width:50%&nbsp;!important">&nbsp;</div>
<div style="width:50%&#160;!important">&nbsp;</div>
<div style="border : solid;">&nbsp;</div>
-!! html
-<div style="width:50% !important">&nbsp;</div>
-<div style="width:50% !important">&nbsp;</div>
-<div style="width:50% !important">&nbsp;</div>
-<div style="border&#160;: solid;">&nbsp;</div>
+!! html/php
+<div style="width:50% !important">&#160;</div>
+<div style="width:50% !important">&#160;</div>
+<div style="width:50% !important">&#160;</div>
+<div style="border&#160;: solid;">&#160;</div>
+
+!! html/parsoid
+<div style="width:50% !important" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
+<div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&amp;nbsp;!important"}}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
+<div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&amp;#160;!important"}}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
+<div style="border : solid;" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
!! end
@@ -18170,14 +19359,16 @@ percent-encoding and + signs in internal links (Bug 26410)
!! wikitext
[[User:+%]] [[Page+title%]]
[[%+]] [[%+|%20]] [[%+ ]] [[%+r]]
-[[%]] [[+]] [[image:%+abc%39|foo|[[bar]]]]
+[[%]] [[+]] [[File:%+abc%39|foo|[[bar]]]]
[[%33%45]] [[%33%45+]]
-!! html
+!! html/php
<p><a href="/index.php?title=User:%2B%25&amp;action=edit&amp;redlink=1" class="new" title="User:+% (page does not exist)">User:+%</a> <a href="/index.php?title=Page%2Btitle%25&amp;action=edit&amp;redlink=1" class="new" title="Page+title% (page does not exist)">Page+title%</a>
<a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%+</a> <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%20</a> <a href="/index.php?title=%25%2B&amp;action=edit&amp;redlink=1" class="new" title="%+ (page does not exist)">%+ </a> <a href="/index.php?title=%25%2Br&amp;action=edit&amp;redlink=1" class="new" title="%+r (page does not exist)">%+r</a>
<a href="/index.php?title=%25&amp;action=edit&amp;redlink=1" class="new" title="% (page does not exist)">%</a> <a href="/index.php?title=%2B&amp;action=edit&amp;redlink=1" class="new" title="+ (page does not exist)">+</a> <a href="/index.php?title=Special:Upload&amp;wpDestFile=%25%2Babc9" class="new" title="File:%+abc9">bar</a>
<a href="/index.php?title=3E&amp;action=edit&amp;redlink=1" class="new" title="3E (page does not exist)">3E</a> <a href="/index.php?title=3E%2B&amp;action=edit&amp;redlink=1" class="new" title="3E+ (page does not exist)">3E+</a>
</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="User:+%" title="User:+%">User:+%</a> <a rel="mw:WikiLink" href="Page+title%" title="Page+title%">Page+title%</a> <a rel="mw:WikiLink" href="%+" title="%+">%+</a> <a rel="mw:WikiLink" href="%+" title="%+">%20</a> <a rel="mw:WikiLink" href="%+" title="%+">%+ </a> <a rel="mw:WikiLink" href="%+r" title="%+r">%+r</a> <a rel="mw:WikiLink" href="%" title="%">%</a> <a rel="mw:WikiLink" href="+" title="+">+</a> <span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"[[bar]]"}'><a href="./File:%+abc9"><img resource="./File:%25+abc9" src="./Special:FilePath/%+abc9" height="220" width="220"/></a></span> <a rel="mw:WikiLink" href="3E" title="3E">3E</a> <a rel="mw:WikiLink" href="3E+" title="3E+">3E+</a></p>
!! end
!! test
@@ -18185,13 +19376,15 @@ Special characters in embedded file links (bug 27679)
!! wikitext
[[File:Contains & ampersand.jpg]]
[[File:Does not exist.jpg|Title with & ampersand]]
-!! html
+!! html/php
<p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Contains_%26_ampersand.jpg" class="new" title="File:Contains &amp; ampersand.jpg">File:Contains &amp; ampersand.jpg</a>
<a href="/index.php?title=Special:Upload&amp;wpDestFile=Does_not_exist.jpg" class="new" title="File:Does not exist.jpg">Title with &amp; ampersand</a>
</p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:Contains_&amp;_ampersand.jpg"><img resource="./File:Contains_&amp;_ampersand.jpg" src="./Special:FilePath/Contains_&amp;_ampersand.jpg" height="220" width="220"/></a></span>
+<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"Title with &amp; ampersand"}'><a href="./File:Does_not_exist.jpg"><img resource="./File:Does_not_exist.jpg" src="./Special:FilePath/Does_not_exist.jpg" height="220" width="220"/></a></span></p>
!! end
-
!! test
Confirm that 'apos' named character reference doesn't make it to output (not legal in HTML 4)
!! wikitext
@@ -18383,6 +19576,7 @@ __TOC__
<h2><span class="mw-headline" id="Quote"><blockquote>Quote</blockquote></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Main_Page&amp;action=edit&amp;section=1" title="Edit section: Quote">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
!! html+tidy
+<p></p>
<div id="toc" class="toc">
<div id="toctitle">
<h2>Contents</h2>
@@ -18391,6 +19585,7 @@ __TOC__
<li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
</ul>
</div>
+<p></p>
<h2><span class="mw-headline" id="Quote"></span></h2>
<blockquote>
<p><span class="mw-headline" id="Quote">Quote</span></p>
@@ -18439,6 +19634,7 @@ __TOC__
<h2><span class="mw-headline" id="Foo_Bar_2"><i>Foo</i> <blockquote>Bar</blockquote></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
!! html+tidy
+<p></p>
<div id="toc" class="toc">
<div id="toctitle">
<h2>Contents</h2>
@@ -18448,6 +19644,7 @@ __TOC__
<li class="toclevel-1 tocsection-2"><a href="#Foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext"><i>Foo</i> Bar</span></a></li>
</ul>
</div>
+<p></p>
<h2><span class="mw-headline" id="Foo_Bar"><i>Foo</i> <b>Bar</b></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
<h2><span class="mw-headline" id="Foo_Bar_2"><i>Foo</i></span></h2>
<blockquote>
@@ -18508,6 +19705,53 @@ __TOC__
!! end
+!! test
+Bug 72884: bdi element in ToC
+!! wikitext
+__TOC__
+== <bdi>test</bdi> ==
+!! html
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#test"><span class="tocnumber">1</span> <span class="toctext"><bdi>test</bdi></span></a></li>
+</ul>
+</div>
+
+<h2><span class="mw-headline" id="test"><bdi>test</bdi></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: test">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+
+!! end
+
+# Note that the html output does not have the <p></p>, but the
+# html+tidy output *does*. This is because the empty <p></p> is
+# removed by the sanitizer, but only when tidy is *not* enabled (!).
+!! test
+Empty <p> tag in TOC, removed by Sanitizer (T92892)
+!! wikitext
+__TOC__
+== x ==
+!! html
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
+</ul>
+</div>
+
+<h2><span class="mw-headline" id="x">x</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: x">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+
+!! html+tidy
+<p></p>
+<div id="toc" class="toc">
+<div id="toctitle">
+<h2>Contents</h2>
+</div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
+</ul>
+</div>
+<p></p>
+<h2><span class="mw-headline" id="x">x</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: x">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+!! end
+
!! article
MediaWiki:Bug32057
!! text
@@ -18677,7 +19921,7 @@ File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink
!! html
<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="/wiki/InterWikiLink"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/InterWikiLink"><img alt="galleryalt" 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>caption
</p>
@@ -18696,7 +19940,7 @@ File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
!! html
<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="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" 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>caption
</p>
@@ -18715,7 +19959,7 @@ File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascri
!! html
<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="/wiki/%22_onclick%3D%22alert(%27malicious_javascript_code!%27);"><img alt="galleryalt" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/%22_onclick%3D%22alert(%27malicious_javascript_code!%27);"><img alt="galleryalt" 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>caption
</p>
@@ -18734,7 +19978,7 @@ File:foobar.jpg|link=<
!! html
<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="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
<div class="gallerytext">
</div>
</div></li>
@@ -18858,13 +20102,13 @@ parsoid=wt2html,wt2wt
#### Parsoid-specific functionality tests
#### -----------------------------------------------------------------
-# Bug 63642: Formatting elt fixup is cleaned up.
+# Bug 63642/66749: Formatting elt fixup around images is cleaned up.
# We know wt2wt will fail, but we expect selser to pass.
# Due to the nature of our testing, wt2wt and selser tests will enter the
# blacklist and we'll catch selser regressions based on changes to the
# blacklist entries for selser tests.
!! test
-Bad treebuilder fixup of formatting elt is cleaned up
+1. Bad treebuilder fixup of formatting elt is cleaned up
!! options
parsoid=wt2html,wt2wt
!! wikitext
@@ -18877,12 +20121,28 @@ parsoid=wt2html,wt2wt
!! html/parsoid
<table>
<tbody><tr><td>
-<p><small></small></p>
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption><small>Test</small></figcaption></figure>
-<p></p></td></tr>
+<small>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a 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"/></a><figcaption>Test</figcaption></figure>
+</small>
+</td></tr>
</tbody></table>
!! end
+!! test
+2. Bad treebuilder fixup of formatting elt is cleaned up
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+'''foo[[File:Foobar.jpg|thumb|caption]]bar'''
+
+<small>[[Image:Foobar.jpg|right|300px]]</small>
+!! html/parsoid
+<p><b>foo</b></p>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption><b>caption</b></figcaption></figure>
+<p><b>bar</b></p>
+<small><figure class="mw-halign-right" typeof="mw:Image"><a 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="34" width="300"/></a></figure></small>
+!! end
+
#### ----------------------------------------------------------------
#### Parsoid-only testing of Parsoid's impl of <ref> and <references>
#### tags. Parsoid's output for these tags differs from that of the
@@ -18897,10 +20157,16 @@ parsoid
A <ref>foo</ref>
B <ref name="x">foo</ref>
C <ref name="y" />
+<references />
!! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
-B <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-2">[2]</a></span>
-C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"y"}}' id="cite_ref-y-3-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-y-3">[3]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-x_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-2"},"attrs":{"name":"x"}}'><a href="#cite_note-x-2">[2]</a></span>
+C <span about="#mwt6" class="reference" id="cite_ref-y_3-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"y"}}'><a href="#cite_note-y-3">[3]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+<li about="#cite_note-x-2" id="cite_note-x-2"><span rel="mw:referencedBy"><a href="#cite_ref-x_2-0">↑</a></span> <span id="mw-reference-text-cite_note-x-2" class="mw-reference-text">foo</span></li>
+<li about="#cite_note-y-3" id="cite_note-y-3"><span rel="mw:referencedBy"><a href="#cite_ref-y_3-0">↑</a></span> <span id="mw-reference-text-cite_note-y-3" class="mw-reference-text"></span></li>
+</ol>
!!end
!!test
@@ -18910,9 +20176,13 @@ parsoid
!! wikitext
A <ref name="x">foo</ref>
B <ref name="x" />
+<references />
!! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
-B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-x_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-1"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-x_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-x-1" id="cite_note-x-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-x_1-0">1.0</a> <a href="#cite_ref-x_1-1">1.1</a></span> <span id="mw-reference-text-cite_note-x-1" class="mw-reference-text">foo</span></li>
+</ol>
!!end
!!test
@@ -18923,21 +20193,29 @@ parsoid
A <ref name="x">foo</ref>
B <ref name=" x " />
C <ref name= x />
+<references />
!! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
-B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
-C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-2" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-x_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-1"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-x_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
+C <span about="#mwt6" class="reference" id="cite_ref-x_1-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-x-1" id="cite_note-x-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-x_1-0">1.0</a> <a href="#cite_ref-x_1-1">1.1</a> <a href="#cite_ref-x_1-2">1.2</a></span> <span id="mw-reference-text-cite_note-x-1" class="mw-reference-text">foo</span></li>
+</ol>
!!end
+# NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
!!test
Ref: 4. 'constructor' should be accepted as a valid ref-name
-(NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
!!options
parsoid
!! wikitext
A <ref name="constructor">foo</ref>
+<references />
!! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"constructor"}}' id="cite_ref-constructor-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-constructor-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-constructor_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-constructor-1"},"attrs":{"name":"constructor"}}'><a href="#cite_note-constructor-1">[1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-constructor-1" id="cite_note-constructor-1"><span rel="mw:referencedBy"><a href="#cite_ref-constructor_1-0">↑</a></span> <span id="mw-reference-text-cite_note-constructor-1" class="mw-reference-text">foo</span></li>
+</ol>
!!end
!!test
@@ -18951,11 +20229,11 @@ A <ref>
<references />
!! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" title=\"Bolded link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39; data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[55,76,null,null]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link" title="Bolded link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
-</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">This is a <b><a rel="mw:WikiLink" href="Bolded_link" title="Bolded link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
+</span></li>
</ol>
!!end
@@ -18972,13 +20250,13 @@ A <ref>
<references />
!! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n bar\n baz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo
bar
baz
-</li>
+</span></li>
</ol>
!!end
@@ -19002,10 +20280,10 @@ booz
<references />
!! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n\nbar\n\n\nbaz\n\n\n\nbooz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo
bar
@@ -19015,7 +20293,7 @@ baz
booz
-</li>
+</span></li>
</ol>
!!end
@@ -19028,9 +20306,9 @@ A <ref> foo {{echo|</ref> B C}}
<references />
!! html
-<p>A <span class="reference" data-mw="{&quot;name&quot;:&quot;ref&quot;,&quot;body&quot;:{&quot;html&quot;:&quot;foo <span typeof=\&quot;mw:Nowiki\&quot; data-parsoid='{\&quot;src\&quot;:\&quot;{{\&quot;,\&quot;dsr\&quot;:[12,14,0,0]}'>{{</span>echo|&quot;},&quot;attrs&quot;:{}}" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
-<ol class="references" typeof="mw:Extension/references" data-mw="{&quot;name&quot;:&quot;references&quot;,&quot;attrs&quot;:{}}">
-<li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <span typeof="mw:Nowiki">{{</span>echo|</li>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <span typeof="mw:Nowiki" data-parsoid='{"src":"{{","dsr":[12,14,0,0]}'>{{</span>echo|</span></li>
</ol>
!!end
@@ -19042,9 +20320,9 @@ parsoid
A <ref> foo <!--</ref> B C
<references />
!! html
-<p>A <span class="reference" data-mw='{"name":"ref","body":{"html":"foo &lt;!---->"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C</p>
-<ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
-<li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo </li>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C</p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <!----></span></li>
</ol>
!!end
@@ -19057,11 +20335,11 @@ A <ref> <b> foo </ref> B C
<references />
!! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"&lt;b data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[8,16,3,0]}&#39;> foo &lt;/b>"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref> &lt;b> foo &lt;/ref>"}'><a href="#cite_note-1">[1]</a></span> B C</p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C</p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> <b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></span></li>
</ol>
!!end
@@ -19072,9 +20350,14 @@ parsoid
!! wikitext
A <ref>foo</ref> B
C <ref>bar</ref> D
+<references />
!! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo&lt;/ref>"}'><a href="#cite_note-1">[1]</a></span> B
-C <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>bar&lt;/ref>"}'><a href="#cite_note-2">[2]</a></span> D</p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B
+C <span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2">[2]</a></span> D</p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
+</ol>
!!end
!!test
@@ -19088,15 +20371,18 @@ b<!--the newline at the end of this line stays inside the p-tag--> <ref />
<ref />
c
+<references />
!! html
<p><!--the newline at the end of this line moves out of the p-tag-->a</p>
-<p>b<!--the newline at the end of this line stays inside the p-tag--> <span about="#mwt1" class="reference" data-mw='{"name":"ref","attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
-<span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span></p>
-
+<p>b<!--the newline at the end of this line stays inside the p-tag--> <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+<span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-2">[2]</a></span></p>
<p>c</p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"></span></li>
+<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text"></span></li></ol>
!!end
!!test
@@ -19107,9 +20393,15 @@ parsoid
<ref>foo</ref> A
<ref>bar
</ref> B
+<references />
!! html
-<p><span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> A
-<span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"bar\n"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span> B</p>
+<p><span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> A
+<span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2">[2]</a></span> B</p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar
+</span></li>
+</ol>
!!end
!!test
@@ -19121,10 +20413,10 @@ parsoid
<references />
!! html
-<p><span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo &amp;lt;ref>bar&amp;lt;/ref> baz"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo &lt;ref>bar&lt;/ref> baz&lt;/ref>"}'><a href="#cite_note-1">[1]</a></span></p>
-
-<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo &lt;ref>bar&lt;/ref> baz</li>
+<p><span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+</p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo &lt;ref>bar&lt;/ref> baz</span></li>
</ol>
!!end
@@ -19138,10 +20430,10 @@ B1 <ref name="b" /> B2 <ref name="b">bar</ref>
<references />
!! html
-<p>A1 <span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span> A2 <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span>
-B1 <span about="#mwt7" class="reference" data-mw='{"name":"ref","attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span> B2 <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span></p>
+<p>A1 <span about="#mwt3" class="reference" id="cite_ref-a_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a-1"},"attrs":{"name":"a"}}'><a href="#cite_note-a-1">[1]</a></span> A2 <span about="#mwt4" class="reference" id="cite_ref-a_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="#cite_note-a-1">[1]</a></span>
+B1 <span about="#mwt7" class="reference" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span> B2 <span about="#mwt8" class="reference" id="cite_ref-b_2-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-b-2"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span></p>
-<ol about="#mwt10" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a-1-0">1.0</a> <a href="#cite_ref-a-1-1">1.1</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy">↑ <a href="#cite_ref-b-2-0">2.0</a> <a href="#cite_ref-b-2-1">2.1</a></span> bar</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a_1-0">1.0</a> <a href="#cite_ref-a_1-1">1.1</a></span> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy">↑ <a href="#cite_ref-b_2-0">2.0</a> <a href="#cite_ref-b_2-1">2.1</a></span> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
</ol>
!!end
@@ -19155,10 +20447,78 @@ A <ref >foo</ref >
<references />
!! html
-<p>A <span class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
+!!end
+
+!!test
+Ref: 17. Generate valid HTML5 id/about attributes
+!!options
+parsoid
+!!wikitext
+<ref name="a b">foo</ref>
+
+<references />
+!!html
+<p><span class="reference" id="cite_ref-a_b_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a_b-1"},"attrs":{"name":"a b"}}'><a href="#cite_note-a_b-1">[1]</a></span>
+</p>
+
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-a_b-1" id="cite_note-a_b-1"><span rel="mw:referencedBy"><a href="#cite_ref-a_b_1-0">↑</a></span> <span id="mw-reference-text-cite_note-a_b-1" class="mw-reference-text">foo</span></li>
+</ol>
+!!end
+
+!!test
+Ref: 18. T58916: Extension attributes should be parsed as plain text
+!!options
+parsoid
+!!wikitext
+<ref name="{{echo|a}}">foo</ref>
+
+<references />
+!!html
+<p><span class="reference" id="cite_ref-.7B.7Becho.7Ca.7D.7D_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-.7B.7Becho.7Ca.7D.7D-1"},"attrs":{"name":"{{echo|a}}"}}'><a href="#cite_note-.7B.7Becho.7Ca.7D.7D-1">[1]</a></span>
+</p>
+
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-.7B.7Becho.7Ca.7D.7D-1" id="cite_note-.7B.7Becho.7Ca.7D.7D-1"><span rel="mw:referencedBy"><a href="#cite_ref-.7B.7Becho.7Ca.7D.7D_1-0">↑</a></span> <span id="mw-reference-text-cite_note-.7B.7Becho.7Ca.7D.7D-1" class="mw-reference-text">foo</span></li>
+</ol>
+!!end
+
+!!test
+Ref: 19. ref-tags with identical name encodings should get identical indexes
+!!options
+parsoid
+!! wikitext
+1 <ref name="a & b">foo</ref> 2 <ref name="a &amp; b" />
+
+<references />
+!! html
+<p>1 <span about="#mwt3" class="reference" id="cite_ref-a_.26_b_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a_.26_b-1"},"attrs":{"name":"a &amp; b"}}'><a href="#cite_note-a_.26_b-1">[1]</a></span> 2 <span about="#mwt4" class="reference" id="cite_ref-a_.26_b_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a &amp;amp; b"}}'><a href="#cite_note-a_.26_b-1">[1]</a></span>
+</p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-a_.26_b-1" id="cite_note-a_.26_b-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a_.26_b_1-0">1.0</a> <a href="#cite_ref-a_.26_b_1-1">1.1</a></span> <span id="mw-reference-text-cite_note-a_.26_b-1" class="mw-reference-text">foo</span></li>
+</ol>
+!!end
-<ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
-<li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
+!!test
+Ref: 20. ref-tags with identical names but different content should keep it
+!!options
+parsoid
+!! wikitext
+A <ref name="foo">Foo one</ref>
+B <ref name="foo">Foo two</ref>
+C <ref name="foo" />
+
+<references />
+!! html
+<p>A <span about="#mwt2" class="reference" id="cite_ref-foo_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-foo-1"},"attrs":{"name":"foo"}}'><a href="#cite_note-foo-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-foo_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"Foo two"},"attrs":{"name":"foo"}}'><a href="#cite_note-foo-1">[1]</a></span>
+C <span about="#mwt6" class="reference" id="cite_ref-foo_1-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"foo"}}'><a href="#cite_note-foo-1">[1]</a></span></p>
+
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-foo-1" id="cite_note-foo-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-foo_1-0">1.0</a> <a href="#cite_ref-foo_1-1">1.1</a> <a href="#cite_ref-foo_1-2">1.2</a></span> <span id="mw-reference-text-cite_note-foo-1" class="mw-reference-text">Foo one</span></li>
+</ol>
!!end
!!test
@@ -19168,7 +20528,7 @@ parsoid
!! wikitext
<references />
!! html
-<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
!!end
!!test
@@ -19178,13 +20538,24 @@ parsoid
!! wikitext
A <ref group="a">foo</ref>
B <ref group="b">bar</ref>
+C <ref>baz</ref>
<references group="a" />
+<references />
+<references group="b" />
!! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"b"}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[b 1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{"group":"a"}}'><a href="#cite_note-1">[a 1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{"group":"b"}}'><a href="#cite_note-2">[b 1]</a></span>
+C <span class="reference" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-3"},"attrs":{}}'><a href="#cite_note-3">[1]</a></span></p>
-<ol about="#mwt6" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{"group":"a"}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+</ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3">↑</a></span> <span id="mw-reference-text-cite_note-3" class="mw-reference-text">baz</span></li>
+</ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt12" data-mw='{"name":"references","attrs":{"group":"b"}}'>
+<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
</ol>
!!end
@@ -19201,14 +20572,15 @@ B <ref>bar</ref>
<references />
!! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-<ol about="#mwt4" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
</ol>
-<p>B <span about="#mwt6" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[1]</a></span></p>
+<p>B <span about="#mwt6" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
-<ol about="#mwt8" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> bar</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
</ol>
!!end
@@ -19226,15 +20598,15 @@ C <ref>cfoo</ref>
<references />
!! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"afoo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bfoo"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"<ref>bfoo</ref>"}'><a href="#cite_note-2">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{"group":"a"}}'><a href="#cite_note-1">[a 1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
-<ol about="#mwt6" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> afoo</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">afoo</span></li>
</ol>
-<p>C <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}' id="cite_ref-3-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-3">[2]</a></span></p>
+<p>C <span about="#mwt8" class="reference" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-3"},"attrs":{}}'><a href="#cite_note-3">[2]</a></span></p>
-<ol about="#mwt10" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> bfoo</li><li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3-0">↑</a></span> cfoo</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bfoo</span></li><li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3">↑</a></span> <span id="mw-reference-text-cite_note-3" class="mw-reference-text">cfoo</span></li>
</ol>
!!end
@@ -19251,13 +20623,11 @@ B <ref name="b">bar</ref>
This should just get lost.
</references>
!! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"a\" />"}'><a href="#cite_note-a-1">[1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"b\">bar&lt;/ref>"}'><a href="#cite_note-b-2">[2]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-a_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="#cite_note-a-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-b-2"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references>\n&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.\n&lt;/references>"}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"a\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&lt;a href=\"#cite_note-a-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'>
-<li about="#cite_note-a-1" id="cite_note-a-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-a-1-0">↑</a></span> foo</li>
-<li about="#cite_note-b-2" id="cite_note-b-2" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> bar</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[59,82,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-a-1\"},\"attrs\":{\"name\":\"a\"}}&#39;>&lt;a href=\"#cite_note-a-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="#cite_ref-a_1-0">↑</a></span> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b_2-0">↑</a></span> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
</ol>
!!end
@@ -19268,7 +20638,8 @@ parsoid
!! wikitext
<ref>Foo</ref> {{echo|<references />}}
!! html
-<span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"Foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> <ol class="references" typeof="mw:Extension/references mw:Transclusion" about="#mwt4" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;references />"}},"i":0}}]}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> Foo</li></ol>
+<p><span about="#mwt3" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p> <ol class="references" typeof="mw:Extension/references mw:Transclusion" about="#mwt4" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;references />"}},"i":0}}]}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">Foo</span></li>
+</ol>
!!end
!! test
@@ -19285,22 +20656,81 @@ B <ref group="X" name="b" />
<ref name="b">foo</ref>
</references>
!! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo bar for a"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo bar for a&lt;/ref>"}'><a href="#cite_note-1" data-parsoid="{}">[1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"group":"X","name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref group=\"X\" name=\"b\" />"}'><a href="#cite_note-b-2" data-parsoid="{}">[X 1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"group":"X","name":"b"}}'><a href="#cite_note-b-2">[X 1]</a></span>
+</p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-1-0" data-parsoid="{}">↑</a></span> foo bar for a</li></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo bar for a</span></li>
+</ol>
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-parsoid='{"src":"&lt;references group=\"X\">\n&lt;ref name=\"b\">foo&lt;/ref>\n&lt;/references>","group":"X"}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"b\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&lt;a href=\"#cite_note-b-2\">[X 1]&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'><li about="#cite_note-b-2" id="cite_note-b-2" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-b-2-0" data-parsoid="{}">↑</a></span> foo</li></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[96,119,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-b-2\"},\"attrs\":{\"name\":\"b\"}}&#39;>&lt;a href=\"#cite_note-b-2\">[X 1]&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'>
+<li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b_2-0">↑</a></span> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">foo</span></li>
+</ol>
!! end
!! test
+References: 8. T88019: Remove <meta>s from templates inside <ref> that's itself inside a template
+!! options
+parsoid
+!! wikitext
+X{{echo|<ref>foo {{echo|<b>bar</b>}} and {{echo|baz}} boo</ref>}}
+<references />
+!! html
+<p>X<span about="#mwt2" class="reference" 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 {{echo|&lt;b>bar&lt;/b>}} and {{echo|baz}} boo&lt;/ref>"}},"i":0}}]}'><a href="#cite_note-1">[1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt7" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <b data-parsoid='{"stx":"html"}'>bar</b> and baz boo</span></li>
+</ol>
+!!end
+
+# This test only works in wt2html now as the <references /> are always generated
+# unless selser is active. Once T72722 is fixed, we should add a changes test
+# here to ensure that unrelated changes don't add the new <references /> in
+# wt2wt.
+!! test
+References: 9. Generate missing references list at the end
+!! options
+parsoid
+!! wikitext
+A <ref>foo</ref>
+B <ref group="inexistent">bar</ref>
+!! html
+<p>A <span class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B <span class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{"group":"inexistent"}}'><a href="#cite_note-2">[inexistent 1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+</ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{"group":"inexistent"}}'>
+<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
+</ol>
+!! end
+
+!! test
+References: 10. New <references/> shouldn't be added for unrelated edits.
+!! options
+parsoid={
+ "modes": ["selser"],
+ "changes": [["#x", "remove"]],
+ "selser": "noauto"
+}
+!! wikitext
+Unrelated text<span id="x"> that's going to disappear</span>.
+A <ref>foo</ref>
+!! wikitext/edited
+Unrelated text.
+A <ref>foo</ref>
+!!end
+
+!! test
Entities in ref name
!! options
parsoid
!! wikitext
<ref name="test &amp; me">hi</ref>
+<references />
!! html
-<p data-parsoid='{}'><span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"hi"},"attrs":{"name":"test &amp; me"}}' id="cite_ref-test &amp; me-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"test &amp;amp; me\">hi&lt;/ref>"}'><a href="#cite_note-test &amp; me-1" data-parsoid="{}">[1]</a></span></p>
+<p><span about="#mwt2" class="reference" id="cite_ref-test_.26_me_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-test_.26_me-1"},"attrs":{"name":"test &amp;amp; me"}}'><a href="#cite_note-test_.26_me-1">[1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-test_.26_me-1" id="cite_note-test_.26_me-1"><span rel="mw:referencedBy"><a href="#cite_ref-test_.26_me_1-0">↑</a></span> <span id="mw-reference-text-cite_note-test_.26_me-1" class="mw-reference-text">hi</span></li>
+</ol>
!! end
# This test is wt2html only because we're permitting the serializer to produce
@@ -19314,11 +20744,9 @@ a<ref>foo</ref>
<references>
!! html
-<p data-parsoid='{}'>a<span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo&lt;/ref>"}'><a href="#cite_note-1" data-parsoid="{}">[1]</a></span></p>
-
-
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-parsoid='{"src":"&lt;references>"}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-1-0" data-parsoid="{}">↑</a></span> foo</li></ol>
+<p>a<span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
!! end
!! test
@@ -19333,6 +20761,85 @@ foo<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw
!! end
#### ----------------------------------------------------------------
+#### Parsoid-only testing of Parsoid's impl of LST
+#### Not implemented yet, see
+#### https://www.mediawiki.org/wiki/Parsoid/HTML_based_LST
+#### ----------------------------------------------------------------
+
+!!test
+LST Sections: 1. Simple section start and end
+!! wikitext
+<section begin="2011-05-16" />
+<section end="2014-04-10 (MW 1.23wmf22)" />
+!! html/parsoid
+<p><meta typeof="mw:Extension/LabeledSectionTransclusion/begin" content="2011-05-16"/>
+<meta typeof="mw:Extension/LabeledSectionTransclusion/end" content="2014-04-10 (MW 1.23wmf22)"/></p>
+!! end
+
+#--------- Test stripping of empty nodes in template content ----------
+!!test
+Empty LI and TR nodes should be stripped from template content
+!!wikitext
+{{EmptyLITest}}
+{{EmptyTRTest}}
+!!html/parsoid
+<ul about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyLITest","href":"./Template:EmptyLITest"},"params":{},"i":0}}]}'>
+<li>a</li>
+<li>b</li>
+</ul>
+<table about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRTest","href":"./Template:EmptyTRTest"},"params":{},"i":0}}]}'>
+<tbody>
+<tr>
+<td>foo</td>
+</tr>
+<tr>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
+!!end
+
+!!test
+Empty LI and TR nodes should not be stripped from top-level content
+!!wikitext
+* a
+*
+* b
+{|
+|-
+|-
+|foo
+|}
+!!html/parsoid
+<ul>
+<li> a</li>
+<li></li>
+<li> b</li>
+</ul>
+<table>
+<tbody>
+<tr></tr>
+<tr>
+<td>foo</td>
+</tr>
+</tbody>
+</table>
+!!end
+
+!!test
+Empty TR nodes should not be stripped if they have any attributes set
+!!wikitext
+{{EmptyTRWithHTMLAttrTest}}
+!!html/parsoid
+<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
+<tr align="center"></tr>
+<tr><td>foo</td></tr>
+<tr align="center"></tr>
+<tr><td>bar</td></tr>
+</table>
+!!end
+
+#### ----------------------------------------------------------------
#### The following section of tests are primarily to test
#### wikitext escaping capabilities of Parsoid. Given that
#### escaping can be done any number of ways, the wikitext (input)
@@ -19376,11 +20883,22 @@ parsoid
<p>=foo<i>a</i><span typeof="mw:Nowiki">=</span></p>
!!end
+# New headings and existing headings are handled differently
!! test
Headings: 1. Nested inside html
-(New headings and existing headings are handled differently)
!! options
parsoid=html2wt
+!! html
+<h1>=foo=</h1>
+<h2>=foo=</h2>
+<h3>=foo=</h3>
+
+<h1 data-parsoid=''>=foo=</h1>
+<h2 data-parsoid=''>=foo=</h2>
+<h3 data-parsoid=''>=foo=</h3>
+<h4 data-parsoid=''>=foo=</h4>
+<h5 data-parsoid=''>=foo=</h5>
+<h6 data-parsoid=''>=foo=</h6>
!! wikitext
= =foo= =
@@ -19395,23 +20913,16 @@ parsoid=html2wt
=====<nowiki>=foo=</nowiki>=====
======<nowiki>=foo=</nowiki>======
-!! html
-<h1>=foo=</h1>
-<h2>=foo=</h2>
-<h3>=foo=</h3>
-
-<h1 data-parsoid='{}'>=foo=</h1>
-<h2 data-parsoid='{}'>=foo=</h2>
-<h3 data-parsoid='{}'>=foo=</h3>
-<h4 data-parsoid='{}'>=foo=</h4>
-<h5 data-parsoid='{}'>=foo=</h5>
-<h6 data-parsoid='{}'>=foo=</h6>
!!end
!! test
Headings: 2. Outside heading nest on a single line <h1>foo</h1>*bar
!! options
parsoid=html2wt
+!! html
+<h1>foo</h1>*bar
+<h1>foo</h1>=bar
+<h1>foo</h1>=bar=
!! wikitext
= foo =
<nowiki>*</nowiki>bar
@@ -19421,26 +20932,20 @@ parsoid=html2wt
= foo =
<nowiki>=bar=</nowiki>
-!! html
-<h1>foo</h1>*bar
-<h1>foo</h1>=bar
-<h1>foo</h1>=bar=
!!end
!! test
Headings: 3. Nested inside html with wikitext split by html tags
!! options
-parsoid=html2wt
+parsoid=html2wt,wt2wt
!! wikitext
= ='''bold'''<nowiki>foo=</nowiki> =
-!! html
-<h1>=<b>bold</b><span typeof="mw:Nowiki">foo=</span></h1>
+!! html/parsoid
+<h1>=<b>bold</b>foo=</h1>
!!end
!! test
Headings: 4a. No escaping needed (testing just h1 and h2)
-!! options
-parsoid=html2wt
!! wikitext
= =foo =
@@ -19454,33 +20959,33 @@ parsoid=html2wt
== foo= ==
-= ''=''foo= =
+= = =
-= <nowiki>=</nowiki> =
-!! html
+= ''=''foo= =
+!! html/parsoid
<h1>=foo</h1>
<h1>foo=</h1>
<h1> =foo= </h1>
<h1>=foo= bar</h1>
<h2>=foo</h2>
<h2>foo=</h2>
+<h1>=</h1>
<h1><i>=</i>foo=</h1>
-<h1><span typeof="mw:Nowiki">=</span></h1>
!!end
!! test
Headings: 4b. No escaping needed (inside p-tags)
!! options
parsoid=html2wt
-!! wikitext
-===
-=foo= x
-=foo= <s></s>
!! html
<p>===
=foo= x
=foo= <s></s>
</p>
+!! wikitext
+===
+=foo= x
+=foo= <s></s>
!!end
!! test
@@ -19584,12 +21089,30 @@ parsoid
Headings: 6d. Heading chars in SOL context (No escaping needed)
!! options
parsoid=html2wt
-!! wikitext
-=a=<div>b</div>
!! html
=a=<div>b</div>
+!! wikitext
+=a=<div>b</div>
!!end
+!! test
+Headings: 7. Insert a newline between new content and headings
+!! options
+parsoid=html2wt
+!! html
+<h2>NEW</h2>
+<p>new</p>
+<h2 data-parsoid='{"dsr":[0,5,2,2]}'>A</h2>
+<p data-parsoid='{"dsr":[6,7,0,0]}'>a</p>
+!! wikitext
+== NEW ==
+new
+
+==A==
+a
+
+!! end
+
#### --------------- Lists ---------------
#### 0. Outside nests (*foo, etc.)
#### 1. Nested inside html <ul><li>*foo</li></ul>
@@ -19714,33 +21237,36 @@ Lists: 5. No unnecessary escapes
!! wikitext
* bar <span><nowiki>[[foo]]</nowiki></span>
-*=bar <span><nowiki>[[foo]]</nowiki></span>
+* =bar <span><nowiki>[[foo]]</nowiki></span>
-*[[bar <span><nowiki>[[foo]]</nowiki></span>
+* [[bar <span><nowiki>[[foo]]</nowiki></span>
-*]]bar <span><nowiki>[[foo]]</nowiki></span>
+* ]]bar <span><nowiki>[[foo]]</nowiki></span>
-*=bar <span>foo]]</span>=
+* =bar <span>foo]]</span>=
* <s></s>: a
+
+* ''* foo''
!! html
<ul><li> bar <span>[[foo]]</span></li></ul>
-<ul><li>=bar <span>[[foo]]</span></li></ul>
-<ul><li>[[bar <span>[[foo]]</span></li></ul>
-<ul><li>]]bar <span>[[foo]]</span></li></ul>
-<ul><li>=bar <span>foo]]</span>=</li></ul>
+<ul><li> =bar <span>[[foo]]</span></li></ul>
+<ul><li> [[bar <span>[[foo]]</span></li></ul>
+<ul><li> ]]bar <span>[[foo]]</span></li></ul>
+<ul><li> =bar <span>foo]]</span>=</li></ul>
<ul><li> <s></s>: a</li></ul>
+<ul><li> <i>* foo</i></li></ul>
!!end
!! test
Lists: 6. Escape bullets in SOL position
!! options
-parsoid
-!! wikitext
-<!--cmt--><nowiki>*foo</nowiki>
+parsoid=html2wt
!! html
-<p><!--cmt--><span typeof="mw:Nowiki">*foo</span></p>
+<p><!--cmt-->*foo</p>
+!! wikitext
+<!--cmt--><nowiki>*</nowiki>foo
!!end
!! test
@@ -19754,22 +21280,33 @@ a
</p>
!!end
+!! test
+Lists: 8. Escape colons only if not present in tags
+!! options
+parsoid=html2wt
+!! html
+<dl><dt>a:b<i>c:d</i></dt></dl>
+!! wikitext
+; <nowiki>a:b</nowiki>''c:d''
+!! end
+
#### --------------- HRs ---------------
#### 1. Single line
#### -----------------------------------
!! test
HRs: 1. Single line
-!! options
-parsoid
!! wikitext
----<nowiki>----</nowiki>
----=foo=
----*foo
-!! html
-<hr><span typeof="mw:Nowiki">----</span>
-<hr>=foo=
-<hr>*foo
+!! html+tidy
+<hr />
+<p>----</p>
+<hr />
+<p>=foo=</p>
+<hr />
+<p>*foo</p>
!! end
#### --------------- Tables ---------------
@@ -19833,127 +21370,196 @@ Tables: 1d. No escaping needed
Tables: 2a. Nested in td
!! options
parsoid=html2wt
+!! html/parsoid
+<table><tbody><tr>
+<td>foo|bar</td></tr>
+<tr><td>x<div>a|b</div></td>
+</tbody></table>
!! wikitext
{|
|<nowiki>foo|bar</nowiki>
|-
|x<div><nowiki>a|b</nowiki></div>
|}
-!! html
-<table><tbody><tr>
-<td>foo|bar</td></tr>
-<tr><td>x<div>a|b</div></td>
-</tbody></table>
+!! html/php+tidy
+<table>
+<tr>
+<td>foo|bar</td>
+</tr>
+<tr>
+<td>x
+<div>a|b</div>
+</td>
+</tr>
+</table>
!! end
!! test
Tables: 2b. Nested in td
!! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<table><tbody><tr>
+<td>foo||bar</td>
+<td>a<i>b||c</i></td>
+<td>a<i><div>b||c</div></i></td>
+</tr></tbody></table>
!! wikitext
{|
|<nowiki>foo||bar</nowiki>
-|''it''<nowiki>foo||bar</nowiki>
+|a''<nowiki>b||c</nowiki>''
+|a''<div><nowiki>b||c</nowiki></div>''
|}
-!! html
-<table><tbody><tr>
-<td><span typeof="mw:Nowiki">foo||bar</span></td>
-<td><i>it</i><span typeof="mw:Nowiki">foo||bar</span></td></tr></tbody></table>
+!! html/php
+<table>
+<tr>
+<td>foo||bar
+</td>
+<td>a<i>b||c</i>
+</td>
+<td>a<i><div>b||c</div></i>
+</td></tr></table>
+
!! end
!! test
Tables: 2c. Nested in td -- no escaping needed
-!! options
-parsoid
!! wikitext
{|
+
|foo!!bar
|}
-!! html
-<table><tbody><tr><td>foo!!bar
-</td></tr></tbody></table>
+!! html/*
+<table>
+
+<tr>
+<td>foo!!bar
+</td></tr></table>
!! end
!! test
Tables: 3a. Nested in th
-!! options
-parsoid
!! wikitext
{|
+
!foo!bar
|}
-!! html
-<table><tbody><tr><th>foo!bar
-</th></tr></tbody></table>
+!! html/*
+<table>
+
+<tr>
+<th>foo!bar
+</th></tr></table>
!! end
!! test
Tables: 3b. Nested in th
!! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<table><tbody>
+<tr><th>foo!!bar</th>
+<th><i>foo|bar</i></th>
+<th><i>foo!!bar</i></th>
+<th><i><span>foo!!bar</span></i></th>
+</tr></tbody></table>
!! wikitext
{|
!<nowiki>foo!!bar</nowiki>
+!''<nowiki>foo|bar</nowiki>''
+!''<nowiki>foo!!bar</nowiki>''
+!''<span><nowiki>foo!!bar</nowiki></span>''
|}
-!! html
+!! html/php
<table>
-<tbody><tr><th><span typeof="mw:Nowiki">foo!!bar</span></th></tr>
-</tbody></table>
+<tr>
+<th>foo!!bar
+</th>
+<th><i>foo|bar</i>
+</th>
+<th><i>foo!!bar</i>
+</th>
+<th><i><span>foo!!bar</span></i>
+</th></tr></table>
+
!! end
!! test
-Tables: 3c. Nested in th -- no escaping needed
+Tables: 3c. Nested in th
!! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<table><tbody>
+<tr><th>foo||bar</th>
+<th><span typeof="mw:Nowiki">foo||bar</span></th>
+</tr></tbody></table>
!! wikitext
{|
!<nowiki>foo||bar</nowiki>
+!<nowiki>foo||bar</nowiki>
|}
-!! html
-<table><tbody><tr>
-<th><span typeof="mw:Nowiki">foo||bar</span></th></tr></tbody></table>
+!! html/php
+<table>
+<tr>
+<th>foo||bar
+</th>
+<th>foo||bar
+</th></tr></table>
+
!! end
!! test
Tables: 4a. Escape -
!! options
-parsoid
+parsoid=html2wt
+!! html/*
+<table>
+
+<tr>
+<th>-bar
+</th></tr>
+<tr>
+<td>-bar
+</td></tr></table>
+
!! wikitext
{|
+
!-bar
+
|-
|<nowiki>-bar</nowiki>
|}
-!! html
-<table><tbody>
-<tr><th>-bar</th></tr>
-<tr>
-<td><span typeof="mw:Nowiki">-bar</span></td></tr></tbody></table>
!! end
!! test
Tables: 4b. Escape +
!! options
-parsoid
+parsoid=html2wt
+!! html/*
+<table>
+
+<tr>
+<th>+bar
+</th></tr>
+<tr>
+<td>+bar
+</td></tr></table>
+
!! wikitext
{|
+
!+bar
+
|-
|<nowiki>+bar</nowiki>
|}
-!! html
-<table><tbody>
-<tr><th>+bar</th></tr>
-<tr>
-<td><span typeof="mw:Nowiki">+bar</span></td></tr></tbody></table>
!! end
!! test
Tables: 4c. No escaping needed
-!! options
-parsoid
!! wikitext
{|
|foo-bar
@@ -19970,7 +21576,31 @@ bar|baz
|x
<div>a|b</div>
|}
-!! html
+!! html/php
+<table>
+<tr>
+<td>foo-bar
+</td>
+<td>foo+bar
+</td></tr>
+<tr>
+<td><i>foo</i>-bar
+</td>
+<td><i>foo</i>+bar
+</td></tr>
+<tr>
+<td>foo
+<p>bar|baz
++bar
+-bar
+</p>
+</td></tr>
+<tr>
+<td>x
+<div>a|b</div>
+</td></tr></table>
+
+!! html/parsoid
<table><tbody>
<tr><td>foo-bar</td><td>foo+bar</td></tr>
<tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
@@ -19985,15 +21615,23 @@ bar|baz
!! test
Tables: 4d. No escaping needed
-!! options
-parsoid
!! wikitext
{|
|[[Foo]]-bar
||+1
||-2
|}
-!! html
+!! html/php
+<table>
+<tr>
+<td><a href="/wiki/Foo" title="Foo">Foo</a>-bar
+</td>
+<td>+1
+</td>
+<td>-2
+</td></tr></table>
+
+!! html/parsoid
<table>
<tbody><tr><td><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>-bar</td>
<td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
@@ -20026,23 +21664,39 @@ parsoid=wt2html
#### 5. Extlinks: No escapes needed
#### --------------------------------------
!! test
-Links 1. Quote marks in link text
-!! options
-parsoid
+Links 1. WikiLinks: No escapes needed
!! wikitext
-[[Foo|Foo<nowiki>''boo''</nowiki>]]
-!! html
-<a rel="mw:WikiLink" href="Foo">Foo''boo''</a>
+[[Foo|Foo''boo'']]
+[[Foo|[Foobar]]]
+[[Foo|x [Foobar] x]]
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">Foo<i>boo</i></a>
+<a href="/wiki/Foo" title="Foo">[Foobar]</a>
+<a href="/wiki/Foo" title="Foo">x [Foobar] x</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Foo" title="Foo">Foo<i>boo</i></a>
+<a rel="mw:WikiLink" href="Foo" title="Foo">[Foobar]</a>
+<a rel="mw:WikiLink" href="Foo" title="Foo">x [Foobar] x</a></p>
!! end
!! test
Links 2. WikiLinks: Escapes needed
!! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<a href="Foo" rel="mw:WikiLink">Foobar]</a>
+<a href="Foo" rel="mw:WikiLink">x [http://google.com g] x</a>
+<a href="Foo" rel="mw:WikiLink">[[Bar]]</a>
+<a href="Foo" rel="mw:WikiLink">x [[Bar]] x</a>
+<a href="Foo" rel="mw:WikiLink">|Bar</a>
+<a href="Foo" rel="mw:WikiLink">]]bar</a>
+<a href="Foo" rel="mw:WikiLink">[[bar</a>
+<a href="Foo" rel="mw:WikiLink">x [[ y</a>
+<a href="Foo" rel="mw:WikiLink">x ]] y</a>
+<a href="Foo" rel="mw:WikiLink">x ]] y [[ z</a>
!! wikitext
-[[Foo|[Foobar]]]
[[Foo|<nowiki>Foobar]</nowiki>]]
-[[Foo|x [Foobar] x]]
[[Foo|x <nowiki>[http://google.com g]</nowiki> x]]
[[Foo|<nowiki>[[Bar]]</nowiki>]]
[[Foo|<nowiki>x [[Bar]] x</nowiki>]]
@@ -20052,37 +21706,43 @@ parsoid
[[Foo|<nowiki>x [[ y</nowiki>]]
[[Foo|<nowiki>x ]] y</nowiki>]]
[[Foo|<nowiki>x ]] y [[ z</nowiki>]]
-!! html
-<a href="Foo" rel="mw:WikiLink">[Foobar]</a>
-<a href="Foo" rel="mw:WikiLink">Foobar]</a>
-<a href="Foo" rel="mw:WikiLink">x [Foobar] x</a>
-<a href="Foo" rel="mw:WikiLink">x [http://google.com g] x</a>
-<a href="Foo" rel="mw:WikiLink">[[Bar]]</a>
-<a href="Foo" rel="mw:WikiLink">x [[Bar]] x</a>
-<a href="Foo" rel="mw:WikiLink">|Bar</a>
-<a href="Foo" rel="mw:WikiLink">]]bar</a>
-<a href="Foo" rel="mw:WikiLink">[[bar</a>
-<a href="Foo" rel="mw:WikiLink">x [[ y</a>
-<a href="Foo" rel="mw:WikiLink">x ]] y</a>
-<a href="Foo" rel="mw:WikiLink">x ]] y [[ z</a>
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">Foobar]</a>
+<a href="/wiki/Foo" title="Foo">x [http://google.com g] x</a>
+<a href="/wiki/Foo" title="Foo">[[Bar]]</a>
+<a href="/wiki/Foo" title="Foo">x [[Bar]] x</a>
+<a href="/wiki/Foo" title="Foo">|Bar</a>
+<a href="/wiki/Foo" title="Foo">]]bar</a>
+<a href="/wiki/Foo" title="Foo">[[bar</a>
+<a href="/wiki/Foo" title="Foo">x [[ y</a>
+<a href="/wiki/Foo" title="Foo">x ]] y</a>
+<a href="/wiki/Foo" title="Foo">x ]] y [[ z</a>
+</p>
!! end
!! test
Links 3. WikiLinks: No escapes needed
-!! options
-parsoid
!! wikitext
[[Foo|[Foobar]]
[[Foo|foo|bar]]
-!! html
-<a href="Foo" rel="mw:WikiLink">[Foobar</a>
-<a href="Foo" rel="mw:WikiLink">foo|bar</a>
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">[Foobar</a>
+<a href="/wiki/Foo" title="Foo">foo|bar</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Foo">[Foobar</a>
+<a rel="mw:WikiLink" href="Foo" title="Foo">foo|bar</a></p>
!! end
!! test
Links 4. ExtLinks: Escapes needed
!! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://google.com">[google]</a>
+<a rel="mw:ExtLink" href="http://google.com">google]</a></p>
+<p>[http://google.com]</p>
+<p>[http://google.com google]</p>
!! wikitext
[http://google.com <nowiki>[google]</nowiki>]
[http://google.com <nowiki>google]</nowiki>]
@@ -20091,21 +21751,23 @@ parsoid
<nowiki>[http://google.com google]</nowiki>
-!! html
-<p><a href="http://google.com" rel="mw:ExtLink">[google]</a>
-<a href="http://google.com" rel="mw:ExtLink">google]</a></p>
-<p>[http://google.com]</p>
-<p>[http://google.com google]</p>
+!! html/php
+<p><a rel="nofollow" class="external text" href="http://google.com">[google]</a>
+<a rel="nofollow" class="external text" href="http://google.com">google]</a>
+</p><p>[http://google.com]
+</p><p>[http://google.com google]
+</p>
!! end
!! test
Links 5. ExtLinks: No escapes needed
-!! options
-parsoid
!! wikitext
[http://google.com [google]
-!! html
-<a href="http://google.com" rel="mw:ExtLink">[google</a>
+!! html/php
+<p><a rel="nofollow" class="external text" href="http://google.com">[google</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://google.com">[google</a></p>
!! end
!! test
@@ -20162,61 +21824,90 @@ y
(http://example.com) foo
http://example.com,
http://example.com, foo
+!! html/php
+<p>x
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>
+y
+"<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>"
+(<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
+(<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>) foo
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>,
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>, foo
+</p>
!! end
-## Parsoid currently fails wt2html on this one!
!! test
Links 7b. Don't add spurious <nowiki/>s between text-nodes and url-links (bug 64300)
!! html/parsoid
-<p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.,;:!?</p>
+<p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.,;:!?\
+-<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>:</p>
!! wikitext
-http://example.com.,;:!?
+http://example.com.,;:!?\
+-http://example.com:
+!! html/php
+<p><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>.,;:!?\
+-<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>:
+</p>
!! end
!! test
Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (bug 64300)
!! html/parsoid
-<p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4</p>
+<p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4
+<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
+X<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y</p>
!! wikitext
RFC 123<nowiki/>4
+RFC 123<nowiki/>y
+X<nowiki/>RFC 123<nowiki/>y
!! end
!! test
Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (bug 64300)
!! html/parsoid
-<p>x<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
-X<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
-<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>?foo
+<p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>?foo
<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>&amp;foo
+-<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>-
</p>
!! wikitext
-xRFC 123y
-XRFC 123y
RFC 123?foo
RFC 123&foo
+-RFC 123-
+!! html/php
+<p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc123">RFC 123</a>?foo
+<a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc123">RFC 123</a>&amp;foo
+-<a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc123">RFC 123</a>-
+</p>
!! end
!! test
Links 10. Add <nowiki/>s between text-nodes and PMID-links when required (bug 64300)
!! html/parsoid
<p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>4
+<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
+X<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
!! wikitext
PMID 123<nowiki/>4
+PMID 123<nowiki/>y
+X<nowiki/>PMID 123<nowiki/>y
!! end
!! test
Links 11. Don't add spurious <nowiki/>s between text-nodes and PMID-links (bug 64300)
!! html/parsoid
-<p>x<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
-X<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
-<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>?foo
+<p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>?foo
<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>&foo
+-<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>-
</p>
!! wikitext
-xPMID 123y
-XPMID 123y
PMID 123?foo
PMID 123&foo
+-PMID 123-
+!! html/php
+<p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>?foo
+<a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>&amp;foo
+-<a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract">PMID 123</a>-
+</p>
!! end
!! test
@@ -20224,20 +21915,47 @@ Links 12. Add <nowiki/>s between text-nodes and ISBN-links when required (bug 64
!! html/parsoid
<p><a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>1
<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>x
-<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
+a<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
</p>
!! wikitext
ISBN 1234567890<nowiki/>1
ISBN 1234567890<nowiki/>x
-ISBN 1234567890<nowiki/>b
+a<nowiki/>ISBN 1234567890<nowiki/>b
!! end
!! test
-Links 12. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (bug 64300)
+Links 13. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (bug 64300)
!! html/parsoid
-<p><a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
+<p>-<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
+!! wikitext
+-ISBN 1234567890's
+!! html/php
+<p>-<a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>'s
+</p>
+!! end
+
+!! test
+Links 14. Protect link-like plain text. (Parsoid bug T78425)
+!! options
+parsoid=html2wt
+!! html/*
+<p>this is not a link: http://example.com
+</p>
+!! wikitext
+this is not a link: <nowiki>http://example.com</nowiki>
+!! end
+
+!! test
+Links 15. Link trails can't become link prefixes.
+!! options
+language=is
!! wikitext
-ISBN 1234567890's
+[[Söfnuður]]-[[00]]
+!! html/php
+<p><a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">Söfnuður-</a><a href="/wiki/00" title="00">00</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður" data-parsoid='{"stx":"simple","tail":"-"}'>Söfnuður-</a><a rel="mw:WikiLink" href="00" title="00">00</a></p>
!! end
#### --------------- Quotes ---------------
@@ -20247,28 +21965,31 @@ ISBN 1234567890's
#### 4. No escaping needed
#### --------------------------------------
!! test
-1. Quotes inside <b> and <i>
+1a. Quotes inside <b> and <i>
!! options
parsoid=html2wt,wt2wt
!! wikitext
-''<nowiki>'foo'</nowiki>''
+''<nowiki/>'foo'''
''<nowiki>''foo''</nowiki>''
''<nowiki>'''foo'''</nowiki>''
''foo''<nowiki/>'s
-'''<nowiki>'foo'</nowiki>'''
+'''<nowiki/>'foo''''
'''<nowiki>''foo''</nowiki>'''
'''<nowiki>'''foo'''</nowiki>'''
-'''<nowiki>foo'</nowiki>''<nowiki>bar'</nowiki>''baz'''
+'''foo'<nowiki/>''bar'<nowiki/>''baz'''
'''foo'''<nowiki/>'s
'''foo''
''foo''<nowiki/>'
-'<nowiki/>''foo''<nowiki/>'
+''foo'''<nowiki/>'
+'''foo''<nowiki/>'
''''foo'''
'''foo'''<nowiki/>'
-'<nowiki/>'''foo'''<nowiki/>'
+''''foo'''<nowiki/>'
''fools'<span> errand</span>''
''<span>fool</span>'s errand''
-!! html
+'<nowiki/>''foo'' bar '''baz''
+a|!*#-:;+-~[]{}b'''x''
+!! html/*
<p><i>'foo'</i>
<i>''foo''</i>
<i>'''foo'''</i>
@@ -20280,12 +22001,42 @@ parsoid=html2wt,wt2wt
<b>foo</b>'s
'<i>foo</i>
<i>foo</i>'
+<i>foo'</i>'
'<i>foo</i>'
'<b>foo</b>
<b>foo</b>'
-'<b>foo</b>'</p>
+'<b>foo</b>'
<i>fools'<span> errand</span></i>
<i><span>fool</span>'s errand</i>
+'<i>foo</i> bar '<i>baz</i>
+a|!*#-:;+-~[]{}b'<i>x</i>
+</p>
+!! end
+
+!! test
+1b. Quotes inside <b> and <i> with other tags on same line
+!! options
+parsoid=html2wt,wt2wt
+!! wikitext
+'''a'' foo ''[[bar]]''
+''a''' foo ''[[bar]]''
+''a''' foo '''{{echo|[[bar]]}}'''
+[[foo]] x'''[[bar]]''
+'''foo'' <ref>test</ref>
+'''foo'' <div title="name">test</div>
+'''foo'' and <br> bar
+<references />
+!! html
+'<i>a</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
+<i>a'</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
+<i>a'</i> foo <b><a rel="mw:WikiLink" href="Bar" title="Bar" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[bar]]"}},"i":0}}]}'>bar</a></b>
+<a rel="mw:WikiLink" href="Foo" title="Foo">foo</a> x'<i><a href="Bar" rel="mw:WikiLink" title="Bar">bar</a></i>
+'<i>foo</i> <span class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+'<i>foo</i> <div title="name">test</div>
+'<i>foo</i> and <br data-parsoid='{"stx":"html","noClose":true}'/> bar
+<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">test</span></li>
+</ol>
!! end
!! test
@@ -20300,10 +22051,10 @@ parsoid=html2wt,wt2wt
</p>
!! end
+# FIXME: Escaping one or both of [[ and ]] is also acceptable --
+# this is one of the shortcomings of this format
!! test
3. Link fragments inside <i> and <b>
-(FIXME: Escaping one or both of [[ and ]] is also acceptable --
- this is one of the shortcomings of this format)
!! wikitext
''[[foo''<nowiki>]]</nowiki>
@@ -20319,9 +22070,11 @@ parsoid=html2wt,wt2wt
!! wikitext
'<span>''bar''</span>'
'<span>'''bar'''</span>'
+'a:b'foo
!! html
<p>'<span><i>bar</i></span>'
'<span><b>bar</b></span>'
+'a:b'foo
</p>
!! end
@@ -20397,8 +22150,13 @@ parsoid
!! wikitext
foo <ref>''a''
b</ref>
+<references />
!! html
-<p>foo <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"&lt;i data-parsoid=&#39;{\"dsr\":[9,14,2,2]}&#39;>a&lt;/i>\n b"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>foo <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><i data-parsoid='{"dsr":[9,14,2,2]}'>a</i>
+ b</span></li>
+</ol>
!! end
!! test
@@ -20426,9 +22184,8 @@ parsoid
parsoid
!! wikitext
[[File:Foobar.jpg|thumb|caption]]
-!! html
!! html/parsoid
- <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+ <figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="25" width="220"/></a><figcaption>caption</figcaption></figure>
!! end
!! test
@@ -20446,22 +22203,22 @@ parsoid=html2wt
1. Valid behavior switches should be escaped
!! options
parsoid=html2wt
-!! wikitext
-<nowiki>__TOC__</nowiki>
-''<nowiki>__TOC__</nowiki>''
!! html
__TOC__
<i>__TOC__</i>
+!! wikitext
+<nowiki>__TOC__</nowiki>
+''<nowiki>__TOC__</nowiki>''
!! end
!! test
2. Invalid behavior switches should not be escaped
!! options
parsoid=html2wt
-!! wikitext
+!! html
__TOO__
__|__
-!! html
+!! wikitext
__TOO__
__|__
!! end
@@ -20485,12 +22242,14 @@ parsoid
!! test
2. other tags
!! wikitext
-<nowiki><div>foo</div>
-<div style="color:red">foo</div></nowiki>
+* <nowiki><div>foo</div></nowiki>
+* <nowiki><div style="color:red">foo</div></nowiki>
+* <nowiki><td></nowiki>
!! html
-<p>&lt;div&gt;foo&lt;/div&gt;
-&lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;
-</p>
+<ul><li> &lt;div&gt;foo&lt;/div&gt;</li>
+<li> &lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;</li>
+<li> &lt;td&gt;</li></ul>
+
!! end
!! test
@@ -20570,18 +22329,6 @@ a>b
</p>
!! end
-
-# This was a bug in the PHP parser (see bug 17663 and its dups,
-# https://bugzilla.wikimedia.org/show_bug.cgi?id=17663)
-!! test
-Tag names followed by punctuation should not be recognized as tags
-!! wikitext
-<s.ome> text
-!! html
-<p>&lt;s.ome&gt; text
-</p>
-!! end
-
!! test
HTML tag with necessary entities in attributes
!! wikitext
@@ -20650,7 +22397,7 @@ Table with broken attribute value quoting on consecutive lines
| title="Hello world|Foo
| style="color:red|Bar
|}
-!! html
+!! html/php
<table>
<tr>
<td>Foo
@@ -20658,18 +22405,7 @@ Table with broken attribute value quoting on consecutive lines
<td>Bar
</td></tr></table>
-!! end
-
-!! test
-Parsoid-only: Table with broken attribute value quoting on consecutive lines
-!! options
-parsoid
-!! wikitext
-{|
-| title="Hello world|Foo
-| style="color:red|Bar
-|}
-!! html
+!! html/parsoid
<table><tbody>
<tr>
<td title="Hello world">Foo
@@ -20783,9 +22519,9 @@ RT-ed inter-element separators should be valid separators
!!end
+# Parsoid-only since PHP parser relies on Tidy for correct output
!!test
Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
-(Parsoid-only since PHP parser relies on Tidy for correct output)
!!options
parsoid
!! wikitext
@@ -20798,6 +22534,14 @@ bar
|<small>foo<small>
|}
!! html
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo
+<p>bar</p></small></td></tr>
+</tbody></table>
+
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo<small data-parsoid='{"stx":"html","autoInsertedEnd":true}'></small></small></td></tr>
+</tbody></table>
!!end
!!test
@@ -20838,6 +22582,29 @@ Indented table with an empty td
!!end
+## We have some newline diffs RT-ing this edge case
+## and it is not important enough -- we seem to be emitting
+## at most 2 newlines after a </tr> and this is unrelated to
+## the issue from T85627 that this is testing.
+!!test
+Indented table with blank lines in between (T85627)
+!! options
+parsoid=wt2html
+!! wikitext
+ {|
+ |foo
+
+
+ |}
+!! html
+<table>
+
+<tr>
+<td>foo
+</td></tr></table>
+
+!!end
+
!!test
Indented block & table
!! wikitext
@@ -20874,15 +22641,15 @@ Indent and comment before table row
</td></tr></table>
!! html/parsoid
-<table data-parsoid='{}'>
- <!--hi--><tbody data-parsoid='{}'><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
+<table>
+ <!--hi--><tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
<td data-parsoid='{"autoInsertedEnd":true}'> there</td></tr>
</tbody></table>
!! end
+# Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext
!!test
Empty TR followed by a template-generated TR
-(Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext)
!!options
parsoid
!! wikitext
@@ -20925,32 +22692,29 @@ parsoid
!!test
Multi-line image caption generated by templates with/without trailing newlines
-!!options
-parsoid
!! wikitext
-[[File:foo.jpg|thumb|300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]]
-[[File:foo.jpg|thumb|300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}\n\n]]
-!! html
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Foo.jpg" class="new" title="File:Foo.jpg">File:Foo.jpg</a> <div class="thumbcaption">foo\nA\nB\nC</div></div></div>
-<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Foo.jpg" class="new" title="File:Foo.jpg">File:Foo.jpg</a> <div class="thumbcaption">foo\nA\nB\nC\n\n</div></div></div>
-
+[[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]]
+[[File:Foobar.jpg|thumb|300x300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}\n\n]]
+!! html/parsoid
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a><figcaption>foo\n<span about="#mwt9" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt10" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt11" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span></figcaption></figure>
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a><figcaption>foo\n<span about="#mwt12" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"A"}},"i":0}}]}'>A</span>\n<span about="#mwt13" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"B"}},"i":0}}]}'>B</span>\n<span about="#mwt14" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"C"}},"i":0}}]}'>C</span>\n\n</figcaption></figure>
!!end
!! test
New element inserted (without intervening newlines) after an old sol-transparent node should serialize correctly
!! options
parsoid=html2wt
+!! html
+<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>foo&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><p>new para</p>
+
+<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{}'/><h1>new heading</h1>
!! wikitext
<includeonly>foo</includeonly>
new para
-[[./Category:Foo]]
+[[Category:Foo]]
= new heading =
-!! html
-<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>foo&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><p>new para</p>
-
-<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid=''/><h1>new heading</h1>
!! end
## PHP emits broken html for this, and since this is primarily
@@ -20993,20 +22757,20 @@ plain text
!!end
!!test
-1. Ensure fostered text content is wrapped in spans
+1. Ensure fostered text content is wrapped in element nodes
!!options
parsoid=wt2html
!! wikitext
<table>hi</table><table>ho</table>
!! html
-<span>hi</span>
+<p>hi</p>
<table></table>
-<span>ho</span>
+<p>ho</p>
<table></table>
!!end
!!test
-2. Ensure fostered text content is wrapped in spans (traps regressions around fostered marker on the span getting lost)
+2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)
!!options
parsoid=wt2html,wt2wt
!! wikitext
@@ -21015,11 +22779,9 @@ parsoid=wt2html,wt2wt
<td> a
</table>
!! html
-<span> || ||</span>
-<table>
-<tbody>
-<tr>
-<td> a</td></tr>
+<p> || ||
+</p><table>
+<tbody><tr><td> a</td></tr>
</tbody></table>
!!end
@@ -21030,14 +22792,7 @@ parsoid=wt2html,wt2wt
!! wikitext
{{echo|<table>foo<tr><td>bar</td></tr></table>}}
!! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
-<table>foo
-<tr>
-<td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span>
-<table>
-<tbody>
-<tr>
-<td>bar</td></tr></tbody></table>
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<table>foo<tr><td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span><table><tbody><tr><td>bar</td></tr></tbody></table>
!!end
!!test
@@ -21047,14 +22802,13 @@ parsoid=wt2wt,wt2html
!! wikitext
<table>{{echo|foo<tr><td>bar</td></tr>}}</table>
!! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo
-<tr>
-<td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</span>
-<table>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo<tr><td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</p><table>
<tbody>
<tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
!!end
!!test
@@ -21064,15 +22818,14 @@ parsoid=wt2wt,wt2html
!! wikitext
<table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
!! html
-<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div>
-<tr>
-<td>bar</td></tr></table>&quot;]}">foo</div>
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div><tr><td>bar</td></tr></table>&quot;]}">foo</div>
<table>
<tbody>
<tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
!!end
!!test
@@ -21082,17 +22835,16 @@ parsoid=wt2wt,wt2html
!! wikitext
<table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
!! html
-<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div>
-<tr>
-<td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
-<p>foo</p></div>
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
+<p>foo</p>
+</div>
<table>
<tbody>
<tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
!!end
!!test
@@ -21102,17 +22854,16 @@ parsoid=wt2wt,wt2html
!! wikitext
<table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
!! html
-<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div>
-<tr>
-<td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
-<p>foo</p></div>
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
+<p>foo</p>
+</div>
<table>
<tbody>
<tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
!!end
!!test
@@ -21122,18 +22873,18 @@ parsoid=wt2wt,wt2html
!! wikitext
<table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
!! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<tr>
-<td>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</span>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</p>
<table>
<tbody>
<tr>
<td>
<div>
-<p>foo</p></div></td></tr></tbody></table>
+<p>foo</p>
+</div>
+</td>
+</tr>
+</tbody>
+</table>
!!end
!!test
@@ -21143,18 +22894,18 @@ parsoid=wt2wt,wt2html
!! wikitext
<table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
!! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<tr>
-<td>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</p>
<table>
<tbody>
<tr>
<td>
<div>
-<p>foo</p></div></td></tr></tbody></table>
+<p>foo</p>
+</div>
+</td>
+</tr>
+</tbody>
+</table>
<p>ok</p>
!!end
@@ -21165,14 +22916,14 @@ parsoid=wt2wt,wt2html
!! wikitext
<table>{{echo|<p>foo</p>}}<td>bar</td></table>
!! html
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
-<p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;
-<td>bar</td></table>&quot;]}">foo</p>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;<td>bar</td></table>&quot;]}">foo</p>
<table>
<tbody>
<tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
!!end
!!test
@@ -21186,11 +22937,13 @@ parsoid=wt2wt,wt2html
|b
|}
!! html
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a\n&quot;}},&quot;i&quot;:0}}]}">a</p><span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;{|&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;style&quot;:{&quot;wt&quot;:&quot;'color:red'&quot;}},&quot;i&quot;:0}},&quot;\n|-\n|b\n|}&quot;]}">{{{1}}}</span>
-<table>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a\n&quot;}},&quot;i&quot;:0}}]}">a</p><p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;{|&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;style&quot;:{&quot;wt&quot;:&quot;'color:red'&quot;}},&quot;i&quot;:0}},&quot;\n|-\n|b\n|}&quot;]}">{{{1}}}</p><table>
<tbody>
<tr>
-<td>b</td></tr></tbody></table>
+<td>b</td>
+</tr>
+</tbody>
+</table>
!!end
!!test
@@ -21200,8 +22953,7 @@ parsoid=wt2wt,wt2html
!! wikitext
<table>{{echo|hi</table>hello}}
!! html
-<span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1","spc":["","","",""]}]]}'>hi</span>
-<table about="#mwt2" data-parsoid='{"stx":"html"}'></table><span about="#mwt2" data-parsoid="{}">hello</span>
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1","spc":["","","",""]}]]}'>hi</p><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><p about="#mwt2">hello</p>
!!end
!!test
@@ -21216,7 +22968,7 @@ parsoid=wt2html,wt2wt
</div>
|}
!! html
-<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1" data-parsoid="{}">
+<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1">
</span>
<table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
@@ -21234,7 +22986,7 @@ Properly encapsulate empty-content transclusions in fosterable positions
}}
</table>
!! html/parsoid
-<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>\n",{"template":{"target":{"wt":"#if:","function":"#if"},"params":{"1":{"wt":"\n&lt;td>foo&lt;/td>\n"}},"i":0}},"\n&lt;/table>"]}' data-parsoid='{"stx":"html","pi":[[{"k":"1","spc":["","","",""]}]],"src":"&lt;table>\n{{#if:|\n&lt;td>foo&lt;/td>\n}}\n&lt;/table>"}'>
+<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>\n",{"template":{"target":{"wt":"#if:","function":"#if"},"params":{"1":{"wt":"\n&lt;td>foo&lt;/td>\n"}},"i":0}},"\n&lt;/table>"]}' data-parsoid='{"stx":"html","pi":[[{"k":"1","spc":["","","",""]}]]}'>
</table>
!! end
@@ -21243,12 +22995,23 @@ Properly encapsulate empty-content transclusions in fosterable positions
Support <object> element with .data attribute
!!options
parsoid=html2wt
-!! wikitext
-<object data="test.swf"></object>
!! html
<object data="test.swf"></object>
+!! wikitext
+<object data="test.swf"></object>
!!end
+!! test
+Don't block XML namespace declaration
+!! wikitext
+<span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">MediaWiki</span>
+!! html/php
+<p><span>MediaWiki</span>
+</p>
+!! html/parsoid
+<p><span xmlns:dct="http://purl.org/dc/terms/" data-x-property="dct:title" data-parsoid='{"stx":"html"}'>MediaWiki</span></p>
+!! end
+
# -----------------------------------------------------------------
# The following section of tests are primarily to spec requirements
# around serialization of new/edited content.
@@ -21256,15 +23019,101 @@ parsoid=html2wt
# All these tests are marked Parsoid html2wt and html2html only
# ----------------------------------------------------------------
+# 'mi' is a localinterwiki prefix as well as a language
!! test
Serialize interwiki links pointing to the current wiki as plain wiki links (bug 65869)
!! options
parsoid=html2wt
-language=es
+!! html
+<p><a rel="mw:ExtLink" href="http://mi.wikipedia.org/wiki/Foo">Foo</a></p>
!! wikitext
[[Foo]]
+!! end
+
+# See T93839
+!! test
+New wikilinks should be serialized properly
+!! options
+parsoid=html2wt
!! html
-<p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Foo">Foo</a></p>
+<a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{}'>Foo</a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>
+!! wikitext
+[[Foo]]
+[[Foo]]
+!! end
+
+!! test
+New wiki links (href variations)
+!! options
+parsoid=html2wt
+!! html
+<a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
+<a rel="mw:WikiLink" href="Foo_bar">Foo_bar</a>
+<a rel="mw:WikiLink" href="Foo bar">Foo_bar</a>
+<a rel="mw:WikiLink" href="./Toxine_bact%C3%A9rienne">Toxine bactérienne</a>
+!! wikitext
+[[Foo_bar]]
+[[Foo_bar]]
+[[Foo_bar]]
+[[Toxine bactérienne]]
+!! end
+
+!! test
+New wiki links (content string variations)
+!! options
+parsoid=html2wt
+!! html
+<a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
+<a rel="mw:WikiLink" href="./Foo_bar">Foo bar</a>
+<a rel="mw:WikiLink" href="./Foo_bar">./Foo_bar</a>
+!! wikitext
+[[Foo_bar]]
+[[Foo bar]]
+[[Foo_bar|./Foo_bar]]
+!! end
+
+!! test
+New category links (href variations)
+!! options
+parsoid=html2wt
+!! html
+<link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne" />
+<link rel="mw:PageProp/Category" href="./Category:Toxine_bact%C3%A9rienne" />
+<link rel="mw:PageProp/Category" href="Category:Toxine_bact%C3%A9rienne" />
+!! wikitext
+[[Category:Toxine bactérienne]]
+[[Category:Toxine bactérienne]]
+[[Category:Toxine bactérienne]]
+!! end
+
+!! test
+New sol transparent links don't need indent-pre nowiki protection
+!! options
+parsoid=html2wt
+language=de
+!! html
+ <link rel="mw:PageProp/redirect" href="./Main_Page">
+<!-- this is good --> <link rel="mw:PageProp/Category" href="./Category:Good" />
+<!-- this is great --> <link rel="mw:PageProp/Category" href="./Kategorie:Great" />
+!! wikitext
+ #WEITERLEITUNG [[Main Page]]
+<!-- this is good --> [[Category:Good]]
+<!-- this is great --> [[Kategorie:Great]]
+!! end
+
+!! test
+New interlanguage links (href variations)
+!! options
+parsoid=html2wt
+!! html
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine bactérienne" />
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bactérienne" />
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bact%C3%A9rienne" />
+!! wikitext
+[[es:Toxine bactérienne]]
+[[es:Toxine_bactérienne]]
+[[es:Toxine_bactérienne]]
!! end
!! test
@@ -21401,7 +23250,7 @@ parsoid
!! wikitext
[[File:Foobar.jpg|thumb|alt=|bar]]
!! html
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"alt","ak":"alt="},{"ck":"caption","ak":"bar"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img alt="" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"alt":"","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=","resource":"File:Foobar.jpg"}}'/></a><figcaption>bar</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"alt","ak":"alt="},{"ck":"caption","ak":"bar"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img alt="" 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":{"alt":"","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=","resource":"File:Foobar.jpg"}}'/></a><figcaption>bar</figcaption></figure>
!! end
#!! test
@@ -21409,37 +23258,34 @@ parsoid
#!! options
#parsoid=html2wt
#language=ar
-#!! input
+#!! html
+#<figure class="mw-default-size mw-halign-right" typeof="mw:Image/Thumb"><a href="Imagen:Foobar.jpg"><img resource="./Imagen:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="20" width="180"/></a></figure>
+#!! wikitext
#[[Imagen:Foobar.jpg|derecha|miniaturadeimagen]]
-#!! result
-#<figure class="mw-default-size mw-halign-right" typeof="mw:Image/Thumb"><a href="Imagen:Foobar.jpg"><img resource="./Imagen:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="20" width="180"/></a></figure>
#!! end
!! test
Image: Block level image should have \n before and after
-!! options
-parsoid
!! wikitext
123
[[File:Foobar.jpg|right|thumb|150x150px]]
456
-!! html
-<p>123</p><figure typeof="mw:Image/Thumb" class="mw-halign-right"><a href="./File:Foobar.png"><img src="http://192.168.142.128/mw/images/thumb/b/bc/Foobar.png/131px-Foobar.png" width="131" height="150" resource="./File:Foobar.png" data-parsoid='{"a":{"resource":"./File:Foobar.png","width":"131"},"sa":{"resource":"File:Foobar.png","width":"150"}}'></a></figure><p>456</p>
+!! html/parsoid
+<p>123</p>
+<figure class="mw-halign-right" typeof="mw:Image/Thumb"><a 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="17" width="150"/></a></figure>
+<p>456</p>
!!end
!! test
-Image: New block level image should have \n before and after (existing
-content)
-!! options
-parsoid
+Image: New block level image should have \n before and after (existing content)
!! wikitext
123
[[File:Foobar.jpg|right|thumb|150x150px]]
456
-!! html
-<p data-parsoid='{"dsr":[0,3,0,0]}'>123</p>
-<figure class="mw-halign-right" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"right","ak":"right"},{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"150x150px"}],"dsr":[4,45,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[6,43,null,null]}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/150px-Foobar.jpg" height="17" width="150" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"17","width":"150"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure>
-<p data-parsoid='{"dsr":[46,49,0,0]}'>456</p>
+!! html/parsoid
+<p>123</p>
+<figure class="mw-halign-right" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"right","ak":"right"},{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"150x150px"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/150px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="17" width="150" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"17","width":"150"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure>
+<p>456</p>
!!end
!! test
@@ -21451,7 +23297,9 @@ parsoid
[[File:Foobar.jpg|thumb|upright=0.5|caption]]
[[File:Foobar.jpg|thumb|500x500px|upright=0.5|caption]]
!! html
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="19" width="170"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="12" width="110"/></a><figcaption>caption</figcaption></figure><figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="57" width="500"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="19" width="170"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a 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="12" width="110"/></a><figcaption>caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb"><a 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="57" width="500"/></a><figcaption>caption</figcaption></figure>
!!end
!! test
@@ -21461,7 +23309,7 @@ parsoid
!! wikitext
[[File:Foobar.jpg|500x500px|upright=0.5|caption]]
!! html
-<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="57" width="500"/></a></span></p>
+<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a 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="57" width="500"/></a></span></p>
!!end
!! test
@@ -21470,7 +23318,7 @@ Image: from basic HTML (1)
parsoid=html2wt
!! html/parsoid
<span typeof="mw:Image">
- <img src="File:Foobar.jpg" width=100 height=100 alt="Alt">
+ <img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
</span>
!! wikitext
[[File:Foobar.jpg|link=|alt=Alt|100x100px]]
@@ -21481,7 +23329,7 @@ Image: from basic HTML (2)
!! options
parsoid=html2wt
!! html/parsoid
-<img src="File:Foobar.jpg" width=100 height=100 alt="Alt">
+<img src="./File:Foobar.jpg" width=100 height=100 alt="Alt">
!! wikitext
[[File:Foobar.jpg|link=|alt=Alt|100x100px]]
!! end
@@ -21491,7 +23339,7 @@ Image: from basic HTML (3)
!! options
parsoid=html2wt
!! html/parsoid
-<a href="Main"><img src="File:Foobar.jpg" width=100 height=100 alt="Alt"></a>
+<a href="Main"><img src="./File:Foobar.jpg" width=100 height=100 alt="Alt"></a>
!! wikitext
[[File:Foobar.jpg|link=Main|alt=Alt|100x100px]]
!! end
@@ -21501,7 +23349,7 @@ Image: from basic HTML (4)
!! options
parsoid=html2wt
!! html/parsoid
-<img src="File:Foobar.jpg">
+<img src="./File:Foobar.jpg">
!! wikitext
[[File:Foobar.jpg|link=]]
!! end
@@ -21510,28 +23358,41 @@ parsoid=html2wt
Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does)
!! options
parsoid=html2wt
-!! wikitext
-* foo
!! html
<ul>
<li><p>foo</p></li>
</ul>
+!! wikitext
+* foo
!! end
!! test
Lists: Serialize correctly even when list tags has unneeded whitespace between tags
!! options
parsoid=html2wt
-!! wikitext
-* foo
!! html
<ul> <li>foo</li></ul>
+!! wikitext
+* foo
!! end
!! test
Don't strip leading whitespace when handling indent-pre suppressing tags
!! options
parsoid=html2wt
+!! html
+<table>
+ <tr><td> indented row</td></tr>
+</table>
+<blockquote><p>
+ <b>This is very bold of you!</b>
+</p>
+<table><tr><td>
+ indented cell (no pre-wrapping!)
+</td></tr></table>
+</blockquote>
+<p>foo</p>
+ <div>bar</div>
!! wikitext
{|
| indented row
@@ -21546,19 +23407,6 @@ parsoid=html2wt
</blockquote>
foo
<div>bar</div>
-!! html
-<table>
- <tr><td> indented row</td></tr>
-</table>
-<blockquote><p>
- <b>This is very bold of you!</b>
-</p>
-<table><tr><td>
- indented cell (no pre-wrapping!)
-</td></tr></table>
-</blockquote>
-<p>foo</p>
- <div>bar</div>
!! end
!! test
@@ -21597,33 +23445,38 @@ foo
Lists: Add space after bullets
!! options
parsoid=html2wt
-!! wikitext
-* foo
-* bar
-* <span> baz</span>
!! html
<ul>
<li>foo</li>
<li> bar</li>
<li><span> baz</span></li>
</ul>
+!! wikitext
+* foo
+* bar
+* <span> baz</span>
!! end
!! test
Lists: Dont insert newlines in a serialized list item.
!! options
parsoid=html2wt
+!! html
+<ul><li>a<br>b</li><li>c</li></ul>
!! wikitext
* a<br>b
* c
-!! html
-<ul><li>a<br>b</li><li>c</li></ul>
!! end
!! test
Headings: Add space before/after == (Bug 51744)
!! options
parsoid=html2wt
+!! html
+<h2>foo</h2>
+<h2> bar</h2>
+<h2>baz </h2>
+<h2><span> baz</span></h2>
!! wikitext
== foo ==
@@ -21632,25 +23485,32 @@ parsoid=html2wt
== baz ==
== <span> baz</span> ==
-!! html
-<h2>foo</h2>
-<h2> bar</h2>
-<h2>baz </h2>
-<h2><span> baz</span></h2>
!! end
!! test
-Parsoid: Serialize positional parameters with = in them as named parameter
+Headings: Force metas to serialize before/after
!! options
parsoid=html2wt
+!! html
+<h2>hello there<link href="Category:A1" rel="mw:PageProp/Category" /></h2>
+<h2><link href="Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
+
+<h2><!--foo--> <link href="Category:A3" rel="mw:PageProp/Category" /> how goes it</h2>
!! wikitext
-{{echo|1 = f=oo}}
+== hello there ==
+[[Category:A1]]
-{{echo|1 = f=oo|2 = bar}}
+[[Category:A2]]
+== hi pal ==
-<!--Orig params with data-parsoid has heuristics for handling = chars-->
-<!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
-{{echo|<nowiki>f=oo</nowiki>|bar}}
+<!--foo--> [[Category:A3]]
+== how goes it ==
+!! end
+
+!! test
+Parsoid: Serialize positional parameters with = in them as named parameter
+!! options
+parsoid=html2wt
!! html
<p about="#mwt1" typeof="mw:Transclusion"
data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}},"i":0}}]}'>foo</p>
@@ -21661,12 +23521,37 @@ data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
<!--Orig params with data-parsoid has heuristics for handling = chars-->
<!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
<p data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]},{"k":"2","spc":["","","",""]}]]}' about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"},"2":{"wt":"bar"}},"i":0}}]}'>foo</p>
+!! wikitext
+{{echo|1 = f=oo}}
+
+{{echo|1 = f=oo|2 = bar}}
+
+<!--Orig params with data-parsoid has heuristics for handling = chars-->
+<!--FIXME: But maybe the heuristic needs fixing to apply to new params as well-->
+{{echo|<nowiki>f=oo</nowiki>|bar}}
+!! end
+
+!! test
+Parsoid: Serialize positional parameters with = in extlink as named parameter
+!! options
+parsoid=html2wt
+!! html
+<p><a rel="mw:ExtLink" href="http://stuff?is=ok" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://stuff?is=ok"}},"i":0}}]}'>http://stuff?is=ok</a></p>
+!! wikitext
+{{echo|1 = http://stuff?is=ok}}
!! end
!! test
Parsoid: Correctly serialize block-node children when they are a combination of text and p-nodes
!! options
parsoid=html2wt
+!! html
+<div>a<p>b</p></div>
+<div>a
+<p>b</p></div>
+<div>
+a
+<p>b</p></div>
!! wikitext
<div>a
b
@@ -21679,23 +23564,32 @@ a
b
</div>
-!! html
-<div>a<p>b</p></div>
-<div>a
-<p>b</p></div>
-<div>
-a
-<p>b</p></div>
!! end
!! test
Substrings resembling wikitext in hrefs should not get nowiki escapes
!! options
parsoid=html2wt
+!! html
+<a rel="mw:WikiLink" href="./Foo''bar''baz">Foo''bar''baz</a>
!! wikitext
[[Foo''bar''baz]]
+!! end
+
+!! test
+Enforce single-line context in the serializer
+!! options
+parsoid=html2wt
!! html
-<a rel="mw:WikiLink" href="./Foo''bar''baz">Foo''bar''baz</a>
+<h2>testing
+123</h2>
+
+<ul><li>asd
+sdf</li></ul>
+!! wikitext
+== testing 123 ==
+
+* asd sdf
!! end
#-----------------------------
@@ -21706,6 +23600,15 @@ parsoid=html2wt
1. I/B quote minimization: wikitext-only tags should be combined
!! options
parsoid=html2wt
+!! html
+<p><i>A</i><i>B</i></p>
+<p><b>A</b><b>B</b></p>
+<p><i>A</i><b><i>B</i></b></p>
+<p><b>A</b><i><b>B</b></i></p>
+<p><b>A</b><i><b>B</b><b>C</b></i><b>D</b></p>
+<p><i><b>A</b></i><i><b>B</b></i></p>
+<p><i><b>A</b></i><b><i>B</i></b></p>
+<p><b><i>A</i></b><i><b>B</b></i></p>
!! wikitext
''AB''
@@ -21722,57 +23625,78 @@ parsoid=html2wt
'''''AB'''''
'''''AB'''''
-!! html
-<p><i>A</i><i>B</i></p>
-<p><b>A</b><b>B</b></p>
-<p><i>A</i><b><i>B</i></b></p>
-<p><b>A</b><i><b>B</b></i></p>
-<p><b>A</b><i><b>B</b><b>C</b></i><b>D</b></p>
-<p><i><b>A</b></i><i><b>B</b></i></p>
-<p><i><b>A</b></i><b><i>B</i></b></p>
-<p><b><i>A</i></b><i><b>B</b></i></p>
!! end
!! test
2. I/B quote minimization: wikitext and html tags should not be combined
!! options
parsoid=html2wt
-!! wikitext
-''A''<i>B</i>
-
-''A'''''<i>B</i>'''
!! html
<p><i>A</i><i data-parsoid='{"stx":"html"}'>B</i></p>
<p><i>A</i><b><i data-parsoid='{"stx":"html"}'>B</i></b></p>
+!! wikitext
+''A''<i>B</i>
+
+''A''<nowiki/>'''<i>B</i>'''
!! end
!! test
3. I/B quote minimization: templated content stops minimization
!! options
parsoid=html2wt
+!! html
+<p><i>A</i><i about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;B&#39;&#39;"}},"i":0}}]}'>B</i>
+<p><i>A</i><b about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;&#39;&#39;&#39;B&#39;&#39;&#39;&#39;&#39;"}},"i":0}}]}'><i>B</i></b>
!! wikitext
''A''{{echo|''B''}}
''A''{{echo|'''''B'''''}}
-!! html
-<p><i>A</i><i about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;B&#39;&#39;"}},"i":0}}]}'>B</i>
-<p><i>A</i><b about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;&#39;&#39;&#39;B&#39;&#39;&#39;&#39;&#39;"}},"i":0}}]}'><i>B</i></b>
!! end
!! test
4. I/B quote minimization: new content should be mimimized with adjacent old content
!! options
parsoid=html2wt
+!! html
+<p><i>A</i><i>B</i></p>
+<p><b>A</b><b>B</b></p>
+<p><i>A</i><b><i>B</i></b></p>
!! wikitext
''AB''
'''AB'''
''A'''B'''''
-!! html
-<p><i>A</i><i data-parsoid='{}'>B</i></p>
-<p><b data-parsoid='{}'>A</b><b>B</b></p>
-<p><i>A</i><b data-parsoid='{}'><i data-parsoid='{}'>B</i></b></p>
+!! end
+
+!! test
+5a. Merge adjacent quote nodes if they've been edited
+!! options
+parsoid={
+ "modes": ["wt2wt", "selser"],
+ "changes": [
+ ["p", "contents", "remove", ":contains('b')"]
+ ]
+}
+!! wikitext
+''a''b''c''
+!! wikitext/edited
+''ac''
+!! end
+
+!! test
+5b. Merge adjacent quote nodes if they've been edited
+!! options
+parsoid={
+ "modes": ["wt2wt", "selser"],
+ "changes": [
+ ["#x", "remove"]
+ ]
+}
+!! wikitext
+''a''<span id="x">b</span>''c''
+!! wikitext/edited
+''ac''
!! end
#------------------------------------
@@ -21796,16 +23720,6 @@ parsoid=html2wt
Magic words
!! options
parsoid=html2wt
-!! wikitext
-__TOC__
-__NOTOC__
-__FORCETOC__
-__INDEX__
-__NOINDEX__
-__NOGALLERY__
-__NOEDITSECTION__
-__NOTITLECONVERT__
-__NOCONTENTCONVERT__
!! html
<meta property='mw:PageProp/toc' />
<meta property='mw:PageProp/notoc' />
@@ -21817,12 +23731,34 @@ __NOCONTENTCONVERT__
<meta property='mw:PageProp/notitleconvert' />
<meta property='mw:PageProp/nocontentconvert' />
<meta property='mw:PageProp/unknownproperty' />
+!! wikitext
+__TOC__
+__NOTOC__
+__FORCETOC__
+__INDEX__
+__NOINDEX__
+__NOGALLERY__
+__NOEDITSECTION__
+__NOTITLECONVERT__
+__NOCONTENTCONVERT__
!! end
!! test
Consecutive <pre>s should not get merged
!! options
parsoid=html2wt,html2html
+!! html
+<pre>a</pre><pre>b</pre>
+
+<pre>c
+</pre><pre>
+d</pre>
+
+<pre>e
+
+</pre><pre>
+
+f</pre>
!! wikitext
a
@@ -21837,58 +23773,209 @@ parsoid=html2wt,html2html
f
-!! html
-<pre>a</pre><pre>b</pre>
-
-<pre>c
-</pre><pre>
-d</pre>
-
-<pre>e
-
-</pre><pre>
-
-f</pre>
!! end
!! test
Edited ISBN links not serializable as ISBN links should serialize as wikilinks
!! options
parsoid=html2wt
-!! wikitext
-[[Special:BookSources/1234567890|ISBN 1234567895]]
!! html
<a rel="mw:ExtLink" href="./Special:BookSources/1234567890">ISBN 1234567895</a>
+!! wikitext
+[[Special:BookSources/1234567890|ISBN 1234567895]]
!! end
!! test
Edited RFC links not serializable as RFC links should serialize as extlinks
!! options
parsoid=html2wt
-!! wikitext
-[//tools.ietf.org/html/rfc123 New RFC]
!! html
<a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink">New RFC</a>
+!! wikitext
+[//tools.ietf.org/html/rfc123 New RFC]
!! end
!! test
Edited PMID links not serializable as PMID links should serialize as extlinks
!! options
parsoid=html2wt
-!! wikitext
-[//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract New PMID]
!! html
<a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink">New PMID</a>
+!! wikitext
+[//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract New PMID]
+!! end
+
+!! test
+WTS of autolinks with trailing/surrounding context
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a href="http://cscott.net">http://cscott.net</a><b>foo</b></p>
+<p><a href="http://cscott.net">http://cscott.net</a><b data-parsoid='{"stx":"html"}'>foo</b></p>
+<p><b><a href="http://cscott.net">http://cscott.net</a></b></p>
+<p><b><a href="http://cscott.net">http://cscott.net</a> </b></p>
+<p><b><a href="http://cscott.net">http://cscott.net</a>x</b></p>
+<p><a href="http://cscott.net">http://cscott.net</a>x</p>
+!! wikitext
+http://cscott.net<nowiki/>'''foo'''
+
+http://cscott.net<b>foo</b>
+
+'''http://cscott.net<nowiki/>'''
+
+'''http://cscott.net '''
+
+'''http://cscott.net<nowiki/>x'''
+
+http://cscott.net<nowiki/>x
+!! end
+
+!! test
+WTS of autolinks with nowikis (round-trip)
+!! wikitext
+x<nowiki/>http://cscott.net<nowiki/>x
+!! html/parsoid
+<p>x<a rel="mw:ExtLink" href="http://cscott.net">http://cscott.net</a>x</p>
+!! end
+
+# this is the "easy" test because it leaves in place all the
+# data-parsoid information indicating this is an autolink
+!! test
+WTS of autolinks with escapes (editing)
+!! options
+parsoid={
+ "modes": ["wt2wt"],
+ "changes": [
+ [ "meta", "remove" ]
+ ]
+}
+!! wikitext
+x<nowiki/>http://cscott.net<nowiki/>x
+!! wikitext/edited
+x<nowiki/>http://cscott.net<nowiki/>x
!! end
!! test
Edited Redirect link should emit a non-piped wikitext link
!! options
parsoid=html2wt
+!! html
+<link rel="mw:PageProp/redirect" href="Bar" data-parsoid='{"a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>
!! wikitext
#REDIRECT [[Bar]]
+!! end
+
+!! test
+T75121: Infer extension name from typeOf if data-mw is not present
+!! options
+parsoid=html2wt
+!! html
+<div typeOf="mw:Extension/foo"></div>
+!! wikitext
+<foo />
+!! end
+
+# Note that the <p> wrapping isn't present in PHP parser output
+# The important thing for this test is that P-wrapping doesn't
+# interfere with the <nowiki> protection for leading - in <td>
+# (which isn't necessary for <th>).
+!! test
+T88318: p-wrapped dash in table.
+!! options
+parsoid=html2wt,wt2wt
+!! html/parsoid
+<table><tbody>
+<tr><th><p>-</p></th><th><p>- </p></th></tr>
+<tr><td><p>-</p></td><td><p>- </p></td></tr>
+<tr><td><small>-</small></td><td><br/><p>-</p></td><td><br/>-</td></tr>
+</tbody></table>
+!! wikitext
+{|
+!-
+!-
+|-
+|<nowiki>-</nowiki>
+|<nowiki>- </nowiki>
+|-
+|<small>-</small>
+|<br>
+-
+|<br>
+-
+|}
+!! html/php+tidy
+<table>
+<tr>
+<th>-</th>
+<th>-</th>
+</tr>
+<tr>
+<td>-</td>
+<td>-</td>
+</tr>
+<tr>
+<td><small>-</small></td>
+<td><br />
+<p>-</p>
+</td>
+<td><br />
+<p>-</p>
+</td>
+</tr>
+</table>
+!! end
+
+!! test
+HTML id attribute with Parsoid-like element ids should not be serialized to wikitext
+!! options
+parsoid=html2wt
+!! html
+<table id='mwAb'>
+<td id='mwAc'>foo</td>
+<td id='serialize-this'>bar</td>
+</table>
+!! wikitext
+{|
+|foo
+| id="serialize-this" |bar
+|}
+!! end
+
+!! test
+Parsoid-like element ids should not be serialized to wikitext unless shadowed
+!! options
+parsoid=html2wt
!! html
-<link rel="mw:PageProp/redirect" href="Bar" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>
+<div id="mwAQ" data-parsoid='{"stx":"html","a":{"id":"mwAQ"},"sa":{"id":"hello"}}'>ok</div>
+!! wikitext
+<div id="hello">ok</div>
+!! end
+
+!! test
+WTS change modes
+!! options
+parsoid={
+ "modes": ["wt2wt"],
+ "changes": [
+ [ "#xyz", "before", "<b>before</b> stuff " ],
+ [ "#xyz", "after", " stuff <i>after</i>" ],
+ [ "#xyz", "html", "x <b>y</b> z" ]
+ ]
+}
+!! wikitext
+<span id="xyz">hello</span>
+!! wikitext/edited
+'''before''' stuff <span id="xyz">x '''y''' z</span> stuff ''after''
+!! end
+
+!! test
+Never serialize a-tag as html, regardless of what data-parsoid has to say
+!! options
+parsoid=html2wt
+!! html
+<a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"html"}'>Foo</a>
+!! wikitext
+[[Foo]]
!! end
# -----------------------------------------------------------------
@@ -21896,6 +23983,53 @@ parsoid=html2wt
# of new content
# -----------------------------------------------------------------
+# -----------------------------------------------------------------
+# The following section of tests are primarily to spec behavior of
+# the selective serializer. All these tests have manual selser
+# changes. The automated selser changes for all tests handle the
+# wide variation of changes, but these tests here capture specs
+# deterministically.
+# ----------------------------------------------------------------
+
+## T90517
+!! test
+1. Selser: New comments should not be lost
+!! options
+parsoid={
+ "modes": ["selser"],
+ "changes": [
+ [ "#a", "after", "<!--c1-->" ],
+ [ "#b", "before", "<!--c2-->" ]
+ ]
+}
+!! wikitext
+<span id="a">a</span>
+
+<span id="b">b</span>
+!! wikitext/edited
+<span id="a">a</span><!--c1-->
+
+<!--c2--><span id="b">b</span>
+!! end
+
+## T89383
+!! test
+2. Selser: Check for validity of DSR before using it
+!! options
+parsoid={
+ "modes": ["selser"],
+ "changes": [
+ [ "#a", "before", "<meta property='mw:PageProp/displaytitle' content='foo'>" ]
+ ]
+}
+!! wikitext
+<span id="a">a</span>
+!! wikitext/edited
+{{DISPLAYTITLE:foo}}
+<span id="a">a</span>
+!! end
+
+
TODO:
more images
more tables
diff --git a/tests/parser/parserTestsParserHook.php b/tests/parser/parserTestsParserHook.php
index c8b3e897..221fc79a 100644
--- a/tests/parser/parserTestsParserHook.php
+++ b/tests/parser/parserTestsParserHook.php
@@ -29,6 +29,7 @@ class ParserTestParserHook {
static function setup( &$parser ) {
$parser->setHook( 'tag', array( __CLASS__, 'dumpHook' ) );
+ $parser->setHook( 'tåg', array( __CLASS__, 'dumpHook' ) );
$parser->setHook( 'statictag', array( __CLASS__, 'staticTagHook' ) );
return true;
}
diff --git a/tests/parser/preprocess/All_system_messages.expected b/tests/parser/preprocess/All_system_messages.expected
index 078d8f0d..2ee805e0 100644
--- a/tests/parser/preprocess/All_system_messages.expected
+++ b/tests/parser/preprocess/All_system_messages.expected
@@ -2207,13 +2207,6 @@ Log in
&lt;/td&gt;&lt;td&gt;
<template lineStart="1"><title>int:Login</title></template>
&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Loginend&amp;action=edit loginend]&lt;br&gt;
-[[MediaWiki_talk:Loginend|Talk]]
-&lt;/td&gt;&lt;td&gt;
-&amp;amp;nbsp;
-&lt;/td&gt;&lt;td&gt;
-<template lineStart="1"><title>int:Loginend</title></template>
-&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Loginerror&amp;action=edit loginerror]&lt;br&gt;
[[MediaWiki_talk:Loginerror|Talk]]
&lt;/td&gt;&lt;td&gt;
diff --git a/tests/parser/preprocess/All_system_messages.txt b/tests/parser/preprocess/All_system_messages.txt
index 3c30da94..4a30f56f 100644
--- a/tests/parser/preprocess/All_system_messages.txt
+++ b/tests/parser/preprocess/All_system_messages.txt
@@ -2207,13 +2207,6 @@ Log in
</td><td>
{{int:Login}}
</td></tr><tr><td>
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Loginend&action=edit loginend]<br>
-[[MediaWiki_talk:Loginend|Talk]]
-</td><td>
-&amp;nbsp;
-</td><td>
-{{int:Loginend}}
-</td></tr><tr><td>
[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Loginerror&action=edit loginerror]<br>
[[MediaWiki_talk:Loginerror|Talk]]
</td><td>
diff --git a/tests/parserTests.php b/tests/parserTests.php
index 9965c438..5d21319b 100644
--- a/tests/parserTests.php
+++ b/tests/parserTests.php
@@ -70,10 +70,6 @@ if ( $wgDBtype == 'sqlite' ) {
}
}
-# There is a convention that the parser should never
-# refer to $wgTitle directly, but instead use the title
-# passed to it.
-$wgTitle = Title::newFromText( 'Parser test script do not use' );
$tester = new ParserTest( $options );
if ( isset( $options['file'] ) ) {
diff --git a/tests/phpunit/LessFileCompilationTest.php b/tests/phpunit/LessFileCompilationTest.php
index 71e0f4b2..df4690a4 100644
--- a/tests/phpunit/LessFileCompilationTest.php
+++ b/tests/phpunit/LessFileCompilationTest.php
@@ -38,7 +38,7 @@ class LessFileCompilationTest extends ResourceLoaderTestCase {
"$thisString must refer to a readable file"
);
- $rlContext = static::getResourceLoaderContext();
+ $rlContext = $this->getResourceLoaderContext();
// Bleh
$method = new ReflectionMethod( $this->module, 'getLessCompiler' );
diff --git a/tests/phpunit/Makefile b/tests/phpunit/Makefile
index c3e2a303..a33b86a3 100644
--- a/tests/phpunit/Makefile
+++ b/tests/phpunit/Makefile
@@ -1,4 +1,4 @@
-.PHONY: help test phpunit install coverage warning destructive parser noparser safe databaseless list-groups
+.PHONY: help test phpunit coverage warning destructive parser noparser safe databaseless list-groups
.DEFAULT: warning
SHELL = /bin/sh
@@ -35,9 +35,6 @@ destructive: phpunit
phpunit:
${PU}
-install:
- ./install-phpunit.sh
-
tap:
${PU} --tap
@@ -83,7 +80,7 @@ help:
# You will need the Xdebug PHP extension for the later.
# [no]parser Skip or only run Parser tests
#
- # list-groups List availabe Tests groups.
+ # list-groups List available Tests groups.
#
# Options:
# CONFIG_FILE Path to a PHPUnit configuration file (default: suite.xml)
diff --git a/tests/phpunit/MediaWikiTestCase.php b/tests/phpunit/MediaWikiTestCase.php
index 995853ea..72cac051 100644
--- a/tests/phpunit/MediaWikiTestCase.php
+++ b/tests/phpunit/MediaWikiTestCase.php
@@ -104,7 +104,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
ObjectCache::$instances[CACHE_DB] = new HashBagOStuff;
$needsResetDB = false;
- $logName = get_class( $this ) . '::' . $this->getName( false );
if ( $this->needsDB() ) {
// set up a DB connection for this test to use
@@ -117,34 +116,22 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
$this->checkDbIsSupported();
if ( !self::$dbSetup ) {
- wfProfileIn( $logName . ' (clone-db)' );
-
// switch to a temporary clone of the database
self::setupTestDB( $this->db, $this->dbPrefix() );
if ( ( $this->db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
$this->resetDB();
}
-
- wfProfileOut( $logName . ' (clone-db)' );
}
-
- wfProfileIn( $logName . ' (prepare-db)' );
$this->addCoreDBData();
$this->addDBData();
- wfProfileOut( $logName . ' (prepare-db)' );
-
$needsResetDB = true;
}
- wfProfileIn( $logName );
parent::run( $result );
- wfProfileOut( $logName );
if ( $needsResetDB ) {
- wfProfileIn( $logName . ' (reset-db)' );
$this->resetDB();
- wfProfileOut( $logName . ' (reset-db)' );
}
}
@@ -198,7 +185,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
}
protected function setUp() {
- wfProfileIn( __METHOD__ );
parent::setUp();
$this->called['setUp'] = true;
@@ -223,12 +209,15 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
$this->db->ignoreErrors( false );
}
- wfProfileOut( __METHOD__ );
+ DeferredUpdates::clearPendingUpdates();
+
}
- protected function tearDown() {
- wfProfileIn( __METHOD__ );
+ protected function addTmpFiles( $files ) {
+ $this->tmpFiles = array_merge( $this->tmpFiles, (array)$files );
+ }
+ protected function tearDown() {
$this->called['tearDown'] = true;
// Cleaning up temporary files
foreach ( $this->tmpFiles as $fileName ) {
@@ -271,7 +260,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
}
parent::tearDown();
- wfProfileOut( __METHOD__ );
}
/**
@@ -429,6 +417,35 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
}
/**
+ * Insert a new page.
+ *
+ * Should be called from addDBData().
+ *
+ * @since 1.25
+ * @param string $pageName Page name
+ * @param string $text Page's content
+ * @return array Title object and page id
+ */
+ protected function insertPage( $pageName, $text = 'Sample page for unit test.' ) {
+ $title = Title::newFromText( $pageName, 0 );
+
+ $user = User::newFromName( 'UTSysop' );
+ $comment = __METHOD__ . ': Sample page for unit test.';
+
+ // Avoid memory leak...?
+ // LinkCache::singleton()->clear();
+ // Maybe. But doing this absolutely breaks $title->isRedirect() when called during unit tests....
+
+ $page = WikiPage::factory( $title );
+ $page->doEditContent( ContentHandler::makeContent( $text, $title ), $comment, 0, false, $user );
+
+ return array(
+ 'title' => $title,
+ 'id' => $page->getId(),
+ );
+ }
+
+ /**
* Stub. If a test needs to add additional data to the database, it should
* implement this method and do so
*
@@ -453,7 +470,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
'page_namespace' => 0,
'page_title' => ' ',
'page_restrictions' => null,
- 'page_counter' => 0,
'page_is_redirect' => 0,
'page_is_new' => 0,
'page_random' => 0,
@@ -464,7 +480,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
User::resetIdByNameCache();
- //Make sysop user
+ // Make sysop user
$user = User::newFromName( 'UTSysop' );
if ( $user->idForName() == 0 ) {
@@ -476,7 +492,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
$user->saveSettings();
}
- //Make 1 page with 1 revision
+ // Make 1 page with 1 revision
$page = WikiPage::factory( Title::newFromText( 'UTPage' ) );
if ( $page->getId() == 0 ) {
$page->doEditContent(
@@ -484,7 +500,8 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
'UTPageSummary',
EDIT_NEW,
false,
- User::newFromName( 'UTSysop' ) );
+ $user
+ );
}
}
@@ -603,7 +620,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
if ( isset( $compatibility[$func] ) ) {
return call_user_func_array( array( $this, $compatibility[$func] ), $args );
} else {
- throw new MWException( "Called non-existant $func method on "
+ throw new MWException( "Called non-existent $func method on "
. get_class( $this ) );
}
}
@@ -614,7 +631,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
* @param string $msg
*/
private function assertEmpty2( $value, $msg ) {
- return $this->assertTrue( $value == '', $msg );
+ $this->assertTrue( $value == '', $msg );
}
private static function unprefixTable( $tableName ) {
@@ -630,7 +647,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
/**
* @since 1.18
*
- * @param DataBaseBase $db
+ * @param DatabaseBase $db
*
* @return array
*/
@@ -753,7 +770,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
/**
* Utility method taking an array of elements and wrapping
- * each element in it's own array. Useful for data providers
+ * each element in its own array. Useful for data providers
* that only return a single argument.
*
* @since 1.20
@@ -1120,9 +1137,23 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
}
/**
+ * @param array $matcher
+ * @param string $actual
+ * @param bool $isHtml
+ *
+ * @return bool
+ */
+ private static function tagMatch( $matcher, $actual, $isHtml = true ) {
+ $dom = PHPUnit_Util_XML::load( $actual, $isHtml );
+ $tags = PHPUnit_Util_XML::findNodes( $dom, $matcher, $isHtml );
+ return count( $tags ) > 0 && $tags[0] instanceof DOMNode;
+ }
+
+ /**
* Note: we are overriding this method to remove the deprecated error
* @see https://bugzilla.wikimedia.org/show_bug.cgi?id=69505
* @see https://github.com/sebastianbergmann/phpunit/issues/1292
+ * @deprecated
*
* @param array $matcher
* @param string $actual
@@ -1132,10 +1163,21 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
public static function assertTag( $matcher, $actual, $message = '', $isHtml = true ) {
//trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
- $dom = PHPUnit_Util_XML::load( $actual, $isHtml );
- $tags = PHPUnit_Util_XML::findNodes( $dom, $matcher, $isHtml );
- $matched = count( $tags ) > 0 && $tags[0] instanceof DOMNode;
+ self::assertTrue( self::tagMatch( $matcher, $actual, $isHtml ), $message );
+ }
+
+ /**
+ * @see MediaWikiTestCase::assertTag
+ * @deprecated
+ *
+ * @param array $matcher
+ * @param string $actual
+ * @param string $message
+ * @param bool $isHtml
+ */
+ public static function assertNotTag( $matcher, $actual, $message = '', $isHtml = true ) {
+ //trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
- self::assertTrue( $matched, $message );
+ self::assertFalse( self::tagMatch( $matcher, $actual, $isHtml ), $message );
}
}
diff --git a/tests/phpunit/ResourceLoaderTestCase.php b/tests/phpunit/ResourceLoaderTestCase.php
index f5f302e0..deecb31e 100644
--- a/tests/phpunit/ResourceLoaderTestCase.php
+++ b/tests/phpunit/ResourceLoaderTestCase.php
@@ -1,7 +1,12 @@
<?php
abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
- protected static function getResourceLoaderContext( $lang = 'en' ) {
+ /**
+ * @param string $lang
+ * @param string $dir
+ * @return ResourceLoaderContext
+ */
+ protected function getResourceLoaderContext( $lang = 'en', $dir = 'ltr' ) {
$resourceLoader = new ResourceLoader();
$request = new FauxRequest( array(
'lang' => $lang,
@@ -10,7 +15,14 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
'skin' => 'vector',
'target' => 'test',
) );
- return new ResourceLoaderContext( $resourceLoader, $request );
+ $ctx = $this->getMockBuilder( 'ResourceLoaderContext' )
+ ->setConstructorArgs( array( $resourceLoader, $request ) )
+ ->setMethods( array( 'getDirection' ) )
+ ->getMock();
+ $ctx->expects( $this->any() )->method( 'getDirection' )->will(
+ $this->returnValue( $dir )
+ );
+ return $ctx;
}
protected function setUp() {
@@ -86,10 +98,3 @@ class ResourceLoaderTestModule extends ResourceLoaderModule {
class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {
}
-
-class ResourceLoaderWikiModuleTestModule extends ResourceLoaderWikiModule {
- // Override expected via PHPUnit mocks and stubs
- protected function getPages( ResourceLoaderContext $context ) {
- return array();
- }
-}
diff --git a/tests/phpunit/bootstrap.php b/tests/phpunit/bootstrap.php
index 121aade9..a5c8ef61 100644
--- a/tests/phpunit/bootstrap.php
+++ b/tests/phpunit/bootstrap.php
@@ -15,14 +15,7 @@ EOF;
}
class MediaWikiPHPUnitBootstrap {
-
- public function __construct() {
- wfProfileIn( __CLASS__ );
- }
-
public function __destruct() {
- wfProfileOut( __CLASS__ );
-
// Return to real wiki db, so profiling data is preserved
MediaWikiTestCase::teardownTestDB();
diff --git a/tests/phpunit/data/composer/composer.json b/tests/phpunit/data/composer/composer.json
new file mode 100644
index 00000000..bcd196f4
--- /dev/null
+++ b/tests/phpunit/data/composer/composer.json
@@ -0,0 +1,48 @@
+{
+ "name": "mediawiki/core",
+ "description": "Free software wiki application developed by the Wikimedia Foundation and others",
+ "keywords": ["mediawiki", "wiki"],
+ "homepage": "https://www.mediawiki.org/",
+ "authors": [
+ {
+ "name": "MediaWiki Community",
+ "homepage": "https://www.mediawiki.org/wiki/Special:Version/Credits"
+ }
+ ],
+ "license": "GPL-2.0",
+ "support": {
+ "issues": "https://bugzilla.wikimedia.org/",
+ "irc": "irc://irc.freenode.net/mediawiki",
+ "wiki": "https://www.mediawiki.org/"
+ },
+ "require": {
+ "leafo/lessphp": "0.5.0",
+ "php": ">=5.3.3",
+ "psr/log": "1.0.0",
+ "cssjanus/cssjanus": "1.1.1",
+ "cdb/cdb": "1.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
+ },
+ "suggest": {
+ "ext-fileinfo": "*",
+ "ext-mbstring": "*",
+ "ext-wikidiff2": "*",
+ "ext-apc": "*",
+ "monolog/monolog": "*"
+ },
+ "autoload": {
+ "psr-0": {
+ "ComposerHookHandler": "includes/composer"
+ }
+ },
+ "scripts": {
+ "pre-update-cmd": "ComposerHookHandler::onPreUpdate",
+ "pre-install-cmd": "ComposerHookHandler::onPreInstall"
+ },
+ "config": {
+ "prepend-autoloader": false,
+ "optimize-autoloader": true
+ }
+}
diff --git a/tests/phpunit/data/composer/composer.lock b/tests/phpunit/data/composer/composer.lock
new file mode 100644
index 00000000..cae6a478
--- /dev/null
+++ b/tests/phpunit/data/composer/composer.lock
@@ -0,0 +1,1195 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "a3bb80b0ac4c4a31e52574d48c032923",
+ "packages": [
+ {
+ "name": "composer/installers",
+ "version": "v1.0.19",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/installers.git",
+ "reference": "89d77bfbee79e16653f7162c86e602cc188471db"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/installers/zipball/89d77bfbee79e16653f7162c86e602cc188471db",
+ "reference": "89d77bfbee79e16653f7162c86e602cc188471db",
+ "shasum": ""
+ },
+ "replace": {
+ "roundcube/plugin-installer": "*",
+ "shama/baton": "*"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev",
+ "phpunit/phpunit": "4.1.*"
+ },
+ "type": "composer-installer",
+ "extra": {
+ "class": "Composer\\Installers\\Installer",
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Composer\\Installers\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kyle Robinson Young",
+ "email": "kyle@dontkry.com",
+ "homepage": "https://github.com/shama"
+ }
+ ],
+ "description": "A multi-framework Composer library installer",
+ "homepage": "http://composer.github.com/installers/",
+ "keywords": [
+ "Craft",
+ "Dolibarr",
+ "Hurad",
+ "MODX Evo",
+ "OXID",
+ "Thelia",
+ "WolfCMS",
+ "agl",
+ "annotatecms",
+ "bitrix",
+ "cakephp",
+ "chef",
+ "codeigniter",
+ "concrete5",
+ "croogo",
+ "dokuwiki",
+ "drupal",
+ "elgg",
+ "fuelphp",
+ "grav",
+ "installer",
+ "joomla",
+ "kohana",
+ "laravel",
+ "lithium",
+ "magento",
+ "mako",
+ "mediawiki",
+ "modulework",
+ "moodle",
+ "phpbb",
+ "piwik",
+ "ppi",
+ "puppet",
+ "roundcube",
+ "shopware",
+ "silverstripe",
+ "symfony",
+ "typo3",
+ "wordpress",
+ "zend",
+ "zikula"
+ ],
+ "time": "2014-11-29 01:29:17"
+ },
+ {
+ "name": "cssjanus/cssjanus",
+ "version": "v1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cssjanus/php-cssjanus.git",
+ "reference": "62a9c32e6e140de09082b40a6e99d868ad14d4e0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cssjanus/php-cssjanus/zipball/62a9c32e6e140de09082b40a6e99d868ad14d4e0",
+ "reference": "62a9c32e6e140de09082b40a6e99d868ad14d4e0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.8.*",
+ "phpunit/phpunit": "3.7.*",
+ "squizlabs/php_codesniffer": "1.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "description": "Convert CSS stylesheets between left-to-right and right-to-left.",
+ "time": "2014-11-14 20:00:50"
+ },
+ {
+ "name": "leafo/lessphp",
+ "version": "v0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/leafo/lessphp.git",
+ "reference": "0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/leafo/lessphp/zipball/0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283",
+ "reference": "0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283",
+ "shasum": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.4.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "lessc.inc.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT",
+ "GPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Leaf Corcoran",
+ "email": "leafot@gmail.com",
+ "homepage": "http://leafo.net"
+ }
+ ],
+ "description": "lessphp is a compiler for LESS written in PHP.",
+ "homepage": "http://leafo.net/lessphp/",
+ "time": "2014-11-24 18:39:20"
+ },
+ {
+ "name": "mediawiki/translate",
+ "version": "2014.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/mediawiki-extensions-Translate.git",
+ "reference": "2bc100763f3150380412faceea258c7378ce7ea0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-Translate/zipball/2bc100763f3150380412faceea258c7378ce7ea0",
+ "reference": "2bc100763f3150380412faceea258c7378ce7ea0",
+ "shasum": ""
+ },
+ "require": {
+ "composer/installers": ">=1.0.1",
+ "mediawiki/universal-language-selector": "*",
+ "php": ">=5.3.0"
+ },
+ "suggest": {
+ "mediawiki/babel": "Users can easily indicate their language proficiency on their user page",
+ "mediawiki/translation-notifications": "Manage communication with translators",
+ "mustangostang/spyc": "More recent version of the bundled spyc library"
+ },
+ "type": "mediawiki-extension",
+ "autoload": {
+ "files": [
+ "Translate.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0+"
+ ],
+ "authors": [
+ {
+ "name": "Niklas Laxström",
+ "email": "niklas.laxstrom@gmail.com",
+ "role": "Lead nitpicker"
+ },
+ {
+ "name": "Siebrand Mazeland",
+ "email": "s.mazeland@xs4all.nl",
+ "role": "Developer"
+ }
+ ],
+ "description": "The only standard solution to translate any kind of text with an avant-garde web interface within MediaWiki, including your documentation and software",
+ "homepage": "https://www.mediawiki.org/wiki/Extension:Translate",
+ "keywords": [
+ "g11n",
+ "i18n",
+ "internationalization",
+ "l10n",
+ "localization",
+ "m17n",
+ "mediawiki",
+ "translatewiki.net",
+ "translation"
+ ],
+ "time": "2014-12-30 15:21:24"
+ },
+ {
+ "name": "mediawiki/universal-language-selector",
+ "version": "2014.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/mediawiki-extensions-UniversalLanguageSelector.git",
+ "reference": "f730b0f47e2828001c1e03ec40d4681bfb0bff2d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/mediawiki-extensions-UniversalLanguageSelector/zipball/f730b0f47e2828001c1e03ec40d4681bfb0bff2d",
+ "reference": "f730b0f47e2828001c1e03ec40d4681bfb0bff2d",
+ "shasum": ""
+ },
+ "require": {
+ "composer/installers": ">=1.0.1",
+ "php": ">=5.3.0"
+ },
+ "suggest": {
+ "mediawiki/cldr": "Language names in all languages"
+ },
+ "type": "mediawiki-extension",
+ "autoload": {
+ "files": [
+ "UniversalLanguageSelector.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0+",
+ "MIT"
+ ],
+ "description": "The primary aim is to allow users to select a language and configure its support in an easy way. Main features are language selection, input methods and web fonts.",
+ "homepage": "https://www.mediawiki.org/wiki/Extension:UniversalLanguageSelector",
+ "keywords": [
+ "Input methods",
+ "Language selection",
+ "Web fonts",
+ "mediawiki"
+ ],
+ "time": "2014-12-30 15:21:25"
+ },
+ {
+ "name": "oojs/oojs-ui",
+ "version": "v0.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/oojs-ui.git",
+ "reference": "50fa12637ad377f00bdbf1913406a3bfe9c1689e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/oojs-ui/zipball/50fa12637ad377f00bdbf1913406a3bfe9c1689e",
+ "reference": "50fa12637ad377f00bdbf1913406a3bfe9c1689e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "php/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "homepage": "https://www.mediawiki.org/wiki/OOjs_UI",
+ "time": "2014-12-16 20:50:05"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
+ "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Psr\\Log\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2012-12-21 11:40:51"
+ },
+ {
+ "name": "wikimedia/cdb",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/cdb.git",
+ "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/cdb/zipball/3b7d5366c88eccf2517ebac57c59eb557c82f46c",
+ "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Tim Starling",
+ "email": "tstarling@wikimedia.org"
+ },
+ {
+ "name": "Chad Horohoe",
+ "email": "chad@wikimedia.org"
+ }
+ ],
+ "description": "Constant Database (CDB) wrapper library for PHP. Provides pure-PHP fallback when dba_* functions are absent.",
+ "homepage": "https://www.mediawiki.org/wiki/CDB",
+ "time": "2014-12-08 19:26:44"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119",
+ "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3,<8.0-DEV"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "2.0.*@ALPHA"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Instantiator\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://github.com/doctrine/instantiator",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2014-10-13 12:58:55"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "2.0.14",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "ca158276c1200cc27f5409a5e338486bc0b4fc94"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca158276c1200cc27f5409a5e338486bc0b4fc94",
+ "reference": "ca158276c1200cc27f5409a5e338486bc0b4fc94",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "phpunit/php-file-iterator": "~1.3",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-token-stream": "~1.3",
+ "sebastian/environment": "~1.0",
+ "sebastian/version": "~1.0"
+ },
+ "require-dev": {
+ "ext-xdebug": ">=2.1.4",
+ "phpunit/phpunit": "~4.1"
+ },
+ "suggest": {
+ "ext-dom": "*",
+ "ext-xdebug": ">=2.2.1",
+ "ext-xmlwriter": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "time": "2014-12-26 13:28:33"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "1.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb",
+ "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "File/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "time": "2013-10-10 15:34:57"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+ "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "Text/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2014-01-30 17:20:04"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+ "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "PHP/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "time": "2013-08-02 07:42:54"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "f8d5d08c56de5cfd592b3340424a81733259a876"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/f8d5d08c56de5cfd592b3340424a81733259a876",
+ "reference": "f8d5d08c56de5cfd592b3340424a81733259a876",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "time": "2014-08-31 06:12:13"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "4.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "6a5e49a86ce5e33b8d0657abe145057fc513543a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6a5e49a86ce5e33b8d0657abe145057fc513543a",
+ "reference": "6a5e49a86ce5e33b8d0657abe145057fc513543a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "php": ">=5.3.3",
+ "phpunit/php-code-coverage": "~2.0",
+ "phpunit/php-file-iterator": "~1.3.2",
+ "phpunit/php-text-template": "~1.2",
+ "phpunit/php-timer": "~1.0.2",
+ "phpunit/phpunit-mock-objects": "~2.3",
+ "sebastian/comparator": "~1.0",
+ "sebastian/diff": "~1.1",
+ "sebastian/environment": "~1.1",
+ "sebastian/exporter": "~1.0",
+ "sebastian/global-state": "~1.0",
+ "sebastian/version": "~1.0",
+ "symfony/yaml": "~2.0"
+ },
+ "suggest": {
+ "phpunit/php-invoker": "~1.1"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.4.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "time": "2014-12-28 07:57:05"
+ },
+ {
+ "name": "phpunit/phpunit-mock-objects",
+ "version": "2.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+ "reference": "c63d2367247365f688544f0d500af90a11a44c65"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/c63d2367247365f688544f0d500af90a11a44c65",
+ "reference": "c63d2367247365f688544f0d500af90a11a44c65",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "~1.0,>=1.0.1",
+ "php": ">=5.3.3",
+ "phpunit/php-text-template": "~1.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.3"
+ },
+ "suggest": {
+ "ext-soap": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Mock Object library for PHPUnit",
+ "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+ "keywords": [
+ "mock",
+ "xunit"
+ ],
+ "time": "2014-10-03 05:12:11"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "c484a80f97573ab934e37826dba0135a3301b26a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c484a80f97573ab934e37826dba0135a3301b26a",
+ "reference": "c484a80f97573ab934e37826dba0135a3301b26a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "sebastian/diff": "~1.1",
+ "sebastian/exporter": "~1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "http://www.github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "time": "2014-11-16 21:32:38"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "5843509fed39dee4b356a306401e9dd1a931fec7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/5843509fed39dee4b356a306401e9dd1a931fec7",
+ "reference": "5843509fed39dee4b356a306401e9dd1a931fec7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "http://www.github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff"
+ ],
+ "time": "2014-08-15 10:29:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e6c71d918088c251b181ba8b3088af4ac336dd7",
+ "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "time": "2014-10-25 08:00:45"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c7d59948d6e82818e1bdff7cadb6c34710eb7dc0",
+ "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "time": "2014-09-10 00:51:36"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
+ "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.2"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "time": "2014-10-06 09:23:50"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/a77d9123f8e809db3fbdea15038c27a95da4058b",
+ "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "time": "2014-12-15 14:25:24"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v2.6.1",
+ "target-dir": "Symfony/Component/Yaml",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Yaml.git",
+ "reference": "3346fc090a3eb6b53d408db2903b241af51dcb20"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Yaml/zipball/3346fc090a3eb6b53d408db2903b241af51dcb20",
+ "reference": "3346fc090a3eb6b53d408db2903b241af51dcb20",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Component\\Yaml\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony Yaml Component",
+ "homepage": "http://symfony.com",
+ "time": "2014-12-02 20:19:20"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "platform": {
+ "php": ">=5.3.3"
+ },
+ "platform-dev": []
+}
diff --git a/tests/phpunit/data/composer/new-composer.json b/tests/phpunit/data/composer/new-composer.json
new file mode 100644
index 00000000..0634c2dd
--- /dev/null
+++ b/tests/phpunit/data/composer/new-composer.json
@@ -0,0 +1,48 @@
+{
+ "name": "mediawiki/core",
+ "description": "Free software wiki application developed by the Wikimedia Foundation and others",
+ "keywords": ["mediawiki", "wiki"],
+ "homepage": "https://www.mediawiki.org/",
+ "authors": [
+ {
+ "name": "MediaWiki Community",
+ "homepage": "https://www.mediawiki.org/wiki/Special:Version/Credits"
+ }
+ ],
+ "license": "GPL-2.0",
+ "support": {
+ "issues": "https://bugzilla.wikimedia.org/",
+ "irc": "irc://irc.freenode.net/mediawiki",
+ "wiki": "https://www.mediawiki.org/"
+ },
+ "require": {
+ "leafo/lessphp": "0.5.0",
+ "php": ">=5.3.3",
+ "psr/log": "1.0.0",
+ "cssjanus/cssjanus": "1.1.1",
+ "wikimedia/cdb": "1.0.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
+ },
+ "suggest": {
+ "ext-fileinfo": "*",
+ "ext-mbstring": "*",
+ "ext-wikidiff2": "*",
+ "ext-apc": "*",
+ "monolog/monolog": "*"
+ },
+ "autoload": {
+ "psr-0": {
+ "ComposerHookHandler": "includes/composer"
+ }
+ },
+ "scripts": {
+ "pre-update-cmd": "ComposerHookHandler::onPreUpdate",
+ "pre-install-cmd": "ComposerHookHandler::onPreInstall"
+ },
+ "config": {
+ "prepend-autoloader": false,
+ "optimize-autoloader": true
+ }
+}
diff --git a/tests/phpunit/data/cssmin/circle.svg b/tests/phpunit/data/cssmin/circle.svg
new file mode 100644
index 00000000..6b7d1afd
--- /dev/null
+++ b/tests/phpunit/data/cssmin/circle.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8">
+<circle cx="4" cy="4" r="2"/>
+</svg>
diff --git a/tests/phpunit/data/gitinfo/info-testValidJsonData.json b/tests/phpunit/data/gitinfo/info-testValidJsonData.json
index e955a2b6..8cf21bda 100644
--- a/tests/phpunit/data/gitinfo/info-testValidJsonData.json
+++ b/tests/phpunit/data/gitinfo/info-testValidJsonData.json
@@ -1 +1,7 @@
-{ "head": "refs/heads/master", "headSHA1": "0123456789abcdef0123456789abcdef01234567", "headCommitDate": "1070884800", "branch": "master", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/core" } \ No newline at end of file
+{
+ "head": "refs/heads/master",
+ "headSHA1": "0123456789abcdef0123456789abcdef01234567",
+ "headCommitDate": "1070884800",
+ "branch": "master",
+ "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/core"
+}
diff --git a/tests/phpunit/data/helpers/WellProtectedClass.php b/tests/phpunit/data/helpers/WellProtectedClass.php
new file mode 100644
index 00000000..99c7f642
--- /dev/null
+++ b/tests/phpunit/data/helpers/WellProtectedClass.php
@@ -0,0 +1,21 @@
+<?php
+
+class WellProtectedClass {
+ protected $property;
+
+ public function __construct() {
+ $this->property = 1;
+ }
+
+ protected function incrementPropertyValue() {
+ $this->property++;
+ }
+
+ public function getProperty() {
+ return $this->property;
+ }
+
+ protected function whatSecondArg( $a, $b = false ) {
+ return $b;
+ }
+}
diff --git a/tests/phpunit/data/media/Soccer_ball_animated.svg b/tests/phpunit/data/media/Soccer_ball_animated.svg
index 6bd82fc4..183e43d8 100644
--- a/tests/phpunit/data/media/Soccer_ball_animated.svg
+++ b/tests/phpunit/data/media/Soccer_ball_animated.svg
@@ -1,55 +1,55 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg>
-<svg width="150" height="150" viewBox="-105 -105 210 210" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <defs>
- <clipPath id="ball">
- <circle r="100" stroke-width="0"/>
- </clipPath>
- <radialGradient id="shadow1" cx=".4" cy=".3" r=".8">
- <stop offset="0" stop-color="white" stop-opacity="1"/>
- <stop offset=".4" stop-color="white" stop-opacity="1"/>
- <stop offset=".8" stop-color="#EEEEEE" stop-opacity="1"/>
- </radialGradient>
- <radialGradient id="shadow2" cx=".5" cy=".5" r=".5">
- <stop offset="0" stop-color="white" stop-opacity="0"/>
- <stop offset=".8" stop-color="white" stop-opacity="0"/>
- <stop offset=".99" stop-color="black" stop-opacity=".3"/>
- <stop offset="1" stop-color="black" stop-opacity="1"/>
- </radialGradient>
- <g id="black_stuff" stroke-linejoin="round" clip-path="url(#ball)">
- <g fill="black">
- <path d="M 6,-32 Q 26,-28 46,-19 Q 57,-35 64,-47 Q 50,-68 37,-76 Q 17,-75 1,-68 Q 4,-51 6,-32"/>
- <path d="M -26,-2 Q -45,-8 -62,-11 Q -74,5 -76,22 Q -69,40 -50,54 Q -32,47 -17,39 Q -23,15 -26,-2"/>
- <path d="M -95,22 Q -102,12 -102,-8 V 80 H -85 Q -95,45 -95,22"/>
- <path d="M 55,24 Q 41,41 24,52 Q 28,65 31,79 Q 55,78 68,67 Q 78,50 80,35 Q 65,28 55,24"/>
- <path d="M 0,120 L -3,95 Q -25,93 -42,82 Q -50,84 -60,81"/>
- <path d="M -90,-48 Q -80,-52 -68,-49 Q -52,-71 -35,-77 Q -35,-100 -40,-100 H -100"/>
- <path d="M 100,-55 L 87,-37 Q 98,-10 97,5 L 100,6"/>
- </g>
- <g fill="none">
- <path d="M 6,-32 Q -18,-12 -26,-2
- M 46,-19 Q 54,5 55,24
- M 64,-47 Q 77,-44 87,-37
- M 37,-76 Q 39,-90 36,-100
- M 1,-68 Q -13,-77 -35,-77
- M -62,-11 Q -67,-25 -68,-49
- M -76,22 Q -85,24 -95,22
- M -50,54 Q -49,70 -42,82
- M -17,39 Q 0,48 24,52
- M 31,79 Q 20,92 -3,95
- M 68,67 L 80,80
- M 80,35 Q 90,25 97,5
- "/>
- </g>
- </g>
- </defs>
- <circle r="100" fill="white" stroke="none"/>
- <circle r="100" fill="url(#shadow1)" stroke="none"/>
- <g><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0" to="360" begin="0s" dur="3s" repeatCount="indefinite"/>
- <use xlink:href="#black_stuff" stroke="#EEE" stroke-width="7"/>
- <use xlink:href="#black_stuff" stroke="#DDD" stroke-width="4"/>
- <use xlink:href="#black_stuff" stroke="#999" stroke-width="2"/>
- <use xlink:href="#black_stuff" stroke="black" stroke-width="1"/>
- </g>
- <circle r="100" fill="url(#shadow2)" stroke="none"/>
-</svg>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg>
+<svg width="150" height="150" viewBox="-105 -105 210 210" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <clipPath id="ball">
+ <circle r="100" stroke-width="0"/>
+ </clipPath>
+ <radialGradient id="shadow1" cx=".4" cy=".3" r=".8">
+ <stop offset="0" stop-color="white" stop-opacity="1"/>
+ <stop offset=".4" stop-color="white" stop-opacity="1"/>
+ <stop offset=".8" stop-color="#EEEEEE" stop-opacity="1"/>
+ </radialGradient>
+ <radialGradient id="shadow2" cx=".5" cy=".5" r=".5">
+ <stop offset="0" stop-color="white" stop-opacity="0"/>
+ <stop offset=".8" stop-color="white" stop-opacity="0"/>
+ <stop offset=".99" stop-color="black" stop-opacity=".3"/>
+ <stop offset="1" stop-color="black" stop-opacity="1"/>
+ </radialGradient>
+ <g id="black_stuff" stroke-linejoin="round" clip-path="url(#ball)">
+ <g fill="black">
+ <path d="M 6,-32 Q 26,-28 46,-19 Q 57,-35 64,-47 Q 50,-68 37,-76 Q 17,-75 1,-68 Q 4,-51 6,-32"/>
+ <path d="M -26,-2 Q -45,-8 -62,-11 Q -74,5 -76,22 Q -69,40 -50,54 Q -32,47 -17,39 Q -23,15 -26,-2"/>
+ <path d="M -95,22 Q -102,12 -102,-8 V 80 H -85 Q -95,45 -95,22"/>
+ <path d="M 55,24 Q 41,41 24,52 Q 28,65 31,79 Q 55,78 68,67 Q 78,50 80,35 Q 65,28 55,24"/>
+ <path d="M 0,120 L -3,95 Q -25,93 -42,82 Q -50,84 -60,81"/>
+ <path d="M -90,-48 Q -80,-52 -68,-49 Q -52,-71 -35,-77 Q -35,-100 -40,-100 H -100"/>
+ <path d="M 100,-55 L 87,-37 Q 98,-10 97,5 L 100,6"/>
+ </g>
+ <g fill="none">
+ <path d="M 6,-32 Q -18,-12 -26,-2
+ M 46,-19 Q 54,5 55,24
+ M 64,-47 Q 77,-44 87,-37
+ M 37,-76 Q 39,-90 36,-100
+ M 1,-68 Q -13,-77 -35,-77
+ M -62,-11 Q -67,-25 -68,-49
+ M -76,22 Q -85,24 -95,22
+ M -50,54 Q -49,70 -42,82
+ M -17,39 Q 0,48 24,52
+ M 31,79 Q 20,92 -3,95
+ M 68,67 L 80,80
+ M 80,35 Q 90,25 97,5
+ "/>
+ </g>
+ </g>
+ </defs>
+ <circle r="100" fill="white" stroke="none"/>
+ <circle r="100" fill="url(#shadow1)" stroke="none"/>
+ <g><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0" to="360" begin="0s" dur="3s" repeatCount="indefinite"/>
+ <use xlink:href="#black_stuff" stroke="#EEE" stroke-width="7"/>
+ <use xlink:href="#black_stuff" stroke="#DDD" stroke-width="4"/>
+ <use xlink:href="#black_stuff" stroke="#999" stroke-width="2"/>
+ <use xlink:href="#black_stuff" stroke="black" stroke-width="1"/>
+ </g>
+ <circle r="100" fill="url(#shadow2)" stroke="none"/>
+</svg>
diff --git a/tests/phpunit/data/media/Tux.svg b/tests/phpunit/data/media/Tux.svg
index 39561078..e48b7353 100644
--- a/tests/phpunit/data/media/Tux.svg
+++ b/tests/phpunit/data/media/Tux.svg
@@ -1,902 +1,902 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 349.46883 405.12272">
- <title>Tux</title>
- <desc>For more information see: http://commons.wikimedia.org/wiki/Image:Tux.svg</desc>
- <radialGradient id="ag" gradientUnits="userSpaceOnUse" cy="-551.04" cx="274.822" gradientTransform="matrix(.5671 0 0 -.2835 81.263 201.645)" r="165.384">
- <stop stop-opacity=".502" offset="0"/>
- <stop stop-opacity="0" offset="1"/>
- </radialGradient>
- <path fill="url(#ag)" d="m330.892 357.885c0 25.898-41.989 46.893-93.785 46.893-51.795 0-93.784-20.994-93.784-46.893s41.989-46.893 93.784-46.893c51.795 0.001 93.785 20.995 93.785 46.893z"/>
- <radialGradient id="ak" gradientUnits="userSpaceOnUse" cy="-551.042" cx="268.794" gradientTransform="matrix(.5823 0 0 -.2835 -61.6052 201.14)" r="165.383">
- <stop stop-opacity=".502" offset="0"/>
- <stop stop-opacity="0" offset="1"/>
- </radialGradient>
- <path fill="url(#ak)" d="m191.223 357.381c0 25.897-43.117 46.892-96.306 46.892-53.188 0-96.305-20.994-96.305-46.892s43.117-46.893 96.305-46.893c53.188 0.001 96.306 20.995 96.306 46.893z"/>
- <g transform="translate(8.99996 9.00046)">
- <path d="m292.327 256.606c-4.752 19.584-28.872 60.48-41.688 78.48-12.815 18.072-11.231 34.344-34.92 28.008-23.616-6.336-30.24-5.184-54.647-3.744-24.265 1.439-19.009-0.721-34.2 6.12-15.12 6.84-65.88-82.944-69.984-99.647-4.031-16.705-5.976-14.689 4.536-32.761 10.513-18.071 12.024-35.928 25.92-57.816 13.896-21.96 29.952-33.12 28.8-49.896-4.535-62.28-8.136-93.384 19.513-107.784 26.352-13.68 48.384-5.544 57.096-0.864 3.744 2.016 11.376 5.904 17.064 12.744 5.688 6.696 10.8 16.848 13.68 29.664 5.904 25.704-2.448 17.208 4.248 46.656 6.624 29.375 20.088 43.775 36.504 67.031 16.414 23.257 33.55 61.633 28.078 83.809z"/>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#666" d="m148.47 94.049c4.319-1.728 3.592-1.958 6.472-8.222 2.304-4.824 4.328-6.898 4.256-14.242 0-7.2-2.232-9.648-5.616-14.328-3.24-4.464-8.424-4.68-11.664-4.104-1.872 0.288-4.319 2.664-5.976 6.192-1.08 2.376-1.944 5.4-2.017 8.568-0.216 8.496 0.505 11.736 2.448 17.496 2.305 6.769 7.921 10.297 12.097 8.64z"/>
- <path fill="#6d6d6d" d="m148.47 94.023c4.293-1.717 3.563-1.954 6.425-8.178 2.289-4.793 4.312-6.861 4.271-14.164 0.027-7.152-2.162-9.702-5.488-14.201-3.296-4.345-8.376-4.509-11.593-3.953-1.916 0.283-4.354 2.569-6.038 5.968-1.159 2.31-2.016 5.353-2.087 8.535-0.212 8.438 0.547 11.691 2.46 17.417 2.268 6.731 7.901 10.221 12.05 8.576z"/>
- <path fill="#757575" d="m148.471 93.996c4.264-1.706 3.533-1.95 6.377-8.133 2.273-4.762 4.296-6.823 4.288-14.085 0.053-7.105-2.093-9.756-5.363-14.075-3.35-4.225-8.327-4.338-11.52-3.801-1.961 0.278-4.389 2.474-6.099 5.744-1.242 2.245-2.089 5.305-2.16 8.501-0.207 8.38 0.591 11.647 2.473 17.34 2.231 6.691 7.881 10.144 12.004 8.509z"/>
- <path fill="#7c7c7c" d="m148.471 93.969c4.235-1.694 3.506-1.946 6.329-8.089 2.26-4.731 4.28-6.786 4.304-14.006 0.081-7.058-2.021-9.811-5.236-13.948-3.403-4.105-8.278-4.167-11.446-3.649-2.006 0.273-4.424 2.379-6.16 5.519-1.322 2.179-2.161 5.257-2.232 8.468-0.202 8.323 0.636 11.603 2.486 17.261 2.191 6.654 7.859 10.068 11.955 8.444z"/>
- <path fill="#848484" d="m148.471 93.943c4.209-1.684 3.477-1.942 6.282-8.045 2.245-4.7 4.266-6.749 4.319-13.928 0.107-7.01-1.95-9.864-5.109-13.821-3.458-3.985-8.23-3.996-11.375-3.498-2.049 0.268-4.458 2.284-6.222 5.295-1.403 2.114-2.233 5.21-2.303 8.435-0.198 8.265 0.679 11.559 2.498 17.183 2.156 6.615 7.842 9.992 11.91 8.379z"/>
- <path fill="#8c8c8c" d="m148.471 93.916c4.181-1.672 3.448-1.938 6.235-8 2.23-4.668 4.249-6.711 4.335-13.85 0.134-6.962-1.88-9.918-4.982-13.695-3.513-3.865-8.183-3.825-11.303-3.347-2.094 0.263-4.492 2.189-6.283 5.07-1.484 2.049-2.306 5.163-2.375 8.401-0.193 8.207 0.723 11.515 2.511 17.105 2.118 6.58 7.821 9.919 11.862 8.316z"/>
- <path fill="#939393" d="m148.472 93.889c4.152-1.661 3.419-1.934 6.188-7.956 2.215-4.638 4.233-6.674 4.35-13.771 0.161-6.915-1.809-9.972-4.854-13.568-3.567-3.746-8.134-3.654-11.23-3.195-2.138 0.259-4.527 2.094-6.345 4.847-1.564 1.983-2.378 5.115-2.447 8.368-0.188 8.149 0.767 11.47 2.523 17.026 2.079 6.54 7.8 9.841 11.815 8.249z"/>
- <path fill="#9b9b9b" d="m148.472 93.863c4.125-1.65 3.391-1.93 6.141-7.912 2.2-4.607 4.217-6.637 4.366-13.693 0.188-6.868-1.739-10.026-4.729-13.441-3.621-3.626-8.085-3.484-11.157-3.044-2.183 0.253-4.562 1.999-6.406 4.622-1.646 1.918-2.45 5.068-2.52 8.335-0.185 8.091 0.811 11.426 2.535 16.948 2.044 6.502 7.782 9.766 11.77 8.185z"/>
- <path fill="#a3a3a3" d="m148.472 93.836c4.097-1.639 3.361-1.926 6.094-7.867 2.185-4.576 4.201-6.599 4.382-13.614 0.214-6.82-1.669-10.081-4.603-13.315-3.676-3.506-8.036-3.313-11.084-2.893-2.229 0.249-4.598 1.904-6.47 4.398-1.726 1.852-2.521 5.021-2.591 8.301-0.18 8.034 0.854 11.382 2.548 16.87 2.008 6.465 7.763 9.691 11.724 8.12z"/>
- <path fill="#aaa" d="m148.472 93.809c4.069-1.628 3.334-1.922 6.047-7.823 2.17-4.544 4.185-6.562 4.396-13.536 0.242-6.772-1.597-10.134-4.475-13.188-3.73-3.387-7.989-3.142-11.013-2.741-2.271 0.243-4.632 1.809-6.53 4.173-1.808 1.787-2.594 4.974-2.662 8.268-0.176 7.976 0.897 11.337 2.56 16.792 1.97 6.427 7.743 9.615 11.677 8.055z"/>
- <path fill="#b2b2b2" d="m148.473 93.782c4.041-1.617 3.304-1.918 5.999-7.778 2.154-4.514 4.169-6.524 4.412-13.458 0.269-6.725-1.526-10.188-4.349-13.062-3.784-3.267-7.939-2.971-10.939-2.589-2.316 0.238-4.666 1.714-6.592 3.949-1.888 1.721-2.667 4.926-2.734 8.234-0.171 7.918 0.941 11.293 2.572 16.713 1.933 6.391 7.723 9.541 11.631 7.991z"/>
- <path fill="#bababa" d="m148.473 93.756c4.014-1.606 3.275-1.914 5.951-7.734 2.141-4.482 4.153-6.487 4.43-13.379 0.295-6.678-1.457-10.243-4.223-12.935-3.839-3.147-7.892-2.8-10.867-2.438-2.36 0.233-4.701 1.619-6.653 3.725-1.969 1.656-2.739 4.879-2.806 8.201-0.167 7.86 0.984 11.249 2.585 16.636 1.895 6.35 7.702 9.462 11.583 7.924z"/>
- <path fill="#c1c1c1" d="m148.473 93.729c3.985-1.595 3.247-1.91 5.904-7.69 2.125-4.451 4.138-6.45 4.445-13.3 0.321-6.63-1.387-10.297-4.096-12.808-3.894-3.028-7.844-2.629-10.795-2.287-2.405 0.229-4.735 1.524-6.716 3.5-2.049 1.59-2.811 4.831-2.878 8.167-0.161 7.802 1.029 11.205 2.599 16.557 1.859 6.314 7.683 9.389 11.537 7.861z"/>
- <path fill="#c9c9c9" d="m148.473 93.702c3.958-1.583 3.219-1.906 5.857-7.646 2.11-4.42 4.121-6.412 4.46-13.222 0.35-6.583-1.315-10.351-3.969-12.682-3.947-2.908-7.794-2.458-10.722-2.135-2.45 0.224-4.771 1.429-6.777 3.276-2.13 1.525-2.883 4.784-2.95 8.135-0.157 7.745 1.073 11.16 2.611 16.479 1.821 6.276 7.663 9.313 11.49 7.795z"/>
- <path fill="#d1d1d1" d="m148.474 93.676c3.93-1.573 3.188-1.902 5.809-7.601 2.097-4.389 4.107-6.375 4.477-13.144 0.375-6.535-1.245-10.404-3.842-12.555-4.002-2.788-7.747-2.287-10.65-1.984-2.493 0.219-4.805 1.334-6.837 3.052-2.213 1.459-2.957 4.736-3.022 8.101-0.153 7.687 1.116 11.116 2.623 16.401 1.782 6.237 7.642 9.237 11.442 7.73z"/>
- <path fill="#d8d8d8" d="m148.474 93.649c3.901-1.562 3.16-1.898 5.762-7.557 2.082-4.358 4.091-6.338 4.493-13.065 0.401-6.487-1.176-10.458-3.716-12.428-4.057-2.668-7.698-2.116-10.578-1.832-2.538 0.214-4.839 1.239-6.899 2.827-2.292 1.394-3.029 4.689-3.094 8.068-0.148 7.629 1.16 11.072 2.636 16.322 1.746 6.2 7.623 9.161 11.396 7.665z"/>
- <path fill="#e0e0e0" d="m148.474 93.622c3.875-1.55 3.132-1.894 5.715-7.512 2.066-4.327 4.075-6.3 4.508-12.987 0.429-6.44-1.104-10.513-3.588-12.302-4.111-2.549-7.65-1.945-10.506-1.681-2.582 0.209-4.874 1.144-6.961 2.604-2.373 1.328-3.102 4.642-3.165 8.034-0.145 7.571 1.204 11.027 2.647 16.244 1.709 6.162 7.604 9.086 11.35 7.6z"/>
- <path fill="#e8e8e8" d="m148.474 93.596c3.847-1.54 3.104-1.89 5.668-7.468 2.052-4.296 4.059-6.263 4.523-12.908 0.456-6.393-1.034-10.567-3.462-12.175-4.165-2.429-7.601-1.774-10.433-1.529-2.627 0.204-4.908 1.049-7.023 2.379-2.453 1.263-3.173 4.594-3.236 8.001-0.141 7.514 1.247 10.983 2.659 16.166 1.673 6.123 7.585 9.008 11.304 7.534z"/>
- <path fill="#efefef" d="m148.475 93.569c3.817-1.528 3.073-1.886 5.62-7.424 2.036-4.265 4.043-6.226 4.539-12.83 0.482-6.345-0.964-10.621-3.336-12.048-4.219-2.31-7.552-1.604-10.359-1.378-2.672 0.199-4.943 0.954-7.084 2.155-2.535 1.197-3.246 4.546-3.311 7.967-0.135 7.456 1.292 10.939 2.673 16.087 1.636 6.087 7.565 8.935 11.258 7.471z"/>
- <path fill="#f7f7f7" d="m148.475 93.542c3.791-1.517 3.046-1.882 5.572-7.379 2.022-4.234 4.027-6.188 4.556-12.751 0.51-6.297-0.894-10.675-3.208-11.921-4.274-2.19-7.505-1.433-10.289-1.227-2.715 0.194-4.978 0.859-7.146 1.93-2.614 1.132-3.317 4.5-3.381 7.935-0.131 7.398 1.335 10.895 2.686 16.009 1.597 6.047 7.544 8.858 11.21 7.404z"/>
- <path fill="#fff" d="m148.475 93.516c3.763-1.506 3.017-1.878 5.525-7.335 2.007-4.203 4.012-6.151 4.571-12.673 0.536-6.25-0.823-10.729-3.082-11.795-4.328-2.07-7.456-1.262-10.216-1.075-2.76 0.189-5.012 0.764-7.207 1.706-2.696 1.066-3.39 4.452-3.453 7.901-0.126 7.34 1.379 10.85 2.698 15.931 1.561 6.01 7.525 8.782 11.164 7.34z"/>
- </g>
- <path d="m132.033 74.7465c2.16 0 4.896 1.44 6.191 3.384 1.368 1.944 2.376 4.68 2.376 7.776 0 4.608-0.504 9.72-3.239 11.304-0.864 0.504-2.736 0.936-3.816 0.936-2.448 0-2.664-1.584-4.968-3.96-0.792-0.864-3.168-5.04-3.168-8.496 0-2.16-0.504-5.256 1.368-7.992 1.296-2.016 2.952-2.952 5.256-2.952z"/>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m143.862 68.608c0.844-1.305 4.222-0.69 5.45 1.996 1.229 2.687 0.998 8.522 0.153 8.829-2.226 0.691-1.535-2.534-3.454-5.451-1.919-2.762-2.994-4.067-2.149-5.374z"/>
- <path fill="#070707" d="m143.916 68.664c0.833-1.289 4.169-0.681 5.381 1.971 1.215 2.653 0.985 8.414 0.152 8.717-2.198 0.682-1.516-2.502-3.411-5.382-1.895-2.728-2.956-4.017-2.122-5.306z"/>
- <path fill="#0f0f0f" d="m143.97 68.719c0.822-1.272 4.114-0.673 5.312 1.945 1.198 2.619 0.973 8.306 0.15 8.605-2.169 0.673-1.497-2.47-3.367-5.313-1.871-2.692-2.918-3.964-2.095-5.237z"/>
- <path fill="#161616" d="m144.024 68.774c0.812-1.255 4.062-0.664 5.243 1.92 1.182 2.585 0.96 8.198 0.147 8.493-2.141 0.665-1.477-2.438-3.323-5.244-1.846-2.657-2.88-3.913-2.067-5.169z"/>
- <path fill="#1e1e1e" d="m144.078 68.829c0.801-1.239 4.008-0.655 5.174 1.895 1.167 2.551 0.947 8.09 0.146 8.381-2.113 0.656-1.458-2.405-3.28-5.174-1.821-2.623-2.842-3.863-2.04-5.102z"/>
- <path fill="#262626" d="m144.132 68.884c0.791-1.222 3.955-0.646 5.105 1.87 1.151 2.517 0.935 7.982 0.144 8.27-2.085 0.647-1.438-2.374-3.235-5.105-1.798-2.589-2.805-3.812-2.014-5.035z"/>
- <path fill="#2d2d2d" d="m144.186 68.939c0.779-1.206 3.9-0.638 5.036 1.844 1.135 2.483 0.922 7.874 0.142 8.158-2.057 0.639-1.419-2.341-3.192-5.037-1.773-2.552-2.766-3.758-1.986-4.965z"/>
- <path fill="#353535" d="m144.24 68.994c0.769-1.189 3.848-0.629 4.967 1.819 1.12 2.449 0.909 7.766 0.141 8.046-2.028 0.629-1.399-2.31-3.148-4.967-1.75-2.518-2.73-3.708-1.96-4.898z"/>
- <path fill="#3d3d3d" d="m144.294 69.049c0.76-1.172 3.794-0.621 4.898 1.793 1.104 2.415 0.896 7.658 0.138 7.934-2 0.621-1.38-2.277-3.104-4.898-1.725-2.482-2.691-3.655-1.932-4.829z"/>
- <path fill="#444" d="m144.348 69.104c0.748-1.156 3.74-0.612 4.829 1.768 1.088 2.38 0.884 7.55 0.136 7.822-1.973 0.612-1.36-2.245-3.062-4.829-1.699-2.448-2.651-3.604-1.903-4.761z"/>
- <path fill="#4c4c4c" d="m144.402 69.16c0.737-1.14 3.687-0.603 4.76 1.743 1.073 2.347 0.871 7.442 0.134 7.71-1.943 0.604-1.341-2.213-3.017-4.76-1.676-2.414-2.614-3.554-1.877-4.693z"/>
- <path fill="#545454" d="m144.456 69.215c0.727-1.123 3.634-0.595 4.691 1.717 1.057 2.313 0.857 7.334 0.132 7.598-1.916 0.595-1.321-2.181-2.973-4.691-1.652-2.378-2.577-3.501-1.85-4.624z"/>
- <path fill="#5b5b5b" d="m144.51 69.27c0.717-1.106 3.58-0.585 4.622 1.692 1.041 2.278 0.847 7.226 0.131 7.486-1.888 0.586-1.303-2.149-2.93-4.622-1.628-2.343-2.539-3.45-1.823-4.556z"/>
- <path fill="#636363" d="m144.564 69.325c0.705-1.09 3.526-0.577 4.553 1.667 1.026 2.245 0.833 7.118 0.128 7.375-1.858 0.577-1.282-2.117-2.885-4.553-1.604-2.309-2.501-3.399-1.796-4.489z"/>
- <path fill="#6b6b6b" d="m144.618 69.38c0.694-1.073 3.473-0.568 4.483 1.642 1.011 2.21 0.82 7.01 0.127 7.263-1.831 0.568-1.264-2.084-2.842-4.484-1.578-2.274-2.462-3.347-1.768-4.421z"/>
- <path fill="#727272" d="m144.672 69.435c0.685-1.057 3.42-0.56 4.414 1.617 0.995 2.176 0.81 6.902 0.125 7.15-1.803 0.56-1.243-2.053-2.798-4.415-1.554-2.238-2.425-3.295-1.741-4.352z"/>
- <path fill="#7a7a7a" d="m144.726 69.49c0.673-1.041 3.365-0.551 4.345 1.591 0.979 2.143 0.796 6.794 0.123 7.039-1.775 0.551-1.224-2.021-2.754-4.346-1.53-2.203-2.387-3.244-1.714-4.284z"/>
- <path fill="#828282" d="m144.78 69.545c0.662-1.023 3.313-0.542 4.276 1.566 0.964 2.108 0.782 6.686 0.121 6.926-1.746 0.542-1.204-1.988-2.711-4.276-1.505-2.167-2.348-3.192-1.686-4.216z"/>
- <path fill="#898989" d="m144.834 69.6c0.652-1.007 3.259-0.533 4.207 1.541s0.771 6.578 0.119 6.815c-1.718 0.534-1.185-1.956-2.666-4.207-1.482-2.134-2.311-3.142-1.66-4.149z"/>
- <path fill="#919191" d="m144.888 69.655c0.641-0.99 3.206-0.524 4.138 1.516 0.933 2.04 0.758 6.47 0.117 6.703-1.69 0.525-1.165-1.924-2.623-4.138-1.457-2.098-2.273-3.09-1.632-4.081z"/>
- <path fill="#999" d="m144.942 69.71c0.63-0.974 3.152-0.516 4.069 1.49s0.744 6.362 0.114 6.591c-1.662 0.516-1.146-1.892-2.579-4.069-1.432-2.062-2.234-3.037-1.604-4.012z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#666" d="m193.11 94.985c10.8-1.152 14.616-5.328 16.56-12.6 1.729-6.48 1.801-13.68-3.023-22.104-4.536-8.063-7.128-9.36-13.681-9.864-10.079-0.864-14.832 6.192-17.063 11.232-2.376 5.472-1.872 4.68-1.729 11.592 0.145 7.272 4.245 9.299 6.766 13.835 2.519 4.465 10.946 7.982 12.17 7.909z"/>
- <path fill="#6d6d6d" d="m193.115 94.944c10.759-1.131 14.618-5.354 16.515-12.569 1.701-6.525 1.785-13.686-3.002-21.912-4.434-7.797-7.038-9.081-13.512-9.581-10.049-0.861-14.941 5.873-17.181 10.874-2.304 5.28-1.878 4.718-1.726 11.539 0.16 7.268 4.268 9.223 6.784 13.76 2.521 4.475 10.898 7.962 12.122 7.889z"/>
- <path fill="#757575" d="m193.12 94.902c10.718-1.11 14.62-5.379 16.469-12.538 1.676-6.57 1.771-13.692-2.979-21.721-4.331-7.53-6.947-8.801-13.344-9.297-10.018-0.858-15.05 5.553-17.298 10.516-2.229 5.087-1.885 4.757-1.722 11.487 0.176 7.264 4.289 9.146 6.803 13.686 2.52 4.485 10.848 7.942 12.071 7.867z"/>
- <path fill="#7c7c7c" d="m193.126 94.861c10.675-1.09 14.621-5.405 16.423-12.507 1.648-6.616 1.756-13.698-2.958-21.529-4.229-7.263-6.856-8.522-13.176-9.014-9.985-0.854-15.158 5.234-17.414 10.158-2.156 4.895-1.891 4.795-1.719 11.434 0.193 7.26 4.31 9.07 6.822 13.611 2.52 4.495 10.798 7.922 12.022 7.847z"/>
- <path fill="#848484" d="m193.131 94.82c10.635-1.069 14.623-5.431 16.377-12.476 1.622-6.661 1.741-13.704-2.936-21.337-4.126-6.996-6.767-8.242-13.008-8.73-9.955-0.852-15.267 4.915-17.53 9.8-2.084 4.703-1.896 4.833-1.716 11.38 0.209 7.256 4.332 8.995 6.841 13.537 2.52 4.505 10.748 7.902 11.972 7.826z"/>
- <path fill="#8c8c8c" d="m193.136 94.778c10.593-1.048 14.625-5.457 16.331-12.445 1.596-6.706 1.726-13.709-2.913-21.145-4.025-6.729-6.678-7.963-12.841-8.447-9.924-0.848-15.375 4.595-17.647 9.441-2.01 4.51-1.903 4.872-1.712 11.328 0.225 7.251 4.354 8.918 6.858 13.462 2.521 4.517 10.7 7.883 11.924 7.806z"/>
- <path fill="#939393" d="m193.141 94.737c10.552-1.027 14.627-5.482 16.286-12.414 1.568-6.751 1.711-13.715-2.893-20.954-3.922-6.462-6.586-7.683-12.672-8.163-9.892-0.845-15.483 4.276-17.764 9.083-1.938 4.318-1.909 4.91-1.709 11.275 0.24 7.247 4.375 8.842 6.878 13.387 2.521 4.528 10.651 7.863 11.874 7.786z"/>
- <path fill="#9b9b9b" d="m193.146 94.695c10.51-1.007 14.63-5.508 16.241-12.382 1.542-6.796 1.694-13.721-2.87-20.762-3.82-6.195-6.496-7.404-12.504-7.879-9.861-0.842-15.592 3.956-17.882 8.725-1.863 4.126-1.915 4.949-1.706 11.223 0.258 7.243 4.397 8.766 6.897 13.313 2.521 4.535 10.601 7.841 11.824 7.762z"/>
- <path fill="#a3a3a3" d="m193.151 94.654c10.469-0.986 14.632-5.534 16.196-12.351 1.515-6.842 1.68-13.727-2.85-20.57-3.717-5.928-6.405-7.125-12.335-7.596-9.83-0.839-15.7 3.637-17.998 8.367-1.791 3.933-1.922 4.987-1.703 11.169 0.273 7.239 4.419 8.689 6.916 13.238 2.521 4.547 10.551 7.822 11.774 7.743z"/>
- <path fill="#aaa" d="m193.157 94.612c10.427-0.965 14.633-5.56 16.149-12.32 1.488-6.887 1.666-13.733-2.826-20.379-3.615-5.661-6.316-6.845-12.168-7.313-9.799-0.835-15.809 3.317-18.114 8.009-1.718 3.741-1.928 5.025-1.7 11.117 0.29 7.235 4.44 8.613 6.936 13.163 2.519 4.558 10.499 7.804 11.723 7.723z"/>
- <path fill="#b2b2b2" d="m193.162 94.571c10.386-0.944 14.635-5.585 16.104-12.289 1.462-6.932 1.649-13.739-2.806-20.188-3.512-5.394-6.225-6.565-11.999-7.029-9.768-0.833-15.917 2.998-18.23 7.651-1.646 3.549-1.935 5.064-1.697 11.064 0.306 7.231 4.462 8.537 6.954 13.088 2.52 4.569 10.451 7.784 11.674 7.703z"/>
- <path fill="#bababa" d="m193.167 94.529c10.345-0.923 14.638-5.611 16.059-12.258 1.436-6.977 1.636-13.744-2.782-19.995-3.41-5.127-6.135-6.286-11.832-6.746-9.736-0.829-16.025 2.679-18.347 7.293-1.572 3.356-1.941 5.103-1.694 11.011 0.322 7.227 4.484 8.461 6.973 13.014 2.519 4.579 10.4 7.764 11.623 7.681z"/>
- <path fill="#c1c1c1" d="m193.172 94.488c10.304-0.903 14.64-5.637 16.014-12.227 1.409-7.022 1.62-13.75-2.762-19.804-3.308-4.86-6.044-6.006-11.662-6.462-9.705-0.826-16.135 2.359-18.466 6.935-1.498 3.164-1.945 5.141-1.689 10.958 0.338 7.223 4.506 8.385 6.991 12.939 2.519 4.59 10.351 7.744 11.574 7.661z"/>
- <path fill="#c9c9c9" d="m193.177 94.447c10.262-0.882 14.641-5.663 15.967-12.196 1.383-7.068 1.605-13.756-2.738-19.612-3.206-4.593-5.954-5.727-11.496-6.179-9.673-0.823-16.242 2.04-18.581 6.577-1.425 2.972-1.952 5.179-1.687 10.906 0.354 7.219 4.526 8.308 7.01 12.865 2.52 4.598 10.302 7.723 11.525 7.639z"/>
- <path fill="#d1d1d1" d="m193.182 94.405c10.221-0.861 14.643-5.688 15.922-12.165 1.355-7.113 1.591-13.762-2.717-19.42-3.104-4.326-5.864-5.448-11.327-5.895-9.644-0.82-16.352 1.721-18.698 6.219-1.353 2.779-1.959 5.217-1.684 10.853 0.369 7.214 4.549 8.232 7.028 12.79 2.521 4.609 10.254 7.703 11.476 7.618z"/>
- <path fill="#d8d8d8" d="m193.187 94.364c10.179-0.841 14.645-5.714 15.876-12.133 1.33-7.158 1.576-13.768-2.694-19.229-3.001-4.059-5.773-5.168-11.16-5.612-9.61-0.817-16.459 1.401-18.813 5.861-1.279 2.586-1.965 5.256-1.682 10.8 0.387 7.21 4.571 8.156 7.049 12.715 2.519 4.619 10.202 7.684 11.424 7.598z"/>
- <path fill="#e0e0e0" d="m193.193 94.322c10.137-0.82 14.646-5.74 15.83-12.103 1.303-7.203 1.561-13.773-2.673-19.037-2.898-3.792-5.684-4.889-10.991-5.328-9.58-0.813-16.568 1.082-18.931 5.502-1.206 2.395-1.972 5.294-1.679 10.747 0.403 7.207 4.592 8.08 7.067 12.641 2.521 4.631 10.154 7.666 11.377 7.578z"/>
- <path fill="#e8e8e8" d="m193.198 94.281c10.096-0.799 14.648-5.766 15.785-12.071 1.275-7.249 1.545-13.779-2.651-18.845-2.796-3.525-5.593-4.609-10.823-5.044-9.549-0.81-16.677 0.762-19.048 5.145-1.133 2.202-1.978 5.333-1.675 10.694 0.419 7.202 4.614 8.003 7.086 12.566 2.52 4.638 10.103 7.643 11.326 7.555z"/>
- <path fill="#efefef" d="m193.203 94.239c10.055-0.778 14.65-5.792 15.739-12.04 1.25-7.293 1.531-13.785-2.629-18.653-2.694-3.258-5.502-4.33-10.655-4.761-9.517-0.807-16.785 0.443-19.165 4.786-1.059 2.01-1.983 5.372-1.671 10.642 0.435 7.198 4.636 7.928 7.104 12.492 2.52 4.649 10.055 7.624 11.277 7.534z"/>
- <path fill="#f7f7f7" d="m193.208 94.198c10.014-0.757 14.652-5.817 15.694-12.009 1.223-7.339 1.516-13.792-2.607-18.462-2.592-2.991-5.413-4.05-10.486-4.478-9.487-0.804-16.895 0.124-19.282 4.428-0.986 1.817-1.989 5.41-1.668 10.589 0.451 7.194 4.657 7.851 7.123 12.417 2.519 4.661 10.004 7.605 11.226 7.515z"/>
- <path fill="#fff" d="m193.213 94.156c9.973-0.737 14.654-5.843 15.648-11.978 1.197-7.384 1.501-13.797-2.585-18.27-2.489-2.724-5.322-3.771-10.319-4.194-9.455-0.801-17.002-0.196-19.397 4.07-0.913 1.625-1.996 5.448-1.665 10.536 0.467 7.19 4.679 7.775 7.142 12.342 2.519 4.671 9.954 7.586 11.176 7.494z"/>
- </g>
- <path d="m179.841 74.4585c5.4 0 8.568 4.824 9.648 11.016 0.432 2.808-0.216 6.048-1.944 8.28-1.944 2.592-5.4 4.176-8.208 4.176-2.664 0-5.688 0.432-7.271-1.728-1.584-2.232-1.944-7.2-1.944-10.728 0-3.96 1.152-6.768 3.168-9 1.511-1.657 4.247-2.016 6.551-2.016z"/>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m192.591 66.68c0.98-0.653 2.612 0 4.489 2.122 2.039 2.285 2.938 4.08 0.489 5.385-1.877 0.98-2.448-1.958-3.59-3.182-1.795-1.959-3.346-3.02-1.388-4.325z"/>
- <path fill="#070707" d="m192.631 66.738c0.96-0.649 2.573 0 4.423 2.09 2.009 2.251 2.864 4.02 0.481 5.305-1.837 0.977-2.403-1.929-3.525-3.135-1.768-1.925-3.296-2.965-1.379-4.26z"/>
- <path fill="#0f0f0f" d="m192.671 66.797c0.939-0.645 2.534 0 4.356 2.059 1.978 2.217 2.792 3.958 0.474 5.225-1.798 0.974-2.357-1.9-3.46-3.087-1.742-1.895-3.247-2.913-1.37-4.197z"/>
- <path fill="#161616" d="m192.711 66.855c0.919-0.641 2.495 0 4.289 2.027 1.948 2.184 2.721 3.898 0.467 5.146-1.759 0.971-2.313-1.871-3.396-3.041-1.715-1.861-3.197-2.858-1.36-4.132z"/>
- <path fill="#1e1e1e" d="m192.751 66.914c0.899-0.637 2.457 0 4.223 1.996 1.918 2.149 2.647 3.838 0.46 5.065-1.72 0.968-2.269-1.842-3.331-2.993-1.689-1.83-3.148-2.805-1.352-4.068z"/>
- <path fill="#262626" d="m192.791 66.973c0.878-0.633 2.418 0 4.155 1.964 1.888 2.116 2.576 3.777 0.453 4.986-1.68 0.965-2.224-1.813-3.267-2.946-1.661-1.798-3.097-2.752-1.341-4.004z"/>
- <path fill="#2d2d2d" d="m192.831 67.031c0.858-0.629 2.379 0 4.089 1.933 1.857 2.082 2.503 3.717 0.445 4.906-1.641 0.961-2.178-1.784-3.201-2.898-1.636-1.767-3.048-2.7-1.333-3.941z"/>
- <path fill="#353535" d="m192.87 67.09c0.838-0.625 2.341 0 4.023 1.902 1.827 2.047 2.431 3.656 0.438 4.826-1.601 0.958-2.133-1.755-3.137-2.852-1.608-1.735-2.998-2.646-1.324-3.876z"/>
- <path fill="#3d3d3d" d="m192.91 67.148c0.818-0.621 2.302 0 3.956 1.87 1.797 2.014 2.359 3.596 0.431 4.746-1.562 0.956-2.088-1.726-3.071-2.804-1.583-1.702-2.95-2.592-1.316-3.812z"/>
- <path fill="#444" d="m192.95 67.207c0.798-0.617 2.263 0 3.889 1.839 1.768 1.98 2.287 3.535 0.425 4.666-1.523 0.952-2.043-1.697-3.008-2.757-1.556-1.671-2.899-2.539-1.306-3.748z"/>
- <path fill="#4c4c4c" d="m192.99 67.266c0.777-0.614 2.224 0 3.823 1.807 1.735 1.946 2.214 3.474 0.416 4.586-1.483 0.949-1.998-1.667-2.942-2.709-1.529-1.639-2.85-2.486-1.297-3.684z"/>
- <path fill="#545454" d="m193.03 67.325c0.757-0.61 2.185 0 3.756 1.775 1.706 1.912 2.143 3.414 0.409 4.506-1.444 0.946-1.953-1.639-2.878-2.663-1.502-1.606-2.799-2.431-1.287-3.618z"/>
- <path fill="#5b5b5b" d="m193.07 67.383c0.736-0.605 2.146 0 3.688 1.744 1.677 1.878 2.07 3.353 0.402 4.426-1.405 0.943-1.908-1.609-2.813-2.615-1.475-1.575-2.749-2.378-1.277-3.555z"/>
- <path fill="#636363" d="m193.11 67.442c0.716-0.602 2.106 0 3.622 1.712 1.646 1.844 1.998 3.293 0.395 4.347-1.364 0.94-1.862-1.581-2.748-2.568-1.449-1.543-2.701-2.326-1.269-3.491z"/>
- <path fill="#6b6b6b" d="m193.15 67.5c0.696-0.598 2.069 0 3.556 1.681 1.615 1.811 1.925 3.232 0.387 4.267-1.325 0.937-1.818-1.552-2.683-2.521-1.423-1.511-2.651-2.272-1.26-3.427z"/>
- <path fill="#727272" d="m193.19 67.559c0.675-0.594 2.03 0 3.489 1.649 1.585 1.777 1.853 3.172 0.38 4.187-1.287 0.935-1.774-1.522-2.619-2.473-1.396-1.48-2.601-2.219-1.25-3.363z"/>
- <path fill="#7a7a7a" d="m193.23 67.618c0.654-0.59 1.991 0 3.422 1.618 1.555 1.743 1.781 3.111 0.373 4.107-1.247 0.931-1.729-1.494-2.554-2.426-1.369-1.448-2.551-2.166-1.241-3.299z"/>
- <path fill="#828282" d="m193.269 67.677c0.635-0.586 1.953 0 3.355 1.586 1.525 1.708 1.709 3.05 0.366 4.026-1.208 0.928-1.684-1.464-2.489-2.378-1.342-1.416-2.501-2.112-1.232-3.234z"/>
- <path fill="#898989" d="m193.309 67.735c0.614-0.582 1.914 0 3.29 1.555 1.493 1.675 1.636 2.99 0.357 3.947-1.169 0.925-1.639-1.435-2.424-2.332-1.316-1.384-2.452-2.058-1.223-3.17z"/>
- <path fill="#919191" d="m193.349 67.794c0.595-0.578 1.875 0 3.223 1.523 1.464 1.641 1.564 2.93 0.351 3.867-1.129 0.922-1.594-1.406-2.359-2.284-1.29-1.352-2.403-2.005-1.215-3.106z"/>
- <path fill="#999" d="m193.389 67.853c0.573-0.574 1.836 0 3.155 1.492 1.435 1.607 1.492 2.869 0.345 3.787-1.091 0.919-1.55-1.377-2.295-2.237-1.263-1.32-2.353-1.953-1.205-3.042z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m165.498 69.906c1.693-0.654 3.012-0.69 5.63 1.036 3.166 2.088 1.705 5.245-0.779 4.601-2.146-0.556-2.417-0.681-4.391-1.086-3.101-0.648-3.641-3.322-0.46-4.551z"/>
- <path fill="#050505" d="m165.564 70.033c1.658-0.629 2.973-0.656 5.555 1.026 3.066 2.009 1.654 5.012-0.805 4.38-2.131-0.547-2.345-0.656-4.284-1.052-3.055-0.634-3.587-3.173-0.466-4.354z"/>
- <path fill="#0a0a0a" d="m165.63 70.16c1.623-0.604 2.935-0.622 5.481 1.015 2.965 1.93 1.602 4.779-0.83 4.159-2.119-0.539-2.274-0.63-4.179-1.018-3.009-0.618-3.533-3.022-0.472-4.156z"/>
- <path fill="#0f0f0f" d="m165.696 70.287c1.587-0.579 2.895-0.587 5.406 1.005 2.864 1.851 1.551 4.546-0.855 3.938-2.105-0.53-2.203-0.605-4.073-0.983-2.963-0.604-3.48-2.873-0.478-3.96z"/>
- <path fill="#141414" d="m165.761 70.413c1.553-0.553 2.856-0.553 5.331 0.995 2.766 1.772 1.5 4.313-0.88 3.717-2.092-0.521-2.131-0.58-3.967-0.949-2.916-0.588-3.425-2.723-0.484-3.763z"/>
- <path fill="#191919" d="m165.827 70.54c1.519-0.528 2.818-0.519 5.258 0.984 2.664 1.693 1.448 4.079-0.905 3.497-2.079-0.513-2.06-0.554-3.861-0.915-2.873-0.573-3.373-2.573-0.492-3.566z"/>
- <path fill="#1e1e1e" d="m165.893 70.667c1.482-0.503 2.778-0.484 5.183 0.974 2.564 1.614 1.397 3.846-0.93 3.276-2.067-0.504-1.989-0.529-3.756-0.88-2.826-0.559-3.319-2.425-0.497-3.37z"/>
- <path fill="#232323" d="m165.959 70.793c1.447-0.478 2.74-0.45 5.108 0.964 2.464 1.535 1.345 3.613-0.955 3.055-2.053-0.496-1.917-0.503-3.651-0.846-2.779-0.543-3.264-2.274-0.502-3.173z"/>
- <path fill="#282828" d="m166.025 70.92c1.412-0.453 2.701-0.416 5.034 0.954 2.362 1.456 1.293 3.38-0.981 2.834-2.04-0.487-1.845-0.478-3.545-0.812-2.733-0.528-3.21-2.125-0.508-2.976z"/>
- <path fill="#2d2d2d" d="m166.09 71.047c1.378-0.428 2.663-0.382 4.96 0.943 2.264 1.377 1.242 3.146-1.006 2.613-2.026-0.478-1.773-0.453-3.438-0.777-2.688-0.513-3.158-1.974-0.516-2.779z"/>
- <path fill="#333" d="m166.156 71.173c1.343-0.402 2.624-0.347 4.885 0.933 2.163 1.298 1.191 2.914-1.029 2.392-2.015-0.47-1.703-0.428-3.334-0.743-2.642-0.498-3.104-1.824-0.522-2.582z"/>
- <path fill="#383838" d="m166.222 71.3c1.307-0.377 2.585-0.313 4.81 0.922 2.063 1.219 1.14 2.681-1.055 2.171-2.001-0.461-1.631-0.402-3.229-0.708-2.594-0.483-3.048-1.674-0.526-2.385z"/>
- <path fill="#3d3d3d" d="m166.288 71.427c1.272-0.352 2.546-0.279 4.736 0.913 1.962 1.14 1.088 2.447-1.081 1.95-1.988-0.452-1.56-0.377-3.122-0.674-2.55-0.469-2.995-1.526-0.533-2.189z"/>
- <path fill="#424242" d="m166.354 71.554c1.236-0.327 2.507-0.245 4.661 0.902 1.861 1.061 1.037 2.214-1.106 1.729-1.974-0.444-1.488-0.352-3.016-0.64-2.504-0.453-2.942-1.375-0.539-1.991z"/>
- <path fill="#474747" d="m166.419 71.68c1.203-0.302 2.469-0.21 4.587 0.892 1.762 0.982 0.986 1.98-1.13 1.508-1.962-0.435-1.417-0.326-2.911-0.606-2.458-0.437-2.888-1.224-0.546-1.794z"/>
- <path fill="#4c4c4c" d="m166.485 71.807c1.167-0.276 2.429-0.176 4.513 0.882 1.66 0.903 0.935 1.748-1.156 1.288-1.948-0.426-1.345-0.301-2.805-0.572-2.412-0.423-2.834-1.076-0.552-1.598z"/>
- <path fill="#515151" d="m166.551 71.934c1.133-0.251 2.391-0.142 4.438 0.871 1.56 0.824 0.883 1.515-1.181 1.067-1.936-0.417-1.274-0.275-2.699-0.537-2.366-0.408-2.781-0.926-0.558-1.401z"/>
- <path fill="#565656" d="m166.617 72.061c1.097-0.227 2.351-0.108 4.363 0.861 1.46 0.745 0.831 1.281-1.206 0.846-1.922-0.409-1.202-0.25-2.594-0.503-2.319-0.393-2.726-0.777-0.563-1.204z"/>
- <path fill="#5b5b5b" d="m166.683 72.187c1.062-0.201 2.312-0.073 4.289 0.851 1.358 0.666 0.778 1.048-1.231 0.625-1.91-0.4-1.131-0.225-2.489-0.469-2.274-0.377-2.672-0.626-0.569-1.007z"/>
- <path fill="#606060" d="m166.748 72.314c1.027-0.176 2.274-0.04 4.215 0.84 1.26 0.587 0.729 0.815-1.256 0.404-1.896-0.392-1.06-0.2-2.383-0.435-2.228-0.361-2.619-0.475-0.576-0.809z"/>
- <path fill="#666" d="m166.814 72.44c0.992-0.151 2.234-0.005 4.14 0.83 1.159 0.508 0.677 0.582-1.281 0.183-1.883-0.383-0.987-0.174-2.276-0.4-2.183-0.346-2.566-0.325-0.583-0.613z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#666" d="m159.99 128.249c-9.36 0.36-24.192-25.848-24.552-14.976-0.288 9.216 0.216 9.072 0.216 18 0 5.976-2.736 6.408-8.64 15.408-3.024 4.752-5.4 9.864-7.272 15.048-1.152 3.096-2.232 6.336-3.096 9.504-0.36 1.584-1.008 3.24-1.368 4.824-2.952 10.872-13.464 24.264-15.912 35.136-2.448 10.8-5.328 17.712-4.968 32.185 0.36 14.472 0.504 10.295 4.896 13.896 4.32 3.601 8.784 6.983 15.624 13.032 7.2 6.264 22.177 17.208 24.192 20.592 2.16 3.456 2.088 11.232 0.792 13.752-1.296 2.448-12.6 3.816-12.528 3.816-0.071 0 9.864 13.68 11.809 15.623 1.872 1.873 9.936 10.873 42.768 4.752 18.504-3.455 32.832-13.823 43.2-23.832 13.392-13.031 6.624-16.775 8.352-23.327 2.521-9.433 10.729-12.96 12.601-23.616 0.216-1.512 0.72-2.664 2.088-4.896 2.088-3.168 1.584-9.432 1.584-15.191 0-14.977-1.729-30.24-5.185-41.472-3.168-10.512-8.208-17.856-12.527-27.36-8.641-18.936-8.208-27.432-15.912-39.528-8.784-13.968-4.464-23.256-16.128-22.68-14.546 0.79-26.282 20.734-40.034 21.31z"/>
- <path fill="#6d6d6d" d="m159.973 129.334c-9.281 0.353-23.746-25.511-24.242-15.179-0.316 8.755 0.1 8.678 0.03 17.247-0.15 5.87-2.953 6.637-8.727 15.481-3.013 4.763-5.273 9.812-6.993 14.877-0.968 3.253-1.56 6.422-2.43 9.526-0.415 1.642-1.497 3.187-2.185 5.042-3.254 10.78-13.545 24.182-15.961 34.877-2.466 10.81-5.37 17.694-4.961 32.141 0.366 14 0.395 10.177 4.773 13.816 4.283 3.616 8.839 7.069 15.662 13.103 7.183 6.248 22.237 17.216 24.243 20.588 2.149 3.444 2.131 11.317 0.844 13.823-1.284 2.439-12.579 3.875-12.508 3.875-0.071 0 9.815 13.566 11.757 15.508 1.87 1.87 9.902 10.809 42.678 4.704 18.524-3.455 33.124-13.753 43.078-23.856 12.789-12.762 6.107-16.773 7.826-23.291 2.513-9.416 11.277-12.961 13.143-23.602 0.216-1.508 0.754-2.654 2.113-4.876 2.096-3.202 1.561-9.447 1.582-15.185 0.067-15.027-1.705-30.234-5.159-41.434-3.171-10.483-8.204-17.817-12.515-27.305-8.624-18.906-8.221-27.415-15.933-39.474-8.586-13.613-4.601-22.583-16.011-21.99-14.374 0.826-26.375 21.016-40.104 21.584z"/>
- <path fill="#757575" d="m159.955 130.419c-9.201 0.346-23.299-25.175-23.931-15.383-0.344 8.295-0.017 8.284-0.156 16.494-0.301 5.764-3.17 6.867-8.812 15.555-3.002 4.774-5.148 9.76-6.714 14.706-0.784 3.41-0.889 6.508-1.764 9.548-0.471 1.699-1.986 3.133-3.003 5.259-3.554 10.688-13.624 24.1-16.009 34.619-2.483 10.82-5.411 17.678-4.954 32.097 0.373 13.528 0.285 10.058 4.651 13.739 4.244 3.632 8.893 7.154 15.699 13.171 7.167 6.233 22.299 17.224 24.294 20.585 2.142 3.432 2.175 11.404 0.896 13.896-1.271 2.428-12.558 3.932-12.486 3.932-0.071 0 9.768 13.453 11.705 15.392 1.867 1.867 9.867 10.744 42.588 4.655 18.545-3.453 33.415-13.682 42.956-23.879 12.187-12.492 5.591-16.771 7.3-23.258 2.507-9.398 11.826-12.959 13.687-23.586 0.215-1.5 0.788-2.643 2.138-4.854 2.104-3.235 1.538-9.462 1.58-15.178 0.133-15.076-1.681-30.228-5.135-41.394-3.173-10.455-8.199-17.779-12.501-27.25-8.609-18.877-8.234-27.399-15.952-39.42-8.389-13.258-4.739-21.911-15.895-21.301-14.21 0.859-26.474 21.295-40.182 21.855z"/>
- <path fill="#7c7c7c" d="m159.938 131.504c-9.122 0.338-22.854-24.838-23.622-15.586-0.37 7.833-0.131 7.89-0.341 15.741-0.452 5.657-3.388 7.096-8.899 15.628-2.99 4.785-5.021 9.708-6.433 14.535-0.602 3.566-0.218 6.594-1.099 9.57-0.526 1.756-2.475 3.08-3.82 5.477-3.854 10.596-13.703 24.016-16.057 34.361-2.501 10.829-5.453 17.66-4.948 32.052 0.38 13.059 0.177 9.939 4.529 13.66 4.208 3.648 8.948 7.239 15.739 13.242 7.149 6.217 22.358 17.232 24.345 20.581 2.13 3.42 2.216 11.489 0.946 13.968-1.259 2.417-12.538 3.99-12.466 3.99-0.072 0 9.718 13.34 11.653 15.275 1.865 1.864 9.833 10.681 42.498 4.607 18.565-3.453 33.706-13.609 42.834-23.902 11.583-12.223 5.074-16.771 6.774-23.223 2.499-9.382 12.375-12.959 14.229-23.57 0.215-1.496 0.821-2.633 2.162-4.834 2.111-3.271 1.516-9.478 1.578-15.173 0.199-15.125-1.657-30.221-5.109-41.354-3.177-10.427-8.196-17.741-12.488-27.195-8.594-18.848-8.247-27.383-15.972-39.366-8.192-12.903-4.877-21.239-15.779-20.612-14.041 0.894-26.569 21.576-40.254 22.128z"/>
- <path fill="#848484" d="m159.921 132.589c-9.043 0.331-22.406-24.502-23.312-15.79-0.398 7.373-0.247 7.496-0.527 14.988-0.602 5.551-3.604 7.326-8.984 15.702-2.98 4.796-4.896 9.656-6.154 14.364-0.417 3.723 0.455 6.679-0.432 9.592-0.582 1.813-2.964 3.026-4.639 5.694-4.153 10.504-13.782 23.936-16.104 34.104-2.519 10.838-5.495 17.643-4.941 32.008 0.387 12.586 0.067 9.819 4.407 13.582 4.171 3.664 9.002 7.324 15.777 13.311 7.132 6.201 22.419 17.24 24.396 20.576 2.12 3.41 2.259 11.578 0.998 14.041-1.247 2.408-12.517 4.049-12.446 4.049-0.07 0 9.67 13.227 11.604 15.16 1.861 1.861 9.798 10.615 42.409 4.558 18.584-3.45 33.996-13.538 42.711-23.926 10.979-11.952 4.557-16.769 6.248-23.187 2.491-9.367 12.924-12.959 14.771-23.557 0.215-1.49 0.856-2.622 2.188-4.813 2.118-3.305 1.491-9.494 1.575-15.166 0.267-15.174-1.635-30.215-5.086-41.314-3.179-10.399-8.19-17.703-12.473-27.141-8.579-18.818-8.262-27.366-15.994-39.312-7.993-12.547-5.013-20.565-15.661-19.922-13.876 0.927-26.669 21.855-40.331 22.399z"/>
- <path fill="#8c8c8c" d="m159.903 133.674c-8.963 0.323-21.961-24.165-23.001-15.994-0.426 6.912-0.363 7.102-0.713 14.236-0.753 5.445-3.821 7.554-9.071 15.775-2.969 4.807-4.768 9.604-5.875 14.192-0.232 3.881 1.128 6.766 0.234 9.615-0.638 1.87-3.452 2.972-5.455 5.911-4.455 10.413-13.862 23.853-16.153 33.845-2.537 10.849-5.537 17.625-4.935 31.963 0.393 12.115-0.042 9.701 4.285 13.505 4.133 3.68 9.057 7.409 15.814 13.38 7.116 6.188 22.48 17.248 24.447 20.574 2.109 3.398 2.301 11.662 1.049 14.113-1.235 2.396-12.496 4.104-12.425 4.104-0.071 0 9.622 13.114 11.552 15.045 1.86 1.858 9.763 10.552 42.319 4.509 18.604-3.449 34.288-13.467 42.589-23.949 10.377-11.682 4.04-16.766 5.721-23.15 2.486-9.35 13.474-12.959 15.316-23.542 0.214-1.483 0.89-2.611 2.213-4.793 2.126-3.339 1.468-9.507 1.573-15.158 0.333-15.224-1.611-30.208-5.062-41.276-3.181-10.37-8.186-17.664-12.459-27.085-8.563-18.789-8.275-27.35-16.014-39.258-7.796-12.192-5.151-19.893-15.545-19.233-13.707 0.961-26.763 22.134-40.404 22.671z"/>
- <path fill="#939393" d="m159.886 134.759c-8.885 0.316-21.516-23.829-22.691-16.197-0.454 6.451-0.479 6.708-0.899 13.482-0.903 5.339-4.038 7.784-9.157 15.849-2.957 4.818-4.642 9.552-5.595 14.021-0.05 4.037 1.799 6.852 0.9 9.637-0.693 1.928-3.941 2.919-6.273 6.129-4.756 10.32-13.941 23.77-16.201 33.587-2.555 10.858-5.579 17.608-4.928 31.92 0.399 11.644-0.151 9.581 4.162 13.424 4.096 3.697 9.111 7.494 15.854 13.451 7.099 6.17 22.541 17.256 24.498 20.569 2.1 3.387 2.344 11.75 1.101 14.186-1.223 2.387-12.476 4.163-12.404 4.163-0.071 0 9.573 13.001 11.5 14.929 1.857 1.856 9.729 10.488 42.229 4.461 18.625-3.449 34.579-13.396 42.467-23.973 9.774-11.412 3.523-16.764 5.195-23.115 2.479-9.334 14.022-12.959 15.858-23.527 0.214-1.479 0.924-2.601 2.238-4.772 2.134-3.373 1.445-9.522 1.571-15.151 0.399-15.273-1.587-30.201-5.036-41.237-3.185-10.342-8.184-17.625-12.446-27.03-8.548-18.76-8.288-27.333-16.034-39.204-7.598-11.837-5.289-19.221-15.428-18.544-13.543 0.994-26.863 22.413-40.481 22.942z"/>
- <path fill="#9b9b9b" d="m159.868 135.844c-8.805 0.308-21.068-23.492-22.381-16.401-0.481 5.991-0.594 6.314-1.085 12.73-1.053 5.232-4.253 8.013-9.243 15.922-2.946 4.829-4.515 9.5-5.314 13.85 0.133 4.194 2.471 6.937 1.565 9.658-0.749 1.986-4.43 2.866-7.091 6.347-5.056 10.229-14.021 23.689-16.249 33.329-2.572 10.868-5.621 17.591-4.921 31.876 0.405 11.172-0.261 9.463 4.04 13.346 4.058 3.713 9.166 7.58 15.892 13.521 7.082 6.155 22.601 17.265 24.548 20.567 2.092 3.373 2.388 11.834 1.152 14.256-1.21 2.377-12.454 4.222-12.383 4.222-0.071 0 9.523 12.888 11.45 14.813 1.854 1.854 9.692 10.424 42.138 4.412 18.645-3.447 34.871-13.324 42.345-23.996 9.171-11.143 3.007-16.762 4.669-23.08 2.472-9.317 14.572-12.959 16.401-23.514 0.214-1.473 0.958-2.588 2.265-4.75 2.142-3.408 1.421-9.539 1.568-15.145 0.466-15.324-1.564-30.196-5.012-41.198-3.187-10.313-8.179-17.587-12.433-26.976-8.533-18.73-8.301-27.316-16.054-39.149-7.401-11.482-5.426-18.548-15.313-17.855-13.373 1.029-26.958 22.694-40.554 23.215z"/>
- <path fill="#a3a3a3" d="m159.851 136.929c-8.727 0.301-20.622-23.156-22.071-16.604-0.509 5.529-0.71 5.919-1.271 11.976-1.203 5.126-4.47 8.243-9.328 15.996-2.936 4.84-4.39 9.448-5.036 13.679 0.316 4.351 3.143 7.023 2.231 9.68-0.804 2.043-4.919 2.812-7.908 6.563-5.356 10.137-14.101 23.607-16.298 33.072-2.589 10.877-5.661 17.574-4.913 31.832 0.412 10.699-0.37 9.342 3.918 13.268 4.021 3.729 9.221 7.664 15.93 13.59 7.064 6.139 22.661 17.271 24.599 20.563 2.081 3.363 2.43 11.922 1.204 14.33-1.198 2.365-12.434 4.278-12.363 4.278-0.07 0 9.477 12.774 11.399 14.697 1.851 1.851 9.659 10.36 42.048 4.364 18.666-3.447 35.162-13.254 42.223-24.021 8.568-10.873 2.49-16.761 4.144-23.045 2.464-9.301 15.121-12.958 16.943-23.498 0.215-1.467 0.992-2.579 2.29-4.729 2.148-3.441 1.398-9.553 1.566-15.139 0.532-15.373-1.541-30.189-4.987-41.158-3.188-10.285-8.174-17.549-12.419-26.921-8.518-18.701-8.313-27.3-16.073-39.096-7.204-11.126-5.564-17.875-15.196-17.165-13.21 1.064-27.058 22.975-40.632 23.488z"/>
- <path fill="#aaa" d="m159.834 138.014c-8.646 0.293-20.176-22.819-21.761-16.808-0.536 5.069-0.826 5.526-1.457 11.224-1.354 5.02-4.687 8.472-9.416 16.069-2.924 4.851-4.262 9.396-4.756 13.508 0.501 4.507 3.814 7.109 2.897 9.702-0.858 2.1-5.406 2.759-8.725 6.782-5.657 10.045-14.181 23.524-16.347 32.812-2.606 10.888-5.703 17.557-4.906 31.787 0.418 10.229-0.479 9.225 3.795 13.189 3.984 3.745 9.275 7.749 15.968 13.66 7.048 6.124 22.723 17.279 24.651 20.559 2.07 3.352 2.472 12.008 1.255 14.402-1.186 2.355-12.414 4.337-12.343 4.337-0.071 0 9.428 12.66 11.348 14.581 1.85 1.848 9.624 10.297 41.958 4.314 18.687-3.444 35.453-13.18 42.102-24.043 7.965-10.602 1.973-16.758 3.616-23.01 2.457-9.283 15.67-12.957 17.487-23.482 0.214-1.461 1.026-2.568 2.315-4.709 2.155-3.477 1.375-9.568 1.563-15.131 0.6-15.424-1.518-30.184-4.963-41.119-3.192-10.257-8.17-17.511-12.405-26.866-8.502-18.672-8.328-27.284-16.095-39.042-7.005-10.771-5.701-17.203-15.078-16.476-13.04 1.098-27.152 23.255-40.703 23.76z"/>
- <path fill="#b2b2b2" d="m159.816 139.099c-8.567 0.286-19.729-22.483-21.45-17.012-0.563 4.608-0.942 5.132-1.643 10.471-1.506 4.914-4.904 8.701-9.502 16.143-2.913 4.862-4.137 9.344-4.477 13.336 0.685 4.665 4.486 7.195 3.564 9.725-0.915 2.157-5.897 2.705-9.543 6.999-5.958 9.953-14.262 23.443-16.396 32.554-2.624 10.898-5.745 17.54-4.9 31.744 0.426 9.757-0.588 9.105 3.674 13.111 3.945 3.761 9.33 7.834 16.006 13.729 7.032 6.109 22.783 17.288 24.702 20.557 2.06 3.338 2.515 12.094 1.306 14.473-1.173 2.346-12.392 4.395-12.321 4.395-0.07 0 9.379 12.549 11.296 14.465 1.847 1.848 9.591 10.234 41.868 4.268 18.706-3.444 35.745-13.11 41.979-24.066 7.361-10.332 1.456-16.757 3.091-22.974 2.45-9.269 16.219-12.958 18.03-23.47 0.213-1.455 1.06-2.557 2.34-4.688 2.164-3.509 1.352-9.583 1.562-15.124 0.665-15.473-1.494-30.177-4.938-41.08-3.195-10.228-8.166-17.472-12.393-26.811-8.486-18.642-8.341-27.267-16.114-38.987-6.809-10.416-5.838-16.531-14.962-15.787-12.873 1.129-27.25 23.531-40.779 24.029z"/>
- <path fill="#bababa" d="m159.799 140.184c-8.487 0.279-19.282-22.146-21.141-17.215-0.591 4.147-1.057 4.737-1.828 9.717-1.656 4.808-5.121 8.931-9.588 16.217-2.902 4.873-4.01 9.292-4.197 13.165 0.868 4.822 5.158 7.281 4.23 9.747-0.971 2.215-6.385 2.651-10.361 7.216-6.258 9.861-14.339 23.36-16.442 32.297-2.643 10.906-5.787 17.521-4.894 31.699 0.432 9.285-0.697 8.986 3.552 13.032 3.908 3.776 9.384 7.919 16.043 13.799 7.016 6.093 22.845 17.296 24.753 20.552 2.051 3.328 2.559 12.18 1.358 14.547-1.161 2.334-12.372 4.451-12.301 4.451-0.071 0 9.33 12.436 11.245 14.35 1.844 1.844 9.555 10.17 41.777 4.219 18.727-3.443 36.036-13.039 41.857-24.09 6.759-10.063 0.939-16.756 2.565-22.939 2.442-9.25 16.768-12.957 18.572-23.453 0.213-1.451 1.095-2.547 2.365-4.668 2.171-3.543 1.329-9.599 1.56-15.117 0.732-15.522-1.471-30.172-4.913-41.042-3.197-10.2-8.161-17.433-12.379-26.756-8.471-18.612-8.354-27.25-16.135-38.933-6.609-10.061-5.976-15.858-14.845-15.098-12.706 1.165-27.347 23.813-40.853 24.303z"/>
- <path fill="#c1c1c1" d="m159.781 141.269c-8.408 0.271-18.837-21.81-20.83-17.419-0.619 3.687-1.173 4.344-2.014 8.965-1.808 4.701-5.338 9.16-9.674 16.29-2.892 4.884-3.885 9.24-3.918 12.994 1.052 4.978 5.829 7.367 4.896 9.769-1.026 2.272-6.874 2.598-11.178 7.434-6.56 9.769-14.419 23.277-16.491 32.039-2.66 10.916-5.829 17.504-4.887 31.656 0.438 8.813-0.807 8.867 3.43 12.953 3.87 3.793 9.438 8.004 16.082 13.868 6.997 6.077 22.904 17.304 24.803 20.55 2.041 3.314 2.601 12.266 1.409 14.617-1.149 2.324-12.351 4.51-12.28 4.51-0.07 0 9.282 12.321 11.194 14.233 1.841 1.842 9.521 10.106 41.688 4.17 18.746-3.44 36.326-12.967 41.734-24.112 6.156-9.793 0.423-16.754 2.038-22.904 2.438-9.235 17.318-12.957 19.117-23.438 0.212-1.444 1.128-2.536 2.39-4.647 2.18-3.578 1.306-9.613 1.558-15.11 0.799-15.571-1.447-30.165-4.889-41.002-3.2-10.172-8.156-17.395-12.364-26.701-8.456-18.583-8.367-27.234-16.155-38.88-6.413-9.705-6.114-15.185-14.729-14.408-12.541 1.197-27.445 24.091-40.93 24.573z"/>
- <path fill="#c9c9c9" d="m159.764 142.354c-8.329 0.264-18.392-21.473-20.521-17.622-0.646 3.225-1.289 3.949-2.2 8.211-1.957 4.596-5.555 9.39-9.761 16.364-2.879 4.895-3.757 9.188-3.638 12.823 1.235 5.135 6.502 7.453 5.562 9.791-1.081 2.329-7.362 2.544-11.995 7.651-6.859 9.677-14.499 23.195-16.54 31.78-2.677 10.927-5.87 17.488-4.879 31.611 0.444 8.344-0.916 8.748 3.307 12.875 3.834 3.81 9.492 8.09 16.121 13.939 6.98 6.061 22.965 17.311 24.854 20.545 2.031 3.303 2.643 12.352 1.461 14.69-1.137 2.313-12.33 4.567-12.26 4.567-0.07 0 9.233 12.209 11.143 14.117 1.839 1.84 9.486 10.043 41.599 4.122 18.767-3.44 36.618-12.896 41.612-24.137 5.554-9.522-0.094-16.751 1.513-22.868 2.43-9.219 17.866-12.957 19.659-23.424 0.213-1.439 1.162-2.525 2.415-4.627 2.188-3.612 1.282-9.629 1.556-15.104 0.865-15.621-1.424-30.158-4.864-40.962-3.202-10.144-8.153-17.357-12.351-26.646-8.441-18.554-8.381-27.218-16.176-38.826-6.216-9.35-6.251-14.513-14.612-13.719-12.374 1.235-27.543 24.375-41.005 24.849z"/>
- <path fill="#d1d1d1" d="m159.747 143.439c-8.25 0.256-17.944-21.137-20.21-17.826-0.675 2.765-1.406 3.555-2.386 7.459-2.108 4.489-5.772 9.619-9.847 16.437-2.869 4.906-3.631 9.136-3.358 12.652 1.419 5.292 7.174 7.538 6.228 9.812-1.137 2.387-7.852 2.491-12.813 7.869-7.161 9.586-14.579 23.114-16.588 31.522-2.695 10.938-5.912 17.471-4.873 31.568 0.451 7.871-1.025 8.629 3.185 12.797 3.796 3.824 9.547 8.174 16.158 14.008 6.964 6.047 23.026 17.32 24.905 20.541 2.021 3.292 2.686 12.439 1.513 14.764-1.125 2.303-12.31 4.625-12.239 4.625-0.07 0 9.186 12.094 11.092 14.002 1.836 1.836 9.45 9.978 41.509 4.072 18.786-3.439 36.909-12.824 41.49-24.16 4.948-9.252-0.611-16.748 0.985-22.832 2.423-9.203 18.415-12.957 20.203-23.41 0.212-1.434 1.196-2.514 2.44-4.605 2.193-3.646 1.259-9.645 1.553-15.098 0.932-15.67-1.4-30.151-4.84-40.922-3.205-10.115-8.148-17.319-12.336-26.592-8.427-18.524-8.396-27.201-16.197-38.771-6.017-8.995-6.388-13.84-14.495-13.03-12.207 1.266-27.64 24.652-41.079 25.118z"/>
- <path fill="#d8d8d8" d="m159.729 144.524c-8.17 0.249-17.498-20.8-19.9-18.03-0.702 2.304-1.521 3.162-2.571 6.706-2.259 4.383-5.988 9.848-9.933 16.511-2.858 4.917-3.504 9.084-3.079 12.48 1.604 5.449 7.846 7.625 6.895 9.835-1.193 2.444-8.342 2.438-13.631 8.087-7.461 9.493-14.658 23.031-16.637 31.262-2.712 10.947-5.953 17.455-4.865 31.524 0.458 7.399-1.135 8.511 3.063 12.718 3.758 3.842 9.601 8.26 16.196 14.078 6.946 6.031 23.087 17.328 24.956 20.538 2.011 3.28 2.729 12.524 1.563 14.835-1.112 2.293-12.289 4.684-12.218 4.684-0.071 0 9.136 11.981 11.04 13.886 1.834 1.834 9.417 9.913 41.419 4.024 18.807-3.438 37.2-12.752 41.368-24.184 4.346-8.982-1.128-16.747 0.46-22.798 2.416-9.187 18.964-12.956 20.746-23.394 0.211-1.429 1.229-2.504 2.465-4.586 2.202-3.681 1.236-9.658 1.551-15.091 0.998-15.72-1.377-30.146-4.814-40.884-3.208-10.086-8.145-17.28-12.323-26.536-8.411-18.495-8.408-27.185-16.217-38.717-5.82-8.64-6.526-13.168-14.38-12.341-12.04 1.303-27.736 24.934-41.154 25.393z"/>
- <path fill="#e0e0e0" d="m159.712 145.609c-8.091 0.241-17.052-20.464-19.59-18.233-0.729 1.843-1.637 2.767-2.757 5.953-2.409 4.276-6.206 10.077-10.02 16.584-2.847 4.928-3.378 9.032-2.8 12.309 1.787 5.606 8.519 7.711 7.561 9.857-1.248 2.502-8.829 2.384-14.448 8.304-7.761 9.402-14.738 22.95-16.684 31.006-2.731 10.955-5.996 17.436-4.859 31.48 0.464 6.928-1.244 8.389 2.939 12.639 3.722 3.857 9.656 8.344 16.234 14.148 6.932 6.014 23.148 17.336 25.008 20.533 2 3.268 2.771 12.611 1.615 14.907-1.1 2.282-12.268 4.741-12.198 4.741-0.069 0 9.089 11.867 10.989 13.77 1.831 1.831 9.382 9.85 41.329 3.977 18.827-3.438 37.492-12.683 41.246-24.207 3.743-8.715-1.646-16.746-0.066-22.762 2.409-9.171 19.514-12.957 21.289-23.381 0.211-1.422 1.265-2.494 2.49-4.564 2.21-3.715 1.213-9.674 1.549-15.084 1.065-15.77-1.354-30.139-4.791-40.844-3.21-10.058-8.14-17.241-12.309-26.481-8.396-18.466-8.421-27.168-16.237-38.664-5.622-8.284-6.663-12.495-14.262-11.651-11.872 1.335-27.833 25.212-41.228 25.663z"/>
- <path fill="#e8e8e8" d="m159.694 146.694c-8.012 0.234-16.605-20.127-19.279-18.437-0.757 1.383-1.753 2.373-2.943 5.2-2.56 4.171-6.423 10.307-10.105 16.658-2.835 4.939-3.251 8.979-2.52 12.138 1.97 5.763 9.189 7.796 8.226 9.879-1.303 2.559-9.318 2.33-15.265 8.521-8.063 9.31-14.818 22.867-16.733 30.748-2.748 10.967-6.037 17.419-4.853 31.436 0.472 6.457-1.353 8.271 2.818 12.562 3.685 3.873 9.711 8.429 16.273 14.218 6.913 6 23.207 17.344 25.058 20.529 1.991 3.257 2.814 12.697 1.666 14.98-1.087 2.271-12.247 4.799-12.177 4.799-0.07 0 9.04 11.755 10.938 13.654 1.829 1.828 9.349 9.785 41.239 3.926 18.847-3.435 37.783-12.609 41.124-24.229 3.14-8.444-2.161-16.743-0.592-22.728 2.401-9.152 20.062-12.955 21.831-23.364 0.211-1.417 1.298-2.483 2.516-4.544 2.217-3.748 1.19-9.689 1.547-15.076 1.132-15.82-1.331-30.133-4.766-40.806-3.213-10.03-8.136-17.203-12.296-26.427-8.38-18.436-8.435-27.151-16.257-38.609-5.425-7.929-6.802-11.822-14.146-10.962-11.706 1.368-27.931 25.491-41.304 25.934z"/>
- <path fill="#efefef" d="m159.677 147.779c-7.934 0.226-16.16-19.791-18.97-18.64-0.785 0.921-1.869 1.979-3.13 4.447-2.71 4.064-6.639 10.536-10.19 16.731-2.824 4.95-3.125 8.928-2.24 11.967 2.152 5.919 9.86 7.882 8.892 9.901-1.358 2.616-9.808 2.277-16.083 8.739-8.363 9.218-14.896 22.784-16.781 30.489-2.766 10.977-6.079 17.402-4.846 31.393 0.478 5.984-1.462 8.152 2.696 12.482 3.646 3.889 9.765 8.514 16.311 14.287 6.896 5.983 23.269 17.352 25.109 20.526 1.98 3.245 2.855 12.782 1.718 15.052-1.076 2.262-12.227 4.857-12.156 4.857-0.07 0 8.991 11.641 10.887 13.537 1.826 1.826 9.313 9.723 41.148 3.879 18.868-3.434 38.074-12.538 41.002-24.254 2.537-8.174-2.678-16.741-1.119-22.69 2.396-9.138 20.612-12.957 22.375-23.351 0.212-1.412 1.332-2.473 2.541-4.523 2.226-3.783 1.166-9.704 1.545-15.07 1.197-15.869-1.307-30.125-4.741-40.766-3.215-10.002-8.131-17.165-12.282-26.372-8.365-18.407-8.447-27.135-16.277-38.555-5.228-7.574-6.938-11.15-14.029-10.272-11.541 1.402-28.029 25.771-41.38 26.206z"/>
- <path fill="#f7f7f7" d="m159.66 148.864c-7.854 0.219-15.714-19.454-18.66-18.844-0.812 0.461-1.983 1.585-3.314 3.694-2.86 3.958-6.856 10.766-10.278 16.805-2.813 4.961-2.998 8.876-1.96 11.796 2.337 6.076 10.533 7.968 9.558 9.923-1.415 2.673-10.296 2.223-16.899 8.956-8.664 9.126-14.978 22.702-16.83 30.23-2.783 10.986-6.121 17.386-4.839 31.349 0.484 5.515-1.571 8.033 2.573 12.403 3.609 3.906 9.82 8.6 16.35 14.357 6.88 5.969 23.329 17.36 25.16 20.523 1.971 3.232 2.898 12.869 1.77 15.124-1.063 2.252-12.206 4.915-12.136 4.915-0.07 0 8.942 11.527 10.835 13.422 1.824 1.822 9.279 9.658 41.059 3.83 18.889-3.434 38.366-12.467 40.881-24.278 1.934-7.903-3.195-16.739-1.646-22.655 2.388-9.121 21.161-12.955 22.918-23.336 0.211-1.404 1.366-2.461 2.566-4.502 2.232-3.816 1.143-9.719 1.542-15.063 1.265-15.92-1.283-30.12-4.717-40.727-3.219-9.974-8.128-17.127-12.269-26.317-8.349-18.378-8.461-27.119-16.298-38.501-5.029-7.219-7.075-10.478-13.912-9.584-11.373 1.438-28.126 26.053-41.454 26.48z"/>
- <path fill="#fff" d="m159.642 149.949c-7.774 0.211-15.268-19.118-18.35-19.048-0.84 0-2.1 1.191-3.501 2.941-3.011 3.852-7.072 10.995-10.363 16.878-2.803 4.972-2.872 8.824-1.682 11.625 2.521 6.233 11.205 8.054 10.225 9.945-1.471 2.731-10.785 2.17-17.719 9.174-8.964 9.034-15.056 22.621-16.877 29.973-2.801 10.995-6.163 17.368-4.832 31.304 0.49 5.043-1.681 7.914 2.451 12.325 3.571 3.923 9.874 8.685 16.387 14.427 6.863 5.953 23.391 17.368 25.211 20.521 1.962 3.221 2.942 12.954 1.821 15.196-1.051 2.24-12.185 4.972-12.115 4.972-0.069 0 8.895 11.416 10.784 13.307 1.821 1.82 9.244 9.595 40.97 3.781 18.907-3.431 38.656-12.396 40.758-24.302 1.331-7.633-3.712-16.736-2.171-22.619 2.381-9.104 21.71-12.956 23.461-23.321 0.21-1.399 1.399-2.45 2.591-4.481 2.24-3.852 1.12-9.734 1.54-15.057 1.331-15.968-1.26-30.113-4.692-40.688-3.221-9.945-8.123-17.088-12.255-26.262-8.334-18.348-8.474-27.102-16.318-38.447-4.832-6.863-7.213-9.805-13.796-8.894-11.205 1.469-28.222 26.33-41.528 26.75z"/>
- </g>
- <path fill="#995900" d="m152.553 88.8575c5.256-0.648 12.456 0.648 15.769 3.096 3.096 2.304 5.256 3.528 8.063 4.464 9.433 3.096 21.816 4.536 21.24 13.032-0.648 10.151-3.6 14.688-12.024 17.351-6.768 2.088-18.863 13.824-28.224 13.824-4.176 0-10.008 0.216-13.392-1.008-3.24-1.152-7.776-6.624-13.104-11.016-5.328-4.32-10.296-8.928-10.439-14.976-0.217-6.407 3.96-8.496 9.863-13.607 3.097-2.736 8.712-7.272 12.601-9.288 3.599-1.799 5.903-1.439 9.647-1.872z"/>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#9e5f00" d="m165.068 78.951c5.225-0.644 12.384 0.645 15.677 3.079 3.078 2.29 5.227 3.51 8.018 4.438 9.375 3.078 21.729 4.529 21.159 12.973-0.641 10.09-3.669 14.581-12.041 17.223-6.723 2.073-18.768 13.589-28.07 13.64-4.21 0.032-9.926 0.234-13.287-0.977-3.215-1.142-7.737-6.608-13.031-10.969-5.291-4.292-10.26-8.774-10.317-14.765-0.153-6.252 3.912-8.411 9.773-13.488 3.071-2.71 8.594-7.303 12.463-9.333 3.563-1.803 5.933-1.392 9.656-1.821z"/>
- <path fill="#a36400" d="m165.177 79.044c5.195-0.641 12.313 0.64 15.587 3.06 3.06 2.278 5.194 3.494 7.971 4.413 9.317 3.06 21.641 4.522 21.078 12.914-0.634 10.027-3.737 14.474-12.058 17.094-6.678 2.057-18.673 13.352-27.919 13.454-4.241 0.064-9.842 0.252-13.18-0.945-3.19-1.133-7.7-6.592-12.96-10.921-5.254-4.264-10.222-8.622-10.192-14.555-0.093-6.099 3.863-8.329 9.681-13.369 3.048-2.685 8.478-7.335 12.328-9.379 3.526-1.804 5.963-1.338 9.664-1.766z"/>
- <path fill="#a86a00" d="m165.287 79.138c5.165-0.637 12.241 0.637 15.496 3.043 3.042 2.264 5.165 3.476 7.924 4.387 9.26 3.042 21.556 4.515 20.998 12.854-0.627 9.968-3.805 14.368-12.074 16.967-6.633 2.042-18.576 13.117-27.766 13.27-4.276 0.096-9.759 0.27-13.075-0.914-3.165-1.123-7.661-6.577-12.887-10.874-5.217-4.236-10.187-8.468-10.069-14.345-0.03-5.943 3.815-8.244 9.589-13.249 3.023-2.66 8.36-7.366 12.191-9.424 3.49-1.808 5.993-1.291 9.673-1.715z"/>
- <path fill="#ad7000" d="m165.396 79.23c5.135-0.633 12.17 0.633 15.404 3.025 3.025 2.251 5.137 3.46 7.88 4.361 9.201 3.025 21.467 4.508 20.917 12.796-0.62 9.905-3.874 14.26-12.093 16.837-6.586 2.027-18.479 12.882-27.611 13.086-4.311 0.127-9.677 0.287-12.971-0.883-3.14-1.113-7.622-6.561-12.814-10.826-5.18-4.208-10.148-8.315-9.945-14.135 0.031-5.789 3.768-8.16 9.497-13.129 2.999-2.635 8.244-7.398 12.055-9.47 3.454-1.808 6.023-1.24 9.681-1.662z"/>
- <path fill="#b27600" d="m165.506 79.325c5.105-0.63 12.099 0.629 15.314 3.007 3.007 2.237 5.104 3.442 7.832 4.335 9.145 3.007 21.38 4.501 20.837 12.737-0.614 9.844-3.943 14.154-12.109 16.709-6.541 2.011-18.385 12.645-27.46 12.9-4.342 0.16-9.592 0.306-12.862-0.851-3.115-1.103-7.584-6.545-12.743-10.779-5.144-4.18-10.112-8.162-9.821-13.924 0.092-5.634 3.718-8.076 9.405-13.009 2.975-2.609 8.126-7.429 11.919-9.514 3.416-1.812 6.052-1.192 9.688-1.611z"/>
- <path fill="#b77b00" d="m165.615 79.417c5.075-0.626 12.026 0.626 15.224 2.989 2.989 2.225 5.075 3.425 7.786 4.31 9.087 2.989 21.292 4.494 20.756 12.678-0.606 9.781-4.012 14.046-12.126 16.581-6.496 1.997-18.289 12.41-27.307 12.716-4.376 0.191-9.51 0.323-12.758-0.82-3.09-1.094-7.546-6.53-12.671-10.732-5.106-4.152-10.074-8.008-9.697-13.713 0.155-5.479 3.67-7.992 9.313-12.889 2.951-2.585 8.011-7.461 11.783-9.56 3.38-1.814 6.083-1.143 9.697-1.56z"/>
- <path fill="#bc8100" d="m165.725 79.511c5.044-0.622 11.954 0.622 15.133 2.972 2.971 2.211 5.045 3.408 7.739 4.284 9.029 2.971 21.205 4.487 20.675 12.619-0.6 9.719-4.079 13.939-12.143 16.451-6.45 1.982-18.192 12.175-27.153 12.532-4.41 0.223-9.428 0.341-12.653-0.789-3.065-1.084-7.507-6.514-12.598-10.684-5.069-4.124-10.038-7.855-9.574-13.504 0.217-5.324 3.622-7.908 9.222-12.77 2.926-2.559 7.894-7.492 11.646-9.605 3.344-1.816 6.113-1.092 9.706-1.506z"/>
- <path fill="#c18700" d="m165.834 79.604c5.015-0.618 11.883 0.619 15.043 2.954 2.953 2.198 5.015 3.391 7.693 4.259 8.972 2.953 21.118 4.48 20.594 12.559-0.593 9.66-4.147 13.833-12.159 16.324-6.405 1.967-18.098 11.94-27.002 12.347-4.441 0.255-9.343 0.359-12.546-0.757-3.04-1.074-7.469-6.498-12.526-10.637-5.032-4.096-10-7.701-9.45-13.293 0.278-5.169 3.574-7.823 9.13-12.649 2.903-2.534 7.776-7.524 11.511-9.651 3.306-1.821 6.141-1.044 9.712-1.456z"/>
- <path fill="#c68d00" d="m165.944 79.697c4.984-0.615 11.811 0.614 14.952 2.936 2.935 2.184 4.983 3.374 7.646 4.233 8.915 2.935 21.031 4.473 20.515 12.5-0.586 9.597-4.218 13.726-12.177 16.195-6.36 1.951-18.002 11.703-26.849 12.162-4.476 0.287-9.261 0.377-12.441-0.726-3.015-1.064-7.431-6.482-12.453-10.589-4.995-4.068-9.965-7.549-9.326-13.083 0.34-5.015 3.524-7.741 9.038-12.531 2.878-2.508 7.658-7.555 11.374-9.696 3.269-1.82 6.171-0.992 9.721-1.401z"/>
- <path fill="#cc9200" d="m166.054 79.791c4.952-0.61 11.738 0.611 14.86 2.918 2.918 2.172 4.954 3.357 7.601 4.207 8.857 2.918 20.942 4.466 20.432 12.442-0.578 9.536-4.285 13.62-12.192 16.066-6.314 1.936-17.906 11.468-26.696 11.978-4.509 0.319-9.178 0.394-12.335-0.696-2.989-1.054-7.393-6.466-12.382-10.541-4.959-4.04-9.928-7.395-9.202-12.873 0.401-4.859 3.477-7.655 8.945-12.411 2.854-2.482 7.542-7.586 11.239-9.741 3.233-1.824 6.201-0.943 9.73-1.349z"/>
- <path fill="#d19800" d="m166.163 79.883c4.923-0.606 11.668 0.608 14.771 2.901 2.9 2.158 4.924 3.339 7.554 4.181 8.801 2.9 20.855 4.459 20.352 12.383-0.571 9.474-4.353 13.512-12.21 15.938-6.269 1.921-17.81 11.233-26.543 11.793-4.542 0.351-9.094 0.413-12.229-0.664-2.965-1.044-7.354-6.45-12.311-10.494-4.921-4.012-9.89-7.241-9.079-12.662 0.465-4.705 3.431-7.571 8.855-12.29 2.83-2.458 7.425-7.618 11.102-9.787 3.197-1.827 6.231-0.893 9.738-1.299z"/>
- <path fill="#d69e00" d="m166.273 79.978c4.893-0.603 11.596 0.603 14.679 2.882 2.883 2.145 4.895 3.323 7.507 4.156 8.744 2.882 20.77 4.452 20.272 12.324-0.565 9.412-4.422 13.406-12.228 15.81-6.224 1.905-17.714 10.996-26.39 11.608-4.576 0.383-9.012 0.431-12.124-0.633-2.94-1.034-7.316-6.434-12.237-10.446-4.884-3.984-9.854-7.089-8.955-12.452 0.525-4.551 3.382-7.489 8.764-12.171 2.805-2.432 7.307-7.649 10.965-9.832 3.16-1.829 6.261-0.845 9.747-1.246z"/>
- <path fill="#dba300" d="m166.382 80.07c4.863-0.599 11.525 0.6 14.59 2.865 2.864 2.131 4.862 3.305 7.461 4.13 8.686 2.864 20.682 4.445 20.19 12.264-0.559 9.352-4.491 13.299-12.244 15.681-6.179 1.89-17.619 10.761-26.237 11.423-4.608 0.415-8.929 0.449-12.018-0.601-2.915-1.024-7.277-6.418-12.166-10.399-4.847-3.956-9.815-6.935-8.831-12.241 0.587-4.396 3.333-7.404 8.671-12.051 2.782-2.407 7.191-7.681 10.83-9.878 3.123-1.829 6.29-0.793 9.754-1.193z"/>
- <path fill="#e0a900" d="m166.492 80.164c4.832-0.595 11.453 0.596 14.498 2.847 2.847 2.118 4.833 3.289 7.414 4.104 8.629 2.846 20.595 4.438 20.111 12.205-0.553 9.29-4.56 13.193-12.262 15.553-6.134 1.875-17.522 10.526-26.085 11.239-4.642 0.447-8.845 0.467-11.912-0.57-2.89-1.015-7.238-6.402-12.093-10.351-4.81-3.928-9.78-6.782-8.708-12.032 0.649-4.241 3.285-7.32 8.58-11.932 2.757-2.381 7.073-7.712 10.693-9.923 3.088-1.831 6.321-0.743 9.764-1.14z"/>
- <path fill="#e5af00" d="m166.601 80.257c4.803-0.592 11.382 0.592 14.407 2.829 2.829 2.105 4.804 3.271 7.368 4.079 8.571 2.828 20.507 4.431 20.029 12.146-0.544 9.228-4.627 13.085-12.277 15.423-6.089 1.861-17.427 10.29-25.932 11.055-4.676 0.478-8.763 0.484-11.807-0.539-2.865-1.005-7.2-6.387-12.021-10.304-4.772-3.9-9.742-6.629-8.583-11.821 0.711-4.085 3.236-7.236 8.487-11.812 2.732-2.357 6.957-7.744 10.557-9.968 3.052-1.834 6.351-0.694 9.772-1.088z"/>
- <path fill="#eab500" d="m166.711 80.351c4.772-0.588 11.31 0.589 14.317 2.811 2.811 2.092 4.771 3.254 7.321 4.054 8.514 2.81 20.42 4.424 19.948 12.087-0.538 9.165-4.695 12.979-12.294 15.295-6.044 1.845-17.332 10.054-25.779 10.869-4.708 0.511-8.68 0.503-11.7-0.507-2.84-0.995-7.163-6.371-11.949-10.257-4.736-3.872-9.706-6.475-8.46-11.61 0.773-3.931 3.188-7.152 8.396-11.692 2.709-2.331 6.839-7.775 10.421-10.013 3.013-1.839 6.38-0.645 9.779-1.037z"/>
- <path fill="#efba00" d="m166.82 80.443c4.742-0.584 11.238 0.585 14.226 2.794 2.794 2.078 4.743 3.237 7.276 4.027 8.456 2.793 20.332 4.417 19.868 12.029-0.531 9.104-4.766 12.872-12.313 15.167-5.997 1.83-17.234 9.819-25.626 10.685-4.742 0.542-8.596 0.52-11.595-0.476-2.815-0.985-7.124-6.355-11.877-10.209-4.699-3.844-9.668-6.322-8.336-11.4 0.835-3.778 3.14-7.068 8.304-11.573 2.686-2.306 6.724-7.807 10.285-10.059 2.978-1.84 6.411-0.595 9.788-0.985z"/>
- <path fill="#f4c000" d="m166.93 80.537c4.711-0.58 11.166 0.582 14.135 2.776 2.775 2.066 4.713 3.22 7.229 4.002 8.399 2.775 20.246 4.41 19.787 11.969-0.522 9.043-4.832 12.765-12.328 15.039-5.952 1.815-17.139 9.584-25.473 10.501-4.776 0.574-8.513 0.538-11.49-0.445-2.79-0.976-7.085-6.34-11.804-10.162-4.662-3.816-9.632-6.168-8.213-11.189 0.896-3.623 3.092-6.984 8.213-11.454 2.66-2.281 6.604-7.838 10.147-10.104 2.942-1.844 6.441-0.547 9.797-0.933z"/>
- <path fill="#f9c600" d="m167.039 80.63c4.683-0.577 11.095 0.577 14.045 2.758 2.758 2.052 4.683 3.203 7.184 3.976 8.341 2.757 20.157 4.403 19.706 11.91-0.518 8.981-4.901 12.659-12.346 14.911-5.906 1.799-17.044 9.347-25.32 10.315-4.809 0.606-8.431 0.556-11.384-0.413-2.765-0.966-7.048-6.324-11.732-10.114-4.625-3.788-9.594-6.016-8.088-10.98 0.958-3.467 3.043-6.9 8.12-11.333 2.637-2.256 6.488-7.87 10.013-10.15 2.902-1.844 6.468-0.495 9.802-0.88z"/>
- </g>
- <path fill="#fc0" d="m154.744 90.7245c4.65-0.573 11.022 0.574 13.954 2.74 2.739 2.039 4.651 3.186 7.136 3.951 8.284 2.739 20.071 4.396 19.626 11.851-0.51 8.919-4.97 12.551-12.362 14.781-5.861 1.784-16.947 9.112-25.168 10.131-4.842 0.638-8.347 0.574-11.277-0.382-2.74-0.956-7.01-6.308-11.66-10.067-4.588-3.76-9.559-5.862-7.965-10.769 1.02-3.313 2.995-6.816 8.028-11.213 2.612-2.23 6.371-7.901 9.876-10.195 2.867-1.847 6.499-0.447 9.812-0.828z"/>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fc0" d="m167.982 83.609c1.008 2.088 3.6 2.376 5.328 3.312 1.655 0.936 2.592 1.152 3.239 0.792 1.44-0.792 0.36-3.384-1.079-4.32-1.368-0.935-8.064-1.151-7.488 0.216z"/>
- <path fill="#f9c600" d="m168.125 83.631c0.982 2.035 3.508 2.316 5.193 3.229 1.614 0.912 2.526 1.123 3.158 0.771 1.402-0.771 0.35-3.298-1.054-4.21-1.332-0.913-7.859-1.123-7.297 0.21z"/>
- <path fill="#f4c000" d="m168.267 83.653c0.957 1.982 3.418 2.255 5.058 3.144 1.572 0.889 2.461 1.094 3.076 0.752 1.367-0.752 0.342-3.213-1.025-4.101-1.299-0.889-7.656-1.094-7.109 0.205z"/>
- <path fill="#efba00" d="m168.409 83.674c0.932 1.929 3.327 2.195 4.924 3.06 1.53 0.865 2.395 1.064 2.993 0.732 1.331-0.732 0.333-3.127-0.998-3.992-1.264-0.864-7.451-1.064-6.919 0.2z"/>
- <path fill="#eab500" d="m168.552 83.696c0.905 1.876 3.234 2.135 4.787 2.977 1.488 0.841 2.329 1.035 2.912 0.711 1.294-0.711 0.323-3.041-0.971-3.882-1.228-0.841-7.246-1.036-6.728 0.194z"/>
- <path fill="#e5af00" d="m168.694 83.718c0.881 1.823 3.144 2.075 4.653 2.892 1.446 0.818 2.264 1.006 2.83 0.692 1.257-0.692 0.313-2.956-0.943-3.773-1.195-0.818-7.043-1.007-6.54 0.189z"/>
- <path fill="#e0a900" d="m168.837 83.739c0.855 1.771 3.053 2.015 4.519 2.809 1.403 0.793 2.198 0.977 2.747 0.671 1.221-0.671 0.306-2.87-0.916-3.664-1.161-0.793-6.839-0.976-6.35 0.184z"/>
- <path fill="#dba300" d="m168.979 83.761c0.829 1.718 2.962 1.955 4.383 2.725 1.363 0.77 2.132 0.948 2.666 0.651 1.184-0.651 0.296-2.784-0.889-3.554-1.125-0.77-6.634-0.948-6.16 0.178z"/>
- <path fill="#d69e00" d="m169.121 83.782c0.804 1.665 2.871 1.895 4.249 2.641 1.32 0.747 2.066 0.918 2.583 0.631 1.148-0.631 0.287-2.698-0.861-3.444-1.091-0.746-6.43-0.919-5.971 0.172z"/>
- <path fill="#d19800" d="m169.264 83.804c0.777 1.612 2.778 1.834 4.112 2.557 1.279 0.723 2.001 0.889 2.501 0.611 1.112-0.611 0.278-2.612-0.834-3.335-1.055-0.722-6.224-0.889-5.779 0.167z"/>
- <path fill="#cc9200" d="m169.406 83.826c0.753 1.559 2.688 1.774 3.979 2.473 1.236 0.699 1.936 0.86 2.42 0.591 1.074-0.591 0.269-2.527-0.808-3.226-1.021-0.699-6.021-0.86-5.591 0.162z"/>
- <path fill="#c68c00" d="m169.549 83.847c0.728 1.506 2.597 1.714 3.844 2.389 1.194 0.675 1.869 0.831 2.337 0.571 1.039-0.571 0.26-2.441-0.779-3.116-0.988-0.675-5.818-0.831-5.402 0.156z"/>
- <path fill="#c18700" d="m169.691 83.869c0.702 1.453 2.506 1.654 3.709 2.305 1.152 0.652 1.803 0.802 2.254 0.551 1.002-0.551 0.251-2.355-0.751-3.006-0.953-0.652-5.613-0.802-5.212 0.15z"/>
- <path fill="#bc8100" d="m169.833 83.89c0.677 1.4 2.415 1.594 3.574 2.221 1.111 0.628 1.738 0.772 2.173 0.531 0.965-0.531 0.241-2.27-0.725-2.897-0.917-0.627-5.408-0.772-5.022 0.145z"/>
- <path fill="#b77b00" d="m169.976 83.912c0.65 1.347 2.322 1.533 3.438 2.137 1.069 0.604 1.673 0.743 2.091 0.511 0.93-0.511 0.233-2.184-0.696-2.788-0.884-0.603-5.205-0.743-4.833 0.14z"/>
- <path fill="#b27500" d="m170.118 83.934c0.626 1.294 2.232 1.473 3.304 2.053 1.027 0.581 1.606 0.714 2.009 0.491 0.893-0.491 0.224-2.098-0.669-2.678-0.85-0.58-5.001-0.715-4.644 0.134z"/>
- <path fill="#ad7000" d="m170.261 83.955c0.6 1.242 2.14 1.413 3.168 1.97 0.984 0.557 1.541 0.685 1.927 0.47 0.855-0.47 0.214-2.012-0.644-2.569-0.812-0.555-4.794-0.684-4.451 0.129z"/>
- <path fill="#a86a00" d="m170.403 83.977c0.574 1.189 2.05 1.353 3.034 1.886 0.942 0.533 1.475 0.656 1.844 0.45 0.82-0.45 0.205-1.926-0.615-2.459-0.779-0.533-4.591-0.656-4.263 0.123z"/>
- <path fill="#a36400" d="m170.545 83.998c0.55 1.136 1.959 1.292 2.899 1.802 0.901 0.509 1.41 0.626 1.762 0.43 0.783-0.43 0.197-1.841-0.587-2.35-0.745-0.508-4.387-0.626-4.074 0.118z"/>
- <path fill="#9e5e00" d="m170.688 84.02c0.522 1.083 1.867 1.232 2.764 1.718 0.859 0.486 1.343 0.597 1.68 0.41 0.746-0.41 0.188-1.755-0.561-2.241-0.709-0.484-4.182-0.597-3.883 0.113z"/>
- <path fill="#995900" d="m170.83 84.042c0.498 1.03 1.776 1.172 2.629 1.634 0.817 0.462 1.278 0.568 1.599 0.39 0.71-0.39 0.178-1.669-0.533-2.131-0.676-0.461-3.979-0.568-3.695 0.107z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fc0" d="m152.875 86.29c-0.325 0.813 1.952 2.359 3.091 1.301 1.222-1.057 2.686-2.033 3.175-2.359 2.195-1.465 1.383-2.522-2.278-1.871-3.663 0.651-3.663 2.115-3.988 2.929z"/>
- <path fill="#f9c600" d="m152.934 86.279c-0.318 0.794 1.906 2.304 3.019 1.271 1.193-1.033 2.623-1.986 3.102-2.305 2.145-1.431 1.351-2.463-2.226-1.828-3.578 0.637-3.578 2.067-3.895 2.862z"/>
- <path fill="#f4c000" d="m152.993 86.269c-0.31 0.775 1.861 2.25 2.948 1.241 1.164-1.008 2.56-1.939 3.026-2.25 2.095-1.397 1.319-2.405-2.173-1.784-3.491 0.62-3.491 2.017-3.801 2.793z"/>
- <path fill="#efba00" d="m153.051 86.258c-0.302 0.757 1.817 2.195 2.878 1.211 1.136-0.984 2.497-1.892 2.952-2.195 2.044-1.363 1.287-2.347-2.118-1.741-3.409 0.606-3.409 1.968-3.712 2.725z"/>
- <path fill="#eab500" d="m153.11 86.248c-0.295 0.738 1.771 2.141 2.805 1.181 1.108-0.959 2.437-1.845 2.88-2.141 1.993-1.329 1.255-2.289-2.066-1.698-3.324 0.591-3.324 1.92-3.619 2.658z"/>
- <path fill="#e5af00" d="m153.169 86.238c-0.287 0.719 1.727 2.086 2.733 1.151 1.08-0.935 2.374-1.798 2.807-2.086 1.942-1.296 1.224-2.23-2.015-1.655s-3.238 1.87-3.525 2.59z"/>
- <path fill="#e0a900" d="m153.228 86.228c-0.28 0.7 1.681 2.032 2.661 1.121 1.052-0.91 2.312-1.751 2.732-2.031 1.893-1.262 1.191-2.172-1.961-1.611-3.152 0.559-3.152 1.82-3.432 2.521z"/>
- <path fill="#dba300" d="m153.286 86.217c-0.271 0.681 1.636 1.977 2.591 1.09 1.023-0.886 2.25-1.704 2.659-1.977 1.84-1.228 1.159-2.114-1.909-1.568-3.068 0.547-3.068 1.773-3.341 2.455z"/>
- <path fill="#d69e00" d="m153.345 86.207c-0.265 0.662 1.591 1.922 2.519 1.061 0.995-0.862 2.188-1.657 2.586-1.922 1.789-1.194 1.127-2.055-1.855-1.525-2.985 0.53-2.985 1.723-3.25 2.386z"/>
- <path fill="#d19800" d="m153.404 86.197c-0.257 0.643 1.546 1.868 2.447 1.03 0.967-0.837 2.126-1.61 2.512-1.868 1.739-1.16 1.095-1.997-1.803-1.481-2.899 0.516-2.899 1.674-3.156 2.319z"/>
- <path fill="#cc9200" d="m153.463 86.187c-0.25 0.625 1.5 1.813 2.375 1 0.939-0.813 2.064-1.563 2.439-1.813 1.688-1.126 1.063-1.938-1.75-1.438-2.814 0.5-2.814 1.625-3.064 2.251z"/>
- <path fill="#c68c00" d="m153.521 86.176c-0.242 0.605 1.456 1.758 2.304 0.97 0.911-0.788 2.002-1.516 2.366-1.758 1.637-1.092 1.031-1.88-1.698-1.395-2.729 0.486-2.729 1.576-2.972 2.183z"/>
- <path fill="#c18700" d="m153.58 86.166c-0.233 0.587 1.41 1.704 2.233 0.939 0.882-0.763 1.938-1.469 2.292-1.704 1.586-1.058 0.999-1.822-1.646-1.352-2.644 0.472-2.644 1.529-2.879 2.117z"/>
- <path fill="#bc8100" d="m153.639 86.156c-0.228 0.568 1.364 1.649 2.16 0.91 0.854-0.739 1.878-1.422 2.219-1.649 1.536-1.024 0.967-1.764-1.593-1.308s-2.559 1.477-2.786 2.047z"/>
- <path fill="#b77b00" d="m153.698 86.146c-0.22 0.549 1.32 1.594 2.089 0.879 0.825-0.715 1.815-1.375 2.146-1.595 1.484-0.99 0.935-1.705-1.54-1.265s-2.475 1.43-2.695 1.981z"/>
- <path fill="#b27500" d="m153.756 86.135c-0.211 0.53 1.275 1.54 2.019 0.85 0.797-0.69 1.753-1.328 2.072-1.54 1.434-0.957 0.902-1.646-1.487-1.221s-2.391 1.38-2.604 1.911z"/>
- <path fill="#ad7000" d="m153.815 86.125c-0.204 0.512 1.229 1.486 1.946 0.82 0.769-0.666 1.69-1.281 1.997-1.486 1.385-0.922 0.871-1.588-1.434-1.178s-2.304 1.331-2.509 1.844z"/>
- <path fill="#a86a00" d="m153.874 86.114c-0.196 0.493 1.185 1.431 1.875 0.79 0.74-0.642 1.628-1.234 1.924-1.431 1.332-0.889 0.84-1.53-1.381-1.135s-2.221 1.283-2.418 1.776z"/>
- <path fill="#a36400" d="m153.933 86.104c-0.189 0.474 1.139 1.376 1.803 0.759 0.712-0.617 1.566-1.187 1.851-1.376 1.281-0.855 0.808-1.472-1.329-1.092-2.135 0.38-2.135 1.234-2.325 1.709z"/>
- <path fill="#9e5e00" d="m153.991 86.094c-0.181 0.455 1.095 1.322 1.732 0.729 0.684-0.592 1.504-1.14 1.776-1.321 1.231-0.821 0.775-1.414-1.274-1.048-2.051 0.364-2.051 1.184-2.234 1.64z"/>
- <path fill="#995900" d="m154.05 86.083c-0.174 0.436 1.05 1.267 1.66 0.699 0.656-0.568 1.442-1.093 1.704-1.267 1.181-0.787 0.743-1.355-1.223-1.005s-1.966 1.136-2.141 1.573z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fc0" d="m156.951 107.887c-0.229 2.858 6.343-4.286 6.743-4.915 0.856-1.543 3.715-5.886 4.172-7.715 0.857-3.2 2.401-5.543 1.429-8.915-0.343-1.086-2.742-1.372-3.829-0.687-3.086 1.829-2.629 4.058-2.972 6.115-1.143 5.831-5.143 11.717-5.543 16.117z"/>
- <path fill="#ffcc02" d="m157.22 107.441c-0.22 2.787 6.178-4.188 6.566-4.802 0.833-1.506 3.614-5.745 4.056-7.529 0.831-3.122 2.333-5.408 1.382-8.695-0.337-1.058-2.678-1.333-3.735-0.663-3.006 1.788-2.557 3.96-2.889 5.967-1.105 5.685-4.997 11.431-5.38 15.722z"/>
- <path fill="#ffcc05" d="m157.488 106.995c-0.209 2.715 6.014-4.091 6.392-4.69 0.811-1.469 3.513-5.603 3.941-7.342 0.804-3.043 2.264-5.273 1.331-8.474-0.329-1.031-2.61-1.295-3.64-0.64-2.927 1.747-2.486 3.863-2.806 5.818-1.068 5.541-4.851 11.146-5.218 15.328z"/>
- <path fill="#ffcc07" d="m157.757 106.548c-0.198 2.645 5.85-3.993 6.217-4.577 0.785-1.431 3.409-5.461 3.824-7.156 0.779-2.964 2.196-5.138 1.282-8.253-0.322-1.003-2.543-1.257-3.545-0.618-2.847 1.706-2.414 3.766-2.722 5.67-1.031 5.398-4.706 10.862-5.056 14.934z"/>
- <path fill="#ffcd0a" d="m158.026 106.102c-0.189 2.573 5.684-3.896 6.04-4.465 0.762-1.394 3.309-5.32 3.709-6.969 0.753-2.886 2.129-5.004 1.233-8.033-0.315-0.976-2.478-1.219-3.45-0.595-2.768 1.665-2.343 3.668-2.64 5.522-0.993 5.254-4.558 10.577-4.892 14.54z"/>
- <path fill="#ffcd0c" d="m158.294 105.655c-0.179 2.503 5.52-3.798 5.865-4.351 0.738-1.357 3.207-5.179 3.594-6.783 0.727-2.807 2.061-4.869 1.185-7.813-0.309-0.948-2.411-1.18-3.356-0.572-2.687 1.623-2.271 3.571-2.556 5.374-0.958 5.11-4.414 10.291-4.732 14.145z"/>
- <path fill="#ffcd0f" d="m158.563 105.209c-0.169 2.431 5.354-3.701 5.688-4.239 0.715-1.319 3.106-5.037 3.479-6.596 0.7-2.728 1.992-4.734 1.135-7.592-0.301-0.92-2.344-1.142-3.261-0.549-2.608 1.583-2.199 3.474-2.473 5.226-0.919 4.965-4.267 10.005-4.568 13.75z"/>
- <path fill="#ffcd11" d="m158.831 104.762c-0.159 2.361 5.19-3.602 5.515-4.126 0.69-1.282 3.004-4.896 3.361-6.409 0.674-2.649 1.924-4.599 1.087-7.372-0.295-0.893-2.277-1.104-3.167-0.526-2.527 1.541-2.128 3.376-2.389 5.077-0.883 4.822-4.122 9.721-4.407 13.356z"/>
- <path fill="#ffce14" d="m159.1 104.316c-0.149 2.289 5.024-3.505 5.338-4.014 0.667-1.244 2.901-4.754 3.247-6.223 0.646-2.571 1.854-4.464 1.037-7.151-0.287-0.865-2.211-1.065-3.072-0.504-2.448 1.5-2.056 3.279-2.306 4.929-0.845 4.679-3.976 9.437-4.244 12.963z"/>
- <path fill="#ffce16" d="m159.369 103.869c-0.139 2.219 4.86-3.407 5.162-3.9 0.643-1.208 2.801-4.613 3.131-6.037 0.622-2.492 1.787-4.329 0.988-6.93-0.28-0.838-2.146-1.027-2.978-0.481-2.368 1.459-1.983 3.182-2.223 4.781-0.807 4.533-3.829 9.151-4.08 12.567z"/>
- <path fill="#ffce19" d="m159.637 103.423c-0.13 2.147 4.695-3.31 4.986-3.788 0.62-1.17 2.699-4.471 3.016-5.85 0.596-2.414 1.719-4.195 0.939-6.71-0.273-0.81-2.079-0.989-2.883-0.458-2.289 1.418-1.913 3.084-2.139 4.632-0.77 4.391-3.684 8.866-3.919 12.174z"/>
- <path fill="#ffce1c" d="m159.906 102.977c-0.119 2.076 4.531-3.213 4.811-3.676 0.597-1.133 2.599-4.33 2.899-5.664 0.57-2.335 1.651-4.06 0.891-6.49-0.267-0.782-2.012-0.95-2.787-0.435-2.21 1.377-1.842 2.987-2.057 4.484-0.734 4.247-3.539 8.582-3.757 11.781z"/>
- <path fill="#ffcf1e" d="m160.174 102.53c-0.108 2.005 4.366-3.115 4.637-3.563 0.571-1.096 2.496-4.189 2.784-5.478 0.543-2.256 1.581-3.925 0.841-6.269-0.26-0.754-1.945-0.912-2.693-0.412-2.129 1.336-1.77 2.889-1.973 4.336-0.697 4.103-3.394 8.297-3.596 11.386z"/>
- <path fill="#ffcf21" d="m160.443 102.084c-0.099 1.934 4.201-3.018 4.46-3.45 0.548-1.059 2.394-4.047 2.668-5.291 0.517-2.178 1.514-3.79 0.793-6.049-0.253-0.727-1.879-0.874-2.599-0.39-2.051 1.295-1.698 2.792-1.891 4.188-0.658 3.959-3.246 8.012-3.431 10.992z"/>
- <path fill="#ffcf23" d="m160.712 101.637c-0.089 1.863 4.036-2.919 4.283-3.337 0.526-1.021 2.294-3.905 2.553-5.104 0.491-2.099 1.447-3.655 0.744-5.828-0.246-0.699-1.813-0.835-2.505-0.367-1.969 1.253-1.625 2.694-1.805 4.04-0.623 3.814-3.101 7.726-3.27 10.596z"/>
- <path fill="#ffcf26" d="m160.98 101.191c-0.079 1.792 3.872-2.822 4.107-3.225 0.502-0.984 2.192-3.764 2.438-4.918 0.464-2.02 1.378-3.52 0.694-5.607-0.238-0.672-1.746-0.797-2.41-0.344-1.89 1.212-1.555 2.597-1.723 3.891-0.583 3.671-2.953 7.442-3.106 10.203z"/>
- <path fill="#ffd028" d="m161.249 100.744c-0.068 1.721 3.707-2.724 3.933-3.112 0.478-0.947 2.091-3.623 2.321-4.731 0.439-1.942 1.311-3.386 0.646-5.387-0.232-0.645-1.68-0.758-2.316-0.321-1.81 1.171-1.481 2.5-1.639 3.743-0.548 3.527-2.809 7.156-2.945 9.808z"/>
- <path fill="#ffd02b" d="m161.517 100.298c-0.06 1.65 3.543-2.627 3.757-2.999 0.454-0.91 1.989-3.481 2.206-4.545 0.413-1.863 1.242-3.25 0.597-5.167-0.225-0.617-1.613-0.72-2.221-0.298-1.73 1.13-1.411 2.402-1.557 3.595-0.509 3.383-2.662 6.871-2.782 9.414z"/>
- <path fill="#ffd02d" d="m161.786 99.852c-0.049 1.579 3.377-2.529 3.581-2.887 0.431-0.872 1.887-3.34 2.091-4.359 0.387-1.784 1.173-3.116 0.547-4.946-0.217-0.589-1.546-0.682-2.126-0.275-1.649 1.089-1.339 2.305-1.472 3.446-0.474 3.24-2.518 6.587-2.621 9.021z"/>
- <path fill="#ffd030" d="m162.055 99.405c-0.039 1.508 3.212-2.432 3.404-2.773 0.407-0.835 1.786-3.199 1.976-4.172 0.359-1.706 1.104-2.981 0.499-4.726-0.211-0.562-1.481-0.644-2.032-0.253-1.571 1.048-1.268 2.208-1.389 3.298-0.436 3.096-2.372 6.302-2.458 8.626z"/>
- <path fill="#ffd133" d="m162.323 98.958c-0.029 1.437 3.048-2.334 3.23-2.661 0.383-0.798 1.684-3.057 1.858-3.986 0.334-1.627 1.037-2.846 0.45-4.505-0.204-0.534-1.414-0.605-1.938-0.23-1.49 1.007-1.195 2.11-1.306 3.15-0.397 2.953-2.224 6.018-2.294 8.232z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fc0" d="m179.646 95.994c-3.168 3.456-5.4 6.767-7.2 9-1.872 2.304-6.48 5.04-4.176 7.704 1.943 2.376 9.936-1.944 16.128-6.552 6.12-4.608 15.696-8.711 11.016-13.967-2.448-2.664-8.208-2.088-10.439-0.648-1.729 1.078-2.737 1.655-5.329 4.463z"/>
- <path fill="#ffcc02" d="m179.782 96.147c-3.118 3.378-5.313 6.628-7.086 8.809-1.841 2.249-6.375 4.945-4.13 7.534 1.893 2.31 9.724-1.943 15.795-6.469 6.001-4.525 15.38-8.574 10.82-13.682-2.387-2.588-8.022-1.998-10.209-0.584-1.692 1.062-2.665 1.67-5.19 4.392z"/>
- <path fill="#ffcc05" d="m179.919 96.3c-3.068 3.3-5.227 6.488-6.973 8.619-1.81 2.193-6.271 4.85-4.085 7.364 1.843 2.243 9.513-1.943 15.463-6.386 5.882-4.442 15.064-8.437 10.623-13.396-2.323-2.513-7.835-1.907-9.978-0.52-1.655 1.044-2.593 1.684-5.05 4.319z"/>
- <path fill="#ffcc07" d="m180.055 96.454c-3.02 3.222-5.14 6.347-6.859 8.428-1.78 2.138-6.166 4.754-4.04 7.194 1.793 2.177 9.302-1.942 15.131-6.303 5.762-4.359 14.748-8.299 10.427-13.11-2.261-2.437-7.648-1.817-9.747-0.456-1.619 1.025-2.522 1.698-4.912 4.247z"/>
- <path fill="#ffcd0a" d="m180.191 96.607c-2.97 3.143-5.052 6.207-6.745 8.237-1.749 2.082-6.063 4.659-3.994 7.023 1.743 2.111 9.09-1.941 14.798-6.219 5.644-4.276 14.433-8.162 10.231-12.824-2.199-2.361-7.463-1.727-9.518-0.392-1.581 1.008-2.45 1.713-4.772 4.175z"/>
- <path fill="#ffcd0c" d="m180.327 96.761c-2.92 3.065-4.965 6.066-6.631 8.047-1.718 2.027-5.957 4.564-3.949 6.853 1.693 2.044 8.878-1.94 14.466-6.136 5.524-4.194 14.116-8.024 10.034-12.538-2.137-2.286-7.275-1.636-9.285-0.328-1.546 0.988-2.38 1.726-4.635 4.102z"/>
- <path fill="#ffcd0f" d="m180.464 96.914c-2.871 2.987-4.879 5.926-6.518 7.857-1.688 1.971-5.854 4.468-3.903 6.683 1.643 1.978 8.666-1.94 14.133-6.053 5.404-4.111 13.801-7.887 9.839-12.251-2.075-2.21-7.091-1.546-9.056-0.264-1.509 0.969-2.308 1.738-4.495 4.028z"/>
- <path fill="#ffcd11" d="m180.6 97.067c-2.821 2.909-4.792 5.786-6.404 7.667-1.657 1.916-5.748 4.373-3.858 6.512 1.593 1.912 8.455-1.938 13.802-5.969 5.284-4.028 13.484-7.75 9.641-11.966-2.012-2.134-6.902-1.456-8.823-0.199-1.474 0.951-2.238 1.752-4.358 3.955z"/>
- <path fill="#ffce14" d="m180.736 97.221c-2.771 2.83-4.705 5.645-6.29 7.476-1.626 1.86-5.644 4.278-3.813 6.342 1.542 1.845 8.244-1.938 13.47-5.886 5.166-3.945 13.169-7.612 9.444-11.68-1.949-2.059-6.716-1.365-8.592-0.135-1.437 0.933-2.166 1.766-4.219 3.883z"/>
- <path fill="#ffce16" d="m180.872 97.375c-2.722 2.752-4.617 5.504-6.176 7.286-1.595 1.805-5.539 4.182-3.767 6.172 1.49 1.779 8.031-1.937 13.136-5.803 5.046-3.862 12.853-7.475 9.249-11.394-1.889-1.983-6.53-1.274-8.362-0.071-1.4 0.914-2.095 1.779-4.08 3.81z"/>
- <path fill="#ffce19" d="m181.009 97.528c-2.673 2.674-4.53 5.364-6.063 7.095-1.564 1.749-5.435 4.087-3.722 6.001 1.44 1.713 7.82-1.936 12.804-5.719 4.927-3.78 12.537-7.338 9.052-11.108-1.825-1.907-6.343-1.185-8.13-0.007-1.364 0.896-2.024 1.793-3.941 3.738z"/>
- <path fill="#ffce1c" d="m181.145 97.682c-2.623 2.595-4.444 5.225-5.949 6.904-1.534 1.693-5.33 3.992-3.676 5.831 1.39 1.646 7.608-1.935 12.471-5.636 4.808-3.697 12.221-7.2 8.856-10.822-1.764-1.832-6.157-1.094-7.9 0.057-1.327 0.878-1.952 1.807-3.802 3.666z"/>
- <path fill="#ffcf1e" d="m181.281 97.835c-2.573 2.517-4.357 5.084-5.835 6.714-1.503 1.638-5.226 3.896-3.631 5.661 1.34 1.58 7.396-1.935 12.139-5.553 4.689-3.614 11.905-7.063 8.659-10.536-1.701-1.756-5.97-1.004-7.668 0.121-1.291 0.86-1.881 1.821-3.664 3.593z"/>
- <path fill="#ffcf21" d="m181.417 97.988c-2.522 2.439-4.27 4.944-5.721 6.524-1.472 1.582-5.121 3.801-3.586 5.491 1.29 1.513 7.186-1.934 11.807-5.47 4.569-3.531 11.589-6.926 8.463-10.25-1.639-1.68-5.783-0.914-7.438 0.186-1.254 0.84-1.809 1.834-3.525 3.519z"/>
- <path fill="#ffcf23" d="m181.554 98.142c-2.476 2.361-4.185 4.803-5.608 6.333-1.441 1.527-5.017 3.706-3.54 5.32 1.24 1.447 6.974-1.933 11.474-5.386 4.45-3.448 11.273-6.788 8.268-9.964-1.577-1.605-5.599-0.823-7.207 0.25-1.22 0.822-1.74 1.848-3.387 3.447z"/>
- <path fill="#ffcf26" d="m181.69 98.295c-2.425 2.283-4.098 4.663-5.494 6.143-1.411 1.471-4.912 3.61-3.495 5.15 1.19 1.381 6.763-1.932 11.142-5.303 4.331-3.366 10.957-6.65 8.07-9.679-1.514-1.529-5.411-0.732-6.976 0.313-1.182 0.805-1.667 1.863-3.247 3.376z"/>
- <path fill="#ffd028" d="m181.826 98.449c-2.375 2.204-4.009 4.522-5.38 5.952-1.38 1.416-4.808 3.515-3.449 4.98 1.14 1.314 6.551-1.932 10.81-5.22 4.211-3.283 10.641-6.513 7.874-9.393-1.452-1.454-5.226-0.642-6.745 0.378-1.147 0.786-1.597 1.876-3.11 3.303z"/>
- <path fill="#ffd02b" d="m181.962 98.602c-2.324 2.127-3.922 4.382-5.266 5.762-1.349 1.36-4.703 3.42-3.404 4.809 1.089 1.248 6.34-1.93 10.478-5.136 4.092-3.2 10.325-6.376 7.677-9.106-1.389-1.378-5.038-0.552-6.513 0.441-1.111 0.768-1.526 1.89-2.972 3.23z"/>
- <path fill="#ffd02d" d="m182.099 98.756c-2.276 2.048-3.836 4.241-5.153 5.571-1.318 1.305-4.599 3.324-3.359 4.639 1.039 1.182 6.128-1.93 10.146-5.053 3.973-3.117 10.009-6.238 7.48-8.82-1.328-1.303-4.852-0.462-6.282 0.506-1.074 0.748-1.454 1.903-2.832 3.157z"/>
- <path fill="#ffd030" d="m182.235 98.909c-2.228 1.97-3.749 4.101-5.039 5.381-1.288 1.249-4.494 3.229-3.313 4.469 0.988 1.115 5.916-1.929 9.813-4.97 3.853-3.034 9.693-6.101 7.285-8.535-1.267-1.227-4.666-0.371-6.052 0.57-1.038 0.731-1.384 1.918-2.694 3.085z"/>
- <path fill="#ffd133" d="m182.371 99.063c-2.177 1.892-3.662 3.96-4.925 5.19-1.257 1.193-4.39 3.133-3.268 4.298 0.938 1.049 5.704-1.928 9.479-4.886 3.734-2.952 9.377-5.963 7.088-8.249-1.203-1.151-4.479-0.281-5.821 0.634-0.999 0.713-1.31 1.931-2.553 3.013z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fff" d="m186.414 168.569c0.864-2.808 28.872-9.432 33.48-7.272 4.536 2.16 26.279 33.768 22.392 35.496-3.888 1.657-12.24-10.512-24.408-16.128s-32.328-9.216-31.464-12.096z"/>
- <path fill="#f9f9f9" d="m187.239 168.626c0.848-2.761 28.145-9.076 32.69-6.997 4.476 2.079 25.768 32.897 21.943 34.591-3.824 1.625-11.965-10.346-23.94-15.874-11.976-5.527-31.541-8.89-30.693-11.72z"/>
- <path fill="#f4f4f4" d="m188.063 168.683c0.832-2.714 27.418-8.72 31.899-6.722 4.417 1.998 25.259 32.026 21.497 33.685-3.76 1.595-11.689-10.18-23.474-15.619-11.782-5.438-30.754-8.565-29.922-11.344z"/>
- <path fill="#efefef" d="m188.888 168.74c0.814-2.668 26.69-8.364 31.109-6.447 4.357 1.917 24.746 31.155 21.049 32.779-3.695 1.563-11.416-10.014-23.007-15.364-11.59-5.349-29.967-8.239-29.151-10.968z"/>
- <path fill="#eaeaea" d="m189.712 168.797c0.801-2.621 25.964-8.009 30.32-6.173 4.299 1.837 24.235 30.285 20.603 31.874-3.633 1.532-11.142-9.847-22.54-15.109-11.4-5.261-29.182-7.914-28.383-10.592z"/>
- <path fill="#e5e5e5" d="m190.537 168.853c0.783-2.573 25.236-7.652 29.53-5.897 4.239 1.756 23.723 29.414 20.155 30.968-3.569 1.501-10.867-9.681-22.074-14.854-11.206-5.172-28.395-7.589-27.611-10.217z"/>
- <path fill="#e0e0e0" d="m191.361 168.91c0.768-2.527 24.51-7.296 28.74-5.622 4.18 1.675 23.212 28.543 19.708 30.063-3.505 1.469-10.593-9.516-21.607-14.6-11.014-5.083-27.608-7.263-26.841-9.841z"/>
- <path fill="#dbdbdb" d="m192.186 168.967c0.751-2.48 23.781-6.941 27.95-5.347 4.119 1.593 22.7 27.671 19.26 29.157-3.441 1.438-10.318-9.349-21.141-14.345-10.821-4.994-26.821-6.938-26.069-9.465z"/>
- <path fill="#d6d6d6" d="m193.01 169.024c0.735-2.433 23.057-6.585 27.16-5.073 4.062 1.513 22.19 26.801 18.813 28.252-3.377 1.407-10.043-9.183-20.673-14.09-10.629-4.906-26.035-6.612-25.3-9.089z"/>
- <path fill="#d1d1d1" d="m193.835 169.081c0.72-2.387 22.328-6.229 26.37-4.798 4.001 1.432 21.678 25.93 18.365 27.346-3.313 1.376-9.768-9.017-20.206-13.835-10.437-4.817-25.248-6.287-24.529-8.713z"/>
- <path fill="#ccc" d="m194.659 169.137c0.703-2.339 21.603-5.873 25.58-4.521 3.942 1.351 21.167 25.059 17.918 26.44-3.249 1.345-9.493-8.851-19.739-13.58-10.245-4.729-24.462-5.963-23.759-8.339z"/>
- <path fill="#c6c6c6" d="m195.484 169.194c0.687-2.292 20.874-5.517 24.79-4.247 3.882 1.27 20.655 24.188 17.47 25.535-3.185 1.314-9.219-8.685-19.271-13.326-10.054-4.639-23.676-5.636-22.989-7.962z"/>
- <path fill="#c1c1c1" d="m196.308 169.251c0.671-2.246 20.147-5.161 24-3.973 3.822 1.19 20.145 23.318 17.022 24.63-3.121 1.283-8.943-8.519-18.805-13.071-9.859-4.551-22.888-5.311-22.217-7.586z"/>
- <path fill="#bcbcbc" d="m197.133 169.308c0.654-2.199 19.421-4.805 23.21-3.698 3.764 1.109 19.634 22.447 16.575 23.724-3.057 1.252-8.669-8.353-18.338-12.816-9.668-4.462-22.102-4.985-21.447-7.21z"/>
- <path fill="#b7b7b7" d="m197.957 169.365c0.64-2.152 18.693-4.45 22.42-3.423 3.705 1.027 19.122 21.575 16.129 22.818-2.993 1.221-8.395-8.186-17.872-12.561-9.476-4.373-21.315-4.66-20.677-6.834z"/>
- <path fill="#b2b2b2" d="m198.782 169.421c0.622-2.105 17.966-4.093 21.63-3.147 3.646 0.946 18.61 20.704 15.681 21.912-2.93 1.19-8.12-8.02-17.404-12.306-9.284-4.284-20.53-4.335-19.907-6.459z"/>
- <path fill="#adadad" d="m199.606 169.478c0.606-2.058 17.239-3.737 20.84-2.873 3.586 0.866 18.099 19.834 15.234 21.008-2.866 1.158-7.847-7.855-16.938-12.052-9.091-4.196-19.742-4.009-19.136-6.083z"/>
- <path fill="#a8a8a8" d="m200.431 169.535c0.59-2.011 16.512-3.382 20.05-2.598 3.525 0.785 17.588 18.963 14.786 20.102-2.803 1.127-7.571-7.688-16.472-11.797-8.898-4.107-18.955-3.684-18.364-5.707z"/>
- <path fill="#a3a3a3" d="m201.255 169.592c0.574-1.965 15.785-3.026 19.261-2.323 3.467 0.704 17.076 18.092 14.339 19.196-2.738 1.096-7.296-7.522-16.004-11.542-8.707-4.018-18.17-3.358-17.596-5.331z"/>
- <path fill="#9e9e9e" d="m202.08 169.649c0.559-1.918 15.059-2.67 18.47-2.048 3.407 0.623 16.565 17.221 13.892 18.29-2.674 1.065-7.022-7.356-15.537-11.287-8.515-3.929-17.383-3.033-16.825-4.955z"/>
- <path fill="#999" d="m202.904 169.705c0.542-1.871 14.331-2.314 17.68-1.773 3.349 0.542 16.055 16.35 13.444 17.385-2.61 1.034-6.747-7.19-15.07-11.032-8.322-3.841-16.596-2.708-16.054-4.58z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fff" d="m151.134 211.625c2.881 0.144 0.145 16.271 0.145 32.903s2.231 22.464 0.144 24.552-5.688-5.399-5.688-22.031c-0.001-16.632 2.519-35.568 5.399-35.424z"/>
- <path fill="#f9f9f9" d="m151.105 212.016c2.783 0.162 0.109 16.052 0.097 32.419-0.012 16.366 2.188 22.208 0.164 24.237-2.02 2.029-5.561-5.383-5.546-21.752 0.012-16.367 2.502-35.065 5.285-34.904z"/>
- <path fill="#f4f4f4" d="m151.075 212.407c2.687 0.18 0.076 15.832 0.051 31.934-0.023 16.102 2.143 21.951 0.185 23.924-1.953 1.968-5.435-5.367-5.405-21.473 0.024-16.103 2.484-34.564 5.169-34.385z"/>
- <path fill="#efefef" d="m151.046 212.797c2.588 0.197 0.041 15.613 0.004 31.449-0.036 15.836 2.098 21.694 0.204 23.609-1.886 1.907-5.308-5.352-5.263-21.195 0.037-15.835 2.467-34.058 5.055-33.863z"/>
- <path fill="#eaeaea" d="m151.017 213.189c2.49 0.214 0.007 15.392-0.043 30.962-0.05 15.571 2.052 21.439 0.224 23.297-1.818 1.848-5.181-5.334-5.122-20.916 0.049-15.571 2.45-33.557 4.941-33.343z"/>
- <path fill="#e5e5e5" d="m150.987 213.581c2.394 0.23-0.027 15.17-0.089 30.477s2.007 21.182 0.244 22.982c-1.751 1.787-5.055-5.32-4.98-20.638 0.061-15.305 2.431-33.053 4.825-32.821z"/>
- <path fill="#e0e0e0" d="m150.958 213.971c2.297 0.248-0.062 14.951-0.136 29.99-0.074 15.041 1.962 20.927 0.264 22.668-1.683 1.728-4.928-5.301-4.839-20.356 0.074-15.04 2.414-32.551 4.711-32.302z"/>
- <path fill="#dbdbdb" d="m150.928 214.362c2.199 0.266-0.096 14.73-0.182 29.506-0.087 14.775 1.915 20.67 0.282 22.354-1.615 1.667-4.8-5.286-4.696-20.078 0.087-14.776 2.397-32.048 4.596-31.782z"/>
- <path fill="#d6d6d6" d="m150.899 214.752c2.102 0.283-0.13 14.511-0.229 29.021-0.099 14.511 1.87 20.413 0.303 22.04-1.549 1.607-4.674-5.27-4.556-19.799 0.1-14.51 2.38-31.545 4.482-31.262z"/>
- <path fill="#d1d1d1" d="m150.87 215.144c2.005 0.301-0.165 14.29-0.274 28.535-0.112 14.245 1.824 20.155 0.321 21.725-1.479 1.548-4.547-5.252-4.413-19.519 0.11-14.245 2.361-31.043 4.366-30.741z"/>
- <path fill="#ccc" d="m150.84 215.536c1.908 0.317-0.197 14.069-0.32 28.049-0.124 13.979 1.779 19.899 0.342 21.412-1.413 1.486-4.42-5.238-4.272-19.242 0.122-13.979 2.343-30.54 4.25-30.219z"/>
- <path fill="#c6c6c6" d="m150.811 215.926c1.811 0.334-0.233 13.85-0.368 27.564-0.136 13.713 1.735 19.643 0.362 21.096-1.346 1.428-4.293-5.219-4.131-18.961 0.136-13.712 2.327-30.035 4.137-29.699z"/>
- <path fill="#c1c1c1" d="m150.781 216.317c1.714 0.354-0.267 13.629-0.414 27.078s1.69 19.387 0.382 20.783c-1.277 1.367-4.166-5.203-3.989-18.682 0.148-13.449 2.308-29.533 4.021-29.179z"/>
- <path fill="#bcbcbc" d="m150.752 216.708c1.616 0.371-0.301 13.41-0.461 26.594-0.161 13.184 1.646 19.13 0.402 20.469-1.211 1.307-4.04-5.188-3.847-18.402 0.16-13.185 2.29-29.033 3.906-28.661z"/>
- <path fill="#b7b7b7" d="m150.723 217.099c1.519 0.387-0.336 13.188-0.509 26.106-0.173 12.92 1.601 18.875 0.423 20.156-1.144 1.246-3.913-5.171-3.706-18.123 0.172-12.919 2.273-28.529 3.792-28.139z"/>
- <path fill="#b2b2b2" d="m150.693 217.491c1.422 0.404-0.37 12.969-0.554 25.621-0.186 12.653 1.555 18.617 0.441 19.842-1.076 1.187-3.786-5.156-3.563-17.846 0.184-12.652 2.255-28.024 3.676-27.617z"/>
- <path fill="#adadad" d="m150.664 217.881c1.325 0.422-0.404 12.748-0.601 25.136-0.198 12.388 1.51 18.36 0.462 19.528-1.008 1.125-3.66-5.139-3.423-17.566 0.197-12.389 2.238-27.521 3.562-27.098z"/>
- <path fill="#a8a8a8" d="m150.634 218.272c1.229 0.439-0.438 12.527-0.646 24.65-0.21 12.123 1.464 18.104 0.48 19.213-0.939 1.066-3.531-5.121-3.279-17.285 0.208-12.123 2.219-27.019 3.445-26.578z"/>
- <path fill="#a3a3a3" d="m150.605 218.663c1.13 0.457-0.474 12.309-0.694 24.166-0.222 11.857 1.419 17.848 0.501 18.899-0.873 1.006-3.405-5.106-3.139-17.009 0.222-11.855 2.202-26.515 3.332-26.056z"/>
- <path fill="#9e9e9e" d="m150.576 219.054c1.033 0.474-0.507 12.088-0.741 23.68-0.234 11.593 1.374 17.591 0.521 18.585-0.806 0.946-3.279-5.089-2.997-16.729 0.233-11.591 2.184-26.011 3.217-25.536z"/>
- <path fill="#999" d="m150.546 219.444c0.937 0.492-0.541 11.868-0.787 23.195-0.246 11.326 1.329 17.335 0.541 18.271-0.737 0.885-3.151-5.074-2.855-16.449 0.245-11.328 2.166-25.509 3.101-25.017z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fff" d="m157.434 167.161c1.735 0.192 12.437-2.218 12.822-1.254 0.386 0.772-6.651 2.893-8.966 5.303-0.771 0.771-2.796 2.603-4.049 2.41-0.964-0.096-1.543-2.121-2.989-3.664-3.471-3.47-5.688-3.181-5.013-4.531 0.579-1.06 5.207 1.446 8.195 1.736z"/>
- <path fill="#fbfbfb" d="m157.479 167.201c1.7 0.188 12.176-2.171 12.554-1.227 0.377 0.755-6.512 2.832-8.778 5.191-0.755 0.755-2.736 2.549-3.964 2.36-0.942-0.094-1.51-2.077-2.926-3.587-3.398-3.397-5.568-3.115-4.907-4.436 0.565-1.038 5.096 1.415 8.021 1.699z"/>
- <path fill="#f8f8f8" d="m157.525 167.241c1.663 0.184 11.914-2.124 12.283-1.201 0.369 0.739-6.372 2.771-8.589 5.08-0.738 0.739-2.679 2.494-3.879 2.309-0.924-0.092-1.479-2.032-2.863-3.51-3.325-3.324-5.449-3.048-4.803-4.341 0.555-1.015 4.988 1.385 7.851 1.663z"/>
- <path fill="#f5f5f5" d="m157.57 167.281c1.626 0.18 11.652-2.078 12.014-1.175 0.361 0.723-6.231 2.711-8.4 4.969-0.723 0.722-2.619 2.439-3.793 2.258-0.903-0.09-1.446-1.987-2.802-3.433-3.252-3.251-5.329-2.981-4.695-4.245 0.54-0.993 4.876 1.354 7.676 1.626z"/>
- <path fill="#f2f2f2" d="m157.615 167.321c1.59 0.176 11.391-2.031 11.745-1.148 0.352 0.706-6.093 2.649-8.212 4.856-0.707 0.707-2.562 2.385-3.709 2.208-0.883-0.088-1.413-1.943-2.738-3.356-3.179-3.178-5.209-2.914-4.591-4.15 0.529-0.971 4.768 1.324 7.505 1.59z"/>
- <path fill="#efefef" d="m157.66 167.361c1.554 0.172 11.13-1.985 11.475-1.122 0.346 0.69-5.952 2.589-8.022 4.745-0.69 0.69-2.503 2.33-3.624 2.157-0.863-0.086-1.381-1.898-2.675-3.279-3.106-3.105-5.09-2.847-4.486-4.055 0.517-0.948 4.658 1.294 7.332 1.554z"/>
- <path fill="#ebebeb" d="m157.705 167.401c1.518 0.168 10.868-1.938 11.206-1.096 0.336 0.674-5.813 2.528-7.835 4.634-0.674 0.674-2.444 2.275-3.539 2.106-0.842-0.084-1.348-1.853-2.612-3.202-3.032-3.032-4.97-2.78-4.38-3.959 0.505-0.926 4.549 1.263 7.16 1.517z"/>
- <path fill="#e8e8e8" d="m157.751 167.441c1.48 0.164 10.606-1.892 10.936-1.069 0.329 0.657-5.673 2.467-7.646 4.522-0.658 0.657-2.385 2.22-3.453 2.055-0.822-0.082-1.315-1.809-2.549-3.124-2.96-2.96-4.851-2.714-4.275-3.865 0.491-0.904 4.438 1.233 6.987 1.481z"/>
- <path fill="#e5e5e5" d="m157.796 167.481c1.444 0.16 10.346-1.845 10.666-1.043 0.32 0.641-5.532 2.406-7.458 4.41-0.641 0.642-2.325 2.166-3.367 2.005-0.803-0.08-1.284-1.764-2.486-3.047-2.887-2.887-4.732-2.647-4.17-3.769 0.48-0.882 4.329 1.202 6.815 1.444z"/>
- <path fill="#e2e2e2" d="m157.841 167.521c1.407 0.156 10.083-1.799 10.397-1.017 0.312 0.625-5.394 2.346-7.271 4.299-0.625 0.625-2.267 2.111-3.282 1.954-0.782-0.078-1.251-1.719-2.423-2.97-2.814-2.814-4.612-2.58-4.065-3.674 0.469-0.859 4.221 1.172 6.644 1.408z"/>
- <path fill="#dfdfdf" d="m157.886 167.56c1.37 0.152 9.821-1.751 10.127-0.99 0.304 0.609-5.254 2.285-7.081 4.188-0.609 0.609-2.208 2.056-3.198 1.903-0.761-0.076-1.218-1.675-2.36-2.893-2.741-2.741-4.492-2.513-3.959-3.579 0.456-0.837 4.111 1.142 6.471 1.371z"/>
- <path fill="#dbdbdb" d="m157.931 167.6c1.335 0.148 9.561-1.704 9.857-0.963 0.296 0.592-5.114 2.223-6.893 4.076-0.593 0.593-2.149 2.001-3.113 1.853-0.741-0.074-1.186-1.631-2.297-2.817-2.668-2.667-4.373-2.446-3.854-3.483 0.445-0.815 4.003 1.111 6.3 1.334z"/>
- <path fill="#d8d8d8" d="m157.977 167.64c1.298 0.144 9.299-1.658 9.587-0.937 0.288 0.576-4.974 2.163-6.704 3.964-0.576 0.577-2.091 1.947-3.027 1.803-0.721-0.072-1.153-1.586-2.234-2.74-2.596-2.594-4.253-2.379-3.748-3.388 0.431-0.792 3.891 1.081 6.126 1.298z"/>
- <path fill="#d5d5d5" d="m158.022 167.68c1.261 0.14 9.037-1.611 9.317-0.911 0.28 0.56-4.834 2.102-6.516 3.853-0.56 0.561-2.032 1.892-2.942 1.752-0.7-0.07-1.12-1.541-2.172-2.663-2.521-2.521-4.133-2.312-3.643-3.292 0.421-0.77 3.784 1.05 5.956 1.261z"/>
- <path fill="#d2d2d2" d="m158.067 167.72c1.225 0.136 8.775-1.564 9.049-0.884 0.271 0.543-4.695 2.041-6.327 3.741-0.545 0.544-1.974 1.837-2.857 1.701-0.682-0.068-1.09-1.497-2.109-2.585-2.449-2.449-4.014-2.246-3.538-3.198 0.407-0.748 3.673 1.02 5.782 1.225z"/>
- <path fill="#cfcfcf" d="m158.112 167.76c1.188 0.132 8.515-1.518 8.779-0.858 0.264 0.527-4.555 1.98-6.139 3.63-0.527 0.528-1.915 1.782-2.772 1.65-0.66-0.066-1.057-1.452-2.046-2.508-2.376-2.376-3.895-2.179-3.433-3.103 0.397-0.725 3.565 0.99 5.611 1.189z"/>
- <path fill="#ccc" d="m158.157 167.8c1.152 0.128 8.253-1.472 8.51-0.832 0.255 0.511-4.415 1.92-5.95 3.518-0.512 0.512-1.855 1.728-2.688 1.6-0.64-0.064-1.023-1.407-1.983-2.431-2.303-2.303-3.773-2.112-3.326-3.007 0.383-0.703 3.454 0.959 5.437 1.152z"/>
- <path fill="#c8c8c8" d="m158.203 167.84c1.115 0.124 7.991-1.425 8.239-0.805 0.248 0.494-4.274 1.858-5.761 3.406-0.496 0.496-1.798 1.673-2.603 1.549-0.62-0.063-0.992-1.363-1.921-2.354-2.229-2.229-3.655-2.045-3.221-2.912 0.372-0.681 3.346 0.929 5.267 1.116z"/>
- <path fill="#c5c5c5" d="m158.248 167.88c1.079 0.12 7.73-1.379 7.97-0.779 0.239 0.478-4.135 1.798-5.572 3.295-0.479 0.479-1.739 1.618-2.518 1.498-0.6-0.06-0.959-1.318-1.857-2.277-2.157-2.157-3.535-1.978-3.116-2.816 0.359-0.659 3.235 0.898 5.093 1.079z"/>
- <path fill="#c2c2c2" d="m158.293 167.92c1.042 0.116 7.469-1.332 7.701-0.753 0.231 0.462-3.995 1.737-5.385 3.184-0.463 0.463-1.68 1.563-2.432 1.447-0.579-0.058-0.927-1.273-1.796-2.2-2.084-2.084-3.415-1.911-3.01-2.721 0.348-0.636 3.127 0.868 4.922 1.043z"/>
- <path fill="#bfbfbf" d="m158.338 167.959c1.007 0.112 7.207-1.285 7.432-0.726 0.223 0.446-3.855 1.676-5.196 3.072-0.447 0.447-1.621 1.509-2.347 1.397-0.56-0.056-0.895-1.229-1.732-2.123-2.011-2.011-3.296-1.844-2.905-2.626 0.334-0.614 3.016 0.838 4.748 1.006z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m194.253 11.922c-1.222 2.631-3.812 23.214-0.248 20.892 3.594-2.341 13.57-5.312 19.886-7.013 7.003-1.886-17.188-19.463-19.638-13.879z"/>
- <path fill="#060606" d="m194.485 12.307c-1.21 2.594-3.704 22.255-0.234 20.007 3.491-2.262 13.077-5.1 19.039-6.782 6.59-1.905-16.436-18.609-18.805-13.225z"/>
- <path fill="#0c0c0c" d="m194.717 12.691c-1.198 2.557-3.595 21.296-0.221 19.124 3.391-2.184 12.586-4.888 18.194-6.551 6.177-1.924-15.684-17.757-17.973-12.573z"/>
- <path fill="#131313" d="m194.949 13.076c-1.187 2.52-3.487 20.337-0.207 18.239 3.288-2.105 12.093-4.676 17.348-6.321 5.763-1.941-14.933-16.903-17.141-11.918z"/>
- <path fill="#191919" d="m195.181 13.46c-1.177 2.483-3.379 19.378-0.193 17.355 3.187-2.027 11.6-4.464 16.502-6.09 5.349-1.959-14.182-16.05-16.309-11.265z"/>
- <path fill="#1f1f1f" d="m195.413 13.845c-1.164 2.446-3.27 18.419-0.18 16.471 3.086-1.949 11.107-4.252 15.657-5.859 4.935-1.978-13.43-15.198-15.477-10.612z"/>
- <path fill="#262626" d="m195.645 14.229c-1.153 2.409-3.162 17.46-0.166 15.586 2.983-1.87 10.616-4.04 14.811-5.628 4.521-1.995-12.679-14.344-14.645-9.958z"/>
- <path fill="#2c2c2c" d="m195.878 14.614c-1.142 2.372-3.055 16.501-0.152 14.702 2.882-1.792 10.123-3.828 13.965-5.398 4.107-2.013-11.929-13.49-13.813-9.304z"/>
- <path fill="#333" d="m196.11 14.999c-1.131 2.335-2.946 15.542-0.14 13.817 2.78-1.713 9.631-3.616 13.119-5.167 3.695-2.031-11.175-12.637-12.979-8.65z"/>
- <path fill="#393939" d="m196.342 15.383c-1.118 2.299-2.838 14.583-0.126 12.934 2.68-1.636 9.139-3.404 12.274-4.937 3.28-2.049-10.425-11.784-12.148-7.997z"/>
- <path fill="#3f3f3f" d="m196.574 15.768c-1.108 2.261-2.729 13.624-0.112 12.049 2.577-1.557 8.646-3.192 11.429-4.706 2.865-2.068-9.675-10.931-11.317-7.343z"/>
- <path fill="#464646" d="m196.806 16.152c-1.097 2.225-2.622 12.665-0.1 11.165 2.477-1.479 8.154-2.98 10.583-4.475 2.453-2.086-8.922-10.078-10.483-6.69z"/>
- <path fill="#4c4c4c" d="m197.038 16.537c-1.085 2.188-2.513 11.706-0.085 10.28 2.374-1.4 7.661-2.768 9.737-4.244 2.039-2.104-8.171-9.225-9.652-6.036z"/>
- <path fill="#525252" d="m197.27 16.921c-1.073 2.151-2.405 10.747-0.071 9.396 2.272-1.322 7.168-2.556 8.891-4.013 1.625-2.122-7.42-8.371-8.82-5.383z"/>
- <path fill="#595959" d="m197.502 17.306c-1.062 2.113-2.297 9.788-0.058 8.512 2.172-1.244 6.677-2.344 8.046-3.783 1.211-2.14-6.669-7.518-7.988-4.729z"/>
- <path fill="#5f5f5f" d="m197.734 17.69c-1.05 2.077-2.188 8.829-0.044 7.627 2.069-1.165 6.184-2.132 7.2-3.552 0.797-2.157-5.917-6.664-7.156-4.075z"/>
- <path fill="#666" d="m197.966 18.075c-1.038 2.04-2.079 7.87-0.029 6.743 1.968-1.087 5.69-1.92 6.354-3.321 0.382-2.176-5.167-5.812-6.325-3.422z"/>
- <path fill="#6c6c6c" d="m198.198 18.459c-1.027 2.003-1.972 6.911-0.017 5.859 1.866-1.008 5.198-1.708 5.509-3.09-0.03-2.194-4.415-4.959-5.492-2.769z"/>
- <path fill="#727272" d="m198.43 18.844c-1.017 1.966-1.863 5.952-0.003 4.975 1.765-0.93 4.706-1.496 4.662-2.86-0.443-2.212-3.662-4.106-4.659-2.115z"/>
- <path fill="#797979" d="m198.662 19.228c-1.004 1.929-1.755 4.993 0.011 4.09 1.663-0.852 4.215-1.284 3.817-2.629-0.858-2.23-2.912-3.251-3.828-1.461z"/>
- <path fill="#7f7f7f" d="m198.894 19.612c-0.993 1.892-1.647 4.034 0.023 3.206 1.563-0.773 3.723-1.072 2.973-2.398-1.272-2.248-2.161-2.399-2.996-0.808z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m143.502 46.386c-0.72 2.16 8.712 5.112 10.801 6.984 2.808 2.52 3.023 7.488 6.336 5.472 2.159-1.296 0.504-4.176-3.456-8.568-5.833-6.481-13.033-5.689-13.681-3.888z"/>
- <path fill="#050505" d="m143.991 46.582c-0.716 2.073 8.275 4.9 10.336 6.741 2.745 2.457 2.961 7.249 6.146 5.313 2.094-1.254 0.449-4.072-3.343-8.28-5.574-6.203-12.491-5.505-13.139-3.774z"/>
- <path fill="#0a0a0a" d="m144.479 46.779c-0.71 1.987 7.839 4.688 9.873 6.498 2.682 2.394 2.897 7.009 5.956 5.154 2.028-1.212 0.395-3.968-3.228-7.993-5.319-5.926-11.953-5.321-12.601-3.659z"/>
- <path fill="#0f0f0f" d="m144.967 46.976c-0.704 1.9 7.403 4.476 9.41 6.254 2.62 2.33 2.835 6.77 5.766 4.995 1.964-1.171 0.342-3.864-3.112-7.706-5.064-5.647-11.415-5.137-12.064-3.543z"/>
- <path fill="#141414" d="m145.456 47.172c-0.701 1.813 6.966 4.263 8.946 6.011 2.557 2.266 2.772 6.53 5.575 4.835 1.897-1.129 0.287-3.76-2.998-7.418-4.807-5.369-10.874-4.952-11.523-3.428z"/>
- <path fill="#191919" d="m145.944 47.369c-0.696 1.726 6.53 4.051 8.483 5.768 2.493 2.203 2.71 6.291 5.385 4.676 1.833-1.087 0.231-3.656-2.884-7.13-4.551-5.093-10.335-4.769-10.984-3.314z"/>
- <path fill="#1e1e1e" d="m146.433 47.565c-0.692 1.64 6.093 3.839 8.019 5.525 2.431 2.14 2.647 6.052 5.194 4.517 1.768-1.046 0.179-3.552-2.77-6.843-4.293-4.814-9.794-4.585-10.443-3.199z"/>
- <path fill="#232323" d="m146.921 47.762c-0.686 1.553 5.657 3.627 7.558 5.282 2.367 2.076 2.583 5.813 5.003 4.357 1.702-1.003 0.124-3.448-2.654-6.555-4.04-4.537-9.257-4.401-9.907-3.084z"/>
- <path fill="#282828" d="m147.409 47.959c-0.681 1.466 5.221 3.415 7.094 5.039 2.305 2.013 2.521 5.573 4.813 4.198 1.637-0.962 0.07-3.344-2.54-6.268-3.782-4.26-8.717-4.218-9.367-2.969z"/>
- <path fill="#2d2d2d" d="m147.898 48.156c-0.677 1.379 4.784 3.203 6.63 4.795 2.242 1.949 2.457 5.333 4.622 4.039 1.572-0.92 0.016-3.24-2.425-5.98-3.526-3.983-8.177-4.034-8.827-2.854z"/>
- <path fill="#333" d="m148.386 48.353c-0.673 1.292 4.348 2.99 6.167 4.552 2.179 1.886 2.394 5.095 4.432 3.88 1.506-0.878-0.038-3.136-2.312-5.693-3.268-3.705-7.636-3.85-8.287-2.739z"/>
- <path fill="#383838" d="m148.875 48.549c-0.668 1.206 3.911 2.778 5.703 4.309 2.116 1.823 2.331 4.855 4.242 3.721 1.439-0.836-0.093-3.032-2.197-5.405-3.013-3.428-7.098-3.667-7.748-2.625z"/>
- <path fill="#3d3d3d" d="m149.363 48.746c-0.662 1.119 3.475 2.566 5.24 4.065 2.053 1.759 2.268 4.616 4.052 3.562 1.375-0.795-0.147-2.928-2.082-5.118-2.757-3.15-6.559-3.483-7.21-2.509z"/>
- <path fill="#424242" d="m149.851 48.942c-0.657 1.032 3.039 2.354 4.776 3.823 1.99 1.696 2.205 4.376 3.861 3.402 1.31-0.753-0.201-2.824-1.967-4.831-2.5-2.871-6.018-3.298-6.67-2.394z"/>
- <path fill="#474747" d="m150.34 49.139c-0.652 0.946 2.603 2.142 4.313 3.58 1.927 1.632 2.143 4.137 3.671 3.243 1.244-0.712-0.256-2.72-1.853-4.543-2.245-2.595-5.48-3.115-6.131-2.28z"/>
- <path fill="#4c4c4c" d="m150.828 49.336c-0.647 0.859 2.166 1.93 3.851 3.336 1.863 1.569 2.079 3.898 3.48 3.084 1.179-0.67-0.31-2.616-1.739-4.255-1.988-2.317-4.94-2.932-5.592-2.165z"/>
- <path fill="#515151" d="m151.317 49.533c-0.645 0.772 1.729 1.718 3.386 3.093 1.802 1.505 2.018 3.658 3.29 2.925 1.114-0.628-0.364-2.512-1.624-3.968-1.732-2.04-4.4-2.748-5.052-2.05z"/>
- <path fill="#565656" d="m151.805 49.729c-0.639 0.685 1.293 1.505 2.923 2.85 1.738 1.442 1.954 3.419 3.1 2.766 1.048-0.586-0.418-2.408-1.509-3.681-1.476-1.762-3.862-2.563-4.514-1.935z"/>
- <path fill="#5b5b5b" d="m152.293 49.926c-0.633 0.598 0.857 1.293 2.46 2.606 1.677 1.379 1.892 3.18 2.91 2.606 0.983-0.544-0.473-2.304-1.395-3.393-1.22-1.483-3.322-2.379-3.975-1.819z"/>
- <path fill="#606060" d="m152.782 50.123c-0.629 0.512 0.42 1.081 1.996 2.363 1.613 1.315 1.828 2.94 2.719 2.447 0.918-0.502-0.525-2.2-1.28-3.105-0.963-1.207-2.782-2.196-3.435-1.705z"/>
- <path fill="#666" d="m153.27 50.319c-0.624 0.425-0.017 0.869 1.533 2.12 1.55 1.252 1.765 2.701 2.528 2.288 0.853-0.461-0.581-2.096-1.166-2.818-0.706-0.929-2.242-2.012-2.895-1.59z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m193.47 45.594c-0.072 1.08 2.951 1.728 4.896 2.448 1.944 0.648 5.76 3.24 7.56 5.256 1.801 1.944 5.688 7.704 6.553 6.192 0.863-1.368-2.017-5.328-2.809-6.984s-3.239-5.256-7.128-6.48c-3.384-1.008-9-1.297-9.072-0.432z"/>
- <path fill="#060606" d="m193.779 45.67c-0.071 1.05 2.869 1.685 4.758 2.387 1.891 0.633 5.598 3.161 7.345 5.122 1.747 1.893 5.535 7.493 6.376 6.027 0.84-1.328-1.936-5.173-2.738-6.795-0.8-1.622-3.175-5.09-6.952-6.301-3.282-0.995-8.718-1.28-8.789-0.44z"/>
- <path fill="#0c0c0c" d="m194.088 45.747c-0.07 1.021 2.785 1.641 4.62 2.327 1.836 0.618 5.436 3.081 7.131 4.988 1.692 1.842 5.382 7.282 6.198 5.862 0.814-1.288-1.855-5.019-2.67-6.607-0.808-1.587-3.11-4.925-6.776-6.122-3.178-0.983-8.433-1.264-8.503-0.448z"/>
- <path fill="#131313" d="m194.397 45.824c-0.071 0.991 2.702 1.598 4.481 2.267 1.782 0.603 5.272 3.001 6.916 4.854 1.64 1.791 5.229 7.071 6.022 5.697 0.788-1.248-1.776-4.865-2.603-6.418-0.815-1.554-3.044-4.759-6.599-5.942-3.073-0.973-8.148-1.251-8.217-0.458z"/>
- <path fill="#191919" d="m194.706 45.9c-0.069 0.961 2.618 1.555 4.345 2.206 1.728 0.588 5.109 2.922 6.7 4.721 1.586 1.74 5.075 6.86 5.846 5.531 0.764-1.207-1.696-4.711-2.532-6.23-0.824-1.519-2.979-4.593-6.424-5.763-2.972-0.959-7.866-1.234-7.935-0.465z"/>
- <path fill="#1f1f1f" d="m195.015 45.977c-0.07 0.931 2.534 1.511 4.207 2.146 1.672 0.573 4.945 2.843 6.485 4.586 1.531 1.689 4.921 6.649 5.668 5.367 0.738-1.167-1.616-4.557-2.464-6.042-0.832-1.485-2.914-4.428-6.247-5.583-2.868-0.948-7.581-1.219-7.649-0.474z"/>
- <path fill="#262626" d="m195.324 46.054c-0.069 0.901 2.451 1.468 4.069 2.085 1.618 0.557 4.784 2.763 6.271 4.453 1.479 1.638 4.769 6.438 5.491 5.201 0.714-1.127-1.536-4.402-2.396-5.854-0.839-1.451-2.848-4.263-6.07-5.404-2.765-0.934-7.298-1.202-7.365-0.481z"/>
- <path fill="#2c2c2c" d="m195.632 46.13c-0.067 0.872 2.369 1.424 3.933 2.025 1.563 0.542 4.621 2.684 6.056 4.318 1.424 1.587 4.615 6.228 5.315 5.036 0.688-1.086-1.456-4.248-2.326-5.665-0.848-1.416-2.783-4.097-5.896-5.224-2.662-0.923-7.015-1.187-7.082-0.49z"/>
- <path fill="#333" d="m195.941 46.207c-0.068 0.842 2.285 1.381 3.794 1.964 1.51 0.527 4.458 2.605 5.842 4.185 1.37 1.536 4.461 6.016 5.138 4.871 0.662-1.046-1.377-4.093-2.258-5.476-0.855-1.382-2.718-3.932-5.718-5.045-2.56-0.911-6.732-1.172-6.798-0.499z"/>
- <path fill="#393939" d="m196.25 46.284c-0.066 0.813 2.202 1.338 3.656 1.904 1.456 0.512 4.296 2.525 5.627 4.051 1.317 1.485 4.308 5.805 4.961 4.706 0.638-1.006-1.296-3.939-2.188-5.288-0.863-1.348-2.652-3.766-5.542-4.866-2.457-0.899-6.449-1.157-6.514-0.507z"/>
- <path fill="#3f3f3f" d="m196.559 46.36c-0.067 0.783 2.118 1.295 3.518 1.844 1.402 0.497 4.133 2.446 5.412 3.917 1.263 1.434 4.155 5.594 4.785 4.541 0.612-0.966-1.217-3.785-2.12-5.1-0.872-1.313-2.587-3.6-5.366-4.687-2.353-0.886-6.165-1.141-6.229-0.515z"/>
- <path fill="#464646" d="m196.868 46.437c-0.065 0.753 2.035 1.251 3.38 1.783 1.349 0.482 3.972 2.367 5.197 3.783 1.21 1.383 4.002 5.383 4.608 4.375 0.588-0.926-1.137-3.63-2.052-4.911-0.879-1.279-2.521-3.435-5.189-4.507-2.25-0.874-5.881-1.125-5.944-0.523z"/>
- <path fill="#4c4c4c" d="m197.177 46.514c-0.066 0.723 1.95 1.208 3.241 1.723 1.293 0.467 3.809 2.287 4.983 3.649 1.155 1.332 3.848 5.172 4.431 4.21 0.563-0.885-1.057-3.476-1.982-4.723-0.888-1.245-2.456-3.269-5.014-4.328-2.146-0.862-5.597-1.109-5.659-0.531z"/>
- <path fill="#525252" d="m197.486 46.591c-0.066 0.693 1.868 1.164 3.104 1.662 1.239 0.452 3.646 2.208 4.769 3.515 1.102 1.281 3.695 4.961 4.254 4.045 0.537-0.845-0.976-3.321-1.913-4.534-0.896-1.21-2.391-3.103-4.838-4.148-2.044-0.851-5.315-1.095-5.376-0.54z"/>
- <path fill="#595959" d="m197.795 46.667c-0.064 0.664 1.784 1.121 2.968 1.602 1.184 0.437 3.481 2.128 4.552 3.381 1.049 1.23 3.542 4.75 4.078 3.88 0.512-0.805-0.897-3.167-1.846-4.346-0.902-1.176-2.325-2.938-4.66-3.969-1.942-0.838-5.031-1.078-5.092-0.548z"/>
- <path fill="#5f5f5f" d="m198.104 46.744c-0.065 0.634 1.701 1.078 2.829 1.541 1.13 0.421 3.318 2.049 4.338 3.248 0.994 1.179 3.388 4.539 3.899 3.715 0.487-0.765-0.815-3.013-1.775-4.157-0.911-1.142-2.261-2.772-4.485-3.79-1.837-0.826-4.746-1.064-4.806-0.557z"/>
- <path fill="#666" d="m198.413 46.821c-0.063 0.604 1.617 1.034 2.691 1.481 1.076 0.406 3.157 1.969 4.123 3.113 0.94 1.128 3.234 4.328 3.724 3.55 0.462-0.725-0.737-2.858-1.707-3.969-0.919-1.108-2.195-2.606-4.309-3.61-1.734-0.814-4.463-1.049-4.522-0.565z"/>
- <path fill="#6c6c6c" d="m198.721 46.897c-0.063 0.574 1.534 0.991 2.554 1.42 1.021 0.391 2.994 1.89 3.908 2.979 0.887 1.077 3.082 4.117 3.548 3.384 0.436-0.685-0.657-2.704-1.64-3.78-0.927-1.074-2.13-2.44-4.132-3.431-1.631-0.8-4.179-1.031-4.238-0.572z"/>
- <path fill="#727272" d="m199.03 46.974c-0.063 0.544 1.451 0.948 2.416 1.36 0.967 0.376 2.831 1.811 3.694 2.846 0.833 1.026 2.928 3.906 3.369 3.219 0.411-0.644-0.576-2.549-1.569-3.592-0.936-1.04-2.064-2.275-3.956-3.251-1.528-0.79-3.896-1.017-3.954-0.582z"/>
- <path fill="#797979" d="m199.339 47.051c-0.062 0.515 1.368 0.904 2.278 1.299 0.913 0.361 2.669 1.731 3.479 2.712 0.779 0.975 2.774 3.695 3.193 3.054 0.386-0.604-0.497-2.396-1.501-3.403-0.942-1.005-1.999-2.11-3.78-3.072-1.424-0.778-3.612-1.002-3.669-0.59z"/>
- <path fill="#7f7f7f" d="m199.648 47.127c-0.063 0.485 1.284 0.861 2.14 1.239 0.859 0.346 2.506 1.652 3.265 2.578 0.726 0.924 2.621 3.484 3.017 2.889 0.361-0.564-0.417-2.241-1.432-3.215-0.951-0.971-1.935-1.944-3.604-2.893-1.323-0.765-3.33-0.986-3.386-0.598z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#995900" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.017 11.592-31.104 19.152-13.968 9.576-18.792 13.824-23.328 18.359-7.056 7.057-13.752 9.432-24.48 9.432s-15.552-2.231-18.863-5.184c-3.313-2.88-6.984-10.225-6.624-21.168 0.288-10.872 3.744-20.809 5.399-37.729 0.721-7.271 0.648-16.271 0.648-24.264 0-10.08 0.144-18.648 2.304-19.943 3.889-2.448 4.752-2.592 9.36-2.592 4.607 0 6.696 0.287 8.208 1.799 1.439 1.44 0.864 4.752 0.359 9.433-0.432 4.681 1.801 6.192 4.032 8.136 2.232 1.872 4.248 4.248 11.305 4.824 7.056 0.504 9.647-0.648 12.96-2.736 3.312-2.088 7.991-5.832 9.72-7.992 1.656-2.088 5.76-9.287 6.552-9.287 0.719 0 5.472-1.656 8.136 2.232z"/>
- <path fill="#9e5e00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.12 11.556-31.26 19.008-13.885 9.371-18.903 13.54-23.521 17.902-6.912 6.74-13.414 9.084-23.915 9.019-10.411-0.047-15.116-2.181-18.414-5.118-3.297-2.867-6.931-9.966-6.613-20.578 0.205-10.851 3.701-20.683 5.256-37.279 0.666-7.379 0.407-16.303 0.335-24.375-0.076-10.068-0.072-18.627 2.084-19.922 3.889-2.444 4.752-2.592 9.36-2.592 4.607 0 6.7 0.291 8.208 1.799 1.491 1.492 0.767 4.887 0.205 9.408-0.63 4.658 1.458 6.486 3.795 8.607 2.34 2.059 4.489 4.471 11.534 5.021 7.232 0.482 10.015-0.832 13.362-3.106 3.303-2.207 7.773-5.903 9.513-8.168 1.641-2.132 5.727-9.386 6.519-9.386 0.719 0 5.472-1.656 8.136 2.232z"/>
- <path fill="#a36400" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.226 11.52-31.414 18.863-13.803 9.166-19.016 13.256-23.717 17.447-6.768 6.422-13.075 8.733-23.35 8.604-10.094-0.094-14.682-2.131-17.964-5.055-3.283-2.852-6.876-9.705-6.603-19.987 0.122-10.828 3.657-20.556 5.112-36.828 0.612-7.487 0.165-16.336 0.021-24.487-0.15-10.058-0.287-18.605 1.865-19.9 3.889-2.44 4.752-2.592 9.36-2.592 4.607 0 6.703 0.295 8.208 1.799 1.541 1.541 0.67 5.02 0.051 9.383-0.828 4.637 1.116 6.781 3.556 9.078 2.448 2.248 4.731 4.695 11.766 5.221 7.409 0.461 10.383-1.016 13.767-3.477 3.29-2.326 7.552-5.977 9.302-8.346 1.627-2.175 5.695-9.482 6.487-9.482 0.72-0.001 5.473-1.657 8.137 2.231z"/>
- <path fill="#a86a00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.329 11.484-31.568 18.72-13.721 8.961-19.127 12.972-23.911 16.989-6.624 6.105-12.737 8.384-22.785 8.189-9.777-0.141-14.245-2.08-17.514-4.99-3.27-2.836-6.822-9.445-6.591-19.396 0.038-10.807 3.613-20.43 4.968-36.378 0.558-7.597-0.076-16.368-0.292-24.599-0.228-10.047-0.504-18.584 1.645-19.879 3.889-2.438 4.752-2.592 9.36-2.592 4.607 0 6.707 0.299 8.208 1.799 1.591 1.593 0.573 5.152-0.104 9.357-1.025 4.615 0.774 7.077 3.319 9.551 2.556 2.434 4.972 4.918 11.995 5.418 7.585 0.439 10.75-1.199 14.17-3.849 3.279-2.444 7.333-6.048 9.093-8.521 1.613-2.219 5.663-9.58 6.455-9.58 0.719 0.001 5.472-1.655 8.136 2.233z"/>
- <path fill="#ad7000" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.434 11.447-31.724 18.576-13.637 8.756-19.238 12.687-24.106 16.531-6.479 5.789-12.397 8.035-22.219 7.776-9.461-0.188-13.809-2.03-17.063-4.925-3.254-2.823-6.769-9.188-6.581-18.807-0.043-10.785 3.571-20.305 4.824-35.928 0.504-7.705-0.316-16.402-0.604-24.711-0.303-10.037-0.72-18.563 1.425-19.857 3.889-2.434 4.752-2.592 9.36-2.592 4.607 0 6.711 0.303 8.208 1.799 1.642 1.643 0.475 5.285-0.259 9.332-1.225 4.594 0.432 7.373 3.082 10.022 2.664 2.621 5.212 5.142 12.225 5.616 7.762 0.418 11.117-1.383 14.573-4.219 3.269-2.563 7.113-6.121 8.885-8.698 1.598-2.261 5.63-9.677 6.422-9.677 0.719 0.002 5.472-1.654 8.136 2.234z"/>
- <path fill="#b27500" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.538 11.412-31.879 18.432-13.554 8.551-19.35 12.402-24.3 16.074-6.336 5.473-12.06 7.686-21.654 7.361-9.144-0.233-13.374-1.979-16.613-4.859-3.24-2.809-6.714-8.928-6.57-18.216-0.126-10.765 3.528-20.179 4.68-35.478 0.45-7.813-0.558-16.435-0.918-24.822-0.378-10.026-0.936-18.541 1.206-19.836 3.889-2.43 4.752-2.592 9.36-2.592 4.607 0 6.714 0.305 8.208 1.799 1.691 1.693 0.378 5.418-0.414 9.307-1.422 4.572 0.09 7.668 2.844 10.494 2.772 2.808 5.454 5.363 12.456 5.814 7.938 0.396 11.484-1.566 14.977-4.591 3.258-2.682 6.894-6.192 8.676-8.874 1.584-2.304 5.598-9.773 6.39-9.773 0.718 0 5.471-1.656 8.135 2.232z"/>
- <path fill="#b77b00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.643 11.376-32.033 18.288-13.472 8.345-19.461 12.118-24.494 15.616-6.192 5.156-11.723 7.338-21.089 6.949-8.827-0.281-12.938-1.93-16.164-4.795-3.226-2.795-6.66-8.67-6.56-17.627-0.209-10.742 3.485-20.052 4.536-35.027 0.396-7.92-0.799-16.467-1.23-24.934-0.454-10.015-1.152-18.52 0.985-19.814 3.889-2.426 4.752-2.592 9.36-2.592 4.607 0 6.718 0.31 8.208 1.799 1.743 1.744 0.281 5.553-0.569 9.281-1.62 4.551-0.252 7.963 2.607 10.967 2.88 2.994 5.694 5.586 12.686 6.012 8.115 0.373 11.852-1.75 15.379-4.961 3.248-2.801 6.676-6.264 8.469-9.051 1.568-2.348 5.564-9.871 6.356-9.871 0.72 0 5.473-1.656 8.137 2.232z"/>
- <path fill="#bc8100" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.747 11.34-32.188 18.145-13.389 8.139-19.574 11.834-24.689 15.159-6.048 4.839-11.383 6.988-20.523 6.534-8.51-0.328-12.503-1.879-15.714-4.73-3.211-2.779-6.606-8.41-6.549-17.035-0.292-10.721 3.441-19.926 4.393-34.578 0.342-8.028-1.041-16.498-1.545-25.045-0.529-10.004-1.368-18.498 0.767-19.793 3.889-2.422 4.752-2.592 9.36-2.592 4.607 0 6.721 0.313 8.208 1.799 1.793 1.793 0.184 5.686-0.723 9.256-1.818 4.529-0.595 8.259 2.367 11.438 2.988 3.184 5.938 5.811 12.917 6.211 8.291 0.352 12.22-1.934 15.783-5.332 3.236-2.92 6.454-6.336 8.258-9.227 1.556-2.391 5.533-9.969 6.325-9.969 0.72-0.001 5.473-1.657 8.137 2.231z"/>
- <path fill="#c18700" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.852 11.304-32.343 18-13.306 7.936-19.685 11.549-24.883 14.703-5.904 4.521-11.045 6.638-19.959 6.119-8.193-0.375-12.067-1.828-15.264-4.666-3.197-2.764-6.553-8.149-6.537-16.444-0.375-10.699 3.397-19.8 4.248-34.128 0.288-8.137-1.282-16.531-1.858-25.156-0.604-9.994-1.584-18.477 0.547-19.771 3.889-2.42 4.752-2.592 9.36-2.592 4.607 0 6.725 0.316 8.208 1.799 1.843 1.845 0.087 5.818-0.878 9.231-2.017 4.507-0.937 8.554 2.131 11.909 3.096 3.369 6.178 6.033 13.146 6.408 8.468 0.33 12.587-2.117 16.187-5.703 3.225-3.038 6.235-6.408 8.049-9.402 1.541-2.436 5.501-10.066 6.293-10.066 0.72-0.001 5.473-1.657 8.137 2.231z"/>
- <path fill="#c68c00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.955 11.268-32.498 17.855-13.223 7.73-19.796 11.266-25.077 14.246-5.761 4.204-10.706 6.289-19.394 5.707-7.877-0.423-11.631-1.779-14.813-4.602-3.183-2.751-6.498-7.891-6.527-15.855-0.457-10.677 3.355-19.674 4.104-33.678 0.234-8.244-1.521-16.563-2.17-25.268-0.681-9.983-1.8-18.455 0.327-19.75 3.889-2.416 4.752-2.592 9.36-2.592 4.607 0 6.729 0.32 8.208 1.799 1.894 1.895-0.011 5.951-1.033 9.207-2.214 4.484-1.278 8.848 1.895 12.379 3.203 3.558 6.418 6.258 13.377 6.607 8.644 0.309 12.952-2.301 16.589-6.074 3.215-3.156 6.016-6.479 7.841-9.58 1.526-2.477 5.468-10.162 6.26-10.162 0.718 0.001 5.471-1.655 8.135 2.233z"/>
- <path fill="#cc9200" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.061 11.232-32.652 17.712-13.141 7.524-19.908 10.979-25.272 13.788-5.616 3.888-10.368 5.939-18.828 5.292-7.56-0.468-11.195-1.728-14.363-4.536-3.168-2.736-6.444-7.632-6.517-15.264-0.54-10.656 3.313-19.549 3.96-33.229 0.181-8.352-1.764-16.596-2.483-25.38-0.757-9.972-2.017-18.433 0.107-19.728 3.889-2.412 4.752-2.592 9.36-2.592 4.607 0 6.731 0.323 8.208 1.799 1.944 1.945-0.108 6.084-1.188 9.181-2.412 4.464-1.62 9.144 1.656 12.853 3.313 3.744 6.66 6.479 13.608 6.803 8.819 0.289 13.319-2.483 16.991-6.443 3.204-3.275 5.797-6.553 7.633-9.756 1.512-2.52 5.436-10.26 6.228-10.26 0.719 0 5.472-1.656 8.136 2.232z"/>
- <path fill="#d19800" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.164 11.195-32.808 17.568-13.057 7.318-20.019 10.695-25.466 13.33-5.473 3.571-10.03 5.592-18.263 4.879-7.243-0.516-10.761-1.678-13.914-4.472-3.153-2.722-6.391-7.372-6.506-14.674-0.623-10.634 3.27-19.422 3.816-32.778 0.126-8.459-2.005-16.627-2.797-25.49-0.832-9.961-2.232-18.412-0.112-19.707 3.889-2.408 4.752-2.592 9.36-2.592 4.607 0 6.736 0.328 8.208 1.799 1.995 1.996-0.205 6.219-1.343 9.156-2.61 4.442-1.962 9.438 1.419 13.323 3.42 3.931 6.9 6.703 13.838 7.002 8.997 0.267 13.687-2.668 17.395-6.815 3.194-3.395 5.577-6.623 7.424-9.932 1.497-2.564 5.403-10.357 6.195-10.357 0.721 0 5.474-1.656 8.138 2.232z"/>
- <path fill="#d69e00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.27 11.16-32.962 17.424-12.975 7.114-20.132 10.412-25.661 12.874-5.327 3.254-9.69 5.242-17.697 4.464-6.927-0.563-10.325-1.627-13.464-4.406-3.14-2.707-6.337-7.113-6.494-14.084-0.706-10.611 3.225-19.295 3.672-32.328 0.072-8.567-2.247-16.66-3.111-25.603-0.907-9.95-2.448-18.39-0.331-19.685 3.889-2.404 4.752-2.592 9.36-2.592 4.607 0 6.739 0.332 8.208 1.799 2.045 2.045-0.302 6.352-1.497 9.131-2.808 4.421-2.304 9.734 1.18 13.795 3.528 4.119 7.144 6.927 14.069 7.199 9.173 0.246 14.055-2.851 17.799-7.185 3.182-3.514 5.356-6.696 7.214-10.108 1.483-2.607 5.371-10.455 6.163-10.455 0.719 0 5.472-1.656 8.136 2.232z"/>
- <path fill="#dba300" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.373 11.124-33.116 17.279-12.893 6.91-20.243 10.127-25.855 12.418-5.184 2.937-9.353 4.892-17.133 4.05-6.609-0.609-9.889-1.577-13.014-4.343-3.125-2.692-6.282-6.854-6.483-13.492-0.789-10.592 3.182-19.17 3.528-31.879 0.018-8.676-2.488-16.692-3.425-25.713-0.982-9.94-2.664-18.369-0.551-19.664 3.889-2.401 4.752-2.592 9.36-2.592 4.607 0 6.743 0.334 8.208 1.799 2.095 2.097-0.399 6.484-1.652 9.105-3.006 4.398-2.646 10.029 0.943 14.268 3.636 4.305 7.384 7.148 14.299 7.397 9.349 0.224 14.422-3.034 18.202-7.558 3.171-3.631 5.137-6.768 7.005-10.284 1.469-2.649 5.339-10.552 6.131-10.552 0.72 0.001 5.473-1.655 8.137 2.233z"/>
- <path fill="#e0a900" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.478 11.088-33.271 17.136-12.81 6.704-20.354 9.843-26.05 11.96-5.04 2.62-9.015 4.543-16.567 3.637-6.293-0.656-9.453-1.527-12.563-4.277-3.11-2.68-6.229-6.596-6.474-12.903-0.871-10.569 3.141-19.044 3.384-31.428-0.035-8.784-2.728-16.726-3.735-25.826-1.06-9.929-2.88-18.347-0.771-19.642 3.889-2.397 4.752-2.592 9.36-2.592 4.607 0 6.747 0.338 8.208 1.799 2.146 2.146-0.497 6.617-1.808 9.08-3.203 4.377-2.987 10.324 0.706 14.738 3.744 4.493 7.624 7.373 14.529 7.596 9.526 0.203 14.789-3.217 18.605-7.926 3.161-3.752 4.918-6.841 6.797-10.463 1.454-2.693 5.306-10.648 6.098-10.648 0.719-0.001 5.472-1.657 8.136 2.231z"/>
- <path fill="#e5af00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.582 11.052-33.427 16.992-12.726 6.498-20.466 9.558-26.244 11.502-4.896 2.304-8.676 4.193-16.002 3.222-5.976-0.702-9.018-1.476-12.114-4.212-3.096-2.664-6.174-6.336-6.462-12.313-0.953-10.547 3.097-18.918 3.24-30.978-0.09-8.892-2.97-16.758-4.05-25.938-1.134-9.918-3.096-18.324-0.99-19.619 3.889-2.395 4.752-2.592 9.36-2.592 4.607 0 6.75 0.342 8.208 1.799 2.196 2.197-0.594 6.75-1.962 9.055-3.402 4.355-3.33 10.619 0.468 15.21 3.852 4.681 7.866 7.597 14.76 7.794 9.702 0.18 15.156-3.402 19.008-8.298 3.15-3.87 4.698-6.912 6.589-10.638 1.439-2.736 5.273-10.746 6.065-10.746 0.72 0 5.473-1.656 8.137 2.232z"/>
- <path fill="#eab500" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.687 11.016-33.582 16.848-12.643 6.293-20.576 9.274-26.438 11.045-4.752 1.987-8.338 3.846-15.438 2.809-5.658-0.75-8.582-1.426-11.664-4.147-3.08-2.649-6.119-6.077-6.45-11.722-1.037-10.526 3.053-18.792 3.096-30.528-0.144-9-3.211-16.79-4.363-26.049-1.21-9.907-3.312-18.304-1.21-19.599 3.889-2.391 4.752-2.592 9.36-2.592 4.607 0 6.754 0.346 8.208 1.799 2.247 2.248-0.691 6.885-2.117 9.029-3.6 4.336-3.672 10.916 0.231 15.682 3.96 4.867 8.106 7.82 14.989 7.992 9.879 0.158 15.523-3.586 19.411-8.668 3.141-3.99 4.479-6.984 6.38-10.814 1.426-2.78 5.241-10.844 6.033-10.844 0.721-0.001 5.474-1.657 8.138 2.231z"/>
- <path fill="#efba00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.791 10.98-33.735 16.703-12.562 6.089-20.69 8.99-26.633 10.589-4.608 1.67-7.999 3.496-14.872 2.394-5.343-0.796-8.147-1.375-11.215-4.082-3.066-2.636-6.065-5.818-6.439-11.132-1.12-10.504 3.009-18.666 2.952-30.077-0.198-9.109-3.453-16.822-4.677-26.162-1.285-9.896-3.528-18.281-1.43-19.576 3.889-2.387 4.752-2.592 9.36-2.592 4.607 0 6.757 0.35 8.208 1.799 2.297 2.297-0.788 7.018-2.271 9.004-3.798 4.314-4.014 11.211-0.008 16.154 4.068 5.055 8.35 8.043 15.221 8.189 10.056 0.137 15.892-3.77 19.815-9.039 3.128-4.107 4.258-7.057 6.17-10.99 1.411-2.824 5.209-10.941 6.001-10.941 0.72-0.001 5.473-1.657 8.137 2.231z"/>
- <path fill="#f4c000" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.896 10.943-33.891 16.561-12.478 5.883-20.801 8.704-26.827 10.131-4.464 1.353-7.661 3.146-14.307 1.979-5.025-0.843-7.711-1.325-10.765-4.019-3.053-2.621-6.012-5.558-6.429-10.541-1.203-10.482 2.966-18.539 2.809-29.627-0.253-9.217-3.694-16.855-4.99-26.272-1.361-9.886-3.744-18.261-1.649-19.556 3.889-2.383 4.752-2.592 9.36-2.592 4.607 0 6.761 0.353 8.208 1.799 2.347 2.349-0.885 7.15-2.426 8.979-3.996 4.291-4.356 11.505-0.245 16.625 4.176 5.241 8.59 8.265 15.451 8.388 10.23 0.115 16.258-3.953 20.218-9.41 3.117-4.227 4.039-7.129 5.961-11.168 1.396-2.865 5.177-11.037 5.969-11.037 0.72 0 5.473-1.656 8.137 2.232z"/>
- <path fill="#f9c600" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.999 10.908-34.046 16.416-12.395 5.678-20.912 8.421-27.021 9.674-4.32 1.036-7.322 2.797-13.741 1.566-4.709-0.891-7.275-1.275-10.314-3.953-3.037-2.607-5.958-5.299-6.419-9.951-1.284-10.461 2.925-18.414 2.664-29.178-0.306-9.324-3.934-16.887-5.302-26.385-1.437-9.875-3.96-18.238-1.869-19.533 3.889-2.379 4.752-2.592 9.36-2.592 4.607 0 6.765 0.356 8.208 1.799 2.397 2.398-0.983 7.283-2.581 8.955-4.194 4.269-4.698 11.799-0.482 17.096 4.284 5.429 8.83 8.488 15.682 8.586 10.407 0.094 16.625-4.137 20.621-9.781 3.106-4.345 3.819-7.199 5.753-11.344 1.382-2.909 5.144-11.135 5.936-11.135 0.718 0 5.471-1.656 8.135 2.232z"/>
- <path fill="#fc0" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-22.104 10.872-34.2 16.271-12.313 5.473-21.024 8.137-27.217 9.217-4.176 0.72-6.983 2.447-13.176 1.151-4.392-0.937-6.84-1.224-9.864-3.888-3.023-2.592-5.903-5.04-6.407-9.359-1.368-10.441 2.88-18.289 2.52-28.729-0.36-9.432-4.176-16.92-5.616-26.496-1.512-9.864-4.176-18.217-2.088-19.512 3.889-2.377 4.752-2.592 9.36-2.592 4.607 0 6.768 0.359 8.208 1.799 2.448 2.449-1.08 7.416-2.736 8.929-4.392 4.248-5.04 12.096-0.72 17.567 4.392 5.617 9.072 8.713 15.912 8.785 10.584 0.071 16.992-4.32 21.023-10.152 3.097-4.465 3.601-7.272 5.544-11.521 1.368-2.952 5.112-11.231 5.904-11.231 0.72 0.001 5.473-1.655 8.137 2.233z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fc0" d="m236.263 275.762c-0.709-0.258-3.932-15.209-2.191-16.239 3.351-1.997 4.253-2.319 8.377-2.319s6.057 0.322 7.346 1.61c2.126 2.127-1.159 6.702-2.448 7.991-3.738 3.673-10.375 9.215-11.084 8.957z"/>
- <path fill="#ffcc02" d="m236.492 275.286c-0.77-0.326-4.102-14.719-2.368-15.742 3.344-1.992 4.278-2.211 8.322-2.211 4.124 0 5.976 0.269 7.282 1.602 2.105 2.136-1.119 6.572-2.398 7.852-3.727 3.663-10.081 8.811-10.838 8.499z"/>
- <path fill="#ffcc05" d="m236.721 274.809c-0.832-0.393-4.273-14.229-2.547-15.247 3.339-1.983 4.306-2.101 8.269-2.101 4.124 0 5.896 0.213 7.217 1.592 2.087 2.146-1.076 6.443-2.346 7.714-3.718 3.653-9.788 8.409-10.593 8.042z"/>
- <path fill="#ffcc07" d="m236.949 274.333c-0.892-0.461-4.443-13.74-2.722-14.75 3.331-1.979 4.33-1.992 8.213-1.992 4.124 0 5.814 0.158 7.151 1.582 2.068 2.156-1.033 6.316-2.294 7.574-3.707 3.644-9.494 8.007-10.348 7.586z"/>
- <path fill="#ffcd0a" d="m237.178 273.855c-0.954-0.528-4.614-13.249-2.9-14.254 3.326-1.972 4.355-1.882 8.158-1.882 4.124 0 5.734 0.104 7.089 1.572 2.048 2.166-0.993 6.187-2.243 7.437-3.699 3.634-9.202 7.605-10.104 7.127z"/>
- <path fill="#ffcd0c" d="m237.407 273.377c-1.015-0.596-4.785-12.758-3.077-13.758 3.319-1.965 4.382-1.771 8.104-1.771 4.124 0 5.653 0.049 7.023 1.563 2.029 2.176-0.951 6.057-2.19 7.299-3.69 3.623-8.91 7.201-9.86 6.667z"/>
- <path fill="#ffcd0f" d="m237.636 272.901c-1.077-0.662-4.956-12.27-3.256-13.261 3.313-1.959 4.408-1.663 8.05-1.663 4.124 0 5.573-0.006 6.959 1.553 2.01 2.186-0.908 5.93-2.14 7.159-3.679 3.614-8.615 6.8-9.613 6.212z"/>
- <path fill="#ffcd11" d="m237.864 272.424c-1.137-0.731-5.126-11.779-3.431-12.766 3.306-1.951 4.433-1.553 7.994-1.553 4.123 0 5.492-0.061 6.895 1.543 1.991 2.193-0.867 5.801-2.089 7.021-3.669 3.606-8.321 6.397-9.369 5.755z"/>
- <path fill="#ffce14" d="m238.093 271.948c-1.197-0.799-5.297-11.289-3.607-12.27 3.299-1.946 4.459-1.443 7.938-1.443 4.124 0 5.412-0.115 6.83 1.533 1.973 2.204-0.824 5.671-2.037 6.883-3.659 3.596-8.028 5.993-9.124 5.297z"/>
- <path fill="#ffce16" d="m238.322 271.471c-1.26-0.867-5.468-10.801-3.786-11.773 3.293-1.939 4.485-1.334 7.884-1.334 4.124 0 5.332-0.171 6.767 1.524 1.953 2.213-0.783 5.542-1.985 6.743-3.651 3.586-7.736 5.591-8.88 4.84z"/>
- <path fill="#ffce19" d="m238.551 270.995c-1.32-0.935-5.639-10.312-3.963-11.277 3.286-1.934 4.511-1.225 7.829-1.225 4.124 0 5.252-0.226 6.702 1.514 1.934 2.224-0.741 5.414-1.934 6.605-3.64 3.576-7.442 5.187-8.634 4.383z"/>
- <path fill="#ffce1c" d="m238.779 270.517c-1.382-1.002-5.809-9.821-4.14-10.781 3.279-1.926 4.535-1.114 7.774-1.114 4.124 0 5.171-0.279 6.637 1.504 1.914 2.233-0.698 5.285-1.882 6.467-3.63 3.566-7.148 4.784-8.389 3.924z"/>
- <path fill="#ffcf1e" d="m239.008 270.04c-1.442-1.068-5.979-9.33-4.316-10.283 3.272-1.922 4.562-1.006 7.72-1.006 4.124 0 5.09-0.334 6.572 1.494 1.895 2.244-0.657 5.156-1.83 6.328-3.622 3.556-6.857 4.383-8.146 3.467z"/>
- <path fill="#ffcf21" d="m239.237 269.563c-1.505-1.137-6.151-8.841-4.495-9.788 3.267-1.914 4.588-0.896 7.666-0.896 4.124 0 5.009-0.389 6.508 1.486 1.875 2.252-0.616 5.025-1.778 6.188-3.613 3.548-6.564 3.981-7.901 3.01z"/>
- <path fill="#ffcf23" d="m239.466 269.086c-1.565-1.205-6.321-8.352-4.672-9.293 3.262-1.906 4.613-0.785 7.61-0.785 4.124 0 4.93-0.444 6.444 1.476 1.855 2.261-0.573 4.897-1.728 6.052-3.601 3.537-6.269 3.575-7.654 2.55z"/>
- <path fill="#ffcf26" d="m239.694 268.61c-1.627-1.273-6.492-7.861-4.849-8.796 3.255-1.901 4.64-0.677 7.556-0.677 4.124 0 4.849-0.499 6.379 1.466 1.837 2.271-0.531 4.769-1.675 5.912-3.593 3.528-5.977 3.174-7.411 2.095z"/>
- <path fill="#ffd028" d="m239.923 268.133c-1.688-1.34-6.663-7.373-5.025-8.301 3.248-1.895 4.665-0.566 7.501-0.566 4.124 0 4.768-0.555 6.314 1.456 1.817 2.28-0.489 4.64-1.624 5.774-3.583 3.519-5.684 2.771-7.166 1.637z"/>
- <path fill="#ffd02b" d="m240.152 267.657c-1.749-1.408-6.834-6.883-5.203-7.805 3.241-1.889 4.69-0.457 7.446-0.457 4.124 0 4.687-0.609 6.25 1.447 1.798 2.289-0.448 4.51-1.573 5.635-3.572 3.509-5.39 2.367-6.92 1.18z"/>
- <path fill="#ffd02d" d="m240.381 267.178c-1.811-1.475-7.005-6.391-5.381-7.307 3.235-1.881 4.717-0.348 7.393-0.348 4.124 0 4.606-0.664 6.185 1.438 1.779 2.299-0.405 4.381-1.521 5.496-3.564 3.501-5.098 1.965-6.676 0.721z"/>
- <path fill="#ffd030" d="m240.609 266.702c-1.871-1.543-7.175-5.902-5.557-6.811 3.228-1.875 4.741-0.238 7.336-0.238 4.124 0 4.526-0.719 6.122 1.428 1.759 2.31-0.364 4.252-1.471 5.357-3.552 3.49-4.803 1.562-6.43 0.264z"/>
- <path fill="#ffd133" d="m240.838 266.225c-1.933-1.611-7.346-5.413-5.734-6.314 3.222-1.869 4.768-0.129 7.281-0.129 4.124 0 4.446-0.773 6.058 1.418 1.74 2.318-0.322 4.123-1.418 5.219-3.545 3.48-4.512 1.16-6.187-0.194z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fc0" d="m302.769 263.374c3.742 5.461-0.062 12.76 2.638 17.117-6.809-6.258-9.938-8.834-19.324 0.367 2.577-3.742 3.129-6.257 4.725-9.814 1.104-2.455 4.354-9.57 5.029-9.57 0.613-0.001 4.724-1.35 6.932 1.9z"/>
- <path fill="#ffcc02" d="m302.73 263.413c3.655 5.334 0.035 12.601 2.578 16.723-6.668-6.098-9.729-8.666-18.908 0.322 2.421-3.527 3.025-6.094 4.605-9.592 1.122-2.462 4.243-9.302 4.951-9.311 0.628-0.008 4.617-1.318 6.774 1.858z"/>
- <path fill="#ffcc05" d="m302.691 263.45c3.568 5.209 0.132 12.441 2.517 16.332-6.526-5.938-9.519-8.5-18.492 0.277 2.268-3.314 2.924-5.934 4.488-9.372 1.141-2.468 4.132-9.032 4.873-9.052 0.641-0.013 4.508-1.284 6.614 1.815z"/>
- <path fill="#ffcc07" d="m302.652 263.487c3.48 5.086 0.229 12.282 2.457 15.939-6.386-5.777-9.311-8.332-18.076 0.232 2.111-3.1 2.819-5.771 4.369-9.15 1.158-2.475 4.021-8.762 4.795-8.791 0.655-0.019 4.399-1.254 6.455 1.77z"/>
- <path fill="#ffcd0a" d="m302.614 263.524c3.393 4.96 0.323 12.123 2.396 15.549-6.245-5.617-9.102-8.164-17.66 0.188 1.955-2.887 2.716-5.611 4.251-8.93 1.176-2.481 3.91-8.494 4.716-8.533 0.67-0.027 4.291-1.219 6.297 1.726z"/>
- <path fill="#ffcd0c" d="m302.575 263.562c3.306 4.835 0.419 11.964 2.335 15.155-6.104-5.457-8.891-7.996-17.244 0.143 1.8-2.673 2.613-5.449 4.133-8.707 1.194-2.488 3.8-8.225 4.638-8.273 0.684-0.036 4.182-1.189 6.138 1.682z"/>
- <path fill="#ffcd0f" d="m302.536 263.599c3.219 4.71 0.517 11.805 2.275 14.765-5.963-5.299-8.683-7.83-16.828 0.098 1.644-2.461 2.51-5.289 4.015-8.486 1.212-2.496 3.688-7.956 4.559-8.016 0.698-0.04 4.075-1.155 5.979 1.639z"/>
- <path fill="#ffcd11" d="m302.497 263.637c3.131 4.585 0.612 11.645 2.216 14.371-5.822-5.137-8.474-7.661-16.413 0.053 1.489-2.245 2.406-5.125 3.896-8.264 1.229-2.504 3.576-7.688 4.479-7.756 0.714-0.046 3.968-1.123 5.822 1.596z"/>
- <path fill="#ffce14" d="m302.458 263.674c3.044 4.459 0.708 11.486 2.154 13.979-5.681-4.978-8.263-7.493-15.996 0.009 1.334-2.033 2.303-4.965 3.779-8.043 1.247-2.511 3.464-7.418 4.4-7.498 0.728-0.052 3.859-1.089 5.663 1.553z"/>
- <path fill="#ffce16" d="m302.42 263.711c2.956 4.336 0.804 11.328 2.094 13.588-5.54-4.817-8.055-7.326-15.58-0.036 1.178-1.819 2.199-4.804 3.659-7.822 1.267-2.517 3.354-7.149 4.323-7.237 0.741-0.061 3.75-1.058 5.504 1.507z"/>
- <path fill="#ffce19" d="m302.381 263.749c2.868 4.211 0.9 11.168 2.033 13.196-5.398-4.657-7.845-7.159-15.164-0.081 1.022-1.605 2.097-4.642 3.542-7.601 1.283-2.524 3.241-6.88 4.244-6.979 0.755-0.067 3.642-1.026 5.345 1.465z"/>
- <path fill="#ffce1c" d="m302.342 263.788c2.78 4.084 0.997 11.008 1.973 12.803-5.258-4.498-7.635-6.991-14.748-0.127 0.867-1.391 1.994-4.479 3.424-7.379 1.302-2.531 3.13-6.61 4.166-6.719 0.768-0.074 3.532-0.992 5.185 1.422z"/>
- <path fill="#ffcf1e" d="m302.302 263.825c2.693 3.959 1.093 10.85 1.913 12.411-5.117-4.338-7.427-6.825-14.333-0.172 0.713-1.177 1.891-4.317 3.307-7.157 1.318-2.537 3.018-6.342 4.086-6.461 0.784-0.08 3.426-0.959 5.027 1.379z"/>
- <path fill="#ffcf21" d="m302.263 263.862c2.606 3.834 1.188 10.689 1.853 12.02-4.976-4.178-7.217-6.657-13.916-0.217 0.556-0.963 1.786-4.156 3.188-6.936 1.337-2.545 2.906-6.072 4.008-6.202 0.797-0.086 3.318-0.927 4.867 1.335z"/>
- <path fill="#ffcf23" d="m302.225 263.899c2.519 3.71 1.285 10.531 1.791 11.628-4.835-4.019-7.008-6.489-13.5-0.262 0.4-0.75 1.684-3.994 3.068-6.714 1.356-2.553 2.797-5.805 3.931-5.943 0.813-0.093 3.209-0.895 4.71 1.291z"/>
- <path fill="#ffcf26" d="m302.186 263.937c2.431 3.584 1.381 10.371 1.73 11.235-4.693-3.857-6.798-6.322-13.084-0.307 0.245-0.535 1.58-3.832 2.951-6.492 1.373-2.56 2.686-5.535 3.852-5.685 0.828-0.1 3.101-0.861 4.551 1.249z"/>
- <path fill="#ffd028" d="m302.147 263.974c2.344 3.46 1.477 10.213 1.671 10.845-4.553-3.699-6.589-6.156-12.668-0.354 0.089-0.321 1.477-3.67 2.832-6.271 1.392-2.565 2.574-5.267 3.772-5.425 0.842-0.104 2.994-0.828 4.393 1.205z"/>
- <path fill="#ffd02b" d="m302.108 264.012c2.257 3.334 1.573 10.053 1.61 10.451-4.412-3.537-6.38-5.987-12.253-0.396-0.064-0.109 1.374-3.51 2.716-6.05 1.408-2.573 2.462-4.997 3.693-5.166 0.856-0.112 2.886-0.796 4.234 1.161z"/>
- <path fill="#ffd02d" d="m302.069 264.049c2.17 3.209 1.67 9.894 1.55 10.061-4.271-3.379-6.17-5.82-11.836-0.441-0.221 0.104 1.271-3.35 2.596-5.83 1.428-2.58 2.352-4.728 3.615-4.906 0.87-0.12 2.777-0.765 4.075 1.116z"/>
- <path fill="#ffd030" d="m302.03 264.086c2.082 3.084 1.767 9.736 1.49 9.668-4.131-3.219-5.961-5.652-11.42-0.486-0.377 0.318 1.167-3.188 2.478-5.607 1.445-2.586 2.239-4.459 3.536-4.647 0.884-0.127 2.669-0.732 3.916 1.072z"/>
- <path fill="#ffd133" d="m301.991 264.124c1.995 2.959 1.862 9.576 1.43 9.277-3.989-3.059-5.752-5.486-11.005-0.531-0.532 0.531 1.064-3.027 2.36-5.387 1.463-2.594 2.128-4.189 3.458-4.389 0.899-0.133 2.561-0.699 3.757 1.03z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fc0" d="m305.862 283.481c5.977 7.848 17.064 16.271 21.024 18.576 2.88 1.656 7.056 3.6 6.983 8.783-0.144 5.904-3.168 7.561-4.823 9.217-3.313 3.313-22.177 10.943-34.2 16.271-12.24 5.4-21.097 8.209-27.217 9.217-4.104 0.647-7.056 2.375-13.176 1.151-4.32-0.864-6.912-1.296-9.864-3.888-2.951-2.52-5.976-5.184-6.407-9.359-1.225-10.369 3.672-16.921 8.424-25.921 3.888-7.2 11.735-8.64 16.632-7.991 17.568 2.375 16.416-8.641 21.24-13.465 4.464-4.463 17.208-8.064 21.384-2.591z"/>
- <path fill="#ffcc02" d="m305.81 283.553c5.962 7.83 17.024 16.234 20.975 18.533 2.873 1.652 7.039 3.592 6.969 8.764-0.145 5.891-3.161 7.542-4.813 9.195-3.304 3.304-22.34 10.992-34.24 16.088-12.259 5.176-20.647 7.873-26.802 8.959-4.077 0.684-7.156 2.394-13.258 1.177-4.304-0.854-6.767-1.231-9.707-3.812-2.939-2.51-5.756-4.961-6.185-9.117-1.211-10.34 3.365-16.657 8.044-25.65 3.89-7.375 11.791-8.434 16.665-7.777 17.514 2.414 16.206-8.959 21.02-13.772 4.452-4.454 17.166-8.047 21.332-2.588z"/>
- <path fill="#ffcc05" d="m305.76 283.627c5.946 7.812 16.982 16.195 20.925 18.488 2.866 1.648 7.022 3.584 6.951 8.743-0.144 5.876-3.153 7.524-4.801 9.173-3.298 3.297-22.506 11.043-34.28 15.907-12.279 4.949-20.201 7.538-26.389 8.699-4.051 0.721-7.256 2.413-13.341 1.202-4.286-0.846-6.619-1.168-9.55-3.733-2.924-2.501-5.536-4.741-5.959-8.877-1.198-10.312 3.058-16.394 7.664-25.379 3.89-7.552 11.845-8.229 16.698-7.563 17.458 2.453 15.995-9.279 20.797-14.08 4.443-4.443 17.127-8.026 21.285-2.58z"/>
- <path fill="#ffcc07" d="m305.707 283.702c5.935 7.791 16.943 16.156 20.876 18.444 2.859 1.644 7.007 3.574 6.935 8.722-0.144 5.862-3.146 7.508-4.79 9.151-3.288 3.289-22.668 11.093-34.319 15.726-12.298 4.723-19.753 7.202-25.974 8.44-4.024 0.756-7.357 2.431-13.423 1.226-4.27-0.836-6.473-1.101-9.394-3.654-2.911-2.492-5.317-4.52-5.735-8.635-1.185-10.285 2.75-16.133 7.284-25.109 3.892-7.727 11.9-8.023 16.731-7.35 17.402 2.494 15.785-9.599 20.575-14.389 4.433-4.432 17.087-8.007 21.234-2.572z"/>
- <path fill="#ffcd0a" d="m305.655 283.774c5.92 7.773 16.904 16.119 20.826 18.4 2.854 1.642 6.99 3.566 6.919 8.703-0.143 5.848-3.138 7.488-4.779 9.129-3.28 3.281-22.832 11.143-34.358 15.543-12.317 4.498-19.307 6.867-25.561 8.182-3.997 0.793-7.457 2.45-13.506 1.251-4.252-0.828-6.325-1.036-9.236-3.577-2.896-2.482-5.096-4.298-5.51-8.393-1.172-10.258 2.443-15.869 6.904-24.84 3.892-7.901 11.955-7.818 16.763-7.135 17.349 2.532 15.576-9.918 20.355-14.697 4.422-4.422 17.046-7.987 21.183-2.566z"/>
- <path fill="#ffcd0c" d="m305.603 283.847c5.906 7.756 16.864 16.081 20.777 18.358 2.846 1.635 6.973 3.557 6.901 8.68-0.142 5.835-3.131 7.472-4.767 9.107-3.273 3.273-22.997 11.193-34.399 15.361-12.337 4.273-18.858 6.533-25.146 7.924-3.971 0.829-7.557 2.469-13.588 1.276-4.234-0.82-6.179-0.972-9.078-3.5-2.884-2.474-4.878-4.076-5.287-8.152-1.158-10.229 2.137-15.606 6.523-24.569 3.895-8.076 12.01-7.611 16.797-6.92 17.293 2.571 15.366-10.236 20.134-15.004 4.412-4.411 17.006-7.969 21.133-2.561z"/>
- <path fill="#ffcd0f" d="m305.552 283.92c5.892 7.736 16.824 16.043 20.728 18.313 2.839 1.634 6.957 3.55 6.886 8.66-0.142 5.821-3.124 7.454-4.756 9.086-3.266 3.267-23.161 11.243-34.438 15.179-12.356 4.047-18.411 6.198-24.733 7.666-3.943 0.865-7.656 2.486-13.67 1.301-4.218-0.812-6.032-0.908-8.922-3.422-2.869-2.465-4.656-3.855-5.063-7.91-1.145-10.203 1.83-15.344 6.145-24.299 3.895-8.252 12.064-7.408 16.83-6.707 17.237 2.61 15.154-10.557 19.912-15.313 4.399-4.399 16.963-7.949 21.081-2.554z"/>
- <path fill="#ffcd11" d="m305.501 283.993c5.877 7.719 16.782 16.004 20.678 18.271 2.833 1.628 6.939 3.54 6.869 8.639-0.143 5.807-3.116 7.436-4.745 9.064-3.257 3.258-23.324 11.293-34.479 14.996-12.375 3.822-17.963 5.863-24.319 7.408-3.917 0.9-7.757 2.504-13.752 1.324-4.2-0.802-5.886-0.842-8.765-3.344-2.856-2.454-4.438-3.633-4.838-7.669-1.132-10.173 1.521-15.081 5.764-24.029 3.896-8.426 12.119-7.2 16.863-6.491 17.183 2.649 14.945-10.875 19.689-15.621 4.391-4.389 16.926-7.93 21.035-2.548z"/>
- <path fill="#ffce14" d="m305.448 284.066c5.863 7.701 16.743 15.966 20.629 18.228 2.826 1.625 6.924 3.531 6.853 8.619-0.142 5.793-3.108 7.418-4.733 9.043-3.25 3.25-23.489 11.342-34.518 14.813-12.396 3.598-17.517 5.529-23.905 7.148-3.891 0.938-7.857 2.524-13.834 1.351-4.185-0.793-5.74-0.776-8.609-3.267-2.841-2.444-4.217-3.412-4.613-7.426-1.118-10.146 1.216-14.818 5.385-23.76 3.896-8.602 12.174-6.996 16.896-6.277 17.128 2.688 14.735-11.195 19.468-15.929 4.378-4.38 16.883-7.911 20.981-2.543z"/>
- <path fill="#ffce16" d="m305.396 284.139c5.85 7.682 16.703 15.928 20.579 18.184 2.82 1.62 6.907 3.523 6.837 8.598-0.141 5.779-3.101 7.4-4.722 9.021-3.242 3.242-23.653 11.393-34.559 14.631-12.414 3.372-17.068 5.194-23.491 6.891-3.862 0.975-7.957 2.543-13.917 1.375-4.167-0.783-5.592-0.713-8.451-3.188-2.827-2.437-3.997-3.19-4.389-7.187-1.105-10.117 0.908-14.555 5.004-23.487 3.898-8.776 12.229-6.79 16.928-6.063 17.074 2.728 14.525-11.515 19.248-16.236 4.37-4.371 16.845-7.894 20.933-2.539z"/>
- <path fill="#ffce19" d="m305.344 284.211c5.836 7.664 16.663 15.891 20.529 18.141 2.813 1.617 6.892 3.516 6.82 8.578-0.14 5.765-3.093 7.382-4.71 8.999-3.235 3.233-23.817 11.442-34.598 14.448-12.434 3.146-16.621 4.859-23.077 6.633-3.837 1.01-8.058 2.561-13.999 1.4-4.15-0.775-5.446-0.648-8.295-3.111-2.814-2.426-3.777-2.969-4.164-6.944-1.094-10.09 0.601-14.293 4.624-23.22 3.898-8.951 12.282-6.584 16.961-5.848 17.019 2.767 14.314-11.834 19.025-16.545 4.361-4.359 16.806-7.872 20.884-2.531z"/>
- <path fill="#ffce1c" d="m305.292 284.286c5.822 7.646 16.623 15.852 20.481 18.096 2.806 1.613 6.874 3.507 6.804 8.558-0.141 5.751-3.086 7.364-4.699 8.978-3.227 3.227-23.981 11.492-34.638 14.267-12.453 2.921-16.173 4.524-22.663 6.374-3.81 1.046-8.158 2.578-14.082 1.424-4.133-0.766-5.299-0.583-8.137-3.033-2.801-2.416-3.558-2.748-3.94-6.703-1.08-10.062 0.293-14.029 4.244-22.947 3.9-9.127 12.338-6.379 16.994-5.635 16.964 2.805 14.105-12.152 18.805-16.853 4.348-4.351 16.763-7.856 20.831-2.526z"/>
- <path fill="#ffcf1e" d="m305.241 284.358c5.808 7.627 16.582 15.814 20.432 18.053 2.799 1.609 6.856 3.498 6.787 8.536-0.141 5.738-3.079 7.347-4.688 8.957-3.219 3.218-24.145 11.541-34.677 14.084-12.473 2.695-15.727 4.188-22.25 6.115-3.783 1.083-8.258 2.599-14.163 1.448-4.116-0.756-5.153-0.518-7.981-2.954-2.786-2.408-3.337-2.526-3.716-6.462-1.066-10.034-0.013-13.766 3.864-22.678 3.901-9.303 12.393-6.172 17.027-5.42 16.908 2.844 13.896-12.473 18.583-17.16 4.338-4.337 16.723-7.835 20.782-2.519z"/>
- <path fill="#ffcf21" d="m305.189 284.431c5.793 7.608 16.542 15.776 20.382 18.009 2.792 1.605 6.84 3.49 6.771 8.516-0.14 5.725-3.071 7.33-4.677 8.936-3.211 3.211-24.309 11.591-34.717 13.902-12.491 2.47-15.278 3.854-21.836 5.856-3.756 1.119-8.357 2.616-14.246 1.474-4.099-0.748-5.006-0.453-7.823-2.877-2.772-2.398-3.118-2.306-3.492-6.22-1.053-10.007-0.319-13.505 3.484-22.407 3.903-9.479 12.448-5.969 17.062-5.207 16.853 2.883 13.684-12.791 18.36-17.469 4.328-4.328 16.683-7.819 20.732-2.513z"/>
- <path fill="#ffcf23" d="m305.137 284.504c5.778 7.59 16.503 15.736 20.332 17.965 2.786 1.602 6.825 3.482 6.755 8.496-0.139 5.709-3.064 7.311-4.665 8.912-3.204 3.203-24.474 11.642-34.759 13.721-12.51 2.244-14.829 3.52-21.421 5.598-3.729 1.155-8.457 2.635-14.327 1.499-4.082-0.739-4.86-0.389-7.667-2.8-2.76-2.389-2.897-2.083-3.268-5.979-1.04-9.979-0.627-13.24 3.104-22.138 3.903-9.653 12.503-5.762 17.093-4.991 16.799 2.922 13.475-13.111 18.141-17.777 4.318-4.316 16.643-7.799 20.682-2.506z"/>
- <path fill="#ffcf26" d="m305.086 284.579c5.765 7.57 16.463 15.697 20.282 17.92 2.779 1.599 6.809 3.474 6.738 8.476-0.139 5.696-3.056 7.293-4.654 8.892-3.194 3.194-24.637 11.69-34.797 13.536-12.529 2.021-14.382 3.185-21.007 5.341-3.703 1.191-8.559 2.652-14.411 1.523-4.065-0.73-4.713-0.324-7.509-2.723-2.745-2.379-2.679-1.861-3.043-5.735-1.027-9.952-0.936-12.979 2.724-21.868 3.905-9.828 12.557-5.557 17.126-4.777 16.744 2.961 13.265-13.431 17.919-18.084 4.307-4.309 16.602-7.783 20.632-2.501z"/>
- <path fill="#ffd028" d="m305.033 284.651c5.752 7.553 16.423 15.66 20.234 17.878 2.771 1.593 6.791 3.464 6.722 8.454-0.139 5.682-3.049 7.275-4.643 8.869-3.188 3.188-24.801 11.74-34.838 13.355-12.548 1.793-13.935 2.85-20.593 5.082-3.676 1.228-8.658 2.67-14.493 1.547-4.048-0.721-4.565-0.258-7.353-2.644-2.731-2.37-2.457-1.64-2.818-5.495-1.014-9.923-1.242-12.716 2.345-21.597 3.905-10.004 12.611-5.351 17.158-4.563 16.689 3 13.055-13.75 17.698-18.393 4.297-4.295 16.562-7.761 20.581-2.493z"/>
- <path fill="#ffd02b" d="m304.982 284.724c5.737 7.534 16.382 15.622 20.184 17.834 2.766 1.59 6.774 3.456 6.705 8.433-0.138 5.67-3.041 7.26-4.631 8.85-3.18 3.179-24.966 11.789-34.877 13.172-12.568 1.568-13.487 2.515-20.179 4.824-3.65 1.263-8.759 2.688-14.575 1.572-4.031-0.713-4.42-0.195-7.196-2.566-2.718-2.361-2.238-1.42-2.594-5.254-1.001-9.896-1.549-12.453 1.964-21.328 3.907-10.178 12.666-5.145 17.192-4.348 16.634 3.039 12.844-14.068 17.476-18.701 4.285-4.286 16.521-7.743 20.531-2.488z"/>
- <path fill="#ffd02d" d="m304.93 284.797c5.723 7.516 16.342 15.584 20.135 17.789 2.758 1.588 6.758 3.449 6.688 8.414-0.138 5.654-3.034 7.24-4.619 8.826-3.173 3.172-25.13 11.84-34.918 12.99-12.587 1.344-13.039 2.18-19.766 4.564-3.622 1.301-8.856 2.709-14.657 1.599-4.014-0.704-4.272-0.13-7.039-2.489-2.702-2.352-2.018-1.197-2.369-5.012-0.987-9.868-1.855-12.189 1.584-21.057 3.908-10.354 12.722-4.94 17.226-4.135 16.578 3.078 12.634-14.389 17.254-19.009 4.275-4.273 16.481-7.721 20.481-2.48z"/>
- <path fill="#ffd030" d="m304.879 284.87c5.709 7.498 16.302 15.547 20.085 17.748 2.752 1.582 6.741 3.438 6.673 8.391-0.139 5.642-3.027 7.224-4.609 8.806-3.164 3.164-25.293 11.89-34.956 12.808-12.606 1.119-12.592 1.844-19.352 4.308-3.596 1.336-8.958 2.726-14.739 1.622-3.997-0.695-4.127-0.065-6.882-2.411-2.69-2.343-1.799-0.976-2.146-4.771-0.974-9.84-2.163-11.928 1.204-20.787 3.91-10.529 12.777-4.734 17.258-3.92 16.524 3.117 12.424-14.707 17.034-19.316 4.263-4.267 16.439-7.706 20.43-2.478z"/>
- <path fill="#ffd133" d="m304.826 284.943c5.695 7.479 16.263 15.509 20.036 17.703 2.745 1.579 6.726 3.431 6.656 8.372-0.137 5.627-3.02 7.205-4.597 8.783-3.157 3.156-25.458 11.939-34.997 12.625-12.626 0.893-12.145 1.51-18.938 4.049-3.569 1.373-9.058 2.745-14.822 1.646-3.979-0.686-3.979 0-6.725-2.332-2.676-2.334-1.578-0.756-1.921-4.529-0.961-9.813-2.471-11.665 0.824-20.516 3.91-10.705 12.83-4.529 17.29-3.707 16.47 3.156 12.215-15.027 16.813-19.625 4.255-4.253 16.401-7.684 20.381-2.469z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#995900" d="m52.494 273.618c-6.479 4.68-22.896 4.248-27.072 9.719-4.104 5.473 0.145 13.393 0.072 28.08 0 6.265-1.08 11.017-1.8 14.832-1.008 4.824-1.656 8.209 0.36 11.664 3.672 6.121 9.575 7.633 43.344 14.688 18.072 3.744 35.136 13.464 46.584 14.399 11.448 0.865 13.896-2.951 20.88-9.144 6.912-6.192 9.144-4.248 8.928-17.856-0.216-13.535-8.928-17.567-18.792-33.191s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-8.208 13.248-14.688 17.929z"/>
- <path fill="#9e5e00" d="m52.598 273.905c-6.397 4.702-22.475 3.788-27.062 9.512-4.154 5.414 0.228 13.276 0.098 27.955-0.025 6.23-1.152 10.881-1.937 14.877-1.037 4.871-1.678 8.201 0.349 11.619 3.787 6.162 9.695 7.123 43.456 14.168 18.061 3.737 34.541 13.307 46.343 14.112 11.186 0.792 13.564-2.829 20.463-8.96 6.896-6.195 9.024-4.277 8.858-17.406-0.075-13.521-8.305-17.349-18.169-32.973s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-8.153 13.479-14.583 18.216z"/>
- <path fill="#a36400" d="m52.703 274.193c-6.314 4.724-22.054 3.327-27.051 9.304-4.204 5.356 0.31 13.16 0.123 27.828-0.051 6.198-1.225 10.748-2.074 14.924-1.065 4.918-1.699 8.194 0.339 11.571 3.902 6.206 9.813 6.617 43.567 13.651 18.05 3.73 33.948 13.146 46.101 13.824 10.923 0.72 13.234-2.707 20.045-8.777 6.885-6.199 8.907-4.305 8.792-16.956 0.064-13.507-7.683-17.129-17.547-32.753s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-8.1 13.709-14.479 18.504z"/>
- <path fill="#a86a00" d="m52.807 274.481c-6.231 4.745-21.633 2.866-27.04 9.094-4.255 5.299 0.393 13.047 0.148 27.702-0.076 6.167-1.297 10.616-2.211 14.972-1.095 4.965-1.721 8.188 0.328 11.524 4.018 6.25 9.932 6.108 43.679 13.134 18.039 3.721 33.354 12.988 45.86 13.535 10.659 0.648 12.902-2.585 19.627-8.593 6.869-6.203 8.788-4.335 8.723-16.507 0.205-13.492-7.06-16.909-16.924-32.533s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-8.045 13.94-14.374 18.792z"/>
- <path fill="#ad7000" d="m52.912 274.769c-6.149 4.767-21.211 2.405-27.029 8.885-4.306 5.242 0.476 12.931 0.173 27.576-0.101 6.136-1.368 10.483-2.347 15.019-1.123 5.012-1.742 8.181 0.316 11.478 4.133 6.293 10.052 5.603 43.791 12.614 18.028 3.716 32.76 12.83 45.619 13.248 10.396 0.576 12.57-2.463 19.21-8.409 6.854-6.206 8.668-4.363 8.653-16.056 0.347-13.479-6.437-16.69-16.301-32.314s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.991 14.169-14.269 19.079z"/>
- <path fill="#b27500" d="m53.016 275.057c-6.066 4.787-20.79 1.943-27.019 8.676-4.355 5.184 0.559 12.816 0.198 27.45-0.126 6.103-1.44 10.351-2.484 15.065-1.151 5.059-1.764 8.172 0.307 11.431 4.248 6.336 10.17 5.094 43.901 12.096 18.019 3.708 32.166 12.672 45.378 12.96 10.135 0.504 12.24-2.34 18.792-8.227 6.841-6.209 8.551-4.391 8.586-15.605 0.486-13.464-5.813-16.47-15.678-32.094s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.937 14.399-14.165 19.368z"/>
- <path fill="#b77b00" d="m53.121 275.344c-5.983 4.811-20.369 1.484-27.008 8.469-4.406 5.126 0.641 12.7 0.224 27.324-0.151 6.068-1.512 10.216-2.621 15.111-1.181 5.105-1.785 8.166 0.295 11.385 4.363 6.379 10.289 4.586 44.014 11.576 18.008 3.701 31.572 12.515 45.137 12.672 9.872 0.433 11.909-2.217 18.375-8.041 6.825-6.215 8.431-4.422 8.518-15.156 0.627-13.45-5.191-16.251-15.056-31.875s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.884 14.631-14.062 19.655z"/>
- <path fill="#bc8100" d="m53.225 275.633c-5.9 4.832-19.948 1.023-26.997 8.259-4.457 5.069 0.724 12.585 0.249 27.198-0.177 6.037-1.584 10.082-2.758 15.158-1.21 5.152-1.808 8.158 0.284 11.338 4.479 6.422 10.407 4.078 44.125 11.059 17.997 3.693 30.979 12.355 44.896 12.384 9.608 0.36 11.578-2.095 17.957-7.858 6.812-6.217 8.313-4.449 8.45-14.707 0.766-13.435-4.569-16.03-14.434-31.654s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.829 14.859-13.956 19.943z"/>
- <path fill="#c18700" d="m53.329 275.92c-5.817 4.854-19.526 0.563-26.985 8.051-4.507 5.011 0.807 12.47 0.273 27.072-0.201 6.004-1.655 9.949-2.894 15.205-1.239 5.199-1.829 8.151 0.273 11.291 4.594 6.465 10.526 3.57 44.236 10.541 17.985 3.686 30.384 12.196 44.655 12.096 9.345 0.287 11.245-1.973 17.539-7.676 6.797-6.221 8.193-4.479 8.381-14.256 0.906-13.42-3.946-15.812-13.811-31.436s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.774 15.094-13.851 20.232z"/>
- <path fill="#c68c00" d="m53.433 276.209c-5.734 4.875-19.104 0.101-26.975 7.84-4.558 4.955 0.89 12.355 0.299 26.947-0.227 5.973-1.728 9.816-3.031 15.252-1.267 5.246-1.851 8.145 0.263 11.244 4.709 6.508 10.646 3.063 44.349 10.022 17.975 3.679 29.79 12.038 44.413 11.808 9.083 0.217 10.915-1.851 17.122-7.492 6.782-6.224 8.074-4.506 8.313-13.806 1.048-13.405-3.323-15.592-13.188-31.216s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.722 15.322-13.749 20.521z"/>
- <path fill="#cc9200" d="m53.538 276.497c-5.651 4.896-18.684-0.359-26.964 7.633-4.607 4.896 0.972 12.24 0.324 26.82-0.252 5.939-1.8 9.684-3.168 15.299-1.296 5.293-1.872 8.137 0.252 11.196 4.824 6.552 10.764 2.556 44.46 9.505 17.964 3.672 29.196 11.879 44.172 11.52 8.82 0.144 10.584-1.729 16.704-7.309 6.768-6.228 7.956-4.535 8.244-13.355 1.188-13.393-2.7-15.372-12.564-30.996s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.668 15.551-13.644 20.807z"/>
- <path fill="#d19800" d="m53.642 276.786c-5.569 4.918-18.263-0.82-26.953 7.424-4.658 4.838 1.055 12.123 0.35 26.693-0.277 5.907-1.872 9.551-3.305 15.346-1.325 5.34-1.894 8.129 0.241 11.15 4.938 6.596 10.883 2.048 44.571 8.984 17.953 3.666 28.602 11.723 43.931 11.232 8.558 0.072 10.253-1.605 16.287-7.123 6.753-6.232 7.837-4.566 8.175-12.906 1.329-13.379-2.077-15.153-11.941-30.777s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.614 15.783-13.54 21.097z"/>
- <path fill="#d69e00" d="m53.747 277.073c-5.486 4.94-17.842-1.281-26.942 7.215-4.709 4.781 1.138 12.01 0.374 26.568-0.302 5.875-1.943 9.417-3.441 15.393-1.354 5.387-1.915 8.123 0.23 11.104 5.055 6.639 11.002 1.541 44.684 8.467 17.942 3.658 28.008 11.563 43.688 10.944 8.296 0 9.923-1.483 15.869-6.941 6.74-6.235 7.72-4.593 8.108-12.456 1.468-13.363-1.455-14.933-11.319-30.557s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.56 16.012-13.435 21.383z"/>
- <path fill="#dba300" d="m53.851 277.361c-5.403 4.962-17.421-1.741-26.932 7.007-4.759 4.723 1.221 11.893 0.399 26.441-0.327 5.843-2.016 9.283-3.578 15.439-1.383 5.434-1.937 8.115 0.22 11.057 5.169 6.682 11.12 1.033 44.795 7.949 17.932 3.649 27.414 11.404 43.448 10.656 8.031-0.072 9.59-1.361 15.451-6.758 6.725-6.238 7.6-4.623 8.039-12.006 1.609-13.35-0.832-14.714-10.696-30.338s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.504 16.245-13.33 21.673z"/>
- <path fill="#e0a900" d="m53.956 277.649c-5.321 4.982-16.999-2.203-26.921 6.797-4.81 4.666 1.303 11.779 0.425 26.316-0.353 5.811-2.088 9.15-3.715 15.486-1.411 5.48-1.959 8.108 0.208 11.01 5.285 6.725 11.239 0.525 44.907 7.431 17.92 3.644 26.819 11.246 43.207 10.368 7.769-0.145 9.259-1.239 15.034-6.574 6.71-6.242 7.479-4.65 7.97-11.557 1.75-13.334-0.209-14.493-10.073-30.117s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.452 16.474-13.226 21.96z"/>
- <path fill="#e5af00" d="m54.06 277.937c-5.238 5.004-16.578-2.664-26.91 6.588-4.86 4.608 1.386 11.664 0.45 26.19-0.378 5.777-2.16 9.018-3.853 15.533-1.439 5.526-1.979 8.101 0.198 10.963 5.4 6.768 11.358 0.018 45.018 6.912 17.91 3.635 26.227 11.088 42.967 10.08 7.506-0.217 8.928-1.117 14.615-6.391 6.696-6.246 7.362-4.68 7.902-11.105 1.89-13.32 0.414-14.274-9.45-29.898s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.397 16.704-13.121 22.248z"/>
- <path fill="#eab500" d="m54.165 278.225c-5.155 5.025-16.157-3.124-26.899 6.38-4.91 4.55 1.469 11.548 0.476 26.063-0.403 5.746-2.232 8.885-3.989 15.58-1.469 5.573-2.002 8.094 0.188 10.916 5.515 6.812 11.477-0.49 45.129 6.394 17.899 3.629 25.633 10.93 42.725 9.792 7.243-0.288 8.598-0.993 14.199-6.206 6.681-6.25 7.243-4.709 7.833-10.656 2.031-13.306 1.037-14.055-8.827-29.679s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.346 16.935-13.019 22.536z"/>
- <path fill="#efba00" d="m54.269 278.513c-5.073 5.048-15.736-3.585-26.889 6.171-4.961 4.492 1.552 11.434 0.5 25.938-0.428 5.713-2.304 8.752-4.125 15.627-1.498 5.621-2.023 8.086 0.176 10.869 5.631 6.854 11.596-0.996 45.241 5.875 17.889 3.623 25.038 10.771 42.483 9.504 6.981-0.359 8.266-0.871 13.781-6.022 6.668-6.253 7.125-4.737 7.766-10.206 2.17-13.291 1.659-13.835-8.205-29.459s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.289 17.164-12.912 22.823z"/>
- <path fill="#f4c000" d="m54.374 278.801c-4.99 5.068-15.314-4.047-26.878 5.962-5.012 4.435 1.634 11.317 0.525 25.812-0.453 5.682-2.376 8.618-4.263 15.674-1.526 5.668-2.045 8.08 0.166 10.822 5.745 6.898 11.714-1.505 45.353 5.357 17.878 3.613 24.444 10.613 42.243 9.216 6.717-0.433 7.934-0.749 13.362-5.839 6.653-6.258 7.007-4.768 7.697-9.756 2.312-13.277 2.282-13.616-7.582-29.24s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.235 17.395-12.807 23.112z"/>
- <path fill="#f9c600" d="m54.477 279.088c-4.906 5.092-14.893-4.506-26.866 5.754-5.062 4.377 1.717 11.203 0.551 25.686-0.479 5.648-2.448 8.485-4.399 15.721-1.555 5.715-2.066 8.072 0.155 10.775 5.86 6.941 11.833-2.012 45.464 4.839 17.867 3.607 23.851 10.454 42.001 8.929 6.455-0.504 7.604-0.627 12.946-5.656 6.638-6.26 6.886-4.795 7.628-9.307 2.452-13.262 2.905-13.396-6.959-29.02s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.182 17.626-12.705 23.399z"/>
- <path fill="#fc0" d="m54.582 279.377c-4.823 5.111-14.472-4.969-26.855 5.543-5.112 4.32 1.8 11.088 0.576 25.561-0.504 5.616-2.521 8.352-4.536 15.768-1.584 5.76-2.088 8.064 0.144 10.729 5.977 6.984 11.952-2.52 45.576 4.32 17.856 3.6 23.256 10.295 41.76 8.64 6.192-0.576 7.272-0.504 12.528-5.472 6.624-6.264 6.768-4.824 7.56-8.856 2.592-13.248 3.528-13.176-6.336-28.8s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.129 17.855-12.601 23.687z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fc0" d="m57.701 285.002c-4.278 4.539-18.28-1.36-24.892 3.631-4.732 3.5 2.398 7.908 1.426 20.873-0.389 4.926-3.824 5.834-2.398 12.64 1.103 5.121 2.27 4.991 4.214 7.325 5.315 6.223 4.084 1.686 34.355 7.777 16.011 3.242 20.938 9.271 37.596 7.779 5.575-0.518 6.612-0.453 11.279-4.926 5.964-5.575 2.917-4.408 3.565-7.973 2.269-11.863 0.453-13.938-8.428-28.004-8.88-14.066-8.102-14.844-13.936-24.113-5.834-9.141-13.872-25.799-20.549-25.93-5.25-0.129-8.297 2.723-11.603 6.094-3.305 3.372-5.768 19.643-10.629 24.827z"/>
- <path fill="#ffcc02" d="m57.995 285.094c-4.461 4.701-18.604-1.196-25.06 3.705-4.701 3.514 2.578 8.05 1.608 20.68-0.4 4.896-3.733 5.877-2.458 12.634 0.986 5.093 2.357 4.938 4.334 7.201 5.686 6.131 4.673 1.826 34.119 7.743 15.918 3.211 20.815 9.215 37.372 7.732 5.541-0.513 6.479-0.463 11.155-4.849 5.865-5.407 2.858-4.287 3.412-8.058 2.066-11.787 0.442-13.981-8.188-27.649-8.83-13.983-8.143-14.698-13.941-23.913-5.8-9.085-13.701-25.805-20.338-25.934-5.219-0.129-8.248 2.705-11.533 6.057-3.287 3.352-5.644 19.505-10.482 24.651z"/>
- <path fill="#ffcc05" d="m58.289 285.185c-4.644 4.866-18.93-1.031-25.229 3.78-4.669 3.527 2.759 8.191 1.792 20.488-0.413 4.866-3.642 5.918-2.519 12.625 0.872 5.066 2.447 4.887 4.455 7.078 6.057 6.04 5.263 1.969 33.883 7.709 15.825 3.18 20.693 9.159 37.148 7.686 5.508-0.506 6.345-0.471 11.03-4.77 5.768-5.24 2.803-4.168 3.26-8.142 1.865-11.716 0.432-14.027-7.949-27.298-8.78-13.899-8.183-14.553-13.948-23.713-5.764-9.03-13.529-25.811-20.126-25.938-5.188-0.129-8.198 2.688-11.465 6.021-3.266 3.331-5.517 19.368-10.332 24.474z"/>
- <path fill="#ffcc07" d="m58.584 285.276c-4.827 5.03-19.255-0.865-25.397 3.855-4.639 3.541 2.938 8.332 1.975 20.295-0.425 4.838-3.551 5.961-2.578 12.619 0.757 5.039 2.536 4.834 4.575 6.955 6.428 5.949 5.852 2.108 33.646 7.674 15.733 3.147 20.571 9.103 36.925 7.639 5.475-0.501 6.211-0.48 10.905-4.693 5.67-5.072 2.745-4.045 3.107-8.224 1.663-11.642 0.42-14.073-7.711-26.946-8.73-13.814-8.223-14.406-13.952-23.511-5.729-8.976-13.358-25.817-19.916-25.944-5.156-0.127-8.148 2.674-11.396 5.984s-5.391 19.229-10.183 24.297z"/>
- <path fill="#ffcd0a" d="m58.878 285.368c-5.01 5.193-19.579-0.701-25.565 3.93-4.607 3.555 3.117 8.475 2.157 20.102-0.437 4.809-3.459 6.004-2.639 12.613 0.643 5.011 2.626 4.781 4.695 6.83 6.799 5.857 6.442 2.25 33.411 7.64 15.641 3.118 20.45 9.048 36.701 7.593 5.44-0.494 6.076-0.488 10.781-4.615 5.57-4.904 2.688-3.926 2.954-8.308 1.462-11.569 0.409-14.118-7.472-26.593-8.68-13.732-8.263-14.262-13.958-23.311-5.695-8.922-13.188-25.824-19.705-25.951-5.125-0.127-8.1 2.658-11.326 5.949-3.227 3.289-5.266 19.091-10.034 24.121z"/>
- <path fill="#ffcd0c" d="m59.173 285.458c-5.193 5.358-19.905-0.535-25.734 4.008-4.577 3.566 3.297 8.613 2.34 19.908-0.449 4.778-3.368 6.045-2.698 12.605 0.526 4.982 2.715 4.729 4.815 6.707 7.17 5.766 7.031 2.391 33.175 7.604 15.549 3.088 20.328 8.994 36.477 7.547 5.408-0.488 5.943-0.498 10.657-4.537 5.472-4.737 2.63-3.805 2.802-8.393 1.261-11.494 0.398-14.162-7.232-26.24-8.63-13.647-8.304-14.117-13.964-23.109-5.66-8.867-13.017-25.829-19.494-25.956-5.094-0.126-8.05 2.642-11.257 5.912-3.21 3.27-5.142 18.955-9.887 23.944z"/>
- <path fill="#ffcd0f" d="m59.467 285.547c-5.376 5.523-20.229-0.369-25.903 4.084-4.545 3.58 3.478 8.756 2.523 19.715-0.461 4.75-3.277 6.088-2.758 12.599 0.411 4.955 2.804 4.677 4.936 6.584 7.541 5.675 7.621 2.532 32.938 7.569 15.456 3.056 20.206 8.938 36.253 7.5 5.375-0.482 5.811-0.506 10.533-4.459 5.374-4.57 2.572-3.686 2.649-8.477 1.058-11.42 0.387-14.209-6.995-25.888-8.58-13.563-8.344-13.972-13.969-22.909-5.626-8.813-12.846-25.834-19.283-25.961-5.063-0.125-8 2.625-11.188 5.877-3.188 3.251-5.015 18.818-9.736 23.766z"/>
- <path fill="#ffcd11" d="m59.76 285.639c-5.559 5.688-20.555-0.205-26.071 4.158-4.515 3.594 3.657 8.896 2.706 19.521-0.473 4.721-3.186 6.131-2.818 12.594 0.297 4.926 2.894 4.623 5.057 6.459 7.911 5.584 8.21 2.674 32.703 7.535 15.362 3.025 20.084 8.883 36.027 7.453 5.342-0.477 5.677-0.515 10.409-4.381 5.275-4.402 2.516-3.564 2.497-8.561 0.855-11.348 0.375-14.254-6.756-25.535-8.53-13.479-8.385-13.825-13.976-22.709-5.59-8.758-12.673-25.842-19.071-25.965-5.031-0.125-7.951 2.608-11.119 5.838-3.168 3.232-4.888 18.684-9.588 23.593z"/>
- <path fill="#ffce14" d="m60.055 285.73c-5.742 5.851-20.88-0.04-26.24 4.233-4.483 3.607 3.837 9.039 2.889 19.33-0.485 4.69-3.095 6.172-2.878 12.584 0.182 4.9 2.982 4.572 5.177 6.338 8.282 5.492 8.8 2.814 32.467 7.498 15.271 2.996 19.962 8.828 35.804 7.408 5.309-0.472 5.543-0.523 10.285-4.304 5.177-4.235 2.458-3.444 2.344-8.644 0.654-11.273 0.364-14.299-6.518-25.184-8.479-13.395-8.425-13.679-13.98-22.507-5.556-8.704-12.502-25.849-18.86-25.972-5-0.123-7.901 2.593-11.05 5.803s-4.765 18.547-9.44 23.417z"/>
- <path fill="#ffce16" d="m60.349 285.821c-5.925 6.016-21.205 0.125-26.408 4.309-4.453 3.621 4.017 9.18 3.07 19.137-0.496 4.662-3.002 6.215-2.938 12.579 0.066 4.872 3.072 4.518 5.298 6.213 8.653 5.401 9.389 2.956 32.23 7.464 15.178 2.964 19.84 8.771 35.58 7.361 5.275-0.465 5.409-0.532 10.159-4.225 5.079-4.068 2.401-3.324 2.192-8.729 0.452-11.2 0.354-14.346-6.279-24.831-8.429-13.312-8.464-13.534-13.985-22.306-5.521-8.65-12.331-25.854-18.649-25.978-4.969-0.123-7.853 2.577-10.98 5.767-3.129 3.19-4.637 18.409-9.29 23.239z"/>
- <path fill="#ffce19" d="m60.643 285.911c-6.107 6.18-21.529 0.291-26.577 4.385-4.421 3.635 4.197 9.322 3.254 18.945-0.508 4.631-2.911 6.256-2.997 12.571-0.049 4.845 3.161 4.465 5.418 6.089 9.023 5.309 9.979 3.098 31.994 7.43 15.085 2.934 19.718 8.717 35.355 7.314 5.242-0.459 5.276-0.541 10.036-4.148 4.98-3.899 2.344-3.203 2.039-8.811 0.25-11.127 0.342-14.391-6.04-24.479-8.38-13.228-8.505-13.389-13.991-22.105-5.486-8.596-12.16-25.859-18.438-25.982-4.938-0.123-7.803 2.561-10.911 5.73-3.109 3.17-4.513 18.272-9.142 23.061z"/>
- <path fill="#ffce1c" d="m60.938 286.002c-6.291 6.344-21.855 0.455-26.746 4.459-4.391 3.648 4.377 9.463 3.437 18.752-0.521 4.603-2.82 6.299-3.058 12.564-0.163 4.817 3.251 4.413 5.539 5.965 9.395 5.219 10.567 3.24 31.758 7.396 14.993 2.903 19.597 8.661 35.132 7.269 5.209-0.453 5.143-0.55 9.912-4.07 4.882-3.732 2.286-3.082 1.887-8.895 0.048-11.053 0.329-14.436-5.802-24.126-8.33-13.144-8.545-13.243-13.997-21.905-5.451-8.541-11.988-25.865-18.228-25.988-4.906-0.121-7.753 2.545-10.843 5.695-3.088 3.149-4.385 18.132-8.991 22.884z"/>
- <path fill="#ffcf1e" d="m61.232 286.092c-6.473 6.51-22.18 0.621-26.914 4.535-4.359 3.662 4.557 9.604 3.619 18.559-0.532 4.574-2.729 6.342-3.117 12.559-0.278 4.789 3.34 4.36 5.659 5.842 9.766 5.127 11.157 3.381 31.521 7.359 14.9 2.872 19.475 8.607 34.908 7.223 5.176-0.447 5.008-0.559 9.787-3.992 4.784-3.565 2.229-2.963 1.735-8.979-0.155-10.98 0.317-14.482-5.564-23.773-8.279-13.061-8.585-13.098-14.002-21.705-5.416-8.485-11.817-25.871-18.017-25.992-4.875-0.121-7.704 2.527-10.773 5.658-3.068 3.128-4.26 17.995-8.842 22.706z"/>
- <path fill="#ffcf21" d="m61.526 286.184c-6.655 6.673-22.505 0.785-27.082 4.611-4.328 3.674 4.736 9.744 3.802 18.365-0.544 4.543-2.638 6.383-3.178 12.551-0.394 4.761 3.43 4.308 5.78 5.718 10.136 5.036 11.746 3.522 31.285 7.325 14.808 2.841 19.353 8.551 34.685 7.176 5.142-0.441 4.875-0.567 9.663-3.914 4.685-3.398 2.171-2.842 1.582-9.063-0.357-10.906 0.307-14.527-5.325-23.422-8.23-12.976-8.625-12.951-14.008-21.503-5.382-8.432-11.646-25.878-17.806-25.999-4.844-0.119-7.654 2.512-10.704 5.622-3.049 3.109-4.134 17.859-8.694 22.533z"/>
- <path fill="#ffcf23" d="m61.821 286.275c-6.839 6.837-22.83 0.95-27.251 4.687-4.298 3.688 4.916 9.886 3.984 18.172-0.557 4.515-2.546 6.426-3.237 12.545-0.509 4.732 3.519 4.255 5.9 5.594 10.507 4.945 12.336 3.663 31.05 7.29 14.715 2.812 19.23 8.496 34.46 7.129 5.108-0.435 4.74-0.575 9.538-3.835 4.587-3.23 2.113-2.723 1.43-9.146-0.559-10.834 0.296-14.572-5.086-23.069-8.18-12.892-8.666-12.806-14.014-21.302-5.347-8.377-11.476-25.885-17.595-26.004-4.813-0.119-7.605 2.496-10.635 5.584-3.029 3.088-4.008 17.722-8.544 22.355z"/>
- <path fill="#ffcf26" d="m62.115 286.366c-7.021 7.002-23.154 1.115-27.42 4.762-4.266 3.701 5.096 10.027 4.168 17.979-0.568 4.486-2.455 6.469-3.297 12.538-0.624 4.706 3.607 4.203 6.021 5.472 10.878 4.852 12.925 3.803 30.813 7.254 14.622 2.78 19.108 8.441 34.236 7.084 5.075-0.43 4.606-0.584 9.413-3.759 4.489-3.063 2.058-2.601 1.277-9.229-0.761-10.76 0.284-14.618-4.848-22.717-8.129-12.809-8.706-12.66-14.019-21.102-5.313-8.322-11.304-25.891-17.384-26.01-4.781-0.118-7.556 2.48-10.566 5.55-3.008 3.068-3.881 17.584-8.394 22.178z"/>
- <path fill="#ffd028" d="m62.409 286.456c-7.204 7.166-23.479 1.281-27.588 4.838-4.235 3.715 5.275 10.168 4.351 17.787-0.58 4.455-2.364 6.51-3.357 12.53-0.738 4.679 3.697 4.149 6.142 5.347 11.249 4.763 13.515 3.946 30.577 7.221 14.529 2.748 18.986 8.386 34.012 7.037 5.043-0.424 4.474-0.594 9.289-3.68 4.392-2.897 2-2.481 1.125-9.314-0.963-10.686 0.273-14.664-4.608-22.364-8.079-12.726-8.746-12.517-14.024-20.901-5.277-8.269-11.133-25.896-17.173-26.015-4.75-0.116-7.506 2.464-10.497 5.513-2.992 3.047-3.759 17.447-8.249 22.001z"/>
- <path fill="#ffd02b" d="m62.704 286.547c-7.388 7.33-23.805 1.445-27.757 4.912-4.204 3.729 5.455 10.311 4.533 17.594-0.593 4.427-2.272 6.553-3.417 12.523-0.854 4.651 3.786 4.098 6.262 5.225 11.619 4.671 14.104 4.087 30.341 7.185 14.438 2.72 18.864 8.33 33.787 6.991 5.01-0.418 4.341-0.604 9.166-3.604 4.292-2.729 1.942-2.359 0.972-9.396-1.163-10.613 0.263-14.709-4.369-22.012-8.03-12.641-8.787-12.371-14.03-20.7-5.243-8.214-10.962-25.903-16.962-26.021-4.719-0.117-7.457 2.447-10.428 5.477-2.972 3.029-3.632 17.313-8.098 21.826z"/>
- <path fill="#ffd02d" d="m62.998 286.638c-7.57 7.493-24.13 1.61-27.925 4.987-4.174 3.742 5.635 10.451 4.716 17.4-0.604 4.398-2.182 6.596-3.478 12.518-0.969 4.623 3.875 4.045 6.382 5.101 11.991 4.579 14.694 4.228 30.105 7.149 14.345 2.688 18.743 8.275 33.563 6.944 4.977-0.411 4.207-0.61 9.042-3.524 4.193-2.562 1.884-2.239 0.819-9.481-1.366-10.538 0.251-14.754-4.133-21.659-7.979-12.557-8.825-12.224-14.034-20.498-5.208-8.16-10.791-25.91-16.751-26.027-4.688-0.114-7.407 2.433-10.358 5.441-2.951 3.01-3.505 17.174-7.948 21.649z"/>
- <path fill="#ffd030" d="m63.292 286.729c-7.753 7.658-24.454 1.775-28.094 5.063-4.142 3.756 5.815 10.594 4.899 17.209-0.616 4.367-2.09 6.638-3.537 12.51-1.084 4.596 3.964 3.992 6.502 4.977 12.362 4.488 15.283 4.369 29.869 7.115 14.252 2.656 18.621 8.22 33.34 6.898 4.943-0.406 4.073-0.621 8.917-3.447 4.095-2.395 1.828-2.119 0.667-9.565-1.568-10.465 0.239-14.8-3.894-21.307-7.929-12.474-8.866-12.078-14.04-20.298-5.173-8.105-10.619-25.916-16.54-26.031-4.656-0.115-7.357 2.415-10.289 5.404-2.932 2.988-3.38 17.036-7.8 21.472z"/>
- <path fill="#ffd133" d="m63.587 286.82c-7.937 7.822-24.78 1.94-28.263 5.138-4.111 3.77 5.995 10.734 5.081 17.016-0.627 4.339-1.998 6.68-3.597 12.504-1.199 4.568 4.054 3.939 6.623 4.854 12.732 4.396 15.873 4.51 29.633 7.08 14.16 2.625 18.499 8.164 33.116 6.852 4.909-0.4 3.939-0.629 8.793-3.369 3.997-2.227 1.77-1.999 0.514-9.648-1.771-10.393 0.228-14.846-3.654-20.955-7.88-12.39-8.907-11.934-14.046-20.098-5.139-8.051-10.448-25.922-16.329-26.037-4.625-0.113-7.309 2.398-10.221 5.368s-3.254 16.897-7.65 21.295z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m88.782 218.681c-0.936 2.088-1.728 20.017 2.952 27 4.68 6.911 3.312 10.872-1.872 5.616-5.4-5.112-8.928-12.816-9-18.145 0-3.096 2.376-15.84 3.313-17.208 1.007-1.44 5.327 1.153 4.607 2.737z"/>
- <path fill="#030303" d="m88.692 219.032c-0.903 2.34-1.656 19.698 3.01 26.668 4.665 6.901 3.186 10.49-1.84 5.356-5.23-4.997-8.607-12.47-8.741-17.787-0.043-3.114 2.236-15.419 3.133-16.791 0.961-1.394 5.126 0.989 4.438 2.554z"/>
- <path fill="#070707" d="m88.602 219.379c-0.871 2.593-1.584 19.383 3.067 26.338 4.65 6.891 3.06 10.109-1.808 5.098-5.062-4.882-8.287-12.125-8.481-17.432-0.087-3.131 2.095-14.998 2.952-16.373 0.915-1.345 4.926 0.828 4.27 2.369z"/>
- <path fill="#0b0b0b" d="m88.512 219.729c-0.839 2.844-1.513 19.066 3.124 26.006 4.638 6.881 2.935 9.729-1.774 4.84-4.893-4.768-7.967-11.779-8.223-17.076-0.129-3.149 1.955-14.576 2.772-15.955 0.868-1.299 4.724 0.665 4.101 2.185z"/>
- <path fill="#0f0f0f" d="m88.422 220.079c-0.806 3.096-1.439 18.748 3.183 25.674 4.623 6.869 2.809 9.347-1.742 4.58-4.724-4.651-7.646-11.434-7.963-16.719-0.173-3.168 1.814-14.154 2.592-15.537 0.819-1.252 4.52 0.504 3.93 2.002z"/>
- <path fill="#131313" d="m88.332 220.426c-0.773 3.349-1.368 18.433 3.24 25.345 4.608 6.858 2.682 8.964-1.71 4.319-4.554-4.535-7.326-11.088-7.704-16.361-0.216-3.186 1.674-13.734 2.412-15.12 0.774-1.206 4.32 0.343 3.762 1.817z"/>
- <path fill="#161616" d="m88.242 220.777c-0.741 3.601-1.296 18.115 3.298 25.013 4.594 6.848 2.556 8.582-1.678 4.061-4.385-4.421-7.006-10.742-7.444-16.006-0.26-3.203 1.533-13.313 2.231-14.702 0.728-1.16 4.118 0.18 3.593 1.634z"/>
- <path fill="#1a1a1a" d="m88.152 221.125c-0.709 3.853-1.224 17.799 3.355 24.682 4.579 6.837 2.43 8.201-1.646 3.802-4.216-4.306-6.686-10.397-7.186-15.649-0.303-3.221 1.394-12.892 2.052-14.285 0.682-1.112 3.918 0.018 3.425 1.45z"/>
- <path fill="#1e1e1e" d="m88.062 221.475c-0.677 4.104-1.152 17.482 3.413 24.35 4.564 6.826 2.304 7.82-1.613 3.543-4.046-4.191-6.365-10.051-6.927-15.293-0.345-3.24 1.253-12.47 1.872-13.867 0.634-1.066 3.716-0.144 3.255 1.267z"/>
- <path fill="#222" d="m87.972 221.825c-0.645 4.355-1.08 17.164 3.47 24.018 4.551 6.816 2.179 7.439-1.58 3.285-3.877-4.076-6.044-9.707-6.667-14.938-0.389-3.258 1.112-12.049 1.691-13.449 0.587-1.019 3.514-0.306 3.086 1.084z"/>
- <path fill="#262626" d="m87.883 222.172c-0.612 4.609-1.009 16.849 3.527 23.688 4.536 6.804 2.052 7.056-1.548 3.024-3.708-3.961-5.724-9.36-6.408-14.58-0.432-3.276 0.973-11.629 1.513-13.032 0.54-0.971 3.311-0.467 2.916 0.9z"/>
- <path fill="#2a2a2a" d="m87.792 222.523c-0.579 4.86-0.936 16.531 3.586 23.356 4.521 6.793 1.926 6.675-1.516 2.765-3.539-3.845-5.403-9.015-6.148-14.224-0.476-3.293 0.831-11.207 1.332-12.614 0.493-0.925 3.11-0.63 2.746 0.717z"/>
- <path fill="#2d2d2d" d="m87.702 222.872c-0.547 5.112-0.864 16.215 3.644 23.025 4.507 6.783 1.8 6.293-1.483 2.506-3.369-3.73-5.083-8.669-5.89-13.867-0.519-3.312 0.691-10.785 1.152-12.197 0.446-0.878 2.908-0.792 2.577 0.533z"/>
- <path fill="#313131" d="m87.612 223.221c-0.515 5.363-0.792 15.898 3.701 22.693 4.492 6.772 1.674 5.912-1.451 2.248-3.2-3.615-4.763-8.324-5.63-13.512-0.563-3.33 0.551-10.363 0.972-11.779 0.399-0.831 2.707-0.953 2.408 0.35z"/>
- <path fill="#353535" d="m87.522 223.57c-0.482 5.616-0.72 15.581 3.758 22.363 4.479 6.761 1.549 5.53-1.418 1.987-3.031-3.5-4.442-7.978-5.371-13.154-0.604-3.348 0.41-9.943 0.792-11.361 0.352-0.785 2.506-1.115 2.239 0.165z"/>
- <path fill="#393939" d="m87.432 223.918c-0.45 5.869-0.648 15.265 3.815 22.033 4.464 6.75 1.422 5.147-1.386 1.728-2.862-3.384-4.122-7.632-5.112-12.798-0.647-3.366 0.271-9.522 0.612-10.944 0.307-0.737 2.305-1.278 2.071-0.019z"/>
- <path fill="#3d3d3d" d="m87.343 224.269c-0.418 6.12-0.576 14.946 3.873 21.7 4.45 6.74 1.296 4.767-1.354 1.469-2.692-3.27-3.802-7.286-4.853-12.441-0.691-3.383 0.129-9.101 0.432-10.527 0.26-0.691 2.103-1.44 1.902-0.201z"/>
- <path fill="#414141" d="m87.252 224.618c-0.385 6.373-0.504 14.631 3.932 21.369 4.436 6.729 1.17 4.385-1.321 1.211-2.523-3.154-3.481-6.941-4.594-12.086-0.734-3.402-0.011-8.68 0.252-10.109 0.212-0.644 1.901-1.602 1.731-0.385z"/>
- <path fill="#444" d="m87.162 224.967c-0.353 6.623-0.432 14.314 3.989 21.037 4.421 6.719 1.044 4.004-1.289 0.951-2.354-3.039-3.161-6.595-4.334-11.729-0.778-3.42-0.151-8.258 0.071-9.691 0.166-0.597 1.7-1.763 1.563-0.568z"/>
- <path fill="#484848" d="m87.072 225.316c-0.32 6.876-0.36 13.997 4.047 20.707 4.406 6.707 0.918 3.622-1.257 0.692-2.186-2.924-2.841-6.25-4.075-11.373-0.82-3.438-0.292-7.838-0.108-9.273 0.119-0.551 1.498-1.926 1.393-0.753z"/>
- <path fill="#4c4c4c" d="m86.982 225.665c-0.288 7.129-0.288 13.68 4.104 20.377 4.393 6.695 0.792 3.24-1.224 0.432s-2.52-5.904-3.816-11.016c-0.863-3.457-0.432-7.416-0.287-8.856 0.071-0.505 1.295-2.089 1.223-0.937z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m88.782 218.681c4.32-9.433 6.696-19.584 12.888-29.448 6.12-9.792 3.672-13.608-0.863-8.64-4.536 4.968-9.504 15.48-9.504 15.48s-5.832 9.216-7.128 19.872c-0.217 1.8 3.887 4.248 4.607 2.736z"/>
- <path fill="#020202" d="m88.968 218.071c4.279-9.5 6.615-19.246 12.586-28.802 5.901-9.488 3.608-13.279-0.764-8.472-4.403 4.847-9.302 15.236-9.368 15.381 0 0-5.637 8.993-6.877 19.239-0.209 1.771 3.72 4.145 4.423 2.654z"/>
- <path fill="#050505" d="m89.152 217.459c4.239-9.566 6.535-18.908 12.284-28.155 5.683-9.183 3.547-12.95-0.663-8.303-4.27 4.725-9.099 14.991-9.231 15.282 0 0-5.442 8.766-6.627 18.605-0.201 1.741 3.554 4.042 4.237 2.571z"/>
- <path fill="#070707" d="m89.338 216.849c4.199-9.634 6.454-18.572 11.981-27.51 5.465-8.878 3.484-12.621-0.563-8.135-4.137 4.605-8.896 14.748-9.096 15.184 0 0-5.247 8.542-6.376 17.972-0.192 1.713 3.387 3.937 4.054 2.489z"/>
- <path fill="#0a0a0a" d="m89.522 216.239c4.159-9.701 6.375-18.234 11.68-26.865 5.247-8.573 3.422-12.292-0.461-7.966-4.005 4.483-8.693 14.503-8.96 15.085 0 0-5.053 8.317-6.126 17.337-0.186 1.684 3.219 3.837 3.867 2.409z"/>
- <path fill="#0c0c0c" d="m89.708 215.627c4.118-9.769 6.294-17.897 11.376-26.218 5.029-8.268 3.36-11.962-0.359-7.797-3.871 4.361-8.49 14.259-8.823 14.985 0 0-4.858 8.093-5.876 16.706-0.179 1.653 3.051 3.731 3.682 2.324z"/>
- <path fill="#0f0f0f" d="m89.893 215.017c4.077-9.836 6.213-17.56 11.073-25.573 4.812-7.963 3.298-11.633-0.259-7.629-3.738 4.241-8.288 14.015-8.688 14.887 0 0-4.663 7.868-5.625 16.072-0.169 1.624 2.886 3.628 3.499 2.243z"/>
- <path fill="#111" d="m90.078 214.407c4.037-9.904 6.133-17.224 10.772-24.928 4.593-7.658 3.234-11.304-0.159-7.46-3.605 4.119-8.085 13.771-8.551 14.788 0 0-4.47 7.645-5.375 15.439-0.162 1.594 2.718 3.524 3.313 2.161z"/>
- <path fill="#141414" d="m90.263 213.795c3.997-9.971 6.052-16.885 10.47-24.281 4.374-7.353 3.172-10.975-0.059-7.291-3.472 3.998-7.882 13.526-8.415 14.689 0 0-4.273 7.418-5.124 14.805-0.154 1.565 2.551 3.421 3.128 2.078z"/>
- <path fill="#161616" d="m90.449 213.184c3.956-10.037 5.972-16.548 10.167-23.635 4.156-7.048 3.11-10.645 0.043-7.123-3.34 3.877-7.68 13.283-8.279 14.591 0 0-4.08 7.194-4.874 14.172-0.147 1.535 2.383 3.317 2.943 1.995z"/>
- <path fill="#191919" d="m90.634 212.573c3.916-10.105 5.892-16.209 9.865-22.989 3.938-6.743 3.047-10.316 0.144-6.954-3.207 3.755-7.477 13.038-8.143 14.491 0 0-3.886 6.969-4.624 13.54-0.139 1.506 2.217 3.213 2.758 1.912z"/>
- <path fill="#1c1c1c" d="m90.819 211.963c3.875-10.174 5.811-15.874 9.563-22.344 3.721-6.438 2.984-9.987 0.244-6.785-3.073 3.634-7.274 12.793-8.007 14.392 0 0-3.69 6.745-4.373 12.905-0.131 1.477 2.049 3.112 2.573 1.832z"/>
- <path fill="#1e1e1e" d="m91.004 211.352c3.836-10.24 5.73-15.536 9.262-21.698 3.501-6.133 2.922-9.658 0.344-6.617-2.94 3.513-7.071 12.55-7.87 14.293 0 0-3.496 6.521-4.123 12.272-0.124 1.447 1.881 3.009 2.387 1.75z"/>
- <path fill="#212121" d="m91.189 210.741c3.795-10.307 5.649-15.198 8.958-21.052 3.284-5.828 2.859-9.328 0.445-6.448-2.808 3.392-6.868 12.305-7.734 14.195 0 0-3.301 6.295-3.872 11.639-0.115 1.418 1.715 2.904 2.203 1.666z"/>
- <path fill="#232323" d="m91.375 210.129c3.754-10.373 5.569-14.86 8.655-20.405 3.066-5.523 2.797-8.999 0.547-6.279-2.675 3.27-6.666 12.061-7.599 14.097 0 0-3.106 6.07-3.622 11.004-0.107 1.388 1.548 2.801 2.019 1.583z"/>
- <path fill="#262626" d="m91.559 209.519c3.714-10.44 5.489-14.523 8.354-19.76 2.847-5.218 2.735-8.67 0.647-6.111-2.542 3.149-6.463 11.817-7.462 13.997 0 0-2.912 5.848-3.372 10.373-0.099 1.357 1.381 2.697 1.833 1.501z"/>
- <path fill="#282828" d="m91.745 208.909c3.674-10.509 5.408-14.187 8.051-19.115 2.629-4.913 2.672-8.341 0.748-5.942-2.409 3.028-6.261 11.573-7.326 13.898 0 0-2.717 5.621-3.121 9.738-0.092 1.33 1.213 2.595 1.648 1.421z"/>
- <path fill="#2b2b2b" d="m91.929 208.297c3.634-10.575 5.328-13.848 7.75-18.468 2.41-4.608 2.609-8.011 0.848-5.773-2.275 2.906-6.058 11.328-7.189 13.799 0 0-2.522 5.397-2.871 9.106-0.084 1.299 1.046 2.491 1.462 1.336z"/>
- <path fill="#2d2d2d" d="m92.115 207.687c3.593-10.643 5.247-13.512 7.447-17.823 2.191-4.303 2.547-7.682 0.949-5.605-2.144 2.786-5.855 11.085-7.055 13.701 0 0-2.327 5.172-2.62 8.473-0.076 1.269 0.881 2.386 1.279 1.254z"/>
- <path fill="#303030" d="m92.301 207.077c3.552-10.71 5.167-13.175 7.145-17.178 1.974-3.998 2.484-7.353 1.05-5.436-2.011 2.664-5.652 10.84-6.918 13.602 0 0-2.133 4.947-2.37 7.839-0.07 1.24 0.712 2.283 1.093 1.173z"/>
- <path fill="#333" d="m92.485 206.465c3.513-10.778 5.087-12.837 6.843-16.531s2.422-7.024 1.15-5.268c-1.877 2.543-5.449 10.596-6.781 13.502 0 0-1.938 4.724-2.12 7.207-0.061 1.211 0.545 2.18 0.908 1.09z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m273.03 225.592c2.088-5.903 1.872-20.951-3.456-30.671-1.872-3.528-3.672-7.632-4.752-7.848-1.152-0.216-3.24 2.088-3.024 2.448 0.288 0.576 10.009 14.256 7.992 32.832-0.144 1.513 2.736 4.608 3.24 3.239z"/>
- <path fill="#030303" d="m272.936 224.831c2.025-5.719 1.753-20.379-3.344-29.663-1.815-3.407-3.535-7.374-4.595-7.59-1.122-0.214-3.125 2.022-2.925 2.367 0.258 0.562 9.605 13.778 7.729 31.753-0.129 1.487 2.647 4.456 3.135 3.133z"/>
- <path fill="#070707" d="m272.841 224.068c1.967-5.532 1.637-19.808-3.228-28.654-1.762-3.286-3.401-7.115-4.44-7.332-1.091-0.211-3.009 1.956-2.824 2.287 0.227 0.548 9.201 13.299 7.466 30.672-0.118 1.463 2.555 4.305 3.026 3.027z"/>
- <path fill="#0b0b0b" d="m272.747 223.305c1.904-5.348 1.518-19.235-3.115-27.645-1.706-3.165-3.265-6.856-4.282-7.073-1.062-0.21-2.896 1.889-2.727 2.206 0.197 0.534 8.799 12.821 7.203 29.592-0.103 1.44 2.466 4.153 2.921 2.92z"/>
- <path fill="#0f0f0f" d="m272.652 222.542c1.843-5.162 1.398-18.662-3.001-26.635-1.65-3.044-3.13-6.598-4.127-6.815-1.03-0.207-2.779 1.823-2.626 2.126 0.167 0.52 8.396 12.341 6.94 28.511-0.09 1.416 2.376 4.001 2.814 2.813z"/>
- <path fill="#131313" d="m272.558 221.779c1.78-4.976 1.279-18.09-2.889-25.626-1.595-2.923-2.994-6.34-3.97-6.557-1-0.205-2.664 1.756-2.527 2.045 0.137 0.506 7.993 11.861 6.679 27.432-0.078 1.392 2.285 3.849 2.707 2.706z"/>
- <path fill="#161616" d="m272.463 221.016c1.721-4.79 1.163-17.518-2.773-24.617-1.539-2.802-2.858-6.081-3.814-6.299-0.969-0.203-2.548 1.691-2.427 1.965 0.106 0.492 7.59 11.383 6.415 26.352-0.065 1.369 2.194 3.697 2.599 2.599z"/>
- <path fill="#1a1a1a" d="m272.369 220.254c1.659-4.605 1.044-16.946-2.66-23.609-1.483-2.681-2.723-5.822-3.658-6.04-0.938-0.201-2.434 1.624-2.326 1.884 0.074 0.478 7.185 10.904 6.15 25.271-0.051 1.344 2.106 3.546 2.494 2.494z"/>
- <path fill="#1e1e1e" d="m272.274 219.491c1.598-4.42 0.926-16.373-2.546-22.6-1.43-2.56-2.587-5.564-3.501-5.782-0.908-0.198-2.319 1.558-2.229 1.804 0.044 0.464 6.782 10.425 5.889 24.19-0.037 1.321 2.016 3.396 2.387 2.388z"/>
- <path fill="#222" d="m272.18 218.728c1.535-4.233 0.807-15.802-2.434-21.59-1.373-2.439-2.452-5.306-3.345-5.524-0.877-0.197-2.203 1.491-2.128 1.723 0.014 0.45 6.379 9.947 5.625 23.111-0.023 1.297 1.927 3.242 2.282 2.28z"/>
- <path fill="#262626" d="m272.085 217.965c1.476-4.049 0.69-15.229-2.318-20.582-1.317-2.317-2.316-5.046-3.188-5.265-0.847-0.194-2.088 1.425-2.029 1.642-0.016 0.436 5.977 9.468 5.362 22.032-0.011 1.272 1.835 3.089 2.173 2.173z"/>
- <path fill="#2a2a2a" d="m271.991 217.202c1.413-3.861 0.571-14.656-2.206-19.572-1.262-2.196-2.18-4.788-3.032-5.007-0.815-0.191-1.973 1.36-1.929 1.562-0.047 0.422 5.573 8.988 5.099 20.951 0.003 1.247 1.746 2.939 2.068 2.066z"/>
- <path fill="#2d2d2d" d="m271.896 216.439c1.353-3.677 0.453-14.084-2.091-18.563-1.207-2.076-2.045-4.529-2.876-4.749-0.786-0.19-1.858 1.293-1.83 1.481-0.077 0.408 5.17 8.51 4.836 19.87 0.017 1.226 1.656 2.789 1.961 1.961z"/>
- <path fill="#313131" d="m271.802 215.676c1.29-3.491 0.334-13.512-1.979-17.553-1.151-1.956-1.909-4.272-2.72-4.493-0.755-0.187-1.742 1.227-1.73 1.401-0.106 0.394 4.768 8.031 4.573 18.791 0.031 1.202 1.567 2.637 1.856 1.854z"/>
- <path fill="#353535" d="m271.707 214.915c1.23-3.307 0.217-12.94-1.864-16.545-1.096-1.834-1.773-4.014-2.563-4.234-0.725-0.185-1.627 1.16-1.631 1.32-0.138 0.38 4.364 7.552 4.311 17.71 0.042 1.176 1.475 2.485 1.747 1.749z"/>
- <path fill="#393939" d="m271.613 214.151c1.168-3.119 0.098-12.367-1.751-15.535-1.04-1.714-1.638-3.755-2.407-3.976-0.693-0.183-1.512 1.094-1.531 1.24-0.168 0.366 3.962 7.074 4.049 16.63 0.055 1.153 1.384 2.332 1.64 1.641z"/>
- <path fill="#3d3d3d" d="m271.518 213.388c1.106-2.935-0.021-11.796-1.638-14.527-0.983-1.592-1.502-3.496-2.25-3.716-0.664-0.181-1.396 1.028-1.432 1.159-0.198 0.352 3.558 6.594 3.785 15.549 0.07 1.13 1.296 2.183 1.535 1.535z"/>
- <path fill="#414141" d="m271.424 212.625c1.047-2.75-0.139-11.223-1.522-13.518-0.93-1.471-1.367-3.238-2.094-3.459-0.635-0.178-1.282 0.962-1.333 1.079-0.229 0.338 3.153 6.114 3.521 14.47 0.083 1.106 1.205 2.03 1.428 1.428z"/>
- <path fill="#444" d="m271.329 211.862c0.985-2.563-0.256-10.65-1.409-12.508-0.874-1.35-1.23-2.979-1.938-3.2-0.604-0.177-1.166 0.895-1.233 0.998-0.259 0.324 2.751 5.636 3.259 13.39 0.096 1.082 1.115 1.876 1.321 1.32z"/>
- <path fill="#484848" d="m271.235 211.099c0.923-2.377-0.375-10.077-1.296-11.499-0.818-1.229-1.097-2.72-1.781-2.942-0.573-0.174-1.052 0.829-1.134 0.918-0.289 0.309 2.348 5.156 2.996 12.309 0.11 1.058 1.025 1.726 1.215 1.214z"/>
- <path fill="#4c4c4c" d="m271.14 210.336c0.861-2.192-0.493-9.506-1.183-10.49-0.763-1.107-0.96-2.463-1.625-2.684-0.542-0.172-0.936 0.762-1.034 0.836-0.319 0.297 1.945 4.68 2.733 11.229 0.124 1.035 0.936 1.576 1.109 1.109z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m264.822 187.073c-10.224-13.968-23.472-18.504-22.104-14.112 0 0 10.152 5.76 19.08 16.56 1.728 2.088 4.608-0.288 3.024-2.448z"/>
- <path fill="#030303" d="m264.372 186.687c-9.924-13.495-22.894-17.912-21.539-13.7 0.018 0.012 9.901 5.614 18.609 16.071 1.678 2.016 4.467-0.285 2.93-2.371z"/>
- <path fill="#070707" d="m263.922 186.3c-9.624-13.022-22.316-17.319-20.975-13.287 0.036 0.023 9.652 5.467 18.139 15.582 1.628 1.943 4.325-0.283 2.836-2.295z"/>
- <path fill="#0b0b0b" d="m263.472 185.913c-9.324-12.549-21.739-16.726-20.41-12.874 0.053 0.034 9.4 5.32 17.668 15.093 1.578 1.871 4.183-0.28 2.742-2.219z"/>
- <path fill="#0f0f0f" d="m263.022 185.527c-9.024-12.077-21.162-16.134-19.847-12.462 0.071 0.045 9.151 5.174 17.198 14.604 1.529 1.798 4.043-0.278 2.649-2.142z"/>
- <path fill="#131313" d="m262.571 185.14c-8.723-11.603-20.583-15.541-19.28-12.049 0.088 0.056 8.901 5.027 16.728 14.114 1.477 1.726 3.899-0.275 2.552-2.065z"/>
- <path fill="#161616" d="m262.121 184.753c-8.423-11.13-20.006-14.948-18.716-11.636 0.106 0.067 8.651 4.88 16.257 13.625 1.428 1.654 3.759-0.272 2.459-1.989z"/>
- <path fill="#1a1a1a" d="m261.671 184.367c-8.124-10.658-19.428-14.356-18.15-11.224 0.124 0.078 8.399 4.734 15.785 13.136 1.378 1.581 3.617-0.27 2.365-1.912z"/>
- <path fill="#1e1e1e" d="m261.221 183.98c-7.824-10.185-18.851-13.763-17.588-10.811 0.143 0.089 8.151 4.587 15.315 12.647 1.33 1.508 3.477-0.267 2.273-1.836z"/>
- <path fill="#222" d="m260.771 183.593c-7.524-9.711-18.273-13.17-17.022-10.398 0.159 0.1 7.9 4.44 14.844 12.158 1.279 1.436 3.335-0.265 2.178-1.76z"/>
- <path fill="#262626" d="m260.321 183.206c-7.224-9.238-17.695-12.578-16.458-9.985 0.177 0.111 7.65 4.293 14.374 11.668 1.229 1.364 3.193-0.262 2.084-1.683z"/>
- <path fill="#2a2a2a" d="m259.871 182.82c-6.924-8.766-17.118-11.986-15.893-9.573 0.193 0.122 7.398 4.147 13.902 11.179 1.18 1.291 3.053-0.259 1.991-1.606z"/>
- <path fill="#2d2d2d" d="m259.42 182.433c-6.623-8.293-16.539-11.393-15.328-9.16 0.214 0.133 7.15 4 13.434 10.69 1.128 1.219 2.909-0.257 1.894-1.53z"/>
- <path fill="#313131" d="m258.97 182.046c-6.323-7.819-15.963-10.8-14.764-8.747 0.23 0.144 6.899 3.853 12.962 10.201 1.08 1.146 2.769-0.254 1.802-1.454z"/>
- <path fill="#353535" d="m258.52 181.66c-6.023-7.347-15.384-10.208-14.199-8.335 0.248 0.155 6.649 3.707 12.492 9.712 1.028 1.073 2.627-0.252 1.707-1.377z"/>
- <path fill="#393939" d="m258.07 181.273c-5.723-6.874-14.807-9.615-13.634-7.922 0.265 0.166 6.398 3.56 12.021 9.222 0.978 1.002 2.485-0.249 1.613-1.3z"/>
- <path fill="#3d3d3d" d="m257.62 180.886c-5.423-6.401-14.229-9.021-13.07-7.509 0.283 0.177 6.149 3.413 11.552 8.733 0.927 0.929 2.343-0.246 1.518-1.224z"/>
- <path fill="#414141" d="m257.17 180.5c-5.124-5.928-13.65-8.43-12.505-7.097 0.301 0.188 5.898 3.267 11.079 8.244 0.879 0.856 2.203-0.244 1.426-1.147z"/>
- <path fill="#444" d="m256.719 180.113c-4.823-5.455-13.073-7.837-11.94-6.684 0.319 0.199 5.649 3.12 10.609 7.755 0.829 0.784 2.061-0.241 1.331-1.071z"/>
- <path fill="#484848" d="m256.269 179.726c-4.523-4.982-12.495-7.244-11.375-6.271 0.336 0.21 5.397 2.973 10.138 7.266 0.779 0.711 1.92-0.239 1.237-0.995z"/>
- <path fill="#4c4c4c" d="m255.819 179.339c-4.223-4.509-11.918-6.652-10.812-5.859 0.354 0.222 5.148 2.827 9.668 6.777 0.73 0.639 1.779-0.236 1.144-0.918z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m273.03 225.592c0.144 6.265-5.76 22.248-7.992 21.673-2.52-0.576 0.504-5.257 2.809-13.177 0.936-3.312 1.655-11.447 1.943-11.735 0.936-0.936 3.24 1.728 3.24 3.239z"/>
- <path fill="#050505" d="m272.846 226.116c0.103 6.082-5.638 21.594-7.797 21.018-2.422-0.567 0.548-5.146 2.814-12.928 0.899-3.178 1.595-10.947 1.887-11.25 0.914-0.927 3.147 1.527 3.096 3.16z"/>
- <path fill="#0a0a0a" d="m272.662 226.637c0.063 5.902-5.514 20.939-7.601 20.363-2.323-0.558 0.592-5.035 2.82-12.681 0.861-3.041 1.534-10.446 1.83-10.761 0.89-0.917 3.054 1.327 2.951 3.079z"/>
- <path fill="#0f0f0f" d="m272.478 227.159c0.021 5.721-5.392 20.284-7.405 19.711-2.224-0.55 0.635-4.927 2.827-12.434 0.824-2.907 1.473-9.945 1.773-10.273 0.866-0.911 2.959 1.125 2.805 2.996z"/>
- <path fill="#141414" d="m272.294 227.68c-0.02 5.539-5.268 19.63-7.21 19.057-2.125-0.541 0.68-4.816 2.835-12.186 0.786-2.771 1.412-9.445 1.717-9.786 0.84-0.901 2.863 0.924 2.658 2.915z"/>
- <path fill="#191919" d="m272.11 228.202c-0.063 5.359-5.146 18.977-7.014 18.403-2.027-0.532 0.722-4.706 2.841-11.938 0.748-2.637 1.351-8.944 1.659-9.299 0.818-0.893 2.77 0.722 2.514 2.834z"/>
- <path fill="#1e1e1e" d="m271.926 228.723c-0.103 5.179-5.021 18.322-6.818 17.75-1.928-0.523 0.766-4.596 2.848-11.691 0.711-2.5 1.29-8.443 1.603-8.811 0.792-0.885 2.674 0.522 2.367 2.752z"/>
- <path fill="#232323" d="m271.742 229.245c-0.144 4.998-4.9 17.668-6.623 17.096-1.83-0.514 0.811-4.485 2.854-11.442 0.673-2.366 1.229-7.944 1.545-8.325 0.771-0.876 2.583 0.32 2.224 2.671z"/>
- <path fill="#282828" d="m271.558 229.766c-0.186 4.816-4.777 17.013-6.428 16.443-1.731-0.506 0.854-4.377 2.86-11.196 0.636-2.231 1.168-7.443 1.488-7.837 0.749-0.866 2.49 0.119 2.08 2.59z"/>
- <path fill="#2d2d2d" d="m271.374 230.288c-0.226 4.637-4.653 16.359-6.231 15.789-1.632-0.496 0.896-4.266 2.866-10.947 0.6-2.098 1.107-6.943 1.433-7.351 0.722-0.859 2.393-0.081 1.932 2.509z"/>
- <path fill="#333" d="m271.19 230.809c-0.268 4.456-4.531 15.705-6.036 15.136-1.534-0.489 0.94-4.155 2.873-10.7 0.561-1.961 1.046-6.443 1.375-6.863 0.7-0.848 2.3-0.282 1.788 2.427z"/>
- <path fill="#383838" d="m271.006 231.331c-0.308 4.275-4.407 15.051-5.841 14.482-1.435-0.48 0.984-4.046 2.88-10.453 0.524-1.826 0.985-5.941 1.318-6.375 0.676-0.84 2.206-0.483 1.643 2.346z"/>
- <path fill="#3d3d3d" d="m270.822 231.853c-0.35 4.093-4.285 14.396-5.645 13.828-1.338-0.472 1.027-3.937 2.886-10.206 0.485-1.691 0.924-5.441 1.261-5.887 0.653-0.832 2.113-0.684 1.498 2.265z"/>
- <path fill="#424242" d="m270.638 232.374c-0.392 3.914-4.162 13.742-5.45 13.176-1.238-0.463 1.072-3.826 2.893-9.959 0.449-1.555 0.863-4.94 1.204-5.399 0.629-0.824 2.019-0.886 1.353 2.182z"/>
- <path fill="#474747" d="m270.454 232.896c-0.432 3.731-4.039 13.087-5.254 12.521-1.14-0.453 1.115-3.715 2.9-9.711 0.411-1.42 0.802-4.439 1.146-4.912 0.606-0.815 1.925-1.086 1.208 2.102z"/>
- <path fill="#4c4c4c" d="m270.27 233.417c-0.474 3.553-3.916 12.434-5.06 11.869-1.041-0.445 1.159-3.606 2.907-9.463 0.373-1.287 0.741-3.941 1.089-4.427 0.583-0.806 1.832-1.287 1.064 2.021z"/>
- <path fill="#515151" d="m270.086 233.939c-0.514 3.37-3.793 11.778-4.862 11.214-0.942-0.436 1.201-3.496 2.913-9.216 0.336-1.151 0.68-3.438 1.032-3.938 0.558-0.797 1.736-1.489 0.917 1.94z"/>
- <path fill="#565656" d="m269.902 234.461c-0.555 3.188-3.671 11.123-4.667 10.56-0.844-0.429 1.246-3.386 2.919-8.968 0.298-1.016 0.619-2.939 0.976-3.451 0.535-0.788 1.643-1.689 0.772 1.859z"/>
- <path fill="#5b5b5b" d="m269.718 234.982c-0.597 3.009-3.548 10.47-4.472 9.907-0.745-0.42 1.29-3.275 2.926-8.721 0.262-0.881 0.559-2.438 0.919-2.963 0.511-0.781 1.549-1.89 0.627 1.777z"/>
- <path fill="#606060" d="m269.534 235.504c-0.638 2.828-3.425 9.814-4.276 9.252-0.646-0.409 1.333-3.166 2.933-8.473 0.224-0.746 0.497-1.938 0.862-2.476 0.487-0.769 1.454-2.09 0.481 1.697z"/>
- <path fill="#666" d="m269.35 236.025c-0.68 2.647-3.303 9.161-4.081 8.599-0.548-0.4 1.377-3.056 2.938-8.225 0.187-0.611 0.437-1.438 0.806-1.988 0.464-0.763 1.361-2.293 0.337 1.614z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m251.07 187.865c-1.537 1.622-2.903 9.991 0.938 12.893 3.844 2.818 10.59-2.391 10.59-5.379-0.086-6.746-9.991-9.222-11.528-7.514z"/>
- <path fill="#010101" d="m251.207 188.006c-1.559 1.611-2.876 9.823 0.857 12.667 3.731 2.764 10.349-2.273 10.384-5.279-0.047-6.576-9.681-9.083-11.241-7.388z"/>
- <path fill="#030303" d="m251.344 188.146c-1.582 1.601-2.85 9.653 0.774 12.438 3.62 2.709 10.109-2.154 10.178-5.177-0.007-6.404-9.37-8.943-10.952-7.261z"/>
- <path fill="#050505" d="m251.481 188.287c-1.604 1.589-2.823 9.484 0.691 12.211 3.511 2.653 9.869-2.037 9.975-5.078 0.031-6.232-9.061-8.802-10.666-7.133z"/>
- <path fill="#070707" d="m251.617 188.427c-1.626 1.579-2.795 9.316 0.611 11.984 3.397 2.6 9.629-1.918 9.768-4.976 0.071-6.062-8.751-8.664-10.379-7.008z"/>
- <path fill="#090909" d="m251.754 188.567c-1.648 1.568-2.768 9.146 0.529 11.758 3.287 2.543 9.389-1.802 9.563-4.875 0.109-5.892-8.441-8.525-10.092-6.883z"/>
- <path fill="#0b0b0b" d="m251.891 188.708c-1.671 1.557-2.741 8.978 0.445 11.529 3.177 2.489 9.15-1.683 9.358-4.774 0.15-5.72-8.13-8.385-9.803-6.755z"/>
- <path fill="#0d0d0d" d="m252.028 188.848c-1.694 1.546-2.715 8.809 0.364 11.302 3.064 2.435 8.908-1.565 9.152-4.673 0.189-5.549-7.82-8.245-9.516-6.629z"/>
- <path fill="#0f0f0f" d="m252.165 188.989c-1.716 1.535-2.688 8.64 0.282 11.074 2.953 2.38 8.669-1.447 8.948-4.572 0.226-5.378-7.512-8.106-9.23-6.502z"/>
- <path fill="#111" d="m252.301 189.129c-1.737 1.524-2.659 8.471 0.2 10.847 2.844 2.325 8.431-1.33 8.743-4.471 0.266-5.207-7.201-7.966-8.943-6.376z"/>
- <path fill="#131313" d="m252.438 189.269c-1.76 1.514-2.633 8.304 0.118 10.619 2.73 2.271 8.189-1.212 8.538-4.369 0.305-5.036-6.892-7.827-8.656-6.25z"/>
- <path fill="#151515" d="m252.575 189.41c-1.783 1.503-2.606 8.133 0.036 10.391 2.62 2.216 7.949-1.094 8.332-4.268 0.344-4.865-6.581-7.687-8.368-6.123z"/>
- <path fill="#161616" d="m252.712 189.55c-1.805 1.492-2.58 7.965-0.046 10.164 2.508 2.162 7.709-0.975 8.127-4.167 0.383-4.694-6.272-7.548-8.081-5.997z"/>
- <path fill="#181818" d="m252.849 189.691c-1.828 1.481-2.554 7.796-0.129 9.937 2.397 2.105 7.47-0.857 7.922-4.066 0.423-4.524-5.961-7.409-7.793-5.871z"/>
- <path fill="#1a1a1a" d="m252.985 189.831c-1.85 1.47-2.525 7.626-0.21 9.708 2.286 2.053 7.229-0.74 7.717-3.964 0.461-4.352-5.652-7.269-7.507-5.744z"/>
- <path fill="#1c1c1c" d="m253.122 189.971c-1.872 1.46-2.499 7.459-0.292 9.482 2.175 1.996 6.989-0.623 7.511-3.865 0.501-4.18-5.341-7.128-7.219-5.617z"/>
- <path fill="#1e1e1e" d="m253.259 190.112c-1.895 1.448-2.472 7.289-0.375 9.254 2.064 1.942 6.75-0.504 7.308-3.763 0.539-4.01-5.033-6.99-6.933-5.491z"/>
- <path fill="#202020" d="m253.396 190.252c-1.917 1.438-2.445 7.122-0.457 9.027 1.953 1.888 6.51-0.386 7.102-3.662 0.578-3.839-4.722-6.85-6.645-5.365z"/>
- <path fill="#222" d="m253.533 190.393c-1.939 1.426-2.418 6.951-0.539 8.799 1.841 1.832 6.271-0.268 6.896-3.561 0.618-3.668-4.412-6.711-6.357-5.238z"/>
- <path fill="#242424" d="m253.669 190.533c-1.961 1.416-2.391 6.783-0.621 8.572 1.731 1.776 6.03-0.149 6.692-3.46 0.657-3.497-4.102-6.571-6.071-5.112z"/>
- <path fill="#262626" d="m253.806 190.673c-1.984 1.405-2.364 6.615-0.703 8.344 1.619 1.724 5.79-0.032 6.485-3.358 0.697-3.326-3.791-6.432-5.782-4.986z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m250.71 256.698c1.513 1.512 2.809-2.232 4.32-3.457 1.512-1.224 3.96-3.888 8.856-3.888s4.535-0.144 4.319-2.017c-0.144-1.799-1.584-1.655-5.903-1.008-4.32 0.576-7.2 2.809-8.929 4.824-1.654 1.945-3.527 4.681-2.663 5.546z"/>
- <path fill="#050505" d="m251.043 256.331c1.459 1.449 2.703-2.121 4.205-3.308 1.501-1.187 3.931-3.731 8.64-3.731 4.71-0.002 4.415-0.129 4.209-1.94-0.139-1.743-1.543-1.593-5.749-0.979-4.207 0.543-7.029 2.703-8.712 4.648-1.616 1.877-3.438 4.474-2.593 5.31z"/>
- <path fill="#0a0a0a" d="m251.376 255.961c1.406 1.389 2.6-2.008 4.089-3.156 1.491-1.148 3.901-3.576 8.425-3.577 4.521-0.001 4.293-0.11 4.096-1.862-0.132-1.688-1.501-1.531-5.594-0.951-4.093 0.51-6.857 2.596-8.495 4.471-1.575 1.812-3.348 4.271-2.521 5.075z"/>
- <path fill="#0f0f0f" d="m251.709 255.594c1.354 1.326 2.494-1.895 3.975-3.008 1.479-1.111 3.871-3.42 8.207-3.422s4.171-0.094 3.984-1.785c-0.126-1.631-1.46-1.467-5.438-0.924-3.979 0.479-6.687 2.492-8.28 4.297-1.533 1.747-3.257 4.066-2.448 4.842z"/>
- <path fill="#141414" d="m252.042 255.226c1.302 1.265 2.39-1.783 3.858-2.856 1.47-1.076 3.842-3.266 7.991-3.268s4.05-0.077 3.873-1.709c-0.119-1.575-1.419-1.404-5.284-0.895-3.865 0.444-6.515 2.385-8.063 4.121-1.49 1.678-3.165 3.861-2.375 4.607z"/>
- <path fill="#191919" d="m252.374 254.859c1.249 1.202 2.285-1.671 3.744-2.708 1.458-1.037 3.813-3.109 7.774-3.111 3.963-0.004 3.929-0.061 3.761-1.633-0.113-1.519-1.377-1.341-5.128-0.867-3.751 0.414-6.344 2.279-7.847 3.945-1.449 1.613-3.075 3.656-2.304 4.374z"/>
- <path fill="#1e1e1e" d="m252.707 254.491c1.196 1.141 2.182-1.559 3.628-2.558 1.448-1 3.783-2.954 7.56-2.957 3.775-0.003 3.806-0.043 3.648-1.556-0.106-1.461-1.336-1.277-4.974-0.838-3.637 0.379-6.172 2.174-7.63 3.77-1.408 1.546-2.984 3.451-2.232 4.139z"/>
- <path fill="#232323" d="m253.04 254.124c1.144 1.078 2.076-1.447 3.514-2.41 1.437-0.961 3.753-2.797 7.342-2.799 3.589-0.004 3.685-0.027 3.537-1.48-0.101-1.405-1.294-1.215-4.818-0.811-3.524 0.349-6.001 2.068-7.415 3.594-1.367 1.48-2.894 3.245-2.16 3.906z"/>
- <path fill="#282828" d="m253.373 253.754c1.09 1.018 1.972-1.334 3.398-2.258 1.426-0.926 3.723-2.642 7.125-2.646 3.402-0.005 3.563-0.011 3.426-1.403-0.095-1.349-1.253-1.15-4.664-0.781-3.409 0.314-5.829 1.961-7.198 3.418-1.325 1.415-2.803 3.041-2.087 3.67z"/>
- <path fill="#2d2d2d" d="m253.706 253.388c1.038 0.954 1.866-1.222 3.282-2.11 1.416-0.887 3.694-2.486 6.909-2.49 3.217-0.004 3.441 0.008 3.313-1.326-0.088-1.293-1.212-1.088-4.508-0.754-3.296 0.283-5.658 1.857-6.981 3.244-1.284 1.345-2.712 2.836-2.015 3.436z"/>
- <path fill="#333" d="m254.039 253.02c0.985 0.893 1.762-1.109 3.167-1.96s3.664-2.33 6.693-2.335c3.029-0.006 3.32 0.023 3.202-1.249-0.082-1.237-1.171-1.024-4.354-0.726-3.182 0.25-5.485 1.75-6.765 3.066-1.243 1.282-2.622 2.634-1.943 3.204z"/>
- <path fill="#383838" d="m254.372 252.652c0.933 0.831 1.657-0.998 3.051-1.81 1.396-0.813 3.636-2.174 6.478-2.18 2.843-0.006 3.199 0.039 3.09-1.172-0.076-1.181-1.129-0.963-4.198-0.697-3.068 0.217-5.314 1.644-6.55 2.891-1.202 1.214-2.531 2.427-1.871 2.968z"/>
- <path fill="#3d3d3d" d="m254.704 252.284c0.88 0.771 1.553-0.885 2.938-1.66 1.383-0.775 3.604-2.019 6.26-2.024 2.656-0.007 3.078 0.058 2.979-1.095-0.069-1.125-1.088-0.899-4.044-0.67-2.954 0.185-5.144 1.539-6.333 2.715-1.16 1.148-2.441 2.222-1.8 2.734z"/>
- <path fill="#424242" d="m255.037 251.917c0.827 0.707 1.448-0.773 2.821-1.51 1.373-0.738 3.576-1.863 6.044-1.871 2.47-0.007 2.956 0.074 2.867-1.018-0.063-1.068-1.046-0.836-3.889-0.641-2.841 0.151-4.973 1.433-6.116 2.539-1.119 1.083-2.35 2.018-1.727 2.501z"/>
- <path fill="#474747" d="m255.37 251.549c0.774 0.645 1.344-0.661 2.706-1.362 1.362-0.7 3.545-1.706 5.828-1.713 2.283-0.009 2.834 0.09 2.754-0.942-0.057-1.012-1.005-0.773-3.733-0.613-2.727 0.119-4.801 1.328-5.899 2.365-1.078 1.013-2.26 1.81-1.656 2.265z"/>
- <path fill="#4c4c4c" d="m255.703 251.181c0.721 0.584 1.239-0.55 2.59-1.212 1.353-0.663 3.517-1.551 5.612-1.559 2.096-0.009 2.713 0.107 2.643-0.865-0.051-0.955-0.964-0.709-3.577-0.584-2.613 0.086-4.631 1.222-5.686 2.188-1.035 0.949-2.168 1.607-1.582 2.032z"/>
- <path fill="#515151" d="m256.036 250.813c0.669 0.521 1.134-0.436 2.476-1.063 1.341-0.625 3.485-1.395 5.395-1.402 1.91-0.01 2.591 0.124 2.531-0.789-0.044-0.898-0.922-0.646-3.423-0.557-2.499 0.055-4.458 1.117-5.469 2.014-0.994 0.882-2.077 1.402-1.51 1.797z"/>
- <path fill="#565656" d="m256.369 250.446c0.616 0.459 1.029-0.324 2.36-0.912 1.33-0.589 3.456-1.24 5.178-1.248 1.723-0.01 2.47 0.141 2.42-0.713-0.039-0.842-0.881-0.582-3.268-0.527-2.387 0.021-4.287 1.01-5.252 1.836-0.953 0.816-1.987 1.199-1.438 1.564z"/>
- <path fill="#5b5b5b" d="m256.701 250.079c0.564 0.397 0.926-0.213 2.245-0.764s3.427-1.084 4.963-1.093c1.536-0.011 2.348 0.157 2.307-0.636-0.031-0.785-0.839-0.52-3.112-0.5-2.271-0.01-4.116 0.906-5.035 1.662-0.913 0.751-1.898 0.993-1.368 1.331z"/>
- <path fill="#606060" d="m257.034 249.709c0.511 0.336 0.821-0.1 2.13-0.612 1.309-0.515 3.397-0.929 4.746-0.938 1.351-0.01 2.227 0.176 2.196-0.558-0.026-0.729-0.799-0.457-2.958-0.472-2.158-0.043-3.945 0.799-4.82 1.486-0.87 0.682-1.805 0.788-1.294 1.094z"/>
- <path fill="#666" d="m257.367 249.342c0.458 0.273 0.716 0.012 2.014-0.465 1.299-0.476 3.368-0.771 4.53-0.781 1.163-0.012 2.105 0.191 2.084-0.482-0.02-0.673-0.757-0.393-2.803-0.443-2.044-0.076-3.773 0.693-4.604 1.311-0.828 0.616-1.714 0.582-1.221 0.86z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m270.222 247.265c0 2.304 4.68 3.096 9.144 3.743 4.392 0.648 7.92 1.513 8.136 6.121 0.216 4.535-0.936 7.775 1.08 7.416 4.32-0.793 5.904-5.473 5.832-7.633 0-2.16-3.168-6.047-8.855-8.207-4.177-1.584-7.2-2.305-10.872-2.449-4.897-0.214-4.465 1.009-4.465 1.009z"/>
- <path fill="#030303" d="m270.348 247.304c0.012 2.239 4.643 2.97 9.049 3.639 4.352 0.675 7.75 1.511 8.11 6.002 0.345 4.415-0.854 7.515 1.136 7.188 4.145-0.739 5.688-5.2 5.607-7.332-0.015-2.151-3.118-5.91-8.733-8.038-4.129-1.563-7.11-2.298-10.74-2.452-4.754-0.217-4.438 0.952-4.429 0.993z"/>
- <path fill="#070707" d="m270.474 247.342c0.023 2.174 4.605 2.845 8.953 3.533 4.312 0.701 7.58 1.508 8.087 5.885 0.471 4.295-0.771 7.252 1.189 6.963 3.97-0.689 5.472-4.93 5.384-7.033-0.028-2.145-3.068-5.773-8.61-7.87-4.082-1.543-7.022-2.291-10.609-2.456-4.612-0.218-4.412 0.896-4.394 0.978z"/>
- <path fill="#0b0b0b" d="m270.6 247.379c0.035 2.109 4.568 2.721 8.857 3.431 4.271 0.728 7.411 1.506 8.063 5.767 0.599 4.174-0.689 6.988 1.245 6.735 3.795-0.638 5.257-4.66 5.159-6.733-0.044-2.137-3.019-5.636-8.488-7.701-4.035-1.522-6.933-2.285-10.478-2.459-4.469-0.219-4.384 0.837-4.358 0.96z"/>
- <path fill="#0f0f0f" d="m270.726 247.418c0.047 2.043 4.531 2.595 8.762 3.324 4.232 0.754 7.242 1.504 8.039 5.649 0.725 4.052-0.608 6.728 1.299 6.509 3.621-0.586 5.041-4.389 4.937-6.436-0.06-2.127-2.971-5.496-8.367-7.53-3.988-1.502-6.842-2.278-10.346-2.464-4.328-0.22-4.359 0.784-4.324 0.948z"/>
- <path fill="#131313" d="m270.852 247.458c0.059 1.978 4.495 2.469 8.667 3.219 4.19 0.781 7.071 1.502 8.014 5.531 0.854 3.932-0.526 6.465 1.354 6.283 3.445-0.535 4.824-4.119 4.712-6.137-0.074-2.119-2.92-5.359-8.245-7.361-3.941-1.482-6.753-2.271-10.213-2.469-4.186-0.221-4.333 0.726-4.289 0.934z"/>
- <path fill="#161616" d="m270.978 247.495c0.07 1.914 4.458 2.344 8.57 3.115 4.151 0.807 6.903 1.5 7.99 5.413 0.98 3.812-0.443 6.202 1.409 6.056 3.271-0.482 4.609-3.848 4.488-5.836-0.088-2.111-2.871-5.222-8.123-7.193-3.894-1.461-6.663-2.264-10.081-2.471-4.043-0.223-4.306 0.67-4.253 0.916z"/>
- <path fill="#1a1a1a" d="m271.104 247.534c0.082 1.848 4.422 2.219 8.476 3.01 4.111 0.832 6.734 1.498 7.965 5.295 1.108 3.69-0.36 5.94 1.464 5.83 3.097-0.433 4.394-3.578 4.265-5.537-0.104-2.104-2.821-5.084-8-7.023-3.848-1.441-6.575-2.26-9.949-2.477-3.905-0.223-4.283 0.613-4.221 0.902z"/>
- <path fill="#1e1e1e" d="m271.23 247.573c0.094 1.781 4.385 2.092 8.381 2.904 4.07 0.859 6.563 1.495 7.939 5.178 1.236 3.568-0.278 5.678 1.52 5.602 2.921-0.381 4.177-3.305 4.04-5.237-0.118-2.097-2.771-4.946-7.878-6.854-3.8-1.42-6.485-2.252-9.817-2.479-3.762-0.226-4.256 0.556-4.185 0.886z"/>
- <path fill="#222" d="m271.356 247.61c0.105 1.717 4.348 1.969 8.285 2.801 4.029 0.885 6.395 1.493 7.916 5.059 1.362 3.449-0.197 5.416 1.573 5.377 2.746-0.329 3.962-3.036 3.816-4.939-0.133-2.087-2.722-4.808-7.756-6.684-3.753-1.4-6.396-2.247-9.686-2.484-3.618-0.227-4.227 0.499-4.148 0.87z"/>
- <path fill="#262626" d="m271.482 247.648c0.118 1.651 4.311 1.843 8.189 2.694 3.99 0.914 6.226 1.492 7.892 4.943 1.491 3.328-0.115 5.152 1.629 5.149 2.571-0.278 3.746-2.765 3.592-4.64-0.146-2.08-2.672-4.672-7.634-6.516-3.705-1.38-6.306-2.24-9.553-2.488-3.478-0.225-4.203 0.446-4.115 0.858z"/>
- <path fill="#2a2a2a" d="m271.608 247.687c0.129 1.587 4.273 1.716 8.094 2.59 3.95 0.938 6.056 1.489 7.867 4.825 1.618 3.206-0.033 4.891 1.684 4.922 2.396-0.227 3.53-2.494 3.368-4.34-0.162-2.072-2.623-4.534-7.512-6.348-3.658-1.358-6.216-2.232-9.421-2.492-3.336-0.226-4.177 0.39-4.08 0.843z"/>
- <path fill="#2d2d2d" d="m271.734 247.725c0.141 1.521 4.237 1.591 7.999 2.484 3.909 0.967 5.886 1.488 7.842 4.707 1.746 3.086 0.05 4.629 1.739 4.697 2.221-0.176 3.313-2.225 3.144-4.041-0.177-2.064-2.572-4.396-7.389-6.178-3.612-1.339-6.128-2.227-9.29-2.497-3.194-0.227-4.151 0.334-4.045 0.828z"/>
- <path fill="#313131" d="m271.86 247.763c0.153 1.456 4.2 1.466 7.903 2.381 3.869 0.991 5.717 1.485 7.817 4.589 1.873 2.965 0.132 4.365 1.794 4.469 2.046-0.123 3.099-1.953 2.92-3.742-0.191-2.055-2.523-4.258-7.267-6.008-3.565-1.318-6.038-2.22-9.158-2.5-3.051-0.229-4.124 0.276-4.009 0.811z"/>
- <path fill="#353535" d="m271.986 247.801c0.165 1.392 4.163 1.341 7.808 2.275 3.829 1.018 5.547 1.483 7.794 4.473 2 2.843 0.213 4.103 1.848 4.242 1.873-0.074 2.883-1.683 2.696-3.443-0.206-2.047-2.474-4.12-7.145-5.838-3.517-1.299-5.948-2.215-9.026-2.506-2.91-0.229-4.099 0.221-3.975 0.797z"/>
- <path fill="#393939" d="m272.112 247.84c0.176 1.326 4.126 1.215 7.712 2.17 3.789 1.045 5.378 1.482 7.771 4.354 2.127 2.723 0.295 3.842 1.901 4.016 1.698-0.021 2.667-1.412 2.474-3.144-0.222-2.038-2.426-3.981-7.023-5.669-3.47-1.277-5.859-2.208-8.894-2.509-2.769-0.231-4.074 0.164-3.941 0.782z"/>
- <path fill="#3d3d3d" d="m272.238 247.877c0.188 1.262 4.089 1.09 7.617 2.066 3.749 1.071 5.208 1.479 7.745 4.236 2.255 2.602 0.377 3.578 1.957 3.789 1.522 0.029 2.451-1.141 2.249-2.844-0.236-2.033-2.375-3.846-6.901-5.5-3.423-1.258-5.769-2.203-8.762-2.514-2.626-0.231-4.046 0.109-3.905 0.767z"/>
- <path fill="#414141" d="m272.364 247.917c0.2 1.195 4.052 0.965 7.522 1.961 3.708 1.098 5.037 1.477 7.72 4.119 2.383 2.479 0.46 3.315 2.012 3.562 1.348 0.081 2.236-0.87 2.025-2.545-0.251-2.022-2.325-3.707-6.778-5.331-3.377-1.237-5.681-2.195-8.631-2.518-2.485-0.233-4.02 0.05-3.87 0.752z"/>
- <path fill="#444" d="m272.49 247.956c0.212 1.129 4.015 0.838 7.426 1.855 3.668 1.124 4.869 1.475 7.696 4 2.51 2.359 0.542 3.055 2.067 3.336 1.173 0.133 2.02-0.6 1.801-2.246-0.266-2.016-2.276-3.568-6.656-5.16-3.329-1.218-5.591-2.189-8.499-2.521-2.343-0.235-3.994-0.007-3.835 0.736z"/>
- <path fill="#484848" d="m272.616 247.993c0.223 1.065 3.979 0.715 7.331 1.752 3.628 1.15 4.699 1.473 7.671 3.883 2.638 2.238 0.624 2.791 2.122 3.108 0.998 0.185 1.804-0.329 1.577-1.946-0.28-2.008-2.227-3.432-6.534-4.992-3.282-1.196-5.501-2.182-8.367-2.525-2.201-0.235-3.968-0.064-3.8 0.72z"/>
- <path fill="#4c4c4c" d="m272.742 248.032c0.235 1 3.941 0.588 7.235 1.645 3.588 1.178 4.529 1.472 7.646 3.766 2.766 2.118 0.706 2.529 2.177 2.883 0.823 0.235 1.589-0.059 1.354-1.648-0.295-1.998-2.177-3.293-6.412-4.822-3.235-1.176-5.412-2.176-8.235-2.529-2.059-0.239-3.942-0.119-3.765 0.705z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#4c4c4c" d="m287.565 252.854c1.646 1 1.353 2.059 2.412 2.766 0.528 0.352 1.412 0.352 0.882-1-0.706-1.588-1.294-2.472-4.941-3.943-2.353-0.941-1.882 0.059 1.647 2.177z"/>
- <path fill="#505050" d="m287.609 252.868c1.605 0.975 1.32 2.008 2.353 2.696 0.517 0.343 1.377 0.343 0.86-0.976-0.689-1.549-1.262-2.41-4.82-3.846-2.295-0.917-1.836 0.059 1.607 2.126z"/>
- <path fill="#545454" d="m287.652 252.879c1.567 0.951 1.287 1.957 2.294 2.629 0.503 0.334 1.343 0.334 0.839-0.951-0.671-1.51-1.23-2.35-4.699-3.749-2.238-0.893-1.79 0.058 1.566 2.071z"/>
- <path fill="#575757" d="m287.696 252.891c1.526 0.926 1.254 1.908 2.235 2.563 0.489 0.325 1.308 0.325 0.816-0.928-0.653-1.471-1.199-2.289-4.578-3.652-2.179-0.872-1.743 0.055 1.527 2.017z"/>
- <path fill="#5b5b5b" d="m287.74 252.903c1.485 0.902 1.22 1.857 2.175 2.494 0.479 0.318 1.274 0.318 0.796-0.902-0.637-1.432-1.167-2.229-4.457-3.556-2.122-0.849-1.697 0.054 1.486 1.964z"/>
- <path fill="#5f5f5f" d="m287.783 252.915c1.446 0.879 1.188 1.808 2.117 2.426 0.464 0.31 1.239 0.31 0.773-0.877-0.619-1.394-1.136-2.168-4.336-3.459-2.064-0.826-1.65 0.052 1.446 1.91z"/>
- <path fill="#636363" d="m287.827 252.926c1.405 0.854 1.154 1.758 2.057 2.359 0.452 0.301 1.205 0.301 0.754-0.853-0.603-1.354-1.104-2.108-4.216-3.363-2.007-0.801-1.605 0.053 1.405 1.857z"/>
- <path fill="#676767" d="m287.871 252.94c1.364 0.828 1.121 1.705 1.998 2.29 0.438 0.292 1.17 0.292 0.731-0.828-0.585-1.315-1.072-2.047-4.095-3.267-1.948-0.779-1.558 0.05 1.366 1.805z"/>
- <path fill="#6b6b6b" d="m287.914 252.952c1.325 0.805 1.088 1.655 1.94 2.223 0.425 0.283 1.135 0.283 0.709-0.803-0.568-1.277-1.041-1.988-3.974-3.17-1.891-0.757-1.512 0.047 1.325 1.75z"/>
- <path fill="#6e6e6e" d="m287.958 252.963c1.284 0.779 1.056 1.605 1.88 2.156 0.413 0.274 1.102 0.274 0.688-0.779-0.551-1.238-1.009-1.926-3.853-3.073-1.833-0.733-1.466 0.046 1.285 1.696z"/>
- <path fill="#727272" d="m288.002 252.976c1.243 0.755 1.021 1.554 1.821 2.087 0.399 0.266 1.066 0.266 0.666-0.755-0.533-1.199-0.977-1.865-3.731-2.976-1.776-0.71-1.421 0.045 1.244 1.644z"/>
- <path fill="#767676" d="m288.045 252.989c1.203 0.73 0.989 1.504 1.763 2.02 0.387 0.257 1.031 0.257 0.645-0.731-0.516-1.159-0.946-1.805-3.61-2.879-1.72-0.688-1.376 0.042 1.202 1.59z"/>
- <path fill="#7a7a7a" d="m288.089 253c1.163 0.705 0.955 1.453 1.703 1.951 0.373 0.25 0.997 0.25 0.623-0.705-0.499-1.121-0.914-1.744-3.489-2.783-1.661-0.664-1.329 0.041 1.163 1.537z"/>
- <path fill="#7e7e7e" d="m288.133 253.012c1.122 0.682 0.923 1.404 1.644 1.885 0.361 0.24 0.962 0.24 0.602-0.682-0.481-1.082-0.882-1.684-3.367-2.687-1.605-0.64-1.285 0.041 1.121 1.484z"/>
- <path fill="#828282" d="m288.176 253.025c1.082 0.657 0.89 1.353 1.586 1.815 0.348 0.232 0.927 0.232 0.578-0.656-0.463-1.043-0.85-1.623-3.245-2.59-1.547-0.618-1.237 0.039 1.081 1.431z"/>
- <path fill="#858585" d="m288.22 253.038c1.042 0.631 0.855 1.301 1.524 1.748 0.335 0.223 0.894 0.223 0.559-0.633-0.446-1.005-0.818-1.563-3.125-2.492-1.488-0.596-1.19 0.037 1.042 1.377z"/>
- <path fill="#898989" d="m288.264 253.049c1.001 0.607 0.821 1.252 1.466 1.681 0.322 0.214 0.857 0.214 0.536-0.608-0.43-0.965-0.786-1.502-3.004-2.396-1.43-0.573-1.144 0.034 1.002 1.323z"/>
- <path fill="#8d8d8d" d="m288.307 253.061c0.961 0.584 0.79 1.201 1.407 1.613 0.309 0.205 0.823 0.205 0.515-0.584-0.412-0.926-0.755-1.441-2.883-2.299-1.373-0.548-1.098 0.034 0.961 1.27z"/>
- <path fill="#919191" d="m288.351 253.073c0.921 0.559 0.756 1.151 1.348 1.547 0.296 0.196 0.789 0.196 0.493-0.56-0.395-0.888-0.723-1.381-2.762-2.204-1.315-0.525-1.052 0.033 0.921 1.217z"/>
- <path fill="#959595" d="m288.395 253.084c0.88 0.535 0.723 1.102 1.289 1.479 0.282 0.189 0.754 0.189 0.471-0.534-0.377-0.849-0.691-1.321-2.641-2.106-1.257-0.505-1.006 0.031 0.881 1.161z"/>
- <path fill="#999" d="m288.438 253.097c0.84 0.51 0.689 1.05 1.229 1.409 0.271 0.181 0.721 0.181 0.45-0.51-0.36-0.81-0.66-1.26-2.52-2.01-1.199-0.48-0.959 0.031 0.841 1.111z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path d="m222.275 107.427c-0.738 0.902 0.574 8.365 5.412 13.285 4.839 4.838 7.791 4.838 9.759 2.706 3.771-4.018 0.738-7.791-1.558-10.415-2.297-2.624-5.248-1.722-7.955-4.346-2.706-2.624-4.592-2.46-5.658-1.23z"/>
- <path fill="#050505" d="m222.345 107.494c-0.732 0.895 0.569 8.3 5.369 13.182 4.803 4.801 7.731 4.801 9.685 2.685 3.742-3.987 0.731-7.73-1.546-10.334-2.278-2.604-5.208-1.709-7.894-4.312-2.684-2.604-4.556-2.441-5.614-1.221z"/>
- <path fill="#0a0a0a" d="m222.416 107.561c-0.727 0.888 0.565 8.235 5.328 13.079 4.763 4.763 7.67 4.763 9.607 2.664 3.713-3.956 0.727-7.67-1.534-10.253-2.26-2.584-5.166-1.696-7.831-4.279-2.664-2.583-4.521-2.422-5.57-1.211z"/>
- <path fill="#0f0f0f" d="m222.486 107.628c-0.721 0.881 0.561 8.17 5.286 12.976 4.726 4.725 7.608 4.725 9.532 2.642 3.684-3.924 0.72-7.609-1.522-10.172-2.243-2.563-5.126-1.682-7.77-4.244-2.643-2.563-4.485-2.403-5.526-1.202z"/>
- <path fill="#141414" d="m222.556 107.695c-0.716 0.874 0.557 8.105 5.243 12.872 4.689 4.688 7.55 4.688 9.456 2.622 3.655-3.893 0.716-7.549-1.51-10.091-2.224-2.543-5.085-1.669-7.707-4.211-2.621-2.543-4.449-2.384-5.482-1.192z"/>
- <path fill="#191919" d="m222.627 107.762c-0.71 0.867 0.552 8.04 5.202 12.769 4.65 4.65 7.488 4.65 9.379 2.601 3.626-3.862 0.71-7.489-1.497-10.011s-5.044-1.655-7.646-4.177-4.414-2.364-5.438-1.182z"/>
- <path fill="#1e1e1e" d="m222.697 107.829c-0.704 0.86 0.547 7.975 5.16 12.666 4.613 4.612 7.428 4.612 9.304 2.579 3.596-3.83 0.703-7.427-1.486-9.929-2.188-2.502-5.003-1.642-7.584-4.143-2.579-2.502-4.378-2.346-5.394-1.173z"/>
- <path fill="#232323" d="m222.767 107.896c-0.697 0.853 0.543 7.91 5.117 12.562 4.576 4.575 7.367 4.575 9.229 2.559 3.567-3.8 0.698-7.367-1.473-9.848-2.171-2.482-4.963-1.629-7.522-4.11s-4.343-2.326-5.351-1.163z"/>
- <path fill="#282828" d="m222.838 107.963c-0.691 0.846 0.538 7.845 5.076 12.459 4.537 4.537 7.307 4.537 9.152 2.538 3.537-3.769 0.691-7.307-1.461-9.768-2.154-2.461-4.922-1.615-7.461-4.076-2.538-2.461-4.307-2.307-5.306-1.153z"/>
- <path fill="#2d2d2d" d="m222.908 108.03c-0.686 0.839 0.534 7.78 5.034 12.355 4.5 4.499 7.246 4.499 9.076 2.516 3.509-3.737 0.686-7.246-1.449-9.686-2.135-2.441-4.881-1.602-7.399-4.042-2.516-2.44-4.271-2.287-5.262-1.143z"/>
- <path fill="#333" d="m222.978 108.096c-0.681 0.832 0.529 7.715 4.992 12.253 4.463 4.462 7.186 4.462 9.001 2.496 3.479-3.706 0.68-7.186-1.438-9.605-2.118-2.42-4.841-1.588-7.337-4.008s-4.235-2.27-5.218-1.136z"/>
- <path fill="#383838" d="m223.048 108.163c-0.674 0.825 0.526 7.65 4.95 12.15 4.425 4.425 7.125 4.425 8.925 2.475 3.45-3.675 0.676-7.125-1.425-9.525-2.099-2.4-4.8-1.575-7.274-3.975-2.475-2.399-4.201-2.25-5.176-1.125z"/>
- <path fill="#3d3d3d" d="m223.119 108.23c-0.669 0.818 0.521 7.585 4.908 12.047 4.387 4.387 7.063 4.387 8.849 2.453 3.42-3.643 0.669-7.064-1.413-9.443-2.082-2.38-4.759-1.562-7.214-3.941-2.453-2.38-4.164-2.231-5.13-1.116z"/>
- <path fill="#424242" d="m223.189 108.297c-0.663 0.811 0.516 7.52 4.866 11.944 4.35 4.349 7.004 4.349 8.772 2.432 3.392-3.612 0.663-7.004-1.4-9.363-2.064-2.359-4.719-1.548-7.151-3.907-2.433-2.359-4.129-2.212-5.087-1.106z"/>
- <path fill="#474747" d="m223.259 108.364c-0.656 0.804 0.513 7.455 4.824 11.84 4.313 4.312 6.944 4.312 8.697 2.412 3.362-3.582 0.658-6.944-1.388-9.282-2.046-2.339-4.679-1.535-7.09-3.874-2.411-2.338-4.093-2.192-5.043-1.096z"/>
- <path fill="#4c4c4c" d="m223.33 108.431c-0.651 0.797 0.507 7.39 4.782 11.737 4.274 4.274 6.882 4.274 8.621 2.39 3.332-3.55 0.651-6.883-1.377-9.201s-4.636-1.521-7.028-3.839c-2.39-2.318-4.057-2.174-4.998-1.087z"/>
- <path fill="#515151" d="m223.4 108.498c-0.646 0.79 0.503 7.325 4.74 11.634 4.236 4.236 6.821 4.236 8.545 2.369 3.304-3.519 0.646-6.822-1.364-9.12s-4.596-1.508-6.966-3.806c-2.369-2.298-4.022-2.154-4.955-1.077z"/>
- <path fill="#565656" d="m223.47 108.565c-0.641 0.783 0.499 7.26 4.697 11.53 4.199 4.199 6.763 4.199 8.471 2.349 3.273-3.488 0.64-6.762-1.353-9.039-1.993-2.278-4.556-1.495-6.905-3.773-2.347-2.277-3.985-2.135-4.91-1.067z"/>
- <path fill="#5b5b5b" d="m223.541 108.632c-0.635 0.776 0.493 7.195 4.656 11.427 4.161 4.161 6.701 4.161 8.393 2.327 3.245-3.456 0.636-6.701-1.34-8.958-1.975-2.257-4.514-1.48-6.843-3.738-2.327-2.257-3.95-2.116-4.866-1.058z"/>
- <path fill="#606060" d="m223.611 108.699c-0.629 0.769 0.489 7.13 4.614 11.324 4.124 4.123 6.64 4.123 8.317 2.306 3.215-3.425 0.628-6.641-1.328-8.877-1.957-2.237-4.474-1.468-6.78-3.705-2.306-2.236-3.915-2.097-4.823-1.048z"/>
- <path fill="#666" d="m223.681 108.765c-0.623 0.762 0.484 7.065 4.571 11.221 4.086 4.086 6.58 4.086 8.242 2.285 3.187-3.394 0.623-6.58-1.315-8.796-1.939-2.217-4.434-1.455-6.72-3.671-2.284-2.216-3.878-2.078-4.778-1.039z"/>
- </g>
- <g transform="translate(-12.4048,10.0005)">
- <path fill="#fc0" d="m137.79 109.277c1.978 1.366 2.031 1.607 4.948 3.514 4.64 3.768 12.885 4.616 16.922 4.75 9.233 1.467 25.738-7.161 32.273-11.111 3.291-2.463 9.38-7.551 11.659-7.637 1.405 1.485-0.66 1.792-3.587 3.775-3.906 2.779-7.25 5.156-13.172 8.515-6.338 3.316-16.078 8.794-28.548 8.054-6.542-0.959-6.566-1.024-10.606-3.086-2.4-1.732-7.901-4.608-9.889-6.774z"/>
- <linearGradient id="al" x1="129.342" gradientUnits="userSpaceOnUse" x2="195.598" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.305" y2="259.305">
- <stop stop-color="#FAC700" offset="0"/>
- <stop stop-color="#F7C400" offset=".415"/>
- <stop stop-color="#F7C400" offset="1"/>
- </linearGradient>
- <path fill="url(#al)" d="m137.742 109.259c1.926 1.274 2.165 1.643 5.083 3.554 4.616 3.734 12.716 4.616 16.796 4.763 9.365 1.452 26.05-7.294 32.356-11.159 3.357-2.506 9.344-7.498 11.595-7.604 1.365 1.472-0.728 1.768-3.688 3.814-3.889 2.753-7.119 5.065-12.972 8.383-6.29 3.291-16.078 8.795-28.536 8.104-6.561-0.945-6.851-1.07-10.758-3.079-2.468-1.755-7.876-4.587-9.876-6.776z"/>
- <linearGradient id="am" x1="129.293" gradientUnits="userSpaceOnUse" x2="195.554" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.311" y2="259.311">
- <stop stop-color="#F6C200" offset="0"/>
- <stop stop-color="#EFBC00" offset=".415"/>
- <stop stop-color="#EFBC00" offset="1"/>
- </linearGradient>
- <path fill="url(#am)" d="m137.693 109.24c1.876 1.183 2.3 1.68 5.218 3.595 4.593 3.7 12.548 4.616 16.67 4.776 9.498 1.437 26.364-7.428 32.44-11.207 3.425-2.55 9.308-7.444 11.528-7.57 1.326 1.457-0.795 1.743-3.788 3.854-3.87 2.725-6.99 4.973-12.771 8.25-6.243 3.266-16.078 8.796-28.525 8.154-6.579-0.931-7.134-1.117-10.908-3.073-2.536-1.779-7.852-4.567-9.864-6.779z"/>
- <linearGradient id="an" x1="129.245" gradientUnits="userSpaceOnUse" x2="195.51" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.317" y2="259.317">
- <stop stop-color="#F1BD00" offset="0"/>
- <stop stop-color="#E8B500" offset=".415"/>
- <stop stop-color="#E8B500" offset="1"/>
- </linearGradient>
- <path fill="url(#an)" d="m137.645 109.222c1.825 1.091 2.434 1.715 5.352 3.635 4.569 3.665 12.38 4.615 16.544 4.789 9.631 1.422 26.677-7.562 32.524-11.255 3.491-2.594 9.271-7.392 11.463-7.538 1.287 1.442-0.861 1.718-3.889 3.893-3.853 2.699-6.86 4.882-12.57 8.119-6.195 3.241-16.078 8.797-28.513 8.203-6.6-0.916-7.418-1.163-11.061-3.066-2.603-1.801-7.826-4.546-9.85-6.78z"/>
- <linearGradient id="ao" x1="129.196" gradientUnits="userSpaceOnUse" x2="195.465" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.322" y2="259.322">
- <stop stop-color="#EDB800" offset="0"/>
- <stop stop-color="#E0AD00" offset=".415"/>
- <stop stop-color="#E0AD00" offset="1"/>
- </linearGradient>
- <path fill="url(#ao)" d="m137.596 109.203c1.774 1 2.568 1.752 5.487 3.676 4.545 3.631 12.211 4.615 16.418 4.801 9.764 1.408 26.989-7.695 32.608-11.302 3.557-2.637 9.236-7.338 11.396-7.505 1.247 1.427-0.928 1.693-3.99 3.932-3.833 2.672-6.729 4.791-12.369 7.986-6.148 3.217-16.078 8.799-28.501 8.254-6.619-0.902-7.702-1.21-11.21-3.059-2.672-1.825-7.803-4.525-9.839-6.783z"/>
- <linearGradient id="ap" x1="129.148" gradientUnits="userSpaceOnUse" x2="195.422" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.327" y2="259.327">
- <stop stop-color="#E9B300" offset="0"/>
- <stop stop-color="#D8A500" offset=".415"/>
- <stop stop-color="#D8A500" offset="1"/>
- </linearGradient>
- <path fill="url(#ap)" d="m137.548 109.184c1.724 0.909 2.703 1.788 5.622 3.717 4.522 3.597 12.043 4.615 16.292 4.814 9.896 1.393 27.303-7.829 32.692-11.35 3.624-2.681 9.2-7.286 11.331-7.472 1.208 1.412-0.995 1.668-4.092 3.972-3.814 2.644-6.6 4.698-12.168 7.853-6.101 3.192-16.077 8.8-28.489 8.303-6.638-0.887-7.986-1.256-11.361-3.052-2.741-1.848-7.779-4.504-9.827-6.785z"/>
- <linearGradient id="aq" x1="129.099" gradientUnits="userSpaceOnUse" x2="195.379" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.332" y2="259.332">
- <stop stop-color="#E4AE00" offset="0"/>
- <stop stop-color="#D19E00" offset=".415"/>
- <stop stop-color="#D19E00" offset="1"/>
- </linearGradient>
- <path fill="url(#aq)" d="m137.499 109.166c1.673 0.817 2.838 1.824 5.757 3.757 4.499 3.562 11.875 4.614 16.166 4.827 10.029 1.378 27.615-7.963 32.776-11.398 3.691-2.725 9.164-7.232 11.265-7.439 1.169 1.397-1.061 1.644-4.191 4.01-3.796 2.618-6.469 4.608-11.968 7.722-6.053 3.167-16.077 8.801-28.478 8.353-6.657-0.873-8.27-1.303-11.512-3.046-2.809-1.87-7.755-4.483-9.815-6.786z"/>
- <linearGradient id="ar" x1="129.051" gradientUnits="userSpaceOnUse" x2="195.338" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.336" y2="259.336">
- <stop stop-color="#E0A900" offset="0"/>
- <stop stop-color="#C99600" offset=".415"/>
- <stop stop-color="#C99600" offset="1"/>
- </linearGradient>
- <path fill="url(#ar)" d="m137.451 109.147c1.622 0.726 2.972 1.86 5.892 3.798 4.475 3.528 11.705 4.614 16.04 4.84 10.161 1.362 27.929-8.097 32.859-11.447 3.757-2.767 9.128-7.178 11.2-7.405 1.13 1.382-1.128 1.619-4.294 4.049-3.777 2.592-6.339 4.517-11.767 7.589-6.005 3.143-16.077 8.803-28.466 8.404-6.676-0.859-8.553-1.35-11.663-3.039-2.876-1.894-7.729-4.462-9.801-6.789z"/>
- <linearGradient id="w" x1="129.003" gradientUnits="userSpaceOnUse" x2="195.296" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.34" y2="259.34">
- <stop stop-color="#DCA400" offset="0"/>
- <stop stop-color="#C18E00" offset=".415"/>
- <stop stop-color="#C18E00" offset="1"/>
- </linearGradient>
- <path fill="url(#w)" d="m137.403 109.129c1.571 0.634 3.105 1.896 6.026 3.838 4.45 3.494 11.536 4.614 15.913 4.852 10.295 1.348 28.241-8.23 32.943-11.494 3.824-2.811 9.092-7.125 11.134-7.373 1.092 1.367-1.194 1.594-4.394 4.088-3.759 2.565-6.209 4.425-11.566 7.457-5.957 3.118-16.077 8.804-28.454 8.453-6.694-0.844-8.837-1.396-11.813-3.032-2.945-1.916-7.706-4.44-9.789-6.789z"/>
- <linearGradient id="x" x1="128.954" gradientUnits="userSpaceOnUse" x2="195.255" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.343" y2="259.343">
- <stop stop-color="#D79F00" offset="0"/>
- <stop stop-color="#BA8700" offset=".415"/>
- <stop stop-color="#BA8700" offset="1"/>
- </linearGradient>
- <path fill="url(#x)" d="m137.354 109.11c1.521 0.543 3.241 1.932 6.161 3.879 4.428 3.459 11.368 4.613 15.788 4.865 10.427 1.333 28.554-8.364 33.026-11.542 3.892-2.855 9.057-7.073 11.068-7.339 1.052 1.353-1.261 1.569-4.495 4.127-3.74 2.538-6.078 4.334-11.365 7.325-5.91 3.093-16.077 8.805-28.441 8.503-6.716-0.83-9.121-1.443-11.966-3.026-3.012-1.939-7.68-4.42-9.776-6.792z"/>
- <linearGradient id="y" x1="128.906" gradientUnits="userSpaceOnUse" x2="195.216" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.348" y2="259.348">
- <stop stop-color="#D39B00" offset="0"/>
- <stop stop-color="#B27F00" offset=".415"/>
- <stop stop-color="#B27F00" offset="1"/>
- </linearGradient>
- <path fill="url(#y)" d="m137.306 109.091c1.47 0.451 3.375 1.969 6.296 3.919 4.403 3.426 11.2 4.614 15.662 4.879 10.559 1.318 28.865-8.498 33.109-11.59 3.958-2.899 9.021-7.02 11.003-7.306 1.013 1.337-1.328 1.544-4.596 4.167-3.722 2.511-5.949 4.242-11.165 7.192-5.862 3.068-16.077 8.807-28.43 8.553-6.734-0.816-9.405-1.489-12.116-3.019-3.08-1.963-7.656-4.4-9.763-6.795z"/>
- <linearGradient id="z" x1="128.857" gradientUnits="userSpaceOnUse" x2="195.176" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.35" y2="259.35">
- <stop stop-color="#CF9600" offset="0"/>
- <stop stop-color="#a70" offset=".415"/>
- <stop stop-color="#a70" offset="1"/>
- </linearGradient>
- <path fill="url(#z)" d="m137.257 109.073c1.421 0.359 3.511 2.005 6.432 3.959 4.38 3.392 11.032 4.614 15.536 4.892 10.691 1.303 29.179-8.631 33.193-11.638 4.024-2.942 8.984-6.967 10.938-7.274 0.973 1.323-1.396 1.521-4.697 4.206-3.703 2.484-5.818 4.151-10.964 7.06-5.814 3.043-16.077 8.808-28.418 8.603-6.753-0.802-9.689-1.535-12.268-3.012-3.149-1.986-7.632-4.378-9.752-6.796z"/>
- <linearGradient id="aa" x1="128.809" gradientUnits="userSpaceOnUse" x2="195.137" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.354" y2="259.354">
- <stop stop-color="#CA9100" offset="0"/>
- <stop stop-color="#A37000" offset=".415"/>
- <stop stop-color="#A37000" offset="1"/>
- </linearGradient>
- <path fill="url(#aa)" d="m137.209 109.054c1.368 0.268 3.645 2.041 6.565 4 4.356 3.357 10.864 4.613 15.41 4.904 10.824 1.289 29.493-8.764 33.277-11.685 4.092-2.986 8.948-6.914 10.871-7.241 0.935 1.308-1.461 1.496-4.797 4.245-3.685 2.457-5.688 4.06-10.763 6.928-5.768 3.018-16.077 8.809-28.407 8.653-6.771-0.788-9.972-1.582-12.418-3.006-3.216-2.008-7.607-4.357-9.738-6.798z"/>
- <linearGradient id="ab" x1="128.76" gradientUnits="userSpaceOnUse" x2="195.099" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.356" y2="259.356">
- <stop stop-color="#C68C00" offset="0"/>
- <stop stop-color="#9B6800" offset=".415"/>
- <stop stop-color="#9B6800" offset="1"/>
- </linearGradient>
- <path fill="url(#ab)" d="m137.16 109.036c1.318 0.176 3.779 2.077 6.701 4.04 4.333 3.323 10.695 4.613 15.284 4.917 10.957 1.274 29.805-8.898 33.36-11.733 4.158-3.03 8.912-6.86 10.807-7.208 0.894 1.292-1.528 1.471-4.899 4.284-3.666 2.43-5.558 3.968-10.562 6.796-5.72 2.993-16.077 8.81-28.396 8.702-6.791-0.773-10.256-1.628-12.568-2.999-3.285-2.031-7.583-4.336-9.727-6.799z"/>
- <linearGradient id="ac" x1="128.712" gradientUnits="userSpaceOnUse" x2="195.062" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.358" y2="259.358">
- <stop stop-color="#C28700" offset="0"/>
- <stop stop-color="#936000" offset=".415"/>
- <stop stop-color="#936000" offset="1"/>
- </linearGradient>
- <path fill="url(#ac)" d="m137.112 109.017c1.267 0.085 3.912 2.113 6.835 4.081 4.31 3.289 10.527 4.613 15.158 4.93 11.09 1.258 30.118-9.032 33.445-11.782 4.225-3.072 8.877-6.807 10.739-7.174 0.855 1.278-1.595 1.446-5 4.323-3.647 2.404-5.427 3.877-10.36 6.663-5.673 2.969-16.077 8.812-28.384 8.753-6.811-0.759-10.54-1.675-12.719-2.992-3.353-2.055-7.559-4.315-9.714-6.802z"/>
- <linearGradient id="ad" x1="128.663" gradientUnits="userSpaceOnUse" x2="195.025" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.36" y2="259.36">
- <stop stop-color="#BD8200" offset="0"/>
- <stop stop-color="#8C5900" offset=".415"/>
- <stop stop-color="#8C5900" offset="1"/>
- </linearGradient>
- <path fill="url(#ad)" d="m137.063 108.998c1.217-0.006 4.047 2.15 6.97 4.122 4.286 3.254 10.359 4.612 15.032 4.943 11.223 1.243 30.431-9.166 33.53-11.83 4.289-3.116 8.84-6.753 10.673-7.141 0.815 1.263-1.661 1.421-5.101 4.362-3.63 2.377-5.298 3.785-10.161 6.531-5.624 2.944-16.075 8.813-28.37 8.802-6.83-0.744-10.824-1.721-12.87-2.985-3.422-2.077-7.535-4.294-9.703-6.804z"/>
- <linearGradient id="ae" x1="128.615" gradientUnits="userSpaceOnUse" x2="194.989" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.362" y2="259.362">
- <stop stop-color="#B97D00" offset="0"/>
- <stop stop-color="#845100" offset=".415"/>
- <stop stop-color="#845100" offset="1"/>
- </linearGradient>
- <path fill="url(#ae)" d="m137.015 108.98c1.166-0.098 4.181 2.185 7.104 4.162 4.262 3.22 10.19 4.612 14.906 4.955 11.354 1.229 30.743-9.299 33.613-11.877 4.356-3.16 8.804-6.7 10.607-7.108 0.776 1.248-1.728 1.397-5.202 4.401-3.61 2.35-5.167 3.694-9.96 6.399-5.576 2.919-16.076 8.814-28.358 8.852-6.85-0.73-11.108-1.768-13.021-2.979-3.489-2.1-7.51-4.273-9.689-6.805z"/>
- <linearGradient id="af" x1="128.567" gradientUnits="userSpaceOnUse" x2="194.954" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.364" y2="259.364">
- <stop stop-color="#B57800" offset="0"/>
- <stop stop-color="#7C4900" offset=".415"/>
- <stop stop-color="#7C4900" offset="1"/>
- </linearGradient>
- <path fill="url(#af)" d="m136.967 108.961c1.115-0.189 4.315 2.222 7.239 4.203 4.239 3.186 10.021 4.612 14.78 4.968 11.488 1.214 31.057-9.433 33.697-11.925 4.424-3.203 8.768-6.647 10.542-7.075 0.736 1.233-1.795 1.372-5.303 4.44-3.593 2.323-5.038 3.603-9.759 6.266-5.529 2.895-16.077 8.816-28.348 8.903-6.868-0.716-11.392-1.815-13.172-2.972-3.557-2.124-7.485-4.252-9.676-6.808z"/>
- <linearGradient id="ah" x1="128.518" gradientUnits="userSpaceOnUse" x2="194.918" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.366" y2="259.366">
- <stop stop-color="#B07300" offset="0"/>
- <stop stop-color="#754200" offset=".415"/>
- <stop stop-color="#754200" offset="1"/>
- </linearGradient>
- <path fill="url(#ah)" d="m136.918 108.943c1.064-0.281 4.45 2.257 7.374 4.243 4.216 3.151 9.854 4.611 14.654 4.981 11.621 1.199 31.37-9.567 33.781-11.973 4.49-3.247 8.731-6.594 10.476-7.042 0.698 1.218-1.861 1.347-5.403 4.479-3.573 2.296-4.906 3.511-9.558 6.134-5.48 2.87-16.076 8.817-28.336 8.952-6.887-0.701-11.675-1.861-13.323-2.965-3.626-2.146-7.462-4.231-9.665-6.809z"/>
- <linearGradient id="ai" x1="128.47" gradientUnits="userSpaceOnUse" x2="194.886" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.367" y2="259.367">
- <stop stop-color="#AC6E00" offset="0"/>
- <stop stop-color="#6D3A00" offset=".415"/>
- <stop stop-color="#6D3A00" offset="1"/>
- </linearGradient>
- <path fill="url(#ai)" d="m136.87 108.924c1.013-0.372 4.584 2.294 7.509 4.284 4.191 3.117 9.685 4.611 14.528 4.994 11.753 1.184 31.682-9.701 33.864-12.021 4.557-3.291 8.695-6.542 10.411-7.009 0.657 1.203-1.929 1.322-5.504 4.518-3.557 2.269-4.777 3.42-9.358 6.002-5.434 2.845-16.076 8.818-28.324 9.002-6.907-0.687-11.959-1.908-13.474-2.959-3.694-2.169-7.437-4.21-9.652-6.811z"/>
- <linearGradient id="aj" x1="128.421" gradientUnits="userSpaceOnUse" x2="194.85" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.369" y2="259.369">
- <stop stop-color="#A86A00" offset="0"/>
- <stop stop-color="#663200" offset=".415"/>
- <stop stop-color="#663200" offset="1"/>
- </linearGradient>
- <path fill="url(#aj)" d="m136.821 108.905c0.963-0.464 4.719 2.33 7.644 4.324 4.168 3.083 9.517 4.611 14.402 5.007 11.886 1.169 31.995-9.834 33.948-12.069 4.624-3.334 8.66-6.487 10.345-6.976 0.619 1.188-1.995 1.298-5.604 4.558-3.537 2.242-4.647 3.328-9.157 5.869-5.386 2.82-16.076 8.82-28.313 9.052-6.926-0.673-12.243-1.954-13.625-2.952-3.762-2.192-7.413-4.189-9.64-6.813z"/>
- </g>
- </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="100%" width="100%" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 349.46883 405.12272">
+ <title>Tux</title>
+ <desc>For more information see: http://commons.wikimedia.org/wiki/Image:Tux.svg</desc>
+ <radialGradient id="ag" gradientUnits="userSpaceOnUse" cy="-551.04" cx="274.822" gradientTransform="matrix(.5671 0 0 -.2835 81.263 201.645)" r="165.384">
+ <stop stop-opacity=".502" offset="0"/>
+ <stop stop-opacity="0" offset="1"/>
+ </radialGradient>
+ <path fill="url(#ag)" d="m330.892 357.885c0 25.898-41.989 46.893-93.785 46.893-51.795 0-93.784-20.994-93.784-46.893s41.989-46.893 93.784-46.893c51.795 0.001 93.785 20.995 93.785 46.893z"/>
+ <radialGradient id="ak" gradientUnits="userSpaceOnUse" cy="-551.042" cx="268.794" gradientTransform="matrix(.5823 0 0 -.2835 -61.6052 201.14)" r="165.383">
+ <stop stop-opacity=".502" offset="0"/>
+ <stop stop-opacity="0" offset="1"/>
+ </radialGradient>
+ <path fill="url(#ak)" d="m191.223 357.381c0 25.897-43.117 46.892-96.306 46.892-53.188 0-96.305-20.994-96.305-46.892s43.117-46.893 96.305-46.893c53.188 0.001 96.306 20.995 96.306 46.893z"/>
+ <g transform="translate(8.99996 9.00046)">
+ <path d="m292.327 256.606c-4.752 19.584-28.872 60.48-41.688 78.48-12.815 18.072-11.231 34.344-34.92 28.008-23.616-6.336-30.24-5.184-54.647-3.744-24.265 1.439-19.009-0.721-34.2 6.12-15.12 6.84-65.88-82.944-69.984-99.647-4.031-16.705-5.976-14.689 4.536-32.761 10.513-18.071 12.024-35.928 25.92-57.816 13.896-21.96 29.952-33.12 28.8-49.896-4.535-62.28-8.136-93.384 19.513-107.784 26.352-13.68 48.384-5.544 57.096-0.864 3.744 2.016 11.376 5.904 17.064 12.744 5.688 6.696 10.8 16.848 13.68 29.664 5.904 25.704-2.448 17.208 4.248 46.656 6.624 29.375 20.088 43.775 36.504 67.031 16.414 23.257 33.55 61.633 28.078 83.809z"/>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#666" d="m148.47 94.049c4.319-1.728 3.592-1.958 6.472-8.222 2.304-4.824 4.328-6.898 4.256-14.242 0-7.2-2.232-9.648-5.616-14.328-3.24-4.464-8.424-4.68-11.664-4.104-1.872 0.288-4.319 2.664-5.976 6.192-1.08 2.376-1.944 5.4-2.017 8.568-0.216 8.496 0.505 11.736 2.448 17.496 2.305 6.769 7.921 10.297 12.097 8.64z"/>
+ <path fill="#6d6d6d" d="m148.47 94.023c4.293-1.717 3.563-1.954 6.425-8.178 2.289-4.793 4.312-6.861 4.271-14.164 0.027-7.152-2.162-9.702-5.488-14.201-3.296-4.345-8.376-4.509-11.593-3.953-1.916 0.283-4.354 2.569-6.038 5.968-1.159 2.31-2.016 5.353-2.087 8.535-0.212 8.438 0.547 11.691 2.46 17.417 2.268 6.731 7.901 10.221 12.05 8.576z"/>
+ <path fill="#757575" d="m148.471 93.996c4.264-1.706 3.533-1.95 6.377-8.133 2.273-4.762 4.296-6.823 4.288-14.085 0.053-7.105-2.093-9.756-5.363-14.075-3.35-4.225-8.327-4.338-11.52-3.801-1.961 0.278-4.389 2.474-6.099 5.744-1.242 2.245-2.089 5.305-2.16 8.501-0.207 8.38 0.591 11.647 2.473 17.34 2.231 6.691 7.881 10.144 12.004 8.509z"/>
+ <path fill="#7c7c7c" d="m148.471 93.969c4.235-1.694 3.506-1.946 6.329-8.089 2.26-4.731 4.28-6.786 4.304-14.006 0.081-7.058-2.021-9.811-5.236-13.948-3.403-4.105-8.278-4.167-11.446-3.649-2.006 0.273-4.424 2.379-6.16 5.519-1.322 2.179-2.161 5.257-2.232 8.468-0.202 8.323 0.636 11.603 2.486 17.261 2.191 6.654 7.859 10.068 11.955 8.444z"/>
+ <path fill="#848484" d="m148.471 93.943c4.209-1.684 3.477-1.942 6.282-8.045 2.245-4.7 4.266-6.749 4.319-13.928 0.107-7.01-1.95-9.864-5.109-13.821-3.458-3.985-8.23-3.996-11.375-3.498-2.049 0.268-4.458 2.284-6.222 5.295-1.403 2.114-2.233 5.21-2.303 8.435-0.198 8.265 0.679 11.559 2.498 17.183 2.156 6.615 7.842 9.992 11.91 8.379z"/>
+ <path fill="#8c8c8c" d="m148.471 93.916c4.181-1.672 3.448-1.938 6.235-8 2.23-4.668 4.249-6.711 4.335-13.85 0.134-6.962-1.88-9.918-4.982-13.695-3.513-3.865-8.183-3.825-11.303-3.347-2.094 0.263-4.492 2.189-6.283 5.07-1.484 2.049-2.306 5.163-2.375 8.401-0.193 8.207 0.723 11.515 2.511 17.105 2.118 6.58 7.821 9.919 11.862 8.316z"/>
+ <path fill="#939393" d="m148.472 93.889c4.152-1.661 3.419-1.934 6.188-7.956 2.215-4.638 4.233-6.674 4.35-13.771 0.161-6.915-1.809-9.972-4.854-13.568-3.567-3.746-8.134-3.654-11.23-3.195-2.138 0.259-4.527 2.094-6.345 4.847-1.564 1.983-2.378 5.115-2.447 8.368-0.188 8.149 0.767 11.47 2.523 17.026 2.079 6.54 7.8 9.841 11.815 8.249z"/>
+ <path fill="#9b9b9b" d="m148.472 93.863c4.125-1.65 3.391-1.93 6.141-7.912 2.2-4.607 4.217-6.637 4.366-13.693 0.188-6.868-1.739-10.026-4.729-13.441-3.621-3.626-8.085-3.484-11.157-3.044-2.183 0.253-4.562 1.999-6.406 4.622-1.646 1.918-2.45 5.068-2.52 8.335-0.185 8.091 0.811 11.426 2.535 16.948 2.044 6.502 7.782 9.766 11.77 8.185z"/>
+ <path fill="#a3a3a3" d="m148.472 93.836c4.097-1.639 3.361-1.926 6.094-7.867 2.185-4.576 4.201-6.599 4.382-13.614 0.214-6.82-1.669-10.081-4.603-13.315-3.676-3.506-8.036-3.313-11.084-2.893-2.229 0.249-4.598 1.904-6.47 4.398-1.726 1.852-2.521 5.021-2.591 8.301-0.18 8.034 0.854 11.382 2.548 16.87 2.008 6.465 7.763 9.691 11.724 8.12z"/>
+ <path fill="#aaa" d="m148.472 93.809c4.069-1.628 3.334-1.922 6.047-7.823 2.17-4.544 4.185-6.562 4.396-13.536 0.242-6.772-1.597-10.134-4.475-13.188-3.73-3.387-7.989-3.142-11.013-2.741-2.271 0.243-4.632 1.809-6.53 4.173-1.808 1.787-2.594 4.974-2.662 8.268-0.176 7.976 0.897 11.337 2.56 16.792 1.97 6.427 7.743 9.615 11.677 8.055z"/>
+ <path fill="#b2b2b2" d="m148.473 93.782c4.041-1.617 3.304-1.918 5.999-7.778 2.154-4.514 4.169-6.524 4.412-13.458 0.269-6.725-1.526-10.188-4.349-13.062-3.784-3.267-7.939-2.971-10.939-2.589-2.316 0.238-4.666 1.714-6.592 3.949-1.888 1.721-2.667 4.926-2.734 8.234-0.171 7.918 0.941 11.293 2.572 16.713 1.933 6.391 7.723 9.541 11.631 7.991z"/>
+ <path fill="#bababa" d="m148.473 93.756c4.014-1.606 3.275-1.914 5.951-7.734 2.141-4.482 4.153-6.487 4.43-13.379 0.295-6.678-1.457-10.243-4.223-12.935-3.839-3.147-7.892-2.8-10.867-2.438-2.36 0.233-4.701 1.619-6.653 3.725-1.969 1.656-2.739 4.879-2.806 8.201-0.167 7.86 0.984 11.249 2.585 16.636 1.895 6.35 7.702 9.462 11.583 7.924z"/>
+ <path fill="#c1c1c1" d="m148.473 93.729c3.985-1.595 3.247-1.91 5.904-7.69 2.125-4.451 4.138-6.45 4.445-13.3 0.321-6.63-1.387-10.297-4.096-12.808-3.894-3.028-7.844-2.629-10.795-2.287-2.405 0.229-4.735 1.524-6.716 3.5-2.049 1.59-2.811 4.831-2.878 8.167-0.161 7.802 1.029 11.205 2.599 16.557 1.859 6.314 7.683 9.389 11.537 7.861z"/>
+ <path fill="#c9c9c9" d="m148.473 93.702c3.958-1.583 3.219-1.906 5.857-7.646 2.11-4.42 4.121-6.412 4.46-13.222 0.35-6.583-1.315-10.351-3.969-12.682-3.947-2.908-7.794-2.458-10.722-2.135-2.45 0.224-4.771 1.429-6.777 3.276-2.13 1.525-2.883 4.784-2.95 8.135-0.157 7.745 1.073 11.16 2.611 16.479 1.821 6.276 7.663 9.313 11.49 7.795z"/>
+ <path fill="#d1d1d1" d="m148.474 93.676c3.93-1.573 3.188-1.902 5.809-7.601 2.097-4.389 4.107-6.375 4.477-13.144 0.375-6.535-1.245-10.404-3.842-12.555-4.002-2.788-7.747-2.287-10.65-1.984-2.493 0.219-4.805 1.334-6.837 3.052-2.213 1.459-2.957 4.736-3.022 8.101-0.153 7.687 1.116 11.116 2.623 16.401 1.782 6.237 7.642 9.237 11.442 7.73z"/>
+ <path fill="#d8d8d8" d="m148.474 93.649c3.901-1.562 3.16-1.898 5.762-7.557 2.082-4.358 4.091-6.338 4.493-13.065 0.401-6.487-1.176-10.458-3.716-12.428-4.057-2.668-7.698-2.116-10.578-1.832-2.538 0.214-4.839 1.239-6.899 2.827-2.292 1.394-3.029 4.689-3.094 8.068-0.148 7.629 1.16 11.072 2.636 16.322 1.746 6.2 7.623 9.161 11.396 7.665z"/>
+ <path fill="#e0e0e0" d="m148.474 93.622c3.875-1.55 3.132-1.894 5.715-7.512 2.066-4.327 4.075-6.3 4.508-12.987 0.429-6.44-1.104-10.513-3.588-12.302-4.111-2.549-7.65-1.945-10.506-1.681-2.582 0.209-4.874 1.144-6.961 2.604-2.373 1.328-3.102 4.642-3.165 8.034-0.145 7.571 1.204 11.027 2.647 16.244 1.709 6.162 7.604 9.086 11.35 7.6z"/>
+ <path fill="#e8e8e8" d="m148.474 93.596c3.847-1.54 3.104-1.89 5.668-7.468 2.052-4.296 4.059-6.263 4.523-12.908 0.456-6.393-1.034-10.567-3.462-12.175-4.165-2.429-7.601-1.774-10.433-1.529-2.627 0.204-4.908 1.049-7.023 2.379-2.453 1.263-3.173 4.594-3.236 8.001-0.141 7.514 1.247 10.983 2.659 16.166 1.673 6.123 7.585 9.008 11.304 7.534z"/>
+ <path fill="#efefef" d="m148.475 93.569c3.817-1.528 3.073-1.886 5.62-7.424 2.036-4.265 4.043-6.226 4.539-12.83 0.482-6.345-0.964-10.621-3.336-12.048-4.219-2.31-7.552-1.604-10.359-1.378-2.672 0.199-4.943 0.954-7.084 2.155-2.535 1.197-3.246 4.546-3.311 7.967-0.135 7.456 1.292 10.939 2.673 16.087 1.636 6.087 7.565 8.935 11.258 7.471z"/>
+ <path fill="#f7f7f7" d="m148.475 93.542c3.791-1.517 3.046-1.882 5.572-7.379 2.022-4.234 4.027-6.188 4.556-12.751 0.51-6.297-0.894-10.675-3.208-11.921-4.274-2.19-7.505-1.433-10.289-1.227-2.715 0.194-4.978 0.859-7.146 1.93-2.614 1.132-3.317 4.5-3.381 7.935-0.131 7.398 1.335 10.895 2.686 16.009 1.597 6.047 7.544 8.858 11.21 7.404z"/>
+ <path fill="#fff" d="m148.475 93.516c3.763-1.506 3.017-1.878 5.525-7.335 2.007-4.203 4.012-6.151 4.571-12.673 0.536-6.25-0.823-10.729-3.082-11.795-4.328-2.07-7.456-1.262-10.216-1.075-2.76 0.189-5.012 0.764-7.207 1.706-2.696 1.066-3.39 4.452-3.453 7.901-0.126 7.34 1.379 10.85 2.698 15.931 1.561 6.01 7.525 8.782 11.164 7.34z"/>
+ </g>
+ <path d="m132.033 74.7465c2.16 0 4.896 1.44 6.191 3.384 1.368 1.944 2.376 4.68 2.376 7.776 0 4.608-0.504 9.72-3.239 11.304-0.864 0.504-2.736 0.936-3.816 0.936-2.448 0-2.664-1.584-4.968-3.96-0.792-0.864-3.168-5.04-3.168-8.496 0-2.16-0.504-5.256 1.368-7.992 1.296-2.016 2.952-2.952 5.256-2.952z"/>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m143.862 68.608c0.844-1.305 4.222-0.69 5.45 1.996 1.229 2.687 0.998 8.522 0.153 8.829-2.226 0.691-1.535-2.534-3.454-5.451-1.919-2.762-2.994-4.067-2.149-5.374z"/>
+ <path fill="#070707" d="m143.916 68.664c0.833-1.289 4.169-0.681 5.381 1.971 1.215 2.653 0.985 8.414 0.152 8.717-2.198 0.682-1.516-2.502-3.411-5.382-1.895-2.728-2.956-4.017-2.122-5.306z"/>
+ <path fill="#0f0f0f" d="m143.97 68.719c0.822-1.272 4.114-0.673 5.312 1.945 1.198 2.619 0.973 8.306 0.15 8.605-2.169 0.673-1.497-2.47-3.367-5.313-1.871-2.692-2.918-3.964-2.095-5.237z"/>
+ <path fill="#161616" d="m144.024 68.774c0.812-1.255 4.062-0.664 5.243 1.92 1.182 2.585 0.96 8.198 0.147 8.493-2.141 0.665-1.477-2.438-3.323-5.244-1.846-2.657-2.88-3.913-2.067-5.169z"/>
+ <path fill="#1e1e1e" d="m144.078 68.829c0.801-1.239 4.008-0.655 5.174 1.895 1.167 2.551 0.947 8.09 0.146 8.381-2.113 0.656-1.458-2.405-3.28-5.174-1.821-2.623-2.842-3.863-2.04-5.102z"/>
+ <path fill="#262626" d="m144.132 68.884c0.791-1.222 3.955-0.646 5.105 1.87 1.151 2.517 0.935 7.982 0.144 8.27-2.085 0.647-1.438-2.374-3.235-5.105-1.798-2.589-2.805-3.812-2.014-5.035z"/>
+ <path fill="#2d2d2d" d="m144.186 68.939c0.779-1.206 3.9-0.638 5.036 1.844 1.135 2.483 0.922 7.874 0.142 8.158-2.057 0.639-1.419-2.341-3.192-5.037-1.773-2.552-2.766-3.758-1.986-4.965z"/>
+ <path fill="#353535" d="m144.24 68.994c0.769-1.189 3.848-0.629 4.967 1.819 1.12 2.449 0.909 7.766 0.141 8.046-2.028 0.629-1.399-2.31-3.148-4.967-1.75-2.518-2.73-3.708-1.96-4.898z"/>
+ <path fill="#3d3d3d" d="m144.294 69.049c0.76-1.172 3.794-0.621 4.898 1.793 1.104 2.415 0.896 7.658 0.138 7.934-2 0.621-1.38-2.277-3.104-4.898-1.725-2.482-2.691-3.655-1.932-4.829z"/>
+ <path fill="#444" d="m144.348 69.104c0.748-1.156 3.74-0.612 4.829 1.768 1.088 2.38 0.884 7.55 0.136 7.822-1.973 0.612-1.36-2.245-3.062-4.829-1.699-2.448-2.651-3.604-1.903-4.761z"/>
+ <path fill="#4c4c4c" d="m144.402 69.16c0.737-1.14 3.687-0.603 4.76 1.743 1.073 2.347 0.871 7.442 0.134 7.71-1.943 0.604-1.341-2.213-3.017-4.76-1.676-2.414-2.614-3.554-1.877-4.693z"/>
+ <path fill="#545454" d="m144.456 69.215c0.727-1.123 3.634-0.595 4.691 1.717 1.057 2.313 0.857 7.334 0.132 7.598-1.916 0.595-1.321-2.181-2.973-4.691-1.652-2.378-2.577-3.501-1.85-4.624z"/>
+ <path fill="#5b5b5b" d="m144.51 69.27c0.717-1.106 3.58-0.585 4.622 1.692 1.041 2.278 0.847 7.226 0.131 7.486-1.888 0.586-1.303-2.149-2.93-4.622-1.628-2.343-2.539-3.45-1.823-4.556z"/>
+ <path fill="#636363" d="m144.564 69.325c0.705-1.09 3.526-0.577 4.553 1.667 1.026 2.245 0.833 7.118 0.128 7.375-1.858 0.577-1.282-2.117-2.885-4.553-1.604-2.309-2.501-3.399-1.796-4.489z"/>
+ <path fill="#6b6b6b" d="m144.618 69.38c0.694-1.073 3.473-0.568 4.483 1.642 1.011 2.21 0.82 7.01 0.127 7.263-1.831 0.568-1.264-2.084-2.842-4.484-1.578-2.274-2.462-3.347-1.768-4.421z"/>
+ <path fill="#727272" d="m144.672 69.435c0.685-1.057 3.42-0.56 4.414 1.617 0.995 2.176 0.81 6.902 0.125 7.15-1.803 0.56-1.243-2.053-2.798-4.415-1.554-2.238-2.425-3.295-1.741-4.352z"/>
+ <path fill="#7a7a7a" d="m144.726 69.49c0.673-1.041 3.365-0.551 4.345 1.591 0.979 2.143 0.796 6.794 0.123 7.039-1.775 0.551-1.224-2.021-2.754-4.346-1.53-2.203-2.387-3.244-1.714-4.284z"/>
+ <path fill="#828282" d="m144.78 69.545c0.662-1.023 3.313-0.542 4.276 1.566 0.964 2.108 0.782 6.686 0.121 6.926-1.746 0.542-1.204-1.988-2.711-4.276-1.505-2.167-2.348-3.192-1.686-4.216z"/>
+ <path fill="#898989" d="m144.834 69.6c0.652-1.007 3.259-0.533 4.207 1.541s0.771 6.578 0.119 6.815c-1.718 0.534-1.185-1.956-2.666-4.207-1.482-2.134-2.311-3.142-1.66-4.149z"/>
+ <path fill="#919191" d="m144.888 69.655c0.641-0.99 3.206-0.524 4.138 1.516 0.933 2.04 0.758 6.47 0.117 6.703-1.69 0.525-1.165-1.924-2.623-4.138-1.457-2.098-2.273-3.09-1.632-4.081z"/>
+ <path fill="#999" d="m144.942 69.71c0.63-0.974 3.152-0.516 4.069 1.49s0.744 6.362 0.114 6.591c-1.662 0.516-1.146-1.892-2.579-4.069-1.432-2.062-2.234-3.037-1.604-4.012z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#666" d="m193.11 94.985c10.8-1.152 14.616-5.328 16.56-12.6 1.729-6.48 1.801-13.68-3.023-22.104-4.536-8.063-7.128-9.36-13.681-9.864-10.079-0.864-14.832 6.192-17.063 11.232-2.376 5.472-1.872 4.68-1.729 11.592 0.145 7.272 4.245 9.299 6.766 13.835 2.519 4.465 10.946 7.982 12.17 7.909z"/>
+ <path fill="#6d6d6d" d="m193.115 94.944c10.759-1.131 14.618-5.354 16.515-12.569 1.701-6.525 1.785-13.686-3.002-21.912-4.434-7.797-7.038-9.081-13.512-9.581-10.049-0.861-14.941 5.873-17.181 10.874-2.304 5.28-1.878 4.718-1.726 11.539 0.16 7.268 4.268 9.223 6.784 13.76 2.521 4.475 10.898 7.962 12.122 7.889z"/>
+ <path fill="#757575" d="m193.12 94.902c10.718-1.11 14.62-5.379 16.469-12.538 1.676-6.57 1.771-13.692-2.979-21.721-4.331-7.53-6.947-8.801-13.344-9.297-10.018-0.858-15.05 5.553-17.298 10.516-2.229 5.087-1.885 4.757-1.722 11.487 0.176 7.264 4.289 9.146 6.803 13.686 2.52 4.485 10.848 7.942 12.071 7.867z"/>
+ <path fill="#7c7c7c" d="m193.126 94.861c10.675-1.09 14.621-5.405 16.423-12.507 1.648-6.616 1.756-13.698-2.958-21.529-4.229-7.263-6.856-8.522-13.176-9.014-9.985-0.854-15.158 5.234-17.414 10.158-2.156 4.895-1.891 4.795-1.719 11.434 0.193 7.26 4.31 9.07 6.822 13.611 2.52 4.495 10.798 7.922 12.022 7.847z"/>
+ <path fill="#848484" d="m193.131 94.82c10.635-1.069 14.623-5.431 16.377-12.476 1.622-6.661 1.741-13.704-2.936-21.337-4.126-6.996-6.767-8.242-13.008-8.73-9.955-0.852-15.267 4.915-17.53 9.8-2.084 4.703-1.896 4.833-1.716 11.38 0.209 7.256 4.332 8.995 6.841 13.537 2.52 4.505 10.748 7.902 11.972 7.826z"/>
+ <path fill="#8c8c8c" d="m193.136 94.778c10.593-1.048 14.625-5.457 16.331-12.445 1.596-6.706 1.726-13.709-2.913-21.145-4.025-6.729-6.678-7.963-12.841-8.447-9.924-0.848-15.375 4.595-17.647 9.441-2.01 4.51-1.903 4.872-1.712 11.328 0.225 7.251 4.354 8.918 6.858 13.462 2.521 4.517 10.7 7.883 11.924 7.806z"/>
+ <path fill="#939393" d="m193.141 94.737c10.552-1.027 14.627-5.482 16.286-12.414 1.568-6.751 1.711-13.715-2.893-20.954-3.922-6.462-6.586-7.683-12.672-8.163-9.892-0.845-15.483 4.276-17.764 9.083-1.938 4.318-1.909 4.91-1.709 11.275 0.24 7.247 4.375 8.842 6.878 13.387 2.521 4.528 10.651 7.863 11.874 7.786z"/>
+ <path fill="#9b9b9b" d="m193.146 94.695c10.51-1.007 14.63-5.508 16.241-12.382 1.542-6.796 1.694-13.721-2.87-20.762-3.82-6.195-6.496-7.404-12.504-7.879-9.861-0.842-15.592 3.956-17.882 8.725-1.863 4.126-1.915 4.949-1.706 11.223 0.258 7.243 4.397 8.766 6.897 13.313 2.521 4.535 10.601 7.841 11.824 7.762z"/>
+ <path fill="#a3a3a3" d="m193.151 94.654c10.469-0.986 14.632-5.534 16.196-12.351 1.515-6.842 1.68-13.727-2.85-20.57-3.717-5.928-6.405-7.125-12.335-7.596-9.83-0.839-15.7 3.637-17.998 8.367-1.791 3.933-1.922 4.987-1.703 11.169 0.273 7.239 4.419 8.689 6.916 13.238 2.521 4.547 10.551 7.822 11.774 7.743z"/>
+ <path fill="#aaa" d="m193.157 94.612c10.427-0.965 14.633-5.56 16.149-12.32 1.488-6.887 1.666-13.733-2.826-20.379-3.615-5.661-6.316-6.845-12.168-7.313-9.799-0.835-15.809 3.317-18.114 8.009-1.718 3.741-1.928 5.025-1.7 11.117 0.29 7.235 4.44 8.613 6.936 13.163 2.519 4.558 10.499 7.804 11.723 7.723z"/>
+ <path fill="#b2b2b2" d="m193.162 94.571c10.386-0.944 14.635-5.585 16.104-12.289 1.462-6.932 1.649-13.739-2.806-20.188-3.512-5.394-6.225-6.565-11.999-7.029-9.768-0.833-15.917 2.998-18.23 7.651-1.646 3.549-1.935 5.064-1.697 11.064 0.306 7.231 4.462 8.537 6.954 13.088 2.52 4.569 10.451 7.784 11.674 7.703z"/>
+ <path fill="#bababa" d="m193.167 94.529c10.345-0.923 14.638-5.611 16.059-12.258 1.436-6.977 1.636-13.744-2.782-19.995-3.41-5.127-6.135-6.286-11.832-6.746-9.736-0.829-16.025 2.679-18.347 7.293-1.572 3.356-1.941 5.103-1.694 11.011 0.322 7.227 4.484 8.461 6.973 13.014 2.519 4.579 10.4 7.764 11.623 7.681z"/>
+ <path fill="#c1c1c1" d="m193.172 94.488c10.304-0.903 14.64-5.637 16.014-12.227 1.409-7.022 1.62-13.75-2.762-19.804-3.308-4.86-6.044-6.006-11.662-6.462-9.705-0.826-16.135 2.359-18.466 6.935-1.498 3.164-1.945 5.141-1.689 10.958 0.338 7.223 4.506 8.385 6.991 12.939 2.519 4.59 10.351 7.744 11.574 7.661z"/>
+ <path fill="#c9c9c9" d="m193.177 94.447c10.262-0.882 14.641-5.663 15.967-12.196 1.383-7.068 1.605-13.756-2.738-19.612-3.206-4.593-5.954-5.727-11.496-6.179-9.673-0.823-16.242 2.04-18.581 6.577-1.425 2.972-1.952 5.179-1.687 10.906 0.354 7.219 4.526 8.308 7.01 12.865 2.52 4.598 10.302 7.723 11.525 7.639z"/>
+ <path fill="#d1d1d1" d="m193.182 94.405c10.221-0.861 14.643-5.688 15.922-12.165 1.355-7.113 1.591-13.762-2.717-19.42-3.104-4.326-5.864-5.448-11.327-5.895-9.644-0.82-16.352 1.721-18.698 6.219-1.353 2.779-1.959 5.217-1.684 10.853 0.369 7.214 4.549 8.232 7.028 12.79 2.521 4.609 10.254 7.703 11.476 7.618z"/>
+ <path fill="#d8d8d8" d="m193.187 94.364c10.179-0.841 14.645-5.714 15.876-12.133 1.33-7.158 1.576-13.768-2.694-19.229-3.001-4.059-5.773-5.168-11.16-5.612-9.61-0.817-16.459 1.401-18.813 5.861-1.279 2.586-1.965 5.256-1.682 10.8 0.387 7.21 4.571 8.156 7.049 12.715 2.519 4.619 10.202 7.684 11.424 7.598z"/>
+ <path fill="#e0e0e0" d="m193.193 94.322c10.137-0.82 14.646-5.74 15.83-12.103 1.303-7.203 1.561-13.773-2.673-19.037-2.898-3.792-5.684-4.889-10.991-5.328-9.58-0.813-16.568 1.082-18.931 5.502-1.206 2.395-1.972 5.294-1.679 10.747 0.403 7.207 4.592 8.08 7.067 12.641 2.521 4.631 10.154 7.666 11.377 7.578z"/>
+ <path fill="#e8e8e8" d="m193.198 94.281c10.096-0.799 14.648-5.766 15.785-12.071 1.275-7.249 1.545-13.779-2.651-18.845-2.796-3.525-5.593-4.609-10.823-5.044-9.549-0.81-16.677 0.762-19.048 5.145-1.133 2.202-1.978 5.333-1.675 10.694 0.419 7.202 4.614 8.003 7.086 12.566 2.52 4.638 10.103 7.643 11.326 7.555z"/>
+ <path fill="#efefef" d="m193.203 94.239c10.055-0.778 14.65-5.792 15.739-12.04 1.25-7.293 1.531-13.785-2.629-18.653-2.694-3.258-5.502-4.33-10.655-4.761-9.517-0.807-16.785 0.443-19.165 4.786-1.059 2.01-1.983 5.372-1.671 10.642 0.435 7.198 4.636 7.928 7.104 12.492 2.52 4.649 10.055 7.624 11.277 7.534z"/>
+ <path fill="#f7f7f7" d="m193.208 94.198c10.014-0.757 14.652-5.817 15.694-12.009 1.223-7.339 1.516-13.792-2.607-18.462-2.592-2.991-5.413-4.05-10.486-4.478-9.487-0.804-16.895 0.124-19.282 4.428-0.986 1.817-1.989 5.41-1.668 10.589 0.451 7.194 4.657 7.851 7.123 12.417 2.519 4.661 10.004 7.605 11.226 7.515z"/>
+ <path fill="#fff" d="m193.213 94.156c9.973-0.737 14.654-5.843 15.648-11.978 1.197-7.384 1.501-13.797-2.585-18.27-2.489-2.724-5.322-3.771-10.319-4.194-9.455-0.801-17.002-0.196-19.397 4.07-0.913 1.625-1.996 5.448-1.665 10.536 0.467 7.19 4.679 7.775 7.142 12.342 2.519 4.671 9.954 7.586 11.176 7.494z"/>
+ </g>
+ <path d="m179.841 74.4585c5.4 0 8.568 4.824 9.648 11.016 0.432 2.808-0.216 6.048-1.944 8.28-1.944 2.592-5.4 4.176-8.208 4.176-2.664 0-5.688 0.432-7.271-1.728-1.584-2.232-1.944-7.2-1.944-10.728 0-3.96 1.152-6.768 3.168-9 1.511-1.657 4.247-2.016 6.551-2.016z"/>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m192.591 66.68c0.98-0.653 2.612 0 4.489 2.122 2.039 2.285 2.938 4.08 0.489 5.385-1.877 0.98-2.448-1.958-3.59-3.182-1.795-1.959-3.346-3.02-1.388-4.325z"/>
+ <path fill="#070707" d="m192.631 66.738c0.96-0.649 2.573 0 4.423 2.09 2.009 2.251 2.864 4.02 0.481 5.305-1.837 0.977-2.403-1.929-3.525-3.135-1.768-1.925-3.296-2.965-1.379-4.26z"/>
+ <path fill="#0f0f0f" d="m192.671 66.797c0.939-0.645 2.534 0 4.356 2.059 1.978 2.217 2.792 3.958 0.474 5.225-1.798 0.974-2.357-1.9-3.46-3.087-1.742-1.895-3.247-2.913-1.37-4.197z"/>
+ <path fill="#161616" d="m192.711 66.855c0.919-0.641 2.495 0 4.289 2.027 1.948 2.184 2.721 3.898 0.467 5.146-1.759 0.971-2.313-1.871-3.396-3.041-1.715-1.861-3.197-2.858-1.36-4.132z"/>
+ <path fill="#1e1e1e" d="m192.751 66.914c0.899-0.637 2.457 0 4.223 1.996 1.918 2.149 2.647 3.838 0.46 5.065-1.72 0.968-2.269-1.842-3.331-2.993-1.689-1.83-3.148-2.805-1.352-4.068z"/>
+ <path fill="#262626" d="m192.791 66.973c0.878-0.633 2.418 0 4.155 1.964 1.888 2.116 2.576 3.777 0.453 4.986-1.68 0.965-2.224-1.813-3.267-2.946-1.661-1.798-3.097-2.752-1.341-4.004z"/>
+ <path fill="#2d2d2d" d="m192.831 67.031c0.858-0.629 2.379 0 4.089 1.933 1.857 2.082 2.503 3.717 0.445 4.906-1.641 0.961-2.178-1.784-3.201-2.898-1.636-1.767-3.048-2.7-1.333-3.941z"/>
+ <path fill="#353535" d="m192.87 67.09c0.838-0.625 2.341 0 4.023 1.902 1.827 2.047 2.431 3.656 0.438 4.826-1.601 0.958-2.133-1.755-3.137-2.852-1.608-1.735-2.998-2.646-1.324-3.876z"/>
+ <path fill="#3d3d3d" d="m192.91 67.148c0.818-0.621 2.302 0 3.956 1.87 1.797 2.014 2.359 3.596 0.431 4.746-1.562 0.956-2.088-1.726-3.071-2.804-1.583-1.702-2.95-2.592-1.316-3.812z"/>
+ <path fill="#444" d="m192.95 67.207c0.798-0.617 2.263 0 3.889 1.839 1.768 1.98 2.287 3.535 0.425 4.666-1.523 0.952-2.043-1.697-3.008-2.757-1.556-1.671-2.899-2.539-1.306-3.748z"/>
+ <path fill="#4c4c4c" d="m192.99 67.266c0.777-0.614 2.224 0 3.823 1.807 1.735 1.946 2.214 3.474 0.416 4.586-1.483 0.949-1.998-1.667-2.942-2.709-1.529-1.639-2.85-2.486-1.297-3.684z"/>
+ <path fill="#545454" d="m193.03 67.325c0.757-0.61 2.185 0 3.756 1.775 1.706 1.912 2.143 3.414 0.409 4.506-1.444 0.946-1.953-1.639-2.878-2.663-1.502-1.606-2.799-2.431-1.287-3.618z"/>
+ <path fill="#5b5b5b" d="m193.07 67.383c0.736-0.605 2.146 0 3.688 1.744 1.677 1.878 2.07 3.353 0.402 4.426-1.405 0.943-1.908-1.609-2.813-2.615-1.475-1.575-2.749-2.378-1.277-3.555z"/>
+ <path fill="#636363" d="m193.11 67.442c0.716-0.602 2.106 0 3.622 1.712 1.646 1.844 1.998 3.293 0.395 4.347-1.364 0.94-1.862-1.581-2.748-2.568-1.449-1.543-2.701-2.326-1.269-3.491z"/>
+ <path fill="#6b6b6b" d="m193.15 67.5c0.696-0.598 2.069 0 3.556 1.681 1.615 1.811 1.925 3.232 0.387 4.267-1.325 0.937-1.818-1.552-2.683-2.521-1.423-1.511-2.651-2.272-1.26-3.427z"/>
+ <path fill="#727272" d="m193.19 67.559c0.675-0.594 2.03 0 3.489 1.649 1.585 1.777 1.853 3.172 0.38 4.187-1.287 0.935-1.774-1.522-2.619-2.473-1.396-1.48-2.601-2.219-1.25-3.363z"/>
+ <path fill="#7a7a7a" d="m193.23 67.618c0.654-0.59 1.991 0 3.422 1.618 1.555 1.743 1.781 3.111 0.373 4.107-1.247 0.931-1.729-1.494-2.554-2.426-1.369-1.448-2.551-2.166-1.241-3.299z"/>
+ <path fill="#828282" d="m193.269 67.677c0.635-0.586 1.953 0 3.355 1.586 1.525 1.708 1.709 3.05 0.366 4.026-1.208 0.928-1.684-1.464-2.489-2.378-1.342-1.416-2.501-2.112-1.232-3.234z"/>
+ <path fill="#898989" d="m193.309 67.735c0.614-0.582 1.914 0 3.29 1.555 1.493 1.675 1.636 2.99 0.357 3.947-1.169 0.925-1.639-1.435-2.424-2.332-1.316-1.384-2.452-2.058-1.223-3.17z"/>
+ <path fill="#919191" d="m193.349 67.794c0.595-0.578 1.875 0 3.223 1.523 1.464 1.641 1.564 2.93 0.351 3.867-1.129 0.922-1.594-1.406-2.359-2.284-1.29-1.352-2.403-2.005-1.215-3.106z"/>
+ <path fill="#999" d="m193.389 67.853c0.573-0.574 1.836 0 3.155 1.492 1.435 1.607 1.492 2.869 0.345 3.787-1.091 0.919-1.55-1.377-2.295-2.237-1.263-1.32-2.353-1.953-1.205-3.042z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m165.498 69.906c1.693-0.654 3.012-0.69 5.63 1.036 3.166 2.088 1.705 5.245-0.779 4.601-2.146-0.556-2.417-0.681-4.391-1.086-3.101-0.648-3.641-3.322-0.46-4.551z"/>
+ <path fill="#050505" d="m165.564 70.033c1.658-0.629 2.973-0.656 5.555 1.026 3.066 2.009 1.654 5.012-0.805 4.38-2.131-0.547-2.345-0.656-4.284-1.052-3.055-0.634-3.587-3.173-0.466-4.354z"/>
+ <path fill="#0a0a0a" d="m165.63 70.16c1.623-0.604 2.935-0.622 5.481 1.015 2.965 1.93 1.602 4.779-0.83 4.159-2.119-0.539-2.274-0.63-4.179-1.018-3.009-0.618-3.533-3.022-0.472-4.156z"/>
+ <path fill="#0f0f0f" d="m165.696 70.287c1.587-0.579 2.895-0.587 5.406 1.005 2.864 1.851 1.551 4.546-0.855 3.938-2.105-0.53-2.203-0.605-4.073-0.983-2.963-0.604-3.48-2.873-0.478-3.96z"/>
+ <path fill="#141414" d="m165.761 70.413c1.553-0.553 2.856-0.553 5.331 0.995 2.766 1.772 1.5 4.313-0.88 3.717-2.092-0.521-2.131-0.58-3.967-0.949-2.916-0.588-3.425-2.723-0.484-3.763z"/>
+ <path fill="#191919" d="m165.827 70.54c1.519-0.528 2.818-0.519 5.258 0.984 2.664 1.693 1.448 4.079-0.905 3.497-2.079-0.513-2.06-0.554-3.861-0.915-2.873-0.573-3.373-2.573-0.492-3.566z"/>
+ <path fill="#1e1e1e" d="m165.893 70.667c1.482-0.503 2.778-0.484 5.183 0.974 2.564 1.614 1.397 3.846-0.93 3.276-2.067-0.504-1.989-0.529-3.756-0.88-2.826-0.559-3.319-2.425-0.497-3.37z"/>
+ <path fill="#232323" d="m165.959 70.793c1.447-0.478 2.74-0.45 5.108 0.964 2.464 1.535 1.345 3.613-0.955 3.055-2.053-0.496-1.917-0.503-3.651-0.846-2.779-0.543-3.264-2.274-0.502-3.173z"/>
+ <path fill="#282828" d="m166.025 70.92c1.412-0.453 2.701-0.416 5.034 0.954 2.362 1.456 1.293 3.38-0.981 2.834-2.04-0.487-1.845-0.478-3.545-0.812-2.733-0.528-3.21-2.125-0.508-2.976z"/>
+ <path fill="#2d2d2d" d="m166.09 71.047c1.378-0.428 2.663-0.382 4.96 0.943 2.264 1.377 1.242 3.146-1.006 2.613-2.026-0.478-1.773-0.453-3.438-0.777-2.688-0.513-3.158-1.974-0.516-2.779z"/>
+ <path fill="#333" d="m166.156 71.173c1.343-0.402 2.624-0.347 4.885 0.933 2.163 1.298 1.191 2.914-1.029 2.392-2.015-0.47-1.703-0.428-3.334-0.743-2.642-0.498-3.104-1.824-0.522-2.582z"/>
+ <path fill="#383838" d="m166.222 71.3c1.307-0.377 2.585-0.313 4.81 0.922 2.063 1.219 1.14 2.681-1.055 2.171-2.001-0.461-1.631-0.402-3.229-0.708-2.594-0.483-3.048-1.674-0.526-2.385z"/>
+ <path fill="#3d3d3d" d="m166.288 71.427c1.272-0.352 2.546-0.279 4.736 0.913 1.962 1.14 1.088 2.447-1.081 1.95-1.988-0.452-1.56-0.377-3.122-0.674-2.55-0.469-2.995-1.526-0.533-2.189z"/>
+ <path fill="#424242" d="m166.354 71.554c1.236-0.327 2.507-0.245 4.661 0.902 1.861 1.061 1.037 2.214-1.106 1.729-1.974-0.444-1.488-0.352-3.016-0.64-2.504-0.453-2.942-1.375-0.539-1.991z"/>
+ <path fill="#474747" d="m166.419 71.68c1.203-0.302 2.469-0.21 4.587 0.892 1.762 0.982 0.986 1.98-1.13 1.508-1.962-0.435-1.417-0.326-2.911-0.606-2.458-0.437-2.888-1.224-0.546-1.794z"/>
+ <path fill="#4c4c4c" d="m166.485 71.807c1.167-0.276 2.429-0.176 4.513 0.882 1.66 0.903 0.935 1.748-1.156 1.288-1.948-0.426-1.345-0.301-2.805-0.572-2.412-0.423-2.834-1.076-0.552-1.598z"/>
+ <path fill="#515151" d="m166.551 71.934c1.133-0.251 2.391-0.142 4.438 0.871 1.56 0.824 0.883 1.515-1.181 1.067-1.936-0.417-1.274-0.275-2.699-0.537-2.366-0.408-2.781-0.926-0.558-1.401z"/>
+ <path fill="#565656" d="m166.617 72.061c1.097-0.227 2.351-0.108 4.363 0.861 1.46 0.745 0.831 1.281-1.206 0.846-1.922-0.409-1.202-0.25-2.594-0.503-2.319-0.393-2.726-0.777-0.563-1.204z"/>
+ <path fill="#5b5b5b" d="m166.683 72.187c1.062-0.201 2.312-0.073 4.289 0.851 1.358 0.666 0.778 1.048-1.231 0.625-1.91-0.4-1.131-0.225-2.489-0.469-2.274-0.377-2.672-0.626-0.569-1.007z"/>
+ <path fill="#606060" d="m166.748 72.314c1.027-0.176 2.274-0.04 4.215 0.84 1.26 0.587 0.729 0.815-1.256 0.404-1.896-0.392-1.06-0.2-2.383-0.435-2.228-0.361-2.619-0.475-0.576-0.809z"/>
+ <path fill="#666" d="m166.814 72.44c0.992-0.151 2.234-0.005 4.14 0.83 1.159 0.508 0.677 0.582-1.281 0.183-1.883-0.383-0.987-0.174-2.276-0.4-2.183-0.346-2.566-0.325-0.583-0.613z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#666" d="m159.99 128.249c-9.36 0.36-24.192-25.848-24.552-14.976-0.288 9.216 0.216 9.072 0.216 18 0 5.976-2.736 6.408-8.64 15.408-3.024 4.752-5.4 9.864-7.272 15.048-1.152 3.096-2.232 6.336-3.096 9.504-0.36 1.584-1.008 3.24-1.368 4.824-2.952 10.872-13.464 24.264-15.912 35.136-2.448 10.8-5.328 17.712-4.968 32.185 0.36 14.472 0.504 10.295 4.896 13.896 4.32 3.601 8.784 6.983 15.624 13.032 7.2 6.264 22.177 17.208 24.192 20.592 2.16 3.456 2.088 11.232 0.792 13.752-1.296 2.448-12.6 3.816-12.528 3.816-0.071 0 9.864 13.68 11.809 15.623 1.872 1.873 9.936 10.873 42.768 4.752 18.504-3.455 32.832-13.823 43.2-23.832 13.392-13.031 6.624-16.775 8.352-23.327 2.521-9.433 10.729-12.96 12.601-23.616 0.216-1.512 0.72-2.664 2.088-4.896 2.088-3.168 1.584-9.432 1.584-15.191 0-14.977-1.729-30.24-5.185-41.472-3.168-10.512-8.208-17.856-12.527-27.36-8.641-18.936-8.208-27.432-15.912-39.528-8.784-13.968-4.464-23.256-16.128-22.68-14.546 0.79-26.282 20.734-40.034 21.31z"/>
+ <path fill="#6d6d6d" d="m159.973 129.334c-9.281 0.353-23.746-25.511-24.242-15.179-0.316 8.755 0.1 8.678 0.03 17.247-0.15 5.87-2.953 6.637-8.727 15.481-3.013 4.763-5.273 9.812-6.993 14.877-0.968 3.253-1.56 6.422-2.43 9.526-0.415 1.642-1.497 3.187-2.185 5.042-3.254 10.78-13.545 24.182-15.961 34.877-2.466 10.81-5.37 17.694-4.961 32.141 0.366 14 0.395 10.177 4.773 13.816 4.283 3.616 8.839 7.069 15.662 13.103 7.183 6.248 22.237 17.216 24.243 20.588 2.149 3.444 2.131 11.317 0.844 13.823-1.284 2.439-12.579 3.875-12.508 3.875-0.071 0 9.815 13.566 11.757 15.508 1.87 1.87 9.902 10.809 42.678 4.704 18.524-3.455 33.124-13.753 43.078-23.856 12.789-12.762 6.107-16.773 7.826-23.291 2.513-9.416 11.277-12.961 13.143-23.602 0.216-1.508 0.754-2.654 2.113-4.876 2.096-3.202 1.561-9.447 1.582-15.185 0.067-15.027-1.705-30.234-5.159-41.434-3.171-10.483-8.204-17.817-12.515-27.305-8.624-18.906-8.221-27.415-15.933-39.474-8.586-13.613-4.601-22.583-16.011-21.99-14.374 0.826-26.375 21.016-40.104 21.584z"/>
+ <path fill="#757575" d="m159.955 130.419c-9.201 0.346-23.299-25.175-23.931-15.383-0.344 8.295-0.017 8.284-0.156 16.494-0.301 5.764-3.17 6.867-8.812 15.555-3.002 4.774-5.148 9.76-6.714 14.706-0.784 3.41-0.889 6.508-1.764 9.548-0.471 1.699-1.986 3.133-3.003 5.259-3.554 10.688-13.624 24.1-16.009 34.619-2.483 10.82-5.411 17.678-4.954 32.097 0.373 13.528 0.285 10.058 4.651 13.739 4.244 3.632 8.893 7.154 15.699 13.171 7.167 6.233 22.299 17.224 24.294 20.585 2.142 3.432 2.175 11.404 0.896 13.896-1.271 2.428-12.558 3.932-12.486 3.932-0.071 0 9.768 13.453 11.705 15.392 1.867 1.867 9.867 10.744 42.588 4.655 18.545-3.453 33.415-13.682 42.956-23.879 12.187-12.492 5.591-16.771 7.3-23.258 2.507-9.398 11.826-12.959 13.687-23.586 0.215-1.5 0.788-2.643 2.138-4.854 2.104-3.235 1.538-9.462 1.58-15.178 0.133-15.076-1.681-30.228-5.135-41.394-3.173-10.455-8.199-17.779-12.501-27.25-8.609-18.877-8.234-27.399-15.952-39.42-8.389-13.258-4.739-21.911-15.895-21.301-14.21 0.859-26.474 21.295-40.182 21.855z"/>
+ <path fill="#7c7c7c" d="m159.938 131.504c-9.122 0.338-22.854-24.838-23.622-15.586-0.37 7.833-0.131 7.89-0.341 15.741-0.452 5.657-3.388 7.096-8.899 15.628-2.99 4.785-5.021 9.708-6.433 14.535-0.602 3.566-0.218 6.594-1.099 9.57-0.526 1.756-2.475 3.08-3.82 5.477-3.854 10.596-13.703 24.016-16.057 34.361-2.501 10.829-5.453 17.66-4.948 32.052 0.38 13.059 0.177 9.939 4.529 13.66 4.208 3.648 8.948 7.239 15.739 13.242 7.149 6.217 22.358 17.232 24.345 20.581 2.13 3.42 2.216 11.489 0.946 13.968-1.259 2.417-12.538 3.99-12.466 3.99-0.072 0 9.718 13.34 11.653 15.275 1.865 1.864 9.833 10.681 42.498 4.607 18.565-3.453 33.706-13.609 42.834-23.902 11.583-12.223 5.074-16.771 6.774-23.223 2.499-9.382 12.375-12.959 14.229-23.57 0.215-1.496 0.821-2.633 2.162-4.834 2.111-3.271 1.516-9.478 1.578-15.173 0.199-15.125-1.657-30.221-5.109-41.354-3.177-10.427-8.196-17.741-12.488-27.195-8.594-18.848-8.247-27.383-15.972-39.366-8.192-12.903-4.877-21.239-15.779-20.612-14.041 0.894-26.569 21.576-40.254 22.128z"/>
+ <path fill="#848484" d="m159.921 132.589c-9.043 0.331-22.406-24.502-23.312-15.79-0.398 7.373-0.247 7.496-0.527 14.988-0.602 5.551-3.604 7.326-8.984 15.702-2.98 4.796-4.896 9.656-6.154 14.364-0.417 3.723 0.455 6.679-0.432 9.592-0.582 1.813-2.964 3.026-4.639 5.694-4.153 10.504-13.782 23.936-16.104 34.104-2.519 10.838-5.495 17.643-4.941 32.008 0.387 12.586 0.067 9.819 4.407 13.582 4.171 3.664 9.002 7.324 15.777 13.311 7.132 6.201 22.419 17.24 24.396 20.576 2.12 3.41 2.259 11.578 0.998 14.041-1.247 2.408-12.517 4.049-12.446 4.049-0.07 0 9.67 13.227 11.604 15.16 1.861 1.861 9.798 10.615 42.409 4.558 18.584-3.45 33.996-13.538 42.711-23.926 10.979-11.952 4.557-16.769 6.248-23.187 2.491-9.367 12.924-12.959 14.771-23.557 0.215-1.49 0.856-2.622 2.188-4.813 2.118-3.305 1.491-9.494 1.575-15.166 0.267-15.174-1.635-30.215-5.086-41.314-3.179-10.399-8.19-17.703-12.473-27.141-8.579-18.818-8.262-27.366-15.994-39.312-7.993-12.547-5.013-20.565-15.661-19.922-13.876 0.927-26.669 21.855-40.331 22.399z"/>
+ <path fill="#8c8c8c" d="m159.903 133.674c-8.963 0.323-21.961-24.165-23.001-15.994-0.426 6.912-0.363 7.102-0.713 14.236-0.753 5.445-3.821 7.554-9.071 15.775-2.969 4.807-4.768 9.604-5.875 14.192-0.232 3.881 1.128 6.766 0.234 9.615-0.638 1.87-3.452 2.972-5.455 5.911-4.455 10.413-13.862 23.853-16.153 33.845-2.537 10.849-5.537 17.625-4.935 31.963 0.393 12.115-0.042 9.701 4.285 13.505 4.133 3.68 9.057 7.409 15.814 13.38 7.116 6.188 22.48 17.248 24.447 20.574 2.109 3.398 2.301 11.662 1.049 14.113-1.235 2.396-12.496 4.104-12.425 4.104-0.071 0 9.622 13.114 11.552 15.045 1.86 1.858 9.763 10.552 42.319 4.509 18.604-3.449 34.288-13.467 42.589-23.949 10.377-11.682 4.04-16.766 5.721-23.15 2.486-9.35 13.474-12.959 15.316-23.542 0.214-1.483 0.89-2.611 2.213-4.793 2.126-3.339 1.468-9.507 1.573-15.158 0.333-15.224-1.611-30.208-5.062-41.276-3.181-10.37-8.186-17.664-12.459-27.085-8.563-18.789-8.275-27.35-16.014-39.258-7.796-12.192-5.151-19.893-15.545-19.233-13.707 0.961-26.763 22.134-40.404 22.671z"/>
+ <path fill="#939393" d="m159.886 134.759c-8.885 0.316-21.516-23.829-22.691-16.197-0.454 6.451-0.479 6.708-0.899 13.482-0.903 5.339-4.038 7.784-9.157 15.849-2.957 4.818-4.642 9.552-5.595 14.021-0.05 4.037 1.799 6.852 0.9 9.637-0.693 1.928-3.941 2.919-6.273 6.129-4.756 10.32-13.941 23.77-16.201 33.587-2.555 10.858-5.579 17.608-4.928 31.92 0.399 11.644-0.151 9.581 4.162 13.424 4.096 3.697 9.111 7.494 15.854 13.451 7.099 6.17 22.541 17.256 24.498 20.569 2.1 3.387 2.344 11.75 1.101 14.186-1.223 2.387-12.476 4.163-12.404 4.163-0.071 0 9.573 13.001 11.5 14.929 1.857 1.856 9.729 10.488 42.229 4.461 18.625-3.449 34.579-13.396 42.467-23.973 9.774-11.412 3.523-16.764 5.195-23.115 2.479-9.334 14.022-12.959 15.858-23.527 0.214-1.479 0.924-2.601 2.238-4.772 2.134-3.373 1.445-9.522 1.571-15.151 0.399-15.273-1.587-30.201-5.036-41.237-3.185-10.342-8.184-17.625-12.446-27.03-8.548-18.76-8.288-27.333-16.034-39.204-7.598-11.837-5.289-19.221-15.428-18.544-13.543 0.994-26.863 22.413-40.481 22.942z"/>
+ <path fill="#9b9b9b" d="m159.868 135.844c-8.805 0.308-21.068-23.492-22.381-16.401-0.481 5.991-0.594 6.314-1.085 12.73-1.053 5.232-4.253 8.013-9.243 15.922-2.946 4.829-4.515 9.5-5.314 13.85 0.133 4.194 2.471 6.937 1.565 9.658-0.749 1.986-4.43 2.866-7.091 6.347-5.056 10.229-14.021 23.689-16.249 33.329-2.572 10.868-5.621 17.591-4.921 31.876 0.405 11.172-0.261 9.463 4.04 13.346 4.058 3.713 9.166 7.58 15.892 13.521 7.082 6.155 22.601 17.265 24.548 20.567 2.092 3.373 2.388 11.834 1.152 14.256-1.21 2.377-12.454 4.222-12.383 4.222-0.071 0 9.523 12.888 11.45 14.813 1.854 1.854 9.692 10.424 42.138 4.412 18.645-3.447 34.871-13.324 42.345-23.996 9.171-11.143 3.007-16.762 4.669-23.08 2.472-9.317 14.572-12.959 16.401-23.514 0.214-1.473 0.958-2.588 2.265-4.75 2.142-3.408 1.421-9.539 1.568-15.145 0.466-15.324-1.564-30.196-5.012-41.198-3.187-10.313-8.179-17.587-12.433-26.976-8.533-18.73-8.301-27.316-16.054-39.149-7.401-11.482-5.426-18.548-15.313-17.855-13.373 1.029-26.958 22.694-40.554 23.215z"/>
+ <path fill="#a3a3a3" d="m159.851 136.929c-8.727 0.301-20.622-23.156-22.071-16.604-0.509 5.529-0.71 5.919-1.271 11.976-1.203 5.126-4.47 8.243-9.328 15.996-2.936 4.84-4.39 9.448-5.036 13.679 0.316 4.351 3.143 7.023 2.231 9.68-0.804 2.043-4.919 2.812-7.908 6.563-5.356 10.137-14.101 23.607-16.298 33.072-2.589 10.877-5.661 17.574-4.913 31.832 0.412 10.699-0.37 9.342 3.918 13.268 4.021 3.729 9.221 7.664 15.93 13.59 7.064 6.139 22.661 17.271 24.599 20.563 2.081 3.363 2.43 11.922 1.204 14.33-1.198 2.365-12.434 4.278-12.363 4.278-0.07 0 9.477 12.774 11.399 14.697 1.851 1.851 9.659 10.36 42.048 4.364 18.666-3.447 35.162-13.254 42.223-24.021 8.568-10.873 2.49-16.761 4.144-23.045 2.464-9.301 15.121-12.958 16.943-23.498 0.215-1.467 0.992-2.579 2.29-4.729 2.148-3.441 1.398-9.553 1.566-15.139 0.532-15.373-1.541-30.189-4.987-41.158-3.188-10.285-8.174-17.549-12.419-26.921-8.518-18.701-8.313-27.3-16.073-39.096-7.204-11.126-5.564-17.875-15.196-17.165-13.21 1.064-27.058 22.975-40.632 23.488z"/>
+ <path fill="#aaa" d="m159.834 138.014c-8.646 0.293-20.176-22.819-21.761-16.808-0.536 5.069-0.826 5.526-1.457 11.224-1.354 5.02-4.687 8.472-9.416 16.069-2.924 4.851-4.262 9.396-4.756 13.508 0.501 4.507 3.814 7.109 2.897 9.702-0.858 2.1-5.406 2.759-8.725 6.782-5.657 10.045-14.181 23.524-16.347 32.812-2.606 10.888-5.703 17.557-4.906 31.787 0.418 10.229-0.479 9.225 3.795 13.189 3.984 3.745 9.275 7.749 15.968 13.66 7.048 6.124 22.723 17.279 24.651 20.559 2.07 3.352 2.472 12.008 1.255 14.402-1.186 2.355-12.414 4.337-12.343 4.337-0.071 0 9.428 12.66 11.348 14.581 1.85 1.848 9.624 10.297 41.958 4.314 18.687-3.444 35.453-13.18 42.102-24.043 7.965-10.602 1.973-16.758 3.616-23.01 2.457-9.283 15.67-12.957 17.487-23.482 0.214-1.461 1.026-2.568 2.315-4.709 2.155-3.477 1.375-9.568 1.563-15.131 0.6-15.424-1.518-30.184-4.963-41.119-3.192-10.257-8.17-17.511-12.405-26.866-8.502-18.672-8.328-27.284-16.095-39.042-7.005-10.771-5.701-17.203-15.078-16.476-13.04 1.098-27.152 23.255-40.703 23.76z"/>
+ <path fill="#b2b2b2" d="m159.816 139.099c-8.567 0.286-19.729-22.483-21.45-17.012-0.563 4.608-0.942 5.132-1.643 10.471-1.506 4.914-4.904 8.701-9.502 16.143-2.913 4.862-4.137 9.344-4.477 13.336 0.685 4.665 4.486 7.195 3.564 9.725-0.915 2.157-5.897 2.705-9.543 6.999-5.958 9.953-14.262 23.443-16.396 32.554-2.624 10.898-5.745 17.54-4.9 31.744 0.426 9.757-0.588 9.105 3.674 13.111 3.945 3.761 9.33 7.834 16.006 13.729 7.032 6.109 22.783 17.288 24.702 20.557 2.06 3.338 2.515 12.094 1.306 14.473-1.173 2.346-12.392 4.395-12.321 4.395-0.07 0 9.379 12.549 11.296 14.465 1.847 1.848 9.591 10.234 41.868 4.268 18.706-3.444 35.745-13.11 41.979-24.066 7.361-10.332 1.456-16.757 3.091-22.974 2.45-9.269 16.219-12.958 18.03-23.47 0.213-1.455 1.06-2.557 2.34-4.688 2.164-3.509 1.352-9.583 1.562-15.124 0.665-15.473-1.494-30.177-4.938-41.08-3.195-10.228-8.166-17.472-12.393-26.811-8.486-18.642-8.341-27.267-16.114-38.987-6.809-10.416-5.838-16.531-14.962-15.787-12.873 1.129-27.25 23.531-40.779 24.029z"/>
+ <path fill="#bababa" d="m159.799 140.184c-8.487 0.279-19.282-22.146-21.141-17.215-0.591 4.147-1.057 4.737-1.828 9.717-1.656 4.808-5.121 8.931-9.588 16.217-2.902 4.873-4.01 9.292-4.197 13.165 0.868 4.822 5.158 7.281 4.23 9.747-0.971 2.215-6.385 2.651-10.361 7.216-6.258 9.861-14.339 23.36-16.442 32.297-2.643 10.906-5.787 17.521-4.894 31.699 0.432 9.285-0.697 8.986 3.552 13.032 3.908 3.776 9.384 7.919 16.043 13.799 7.016 6.093 22.845 17.296 24.753 20.552 2.051 3.328 2.559 12.18 1.358 14.547-1.161 2.334-12.372 4.451-12.301 4.451-0.071 0 9.33 12.436 11.245 14.35 1.844 1.844 9.555 10.17 41.777 4.219 18.727-3.443 36.036-13.039 41.857-24.09 6.759-10.063 0.939-16.756 2.565-22.939 2.442-9.25 16.768-12.957 18.572-23.453 0.213-1.451 1.095-2.547 2.365-4.668 2.171-3.543 1.329-9.599 1.56-15.117 0.732-15.522-1.471-30.172-4.913-41.042-3.197-10.2-8.161-17.433-12.379-26.756-8.471-18.612-8.354-27.25-16.135-38.933-6.609-10.061-5.976-15.858-14.845-15.098-12.706 1.165-27.347 23.813-40.853 24.303z"/>
+ <path fill="#c1c1c1" d="m159.781 141.269c-8.408 0.271-18.837-21.81-20.83-17.419-0.619 3.687-1.173 4.344-2.014 8.965-1.808 4.701-5.338 9.16-9.674 16.29-2.892 4.884-3.885 9.24-3.918 12.994 1.052 4.978 5.829 7.367 4.896 9.769-1.026 2.272-6.874 2.598-11.178 7.434-6.56 9.769-14.419 23.277-16.491 32.039-2.66 10.916-5.829 17.504-4.887 31.656 0.438 8.813-0.807 8.867 3.43 12.953 3.87 3.793 9.438 8.004 16.082 13.868 6.997 6.077 22.904 17.304 24.803 20.55 2.041 3.314 2.601 12.266 1.409 14.617-1.149 2.324-12.351 4.51-12.28 4.51-0.07 0 9.282 12.321 11.194 14.233 1.841 1.842 9.521 10.106 41.688 4.17 18.746-3.44 36.326-12.967 41.734-24.112 6.156-9.793 0.423-16.754 2.038-22.904 2.438-9.235 17.318-12.957 19.117-23.438 0.212-1.444 1.128-2.536 2.39-4.647 2.18-3.578 1.306-9.613 1.558-15.11 0.799-15.571-1.447-30.165-4.889-41.002-3.2-10.172-8.156-17.395-12.364-26.701-8.456-18.583-8.367-27.234-16.155-38.88-6.413-9.705-6.114-15.185-14.729-14.408-12.541 1.197-27.445 24.091-40.93 24.573z"/>
+ <path fill="#c9c9c9" d="m159.764 142.354c-8.329 0.264-18.392-21.473-20.521-17.622-0.646 3.225-1.289 3.949-2.2 8.211-1.957 4.596-5.555 9.39-9.761 16.364-2.879 4.895-3.757 9.188-3.638 12.823 1.235 5.135 6.502 7.453 5.562 9.791-1.081 2.329-7.362 2.544-11.995 7.651-6.859 9.677-14.499 23.195-16.54 31.78-2.677 10.927-5.87 17.488-4.879 31.611 0.444 8.344-0.916 8.748 3.307 12.875 3.834 3.81 9.492 8.09 16.121 13.939 6.98 6.061 22.965 17.311 24.854 20.545 2.031 3.303 2.643 12.352 1.461 14.69-1.137 2.313-12.33 4.567-12.26 4.567-0.07 0 9.233 12.209 11.143 14.117 1.839 1.84 9.486 10.043 41.599 4.122 18.767-3.44 36.618-12.896 41.612-24.137 5.554-9.522-0.094-16.751 1.513-22.868 2.43-9.219 17.866-12.957 19.659-23.424 0.213-1.439 1.162-2.525 2.415-4.627 2.188-3.612 1.282-9.629 1.556-15.104 0.865-15.621-1.424-30.158-4.864-40.962-3.202-10.144-8.153-17.357-12.351-26.646-8.441-18.554-8.381-27.218-16.176-38.826-6.216-9.35-6.251-14.513-14.612-13.719-12.374 1.235-27.543 24.375-41.005 24.849z"/>
+ <path fill="#d1d1d1" d="m159.747 143.439c-8.25 0.256-17.944-21.137-20.21-17.826-0.675 2.765-1.406 3.555-2.386 7.459-2.108 4.489-5.772 9.619-9.847 16.437-2.869 4.906-3.631 9.136-3.358 12.652 1.419 5.292 7.174 7.538 6.228 9.812-1.137 2.387-7.852 2.491-12.813 7.869-7.161 9.586-14.579 23.114-16.588 31.522-2.695 10.938-5.912 17.471-4.873 31.568 0.451 7.871-1.025 8.629 3.185 12.797 3.796 3.824 9.547 8.174 16.158 14.008 6.964 6.047 23.026 17.32 24.905 20.541 2.021 3.292 2.686 12.439 1.513 14.764-1.125 2.303-12.31 4.625-12.239 4.625-0.07 0 9.186 12.094 11.092 14.002 1.836 1.836 9.45 9.978 41.509 4.072 18.786-3.439 36.909-12.824 41.49-24.16 4.948-9.252-0.611-16.748 0.985-22.832 2.423-9.203 18.415-12.957 20.203-23.41 0.212-1.434 1.196-2.514 2.44-4.605 2.193-3.646 1.259-9.645 1.553-15.098 0.932-15.67-1.4-30.151-4.84-40.922-3.205-10.115-8.148-17.319-12.336-26.592-8.427-18.524-8.396-27.201-16.197-38.771-6.017-8.995-6.388-13.84-14.495-13.03-12.207 1.266-27.64 24.652-41.079 25.118z"/>
+ <path fill="#d8d8d8" d="m159.729 144.524c-8.17 0.249-17.498-20.8-19.9-18.03-0.702 2.304-1.521 3.162-2.571 6.706-2.259 4.383-5.988 9.848-9.933 16.511-2.858 4.917-3.504 9.084-3.079 12.48 1.604 5.449 7.846 7.625 6.895 9.835-1.193 2.444-8.342 2.438-13.631 8.087-7.461 9.493-14.658 23.031-16.637 31.262-2.712 10.947-5.953 17.455-4.865 31.524 0.458 7.399-1.135 8.511 3.063 12.718 3.758 3.842 9.601 8.26 16.196 14.078 6.946 6.031 23.087 17.328 24.956 20.538 2.011 3.28 2.729 12.524 1.563 14.835-1.112 2.293-12.289 4.684-12.218 4.684-0.071 0 9.136 11.981 11.04 13.886 1.834 1.834 9.417 9.913 41.419 4.024 18.807-3.438 37.2-12.752 41.368-24.184 4.346-8.982-1.128-16.747 0.46-22.798 2.416-9.187 18.964-12.956 20.746-23.394 0.211-1.429 1.229-2.504 2.465-4.586 2.202-3.681 1.236-9.658 1.551-15.091 0.998-15.72-1.377-30.146-4.814-40.884-3.208-10.086-8.145-17.28-12.323-26.536-8.411-18.495-8.408-27.185-16.217-38.717-5.82-8.64-6.526-13.168-14.38-12.341-12.04 1.303-27.736 24.934-41.154 25.393z"/>
+ <path fill="#e0e0e0" d="m159.712 145.609c-8.091 0.241-17.052-20.464-19.59-18.233-0.729 1.843-1.637 2.767-2.757 5.953-2.409 4.276-6.206 10.077-10.02 16.584-2.847 4.928-3.378 9.032-2.8 12.309 1.787 5.606 8.519 7.711 7.561 9.857-1.248 2.502-8.829 2.384-14.448 8.304-7.761 9.402-14.738 22.95-16.684 31.006-2.731 10.955-5.996 17.436-4.859 31.48 0.464 6.928-1.244 8.389 2.939 12.639 3.722 3.857 9.656 8.344 16.234 14.148 6.932 6.014 23.148 17.336 25.008 20.533 2 3.268 2.771 12.611 1.615 14.907-1.1 2.282-12.268 4.741-12.198 4.741-0.069 0 9.089 11.867 10.989 13.77 1.831 1.831 9.382 9.85 41.329 3.977 18.827-3.438 37.492-12.683 41.246-24.207 3.743-8.715-1.646-16.746-0.066-22.762 2.409-9.171 19.514-12.957 21.289-23.381 0.211-1.422 1.265-2.494 2.49-4.564 2.21-3.715 1.213-9.674 1.549-15.084 1.065-15.77-1.354-30.139-4.791-40.844-3.21-10.058-8.14-17.241-12.309-26.481-8.396-18.466-8.421-27.168-16.237-38.664-5.622-8.284-6.663-12.495-14.262-11.651-11.872 1.335-27.833 25.212-41.228 25.663z"/>
+ <path fill="#e8e8e8" d="m159.694 146.694c-8.012 0.234-16.605-20.127-19.279-18.437-0.757 1.383-1.753 2.373-2.943 5.2-2.56 4.171-6.423 10.307-10.105 16.658-2.835 4.939-3.251 8.979-2.52 12.138 1.97 5.763 9.189 7.796 8.226 9.879-1.303 2.559-9.318 2.33-15.265 8.521-8.063 9.31-14.818 22.867-16.733 30.748-2.748 10.967-6.037 17.419-4.853 31.436 0.472 6.457-1.353 8.271 2.818 12.562 3.685 3.873 9.711 8.429 16.273 14.218 6.913 6 23.207 17.344 25.058 20.529 1.991 3.257 2.814 12.697 1.666 14.98-1.087 2.271-12.247 4.799-12.177 4.799-0.07 0 9.04 11.755 10.938 13.654 1.829 1.828 9.349 9.785 41.239 3.926 18.847-3.435 37.783-12.609 41.124-24.229 3.14-8.444-2.161-16.743-0.592-22.728 2.401-9.152 20.062-12.955 21.831-23.364 0.211-1.417 1.298-2.483 2.516-4.544 2.217-3.748 1.19-9.689 1.547-15.076 1.132-15.82-1.331-30.133-4.766-40.806-3.213-10.03-8.136-17.203-12.296-26.427-8.38-18.436-8.435-27.151-16.257-38.609-5.425-7.929-6.802-11.822-14.146-10.962-11.706 1.368-27.931 25.491-41.304 25.934z"/>
+ <path fill="#efefef" d="m159.677 147.779c-7.934 0.226-16.16-19.791-18.97-18.64-0.785 0.921-1.869 1.979-3.13 4.447-2.71 4.064-6.639 10.536-10.19 16.731-2.824 4.95-3.125 8.928-2.24 11.967 2.152 5.919 9.86 7.882 8.892 9.901-1.358 2.616-9.808 2.277-16.083 8.739-8.363 9.218-14.896 22.784-16.781 30.489-2.766 10.977-6.079 17.402-4.846 31.393 0.478 5.984-1.462 8.152 2.696 12.482 3.646 3.889 9.765 8.514 16.311 14.287 6.896 5.983 23.269 17.352 25.109 20.526 1.98 3.245 2.855 12.782 1.718 15.052-1.076 2.262-12.227 4.857-12.156 4.857-0.07 0 8.991 11.641 10.887 13.537 1.826 1.826 9.313 9.723 41.148 3.879 18.868-3.434 38.074-12.538 41.002-24.254 2.537-8.174-2.678-16.741-1.119-22.69 2.396-9.138 20.612-12.957 22.375-23.351 0.212-1.412 1.332-2.473 2.541-4.523 2.226-3.783 1.166-9.704 1.545-15.07 1.197-15.869-1.307-30.125-4.741-40.766-3.215-10.002-8.131-17.165-12.282-26.372-8.365-18.407-8.447-27.135-16.277-38.555-5.228-7.574-6.938-11.15-14.029-10.272-11.541 1.402-28.029 25.771-41.38 26.206z"/>
+ <path fill="#f7f7f7" d="m159.66 148.864c-7.854 0.219-15.714-19.454-18.66-18.844-0.812 0.461-1.983 1.585-3.314 3.694-2.86 3.958-6.856 10.766-10.278 16.805-2.813 4.961-2.998 8.876-1.96 11.796 2.337 6.076 10.533 7.968 9.558 9.923-1.415 2.673-10.296 2.223-16.899 8.956-8.664 9.126-14.978 22.702-16.83 30.23-2.783 10.986-6.121 17.386-4.839 31.349 0.484 5.515-1.571 8.033 2.573 12.403 3.609 3.906 9.82 8.6 16.35 14.357 6.88 5.969 23.329 17.36 25.16 20.523 1.971 3.232 2.898 12.869 1.77 15.124-1.063 2.252-12.206 4.915-12.136 4.915-0.07 0 8.942 11.527 10.835 13.422 1.824 1.822 9.279 9.658 41.059 3.83 18.889-3.434 38.366-12.467 40.881-24.278 1.934-7.903-3.195-16.739-1.646-22.655 2.388-9.121 21.161-12.955 22.918-23.336 0.211-1.404 1.366-2.461 2.566-4.502 2.232-3.816 1.143-9.719 1.542-15.063 1.265-15.92-1.283-30.12-4.717-40.727-3.219-9.974-8.128-17.127-12.269-26.317-8.349-18.378-8.461-27.119-16.298-38.501-5.029-7.219-7.075-10.478-13.912-9.584-11.373 1.438-28.126 26.053-41.454 26.48z"/>
+ <path fill="#fff" d="m159.642 149.949c-7.774 0.211-15.268-19.118-18.35-19.048-0.84 0-2.1 1.191-3.501 2.941-3.011 3.852-7.072 10.995-10.363 16.878-2.803 4.972-2.872 8.824-1.682 11.625 2.521 6.233 11.205 8.054 10.225 9.945-1.471 2.731-10.785 2.17-17.719 9.174-8.964 9.034-15.056 22.621-16.877 29.973-2.801 10.995-6.163 17.368-4.832 31.304 0.49 5.043-1.681 7.914 2.451 12.325 3.571 3.923 9.874 8.685 16.387 14.427 6.863 5.953 23.391 17.368 25.211 20.521 1.962 3.221 2.942 12.954 1.821 15.196-1.051 2.24-12.185 4.972-12.115 4.972-0.069 0 8.895 11.416 10.784 13.307 1.821 1.82 9.244 9.595 40.97 3.781 18.907-3.431 38.656-12.396 40.758-24.302 1.331-7.633-3.712-16.736-2.171-22.619 2.381-9.104 21.71-12.956 23.461-23.321 0.21-1.399 1.399-2.45 2.591-4.481 2.24-3.852 1.12-9.734 1.54-15.057 1.331-15.968-1.26-30.113-4.692-40.688-3.221-9.945-8.123-17.088-12.255-26.262-8.334-18.348-8.474-27.102-16.318-38.447-4.832-6.863-7.213-9.805-13.796-8.894-11.205 1.469-28.222 26.33-41.528 26.75z"/>
+ </g>
+ <path fill="#995900" d="m152.553 88.8575c5.256-0.648 12.456 0.648 15.769 3.096 3.096 2.304 5.256 3.528 8.063 4.464 9.433 3.096 21.816 4.536 21.24 13.032-0.648 10.151-3.6 14.688-12.024 17.351-6.768 2.088-18.863 13.824-28.224 13.824-4.176 0-10.008 0.216-13.392-1.008-3.24-1.152-7.776-6.624-13.104-11.016-5.328-4.32-10.296-8.928-10.439-14.976-0.217-6.407 3.96-8.496 9.863-13.607 3.097-2.736 8.712-7.272 12.601-9.288 3.599-1.799 5.903-1.439 9.647-1.872z"/>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#9e5f00" d="m165.068 78.951c5.225-0.644 12.384 0.645 15.677 3.079 3.078 2.29 5.227 3.51 8.018 4.438 9.375 3.078 21.729 4.529 21.159 12.973-0.641 10.09-3.669 14.581-12.041 17.223-6.723 2.073-18.768 13.589-28.07 13.64-4.21 0.032-9.926 0.234-13.287-0.977-3.215-1.142-7.737-6.608-13.031-10.969-5.291-4.292-10.26-8.774-10.317-14.765-0.153-6.252 3.912-8.411 9.773-13.488 3.071-2.71 8.594-7.303 12.463-9.333 3.563-1.803 5.933-1.392 9.656-1.821z"/>
+ <path fill="#a36400" d="m165.177 79.044c5.195-0.641 12.313 0.64 15.587 3.06 3.06 2.278 5.194 3.494 7.971 4.413 9.317 3.06 21.641 4.522 21.078 12.914-0.634 10.027-3.737 14.474-12.058 17.094-6.678 2.057-18.673 13.352-27.919 13.454-4.241 0.064-9.842 0.252-13.18-0.945-3.19-1.133-7.7-6.592-12.96-10.921-5.254-4.264-10.222-8.622-10.192-14.555-0.093-6.099 3.863-8.329 9.681-13.369 3.048-2.685 8.478-7.335 12.328-9.379 3.526-1.804 5.963-1.338 9.664-1.766z"/>
+ <path fill="#a86a00" d="m165.287 79.138c5.165-0.637 12.241 0.637 15.496 3.043 3.042 2.264 5.165 3.476 7.924 4.387 9.26 3.042 21.556 4.515 20.998 12.854-0.627 9.968-3.805 14.368-12.074 16.967-6.633 2.042-18.576 13.117-27.766 13.27-4.276 0.096-9.759 0.27-13.075-0.914-3.165-1.123-7.661-6.577-12.887-10.874-5.217-4.236-10.187-8.468-10.069-14.345-0.03-5.943 3.815-8.244 9.589-13.249 3.023-2.66 8.36-7.366 12.191-9.424 3.49-1.808 5.993-1.291 9.673-1.715z"/>
+ <path fill="#ad7000" d="m165.396 79.23c5.135-0.633 12.17 0.633 15.404 3.025 3.025 2.251 5.137 3.46 7.88 4.361 9.201 3.025 21.467 4.508 20.917 12.796-0.62 9.905-3.874 14.26-12.093 16.837-6.586 2.027-18.479 12.882-27.611 13.086-4.311 0.127-9.677 0.287-12.971-0.883-3.14-1.113-7.622-6.561-12.814-10.826-5.18-4.208-10.148-8.315-9.945-14.135 0.031-5.789 3.768-8.16 9.497-13.129 2.999-2.635 8.244-7.398 12.055-9.47 3.454-1.808 6.023-1.24 9.681-1.662z"/>
+ <path fill="#b27600" d="m165.506 79.325c5.105-0.63 12.099 0.629 15.314 3.007 3.007 2.237 5.104 3.442 7.832 4.335 9.145 3.007 21.38 4.501 20.837 12.737-0.614 9.844-3.943 14.154-12.109 16.709-6.541 2.011-18.385 12.645-27.46 12.9-4.342 0.16-9.592 0.306-12.862-0.851-3.115-1.103-7.584-6.545-12.743-10.779-5.144-4.18-10.112-8.162-9.821-13.924 0.092-5.634 3.718-8.076 9.405-13.009 2.975-2.609 8.126-7.429 11.919-9.514 3.416-1.812 6.052-1.192 9.688-1.611z"/>
+ <path fill="#b77b00" d="m165.615 79.417c5.075-0.626 12.026 0.626 15.224 2.989 2.989 2.225 5.075 3.425 7.786 4.31 9.087 2.989 21.292 4.494 20.756 12.678-0.606 9.781-4.012 14.046-12.126 16.581-6.496 1.997-18.289 12.41-27.307 12.716-4.376 0.191-9.51 0.323-12.758-0.82-3.09-1.094-7.546-6.53-12.671-10.732-5.106-4.152-10.074-8.008-9.697-13.713 0.155-5.479 3.67-7.992 9.313-12.889 2.951-2.585 8.011-7.461 11.783-9.56 3.38-1.814 6.083-1.143 9.697-1.56z"/>
+ <path fill="#bc8100" d="m165.725 79.511c5.044-0.622 11.954 0.622 15.133 2.972 2.971 2.211 5.045 3.408 7.739 4.284 9.029 2.971 21.205 4.487 20.675 12.619-0.6 9.719-4.079 13.939-12.143 16.451-6.45 1.982-18.192 12.175-27.153 12.532-4.41 0.223-9.428 0.341-12.653-0.789-3.065-1.084-7.507-6.514-12.598-10.684-5.069-4.124-10.038-7.855-9.574-13.504 0.217-5.324 3.622-7.908 9.222-12.77 2.926-2.559 7.894-7.492 11.646-9.605 3.344-1.816 6.113-1.092 9.706-1.506z"/>
+ <path fill="#c18700" d="m165.834 79.604c5.015-0.618 11.883 0.619 15.043 2.954 2.953 2.198 5.015 3.391 7.693 4.259 8.972 2.953 21.118 4.48 20.594 12.559-0.593 9.66-4.147 13.833-12.159 16.324-6.405 1.967-18.098 11.94-27.002 12.347-4.441 0.255-9.343 0.359-12.546-0.757-3.04-1.074-7.469-6.498-12.526-10.637-5.032-4.096-10-7.701-9.45-13.293 0.278-5.169 3.574-7.823 9.13-12.649 2.903-2.534 7.776-7.524 11.511-9.651 3.306-1.821 6.141-1.044 9.712-1.456z"/>
+ <path fill="#c68d00" d="m165.944 79.697c4.984-0.615 11.811 0.614 14.952 2.936 2.935 2.184 4.983 3.374 7.646 4.233 8.915 2.935 21.031 4.473 20.515 12.5-0.586 9.597-4.218 13.726-12.177 16.195-6.36 1.951-18.002 11.703-26.849 12.162-4.476 0.287-9.261 0.377-12.441-0.726-3.015-1.064-7.431-6.482-12.453-10.589-4.995-4.068-9.965-7.549-9.326-13.083 0.34-5.015 3.524-7.741 9.038-12.531 2.878-2.508 7.658-7.555 11.374-9.696 3.269-1.82 6.171-0.992 9.721-1.401z"/>
+ <path fill="#cc9200" d="m166.054 79.791c4.952-0.61 11.738 0.611 14.86 2.918 2.918 2.172 4.954 3.357 7.601 4.207 8.857 2.918 20.942 4.466 20.432 12.442-0.578 9.536-4.285 13.62-12.192 16.066-6.314 1.936-17.906 11.468-26.696 11.978-4.509 0.319-9.178 0.394-12.335-0.696-2.989-1.054-7.393-6.466-12.382-10.541-4.959-4.04-9.928-7.395-9.202-12.873 0.401-4.859 3.477-7.655 8.945-12.411 2.854-2.482 7.542-7.586 11.239-9.741 3.233-1.824 6.201-0.943 9.73-1.349z"/>
+ <path fill="#d19800" d="m166.163 79.883c4.923-0.606 11.668 0.608 14.771 2.901 2.9 2.158 4.924 3.339 7.554 4.181 8.801 2.9 20.855 4.459 20.352 12.383-0.571 9.474-4.353 13.512-12.21 15.938-6.269 1.921-17.81 11.233-26.543 11.793-4.542 0.351-9.094 0.413-12.229-0.664-2.965-1.044-7.354-6.45-12.311-10.494-4.921-4.012-9.89-7.241-9.079-12.662 0.465-4.705 3.431-7.571 8.855-12.29 2.83-2.458 7.425-7.618 11.102-9.787 3.197-1.827 6.231-0.893 9.738-1.299z"/>
+ <path fill="#d69e00" d="m166.273 79.978c4.893-0.603 11.596 0.603 14.679 2.882 2.883 2.145 4.895 3.323 7.507 4.156 8.744 2.882 20.77 4.452 20.272 12.324-0.565 9.412-4.422 13.406-12.228 15.81-6.224 1.905-17.714 10.996-26.39 11.608-4.576 0.383-9.012 0.431-12.124-0.633-2.94-1.034-7.316-6.434-12.237-10.446-4.884-3.984-9.854-7.089-8.955-12.452 0.525-4.551 3.382-7.489 8.764-12.171 2.805-2.432 7.307-7.649 10.965-9.832 3.16-1.829 6.261-0.845 9.747-1.246z"/>
+ <path fill="#dba300" d="m166.382 80.07c4.863-0.599 11.525 0.6 14.59 2.865 2.864 2.131 4.862 3.305 7.461 4.13 8.686 2.864 20.682 4.445 20.19 12.264-0.559 9.352-4.491 13.299-12.244 15.681-6.179 1.89-17.619 10.761-26.237 11.423-4.608 0.415-8.929 0.449-12.018-0.601-2.915-1.024-7.277-6.418-12.166-10.399-4.847-3.956-9.815-6.935-8.831-12.241 0.587-4.396 3.333-7.404 8.671-12.051 2.782-2.407 7.191-7.681 10.83-9.878 3.123-1.829 6.29-0.793 9.754-1.193z"/>
+ <path fill="#e0a900" d="m166.492 80.164c4.832-0.595 11.453 0.596 14.498 2.847 2.847 2.118 4.833 3.289 7.414 4.104 8.629 2.846 20.595 4.438 20.111 12.205-0.553 9.29-4.56 13.193-12.262 15.553-6.134 1.875-17.522 10.526-26.085 11.239-4.642 0.447-8.845 0.467-11.912-0.57-2.89-1.015-7.238-6.402-12.093-10.351-4.81-3.928-9.78-6.782-8.708-12.032 0.649-4.241 3.285-7.32 8.58-11.932 2.757-2.381 7.073-7.712 10.693-9.923 3.088-1.831 6.321-0.743 9.764-1.14z"/>
+ <path fill="#e5af00" d="m166.601 80.257c4.803-0.592 11.382 0.592 14.407 2.829 2.829 2.105 4.804 3.271 7.368 4.079 8.571 2.828 20.507 4.431 20.029 12.146-0.544 9.228-4.627 13.085-12.277 15.423-6.089 1.861-17.427 10.29-25.932 11.055-4.676 0.478-8.763 0.484-11.807-0.539-2.865-1.005-7.2-6.387-12.021-10.304-4.772-3.9-9.742-6.629-8.583-11.821 0.711-4.085 3.236-7.236 8.487-11.812 2.732-2.357 6.957-7.744 10.557-9.968 3.052-1.834 6.351-0.694 9.772-1.088z"/>
+ <path fill="#eab500" d="m166.711 80.351c4.772-0.588 11.31 0.589 14.317 2.811 2.811 2.092 4.771 3.254 7.321 4.054 8.514 2.81 20.42 4.424 19.948 12.087-0.538 9.165-4.695 12.979-12.294 15.295-6.044 1.845-17.332 10.054-25.779 10.869-4.708 0.511-8.68 0.503-11.7-0.507-2.84-0.995-7.163-6.371-11.949-10.257-4.736-3.872-9.706-6.475-8.46-11.61 0.773-3.931 3.188-7.152 8.396-11.692 2.709-2.331 6.839-7.775 10.421-10.013 3.013-1.839 6.38-0.645 9.779-1.037z"/>
+ <path fill="#efba00" d="m166.82 80.443c4.742-0.584 11.238 0.585 14.226 2.794 2.794 2.078 4.743 3.237 7.276 4.027 8.456 2.793 20.332 4.417 19.868 12.029-0.531 9.104-4.766 12.872-12.313 15.167-5.997 1.83-17.234 9.819-25.626 10.685-4.742 0.542-8.596 0.52-11.595-0.476-2.815-0.985-7.124-6.355-11.877-10.209-4.699-3.844-9.668-6.322-8.336-11.4 0.835-3.778 3.14-7.068 8.304-11.573 2.686-2.306 6.724-7.807 10.285-10.059 2.978-1.84 6.411-0.595 9.788-0.985z"/>
+ <path fill="#f4c000" d="m166.93 80.537c4.711-0.58 11.166 0.582 14.135 2.776 2.775 2.066 4.713 3.22 7.229 4.002 8.399 2.775 20.246 4.41 19.787 11.969-0.522 9.043-4.832 12.765-12.328 15.039-5.952 1.815-17.139 9.584-25.473 10.501-4.776 0.574-8.513 0.538-11.49-0.445-2.79-0.976-7.085-6.34-11.804-10.162-4.662-3.816-9.632-6.168-8.213-11.189 0.896-3.623 3.092-6.984 8.213-11.454 2.66-2.281 6.604-7.838 10.147-10.104 2.942-1.844 6.441-0.547 9.797-0.933z"/>
+ <path fill="#f9c600" d="m167.039 80.63c4.683-0.577 11.095 0.577 14.045 2.758 2.758 2.052 4.683 3.203 7.184 3.976 8.341 2.757 20.157 4.403 19.706 11.91-0.518 8.981-4.901 12.659-12.346 14.911-5.906 1.799-17.044 9.347-25.32 10.315-4.809 0.606-8.431 0.556-11.384-0.413-2.765-0.966-7.048-6.324-11.732-10.114-4.625-3.788-9.594-6.016-8.088-10.98 0.958-3.467 3.043-6.9 8.12-11.333 2.637-2.256 6.488-7.87 10.013-10.15 2.902-1.844 6.468-0.495 9.802-0.88z"/>
+ </g>
+ <path fill="#fc0" d="m154.744 90.7245c4.65-0.573 11.022 0.574 13.954 2.74 2.739 2.039 4.651 3.186 7.136 3.951 8.284 2.739 20.071 4.396 19.626 11.851-0.51 8.919-4.97 12.551-12.362 14.781-5.861 1.784-16.947 9.112-25.168 10.131-4.842 0.638-8.347 0.574-11.277-0.382-2.74-0.956-7.01-6.308-11.66-10.067-4.588-3.76-9.559-5.862-7.965-10.769 1.02-3.313 2.995-6.816 8.028-11.213 2.612-2.23 6.371-7.901 9.876-10.195 2.867-1.847 6.499-0.447 9.812-0.828z"/>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fc0" d="m167.982 83.609c1.008 2.088 3.6 2.376 5.328 3.312 1.655 0.936 2.592 1.152 3.239 0.792 1.44-0.792 0.36-3.384-1.079-4.32-1.368-0.935-8.064-1.151-7.488 0.216z"/>
+ <path fill="#f9c600" d="m168.125 83.631c0.982 2.035 3.508 2.316 5.193 3.229 1.614 0.912 2.526 1.123 3.158 0.771 1.402-0.771 0.35-3.298-1.054-4.21-1.332-0.913-7.859-1.123-7.297 0.21z"/>
+ <path fill="#f4c000" d="m168.267 83.653c0.957 1.982 3.418 2.255 5.058 3.144 1.572 0.889 2.461 1.094 3.076 0.752 1.367-0.752 0.342-3.213-1.025-4.101-1.299-0.889-7.656-1.094-7.109 0.205z"/>
+ <path fill="#efba00" d="m168.409 83.674c0.932 1.929 3.327 2.195 4.924 3.06 1.53 0.865 2.395 1.064 2.993 0.732 1.331-0.732 0.333-3.127-0.998-3.992-1.264-0.864-7.451-1.064-6.919 0.2z"/>
+ <path fill="#eab500" d="m168.552 83.696c0.905 1.876 3.234 2.135 4.787 2.977 1.488 0.841 2.329 1.035 2.912 0.711 1.294-0.711 0.323-3.041-0.971-3.882-1.228-0.841-7.246-1.036-6.728 0.194z"/>
+ <path fill="#e5af00" d="m168.694 83.718c0.881 1.823 3.144 2.075 4.653 2.892 1.446 0.818 2.264 1.006 2.83 0.692 1.257-0.692 0.313-2.956-0.943-3.773-1.195-0.818-7.043-1.007-6.54 0.189z"/>
+ <path fill="#e0a900" d="m168.837 83.739c0.855 1.771 3.053 2.015 4.519 2.809 1.403 0.793 2.198 0.977 2.747 0.671 1.221-0.671 0.306-2.87-0.916-3.664-1.161-0.793-6.839-0.976-6.35 0.184z"/>
+ <path fill="#dba300" d="m168.979 83.761c0.829 1.718 2.962 1.955 4.383 2.725 1.363 0.77 2.132 0.948 2.666 0.651 1.184-0.651 0.296-2.784-0.889-3.554-1.125-0.77-6.634-0.948-6.16 0.178z"/>
+ <path fill="#d69e00" d="m169.121 83.782c0.804 1.665 2.871 1.895 4.249 2.641 1.32 0.747 2.066 0.918 2.583 0.631 1.148-0.631 0.287-2.698-0.861-3.444-1.091-0.746-6.43-0.919-5.971 0.172z"/>
+ <path fill="#d19800" d="m169.264 83.804c0.777 1.612 2.778 1.834 4.112 2.557 1.279 0.723 2.001 0.889 2.501 0.611 1.112-0.611 0.278-2.612-0.834-3.335-1.055-0.722-6.224-0.889-5.779 0.167z"/>
+ <path fill="#cc9200" d="m169.406 83.826c0.753 1.559 2.688 1.774 3.979 2.473 1.236 0.699 1.936 0.86 2.42 0.591 1.074-0.591 0.269-2.527-0.808-3.226-1.021-0.699-6.021-0.86-5.591 0.162z"/>
+ <path fill="#c68c00" d="m169.549 83.847c0.728 1.506 2.597 1.714 3.844 2.389 1.194 0.675 1.869 0.831 2.337 0.571 1.039-0.571 0.26-2.441-0.779-3.116-0.988-0.675-5.818-0.831-5.402 0.156z"/>
+ <path fill="#c18700" d="m169.691 83.869c0.702 1.453 2.506 1.654 3.709 2.305 1.152 0.652 1.803 0.802 2.254 0.551 1.002-0.551 0.251-2.355-0.751-3.006-0.953-0.652-5.613-0.802-5.212 0.15z"/>
+ <path fill="#bc8100" d="m169.833 83.89c0.677 1.4 2.415 1.594 3.574 2.221 1.111 0.628 1.738 0.772 2.173 0.531 0.965-0.531 0.241-2.27-0.725-2.897-0.917-0.627-5.408-0.772-5.022 0.145z"/>
+ <path fill="#b77b00" d="m169.976 83.912c0.65 1.347 2.322 1.533 3.438 2.137 1.069 0.604 1.673 0.743 2.091 0.511 0.93-0.511 0.233-2.184-0.696-2.788-0.884-0.603-5.205-0.743-4.833 0.14z"/>
+ <path fill="#b27500" d="m170.118 83.934c0.626 1.294 2.232 1.473 3.304 2.053 1.027 0.581 1.606 0.714 2.009 0.491 0.893-0.491 0.224-2.098-0.669-2.678-0.85-0.58-5.001-0.715-4.644 0.134z"/>
+ <path fill="#ad7000" d="m170.261 83.955c0.6 1.242 2.14 1.413 3.168 1.97 0.984 0.557 1.541 0.685 1.927 0.47 0.855-0.47 0.214-2.012-0.644-2.569-0.812-0.555-4.794-0.684-4.451 0.129z"/>
+ <path fill="#a86a00" d="m170.403 83.977c0.574 1.189 2.05 1.353 3.034 1.886 0.942 0.533 1.475 0.656 1.844 0.45 0.82-0.45 0.205-1.926-0.615-2.459-0.779-0.533-4.591-0.656-4.263 0.123z"/>
+ <path fill="#a36400" d="m170.545 83.998c0.55 1.136 1.959 1.292 2.899 1.802 0.901 0.509 1.41 0.626 1.762 0.43 0.783-0.43 0.197-1.841-0.587-2.35-0.745-0.508-4.387-0.626-4.074 0.118z"/>
+ <path fill="#9e5e00" d="m170.688 84.02c0.522 1.083 1.867 1.232 2.764 1.718 0.859 0.486 1.343 0.597 1.68 0.41 0.746-0.41 0.188-1.755-0.561-2.241-0.709-0.484-4.182-0.597-3.883 0.113z"/>
+ <path fill="#995900" d="m170.83 84.042c0.498 1.03 1.776 1.172 2.629 1.634 0.817 0.462 1.278 0.568 1.599 0.39 0.71-0.39 0.178-1.669-0.533-2.131-0.676-0.461-3.979-0.568-3.695 0.107z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fc0" d="m152.875 86.29c-0.325 0.813 1.952 2.359 3.091 1.301 1.222-1.057 2.686-2.033 3.175-2.359 2.195-1.465 1.383-2.522-2.278-1.871-3.663 0.651-3.663 2.115-3.988 2.929z"/>
+ <path fill="#f9c600" d="m152.934 86.279c-0.318 0.794 1.906 2.304 3.019 1.271 1.193-1.033 2.623-1.986 3.102-2.305 2.145-1.431 1.351-2.463-2.226-1.828-3.578 0.637-3.578 2.067-3.895 2.862z"/>
+ <path fill="#f4c000" d="m152.993 86.269c-0.31 0.775 1.861 2.25 2.948 1.241 1.164-1.008 2.56-1.939 3.026-2.25 2.095-1.397 1.319-2.405-2.173-1.784-3.491 0.62-3.491 2.017-3.801 2.793z"/>
+ <path fill="#efba00" d="m153.051 86.258c-0.302 0.757 1.817 2.195 2.878 1.211 1.136-0.984 2.497-1.892 2.952-2.195 2.044-1.363 1.287-2.347-2.118-1.741-3.409 0.606-3.409 1.968-3.712 2.725z"/>
+ <path fill="#eab500" d="m153.11 86.248c-0.295 0.738 1.771 2.141 2.805 1.181 1.108-0.959 2.437-1.845 2.88-2.141 1.993-1.329 1.255-2.289-2.066-1.698-3.324 0.591-3.324 1.92-3.619 2.658z"/>
+ <path fill="#e5af00" d="m153.169 86.238c-0.287 0.719 1.727 2.086 2.733 1.151 1.08-0.935 2.374-1.798 2.807-2.086 1.942-1.296 1.224-2.23-2.015-1.655s-3.238 1.87-3.525 2.59z"/>
+ <path fill="#e0a900" d="m153.228 86.228c-0.28 0.7 1.681 2.032 2.661 1.121 1.052-0.91 2.312-1.751 2.732-2.031 1.893-1.262 1.191-2.172-1.961-1.611-3.152 0.559-3.152 1.82-3.432 2.521z"/>
+ <path fill="#dba300" d="m153.286 86.217c-0.271 0.681 1.636 1.977 2.591 1.09 1.023-0.886 2.25-1.704 2.659-1.977 1.84-1.228 1.159-2.114-1.909-1.568-3.068 0.547-3.068 1.773-3.341 2.455z"/>
+ <path fill="#d69e00" d="m153.345 86.207c-0.265 0.662 1.591 1.922 2.519 1.061 0.995-0.862 2.188-1.657 2.586-1.922 1.789-1.194 1.127-2.055-1.855-1.525-2.985 0.53-2.985 1.723-3.25 2.386z"/>
+ <path fill="#d19800" d="m153.404 86.197c-0.257 0.643 1.546 1.868 2.447 1.03 0.967-0.837 2.126-1.61 2.512-1.868 1.739-1.16 1.095-1.997-1.803-1.481-2.899 0.516-2.899 1.674-3.156 2.319z"/>
+ <path fill="#cc9200" d="m153.463 86.187c-0.25 0.625 1.5 1.813 2.375 1 0.939-0.813 2.064-1.563 2.439-1.813 1.688-1.126 1.063-1.938-1.75-1.438-2.814 0.5-2.814 1.625-3.064 2.251z"/>
+ <path fill="#c68c00" d="m153.521 86.176c-0.242 0.605 1.456 1.758 2.304 0.97 0.911-0.788 2.002-1.516 2.366-1.758 1.637-1.092 1.031-1.88-1.698-1.395-2.729 0.486-2.729 1.576-2.972 2.183z"/>
+ <path fill="#c18700" d="m153.58 86.166c-0.233 0.587 1.41 1.704 2.233 0.939 0.882-0.763 1.938-1.469 2.292-1.704 1.586-1.058 0.999-1.822-1.646-1.352-2.644 0.472-2.644 1.529-2.879 2.117z"/>
+ <path fill="#bc8100" d="m153.639 86.156c-0.228 0.568 1.364 1.649 2.16 0.91 0.854-0.739 1.878-1.422 2.219-1.649 1.536-1.024 0.967-1.764-1.593-1.308s-2.559 1.477-2.786 2.047z"/>
+ <path fill="#b77b00" d="m153.698 86.146c-0.22 0.549 1.32 1.594 2.089 0.879 0.825-0.715 1.815-1.375 2.146-1.595 1.484-0.99 0.935-1.705-1.54-1.265s-2.475 1.43-2.695 1.981z"/>
+ <path fill="#b27500" d="m153.756 86.135c-0.211 0.53 1.275 1.54 2.019 0.85 0.797-0.69 1.753-1.328 2.072-1.54 1.434-0.957 0.902-1.646-1.487-1.221s-2.391 1.38-2.604 1.911z"/>
+ <path fill="#ad7000" d="m153.815 86.125c-0.204 0.512 1.229 1.486 1.946 0.82 0.769-0.666 1.69-1.281 1.997-1.486 1.385-0.922 0.871-1.588-1.434-1.178s-2.304 1.331-2.509 1.844z"/>
+ <path fill="#a86a00" d="m153.874 86.114c-0.196 0.493 1.185 1.431 1.875 0.79 0.74-0.642 1.628-1.234 1.924-1.431 1.332-0.889 0.84-1.53-1.381-1.135s-2.221 1.283-2.418 1.776z"/>
+ <path fill="#a36400" d="m153.933 86.104c-0.189 0.474 1.139 1.376 1.803 0.759 0.712-0.617 1.566-1.187 1.851-1.376 1.281-0.855 0.808-1.472-1.329-1.092-2.135 0.38-2.135 1.234-2.325 1.709z"/>
+ <path fill="#9e5e00" d="m153.991 86.094c-0.181 0.455 1.095 1.322 1.732 0.729 0.684-0.592 1.504-1.14 1.776-1.321 1.231-0.821 0.775-1.414-1.274-1.048-2.051 0.364-2.051 1.184-2.234 1.64z"/>
+ <path fill="#995900" d="m154.05 86.083c-0.174 0.436 1.05 1.267 1.66 0.699 0.656-0.568 1.442-1.093 1.704-1.267 1.181-0.787 0.743-1.355-1.223-1.005s-1.966 1.136-2.141 1.573z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fc0" d="m156.951 107.887c-0.229 2.858 6.343-4.286 6.743-4.915 0.856-1.543 3.715-5.886 4.172-7.715 0.857-3.2 2.401-5.543 1.429-8.915-0.343-1.086-2.742-1.372-3.829-0.687-3.086 1.829-2.629 4.058-2.972 6.115-1.143 5.831-5.143 11.717-5.543 16.117z"/>
+ <path fill="#ffcc02" d="m157.22 107.441c-0.22 2.787 6.178-4.188 6.566-4.802 0.833-1.506 3.614-5.745 4.056-7.529 0.831-3.122 2.333-5.408 1.382-8.695-0.337-1.058-2.678-1.333-3.735-0.663-3.006 1.788-2.557 3.96-2.889 5.967-1.105 5.685-4.997 11.431-5.38 15.722z"/>
+ <path fill="#ffcc05" d="m157.488 106.995c-0.209 2.715 6.014-4.091 6.392-4.69 0.811-1.469 3.513-5.603 3.941-7.342 0.804-3.043 2.264-5.273 1.331-8.474-0.329-1.031-2.61-1.295-3.64-0.64-2.927 1.747-2.486 3.863-2.806 5.818-1.068 5.541-4.851 11.146-5.218 15.328z"/>
+ <path fill="#ffcc07" d="m157.757 106.548c-0.198 2.645 5.85-3.993 6.217-4.577 0.785-1.431 3.409-5.461 3.824-7.156 0.779-2.964 2.196-5.138 1.282-8.253-0.322-1.003-2.543-1.257-3.545-0.618-2.847 1.706-2.414 3.766-2.722 5.67-1.031 5.398-4.706 10.862-5.056 14.934z"/>
+ <path fill="#ffcd0a" d="m158.026 106.102c-0.189 2.573 5.684-3.896 6.04-4.465 0.762-1.394 3.309-5.32 3.709-6.969 0.753-2.886 2.129-5.004 1.233-8.033-0.315-0.976-2.478-1.219-3.45-0.595-2.768 1.665-2.343 3.668-2.64 5.522-0.993 5.254-4.558 10.577-4.892 14.54z"/>
+ <path fill="#ffcd0c" d="m158.294 105.655c-0.179 2.503 5.52-3.798 5.865-4.351 0.738-1.357 3.207-5.179 3.594-6.783 0.727-2.807 2.061-4.869 1.185-7.813-0.309-0.948-2.411-1.18-3.356-0.572-2.687 1.623-2.271 3.571-2.556 5.374-0.958 5.11-4.414 10.291-4.732 14.145z"/>
+ <path fill="#ffcd0f" d="m158.563 105.209c-0.169 2.431 5.354-3.701 5.688-4.239 0.715-1.319 3.106-5.037 3.479-6.596 0.7-2.728 1.992-4.734 1.135-7.592-0.301-0.92-2.344-1.142-3.261-0.549-2.608 1.583-2.199 3.474-2.473 5.226-0.919 4.965-4.267 10.005-4.568 13.75z"/>
+ <path fill="#ffcd11" d="m158.831 104.762c-0.159 2.361 5.19-3.602 5.515-4.126 0.69-1.282 3.004-4.896 3.361-6.409 0.674-2.649 1.924-4.599 1.087-7.372-0.295-0.893-2.277-1.104-3.167-0.526-2.527 1.541-2.128 3.376-2.389 5.077-0.883 4.822-4.122 9.721-4.407 13.356z"/>
+ <path fill="#ffce14" d="m159.1 104.316c-0.149 2.289 5.024-3.505 5.338-4.014 0.667-1.244 2.901-4.754 3.247-6.223 0.646-2.571 1.854-4.464 1.037-7.151-0.287-0.865-2.211-1.065-3.072-0.504-2.448 1.5-2.056 3.279-2.306 4.929-0.845 4.679-3.976 9.437-4.244 12.963z"/>
+ <path fill="#ffce16" d="m159.369 103.869c-0.139 2.219 4.86-3.407 5.162-3.9 0.643-1.208 2.801-4.613 3.131-6.037 0.622-2.492 1.787-4.329 0.988-6.93-0.28-0.838-2.146-1.027-2.978-0.481-2.368 1.459-1.983 3.182-2.223 4.781-0.807 4.533-3.829 9.151-4.08 12.567z"/>
+ <path fill="#ffce19" d="m159.637 103.423c-0.13 2.147 4.695-3.31 4.986-3.788 0.62-1.17 2.699-4.471 3.016-5.85 0.596-2.414 1.719-4.195 0.939-6.71-0.273-0.81-2.079-0.989-2.883-0.458-2.289 1.418-1.913 3.084-2.139 4.632-0.77 4.391-3.684 8.866-3.919 12.174z"/>
+ <path fill="#ffce1c" d="m159.906 102.977c-0.119 2.076 4.531-3.213 4.811-3.676 0.597-1.133 2.599-4.33 2.899-5.664 0.57-2.335 1.651-4.06 0.891-6.49-0.267-0.782-2.012-0.95-2.787-0.435-2.21 1.377-1.842 2.987-2.057 4.484-0.734 4.247-3.539 8.582-3.757 11.781z"/>
+ <path fill="#ffcf1e" d="m160.174 102.53c-0.108 2.005 4.366-3.115 4.637-3.563 0.571-1.096 2.496-4.189 2.784-5.478 0.543-2.256 1.581-3.925 0.841-6.269-0.26-0.754-1.945-0.912-2.693-0.412-2.129 1.336-1.77 2.889-1.973 4.336-0.697 4.103-3.394 8.297-3.596 11.386z"/>
+ <path fill="#ffcf21" d="m160.443 102.084c-0.099 1.934 4.201-3.018 4.46-3.45 0.548-1.059 2.394-4.047 2.668-5.291 0.517-2.178 1.514-3.79 0.793-6.049-0.253-0.727-1.879-0.874-2.599-0.39-2.051 1.295-1.698 2.792-1.891 4.188-0.658 3.959-3.246 8.012-3.431 10.992z"/>
+ <path fill="#ffcf23" d="m160.712 101.637c-0.089 1.863 4.036-2.919 4.283-3.337 0.526-1.021 2.294-3.905 2.553-5.104 0.491-2.099 1.447-3.655 0.744-5.828-0.246-0.699-1.813-0.835-2.505-0.367-1.969 1.253-1.625 2.694-1.805 4.04-0.623 3.814-3.101 7.726-3.27 10.596z"/>
+ <path fill="#ffcf26" d="m160.98 101.191c-0.079 1.792 3.872-2.822 4.107-3.225 0.502-0.984 2.192-3.764 2.438-4.918 0.464-2.02 1.378-3.52 0.694-5.607-0.238-0.672-1.746-0.797-2.41-0.344-1.89 1.212-1.555 2.597-1.723 3.891-0.583 3.671-2.953 7.442-3.106 10.203z"/>
+ <path fill="#ffd028" d="m161.249 100.744c-0.068 1.721 3.707-2.724 3.933-3.112 0.478-0.947 2.091-3.623 2.321-4.731 0.439-1.942 1.311-3.386 0.646-5.387-0.232-0.645-1.68-0.758-2.316-0.321-1.81 1.171-1.481 2.5-1.639 3.743-0.548 3.527-2.809 7.156-2.945 9.808z"/>
+ <path fill="#ffd02b" d="m161.517 100.298c-0.06 1.65 3.543-2.627 3.757-2.999 0.454-0.91 1.989-3.481 2.206-4.545 0.413-1.863 1.242-3.25 0.597-5.167-0.225-0.617-1.613-0.72-2.221-0.298-1.73 1.13-1.411 2.402-1.557 3.595-0.509 3.383-2.662 6.871-2.782 9.414z"/>
+ <path fill="#ffd02d" d="m161.786 99.852c-0.049 1.579 3.377-2.529 3.581-2.887 0.431-0.872 1.887-3.34 2.091-4.359 0.387-1.784 1.173-3.116 0.547-4.946-0.217-0.589-1.546-0.682-2.126-0.275-1.649 1.089-1.339 2.305-1.472 3.446-0.474 3.24-2.518 6.587-2.621 9.021z"/>
+ <path fill="#ffd030" d="m162.055 99.405c-0.039 1.508 3.212-2.432 3.404-2.773 0.407-0.835 1.786-3.199 1.976-4.172 0.359-1.706 1.104-2.981 0.499-4.726-0.211-0.562-1.481-0.644-2.032-0.253-1.571 1.048-1.268 2.208-1.389 3.298-0.436 3.096-2.372 6.302-2.458 8.626z"/>
+ <path fill="#ffd133" d="m162.323 98.958c-0.029 1.437 3.048-2.334 3.23-2.661 0.383-0.798 1.684-3.057 1.858-3.986 0.334-1.627 1.037-2.846 0.45-4.505-0.204-0.534-1.414-0.605-1.938-0.23-1.49 1.007-1.195 2.11-1.306 3.15-0.397 2.953-2.224 6.018-2.294 8.232z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fc0" d="m179.646 95.994c-3.168 3.456-5.4 6.767-7.2 9-1.872 2.304-6.48 5.04-4.176 7.704 1.943 2.376 9.936-1.944 16.128-6.552 6.12-4.608 15.696-8.711 11.016-13.967-2.448-2.664-8.208-2.088-10.439-0.648-1.729 1.078-2.737 1.655-5.329 4.463z"/>
+ <path fill="#ffcc02" d="m179.782 96.147c-3.118 3.378-5.313 6.628-7.086 8.809-1.841 2.249-6.375 4.945-4.13 7.534 1.893 2.31 9.724-1.943 15.795-6.469 6.001-4.525 15.38-8.574 10.82-13.682-2.387-2.588-8.022-1.998-10.209-0.584-1.692 1.062-2.665 1.67-5.19 4.392z"/>
+ <path fill="#ffcc05" d="m179.919 96.3c-3.068 3.3-5.227 6.488-6.973 8.619-1.81 2.193-6.271 4.85-4.085 7.364 1.843 2.243 9.513-1.943 15.463-6.386 5.882-4.442 15.064-8.437 10.623-13.396-2.323-2.513-7.835-1.907-9.978-0.52-1.655 1.044-2.593 1.684-5.05 4.319z"/>
+ <path fill="#ffcc07" d="m180.055 96.454c-3.02 3.222-5.14 6.347-6.859 8.428-1.78 2.138-6.166 4.754-4.04 7.194 1.793 2.177 9.302-1.942 15.131-6.303 5.762-4.359 14.748-8.299 10.427-13.11-2.261-2.437-7.648-1.817-9.747-0.456-1.619 1.025-2.522 1.698-4.912 4.247z"/>
+ <path fill="#ffcd0a" d="m180.191 96.607c-2.97 3.143-5.052 6.207-6.745 8.237-1.749 2.082-6.063 4.659-3.994 7.023 1.743 2.111 9.09-1.941 14.798-6.219 5.644-4.276 14.433-8.162 10.231-12.824-2.199-2.361-7.463-1.727-9.518-0.392-1.581 1.008-2.45 1.713-4.772 4.175z"/>
+ <path fill="#ffcd0c" d="m180.327 96.761c-2.92 3.065-4.965 6.066-6.631 8.047-1.718 2.027-5.957 4.564-3.949 6.853 1.693 2.044 8.878-1.94 14.466-6.136 5.524-4.194 14.116-8.024 10.034-12.538-2.137-2.286-7.275-1.636-9.285-0.328-1.546 0.988-2.38 1.726-4.635 4.102z"/>
+ <path fill="#ffcd0f" d="m180.464 96.914c-2.871 2.987-4.879 5.926-6.518 7.857-1.688 1.971-5.854 4.468-3.903 6.683 1.643 1.978 8.666-1.94 14.133-6.053 5.404-4.111 13.801-7.887 9.839-12.251-2.075-2.21-7.091-1.546-9.056-0.264-1.509 0.969-2.308 1.738-4.495 4.028z"/>
+ <path fill="#ffcd11" d="m180.6 97.067c-2.821 2.909-4.792 5.786-6.404 7.667-1.657 1.916-5.748 4.373-3.858 6.512 1.593 1.912 8.455-1.938 13.802-5.969 5.284-4.028 13.484-7.75 9.641-11.966-2.012-2.134-6.902-1.456-8.823-0.199-1.474 0.951-2.238 1.752-4.358 3.955z"/>
+ <path fill="#ffce14" d="m180.736 97.221c-2.771 2.83-4.705 5.645-6.29 7.476-1.626 1.86-5.644 4.278-3.813 6.342 1.542 1.845 8.244-1.938 13.47-5.886 5.166-3.945 13.169-7.612 9.444-11.68-1.949-2.059-6.716-1.365-8.592-0.135-1.437 0.933-2.166 1.766-4.219 3.883z"/>
+ <path fill="#ffce16" d="m180.872 97.375c-2.722 2.752-4.617 5.504-6.176 7.286-1.595 1.805-5.539 4.182-3.767 6.172 1.49 1.779 8.031-1.937 13.136-5.803 5.046-3.862 12.853-7.475 9.249-11.394-1.889-1.983-6.53-1.274-8.362-0.071-1.4 0.914-2.095 1.779-4.08 3.81z"/>
+ <path fill="#ffce19" d="m181.009 97.528c-2.673 2.674-4.53 5.364-6.063 7.095-1.564 1.749-5.435 4.087-3.722 6.001 1.44 1.713 7.82-1.936 12.804-5.719 4.927-3.78 12.537-7.338 9.052-11.108-1.825-1.907-6.343-1.185-8.13-0.007-1.364 0.896-2.024 1.793-3.941 3.738z"/>
+ <path fill="#ffce1c" d="m181.145 97.682c-2.623 2.595-4.444 5.225-5.949 6.904-1.534 1.693-5.33 3.992-3.676 5.831 1.39 1.646 7.608-1.935 12.471-5.636 4.808-3.697 12.221-7.2 8.856-10.822-1.764-1.832-6.157-1.094-7.9 0.057-1.327 0.878-1.952 1.807-3.802 3.666z"/>
+ <path fill="#ffcf1e" d="m181.281 97.835c-2.573 2.517-4.357 5.084-5.835 6.714-1.503 1.638-5.226 3.896-3.631 5.661 1.34 1.58 7.396-1.935 12.139-5.553 4.689-3.614 11.905-7.063 8.659-10.536-1.701-1.756-5.97-1.004-7.668 0.121-1.291 0.86-1.881 1.821-3.664 3.593z"/>
+ <path fill="#ffcf21" d="m181.417 97.988c-2.522 2.439-4.27 4.944-5.721 6.524-1.472 1.582-5.121 3.801-3.586 5.491 1.29 1.513 7.186-1.934 11.807-5.47 4.569-3.531 11.589-6.926 8.463-10.25-1.639-1.68-5.783-0.914-7.438 0.186-1.254 0.84-1.809 1.834-3.525 3.519z"/>
+ <path fill="#ffcf23" d="m181.554 98.142c-2.476 2.361-4.185 4.803-5.608 6.333-1.441 1.527-5.017 3.706-3.54 5.32 1.24 1.447 6.974-1.933 11.474-5.386 4.45-3.448 11.273-6.788 8.268-9.964-1.577-1.605-5.599-0.823-7.207 0.25-1.22 0.822-1.74 1.848-3.387 3.447z"/>
+ <path fill="#ffcf26" d="m181.69 98.295c-2.425 2.283-4.098 4.663-5.494 6.143-1.411 1.471-4.912 3.61-3.495 5.15 1.19 1.381 6.763-1.932 11.142-5.303 4.331-3.366 10.957-6.65 8.07-9.679-1.514-1.529-5.411-0.732-6.976 0.313-1.182 0.805-1.667 1.863-3.247 3.376z"/>
+ <path fill="#ffd028" d="m181.826 98.449c-2.375 2.204-4.009 4.522-5.38 5.952-1.38 1.416-4.808 3.515-3.449 4.98 1.14 1.314 6.551-1.932 10.81-5.22 4.211-3.283 10.641-6.513 7.874-9.393-1.452-1.454-5.226-0.642-6.745 0.378-1.147 0.786-1.597 1.876-3.11 3.303z"/>
+ <path fill="#ffd02b" d="m181.962 98.602c-2.324 2.127-3.922 4.382-5.266 5.762-1.349 1.36-4.703 3.42-3.404 4.809 1.089 1.248 6.34-1.93 10.478-5.136 4.092-3.2 10.325-6.376 7.677-9.106-1.389-1.378-5.038-0.552-6.513 0.441-1.111 0.768-1.526 1.89-2.972 3.23z"/>
+ <path fill="#ffd02d" d="m182.099 98.756c-2.276 2.048-3.836 4.241-5.153 5.571-1.318 1.305-4.599 3.324-3.359 4.639 1.039 1.182 6.128-1.93 10.146-5.053 3.973-3.117 10.009-6.238 7.48-8.82-1.328-1.303-4.852-0.462-6.282 0.506-1.074 0.748-1.454 1.903-2.832 3.157z"/>
+ <path fill="#ffd030" d="m182.235 98.909c-2.228 1.97-3.749 4.101-5.039 5.381-1.288 1.249-4.494 3.229-3.313 4.469 0.988 1.115 5.916-1.929 9.813-4.97 3.853-3.034 9.693-6.101 7.285-8.535-1.267-1.227-4.666-0.371-6.052 0.57-1.038 0.731-1.384 1.918-2.694 3.085z"/>
+ <path fill="#ffd133" d="m182.371 99.063c-2.177 1.892-3.662 3.96-4.925 5.19-1.257 1.193-4.39 3.133-3.268 4.298 0.938 1.049 5.704-1.928 9.479-4.886 3.734-2.952 9.377-5.963 7.088-8.249-1.203-1.151-4.479-0.281-5.821 0.634-0.999 0.713-1.31 1.931-2.553 3.013z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fff" d="m186.414 168.569c0.864-2.808 28.872-9.432 33.48-7.272 4.536 2.16 26.279 33.768 22.392 35.496-3.888 1.657-12.24-10.512-24.408-16.128s-32.328-9.216-31.464-12.096z"/>
+ <path fill="#f9f9f9" d="m187.239 168.626c0.848-2.761 28.145-9.076 32.69-6.997 4.476 2.079 25.768 32.897 21.943 34.591-3.824 1.625-11.965-10.346-23.94-15.874-11.976-5.527-31.541-8.89-30.693-11.72z"/>
+ <path fill="#f4f4f4" d="m188.063 168.683c0.832-2.714 27.418-8.72 31.899-6.722 4.417 1.998 25.259 32.026 21.497 33.685-3.76 1.595-11.689-10.18-23.474-15.619-11.782-5.438-30.754-8.565-29.922-11.344z"/>
+ <path fill="#efefef" d="m188.888 168.74c0.814-2.668 26.69-8.364 31.109-6.447 4.357 1.917 24.746 31.155 21.049 32.779-3.695 1.563-11.416-10.014-23.007-15.364-11.59-5.349-29.967-8.239-29.151-10.968z"/>
+ <path fill="#eaeaea" d="m189.712 168.797c0.801-2.621 25.964-8.009 30.32-6.173 4.299 1.837 24.235 30.285 20.603 31.874-3.633 1.532-11.142-9.847-22.54-15.109-11.4-5.261-29.182-7.914-28.383-10.592z"/>
+ <path fill="#e5e5e5" d="m190.537 168.853c0.783-2.573 25.236-7.652 29.53-5.897 4.239 1.756 23.723 29.414 20.155 30.968-3.569 1.501-10.867-9.681-22.074-14.854-11.206-5.172-28.395-7.589-27.611-10.217z"/>
+ <path fill="#e0e0e0" d="m191.361 168.91c0.768-2.527 24.51-7.296 28.74-5.622 4.18 1.675 23.212 28.543 19.708 30.063-3.505 1.469-10.593-9.516-21.607-14.6-11.014-5.083-27.608-7.263-26.841-9.841z"/>
+ <path fill="#dbdbdb" d="m192.186 168.967c0.751-2.48 23.781-6.941 27.95-5.347 4.119 1.593 22.7 27.671 19.26 29.157-3.441 1.438-10.318-9.349-21.141-14.345-10.821-4.994-26.821-6.938-26.069-9.465z"/>
+ <path fill="#d6d6d6" d="m193.01 169.024c0.735-2.433 23.057-6.585 27.16-5.073 4.062 1.513 22.19 26.801 18.813 28.252-3.377 1.407-10.043-9.183-20.673-14.09-10.629-4.906-26.035-6.612-25.3-9.089z"/>
+ <path fill="#d1d1d1" d="m193.835 169.081c0.72-2.387 22.328-6.229 26.37-4.798 4.001 1.432 21.678 25.93 18.365 27.346-3.313 1.376-9.768-9.017-20.206-13.835-10.437-4.817-25.248-6.287-24.529-8.713z"/>
+ <path fill="#ccc" d="m194.659 169.137c0.703-2.339 21.603-5.873 25.58-4.521 3.942 1.351 21.167 25.059 17.918 26.44-3.249 1.345-9.493-8.851-19.739-13.58-10.245-4.729-24.462-5.963-23.759-8.339z"/>
+ <path fill="#c6c6c6" d="m195.484 169.194c0.687-2.292 20.874-5.517 24.79-4.247 3.882 1.27 20.655 24.188 17.47 25.535-3.185 1.314-9.219-8.685-19.271-13.326-10.054-4.639-23.676-5.636-22.989-7.962z"/>
+ <path fill="#c1c1c1" d="m196.308 169.251c0.671-2.246 20.147-5.161 24-3.973 3.822 1.19 20.145 23.318 17.022 24.63-3.121 1.283-8.943-8.519-18.805-13.071-9.859-4.551-22.888-5.311-22.217-7.586z"/>
+ <path fill="#bcbcbc" d="m197.133 169.308c0.654-2.199 19.421-4.805 23.21-3.698 3.764 1.109 19.634 22.447 16.575 23.724-3.057 1.252-8.669-8.353-18.338-12.816-9.668-4.462-22.102-4.985-21.447-7.21z"/>
+ <path fill="#b7b7b7" d="m197.957 169.365c0.64-2.152 18.693-4.45 22.42-3.423 3.705 1.027 19.122 21.575 16.129 22.818-2.993 1.221-8.395-8.186-17.872-12.561-9.476-4.373-21.315-4.66-20.677-6.834z"/>
+ <path fill="#b2b2b2" d="m198.782 169.421c0.622-2.105 17.966-4.093 21.63-3.147 3.646 0.946 18.61 20.704 15.681 21.912-2.93 1.19-8.12-8.02-17.404-12.306-9.284-4.284-20.53-4.335-19.907-6.459z"/>
+ <path fill="#adadad" d="m199.606 169.478c0.606-2.058 17.239-3.737 20.84-2.873 3.586 0.866 18.099 19.834 15.234 21.008-2.866 1.158-7.847-7.855-16.938-12.052-9.091-4.196-19.742-4.009-19.136-6.083z"/>
+ <path fill="#a8a8a8" d="m200.431 169.535c0.59-2.011 16.512-3.382 20.05-2.598 3.525 0.785 17.588 18.963 14.786 20.102-2.803 1.127-7.571-7.688-16.472-11.797-8.898-4.107-18.955-3.684-18.364-5.707z"/>
+ <path fill="#a3a3a3" d="m201.255 169.592c0.574-1.965 15.785-3.026 19.261-2.323 3.467 0.704 17.076 18.092 14.339 19.196-2.738 1.096-7.296-7.522-16.004-11.542-8.707-4.018-18.17-3.358-17.596-5.331z"/>
+ <path fill="#9e9e9e" d="m202.08 169.649c0.559-1.918 15.059-2.67 18.47-2.048 3.407 0.623 16.565 17.221 13.892 18.29-2.674 1.065-7.022-7.356-15.537-11.287-8.515-3.929-17.383-3.033-16.825-4.955z"/>
+ <path fill="#999" d="m202.904 169.705c0.542-1.871 14.331-2.314 17.68-1.773 3.349 0.542 16.055 16.35 13.444 17.385-2.61 1.034-6.747-7.19-15.07-11.032-8.322-3.841-16.596-2.708-16.054-4.58z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fff" d="m151.134 211.625c2.881 0.144 0.145 16.271 0.145 32.903s2.231 22.464 0.144 24.552-5.688-5.399-5.688-22.031c-0.001-16.632 2.519-35.568 5.399-35.424z"/>
+ <path fill="#f9f9f9" d="m151.105 212.016c2.783 0.162 0.109 16.052 0.097 32.419-0.012 16.366 2.188 22.208 0.164 24.237-2.02 2.029-5.561-5.383-5.546-21.752 0.012-16.367 2.502-35.065 5.285-34.904z"/>
+ <path fill="#f4f4f4" d="m151.075 212.407c2.687 0.18 0.076 15.832 0.051 31.934-0.023 16.102 2.143 21.951 0.185 23.924-1.953 1.968-5.435-5.367-5.405-21.473 0.024-16.103 2.484-34.564 5.169-34.385z"/>
+ <path fill="#efefef" d="m151.046 212.797c2.588 0.197 0.041 15.613 0.004 31.449-0.036 15.836 2.098 21.694 0.204 23.609-1.886 1.907-5.308-5.352-5.263-21.195 0.037-15.835 2.467-34.058 5.055-33.863z"/>
+ <path fill="#eaeaea" d="m151.017 213.189c2.49 0.214 0.007 15.392-0.043 30.962-0.05 15.571 2.052 21.439 0.224 23.297-1.818 1.848-5.181-5.334-5.122-20.916 0.049-15.571 2.45-33.557 4.941-33.343z"/>
+ <path fill="#e5e5e5" d="m150.987 213.581c2.394 0.23-0.027 15.17-0.089 30.477s2.007 21.182 0.244 22.982c-1.751 1.787-5.055-5.32-4.98-20.638 0.061-15.305 2.431-33.053 4.825-32.821z"/>
+ <path fill="#e0e0e0" d="m150.958 213.971c2.297 0.248-0.062 14.951-0.136 29.99-0.074 15.041 1.962 20.927 0.264 22.668-1.683 1.728-4.928-5.301-4.839-20.356 0.074-15.04 2.414-32.551 4.711-32.302z"/>
+ <path fill="#dbdbdb" d="m150.928 214.362c2.199 0.266-0.096 14.73-0.182 29.506-0.087 14.775 1.915 20.67 0.282 22.354-1.615 1.667-4.8-5.286-4.696-20.078 0.087-14.776 2.397-32.048 4.596-31.782z"/>
+ <path fill="#d6d6d6" d="m150.899 214.752c2.102 0.283-0.13 14.511-0.229 29.021-0.099 14.511 1.87 20.413 0.303 22.04-1.549 1.607-4.674-5.27-4.556-19.799 0.1-14.51 2.38-31.545 4.482-31.262z"/>
+ <path fill="#d1d1d1" d="m150.87 215.144c2.005 0.301-0.165 14.29-0.274 28.535-0.112 14.245 1.824 20.155 0.321 21.725-1.479 1.548-4.547-5.252-4.413-19.519 0.11-14.245 2.361-31.043 4.366-30.741z"/>
+ <path fill="#ccc" d="m150.84 215.536c1.908 0.317-0.197 14.069-0.32 28.049-0.124 13.979 1.779 19.899 0.342 21.412-1.413 1.486-4.42-5.238-4.272-19.242 0.122-13.979 2.343-30.54 4.25-30.219z"/>
+ <path fill="#c6c6c6" d="m150.811 215.926c1.811 0.334-0.233 13.85-0.368 27.564-0.136 13.713 1.735 19.643 0.362 21.096-1.346 1.428-4.293-5.219-4.131-18.961 0.136-13.712 2.327-30.035 4.137-29.699z"/>
+ <path fill="#c1c1c1" d="m150.781 216.317c1.714 0.354-0.267 13.629-0.414 27.078s1.69 19.387 0.382 20.783c-1.277 1.367-4.166-5.203-3.989-18.682 0.148-13.449 2.308-29.533 4.021-29.179z"/>
+ <path fill="#bcbcbc" d="m150.752 216.708c1.616 0.371-0.301 13.41-0.461 26.594-0.161 13.184 1.646 19.13 0.402 20.469-1.211 1.307-4.04-5.188-3.847-18.402 0.16-13.185 2.29-29.033 3.906-28.661z"/>
+ <path fill="#b7b7b7" d="m150.723 217.099c1.519 0.387-0.336 13.188-0.509 26.106-0.173 12.92 1.601 18.875 0.423 20.156-1.144 1.246-3.913-5.171-3.706-18.123 0.172-12.919 2.273-28.529 3.792-28.139z"/>
+ <path fill="#b2b2b2" d="m150.693 217.491c1.422 0.404-0.37 12.969-0.554 25.621-0.186 12.653 1.555 18.617 0.441 19.842-1.076 1.187-3.786-5.156-3.563-17.846 0.184-12.652 2.255-28.024 3.676-27.617z"/>
+ <path fill="#adadad" d="m150.664 217.881c1.325 0.422-0.404 12.748-0.601 25.136-0.198 12.388 1.51 18.36 0.462 19.528-1.008 1.125-3.66-5.139-3.423-17.566 0.197-12.389 2.238-27.521 3.562-27.098z"/>
+ <path fill="#a8a8a8" d="m150.634 218.272c1.229 0.439-0.438 12.527-0.646 24.65-0.21 12.123 1.464 18.104 0.48 19.213-0.939 1.066-3.531-5.121-3.279-17.285 0.208-12.123 2.219-27.019 3.445-26.578z"/>
+ <path fill="#a3a3a3" d="m150.605 218.663c1.13 0.457-0.474 12.309-0.694 24.166-0.222 11.857 1.419 17.848 0.501 18.899-0.873 1.006-3.405-5.106-3.139-17.009 0.222-11.855 2.202-26.515 3.332-26.056z"/>
+ <path fill="#9e9e9e" d="m150.576 219.054c1.033 0.474-0.507 12.088-0.741 23.68-0.234 11.593 1.374 17.591 0.521 18.585-0.806 0.946-3.279-5.089-2.997-16.729 0.233-11.591 2.184-26.011 3.217-25.536z"/>
+ <path fill="#999" d="m150.546 219.444c0.937 0.492-0.541 11.868-0.787 23.195-0.246 11.326 1.329 17.335 0.541 18.271-0.737 0.885-3.151-5.074-2.855-16.449 0.245-11.328 2.166-25.509 3.101-25.017z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fff" d="m157.434 167.161c1.735 0.192 12.437-2.218 12.822-1.254 0.386 0.772-6.651 2.893-8.966 5.303-0.771 0.771-2.796 2.603-4.049 2.41-0.964-0.096-1.543-2.121-2.989-3.664-3.471-3.47-5.688-3.181-5.013-4.531 0.579-1.06 5.207 1.446 8.195 1.736z"/>
+ <path fill="#fbfbfb" d="m157.479 167.201c1.7 0.188 12.176-2.171 12.554-1.227 0.377 0.755-6.512 2.832-8.778 5.191-0.755 0.755-2.736 2.549-3.964 2.36-0.942-0.094-1.51-2.077-2.926-3.587-3.398-3.397-5.568-3.115-4.907-4.436 0.565-1.038 5.096 1.415 8.021 1.699z"/>
+ <path fill="#f8f8f8" d="m157.525 167.241c1.663 0.184 11.914-2.124 12.283-1.201 0.369 0.739-6.372 2.771-8.589 5.08-0.738 0.739-2.679 2.494-3.879 2.309-0.924-0.092-1.479-2.032-2.863-3.51-3.325-3.324-5.449-3.048-4.803-4.341 0.555-1.015 4.988 1.385 7.851 1.663z"/>
+ <path fill="#f5f5f5" d="m157.57 167.281c1.626 0.18 11.652-2.078 12.014-1.175 0.361 0.723-6.231 2.711-8.4 4.969-0.723 0.722-2.619 2.439-3.793 2.258-0.903-0.09-1.446-1.987-2.802-3.433-3.252-3.251-5.329-2.981-4.695-4.245 0.54-0.993 4.876 1.354 7.676 1.626z"/>
+ <path fill="#f2f2f2" d="m157.615 167.321c1.59 0.176 11.391-2.031 11.745-1.148 0.352 0.706-6.093 2.649-8.212 4.856-0.707 0.707-2.562 2.385-3.709 2.208-0.883-0.088-1.413-1.943-2.738-3.356-3.179-3.178-5.209-2.914-4.591-4.15 0.529-0.971 4.768 1.324 7.505 1.59z"/>
+ <path fill="#efefef" d="m157.66 167.361c1.554 0.172 11.13-1.985 11.475-1.122 0.346 0.69-5.952 2.589-8.022 4.745-0.69 0.69-2.503 2.33-3.624 2.157-0.863-0.086-1.381-1.898-2.675-3.279-3.106-3.105-5.09-2.847-4.486-4.055 0.517-0.948 4.658 1.294 7.332 1.554z"/>
+ <path fill="#ebebeb" d="m157.705 167.401c1.518 0.168 10.868-1.938 11.206-1.096 0.336 0.674-5.813 2.528-7.835 4.634-0.674 0.674-2.444 2.275-3.539 2.106-0.842-0.084-1.348-1.853-2.612-3.202-3.032-3.032-4.97-2.78-4.38-3.959 0.505-0.926 4.549 1.263 7.16 1.517z"/>
+ <path fill="#e8e8e8" d="m157.751 167.441c1.48 0.164 10.606-1.892 10.936-1.069 0.329 0.657-5.673 2.467-7.646 4.522-0.658 0.657-2.385 2.22-3.453 2.055-0.822-0.082-1.315-1.809-2.549-3.124-2.96-2.96-4.851-2.714-4.275-3.865 0.491-0.904 4.438 1.233 6.987 1.481z"/>
+ <path fill="#e5e5e5" d="m157.796 167.481c1.444 0.16 10.346-1.845 10.666-1.043 0.32 0.641-5.532 2.406-7.458 4.41-0.641 0.642-2.325 2.166-3.367 2.005-0.803-0.08-1.284-1.764-2.486-3.047-2.887-2.887-4.732-2.647-4.17-3.769 0.48-0.882 4.329 1.202 6.815 1.444z"/>
+ <path fill="#e2e2e2" d="m157.841 167.521c1.407 0.156 10.083-1.799 10.397-1.017 0.312 0.625-5.394 2.346-7.271 4.299-0.625 0.625-2.267 2.111-3.282 1.954-0.782-0.078-1.251-1.719-2.423-2.97-2.814-2.814-4.612-2.58-4.065-3.674 0.469-0.859 4.221 1.172 6.644 1.408z"/>
+ <path fill="#dfdfdf" d="m157.886 167.56c1.37 0.152 9.821-1.751 10.127-0.99 0.304 0.609-5.254 2.285-7.081 4.188-0.609 0.609-2.208 2.056-3.198 1.903-0.761-0.076-1.218-1.675-2.36-2.893-2.741-2.741-4.492-2.513-3.959-3.579 0.456-0.837 4.111 1.142 6.471 1.371z"/>
+ <path fill="#dbdbdb" d="m157.931 167.6c1.335 0.148 9.561-1.704 9.857-0.963 0.296 0.592-5.114 2.223-6.893 4.076-0.593 0.593-2.149 2.001-3.113 1.853-0.741-0.074-1.186-1.631-2.297-2.817-2.668-2.667-4.373-2.446-3.854-3.483 0.445-0.815 4.003 1.111 6.3 1.334z"/>
+ <path fill="#d8d8d8" d="m157.977 167.64c1.298 0.144 9.299-1.658 9.587-0.937 0.288 0.576-4.974 2.163-6.704 3.964-0.576 0.577-2.091 1.947-3.027 1.803-0.721-0.072-1.153-1.586-2.234-2.74-2.596-2.594-4.253-2.379-3.748-3.388 0.431-0.792 3.891 1.081 6.126 1.298z"/>
+ <path fill="#d5d5d5" d="m158.022 167.68c1.261 0.14 9.037-1.611 9.317-0.911 0.28 0.56-4.834 2.102-6.516 3.853-0.56 0.561-2.032 1.892-2.942 1.752-0.7-0.07-1.12-1.541-2.172-2.663-2.521-2.521-4.133-2.312-3.643-3.292 0.421-0.77 3.784 1.05 5.956 1.261z"/>
+ <path fill="#d2d2d2" d="m158.067 167.72c1.225 0.136 8.775-1.564 9.049-0.884 0.271 0.543-4.695 2.041-6.327 3.741-0.545 0.544-1.974 1.837-2.857 1.701-0.682-0.068-1.09-1.497-2.109-2.585-2.449-2.449-4.014-2.246-3.538-3.198 0.407-0.748 3.673 1.02 5.782 1.225z"/>
+ <path fill="#cfcfcf" d="m158.112 167.76c1.188 0.132 8.515-1.518 8.779-0.858 0.264 0.527-4.555 1.98-6.139 3.63-0.527 0.528-1.915 1.782-2.772 1.65-0.66-0.066-1.057-1.452-2.046-2.508-2.376-2.376-3.895-2.179-3.433-3.103 0.397-0.725 3.565 0.99 5.611 1.189z"/>
+ <path fill="#ccc" d="m158.157 167.8c1.152 0.128 8.253-1.472 8.51-0.832 0.255 0.511-4.415 1.92-5.95 3.518-0.512 0.512-1.855 1.728-2.688 1.6-0.64-0.064-1.023-1.407-1.983-2.431-2.303-2.303-3.773-2.112-3.326-3.007 0.383-0.703 3.454 0.959 5.437 1.152z"/>
+ <path fill="#c8c8c8" d="m158.203 167.84c1.115 0.124 7.991-1.425 8.239-0.805 0.248 0.494-4.274 1.858-5.761 3.406-0.496 0.496-1.798 1.673-2.603 1.549-0.62-0.063-0.992-1.363-1.921-2.354-2.229-2.229-3.655-2.045-3.221-2.912 0.372-0.681 3.346 0.929 5.267 1.116z"/>
+ <path fill="#c5c5c5" d="m158.248 167.88c1.079 0.12 7.73-1.379 7.97-0.779 0.239 0.478-4.135 1.798-5.572 3.295-0.479 0.479-1.739 1.618-2.518 1.498-0.6-0.06-0.959-1.318-1.857-2.277-2.157-2.157-3.535-1.978-3.116-2.816 0.359-0.659 3.235 0.898 5.093 1.079z"/>
+ <path fill="#c2c2c2" d="m158.293 167.92c1.042 0.116 7.469-1.332 7.701-0.753 0.231 0.462-3.995 1.737-5.385 3.184-0.463 0.463-1.68 1.563-2.432 1.447-0.579-0.058-0.927-1.273-1.796-2.2-2.084-2.084-3.415-1.911-3.01-2.721 0.348-0.636 3.127 0.868 4.922 1.043z"/>
+ <path fill="#bfbfbf" d="m158.338 167.959c1.007 0.112 7.207-1.285 7.432-0.726 0.223 0.446-3.855 1.676-5.196 3.072-0.447 0.447-1.621 1.509-2.347 1.397-0.56-0.056-0.895-1.229-1.732-2.123-2.011-2.011-3.296-1.844-2.905-2.626 0.334-0.614 3.016 0.838 4.748 1.006z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m194.253 11.922c-1.222 2.631-3.812 23.214-0.248 20.892 3.594-2.341 13.57-5.312 19.886-7.013 7.003-1.886-17.188-19.463-19.638-13.879z"/>
+ <path fill="#060606" d="m194.485 12.307c-1.21 2.594-3.704 22.255-0.234 20.007 3.491-2.262 13.077-5.1 19.039-6.782 6.59-1.905-16.436-18.609-18.805-13.225z"/>
+ <path fill="#0c0c0c" d="m194.717 12.691c-1.198 2.557-3.595 21.296-0.221 19.124 3.391-2.184 12.586-4.888 18.194-6.551 6.177-1.924-15.684-17.757-17.973-12.573z"/>
+ <path fill="#131313" d="m194.949 13.076c-1.187 2.52-3.487 20.337-0.207 18.239 3.288-2.105 12.093-4.676 17.348-6.321 5.763-1.941-14.933-16.903-17.141-11.918z"/>
+ <path fill="#191919" d="m195.181 13.46c-1.177 2.483-3.379 19.378-0.193 17.355 3.187-2.027 11.6-4.464 16.502-6.09 5.349-1.959-14.182-16.05-16.309-11.265z"/>
+ <path fill="#1f1f1f" d="m195.413 13.845c-1.164 2.446-3.27 18.419-0.18 16.471 3.086-1.949 11.107-4.252 15.657-5.859 4.935-1.978-13.43-15.198-15.477-10.612z"/>
+ <path fill="#262626" d="m195.645 14.229c-1.153 2.409-3.162 17.46-0.166 15.586 2.983-1.87 10.616-4.04 14.811-5.628 4.521-1.995-12.679-14.344-14.645-9.958z"/>
+ <path fill="#2c2c2c" d="m195.878 14.614c-1.142 2.372-3.055 16.501-0.152 14.702 2.882-1.792 10.123-3.828 13.965-5.398 4.107-2.013-11.929-13.49-13.813-9.304z"/>
+ <path fill="#333" d="m196.11 14.999c-1.131 2.335-2.946 15.542-0.14 13.817 2.78-1.713 9.631-3.616 13.119-5.167 3.695-2.031-11.175-12.637-12.979-8.65z"/>
+ <path fill="#393939" d="m196.342 15.383c-1.118 2.299-2.838 14.583-0.126 12.934 2.68-1.636 9.139-3.404 12.274-4.937 3.28-2.049-10.425-11.784-12.148-7.997z"/>
+ <path fill="#3f3f3f" d="m196.574 15.768c-1.108 2.261-2.729 13.624-0.112 12.049 2.577-1.557 8.646-3.192 11.429-4.706 2.865-2.068-9.675-10.931-11.317-7.343z"/>
+ <path fill="#464646" d="m196.806 16.152c-1.097 2.225-2.622 12.665-0.1 11.165 2.477-1.479 8.154-2.98 10.583-4.475 2.453-2.086-8.922-10.078-10.483-6.69z"/>
+ <path fill="#4c4c4c" d="m197.038 16.537c-1.085 2.188-2.513 11.706-0.085 10.28 2.374-1.4 7.661-2.768 9.737-4.244 2.039-2.104-8.171-9.225-9.652-6.036z"/>
+ <path fill="#525252" d="m197.27 16.921c-1.073 2.151-2.405 10.747-0.071 9.396 2.272-1.322 7.168-2.556 8.891-4.013 1.625-2.122-7.42-8.371-8.82-5.383z"/>
+ <path fill="#595959" d="m197.502 17.306c-1.062 2.113-2.297 9.788-0.058 8.512 2.172-1.244 6.677-2.344 8.046-3.783 1.211-2.14-6.669-7.518-7.988-4.729z"/>
+ <path fill="#5f5f5f" d="m197.734 17.69c-1.05 2.077-2.188 8.829-0.044 7.627 2.069-1.165 6.184-2.132 7.2-3.552 0.797-2.157-5.917-6.664-7.156-4.075z"/>
+ <path fill="#666" d="m197.966 18.075c-1.038 2.04-2.079 7.87-0.029 6.743 1.968-1.087 5.69-1.92 6.354-3.321 0.382-2.176-5.167-5.812-6.325-3.422z"/>
+ <path fill="#6c6c6c" d="m198.198 18.459c-1.027 2.003-1.972 6.911-0.017 5.859 1.866-1.008 5.198-1.708 5.509-3.09-0.03-2.194-4.415-4.959-5.492-2.769z"/>
+ <path fill="#727272" d="m198.43 18.844c-1.017 1.966-1.863 5.952-0.003 4.975 1.765-0.93 4.706-1.496 4.662-2.86-0.443-2.212-3.662-4.106-4.659-2.115z"/>
+ <path fill="#797979" d="m198.662 19.228c-1.004 1.929-1.755 4.993 0.011 4.09 1.663-0.852 4.215-1.284 3.817-2.629-0.858-2.23-2.912-3.251-3.828-1.461z"/>
+ <path fill="#7f7f7f" d="m198.894 19.612c-0.993 1.892-1.647 4.034 0.023 3.206 1.563-0.773 3.723-1.072 2.973-2.398-1.272-2.248-2.161-2.399-2.996-0.808z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m143.502 46.386c-0.72 2.16 8.712 5.112 10.801 6.984 2.808 2.52 3.023 7.488 6.336 5.472 2.159-1.296 0.504-4.176-3.456-8.568-5.833-6.481-13.033-5.689-13.681-3.888z"/>
+ <path fill="#050505" d="m143.991 46.582c-0.716 2.073 8.275 4.9 10.336 6.741 2.745 2.457 2.961 7.249 6.146 5.313 2.094-1.254 0.449-4.072-3.343-8.28-5.574-6.203-12.491-5.505-13.139-3.774z"/>
+ <path fill="#0a0a0a" d="m144.479 46.779c-0.71 1.987 7.839 4.688 9.873 6.498 2.682 2.394 2.897 7.009 5.956 5.154 2.028-1.212 0.395-3.968-3.228-7.993-5.319-5.926-11.953-5.321-12.601-3.659z"/>
+ <path fill="#0f0f0f" d="m144.967 46.976c-0.704 1.9 7.403 4.476 9.41 6.254 2.62 2.33 2.835 6.77 5.766 4.995 1.964-1.171 0.342-3.864-3.112-7.706-5.064-5.647-11.415-5.137-12.064-3.543z"/>
+ <path fill="#141414" d="m145.456 47.172c-0.701 1.813 6.966 4.263 8.946 6.011 2.557 2.266 2.772 6.53 5.575 4.835 1.897-1.129 0.287-3.76-2.998-7.418-4.807-5.369-10.874-4.952-11.523-3.428z"/>
+ <path fill="#191919" d="m145.944 47.369c-0.696 1.726 6.53 4.051 8.483 5.768 2.493 2.203 2.71 6.291 5.385 4.676 1.833-1.087 0.231-3.656-2.884-7.13-4.551-5.093-10.335-4.769-10.984-3.314z"/>
+ <path fill="#1e1e1e" d="m146.433 47.565c-0.692 1.64 6.093 3.839 8.019 5.525 2.431 2.14 2.647 6.052 5.194 4.517 1.768-1.046 0.179-3.552-2.77-6.843-4.293-4.814-9.794-4.585-10.443-3.199z"/>
+ <path fill="#232323" d="m146.921 47.762c-0.686 1.553 5.657 3.627 7.558 5.282 2.367 2.076 2.583 5.813 5.003 4.357 1.702-1.003 0.124-3.448-2.654-6.555-4.04-4.537-9.257-4.401-9.907-3.084z"/>
+ <path fill="#282828" d="m147.409 47.959c-0.681 1.466 5.221 3.415 7.094 5.039 2.305 2.013 2.521 5.573 4.813 4.198 1.637-0.962 0.07-3.344-2.54-6.268-3.782-4.26-8.717-4.218-9.367-2.969z"/>
+ <path fill="#2d2d2d" d="m147.898 48.156c-0.677 1.379 4.784 3.203 6.63 4.795 2.242 1.949 2.457 5.333 4.622 4.039 1.572-0.92 0.016-3.24-2.425-5.98-3.526-3.983-8.177-4.034-8.827-2.854z"/>
+ <path fill="#333" d="m148.386 48.353c-0.673 1.292 4.348 2.99 6.167 4.552 2.179 1.886 2.394 5.095 4.432 3.88 1.506-0.878-0.038-3.136-2.312-5.693-3.268-3.705-7.636-3.85-8.287-2.739z"/>
+ <path fill="#383838" d="m148.875 48.549c-0.668 1.206 3.911 2.778 5.703 4.309 2.116 1.823 2.331 4.855 4.242 3.721 1.439-0.836-0.093-3.032-2.197-5.405-3.013-3.428-7.098-3.667-7.748-2.625z"/>
+ <path fill="#3d3d3d" d="m149.363 48.746c-0.662 1.119 3.475 2.566 5.24 4.065 2.053 1.759 2.268 4.616 4.052 3.562 1.375-0.795-0.147-2.928-2.082-5.118-2.757-3.15-6.559-3.483-7.21-2.509z"/>
+ <path fill="#424242" d="m149.851 48.942c-0.657 1.032 3.039 2.354 4.776 3.823 1.99 1.696 2.205 4.376 3.861 3.402 1.31-0.753-0.201-2.824-1.967-4.831-2.5-2.871-6.018-3.298-6.67-2.394z"/>
+ <path fill="#474747" d="m150.34 49.139c-0.652 0.946 2.603 2.142 4.313 3.58 1.927 1.632 2.143 4.137 3.671 3.243 1.244-0.712-0.256-2.72-1.853-4.543-2.245-2.595-5.48-3.115-6.131-2.28z"/>
+ <path fill="#4c4c4c" d="m150.828 49.336c-0.647 0.859 2.166 1.93 3.851 3.336 1.863 1.569 2.079 3.898 3.48 3.084 1.179-0.67-0.31-2.616-1.739-4.255-1.988-2.317-4.94-2.932-5.592-2.165z"/>
+ <path fill="#515151" d="m151.317 49.533c-0.645 0.772 1.729 1.718 3.386 3.093 1.802 1.505 2.018 3.658 3.29 2.925 1.114-0.628-0.364-2.512-1.624-3.968-1.732-2.04-4.4-2.748-5.052-2.05z"/>
+ <path fill="#565656" d="m151.805 49.729c-0.639 0.685 1.293 1.505 2.923 2.85 1.738 1.442 1.954 3.419 3.1 2.766 1.048-0.586-0.418-2.408-1.509-3.681-1.476-1.762-3.862-2.563-4.514-1.935z"/>
+ <path fill="#5b5b5b" d="m152.293 49.926c-0.633 0.598 0.857 1.293 2.46 2.606 1.677 1.379 1.892 3.18 2.91 2.606 0.983-0.544-0.473-2.304-1.395-3.393-1.22-1.483-3.322-2.379-3.975-1.819z"/>
+ <path fill="#606060" d="m152.782 50.123c-0.629 0.512 0.42 1.081 1.996 2.363 1.613 1.315 1.828 2.94 2.719 2.447 0.918-0.502-0.525-2.2-1.28-3.105-0.963-1.207-2.782-2.196-3.435-1.705z"/>
+ <path fill="#666" d="m153.27 50.319c-0.624 0.425-0.017 0.869 1.533 2.12 1.55 1.252 1.765 2.701 2.528 2.288 0.853-0.461-0.581-2.096-1.166-2.818-0.706-0.929-2.242-2.012-2.895-1.59z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m193.47 45.594c-0.072 1.08 2.951 1.728 4.896 2.448 1.944 0.648 5.76 3.24 7.56 5.256 1.801 1.944 5.688 7.704 6.553 6.192 0.863-1.368-2.017-5.328-2.809-6.984s-3.239-5.256-7.128-6.48c-3.384-1.008-9-1.297-9.072-0.432z"/>
+ <path fill="#060606" d="m193.779 45.67c-0.071 1.05 2.869 1.685 4.758 2.387 1.891 0.633 5.598 3.161 7.345 5.122 1.747 1.893 5.535 7.493 6.376 6.027 0.84-1.328-1.936-5.173-2.738-6.795-0.8-1.622-3.175-5.09-6.952-6.301-3.282-0.995-8.718-1.28-8.789-0.44z"/>
+ <path fill="#0c0c0c" d="m194.088 45.747c-0.07 1.021 2.785 1.641 4.62 2.327 1.836 0.618 5.436 3.081 7.131 4.988 1.692 1.842 5.382 7.282 6.198 5.862 0.814-1.288-1.855-5.019-2.67-6.607-0.808-1.587-3.11-4.925-6.776-6.122-3.178-0.983-8.433-1.264-8.503-0.448z"/>
+ <path fill="#131313" d="m194.397 45.824c-0.071 0.991 2.702 1.598 4.481 2.267 1.782 0.603 5.272 3.001 6.916 4.854 1.64 1.791 5.229 7.071 6.022 5.697 0.788-1.248-1.776-4.865-2.603-6.418-0.815-1.554-3.044-4.759-6.599-5.942-3.073-0.973-8.148-1.251-8.217-0.458z"/>
+ <path fill="#191919" d="m194.706 45.9c-0.069 0.961 2.618 1.555 4.345 2.206 1.728 0.588 5.109 2.922 6.7 4.721 1.586 1.74 5.075 6.86 5.846 5.531 0.764-1.207-1.696-4.711-2.532-6.23-0.824-1.519-2.979-4.593-6.424-5.763-2.972-0.959-7.866-1.234-7.935-0.465z"/>
+ <path fill="#1f1f1f" d="m195.015 45.977c-0.07 0.931 2.534 1.511 4.207 2.146 1.672 0.573 4.945 2.843 6.485 4.586 1.531 1.689 4.921 6.649 5.668 5.367 0.738-1.167-1.616-4.557-2.464-6.042-0.832-1.485-2.914-4.428-6.247-5.583-2.868-0.948-7.581-1.219-7.649-0.474z"/>
+ <path fill="#262626" d="m195.324 46.054c-0.069 0.901 2.451 1.468 4.069 2.085 1.618 0.557 4.784 2.763 6.271 4.453 1.479 1.638 4.769 6.438 5.491 5.201 0.714-1.127-1.536-4.402-2.396-5.854-0.839-1.451-2.848-4.263-6.07-5.404-2.765-0.934-7.298-1.202-7.365-0.481z"/>
+ <path fill="#2c2c2c" d="m195.632 46.13c-0.067 0.872 2.369 1.424 3.933 2.025 1.563 0.542 4.621 2.684 6.056 4.318 1.424 1.587 4.615 6.228 5.315 5.036 0.688-1.086-1.456-4.248-2.326-5.665-0.848-1.416-2.783-4.097-5.896-5.224-2.662-0.923-7.015-1.187-7.082-0.49z"/>
+ <path fill="#333" d="m195.941 46.207c-0.068 0.842 2.285 1.381 3.794 1.964 1.51 0.527 4.458 2.605 5.842 4.185 1.37 1.536 4.461 6.016 5.138 4.871 0.662-1.046-1.377-4.093-2.258-5.476-0.855-1.382-2.718-3.932-5.718-5.045-2.56-0.911-6.732-1.172-6.798-0.499z"/>
+ <path fill="#393939" d="m196.25 46.284c-0.066 0.813 2.202 1.338 3.656 1.904 1.456 0.512 4.296 2.525 5.627 4.051 1.317 1.485 4.308 5.805 4.961 4.706 0.638-1.006-1.296-3.939-2.188-5.288-0.863-1.348-2.652-3.766-5.542-4.866-2.457-0.899-6.449-1.157-6.514-0.507z"/>
+ <path fill="#3f3f3f" d="m196.559 46.36c-0.067 0.783 2.118 1.295 3.518 1.844 1.402 0.497 4.133 2.446 5.412 3.917 1.263 1.434 4.155 5.594 4.785 4.541 0.612-0.966-1.217-3.785-2.12-5.1-0.872-1.313-2.587-3.6-5.366-4.687-2.353-0.886-6.165-1.141-6.229-0.515z"/>
+ <path fill="#464646" d="m196.868 46.437c-0.065 0.753 2.035 1.251 3.38 1.783 1.349 0.482 3.972 2.367 5.197 3.783 1.21 1.383 4.002 5.383 4.608 4.375 0.588-0.926-1.137-3.63-2.052-4.911-0.879-1.279-2.521-3.435-5.189-4.507-2.25-0.874-5.881-1.125-5.944-0.523z"/>
+ <path fill="#4c4c4c" d="m197.177 46.514c-0.066 0.723 1.95 1.208 3.241 1.723 1.293 0.467 3.809 2.287 4.983 3.649 1.155 1.332 3.848 5.172 4.431 4.21 0.563-0.885-1.057-3.476-1.982-4.723-0.888-1.245-2.456-3.269-5.014-4.328-2.146-0.862-5.597-1.109-5.659-0.531z"/>
+ <path fill="#525252" d="m197.486 46.591c-0.066 0.693 1.868 1.164 3.104 1.662 1.239 0.452 3.646 2.208 4.769 3.515 1.102 1.281 3.695 4.961 4.254 4.045 0.537-0.845-0.976-3.321-1.913-4.534-0.896-1.21-2.391-3.103-4.838-4.148-2.044-0.851-5.315-1.095-5.376-0.54z"/>
+ <path fill="#595959" d="m197.795 46.667c-0.064 0.664 1.784 1.121 2.968 1.602 1.184 0.437 3.481 2.128 4.552 3.381 1.049 1.23 3.542 4.75 4.078 3.88 0.512-0.805-0.897-3.167-1.846-4.346-0.902-1.176-2.325-2.938-4.66-3.969-1.942-0.838-5.031-1.078-5.092-0.548z"/>
+ <path fill="#5f5f5f" d="m198.104 46.744c-0.065 0.634 1.701 1.078 2.829 1.541 1.13 0.421 3.318 2.049 4.338 3.248 0.994 1.179 3.388 4.539 3.899 3.715 0.487-0.765-0.815-3.013-1.775-4.157-0.911-1.142-2.261-2.772-4.485-3.79-1.837-0.826-4.746-1.064-4.806-0.557z"/>
+ <path fill="#666" d="m198.413 46.821c-0.063 0.604 1.617 1.034 2.691 1.481 1.076 0.406 3.157 1.969 4.123 3.113 0.94 1.128 3.234 4.328 3.724 3.55 0.462-0.725-0.737-2.858-1.707-3.969-0.919-1.108-2.195-2.606-4.309-3.61-1.734-0.814-4.463-1.049-4.522-0.565z"/>
+ <path fill="#6c6c6c" d="m198.721 46.897c-0.063 0.574 1.534 0.991 2.554 1.42 1.021 0.391 2.994 1.89 3.908 2.979 0.887 1.077 3.082 4.117 3.548 3.384 0.436-0.685-0.657-2.704-1.64-3.78-0.927-1.074-2.13-2.44-4.132-3.431-1.631-0.8-4.179-1.031-4.238-0.572z"/>
+ <path fill="#727272" d="m199.03 46.974c-0.063 0.544 1.451 0.948 2.416 1.36 0.967 0.376 2.831 1.811 3.694 2.846 0.833 1.026 2.928 3.906 3.369 3.219 0.411-0.644-0.576-2.549-1.569-3.592-0.936-1.04-2.064-2.275-3.956-3.251-1.528-0.79-3.896-1.017-3.954-0.582z"/>
+ <path fill="#797979" d="m199.339 47.051c-0.062 0.515 1.368 0.904 2.278 1.299 0.913 0.361 2.669 1.731 3.479 2.712 0.779 0.975 2.774 3.695 3.193 3.054 0.386-0.604-0.497-2.396-1.501-3.403-0.942-1.005-1.999-2.11-3.78-3.072-1.424-0.778-3.612-1.002-3.669-0.59z"/>
+ <path fill="#7f7f7f" d="m199.648 47.127c-0.063 0.485 1.284 0.861 2.14 1.239 0.859 0.346 2.506 1.652 3.265 2.578 0.726 0.924 2.621 3.484 3.017 2.889 0.361-0.564-0.417-2.241-1.432-3.215-0.951-0.971-1.935-1.944-3.604-2.893-1.323-0.765-3.33-0.986-3.386-0.598z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#995900" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.017 11.592-31.104 19.152-13.968 9.576-18.792 13.824-23.328 18.359-7.056 7.057-13.752 9.432-24.48 9.432s-15.552-2.231-18.863-5.184c-3.313-2.88-6.984-10.225-6.624-21.168 0.288-10.872 3.744-20.809 5.399-37.729 0.721-7.271 0.648-16.271 0.648-24.264 0-10.08 0.144-18.648 2.304-19.943 3.889-2.448 4.752-2.592 9.36-2.592 4.607 0 6.696 0.287 8.208 1.799 1.439 1.44 0.864 4.752 0.359 9.433-0.432 4.681 1.801 6.192 4.032 8.136 2.232 1.872 4.248 4.248 11.305 4.824 7.056 0.504 9.647-0.648 12.96-2.736 3.312-2.088 7.991-5.832 9.72-7.992 1.656-2.088 5.76-9.287 6.552-9.287 0.719 0 5.472-1.656 8.136 2.232z"/>
+ <path fill="#9e5e00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.12 11.556-31.26 19.008-13.885 9.371-18.903 13.54-23.521 17.902-6.912 6.74-13.414 9.084-23.915 9.019-10.411-0.047-15.116-2.181-18.414-5.118-3.297-2.867-6.931-9.966-6.613-20.578 0.205-10.851 3.701-20.683 5.256-37.279 0.666-7.379 0.407-16.303 0.335-24.375-0.076-10.068-0.072-18.627 2.084-19.922 3.889-2.444 4.752-2.592 9.36-2.592 4.607 0 6.7 0.291 8.208 1.799 1.491 1.492 0.767 4.887 0.205 9.408-0.63 4.658 1.458 6.486 3.795 8.607 2.34 2.059 4.489 4.471 11.534 5.021 7.232 0.482 10.015-0.832 13.362-3.106 3.303-2.207 7.773-5.903 9.513-8.168 1.641-2.132 5.727-9.386 6.519-9.386 0.719 0 5.472-1.656 8.136 2.232z"/>
+ <path fill="#a36400" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.226 11.52-31.414 18.863-13.803 9.166-19.016 13.256-23.717 17.447-6.768 6.422-13.075 8.733-23.35 8.604-10.094-0.094-14.682-2.131-17.964-5.055-3.283-2.852-6.876-9.705-6.603-19.987 0.122-10.828 3.657-20.556 5.112-36.828 0.612-7.487 0.165-16.336 0.021-24.487-0.15-10.058-0.287-18.605 1.865-19.9 3.889-2.44 4.752-2.592 9.36-2.592 4.607 0 6.703 0.295 8.208 1.799 1.541 1.541 0.67 5.02 0.051 9.383-0.828 4.637 1.116 6.781 3.556 9.078 2.448 2.248 4.731 4.695 11.766 5.221 7.409 0.461 10.383-1.016 13.767-3.477 3.29-2.326 7.552-5.977 9.302-8.346 1.627-2.175 5.695-9.482 6.487-9.482 0.72-0.001 5.473-1.657 8.137 2.231z"/>
+ <path fill="#a86a00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.329 11.484-31.568 18.72-13.721 8.961-19.127 12.972-23.911 16.989-6.624 6.105-12.737 8.384-22.785 8.189-9.777-0.141-14.245-2.08-17.514-4.99-3.27-2.836-6.822-9.445-6.591-19.396 0.038-10.807 3.613-20.43 4.968-36.378 0.558-7.597-0.076-16.368-0.292-24.599-0.228-10.047-0.504-18.584 1.645-19.879 3.889-2.438 4.752-2.592 9.36-2.592 4.607 0 6.707 0.299 8.208 1.799 1.591 1.593 0.573 5.152-0.104 9.357-1.025 4.615 0.774 7.077 3.319 9.551 2.556 2.434 4.972 4.918 11.995 5.418 7.585 0.439 10.75-1.199 14.17-3.849 3.279-2.444 7.333-6.048 9.093-8.521 1.613-2.219 5.663-9.58 6.455-9.58 0.719 0.001 5.472-1.655 8.136 2.233z"/>
+ <path fill="#ad7000" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.434 11.447-31.724 18.576-13.637 8.756-19.238 12.687-24.106 16.531-6.479 5.789-12.397 8.035-22.219 7.776-9.461-0.188-13.809-2.03-17.063-4.925-3.254-2.823-6.769-9.188-6.581-18.807-0.043-10.785 3.571-20.305 4.824-35.928 0.504-7.705-0.316-16.402-0.604-24.711-0.303-10.037-0.72-18.563 1.425-19.857 3.889-2.434 4.752-2.592 9.36-2.592 4.607 0 6.711 0.303 8.208 1.799 1.642 1.643 0.475 5.285-0.259 9.332-1.225 4.594 0.432 7.373 3.082 10.022 2.664 2.621 5.212 5.142 12.225 5.616 7.762 0.418 11.117-1.383 14.573-4.219 3.269-2.563 7.113-6.121 8.885-8.698 1.598-2.261 5.63-9.677 6.422-9.677 0.719 0.002 5.472-1.654 8.136 2.234z"/>
+ <path fill="#b27500" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.538 11.412-31.879 18.432-13.554 8.551-19.35 12.402-24.3 16.074-6.336 5.473-12.06 7.686-21.654 7.361-9.144-0.233-13.374-1.979-16.613-4.859-3.24-2.809-6.714-8.928-6.57-18.216-0.126-10.765 3.528-20.179 4.68-35.478 0.45-7.813-0.558-16.435-0.918-24.822-0.378-10.026-0.936-18.541 1.206-19.836 3.889-2.43 4.752-2.592 9.36-2.592 4.607 0 6.714 0.305 8.208 1.799 1.691 1.693 0.378 5.418-0.414 9.307-1.422 4.572 0.09 7.668 2.844 10.494 2.772 2.808 5.454 5.363 12.456 5.814 7.938 0.396 11.484-1.566 14.977-4.591 3.258-2.682 6.894-6.192 8.676-8.874 1.584-2.304 5.598-9.773 6.39-9.773 0.718 0 5.471-1.656 8.135 2.232z"/>
+ <path fill="#b77b00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.643 11.376-32.033 18.288-13.472 8.345-19.461 12.118-24.494 15.616-6.192 5.156-11.723 7.338-21.089 6.949-8.827-0.281-12.938-1.93-16.164-4.795-3.226-2.795-6.66-8.67-6.56-17.627-0.209-10.742 3.485-20.052 4.536-35.027 0.396-7.92-0.799-16.467-1.23-24.934-0.454-10.015-1.152-18.52 0.985-19.814 3.889-2.426 4.752-2.592 9.36-2.592 4.607 0 6.718 0.31 8.208 1.799 1.743 1.744 0.281 5.553-0.569 9.281-1.62 4.551-0.252 7.963 2.607 10.967 2.88 2.994 5.694 5.586 12.686 6.012 8.115 0.373 11.852-1.75 15.379-4.961 3.248-2.801 6.676-6.264 8.469-9.051 1.568-2.348 5.564-9.871 6.356-9.871 0.72 0 5.473-1.656 8.137 2.232z"/>
+ <path fill="#bc8100" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.747 11.34-32.188 18.145-13.389 8.139-19.574 11.834-24.689 15.159-6.048 4.839-11.383 6.988-20.523 6.534-8.51-0.328-12.503-1.879-15.714-4.73-3.211-2.779-6.606-8.41-6.549-17.035-0.292-10.721 3.441-19.926 4.393-34.578 0.342-8.028-1.041-16.498-1.545-25.045-0.529-10.004-1.368-18.498 0.767-19.793 3.889-2.422 4.752-2.592 9.36-2.592 4.607 0 6.721 0.313 8.208 1.799 1.793 1.793 0.184 5.686-0.723 9.256-1.818 4.529-0.595 8.259 2.367 11.438 2.988 3.184 5.938 5.811 12.917 6.211 8.291 0.352 12.22-1.934 15.783-5.332 3.236-2.92 6.454-6.336 8.258-9.227 1.556-2.391 5.533-9.969 6.325-9.969 0.72-0.001 5.473-1.657 8.137 2.231z"/>
+ <path fill="#c18700" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.852 11.304-32.343 18-13.306 7.936-19.685 11.549-24.883 14.703-5.904 4.521-11.045 6.638-19.959 6.119-8.193-0.375-12.067-1.828-15.264-4.666-3.197-2.764-6.553-8.149-6.537-16.444-0.375-10.699 3.397-19.8 4.248-34.128 0.288-8.137-1.282-16.531-1.858-25.156-0.604-9.994-1.584-18.477 0.547-19.771 3.889-2.42 4.752-2.592 9.36-2.592 4.607 0 6.725 0.316 8.208 1.799 1.843 1.845 0.087 5.818-0.878 9.231-2.017 4.507-0.937 8.554 2.131 11.909 3.096 3.369 6.178 6.033 13.146 6.408 8.468 0.33 12.587-2.117 16.187-5.703 3.225-3.038 6.235-6.408 8.049-9.402 1.541-2.436 5.501-10.066 6.293-10.066 0.72-0.001 5.473-1.657 8.137 2.231z"/>
+ <path fill="#c68c00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-20.955 11.268-32.498 17.855-13.223 7.73-19.796 11.266-25.077 14.246-5.761 4.204-10.706 6.289-19.394 5.707-7.877-0.423-11.631-1.779-14.813-4.602-3.183-2.751-6.498-7.891-6.527-15.855-0.457-10.677 3.355-19.674 4.104-33.678 0.234-8.244-1.521-16.563-2.17-25.268-0.681-9.983-1.8-18.455 0.327-19.75 3.889-2.416 4.752-2.592 9.36-2.592 4.607 0 6.729 0.32 8.208 1.799 1.894 1.895-0.011 5.951-1.033 9.207-2.214 4.484-1.278 8.848 1.895 12.379 3.203 3.558 6.418 6.258 13.377 6.607 8.644 0.309 12.952-2.301 16.589-6.074 3.215-3.156 6.016-6.479 7.841-9.58 1.526-2.477 5.468-10.162 6.26-10.162 0.718 0.001 5.471-1.655 8.135 2.233z"/>
+ <path fill="#cc9200" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.061 11.232-32.652 17.712-13.141 7.524-19.908 10.979-25.272 13.788-5.616 3.888-10.368 5.939-18.828 5.292-7.56-0.468-11.195-1.728-14.363-4.536-3.168-2.736-6.444-7.632-6.517-15.264-0.54-10.656 3.313-19.549 3.96-33.229 0.181-8.352-1.764-16.596-2.483-25.38-0.757-9.972-2.017-18.433 0.107-19.728 3.889-2.412 4.752-2.592 9.36-2.592 4.607 0 6.731 0.323 8.208 1.799 1.944 1.945-0.108 6.084-1.188 9.181-2.412 4.464-1.62 9.144 1.656 12.853 3.313 3.744 6.66 6.479 13.608 6.803 8.819 0.289 13.319-2.483 16.991-6.443 3.204-3.275 5.797-6.553 7.633-9.756 1.512-2.52 5.436-10.26 6.228-10.26 0.719 0 5.472-1.656 8.136 2.232z"/>
+ <path fill="#d19800" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.164 11.195-32.808 17.568-13.057 7.318-20.019 10.695-25.466 13.33-5.473 3.571-10.03 5.592-18.263 4.879-7.243-0.516-10.761-1.678-13.914-4.472-3.153-2.722-6.391-7.372-6.506-14.674-0.623-10.634 3.27-19.422 3.816-32.778 0.126-8.459-2.005-16.627-2.797-25.49-0.832-9.961-2.232-18.412-0.112-19.707 3.889-2.408 4.752-2.592 9.36-2.592 4.607 0 6.736 0.328 8.208 1.799 1.995 1.996-0.205 6.219-1.343 9.156-2.61 4.442-1.962 9.438 1.419 13.323 3.42 3.931 6.9 6.703 13.838 7.002 8.997 0.267 13.687-2.668 17.395-6.815 3.194-3.395 5.577-6.623 7.424-9.932 1.497-2.564 5.403-10.357 6.195-10.357 0.721 0 5.474-1.656 8.138 2.232z"/>
+ <path fill="#d69e00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.27 11.16-32.962 17.424-12.975 7.114-20.132 10.412-25.661 12.874-5.327 3.254-9.69 5.242-17.697 4.464-6.927-0.563-10.325-1.627-13.464-4.406-3.14-2.707-6.337-7.113-6.494-14.084-0.706-10.611 3.225-19.295 3.672-32.328 0.072-8.567-2.247-16.66-3.111-25.603-0.907-9.95-2.448-18.39-0.331-19.685 3.889-2.404 4.752-2.592 9.36-2.592 4.607 0 6.739 0.332 8.208 1.799 2.045 2.045-0.302 6.352-1.497 9.131-2.808 4.421-2.304 9.734 1.18 13.795 3.528 4.119 7.144 6.927 14.069 7.199 9.173 0.246 14.055-2.851 17.799-7.185 3.182-3.514 5.356-6.696 7.214-10.108 1.483-2.607 5.371-10.455 6.163-10.455 0.719 0 5.472-1.656 8.136 2.232z"/>
+ <path fill="#dba300" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.373 11.124-33.116 17.279-12.893 6.91-20.243 10.127-25.855 12.418-5.184 2.937-9.353 4.892-17.133 4.05-6.609-0.609-9.889-1.577-13.014-4.343-3.125-2.692-6.282-6.854-6.483-13.492-0.789-10.592 3.182-19.17 3.528-31.879 0.018-8.676-2.488-16.692-3.425-25.713-0.982-9.94-2.664-18.369-0.551-19.664 3.889-2.401 4.752-2.592 9.36-2.592 4.607 0 6.743 0.334 8.208 1.799 2.095 2.097-0.399 6.484-1.652 9.105-3.006 4.398-2.646 10.029 0.943 14.268 3.636 4.305 7.384 7.148 14.299 7.397 9.349 0.224 14.422-3.034 18.202-7.558 3.171-3.631 5.137-6.768 7.005-10.284 1.469-2.649 5.339-10.552 6.131-10.552 0.72 0.001 5.473-1.655 8.137 2.233z"/>
+ <path fill="#e0a900" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.478 11.088-33.271 17.136-12.81 6.704-20.354 9.843-26.05 11.96-5.04 2.62-9.015 4.543-16.567 3.637-6.293-0.656-9.453-1.527-12.563-4.277-3.11-2.68-6.229-6.596-6.474-12.903-0.871-10.569 3.141-19.044 3.384-31.428-0.035-8.784-2.728-16.726-3.735-25.826-1.06-9.929-2.88-18.347-0.771-19.642 3.889-2.397 4.752-2.592 9.36-2.592 4.607 0 6.747 0.338 8.208 1.799 2.146 2.146-0.497 6.617-1.808 9.08-3.203 4.377-2.987 10.324 0.706 14.738 3.744 4.493 7.624 7.373 14.529 7.596 9.526 0.203 14.789-3.217 18.605-7.926 3.161-3.752 4.918-6.841 6.797-10.463 1.454-2.693 5.306-10.648 6.098-10.648 0.719-0.001 5.472-1.657 8.136 2.231z"/>
+ <path fill="#e5af00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.582 11.052-33.427 16.992-12.726 6.498-20.466 9.558-26.244 11.502-4.896 2.304-8.676 4.193-16.002 3.222-5.976-0.702-9.018-1.476-12.114-4.212-3.096-2.664-6.174-6.336-6.462-12.313-0.953-10.547 3.097-18.918 3.24-30.978-0.09-8.892-2.97-16.758-4.05-25.938-1.134-9.918-3.096-18.324-0.99-19.619 3.889-2.395 4.752-2.592 9.36-2.592 4.607 0 6.75 0.342 8.208 1.799 2.196 2.197-0.594 6.75-1.962 9.055-3.402 4.355-3.33 10.619 0.468 15.21 3.852 4.681 7.866 7.597 14.76 7.794 9.702 0.18 15.156-3.402 19.008-8.298 3.15-3.87 4.698-6.912 6.589-10.638 1.439-2.736 5.273-10.746 6.065-10.746 0.72 0 5.473-1.656 8.137 2.232z"/>
+ <path fill="#eab500" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.687 11.016-33.582 16.848-12.643 6.293-20.576 9.274-26.438 11.045-4.752 1.987-8.338 3.846-15.438 2.809-5.658-0.75-8.582-1.426-11.664-4.147-3.08-2.649-6.119-6.077-6.45-11.722-1.037-10.526 3.053-18.792 3.096-30.528-0.144-9-3.211-16.79-4.363-26.049-1.21-9.907-3.312-18.304-1.21-19.599 3.889-2.391 4.752-2.592 9.36-2.592 4.607 0 6.754 0.346 8.208 1.799 2.247 2.248-0.691 6.885-2.117 9.029-3.6 4.336-3.672 10.916 0.231 15.682 3.96 4.867 8.106 7.82 14.989 7.992 9.879 0.158 15.523-3.586 19.411-8.668 3.141-3.99 4.479-6.984 6.38-10.814 1.426-2.78 5.241-10.844 6.033-10.844 0.721-0.001 5.474-1.657 8.138 2.231z"/>
+ <path fill="#efba00" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.791 10.98-33.735 16.703-12.562 6.089-20.69 8.99-26.633 10.589-4.608 1.67-7.999 3.496-14.872 2.394-5.343-0.796-8.147-1.375-11.215-4.082-3.066-2.636-6.065-5.818-6.439-11.132-1.12-10.504 3.009-18.666 2.952-30.077-0.198-9.109-3.453-16.822-4.677-26.162-1.285-9.896-3.528-18.281-1.43-19.576 3.889-2.387 4.752-2.592 9.36-2.592 4.607 0 6.757 0.35 8.208 1.799 2.297 2.297-0.788 7.018-2.271 9.004-3.798 4.314-4.014 11.211-0.008 16.154 4.068 5.055 8.35 8.043 15.221 8.189 10.056 0.137 15.892-3.77 19.815-9.039 3.128-4.107 4.258-7.057 6.17-10.99 1.411-2.824 5.209-10.941 6.001-10.941 0.72-0.001 5.473-1.657 8.137 2.231z"/>
+ <path fill="#f4c000" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.896 10.943-33.891 16.561-12.478 5.883-20.801 8.704-26.827 10.131-4.464 1.353-7.661 3.146-14.307 1.979-5.025-0.843-7.711-1.325-10.765-4.019-3.053-2.621-6.012-5.558-6.429-10.541-1.203-10.482 2.966-18.539 2.809-29.627-0.253-9.217-3.694-16.855-4.99-26.272-1.361-9.886-3.744-18.261-1.649-19.556 3.889-2.383 4.752-2.592 9.36-2.592 4.607 0 6.761 0.353 8.208 1.799 2.347 2.349-0.885 7.15-2.426 8.979-3.996 4.291-4.356 11.505-0.245 16.625 4.176 5.241 8.59 8.265 15.451 8.388 10.23 0.115 16.258-3.953 20.218-9.41 3.117-4.227 4.039-7.129 5.961-11.168 1.396-2.865 5.177-11.037 5.969-11.037 0.72 0 5.473-1.656 8.137 2.232z"/>
+ <path fill="#f9c600" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-21.999 10.908-34.046 16.416-12.395 5.678-20.912 8.421-27.021 9.674-4.32 1.036-7.322 2.797-13.741 1.566-4.709-0.891-7.275-1.275-10.314-3.953-3.037-2.607-5.958-5.299-6.419-9.951-1.284-10.461 2.925-18.414 2.664-29.178-0.306-9.324-3.934-16.887-5.302-26.385-1.437-9.875-3.96-18.238-1.869-19.533 3.889-2.379 4.752-2.592 9.36-2.592 4.607 0 6.765 0.356 8.208 1.799 2.397 2.398-0.983 7.283-2.581 8.955-4.194 4.269-4.698 11.799-0.482 17.096 4.284 5.429 8.83 8.488 15.682 8.586 10.407 0.094 16.625-4.137 20.621-9.781 3.106-4.345 3.819-7.199 5.753-11.344 1.382-2.909 5.144-11.135 5.936-11.135 0.718 0 5.471-1.656 8.135 2.232z"/>
+ <path fill="#fc0" d="m303.631 262.529c4.464 6.479-0.145 14.904 3.096 20.089 5.328 8.496 16.056 17.063 20.16 19.439 2.952 1.8 7.128 3.527 6.983 8.783-0.216 5.977-3.168 7.561-4.823 9.217-3.313 3.313-22.104 10.872-34.2 16.271-12.313 5.473-21.024 8.137-27.217 9.217-4.176 0.72-6.983 2.447-13.176 1.151-4.392-0.937-6.84-1.224-9.864-3.888-3.023-2.592-5.903-5.04-6.407-9.359-1.368-10.441 2.88-18.289 2.52-28.729-0.36-9.432-4.176-16.92-5.616-26.496-1.512-9.864-4.176-18.217-2.088-19.512 3.889-2.377 4.752-2.592 9.36-2.592 4.607 0 6.768 0.359 8.208 1.799 2.448 2.449-1.08 7.416-2.736 8.929-4.392 4.248-5.04 12.096-0.72 17.567 4.392 5.617 9.072 8.713 15.912 8.785 10.584 0.071 16.992-4.32 21.023-10.152 3.097-4.465 3.601-7.272 5.544-11.521 1.368-2.952 5.112-11.231 5.904-11.231 0.72 0.001 5.473-1.655 8.137 2.233z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fc0" d="m236.263 275.762c-0.709-0.258-3.932-15.209-2.191-16.239 3.351-1.997 4.253-2.319 8.377-2.319s6.057 0.322 7.346 1.61c2.126 2.127-1.159 6.702-2.448 7.991-3.738 3.673-10.375 9.215-11.084 8.957z"/>
+ <path fill="#ffcc02" d="m236.492 275.286c-0.77-0.326-4.102-14.719-2.368-15.742 3.344-1.992 4.278-2.211 8.322-2.211 4.124 0 5.976 0.269 7.282 1.602 2.105 2.136-1.119 6.572-2.398 7.852-3.727 3.663-10.081 8.811-10.838 8.499z"/>
+ <path fill="#ffcc05" d="m236.721 274.809c-0.832-0.393-4.273-14.229-2.547-15.247 3.339-1.983 4.306-2.101 8.269-2.101 4.124 0 5.896 0.213 7.217 1.592 2.087 2.146-1.076 6.443-2.346 7.714-3.718 3.653-9.788 8.409-10.593 8.042z"/>
+ <path fill="#ffcc07" d="m236.949 274.333c-0.892-0.461-4.443-13.74-2.722-14.75 3.331-1.979 4.33-1.992 8.213-1.992 4.124 0 5.814 0.158 7.151 1.582 2.068 2.156-1.033 6.316-2.294 7.574-3.707 3.644-9.494 8.007-10.348 7.586z"/>
+ <path fill="#ffcd0a" d="m237.178 273.855c-0.954-0.528-4.614-13.249-2.9-14.254 3.326-1.972 4.355-1.882 8.158-1.882 4.124 0 5.734 0.104 7.089 1.572 2.048 2.166-0.993 6.187-2.243 7.437-3.699 3.634-9.202 7.605-10.104 7.127z"/>
+ <path fill="#ffcd0c" d="m237.407 273.377c-1.015-0.596-4.785-12.758-3.077-13.758 3.319-1.965 4.382-1.771 8.104-1.771 4.124 0 5.653 0.049 7.023 1.563 2.029 2.176-0.951 6.057-2.19 7.299-3.69 3.623-8.91 7.201-9.86 6.667z"/>
+ <path fill="#ffcd0f" d="m237.636 272.901c-1.077-0.662-4.956-12.27-3.256-13.261 3.313-1.959 4.408-1.663 8.05-1.663 4.124 0 5.573-0.006 6.959 1.553 2.01 2.186-0.908 5.93-2.14 7.159-3.679 3.614-8.615 6.8-9.613 6.212z"/>
+ <path fill="#ffcd11" d="m237.864 272.424c-1.137-0.731-5.126-11.779-3.431-12.766 3.306-1.951 4.433-1.553 7.994-1.553 4.123 0 5.492-0.061 6.895 1.543 1.991 2.193-0.867 5.801-2.089 7.021-3.669 3.606-8.321 6.397-9.369 5.755z"/>
+ <path fill="#ffce14" d="m238.093 271.948c-1.197-0.799-5.297-11.289-3.607-12.27 3.299-1.946 4.459-1.443 7.938-1.443 4.124 0 5.412-0.115 6.83 1.533 1.973 2.204-0.824 5.671-2.037 6.883-3.659 3.596-8.028 5.993-9.124 5.297z"/>
+ <path fill="#ffce16" d="m238.322 271.471c-1.26-0.867-5.468-10.801-3.786-11.773 3.293-1.939 4.485-1.334 7.884-1.334 4.124 0 5.332-0.171 6.767 1.524 1.953 2.213-0.783 5.542-1.985 6.743-3.651 3.586-7.736 5.591-8.88 4.84z"/>
+ <path fill="#ffce19" d="m238.551 270.995c-1.32-0.935-5.639-10.312-3.963-11.277 3.286-1.934 4.511-1.225 7.829-1.225 4.124 0 5.252-0.226 6.702 1.514 1.934 2.224-0.741 5.414-1.934 6.605-3.64 3.576-7.442 5.187-8.634 4.383z"/>
+ <path fill="#ffce1c" d="m238.779 270.517c-1.382-1.002-5.809-9.821-4.14-10.781 3.279-1.926 4.535-1.114 7.774-1.114 4.124 0 5.171-0.279 6.637 1.504 1.914 2.233-0.698 5.285-1.882 6.467-3.63 3.566-7.148 4.784-8.389 3.924z"/>
+ <path fill="#ffcf1e" d="m239.008 270.04c-1.442-1.068-5.979-9.33-4.316-10.283 3.272-1.922 4.562-1.006 7.72-1.006 4.124 0 5.09-0.334 6.572 1.494 1.895 2.244-0.657 5.156-1.83 6.328-3.622 3.556-6.857 4.383-8.146 3.467z"/>
+ <path fill="#ffcf21" d="m239.237 269.563c-1.505-1.137-6.151-8.841-4.495-9.788 3.267-1.914 4.588-0.896 7.666-0.896 4.124 0 5.009-0.389 6.508 1.486 1.875 2.252-0.616 5.025-1.778 6.188-3.613 3.548-6.564 3.981-7.901 3.01z"/>
+ <path fill="#ffcf23" d="m239.466 269.086c-1.565-1.205-6.321-8.352-4.672-9.293 3.262-1.906 4.613-0.785 7.61-0.785 4.124 0 4.93-0.444 6.444 1.476 1.855 2.261-0.573 4.897-1.728 6.052-3.601 3.537-6.269 3.575-7.654 2.55z"/>
+ <path fill="#ffcf26" d="m239.694 268.61c-1.627-1.273-6.492-7.861-4.849-8.796 3.255-1.901 4.64-0.677 7.556-0.677 4.124 0 4.849-0.499 6.379 1.466 1.837 2.271-0.531 4.769-1.675 5.912-3.593 3.528-5.977 3.174-7.411 2.095z"/>
+ <path fill="#ffd028" d="m239.923 268.133c-1.688-1.34-6.663-7.373-5.025-8.301 3.248-1.895 4.665-0.566 7.501-0.566 4.124 0 4.768-0.555 6.314 1.456 1.817 2.28-0.489 4.64-1.624 5.774-3.583 3.519-5.684 2.771-7.166 1.637z"/>
+ <path fill="#ffd02b" d="m240.152 267.657c-1.749-1.408-6.834-6.883-5.203-7.805 3.241-1.889 4.69-0.457 7.446-0.457 4.124 0 4.687-0.609 6.25 1.447 1.798 2.289-0.448 4.51-1.573 5.635-3.572 3.509-5.39 2.367-6.92 1.18z"/>
+ <path fill="#ffd02d" d="m240.381 267.178c-1.811-1.475-7.005-6.391-5.381-7.307 3.235-1.881 4.717-0.348 7.393-0.348 4.124 0 4.606-0.664 6.185 1.438 1.779 2.299-0.405 4.381-1.521 5.496-3.564 3.501-5.098 1.965-6.676 0.721z"/>
+ <path fill="#ffd030" d="m240.609 266.702c-1.871-1.543-7.175-5.902-5.557-6.811 3.228-1.875 4.741-0.238 7.336-0.238 4.124 0 4.526-0.719 6.122 1.428 1.759 2.31-0.364 4.252-1.471 5.357-3.552 3.49-4.803 1.562-6.43 0.264z"/>
+ <path fill="#ffd133" d="m240.838 266.225c-1.933-1.611-7.346-5.413-5.734-6.314 3.222-1.869 4.768-0.129 7.281-0.129 4.124 0 4.446-0.773 6.058 1.418 1.74 2.318-0.322 4.123-1.418 5.219-3.545 3.48-4.512 1.16-6.187-0.194z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fc0" d="m302.769 263.374c3.742 5.461-0.062 12.76 2.638 17.117-6.809-6.258-9.938-8.834-19.324 0.367 2.577-3.742 3.129-6.257 4.725-9.814 1.104-2.455 4.354-9.57 5.029-9.57 0.613-0.001 4.724-1.35 6.932 1.9z"/>
+ <path fill="#ffcc02" d="m302.73 263.413c3.655 5.334 0.035 12.601 2.578 16.723-6.668-6.098-9.729-8.666-18.908 0.322 2.421-3.527 3.025-6.094 4.605-9.592 1.122-2.462 4.243-9.302 4.951-9.311 0.628-0.008 4.617-1.318 6.774 1.858z"/>
+ <path fill="#ffcc05" d="m302.691 263.45c3.568 5.209 0.132 12.441 2.517 16.332-6.526-5.938-9.519-8.5-18.492 0.277 2.268-3.314 2.924-5.934 4.488-9.372 1.141-2.468 4.132-9.032 4.873-9.052 0.641-0.013 4.508-1.284 6.614 1.815z"/>
+ <path fill="#ffcc07" d="m302.652 263.487c3.48 5.086 0.229 12.282 2.457 15.939-6.386-5.777-9.311-8.332-18.076 0.232 2.111-3.1 2.819-5.771 4.369-9.15 1.158-2.475 4.021-8.762 4.795-8.791 0.655-0.019 4.399-1.254 6.455 1.77z"/>
+ <path fill="#ffcd0a" d="m302.614 263.524c3.393 4.96 0.323 12.123 2.396 15.549-6.245-5.617-9.102-8.164-17.66 0.188 1.955-2.887 2.716-5.611 4.251-8.93 1.176-2.481 3.91-8.494 4.716-8.533 0.67-0.027 4.291-1.219 6.297 1.726z"/>
+ <path fill="#ffcd0c" d="m302.575 263.562c3.306 4.835 0.419 11.964 2.335 15.155-6.104-5.457-8.891-7.996-17.244 0.143 1.8-2.673 2.613-5.449 4.133-8.707 1.194-2.488 3.8-8.225 4.638-8.273 0.684-0.036 4.182-1.189 6.138 1.682z"/>
+ <path fill="#ffcd0f" d="m302.536 263.599c3.219 4.71 0.517 11.805 2.275 14.765-5.963-5.299-8.683-7.83-16.828 0.098 1.644-2.461 2.51-5.289 4.015-8.486 1.212-2.496 3.688-7.956 4.559-8.016 0.698-0.04 4.075-1.155 5.979 1.639z"/>
+ <path fill="#ffcd11" d="m302.497 263.637c3.131 4.585 0.612 11.645 2.216 14.371-5.822-5.137-8.474-7.661-16.413 0.053 1.489-2.245 2.406-5.125 3.896-8.264 1.229-2.504 3.576-7.688 4.479-7.756 0.714-0.046 3.968-1.123 5.822 1.596z"/>
+ <path fill="#ffce14" d="m302.458 263.674c3.044 4.459 0.708 11.486 2.154 13.979-5.681-4.978-8.263-7.493-15.996 0.009 1.334-2.033 2.303-4.965 3.779-8.043 1.247-2.511 3.464-7.418 4.4-7.498 0.728-0.052 3.859-1.089 5.663 1.553z"/>
+ <path fill="#ffce16" d="m302.42 263.711c2.956 4.336 0.804 11.328 2.094 13.588-5.54-4.817-8.055-7.326-15.58-0.036 1.178-1.819 2.199-4.804 3.659-7.822 1.267-2.517 3.354-7.149 4.323-7.237 0.741-0.061 3.75-1.058 5.504 1.507z"/>
+ <path fill="#ffce19" d="m302.381 263.749c2.868 4.211 0.9 11.168 2.033 13.196-5.398-4.657-7.845-7.159-15.164-0.081 1.022-1.605 2.097-4.642 3.542-7.601 1.283-2.524 3.241-6.88 4.244-6.979 0.755-0.067 3.642-1.026 5.345 1.465z"/>
+ <path fill="#ffce1c" d="m302.342 263.788c2.78 4.084 0.997 11.008 1.973 12.803-5.258-4.498-7.635-6.991-14.748-0.127 0.867-1.391 1.994-4.479 3.424-7.379 1.302-2.531 3.13-6.61 4.166-6.719 0.768-0.074 3.532-0.992 5.185 1.422z"/>
+ <path fill="#ffcf1e" d="m302.302 263.825c2.693 3.959 1.093 10.85 1.913 12.411-5.117-4.338-7.427-6.825-14.333-0.172 0.713-1.177 1.891-4.317 3.307-7.157 1.318-2.537 3.018-6.342 4.086-6.461 0.784-0.08 3.426-0.959 5.027 1.379z"/>
+ <path fill="#ffcf21" d="m302.263 263.862c2.606 3.834 1.188 10.689 1.853 12.02-4.976-4.178-7.217-6.657-13.916-0.217 0.556-0.963 1.786-4.156 3.188-6.936 1.337-2.545 2.906-6.072 4.008-6.202 0.797-0.086 3.318-0.927 4.867 1.335z"/>
+ <path fill="#ffcf23" d="m302.225 263.899c2.519 3.71 1.285 10.531 1.791 11.628-4.835-4.019-7.008-6.489-13.5-0.262 0.4-0.75 1.684-3.994 3.068-6.714 1.356-2.553 2.797-5.805 3.931-5.943 0.813-0.093 3.209-0.895 4.71 1.291z"/>
+ <path fill="#ffcf26" d="m302.186 263.937c2.431 3.584 1.381 10.371 1.73 11.235-4.693-3.857-6.798-6.322-13.084-0.307 0.245-0.535 1.58-3.832 2.951-6.492 1.373-2.56 2.686-5.535 3.852-5.685 0.828-0.1 3.101-0.861 4.551 1.249z"/>
+ <path fill="#ffd028" d="m302.147 263.974c2.344 3.46 1.477 10.213 1.671 10.845-4.553-3.699-6.589-6.156-12.668-0.354 0.089-0.321 1.477-3.67 2.832-6.271 1.392-2.565 2.574-5.267 3.772-5.425 0.842-0.104 2.994-0.828 4.393 1.205z"/>
+ <path fill="#ffd02b" d="m302.108 264.012c2.257 3.334 1.573 10.053 1.61 10.451-4.412-3.537-6.38-5.987-12.253-0.396-0.064-0.109 1.374-3.51 2.716-6.05 1.408-2.573 2.462-4.997 3.693-5.166 0.856-0.112 2.886-0.796 4.234 1.161z"/>
+ <path fill="#ffd02d" d="m302.069 264.049c2.17 3.209 1.67 9.894 1.55 10.061-4.271-3.379-6.17-5.82-11.836-0.441-0.221 0.104 1.271-3.35 2.596-5.83 1.428-2.58 2.352-4.728 3.615-4.906 0.87-0.12 2.777-0.765 4.075 1.116z"/>
+ <path fill="#ffd030" d="m302.03 264.086c2.082 3.084 1.767 9.736 1.49 9.668-4.131-3.219-5.961-5.652-11.42-0.486-0.377 0.318 1.167-3.188 2.478-5.607 1.445-2.586 2.239-4.459 3.536-4.647 0.884-0.127 2.669-0.732 3.916 1.072z"/>
+ <path fill="#ffd133" d="m301.991 264.124c1.995 2.959 1.862 9.576 1.43 9.277-3.989-3.059-5.752-5.486-11.005-0.531-0.532 0.531 1.064-3.027 2.36-5.387 1.463-2.594 2.128-4.189 3.458-4.389 0.899-0.133 2.561-0.699 3.757 1.03z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fc0" d="m305.862 283.481c5.977 7.848 17.064 16.271 21.024 18.576 2.88 1.656 7.056 3.6 6.983 8.783-0.144 5.904-3.168 7.561-4.823 9.217-3.313 3.313-22.177 10.943-34.2 16.271-12.24 5.4-21.097 8.209-27.217 9.217-4.104 0.647-7.056 2.375-13.176 1.151-4.32-0.864-6.912-1.296-9.864-3.888-2.951-2.52-5.976-5.184-6.407-9.359-1.225-10.369 3.672-16.921 8.424-25.921 3.888-7.2 11.735-8.64 16.632-7.991 17.568 2.375 16.416-8.641 21.24-13.465 4.464-4.463 17.208-8.064 21.384-2.591z"/>
+ <path fill="#ffcc02" d="m305.81 283.553c5.962 7.83 17.024 16.234 20.975 18.533 2.873 1.652 7.039 3.592 6.969 8.764-0.145 5.891-3.161 7.542-4.813 9.195-3.304 3.304-22.34 10.992-34.24 16.088-12.259 5.176-20.647 7.873-26.802 8.959-4.077 0.684-7.156 2.394-13.258 1.177-4.304-0.854-6.767-1.231-9.707-3.812-2.939-2.51-5.756-4.961-6.185-9.117-1.211-10.34 3.365-16.657 8.044-25.65 3.89-7.375 11.791-8.434 16.665-7.777 17.514 2.414 16.206-8.959 21.02-13.772 4.452-4.454 17.166-8.047 21.332-2.588z"/>
+ <path fill="#ffcc05" d="m305.76 283.627c5.946 7.812 16.982 16.195 20.925 18.488 2.866 1.648 7.022 3.584 6.951 8.743-0.144 5.876-3.153 7.524-4.801 9.173-3.298 3.297-22.506 11.043-34.28 15.907-12.279 4.949-20.201 7.538-26.389 8.699-4.051 0.721-7.256 2.413-13.341 1.202-4.286-0.846-6.619-1.168-9.55-3.733-2.924-2.501-5.536-4.741-5.959-8.877-1.198-10.312 3.058-16.394 7.664-25.379 3.89-7.552 11.845-8.229 16.698-7.563 17.458 2.453 15.995-9.279 20.797-14.08 4.443-4.443 17.127-8.026 21.285-2.58z"/>
+ <path fill="#ffcc07" d="m305.707 283.702c5.935 7.791 16.943 16.156 20.876 18.444 2.859 1.644 7.007 3.574 6.935 8.722-0.144 5.862-3.146 7.508-4.79 9.151-3.288 3.289-22.668 11.093-34.319 15.726-12.298 4.723-19.753 7.202-25.974 8.44-4.024 0.756-7.357 2.431-13.423 1.226-4.27-0.836-6.473-1.101-9.394-3.654-2.911-2.492-5.317-4.52-5.735-8.635-1.185-10.285 2.75-16.133 7.284-25.109 3.892-7.727 11.9-8.023 16.731-7.35 17.402 2.494 15.785-9.599 20.575-14.389 4.433-4.432 17.087-8.007 21.234-2.572z"/>
+ <path fill="#ffcd0a" d="m305.655 283.774c5.92 7.773 16.904 16.119 20.826 18.4 2.854 1.642 6.99 3.566 6.919 8.703-0.143 5.848-3.138 7.488-4.779 9.129-3.28 3.281-22.832 11.143-34.358 15.543-12.317 4.498-19.307 6.867-25.561 8.182-3.997 0.793-7.457 2.45-13.506 1.251-4.252-0.828-6.325-1.036-9.236-3.577-2.896-2.482-5.096-4.298-5.51-8.393-1.172-10.258 2.443-15.869 6.904-24.84 3.892-7.901 11.955-7.818 16.763-7.135 17.349 2.532 15.576-9.918 20.355-14.697 4.422-4.422 17.046-7.987 21.183-2.566z"/>
+ <path fill="#ffcd0c" d="m305.603 283.847c5.906 7.756 16.864 16.081 20.777 18.358 2.846 1.635 6.973 3.557 6.901 8.68-0.142 5.835-3.131 7.472-4.767 9.107-3.273 3.273-22.997 11.193-34.399 15.361-12.337 4.273-18.858 6.533-25.146 7.924-3.971 0.829-7.557 2.469-13.588 1.276-4.234-0.82-6.179-0.972-9.078-3.5-2.884-2.474-4.878-4.076-5.287-8.152-1.158-10.229 2.137-15.606 6.523-24.569 3.895-8.076 12.01-7.611 16.797-6.92 17.293 2.571 15.366-10.236 20.134-15.004 4.412-4.411 17.006-7.969 21.133-2.561z"/>
+ <path fill="#ffcd0f" d="m305.552 283.92c5.892 7.736 16.824 16.043 20.728 18.313 2.839 1.634 6.957 3.55 6.886 8.66-0.142 5.821-3.124 7.454-4.756 9.086-3.266 3.267-23.161 11.243-34.438 15.179-12.356 4.047-18.411 6.198-24.733 7.666-3.943 0.865-7.656 2.486-13.67 1.301-4.218-0.812-6.032-0.908-8.922-3.422-2.869-2.465-4.656-3.855-5.063-7.91-1.145-10.203 1.83-15.344 6.145-24.299 3.895-8.252 12.064-7.408 16.83-6.707 17.237 2.61 15.154-10.557 19.912-15.313 4.399-4.399 16.963-7.949 21.081-2.554z"/>
+ <path fill="#ffcd11" d="m305.501 283.993c5.877 7.719 16.782 16.004 20.678 18.271 2.833 1.628 6.939 3.54 6.869 8.639-0.143 5.807-3.116 7.436-4.745 9.064-3.257 3.258-23.324 11.293-34.479 14.996-12.375 3.822-17.963 5.863-24.319 7.408-3.917 0.9-7.757 2.504-13.752 1.324-4.2-0.802-5.886-0.842-8.765-3.344-2.856-2.454-4.438-3.633-4.838-7.669-1.132-10.173 1.521-15.081 5.764-24.029 3.896-8.426 12.119-7.2 16.863-6.491 17.183 2.649 14.945-10.875 19.689-15.621 4.391-4.389 16.926-7.93 21.035-2.548z"/>
+ <path fill="#ffce14" d="m305.448 284.066c5.863 7.701 16.743 15.966 20.629 18.228 2.826 1.625 6.924 3.531 6.853 8.619-0.142 5.793-3.108 7.418-4.733 9.043-3.25 3.25-23.489 11.342-34.518 14.813-12.396 3.598-17.517 5.529-23.905 7.148-3.891 0.938-7.857 2.524-13.834 1.351-4.185-0.793-5.74-0.776-8.609-3.267-2.841-2.444-4.217-3.412-4.613-7.426-1.118-10.146 1.216-14.818 5.385-23.76 3.896-8.602 12.174-6.996 16.896-6.277 17.128 2.688 14.735-11.195 19.468-15.929 4.378-4.38 16.883-7.911 20.981-2.543z"/>
+ <path fill="#ffce16" d="m305.396 284.139c5.85 7.682 16.703 15.928 20.579 18.184 2.82 1.62 6.907 3.523 6.837 8.598-0.141 5.779-3.101 7.4-4.722 9.021-3.242 3.242-23.653 11.393-34.559 14.631-12.414 3.372-17.068 5.194-23.491 6.891-3.862 0.975-7.957 2.543-13.917 1.375-4.167-0.783-5.592-0.713-8.451-3.188-2.827-2.437-3.997-3.19-4.389-7.187-1.105-10.117 0.908-14.555 5.004-23.487 3.898-8.776 12.229-6.79 16.928-6.063 17.074 2.728 14.525-11.515 19.248-16.236 4.37-4.371 16.845-7.894 20.933-2.539z"/>
+ <path fill="#ffce19" d="m305.344 284.211c5.836 7.664 16.663 15.891 20.529 18.141 2.813 1.617 6.892 3.516 6.82 8.578-0.14 5.765-3.093 7.382-4.71 8.999-3.235 3.233-23.817 11.442-34.598 14.448-12.434 3.146-16.621 4.859-23.077 6.633-3.837 1.01-8.058 2.561-13.999 1.4-4.15-0.775-5.446-0.648-8.295-3.111-2.814-2.426-3.777-2.969-4.164-6.944-1.094-10.09 0.601-14.293 4.624-23.22 3.898-8.951 12.282-6.584 16.961-5.848 17.019 2.767 14.314-11.834 19.025-16.545 4.361-4.359 16.806-7.872 20.884-2.531z"/>
+ <path fill="#ffce1c" d="m305.292 284.286c5.822 7.646 16.623 15.852 20.481 18.096 2.806 1.613 6.874 3.507 6.804 8.558-0.141 5.751-3.086 7.364-4.699 8.978-3.227 3.227-23.981 11.492-34.638 14.267-12.453 2.921-16.173 4.524-22.663 6.374-3.81 1.046-8.158 2.578-14.082 1.424-4.133-0.766-5.299-0.583-8.137-3.033-2.801-2.416-3.558-2.748-3.94-6.703-1.08-10.062 0.293-14.029 4.244-22.947 3.9-9.127 12.338-6.379 16.994-5.635 16.964 2.805 14.105-12.152 18.805-16.853 4.348-4.351 16.763-7.856 20.831-2.526z"/>
+ <path fill="#ffcf1e" d="m305.241 284.358c5.808 7.627 16.582 15.814 20.432 18.053 2.799 1.609 6.856 3.498 6.787 8.536-0.141 5.738-3.079 7.347-4.688 8.957-3.219 3.218-24.145 11.541-34.677 14.084-12.473 2.695-15.727 4.188-22.25 6.115-3.783 1.083-8.258 2.599-14.163 1.448-4.116-0.756-5.153-0.518-7.981-2.954-2.786-2.408-3.337-2.526-3.716-6.462-1.066-10.034-0.013-13.766 3.864-22.678 3.901-9.303 12.393-6.172 17.027-5.42 16.908 2.844 13.896-12.473 18.583-17.16 4.338-4.337 16.723-7.835 20.782-2.519z"/>
+ <path fill="#ffcf21" d="m305.189 284.431c5.793 7.608 16.542 15.776 20.382 18.009 2.792 1.605 6.84 3.49 6.771 8.516-0.14 5.725-3.071 7.33-4.677 8.936-3.211 3.211-24.309 11.591-34.717 13.902-12.491 2.47-15.278 3.854-21.836 5.856-3.756 1.119-8.357 2.616-14.246 1.474-4.099-0.748-5.006-0.453-7.823-2.877-2.772-2.398-3.118-2.306-3.492-6.22-1.053-10.007-0.319-13.505 3.484-22.407 3.903-9.479 12.448-5.969 17.062-5.207 16.853 2.883 13.684-12.791 18.36-17.469 4.328-4.328 16.683-7.819 20.732-2.513z"/>
+ <path fill="#ffcf23" d="m305.137 284.504c5.778 7.59 16.503 15.736 20.332 17.965 2.786 1.602 6.825 3.482 6.755 8.496-0.139 5.709-3.064 7.311-4.665 8.912-3.204 3.203-24.474 11.642-34.759 13.721-12.51 2.244-14.829 3.52-21.421 5.598-3.729 1.155-8.457 2.635-14.327 1.499-4.082-0.739-4.86-0.389-7.667-2.8-2.76-2.389-2.897-2.083-3.268-5.979-1.04-9.979-0.627-13.24 3.104-22.138 3.903-9.653 12.503-5.762 17.093-4.991 16.799 2.922 13.475-13.111 18.141-17.777 4.318-4.316 16.643-7.799 20.682-2.506z"/>
+ <path fill="#ffcf26" d="m305.086 284.579c5.765 7.57 16.463 15.697 20.282 17.92 2.779 1.599 6.809 3.474 6.738 8.476-0.139 5.696-3.056 7.293-4.654 8.892-3.194 3.194-24.637 11.69-34.797 13.536-12.529 2.021-14.382 3.185-21.007 5.341-3.703 1.191-8.559 2.652-14.411 1.523-4.065-0.73-4.713-0.324-7.509-2.723-2.745-2.379-2.679-1.861-3.043-5.735-1.027-9.952-0.936-12.979 2.724-21.868 3.905-9.828 12.557-5.557 17.126-4.777 16.744 2.961 13.265-13.431 17.919-18.084 4.307-4.309 16.602-7.783 20.632-2.501z"/>
+ <path fill="#ffd028" d="m305.033 284.651c5.752 7.553 16.423 15.66 20.234 17.878 2.771 1.593 6.791 3.464 6.722 8.454-0.139 5.682-3.049 7.275-4.643 8.869-3.188 3.188-24.801 11.74-34.838 13.355-12.548 1.793-13.935 2.85-20.593 5.082-3.676 1.228-8.658 2.67-14.493 1.547-4.048-0.721-4.565-0.258-7.353-2.644-2.731-2.37-2.457-1.64-2.818-5.495-1.014-9.923-1.242-12.716 2.345-21.597 3.905-10.004 12.611-5.351 17.158-4.563 16.689 3 13.055-13.75 17.698-18.393 4.297-4.295 16.562-7.761 20.581-2.493z"/>
+ <path fill="#ffd02b" d="m304.982 284.724c5.737 7.534 16.382 15.622 20.184 17.834 2.766 1.59 6.774 3.456 6.705 8.433-0.138 5.67-3.041 7.26-4.631 8.85-3.18 3.179-24.966 11.789-34.877 13.172-12.568 1.568-13.487 2.515-20.179 4.824-3.65 1.263-8.759 2.688-14.575 1.572-4.031-0.713-4.42-0.195-7.196-2.566-2.718-2.361-2.238-1.42-2.594-5.254-1.001-9.896-1.549-12.453 1.964-21.328 3.907-10.178 12.666-5.145 17.192-4.348 16.634 3.039 12.844-14.068 17.476-18.701 4.285-4.286 16.521-7.743 20.531-2.488z"/>
+ <path fill="#ffd02d" d="m304.93 284.797c5.723 7.516 16.342 15.584 20.135 17.789 2.758 1.588 6.758 3.449 6.688 8.414-0.138 5.654-3.034 7.24-4.619 8.826-3.173 3.172-25.13 11.84-34.918 12.99-12.587 1.344-13.039 2.18-19.766 4.564-3.622 1.301-8.856 2.709-14.657 1.599-4.014-0.704-4.272-0.13-7.039-2.489-2.702-2.352-2.018-1.197-2.369-5.012-0.987-9.868-1.855-12.189 1.584-21.057 3.908-10.354 12.722-4.94 17.226-4.135 16.578 3.078 12.634-14.389 17.254-19.009 4.275-4.273 16.481-7.721 20.481-2.48z"/>
+ <path fill="#ffd030" d="m304.879 284.87c5.709 7.498 16.302 15.547 20.085 17.748 2.752 1.582 6.741 3.438 6.673 8.391-0.139 5.642-3.027 7.224-4.609 8.806-3.164 3.164-25.293 11.89-34.956 12.808-12.606 1.119-12.592 1.844-19.352 4.308-3.596 1.336-8.958 2.726-14.739 1.622-3.997-0.695-4.127-0.065-6.882-2.411-2.69-2.343-1.799-0.976-2.146-4.771-0.974-9.84-2.163-11.928 1.204-20.787 3.91-10.529 12.777-4.734 17.258-3.92 16.524 3.117 12.424-14.707 17.034-19.316 4.263-4.267 16.439-7.706 20.43-2.478z"/>
+ <path fill="#ffd133" d="m304.826 284.943c5.695 7.479 16.263 15.509 20.036 17.703 2.745 1.579 6.726 3.431 6.656 8.372-0.137 5.627-3.02 7.205-4.597 8.783-3.157 3.156-25.458 11.939-34.997 12.625-12.626 0.893-12.145 1.51-18.938 4.049-3.569 1.373-9.058 2.745-14.822 1.646-3.979-0.686-3.979 0-6.725-2.332-2.676-2.334-1.578-0.756-1.921-4.529-0.961-9.813-2.471-11.665 0.824-20.516 3.91-10.705 12.83-4.529 17.29-3.707 16.47 3.156 12.215-15.027 16.813-19.625 4.255-4.253 16.401-7.684 20.381-2.469z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#995900" d="m52.494 273.618c-6.479 4.68-22.896 4.248-27.072 9.719-4.104 5.473 0.145 13.393 0.072 28.08 0 6.265-1.08 11.017-1.8 14.832-1.008 4.824-1.656 8.209 0.36 11.664 3.672 6.121 9.575 7.633 43.344 14.688 18.072 3.744 35.136 13.464 46.584 14.399 11.448 0.865 13.896-2.951 20.88-9.144 6.912-6.192 9.144-4.248 8.928-17.856-0.216-13.535-8.928-17.567-18.792-33.191s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-8.208 13.248-14.688 17.929z"/>
+ <path fill="#9e5e00" d="m52.598 273.905c-6.397 4.702-22.475 3.788-27.062 9.512-4.154 5.414 0.228 13.276 0.098 27.955-0.025 6.23-1.152 10.881-1.937 14.877-1.037 4.871-1.678 8.201 0.349 11.619 3.787 6.162 9.695 7.123 43.456 14.168 18.061 3.737 34.541 13.307 46.343 14.112 11.186 0.792 13.564-2.829 20.463-8.96 6.896-6.195 9.024-4.277 8.858-17.406-0.075-13.521-8.305-17.349-18.169-32.973s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-8.153 13.479-14.583 18.216z"/>
+ <path fill="#a36400" d="m52.703 274.193c-6.314 4.724-22.054 3.327-27.051 9.304-4.204 5.356 0.31 13.16 0.123 27.828-0.051 6.198-1.225 10.748-2.074 14.924-1.065 4.918-1.699 8.194 0.339 11.571 3.902 6.206 9.813 6.617 43.567 13.651 18.05 3.73 33.948 13.146 46.101 13.824 10.923 0.72 13.234-2.707 20.045-8.777 6.885-6.199 8.907-4.305 8.792-16.956 0.064-13.507-7.683-17.129-17.547-32.753s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-8.1 13.709-14.479 18.504z"/>
+ <path fill="#a86a00" d="m52.807 274.481c-6.231 4.745-21.633 2.866-27.04 9.094-4.255 5.299 0.393 13.047 0.148 27.702-0.076 6.167-1.297 10.616-2.211 14.972-1.095 4.965-1.721 8.188 0.328 11.524 4.018 6.25 9.932 6.108 43.679 13.134 18.039 3.721 33.354 12.988 45.86 13.535 10.659 0.648 12.902-2.585 19.627-8.593 6.869-6.203 8.788-4.335 8.723-16.507 0.205-13.492-7.06-16.909-16.924-32.533s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-8.045 13.94-14.374 18.792z"/>
+ <path fill="#ad7000" d="m52.912 274.769c-6.149 4.767-21.211 2.405-27.029 8.885-4.306 5.242 0.476 12.931 0.173 27.576-0.101 6.136-1.368 10.483-2.347 15.019-1.123 5.012-1.742 8.181 0.316 11.478 4.133 6.293 10.052 5.603 43.791 12.614 18.028 3.716 32.76 12.83 45.619 13.248 10.396 0.576 12.57-2.463 19.21-8.409 6.854-6.206 8.668-4.363 8.653-16.056 0.347-13.479-6.437-16.69-16.301-32.314s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.991 14.169-14.269 19.079z"/>
+ <path fill="#b27500" d="m53.016 275.057c-6.066 4.787-20.79 1.943-27.019 8.676-4.355 5.184 0.559 12.816 0.198 27.45-0.126 6.103-1.44 10.351-2.484 15.065-1.151 5.059-1.764 8.172 0.307 11.431 4.248 6.336 10.17 5.094 43.901 12.096 18.019 3.708 32.166 12.672 45.378 12.96 10.135 0.504 12.24-2.34 18.792-8.227 6.841-6.209 8.551-4.391 8.586-15.605 0.486-13.464-5.813-16.47-15.678-32.094s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.937 14.399-14.165 19.368z"/>
+ <path fill="#b77b00" d="m53.121 275.344c-5.983 4.811-20.369 1.484-27.008 8.469-4.406 5.126 0.641 12.7 0.224 27.324-0.151 6.068-1.512 10.216-2.621 15.111-1.181 5.105-1.785 8.166 0.295 11.385 4.363 6.379 10.289 4.586 44.014 11.576 18.008 3.701 31.572 12.515 45.137 12.672 9.872 0.433 11.909-2.217 18.375-8.041 6.825-6.215 8.431-4.422 8.518-15.156 0.627-13.45-5.191-16.251-15.056-31.875s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.884 14.631-14.062 19.655z"/>
+ <path fill="#bc8100" d="m53.225 275.633c-5.9 4.832-19.948 1.023-26.997 8.259-4.457 5.069 0.724 12.585 0.249 27.198-0.177 6.037-1.584 10.082-2.758 15.158-1.21 5.152-1.808 8.158 0.284 11.338 4.479 6.422 10.407 4.078 44.125 11.059 17.997 3.693 30.979 12.355 44.896 12.384 9.608 0.36 11.578-2.095 17.957-7.858 6.812-6.217 8.313-4.449 8.45-14.707 0.766-13.435-4.569-16.03-14.434-31.654s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.829 14.859-13.956 19.943z"/>
+ <path fill="#c18700" d="m53.329 275.92c-5.817 4.854-19.526 0.563-26.985 8.051-4.507 5.011 0.807 12.47 0.273 27.072-0.201 6.004-1.655 9.949-2.894 15.205-1.239 5.199-1.829 8.151 0.273 11.291 4.594 6.465 10.526 3.57 44.236 10.541 17.985 3.686 30.384 12.196 44.655 12.096 9.345 0.287 11.245-1.973 17.539-7.676 6.797-6.221 8.193-4.479 8.381-14.256 0.906-13.42-3.946-15.812-13.811-31.436s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.774 15.094-13.851 20.232z"/>
+ <path fill="#c68c00" d="m53.433 276.209c-5.734 4.875-19.104 0.101-26.975 7.84-4.558 4.955 0.89 12.355 0.299 26.947-0.227 5.973-1.728 9.816-3.031 15.252-1.267 5.246-1.851 8.145 0.263 11.244 4.709 6.508 10.646 3.063 44.349 10.022 17.975 3.679 29.79 12.038 44.413 11.808 9.083 0.217 10.915-1.851 17.122-7.492 6.782-6.224 8.074-4.506 8.313-13.806 1.048-13.405-3.323-15.592-13.188-31.216s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.722 15.322-13.749 20.521z"/>
+ <path fill="#cc9200" d="m53.538 276.497c-5.651 4.896-18.684-0.359-26.964 7.633-4.607 4.896 0.972 12.24 0.324 26.82-0.252 5.939-1.8 9.684-3.168 15.299-1.296 5.293-1.872 8.137 0.252 11.196 4.824 6.552 10.764 2.556 44.46 9.505 17.964 3.672 29.196 11.879 44.172 11.52 8.82 0.144 10.584-1.729 16.704-7.309 6.768-6.228 7.956-4.535 8.244-13.355 1.188-13.393-2.7-15.372-12.564-30.996s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.668 15.551-13.644 20.807z"/>
+ <path fill="#d19800" d="m53.642 276.786c-5.569 4.918-18.263-0.82-26.953 7.424-4.658 4.838 1.055 12.123 0.35 26.693-0.277 5.907-1.872 9.551-3.305 15.346-1.325 5.34-1.894 8.129 0.241 11.15 4.938 6.596 10.883 2.048 44.571 8.984 17.953 3.666 28.602 11.723 43.931 11.232 8.558 0.072 10.253-1.605 16.287-7.123 6.753-6.232 7.837-4.566 8.175-12.906 1.329-13.379-2.077-15.153-11.941-30.777s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.614 15.783-13.54 21.097z"/>
+ <path fill="#d69e00" d="m53.747 277.073c-5.486 4.94-17.842-1.281-26.942 7.215-4.709 4.781 1.138 12.01 0.374 26.568-0.302 5.875-1.943 9.417-3.441 15.393-1.354 5.387-1.915 8.123 0.23 11.104 5.055 6.639 11.002 1.541 44.684 8.467 17.942 3.658 28.008 11.563 43.688 10.944 8.296 0 9.923-1.483 15.869-6.941 6.74-6.235 7.72-4.593 8.108-12.456 1.468-13.363-1.455-14.933-11.319-30.557s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.56 16.012-13.435 21.383z"/>
+ <path fill="#dba300" d="m53.851 277.361c-5.403 4.962-17.421-1.741-26.932 7.007-4.759 4.723 1.221 11.893 0.399 26.441-0.327 5.843-2.016 9.283-3.578 15.439-1.383 5.434-1.937 8.115 0.22 11.057 5.169 6.682 11.12 1.033 44.795 7.949 17.932 3.649 27.414 11.404 43.448 10.656 8.031-0.072 9.59-1.361 15.451-6.758 6.725-6.238 7.6-4.623 8.039-12.006 1.609-13.35-0.832-14.714-10.696-30.338s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.504 16.245-13.33 21.673z"/>
+ <path fill="#e0a900" d="m53.956 277.649c-5.321 4.982-16.999-2.203-26.921 6.797-4.81 4.666 1.303 11.779 0.425 26.316-0.353 5.811-2.088 9.15-3.715 15.486-1.411 5.48-1.959 8.108 0.208 11.01 5.285 6.725 11.239 0.525 44.907 7.431 17.92 3.644 26.819 11.246 43.207 10.368 7.769-0.145 9.259-1.239 15.034-6.574 6.71-6.242 7.479-4.65 7.97-11.557 1.75-13.334-0.209-14.493-10.073-30.117s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.452 16.474-13.226 21.96z"/>
+ <path fill="#e5af00" d="m54.06 277.937c-5.238 5.004-16.578-2.664-26.91 6.588-4.86 4.608 1.386 11.664 0.45 26.19-0.378 5.777-2.16 9.018-3.853 15.533-1.439 5.526-1.979 8.101 0.198 10.963 5.4 6.768 11.358 0.018 45.018 6.912 17.91 3.635 26.227 11.088 42.967 10.08 7.506-0.217 8.928-1.117 14.615-6.391 6.696-6.246 7.362-4.68 7.902-11.105 1.89-13.32 0.414-14.274-9.45-29.898s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.397 16.704-13.121 22.248z"/>
+ <path fill="#eab500" d="m54.165 278.225c-5.155 5.025-16.157-3.124-26.899 6.38-4.91 4.55 1.469 11.548 0.476 26.063-0.403 5.746-2.232 8.885-3.989 15.58-1.469 5.573-2.002 8.094 0.188 10.916 5.515 6.812 11.477-0.49 45.129 6.394 17.899 3.629 25.633 10.93 42.725 9.792 7.243-0.288 8.598-0.993 14.199-6.206 6.681-6.25 7.243-4.709 7.833-10.656 2.031-13.306 1.037-14.055-8.827-29.679s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.346 16.935-13.019 22.536z"/>
+ <path fill="#efba00" d="m54.269 278.513c-5.073 5.048-15.736-3.585-26.889 6.171-4.961 4.492 1.552 11.434 0.5 25.938-0.428 5.713-2.304 8.752-4.125 15.627-1.498 5.621-2.023 8.086 0.176 10.869 5.631 6.854 11.596-0.996 45.241 5.875 17.889 3.623 25.038 10.771 42.483 9.504 6.981-0.359 8.266-0.871 13.781-6.022 6.668-6.253 7.125-4.737 7.766-10.206 2.17-13.291 1.659-13.835-8.205-29.459s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.289 17.164-12.912 22.823z"/>
+ <path fill="#f4c000" d="m54.374 278.801c-4.99 5.068-15.314-4.047-26.878 5.962-5.012 4.435 1.634 11.317 0.525 25.812-0.453 5.682-2.376 8.618-4.263 15.674-1.526 5.668-2.045 8.08 0.166 10.822 5.745 6.898 11.714-1.505 45.353 5.357 17.878 3.613 24.444 10.613 42.243 9.216 6.717-0.433 7.934-0.749 13.362-5.839 6.653-6.258 7.007-4.768 7.697-9.756 2.312-13.277 2.282-13.616-7.582-29.24s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.235 17.395-12.807 23.112z"/>
+ <path fill="#f9c600" d="m54.477 279.088c-4.906 5.092-14.893-4.506-26.866 5.754-5.062 4.377 1.717 11.203 0.551 25.686-0.479 5.648-2.448 8.485-4.399 15.721-1.555 5.715-2.066 8.072 0.155 10.775 5.86 6.941 11.833-2.012 45.464 4.839 17.867 3.607 23.851 10.454 42.001 8.929 6.455-0.504 7.604-0.627 12.946-5.656 6.638-6.26 6.886-4.795 7.628-9.307 2.452-13.262 2.905-13.396-6.959-29.02s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.182 17.626-12.705 23.399z"/>
+ <path fill="#fc0" d="m54.582 279.377c-4.823 5.111-14.472-4.969-26.855 5.543-5.112 4.32 1.8 11.088 0.576 25.561-0.504 5.616-2.521 8.352-4.536 15.768-1.584 5.76-2.088 8.064 0.144 10.729 5.977 6.984 11.952-2.52 45.576 4.32 17.856 3.6 23.256 10.295 41.76 8.64 6.192-0.576 7.272-0.504 12.528-5.472 6.624-6.264 6.768-4.824 7.56-8.856 2.592-13.248 3.528-13.176-6.336-28.8s-11.448-18.504-18-28.872c-6.552-10.224-19.512-28.8-26.928-29.017-5.904-0.144-9.216 3.024-12.888 6.769s-7.129 17.855-12.601 23.687z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fc0" d="m57.701 285.002c-4.278 4.539-18.28-1.36-24.892 3.631-4.732 3.5 2.398 7.908 1.426 20.873-0.389 4.926-3.824 5.834-2.398 12.64 1.103 5.121 2.27 4.991 4.214 7.325 5.315 6.223 4.084 1.686 34.355 7.777 16.011 3.242 20.938 9.271 37.596 7.779 5.575-0.518 6.612-0.453 11.279-4.926 5.964-5.575 2.917-4.408 3.565-7.973 2.269-11.863 0.453-13.938-8.428-28.004-8.88-14.066-8.102-14.844-13.936-24.113-5.834-9.141-13.872-25.799-20.549-25.93-5.25-0.129-8.297 2.723-11.603 6.094-3.305 3.372-5.768 19.643-10.629 24.827z"/>
+ <path fill="#ffcc02" d="m57.995 285.094c-4.461 4.701-18.604-1.196-25.06 3.705-4.701 3.514 2.578 8.05 1.608 20.68-0.4 4.896-3.733 5.877-2.458 12.634 0.986 5.093 2.357 4.938 4.334 7.201 5.686 6.131 4.673 1.826 34.119 7.743 15.918 3.211 20.815 9.215 37.372 7.732 5.541-0.513 6.479-0.463 11.155-4.849 5.865-5.407 2.858-4.287 3.412-8.058 2.066-11.787 0.442-13.981-8.188-27.649-8.83-13.983-8.143-14.698-13.941-23.913-5.8-9.085-13.701-25.805-20.338-25.934-5.219-0.129-8.248 2.705-11.533 6.057-3.287 3.352-5.644 19.505-10.482 24.651z"/>
+ <path fill="#ffcc05" d="m58.289 285.185c-4.644 4.866-18.93-1.031-25.229 3.78-4.669 3.527 2.759 8.191 1.792 20.488-0.413 4.866-3.642 5.918-2.519 12.625 0.872 5.066 2.447 4.887 4.455 7.078 6.057 6.04 5.263 1.969 33.883 7.709 15.825 3.18 20.693 9.159 37.148 7.686 5.508-0.506 6.345-0.471 11.03-4.77 5.768-5.24 2.803-4.168 3.26-8.142 1.865-11.716 0.432-14.027-7.949-27.298-8.78-13.899-8.183-14.553-13.948-23.713-5.764-9.03-13.529-25.811-20.126-25.938-5.188-0.129-8.198 2.688-11.465 6.021-3.266 3.331-5.517 19.368-10.332 24.474z"/>
+ <path fill="#ffcc07" d="m58.584 285.276c-4.827 5.03-19.255-0.865-25.397 3.855-4.639 3.541 2.938 8.332 1.975 20.295-0.425 4.838-3.551 5.961-2.578 12.619 0.757 5.039 2.536 4.834 4.575 6.955 6.428 5.949 5.852 2.108 33.646 7.674 15.733 3.147 20.571 9.103 36.925 7.639 5.475-0.501 6.211-0.48 10.905-4.693 5.67-5.072 2.745-4.045 3.107-8.224 1.663-11.642 0.42-14.073-7.711-26.946-8.73-13.814-8.223-14.406-13.952-23.511-5.729-8.976-13.358-25.817-19.916-25.944-5.156-0.127-8.148 2.674-11.396 5.984s-5.391 19.229-10.183 24.297z"/>
+ <path fill="#ffcd0a" d="m58.878 285.368c-5.01 5.193-19.579-0.701-25.565 3.93-4.607 3.555 3.117 8.475 2.157 20.102-0.437 4.809-3.459 6.004-2.639 12.613 0.643 5.011 2.626 4.781 4.695 6.83 6.799 5.857 6.442 2.25 33.411 7.64 15.641 3.118 20.45 9.048 36.701 7.593 5.44-0.494 6.076-0.488 10.781-4.615 5.57-4.904 2.688-3.926 2.954-8.308 1.462-11.569 0.409-14.118-7.472-26.593-8.68-13.732-8.263-14.262-13.958-23.311-5.695-8.922-13.188-25.824-19.705-25.951-5.125-0.127-8.1 2.658-11.326 5.949-3.227 3.289-5.266 19.091-10.034 24.121z"/>
+ <path fill="#ffcd0c" d="m59.173 285.458c-5.193 5.358-19.905-0.535-25.734 4.008-4.577 3.566 3.297 8.613 2.34 19.908-0.449 4.778-3.368 6.045-2.698 12.605 0.526 4.982 2.715 4.729 4.815 6.707 7.17 5.766 7.031 2.391 33.175 7.604 15.549 3.088 20.328 8.994 36.477 7.547 5.408-0.488 5.943-0.498 10.657-4.537 5.472-4.737 2.63-3.805 2.802-8.393 1.261-11.494 0.398-14.162-7.232-26.24-8.63-13.647-8.304-14.117-13.964-23.109-5.66-8.867-13.017-25.829-19.494-25.956-5.094-0.126-8.05 2.642-11.257 5.912-3.21 3.27-5.142 18.955-9.887 23.944z"/>
+ <path fill="#ffcd0f" d="m59.467 285.547c-5.376 5.523-20.229-0.369-25.903 4.084-4.545 3.58 3.478 8.756 2.523 19.715-0.461 4.75-3.277 6.088-2.758 12.599 0.411 4.955 2.804 4.677 4.936 6.584 7.541 5.675 7.621 2.532 32.938 7.569 15.456 3.056 20.206 8.938 36.253 7.5 5.375-0.482 5.811-0.506 10.533-4.459 5.374-4.57 2.572-3.686 2.649-8.477 1.058-11.42 0.387-14.209-6.995-25.888-8.58-13.563-8.344-13.972-13.969-22.909-5.626-8.813-12.846-25.834-19.283-25.961-5.063-0.125-8 2.625-11.188 5.877-3.188 3.251-5.015 18.818-9.736 23.766z"/>
+ <path fill="#ffcd11" d="m59.76 285.639c-5.559 5.688-20.555-0.205-26.071 4.158-4.515 3.594 3.657 8.896 2.706 19.521-0.473 4.721-3.186 6.131-2.818 12.594 0.297 4.926 2.894 4.623 5.057 6.459 7.911 5.584 8.21 2.674 32.703 7.535 15.362 3.025 20.084 8.883 36.027 7.453 5.342-0.477 5.677-0.515 10.409-4.381 5.275-4.402 2.516-3.564 2.497-8.561 0.855-11.348 0.375-14.254-6.756-25.535-8.53-13.479-8.385-13.825-13.976-22.709-5.59-8.758-12.673-25.842-19.071-25.965-5.031-0.125-7.951 2.608-11.119 5.838-3.168 3.232-4.888 18.684-9.588 23.593z"/>
+ <path fill="#ffce14" d="m60.055 285.73c-5.742 5.851-20.88-0.04-26.24 4.233-4.483 3.607 3.837 9.039 2.889 19.33-0.485 4.69-3.095 6.172-2.878 12.584 0.182 4.9 2.982 4.572 5.177 6.338 8.282 5.492 8.8 2.814 32.467 7.498 15.271 2.996 19.962 8.828 35.804 7.408 5.309-0.472 5.543-0.523 10.285-4.304 5.177-4.235 2.458-3.444 2.344-8.644 0.654-11.273 0.364-14.299-6.518-25.184-8.479-13.395-8.425-13.679-13.98-22.507-5.556-8.704-12.502-25.849-18.86-25.972-5-0.123-7.901 2.593-11.05 5.803s-4.765 18.547-9.44 23.417z"/>
+ <path fill="#ffce16" d="m60.349 285.821c-5.925 6.016-21.205 0.125-26.408 4.309-4.453 3.621 4.017 9.18 3.07 19.137-0.496 4.662-3.002 6.215-2.938 12.579 0.066 4.872 3.072 4.518 5.298 6.213 8.653 5.401 9.389 2.956 32.23 7.464 15.178 2.964 19.84 8.771 35.58 7.361 5.275-0.465 5.409-0.532 10.159-4.225 5.079-4.068 2.401-3.324 2.192-8.729 0.452-11.2 0.354-14.346-6.279-24.831-8.429-13.312-8.464-13.534-13.985-22.306-5.521-8.65-12.331-25.854-18.649-25.978-4.969-0.123-7.853 2.577-10.98 5.767-3.129 3.19-4.637 18.409-9.29 23.239z"/>
+ <path fill="#ffce19" d="m60.643 285.911c-6.107 6.18-21.529 0.291-26.577 4.385-4.421 3.635 4.197 9.322 3.254 18.945-0.508 4.631-2.911 6.256-2.997 12.571-0.049 4.845 3.161 4.465 5.418 6.089 9.023 5.309 9.979 3.098 31.994 7.43 15.085 2.934 19.718 8.717 35.355 7.314 5.242-0.459 5.276-0.541 10.036-4.148 4.98-3.899 2.344-3.203 2.039-8.811 0.25-11.127 0.342-14.391-6.04-24.479-8.38-13.228-8.505-13.389-13.991-22.105-5.486-8.596-12.16-25.859-18.438-25.982-4.938-0.123-7.803 2.561-10.911 5.73-3.109 3.17-4.513 18.272-9.142 23.061z"/>
+ <path fill="#ffce1c" d="m60.938 286.002c-6.291 6.344-21.855 0.455-26.746 4.459-4.391 3.648 4.377 9.463 3.437 18.752-0.521 4.603-2.82 6.299-3.058 12.564-0.163 4.817 3.251 4.413 5.539 5.965 9.395 5.219 10.567 3.24 31.758 7.396 14.993 2.903 19.597 8.661 35.132 7.269 5.209-0.453 5.143-0.55 9.912-4.07 4.882-3.732 2.286-3.082 1.887-8.895 0.048-11.053 0.329-14.436-5.802-24.126-8.33-13.144-8.545-13.243-13.997-21.905-5.451-8.541-11.988-25.865-18.228-25.988-4.906-0.121-7.753 2.545-10.843 5.695-3.088 3.149-4.385 18.132-8.991 22.884z"/>
+ <path fill="#ffcf1e" d="m61.232 286.092c-6.473 6.51-22.18 0.621-26.914 4.535-4.359 3.662 4.557 9.604 3.619 18.559-0.532 4.574-2.729 6.342-3.117 12.559-0.278 4.789 3.34 4.36 5.659 5.842 9.766 5.127 11.157 3.381 31.521 7.359 14.9 2.872 19.475 8.607 34.908 7.223 5.176-0.447 5.008-0.559 9.787-3.992 4.784-3.565 2.229-2.963 1.735-8.979-0.155-10.98 0.317-14.482-5.564-23.773-8.279-13.061-8.585-13.098-14.002-21.705-5.416-8.485-11.817-25.871-18.017-25.992-4.875-0.121-7.704 2.527-10.773 5.658-3.068 3.128-4.26 17.995-8.842 22.706z"/>
+ <path fill="#ffcf21" d="m61.526 286.184c-6.655 6.673-22.505 0.785-27.082 4.611-4.328 3.674 4.736 9.744 3.802 18.365-0.544 4.543-2.638 6.383-3.178 12.551-0.394 4.761 3.43 4.308 5.78 5.718 10.136 5.036 11.746 3.522 31.285 7.325 14.808 2.841 19.353 8.551 34.685 7.176 5.142-0.441 4.875-0.567 9.663-3.914 4.685-3.398 2.171-2.842 1.582-9.063-0.357-10.906 0.307-14.527-5.325-23.422-8.23-12.976-8.625-12.951-14.008-21.503-5.382-8.432-11.646-25.878-17.806-25.999-4.844-0.119-7.654 2.512-10.704 5.622-3.049 3.109-4.134 17.859-8.694 22.533z"/>
+ <path fill="#ffcf23" d="m61.821 286.275c-6.839 6.837-22.83 0.95-27.251 4.687-4.298 3.688 4.916 9.886 3.984 18.172-0.557 4.515-2.546 6.426-3.237 12.545-0.509 4.732 3.519 4.255 5.9 5.594 10.507 4.945 12.336 3.663 31.05 7.29 14.715 2.812 19.23 8.496 34.46 7.129 5.108-0.435 4.74-0.575 9.538-3.835 4.587-3.23 2.113-2.723 1.43-9.146-0.559-10.834 0.296-14.572-5.086-23.069-8.18-12.892-8.666-12.806-14.014-21.302-5.347-8.377-11.476-25.885-17.595-26.004-4.813-0.119-7.605 2.496-10.635 5.584-3.029 3.088-4.008 17.722-8.544 22.355z"/>
+ <path fill="#ffcf26" d="m62.115 286.366c-7.021 7.002-23.154 1.115-27.42 4.762-4.266 3.701 5.096 10.027 4.168 17.979-0.568 4.486-2.455 6.469-3.297 12.538-0.624 4.706 3.607 4.203 6.021 5.472 10.878 4.852 12.925 3.803 30.813 7.254 14.622 2.78 19.108 8.441 34.236 7.084 5.075-0.43 4.606-0.584 9.413-3.759 4.489-3.063 2.058-2.601 1.277-9.229-0.761-10.76 0.284-14.618-4.848-22.717-8.129-12.809-8.706-12.66-14.019-21.102-5.313-8.322-11.304-25.891-17.384-26.01-4.781-0.118-7.556 2.48-10.566 5.55-3.008 3.068-3.881 17.584-8.394 22.178z"/>
+ <path fill="#ffd028" d="m62.409 286.456c-7.204 7.166-23.479 1.281-27.588 4.838-4.235 3.715 5.275 10.168 4.351 17.787-0.58 4.455-2.364 6.51-3.357 12.53-0.738 4.679 3.697 4.149 6.142 5.347 11.249 4.763 13.515 3.946 30.577 7.221 14.529 2.748 18.986 8.386 34.012 7.037 5.043-0.424 4.474-0.594 9.289-3.68 4.392-2.897 2-2.481 1.125-9.314-0.963-10.686 0.273-14.664-4.608-22.364-8.079-12.726-8.746-12.517-14.024-20.901-5.277-8.269-11.133-25.896-17.173-26.015-4.75-0.116-7.506 2.464-10.497 5.513-2.992 3.047-3.759 17.447-8.249 22.001z"/>
+ <path fill="#ffd02b" d="m62.704 286.547c-7.388 7.33-23.805 1.445-27.757 4.912-4.204 3.729 5.455 10.311 4.533 17.594-0.593 4.427-2.272 6.553-3.417 12.523-0.854 4.651 3.786 4.098 6.262 5.225 11.619 4.671 14.104 4.087 30.341 7.185 14.438 2.72 18.864 8.33 33.787 6.991 5.01-0.418 4.341-0.604 9.166-3.604 4.292-2.729 1.942-2.359 0.972-9.396-1.163-10.613 0.263-14.709-4.369-22.012-8.03-12.641-8.787-12.371-14.03-20.7-5.243-8.214-10.962-25.903-16.962-26.021-4.719-0.117-7.457 2.447-10.428 5.477-2.972 3.029-3.632 17.313-8.098 21.826z"/>
+ <path fill="#ffd02d" d="m62.998 286.638c-7.57 7.493-24.13 1.61-27.925 4.987-4.174 3.742 5.635 10.451 4.716 17.4-0.604 4.398-2.182 6.596-3.478 12.518-0.969 4.623 3.875 4.045 6.382 5.101 11.991 4.579 14.694 4.228 30.105 7.149 14.345 2.688 18.743 8.275 33.563 6.944 4.977-0.411 4.207-0.61 9.042-3.524 4.193-2.562 1.884-2.239 0.819-9.481-1.366-10.538 0.251-14.754-4.133-21.659-7.979-12.557-8.825-12.224-14.034-20.498-5.208-8.16-10.791-25.91-16.751-26.027-4.688-0.114-7.407 2.433-10.358 5.441-2.951 3.01-3.505 17.174-7.948 21.649z"/>
+ <path fill="#ffd030" d="m63.292 286.729c-7.753 7.658-24.454 1.775-28.094 5.063-4.142 3.756 5.815 10.594 4.899 17.209-0.616 4.367-2.09 6.638-3.537 12.51-1.084 4.596 3.964 3.992 6.502 4.977 12.362 4.488 15.283 4.369 29.869 7.115 14.252 2.656 18.621 8.22 33.34 6.898 4.943-0.406 4.073-0.621 8.917-3.447 4.095-2.395 1.828-2.119 0.667-9.565-1.568-10.465 0.239-14.8-3.894-21.307-7.929-12.474-8.866-12.078-14.04-20.298-5.173-8.105-10.619-25.916-16.54-26.031-4.656-0.115-7.357 2.415-10.289 5.404-2.932 2.988-3.38 17.036-7.8 21.472z"/>
+ <path fill="#ffd133" d="m63.587 286.82c-7.937 7.822-24.78 1.94-28.263 5.138-4.111 3.77 5.995 10.734 5.081 17.016-0.627 4.339-1.998 6.68-3.597 12.504-1.199 4.568 4.054 3.939 6.623 4.854 12.732 4.396 15.873 4.51 29.633 7.08 14.16 2.625 18.499 8.164 33.116 6.852 4.909-0.4 3.939-0.629 8.793-3.369 3.997-2.227 1.77-1.999 0.514-9.648-1.771-10.393 0.228-14.846-3.654-20.955-7.88-12.39-8.907-11.934-14.046-20.098-5.139-8.051-10.448-25.922-16.329-26.037-4.625-0.113-7.309 2.398-10.221 5.368s-3.254 16.897-7.65 21.295z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m88.782 218.681c-0.936 2.088-1.728 20.017 2.952 27 4.68 6.911 3.312 10.872-1.872 5.616-5.4-5.112-8.928-12.816-9-18.145 0-3.096 2.376-15.84 3.313-17.208 1.007-1.44 5.327 1.153 4.607 2.737z"/>
+ <path fill="#030303" d="m88.692 219.032c-0.903 2.34-1.656 19.698 3.01 26.668 4.665 6.901 3.186 10.49-1.84 5.356-5.23-4.997-8.607-12.47-8.741-17.787-0.043-3.114 2.236-15.419 3.133-16.791 0.961-1.394 5.126 0.989 4.438 2.554z"/>
+ <path fill="#070707" d="m88.602 219.379c-0.871 2.593-1.584 19.383 3.067 26.338 4.65 6.891 3.06 10.109-1.808 5.098-5.062-4.882-8.287-12.125-8.481-17.432-0.087-3.131 2.095-14.998 2.952-16.373 0.915-1.345 4.926 0.828 4.27 2.369z"/>
+ <path fill="#0b0b0b" d="m88.512 219.729c-0.839 2.844-1.513 19.066 3.124 26.006 4.638 6.881 2.935 9.729-1.774 4.84-4.893-4.768-7.967-11.779-8.223-17.076-0.129-3.149 1.955-14.576 2.772-15.955 0.868-1.299 4.724 0.665 4.101 2.185z"/>
+ <path fill="#0f0f0f" d="m88.422 220.079c-0.806 3.096-1.439 18.748 3.183 25.674 4.623 6.869 2.809 9.347-1.742 4.58-4.724-4.651-7.646-11.434-7.963-16.719-0.173-3.168 1.814-14.154 2.592-15.537 0.819-1.252 4.52 0.504 3.93 2.002z"/>
+ <path fill="#131313" d="m88.332 220.426c-0.773 3.349-1.368 18.433 3.24 25.345 4.608 6.858 2.682 8.964-1.71 4.319-4.554-4.535-7.326-11.088-7.704-16.361-0.216-3.186 1.674-13.734 2.412-15.12 0.774-1.206 4.32 0.343 3.762 1.817z"/>
+ <path fill="#161616" d="m88.242 220.777c-0.741 3.601-1.296 18.115 3.298 25.013 4.594 6.848 2.556 8.582-1.678 4.061-4.385-4.421-7.006-10.742-7.444-16.006-0.26-3.203 1.533-13.313 2.231-14.702 0.728-1.16 4.118 0.18 3.593 1.634z"/>
+ <path fill="#1a1a1a" d="m88.152 221.125c-0.709 3.853-1.224 17.799 3.355 24.682 4.579 6.837 2.43 8.201-1.646 3.802-4.216-4.306-6.686-10.397-7.186-15.649-0.303-3.221 1.394-12.892 2.052-14.285 0.682-1.112 3.918 0.018 3.425 1.45z"/>
+ <path fill="#1e1e1e" d="m88.062 221.475c-0.677 4.104-1.152 17.482 3.413 24.35 4.564 6.826 2.304 7.82-1.613 3.543-4.046-4.191-6.365-10.051-6.927-15.293-0.345-3.24 1.253-12.47 1.872-13.867 0.634-1.066 3.716-0.144 3.255 1.267z"/>
+ <path fill="#222" d="m87.972 221.825c-0.645 4.355-1.08 17.164 3.47 24.018 4.551 6.816 2.179 7.439-1.58 3.285-3.877-4.076-6.044-9.707-6.667-14.938-0.389-3.258 1.112-12.049 1.691-13.449 0.587-1.019 3.514-0.306 3.086 1.084z"/>
+ <path fill="#262626" d="m87.883 222.172c-0.612 4.609-1.009 16.849 3.527 23.688 4.536 6.804 2.052 7.056-1.548 3.024-3.708-3.961-5.724-9.36-6.408-14.58-0.432-3.276 0.973-11.629 1.513-13.032 0.54-0.971 3.311-0.467 2.916 0.9z"/>
+ <path fill="#2a2a2a" d="m87.792 222.523c-0.579 4.86-0.936 16.531 3.586 23.356 4.521 6.793 1.926 6.675-1.516 2.765-3.539-3.845-5.403-9.015-6.148-14.224-0.476-3.293 0.831-11.207 1.332-12.614 0.493-0.925 3.11-0.63 2.746 0.717z"/>
+ <path fill="#2d2d2d" d="m87.702 222.872c-0.547 5.112-0.864 16.215 3.644 23.025 4.507 6.783 1.8 6.293-1.483 2.506-3.369-3.73-5.083-8.669-5.89-13.867-0.519-3.312 0.691-10.785 1.152-12.197 0.446-0.878 2.908-0.792 2.577 0.533z"/>
+ <path fill="#313131" d="m87.612 223.221c-0.515 5.363-0.792 15.898 3.701 22.693 4.492 6.772 1.674 5.912-1.451 2.248-3.2-3.615-4.763-8.324-5.63-13.512-0.563-3.33 0.551-10.363 0.972-11.779 0.399-0.831 2.707-0.953 2.408 0.35z"/>
+ <path fill="#353535" d="m87.522 223.57c-0.482 5.616-0.72 15.581 3.758 22.363 4.479 6.761 1.549 5.53-1.418 1.987-3.031-3.5-4.442-7.978-5.371-13.154-0.604-3.348 0.41-9.943 0.792-11.361 0.352-0.785 2.506-1.115 2.239 0.165z"/>
+ <path fill="#393939" d="m87.432 223.918c-0.45 5.869-0.648 15.265 3.815 22.033 4.464 6.75 1.422 5.147-1.386 1.728-2.862-3.384-4.122-7.632-5.112-12.798-0.647-3.366 0.271-9.522 0.612-10.944 0.307-0.737 2.305-1.278 2.071-0.019z"/>
+ <path fill="#3d3d3d" d="m87.343 224.269c-0.418 6.12-0.576 14.946 3.873 21.7 4.45 6.74 1.296 4.767-1.354 1.469-2.692-3.27-3.802-7.286-4.853-12.441-0.691-3.383 0.129-9.101 0.432-10.527 0.26-0.691 2.103-1.44 1.902-0.201z"/>
+ <path fill="#414141" d="m87.252 224.618c-0.385 6.373-0.504 14.631 3.932 21.369 4.436 6.729 1.17 4.385-1.321 1.211-2.523-3.154-3.481-6.941-4.594-12.086-0.734-3.402-0.011-8.68 0.252-10.109 0.212-0.644 1.901-1.602 1.731-0.385z"/>
+ <path fill="#444" d="m87.162 224.967c-0.353 6.623-0.432 14.314 3.989 21.037 4.421 6.719 1.044 4.004-1.289 0.951-2.354-3.039-3.161-6.595-4.334-11.729-0.778-3.42-0.151-8.258 0.071-9.691 0.166-0.597 1.7-1.763 1.563-0.568z"/>
+ <path fill="#484848" d="m87.072 225.316c-0.32 6.876-0.36 13.997 4.047 20.707 4.406 6.707 0.918 3.622-1.257 0.692-2.186-2.924-2.841-6.25-4.075-11.373-0.82-3.438-0.292-7.838-0.108-9.273 0.119-0.551 1.498-1.926 1.393-0.753z"/>
+ <path fill="#4c4c4c" d="m86.982 225.665c-0.288 7.129-0.288 13.68 4.104 20.377 4.393 6.695 0.792 3.24-1.224 0.432s-2.52-5.904-3.816-11.016c-0.863-3.457-0.432-7.416-0.287-8.856 0.071-0.505 1.295-2.089 1.223-0.937z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m88.782 218.681c4.32-9.433 6.696-19.584 12.888-29.448 6.12-9.792 3.672-13.608-0.863-8.64-4.536 4.968-9.504 15.48-9.504 15.48s-5.832 9.216-7.128 19.872c-0.217 1.8 3.887 4.248 4.607 2.736z"/>
+ <path fill="#020202" d="m88.968 218.071c4.279-9.5 6.615-19.246 12.586-28.802 5.901-9.488 3.608-13.279-0.764-8.472-4.403 4.847-9.302 15.236-9.368 15.381 0 0-5.637 8.993-6.877 19.239-0.209 1.771 3.72 4.145 4.423 2.654z"/>
+ <path fill="#050505" d="m89.152 217.459c4.239-9.566 6.535-18.908 12.284-28.155 5.683-9.183 3.547-12.95-0.663-8.303-4.27 4.725-9.099 14.991-9.231 15.282 0 0-5.442 8.766-6.627 18.605-0.201 1.741 3.554 4.042 4.237 2.571z"/>
+ <path fill="#070707" d="m89.338 216.849c4.199-9.634 6.454-18.572 11.981-27.51 5.465-8.878 3.484-12.621-0.563-8.135-4.137 4.605-8.896 14.748-9.096 15.184 0 0-5.247 8.542-6.376 17.972-0.192 1.713 3.387 3.937 4.054 2.489z"/>
+ <path fill="#0a0a0a" d="m89.522 216.239c4.159-9.701 6.375-18.234 11.68-26.865 5.247-8.573 3.422-12.292-0.461-7.966-4.005 4.483-8.693 14.503-8.96 15.085 0 0-5.053 8.317-6.126 17.337-0.186 1.684 3.219 3.837 3.867 2.409z"/>
+ <path fill="#0c0c0c" d="m89.708 215.627c4.118-9.769 6.294-17.897 11.376-26.218 5.029-8.268 3.36-11.962-0.359-7.797-3.871 4.361-8.49 14.259-8.823 14.985 0 0-4.858 8.093-5.876 16.706-0.179 1.653 3.051 3.731 3.682 2.324z"/>
+ <path fill="#0f0f0f" d="m89.893 215.017c4.077-9.836 6.213-17.56 11.073-25.573 4.812-7.963 3.298-11.633-0.259-7.629-3.738 4.241-8.288 14.015-8.688 14.887 0 0-4.663 7.868-5.625 16.072-0.169 1.624 2.886 3.628 3.499 2.243z"/>
+ <path fill="#111" d="m90.078 214.407c4.037-9.904 6.133-17.224 10.772-24.928 4.593-7.658 3.234-11.304-0.159-7.46-3.605 4.119-8.085 13.771-8.551 14.788 0 0-4.47 7.645-5.375 15.439-0.162 1.594 2.718 3.524 3.313 2.161z"/>
+ <path fill="#141414" d="m90.263 213.795c3.997-9.971 6.052-16.885 10.47-24.281 4.374-7.353 3.172-10.975-0.059-7.291-3.472 3.998-7.882 13.526-8.415 14.689 0 0-4.273 7.418-5.124 14.805-0.154 1.565 2.551 3.421 3.128 2.078z"/>
+ <path fill="#161616" d="m90.449 213.184c3.956-10.037 5.972-16.548 10.167-23.635 4.156-7.048 3.11-10.645 0.043-7.123-3.34 3.877-7.68 13.283-8.279 14.591 0 0-4.08 7.194-4.874 14.172-0.147 1.535 2.383 3.317 2.943 1.995z"/>
+ <path fill="#191919" d="m90.634 212.573c3.916-10.105 5.892-16.209 9.865-22.989 3.938-6.743 3.047-10.316 0.144-6.954-3.207 3.755-7.477 13.038-8.143 14.491 0 0-3.886 6.969-4.624 13.54-0.139 1.506 2.217 3.213 2.758 1.912z"/>
+ <path fill="#1c1c1c" d="m90.819 211.963c3.875-10.174 5.811-15.874 9.563-22.344 3.721-6.438 2.984-9.987 0.244-6.785-3.073 3.634-7.274 12.793-8.007 14.392 0 0-3.69 6.745-4.373 12.905-0.131 1.477 2.049 3.112 2.573 1.832z"/>
+ <path fill="#1e1e1e" d="m91.004 211.352c3.836-10.24 5.73-15.536 9.262-21.698 3.501-6.133 2.922-9.658 0.344-6.617-2.94 3.513-7.071 12.55-7.87 14.293 0 0-3.496 6.521-4.123 12.272-0.124 1.447 1.881 3.009 2.387 1.75z"/>
+ <path fill="#212121" d="m91.189 210.741c3.795-10.307 5.649-15.198 8.958-21.052 3.284-5.828 2.859-9.328 0.445-6.448-2.808 3.392-6.868 12.305-7.734 14.195 0 0-3.301 6.295-3.872 11.639-0.115 1.418 1.715 2.904 2.203 1.666z"/>
+ <path fill="#232323" d="m91.375 210.129c3.754-10.373 5.569-14.86 8.655-20.405 3.066-5.523 2.797-8.999 0.547-6.279-2.675 3.27-6.666 12.061-7.599 14.097 0 0-3.106 6.07-3.622 11.004-0.107 1.388 1.548 2.801 2.019 1.583z"/>
+ <path fill="#262626" d="m91.559 209.519c3.714-10.44 5.489-14.523 8.354-19.76 2.847-5.218 2.735-8.67 0.647-6.111-2.542 3.149-6.463 11.817-7.462 13.997 0 0-2.912 5.848-3.372 10.373-0.099 1.357 1.381 2.697 1.833 1.501z"/>
+ <path fill="#282828" d="m91.745 208.909c3.674-10.509 5.408-14.187 8.051-19.115 2.629-4.913 2.672-8.341 0.748-5.942-2.409 3.028-6.261 11.573-7.326 13.898 0 0-2.717 5.621-3.121 9.738-0.092 1.33 1.213 2.595 1.648 1.421z"/>
+ <path fill="#2b2b2b" d="m91.929 208.297c3.634-10.575 5.328-13.848 7.75-18.468 2.41-4.608 2.609-8.011 0.848-5.773-2.275 2.906-6.058 11.328-7.189 13.799 0 0-2.522 5.397-2.871 9.106-0.084 1.299 1.046 2.491 1.462 1.336z"/>
+ <path fill="#2d2d2d" d="m92.115 207.687c3.593-10.643 5.247-13.512 7.447-17.823 2.191-4.303 2.547-7.682 0.949-5.605-2.144 2.786-5.855 11.085-7.055 13.701 0 0-2.327 5.172-2.62 8.473-0.076 1.269 0.881 2.386 1.279 1.254z"/>
+ <path fill="#303030" d="m92.301 207.077c3.552-10.71 5.167-13.175 7.145-17.178 1.974-3.998 2.484-7.353 1.05-5.436-2.011 2.664-5.652 10.84-6.918 13.602 0 0-2.133 4.947-2.37 7.839-0.07 1.24 0.712 2.283 1.093 1.173z"/>
+ <path fill="#333" d="m92.485 206.465c3.513-10.778 5.087-12.837 6.843-16.531s2.422-7.024 1.15-5.268c-1.877 2.543-5.449 10.596-6.781 13.502 0 0-1.938 4.724-2.12 7.207-0.061 1.211 0.545 2.18 0.908 1.09z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m273.03 225.592c2.088-5.903 1.872-20.951-3.456-30.671-1.872-3.528-3.672-7.632-4.752-7.848-1.152-0.216-3.24 2.088-3.024 2.448 0.288 0.576 10.009 14.256 7.992 32.832-0.144 1.513 2.736 4.608 3.24 3.239z"/>
+ <path fill="#030303" d="m272.936 224.831c2.025-5.719 1.753-20.379-3.344-29.663-1.815-3.407-3.535-7.374-4.595-7.59-1.122-0.214-3.125 2.022-2.925 2.367 0.258 0.562 9.605 13.778 7.729 31.753-0.129 1.487 2.647 4.456 3.135 3.133z"/>
+ <path fill="#070707" d="m272.841 224.068c1.967-5.532 1.637-19.808-3.228-28.654-1.762-3.286-3.401-7.115-4.44-7.332-1.091-0.211-3.009 1.956-2.824 2.287 0.227 0.548 9.201 13.299 7.466 30.672-0.118 1.463 2.555 4.305 3.026 3.027z"/>
+ <path fill="#0b0b0b" d="m272.747 223.305c1.904-5.348 1.518-19.235-3.115-27.645-1.706-3.165-3.265-6.856-4.282-7.073-1.062-0.21-2.896 1.889-2.727 2.206 0.197 0.534 8.799 12.821 7.203 29.592-0.103 1.44 2.466 4.153 2.921 2.92z"/>
+ <path fill="#0f0f0f" d="m272.652 222.542c1.843-5.162 1.398-18.662-3.001-26.635-1.65-3.044-3.13-6.598-4.127-6.815-1.03-0.207-2.779 1.823-2.626 2.126 0.167 0.52 8.396 12.341 6.94 28.511-0.09 1.416 2.376 4.001 2.814 2.813z"/>
+ <path fill="#131313" d="m272.558 221.779c1.78-4.976 1.279-18.09-2.889-25.626-1.595-2.923-2.994-6.34-3.97-6.557-1-0.205-2.664 1.756-2.527 2.045 0.137 0.506 7.993 11.861 6.679 27.432-0.078 1.392 2.285 3.849 2.707 2.706z"/>
+ <path fill="#161616" d="m272.463 221.016c1.721-4.79 1.163-17.518-2.773-24.617-1.539-2.802-2.858-6.081-3.814-6.299-0.969-0.203-2.548 1.691-2.427 1.965 0.106 0.492 7.59 11.383 6.415 26.352-0.065 1.369 2.194 3.697 2.599 2.599z"/>
+ <path fill="#1a1a1a" d="m272.369 220.254c1.659-4.605 1.044-16.946-2.66-23.609-1.483-2.681-2.723-5.822-3.658-6.04-0.938-0.201-2.434 1.624-2.326 1.884 0.074 0.478 7.185 10.904 6.15 25.271-0.051 1.344 2.106 3.546 2.494 2.494z"/>
+ <path fill="#1e1e1e" d="m272.274 219.491c1.598-4.42 0.926-16.373-2.546-22.6-1.43-2.56-2.587-5.564-3.501-5.782-0.908-0.198-2.319 1.558-2.229 1.804 0.044 0.464 6.782 10.425 5.889 24.19-0.037 1.321 2.016 3.396 2.387 2.388z"/>
+ <path fill="#222" d="m272.18 218.728c1.535-4.233 0.807-15.802-2.434-21.59-1.373-2.439-2.452-5.306-3.345-5.524-0.877-0.197-2.203 1.491-2.128 1.723 0.014 0.45 6.379 9.947 5.625 23.111-0.023 1.297 1.927 3.242 2.282 2.28z"/>
+ <path fill="#262626" d="m272.085 217.965c1.476-4.049 0.69-15.229-2.318-20.582-1.317-2.317-2.316-5.046-3.188-5.265-0.847-0.194-2.088 1.425-2.029 1.642-0.016 0.436 5.977 9.468 5.362 22.032-0.011 1.272 1.835 3.089 2.173 2.173z"/>
+ <path fill="#2a2a2a" d="m271.991 217.202c1.413-3.861 0.571-14.656-2.206-19.572-1.262-2.196-2.18-4.788-3.032-5.007-0.815-0.191-1.973 1.36-1.929 1.562-0.047 0.422 5.573 8.988 5.099 20.951 0.003 1.247 1.746 2.939 2.068 2.066z"/>
+ <path fill="#2d2d2d" d="m271.896 216.439c1.353-3.677 0.453-14.084-2.091-18.563-1.207-2.076-2.045-4.529-2.876-4.749-0.786-0.19-1.858 1.293-1.83 1.481-0.077 0.408 5.17 8.51 4.836 19.87 0.017 1.226 1.656 2.789 1.961 1.961z"/>
+ <path fill="#313131" d="m271.802 215.676c1.29-3.491 0.334-13.512-1.979-17.553-1.151-1.956-1.909-4.272-2.72-4.493-0.755-0.187-1.742 1.227-1.73 1.401-0.106 0.394 4.768 8.031 4.573 18.791 0.031 1.202 1.567 2.637 1.856 1.854z"/>
+ <path fill="#353535" d="m271.707 214.915c1.23-3.307 0.217-12.94-1.864-16.545-1.096-1.834-1.773-4.014-2.563-4.234-0.725-0.185-1.627 1.16-1.631 1.32-0.138 0.38 4.364 7.552 4.311 17.71 0.042 1.176 1.475 2.485 1.747 1.749z"/>
+ <path fill="#393939" d="m271.613 214.151c1.168-3.119 0.098-12.367-1.751-15.535-1.04-1.714-1.638-3.755-2.407-3.976-0.693-0.183-1.512 1.094-1.531 1.24-0.168 0.366 3.962 7.074 4.049 16.63 0.055 1.153 1.384 2.332 1.64 1.641z"/>
+ <path fill="#3d3d3d" d="m271.518 213.388c1.106-2.935-0.021-11.796-1.638-14.527-0.983-1.592-1.502-3.496-2.25-3.716-0.664-0.181-1.396 1.028-1.432 1.159-0.198 0.352 3.558 6.594 3.785 15.549 0.07 1.13 1.296 2.183 1.535 1.535z"/>
+ <path fill="#414141" d="m271.424 212.625c1.047-2.75-0.139-11.223-1.522-13.518-0.93-1.471-1.367-3.238-2.094-3.459-0.635-0.178-1.282 0.962-1.333 1.079-0.229 0.338 3.153 6.114 3.521 14.47 0.083 1.106 1.205 2.03 1.428 1.428z"/>
+ <path fill="#444" d="m271.329 211.862c0.985-2.563-0.256-10.65-1.409-12.508-0.874-1.35-1.23-2.979-1.938-3.2-0.604-0.177-1.166 0.895-1.233 0.998-0.259 0.324 2.751 5.636 3.259 13.39 0.096 1.082 1.115 1.876 1.321 1.32z"/>
+ <path fill="#484848" d="m271.235 211.099c0.923-2.377-0.375-10.077-1.296-11.499-0.818-1.229-1.097-2.72-1.781-2.942-0.573-0.174-1.052 0.829-1.134 0.918-0.289 0.309 2.348 5.156 2.996 12.309 0.11 1.058 1.025 1.726 1.215 1.214z"/>
+ <path fill="#4c4c4c" d="m271.14 210.336c0.861-2.192-0.493-9.506-1.183-10.49-0.763-1.107-0.96-2.463-1.625-2.684-0.542-0.172-0.936 0.762-1.034 0.836-0.319 0.297 1.945 4.68 2.733 11.229 0.124 1.035 0.936 1.576 1.109 1.109z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m264.822 187.073c-10.224-13.968-23.472-18.504-22.104-14.112 0 0 10.152 5.76 19.08 16.56 1.728 2.088 4.608-0.288 3.024-2.448z"/>
+ <path fill="#030303" d="m264.372 186.687c-9.924-13.495-22.894-17.912-21.539-13.7 0.018 0.012 9.901 5.614 18.609 16.071 1.678 2.016 4.467-0.285 2.93-2.371z"/>
+ <path fill="#070707" d="m263.922 186.3c-9.624-13.022-22.316-17.319-20.975-13.287 0.036 0.023 9.652 5.467 18.139 15.582 1.628 1.943 4.325-0.283 2.836-2.295z"/>
+ <path fill="#0b0b0b" d="m263.472 185.913c-9.324-12.549-21.739-16.726-20.41-12.874 0.053 0.034 9.4 5.32 17.668 15.093 1.578 1.871 4.183-0.28 2.742-2.219z"/>
+ <path fill="#0f0f0f" d="m263.022 185.527c-9.024-12.077-21.162-16.134-19.847-12.462 0.071 0.045 9.151 5.174 17.198 14.604 1.529 1.798 4.043-0.278 2.649-2.142z"/>
+ <path fill="#131313" d="m262.571 185.14c-8.723-11.603-20.583-15.541-19.28-12.049 0.088 0.056 8.901 5.027 16.728 14.114 1.477 1.726 3.899-0.275 2.552-2.065z"/>
+ <path fill="#161616" d="m262.121 184.753c-8.423-11.13-20.006-14.948-18.716-11.636 0.106 0.067 8.651 4.88 16.257 13.625 1.428 1.654 3.759-0.272 2.459-1.989z"/>
+ <path fill="#1a1a1a" d="m261.671 184.367c-8.124-10.658-19.428-14.356-18.15-11.224 0.124 0.078 8.399 4.734 15.785 13.136 1.378 1.581 3.617-0.27 2.365-1.912z"/>
+ <path fill="#1e1e1e" d="m261.221 183.98c-7.824-10.185-18.851-13.763-17.588-10.811 0.143 0.089 8.151 4.587 15.315 12.647 1.33 1.508 3.477-0.267 2.273-1.836z"/>
+ <path fill="#222" d="m260.771 183.593c-7.524-9.711-18.273-13.17-17.022-10.398 0.159 0.1 7.9 4.44 14.844 12.158 1.279 1.436 3.335-0.265 2.178-1.76z"/>
+ <path fill="#262626" d="m260.321 183.206c-7.224-9.238-17.695-12.578-16.458-9.985 0.177 0.111 7.65 4.293 14.374 11.668 1.229 1.364 3.193-0.262 2.084-1.683z"/>
+ <path fill="#2a2a2a" d="m259.871 182.82c-6.924-8.766-17.118-11.986-15.893-9.573 0.193 0.122 7.398 4.147 13.902 11.179 1.18 1.291 3.053-0.259 1.991-1.606z"/>
+ <path fill="#2d2d2d" d="m259.42 182.433c-6.623-8.293-16.539-11.393-15.328-9.16 0.214 0.133 7.15 4 13.434 10.69 1.128 1.219 2.909-0.257 1.894-1.53z"/>
+ <path fill="#313131" d="m258.97 182.046c-6.323-7.819-15.963-10.8-14.764-8.747 0.23 0.144 6.899 3.853 12.962 10.201 1.08 1.146 2.769-0.254 1.802-1.454z"/>
+ <path fill="#353535" d="m258.52 181.66c-6.023-7.347-15.384-10.208-14.199-8.335 0.248 0.155 6.649 3.707 12.492 9.712 1.028 1.073 2.627-0.252 1.707-1.377z"/>
+ <path fill="#393939" d="m258.07 181.273c-5.723-6.874-14.807-9.615-13.634-7.922 0.265 0.166 6.398 3.56 12.021 9.222 0.978 1.002 2.485-0.249 1.613-1.3z"/>
+ <path fill="#3d3d3d" d="m257.62 180.886c-5.423-6.401-14.229-9.021-13.07-7.509 0.283 0.177 6.149 3.413 11.552 8.733 0.927 0.929 2.343-0.246 1.518-1.224z"/>
+ <path fill="#414141" d="m257.17 180.5c-5.124-5.928-13.65-8.43-12.505-7.097 0.301 0.188 5.898 3.267 11.079 8.244 0.879 0.856 2.203-0.244 1.426-1.147z"/>
+ <path fill="#444" d="m256.719 180.113c-4.823-5.455-13.073-7.837-11.94-6.684 0.319 0.199 5.649 3.12 10.609 7.755 0.829 0.784 2.061-0.241 1.331-1.071z"/>
+ <path fill="#484848" d="m256.269 179.726c-4.523-4.982-12.495-7.244-11.375-6.271 0.336 0.21 5.397 2.973 10.138 7.266 0.779 0.711 1.92-0.239 1.237-0.995z"/>
+ <path fill="#4c4c4c" d="m255.819 179.339c-4.223-4.509-11.918-6.652-10.812-5.859 0.354 0.222 5.148 2.827 9.668 6.777 0.73 0.639 1.779-0.236 1.144-0.918z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m273.03 225.592c0.144 6.265-5.76 22.248-7.992 21.673-2.52-0.576 0.504-5.257 2.809-13.177 0.936-3.312 1.655-11.447 1.943-11.735 0.936-0.936 3.24 1.728 3.24 3.239z"/>
+ <path fill="#050505" d="m272.846 226.116c0.103 6.082-5.638 21.594-7.797 21.018-2.422-0.567 0.548-5.146 2.814-12.928 0.899-3.178 1.595-10.947 1.887-11.25 0.914-0.927 3.147 1.527 3.096 3.16z"/>
+ <path fill="#0a0a0a" d="m272.662 226.637c0.063 5.902-5.514 20.939-7.601 20.363-2.323-0.558 0.592-5.035 2.82-12.681 0.861-3.041 1.534-10.446 1.83-10.761 0.89-0.917 3.054 1.327 2.951 3.079z"/>
+ <path fill="#0f0f0f" d="m272.478 227.159c0.021 5.721-5.392 20.284-7.405 19.711-2.224-0.55 0.635-4.927 2.827-12.434 0.824-2.907 1.473-9.945 1.773-10.273 0.866-0.911 2.959 1.125 2.805 2.996z"/>
+ <path fill="#141414" d="m272.294 227.68c-0.02 5.539-5.268 19.63-7.21 19.057-2.125-0.541 0.68-4.816 2.835-12.186 0.786-2.771 1.412-9.445 1.717-9.786 0.84-0.901 2.863 0.924 2.658 2.915z"/>
+ <path fill="#191919" d="m272.11 228.202c-0.063 5.359-5.146 18.977-7.014 18.403-2.027-0.532 0.722-4.706 2.841-11.938 0.748-2.637 1.351-8.944 1.659-9.299 0.818-0.893 2.77 0.722 2.514 2.834z"/>
+ <path fill="#1e1e1e" d="m271.926 228.723c-0.103 5.179-5.021 18.322-6.818 17.75-1.928-0.523 0.766-4.596 2.848-11.691 0.711-2.5 1.29-8.443 1.603-8.811 0.792-0.885 2.674 0.522 2.367 2.752z"/>
+ <path fill="#232323" d="m271.742 229.245c-0.144 4.998-4.9 17.668-6.623 17.096-1.83-0.514 0.811-4.485 2.854-11.442 0.673-2.366 1.229-7.944 1.545-8.325 0.771-0.876 2.583 0.32 2.224 2.671z"/>
+ <path fill="#282828" d="m271.558 229.766c-0.186 4.816-4.777 17.013-6.428 16.443-1.731-0.506 0.854-4.377 2.86-11.196 0.636-2.231 1.168-7.443 1.488-7.837 0.749-0.866 2.49 0.119 2.08 2.59z"/>
+ <path fill="#2d2d2d" d="m271.374 230.288c-0.226 4.637-4.653 16.359-6.231 15.789-1.632-0.496 0.896-4.266 2.866-10.947 0.6-2.098 1.107-6.943 1.433-7.351 0.722-0.859 2.393-0.081 1.932 2.509z"/>
+ <path fill="#333" d="m271.19 230.809c-0.268 4.456-4.531 15.705-6.036 15.136-1.534-0.489 0.94-4.155 2.873-10.7 0.561-1.961 1.046-6.443 1.375-6.863 0.7-0.848 2.3-0.282 1.788 2.427z"/>
+ <path fill="#383838" d="m271.006 231.331c-0.308 4.275-4.407 15.051-5.841 14.482-1.435-0.48 0.984-4.046 2.88-10.453 0.524-1.826 0.985-5.941 1.318-6.375 0.676-0.84 2.206-0.483 1.643 2.346z"/>
+ <path fill="#3d3d3d" d="m270.822 231.853c-0.35 4.093-4.285 14.396-5.645 13.828-1.338-0.472 1.027-3.937 2.886-10.206 0.485-1.691 0.924-5.441 1.261-5.887 0.653-0.832 2.113-0.684 1.498 2.265z"/>
+ <path fill="#424242" d="m270.638 232.374c-0.392 3.914-4.162 13.742-5.45 13.176-1.238-0.463 1.072-3.826 2.893-9.959 0.449-1.555 0.863-4.94 1.204-5.399 0.629-0.824 2.019-0.886 1.353 2.182z"/>
+ <path fill="#474747" d="m270.454 232.896c-0.432 3.731-4.039 13.087-5.254 12.521-1.14-0.453 1.115-3.715 2.9-9.711 0.411-1.42 0.802-4.439 1.146-4.912 0.606-0.815 1.925-1.086 1.208 2.102z"/>
+ <path fill="#4c4c4c" d="m270.27 233.417c-0.474 3.553-3.916 12.434-5.06 11.869-1.041-0.445 1.159-3.606 2.907-9.463 0.373-1.287 0.741-3.941 1.089-4.427 0.583-0.806 1.832-1.287 1.064 2.021z"/>
+ <path fill="#515151" d="m270.086 233.939c-0.514 3.37-3.793 11.778-4.862 11.214-0.942-0.436 1.201-3.496 2.913-9.216 0.336-1.151 0.68-3.438 1.032-3.938 0.558-0.797 1.736-1.489 0.917 1.94z"/>
+ <path fill="#565656" d="m269.902 234.461c-0.555 3.188-3.671 11.123-4.667 10.56-0.844-0.429 1.246-3.386 2.919-8.968 0.298-1.016 0.619-2.939 0.976-3.451 0.535-0.788 1.643-1.689 0.772 1.859z"/>
+ <path fill="#5b5b5b" d="m269.718 234.982c-0.597 3.009-3.548 10.47-4.472 9.907-0.745-0.42 1.29-3.275 2.926-8.721 0.262-0.881 0.559-2.438 0.919-2.963 0.511-0.781 1.549-1.89 0.627 1.777z"/>
+ <path fill="#606060" d="m269.534 235.504c-0.638 2.828-3.425 9.814-4.276 9.252-0.646-0.409 1.333-3.166 2.933-8.473 0.224-0.746 0.497-1.938 0.862-2.476 0.487-0.769 1.454-2.09 0.481 1.697z"/>
+ <path fill="#666" d="m269.35 236.025c-0.68 2.647-3.303 9.161-4.081 8.599-0.548-0.4 1.377-3.056 2.938-8.225 0.187-0.611 0.437-1.438 0.806-1.988 0.464-0.763 1.361-2.293 0.337 1.614z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m251.07 187.865c-1.537 1.622-2.903 9.991 0.938 12.893 3.844 2.818 10.59-2.391 10.59-5.379-0.086-6.746-9.991-9.222-11.528-7.514z"/>
+ <path fill="#010101" d="m251.207 188.006c-1.559 1.611-2.876 9.823 0.857 12.667 3.731 2.764 10.349-2.273 10.384-5.279-0.047-6.576-9.681-9.083-11.241-7.388z"/>
+ <path fill="#030303" d="m251.344 188.146c-1.582 1.601-2.85 9.653 0.774 12.438 3.62 2.709 10.109-2.154 10.178-5.177-0.007-6.404-9.37-8.943-10.952-7.261z"/>
+ <path fill="#050505" d="m251.481 188.287c-1.604 1.589-2.823 9.484 0.691 12.211 3.511 2.653 9.869-2.037 9.975-5.078 0.031-6.232-9.061-8.802-10.666-7.133z"/>
+ <path fill="#070707" d="m251.617 188.427c-1.626 1.579-2.795 9.316 0.611 11.984 3.397 2.6 9.629-1.918 9.768-4.976 0.071-6.062-8.751-8.664-10.379-7.008z"/>
+ <path fill="#090909" d="m251.754 188.567c-1.648 1.568-2.768 9.146 0.529 11.758 3.287 2.543 9.389-1.802 9.563-4.875 0.109-5.892-8.441-8.525-10.092-6.883z"/>
+ <path fill="#0b0b0b" d="m251.891 188.708c-1.671 1.557-2.741 8.978 0.445 11.529 3.177 2.489 9.15-1.683 9.358-4.774 0.15-5.72-8.13-8.385-9.803-6.755z"/>
+ <path fill="#0d0d0d" d="m252.028 188.848c-1.694 1.546-2.715 8.809 0.364 11.302 3.064 2.435 8.908-1.565 9.152-4.673 0.189-5.549-7.82-8.245-9.516-6.629z"/>
+ <path fill="#0f0f0f" d="m252.165 188.989c-1.716 1.535-2.688 8.64 0.282 11.074 2.953 2.38 8.669-1.447 8.948-4.572 0.226-5.378-7.512-8.106-9.23-6.502z"/>
+ <path fill="#111" d="m252.301 189.129c-1.737 1.524-2.659 8.471 0.2 10.847 2.844 2.325 8.431-1.33 8.743-4.471 0.266-5.207-7.201-7.966-8.943-6.376z"/>
+ <path fill="#131313" d="m252.438 189.269c-1.76 1.514-2.633 8.304 0.118 10.619 2.73 2.271 8.189-1.212 8.538-4.369 0.305-5.036-6.892-7.827-8.656-6.25z"/>
+ <path fill="#151515" d="m252.575 189.41c-1.783 1.503-2.606 8.133 0.036 10.391 2.62 2.216 7.949-1.094 8.332-4.268 0.344-4.865-6.581-7.687-8.368-6.123z"/>
+ <path fill="#161616" d="m252.712 189.55c-1.805 1.492-2.58 7.965-0.046 10.164 2.508 2.162 7.709-0.975 8.127-4.167 0.383-4.694-6.272-7.548-8.081-5.997z"/>
+ <path fill="#181818" d="m252.849 189.691c-1.828 1.481-2.554 7.796-0.129 9.937 2.397 2.105 7.47-0.857 7.922-4.066 0.423-4.524-5.961-7.409-7.793-5.871z"/>
+ <path fill="#1a1a1a" d="m252.985 189.831c-1.85 1.47-2.525 7.626-0.21 9.708 2.286 2.053 7.229-0.74 7.717-3.964 0.461-4.352-5.652-7.269-7.507-5.744z"/>
+ <path fill="#1c1c1c" d="m253.122 189.971c-1.872 1.46-2.499 7.459-0.292 9.482 2.175 1.996 6.989-0.623 7.511-3.865 0.501-4.18-5.341-7.128-7.219-5.617z"/>
+ <path fill="#1e1e1e" d="m253.259 190.112c-1.895 1.448-2.472 7.289-0.375 9.254 2.064 1.942 6.75-0.504 7.308-3.763 0.539-4.01-5.033-6.99-6.933-5.491z"/>
+ <path fill="#202020" d="m253.396 190.252c-1.917 1.438-2.445 7.122-0.457 9.027 1.953 1.888 6.51-0.386 7.102-3.662 0.578-3.839-4.722-6.85-6.645-5.365z"/>
+ <path fill="#222" d="m253.533 190.393c-1.939 1.426-2.418 6.951-0.539 8.799 1.841 1.832 6.271-0.268 6.896-3.561 0.618-3.668-4.412-6.711-6.357-5.238z"/>
+ <path fill="#242424" d="m253.669 190.533c-1.961 1.416-2.391 6.783-0.621 8.572 1.731 1.776 6.03-0.149 6.692-3.46 0.657-3.497-4.102-6.571-6.071-5.112z"/>
+ <path fill="#262626" d="m253.806 190.673c-1.984 1.405-2.364 6.615-0.703 8.344 1.619 1.724 5.79-0.032 6.485-3.358 0.697-3.326-3.791-6.432-5.782-4.986z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m250.71 256.698c1.513 1.512 2.809-2.232 4.32-3.457 1.512-1.224 3.96-3.888 8.856-3.888s4.535-0.144 4.319-2.017c-0.144-1.799-1.584-1.655-5.903-1.008-4.32 0.576-7.2 2.809-8.929 4.824-1.654 1.945-3.527 4.681-2.663 5.546z"/>
+ <path fill="#050505" d="m251.043 256.331c1.459 1.449 2.703-2.121 4.205-3.308 1.501-1.187 3.931-3.731 8.64-3.731 4.71-0.002 4.415-0.129 4.209-1.94-0.139-1.743-1.543-1.593-5.749-0.979-4.207 0.543-7.029 2.703-8.712 4.648-1.616 1.877-3.438 4.474-2.593 5.31z"/>
+ <path fill="#0a0a0a" d="m251.376 255.961c1.406 1.389 2.6-2.008 4.089-3.156 1.491-1.148 3.901-3.576 8.425-3.577 4.521-0.001 4.293-0.11 4.096-1.862-0.132-1.688-1.501-1.531-5.594-0.951-4.093 0.51-6.857 2.596-8.495 4.471-1.575 1.812-3.348 4.271-2.521 5.075z"/>
+ <path fill="#0f0f0f" d="m251.709 255.594c1.354 1.326 2.494-1.895 3.975-3.008 1.479-1.111 3.871-3.42 8.207-3.422s4.171-0.094 3.984-1.785c-0.126-1.631-1.46-1.467-5.438-0.924-3.979 0.479-6.687 2.492-8.28 4.297-1.533 1.747-3.257 4.066-2.448 4.842z"/>
+ <path fill="#141414" d="m252.042 255.226c1.302 1.265 2.39-1.783 3.858-2.856 1.47-1.076 3.842-3.266 7.991-3.268s4.05-0.077 3.873-1.709c-0.119-1.575-1.419-1.404-5.284-0.895-3.865 0.444-6.515 2.385-8.063 4.121-1.49 1.678-3.165 3.861-2.375 4.607z"/>
+ <path fill="#191919" d="m252.374 254.859c1.249 1.202 2.285-1.671 3.744-2.708 1.458-1.037 3.813-3.109 7.774-3.111 3.963-0.004 3.929-0.061 3.761-1.633-0.113-1.519-1.377-1.341-5.128-0.867-3.751 0.414-6.344 2.279-7.847 3.945-1.449 1.613-3.075 3.656-2.304 4.374z"/>
+ <path fill="#1e1e1e" d="m252.707 254.491c1.196 1.141 2.182-1.559 3.628-2.558 1.448-1 3.783-2.954 7.56-2.957 3.775-0.003 3.806-0.043 3.648-1.556-0.106-1.461-1.336-1.277-4.974-0.838-3.637 0.379-6.172 2.174-7.63 3.77-1.408 1.546-2.984 3.451-2.232 4.139z"/>
+ <path fill="#232323" d="m253.04 254.124c1.144 1.078 2.076-1.447 3.514-2.41 1.437-0.961 3.753-2.797 7.342-2.799 3.589-0.004 3.685-0.027 3.537-1.48-0.101-1.405-1.294-1.215-4.818-0.811-3.524 0.349-6.001 2.068-7.415 3.594-1.367 1.48-2.894 3.245-2.16 3.906z"/>
+ <path fill="#282828" d="m253.373 253.754c1.09 1.018 1.972-1.334 3.398-2.258 1.426-0.926 3.723-2.642 7.125-2.646 3.402-0.005 3.563-0.011 3.426-1.403-0.095-1.349-1.253-1.15-4.664-0.781-3.409 0.314-5.829 1.961-7.198 3.418-1.325 1.415-2.803 3.041-2.087 3.67z"/>
+ <path fill="#2d2d2d" d="m253.706 253.388c1.038 0.954 1.866-1.222 3.282-2.11 1.416-0.887 3.694-2.486 6.909-2.49 3.217-0.004 3.441 0.008 3.313-1.326-0.088-1.293-1.212-1.088-4.508-0.754-3.296 0.283-5.658 1.857-6.981 3.244-1.284 1.345-2.712 2.836-2.015 3.436z"/>
+ <path fill="#333" d="m254.039 253.02c0.985 0.893 1.762-1.109 3.167-1.96s3.664-2.33 6.693-2.335c3.029-0.006 3.32 0.023 3.202-1.249-0.082-1.237-1.171-1.024-4.354-0.726-3.182 0.25-5.485 1.75-6.765 3.066-1.243 1.282-2.622 2.634-1.943 3.204z"/>
+ <path fill="#383838" d="m254.372 252.652c0.933 0.831 1.657-0.998 3.051-1.81 1.396-0.813 3.636-2.174 6.478-2.18 2.843-0.006 3.199 0.039 3.09-1.172-0.076-1.181-1.129-0.963-4.198-0.697-3.068 0.217-5.314 1.644-6.55 2.891-1.202 1.214-2.531 2.427-1.871 2.968z"/>
+ <path fill="#3d3d3d" d="m254.704 252.284c0.88 0.771 1.553-0.885 2.938-1.66 1.383-0.775 3.604-2.019 6.26-2.024 2.656-0.007 3.078 0.058 2.979-1.095-0.069-1.125-1.088-0.899-4.044-0.67-2.954 0.185-5.144 1.539-6.333 2.715-1.16 1.148-2.441 2.222-1.8 2.734z"/>
+ <path fill="#424242" d="m255.037 251.917c0.827 0.707 1.448-0.773 2.821-1.51 1.373-0.738 3.576-1.863 6.044-1.871 2.47-0.007 2.956 0.074 2.867-1.018-0.063-1.068-1.046-0.836-3.889-0.641-2.841 0.151-4.973 1.433-6.116 2.539-1.119 1.083-2.35 2.018-1.727 2.501z"/>
+ <path fill="#474747" d="m255.37 251.549c0.774 0.645 1.344-0.661 2.706-1.362 1.362-0.7 3.545-1.706 5.828-1.713 2.283-0.009 2.834 0.09 2.754-0.942-0.057-1.012-1.005-0.773-3.733-0.613-2.727 0.119-4.801 1.328-5.899 2.365-1.078 1.013-2.26 1.81-1.656 2.265z"/>
+ <path fill="#4c4c4c" d="m255.703 251.181c0.721 0.584 1.239-0.55 2.59-1.212 1.353-0.663 3.517-1.551 5.612-1.559 2.096-0.009 2.713 0.107 2.643-0.865-0.051-0.955-0.964-0.709-3.577-0.584-2.613 0.086-4.631 1.222-5.686 2.188-1.035 0.949-2.168 1.607-1.582 2.032z"/>
+ <path fill="#515151" d="m256.036 250.813c0.669 0.521 1.134-0.436 2.476-1.063 1.341-0.625 3.485-1.395 5.395-1.402 1.91-0.01 2.591 0.124 2.531-0.789-0.044-0.898-0.922-0.646-3.423-0.557-2.499 0.055-4.458 1.117-5.469 2.014-0.994 0.882-2.077 1.402-1.51 1.797z"/>
+ <path fill="#565656" d="m256.369 250.446c0.616 0.459 1.029-0.324 2.36-0.912 1.33-0.589 3.456-1.24 5.178-1.248 1.723-0.01 2.47 0.141 2.42-0.713-0.039-0.842-0.881-0.582-3.268-0.527-2.387 0.021-4.287 1.01-5.252 1.836-0.953 0.816-1.987 1.199-1.438 1.564z"/>
+ <path fill="#5b5b5b" d="m256.701 250.079c0.564 0.397 0.926-0.213 2.245-0.764s3.427-1.084 4.963-1.093c1.536-0.011 2.348 0.157 2.307-0.636-0.031-0.785-0.839-0.52-3.112-0.5-2.271-0.01-4.116 0.906-5.035 1.662-0.913 0.751-1.898 0.993-1.368 1.331z"/>
+ <path fill="#606060" d="m257.034 249.709c0.511 0.336 0.821-0.1 2.13-0.612 1.309-0.515 3.397-0.929 4.746-0.938 1.351-0.01 2.227 0.176 2.196-0.558-0.026-0.729-0.799-0.457-2.958-0.472-2.158-0.043-3.945 0.799-4.82 1.486-0.87 0.682-1.805 0.788-1.294 1.094z"/>
+ <path fill="#666" d="m257.367 249.342c0.458 0.273 0.716 0.012 2.014-0.465 1.299-0.476 3.368-0.771 4.53-0.781 1.163-0.012 2.105 0.191 2.084-0.482-0.02-0.673-0.757-0.393-2.803-0.443-2.044-0.076-3.773 0.693-4.604 1.311-0.828 0.616-1.714 0.582-1.221 0.86z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m270.222 247.265c0 2.304 4.68 3.096 9.144 3.743 4.392 0.648 7.92 1.513 8.136 6.121 0.216 4.535-0.936 7.775 1.08 7.416 4.32-0.793 5.904-5.473 5.832-7.633 0-2.16-3.168-6.047-8.855-8.207-4.177-1.584-7.2-2.305-10.872-2.449-4.897-0.214-4.465 1.009-4.465 1.009z"/>
+ <path fill="#030303" d="m270.348 247.304c0.012 2.239 4.643 2.97 9.049 3.639 4.352 0.675 7.75 1.511 8.11 6.002 0.345 4.415-0.854 7.515 1.136 7.188 4.145-0.739 5.688-5.2 5.607-7.332-0.015-2.151-3.118-5.91-8.733-8.038-4.129-1.563-7.11-2.298-10.74-2.452-4.754-0.217-4.438 0.952-4.429 0.993z"/>
+ <path fill="#070707" d="m270.474 247.342c0.023 2.174 4.605 2.845 8.953 3.533 4.312 0.701 7.58 1.508 8.087 5.885 0.471 4.295-0.771 7.252 1.189 6.963 3.97-0.689 5.472-4.93 5.384-7.033-0.028-2.145-3.068-5.773-8.61-7.87-4.082-1.543-7.022-2.291-10.609-2.456-4.612-0.218-4.412 0.896-4.394 0.978z"/>
+ <path fill="#0b0b0b" d="m270.6 247.379c0.035 2.109 4.568 2.721 8.857 3.431 4.271 0.728 7.411 1.506 8.063 5.767 0.599 4.174-0.689 6.988 1.245 6.735 3.795-0.638 5.257-4.66 5.159-6.733-0.044-2.137-3.019-5.636-8.488-7.701-4.035-1.522-6.933-2.285-10.478-2.459-4.469-0.219-4.384 0.837-4.358 0.96z"/>
+ <path fill="#0f0f0f" d="m270.726 247.418c0.047 2.043 4.531 2.595 8.762 3.324 4.232 0.754 7.242 1.504 8.039 5.649 0.725 4.052-0.608 6.728 1.299 6.509 3.621-0.586 5.041-4.389 4.937-6.436-0.06-2.127-2.971-5.496-8.367-7.53-3.988-1.502-6.842-2.278-10.346-2.464-4.328-0.22-4.359 0.784-4.324 0.948z"/>
+ <path fill="#131313" d="m270.852 247.458c0.059 1.978 4.495 2.469 8.667 3.219 4.19 0.781 7.071 1.502 8.014 5.531 0.854 3.932-0.526 6.465 1.354 6.283 3.445-0.535 4.824-4.119 4.712-6.137-0.074-2.119-2.92-5.359-8.245-7.361-3.941-1.482-6.753-2.271-10.213-2.469-4.186-0.221-4.333 0.726-4.289 0.934z"/>
+ <path fill="#161616" d="m270.978 247.495c0.07 1.914 4.458 2.344 8.57 3.115 4.151 0.807 6.903 1.5 7.99 5.413 0.98 3.812-0.443 6.202 1.409 6.056 3.271-0.482 4.609-3.848 4.488-5.836-0.088-2.111-2.871-5.222-8.123-7.193-3.894-1.461-6.663-2.264-10.081-2.471-4.043-0.223-4.306 0.67-4.253 0.916z"/>
+ <path fill="#1a1a1a" d="m271.104 247.534c0.082 1.848 4.422 2.219 8.476 3.01 4.111 0.832 6.734 1.498 7.965 5.295 1.108 3.69-0.36 5.94 1.464 5.83 3.097-0.433 4.394-3.578 4.265-5.537-0.104-2.104-2.821-5.084-8-7.023-3.848-1.441-6.575-2.26-9.949-2.477-3.905-0.223-4.283 0.613-4.221 0.902z"/>
+ <path fill="#1e1e1e" d="m271.23 247.573c0.094 1.781 4.385 2.092 8.381 2.904 4.07 0.859 6.563 1.495 7.939 5.178 1.236 3.568-0.278 5.678 1.52 5.602 2.921-0.381 4.177-3.305 4.04-5.237-0.118-2.097-2.771-4.946-7.878-6.854-3.8-1.42-6.485-2.252-9.817-2.479-3.762-0.226-4.256 0.556-4.185 0.886z"/>
+ <path fill="#222" d="m271.356 247.61c0.105 1.717 4.348 1.969 8.285 2.801 4.029 0.885 6.395 1.493 7.916 5.059 1.362 3.449-0.197 5.416 1.573 5.377 2.746-0.329 3.962-3.036 3.816-4.939-0.133-2.087-2.722-4.808-7.756-6.684-3.753-1.4-6.396-2.247-9.686-2.484-3.618-0.227-4.227 0.499-4.148 0.87z"/>
+ <path fill="#262626" d="m271.482 247.648c0.118 1.651 4.311 1.843 8.189 2.694 3.99 0.914 6.226 1.492 7.892 4.943 1.491 3.328-0.115 5.152 1.629 5.149 2.571-0.278 3.746-2.765 3.592-4.64-0.146-2.08-2.672-4.672-7.634-6.516-3.705-1.38-6.306-2.24-9.553-2.488-3.478-0.225-4.203 0.446-4.115 0.858z"/>
+ <path fill="#2a2a2a" d="m271.608 247.687c0.129 1.587 4.273 1.716 8.094 2.59 3.95 0.938 6.056 1.489 7.867 4.825 1.618 3.206-0.033 4.891 1.684 4.922 2.396-0.227 3.53-2.494 3.368-4.34-0.162-2.072-2.623-4.534-7.512-6.348-3.658-1.358-6.216-2.232-9.421-2.492-3.336-0.226-4.177 0.39-4.08 0.843z"/>
+ <path fill="#2d2d2d" d="m271.734 247.725c0.141 1.521 4.237 1.591 7.999 2.484 3.909 0.967 5.886 1.488 7.842 4.707 1.746 3.086 0.05 4.629 1.739 4.697 2.221-0.176 3.313-2.225 3.144-4.041-0.177-2.064-2.572-4.396-7.389-6.178-3.612-1.339-6.128-2.227-9.29-2.497-3.194-0.227-4.151 0.334-4.045 0.828z"/>
+ <path fill="#313131" d="m271.86 247.763c0.153 1.456 4.2 1.466 7.903 2.381 3.869 0.991 5.717 1.485 7.817 4.589 1.873 2.965 0.132 4.365 1.794 4.469 2.046-0.123 3.099-1.953 2.92-3.742-0.191-2.055-2.523-4.258-7.267-6.008-3.565-1.318-6.038-2.22-9.158-2.5-3.051-0.229-4.124 0.276-4.009 0.811z"/>
+ <path fill="#353535" d="m271.986 247.801c0.165 1.392 4.163 1.341 7.808 2.275 3.829 1.018 5.547 1.483 7.794 4.473 2 2.843 0.213 4.103 1.848 4.242 1.873-0.074 2.883-1.683 2.696-3.443-0.206-2.047-2.474-4.12-7.145-5.838-3.517-1.299-5.948-2.215-9.026-2.506-2.91-0.229-4.099 0.221-3.975 0.797z"/>
+ <path fill="#393939" d="m272.112 247.84c0.176 1.326 4.126 1.215 7.712 2.17 3.789 1.045 5.378 1.482 7.771 4.354 2.127 2.723 0.295 3.842 1.901 4.016 1.698-0.021 2.667-1.412 2.474-3.144-0.222-2.038-2.426-3.981-7.023-5.669-3.47-1.277-5.859-2.208-8.894-2.509-2.769-0.231-4.074 0.164-3.941 0.782z"/>
+ <path fill="#3d3d3d" d="m272.238 247.877c0.188 1.262 4.089 1.09 7.617 2.066 3.749 1.071 5.208 1.479 7.745 4.236 2.255 2.602 0.377 3.578 1.957 3.789 1.522 0.029 2.451-1.141 2.249-2.844-0.236-2.033-2.375-3.846-6.901-5.5-3.423-1.258-5.769-2.203-8.762-2.514-2.626-0.231-4.046 0.109-3.905 0.767z"/>
+ <path fill="#414141" d="m272.364 247.917c0.2 1.195 4.052 0.965 7.522 1.961 3.708 1.098 5.037 1.477 7.72 4.119 2.383 2.479 0.46 3.315 2.012 3.562 1.348 0.081 2.236-0.87 2.025-2.545-0.251-2.022-2.325-3.707-6.778-5.331-3.377-1.237-5.681-2.195-8.631-2.518-2.485-0.233-4.02 0.05-3.87 0.752z"/>
+ <path fill="#444" d="m272.49 247.956c0.212 1.129 4.015 0.838 7.426 1.855 3.668 1.124 4.869 1.475 7.696 4 2.51 2.359 0.542 3.055 2.067 3.336 1.173 0.133 2.02-0.6 1.801-2.246-0.266-2.016-2.276-3.568-6.656-5.16-3.329-1.218-5.591-2.189-8.499-2.521-2.343-0.235-3.994-0.007-3.835 0.736z"/>
+ <path fill="#484848" d="m272.616 247.993c0.223 1.065 3.979 0.715 7.331 1.752 3.628 1.15 4.699 1.473 7.671 3.883 2.638 2.238 0.624 2.791 2.122 3.108 0.998 0.185 1.804-0.329 1.577-1.946-0.28-2.008-2.227-3.432-6.534-4.992-3.282-1.196-5.501-2.182-8.367-2.525-2.201-0.235-3.968-0.064-3.8 0.72z"/>
+ <path fill="#4c4c4c" d="m272.742 248.032c0.235 1 3.941 0.588 7.235 1.645 3.588 1.178 4.529 1.472 7.646 3.766 2.766 2.118 0.706 2.529 2.177 2.883 0.823 0.235 1.589-0.059 1.354-1.648-0.295-1.998-2.177-3.293-6.412-4.822-3.235-1.176-5.412-2.176-8.235-2.529-2.059-0.239-3.942-0.119-3.765 0.705z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#4c4c4c" d="m287.565 252.854c1.646 1 1.353 2.059 2.412 2.766 0.528 0.352 1.412 0.352 0.882-1-0.706-1.588-1.294-2.472-4.941-3.943-2.353-0.941-1.882 0.059 1.647 2.177z"/>
+ <path fill="#505050" d="m287.609 252.868c1.605 0.975 1.32 2.008 2.353 2.696 0.517 0.343 1.377 0.343 0.86-0.976-0.689-1.549-1.262-2.41-4.82-3.846-2.295-0.917-1.836 0.059 1.607 2.126z"/>
+ <path fill="#545454" d="m287.652 252.879c1.567 0.951 1.287 1.957 2.294 2.629 0.503 0.334 1.343 0.334 0.839-0.951-0.671-1.51-1.23-2.35-4.699-3.749-2.238-0.893-1.79 0.058 1.566 2.071z"/>
+ <path fill="#575757" d="m287.696 252.891c1.526 0.926 1.254 1.908 2.235 2.563 0.489 0.325 1.308 0.325 0.816-0.928-0.653-1.471-1.199-2.289-4.578-3.652-2.179-0.872-1.743 0.055 1.527 2.017z"/>
+ <path fill="#5b5b5b" d="m287.74 252.903c1.485 0.902 1.22 1.857 2.175 2.494 0.479 0.318 1.274 0.318 0.796-0.902-0.637-1.432-1.167-2.229-4.457-3.556-2.122-0.849-1.697 0.054 1.486 1.964z"/>
+ <path fill="#5f5f5f" d="m287.783 252.915c1.446 0.879 1.188 1.808 2.117 2.426 0.464 0.31 1.239 0.31 0.773-0.877-0.619-1.394-1.136-2.168-4.336-3.459-2.064-0.826-1.65 0.052 1.446 1.91z"/>
+ <path fill="#636363" d="m287.827 252.926c1.405 0.854 1.154 1.758 2.057 2.359 0.452 0.301 1.205 0.301 0.754-0.853-0.603-1.354-1.104-2.108-4.216-3.363-2.007-0.801-1.605 0.053 1.405 1.857z"/>
+ <path fill="#676767" d="m287.871 252.94c1.364 0.828 1.121 1.705 1.998 2.29 0.438 0.292 1.17 0.292 0.731-0.828-0.585-1.315-1.072-2.047-4.095-3.267-1.948-0.779-1.558 0.05 1.366 1.805z"/>
+ <path fill="#6b6b6b" d="m287.914 252.952c1.325 0.805 1.088 1.655 1.94 2.223 0.425 0.283 1.135 0.283 0.709-0.803-0.568-1.277-1.041-1.988-3.974-3.17-1.891-0.757-1.512 0.047 1.325 1.75z"/>
+ <path fill="#6e6e6e" d="m287.958 252.963c1.284 0.779 1.056 1.605 1.88 2.156 0.413 0.274 1.102 0.274 0.688-0.779-0.551-1.238-1.009-1.926-3.853-3.073-1.833-0.733-1.466 0.046 1.285 1.696z"/>
+ <path fill="#727272" d="m288.002 252.976c1.243 0.755 1.021 1.554 1.821 2.087 0.399 0.266 1.066 0.266 0.666-0.755-0.533-1.199-0.977-1.865-3.731-2.976-1.776-0.71-1.421 0.045 1.244 1.644z"/>
+ <path fill="#767676" d="m288.045 252.989c1.203 0.73 0.989 1.504 1.763 2.02 0.387 0.257 1.031 0.257 0.645-0.731-0.516-1.159-0.946-1.805-3.61-2.879-1.72-0.688-1.376 0.042 1.202 1.59z"/>
+ <path fill="#7a7a7a" d="m288.089 253c1.163 0.705 0.955 1.453 1.703 1.951 0.373 0.25 0.997 0.25 0.623-0.705-0.499-1.121-0.914-1.744-3.489-2.783-1.661-0.664-1.329 0.041 1.163 1.537z"/>
+ <path fill="#7e7e7e" d="m288.133 253.012c1.122 0.682 0.923 1.404 1.644 1.885 0.361 0.24 0.962 0.24 0.602-0.682-0.481-1.082-0.882-1.684-3.367-2.687-1.605-0.64-1.285 0.041 1.121 1.484z"/>
+ <path fill="#828282" d="m288.176 253.025c1.082 0.657 0.89 1.353 1.586 1.815 0.348 0.232 0.927 0.232 0.578-0.656-0.463-1.043-0.85-1.623-3.245-2.59-1.547-0.618-1.237 0.039 1.081 1.431z"/>
+ <path fill="#858585" d="m288.22 253.038c1.042 0.631 0.855 1.301 1.524 1.748 0.335 0.223 0.894 0.223 0.559-0.633-0.446-1.005-0.818-1.563-3.125-2.492-1.488-0.596-1.19 0.037 1.042 1.377z"/>
+ <path fill="#898989" d="m288.264 253.049c1.001 0.607 0.821 1.252 1.466 1.681 0.322 0.214 0.857 0.214 0.536-0.608-0.43-0.965-0.786-1.502-3.004-2.396-1.43-0.573-1.144 0.034 1.002 1.323z"/>
+ <path fill="#8d8d8d" d="m288.307 253.061c0.961 0.584 0.79 1.201 1.407 1.613 0.309 0.205 0.823 0.205 0.515-0.584-0.412-0.926-0.755-1.441-2.883-2.299-1.373-0.548-1.098 0.034 0.961 1.27z"/>
+ <path fill="#919191" d="m288.351 253.073c0.921 0.559 0.756 1.151 1.348 1.547 0.296 0.196 0.789 0.196 0.493-0.56-0.395-0.888-0.723-1.381-2.762-2.204-1.315-0.525-1.052 0.033 0.921 1.217z"/>
+ <path fill="#959595" d="m288.395 253.084c0.88 0.535 0.723 1.102 1.289 1.479 0.282 0.189 0.754 0.189 0.471-0.534-0.377-0.849-0.691-1.321-2.641-2.106-1.257-0.505-1.006 0.031 0.881 1.161z"/>
+ <path fill="#999" d="m288.438 253.097c0.84 0.51 0.689 1.05 1.229 1.409 0.271 0.181 0.721 0.181 0.45-0.51-0.36-0.81-0.66-1.26-2.52-2.01-1.199-0.48-0.959 0.031 0.841 1.111z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path d="m222.275 107.427c-0.738 0.902 0.574 8.365 5.412 13.285 4.839 4.838 7.791 4.838 9.759 2.706 3.771-4.018 0.738-7.791-1.558-10.415-2.297-2.624-5.248-1.722-7.955-4.346-2.706-2.624-4.592-2.46-5.658-1.23z"/>
+ <path fill="#050505" d="m222.345 107.494c-0.732 0.895 0.569 8.3 5.369 13.182 4.803 4.801 7.731 4.801 9.685 2.685 3.742-3.987 0.731-7.73-1.546-10.334-2.278-2.604-5.208-1.709-7.894-4.312-2.684-2.604-4.556-2.441-5.614-1.221z"/>
+ <path fill="#0a0a0a" d="m222.416 107.561c-0.727 0.888 0.565 8.235 5.328 13.079 4.763 4.763 7.67 4.763 9.607 2.664 3.713-3.956 0.727-7.67-1.534-10.253-2.26-2.584-5.166-1.696-7.831-4.279-2.664-2.583-4.521-2.422-5.57-1.211z"/>
+ <path fill="#0f0f0f" d="m222.486 107.628c-0.721 0.881 0.561 8.17 5.286 12.976 4.726 4.725 7.608 4.725 9.532 2.642 3.684-3.924 0.72-7.609-1.522-10.172-2.243-2.563-5.126-1.682-7.77-4.244-2.643-2.563-4.485-2.403-5.526-1.202z"/>
+ <path fill="#141414" d="m222.556 107.695c-0.716 0.874 0.557 8.105 5.243 12.872 4.689 4.688 7.55 4.688 9.456 2.622 3.655-3.893 0.716-7.549-1.51-10.091-2.224-2.543-5.085-1.669-7.707-4.211-2.621-2.543-4.449-2.384-5.482-1.192z"/>
+ <path fill="#191919" d="m222.627 107.762c-0.71 0.867 0.552 8.04 5.202 12.769 4.65 4.65 7.488 4.65 9.379 2.601 3.626-3.862 0.71-7.489-1.497-10.011s-5.044-1.655-7.646-4.177-4.414-2.364-5.438-1.182z"/>
+ <path fill="#1e1e1e" d="m222.697 107.829c-0.704 0.86 0.547 7.975 5.16 12.666 4.613 4.612 7.428 4.612 9.304 2.579 3.596-3.83 0.703-7.427-1.486-9.929-2.188-2.502-5.003-1.642-7.584-4.143-2.579-2.502-4.378-2.346-5.394-1.173z"/>
+ <path fill="#232323" d="m222.767 107.896c-0.697 0.853 0.543 7.91 5.117 12.562 4.576 4.575 7.367 4.575 9.229 2.559 3.567-3.8 0.698-7.367-1.473-9.848-2.171-2.482-4.963-1.629-7.522-4.11s-4.343-2.326-5.351-1.163z"/>
+ <path fill="#282828" d="m222.838 107.963c-0.691 0.846 0.538 7.845 5.076 12.459 4.537 4.537 7.307 4.537 9.152 2.538 3.537-3.769 0.691-7.307-1.461-9.768-2.154-2.461-4.922-1.615-7.461-4.076-2.538-2.461-4.307-2.307-5.306-1.153z"/>
+ <path fill="#2d2d2d" d="m222.908 108.03c-0.686 0.839 0.534 7.78 5.034 12.355 4.5 4.499 7.246 4.499 9.076 2.516 3.509-3.737 0.686-7.246-1.449-9.686-2.135-2.441-4.881-1.602-7.399-4.042-2.516-2.44-4.271-2.287-5.262-1.143z"/>
+ <path fill="#333" d="m222.978 108.096c-0.681 0.832 0.529 7.715 4.992 12.253 4.463 4.462 7.186 4.462 9.001 2.496 3.479-3.706 0.68-7.186-1.438-9.605-2.118-2.42-4.841-1.588-7.337-4.008s-4.235-2.27-5.218-1.136z"/>
+ <path fill="#383838" d="m223.048 108.163c-0.674 0.825 0.526 7.65 4.95 12.15 4.425 4.425 7.125 4.425 8.925 2.475 3.45-3.675 0.676-7.125-1.425-9.525-2.099-2.4-4.8-1.575-7.274-3.975-2.475-2.399-4.201-2.25-5.176-1.125z"/>
+ <path fill="#3d3d3d" d="m223.119 108.23c-0.669 0.818 0.521 7.585 4.908 12.047 4.387 4.387 7.063 4.387 8.849 2.453 3.42-3.643 0.669-7.064-1.413-9.443-2.082-2.38-4.759-1.562-7.214-3.941-2.453-2.38-4.164-2.231-5.13-1.116z"/>
+ <path fill="#424242" d="m223.189 108.297c-0.663 0.811 0.516 7.52 4.866 11.944 4.35 4.349 7.004 4.349 8.772 2.432 3.392-3.612 0.663-7.004-1.4-9.363-2.064-2.359-4.719-1.548-7.151-3.907-2.433-2.359-4.129-2.212-5.087-1.106z"/>
+ <path fill="#474747" d="m223.259 108.364c-0.656 0.804 0.513 7.455 4.824 11.84 4.313 4.312 6.944 4.312 8.697 2.412 3.362-3.582 0.658-6.944-1.388-9.282-2.046-2.339-4.679-1.535-7.09-3.874-2.411-2.338-4.093-2.192-5.043-1.096z"/>
+ <path fill="#4c4c4c" d="m223.33 108.431c-0.651 0.797 0.507 7.39 4.782 11.737 4.274 4.274 6.882 4.274 8.621 2.39 3.332-3.55 0.651-6.883-1.377-9.201s-4.636-1.521-7.028-3.839c-2.39-2.318-4.057-2.174-4.998-1.087z"/>
+ <path fill="#515151" d="m223.4 108.498c-0.646 0.79 0.503 7.325 4.74 11.634 4.236 4.236 6.821 4.236 8.545 2.369 3.304-3.519 0.646-6.822-1.364-9.12s-4.596-1.508-6.966-3.806c-2.369-2.298-4.022-2.154-4.955-1.077z"/>
+ <path fill="#565656" d="m223.47 108.565c-0.641 0.783 0.499 7.26 4.697 11.53 4.199 4.199 6.763 4.199 8.471 2.349 3.273-3.488 0.64-6.762-1.353-9.039-1.993-2.278-4.556-1.495-6.905-3.773-2.347-2.277-3.985-2.135-4.91-1.067z"/>
+ <path fill="#5b5b5b" d="m223.541 108.632c-0.635 0.776 0.493 7.195 4.656 11.427 4.161 4.161 6.701 4.161 8.393 2.327 3.245-3.456 0.636-6.701-1.34-8.958-1.975-2.257-4.514-1.48-6.843-3.738-2.327-2.257-3.95-2.116-4.866-1.058z"/>
+ <path fill="#606060" d="m223.611 108.699c-0.629 0.769 0.489 7.13 4.614 11.324 4.124 4.123 6.64 4.123 8.317 2.306 3.215-3.425 0.628-6.641-1.328-8.877-1.957-2.237-4.474-1.468-6.78-3.705-2.306-2.236-3.915-2.097-4.823-1.048z"/>
+ <path fill="#666" d="m223.681 108.765c-0.623 0.762 0.484 7.065 4.571 11.221 4.086 4.086 6.58 4.086 8.242 2.285 3.187-3.394 0.623-6.58-1.315-8.796-1.939-2.217-4.434-1.455-6.72-3.671-2.284-2.216-3.878-2.078-4.778-1.039z"/>
+ </g>
+ <g transform="translate(-12.4048,10.0005)">
+ <path fill="#fc0" d="m137.79 109.277c1.978 1.366 2.031 1.607 4.948 3.514 4.64 3.768 12.885 4.616 16.922 4.75 9.233 1.467 25.738-7.161 32.273-11.111 3.291-2.463 9.38-7.551 11.659-7.637 1.405 1.485-0.66 1.792-3.587 3.775-3.906 2.779-7.25 5.156-13.172 8.515-6.338 3.316-16.078 8.794-28.548 8.054-6.542-0.959-6.566-1.024-10.606-3.086-2.4-1.732-7.901-4.608-9.889-6.774z"/>
+ <linearGradient id="al" x1="129.342" gradientUnits="userSpaceOnUse" x2="195.598" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.305" y2="259.305">
+ <stop stop-color="#FAC700" offset="0"/>
+ <stop stop-color="#F7C400" offset=".415"/>
+ <stop stop-color="#F7C400" offset="1"/>
+ </linearGradient>
+ <path fill="url(#al)" d="m137.742 109.259c1.926 1.274 2.165 1.643 5.083 3.554 4.616 3.734 12.716 4.616 16.796 4.763 9.365 1.452 26.05-7.294 32.356-11.159 3.357-2.506 9.344-7.498 11.595-7.604 1.365 1.472-0.728 1.768-3.688 3.814-3.889 2.753-7.119 5.065-12.972 8.383-6.29 3.291-16.078 8.795-28.536 8.104-6.561-0.945-6.851-1.07-10.758-3.079-2.468-1.755-7.876-4.587-9.876-6.776z"/>
+ <linearGradient id="am" x1="129.293" gradientUnits="userSpaceOnUse" x2="195.554" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.311" y2="259.311">
+ <stop stop-color="#F6C200" offset="0"/>
+ <stop stop-color="#EFBC00" offset=".415"/>
+ <stop stop-color="#EFBC00" offset="1"/>
+ </linearGradient>
+ <path fill="url(#am)" d="m137.693 109.24c1.876 1.183 2.3 1.68 5.218 3.595 4.593 3.7 12.548 4.616 16.67 4.776 9.498 1.437 26.364-7.428 32.44-11.207 3.425-2.55 9.308-7.444 11.528-7.57 1.326 1.457-0.795 1.743-3.788 3.854-3.87 2.725-6.99 4.973-12.771 8.25-6.243 3.266-16.078 8.796-28.525 8.154-6.579-0.931-7.134-1.117-10.908-3.073-2.536-1.779-7.852-4.567-9.864-6.779z"/>
+ <linearGradient id="an" x1="129.245" gradientUnits="userSpaceOnUse" x2="195.51" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.317" y2="259.317">
+ <stop stop-color="#F1BD00" offset="0"/>
+ <stop stop-color="#E8B500" offset=".415"/>
+ <stop stop-color="#E8B500" offset="1"/>
+ </linearGradient>
+ <path fill="url(#an)" d="m137.645 109.222c1.825 1.091 2.434 1.715 5.352 3.635 4.569 3.665 12.38 4.615 16.544 4.789 9.631 1.422 26.677-7.562 32.524-11.255 3.491-2.594 9.271-7.392 11.463-7.538 1.287 1.442-0.861 1.718-3.889 3.893-3.853 2.699-6.86 4.882-12.57 8.119-6.195 3.241-16.078 8.797-28.513 8.203-6.6-0.916-7.418-1.163-11.061-3.066-2.603-1.801-7.826-4.546-9.85-6.78z"/>
+ <linearGradient id="ao" x1="129.196" gradientUnits="userSpaceOnUse" x2="195.465" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.322" y2="259.322">
+ <stop stop-color="#EDB800" offset="0"/>
+ <stop stop-color="#E0AD00" offset=".415"/>
+ <stop stop-color="#E0AD00" offset="1"/>
+ </linearGradient>
+ <path fill="url(#ao)" d="m137.596 109.203c1.774 1 2.568 1.752 5.487 3.676 4.545 3.631 12.211 4.615 16.418 4.801 9.764 1.408 26.989-7.695 32.608-11.302 3.557-2.637 9.236-7.338 11.396-7.505 1.247 1.427-0.928 1.693-3.99 3.932-3.833 2.672-6.729 4.791-12.369 7.986-6.148 3.217-16.078 8.799-28.501 8.254-6.619-0.902-7.702-1.21-11.21-3.059-2.672-1.825-7.803-4.525-9.839-6.783z"/>
+ <linearGradient id="ap" x1="129.148" gradientUnits="userSpaceOnUse" x2="195.422" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.327" y2="259.327">
+ <stop stop-color="#E9B300" offset="0"/>
+ <stop stop-color="#D8A500" offset=".415"/>
+ <stop stop-color="#D8A500" offset="1"/>
+ </linearGradient>
+ <path fill="url(#ap)" d="m137.548 109.184c1.724 0.909 2.703 1.788 5.622 3.717 4.522 3.597 12.043 4.615 16.292 4.814 9.896 1.393 27.303-7.829 32.692-11.35 3.624-2.681 9.2-7.286 11.331-7.472 1.208 1.412-0.995 1.668-4.092 3.972-3.814 2.644-6.6 4.698-12.168 7.853-6.101 3.192-16.077 8.8-28.489 8.303-6.638-0.887-7.986-1.256-11.361-3.052-2.741-1.848-7.779-4.504-9.827-6.785z"/>
+ <linearGradient id="aq" x1="129.099" gradientUnits="userSpaceOnUse" x2="195.379" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.332" y2="259.332">
+ <stop stop-color="#E4AE00" offset="0"/>
+ <stop stop-color="#D19E00" offset=".415"/>
+ <stop stop-color="#D19E00" offset="1"/>
+ </linearGradient>
+ <path fill="url(#aq)" d="m137.499 109.166c1.673 0.817 2.838 1.824 5.757 3.757 4.499 3.562 11.875 4.614 16.166 4.827 10.029 1.378 27.615-7.963 32.776-11.398 3.691-2.725 9.164-7.232 11.265-7.439 1.169 1.397-1.061 1.644-4.191 4.01-3.796 2.618-6.469 4.608-11.968 7.722-6.053 3.167-16.077 8.801-28.478 8.353-6.657-0.873-8.27-1.303-11.512-3.046-2.809-1.87-7.755-4.483-9.815-6.786z"/>
+ <linearGradient id="ar" x1="129.051" gradientUnits="userSpaceOnUse" x2="195.338" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.336" y2="259.336">
+ <stop stop-color="#E0A900" offset="0"/>
+ <stop stop-color="#C99600" offset=".415"/>
+ <stop stop-color="#C99600" offset="1"/>
+ </linearGradient>
+ <path fill="url(#ar)" d="m137.451 109.147c1.622 0.726 2.972 1.86 5.892 3.798 4.475 3.528 11.705 4.614 16.04 4.84 10.161 1.362 27.929-8.097 32.859-11.447 3.757-2.767 9.128-7.178 11.2-7.405 1.13 1.382-1.128 1.619-4.294 4.049-3.777 2.592-6.339 4.517-11.767 7.589-6.005 3.143-16.077 8.803-28.466 8.404-6.676-0.859-8.553-1.35-11.663-3.039-2.876-1.894-7.729-4.462-9.801-6.789z"/>
+ <linearGradient id="w" x1="129.003" gradientUnits="userSpaceOnUse" x2="195.296" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.34" y2="259.34">
+ <stop stop-color="#DCA400" offset="0"/>
+ <stop stop-color="#C18E00" offset=".415"/>
+ <stop stop-color="#C18E00" offset="1"/>
+ </linearGradient>
+ <path fill="url(#w)" d="m137.403 109.129c1.571 0.634 3.105 1.896 6.026 3.838 4.45 3.494 11.536 4.614 15.913 4.852 10.295 1.348 28.241-8.23 32.943-11.494 3.824-2.811 9.092-7.125 11.134-7.373 1.092 1.367-1.194 1.594-4.394 4.088-3.759 2.565-6.209 4.425-11.566 7.457-5.957 3.118-16.077 8.804-28.454 8.453-6.694-0.844-8.837-1.396-11.813-3.032-2.945-1.916-7.706-4.44-9.789-6.789z"/>
+ <linearGradient id="x" x1="128.954" gradientUnits="userSpaceOnUse" x2="195.255" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.343" y2="259.343">
+ <stop stop-color="#D79F00" offset="0"/>
+ <stop stop-color="#BA8700" offset=".415"/>
+ <stop stop-color="#BA8700" offset="1"/>
+ </linearGradient>
+ <path fill="url(#x)" d="m137.354 109.11c1.521 0.543 3.241 1.932 6.161 3.879 4.428 3.459 11.368 4.613 15.788 4.865 10.427 1.333 28.554-8.364 33.026-11.542 3.892-2.855 9.057-7.073 11.068-7.339 1.052 1.353-1.261 1.569-4.495 4.127-3.74 2.538-6.078 4.334-11.365 7.325-5.91 3.093-16.077 8.805-28.441 8.503-6.716-0.83-9.121-1.443-11.966-3.026-3.012-1.939-7.68-4.42-9.776-6.792z"/>
+ <linearGradient id="y" x1="128.906" gradientUnits="userSpaceOnUse" x2="195.216" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.348" y2="259.348">
+ <stop stop-color="#D39B00" offset="0"/>
+ <stop stop-color="#B27F00" offset=".415"/>
+ <stop stop-color="#B27F00" offset="1"/>
+ </linearGradient>
+ <path fill="url(#y)" d="m137.306 109.091c1.47 0.451 3.375 1.969 6.296 3.919 4.403 3.426 11.2 4.614 15.662 4.879 10.559 1.318 28.865-8.498 33.109-11.59 3.958-2.899 9.021-7.02 11.003-7.306 1.013 1.337-1.328 1.544-4.596 4.167-3.722 2.511-5.949 4.242-11.165 7.192-5.862 3.068-16.077 8.807-28.43 8.553-6.734-0.816-9.405-1.489-12.116-3.019-3.08-1.963-7.656-4.4-9.763-6.795z"/>
+ <linearGradient id="z" x1="128.857" gradientUnits="userSpaceOnUse" x2="195.176" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.35" y2="259.35">
+ <stop stop-color="#CF9600" offset="0"/>
+ <stop stop-color="#a70" offset=".415"/>
+ <stop stop-color="#a70" offset="1"/>
+ </linearGradient>
+ <path fill="url(#z)" d="m137.257 109.073c1.421 0.359 3.511 2.005 6.432 3.959 4.38 3.392 11.032 4.614 15.536 4.892 10.691 1.303 29.179-8.631 33.193-11.638 4.024-2.942 8.984-6.967 10.938-7.274 0.973 1.323-1.396 1.521-4.697 4.206-3.703 2.484-5.818 4.151-10.964 7.06-5.814 3.043-16.077 8.808-28.418 8.603-6.753-0.802-9.689-1.535-12.268-3.012-3.149-1.986-7.632-4.378-9.752-6.796z"/>
+ <linearGradient id="aa" x1="128.809" gradientUnits="userSpaceOnUse" x2="195.137" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.354" y2="259.354">
+ <stop stop-color="#CA9100" offset="0"/>
+ <stop stop-color="#A37000" offset=".415"/>
+ <stop stop-color="#A37000" offset="1"/>
+ </linearGradient>
+ <path fill="url(#aa)" d="m137.209 109.054c1.368 0.268 3.645 2.041 6.565 4 4.356 3.357 10.864 4.613 15.41 4.904 10.824 1.289 29.493-8.764 33.277-11.685 4.092-2.986 8.948-6.914 10.871-7.241 0.935 1.308-1.461 1.496-4.797 4.245-3.685 2.457-5.688 4.06-10.763 6.928-5.768 3.018-16.077 8.809-28.407 8.653-6.771-0.788-9.972-1.582-12.418-3.006-3.216-2.008-7.607-4.357-9.738-6.798z"/>
+ <linearGradient id="ab" x1="128.76" gradientUnits="userSpaceOnUse" x2="195.099" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.356" y2="259.356">
+ <stop stop-color="#C68C00" offset="0"/>
+ <stop stop-color="#9B6800" offset=".415"/>
+ <stop stop-color="#9B6800" offset="1"/>
+ </linearGradient>
+ <path fill="url(#ab)" d="m137.16 109.036c1.318 0.176 3.779 2.077 6.701 4.04 4.333 3.323 10.695 4.613 15.284 4.917 10.957 1.274 29.805-8.898 33.36-11.733 4.158-3.03 8.912-6.86 10.807-7.208 0.894 1.292-1.528 1.471-4.899 4.284-3.666 2.43-5.558 3.968-10.562 6.796-5.72 2.993-16.077 8.81-28.396 8.702-6.791-0.773-10.256-1.628-12.568-2.999-3.285-2.031-7.583-4.336-9.727-6.799z"/>
+ <linearGradient id="ac" x1="128.712" gradientUnits="userSpaceOnUse" x2="195.062" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.358" y2="259.358">
+ <stop stop-color="#C28700" offset="0"/>
+ <stop stop-color="#936000" offset=".415"/>
+ <stop stop-color="#936000" offset="1"/>
+ </linearGradient>
+ <path fill="url(#ac)" d="m137.112 109.017c1.267 0.085 3.912 2.113 6.835 4.081 4.31 3.289 10.527 4.613 15.158 4.93 11.09 1.258 30.118-9.032 33.445-11.782 4.225-3.072 8.877-6.807 10.739-7.174 0.855 1.278-1.595 1.446-5 4.323-3.647 2.404-5.427 3.877-10.36 6.663-5.673 2.969-16.077 8.812-28.384 8.753-6.811-0.759-10.54-1.675-12.719-2.992-3.353-2.055-7.559-4.315-9.714-6.802z"/>
+ <linearGradient id="ad" x1="128.663" gradientUnits="userSpaceOnUse" x2="195.025" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.36" y2="259.36">
+ <stop stop-color="#BD8200" offset="0"/>
+ <stop stop-color="#8C5900" offset=".415"/>
+ <stop stop-color="#8C5900" offset="1"/>
+ </linearGradient>
+ <path fill="url(#ad)" d="m137.063 108.998c1.217-0.006 4.047 2.15 6.97 4.122 4.286 3.254 10.359 4.612 15.032 4.943 11.223 1.243 30.431-9.166 33.53-11.83 4.289-3.116 8.84-6.753 10.673-7.141 0.815 1.263-1.661 1.421-5.101 4.362-3.63 2.377-5.298 3.785-10.161 6.531-5.624 2.944-16.075 8.813-28.37 8.802-6.83-0.744-10.824-1.721-12.87-2.985-3.422-2.077-7.535-4.294-9.703-6.804z"/>
+ <linearGradient id="ae" x1="128.615" gradientUnits="userSpaceOnUse" x2="194.989" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.362" y2="259.362">
+ <stop stop-color="#B97D00" offset="0"/>
+ <stop stop-color="#845100" offset=".415"/>
+ <stop stop-color="#845100" offset="1"/>
+ </linearGradient>
+ <path fill="url(#ae)" d="m137.015 108.98c1.166-0.098 4.181 2.185 7.104 4.162 4.262 3.22 10.19 4.612 14.906 4.955 11.354 1.229 30.743-9.299 33.613-11.877 4.356-3.16 8.804-6.7 10.607-7.108 0.776 1.248-1.728 1.397-5.202 4.401-3.61 2.35-5.167 3.694-9.96 6.399-5.576 2.919-16.076 8.814-28.358 8.852-6.85-0.73-11.108-1.768-13.021-2.979-3.489-2.1-7.51-4.273-9.689-6.805z"/>
+ <linearGradient id="af" x1="128.567" gradientUnits="userSpaceOnUse" x2="194.954" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.364" y2="259.364">
+ <stop stop-color="#B57800" offset="0"/>
+ <stop stop-color="#7C4900" offset=".415"/>
+ <stop stop-color="#7C4900" offset="1"/>
+ </linearGradient>
+ <path fill="url(#af)" d="m136.967 108.961c1.115-0.189 4.315 2.222 7.239 4.203 4.239 3.186 10.021 4.612 14.78 4.968 11.488 1.214 31.057-9.433 33.697-11.925 4.424-3.203 8.768-6.647 10.542-7.075 0.736 1.233-1.795 1.372-5.303 4.44-3.593 2.323-5.038 3.603-9.759 6.266-5.529 2.895-16.077 8.816-28.348 8.903-6.868-0.716-11.392-1.815-13.172-2.972-3.557-2.124-7.485-4.252-9.676-6.808z"/>
+ <linearGradient id="ah" x1="128.518" gradientUnits="userSpaceOnUse" x2="194.918" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.366" y2="259.366">
+ <stop stop-color="#B07300" offset="0"/>
+ <stop stop-color="#754200" offset=".415"/>
+ <stop stop-color="#754200" offset="1"/>
+ </linearGradient>
+ <path fill="url(#ah)" d="m136.918 108.943c1.064-0.281 4.45 2.257 7.374 4.243 4.216 3.151 9.854 4.611 14.654 4.981 11.621 1.199 31.37-9.567 33.781-11.973 4.49-3.247 8.731-6.594 10.476-7.042 0.698 1.218-1.861 1.347-5.403 4.479-3.573 2.296-4.906 3.511-9.558 6.134-5.48 2.87-16.076 8.817-28.336 8.952-6.887-0.701-11.675-1.861-13.323-2.965-3.626-2.146-7.462-4.231-9.665-6.809z"/>
+ <linearGradient id="ai" x1="128.47" gradientUnits="userSpaceOnUse" x2="194.886" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.367" y2="259.367">
+ <stop stop-color="#AC6E00" offset="0"/>
+ <stop stop-color="#6D3A00" offset=".415"/>
+ <stop stop-color="#6D3A00" offset="1"/>
+ </linearGradient>
+ <path fill="url(#ai)" d="m136.87 108.924c1.013-0.372 4.584 2.294 7.509 4.284 4.191 3.117 9.685 4.611 14.528 4.994 11.753 1.184 31.682-9.701 33.864-12.021 4.557-3.291 8.695-6.542 10.411-7.009 0.657 1.203-1.929 1.322-5.504 4.518-3.557 2.269-4.777 3.42-9.358 6.002-5.434 2.845-16.076 8.818-28.324 9.002-6.907-0.687-11.959-1.908-13.474-2.959-3.694-2.169-7.437-4.21-9.652-6.811z"/>
+ <linearGradient id="aj" x1="128.421" gradientUnits="userSpaceOnUse" x2="194.85" gradientTransform="matrix(1,0,0,-1,8.3999,368.3)" y1="259.369" y2="259.369">
+ <stop stop-color="#A86A00" offset="0"/>
+ <stop stop-color="#663200" offset=".415"/>
+ <stop stop-color="#663200" offset="1"/>
+ </linearGradient>
+ <path fill="url(#aj)" d="m136.821 108.905c0.963-0.464 4.719 2.33 7.644 4.324 4.168 3.083 9.517 4.611 14.402 5.007 11.886 1.169 31.995-9.834 33.948-12.069 4.624-3.334 8.66-6.487 10.345-6.976 0.619 1.188-1.995 1.298-5.604 4.558-3.537 2.242-4.647 3.328-9.157 5.869-5.386 2.82-16.076 8.82-28.313 9.052-6.926-0.673-12.243-1.954-13.625-2.952-3.762-2.192-7.413-4.189-9.64-6.813z"/>
+ </g>
+ </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/add.gif b/tests/phpunit/data/resourceloader/add.gif
new file mode 100644
index 00000000..5f454ca1
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/add.gif
Binary files differ
diff --git a/tests/phpunit/data/resourceloader/bold-a.svg b/tests/phpunit/data/resourceloader/bold-a.svg
new file mode 100644
index 00000000..4b828779
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/bold-a.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-a">
+ <path d="M16 18h3l-5-12h-3l-5 12h3l1.25-3h4.5l1.25 3zm-4.917-5l1.417-3.4 1.417 3.4h-2.834z"/>
+ </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/bold-b.svg b/tests/phpunit/data/resourceloader/bold-b.svg
new file mode 100644
index 00000000..4f648203
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/bold-b.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-b">
+ <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.011-1.975-1.989-3 2-.975 1.989-1.935 1.989-3 0-2-2-3-4-3h-6v12zm7-8c0 1.001 0 1-2 1h-2v-3h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
+ </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/bold-f.svg b/tests/phpunit/data/resourceloader/bold-f.svg
new file mode 100644
index 00000000..357d2e5d
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/bold-f.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-f">
+ <path id="f" d="M16 8v-2h-8v12h3v-5h4v-2h-4v-3z"/>
+ </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/help-ltr.svg b/tests/phpunit/data/resourceloader/help-ltr.svg
new file mode 100644
index 00000000..bb2545c5
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/help-ltr.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="help">
+ <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
+ <g id="question-mark">
+ <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+ <path id="bottom" d="M11 16h2v2h-2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/help-rtl.svg b/tests/phpunit/data/resourceloader/help-rtl.svg
new file mode 100644
index 00000000..255ae95b
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/help-rtl.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="help">
+ <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
+ <g id="question-mark" transform="translate(24, 0) scale(-1, 1)">
+ <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+ <path id="bottom" d="M11 16h2v2h-2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/next.svg b/tests/phpunit/data/resourceloader/next.svg
new file mode 100644
index 00000000..02b4e387
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/next.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16.5 13.1l-8.9 8.9c-.8-.8-.8-2 0-2.8l6.1-6.1-6-6.1c-.8-.8-.8-2 0-2.8l8.8 8.9z" id="path108"/>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/next_massage.svg b/tests/phpunit/data/resourceloader/next_massage.svg
new file mode 100644
index 00000000..bbd1a8d6
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/next_massage.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M 16.5 13.1 l -8.9 8.9 c -0.8 -0.8 -0.8 -2 0 -2.8 l 6.1 -6.1 -6 -6.1 c -0.8 -0.8 -0.8 -2 0 -2.8 l 8.8 8.9 z" id="path108"/>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/prev.svg b/tests/phpunit/data/resourceloader/prev.svg
new file mode 100644
index 00000000..f31ec095
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/prev.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 13.1l8.9 8.9c.8-.8.8-2 0-2.8l-6.1-6.1 6-6.1c.8-.8.8-2 0-2.8l-8.8 8.9z"/>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/remove.svg b/tests/phpunit/data/resourceloader/remove.svg
new file mode 100644
index 00000000..6ad79174
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/remove.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="remove">
+ <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+ </g>
+</svg>
diff --git a/tests/phpunit/data/resourceloader/remove_variantize.svg b/tests/phpunit/data/resourceloader/remove_variantize.svg
new file mode 100644
index 00000000..bcbe8712
--- /dev/null
+++ b/tests/phpunit/data/resourceloader/remove_variantize.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="red">
+ <g xmlns:default="http://www.w3.org/2000/svg" id="remove">
+ <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+ </g>
+</g></svg>
diff --git a/tests/phpunit/data/templates/foobar.mustache b/tests/phpunit/data/templates/foobar.mustache
new file mode 100644
index 00000000..a0423896
--- /dev/null
+++ b/tests/phpunit/data/templates/foobar.mustache
@@ -0,0 +1 @@
+hello world!
diff --git a/tests/phpunit/data/templates/foobar_args.mustache b/tests/phpunit/data/templates/foobar_args.mustache
new file mode 100644
index 00000000..cfbe3d0f
--- /dev/null
+++ b/tests/phpunit/data/templates/foobar_args.mustache
@@ -0,0 +1 @@
+hello {{planet}}!
diff --git a/tests/phpunit/includes/BlockTest.php b/tests/phpunit/includes/BlockTest.php
index b248d24e..19741621 100644
--- a/tests/phpunit/includes/BlockTest.php
+++ b/tests/phpunit/includes/BlockTest.php
@@ -133,6 +133,7 @@ class BlockTest extends MediaWikiLangTestCase {
$username = 'BlockedUserToCreateAccountWith';
$u = User::newFromName( $username );
$u->setPassword( 'NotRandomPass' );
+ $u->setId( 14146 );
$u->addToDatabase();
unset( $u );
@@ -200,6 +201,12 @@ class BlockTest extends MediaWikiLangTestCase {
$oldBlock->delete();
}
+ // Local perspective (blockee on current wiki)...
+ $user = User::newFromName( 'UserOnForeignWiki' );
+ $user->addToDatabase();
+ // Set user ID to match the test value
+ $this->db->update( 'user', array( 'user_id' => 14146 ), array( 'user_id' => $user->getId() ) );
+
// Foreign perspective (blockee not on current wiki)...
$block = new Block(
/* $address */ 'UserOnForeignWiki',
@@ -221,11 +228,6 @@ class BlockTest extends MediaWikiLangTestCase {
$res = $block->insert( $this->db );
$this->assertTrue( (bool)$res['id'], 'Block succeeded' );
- // Local perspective (blockee on current wiki)...
- $user = User::newFromName( 'UserOnForeignWiki' );
- $user->addToDatabase();
- // Set user ID to match the test value
- $this->db->update( 'user', array( 'user_id' => 14146 ), array( 'user_id' => $user->getId() ) );
$user = null; // clear
$block = Block::newFromID( $res['id'] );
diff --git a/tests/phpunit/includes/EditPageTest.php b/tests/phpunit/includes/EditPageTest.php
index 702fce4c..15778e40 100644
--- a/tests/phpunit/includes/EditPageTest.php
+++ b/tests/phpunit/includes/EditPageTest.php
@@ -217,7 +217,8 @@ class EditPageTest extends MediaWikiLangTestCase {
EditPage::AS_SUCCESS_NEW_ARTICLE,
''
),
- array( 'expected registered MediaWiki: page whose default content is empty not being created if empty',
+ array( 'expected registered MediaWiki: page whose default content is empty'
+ . ' not being created if empty',
'MediaWiki:Ipb-default-expiry',
'UTSysop',
'',
@@ -246,7 +247,9 @@ class EditPageTest extends MediaWikiLangTestCase {
* @dataProvider provideCreatePages
* @covers EditPage
*/
- public function testCreatePage( $desc, $pageTitle, $user, $editText, $expectedCode, $expectedText, $ignoreBlank = false ) {
+ public function testCreatePage(
+ $desc, $pageTitle, $user, $editText, $expectedCode, $expectedText, $ignoreBlank = false
+ ) {
$edit = array( 'wpTextbox1' => $editText );
if ( $ignoreBlank ) {
$edit['wpIgnoreBlankArticle'] = 1;
diff --git a/tests/phpunit/includes/GitInfoTest.php b/tests/phpunit/includes/GitInfoTest.php
index e22f5050..c3539d0e 100644
--- a/tests/phpunit/includes/GitInfoTest.php
+++ b/tests/phpunit/includes/GitInfoTest.php
@@ -10,7 +10,7 @@ class GitInfoTest extends MediaWikiTestCase {
}
public function testValidJsonData() {
- $dir = $GLOBALS['IP'] . '/testValidJsonData';
+ $dir = $GLOBALS['IP'] . DIRECTORY_SEPARATOR . 'testValidJsonData';
$fixture = new GitInfo( $dir );
$this->assertTrue( $fixture->cacheIsComplete() );
diff --git a/tests/phpunit/includes/GlobalFunctions/GlobalTest.php b/tests/phpunit/includes/GlobalFunctions/GlobalTest.php
index 3acc48e2..1e30273e 100644
--- a/tests/phpunit/includes/GlobalFunctions/GlobalTest.php
+++ b/tests/phpunit/includes/GlobalFunctions/GlobalTest.php
@@ -7,7 +7,7 @@ class GlobalTest extends MediaWikiTestCase {
protected function setUp() {
parent::setUp();
- $readOnlyFile = tempnam( wfTempDir(), "mwtest_readonly" );
+ $readOnlyFile = $this->getNewTempFile();
unlink( $readOnlyFile );
$this->setMwGlobals( array(
@@ -22,16 +22,6 @@ class GlobalTest extends MediaWikiTestCase {
) );
}
- protected function tearDown() {
- global $wgReadOnlyFile;
-
- if ( file_exists( $wgReadOnlyFile ) ) {
- unlink( $wgReadOnlyFile );
- }
-
- parent::tearDown();
- }
-
/**
* @dataProvider provideForWfArrayDiff2
* @covers ::wfArrayDiff2
@@ -312,46 +302,42 @@ class GlobalTest extends MediaWikiTestCase {
* @covers ::wfDebugMem
*/
public function testDebugFunctionTest() {
+ $debugLogFile = $this->getNewTempFile();
- global $wgDebugLogFile, $wgDebugTimestamps;
-
- $old_log_file = $wgDebugLogFile;
- $wgDebugLogFile = tempnam( wfTempDir(), 'mw-' );
- # @todo FIXME: $wgDebugTimestamps should be tested
- $old_wgDebugTimestamps = $wgDebugTimestamps;
- $wgDebugTimestamps = false;
+ $this->setMwGlobals( array(
+ 'wgDebugLogFile' => $debugLogFile,
+ # @todo FIXME: $wgDebugTimestamps should be tested
+ 'wgDebugTimestamps' => false
+ ) );
wfDebug( "This is a normal string" );
- $this->assertEquals( "This is a normal string", file_get_contents( $wgDebugLogFile ) );
- unlink( $wgDebugLogFile );
+ $this->assertEquals( "This is a normal string\n", file_get_contents( $debugLogFile ) );
+ unlink( $debugLogFile );
wfDebug( "This is nöt an ASCII string" );
- $this->assertEquals( "This is nöt an ASCII string", file_get_contents( $wgDebugLogFile ) );
- unlink( $wgDebugLogFile );
+ $this->assertEquals( "This is nöt an ASCII string\n", file_get_contents( $debugLogFile ) );
+ unlink( $debugLogFile );
wfDebug( "\00305This has böth UTF and control chars\003" );
$this->assertEquals(
- " 05This has böth UTF and control chars ",
- file_get_contents( $wgDebugLogFile )
+ " 05This has böth UTF and control chars \n",
+ file_get_contents( $debugLogFile )
);
- unlink( $wgDebugLogFile );
+ unlink( $debugLogFile );
wfDebugMem();
$this->assertGreaterThan(
1000,
- preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) )
+ preg_replace( '/\D/', '', file_get_contents( $debugLogFile ) )
);
- unlink( $wgDebugLogFile );
+ unlink( $debugLogFile );
wfDebugMem( true );
$this->assertGreaterThan(
1000000,
- preg_replace( '/\D/', '', file_get_contents( $wgDebugLogFile ) )
+ preg_replace( '/\D/', '', file_get_contents( $debugLogFile ) )
);
- unlink( $wgDebugLogFile );
-
- $wgDebugLogFile = $old_log_file;
- $wgDebugTimestamps = $old_wgDebugTimestamps;
+ unlink( $debugLogFile );
}
/**
@@ -389,24 +375,6 @@ class GlobalTest extends MediaWikiTestCase {
}
/**
- * @covers ::swap
- */
- public function testSwapVarsTest() {
- $this->hideDeprecated( 'swap' );
-
- $var1 = 1;
- $var2 = 2;
-
- $this->assertEquals( $var1, 1, 'var1 is set originally' );
- $this->assertEquals( $var2, 2, 'var1 is set originally' );
-
- swap( $var1, $var2 );
-
- $this->assertEquals( $var1, 2, 'var1 is swapped' );
- $this->assertEquals( $var2, 1, 'var2 is swapped' );
- }
-
- /**
* @covers ::wfPercent
*/
public function testWfPercentTest() {
@@ -705,21 +673,21 @@ class GlobalTest extends MediaWikiTestCase {
}
/**
- * @dataProvider provideWfShellMaintenanceCmdList
- * @covers ::wfShellMaintenanceCmd
+ * @dataProvider provideWfShellWikiCmdList
+ * @covers ::wfShellWikiCmd
*/
- public function testWfShellMaintenanceCmd( $script, $parameters, $options,
+ public function testWfShellWikiCmd( $script, $parameters, $options,
$expected, $description
) {
if ( wfIsWindows() ) {
// Approximation that's good enough for our purposes just now
$expected = str_replace( "'", '"', $expected );
}
- $actual = wfShellMaintenanceCmd( $script, $parameters, $options );
+ $actual = wfShellWikiCmd( $script, $parameters, $options );
$this->assertEquals( $expected, $actual, $description );
}
- public static function provideWfShellMaintenanceCmdList() {
+ public static function provideWfShellWikiCmdList() {
global $wgPhpCli;
return array(
diff --git a/tests/phpunit/includes/GlobalFunctions/wfAppendQueryTest.php b/tests/phpunit/includes/GlobalFunctions/wfAppendQueryTest.php
new file mode 100644
index 00000000..54e1f896
--- /dev/null
+++ b/tests/phpunit/includes/GlobalFunctions/wfAppendQueryTest.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @group GlobalFunctions
+ * @covers ::wfAppendQuery
+ */
+class WfAppendQueryTest extends MediaWikiTestCase {
+ /**
+ * @dataProvider provideAppendQuery
+ */
+ public function testAppendQuery( $url, $query, $expected, $message = null ) {
+ $this->assertEquals( $expected, wfAppendQuery( $url, $query ), $message );
+ }
+
+ public static function provideAppendQuery() {
+ return array(
+ array(
+ 'http://www.example.org/index.php',
+ '',
+ 'http://www.example.org/index.php',
+ 'No query'
+ ),
+ array(
+ 'http://www.example.org/index.php',
+ array( 'foo' => 'bar' ),
+ 'http://www.example.org/index.php?foo=bar',
+ 'Set query array'
+ ),
+ array(
+ 'http://www.example.org/index.php?foz=baz',
+ 'foo=bar',
+ 'http://www.example.org/index.php?foz=baz&foo=bar',
+ 'Set query string'
+ ),
+ array(
+ 'http://www.example.org/index.php?foo=bar',
+ '',
+ 'http://www.example.org/index.php?foo=bar',
+ 'Empty string with query'
+ ),
+ array(
+ 'http://www.example.org/index.php?foo=bar',
+ array( 'baz' => 'quux' ),
+ 'http://www.example.org/index.php?foo=bar&baz=quux',
+ 'Add query array'
+ ),
+ array(
+ 'http://www.example.org/index.php?foo=bar',
+ 'baz=quux',
+ 'http://www.example.org/index.php?foo=bar&baz=quux',
+ 'Add query string'
+ ),
+ array(
+ 'http://www.example.org/index.php?foo=bar',
+ array( 'baz' => 'quux', 'foo' => 'baz' ),
+ 'http://www.example.org/index.php?foo=bar&baz=quux&foo=baz',
+ 'Modify query array'
+ ),
+ array(
+ 'http://www.example.org/index.php?foo=bar',
+ 'baz=quux&foo=baz',
+ 'http://www.example.org/index.php?foo=bar&baz=quux&foo=baz',
+ 'Modify query string'
+ )
+ );
+ }
+}
diff --git a/tests/phpunit/includes/GlobalFunctions/wfEscapeShellArgTest.php b/tests/phpunit/includes/GlobalFunctions/wfEscapeShellArgTest.php
new file mode 100644
index 00000000..cb334d2f
--- /dev/null
+++ b/tests/phpunit/includes/GlobalFunctions/wfEscapeShellArgTest.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @group GlobalFunctions
+ * @covers ::wfEscapeShellArg
+ */
+class wfEscapeShellArgTest extends MediaWikiTestCase {
+ public function testSingleInput() {
+ if ( wfIsWindows() ) {
+ $expected = '"blah"';
+ } else {
+ $expected = "'blah'";
+ }
+
+ $actual = wfEscapeShellArg( 'blah' );
+
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public function testMultipleArgs() {
+ if ( wfIsWindows() ) {
+ $expected = '"foo" "bar" "baz"';
+ } else {
+ $expected = "'foo' 'bar' 'baz'";
+ }
+
+ $actual = wfEscapeShellArg( 'foo', 'bar', 'baz' );
+
+ $this->assertEquals( $expected, $actual );
+ }
+
+ public function testMultipleArgsAsArray() {
+ if ( wfIsWindows() ) {
+ $expected = '"foo" "bar" "baz"';
+ } else {
+ $expected = "'foo' 'bar' 'baz'";
+ }
+
+ $actual = wfEscapeShellArg( array( 'foo', 'bar', 'baz' ) );
+
+ $this->assertEquals( $expected, $actual );
+ }
+}
diff --git a/tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php b/tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
new file mode 100644
index 00000000..448250a6
--- /dev/null
+++ b/tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
@@ -0,0 +1,104 @@
+<?php
+
+/**
+ * @group GlobalFunctions
+ * @covers ::wfThumbIsStandard
+ */
+class WfThumbIsStandardTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( array(
+ 'wgThumbLimits' => array(
+ 100,
+ 401
+ ),
+ 'wgImageLimits' => array(
+ array( 300, 225 ),
+ array( 800, 600 ),
+ ),
+ 'wgMediaHandlers' => array(
+ 'unknown/unknown' => 'MockBitmapHandler',
+ ),
+ ) );
+ }
+
+ public static function provideThumbParams() {
+ return array(
+ // Thumb limits
+ array(
+ 'Standard thumb width',
+ true,
+ array( 'width' => 100 ),
+ ),
+ array(
+ 'Standard thumb width',
+ true,
+ array( 'width' => 401 ),
+ ),
+ // wfThumbIsStandard should match Linker::processResponsiveImages
+ // in its rounding behaviour.
+ array(
+ 'Standard thumb width (HiDPI 1.5x) - incorrect rounding',
+ false,
+ array( 'width' => 601 ),
+ ),
+ array(
+ 'Standard thumb width (HiDPI 1.5x)',
+ true,
+ array( 'width' => 602 ),
+ ),
+ array(
+ 'Standard thumb width (HiDPI 2x)',
+ true,
+ array( 'width' => 802 ),
+ ),
+ array(
+ 'Non-standard thumb width',
+ false,
+ array( 'width' => 300 ),
+ ),
+ // Image limits
+ // Note: Image limits are measured as pairs. Individual values
+ // may be non-standard based on the aspect ratio.
+ array(
+ 'Standard image width/height pair',
+ true,
+ array( 'width' => 250, 'height' => 225 ),
+ ),
+ array(
+ 'Standard image width/height pair',
+ true,
+ array( 'width' => 667, 'height' => 600 ),
+ ),
+ array(
+ 'Standard image width where image does not fit aspect ratio',
+ false,
+ array( 'width' => 300 ),
+ ),
+ array(
+ 'Implicit width from image width/height pair aspect ratio fit',
+ true,
+ // 2000x1800 fit inside 300x225 makes w=250
+ array( 'width' => 250 ),
+ ),
+ array(
+ 'Height-only is always non-standard',
+ false,
+ array( 'height' => 225 ),
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider provideThumbParams
+ */
+ public function testIsStandard( $message, $expected, $params ) {
+ $this->assertSame(
+ $expected,
+ wfThumbIsStandard( new FakeDimensionFile( array( 2000, 1800 ) ), $params ),
+ $message
+ );
+ }
+}
diff --git a/tests/phpunit/includes/HtmlFormatterTest.php b/tests/phpunit/includes/HtmlFormatterTest.php
index 9dbfa452..1c3e8539 100644
--- a/tests/phpunit/includes/HtmlFormatterTest.php
+++ b/tests/phpunit/includes/HtmlFormatterTest.php
@@ -4,6 +4,20 @@
* @group HtmlFormatter
*/
class HtmlFormatterTest extends MediaWikiTestCase {
+
+ /**
+ * Use TidySupport to check whether we should use $wgTidyInternal.
+ *
+ * The Tidy extension in HHVM does not support error text return, so it is
+ * nominally usable, but does not pass tests which require error text from
+ * Tidy.
+ */
+ protected function setUp() {
+ parent::setUp();
+ $tidySupport = new TidySupport();
+ $this->setMwGlobals( 'wgTidyInternal', $tidySupport->isInternal() );
+ }
+
/**
* @dataProvider getHtmlData
*
diff --git a/tests/phpunit/includes/HtmlTest.php b/tests/phpunit/includes/HtmlTest.php
index a8829cd8..c5797c4f 100644
--- a/tests/phpunit/includes/HtmlTest.php
+++ b/tests/phpunit/includes/HtmlTest.php
@@ -637,7 +637,7 @@ class HtmlTest extends MediaWikiTestCase {
. 'Depending on compatibility mode IE might use "button", instead.',
);
- # <select> specifc handling
+ # <select> specific handling
$cases[] = array( '<select multiple></select>',
'select', array( 'size' => '4', 'multiple' => true ),
);
@@ -715,7 +715,7 @@ class HtmlTest extends MediaWikiTestCase {
'Input wrapper with type and value.'
);
$this->assertEquals(
- '<input name=testname class=mw-ui-input>',
+ '<input name=testname>',
Html::input( 'testname' ),
'Input wrapper with all default values.'
);
@@ -764,6 +764,30 @@ class HtmlTest extends MediaWikiTestCase {
'Label wrapper'
);
}
+
+ public static function provideSrcSetImages() {
+ return array(
+ array( array(), '', 'when there are no images, return empty string' ),
+ array(
+ array( '1x' => '1x.png', '1.5x' => '1_5x.png', '2x' => '2x.png' ),
+ '1x.png 1x, 1_5x.png 1.5x, 2x.png 2x',
+ 'pixel depth keys may include a trailing "x"'
+ ),
+ array(
+ array( '1' => '1x.png', '1.5' => '1_5x.png', '2' => '2x.png' ),
+ '1x.png 1x, 1_5x.png 1.5x, 2x.png 2x',
+ 'pixel depth keys may omit a trailing "x"'
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider provideSrcSetImages
+ * @covers Html::srcSet
+ */
+ public function testSrcSet( $images, $expected, $message ) {
+ $this->assertEquals( Html::srcSet( $images ), $expected, $message );
+ }
}
class HtmlTestValue {
diff --git a/tests/phpunit/includes/HttpTest.php b/tests/phpunit/includes/HttpTest.php
index 9b53381e..8a0dff78 100644
--- a/tests/phpunit/includes/HttpTest.php
+++ b/tests/phpunit/includes/HttpTest.php
@@ -1,6 +1,7 @@
<?php
+
/**
- * @group Broken
+ * @group Http
*/
class HttpTest extends MediaWikiTestCase {
/**
@@ -92,8 +93,10 @@ class HttpTest extends MediaWikiTestCase {
array( true, 'http://user:pass@host', 'Username and password provided' ),
# (\S+) - host part is made of anything not whitespaces
- array( false, 'http://!"èèè¿¿¿~~\'', 'hostname is made of any non whitespace' ),
- array( false, 'http://exam:ple.org/', 'hostname can not use colons!' ),
+ // commented these out in order to remove @group Broken
+ // @todo are these valid tests? if so, fix Http::isValidURI so it can handle them
+ //array( false, 'http://!"èèè¿¿¿~~\'', 'hostname is made of any non whitespace' ),
+ //array( false, 'http://exam:ple.org/', 'hostname can not use colons!' ),
# (:[0-9]+)? - port number
array( true, 'http://example.org:80/' ),
@@ -135,7 +138,7 @@ class HttpTest extends MediaWikiTestCase {
* HTTP redirects).
*/
public function testRelativeRedirections() {
- $h = MWHttpRequestTester::factory( 'http://oldsite/file.ext' );
+ $h = MWHttpRequestTester::factory( 'http://oldsite/file.ext', array(), __METHOD__ );
# Forge a Location header
$h->setRespHeaders( 'location', array(
@@ -171,6 +174,310 @@ class HttpTest extends MediaWikiTestCase {
$h->getFinalUrl( "Relative file path Location: should keep the latest host and scheme!" )
);
}
+
+ /**
+ * Constant values are from PHP 5.3.28 using cURL 7.24.0
+ * @see http://php.net/manual/en/curl.constants.php
+ *
+ * All constant values are present so that developers don’t need to remember
+ * to add them if added at a later date. The commented out constants were
+ * not found anywhere in the MediaWiki core code.
+ *
+ * Commented out constants that were not available in:
+ * HipHop VM 3.3.0 (rel)
+ * Compiler: heads/master-0-g08810d920dfff59e0774cf2d651f92f13a637175
+ * Repo schema: 3214fc2c684a4520485f715ee45f33f2182324b1
+ * Extension API: 20140829
+ *
+ * Commented out constants that were removed in PHP 5.6.0
+ *
+ * @covers CurlHttpRequest::execute
+ */
+ public function provideCurlConstants() {
+ return array(
+ array( 'CURLAUTH_ANY' ),
+ array( 'CURLAUTH_ANYSAFE' ),
+ array( 'CURLAUTH_BASIC' ),
+ array( 'CURLAUTH_DIGEST' ),
+ array( 'CURLAUTH_GSSNEGOTIATE' ),
+ array( 'CURLAUTH_NTLM' ),
+ // array( 'CURLCLOSEPOLICY_CALLBACK' ), // removed in PHP 5.6.0
+ // array( 'CURLCLOSEPOLICY_LEAST_RECENTLY_USED' ), // removed in PHP 5.6.0
+ // array( 'CURLCLOSEPOLICY_LEAST_TRAFFIC' ), // removed in PHP 5.6.0
+ // array( 'CURLCLOSEPOLICY_OLDEST' ), // removed in PHP 5.6.0
+ // array( 'CURLCLOSEPOLICY_SLOWEST' ), // removed in PHP 5.6.0
+ array( 'CURLE_ABORTED_BY_CALLBACK' ),
+ array( 'CURLE_BAD_CALLING_ORDER' ),
+ array( 'CURLE_BAD_CONTENT_ENCODING' ),
+ array( 'CURLE_BAD_FUNCTION_ARGUMENT' ),
+ array( 'CURLE_BAD_PASSWORD_ENTERED' ),
+ array( 'CURLE_COULDNT_CONNECT' ),
+ array( 'CURLE_COULDNT_RESOLVE_HOST' ),
+ array( 'CURLE_COULDNT_RESOLVE_PROXY' ),
+ array( 'CURLE_FAILED_INIT' ),
+ array( 'CURLE_FILESIZE_EXCEEDED' ),
+ array( 'CURLE_FILE_COULDNT_READ_FILE' ),
+ array( 'CURLE_FTP_ACCESS_DENIED' ),
+ array( 'CURLE_FTP_BAD_DOWNLOAD_RESUME' ),
+ array( 'CURLE_FTP_CANT_GET_HOST' ),
+ array( 'CURLE_FTP_CANT_RECONNECT' ),
+ array( 'CURLE_FTP_COULDNT_GET_SIZE' ),
+ array( 'CURLE_FTP_COULDNT_RETR_FILE' ),
+ array( 'CURLE_FTP_COULDNT_SET_ASCII' ),
+ array( 'CURLE_FTP_COULDNT_SET_BINARY' ),
+ array( 'CURLE_FTP_COULDNT_STOR_FILE' ),
+ array( 'CURLE_FTP_COULDNT_USE_REST' ),
+ array( 'CURLE_FTP_PORT_FAILED' ),
+ array( 'CURLE_FTP_QUOTE_ERROR' ),
+ array( 'CURLE_FTP_SSL_FAILED' ),
+ array( 'CURLE_FTP_USER_PASSWORD_INCORRECT' ),
+ array( 'CURLE_FTP_WEIRD_227_FORMAT' ),
+ array( 'CURLE_FTP_WEIRD_PASS_REPLY' ),
+ array( 'CURLE_FTP_WEIRD_PASV_REPLY' ),
+ array( 'CURLE_FTP_WEIRD_SERVER_REPLY' ),
+ array( 'CURLE_FTP_WEIRD_USER_REPLY' ),
+ array( 'CURLE_FTP_WRITE_ERROR' ),
+ array( 'CURLE_FUNCTION_NOT_FOUND' ),
+ array( 'CURLE_GOT_NOTHING' ),
+ array( 'CURLE_HTTP_NOT_FOUND' ),
+ array( 'CURLE_HTTP_PORT_FAILED' ),
+ array( 'CURLE_HTTP_POST_ERROR' ),
+ array( 'CURLE_HTTP_RANGE_ERROR' ),
+ array( 'CURLE_LDAP_CANNOT_BIND' ),
+ array( 'CURLE_LDAP_INVALID_URL' ),
+ array( 'CURLE_LDAP_SEARCH_FAILED' ),
+ array( 'CURLE_LIBRARY_NOT_FOUND' ),
+ array( 'CURLE_MALFORMAT_USER' ),
+ array( 'CURLE_OBSOLETE' ),
+ array( 'CURLE_OK' ),
+ array( 'CURLE_OPERATION_TIMEOUTED' ),
+ array( 'CURLE_OUT_OF_MEMORY' ),
+ array( 'CURLE_PARTIAL_FILE' ),
+ array( 'CURLE_READ_ERROR' ),
+ array( 'CURLE_RECV_ERROR' ),
+ array( 'CURLE_SEND_ERROR' ),
+ array( 'CURLE_SHARE_IN_USE' ),
+ // array( 'CURLE_SSH' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLE_SSL_CACERT' ),
+ array( 'CURLE_SSL_CERTPROBLEM' ),
+ array( 'CURLE_SSL_CIPHER' ),
+ array( 'CURLE_SSL_CONNECT_ERROR' ),
+ array( 'CURLE_SSL_ENGINE_NOTFOUND' ),
+ array( 'CURLE_SSL_ENGINE_SETFAILED' ),
+ array( 'CURLE_SSL_PEER_CERTIFICATE' ),
+ array( 'CURLE_TELNET_OPTION_SYNTAX' ),
+ array( 'CURLE_TOO_MANY_REDIRECTS' ),
+ array( 'CURLE_UNKNOWN_TELNET_OPTION' ),
+ array( 'CURLE_UNSUPPORTED_PROTOCOL' ),
+ array( 'CURLE_URL_MALFORMAT' ),
+ array( 'CURLE_URL_MALFORMAT_USER' ),
+ array( 'CURLE_WRITE_ERROR' ),
+ array( 'CURLFTPAUTH_DEFAULT' ),
+ array( 'CURLFTPAUTH_SSL' ),
+ array( 'CURLFTPAUTH_TLS' ),
+ // array( 'CURLFTPMETHOD_MULTICWD' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLFTPMETHOD_NOCWD' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLFTPMETHOD_SINGLECWD' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLFTPSSL_ALL' ),
+ array( 'CURLFTPSSL_CONTROL' ),
+ array( 'CURLFTPSSL_NONE' ),
+ array( 'CURLFTPSSL_TRY' ),
+ // array( 'CURLINFO_CERTINFO' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLINFO_CONNECT_TIME' ),
+ array( 'CURLINFO_CONTENT_LENGTH_DOWNLOAD' ),
+ array( 'CURLINFO_CONTENT_LENGTH_UPLOAD' ),
+ array( 'CURLINFO_CONTENT_TYPE' ),
+ array( 'CURLINFO_EFFECTIVE_URL' ),
+ array( 'CURLINFO_FILETIME' ),
+ array( 'CURLINFO_HEADER_OUT' ),
+ array( 'CURLINFO_HEADER_SIZE' ),
+ array( 'CURLINFO_HTTP_CODE' ),
+ array( 'CURLINFO_NAMELOOKUP_TIME' ),
+ array( 'CURLINFO_PRETRANSFER_TIME' ),
+ array( 'CURLINFO_PRIVATE' ),
+ array( 'CURLINFO_REDIRECT_COUNT' ),
+ array( 'CURLINFO_REDIRECT_TIME' ),
+ // array( 'CURLINFO_REDIRECT_URL' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLINFO_REQUEST_SIZE' ),
+ array( 'CURLINFO_SIZE_DOWNLOAD' ),
+ array( 'CURLINFO_SIZE_UPLOAD' ),
+ array( 'CURLINFO_SPEED_DOWNLOAD' ),
+ array( 'CURLINFO_SPEED_UPLOAD' ),
+ array( 'CURLINFO_SSL_VERIFYRESULT' ),
+ array( 'CURLINFO_STARTTRANSFER_TIME' ),
+ array( 'CURLINFO_TOTAL_TIME' ),
+ array( 'CURLMSG_DONE' ),
+ array( 'CURLM_BAD_EASY_HANDLE' ),
+ array( 'CURLM_BAD_HANDLE' ),
+ array( 'CURLM_CALL_MULTI_PERFORM' ),
+ array( 'CURLM_INTERNAL_ERROR' ),
+ array( 'CURLM_OK' ),
+ array( 'CURLM_OUT_OF_MEMORY' ),
+ array( 'CURLOPT_AUTOREFERER' ),
+ array( 'CURLOPT_BINARYTRANSFER' ),
+ array( 'CURLOPT_BUFFERSIZE' ),
+ array( 'CURLOPT_CAINFO' ),
+ array( 'CURLOPT_CAPATH' ),
+ // array( 'CURLOPT_CERTINFO' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLOPT_CLOSEPOLICY' ), // removed in PHP 5.6.0
+ array( 'CURLOPT_CONNECTTIMEOUT' ),
+ array( 'CURLOPT_CONNECTTIMEOUT_MS' ),
+ array( 'CURLOPT_COOKIE' ),
+ array( 'CURLOPT_COOKIEFILE' ),
+ array( 'CURLOPT_COOKIEJAR' ),
+ array( 'CURLOPT_COOKIESESSION' ),
+ array( 'CURLOPT_CRLF' ),
+ array( 'CURLOPT_CUSTOMREQUEST' ),
+ array( 'CURLOPT_DNS_CACHE_TIMEOUT' ),
+ array( 'CURLOPT_DNS_USE_GLOBAL_CACHE' ),
+ array( 'CURLOPT_EGDSOCKET' ),
+ array( 'CURLOPT_ENCODING' ),
+ array( 'CURLOPT_FAILONERROR' ),
+ array( 'CURLOPT_FILE' ),
+ array( 'CURLOPT_FILETIME' ),
+ array( 'CURLOPT_FOLLOWLOCATION' ),
+ array( 'CURLOPT_FORBID_REUSE' ),
+ array( 'CURLOPT_FRESH_CONNECT' ),
+ array( 'CURLOPT_FTPAPPEND' ),
+ array( 'CURLOPT_FTPLISTONLY' ),
+ array( 'CURLOPT_FTPPORT' ),
+ array( 'CURLOPT_FTPSSLAUTH' ),
+ array( 'CURLOPT_FTP_CREATE_MISSING_DIRS' ),
+ // array( 'CURLOPT_FTP_FILEMETHOD' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLOPT_FTP_SKIP_PASV_IP' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLOPT_FTP_SSL' ),
+ array( 'CURLOPT_FTP_USE_EPRT' ),
+ array( 'CURLOPT_FTP_USE_EPSV' ),
+ array( 'CURLOPT_HEADER' ),
+ array( 'CURLOPT_HEADERFUNCTION' ),
+ array( 'CURLOPT_HTTP200ALIASES' ),
+ array( 'CURLOPT_HTTPAUTH' ),
+ array( 'CURLOPT_HTTPGET' ),
+ array( 'CURLOPT_HTTPHEADER' ),
+ array( 'CURLOPT_HTTPPROXYTUNNEL' ),
+ array( 'CURLOPT_HTTP_VERSION' ),
+ array( 'CURLOPT_INFILE' ),
+ array( 'CURLOPT_INFILESIZE' ),
+ array( 'CURLOPT_INTERFACE' ),
+ array( 'CURLOPT_IPRESOLVE' ),
+ // array( 'CURLOPT_KEYPASSWD' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLOPT_KRB4LEVEL' ),
+ array( 'CURLOPT_LOW_SPEED_LIMIT' ),
+ array( 'CURLOPT_LOW_SPEED_TIME' ),
+ array( 'CURLOPT_MAXCONNECTS' ),
+ array( 'CURLOPT_MAXREDIRS' ),
+ // array( 'CURLOPT_MAX_RECV_SPEED_LARGE' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLOPT_MAX_SEND_SPEED_LARGE' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLOPT_NETRC' ),
+ array( 'CURLOPT_NOBODY' ),
+ array( 'CURLOPT_NOPROGRESS' ),
+ array( 'CURLOPT_NOSIGNAL' ),
+ array( 'CURLOPT_PORT' ),
+ array( 'CURLOPT_POST' ),
+ array( 'CURLOPT_POSTFIELDS' ),
+ array( 'CURLOPT_POSTQUOTE' ),
+ array( 'CURLOPT_POSTREDIR' ),
+ array( 'CURLOPT_PRIVATE' ),
+ array( 'CURLOPT_PROGRESSFUNCTION' ),
+ // array( 'CURLOPT_PROTOCOLS' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLOPT_PROXY' ),
+ array( 'CURLOPT_PROXYAUTH' ),
+ array( 'CURLOPT_PROXYPORT' ),
+ array( 'CURLOPT_PROXYTYPE' ),
+ array( 'CURLOPT_PROXYUSERPWD' ),
+ array( 'CURLOPT_PUT' ),
+ array( 'CURLOPT_QUOTE' ),
+ array( 'CURLOPT_RANDOM_FILE' ),
+ array( 'CURLOPT_RANGE' ),
+ array( 'CURLOPT_READDATA' ),
+ array( 'CURLOPT_READFUNCTION' ),
+ // array( 'CURLOPT_REDIR_PROTOCOLS' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLOPT_REFERER' ),
+ array( 'CURLOPT_RESUME_FROM' ),
+ array( 'CURLOPT_RETURNTRANSFER' ),
+ // array( 'CURLOPT_SSH_AUTH_TYPES' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLOPT_SSH_HOST_PUBLIC_KEY_MD5' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLOPT_SSH_PRIVATE_KEYFILE' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLOPT_SSH_PUBLIC_KEYFILE' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLOPT_SSLCERT' ),
+ array( 'CURLOPT_SSLCERTPASSWD' ),
+ array( 'CURLOPT_SSLCERTTYPE' ),
+ array( 'CURLOPT_SSLENGINE' ),
+ array( 'CURLOPT_SSLENGINE_DEFAULT' ),
+ array( 'CURLOPT_SSLKEY' ),
+ array( 'CURLOPT_SSLKEYPASSWD' ),
+ array( 'CURLOPT_SSLKEYTYPE' ),
+ array( 'CURLOPT_SSLVERSION' ),
+ array( 'CURLOPT_SSL_CIPHER_LIST' ),
+ array( 'CURLOPT_SSL_VERIFYHOST' ),
+ array( 'CURLOPT_SSL_VERIFYPEER' ),
+ array( 'CURLOPT_STDERR' ),
+ array( 'CURLOPT_TCP_NODELAY' ),
+ array( 'CURLOPT_TIMECONDITION' ),
+ array( 'CURLOPT_TIMEOUT' ),
+ array( 'CURLOPT_TIMEOUT_MS' ),
+ array( 'CURLOPT_TIMEVALUE' ),
+ array( 'CURLOPT_TRANSFERTEXT' ),
+ array( 'CURLOPT_UNRESTRICTED_AUTH' ),
+ array( 'CURLOPT_UPLOAD' ),
+ array( 'CURLOPT_URL' ),
+ array( 'CURLOPT_USERAGENT' ),
+ array( 'CURLOPT_USERPWD' ),
+ array( 'CURLOPT_VERBOSE' ),
+ array( 'CURLOPT_WRITEFUNCTION' ),
+ array( 'CURLOPT_WRITEHEADER' ),
+ // array( 'CURLPROTO_ALL' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_DICT' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_FILE' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_FTP' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_FTPS' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_HTTP' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_HTTPS' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_LDAP' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_LDAPS' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_SCP' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_SFTP' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_TELNET' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLPROTO_TFTP' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLPROXY_HTTP' ),
+ // array( 'CURLPROXY_SOCKS4' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLPROXY_SOCKS5' ),
+ // array( 'CURLSSH_AUTH_DEFAULT' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLSSH_AUTH_HOST' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLSSH_AUTH_KEYBOARD' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLSSH_AUTH_NONE' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLSSH_AUTH_PASSWORD' ), // not present in HHVM 3.3.0-dev
+ // array( 'CURLSSH_AUTH_PUBLICKEY' ), // not present in HHVM 3.3.0-dev
+ array( 'CURLVERSION_NOW' ),
+ array( 'CURL_HTTP_VERSION_1_0' ),
+ array( 'CURL_HTTP_VERSION_1_1' ),
+ array( 'CURL_HTTP_VERSION_NONE' ),
+ array( 'CURL_IPRESOLVE_V4' ),
+ array( 'CURL_IPRESOLVE_V6' ),
+ array( 'CURL_IPRESOLVE_WHATEVER' ),
+ array( 'CURL_NETRC_IGNORED' ),
+ array( 'CURL_NETRC_OPTIONAL' ),
+ array( 'CURL_NETRC_REQUIRED' ),
+ array( 'CURL_TIMECOND_IFMODSINCE' ),
+ array( 'CURL_TIMECOND_IFUNMODSINCE' ),
+ array( 'CURL_TIMECOND_LASTMOD' ),
+ array( 'CURL_VERSION_IPV6' ),
+ array( 'CURL_VERSION_KERBEROS4' ),
+ array( 'CURL_VERSION_LIBZ' ),
+ array( 'CURL_VERSION_SSL' ),
+ );
+ }
+
+ /**
+ * Added this test based on an issue experienced with HHVM 3.3.0-dev
+ * where it did not define a cURL constant.
+ *
+ * @bug 70570
+ * @dataProvider provideCurlConstants
+ */
+ public function testCurlConstants( $value ) {
+ $this->assertTrue( defined( $value ), $value . ' not defined' );
+ }
}
/**
@@ -179,7 +486,7 @@ class HttpTest extends MediaWikiTestCase {
class MWHttpRequestTester extends MWHttpRequest {
// function derived from the MWHttpRequest factory function but
// returns appropriate tester class here
- public static function factory( $url, $options = null ) {
+ public static function factory( $url, $options = null, $caller = __METHOD__ ) {
if ( !Http::$httpEngine ) {
Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
} elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
@@ -189,7 +496,7 @@ class MWHttpRequestTester extends MWHttpRequest {
switch ( Http::$httpEngine ) {
case 'curl':
- return new CurlHttpRequestTester( $url, $options );
+ return new CurlHttpRequestTester( $url, $options, $caller );
case 'php':
if ( !wfIniGetBool( 'allow_url_fopen' ) ) {
throw new MWException( __METHOD__ .
@@ -197,7 +504,7 @@ class MWHttpRequestTester extends MWHttpRequest {
. 'If possible, curl should be used instead. See http://php.net/curl.' );
}
- return new PhpHttpRequestTester( $url, $options );
+ return new PhpHttpRequestTester( $url, $options, $caller );
default:
}
}
diff --git a/tests/phpunit/includes/ImportTest.php b/tests/phpunit/includes/ImportTest.php
index 2fce6bfb..ea753e81 100644
--- a/tests/phpunit/includes/ImportTest.php
+++ b/tests/phpunit/includes/ImportTest.php
@@ -28,13 +28,14 @@ class ImportTest extends MediaWikiLangTestCase {
$source = $this->getInputStreamSource( $xml );
$redirect = null;
- $callback = function ( $title, $origTitle, $revCount, $sRevCount, $pageInfo ) use ( &$redirect ) {
+ $callback = function ( Title $title, ForeignTitle $foreignTitle, $revCount,
+ $sRevCount, $pageInfo ) use ( &$redirect ) {
if ( array_key_exists( 'redirect', $pageInfo ) ) {
$redirect = $pageInfo['redirect'];
}
};
- $importer = new WikiImporter( $source );
+ $importer = new WikiImporter( $source, ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
$importer->setPageOutCallback( $callback );
$importer->doImport();
@@ -45,7 +46,7 @@ class ImportTest extends MediaWikiLangTestCase {
return array(
array(
<<< EOF
-<mediawiki>
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
<page>
<title>Test</title>
<ns>0</ns>
@@ -59,10 +60,10 @@ class ImportTest extends MediaWikiLangTestCase {
<id>10</id>
</contributor>
<comment>Admin moved page [[Test]] to [[Test22]]</comment>
- <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
- <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
+ <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
+ <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
</revision>
</page>
</mediawiki>
@@ -72,7 +73,7 @@ EOF
),
array(
<<< EOF
-<mediawiki>
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version="0.9" xml:lang="en">
<page>
<title>Test</title>
<ns>0</ns>
@@ -98,4 +99,59 @@ EOF
);
}
+ /**
+ * @covers WikiImporter::handleSiteInfo
+ * @dataProvider getSiteInfoXML
+ * @param string $xml
+ * @param array|null $namespaces
+ */
+ public function testSiteInfoContainsNamespaces( $xml, $namespaces ) {
+ $source = $this->getInputStreamSource( $xml );
+
+ $importNamespaces = null;
+ $callback = function ( array $siteinfo, $innerImporter ) use ( &$importNamespaces ) {
+ $importNamespaces = $siteinfo['_namespaces'];
+ };
+
+ $importer = new WikiImporter( $source, ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
+ $importer->setSiteInfoCallback( $callback );
+ $importer->doImport();
+
+ $this->assertEquals( $importNamespaces, $namespaces );
+ }
+
+ public function getSiteInfoXML() {
+ return array(
+ array(
+ <<< EOF
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
+ <siteinfo>
+ <namespaces>
+ <namespace key="-2" case="first-letter">Media</namespace>
+ <namespace key="-1" case="first-letter">Special</namespace>
+ <namespace key="0" case="first-letter" />
+ <namespace key="1" case="first-letter">Talk</namespace>
+ <namespace key="2" case="first-letter">User</namespace>
+ <namespace key="3" case="first-letter">User talk</namespace>
+ <namespace key="100" case="first-letter">Portal</namespace>
+ <namespace key="101" case="first-letter">Portal talk</namespace>
+ </namespaces>
+ </siteinfo>
+</mediawiki>
+EOF
+ ,
+ array(
+ '-2' => 'Media',
+ '-1' => 'Special',
+ '0' => '',
+ '1' => 'Talk',
+ '2' => 'User',
+ '3' => 'User talk',
+ '100' => 'Portal',
+ '101' => 'Portal talk',
+ )
+ ),
+ );
+ }
+
}
diff --git a/tests/phpunit/includes/LinkerTest.php b/tests/phpunit/includes/LinkerTest.php
index 7b84107e..823c9330 100644
--- a/tests/phpunit/includes/LinkerTest.php
+++ b/tests/phpunit/includes/LinkerTest.php
@@ -149,10 +149,14 @@ class LinkerTest extends MediaWikiLangTestCase {
"pre /* autocomment */ post",
),
array(
- '/* autocomment */ multiple? <a href="/wiki/Special:BlankPage#autocomment2" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment2: </span> </span>',
+ '<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 */ ",
),
array(
+ '<a href="/wiki/Special:BlankPage#autocomment_containing_.2F.2A" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing /*: </span> T70361</span>',
+ "/* autocomment containing /* */ T70361"
+ ),
+ array(
'<a href="#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
"/* autocomment */",
false, true
@@ -189,4 +193,54 @@ class LinkerTest extends MediaWikiLangTestCase {
),
);
}
+
+ /**
+ * @covers Linker::formatLinksInComment
+ * @dataProvider provideCasesForFormatLinksInComment
+ */
+ public function testFormatLinksInComment( $expected, $input, $wiki ) {
+
+ $conf = new SiteConfiguration();
+ $conf->settings = array(
+ 'wgServer' => array(
+ 'enwiki' => '//en.example.org'
+ ),
+ 'wgArticlePath' => array(
+ 'enwiki' => '/w/$1',
+ ),
+ );
+ $conf->suffixes = array( 'wiki' );
+ $this->setMwGlobals( array(
+ 'wgScript' => '/wiki/index.php',
+ 'wgArticlePath' => '/wiki/$1',
+ 'wgWellFormedXml' => true,
+ 'wgCapitalLinks' => true,
+ 'wgConf' => $conf,
+ ) );
+
+ $this->assertEquals(
+ $expected,
+ Linker::formatLinksInComment( $input, Title::newFromText( 'Special:BlankPage' ), false, $wiki )
+ );
+ }
+
+ public static function provideCasesForFormatLinksInComment() {
+ return array(
+ array(
+ 'foo bar <a href="/wiki/Special:BlankPage" title="Special:BlankPage">Special:BlankPage</a>',
+ 'foo bar [[Special:BlankPage]]',
+ null,
+ ),
+ array(
+ '<a class="external" rel="nofollow" href="//en.example.org/w/Foo%27bar">Foo\'bar</a>',
+ "[[Foo'bar]]",
+ 'enwiki',
+ ),
+ array(
+ 'foo bar <a class="external" rel="nofollow" href="//en.example.org/w/Special:BlankPage">Special:BlankPage</a>',
+ 'foo bar [[Special:BlankPage]]',
+ 'enwiki',
+ ),
+ );
+ }
}
diff --git a/tests/phpunit/includes/MWTimestampTest.php b/tests/phpunit/includes/MWTimestampTest.php
index dcb98563..36562545 100644
--- a/tests/phpunit/includes/MWTimestampTest.php
+++ b/tests/phpunit/includes/MWTimestampTest.php
@@ -8,6 +8,9 @@ class MWTimestampTest extends MediaWikiLangTestCase {
protected function setUp() {
parent::setUp();
+ // Avoid 'GetHumanTimestamp' hook and others
+ $this->setMwGlobals( 'wgHooks', array() );
+
RequestContext::getMain()->setLanguage( Language::factory( 'en' ) );
}
@@ -79,6 +82,17 @@ class MWTimestampTest extends MediaWikiLangTestCase {
}
/**
+ * Test an out of range timestamp
+ * @dataProvider provideOutOfRangeTimestamps
+ * @expectedException TimestampException
+ * @covers MWTimestamp
+ */
+ public function testOutOfRangeTimestamps( $format, $input ) {
+ $timestamp = new MWTimestamp( $input );
+ $timestamp->getTimestamp( $format );
+ }
+
+ /**
* Test requesting an invalid output format.
* @expectedException TimestampException
* @covers MWTimestamp::getTimestamp
@@ -111,6 +125,18 @@ class MWTimestampTest extends MediaWikiLangTestCase {
}
/**
+ * Returns a list of out of range timestamps in the format:
+ * array( type, timestamp_of_type )
+ */
+ public static function provideOutOfRangeTimestamps() {
+ return array(
+ // Various formats
+ array( TS_MW, '-62167219201' ), // -0001-12-31T23:59:59Z
+ array( TS_MW, '253402300800' ), // 10000-01-01T00:00:00Z
+ );
+ }
+
+ /**
* @dataProvider provideHumanTimestampTests
* @covers MWTimestamp::getHumanTimestamp
*/
diff --git a/tests/phpunit/includes/MediaWikiVersionFetcherTest.php b/tests/phpunit/includes/MediaWikiVersionFetcherTest.php
index e548f817..fa59ef29 100644
--- a/tests/phpunit/includes/MediaWikiVersionFetcherTest.php
+++ b/tests/phpunit/includes/MediaWikiVersionFetcherTest.php
@@ -8,7 +8,6 @@
*
* @group ComposerHooks
*
- * @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class MediaWikiVersionFetcherTest extends PHPUnit_Framework_TestCase {
diff --git a/tests/phpunit/includes/MessageTest.php b/tests/phpunit/includes/MessageTest.php
index f3d2a84a..99ec2e42 100644
--- a/tests/phpunit/includes/MessageTest.php
+++ b/tests/phpunit/includes/MessageTest.php
@@ -16,22 +16,11 @@ class MessageTest extends MediaWikiLangTestCase {
* @dataProvider provideConstructor
*/
public function testConstructor( $expectedLang, $key, $params, $language ) {
- $reflection = new ReflectionClass( 'Message' );
-
- $keyProperty = $reflection->getProperty( 'key' );
- $keyProperty->setAccessible( true );
-
- $paramsProperty = $reflection->getProperty( 'parameters' );
- $paramsProperty->setAccessible( true );
-
- $langProperty = $reflection->getProperty( 'language' );
- $langProperty->setAccessible( true );
-
$message = new Message( $key, $params, $language );
- $this->assertEquals( $key, $keyProperty->getValue( $message ) );
- $this->assertEquals( $params, $paramsProperty->getValue( $message ) );
- $this->assertEquals( $expectedLang, $langProperty->getValue( $message ) );
+ $this->assertEquals( $key, $message->getKey() );
+ $this->assertEquals( $params, $message->getParams() );
+ $this->assertEquals( $expectedLang, $message->getLanguage() );
}
public static function provideConstructor() {
@@ -45,21 +34,62 @@ class MessageTest extends MediaWikiLangTestCase {
);
}
- public static function provideTestParams() {
+ public static function provideConstructorParams() {
return array(
- array( array() ),
- array( array( 'foo' ), 'foo' ),
- array( array( 'foo', 'bar' ), 'foo', 'bar' ),
- array( array( 'baz' ), array( 'baz' ) ),
- array( array( 'baz', 'foo' ), array( 'baz', 'foo' ) ),
- array( array( 'baz', 'foo' ), array( 'baz', 'foo' ), 'hhh' ),
- array( array( 'baz', 'foo' ), array( 'baz', 'foo' ), 'hhh', array( 'ahahahahha' ) ),
- array( array( 'baz', 'foo' ), array( 'baz', 'foo' ), array( 'ahahahahha' ) ),
- array( array( 'baz' ), array( 'baz' ), array( 'ahahahahha' ) ),
+ array(
+ array(),
+ array(),
+ ),
+ array(
+ array( 'foo' ),
+ array( 'foo' ),
+ ),
+ array(
+ array( 'foo', 'bar' ),
+ array( 'foo', 'bar' ),
+ ),
+ array(
+ array( 'baz' ),
+ array( array( 'baz' ) ),
+ ),
+ array(
+ array( 'baz', 'foo' ),
+ array( array( 'baz', 'foo' ) ),
+ ),
+ array(
+ array( 'baz', 'foo' ),
+ array( array( 'baz', 'foo' ), 'hhh' ),
+ ),
+ array(
+ array( 'baz', 'foo' ),
+ array( array( 'baz', 'foo' ), 'hhh', array( 'ahahahahha' ) ),
+ ),
+ array(
+ array( 'baz', 'foo' ),
+ array( array( 'baz', 'foo' ), array( 'ahahahahha' ) ),
+ ),
+ array(
+ array( 'baz' ),
+ array( array( 'baz' ), array( 'ahahahahha' ) ),
+ ),
);
}
- public function getLanguageProvider() {
+ /**
+ * @covers Message::__construct
+ * @covers Message::getParams
+ * @dataProvider provideConstructorParams
+ */
+ public function testConstructorParams( $expected, $args ) {
+ $msg = new Message( 'imasomething' );
+
+ $returned = call_user_func_array( array( $msg, 'params' ), $args );
+
+ $this->assertSame( $msg, $returned );
+ $this->assertEquals( $expected, $msg->getParams() );
+ }
+
+ public static function provideConstructorLanguage() {
return array(
array( 'foo', array( 'bar' ), 'en' ),
array( 'foo', array( 'bar' ), 'de' )
@@ -67,27 +97,98 @@ class MessageTest extends MediaWikiLangTestCase {
}
/**
+ * @covers Message::__construct
* @covers Message::getLanguage
- * @dataProvider getLanguageProvider
+ * @dataProvider provideConstructorLanguage
*/
- public function testGetLanguageCode( $key, $params, $languageCode ) {
+ public function testConstructorLanguage( $key, $params, $languageCode ) {
$language = Language::factory( $languageCode );
$message = new Message( $key, $params, $language );
$this->assertEquals( $language, $message->getLanguage() );
}
+ public static function provideKeys() {
+ return array(
+ 'string' => array(
+ 'key' => 'mainpage',
+ 'expected' => array( 'mainpage' ),
+ ),
+ 'single' => array(
+ 'key' => array( 'mainpage' ),
+ 'expected' => array( 'mainpage' ),
+ ),
+ 'multi' => array(
+ 'key' => array( 'mainpage-foo', 'mainpage-bar', 'mainpage' ),
+ 'expected' => array( 'mainpage-foo', 'mainpage-bar', 'mainpage' ),
+ ),
+ 'empty' => array(
+ 'key' => array(),
+ 'expected' => null,
+ 'exception' => 'InvalidArgumentException',
+ ),
+ 'null' => array(
+ 'key' => null,
+ 'expected' => null,
+ 'exception' => 'InvalidArgumentException',
+ ),
+ 'bad type' => array(
+ 'key' => 123,
+ 'expected' => null,
+ 'exception' => 'InvalidArgumentException',
+ ),
+ );
+ }
+
/**
- * @covers Message::params
- * @dataProvider provideTestParams
+ * @covers Message::__construct
+ * @covers Message::getKey
+ * @covers Message::isMultiKey
+ * @covers Message::getKeysToTry
+ * @dataProvider provideKeys
*/
- public function testParams( $expected ) {
- $msg = new Message( 'imasomething' );
+ public function testKeys( $key, $expected, $exception = null ) {
+ if ( $exception ) {
+ $this->setExpectedException( $exception );
+ }
+
+ $msg = new Message( $key );
+ $this->assertContains( $msg->getKey(), $expected );
+ $this->assertEquals( $expected, $msg->getKeysToTry() );
+ $this->assertEquals( count( $expected ) > 1, $msg->isMultiKey() );
+ }
- $returned = call_user_func_array( array( $msg, 'params' ), array_slice( func_get_args(), 1 ) );
+ /**
+ * @covers ::wfMessage
+ */
+ public function testWfMessage() {
+ $this->assertInstanceOf( 'Message', wfMessage( 'mainpage' ) );
+ $this->assertInstanceOf( 'Message', wfMessage( 'i-dont-exist-evar' ) );
+ }
- $this->assertSame( $msg, $returned );
- $this->assertEquals( $expected, $msg->getParams() );
+ /**
+ * @covers Message::newFromKey
+ */
+ public function testNewFromKey() {
+ $this->assertInstanceOf( 'Message', Message::newFromKey( 'mainpage' ) );
+ $this->assertInstanceOf( 'Message', Message::newFromKey( 'i-dont-exist-evar' ) );
+ }
+
+ /**
+ * @covers ::wfMessage
+ * @covers Message::__construct
+ */
+ public function testWfMessageParams() {
+ $this->assertEquals( 'Return to $1.', wfMessage( 'returnto' )->text() );
+ $this->assertEquals( 'Return to $1.', wfMessage( 'returnto', array() )->text() );
+ $this->assertEquals(
+ 'You have foo (bar).',
+ wfMessage( 'youhavenewmessages', 'foo', 'bar' )->text()
+ );
+ $this->assertEquals(
+ 'You have foo (bar).',
+ wfMessage( 'youhavenewmessages', array( 'foo', 'bar' ) )->text()
+ );
}
/**
@@ -104,14 +205,42 @@ class MessageTest extends MediaWikiLangTestCase {
/**
* @covers Message::__construct
+ * @covers Message::text
+ * @covers Message::plain
+ * @covers Message::escaped
+ * @covers Message::toString
*/
- public function testKey() {
- $this->assertInstanceOf( 'Message', wfMessage( 'mainpage' ) );
- $this->assertInstanceOf( 'Message', wfMessage( 'i-dont-exist-evar' ) );
+ public function testToStringKey() {
$this->assertEquals( 'Main Page', wfMessage( 'mainpage' )->text() );
- $this->assertEquals( '&lt;i-dont-exist-evar&gt;', wfMessage( 'i-dont-exist-evar' )->text() );
+ $this->assertEquals( '<i-dont-exist-evar>', wfMessage( 'i-dont-exist-evar' )->text() );
+ $this->assertEquals( '<i<dont>exist-evar>', wfMessage( 'i<dont>exist-evar' )->text() );
$this->assertEquals( '<i-dont-exist-evar>', wfMessage( 'i-dont-exist-evar' )->plain() );
+ $this->assertEquals( '<i<dont>exist-evar>', wfMessage( 'i<dont>exist-evar' )->plain() );
$this->assertEquals( '&lt;i-dont-exist-evar&gt;', wfMessage( 'i-dont-exist-evar' )->escaped() );
+ $this->assertEquals(
+ '&lt;i&lt;dont&gt;exist-evar&gt;',
+ wfMessage( 'i<dont>exist-evar' )->escaped()
+ );
+ }
+
+ public static function provideToString() {
+ return array(
+ array( 'mainpage', 'Main Page' ),
+ array( 'i-dont-exist-evar', '<i-dont-exist-evar>' ),
+ array( 'i-dont-exist-evar', '&lt;i-dont-exist-evar&gt;', 'escaped' ),
+ );
+ }
+
+ /**
+ * @covers Message::toString
+ * @covers Message::__toString
+ * @dataProvider provideToString
+ */
+ public function testToString( $key, $expect, $format = 'plain' ) {
+ $msg = new Message( $key );
+ $msg->$format();
+ $this->assertEquals( $expect, $msg->toString() );
+ $this->assertEquals( $expect, $msg->__toString() );
}
/**
@@ -132,26 +261,10 @@ class MessageTest extends MediaWikiLangTestCase {
}
/**
- * @covers Message::__construct
- */
- public function testMessageParams() {
- $this->assertEquals( 'Return to $1.', wfMessage( 'returnto' )->text() );
- $this->assertEquals( 'Return to $1.', wfMessage( 'returnto', array() )->text() );
- $this->assertEquals(
- 'You have foo (bar).',
- wfMessage( 'youhavenewmessages', 'foo', 'bar' )->text()
- );
- $this->assertEquals(
- 'You have foo (bar).',
- wfMessage( 'youhavenewmessages', array( 'foo', 'bar' ) )->text()
- );
- }
-
- /**
- * @covers Message::__construct
+ * @covers Message::rawParam
* @covers Message::rawParams
*/
- public function testMessageParamSubstitution() {
+ public function testRawParams() {
$this->assertEquals(
'(Заглавная страница)',
wfMessage( 'parentheses', 'Заглавная страница' )->plain()
@@ -171,10 +284,21 @@ class MessageTest extends MediaWikiLangTestCase {
}
/**
- * @covers Message::__construct
+ * @covers RawMessage::__construct
+ * @covers RawMessage::fetchMessage
+ */
+ public function testRawMessage() {
+ $msg = new RawMessage( 'example &' );
+ $this->assertEquals( 'example &', $msg->plain() );
+ $this->assertEquals( 'example &amp;', $msg->escaped() );
+ }
+
+ /**
* @covers Message::params
+ * @covers Message::toString
+ * @covers Message::replaceParameters
*/
- public function testDeliciouslyManyParams() {
+ public function testReplaceManyParams() {
$msg = new RawMessage( '$1$2$3$4$5$6$7$8$9$10$11$12' );
// One less than above has placeholders
$params = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k' );
@@ -183,12 +307,20 @@ class MessageTest extends MediaWikiLangTestCase {
$msg->params( $params )->plain(),
'Params > 9 are replaced correctly'
);
+
+ $msg = new RawMessage( 'Params$*' );
+ $params = array( 'ab', 'bc', 'cd' );
+ $this->assertEquals(
+ 'Params: ab, bc, cd',
+ $msg->params( $params )->text()
+ );
}
/**
+ * @covers Message::numParam
* @covers Message::numParams
*/
- public function testMessageNumParams() {
+ public function testNumParams() {
$lang = Language::factory( 'en' );
$msg = new RawMessage( '$1' );
@@ -200,9 +332,10 @@ class MessageTest extends MediaWikiLangTestCase {
}
/**
+ * @covers Message::durationParam
* @covers Message::durationParams
*/
- public function testMessageDurationParams() {
+ public function testDurationParams() {
$lang = Language::factory( 'en' );
$msg = new RawMessage( '$1' );
@@ -216,9 +349,10 @@ class MessageTest extends MediaWikiLangTestCase {
/**
* FIXME: This should not need database, but Language#formatExpiry does (bug 55912)
* @group Database
+ * @covers Message::expiryParam
* @covers Message::expiryParams
*/
- public function testMessageExpiryParams() {
+ public function testExpiryParams() {
$lang = Language::factory( 'en' );
$msg = new RawMessage( '$1' );
@@ -230,9 +364,10 @@ class MessageTest extends MediaWikiLangTestCase {
}
/**
+ * @covers Message::timeperiodParam
* @covers Message::timeperiodParams
*/
- public function testMessageTimeperiodParams() {
+ public function testTimeperiodParams() {
$lang = Language::factory( 'en' );
$msg = new RawMessage( '$1' );
@@ -244,9 +379,10 @@ class MessageTest extends MediaWikiLangTestCase {
}
/**
+ * @covers Message::sizeParam
* @covers Message::sizeParams
*/
- public function testMessageSizeParams() {
+ public function testSizeParams() {
$lang = Language::factory( 'en' );
$msg = new RawMessage( '$1' );
@@ -258,9 +394,10 @@ class MessageTest extends MediaWikiLangTestCase {
}
/**
+ * @covers Message::bitrateParam
* @covers Message::bitrateParams
*/
- public function testMessageBitrateParams() {
+ public function testBitrateParams() {
$lang = Language::factory( 'en' );
$msg = new RawMessage( '$1' );
@@ -271,6 +408,100 @@ class MessageTest extends MediaWikiLangTestCase {
);
}
+ public static function providePlaintextParams() {
+ return array(
+ array(
+ 'one $2 <div>foo</div> [[Bar]] {{Baz}} &lt;',
+ 'plain',
+ ),
+
+ array(
+ // expect
+ 'one $2 <div>foo</div> [[Bar]] {{Baz}} &lt;',
+ // format
+ 'text',
+ ),
+ array(
+ 'one $2 &lt;div&gt;foo&lt;/div&gt; [[Bar]] {{Baz}} &amp;lt;',
+ 'escaped',
+ ),
+
+ array(
+ 'one $2 &lt;div&gt;foo&lt;/div&gt; [[Bar]] {{Baz}} &amp;lt;',
+ 'parse',
+ ),
+
+ array(
+ "<p>one $2 &lt;div&gt;foo&lt;/div&gt; [[Bar]] {{Baz}} &amp;lt;\n</p>",
+ 'parseAsBlock',
+ ),
+ );
+ }
+
+ /**
+ * @covers Message::plaintextParam
+ * @covers Message::plaintextParams
+ * @covers Message::formatPlaintext
+ * @covers Message::toString
+ * @covers Message::parse
+ * @covers Message::parseAsBlock
+ * @dataProvider providePlaintextParams
+ */
+ public function testPlaintextParams( $expect, $format ) {
+ $lang = Language::factory( 'en' );
+
+ $msg = new RawMessage( '$1 $2' );
+ $params = array(
+ 'one $2',
+ '<div>foo</div> [[Bar]] {{Baz}} &lt;',
+ );
+ $this->assertEquals(
+ $expect,
+ $msg->inLanguage( $lang )->plaintextParams( $params )->$format(),
+ "Fail formatting for $format"
+ );
+ }
+
+ public static function provideParser() {
+ return array(
+ array(
+ "''&'' <x><!-- x -->",
+ 'plain',
+ ),
+
+ array(
+ "''&'' <x><!-- x -->",
+ 'text',
+ ),
+ array(
+ '<i>&amp;</i> &lt;x&gt;',
+ 'parse',
+ ),
+
+ array(
+ "<p><i>&amp;</i> &lt;x&gt;\n</p>",
+ 'parseAsBlock',
+ ),
+ );
+ }
+
+ /**
+ * @covers Message::text
+ * @covers Message::parse
+ * @covers Message::parseAsBlock
+ * @covers Message::toString
+ * @covers Message::transformText
+ * @covers Message::parseText
+ * @dataProvider provideParser
+ */
+ public function testParser( $expect, $format ) {
+ $msg = new RawMessage( "''&'' <x><!-- x -->" );
+ $this->assertEquals(
+ $expect,
+ $msg->inLanguage( 'en' )->$format()
+ );
+ }
+
/**
* @covers Message::inContentLanguage
*/
@@ -317,52 +548,4 @@ class MessageTest extends MediaWikiLangTestCase {
public function testInLanguageThrows() {
wfMessage( 'foo' )->inLanguage( 123 );
}
-
- public function keyProvider() {
- return array(
- 'string' => array(
- 'key' => 'mainpage',
- 'expected' => array( 'mainpage' ),
- ),
- 'single' => array(
- 'key' => array( 'mainpage' ),
- 'expected' => array( 'mainpage' ),
- ),
- 'multi' => array(
- 'key' => array( 'mainpage-foo', 'mainpage-bar', 'mainpage' ),
- 'expected' => array( 'mainpage-foo', 'mainpage-bar', 'mainpage' ),
- ),
- 'empty' => array(
- 'key' => array(),
- 'expected' => null,
- 'exception' => 'InvalidArgumentException',
- ),
- 'null' => array(
- 'key' => null,
- 'expected' => null,
- 'exception' => 'InvalidArgumentException',
- ),
- 'bad type' => array(
- 'key' => 17,
- 'expected' => null,
- 'exception' => 'InvalidArgumentException',
- ),
- );
- }
-
- /**
- * @dataProvider keyProvider()
- *
- * @covers Message::getKey
- */
- public function testGetKey( $key, $expected, $exception = null ) {
- if ( $exception ) {
- $this->setExpectedException( $exception );
- }
-
- $msg = new Message( $key );
- $this->assertEquals( $expected, $msg->getKeysToTry() );
- $this->assertEquals( count( $expected ) > 1, $msg->isMultiKey() );
- $this->assertContains( $msg->getKey(), $expected );
- }
}
diff --git a/tests/phpunit/includes/MovePageTest.php b/tests/phpunit/includes/MovePageTest.php
new file mode 100644
index 00000000..9501e452
--- /dev/null
+++ b/tests/phpunit/includes/MovePageTest.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * @group Database
+ */
+class MovePageTest extends MediaWikiTestCase {
+
+ /**
+ * @dataProvider provideIsValidMove
+ * @covers MovePage::isValidMove
+ * @covers MovePage::isValidFileMove
+ */
+ public function testIsValidMove( $old, $new, $error ) {
+ $this->setMwGlobals( 'wgContentHandlerUseDB', false );
+ $mp = new MovePage(
+ Title::newFromText( $old ),
+ Title::newFromText( $new )
+ );
+ $status = $mp->isValidMove();
+ if ( $error === true ) {
+ $this->assertTrue( $status->isGood() );
+ } else {
+ $this->assertTrue( $status->hasMessage( $error ) );
+ }
+ }
+
+ /**
+ * This should be kept in sync with TitleTest::provideTestIsValidMoveOperation
+ */
+ public static function provideIsValidMove() {
+ return array(
+ // for MovePage::isValidMove
+ array( 'Test', 'Test', 'selfmove' ),
+ array( 'Special:FooBar', 'Test', 'immobile-source-namespace' ),
+ array( 'Test', 'Special:FooBar', 'immobile-target-namespace' ),
+ array( 'MediaWiki:Common.js', 'Help:Some wikitext page', 'bad-target-model' ),
+ array( 'Page', 'File:Test.jpg', 'nonfile-cannot-move-to-file' ),
+ // for MovePage::isValidFileMove
+ array( 'File:Test.jpg', 'Page', 'imagenocrossnamespace' ),
+ );
+ }
+
+ /**
+ * Integration test to catch regressions like T74870. Taken and modified
+ * from SemanticMediaWiki
+ */
+ public function testTitleMoveCompleteIntegrationTest() {
+ $oldTitle = Title::newFromText( 'Help:Some title' );
+ WikiPage::factory( $oldTitle )->doEditContent( new WikitextContent( 'foo' ), 'bar' );
+ $newTitle = Title::newFromText( 'Help:Some other title' );
+ $this->assertNull(
+ WikiPage::factory( $newTitle )->getRevision()
+ );
+
+ $this->assertTrue( $oldTitle->moveTo( $newTitle, false, 'test1', true ) );
+ $this->assertNotNull(
+ WikiPage::factory( $oldTitle )->getRevision()
+ );
+ $this->assertNotNull(
+ WikiPage::factory( $newTitle)->getRevision()
+ );
+ }
+}
diff --git a/tests/phpunit/includes/OutputPageTest.php b/tests/phpunit/includes/OutputPageTest.php
index d7e8cd31..6c6d95ee 100644
--- a/tests/phpunit/includes/OutputPageTest.php
+++ b/tests/phpunit/includes/OutputPageTest.php
@@ -172,18 +172,18 @@ mw.test.baz({token:123});mw.loader.state({"test.quux":"ready"});
array(
array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
'<script>if(window.mw){
-mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{});
+mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]});
}</script>
'
),
- // Load module script with with ESI
+ // Load module script with ESI
array(
array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS, true ),
'<script><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=scripts&amp;skin=fallback&amp;*" /></script>
'
),
- // Load module styles with with ESI
+ // Load module styles with ESI
array(
array( 'test.foo', ResourceLoaderModule::TYPE_STYLES, true ),
'<style><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=styles&amp;skin=fallback&amp;*" /></style>
@@ -203,9 +203,13 @@ mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"
// Load two modules in separate groups
array(
array( array( 'test.group.foo', 'test.group.bar' ), ResourceLoaderModule::TYPE_COMBINED ),
- '<script src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.group.bar&amp;skin=fallback&amp;*"></script>
-<script src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.group.foo&amp;skin=fallback&amp;*"></script>
-',
+ '<script>if(window.mw){
+document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.group.bar\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");
+}</script>
+<script>if(window.mw){
+document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.group.foo\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");
+}</script>
+'
),
);
}
@@ -213,6 +217,11 @@ mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"
/**
* @dataProvider provideMakeResourceLoaderLink
* @covers OutputPage::makeResourceLoaderLink
+ * @covers ResourceLoader::makeLoaderImplementScript
+ * @covers ResourceLoader::makeModuleResponse
+ * @covers ResourceLoader::makeInlineScript
+ * @covers ResourceLoader::makeLoaderStateScript
+ * @covers ResourceLoader::createLoaderURL
*/
public function testMakeResourceLoaderLink( $args, $expectedHtml ) {
$this->setMwGlobals( array(
@@ -230,6 +239,7 @@ mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"
$ctx->setLanguage( 'en' );
$out = new OutputPage( $ctx );
$rl = $out->getResourceLoader();
+ $rl->setMessageBlobStore( new NullMessageBlobStore() );
$rl->register( array(
'test.foo' => new ResourceLoaderTestModule( array(
'script' => 'mw.test.foo( { a: true } );',
@@ -271,3 +281,26 @@ mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"
$this->assertEquals( $expectedHtml, $actualHtml );
}
}
+
+/**
+ * MessageBlobStore that doesn't do anything
+ */
+class NullMessageBlobStore extends MessageBlobStore {
+ public function get ( ResourceLoader $resourceLoader, $modules, $lang ) {
+ return array();
+ }
+
+ public function insertMessageBlob ( $name, ResourceLoaderModule $module, $lang ) {
+ return false;
+ }
+
+ public function updateModule ( $name, ResourceLoaderModule $module, $lang ) {
+ return;
+ }
+
+ public function updateMessage ( $key ) {
+ }
+ public function clear() {
+ }
+}
+
diff --git a/tests/phpunit/includes/PrefixSearchTest.php b/tests/phpunit/includes/PrefixSearchTest.php
new file mode 100644
index 00000000..d63541b7
--- /dev/null
+++ b/tests/phpunit/includes/PrefixSearchTest.php
@@ -0,0 +1,306 @@
+<?php
+/**
+ * @group Search
+ * @group Database
+ */
+class PrefixSearchTest extends MediaWikiLangTestCase {
+
+ public function addDBData() {
+ $this->insertPage( 'Sandbox' );
+ $this->insertPage( 'Bar' );
+ $this->insertPage( 'Example' );
+ $this->insertPage( 'Example Bar' );
+ $this->insertPage( 'Example Foo' );
+ $this->insertPage( 'Example Foo/Bar' );
+ $this->insertPage( 'Example/Baz' );
+ $this->insertPage( 'Redirect test', '#REDIRECT [[Redirect Test]]' );
+ $this->insertPage( 'Redirect Test' );
+ $this->insertPage( 'Redirect Test Worse Result' );
+ $this->insertPage( 'Redirect test2', '#REDIRECT [[Redirect Test2]]' );
+ $this->insertPage( 'Redirect TEST2', '#REDIRECT [[Redirect Test2]]' );
+ $this->insertPage( 'Redirect Test2' );
+ $this->insertPage( 'Redirect Test2 Worse Result' );
+
+ $this->insertPage( 'Talk:Sandbox' );
+ $this->insertPage( 'Talk:Example' );
+
+ $this->insertPage( 'User:Example' );
+ }
+
+ protected function setUp() {
+ parent::setUp();
+
+ if ( !$this->isWikitextNS( NS_MAIN ) ) {
+ $this->markTestSkipped( 'Main namespace does not support wikitext.' );
+ }
+
+ // Avoid special pages from extensions interferring with the tests
+ $this->setMwGlobals( 'wgSpecialPages', array() );
+ }
+
+ protected function searchProvision( Array $results = null ) {
+ if ( $results === null ) {
+ $this->setMwGlobals( 'wgHooks', array() );
+ } else {
+ $this->setMwGlobals( 'wgHooks', array(
+ 'PrefixSearchBackend' => array(
+ function ( $namespaces, $search, $limit, &$srchres ) use ( $results ) {
+ $srchres = $results;
+ return false;
+ }
+ ),
+ ) );
+ }
+ }
+
+ public static function provideSearch() {
+ return array(
+ array( array(
+ 'Empty string',
+ 'query' => '',
+ 'results' => array(),
+ ) ),
+ array( array(
+ 'Main namespace with title prefix',
+ 'query' => 'Ex',
+ 'results' => array(
+ 'Example',
+ 'Example/Baz',
+ 'Example Bar',
+ ),
+ // Third result when testing offset
+ 'offsetresult' => array(
+ 'Example Foo',
+ ),
+ ) ),
+ array( array(
+ 'Talk namespace prefix',
+ 'query' => 'Talk:',
+ 'results' => array(
+ 'Talk:Example',
+ 'Talk:Sandbox',
+ ),
+ ) ),
+ array( array(
+ 'User namespace prefix',
+ 'query' => 'User:',
+ 'results' => array(
+ 'User:Example',
+ ),
+ ) ),
+ array( array(
+ 'Special namespace prefix',
+ 'query' => 'Special:',
+ 'results' => array(
+ 'Special:ActiveUsers',
+ 'Special:AllMessages',
+ 'Special:AllMyFiles',
+ ),
+ // Third result when testing offset
+ 'offsetresult' => array(
+ 'Special:AllMyUploads',
+ ),
+ ) ),
+ array( array(
+ 'Special namespace with prefix',
+ 'query' => 'Special:Un',
+ 'results' => array(
+ 'Special:Unblock',
+ 'Special:UncategorizedCategories',
+ 'Special:UncategorizedFiles',
+ ),
+ // Third result when testing offset
+ 'offsetresult' => array(
+ 'Special:UncategorizedImages',
+ ),
+ ) ),
+ array( array(
+ 'Special page name',
+ 'query' => 'Special:EditWatchlist',
+ 'results' => array(
+ 'Special:EditWatchlist',
+ ),
+ ) ),
+ array( array(
+ 'Special page subpages',
+ 'query' => 'Special:EditWatchlist/',
+ 'results' => array(
+ 'Special:EditWatchlist/clear',
+ 'Special:EditWatchlist/raw',
+ ),
+ ) ),
+ array( array(
+ 'Special page subpages with prefix',
+ 'query' => 'Special:EditWatchlist/cl',
+ 'results' => array(
+ 'Special:EditWatchlist/clear',
+ ),
+ ) ),
+ );
+ }
+
+ /**
+ * @dataProvider provideSearch
+ * @covers PrefixSearch::search
+ * @covers PrefixSearch::searchBackend
+ */
+ public function testSearch( Array $case ) {
+ $this->searchProvision( null );
+ $searcher = new StringPrefixSearch;
+ $results = $searcher->search( $case['query'], 3 );
+ $this->assertEquals(
+ $case['results'],
+ $results,
+ $case[0]
+ );
+ }
+
+ /**
+ * @dataProvider provideSearch
+ * @covers PrefixSearch::search
+ * @covers PrefixSearch::searchBackend
+ */
+ public function testSearchWithOffset( Array $case ) {
+ $this->searchProvision( null );
+ $searcher = new StringPrefixSearch;
+ $results = $searcher->search( $case['query'], 3, array(), 1 );
+
+ // We don't expect the first result when offsetting
+ array_shift( $case['results'] );
+ // And sometimes we expect a different last result
+ $expected = isset( $case['offsetresult'] ) ?
+ array_merge( $case['results'], $case['offsetresult'] ) :
+ $case['results'];
+
+ $this->assertEquals(
+ $expected,
+ $results,
+ $case[0]
+ );
+ }
+
+ public static function provideSearchBackend() {
+ return array(
+ array( array(
+ 'Simple case',
+ 'provision' => array(
+ 'Bar',
+ 'Barcelona',
+ 'Barbara',
+ ),
+ 'query' => 'Bar',
+ 'results' => array(
+ 'Bar',
+ 'Barcelona',
+ 'Barbara',
+ ),
+ ) ),
+ array( array(
+ 'Exact match not on top (bug 70958)',
+ 'provision' => array(
+ 'Barcelona',
+ 'Bar',
+ 'Barbara',
+ ),
+ 'query' => 'Bar',
+ 'results' => array(
+ 'Bar',
+ 'Barcelona',
+ 'Barbara',
+ ),
+ ) ),
+ array( array(
+ 'Exact match missing (bug 70958)',
+ 'provision' => array(
+ 'Barcelona',
+ 'Barbara',
+ 'Bart',
+ ),
+ 'query' => 'Bar',
+ 'results' => array(
+ 'Bar',
+ 'Barcelona',
+ 'Barbara',
+ ),
+ ) ),
+ array( array(
+ 'Exact match missing and not existing',
+ 'provision' => array(
+ 'Exile',
+ 'Exist',
+ 'External',
+ ),
+ 'query' => 'Ex',
+ 'results' => array(
+ 'Exile',
+ 'Exist',
+ 'External',
+ ),
+ ) ),
+ array( array(
+ "Exact match shouldn't override already found match if " .
+ "exact is redirect and found isn't",
+ 'provision' => array(
+ // Target of the exact match is low in the list
+ 'Redirect Test Worse Result',
+ 'Redirect Test',
+ ),
+ 'query' => 'redirect test',
+ 'results' => array(
+ // Redirect target is pulled up and exact match isn't added
+ 'Redirect Test',
+ 'Redirect Test Worse Result',
+ ),
+ ) ),
+ array( array(
+ "Exact match shouldn't override already found match if " .
+ "both exact match and found match are redirect",
+ 'provision' => array(
+ // Another redirect to the same target as the exact match
+ // is low in the list
+ 'Redirect Test2 Worse Result',
+ 'Redirect test2',
+ ),
+ 'query' => 'redirect TEST2',
+ 'results' => array(
+ // Found redirect is pulled to the top and exact match isn't
+ // added
+ 'Redirect test2',
+ 'Redirect Test2 Worse Result',
+ ),
+ ) ),
+ array( array(
+ "Exact match should override any already found matches that " .
+ "are redirects to it",
+ 'provision' => array(
+ // Another redirect to the same target as the exact match
+ // is low in the list
+ 'Redirect Test Worse Result',
+ 'Redirect test',
+ ),
+ 'query' => 'Redirect Test',
+ 'results' => array(
+ // Found redirect is pulled to the top and exact match isn't
+ // added
+ 'Redirect Test',
+ 'Redirect Test Worse Result',
+ ),
+ ) ),
+ );
+ }
+
+ /**
+ * @dataProvider provideSearchBackend
+ * @covers PrefixSearch::searchBackend
+ */
+ public function testSearchBackend( Array $case ) {
+ $this->searchProvision( $case['provision'] );
+ $searcher = new StringPrefixSearch;
+ $results = $searcher->search( $case['query'], 3 );
+ $this->assertEquals(
+ $case['results'],
+ $results,
+ $case[0]
+ );
+ }
+}
diff --git a/tests/phpunit/includes/SampleTest.php b/tests/phpunit/includes/SampleTest.php
index 25858110..c5944d16 100644
--- a/tests/phpunit/includes/SampleTest.php
+++ b/tests/phpunit/includes/SampleTest.php
@@ -97,7 +97,7 @@ class TestSample extends MediaWikiLangTestCase {
// @codingStandardsIgnoreStart Ignore long line warning
/**
- * @expectedException MWException object
+ * @expectedException InvalidArgumentException
* See http://phpunit.de/manual/3.7/en/appendixes.annotations.html#appendixes.annotations.expectedException
*/
// @codingStandardsIgnoreEnd
diff --git a/tests/phpunit/includes/SanitizerTest.php b/tests/phpunit/includes/SanitizerTest.php
index 50c1e509..c615c460 100644
--- a/tests/phpunit/includes/SanitizerTest.php
+++ b/tests/phpunit/includes/SanitizerTest.php
@@ -6,12 +6,6 @@
*/
class SanitizerTest extends MediaWikiTestCase {
- protected function setUp() {
- parent::setUp();
-
- AutoLoader::loadClass( 'Sanitizer' );
- }
-
/**
* @covers Sanitizer::decodeCharReferences
*/
@@ -85,7 +79,7 @@ class SanitizerTest extends MediaWikiTestCase {
*/
public function testInvalidNumberedEntities() {
$this->assertEquals(
- UTF8_REPLACEMENT,
+ UtfNormal\Constants::UTF8_REPLACEMENT,
Sanitizer::decodeCharReferences( "&#88888888888888;" ),
'Invalid numbered entity'
);
@@ -346,4 +340,25 @@ class SanitizerTest extends MediaWikiTestCase {
$message
);
}
+
+ /**
+ * @dataProvider provideEscapeHtmlAllowEntities
+ * @covers Sanitizer::escapeHtmlAllowEntities
+ */
+ public function testEscapeHtmlAllowEntities( $expected, $html ) {
+ $this->assertEquals(
+ $expected,
+ Sanitizer::escapeHtmlAllowEntities( $html )
+ );
+ }
+
+ public static function provideEscapeHtmlAllowEntities() {
+ return array(
+ array( 'foo', 'foo' ),
+ array( 'a¡b', 'a&#161;b' ),
+ array( 'foo&#039;bar', "foo'bar" ),
+ array( '&lt;script&gt;foo&lt;/script&gt;', '<script>foo</script>' ),
+ );
+ }
+
}
diff --git a/tests/phpunit/includes/StatusTest.php b/tests/phpunit/includes/StatusTest.php
index 628c59b6..c013f4fc 100644
--- a/tests/phpunit/includes/StatusTest.php
+++ b/tests/phpunit/includes/StatusTest.php
@@ -57,6 +57,17 @@ class StatusTest extends MediaWikiLangTestCase {
}
/**
+ *
+ */
+ public function testOkAndErrors() {
+ $status = Status::newGood( 'foo' );
+ $this->assertTrue( $status->ok );
+ $status = Status::newFatal( 'foo', 1, 2 );
+ $this->assertFalse( $status->ok );
+ $this->assertArrayEquals( array( array( 'type' => 'error', 'message' => 'foo', 'params' => array( 1, 2 ) ) ), $status->errors );
+ }
+
+ /**
* @dataProvider provideSetResult
* @covers Status::setResult
*/
@@ -109,7 +120,9 @@ class StatusTest extends MediaWikiLangTestCase {
public function testIsGood( $ok, $errors, $expected ) {
$status = new Status();
$status->ok = $ok;
- $status->errors = $errors;
+ foreach ( $errors as $error ) {
+ $status->warning( $error );
+ }
$this->assertEquals( $expected, $status->isGood() );
}
diff --git a/tests/phpunit/includes/TemplateParserTest.php b/tests/phpunit/includes/TemplateParserTest.php
new file mode 100644
index 00000000..81854ff3
--- /dev/null
+++ b/tests/phpunit/includes/TemplateParserTest.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * @group Templates
+ */
+class TemplateParserTest extends MediaWikiTestCase {
+
+ protected $templateDir;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( array(
+ 'wgSecretKey' => 'foo',
+ 'wgMemc' => new EmptyBagOStuff(),
+ ) );
+
+ $this->templateDir = dirname( __DIR__ ) . '/data/templates/';
+ }
+
+ /**
+ * @dataProvider provideProcessTemplate
+ * @covers TemplateParser::processTemplate
+ * @covers TemplateParser::getTemplate
+ * @covers TemplateParser::getTemplateFilename
+ */
+ public function testProcessTemplate( $name, $args, $result, $exception = false ) {
+ if ( $exception ) {
+ $this->setExpectedException( $exception );
+ }
+ $tp = new TemplateParser( $this->templateDir );
+ $this->assertEquals( $result, $tp->processTemplate( $name, $args ) );
+ }
+
+ public static function provideProcessTemplate() {
+ return array(
+ array(
+ 'foobar',
+ array(),
+ "hello world!\n"
+ ),
+ array(
+ 'foobar_args',
+ array(
+ 'planet' => 'world',
+ ),
+ "hello world!\n",
+ ),
+ array(
+ '../foobar',
+ array(),
+ false,
+ 'UnexpectedValueException'
+ ),
+ array(
+ 'nonexistenttemplate',
+ array(),
+ false,
+ 'RuntimeException',
+ )
+ );
+ }
+}
diff --git a/tests/phpunit/includes/TestUser.php b/tests/phpunit/includes/TestUser.php
index 610a6acd..754568d0 100644
--- a/tests/phpunit/includes/TestUser.php
+++ b/tests/phpunit/includes/TestUser.php
@@ -5,24 +5,41 @@
* like password if we log in via the API.
*/
class TestUser {
+ /**
+ * @deprecated Since 1.25. Use TestUser::getUser()->getName()
+ * @private
+ * @var string
+ */
public $username;
+
+ /**
+ * @deprecated Since 1.25. Use TestUser::getPassword()
+ * @private
+ * @var string
+ */
public $password;
- public $email;
- public $groups;
+
+ /**
+ * @deprecated Since 1.25. Use TestUser::getUser()
+ * @private
+ * @var User
+ */
public $user;
+ private function assertNotReal() {
+ global $wgDBprefix;
+ if ( $wgDBprefix !== MediaWikiTestCase::DB_PREFIX && $wgDBprefix !== MediaWikiTestCase::ORA_DB_PREFIX ) {
+ throw new MWException( "Can't create user on real database" );
+ }
+ }
+
public function __construct( $username, $realname = 'Real Name',
$email = 'sample@example.com', $groups = array()
) {
- $this->username = $username;
- $this->realname = $realname;
- $this->email = $email;
- $this->groups = $groups;
+ $this->assertNotReal();
- // don't allow user to hardcode or select passwords -- people sometimes run tests
- // on live wikis. Sometimes we create sysop users in these tests. A sysop user with
- // a known password would be a Bad Thing.
- $this->password = User::randomPassword();
+ $this->username = $username;
+ $this->password = 'TestUser';
$this->user = User::newFromName( $this->username );
$this->user->load();
@@ -31,32 +48,99 @@ class TestUser {
// But for now, we just need to create or update the user with the desired properties.
// we particularly need the new password, since we just generated it randomly.
// In core MediaWiki, there is no functionality to delete users, so this is the best we can do.
- if ( !$this->user->getID() ) {
+ if ( !$this->user->isLoggedIn() ) {
// create the user
$this->user = User::createNew(
$this->username, array(
- "email" => $this->email,
- "real_name" => $this->realname
+ "email" => $email,
+ "real_name" => $realname
)
);
+
if ( !$this->user ) {
- throw new Exception( "error creating user" );
+ throw new MWException( "Error creating TestUser " . $username );
}
}
- // update the user to use the new random password and other details
- $this->user->setPassword( $this->password );
- $this->user->setEmail( $this->email );
- $this->user->setRealName( $this->realname );
+ // Update the user to use the password and other details
+ $change = $this->setPassword( $this->password ) ||
+ $this->setEmail( $email ) ||
+ $this->setRealName( $realname );
// Adjust groups by adding any missing ones and removing any extras
$currentGroups = $this->user->getGroups();
- foreach ( array_diff( $this->groups, $currentGroups ) as $group ) {
+ foreach ( array_diff( $groups, $currentGroups ) as $group ) {
$this->user->addGroup( $group );
}
- foreach ( array_diff( $currentGroups, $this->groups ) as $group ) {
+ foreach ( array_diff( $currentGroups, $groups ) as $group ) {
$this->user->removeGroup( $group );
}
- $this->user->saveSettings();
+ if ( $change ) {
+ $this->user->saveSettings();
+ }
+ }
+
+ /**
+ * @param string $realname
+ * @return bool
+ */
+ private function setRealName( $realname ) {
+ if ( $this->user->getRealName() !== $realname ) {
+ $this->user->setRealName( $realname );
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @param string $email
+ * @return bool
+ */
+ private function setEmail( $email ) {
+ if ( $this->user->getEmail() !== $email ) {
+ $this->user->setEmail( $email );
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @param string $password
+ * @return bool
+ */
+ private function setPassword( $password ) {
+ $passwordFactory = $this->user->getPasswordFactory();
+ $oldDefaultType = $passwordFactory->getDefaultType();
+
+ // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
+ $passwordFactory->setDefaultType( 'A' );
+ $newPassword = $passwordFactory->newFromPlaintext( $password, $this->user->getPassword() );
+
+ $change = false;
+ if ( !$this->user->getPassword()->equals( $newPassword ) ) {
+ // Password changed
+ $this->user->setPassword( $password );
+ $change = true;
+ }
+
+ $passwordFactory->setDefaultType( $oldDefaultType );
+
+ return $change;
+ }
+
+ /**
+ * @return User
+ */
+ public function getUser() {
+ return $this->user;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPassword() {
+ return $this->password;
}
}
diff --git a/tests/phpunit/includes/TestingAccessWrapper.php b/tests/phpunit/includes/TestingAccessWrapper.php
new file mode 100644
index 00000000..84c0f9b5
--- /dev/null
+++ b/tests/phpunit/includes/TestingAccessWrapper.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Circumvent access restrictions on object internals
+ *
+ * This can be helpful for writing tests that can probe object internals,
+ * without having to modify the class under test to accomodate.
+ *
+ * Wrap an object with private methods as follows:
+ * $title = TestingAccessWrapper::newFromObject( Title::newFromDBkey( $key ) );
+ *
+ * You can access private and protected instance methods and variables:
+ * $formatter = $title->getTitleFormatter();
+ *
+ * TODO:
+ * - Provide access to static methods and properties.
+ * - Organize other helper classes in tests/testHelpers.inc into a directory.
+ */
+class TestingAccessWrapper {
+ public $object;
+
+ /**
+ * Return the same object, without access restrictions.
+ */
+ public static function newFromObject( $object ) {
+ $wrapper = new TestingAccessWrapper();
+ $wrapper->object = $object;
+ return $wrapper;
+ }
+
+ public function __call( $method, $args ) {
+ $classReflection = new ReflectionClass( $this->object );
+ $methodReflection = $classReflection->getMethod( $method );
+ $methodReflection->setAccessible( true );
+ return $methodReflection->invokeArgs( $this->object, $args );
+ }
+
+ public function __set( $name, $value ) {
+ $classReflection = new ReflectionClass( $this->object );
+ $propertyReflection = $classReflection->getProperty( $name );
+ $propertyReflection->setAccessible( true );
+ $propertyReflection->setValue( $this->object, $value );
+ }
+
+ public function __get( $name ) {
+ $classReflection = new ReflectionClass( $this->object );
+ $propertyReflection = $classReflection->getProperty( $name );
+ $propertyReflection->setAccessible( true );
+ return $propertyReflection->getValue( $this->object );
+ }
+}
diff --git a/tests/phpunit/includes/TestingAccessWrapperTest.php b/tests/phpunit/includes/TestingAccessWrapperTest.php
new file mode 100644
index 00000000..7e5b91a1
--- /dev/null
+++ b/tests/phpunit/includes/TestingAccessWrapperTest.php
@@ -0,0 +1,34 @@
+<?php
+
+class TestingAccessWrapperTest extends MediaWikiTestCase {
+ protected $raw;
+ protected $wrapped;
+
+ function setUp() {
+ parent::setUp();
+
+ require_once __DIR__ . '/../data/helpers/WellProtectedClass.php';
+ $this->raw = new WellProtectedClass();
+ $this->wrapped = TestingAccessWrapper::newFromObject( $this->raw );
+ }
+
+ function testGetProperty() {
+ $this->assertSame( 1, $this->wrapped->property );
+ }
+
+ function testSetProperty() {
+ $this->wrapped->property = 10;
+ $this->assertSame( 10, $this->wrapped->property );
+ $this->assertSame( 10, $this->raw->getProperty() );
+ }
+
+ function testCallMethod() {
+ $this->wrapped->incrementPropertyValue();
+ $this->assertSame( 2, $this->wrapped->property );
+ $this->assertSame( 2, $this->raw->getProperty() );
+ }
+
+ function testCallMethodTwoArgs() {
+ $this->assertSame( 'two', $this->wrapped->whatSecondArg( 'one', 'two' ) );
+ }
+}
diff --git a/tests/phpunit/includes/TitleMethodsTest.php b/tests/phpunit/includes/TitleMethodsTest.php
index 5904facd..e186438b 100644
--- a/tests/phpunit/includes/TitleMethodsTest.php
+++ b/tests/phpunit/includes/TitleMethodsTest.php
@@ -7,7 +7,7 @@
* @note We don't make assumptions about the main namespace.
* But we do expect the Help namespace to contain Wikitext.
*/
-class TitleMethodsTest extends MediaWikiTestCase {
+class TitleMethodsTest extends MediaWikiLangTestCase {
protected function setUp() {
global $wgContLang;
@@ -297,4 +297,43 @@ class TitleMethodsTest extends MediaWikiTestCase {
$title = Title::newFromText( $title );
$this->assertEquals( $expectedBool, $title->isWikitextPage() );
}
+
+ public static function provideGetOtherPage() {
+ return array(
+ array( 'Main Page', 'Talk:Main Page' ),
+ array( 'Talk:Main Page', 'Main Page' ),
+ array( 'Help:Main Page', 'Help talk:Main Page' ),
+ array( 'Help talk:Main Page', 'Help:Main Page' ),
+ array( 'Special:FooBar', null ),
+ );
+ }
+
+ /**
+ * @dataProvider provideGetOtherpage
+ * @covers Title::getOtherPage
+ *
+ * @param string $text
+ * @param string|null $expected
+ */
+ public function testGetOtherPage( $text, $expected ) {
+ if ( $expected === null ) {
+ $this->setExpectedException( 'MWException' );
+ }
+
+ $title = Title::newFromText( $text );
+ $this->assertEquals( $expected, $title->getOtherPage()->getPrefixedText() );
+ }
+
+ public function testClearCaches() {
+ $linkCache = LinkCache::singleton();
+
+ $title1 = Title::newFromText( 'Foo' );
+ $linkCache->addGoodLinkObj( 23, $title1 );
+
+ Title::clearCaches();
+
+ $title2 = Title::newFromText( 'Foo' );
+ $this->assertNotSame( $title1, $title2, 'title cache should be empty' );
+ $this->assertEquals( 0, $linkCache->getGoodLinkID( 'Foo' ), 'link cache should be empty' );
+ }
}
diff --git a/tests/phpunit/includes/TitlePermissionTest.php b/tests/phpunit/includes/TitlePermissionTest.php
index d2400b3f..022c7d53 100644
--- a/tests/phpunit/includes/TitlePermissionTest.php
+++ b/tests/phpunit/includes/TitlePermissionTest.php
@@ -326,6 +326,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
$this->setUserPerm( null );
$this->assertEquals( $check[$action][0],
$this->title->getUserPermissionsErrors( $action, $this->user, true ) );
+ $this->assertEquals( $check[$action][0],
+ $this->title->getUserPermissionsErrors( $action, $this->user, 'full' ) );
+ $this->assertEquals( $check[$action][0],
+ $this->title->getUserPermissionsErrors( $action, $this->user, 'secure' ) );
global $wgGroupPermissions;
$old = $wgGroupPermissions;
@@ -333,11 +337,19 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
$this->assertEquals( $check[$action][1],
$this->title->getUserPermissionsErrors( $action, $this->user, true ) );
+ $this->assertEquals( $check[$action][1],
+ $this->title->getUserPermissionsErrors( $action, $this->user, 'full' ) );
+ $this->assertEquals( $check[$action][1],
+ $this->title->getUserPermissionsErrors( $action, $this->user, 'secure' ) );
$wgGroupPermissions = $old;
$this->setUserPerm( $action );
$this->assertEquals( $check[$action][2],
$this->title->getUserPermissionsErrors( $action, $this->user, true ) );
+ $this->assertEquals( $check[$action][2],
+ $this->title->getUserPermissionsErrors( $action, $this->user, 'full' ) );
+ $this->assertEquals( $check[$action][2],
+ $this->title->getUserPermissionsErrors( $action, $this->user, 'secure' ) );
$this->setUserPerm( $action );
$this->assertEquals( $check[$action][3],
@@ -403,7 +415,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
$this->setTitle( NS_USER );
$this->setUserPerm( '' );
- $this->assertEquals( array( array( 'badaccess-group0' ), array( 'namespaceprotected', 'User', 'bogus' ) ),
+ $this->assertEquals( array( array( 'badaccess-group0' ),
+ array( 'namespaceprotected', 'User', 'bogus' ) ),
$this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
$this->setTitle( NS_MEDIAWIKI );
@@ -630,7 +643,8 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
$this->assertEquals( false,
$this->title->userCan( 'bogus', $this->user ) );
- $this->assertEquals( array( array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n", 'bogus' ),
+ $this->assertEquals( array(
+ array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n", 'bogus' ),
array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n", 'bogus' ),
array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n", 'bogus' ) ),
$this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
@@ -648,10 +662,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
public function testActionPermissions() {
$this->setUserPerm( array( "createpage" ) );
$this->setTitle( NS_MAIN, "test page" );
- $this->title->mTitleProtection['pt_create_perm'] = '';
- $this->title->mTitleProtection['pt_user'] = $this->user->getID();
- $this->title->mTitleProtection['pt_expiry'] = wfGetDB( DB_SLAVE )->getInfinity();
- $this->title->mTitleProtection['pt_reason'] = 'test';
+ $this->title->mTitleProtection['permission'] = '';
+ $this->title->mTitleProtection['user'] = $this->user->getID();
+ $this->title->mTitleProtection['expiry'] = wfGetDB( DB_SLAVE )->getInfinity();
+ $this->title->mTitleProtection['reason'] = 'test';
$this->title->mCascadeRestriction = false;
$this->assertEquals( array( array( 'titleprotected', 'Useruser', 'test' ) ),
@@ -659,7 +673,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
$this->assertEquals( false,
$this->title->userCan( 'create', $this->user ) );
- $this->title->mTitleProtection['pt_create_perm'] = 'sysop';
+ $this->title->mTitleProtection['permission'] = 'editprotected';
$this->setUserPerm( array( 'createpage', 'protect' ) );
$this->assertEquals( array( array( 'titleprotected', 'Useruser', 'test' ) ),
$this->title->getUserPermissionsErrors( 'create', $this->user ) );
diff --git a/tests/phpunit/includes/TitleTest.php b/tests/phpunit/includes/TitleTest.php
index fb58381f..d55f958b 100644
--- a/tests/phpunit/includes/TitleTest.php
+++ b/tests/phpunit/includes/TitleTest.php
@@ -14,6 +14,7 @@ class TitleTest extends MediaWikiTestCase {
'wgLang' => Language::factory( 'en' ),
'wgAllowUserJs' => false,
'wgDefaultLanguageVariant' => false,
+ 'wgMetaNamespace' => 'Project',
) );
}
@@ -324,36 +325,19 @@ class TitleTest extends MediaWikiTestCase {
$whitelistRegexp = array( $whitelistRegexp );
}
+ $this->setMwGlobals( array(
+ // So User::isEveryoneAllowed( 'read' ) === false
+ 'wgGroupPermissions' => array( '*' => array( 'read' => false ) ),
+ 'wgWhitelistRead' => array( 'some random non sense title' ),
+ 'wgWhitelistReadRegexp' => $whitelistRegexp,
+ ) );
+
$title = Title::newFromDBkey( $source );
- global $wgGroupPermissions;
- $oldPermissions = $wgGroupPermissions;
- // Disallow all so we can ensure our regex works
- $wgGroupPermissions = array();
- $wgGroupPermissions['*']['read'] = false;
-
- global $wgWhitelistRead;
- $oldWhitelist = $wgWhitelistRead;
- // Undo any LocalSettings explicite whitelists so they won't cause a
- // failing test to succeed. Set it to some random non sense just
- // to make sure we properly test Title::checkReadPermissions()
- $wgWhitelistRead = array( 'some random non sense title' );
-
- global $wgWhitelistReadRegexp;
- $oldWhitelistRegexp = $wgWhitelistReadRegexp;
- $wgWhitelistReadRegexp = $whitelistRegexp;
-
- // Just use $wgUser which in test is a user object for '127.0.0.1'
- global $wgUser;
- // Invalidate user rights cache to take in account $wgGroupPermissions
- // change above.
- $wgUser->clearInstanceCache();
- $errors = $title->userCan( $action, $wgUser );
-
- // Restore globals
- $wgGroupPermissions = $oldPermissions;
- $wgWhitelistRead = $oldWhitelist;
- $wgWhitelistReadRegexp = $oldWhitelistRegexp;
+ // New anonymous user with no rights
+ $user = new User;
+ $user->mRights = array();
+ $errors = $title->userCan( $action, $user );
if ( is_bool( $expected ) ) {
# Forge the assertion message depending on the assertion expectation
@@ -428,14 +412,14 @@ class TitleTest extends MediaWikiTestCase {
public function testGetPageViewLanguage( $expected, $titleText, $contLang,
$lang, $variant, $msg = ''
) {
- global $wgLanguageCode, $wgContLang, $wgLang, $wgDefaultLanguageVariant, $wgAllowUserJs;
-
// Setup environnement for this test
- $wgLanguageCode = $contLang;
- $wgContLang = Language::factory( $contLang );
- $wgLang = Language::factory( $lang );
- $wgDefaultLanguageVariant = $variant;
- $wgAllowUserJs = true;
+ $this->setMwGlobals( array(
+ 'wgLanguageCode' => $contLang,
+ 'wgContLang' => Language::factory( $contLang ),
+ 'wgLang' => Language::factory( $lang ),
+ 'wgDefaultLanguageVariant' => $variant,
+ 'wgAllowUserJs' => true,
+ ) );
$title = Title::newFromText( $titleText );
$this->assertInstanceOf( 'Title', $title,
diff --git a/tests/phpunit/includes/UserTest.php b/tests/phpunit/includes/UserTest.php
index af95a721..b74a7ead 100644
--- a/tests/phpunit/includes/UserTest.php
+++ b/tests/phpunit/includes/UserTest.php
@@ -214,8 +214,10 @@ class UserTest extends MediaWikiTestCase {
*/
public function testEditCount() {
$user = User::newFromName( 'UnitTestUser' );
- $user->loadDefaults();
- $user->addToDatabase();
+
+ if ( !$user->getId() ) {
+ $user->addToDatabase();
+ }
// let the user have a few (3) edits
$page = WikiPage::factory( Title::newFromText( 'Help:UserTest_EditCount' ) );
@@ -248,14 +250,17 @@ class UserTest extends MediaWikiTestCase {
*/
public function testOptions() {
$user = User::newFromName( 'UnitTestUser' );
- $user->addToDatabase();
- $user->setOption( 'someoption', 'test' );
+ if ( !$user->getId() ) {
+ $user->addToDatabase();
+ }
+
+ $user->setOption( 'userjs-someoption', 'test' );
$user->setOption( 'cols', 200 );
$user->saveSettings();
$user = User::newFromName( 'UnitTestUser' );
- $this->assertEquals( 'test', $user->getOption( 'someoption' ) );
+ $this->assertEquals( 'test', $user->getOption( 'userjs-someoption' ) );
$this->assertEquals( 200, $user->getOption( 'cols' ) );
}
@@ -266,9 +271,9 @@ class UserTest extends MediaWikiTestCase {
*/
public function testAnonOptions() {
global $wgDefaultUserOptions;
- $this->user->setOption( 'someoption', 'test' );
+ $this->user->setOption( 'userjs-someoption', 'test' );
$this->assertEquals( $wgDefaultUserOptions['cols'], $this->user->getOption( 'cols' ) );
- $this->assertEquals( 'test', $this->user->getOption( 'someoption' ) );
+ $this->assertEquals( 'test', $this->user->getOption( 'userjs-someoption' ) );
}
/**
@@ -276,12 +281,10 @@ class UserTest extends MediaWikiTestCase {
* @covers User::getPasswordExpired()
*/
public function testPasswordExpire() {
- global $wgPasswordExpireGrace;
- $wgTemp = $wgPasswordExpireGrace;
- $wgPasswordExpireGrace = 3600 * 24 * 7; // 7 days
+ $this->setMwGlobals( 'wgPasswordExpireGrace', 3600 * 24 * 7 ); // 7 days
$user = User::newFromName( 'UnitTestUser' );
- $user->loadDefaults();
+ $user->loadDefaults( 'UnitTestUser' );
$this->assertEquals( false, $user->getPasswordExpired() );
$ts = time() - ( 3600 * 24 * 1 ); // 1 day ago
@@ -291,8 +294,6 @@ class UserTest extends MediaWikiTestCase {
$ts = time() - ( 3600 * 24 * 10 ); // 10 days ago
$user->expirePassword( $ts );
$this->assertEquals( 'hard', $user->getPasswordExpired() );
-
- $wgPasswordExpireGrace = $wgTemp;
}
/**
@@ -343,8 +344,8 @@ class UserTest extends MediaWikiTestCase {
public function testGetCanonicalName( $name, $expectedArray, $msg ) {
foreach ( $expectedArray as $validate => $expected ) {
$this->assertEquals(
- User::getCanonicalName( $name, $validate === 'false' ? false : $validate ),
$expected,
+ User::getCanonicalName( $name, $validate === 'false' ? false : $validate ),
$msg . ' (' . $validate . ')'
);
}
@@ -352,8 +353,8 @@ class UserTest extends MediaWikiTestCase {
public static function provideGetCanonicalName() {
return array(
- array( ' trailing space ', array( 'creatable' => 'Trailing space' ), 'Trailing spaces' ),
- // @todo FIXME: Maybe the createable name should be 'Talk:Username' or false to reject?
+ array( ' Trailing space ', array( 'creatable' => 'Trailing space' ), 'Trailing spaces' ),
+ // @todo FIXME: Maybe the creatable name should be 'Talk:Username' or false to reject?
array( 'Talk:Username', array( 'creatable' => 'Username', 'usable' => 'Username',
'valid' => 'Username', 'false' => 'Talk:Username' ), 'Namespace prefix' ),
array( ' name with # hash', array( 'creatable' => false, 'usable' => false ), 'With hash' ),
@@ -366,4 +367,62 @@ class UserTest extends MediaWikiTestCase {
'false' => 'With / slash' ), 'With slash' ),
);
}
+
+ /**
+ * @covers User::equals
+ */
+ public function testEquals() {
+ $first = User::newFromName( 'EqualUser' );
+ $second = User::newFromName( 'EqualUser' );
+
+ $this->assertTrue( $first->equals( $first ) );
+ $this->assertTrue( $first->equals( $second ) );
+ $this->assertTrue( $second->equals( $first ) );
+
+ $third = User::newFromName( '0' );
+ $fourth = User::newFromName( '000' );
+
+ $this->assertFalse( $third->equals( $fourth ) );
+ $this->assertFalse( $fourth->equals( $third ) );
+
+ // Test users loaded from db with id
+ $user = User::newFromName( 'EqualUnitTestUser' );
+ if ( !$user->getId() ) {
+ $user->addToDatabase();
+ }
+
+ $id = $user->getId();
+
+ $fifth = User::newFromId( $id );
+ $sixth = User::newFromName( 'EqualUnitTestUser' );
+ $this->assertTrue( $fifth->equals( $sixth ) );
+ }
+
+ /**
+ * @covers User::getId
+ */
+ public function testGetId() {
+ $user = User::newFromName( 'UTSysop' );
+ $this->assertTrue( $user->getId() > 0 );
+
+ }
+
+ /**
+ * @covers User::isLoggedIn
+ * @covers User::isAnon
+ */
+ public function testLoggedIn() {
+ $user = User::newFromName( 'UTSysop' );
+ $this->assertTrue( $user->isLoggedIn() );
+ $this->assertFalse( $user->isAnon() );
+
+ // Non-existent users are perceived as anonymous
+ $user = User::newFromName( 'UTNonexistent' );
+ $this->assertFalse( $user->isLoggedIn() );
+ $this->assertTrue( $user->isAnon() );
+
+ $user = new User;
+ $this->assertFalse( $user->isLoggedIn() );
+ $this->assertTrue( $user->isAnon() );
+ }
}
diff --git a/tests/phpunit/includes/XmlSelectTest.php b/tests/phpunit/includes/XmlSelectTest.php
index 9f154bb7..0e03add4 100644
--- a/tests/phpunit/includes/XmlSelectTest.php
+++ b/tests/phpunit/includes/XmlSelectTest.php
@@ -166,7 +166,7 @@ class XmlSelectTest extends MediaWikiTestCase {
'razor'
);
- # inexistant keys should give us 'null'
+ # inexistent keys should give us 'null'
$this->assertEquals(
$this->select->getAttribute( 'I DO NOT EXIT' ),
null
diff --git a/tests/phpunit/includes/XmlTest.php b/tests/phpunit/includes/XmlTest.php
index e6558819..382e3d89 100644
--- a/tests/phpunit/includes/XmlTest.php
+++ b/tests/phpunit/includes/XmlTest.php
@@ -81,7 +81,7 @@ class XmlTest extends MediaWikiTestCase {
*/
public function testElementInputCanHaveAValueOfZero() {
$this->assertEquals(
- '<input name="name" value="0" class="mw-ui-input" />',
+ '<input name="name" value="0" />',
Xml::input( 'name', false, 0 ),
'Input with a value of 0 (bug 23797)'
);
@@ -152,7 +152,7 @@ class XmlTest extends MediaWikiTestCase {
$this->assertEquals(
'<label for="year">From year (and earlier):</label> ' .
- '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" class="mw-ui-input" /> ' .
+ '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> ' .
'<label for="month">From month (and earlier):</label> ' .
'<select id="month" name="month" class="mw-month-selector">' .
'<option value="-1">all</option>' . "\n" .
@@ -173,7 +173,7 @@ class XmlTest extends MediaWikiTestCase {
);
$this->assertEquals(
'<label for="year">From year (and earlier):</label> ' .
- '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" class="mw-ui-input" /> ' .
+ '<input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> ' .
'<label for="month">From month (and earlier):</label> ' .
'<select id="month" name="month" class="mw-month-selector">' .
'<option value="-1">all</option>' . "\n" .
@@ -207,7 +207,7 @@ class XmlTest extends MediaWikiTestCase {
$this->assertEquals(
'<label for="year">From year (and earlier):</label> ' .
- '<input id="year" maxlength="4" size="7" type="number" name="year" class="mw-ui-input" /> ' .
+ '<input id="year" maxlength="4" size="7" type="number" name="year" /> ' .
'<label for="month">From month (and earlier):</label> ' .
'<select id="month" name="month" class="mw-month-selector">' .
'<option value="-1">all</option>' . "\n" .
@@ -233,7 +233,7 @@ class XmlTest extends MediaWikiTestCase {
*/
public function testTextareaNoContent() {
$this->assertEquals(
- '<textarea name="name" id="name" cols="40" rows="5" class="mw-ui-input"></textarea>',
+ '<textarea name="name" id="name" cols="40" rows="5"></textarea>',
Xml::textarea( 'name', '' ),
'textarea() with not content'
);
@@ -244,7 +244,7 @@ class XmlTest extends MediaWikiTestCase {
*/
public function testTextareaAttribs() {
$this->assertEquals(
- '<textarea name="name" id="name" cols="20" rows="10" class="mw-ui-input">&lt;txt&gt;</textarea>',
+ '<textarea name="name" id="name" cols="20" rows="10">&lt;txt&gt;</textarea>',
Xml::textarea( 'name', '<txt>', 20, 10 ),
'textarea() with custom attribs'
);
diff --git a/tests/phpunit/includes/actions/ActionTest.php b/tests/phpunit/includes/actions/ActionTest.php
index cc6fb11a..3babb97f 100644
--- a/tests/phpunit/includes/actions/ActionTest.php
+++ b/tests/phpunit/includes/actions/ActionTest.php
@@ -3,7 +3,6 @@
/**
* @covers Action
*
- * @licence GNU GPL v2+
* @author Thiemo Mättig
*
* @group Action
@@ -20,7 +19,7 @@ class ActionTest extends MediaWikiTestCase {
'disabled' => false,
'view' => true,
'edit' => true,
- 'revisiondelete' => true,
+ 'revisiondelete' => 'SpecialPageAction',
'dummy' => true,
'string' => 'NamedDummyAction',
'declared' => 'NonExistingClassName',
@@ -117,6 +116,15 @@ class ActionTest extends MediaWikiTestCase {
$this->assertEquals( 'revisiondelete', $actionName );
}
+ public function testGetActionName_whenCanNotUseWikiPage_defaultsToView() {
+ $request = new FauxRequest( array( 'action' => 'edit' ) );
+ $context = new DerivativeContext( RequestContext::getMain() );
+ $context->setRequest( $request );
+ $actionName = Action::getActionName( $context );
+
+ $this->assertEquals( 'view', $actionName );
+ }
+
/**
* @dataProvider actionProvider
* @param string $requestedAction
diff --git a/tests/phpunit/includes/api/ApiContinuationManagerTest.php b/tests/phpunit/includes/api/ApiContinuationManagerTest.php
new file mode 100644
index 00000000..2edf0c6f
--- /dev/null
+++ b/tests/phpunit/includes/api/ApiContinuationManagerTest.php
@@ -0,0 +1,195 @@
+<?php
+
+/**
+ * @covers ApiContinuationManager
+ * @group API
+ */
+class ApiContinuationManagerTest extends MediaWikiTestCase {
+
+ private static function getManager( $continue, $allModules, $generatedModules ) {
+ $context = new DerivativeContext( RequestContext::getMain() );
+ $context->setRequest( new FauxRequest( array( 'continue' => $continue ) ) );
+ $main = new ApiMain( $context );
+ return new ApiContinuationManager( $main, $allModules, $generatedModules );
+ }
+
+ public function testContinuation() {
+ $allModules = array(
+ new MockApiQueryBase( 'mock1' ),
+ new MockApiQueryBase( 'mock2' ),
+ new MockApiQueryBase( 'mocklist' ),
+ );
+ $generator = new MockApiQueryBase( 'generator' );
+
+ $manager = self::getManager( '', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( 'ApiMain', $manager->getSource() );
+ $this->assertSame( false, $manager->isGeneratorDone() );
+ $this->assertSame( $allModules, $manager->getRunModules() );
+ $manager->addContinueParam( $allModules[0], 'm1continue', array( 1, 2 ) );
+ $manager->addContinueParam( $allModules[2], 'mlcontinue', 2 );
+ $manager->addGeneratorContinueParam( $generator, 'gcontinue', 3 );
+ $this->assertSame( array( array(
+ 'mlcontinue' => 2,
+ 'm1continue' => '1|2',
+ 'continue' => '||mock2',
+ ), false ), $manager->getContinuation() );
+ $this->assertSame( array(
+ 'mock1' => array( 'm1continue' => '1|2' ),
+ 'mocklist' => array( 'mlcontinue' => 2 ),
+ 'generator' => array( 'gcontinue' => 3 ),
+ ), $manager->getRawContinuation() );
+
+ $result = new ApiResult( 0 );
+ $manager->setContinuationIntoResult( $result );
+ $this->assertSame( array(
+ 'mlcontinue' => 2,
+ 'm1continue' => '1|2',
+ 'continue' => '||mock2',
+ ), $result->getResultData( 'continue' ) );
+ $this->assertSame( null, $result->getResultData( 'batchcomplete' ) );
+
+ $manager = self::getManager( '', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( false, $manager->isGeneratorDone() );
+ $this->assertSame( $allModules, $manager->getRunModules() );
+ $manager->addContinueParam( $allModules[0], 'm1continue', array( 1, 2 ) );
+ $manager->addGeneratorContinueParam( $generator, 'gcontinue', array( 3, 4 ) );
+ $this->assertSame( array( array(
+ 'm1continue' => '1|2',
+ 'continue' => '||mock2|mocklist',
+ ), false ), $manager->getContinuation() );
+ $this->assertSame( array(
+ 'mock1' => array( 'm1continue' => '1|2' ),
+ 'generator' => array( 'gcontinue' => '3|4' ),
+ ), $manager->getRawContinuation() );
+
+ $manager = self::getManager( '', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( false, $manager->isGeneratorDone() );
+ $this->assertSame( $allModules, $manager->getRunModules() );
+ $manager->addContinueParam( $allModules[2], 'mlcontinue', 2 );
+ $manager->addGeneratorContinueParam( $generator, 'gcontinue', 3 );
+ $this->assertSame( array( array(
+ 'mlcontinue' => 2,
+ 'gcontinue' => 3,
+ 'continue' => 'gcontinue||',
+ ), true ), $manager->getContinuation() );
+ $this->assertSame( array(
+ 'mocklist' => array( 'mlcontinue' => 2 ),
+ 'generator' => array( 'gcontinue' => 3 ),
+ ), $manager->getRawContinuation() );
+
+ $result = new ApiResult( 0 );
+ $manager->setContinuationIntoResult( $result );
+ $this->assertSame( array(
+ 'mlcontinue' => 2,
+ 'gcontinue' => 3,
+ 'continue' => 'gcontinue||',
+ ), $result->getResultData( 'continue' ) );
+ $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
+
+ $manager = self::getManager( '', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( false, $manager->isGeneratorDone() );
+ $this->assertSame( $allModules, $manager->getRunModules() );
+ $manager->addGeneratorContinueParam( $generator, 'gcontinue', 3 );
+ $this->assertSame( array( array(
+ 'gcontinue' => 3,
+ 'continue' => 'gcontinue||mocklist',
+ ), true ), $manager->getContinuation() );
+ $this->assertSame( array(
+ 'generator' => array( 'gcontinue' => 3 ),
+ ), $manager->getRawContinuation() );
+
+ $manager = self::getManager( '', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( false, $manager->isGeneratorDone() );
+ $this->assertSame( $allModules, $manager->getRunModules() );
+ $manager->addContinueParam( $allModules[0], 'm1continue', array( 1, 2 ) );
+ $manager->addContinueParam( $allModules[2], 'mlcontinue', 2 );
+ $this->assertSame( array( array(
+ 'mlcontinue' => 2,
+ 'm1continue' => '1|2',
+ 'continue' => '||mock2',
+ ), false ), $manager->getContinuation() );
+ $this->assertSame( array(
+ 'mock1' => array( 'm1continue' => '1|2' ),
+ 'mocklist' => array( 'mlcontinue' => 2 ),
+ ), $manager->getRawContinuation() );
+
+ $manager = self::getManager( '', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( false, $manager->isGeneratorDone() );
+ $this->assertSame( $allModules, $manager->getRunModules() );
+ $manager->addContinueParam( $allModules[0], 'm1continue', array( 1, 2 ) );
+ $this->assertSame( array( array(
+ 'm1continue' => '1|2',
+ 'continue' => '||mock2|mocklist',
+ ), false ), $manager->getContinuation() );
+ $this->assertSame( array(
+ 'mock1' => array( 'm1continue' => '1|2' ),
+ ), $manager->getRawContinuation() );
+
+ $manager = self::getManager( '', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( false, $manager->isGeneratorDone() );
+ $this->assertSame( $allModules, $manager->getRunModules() );
+ $manager->addContinueParam( $allModules[2], 'mlcontinue', 2 );
+ $this->assertSame( array( array(
+ 'mlcontinue' => 2,
+ 'continue' => '-||mock1|mock2',
+ ), true ), $manager->getContinuation() );
+ $this->assertSame( array(
+ 'mocklist' => array( 'mlcontinue' => 2 ),
+ ), $manager->getRawContinuation() );
+
+ $manager = self::getManager( '', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( false, $manager->isGeneratorDone() );
+ $this->assertSame( $allModules, $manager->getRunModules() );
+ $this->assertSame( array( array(), true ), $manager->getContinuation() );
+ $this->assertSame( array(), $manager->getRawContinuation() );
+
+ $manager = self::getManager( '||mock2', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( false, $manager->isGeneratorDone() );
+ $this->assertSame(
+ array_values( array_diff_key( $allModules, array( 1 => 1 ) ) ),
+ $manager->getRunModules()
+ );
+
+ $manager = self::getManager( '-||', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( true, $manager->isGeneratorDone() );
+ $this->assertSame(
+ array_values( array_diff_key( $allModules, array( 0 => 0, 1 => 1 ) ) ),
+ $manager->getRunModules()
+ );
+
+ try {
+ self::getManager( 'foo', $allModules, array( 'mock1', 'mock2' ) );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( UsageException $ex ) {
+ $this->assertSame(
+ 'Invalid continue param. You should pass the original value returned by the previous query',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ $manager = self::getManager( '||mock2', array_slice( $allModules, 0, 2 ), array( 'mock1', 'mock2' ) );
+ try {
+ $manager->addContinueParam( $allModules[1], 'm2continue', 1 );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( UnexpectedValueException $ex ) {
+ $this->assertSame(
+ 'Module \'mock2\' was not supposed to have been executed, but it was executed anyway',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $manager->addContinueParam( $allModules[2], 'mlcontinue', 1 );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( UnexpectedValueException $ex ) {
+ $this->assertSame(
+ 'Module \'mocklist\' called ApiContinuationManager::addContinueParam but was not passed to ApiContinuationManager::__construct',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ }
+
+}
diff --git a/tests/phpunit/includes/api/ApiErrorFormatterTest.php b/tests/phpunit/includes/api/ApiErrorFormatterTest.php
new file mode 100644
index 00000000..8ebdf60f
--- /dev/null
+++ b/tests/phpunit/includes/api/ApiErrorFormatterTest.php
@@ -0,0 +1,351 @@
+<?php
+
+/**
+ * @group API
+ */
+class ApiErrorFormatterTest extends MediaWikiTestCase {
+
+ /**
+ * @covers ApiErrorFormatter
+ * @dataProvider provideErrorFormatter
+ */
+ public function testErrorFormatter( $format, $lang, $useDB,
+ $expect1, $expect2, $expect3
+ ) {
+ $result = new ApiResult( 8388608 );
+ $formatter = new ApiErrorFormatter( $result, Language::factory( $lang ), $format, $useDB );
+
+ // Add default type
+ $expect1[ApiResult::META_TYPE] = 'assoc';
+ $expect2[ApiResult::META_TYPE] = 'assoc';
+ $expect3[ApiResult::META_TYPE] = 'assoc';
+
+ $formatter->addWarning( 'string', 'mainpage' );
+ $formatter->addError( 'err', 'mainpage' );
+ $this->assertSame( $expect1, $result->getResultData(), 'Simple test' );
+
+ $result->reset();
+ $formatter->addWarning( 'foo', 'mainpage' );
+ $formatter->addWarning( 'foo', 'mainpage' );
+ $formatter->addWarning( 'foo', array( 'parentheses', 'foobar' ) );
+ $msg1 = wfMessage( 'mainpage' );
+ $formatter->addWarning( 'message', $msg1 );
+ $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', array( 'overriddenData' => true ) );
+ $formatter->addWarning( 'messageWithData', $msg2 );
+ $formatter->addError( 'errWithData', $msg2 );
+ $this->assertSame( $expect2, $result->getResultData(), 'Complex test' );
+
+ $result->reset();
+ $status = Status::newGood();
+ $status->warning( 'mainpage' );
+ $status->warning( 'parentheses', 'foobar' );
+ $status->warning( $msg1 );
+ $status->warning( $msg2 );
+ $status->error( 'mainpage' );
+ $status->error( 'parentheses', 'foobar' );
+ $formatter->addMessagesFromStatus( 'status', $status );
+ $this->assertSame( $expect3, $result->getResultData(), 'Status test' );
+
+ $this->assertSame(
+ $expect3['errors']['status'],
+ $formatter->arrayFromStatus( $status, 'error' ),
+ 'arrayFromStatus test for error'
+ );
+ $this->assertSame(
+ $expect3['warnings']['status'],
+ $formatter->arrayFromStatus( $status, 'warning' ),
+ 'arrayFromStatus test for warning'
+ );
+ }
+
+ public static function provideErrorFormatter() {
+ $mainpagePlain = wfMessage( 'mainpage' )->useDatabase( false )->plain();
+ $parensPlain = wfMessage( 'parentheses', 'foobar' )->useDatabase( false )->plain();
+ $mainpageText = wfMessage( 'mainpage' )->inLanguage( 'de' )->text();
+ $parensText = wfMessage( 'parentheses', 'foobar' )->inLanguage( 'de' )->text();
+ $C = ApiResult::META_CONTENT;
+ $I = ApiResult::META_INDEXED_TAG_NAME;
+
+ return array(
+ array( 'wikitext', 'de', true,
+ array(
+ 'errors' => array(
+ 'err' => array(
+ array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
+ $I => 'error',
+ ),
+ ),
+ 'warnings' => array(
+ 'string' => array(
+ array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
+ $I => 'warning',
+ ),
+ ),
+ ),
+ array(
+ 'errors' => array(
+ 'errWithData' => array(
+ array( 'code' => 'overriddenCode', 'text' => $mainpageText,
+ 'overriddenData' => true, $C => 'text' ),
+ $I => 'error',
+ ),
+ ),
+ 'warnings' => array(
+ 'messageWithData' => array(
+ array( 'code' => 'overriddenCode', 'text' => $mainpageText,
+ 'overriddenData' => true, $C => 'text' ),
+ $I => 'warning',
+ ),
+ 'message' => array(
+ array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
+ $I => 'warning',
+ ),
+ 'foo' => array(
+ array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
+ array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
+ $I => 'warning',
+ ),
+ ),
+ ),
+ array(
+ 'errors' => array(
+ 'status' => array(
+ array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
+ array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
+ $I => 'error',
+ ),
+ ),
+ 'warnings' => array(
+ 'status' => array(
+ array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
+ array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
+ array( 'code' => 'overriddenCode', 'text' => $mainpageText,
+ 'overriddenData' => true, $C => 'text' ),
+ $I => 'warning',
+ ),
+ ),
+ ),
+ ),
+ array( 'raw', 'fr', true,
+ array(
+ 'errors' => array(
+ 'err' => array(
+ array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
+ $I => 'error',
+ ),
+ ),
+ 'warnings' => array(
+ 'string' => array(
+ array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
+ $I => 'warning',
+ ),
+ ),
+ ),
+ array(
+ 'errors' => array(
+ 'errWithData' => array(
+ array( 'code' => 'overriddenCode', 'message' => 'mainpage', 'params' => array( $I => 'param' ),
+ 'overriddenData' => true ),
+ $I => 'error',
+ ),
+ ),
+ 'warnings' => array(
+ 'messageWithData' => array(
+ array( 'code' => 'overriddenCode', 'message' => 'mainpage', 'params' => array( $I => 'param' ),
+ 'overriddenData' => true ),
+ $I => 'warning',
+ ),
+ 'message' => array(
+ array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
+ $I => 'warning',
+ ),
+ 'foo' => array(
+ array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
+ array( 'code' => 'parentheses', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
+ $I => 'warning',
+ ),
+ ),
+ ),
+ array(
+ 'errors' => array(
+ 'status' => array(
+ array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
+ array( 'code' => 'parentheses', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
+ $I => 'error',
+ ),
+ ),
+ 'warnings' => array(
+ 'status' => array(
+ array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
+ array( 'code' => 'parentheses', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
+ array( 'code' => 'overriddenCode', 'message' => 'mainpage', 'params' => array( $I => 'param' ),
+ 'overriddenData' => true ),
+ $I => 'warning',
+ ),
+ ),
+ ),
+ ),
+ array( 'none', 'fr', true,
+ array(
+ 'errors' => array(
+ 'err' => array(
+ array( 'code' => 'mainpage' ),
+ $I => 'error',
+ ),
+ ),
+ 'warnings' => array(
+ 'string' => array(
+ array( 'code' => 'mainpage' ),
+ $I => 'warning',
+ ),
+ ),
+ ),
+ array(
+ 'errors' => array(
+ 'errWithData' => array(
+ array( 'code' => 'overriddenCode', 'overriddenData' => true ),
+ $I => 'error',
+ ),
+ ),
+ 'warnings' => array(
+ 'messageWithData' => array(
+ array( 'code' => 'overriddenCode', 'overriddenData' => true ),
+ $I => 'warning',
+ ),
+ 'message' => array(
+ array( 'code' => 'mainpage' ),
+ $I => 'warning',
+ ),
+ 'foo' => array(
+ array( 'code' => 'mainpage' ),
+ array( 'code' => 'parentheses' ),
+ $I => 'warning',
+ ),
+ ),
+ ),
+ array(
+ 'errors' => array(
+ 'status' => array(
+ array( 'code' => 'mainpage' ),
+ array( 'code' => 'parentheses' ),
+ $I => 'error',
+ ),
+ ),
+ 'warnings' => array(
+ 'status' => array(
+ array( 'code' => 'mainpage' ),
+ array( 'code' => 'parentheses' ),
+ array( 'code' => 'overriddenCode', 'overriddenData' => true ),
+ $I => 'warning',
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ /**
+ * @covers ApiErrorFormatter_BackCompat
+ */
+ public function testErrorFormatterBC() {
+ $mainpagePlain = wfMessage( 'mainpage' )->useDatabase( false )->plain();
+ $parensPlain = wfMessage( 'parentheses', 'foobar' )->useDatabase( false )->plain();
+
+ $result = new ApiResult( 8388608 );
+ $formatter = new ApiErrorFormatter_BackCompat( $result );
+
+ $formatter->addWarning( 'string', 'mainpage' );
+ $formatter->addError( 'err', 'mainpage' );
+ $this->assertSame( array(
+ 'error' => array(
+ 'code' => 'mainpage',
+ 'info' => $mainpagePlain,
+ ),
+ 'warnings' => array(
+ 'string' => array(
+ 'warnings' => $mainpagePlain,
+ ApiResult::META_CONTENT => 'warnings',
+ ),
+ ),
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData(), 'Simple test' );
+
+ $result->reset();
+ $formatter->addWarning( 'foo', 'mainpage' );
+ $formatter->addWarning( 'foo', 'mainpage' );
+ $formatter->addWarning( 'foo', array( 'parentheses', 'foobar' ) );
+ $msg1 = wfMessage( 'mainpage' );
+ $formatter->addWarning( 'message', $msg1 );
+ $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', array( 'overriddenData' => true ) );
+ $formatter->addWarning( 'messageWithData', $msg2 );
+ $formatter->addError( 'errWithData', $msg2 );
+ $this->assertSame( array(
+ 'error' => array(
+ 'code' => 'overriddenCode',
+ 'info' => $mainpagePlain,
+ 'overriddenData' => true,
+ ),
+ 'warnings' => array(
+ 'messageWithData' => array(
+ 'warnings' => $mainpagePlain,
+ ApiResult::META_CONTENT => 'warnings',
+ ),
+ 'message' => array(
+ 'warnings' => $mainpagePlain,
+ ApiResult::META_CONTENT => 'warnings',
+ ),
+ 'foo' => array(
+ 'warnings' => "$mainpagePlain\n$parensPlain",
+ ApiResult::META_CONTENT => 'warnings',
+ ),
+ ),
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData(), 'Complex test' );
+
+ $result->reset();
+ $status = Status::newGood();
+ $status->warning( 'mainpage' );
+ $status->warning( 'parentheses', 'foobar' );
+ $status->warning( $msg1 );
+ $status->warning( $msg2 );
+ $status->error( 'mainpage' );
+ $status->error( 'parentheses', 'foobar' );
+ $formatter->addMessagesFromStatus( 'status', $status );
+ $this->assertSame( array(
+ 'error' => array(
+ 'code' => 'parentheses',
+ 'info' => $parensPlain,
+ ),
+ 'warnings' => array(
+ 'status' => array(
+ 'warnings' => "$mainpagePlain\n$parensPlain",
+ ApiResult::META_CONTENT => 'warnings',
+ ),
+ ),
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData(), 'Status test' );
+
+ $I = ApiResult::META_INDEXED_TAG_NAME;
+ $this->assertSame(
+ array(
+ array( 'type' => 'error', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
+ array( 'type' => 'error', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
+ $I => 'error',
+ ),
+ $formatter->arrayFromStatus( $status, 'error' ),
+ 'arrayFromStatus test for error'
+ );
+ $this->assertSame(
+ array(
+ array( 'type' => 'warning', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
+ array( 'type' => 'warning', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
+ array( 'message' => 'mainpage', 'params' => array( $I => 'param' ), 'type' => 'warning' ),
+ array( 'message' => 'mainpage', 'params' => array( $I => 'param' ), 'type' => 'warning' ),
+ $I => 'warning',
+ ),
+ $formatter->arrayFromStatus( $status, 'warning' ),
+ 'arrayFromStatus test for warning'
+ );
+ }
+
+}
diff --git a/tests/phpunit/includes/api/ApiLoginTest.php b/tests/phpunit/includes/api/ApiLoginTest.php
index 67a75f36..88a99e9b 100644
--- a/tests/phpunit/includes/api/ApiLoginTest.php
+++ b/tests/phpunit/includes/api/ApiLoginTest.php
@@ -123,7 +123,8 @@ class ApiLoginTest extends ApiTestCase {
"lgname" => $user->username,
"lgpassword" => $user->password
)
- )
+ ),
+ __METHOD__
);
$req->execute();
diff --git a/tests/phpunit/includes/api/ApiMainTest.php b/tests/phpunit/includes/api/ApiMainTest.php
index 780cf9ed..e8ef1804 100644
--- a/tests/phpunit/includes/api/ApiMainTest.php
+++ b/tests/phpunit/includes/api/ApiMainTest.php
@@ -2,7 +2,6 @@
/**
* @group API
- * @group Database
* @group medium
*
* @covers ApiMain
@@ -10,41 +9,25 @@
class ApiMainTest extends ApiTestCase {
/**
- * Test that the API will accept a FauxRequest and execute. The help action
- * (default) throws a UsageException. Just validate we're getting proper XML
- *
- * @expectedException UsageException
+ * Test that the API will accept a FauxRequest and execute.
*/
public function testApi() {
$api = new ApiMain(
- new FauxRequest( array( 'action' => 'help', 'format' => 'xml' ) )
+ new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ) )
);
$api->execute();
- $api->getPrinter()->setBufferResult( true );
- $api->printResult( false );
- $resp = $api->getPrinter()->getBuffer();
-
- libxml_use_internal_errors( true );
- $sxe = simplexml_load_string( $resp );
- $this->assertNotInternalType( "bool", $sxe );
- $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
+ $data = $api->getResult()->getResultData();
+ $this->assertInternalType( 'array', $data );
+ $this->assertArrayHasKey( 'query', $data );
}
public static function provideAssert() {
- $anon = new User();
- $bot = new User();
- $bot->setName( 'Bot' );
- $bot->addToDatabase();
- $bot->addGroup( 'bot' );
- $user = new User();
- $user->setName( 'User' );
- $user->addToDatabase();
return array(
- array( $anon, 'user', 'assertuserfailed' ),
- array( $user, 'user', false ),
- array( $user, 'bot', 'assertbotfailed' ),
- array( $bot, 'user', false ),
- array( $bot, 'bot', false ),
+ array( false, array(), 'user', 'assertuserfailed' ),
+ array( true, array(), 'user', false ),
+ array( true, array(), 'bot', 'assertbotfailed' ),
+ array( true, array( 'bot' ), 'user', false ),
+ array( true, array( 'bot' ), 'bot', false ),
);
}
@@ -53,11 +36,17 @@ class ApiMainTest extends ApiTestCase {
*
* @covers ApiMain::checkAsserts
* @dataProvider provideAssert
- * @param User $user
+ * @param bool $registered
+ * @param array $rights
* @param string $assert
* @param string|bool $error False if no error expected
*/
- public function testAssert( $user, $assert, $error ) {
+ public function testAssert( $registered, $rights, $assert, $error ) {
+ $user = new User();
+ if ( $registered ) {
+ $user->setId( 1 );
+ }
+ $user->mRights = $rights;
try {
$this->doApiRequest( array(
'action' => 'query',
@@ -69,4 +58,25 @@ class ApiMainTest extends ApiTestCase {
}
}
+ /**
+ * Test if all classes in the main module manager exists
+ */
+ public function testClassNamesInModuleManager() {
+ global $wgAutoloadLocalClasses, $wgAutoloadClasses;
+
+ // wgAutoloadLocalClasses has precedence, just like in includes/AutoLoader.php
+ $classes = $wgAutoloadLocalClasses + $wgAutoloadClasses;
+
+ $api = new ApiMain(
+ new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ) )
+ );
+ $modules = $api->getModuleManager()->getNamesWithClasses();
+ foreach( $modules as $name => $class ) {
+ $this->assertArrayHasKey(
+ $class,
+ $classes,
+ 'Class ' . $class . ' for api module ' . $name . ' not in autoloader (with exact case)'
+ );
+ }
+ }
}
diff --git a/tests/phpunit/includes/api/ApiMessageTest.php b/tests/phpunit/includes/api/ApiMessageTest.php
new file mode 100644
index 00000000..6c3ce60d
--- /dev/null
+++ b/tests/phpunit/includes/api/ApiMessageTest.php
@@ -0,0 +1,103 @@
+<?php
+
+/**
+ * @group API
+ */
+class ApiMessageTest extends MediaWikiTestCase {
+
+ private function compareMessages( $msg, $msg2 ) {
+ $this->assertSame( $msg->getKey(), $msg2->getKey(), 'getKey' );
+ $this->assertSame( $msg->getKeysToTry(), $msg2->getKeysToTry(), 'getKeysToTry' );
+ $this->assertSame( $msg->getParams(), $msg2->getParams(), 'getParams' );
+ $this->assertSame( $msg->getFormat(), $msg2->getFormat(), 'getFormat' );
+ $this->assertSame( $msg->getLanguage(), $msg2->getLanguage(), 'getLanguage' );
+
+ $msg = TestingAccessWrapper::newFromObject( $msg );
+ $msg2 = TestingAccessWrapper::newFromObject( $msg2 );
+ foreach ( array( 'interface', 'useDatabase', 'title' ) as $key ) {
+ $this->assertSame( $msg->$key, $msg2->$key, $key );
+ }
+ }
+
+ /**
+ * @covers ApiMessage
+ */
+ public function testApiMessage() {
+ $msg = new Message( array( 'foo', 'bar' ), array( 'baz' ) );
+ $msg->inLanguage( 'de' )->title( Title::newMainPage() );
+ $msg2 = new ApiMessage( $msg, 'code', array( 'data' ) );
+ $this->compareMessages( $msg, $msg2 );
+ $this->assertEquals( 'code', $msg2->getApiCode() );
+ $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+
+ $msg = new Message( array( 'foo', 'bar' ), array( 'baz' ) );
+ $msg2 = new ApiMessage( array( array( 'foo', 'bar' ), 'baz' ), 'code', array( 'data' ) );
+ $this->compareMessages( $msg, $msg2 );
+ $this->assertEquals( 'code', $msg2->getApiCode() );
+ $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+
+ $msg = new Message( 'foo' );
+ $msg2 = new ApiMessage( 'foo' );
+ $this->compareMessages( $msg, $msg2 );
+ $this->assertEquals( 'foo', $msg2->getApiCode() );
+ $this->assertEquals( array(), $msg2->getApiData() );
+
+ $msg2->setApiCode( 'code', array( 'data' ) );
+ $this->assertEquals( 'code', $msg2->getApiCode() );
+ $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+ $msg2->setApiCode( null );
+ $this->assertEquals( 'foo', $msg2->getApiCode() );
+ $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+ $msg2->setApiData( array( 'data2' ) );
+ $this->assertEquals( array( 'data2' ), $msg2->getApiData() );
+ }
+
+ /**
+ * @covers ApiRawMessage
+ */
+ public function testApiRawMessage() {
+ $msg = new RawMessage( 'foo', array( 'baz' ) );
+ $msg->inLanguage( 'de' )->title( Title::newMainPage() );
+ $msg2 = new ApiRawMessage( $msg, 'code', array( 'data' ) );
+ $this->compareMessages( $msg, $msg2 );
+ $this->assertEquals( 'code', $msg2->getApiCode() );
+ $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+
+ $msg = new RawMessage( 'foo', array( 'baz' ) );
+ $msg2 = new ApiRawMessage( array( 'foo', 'baz' ), 'code', array( 'data' ) );
+ $this->compareMessages( $msg, $msg2 );
+ $this->assertEquals( 'code', $msg2->getApiCode() );
+ $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+
+ $msg = new RawMessage( 'foo' );
+ $msg2 = new ApiRawMessage( 'foo', 'code', array( 'data' ) );
+ $this->compareMessages( $msg, $msg2 );
+ $this->assertEquals( 'code', $msg2->getApiCode() );
+ $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+
+ $msg2->setApiCode( 'code', array( 'data' ) );
+ $this->assertEquals( 'code', $msg2->getApiCode() );
+ $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+ $msg2->setApiCode( null );
+ $this->assertEquals( 'foo', $msg2->getApiCode() );
+ $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+ $msg2->setApiData( array( 'data2' ) );
+ $this->assertEquals( array( 'data2' ), $msg2->getApiData() );
+ }
+
+ /**
+ * @covers ApiMessage::create
+ */
+ public function testApiMessageCreate() {
+ $this->assertInstanceOf( 'ApiMessage', ApiMessage::create( new Message( 'mainpage' ) ) );
+ $this->assertInstanceOf( 'ApiRawMessage', ApiMessage::create( new RawMessage( 'mainpage' ) ) );
+ $this->assertInstanceOf( 'ApiMessage', ApiMessage::create( 'mainpage' ) );
+
+ $msg = new ApiMessage( 'mainpage' );
+ $this->assertSame( $msg, ApiMessage::create( $msg ) );
+
+ $msg = new ApiRawMessage( 'mainpage' );
+ $this->assertSame( $msg, ApiMessage::create( $msg ) );
+ }
+
+}
diff --git a/tests/phpunit/includes/api/ApiOptionsTest.php b/tests/phpunit/includes/api/ApiOptionsTest.php
index 5f955bbc..51154ae3 100644
--- a/tests/phpunit/includes/api/ApiOptionsTest.php
+++ b/tests/phpunit/includes/api/ApiOptionsTest.php
@@ -17,8 +17,6 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
/** @var DerivativeContext */
private $mContext;
- private $mOldGetPreferencesHooks;
-
private static $Success = array( 'options' => 'success' );
protected function setUp() {
@@ -50,21 +48,11 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
$this->mTested = new ApiOptions( $main, 'options' );
- global $wgHooks;
- if ( !isset( $wgHooks['GetPreferences'] ) ) {
- $wgHooks['GetPreferences'] = array();
- }
- $this->mOldGetPreferencesHooks = $wgHooks['GetPreferences'];
- $wgHooks['GetPreferences'][] = array( $this, 'hookGetPreferences' );
- }
-
- protected function tearDown() {
- global $wgHooks;
-
- $wgHooks['GetPreferences'] = $this->mOldGetPreferencesHooks;
- $this->mOldGetPreferencesHooks = false;
-
- parent::tearDown();
+ $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+ 'GetPreferences' => array(
+ array( $this, 'hookGetPreferences' )
+ )
+ ) );
}
public function hookGetPreferences( $user, &$preferences ) {
@@ -150,7 +138,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
$this->mContext->setRequest( new FauxRequest( $request, true, $this->mSession ) );
$this->mTested->execute();
- return $this->mTested->getResult()->getData();
+ return $this->mTested->getResult()->getResultData( null, array( 'Strip' => 'all' ) );
}
/**
@@ -408,7 +396,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
'options' => 'success',
'warnings' => array(
'options' => array(
- '*' => "Validation error for 'special': cannot be set by this module"
+ 'warnings' => "Validation error for 'special': cannot be set by this module"
)
)
), $response );
@@ -431,7 +419,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
'options' => 'success',
'warnings' => array(
'options' => array(
- '*' => "Validation error for 'unknownOption': not a valid preference"
+ 'warnings' => "Validation error for 'unknownOption': not a valid preference"
)
)
), $response );
diff --git a/tests/phpunit/includes/api/ApiResultTest.php b/tests/phpunit/includes/api/ApiResultTest.php
new file mode 100644
index 00000000..f0d84552
--- /dev/null
+++ b/tests/phpunit/includes/api/ApiResultTest.php
@@ -0,0 +1,1563 @@
+<?php
+
+/**
+ * @covers ApiResult
+ * @group API
+ */
+class ApiResultTest extends MediaWikiTestCase {
+
+ /**
+ * @covers ApiResult
+ */
+ public function testStaticDataMethods() {
+ $arr = array();
+
+ ApiResult::setValue( $arr, 'setValue', '1' );
+
+ ApiResult::setValue( $arr, null, 'unnamed 1' );
+ ApiResult::setValue( $arr, null, 'unnamed 2' );
+
+ ApiResult::setValue( $arr, 'deleteValue', '2' );
+ ApiResult::unsetValue( $arr, 'deleteValue' );
+
+ ApiResult::setContentValue( $arr, 'setContentValue', '3' );
+
+ $this->assertSame( array(
+ 'setValue' => '1',
+ 'unnamed 1',
+ 'unnamed 2',
+ ApiResult::META_CONTENT => 'setContentValue',
+ 'setContentValue' => '3',
+ ), $arr );
+
+ try {
+ ApiResult::setValue( $arr, 'setValue', '99' );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( RuntimeException $ex ) {
+ $this->assertSame(
+ 'Attempting to add element setValue=99, existing value is 1',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ try {
+ ApiResult::setContentValue( $arr, 'setContentValue2', '99' );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( RuntimeException $ex ) {
+ $this->assertSame(
+ 'Attempting to set content element as setContentValue2 when setContentValue ' .
+ 'is already set as the content element',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ ApiResult::setValue( $arr, 'setValue', '99', ApiResult::OVERRIDE );
+ $this->assertSame( '99', $arr['setValue'] );
+
+ ApiResult::setContentValue( $arr, 'setContentValue2', '99', ApiResult::OVERRIDE );
+ $this->assertSame( 'setContentValue2', $arr[ApiResult::META_CONTENT] );
+
+ $arr = array( 'foo' => 1, 'bar' => 1 );
+ ApiResult::setValue( $arr, 'top', '2', ApiResult::ADD_ON_TOP );
+ ApiResult::setValue( $arr, null, '2', ApiResult::ADD_ON_TOP );
+ ApiResult::setValue( $arr, 'bottom', '2' );
+ ApiResult::setValue( $arr, 'foo', '2', ApiResult::OVERRIDE );
+ ApiResult::setValue( $arr, 'bar', '2', ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP );
+ $this->assertSame( array( 0, 'top', 'foo', 'bar', 'bottom' ), array_keys( $arr ) );
+
+ $arr = array();
+ ApiResult::setValue( $arr, 'sub', array( 'foo' => 1 ) );
+ ApiResult::setValue( $arr, 'sub', array( 'bar' => 1 ) );
+ $this->assertSame( array( 'sub' => array( 'foo' => 1, 'bar' => 1 ) ), $arr );
+
+ try {
+ ApiResult::setValue( $arr, 'sub', array( 'foo' => 2, 'baz' => 2 ) );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( RuntimeException $ex ) {
+ $this->assertSame(
+ 'Conflicting keys (foo) when attempting to merge element sub',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ $arr = array();
+ $title = Title::newFromText( "MediaWiki:Foobar" );
+ $obj = new stdClass;
+ $obj->foo = 1;
+ $obj->bar = 2;
+ ApiResult::setValue( $arr, 'title', $title );
+ ApiResult::setValue( $arr, 'obj', $obj );
+ $this->assertSame( array(
+ 'title' => (string)$title,
+ 'obj' => array( 'foo' => 1, 'bar' => 2, ApiResult::META_TYPE => 'assoc' ),
+ ), $arr );
+
+ $fh = tmpfile();
+ try {
+ ApiResult::setValue( $arr, 'file', $fh );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add resource(stream) to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ ApiResult::setValue( $arr, null, $fh );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add resource(stream) to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $obj->file = $fh;
+ ApiResult::setValue( $arr, 'sub', $obj );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add resource(stream) to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $obj->file = $fh;
+ ApiResult::setValue( $arr, null, $obj );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add resource(stream) to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ fclose( $fh );
+
+ try {
+ ApiResult::setValue( $arr, 'inf', INF );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add non-finite floats to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ ApiResult::setValue( $arr, null, INF );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add non-finite floats to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ ApiResult::setValue( $arr, 'nan', NAN );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add non-finite floats to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ ApiResult::setValue( $arr, null, NAN );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add non-finite floats to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ $arr = array();
+ $result2 = new ApiResult( 8388608 );
+ $result2->addValue( null, 'foo', 'bar' );
+ ApiResult::setValue( $arr, 'baz', $result2 );
+ $this->assertSame( array(
+ 'baz' => array(
+ ApiResult::META_TYPE => 'assoc',
+ 'foo' => 'bar',
+ )
+ ), $arr );
+
+ $arr = array();
+ ApiResult::setValue( $arr, 'foo', "foo\x80bar" );
+ ApiResult::setValue( $arr, 'bar', "a\xcc\x81" );
+ ApiResult::setValue( $arr, 'baz', 74 );
+ ApiResult::setValue( $arr, null, "foo\x80bar" );
+ ApiResult::setValue( $arr, null, "a\xcc\x81" );
+ $this->assertSame( array(
+ 'foo' => "foo\xef\xbf\xbdbar",
+ 'bar' => "\xc3\xa1",
+ 'baz' => 74,
+ 0 => "foo\xef\xbf\xbdbar",
+ 1 => "\xc3\xa1",
+ ), $arr );
+ }
+
+ /**
+ * @covers ApiResult
+ */
+ public function testInstanceDataMethods() {
+ $result = new ApiResult( 8388608 );
+
+ $result->addValue( null, 'setValue', '1' );
+
+ $result->addValue( null, null, 'unnamed 1' );
+ $result->addValue( null, null, 'unnamed 2' );
+
+ $result->addValue( null, 'deleteValue', '2' );
+ $result->removeValue( null, 'deleteValue' );
+
+ $result->addValue( array( 'a', 'b' ), 'deleteValue', '3' );
+ $result->removeValue( array( 'a', 'b', 'deleteValue' ), null, '3' );
+
+ $result->addContentValue( null, 'setContentValue', '3' );
+
+ $this->assertSame( array(
+ 'setValue' => '1',
+ 'unnamed 1',
+ 'unnamed 2',
+ 'a' => array( 'b' => array() ),
+ 'setContentValue' => '3',
+ ApiResult::META_TYPE => 'assoc',
+ ApiResult::META_CONTENT => 'setContentValue',
+ ), $result->getResultData() );
+ $this->assertSame( 20, $result->getSize() );
+
+ try {
+ $result->addValue( null, 'setValue', '99' );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( RuntimeException $ex ) {
+ $this->assertSame(
+ 'Attempting to add element setValue=99, existing value is 1',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ try {
+ $result->addContentValue( null, 'setContentValue2', '99' );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( RuntimeException $ex ) {
+ $this->assertSame(
+ 'Attempting to set content element as setContentValue2 when setContentValue ' .
+ 'is already set as the content element',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ $result->addValue( null, 'setValue', '99', ApiResult::OVERRIDE );
+ $this->assertSame( '99', $result->getResultData( array( 'setValue' ) ) );
+
+ $result->addContentValue( null, 'setContentValue2', '99', ApiResult::OVERRIDE );
+ $this->assertSame( 'setContentValue2',
+ $result->getResultData( array( ApiResult::META_CONTENT ) ) );
+
+ $result->reset();
+ $this->assertSame( array(
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData() );
+ $this->assertSame( 0, $result->getSize() );
+
+ $result->addValue( null, 'foo', 1 );
+ $result->addValue( null, 'bar', 1 );
+ $result->addValue( null, 'top', '2', ApiResult::ADD_ON_TOP );
+ $result->addValue( null, null, '2', ApiResult::ADD_ON_TOP );
+ $result->addValue( null, 'bottom', '2' );
+ $result->addValue( null, 'foo', '2', ApiResult::OVERRIDE );
+ $result->addValue( null, 'bar', '2', ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP );
+ $this->assertSame( array( 0, 'top', 'foo', 'bar', 'bottom', ApiResult::META_TYPE ),
+ array_keys( $result->getResultData() ) );
+
+ $result->reset();
+ $result->addValue( null, 'foo', array( 'bar' => 1 ) );
+ $result->addValue( array( 'foo', 'top' ), 'x', 2, ApiResult::ADD_ON_TOP );
+ $result->addValue( array( 'foo', 'bottom' ), 'x', 2 );
+ $this->assertSame( array( 'top', 'bar', 'bottom' ),
+ array_keys( $result->getResultData( array( 'foo' ) ) ) );
+
+ $result->reset();
+ $result->addValue( null, 'sub', array( 'foo' => 1 ) );
+ $result->addValue( null, 'sub', array( 'bar' => 1 ) );
+ $this->assertSame( array(
+ 'sub' => array( 'foo' => 1, 'bar' => 1 ),
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData() );
+
+ try {
+ $result->addValue( null, 'sub', array( 'foo' => 2, 'baz' => 2 ) );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( RuntimeException $ex ) {
+ $this->assertSame(
+ 'Conflicting keys (foo) when attempting to merge element sub',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ $result->reset();
+ $title = Title::newFromText( "MediaWiki:Foobar" );
+ $obj = new stdClass;
+ $obj->foo = 1;
+ $obj->bar = 2;
+ $result->addValue( null, 'title', $title );
+ $result->addValue( null, 'obj', $obj );
+ $this->assertSame( array(
+ 'title' => (string)$title,
+ 'obj' => array( 'foo' => 1, 'bar' => 2, ApiResult::META_TYPE => 'assoc' ),
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData() );
+
+ $fh = tmpfile();
+ try {
+ $result->addValue( null, 'file', $fh );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add resource(stream) to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $result->addValue( null, null, $fh );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add resource(stream) to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $obj->file = $fh;
+ $result->addValue( null, 'sub', $obj );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add resource(stream) to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $obj->file = $fh;
+ $result->addValue( null, null, $obj );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add resource(stream) to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ fclose( $fh );
+
+ try {
+ $result->addValue( null, 'inf', INF );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add non-finite floats to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $result->addValue( null, null, INF );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add non-finite floats to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $result->addValue( null, 'nan', NAN );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add non-finite floats to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $result->addValue( null, null, NAN );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Cannot add non-finite floats to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ $result->reset();
+ $result->addParsedLimit( 'foo', 12 );
+ $this->assertSame( array(
+ 'limits' => array( 'foo' => 12 ),
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData() );
+ $result->addParsedLimit( 'foo', 13 );
+ $this->assertSame( array(
+ 'limits' => array( 'foo' => 13 ),
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData() );
+ $this->assertSame( null, $result->getResultData( array( 'foo', 'bar', 'baz' ) ) );
+ $this->assertSame( 13, $result->getResultData( array( 'limits', 'foo' ) ) );
+ try {
+ $result->getResultData( array( 'limits', 'foo', 'bar' ) );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( InvalidArgumentException $ex ) {
+ $this->assertSame(
+ 'Path limits.foo is not an array',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ $result = new ApiResult( 10 );
+ $formatter = new ApiErrorFormatter( $result, Language::factory( 'en' ), 'none', false );
+ $result->setErrorFormatter( $formatter );
+ $this->assertFalse( $result->addValue( null, 'foo', '12345678901' ) );
+ $this->assertTrue( $result->addValue( null, 'foo', '12345678901', ApiResult::NO_SIZE_CHECK ) );
+ $this->assertSame( 0, $result->getSize() );
+ $result->reset();
+ $this->assertTrue( $result->addValue( null, 'foo', '1234567890' ) );
+ $this->assertFalse( $result->addValue( null, 'foo', '1' ) );
+ $result->removeValue( null, 'foo' );
+ $this->assertTrue( $result->addValue( null, 'foo', '1' ) );
+
+ $result = new ApiResult( 8388608 );
+ $result2 = new ApiResult( 8388608 );
+ $result2->addValue( null, 'foo', 'bar' );
+ $result->addValue( null, 'baz', $result2 );
+ $this->assertSame( array(
+ 'baz' => array(
+ 'foo' => 'bar',
+ ApiResult::META_TYPE => 'assoc',
+ ),
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData() );
+
+ $result = new ApiResult( 8388608 );
+ $result->addValue( null, 'foo', "foo\x80bar" );
+ $result->addValue( null, 'bar', "a\xcc\x81" );
+ $result->addValue( null, 'baz', 74 );
+ $result->addValue( null, null, "foo\x80bar" );
+ $result->addValue( null, null, "a\xcc\x81" );
+ $this->assertSame( array(
+ 'foo' => "foo\xef\xbf\xbdbar",
+ 'bar' => "\xc3\xa1",
+ 'baz' => 74,
+ 0 => "foo\xef\xbf\xbdbar",
+ 1 => "\xc3\xa1",
+ ApiResult::META_TYPE => 'assoc',
+ ), $result->getResultData() );
+ }
+
+ /**
+ * @covers ApiResult
+ */
+ public function testMetadata() {
+ $arr = array( 'foo' => array( 'bar' => array() ) );
+ $result = new ApiResult( 8388608 );
+ $result->addValue( null, 'foo', array( 'bar' => array() ) );
+
+ $expect = array(
+ 'foo' => array(
+ 'bar' => array(
+ ApiResult::META_INDEXED_TAG_NAME => 'ritn',
+ ApiResult::META_TYPE => 'default',
+ ),
+ ApiResult::META_INDEXED_TAG_NAME => 'ritn',
+ ApiResult::META_TYPE => 'default',
+ ),
+ ApiResult::META_SUBELEMENTS => array( 'foo', 'bar' ),
+ ApiResult::META_INDEXED_TAG_NAME => 'itn',
+ ApiResult::META_PRESERVE_KEYS => array( 'foo', 'bar' ),
+ ApiResult::META_TYPE => 'array',
+ );
+
+ ApiResult::setSubelementsList( $arr, 'foo' );
+ ApiResult::setSubelementsList( $arr, array( 'bar', 'baz' ) );
+ ApiResult::unsetSubelementsList( $arr, 'baz' );
+ ApiResult::setIndexedTagNameRecursive( $arr, 'ritn' );
+ ApiResult::setIndexedTagName( $arr, 'itn' );
+ ApiResult::setPreserveKeysList( $arr, 'foo' );
+ ApiResult::setPreserveKeysList( $arr, array( 'bar', 'baz' ) );
+ ApiResult::unsetPreserveKeysList( $arr, 'baz' );
+ ApiResult::setArrayTypeRecursive( $arr, 'default' );
+ ApiResult::setArrayType( $arr, 'array' );
+ $this->assertSame( $expect, $arr );
+
+ $result->addSubelementsList( null, 'foo' );
+ $result->addSubelementsList( null, array( 'bar', 'baz' ) );
+ $result->removeSubelementsList( null, 'baz' );
+ $result->addIndexedTagNameRecursive( null, 'ritn' );
+ $result->addIndexedTagName( null, 'itn' );
+ $result->addPreserveKeysList( null, 'foo' );
+ $result->addPreserveKeysList( null, array( 'bar', 'baz' ) );
+ $result->removePreserveKeysList( null, 'baz' );
+ $result->addArrayTypeRecursive( null, 'default' );
+ $result->addArrayType( null, 'array' );
+ $this->assertEquals( $expect, $result->getResultData() );
+
+ $arr = array( 'foo' => array( 'bar' => array() ) );
+ $expect = array(
+ 'foo' => array(
+ 'bar' => array(
+ ApiResult::META_TYPE => 'kvp',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ),
+ ApiResult::META_TYPE => 'kvp',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ),
+ ApiResult::META_TYPE => 'BCkvp',
+ ApiResult::META_KVP_KEY_NAME => 'bc',
+ );
+ ApiResult::setArrayTypeRecursive( $arr, 'kvp', 'key' );
+ ApiResult::setArrayType( $arr, 'BCkvp', 'bc' );
+ $this->assertSame( $expect, $arr );
+ }
+
+ /**
+ * @covers ApiResult
+ */
+ public function testUtilityFunctions() {
+ $arr = array(
+ 'foo' => array(
+ 'bar' => array( '_dummy' => 'foobaz' ),
+ 'bar2' => (object)array( '_dummy' => 'foobaz' ),
+ 'x' => 'ok',
+ '_dummy' => 'foobaz',
+ ),
+ 'foo2' => (object)array(
+ 'bar' => array( '_dummy' => 'foobaz' ),
+ 'bar2' => (object)array( '_dummy' => 'foobaz' ),
+ 'x' => 'ok',
+ '_dummy' => 'foobaz',
+ ),
+ ApiResult::META_SUBELEMENTS => array( 'foo', 'bar' ),
+ ApiResult::META_INDEXED_TAG_NAME => 'itn',
+ ApiResult::META_PRESERVE_KEYS => array( 'foo', 'bar', '_dummy2', 0 ),
+ ApiResult::META_TYPE => 'array',
+ '_dummy' => 'foobaz',
+ '_dummy2' => 'foobaz!',
+ );
+ $this->assertEquals( array(
+ 'foo' => array(
+ 'bar' => array(),
+ 'bar2' => (object)array(),
+ 'x' => 'ok',
+ ),
+ 'foo2' => (object)array(
+ 'bar' => array(),
+ 'bar2' => (object)array(),
+ 'x' => 'ok',
+ ),
+ '_dummy2' => 'foobaz!',
+ ), ApiResult::stripMetadata( $arr ), 'ApiResult::stripMetadata' );
+
+ $metadata = array();
+ $data = ApiResult::stripMetadataNonRecursive( $arr, $metadata );
+ $this->assertEquals( array(
+ 'foo' => array(
+ 'bar' => array( '_dummy' => 'foobaz' ),
+ 'bar2' => (object)array( '_dummy' => 'foobaz' ),
+ 'x' => 'ok',
+ '_dummy' => 'foobaz',
+ ),
+ 'foo2' => (object)array(
+ 'bar' => array( '_dummy' => 'foobaz' ),
+ 'bar2' => (object)array( '_dummy' => 'foobaz' ),
+ 'x' => 'ok',
+ '_dummy' => 'foobaz',
+ ),
+ '_dummy2' => 'foobaz!',
+ ), $data, 'ApiResult::stripMetadataNonRecursive ($data)' );
+ $this->assertEquals( array(
+ ApiResult::META_SUBELEMENTS => array( 'foo', 'bar' ),
+ ApiResult::META_INDEXED_TAG_NAME => 'itn',
+ ApiResult::META_PRESERVE_KEYS => array( 'foo', 'bar', '_dummy2', 0 ),
+ ApiResult::META_TYPE => 'array',
+ '_dummy' => 'foobaz',
+ ), $metadata, 'ApiResult::stripMetadataNonRecursive ($metadata)' );
+
+ $metadata = null;
+ $data = ApiResult::stripMetadataNonRecursive( (object)$arr, $metadata );
+ $this->assertEquals( (object)array(
+ 'foo' => array(
+ 'bar' => array( '_dummy' => 'foobaz' ),
+ 'bar2' => (object)array( '_dummy' => 'foobaz' ),
+ 'x' => 'ok',
+ '_dummy' => 'foobaz',
+ ),
+ 'foo2' => (object)array(
+ 'bar' => array( '_dummy' => 'foobaz' ),
+ 'bar2' => (object)array( '_dummy' => 'foobaz' ),
+ 'x' => 'ok',
+ '_dummy' => 'foobaz',
+ ),
+ '_dummy2' => 'foobaz!',
+ ), $data, 'ApiResult::stripMetadataNonRecursive on object ($data)' );
+ $this->assertEquals( array(
+ ApiResult::META_SUBELEMENTS => array( 'foo', 'bar' ),
+ ApiResult::META_INDEXED_TAG_NAME => 'itn',
+ ApiResult::META_PRESERVE_KEYS => array( 'foo', 'bar', '_dummy2', 0 ),
+ ApiResult::META_TYPE => 'array',
+ '_dummy' => 'foobaz',
+ ), $metadata, 'ApiResult::stripMetadataNonRecursive on object ($metadata)' );
+ }
+
+ /**
+ * @covers ApiResult
+ * @dataProvider provideTransformations
+ * @param string $label
+ * @param array $input
+ * @param array $transforms
+ * @param array|Exception $expect
+ */
+ public function testTransformations( $label, $input, $transforms, $expect ) {
+ $result = new ApiResult( false );
+ $result->addValue( null, 'test', $input );
+
+ if ( $expect instanceof Exception ) {
+ try {
+ $output = $result->getResultData( 'test', $transforms );
+ $this->fail( 'Expected exception not thrown', $label );
+ } catch ( Exception $ex ) {
+ $this->assertEquals( $ex, $expect, $label );
+ }
+ } else {
+ $output = $result->getResultData( 'test', $transforms );
+ $this->assertEquals( $expect, $output, $label );
+ }
+ }
+
+ public function provideTransformations() {
+ $kvp = function ( $keyKey, $key, $valKey, $value ) {
+ return array(
+ $keyKey => $key,
+ $valKey => $value,
+ ApiResult::META_PRESERVE_KEYS => array( $keyKey ),
+ ApiResult::META_CONTENT => $valKey,
+ ApiResult::META_TYPE => 'assoc',
+ );
+ };
+ $typeArr = array(
+ 'defaultArray' => array( 2 => 'a', 0 => 'b', 1 => 'c' ),
+ 'defaultAssoc' => array( 'x' => 'a', 1 => 'b', 0 => 'c' ),
+ 'defaultAssoc2' => array( 2 => 'a', 3 => 'b', 0 => 'c' ),
+ 'array' => array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'array' ),
+ 'BCarray' => array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'BCarray' ),
+ 'BCassoc' => array( 'a', 'b', 'c', ApiResult::META_TYPE => 'BCassoc' ),
+ 'assoc' => array( 2 => 'a', 0 => 'b', 1 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'kvp' => array( 'x' => 'a', 'y' => 'b', 'z' => array( 'c' ), ApiResult::META_TYPE => 'kvp' ),
+ 'BCkvp' => array( 'x' => 'a', 'y' => 'b',
+ ApiResult::META_TYPE => 'BCkvp',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ),
+ 'emptyDefault' => array( '_dummy' => 1 ),
+ 'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
+ '_dummy' => 1,
+ ApiResult::META_PRESERVE_KEYS => array( '_dummy' ),
+ );
+ $stripArr = array(
+ 'foo' => array(
+ 'bar' => array( '_dummy' => 'foobaz' ),
+ 'baz' => array(
+ ApiResult::META_SUBELEMENTS => array( 'foo', 'bar' ),
+ ApiResult::META_INDEXED_TAG_NAME => 'itn',
+ ApiResult::META_PRESERVE_KEYS => array( 'foo', 'bar', '_dummy2', 0 ),
+ ApiResult::META_TYPE => 'array',
+ ),
+ 'x' => 'ok',
+ '_dummy' => 'foobaz',
+ ),
+ ApiResult::META_SUBELEMENTS => array( 'foo', 'bar' ),
+ ApiResult::META_INDEXED_TAG_NAME => 'itn',
+ ApiResult::META_PRESERVE_KEYS => array( 'foo', 'bar', '_dummy2', 0 ),
+ ApiResult::META_TYPE => 'array',
+ '_dummy' => 'foobaz',
+ '_dummy2' => 'foobaz!',
+ );
+
+ return array(
+ array(
+ 'BC: META_BC_BOOLS',
+ array(
+ 'BCtrue' => true,
+ 'BCfalse' => false,
+ 'true' => true,
+ 'false' => false,
+ ApiResult::META_BC_BOOLS => array( 0, 'true', 'false' ),
+ ),
+ array( 'BC' => array() ),
+ array(
+ 'BCtrue' => '',
+ 'true' => true,
+ 'false' => false,
+ ApiResult::META_BC_BOOLS => array( 0, 'true', 'false' ),
+ )
+ ),
+ array(
+ 'BC: META_BC_SUBELEMENTS',
+ array(
+ 'bc' => 'foo',
+ 'nobc' => 'bar',
+ ApiResult::META_BC_SUBELEMENTS => array( 'bc' ),
+ ),
+ array( 'BC' => array() ),
+ array(
+ 'bc' => array(
+ '*' => 'foo',
+ ApiResult::META_CONTENT => '*',
+ ApiResult::META_TYPE => 'assoc',
+ ),
+ 'nobc' => 'bar',
+ ApiResult::META_BC_SUBELEMENTS => array( 'bc' ),
+ ),
+ ),
+ array(
+ 'BC: META_CONTENT',
+ array(
+ 'content' => '!!!',
+ ApiResult::META_CONTENT => 'content',
+ ),
+ array( 'BC' => array() ),
+ array(
+ '*' => '!!!',
+ ApiResult::META_CONTENT => '*',
+ ),
+ ),
+ array(
+ 'BC: BCkvp type',
+ array(
+ 'foo' => 'foo value',
+ 'bar' => 'bar value',
+ '_baz' => 'baz value',
+ ApiResult::META_TYPE => 'BCkvp',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ApiResult::META_PRESERVE_KEYS => array( '_baz' ),
+ ),
+ array( 'BC' => array() ),
+ array(
+ $kvp( 'key', 'foo', '*', 'foo value' ),
+ $kvp( 'key', 'bar', '*', 'bar value' ),
+ $kvp( 'key', '_baz', '*', 'baz value' ),
+ ApiResult::META_TYPE => 'array',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ApiResult::META_PRESERVE_KEYS => array( '_baz' ),
+ ),
+ ),
+ array(
+ 'BC: BCarray type',
+ array(
+ ApiResult::META_TYPE => 'BCarray',
+ ),
+ array( 'BC' => array() ),
+ array(
+ ApiResult::META_TYPE => 'default',
+ ),
+ ),
+ array(
+ 'BC: BCassoc type',
+ array(
+ ApiResult::META_TYPE => 'BCassoc',
+ ),
+ array( 'BC' => array() ),
+ array(
+ ApiResult::META_TYPE => 'default',
+ ),
+ ),
+ array(
+ 'BC: BCkvp exception',
+ array(
+ ApiResult::META_TYPE => 'BCkvp',
+ ),
+ array( 'BC' => array() ),
+ new UnexpectedValueException(
+ 'Type "BCkvp" used without setting ApiResult::META_KVP_KEY_NAME metadata item'
+ ),
+ ),
+ array(
+ 'BC: nobool, no*, nosub',
+ array(
+ 'true' => true,
+ 'false' => false,
+ 'content' => 'content',
+ ApiResult::META_CONTENT => 'content',
+ 'bc' => 'foo',
+ ApiResult::META_BC_SUBELEMENTS => array( 'bc' ),
+ 'BCarray' => array( ApiResult::META_TYPE => 'BCarray' ),
+ 'BCassoc' => array( ApiResult::META_TYPE => 'BCassoc' ),
+ 'BCkvp' => array(
+ 'foo' => 'foo value',
+ 'bar' => 'bar value',
+ '_baz' => 'baz value',
+ ApiResult::META_TYPE => 'BCkvp',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ApiResult::META_PRESERVE_KEYS => array( '_baz' ),
+ ),
+ ),
+ array( 'BC' => array( 'nobool', 'no*', 'nosub' ) ),
+ array(
+ 'true' => true,
+ 'false' => false,
+ 'content' => 'content',
+ 'bc' => 'foo',
+ 'BCarray' => array( ApiResult::META_TYPE => 'default' ),
+ 'BCassoc' => array( ApiResult::META_TYPE => 'default' ),
+ 'BCkvp' => array(
+ $kvp( 'key', 'foo', '*', 'foo value' ),
+ $kvp( 'key', 'bar', '*', 'bar value' ),
+ $kvp( 'key', '_baz', '*', 'baz value' ),
+ ApiResult::META_TYPE => 'array',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ApiResult::META_PRESERVE_KEYS => array( '_baz' ),
+ ),
+ ApiResult::META_CONTENT => 'content',
+ ApiResult::META_BC_SUBELEMENTS => array( 'bc' ),
+ ),
+ ),
+
+ array(
+ 'Types: Normal transform',
+ $typeArr,
+ array( 'Types' => array() ),
+ array(
+ 'defaultArray' => array( 'b', 'c', 'a', ApiResult::META_TYPE => 'array' ),
+ 'defaultAssoc' => array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'defaultAssoc2' => array( 2 => 'a', 3 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'array' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
+ 'BCarray' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
+ 'BCassoc' => array( 'a', 'b', 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'assoc' => array( 2 => 'a', 0 => 'b', 1 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'kvp' => array( 'x' => 'a', 'y' => 'b',
+ 'z' => array( 'c', ApiResult::META_TYPE => 'array' ),
+ ApiResult::META_TYPE => 'assoc'
+ ),
+ 'BCkvp' => array( 'x' => 'a', 'y' => 'b',
+ ApiResult::META_TYPE => 'assoc',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ),
+ 'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
+ 'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
+ '_dummy' => 1,
+ ApiResult::META_PRESERVE_KEYS => array( '_dummy' ),
+ ApiResult::META_TYPE => 'assoc',
+ ),
+ ),
+ array(
+ 'Types: AssocAsObject',
+ $typeArr,
+ array( 'Types' => array( 'AssocAsObject' => true ) ),
+ (object)array(
+ 'defaultArray' => array( 'b', 'c', 'a', ApiResult::META_TYPE => 'array' ),
+ 'defaultAssoc' => (object)array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'array' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
+ 'BCarray' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
+ 'BCassoc' => (object)array( 'a', 'b', 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'assoc' => (object)array( 2 => 'a', 0 => 'b', 1 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'kvp' => (object)array( 'x' => 'a', 'y' => 'b',
+ 'z' => array( 'c', ApiResult::META_TYPE => 'array' ),
+ ApiResult::META_TYPE => 'assoc'
+ ),
+ 'BCkvp' => (object)array( 'x' => 'a', 'y' => 'b',
+ ApiResult::META_TYPE => 'assoc',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ),
+ 'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
+ 'emptyAssoc' => (object)array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
+ '_dummy' => 1,
+ ApiResult::META_PRESERVE_KEYS => array( '_dummy' ),
+ ApiResult::META_TYPE => 'assoc',
+ ),
+ ),
+ array(
+ 'Types: ArmorKVP',
+ $typeArr,
+ array( 'Types' => array( 'ArmorKVP' => 'name' ) ),
+ array(
+ 'defaultArray' => array( 'b', 'c', 'a', ApiResult::META_TYPE => 'array' ),
+ 'defaultAssoc' => array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'defaultAssoc2' => array( 2 => 'a', 3 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'array' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
+ 'BCarray' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
+ 'BCassoc' => array( 'a', 'b', 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'assoc' => array( 2 => 'a', 0 => 'b', 1 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'kvp' => array(
+ $kvp( 'name', 'x', 'value', 'a' ),
+ $kvp( 'name', 'y', 'value', 'b' ),
+ $kvp( 'name', 'z', 'value', array( 'c', ApiResult::META_TYPE => 'array' ) ),
+ ApiResult::META_TYPE => 'array'
+ ),
+ 'BCkvp' => array(
+ $kvp( 'key', 'x', 'value', 'a' ),
+ $kvp( 'key', 'y', 'value', 'b' ),
+ ApiResult::META_TYPE => 'array',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ),
+ 'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
+ 'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
+ '_dummy' => 1,
+ ApiResult::META_PRESERVE_KEYS => array( '_dummy' ),
+ ApiResult::META_TYPE => 'assoc',
+ ),
+ ),
+ array(
+ 'Types: ArmorKVP + BC',
+ $typeArr,
+ array( 'BC' => array(), 'Types' => array( 'ArmorKVP' => 'name' ) ),
+ array(
+ 'defaultArray' => array( 'b', 'c', 'a', ApiResult::META_TYPE => 'array' ),
+ 'defaultAssoc' => array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'defaultAssoc2' => array( 2 => 'a', 3 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'array' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
+ 'BCarray' => array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'BCassoc' => array( 'a', 'b', 'c', ApiResult::META_TYPE => 'array' ),
+ 'assoc' => array( 2 => 'a', 0 => 'b', 1 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'kvp' => array(
+ $kvp( 'name', 'x', '*', 'a' ),
+ $kvp( 'name', 'y', '*', 'b' ),
+ $kvp( 'name', 'z', '*', array( 'c', ApiResult::META_TYPE => 'array' ) ),
+ ApiResult::META_TYPE => 'array'
+ ),
+ 'BCkvp' => array(
+ $kvp( 'key', 'x', '*', 'a' ),
+ $kvp( 'key', 'y', '*', 'b' ),
+ ApiResult::META_TYPE => 'array',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ),
+ 'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
+ 'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
+ '_dummy' => 1,
+ ApiResult::META_PRESERVE_KEYS => array( '_dummy' ),
+ ApiResult::META_TYPE => 'assoc',
+ ),
+ ),
+ array(
+ 'Types: ArmorKVP + AssocAsObject',
+ $typeArr,
+ array( 'Types' => array( 'ArmorKVP' => 'name', 'AssocAsObject' => true ) ),
+ (object)array(
+ 'defaultArray' => array( 'b', 'c', 'a', ApiResult::META_TYPE => 'array' ),
+ 'defaultAssoc' => (object)array( 'x' => 'a', 1 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b', 0 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'array' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
+ 'BCarray' => array( 'a', 'c', 'b', ApiResult::META_TYPE => 'array' ),
+ 'BCassoc' => (object)array( 'a', 'b', 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'assoc' => (object)array( 2 => 'a', 0 => 'b', 1 => 'c', ApiResult::META_TYPE => 'assoc' ),
+ 'kvp' => array(
+ (object)$kvp( 'name', 'x', 'value', 'a' ),
+ (object)$kvp( 'name', 'y', 'value', 'b' ),
+ (object)$kvp( 'name', 'z', 'value', array( 'c', ApiResult::META_TYPE => 'array' ) ),
+ ApiResult::META_TYPE => 'array'
+ ),
+ 'BCkvp' => array(
+ (object)$kvp( 'key', 'x', 'value', 'a' ),
+ (object)$kvp( 'key', 'y', 'value', 'b' ),
+ ApiResult::META_TYPE => 'array',
+ ApiResult::META_KVP_KEY_NAME => 'key',
+ ),
+ 'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
+ 'emptyAssoc' => (object)array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
+ '_dummy' => 1,
+ ApiResult::META_PRESERVE_KEYS => array( '_dummy' ),
+ ApiResult::META_TYPE => 'assoc',
+ ),
+ ),
+ array(
+ 'Types: BCkvp exception',
+ array(
+ ApiResult::META_TYPE => 'BCkvp',
+ ),
+ array( 'Types' => array() ),
+ new UnexpectedValueException(
+ 'Type "BCkvp" used without setting ApiResult::META_KVP_KEY_NAME metadata item'
+ ),
+ ),
+
+ array(
+ 'Strip: With ArmorKVP + AssocAsObject transforms',
+ $typeArr,
+ array( 'Types' => array( 'ArmorKVP' => 'name', 'AssocAsObject' => true ), 'Strip' => 'all' ),
+ (object)array(
+ 'defaultArray' => array( 'b', 'c', 'a' ),
+ 'defaultAssoc' => (object)array( 'x' => 'a', 1 => 'b', 0 => 'c' ),
+ 'defaultAssoc2' => (object)array( 2 => 'a', 3 => 'b', 0 => 'c' ),
+ 'array' => array( 'a', 'c', 'b' ),
+ 'BCarray' => array( 'a', 'c', 'b' ),
+ 'BCassoc' => (object)array( 'a', 'b', 'c' ),
+ 'assoc' => (object)array( 2 => 'a', 0 => 'b', 1 => 'c' ),
+ 'kvp' => array(
+ (object)array( 'name' => 'x', 'value' => 'a' ),
+ (object)array( 'name' => 'y', 'value' => 'b' ),
+ (object)array( 'name' => 'z', 'value' => array( 'c' ) ),
+ ),
+ 'BCkvp' => array(
+ (object)array( 'key' => 'x', 'value' => 'a' ),
+ (object)array( 'key' => 'y', 'value' => 'b' ),
+ ),
+ 'emptyDefault' => array(),
+ 'emptyAssoc' => (object)array(),
+ '_dummy' => 1,
+ ),
+ ),
+
+ array(
+ 'Strip: all',
+ $stripArr,
+ array( 'Strip' => 'all' ),
+ array(
+ 'foo' => array(
+ 'bar' => array(),
+ 'baz' => array(),
+ 'x' => 'ok',
+ ),
+ '_dummy2' => 'foobaz!',
+ ),
+ ),
+ array(
+ 'Strip: base',
+ $stripArr,
+ array( 'Strip' => 'base' ),
+ array(
+ 'foo' => array(
+ 'bar' => array( '_dummy' => 'foobaz' ),
+ 'baz' => array(
+ ApiResult::META_SUBELEMENTS => array( 'foo', 'bar' ),
+ ApiResult::META_INDEXED_TAG_NAME => 'itn',
+ ApiResult::META_PRESERVE_KEYS => array( 'foo', 'bar', '_dummy2', 0 ),
+ ApiResult::META_TYPE => 'array',
+ ),
+ 'x' => 'ok',
+ '_dummy' => 'foobaz',
+ ),
+ '_dummy2' => 'foobaz!',
+ ),
+ ),
+ array(
+ 'Strip: bc',
+ $stripArr,
+ array( 'Strip' => 'bc' ),
+ array(
+ 'foo' => array(
+ 'bar' => array(),
+ 'baz' => array(
+ ApiResult::META_SUBELEMENTS => array( 'foo', 'bar' ),
+ ApiResult::META_INDEXED_TAG_NAME => 'itn',
+ ),
+ 'x' => 'ok',
+ ),
+ '_dummy2' => 'foobaz!',
+ ApiResult::META_SUBELEMENTS => array( 'foo', 'bar' ),
+ ApiResult::META_INDEXED_TAG_NAME => 'itn',
+ ),
+ ),
+
+ array(
+ 'Custom transform',
+ array(
+ 'foo' => '?',
+ 'bar' => '?',
+ '_dummy' => '?',
+ '_dummy2' => '?',
+ '_dummy3' => '?',
+ ApiResult::META_CONTENT => 'foo',
+ ApiResult::META_PRESERVE_KEYS => array( '_dummy2', '_dummy3' ),
+ ),
+ array(
+ 'Custom' => array( $this, 'customTransform' ),
+ 'BC' => array(),
+ 'Types' => array(),
+ 'Strip' => 'all'
+ ),
+ array(
+ '*' => 'FOO',
+ 'bar' => 'BAR',
+ 'baz' => array( 'a', 'b' ),
+ '_dummy2' => '_DUMMY2',
+ '_dummy3' => '_DUMMY3',
+ ApiResult::META_CONTENT => 'bar',
+ ),
+ ),
+ );
+
+ }
+
+ /**
+ * Custom transformer for testTransformations
+ * @param array &$data
+ * @param array &$metadata
+ */
+ public function customTransform( &$data, &$metadata ) {
+ // Prevent recursion
+ if ( isset( $metadata['_added'] ) ) {
+ $metadata[ApiResult::META_TYPE] = 'array';
+ return;
+ }
+
+ foreach ( $data as $k => $v ) {
+ $data[$k] = strtoupper( $k );
+ }
+ $data['baz'] = array( '_added' => 1, 'z' => 'b', 'y' => 'a' );
+ $metadata[ApiResult::META_PRESERVE_KEYS][0] = '_dummy';
+ $data[ApiResult::META_CONTENT] = 'bar';
+ }
+
+ /**
+ * @covers ApiResult
+ */
+ public function testDeprecatedFunctions() {
+ // Ignore ApiResult deprecation warnings during this test
+ set_error_handler( function ( $errno, $errstr ) use ( &$warnings ) {
+ if ( preg_match( '/Use of ApiResult::\S+ was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
+ return true;
+ }
+ if ( preg_match( '/Use of ApiMain to ApiResult::__construct was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
+ return true;
+ }
+ return false;
+ } );
+ $reset = new ScopedCallback( 'restore_error_handler' );
+
+ $context = new DerivativeContext( RequestContext::getMain() );
+ $context->setConfig( new HashConfig( array(
+ 'APIModules' => array(),
+ 'APIFormatModules' => array(),
+ 'APIMaxResultSize' => 42,
+ ) ) );
+ $main = new ApiMain( $context );
+ $result = TestingAccessWrapper::newFromObject( new ApiResult( $main ) );
+ $this->assertSame( 42, $result->maxSize );
+ $this->assertSame( $main->getErrorFormatter(), $result->errorFormatter );
+ $this->assertSame( $main, $result->mainForContinuation );
+
+ $result = new ApiResult( 8388608 );
+
+ $result->addContentValue( null, 'test', 'content' );
+ $result->addContentValue( array( 'foo', 'bar' ), 'test', 'content' );
+ $result->addIndexedTagName( null, 'itn' );
+ $result->addSubelementsList( null, array( 'sub' ) );
+ $this->assertSame( array(
+ 'foo' => array(
+ 'bar' => array(
+ '*' => 'content',
+ ),
+ ),
+ '*' => 'content',
+ ), $result->getData() );
+ $result->setRawMode();
+ $this->assertSame( array(
+ 'foo' => array(
+ 'bar' => array(
+ '*' => 'content',
+ ),
+ ),
+ '*' => 'content',
+ '_element' => 'itn',
+ '_subelements' => array( 'sub' ),
+ ), $result->getData() );
+
+ $arr = array();
+ ApiResult::setContent( $arr, 'value' );
+ ApiResult::setContent( $arr, 'value2', 'foobar' );
+ $this->assertSame( array(
+ ApiResult::META_CONTENT => 'content',
+ 'content' => 'value',
+ 'foobar' => array(
+ ApiResult::META_CONTENT => 'content',
+ 'content' => 'value2',
+ ),
+ ), $arr );
+
+ $result = new ApiResult( 3 );
+ $formatter = new ApiErrorFormatter_BackCompat( $result );
+ $result->setErrorFormatter( $formatter );
+ $result->disableSizeCheck();
+ $this->assertTrue( $result->addValue( null, 'foo', '1234567890' ) );
+ $result->enableSizeCheck();
+ $this->assertSame( 0, $result->getSize() );
+ $this->assertFalse( $result->addValue( null, 'foo', '1234567890' ) );
+
+ $arr = array( 'foo' => array( 'bar' => 1 ) );
+ $result->setIndexedTagName_recursive( $arr, 'itn' );
+ $this->assertSame( array(
+ 'foo' => array(
+ 'bar' => 1,
+ ApiResult::META_INDEXED_TAG_NAME => 'itn'
+ ),
+ ), $arr );
+
+ $status = Status::newGood();
+ $status->fatal( 'parentheses', '1' );
+ $status->fatal( 'parentheses', '2' );
+ $status->warning( 'parentheses', '3' );
+ $status->warning( 'parentheses', '4' );
+ $this->assertSame( array(
+ array(
+ 'type' => 'error',
+ 'message' => 'parentheses',
+ 'params' => array(
+ 0 => '1',
+ ApiResult::META_INDEXED_TAG_NAME => 'param',
+ ),
+ ),
+ array(
+ 'type' => 'error',
+ 'message' => 'parentheses',
+ 'params' => array(
+ 0 => '2',
+ ApiResult::META_INDEXED_TAG_NAME => 'param',
+ ),
+ ),
+ ApiResult::META_INDEXED_TAG_NAME => 'error',
+ ), $result->convertStatusToArray( $status, 'error' ) );
+ $this->assertSame( array(
+ array(
+ 'type' => 'warning',
+ 'message' => 'parentheses',
+ 'params' => array(
+ 0 => '3',
+ ApiResult::META_INDEXED_TAG_NAME => 'param',
+ ),
+ ),
+ array(
+ 'type' => 'warning',
+ 'message' => 'parentheses',
+ 'params' => array(
+ 0 => '4',
+ ApiResult::META_INDEXED_TAG_NAME => 'param',
+ ),
+ ),
+ ApiResult::META_INDEXED_TAG_NAME => 'warning',
+ ), $result->convertStatusToArray( $status, 'warning' ) );
+ }
+
+ /**
+ * @covers ApiResult
+ */
+ public function testDeprecatedContinuation() {
+ // Ignore ApiResult deprecation warnings during this test
+ set_error_handler( function ( $errno, $errstr ) use ( &$warnings ) {
+ if ( preg_match( '/Use of ApiResult::\S+ was deprecated in MediaWiki \d+.\d+\./', $errstr ) ) {
+ return true;
+ }
+ return false;
+ } );
+
+ $reset = new ScopedCallback( 'restore_error_handler' );
+ $allModules = array(
+ new MockApiQueryBase( 'mock1' ),
+ new MockApiQueryBase( 'mock2' ),
+ new MockApiQueryBase( 'mocklist' ),
+ );
+ $generator = new MockApiQueryBase( 'generator' );
+
+ $main = new ApiMain( RequestContext::getMain() );
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( null, $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( array( false, $allModules ), $ret );
+ $result->setContinueParam( $allModules[0], 'm1continue', array( 1, 2 ) );
+ $result->setContinueParam( $allModules[2], 'mlcontinue', 2 );
+ $result->setGeneratorContinueParam( $generator, 'gcontinue', 3 );
+ $result->endContinuation( 'raw' );
+ $result->endContinuation( 'standard' );
+ $this->assertSame( array(
+ 'mlcontinue' => 2,
+ 'm1continue' => '1|2',
+ 'continue' => '||mock2',
+ ), $result->getResultData( 'continue' ) );
+ $this->assertSame( null, $result->getResultData( 'batchcomplete' ) );
+ $this->assertSame( array(
+ 'mock1' => array( 'm1continue' => '1|2' ),
+ 'mocklist' => array( 'mlcontinue' => 2 ),
+ 'generator' => array( 'gcontinue' => 3 ),
+ ), $result->getResultData( 'query-continue' ) );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( null, $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( array( false, $allModules ), $ret );
+ $result->setContinueParam( $allModules[0], 'm1continue', array( 1, 2 ) );
+ $result->setGeneratorContinueParam( $generator, 'gcontinue', array( 3, 4 ) );
+ $result->endContinuation( 'raw' );
+ $result->endContinuation( 'standard' );
+ $this->assertSame( array(
+ 'm1continue' => '1|2',
+ 'continue' => '||mock2|mocklist',
+ ), $result->getResultData( 'continue' ) );
+ $this->assertSame( null, $result->getResultData( 'batchcomplete' ) );
+ $this->assertSame( array(
+ 'mock1' => array( 'm1continue' => '1|2' ),
+ 'generator' => array( 'gcontinue' => '3|4' ),
+ ), $result->getResultData( 'query-continue' ) );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( null, $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( array( false, $allModules ), $ret );
+ $result->setContinueParam( $allModules[2], 'mlcontinue', 2 );
+ $result->setGeneratorContinueParam( $generator, 'gcontinue', 3 );
+ $result->endContinuation( 'raw' );
+ $result->endContinuation( 'standard' );
+ $this->assertSame( array(
+ 'mlcontinue' => 2,
+ 'gcontinue' => 3,
+ 'continue' => 'gcontinue||',
+ ), $result->getResultData( 'continue' ) );
+ $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
+ $this->assertSame( array(
+ 'mocklist' => array( 'mlcontinue' => 2 ),
+ 'generator' => array( 'gcontinue' => 3 ),
+ ), $result->getResultData( 'query-continue' ) );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( null, $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( array( false, $allModules ), $ret );
+ $result->setGeneratorContinueParam( $generator, 'gcontinue', 3 );
+ $result->endContinuation( 'raw' );
+ $result->endContinuation( 'standard' );
+ $this->assertSame( array(
+ 'gcontinue' => 3,
+ 'continue' => 'gcontinue||mocklist',
+ ), $result->getResultData( 'continue' ) );
+ $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
+ $this->assertSame( array(
+ 'generator' => array( 'gcontinue' => 3 ),
+ ), $result->getResultData( 'query-continue' ) );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( null, $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( array( false, $allModules ), $ret );
+ $result->setContinueParam( $allModules[0], 'm1continue', array( 1, 2 ) );
+ $result->setContinueParam( $allModules[2], 'mlcontinue', 2 );
+ $result->endContinuation( 'raw' );
+ $result->endContinuation( 'standard' );
+ $this->assertSame( array(
+ 'mlcontinue' => 2,
+ 'm1continue' => '1|2',
+ 'continue' => '||mock2',
+ ), $result->getResultData( 'continue' ) );
+ $this->assertSame( null, $result->getResultData( 'batchcomplete' ) );
+ $this->assertSame( array(
+ 'mock1' => array( 'm1continue' => '1|2' ),
+ 'mocklist' => array( 'mlcontinue' => 2 ),
+ ), $result->getResultData( 'query-continue' ) );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( null, $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( array( false, $allModules ), $ret );
+ $result->setContinueParam( $allModules[0], 'm1continue', array( 1, 2 ) );
+ $result->endContinuation( 'raw' );
+ $result->endContinuation( 'standard' );
+ $this->assertSame( array(
+ 'm1continue' => '1|2',
+ 'continue' => '||mock2|mocklist',
+ ), $result->getResultData( 'continue' ) );
+ $this->assertSame( null, $result->getResultData( 'batchcomplete' ) );
+ $this->assertSame( array(
+ 'mock1' => array( 'm1continue' => '1|2' ),
+ ), $result->getResultData( 'query-continue' ) );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( null, $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( array( false, $allModules ), $ret );
+ $result->setContinueParam( $allModules[2], 'mlcontinue', 2 );
+ $result->endContinuation( 'raw' );
+ $result->endContinuation( 'standard' );
+ $this->assertSame( array(
+ 'mlcontinue' => 2,
+ 'continue' => '-||mock1|mock2',
+ ), $result->getResultData( 'continue' ) );
+ $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
+ $this->assertSame( array(
+ 'mocklist' => array( 'mlcontinue' => 2 ),
+ ), $result->getResultData( 'query-continue' ) );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( null, $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame( array( false, $allModules ), $ret );
+ $result->endContinuation( 'raw' );
+ $result->endContinuation( 'standard' );
+ $this->assertSame( null, $result->getResultData( 'continue' ) );
+ $this->assertSame( true, $result->getResultData( 'batchcomplete' ) );
+ $this->assertSame( null, $result->getResultData( 'query-continue' ) );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( '||mock2', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame(
+ array( false, array_values( array_diff_key( $allModules, array( 1 => 1 ) ) ) ),
+ $ret
+ );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $ret = $result->beginContinuation( '-||', $allModules, array( 'mock1', 'mock2' ) );
+ $this->assertSame(
+ array( true, array_values( array_diff_key( $allModules, array( 0 => 0, 1 => 1 ) ) ) ),
+ $ret
+ );
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ try {
+ $result->beginContinuation( 'foo', $allModules, array( 'mock1', 'mock2' ) );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( UsageException $ex ) {
+ $this->assertSame(
+ 'Invalid continue param. You should pass the original value returned by the previous query',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ $main->setContinuationManager( null );
+
+ $result = new ApiResult( 8388608 );
+ $result->setMainForContinuation( $main );
+ $result->beginContinuation( '||mock2', array_slice( $allModules, 0, 2 ), array( 'mock1', 'mock2' ) );
+ try {
+ $result->setContinueParam( $allModules[1], 'm2continue', 1 );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( UnexpectedValueException $ex ) {
+ $this->assertSame(
+ 'Module \'mock2\' was not supposed to have been executed, but it was executed anyway',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ try {
+ $result->setContinueParam( $allModules[2], 'mlcontinue', 1 );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( UnexpectedValueException $ex ) {
+ $this->assertSame(
+ 'Module \'mocklist\' called ApiContinuationManager::addContinueParam but was not passed to ApiContinuationManager::__construct',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ $main->setContinuationManager( null );
+
+ }
+
+ public function testObjectSerialization() {
+ $arr = array();
+ ApiResult::setValue( $arr, 'foo', (object)array( 'a' => 1, 'b' => 2 ) );
+ $this->assertSame( array(
+ 'a' => 1,
+ 'b' => 2,
+ ApiResult::META_TYPE => 'assoc',
+ ), $arr['foo'] );
+
+ $arr = array();
+ ApiResult::setValue( $arr, 'foo', new ApiResultTestStringifiableObject() );
+ $this->assertSame( 'Ok', $arr['foo'] );
+
+ $arr = array();
+ ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject( 'Ok' ) );
+ $this->assertSame( 'Ok', $arr['foo'] );
+
+ try {
+ $arr = array();
+ ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject(
+ new ApiResultTestStringifiableObject()
+ ) );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( UnexpectedValueException $ex ) {
+ $this->assertSame(
+ 'ApiResultTestSerializableObject::serializeForApiResult() returned an object of class ApiResultTestStringifiableObject',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ try {
+ $arr = array();
+ ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject( NAN ) );
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( UnexpectedValueException $ex ) {
+ $this->assertSame(
+ 'ApiResultTestSerializableObject::serializeForApiResult() returned an invalid value: Cannot add non-finite floats to ApiResult',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+
+ $arr = array();
+ ApiResult::setValue( $arr, 'foo', new ApiResultTestSerializableObject(
+ array(
+ 'one' => new ApiResultTestStringifiableObject( '1' ),
+ 'two' => new ApiResultTestSerializableObject( 2 ),
+ )
+ ) );
+ $this->assertSame( array(
+ 'one' => '1',
+ 'two' => 2,
+ ), $arr['foo'] );
+ }
+
+}
+
+class ApiResultTestStringifiableObject {
+ private $ret;
+
+ public function __construct( $ret = 'Ok' ) {
+ $this->ret = $ret;
+ }
+
+ public function __toString() {
+ return $this->ret;
+ }
+}
+
+class ApiResultTestSerializableObject {
+ private $ret;
+
+ public function __construct( $ret ) {
+ $this->ret = $ret;
+ }
+
+ public function __toString() {
+ return "Fail";
+ }
+
+ public function serializeForApiResult() {
+ return $this->ret;
+ }
+}
diff --git a/tests/phpunit/includes/api/ApiTestCase.php b/tests/phpunit/includes/api/ApiTestCase.php
index cd141947..da62bb0a 100644
--- a/tests/phpunit/includes/api/ApiTestCase.php
+++ b/tests/phpunit/includes/api/ApiTestCase.php
@@ -8,6 +8,11 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
*/
protected $apiContext;
+ /**
+ * @var array
+ */
+ protected $tablesUsed = array( 'user', 'user_groups', 'user_properties' );
+
protected function setUp() {
global $wgServer;
@@ -41,6 +46,17 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
$this->apiContext = new ApiTestContext();
}
+ protected function tearDown() {
+ // Avoid leaking session over tests
+ if ( session_id() != '' ) {
+ global $wgUser;
+ $wgUser->logout();
+ session_destroy();
+ }
+
+ parent::tearDown();
+ }
+
/**
* Edits or creates a page/revision
* @param string $pageName Page title
@@ -100,7 +116,7 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
// construct result
$results = array(
- $module->getResultData(),
+ $module->getResult()->getResultData( null, array( 'Strip' => 'all' ) ),
$context->getRequest(),
$context->getRequest()->getSessionArray()
);
@@ -134,10 +150,14 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
}
if ( isset( $session['wsToken'] ) && $session['wsToken'] ) {
+ // @todo Why does this directly mess with the session? Fix that.
// add edit token to fake session
$session['wsEditToken'] = $session['wsToken'];
// add token to request parameters
- $params['token'] = md5( $session['wsToken'] ) . User::EDIT_TOKEN_SUFFIX;
+ $timestamp = wfTimestamp();
+ $params['token'] = hash_hmac( 'md5', $timestamp, $session['wsToken'] ) .
+ dechex( $timestamp ) .
+ User::EDIT_TOKEN_SUFFIX;
return $this->doApiRequest( $params, $session, false, $user );
} else {
diff --git a/tests/phpunit/includes/api/ApiTestCaseUpload.php b/tests/phpunit/includes/api/ApiTestCaseUpload.php
index 7e513394..87f794c1 100644
--- a/tests/phpunit/includes/api/ApiTestCaseUpload.php
+++ b/tests/phpunit/includes/api/ApiTestCaseUpload.php
@@ -1,9 +1,8 @@
<?php
/**
- * * Abstract class to support upload tests
+ * Abstract class to support upload tests
*/
-
abstract class ApiTestCaseUpload extends ApiTestCase {
/**
* Fixture -- run before every test
@@ -21,12 +20,6 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
$this->clearFakeUploads();
}
- protected function tearDown() {
- $this->clearTempUpload();
-
- parent::tearDown();
- }
-
/**
* Helper function -- remove files and associated articles by Title
*
@@ -105,7 +98,7 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
* @return bool
*/
function fakeUploadFile( $fieldName, $fileName, $type, $filePath ) {
- $tmpName = tempnam( wfTempDir(), "" );
+ $tmpName = $this->getNewTempFile();
if ( !file_exists( $filePath ) ) {
throw new Exception( "$filePath doesn't exist!" );
}
@@ -132,7 +125,7 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
}
function fakeUploadChunk( $fieldName, $fileName, $type, & $chunkData ) {
- $tmpName = tempnam( wfTempDir(), "" );
+ $tmpName = $this->getNewTempFile();
// copy the chunk data to temp location:
if ( !file_put_contents( $tmpName, $chunkData ) ) {
throw new Exception( "couldn't copy chunk data to $tmpName" );
@@ -153,15 +146,6 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
);
}
- function clearTempUpload() {
- if ( isset( $_FILES['file']['tmp_name'] ) ) {
- $tmp = $_FILES['file']['tmp_name'];
- if ( file_exists( $tmp ) ) {
- unlink( $tmp );
- }
- }
- }
-
/**
* Remove traces of previous fake uploads
*/
diff --git a/tests/phpunit/includes/api/ApiUploadTest.php b/tests/phpunit/includes/api/ApiUploadTest.php
index 8ea761f8..f74fc354 100644
--- a/tests/phpunit/includes/api/ApiUploadTest.php
+++ b/tests/phpunit/includes/api/ApiUploadTest.php
@@ -1,31 +1,24 @@
<?php
/**
- * @group API
- * @group Database
- * @group medium
- */
-
-/**
* n.b. Ensure that you can write to the images/ directory as the
* user that will run tests.
- */
-
-// Note for reviewers: this intentionally duplicates functionality already in
-// "ApiSetup" and so on. This framework works better IMO and has less
-// strangeness (such as test cases inheriting from "ApiSetup"...) (and in the
-// case of the other Upload tests, this flat out just actually works... )
-
-// @todo Port the other Upload tests, and other API tests to this framework
-
-require_once 'ApiTestCaseUpload.php';
-
-/**
- * @group Database
- * @group Broken
- * Broken test, reports false errors from time to time.
+ *
+ * Note for reviewers: this intentionally duplicates functionality already in
+ * "ApiSetup" and so on. This framework works better IMO and has less
+ * strangeness (such as test cases inheriting from "ApiSetup"...) (and in the
+ * case of the other Upload tests, this flat out just actually works... )
+ *
+ * @todo Port the other Upload tests, and other API tests to this framework
+ *
+ * @todo Broken test, reports false errors from time to time.
* See https://bugzilla.wikimedia.org/26169
*
- * This is pretty sucky... needs to be prettified.
+ * @todo This is pretty sucky... needs to be prettified.
+ *
+ * @group API
+ * @group Database
+ * @group medium
+ * @group Broken
*/
class ApiUploadTest extends ApiTestCaseUpload {
/**
@@ -105,7 +98,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
try {
$randomImageGenerator = new RandomImageGenerator();
- $filePaths = $randomImageGenerator->writeImages( 1, $extension, wfTempDir() );
+ $filePaths = $randomImageGenerator->writeImages( 1, $extension, $this->getNewTempDirectory() );
} catch ( Exception $e ) {
$this->markTestIncomplete( $e->getMessage() );
}
@@ -145,7 +138,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
// clean up
$this->deleteFileByFilename( $fileName );
- unlink( $filePath );
}
/**
@@ -154,7 +146,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
public function testUploadZeroLength( $session ) {
$mimeType = 'image/png';
- $filePath = tempnam( wfTempDir(), "" );
+ $filePath = $this->getNewTempFile();
$fileName = "apiTestUploadZeroLength.png";
$this->deleteFileByFileName( $fileName );
@@ -182,7 +174,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
// clean up
$this->deleteFileByFilename( $fileName );
- unlink( $filePath );
}
/**
@@ -194,7 +185,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
try {
$randomImageGenerator = new RandomImageGenerator();
- $filePaths = $randomImageGenerator->writeImages( 2, $extension, wfTempDir() );
+ $filePaths = $randomImageGenerator->writeImages( 2, $extension, $this->getNewTempDirectory() );
} catch ( Exception $e ) {
$this->markTestIncomplete( $e->getMessage() );
}
@@ -253,8 +244,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
// clean up
$this->deleteFileByFilename( $fileName );
- unlink( $filePaths[0] );
- unlink( $filePaths[1] );
}
/**
@@ -266,7 +255,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
try {
$randomImageGenerator = new RandomImageGenerator();
- $filePaths = $randomImageGenerator->writeImages( 1, $extension, wfTempDir() );
+ $filePaths = $randomImageGenerator->writeImages( 1, $extension, $this->getNewTempDirectory() );
} catch ( Exception $e ) {
$this->markTestIncomplete( $e->getMessage() );
}
@@ -335,7 +324,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
// clean up
$this->deleteFileByFilename( $fileNames[0] );
$this->deleteFileByFilename( $fileNames[1] );
- unlink( $filePaths[0] );
}
/**
@@ -351,7 +339,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
try {
$randomImageGenerator = new RandomImageGenerator();
- $filePaths = $randomImageGenerator->writeImages( 1, $extension, wfTempDir() );
+ $filePaths = $randomImageGenerator->writeImages( 1, $extension, $this->getNewTempDirectory() );
} catch ( Exception $e ) {
$this->markTestIncomplete( $e->getMessage() );
}
@@ -419,7 +407,6 @@ class ApiUploadTest extends ApiTestCaseUpload {
// clean up
$this->deleteFileByFilename( $fileName );
- unlink( $filePath );
}
/**
@@ -433,16 +420,14 @@ class ApiUploadTest extends ApiTestCaseUpload {
$chunkSize = 1048576;
// Download a large image file
- // ( using RandomImageGenerator for large files is not stable )
+ // (using RandomImageGenerator for large files is not stable)
+ // @todo Don't download files from wikimedia.org
$mimeType = 'image/jpeg';
$url = 'http://upload.wikimedia.org/wikipedia/commons/'
. 'e/ed/Oberaargletscher_from_Oberaar%2C_2010_07.JPG';
- $filePath = wfTempDir() . '/Oberaargletscher_from_Oberaar.jpg';
+ $filePath = $this->getNewTempDirectory() . '/Oberaargletscher_from_Oberaar.jpg';
try {
- // Only download if the file is not avaliable in the temp location:
- if ( !is_file( $filePath ) ) {
- copy( $url, $filePath );
- }
+ copy( $url, $filePath );
} catch ( Exception $e ) {
$this->markTestIncomplete( $e->getMessage() );
}
@@ -566,7 +551,5 @@ class ApiUploadTest extends ApiTestCaseUpload {
// clean up
$this->deleteFileByFilename( $fileName );
- // don't remove downloaded temporary file for fast subquent tests.
- //unlink( $filePath );
}
}
diff --git a/tests/phpunit/includes/api/MockApi.php b/tests/phpunit/includes/api/MockApi.php
index d94aa2cd..516da0c8 100644
--- a/tests/phpunit/includes/api/MockApi.php
+++ b/tests/phpunit/includes/api/MockApi.php
@@ -4,9 +4,6 @@ class MockApi extends ApiBase {
public function execute() {
}
- public function getVersion() {
- }
-
public function __construct() {
}
diff --git a/tests/phpunit/includes/api/MockApiQueryBase.php b/tests/phpunit/includes/api/MockApiQueryBase.php
index 4bede519..f5b50e5a 100644
--- a/tests/phpunit/includes/api/MockApiQueryBase.php
+++ b/tests/phpunit/includes/api/MockApiQueryBase.php
@@ -1,11 +1,15 @@
<?php
class MockApiQueryBase extends ApiQueryBase {
+ private $name;
+
public function execute() {
}
- public function getVersion() {
+ public function __construct( $name = 'mock' ) {
+ $this->name = $name;
}
- public function __construct() {
+ public function getModuleName() {
+ return $this->name;
}
}
diff --git a/tests/phpunit/includes/api/PrefixUniquenessTest.php b/tests/phpunit/includes/api/PrefixUniquenessTest.php
index 13da33c7..d04766be 100644
--- a/tests/phpunit/includes/api/PrefixUniquenessTest.php
+++ b/tests/phpunit/includes/api/PrefixUniquenessTest.php
@@ -20,7 +20,7 @@ class PrefixUniquenessTest extends MediaWikiTestCase {
$class = get_class( $module );
$prefix = $module->getModulePrefix();
- if ( isset( $prefixes[$prefix] ) ) {
+ if ( $prefix !== '' && isset( $prefixes[$prefix] ) ) {
$this->fail( "Module prefix '{$prefix}' is shared between {$class} and {$prefixes[$prefix]}" );
}
$prefixes[$module->getModulePrefix()] = $class;
diff --git a/tests/phpunit/includes/api/format/ApiFormatDbgTest.php b/tests/phpunit/includes/api/format/ApiFormatDbgTest.php
new file mode 100644
index 00000000..3fcfc73f
--- /dev/null
+++ b/tests/phpunit/includes/api/format/ApiFormatDbgTest.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * @group API
+ * @covers ApiFormatDbg
+ */
+class ApiFormatDbgTest extends ApiFormatTestBase {
+
+ protected $printerName = 'dbg';
+
+ public static function provideGeneralEncoding() {
+ $warning = "\n 'warnings' => \n array (\n 'dbg' => \n array (\n" .
+ " '*' => 'format=dbg has been deprecated. Please use format=json instead.',\n" .
+ " ),\n ),";
+
+ return array(
+ // Basic types
+ array( array( null ), "array ({$warning}\n 0 => NULL,\n)" ),
+ array( array( true ), "array ({$warning}\n 0 => '',\n)" ),
+ array( array( false ), "array ({$warning}\n)" ),
+ array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ "array ({$warning}\n 0 => true,\n)" ),
+ array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ "array ({$warning}\n 0 => false,\n)" ),
+ array( array( 42 ), "array ({$warning}\n 0 => 42,\n)" ),
+ array( array( 42.5 ), "array ({$warning}\n 0 => 42.5,\n)" ),
+ array( array( 1e42 ), "array ({$warning}\n 0 => 1.0E+42,\n)" ),
+ array( array( 'foo' ), "array ({$warning}\n 0 => 'foo',\n)" ),
+ array( array( 'fóo' ), "array ({$warning}\n 0 => 'fóo',\n)" ),
+
+ // Arrays and objects
+ array( array( array() ), "array ({$warning}\n 0 => \n array (\n ),\n)" ),
+ array( array( array( 1 ) ), "array ({$warning}\n 0 => \n array (\n 0 => 1,\n ),\n)" ),
+ array( array( array( 'x' => 1 ) ), "array ({$warning}\n 0 => \n array (\n 'x' => 1,\n ),\n)" ),
+ array( array( array( 2 => 1 ) ), "array ({$warning}\n 0 => \n array (\n 2 => 1,\n ),\n)" ),
+ array( array( (object)array() ), "array ({$warning}\n 0 => \n array (\n ),\n)" ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), "array ({$warning}\n 0 => \n array (\n 0 => 1,\n ),\n)" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), "array ({$warning}\n 0 => \n array (\n 0 => 1,\n ),\n)" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), "array ({$warning}\n 0 => \n array (\n 'x' => 1,\n ),\n)" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ "array ({$warning}\n 0 => \n array (\n 0 => \n array (\n 'key' => 'x',\n '*' => 1,\n ),\n ),\n)" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), "array ({$warning}\n 0 => \n array (\n 'x' => 1,\n ),\n)" ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), "array ({$warning}\n 0 => \n array (\n 0 => 'a',\n 1 => 'b',\n ),\n)" ),
+
+ // Content
+ array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ "array ({$warning}\n '*' => 'foo',\n)" ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
+ "array ({$warning}\n 'foo' => \n array (\n '*' => 'foo',\n ),\n)" ),
+ );
+ }
+
+}
diff --git a/tests/phpunit/includes/api/format/ApiFormatDumpTest.php b/tests/phpunit/includes/api/format/ApiFormatDumpTest.php
new file mode 100644
index 00000000..c0f67f8d
--- /dev/null
+++ b/tests/phpunit/includes/api/format/ApiFormatDumpTest.php
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * @group API
+ * @covers ApiFormatDump
+ */
+class ApiFormatDumpTest extends ApiFormatTestBase {
+
+ protected $printerName = 'dump';
+
+ public static function provideGeneralEncoding() {
+ // Sigh. Docs claim it's a boolean, but can have values 0, 1, or 2.
+ // Fortunately wfIniGetBool does the right thing.
+ if ( wfIniGetBool( 'xdebug.overload_var_dump' ) ) {
+ return array(
+ array( array(), 'Cannot test ApiFormatDump when xDebug overloads var_dump', array( 'SKIP' => true ) ),
+ );
+ }
+
+ $warning = "\n [\"warnings\"]=>\n array(1) {\n [\"dump\"]=>\n array(1) {\n [\"*\"]=>\n" .
+ " string(64) \"format=dump has been deprecated. Please use format=json instead.\"\n" .
+ " }\n }";
+
+ return array(
+ // Basic types
+ array( array( null ), "array(2) {{$warning}\n [0]=>\n NULL\n}\n" ),
+ array( array( true ), "array(2) {{$warning}\n [0]=>\n string(0) \"\"\n}\n" ),
+ array( array( false ), "array(1) {{$warning}\n}\n" ),
+ array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ "array(2) {{$warning}\n [0]=>\n bool(true)\n}\n" ),
+ array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ "array(2) {{$warning}\n [0]=>\n bool(false)\n}\n" ),
+ array( array( 42 ), "array(2) {{$warning}\n [0]=>\n int(42)\n}\n" ),
+ array( array( 42.5 ), "array(2) {{$warning}\n [0]=>\n float(42.5)\n}\n" ),
+ array( array( 1e42 ), "array(2) {{$warning}\n [0]=>\n float(1.0E+42)\n}\n" ),
+ array( array( 'foo' ), "array(2) {{$warning}\n [0]=>\n string(3) \"foo\"\n}\n" ),
+ array( array( 'fóo' ), "array(2) {{$warning}\n [0]=>\n string(4) \"fóo\"\n}\n" ),
+
+ // Arrays
+ array( array( array() ), "array(2) {{$warning}\n [0]=>\n array(0) {\n }\n}\n" ),
+ array( array( array( 1 ) ), "array(2) {{$warning}\n [0]=>\n array(1) {\n [0]=>\n int(1)\n }\n}\n" ),
+ array( array( array( 'x' => 1 ) ), "array(2) {{$warning}\n [0]=>\n array(1) {\n [\"x\"]=>\n int(1)\n }\n}\n" ),
+ array( array( array( 2 => 1 ) ), "array(2) {{$warning}\n [0]=>\n array(1) {\n [2]=>\n int(1)\n }\n}\n" ),
+ array( array( (object)array() ), "array(2) {{$warning}\n [0]=>\n array(0) {\n }\n}\n" ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), "array(2) {{$warning}\n [0]=>\n array(1) {\n [0]=>\n int(1)\n }\n}\n" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), "array(2) {{$warning}\n [0]=>\n array(1) {\n [0]=>\n int(1)\n }\n}\n" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), "array(2) {{$warning}\n [0]=>\n array(1) {\n [\"x\"]=>\n int(1)\n }\n}\n" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ "array(2) {{$warning}\n [0]=>\n array(1) {\n [0]=>\n array(2) {\n [\"key\"]=>\n string(1) \"x\"\n [\"*\"]=>\n int(1)\n }\n }\n}\n" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), "array(2) {{$warning}\n [0]=>\n array(1) {\n [\"x\"]=>\n int(1)\n }\n}\n" ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), "array(2) {{$warning}\n [0]=>\n array(2) {\n [0]=>\n string(1) \"a\"\n [1]=>\n string(1) \"b\"\n }\n}\n" ),
+
+ // Content
+ array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ "array(2) {{$warning}\n [\"*\"]=>\n string(3) \"foo\"\n}\n" ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
+ "array(2) {{$warning}\n [\"foo\"]=>\n array(1) {\n [\"*\"]=>\n string(3) \"foo\"\n }\n}\n" ),
+ );
+ }
+
+}
diff --git a/tests/phpunit/includes/api/format/ApiFormatJsonTest.php b/tests/phpunit/includes/api/format/ApiFormatJsonTest.php
index fc1f9021..3dfcaf0f 100644
--- a/tests/phpunit/includes/api/format/ApiFormatJsonTest.php
+++ b/tests/phpunit/includes/api/format/ApiFormatJsonTest.php
@@ -2,21 +2,109 @@
/**
* @group API
- * @group Database
- * @group medium
* @covers ApiFormatJson
*/
class ApiFormatJsonTest extends ApiFormatTestBase {
- public function testValidSyntax( ) {
- $data = $this->apiRequest( 'json', array( 'action' => 'query', 'meta' => 'siteinfo' ) );
+ protected $printerName = 'json';
- $this->assertInternalType( 'array', json_decode( $data, true ) );
- $this->assertGreaterThan( 0, count( (array)$data ) );
+ private static function addFormatVersion( $format, $arr ) {
+ foreach ( $arr as &$p ) {
+ if ( !isset( $p[2] ) ) {
+ $p[2] = array( 'formatversion' => $format );
+ } else {
+ $p[2]['formatversion'] = $format;
+ }
+ }
+ return $arr;
}
- public function testJsonpInjection( ) {
- $data = $this->apiRequest( 'json', array( 'action' => 'query', 'meta' => 'siteinfo', 'callback' => 'myCallback' ) );
- $this->assertEquals( '/**/myCallback(', substr( $data, 0, 15 ) );
+ public static function provideGeneralEncoding() {
+ return array_merge(
+ self::addFormatVersion( 1, array(
+ // Basic types
+ array( array( null ), '[null]' ),
+ array( array( true ), '[""]' ),
+ array( array( false ), '[]' ),
+ array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ), '[true]' ),
+ array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ), '[false]' ),
+ array( array( 42 ), '[42]' ),
+ array( array( 42.5 ), '[42.5]' ),
+ array( array( 1e42 ), '[1.0e+42]' ),
+ array( array( 'foo' ), '["foo"]' ),
+ array( array( 'fóo' ), '["f\u00f3o"]' ),
+ array( array( 'fóo' ), '["fóo"]', array( 'utf8' => 1 ) ),
+
+ // Arrays and objects
+ array( array( array() ), '[[]]' ),
+ array( array( array( 1 ) ), '[[1]]' ),
+ array( array( array( 'x' => 1 ) ), '[{"x":1}]' ),
+ array( array( array( 2 => 1 ) ), '[{"2":1}]' ),
+ array( array( (object)array() ), '[{}]' ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), '[{"0":1}]' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), '[[1]]' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), '[{"x":1}]' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ '[[{"key":"x","*":1}]]' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), '[{"x":1}]' ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), '[["a","b"]]' ),
+
+ // Content
+ array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ '{"*":"foo"}' ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
+ '{"foo":{"*":"foo"}}' ),
+
+ // Callbacks
+ array( array( 1 ), '/**/myCallback([1])', array( 'callback' => 'myCallback' ) ),
+
+ // Cross-domain mangling
+ array( array( '< Cross-Domain-Policy >' ), '["\u003C Cross-Domain-Policy \u003E"]' ),
+ ) ),
+ self::addFormatVersion( 2, array(
+ // Basic types
+ array( array( null ), '[null]' ),
+ array( array( true ), '[true]' ),
+ array( array( false ), '[false]' ),
+ array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ), '[true]' ),
+ array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ), '[false]' ),
+ array( array( 42 ), '[42]' ),
+ array( array( 42.5 ), '[42.5]' ),
+ array( array( 1e42 ), '[1.0e+42]' ),
+ array( array( 'foo' ), '["foo"]' ),
+ array( array( 'fóo' ), '["fóo"]' ),
+ array( array( 'fóo' ), '["f\u00f3o"]', array( 'ascii' => 1 ) ),
+
+ // Arrays and objects
+ array( array( array() ), '[[]]' ),
+ array( array( array( 'x' => 1 ) ), '[{"x":1}]' ),
+ array( array( array( 2 => 1 ) ), '[{"2":1}]' ),
+ array( array( (object)array() ), '[{}]' ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), '[{"0":1}]' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), '[[1]]' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), '[{"x":1}]' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ '[{"x":1}]' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), '[[1]]' ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), '[{"0":"a","1":"b"}]' ),
+
+ // Content
+ array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ '{"content":"foo"}' ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
+ '{"foo":"foo"}' ),
+
+ // Callbacks
+ array( array( 1 ), '/**/myCallback([1])', array( 'callback' => 'myCallback' ) ),
+
+ // Cross-domain mangling
+ array( array( '< Cross-Domain-Policy >' ), '["\u003C Cross-Domain-Policy \u003E"]' ),
+ ) )
+ );
}
+
}
diff --git a/tests/phpunit/includes/api/format/ApiFormatNoneTest.php b/tests/phpunit/includes/api/format/ApiFormatNoneTest.php
index cabd750b..8f81a411 100644
--- a/tests/phpunit/includes/api/format/ApiFormatNoneTest.php
+++ b/tests/phpunit/includes/api/format/ApiFormatNoneTest.php
@@ -2,15 +2,43 @@
/**
* @group API
- * @group Database
- * @group medium
* @covers ApiFormatNone
*/
class ApiFormatNoneTest extends ApiFormatTestBase {
- public function testValidSyntax( ) {
- $data = $this->apiRequest( 'none', array( 'action' => 'query', 'meta' => 'siteinfo' ) );
+ protected $printerName = 'none';
- $this->assertEquals( '', $data ); // No output!
+ public static function provideGeneralEncoding() {
+ return array(
+ // Basic types
+ array( array( null ), '' ),
+ array( array( true ), '' ),
+ array( array( false ), '' ),
+ array( array( 42 ), '' ),
+ array( array( 42.5 ), '' ),
+ array( array( 1e42 ), '' ),
+ array( array( 'foo' ), '' ),
+ array( array( 'fóo' ), '' ),
+
+ // Arrays and objects
+ array( array( array() ), '' ),
+ array( array( array( 1 ) ), '' ),
+ array( array( array( 'x' => 1 ) ), '' ),
+ array( array( array( 2 => 1 ) ), '' ),
+ array( array( (object)array() ), '' ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), '' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), '' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), '' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ), '' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), '' ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), '' ),
+
+ // Content
+ array( array( '*' => 'foo' ), '' ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ), '' ),
+ );
}
+
}
diff --git a/tests/phpunit/includes/api/format/ApiFormatPhpTest.php b/tests/phpunit/includes/api/format/ApiFormatPhpTest.php
index 54f447a9..0cb44e92 100644
--- a/tests/phpunit/includes/api/format/ApiFormatPhpTest.php
+++ b/tests/phpunit/includes/api/format/ApiFormatPhpTest.php
@@ -2,16 +2,143 @@
/**
* @group API
- * @group Database
- * @group medium
* @covers ApiFormatPhp
*/
class ApiFormatPhpTest extends ApiFormatTestBase {
- public function testValidSyntax( ) {
- $data = $this->apiRequest( 'php', array( 'action' => 'query', 'meta' => 'siteinfo' ) );
+ protected $printerName = 'php';
- $this->assertInternalType( 'array', unserialize( $data ) );
- $this->assertGreaterThan( 0, count( (array)$data ) );
+ private static function addFormatVersion( $format, $arr ) {
+ foreach ( $arr as &$p ) {
+ if ( !isset( $p[2] ) ) {
+ $p[2] = array( 'formatversion' => $format );
+ } else {
+ $p[2]['formatversion'] = $format;
+ }
+ }
+ return $arr;
}
+
+ public static function provideGeneralEncoding() {
+ return array_merge(
+ self::addFormatVersion( 1, array(
+ // Basic types
+ array( array( null ), 'a:1:{i:0;N;}' ),
+ array( array( true ), 'a:1:{i:0;s:0:"";}' ),
+ array( array( false ), 'a:0:{}' ),
+ array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ 'a:1:{i:0;b:1;}' ),
+ array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ 'a:1:{i:0;b:0;}' ),
+ array( array( 42 ), 'a:1:{i:0;i:42;}' ),
+ array( array( 42.5 ), 'a:1:{i:0;d:42.5;}' ),
+ array( array( 1e42 ), 'a:1:{i:0;d:1.0E+42;}' ),
+ array( array( 'foo' ), 'a:1:{i:0;s:3:"foo";}' ),
+ array( array( 'fóo' ), 'a:1:{i:0;s:4:"fóo";}' ),
+
+ // Arrays and objects
+ array( array( array() ), 'a:1:{i:0;a:0:{}}' ),
+ array( array( array( 1 ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
+ array( array( array( 'x' => 1 ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
+ array( array( array( 2 => 1 ) ), 'a:1:{i:0;a:1:{i:2;i:1;}}' ),
+ array( array( (object)array() ), 'a:1:{i:0;a:0:{}}' ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ 'a:1:{i:0;a:1:{i:0;a:2:{s:3:"key";s:1:"x";s:1:"*";i:1;}}}' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), 'a:1:{i:0;a:2:{i:0;s:1:"a";i:1;s:1:"b";}}' ),
+
+ // Content
+ array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ 'a:1:{s:1:"*";s:3:"foo";}' ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
+ 'a:1:{s:3:"foo";a:1:{s:1:"*";s:3:"foo";}}' ),
+ ) ),
+ self::addFormatVersion( 2, array(
+ // Basic types
+ array( array( null ), 'a:1:{i:0;N;}' ),
+ array( array( true ), 'a:1:{i:0;b:1;}' ),
+ array( array( false ), 'a:1:{i:0;b:0;}' ),
+ array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ 'a:1:{i:0;b:1;}' ),
+ array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ 'a:1:{i:0;b:0;}' ),
+ array( array( 42 ), 'a:1:{i:0;i:42;}' ),
+ array( array( 42.5 ), 'a:1:{i:0;d:42.5;}' ),
+ array( array( 1e42 ), 'a:1:{i:0;d:1.0E+42;}' ),
+ array( array( 'foo' ), 'a:1:{i:0;s:3:"foo";}' ),
+ array( array( 'fóo' ), 'a:1:{i:0;s:4:"fóo";}' ),
+
+ // Arrays and objects
+ array( array( array() ), 'a:1:{i:0;a:0:{}}' ),
+ array( array( array( 1 ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
+ array( array( array( 'x' => 1 ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
+ array( array( array( 2 => 1 ) ), 'a:1:{i:0;a:1:{i:2;i:1;}}' ),
+ array( array( (object)array() ), 'a:1:{i:0;a:0:{}}' ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), 'a:1:{i:0;a:2:{i:0;s:1:"a";i:1;s:1:"b";}}' ),
+
+ // Content
+ array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ 'a:1:{s:7:"content";s:3:"foo";}' ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
+ 'a:1:{s:3:"foo";s:3:"foo";}' ),
+ ) )
+ );
+ }
+
+ public function testCrossDomainMangling() {
+ $config = new HashConfig( array( 'MangleFlashPolicy' => false ) );
+ $context = new RequestContext;
+ $context->setConfig( new MultiConfig( array(
+ $config,
+ $context->getConfig(),
+ ) ) );
+ $main = new ApiMain( $context );
+ $main->getResult()->addValue( null, null, '< Cross-Domain-Policy >' );
+
+ if ( !function_exists( 'wfOutputHandler' ) ) {
+ function wfOutputHandler( $s ) {
+ return $s;
+ }
+ }
+
+ $printer = $main->createPrinterByName( 'php' );
+ ob_start( 'wfOutputHandler' );
+ $printer->initPrinter();
+ $printer->execute();
+ $printer->closePrinter();
+ $ret = ob_get_clean();
+ $this->assertSame( 'a:1:{i:0;s:23:"< Cross-Domain-Policy >";}', $ret );
+
+ $config->set( 'MangleFlashPolicy', true );
+ $printer = $main->createPrinterByName( 'php' );
+ ob_start( 'wfOutputHandler' );
+ try {
+ $printer->initPrinter();
+ $printer->execute();
+ $printer->closePrinter();
+ ob_end_clean();
+ $this->fail( 'Expected exception not thrown' );
+ } catch ( UsageException $ex ) {
+ ob_end_clean();
+ $this->assertSame(
+ 'This response cannot be represented using format=php. See https://bugzilla.wikimedia.org/show_bug.cgi?id=66776',
+ $ex->getMessage(),
+ 'Expected exception'
+ );
+ }
+ }
+
}
diff --git a/tests/phpunit/includes/api/format/ApiFormatTestBase.php b/tests/phpunit/includes/api/format/ApiFormatTestBase.php
index 5f6d53ce..cabf62b1 100644
--- a/tests/phpunit/includes/api/format/ApiFormatTestBase.php
+++ b/tests/phpunit/includes/api/format/ApiFormatTestBase.php
@@ -1,32 +1,64 @@
<?php
-abstract class ApiFormatTestBase extends ApiTestCase {
+abstract class ApiFormatTestBase extends MediaWikiTestCase {
/**
- * @param string $format
- * @param array $params
- * @param array $data
- *
- * @return string
+ * Name of the formatter being tested
+ * @var string
*/
- protected function apiRequest( $format, $params, $data = null ) {
- $data = parent::doApiRequest( $params, $data, true );
-
- /** @var ApiMain $module */
- $module = $data[3];
+ protected $printerName;
- $printer = $module->createPrinterByName( $format );
- $printer->setUnescapeAmps( false );
+ /**
+ * Return general data to be encoded for testing
+ * @return array See self::testGeneralEncoding
+ * @throws Exception
+ */
+ public static function provideGeneralEncoding() {
+ throw new Exception( 'Subclass must implement ' . __METHOD__ );
+ }
- $printer->initPrinter( false );
+ /**
+ * Get the formatter output for the given input data
+ * @param array $params Query parameters
+ * @param array $data Data to encode
+ * @param string $class Printer class to use instead of the normal one
+ * @return string
+ * @throws Exception
+ */
+ protected function encodeData( array $params, array $data, $class = null ) {
+ $context = new RequestContext;
+ $context->setRequest( new FauxRequest( $params, true ) );
+ $main = new ApiMain( $context );
+ if ( $class !== null ) {
+ $main->getModuleManager()->addModule( $this->printerName, 'format', $class );
+ }
+ $result = $main->getResult();
+ $result->addArrayType( null, 'default' );
+ foreach ( $data as $k => $v ) {
+ $result->addValue( null, $k, $v );
+ }
- ob_start();
+ $printer = $main->createPrinterByName( $this->printerName );
+ $printer->initPrinter();
$printer->execute();
- $out = ob_get_clean();
-
- $printer->closePrinter();
+ ob_start();
+ try {
+ $printer->closePrinter();
+ return ob_get_clean();
+ } catch ( Exception $ex ) {
+ ob_end_clean();
+ throw $ex;
+ }
+ }
- return $out;
+ /**
+ * @dataProvider provideGeneralEncoding
+ */
+ public function testGeneralEncoding( array $data, $expect, array $params = array() ) {
+ if ( isset( $params['SKIP'] ) ) {
+ $this->markTestSkipped( $expect );
+ }
+ $this->assertSame( $expect, $this->encodeData( $params, $data ) );
}
}
diff --git a/tests/phpunit/includes/api/format/ApiFormatTxtTest.php b/tests/phpunit/includes/api/format/ApiFormatTxtTest.php
new file mode 100644
index 00000000..b0a2a960
--- /dev/null
+++ b/tests/phpunit/includes/api/format/ApiFormatTxtTest.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * @group API
+ * @covers ApiFormatTxt
+ */
+class ApiFormatTxtTest extends ApiFormatTestBase {
+
+ protected $printerName = 'txt';
+
+ public static function provideGeneralEncoding() {
+ $warning = "\n [warnings] => Array\n (\n [txt] => Array\n (\n" .
+ " [*] => format=txt has been deprecated. Please use format=json instead.\n" .
+ " )\n\n )\n";
+
+ return array(
+ // Basic types
+ array( array( null ), "Array\n({$warning}\n [0] => \n)\n" ),
+ array( array( true ), "Array\n({$warning}\n [0] => \n)\n" ),
+ array( array( false ), "Array\n({$warning}\n)\n" ),
+ array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ "Array\n({$warning}\n [0] => 1\n)\n" ),
+ array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ "Array\n({$warning}\n [0] => \n)\n" ),
+ array( array( 42 ), "Array\n({$warning}\n [0] => 42\n)\n" ),
+ array( array( 42.5 ), "Array\n({$warning}\n [0] => 42.5\n)\n" ),
+ array( array( 1e42 ), "Array\n({$warning}\n [0] => 1.0E+42\n)\n" ),
+ array( array( 'foo' ), "Array\n({$warning}\n [0] => foo\n)\n" ),
+ array( array( 'fóo' ), "Array\n({$warning}\n [0] => fóo\n)\n" ),
+
+ // Arrays and objects
+ array( array( array() ), "Array\n({$warning}\n [0] => Array\n (\n )\n\n)\n" ),
+ array( array( array( 1 ) ), "Array\n({$warning}\n [0] => Array\n (\n [0] => 1\n )\n\n)\n" ),
+ array( array( array( 'x' => 1 ) ), "Array\n({$warning}\n [0] => Array\n (\n [x] => 1\n )\n\n)\n" ),
+ array( array( array( 2 => 1 ) ), "Array\n({$warning}\n [0] => Array\n (\n [2] => 1\n )\n\n)\n" ),
+ array( array( (object)array() ), "Array\n({$warning}\n [0] => Array\n (\n )\n\n)\n" ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), "Array\n({$warning}\n [0] => Array\n (\n [0] => 1\n )\n\n)\n" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), "Array\n({$warning}\n [0] => Array\n (\n [0] => 1\n )\n\n)\n" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), "Array\n({$warning}\n [0] => Array\n (\n [x] => 1\n )\n\n)\n" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ "Array\n({$warning}\n [0] => Array\n (\n [0] => Array\n (\n [key] => x\n [*] => 1\n )\n\n )\n\n)\n" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), "Array\n({$warning}\n [0] => Array\n (\n [x] => 1\n )\n\n)\n" ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), "Array\n({$warning}\n [0] => Array\n (\n [0] => a\n [1] => b\n )\n\n)\n" ),
+
+ // Content
+ array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ "Array\n({$warning}\n [*] => foo\n)\n" ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
+ "Array\n({$warning}\n [foo] => Array\n (\n [*] => foo\n )\n\n)\n" ),
+ );
+ }
+
+}
diff --git a/tests/phpunit/includes/api/format/ApiFormatWddxTest.php b/tests/phpunit/includes/api/format/ApiFormatWddxTest.php
index d075f547..07111300 100644
--- a/tests/phpunit/includes/api/format/ApiFormatWddxTest.php
+++ b/tests/phpunit/includes/api/format/ApiFormatWddxTest.php
@@ -2,19 +2,79 @@
/**
* @group API
- * @group Database
- * @group medium
* @covers ApiFormatWddx
*/
class ApiFormatWddxTest extends ApiFormatTestBase {
+ protected $printerName = 'wddx';
+
+ public static function provideGeneralEncoding() {
+ if ( ApiFormatWddx::useSlowPrinter() ) {
+ return array(
+ array( array(), 'Fast Wddx printer is unavailable', array( 'SKIP' => true ) )
+ );
+ }
+ return self::provideEncoding();
+ }
+
+ public static function provideEncoding() {
+ $p = '<wddxPacket version=\'1.0\'><header/><data><struct><var name=\'warnings\'><struct><var name=\'wddx\'><struct><var name=\'*\'><string>format=wddx has been deprecated. Please use format=json instead.</string></var></struct></var></struct></var>';
+ $s = '</struct></data></wddxPacket>';
+
+ return array(
+ // Basic types
+ array( array( null ), "{$p}<var name='0'><null/></var>{$s}" ),
+ array( array( true ), "{$p}<var name='0'><string></string></var>{$s}" ),
+ array( array( false ), "{$p}{$s}" ),
+ array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ "{$p}<var name='0'><boolean value='true'/></var>{$s}" ),
+ array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
+ "{$p}<var name='0'><boolean value='false'/></var>{$s}" ),
+ array( array( 42 ), "{$p}<var name='0'><number>42</number></var>{$s}" ),
+ array( array( 42.5 ), "{$p}<var name='0'><number>42.5</number></var>{$s}" ),
+ array( array( 1e42 ), "{$p}<var name='0'><number>1.0E+42</number></var>{$s}" ),
+ array( array( 'foo' ), "{$p}<var name='0'><string>foo</string></var>{$s}" ),
+ array( array( 'fóo' ), "{$p}<var name='0'><string>fóo</string></var>{$s}" ),
+
+ // Arrays and objects
+ array( array( array() ), "{$p}<var name='0'><array length='0'></array></var>{$s}" ),
+ array( array( array( 1 ) ), "{$p}<var name='0'><array length='1'><number>1</number></array></var>{$s}" ),
+ array( array( array( 'x' => 1 ) ), "{$p}<var name='0'><struct><var name='x'><number>1</number></var></struct></var>{$s}" ),
+ array( array( array( 2 => 1 ) ), "{$p}<var name='0'><struct><var name='2'><number>1</number></var></struct></var>{$s}" ),
+ array( array( (object)array() ), "{$p}<var name='0'><struct></struct></var>{$s}" ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), "{$p}<var name='0'><struct><var name='0'><number>1</number></var></struct></var>{$s}" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), "{$p}<var name='0'><array length='1'><number>1</number></array></var>{$s}" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), "{$p}<var name='0'><struct><var name='x'><number>1</number></var></struct></var>{$s}" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ "{$p}<var name='0'><array length='1'><struct><var name='key'><string>x</string></var><var name='*'><number>1</number></var></struct></array></var>{$s}" ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), "{$p}<var name='0'><struct><var name='x'><number>1</number></var></struct></var>{$s}" ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), "{$p}<var name='0'><array length='2'><string>a</string><string>b</string></array></var>{$s}" ),
+
+ // Content
+ array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ "{$p}<var name='*'><string>foo</string></var>{$s}" ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
+ "{$p}<var name='foo'><struct><var name='*'><string>foo</string></var></struct></var>{$s}" ),
+ );
+ }
+
/**
- * @requires function wddx_deserialize
+ * @dataProvider provideEncoding
*/
- public function testValidSyntax( ) {
- $data = $this->apiRequest( 'wddx', array( 'action' => 'query', 'meta' => 'siteinfo' ) );
+ public function testSlowEncoding( array $data, $expect, array $params = array() ) {
+ // Adjust expectation for differences between fast and slow printers.
+ $expect = str_replace( '\'', '"', $expect );
+ $expect = str_replace( '/>', ' />', $expect );
+ $expect = '<?xml version="1.0"?>' . $expect;
+
+ $this->assertSame( $expect, $this->encodeData( $params, $data, 'ApiFormatWddxTest_SlowWddx' ) );
+ }
+}
- $this->assertInternalType( 'array', wddx_deserialize( $data ) );
- $this->assertGreaterThan( 0, count( (array)$data ) );
+class ApiFormatWddxTest_SlowWddx extends ApiFormatWddx {
+ public static function useSlowPrinter() {
+ return true;
}
}
diff --git a/tests/phpunit/includes/api/format/ApiFormatXmlTest.php b/tests/phpunit/includes/api/format/ApiFormatXmlTest.php
new file mode 100644
index 00000000..7babaedb
--- /dev/null
+++ b/tests/phpunit/includes/api/format/ApiFormatXmlTest.php
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * @group API
+ * @group Database
+ * @covers ApiFormatXml
+ */
+class ApiFormatXmlTest extends ApiFormatTestBase {
+
+ protected $printerName = 'xml';
+
+ public static function setUpBeforeClass() {
+ parent::setUpBeforeClass();
+ $page = WikiPage::factory( Title::newFromText( 'MediaWiki:ApiFormatXmlTest.xsl' ) );
+ $page->doEditContent( new WikitextContent(
+ '<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" />'
+ ), 'Summary' );
+ $page = WikiPage::factory( Title::newFromText( 'MediaWiki:ApiFormatXmlTest' ) );
+ $page->doEditContent( new WikitextContent( 'Bogus' ), 'Summary' );
+ $page = WikiPage::factory( Title::newFromText( 'ApiFormatXmlTest' ) );
+ $page->doEditContent( new WikitextContent( 'Bogus' ), 'Summary' );
+ }
+
+ public static function provideGeneralEncoding() {
+ return array(
+ // Basic types
+ array( array( null, 'a' => null ), '<?xml version="1.0"?><api><_v _idx="0" /></api>' ),
+ array( array( true, 'a' => true ), '<?xml version="1.0"?><api a=""><_v _idx="0">true</_v></api>' ),
+ array( array( false, 'a' => false ), '<?xml version="1.0"?><api><_v _idx="0">false</_v></api>' ),
+ array( array( true, 'a' => true, ApiResult::META_BC_BOOLS => array( 0, 'a' ) ),
+ '<?xml version="1.0"?><api a=""><_v _idx="0">1</_v></api>' ),
+ array( array( false, 'a' => false, ApiResult::META_BC_BOOLS => array( 0, 'a' ) ),
+ '<?xml version="1.0"?><api><_v _idx="0"></_v></api>' ),
+ array( array( 42, 'a' => 42 ), '<?xml version="1.0"?><api a="42"><_v _idx="0">42</_v></api>' ),
+ array( array( 42.5, 'a' => 42.5 ), '<?xml version="1.0"?><api a="42.5"><_v _idx="0">42.5</_v></api>' ),
+ array( array( 1e42, 'a' => 1e42 ), '<?xml version="1.0"?><api a="1.0E+42"><_v _idx="0">1.0E+42</_v></api>' ),
+ array( array( 'foo', 'a' => 'foo' ), '<?xml version="1.0"?><api a="foo"><_v _idx="0">foo</_v></api>' ),
+ array( array( 'fóo', 'a' => 'fóo' ), '<?xml version="1.0"?><api a="fóo"><_v _idx="0">fóo</_v></api>' ),
+
+ // Arrays and objects
+ array( array( array() ), '<?xml version="1.0"?><api><_v /></api>' ),
+ array( array( array( 'x' => 1 ) ), '<?xml version="1.0"?><api><_v x="1" /></api>' ),
+ array( array( array( 2 => 1 ) ), '<?xml version="1.0"?><api><_v><_v _idx="2">1</_v></_v></api>' ),
+ array( array( (object)array() ), '<?xml version="1.0"?><api><_v /></api>' ),
+ array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), '<?xml version="1.0"?><api><_v><_v _idx="0">1</_v></_v></api>' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), '<?xml version="1.0"?><api><_v><_v>1</_v></_v></api>' ),
+ array( array( array( 'x' => 1, 'y' => array( 'z' => 1 ), ApiResult::META_TYPE => 'kvp' ) ),
+ '<?xml version="1.0"?><api><_v><_v _name="x" xml:space="preserve">1</_v><_v _name="y"><z xml:space="preserve">1</z></_v></_v></api>' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp', ApiResult::META_INDEXED_TAG_NAME => 'i', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ '<?xml version="1.0"?><api><_v><i key="x" xml:space="preserve">1</i></_v></api>' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
+ '<?xml version="1.0"?><api><_v><_v key="x" xml:space="preserve">1</_v></_v></api>' ),
+ array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), '<?xml version="1.0"?><api><_v x="1" /></api>' ),
+ array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), '<?xml version="1.0"?><api><_v><_v _idx="0">a</_v><_v _idx="1">b</_v></_v></api>' ),
+
+ // Content
+ array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ '<?xml version="1.0"?><api xml:space="preserve">foo</api>' ),
+
+ // Specified element name
+ array( array( 'foo', 'bar', ApiResult::META_INDEXED_TAG_NAME => 'itn' ),
+ '<?xml version="1.0"?><api><itn>foo</itn><itn>bar</itn></api>' ),
+
+ // Subelements
+ array( array( 'a' => 1, 's' => 1, '_subelements' => array( 's' ) ),
+ '<?xml version="1.0"?><api a="1"><s xml:space="preserve">1</s></api>' ),
+
+ // Content and subelement
+ array( array( 'a' => 1, 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ '<?xml version="1.0"?><api a="1" xml:space="preserve">foo</api>' ),
+ array( array( 's' => array(), 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
+ '<?xml version="1.0"?><api><s /><content xml:space="preserve">foo</content></api>' ),
+ array(
+ array(
+ 's' => 1,
+ 'content' => 'foo',
+ ApiResult::META_CONTENT => 'content',
+ ApiResult::META_SUBELEMENTS => array( 's' )
+ ),
+ '<?xml version="1.0"?><api><s xml:space="preserve">1</s><content xml:space="preserve">foo</content></api>'
+ ),
+
+ // BC Subelements
+ array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
+ '<?xml version="1.0"?><api><foo xml:space="preserve">foo</foo></api>' ),
+
+ // Name mangling
+ array( array( 'foo.bar' => 1 ), '<?xml version="1.0"?><api foo.bar="1" />' ),
+ array( array( '' => 1 ), '<?xml version="1.0"?><api _="1" />' ),
+ array( array( 'foo bar' => 1 ), '<?xml version="1.0"?><api _foo.20.bar="1" />' ),
+ array( array( 'foo:bar' => 1 ), '<?xml version="1.0"?><api _foo.3A.bar="1" />' ),
+ array( array( 'foo%.bar' => 1 ), '<?xml version="1.0"?><api _foo.25..2E.bar="1" />' ),
+ array( array( '4foo' => 1, 'foo4' => 1 ), '<?xml version="1.0"?><api _4foo="1" foo4="1" />' ),
+ array( array( "foo\xe3\x80\x80bar" => 1 ), '<?xml version="1.0"?><api _foo.3000.bar="1" />' ),
+ array( array( 'foo:bar' => 1, ApiResult::META_PRESERVE_KEYS => array( 'foo:bar' ) ),
+ '<?xml version="1.0"?><api foo:bar="1" />' ),
+ array( array( 'a', 'b', ApiResult::META_INDEXED_TAG_NAME => 'foo bar' ),
+ '<?xml version="1.0"?><api><_foo.20.bar>a</_foo.20.bar><_foo.20.bar>b</_foo.20.bar></api>' ),
+
+ // includenamespace param
+ array( array( 'x' => 'foo' ), '<?xml version="1.0"?><api x="foo" xmlns="http://www.mediawiki.org/xml/api/" />',
+ array( 'includexmlnamespace' => 1 ) ),
+
+ // xslt param
+ array( array(), '<?xml version="1.0"?><api><warnings><xml xml:space="preserve">Invalid or non-existent stylesheet specified</xml></warnings></api>',
+ array( 'xslt' => 'DoesNotExist' ) ),
+ array( array(), '<?xml version="1.0"?><api><warnings><xml xml:space="preserve">Stylesheet should be in the MediaWiki namespace.</xml></warnings></api>',
+ array( 'xslt' => 'ApiFormatXmlTest' ) ),
+ array( array(), '<?xml version="1.0"?><api><warnings><xml xml:space="preserve">Stylesheet should have .xsl extension.</xml></warnings></api>',
+ array( 'xslt' => 'MediaWiki:ApiFormatXmlTest' ) ),
+ array( array(),
+ '<?xml version="1.0"?><?xml-stylesheet href="' .
+ htmlspecialchars( Title::newFromText( 'MediaWiki:ApiFormatXmlTest.xsl' )->getLocalURL( 'action=raw' ) ) .
+ '" type="text/xsl" ?><api />',
+ array( 'xslt' => 'MediaWiki:ApiFormatXmlTest.xsl' ) ),
+ );
+ }
+
+}
diff --git a/tests/phpunit/includes/api/query/ApiQueryBasicTest.php b/tests/phpunit/includes/api/query/ApiQueryBasicTest.php
index e486c4f4..fa0e4cb5 100644
--- a/tests/phpunit/includes/api/query/ApiQueryBasicTest.php
+++ b/tests/phpunit/includes/api/query/ApiQueryBasicTest.php
@@ -23,8 +23,6 @@
* @file
*/
-require_once 'ApiQueryTestBase.php';
-
/**
* These tests validate basic functionality of the api query module
*
diff --git a/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php b/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
index 347cd6f8..cd735223 100644
--- a/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
+++ b/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
@@ -18,8 +18,6 @@
* http://www.gnu.org/copyleft/gpl.html
*/
-require_once 'ApiQueryContinueTestBase.php';
-
/**
* @group API
* @group Database
@@ -62,7 +60,8 @@ class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
);
};
// generator + 1 prop + 1 list
- $data = $this->query( $mk( 99, 99, true ), 1, 'g1p', false );
+ $data = $this->query( $mk( 99, 99, true ), 1, 'g1p', false ) +
+ array( 'batchcomplete' => true );
$this->checkC( $data, $mk( 1, 1, true ), 6, 'g1p-11t' );
$this->checkC( $data, $mk( 2, 2, true ), 3, 'g1p-22t' );
$this->checkC( $data, $mk( 1, 1, false ), 6, 'g1p-11f' );
diff --git a/tests/phpunit/includes/api/query/ApiQueryContinueTest.php b/tests/phpunit/includes/api/query/ApiQueryContinueTest.php
index 03797901..d441f4c4 100644
--- a/tests/phpunit/includes/api/query/ApiQueryContinueTest.php
+++ b/tests/phpunit/includes/api/query/ApiQueryContinueTest.php
@@ -18,8 +18,6 @@
* http://www.gnu.org/copyleft/gpl.html
*/
-require_once 'ApiQueryContinueTestBase.php';
-
/**
* These tests validate the new continue functionality of the api query module by
* doing multiple requests with varying parameters, merging the results, and checking
@@ -68,7 +66,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
'aplimit' => "$l",
);
};
- $data = $this->query( $mk( 99 ), 1, '1L', false );
+ $data = $this->query( $mk( 99 ), 1, '1L', false ) +
+ array( 'batchcomplete' => true );
// 1 list
$this->checkC( $data, $mk( 1 ), 5, '1L-1' );
@@ -95,7 +94,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
);
};
// 2 lists
- $data = $this->query( $mk( 99, 99 ), 1, '2L', false );
+ $data = $this->query( $mk( 99, 99 ), 1, '2L', false ) +
+ array( 'batchcomplete' => true );
$this->checkC( $data, $mk( 1, 1 ), 5, '2L-11' );
$this->checkC( $data, $mk( 2, 2 ), 3, '2L-22' );
$this->checkC( $data, $mk( 3, 3 ), 2, '2L-33' );
@@ -119,7 +119,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
);
};
// generator + 1 prop
- $data = $this->query( $mk( 99, 99 ), 1, 'G1P', false );
+ $data = $this->query( $mk( 99, 99 ), 1, 'G1P', false ) +
+ array( 'batchcomplete' => true );
$this->checkC( $data, $mk( 1, 1 ), 11, 'G1P-11' );
$this->checkC( $data, $mk( 2, 2 ), 6, 'G1P-22' );
$this->checkC( $data, $mk( 3, 3 ), 4, 'G1P-33' );
@@ -144,7 +145,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
);
};
// generator + 2 props
- $data = $this->query( $mk( 99, 99, 99 ), 1, 'G2P', false );
+ $data = $this->query( $mk( 99, 99, 99 ), 1, 'G2P', false ) +
+ array( 'batchcomplete' => true );
$this->checkC( $data, $mk( 1, 1, 1 ), 16, 'G2P-111' );
$this->checkC( $data, $mk( 2, 2, 2 ), 9, 'G2P-222' );
$this->checkC( $data, $mk( 3, 3, 3 ), 6, 'G2P-333' );
@@ -177,7 +179,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
);
};
// generator + 1 prop + 1 list
- $data = $this->query( $mk( 99, 99, 99 ), 1, 'G1P1L', false );
+ $data = $this->query( $mk( 99, 99, 99 ), 1, 'G1P1L', false ) +
+ array( 'batchcomplete' => true );
$this->checkC( $data, $mk( 1, 1, 1 ), 11, 'G1P1L-111' );
$this->checkC( $data, $mk( 2, 2, 2 ), 6, 'G1P1L-222' );
$this->checkC( $data, $mk( 3, 3, 3 ), 4, 'G1P1L-333' );
@@ -214,7 +217,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
);
};
// generator + 1 prop + 1 list
- $data = $this->query( $mk( 99, 99, 99, 99, 99 ), 1, 'G2P2L1M', false );
+ $data = $this->query( $mk( 99, 99, 99, 99, 99 ), 1, 'G2P2L1M', false ) +
+ array( 'batchcomplete' => true );
$this->checkC( $data, $mk( 1, 1, 1, 1, 1 ), 16, 'G2P2L1M-11111' );
$this->checkC( $data, $mk( 2, 2, 2, 2, 2 ), 9, 'G2P2L1M-22222' );
$this->checkC( $data, $mk( 3, 3, 3, 3, 3 ), 6, 'G2P2L1M-33333' );
@@ -244,7 +248,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
);
};
// generator + 1 prop
- $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=P', false );
+ $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=P', false ) +
+ array( 'batchcomplete' => true );
$this->checkC( $data, $mk( 1, true, 1, true ), 4, 'G=P-1t1t' );
$this->checkC( $data, $mk( 2, true, 2, true ), 2, 'G=P-2t2t' );
@@ -290,7 +295,8 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
);
};
// generator + 1 list
- $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=L', false );
+ $data = $this->query( $mk( 99, true, 99, true ), 1, 'G=L', false ) +
+ array( 'batchcomplete' => true );
$this->checkC( $data, $mk( 1, true, 1, true ), 5, 'G=L-1t1t' );
$this->checkC( $data, $mk( 2, true, 2, true ), 3, 'G=L-2t2t' );
diff --git a/tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php b/tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
index bce62685..ce2f70de 100644
--- a/tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
+++ b/tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
@@ -21,9 +21,6 @@
*
* @file
*/
-
-require_once 'ApiQueryTestBase.php';
-
abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
/**
@@ -62,6 +59,8 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
}
if ( $useContinue && !isset( $params['continue'] ) ) {
$params['continue'] = '';
+ } else {
+ $params['rawcontinue'] = '1';
}
$count = 0;
$result = array();
diff --git a/tests/phpunit/includes/api/query/ApiQueryTest.php b/tests/phpunit/includes/api/query/ApiQueryTest.php
index bba22c77..5f061b50 100644
--- a/tests/phpunit/includes/api/query/ApiQueryTest.php
+++ b/tests/phpunit/includes/api/query/ApiQueryTest.php
@@ -7,32 +7,21 @@
* @covers ApiQuery
*/
class ApiQueryTest extends ApiTestCase {
- /**
- * @var array Storage for $wgHooks
- */
- protected $hooks;
-
protected function setUp() {
- global $wgHooks;
-
parent::setUp();
$this->doLogin();
- // Setup en: as interwiki prefix
- $this->hooks = $wgHooks;
- $wgHooks['InterwikiLoadPrefix'][] = function ( $prefix, &$data ) {
- if ( $prefix == 'apiquerytestiw' ) {
- $data = array( 'iw_url' => 'wikipedia' );
- }
- return false;
- };
- }
-
- protected function tearDown() {
- global $wgHooks;
- $wgHooks = $this->hooks;
-
- parent::tearDown();
+ // Setup apiquerytestiw: as interwiki prefix
+ $this->setMwGlobals( 'wgHooks', array(
+ 'InterwikiLoadPrefix' => array(
+ function ( $prefix, &$data ) {
+ if ( $prefix == 'apiquerytestiw' ) {
+ $data = array( 'iw_url' => 'wikipedia' );
+ }
+ return false;
+ }
+ )
+ ) );
}
public function testTitlesGetNormalized() {
@@ -127,4 +116,27 @@ class ApiQueryTest extends ApiTestCase {
array( 'apiquerytestiw:foo', NS_MAIN, null, true ),
);
}
+
+ /**
+ * Test if all classes in the query module manager exists
+ */
+ public function testClassNamesInModuleManager() {
+ global $wgAutoloadLocalClasses, $wgAutoloadClasses;
+
+ // wgAutoloadLocalClasses has precedence, just like in includes/AutoLoader.php
+ $classes = $wgAutoloadLocalClasses + $wgAutoloadClasses;
+
+ $api = new ApiMain(
+ new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ) )
+ );
+ $queryApi = new ApiQuery( $api, 'query' );
+ $modules = $queryApi->getModuleManager()->getNamesWithClasses();
+ foreach( $modules as $name => $class ) {
+ $this->assertArrayHasKey(
+ $class,
+ $classes,
+ 'Class ' . $class . ' for api module ' . $name . ' not in autoloader (with exact case)'
+ );
+ }
+ }
}
diff --git a/tests/phpunit/includes/api/query/ApiQueryTestBase.php b/tests/phpunit/includes/api/query/ApiQueryTestBase.php
index 56c15b23..dabf72e0 100644
--- a/tests/phpunit/includes/api/query/ApiQueryTestBase.php
+++ b/tests/phpunit/includes/api/query/ApiQueryTestBase.php
@@ -88,19 +88,26 @@ STR;
/**
* Checks that the request's result matches the expected results.
* @param array $values Array is a two element array( request, expected_results )
- * @throws Exception
+ * @param array $session
+ * @param bool $appendModule
+ * @param User $user
*/
- protected function check( $values ) {
+ protected function check( $values, array $session = null,
+ $appendModule = false, User $user = null
+ ) {
list( $req, $exp ) = $this->validateRequestExpectedPair( $values );
if ( !array_key_exists( 'action', $req ) ) {
$req['action'] = 'query';
}
+ if ( !array_key_exists( 'continue', $req ) ) {
+ $req['rawcontinue'] = '1';
+ }
foreach ( $req as &$val ) {
if ( is_array( $val ) ) {
$val = implode( '|', array_unique( $val ) );
}
}
- $result = $this->doApiRequest( $req );
+ $result = $this->doApiRequest( $req, $session, $appendModule, $user );
$this->assertResult( array( 'query' => $exp ), $result[0], $req );
}
@@ -113,9 +120,16 @@ STR;
if ( is_array( $message ) ) {
$message = http_build_query( $message );
}
+
+ // FIXME: once we migrate to phpunit 4.1+, hardcode ComparisonFailure exception use
+ $compEx = 'SebastianBergmann\Comparator\ComparisonFailure';
+ if ( !class_exists( $compEx ) ) {
+ $compEx = 'PHPUnit_Framework_ComparisonFailure';
+ }
+
throw new PHPUnit_Framework_ExpectationFailedException(
$e->getMessage() . "\nRequest: $message",
- new PHPUnit_Framework_ComparisonFailure(
+ new $compEx(
$exp,
$result,
print_r( $exp, true ),
diff --git a/tests/phpunit/includes/cache/GenderCacheTest.php b/tests/phpunit/includes/cache/GenderCacheTest.php
index ce2db5d7..04fb00d9 100644
--- a/tests/phpunit/includes/cache/GenderCacheTest.php
+++ b/tests/phpunit/includes/cache/GenderCacheTest.php
@@ -6,14 +6,10 @@
*/
class GenderCacheTest extends MediaWikiLangTestCase {
- protected function setUp() {
- global $wgDefaultUserOptions;
- parent::setUp();
+ function addDBData() {
//ensure the correct default gender
- $wgDefaultUserOptions['gender'] = 'unknown';
- }
+ $this->mergeMwGlobalArrayValue( 'wgDefaultUserOptions', array( 'gender' => 'unknown' ) );
- function addDBData() {
$user = User::newFromName( 'UTMale' );
if ( $user->getID() == 0 ) {
$user->addToDatabase();
diff --git a/tests/phpunit/includes/cache/LocalisationCacheTest.php b/tests/phpunit/includes/cache/LocalisationCacheTest.php
index fc06a501..a0d308aa 100644
--- a/tests/phpunit/includes/cache/LocalisationCacheTest.php
+++ b/tests/phpunit/includes/cache/LocalisationCacheTest.php
@@ -7,18 +7,32 @@
*/
class LocalisationCacheTest extends MediaWikiTestCase {
protected function setUp() {
- global $IP;
-
parent::setUp();
$this->setMwGlobals( array(
- 'wgMessagesDirs' => array( "$IP/tests/phpunit/data/localisationcache" ),
'wgExtensionMessagesFiles' => array(),
'wgHooks' => array(),
) );
}
+ /**
+ * @return PHPUnit_Framework_MockObject_MockObject|LocalisationCache
+ */
+ protected function getMockLocalisationCache() {
+ global $IP;
+ $lc = $this->getMockBuilder( 'LocalisationCache' )
+ ->setConstructorArgs( array( array( 'store' => 'detect' ) ) )
+ ->setMethods( array( 'getMessagesDirs' ) )
+ ->getMock();
+ $lc->expects( $this->any() )->method( 'getMessagesDirs' )
+ ->will( $this->returnValue(
+ array( "$IP/tests/phpunit/data/localisationcache" )
+ ) );
+
+ return $lc;
+ }
+
public function testPuralRulesFallback() {
- $cache = new LocalisationCache( array( 'store' => 'detect' ) );
+ $cache = $this->getMockLocalisationCache();
$this->assertEquals(
$cache->getItem( 'ar', 'pluralRules' ),
@@ -46,7 +60,7 @@ class LocalisationCacheTest extends MediaWikiTestCase {
}
public function testRecacheFallbacks() {
- $lc = new LocalisationCache( array( 'store' => 'detect' ) );
+ $lc = $this->getMockLocalisationCache();
$lc->recache( 'uk' );
$this->assertEquals(
array(
@@ -60,23 +74,25 @@ class LocalisationCacheTest extends MediaWikiTestCase {
}
public function testRecacheFallbacksWithHooks() {
- global $wgHooks;
-
// Use hook to provide updates for messages. This is what the
// LocalisationUpdate extension does. See bug 68781.
- $wgHooks['LocalisationCacheRecacheFallback'][] = function (
- LocalisationCache $lc,
- $code,
- array &$cache
- ) {
- if ( $code === 'ru' ) {
- $cache['messages']['present-uk'] = 'ru-override';
- $cache['messages']['present-ru'] = 'ru-override';
- $cache['messages']['present-en'] = 'ru-override';
- }
- };
+ $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+ 'LocalisationCacheRecacheFallback' => array(
+ function (
+ LocalisationCache $lc,
+ $code,
+ array &$cache
+ ) {
+ if ( $code === 'ru' ) {
+ $cache['messages']['present-uk'] = 'ru-override';
+ $cache['messages']['present-ru'] = 'ru-override';
+ $cache['messages']['present-en'] = 'ru-override';
+ }
+ }
+ )
+ ) );
- $lc = new LocalisationCache( array( 'store' => 'detect' ) );
+ $lc = $this->getMockLocalisationCache();
$lc->recache( 'uk' );
$this->assertEquals(
array(
diff --git a/tests/phpunit/includes/cache/RedisBloomCacheTest.php b/tests/phpunit/includes/cache/RedisBloomCacheTest.php
deleted file mode 100644
index 3d491e90..00000000
--- a/tests/phpunit/includes/cache/RedisBloomCacheTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-/**
- * Test for BloomCacheRedis class.
- *
- * @TODO: some generic base "redis test server conf" for all testing?
- *
- * @covers BloomCacheRedis
- * @group Cache
- */
-class BloomCacheRedisTest extends MediaWikiTestCase {
- private static $suffix;
-
- protected function setUp() {
- parent::setUp();
-
- self::$suffix = self::$suffix ? : mt_rand();
-
- $fcache = BloomCache::get( 'main' );
- if ( $fcache instanceof BloomCacheRedis ) {
- $fcache->delete( "unit-testing-" . self::$suffix );
- } else {
- $this->markTestSkipped( 'The main bloom cache is not redis.' );
- }
- }
-
- public function testBloomCache() {
- $key = "unit-testing-" . self::$suffix;
- $fcache = BloomCache::get( 'main' );
- $count = 1500;
-
- $this->assertTrue( $fcache->delete( $key ), "OK delete of filter '$key'." );
- $this->assertTrue( $fcache->init( $key, $count, .001 ), "OK init of filter '$key'." );
-
- $members = array();
- for ( $i = 0; $i < $count; ++$i ) {
- $members[] = "$i-value-$i";
- }
- $this->assertTrue( $fcache->add( $key, $members ), "Addition of members to '$key' OK." );
-
- for ( $i = 0; $i < $count; ++$i ) {
- $this->assertTrue( $fcache->isHit( $key, "$i-value-$i" ), "Hit on member '$i-value-$i'." );
- }
-
- $falsePositives = array();
- for ( $i = $count; $i < 2 * $count; ++$i ) {
- if ( $fcache->isHit( $key, "value$i" ) ) {
- $falsePositives[] = "value$i";
- }
- }
-
- $eFalsePositives = array(
- 'value1763',
- 'value2245',
- 'value2353',
- 'value2791',
- 'value2898',
- 'value2975'
- );
- $this->assertEquals( $eFalsePositives, $falsePositives, "Correct number of false positives found." );
- }
-
- protected function tearDown() {
- parent::tearDown();
-
- $fcache = BloomCache::get( 'main' );
- if ( $fcache instanceof BloomCacheRedis ) {
- $fcache->delete( "unit-testing-" . self::$suffix );
- }
- }
-}
diff --git a/tests/phpunit/includes/changes/EnhancedChangesListTest.php b/tests/phpunit/includes/changes/EnhancedChangesListTest.php
index 40a11d2d..a14a50d2 100644
--- a/tests/phpunit/includes/changes/EnhancedChangesListTest.php
+++ b/tests/phpunit/includes/changes/EnhancedChangesListTest.php
@@ -5,7 +5,6 @@
*
* @group Database
*
- * @licence GNU GPL v2+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class EnhancedChangesListTest extends MediaWikiLangTestCase {
@@ -31,7 +30,7 @@ class EnhancedChangesListTest extends MediaWikiLangTestCase {
'mediawiki.special.changeslist',
$styleModules,
'has mediawiki.special.changeslist'
- );
+ );
$this->assertContains(
'mediawiki.special.changeslist.enhanced',
@@ -75,10 +74,10 @@ class EnhancedChangesListTest extends MediaWikiLangTestCase {
$this->assertEquals( '', $html );
}
- /**
- * @todo more tests for actual formatting, this is more of a smoke test
- */
- public function testEndRecentChangesList() {
+ /**
+ * @todo more tests for actual formatting, this is more of a smoke test
+ */
+ public function testEndRecentChangesList() {
$enhancedChangesList = $this->newEnhancedChangesList();
$enhancedChangesList->beginRecentChangesList();
@@ -92,7 +91,7 @@ class EnhancedChangesListTest extends MediaWikiLangTestCase {
preg_match_all( '/td class="mw-enhanced-rc-nested"/', $html, $matches );
$this->assertCount( 2, $matches[0] );
- }
+ }
/**
* @return EnhancedChangesList
diff --git a/tests/phpunit/includes/changes/OldChangesListTest.php b/tests/phpunit/includes/changes/OldChangesListTest.php
index 2ea9f33e..311ad89c 100644
--- a/tests/phpunit/includes/changes/OldChangesListTest.php
+++ b/tests/phpunit/includes/changes/OldChangesListTest.php
@@ -9,7 +9,6 @@
*
* @group Database
*
- * @licence GNU GPL v2+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class OldChangesListTest extends MediaWikiLangTestCase {
diff --git a/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php b/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php
index ee1a4d0e..0b877275 100644
--- a/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php
+++ b/tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php
@@ -5,7 +5,6 @@
*
* @group Database
*
- * @licence GNU GPL v2+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class RCCacheEntryFactoryTest extends MediaWikiLangTestCase {
diff --git a/tests/phpunit/includes/changes/RecentChangeTest.php b/tests/phpunit/includes/changes/RecentChangeTest.php
index 98903f1e..b3cb7b52 100644
--- a/tests/phpunit/includes/changes/RecentChangeTest.php
+++ b/tests/phpunit/includes/changes/RecentChangeTest.php
@@ -35,6 +35,7 @@ class RecentChangeTest extends MediaWikiTestCase {
* Should cover the following log actions (which are most commonly used by bots):
* - block/block
* - block/unblock
+ * - block/reblock
* - delete/delete
* - delete/restore
* - newusers/create
@@ -46,6 +47,9 @@ class RecentChangeTest extends MediaWikiTestCase {
* - protect/modifyprotect
* - protect/unprotect
* - upload/upload
+ * - merge/merge
+ * - import/upload
+ * - import/interwiki
*
* As well as the following Auto Edit Summaries:
* - blank
@@ -62,9 +66,13 @@ class RecentChangeTest extends MediaWikiTestCase {
# block/block
$this->assertIRCComment(
- $this->context->msg( 'blocklogentry', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ $this->context->msg( 'blocklogentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+ . $sep . $this->user_comment,
'block', 'block',
- array(),
+ array(
+ '5::duration' => 'duration',
+ '6::flags' => 'flags',
+ ),
$this->user_comment
);
# block/unblock
@@ -74,6 +82,17 @@ class RecentChangeTest extends MediaWikiTestCase {
array(),
$this->user_comment
);
+ # block/reblock
+ $this->assertIRCComment(
+ $this->context->msg( 'reblock-logentry', 'SomeTitle', 'duration', '(flags)' )->plain()
+ . $sep . $this->user_comment,
+ 'block', 'reblock',
+ array(
+ '5::duration' => 'duration',
+ '6::flags' => 'flags',
+ ),
+ $this->user_comment
+ );
}
/**
@@ -230,6 +249,48 @@ class RecentChangeTest extends MediaWikiTestCase {
}
/**
+ * @covers LogFormatter::getIRCActionText
+ */
+ public function testIrcMsgForLogTypeMerge() {
+ $sep = $this->context->msg( 'colon-separator' )->text();
+
+ # merge/merge
+ $this->assertIRCComment(
+ $this->context->msg( 'pagemerge-logentry', 'SomeTitle', 'Dest', 'timestamp' )->plain()
+ . $sep . $this->user_comment,
+ 'merge', 'merge',
+ array(
+ '4::dest' => 'Dest',
+ '5::mergepoint' => 'timestamp',
+ ),
+ $this->user_comment
+ );
+ }
+
+ /**
+ * @covers LogFormatter::getIRCActionText
+ */
+ public function testIrcMsgForLogTypeImport() {
+ $sep = $this->context->msg( 'colon-separator' )->text();
+
+ # import/upload
+ $this->assertIRCComment(
+ $this->context->msg( 'import-logentry-upload', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ 'import', 'upload',
+ array(),
+ $this->user_comment
+ );
+
+ # import/interwiki
+ $this->assertIRCComment(
+ $this->context->msg( 'import-logentry-interwiki', 'SomeTitle' )->plain() . $sep . $this->user_comment,
+ 'import', 'interwiki',
+ array(),
+ $this->user_comment
+ );
+ }
+
+ /**
* @todo Emulate these edits somehow and extract
* raw edit summary from RecentChange object
* --
diff --git a/tests/phpunit/includes/changes/TestRecentChangesHelper.php b/tests/phpunit/includes/changes/TestRecentChangesHelper.php
index ad643274..2506087b 100644
--- a/tests/phpunit/includes/changes/TestRecentChangesHelper.php
+++ b/tests/phpunit/includes/changes/TestRecentChangesHelper.php
@@ -3,7 +3,6 @@
/**
* Helper for generating test recent changes entries.
*
- * @licence GNU GPL v2+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class TestRecentChangesHelper {
diff --git a/tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php b/tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php
index 3f887dc0..2fa11eaf 100644
--- a/tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php
+++ b/tests/phpunit/includes/composer/ComposerVersionNormalizerTest.php
@@ -5,7 +5,6 @@
*
* @group ComposerHooks
*
- * @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class ComposerVersionNormalizerTest extends PHPUnit_Framework_TestCase {
diff --git a/tests/phpunit/includes/config/GlobalVarConfigTest.php b/tests/phpunit/includes/config/GlobalVarConfigTest.php
index 70b9e684..28068d5e 100644
--- a/tests/phpunit/includes/config/GlobalVarConfigTest.php
+++ b/tests/phpunit/includes/config/GlobalVarConfigTest.php
@@ -87,34 +87,10 @@ class GlobalVarConfigTest extends MediaWikiTestCase {
$this->assertEquals( $config->get( $name ), $expected );
}
- public static function provideSet() {
- return array(
- array( 'Foo', 'wg', 'wgFoo' ),
- array( 'SomethingRandom', 'wg', 'wgSomethingRandom' ),
- array( 'FromAnExtension', 'eg', 'egFromAnExtension' ),
- array( 'NoPrefixHere', '', 'NoPrefixHere' ),
- );
- }
-
private function maybeStashGlobal( $var ) {
if ( array_key_exists( $var, $GLOBALS ) ) {
// Will be reset after this test is over
$this->stashMwGlobals( $var );
}
}
-
- /**
- * @dataProvider provideSet
- * @covers GlobalVarConfig::set
- * @covers GlobalVarConfig::setWithPrefix
- */
- public function testSet( $name, $prefix, $var ) {
- $this->hideDeprecated( 'GlobalVarConfig::set' );
- $this->maybeStashGlobal( $var );
- $config = new GlobalVarConfig( $prefix );
- $random = wfRandomString();
- $config->set( $name, $random );
- $this->assertArrayHasKey( $var, $GLOBALS );
- $this->assertEquals( $random, $GLOBALS[$var] );
- }
}
diff --git a/tests/phpunit/includes/config/HashConfigTest.php b/tests/phpunit/includes/config/HashConfigTest.php
index 3ad3bfbd..06973b09 100644
--- a/tests/phpunit/includes/config/HashConfigTest.php
+++ b/tests/phpunit/includes/config/HashConfigTest.php
@@ -60,4 +60,4 @@ class HashConfigTest extends MediaWikiTestCase {
$conf->set( 'one', '3' );
$this->assertEquals( '3', $conf->get( 'one' ) );
}
-} \ No newline at end of file
+}
diff --git a/tests/phpunit/includes/content/ContentHandlerTest.php b/tests/phpunit/includes/content/ContentHandlerTest.php
index f7449734..988a59ee 100644
--- a/tests/phpunit/includes/content/ContentHandlerTest.php
+++ b/tests/phpunit/includes/content/ContentHandlerTest.php
@@ -2,11 +2,6 @@
/**
* @group ContentHandler
- * @group Database
- *
- * @note Declare that we are using the database, because otherwise we'll fail in
- * the "databaseless" test run. This is because the LinkHolderArray used by the
- * parser needs database access.
*/
class ContentHandlerTest extends MediaWikiTestCase {
@@ -36,6 +31,8 @@ class ContentHandlerTest extends MediaWikiTestCase {
// Reset namespace cache
MWNamespace::getCanonicalNamespaces( true );
$wgContLang->resetNamespaces();
+ // And LinkCache
+ LinkCache::destroySingleton();
}
protected function tearDown() {
@@ -44,6 +41,8 @@ class ContentHandlerTest extends MediaWikiTestCase {
// Reset namespace cache
MWNamespace::getCanonicalNamespaces( true );
$wgContLang->resetNamespaces();
+ // And LinkCache
+ LinkCache::destroySingleton();
parent::tearDown();
}
@@ -83,6 +82,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
*/
public function testGetForTitle( $title, $expectedContentModel ) {
$title = Title::newFromText( $title );
+ LinkCache::singleton()->addBadLinkObj( $title );
$handler = ContentHandler::getForTitle( $title );
$this->assertEquals( $expectedContentModel, $handler->getModelID() );
}
@@ -139,6 +139,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
public function testGetPageLanguage( $title, $expected ) {
if ( is_string( $title ) ) {
$title = Title::newFromText( $title );
+ LinkCache::singleton()->addBadLinkObj( $title );
}
$expected = wfGetLangObj( $expected );
@@ -292,7 +293,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
$expectedModelId, $expectedNativeData, $shouldFail
) {
$title = Title::newFromText( $title );
-
+ LinkCache::singleton()->addBadLinkObj( $title );
try {
$content = ContentHandler::makeContent( $data, $title, $modelId, $format );
@@ -317,6 +318,8 @@ class ContentHandlerTest extends MediaWikiTestCase {
* page.
*/
public function testGetAutosummary() {
+ $this->setMwGlobals( 'wgContLang', Language::factory( 'en' ) );
+
$content = new DummyContentHandlerForTesting( CONTENT_MODEL_WIKITEXT );
$title = Title::newFromText( 'Help:Test' );
// Create a new content object with no content
diff --git a/tests/phpunit/includes/content/JsonContentTest.php b/tests/phpunit/includes/content/JsonContentTest.php
index 77b542f4..cccfe7b1 100644
--- a/tests/phpunit/includes/content/JsonContentTest.php
+++ b/tests/phpunit/includes/content/JsonContentTest.php
@@ -6,48 +6,85 @@
*/
class JsonContentTest extends MediaWikiLangTestCase {
- /**
- * @dataProvider provideValidConstruction
- */
- public function testValidConstruct( $text, $modelId, $isValid, $expected ) {
- $obj = new JsonContent( $text, $modelId );
- $this->assertEquals( $isValid, $obj->isValid() );
- $this->assertEquals( $expected, $obj->getJsonData() );
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( 'wgWellFormedXml', true );
}
public static function provideValidConstruction() {
return array(
- array( 'foo', CONTENT_MODEL_JSON, false, null ),
- array( FormatJson::encode( array() ), CONTENT_MODEL_JSON, true, array() ),
- array( FormatJson::encode( array( 'foo' ) ), CONTENT_MODEL_JSON, true, array( 'foo' ) ),
+ array( 'foo', false, null ),
+ array( '[]', true, array() ),
+ array( '{}', true, (object)array() ),
+ array( '""', true, '' ),
+ array( '"0"', true, '0' ),
+ array( '"bar"', true, 'bar' ),
+ array( '0', true, '0' ),
+ array( '{ "0": "bar" }', true, (object)array( 'bar' ) ),
);
}
/**
- * @dataProvider provideDataToEncode
+ * @dataProvider provideValidConstruction
*/
- public function testBeautifyUsesFormatJson( $data ) {
- $obj = new JsonContent( FormatJson::encode( $data ) );
- $this->assertEquals( FormatJson::encode( $data, true ), $obj->beautifyJSON() );
+ public function testIsValid( $text, $isValid, $expected ) {
+ $obj = new JsonContent( $text, CONTENT_MODEL_JSON );
+ $this->assertEquals( $isValid, $obj->isValid() );
+ $this->assertEquals( $expected, $obj->getData()->getValue() );
}
public static function provideDataToEncode() {
return array(
- array( array() ),
- array( array( 'foo' ) ),
- array( array( 'foo', 'bar' ) ),
- array( array( 'baz' => 'foo', 'bar' ) ),
- array( array( 'baz' => 1000, 'bar' ) ),
+ array(
+ // Round-trip empty array
+ '[]',
+ '[]',
+ ),
+ array(
+ // Round-trip empty object
+ '{}',
+ '{}',
+ ),
+ array(
+ // Round-trip empty array/object (nested)
+ '{ "foo": {}, "bar": [] }',
+ "{\n \"foo\": {},\n \"bar\": []\n}",
+ ),
+ array(
+ '{ "foo": "bar" }',
+ "{\n \"foo\": \"bar\"\n}",
+ ),
+ array(
+ '{ "foo": 1000 }',
+ "{\n \"foo\": 1000\n}",
+ ),
+ array(
+ '{ "foo": 1000, "0": "bar" }',
+ "{\n \"foo\": 1000,\n \"0\": \"bar\"\n}",
+ ),
);
}
/**
* @dataProvider provideDataToEncode
*/
- public function testPreSaveTransform( $data ) {
- $obj = new JsonContent( FormatJson::encode( $data ) );
- $newObj = $obj->preSaveTransform( $this->getMockTitle(), $this->getMockUser(), $this->getMockParserOptions() );
- $this->assertTrue( $newObj->equals( new JsonContent( FormatJson::encode( $data, true ) ) ) );
+ public function testBeautifyJson( $input, $beautified ) {
+ $obj = new JsonContent( $input );
+ $this->assertEquals( $beautified, $obj->beautifyJSON() );
+ }
+
+ /**
+ * @dataProvider provideDataToEncode
+ */
+ public function testPreSaveTransform( $input, $transformed ) {
+ $obj = new JsonContent( $input );
+ $newObj = $obj->preSaveTransform(
+ $this->getMockTitle(),
+ $this->getMockUser(),
+ $this->getMockParserOptions()
+ );
+ $this->assertTrue( $newObj->equals( new JsonContent( $transformed ) ) );
}
private function getMockTitle() {
@@ -67,48 +104,55 @@ class JsonContentTest extends MediaWikiLangTestCase {
->getMock();
}
- /**
- * @dataProvider provideDataAndParserText
- */
- public function testFillParserOutput( $data, $expected ) {
- $obj = new JsonContent( FormatJson::encode( $data ) );
- $parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
- $this->assertInstanceOf( 'ParserOutput', $parserOutput );
- $this->assertEquals( $expected, $parserOutput->getText() );
- }
-
public static function provideDataAndParserText() {
return array(
array(
array(),
- '<table class="mw-json"><tbody></tbody></table>'
+ '<table class="mw-json"><tbody><tr><td>' .
+ '<table class="mw-json"><tbody><tr><td class="mw-json-empty">Empty array</td></tr>'
+ . '</tbody></table></td></tr></tbody></table>'
),
array(
- array( 'foo' ),
- '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;foo&quot;</td></tr></tbody></table>'
+ (object)array(),
+ '<table class="mw-json"><tbody><tr><td class="mw-json-empty">Empty object</td></tr>' .
+ '</tbody></table>'
),
array(
- array( 'foo', 'bar' ),
- '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;foo&quot;</td></tr>' .
- "\n" .
- '<tr><th>1</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
+ (object)array( 'foo' ),
+ '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"foo"</td></tr>' .
+ '</tbody></table>'
),
array(
- array( 'baz' => 'foo', 'bar' ),
- '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">&quot;foo&quot;</td></tr>' .
- "\n" .
- '<tr><th>0</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
+ (object)array( 'foo', 'bar' ),
+ '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"foo"</td></tr>' .
+ '<tr><th>1</th><td class="value">"bar"</td></tr></tbody></table>'
),
array(
- array( 'baz' => 1000, 'bar' ),
+ (object)array( 'baz' => 'foo', 'bar' ),
+ '<table class="mw-json"><tbody><tr><th>baz</th><td class="value">"foo"</td></tr>' .
+ '<tr><th>0</th><td class="value">"bar"</td></tr></tbody></table>'
+ ),
+ array(
+ (object)array( 'baz' => 1000, 'bar' ),
'<table class="mw-json"><tbody><tr><th>baz</th><td class="value">1000</td></tr>' .
- "\n" .
- '<tr><th>0</th><td class="value">&quot;bar&quot;</td></tr></tbody></table>'
+ '<tr><th>0</th><td class="value">"bar"</td></tr></tbody></table>'
),
array(
- array( '<script>alert("evil!")</script>'),
- '<table class="mw-json"><tbody><tr><th>0</th><td class="value">&quot;&lt;script&gt;alert(&quot;evil!&quot;)&lt;/script&gt;&quot;</td></tr></tbody></table>',
+ (object)array( '<script>alert("evil!")</script>'),
+ '<table class="mw-json"><tbody><tr><th>0</th><td class="value">"' .
+ '&lt;script>alert("evil!")&lt;/script>"' .
+ '</td></tr></tbody></table>',
),
);
}
+
+ /**
+ * @dataProvider provideDataAndParserText
+ */
+ public function testFillParserOutput( $data, $expected ) {
+ $obj = new JsonContent( FormatJson::encode( $data ) );
+ $parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
+ $this->assertInstanceOf( 'ParserOutput', $parserOutput );
+ $this->assertEquals( $expected, $parserOutput->getText() );
+ }
}
diff --git a/tests/phpunit/includes/content/TextContentTest.php b/tests/phpunit/includes/content/TextContentTest.php
index 2f811094..dd61f85b 100644
--- a/tests/phpunit/includes/content/TextContentTest.php
+++ b/tests/phpunit/includes/content/TextContentTest.php
@@ -7,11 +7,8 @@
*/
class TextContentTest extends MediaWikiLangTestCase {
protected $context;
- protected $savedContentGetParserOutput;
protected function setUp() {
- global $wgHooks;
-
parent::setUp();
// Anon user
@@ -32,24 +29,8 @@ class TextContentTest extends MediaWikiLangTestCase {
'wgUseTidy' => false,
'wgAlwaysUseTidy' => false,
'wgCapitalLinks' => true,
+ 'wgHooks' => array(), // bypass hook ContentGetParserOutput that force custom rendering
) );
-
- // bypass hooks that force custom rendering
- if ( isset( $wgHooks['ContentGetParserOutput'] ) ) {
- $this->savedContentGetParserOutput = $wgHooks['ContentGetParserOutput'];
- unset( $wgHooks['ContentGetParserOutput'] );
- }
- }
-
- public function teardown() {
- global $wgHooks;
-
- // restore hooks that force custom rendering
- if ( $this->savedContentGetParserOutput !== null ) {
- $wgHooks['ContentGetParserOutput'] = $this->savedContentGetParserOutput;
- }
-
- parent::teardown();
}
public function newContent( $text ) {
diff --git a/tests/phpunit/includes/RequestContextTest.php b/tests/phpunit/includes/context/RequestContextTest.php
index cae0e52e..a9e5be24 100644
--- a/tests/phpunit/includes/RequestContextTest.php
+++ b/tests/phpunit/includes/context/RequestContextTest.php
@@ -88,9 +88,9 @@ class RequestContextTest extends MediaWikiTestCase {
unset( $sc ); // restore previous context
$info = $context->exportSession();
- $this->assertEquals( $oInfo['ip'], $info['ip'], "Correct initial IP address." );
- $this->assertEquals( $oInfo['headers'], $info['headers'], "Correct initial headers." );
- $this->assertEquals( $oInfo['sessionId'], $info['sessionId'], "Correct initial session ID." );
- $this->assertEquals( $oInfo['userId'], $info['userId'], "Correct initial user ID." );
+ $this->assertEquals( $oInfo['ip'], $info['ip'], "Correct restored IP address." );
+ $this->assertEquals( $oInfo['headers'], $info['headers'], "Correct restored headers." );
+ $this->assertEquals( $oInfo['sessionId'], $info['sessionId'], "Correct restored session ID." );
+ $this->assertEquals( $oInfo['userId'], $info['userId'], "Correct restored user ID." );
}
}
diff --git a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
index 55e48d13..b4292a60 100644
--- a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
+++ b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
@@ -2,7 +2,6 @@
/**
* Holds tests for DatabaseMysqlBase MediaWiki class.
*
- * @section LICENSE
* 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
diff --git a/tests/phpunit/includes/db/DatabaseSQLTest.php b/tests/phpunit/includes/db/DatabaseSQLTest.php
index 5c2d4b70..b13751f3 100644
--- a/tests/phpunit/includes/db/DatabaseSQLTest.php
+++ b/tests/phpunit/includes/db/DatabaseSQLTest.php
@@ -722,4 +722,84 @@ class DatabaseSQLTest extends MediaWikiTestCase {
$this->database->dropTable( 'non_existing', __METHOD__ )
);
}
+
+ /**
+ * @dataProvider provideMakeList
+ * @covers DatabaseBase::makeList
+ */
+ public function testMakeList( $list, $mode, $sqlText ) {
+ $this->assertEquals( trim( $this->database->makeList(
+ $list, $mode
+ ) ), $sqlText );
+ }
+
+ public static function provideMakeList() {
+ return array(
+ array(
+ array( 'value', 'value2' ),
+ LIST_COMMA,
+ "'value','value2'"
+ ),
+ array(
+ array( 'field', 'field2' ),
+ LIST_NAMES,
+ "field,field2"
+ ),
+ array(
+ array( 'field' => 'value', 'field2' => 'value2' ),
+ LIST_AND,
+ "field = 'value' AND field2 = 'value2'"
+ ),
+ array(
+ array( 'field' => null, "field2 != 'value2'" ),
+ LIST_AND,
+ "field IS NULL AND (field2 != 'value2')"
+ ),
+ array(
+ array( 'field' => array( 'value', null, 'value2' ), 'field2' => 'value2' ),
+ LIST_AND,
+ "(field IN ('value','value2') OR field IS NULL) AND field2 = 'value2'"
+ ),
+ array(
+ array( 'field' => array( null ), 'field2' => null ),
+ LIST_AND,
+ "field IS NULL AND field2 IS NULL"
+ ),
+ array(
+ array( 'field' => 'value', 'field2' => 'value2' ),
+ LIST_OR,
+ "field = 'value' OR field2 = 'value2'"
+ ),
+ array(
+ array( 'field' => 'value', 'field2' => null ),
+ LIST_OR,
+ "field = 'value' OR field2 IS NULL"
+ ),
+ array(
+ array( 'field' => array( 'value', 'value2' ), 'field2' => array( 'value' ) ),
+ LIST_OR,
+ "field IN ('value','value2') OR field2 = 'value'"
+ ),
+ array(
+ array( 'field' => array( null, 'value', null, 'value2' ), "field2 != 'value2'" ),
+ LIST_OR,
+ "(field IN ('value','value2') OR field IS NULL) OR (field2 != 'value2')"
+ ),
+ array(
+ array( 'field' => 'value', 'field2' => 'value2' ),
+ LIST_SET,
+ "field = 'value',field2 = 'value2'"
+ ),
+ array(
+ array( 'field' => 'value', 'field2' => null ),
+ LIST_SET,
+ "field = 'value',field2 = NULL"
+ ),
+ array(
+ array( 'field' => 'value', "field2 != 'value2'" ),
+ LIST_SET,
+ "field = 'value',field2 != 'value2'"
+ ),
+ );
+ }
}
diff --git a/tests/phpunit/includes/db/DatabaseSqliteTest.php b/tests/phpunit/includes/db/DatabaseSqliteTest.php
index 98b4ca04..645baf1f 100644
--- a/tests/phpunit/includes/db/DatabaseSqliteTest.php
+++ b/tests/phpunit/includes/db/DatabaseSqliteTest.php
@@ -1,10 +1,12 @@
<?php
-class MockDatabaseSqlite extends DatabaseSqliteStandalone {
+class MockDatabaseSqlite extends DatabaseSqlite {
private $lastQuery;
- function __construct() {
- parent::__construct( ':memory:' );
+ public static function newInstance( array $p = array() ) {
+ $p['dbFilePath'] = ':memory:';
+
+ return new self( $p );
}
function query( $sql, $fname = '', $tempIgnore = false ) {
@@ -36,7 +38,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
if ( !Sqlite::isPresent() ) {
$this->markTestSkipped( 'No SQLite support detected' );
}
- $this->db = new MockDatabaseSqlite();
+ $this->db = MockDatabaseSqlite::newInstance();
if ( version_compare( $this->db->getServerVersion(), '3.6.0', '<' ) ) {
$this->markTestSkipped( "SQLite at least 3.6 required, {$this->db->getServerVersion()} found" );
}
@@ -89,7 +91,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
*/
public function testAddQuotes( $value, $expected ) {
// check quoting
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$this->assertEquals( $expected, $db->addQuotes( $value ), 'string not quoted as expected' );
// ok, quoting works as expected, now try a round trip.
@@ -172,7 +174,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
*/
public function testTableName() {
// @todo Moar!
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$this->assertEquals( 'foo', $db->tableName( 'foo' ) );
$this->assertEquals( 'sqlite_master', $db->tableName( 'sqlite_master' ) );
$db->tablePrefix( 'foo' );
@@ -184,7 +186,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
* @covers DatabaseSqlite::duplicateTableStructure
*/
public function testDuplicateTableStructure() {
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$db->query( 'CREATE TABLE foo(foo, barfoo)' );
$db->duplicateTableStructure( 'foo', 'bar' );
@@ -208,7 +210,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
* @covers DatabaseSqlite::duplicateTableStructure
*/
public function testDuplicateTableStructureVirtual() {
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
if ( $db->getFulltextSearchModule() != 'FTS3' ) {
$this->markTestSkipped( 'FTS3 not supported, cannot create virtual tables' );
}
@@ -231,7 +233,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
* @covers DatabaseSqlite::deleteJoin
*/
public function testDeleteJoin() {
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$db->query( 'CREATE TABLE a (a_1)', __METHOD__ );
$db->query( 'CREATE TABLE b (b_1, b_2)', __METHOD__ );
$db->insert( 'a', array(
@@ -272,7 +274,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
* @todo Currently only checks list of tables
*/
public function testUpgrades() {
- global $IP, $wgVersion, $wgProfileToDatabase;
+ global $IP, $wgVersion, $wgProfiler;
// Versions tested
$versions = array(
@@ -289,9 +291,20 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
'user_newtalk.user_last_timestamp', // r84185
);
- $currentDB = new DatabaseSqliteStandalone( ':memory:' );
+ $currentDB = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$currentDB->sourceFile( "$IP/maintenance/tables.sql" );
- if ( $wgProfileToDatabase ) {
+
+ $profileToDb = false;
+ if ( isset( $wgProfiler['output'] ) ) {
+ $out = $wgProfiler['output'];
+ if ( $out === 'db' ) {
+ $profileToDb = true;
+ } elseif ( is_array( $out ) && in_array( 'db', $out ) ) {
+ $profileToDb = true;
+ }
+ }
+
+ if ( $profileToDb ) {
$currentDB->sourceFile( "$IP/maintenance/sqlite/archives/patch-profiling.sql" );
}
$currentTables = $this->getTables( $currentDB );
@@ -346,7 +359,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
* @covers DatabaseSqlite::insertId
*/
public function testInsertIdType() {
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$databaseCreation = $db->query( 'CREATE TABLE a ( a_1 )', __METHOD__ );
$this->assertInstanceOf( 'ResultWrapper', $databaseCreation, "Database creation" );
@@ -366,7 +379,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
}
global $IP;
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$db->sourceFile( "$IP/tests/phpunit/data/db/sqlite/tables-$version.sql" );
$updater = DatabaseUpdater::newForDB( $db, false, $maint );
$updater->doUpdates( array( 'core' ) );
@@ -429,7 +442,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
public function testCaseInsensitiveLike() {
// TODO: Test this for all databases
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$res = $db->query( 'SELECT "a" LIKE "A" AS a' );
$row = $res->fetchRow();
$this->assertFalse( (bool)$row['a'] );
@@ -439,7 +452,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
* @covers DatabaseSqlite::numFields
*/
public function testNumFields() {
- $db = new DatabaseSqliteStandalone( ':memory:' );
+ $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
$databaseCreation = $db->query( 'CREATE TABLE a ( a_1 )', __METHOD__ );
$this->assertInstanceOf( 'ResultWrapper', $databaseCreation, "Failed to create table a" );
diff --git a/tests/phpunit/includes/db/LBFactoryTest.php b/tests/phpunit/includes/db/LBFactoryTest.php
index 4c59f474..81d6840b 100644
--- a/tests/phpunit/includes/db/LBFactoryTest.php
+++ b/tests/phpunit/includes/db/LBFactoryTest.php
@@ -2,7 +2,6 @@
/**
* Holds tests for LBFactory abstract MediaWiki class.
*
- * @section LICENSE
* 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
diff --git a/tests/phpunit/includes/db/ORMRowTest.php b/tests/phpunit/includes/db/ORMRowTest.php
index 447bf219..807bd14e 100644
--- a/tests/phpunit/includes/db/ORMRowTest.php
+++ b/tests/phpunit/includes/db/ORMRowTest.php
@@ -34,7 +34,6 @@
* that hold the first tests in a pending state awaiting access to the database.
* @group medium
*
- * @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
abstract class ORMRowTest extends \MediaWikiTestCase {
diff --git a/tests/phpunit/includes/db/ORMTableTest.php b/tests/phpunit/includes/db/ORMTableTest.php
index 7171ee59..338d931f 100644
--- a/tests/phpunit/includes/db/ORMTableTest.php
+++ b/tests/phpunit/includes/db/ORMTableTest.php
@@ -25,14 +25,12 @@
* @group ORM
* @group Database
*
- * @licence GNU GPL v2+
+ * @covers PageORMTableForTesting
+ *
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
* @author Daniel Kinzler
*/
-/**
- * @covers PageORMTableForTesting
- */
class ORMTableTest extends MediaWikiTestCase {
/**
@@ -99,6 +97,10 @@ class ORMTableTest extends MediaWikiTestCase {
class PageORMTableForTesting extends ORMTable {
+ public function __construct() {
+ $this->fieldPrefix = 'page_';
+ }
+
/**
* @see ORMTable::getName
*
@@ -138,13 +140,4 @@ class PageORMTableForTesting extends ORMTable {
'title' => 'str',
);
}
-
- /**
- * @see ORMTable::getFieldPrefix
- *
- * @return string
- */
- protected function getFieldPrefix() {
- return 'page_';
- }
}
diff --git a/tests/phpunit/includes/db/TestORMRowTest.php b/tests/phpunit/includes/db/TestORMRowTest.php
index c9459c90..04bb9f38 100644
--- a/tests/phpunit/includes/db/TestORMRowTest.php
+++ b/tests/phpunit/includes/db/TestORMRowTest.php
@@ -20,27 +20,23 @@
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @since 1.20
- *
* @ingroup Test
- *
- * @group ORM
- *
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+
+/**
* The database group has as a side effect that temporal database tables are created. This makes
* it possible to test without poisoning a production database.
- * @group Database
*
* Some of the tests takes more time, and needs therefor longer time before they can be aborted
* as non-functional. The reason why tests are aborted is assumed to be set up of temporal databases
* that hold the first tests in a pending state awaiting access to the database.
- * @group medium
*
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-require_once __DIR__ . "/ORMRowTest.php";
-
-/**
+ * @since 1.20
+ *
+ * @group ORM
+ * @group Database
+ * @group medium
* @covers TestORMRow
*/
class TestORMRowTest extends ORMRowTest {
@@ -150,6 +146,10 @@ class TestORMRow extends ORMRow {
class TestORMTable extends ORMTable {
+ public function __construct() {
+ $this->fieldPrefix = 'test_';
+ }
+
/**
* Returns the name of the database table objects of this type are stored in.
*
@@ -204,15 +204,4 @@ class TestORMTable extends ORMTable {
'time' => 'str', // TS_MW
);
}
-
- /**
- * Gets the db field prefix.
- *
- * @since 1.20
- *
- * @return string
- */
- protected function getFieldPrefix() {
- return 'test_';
- }
}
diff --git a/tests/phpunit/includes/debug/MWDebugTest.php b/tests/phpunit/includes/debug/MWDebugTest.php
index 6e41de75..1abb47e7 100644
--- a/tests/phpunit/includes/debug/MWDebugTest.php
+++ b/tests/phpunit/includes/debug/MWDebugTest.php
@@ -96,16 +96,15 @@ class MWDebugTest extends MediaWikiTestCase {
$apiMain = new ApiMain( $context );
$result = new ApiResult( $apiMain );
- $result->setRawMode( true );
MWDebug::appendDebugInfoToApiResult( $context, $result );
$this->assertInstanceOf( 'ApiResult', $result );
- $data = $result->getData();
+ $data = $result->getResultData();
$expectedKeys = array( 'mwVersion', 'phpEngine', 'phpVersion', 'gitRevision', 'gitBranch',
'gitViewUrl', 'time', 'log', 'debugLog', 'queries', 'request', 'memory',
- 'memoryPeak', 'includes', 'profile', '_element' );
+ 'memoryPeak', 'includes', '_element' );
foreach ( $expectedKeys as $expectedKey ) {
$this->assertArrayHasKey( $expectedKey, $data['debuginfo'], "debuginfo has $expectedKey" );
diff --git a/tests/phpunit/includes/debug/logging/LegacyLoggerTest.php b/tests/phpunit/includes/debug/logging/LegacyLoggerTest.php
new file mode 100644
index 00000000..415fa045
--- /dev/null
+++ b/tests/phpunit/includes/debug/logging/LegacyLoggerTest.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Logger;
+
+use MediaWikiTestCase;
+use Psr\Log\LogLevel;
+
+class LegacyLoggerTest extends MediaWikiTestCase {
+
+ /**
+ * @covers LegacyLogger::interpolate
+ * @dataProvider provideInterpolate
+ */
+ public function testInterpolate( $message, $context, $expect ) {
+ $this->assertEquals(
+ $expect, LegacyLogger::interpolate( $message, $context ) );
+ }
+
+ public function provideInterpolate() {
+ return array(
+ array(
+ 'no-op',
+ array(),
+ 'no-op',
+ ),
+ array(
+ 'Hello {world}!',
+ array(
+ 'world' => 'World',
+ ),
+ 'Hello World!',
+ ),
+ array(
+ '{greeting} {user}',
+ array(
+ 'greeting' => 'Goodnight',
+ 'user' => 'Moon',
+ ),
+ 'Goodnight Moon',
+ ),
+ array(
+ 'Oops {key_not_set}',
+ array(),
+ 'Oops {key_not_set}',
+ ),
+ array(
+ '{ not interpolated }',
+ array(
+ 'not interpolated' => 'This should NOT show up in the message',
+ ),
+ '{ not interpolated }',
+ ),
+ );
+ }
+
+ /**
+ * @covers LegacyLogger::shouldEmit
+ * @dataProvider provideShouldEmit
+ */
+ public function testShouldEmit( $level, $config, $expected ) {
+ $this->setMwGlobals( 'wgDebugLogGroups', array( 'fakechannel' => $config ) );
+ $this->assertEquals(
+ $expected,
+ LegacyLogger::shouldEmit( 'fakechannel', 'some message', $level, array() )
+ );
+ }
+
+ public static function provideShouldEmit() {
+ $dest = array( 'destination' => 'foobar' );
+ $tests = array(
+ array(
+ LogLevel::DEBUG,
+ $dest,
+ true
+ ),
+ array(
+ LogLevel::WARNING,
+ $dest + array( 'level' => LogLevel::INFO ),
+ true,
+ ),
+ array(
+ LogLevel::INFO,
+ $dest + array( 'level' => LogLevel::CRITICAL ),
+ false,
+ ),
+ );
+
+ if ( class_exists( '\Monolog\Logger' ) ) {
+ $tests[] = array(
+ \Monolog\Logger::INFO,
+ $dest + array( 'level' => LogLevel::INFO ),
+ true,
+ );
+ $tests[] = array(
+ \Monolog\Logger::WARNING,
+ $dest + array( 'level' => LogLevel::EMERGENCY ),
+ false,
+ );
+ }
+
+ return $tests;
+ }
+
+}
diff --git a/tests/phpunit/includes/LinksUpdateTest.php b/tests/phpunit/includes/deferred/LinksUpdateTest.php
index 02f6b2ab..02f6b2ab 100644
--- a/tests/phpunit/includes/LinksUpdateTest.php
+++ b/tests/phpunit/includes/deferred/LinksUpdateTest.php
diff --git a/tests/phpunit/includes/search/SearchUpdateTest.php b/tests/phpunit/includes/deferred/SearchUpdateTest.php
index c6275371..90438a04 100644
--- a/tests/phpunit/includes/search/SearchUpdateTest.php
+++ b/tests/phpunit/includes/deferred/SearchUpdateTest.php
@@ -17,7 +17,6 @@ class MockSearch extends SearchEngine {
/**
* @group Search
- * @group Database
*/
class SearchUpdateTest extends MediaWikiTestCase {
@@ -67,9 +66,10 @@ EOT
/**
* @covers SearchUpdate::updateText
- * @todo give this test a real name explaining what is being tested here
+ * Test bug 32712
+ * Test if unicode quotes in article links make its search index empty
*/
- public function testBug32712() {
+ public function testUnicodeLinkSearchIndexError() {
$text = "text „http://example.com“ text";
$result = $this->updateText( $text );
$processed = preg_replace( '/Q/u', 'Q', $result );
diff --git a/tests/phpunit/includes/diff/ArrayDiffFormatterTest.php b/tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
index 188ad3fd..3bea9b31 100644
--- a/tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
+++ b/tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
@@ -1,7 +1,6 @@
<?php
/**
- * @licence GNU GPL v2+
* @author Adam Shorland
*
* @group Diff
diff --git a/tests/phpunit/includes/diff/DiffOpTest.php b/tests/phpunit/includes/diff/DiffOpTest.php
index d89b89fe..cbe05732 100644
--- a/tests/phpunit/includes/diff/DiffOpTest.php
+++ b/tests/phpunit/includes/diff/DiffOpTest.php
@@ -1,10 +1,5 @@
<?php
-
-//Load our FakeDiffOp
-require_once __DIR__ . DIRECTORY_SEPARATOR . 'FakeDiffOp.php';
-
/**
- * @licence GNU GPL v2+
* @author Adam Shorland
*
* @group Diff
diff --git a/tests/phpunit/includes/diff/DiffTest.php b/tests/phpunit/includes/diff/DiffTest.php
index 1911c82a..e0d79157 100644
--- a/tests/phpunit/includes/diff/DiffTest.php
+++ b/tests/phpunit/includes/diff/DiffTest.php
@@ -1,7 +1,6 @@
<?php
/**
- * @licence GNU GPL v2+
* @author Adam Shorland
*
* @group Diff
diff --git a/tests/phpunit/includes/diff/DifferenceEngineTest.php b/tests/phpunit/includes/diff/DifferenceEngineTest.php
index 5474b963..0f599af1 100644
--- a/tests/phpunit/includes/diff/DifferenceEngineTest.php
+++ b/tests/phpunit/includes/diff/DifferenceEngineTest.php
@@ -8,7 +8,6 @@
* @group Database
* @group Diff
*
- * @licence GNU GPL v2+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class DifferenceEngineTest extends MediaWikiTestCase {
diff --git a/tests/phpunit/includes/exception/BadTitleErrorTest.php b/tests/phpunit/includes/exception/BadTitleErrorTest.php
index 003efd27..500b7e48 100644
--- a/tests/phpunit/includes/exception/BadTitleErrorTest.php
+++ b/tests/phpunit/includes/exception/BadTitleErrorTest.php
@@ -5,23 +5,8 @@
*/
class BadTitleErrorTest extends MediaWikiTestCase {
- protected $wgOut;
-
- protected function setUp() {
- parent::setUp();
- global $wgOut;
- $this->wgOut = clone $wgOut;
- }
-
- protected function tearDown() {
- parent::tearDown();
- global $wgOut;
- $wgOut = $this->wgOut;
- }
-
public function testExceptionSetsStatusCode() {
- global $wgOut;
- $wgOut = $this->getMockWgOut();
+ $this->setMwGlobals( 'wgOut', $this->getMockWgOut() );
try {
throw new BadTitleError();
} catch ( BadTitleError $e ) {
diff --git a/tests/phpunit/includes/exception/ErrorPageErrorTest.php b/tests/phpunit/includes/exception/ErrorPageErrorTest.php
index 13dcf33b..9c4e4a0b 100644
--- a/tests/phpunit/includes/exception/ErrorPageErrorTest.php
+++ b/tests/phpunit/includes/exception/ErrorPageErrorTest.php
@@ -6,20 +6,6 @@
*/
class ErrorPageErrorTest extends MediaWikiTestCase {
- private $wgOut;
-
- protected function setUp() {
- parent::setUp();
- global $wgOut;
- $this->wgOut = clone $wgOut;
- }
-
- protected function tearDown() {
- global $wgOut;
- $wgOut = $this->wgOut;
- parent::tearDown();
- }
-
private function getMockMessage() {
$mockMessage = $this->getMockBuilder( 'Message' )
->disableOriginalConstructor()
@@ -48,20 +34,18 @@ class ErrorPageErrorTest extends MediaWikiTestCase {
$title = 'Foo';
$params = array( 'Baz' );
- global $wgOut;
- $wgOut = $this->getMockBuilder( 'OutputPage' )
+ $mock = $this->getMockBuilder( 'OutputPage' )
->disableOriginalConstructor()
->getMock();
- $wgOut->expects( $this->once() )
+ $mock->expects( $this->once() )
->method( 'showErrorPage' )
->with( $title, $mockMessage, $params );
- $wgOut->expects( $this->once() )
+ $mock->expects( $this->once() )
->method( 'output' );
+ $this->setMwGlobals( 'wgOut', $mock );
$e = new ErrorPageError( $title, $mockMessage, $params );
$e->report();
}
-
-
}
diff --git a/tests/phpunit/includes/exception/MWExceptionHandlerTest.php b/tests/phpunit/includes/exception/MWExceptionHandlerTest.php
index dc5dc6aa..d73f17d9 100644
--- a/tests/phpunit/includes/exception/MWExceptionHandlerTest.php
+++ b/tests/phpunit/includes/exception/MWExceptionHandlerTest.php
@@ -15,7 +15,7 @@ class MWExceptionHandlerTest extends MediaWikiTestCase {
$refvar = 'value';
try {
$array = array( 'a', 'b' );
- $object = new StdClass();
+ $object = new stdClass();
self::helperThrowAnException( $array, $object, $refvar );
} catch ( Exception $e ) {
}
diff --git a/tests/phpunit/includes/exception/ThrottledErrorTest.php b/tests/phpunit/includes/exception/ThrottledErrorTest.php
index bdb143fa..a1cf84bc 100644
--- a/tests/phpunit/includes/exception/ThrottledErrorTest.php
+++ b/tests/phpunit/includes/exception/ThrottledErrorTest.php
@@ -6,23 +6,8 @@
*/
class ThrottledErrorTest extends MediaWikiTestCase {
- protected $wgOut;
-
- protected function setUp() {
- parent::setUp();
- global $wgOut;
- $this->wgOut = clone $wgOut;
- }
-
- protected function tearDown() {
- parent::tearDown();
- global $wgOut;
- $wgOut = $this->wgOut;
- }
-
public function testExceptionSetsStatusCode() {
- global $wgOut;
- $wgOut = $this->getMockWgOut();
+ $this->setMwGlobals( 'wgOut', $this->getMockWgOut() );
try {
throw new ThrottledError();
} catch ( ThrottledError $e ) {
diff --git a/tests/phpunit/includes/ExternalStoreTest.php b/tests/phpunit/includes/externalstore/ExternalStoreTest.php
index 07c2957c..07c2957c 100644
--- a/tests/phpunit/includes/ExternalStoreTest.php
+++ b/tests/phpunit/includes/externalstore/ExternalStoreTest.php
diff --git a/tests/phpunit/includes/filebackend/FileBackendTest.php b/tests/phpunit/includes/filebackend/FileBackendTest.php
index 9558cc7d..bfca75ad 100644
--- a/tests/phpunit/includes/filebackend/FileBackendTest.php
+++ b/tests/phpunit/includes/filebackend/FileBackendTest.php
@@ -13,14 +13,13 @@ class FileBackendTest extends MediaWikiTestCase {
private $multiBackend;
/** @var FSFileBackend */
public $singleBackend;
- private $filesToPrune = array();
private static $backendToUse;
protected function setUp() {
global $wgFileBackends;
parent::setUp();
$uniqueId = time() . '-' . mt_rand();
- $tmpPrefix = wfTempDir() . '/filebackend-unittest-' . $uniqueId;
+ $tmpDir = $this->getNewTempDirectory();
if ( $this->getCliArg( 'use-filebackend' ) ) {
if ( self::$backendToUse ) {
$this->singleBackend = self::$backendToUse;
@@ -51,8 +50,8 @@ class FileBackendTest extends MediaWikiTestCase {
'lockManager' => LockManagerGroup::singleton()->get( 'fsLockManager' ),
'wikiId' => wfWikiID(),
'containerPaths' => array(
- 'unittest-cont1' => "{$tmpPrefix}-localtesting-cont1",
- 'unittest-cont2' => "{$tmpPrefix}-localtesting-cont2" )
+ 'unittest-cont1' => "{$tmpDir}/localtesting-cont1",
+ 'unittest-cont2' => "{$tmpDir}/localtesting-cont2" )
) );
}
$this->multiBackend = new FileBackendMultiWrite( array(
@@ -65,21 +64,20 @@ class FileBackendTest extends MediaWikiTestCase {
'name' => 'localmultitesting1',
'class' => 'FSFileBackend',
'containerPaths' => array(
- 'unittest-cont1' => "{$tmpPrefix}-localtestingmulti1-cont1",
- 'unittest-cont2' => "{$tmpPrefix}-localtestingmulti1-cont2" ),
+ 'unittest-cont1' => "{$tmpDir}/localtestingmulti1-cont1",
+ 'unittest-cont2' => "{$tmpDir}/localtestingmulti1-cont2" ),
'isMultiMaster' => false
),
array(
'name' => 'localmultitesting2',
'class' => 'FSFileBackend',
'containerPaths' => array(
- 'unittest-cont1' => "{$tmpPrefix}-localtestingmulti2-cont1",
- 'unittest-cont2' => "{$tmpPrefix}-localtestingmulti2-cont2" ),
+ 'unittest-cont1' => "{$tmpDir}/localtestingmulti2-cont1",
+ 'unittest-cont2' => "{$tmpDir}/localtestingmulti2-cont2" ),
'isMultiMaster' => true
)
)
) );
- $this->filesToPrune = array();
}
private static function baseStorePath() {
@@ -214,7 +212,7 @@ class FileBackendTest extends MediaWikiTestCase {
* @dataProvider provider_testStore
*/
public function testStore( $op ) {
- $this->filesToPrune[] = $op['src'];
+ $this->addTmpFiles( $op['src'] );
$this->backend = $this->singleBackend;
$this->tearDownFiles();
@@ -224,7 +222,6 @@ class FileBackendTest extends MediaWikiTestCase {
$this->backend = $this->multiBackend;
$this->tearDownFiles();
$this->doTestStore( $op );
- $this->filesToPrune[] = $op['src']; # avoid file leaking
$this->tearDownFiles();
}
@@ -275,27 +272,15 @@ class FileBackendTest extends MediaWikiTestCase {
$tmpName = TempFSFile::factory( "unittests_", 'txt' )->getPath();
$toPath = self::baseStorePath() . '/unittest-cont1/e/fun/obj1.txt';
$op = array( 'op' => 'store', 'src' => $tmpName, 'dst' => $toPath );
- $cases[] = array(
- $op, // operation
- $tmpName, // source
- $toPath, // dest
- );
+ $cases[] = array( $op );
$op2 = $op;
$op2['overwrite'] = true;
- $cases[] = array(
- $op2, // operation
- $tmpName, // source
- $toPath, // dest
- );
+ $cases[] = array( $op2 );
- $op2 = $op;
- $op2['overwriteSame'] = true;
- $cases[] = array(
- $op2, // operation
- $tmpName, // source
- $toPath, // dest
- );
+ $op3 = $op;
+ $op3['overwriteSame'] = true;
+ $cases[] = array( $op3 );
return $cases;
}
@@ -948,18 +933,14 @@ class FileBackendTest extends MediaWikiTestCase {
* @dataProvider provider_testConcatenate
*/
public function testConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus ) {
- $this->filesToPrune[] = $op['dst'];
-
$this->backend = $this->singleBackend;
$this->tearDownFiles();
$this->doTestConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus );
- $this->filesToPrune[] = $op['dst']; # avoid file leaking
$this->tearDownFiles();
$this->backend = $this->multiBackend;
$this->tearDownFiles();
$this->doTestConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus );
- $this->filesToPrune[] = $op['dst']; # avoid file leaking
$this->tearDownFiles();
}
@@ -983,7 +964,7 @@ class FileBackendTest extends MediaWikiTestCase {
$this->assertGoodStatus( $status,
"Creation of source files succeeded ($backendName)." );
- $dest = $params['dst'];
+ $dest = $params['dst'] = $this->getNewTempFile();
if ( $alreadyExists ) {
$ok = file_put_contents( $dest, 'blah...blah...waahwaah' ) !== false;
$this->assertEquals( true, $ok,
@@ -1029,8 +1010,6 @@ class FileBackendTest extends MediaWikiTestCase {
public static function provider_testConcatenate() {
$cases = array();
- $rand = mt_rand( 0, 2000000000 ) . time();
- $dest = wfTempDir() . "/randomfile!$rand.txt";
$srcs = array(
self::baseStorePath() . '/unittest-cont1/e/file1.txt',
self::baseStorePath() . '/unittest-cont1/e/file2.txt',
@@ -1055,7 +1034,7 @@ class FileBackendTest extends MediaWikiTestCase {
'lkaem;a',
'legma'
);
- $params = array( 'srcs' => $srcs, 'dst' => $dest );
+ $params = array( 'srcs' => $srcs );
$cases[] = array(
$params, // operation
@@ -1499,7 +1478,7 @@ class FileBackendTest extends MediaWikiTestCase {
$url = $this->backend->getFileHttpUrl( array( 'src' => $source ) );
if ( $url !== null ) { // supported
- $data = Http::request( "GET", $url );
+ $data = Http::request( "GET", $url, array(), __METHOD__ );
$this->assertEquals( $content, $data,
"HTTP GET of URL has right contents ($backendName)." );
}
@@ -1761,16 +1740,13 @@ class FileBackendTest extends MediaWikiTestCase {
$fileCContents = 'eigna[ogmewt 3qt g3qg flew[ag';
$tmpNameA = TempFSFile::factory( "unittests_", 'txt' )->getPath();
- file_put_contents( $tmpNameA, $fileAContents );
$tmpNameB = TempFSFile::factory( "unittests_", 'txt' )->getPath();
- file_put_contents( $tmpNameB, $fileBContents );
$tmpNameC = TempFSFile::factory( "unittests_", 'txt' )->getPath();
+ $this->addTmpFiles( array( $tmpNameA, $tmpNameB, $tmpNameC ) );
+ file_put_contents( $tmpNameA, $fileAContents );
+ file_put_contents( $tmpNameB, $fileBContents );
file_put_contents( $tmpNameC, $fileCContents );
- $this->filesToPrune[] = $tmpNameA; # avoid file leaking
- $this->filesToPrune[] = $tmpNameB; # avoid file leaking
- $this->filesToPrune[] = $tmpNameC; # avoid file leaking
-
$fileA = "$base/unittest-cont1/e/a/b/fileA.txt";
$fileB = "$base/unittest-cont1/e/a/b/fileB.txt";
$fileC = "$base/unittest-cont1/e/a/b/fileC.txt";
@@ -2434,16 +2410,10 @@ class FileBackendTest extends MediaWikiTestCase {
}
function tearDownFiles() {
- foreach ( $this->filesToPrune as $file ) {
- if ( is_file( $file ) ) {
- unlink( $file );
- }
- }
$containers = array( 'unittest-cont1', 'unittest-cont2', 'unittest-cont-bad' );
foreach ( $containers as $container ) {
$this->deleteFiles( $container );
}
- $this->filesToPrune = array();
}
private function deleteFiles( $container ) {
diff --git a/tests/phpunit/includes/filerepo/StoreBatchTest.php b/tests/phpunit/includes/filerepo/StoreBatchTest.php
index 9cc2efbf..86bfe123 100644
--- a/tests/phpunit/includes/filerepo/StoreBatchTest.php
+++ b/tests/phpunit/includes/filerepo/StoreBatchTest.php
@@ -16,7 +16,7 @@ class StoreBatchTest extends MediaWikiTestCase {
parent::setUp();
# Forge a FSRepo object to not have to rely on local wiki settings
- $tmpPrefix = wfTempDir() . '/storebatch-test-' . time() . '-' . mt_rand();
+ $tmpPrefix = $this->getNewTempDirectory();
if ( $this->getCliArg( 'use-filebackend' ) ) {
$name = $this->getCliArg( 'use-filebackend' );
$useConfig = array();
@@ -35,10 +35,10 @@ class StoreBatchTest extends MediaWikiTestCase {
'name' => 'local-testing',
'wikiId' => wfWikiID(),
'containerPaths' => array(
- 'unittests-public' => "{$tmpPrefix}-public",
- 'unittests-thumb' => "{$tmpPrefix}-thumb",
- 'unittests-temp' => "{$tmpPrefix}-temp",
- 'unittests-deleted' => "{$tmpPrefix}-deleted",
+ 'unittests-public' => "{$tmpPrefix}/public",
+ 'unittests-thumb' => "{$tmpPrefix}/thumb",
+ 'unittests-temp' => "{$tmpPrefix}/temp",
+ 'unittests-deleted' => "{$tmpPrefix}/deleted",
)
) );
}
@@ -52,13 +52,8 @@ class StoreBatchTest extends MediaWikiTestCase {
}
protected function tearDown() {
- $this->repo->cleanupBatch( $this->createdFiles ); // delete files
- foreach ( $this->createdFiles as $tmp ) { // delete dirs
- $tmp = $this->repo->resolveVirtualUrl( $tmp );
- while ( $tmp = FileBackend::parentStoragePath( $tmp ) ) {
- $this->repo->getBackend()->clean( array( 'dir' => $tmp ) );
- }
- }
+ // Delete files
+ $this->repo->cleanupBatch( $this->createdFiles );
parent::tearDown();
}
diff --git a/tests/phpunit/includes/LocalFileTest.php b/tests/phpunit/includes/filerepo/file/LocalFileTest.php
index 5c5052e4..3c5754bf 100644
--- a/tests/phpunit/includes/LocalFileTest.php
+++ b/tests/phpunit/includes/filerepo/file/LocalFileTest.php
@@ -2,7 +2,6 @@
/**
* These tests should work regardless of $wgCapitalLinks
- * @group Database
* @todo Split tests into providers and test methods
*/
diff --git a/tests/phpunit/includes/installer/DatabaseUpdaterTest.php b/tests/phpunit/includes/installer/DatabaseUpdaterTest.php
new file mode 100644
index 00000000..abff3e68
--- /dev/null
+++ b/tests/phpunit/includes/installer/DatabaseUpdaterTest.php
@@ -0,0 +1,279 @@
+<?php
+
+class DatabaseUpdaterTest extends MediaWikiTestCase {
+
+ public function testSetAppliedUpdates() {
+ $db = new FakeDatabase();
+ $dbu = new FakeDatabaseUpdater( $db );
+ $dbu->setAppliedUpdates( "test", array() );
+ $expected = "updatelist-test-" . time() . "0";
+ $actual = $db->lastInsertData['ul_key'];
+ $this->assertEquals( $expected, $actual, var_export( $db->lastInsertData, true ) );
+ $dbu->setAppliedUpdates( "test", array() );
+ $expected = "updatelist-test-" . time() . "1";
+ $actual = $db->lastInsertData['ul_key'];
+ $this->assertEquals( $expected, $actual, var_export( $db->lastInsertData, true ) );
+ }
+}
+
+class FakeDatabase extends DatabaseBase {
+ public $lastInsertTable;
+ public $lastInsertData;
+
+ function __construct() {
+ }
+
+ function clearFlag( $arg ) {
+ }
+
+ function setFlag( $arg ) {
+ }
+
+ public function insert( $table, $a, $fname = __METHOD__, $options = array() ) {
+ $this->lastInsertTable = $table;
+ $this->lastInsertData = $a;
+ }
+
+ /**
+ * Get the type of the DBMS, as it appears in $wgDBtype.
+ *
+ * @return string
+ */
+ function getType() {
+ // TODO: Implement getType() method.
+ }
+
+ /**
+ * Open a connection to the database. Usually aborts on failure
+ *
+ * @param string $server Database server host
+ * @param string $user Database user name
+ * @param string $password Database user password
+ * @param string $dbName Database name
+ * @return bool
+ * @throws DBConnectionError
+ */
+ function open( $server, $user, $password, $dbName ) {
+ // TODO: Implement open() method.
+ }
+
+ /**
+ * Fetch the next row from the given result object, in object form.
+ * Fields can be retrieved with $row->fieldname, with fields acting like
+ * member variables.
+ * If no more rows are available, false is returned.
+ *
+ * @param ResultWrapper|stdClass $res Object as returned from DatabaseBase::query(), etc.
+ * @return stdClass|bool
+ * @throws DBUnexpectedError Thrown if the database returns an error
+ */
+ function fetchObject( $res ) {
+ // TODO: Implement fetchObject() method.
+ }
+
+ /**
+ * Fetch the next row from the given result object, in associative array
+ * form. Fields are retrieved with $row['fieldname'].
+ * If no more rows are available, false is returned.
+ *
+ * @param ResultWrapper $res Result object as returned from DatabaseBase::query(), etc.
+ * @return array|bool
+ * @throws DBUnexpectedError Thrown if the database returns an error
+ */
+ function fetchRow( $res ) {
+ // TODO: Implement fetchRow() method.
+ }
+
+ /**
+ * Get the number of rows in a result object
+ *
+ * @param mixed $res A SQL result
+ * @return int
+ */
+ function numRows( $res ) {
+ // TODO: Implement numRows() method.
+ }
+
+ /**
+ * Get the number of fields in a result object
+ * @see http://www.php.net/mysql_num_fields
+ *
+ * @param mixed $res A SQL result
+ * @return int
+ */
+ function numFields( $res ) {
+ // TODO: Implement numFields() method.
+ }
+
+ /**
+ * Get a field name in a result object
+ * @see http://www.php.net/mysql_field_name
+ *
+ * @param mixed $res A SQL result
+ * @param int $n
+ * @return string
+ */
+ function fieldName( $res, $n ) {
+ // TODO: Implement fieldName() method.
+ }
+
+ /**
+ * Get the inserted value of an auto-increment row
+ *
+ * The value inserted should be fetched from nextSequenceValue()
+ *
+ * Example:
+ * $id = $dbw->nextSequenceValue( 'page_page_id_seq' );
+ * $dbw->insert( 'page', array( 'page_id' => $id ) );
+ * $id = $dbw->insertId();
+ *
+ * @return int
+ */
+ function insertId() {
+ // TODO: Implement insertId() method.
+ }
+
+ /**
+ * Change the position of the cursor in a result object
+ * @see http://www.php.net/mysql_data_seek
+ *
+ * @param mixed $res A SQL result
+ * @param int $row
+ */
+ function dataSeek( $res, $row ) {
+ // TODO: Implement dataSeek() method.
+ }
+
+ /**
+ * Get the last error number
+ * @see http://www.php.net/mysql_errno
+ *
+ * @return int
+ */
+ function lastErrno() {
+ // TODO: Implement lastErrno() method.
+ }
+
+ /**
+ * Get a description of the last error
+ * @see http://www.php.net/mysql_error
+ *
+ * @return string
+ */
+ function lastError() {
+ // TODO: Implement lastError() method.
+ }
+
+ /**
+ * mysql_fetch_field() wrapper
+ * Returns false if the field doesn't exist
+ *
+ * @param string $table Table name
+ * @param string $field Field name
+ *
+ * @return Field
+ */
+ function fieldInfo( $table, $field ) {
+ // TODO: Implement fieldInfo() method.
+ }
+
+ /**
+ * Get information about an index into an object
+ * @param string $table Table name
+ * @param string $index Index name
+ * @param string $fname Calling function name
+ * @return mixed Database-specific index description class or false if the index does not exist
+ */
+ function indexInfo( $table, $index, $fname = __METHOD__ ) {
+ // TODO: Implement indexInfo() method.
+ }
+
+ /**
+ * Get the number of rows affected by the last write query
+ * @see http://www.php.net/mysql_affected_rows
+ *
+ * @return int
+ */
+ function affectedRows() {
+ // TODO: Implement affectedRows() method.
+ }
+
+ /**
+ * Wrapper for addslashes()
+ *
+ * @param string $s String to be slashed.
+ * @return string Slashed string.
+ */
+ function strencode( $s ) {
+ // TODO: Implement strencode() method.
+ }
+
+ /**
+ * Returns a wikitext link to the DB's website, e.g.,
+ * return "[http://www.mysql.com/ MySQL]";
+ * Should at least contain plain text, if for some reason
+ * your database has no website.
+ *
+ * @return string Wikitext of a link to the server software's web site
+ */
+ function getSoftwareLink() {
+ // TODO: Implement getSoftwareLink() method.
+ }
+
+ /**
+ * A string describing the current software version, like from
+ * mysql_get_server_info().
+ *
+ * @return string Version information from the database server.
+ */
+ function getServerVersion() {
+ // TODO: Implement getServerVersion() method.
+ }
+
+ /**
+ * Closes underlying database connection
+ * @since 1.20
+ * @return bool Whether connection was closed successfully
+ */
+ protected function closeConnection() {
+ // TODO: Implement closeConnection() method.
+ }
+
+ /**
+ * The DBMS-dependent part of query()
+ *
+ * @param string $sql SQL query.
+ * @return ResultWrapper|bool Result object to feed to fetchObject,
+ * fetchRow, ...; or false on failure
+ */
+ protected function doQuery( $sql ) {
+ // TODO: Implement doQuery() method.
+ }
+}
+
+class FakeDatabaseUpdater extends DatabaseUpdater {
+ function __construct( $db ) {
+ $this->db = $db;
+ self::$updateCounter = 0;
+ }
+
+ /**
+ * Get an array of updates to perform on the database. Should return a
+ * multi-dimensional array. The main key is the MediaWiki version (1.12,
+ * 1.13...) with the values being arrays of updates, identical to how
+ * updaters.inc did it (for now)
+ *
+ * @return array
+ */
+ protected function getCoreUpdateList() {
+ return array();
+ }
+
+ public function canUseNewUpdatelog() {
+ return true;
+ }
+
+ public function setAppliedUpdates( $version, $updates = array() ) {
+ parent::setAppliedUpdates( $version, $updates );
+ }
+}
diff --git a/tests/phpunit/includes/installer/InstallDocFormatterTest.php b/tests/phpunit/includes/installer/InstallDocFormatterTest.php
index 064d5185..724f0c88 100644
--- a/tests/phpunit/includes/installer/InstallDocFormatterTest.php
+++ b/tests/phpunit/includes/installer/InstallDocFormatterTest.php
@@ -34,6 +34,21 @@ class InstallDocFormatterTest extends MediaWikiTestCase {
array( ':One indentation', "\tOne indentation", 'Replacing a single \t' ),
array( '::Two indentations', "\t\tTwo indentations", 'Replacing 2 x \t' ),
+ # Transform 'T123' links
+ array(
+ '<span class="config-plainlink">[https://phabricator.wikimedia.org/T123 T123]</span>',
+ 'T123', 'Testing T123 links' ),
+ array(
+ 'bug <span class="config-plainlink">[https://phabricator.wikimedia.org/T123 T123]</span>',
+ 'bug T123', 'Testing bug T123 links' ),
+ array(
+ '(<span class="config-plainlink">[https://phabricator.wikimedia.org/T987654 T987654]</span>)',
+ '(T987654)', 'Testing (T987654) links' ),
+
+ # "Tabc" shouldn't work
+ array( 'Tfoobar', 'Tfoobar', "Don't match T followed by non-digits" ),
+ array( 'T!!fakefake!!', 'T!!fakefake!!', "Don't match T followed by non-digits" ),
+
# Transform 'bug 123' links
array(
'<span class="config-plainlink">[https://bugzilla.wikimedia.org/123 bug 123]</span>',
diff --git a/tests/phpunit/includes/jobqueue/JobQueueTest.php b/tests/phpunit/includes/jobqueue/JobQueueTest.php
index 69e40068..ea1a4f63 100644
--- a/tests/phpunit/includes/jobqueue/JobQueueTest.php
+++ b/tests/phpunit/includes/jobqueue/JobQueueTest.php
@@ -247,8 +247,13 @@ class JobQueueTest extends MediaWikiTestCase {
$this->assertNull( $queue->push( $this->newJob( 0, $root1 ) ), "Push worked ($desc)" );
}
$queue->deduplicateRootJob( $this->newJob( 0, $root1 ) );
- sleep( 1 ); // roo job timestamp will increase
- $root2 = Job::newRootJobParams( "nulljobspam:$id" ); // task ID/timestamp
+
+ $root2 = $root1;
+ # Add a second to UNIX epoch and format back to TS_MW
+ $root2_ts = strtotime( $root2['rootJobTimestamp'] );
+ $root2_ts++;
+ $root2['rootJobTimestamp'] = wfTimestamp( TS_MW, $root2_ts );
+
$this->assertNotEquals( $root1['rootJobTimestamp'], $root2['rootJobTimestamp'],
"Root job signatures have different timestamps." );
for ( $i = 0; $i < 5; ++$i ) {
diff --git a/tests/phpunit/includes/jobqueue/JobTest.php b/tests/phpunit/includes/jobqueue/JobTest.php
new file mode 100644
index 00000000..93069d2e
--- /dev/null
+++ b/tests/phpunit/includes/jobqueue/JobTest.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @author Adam Shorland
+ */
+class JobTest extends MediaWikiTestCase {
+
+ /**
+ * @dataProvider provideTestToString
+ *
+ * @param Job $job
+ * @param string $expected
+ *
+ * @covers Job::toString
+ */
+ public function testToString( $job, $expected ) {
+ $this->assertEquals( $expected, $job->toString() );
+ }
+
+ public function provideTestToString() {
+ $mockToStringObj = $this->getMock( 'stdClass', array( '__toString' ) );
+ $mockToStringObj->expects( $this->any() )
+ ->method( '__toString' )
+ ->will( $this->returnValue( '{STRING_OBJ_VAL}' ) );
+
+ return array(
+ array(
+ $this->getMockJob( false ),
+ 'someCommand '
+ ),
+ array(
+ $this->getMockJob( array( 'key' => 'val' ) ),
+ 'someCommand key=val'
+ ),
+ array(
+ $this->getMockJob( array( 'key' => array( 'inkey' => 'inval' ) ) ),
+ 'someCommand key={"inkey":"inval"}'
+ ),
+ array(
+ $this->getMockJob( array( 'val1' ) ),
+ 'someCommand 0=val1'
+ ),
+ array(
+ $this->getMockJob( array( 'val1', 'val2' ) ),
+ 'someCommand 0=val1 1=val2'
+ ),
+ array(
+ $this->getMockJob( array( new stdClass() ) ),
+ 'someCommand 0=object(stdClass)'
+ ),
+ array(
+ $this->getMockJob( array( $mockToStringObj ) ),
+ 'someCommand 0={STRING_OBJ_VAL}'
+ ),
+ );
+ }
+
+ public function getMockJob( $params ) {
+ $mock = $this->getMockForAbstractClass(
+ 'Job',
+ array( 'someCommand', new Title(), $params ),
+ 'SomeJob'
+ );
+ return $mock;
+ }
+
+}
diff --git a/tests/phpunit/includes/json/FormatJsonTest.php b/tests/phpunit/includes/json/FormatJsonTest.php
index af68ab03..f0ac6acc 100644
--- a/tests/phpunit/includes/json/FormatJsonTest.php
+++ b/tests/phpunit/includes/json/FormatJsonTest.php
@@ -169,12 +169,30 @@ class FormatJsonTest extends MediaWikiTestCase {
$this->assertEquals( $value, $st->getValue() );
}
+ /**
+ * Test data for testParseTryFixing.
+ *
+ * Some PHP interpreters use json-c rather than the JSON.org cannonical
+ * 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
+ * object delarations among other things, so our JSON_ERROR_SYNTAX rescue
+ * block is not always triggered. It however isn't lenient in exactly the
+ * same ways as our TRY_FIXING mode, so the assertions in this test are
+ * a bit more complicated than they ideally would be:
+ *
+ * Optional third argument: true if json-c parses the value without
+ * intervention, false otherwise. Defaults to true.
+ *
+ * Optional fourth argument: expected cannonical JSON serialization of
+ * json-c parsed result. Defaults to the second argument's value.
+ */
public static function provideParseTryFixing() {
return array(
- array( "[,]", '[]' ),
- array( "[ , ]", '[]' ),
+ array( "[,]", '[]', false ),
+ array( "[ , ]", '[]', false ),
array( "[ , }", false ),
- array( '[1],', false ),
+ array( '[1],', false, true, '[1]' ),
array( "[1,]", '[1]' ),
array( "[1\n,]", '[1]' ),
array( "[1,\n]", '[1]' ),
@@ -182,24 +200,44 @@ class FormatJsonTest extends MediaWikiTestCase {
array( "[1\n,\n]\n", '[1]' ),
array( '["a,",]', '["a,"]' ),
array( "[[1,]\n,[2,\n],[3\n,]]", '[[1],[2],[3]]' ),
- array( '[[1,],[2,],[3,]]', false ), // I wish we could parse this, but would need quote parsing
- array( '[1,,]', false ),
+ // I wish we could parse this, but would need quote parsing
+ array( '[[1,],[2,],[3,]]', false, true, '[[1],[2],[3]]' ),
+ array( '[1,,]', false, false, '[1]' ),
);
}
/**
* @dataProvider provideParseTryFixing
* @param string $value
- * @param string|bool $expected
+ * @param string|bool $expected Expected result with strict parser
+ * @param bool $jsoncParses Will json-c parse this value without TRY_FIXING?
+ * @param string|bool $expectedJsonc Expected result with lenient parser
+ * if different from the strict expectation
*/
- public function testParseTryFixing( $value, $expected ) {
+ public function testParseTryFixing(
+ $value, $expected,
+ $jsoncParses = true, $expectedJsonc = null
+ ) {
+ // PHP5 results are always expected to have isGood() === false
+ $expectedGoodStatus = false;
+
+ // Check to see if json parser allows trailing commas
+ if ( json_decode( '[1,]' ) !== null ) {
+ // Use json-c specific expected result if provided
+ $expected = ( $expectedJsonc === null ) ? $expected : $expectedJsonc;
+ // If json-c parses the value natively, expect isGood() === true
+ $expectedGoodStatus = $jsoncParses;
+ }
+
$st = FormatJson::parse( $value, FormatJson::TRY_FIXING );
$this->assertType( 'Status', $st );
if ( $expected === false ) {
- $this->assertFalse( $st->isOK() );
+ $this->assertFalse( $st->isOK(), 'Expected isOK() == false' );
} else {
- $this->assertFalse( $st->isGood() );
- $this->assertTrue( $st->isOK() );
+ $this->assertSame( $expectedGoodStatus, $st->isGood(),
+ 'Expected isGood() == ' . ( $expectedGoodStatus ? 'true' : 'false' )
+ );
+ $this->assertTrue( $st->isOK(), 'Expected isOK == true' );
$val = FormatJson::encode( $st->getValue(), false, FormatJson::ALL_OK );
$this->assertEquals( $expected, $val );
}
@@ -222,6 +260,64 @@ class FormatJsonTest extends MediaWikiTestCase {
$this->assertFalse( $st->isOK() );
}
+ public function provideStripComments() {
+ return array(
+ array( '{"a":"b"}', '{"a":"b"}' ),
+ array( "{\"a\":\"b\"}\n", "{\"a\":\"b\"}\n" ),
+ array( '/*c*/{"c":"b"}', '{"c":"b"}' ),
+ array( '{"a":"c"}/*c*/', '{"a":"c"}' ),
+ array( '/*c//d*/{"c":"b"}', '{"c":"b"}' ),
+ array( '{/*c*/"c":"b"}', '{"c":"b"}' ),
+ array( "/*\nc\r\n*/{\"c\":\"b\"}", '{"c":"b"}' ),
+ array( "//c\n{\"c\":\"b\"}", '{"c":"b"}' ),
+ array( "//c\r\n{\"c\":\"b\"}", '{"c":"b"}' ),
+ array( '{"a":"c"}//c', '{"a":"c"}' ),
+ array( "{\"a-c\"://c\n\"b\"}", '{"a-c":"b"}' ),
+ array( '{"/*a":"b"}', '{"/*a":"b"}' ),
+ array( '{"a":"//b"}', '{"a":"//b"}' ),
+ array( '{"a":"b/*c*/"}', '{"a":"b/*c*/"}' ),
+ array( "{\"\\\"/*a\":\"b\"}", "{\"\\\"/*a\":\"b\"}" ),
+ array( '', '' ),
+ array( '/*c', '' ),
+ array( '//c', '' ),
+ array( '"http://example.com"', '"http://example.com"' ),
+ array( "\0", "\0" ),
+ array( '"Blåbærsyltetøy"', '"Blåbærsyltetøy"' ),
+ );
+ }
+
+ /**
+ * @covers FormatJson::stripComments
+ * @dataProvider provideStripComments
+ * @param string $json
+ * @param string $expect
+ */
+ public function testStripComments( $json, $expect ) {
+ $this->assertSame( $expect, FormatJson::stripComments( $json ) );
+ }
+
+ public function provideParseStripComments() {
+ return array(
+ array( '/* blah */true', true ),
+ array( "// blah \ntrue", true ),
+ array( '[ "a" , /* blah */ "b" ]', array( 'a', 'b' ) ),
+ );
+ }
+
+ /**
+ * @covers FormatJson::parse
+ * @covers FormatJson::stripComments
+ * @dataProvider provideParseStripComments
+ * @param string $json
+ * @param mixed $expect
+ */
+ public function testParseStripComments( $json, $expect ) {
+ $st = FormatJson::parse( $json, FormatJson::STRIP_COMMENTS );
+ $this->assertType( 'Status', $st );
+ $this->assertTrue( $st->isGood() );
+ $this->assertEquals( $expect, $st->getValue() );
+ }
+
/**
* Generate a set of test cases for a particular combination of encoder options.
*
diff --git a/tests/phpunit/includes/ArrayUtilsTest.php b/tests/phpunit/includes/libs/ArrayUtilsTest.php
index 7bdb1ca4..b5ea7b72 100644
--- a/tests/phpunit/includes/ArrayUtilsTest.php
+++ b/tests/phpunit/includes/libs/ArrayUtilsTest.php
@@ -5,7 +5,7 @@
* @group Database
*/
-class ArrayUtilsTest extends MediaWikiTestCase {
+class ArrayUtilsTest extends PHPUnit_Framework_TestCase {
private $search;
/**
diff --git a/tests/phpunit/includes/libs/CSSMinTest.php b/tests/phpunit/includes/libs/CSSMinTest.php
index 43c50869..6142f967 100644
--- a/tests/phpunit/includes/libs/CSSMinTest.php
+++ b/tests/phpunit/includes/libs/CSSMinTest.php
@@ -141,15 +141,57 @@ class CSSMinTest extends MediaWikiTestCase {
);
}
+ public static function provideIsRemoteUrl() {
+ return array(
+ array( true, 'http://localhost/w/red.gif?123' ),
+ array( true, 'https://example.org/x.png' ),
+ array( true, '//example.org/x.y.z/image.png' ),
+ array( true, '//localhost/styles.css?query=yes' ),
+ array( true, 'data:image/gif;base64,R0lGODlhAQABAIAAAP8AADAAACwAAAAAAQABAAACAkQBADs=' ),
+ array( false, 'x.gif' ),
+ array( false, '/x.gif' ),
+ array( false, './x.gif' ),
+ array( false, '../x.gif' ),
+ );
+ }
+
+ /**
+ * @dataProvider provideIsRemoteUrl
+ * @cover CSSMin::isRemoteUrl
+ */
+ public function testIsRemoteUrl( $expect, $url ) {
+ $this->assertEquals( CSSMin::isRemoteUrl( $url ), $expect );
+ }
+
+ public static function provideIsLocalUrls() {
+ return array(
+ array( false, 'x.gif' ),
+ array( true, '/x.gif' ),
+ array( false, './x.gif' ),
+ array( false, '../x.gif' ),
+ );
+ }
+
+ /**
+ * @dataProvider provideIsLocalUrls
+ * @cover CSSMin::isLocalUrl
+ */
+ public function testIsLocalUrl( $expect, $url ) {
+ $this->assertEquals( CSSMin::isLocalUrl( $url ), $expect );
+ }
+
public static function provideRemapRemappingCases() {
// red.gif and green.gif are one-pixel 35-byte GIFs.
// large.png is a 35K PNG that should be non-embeddable.
// Full paths start with http://localhost/w/.
// Timestamps in output are replaced with 'timestamp'.
- // data: URIs for red.gif and green.gif
+ // data: URIs for red.gif, green.gif, circle.svg
$red = 'data:image/gif;base64,R0lGODlhAQABAIAAAP8AADAAACwAAAAAAQABAAACAkQBADs=';
$green = 'data:image/gif;base64,R0lGODlhAQABAIAAAACAADAAACwAAAAAAQABAAACAkQBADs=';
+ $svg = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A'
+ . '%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%228%22%20height%3D'
+ . '%228%22%3E%0A%3Ccircle%20cx%3D%224%22%20cy%3D%224%22%20r%3D%222%22%2F%3E%0A%3C%2Fsvg%3E%0A';
return array(
array(
@@ -234,6 +276,11 @@ class CSSMinTest extends MediaWikiTestCase {
"foo { background: url(http://localhost/w/large.png?timestamp); }",
),
array(
+ 'SVG files are embedded without base64 encoding and unnecessary IE 6 and 7 fallback',
+ 'foo { /* @embed */ background: url(circle.svg); }',
+ "foo { background: url($svg); }",
+ ),
+ array(
'Two regular files in one rule',
'foo { background: url(red.gif), url(green.gif); }',
'foo { background: url(http://localhost/w/red.gif?timestamp), '
diff --git a/tests/phpunit/includes/libs/DeferredStringifierTest.php b/tests/phpunit/includes/libs/DeferredStringifierTest.php
new file mode 100644
index 00000000..8b7610ae
--- /dev/null
+++ b/tests/phpunit/includes/libs/DeferredStringifierTest.php
@@ -0,0 +1,50 @@
+<?php
+
+class DeferredStringifierTest extends PHPUnit_Framework_TestCase {
+
+ /**
+ * @covers DeferredStringifier
+ * @dataProvider provideToString
+ */
+ public function testToString( $params, $expected ) {
+ $class = new ReflectionClass( 'DeferredStringifier' );
+ $ds = $class->newInstanceArgs( $params );
+ $this->assertEquals( $expected, (string)$ds );
+ }
+
+ public static function provideToString() {
+ return array(
+ // No args
+ array(
+ array(
+ function() {
+ return 'foo';
+ }
+ ),
+ 'foo'
+ ),
+ // Has args
+ array(
+ array(
+ function( $i ) {
+ return $i;
+ },
+ 'bar'
+ ),
+ 'bar'
+ ),
+ );
+ }
+
+ /**
+ * Verify that the callback is not called if
+ * it is never converted to a string
+ */
+ public function testCallbackNotCalled() {
+ $ds = new DeferredStringifier( function() {
+ throw new Exception( 'This should not be reached!' );
+ } );
+ // No exception was thrown
+ $this->assertTrue( true );
+ }
+}
diff --git a/tests/phpunit/includes/libs/GenericArrayObjectTest.php b/tests/phpunit/includes/libs/GenericArrayObjectTest.php
index 4911f73a..315bc7ed 100644
--- a/tests/phpunit/includes/libs/GenericArrayObjectTest.php
+++ b/tests/phpunit/includes/libs/GenericArrayObjectTest.php
@@ -24,10 +24,9 @@
* @ingroup Test
* @group GenericArrayObject
*
- * @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
-abstract class GenericArrayObjectTest extends MediaWikiTestCase {
+abstract class GenericArrayObjectTest extends PHPUnit_Framework_TestCase {
/**
* Returns objects that can serve as elements in the concrete
diff --git a/tests/phpunit/includes/libs/HashRingTest.php b/tests/phpunit/includes/libs/HashRingTest.php
index 68dfea1f..b51eb3f4 100644
--- a/tests/phpunit/includes/libs/HashRingTest.php
+++ b/tests/phpunit/includes/libs/HashRingTest.php
@@ -3,7 +3,7 @@
/**
* @group HashRing
*/
-class HashRingTest extends MediaWikiTestCase {
+class HashRingTest extends PHPUnit_Framework_TestCase {
/**
* @covers HashRing
*/
diff --git a/tests/phpunit/includes/libs/IEUrlExtensionTest.php b/tests/phpunit/includes/libs/IEUrlExtensionTest.php
index b7071230..e96953ee 100644
--- a/tests/phpunit/includes/libs/IEUrlExtensionTest.php
+++ b/tests/phpunit/includes/libs/IEUrlExtensionTest.php
@@ -5,7 +5,7 @@
* @todo tests below for findIE6Extension should be split into...
* ...a dataprovider and test method.
*/
-class IEUrlExtensionTest extends MediaWikiTestCase {
+class IEUrlExtensionTest extends PHPUnit_Framework_TestCase {
/**
* @covers IEUrlExtension::findIE6Extension
*/
diff --git a/tests/phpunit/includes/libs/IPSetTest.php b/tests/phpunit/includes/libs/IPSetTest.php
index d4e5214a..5bbacef4 100644
--- a/tests/phpunit/includes/libs/IPSetTest.php
+++ b/tests/phpunit/includes/libs/IPSetTest.php
@@ -3,7 +3,7 @@
/**
* @group IPSet
*/
-class IPSetTest extends MediaWikiTestCase {
+class IPSetTest extends PHPUnit_Framework_TestCase {
/**
* Provides test cases for IPSetTest::testIPSet
*
diff --git a/tests/phpunit/includes/libs/JavaScriptMinifierTest.php b/tests/phpunit/includes/libs/JavaScriptMinifierTest.php
index c8795b2e..149a28c1 100644
--- a/tests/phpunit/includes/libs/JavaScriptMinifierTest.php
+++ b/tests/phpunit/includes/libs/JavaScriptMinifierTest.php
@@ -1,6 +1,6 @@
<?php
-class JavaScriptMinifierTest extends MediaWikiTestCase {
+class JavaScriptMinifierTest extends PHPUnit_Framework_TestCase {
public static function provideCases() {
return array(
@@ -164,7 +164,7 @@ class JavaScriptMinifierTest extends MediaWikiTestCase {
);
}
- public static function provideBug32548() {
+ public static function provideExponentLineBreaking() {
return array(
array(
// This one gets interpreted all together by the prior code;
@@ -183,14 +183,13 @@ class JavaScriptMinifierTest extends MediaWikiTestCase {
}
/**
- * @dataProvider provideBug32548
+ * @dataProvider provideExponentLineBreaking
* @covers JavaScriptMinifier::minify
- * @todo give this test a real name explaining what is being tested here
*/
- public function testBug32548Exponent( $num ) {
+ public function testExponentLineBreaking( $num ) {
// Long line breaking was being incorrectly done between the base and
// exponent part of a number, causing a syntax error. The line should
- // instead break at the start of the number.
+ // instead break at the start of the number. (T34548)
$prefix = 'var longVarName' . str_repeat( '_', 973 ) . '=';
$suffix = ',shortVarName=0;';
diff --git a/tests/phpunit/includes/libs/MWMessagePackTest.php b/tests/phpunit/includes/libs/MWMessagePackTest.php
index f80f78df..ec145836 100644
--- a/tests/phpunit/includes/libs/MWMessagePackTest.php
+++ b/tests/phpunit/includes/libs/MWMessagePackTest.php
@@ -3,7 +3,7 @@
* PHP Unit tests for MWMessagePack
* @covers MWMessagePack
*/
-class MWMessagePackTest extends MediaWikiTestCase {
+class MWMessagePackTest extends PHPUnit_Framework_TestCase {
/**
* Provides test cases for MWMessagePackTest::testMessagePack
diff --git a/tests/phpunit/includes/libs/ObjectFactoryTest.php b/tests/phpunit/includes/libs/ObjectFactoryTest.php
new file mode 100644
index 00000000..92207325
--- /dev/null
+++ b/tests/phpunit/includes/libs/ObjectFactoryTest.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
+
+ /**
+ * @covers ObjectFactory::getObjectFromSpec
+ */
+ public function testClosureExpansionDisabled() {
+ $obj = ObjectFactory::getObjectFromSpec( array(
+ 'class' => 'ObjectFactoryTest_Fixture',
+ 'args' => array( function (){ return 'unwrapped'; }, ),
+ 'closure_expansion' => false,
+ ) );
+ $this->assertInstanceOf( 'Closure', $obj->args[0] );
+ $this->assertSame( 'unwrapped', $obj->args[0]() );
+ }
+
+ /**
+ * @covers ObjectFactory::getObjectFromSpec
+ */
+ public function testClosureExpansionEnabled() {
+ $obj = ObjectFactory::getObjectFromSpec( array(
+ 'class' => 'ObjectFactoryTest_Fixture',
+ 'args' => array( function (){ return 'unwrapped'; }, ),
+ 'closure_expansion' => true,
+ ) );
+ $this->assertInternalType( 'string', $obj->args[0] );
+ $this->assertSame( 'unwrapped', $obj->args[0] );
+
+ $obj = ObjectFactory::getObjectFromSpec( array(
+ 'class' => 'ObjectFactoryTest_Fixture',
+ 'args' => array( function (){ return 'unwrapped'; }, ),
+ ) );
+ $this->assertInternalType( 'string', $obj->args[0] );
+ $this->assertSame( 'unwrapped', $obj->args[0] );
+ }
+}
+
+class ObjectFactoryTest_Fixture {
+ public $args;
+ public function __construct( /*...*/ ) { $this->args = func_get_args(); }
+}
diff --git a/tests/phpunit/includes/libs/ProcessCacheLRUTest.php b/tests/phpunit/includes/libs/ProcessCacheLRUTest.php
index 1a8a1e56..43001979 100644
--- a/tests/phpunit/includes/libs/ProcessCacheLRUTest.php
+++ b/tests/phpunit/includes/libs/ProcessCacheLRUTest.php
@@ -9,20 +9,20 @@
*
* @group Cache
*/
-class ProcessCacheLRUTest extends MediaWikiTestCase {
+class ProcessCacheLRUTest extends PHPUnit_Framework_TestCase {
/**
* Helper to verify emptiness of a cache object.
* Compare against an array so we get the cache content difference.
*/
- function assertCacheEmpty( $cache, $msg = 'Cache should be empty' ) {
+ protected function assertCacheEmpty( $cache, $msg = 'Cache should be empty' ) {
$this->assertAttributeEquals( array(), 'cache', $cache, $msg );
}
/**
* Helper to fill a cache object passed by reference
*/
- function fillCache( &$cache, $numEntries ) {
+ protected function fillCache( &$cache, $numEntries ) {
// Fill cache with three values
for ( $i = 1; $i <= $numEntries; $i++ ) {
$cache->set( "cache-key-$i", "prop-$i", "value-$i" );
@@ -33,17 +33,17 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
* Generates an array of what would be expected in cache for a given cache
* size and a number of entries filled in sequentially
*/
- function getExpectedCache( $cacheMaxEntries, $entryToFill ) {
+ protected function getExpectedCache( $cacheMaxEntries, $entryToFill ) {
$expected = array();
if ( $entryToFill === 0 ) {
- # The cache is empty!
+ // The cache is empty!
return array();
} elseif ( $entryToFill <= $cacheMaxEntries ) {
- # Cache is not fully filled
+ // Cache is not fully filled
$firstKey = 1;
} else {
- # Cache overflowed
+ // Cache overflowed
$firstKey = 1 + $entryToFill - $cacheMaxEntries;
}
@@ -62,13 +62,16 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
public function testPhpUnitArrayEquality() {
$one = array( 'A' => 1, 'B' => 2 );
$two = array( 'B' => 2, 'A' => 1 );
- $this->assertEquals( $one, $two ); // ==
- $this->assertNotSame( $one, $two ); // ===
+ // ==
+ $this->assertEquals( $one, $two );
+ // ===
+ $this->assertNotSame( $one, $two );
}
/**
* @dataProvider provideInvalidConstructorArg
* @expectedException UnexpectedValueException
+ * @covers ProcessCacheLRU::__construct
*/
public function testConstructorGivenInvalidValue( $maxSize ) {
new ProcessCacheLRUTestable( $maxSize );
@@ -88,6 +91,11 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
);
}
+ /**
+ * @covers ProcessCacheLRU::get
+ * @covers ProcessCacheLRU::set
+ * @covers ProcessCacheLRU::het
+ */
public function testAddAndGetAKey() {
$oneCache = new ProcessCacheLRUTestable( 1 );
$this->assertCacheEmpty( $oneCache );
@@ -99,6 +107,10 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
$this->assertEquals( 'value1', $oneCache->get( 'cache-key', 'prop1' ) );
}
+ /**
+ * @covers ProcessCacheLRU::set
+ * @covers ProcessCacheLRU::get
+ */
public function testDeleteOldKey() {
$oneCache = new ProcessCacheLRUTestable( 1 );
$this->assertCacheEmpty( $oneCache );
@@ -113,6 +125,7 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
* a sequence of always different cache-keys. Meant to verify we correclty
* delete the older key.
*
+ * @covers ProcessCacheLRU::set
* @dataProvider provideCacheFilling
* @param int $cacheMaxEntries Maximum entry the created cache will hold
* @param int $entryToFill Number of entries to insert in the created cache.
@@ -136,14 +149,18 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
return array(
array( 1, 0 ),
array( 1, 1 ),
- array( 1, 2 ), # overflow
- array( 5, 33 ), # overflow
+ // overflow
+ array( 1, 2 ),
+ // overflow
+ array( 5, 33 ),
);
}
/**
* Create a cache with only one remaining entry then update
* the first inserted entry. Should bump it to the top.
+ *
+ * @covers ProcessCacheLRU::set
*/
public function testReplaceExistingKeyShouldBumpEntryToTop() {
$maxEntries = 3;
@@ -164,6 +181,11 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
);
}
+ /**
+ * @covers ProcessCacheLRU::get
+ * @covers ProcessCacheLRU::set
+ * @covers ProcessCacheLRU::het
+ */
public function testRecentlyAccessedKeyStickIn() {
$cache = new ProcessCacheLRUTestable( 2 );
$cache->set( 'first', 'prop1', 'value1' );
@@ -182,6 +204,9 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
* filled entry.
* Given a cache having 1,2,3 as key, updating 2 should bump 2 to
* the top of the queue with the new value: 1,3,2* (* = updated).
+ *
+ * @covers ProcessCacheLRU::set
+ * @covers ProcessCacheLRU::get
*/
public function testReplaceExistingKeyInAFullCacheShouldBumpToTop() {
$maxEntries = 3;
@@ -204,6 +229,9 @@ class ProcessCacheLRUTest extends MediaWikiTestCase {
);
}
+ /**
+ * @covers ProcessCacheLRU::set
+ */
public function testBumpExistingKeyToTop() {
$cache = new ProcessCacheLRUTestable( 3 );
$this->fillCache( $cache, 3 );
diff --git a/tests/phpunit/includes/libs/RunningStatTest.php b/tests/phpunit/includes/libs/RunningStatTest.php
index dc5db82c..edfaf162 100644
--- a/tests/phpunit/includes/libs/RunningStatTest.php
+++ b/tests/phpunit/includes/libs/RunningStatTest.php
@@ -3,7 +3,7 @@
* PHP Unit tests for RunningStat class.
* @covers RunningStat
*/
-class RunningStatTest extends MediaWikiTestCase {
+class RunningStatTest extends PHPUnit_Framework_TestCase {
public $points = array(
49.7168, 74.3804, 7.0115, 96.5769, 34.9458,
diff --git a/tests/phpunit/includes/utils/StringUtilsTest.php b/tests/phpunit/includes/libs/StringUtilsTest.php
index 0fdb8e15..7c24fae6 100644
--- a/tests/phpunit/includes/utils/StringUtilsTest.php
+++ b/tests/phpunit/includes/libs/StringUtilsTest.php
@@ -1,6 +1,6 @@
<?php
-class StringUtilsTest extends MediaWikiTestCase {
+class StringUtilsTest extends PHPUnit_Framework_TestCase {
/**
* This tests StringUtils::isUtf8 whenever we have the mbstring extension
diff --git a/tests/phpunit/includes/libs/XhprofTest.php b/tests/phpunit/includes/libs/XhprofTest.php
new file mode 100644
index 00000000..2440fc08
--- /dev/null
+++ b/tests/phpunit/includes/libs/XhprofTest.php
@@ -0,0 +1,320 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * @uses Xhprof
+ * @uses AutoLoader
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ * @since 1.25
+ */
+class XhprofTest extends PHPUnit_Framework_TestCase {
+
+ public function setUp() {
+ if ( !function_exists( 'xhprof_enable' ) ) {
+ $this->markTestSkipped( 'No xhprof support detected.' );
+ }
+ }
+
+ /**
+ * @covers Xhprof::splitKey
+ * @dataProvider provideSplitKey
+ */
+ public function testSplitKey( $key, $expect ) {
+ $this->assertSame( $expect, Xhprof::splitKey( $key ) );
+ }
+
+ public function provideSplitKey() {
+ return array(
+ array( 'main()', array( null, 'main()' ) ),
+ array( 'foo==>bar', array( 'foo', 'bar' ) ),
+ array( 'bar@1==>bar@2', array( 'bar@1', 'bar@2' ) ),
+ array( 'foo==>bar==>baz', array( 'foo', 'bar==>baz' ) ),
+ array( '==>bar', array( '', 'bar' ) ),
+ array( '', array( null, '' ) ),
+ );
+ }
+
+ /**
+ * @covers Xhprof::__construct
+ * @covers Xhprof::stop
+ * @covers Xhprof::getRawData
+ * @dataProvider provideRawData
+ */
+ public function testRawData( $flags, $keys ) {
+ $xhprof = new Xhprof( array( 'flags' => $flags ) );
+ $raw = $xhprof->getRawData();
+ $this->assertArrayHasKey( 'main()', $raw );
+ foreach ( $keys as $key ) {
+ $this->assertArrayHasKey( $key, $raw['main()'] );
+ }
+ }
+
+ public function provideRawData() {
+ $tests = array(
+ array( 0, array( 'ct', 'wt' ) ),
+ );
+
+ if ( defined( 'XHPROF_FLAGS_CPU' ) && defined( 'XHPROF_FLAGS_CPU' ) ) {
+ $tests[] = array( XHPROF_FLAGS_MEMORY, array(
+ 'ct', 'wt', 'mu', 'pmu',
+ ) );
+ $tests[] = array( XHPROF_FLAGS_CPU, array(
+ 'ct', 'wt', 'cpu',
+ ) );
+ $tests[] = array( XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU, array(
+ 'ct', 'wt', 'mu', 'pmu', 'cpu',
+ ) );
+ }
+
+ return $tests;
+ }
+
+ /**
+ * @covers Xhprof::pruneData
+ */
+ public function testInclude() {
+ $xhprof = $this->getXhprofFixture( array(
+ 'include' => array( 'main()' ),
+ ) );
+ $raw = $xhprof->getRawData();
+ $this->assertArrayHasKey( 'main()', $raw );
+ $this->assertArrayHasKey( 'main()==>foo', $raw );
+ $this->assertArrayHasKey( 'main()==>xhprof_disable', $raw );
+ $this->assertSame( 3, count( $raw ) );
+ }
+
+ /**
+ * Validate the structure of data returned by
+ * Xhprof::getInclusiveMetrics(). This acts as a guard against unexpected
+ * structural changes to the returned data in lieu of using a more heavy
+ * weight typed response object.
+ *
+ * @covers Xhprof::getInclusiveMetrics
+ */
+ public function testInclusiveMetricsStructure() {
+ $metricStruct = array(
+ 'ct' => 'int',
+ 'wt' => 'array',
+ 'cpu' => 'array',
+ 'mu' => 'array',
+ 'pmu' => 'array',
+ );
+ $statStruct = array(
+ 'total' => 'numeric',
+ 'min' => 'numeric',
+ 'mean' => 'numeric',
+ 'max' => 'numeric',
+ 'variance' => 'numeric',
+ 'percent' => 'numeric',
+ );
+
+ $xhprof = $this->getXhprofFixture();
+ $metrics = $xhprof->getInclusiveMetrics();
+
+ foreach ( $metrics as $name => $metric ) {
+ $this->assertArrayStructure( $metricStruct, $metric );
+
+ foreach ( $metricStruct as $key => $type ) {
+ if ( $type === 'array' ) {
+ $this->assertArrayStructure( $statStruct, $metric[$key] );
+ if ( $name === 'main()' ) {
+ $this->assertEquals( 100, $metric[$key]['percent'] );
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Validate the structure of data returned by
+ * Xhprof::getCompleteMetrics(). This acts as a guard against unexpected
+ * structural changes to the returned data in lieu of using a more heavy
+ * weight typed response object.
+ *
+ * @covers Xhprof::getCompleteMetrics
+ */
+ public function testCompleteMetricsStructure() {
+ $metricStruct = array(
+ 'ct' => 'int',
+ 'wt' => 'array',
+ 'cpu' => 'array',
+ 'mu' => 'array',
+ 'pmu' => 'array',
+ 'calls' => 'array',
+ 'subcalls' => 'array',
+ );
+ $statsMetrics = array( 'wt', 'cpu', 'mu', 'pmu' );
+ $statStruct = array(
+ 'total' => 'numeric',
+ 'min' => 'numeric',
+ 'mean' => 'numeric',
+ 'max' => 'numeric',
+ 'variance' => 'numeric',
+ 'percent' => 'numeric',
+ 'exclusive' => 'numeric',
+ );
+
+ $xhprof = $this->getXhprofFixture();
+ $metrics = $xhprof->getCompleteMetrics();
+
+ foreach ( $metrics as $name => $metric ) {
+ $this->assertArrayStructure( $metricStruct, $metric, $name );
+
+ foreach ( $metricStruct as $key => $type ) {
+ if ( in_array( $key, $statsMetrics ) ) {
+ $this->assertArrayStructure(
+ $statStruct, $metric[$key], $key
+ );
+ $this->assertLessThanOrEqual(
+ $metric[$key]['total'], $metric[$key]['exclusive']
+ );
+ }
+ }
+ }
+ }
+
+ /**
+ * @covers Xhprof::getCallers
+ * @covers Xhprof::getCallees
+ * @uses Xhprof
+ */
+ public function testEdges() {
+ $xhprof = $this->getXhprofFixture();
+ $this->assertSame( array(), $xhprof->getCallers( 'main()' ) );
+ $this->assertSame( array( 'foo', 'xhprof_disable' ),
+ $xhprof->getCallees( 'main()' )
+ );
+ $this->assertSame( array( 'main()' ),
+ $xhprof->getCallers( 'foo' )
+ );
+ $this->assertSame( array(), $xhprof->getCallees( 'strlen' ) );
+ }
+
+ /**
+ * @covers Xhprof::getCriticalPath
+ * @uses Xhprof
+ */
+ public function testCriticalPath() {
+ $xhprof = $this->getXhprofFixture();
+ $path = $xhprof->getCriticalPath();
+
+ $last = null;
+ foreach ( $path as $key => $value ) {
+ list( $func, $call ) = Xhprof::splitKey( $key );
+ $this->assertSame( $last, $func );
+ $last = $call;
+ }
+ $this->assertSame( $last, 'bar@1' );
+ }
+
+ /**
+ * Get an Xhprof instance that has been primed with a set of known testing
+ * data. Tests for the Xhprof class should laregly be concerned with
+ * evaluating the manipulations of the data collected by xhprof rather
+ * than the data collection process itself.
+ *
+ * The returned Xhprof instance primed will be with a data set created by
+ * running this trivial program using the PECL xhprof implementation:
+ * @code
+ * function bar( $x ) {
+ * if ( $x > 0 ) {
+ * bar($x - 1);
+ * }
+ * }
+ * function foo() {
+ * for ( $idx = 0; $idx < 2; $idx++ ) {
+ * bar( $idx );
+ * $x = strlen( 'abc' );
+ * }
+ * }
+ * xhprof_enable( XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY );
+ * foo();
+ * $x = xhprof_disable();
+ * var_export( $x );
+ * @endcode
+ *
+ * @return Xhprof
+ */
+ protected function getXhprofFixture( array $opts = array() ) {
+ $xhprof = new Xhprof( $opts );
+ $xhprof->loadRawData( array (
+ 'foo==>bar' => array (
+ 'ct' => 2,
+ 'wt' => 57,
+ 'cpu' => 92,
+ 'mu' => 1896,
+ 'pmu' => 0,
+ ),
+ 'foo==>strlen' => array (
+ 'ct' => 2,
+ 'wt' => 21,
+ 'cpu' => 141,
+ 'mu' => 752,
+ 'pmu' => 0,
+ ),
+ 'bar==>bar@1' => array (
+ 'ct' => 1,
+ 'wt' => 18,
+ 'cpu' => 19,
+ 'mu' => 752,
+ 'pmu' => 0,
+ ),
+ 'main()==>foo' => array (
+ 'ct' => 1,
+ 'wt' => 304,
+ 'cpu' => 307,
+ 'mu' => 4008,
+ 'pmu' => 0,
+ ),
+ 'main()==>xhprof_disable' => array (
+ 'ct' => 1,
+ 'wt' => 8,
+ 'cpu' => 10,
+ 'mu' => 768,
+ 'pmu' => 392,
+ ),
+ 'main()' => array (
+ 'ct' => 1,
+ 'wt' => 353,
+ 'cpu' => 351,
+ 'mu' => 6112,
+ 'pmu' => 1424,
+ ),
+ ) );
+ return $xhprof;
+ }
+
+ /**
+ * Assert that the given array has the described structure.
+ *
+ * @param array $struct Array of key => type mappings
+ * @param array $actual Array to check
+ * @param string $label
+ */
+ protected function assertArrayStructure( $struct, $actual, $label = null ) {
+ $this->assertInternalType( 'array', $actual, $label );
+ $this->assertCount( count($struct), $actual, $label );
+ foreach ( $struct as $key => $type ) {
+ $this->assertArrayHasKey( $key, $actual );
+ $this->assertInternalType( $type, $actual[$key] );
+ }
+ }
+}
diff --git a/tests/phpunit/includes/XmlTypeCheckTest.php b/tests/phpunit/includes/libs/XmlTypeCheckTest.php
index 6ad97fd4..f0ba934e 100644
--- a/tests/phpunit/includes/XmlTypeCheckTest.php
+++ b/tests/phpunit/includes/libs/XmlTypeCheckTest.php
@@ -5,7 +5,7 @@
* @group Xml
* @covers XMLTypeCheck
*/
-class XmlTypeCheckTest extends MediaWikiTestCase {
+class XmlTypeCheckTest extends PHPUnit_Framework_TestCase {
const WELL_FORMED_XML = "<root><child /></root>";
const MAL_FORMED_XML = "<root><child /></error>";
const XML_WITH_PIH = '<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/w/index.php"?><svg><child /></svg>';
diff --git a/tests/phpunit/includes/libs/composer/ComposerJsonTest.php b/tests/phpunit/includes/libs/composer/ComposerJsonTest.php
new file mode 100644
index 00000000..0c58b65a
--- /dev/null
+++ b/tests/phpunit/includes/libs/composer/ComposerJsonTest.php
@@ -0,0 +1,57 @@
+<?php
+
+class ComposerJsonTest extends MediaWikiTestCase {
+
+ private $json, $json2;
+
+ public function setUp() {
+ parent::setUp();
+ global $IP;
+ $this->json = "$IP/tests/phpunit/data/composer/composer.json";
+ $this->json2 = "$IP/tests/phpunit/data/composer/new-composer.json";
+ }
+
+ public static function provideGetHash() {
+ return array(
+ array( 'json', 'cc6e7fc565b246cb30b0cac103a2b31e' ),
+ array( 'json2', '19921dd1fc457f1b00561da932432001' ),
+ );
+ }
+
+ /**
+ * @dataProvider provideGetHash
+ * @covers ComposerJson::getHash
+ */
+ public function testIsHashUpToDate( $file, $expected ) {
+ $json = new ComposerJson( $this->$file );
+ $this->assertEquals( $expected, $json->getHash() );
+ }
+
+ /**
+ * @covers ComposerJson::getRequiredDependencies
+ */
+ public function testGetRequiredDependencies() {
+ $json = new ComposerJson( $this->json );
+ $this->assertArrayEquals( array(
+ 'cdb/cdb' => '1.0.0',
+ 'cssjanus/cssjanus' => '1.1.1',
+ 'leafo/lessphp' => '0.5.0',
+ 'psr/log' => '1.0.0',
+ ), $json->getRequiredDependencies(), false, true );
+ }
+
+ public static function provideNormalizeVersion() {
+ return array(
+ array( 'v1.0.0', '1.0.0' ),
+ array( '0.0.5', '0.0.5' ),
+ );
+ }
+
+ /**
+ * @dataProvider provideNormalizeVersion
+ * @covers ComposerJson::normalizeVersion
+ */
+ public function testNormalizeVersion( $input, $expected ) {
+ $this->assertEquals( $expected, ComposerJson::normalizeVersion( $input ) );
+ }
+}
diff --git a/tests/phpunit/includes/libs/composer/ComposerLockTest.php b/tests/phpunit/includes/libs/composer/ComposerLockTest.php
new file mode 100644
index 00000000..b5fd5f6e
--- /dev/null
+++ b/tests/phpunit/includes/libs/composer/ComposerLockTest.php
@@ -0,0 +1,62 @@
+<?php
+
+class ComposerLockTest extends MediaWikiTestCase {
+
+ private $lock;
+
+ public function setUp() {
+ parent::setUp();
+ global $IP;
+ $this->lock = "$IP/tests/phpunit/data/composer/composer.lock";
+ }
+
+ /**
+ * @covers ComposerLock::getHash
+ */
+ public function testGetHash() {
+ $lock = new ComposerLock( $this->lock );
+ $this->assertEquals( 'a3bb80b0ac4c4a31e52574d48c032923', $lock->getHash() );
+ }
+
+ /**
+ * @covers ComposerLock::getInstalledDependencies
+ */
+ public function testGetInstalledDependencies() {
+ $lock = new ComposerLock( $this->lock );
+ $this->assertArrayEquals( array(
+ 'wikimedia/cdb' => array(
+ 'version' => '1.0.1',
+ 'type' => 'library',
+ ),
+ 'cssjanus/cssjanus' => array(
+ 'version' => '1.1.1',
+ 'type' => 'library',
+ ),
+ 'leafo/lessphp' => array(
+ 'version' => '0.5.0',
+ 'type' => 'library',
+ ),
+ 'psr/log' => array(
+ 'version' => '1.0.0',
+ 'type' => 'library',
+ ),
+ 'oojs/oojs-ui' => array(
+ 'version' => '0.6.0',
+ 'type' => 'library',
+ ),
+ 'composer/installers' => array(
+ 'version' => '1.0.19',
+ 'type' => 'composer-installer',
+ ),
+ 'mediawiki/translate' => array(
+ 'version' => '2014.12',
+ 'type' => 'mediawiki-extension',
+ ),
+ 'mediawiki/universal-language-selector' => array(
+ 'version' => '2014.12',
+ 'type' => 'mediawiki-extension',
+ ),
+ ), $lock->getInstalledDependencies(), false, true );
+ }
+
+}
diff --git a/tests/phpunit/includes/logging/LogFormatterTest.php b/tests/phpunit/includes/logging/LogFormatterTest.php
index 6210d098..515990e6 100644
--- a/tests/phpunit/includes/logging/LogFormatterTest.php
+++ b/tests/phpunit/includes/logging/LogFormatterTest.php
@@ -239,4 +239,57 @@ class LogFormatterTest extends MediaWikiLangTestCase {
$this->assertEquals( $comment, $formatter->getComment() );
}
+
+ /**
+ * @dataProvider provideApiParamFormatting
+ * @covers LogFormatter::formatParametersForApi
+ * @covers LogFormatter::formatParameterValueForApi
+ */
+ public function testApiParamFormatting( $key, $value, $expected ) {
+ $entry = $this->newLogEntry( 'param', array( $key => $value ) );
+ $formatter = LogFormatter::newFromEntry( $entry );
+ $formatter->setContext( $this->context );
+
+ ApiResult::setIndexedTagName( $expected, 'param' );
+ ApiResult::setArrayType( $expected, 'assoc' );
+
+ $this->assertEquals( $expected, $formatter->formatParametersForApi() );
+ }
+
+ public static function provideApiParamFormatting() {
+ return array(
+ array( 0, 'value', array( 'value' ) ),
+ array( 'named', 'value', array( 'named' => 'value' ) ),
+ array( '::key', 'value', array( 'key' => 'value' ) ),
+ array( '4::key', 'value', array( 'key' => 'value' ) ),
+ array( '4:raw:key', 'value', array( 'key' => 'value' ) ),
+ array( '4:plain:key', 'value', array( 'key' => 'value' ) ),
+ array( '4:bool:key', '1', array( 'key' => true ) ),
+ array( '4:bool:key', '0', array( 'key' => false ) ),
+ array( '4:number:key', '123', array( 'key' => 123 ) ),
+ array( '4:number:key', '123.5', array( 'key' => 123.5 ) ),
+ array( '4:array:key', array(), array( 'key' => array( ApiResult::META_TYPE => 'array' ) ) ),
+ array( '4:assoc:key', array(), array( 'key' => array( ApiResult::META_TYPE => 'assoc' ) ) ),
+ array( '4:kvp:key', array(), array( 'key' => array( ApiResult::META_TYPE => 'kvp' ) ) ),
+ array( '4:timestamp:key', '20150102030405', array( 'key' => '2015-01-02T03:04:05Z' ) ),
+ array( '4:msg:key', 'parentheses', array(
+ 'key_key' => 'parentheses',
+ 'key_text' => wfMessage( 'parentheses' )->text(),
+ ) ),
+ array( '4:msg-content:key', 'parentheses', array(
+ 'key_key' => 'parentheses',
+ 'key_text' => wfMessage( 'parentheses' )->inContentLanguage()->text(),
+ ) ),
+ array( '4:title:key', 'project:foo', array(
+ 'key_ns' => NS_PROJECT,
+ 'key_title' => Title::newFromText( 'project:foo' )->getFullText(),
+ ) ),
+ array( '4:title-link:key', 'project:foo', array(
+ 'key_ns' => NS_PROJECT,
+ 'key_title' => Title::newFromText( 'project:foo' )->getFullText(),
+ ) ),
+ array( '4:user:key', 'foo', array( 'key' => 'Foo' ) ),
+ array( '4:user-link:key', 'foo', array( 'key' => 'Foo' ) ),
+ );
+ }
}
diff --git a/tests/phpunit/includes/mail/MailAddressTest.php b/tests/phpunit/includes/mail/MailAddressTest.php
index 2d078120..18d2acdf 100644
--- a/tests/phpunit/includes/mail/MailAddressTest.php
+++ b/tests/phpunit/includes/mail/MailAddressTest.php
@@ -14,6 +14,9 @@ class MailAddressTest extends MediaWikiTestCase {
* @covers MailAddress::newFromUser
*/
public function testNewFromUser() {
+ if ( wfIsWindows() ) {
+ $this->markTestSkipped( 'This test only works on non-Windows platforms' );
+ }
$user = $this->getMock( 'User' );
$user->expects( $this->any() )->method( 'getName' )->will( $this->returnValue( 'UserName' ) );
$user->expects( $this->any() )->method( 'getEmail' )->will( $this->returnValue( 'foo@bar.baz' ) );
@@ -49,6 +52,7 @@ class MailAddressTest extends MediaWikiTestCase {
array( false, 'foo@bar.baz', 'AUserName', 'Some real name', 'AUserName <foo@bar.baz>' ),
array( false, 'foo@bar.baz', '', '', 'foo@bar.baz' ),
array( true, 'foo@bar.baz', '', '', 'foo@bar.baz' ),
+ array( true, '', '', '', '' ),
);
}
@@ -59,5 +63,4 @@ class MailAddressTest extends MediaWikiTestCase {
$ma = new MailAddress( 'some@email.com', 'UserName', 'A real name' );
$this->assertEquals( $ma->toString(), (string)$ma );
}
-
-} \ No newline at end of file
+}
diff --git a/tests/phpunit/includes/media/BitmapScalingTest.php b/tests/phpunit/includes/media/BitmapScalingTest.php
index 1972c969..e4415ece 100644
--- a/tests/phpunit/includes/media/BitmapScalingTest.php
+++ b/tests/phpunit/includes/media/BitmapScalingTest.php
@@ -113,7 +113,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
$file = new FakeDimensionFile( array( 4000, 4000 ) );
$handler = new BitmapHandler;
$params = array( 'width' => '3700' ); // Still bigger than max size.
- $this->assertEquals( 'TransformParameterError',
+ $this->assertEquals( 'TransformTooBigImageAreaError',
get_class( $handler->doTransform( $file, 'dummy path', '', $params ) ) );
}
@@ -125,7 +125,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
$file->mustRender = true;
$handler = new BitmapHandler;
$params = array( 'width' => '5000' ); // Still bigger than max size.
- $this->assertEquals( 'TransformParameterError',
+ $this->assertEquals( 'TransformTooBigImageAreaError',
get_class( $handler->doTransform( $file, 'dummy path', '', $params ) ) );
}
diff --git a/tests/phpunit/includes/media/FormatMetadataTest.php b/tests/phpunit/includes/media/FormatMetadataTest.php
index 002e2cb9..54758f94 100644
--- a/tests/phpunit/includes/media/FormatMetadataTest.php
+++ b/tests/phpunit/includes/media/FormatMetadataTest.php
@@ -68,4 +68,36 @@ class FormatMetadataTest extends MediaWikiMediaTestCase {
// TODO: more test cases
);
}
+
+ /**
+ * @param mixed $input
+ * @param mixed $output
+ * @dataProvider provideResolveMultivalueValue
+ * @covers FormatMetadata::resolveMultivalueValue
+ */
+ public function testResolveMultivalueValue( $input, $output ) {
+ $formatMetadata = new FormatMetadata();
+ $class = new ReflectionClass( 'FormatMetadata' );
+ $method = $class->getMethod( 'resolveMultivalueValue' );
+ $method->setAccessible( true );
+ $actualInput = $method->invoke( $formatMetadata, $input );
+ $this->assertEquals( $output, $actualInput );
+ }
+
+ public function provideResolveMultivalueValue() {
+ return array(
+ 'nonArray' => array( 'foo', 'foo' ),
+ 'multiValue' => array( array( 'first', 'second', 'third', '_type' => 'ol' ), 'first' ),
+ 'noType' => array( array( 'first', 'second', 'third' ), 'first' ),
+ 'typeFirst' => array( array( '_type' => 'ol', 'first', 'second', 'third' ), 'first' ),
+ 'multilang' => array(
+ array( 'en' => 'first', 'de' => 'Erste', '_type' => 'lang' ),
+ array( 'en' => 'first', 'de' => 'Erste', '_type' => 'lang' ),
+ ),
+ 'multilang-multivalue' => array(
+ array( 'en' => array( 'first', 'second' ), 'de' => array( 'Erste', 'Zweite' ), '_type' => 'lang' ),
+ array( 'en' => 'first', 'de' => 'Erste', '_type' => 'lang' ),
+ ),
+ );
+ }
}
diff --git a/tests/phpunit/includes/media/MediaHandlerTest.php b/tests/phpunit/includes/media/MediaHandlerTest.php
index d8cfcc45..78ea9530 100644
--- a/tests/phpunit/includes/media/MediaHandlerTest.php
+++ b/tests/phpunit/includes/media/MediaHandlerTest.php
@@ -7,50 +7,62 @@ class MediaHandlerTest extends MediaWikiTestCase {
/**
* @covers MediaHandler::fitBoxWidth
- * @todo split into a dataprovider and test method
+ *
+ * @dataProvider provideTestFitBoxWidth
*/
- public function testFitBoxWidth() {
- $vals = array(
- array(
- 'width' => 50,
- 'height' => 50,
- 'tests' => array(
+ public function testFitBoxWidth( $width, $height, $max, $expected ) {
+ $y = round( $expected * $height / $width );
+ $result = MediaHandler::fitBoxWidth( $width, $height, $max );
+ $y2 = round( $result * $height / $width );
+ $this->assertEquals( $expected,
+ $result,
+ "($width, $height, $max) wanted: {$expected}x$y, got: {z$result}x$y2" );
+ }
+
+ public static function provideTestFitBoxWidth() {
+ return array_merge(
+ static::generateTestFitBoxWidthData( 50, 50, array(
50 => 50,
17 => 17,
- 18 => 18 ) ),
- array(
- 'width' => 366,
- 'height' => 300,
- 'tests' => array(
+ 18 => 18 )
+ ),
+ static::generateTestFitBoxWidthData( 366, 300, array(
50 => 61,
17 => 21,
- 18 => 22 ) ),
- array(
- 'width' => 300,
- 'height' => 366,
- 'tests' => array(
+ 18 => 22 )
+ ),
+ static::generateTestFitBoxWidthData( 300, 366, array(
50 => 41,
17 => 14,
- 18 => 15 ) ),
- array(
- 'width' => 100,
- 'height' => 400,
- 'tests' => array(
+ 18 => 15 )
+ ),
+ static::generateTestFitBoxWidthData( 100, 400, array(
50 => 12,
17 => 4,
- 18 => 4 ) ) );
- foreach ( $vals as $row ) {
- $tests = $row['tests'];
- $height = $row['height'];
- $width = $row['width'];
- foreach ( $tests as $max => $expected ) {
- $y = round( $expected * $height / $width );
- $result = MediaHandler::fitBoxWidth( $width, $height, $max );
- $y2 = round( $result * $height / $width );
- $this->assertEquals( $expected,
- $result,
- "($width, $height, $max) wanted: {$expected}x$y, got: {$result}x$y2" );
- }
+ 18 => 4 )
+ )
+ );
+ }
+
+ /**
+ * Generate single test cases by combining the dimensions and tests contents
+ *
+ * It creates:
+ * [$width, $height, $max, $expected],
+ * [$width, $height, $max2, $expected2], ...
+ * out of parameters:
+ * $width, $height, { $max => $expected, $max2 => $expected2, ... }
+ *
+ * @param $width int
+ * @param $height int
+ * @param $tests array associative array of $max => $expected values
+ * @return array
+ */
+ private static function generateTestFitBoxWidthData( $width, $height, $tests ) {
+ $result = array();
+ foreach ( $tests as $max => $expected ) {
+ $result[] = array( $width, $height, $max, $expected );
}
+ return $result;
}
}
diff --git a/tests/phpunit/includes/media/SVGMetadataExtractorTest.php b/tests/phpunit/includes/media/SVGMetadataExtractorTest.php
index ab33d1c2..0241aec4 100644
--- a/tests/phpunit/includes/media/SVGMetadataExtractorTest.php
+++ b/tests/phpunit/includes/media/SVGMetadataExtractorTest.php
@@ -6,11 +6,6 @@
*/
class SVGMetadataExtractorTest extends MediaWikiTestCase {
- protected function setUp() {
- parent::setUp();
- AutoLoader::loadClass( 'SVGMetadataExtractorTest' );
- }
-
/**
* @dataProvider provideSvgFiles
*/
diff --git a/tests/phpunit/includes/normal/CleanUpTest.php b/tests/phpunit/includes/normal/CleanUpTest.php
deleted file mode 100644
index f4b469b8..00000000
--- a/tests/phpunit/includes/normal/CleanUpTest.php
+++ /dev/null
@@ -1,409 +0,0 @@
-<?php
-/**
- * Tests for UtfNormal::cleanUp() function.
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * Additional tests for UtfNormal::cleanUp() function, inclusion
- * regression checks for known problems.
- * Requires PHPUnit.
- *
- * @ingroup UtfNormal
- * @group Large
- *
- * @todo covers tags, will be UtfNormal::cleanUp once the below is resolved
- * @todo split me into test methods and providers per the below comment
- *
- * We ignore code coverage for this test suite until they are rewritten
- * to use data providers (bug 46561).
- * @codeCoverageIgnore
- */
-class CleanUpTest extends MediaWikiTestCase {
- /** @todo document */
- public function testAscii() {
- $text = 'This is plain ASCII text.';
- $this->assertEquals( $text, UtfNormal::cleanUp( $text ) );
- }
-
- /** @todo document */
- public function testNull() {
- $text = "a \x00 null";
- $expect = "a \xef\xbf\xbd null";
- $this->assertEquals(
- bin2hex( $expect ),
- bin2hex( UtfNormal::cleanUp( $text ) ) );
- }
-
- /** @todo document */
- public function testLatin() {
- $text = "L'\xc3\xa9cole";
- $this->assertEquals( $text, UtfNormal::cleanUp( $text ) );
- }
-
- /** @todo document */
- public function testLatinNormal() {
- $text = "L'e\xcc\x81cole";
- $expect = "L'\xc3\xa9cole";
- $this->assertEquals( $expect, UtfNormal::cleanUp( $text ) );
- }
-
- /**
- * This test is *very* expensive!
- * @todo document
- */
- function XtestAllChars() {
- $rep = UTF8_REPLACEMENT;
- for ( $i = 0x0; $i < UNICODE_MAX; $i++ ) {
- $char = codepointToUtf8( $i );
- $clean = UtfNormal::cleanUp( $char );
- $x = sprintf( "%04X", $i );
-
- if ( $i % 0x1000 == 0 ) {
- echo "U+$x\n";
- }
-
- if ( $i == 0x0009 ||
- $i == 0x000a ||
- $i == 0x000d ||
- ( $i > 0x001f && $i < UNICODE_SURROGATE_FIRST ) ||
- ( $i > UNICODE_SURROGATE_LAST && $i < 0xfffe ) ||
- ( $i > 0xffff && $i <= UNICODE_MAX )
- ) {
- if ( isset( UtfNormal::$utfCanonicalComp[$char] )
- || isset( UtfNormal::$utfCanonicalDecomp[$char] )
- ) {
- $comp = UtfNormal::NFC( $char );
- $this->assertEquals(
- bin2hex( $comp ),
- bin2hex( $clean ),
- "U+$x should be decomposed" );
- } else {
- $this->assertEquals(
- bin2hex( $char ),
- bin2hex( $clean ),
- "U+$x should be intact" );
- }
- } else {
- $this->assertEquals( bin2hex( $rep ), bin2hex( $clean ), $x );
- }
- }
- }
-
- /** @todo document */
- public static function provideAllBytes() {
- return array(
- array( '', '' ),
- array( 'x', '' ),
- array( '', 'x' ),
- array( 'x', 'x' ),
- );
- }
-
- /**
- * @dataProvider provideAllBytes
- * @todo document
- */
- function testBytes( $head, $tail ) {
- for ( $i = 0x0; $i < 256; $i++ ) {
- $char = $head . chr( $i ) . $tail;
- $clean = UtfNormal::cleanUp( $char );
- $x = sprintf( "%02X", $i );
-
- if ( $i == 0x0009 ||
- $i == 0x000a ||
- $i == 0x000d ||
- ( $i > 0x001f && $i < 0x80 )
- ) {
- $this->assertEquals(
- bin2hex( $char ),
- bin2hex( $clean ),
- "ASCII byte $x should be intact" );
- if ( $char != $clean ) {
- return;
- }
- } else {
- $norm = $head . UTF8_REPLACEMENT . $tail;
- $this->assertEquals(
- bin2hex( $norm ),
- bin2hex( $clean ),
- "Forbidden byte $x should be rejected" );
- if ( $norm != $clean ) {
- return;
- }
- }
- }
- }
-
- /**
- * @dataProvider provideAllBytes
- * @todo document
- */
- function testDoubleBytes( $head, $tail ) {
- for ( $first = 0xc0; $first < 0x100; $first += 2 ) {
- for ( $second = 0x80; $second < 0x100; $second += 2 ) {
- $char = $head . chr( $first ) . chr( $second ) . $tail;
- $clean = UtfNormal::cleanUp( $char );
- $x = sprintf( "%02X,%02X", $first, $second );
- if ( $first > 0xc1 &&
- $first < 0xe0 &&
- $second < 0xc0
- ) {
- $norm = UtfNormal::NFC( $char );
- $this->assertEquals(
- bin2hex( $norm ),
- bin2hex( $clean ),
- "Pair $x should be intact" );
- if ( $norm != $clean ) {
- return;
- }
- } elseif ( $first > 0xfd || $second > 0xbf ) {
- # fe and ff are not legal head bytes -- expect two replacement chars
- $norm = $head . UTF8_REPLACEMENT . UTF8_REPLACEMENT . $tail;
- $this->assertEquals(
- bin2hex( $norm ),
- bin2hex( $clean ),
- "Forbidden pair $x should be rejected" );
- if ( $norm != $clean ) {
- return;
- }
- } else {
- $norm = $head . UTF8_REPLACEMENT . $tail;
- $this->assertEquals(
- bin2hex( $norm ),
- bin2hex( $clean ),
- "Forbidden pair $x should be rejected" );
- if ( $norm != $clean ) {
- return;
- }
- }
- }
- }
- }
-
- /**
- * @dataProvider provideAllBytes
- * @todo document
- */
- function testTripleBytes( $head, $tail ) {
- for ( $first = 0xc0; $first < 0x100; $first += 2 ) {
- for ( $second = 0x80; $second < 0x100; $second += 2 ) {
- #for( $third = 0x80; $third < 0x100; $third++ ) {
- for ( $third = 0x80; $third < 0x81; $third++ ) {
- $char = $head . chr( $first ) . chr( $second ) . chr( $third ) . $tail;
- $clean = UtfNormal::cleanUp( $char );
- $x = sprintf( "%02X,%02X,%02X", $first, $second, $third );
-
- if ( $first >= 0xe0 &&
- $first < 0xf0 &&
- $second < 0xc0 &&
- $third < 0xc0
- ) {
- if ( $first == 0xe0 && $second < 0xa0 ) {
- $this->assertEquals(
- bin2hex( $head . UTF8_REPLACEMENT . $tail ),
- bin2hex( $clean ),
- "Overlong triplet $x should be rejected" );
- } elseif ( $first == 0xed &&
- ( chr( $first ) . chr( $second ) . chr( $third ) ) >= UTF8_SURROGATE_FIRST
- ) {
- $this->assertEquals(
- bin2hex( $head . UTF8_REPLACEMENT . $tail ),
- bin2hex( $clean ),
- "Surrogate triplet $x should be rejected" );
- } else {
- $this->assertEquals(
- bin2hex( UtfNormal::NFC( $char ) ),
- bin2hex( $clean ),
- "Triplet $x should be intact" );
- }
- } elseif ( $first > 0xc1 && $first < 0xe0 && $second < 0xc0 ) {
- $this->assertEquals(
- bin2hex( UtfNormal::NFC( $head . chr( $first ) .
- chr( $second ) ) . UTF8_REPLACEMENT . $tail ),
- bin2hex( $clean ),
- "Valid 2-byte $x + broken tail" );
- } elseif ( $second > 0xc1 && $second < 0xe0 && $third < 0xc0 ) {
- $this->assertEquals(
- bin2hex( $head . UTF8_REPLACEMENT .
- UtfNormal::NFC( chr( $second ) . chr( $third ) . $tail ) ),
- bin2hex( $clean ),
- "Broken head + valid 2-byte $x" );
- } elseif ( ( $first > 0xfd || $second > 0xfd ) &&
- ( ( $second > 0xbf && $third > 0xbf ) ||
- ( $second < 0xc0 && $third < 0xc0 ) ||
- ( $second > 0xfd ) ||
- ( $third > 0xfd ) )
- ) {
- # fe and ff are not legal head bytes -- expect three replacement chars
- $this->assertEquals(
- bin2hex( $head . UTF8_REPLACEMENT . UTF8_REPLACEMENT . UTF8_REPLACEMENT . $tail ),
- bin2hex( $clean ),
- "Forbidden triplet $x should be rejected" );
- } elseif ( $first > 0xc2 && $second < 0xc0 && $third < 0xc0 ) {
- $this->assertEquals(
- bin2hex( $head . UTF8_REPLACEMENT . $tail ),
- bin2hex( $clean ),
- "Forbidden triplet $x should be rejected" );
- } else {
- $this->assertEquals(
- bin2hex( $head . UTF8_REPLACEMENT . UTF8_REPLACEMENT . $tail ),
- bin2hex( $clean ),
- "Forbidden triplet $x should be rejected" );
- }
- }
- }
- }
- }
-
- /** @todo document */
- public function testChunkRegression() {
- # Check for regression against a chunking bug
- $text = "\x46\x55\xb8" .
- "\xdc\x96" .
- "\xee" .
- "\xe7" .
- "\x44" .
- "\xaa" .
- "\x2f\x25";
- $expect = "\x46\x55\xef\xbf\xbd" .
- "\xdc\x96" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\x44" .
- "\xef\xbf\xbd" .
- "\x2f\x25";
-
- $this->assertEquals(
- bin2hex( $expect ),
- bin2hex( UtfNormal::cleanUp( $text ) ) );
- }
-
- /** @todo document */
- public function testInterposeRegression() {
- $text = "\x4e\x30" .
- "\xb1" . # bad tail
- "\x3a" .
- "\x92" . # bad tail
- "\x62\x3a" .
- "\x84" . # bad tail
- "\x43" .
- "\xc6" . # bad head
- "\x3f" .
- "\x92" . # bad tail
- "\xad" . # bad tail
- "\x7d" .
- "\xd9\x95";
-
- $expect = "\x4e\x30" .
- "\xef\xbf\xbd" .
- "\x3a" .
- "\xef\xbf\xbd" .
- "\x62\x3a" .
- "\xef\xbf\xbd" .
- "\x43" .
- "\xef\xbf\xbd" .
- "\x3f" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\x7d" .
- "\xd9\x95";
-
- $this->assertEquals(
- bin2hex( $expect ),
- bin2hex( UtfNormal::cleanUp( $text ) ) );
- }
-
- /** @todo document */
- public function testOverlongRegression() {
- $text = "\x67" .
- "\x1a" . # forbidden ascii
- "\xea" . # bad head
- "\xc1\xa6" . # overlong sequence
- "\xad" . # bad tail
- "\x1c" . # forbidden ascii
- "\xb0" . # bad tail
- "\x3c" .
- "\x9e"; # bad tail
- $expect = "\x67" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\x3c" .
- "\xef\xbf\xbd";
- $this->assertEquals(
- bin2hex( $expect ),
- bin2hex( UtfNormal::cleanUp( $text ) ) );
- }
-
- /** @todo document */
- public function testSurrogateRegression() {
- $text = "\xed\xb4\x96" . # surrogate 0xDD16
- "\x83" . # bad tail
- "\xb4" . # bad tail
- "\xac"; # bad head
- $expect = "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd";
- $this->assertEquals(
- bin2hex( $expect ),
- bin2hex( UtfNormal::cleanUp( $text ) ) );
- }
-
- /** @todo document */
- public function testBomRegression() {
- $text = "\xef\xbf\xbe" . # U+FFFE, illegal char
- "\xb2" . # bad tail
- "\xef" . # bad head
- "\x59";
- $expect = "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\xef\xbf\xbd" .
- "\x59";
- $this->assertEquals(
- bin2hex( $expect ),
- bin2hex( UtfNormal::cleanUp( $text ) ) );
- }
-
- /** @todo document */
- public function testForbiddenRegression() {
- $text = "\xef\xbf\xbf"; # U+FFFF, illegal char
- $expect = "\xef\xbf\xbd";
- $this->assertEquals(
- bin2hex( $expect ),
- bin2hex( UtfNormal::cleanUp( $text ) ) );
- }
-
- /** @todo document */
- public function testHangulRegression() {
- $text = "\xed\x9c\xaf" . # Hangul char
- "\xe1\x87\x81"; # followed by another final jamo
- $expect = $text; # Should *not* change.
- $this->assertEquals(
- bin2hex( $expect ),
- bin2hex( UtfNormal::cleanUp( $text ) ) );
- }
-}
diff --git a/tests/phpunit/includes/objectcache/BagOStuffTest.php b/tests/phpunit/includes/objectcache/BagOStuffTest.php
index 987b6e64..4516bb4e 100644
--- a/tests/phpunit/includes/objectcache/BagOStuffTest.php
+++ b/tests/phpunit/includes/objectcache/BagOStuffTest.php
@@ -1,8 +1,6 @@
<?php
/**
- * This class will test BagOStuff.
- *
- * @author Matthias Mullie <mmullie@wikimedia.org>
+ * @author Matthias Mullie <mmullie@wikimedia.org>
*/
class BagOStuffTest extends MediaWikiTestCase {
private $cache;
@@ -23,6 +21,10 @@ class BagOStuffTest extends MediaWikiTestCase {
$this->cache->delete( wfMemcKey( 'test' ) );
}
+ /**
+ * @covers BagOStuff::merge
+ * @covers BagOStuff::mergeViaLock
+ */
public function testMerge() {
$key = wfMemcKey( 'test' );
@@ -100,6 +102,9 @@ class BagOStuffTest extends MediaWikiTestCase {
}
}
+ /**
+ * @covers BagOStuff::add
+ */
public function testAdd() {
$key = wfMemcKey( 'test' );
$this->assertTrue( $this->cache->add( $key, 'test' ) );
@@ -125,6 +130,9 @@ class BagOStuffTest extends MediaWikiTestCase {
$this->assertEquals( $expectedValue, $actualValue, 'Value should be 1 after incrementing' );
}
+ /**
+ * @covers BagOStuff::getMulti
+ */
public function testGetMulti() {
$value1 = array( 'this' => 'is', 'a' => 'test' );
$value2 = array( 'this' => 'is', 'another' => 'test' );
diff --git a/tests/phpunit/includes/ArticleTablesTest.php b/tests/phpunit/includes/page/ArticleTablesTest.php
index 9f2b7a05..9f2b7a05 100644
--- a/tests/phpunit/includes/ArticleTablesTest.php
+++ b/tests/phpunit/includes/page/ArticleTablesTest.php
diff --git a/tests/phpunit/includes/ArticleTest.php b/tests/phpunit/includes/page/ArticleTest.php
index ae069eaf..ae069eaf 100644
--- a/tests/phpunit/includes/ArticleTest.php
+++ b/tests/phpunit/includes/page/ArticleTest.php
diff --git a/tests/phpunit/includes/ImagePage404Test.php b/tests/phpunit/includes/page/ImagePage404Test.php
index 197a2b32..197a2b32 100644
--- a/tests/phpunit/includes/ImagePage404Test.php
+++ b/tests/phpunit/includes/page/ImagePage404Test.php
diff --git a/tests/phpunit/includes/ImagePageTest.php b/tests/phpunit/includes/page/ImagePageTest.php
index 3c255b5f..3c255b5f 100644
--- a/tests/phpunit/includes/ImagePageTest.php
+++ b/tests/phpunit/includes/page/ImagePageTest.php
diff --git a/tests/phpunit/includes/WikiPageTest.php b/tests/phpunit/includes/page/WikiPageTest.php
index 7f7945b8..c011e9a9 100644
--- a/tests/phpunit/includes/WikiPageTest.php
+++ b/tests/phpunit/includes/page/WikiPageTest.php
@@ -55,8 +55,8 @@ class WikiPageTest extends MediaWikiLangTestCase {
}
/**
- * @param Title $title
- * @param string $model
+ * @param Title|string $title
+ * @param string|null $model
* @return WikiPage
*/
protected function newPage( $title, $model = null ) {
diff --git a/tests/phpunit/includes/WikiPageTestContentHandlerUseDB.php b/tests/phpunit/includes/page/WikiPageTestContentHandlerUseDB.php
index 3db76280..3db76280 100644
--- a/tests/phpunit/includes/WikiPageTestContentHandlerUseDB.php
+++ b/tests/phpunit/includes/page/WikiPageTestContentHandlerUseDB.php
diff --git a/tests/phpunit/includes/parser/NewParserTest.php b/tests/phpunit/includes/parser/NewParserTest.php
index 0df52f5e..91aad10c 100644
--- a/tests/phpunit/includes/parser/NewParserTest.php
+++ b/tests/phpunit/includes/parser/NewParserTest.php
@@ -124,7 +124,7 @@ class NewParserTest extends MediaWikiTestCase {
$tmpGlobals['wgFileExtensions'][] = 'svg';
$tmpGlobals['wgSVGConverter'] = 'rsvg';
$tmpGlobals['wgSVGConverters']['rsvg'] =
- '$path/rsvg-convert -w $width -h $height $input -o $output';
+ '$path/rsvg-convert -w $width -h $height -o $output $input';
if ( $GLOBALS['wgStyleDirectory'] === false ) {
$tmpGlobals['wgStyleDirectory'] = "$IP/skins";
@@ -160,9 +160,6 @@ class NewParserTest extends MediaWikiTestCase {
$this->djVuSupport = new DjVuSupport();
// Tidy support
$this->tidySupport = new TidySupport();
- // We always set 'wgUseTidy' to false when parsing, but certain
- // test-running modes still use tidy if available, so ensure
- // that the tidy-related options are all set to their defaults.
$tmpGlobals['wgUseTidy'] = false;
$tmpGlobals['wgAlwaysUseTidy'] = false;
$tmpGlobals['wgDebugTidy'] = false;
@@ -419,6 +416,7 @@ class NewParserTest extends MediaWikiTestCase {
'wgMathDirectory' => $uploadDir . '/math',
'wgDefaultLanguageVariant' => $variant,
'wgLinkHolderBatchSize' => $linkHolderBatchSize,
+ 'wgUseTidy' => isset( $opts['tidy'] ),
);
if ( $config ) {
@@ -434,7 +432,7 @@ class NewParserTest extends MediaWikiTestCase {
$this->savedGlobals = array();
/** @since 1.20 */
- wfRunHooks( 'ParserTestGlobals', array( &$settings ) );
+ Hooks::run( 'ParserTestGlobals', array( &$settings ) );
$langObj = Language::factory( $lang );
$settings['wgContLang'] = $langObj;
@@ -480,16 +478,16 @@ class NewParserTest extends MediaWikiTestCase {
*/
protected function getUploadDir() {
if ( $this->keepUploads ) {
+ // Don't use getNewTempDirectory() as this is meant to persist
$dir = wfTempDir() . '/mwParser-images';
if ( is_dir( $dir ) ) {
return $dir;
}
} else {
- $dir = wfTempDir() . "/mwParser-" . mt_rand() . "-images";
+ $dir = $this->getNewTempDirectory();
}
- // wfDebug( "Creating upload directory $dir\n" );
if ( file_exists( $dir ) ) {
wfDebug( "Already exists!\n" );
@@ -727,12 +725,21 @@ class NewParserTest extends MediaWikiTestCase {
. "Current configuration is:\n\$wgTexvc = '$wgTexvc'" );
}
}
+
if ( isset( $opts['djvu'] ) ) {
if ( !$this->djVuSupport->isEnabled() ) {
$this->markTestSkipped( "SKIPPED: djvu binaries do not exist or are not executable.\n" );
}
}
+ if ( isset( $opts['tidy'] ) ) {
+ if ( !$this->tidySupport->isEnabled() ) {
+ $this->markTestSkipped( "SKIPPED: tidy extension is not installed.\n" );
+ } else {
+ $options->setTidy( true );
+ }
+ }
+
if ( isset( $opts['pst'] ) ) {
$out = $parser->preSaveTransform( $input, $title, $user, $options );
} elseif ( isset( $opts['msg'] ) ) {
@@ -753,12 +760,7 @@ class NewParserTest extends MediaWikiTestCase {
$output->setTOCEnabled( !isset( $opts['notoc'] ) );
$out = $output->getText();
if ( isset( $opts['tidy'] ) ) {
- if ( !$this->tidySupport->isEnabled() ) {
- $this->markTestSkipped( "SKIPPED: tidy extension is not installed.\n" );
- } else {
- $out = MWTidy::tidy( $out );
- $out = preg_replace( '/\s+$/', '', $out );
- }
+ $out = preg_replace( '/\s+$/', '', $out );
}
if ( isset( $opts['showtitle'] ) ) {
@@ -769,6 +771,14 @@ class NewParserTest extends MediaWikiTestCase {
$out = "$title\n$out";
}
+ if ( isset( $opts['showindicators'] ) ) {
+ $indicators = '';
+ foreach ( $output->getIndicators() as $id => $content ) {
+ $indicators .= "$id=$content\n";
+ }
+ $out = $indicators . $out;
+ }
+
if ( isset( $opts['ill'] ) ) {
$out = implode( ' ', $output->getLanguageLinks() );
} elseif ( isset( $opts['cat'] ) ) {
@@ -939,7 +949,7 @@ class NewParserTest extends MediaWikiTestCase {
$class = $wgParserConf['class'];
$parser = new $class( array( 'preprocessorClass' => $preprocessor ) + $wgParserConf );
- wfRunHooks( 'ParserTestParser', array( &$parser ) );
+ Hooks::run( 'ParserTestParser', array( &$parser ) );
return $parser;
}
diff --git a/tests/phpunit/includes/parser/ParserOutputTest.php b/tests/phpunit/includes/parser/ParserOutputTest.php
index c024cee5..e660e096 100644
--- a/tests/phpunit/includes/parser/ParserOutputTest.php
+++ b/tests/phpunit/includes/parser/ParserOutputTest.php
@@ -1,5 +1,9 @@
<?php
+/**
+ * @group Database
+ * ^--- trigger DB shadowing because we are using Title magic
+ */
class ParserOutputTest extends MediaWikiTestCase {
public static function provideIsLinkInternal() {
@@ -84,4 +88,5 @@ class ParserOutputTest extends MediaWikiTestCase {
$this->assertEquals( $po->getProperty( 'foo' ), false );
$this->assertArrayNotHasKey( 'foo', $properties );
}
+
}
diff --git a/tests/phpunit/includes/parser/TagHooksTest.php b/tests/phpunit/includes/parser/TagHooksTest.php
index e3c4cc84..251da471 100644
--- a/tests/phpunit/includes/parser/TagHooksTest.php
+++ b/tests/phpunit/includes/parser/TagHooksTest.php
@@ -89,7 +89,7 @@ class TagHookTest extends MediaWikiTestCase {
global $wgParserConf, $wgContLang;
$parser = new Parser( $wgParserConf );
- $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), SFH_OBJECT_ARGS );
+ $parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), Parser::SFH_OBJECT_ARGS );
$parser->parse(
"Foo<$tag>Bar</$tag>Baz",
Title::newFromText( 'Test' ),
diff --git a/tests/phpunit/includes/PasswordTest.php b/tests/phpunit/includes/password/PasswordTest.php
index ceb794b5..5ad8aca6 100644
--- a/tests/phpunit/includes/PasswordTest.php
+++ b/tests/phpunit/includes/password/PasswordTest.php
@@ -30,4 +30,10 @@ class PasswordTest extends MediaWikiTestCase {
$this->assertFalse( $invalid1->equals( $invalid2 ) );
}
+
+ public function testInvalidPlaintext() {
+ $invalid = User::getPasswordFactory()->newFromPlaintext( null );
+
+ $this->assertInstanceOf( 'InvalidPassword', $invalid );
+ }
}
diff --git a/tests/phpunit/includes/password/PasswordTestCase.php b/tests/phpunit/includes/password/PasswordTestCase.php
index ef16f1c4..9a142cbc 100644
--- a/tests/phpunit/includes/password/PasswordTestCase.php
+++ b/tests/phpunit/includes/password/PasswordTestCase.php
@@ -49,10 +49,13 @@ abstract class PasswordTestCase extends MediaWikiTestCase {
* An array of tests in the form of (bool, string, string), where the first
* element is whether the second parameter (a password hash) and the third
* parameter (a password) should match.
- *
* @return array
+ * @throws MWException
+ * @abstract
*/
- abstract public static function providePasswordTests();
+ public static function providePasswordTests() {
+ throw new MWException( "Not implemented" );
+ }
/**
* @dataProvider providePasswordTests
diff --git a/tests/phpunit/includes/registration/ExtensionProcessorTest.php b/tests/phpunit/includes/registration/ExtensionProcessorTest.php
new file mode 100644
index 00000000..8715711f
--- /dev/null
+++ b/tests/phpunit/includes/registration/ExtensionProcessorTest.php
@@ -0,0 +1,374 @@
+<?php
+
+class ExtensionProcessorTest extends MediaWikiTestCase {
+
+ private $dir;
+
+ public function setUp() {
+ parent::setUp();
+ $this->dir = __DIR__ . '/FooBar/extension.json';
+ }
+
+ /**
+ * 'name' is absolutely required
+ *
+ * @var array
+ */
+ static $default = array(
+ 'name' => 'FooBar',
+ );
+
+ /**
+ * @covers ExtensionProcessor::extractInfo
+ */
+ public function testExtractInfo() {
+ // Test that attributes that begin with @ are ignored
+ $processor = new ExtensionProcessor();
+ $processor->extractInfo( $this->dir, self::$default + array(
+ '@metadata' => array( 'foobarbaz' ),
+ 'AnAttribute' => array( 'omg' ),
+ 'AutoloadClasses' => array( 'FooBar' => 'includes/FooBar.php' ),
+ ) );
+
+ $extracted = $processor->getExtractedInfo();
+ $attributes = $extracted['attributes'];
+ $this->assertArrayHasKey( 'AnAttribute', $attributes );
+ $this->assertArrayNotHasKey( '@metadata', $attributes );
+ $this->assertArrayNotHasKey( 'AutoloadClasses', $attributes );
+ }
+
+ public static function provideRegisterHooks() {
+ return array(
+ // No hooks
+ array(
+ array(),
+ self::$default,
+ array(),
+ ),
+ // No current hooks, adding one for "FooBaz"
+ array(
+ array(),
+ array( 'Hooks' => array( 'FooBaz' => 'FooBazCallback' ) ) + self::$default,
+ array( 'FooBaz' => array( 'FooBazCallback' ) ),
+ ),
+ // Hook for "FooBaz", adding another one
+ array(
+ array( 'FooBaz' => array( 'PriorCallback' ) ),
+ array( 'Hooks' => array( 'FooBaz' => 'FooBazCallback' ) ) + self::$default,
+ array( 'FooBaz' => array( 'PriorCallback', 'FooBazCallback' ) ),
+ ),
+ // Hook for "BarBaz", adding one for "FooBaz"
+ array(
+ array( 'BarBaz' => array( 'BarBazCallback' ) ),
+ array( 'Hooks' => array( 'FooBaz' => 'FooBazCallback' ) ) + self::$default,
+ array(
+ 'BarBaz' => array( 'BarBazCallback' ),
+ 'FooBaz' => array( 'FooBazCallback' ),
+ ),
+ ),
+ );
+ }
+
+ /**
+ * @covers ExtensionProcessor::extractHooks
+ * @dataProvider provideRegisterHooks
+ */
+ public function testRegisterHooks( $pre, $info, $expected ) {
+ $processor = new MockExtensionProcessor( array( 'wgHooks' => $pre ) );
+ $processor->extractInfo( $this->dir, $info );
+ $extracted = $processor->getExtractedInfo();
+ $this->assertEquals( $expected, $extracted['globals']['wgHooks'] );
+ }
+
+ /**
+ * @covers ExtensionProcessor::extractConfig
+ */
+ public function testExtractConfig() {
+ $processor = new ExtensionProcessor;
+ $info = array(
+ 'config' => array(
+ 'Bar' => 'somevalue',
+ 'Foo' => 10,
+ '@IGNORED' => 'yes',
+ ),
+ ) + self::$default;
+ $processor->extractInfo( $this->dir, $info );
+ $extracted = $processor->getExtractedInfo();
+ $this->assertEquals( 'somevalue', $extracted['globals']['wgBar'] );
+ $this->assertEquals( 10, $extracted['globals']['wgFoo'] );
+ $this->assertArrayNotHasKey( 'wg@IGNORED', $extracted['globals'] );
+ }
+
+ public static function provideExtracttExtensionMessagesFiles() {
+ $dir = __DIR__ . '/FooBar/';
+ return array(
+ array(
+ array( 'ExtensionMessagesFiles' => array( 'FooBarAlias' => 'FooBar.alias.php' ) ),
+ array( 'wgExtensionMessagesFiles' => array( 'FooBarAlias' => $dir . 'FooBar.alias.php' ) )
+ ),
+ array(
+ array(
+ 'ExtensionMessagesFiles' => array(
+ 'FooBarAlias' => 'FooBar.alias.php',
+ 'FooBarMagic' => 'FooBar.magic.i18n.php',
+ ),
+ ),
+ array(
+ 'wgExtensionMessagesFiles' => array(
+ 'FooBarAlias' => $dir . 'FooBar.alias.php',
+ 'FooBarMagic' => $dir . 'FooBar.magic.i18n.php',
+ ),
+ ),
+ ),
+ );
+ }
+
+ /**
+ * @covers ExtensionProcessor::extracttExtensionMessagesFiles
+ * @dataProvider provideExtracttExtensionMessagesFiles
+ */
+ public function testExtracttExtensionMessagesFiles( $input, $expected ) {
+ $processor = new ExtensionProcessor();
+ $processor->extractInfo( $this->dir, $input + self::$default );
+ $out = $processor->getExtractedInfo();
+ foreach ( $expected as $key => $value ) {
+ $this->assertEquals( $value, $out['globals'][$key] );
+ }
+ }
+
+
+ public static function provideExtractMessagesDirs() {
+ $dir = __DIR__ . '/FooBar/';
+ return array(
+ array(
+ array( 'MessagesDirs' => array( 'VisualEditor' => 'i18n' ) ),
+ array( 'wgMessagesDirs' => array( 'VisualEditor' => array( $dir . 'i18n' ) ) )
+ ),
+ array(
+ array( 'MessagesDirs' => array( 'VisualEditor' => array( 'i18n', 'foobar' ) ) ),
+ array( 'wgMessagesDirs' => array( 'VisualEditor' => array( $dir . 'i18n', $dir . 'foobar' ) ) )
+ ),
+ );
+ }
+
+ /**
+ * @covers ExtensionProcessor::extractMessagesDirs
+ * @dataProvider provideExtractMessagesDirs
+ */
+ public function testExtractMessagesDirs( $input, $expected ) {
+ $processor = new ExtensionProcessor();
+ $processor->extractInfo( $this->dir, $input + self::$default );
+ $out = $processor->getExtractedInfo();
+ foreach ( $expected as $key => $value ) {
+ $this->assertEquals( $value, $out['globals'][$key] );
+ }
+ }
+
+ /**
+ * @covers ExtensionProcessor::extractResourceLoaderModules
+ * @dataProvider provideExtractResourceLoaderModules
+ */
+ public function testExtractResourceLoaderModules( $input, $expected ) {
+ $processor = new ExtensionProcessor();
+ $processor->extractInfo( $this->dir, $input + self::$default );
+ $out = $processor->getExtractedInfo();
+ foreach ( $expected as $key => $value ) {
+ $this->assertEquals( $value, $out['globals'][$key] );
+ }
+ }
+
+ public static function provideExtractResourceLoaderModules() {
+ $dir = __DIR__ . '/FooBar/';
+ return array(
+ // Generic module with localBasePath/remoteExtPath specified
+ array(
+ // Input
+ array(
+ 'ResourceModules' => array(
+ 'test.foo' => array(
+ 'styles' => 'foobar.js',
+ 'localBasePath' => '',
+ 'remoteExtPath' => 'FooBar',
+ ),
+ ),
+ ),
+ // Expected
+ array(
+ 'wgResourceModules' => array(
+ 'test.foo' => array(
+ 'styles' => 'foobar.js',
+ 'localBasePath' => $dir,
+ 'remoteExtPath' => 'FooBar',
+ ),
+ ),
+ ),
+ ),
+ // ResourceFileModulePaths specified:
+ array(
+ // Input
+ array(
+ 'ResourceFileModulePaths' => array(
+ 'localBasePath' => '',
+ 'remoteExtPath' => 'FooBar',
+ ),
+ 'ResourceModules' => array(
+ // No paths
+ 'test.foo' => array(
+ 'styles' => 'foo.js',
+ ),
+ // Different paths set
+ 'test.bar' => array(
+ 'styles' => 'bar.js',
+ 'localBasePath' => 'subdir',
+ 'remoteExtPath' => 'FooBar/subdir',
+ ),
+ // Custom class with no paths set
+ 'test.class' => array(
+ 'class' => 'FooBarModule',
+ 'extra' => 'argument',
+ ),
+ // Custom class with a localBasePath
+ 'test.class.with.path' => array(
+ 'class' => 'FooBarPathModule',
+ 'extra' => 'argument',
+ 'localBasePath' => '',
+ )
+ ),
+ ),
+ // Expected
+ array(
+ 'wgResourceModules' => array(
+ 'test.foo' => array(
+ 'styles' => 'foo.js',
+ 'localBasePath' => $dir,
+ 'remoteExtPath' => 'FooBar',
+ ),
+ 'test.bar' => array(
+ 'styles' => 'bar.js',
+ 'localBasePath' => $dir . 'subdir',
+ 'remoteExtPath' => 'FooBar/subdir',
+ ),
+ 'test.class' => array(
+ 'class' => 'FooBarModule',
+ 'extra' => 'argument',
+ 'localBasePath' => $dir,
+ 'remoteExtPath' => 'FooBar',
+ ),
+ 'test.class.with.path' => array(
+ 'class' => 'FooBarPathModule',
+ 'extra' => 'argument',
+ 'localBasePath' => $dir,
+ 'remoteExtPath' => 'FooBar',
+ )
+ ),
+ ),
+ ),
+ // ResourceModuleSkinStyles with file module paths
+ array(
+ // Input
+ array(
+ 'ResourceFileModulePaths' => array(
+ 'localBasePath' => '',
+ 'remoteSkinPath' => 'FooBar',
+ ),
+ 'ResourceModuleSkinStyles' => array(
+ 'foobar' => array(
+ 'test.foo' => 'foo.css',
+ )
+ ),
+ ),
+ // Expected
+ array(
+ 'wgResourceModuleSkinStyles' => array(
+ 'foobar' => array(
+ 'test.foo' => 'foo.css',
+ 'localBasePath' => $dir,
+ 'remoteSkinPath' => 'FooBar',
+ ),
+ ),
+ ),
+ ),
+ // ResourceModuleSkinStyles with file module paths and an override
+ array(
+ // Input
+ array(
+ 'ResourceFileModulePaths' => array(
+ 'localBasePath' => '',
+ 'remoteSkinPath' => 'FooBar',
+ ),
+ 'ResourceModuleSkinStyles' => array(
+ 'foobar' => array(
+ 'test.foo' => 'foo.css',
+ 'remoteSkinPath' => 'BarFoo'
+ ),
+ ),
+ ),
+ // Expected
+ array(
+ 'wgResourceModuleSkinStyles' => array(
+ 'foobar' => array(
+ 'test.foo' => 'foo.css',
+ 'localBasePath' => $dir,
+ 'remoteSkinPath' => 'BarFoo',
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ public static function provideSetToGlobal() {
+ return array(
+ array(
+ array( 'wgAPIModules', 'wgAvailableRights' ),
+ array(),
+ array(
+ 'APIModules' => array( 'foobar' => 'ApiFooBar' ),
+ 'AvailableRights' => array( 'foobar', 'unfoobar' ),
+ ),
+ array(
+ 'wgAPIModules' => array( 'foobar' => 'ApiFooBar' ),
+ 'wgAvailableRights' => array( 'foobar', 'unfoobar' ),
+ ),
+ ),
+ array(
+ array( 'wgAPIModules', 'wgAvailableRights' ),
+ array(
+ 'wgAPIModules' => array( 'barbaz' => 'ApiBarBaz' ),
+ 'wgAvailableRights' => array( 'barbaz' )
+ ),
+ array(
+ 'APIModules' => array( 'foobar' => 'ApiFooBar' ),
+ 'AvailableRights' => array( 'foobar', 'unfoobar' ),
+ ),
+ array(
+ 'wgAPIModules' => array( 'barbaz' => 'ApiBarBaz', 'foobar' => 'ApiFooBar' ),
+ 'wgAvailableRights' => array( 'barbaz', 'foobar', 'unfoobar' ),
+ ),
+ ),
+ array(
+ array( 'wgGroupPermissions' ),
+ array(
+ 'wgGroupPermissions' => array( 'sysop' => array( 'delete' ) ),
+ ),
+ array(
+ 'GroupPermissions' => array( 'sysop' => array( 'undelete' ), 'user' => array( 'edit' ) ),
+ ),
+ array(
+ 'wgGroupPermissions' => array( 'sysop' => array( 'delete', 'undelete' ), 'user' => array( 'edit' ) ),
+ )
+ )
+ );
+ }
+}
+
+
+/**
+ * Allow overriding the default value of $this->globals
+ * so we can test merging
+ */
+class MockExtensionProcessor extends ExtensionProcessor {
+ public function __construct( $globals = array() ) {
+ $this->globals = $globals + $this->globals;
+ }
+}
diff --git a/tests/phpunit/includes/registration/ExtensionRegistryTest.php b/tests/phpunit/includes/registration/ExtensionRegistryTest.php
new file mode 100644
index 00000000..1b24628c
--- /dev/null
+++ b/tests/phpunit/includes/registration/ExtensionRegistryTest.php
@@ -0,0 +1,195 @@
+<?php
+
+class ExtensionRegistryTest extends MediaWikiTestCase {
+
+ /**
+ * @covers ExtensionRegistry::exportExtractedData
+ * @dataProvider provideExportExtractedDataGlobals
+ */
+ public function testExportExtractedDataGlobals( $desc, $before, $globals, $expected ) {
+ // Set globals for test
+ if ( $before ) {
+ foreach ( $before as $key => $value ) {
+ // mw prefixed globals does not exist normally
+ if ( substr( $key, 0, 2 ) == 'mw' ) {
+ $GLOBALS[$key] = $value;
+ } else {
+ $this->setMwGlobals( $key, $value );
+ }
+ }
+ }
+
+ $info = array(
+ 'globals' => $globals,
+ 'callbacks' => array(),
+ 'defines' => array(),
+ 'credits' => array(),
+ 'attributes' => array(),
+ );
+ $registry = new ExtensionRegistry();
+ $class = new ReflectionClass( 'ExtensionRegistry' );
+ $method = $class->getMethod( 'exportExtractedData' );
+ $method->setAccessible( true );
+ $method->invokeArgs( $registry, array( $info ) );
+ foreach ( $expected as $name => $value ) {
+ $this->assertArrayHasKey( $name, $GLOBALS, $desc );
+ $this->assertEquals( $value, $GLOBALS[$name], $desc );
+ }
+
+ // Remove mw prefixed globals
+ if ( $before ) {
+ foreach ( $before as $key => $value ) {
+ if ( substr( $key, 0, 2 ) == 'mw' ) {
+ unset( $GLOBALS[$key] );
+ }
+ }
+ }
+ }
+
+ public static function provideExportExtractedDataGlobals() {
+ // "mwtest" prefix used instead of "$wg" to avoid potential conflicts
+ return array(
+ array(
+ 'Simple non-array values',
+ array(
+ 'mwtestFooBarConfig' => true,
+ 'mwtestFooBarConfig2' => 'string',
+ ),
+ array(
+ 'mwtestFooBarDefault' => 1234,
+ 'mwtestFooBarConfig' => false,
+ ),
+ array(
+ 'mwtestFooBarConfig' => true,
+ 'mwtestFooBarConfig2' => 'string',
+ 'mwtestFooBarDefault' => 1234,
+ ),
+ ),
+ array(
+ 'No global already set, simple array',
+ null,
+ array(
+ 'mwtestDefaultOptions' => array(
+ 'foobar' => true,
+ )
+ ),
+ array(
+ 'mwtestDefaultOptions' => array(
+ 'foobar' => true,
+ )
+ ),
+ ),
+ array(
+ 'Global already set, simple array',
+ array(
+ 'mwtestDefaultOptions' => array(
+ 'foobar' => true,
+ 'foo' => 'string'
+ ),
+ ),
+ array(
+ 'mwtestDefaultOptions' => array(
+ 'barbaz' => 12345,
+ 'foobar' => false,
+ ),
+ ),
+ array(
+ 'mwtestDefaultOptions' => array(
+ 'barbaz' => 12345,
+ 'foo' => 'string',
+ 'foobar' => true,
+ ),
+ )
+ ),
+ array(
+ 'No global already set, $wgHooks',
+ array(
+ 'wgHooks' => array(),
+ ),
+ array(
+ 'wgHooks' => array(
+ 'FooBarEvent' => array(
+ 'FooBarClass::onFooBarEvent'
+ ),
+ ),
+ ),
+ array(
+ 'wgHooks' => array(
+ 'FooBarEvent' => array(
+ 'FooBarClass::onFooBarEvent'
+ ),
+ ),
+ ),
+ ),
+ array(
+ 'Global already set, $wgHooks',
+ array(
+ 'wgHooks' => array(
+ 'FooBarEvent' => array(
+ 'FooBarClass::onFooBarEvent'
+ ),
+ 'BazBarEvent' => array(
+ 'FooBarClass::onBazBarEvent',
+ ),
+ ),
+ ),
+ array(
+ 'wgHooks' => array(
+ 'FooBarEvent' => array(
+ 'BazBarClass::onFooBarEvent',
+ ),
+ ),
+ ),
+ array(
+ 'wgHooks' => array(
+ 'FooBarEvent' => array(
+ 'FooBarClass::onFooBarEvent',
+ 'BazBarClass::onFooBarEvent',
+ ),
+ 'BazBarEvent' => array(
+ 'FooBarClass::onBazBarEvent',
+ ),
+ ),
+ ),
+ ),
+ array(
+ 'Global already set, $wgGroupPermissions',
+ array(
+ 'wgGroupPermissions' => array(
+ 'sysop' => array(
+ 'something' => true,
+ ),
+ 'user' => array(
+ 'somethingtwo' => true,
+ )
+ ),
+ ),
+ array(
+ 'wgGroupPermissions' => array(
+ 'customgroup' => array(
+ 'right' => true,
+ ),
+ 'user' => array(
+ 'right' => true,
+ 'somethingtwo' => false,
+ )
+ ),
+ ),
+ array(
+ 'wgGroupPermissions' => array(
+ 'customgroup' => array(
+ 'right' => true,
+ ),
+ 'sysop' => array(
+ 'something' => true,
+ ),
+ 'user' => array(
+ 'somethingtwo' => true,
+ 'right' => true,
+ )
+ ),
+ ),
+ )
+ );
+ }
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
new file mode 100644
index 00000000..122995a5
--- /dev/null
+++ b/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
@@ -0,0 +1,247 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+
+ // The return value of the closure shouldn't matter since this test should
+ // never call it
+ SkinFactory::getDefaultInstance()->register(
+ 'fakeskin',
+ 'FakeSkin',
+ function () {
+ }
+ );
+ }
+
+ private static function getModules() {
+ $base = array(
+ 'localBasePath' => realpath( dirname( __FILE__ ) ),
+ );
+
+ return array(
+ 'noTemplateModule' => array(),
+
+ 'htmlTemplateModule' => $base + array(
+ 'templates' => array(
+ 'templates/template.html',
+ 'templates/template2.html',
+ )
+ ),
+
+ 'aliasedHtmlTemplateModule' => $base + array(
+ 'templates' => array(
+ 'foo.html' => 'templates/template.html',
+ 'bar.html' => 'templates/template2.html',
+ )
+ ),
+
+ 'templateModuleHandlebars' => $base + array(
+ 'templates' => array(
+ 'templates/template_awesome.handlebars',
+ ),
+ ),
+
+ 'aliasFooFromBar' => $base + array(
+ 'templates' => array(
+ 'foo.foo' => 'templates/template.bar',
+ ),
+ ),
+ );
+ }
+
+ public static function providerTemplateDependencies() {
+ $modules = self::getModules();
+
+ return array(
+ array(
+ $modules['noTemplateModule'],
+ array(),
+ ),
+ array(
+ $modules['htmlTemplateModule'],
+ array(
+ 'mediawiki.template',
+ ),
+ ),
+ array(
+ $modules['templateModuleHandlebars'],
+ array(
+ 'mediawiki.template',
+ 'mediawiki.template.handlebars',
+ ),
+ ),
+ array(
+ $modules['aliasFooFromBar'],
+ array(
+ 'mediawiki.template',
+ 'mediawiki.template.foo',
+ ),
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider providerTemplateDependencies
+ * @covers ResourceLoaderFileModule::__construct
+ * @covers ResourceLoaderFileModule::getDependencies
+ */
+ public function testTemplateDependencies( $module, $expected ) {
+ $rl = new ResourceLoaderFileModule( $module );
+ $this->assertEquals( $rl->getDependencies(), $expected );
+ }
+
+ /**
+ * @covers ResourceLoaderFileModule::getAllStyleFiles
+ * @covers ResourceLoaderFileModule::getAllSkinStyleFiles
+ * @covers ResourceLoaderFileModule::getSkinStyleFiles
+ */
+ public function testGetAllSkinStyleFiles() {
+ $baseParams = array(
+ 'scripts' => array(
+ 'foo.js',
+ 'bar.js',
+ ),
+ 'styles' => array(
+ 'foo.css',
+ 'bar.css' => array( 'media' => 'print' ),
+ 'screen.less' => array( 'media' => 'screen' ),
+ 'screen-query.css' => array( 'media' => 'screen and (min-width: 400px)' ),
+ ),
+ 'skinStyles' => array(
+ 'default' => 'quux-fallback.less',
+ 'fakeskin' => array(
+ 'baz-vector.css',
+ 'quux-vector.less',
+ ),
+ ),
+ 'messages' => array(
+ 'hello',
+ 'world',
+ ),
+ );
+
+ $module = new ResourceLoaderFileModule( $baseParams );
+
+ $this->assertEquals(
+ array(
+ 'foo.css',
+ 'baz-vector.css',
+ 'quux-vector.less',
+ 'quux-fallback.less',
+ 'bar.css',
+ 'screen.less',
+ 'screen-query.css',
+ ),
+ array_map( 'basename', $module->getAllStyleFiles() )
+ );
+ }
+
+ /**
+ * Strip @noflip annotations from CSS code.
+ * @param string $css
+ * @return string
+ */
+ private static function stripNoflip( $css ) {
+ return str_replace( '/*@noflip*/ ', '', $css );
+ }
+
+ /**
+ * What happens when you mix @embed and @noflip?
+ * This really is an integration test, but oh well.
+ *
+ * @covers ResourceLoaderFileModule::getStyles
+ * @covers ResourceLoaderFileModule::getStyleFiles
+ */
+ public function testMixedCssAnnotations( ) {
+ $basePath = __DIR__ . '/../../data/css';
+ $testModule = new ResourceLoaderFileModule( array(
+ 'localBasePath' => $basePath,
+ 'styles' => array( 'test.css' ),
+ ) );
+ $expectedModule = new ResourceLoaderFileModule( array(
+ 'localBasePath' => $basePath,
+ 'styles' => array( 'expected.css' ),
+ ) );
+
+ $contextLtr = $this->getResourceLoaderContext( 'en', 'ltr' );
+ $contextRtl = $this->getResourceLoaderContext( 'he', 'rtl' );
+
+ // Since we want to compare the effect of @noflip+@embed against the effect of just @embed, and
+ // the @noflip annotations are always preserved, we need to strip them first.
+ $this->assertEquals(
+ $expectedModule->getStyles( $contextLtr ),
+ self::stripNoflip( $testModule->getStyles( $contextLtr ) ),
+ "/*@noflip*/ with /*@embed*/ gives correct results in LTR mode"
+ );
+ $this->assertEquals(
+ $expectedModule->getStyles( $contextLtr ),
+ self::stripNoflip( $testModule->getStyles( $contextRtl ) ),
+ "/*@noflip*/ with /*@embed*/ gives correct results in RTL mode"
+ );
+ }
+
+ public static function providerGetTemplates() {
+ $modules = self::getModules();
+
+ return array(
+ array(
+ $modules['noTemplateModule'],
+ array(),
+ ),
+ array(
+ $modules['templateModuleHandlebars'],
+ array(
+ 'templates/template_awesome.handlebars' => "wow\n",
+ ),
+ ),
+ array(
+ $modules['htmlTemplateModule'],
+ array(
+ 'templates/template.html' => "<strong>hello</strong>\n",
+ 'templates/template2.html' => "<div>goodbye</div>\n",
+ ),
+ ),
+ array(
+ $modules['aliasedHtmlTemplateModule'],
+ array(
+ 'foo.html' => "<strong>hello</strong>\n",
+ 'bar.html' => "<div>goodbye</div>\n",
+ ),
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider providerGetTemplates
+ * @covers ResourceLoaderFileModule::getTemplates
+ */
+ public function testGetTemplates( $module, $expected ) {
+ $rl = new ResourceLoaderFileModule( $module );
+
+ $this->assertEquals( $rl->getTemplates(), $expected );
+ }
+
+ public static function providerGetModifiedTime() {
+ $modules = self::getModules();
+
+ return array(
+ // Check the default value when no templates present in module is 1
+ array( $modules['noTemplateModule'], 1 ),
+ );
+ }
+
+ /**
+ * @dataProvider providerGetModifiedTime
+ * @covers ResourceLoaderFileModule::getModifiedTime
+ */
+ public function testGetModifiedTime( $module, $expected ) {
+ $rl = new ResourceLoaderFileModule( $module );
+ $ts = $rl->getModifiedTime( $this->getResourceLoaderContext() );
+ $this->assertEquals( $ts, $expected );
+ }
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php
new file mode 100644
index 00000000..d0bc210b
--- /dev/null
+++ b/tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php
@@ -0,0 +1,162 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class ResourceLoaderImageModuleTest extends ResourceLoaderTestCase {
+
+ public static $commonImageData = array(
+ 'add' => 'add.gif',
+ 'remove' => array(
+ 'file' => 'remove.svg',
+ 'variants' => array( 'destructive' ),
+ ),
+ 'next' => array(
+ 'file' => array(
+ 'ltr' => 'next.svg',
+ 'rtl' => 'prev.svg'
+ ),
+ ),
+ 'help' => array(
+ 'file' => array(
+ 'ltr' => 'help-ltr.svg',
+ 'rtl' => 'help-rtl.svg',
+ 'lang' => array(
+ 'he' => 'help-ltr.svg',
+ )
+ ),
+ ),
+ 'bold' => array(
+ 'file' => array(
+ 'default' => 'bold-a.svg',
+ 'lang' => array(
+ 'en' => 'bold-b.svg',
+ 'ar,de' => 'bold-f.svg',
+ )
+ ),
+ )
+ );
+
+ public static $commonImageVariants = array(
+ 'invert' => array(
+ 'color' => '#FFFFFF',
+ 'global' => true,
+ ),
+ 'primary' => array(
+ 'color' => '#598AD1',
+ ),
+ 'constructive' => array(
+ 'color' => '#00C697',
+ ),
+ 'destructive' => array(
+ 'color' => '#E81915',
+ ),
+ );
+
+ public static function providerGetModules() {
+ return array(
+ array(
+ array(
+ 'class' => 'ResourceLoaderImageModule',
+ 'prefix' => 'oo-ui-icon',
+ 'variants' => self::$commonImageVariants,
+ 'images' => self::$commonImageData,
+ ),
+ '.oo-ui-icon-add {
+ ...
+}
+.oo-ui-icon-add-invert {
+ ...
+}
+.oo-ui-icon-remove {
+ ...
+}
+.oo-ui-icon-remove-invert {
+ ...
+}
+.oo-ui-icon-remove-destructive {
+ ...
+}
+.oo-ui-icon-next {
+ ...
+}
+.oo-ui-icon-next-invert {
+ ...
+}
+.oo-ui-icon-help {
+ ...
+}
+.oo-ui-icon-help-invert {
+ ...
+}
+.oo-ui-icon-bold {
+ ...
+}
+.oo-ui-icon-bold-invert {
+ ...
+}',
+ ),
+ array(
+ array(
+ 'class' => 'ResourceLoaderImageModule',
+ 'selectorWithoutVariant' => '.mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
+ 'selectorWithVariant' => '.mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
+ 'variants' => self::$commonImageVariants,
+ 'images' => self::$commonImageData,
+ ),
+ '.mw-ui-icon-add:after, .mw-ui-icon-add:before {
+ ...
+}
+.mw-ui-icon-add-invert:after, .mw-ui-icon-add-invert:before {
+ ...
+}
+.mw-ui-icon-remove:after, .mw-ui-icon-remove:before {
+ ...
+}
+.mw-ui-icon-remove-invert:after, .mw-ui-icon-remove-invert:before {
+ ...
+}
+.mw-ui-icon-remove-destructive:after, .mw-ui-icon-remove-destructive:before {
+ ...
+}
+.mw-ui-icon-next:after, .mw-ui-icon-next:before {
+ ...
+}
+.mw-ui-icon-next-invert:after, .mw-ui-icon-next-invert:before {
+ ...
+}
+.mw-ui-icon-help:after, .mw-ui-icon-help:before {
+ ...
+}
+.mw-ui-icon-help-invert:after, .mw-ui-icon-help-invert:before {
+ ...
+}
+.mw-ui-icon-bold:after, .mw-ui-icon-bold:before {
+ ...
+}
+.mw-ui-icon-bold-invert:after, .mw-ui-icon-bold-invert:before {
+ ...
+}',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider providerGetModules
+ * @covers ResourceLoaderImageModule::getStyles
+ */
+ public function testGetStyles( $module, $expected ) {
+ $module = new ResourceLoaderImageModuleTestable( $module, __DIR__ . '/../../data/resourceloader' );
+ $styles = $module->getStyles( $this->getResourceLoaderContext() );
+ $this->assertEquals( $expected, $styles['all'] );
+ }
+}
+
+class ResourceLoaderImageModuleTestable extends ResourceLoaderImageModule {
+ /**
+ * Replace with a stub to make test cases easier to write.
+ */
+ protected function getCssDeclarations( $primary, $fallback ) {
+ return array( '...' );
+ }
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php
new file mode 100644
index 00000000..758cfe19
--- /dev/null
+++ b/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php
@@ -0,0 +1,122 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class ResourceLoaderImageTest extends ResourceLoaderTestCase {
+
+ protected $imagesPath;
+
+ protected function setUp() {
+ parent::setUp();
+ $this->imagesPath = __DIR__ . '/../../data/resourceloader';
+ }
+
+ protected function getTestImage( $name ) {
+ $options = ResourceLoaderImageModuleTest::$commonImageData[$name];
+ $fileDescriptor = is_string( $options ) ? $options : $options['file'];
+ $allowedVariants = is_array( $options ) && isset( $options['variants'] ) ? $options['variants'] : array();
+ $variants = array_fill_keys( $allowedVariants, array( 'color' => 'red' ) );
+ return new ResourceLoaderImageTestable( $name, 'test', $fileDescriptor, $this->imagesPath, $variants );
+ }
+
+ public static function provideGetPath() {
+ return array(
+ array( 'add', 'en', 'add.gif' ),
+ array( 'add', 'he', 'add.gif' ),
+ array( 'remove', 'en', 'remove.svg' ),
+ array( 'remove', 'he', 'remove.svg' ),
+ array( 'next', 'en', 'next.svg' ),
+ array( 'next', 'he', 'prev.svg' ),
+ array( 'help', 'en', 'help-ltr.svg' ),
+ array( 'help', 'ar', 'help-rtl.svg' ),
+ array( 'help', 'he', 'help-ltr.svg' ),
+ array( 'bold', 'en', 'bold-b.svg' ),
+ array( 'bold', 'de', 'bold-f.svg' ),
+ array( 'bold', 'ar', 'bold-f.svg' ),
+ array( 'bold', 'fr', 'bold-a.svg' ),
+ array( 'bold', 'he', 'bold-a.svg' ),
+ );
+ }
+
+ /**
+ * @covers ResourceLoaderImage::getPath
+ * @dataProvider provideGetPath
+ */
+ public function testGetPath( $imageName, $languageCode, $path ) {
+ static $dirMap = array(
+ 'en' => 'ltr',
+ 'de' => 'ltr',
+ 'fr' => 'ltr',
+ 'he' => 'rtl',
+ 'ar' => 'rtl',
+ );
+ static $contexts = array();
+
+ $image = $this->getTestImage( $imageName );
+ $context = $this->getResourceLoaderContext( $languageCode, $dirMap[$languageCode] );
+
+ $this->assertEquals( $image->getPath( $context ), $this->imagesPath . '/' . $path );
+ }
+
+ /**
+ * @covers ResourceLoaderImage::getExtension
+ * @covers ResourceLoaderImage::getMimeType
+ */
+ public function testGetExtension() {
+ $image = $this->getTestImage( 'remove' );
+ $this->assertEquals( $image->getExtension(), 'svg' );
+ $this->assertEquals( $image->getExtension( 'original' ), 'svg' );
+ $this->assertEquals( $image->getExtension( 'rasterized' ), 'png' );
+ $image = $this->getTestImage( 'add' );
+ $this->assertEquals( $image->getExtension(), 'gif' );
+ $this->assertEquals( $image->getExtension( 'original' ), 'gif' );
+ $this->assertEquals( $image->getExtension( 'rasterized' ), 'gif' );
+ }
+
+ /**
+ * @covers ResourceLoaderImage::getImageData
+ * @covers ResourceLoaderImage::variantize
+ * @covers ResourceLoaderImage::massageSvgPathdata
+ */
+ public function testGetImageData() {
+ $context = $this->getResourceLoaderContext( 'en', 'ltr' );
+
+ $image = $this->getTestImage( 'remove' );
+ $data = file_get_contents( $this->imagesPath . '/remove.svg' );
+ $dataConstructive = file_get_contents( $this->imagesPath . '/remove_variantize.svg' );
+ $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
+ $this->assertEquals( $image->getImageData( $context, 'destructive', 'original' ), $dataConstructive );
+ // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
+ $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), 'RASTERIZESTUB' );
+
+ $image = $this->getTestImage( 'add' );
+ $data = file_get_contents( $this->imagesPath . '/add.gif' );
+ $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
+ $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), $data );
+ }
+
+ /**
+ * @covers ResourceLoaderImage::massageSvgPathdata
+ */
+ public function testMassageSvgPathdata() {
+ $image = $this->getTestImage( 'next' );
+ $data = file_get_contents( $this->imagesPath . '/next.svg' );
+ $dataMassaged = file_get_contents( $this->imagesPath . '/next_massage.svg' );
+ $this->assertEquals( $image->massageSvgPathdata( $data ), $dataMassaged );
+ }
+}
+
+class ResourceLoaderImageTestable extends ResourceLoaderImage {
+ // Make some protected methods public
+ public function getPath( ResourceLoaderContext $context ) {
+ return parent::getPath( $context );
+ }
+ public function massageSvgPathdata( $svg ) {
+ return parent::massageSvgPathdata( $svg );
+ }
+ // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
+ public function rasterize( $svg ) {
+ return 'RASTERIZESTUB';
+ }
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
index b0edaaf7..6d1ed4e0 100644
--- a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
+++ b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
@@ -2,71 +2,12 @@
class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
- protected function setUp() {
- parent::setUp();
-
- // The return value of the closure shouldn't matter since this test should
- // never call it
- SkinFactory::getDefaultInstance()->register(
- 'fakeskin',
- 'FakeSkin',
- function () {
- }
- );
- }
-
- /**
- * @covers ResourceLoaderFileModule::getAllSkinStyleFiles
- */
- public function testGetAllSkinStyleFiles() {
- $context = self::getResourceLoaderContext();
-
- $baseParams = array(
- 'scripts' => array(
- 'foo.js',
- 'bar.js',
- ),
- 'styles' => array(
- 'foo.css',
- 'bar.css' => array( 'media' => 'print' ),
- 'screen.less' => array( 'media' => 'screen' ),
- 'screen-query.css' => array( 'media' => 'screen and (min-width: 400px)' ),
- ),
- 'skinStyles' => array(
- 'default' => 'quux-fallback.less',
- 'fakeskin' => array(
- 'baz-vector.css',
- 'quux-vector.less',
- ),
- ),
- 'messages' => array(
- 'hello',
- 'world',
- ),
- );
-
- $module = new ResourceLoaderFileModule( $baseParams );
-
- $this->assertEquals(
- array(
- 'foo.css',
- 'baz-vector.css',
- 'quux-vector.less',
- 'quux-fallback.less',
- 'bar.css',
- 'screen.less',
- 'screen-query.css',
- ),
- array_map( 'basename', $module->getAllStyleFiles() )
- );
- }
-
/**
* @covers ResourceLoaderModule::getDefinitionSummary
* @covers ResourceLoaderFileModule::getDefinitionSummary
*/
public function testDefinitionSummary() {
- $context = self::getResourceLoaderContext();
+ $context = $this->getResourceLoaderContext();
$baseParams = array(
'scripts' => array( 'foo.js', 'bar.js' ),
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php
new file mode 100644
index 00000000..7f3506cc
--- /dev/null
+++ b/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php
@@ -0,0 +1,388 @@
+<?php
+
+class ResourceLoaderStartUpModuleTest extends ResourceLoaderTestCase {
+
+ public static function provideGetModuleRegistrations() {
+ return array(
+ array( array(
+ 'msg' => 'Empty registry',
+ 'modules' => array(),
+ 'out' => '
+mw.loader.addSource( {
+ "local": "/w/load.php"
+} );mw.loader.register( [] );'
+ ) ),
+ array( array(
+ 'msg' => 'Basic registry',
+ 'modules' => array(
+ 'test.blank' => new ResourceLoaderTestModule(),
+ ),
+ 'out' => '
+mw.loader.addSource( {
+ "local": "/w/load.php"
+} );mw.loader.register( [
+ [
+ "test.blank",
+ 1388534400
+ ]
+] );',
+ ) ),
+ array( array(
+ 'msg' => 'Group signature',
+ 'modules' => array(
+ 'test.blank' => new ResourceLoaderTestModule(),
+ 'test.group.foo' => new ResourceLoaderTestModule( array( 'group' => 'x-foo' ) ),
+ 'test.group.bar' => new ResourceLoaderTestModule( array( 'group' => 'x-bar' ) ),
+ ),
+ 'out' => '
+mw.loader.addSource( {
+ "local": "/w/load.php"
+} );mw.loader.register( [
+ [
+ "test.blank",
+ 1388534400
+ ],
+ [
+ "test.group.foo",
+ 1388534400,
+ [],
+ "x-foo"
+ ],
+ [
+ "test.group.bar",
+ 1388534400,
+ [],
+ "x-bar"
+ ]
+] );'
+ ) ),
+ array( array(
+ 'msg' => 'Different target (non-test should not be registered)',
+ 'modules' => array(
+ 'test.blank' => new ResourceLoaderTestModule(),
+ 'test.target.foo' => new ResourceLoaderTestModule( array( 'targets' => array( 'x-foo' ) ) ),
+ ),
+ 'out' => '
+mw.loader.addSource( {
+ "local": "/w/load.php"
+} );mw.loader.register( [
+ [
+ "test.blank",
+ 1388534400
+ ]
+] );'
+ ) ),
+ array( array(
+ 'msg' => 'Foreign source',
+ 'sources' => array(
+ 'example' => array(
+ 'loadScript' => 'http://example.org/w/load.php',
+ 'apiScript' => 'http://example.org/w/api.php',
+ ),
+ ),
+ 'modules' => array(
+ 'test.blank' => new ResourceLoaderTestModule( array( 'source' => 'example' ) ),
+ ),
+ 'out' => '
+mw.loader.addSource( {
+ "local": "/w/load.php",
+ "example": "http://example.org/w/load.php"
+} );mw.loader.register( [
+ [
+ "test.blank",
+ 1388534400,
+ [],
+ null,
+ "example"
+ ]
+] );'
+ ) ),
+ array( array(
+ 'msg' => 'Conditional dependency function',
+ 'modules' => array(
+ 'test.x.core' => new ResourceLoaderTestModule(),
+ 'test.x.polyfill' => new ResourceLoaderTestModule( array(
+ 'skipFunction' => 'return true;'
+ ) ),
+ 'test.y.polyfill' => new ResourceLoaderTestModule( array(
+ 'skipFunction' =>
+ 'return !!(' .
+ ' window.JSON &&' .
+ ' JSON.parse &&' .
+ ' JSON.stringify' .
+ ');'
+ ) ),
+ 'test.z.foo' => new ResourceLoaderTestModule( array(
+ 'dependencies' => array(
+ 'test.x.core',
+ 'test.x.polyfill',
+ 'test.y.polyfill',
+ ),
+ ) ),
+ ),
+ 'out' => '
+mw.loader.addSource( {
+ "local": "/w/load.php"
+} );mw.loader.register( [
+ [
+ "test.x.core",
+ 1388534400
+ ],
+ [
+ "test.x.polyfill",
+ 1388534400,
+ [],
+ null,
+ null,
+ "return true;"
+ ],
+ [
+ "test.y.polyfill",
+ 1388534400,
+ [],
+ null,
+ null,
+ "return !!( window.JSON \u0026\u0026 JSON.parse \u0026\u0026 JSON.stringify);"
+ ],
+ [
+ "test.z.foo",
+ 1388534400,
+ [
+ 0,
+ 1,
+ 2
+ ]
+ ]
+] );',
+ ) ),
+ array( array(
+ // This may seem like an edge case, but a plain MediaWiki core install
+ // with a few extensions installed is likely far more complex than this
+ // even, not to mention an install like Wikipedia.
+ // TODO: Make this even more realistic.
+ 'msg' => 'Advanced (everything combined)',
+ 'sources' => array(
+ 'example' => array(
+ 'loadScript' => 'http://example.org/w/load.php',
+ 'apiScript' => 'http://example.org/w/api.php',
+ ),
+ ),
+ 'modules' => array(
+ 'test.blank' => new ResourceLoaderTestModule(),
+ 'test.x.core' => new ResourceLoaderTestModule(),
+ 'test.x.util' => new ResourceLoaderTestModule( array(
+ 'dependencies' => array(
+ 'test.x.core',
+ ),
+ ) ),
+ 'test.x.foo' => new ResourceLoaderTestModule( array(
+ 'dependencies' => array(
+ 'test.x.core',
+ ),
+ ) ),
+ 'test.x.bar' => new ResourceLoaderTestModule( array(
+ 'dependencies' => array(
+ 'test.x.core',
+ 'test.x.util',
+ ),
+ ) ),
+ 'test.x.quux' => new ResourceLoaderTestModule( array(
+ 'dependencies' => array(
+ 'test.x.foo',
+ 'test.x.bar',
+ 'test.x.util',
+ 'test.x.unknown',
+ ),
+ ) ),
+ 'test.group.foo.1' => new ResourceLoaderTestModule( array(
+ 'group' => 'x-foo',
+ ) ),
+ 'test.group.foo.2' => new ResourceLoaderTestModule( array(
+ 'group' => 'x-foo',
+ ) ),
+ 'test.group.bar.1' => new ResourceLoaderTestModule( array(
+ 'group' => 'x-bar',
+ ) ),
+ 'test.group.bar.2' => new ResourceLoaderTestModule( array(
+ 'group' => 'x-bar',
+ 'source' => 'example',
+ ) ),
+ 'test.target.foo' => new ResourceLoaderTestModule( array(
+ 'targets' => array( 'x-foo' ),
+ ) ),
+ 'test.target.bar' => new ResourceLoaderTestModule( array(
+ 'source' => 'example',
+ 'targets' => array( 'x-foo' ),
+ ) ),
+ ),
+ 'out' => '
+mw.loader.addSource( {
+ "local": "/w/load.php",
+ "example": "http://example.org/w/load.php"
+} );mw.loader.register( [
+ [
+ "test.blank",
+ 1388534400
+ ],
+ [
+ "test.x.core",
+ 1388534400
+ ],
+ [
+ "test.x.util",
+ 1388534400,
+ [
+ 1
+ ]
+ ],
+ [
+ "test.x.foo",
+ 1388534400,
+ [
+ 1
+ ]
+ ],
+ [
+ "test.x.bar",
+ 1388534400,
+ [
+ 2
+ ]
+ ],
+ [
+ "test.x.quux",
+ 1388534400,
+ [
+ 3,
+ 4,
+ "test.x.unknown"
+ ]
+ ],
+ [
+ "test.group.foo.1",
+ 1388534400,
+ [],
+ "x-foo"
+ ],
+ [
+ "test.group.foo.2",
+ 1388534400,
+ [],
+ "x-foo"
+ ],
+ [
+ "test.group.bar.1",
+ 1388534400,
+ [],
+ "x-bar"
+ ],
+ [
+ "test.group.bar.2",
+ 1388534400,
+ [],
+ "x-bar",
+ "example"
+ ]
+] );'
+ ) ),
+ );
+ }
+
+ /**
+ * @dataProvider provideGetModuleRegistrations
+ * @covers ResourceLoaderStartUpModule::compileUnresolvedDependencies
+ * @covers ResourceLoaderStartUpModule::getModuleRegistrations
+ * @covers ResourceLoader::makeLoaderSourcesScript
+ * @covers ResourceLoader::makeLoaderRegisterScript
+ */
+ public function testGetModuleRegistrations( $case ) {
+ if ( isset( $case['sources'] ) ) {
+ $this->setMwGlobals( 'wgResourceLoaderSources', $case['sources'] );
+ }
+
+ $context = $this->getResourceLoaderContext();
+ $rl = $context->getResourceLoader();
+
+ $rl->register( $case['modules'] );
+
+ $module = new ResourceLoaderStartUpModule();
+ $this->assertEquals(
+ ltrim( $case['out'], "\n" ),
+ $module->getModuleRegistrations( $context ),
+ $case['msg']
+ );
+ }
+
+ public static function provideRegistrations() {
+ return array(
+ array( array(
+ 'test.blank' => new ResourceLoaderTestModule(),
+ 'test.min' => new ResourceLoaderTestModule( array(
+ 'skipFunction' =>
+ 'return !!(' .
+ ' window.JSON &&' .
+ ' JSON.parse &&' .
+ ' JSON.stringify' .
+ ');',
+ 'dependencies' => array(
+ 'test.blank',
+ ),
+ ) ),
+ ) )
+ );
+ }
+ /**
+ * @dataProvider provideRegistrations
+ */
+ public function testRegistrationsMinified( $modules ) {
+ $this->setMwGlobals( 'wgResourceLoaderDebug', false );
+
+ $context = $this->getResourceLoaderContext();
+ $rl = $context->getResourceLoader();
+ $rl->register( $modules );
+ $module = new ResourceLoaderStartUpModule();
+ $this->assertEquals(
+'mw.loader.addSource({"local":"/w/load.php"});'
+. 'mw.loader.register(['
+. '["test.blank",1388534400],'
+. '["test.min",1388534400,[0],null,null,'
+. '"return!!(window.JSON\u0026\u0026JSON.parse\u0026\u0026JSON.stringify);"'
+. ']]);',
+ $module->getModuleRegistrations( $context ),
+ 'Minified output'
+ );
+ }
+
+ /**
+ * @dataProvider provideRegistrations
+ */
+ public function testRegistrationsUnminified( $modules ) {
+ $context = $this->getResourceLoaderContext();
+ $rl = $context->getResourceLoader();
+ $rl->register( $modules );
+ $module = new ResourceLoaderStartUpModule();
+ $this->assertEquals(
+'mw.loader.addSource( {
+ "local": "/w/load.php"
+} );mw.loader.register( [
+ [
+ "test.blank",
+ 1388534400
+ ],
+ [
+ "test.min",
+ 1388534400,
+ [
+ 0
+ ],
+ null,
+ null,
+ "return !!( window.JSON \u0026\u0026 JSON.parse \u0026\u0026 JSON.stringify);"
+ ]
+] );',
+ $module->getModuleRegistrations( $context ),
+ 'Unminified output'
+ );
+ }
+
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php
deleted file mode 100644
index a1893873..00000000
--- a/tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php
+++ /dev/null
@@ -1,388 +0,0 @@
-<?php
-
-class ResourceLoaderStartupModuleTest extends ResourceLoaderTestCase {
-
- public static function provideGetModuleRegistrations() {
- return array(
- array( array(
- 'msg' => 'Empty registry',
- 'modules' => array(),
- 'out' => '
-mw.loader.addSource( {
- "local": "/w/load.php"
-} );mw.loader.register( [] );'
- ) ),
- array( array(
- 'msg' => 'Basic registry',
- 'modules' => array(
- 'test.blank' => new ResourceLoaderTestModule(),
- ),
- 'out' => '
-mw.loader.addSource( {
- "local": "/w/load.php"
-} );mw.loader.register( [
- [
- "test.blank",
- "1388534400"
- ]
-] );',
- ) ),
- array( array(
- 'msg' => 'Group signature',
- 'modules' => array(
- 'test.blank' => new ResourceLoaderTestModule(),
- 'test.group.foo' => new ResourceLoaderTestModule( array( 'group' => 'x-foo' ) ),
- 'test.group.bar' => new ResourceLoaderTestModule( array( 'group' => 'x-bar' ) ),
- ),
- 'out' => '
-mw.loader.addSource( {
- "local": "/w/load.php"
-} );mw.loader.register( [
- [
- "test.blank",
- "1388534400"
- ],
- [
- "test.group.foo",
- "1388534400",
- [],
- "x-foo"
- ],
- [
- "test.group.bar",
- "1388534400",
- [],
- "x-bar"
- ]
-] );'
- ) ),
- array( array(
- 'msg' => 'Different target (non-test should not be registered)',
- 'modules' => array(
- 'test.blank' => new ResourceLoaderTestModule(),
- 'test.target.foo' => new ResourceLoaderTestModule( array( 'targets' => array( 'x-foo' ) ) ),
- ),
- 'out' => '
-mw.loader.addSource( {
- "local": "/w/load.php"
-} );mw.loader.register( [
- [
- "test.blank",
- "1388534400"
- ]
-] );'
- ) ),
- array( array(
- 'msg' => 'Foreign source',
- 'sources' => array(
- 'example' => array(
- 'loadScript' => 'http://example.org/w/load.php',
- 'apiScript' => 'http://example.org/w/api.php',
- ),
- ),
- 'modules' => array(
- 'test.blank' => new ResourceLoaderTestModule( array( 'source' => 'example' ) ),
- ),
- 'out' => '
-mw.loader.addSource( {
- "local": "/w/load.php",
- "example": "http://example.org/w/load.php"
-} );mw.loader.register( [
- [
- "test.blank",
- "1388534400",
- [],
- null,
- "example"
- ]
-] );'
- ) ),
- array( array(
- 'msg' => 'Conditional dependency function',
- 'modules' => array(
- 'test.x.core' => new ResourceLoaderTestModule(),
- 'test.x.polyfill' => new ResourceLoaderTestModule( array(
- 'skipFunction' => 'return true;'
- ) ),
- 'test.y.polyfill' => new ResourceLoaderTestModule( array(
- 'skipFunction' =>
- 'return !!(' .
- ' window.JSON &&' .
- ' JSON.parse &&' .
- ' JSON.stringify' .
- ');'
- ) ),
- 'test.z.foo' => new ResourceLoaderTestModule( array(
- 'dependencies' => array(
- 'test.x.core',
- 'test.x.polyfil',
- 'test.y.polyfil',
- ),
- ) ),
- ),
- 'out' => '
-mw.loader.addSource( {
- "local": "/w/load.php"
-} );mw.loader.register( [
- [
- "test.x.core",
- "1388534400"
- ],
- [
- "test.x.polyfill",
- "1388534400",
- [],
- null,
- "local",
- "return true;"
- ],
- [
- "test.y.polyfill",
- "1388534400",
- [],
- null,
- "local",
- "return !!( window.JSON \u0026\u0026 JSON.parse \u0026\u0026 JSON.stringify);"
- ],
- [
- "test.z.foo",
- "1388534400",
- [
- "test.x.core",
- "test.x.polyfil",
- "test.y.polyfil"
- ]
- ]
-] );',
- ) ),
- array( array(
- // This may seem like an edge case, but a plain MediaWiki core install
- // with a few extensions installed is likely far more complex than this
- // even, not to mention an install like Wikipedia.
- // TODO: Make this even more realistic.
- 'msg' => 'Advanced (everything combined)',
- 'sources' => array(
- 'example' => array(
- 'loadScript' => 'http://example.org/w/load.php',
- 'apiScript' => 'http://example.org/w/api.php',
- ),
- ),
- 'modules' => array(
- 'test.blank' => new ResourceLoaderTestModule(),
- 'test.x.core' => new ResourceLoaderTestModule(),
- 'test.x.util' => new ResourceLoaderTestModule( array(
- 'dependencies' => array(
- 'test.x.core',
- ),
- ) ),
- 'test.x.foo' => new ResourceLoaderTestModule( array(
- 'dependencies' => array(
- 'test.x.core',
- ),
- ) ),
- 'test.x.bar' => new ResourceLoaderTestModule( array(
- 'dependencies' => array(
- 'test.x.core',
- 'test.x.util',
- ),
- ) ),
- 'test.x.quux' => new ResourceLoaderTestModule( array(
- 'dependencies' => array(
- 'test.x.foo',
- 'test.x.bar',
- 'test.x.util',
- 'test.x.unknown',
- ),
- ) ),
- 'test.group.foo.1' => new ResourceLoaderTestModule( array(
- 'group' => 'x-foo',
- ) ),
- 'test.group.foo.2' => new ResourceLoaderTestModule( array(
- 'group' => 'x-foo',
- ) ),
- 'test.group.bar.1' => new ResourceLoaderTestModule( array(
- 'group' => 'x-bar',
- ) ),
- 'test.group.bar.2' => new ResourceLoaderTestModule( array(
- 'group' => 'x-bar',
- 'source' => 'example',
- ) ),
- 'test.target.foo' => new ResourceLoaderTestModule( array(
- 'targets' => array( 'x-foo' ),
- ) ),
- 'test.target.bar' => new ResourceLoaderTestModule( array(
- 'source' => 'example',
- 'targets' => array( 'x-foo' ),
- ) ),
- ),
- 'out' => '
-mw.loader.addSource( {
- "local": "/w/load.php",
- "example": "http://example.org/w/load.php"
-} );mw.loader.register( [
- [
- "test.blank",
- "1388534400"
- ],
- [
- "test.x.core",
- "1388534400"
- ],
- [
- "test.x.util",
- "1388534400",
- [
- "test.x.core"
- ]
- ],
- [
- "test.x.foo",
- "1388534400",
- [
- "test.x.core"
- ]
- ],
- [
- "test.x.bar",
- "1388534400",
- [
- "test.x.util"
- ]
- ],
- [
- "test.x.quux",
- "1388534400",
- [
- "test.x.foo",
- "test.x.bar",
- "test.x.unknown"
- ]
- ],
- [
- "test.group.foo.1",
- "1388534400",
- [],
- "x-foo"
- ],
- [
- "test.group.foo.2",
- "1388534400",
- [],
- "x-foo"
- ],
- [
- "test.group.bar.1",
- "1388534400",
- [],
- "x-bar"
- ],
- [
- "test.group.bar.2",
- "1388534400",
- [],
- "x-bar",
- "example"
- ]
-] );'
- ) ),
- );
- }
-
- /**
- * @dataProvider provideGetModuleRegistrations
- * @covers ResourceLoaderStartupModule::optimizeDependencies
- * @covers ResourceLoaderStartUpModule::getModuleRegistrations
- * @covers ResourceLoader::makeLoaderSourcesScript
- * @covers ResourceLoader::makeLoaderRegisterScript
- */
- public function testGetModuleRegistrations( $case ) {
- if ( isset( $case['sources'] ) ) {
- $this->setMwGlobals( 'wgResourceLoaderSources', $case['sources'] );
- }
-
- $context = self::getResourceLoaderContext();
- $rl = $context->getResourceLoader();
-
- $rl->register( $case['modules'] );
-
- $module = new ResourceLoaderStartUpModule();
- $this->assertEquals(
- ltrim( $case['out'], "\n" ),
- $module->getModuleRegistrations( $context ),
- $case['msg']
- );
- }
-
- public static function provideRegistrations() {
- return array(
- array( array(
- 'test.blank' => new ResourceLoaderTestModule(),
- 'test.min' => new ResourceLoaderTestModule( array(
- 'skipFunction' =>
- 'return !!(' .
- ' window.JSON &&' .
- ' JSON.parse &&' .
- ' JSON.stringify' .
- ');',
- 'dependencies' => array(
- 'test.blank',
- ),
- ) ),
- ) )
- );
- }
- /**
- * @dataProvider provideRegistrations
- */
- public function testRegistrationsMinified( $modules ) {
- $this->setMwGlobals( 'wgResourceLoaderDebug', false );
-
- $context = self::getResourceLoaderContext();
- $rl = $context->getResourceLoader();
- $rl->register( $modules );
- $module = new ResourceLoaderStartUpModule();
- $this->assertEquals(
-'mw.loader.addSource({"local":"/w/load.php"});'
-. 'mw.loader.register(['
-. '["test.blank","1388534400"],'
-. '["test.min","1388534400",["test.blank"],null,"local",'
-. '"return!!(window.JSON\u0026\u0026JSON.parse\u0026\u0026JSON.stringify);"'
-. ']]);',
- $module->getModuleRegistrations( $context ),
- 'Minified output'
- );
- }
-
- /**
- * @dataProvider provideRegistrations
- */
- public function testRegistrationsUnminified( $modules ) {
- $context = self::getResourceLoaderContext();
- $rl = $context->getResourceLoader();
- $rl->register( $modules );
- $module = new ResourceLoaderStartUpModule();
- $this->assertEquals(
-'mw.loader.addSource( {
- "local": "/w/load.php"
-} );mw.loader.register( [
- [
- "test.blank",
- "1388534400"
- ],
- [
- "test.min",
- "1388534400",
- [
- "test.blank"
- ],
- null,
- "local",
- "return !!( window.JSON \u0026\u0026 JSON.parse \u0026\u0026 JSON.stringify);"
- ]
-] );',
- $module->getModuleRegistrations( $context ),
- 'Unminified output'
- );
- }
-
-}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
index f19f6886..ca7307ec 100644
--- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
+++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
@@ -2,13 +2,9 @@
class ResourceLoaderTest extends ResourceLoaderTestCase {
- protected static $resourceLoaderRegisterModulesHook;
-
protected function setUp() {
parent::setUp();
- // $wgResourceLoaderLESSFunctions, $wgResourceLoaderLESSImportPaths; $wgResourceLoaderLESSVars;
-
$this->setMwGlobals( array(
'wgResourceLoaderLESSFunctions' => array(
'test-sum' => function ( $frame, $less ) {
@@ -30,35 +26,33 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
) );
}
- /* Hook Methods */
-
- /**
- * ResourceLoaderRegisterModules hook
- */
- public static function resourceLoaderRegisterModules( &$resourceLoader ) {
- self::$resourceLoaderRegisterModulesHook = true;
-
- return true;
- }
-
- /* Provider Methods */
public static function provideValidModules() {
return array(
array( 'TEST.validModule1', new ResourceLoaderTestModule() ),
);
}
- /* Test Methods */
-
/**
* Ensures that the ResourceLoaderRegisterModules hook is called when a new
* ResourceLoader object is constructed.
* @covers ResourceLoader::__construct
*/
public function testCreatingNewResourceLoaderCallsRegistrationHook() {
- self::$resourceLoaderRegisterModulesHook = false;
+ $resourceLoaderRegisterModulesHook = false;
+
+ $this->setMwGlobals( 'wgHooks', array(
+ 'ResourceLoaderRegisterModules' => array(
+ function ( &$resourceLoader ) use ( &$resourceLoaderRegisterModulesHook ) {
+ $resourceLoaderRegisterModulesHook = true;
+ }
+ )
+ ) );
+
$resourceLoader = new ResourceLoader();
- $this->assertTrue( self::$resourceLoaderRegisterModulesHook );
+ $this->assertTrue(
+ $resourceLoaderRegisterModulesHook,
+ 'Hook ResourceLoaderRegisterModules called'
+ );
return $resourceLoader;
}
@@ -80,7 +74,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
* @covers ResourceLoaderFileModule::compileLessFile
*/
public function testLessFileCompilation() {
- $context = self::getResourceLoaderContext();
+ $context = $this->getResourceLoaderContext();
$basePath = __DIR__ . '/../../data/less/module';
$module = new ResourceLoaderFileModule( array(
'localBasePath' => $basePath,
@@ -96,43 +90,11 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
* @param string $css
* @return string
*/
- private function stripNoflip( $css ) {
+ private static function stripNoflip( $css ) {
return str_replace( '/*@noflip*/ ', '', $css );
}
/**
- * What happens when you mix @embed and @noflip?
- * This really is an integration test, but oh well.
- */
- public function testMixedCssAnnotations( ) {
- $basePath = __DIR__ . '/../../data/css';
- $testModule = new ResourceLoaderFileModule( array(
- 'localBasePath' => $basePath,
- 'styles' => array( 'test.css' ),
- ) );
- $expectedModule = new ResourceLoaderFileModule( array(
- 'localBasePath' => $basePath,
- 'styles' => array( 'expected.css' ),
- ) );
-
- $contextLtr = self::getResourceLoaderContext( 'en' );
- $contextRtl = self::getResourceLoaderContext( 'he' );
-
- // Since we want to compare the effect of @noflip+@embed against the effect of just @embed, and
- // the @noflip annotations are always preserved, we need to strip them first.
- $this->assertEquals(
- $expectedModule->getStyles( $contextLtr ),
- $this->stripNoflip( $testModule->getStyles( $contextLtr ) ),
- "/*@noflip*/ with /*@embed*/ gives correct results in LTR mode"
- );
- $this->assertEquals(
- $expectedModule->getStyles( $contextLtr ),
- $this->stripNoflip( $testModule->getStyles( $contextRtl ) ),
- "/*@noflip*/ with /*@embed*/ gives correct results in RTL mode"
- );
- }
-
- /**
* @dataProvider providePackedModules
* @covers ResourceLoader::makePackedModulesString
*/
@@ -193,6 +155,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
/**
* @dataProvider provideAddSource
* @covers ResourceLoader::addSource
+ * @covers ResourceLoader::getSources
*/
public function testAddSource( $name, $info, $expected ) {
$rl = new ResourceLoader;
@@ -223,6 +186,106 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
);
}
+ public static function provideLoaderImplement() {
+ return array(
+ array( array(
+ 'title' => 'Implement scripts, styles and messages',
+
+ 'name' => 'test.example',
+ 'scripts' => 'mw.example();',
+ 'styles' => array( 'css' => array( '.mw-example {}' ) ),
+ 'messages' => array( 'example' => '' ),
+ 'templates' => array(),
+
+ 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+mw.example();
+}, {
+ "css": [
+ ".mw-example {}"
+ ]
+}, {
+ "example": ""
+} );',
+ ) ),
+ array( array(
+ 'title' => 'Implement scripts',
+
+ 'name' => 'test.example',
+ 'scripts' => 'mw.example();',
+ 'styles' => array(),
+ 'messages' => new XmlJsCode( '{}' ),
+ 'templates' => array(),
+ 'title' => 'scripts, styles and messags',
+
+ 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+mw.example();
+} );',
+ ) ),
+ array( array(
+ 'title' => 'Implement styles',
+
+ 'name' => 'test.example',
+ 'scripts' => array(),
+ 'styles' => array( 'css' => array( '.mw-example {}' ) ),
+ 'messages' => new XmlJsCode( '{}' ),
+ 'templates' => array(),
+
+ 'expected' => 'mw.loader.implement( "test.example", [], {
+ "css": [
+ ".mw-example {}"
+ ]
+} );',
+ ) ),
+ array( array(
+ 'title' => 'Implement scripts and messages',
+
+ 'name' => 'test.example',
+ 'scripts' => 'mw.example();',
+ 'styles' => array(),
+ 'messages' => array( 'example' => '' ),
+ 'templates' => array(),
+
+ 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+mw.example();
+}, {}, {
+ "example": ""
+} );',
+ ) ),
+ array( array(
+ 'title' => 'Implement scripts and templates',
+
+ 'name' => 'test.example',
+ 'scripts' => 'mw.example();',
+ 'styles' => array(),
+ 'messages' => new XmlJsCode( '{}' ),
+ 'templates' => array( 'example.html' => '' ),
+
+ 'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+mw.example();
+}, {}, {}, {
+ "example.html": ""
+} );',
+ ) ),
+ );
+ }
+
+ /**
+ * @dataProvider provideLoaderImplement
+ * @covers ResourceLoader::makeLoaderImplementScript
+ */
+ public function testMakeLoaderImplementScript( $case ) {
+ $this->assertEquals(
+ $case['expected'],
+ ResourceLoader::makeLoaderImplementScript(
+ $case['name'],
+ $case['scripts'],
+ $case['styles'],
+ $case['messages'],
+ $case['templates']
+ )
+ );
+ }
+
/**
* @covers ResourceLoader::getLoadScript
*/
@@ -242,8 +305,14 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
$this->assertTrue( true );
}
}
-}
-/* Hooks */
-global $wgHooks;
-$wgHooks['ResourceLoaderRegisterModules'][] = 'ResourceLoaderTest::resourceLoaderRegisterModules';
+ /**
+ * @covers ResourceLoader::isModuleRegistered
+ */
+ public function testIsModuleRegistered() {
+ $rl = new ResourceLoader();
+ $rl->register( 'test.module', new ResourceLoaderTestModule() );
+ $this->assertTrue( $rl->isModuleRegistered( 'test.module' ) );
+ $this->assertFalse( $rl->isModuleRegistered( 'test.modulenotregistered' ) );
+ }
+}
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
index 9dc18050..93a3ebba 100644
--- a/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
+++ b/tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
@@ -3,11 +3,93 @@
class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
/**
+ * @covers ResourceLoaderWikiModule::__construct
+ * @dataProvider provideConstructor
+ */
+ public function testConstructor( $params ) {
+ $module = new ResourceLoaderWikiModule( $params );
+ $this->assertInstanceOf( 'ResourceLoaderWikiModule', $module );
+ }
+
+ public static function provideConstructor() {
+ return array(
+ // Nothing
+ array( null ),
+ array( array() ),
+ // Unrecognized settings
+ array( array( 'foo' => 'baz' ) ),
+ // Real settings
+ array( array( 'scripts' => array( 'MediaWiki:Common.js' ) ) ),
+ );
+ }
+
+ /**
+ * @dataProvider provideGetPages
+ * @covers ResourceLoaderWikiModule::getPages
+ */
+ public function testGetPages( $params, Config $config, $expected ) {
+ $module = new ResourceLoaderWikiModule( $params );
+ $module->setConfig( $config );
+
+ // Use getDefinitionSummary because getPages is protected
+ $summary = $module->getDefinitionSummary( ResourceLoaderContext::newDummyContext() );
+ $this->assertEquals(
+ $expected,
+ $summary['pages']
+ );
+ }
+
+ public static function provideGetPages() {
+ $settings = array(
+ 'UseSiteJs' => true,
+ 'UseSiteCss' => true,
+ );
+
+ $params = array(
+ 'styles' => array( 'MediaWiki:Common.css' ),
+ 'scripts' => array( 'MediaWiki:Common.js' ),
+ );
+
+ return array(
+ array( array(), new HashConfig( $settings ), array() ),
+ array( $params, new HashConfig( $settings ), array(
+ 'MediaWiki:Common.js' => array( 'type' => 'script' ),
+ 'MediaWiki:Common.css' => array( 'type' => 'style' )
+ ) ),
+ array( $params, new HashConfig( array( 'UseSiteCss' => false ) + $settings ), array(
+ 'MediaWiki:Common.js' => array( 'type' => 'script' ),
+ ) ),
+ array( $params, new HashConfig( array( 'UseSiteJs' => false ) + $settings ), array(
+ 'MediaWiki:Common.css' => array( 'type' => 'style' ),
+ ) ),
+ array( $params, new HashConfig( array( 'UseSiteJs' => false, 'UseSiteCss' => false ) ), array() ),
+ );
+ }
+
+ /**
+ * @covers ResourceLoaderWikiModule::getGroup
+ * @dataProvider provideGetGroup
+ */
+ public function testGetGroup( $params, $expected ) {
+ $module = new ResourceLoaderWikiModule( $params );
+ $this->assertEquals( $expected, $module->getGroup() );
+ }
+
+ public static function provideGetGroup() {
+ return array(
+ // No group specified
+ array( array(), null ),
+ // A random group
+ array( array( 'group' => 'foobar' ), 'foobar' ),
+ );
+ }
+
+ /**
* @covers ResourceLoaderWikiModule::isKnownEmpty
* @dataProvider provideIsKnownEmpty
*/
public function testIsKnownEmpty( $titleInfo, $group, $expected ) {
- $module = $this->getMockBuilder( 'ResourceLoaderWikiModuleTestModule' )
+ $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
->setMethods( array( 'getTitleInfo', 'getGroup' ) )
->getMock();
$module->expects( $this->any() )
diff --git a/tests/phpunit/includes/resourceloader/templates/template.html b/tests/phpunit/includes/resourceloader/templates/template.html
new file mode 100644
index 00000000..1f6a7d22
--- /dev/null
+++ b/tests/phpunit/includes/resourceloader/templates/template.html
@@ -0,0 +1 @@
+<strong>hello</strong>
diff --git a/tests/phpunit/includes/resourceloader/templates/template2.html b/tests/phpunit/includes/resourceloader/templates/template2.html
new file mode 100644
index 00000000..a322f67d
--- /dev/null
+++ b/tests/phpunit/includes/resourceloader/templates/template2.html
@@ -0,0 +1 @@
+<div>goodbye</div>
diff --git a/tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars b/tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars
new file mode 100644
index 00000000..5f5c07d5
--- /dev/null
+++ b/tests/phpunit/includes/resourceloader/templates/template_awesome.handlebars
@@ -0,0 +1 @@
+wow
diff --git a/tests/phpunit/includes/search/SearchEngineTest.php b/tests/phpunit/includes/search/SearchEngineTest.php
index 3da13615..d0cbfa0a 100644
--- a/tests/phpunit/includes/search/SearchEngineTest.php
+++ b/tests/phpunit/includes/search/SearchEngineTest.php
@@ -14,8 +14,6 @@ class SearchEngineTest extends MediaWikiLangTestCase {
*/
protected $search;
- protected $pageList;
-
/**
* Checks for database type & version.
* Will skip current test if DB does not support search.
@@ -37,10 +35,6 @@ class SearchEngineTest extends MediaWikiLangTestCase {
'wgSearchType' => $searchType
) );
- if ( !isset( self::$pageList ) ) {
- $this->addPages();
- }
-
$this->search = new $searchType( $this->db );
}
@@ -50,33 +44,32 @@ class SearchEngineTest extends MediaWikiLangTestCase {
parent::tearDown();
}
- protected function addPages() {
+ public function addDBData() {
if ( !$this->isWikitextNS( NS_MAIN ) ) {
// @todo cover the case of non-wikitext content in the main namespace
return;
}
- $this->insertPage( "Not_Main_Page", "This is not a main page", 0 );
+ $this->insertPage( 'Not_Main_Page', 'This is not a main page' );
$this->insertPage(
'Talk:Not_Main_Page',
- 'This is not a talk page to the main page, see [[smithee]]',
- 1
+ 'This is not a talk page to the main page, see [[smithee]]'
);
- $this->insertPage( 'Smithee', 'A smithee is one who smiths. See also [[Alan Smithee]]', 0 );
- $this->insertPage( 'Talk:Smithee', 'This article sucks.', 1 );
- $this->insertPage( 'Unrelated_page', 'Nothing in this page is about the S word.', 0 );
- $this->insertPage( 'Another_page', 'This page also is unrelated.', 0 );
- $this->insertPage( 'Help:Help', 'Help me!', 4 );
- $this->insertPage( 'Thppt', 'Blah blah', 0 );
- $this->insertPage( 'Alan_Smithee', 'yum', 0 );
- $this->insertPage( 'Pages', 'are\'food', 0 );
- $this->insertPage( 'HalfOneUp', 'AZ', 0 );
- $this->insertPage( 'FullOneUp', 'AZ', 0 );
- $this->insertPage( 'HalfTwoLow', 'az', 0 );
- $this->insertPage( 'FullTwoLow', 'az', 0 );
- $this->insertPage( 'HalfNumbers', '1234567890', 0 );
- $this->insertPage( 'FullNumbers', '1234567890', 0 );
- $this->insertPage( 'DomainName', 'example.com', 0 );
+ $this->insertPage( 'Smithee', 'A smithee is one who smiths. See also [[Alan Smithee]]' );
+ $this->insertPage( 'Talk:Smithee', 'This article sucks.' );
+ $this->insertPage( 'Unrelated_page', 'Nothing in this page is about the S word.' );
+ $this->insertPage( 'Another_page', 'This page also is unrelated.' );
+ $this->insertPage( 'Help:Help', 'Help me!' );
+ $this->insertPage( 'Thppt', 'Blah blah' );
+ $this->insertPage( 'Alan_Smithee', 'yum' );
+ $this->insertPage( 'Pages', 'are\'food' );
+ $this->insertPage( 'HalfOneUp', 'AZ' );
+ $this->insertPage( 'FullOneUp', 'AZ' );
+ $this->insertPage( 'HalfTwoLow', 'az' );
+ $this->insertPage( 'FullTwoLow', 'az' );
+ $this->insertPage( 'HalfNumbers', '1234567890' );
+ $this->insertPage( 'FullNumbers', '1234567890' );
+ $this->insertPage( 'DomainName', 'example.com' );
}
protected function fetchIds( $results ) {
@@ -101,30 +94,6 @@ class SearchEngineTest extends MediaWikiLangTestCase {
return $matches;
}
- /**
- * Insert a new page
- *
- * @param string $pageName Page name
- * @param string $text Page's content
- * @param int $ns Unused
- */
- protected function insertPage( $pageName, $text, $ns ) {
- $title = Title::newFromText( $pageName, $ns );
-
- $user = User::newFromName( 'WikiSysop' );
- $comment = 'Search Test';
-
- // avoid memory leak...?
- LinkCache::singleton()->clear();
-
- $page = WikiPage::factory( $title );
- $page->doEditContent( ContentHandler::makeContent( $text, $title ), $comment, 0, false, $user );
-
- $this->pageList[] = array( $title, $page->getId() );
-
- return true;
- }
-
public function testFullWidth() {
$this->assertEquals(
array( 'FullOneUp', 'FullTwoLow', 'HalfOneUp', 'HalfTwoLow' ),
diff --git a/tests/phpunit/includes/site/CachingSiteStoreTest.php b/tests/phpunit/includes/site/CachingSiteStoreTest.php
new file mode 100644
index 00000000..d0a79803
--- /dev/null
+++ b/tests/phpunit/includes/site/CachingSiteStoreTest.php
@@ -0,0 +1,161 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ * @group Database
+ *
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class CachingSiteStoreTest extends MediaWikiTestCase {
+
+ /**
+ * @covers CachingSiteStore::getSites
+ */
+ public function testGetSites() {
+ $testSites = TestSites::getSites();
+
+ $store = new CachingSiteStore(
+ $this->getHashSiteStore( $testSites ),
+ wfGetMainCache()
+ );
+
+ $sites = $store->getSites();
+
+ $this->assertInstanceOf( 'SiteList', $sites );
+
+ /**
+ * @var Site $site
+ */
+ foreach ( $sites as $site ) {
+ $this->assertInstanceOf( 'Site', $site );
+ }
+
+ foreach ( $testSites as $site ) {
+ if ( $site->getGlobalId() !== null ) {
+ $this->assertTrue( $sites->hasSite( $site->getGlobalId() ) );
+ }
+ }
+ }
+
+ /**
+ * @covers CachingSiteStore::saveSites
+ */
+ public function testSaveSites() {
+ $store = new CachingSiteStore( new HashSiteStore(), wfGetMainCache() );
+
+ $sites = array();
+
+ $site = new Site();
+ $site->setGlobalId( 'ertrywuutr' );
+ $site->setLanguageCode( 'en' );
+ $sites[] = $site;
+
+ $site = new MediaWikiSite();
+ $site->setGlobalId( 'sdfhxujgkfpth' );
+ $site->setLanguageCode( 'nl' );
+ $sites[] = $site;
+
+ $this->assertTrue( $store->saveSites( $sites ) );
+
+ $site = $store->getSite( 'ertrywuutr' );
+ $this->assertInstanceOf( 'Site', $site );
+ $this->assertEquals( 'en', $site->getLanguageCode() );
+
+ $site = $store->getSite( 'sdfhxujgkfpth' );
+ $this->assertInstanceOf( 'Site', $site );
+ $this->assertEquals( 'nl', $site->getLanguageCode() );
+ }
+
+ /**
+ * @covers CachingSiteStore::reset
+ */
+ public function testReset() {
+ $dbSiteStore = $this->getMockBuilder( 'SiteStore' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ // php 5.3 compatibility!
+ $self = $this;
+
+ $dbSiteStore->expects( $this->any() )
+ ->method( 'getSite' )
+ ->will( $this->returnValue( $self->getTestSite() ) );
+
+ $dbSiteStore->expects( $this->any() )
+ ->method( 'getSites' )
+ ->will( $this->returnCallback( function() use( $self ) {
+ $siteList = new SiteList();
+ $siteList->setSite( $self->getTestSite() );
+
+ return $siteList;
+ } ) );
+
+ $store = new CachingSiteStore( $dbSiteStore, wfGetMainCache() );
+
+ // initialize internal cache
+ $this->assertGreaterThan( 0, $store->getSites()->count(), 'count sites' );
+
+ $store->getSite( 'enwiki' )->setLanguageCode( 'en-ca' );
+
+ // sanity check: $store should have the new language code for 'enwiki'
+ $this->assertEquals( 'en-ca', $store->getSite( 'enwiki' )->getLanguageCode(), 'sanity check' );
+
+ // purge cache
+ $store->reset();
+
+ // the internal cache of $store should be updated, and now pulling
+ // the site from the 'fallback' DBSiteStore with the original language code.
+ $this->assertEquals( 'en', $store->getSite( 'enwiki' )->getLanguageCode(), 'reset' );
+ }
+
+ public function getTestSite() {
+ $enwiki = new MediaWikiSite();
+ $enwiki->setGlobalId( 'enwiki' );
+ $enwiki->setLanguageCode( 'en' );
+
+ return $enwiki;
+ }
+
+ /**
+ * @covers CachingSiteStore::clear
+ */
+ public function testClear() {
+ $store = new CachingSiteStore( new HashSiteStore(), wfGetMainCache() );
+ $this->assertTrue( $store->clear() );
+
+ $site = $store->getSite( 'enwiki' );
+ $this->assertNull( $site );
+
+ $sites = $store->getSites();
+ $this->assertEquals( 0, $sites->count() );
+ }
+
+ private function getHashSiteStore( array $sites ) {
+ $siteStore = new HashSiteStore();
+ $siteStore->saveSites( $sites );
+
+ return $siteStore;
+ }
+
+}
diff --git a/tests/phpunit/includes/site/DBSiteStoreTest.php b/tests/phpunit/includes/site/DBSiteStoreTest.php
new file mode 100644
index 00000000..673ba54d
--- /dev/null
+++ b/tests/phpunit/includes/site/DBSiteStoreTest.php
@@ -0,0 +1,133 @@
+<?php
+
+/**
+ * Tests for the DBSiteStore class.
+ *
+ * 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
+ * @since 1.21
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @group Site
+ * @group Database
+ *
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class DBSiteStoreTest extends MediaWikiTestCase {
+
+ /**
+ * @covers DBSiteStore::getSites
+ */
+ public function testGetSites() {
+ $expectedSites = TestSites::getSites();
+ TestSites::insertIntoDb();
+
+ $store = new DBSiteStore();
+
+ $sites = $store->getSites();
+
+ $this->assertInstanceOf( 'SiteList', $sites );
+
+ /**
+ * @var Site $site
+ */
+ foreach ( $sites as $site ) {
+ $this->assertInstanceOf( 'Site', $site );
+ }
+
+ foreach ( $expectedSites as $site ) {
+ if ( $site->getGlobalId() !== null ) {
+ $this->assertTrue( $sites->hasSite( $site->getGlobalId() ) );
+ }
+ }
+ }
+
+ /**
+ * @covers DBSiteStore::saveSites
+ */
+ public function testSaveSites() {
+ $store = new DBSiteStore();
+
+ $sites = array();
+
+ $site = new Site();
+ $site->setGlobalId( 'ertrywuutr' );
+ $site->setLanguageCode( 'en' );
+ $sites[] = $site;
+
+ $site = new MediaWikiSite();
+ $site->setGlobalId( 'sdfhxujgkfpth' );
+ $site->setLanguageCode( 'nl' );
+ $sites[] = $site;
+
+ $this->assertTrue( $store->saveSites( $sites ) );
+
+ $site = $store->getSite( 'ertrywuutr' );
+ $this->assertInstanceOf( 'Site', $site );
+ $this->assertEquals( 'en', $site->getLanguageCode() );
+ $this->assertTrue( is_integer( $site->getInternalId() ) );
+ $this->assertTrue( $site->getInternalId() >= 0 );
+
+ $site = $store->getSite( 'sdfhxujgkfpth' );
+ $this->assertInstanceOf( 'Site', $site );
+ $this->assertEquals( 'nl', $site->getLanguageCode() );
+ $this->assertTrue( is_integer( $site->getInternalId() ) );
+ $this->assertTrue( $site->getInternalId() >= 0 );
+ }
+
+ /**
+ * @covers DBSiteStore::reset
+ */
+ public function testReset() {
+ $store1 = new DBSiteStore();
+ $store2 = new DBSiteStore();
+
+ // initialize internal cache
+ $this->assertGreaterThan( 0, $store1->getSites()->count() );
+ $this->assertGreaterThan( 0, $store2->getSites()->count() );
+
+ // Clear actual data. Will purge the external cache and reset the internal
+ // cache in $store1, but not the internal cache in store2.
+ $this->assertTrue( $store1->clear() );
+
+ // sanity check: $store2 should have a stale cache now
+ $this->assertNotNull( $store2->getSite( 'enwiki' ) );
+
+ // purge cache
+ $store2->reset();
+
+ // ...now the internal cache of $store2 should be updated and thus empty.
+ $site = $store2->getSite( 'enwiki' );
+ $this->assertNull( $site );
+ }
+
+ /**
+ * @covers DBSiteStore::clear
+ */
+ public function testClear() {
+ $store = new DBSiteStore();
+ $this->assertTrue( $store->clear() );
+
+ $site = $store->getSite( 'enwiki' );
+ $this->assertNull( $site );
+
+ $sites = $store->getSites();
+ $this->assertEquals( 0, $sites->count() );
+ }
+}
diff --git a/tests/phpunit/includes/site/FileBasedSiteLookupTest.php b/tests/phpunit/includes/site/FileBasedSiteLookupTest.php
new file mode 100644
index 00000000..90ebe5c4
--- /dev/null
+++ b/tests/phpunit/includes/site/FileBasedSiteLookupTest.php
@@ -0,0 +1,101 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @covers FileBasedSiteLookup
+ * @group Site
+ *
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class FileBasedSiteLookupTest extends PHPUnit_Framework_TestCase {
+
+ protected function setUp() {
+ $this->cacheFile = $this->getCacheFile();
+ }
+
+ protected function tearDown() {
+ unlink( $this->cacheFile );
+ }
+
+ public function testGetSites() {
+ $sites = $this->getSites();
+ $cacheBuilder = $this->newSitesCacheFileBuilder( $sites );
+ $cacheBuilder->build();
+
+ $cache = new FileBasedSiteLookup( $this->cacheFile );
+ $this->assertEquals( $sites, $cache->getSites() );
+ }
+
+ public function testGetSite() {
+ $sites = $this->getSites();
+ $cacheBuilder = $this->newSitesCacheFileBuilder( $sites );
+ $cacheBuilder->build();
+
+ $cache = new FileBasedSiteLookup( $this->cacheFile );
+
+ $this->assertEquals( $sites->getSite( 'enwiktionary' ), $cache->getSite( 'enwiktionary' ) );
+ }
+
+ private function newSitesCacheFileBuilder( SiteList $sites ) {
+ return new SitesCacheFileBuilder(
+ $this->getSiteLookup( $sites ),
+ $this->cacheFile
+ );
+ }
+
+ private function getSiteLookup( SiteList $sites ) {
+ $siteLookup = $this->getMockBuilder( 'SiteLookup' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $siteLookup->expects( $this->any() )
+ ->method( 'getSites' )
+ ->will( $this->returnValue( $sites ) );
+
+ return $siteLookup;
+ }
+
+ private function getSites() {
+ $sites = array();
+
+ $site = new Site();
+ $site->setGlobalId( 'foobar' );
+ $sites[] = $site;
+
+ $site = new MediaWikiSite();
+ $site->setGlobalId( 'enwiktionary' );
+ $site->setGroup( 'wiktionary' );
+ $site->setLanguageCode( 'en' );
+ $site->addNavigationId( 'enwiktionary' );
+ $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
+ $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
+ $sites[] = $site;
+
+ return new SiteList( $sites );
+ }
+
+ private function getCacheFile() {
+ return tempnam( sys_get_temp_dir(), 'mw-test-sitelist' );
+ }
+
+}
diff --git a/tests/phpunit/includes/site/HashSiteStoreTest.php b/tests/phpunit/includes/site/HashSiteStoreTest.php
new file mode 100644
index 00000000..49a96338
--- /dev/null
+++ b/tests/phpunit/includes/site/HashSiteStoreTest.php
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @group Site
+ *
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class HashSiteStoreTest extends MediaWikiTestCase {
+
+ /**
+ * @covers HashSiteStore::getSites
+ */
+ public function testGetSites() {
+ $expectedSites = array();
+
+ foreach( TestSites::getSites() as $testSite ) {
+ $siteId = $testSite->getGlobalId();
+ $expectedSites[$siteId] = $testSite;
+ }
+
+ $siteStore = new HashSiteStore( $expectedSites );
+
+ $this->assertEquals( new SiteList( $expectedSites ), $siteStore->getSites() );
+ }
+
+ /**
+ * @covers HashSiteStore::saveSite
+ * @covers HashSiteStore::getSite
+ */
+ public function testSaveSite() {
+ $store = new HashSiteStore();
+
+ $site = new Site();
+ $site->setGlobalId( 'dewiki' );
+
+ $this->assertCount( 0, $store->getSites(), '0 sites in store' );
+
+ $store->saveSite( $site );
+
+ $this->assertCount( 1, $store->getSites(), 'Store has 1 sites' );
+ $this->assertEquals( $site, $store->getSite( 'dewiki' ), 'Store has dewiki' );
+ }
+
+ /**
+ * @covers HashSiteStore::saveSites
+ */
+ public function testSaveSites() {
+ $store = new HashSiteStore();
+
+ $sites = array();
+
+ $site = new Site();
+ $site->setGlobalId( 'enwiki' );
+ $site->setLanguageCode( 'en' );
+ $sites[] = $site;
+
+ $site = new MediaWikiSite();
+ $site->setGlobalId( 'eswiki' );
+ $site->setLanguageCode( 'es' );
+ $sites[] = $site;
+
+ $this->assertCount( 0, $store->getSites(), '0 sites in store' );
+
+ $store->saveSites( $sites );
+
+ $this->assertCount( 2, $store->getSites(), 'Store has 2 sites' );
+ $this->assertTrue( $store->getSites()->hasSite( 'enwiki' ), 'Store has enwiki' );
+ $this->assertTrue( $store->getSites()->hasSite( 'eswiki' ), 'Store has eswiki' );
+ }
+
+ /**
+ * @covers HashSiteStore::clear
+ */
+ public function testClear() {
+ $store = new HashSiteStore();
+
+ $site = new Site();
+ $site->setGlobalId( 'arwiki' );
+ $store->saveSite( $site );
+
+ $this->assertCount( 1, $store->getSites(), '1 site in store' );
+
+ $store->clear();
+ $this->assertCount( 0, $store->getSites(), '0 sites in store' );
+ }
+}
diff --git a/tests/phpunit/includes/site/MediaWikiSiteTest.php b/tests/phpunit/includes/site/MediaWikiSiteTest.php
index c3fd1557..ef2ccca2 100644
--- a/tests/phpunit/includes/site/MediaWikiSiteTest.php
+++ b/tests/phpunit/includes/site/MediaWikiSiteTest.php
@@ -26,7 +26,6 @@
*
* @group Site
*
- * @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class MediaWikiSiteTest extends SiteTest {
diff --git a/tests/phpunit/includes/site/SiteExporterTest.php b/tests/phpunit/includes/site/SiteExporterTest.php
new file mode 100644
index 00000000..19dd0aa1
--- /dev/null
+++ b/tests/phpunit/includes/site/SiteExporterTest.php
@@ -0,0 +1,147 @@
+<?php
+
+/**
+ * Tests for the SiteExporter class.
+ *
+ * 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 Site
+ * @ingroup Test
+ *
+ * @group Site
+ *
+ * @covers SiteExporter
+ *
+ * @author Daniel Kinzler
+ */
+class SiteExporterTest extends PHPUnit_Framework_TestCase {
+
+ public function testConstructor_InvalidArgument() {
+ $this->setExpectedException( 'InvalidArgumentException' );
+
+ new SiteExporter( 'Foo' );
+ }
+
+ public function testExportSites() {
+ $foo = Site::newForType( Site::TYPE_UNKNOWN );
+ $foo->setGlobalId( 'Foo' );
+
+ $acme = Site::newForType( Site::TYPE_UNKNOWN );
+ $acme->setGlobalId( 'acme.com' );
+ $acme->setGroup( 'Test' );
+ $acme->addLocalId( Site::ID_INTERWIKI, 'acme' );
+ $acme->setPath( Site::PATH_LINK, 'http://acme.com/' );
+
+ $tmp = tmpfile();
+ $exporter = new SiteExporter( $tmp );
+
+ $exporter->exportSites( array( $foo, $acme ) );
+
+ fseek( $tmp, 0 );
+ $xml = fread( $tmp, 16*1024 );
+
+ $this->assertContains( '<sites ', $xml );
+ $this->assertContains( '<site>', $xml );
+ $this->assertContains( '<globalid>Foo</globalid>', $xml );
+ $this->assertContains( '</site>', $xml );
+ $this->assertContains( '<globalid>acme.com</globalid>', $xml );
+ $this->assertContains( '<group>Test</group>', $xml );
+ $this->assertContains( '<localid type="interwiki">acme</localid>', $xml );
+ $this->assertContains( '<path type="link">http://acme.com/</path>', $xml );
+ $this->assertContains( '</sites>', $xml );
+
+ // NOTE: HHVM (at least on wmf Jenkins) doesn't like file URLs.
+ $xsdFile = __DIR__ . '/../../../../docs/sitelist-1.0.xsd';
+ $xsdData = file_get_contents( $xsdFile );
+
+ $document = new DOMDocument();
+ $document->loadXML( $xml, LIBXML_NONET );
+ $document->schemaValidateSource( $xsdData );
+ }
+
+ private function newSiteStore( SiteList $sites ) {
+ $store = $this->getMock( 'SiteStore' );
+
+ $store->expects( $this->once() )
+ ->method( 'saveSites' )
+ ->will( $this->returnCallback( function ( $moreSites ) use ( $sites ) {
+ foreach ( $moreSites as $site ) {
+ $sites->setSite( $site );
+ }
+ } ) );
+
+ $store->expects( $this->any() )
+ ->method( 'getSites' )
+ ->will( $this->returnValue( new SiteList() ) );
+
+ return $store;
+ }
+
+ public function provideRoundTrip() {
+ $foo = Site::newForType( Site::TYPE_UNKNOWN );
+ $foo->setGlobalId( 'Foo' );
+
+ $acme = Site::newForType( Site::TYPE_UNKNOWN );
+ $acme->setGlobalId( 'acme.com' );
+ $acme->setGroup( 'Test' );
+ $acme->addLocalId( Site::ID_INTERWIKI, 'acme' );
+ $acme->setPath( Site::PATH_LINK, 'http://acme.com/' );
+
+ $dewiki = Site::newForType( Site::TYPE_MEDIAWIKI );
+ $dewiki->setGlobalId( 'dewiki' );
+ $dewiki->setGroup( 'wikipedia' );
+ $dewiki->setForward( true );
+ $dewiki->addLocalId( Site::ID_INTERWIKI, 'wikipedia' );
+ $dewiki->addLocalId( Site::ID_EQUIVALENT, 'de' );
+ $dewiki->setPath( Site::PATH_LINK, 'http://de.wikipedia.org/w/' );
+ $dewiki->setPath( MediaWikiSite::PATH_PAGE, 'http://de.wikipedia.org/wiki/' );
+ $dewiki->setSource( 'meta.wikimedia.org' );
+
+ return array(
+ 'empty' => array(
+ new SiteList()
+ ),
+
+ 'some' => array(
+ new SiteList( array( $foo, $acme, $dewiki ) ),
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider provideRoundTrip()
+ */
+ public function testRoundTrip( SiteList $sites ) {
+ $tmp = tmpfile();
+ $exporter = new SiteExporter( $tmp );
+
+ $exporter->exportSites( $sites );
+
+ fseek( $tmp, 0 );
+ $xml = fread( $tmp, 16*1024 );
+
+ $actualSites = new SiteList();
+ $store = $this->newSiteStore( $actualSites );
+
+ $importer = new SiteImporter( $store );
+ $importer->importFromXML( $xml );
+
+ $this->assertEquals( $sites, $actualSites );
+ }
+
+}
diff --git a/tests/phpunit/includes/site/SiteImporterTest.php b/tests/phpunit/includes/site/SiteImporterTest.php
new file mode 100644
index 00000000..cb0316ab
--- /dev/null
+++ b/tests/phpunit/includes/site/SiteImporterTest.php
@@ -0,0 +1,200 @@
+<?php
+
+/**
+ * Tests for the SiteImporter class.
+ *
+ * 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 Site
+ * @ingroup Test
+ *
+ * @group Site
+ *
+ * @covers SiteImporter
+ *
+ * @author Daniel Kinzler
+ */
+class SiteImporterTest extends PHPUnit_Framework_TestCase {
+
+ private function newSiteImporter( array $expectedSites, $errorCount ) {
+ $store = $this->getMock( 'SiteStore' );
+
+ $self = $this;
+ $store->expects( $this->once() )
+ ->method( 'saveSites' )
+ ->will( $this->returnCallback( function ( $sites ) use ( $expectedSites, $self ) {
+ $self->assertSitesEqual( $expectedSites, $sites );
+ } ) );
+
+ $store->expects( $this->any() )
+ ->method( 'getSites' )
+ ->will( $this->returnValue( new SiteList() ) );
+
+ $errorHandler = $this->getMock( 'Psr\Log\LoggerInterface' );
+ $errorHandler->expects( $this->exactly( $errorCount ) )
+ ->method( 'error' );
+
+ $importer = new SiteImporter( $store );
+ $importer->setExceptionCallback( array( $errorHandler, 'error' ) );
+
+ return $importer;
+ }
+
+ public function assertSitesEqual( $expected, $actual, $message = '' ) {
+ $this->assertEquals(
+ $this->getSerializedSiteList( $expected ),
+ $this->getSerializedSiteList( $actual ),
+ $message
+ );
+ }
+
+ public function provideImportFromXML() {
+ $foo = Site::newForType( Site::TYPE_UNKNOWN );
+ $foo->setGlobalId( 'Foo' );
+
+ $acme = Site::newForType( Site::TYPE_UNKNOWN );
+ $acme->setGlobalId( 'acme.com' );
+ $acme->setGroup( 'Test' );
+ $acme->addLocalId( Site::ID_INTERWIKI, 'acme' );
+ $acme->setPath( Site::PATH_LINK, 'http://acme.com/' );
+
+ $dewiki = Site::newForType( Site::TYPE_MEDIAWIKI );
+ $dewiki->setGlobalId( 'dewiki' );
+ $dewiki->setGroup( 'wikipedia' );
+ $dewiki->setForward( true );
+ $dewiki->addLocalId( Site::ID_INTERWIKI, 'wikipedia' );
+ $dewiki->addLocalId( Site::ID_EQUIVALENT, 'de' );
+ $dewiki->setPath( Site::PATH_LINK, 'http://de.wikipedia.org/w/' );
+ $dewiki->setPath( MediaWikiSite::PATH_PAGE, 'http://de.wikipedia.org/wiki/' );
+ $dewiki->setSource( 'meta.wikimedia.org' );
+
+ return array(
+ 'empty' => array(
+ '<sites></sites>',
+ array(),
+ ),
+ 'no sites' => array(
+ '<sites><Foo><globalid>Foo</globalid></Foo><Bar><quux>Bla</quux></Bar></sites>',
+ array(),
+ ),
+ 'minimal' => array(
+ '<sites>' .
+ '<site><globalid>Foo</globalid></site>' .
+ '</sites>',
+ array( $foo ),
+ ),
+ 'full' => array(
+ '<sites>' .
+ '<site><globalid>Foo</globalid></site>' .
+ '<site>' .
+ '<globalid>acme.com</globalid>' .
+ '<localid type="interwiki">acme</localid>' .
+ '<group>Test</group>' .
+ '<path type="link">http://acme.com/</path>' .
+ '</site>' .
+ '<site type="mediawiki">' .
+ '<source>meta.wikimedia.org</source>' .
+ '<globalid>dewiki</globalid>' .
+ '<localid type="interwiki">wikipedia</localid>' .
+ '<localid type="equivalent">de</localid>' .
+ '<group>wikipedia</group>' .
+ '<forward/>' .
+ '<path type="link">http://de.wikipedia.org/w/</path>' .
+ '<path type="page_path">http://de.wikipedia.org/wiki/</path>' .
+ '</site>' .
+ '</sites>',
+ array( $foo, $acme, $dewiki ),
+ ),
+ 'skip' => array(
+ '<sites>' .
+ '<site><globalid>Foo</globalid></site>' .
+ '<site><barf>Foo</barf></site>' .
+ '<site>' .
+ '<globalid>acme.com</globalid>' .
+ '<localid type="interwiki">acme</localid>' .
+ '<silly>boop!</silly>' .
+ '<group>Test</group>' .
+ '<path type="link">http://acme.com/</path>' .
+ '</site>' .
+ '</sites>',
+ array( $foo, $acme ),
+ 1
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider provideImportFromXML
+ */
+ public function testImportFromXML( $xml, array $expectedSites, $errorCount = 0 ) {
+ $importer = $this->newSiteImporter( $expectedSites, $errorCount );
+ $importer->importFromXML( $xml );
+ }
+
+ public function testImportFromXML_malformed() {
+ $this->setExpectedException( 'Exception' );
+
+ $store = $this->getMock( 'SiteStore' );
+ $importer = new SiteImporter( $store );
+ $importer->importFromXML( 'THIS IS NOT XML' );
+ }
+
+ public function testImportFromFile() {
+ $foo = Site::newForType( Site::TYPE_UNKNOWN );
+ $foo->setGlobalId( 'Foo' );
+
+ $acme = Site::newForType( Site::TYPE_UNKNOWN );
+ $acme->setGlobalId( 'acme.com' );
+ $acme->setGroup( 'Test' );
+ $acme->addLocalId( Site::ID_INTERWIKI, 'acme' );
+ $acme->setPath( Site::PATH_LINK, 'http://acme.com/' );
+
+ $dewiki = Site::newForType( Site::TYPE_MEDIAWIKI );
+ $dewiki->setGlobalId( 'dewiki' );
+ $dewiki->setGroup( 'wikipedia' );
+ $dewiki->setForward( true );
+ $dewiki->addLocalId( Site::ID_INTERWIKI, 'wikipedia' );
+ $dewiki->addLocalId( Site::ID_EQUIVALENT, 'de' );
+ $dewiki->setPath( Site::PATH_LINK, 'http://de.wikipedia.org/w/' );
+ $dewiki->setPath( MediaWikiSite::PATH_PAGE, 'http://de.wikipedia.org/wiki/' );
+ $dewiki->setSource( 'meta.wikimedia.org' );
+
+ $importer = $this->newSiteImporter( array( $foo, $acme, $dewiki ), 0 );
+
+ $file = __DIR__ . '/SiteImporterTest.xml';
+ $importer->importFromFile( $file );
+ }
+
+ /**
+ * @param Site[] $sites
+ *
+ * @return array[]
+ */
+ private function getSerializedSiteList( $sites ) {
+ $serialized = array();
+
+ foreach ( $sites as $site ) {
+ $key = $site->getGlobalId();
+ $data = unserialize( $site->serialize() );
+
+ $serialized[$key] = $data;
+ }
+
+ return $serialized;
+ }
+}
diff --git a/tests/phpunit/includes/site/SiteImporterTest.xml b/tests/phpunit/includes/site/SiteImporterTest.xml
new file mode 100644
index 00000000..720b1faf
--- /dev/null
+++ b/tests/phpunit/includes/site/SiteImporterTest.xml
@@ -0,0 +1,19 @@
+<sites version="1.0" xmlns="http://www.mediawiki.org/xml/sitelist-1.0/">
+ <site><globalid>Foo</globalid></site>
+ <site>
+ <globalid>acme.com</globalid>
+ <localid type="interwiki">acme</localid>
+ <group>Test</group>
+ <path type="link">http://acme.com/</path>
+ </site>
+ <site type="mediawiki">
+ <source>meta.wikimedia.org</source>
+ <globalid>dewiki</globalid>
+ <localid type="interwiki">wikipedia</localid>
+ <localid type="equivalent">de</localid>
+ <group>wikipedia</group>
+ <forward/>
+ <path type="link">http://de.wikipedia.org/w/</path>
+ <path type="page_path">http://de.wikipedia.org/wiki/</path>
+ </site>
+</sites>
diff --git a/tests/phpunit/includes/site/SiteListTest.php b/tests/phpunit/includes/site/SiteListTest.php
index 534ed9c9..d6c58cf6 100644
--- a/tests/phpunit/includes/site/SiteListTest.php
+++ b/tests/phpunit/includes/site/SiteListTest.php
@@ -26,7 +26,6 @@
*
* @group Site
*
- * @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class SiteListTest extends MediaWikiTestCase {
diff --git a/tests/phpunit/includes/site/SiteSQLStoreTest.php b/tests/phpunit/includes/site/SiteSQLStoreTest.php
index 6002c1a1..69088006 100644
--- a/tests/phpunit/includes/site/SiteSQLStoreTest.php
+++ b/tests/phpunit/includes/site/SiteSQLStoreTest.php
@@ -1,8 +1,6 @@
<?php
/**
- * Tests for the SiteSQLStore class.
- *
* 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
@@ -19,7 +17,7 @@
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @since 1.21
+ * @since 1.25
*
* @ingroup Site
* @ingroup Test
@@ -27,108 +25,16 @@
* @group Site
* @group Database
*
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Katie Filbert < aude.wiki@gmail.com >
*/
class SiteSQLStoreTest extends MediaWikiTestCase {
/**
- * @covers SiteSQLStore::getSites
- */
- public function testGetSites() {
- $expectedSites = TestSites::getSites();
- TestSites::insertIntoDb();
-
- $store = SiteSQLStore::newInstance();
-
- $sites = $store->getSites();
-
- $this->assertInstanceOf( 'SiteList', $sites );
-
- /**
- * @var Site $site
- */
- foreach ( $sites as $site ) {
- $this->assertInstanceOf( 'Site', $site );
- }
-
- foreach ( $expectedSites as $site ) {
- if ( $site->getGlobalId() !== null ) {
- $this->assertTrue( $sites->hasSite( $site->getGlobalId() ) );
- }
- }
- }
-
- /**
- * @covers SiteSQLStore::saveSites
- */
- public function testSaveSites() {
- $store = SiteSQLStore::newInstance();
-
- $sites = array();
-
- $site = new Site();
- $site->setGlobalId( 'ertrywuutr' );
- $site->setLanguageCode( 'en' );
- $sites[] = $site;
-
- $site = new MediaWikiSite();
- $site->setGlobalId( 'sdfhxujgkfpth' );
- $site->setLanguageCode( 'nl' );
- $sites[] = $site;
-
- $this->assertTrue( $store->saveSites( $sites ) );
-
- $site = $store->getSite( 'ertrywuutr' );
- $this->assertInstanceOf( 'Site', $site );
- $this->assertEquals( 'en', $site->getLanguageCode() );
- $this->assertTrue( is_integer( $site->getInternalId() ) );
- $this->assertTrue( $site->getInternalId() >= 0 );
-
- $site = $store->getSite( 'sdfhxujgkfpth' );
- $this->assertInstanceOf( 'Site', $site );
- $this->assertEquals( 'nl', $site->getLanguageCode() );
- $this->assertTrue( is_integer( $site->getInternalId() ) );
- $this->assertTrue( $site->getInternalId() >= 0 );
- }
-
- /**
- * @covers SiteSQLStore::reset
+ * @covers SiteSQLStore::newInstance
*/
- public function testReset() {
- $store1 = SiteSQLStore::newInstance();
- $store2 = SiteSQLStore::newInstance();
-
- // initialize internal cache
- $this->assertGreaterThan( 0, $store1->getSites()->count() );
- $this->assertGreaterThan( 0, $store2->getSites()->count() );
-
- // Clear actual data. Will purge the external cache and reset the internal
- // cache in $store1, but not the internal cache in store2.
- $this->assertTrue( $store1->clear() );
-
- // sanity check: $store2 should have a stale cache now
- $this->assertNotNull( $store2->getSite( 'enwiki' ) );
-
- // purge cache
- $store2->reset();
-
- // ...now the internal cache of $store2 should be updated and thus empty.
- $site = $store2->getSite( 'enwiki' );
- $this->assertNull( $site );
+ public function testNewInstance() {
+ $siteStore = SiteSQLStore::newInstance();
+ $this->assertInstanceOf( 'SiteSQLStore', $siteStore );
}
- /**
- * @covers SiteSQLStore::clear
- */
- public function testClear() {
- $store = SiteSQLStore::newInstance();
- $this->assertTrue( $store->clear() );
-
- $site = $store->getSite( 'enwiki' );
- $this->assertNull( $site );
-
- $sites = $store->getSites();
- $this->assertEquals( 0, $sites->count() );
- }
}
diff --git a/tests/phpunit/includes/site/SiteTest.php b/tests/phpunit/includes/site/SiteTest.php
index 29c1ff33..63d90d2e 100644
--- a/tests/phpunit/includes/site/SiteTest.php
+++ b/tests/phpunit/includes/site/SiteTest.php
@@ -26,7 +26,6 @@
*
* @group Site
*
- * @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class SiteTest extends MediaWikiTestCase {
diff --git a/tests/phpunit/includes/site/SitesCacheFileBuilderTest.php b/tests/phpunit/includes/site/SitesCacheFileBuilderTest.php
new file mode 100644
index 00000000..087341a0
--- /dev/null
+++ b/tests/phpunit/includes/site/SitesCacheFileBuilderTest.php
@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @since 1.25
+ *
+ * @ingroup Site
+ * @ingroup Test
+ *
+ * @covers SitesCacheFileBuilder
+ * @group Site
+ *
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class SitesCacheFileBuilderTest extends PHPUnit_Framework_TestCase {
+
+ protected function setUp() {
+ $this->cacheFile = $this->getCacheFile();
+ }
+
+ protected function tearDown() {
+ unlink( $this->cacheFile );
+ }
+
+ public function testBuild() {
+ $cacheBuilder = $this->newSitesCacheFileBuilder( $this->getSites() );
+ $cacheBuilder->build();
+
+ $contents = file_get_contents( $this->cacheFile );
+ $this->assertEquals( json_encode( $this->getExpectedData() ), $contents );
+ }
+
+ private function getExpectedData() {
+ return array(
+ 'sites' => array(
+ 'foobar' => array(
+ 'globalid' => 'foobar',
+ 'type' => 'unknown',
+ 'group' => 'none',
+ 'source' => 'local',
+ 'language' => null,
+ 'localids' => array(),
+ 'config' => array(),
+ 'data' => array(),
+ 'forward' => false,
+ 'internalid' => null,
+ 'identifiers' => array()
+ ),
+ 'enwiktionary' => array(
+ 'globalid' => 'enwiktionary',
+ 'type' => 'mediawiki',
+ 'group' => 'wiktionary',
+ 'source' => 'local',
+ 'language' => 'en',
+ 'localids' => array(
+ 'equivalent' => array( 'enwiktionary' )
+ ),
+ 'config' => array(),
+ 'data' => array(
+ 'paths' => array(
+ 'page_path' => 'https://en.wiktionary.org/wiki/$1',
+ 'file_path' => 'https://en.wiktionary.org/w/$1'
+ )
+ ),
+ 'forward' => false,
+ 'internalid' => null,
+ 'identifiers' => array(
+ array(
+ 'type' => 'equivalent',
+ 'key' => 'enwiktionary'
+ )
+ )
+ )
+ )
+ );
+ }
+
+ private function newSitesCacheFileBuilder( SiteList $sites ) {
+ return new SitesCacheFileBuilder(
+ $this->getSiteLookup( $sites ),
+ $this->cacheFile
+ );
+ }
+
+ private function getSiteLookup( SiteList $sites ) {
+ $siteLookup = $this->getMockBuilder( 'SiteLookup' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $siteLookup->expects( $this->any() )
+ ->method( 'getSites' )
+ ->will( $this->returnValue( $sites ) );
+
+ return $siteLookup;
+ }
+
+ private function getSites() {
+ $sites = array();
+
+ $site = new Site();
+ $site->setGlobalId( 'foobar' );
+ $sites[] = $site;
+
+ $site = new MediaWikiSite();
+ $site->setGlobalId( 'enwiktionary' );
+ $site->setGroup( 'wiktionary' );
+ $site->setLanguageCode( 'en' );
+ $site->addNavigationId( 'enwiktionary' );
+ $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
+ $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
+ $sites[] = $site;
+
+ return new SiteList( $sites );
+ }
+
+ private function getCacheFile() {
+ return tempnam( sys_get_temp_dir(), 'mw-test-sitelist' );
+ }
+
+}
diff --git a/tests/phpunit/includes/site/TestSites.php b/tests/phpunit/includes/site/TestSites.php
index af314ba2..4c402484 100644
--- a/tests/phpunit/includes/site/TestSites.php
+++ b/tests/phpunit/includes/site/TestSites.php
@@ -26,7 +26,6 @@
*
* @group Site
*
- * @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class TestSites {
@@ -108,7 +107,7 @@ class TestSites {
* @since 0.1
*/
public static function insertIntoDb() {
- $sitesTable = SiteSQLStore::newInstance();
+ $sitesTable = new DBSiteStore();
$sitesTable->clear();
$sitesTable->saveSites( TestSites::getSites() );
}
diff --git a/tests/phpunit/includes/skins/SkinTemplateTest.php b/tests/phpunit/includes/skins/SkinTemplateTest.php
index baa995d4..8084a66f 100644
--- a/tests/phpunit/includes/skins/SkinTemplateTest.php
+++ b/tests/phpunit/includes/skins/SkinTemplateTest.php
@@ -5,7 +5,6 @@
*
* @group Output
*
- * @licence GNU GPL v2+
* @author Bene* < benestar.wikimedia@gmail.com >
*/
diff --git a/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php b/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
index 779fa558..fd6911f6 100644
--- a/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
+++ b/tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
@@ -28,21 +28,52 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
SpecialPageFactory::resetList();
}
+ public function testResetList() {
+ SpecialPageFactory::resetList();
+ $this->assertContains( 'Specialpages', SpecialPageFactory::getNames() );
+ }
+
+ public function testHookNotCalledTwice() {
+ $count = 0;
+ $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+ 'SpecialPage_initList' => array(
+ function () use ( &$count ) {
+ $count++;
+ }
+ ) ) );
+ SpecialPageFactory::resetList();
+ SpecialPageFactory::getNames();
+ SpecialPageFactory::getNames();
+ $this->assertEquals( 1, $count );
+ }
+
public function newSpecialAllPages() {
return new SpecialAllPages();
}
public function specialPageProvider() {
+ $specialPageTestHelper = new SpecialPageTestHelper();
+
return array(
'class name' => array( 'SpecialAllPages', false ),
- 'closure' => array( function() {
+ 'closure' => array( function () {
return new SpecialAllPages();
}, false ),
- 'function' => array( array( $this, 'newSpecialAllPages' ), false ),
+ 'function' => array( array( $this, 'newSpecialAllPages' ), false ),
+ 'callback string' => array( 'SpecialPageTestHelper::newSpecialAllPages', false ),
+ 'callback with object' => array(
+ array( $specialPageTestHelper, 'newSpecialAllPages' ),
+ false
+ ),
+ 'callback array' => array(
+ array( 'SpecialPageTestHelper', 'newSpecialAllPages' ),
+ false
+ )
);
}
/**
+ * @covers SpecialPageFactory::getPage
* @dataProvider specialPageProvider
*/
public function testGetPage( $spec, $shouldReuseInstance ) {
@@ -56,6 +87,9 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
$this->assertEquals( $shouldReuseInstance, $page2 === $page, "Should re-use instance:" );
}
+ /**
+ * @covers SpecialPageFactory::getNames
+ */
public function testGetNames() {
$this->mergeMwGlobalArrayValue( 'wgSpecialPages', array( 'testdummy' => 'SpecialAllPages' ) );
SpecialPageFactory::resetList();
@@ -65,6 +99,9 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
$this->assertContains( 'testdummy', $names );
}
+ /**
+ * @covers SpecialPageFactory::resolveAlias
+ */
public function testResolveAlias() {
$this->setMwGlobals( 'wgContLang', Language::factory( 'de' ) );
SpecialPageFactory::resetList();
@@ -74,6 +111,9 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
$this->assertEquals( 'Foo', $param );
}
+ /**
+ * @covers SpecialPageFactory::getLocalNameFor
+ */
public function testGetLocalNameFor() {
$this->setMwGlobals( 'wgContLang', Language::factory( 'de' ) );
SpecialPageFactory::resetList();
@@ -82,6 +122,9 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
$this->assertEquals( 'Spezialseiten/Foo', $name );
}
+ /**
+ * @covers SpecialPageFactory::getTitleForAlias
+ */
public function testGetTitleForAlias() {
$this->setMwGlobals( 'wgContLang', Language::factory( 'de' ) );
SpecialPageFactory::resetList();
@@ -222,4 +265,19 @@ class SpecialPageFactoryTest extends MediaWikiTestCase {
);
}
+ public function testGetAliasListRecursion() {
+ $called = false;
+ $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+ 'SpecialPage_initList' => array(
+ function () use ( &$called ) {
+ SpecialPageFactory::getLocalNameFor( 'Specialpages' );
+ $called = true;
+ }
+ ),
+ ) );
+ SpecialPageFactory::resetList();
+ SpecialPageFactory::getLocalNameFor( 'Specialpages' );
+ $this->assertTrue( $called, 'Recursive call succeeded' );
+ }
+
}
diff --git a/tests/phpunit/includes/SpecialPageTest.php b/tests/phpunit/includes/specialpage/SpecialPageTest.php
index 245cdffd..5a0aef97 100644
--- a/tests/phpunit/includes/SpecialPageTest.php
+++ b/tests/phpunit/includes/specialpage/SpecialPageTest.php
@@ -5,7 +5,6 @@
*
* @group Database
*
- * @licence GNU GPL v2+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class SpecialPageTest extends MediaWikiTestCase {
diff --git a/tests/phpunit/includes/specialpage/SpecialPageTestHelper.php b/tests/phpunit/includes/specialpage/SpecialPageTestHelper.php
new file mode 100644
index 00000000..37e29dcb
--- /dev/null
+++ b/tests/phpunit/includes/specialpage/SpecialPageTestHelper.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+class SpecialPageTestHelper {
+
+ public static function newSpecialAllPages() {
+ return new SpecialAllPages();
+ }
+
+}
diff --git a/tests/phpunit/includes/specials/SpecialBooksourcesTest.php b/tests/phpunit/includes/specials/SpecialBooksourcesTest.php
new file mode 100644
index 00000000..69485a03
--- /dev/null
+++ b/tests/phpunit/includes/specials/SpecialBooksourcesTest.php
@@ -0,0 +1,36 @@
+<?php
+class SpecialBooksourcesTest extends MediaWikiTestCase {
+ public static function provideISBNs() {
+ return array(
+ array( '978-0-300-14424-6', true ),
+ array( '0-14-020652-3', true ),
+ array( '020652-3', false ),
+ array( '9781234567897', true ),
+ array( '1-4133-0454-0', true ),
+ array( '978-1413304541', true ),
+ array( '0136091814', true ),
+ array( '0136091812', false ),
+ array( '9780136091813', true ),
+ array( '9780136091817', false ),
+ array( '123456789X', true ),
+
+ // Bug 67021
+ array( '1413304541', false ),
+ array( '141330454X', false ),
+ array( '1413304540', true ),
+ array( '14133X4540', false ),
+ array( '97814133X4541', false ),
+ array( '978035642615X', false ),
+ array( '9781413304541', true ),
+ array( '9780356426150', true ),
+ );
+ }
+
+ /**
+ * @covers SpecialBookSources::isValidISBN
+ * @dataProvider provideISBNs
+ */
+ public function testIsValidISBN( $isbn, $isValid ) {
+ $this->assertSame( $isValid, SpecialBookSources::isValidISBN( $isbn ) );
+ }
+}
diff --git a/tests/phpunit/includes/specials/SpecialMIMESearchTest.php b/tests/phpunit/includes/specials/SpecialMIMESearchTest.php
index 14d19685..fe1c9e83 100644
--- a/tests/phpunit/includes/specials/SpecialMIMESearchTest.php
+++ b/tests/phpunit/includes/specials/SpecialMIMESearchTest.php
@@ -5,11 +5,11 @@
class SpecialMIMESearchTest extends MediaWikiTestCase {
- /** @var MIMESearchPage */
+ /** @var MIMEsearchPage */
private $page;
function setUp() {
- $this->page = new MIMESearchPage;
+ $this->page = new MIMEsearchPage;
$context = new RequestContext();
$context->setTitle( Title::makeTitle( NS_SPECIAL, 'MIMESearch' ) );
$context->setRequest( new FauxRequest() );
diff --git a/tests/phpunit/includes/title/ForeignTitleTest.php b/tests/phpunit/includes/title/ForeignTitleTest.php
new file mode 100644
index 00000000..599d2a33
--- /dev/null
+++ b/tests/phpunit/includes/title/ForeignTitleTest.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author This, that and the other
+ */
+
+/**
+ * @covers ForeignTitle
+ *
+ * @group Title
+ */
+class ForeignTitleTest extends MediaWikiTestCase {
+
+ public function basicProvider() {
+ return array(
+ array(
+ new ForeignTitle( 20, 'Contributor', 'JohnDoe' ),
+ 20, 'Contributor', 'JohnDoe'
+ ),
+ array(
+ new ForeignTitle( '1', 'Discussion', 'Capital' ),
+ 1, 'Discussion', 'Capital'
+ ),
+ array(
+ new ForeignTitle( 0, '', 'MainNamespace' ),
+ 0, '', 'MainNamespace'
+ ),
+ array(
+ new ForeignTitle( 4, 'Some ns', 'Article title with spaces' ),
+ 4, 'Some_ns', 'Article_title_with_spaces'
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider basicProvider
+ */
+ public function testBasic( ForeignTitle $title, $expectedId, $expectedName,
+ $expectedText ) {
+
+ $this->assertEquals( true, $title->isNamespaceIdKnown() );
+ $this->assertEquals( $expectedId, $title->getNamespaceId() );
+ $this->assertEquals( $expectedName, $title->getNamespaceName() );
+ $this->assertEquals( $expectedText, $title->getText() );
+ }
+
+ public function testUnknownNamespaceCheck( ) {
+ $title = new ForeignTitle( null, 'this', 'that' );
+
+ $this->assertEquals( false, $title->isNamespaceIdKnown() );
+ $this->assertEquals( 'this', $title->getNamespaceName() );
+ $this->assertEquals( 'that', $title->getText() );
+ }
+
+ public function testUnknownNamespaceError( ) {
+ $this->setExpectedException( 'MWException' );
+ $title = new ForeignTitle( null, 'this', 'that' );
+ $title->getNamespaceId();
+ }
+
+ public function fullTextProvider() {
+ return array(
+ array(
+ new ForeignTitle( 20, 'Contributor', 'JohnDoe' ),
+ 'Contributor:JohnDoe'
+ ),
+ array(
+ new ForeignTitle( '1', 'Discussion', 'Capital' ),
+ 'Discussion:Capital'
+ ),
+ array(
+ new ForeignTitle( 0, '', 'MainNamespace' ),
+ 'MainNamespace'
+ ),
+ array(
+ new ForeignTitle( 4, 'Some ns', 'Article title with spaces' ),
+ 'Some_ns:Article_title_with_spaces'
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider fullTextProvider
+ */
+ public function testFullText( ForeignTitle $title, $fullText ) {
+ $this->assertEquals( $fullText, $title->getFullText() );
+ }
+}
diff --git a/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php b/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
index 4171c10e..cd0d0b1c 100644
--- a/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
+++ b/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
@@ -16,7 +16,6 @@
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license GPL 2+
* @author Daniel Kinzler
*/
diff --git a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
index f95b3050..78d304c1 100644
--- a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
+++ b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
@@ -16,7 +16,6 @@
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license GPL 2+
* @author Daniel Kinzler
*/
@@ -39,6 +38,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
'wgLang' => Language::factory( 'en' ),
'wgAllowUserJs' => false,
'wgDefaultLanguageVariant' => false,
+ 'wgMetaNamespace' => 'Project',
'wgLocalInterwikis' => array( 'localtestiw' ),
'wgCapitalLinks' => true,
@@ -82,6 +82,8 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
protected function makeCodec( $lang ) {
$gender = $this->getGenderCache();
$lang = Language::factory( $lang );
+ // language object can came from cache, which does not respect test settings
+ $lang->resetNamespaces();
return new MediaWikiTitleCodec( $lang, $gender );
}
@@ -367,13 +369,6 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
/**
* @dataProvider provideGetNamespaceName
- *
- * @param int $namespace
- * @param string $text
- * @param string $lang
- * @param string $expected
- *
- * @internal param \TitleValue $title
*/
public function testGetNamespaceName( $namespace, $text, $lang, $expected ) {
$codec = $this->makeCodec( $lang );
diff --git a/tests/phpunit/includes/title/NaiveForeignTitleFactoryTest.php b/tests/phpunit/includes/title/NaiveForeignTitleFactoryTest.php
new file mode 100644
index 00000000..504e8712
--- /dev/null
+++ b/tests/phpunit/includes/title/NaiveForeignTitleFactoryTest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author This, that and the other
+ */
+
+/**
+ * @covers NaiveForeignTitleFactory
+ *
+ * @group Title
+ */
+class NaiveForeignTitleFactoryTest extends MediaWikiTestCase {
+
+ public function basicProvider() {
+ return array(
+ array(
+ 'MainNamespaceArticle', 0,
+ new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
+ ),
+ array(
+ 'MainNamespaceArticle', null,
+ new ForeignTitle( null, '', 'MainNamespaceArticle' ),
+ ),
+ array(
+ 'Talk:Nice_talk', 1,
+ new ForeignTitle( 1, 'Talk', 'Nice_talk' ),
+ ),
+ array(
+ 'Bogus:Nice_talk', 0,
+ new ForeignTitle( 0, '', 'Bogus:Nice_talk' ),
+ ),
+ array(
+ 'Bogus:Nice_talk', 9000, // non-existent local namespace ID
+ new ForeignTitle( 9000, 'Bogus', 'Nice_talk' ),
+ ),
+ array(
+ 'Bogus:Nice_talk', 4, // existing local namespace ID
+ new ForeignTitle( 4, 'Bogus', 'Nice_talk' ),
+ ),
+ array(
+ 'Talk:Extra:Nice_talk', 1,
+ new ForeignTitle( 1, 'Talk', 'Extra:Nice_talk' ),
+ ),
+ array(
+ 'Talk:Extra:Nice_talk', null,
+ new ForeignTitle( null, 'Talk', 'Extra:Nice_talk' ),
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider basicProvider
+ */
+ public function testBasic( $title, $ns, ForeignTitle $foreignTitle ) {
+ $factory = new NaiveForeignTitleFactory();
+ $testTitle = $factory->createForeignTitle( $title, $ns );
+
+ $this->assertEquals( $testTitle->isNamespaceIdKnown(),
+ $foreignTitle->isNamespaceIdKnown() );
+
+ if (
+ $testTitle->isNamespaceIdKnown() &&
+ $foreignTitle->isNamespaceIdKnown()
+ ) {
+ $this->assertEquals( $testTitle->getNamespaceId(),
+ $foreignTitle->getNamespaceId() );
+ }
+
+ $this->assertEquals( $testTitle->getNamespaceName(),
+ $foreignTitle->getNamespaceName() );
+ $this->assertEquals( $testTitle->getText(), $foreignTitle->getText() );
+
+ $this->assertEquals( str_replace( ' ', '_', $title ),
+ $foreignTitle->getFullText() );
+ }
+}
diff --git a/tests/phpunit/includes/title/NaiveImportTitleFactoryTest.php b/tests/phpunit/includes/title/NaiveImportTitleFactoryTest.php
new file mode 100644
index 00000000..98b414e0
--- /dev/null
+++ b/tests/phpunit/includes/title/NaiveImportTitleFactoryTest.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author This, that and the other
+ */
+
+/**
+ * @covers NaiveImportTitleFactory
+ *
+ * @group Title
+ */
+class NaiveImportTitleFactoryTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( array(
+ 'wgLanguageCode' => 'en',
+ 'wgContLang' => Language::factory( 'en' ),
+ 'wgExtraNamespaces' => array( 100 => 'Portal' ),
+ ) );
+ }
+
+ public function basicProvider() {
+ return array(
+ array(
+ new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
+ Title::newFromText( 'MainNamespaceArticle' )
+ ),
+ array(
+ new ForeignTitle( null, '', 'MainNamespaceArticle' ),
+ Title::newFromText( 'MainNamespaceArticle' )
+ ),
+ array(
+ new ForeignTitle( 1, 'Discussion', 'Nice_talk' ),
+ Title::newFromText( 'Talk:Nice_talk' )
+ ),
+ array(
+ new ForeignTitle( 0, '', 'Bogus:Nice_talk' ),
+ Title::newFromText( 'Bogus:Nice_talk' )
+ ),
+ array(
+ new ForeignTitle( 100, 'Bogus', 'Nice_talk' ),
+ Title::newFromText( 'Bogus:Nice_talk' ) // not Portal:Nice_talk
+ ),
+ array(
+ new ForeignTitle( 1, 'Bogus', 'Nice_talk' ),
+ Title::newFromText( 'Talk:Nice_talk' ) // not Bogus:Nice_talk
+ ),
+ array(
+ new ForeignTitle( 100, 'Portal', 'Nice_talk' ),
+ Title::newFromText( 'Portal:Nice_talk' )
+ ),
+ array(
+ new ForeignTitle( 724, 'Portal', 'Nice_talk' ),
+ Title::newFromText( 'Portal:Nice_talk' )
+ ),
+ array(
+ new ForeignTitle( 2, 'Portal', 'Nice_talk' ),
+ Title::newFromText( 'User:Nice_talk' )
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider basicProvider
+ */
+ public function testBasic( ForeignTitle $foreignTitle, Title $title ) {
+ $factory = new NaiveImportTitleFactory();
+ $testTitle = $factory->createTitleFromForeignTitle( $foreignTitle );
+
+ $this->assertTrue( $title->equals( $testTitle ) );
+ }
+}
diff --git a/tests/phpunit/includes/title/NamespaceAwareForeignTitleFactoryTest.php b/tests/phpunit/includes/title/NamespaceAwareForeignTitleFactoryTest.php
new file mode 100644
index 00000000..9cb195cc
--- /dev/null
+++ b/tests/phpunit/includes/title/NamespaceAwareForeignTitleFactoryTest.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author This, that and the other
+ */
+
+/**
+ * @covers NamespaceAwareForeignTitleFactory
+ *
+ * @group Title
+ */
+class NamespaceAwareForeignTitleFactoryTest extends MediaWikiTestCase {
+
+ public function basicProvider() {
+ return array(
+ array(
+ 'MainNamespaceArticle', 0,
+ new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
+ ),
+ array(
+ 'MainNamespaceArticle', null,
+ new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
+ ),
+ array(
+ 'Talk:Nice_talk', 1,
+ new ForeignTitle( 1, 'Talk', 'Nice_talk' ),
+ ),
+ array(
+ 'Bogus:Nice_talk', 0,
+ new ForeignTitle( 0, '', 'Bogus:Nice_talk' ),
+ ),
+ array(
+ 'Bogus:Nice_talk', null,
+ new ForeignTitle( 9000, 'Bogus', 'Nice_talk' ),
+ ),
+ array(
+ 'Bogus:Nice_talk', 4,
+ new ForeignTitle( 4, 'Bogus', 'Nice_talk' ),
+ ),
+ array(
+ 'Bogus:Nice_talk', 1,
+ new ForeignTitle( 1, 'Talk', 'Nice_talk' ),
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider basicProvider
+ */
+ public function testBasic( $title, $ns, ForeignTitle $foreignTitle ) {
+
+ $foreignNamespaces = array(
+ 0 => '', 1 => 'Talk', 100 => 'Portal', 9000 => 'Bogus'
+ );
+
+ $factory = new NamespaceAwareForeignTitleFactory( $foreignNamespaces );
+ $testTitle = $factory->createForeignTitle( $title, $ns );
+
+ $this->assertEquals( $testTitle->isNamespaceIdKnown(),
+ $foreignTitle->isNamespaceIdKnown() );
+
+ if (
+ $testTitle->isNamespaceIdKnown() &&
+ $foreignTitle->isNamespaceIdKnown()
+ ) {
+ $this->assertEquals( $testTitle->getNamespaceId(),
+ $foreignTitle->getNamespaceId() );
+ }
+
+ $this->assertEquals( $testTitle->getNamespaceName(),
+ $foreignTitle->getNamespaceName() );
+ $this->assertEquals( $testTitle->getText(), $foreignTitle->getText() );
+ }
+}
diff --git a/tests/phpunit/includes/title/NamespaceImportTitleFactoryTest.php b/tests/phpunit/includes/title/NamespaceImportTitleFactoryTest.php
new file mode 100644
index 00000000..d6fe6848
--- /dev/null
+++ b/tests/phpunit/includes/title/NamespaceImportTitleFactoryTest.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author This, that and the other
+ */
+
+/**
+ * @covers NamespaceImportTitleFactory
+ *
+ * @group Title
+ */
+class NamespaceImportTitleFactoryTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( array(
+ 'wgLanguageCode' => 'en',
+ 'wgContLang' => Language::factory( 'en' ),
+ ) );
+ }
+
+ public function basicProvider() {
+ return array(
+ array(
+ new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
+ 0,
+ Title::newFromText( 'MainNamespaceArticle' )
+ ),
+ array(
+ new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
+ 2,
+ Title::newFromText( 'User:MainNamespaceArticle' )
+ ),
+ array(
+ new ForeignTitle( 1, 'Discussion', 'Nice_talk' ),
+ 0,
+ Title::newFromText( 'Nice_talk' )
+ ),
+ array(
+ new ForeignTitle( 0, '', 'Bogus:Nice_talk' ),
+ 0,
+ Title::newFromText( 'Bogus:Nice_talk' )
+ ),
+ array(
+ new ForeignTitle( 0, '', 'Bogus:Nice_talk' ),
+ 2,
+ Title::newFromText( 'User:Bogus:Nice_talk' )
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider basicProvider
+ */
+ public function testBasic( ForeignTitle $foreignTitle, $ns, Title $title ) {
+ $factory = new NamespaceImportTitleFactory( $ns );
+ $testTitle = $factory->createTitleFromForeignTitle( $foreignTitle );
+
+ $this->assertTrue( $title->equals( $testTitle ) );
+ }
+}
diff --git a/tests/phpunit/includes/title/SubpageImportTitleFactoryTest.php b/tests/phpunit/includes/title/SubpageImportTitleFactoryTest.php
new file mode 100644
index 00000000..d5c17f3e
--- /dev/null
+++ b/tests/phpunit/includes/title/SubpageImportTitleFactoryTest.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author This, that and the other
+ */
+
+/**
+ * @covers SubpageImportTitleFactory
+ *
+ * @group Title
+ */
+class SubpageImportTitleFactoryTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( array(
+ 'wgLanguageCode' => 'en',
+ 'wgContLang' => Language::factory( 'en' ),
+ 'wgNamespacesWithSubpages' => array( 0 => false, 2 => true ),
+ ) );
+ }
+
+ public function basicProvider() {
+ return array(
+ array(
+ new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
+ Title::newFromText( 'User:Graham' ),
+ Title::newFromText( 'User:Graham/MainNamespaceArticle' )
+ ),
+ array(
+ new ForeignTitle( 1, 'Discussion', 'Nice_talk' ),
+ Title::newFromText( 'User:Graham' ),
+ Title::newFromText( 'User:Graham/Discussion:Nice_talk' )
+ ),
+ array(
+ new ForeignTitle( 0, '', 'Bogus:Nice_talk' ),
+ Title::newFromText( 'User:Graham' ),
+ Title::newFromText( 'User:Graham/Bogus:Nice_talk' )
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider basicProvider
+ */
+ public function testBasic( ForeignTitle $foreignTitle, Title $rootPage,
+ Title $title ) {
+
+ $factory = new SubpageImportTitleFactory( $rootPage );
+ $testTitle = $factory->createTitleFromForeignTitle( $foreignTitle );
+
+ $this->assertTrue( $testTitle->equals( $title ) );
+ }
+
+ public function failureProvider() {
+ return array(
+ array(
+ Title::newFromText( 'Graham' ),
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider failureProvider
+ */
+ public function testFailures( Title $rootPage ) {
+ $this->setExpectedException( 'MWException' );
+ new SubpageImportTitleFactory( $rootPage );
+ }
+}
diff --git a/tests/phpunit/includes/title/TitleValueTest.php b/tests/phpunit/includes/title/TitleValueTest.php
index 3ba008d6..184198d2 100644
--- a/tests/phpunit/includes/title/TitleValueTest.php
+++ b/tests/phpunit/includes/title/TitleValueTest.php
@@ -16,7 +16,6 @@
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @license GPL 2+
* @author Daniel Kinzler
*/
diff --git a/tests/phpunit/includes/upload/UploadBaseTest.php b/tests/phpunit/includes/upload/UploadBaseTest.php
index 3d3b0068..9441b77f 100644
--- a/tests/phpunit/includes/upload/UploadBaseTest.php
+++ b/tests/phpunit/includes/upload/UploadBaseTest.php
@@ -9,21 +9,17 @@ class UploadBaseTest extends MediaWikiTestCase {
protected $upload;
protected function setUp() {
- global $wgHooks;
parent::setUp();
$this->upload = new UploadTestHandler;
- $this->hooks = $wgHooks;
- $wgHooks['InterwikiLoadPrefix'][] = function ( $prefix, &$data ) {
- return false;
- };
- }
-
- protected function tearDown() {
- global $wgHooks;
- $wgHooks = $this->hooks;
- parent::tearDown();
+ $this->setMwGlobals( 'wgHooks', array(
+ 'InterwikiLoadPrefix' => array(
+ function ( $prefix, &$data ) {
+ return false;
+ }
+ ),
+ ) );
}
/**
@@ -97,7 +93,7 @@ class UploadBaseTest extends MediaWikiTestCase {
// Helper used to create an empty file of size $size.
private function createFileOfSize( $size ) {
- $filename = tempnam( wfTempDir(), "mwuploadtest" );
+ $filename = $this->getNewTempFile();
$fh = fopen( $filename, 'w' );
ftruncate( $fh, $size );
@@ -112,22 +108,21 @@ class UploadBaseTest extends MediaWikiTestCase {
* This method should be abstracted so we can test different settings.
*/
public function testMaxUploadSize() {
- global $wgMaxUploadSize;
- $savedGlobal = $wgMaxUploadSize; // save global
- global $wgFileExtensions;
- $wgFileExtensions[] = 'txt';
-
- $wgMaxUploadSize = 100;
+ $this->setMwGlobals( array(
+ 'wgMaxUploadSize' => 100,
+ 'wgFileExtensions' => array(
+ 'txt',
+ ),
+ ) );
- $filename = $this->createFileOfSize( $wgMaxUploadSize );
+ $filename = $this->createFileOfSize( 100 );
$this->upload->initializePathInfo( basename( $filename ) . '.txt', $filename, 100 );
$result = $this->upload->verifyUpload();
- unlink( $filename );
$this->assertEquals(
- array( 'status' => UploadBase::OK ), $result );
-
- $wgMaxUploadSize = $savedGlobal; // restore global
+ array( 'status' => UploadBase::OK ),
+ $result
+ );
}
diff --git a/tests/phpunit/includes/upload/UploadFromUrlTest.php b/tests/phpunit/includes/upload/UploadFromUrlTest.php
index ec56b63e..b7496629 100644
--- a/tests/phpunit/includes/upload/UploadFromUrlTest.php
+++ b/tests/phpunit/includes/upload/UploadFromUrlTest.php
@@ -35,7 +35,10 @@ class UploadFromUrlTest extends ApiTestCase {
wfSetupSession( $sessionId );
- return array( $module->getResultData(), $req );
+ return array(
+ $module->getResult()->getResultData( null, array( 'Strip' => 'all' ) ),
+ $req
+ );
}
/**
diff --git a/tests/phpunit/includes/utils/CdbTest.php b/tests/phpunit/includes/utils/CdbTest.php
deleted file mode 100644
index 487ee1fc..00000000
--- a/tests/phpunit/includes/utils/CdbTest.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-/**
- * Test the CDB reader/writer
- * @covers CdbWriterPHP
- * @covers CdbWriterDBA
- */
-class CdbTest extends MediaWikiTestCase {
-
- protected function setUp() {
- parent::setUp();
- if ( !CdbReader::haveExtension() ) {
- $this->markTestSkipped( 'Native CDB support is not available' );
- }
- }
-
- /**
- * @group medium
- */
- public function testCdb() {
- $dir = wfTempDir();
- if ( !is_writable( $dir ) ) {
- $this->markTestSkipped( "Temp dir isn't writable" );
- }
-
- $phpcdbfile = $this->getNewTempFile();
- $dbacdbfile = $this->getNewTempFile();
-
- $w1 = new CdbWriterPHP( $phpcdbfile );
- $w2 = new CdbWriterDBA( $dbacdbfile );
-
- $data = array();
- for ( $i = 0; $i < 1000; $i++ ) {
- $key = $this->randomString();
- $value = $this->randomString();
- $w1->set( $key, $value );
- $w2->set( $key, $value );
-
- if ( !isset( $data[$key] ) ) {
- $data[$key] = $value;
- }
- }
-
- $w1->close();
- $w2->close();
-
- $this->assertEquals(
- md5_file( $phpcdbfile ),
- md5_file( $dbacdbfile ),
- 'same hash'
- );
-
- $r1 = new CdbReaderPHP( $phpcdbfile );
- $r2 = new CdbReaderDBA( $dbacdbfile );
-
- foreach ( $data as $key => $value ) {
- if ( $key === '' ) {
- // Known bug
- continue;
- }
- $v1 = $r1->get( $key );
- $v2 = $r2->get( $key );
-
- $v1 = $v1 === false ? '(not found)' : $v1;
- $v2 = $v2 === false ? '(not found)' : $v2;
-
- # cdbAssert( 'Mismatch', $key, $v1, $v2 );
- $this->cdbAssert( "PHP error", $key, $v1, $value );
- $this->cdbAssert( "DBA error", $key, $v2, $value );
- }
- }
-
- private function randomString() {
- $len = mt_rand( 0, 10 );
- $s = '';
- for ( $j = 0; $j < $len; $j++ ) {
- $s .= chr( mt_rand( 0, 255 ) );
- }
-
- return $s;
- }
-
- private function cdbAssert( $msg, $key, $v1, $v2 ) {
- $this->assertEquals(
- $v2,
- $v1,
- $msg . ', k=' . bin2hex( $key )
- );
- }
-}
diff --git a/tests/phpunit/includes/utils/IPTest.php b/tests/phpunit/includes/utils/IPTest.php
index ebe347fd..09c1587d 100644
--- a/tests/phpunit/includes/utils/IPTest.php
+++ b/tests/phpunit/includes/utils/IPTest.php
@@ -9,7 +9,7 @@
* dataprovider.
*/
-class IPTest extends MediaWikiTestCase {
+class IPTest extends PHPUnit_Framework_TestCase {
/**
* not sure it should be tested with boolean false. hashar 20100924
* @covers IP::isIPAddress
diff --git a/tests/phpunit/includes/utils/MWCryptHKDFTest.php b/tests/phpunit/includes/utils/MWCryptHKDFTest.php
index 7e37534a..73e4c1a9 100644
--- a/tests/phpunit/includes/utils/MWCryptHKDFTest.php
+++ b/tests/phpunit/includes/utils/MWCryptHKDFTest.php
@@ -6,6 +6,12 @@
class MWCryptHKDFTest extends MediaWikiTestCase {
+ protected function setUp() {
+ parent::setUp();
+
+ $this->setMwGlobals( 'wgSecretKey', '5bf1945342e67799cb50704a7fa19ac6' );
+ }
+
/**
* Test basic usage works
*/
diff --git a/tests/phpunit/includes/MWFunctionTest.php b/tests/phpunit/includes/utils/MWFunctionTest.php
index f2a720e8..f4d17999 100644
--- a/tests/phpunit/includes/MWFunctionTest.php
+++ b/tests/phpunit/includes/utils/MWFunctionTest.php
@@ -13,6 +13,7 @@ class MWFunctionTest extends MediaWikiTestCase {
$args = array( $arg1, $arg2, $arg3, $arg4 );
$newObject = new MWBlankClass( $arg1, $arg2, $arg3, $arg4 );
+ $this->hideDeprecated( 'MWFunction::newObj' );
$this->assertEquals(
MWFunction::newObj( 'MWBlankClass', $args )->args,
$newObject->args
diff --git a/tests/phpunit/includes/utils/UIDGeneratorTest.php b/tests/phpunit/includes/utils/UIDGeneratorTest.php
index 50fa3849..0e11ccad 100644
--- a/tests/phpunit/includes/utils/UIDGeneratorTest.php
+++ b/tests/phpunit/includes/utils/UIDGeneratorTest.php
@@ -35,14 +35,14 @@ class UIDGeneratorTest extends MediaWikiTestCase {
$lastId_bin = wfBaseConvert( $lastId, 10, 2 );
$this->assertGreaterThanOrEqual(
- substr( $id_bin, 0, $tbits ),
substr( $lastId_bin, 0, $tbits ),
+ substr( $id_bin, 0, $tbits ),
"New ID timestamp ($id_bin) >= prior one ($lastId_bin)." );
if ( $hostbits ) {
$this->assertEquals(
- substr( $id_bin, 0, -$hostbits ),
- substr( $lastId_bin, 0, -$hostbits ),
+ substr( $id_bin, -$hostbits ),
+ substr( $lastId_bin, -$hostbits ),
"Host ID of ($id_bin) is same as prior one ($lastId_bin)." );
}
diff --git a/tests/phpunit/includes/utils/ZipDirectoryReaderTest.php b/tests/phpunit/includes/utils/ZipDirectoryReaderTest.php
index 34ffb535..05d07d45 100644
--- a/tests/phpunit/includes/utils/ZipDirectoryReaderTest.php
+++ b/tests/phpunit/includes/utils/ZipDirectoryReaderTest.php
@@ -4,7 +4,7 @@
* @covers ZipDirectoryReader
* NOTE: this test is more like an integration test than a unit test
*/
-class ZipDirectoryReaderTest extends MediaWikiTestCase {
+class ZipDirectoryReaderTest extends PHPUnit_Framework_TestCase {
protected $zipDir;
protected $entries;
diff --git a/tests/phpunit/install-phpunit.sh b/tests/phpunit/install-phpunit.sh
deleted file mode 100644
index 022f998e..00000000
--- a/tests/phpunit/install-phpunit.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/sh
-
-has_binary () {
- if [ -z `which $1` ]; then
- return 1
- fi
- return 0
-}
-
-if [ `id -u` -ne 0 ]; then
- echo '*** ERROR: Must be root to run'
- exit 1
-fi
-
-if ( has_binary phpunit ); then
- echo PHPUnit already installed
-else if ( has_binary pear ); then
- echo Installing phpunit with pear
- pear channel-discover pear.phpunit.de
- pear channel-discover components.ez.no
- pear channel-discover pear.symfony.com
- pear update-channels
- #Temporary fix for 64597
- pear install --alldeps phpunit/PHPUnit-3.7.35
-else if ( has_binary apt-get ); then
- echo Installing phpunit with apt-get
- apt-get install phpunit
-else if ( has_binary yum ); then
- echo Installing phpunit with yum
- yum install phpunit
-else if ( has_binary port ); then
- echo Installing phpunit with macports
- port install php5-unit
-fi
-fi
-fi
-fi
-fi
diff --git a/tests/phpunit/includes/LanguageConverterTest.php b/tests/phpunit/languages/LanguageConverterTest.php
index d4ccca99..d4ccca99 100644
--- a/tests/phpunit/includes/LanguageConverterTest.php
+++ b/tests/phpunit/languages/LanguageConverterTest.php
diff --git a/tests/phpunit/languages/SpecialPageAliasTest.php b/tests/phpunit/languages/SpecialPageAliasTest.php
index f6d6bc96..a6d9d270 100644
--- a/tests/phpunit/languages/SpecialPageAliasTest.php
+++ b/tests/phpunit/languages/SpecialPageAliasTest.php
@@ -8,7 +8,6 @@
* @group SystemTest
* @group medium
*
- * @licence GNU GPL v2+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class SpecialPageAliasTest extends MediaWikiTestCase {
diff --git a/tests/phpunit/languages/LanguageAmTest.php b/tests/phpunit/languages/classes/LanguageAmTest.php
index a644f5e0..a644f5e0 100644
--- a/tests/phpunit/languages/LanguageAmTest.php
+++ b/tests/phpunit/languages/classes/LanguageAmTest.php
diff --git a/tests/phpunit/languages/LanguageArTest.php b/tests/phpunit/languages/classes/LanguageArTest.php
index 7b48f236..7b48f236 100644
--- a/tests/phpunit/languages/LanguageArTest.php
+++ b/tests/phpunit/languages/classes/LanguageArTest.php
diff --git a/tests/phpunit/languages/LanguageArqTest.php b/tests/phpunit/languages/classes/LanguageArqTest.php
index 3fa56d78..3fa56d78 100644
--- a/tests/phpunit/languages/LanguageArqTest.php
+++ b/tests/phpunit/languages/classes/LanguageArqTest.php
diff --git a/tests/phpunit/languages/LanguageBeTest.php b/tests/phpunit/languages/classes/LanguageBeTest.php
index 7bd586af..7bd586af 100644
--- a/tests/phpunit/languages/LanguageBeTest.php
+++ b/tests/phpunit/languages/classes/LanguageBeTest.php
diff --git a/tests/phpunit/languages/LanguageBe_taraskTest.php b/tests/phpunit/languages/classes/LanguageBe_taraskTest.php
index 4dd5cdd7..4dd5cdd7 100644
--- a/tests/phpunit/languages/LanguageBe_taraskTest.php
+++ b/tests/phpunit/languages/classes/LanguageBe_taraskTest.php
diff --git a/tests/phpunit/languages/LanguageBhoTest.php b/tests/phpunit/languages/classes/LanguageBhoTest.php
index 187bfbbc..187bfbbc 100644
--- a/tests/phpunit/languages/LanguageBhoTest.php
+++ b/tests/phpunit/languages/classes/LanguageBhoTest.php
diff --git a/tests/phpunit/languages/LanguageBsTest.php b/tests/phpunit/languages/classes/LanguageBsTest.php
index 7aca2ab1..7aca2ab1 100644
--- a/tests/phpunit/languages/LanguageBsTest.php
+++ b/tests/phpunit/languages/classes/LanguageBsTest.php
diff --git a/tests/phpunit/languages/LanguageCsTest.php b/tests/phpunit/languages/classes/LanguageCsTest.php
index da9e6b88..da9e6b88 100644
--- a/tests/phpunit/languages/LanguageCsTest.php
+++ b/tests/phpunit/languages/classes/LanguageCsTest.php
diff --git a/tests/phpunit/languages/LanguageCuTest.php b/tests/phpunit/languages/classes/LanguageCuTest.php
index 07193172..07193172 100644
--- a/tests/phpunit/languages/LanguageCuTest.php
+++ b/tests/phpunit/languages/classes/LanguageCuTest.php
diff --git a/tests/phpunit/languages/LanguageCyTest.php b/tests/phpunit/languages/classes/LanguageCyTest.php
index eaf663a8..eaf663a8 100644
--- a/tests/phpunit/languages/LanguageCyTest.php
+++ b/tests/phpunit/languages/classes/LanguageCyTest.php
diff --git a/tests/phpunit/languages/LanguageDsbTest.php b/tests/phpunit/languages/classes/LanguageDsbTest.php
index 94c11bcc..94c11bcc 100644
--- a/tests/phpunit/languages/LanguageDsbTest.php
+++ b/tests/phpunit/languages/classes/LanguageDsbTest.php
diff --git a/tests/phpunit/languages/LanguageFrTest.php b/tests/phpunit/languages/classes/LanguageFrTest.php
index 46b65011..46b65011 100644
--- a/tests/phpunit/languages/LanguageFrTest.php
+++ b/tests/phpunit/languages/classes/LanguageFrTest.php
diff --git a/tests/phpunit/languages/LanguageGaTest.php b/tests/phpunit/languages/classes/LanguageGaTest.php
index c009f56b..c009f56b 100644
--- a/tests/phpunit/languages/LanguageGaTest.php
+++ b/tests/phpunit/languages/classes/LanguageGaTest.php
diff --git a/tests/phpunit/languages/LanguageGdTest.php b/tests/phpunit/languages/classes/LanguageGdTest.php
index b89b4df9..b89b4df9 100644
--- a/tests/phpunit/languages/LanguageGdTest.php
+++ b/tests/phpunit/languages/classes/LanguageGdTest.php
diff --git a/tests/phpunit/languages/LanguageGvTest.php b/tests/phpunit/languages/classes/LanguageGvTest.php
index fc58022a..e6a0cf07 100644
--- a/tests/phpunit/languages/LanguageGvTest.php
+++ b/tests/phpunit/languages/classes/LanguageGvTest.php
@@ -37,7 +37,7 @@ class LanguageGvTest extends LanguageClassesTestCase {
array( 'other', 23 ),
array( 'other', 50 ),
array( 'few', 60 ),
- array( 'other', 80 ),
+ array( 'few', 80 ),
array( 'few', 100 )
);
}
diff --git a/tests/phpunit/languages/LanguageHeTest.php b/tests/phpunit/languages/classes/LanguageHeTest.php
index c382244f..c382244f 100644
--- a/tests/phpunit/languages/LanguageHeTest.php
+++ b/tests/phpunit/languages/classes/LanguageHeTest.php
diff --git a/tests/phpunit/languages/LanguageHiTest.php b/tests/phpunit/languages/classes/LanguageHiTest.php
index f6d2c9e9..f6d2c9e9 100644
--- a/tests/phpunit/languages/LanguageHiTest.php
+++ b/tests/phpunit/languages/classes/LanguageHiTest.php
diff --git a/tests/phpunit/languages/LanguageHrTest.php b/tests/phpunit/languages/classes/LanguageHrTest.php
index 644c5255..644c5255 100644
--- a/tests/phpunit/languages/LanguageHrTest.php
+++ b/tests/phpunit/languages/classes/LanguageHrTest.php
diff --git a/tests/phpunit/languages/LanguageHsbTest.php b/tests/phpunit/languages/classes/LanguageHsbTest.php
index f95a43bf..f95a43bf 100644
--- a/tests/phpunit/languages/LanguageHsbTest.php
+++ b/tests/phpunit/languages/classes/LanguageHsbTest.php
diff --git a/tests/phpunit/languages/LanguageHuTest.php b/tests/phpunit/languages/classes/LanguageHuTest.php
index ee9197d7..ee9197d7 100644
--- a/tests/phpunit/languages/LanguageHuTest.php
+++ b/tests/phpunit/languages/classes/LanguageHuTest.php
diff --git a/tests/phpunit/languages/LanguageHyTest.php b/tests/phpunit/languages/classes/LanguageHyTest.php
index 92e0ef94..92e0ef94 100644
--- a/tests/phpunit/languages/LanguageHyTest.php
+++ b/tests/phpunit/languages/classes/LanguageHyTest.php
diff --git a/tests/phpunit/languages/LanguageKshTest.php b/tests/phpunit/languages/classes/LanguageKshTest.php
index 568a3780..568a3780 100644
--- a/tests/phpunit/languages/LanguageKshTest.php
+++ b/tests/phpunit/languages/classes/LanguageKshTest.php
diff --git a/tests/phpunit/languages/LanguageLnTest.php b/tests/phpunit/languages/classes/LanguageLnTest.php
index 10b3234f..10b3234f 100644
--- a/tests/phpunit/languages/LanguageLnTest.php
+++ b/tests/phpunit/languages/classes/LanguageLnTest.php
diff --git a/tests/phpunit/languages/LanguageLtTest.php b/tests/phpunit/languages/classes/LanguageLtTest.php
index 30642f62..30642f62 100644
--- a/tests/phpunit/languages/LanguageLtTest.php
+++ b/tests/phpunit/languages/classes/LanguageLtTest.php
diff --git a/tests/phpunit/languages/LanguageLvTest.php b/tests/phpunit/languages/classes/LanguageLvTest.php
index 7120cfe3..7120cfe3 100644
--- a/tests/phpunit/languages/LanguageLvTest.php
+++ b/tests/phpunit/languages/classes/LanguageLvTest.php
diff --git a/tests/phpunit/languages/LanguageMgTest.php b/tests/phpunit/languages/classes/LanguageMgTest.php
index 65e8fd7b..65e8fd7b 100644
--- a/tests/phpunit/languages/LanguageMgTest.php
+++ b/tests/phpunit/languages/classes/LanguageMgTest.php
diff --git a/tests/phpunit/languages/LanguageMkTest.php b/tests/phpunit/languages/classes/LanguageMkTest.php
index ed155263..ed155263 100644
--- a/tests/phpunit/languages/LanguageMkTest.php
+++ b/tests/phpunit/languages/classes/LanguageMkTest.php
diff --git a/tests/phpunit/languages/LanguageMlTest.php b/tests/phpunit/languages/classes/LanguageMlTest.php
index 4fa45ce3..4fa45ce3 100644
--- a/tests/phpunit/languages/LanguageMlTest.php
+++ b/tests/phpunit/languages/classes/LanguageMlTest.php
diff --git a/tests/phpunit/languages/LanguageMoTest.php b/tests/phpunit/languages/classes/LanguageMoTest.php
index e0e54ca8..e0e54ca8 100644
--- a/tests/phpunit/languages/LanguageMoTest.php
+++ b/tests/phpunit/languages/classes/LanguageMoTest.php
diff --git a/tests/phpunit/languages/LanguageMtTest.php b/tests/phpunit/languages/classes/LanguageMtTest.php
index 96d2bc92..96d2bc92 100644
--- a/tests/phpunit/languages/LanguageMtTest.php
+++ b/tests/phpunit/languages/classes/LanguageMtTest.php
diff --git a/tests/phpunit/languages/LanguageNlTest.php b/tests/phpunit/languages/classes/LanguageNlTest.php
index 26bd691a..26bd691a 100644
--- a/tests/phpunit/languages/LanguageNlTest.php
+++ b/tests/phpunit/languages/classes/LanguageNlTest.php
diff --git a/tests/phpunit/languages/LanguageNsoTest.php b/tests/phpunit/languages/classes/LanguageNsoTest.php
index 18efd736..18efd736 100644
--- a/tests/phpunit/languages/LanguageNsoTest.php
+++ b/tests/phpunit/languages/classes/LanguageNsoTest.php
diff --git a/tests/phpunit/languages/LanguagePlTest.php b/tests/phpunit/languages/classes/LanguagePlTest.php
index d180037b..d180037b 100644
--- a/tests/phpunit/languages/LanguagePlTest.php
+++ b/tests/phpunit/languages/classes/LanguagePlTest.php
diff --git a/tests/phpunit/languages/LanguageRoTest.php b/tests/phpunit/languages/classes/LanguageRoTest.php
index ae7816bc..ae7816bc 100644
--- a/tests/phpunit/languages/LanguageRoTest.php
+++ b/tests/phpunit/languages/classes/LanguageRoTest.php
diff --git a/tests/phpunit/languages/LanguageRuTest.php b/tests/phpunit/languages/classes/LanguageRuTest.php
index f64fc722..1381afbf 100644
--- a/tests/phpunit/languages/LanguageRuTest.php
+++ b/tests/phpunit/languages/classes/LanguageRuTest.php
@@ -13,7 +13,7 @@ class LanguageRuTest extends LanguageClassesTestCase {
* @covers Language::convertPlural
*/
public function testPlural( $result, $value ) {
- $forms = array( 'one', 'many', 'other' );
+ $forms = array( 'one', 'few', 'many', 'other' );
$this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
@@ -22,9 +22,9 @@ class LanguageRuTest extends LanguageClassesTestCase {
* @covers Language::convertPlural
*/
public function testExplicitPlural() {
- $forms = array( 'one', 'many', 'other', '12=dozen' );
+ $forms = array( 'one', 'few', 'many', 'other', '12=dozen' );
$this->assertEquals( 'dozen', $this->getLang()->convertPlural( 12, $forms ) );
- $forms = array( 'one', 'many', '100=hundred', 'other', '12=dozen' );
+ $forms = array( 'one', 'few', 'many', '100=hundred', 'other', '12=dozen' );
$this->assertEquals( 'hundred', $this->getLang()->convertPlural( 100, $forms ) );
}
@@ -42,10 +42,10 @@ class LanguageRuTest extends LanguageClassesTestCase {
array( 'many', 11 ),
array( 'one', 91 ),
array( 'one', 121 ),
- array( 'other', 2 ),
- array( 'other', 3 ),
- array( 'other', 4 ),
- array( 'other', 334 ),
+ array( 'few', 2 ),
+ array( 'few', 3 ),
+ array( 'few', 4 ),
+ array( 'few', 334 ),
array( 'many', 5 ),
array( 'many', 15 ),
array( 'many', 120 ),
diff --git a/tests/phpunit/languages/LanguageSeTest.php b/tests/phpunit/languages/classes/LanguageSeTest.php
index 533aa2bc..533aa2bc 100644
--- a/tests/phpunit/languages/LanguageSeTest.php
+++ b/tests/phpunit/languages/classes/LanguageSeTest.php
diff --git a/tests/phpunit/languages/LanguageSgsTest.php b/tests/phpunit/languages/classes/LanguageSgsTest.php
index fa49a4dd..fa49a4dd 100644
--- a/tests/phpunit/languages/LanguageSgsTest.php
+++ b/tests/phpunit/languages/classes/LanguageSgsTest.php
diff --git a/tests/phpunit/languages/LanguageShTest.php b/tests/phpunit/languages/classes/LanguageShTest.php
index 1b390872..1b390872 100644
--- a/tests/phpunit/languages/LanguageShTest.php
+++ b/tests/phpunit/languages/classes/LanguageShTest.php
diff --git a/tests/phpunit/languages/LanguageSkTest.php b/tests/phpunit/languages/classes/LanguageSkTest.php
index cb8a13b8..cb8a13b8 100644
--- a/tests/phpunit/languages/LanguageSkTest.php
+++ b/tests/phpunit/languages/classes/LanguageSkTest.php
diff --git a/tests/phpunit/languages/LanguageSlTest.php b/tests/phpunit/languages/classes/LanguageSlTest.php
index 9783dd80..9783dd80 100644
--- a/tests/phpunit/languages/LanguageSlTest.php
+++ b/tests/phpunit/languages/classes/LanguageSlTest.php
diff --git a/tests/phpunit/languages/LanguageSmaTest.php b/tests/phpunit/languages/classes/LanguageSmaTest.php
index 95cb333c..95cb333c 100644
--- a/tests/phpunit/languages/LanguageSmaTest.php
+++ b/tests/phpunit/languages/classes/LanguageSmaTest.php
diff --git a/tests/phpunit/languages/LanguageSrTest.php b/tests/phpunit/languages/classes/LanguageSrTest.php
index bfb199f3..bfb199f3 100644
--- a/tests/phpunit/languages/LanguageSrTest.php
+++ b/tests/phpunit/languages/classes/LanguageSrTest.php
diff --git a/tests/phpunit/languages/LanguageTiTest.php b/tests/phpunit/languages/classes/LanguageTiTest.php
index e225af97..e225af97 100644
--- a/tests/phpunit/languages/LanguageTiTest.php
+++ b/tests/phpunit/languages/classes/LanguageTiTest.php
diff --git a/tests/phpunit/languages/LanguageTlTest.php b/tests/phpunit/languages/classes/LanguageTlTest.php
index 7ac51c69..20f5bd7f 100644
--- a/tests/phpunit/languages/LanguageTlTest.php
+++ b/tests/phpunit/languages/classes/LanguageTlTest.php
@@ -28,7 +28,9 @@ class LanguageTlTest extends LanguageClassesTestCase {
return array(
array( 'one', 0 ),
array( 'one', 1 ),
- array( 'other', 2 ),
+ array( 'one', 2 ),
+ array( 'other', 4 ),
+ array( 'other', 6 ),
);
}
}
diff --git a/tests/phpunit/languages/LanguageTrTest.php b/tests/phpunit/languages/classes/LanguageTrTest.php
index 2c9905f7..2c9905f7 100644
--- a/tests/phpunit/languages/LanguageTrTest.php
+++ b/tests/phpunit/languages/classes/LanguageTrTest.php
diff --git a/tests/phpunit/languages/LanguageUkTest.php b/tests/phpunit/languages/classes/LanguageUkTest.php
index 9051bcff..9051bcff 100644
--- a/tests/phpunit/languages/LanguageUkTest.php
+++ b/tests/phpunit/languages/classes/LanguageUkTest.php
diff --git a/tests/phpunit/languages/LanguageUzTest.php b/tests/phpunit/languages/classes/LanguageUzTest.php
index 4881103f..4881103f 100644
--- a/tests/phpunit/languages/LanguageUzTest.php
+++ b/tests/phpunit/languages/classes/LanguageUzTest.php
diff --git a/tests/phpunit/languages/LanguageWaTest.php b/tests/phpunit/languages/classes/LanguageWaTest.php
index d05196c0..d05196c0 100644
--- a/tests/phpunit/languages/LanguageWaTest.php
+++ b/tests/phpunit/languages/classes/LanguageWaTest.php
diff --git a/tests/phpunit/maintenance/DumpTestCase.php b/tests/phpunit/maintenance/DumpTestCase.php
index 8b6aef53..8c763970 100644
--- a/tests/phpunit/maintenance/DumpTestCase.php
+++ b/tests/phpunit/maintenance/DumpTestCase.php
@@ -19,7 +19,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
protected $exceptionFromAddDBData = null;
/**
- * Holds the xmlreader used for analyzing an xml dump
+ * Holds the XMLReader used for analyzing an XML dump
*
* @var XMLReader|null
*/
@@ -30,13 +30,15 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
*
* @param Page $page Page to add the revision to
* @param string $text Revisions text
- * @param string $summary Revisions summare
- * @return array
+ * @param string $summary Revisions summary
+ * @param string $model The model ID (defaults to wikitext)
+ *
* @throws MWException
+ * @return array
*/
- protected function addRevision( Page $page, $text, $summary ) {
+ protected function addRevision( Page $page, $text, $summary, $model = CONTENT_MODEL_WIKITEXT ) {
$status = $page->doEditContent(
- ContentHandler::makeContent( $text, $page->getTitle() ),
+ ContentHandler::makeContent( $text, $page->getTitle(), $model ),
$summary
);
@@ -330,6 +332,12 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
$this->assertTextNode( "comment", $summary );
$this->skipWhitespace();
+ $this->assertTextNode( "model", $model );
+ $this->skipWhitespace();
+
+ $this->assertTextNode( "format", $format );
+ $this->skipWhitespace();
+
if ( $this->xml->name == "text" ) {
// note: <text> tag may occur here or at the very end.
$text_found = true;
@@ -340,12 +348,6 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
$this->assertTextNode( "sha1", $text_sha1 );
- $this->assertTextNode( "model", $model );
- $this->skipWhitespace();
-
- $this->assertTextNode( "format", $format );
- $this->skipWhitespace();
-
if ( !$text_found ) {
$this->assertText( $id, $text_id, $text_bytes, $text );
}
diff --git a/tests/phpunit/maintenance/backupTextPassTest.php b/tests/phpunit/maintenance/backupTextPassTest.php
index a37a97c7..a5ef7624 100644
--- a/tests/phpunit/maintenance/backupTextPassTest.php
+++ b/tests/phpunit/maintenance/backupTextPassTest.php
@@ -3,13 +3,13 @@
require_once __DIR__ . "/../../../maintenance/backupTextPass.inc";
/**
- * Tests for page dumps of BackupDumper
+ * Tests for TextPassDumper that rely on the database
*
* @group Database
* @group Dump
* @covers TextPassDumper
*/
-class TextPassDumperTest extends DumpTestCase {
+class TextPassDumperDatabaseTest extends DumpTestCase {
// We'll add several pages, revision and texts. The following variables hold the
// corresponding ids.
@@ -27,6 +27,10 @@ class TextPassDumperTest extends DumpTestCase {
$this->tablesUsed[] = 'revision';
$this->tablesUsed[] = 'text';
+ $this->mergeMwGlobalArrayValue( 'wgContentHandlers', array(
+ "BackupTextPassTestModel" => "BackupTextPassTestModelHandler"
+ ) );
+
$ns = $this->getDefaultWikitextNS();
try {
@@ -61,7 +65,8 @@ class TextPassDumperTest extends DumpTestCase {
$this->pageId3 = $page->getId();
$page->doDeleteArticle( "Testing ;)" );
- // Page from non-default namespace
+ // Page from non-default namespace and model.
+ // ExportTransform applies.
if ( $ns === NS_TALK ) {
// @todo work around this.
@@ -73,7 +78,8 @@ class TextPassDumperTest extends DumpTestCase {
$page = WikiPage::factory( $title );
list( $this->revId4_1, $this->textId4_1 ) = $this->addRevision( $page,
"Talk about BackupDumperTestP1 Text1",
- "Talk BackupDumperTestP1 Summary1" );
+ "Talk BackupDumperTestP1 Summary1",
+ "BackupTextPassTestModel" );
$this->pageId4 = $page->getId();
} catch ( Exception $e ) {
// We'd love to pass $e directly. However, ... see
@@ -141,7 +147,10 @@ class TextPassDumperTest extends DumpTestCase {
$this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
$this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
$this->textId4_1, false, "nktofwzd0tl192k3zfepmlzxoax1lpe",
- "Talk about BackupDumperTestP1 Text1" );
+ "TALK ABOUT BACKUPDUMPERTESTP1 TEXT1",
+ false,
+ "BackupTextPassTestModel",
+ "text/plain" );
$this->assertPageEnd();
$this->assertDumpEnd();
@@ -209,7 +218,10 @@ class TextPassDumperTest extends DumpTestCase {
$this->assertPageStart( $this->pageId4, NS_TALK, "Talk:BackupDumperTestP1" );
$this->assertRevision( $this->revId4_1, "Talk BackupDumperTestP1 Summary1",
$this->textId4_1, false, "nktofwzd0tl192k3zfepmlzxoax1lpe",
- "Talk about BackupDumperTestP1 Text1" );
+ "TALK ABOUT BACKUPDUMPERTESTP1 TEXT1",
+ false,
+ "BackupTextPassTestModel",
+ "text/plain" );
$this->assertPageEnd();
$this->assertDumpEnd();
@@ -232,7 +244,9 @@ class TextPassDumperTest extends DumpTestCase {
$this->fail( "Could not open stream for stderr" );
}
- $iterations = 32; // We'll start with that many iterations of revisions in stub
+ $iterations = 32; // We'll start with that many iterations of revisions
+ // in stub. Make sure that the generated volume is above the buffer size
+ // set below. Otherwise, the checkpointing does not trigger.
$lastDuration = 0;
$minDuration = 2; // We want the dump to take at least this many seconds
$checkpointAfter = 0.5; // Generate checkpoint after this many seconds
@@ -250,6 +264,7 @@ class TextPassDumperTest extends DumpTestCase {
$dumper = new TextPassDumper( array( "--stub=file:" . $nameStub,
"--output=" . $checkpointFormat . ":" . $nameOutputDir . "/full",
"--maxtime=1" /*This is in minutes. Fixup is below*/,
+ "--buffersize=32768", // The default of 32 iterations fill up 32KB about twice
"--checkpointfile=checkpoint-%s-%s.xml.gz" ) );
$dumper->setDb( $this->db );
$dumper->maxTimeAllowed = $checkpointAfter; // Patching maxTime from 1 minute
@@ -362,7 +377,10 @@ class TextPassDumperTest extends DumpTestCase {
$this->assertRevision( $this->revId4_1 + $i * self::$numOfRevs,
"Talk BackupDumperTestP1 Summary1",
$this->textId4_1, false, "nktofwzd0tl192k3zfepmlzxoax1lpe",
- "Talk about BackupDumperTestP1 Text1" );
+ "TALK ABOUT BACKUPDUMPERTESTP1 TEXT1",
+ false,
+ "BackupTextPassTestModel",
+ "text/plain" );
$this->assertPageEnd();
$lookingForPage = 1;
@@ -440,10 +458,10 @@ class TextPassDumperTest extends DumpTestCase {
if ( $fname === null ) {
$fname = $this->getNewTempFile();
}
- $header = '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.7/" '
+ $header = '<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" '
. 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
- . 'xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.7/ '
- . 'http://www.mediawiki.org/xml/export-0.7.xsd" version="0.7" xml:lang="en">
+ . 'xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ '
+ . 'http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
<siteinfo>
<sitename>wikisvn</sitename>
<base>http://localhost/wiki-svn/index.php/Main_Page</base>
@@ -489,10 +507,10 @@ class TextPassDumperTest extends DumpTestCase {
<ip>127.0.0.1</ip>
</contributor>
<comment>BackupDumperTestP1Summary1</comment>
- <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="' . $this->textId1_1 . '" bytes="23" />
+ <sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
</revision>
</page>
';
@@ -507,10 +525,10 @@ class TextPassDumperTest extends DumpTestCase {
<ip>127.0.0.1</ip>
</contributor>
<comment>BackupDumperTestP2Summary1</comment>
- <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="' . $this->textId2_1 . '" bytes="23" />
+ <sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
</revision>
<revision>
<id>' . ( $this->revId2_2 + $i * self::$numOfRevs ) . '</id>
@@ -520,10 +538,10 @@ class TextPassDumperTest extends DumpTestCase {
<ip>127.0.0.1</ip>
</contributor>
<comment>BackupDumperTestP2Summary2</comment>
- <sha1>b7vj5ks32po5m1z1t1br4o7scdwwy95</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="' . $this->textId2_2 . '" bytes="23" />
+ <sha1>b7vj5ks32po5m1z1t1br4o7scdwwy95</sha1>
</revision>
<revision>
<id>' . ( $this->revId2_3 + $i * self::$numOfRevs ) . '</id>
@@ -533,10 +551,10 @@ class TextPassDumperTest extends DumpTestCase {
<ip>127.0.0.1</ip>
</contributor>
<comment>BackupDumperTestP2Summary3</comment>
- <sha1>jfunqmh1ssfb8rs43r19w98k28gg56r</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="' . $this->textId2_3 . '" bytes="23" />
+ <sha1>jfunqmh1ssfb8rs43r19w98k28gg56r</sha1>
</revision>
<revision>
<id>' . ( $this->revId2_4 + $i * self::$numOfRevs ) . '</id>
@@ -546,10 +564,10 @@ class TextPassDumperTest extends DumpTestCase {
<ip>127.0.0.1</ip>
</contributor>
<comment>BackupDumperTestP2Summary4 extra</comment>
- <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
<model>wikitext</model>
<format>text/x-wiki</format>
<text id="' . $this->textId2_4 . '" bytes="44" />
+ <sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
</revision>
</page>
';
@@ -566,10 +584,10 @@ class TextPassDumperTest extends DumpTestCase {
<ip>127.0.0.1</ip>
</contributor>
<comment>Talk BackupDumperTestP1 Summary1</comment>
- <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
- <model>wikitext</model>
- <format>text/x-wiki</format>
+ <model>BackupTextPassTestModel</model>
+ <format>text/plain</format>
<text id="' . $this->textId4_1 . '" bytes="35" />
+ <sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
</revision>
</page>
';
@@ -582,3 +600,73 @@ class TextPassDumperTest extends DumpTestCase {
return $fname;
}
}
+
+class BackupTextPassTestModelHandler extends TextContentHandler {
+
+ public function __construct() {
+ parent::__construct( 'BackupTextPassTestModel' );
+ }
+
+ public function exportTransform( $text, $format = null ) {
+ return strtoupper( $text );
+ }
+
+}
+
+/**
+ * Tests for TextPassDumper that do not rely on the database
+ *
+ * (As the Database group is only detected at class level (not method level), we
+ * cannot bring this test case's tests into the above main test case.)
+ *
+ * @group Dump
+ * @covers TextPassDumper
+ */
+class TextPassDumperDatabaselessTest extends MediaWikiLangTestCase {
+ /**
+ * Ensures that setting the buffer size is effective.
+ *
+ * @dataProvider bufferSizeProvider
+ */
+ function testBufferSizeSetting( $expected, $size, $msg ) {
+ $dumper = new TextPassDumperAccessor( array( "--buffersize=" . $size ) );
+ $this->assertEquals( $expected, $dumper->getBufferSize(), $msg);
+ }
+
+ /**
+ * Ensures that setting the buffer size is effective.
+ *
+ * @dataProvider bufferSizeProvider
+ */
+ function bufferSizeProvider() {
+ // expected, bufferSize to initialize with, message
+ return array(
+ array( 512 * 1024, 512 * 1024, "Setting 512KB is not effective" ),
+ array( 8192, 8192, "Setting 8KB is not effective" ),
+ array( 4096, 2048, "Could set buffer size below lower bound" )
+ );
+ }
+}
+
+/**
+ * Accessor for internal state of TextPassDumper
+ *
+ * Do not warrentless add getters here.
+ */
+class TextPassDumperAccessor extends TextPassDumper {
+ /**
+ * Gets the bufferSize.
+ *
+ * If bufferSize setting does not work correctly, testCheckpoint... tests
+ * fail and point in the wrong direction. To aid in troubleshooting when
+ * testCheckpoint... tests break at some point in the future, we test the
+ * bufferSize setting, hence need this accessor.
+ *
+ * (Yes, bufferSize is internal state of the TextPassDumper, but aiding
+ * debugging of testCheckpoint... in the future seems to be worth testing
+ * against it nonetheless.)
+ */
+ public function getBufferSize() {
+ return $this->bufferSize;
+ }
+}
diff --git a/tests/phpunit/phpunit.php b/tests/phpunit/phpunit.php
index 11255043..e59b5063 100644
--- a/tests/phpunit/phpunit.php
+++ b/tests/phpunit/phpunit.php
@@ -93,6 +93,12 @@ class PHPUnitMaintClass extends Maintenance {
public function execute() {
global $IP;
+ // Deregister handler from MWExceptionHandler::installHandle so that PHPUnit's own handler
+ // stays in tact.
+ // Has to in execute() instead of finalSetup(), because finalSetup() runs before
+ // doMaintenance.php includes Setup.php, which calls MWExceptionHandler::installHandle().
+ restore_error_handler();
+
$this->forceFormatServerArgv();
# Make sure we have --configuration or PHPUnit might complain
diff --git a/tests/phpunit/structure/AutoLoaderTest.php b/tests/phpunit/structure/AutoLoaderTest.php
index 2bdc9c9a..cde6547a 100644
--- a/tests/phpunit/structure/AutoLoaderTest.php
+++ b/tests/phpunit/structure/AutoLoaderTest.php
@@ -2,27 +2,22 @@
class AutoLoaderTest extends MediaWikiTestCase {
protected function setUp() {
- global $wgAutoloadLocalClasses, $wgAutoloadClasses;
-
parent::setUp();
// Fancy dance to trigger a rebuild of AutoLoader::$autoloadLocalClassesLower
- $this->testLocalClasses = array(
- 'TestAutoloadedLocalClass' => __DIR__ . '/../data/autoloader/TestAutoloadedLocalClass.php',
- 'TestAutoloadedCamlClass' => __DIR__ . '/../data/autoloader/TestAutoloadedCamlClass.php',
+ $this->mergeMwGlobalArrayValue( 'wgAutoloadLocalClasses', array(
+ 'TestAutoloadedLocalClass' =>
+ __DIR__ . '/../data/autoloader/TestAutoloadedLocalClass.php',
+ 'TestAutoloadedCamlClass' =>
+ __DIR__ . '/../data/autoloader/TestAutoloadedCamlClass.php',
'TestAutoloadedSerializedClass' =>
__DIR__ . '/../data/autoloader/TestAutoloadedSerializedClass.php',
- );
- $this->setMwGlobals(
- 'wgAutoloadLocalClasses',
- $this->testLocalClasses + $wgAutoloadLocalClasses
- );
+ ) );
AutoLoader::resetAutoloadLocalClassesLower();
- $this->testExtensionClasses = array(
+ $this->mergeMwGlobalArrayValue( 'wgAutoloadClasses', array(
'TestAutoloadedClass' => __DIR__ . '/../data/autoloader/TestAutoloadedClass.php',
- );
- $this->setMwGlobals( 'wgAutoloadClasses', $this->testExtensionClasses + $wgAutoloadClasses );
+ ) );
}
/**
@@ -49,7 +44,7 @@ class AutoLoaderTest extends MediaWikiTestCase {
$files = array_unique( $expected );
- foreach ( $files as $file ) {
+ foreach ( $files as $class => $file ) {
// Only prefix $IP if it doesn't have it already.
// Generally local classes don't have it, and those from extensions and test suites do.
if ( substr( $file, 0, 1 ) != '/' && substr( $file, 1, 1 ) != ':' ) {
@@ -58,7 +53,19 @@ class AutoLoaderTest extends MediaWikiTestCase {
$filePath = $file;
}
+ if ( !file_exists( $filePath ) ) {
+ $actual[$class] = "[file '$filePath' does not exist]";
+ continue;
+ }
+
+ wfSuppressWarnings();
$contents = file_get_contents( $filePath );
+ wfRestoreWarnings();
+
+ if ( $contents === false ) {
+ $actual[$class] = "[couldn't read file '$filePath']";
+ continue;
+ }
// We could use token_get_all() here, but this is faster
$matches = array();
@@ -123,10 +130,14 @@ class AutoLoaderTest extends MediaWikiTestCase {
}
function testWrongCaseClass() {
+ $this->setMwGlobals( 'wgAutoloadAttemptLowercase', true );
+
$this->assertTrue( class_exists( 'testautoLoadedcamlCLASS' ) );
}
function testWrongCaseSerializedClass() {
+ $this->setMwGlobals( 'wgAutoloadAttemptLowercase', true );
+
$dummyCereal = 'O:29:"testautoloadedserializedclass":0:{}';
$uncerealized = unserialize( $dummyCereal );
$this->assertFalse( $uncerealized instanceof __PHP_Incomplete_Class,
diff --git a/tests/phpunit/structure/AvailableRightsTest.php b/tests/phpunit/structure/AvailableRightsTest.php
new file mode 100644
index 00000000..51d31aaa
--- /dev/null
+++ b/tests/phpunit/structure/AvailableRightsTest.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * Try to make sure that extensions register all rights in $wgAvailableRights
+ * or via the 'UserGetAllRights' hook.
+ *
+ * @author Marius Hoch < hoo@online.de >
+ */
+class AvailableRightsTest extends PHPUnit_Framework_TestCase {
+
+ /**
+ * Returns all rights that should be in $wgAvailableRights + all rights
+ * registered via the 'UserGetAllRights' hook + all "core" rights.
+ *
+ * @return string[]
+ */
+ private function getAllVisibleRights() {
+ global $wgGroupPermissions, $wgRevokePermissions;
+
+ $rights = User::getAllRights();
+
+ foreach( $wgGroupPermissions as $permissions ) {
+ $rights = array_merge( $rights, array_keys( $permissions ) );
+ }
+
+ foreach( $wgRevokePermissions as $permissions ) {
+ $rights = array_merge( $rights, array_keys( $permissions ) );
+ }
+
+ $rights = array_unique( $rights );
+ sort( $rights );
+
+ return $rights;
+ }
+
+ public function testAvailableRights() {
+ $missingRights = array_diff(
+ $this->getAllVisibleRights(),
+ User::getAllRights()
+ );
+
+ $this->assertEquals(
+ array(),
+ // Re-index to produce nicer output, keys are meaningless.
+ array_values( $missingRights ),
+ 'Additional user rights need to be added to $wgAvailableRights or ' .
+ 'via the "UserGetAllRights" hook. See the instructions at: ' .
+ 'https://www.mediawiki.org/wiki/Manual:User_rights#Adding_new_rights'
+ );
+ }
+}
diff --git a/tests/phpunit/structure/ResourcesTest.php b/tests/phpunit/structure/ResourcesTest.php
index 2396ea29..d2b699d9 100644
--- a/tests/phpunit/structure/ResourcesTest.php
+++ b/tests/phpunit/structure/ResourcesTest.php
@@ -12,7 +12,6 @@
* @copyright © 2012, Santhosh Thottingal
* @copyright © 2012, Timo Tijhof
*
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
*/
class ResourcesTest extends MediaWikiTestCase {
@@ -91,6 +90,10 @@ class ResourcesTest extends MediaWikiTestCase {
foreach ( $data['modules'] as $moduleName => $module ) {
$moduleTargets = $module->getTargets();
foreach ( $module->getDependencies() as $dep ) {
+ if ( !isset( $data['modules'][$dep] ) ) {
+ // Missing dependencies reported by testMissingDependencies
+ continue;
+ }
$targets = $data['modules'][$dep]->getTargets();
foreach ( $moduleTargets as $moduleTarget ) {
$this->assertContains(
diff --git a/tests/phpunit/suite.xml b/tests/phpunit/suite.xml
index 574c11e4..1acbc241 100644
--- a/tests/phpunit/suite.xml
+++ b/tests/phpunit/suite.xml
@@ -39,6 +39,7 @@ phpunit.php enables colors for other OSs at runtime
<file>suites/UploadFromUrlTestSuite.php</file>
</testsuite>
<testsuite name="extensions">
+ <directory>structure</directory>
<file>suites/ExtensionsTestSuite.php</file>
<file>suites/ExtensionsParserTestSuite.php</file>
<file>suites/LessTestSuite.php</file>
@@ -57,7 +58,6 @@ phpunit.php enables colors for other OSs at runtime
<directory suffix=".php">../../includes</directory>
<directory suffix=".php">../../languages</directory>
<directory suffix=".php">../../maintenance</directory>
- <directory suffix=".php">../../resources</directory>
<directory suffix=".php">../../skins</directory>
</whitelist>
</filter>
diff --git a/tests/phpunit/suites/ExtensionsTestSuite.php b/tests/phpunit/suites/ExtensionsTestSuite.php
index 116065f8..723328e2 100644
--- a/tests/phpunit/suites/ExtensionsTestSuite.php
+++ b/tests/phpunit/suites/ExtensionsTestSuite.php
@@ -10,7 +10,7 @@ class ExtensionsTestSuite extends PHPUnit_Framework_TestSuite {
parent::__construct();
$paths = array();
// Extensions can return a list of files or directories
- wfRunHooks( 'UnitTestsList', array( &$paths ) );
+ Hooks::run( 'UnitTestsList', array( &$paths ) );
foreach ( $paths as $path ) {
if ( is_dir( $path ) ) {
// If the path is a directory, search for test cases.
diff --git a/tests/qunit/QUnitTestResources.php b/tests/qunit/QUnitTestResources.php
index 15c33f64..17b8b632 100644
--- a/tests/qunit/QUnitTestResources.php
+++ b/tests/qunit/QUnitTestResources.php
@@ -48,7 +48,6 @@ return array(
'tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js',
'tests/qunit/suites/resources/jquery/jquery.byteLength.test.js',
'tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js',
- 'tests/qunit/suites/resources/jquery/jquery.client.test.js',
'tests/qunit/suites/resources/jquery/jquery.color.test.js',
'tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js',
'tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js',
@@ -60,18 +59,24 @@ return array(
'tests/qunit/suites/resources/jquery/jquery.placeholder.test.js',
'tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js',
'tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js',
+ 'tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js',
'tests/qunit/suites/resources/jquery/jquery.textSelection.test.js',
'tests/qunit/data/mediawiki.jqueryMsg.data.js',
+ 'tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js',
+ 'tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js',
+ 'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.toc.test.js',
+ 'tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js',
+ 'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js',
'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js',
@@ -84,7 +89,6 @@ return array(
'jquery.autoEllipsis',
'jquery.byteLength',
'jquery.byteLimit',
- 'jquery.client',
'jquery.color',
'jquery.colorUtil',
'jquery.getAttrs',
@@ -99,13 +103,16 @@ return array(
'jquery.textSelection',
'mediawiki.api',
'mediawiki.api.category',
+ 'mediawiki.api.options',
'mediawiki.api.parse',
'mediawiki.api.watch',
'mediawiki.jqueryMsg',
+ 'mediawiki.messagePoster',
'mediawiki.Title',
'mediawiki.toc',
'mediawiki.Uri',
'mediawiki.user',
+ 'mediawiki.template',
'mediawiki.util',
'mediawiki.special.recentchanges',
'mediawiki.language',
diff --git a/tests/qunit/data/testrunner.js b/tests/qunit/data/testrunner.js
index db312b21..03aaf4af 100644
--- a/tests/qunit/data/testrunner.js
+++ b/tests/qunit/data/testrunner.js
@@ -26,32 +26,20 @@
*/
// When a test() indicates asynchronicity with stop(),
- // allow 10 seconds to pass before killing the test(),
+ // allow 30 seconds to pass before killing the test(),
// and assuming failure.
- QUnit.config.testTimeout = 10 * 1000;
+ QUnit.config.testTimeout = 30 * 1000;
+
+ QUnit.config.requireExpects = true;
// Add a checkbox to QUnit header to toggle MediaWiki ResourceLoader debug mode.
QUnit.config.urlConfig.push( {
id: 'debug',
label: 'Enable ResourceLoaderDebug',
- tooltip: 'Enable debug mode in ResourceLoader'
+ tooltip: 'Enable debug mode in ResourceLoader',
+ value: 'true'
} );
- QUnit.config.requireExpects = true;
-
- /**
- * Load TestSwarm agent
- */
- // Only if the current url indicates that there is a TestSwarm instance watching us
- // (TestSwarm appends swarmURL to the test suites url it loads in iframes).
- // Otherwise this is just a simple view of Special:JavaScriptTest/qunit directly,
- // no point in loading inject.js in that case. Also, make sure that this instance
- // of MediaWiki has actually been configured with the required url to that inject.js
- // script. By default it is false.
- if ( QUnit.urlParams.swarmURL && mw.config.get( 'QUnitTestSwarmInjectJSPath' ) ) {
- jQuery.getScript( QUnit.fixurl( mw.config.get( 'QUnitTestSwarmInjectJSPath' ) ) );
- }
-
/**
* CompletenessTest
*
@@ -256,6 +244,7 @@
},
teardown: function () {
+ var timers;
log( 'MwEnvironment> TEARDOWN for "' + QUnit.config.current.module
+ ': ' + QUnit.config.current.testName + '"' );
@@ -272,9 +261,18 @@
// Check for incomplete animations/requests/etc and throw
// error if there are any.
if ( $.timers && $.timers.length !== 0 ) {
- // Test may need to use fake timers, wait for animations or
- // call $.fx.stop().
- throw new Error( 'Unfinished animations: ' + $.timers.length );
+ timers = $.timers.length;
+ // Tests shoulld use fake timers or wait for animations to complete
+ $.each( $.timers, function ( i, timer ) {
+ var node = timer.elem;
+ mw.log.warn( 'Unfinished animation #' + i + ' in ' + timer.queue + ' queue on ' +
+ mw.html.element( node.nodeName.toLowerCase(), $(node).getAttrs() )
+ );
+ } );
+ // Force animations to stop to give the next test a clean start
+ $.fx.stop();
+
+ throw new Error( 'Unfinished animations: ' + timers );
}
if ( $.active !== undefined && $.active !== 0 ) {
// Test may need to use fake XHR, wait for requests or
diff --git a/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js b/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js
index f6ea1b48..4484467d 100644
--- a/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js
+++ b/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js
@@ -7,7 +7,7 @@
} ) );
var getAccessKeyPrefixTestData = [
- //ua string, platform string, expected prefix
+ // ua string, platform string, expected prefix
// Internet Explorer
['Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-'],
['Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-'],
@@ -27,11 +27,11 @@
['Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-'],
['Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-']
],
- //strings appended to title to make sure updateTooltipAccessKeys handles them correctly
+ // strings appended to title to make sure updateTooltipAccessKeys handles them correctly
updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ];
function makeInput( title, accessKey ) {
- //The properties aren't escaped, so make sure you don't call this function with values that need to be escaped!
+ // The properties aren't escaped, so make sure you don't call this function with values that need to be escaped!
return '<input title="' + title + '" ' + ( accessKey ? 'accessKey="' + accessKey + '" ' : '' ) + ' />';
}
@@ -46,10 +46,10 @@
} );
QUnit.test( 'updateTooltipAccessKeys - current browser', 2, function ( assert ) {
- var title = $( makeInput ( 'Title', 'a' ) ).updateTooltipAccessKeys().prop( 'title' ),
- //The new title should be something like "Title [alt-a]", but the exact label will depend on the browser.
- //The "a" could be capitalized, and the prefix could be anything, e.g. a simple "^" for ctrl-
- //(no browser is known using such a short prefix, though) or "Alt+Umschalt+" in German Firefox.
+ var title = $( makeInput( 'Title', 'a' ) ).updateTooltipAccessKeys().prop( 'title' ),
+ // The new title should be something like "Title [alt-a]", but the exact label will depend on the browser.
+ // The "a" could be capitalized, and the prefix could be anything, e.g. a simple "^" for ctrl-
+ // (no browser is known using such a short prefix, though) or "Alt+Umschalt+" in German Firefox.
result = /^Title \[(.+)[aA]\]$/.exec( title );
assert.ok( result, 'title should match expected structure.' );
assert.notEqual( result[1], 'test-', 'Prefix used for testing shouldn\'t be used in production.' );
diff --git a/tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js b/tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
index 22d2af19..0cb9cc81 100644
--- a/tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
+++ b/tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
@@ -60,7 +60,7 @@
);
QUnit.start();
- }, 10 );
+ } );
} );
}
diff --git a/tests/qunit/suites/resources/jquery/jquery.client.test.js b/tests/qunit/suites/resources/jquery/jquery.client.test.js
deleted file mode 100644
index c6dd91c4..00000000
--- a/tests/qunit/suites/resources/jquery/jquery.client.test.js
+++ /dev/null
@@ -1,638 +0,0 @@
-( function ( $ ) {
-
- QUnit.module( 'jquery.client', QUnit.newMwEnvironment() );
-
- var uacount = 0,
- // Object keyed by userAgent. Value is an array (human-readable name, client-profile object, navigator.platform value)
- uas = {
- // Internet Explorer 6
- // Internet Explorer 7
- 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)': {
- title: 'Internet Explorer 7',
- platform: 'Win32',
- profile: {
- name: 'msie',
- layout: 'trident',
- layoutVersion: 'unknown',
- platform: 'win',
- version: '7.0',
- versionBase: '7',
- versionNumber: 7
- },
- wikiEditor: {
- ltr: true,
- rtl: false
- }
- },
- // Internet Explorer 8
- // Internet Explorer 9
- // Internet Explorer 10
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)': {
- title: 'Internet Explorer 10',
- platform: 'Win32',
- profile: {
- name: 'msie',
- layout: 'trident',
- layoutVersion: 6,
- platform: 'win',
- version: '10.0',
- versionBase: '10',
- versionNumber: 10
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Internet Explorer 11
- 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko': {
- title: 'Internet Explorer 11',
- platform: 'Win32',
- profile: {
- name: 'msie',
- layout: 'trident',
- layoutVersion: 7,
- platform: 'win',
- version: '11.0',
- versionBase: '11',
- versionNumber: 11
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Internet Explorer 11 - Windows 8.1 x64 Modern UI
- 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko': {
- title: 'Internet Explorer 11',
- platform: 'Win64',
- profile: {
- name: 'msie',
- layout: 'trident',
- layoutVersion: 7,
- platform: 'win',
- version: '11.0',
- versionBase: '11',
- versionNumber: 11
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Internet Explorer 11 - Windows 8.1 x64 desktop UI
- 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko': {
- title: 'Internet Explorer 11',
- platform: 'WOW64',
- profile: {
- name: 'msie',
- layout: 'trident',
- layoutVersion: 7,
- platform: 'win',
- version: '11.0',
- versionBase: '11',
- versionNumber: 11
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Firefox 2
- // Firefox 3.5
- 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19': {
- title: 'Firefox 3.5',
- platform: 'MacIntel',
- profile: {
- name: 'firefox',
- layout: 'gecko',
- layoutVersion: 20110420,
- platform: 'mac',
- version: '3.5.19',
- versionBase: '3',
- versionNumber: 3.5
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Firefox 3.6
- 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17': {
- title: 'Firefox 3.6',
- platform: 'Linux i686',
- profile: {
- name: 'firefox',
- layout: 'gecko',
- layoutVersion: 20110422,
- platform: 'linux',
- version: '3.6.17',
- versionBase: '3',
- versionNumber: 3.6
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Firefox 4
- 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1': {
- title: 'Firefox 4',
- platform: 'Win32',
- profile: {
- name: 'firefox',
- layout: 'gecko',
- layoutVersion: 20100101,
- platform: 'win',
- version: '4.0.1',
- versionBase: '4',
- versionNumber: 4
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Firefox 10 nightly build
- 'Mozilla/5.0 (X11; Linux x86_64; rv:10.0a1) Gecko/20111103 Firefox/10.0a1': {
- title: 'Firefox 10 nightly',
- platform: 'Linux',
- profile: {
- name: 'firefox',
- layout: 'gecko',
- layoutVersion: 20111103,
- platform: 'linux',
- version: '10.0a1',
- versionBase: '10',
- versionNumber: 10
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Iceweasel 10.0.6
- 'Mozilla/5.0 (X11; Linux i686; rv:10.0.6) Gecko/20100101 Iceweasel/10.0.6': {
- title: 'Iceweasel 10.0.6',
- platform: 'Linux',
- profile: {
- name: 'iceweasel',
- layout: 'gecko',
- layoutVersion: 20100101,
- platform: 'linux',
- version: '10.0.6',
- versionBase: '10',
- versionNumber: 10
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Iceweasel 15.0.1
- 'Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1 Iceweasel/15.0.1': {
- title: 'Iceweasel 15.0.1',
- platform: 'Linux',
- profile: {
- name: 'iceweasel',
- layout: 'gecko',
- layoutVersion: 20100101,
- platform: 'linux',
- version: '15.0.1',
- versionBase: '15',
- versionNumber: 15
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Firefox 5
- // Safari 3
- // Safari 4
- 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
- title: 'Safari 4',
- platform: 'MacIntel',
- profile: {
- name: 'safari',
- layout: 'webkit',
- layoutVersion: 531,
- platform: 'mac',
- version: '4.0.5',
- versionBase: '4',
- versionNumber: 4
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- 'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7': {
- title: 'Safari 4',
- platform: 'Win32',
- profile: {
- name: 'safari',
- layout: 'webkit',
- layoutVersion: 533,
- platform: 'win',
- version: '4.0.5',
- versionBase: '4',
- versionNumber: 4
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Safari 5
- // Safari 6
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29.13': {
- title: 'Safari 6',
- platform: 'MacIntel',
- profile: {
- name: 'safari',
- layout: 'webkit',
- layoutVersion: 536,
- platform: 'mac',
- version: '6.0.4',
- versionBase: '6',
- versionNumber: 6
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Safari 6.0.5+ (doesn't have the comma in "KHTML, like Gecko")
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 1084) AppleWebKit/536.30.1 (KHTML like Gecko) Version/6.0.5 Safari/536.30.1': {
- title: 'Safari 6',
- platform: 'MacIntel',
- profile: {
- name: 'safari',
- layout: 'webkit',
- layoutVersion: 536,
- platform: 'mac',
- version: '6.0.5',
- versionBase: '6',
- versionNumber: 6
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Opera 10+
- 'Opera/9.80 (Windows NT 5.1)': {
- title: 'Opera 10+ (exact version unspecified)',
- platform: 'Win32',
- profile: {
- name: 'opera',
- layout: 'presto',
- layoutVersion: 'unknown',
- platform: 'win',
- version: '10',
- versionBase: '10',
- versionNumber: 10
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Opera 12
- 'Opera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.11': {
- title: 'Opera 12',
- platform: 'Win32',
- profile: {
- name: 'opera',
- layout: 'presto',
- layoutVersion: 'unknown',
- platform: 'win',
- version: '12.11',
- versionBase: '12',
- versionNumber: 12.11
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Opera 15 (WebKit-based)
- 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130': {
- title: 'Opera 15',
- platform: 'Win32',
- profile: {
- name: 'opera',
- layout: 'webkit',
- layoutVersion: 537,
- platform: 'win',
- version: '15.0.1147.130',
- versionBase: '15',
- versionNumber: 15
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Chrome 5
- // Chrome 6
- // Chrome 7
- // Chrome 8
- // Chrome 9
- // Chrome 10
- // Chrome 11
- // Chrome 12
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30': {
- title: 'Chrome 12',
- platform: 'MacIntel',
- profile: {
- name: 'chrome',
- layout: 'webkit',
- layoutVersion: 534,
- platform: 'mac',
- version: '12.0.742.112',
- versionBase: '12',
- versionNumber: 12
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30': {
- title: 'Chrome 12',
- platform: 'Linux i686',
- profile: {
- name: 'chrome',
- layout: 'webkit',
- layoutVersion: 534,
- platform: 'linux',
- version: '12.0.742.68',
- versionBase: '12',
- versionNumber: 12
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Android WebKit Browser 2.3
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1': {
- title: 'Android WebKit Browser 2.3',
- platform: 'Linux armv7l',
- profile: {
- name: 'android',
- layout: 'webkit',
- layoutVersion: 533,
- platform: 'linux',
- version: '2.3.5',
- versionBase: '2',
- versionNumber: 2.3
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Rekonq (bug 34924)
- 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34': {
- title: 'Rekonq',
- platform: 'Linux i686',
- profile: {
- name: 'rekonq',
- layout: 'webkit',
- layoutVersion: 534,
- platform: 'linux',
- version: '534.34',
- versionBase: '534',
- versionNumber: 534.34
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- // Konqueror
- 'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9': {
- title: 'Konqueror',
- platform: 'Linux i686',
- profile: {
- name: 'konqueror',
- layout: 'khtml',
- layoutVersion: 'unknown',
- platform: 'linux',
- version: '4.9.1',
- versionBase: '4',
- versionNumber: 4.9
- },
- wikiEditor: {
- // '4.9' is less than '4.11'.
- ltr: false,
- rtl: false
- },
- wikiEditorLegacy: {
- // The check is missing in legacyTestMap
- ltr: true,
- rtl: true
- }
- },
- // Amazon Silk
- 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.13.81_10003810) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true': {
- title: 'Silk',
- platform: 'Desktop',
- profile: {
- name: 'silk',
- layout: 'webkit',
- layoutVersion: 533,
- platform: 'unknown',
- version: '1.0.13.81_10003810',
- versionBase: '1',
- versionNumber: 1
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- },
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true': {
- title: 'Silk',
- platform: 'Mobile',
- profile: {
- name: 'silk',
- layout: 'webkit',
- layoutVersion: 535,
- platform: 'unknown',
- version: '2.1',
- versionBase: '2',
- versionNumber: 2.1
- },
- wikiEditor: {
- ltr: true,
- rtl: true
- }
- }
- },
- testMap = {
- // Example from WikiEditor, modified to provide version identifiers as strings and with
- // Konqueror 4.11 check added.
- 'ltr': {
- 'msie': [['>=', '7.0']],
- 'firefox': [['>=', '2']],
- 'opera': [['>=', '9.6']],
- 'safari': [['>=', '3']],
- 'chrome': [['>=', '3']],
- 'netscape': [['>=', '9']],
- 'konqueror': [['>=', '4.11']],
- 'blackberry': false,
- 'ipod': false,
- 'iphone': false
- },
- 'rtl': {
- 'msie': [['>=', '8']],
- 'firefox': [['>=', '2']],
- 'opera': [['>=', '9.6']],
- 'safari': [['>=', '3']],
- 'chrome': [['>=', '3']],
- 'netscape': [['>=', '9']],
- 'konqueror': [['>=', '4.11']],
- 'blackberry': false,
- 'ipod': false,
- 'iphone': false
- }
- },
- legacyTestMap = {
- // Original example from WikiEditor.
- // This is using the old, but still supported way of providing version identifiers as numbers
- // instead of strings; with this method, 4.9 would be considered larger than 4.11.
- 'ltr': {
- 'msie': [['>=', 7.0]],
- 'firefox': [['>=', 2]],
- 'opera': [['>=', 9.6]],
- 'safari': [['>=', 3]],
- 'chrome': [['>=', 3]],
- 'netscape': [['>=', 9]],
- 'blackberry': false,
- 'ipod': false,
- 'iphone': false
- },
- 'rtl': {
- 'msie': [['>=', 8]],
- 'firefox': [['>=', 2]],
- 'opera': [['>=', 9.6]],
- 'safari': [['>=', 3]],
- 'chrome': [['>=', 3]],
- 'netscape': [['>=', 9]],
- 'blackberry': false,
- 'ipod': false,
- 'iphone': false
- }
- }
- ;
-
- // Count test cases
- $.each( uas, function () {
- uacount++;
- } );
-
- QUnit.test( 'profile( navObject )', 7, function ( assert ) {
- var p = $.client.profile();
-
- function unknownOrType( val, type, summary ) {
- assert.ok( typeof val === type || val === 'unknown', summary );
- }
-
- assert.equal( typeof p, 'object', 'profile returns an object' );
- unknownOrType( p.layout, 'string', 'p.layout is a string (or "unknown")' );
- unknownOrType( p.layoutVersion, 'number', 'p.layoutVersion is a number (or "unknown")' );
- unknownOrType( p.platform, 'string', 'p.platform is a string (or "unknown")' );
- unknownOrType( p.version, 'string', 'p.version is a string (or "unknown")' );
- unknownOrType( p.versionBase, 'string', 'p.versionBase is a string (or "unknown")' );
- assert.equal( typeof p.versionNumber, 'number', 'p.versionNumber is a number' );
- } );
-
- QUnit.test( 'profile( navObject ) - samples', uacount, function ( assert ) {
- // Loop through and run tests
- $.each( uas, function ( rawUserAgent, data ) {
- // Generate a client profile object and compare recursively
- var ret = $.client.profile( {
- userAgent: rawUserAgent,
- platform: data.platform
- } );
- assert.deepEqual( ret, data.profile, 'Client profile support check for ' + data.title + ' (' + data.platform + '): ' + rawUserAgent );
- } );
- } );
-
- QUnit.test( 'test( testMap )', 4, function ( assert ) {
- // .test() uses eval, make sure no exceptions are thrown
- // then do a basic return value type check
- var testMatch = $.client.test( testMap ),
- ie7Profile = $.client.profile( {
- 'userAgent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
- 'platform': ''
- } );
-
- assert.equal( typeof testMatch, 'boolean', 'map with ltr/rtl split returns a boolean value' );
-
- testMatch = $.client.test( testMap.ltr );
-
- assert.equal( typeof testMatch, 'boolean', 'simple map (without ltr/rtl split) returns a boolean value' );
-
- assert.equal( $.client.test( {
- 'msie': null
- }, ie7Profile ), true, 'returns true if any version of a browser are allowed (null)' );
-
- assert.equal( $.client.test( {
- 'msie': false
- }, ie7Profile ), false, 'returns false if all versions of a browser are not allowed (false)' );
- } );
-
- QUnit.test( 'test( testMap, exactMatchOnly )', 2, function ( assert ) {
- var ie7Profile = $.client.profile( {
- 'userAgent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
- 'platform': ''
- } );
-
- assert.equal( $.client.test( {
- 'firefox': [['>=', 2]]
- }, ie7Profile, false ), true, 'returns true if browser not found and exactMatchOnly not set' );
-
- assert.equal( $.client.test( {
- 'firefox': [['>=', 2]]
- }, ie7Profile, true ), false, 'returns false if browser not found and exactMatchOnly is set' );
- } );
-
- QUnit.test( 'test( testMap ), test( legacyTestMap ) - WikiEditor sample', uacount * 2 * 2, function ( assert ) {
- var $body = $( 'body' ),
- bodyClasses = $body.attr( 'class' );
-
- // Loop through and run tests
- $.each( uas, function ( agent, data ) {
- $.each( ['ltr', 'rtl'], function ( i, dir ) {
- var profile, testMatch, legacyTestMatch;
- $body.removeClass( 'ltr rtl' ).addClass( dir );
- profile = $.client.profile( {
- userAgent: agent,
- platform: data.platform
- } );
- testMatch = $.client.test( testMap, profile );
- legacyTestMatch = $.client.test( legacyTestMap, profile );
- $body.removeClass( dir );
-
- assert.equal(
- testMatch,
- data.wikiEditor[dir],
- 'testing comparison based on ' + dir + ', ' + agent
- );
- assert.equal(
- legacyTestMatch,
- data.wikiEditorLegacy ? data.wikiEditorLegacy[dir] : data.wikiEditor[dir],
- 'testing comparison based on ' + dir + ', ' + agent + ' (legacyTestMap)'
- );
- } );
- } );
-
- // Restore body classes
- $body.attr( 'class', bodyClasses );
- } );
-}( jQuery ) );
diff --git a/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js b/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js
index 0b7e87ee..ca3f418c 100644
--- a/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js
+++ b/tests/qunit/suites/resources/jquery/jquery.getAttrs.test.js
@@ -1,13 +1,14 @@
( function ( $ ) {
QUnit.module( 'jquery.getAttrs', QUnit.newMwEnvironment() );
- QUnit.test( 'Check', 1, function ( assert ) {
+ QUnit.test( 'getAttrs()', 1, function ( assert ) {
var attrs = {
foo: 'bar',
- 'class': 'lorem'
+ 'class': 'lorem',
+ 'data-foo': 'data value'
},
$el = $( '<div>' ).attr( attrs );
- assert.deepEqual( $el.getAttrs(), attrs, 'getAttrs() return object should match the attributes set, no more, no less' );
+ assert.propEqual( $el.getAttrs(), attrs, 'keys and values match' );
} );
}( jQuery ) );
diff --git a/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js b/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js
index bbea8297..78c185f1 100644
--- a/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js
+++ b/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js
@@ -1,10 +1,10 @@
-(function ($) {
+( function ($) {
QUnit.module('jquery.placeholder', QUnit.newMwEnvironment());
QUnit.test('caches results of feature tests', 2, function (assert) {
- assert.strictEqual(typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input');
- assert.strictEqual(typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea');
+ assert.strictEqual( typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input');
+ assert.strictEqual( typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea');
});
if ($.fn.placeholder.input && $.fn.placeholder.textarea) {
diff --git a/tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js b/tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
new file mode 100644
index 00000000..97a3ae12
--- /dev/null
+++ b/tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
@@ -0,0 +1,223 @@
+( function ( $, mw ) {
+ /**
+ * This module tests the input/output capabilities of the parsers of tablesorter.
+ * It does not test actual sorting.
+ */
+
+ var text, ipv4,
+ simpleMDYDatesInMDY, simpleMDYDatesInDMY, oldMDYDates, complexMDYDates, clobberedDates, MYDates, YDates,
+ currencyData, transformedCurrencyData;
+
+ QUnit.module( 'jquery.tablesorter.parsers', QUnit.newMwEnvironment( {
+ setup: function () {
+ this.liveMonths = mw.language.months;
+ mw.language.months = {
+ 'keys': {
+ 'names': ['january', 'february', 'march', 'april', 'may_long', 'june',
+ 'july', 'august', 'september', 'october', 'november', 'december'],
+ 'genitive': ['january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+ 'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen'],
+ 'abbrev': ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
+ 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+ },
+ 'names': ['January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December'],
+ 'genitive': ['January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December'],
+ 'abbrev': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+ };
+ },
+ teardown: function () {
+ mw.language.months = this.liveMonths;
+ },
+ config: {
+ wgContentLanguage: 'en',
+ /* default date format of the content language */
+ wgDefaultDateFormat: 'dmy',
+ /* These two are important for numeric interpretations */
+ wgSeparatorTransformTable: ['', ''],
+ wgDigitTransformTable: ['', '']
+ }
+ } ) );
+
+ /**
+ * For a value, check if the parser recognizes it and how it transforms it
+ *
+ * @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
+ * @param {function($table)} callback something to do before we start the testcase
+ */
+ function parserTest( msg, parserId, data, callback ) {
+ QUnit.test( msg, data.length * 2, function ( assert ) {
+ var extractedR, extractedF, parser;
+
+ if (callback !== undefined ) {
+ callback();
+ }
+
+ parser = $.tablesorter.getParser( parserId );
+ $.each( data, function ( index, testcase ) {
+ extractedR = parser.is( testcase[0] );
+ extractedF = parser.format( testcase[0] );
+
+ assert.strictEqual( extractedR, testcase[1], 'Detect: ' + testcase[3] );
+ assert.strictEqual( extractedF, testcase[2], 'Sortkey: ' + testcase[3] );
+ } );
+
+ } );
+ }
+
+ text = [
+ [ 'Mars', true, 'mars', 'Simple text' ],
+ [ 'Mẘas', true, 'mẘas', 'Non ascii character' ],
+ [ 'A sentence', true, 'a sentence', 'A sentence with space chars' ]
+ ];
+ parserTest( 'Textual keys', 'text', text );
+
+ ipv4 = [
+ // Some randomly generated fake IPs
+ ['0.0.0.0', true, 0, 'An IP address' ],
+ ['255.255.255.255', true, 255255255255, 'An IP address' ],
+ ['45.238.27.109', true, 45238027109, 'An IP address' ],
+ ['1.238.27.1', true, 1238027001, 'An IP address with small numbers' ],
+ ['238.27.1', false, 238027001, 'A malformed IP Address' ],
+ ['1', false, 1, 'A super malformed IP Address' ],
+ ['Just text', false, 0, 'A line with just text' ],
+ ['45.238.27.109Postfix', false, 45238027109, 'An IP address with a connected postfix' ],
+ ['45.238.27.109 postfix', false, 45238027109, 'An IP address with a seperated postfix' ]
+ ];
+ 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']
+ ];
+ 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']
+ ];
+ parserTest( 'MDY Dates using dmy content language', 'date', simpleMDYDatesInDMY, function () {
+ mw.config.set( {
+ 'wgDefaultDateFormat': 'dmy',
+ 'wgContentLanguage': 'de'
+ } );
+ } );
+
+ 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']
+ ];
+ 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, '']
+ ];
+ 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']
+ ];
+ 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']
+ ];
+ 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']
+ ];
+ parserTest( 'Y Dates', 'date', YDates );
+
+ 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, '']
+ ];
+ 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, '']
+ ];
+ parserTest( 'Currency with european separators', 'currency', transformedCurrencyData, function () {
+ mw.config.set( {
+ // We expect 22'234.444,22
+ // Map from ascii separators => localized separators
+ wgSeparatorTransformTable: [', . ,', '\' , .'],
+ wgDigitTransformTable: ['', '']
+ } );
+ } );
+
+ // TODO add numbers sorting tests for bug 8115 with a different language
+
+}( jQuery, mediaWiki ) );
diff --git a/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js b/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
index 92dad9ff..f63aa27a 100644
--- a/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
+++ b/tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
@@ -156,9 +156,29 @@
];
QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment( {
+ setup: function () {
+ this.liveMonths = mw.language.months;
+ mw.language.months = {
+ 'keys': {
+ 'names': ['january', 'february', 'march', 'april', 'may_long', 'june',
+ 'july', 'august', 'september', 'october', 'november', 'december'],
+ 'genitive': ['january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+ 'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen'],
+ 'abbrev': ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
+ 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+ },
+ 'names': ['January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December'],
+ 'genitive': ['January', 'February', 'March', 'April', 'May', 'June',
+ 'July', 'August', 'September', 'October', 'November', 'December'],
+ 'abbrev': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+ };
+ },
+ teardown: function () {
+ mw.language.months = this.liveMonths;
+ },
config: {
- wgMonthNames: ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
- wgMonthNamesShort: ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
wgDefaultDateFormat: 'dmy',
wgSeparatorTransformTable: ['', ''],
wgDigitTransformTable: ['', ''],
@@ -1160,11 +1180,11 @@
'</table>'
);
$table.tablesorter();
- assert.equal( $table.find( '#A2' ).prop( 'headerIndex' ),
+ assert.equal( $table.find( '#A2' ).data( 'headerIndex' ),
undefined,
'A2 should not be a sort header'
);
- assert.equal( $table.find( '#C1' ).prop( 'headerIndex' ),
+ assert.equal( $table.find( '#C1' ).data( 'headerIndex' ),
2,
'C1 should be a sort header'
);
@@ -1181,11 +1201,11 @@
'</table>'
);
$table.tablesorter();
- assert.equal( $table.find( '#C2' ).prop( 'headerIndex' ),
+ assert.equal( $table.find( '#C2' ).data( 'headerIndex' ),
2,
'C2 should be a sort header'
);
- assert.equal( $table.find( '#C1' ).prop( 'headerIndex' ),
+ assert.equal( $table.find( '#C1' ).data( 'headerIndex' ),
undefined,
'C1 should not be a sort header'
);
@@ -1209,18 +1229,19 @@
// bug 53211 - exploding rowspans in more complex cases
QUnit.test(
'Rowspan exploding with row headers and colspans', 1, function ( assert ) {
- var $table = $( '<table class="sortable">' +
- '<thead><tr><th rowspan="2">n</th><th colspan="2">foo</th><th rowspan="2">baz</th></tr>' +
- '<tr><th>foo</th><th>bar</th></tr></thead>' +
- '<tbody>' +
- '<tr><td>1</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
- '<tr><td>2</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
- '</tbody></table>' );
+ var $table = $( '<table class="sortable">' +
+ '<thead><tr><th rowspan="2">n</th><th colspan="2">foo</th><th rowspan="2">baz</th></tr>' +
+ '<tr><th>foo</th><th>bar</th></tr></thead>' +
+ '<tbody>' +
+ '<tr><td>1</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
+ '<tr><td>2</td><td>foo</td><td>bar</td><td>baz</td></tr>' +
+ '</tbody></table>' );
$table.tablesorter();
- assert.equal( $table.find( 'tr:eq(1) th:eq(1)').prop('headerIndex'),
+ assert.equal( $table.find( 'tr:eq(1) th:eq(1)').data('headerIndex'),
2,
- 'Incorrect index of sort header' );
+ 'Incorrect index of sort header'
+ );
}
);
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js
new file mode 100644
index 00000000..c0a6585f
--- /dev/null
+++ b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js
@@ -0,0 +1,78 @@
+( function ( mw ) {
+ QUnit.module( 'mediawiki.api.options', QUnit.newMwEnvironment( {
+ setup: function () {
+ this.server = this.sandbox.useFakeServer();
+ }
+ } ) );
+
+ QUnit.test( 'saveOption', function ( assert ) {
+ QUnit.expect( 2 );
+
+ var
+ api = new mw.Api(),
+ stub = this.sandbox.stub( mw.Api.prototype, 'saveOptions' );
+
+ api.saveOption( 'foo', 'bar' );
+
+ assert.ok( stub.calledOnce, '#saveOptions called once' );
+ assert.deepEqual( stub.getCall( 0 ).args, [ { foo: 'bar' } ], '#saveOptions called correctly' );
+ } );
+
+ QUnit.test( 'saveOptions', function ( assert ) {
+ QUnit.expect( 13 );
+
+ var api = new mw.Api();
+
+ // We need to respond to the request for token first, otherwise the other requests won't be sent
+ // until after the server.respond call, which confuses sinon terribly. This sucks a lot.
+ api.getToken( 'options' );
+ this.server.respond(
+ /action=tokens.*&type=options/,
+ [ 200, { 'Content-Type': 'application/json' },
+ '{ "tokens": { "optionstoken": "+\\\\" } }' ]
+ );
+
+ api.saveOptions( {} ).done( function () {
+ assert.ok( true, 'Request completed: empty case' );
+ } );
+ api.saveOptions( { foo: 'bar' } ).done( function () {
+ assert.ok( true, 'Request completed: simple' );
+ } );
+ api.saveOptions( { foo: 'bar', baz: 'quux' } ).done( function () {
+ assert.ok( true, 'Request completed: two options' );
+ } );
+ api.saveOptions( { foo: 'bar|quux', bar: 'a|b|c', baz: 'quux' } ).done( function () {
+ assert.ok( true, 'Request completed: not bundleable' );
+ } );
+ api.saveOptions( { foo: null } ).done( function () {
+ assert.ok( true, 'Request completed: reset an option' );
+ } );
+ api.saveOptions( { 'foo|bar=quux': null } ).done( function () {
+ assert.ok( true, 'Request completed: reset an option, not bundleable' );
+ } );
+
+ // Requests are POST, match requestBody instead of url
+ this.server.respond( function ( request ) {
+ switch ( request.requestBody ) {
+ // simple
+ case 'action=options&format=json&change=foo%3Dbar&token=%2B%5C':
+ // two options
+ case 'action=options&format=json&change=foo%3Dbar%7Cbaz%3Dquux&token=%2B%5C':
+ // not bundleable
+ case 'action=options&format=json&optionname=foo&optionvalue=bar%7Cquux&token=%2B%5C':
+ case 'action=options&format=json&optionname=bar&optionvalue=a%7Cb%7Cc&token=%2B%5C':
+ case 'action=options&format=json&change=baz%3Dquux&token=%2B%5C':
+ // reset an option
+ case 'action=options&format=json&change=foo&token=%2B%5C':
+ // reset an option, not bundleable
+ case 'action=options&format=json&optionname=foo%7Cbar%3Dquux&token=%2B%5C':
+ assert.ok( true, 'Repond to ' + request.requestBody );
+ request.respond( 200, { 'Content-Type': 'application/json' },
+ '{ "options": "success" }' );
+ break;
+ default:
+ assert.ok( false, 'Unexpected request:' + request.requestBody );
+ }
+ } );
+ } );
+}( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
index f156c728..b89526fb 100644
--- a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
+++ b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
@@ -51,52 +51,26 @@
this.server.respond( function ( request ) {
if ( window.FormData ) {
- assert.ok( !request.url.match( /action=/), 'Request has no query string' );
+ assert.ok( !request.url.match( /action=/ ), 'Request has no query string' );
assert.ok( request.requestBody instanceof FormData, 'Request uses FormData body' );
} else {
- assert.ok( !request.url.match( /action=test/), 'Request has no query string' );
+ assert.ok( !request.url.match( /action=test/ ), 'Request has no query string' );
assert.equal( request.requestBody, 'action=test&format=json', 'Request uses query string body' );
}
request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
} );
} );
- QUnit.test( 'Deprecated callback methods', function ( assert ) {
- QUnit.expect( 3 );
+ QUnit.test( 'Converting arrays to pipe-separated', function ( assert ) {
+ QUnit.expect( 1 );
var api = new mw.Api();
+ api.get( { test: [ 'foo', 'bar', 'baz' ] } );
- this.suppressWarnings();
-
- api.get( {}, function () {
- assert.ok( true, 'Function argument treated as success callback.' );
- } );
-
- api.get( {}, {
- ok: function () {
- assert.ok( true, '"ok" property treated as success callback.' );
- }
- } );
-
- api.get( { action: 'doesntexist' }, {
- err: function () {
- assert.ok( true, '"err" property treated as error callback.' );
- }
- } );
-
- this.restoreWarnings();
-
- this.server.respondWith( /action=query/, function ( request ) {
+ this.server.respond( function ( request ) {
+ assert.ok( request.url.match( /test=foo%7Cbar%7Cbaz/ ), 'Pipe-separated value was submitted' );
request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
} );
-
- this.server.respondWith( /action=doesntexist/, function ( request ) {
- request.respond( 200, { 'Content-Type': 'application/json' },
- '{ "error": { "code": "unknown_action" } }'
- );
- } );
-
- this.server.respond();
} );
QUnit.test( 'getToken( pre-populated )', function ( assert ) {
@@ -196,6 +170,28 @@
);
} );
+ QUnit.test( 'postWithToken( tokenType, params with assert )', function ( assert ) {
+ QUnit.expect( 2 );
+
+ var api = new mw.Api( { ajax: { url: '/postWithToken/api.php' } } );
+
+ api.postWithToken( 'testasserttoken', { action: 'example', key: 'foo', assert: 'user' } )
+ .fail( function ( errorCode ) {
+ assert.equal( errorCode, 'assertuserfailed', 'getToken fails assert' );
+ } );
+
+ assert.equal( this.server.requests.length, 1, 'Request for token made' );
+ this.server.respondWith( /assert=user/, function ( request ) {
+ request.respond(
+ 200,
+ { 'Content-Type': 'application/json' },
+ '{ "error": { "code": "assertuserfailed", "info": "Assertion failed" } }'
+ );
+ } );
+
+ this.server.respond();
+ } );
+
QUnit.test( 'postWithToken( tokenType, params, ajaxOptions )', function ( assert ) {
QUnit.expect( 3 );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
index 7ab309aa..c0afe07c 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
@@ -46,8 +46,8 @@
// Note: The ones with # are commented out as those are interpreted as fragment and
// as such end up being valid.
'A &eacute; B',
- //'A &#233; B',
- //'A &#x00E9; B',
+ // 'A &#233; B',
+ // 'A &#x00E9; B',
// Subject of NS_TALK does not roundtrip to NS_MAIN
'Talk:File:Example.svg',
// Directory navigation
@@ -437,33 +437,34 @@
} );
QUnit.test( 'getRelativeText', 5, function ( assert ) {
- var cases = [
- {
- text: 'asd',
- relativeTo: 123,
- expectedResult: ':Asd'
- },
- {
- text: 'dfg',
- relativeTo: 0,
- expectedResult: 'Dfg'
- },
- {
- text: 'Template:Ghj',
- relativeTo: 0,
- expectedResult: 'Template:Ghj'
- },
- {
- text: 'Template:1',
- relativeTo: 10,
- expectedResult: '1'
- },
- {
- text: 'User:Hi',
- relativeTo: 10,
- expectedResult: 'User:Hi'
- }
- ], i, thisCase, title;
+ var i, thisCase, title,
+ cases = [
+ {
+ text: 'asd',
+ relativeTo: 123,
+ expectedResult: ':Asd'
+ },
+ {
+ text: 'dfg',
+ relativeTo: 0,
+ expectedResult: 'Dfg'
+ },
+ {
+ text: 'Template:Ghj',
+ relativeTo: 0,
+ expectedResult: 'Template:Ghj'
+ },
+ {
+ text: 'Template:1',
+ relativeTo: 10,
+ expectedResult: '1'
+ },
+ {
+ text: 'User:Hi',
+ relativeTo: 10,
+ expectedResult: 'User:Hi'
+ }
+ ];
for ( i = 0; i < cases.length; i++ ) {
thisCase = cases[i];
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
index 7a58d38d..ba366553 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
@@ -314,6 +314,66 @@
assert.equal( uri.toString(), 'http://www.example.com/dir/', 'empty array value is ommitted' );
} );
+ QUnit.test( 'Variable defaultUri', 2, function ( assert ) {
+ var uri,
+ href = 'http://example.org/w/index.php#here',
+ UriClass = mw.UriRelative( function () {
+ return href;
+ } );
+
+ uri = new UriClass();
+ assert.deepEqual(
+ {
+ protocol: uri.protocol,
+ user: uri.user,
+ password: uri.password,
+ host: uri.host,
+ port: uri.port,
+ path: uri.path,
+ query: uri.query,
+ fragment: uri.fragment
+ },
+ {
+ protocol: 'http',
+ user: undefined,
+ password: undefined,
+ host: 'example.org',
+ port: undefined,
+ path: '/w/index.php',
+ query: {},
+ fragment: 'here'
+ },
+ 'basic object properties'
+ );
+
+ // Default URI may change, e.g. via history.replaceState, pushState or location.hash (T74334)
+ href = 'https://example.com/wiki/Foo?v=2';
+ uri = new UriClass();
+ assert.deepEqual(
+ {
+ protocol: uri.protocol,
+ user: uri.user,
+ password: uri.password,
+ host: uri.host,
+ port: uri.port,
+ path: uri.path,
+ query: uri.query,
+ fragment: uri.fragment
+ },
+ {
+ protocol: 'https',
+ user: undefined,
+ password: undefined,
+ host: 'example.com',
+ port: undefined,
+ path: '/wiki/Foo',
+ query: { 'v': '2' },
+ fragment: undefined
+ },
+ 'basic object properties'
+ );
+ } );
+
QUnit.test( 'Advanced URL', 11, function ( assert ) {
var uri, queryString, relativePath;
@@ -429,6 +489,5 @@
uri = new UriClass( testPath );
href = uri.toString();
assert.equal( href, testProtocol + testServer + ':' + testPort + testPath, 'Root-relative URL gets host, protocol, and port supplied' );
-
} );
}( mediaWiki, jQuery ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js
index c9653dab..f5f199ea 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js
@@ -53,7 +53,7 @@
assert.strictEqual( call[ 1 ], '0', '0 is value' );
} );
- QUnit.test( 'set( key, value, expires )', 5, function ( assert ) {
+ QUnit.test( 'set( key, value, expires )', 6, function ( assert ) {
var date, options;
date = new Date();
@@ -61,15 +61,22 @@
mw.cookie.set( 'foo', 'bar' );
options = $.cookie.lastCall.args[ 2 ];
- assert.deepEqual( options.expires, expiryDate, 'Default cookie expiration is used' );
+ assert.deepEqual( options.expires, expiryDate, 'default expiration' );
mw.cookie.set( 'foo', 'bar', date );
options = $.cookie.lastCall.args[ 2 ];
- assert.strictEqual( options.expires, date, 'Custom expiration date' );
+ assert.strictEqual( options.expires, date, 'custom expiration as Date' );
+
+ date = new Date();
+ date.setDate( date.getDate() + 1 );
+
+ mw.cookie.set( 'foo', 'bar', 86400 );
+ options = $.cookie.lastCall.args[ 2 ];
+ assert.deepEqual( options.expires, date, 'custom expiration as lifetime in seconds' );
mw.cookie.set( 'foo', 'bar', null );
options = $.cookie.lastCall.args[ 2 ];
- assert.strictEqual( options.expires, undefined, 'Expiry null forces session cookie' );
+ assert.strictEqual( options.expires, undefined, 'null forces session cookie' );
// Per DefaultSettings.php, when wgCookieExpiration is 0, the default should
// be session cookies
@@ -81,7 +88,7 @@
mw.cookie.set( 'foo', 'bar', date );
options = $.cookie.lastCall.args[ 2 ];
- assert.strictEqual( options.expires, date, 'Custom expiration when default is session cookies' );
+ assert.strictEqual( options.expires, date, 'custom expiration (with wgCookieExpiration=0)' );
} );
QUnit.test( 'set( key, value, options )', 4, function ( assert ) {
@@ -169,4 +176,4 @@
assert.strictEqual( key, 'barfoo' );
} );
-} ( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js
new file mode 100644
index 00000000..7c3f1ecb
--- /dev/null
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js
@@ -0,0 +1,42 @@
+( function ( $, mw ) {
+ QUnit.module( 'mediawiki.errorLogger', QUnit.newMwEnvironment() );
+
+ QUnit.test( 'installGlobalHandler', 7, function ( assert ) {
+ var w = {},
+ errorMessage = 'Foo',
+ errorUrl = 'http://example.com',
+ errorLine = '123',
+ errorColumn = '45',
+ errorObject = new Error( 'Foo'),
+ oldHandler = this.sandbox.stub();
+
+ this.sandbox.stub( mw, 'track' );
+
+ mw.errorLogger.installGlobalHandler( w );
+
+ assert.ok( w.onerror, 'Global handler has been installed' );
+ assert.strictEqual( w.onerror( errorMessage, errorUrl, errorLine ), false,
+ 'Global handler returns false when there is no previous handler' );
+ sinon.assert.calledWithExactly( mw.track, 'global.error',
+ sinon.match( { errorMessage: errorMessage, url: errorUrl, lineNumber: errorLine } ) );
+
+ mw.track.reset();
+ w.onerror( errorMessage, errorUrl, errorLine, errorColumn, errorObject );
+ sinon.assert.calledWithExactly( mw.track, 'global.error',
+ sinon.match( { errorMessage: errorMessage, url: errorUrl, lineNumber: errorLine,
+ columnNumber: errorColumn, errorObject: errorObject } ) );
+
+ w = { onerror: oldHandler };
+
+ mw.errorLogger.installGlobalHandler( w );
+ w.onerror( errorMessage, errorUrl, errorLine );
+ sinon.assert.calledWithExactly( oldHandler, errorMessage, errorUrl, errorLine );
+
+ oldHandler.returns( false );
+ assert.strictEqual( w.onerror( errorMessage, errorUrl, errorLine ), false,
+ 'Global handler preserves false return from previous handler' );
+ oldHandler.returns( true );
+ assert.strictEqual( w.onerror( errorMessage, errorUrl, errorLine ), true,
+ 'Global handler preserves true return from previous handler' );
+ } );
+}( jQuery, mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
index 6b3be43b..7e23e2ff 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
@@ -55,7 +55,9 @@
'jquerymsg-test-version-entrypoints-index-php': '[https://www.mediawiki.org/wiki/Manual:index.php index.php]',
- 'external-link-replace': 'Foo [$1 bar]'
+ 'external-link-replace': 'Foo [$1 bar]',
+ 'external-link-plural': 'Foo {{PLURAL:$1|is [$2 one]|are [$2 some]|2=[$2 two]|3=three|4=a=b|5=}} things.',
+ 'plural-only-explicit-forms': 'It is a {{PLURAL:$1|1=single|2=double}} room.'
}
} ) );
@@ -107,7 +109,7 @@
run();
}
- QUnit.test( 'Replace', 9, function ( assert ) {
+ QUnit.test( 'Replace', 16, function ( assert ) {
mw.messages.set( 'simple', 'Foo $1 baz $2' );
assert.equal( formatParse( 'simple' ), 'Foo $1 baz $2', 'Replacements with no substitutes' );
@@ -155,6 +157,41 @@
'Foo <a href="http://example.org/?x=y&amp;z">bar</a>',
'Href is not double-escaped in wikilink function'
);
+ assert.equal(
+ formatParse( 'external-link-plural', 1, 'http://example.org' ),
+ 'Foo is <a href="http://example.org">one</a> things.',
+ 'Link is expanded inside plural and is not escaped html'
+ );
+ assert.equal(
+ formatParse( 'external-link-plural', 2, 'http://example.org' ),
+ 'Foo <a href=\"http://example.org\">two</a> things.',
+ 'Link is expanded inside an explicit plural form and is not escaped html'
+ );
+ assert.equal(
+ formatParse( 'external-link-plural', 3 ),
+ 'Foo three things.',
+ 'A simple explicit plural form co-existing with complex explicit plural forms'
+ );
+ assert.equal(
+ formatParse( 'external-link-plural', 4, 'http://example.org' ),
+ 'Foo a=b things.',
+ 'Only first equal sign is used as delimiter for explicit plural form. Repeated equal signs does not create issue'
+ );
+ assert.equal(
+ formatParse( 'external-link-plural', 5, 'http://example.org' ),
+ 'Foo are <a href="http://example.org">some</a> things.',
+ 'Invalid explicit plural form. Plural fallback to the "other" plural form'
+ );
+ assert.equal(
+ formatParse( 'external-link-plural', 6, 'http://example.org' ),
+ 'Foo are <a href="http://example.org">some</a> things.',
+ 'Plural fallback to the "other" plural form'
+ );
+ assert.equal(
+ formatParse( 'plural-only-explicit-forms', 2 ),
+ 'It is a double room.',
+ 'Plural with explicit forms alone.'
+ );
} );
QUnit.test( 'Plural', 6, function ( assert ) {
@@ -505,274 +542,274 @@
mw.jqueryMsg.getMessageFunction = oldGMF;
} );
-formatnumTests = [
- {
- lang: 'en',
- number: 987654321.654321,
- result: '987,654,321.654',
- description: 'formatnum test for English, decimal seperator'
- },
- {
- lang: 'ar',
- number: 987654321.654321,
- result: '٩٨٧٬٦٥٤٬٣٢١٫٦٥٤',
- description: 'formatnum test for Arabic, with decimal seperator'
- },
- {
- lang: 'ar',
- number: '٩٨٧٦٥٤٣٢١٫٦٥٤٣٢١',
- result: 987654321,
- integer: true,
- description: 'formatnum test for Arabic, with decimal seperator, reverse'
- },
- {
- lang: 'ar',
- number: -12.89,
- result: '-١٢٫٨٩',
- description: 'formatnum test for Arabic, negative number'
- },
- {
- lang: 'ar',
- number: '-١٢٫٨٩',
- result: -12,
- integer: true,
- description: 'formatnum test for Arabic, negative number, reverse'
- },
- {
- lang: 'nl',
- number: 987654321.654321,
- result: '987.654.321,654',
- description: 'formatnum test for Nederlands, decimal seperator'
- },
- {
- lang: 'nl',
- number: -12.89,
- result: '-12,89',
- description: 'formatnum test for Nederlands, negative number'
- },
- {
- lang: 'nl',
- number: '.89',
- result: '0,89',
- description: 'formatnum test for Nederlands'
- },
- {
- lang: 'nl',
- number: 'invalidnumber',
- result: 'invalidnumber',
- description: 'formatnum test for Nederlands, invalid number'
- },
- {
- lang: 'ml',
- number: '1000000000',
- result: '1,00,00,00,000',
- description: 'formatnum test for Malayalam'
- },
- {
- lang: 'ml',
- number: '-1000000000',
- result: '-1,00,00,00,000',
- description: 'formatnum test for Malayalam, negative number'
- },
- /*
- * This will fail because of wrong pattern for ml in MW(different from CLDR)
- {
- lang: 'ml',
- number: '1000000000.000',
- result: '1,00,00,00,000.000',
- description: 'formatnum test for Malayalam with decimal place'
- },
- */
- {
- lang: 'hi',
- number: '123456789.123456789',
- result: '१२,३४,५६,७८९',
- description: 'formatnum test for Hindi'
- },
- {
- lang: 'hi',
- number: '१२,३४,५६,७८९',
- result: '१२,३४,५६,७८९',
- description: 'formatnum test for Hindi, Devanagari digits passed'
- },
- {
- lang: 'hi',
- number: '१२३४५६,७८९',
- result: '123456',
- integer: true,
- description: 'formatnum test for Hindi, Devanagari digits passed to get integer value'
- }
-];
-
-QUnit.test( 'formatnum', formatnumTests.length, function ( assert ) {
- mw.messages.set( 'formatnum-msg', '{{formatnum:$1}}' );
- mw.messages.set( 'formatnum-msg-int', '{{formatnum:$1|R}}' );
- var queue = $.map( formatnumTests, function ( test ) {
- return function ( next ) {
- getMwLanguage( test.lang )
- .done( function ( langClass ) {
- mw.config.set( 'wgUserLanguage', test.lang );
- var parser = new mw.jqueryMsg.parser( { language: langClass } );
- assert.equal(
- parser.parse( test.integer ? 'formatnum-msg-int' : 'formatnum-msg',
- [ test.number ] ).html(),
- test.result,
- test.description
- );
- } )
- .fail( function () {
- assert.ok( false, 'Language "' + test.lang + '" failed to load' );
- } )
- .always( next );
- };
+ formatnumTests = [
+ {
+ lang: 'en',
+ number: 987654321.654321,
+ result: '987,654,321.654',
+ description: 'formatnum test for English, decimal separator'
+ },
+ {
+ lang: 'ar',
+ number: 987654321.654321,
+ result: '٩٨٧٬٦٥٤٬٣٢١٫٦٥٤',
+ description: 'formatnum test for Arabic, with decimal separator'
+ },
+ {
+ lang: 'ar',
+ number: '٩٨٧٦٥٤٣٢١٫٦٥٤٣٢١',
+ result: 987654321,
+ integer: true,
+ description: 'formatnum test for Arabic, with decimal separator, reverse'
+ },
+ {
+ lang: 'ar',
+ number: -12.89,
+ result: '-١٢٫٨٩',
+ description: 'formatnum test for Arabic, negative number'
+ },
+ {
+ lang: 'ar',
+ number: '-١٢٫٨٩',
+ result: -12,
+ integer: true,
+ description: 'formatnum test for Arabic, negative number, reverse'
+ },
+ {
+ lang: 'nl',
+ number: 987654321.654321,
+ result: '987.654.321,654',
+ description: 'formatnum test for Nederlands, decimal separator'
+ },
+ {
+ lang: 'nl',
+ number: -12.89,
+ result: '-12,89',
+ description: 'formatnum test for Nederlands, negative number'
+ },
+ {
+ lang: 'nl',
+ number: '.89',
+ result: '0,89',
+ description: 'formatnum test for Nederlands'
+ },
+ {
+ lang: 'nl',
+ number: 'invalidnumber',
+ result: 'invalidnumber',
+ description: 'formatnum test for Nederlands, invalid number'
+ },
+ {
+ lang: 'ml',
+ number: '1000000000',
+ result: '1,00,00,00,000',
+ description: 'formatnum test for Malayalam'
+ },
+ {
+ lang: 'ml',
+ number: '-1000000000',
+ result: '-1,00,00,00,000',
+ description: 'formatnum test for Malayalam, negative number'
+ },
+ /*
+ * This will fail because of wrong pattern for ml in MW(different from CLDR)
+ {
+ lang: 'ml',
+ number: '1000000000.000',
+ result: '1,00,00,00,000.000',
+ description: 'formatnum test for Malayalam with decimal place'
+ },
+ */
+ {
+ lang: 'hi',
+ number: '123456789.123456789',
+ result: '१२,३४,५६,७८९',
+ description: 'formatnum test for Hindi'
+ },
+ {
+ lang: 'hi',
+ number: '१२,३४,५६,७८९',
+ result: '१२,३४,५६,७८९',
+ description: 'formatnum test for Hindi, Devanagari digits passed'
+ },
+ {
+ lang: 'hi',
+ number: '१२३४५६,७८९',
+ result: '123456',
+ integer: true,
+ description: 'formatnum test for Hindi, Devanagari digits passed to get integer value'
+ }
+ ];
+
+ QUnit.test( 'formatnum', formatnumTests.length, function ( assert ) {
+ mw.messages.set( 'formatnum-msg', '{{formatnum:$1}}' );
+ mw.messages.set( 'formatnum-msg-int', '{{formatnum:$1|R}}' );
+ var queue = $.map( formatnumTests, function ( test ) {
+ return function ( next ) {
+ getMwLanguage( test.lang )
+ .done( function ( langClass ) {
+ mw.config.set( 'wgUserLanguage', test.lang );
+ var parser = new mw.jqueryMsg.parser( { language: langClass } );
+ assert.equal(
+ parser.parse( test.integer ? 'formatnum-msg-int' : 'formatnum-msg',
+ [ test.number ] ).html(),
+ test.result,
+ test.description
+ );
+ } )
+ .fail( function () {
+ assert.ok( false, 'Language "' + test.lang + '" failed to load' );
+ } )
+ .always( next );
+ };
+ } );
+ QUnit.stop();
+ process( queue, QUnit.start );
+ } );
+
+ // HTML in wikitext
+ QUnit.test( 'HTML', 26, function ( assert ) {
+ mw.messages.set( 'jquerymsg-italics-msg', '<i>Very</i> important' );
+
+ assertBothModes( assert, ['jquerymsg-italics-msg'], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
+
+ mw.messages.set( 'jquerymsg-bold-msg', '<b>Strong</b> speaker' );
+ assertBothModes( assert, ['jquerymsg-bold-msg'], mw.messages.get( 'jquerymsg-bold-msg' ), 'Simple bold unchanged' );
+
+ mw.messages.set( 'jquerymsg-bold-italics-msg', 'It is <b><i>key</i></b>' );
+ assertBothModes( assert, ['jquerymsg-bold-italics-msg'], mw.messages.get( 'jquerymsg-bold-italics-msg' ), 'Bold and italics nesting order preserved' );
+
+ mw.messages.set( 'jquerymsg-italics-bold-msg', 'It is <i><b>vital</b></i>' );
+ assertBothModes( assert, ['jquerymsg-italics-bold-msg'], mw.messages.get( 'jquerymsg-italics-bold-msg' ), 'Italics and bold nesting order preserved' );
+
+ mw.messages.set( 'jquerymsg-italics-with-link', 'An <i>italicized [[link|wiki-link]]</i>' );
+
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-italics-with-link' ),
+ 'An <i>italicized <a title="link" href="' + mw.html.escape( mw.util.getUrl( 'link' ) ) + '">wiki-link</i>',
+ 'Italics with link inside in parse mode'
+ );
+
+ assert.equal(
+ formatText( 'jquerymsg-italics-with-link' ),
+ mw.messages.get( 'jquerymsg-italics-with-link' ),
+ 'Italics with link unchanged in text mode'
+ );
+
+ mw.messages.set( 'jquerymsg-italics-id-class', '<i id="foo" class="bar">Foo</i>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-italics-id-class' ),
+ mw.messages.get( 'jquerymsg-italics-id-class' ),
+ 'ID and class are allowed'
+ );
+
+ mw.messages.set( 'jquerymsg-italics-onclick', '<i onclick="alert(\'foo\')">Foo</i>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-italics-onclick' ),
+ '&lt;i onclick=&quot;alert(\'foo\')&quot;&gt;Foo&lt;/i&gt;',
+ 'element with onclick is escaped because it is not allowed'
+ );
+
+ mw.messages.set( 'jquerymsg-script-msg', '<script >alert( "Who put this tag here?" );</script>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-script-msg' ),
+ '&lt;script &gt;alert( &quot;Who put this tag here?&quot; );&lt;/script&gt;',
+ 'Tag outside whitelist escaped in parse mode'
+ );
+
+ assert.equal(
+ formatText( 'jquerymsg-script-msg' ),
+ mw.messages.get( 'jquerymsg-script-msg' ),
+ 'Tag outside whitelist unchanged in text mode'
+ );
+
+ mw.messages.set( 'jquerymsg-script-link-msg', '<script>[[Foo|bar]]</script>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-script-link-msg' ),
+ '&lt;script&gt;<a title="Foo" href="' + mw.html.escape( mw.util.getUrl( 'Foo' ) ) + '">bar</a>&lt;/script&gt;',
+ 'Script tag text is escaped because that element is not allowed, but link inside is still HTML'
+ );
+
+ mw.messages.set( 'jquerymsg-mismatched-html', '<i class="important">test</b>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-mismatched-html' ),
+ '&lt;i class=&quot;important&quot;&gt;test&lt;/b&gt;',
+ 'Mismatched HTML start and end tag treated as text'
+ );
+
+ // TODO (mattflaschen, 2013-03-18): It's not a security issue, but there's no real
+ // reason the htmlEmitter span needs to be here. It's an artifact of how emitting works.
+ mw.messages.set( 'jquerymsg-script-and-external-link', '<script>alert( "jquerymsg-script-and-external-link test" );</script> [http://example.com <i>Foo</i> bar]' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-script-and-external-link' ),
+ '&lt;script&gt;alert( "jquerymsg-script-and-external-link test" );&lt;/script&gt; <a href="http://example.com"><span class="mediaWiki_htmlEmitter"><i>Foo</i> bar</span></a>',
+ 'HTML tags in external links not interfering with escaping of other tags'
+ );
+
+ mw.messages.set( 'jquerymsg-link-script', '[http://example.com <script>alert( "jquerymsg-link-script test" );</script>]' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-link-script' ),
+ '<a href="http://example.com"><span class="mediaWiki_htmlEmitter">&lt;script&gt;alert( "jquerymsg-link-script test" );&lt;/script&gt;</span></a>',
+ 'Non-whitelisted HTML tag in external link anchor treated as text'
+ );
+
+ // Intentionally not using htmlEqual for the quote tests
+ mw.messages.set( 'jquerymsg-double-quotes-preserved', '<i id="double">Double</i>' );
+ assert.equal(
+ formatParse( 'jquerymsg-double-quotes-preserved' ),
+ mw.messages.get( 'jquerymsg-double-quotes-preserved' ),
+ 'Attributes with double quotes are preserved as such'
+ );
+
+ mw.messages.set( 'jquerymsg-single-quotes-normalized-to-double', '<i id=\'single\'>Single</i>' );
+ assert.equal(
+ formatParse( 'jquerymsg-single-quotes-normalized-to-double' ),
+ '<i id="single">Single</i>',
+ 'Attributes with single quotes are normalized to double'
+ );
+
+ mw.messages.set( 'jquerymsg-escaped-double-quotes-attribute', '<i style="font-family:&quot;Arial&quot;">Styled</i>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-escaped-double-quotes-attribute' ),
+ mw.messages.get( 'jquerymsg-escaped-double-quotes-attribute' ),
+ 'Escaped attributes are parsed correctly'
+ );
+
+ mw.messages.set( 'jquerymsg-escaped-single-quotes-attribute', '<i style=\'font-family:&#039;Arial&#039;\'>Styled</i>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-escaped-single-quotes-attribute' ),
+ mw.messages.get( 'jquerymsg-escaped-single-quotes-attribute' ),
+ 'Escaped attributes are parsed correctly'
+ );
+
+ mw.messages.set( 'jquerymsg-wikitext-contents-parsed', '<i>[http://example.com Example]</i>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-wikitext-contents-parsed' ),
+ '<i><a href="http://example.com">Example</a></i>',
+ 'Contents of valid tag are treated as wikitext, so external link is parsed'
+ );
+
+ mw.messages.set( 'jquerymsg-wikitext-contents-script', '<i><script>Script inside</script></i>' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-wikitext-contents-script' ),
+ '<i><span class="mediaWiki_htmlEmitter">&lt;script&gt;Script inside&lt;/script&gt;</span></i>',
+ 'Contents of valid tag are treated as wikitext, so invalid HTML element is treated as text'
+ );
+
+ mw.messages.set( 'jquerymsg-unclosed-tag', 'Foo<tag>bar' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-unclosed-tag' ),
+ 'Foo&lt;tag&gt;bar',
+ 'Nonsupported unclosed tags are escaped'
+ );
+
+ mw.messages.set( 'jquerymsg-self-closing-tag', 'Foo<tag/>bar' );
+ assert.htmlEqual(
+ formatParse( 'jquerymsg-self-closing-tag' ),
+ 'Foo&lt;tag/&gt;bar',
+ 'Self-closing tags don\'t cause a parse error'
+ );
} );
- QUnit.stop();
- process( queue, QUnit.start );
-} );
-
-// HTML in wikitext
-QUnit.test( 'HTML', 26, function ( assert ) {
- mw.messages.set( 'jquerymsg-italics-msg', '<i>Very</i> important' );
-
- assertBothModes( assert, ['jquerymsg-italics-msg'], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
-
- mw.messages.set( 'jquerymsg-bold-msg', '<b>Strong</b> speaker' );
- assertBothModes( assert, ['jquerymsg-bold-msg'], mw.messages.get( 'jquerymsg-bold-msg' ), 'Simple bold unchanged' );
-
- mw.messages.set( 'jquerymsg-bold-italics-msg', 'It is <b><i>key</i></b>' );
- assertBothModes( assert, ['jquerymsg-bold-italics-msg'], mw.messages.get( 'jquerymsg-bold-italics-msg' ), 'Bold and italics nesting order preserved' );
-
- mw.messages.set( 'jquerymsg-italics-bold-msg', 'It is <i><b>vital</b></i>' );
- assertBothModes( assert, ['jquerymsg-italics-bold-msg'], mw.messages.get( 'jquerymsg-italics-bold-msg' ), 'Italics and bold nesting order preserved' );
-
- mw.messages.set( 'jquerymsg-italics-with-link', 'An <i>italicized [[link|wiki-link]]</i>' );
-
- assert.htmlEqual(
- formatParse( 'jquerymsg-italics-with-link' ),
- 'An <i>italicized <a title="link" href="' + mw.html.escape( mw.util.getUrl( 'link' ) ) + '">wiki-link</i>',
- 'Italics with link inside in parse mode'
- );
-
- assert.equal(
- formatText( 'jquerymsg-italics-with-link' ),
- mw.messages.get( 'jquerymsg-italics-with-link' ),
- 'Italics with link unchanged in text mode'
- );
-
- mw.messages.set( 'jquerymsg-italics-id-class', '<i id="foo" class="bar">Foo</i>' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-italics-id-class' ),
- mw.messages.get( 'jquerymsg-italics-id-class' ),
- 'ID and class are allowed'
- );
-
- mw.messages.set( 'jquerymsg-italics-onclick', '<i onclick="alert(\'foo\')">Foo</i>' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-italics-onclick' ),
- '&lt;i onclick=&quot;alert(\'foo\')&quot;&gt;Foo&lt;/i&gt;',
- 'element with onclick is escaped because it is not allowed'
- );
-
- mw.messages.set( 'jquerymsg-script-msg', '<script >alert( "Who put this tag here?" );</script>' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-script-msg' ),
- '&lt;script &gt;alert( &quot;Who put this tag here?&quot; );&lt;/script&gt;',
- 'Tag outside whitelist escaped in parse mode'
- );
-
- assert.equal(
- formatText( 'jquerymsg-script-msg' ),
- mw.messages.get( 'jquerymsg-script-msg' ),
- 'Tag outside whitelist unchanged in text mode'
- );
-
- mw.messages.set( 'jquerymsg-script-link-msg', '<script>[[Foo|bar]]</script>' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-script-link-msg' ),
- '&lt;script&gt;<a title="Foo" href="' + mw.html.escape( mw.util.getUrl( 'Foo' ) ) + '">bar</a>&lt;/script&gt;',
- 'Script tag text is escaped because that element is not allowed, but link inside is still HTML'
- );
-
- mw.messages.set( 'jquerymsg-mismatched-html', '<i class="important">test</b>' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-mismatched-html' ),
- '&lt;i class=&quot;important&quot;&gt;test&lt;/b&gt;',
- 'Mismatched HTML start and end tag treated as text'
- );
-
- // TODO (mattflaschen, 2013-03-18): It's not a security issue, but there's no real
- // reason the htmlEmitter span needs to be here. It's an artifact of how emitting works.
- mw.messages.set( 'jquerymsg-script-and-external-link', '<script>alert( "jquerymsg-script-and-external-link test" );</script> [http://example.com <i>Foo</i> bar]' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-script-and-external-link' ),
- '&lt;script&gt;alert( "jquerymsg-script-and-external-link test" );&lt;/script&gt; <a href="http://example.com"><span class="mediaWiki_htmlEmitter"><i>Foo</i> bar</span></a>',
- 'HTML tags in external links not interfering with escaping of other tags'
- );
-
- mw.messages.set( 'jquerymsg-link-script', '[http://example.com <script>alert( "jquerymsg-link-script test" );</script>]' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-link-script' ),
- '<a href="http://example.com"><span class="mediaWiki_htmlEmitter">&lt;script&gt;alert( "jquerymsg-link-script test" );&lt;/script&gt;</span></a>',
- 'Non-whitelisted HTML tag in external link anchor treated as text'
- );
-
- // Intentionally not using htmlEqual for the quote tests
- mw.messages.set( 'jquerymsg-double-quotes-preserved', '<i id="double">Double</i>' );
- assert.equal(
- formatParse( 'jquerymsg-double-quotes-preserved' ),
- mw.messages.get( 'jquerymsg-double-quotes-preserved' ),
- 'Attributes with double quotes are preserved as such'
- );
-
- mw.messages.set( 'jquerymsg-single-quotes-normalized-to-double', '<i id=\'single\'>Single</i>' );
- assert.equal(
- formatParse( 'jquerymsg-single-quotes-normalized-to-double' ),
- '<i id="single">Single</i>',
- 'Attributes with single quotes are normalized to double'
- );
-
- mw.messages.set( 'jquerymsg-escaped-double-quotes-attribute', '<i style="font-family:&quot;Arial&quot;">Styled</i>' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-escaped-double-quotes-attribute' ),
- mw.messages.get( 'jquerymsg-escaped-double-quotes-attribute' ),
- 'Escaped attributes are parsed correctly'
- );
-
- mw.messages.set( 'jquerymsg-escaped-single-quotes-attribute', '<i style=\'font-family:&#039;Arial&#039;\'>Styled</i>' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-escaped-single-quotes-attribute' ),
- mw.messages.get( 'jquerymsg-escaped-single-quotes-attribute' ),
- 'Escaped attributes are parsed correctly'
- );
-
- mw.messages.set( 'jquerymsg-wikitext-contents-parsed', '<i>[http://example.com Example]</i>' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-wikitext-contents-parsed' ),
- '<i><a href="http://example.com">Example</a></i>',
- 'Contents of valid tag are treated as wikitext, so external link is parsed'
- );
-
- mw.messages.set( 'jquerymsg-wikitext-contents-script', '<i><script>Script inside</script></i>' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-wikitext-contents-script' ),
- '<i><span class="mediaWiki_htmlEmitter">&lt;script&gt;Script inside&lt;/script&gt;</span></i>',
- 'Contents of valid tag are treated as wikitext, so invalid HTML element is treated as text'
- );
-
- mw.messages.set( 'jquerymsg-unclosed-tag', 'Foo<tag>bar' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-unclosed-tag' ),
- 'Foo&lt;tag&gt;bar',
- 'Nonsupported unclosed tags are escaped'
- );
-
- mw.messages.set( 'jquerymsg-self-closing-tag', 'Foo<tag/>bar' );
- assert.htmlEqual(
- formatParse( 'jquerymsg-self-closing-tag' ),
- 'Foo&lt;tag/&gt;bar',
- 'Self-closing tags don\'t cause a parse error'
- );
-} );
QUnit.test( 'Behavior in case of invalid wikitext', 3, function ( assert ) {
mw.messages.set( 'invalid-wikitext', '<b>{{FAIL}}</b>' );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
index 16f90df8..670914eb 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
@@ -8,19 +8,32 @@
},
teardown: function () {
mw.language.data.values = this.liveLangData;
+ },
+ messages: {
+ // mw.language.listToText test
+ 'and': ' and',
+ 'comma-separator': ', ',
+ 'word-separator': ' '
}
} ) );
- QUnit.test( 'mw.language getData and setData', 2, function ( assert ) {
+ QUnit.test( 'mw.language getData and setData', 3, function ( assert ) {
mw.language.setData( 'en', 'testkey', 'testvalue' );
assert.equal( mw.language.getData( 'en', 'testkey' ), 'testvalue', 'Getter setter test for mw.language' );
assert.equal( mw.language.getData( 'en', 'invalidkey' ), undefined, 'Getter setter test for mw.language with invalid key' );
+ mw.language.setData( 'en-us', 'testkey', 'testvalue' );
+ assert.equal( mw.language.getData( 'en-US', 'testkey' ), 'testvalue', 'Case insensitive test for mw.language' );
} );
QUnit.test( 'mw.language.commafy test', 9, function ( assert ) {
+ mw.language.setData( 'en', 'digitGroupingPattern', null );
+ mw.language.setData( 'en', 'digitTransformTable', null );
+ mw.language.setData( 'en', 'separatorTransformTable', null );
+
+ mw.config.set( 'wgUserLanguage', 'en' );
// Number grouping patterns are as per http://cldr.unicode.org/translation/number-patterns
assert.equal( mw.language.commafy( 1234.567, '###0.#####' ), '1234.567', 'Pattern with no digit grouping separator defined' );
- assert.equal( mw.language.commafy( 123456789.567, '###0.#####' ), '123456789.567', 'Pattern with no digit grouping seperator defined, bigger decimal part' );
+ assert.equal( mw.language.commafy( 123456789.567, '###0.#####' ), '123456789.567', 'Pattern with no digit grouping separator defined, bigger decimal part' );
assert.equal( mw.language.commafy( 0.567, '###0.#####' ), '0.567', 'Decimal part 0' );
assert.equal( mw.language.commafy( '.567', '###0.#####' ), '0.567', 'Decimal part missing. replace with zero' );
assert.equal( mw.language.commafy( 1234, '##,#0.#####' ), '12,34', 'Pattern with no fractional part' );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js
new file mode 100644
index 00000000..61bab03f
--- /dev/null
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js
@@ -0,0 +1,28 @@
+( function ( mw ) {
+ var TEST_MODEL = 'test-content-model';
+
+ QUnit.module( 'mediawiki.messagePoster', QUnit.newMwEnvironment( {
+ teardown: function () {
+ mw.messagePoster.factory.unregister( TEST_MODEL );
+ }
+ } ) );
+
+ QUnit.test( 'register', 2, function ( assert ) {
+ var testMessagePosterConstructor = function () {};
+
+ mw.messagePoster.factory.register( TEST_MODEL, testMessagePosterConstructor );
+ assert.strictEqual(
+ mw.messagePoster.factory.contentModelToClass[TEST_MODEL],
+ testMessagePosterConstructor,
+ 'Constructor is registered'
+ );
+
+ assert.throws(
+ function () {
+ mw.messagePoster.factory.register( TEST_MODEL, testMessagePosterConstructor );
+ },
+ new RegExp( 'The content model \'' + TEST_MODEL + '\' is already registered.' ),
+ 'Throws exception is same model is registered a second time'
+ );
+ } );
+}( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js
new file mode 100644
index 00000000..86fd828a
--- /dev/null
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js
@@ -0,0 +1,63 @@
+( function ( mw ) {
+
+ QUnit.module( 'mediawiki.template', {
+ setup: function () {
+ var abcCompiler = {
+ compile: function () {
+ return 'abc default compiler';
+ }
+ };
+
+ // Register some template compiler languages
+ mw.template.registerCompiler( 'abc', abcCompiler );
+ mw.template.registerCompiler( 'xyz', {
+ compile: function () {
+ return 'xyz compiler';
+ }
+ } );
+
+ // Stub register some templates
+ this.sandbox.stub( mw.templates, 'get' ).returns( {
+ 'test_templates_foo.xyz': 'goodbye',
+ 'test_templates_foo.abc': 'thankyou'
+ } );
+ }
+ } );
+
+ QUnit.test( 'add', 1, function ( assert ) {
+ assert.throws(
+ function () {
+ mw.template.add( 'module', 'test_templates_foo', 'hello' );
+ },
+ 'When no prefix throw exception'
+ );
+ } );
+
+ QUnit.test( 'compile', 1, function ( assert ) {
+ assert.throws(
+ function () {
+ mw.template.compile( '{{foo}}', 'rainbow' );
+ },
+ 'Unknown compiler names throw exceptions'
+ );
+ } );
+
+ QUnit.test( 'get', 4, function ( assert ) {
+ assert.strictEqual( mw.template.get( 'test.mediawiki.template', 'test_templates_foo.xyz' ), 'xyz compiler' );
+ assert.strictEqual( mw.template.get( 'test.mediawiki.template', 'test_templates_foo.abc' ), 'abc default compiler' );
+ assert.throws(
+ function () {
+ mw.template.get( 'this.should.not.exist', 'hello' );
+ },
+ 'When bad module name given throw error.'
+ );
+
+ assert.throws(
+ function () {
+ mw.template.get( 'mediawiki.template', 'hello' );
+ },
+ 'The template hello should not exist in the mediawiki.templates module and should throw an exception.'
+ );
+ } );
+
+}( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js
index 7e0ee917..cf36ea82 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js
@@ -1,6 +1,8 @@
/*jshint -W024 */
( function ( mw, $ ) {
- var specialCharactersPageName;
+ var specialCharactersPageName,
+ // Can't mock SITENAME since jqueryMsg caches it at load
+ siteName = mw.config.get( 'wgSiteName' );
// Since QUnitTestResources.php loads both mediawiki and mediawiki.jqueryMsg as
// dependencies, this only tests the monkey-patched behavior with the two of them combined.
@@ -55,7 +57,7 @@
this.restoreWarnings();
} );
- QUnit.test( 'mw.Map', 28, function ( assert ) {
+ QUnit.test( 'mw.Map', 35, function ( assert ) {
var arry, conf, funky, globalConf, nummy, someValues;
conf = new mw.Map();
@@ -86,8 +88,10 @@
assert.strictEqual( conf.set( 'constructor', 42 ), true, 'Map.set for key "constructor"' );
assert.strictEqual( conf.get( 'constructor' ), 42, 'Map.get for key "constructor"' );
- assert.strictEqual( conf.set( 'ImUndefined', undefined ), true, 'Map.set allows setting value to `undefined`' );
- assert.equal( conf.get( 'ImUndefined', 'fallback' ), undefined, 'Map.get supports retreiving value of `undefined`' );
+ assert.strictEqual( conf.set( 'undef' ), false, 'Map.set requires explicit value (no undefined default)' );
+
+ assert.strictEqual( conf.set( 'undef', undefined ), true, 'Map.set allows setting value to `undefined`' );
+ assert.equal( conf.get( 'undef', 'fallback' ), undefined, 'Map.get supports retreiving value of `undefined`' );
assert.strictEqual( conf.set( funky, 'Funky' ), false, 'Map.set returns boolean false if key was invalid (Function)' );
assert.strictEqual( conf.set( arry, 'Arry' ), false, 'Map.set returns boolean false if key was invalid (Array)' );
@@ -99,7 +103,7 @@
conf.set( String( nummy ), 'I used to be a number' );
assert.strictEqual( conf.exists( 'doesNotExist' ), false, 'Map.exists where property does not exist' );
- assert.strictEqual( conf.exists( 'ImUndefined' ), true, 'Map.exists where value is `undefined`' );
+ assert.strictEqual( conf.exists( 'undef' ), true, 'Map.exists where value is `undefined`' );
assert.strictEqual( conf.exists( nummy ), false, 'Map.exists where key is invalid but looks like an existing key' );
// Multiple values at once
@@ -126,12 +130,31 @@
conf.set( 'globalMapChecker', 'Hi' );
- assert.ok( 'globalMapChecker' in window === false, 'new mw.Map did not store its values in the global window object by default' );
+ assert.ok( ( 'globalMapChecker' in window ) === false, 'Map does not its store values in the window object by default' );
globalConf = new mw.Map( true );
globalConf.set( 'anotherGlobalMapChecker', 'Hello' );
- assert.ok( 'anotherGlobalMapChecker' in window, 'new mw.Map( true ) did store its values in the global window object' );
+ assert.ok( 'anotherGlobalMapChecker' in window, 'global Map stores its values in the window object' );
+
+ assert.equal( globalConf.get( 'anotherGlobalMapChecker' ), 'Hello', 'get value from global Map via get()' );
+ this.suppressWarnings();
+ assert.equal( window.anotherGlobalMapChecker, 'Hello', 'get value from global Map via window object' );
+ this.restoreWarnings();
+
+ // Change value via global Map
+ globalConf.set('anotherGlobalMapChecker', 'Again');
+ assert.equal( globalConf.get( 'anotherGlobalMapChecker' ), 'Again', 'Change in global Map reflected via get()' );
+ this.suppressWarnings();
+ assert.equal( window.anotherGlobalMapChecker, 'Again', 'Change in global Map reflected window object' );
+ this.restoreWarnings();
+
+ // Change value via window object
+ this.suppressWarnings();
+ window.anotherGlobalMapChecker = 'World';
+ assert.equal( window.anotherGlobalMapChecker, 'World', 'Change in window object works' );
+ this.restoreWarnings();
+ assert.equal( globalConf.get( 'anotherGlobalMapChecker' ), 'Again', 'Change in window object not reflected in global Map' );
// Whitelist this global variable for QUnit's 'noglobal' mode
if ( QUnit.config.noglobals ) {
@@ -148,7 +171,9 @@
// Convenience method for asserting the same result for multiple formats
function assertMultipleFormats( messageArguments, formats, expectedResult, assertMessage ) {
- var len = formats.length, format, i;
+ var format, i,
+ len = formats.length;
+
for ( i = 0; i < len; i++ ) {
format = formats[i];
assert.equal( mw.message.apply( null, messageArguments )[format](), expectedResult, assertMessage + ' when format is ' + format );
@@ -178,9 +203,9 @@
assert.equal( hello.format, 'escaped', 'Message.escaped correctly updated the "format" property' );
assert.ok( mw.messages.set( 'multiple-curly-brace', '"{{SITENAME}}" is the home of {{int:other-message}}' ), 'mw.messages.set: Register' );
- assertMultipleFormats( ['multiple-curly-brace'], ['text', 'parse'], '"' + mw.config.get( 'wgSiteName') + '" is the home of Other Message', 'Curly brace format works correctly' );
+ assertMultipleFormats( ['multiple-curly-brace'], ['text', 'parse'], '"' + siteName + '" is the home of Other Message', 'Curly brace format works correctly' );
assert.equal( mw.message( 'multiple-curly-brace' ).plain(), mw.messages.get( 'multiple-curly-brace' ), 'Plain format works correctly for curly brace message' );
- assert.equal( mw.message( 'multiple-curly-brace' ).escaped(), mw.html.escape( '"' + mw.config.get( 'wgSiteName') + '" is the home of Other Message' ), 'Escaped format works correctly for curly brace message' );
+ assert.equal( mw.message( 'multiple-curly-brace' ).escaped(), mw.html.escape( '"' + siteName + '" is the home of Other Message' ), 'Escaped format works correctly for curly brace message' );
assert.ok( mw.messages.set( 'multiple-square-brackets-and-ampersand', 'Visit the [[Project:Community portal|community portal]] & [[Project:Help desk|help desk]]' ), 'mw.messages.set: Register' );
assertMultipleFormats( ['multiple-square-brackets-and-ampersand'], ['plain', 'text'], mw.messages.get( 'multiple-square-brackets-and-ampersand' ), 'Square bracket message is not processed' );
@@ -243,8 +268,8 @@
assert.equal( mw.message( 'gender-plural-msg', 'male', 1 ).plain(), '{{GENDER:male|he|she|they}} {{PLURAL:1|is|are}} awesome', 'Parameters are substituted, but gender and plural are not resolved in plain mode' );
assert.equal( mw.message( 'grammar-msg' ).plain(), mw.messages.get( 'grammar-msg' ), 'Grammar is not resolved in plain mode' );
- assertMultipleFormats( ['grammar-msg'], ['text', 'parse'], 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'Grammar is resolved' );
- assert.equal( mw.message( 'grammar-msg' ).escaped(), 'Przeszukaj ' + mw.html.escape( mw.config.get( 'wgSiteName' ) ), 'Grammar is resolved in escaped mode' );
+ assertMultipleFormats( ['grammar-msg'], ['text', 'parse'], 'Przeszukaj ' + siteName, 'Grammar is resolved' );
+ assert.equal( mw.message( 'grammar-msg' ).escaped(), 'Przeszukaj ' + siteName, 'Grammar is resolved in escaped mode' );
assertMultipleFormats( ['formatnum-msg', '987654321.654321'], ['text', 'parse', 'escaped'], '987,654,321.654', 'formatnum is resolved' );
assert.equal( mw.message( 'formatnum-msg' ).plain(), mw.messages.get( 'formatnum-msg' ), 'formatnum is not resolved in plain mode' );
@@ -304,7 +329,7 @@
assert.equal( mw.msg( 'gender-plural-msg', 'female', '1' ), 'she is awesome', 'Gender test for female, plural count 1' );
assert.equal( mw.msg( 'gender-plural-msg', 'unknown', 10 ), 'they are awesome', 'Gender test for neutral, plural count 10' );
- assert.equal( mw.msg( 'grammar-msg' ), 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'Grammar is resolved' );
+ assert.equal( mw.msg( 'grammar-msg' ), 'Przeszukaj ' + siteName, 'Grammar is resolved' );
assert.equal( mw.msg( 'formatnum-msg', '987654321.654321' ), '987,654,321.654', 'formatnum is resolved' );
@@ -352,7 +377,7 @@
return;
}
// Otherwise, keep polling
- setTimeout( styleTestLoop, 150 );
+ setTimeout( styleTestLoop );
}
// Start the loop
@@ -396,6 +421,30 @@
} );
} );
+ QUnit.asyncTest( 'mw.loader with Object method as module name', 2, function ( assert ) {
+ var isAwesomeDone;
+
+ mw.loader.testCallback = function () {
+ QUnit.start();
+ assert.strictEqual( isAwesomeDone, undefined, 'Implementing module hasOwnProperty: isAwesomeDone should still be undefined' );
+ isAwesomeDone = true;
+ };
+
+ mw.loader.implement( 'hasOwnProperty', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )], {}, {} );
+
+ mw.loader.using( 'hasOwnProperty', function () {
+
+ // /sample/awesome.js declares the "mw.loader.testCallback" function
+ // which contains a call to start() and ok()
+ assert.strictEqual( isAwesomeDone, true, 'hasOwnProperty module should\'ve caused isAwesomeDone to be true' );
+ delete mw.loader.testCallback;
+
+ }, function () {
+ QUnit.start();
+ assert.ok( false, 'Error callback fired while loader.using "hasOwnProperty" module' );
+ } );
+ } );
+
QUnit.asyncTest( 'mw.loader.using( .. ).promise', 2, function ( assert ) {
var isAwesomeDone;
@@ -625,6 +674,11 @@
} );
+ QUnit.test( 'mw.loader.implement( only scripts )', 1, function ( assert ) {
+ mw.loader.implement( 'test.onlyscripts', function () {} );
+ assert.strictEqual( mw.loader.getState( 'test.onlyscripts' ), 'ready' );
+ } );
+
QUnit.asyncTest( 'mw.loader.implement( only messages )', 2, function ( assert ) {
assert.assertFalse( mw.messages.exists( 'bug_29107' ), 'Verify that the test message doesn\'t exist yet' );
@@ -638,7 +692,10 @@
} );
} );
- QUnit.test( 'mw.loader erroneous indirect dependency', 3, function ( assert ) {
+ QUnit.test( 'mw.loader erroneous indirect dependency', 4, function ( assert ) {
+ // don't emit an error event
+ this.sandbox.stub( mw, 'track' );
+
mw.loader.register( [
['test.module1', '0'],
['test.module2', '0', ['test.module1']],
@@ -650,6 +707,8 @@
assert.strictEqual( mw.loader.getState( 'test.module1' ), 'error', 'Expected "error" state for test.module1' );
assert.strictEqual( mw.loader.getState( 'test.module2' ), 'error', 'Expected "error" state for test.module2' );
assert.strictEqual( mw.loader.getState( 'test.module3' ), 'error', 'Expected "error" state for test.module3' );
+
+ assert.strictEqual( mw.track.callCount, 1 );
} );
QUnit.test( 'mw.loader out-of-order implementation', 9, function ( assert ) {
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js
new file mode 100644
index 00000000..cdb26244
--- /dev/null
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js
@@ -0,0 +1,42 @@
+( function ( mw ) {
+ QUnit.module( 'mediawiki.track' );
+
+ QUnit.test( 'track', 1, function ( assert ) {
+ var sequence = [];
+ mw.trackSubscribe( 'simple', function ( topic, data ) {
+ sequence.push( [ topic, data ] );
+ } );
+ mw.track( 'simple', { key: 1 } );
+ mw.track( 'simple', { key: 2 } );
+
+ assert.deepEqual( sequence, [
+ [ 'simple', { key: 1 } ],
+ [ 'simple', { key: 2 } ]
+ ], 'Events after subscribing' );
+ } );
+
+ QUnit.test( 'trackSubscribe', 4, function ( assert ) {
+ var now,
+ sequence = [];
+ mw.track( 'before', { key: 1 } );
+ mw.track( 'before', { key: 2 } );
+ mw.trackSubscribe( 'before', function ( topic, data ) {
+ sequence.push( [ topic, data ] );
+ } );
+ mw.track( 'before', { key: 3 } );
+
+ assert.deepEqual( sequence, [
+ [ 'before', { key: 1 } ],
+ [ 'before', { key: 2 } ],
+ [ 'before', { key: 3 } ]
+ ], 'Replay events from before subscribing' );
+
+ now = mw.now();
+ mw.track( 'context', { key: 0 } );
+ mw.trackSubscribe( 'context', function ( topic, data ) {
+ assert.strictEqual( this.topic, topic, 'thisValue has topic' );
+ assert.strictEqual( this.data, data, 'thisValue has data' );
+ assert.assertTrue( this.timeStamp >= now, 'thisValue has sane timestamp' );
+ } );
+ } );
+}( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
index 91321a2f..04e002dd 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js
@@ -1,7 +1,17 @@
-( function ( mw ) {
+( function ( mw, $ ) {
QUnit.module( 'mediawiki.user', QUnit.newMwEnvironment( {
setup: function () {
this.server = this.sandbox.useFakeServer();
+ this.crypto = window.crypto;
+ this.msCrypto = window.msCrypto;
+ },
+ teardown: function () {
+ if ( this.crypto ) {
+ window.crypto = this.crypto;
+ }
+ if ( this.msCrypto ) {
+ window.msCrypto = this.msCrypto;
+ }
}
} ) );
@@ -51,4 +61,38 @@
this.server.respond();
} );
-}( mediaWiki ) );
+
+ QUnit.test( 'generateRandomSessionId', 4, function ( assert ) {
+ var result, result2;
+
+ result = mw.user.generateRandomSessionId();
+ assert.equal( typeof result, 'string', 'type' );
+ assert.equal( $.trim( result ), result, 'no whitespace at beginning or end' );
+ assert.equal( result.length, 16, 'size' );
+
+ result2 = mw.user.generateRandomSessionId();
+ assert.notEqual( result, result2, 'different when called multiple times' );
+
+ } );
+
+ QUnit.test( 'generateRandomSessionId (fallback)', 4, function ( assert ) {
+ var result, result2;
+
+ // Pretend crypto API is not there to test the Math.random fallback
+ if ( window.crypto ) {
+ window.crypto = undefined;
+ }
+ if ( window.msCrypto ) {
+ window.msCrypto = undefined;
+ }
+
+ result = mw.user.generateRandomSessionId();
+ assert.equal( typeof result, 'string', 'type' );
+ assert.equal( $.trim( result ), result, 'no whitespace at beginning or end' );
+ assert.equal( result.length, 16, 'size' );
+
+ result2 = mw.user.generateRandomSessionId();
+ assert.notEqual( result, result2, 'different when called multiple times' );
+
+ } );
+}( mediaWiki, jQuery ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
index 4401eadb..0b42af4b 100644
--- a/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
+++ b/tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
@@ -1,4 +1,79 @@
( function ( mw, $ ) {
+ var
+ // Based on IPTest.php > testisIPv4
+ IPV4_CASES = [
+ [false, false, 'Boolean false is not an IP'],
+ [false, true, 'Boolean true is not an IP'],
+ [false, '', 'Empty string is not an IP'],
+ [false, 'abc', '"abc" is not an IP'],
+ [false, ':', 'Colon is not an IP'],
+ [false, '124.24.52', 'IPv4 not enough quads'],
+ [false, '24.324.52.13', 'IPv4 out of range'],
+ [false, '.24.52.13', 'IPv4 starts with period'],
+
+ [true, '124.24.52.13', '124.24.52.134 is a valid IP'],
+ [true, '1.24.52.13', '1.24.52.13 is a valid IP'],
+ [false, '74.24.52.13/20', 'IPv4 ranges are not recognized as valid IPs']
+ ],
+
+ // Based on IPTest.php > testisIPv6
+ IPV6_CASES = [
+ [false, ':fc:100::', 'IPv6 starting with lone ":"'],
+ [false, 'fc:100:::', 'IPv6 ending with a ":::"'],
+ [false, 'fc:300', 'IPv6 with only 2 words'],
+ [false, 'fc:100:300', 'IPv6 with only 3 words'],
+
+ [false, 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"'],
+ [false, 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"'],
+
+ [false, ':::'],
+ [false, '::0:', 'IPv6 ending in a lone ":"'],
+
+ [true, '::', 'IPv6 zero address'],
+
+ [false, '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
+ [false, '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words'],
+
+ [false, ':fc::100', 'IPv6 starting with lone ":"'],
+ [false, 'fc::100:', 'IPv6 ending with lone ":"'],
+ [false, 'fc:::100', 'IPv6 with ":::" in the middle'],
+
+ [true, 'fc::100', 'IPv6 with "::" and 2 words'],
+ [true, 'fc::100:a', 'IPv6 with "::" and 3 words'],
+ [true, 'fc::100:a:d', 'IPv6 with "::" and 4 words'],
+ [true, 'fc::100:a:d:1', 'IPv6 with "::" and 5 words'],
+ [true, 'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words'],
+ [true, 'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words'],
+ [true, '2001::df', 'IPv6 with "::" and 2 words'],
+ [true, '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words'],
+ [true, '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words'],
+
+ [false, 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
+ [false, 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words']
+ ];
+
+ Array.prototype.push.apply( IPV6_CASES,
+ $.map( [
+ 'fc:100::',
+ 'fc:100:a::',
+ 'fc:100:a:d::',
+ 'fc:100:a:d:1::',
+ 'fc:100:a:d:1:e::',
+ 'fc:100:a:d:1:e:ac::',
+ '::0',
+ '::fc',
+ '::fc:100',
+ '::fc:100:a',
+ '::fc:100:a:d',
+ '::fc:100:a:d:1',
+ '::fc:100:a:d:1:e',
+ '::fc:100:a:d:1:e:ac',
+ 'fc:100:a:d:1:e:ac:0'
+ ], function ( el ) {
+ return [[ true, el, el + ' is a valid IP' ]];
+ } )
+ );
+
QUnit.module( 'mediawiki.util', QUnit.newMwEnvironment( {
setup: function () {
$.fn.updateTooltipAccessKeys.setTestMode( true );
@@ -35,24 +110,25 @@
} );
} );
- QUnit.test( 'getUrl', 4, function ( assert ) {
+ QUnit.test( 'getUrl', 5, function ( assert ) {
// Not part of startUp module
mw.config.set( 'wgArticlePath', '/wiki/$1' );
mw.config.set( 'wgPageName', 'Foobar' );
var href = mw.util.getUrl( 'Sandbox' );
- assert.equal( href, '/wiki/Sandbox', 'Simple title; Get link for "Sandbox"' );
+ assert.equal( href, '/wiki/Sandbox', 'simple title' );
- href = mw.util.getUrl( 'Foo:Sandbox ? 5+5=10 ! (test)/subpage' );
- assert.equal( href, '/wiki/Foo:Sandbox_%3F_5%2B5%3D10_!_(test)/subpage',
- 'Advanced title; Get link for "Foo:Sandbox ? 5+5=10 ! (test)/subpage"' );
+ href = mw.util.getUrl( 'Foo:Sandbox? 5+5=10! (test)/sub ' );
+ assert.equal( href, '/wiki/Foo:Sandbox%3F_5%2B5%3D10!_(test)/sub_', 'advanced title' );
href = mw.util.getUrl();
- assert.equal( href, '/wiki/Foobar', 'Default title; Get link for current page ("Foobar")' );
+ assert.equal( href, '/wiki/Foobar', 'default title' );
+
+ href = mw.util.getUrl( null, { action: 'edit' } );
+ assert.equal( href, '/wiki/Foobar?action=edit', 'default title with query string' );
href = mw.util.getUrl( 'Sandbox', { action: 'edit' } );
- assert.equal( href, '/wiki/Sandbox?action=edit',
- 'Simple title with query string; Get link for "Sandbox" with action=edit' );
+ assert.equal( href, '/wiki/Sandbox?action=edit', 'simple title with query string' );
} );
QUnit.test( 'wikiScript', 4, function ( assert ) {
@@ -189,7 +265,7 @@
);
assert.equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
- assert.strictEqual( $tbMW.next()[0], tbRL, 'Link is in the correct position (by passing nextnode)' );
+ assert.strictEqual( $tbMW.next()[0], tbRL, 'Link is in the correct position (nextnode as Node object)' );
cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux', null, 'Example [shift-x]', 'q' );
$cuQuux = $( cuQuux );
@@ -205,7 +281,7 @@
tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' );
- assert.equal( $( tbRLDM ).next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing CSS selector)' );
+ assert.strictEqual( $( tbRLDM ).next()[0], tbRL, 'Link is in the correct position (CSS selector as nextnode)' );
caFoo = mw.util.addPortletLink( 'p-test-views', '#', 'Foo' );
@@ -213,26 +289,19 @@
assert.strictEqual( $( caFoo ).find( 'span' ).length, 1, 'A <span> element should be added for porlets with vectorTabs class.' );
addedAfter = mw.util.addPortletLink( 'p-test-tb', '#', 'After foo', 'post-foo', 'After foo', null, $( tbRL ) );
- assert.strictEqual( $( addedAfter ).next()[0], tbRL, 'Link is in the correct position (by passing a jQuery object as nextnode)' );
+ assert.strictEqual( $( addedAfter ).next()[0], tbRL, 'Link is in the correct position (jQuery object as nextnode)' );
// test case - nonexistent id as next node
tbRLDMnonexistentid = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
'Default modules', 't-rldm-nonexistent', 'List of all default modules ', 'd', '#t-rl-nonexistent' );
- assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[0], 'Nonexistent id as nextnode adds the portlet at end' );
+ assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[0], 'Fallback to adding at the end (nextnode non-matching CSS selector)' );
// test case - empty jquery object as next node
tbRLDMemptyjquery = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
'Default modules', 't-rldm-empty-jquery', 'List of all default modules ', 'd', $( '#t-rl-nonexistent' ) );
- assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[0], 'Empty jquery as nextnode adds the portlet at end' );
- } );
-
- QUnit.test( 'jsMessage', 1, function ( assert ) {
- this.suppressWarnings();
- var a = mw.util.jsMessage( 'MediaWiki is <b>Awesome</b>.' );
- this.restoreWarnings();
- assert.ok( a, 'Basic checking of return value' );
+ assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[0], 'Fallback to adding at the end (nextnode as empty jQuery object)' );
} );
QUnit.test( 'validateEmail', 6, function ( assert ) {
@@ -249,95 +318,24 @@
} );
QUnit.test( 'isIPv6Address', 40, function ( assert ) {
- // Shortcuts
- function assertFalseIPv6( addy, summary ) {
- return assert.strictEqual( mw.util.isIPv6Address( addy ), false, summary );
- }
-
- function assertTrueIPv6( addy, summary ) {
- return assert.strictEqual( mw.util.isIPv6Address( addy ), true, summary );
- }
-
- // Based on IPTest.php > testisIPv6
- assertFalseIPv6( ':fc:100::', 'IPv6 starting with lone ":"' );
- assertFalseIPv6( 'fc:100:::', 'IPv6 ending with a ":::"' );
- assertFalseIPv6( 'fc:300', 'IPv6 with only 2 words' );
- assertFalseIPv6( 'fc:100:300', 'IPv6 with only 3 words' );
-
- $.each(
- ['fc:100::',
- 'fc:100:a::',
- 'fc:100:a:d::',
- 'fc:100:a:d:1::',
- 'fc:100:a:d:1:e::',
- 'fc:100:a:d:1:e:ac::'], function ( i, addy ) {
- assertTrueIPv6( addy, addy + ' is a valid IP' );
- } );
-
- assertFalseIPv6( 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"' );
- assertFalseIPv6( 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"' );
-
- assertFalseIPv6( ':::' );
- assertFalseIPv6( '::0:', 'IPv6 ending in a lone ":"' );
-
- assertTrueIPv6( '::', 'IPv6 zero address' );
- $.each(
- ['::0',
- '::fc',
- '::fc:100',
- '::fc:100:a',
- '::fc:100:a:d',
- '::fc:100:a:d:1',
- '::fc:100:a:d:1:e',
- '::fc:100:a:d:1:e:ac',
-
- 'fc:100:a:d:1:e:ac:0'], function ( i, addy ) {
- assertTrueIPv6( addy, addy + ' is a valid IP' );
- } );
-
- assertFalseIPv6( '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
- assertFalseIPv6( '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
-
- assertFalseIPv6( ':fc::100', 'IPv6 starting with lone ":"' );
- assertFalseIPv6( 'fc::100:', 'IPv6 ending with lone ":"' );
- assertFalseIPv6( 'fc:::100', 'IPv6 with ":::" in the middle' );
-
- assertTrueIPv6( 'fc::100', 'IPv6 with "::" and 2 words' );
- assertTrueIPv6( 'fc::100:a', 'IPv6 with "::" and 3 words' );
- assertTrueIPv6( 'fc::100:a:d', 'IPv6 with "::" and 4 words' );
- assertTrueIPv6( 'fc::100:a:d:1', 'IPv6 with "::" and 5 words' );
- assertTrueIPv6( 'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words' );
- assertTrueIPv6( 'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words' );
- assertTrueIPv6( '2001::df', 'IPv6 with "::" and 2 words' );
- assertTrueIPv6( '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words' );
- assertTrueIPv6( '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words' );
-
- assertFalseIPv6( 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' );
- assertFalseIPv6( 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' );
+ $.each( IPV6_CASES, function ( i, ipCase ) {
+ assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+ } );
} );
QUnit.test( 'isIPv4Address', 11, function ( assert ) {
- // Shortcuts
- function assertFalseIPv4( addy, summary ) {
- assert.strictEqual( mw.util.isIPv4Address( addy ), false, summary );
- }
+ $.each( IPV4_CASES, function ( i, ipCase ) {
+ assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+ } );
+ } );
- function assertTrueIPv4( addy, summary ) {
- assert.strictEqual( mw.util.isIPv4Address( addy ), true, summary );
- }
+ QUnit.test( 'isIPAddress', 51, function ( assert ) {
+ $.each( IPV4_CASES, function ( i, ipCase ) {
+ assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+ } );
- // Based on IPTest.php > testisIPv4
- assertFalseIPv4( false, 'Boolean false is not an IP' );
- assertFalseIPv4( true, 'Boolean true is not an IP' );
- assertFalseIPv4( '', 'Empty string is not an IP' );
- assertFalseIPv4( 'abc', '"abc" is not an IP' );
- assertFalseIPv4( ':', 'Colon is not an IP' );
- assertFalseIPv4( '124.24.52', 'IPv4 not enough quads' );
- assertFalseIPv4( '24.324.52.13', 'IPv4 out of range' );
- assertFalseIPv4( '.24.52.13', 'IPv4 starts with period' );
-
- assertTrueIPv4( '124.24.52.13', '124.24.52.134 is a valid IP' );
- assertTrueIPv4( '1.24.52.13', '1.24.52.13 is a valid IP' );
- assertFalseIPv4( '74.24.52.13/20', 'IPv4 ranges are not recogzized as valid IPs' );
+ $.each( IPV6_CASES, function ( i, ipCase ) {
+ assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+ } );
} );
}( mediaWiki, jQuery ) );
diff --git a/tests/qunit/suites/resources/startup.test.js b/tests/qunit/suites/resources/startup.test.js
index ed03418a..6011961a 100644
--- a/tests/qunit/suites/resources/startup.test.js
+++ b/tests/qunit/suites/resources/startup.test.js
@@ -96,6 +96,7 @@
'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060928 (Debian|Debian-1.8.0.7-1) Epiphany/2.14',
'Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.6) Gecko/20070817 IceWeasel/2.0.0.6-g2',
// KHTML
+ 'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.4 (like Gecko)',
'Mozilla/5.0 (compatible; Konqueror/4.3; Linux) KHTML/4.3.5 (like Gecko)',
// Text browsers
'Links (2.1pre33; Darwin 8.11.0 Power Macintosh; x)',
diff --git a/tests/testHelpers.inc b/tests/testHelpers.inc
index 62dccbf0..6d3ac2f5 100644
--- a/tests/testHelpers.inc
+++ b/tests/testHelpers.inc
@@ -471,7 +471,7 @@ class TestFileIterator implements Iterator {
$hooksResult = $this->delayedParserTest->unleash( $this->parserTest );
if ( !$hooksResult ) {
# Some hook reported an issue. Abort.
- throw new MWException( "Problem running hook" );
+ throw new MWException( "Problem running requested parser hook from the test file" );
}
$this->test = array(
@@ -558,7 +558,7 @@ class TestFileIterator implements Iterator {
$line = trim( $line );
if ( $line ) {
- $delayedParserTest->requireTransparentHook( $line );
+ $this->delayedParserTest->requireTransparentHook( $line );
}
}
@@ -618,6 +618,7 @@ class TestFileIterator implements Iterator {
* @param bool $fatal True iff an exception should be thrown if
* the section is not found.
* @return bool|string
+ * @throws MWException
*/
private function checkSection( $tokens, $fatal = true ) {
if ( is_null( $this->section ) ) {
@@ -691,6 +692,7 @@ class DelayedParserTest {
* Should be the case if we found the parserTest is not disabled
* @param ParserTest|NewParserTest $parserTest
* @return bool
+ * @throws MWException
*/
public function unleash( &$parserTest ) {
if ( !( $parserTest instanceof ParserTest || $parserTest instanceof NewParserTest ) ) {
@@ -805,7 +807,7 @@ class TidySupport {
global $wgTidyBin;
$this->internalTidy = extension_loaded( 'tidy' ) &&
- class_exists( 'tidy' );
+ class_exists( 'tidy' ) && !wfIsHHVM();
$this->externalTidy = is_executable( $wgTidyBin ) ||
Installer::locateExecutableInDefaultPaths( array( $wgTidyBin ) )
diff --git a/thumb.php b/thumb.php
index ca1574b8..2ea3f076 100644
--- a/thumb.php
+++ b/thumb.php
@@ -32,7 +32,7 @@ if ( defined( 'THUMB_HANDLER' ) ) {
wfThumbHandle404();
} else {
// Called directly, use $_GET params
- wfThumbHandleRequest();
+ wfStreamThumb( $_GET );
}
wfLogProfilingData();
@@ -44,19 +44,6 @@ $factory->shutdown();
//--------------------------------------------------------------------------
/**
- * Handle a thumbnail request via query parameters
- *
- * @return void
- */
-function wfThumbHandleRequest() {
- $params = get_magic_quotes_gpc()
- ? array_map( 'stripslashes', $_GET )
- : $_GET;
-
- wfStreamThumb( $params ); // stream the thumbnail
-}
-
-/**
* Handle a thumbnail request via thumbnail file URL
*
* @return void
@@ -105,7 +92,6 @@ function wfThumbHandle404() {
function wfStreamThumb( array $params ) {
global $wgVaryOnXFP;
- $section = new ProfileSection( __METHOD__ );
$headers = array(); // HTTP headers to send
@@ -266,16 +252,18 @@ function wfStreamThumb( array $params ) {
try {
$thumbName = $img->thumbName( $params );
if ( !strlen( $thumbName ) ) { // invalid params?
- wfThumbError( 400, 'The specified thumbnail parameters are not valid.' );
- return;
+ throw new MediaTransformInvalidParametersException( 'Empty return from File::thumbName' );
}
$thumbName2 = $img->thumbName( $params, File::THUMB_FULL_NAME ); // b/c; "long" style
+ } catch ( MediaTransformInvalidParametersException $e ) {
+ wfThumbError( 400, 'The specified thumbnail parameters are not valid: ' . $e->getMessage() );
+ return;
} catch ( MWException $e ) {
wfThumbError( 500, $e->getHTML() );
return;
}
- // For 404 handled thumbnails, we only use the the base name of the URI
+ // For 404 handled thumbnails, we only use the base name of the URI
// for the thumb params and the parent directory for the source file name.
// Check that the zone relative path matches up so squid caches won't pick
// up thumbs that would not be purged on source file deletion (bug 34231).
@@ -317,7 +305,10 @@ function wfStreamThumb( array $params ) {
// Stream the file if it exists already...
$thumbPath = $img->getThumbPath( $thumbName );
if ( $img->getRepo()->fileExists( $thumbPath ) ) {
- $img->getRepo()->streamFile( $thumbPath, $headers );
+ $success = $img->getRepo()->streamFile( $thumbPath, $headers );
+ if ( !$success ) {
+ wfThumbError( 500, 'Could not stream the file' );
+ }
return;
}
@@ -332,9 +323,11 @@ function wfStreamThumb( array $params ) {
// Actually generate a new thumbnail
list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName, $thumbPath );
+ /** @var MediaTransformOutput|bool $thumb */
// Check for thumbnail generation errors...
$msg = wfMessage( 'thumbnail_error' );
+ $errorCode = 500;
if ( !$thumb ) {
$errorMsg = $errorMsg ?: $msg->rawParams( 'File::transform() returned false' )->escaped();
} elseif ( $thumb->isError() ) {
@@ -344,13 +337,17 @@ function wfStreamThumb( array $params ) {
} elseif ( $thumb->fileIsSource() ) {
$errorMsg = $msg->
rawParams( 'Image was not scaled, is the requested width bigger than the source?' )->escaped();
+ $errorCode = 400;
}
if ( $errorMsg !== false ) {
- wfThumbError( 500, $errorMsg );
+ wfThumbError( $errorCode, $errorMsg );
} else {
// Stream the file if there were no errors
- $thumb->streamFile( $headers );
+ $success = $thumb->streamFile( $headers );
+ if ( !$success ) {
+ wfThumbError( 500, 'Could not stream the file' );
+ }
}
}
@@ -439,66 +436,6 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
}
/**
- * Returns true if this thumbnail is one that MediaWiki generates
- * links to on file description pages and possibly parser output.
- *
- * $params is considered non-standard if they involve a non-standard
- * width or any non-default parameters aside from width and page number.
- * The number of possible files with standard parameters is far less than
- * that of all combinations; rate-limiting for them can thus be more generious.
- *
- * @param File $file
- * @param array $params
- * @return bool
- */
-function wfThumbIsStandard( File $file, array $params ) {
- global $wgThumbLimits, $wgImageLimits;
-
- $handler = $file->getHandler();
- if ( !$handler || !isset( $params['width'] ) ) {
- return false;
- }
-
- $basicParams = array();
- if ( isset( $params['page'] ) ) {
- $basicParams['page'] = $params['page'];
- }
-
- // Check if the width matches one of $wgThumbLimits
- if ( in_array( $params['width'], $wgThumbLimits ) ) {
- $normalParams = $basicParams + array( 'width' => $params['width'] );
- // Append any default values to the map (e.g. "lossy", "lossless", ...)
- $handler->normaliseParams( $file, $normalParams );
- } else {
- // If not, then check if the width matchs one of $wgImageLimits
- $match = false;
- foreach ( $wgImageLimits as $pair ) {
- $normalParams = $basicParams + array( 'width' => $pair[0], 'height' => $pair[1] );
- // Decide whether the thumbnail should be scaled on width or height.
- // Also append any default values to the map (e.g. "lossy", "lossless", ...)
- $handler->normaliseParams( $file, $normalParams );
- // Check if this standard thumbnail size maps to the given width
- if ( $normalParams['width'] == $params['width'] ) {
- $match = true;
- break;
- }
- }
- if ( !$match ) {
- return false; // not standard for description pages
- }
- }
-
- // Check that the given values for non-page, non-width, params are just defaults
- foreach ( $params as $key => $value ) {
- if ( !isset( $normalParams[$key] ) || $normalParams[$key] != $value ) {
- return false;
- }
- }
-
- return true;
-}
-
-/**
* Convert pathinfo type parameter, into normal request parameters
*
* So for example, if the request was redirected from
@@ -619,7 +556,9 @@ function wfThumbError( $status, $msg ) {
header( 'Cache-Control: no-cache' );
header( 'Content-Type: text/html; charset=utf-8' );
- if ( $status == 404 ) {
+ if ( $status == 400 ) {
+ header( 'HTTP/1.1 400 Bad request' );
+ } elseif ( $status == 404 ) {
header( 'HTTP/1.1 404 Not found' );
} elseif ( $status == 403 ) {
header( 'HTTP/1.1 403 Forbidden' );
@@ -636,7 +575,11 @@ function wfThumbError( $status, $msg ) {
$debug = '';
}
echo <<<EOT
-<html><head><title>Error generating thumbnail</title></head>
+<!DOCTYPE html>
+<html><head>
+<meta charset="UTF-8" />
+<title>Error generating thumbnail</title>
+</head>
<body>
<h1>Error generating thumbnail</h1>
<p>
diff --git a/thumb.php5 b/thumb.php5
index d07b86f1..5bfe3284 100644
--- a/thumb.php5
+++ b/thumb.php5
@@ -22,4 +22,6 @@
* @ingroup Media
*/
+define( 'MW_ENTRY_PHP5', true );
+
require './thumb.php';
diff --git a/thumb_handler.php5 b/thumb_handler.php5
index 0e0c3c0b..c9e10cd9 100644
--- a/thumb_handler.php5
+++ b/thumb_handler.php5
@@ -22,4 +22,6 @@
* @ingroup Media
*/
+define( 'MW_ENTRY_PHP5', true );
+
require './thumb_handler.php';
diff --git a/vendor/autoload.php b/vendor/autoload.php
new file mode 100644
index 00000000..69e72b37
--- /dev/null
+++ b/vendor/autoload.php
@@ -0,0 +1,7 @@
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer' . '/autoload_real.php';
+
+return ComposerAutoloaderInit9b10cc5cf6896d6e4a31983fc3498786::getLoader();
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
new file mode 100644
index 00000000..5e1469e8
--- /dev/null
+++ b/vendor/composer/ClassLoader.php
@@ -0,0 +1,413 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0 class loader
+ *
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+
+ private $classMapAuthoritative = false;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-0 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
+ if ('\\' == $class[0]) {
+ $class = substr($class, 1);
+ }
+
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative) {
+ return false;
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if ($file === null && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if ($file === null) {
+ // Remember that this class does not exist.
+ return $this->classMap[$class] = false;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
new file mode 100644
index 00000000..79053ea1
--- /dev/null
+++ b/vendor/composer/autoload_classmap.php
@@ -0,0 +1,85 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ 'CSSJanus' => $vendorDir . '/cssjanus/cssjanus/src/CSSJanus.php',
+ 'CSSJanusTokenizer' => $vendorDir . '/cssjanus/cssjanus/src/CSSJanus.php',
+ 'Cdb\\Exception' => $vendorDir . '/wikimedia/cdb/src/Exception.php',
+ 'Cdb\\Reader' => $vendorDir . '/wikimedia/cdb/src/Reader.php',
+ 'Cdb\\Reader\\DBA' => $vendorDir . '/wikimedia/cdb/src/Reader/DBA.php',
+ 'Cdb\\Reader\\PHP' => $vendorDir . '/wikimedia/cdb/src/Reader/PHP.php',
+ 'Cdb\\Util' => $vendorDir . '/wikimedia/cdb/src/Util.php',
+ 'Cdb\\Writer' => $vendorDir . '/wikimedia/cdb/src/Writer.php',
+ 'Cdb\\Writer\\DBA' => $vendorDir . '/wikimedia/cdb/src/Writer/DBA.php',
+ 'Cdb\\Writer\\PHP' => $vendorDir . '/wikimedia/cdb/src/Writer/PHP.php',
+ 'ComposerHookHandler' => $baseDir . '/includes/composer/ComposerHookHandler.php',
+ 'LCRun3' => $vendorDir . '/zordius/lightncandy/src/lightncandy.php',
+ 'LightnCandy' => $vendorDir . '/zordius/lightncandy/src/lightncandy.php',
+ 'Liuggio\\StatsdClient\\Entity\\StatsdData' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php',
+ 'Liuggio\\StatsdClient\\Entity\\StatsdDataInterface' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php',
+ 'Liuggio\\StatsdClient\\Exception\\InvalidArgumentException' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php',
+ 'Liuggio\\StatsdClient\\Factory\\StatsdDataFactory' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php',
+ 'Liuggio\\StatsdClient\\Factory\\StatsdDataFactoryInterface' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php',
+ 'Liuggio\\StatsdClient\\Monolog\\Formatter\\StatsDFormatter' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php',
+ 'Liuggio\\StatsdClient\\Monolog\\Handler\\StatsDHandler' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php',
+ 'Liuggio\\StatsdClient\\Sender\\EchoSender' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php',
+ 'Liuggio\\StatsdClient\\Sender\\SenderInterface' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php',
+ 'Liuggio\\StatsdClient\\Sender\\SocketSender' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php',
+ 'Liuggio\\StatsdClient\\Sender\\SysLogSender' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php',
+ 'Liuggio\\StatsdClient\\StatsdClient' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php',
+ 'Liuggio\\StatsdClient\\StatsdClientInterface' => $vendorDir . '/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php',
+ 'OOUI\\ApexTheme' => $vendorDir . '/oojs/oojs-ui/php/themes/ApexTheme.php',
+ 'OOUI\\ButtonElement' => $vendorDir . '/oojs/oojs-ui/php/elements/ButtonElement.php',
+ 'OOUI\\ButtonGroupWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/ButtonGroupWidget.php',
+ 'OOUI\\ButtonInputWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/ButtonInputWidget.php',
+ 'OOUI\\ButtonWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/ButtonWidget.php',
+ 'OOUI\\CheckboxInputWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/CheckboxInputWidget.php',
+ 'OOUI\\DropdownInputWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/DropdownInputWidget.php',
+ 'OOUI\\Element' => $vendorDir . '/oojs/oojs-ui/php/Element.php',
+ 'OOUI\\ElementMixin' => $vendorDir . '/oojs/oojs-ui/php/ElementMixin.php',
+ 'OOUI\\Exception' => $vendorDir . '/oojs/oojs-ui/php/Exception.php',
+ 'OOUI\\FieldLayout' => $vendorDir . '/oojs/oojs-ui/php/layouts/FieldLayout.php',
+ 'OOUI\\FieldsetLayout' => $vendorDir . '/oojs/oojs-ui/php/layouts/FieldsetLayout.php',
+ 'OOUI\\FlaggedElement' => $vendorDir . '/oojs/oojs-ui/php/elements/FlaggedElement.php',
+ 'OOUI\\FormLayout' => $vendorDir . '/oojs/oojs-ui/php/layouts/FormLayout.php',
+ 'OOUI\\GroupElement' => $vendorDir . '/oojs/oojs-ui/php/elements/GroupElement.php',
+ 'OOUI\\HtmlSnippet' => $vendorDir . '/oojs/oojs-ui/php/HtmlSnippet.php',
+ 'OOUI\\IconElement' => $vendorDir . '/oojs/oojs-ui/php/elements/IconElement.php',
+ 'OOUI\\IconWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/IconWidget.php',
+ 'OOUI\\IndicatorElement' => $vendorDir . '/oojs/oojs-ui/php/elements/IndicatorElement.php',
+ 'OOUI\\IndicatorWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/IndicatorWidget.php',
+ 'OOUI\\InputWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/InputWidget.php',
+ 'OOUI\\LabelElement' => $vendorDir . '/oojs/oojs-ui/php/elements/LabelElement.php',
+ 'OOUI\\LabelWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/LabelWidget.php',
+ 'OOUI\\Layout' => $vendorDir . '/oojs/oojs-ui/php/Layout.php',
+ 'OOUI\\MediaWikiTheme' => $vendorDir . '/oojs/oojs-ui/php/themes/MediaWikiTheme.php',
+ 'OOUI\\PanelLayout' => $vendorDir . '/oojs/oojs-ui/php/layouts/PanelLayout.php',
+ 'OOUI\\RadioInputWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/RadioInputWidget.php',
+ 'OOUI\\TabIndexedElement' => $vendorDir . '/oojs/oojs-ui/php/elements/TabIndexedElement.php',
+ 'OOUI\\Tag' => $vendorDir . '/oojs/oojs-ui/php/Tag.php',
+ 'OOUI\\TextInputWidget' => $vendorDir . '/oojs/oojs-ui/php/widgets/TextInputWidget.php',
+ 'OOUI\\Theme' => $vendorDir . '/oojs/oojs-ui/php/Theme.php',
+ 'OOUI\\TitledElement' => $vendorDir . '/oojs/oojs-ui/php/elements/TitledElement.php',
+ 'OOUI\\Widget' => $vendorDir . '/oojs/oojs-ui/php/Widget.php',
+ 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php',
+ 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php',
+ 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php',
+ 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php',
+ 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php',
+ 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
+ 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
+ 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
+ 'UtfNormal\\Constants' => $vendorDir . '/wikimedia/utfnormal/src/Constants.php',
+ 'UtfNormal\\Utils' => $vendorDir . '/wikimedia/utfnormal/src/Util.php',
+ 'UtfNormal\\Validator' => $vendorDir . '/wikimedia/utfnormal/src/Validator.php',
+ 'Wikimedia\\Composer\\MergePlugin' => $vendorDir . '/wikimedia/composer-merge-plugin/src/MergePlugin.php',
+ 'lessc' => $vendorDir . '/leafo/lessphp/lessc.inc.php',
+ 'lessc_formatter_classic' => $vendorDir . '/leafo/lessphp/lessc.inc.php',
+ 'lessc_formatter_compressed' => $vendorDir . '/leafo/lessphp/lessc.inc.php',
+ 'lessc_formatter_lessjs' => $vendorDir . '/leafo/lessphp/lessc.inc.php',
+ 'lessc_parser' => $vendorDir . '/leafo/lessphp/lessc.inc.php',
+);
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
new file mode 100644
index 00000000..a0f180fa
--- /dev/null
+++ b/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,13 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ 'Psr\\Log\\' => array($vendorDir . '/psr/log'),
+ 'Liuggio' => array($vendorDir . '/liuggio/statsd-php-client/src'),
+ 'ComposerHookHandler' => array($baseDir . '/includes/composer'),
+ '' => array($vendorDir . '/cssjanus/cssjanus/src'),
+);
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
new file mode 100644
index 00000000..74a09133
--- /dev/null
+++ b/vendor/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ 'Wikimedia\\Composer\\' => array($vendorDir . '/wikimedia/composer-merge-plugin/src'),
+);
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
new file mode 100644
index 00000000..3e640297
--- /dev/null
+++ b/vendor/composer/autoload_real.php
@@ -0,0 +1,50 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInit9b10cc5cf6896d6e4a31983fc3498786
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInit9b10cc5cf6896d6e4a31983fc3498786', 'loadClassLoader'), true, false);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInit9b10cc5cf6896d6e4a31983fc3498786', 'loadClassLoader'));
+
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+
+ $loader->register(false);
+
+ return $loader;
+ }
+}
+
+function composerRequire9b10cc5cf6896d6e4a31983fc3498786($file)
+{
+ require $file;
+}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
new file mode 100644
index 00000000..e882cda4
--- /dev/null
+++ b/vendor/composer/installed.json
@@ -0,0 +1,394 @@
+[
+ {
+ "name": "wikimedia/composer-merge-plugin",
+ "version": "v1.0.0",
+ "version_normalized": "1.0.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/composer-merge-plugin.git",
+ "reference": "ed426b785f9f786b33be4fd78584e43f4e962356"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/ed426b785f9f786b33be4fd78584e43f4e962356",
+ "reference": "ed426b785f9f786b33be4fd78584e43f4e962356",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "1.0.0",
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev",
+ "jakub-onderka/php-parallel-lint": "~0.8",
+ "phpspec/prophecy-phpunit": "~1.0",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~2.1.0"
+ },
+ "time": "2015-02-21 00:57:13",
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Wikimedia\\Composer\\MergePlugin"
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Wikimedia\\Composer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Composer plugin to merge multiple composer.json files"
+ },
+ {
+ "name": "cssjanus/cssjanus",
+ "version": "v1.1.1",
+ "version_normalized": "1.1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cssjanus/php-cssjanus.git",
+ "reference": "62a9c32e6e140de09082b40a6e99d868ad14d4e0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cssjanus/php-cssjanus/zipball/62a9c32e6e140de09082b40a6e99d868ad14d4e0",
+ "reference": "62a9c32e6e140de09082b40a6e99d868ad14d4e0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.8.*",
+ "phpunit/phpunit": "3.7.*",
+ "squizlabs/php_codesniffer": "1.*"
+ },
+ "time": "2014-11-14 20:00:50",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "description": "Convert CSS stylesheets between left-to-right and right-to-left."
+ },
+ {
+ "name": "leafo/lessphp",
+ "version": "v0.5.0",
+ "version_normalized": "0.5.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/leafo/lessphp.git",
+ "reference": "0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/leafo/lessphp/zipball/0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283",
+ "reference": "0f5a7f5545d2bcf4e9fad9a228c8ad89cc9aa283",
+ "shasum": ""
+ },
+ "time": "2014-11-24 18:39:20",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.4.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "lessc.inc.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT",
+ "GPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Leaf Corcoran",
+ "email": "leafot@gmail.com",
+ "homepage": "http://leafo.net"
+ }
+ ],
+ "description": "lessphp is a compiler for LESS written in PHP.",
+ "homepage": "http://leafo.net/lessphp/"
+ },
+ {
+ "name": "liuggio/statsd-php-client",
+ "version": "v1.0.12",
+ "version_normalized": "1.0.12.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/liuggio/statsd-php-client.git",
+ "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/liuggio/statsd-php-client/zipball/a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7",
+ "reference": "a8c9ccd2a3af6cc49c7fc4f5f689d7b148ab19d7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2"
+ },
+ "require-dev": {
+ "monolog/monolog": ">=1.2.0"
+ },
+ "suggest": {
+ "monolog/monolog": "Monolog, in order to do generate statistic from log >=1.2.0)"
+ },
+ "time": "2014-09-17 21:37:49",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Liuggio": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Giulio De Donato",
+ "email": "liuggio@gmail.com"
+ }
+ ],
+ "description": "Statsd (Object Oriented) client library for PHP",
+ "homepage": "https://github.com/liuggio/statsd-php-client/",
+ "keywords": [
+ "etsy",
+ "monitoring",
+ "php",
+ "statsd"
+ ]
+ },
+ {
+ "name": "oojs/oojs-ui",
+ "version": "v0.11.3",
+ "version_normalized": "0.11.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/oojs-ui.git",
+ "reference": "a03de5681e28e4fad1e27f8cccab32a2c5b484e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/oojs-ui/zipball/a03de5681e28e4fad1e27f8cccab32a2c5b484e5",
+ "reference": "a03de5681e28e4fad1e27f8cccab32a2c5b484e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.8.*",
+ "mediawiki/mediawiki-codesniffer": "0.1.0",
+ "squizlabs/php_codesniffer": "2.1.*"
+ },
+ "time": "2015-05-12 11:58:55",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "php/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Provides library of common widgets, layouts, and windows.",
+ "homepage": "https://www.mediawiki.org/wiki/OOjs_UI"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.0.0",
+ "version_normalized": "1.0.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
+ "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
+ "shasum": ""
+ },
+ "time": "2012-12-21 11:40:51",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Psr\\Log\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ]
+ },
+ {
+ "name": "wikimedia/cdb",
+ "version": "1.0.1",
+ "version_normalized": "1.0.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/cdb.git",
+ "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/cdb/zipball/3b7d5366c88eccf2517ebac57c59eb557c82f46c",
+ "reference": "3b7d5366c88eccf2517ebac57c59eb557c82f46c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
+ },
+ "time": "2014-12-08 19:26:44",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Tim Starling",
+ "email": "tstarling@wikimedia.org"
+ },
+ {
+ "name": "Chad Horohoe",
+ "email": "chad@wikimedia.org"
+ }
+ ],
+ "description": "Constant Database (CDB) wrapper library for PHP. Provides pure-PHP fallback when dba_* functions are absent.",
+ "homepage": "https://www.mediawiki.org/wiki/CDB"
+ },
+ {
+ "name": "wikimedia/utfnormal",
+ "version": "v1.0.2",
+ "version_normalized": "1.0.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wikimedia/utfnormal.git",
+ "reference": "bb892a53a76116ad0982445a849043687cb6e778"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wikimedia/utfnormal/zipball/bb892a53a76116ad0982445a849043687cb6e778",
+ "reference": "bb892a53a76116ad0982445a849043687cb6e778",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "jakub-onderka/php-parallel-lint": "0.8.*",
+ "mediawiki/mediawiki-codesniffer": "0.1.0",
+ "phpunit/phpunit": "4.4.*",
+ "squizlabs/php_codesniffer": "2.1.*"
+ },
+ "time": "2015-03-12 01:54:47",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0+"
+ ],
+ "authors": [
+ {
+ "name": "Brion Vibber",
+ "email": "bvibber@wikimedia.org"
+ }
+ ],
+ "homepage": "https://www.mediawiki.org/wiki/utfnormal"
+ },
+ {
+ "name": "zordius/lightncandy",
+ "version": "v0.18",
+ "version_normalized": "0.18.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zordius/lightncandy.git",
+ "reference": "24be6909c37391f4648ce1fdf19036b11bd56d05"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zordius/lightncandy/zipball/24be6909c37391f4648ce1fdf19036b11bd56d05",
+ "reference": "24be6909c37391f4648ce1fdf19036b11bd56d05",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.0.17"
+ },
+ "time": "2015-01-01 04:37:19",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "src/lightncandy.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Zordius Chen",
+ "email": "zordius@yahoo-inc.com"
+ }
+ ],
+ "description": "An extremely fast PHP implementation of handlebars ( http://handlebarsjs.com/ ) and mustache ( http://mustache.github.io/ ).",
+ "homepage": "https://github.com/zordius/lightncandy",
+ "keywords": [
+ "handlebars",
+ "logicless",
+ "mustache",
+ "php",
+ "template"
+ ]
+ }
+]
diff --git a/vendor/cssjanus/cssjanus/APACHE-LICENSE-2.0.txt b/vendor/cssjanus/cssjanus/APACHE-LICENSE-2.0.txt
new file mode 100644
index 00000000..d6456956
--- /dev/null
+++ b/vendor/cssjanus/cssjanus/APACHE-LICENSE-2.0.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/vendor/cssjanus/cssjanus/README.md b/vendor/cssjanus/cssjanus/README.md
new file mode 100644
index 00000000..597ef211
--- /dev/null
+++ b/vendor/cssjanus/cssjanus/README.md
@@ -0,0 +1,45 @@
+[![Build Status](https://travis-ci.org/cssjanus/php-cssjanus.svg?branch=master)](https://travis-ci.org/cssjanus/php-cssjanus) [![Latest Stable Version](https://poser.pugx.org/cssjanus/cssjanus/v/stable.svg)](https://packagist.org/packages/cssjanus/cssjanus)
+
+# CSSJanus
+
+Convert CSS stylesheets between left-to-right and right-to-left.
+
+## Basic usage
+
+```php
+$rtlCss = CSSJanus::transform( $ltrCss );
+```
+
+## Advanced usage
+
+``transform( $css, $swapLtrRtlInURL = false, $swapLeftRightInURL = false )``
+
+* ``$css`` (string) Stylesheet to transform
+* ``$swapLtrRtlInURL`` (boolean) Swap 'ltr' and 'rtl' in URLs
+* ``$swapLeftRightInURL`` (boolean) Swap 'left' and 'right' in URLs
+
+### Preventing flipping
+
+Use a ```/* @noflip */``` comment to protect a rule from being changed.
+
+```css
+.rule1 {
+ /* Will be converted to margin-right */
+ margin-left: 1em;
+}
+/* @noflip */
+.rule2 {
+ /* Will be preserved as margin-left */
+ margin-left: 1em;
+}
+```
+
+## Port
+
+This is a PHP port of the Node.js implementation of CSSJanus.
+
+Feature requests and bugs related to the actual CSS transformation or test
+cases of it, should be submitted upstream at
+<https://github.com/cssjanus/cssjanus>.
+
+Upstream releases will be ported here.
diff --git a/vendor/cssjanus/cssjanus/composer.json b/vendor/cssjanus/cssjanus/composer.json
new file mode 100644
index 00000000..7ac36936
--- /dev/null
+++ b/vendor/cssjanus/cssjanus/composer.json
@@ -0,0 +1,24 @@
+{
+ "name": "cssjanus/cssjanus",
+ "description": "Convert CSS stylesheets between left-to-right and right-to-left.",
+ "repositories": [
+ {
+ "type": "vcs",
+ "url": "https://github.com/cssjanus/php-cssjanus"
+ }
+ ],
+ "license": "Apache-2.0",
+ "autoload": {
+ "psr-0": {
+ "": "src/"
+ }
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.8.*",
+ "phpunit/phpunit": "3.7.*",
+ "squizlabs/php_codesniffer": "1.*"
+ }
+}
diff --git a/includes/libs/CSSJanus.php b/vendor/cssjanus/cssjanus/src/CSSJanus.php
index 07a83a54..d81aa2bb 100644
--- a/includes/libs/CSSJanus.php
+++ b/vendor/cssjanus/cssjanus/src/CSSJanus.php
@@ -1,21 +1,22 @@
<?php
/**
* PHP port of CSSJanus.
+ * https://github.com/cssjanus/php-cssjanus
*
- * 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.
+ * Copyright 2008 Google Inc.
+ * Copyright 2010 Roan Kattouw
*
- * 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.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
- * 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
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*
* @file
*/
@@ -24,15 +25,10 @@
* This is a PHP port of CSSJanus, a utility that transforms CSS style sheets
* written for LTR to RTL.
*
- * The original Python version of CSSJanus is Copyright 2008 by Google Inc. and
- * is distributed under the Apache license. This PHP port is Copyright 2010 by
- * Roan Kattouw and is dual-licensed under the GPL (as in the comment above) and
- * the Apache (as in the original code) licenses.
- *
* Original code: http://code.google.com/p/cssjanus/source/browse/trunk/cssjanus.py
- * License of original code: http://code.google.com/p/cssjanus/source/browse/trunk/LICENSE
- * @author Roan Kattouw
*
+ * @author Lindsey Simon <elsigh@google.com>
+ * @author Roan Kattouw
*/
class CSSJanus {
// Patterns defined as null are built dynamically by buildPatterns()
@@ -119,8 +115,8 @@ class CSSJanus {
$patterns['cursor_east'] = "/{$patterns['lookbehind_not_letter']}([ns]?)e-resize/";
$patterns['cursor_west'] = "/{$patterns['lookbehind_not_letter']}([ns]?)w-resize/";
$patterns['four_notation_quantity_props'] = "((?:margin|padding|border-width)\s*:\s*)";
- $patterns['four_notation_quantity'] = "/{$patterns['four_notation_quantity_props']}{$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s*[;}])/i";
- $patterns['four_notation_color'] = "/((?:-color|border-style)\s*:\s*){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s*[;}])/i";
+ $patterns['four_notation_quantity'] = "/{$patterns['four_notation_quantity_props']}{$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s*(?:!important\s*)?[;}])/i";
+ $patterns['four_notation_color'] = "/((?:-color|border-style)\s*:\s*){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s*(?:!important\s*)?[;}])/i";
$patterns['border_radius'] = "/(border-radius\s*:\s*)([^;}]*)/";
$patterns['box_shadow'] = "/(box-shadow\s*:\s*(?:inset\s*)?){$patterns['possibly_negative_quantity']}/i";
$patterns['text_shadow1'] = "/(text-shadow\s*:\s*){$patterns['color']}(\s*){$patterns['possibly_negative_quantity']}/i";
diff --git a/vendor/cssjanus/cssjanus/test/codesniffer/ruleset.xml b/vendor/cssjanus/cssjanus/test/codesniffer/ruleset.xml
new file mode 100644
index 00000000..dab0fe2a
--- /dev/null
+++ b/vendor/cssjanus/cssjanus/test/codesniffer/ruleset.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<ruleset name="cssjanus">
+ <rule ref="PSR2">
+ <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace" />
+ <exclude name="PSR1.Classes.ClassDeclaration.MultipleClasses" />
+ <exclude name="PSR2.Classes.ClassDeclaration.OpenBraceNewLine" />
+ <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine" />
+ </rule>
+</ruleset>
diff --git a/vendor/cssjanus/cssjanus/test/phpunit.xml b/vendor/cssjanus/cssjanus/test/phpunit.xml
new file mode 100644
index 00000000..6d37a1c4
--- /dev/null
+++ b/vendor/cssjanus/cssjanus/test/phpunit.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit colors="true" strict="true" bootstrap="../vendor/autoload.php">
+ <testsuites>
+ <testsuite name="CSSJanus Test Suite">
+ <directory>./suites</directory>
+ </testsuite>
+ </testsuites>
+</phpunit>
diff --git a/vendor/cssjanus/cssjanus/test/run b/vendor/cssjanus/cssjanus/test/run
new file mode 100644
index 00000000..247500c7
--- /dev/null
+++ b/vendor/cssjanus/cssjanus/test/run
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+set -e
+cd $(cd $(dirname $0)/..; pwd)
+set -x
+./vendor/bin/parallel-lint --exclude vendor .
+./vendor/bin/phpunit --configuration test/phpunit.xml
+./vendor/bin/phpcs . --standard=./test/codesniffer --ignore=vendor/* --report=full -s --tab-width=4
diff --git a/vendor/cssjanus/cssjanus/test/suites/CSSJanusTest.php b/vendor/cssjanus/cssjanus/test/suites/CSSJanusTest.php
new file mode 100644
index 00000000..8a436760
--- /dev/null
+++ b/vendor/cssjanus/cssjanus/test/suites/CSSJanusTest.php
@@ -0,0 +1,71 @@
+<?php
+
+class CSSJanusTest extends PHPUnit_Framework_TestCase {
+
+ public static function provideData() {
+ $data = self::getSpec();
+ $cases = array();
+ $defaultSettings = array(
+ 'swapLtrRtlInUrl' => false,
+ 'swapLeftRightInUrl' => false,
+ );
+ foreach ($data as $name => $test) {
+ $settings = isset($test['settings']) ? $test['settings'] : array();
+ $settings += $defaultSettings;
+ foreach ($test['cases'] as $i => $case) {
+ $input = $case[0];
+ $noop = !isset($case[1]);
+ $output = $noop ? $input : $case[1];
+
+ $cases[] = array(
+ $input,
+ $settings,
+ $output,
+ $name,
+ );
+
+ if (!$noop) {
+ // Round trip
+ $cases[] = array(
+ $output,
+ $settings,
+ $input,
+ $name,
+ );
+ }
+ }
+ }
+ return $cases;
+ }
+
+ /**
+ * @dataProvider provideData
+ */
+ public function testTransform($input, $settings, $output, $name) {
+ $this->assertEquals(
+ $output,
+ CSSJanus::transform($input, $settings['swapLtrRtlInUrl'], $settings['swapLeftRightInUrl']),
+ $name
+ );
+ }
+
+ protected static function getSpec() {
+ static $json;
+ if ($json == null) {
+ $version = '1.1.1';
+ $dir = dirname(__DIR__);
+ $file = "$dir/data-v$version.json";
+ if (!is_readable($file)) {
+ array_map('unlink', glob("$dir/data-v*.json"));
+ $json = file_get_contents("https://github.com/cssjanus/cssjanus/raw/v$version/test/data.json");
+ if ($json === false) {
+ throw new Exception('Failed to fetch data');
+ }
+ file_put_contents($file, $json);
+ } else {
+ $json = file_get_contents($file);
+ }
+ }
+ return json_decode($json, /* $assoc = */ true);
+ }
+}
diff --git a/vendor/leafo/lessphp/LICENSE b/vendor/leafo/lessphp/LICENSE
new file mode 100644
index 00000000..49c9ea41
--- /dev/null
+++ b/vendor/leafo/lessphp/LICENSE
@@ -0,0 +1,660 @@
+For ease of distribution, lessphp 0.4.0 is under a dual license.
+You are free to pick which one suits your needs.
+
+
+
+
+MIT LICENSE
+
+
+
+
+Copyright (c) 2013 Leaf Corcoran, http://leafo.net/lessphp
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+
+GPL VERSION 3
+
+
+
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
diff --git a/vendor/leafo/lessphp/Makefile b/vendor/leafo/lessphp/Makefile
new file mode 100644
index 00000000..a5d262cd
--- /dev/null
+++ b/vendor/leafo/lessphp/Makefile
@@ -0,0 +1,7 @@
+
+test:
+ phpunit --colors tests
+
+release:
+ ./package.sh
+
diff --git a/vendor/leafo/lessphp/README.md b/vendor/leafo/lessphp/README.md
new file mode 100644
index 00000000..1379ddce
--- /dev/null
+++ b/vendor/leafo/lessphp/README.md
@@ -0,0 +1,96 @@
+[![Build Status](https://travis-ci.org/leafo/lessphp.svg?branch=master)](https://travis-ci.org/leafo/lessphp)
+
+# lessphp v0.5.0
+### <http://leafo.net/lessphp>
+
+`lessphp` is a compiler for LESS written in PHP. The documentation is great,
+so check it out: <http://leafo.net/lessphp/docs/>.
+
+Here's a quick tutorial:
+
+### How to use in your PHP project
+
+The only file required is `lessc.inc.php`, so copy that to your include directory.
+
+The typical flow of **lessphp** is to create a new instance of `lessc`,
+configure it how you like, then tell it to compile something using one built in
+compile methods.
+
+The `compile` method compiles a string of LESS code to CSS.
+
+```php
+<?php
+require "lessc.inc.php";
+
+$less = new lessc;
+echo $less->compile(".block { padding: 3 + 4px }");
+```
+
+The `compileFile` method reads and compiles a file. It will either return the
+result or write it to the path specified by an optional second argument.
+
+```php
+<?php
+echo $less->compileFile("input.less");
+```
+
+The `compileChecked` method is like `compileFile`, but it only compiles if the output
+file doesn't exist or it's older than the input file:
+
+```php
+<?php
+$less->checkedCompile("input.less", "output.css");
+```
+
+If there any problem compiling your code, an exception is thrown with a helpful message:
+
+```php
+<?php
+try {
+ $less->compile("invalid LESS } {");
+} catch (exception $e) {
+ echo "fatal error: " . $e->getMessage();
+}
+```
+
+The `lessc` object can be configured through an assortment of instance methods.
+Some possible configuration options include [changing the output format][1],
+[setting variables from PHP][2], and [controlling the preservation of
+comments][3], writing [custom functions][4] and much more. It's all described
+in [the documentation][0].
+
+
+ [0]: http://leafo.net/lessphp/docs/
+ [1]: http://leafo.net/lessphp/docs/#output_formatting
+ [2]: http://leafo.net/lessphp/docs/#setting_variables_from_php
+ [3]: http://leafo.net/lessphp/docs/#preserving_comments
+ [4]: http://leafo.net/lessphp/docs/#custom_functions
+
+
+### How to use from the command line
+
+An additional script has been included to use the compiler from the command
+line. In the simplest invocation, you specify an input file and the compiled
+css is written to standard out:
+
+ $ plessc input.less > output.css
+
+Using the -r flag, you can specify LESS code directly as an argument or, if
+the argument is left off, from standard in:
+
+ $ plessc -r "my less code here"
+
+Finally, by using the -w flag you can watch a specified input file and have it
+compile as needed to the output file:
+
+ $ plessc -w input-file output-file
+
+Errors from watch mode are written to standard out.
+
+The -f flag sets the [output formatter][1]. For example, to compress the
+output run this:
+
+ $ plessc -f=compressed myfile.less
+
+For more help, run `plessc --help`
+
diff --git a/vendor/leafo/lessphp/composer.json b/vendor/leafo/lessphp/composer.json
new file mode 100644
index 00000000..0f06ba09
--- /dev/null
+++ b/vendor/leafo/lessphp/composer.json
@@ -0,0 +1,25 @@
+{
+ "name": "leafo/lessphp",
+ "type": "library",
+ "description": "lessphp is a compiler for LESS written in PHP.",
+ "homepage": "http://leafo.net/lessphp/",
+ "license": [
+ "MIT",
+ "GPL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Leaf Corcoran",
+ "email": "leafot@gmail.com",
+ "homepage": "http://leafo.net"
+ }
+ ],
+ "autoload": {
+ "classmap": ["lessc.inc.php"]
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.4.x-dev"
+ }
+ }
+}
diff --git a/vendor/leafo/lessphp/docs/docs.md b/vendor/leafo/lessphp/docs/docs.md
new file mode 100644
index 00000000..112dc2ee
--- /dev/null
+++ b/vendor/leafo/lessphp/docs/docs.md
@@ -0,0 +1,1400 @@
+ title: v0.5.0 documentation
+ link_to_home: true
+--
+
+<h2 skip="true">Documentation v0.5.0</h2>
+
+<div style="margin-bottom: 1em;">$index</div>
+
+**lessphp** is a compiler that generates CSS from a superset language which
+adds a collection of convenient features often seen in other languages. All CSS
+is compatible with LESS, so you can start using new features with your existing CSS.
+
+It is designed to be compatible with [less.js](http://lesscss.org), and suitable
+as a drop in replacement for PHP projects.
+
+## Getting Started
+
+The homepage for **lessphp** can be found at [http://leafo.net/lessphp/][1].
+
+You can follow development at the project's [GitHub][2].
+
+Including **lessphp** in your project is as simple as dropping the single
+include file into your code base and running the appropriate compile method as
+described in the [PHP Interface](#php_interface).
+
+ [1]: http://leafo.net/lessphp "lessphp homepage"
+ [2]: https://github.com/leafo/lessphp "lessphp GitHub page"
+
+## Installation
+
+**lessphp** is distributed entirely in a single stand-alone file. Download the
+latest version from either [the homepage][1] or [GitHub][2].
+
+Development versions can also be downloading from GitHub.
+
+Place `lessphp.inc.php` in a location available to your PHP scripts, and
+include it. That's it! you're ready to begin.
+
+## The Language
+
+**lessphp** is very easy to learn because it generally functions how you would
+expect it to. If you feel something is challenging or missing, feel free to
+open an issue on the [bug tracker](https://github.com/leafo/lessphp/issues).
+
+It is also easy to learn because any standards-compliant CSS code is valid LESS
+code. You are free to gradually enhance your existing CSS code base with LESS
+features without having to worry about rewriting anything.
+
+The following is a description of the new languages features provided by LESS.
+
+### Line Comments
+
+Simple but very useful; line comments are started with `//`:
+
+ ```less
+ // this is a comment
+ body {
+ color: red; // as is this
+ /* block comments still work also */
+ }
+ ```
+
+### Variables
+
+Variables are identified with a name that starts with `@`. To declare a
+variable, you create an appropriately named CSS property and assign it a value:
+
+ ```less
+ @family: "verdana";
+ @color: red;
+ body {
+ @mycolor: red;
+ font-family: @family;
+ color: @color;
+ border-bottom: 1px solid @color;
+ }
+ ```
+
+Variable declarations will not appear in the output. Variables can be declared
+in the outer most scope of the file, or anywhere else a CSS property may
+appear. They can hold any CSS property value.
+
+Variables are only visible for use from their current scope, or any enclosed
+scopes.
+
+If you have a string or keyword in a variable, you can reference another
+variable by that name by repeating the `@`:
+
+ ```less
+ @value: 20px;
+ @value_name: "value";
+
+ width: @@value_name;
+ ```
+
+### Expressions
+
+Expressions let you combine values and variables in meaningful ways. For
+example you can add to a color to make it a different shade. Or divide up the
+width of your layout logically. You can even concatenate strings.
+
+Use the mathematical operators to evaluate an expression:
+
+ ```less
+ @width: 960px;
+ .nav {
+ width: @width / 3;
+ color: #001 + #abc;
+ }
+ .body {
+ width: 2 * @width / 3;
+ font-family: "hel" + "vetica";
+ }
+ ```
+
+Parentheses can be used to control the order of evaluation. They can also be
+used to force an evaluation for cases where CSS's syntax makes the expression
+ambiguous.
+
+The following property will produce two numbers, instead of doing the
+subtraction:
+
+ ```less
+ margin: 10px -5px;
+ ```
+
+To force the subtraction:
+
+ ```less
+ margin: (10px -5px);
+ ```
+
+It is also safe to surround mathematical operators by spaces to ensure that
+they are evaluated:
+
+ ```less
+ margin: 10px - 5px;
+ ```
+
+Division has a special quirk. There are certain CSS properties that use the `/`
+operator as part of their value's syntax. Namely, the [font][4] shorthand and
+[border-radius][3].
+
+ [3]: https://developer.mozilla.org/en/CSS/border-radius
+ [4]: https://developer.mozilla.org/en/CSS/font
+
+
+Thus, **lessphp** will ignore any division in these properties unless it is
+wrapped in parentheses. For example, no division will take place here:
+
+ ```less
+ .font {
+ font: 20px/80px "Times New Roman";
+ }
+ ```
+
+In order to force division we must wrap the expression in parentheses:
+
+ ```less
+ .font {
+ font: (20px/80px) "Times New Roman";
+ }
+ ```
+
+If you want to write a literal `/` expression without dividing in another
+property (or a variable), you can use [string unquoting](#string_unquoting):
+
+ ```less
+ .var {
+ @size: ~"20px/80px";
+ font: @size sans-serif;
+ }
+ ```
+
+### Nested Blocks
+
+By nesting blocks we can build up a chain of CSS selectors through scope
+instead of repeating them. In addition to reducing repetition, this also helps
+logically organize the structure of our CSS.
+
+ ```less
+ ol.list {
+ li.special {
+ border: 1px solid red;
+ }
+
+ li.plain {
+ font-weight: bold;
+ }
+ }
+ ```
+
+
+This will produce two blocks, a `ol.list li.special` and `ol.list li.plain`.
+
+Blocks can be nested as deep as required in order to build a hierarchy of
+relationships.
+
+The `&` operator can be used in a selector to represent its parent's selector.
+If the `&` operator is used, then the default action of appending the parent to
+the front of the child selector separated by space is not performed.
+
+ ```less
+ b {
+ a & {
+ color: red;
+ }
+
+ // the following have the same effect
+
+ & i {
+ color: blue;
+ }
+
+ i {
+ color: blue;
+ }
+ }
+ ```
+
+
+Because the `&` operator respects the whitespace around it, we can use it to
+control how the child blocks are joined. Consider the differences between the
+following:
+
+ ```less
+ div {
+ .child-class { color: purple; }
+
+ &.isa-class { color: green; }
+
+ #child-id { height: 200px; }
+
+ &#div-id { height: 400px; }
+
+ &:hover { color: red; }
+
+ :link { color: blue; }
+ }
+ ```
+
+The `&` operator also works with [mixins](#mixins), which produces interesting results:
+
+ ```less
+ .within_box_style() {
+ .box & {
+ color: blue;
+ }
+ }
+
+ #menu {
+ .within_box_style;
+ }
+ ```
+
+### Mixins
+
+Any block can be mixed in just by naming it:
+
+ ```less
+ .mymixin {
+ color: blue;
+ border: 1px solid red;
+
+ .special {
+ font-weight: bold;
+ }
+ }
+
+
+ h1 {
+ font-size: 200px;
+ .mymixin;
+ }
+ ```
+
+All properties and child blocks are mixed in.
+
+Mixins can be made parametric, meaning they can take arguments, in order to
+enhance their utility. A parametric mixin all by itself is not outputted when
+compiled. Its properties will only appear when mixed into another block.
+
+The canonical example is to create a rounded corners mixin that works across
+browsers:
+
+ ```less
+ .rounded-corners(@radius: 5px) {
+ border-radius: @radius;
+ -webkit-border-radius: @radius;
+ -moz-border-radius: @radius;
+ }
+
+ .header {
+ .rounded-corners();
+ }
+
+ .info {
+ background: red;
+ .rounded-corners(14px);
+ }
+ ```
+
+If you have a mixin that doesn't have any arguments, but you don't want it to
+show up in the output, give it a blank argument list:
+
+ ```less
+ .secret() {
+ font-size: 6000px;
+ }
+
+ .div {
+ .secret;
+ }
+ ```
+
+If the mixin doesn't need any arguments, you can leave off the parentheses when
+mixing it in, as seen above.
+
+You can also mixin a block that is nested inside other blocks. You can think of
+the outer block as a way of making a scope for your mixins. You just list the
+names of the mixins separated by spaces, which describes the path to the mixin
+you want to include. Optionally you can separate them by `>`.
+
+ ```less
+ .my_scope {
+ .some_color {
+ color: red;
+ .inner_block {
+ text-decoration: underline;
+ }
+ }
+ .bold {
+ font-weight: bold;
+ color: blue;
+ }
+ }
+
+ .a_block {
+ .my_scope .some_color;
+ .my_scope .some_color .inner_block;
+ }
+
+ .another_block {
+ // the alternative syntax
+ .my_scope > .bold;
+ }
+ ```
+
+
+#### Mixin Arguments
+
+When declaring a mixin you can specify default values for each argument. Any
+argument left out will be given the default value specified. Here's the
+syntax:
+
+```less
+.mix(@color: red, @height: 20px, @pad: 12px) {
+ border: 1px solid @color;
+ height: @height - @pad;
+ padding: @pad;
+}
+
+.default1 {
+ .mix();
+}
+
+.default2 {
+ .mix(blue);
+}
+
+.default3 {
+ .mix(blue, 40px, 5px);
+}
+```
+
+Additionally, you can also call a mixin using the argument names, this is
+useful if you want to replace a specific argument while having all the others
+take the default regardless of what position the argument appears in. The
+syntax looks something like this:
+
+
+```lessbasic
+div {
+ .my_mixin(@paddding: 4px); // @color and @height get default values
+ .my_mixin(@paddding: 4px, @height: 50px); // you can specify them in any order
+}
+```
+
+You can also combine the ordered arguments with the named ones:
+
+```lessbasic
+div {
+ // @color is blue, @padding is 4px, @height is default
+ .my_mixin(blue, @padding: 4px);
+}
+```
+
+Mixin arguments can be delimited with either a `,` or `;`, but only one can be
+active at once. This means that each argument is separated by either `,` or
+`;`. By default `,` is the delimiter, in all the above examples we used a `,`.
+
+A problem arises though, sometimes CSS value lists are made up with commas. In
+order to be able to pass a comma separated list literal we need to use `;` as
+the delimiter. (You don't need to worry about this if your list is stored in a
+variable)
+
+If a `;` appears anywhere in the argument list, then it will be used as the
+argument delimiter, and all commas we be used as part of the argument values.
+
+Here's a basic example:
+
+```less
+.fancy_mixin(@box_shadow, @color: blue) {
+ border: 1px solid @color;
+ box-shadow: @box_shadow;
+}
+
+
+div {
+ // two arguments passed separated by ;
+ .fancy_mixin(2px 2px, -2px -2px; red);
+}
+
+pre {
+ // one argument passed, ends in ;
+ .fancy_mixin(inset 4px 4px, -2px 2px;);
+}
+
+```
+
+If we only want to pass a single comma separated value we still need to use
+`;`, to do this we stick it on the end as demonstrated above.
+
+
+#### `@arguments` Variable
+
+Within an mixin there is a special variable named `@arguments` that contains
+all the arguments passed to the mixin along with any remaining arguments that
+have default values. The value of the variable has all the values separated by
+spaces.
+
+This useful for quickly assigning all the arguments:
+
+ ```less
+ .box-shadow(@x, @y, @blur, @color) {
+ box-shadow: @arguments;
+ -webkit-box-shadow: @arguments;
+ -moz-box-shadow: @arguments;
+ }
+ .menu {
+ .box-shadow(1px, 1px, 5px, #aaa);
+ }
+ ```
+
+In addition to the arguments passed to the mixin, `@arguments` will also include
+remaining default values assigned by the mixin:
+
+
+ ```less
+ .border-mixin(@width, @style: solid, @color: black) {
+ border: @arguments;
+ }
+
+ pre {
+ .border-mixin(4px, dotted);
+ }
+
+ ```
+
+
+#### Pattern Matching
+
+When you *mix in* a mixin, all the available mixins of that name in the current
+scope are checked to see if they match based on what was passed to the mixin
+and how it was declared.
+
+The simplest case is matching by number of arguments. Only the mixins that
+match the number of arguments passed in are used.
+
+ ```less
+ .simple() { // matches no arguments
+ height: 10px;
+ }
+
+ .simple(@a, @b) { // matches two arguments
+ color: red;
+ }
+
+ .simple(@a) { // matches one argument
+ color: blue;
+ }
+
+ div {
+ .simple(10);
+ }
+
+ span {
+ .simple(10, 20);
+ }
+ ```
+
+Whether an argument has default values is also taken into account when matching
+based on number of arguments:
+
+ ```less
+ // matches one or two arguments
+ .hello(@a, @b: blue) {
+ height: @a;
+ color: @b;
+ }
+
+ .hello(@a, @b) { // matches only two
+ width: @a;
+ border-color: @b;
+ }
+
+ .hello(@a) { // matches only one
+ padding: 1em;
+ }
+
+ div {
+ .hello(10px);
+ }
+
+ pre {
+ .hello(10px, yellow);
+ }
+ ```
+
+Additionally, a *vararg* value can be used to further control how things are
+matched. A mixin's argument list can optionally end in the special argument
+named `...`. The `...` may match any number of arguments, including 0.
+
+ ```less
+ // this will match any number of arguments
+ .first(...) {
+ color: blue;
+ }
+
+ // matches at least 1 argument
+ .second(@arg, ...) {
+ height: 200px + @arg;
+ }
+
+ div { .first("some", "args"); }
+ pre { .second(10px); }
+ ```
+
+If you want to capture the values that get captured by the *vararg* you can
+give it a variable name by putting it directly before the `...`. This variable
+must be the last argument defined. It's value is just like the special
+[`@arguments` variable](#arguments_variable), a space separated list.
+
+
+ ```less
+ .hello(@first, @rest...) {
+ color: @first;
+ text-shadow: @rest;
+ }
+
+ span {
+ .hello(red, 1px, 1px, 0px, white);
+ }
+
+ ```
+
+Another way of controlling whether a mixin matches is by specifying a value in
+place of an argument name when declaring the mixin:
+
+ ```less
+ .style(old, @size) {
+ font: @size serif;
+ }
+
+ .style(new, @size) {
+ font: @size sans-serif;
+ }
+
+ .style(@_, @size) {
+ letter-spacing: floor(@size / 6px);
+ }
+
+ em {
+ @switch: old;
+ .style(@switch, 15px);
+ }
+ ```
+
+Notice that two of the three mixins were matched. The mixin with a matching
+first argument, and the generic mixin that matches two arguments. It's common
+to use `@_` as the name of a variable we intend to not use. It has no special
+meaning to LESS, just to the reader of the code.
+
+#### Guards
+
+Another way of restricting when a mixin is mixed in is by using guards. A guard
+is a special expression that is associated with a mixin declaration that is
+evaluated during the mixin process. It must evaluate to true before the mixin
+can be used.
+
+We use the `when` keyword to begin describing a list of guard expressions.
+
+Here's a simple example:
+
+ ```less
+ .guarded(@arg) when (@arg = hello) {
+ color: blue;
+ }
+
+ div {
+ .guarded(hello); // match
+ }
+
+ span {
+ .guarded(world); // no match
+ }
+ ```
+Only the `div`'s mixin will match in this case, because the guard expression
+requires that `@arg` is equal to `hello`.
+
+We can include many different guard expressions by separating them by commas.
+Only one of them needs to match to trigger the mixin:
+
+ ```less
+ .x(@a, @b) when (@a = hello), (@b = world) {
+ width: 960px;
+ }
+
+ div {
+ .x(hello, bar); // match
+ }
+
+ span {
+ .x(foo, world); // match
+ }
+
+ pre {
+ .x(foo, bar); // no match
+ }
+ ```
+
+Instead of a comma, we can use `and` keyword to make it so all of the guards
+must match in order to trigger the mixin. `and` has higher precedence than the
+comma.
+
+ ```less
+ .y(@a, @b) when (@a = hello) and (@b = world) {
+ height: 600px;
+ }
+
+ div {
+ .y(hello, world); // match
+ }
+
+ span {
+ .y(hello, bar); // no match
+ }
+ ```
+
+Commas and `and`s can be mixed and matched.
+
+You can also negate a guard expression by using `not` in from of the parentheses:
+
+ ```less
+ .x(@a) when not (@a = hello) {
+ color: blue;
+ }
+
+ div {
+ .x(hello); // no match
+ }
+ ```
+
+The `=` operator is used to check equality between any two values. For numbers
+the following comparison operators are also defined:
+
+`<`, `>`, `=<`, `>=`
+
+There is also a collection of predicate functions that can be used to test the
+type of a value.
+
+These are `isnumber`, `iscolor`, `iskeyword`, `isstring`, `ispixel`,
+`ispercentage` and `isem`.
+
+ ```less
+ .mix(@a) when (ispercentage(@a)) {
+ height: 500px * @a;
+ }
+ .mix(@a) when (ispixel(@a)) {
+ height: @a;
+ }
+
+ div.a {
+ .mix(50%);
+ }
+
+ div.a {
+ .mix(350px);
+ }
+ ```
+
+#### !important
+
+If you want to apply the `!important` suffix to every property when mixing in a
+mixin, just append `!important` to the end of the call to the mixin:
+
+ ```less
+ .make_bright {
+ color: red;
+ font-weight: bold;
+ }
+
+ .color {
+ color: green;
+ }
+
+ body {
+ .make_bright() !important;
+ .color();
+ }
+
+ ```
+
+### Selector Expressions
+
+Sometimes we want to dynamically generate the selector of a block based on some
+variable or expression. We can do this by using *selector expressions*. Selector
+expressions are CSS selectors that are evaluated in the current scope before
+being written out.
+
+A simple example is a mixin that dynamically creates a selector named after the
+mixin's argument:
+
+ ```less
+ .create-selector(@name) {
+ @{name} {
+ color: red;
+ }
+ }
+
+ .create-selector(hello);
+ .create-selector(world);
+ ```
+
+The string interpolation syntax works inside of selectors, letting you insert varaibles.
+
+Here's an interesting example adapted from Twitter Bootstrap. A couple advanced
+things are going on. We are using [Guards](#guards) along with a recursive
+mixin to work like a loop to generate a series of CSS blocks.
+
+
+ ```less
+ // create our recursive mixin:
+ .spanX (@index) when (@index > 0) {
+ .span@{index} {
+ width: @index * 100px;
+ }
+ .spanX(@index - 1);
+ }
+ .spanX (0) {}
+
+ // mix it into the global scopee:
+ .spanX(4);
+ ```
+
+### Import
+
+Multiple LESS files can be compiled into a single CSS file by using the
+`@import` statement. Be careful, the LESS import statement shares syntax with
+the CSS import statement. If the file being imported ends in a `.less`
+extension, or no extension, then it is treated as a LESS import. Otherwise it
+is left alone and outputted directly:
+
+ ```lessbasic
+ // my_file.less
+ .some-mixin(@height) {
+ height: @height;
+ }
+
+ // main.less
+ @import "main.less" // will import the file if it can be found
+ @import "main.css" // will be left alone
+
+ body {
+ .some-mixin(400px);
+ }
+ ```
+
+All of the following lines are valid ways to import the same file:
+
+ ```lessbasic
+ @import "file";
+ @import 'file.less';
+ @import url("file");
+ @import url('file');
+ @import url(file);
+ ```
+
+When importing, the `importDir` is searched for files. This can be configured,
+see [PHP Interface](#php_interface).
+
+A file is only imported once. If you try to include the same file multiple
+times all the import statements after the first produce no output.
+
+### String Interpolation
+
+String interpolation is a convenient way to insert the value of a variable
+right into a string literal. Given some variable named `@var_name`, you just
+need to write it as `@{var_name}` from within the string to have its value
+inserted:
+
+ ```less
+ @symbol: ">";
+ h1:before {
+ content: "@{symbol}: ";
+ }
+
+ h2:before {
+ content: "@{symbol}@{symbol}: ";
+ }
+ ```
+
+There are two kinds of strings, implicit and explicit strings. Explicit strings
+are wrapped by double quotes, `"hello I am a string"`, or single quotes `'I am
+another string'`. Implicit strings only appear when using `url()`. The text
+between the parentheses is considered a string and thus string interpolation is
+possible:
+
+ ```less
+ @path: "files/";
+ body {
+ background: url(@{path}my_background.png);
+ }
+ ```
+
+### String Format Function
+
+The `%` function can be used to insert values into strings using a *format
+string*. It works similar to `printf` seen in other languages. It has the
+same purpose as string interpolation above, but gives explicit control over
+the output format.
+
+ ```less
+ @symbol: ">";
+ h1:before {
+ content: %("%s: ", @symbol);
+ }
+ ```
+
+The `%` function takes as its first argument the format string, following any
+number of addition arguments that are inserted in place of the format
+directives.
+
+A format directive starts with a `%` and is followed by a single character that
+is either `a`, `d`, or `s`:
+
+ ```less
+ strings: %("%a %d %s %a", hi, 1, 'ok', 'cool');
+ ```
+
+`%a` and `%d` format the value the same way: they compile the argument to its
+CSS value and insert it directly. When used with a string, the quotes are
+included in the output. This typically isn't what we want, so we have the `%s`
+format directive which strips quotes from strings before inserting them.
+
+The `%d` directive functions the same as `%a`, but is typically used for numbers
+assuming the output format of numbers might change in the future.
+
+### String Unquoting
+
+Sometimes you will need to write proprietary CSS syntax that is unable to be
+parsed. As a workaround you can place the code into a string and unquote it.
+Unquoting is the process of outputting a string without its surrounding quotes.
+There are two ways to unquote a string.
+
+The `~` operator in front of a string will unquote that string:
+
+ ```less
+ .class {
+ // a made up, but problematic vendor specific CSS
+ filter: ~"Microsoft.AlphaImage(src='image.png')";
+ }
+ ```
+
+If you are working with other types, such as variables, there is a built in
+function that let's you unquote any value. It is called `e`.
+
+ ```less
+ @color: "red";
+ .class {
+ color: e(@color);
+ }
+ ```
+
+### Built In Functions
+
+**lessphp** has a collection of built in functions:
+
+* `e(str)` -- returns a string without the surrounding quotes.
+ See [String Unquoting](#string_unquoting)
+
+* `floor(number)` -- returns the floor of a numerical input
+* `round(number, [precision])` -- returns the rounded value of numerical input with optional precision
+
+* `lighten(color, percent)` -- lightens `color` by `percent` and returns it
+* `darken(color, percent)` -- darkens `color` by `percent` and returns it
+
+* `saturate(color, percent)` -- saturates `color` by `percent` and returns it
+* `desaturate(color, percent)` -- desaturates `color` by `percent` and returns it
+
+* `fadein(color, percent)` -- makes `color` less transparent by `percent` and returns it
+* `fadeout(color, percent)` -- makes `color` more transparent by `percent` and returns it
+
+* `spin(color, amount)` -- returns a color with `amount` degrees added to hue
+
+* `fade(color, amount)` -- returns a color with the alpha set to `amount`
+
+* `hue(color)` -- returns the hue of `color`
+
+* `saturation(color)` -- returns the saturation of `color`
+
+* `lightness(color)` -- returns the lightness of `color`
+
+* `alpha(color)` -- returns the alpha value of `color` or 1.0 if it doesn't have an alpha
+
+* `percentage(number)` -- converts a floating point number to a percentage, e.g. `0.65` -> `65%`
+
+* `mix(color1, color1, percent)` -- mixes two colors by percentage where 100%
+ keeps all of `color1`, and 0% keeps all of `color2`. Will take into account
+ the alpha of the colors if it exists. See
+ <http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#mix-instance_method>.
+
+* `contrast(color, dark, light)` -- if `color` has a lightness value greater
+ than 50% then `dark` is returned, otherwise return `light`.
+
+* `extract(list, index)` -- returns the `index`th item from `list`. The list is
+ `1` indexed, meaning the first item's index is 1, the second is 2, and etc.
+
+* `pow(base, exp)` -- returns `base` raised to the power of `exp`
+
+* `pi()` -- returns pi
+
+* `mod(a,b)` -- returns `a` modulus `b`
+
+* `tan(a)` -- returns tangent of `a` where `a` is in radians
+
+* `cos(a)` -- returns cosine of `a` where `a` is in radians
+
+* `sin(a)` -- returns sine of `a` where `a` is in radians
+
+* `atan(a)` -- returns arc tangent of `a`
+
+* `acos(a)` -- returns arc cosine of `a`
+
+* `asin(a)` -- returns arc sine of `a`
+
+* `sqrt(a)` -- returns square root of `a`
+
+* `rgbahex(color)` -- returns a string containing 4 part hex color.
+
+ This is used to convert a CSS color into the hex format that IE's filter
+ method expects when working with an alpha component.
+
+ ```less
+ .class {
+ @start: rgbahex(rgba(25, 34, 23, .5));
+ @end: rgbahex(rgba(85, 74, 103, .6));
+ // abridged example
+ -ms-filter:
+ e("gradient(start=@{start},end=@{end})");
+ }
+ ```
+
+## PHP Interface
+
+When working with **lessphp** from PHP, the typical flow is to create a new
+instance of `lessc`, configure it how you like, then tell it to compile
+something using one built in compile methods.
+
+Methods:
+
+* [`compile($string)`](#compiling[) -- Compile a string
+
+* [`compileFile($inFile, [$outFile])`](#compiling) -- Compile a file to another or return it
+
+* [`checkedCompile($inFile, $outFile)`](#compiling) -- Compile a file only if it's newer
+
+* [`cachedCompile($cacheOrFile, [$force])`](#compiling_automatically) -- Conditionally compile while tracking imports
+
+* [`setFormatter($formatterName)`](#output_formatting) -- Change how CSS output looks
+
+* [`setPreserveComments($keepComments)`](#preserving_comments) -- Change if comments are kept in output
+
+* [`registerFunction($name, $callable)`](#custom_functions) -- Add a custom function
+
+* [`unregisterFunction($name)`](#custom_functions) -- Remove a registered function
+
+* [`setVariables($vars)`](#setting_variables_from_php) -- Set a variable from PHP
+
+* [`unsetVariable($name)`](#setting_variables_from_php) -- Remove a PHP variable
+
+* [`setImportDir($dirs)`](#import_directory) -- Set the search path for imports
+
+* [`addImportDir($dir)`](#import_directory) -- Append directory to search path for imports
+
+
+### Compiling
+
+The `compile` method compiles a string of LESS code to CSS.
+
+ ```php
+ <?php
+ require "lessc.inc.php";
+
+ $less = new lessc;
+ echo $less->compile(".block { padding: 3 + 4px }");
+ ```
+
+The `compileFile` method reads and compiles a file. It will either return the
+result or write it to the path specified by an optional second argument.
+
+ ```php
+ echo $less->compileFile("input.less");
+ ```
+
+The `compileChecked` method is like `compileFile`, but it only compiles if the output
+file doesn't exist or it's older than the input file:
+
+ ```php
+ $less->checkedCompile("input.less", "output.css");
+ ```
+
+See [Compiling Automatically](#compiling_automatically) for a description of
+the more advanced `cachedCompile` method.
+
+### Output Formatting
+
+Output formatting controls the indentation of the output CSS. Besides the
+default formatter, two additional ones are included and it's also easy to make
+your own.
+
+To use a formatter, the method `setFormatter` is used. Just
+pass the name of the formatter:
+
+ ```php
+ $less = new lessc;
+
+ $less->setFormatter("compressed");
+ echo $less->compile("div { color: lighten(blue, 10%) }");
+ ```
+
+In this example, the `compressed` formatter is used. The formatters are:
+
+ * `lessjs` *(default)* -- Same style used in LESS for JavaScript
+
+ * `compressed` -- Compresses all the unrequired whitespace
+
+ * `classic` -- **lessphp**'s original formatter
+
+To revert to the default formatter, call `setFormatter` with a value of `null`.
+
+#### Custom Formatter
+
+The easiest way to customize the formatter is to create your own instance of an
+existing formatter and alter its public properties before passing it off to
+**lessphp**. The `setFormatter` method can also take an instance of a
+formatter.
+
+Each of the formatter names corresponds to a class with `lessc_formatter_`
+prepended in front of it. Here the classic formatter is customized to use tabs
+instead of spaces:
+
+
+ ```php
+ $formatter = new lessc_formatter_classic;
+ $formatter->indentChar = "\t";
+
+ $less = new lessc;
+ $less->setFormatter($formatter);
+ echo $less->compileFile("myfile.less");
+ ```
+
+For more information about what can be configured with the formatter consult
+the source code.
+
+### Preserving Comments
+
+By default, all comments in the source LESS file are stripped when compiling.
+You might want to keep the `/* */` comments in the output though. For
+example, bundling a license in the file.
+
+Enable or disable comment preservation by calling `setPreserveComments`:
+
+ ```php
+ $less = new lessc;
+ $less->setPreserveComments(true);
+ echo $less->compile("/* hello! */");
+ ```
+
+Comments are disabled by default because there is additional overhead, and more
+often than not they aren't needed.
+
+
+### Compiling Automatically
+
+Often, you want to only compile a LESS file only if it has been modified since
+last compile. This is very important because compiling is performance intensive
+and you should avoid a recompile if it possible.
+
+The `checkedCompile` compile method will do just that. It will check if the
+input file is newer than the output file, or if the output file doesn't exist
+yet, and compile only then.
+
+ ```php
+ $less->checkedCompile("input.less", "output.css");
+ ```
+
+There's a problem though. `checkedCompile` is very basic, it only checks the
+input file's modification time. It is unaware of any files from `@import`.
+
+
+For this reason we also have `cachedCompile`. It's slightly more complex, but
+gives us the ability to check changes to all files including those imported. It
+takes one argument, either the name of the file we want to compile, or an
+existing *cache object*. Its return value is an updated cache object.
+
+If we don't have a cache object, then we call the function with the name of the
+file to get the initial cache object. If we do have a cache object, then we
+call the function with it. In both cases, an updated cache object is returned.
+
+The cache object keeps track of all the files that must be checked in order to
+determine if a rebuild is required.
+
+The cache object is a plain PHP `array`. It stores the last time it compiled in
+`$cache["updated"]` and output of the compile in `$cache["compiled"]`.
+
+Here we demonstrate creating an new cache object, then using it to see if we
+have a recompiled version available to be written:
+
+
+ ```php
+ $inputFile = "myfile.less";
+ $outputFile = "myfile.css";
+
+ $less = new lessc;
+
+ // create a new cache object, and compile
+ $cache = $less->cachedCompile($inputFile);
+
+ file_put_contents($outputFile, $cache["compiled"]);
+
+ // the next time we run, write only if it has updated
+ $last_updated = $cache["updated"];
+ $cache = $less->cachedCompile($cache);
+ if ($cache["updated"] > $last_updated) {
+ file_put_contents($outputFile, $cache["compiled"]);
+ }
+
+ ```
+
+In order for the system to fully work, we must save cache object between
+requests. Because it's a plain PHP `array`, it's sufficient to
+[`serialize`](http://php.net/serialize) it and save it the string somewhere
+like a file or in persistent memory.
+
+An example with saving cache object to a file:
+
+ ```php
+ function autoCompileLess($inputFile, $outputFile) {
+ // load the cache
+ $cacheFile = $inputFile.".cache";
+
+ if (file_exists($cacheFile)) {
+ $cache = unserialize(file_get_contents($cacheFile));
+ } else {
+ $cache = $inputFile;
+ }
+
+ $less = new lessc;
+ $newCache = $less->cachedCompile($cache);
+
+ if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) {
+ file_put_contents($cacheFile, serialize($newCache));
+ file_put_contents($outputFile, $newCache['compiled']);
+ }
+ }
+
+ autoCompileLess('myfile.less', 'myfile.css');
+ ```
+
+`cachedCompile` method takes an optional second argument, `$force`. Passing in
+true will cause the input to always be recompiled.
+
+### Error Handling
+
+All of the compile methods will throw an `Exception` if the parsing fails or
+there is a compile time error. Compile time errors include things like passing
+incorrectly typed values for functions that expect specific things, like the
+color manipulation functions.
+
+ ```php
+ $less = new lessc;
+ try {
+ $less->compile("} invalid LESS }}}");
+ } catch (Exception $ex) {
+ echo "lessphp fatal error: ".$ex->getMessage();
+ }
+ ```
+### Setting Variables From PHP
+
+Before compiling any code you can set initial LESS variables from PHP. The
+`setVariables` method lets us do this. It takes an associative array of names
+to values. The values must be strings, and will be parsed into correct CSS
+values.
+
+
+ ```php
+ $less = new lessc;
+
+ $less->setVariables(array(
+ "color" => "red",
+ "base" => "960px"
+ ));
+
+ echo $less->compile(".magic { color: @color; width: @base - 200; }");
+ ```
+
+If you need to unset a variable, the `unsetVariable` method is available. It
+takes the name of the variable to unset.
+
+ ```php
+ $less->unsetVariable("color");
+ ```
+
+Be aware that the value of the variable is a string containing a CSS value. So
+if you want to pass a LESS string in, you're going to need two sets of quotes.
+One for PHP and one for LESS.
+
+
+ ```php
+ $less->setVariables(array(
+ "url" => "'http://example.com.com/'"
+ ));
+
+ echo $less->compile("body { background: url("@{url}/bg.png"); }");
+ ```
+
+### Import Directory
+
+When running the `@import` directive, an array of directories called the import
+search path is searched through to find the file being asked for.
+
+By default, when using `compile`, the import search path just contains `""`,
+which is equivalent to the current directory of the script. If `compileFile` is
+used, then the directory of the file being compiled is used as the starting
+import search path.
+
+Two methods are available for configuring the search path.
+
+`setImportDir` will overwrite the search path with its argument. If the value
+isn't an array it will be converted to one.
+
+
+In this example, `@import "colors";` will look for either
+`assets/less/colors.less` or `assets/bootstrap/colors.less` in that order:
+
+ ```php
+ $less->setImportDir(array("assets/less/", "assets/bootstrap"));
+
+ echo $less->compile('@import "colors";');
+ ```
+
+`addImportDir` will append a single path to the import search path instead of
+overwriting the whole thing.
+
+ ```php
+ $less->addImportDir("public/stylesheets");
+ ```
+
+### Custom Functions
+
+**lessphp** has a simple extension interface where you can implement user
+functions that will be exposed in LESS code during the compile. They can be a
+little tricky though because you need to work with the **lessphp** type system.
+
+The two methods we are interested in are `registerFunction` and
+`unregisterFunction`. `registerFunction` takes two arguments, a name and a
+callable value. `unregisterFunction` just takes the name of an existing
+function to remove.
+
+Here's an example that adds a function called `double` that doubles any numeric
+argument:
+
+ ```php
+ <?php
+ include "lessc.inc.php";
+
+ function lessphp_double($arg) {
+ list($type, $value) = $arg;
+ return array($type, $value*2);
+ }
+
+ $less = new lessc;
+ $less->registerFunction("double", "lessphp_double");
+
+ // gives us a width of 800px
+ echo $less->compile("div { width: double(400px); }");
+ ```
+
+The second argument to `registerFunction` is any *callable value* that is
+understood by [`call_user_func`](http://php.net/call_user_func).
+
+If we are using PHP 5.3 or above then we are free to pass a function literal
+like so:
+
+ ```php
+ $less->registerFunction("double", function($arg) {
+ list($type, $value, $unit) = $arg;
+ return array($type, $value*2, $unit);
+ });
+ ```
+
+Now let's talk about the `double` function itself.
+
+Although a little verbose, the implementation gives us some insight on the type
+system. All values in **lessphp** are stored in an array where the 0th element
+is a string representing the type, and the other elements make up the
+associated data for that value.
+
+The best way to get an understanding of the system is to register is dummy
+function which does a `var_dump` on the argument. Try passing the function
+different values from LESS and see what the results are.
+
+The return value of the registered function must also be a **lessphp** type,
+but if it is a string or numeric value, it will automatically be coerced into
+an appropriate typed value. In our example, we reconstruct the value with our
+modifications while making sure that we preserve the original type.
+
+The instance of **lessphp** itself is sent to the registered function as the
+second argument in addition to the arguments array.
+
+## Command Line Interface
+
+**lessphp** comes with a command line script written in PHP that can be used to
+invoke the compiler from the terminal. On Linux and OSX, all you need to do is
+place `plessc` and `lessc.inc.php` somewhere in your PATH (or you can run it in
+the current directory as well). On windows you'll need a copy of `php.exe` to
+run the file. To compile a file, `input.less` to CSS, run:
+
+ ```bash
+ $ plessc input.less
+ ```
+
+To write to a file, redirect standard out:
+
+ ```bash
+ $ plessc input.less > output.css
+ ```
+
+To compile code directly on the command line:
+
+ ```bash
+ $ plessc -r "@color: red; body { color: @color; }"
+ ```
+
+To watch a file for changes, and compile it as needed, use the `-w` flag:
+
+ ```bash
+ $ plessc -w input-file output-file
+ ```
+
+Errors from watch mode are written to standard out.
+
+
+## License
+
+Copyright (c) 2012 Leaf Corcoran, <http://leafo.net/lessphp>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+*Also under GPL3 if required, see `LICENSE` file*
+
diff --git a/includes/libs/lessc.inc.php b/vendor/leafo/lessphp/lessc.inc.php
index 61ed771a..2292f219 100644
--- a/includes/libs/lessc.inc.php
+++ b/vendor/leafo/lessphp/lessc.inc.php
@@ -1,41 +1,13 @@
<?php
-// @codingStandardsIgnoreFile File external to MediaWiki. Ignore coding conventions checks.
+
/**
- * lessphp v0.4.0@2cc77e3c7b
+ * lessphp v0.5.0
* http://leafo.net/lessphp
*
* LESS CSS compiler, adapted from http://lesscss.org
*
- * For ease of distribution, lessphp 0.4.0 is under a dual license.
- * You are free to pick which one suits your needs.
- *
- * MIT LICENSE
- *
* Copyright 2013, Leaf Corcoran <leafot@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * GPL VERSION 3
- *
- * Please refer to http://www.gnu.org/licenses/gpl-3.0.html for the full
- * text of the GPL version 3
+ * Licensed under MIT or GPLv3, see LICENSE
*/
@@ -66,7 +38,7 @@
* handling things like indentation.
*/
class lessc {
- static public $VERSION = "v0.4.0";
+ static public $VERSION = "v0.5.0";
static public $TRUE = array("keyword", "true");
static public $FALSE = array("keyword", "false");
@@ -374,9 +346,9 @@ class lessc {
$other = array_merge($other, $stack);
if ($split) {
- return array(array_merge($vars, $imports), $other);
+ return array(array_merge($imports, $vars), $other);
} else {
- return array_merge($vars, $imports, $other);
+ return array_merge($imports, $vars, $other);
}
}
@@ -1036,7 +1008,7 @@ class lessc {
}
}
- if(!is_null($mime)) // fallback if the MIME type is still unknown
+ if(!is_null($mime)) // fallback if the mime type is still unknown
$url = sprintf('data:%s;base64,%s', $mime, base64_encode(file_get_contents($fullpath)));
}
}
diff --git a/vendor/leafo/lessphp/lessify b/vendor/leafo/lessphp/lessify
new file mode 100644
index 00000000..becc5388
--- /dev/null
+++ b/vendor/leafo/lessphp/lessify
@@ -0,0 +1,23 @@
+#!/usr/bin/php
+<?php
+
+if (php_sapi_name() != "cli") {
+ err($fa.$argv[0]." must be run in the command line.");
+ exit(1);
+}
+$exe = array_shift($argv); // remove filename
+
+if (!$fname = array_shift($argv)) {
+ exit("Usage: ".$exe." input-file\n");
+}
+
+require "lessify.inc.php";
+
+try {
+ $parser = new lessify($fname);
+ echo $parser->parse();
+} catch (exception $e) {
+ exit("Fatal error: ".$e->getMessage()."\n");
+}
+
+
diff --git a/vendor/leafo/lessphp/lessify.inc.php b/vendor/leafo/lessphp/lessify.inc.php
new file mode 100644
index 00000000..91c14423
--- /dev/null
+++ b/vendor/leafo/lessphp/lessify.inc.php
@@ -0,0 +1,447 @@
+<?php
+/**
+ * lessify
+ * Convert a css file into a less file
+ * http://leafo.net/lessphp
+ * Copyright 2010, leaf corcoran <leafot@gmail.com>
+ *
+ * WARNING: THIS DOES NOT WORK ANYMORE. NEEDS TO BE UPDATED FOR
+ * LATEST VERSION OF LESSPHP.
+ *
+ */
+
+require "lessc.inc.php";
+
+//
+// check if the merge during mixin is overwriting values. should or should it not?
+//
+
+//
+// 1. split apart class tags
+//
+
+class easyparse {
+ var $buffer;
+ var $count;
+
+ function __construct($str) {
+ $this->count = 0;
+ $this->buffer = trim($str);
+ }
+
+ function seek($where = null) {
+ if ($where === null) return $this->count;
+ else $this->count = $where;
+ return true;
+ }
+
+ function preg_quote($what) {
+ return preg_quote($what, '/');
+ }
+
+ function match($regex, &$out, $eatWhitespace = true) {
+ $r = '/'.$regex.($eatWhitespace ? '\s*' : '').'/Ais';
+ if (preg_match($r, $this->buffer, $out, null, $this->count)) {
+ $this->count += strlen($out[0]);
+ return true;
+ }
+ return false;
+ }
+
+ function literal($what, $eatWhitespace = true) {
+ // this is here mainly prevent notice from { } string accessor
+ if ($this->count >= strlen($this->buffer)) return false;
+
+ // shortcut on single letter
+ if (!$eatWhitespace and strlen($what) == 1) {
+ if ($this->buffer{$this->count} == $what) {
+ $this->count++;
+ return true;
+ }
+ else return false;
+ }
+
+ return $this->match($this->preg_quote($what), $m, $eatWhitespace);
+ }
+
+}
+
+class tagparse extends easyparse {
+ static private $combinators = null;
+ static private $match_opts = null;
+
+ function parse() {
+ if (empty(self::$combinators)) {
+ self::$combinators = '('.implode('|', array_map(array($this, 'preg_quote'),
+ array('+', '>', '~'))).')';
+ self::$match_opts = '('.implode('|', array_map(array($this, 'preg_quote'),
+ array('=', '~=', '|=', '$=', '*='))).')';
+ }
+
+ // crush whitespace
+ $this->buffer = preg_replace('/\s+/', ' ', $this->buffer).' ';
+
+ $tags = array();
+ while ($this->tag($t)) $tags[] = $t;
+
+ return $tags;
+ }
+
+ static function compileString($string) {
+ list(, $delim, $str) = $string;
+ $str = str_replace($delim, "\\".$delim, $str);
+ $str = str_replace("\n", "\\\n", $str);
+ return $delim.$str.$delim;
+ }
+
+ static function compilePaths($paths) {
+ return implode(', ', array_map(array('self', 'compilePath'), $paths));
+ }
+
+ // array of tags
+ static function compilePath($path) {
+ return implode(' ', array_map(array('self', 'compileTag'), $path));
+ }
+
+
+ static function compileTag($tag) {
+ ob_start();
+ if (isset($tag['comb'])) echo $tag['comb']." ";
+ if (isset($tag['front'])) echo $tag['front'];
+ if (isset($tag['attr'])) {
+ echo '['.$tag['attr'];
+ if (isset($tag['op'])) {
+ echo $tag['op'].$tag['op_value'];
+ }
+ echo ']';
+ }
+ return ob_get_clean();
+ }
+
+ function string(&$out) {
+ $s = $this->seek();
+
+ if ($this->literal('"')) {
+ $delim = '"';
+ } elseif ($this->literal("'")) {
+ $delim = "'";
+ } else {
+ return false;
+ }
+
+ while (true) {
+ // step through letters looking for either end or escape
+ $buff = "";
+ $escapeNext = false;
+ $finished = false;
+ for ($i = $this->count; $i < strlen($this->buffer); $i++) {
+ $char = $this->buffer[$i];
+ switch ($char) {
+ case $delim:
+ if ($escapeNext) {
+ $buff .= $char;
+ $escapeNext = false;
+ break;
+ }
+ $finished = true;
+ break 2;
+ case "\\":
+ if ($escapeNext) {
+ $buff .= $char;
+ $escapeNext = false;
+ } else {
+ $escapeNext = true;
+ }
+ break;
+ case "\n":
+ if (!$escapeNext) {
+ break 3;
+ }
+
+ $buff .= $char;
+ $escapeNext = false;
+ break;
+ default:
+ if ($escapeNext) {
+ $buff .= "\\";
+ $escapeNext = false;
+ }
+ $buff .= $char;
+ }
+ }
+ if (!$finished) break;
+ $out = array('string', $delim, $buff);
+ $this->seek($i+1);
+ return true;
+ }
+
+ $this->seek($s);
+ return false;
+ }
+
+ function tag(&$out) {
+ $s = $this->seek();
+ $tag = array();
+ if ($this->combinator($op)) $tag['comb'] = $op;
+
+ if (!$this->match('(.*?)( |$|\[|'.self::$combinators.')', $match)) {
+ $this->seek($s);
+ return false;
+ }
+
+ if (!empty($match[3])) {
+ // give back combinator
+ $this->count-=strlen($match[3]);
+ }
+
+ if (!empty($match[1])) $tag['front'] = $match[1];
+
+ if ($match[2] == '[') {
+ if ($this->ident($i)) {
+ $tag['attr'] = $i;
+
+ if ($this->match(self::$match_opts, $m) && $this->value($v)) {
+ $tag['op'] = $m[1];
+ $tag['op_value'] = $v;
+ }
+
+ if ($this->literal(']')) {
+ $out = $tag;
+ return true;
+ }
+ }
+ } elseif (isset($tag['front'])) {
+ $out = $tag;
+ return true;
+ }
+
+ $this->seek($s);
+ return false;
+ }
+
+ function ident(&$out) {
+ // [-]?{nmstart}{nmchar}*
+ // nmstart: [_a-z]|{nonascii}|{escape}
+ // nmchar: [_a-z0-9-]|{nonascii}|{escape}
+ if ($this->match('(-?[_a-z][_\w]*)', $m)) {
+ $out = $m[1];
+ return true;
+ }
+ return false;
+ }
+
+ function value(&$out) {
+ if ($this->string($str)) {
+ $out = $this->compileString($str);
+ return true;
+ } elseif ($this->ident($id)) {
+ $out = $id;
+ return true;
+ }
+ return false;
+ }
+
+
+ function combinator(&$op) {
+ if ($this->match(self::$combinators, $m)) {
+ $op = $m[1];
+ return true;
+ }
+ return false;
+ }
+}
+
+class nodecounter {
+ var $count = 0;
+ var $children = array();
+
+ var $name;
+ var $child_blocks;
+ var $the_block;
+
+ function __construct($name) {
+ $this->name = $name;
+ }
+
+ function dump($stack = null) {
+ if (is_null($stack)) $stack = array();
+ $stack[] = $this->getName();
+ echo implode(' -> ', $stack)." ($this->count)\n";
+ foreach ($this->children as $child) {
+ $child->dump($stack);
+ }
+ }
+
+ static function compileProperties($c, $block) {
+ foreach($block as $name => $value) {
+ if ($c->isProperty($name, $value)) {
+ echo $c->compileProperty($name, $value)."\n";
+ }
+ }
+ }
+
+ function compile($c, $path = null) {
+ if (is_null($path)) $path = array();
+ $path[] = $this->name;
+
+ $isVisible = !is_null($this->the_block) || !is_null($this->child_blocks);
+
+ if ($isVisible) {
+ echo $c->indent(implode(' ', $path).' {');
+ $c->indentLevel++;
+ $path = array();
+
+ if ($this->the_block) {
+ $this->compileProperties($c, $this->the_block);
+ }
+
+ if ($this->child_blocks) {
+ foreach ($this->child_blocks as $block) {
+ echo $c->indent(tagparse::compilePaths($block['__tags']).' {');
+ $c->indentLevel++;
+ $this->compileProperties($c, $block);
+ $c->indentLevel--;
+ echo $c->indent('}');
+ }
+ }
+ }
+
+ // compile child nodes
+ foreach($this->children as $node) {
+ $node->compile($c, $path);
+ }
+
+ if ($isVisible) {
+ $c->indentLevel--;
+ echo $c->indent('}');
+ }
+
+ }
+
+ function getName() {
+ if (is_null($this->name)) return "[root]";
+ else return $this->name;
+ }
+
+ function getNode($name) {
+ if (!isset($this->children[$name])) {
+ $this->children[$name] = new nodecounter($name);
+ }
+
+ return $this->children[$name];
+ }
+
+ function findNode($path) {
+ $current = $this;
+ for ($i = 0; $i < count($path); $i++) {
+ $t = tagparse::compileTag($path[$i]);
+ $current = $current->getNode($t);
+ }
+
+ return $current;
+ }
+
+ function addBlock($path, $block) {
+ $node = $this->findNode($path);
+ if (!is_null($node->the_block)) throw new exception("can this happen?");
+
+ unset($block['__tags']);
+ $node->the_block = $block;
+ }
+
+ function addToNode($path, $block) {
+ $node = $this->findNode($path);
+ $node->child_blocks[] = $block;
+ }
+}
+
+/**
+ * create a less file from a css file by combining blocks where appropriate
+ */
+class lessify extends lessc {
+ public function dump() {
+ print_r($this->env);
+ }
+
+ public function parse($str = null) {
+ $this->prepareParser($str ? $str : $this->buffer);
+ while (false !== $this->parseChunk());
+
+ $root = new nodecounter(null);
+
+ // attempt to preserve some of the block order
+ $order = array();
+
+ $visitedTags = array();
+ foreach (end($this->env) as $name => $block) {
+ if (!$this->isBlock($name, $block)) continue;
+ if (isset($visitedTags[$name])) continue;
+
+ foreach ($block['__tags'] as $t) {
+ $visitedTags[$t] = true;
+ }
+
+ // skip those with more than 1
+ if (count($block['__tags']) == 1) {
+ $p = new tagparse(end($block['__tags']));
+ $path = $p->parse();
+ $root->addBlock($path, $block);
+ $order[] = array('compressed', $path, $block);
+ continue;
+ } else {
+ $common = null;
+ $paths = array();
+ foreach ($block['__tags'] as $rawtag) {
+ $p = new tagparse($rawtag);
+ $paths[] = $path = $p->parse();
+ if (is_null($common)) $common = $path;
+ else {
+ $new_common = array();
+ foreach ($path as $tag) {
+ $head = array_shift($common);
+ if ($tag == $head) {
+ $new_common[] = $head;
+ } else break;
+ }
+ $common = $new_common;
+ if (empty($common)) {
+ // nothing in common
+ break;
+ }
+ }
+ }
+
+ if (!empty($common)) {
+ $new_paths = array();
+ foreach ($paths as $p) $new_paths[] = array_slice($p, count($common));
+ $block['__tags'] = $new_paths;
+ $root->addToNode($common, $block);
+ $order[] = array('compressed', $common, $block);
+ continue;
+ }
+
+ }
+
+ $order[] = array('none', $block['__tags'], $block);
+ }
+
+
+ $compressed = $root->children;
+ foreach ($order as $item) {
+ list($type, $tags, $block) = $item;
+ if ($type == 'compressed') {
+ $top = tagparse::compileTag(reset($tags));
+ if (isset($compressed[$top])) {
+ $compressed[$top]->compile($this);
+ unset($compressed[$top]);
+ }
+ } else {
+ echo $this->indent(implode(', ', $tags).' {');
+ $this->indentLevel++;
+ nodecounter::compileProperties($this, $block);
+ $this->indentLevel--;
+ echo $this->indent('}');
+ }
+ }
+ }
+}
diff --git a/vendor/leafo/lessphp/package.sh b/vendor/leafo/lessphp/package.sh
new file mode 100644
index 00000000..f0888f12
--- /dev/null
+++ b/vendor/leafo/lessphp/package.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# creates tar.gz for current version
+
+VERSION=`./plessc -v | sed -n 's/^v\(.*\)$/\1/p'`
+OUT_DIR="tmp/lessphp"
+TMP=`dirname $OUT_DIR`
+
+mkdir -p $OUT_DIR
+tar -c `git ls-files` | tar -C $OUT_DIR -x
+
+rm $OUT_DIR/.gitignore
+rm $OUT_DIR/package.sh
+rm $OUT_DIR/lessify
+rm $OUT_DIR/lessify.inc.php
+
+OUT_NAME="lessphp-$VERSION.tar.gz"
+tar -czf $OUT_NAME -C $TMP lessphp/
+echo "Wrote $OUT_NAME"
+
+rm -r $TMP
+
+
+echo
+echo "Don't forget to"
+echo "* Update the version in lessc.inc.php (two places)"
+echo "* Update the version in the README.md"
+echo "* Update the version in docs.md (two places)"
+echo "* Update the version in LICENSE"
+echo "* Update @current_version in site.moon"
+echo "* Add entry to feed.moon for changelog"
+echo "* Update the -New- area on homepage with date and features"
+echo
+
+
diff --git a/vendor/leafo/lessphp/plessc b/vendor/leafo/lessphp/plessc
new file mode 100644
index 00000000..1871dc77
--- /dev/null
+++ b/vendor/leafo/lessphp/plessc
@@ -0,0 +1,250 @@
+#!/usr/bin/env php
+<?php
+// Command line utility to compile LESS to STDOUT
+// Leaf Corcoran <leafot@gmail.com>, 2013
+
+$exe = array_shift($argv); // remove filename
+
+$HELP = <<<EOT
+Usage: $exe [options] input-file [output-file]
+
+Options include:
+
+ -h, --help Show this message
+ -v Print the version
+ -f=format Set the output format, includes "default", "compressed"
+ -c Keep /* */ comments in output
+ -r Read from STDIN instead of input-file
+ -w Watch input-file, and compile to output-file if it is changed
+ -T Dump formatted parse tree
+ -X Dump raw parse tree
+
+
+EOT;
+
+$opts = getopt('hvrwncXTf:', array('help'));
+while (count($argv) > 0 && preg_match('/^-([-hvrwncXT]$|[f]=)/', $argv[0])) {
+ array_shift($argv);
+}
+
+function has() {
+ global $opts;
+ foreach (func_get_args() as $arg) {
+ if (isset($opts[$arg])) return true;
+ }
+ return false;
+}
+
+if (has("h", "help")) {
+ exit($HELP);
+}
+
+error_reporting(E_ALL);
+$path = realpath(dirname(__FILE__)).'/';
+
+require $path."lessc.inc.php";
+
+$VERSION = lessc::$VERSION;
+
+$fa = "Fatal Error: ";
+function err($msg) {
+ fwrite(STDERR, $msg."\n");
+}
+
+if (php_sapi_name() != "cli") {
+ err($fa.$argv[0]." must be run in the command line.");
+ exit(1);
+}
+
+function make_less($fname = null) {
+ global $opts;
+ $l = new lessc($fname);
+
+ if (has("f")) {
+ $format = $opts["f"];
+ if ($format != "default") $l->setFormatter($format);
+ }
+
+ if (has("c")) {
+ $l->setPreserveComments(true);
+ }
+
+ return $l;
+}
+
+function process($data, $import = null) {
+ global $fa;
+
+ $l = make_less();
+ if ($import) $l->importDir = $import;
+
+ try {
+ echo $l->parse($data);
+ exit(0);
+ } catch (exception $ex) {
+ err($fa."\n".str_repeat('=', 20)."\n".
+ $ex->getMessage());
+ exit(1);
+ }
+}
+
+if (has("v")) {
+ exit($VERSION."\n");
+}
+
+if (has("r")) {
+ if (!empty($argv)) {
+ $data = $argv[0];
+ } else {
+ $data = "";
+ while (!feof(STDIN)) {
+ $data .= fread(STDIN, 8192);
+ }
+ }
+ exit(process($data));
+}
+
+if (has("w")) {
+ // need two files
+ if (!is_file($in = array_shift($argv)) ||
+ null == $out = array_shift($argv))
+ {
+ err($fa.$exe." -w infile outfile");
+ exit(1);
+ }
+
+ echo "Watching ".$in.
+ (has("n") ? ' with notifications' : '').
+ ", press Ctrl + c to exit.\n";
+
+ $cache = $in;
+ $last_action = 0;
+ while (true) {
+ clearstatcache();
+
+ // check if anything has changed since last fail
+ $updated = false;
+ if (is_array($cache)) {
+ foreach ($cache['files'] as $fname=>$_) {
+ if (filemtime($fname) > $last_action) {
+ $updated = true;
+ break;
+ }
+ }
+ } else $updated = true;
+
+ // try to compile it
+ if ($updated) {
+ $last_action = time();
+
+ try {
+ $cache = lessc::cexecute($cache);
+ echo "Writing updated file: ".$out."\n";
+ if (!file_put_contents($out, $cache['compiled'])) {
+ err($fa."Could not write to file ".$out);
+ exit(1);
+ }
+ } catch (exception $ex) {
+ echo "\nFatal Error:\n".str_repeat('=', 20)."\n".
+ $ex->getMessage()."\n\n";
+
+ if (has("n")) {
+ `notify-send -u critical "compile failed" "{$ex->getMessage()}"`;
+ }
+ }
+ }
+
+ sleep(1);
+ }
+ exit(0);
+}
+
+if (!$fname = array_shift($argv)) {
+ echo $HELP;
+ exit(1);
+}
+
+function dumpValue($node, $depth = 0) {
+ if (is_object($node)) {
+ $indent = str_repeat(" ", $depth);
+ $out = array();
+ foreach ($node->props as $prop) {
+ $out[] = $indent . dumpValue($prop, $depth + 1);
+ }
+ $out = implode("\n", $out);
+ if (!empty($node->tags)) {
+ $out = "+ ".implode(", ", $node->tags)."\n".$out;
+ }
+ return $out;
+ } elseif (is_array($node)) {
+ if (empty($node)) return "[]";
+ $type = $node[0];
+ if ($type == "block")
+ return dumpValue($node[1], $depth);
+
+ $out = array();
+ foreach ($node as $value) {
+ $out[] = dumpValue($value, $depth);
+ }
+ return "{ ".implode(", ", $out)." }";
+ } else {
+ if (is_string($node) && preg_match("/[\s,]/", $node)) {
+ return '"'.$node.'"';
+ }
+ return $node; // normal value
+ }
+}
+
+
+function stripValue($o, $toStrip) {
+ if (is_array($o) || is_object($o)) {
+ $isObject = is_object($o);
+ $o = (array)$o;
+ foreach ($toStrip as $removeKey) {
+ if (!empty($o[$removeKey])) {
+ $o[$removeKey] = "*stripped*";
+ }
+ }
+
+ foreach ($o as $k => $v) {
+ $o[$k] = stripValue($v, $toStrip);
+ }
+
+ if ($isObject) {
+ $o = (object)$o;
+ }
+ }
+
+ return $o;
+}
+
+function dumpWithoutParent($o, $alsoStrip=array()) {
+ $toStrip = array_merge(array("parent"), $alsoStrip);
+ print_r(stripValue($o, $toStrip));
+}
+
+try {
+ $less = make_less($fname);
+ if (has("T", "X")) {
+ $parser = new lessc_parser($less, $fname);
+ $tree = $parser->parse(file_get_contents($fname));
+ if (has("X"))
+ $out = print_r($tree, 1);
+ else
+ $out = dumpValue($tree)."\n";
+ } else {
+ $out = $less->parse();
+ }
+
+ if (!$fout = array_shift($argv)) {
+ echo $out;
+ } else {
+ file_put_contents($fout, $out);
+ }
+
+} catch (exception $ex) {
+ err($fa.$ex->getMessage());
+ exit(1);
+}
+
+?>
diff --git a/vendor/leafo/lessphp/tests/ApiTest.php b/vendor/leafo/lessphp/tests/ApiTest.php
new file mode 100644
index 00000000..fe1bbffa
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/ApiTest.php
@@ -0,0 +1,196 @@
+<?php
+
+require_once __DIR__ . "/../lessc.inc.php";
+
+class ApiTest extends PHPUnit_Framework_TestCase {
+ public function setUp() {
+ $this->less = new lessc();
+ $this->less->importDir = array(__DIR__ . "/inputs/test-imports");
+ }
+
+ public function testPreserveComments() {
+ $input = <<<EOD
+// what is going on?
+
+/** what the heck **/
+
+/**
+
+Here is a block comment
+
+**/
+
+
+// this is a comment
+
+/*hello*/div /*yeah*/ { //surew
+ border: 1px solid red; // world
+ /* comment above the first occurrence of a duplicated rule */
+ color: url('http://mage-page.com');
+ string: "hello /* this is not a comment */";
+ world: "// neither is this";
+ /* comment above the second occurrence of a duplicated rule */
+ color: url('http://mage-page.com');
+ string: 'hello /* this is not a comment */' /*what if this is a comment */;
+ world: '// neither is this' // hell world;
+ ;
+ /* duplicate comments are retained */
+ /* duplicate comments are retained */
+ what-ever: 100px;
+ background: url(/*this is not a comment?*/); // uhh what happens here
+}
+EOD;
+
+
+ $outputWithComments = <<<EOD
+/** what the heck **/
+/**
+
+Here is a block comment
+
+**/
+/*hello*/
+/*yeah*/
+div /*yeah*/ {
+ border: 1px solid red;
+ /* comment above the first occurrence of a duplicated rule */
+ /* comment above the second occurrence of a duplicated rule */
+ color: url('http://mage-page.com');
+ string: "hello /* this is not a comment */";
+ world: "// neither is this";
+ /*what if this is a comment */
+ string: 'hello /* this is not a comment */';
+ world: '// neither is this';
+ /* duplicate comments are retained */
+ /* duplicate comments are retained */
+ what-ever: 100px;
+ /*this is not a comment?*/
+ background: url();
+}
+EOD;
+
+ $outputWithoutComments = <<<EOD
+div {
+ border: 1px solid red;
+ color: url('http://mage-page.com');
+ string: "hello /* this is not a comment */";
+ world: "// neither is this";
+ string: 'hello /* this is not a comment */';
+ world: '// neither is this';
+ what-ever: 100px;
+ background: url(/*this is not a comment?*/);
+}
+EOD;
+
+ $this->assertEquals($this->compile($input), trim($outputWithoutComments));
+ $this->less->setPreserveComments(true);
+ $this->assertEquals($this->compile($input), trim($outputWithComments));
+ }
+
+ public function testOldInterface() {
+ $this->less = new lessc(__DIR__ . "/inputs/hi.less");
+ $out = $this->less->parse(array("hello" => "10px"));
+ $this->assertEquals(trim($out), trim('
+div:before {
+ content: "hi!";
+}'));
+
+ }
+
+ public function testInjectVars() {
+ $out = $this->less->parse(".magic { color: @color; width: @base - 200; }",
+ array(
+ 'color' => 'red',
+ 'base' => '960px'
+ ));
+
+ $this->assertEquals(trim($out), trim("
+.magic {
+ color: red;
+ width: 760px;
+}"));
+
+ }
+
+ public function testDisableImport() {
+ $this->less->importDisabled = true;
+ $this->assertEquals(
+ "/* import disabled */",
+ $this->compile("@import 'file3';"));
+ }
+
+ public function testUserFunction() {
+ $this->less->registerFunction("add-two", function($list) {
+ list($a, $b) = $list[2];
+ return $a[1] + $b[1];
+ });
+
+ $this->assertEquals(
+ $this->compile("result: add-two(10, 20);"),
+ "result: 30;");
+
+ return $this->less;
+ }
+
+ /**
+ * @depends testUserFunction
+ */
+ public function testUnregisterFunction($less) {
+ $less->unregisterFunction("add-two");
+
+ $this->assertEquals(
+ $this->compile("result: add-two(10, 20);"),
+ "result: add-two(10,20);");
+ }
+
+
+
+ public function testFormatters() {
+ $src = "
+ div, pre {
+ color: blue;
+ span, .big, hello.world {
+ height: 20px;
+ color:#ffffff + #000;
+ }
+ }";
+
+ $this->less->setFormatter("compressed");
+ $this->assertEquals(
+ $this->compile($src), "div,pre{color:blue;}div span,div .big,div hello.world,pre span,pre .big,pre hello.world{height:20px;color:#fff;}");
+
+ // TODO: fix the output order of tags
+ $this->less->setFormatter("lessjs");
+ $this->assertEquals(
+ $this->compile($src),
+"div,
+pre {
+ color: blue;
+}
+div span,
+div .big,
+div hello.world,
+pre span,
+pre .big,
+pre hello.world {
+ height: 20px;
+ color: #ffffff;
+}");
+
+ $this->less->setFormatter("classic");
+ $this->assertEquals(
+ $this->compile($src),
+trim("div, pre { color:blue; }
+div span, div .big, div hello.world, pre span, pre .big, pre hello.world {
+ height:20px;
+ color:#ffffff;
+}
+"));
+
+ }
+
+ public function compile($str) {
+ return trim($this->less->parse($str));
+ }
+
+}
diff --git a/vendor/leafo/lessphp/tests/ErrorHandlingTest.php b/vendor/leafo/lessphp/tests/ErrorHandlingTest.php
new file mode 100644
index 00000000..de02f065
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/ErrorHandlingTest.php
@@ -0,0 +1,81 @@
+<?php
+require_once __DIR__ . "/../lessc.inc.php";
+
+class ErrorHandlingTest extends PHPUnit_Framework_TestCase {
+ public function setUp() {
+ $this->less = new lessc();
+ }
+
+ public function compile() {
+ $source = join("\n", func_get_args());
+ return $this->less->compile($source);
+ }
+
+ /**
+ * @expectedException Exception
+ * @expectedExceptionMessage .parametric-mixin is undefined
+ */
+ public function testRequiredParametersMissing() {
+ $this->compile(
+ '.parametric-mixin (@a, @b) { a: @a; b: @b; }',
+ '.selector { .parametric-mixin(12px); }'
+ );
+ }
+
+ /**
+ * @expectedException Exception
+ * @expectedExceptionMessage .parametric-mixin is undefined
+ */
+ public function testTooManyParameters() {
+ $this->compile(
+ '.parametric-mixin (@a, @b) { a: @a; b: @b; }',
+ '.selector { .parametric-mixin(12px, 13px, 14px); }'
+ );
+ }
+
+ /**
+ * @expectedException Exception
+ * @expectedExceptionMessage unrecognised input
+ */
+ public function testRequiredArgumentsMissing() {
+ $this->compile('.selector { rule: e(); }');
+ }
+
+ /**
+ * @expectedException Exception
+ * @expectedExceptionMessage variable @missing is undefined
+ */
+ public function testVariableMissing() {
+ $this->compile('.selector { rule: @missing; }');
+ }
+
+ /**
+ * @expectedException Exception
+ * @expectedExceptionMessage .missing-mixin is undefined
+ */
+ public function testMixinMissing() {
+ $this->compile('.selector { .missing-mixin; }');
+ }
+
+ /**
+ * @expectedException Exception
+ * @expectedExceptionMessage .flipped is undefined
+ */
+ public function testGuardUnmatchedValue() {
+ $this->compile(
+ '.flipped(@x) when (@x =< 10) { rule: value; }',
+ '.selector { .flipped(12); }'
+ );
+ }
+
+ /**
+ * @expectedException Exception
+ * @expectedExceptionMessage .colors-only is undefined
+ */
+ public function testGuardUnmatchedType() {
+ $this->compile(
+ '.colors-only(@x) when (iscolor(@x)) { rule: value; }',
+ '.selector { .colors-only("string value"); }'
+ );
+ }
+}
diff --git a/vendor/leafo/lessphp/tests/InputTest.php b/vendor/leafo/lessphp/tests/InputTest.php
new file mode 100644
index 00000000..32db95bc
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/InputTest.php
@@ -0,0 +1,89 @@
+<?php
+
+require_once __DIR__ . "/../lessc.inc.php";
+
+// Runs all the tests in inputs/ and compares their output to ouputs/
+
+function _dump($value) {
+ fwrite(STDOUT, print_r($value, true));
+}
+
+function _quote($str) {
+ return preg_quote($str, "/");
+}
+
+class InputTest extends PHPUnit_Framework_TestCase {
+ protected static $importDirs = array("inputs/test-imports");
+
+ protected static $testDirs = array(
+ "inputs" => "outputs",
+ "inputs_lessjs" => "outputs_lessjs",
+ );
+
+ public function setUp() {
+ $this->less = new lessc();
+ $this->less->importDir = array_map(function($path) {
+ return __DIR__ . "/" . $path;
+ }, self::$importDirs);
+ }
+
+ /**
+ * @dataProvider fileNameProvider
+ */
+ public function testInputFile($inFname) {
+ if ($pattern = getenv("BUILD")) {
+ return $this->buildInput($inFname);
+ }
+
+ $outFname = self::outputNameFor($inFname);
+
+ if (!is_readable($outFname)) {
+ $this->fail("$outFname is missing, ".
+ "consider building tests with BUILD=true");
+ }
+
+ $input = file_get_contents($inFname);
+ $output = file_get_contents($outFname);
+
+ $this->assertEquals($output, $this->less->parse($input));
+ }
+
+ public function fileNameProvider() {
+ return array_map(function($a) { return array($a); },
+ self::findInputNames());
+ }
+
+ // only run when env is set
+ public function buildInput($inFname) {
+ $css = $this->less->parse(file_get_contents($inFname));
+ file_put_contents(self::outputNameFor($inFname), $css);
+ }
+
+ static public function findInputNames($pattern="*.less") {
+ $files = array();
+ foreach (self::$testDirs as $inputDir => $outputDir) {
+ $files = array_merge($files, glob(__DIR__ . "/" . $inputDir . "/" . $pattern));
+ }
+
+ return array_filter($files, "is_file");
+ }
+
+ static public function outputNameFor($input) {
+ $front = _quote(__DIR__ . "/");
+ $out = preg_replace("/^$front/", "", $input);
+
+ foreach (self::$testDirs as $inputDir => $outputDir) {
+ $in = _quote($inputDir . "/");
+ $rewritten = preg_replace("/$in/", $outputDir . "/", $out);
+ if ($rewritten != $out) {
+ $out = $rewritten;
+ break;
+ }
+ }
+
+ $out = preg_replace("/.less$/", ".css", $out);
+
+ return __DIR__ . "/" . $out;
+ }
+}
+
diff --git a/vendor/leafo/lessphp/tests/README.md b/vendor/leafo/lessphp/tests/README.md
new file mode 100644
index 00000000..85a75c05
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/README.md
@@ -0,0 +1,24 @@
+lessphp uses [phpunit](https://github.com/sebastianbergmann/phpunit/) for its tests
+
+* `InputTest.php` iterates through all the less files in `inputs/`, compiles
+ them, then compares the result with the respective file in `outputs/`.
+
+* `ApiTest.php` tests the behavior of lessphp's public API methods.
+
+* `ErrorHandlingTest.php` tests that lessphp throws appropriate errors when
+ given invalid LESS as input.
+
+From the root you can run `make` to run all the tests.
+
+## lessjs tests
+
+Tests found in `inputs_lessjs` are extracted directly from
+[less.js](https://github.com/less/less.js). The following license applies to
+those tests: https://github.com/less/less.js/blob/master/LICENSE
+
+## bootstrap.sh
+
+Clones twitter bootsrap, compiles it with lessc and lessphp, cleans up results
+with sort.php, and outputs diff. To run it, you need to have git and lessc
+installed.
+
diff --git a/vendor/leafo/lessphp/tests/bootstrap.sh b/vendor/leafo/lessphp/tests/bootstrap.sh
new file mode 100644
index 00000000..18a90e87
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/bootstrap.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+echo "This script clones Twitter Bootstrap, compiles it with lessc and lessphp,"
+echo "cleans up results with sort.php, and outputs diff. To run it, you need to"
+echo "have git and lessc installed."
+echo ""
+
+if [ -z "$input" ]; then
+ input="bootstrap/less/bootstrap.less"
+fi
+dest=$(basename "$input")
+dest="${dest%.*}"
+
+if [ -z "$@" ]; then
+ diff_tool="diff -b -u -t -B"
+else
+ diff_tool=$@
+fi
+
+mkdir -p tmp
+
+if [ ! -d 'bootstrap/' ]; then
+ echo ">> Cloning bootstrap to bootstrap/"
+ git clone https://github.com/twbs/bootstrap
+fi
+
+echo ">> lessc compilation ($input)"
+lessc "$input" "tmp/$dest.lessc.css"
+
+echo ">> lessphp compilation ($input)"
+../plessc "$input" "tmp/$dest.lessphp.css"
+echo ">> Cleanup and convert"
+
+php sort.php "tmp/$dest.lessc.css" > "tmp/$dest.lessc.clean.css"
+php sort.php "tmp/$dest.lessphp.css" > "tmp/$dest.lessphp.clean.css"
+
+echo ">> Doing diff"
+$diff_tool "tmp/$dest.lessc.clean.css" "tmp/$dest.lessphp.clean.css"
diff --git a/vendor/leafo/lessphp/tests/inputs/accessors.less.disable b/vendor/leafo/lessphp/tests/inputs/accessors.less.disable
new file mode 100644
index 00000000..2990faab
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/accessors.less.disable
@@ -0,0 +1,36 @@
+/* accessors */
+
+#defaults {
+ @width: 960px;
+ @color: black;
+ .something {
+ @space: 10px;
+ @hello {
+ color: green;
+ }
+ }
+}
+
+.article { color: #294366; }
+
+.comment {
+ width: #defaults[@width];
+ color: .article['color'];
+ padding: #defaults > .something[@space];
+}
+
+.wow {
+ height: .comment['width'];
+ background-color: .comment['color'];
+ color: #defaults > .something > @hello['color'];
+
+ padding: #defaults > non-existant['padding'];
+ margin: #defaults > .something['non-existant'];
+}
+
+.mix {
+ #defaults;
+ font-size: .something[@space];
+}
+
+
diff --git a/vendor/leafo/lessphp/tests/inputs/arity.less b/vendor/leafo/lessphp/tests/inputs/arity.less
new file mode 100644
index 00000000..9998fd4a
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/arity.less
@@ -0,0 +1,77 @@
+
+// simple arity
+
+.hello(@a) {
+ hello: one;
+}
+
+.hello(@a, @b) {
+ hello: two;
+}
+
+.hello(@a, @b, @c) {
+ hello: three;
+}
+
+
+.world(@a, @b, @c) {
+ world: three;
+}
+
+.world(@a, @b) {
+ world: two;
+}
+
+.world(@a) {
+ world: one;
+}
+
+.one {
+ .hello(1);
+ .world(1);
+}
+
+.two {
+ .hello(1, 1);
+ .world(1, 1);
+}
+
+.three {
+ .hello(1, 1, 1);
+ .world(1, 1, 1);
+}
+
+
+// arity with default values
+
+.foo(@a, @b: cool) {
+ foo: two @b;
+}
+
+.foo(@a, @b: cool, @c: yeah) {
+ foo: three @b @c;
+}
+
+
+.baz(@a, @b, @c: yeah) {
+ baz: three @c;
+}
+
+.baz(@a, @b: cool) {
+ baz: two @b;
+}
+
+
+.multi-foo {
+ .foo(1);
+ .foo(1, 1);
+ .foo(1,1,1);
+}
+
+.multi-baz {
+ .baz(1);
+ .baz(1, 1);
+ .baz(1,1,1);
+}
+
+
diff --git a/vendor/leafo/lessphp/tests/inputs/attributes.less b/vendor/leafo/lessphp/tests/inputs/attributes.less
new file mode 100644
index 00000000..7ede4fc4
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/attributes.less
@@ -0,0 +1,41 @@
+* { color: blue; }
+E { color: blue; }
+E[foo] { color: blue; }
+[foo] { color: blue; }
+[foo] .helloWorld { color: blue; }
+[foo].helloWorld { color: blue; }
+E[foo="barbar"] { color: blue; }
+E[foo~="hello#$@%@$#^"] { color: blue; }
+E[foo^="color: green;"] { color: blue; }
+E[foo$="239023"] { color: blue; }
+E[foo*="29302"] { color: blue; }
+E[foo|="239032"] { color: blue; }
+E:root { color: blue; }
+
+E:nth-child(odd) { color: blue; }
+E:nth-child(2n+1) { color: blue; }
+E:nth-child(5) { color: blue; }
+E:nth-last-child(-n+2) { color: blue; }
+E:nth-of-type(2n) { color: blue; }
+E:nth-last-of-type(n) { color: blue; }
+
+E:first-child { color: blue; }
+E:last-child { color: blue; }
+E:first-of-type { color: blue; }
+E:last-of-type { color: blue; }
+E:only-child { color: blue; }
+E:only-of-type { color: blue; }
+E:empty { color: blue; }
+
+E:lang(en) { color: blue; }
+E::first-line { color: blue; }
+E::before { color: blue; }
+
+E#id { color: blue; }
+E:not(:link) { color: blue; }
+
+E F { color: blue; }
+E > F { color: blue; }
+E + F { color: blue; }
+E ~ F { color: blue; }
+
diff --git a/vendor/leafo/lessphp/tests/inputs/builtins.less b/vendor/leafo/lessphp/tests/inputs/builtins.less
new file mode 100644
index 00000000..f9301e04
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/builtins.less
@@ -0,0 +1,96 @@
+// builtin
+
+@something: "hello world";
+@color: #112233;
+@color2: rgba(44,55,66, .6);
+
+body {
+ color: @something;
+
+ @num: 7 / 6;
+ num-basic: @num + 4;
+ num-floor: floor(@num) + 4px;
+ num-ceil: ceil(@num) + 4px;
+
+ @num2: 2 / 3;
+ num2: @num2;
+ num2-round: round(@num2);
+ num2-floor: floor(@num2);
+ num2-ceil: ceil(@num2);
+
+ round-lit: round(10px / 3);
+
+ rgba1: rgbahex(@color);
+ rgba2: rgbahex(@color2);
+ argb: argb(@color2);
+}
+
+
+format {
+ @r: 32;
+ format: %("rgb(%d, %d, %d)", @r, 128, 64);
+ format-string: %("hello %s", "world");
+ format-multiple: %("hello %s %d", "earth", 2);
+ format-url-encode: %('red is %A', #ff0000);
+ eformat: e(%("rgb(%d, %d, %d)", @r, 128, 64));
+}
+
+
+#functions {
+ str1: isstring("hello");
+ str2: isstring(one, two);
+
+ num1: isnumber(2323px);
+ num2: isnumber(2323);
+ num3: isnumber(4/5);
+ num4: isnumber("hello");
+
+ col1: iscolor(red);
+ col2: iscolor(hello);
+ col3: iscolor(rgba(0,0,0,0.3));
+ col4: iscolor(#fff);
+
+ key1: iskeyword(hello);
+ key2: iskeyword(3D);
+
+ px1: ispixel(10px);
+ px2: ispixel(10);
+
+ per1: ispercentage(10%);
+ per2: ispercentage(10);
+
+ em1: isem(10em);
+ em2: isem(10);
+
+ ex1: extract(1 2 3 4, 2);
+ ex2: extract(1 2, 1);
+ ex3: extract(1, 1);
+
+ @list: 1,2,3,4;
+
+ ex4: extract(@list, 2);
+
+ pow: pow(2,4);
+ pi: pi();
+ mod: mod(14,10);
+
+ tan: tan(1);
+ cos: cos(1);
+ sin: sin(1);
+
+ atan: atan(1);
+ acos: acos(1);
+ asin: asin(1);
+
+ sqrt: sqrt(8);
+}
+
+
+#unit {
+ @unit: "em";
+ unit-lit: unit(10px);
+ unit-arg: unit(10px, "s");
+ unit-arg2: unit(10px, @unit);
+ unit-math: unit(0.07407s) * 100%;
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/colors.less b/vendor/leafo/lessphp/tests/inputs/colors.less
new file mode 100644
index 00000000..7fd47a3c
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/colors.less
@@ -0,0 +1,154 @@
+
+body {
+ color:rgb(red(#f00), red(#0F0), red(#00f));
+ color:rgb(red(#f00), green(#0F0), blue(#00f));
+ color:rgb(red(#0ff), green(#f0f), blue(#ff0));
+
+ color: hsl(34, 50%, 40%);
+ color: hsla(34, 50%, 40%, 0.3);
+
+ lighten1: lighten(#efefef, 10%);
+ lighten2: lighten(rgb(23, 53, 231), 22%);
+ lighten3: lighten(rgba(212, 103, 88, 0.5), 10%);
+
+ darken1: darken(#efefef, 10%);
+ darken2: darken(rgb(23, 53, 231), 22%);
+ darken3: darken(rgba(23, 53, 231, 0.5), 10%);
+
+ saturate1: saturate(#efefef, 10%);
+ saturate2: saturate(rgb(23, 53, 231), 22%);
+ saturate3: saturate(rgba(23, 53, 231, 0.5), 10%);
+
+ desaturate1: desaturate(#efefef, 10%);
+ desaturate2: desaturate(rgb(23, 53, 231), 22%);
+ desaturate3: desaturate(rgba(23, 53, 231, 0.5), 10%);
+
+ spin1: spin(#efefef, 12);
+ spin2: spin(rgb(23, 53, 231), 15);
+ spin3: spin(rgba(23, 53, 231, 0.5), 19);
+
+ spin2: spin(#efefef, -12);
+ spin3: spin(rgb(23, 53, 231), -15);
+ spin4: spin(rgba(23, 53, 231, 0.5), -19);
+
+ one1: fadein(#abcdef, 10%);
+ one2: fadeout(#abcdef, -10%);
+
+ two1: fadeout(#029f23, 10%);
+ two2: fadein(#029f23, -10%);
+
+
+ three1: fadein(rgba(1,2,3, 0.5), 10%);
+ three2: fadeout(rgba(1,2,3, 0.5), -10%);
+
+ four1: fadeout(rgba(1,2,3, 0), 10%);
+ four2: fadein(rgba(1,2,3, 0), -10%);
+
+ hue: hue(rgb(34,20,40));
+ sat: saturation(rgb(34,20,40));
+ lit: lightness(rgb(34,20,40));
+
+ @old: #34fa03;
+ @new: hsl(hue(@old), 45%, 90%);
+ what: @new;
+
+ zero1: saturate(#123456, -100%);
+ zero2: saturate(#123456, 100%);
+ zero3: saturate(#000000, 100%);
+ zero4: saturate(#ffffff, 100%);
+
+ zero5: lighten(#123456, -100%);
+ zero6: lighten(#123456, 100%);
+ zero7: lighten(#000000, 100%);
+ zero8: lighten(#ffffff, 100%);
+
+ zero9: spin(#123456, -100);
+ zeroa: spin(#123456, 100);
+ zerob: spin(#000000, 100);
+ zeroc: spin(#ffffff, 100);
+}
+
+
+alpha {
+ // g: alpha(red);
+ g1: alpha(rgba(0,0,0,0));
+ g2: alpha(rgb(155,55,0));
+}
+
+fade {
+ f1: fade(red, 50%);
+ f2: fade(#fff, 20%);
+ f3: fade(rgba(34,23,64,0.4), 50%);
+}
+
+@a: rgb(255,255,255);
+@b: rgb(0,0,0);
+
+.mix {
+ color1: mix(@a, @b, 50%);
+ color2: mix(@a, @b);
+ color3: mix(rgba(5,3,1,0.3), rgba(6,3,2, 0.8), 50%);
+}
+
+.contrast {
+ color1: contrast(#000, red, blue);
+ color2: contrast(#fff, red, blue);
+}
+
+.percent {
+ per: percentage(0.5);
+}
+
+// color keywords
+
+.colorz {
+ color1: whitesmoke - 10;
+ color2: spin(red, 34);
+ color3: spin(blah);
+}
+
+
+
+// purposfuly whacky to match less.js
+
+@color: #fcf8e3;
+
+body {
+ start: @color;
+ spin: spin(@color, -10); // #fcf4e3
+ chained: darken(spin(@color, -10), 3%); // gives #fbeed5, should be #fbefd5
+ direct: darken(#fcf4e3, 3%); // #fbefd5
+}
+
+// spin around
+pre {
+ @errorBackground: #f2dede;
+ spin: spin(@errorBackground, -10);
+}
+
+dd {
+ @white: #fff;
+ background-color: mix(@white, darken(@white, 10%), 60%);
+}
+
+// math
+
+.ops {
+ c1: red * 0.3;
+ c2: green / 2;
+ c3: purple % 7;
+ c4: 4 * salmon;
+ c5: 1 + salmon;
+
+ c6: 132 / red;
+ c7: 132 - red;
+ c8: 132- red;
+}
+
+.transparent {
+ r: red(transparent);
+ g: green(transparent);
+ b: blue(transparent);
+ a: alpha(transparent);
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/compile_on_mixin.less b/vendor/leafo/lessphp/tests/inputs/compile_on_mixin.less
new file mode 100644
index 00000000..79d628f4
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/compile_on_mixin.less
@@ -0,0 +1,39 @@
+
+@mixin {
+ height: 22px;
+ ul {
+ height: 20px;
+ li {
+ @color: red;
+ height: 10px;
+ div span, link {
+ margin: 10px;
+ color: @color;
+ }
+ }
+
+ div, p {
+ border: 1px;
+ &.hello {
+ color: green;
+ }
+
+ :what {
+ color: blue;
+ }
+ }
+
+
+ a {
+ b {
+ color: blue;
+ }
+ }
+ }
+}
+
+
+
+body {
+ @mixin;
+}
diff --git a/vendor/leafo/lessphp/tests/inputs/data-uri.less b/vendor/leafo/lessphp/tests/inputs/data-uri.less
new file mode 100644
index 00000000..0cfa941a
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/data-uri.less
@@ -0,0 +1,7 @@
+.small {
+ background: data-uri("../hi.less");
+}
+
+.large {
+ background: data-uri('../../../lessc.inc.php');
+}
diff --git a/vendor/leafo/lessphp/tests/inputs/directives.less b/vendor/leafo/lessphp/tests/inputs/directives.less
new file mode 100644
index 00000000..1b3a9b58
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/directives.less
@@ -0,0 +1,28 @@
+
+@hello: "utf-8";
+@charset @hello;
+
+@-moz-document url-prefix(){
+ div {
+ color: red;
+ }
+}
+
+@page :left { margin-left: 4cm; }
+@page :right { margin-left: 3cm; }
+@page { margin: 2cm }
+
+@-ms-viewport {
+ width: device-width;
+}
+@-moz-viewport {
+ width: device-width;
+}
+@-o-viewport {
+ width: device-width;
+}
+@viewport {
+ width: device-width;
+}
+
+
diff --git a/vendor/leafo/lessphp/tests/inputs/escape.less b/vendor/leafo/lessphp/tests/inputs/escape.less
new file mode 100644
index 00000000..5c15e786
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/escape.less
@@ -0,0 +1,18 @@
+
+body {
+ @hello: "world";
+ e1: e("this is simple");
+ e2: e("this is simple", "cool lad");
+ e3: e(1232);
+ e4: e(@hello);
+ e5: e("one" + 'more');
+
+ t1: ~"eating rice";
+ t2: ~"string cheese";
+ t3: a b c ~"string me" d e f;
+ t4: ~"string @{hello}";
+}
+
+.class {
+ filter: ~"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='image.png')";
+}
diff --git a/vendor/leafo/lessphp/tests/inputs/font_family.less b/vendor/leafo/lessphp/tests/inputs/font_family.less
new file mode 100644
index 00000000..d1dfb72d
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/font_family.less
@@ -0,0 +1,28 @@
+
+@font-directory: 'fonts/';
+@some-family: Gentium;
+
+@font-face: maroon; // won't collide with @font-face { }
+
+@font-face {
+ font-family: Graublau Sans Web;
+ src: url(@{font-directory}GraublauWeb.otf) format("opentype");
+}
+
+@font-face {
+ font-family: @some-family;
+ src: url('@{font-directory}Gentium.ttf');
+}
+
+@font-face {
+ font-family: @some-family;
+ src: url("@{font-directory}GentiumItalic.ttf");
+ font-style: italic;
+}
+
+h2 {
+ font-family: @some-family;
+ crazy: @font-face;
+}
+
+
diff --git a/vendor/leafo/lessphp/tests/inputs/guards.less b/vendor/leafo/lessphp/tests/inputs/guards.less
new file mode 100644
index 00000000..fc4e344e
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/guards.less
@@ -0,0 +1,74 @@
+
+.simple(@hi) when (@hi) {
+ simple: yellow;
+}
+
+
+.something(@hi) when (@hi = cool) {
+ something: red;
+}
+
+.another(@x) when (@x > 10) {
+ another: green;
+}
+
+
+.flipped(@x) when (@x =< 10) {
+ flipped: teal;
+}
+
+.yeah(@arg) when (isnumber(@arg)) {
+ yeah-number: purple @arg;
+}
+
+
+.yeah(@arg) when (ispixel(@arg)) {
+ yeah-pixel: silver;
+}
+
+
+.hello(@arg) when not (@arg) {
+ hello: orange;
+}
+
+dd {
+ .simple(true);
+}
+
+b {
+ .something(cool);
+ .something(birthday);
+}
+
+img {
+ .another(12);
+ .flipped(2);
+}
+
+body {
+ .yeah(232px);
+ .yeah(232);
+}
+
+.something(@x) when (@x) and (@y), not (@x = what) {
+ something-complex: blue @x;
+}
+
+div {
+ @y: true;
+ .something(true);
+
+}
+
+.coloras(@g) when (iscolor(@g)) {
+ color: true @g;
+}
+
+link {
+ .coloras(red);
+ .coloras(#fff);
+ .coloras(#fffddd);
+ .coloras(rgb(0,0,0));
+ .coloras(rgba(0,0,0, .34));
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/hacks.less b/vendor/leafo/lessphp/tests/inputs/hacks.less
new file mode 100644
index 00000000..e69b7bf9
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/hacks.less
@@ -0,0 +1,6 @@
+// css hacks
+
+:root .alert-message, :root .btn {
+ border-radius: 0 \0;
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/hi.less b/vendor/leafo/lessphp/tests/inputs/hi.less
new file mode 100644
index 00000000..9a3d8198
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/hi.less
@@ -0,0 +1,5 @@
+
+div:before {
+ content: "hi!";
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/ie.less b/vendor/leafo/lessphp/tests/inputs/ie.less
new file mode 100644
index 00000000..37a5f1f6
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/ie.less
@@ -0,0 +1,12 @@
+
+foo {
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000000);
+ filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#c0ff3300, endColorstr=#ff000001);
+}
+
+
+foo {
+ filter: alpha(opacity=20);
+ filter: alpha(opacity=20, enabled=true);
+ filter: blaznicate(foo=bar, baz=bang bip, bart=#fa4600);
+}
diff --git a/vendor/leafo/lessphp/tests/inputs/import.less b/vendor/leafo/lessphp/tests/inputs/import.less
new file mode 100644
index 00000000..a5005674
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/import.less
@@ -0,0 +1,56 @@
+
+@import 'file1.less'; // file found and imported
+
+@import "not-found";
+
+@import "something.css" media;
+@import url("something.css") media;
+@import url(something.css) media, screen, print;
+
+@color: maroon;
+
+@import url(file2); // found and imported
+
+body {
+ line-height: 10em;
+ @colors;
+}
+
+div {
+ @color: fuchsia;
+ @import "file2";
+}
+
+
+.mixin-import() {
+ @import "file3";
+}
+
+.one {
+ .mixin-import();
+ color: blue;
+}
+
+.two {
+ .mixin-import();
+}
+
+
+#merge-import-mixins {
+ @import "a";
+ @import "b";
+ div { .just-a-class; }
+}
+
+
+@import "inner/file1";
+
+
+// test bubbling variables up from imports, while preserving order
+
+pre {
+ color: @someValue;
+}
+
+@import "file3";
+
diff --git a/vendor/leafo/lessphp/tests/inputs/interpolation.less b/vendor/leafo/lessphp/tests/inputs/interpolation.less
new file mode 100644
index 00000000..8aad0004
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/interpolation.less
@@ -0,0 +1,47 @@
+
+@cool-hello: "yes";
+@cool-yes: "okay";
+@var: "hello";
+
+div {
+ interp1: ~"@{cool-hello}";
+ interp2: ~"@{cool-@{var}}";
+ interp3: ~"@{cool-@{cool-@{var}}}";
+}
+
+// interpolation in selectors
+
+@hello: 10;
+@world: "yeah";
+
+@{hello}@{world} {
+ color: blue;
+}
+
+@{hello} {
+ color: blue;
+}
+
+hello world @{hello} {
+ color: red;
+}
+
+#@{world} {
+ color: "hello @{hello}";
+}
+
+
+@num: 3;
+
+[prop],
+[prop="value@{num}"],
+[prop*="val@{num}"],
+[|prop~="val@{num}"],
+[*|prop$="val@{num}"],
+[ns|prop^="val@{num}"],
+[@{num}^="val@{num}"],
+[@{num}=@{num}],
+[@{num}] {
+ attributes: yes;
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/keyframes.less b/vendor/leafo/lessphp/tests/inputs/keyframes.less
new file mode 100644
index 00000000..e65a38b9
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/keyframes.less
@@ -0,0 +1,52 @@
+@keyframes 'bounce' {
+ from {
+ top: 100px;
+ animation-timing-function: ease-out;
+ }
+
+ 25% {
+ top: 50px;
+ animation-timing-function: ease-in;
+ }
+
+ 50% {
+ top: 100px;
+ animation-timing-function: ease-out;
+ }
+
+ 75% {
+ top: 75px;
+ animation-timing-function: ease-in;
+ }
+
+ to {
+ top: 100px;
+ }
+}
+
+@-webkit-keyframes flowouttoleft {
+ 0% { -webkit-transform: translateX(0) scale(1); }
+ 60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+ 100% { -webkit-transform: translateX(-100%) scale(.7); }
+}
+
+div {
+ animation-name: 'diagonal-slide';
+ animation-duration: 5s;
+ animation-iteration-count: 10;
+}
+
+@keyframes 'diagonal-slide' {
+
+ from {
+ left: 0;
+ top: 0;
+ }
+
+ to {
+ left: 100px;
+ top: 100px;
+ }
+
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/math.less b/vendor/leafo/lessphp/tests/inputs/math.less
new file mode 100644
index 00000000..db59d356
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/math.less
@@ -0,0 +1,122 @@
+
+.unary {
+ // all operators are parsable as unary operators, anything
+ // but - throws an error right now though,
+
+ // this gives two numbers
+ sub: 10 -5;
+ // add: 10 +5; // error
+ // div: 10 /5; // error
+ // mul: 10 *5; // error
+}
+
+.spaces {
+ // we can make the parser do math by leaving out the
+ // space after the first value, or putting spaces on both sides
+
+ sub1: 10-5;
+ sub2: 10 - 5;
+
+ add1: 10+5;
+ add2: 10 + 5;
+
+ // div: 10/5; // this wont work, read on
+ div: 10 / 5;
+
+ mul1: 10*5;
+ mul2: 10 * 5;
+}
+
+// these properties have divison not in parenthases
+.supress-division {
+ border-radius: 10px / 10px;
+ border-radius: 10px/12px;
+ border-radius: hello (10px/10px) world;
+ @x: 10px;
+ font: @x/30 sans-serif;
+ font: 10px / 20px sans-serif;
+ font: 10px/22px sans-serif;
+ border-radius:0 15px 15px 15px / 0 50% 50% 50%;
+}
+
+
+.parens {
+ // if you are unsure, then just wrap the expression in parentheses and it will
+ // always evaluate.
+
+ // notice we no longer have unary operators, and these will evaluate
+ sub: (10 -5);
+ add: (10 +5);
+ div1: (10 /5);
+ div2: (10/5); // no longer interpreted as the shorthand
+ mul: (10 *5);
+}
+
+.keyword-names {
+ // watch out when doing math with keywords, - is a valid keyword character
+ @a: 100;
+ @b: 25;
+ @a-: "hello";
+ height: @a-@b; // here we get "hello" 25, not 75
+}
+
+
+.negation {
+ neg1: -(1px);
+ neg2: 0-(1px);
+
+ @something: 10;
+ neg3: -@something;
+}
+
+
+// and now here are the tests
+
+.test {
+ single1: (5);
+ single2: 5+(5);
+ single3: (5)+((5));
+
+ parens: (5 +(5)) -2;
+ // parens: ((5 +(5)) -2); // FAILS - fixme
+
+ math1: (5 + 5)*(2 / 1);
+ math2: (5+5)*(2/1);
+
+ complex1: 2 * (4 * (2 + (1 + 6))) - 1;
+ complex2: ((2+3)*(2+3) / (9-4)) + 1;
+ complex3: (2px + 4px) 1em 2px 2;
+
+ @var: (2 * 2);
+ var1: (2 * @var) 4 4 (@var * 1px);
+ var2: (@var * @var) * 6;
+ var3: 4 * (5 + 5) / 2 - (@var * 2);
+
+ complex4: (7 * 7) + (8 * 8);
+}
+
+.percents {
+ p1: 100 * 10%;
+ p2: 10% * 100;
+ p3: 10% * 10%;
+
+ p4: 100px * 10%; // lessjs makes this px
+ p5: 10% * 100px; // lessjs makes this %
+
+ p6: 20% + 10%;
+ p7: 20% - 10%;
+
+ p8: 20% / 10%;
+}
+
+.misc {
+ x: 10px * 4em;
+ y: 10 * 4em;
+}
+
+
+.cond {
+ c1: 10 < 10;
+ c2: 10 >= 10;
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/media.less b/vendor/leafo/lessphp/tests/inputs/media.less
new file mode 100644
index 00000000..8c16a3cf
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/media.less
@@ -0,0 +1,68 @@
+@media screen, 3D {
+ P { color: green; }
+}
+@media print {
+ body { font-size: 10pt }
+}
+@media screen {
+ body { font-size: 13px }
+}
+@media screen, print {
+ body { line-height: 1.2 }
+}
+
+@media all and (min-width: 0px) {
+ body { line-height: 1.2 }
+}
+
+@media all and (min-width: 0) {
+ body { line-height: 1.2 }
+}
+
+@media
+ screen and (min-width: 102.5em) and (max-width: 117.9375em),
+ screen and (min-width: 150em) {
+ body { color: blue }
+}
+
+
+@media screen and (min-height: 100px + 10px) {
+ body { color: red; }
+}
+
+@cool: 100px;
+
+@media screen and (height: @cool) and (width: @cool + 10), (size: @cool + 20) {
+ body { color: red; }
+}
+
+
+// media bubbling
+
+@media test {
+ div {
+ height: 20px;
+ @media (hello) {
+ color: red;
+
+ pre {
+ color: orange;
+ }
+ }
+ }
+}
+
+// should not cross boundary
+@media yeah {
+ @page {
+ @media cool {
+ color: red;
+ }
+ }
+}
+
+// variable in query
+@mobile: ~"(max-width: 599px)";
+@media @mobile {
+ .helloworld { color: blue }
+}
diff --git a/vendor/leafo/lessphp/tests/inputs/misc.less b/vendor/leafo/lessphp/tests/inputs/misc.less
new file mode 100644
index 00000000..eb690b9a
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/misc.less
@@ -0,0 +1,100 @@
+
+@color: #fff;
+@base_path: "/assets/images/";
+@images: @base_path + "test/";
+.topbar { background: url(@{images}topbar.png); }
+.hello { test: empty-function(@images, 40%, to(@color)); }
+
+.css3 {
+ background-image: -webkit-gradient(linear, 0% 0%, 0% 90%,
+ from(#E9A000), to(#A37000));
+}
+
+
+/**
+
+Here is a block comment
+
+**/
+
+
+// this is a comment
+
+.test, /*hello*/.world {
+ border: 1px solid red; // world
+ /* another property */
+ color: url(http://mage-page.com);
+ string: "hello /* this is not a comment */";
+ world: "// neither is this";
+ string: 'hello /* this is not a comment */' /*what if this is a comment */;
+ world: '// neither is this' // hell world;
+ ;
+ what-/*something?*/ever: 100px;
+ background: url(/*no comment here*/);
+}
+
+
+.urls {
+ @var: "http://google.com";
+ background1: url(@var);
+ background2: url(@{var});
+ background3: url("@{var}");
+}
+
+.mix(@arg) { color: @arg; }
+@aaa: aaa;
+@bbb: bbb;
+// make sure the opening selector isn't too greedy
+.cool {.mix("@{aaa}, @{bbb}")}
+.cool();
+
+
+
+// merging of mixins
+.span-17 { float: left; }
+.span-17 { width: 660px; }
+
+.x {.span-17;}
+
+.hi {
+ pre {
+ color: red;
+ }
+}
+
+.hi {
+ pre {
+ color: blue;
+ }
+}
+
+.rad {
+ .hi;
+}
+
+
+hello {
+ numbers: 1.0 0.1 .1 1.;
+ numbers: 1.0s 0.1s .1s 1.s;
+ numbers: -1.0s -0.1s -.1s -1.s;
+ numbers: -1.0 -0.1 -.1 -1.;
+}
+
+
+#string {
+ hello: 'what\'s going on here';
+ hello: 'blah blag @{ blah blah';
+
+ join: 3434 + "hello";
+ join: 3434 + hello;
+}
+
+
+.duplicates {
+ hello: world;
+ hello: "world";
+ hello: world;
+ hello: "what";
+ hello: world;
+ hello: "world";
+}
diff --git a/vendor/leafo/lessphp/tests/inputs/mixin_functions.less b/vendor/leafo/lessphp/tests/inputs/mixin_functions.less
new file mode 100644
index 00000000..2d858ad6
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/mixin_functions.less
@@ -0,0 +1,33 @@
+
+@outer: 10px;
+@class(@var:22px, @car: 400px + @outer) {
+ margin: @var;
+ height: @car;
+}
+
+@group {
+ @f(@color) {
+ color: @color;
+ }
+ .cool {
+ border-bottom: 1px solid green;
+ }
+}
+
+.class(@width:200px) {
+ padding: @width;
+}
+
+body {
+ .class(2.0em);
+ @group > @f(red);
+ @class(10px, 10px + 2);
+ @group > .cool;
+}
+
+
+@lots(@a: 10px, @b: 20px, @c: 30px, @d: 40px, @e: 4px, @f:3px, @g:2px, @h: 1px) {
+ padding: @a @b @c @d;
+ margin: @e @f @g @h;
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/mixin_merging.less.disable b/vendor/leafo/lessphp/tests/inputs/mixin_merging.less.disable
new file mode 100644
index 00000000..86b3e0cb
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/mixin_merging.less.disable
@@ -0,0 +1,100 @@
+
+@tester {
+ p, div { height: 10px; }
+}
+
+#test1 {
+ div { color: red; }
+ @tester;
+}
+
+
+@cool {
+ a,b,i { width: 1px; }
+}
+
+#test2 {
+ b { color: red; }
+ @cool;
+}
+
+#test3 {
+ @cool;
+ b { color: red; }
+}
+
+@cooler {
+ a { margin: 1px; }
+}
+
+#test4 {
+ a, div, html { color: blue; }
+ @cooler;
+}
+
+@hi {
+ img, strong { float: right; }
+}
+
+#test5 {
+ img, strong { padding: 2px; }
+ @hi;
+}
+
+@nested {
+ div, span {
+ a {
+ color: red;
+ }
+ }
+}
+
+#test6 {
+ div, span {
+ a {
+ line-height: 10px;
+ }
+ }
+ @nested;
+}
+
+@broken-nesting {
+ div, span {
+ strong, b {
+ color: red;
+ }
+ }
+
+}
+
+#test7 {
+ div {
+ strong {
+ margin: 1px;
+ }
+ }
+ @broken-nesting;
+}
+
+
+@another-nest {
+ a,b {
+ i {
+ color: red;
+ }
+
+ s {
+ color: blue;
+ }
+ }
+}
+
+#test8 {
+ a, b {
+ i,s {
+ background: red;
+ }
+ }
+ @another-nest;
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/mixins.less b/vendor/leafo/lessphp/tests/inputs/mixins.less
new file mode 100644
index 00000000..768e6384
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/mixins.less
@@ -0,0 +1,197 @@
+
+@rounded-corners {
+ border-radius: 10px;
+}
+
+.bold {
+ @font-size: 20px;
+ font-size: @font-size;
+ font-weight: bold;
+}
+
+body #window {
+ @rounded-corners;
+ .bold;
+ line-height: @font-size * 1.5;
+}
+
+#bundle {
+ .button {
+ display: block;
+ border: 1px solid black;
+ background-color: grey;
+ &:hover { background-color: white }
+ }
+}
+#header a {
+ color: orange;
+ #bundle > .button; // mixin the button class
+}
+
+div {
+ @abstract {
+ hello: world;
+ b {
+ color: blue;
+ }
+ }
+
+ @abstract > b;
+ @abstract;
+}
+
+@poop {
+ big: baby;
+}
+
+body {
+ div;
+}
+
+// not using > to list mixins
+
+.hello {
+ .world {
+ color: blue;
+ }
+}
+
+.foobar {
+ .hello .world;
+}
+
+
+// arguments
+
+.spam(@something: 100, @dad: land) {
+ @wow: 23434;
+ foo: @arguments;
+ bar: @arguments;
+}
+
+.eggs {
+ .spam(1px, 2px);
+ .spam();
+}
+
+.first(@one, @two, @three, @four: cool) {
+ cool: @arguments;
+}
+
+#hello {
+ .first(one, two, three);
+}
+
+#hello-important {
+ .first(one, two, three) !important;
+}
+
+.rad(@name) {
+ cool: @arguments;
+}
+
+#world {
+ @hello: "world";
+ .rad("@{hello}");
+}
+
+.second(@x, @y:skip, @z: me) {
+ things: @arguments;
+}
+
+#another {
+ .second(red, blue, green);
+ .second(red blue green);
+}
+
+
+.another(@x, @y:skip, @z:me) {
+ .cool {
+ color: @arguments;
+ }
+}
+
+#day {
+ .another(one,two, three);
+ .another(one two three);
+}
+
+
+.to-be-important() {
+ color: red;
+ @color: red;
+ height: 20px;
+
+ pre {
+ color: @color;
+ }
+}
+
+.mix-suffix {
+ .to-be-important() !important;
+}
+
+
+
+
+#search-all {
+ .red() {
+ color:#f00 !important;
+ }
+}
+
+#search-all {
+ .green() {
+ color: #0f0 !important;
+ }
+}
+
+.search-test {
+ #search-all > .red();
+ #search-all > .green();
+}
+
+
+// mixin self without infinite loop
+.cowboy() {
+ color: blue;
+}
+
+.cowboy {
+ .cowboy;
+}
+
+
+// semicolon
+
+.semi1(@color: red, blue, green;) {
+ color: @color;
+}
+
+.semi2(@color: red, blue, green; dad) {
+ color: @color;
+}
+
+.semi3(hello; world; piss) {
+ hello: world;
+}
+
+
+
+// self referencing skipping
+
+.nav-divider(@color: red){
+ padding: 10px;
+}
+
+.nav {
+ .nav-divider {
+ .nav-divider();
+ }
+}
+
+.nav-divider {
+ .nav-divider();
+}
+
+
diff --git a/vendor/leafo/lessphp/tests/inputs/nested.less b/vendor/leafo/lessphp/tests/inputs/nested.less
new file mode 100644
index 00000000..0b62ea19
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/nested.less
@@ -0,0 +1,60 @@
+#header {
+ color: black;
+
+ .navigation {
+ font-size: 12px;
+ .border {
+ .outside {
+ color: blue;
+ }
+ }
+ }
+ .logo {
+ width: 300px;
+ &:hover { text-decoration: none }
+ }
+}
+
+a { b { ul { li { color: green; } } } }
+
+this { will { not { show { } } } }
+
+.cool {
+ div & { color: green; }
+ p & span { color: yellow; }
+}
+
+another {
+ .cool;
+}
+
+b {
+ & .something {
+ color: blue;
+ }
+
+ &.something {
+ color: blue;
+ }
+}
+
+.foo {
+ .bar, .baz {
+ & .qux {
+ display: block;
+ }
+ .qux & {
+ display: inline;
+ }
+ .qux & .biz {
+ display: none;
+ }
+ }
+}
+
+b {
+ hello [x="&yeah"] {
+ color: red;
+ }
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/pattern_matching.less b/vendor/leafo/lessphp/tests/inputs/pattern_matching.less
new file mode 100644
index 00000000..c2a0da91
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/pattern_matching.less
@@ -0,0 +1,157 @@
+
+.demo (light, @color) {
+ color: lighten(@color, 10%);
+}
+.demo (@_, @color) {
+ display: block;
+}
+
+@switch: light;
+
+.class {
+ .demo(@switch, #888);
+}
+
+// by arity
+
+.mixin () {
+ zero: 0;
+}
+.mixin (@a: 1px) {
+ one: 1;
+}
+.mixin (@a) {
+ one-req: 1;
+}
+.mixin (@a: 1px, @b: 2px) {
+ two: 2;
+}
+
+.mixin (@a, @b, @c) {
+ three-req: 3;
+}
+
+.mixin (@a: 1px, @b: 2px, @c: 3px) {
+ three: 3;
+}
+
+.zero {
+ .mixin();
+}
+
+.one {
+ .mixin(1);
+}
+
+.two {
+ .mixin(1, 2);
+}
+
+.three {
+ .mixin(1, 2, 3);
+}
+
+//
+
+.mixout ('left') {
+ left: 1;
+}
+
+.mixout ('right') {
+ right: 1;
+}
+
+.left {
+ .mixout('left');
+}
+.right {
+ .mixout('right');
+}
+
+//
+
+.border (@side, @width) {
+ color: black;
+ .border-side(@side, @width);
+}
+.border-side (left, @w) {
+ border-left: @w;
+}
+.border-side (right, @w) {
+ border-right: @w;
+}
+
+.border-right {
+ .border(right, 4px);
+}
+.border-left {
+ .border(left, 4px);
+}
+
+//
+
+
+.border-radius (@r) {
+ both: @r * 10;
+}
+.border-radius (@r, left) {
+ left: @r;
+}
+.border-radius (@r, right) {
+ right: @r;
+}
+
+.only-right {
+ .border-radius(33, right);
+}
+.only-left {
+ .border-radius(33, left);
+}
+.left-right {
+ .border-radius(33);
+}
+
+.hola(hello, @hello...) {
+ color: blue;
+}
+
+#hola {
+ .hola(hello, world);
+}
+
+.resty(@hello, @world, @the_rest...) {
+ padding: @hello @world;
+ rest: @the_rest;
+}
+
+.defaults(@aa, @bb:e343, @cc: "heah", ...) {
+ height: @aa;
+}
+
+#defaults_1 {
+ .defaults(one);
+ .defaults(two, one);
+ .defaults(three, two, one);
+ .defaults(four, three, two, one);
+}
+
+
+.thing() { color: green; }
+.thing(...) { color: blue; }
+.thing { color: red; }
+
+#aa {
+ .thing();
+}
+
+#bb {
+ .thing;
+}
+
+
+#cc {
+ .thing(1);
+}
+
+
+
diff --git a/vendor/leafo/lessphp/tests/inputs/scopes.less b/vendor/leafo/lessphp/tests/inputs/scopes.less
new file mode 100644
index 00000000..42e46969
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/scopes.less
@@ -0,0 +1,40 @@
+
+
+@a: 10;
+@some {
+ @b: @a + 10;
+ div {
+ @c: @b + 10;
+ other {
+ @d: @c + 10;
+ world {
+ @e: @d + 10;
+ height: @e;
+ }
+ }
+ }
+}
+
+
+body {
+ @some;
+}
+
+@some;
+
+.test(@x: 10) {
+ height: @x;
+ .test(@y: 11) {
+ height: @y;
+ .test(@z: 12) {
+ height: @z;
+ }
+ .test;
+ }
+ .test;
+}
+
+pre {
+ .test;
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/selector_expressions.less b/vendor/leafo/lessphp/tests/inputs/selector_expressions.less
new file mode 100644
index 00000000..b8aa2214
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/selector_expressions.less
@@ -0,0 +1,29 @@
+
+@color: blue;
+
+something @{color}, world {
+ color: blue;
+}
+
+.div {
+ @color: red;
+ (3434) {
+ height: 100px;
+ }
+
+ cool @{color} {
+ height: 4000px;
+ }
+}
+
+.heck(@a) { color: @a+10 }
+
+.spanX (@index) when (@index > 0) {
+ .span@{index} { .heck(@index) }
+ .spanX(@index - 1);
+}
+.spanX (0) {}
+
+.spanX (5);
+
+
diff --git a/vendor/leafo/lessphp/tests/inputs/site_demos.less b/vendor/leafo/lessphp/tests/inputs/site_demos.less
new file mode 100644
index 00000000..08d7f1e5
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/site_demos.less
@@ -0,0 +1,120 @@
+// these are the demos from the lessphp homepage
+
+default {
+ @base: 24px;
+ @border-color: #B2B;
+
+ .underline { border-bottom: 1px solid green }
+
+ #header {
+ color: black;
+ border: 1px solid @border-color + #222222;
+
+ .navigation {
+ font-size: @base / 2;
+ a {
+ .underline;
+ }
+ }
+ .logo {
+ width: 300px;
+ &:hover { text-decoration: none }
+ }
+ }
+}
+
+variables {
+ @a: 2;
+ @x: @a * @a;
+ @y: @x + 1;
+ @z: @x * 2 + @y;
+
+ @nice-blue: #5B83AD;
+ @light-blue: @nice-blue + #111;
+
+ @b: @a * 10;
+ @c: #888;
+ @fonts: "Trebuchet MS", Verdana, sans-serif;
+
+ .variables {
+ width: @z + 1cm; // 14cm
+ height: @b + @x + 0px; // 24px
+ color: @c;
+ background: @light-blue;
+ font-family: @fonts;
+ }
+}
+
+mixins {
+ .bordered {
+ border-top: dotted 1px black;
+ border-bottom: solid 2px black;
+ }
+ #menu a {
+ color: #111;
+ .bordered;
+ }
+
+ .post a {
+ color: red;
+ .bordered;
+ }
+}
+
+nested-rules {
+ #header {
+ color: black;
+
+ .navigation {
+ font-size: 12px;
+ }
+ .logo {
+ width: 300px;
+ &:hover { text-decoration: none }
+ }
+ }
+}
+
+namespaces {
+ #bundle {
+ .button {
+ display: block;
+ border: 1px solid black;
+ background-color: grey;
+ &:hover { background-color: white }
+ }
+ }
+ #header a {
+ color: orange;
+ #bundle > .button; // mixin the button class
+ }
+}
+
+mixin-functions {
+ @outer: 10px;
+ @class(@var:22px, @car: 400px + @outer) {
+ margin: @var;
+ height: @car;
+ }
+
+ @group {
+ @f(@color) {
+ color: @color;
+ }
+ .cool {
+ border-bottom: 1px solid green;
+ }
+ }
+
+ .class(@width:200px) {
+ padding: @width;
+ }
+
+ body {
+ .class(2.0em);
+ @group > @f(red);
+ @class(10px, 10px + 2);
+ @group > .cool;
+ }
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/test-imports/a.less b/vendor/leafo/lessphp/tests/inputs/test-imports/a.less
new file mode 100644
index 00000000..a00464db
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/test-imports/a.less
@@ -0,0 +1,6 @@
+.just-a-class { background: red; }
+
+.some-mixin() {
+ height: 200px;
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/test-imports/b.less b/vendor/leafo/lessphp/tests/inputs/test-imports/b.less
new file mode 100644
index 00000000..599ed3a4
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/test-imports/b.less
@@ -0,0 +1,12 @@
+.just-a-class { background: blue; }
+
+.hello {
+ .some-mixin();
+}
+
+
+@media cool {
+ color: red;
+ .some-mixin();
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/test-imports/file1.less b/vendor/leafo/lessphp/tests/inputs/test-imports/file1.less
new file mode 100644
index 00000000..658de0c5
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/test-imports/file1.less
@@ -0,0 +1,16 @@
+
+
+/**
+ * This is a test import file
+ */
+
+@colors {
+ div.bright {
+ color: red;
+ }
+
+ div.sad {
+ color: blue;
+ }
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/test-imports/file2.less b/vendor/leafo/lessphp/tests/inputs/test-imports/file2.less
new file mode 100644
index 00000000..2cae8dce
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/test-imports/file2.less
@@ -0,0 +1,6 @@
+
+b {
+ color: @color;
+ padding: 16px;
+}
+
diff --git a/vendor/leafo/lessphp/tests/inputs/test-imports/file3.less b/vendor/leafo/lessphp/tests/inputs/test-imports/file3.less
new file mode 100644
index 00000000..28b643ea
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/test-imports/file3.less
@@ -0,0 +1,7 @@
+
+h2 {
+ background: url("../images/logo.png") no-repeat;
+}
+
+@someValue: hello-from-file-3;
+
diff --git a/vendor/leafo/lessphp/tests/inputs/test-imports/inner/file1.less b/vendor/leafo/lessphp/tests/inputs/test-imports/inner/file1.less
new file mode 100644
index 00000000..df654a7e
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/test-imports/inner/file1.less
@@ -0,0 +1,6 @@
+
+.inner {
+ content: "inner/file1.less"
+}
+
+@import "file2"; // should get the one in inner
diff --git a/vendor/leafo/lessphp/tests/inputs/test-imports/inner/file2.less b/vendor/leafo/lessphp/tests/inputs/test-imports/inner/file2.less
new file mode 100644
index 00000000..f40d3c67
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/test-imports/inner/file2.less
@@ -0,0 +1,4 @@
+
+.inner {
+ content: "inner/file2.less"
+}
diff --git a/vendor/leafo/lessphp/tests/inputs/variables.less b/vendor/leafo/lessphp/tests/inputs/variables.less
new file mode 100644
index 00000000..6e18eb80
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs/variables.less
@@ -0,0 +1,44 @@
+@a: 2;
+@x: @a * @a;
+@y: @x + 1;
+@z: @y + @x * 2;
+@m: @z % @y;
+
+@nice-blue: #5B83AD;
+@light-blue: @nice-blue + #111;
+
+@rgb-color: rgb(20%, 15%, 80%);
+@rgba-color: rgba(23,68,149,0.5);
+
+@b: @a * 10px;
+@c: #888;
+@fonts: "Trebuchet MS", Verdana, sans-serif;
+
+.variables {
+ width: @z + 1cm; // 14cm
+ height: @b + @x + 0px; // 24px
+ margin-top: -@b; // -20px
+ margin-bottom: 10 - -@b; // 30px
+ @d: @c + #001;
+ color: @d;
+ background: @light-blue;
+ font-family: @fonts;
+ margin: @m + 0px; // 3px
+ font: 10px/12px serif;
+ font: 120%/120% serif;
+}
+
+.external {
+ color: @c;
+ border: 1px solid @rgb-color;
+ background: @rgba-color;
+}
+
+@hello: 44px;
+@something: "hello";
+@cool: something;
+
+outer1: @@something;
+outer2: @@@cool;
+
+
diff --git a/vendor/leafo/lessphp/tests/inputs_lessjs/mixins-args.less b/vendor/leafo/lessphp/tests/inputs_lessjs/mixins-args.less
new file mode 100644
index 00000000..c3965924
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs_lessjs/mixins-args.less
@@ -0,0 +1,205 @@
+.mixin (@a: 1px, @b: 50%) {
+ width: (@a * 5);
+ height: (@b - 1%);
+}
+
+.mixina (@style, @width, @color: black) {
+ border: @width @style @color;
+}
+
+.mixiny
+(@a: 0, @b: 0) {
+ margin: @a;
+ padding: @b;
+}
+
+.hidden() {
+ color: transparent; // asd
+}
+
+#hidden {
+ .hidden;
+}
+
+#hidden1 {
+ .hidden();
+}
+
+.two-args {
+ color: blue;
+ .mixin(2px, 100%);
+ .mixina(dotted, 2px);
+}
+
+.one-arg {
+ .mixin(3px);
+}
+
+.no-parens {
+ .mixin;
+}
+
+.no-args {
+ .mixin();
+}
+
+.var-args {
+ @var: 9;
+ .mixin(@var, (@var * 2));
+}
+
+.multi-mix {
+ .mixin(2px, 30%);
+ .mixiny(4, 5);
+}
+
+.maxa(@arg1: 10, @arg2: #f00) {
+ padding: (@arg1 * 2px);
+ color: @arg2;
+}
+
+body {
+ .maxa(15);
+}
+
+@glob: 5;
+.global-mixin(@a:2) {
+ width: (@glob + @a);
+}
+
+.scope-mix {
+ .global-mixin(3);
+}
+
+.nested-ruleset (@width: 200px) {
+ width: @width;
+ .column { margin: @width; }
+}
+.content {
+ .nested-ruleset(600px);
+}
+
+//
+
+.same-var-name2(@radius) {
+ radius: @radius;
+}
+.same-var-name(@radius) {
+ .same-var-name2(@radius);
+}
+#same-var-name {
+ .same-var-name(5px);
+}
+
+//
+
+.var-inside () {
+ @var: 10px;
+ width: @var;
+}
+#var-inside { .var-inside; }
+
+.mixin-arguments (@width: 0px, ...) {
+ border: @arguments;
+ width: @width;
+}
+
+.arguments {
+ .mixin-arguments(1px, solid, black);
+}
+.arguments2 {
+ .mixin-arguments();
+}
+.arguments3 {
+ .mixin-arguments;
+}
+
+.mixin-arguments2 (@width, @rest...) {
+ border: @arguments;
+ rest: @rest;
+ width: @width;
+}
+.arguments4 {
+ .mixin-arguments2(0, 1, 2, 3, 4);
+}
+
+// Edge cases
+
+.edge-case {
+ .mixin-arguments("{");
+}
+
+// Division vs. Literal Slash
+.border-radius(@r: 2px/5px) {
+ border-radius: @r;
+}
+.slash-vs-math {
+ .border-radius();
+ .border-radius(5px/10px);
+ .border-radius((3px * 2));
+}
+// semi-colon vs comma for delimiting
+
+.mixin-takes-one(@a) {
+ one: @a;
+}
+
+.mixin-takes-two(@a; @b) {
+ one: @a;
+ two: @b;
+}
+
+.comma-vs-semi-colon {
+ .mixin-takes-two(@a : a; @b : b, c);
+ .mixin-takes-two(@a : d, e; @b : f);
+ .mixin-takes-one(@a: g);
+ .mixin-takes-one(@a : h;);
+ .mixin-takes-one(i);
+ .mixin-takes-one(j;);
+ .mixin-takes-two(k, l);
+ .mixin-takes-one(m, n;);
+ .mixin-takes-two(o, p; q);
+ .mixin-takes-two(r, s; t;);
+}
+
+.mixin-conflict(@a:defA, @b:defB, @c:defC) {
+ three: @a, @b, @c;
+}
+
+.mixin-conflict(@a:defA, @b:defB, @c:defC, @d:defD) {
+ four: @a, @b, @c, @d;
+}
+
+#named-conflict {
+ .mixin-conflict(11, 12, 13, @a:a);
+ .mixin-conflict(@a:a, 21, 22, 23);
+}
+@a: 3px;
+.mixin-default-arg(@a: 1px, @b: @a, @c: @b) {
+ defaults: 1px 1px 1px;
+ defaults: 2px 2px 2px;
+}
+
+.test-mixin-default-arg {
+ .mixin-default-arg();
+ .mixin-default-arg(2px);
+}
+
+.mixin-comma-default1(@color; @padding; @margin: 2, 2, 2, 2) {
+ margin: @margin;
+}
+.selector {
+ .mixin-comma-default1(#33acfe; 4);
+}
+.mixin-comma-default2(@margin: 2, 2, 2, 2;) {
+ margin: @margin;
+}
+.selector2 {
+ .mixin-comma-default2();
+}
+.mixin-comma-default3(@margin: 2, 2, 2, 2) {
+ margin: @margin;
+}
+.selector3 {
+ .mixin-comma-default3(4,2,2,2);
+}
diff --git a/vendor/leafo/lessphp/tests/inputs_lessjs/mixins-named-args.less b/vendor/leafo/lessphp/tests/inputs_lessjs/mixins-named-args.less
new file mode 100644
index 00000000..f62dc86a
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs_lessjs/mixins-named-args.less
@@ -0,0 +1,36 @@
+.mixin (@a: 1px, @b: 50%) {
+ width: (@a * 5);
+ height: (@b - 1%);
+ args: @arguments;
+}
+.mixin (@a: 1px, @b: 50%) when (@b > 75%){
+ text-align: center;
+}
+
+.named-arg {
+ color: blue;
+ .mixin(@b: 100%);
+}
+
+.class {
+ @var: 20%;
+ .mixin(@b: @var);
+}
+
+.all-args-wrong-args {
+ .mixin(@b: 10%, @a: 2px);
+}
+
+.mixin2 (@a: 1px, @b: 50%, @c: 50) {
+ width: (@a * 5);
+ height: (@b - 1%);
+ color: (#000000 + @c);
+}
+
+.named-args2 {
+ .mixin2(3px, @c: 100);
+}
+
+.named-args3 {
+ .mixin2(@b: 30%, @c: #123456);
+}
diff --git a/vendor/leafo/lessphp/tests/inputs_lessjs/strings.less b/vendor/leafo/lessphp/tests/inputs_lessjs/strings.less
new file mode 100644
index 00000000..32fad721
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/inputs_lessjs/strings.less
@@ -0,0 +1,51 @@
+#strings {
+ background-image: url("http://son-of-a-banana.com");
+ quotes: "~" "~";
+ content: "#*%:&^,)!.(~*})";
+ empty: "";
+ brackets: "{" "}";
+ escapes: "\"hello\" \\world";
+ escapes2: "\"llo";
+}
+#comments {
+ content: "/* hello */ // not-so-secret";
+}
+#single-quote {
+ quotes: "'" "'";
+ content: '""#!&""';
+ empty: '';
+ semi-colon: ';';
+}
+#escaped {
+ filter: ~"DX.Transform.MS.BS.filter(opacity=50)";
+}
+#one-line { image: url(http://tooks.com) }
+#crazy { image: url(http://), "}", url("http://}") }
+#interpolation {
+ @var: '/dev';
+ url: "http://lesscss.org@{var}/image.jpg";
+
+ @var2: 256;
+ url2: "http://lesscss.org/image-@{var2}.jpg";
+
+ @var3: #456;
+ url3: "http://lesscss.org@{var3}";
+
+ @var4: hello;
+ url4: "http://lesscss.org/@{var4}";
+
+ @var5: 54.4px;
+ url5: "http://lesscss.org/@{var5}";
+}
+
+// multiple calls with string interpolation
+
+.mix-mul (@a: green) {
+ color: ~"@{a}";
+}
+.mix-mul-class {
+ .mix-mul(blue);
+ .mix-mul(red);
+ .mix-mul(black);
+ .mix-mul(orange);
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/accessors.css b/vendor/leafo/lessphp/tests/outputs/accessors.css
new file mode 100644
index 00000000..2f3c9e61
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/accessors.css
@@ -0,0 +1,14 @@
+.article { color:#294366; }
+.comment {
+ width:960px;
+ color:#294366;
+ padding:10px;
+}
+.wow {
+ height:960px;
+ background-color:#294366;
+ color:green;
+ padding:;
+ margin:;
+}
+.mix { font-size:10px; }
diff --git a/vendor/leafo/lessphp/tests/outputs/arity.css b/vendor/leafo/lessphp/tests/outputs/arity.css
new file mode 100644
index 00000000..5173561d
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/arity.css
@@ -0,0 +1,25 @@
+.one {
+ hello: one;
+ world: one;
+}
+.two {
+ hello: two;
+ world: two;
+}
+.three {
+ hello: three;
+ world: three;
+}
+.multi-foo {
+ foo: two cool;
+ foo: three cool yeah;
+ foo: two 1;
+ foo: three 1 yeah;
+ foo: three 1 1;
+}
+.multi-baz {
+ baz: two cool;
+ baz: three yeah;
+ baz: two 1;
+ baz: three 1;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/attributes.css b/vendor/leafo/lessphp/tests/outputs/attributes.css
new file mode 100644
index 00000000..fb0e176c
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/attributes.css
@@ -0,0 +1,105 @@
+* {
+ color: blue;
+}
+E {
+ color: blue;
+}
+E[foo] {
+ color: blue;
+}
+[foo] {
+ color: blue;
+}
+[foo] .helloWorld {
+ color: blue;
+}
+[foo].helloWorld {
+ color: blue;
+}
+E[foo="barbar"] {
+ color: blue;
+}
+E[foo~="hello#$@%@$#^"] {
+ color: blue;
+}
+E[foo^="color: green;"] {
+ color: blue;
+}
+E[foo$="239023"] {
+ color: blue;
+}
+E[foo*="29302"] {
+ color: blue;
+}
+E[foo|="239032"] {
+ color: blue;
+}
+E:root {
+ color: blue;
+}
+E:nth-child(odd) {
+ color: blue;
+}
+E:nth-child(2n+1) {
+ color: blue;
+}
+E:nth-child(5) {
+ color: blue;
+}
+E:nth-last-child(-n+2) {
+ color: blue;
+}
+E:nth-of-type(2n) {
+ color: blue;
+}
+E:nth-last-of-type(n) {
+ color: blue;
+}
+E:first-child {
+ color: blue;
+}
+E:last-child {
+ color: blue;
+}
+E:first-of-type {
+ color: blue;
+}
+E:last-of-type {
+ color: blue;
+}
+E:only-child {
+ color: blue;
+}
+E:only-of-type {
+ color: blue;
+}
+E:empty {
+ color: blue;
+}
+E:lang(en) {
+ color: blue;
+}
+E::first-line {
+ color: blue;
+}
+E::before {
+ color: blue;
+}
+E#id {
+ color: blue;
+}
+E:not(:link) {
+ color: blue;
+}
+E F {
+ color: blue;
+}
+E > F {
+ color: blue;
+}
+E + F {
+ color: blue;
+}
+E ~ F {
+ color: blue;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/builtins.css b/vendor/leafo/lessphp/tests/outputs/builtins.css
new file mode 100644
index 00000000..6ac21f2c
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/builtins.css
@@ -0,0 +1,61 @@
+body {
+ color: "hello world";
+ num-basic: 5.1666666666667;
+ num-floor: 5px;
+ num-ceil: 6px;
+ num2: 0.66666666666667;
+ num2-round: 1;
+ num2-floor: 0;
+ num2-ceil: 1;
+ round-lit: 3px;
+ rgba1: #ff112233;
+ rgba2: #992c3742;
+ argb: #992c3742;
+}
+format {
+ format: "rgb(32, 128, 64)";
+ format-string: "hello world";
+ format-multiple: "hello earth 2";
+ format-url-encode: 'red is %A';
+ eformat: rgb(32, 128, 64);
+}
+#functions {
+ str1: true;
+ str2: false;
+ num1: true;
+ num2: true;
+ num3: true;
+ num4: false;
+ col1: true;
+ col2: false;
+ col3: true;
+ col4: true;
+ key1: true;
+ key2: false;
+ px1: true;
+ px2: false;
+ per1: true;
+ per2: false;
+ em1: true;
+ em2: false;
+ ex1: 2;
+ ex2: 1;
+ ex3: extract(1,1);
+ ex4: 2;
+ pow: 16;
+ pi: 3.1415926535898;
+ mod: 4;
+ tan: 1.5574077246549;
+ cos: 0.54030230586814;
+ sin: 0.8414709848079;
+ atan: 0.78539816339745rad;
+ acos: 0rad;
+ asin: 1.5707963267949rad;
+ sqrt: 2.8284271247462;
+}
+#unit {
+ unit-lit: 10;
+ unit-arg: 10s;
+ unit-arg2: 10em;
+ unit-math: 7.407%;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/colors.css b/vendor/leafo/lessphp/tests/outputs/colors.css
new file mode 100644
index 00000000..5310ffb0
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/colors.css
@@ -0,0 +1,103 @@
+body {
+ color: #ff0000;
+ color: #ffffff;
+ color: #000000;
+ color: #996d33;
+ color: rgba(153,109,51,0.3);
+ lighten1: #ffffff;
+ lighten2: #7c8df2;
+ lighten3: rgba(222,140,129,0.5);
+ darken1: #d6d6d6;
+ darken2: #0d1e81;
+ darken3: rgba(18,42,185,0.5);
+ saturate1: #f1eded;
+ saturate2: #0025fe;
+ saturate3: rgba(10,44,244,0.5);
+ desaturate1: #efefef;
+ desaturate2: #3349cb;
+ desaturate3: rgba(36,62,218,0.5);
+ spin1: #efefef;
+ spin2: #2d17e7;
+ spin3: rgba(59,23,231,0.5);
+ spin2: #efefef;
+ spin3: #1769e7;
+ spin4: rgba(23,119,231,0.5);
+ one1: #abcdef;
+ one2: #abcdef;
+ two1: rgba(2,159,35,0.9);
+ two2: rgba(2,159,35,0.9);
+ three1: rgba(1,2,3,0.6);
+ three2: rgba(1,2,3,0.6);
+ four1: rgba(1,2,3,0);
+ four2: rgba(1,2,3,0);
+ hue: 282;
+ sat: 33;
+ lit: 12;
+ what: #dff1da;
+ zero1: #343434;
+ zero2: #003468;
+ zero3: #000000;
+ zero4: #ffffff;
+ zero5: #000000;
+ zero6: #ffffff;
+ zero7: #ffffff;
+ zero8: #ffffff;
+ zero9: #1d5612;
+ zeroa: #56124b;
+ zerob: #000000;
+ zeroc: #ffffff;
+}
+alpha {
+ g1: 0;
+ g2: 1;
+}
+fade {
+ f1: rgba(255,0,0,0.5);
+ f2: rgba(255,255,255,0.2);
+ f3: rgba(34,23,64,0.5);
+}
+.mix {
+ color1: #808080;
+ color2: #808080;
+ color3: rgba(6,3,2,-0.25);
+}
+.contrast {
+ color1: #ff0000;
+ color2: #0000ff;
+}
+.percent {
+ per: 50%;
+}
+.colorz {
+ color1: #ebebeb;
+ color2: #ff9100;
+ color3: #000000;
+}
+body {
+ start: #fcf8e3;
+ spin: #fcf4e3;
+ chained: #fbeed5;
+ direct: #fbefd5;
+}
+pre {
+ spin: #f2dee1;
+}
+dd {
+ background-color: #f5f5f5;
+}
+.ops {
+ c1: #4d0000;
+ c2: #004000;
+ c3: #020002;
+ c4: #ffffff;
+ c5: #fb8173;
+ c6: 132 / #ff0000;
+ c7: 132 - #ff0000;
+ c8: 132- #ff0000;
+}
+.transparent {
+ r: 0;
+ g: 0;
+ b: 0;
+ a: 0;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/compile_on_mixin.css b/vendor/leafo/lessphp/tests/outputs/compile_on_mixin.css
new file mode 100644
index 00000000..318526a5
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/compile_on_mixin.css
@@ -0,0 +1,29 @@
+body {
+ height: 22px;
+}
+body ul {
+ height: 20px;
+}
+body ul li {
+ height: 10px;
+}
+body ul li div span,
+body ul li link {
+ margin: 10px;
+ color: red;
+}
+body ul div,
+body ul p {
+ border: 1px;
+}
+body ul div.hello,
+body ul p.hello {
+ color: green;
+}
+body ul div :what,
+body ul p :what {
+ color: blue;
+}
+body ul a b {
+ color: blue;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/data-uri.css b/vendor/leafo/lessphp/tests/outputs/data-uri.css
new file mode 100644
index 00000000..e51b8f9c
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/data-uri.css
@@ -0,0 +1,6 @@
+.small {
+ background: url("data:text/plain;base64,CmRpdjpiZWZvcmUgewoJY29udGVudDogImhpISI7Cn0KCg==");
+}
+.large {
+ background: url("../../../lessc.inc.php");
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/directives.css b/vendor/leafo/lessphp/tests/outputs/directives.css
new file mode 100644
index 00000000..c2d82b83
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/directives.css
@@ -0,0 +1,27 @@
+@charset "utf-8";
+@-moz-document url-prefix() {
+ div {
+ color: red;
+ }
+}
+@page :left {
+ margin-left: 4cm;
+}
+@page :right {
+ margin-left: 3cm;
+}
+@page {
+ margin: 2cm;
+}
+@-ms-viewport {
+ width: device-width;
+}
+@-moz-viewport {
+ width: device-width;
+}
+@-o-viewport {
+ width: device-width;
+}
+@viewport {
+ width: device-width;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/escape.css b/vendor/leafo/lessphp/tests/outputs/escape.css
new file mode 100644
index 00000000..0587bcab
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/escape.css
@@ -0,0 +1,14 @@
+body {
+ e1: this is simple;
+ e2: this is simple;
+ e3: 1232;
+ e4: world;
+ e5: onemore;
+ t1: eating rice;
+ t2: string cheese;
+ t3: a b c string me d e f;
+ t4: string world;
+}
+.class {
+ filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='image.png');
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/font_family.css b/vendor/leafo/lessphp/tests/outputs/font_family.css
new file mode 100644
index 00000000..fc260fd4
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/font_family.css
@@ -0,0 +1,17 @@
+@font-face {
+ font-family: Graublau Sans Web;
+ src: url(fonts/GraublauWeb.otf) format("opentype");
+}
+@font-face {
+ font-family: Gentium;
+ src: url('fonts/Gentium.ttf');
+}
+@font-face {
+ font-family: Gentium;
+ src: url("fonts/GentiumItalic.ttf");
+ font-style: italic;
+}
+h2 {
+ font-family: Gentium;
+ crazy: maroon;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/guards.css b/vendor/leafo/lessphp/tests/outputs/guards.css
new file mode 100644
index 00000000..34af5495
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/guards.css
@@ -0,0 +1,27 @@
+dd {
+ simple: yellow;
+}
+b {
+ something: red;
+ something-complex: blue cool;
+ something-complex: blue birthday;
+}
+img {
+ another: green;
+ flipped: teal;
+}
+body {
+ yeah-number: purple 232px;
+ yeah-pixel: silver;
+ yeah-number: purple 232;
+}
+div {
+ something-complex: blue true;
+}
+link {
+ color: true red;
+ color: true #fff;
+ color: true #fffddd;
+ color: true #000000;
+ color: true rgba(0,0,0,0.34);
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/hacks.css b/vendor/leafo/lessphp/tests/outputs/hacks.css
new file mode 100644
index 00000000..b8327eb5
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/hacks.css
@@ -0,0 +1,4 @@
+:root .alert-message,
+:root .btn {
+ border-radius: 0 \0;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/hi.css b/vendor/leafo/lessphp/tests/outputs/hi.css
new file mode 100644
index 00000000..3bffcf0b
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/hi.css
@@ -0,0 +1,3 @@
+div:before {
+ content: "hi!";
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/ie.css b/vendor/leafo/lessphp/tests/outputs/ie.css
new file mode 100644
index 00000000..7e4571c8
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/ie.css
@@ -0,0 +1,9 @@
+foo {
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr=#c0ff3300,endColorstr=#ff000000);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr=#c0ff3300,endColorstr=#ff000001);
+}
+foo {
+ filter: alpha(opacity=20);
+ filter: alpha(opacity=20,enabled=true);
+ filter: blaznicate(foo=bar,baz=bang bip,bart=#fa4600);
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/import.css b/vendor/leafo/lessphp/tests/outputs/import.css
new file mode 100644
index 00000000..b76c25b5
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/import.css
@@ -0,0 +1,51 @@
+@import "not-found";
+@import "something.css" media;
+@import url("something.css") media;
+@import url(something.css) media, screen, print;
+b {
+ color: maroon;
+ padding: 16px;
+}
+body {
+ line-height: 10em;
+}
+body div.bright {
+ color: red;
+}
+body div.sad {
+ color: blue;
+}
+.one {
+ color: blue;
+}
+#merge-import-mixins .just-a-class {
+ background: red;
+}
+#merge-import-mixins .just-a-class {
+ background: blue;
+}
+#merge-import-mixins .hello {
+ height: 200px;
+}
+@media cool {
+ #merge-import-mixins {
+ color: red;
+ height: 200px;
+ }
+}
+#merge-import-mixins div {
+ background: red;
+ background: blue;
+}
+.inner {
+ content: "inner/file1.less";
+}
+.inner {
+ content: "inner/file2.less";
+}
+pre {
+ color: hello-from-file-3;
+}
+h2 {
+ background: url("../images/logo.png") no-repeat;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/interpolation.css b/vendor/leafo/lessphp/tests/outputs/interpolation.css
new file mode 100644
index 00000000..c3ff1f42
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/interpolation.css
@@ -0,0 +1,28 @@
+div {
+ interp1: yes;
+ interp2: yes;
+ interp3: okay;
+}
+10"yeah" {
+ color: blue;
+}
+10 {
+ color: blue;
+}
+hello world 10 {
+ color: red;
+}
+#"yeah" {
+ color: "hello 10";
+}
+[prop],
+[prop="value3"],
+[prop*="val3"],
+[|prop~="val3"],
+[*|prop$="val3"],
+[ns|prop^="val3"],
+[3^="val3"],
+[3=3],
+[3] {
+ attributes: yes;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/keyframes.css b/vendor/leafo/lessphp/tests/outputs/keyframes.css
new file mode 100644
index 00000000..cf62be11
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/keyframes.css
@@ -0,0 +1,48 @@
+@keyframes 'bounce' {
+ from {
+ top: 100px;
+ animation-timing-function: ease-out;
+ }
+ 25% {
+ top: 50px;
+ animation-timing-function: ease-in;
+ }
+ 50% {
+ top: 100px;
+ animation-timing-function: ease-out;
+ }
+ 75% {
+ top: 75px;
+ animation-timing-function: ease-in;
+ }
+ to {
+ top: 100px;
+ }
+}
+@-webkit-keyframes flowouttoleft {
+ 0% {
+ -webkit-transform: translateX(0) scale(1);
+ }
+ 60%,
+ 70% {
+ -webkit-transform: translateX(0) scale(.7);
+ }
+ 100% {
+ -webkit-transform: translateX(-100%) scale(.7);
+ }
+}
+div {
+ animation-name: 'diagonal-slide';
+ animation-duration: 5s;
+ animation-iteration-count: 10;
+}
+@keyframes 'diagonal-slide' {
+ from {
+ left: 0;
+ top: 0;
+ }
+ to {
+ left: 100px;
+ top: 100px;
+ }
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/math.css b/vendor/leafo/lessphp/tests/outputs/math.css
new file mode 100644
index 00000000..8d425f30
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/math.css
@@ -0,0 +1,69 @@
+.unary {
+ sub: 10 -5;
+}
+.spaces {
+ sub1: 5;
+ sub2: 5;
+ add1: 15;
+ add2: 15;
+ div: 2;
+ mul1: 50;
+ mul2: 50;
+}
+.supress-division {
+ border-radius: 10px/10px;
+ border-radius: 10px/12px;
+ border-radius: hello(10px/10px) world;
+ font: 10px/30 sans-serif;
+ font: 10px/20px sans-serif;
+ font: 10px/22px sans-serif;
+ border-radius: 0 15px 15px 15px/0 50% 50% 50%;
+}
+.parens {
+ sub: 5;
+ add: 15;
+ div1: 2;
+ div2: 2;
+ mul: 50;
+}
+.keyword-names {
+ height: "hello" 25;
+}
+.negation {
+ neg1: -1px;
+ neg2: -1px;
+ neg3: -10;
+}
+.test {
+ single1: 5;
+ single2: 10;
+ single3: 10;
+ parens: 10 -2;
+ math1: 20;
+ math2: 20;
+ complex1: 71;
+ complex2: 6;
+ complex3: 6px 1em 2px 2;
+ var1: 8 4 4 4px;
+ var2: 96;
+ var3: 12;
+ complex4: 113;
+}
+.percents {
+ p1: 1000%;
+ p2: 1000%;
+ p3: 100%;
+ p4: 1000px;
+ p5: 1000%;
+ p6: 30%;
+ p7: 10%;
+ p8: 2%;
+}
+.misc {
+ x: 40px;
+ y: 40em;
+}
+.cond {
+ c1: false;
+ c2: true;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/media.css b/vendor/leafo/lessphp/tests/outputs/media.css
new file mode 100644
index 00000000..99da8c31
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/media.css
@@ -0,0 +1,70 @@
+@media screen,3D {
+ P {
+ color: green;
+ }
+}
+@media print {
+ body {
+ font-size: 10pt;
+ }
+}
+@media screen {
+ body {
+ font-size: 13px;
+ }
+}
+@media screen,print {
+ body {
+ line-height: 1.2;
+ }
+}
+@media all and (min-width: 0px) {
+ body {
+ line-height: 1.2;
+ }
+}
+@media all and (min-width: 0) {
+ body {
+ line-height: 1.2;
+ }
+}
+@media screen and (min-width: 102.5em) and (max-width: 117.9375em),screen and (min-width: 150em) {
+ body {
+ color: blue;
+ }
+}
+@media screen and (min-height: 110px) {
+ body {
+ color: red;
+ }
+}
+@media screen and (height: 100px) and (width: 110px),(size: 120px) {
+ body {
+ color: red;
+ }
+}
+@media test {
+ div {
+ height: 20px;
+ }
+}
+@media test and (hello) {
+ div {
+ color: red;
+ }
+ div pre {
+ color: orange;
+ }
+}
+@media yeah {
+ @page {
+ @media cool {
+ color: red;
+ }
+ }
+}
+@media (max-width: 599px) {
+ .helloworld {
+ color: blue;
+ }
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/misc.css b/vendor/leafo/lessphp/tests/outputs/misc.css
new file mode 100644
index 00000000..6c99cc39
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/misc.css
@@ -0,0 +1,68 @@
+color: "aaa, bbb";
+.topbar {
+ background: url(/assets/images/test/topbar.png);
+}
+.hello {
+ test: empty-function("/assets/images/test/",40%,to(#fff));
+}
+.css3 {
+ background-image: -webkit-gradient(linear,0% 0%,0% 90%,from(#E9A000),to(#A37000));
+}
+.test,
+.world {
+ border: 1px solid red;
+ color: url(http://mage-page.com);
+ string: "hello /* this is not a comment */";
+ world: "// neither is this";
+ string: 'hello /* this is not a comment */';
+ world: '// neither is this';
+ what-ever: 100px;
+ background: url(/*no comment here*/);
+}
+.urls {
+ background1: url("http://google.com");
+ background2: url(http://google.com);
+ background3: url("http://google.com");
+}
+.cool {
+ color: "aaa, bbb";
+}
+.span-17 {
+ float: left;
+}
+.span-17 {
+ width: 660px;
+}
+.x {
+ float: left;
+ width: 660px;
+}
+.hi pre {
+ color: red;
+}
+.hi pre {
+ color: blue;
+}
+.rad pre {
+ color: red;
+}
+.rad pre {
+ color: blue;
+}
+hello {
+ numbers: 1.0 0.1 .1 1.;
+ numbers: 1.0s 0.1s .1s 1.s;
+ numbers: -1s -0.1s -0.1s -1s;
+ numbers: -1 -0.1 -0.1 -1;
+}
+#string {
+ hello: 'what\'s going on here';
+ hello: 'blah blag @{ blah blah';
+ join: "3434hello";
+ join: 3434hello;
+}
+.duplicates {
+ hello: world;
+ hello: "world";
+ hello: "what";
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/mixin_functions.css b/vendor/leafo/lessphp/tests/outputs/mixin_functions.css
new file mode 100644
index 00000000..53785803
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/mixin_functions.css
@@ -0,0 +1,7 @@
+body {
+ padding: 2.0em;
+ color: red;
+ margin: 10px;
+ height: 12px;
+ border-bottom: 1px solid green;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/mixin_merging.css b/vendor/leafo/lessphp/tests/outputs/mixin_merging.css
new file mode 100644
index 00000000..f396ba92
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/mixin_merging.css
@@ -0,0 +1,42 @@
+#test1 div {
+ color:red;
+ height:10px;
+}
+#test1 p { height:10px; }
+#test2 b {
+ color:red;
+ width:1px;
+}
+#test2 a, #test2 i { width:1px; }
+#test3 a, #test3 i { width:1px; }
+#test3 b {
+ width:1px;
+ color:red;
+}
+#test4 a {
+ color:blue;
+ margin:1px;
+}
+#test4 div, #test4 html { color:blue; }
+#test5 img, #test5 strong {
+ padding:2px;
+ float:right;
+}
+#test6 div a, #test6 span a {
+ line-height:10px;
+ color:red;
+}
+#test7 div strong {
+ margin:1px;
+ color:red;
+}
+#test7 div b { color:red; }
+#test7 span strong, #test7 span b { color:red; }
+#test8 a i, #test8 b i {
+ background:red;
+ color:red;
+}
+#test8 a s, #test8 b s {
+ background:red;
+ color:blue;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/mixins.css b/vendor/leafo/lessphp/tests/outputs/mixins.css
new file mode 100644
index 00000000..cce87eb4
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/mixins.css
@@ -0,0 +1,92 @@
+.bold {
+ font-size: 20px;
+ font-weight: bold;
+}
+body #window {
+ border-radius: 10px;
+ font-size: 20px;
+ font-weight: bold;
+ line-height: 30px;
+}
+#bundle .button {
+ display: block;
+ border: 1px solid black;
+ background-color: grey;
+}
+#bundle .button:hover {
+ background-color: white;
+}
+#header a {
+ color: orange;
+ display: block;
+ border: 1px solid black;
+ background-color: grey;
+}
+#header a:hover {
+ background-color: white;
+}
+div {
+ color: blue;
+ hello: world;
+}
+div b {
+ color: blue;
+}
+body {
+ color: blue;
+ hello: world;
+}
+body b {
+ color: blue;
+}
+.hello .world {
+ color: blue;
+}
+.foobar {
+ color: blue;
+}
+.eggs {
+ foo: 1px 2px;
+ bar: 1px 2px;
+ foo: 100 land;
+ bar: 100 land;
+}
+#hello {
+ cool: one two three cool;
+}
+#hello-important {
+ cool: one two three cool !important;
+}
+#world {
+ cool: "world";
+}
+#another {
+ things: red blue green;
+ things: red blue green skip me;
+}
+#day .cool {
+ color: one two three;
+}
+#day .cool {
+ color: one two three skip me;
+}
+.mix-suffix {
+ color: red !important;
+ height: 20px !important;
+}
+.mix-suffix pre {
+ color: red;
+}
+.search-test {
+ color: #f00 !important;
+ color: #0f0 !important;
+}
+.cowboy {
+ color: blue;
+}
+.nav .nav-divider {
+ padding: 10px;
+}
+.nav-divider {
+ padding: 10px;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/nested.css b/vendor/leafo/lessphp/tests/outputs/nested.css
new file mode 100644
index 00000000..454dcfcc
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/nested.css
@@ -0,0 +1,51 @@
+#header {
+ color: black;
+}
+#header .navigation {
+ font-size: 12px;
+}
+#header .navigation .border .outside {
+ color: blue;
+}
+#header .logo {
+ width: 300px;
+}
+#header .logo:hover {
+ text-decoration: none;
+}
+a b ul li {
+ color: green;
+}
+div .cool {
+ color: green;
+}
+p .cool span {
+ color: yellow;
+}
+div another {
+ color: green;
+}
+p another span {
+ color: yellow;
+}
+b .something {
+ color: blue;
+}
+b.something {
+ color: blue;
+}
+.foo .bar .qux,
+.foo .baz .qux {
+ display: block;
+}
+.qux .foo .bar,
+.qux .foo .baz {
+ display: inline;
+}
+.qux .foo .bar .biz,
+.qux .foo .baz .biz {
+ display: none;
+}
+b hello [x="&yeah"] {
+ color: red;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/nesting.css b/vendor/leafo/lessphp/tests/outputs/nesting.css
new file mode 100644
index 00000000..804a56bf
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/nesting.css
@@ -0,0 +1,6 @@
+#header .navigation .border .outside { color:blue; }
+#header .navigation { font-size:12px; }
+#header .logo:hover { text-decoration:none; }
+#header .logo { width:300px; }
+#header { color:black; }
+a b ul li { color:green; }
diff --git a/vendor/leafo/lessphp/tests/outputs/pattern_matching.css b/vendor/leafo/lessphp/tests/outputs/pattern_matching.css
new file mode 100644
index 00000000..215371b0
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/pattern_matching.css
@@ -0,0 +1,72 @@
+.class {
+ color: #a2a2a2;
+ display: block;
+}
+.zero {
+ zero: 0;
+ one: 1;
+ two: 2;
+ three: 3;
+}
+.one {
+ one: 1;
+ one-req: 1;
+ two: 2;
+ three: 3;
+}
+.two {
+ two: 2;
+ three: 3;
+}
+.three {
+ three-req: 3;
+ three: 3;
+}
+.left {
+ left: 1;
+}
+.right {
+ right: 1;
+}
+.border-right {
+ color: black;
+ border-right: 4px;
+}
+.border-left {
+ color: black;
+ border-left: 4px;
+}
+.only-right {
+ right: 33;
+}
+.only-left {
+ left: 33;
+}
+.left-right {
+ both: 330;
+}
+#hola {
+ color: blue;
+}
+#defaults_1 {
+ height: one;
+ height: two;
+ height: three;
+ height: four;
+}
+.thing {
+ color: red;
+}
+#aa {
+ color: green;
+ color: blue;
+ color: red;
+}
+#bb {
+ color: green;
+ color: blue;
+ color: red;
+}
+#cc {
+ color: blue;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/scopes.css b/vendor/leafo/lessphp/tests/outputs/scopes.css
new file mode 100644
index 00000000..ea2a4573
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/scopes.css
@@ -0,0 +1,11 @@
+body div other world {
+ height: 50;
+}
+div other world {
+ height: 50;
+}
+pre {
+ height: 10;
+ height: 11;
+ height: 12;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/selector_expressions.css b/vendor/leafo/lessphp/tests/outputs/selector_expressions.css
new file mode 100644
index 00000000..71d4a5d8
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/selector_expressions.css
@@ -0,0 +1,25 @@
+something blue,
+world {
+ color: blue;
+}
+.div (3434) {
+ height: 100px;
+}
+.div cool red {
+ height: 4000px;
+}
+.span5 {
+ color: 15;
+}
+.span4 {
+ color: 14;
+}
+.span3 {
+ color: 13;
+}
+.span2 {
+ color: 12;
+}
+.span1 {
+ color: 11;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/site_demos.css b/vendor/leafo/lessphp/tests/outputs/site_demos.css
new file mode 100644
index 00000000..3428ad3a
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/site_demos.css
@@ -0,0 +1,76 @@
+default .underline {
+ border-bottom: 1px solid green;
+}
+default #header {
+ color: black;
+ border: 1px solid #dd44dd;
+}
+default #header .navigation {
+ font-size: 12px;
+}
+default #header .navigation a {
+ border-bottom: 1px solid green;
+}
+default #header .logo {
+ width: 300px;
+}
+default #header .logo:hover {
+ text-decoration: none;
+}
+variables .variables {
+ width: 14cm;
+ height: 24px;
+ color: #888;
+ background: #6c94be;
+ font-family: "Trebuchet MS", Verdana, sans-serif;
+}
+mixins .bordered {
+ border-top: dotted 1px black;
+ border-bottom: solid 2px black;
+}
+mixins #menu a {
+ color: #111;
+ border-top: dotted 1px black;
+ border-bottom: solid 2px black;
+}
+mixins .post a {
+ color: red;
+ border-top: dotted 1px black;
+ border-bottom: solid 2px black;
+}
+nested-rules #header {
+ color: black;
+}
+nested-rules #header .navigation {
+ font-size: 12px;
+}
+nested-rules #header .logo {
+ width: 300px;
+}
+nested-rules #header .logo:hover {
+ text-decoration: none;
+}
+namespaces #bundle .button {
+ display: block;
+ border: 1px solid black;
+ background-color: grey;
+}
+namespaces #bundle .button:hover {
+ background-color: white;
+}
+namespaces #header a {
+ color: orange;
+ display: block;
+ border: 1px solid black;
+ background-color: grey;
+}
+namespaces #header a:hover {
+ background-color: white;
+}
+mixin-functions body {
+ padding: 2.0em;
+ color: red;
+ margin: 10px;
+ height: 12px;
+ border-bottom: 1px solid green;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs/variables.css b/vendor/leafo/lessphp/tests/outputs/variables.css
new file mode 100644
index 00000000..c4857cc6
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs/variables.css
@@ -0,0 +1,19 @@
+outer1: 44px;
+outer2: 44px;
+.variables {
+ width: 14cm;
+ height: 24px;
+ margin-top: -20px;
+ margin-bottom: 30px;
+ color: #888899;
+ background: #6c94be;
+ font-family: "Trebuchet MS", Verdana, sans-serif;
+ margin: 3px;
+ font: 10px/12px serif;
+ font: 120%/120% serif;
+}
+.external {
+ color: #888;
+ border: 1px solid #3326cc;
+ background: rgba(23,68,149,0.5);
+}
diff --git a/vendor/leafo/lessphp/tests/outputs_lessjs/mixins-args.css b/vendor/leafo/lessphp/tests/outputs_lessjs/mixins-args.css
new file mode 100644
index 00000000..0a8e6bee
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs_lessjs/mixins-args.css
@@ -0,0 +1,113 @@
+#hidden {
+ color: transparent;
+}
+#hidden1 {
+ color: transparent;
+}
+.two-args {
+ color: blue;
+ width: 10px;
+ height: 99%;
+ border: 2px dotted black;
+}
+.one-arg {
+ width: 15px;
+ height: 49%;
+}
+.no-parens {
+ width: 5px;
+ height: 49%;
+}
+.no-args {
+ width: 5px;
+ height: 49%;
+}
+.var-args {
+ width: 45;
+ height: 17%;
+}
+.multi-mix {
+ width: 10px;
+ height: 29%;
+ margin: 4;
+ padding: 5;
+}
+body {
+ padding: 30px;
+ color: #f00;
+}
+.scope-mix {
+ width: 8;
+}
+.content {
+ width: 600px;
+}
+.content .column {
+ margin: 600px;
+}
+#same-var-name {
+ radius: 5px;
+}
+#var-inside {
+ width: 10px;
+}
+.arguments {
+ border: 1px solid black;
+ width: 1px;
+}
+.arguments2 {
+ border: 0px;
+ width: 0px;
+}
+.arguments3 {
+ border: 0px;
+ width: 0px;
+}
+.arguments4 {
+ border: 0 1 2 3 4;
+ rest: 1 2 3 4;
+ width: 0;
+}
+.edge-case {
+ border: "{";
+ width: "{";
+}
+.slash-vs-math {
+ border-radius: 0.4px;
+ border-radius: 0.5px;
+ border-radius: 6px;
+}
+.comma-vs-semi-colon {
+ one: a;
+ two: b, c;
+ one: d, e;
+ two: f;
+ one: g;
+ one: h;
+ one: i;
+ one: j;
+ one: k;
+ two: l;
+ one: m, n;
+ one: o, p;
+ two: q;
+ one: r, s;
+ two: t;
+}
+#named-conflict {
+ four: a, 11, 12, 13;
+ four: a, 21, 22, 23;
+}
+.test-mixin-default-arg {
+ defaults: 1px 1px 1px;
+ defaults: 2px 2px 2px;
+}
+.selector {
+ margin: 2, 2, 2, 2;
+}
+.selector2 {
+ margin: 2, 2, 2, 2;
+}
+.selector3 {
+ margin: 4;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs_lessjs/mixins-named-args.css b/vendor/leafo/lessphp/tests/outputs_lessjs/mixins-named-args.css
new file mode 100644
index 00000000..e460aa10
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs_lessjs/mixins-named-args.css
@@ -0,0 +1,27 @@
+.named-arg {
+ color: blue;
+ width: 5px;
+ height: 99%;
+ args: 1px 100%;
+ text-align: center;
+}
+.class {
+ width: 5px;
+ height: 19%;
+ args: 1px 20%;
+}
+.all-args-wrong-args {
+ width: 10px;
+ height: 9%;
+ args: 2px 10%;
+}
+.named-args2 {
+ width: 15px;
+ height: 49%;
+ color: #646464;
+}
+.named-args3 {
+ width: 5px;
+ height: 29%;
+ color: #123456;
+}
diff --git a/vendor/leafo/lessphp/tests/outputs_lessjs/strings.css b/vendor/leafo/lessphp/tests/outputs_lessjs/strings.css
new file mode 100644
index 00000000..f7b9c27d
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/outputs_lessjs/strings.css
@@ -0,0 +1,40 @@
+#strings {
+ background-image: url("http://son-of-a-banana.com");
+ quotes: "~" "~";
+ content: "#*%:&^,)!.(~*})";
+ empty: "";
+ brackets: "{" "}";
+ escapes: "\"hello\" \\world";
+ escapes2: "\"llo";
+}
+#comments {
+ content: "/* hello */ // not-so-secret";
+}
+#single-quote {
+ quotes: "'" "'";
+ content: '""#!&""';
+ empty: '';
+ semi-colon: ';';
+}
+#escaped {
+ filter: DX.Transform.MS.BS.filter(opacity=50);
+}
+#one-line {
+ image: url(http://tooks.com);
+}
+#crazy {
+ image: url(http://), "}", url("http://}");
+}
+#interpolation {
+ url: "http://lesscss.org/dev/image.jpg";
+ url2: "http://lesscss.org/image-256.jpg";
+ url3: "http://lesscss.org#445566";
+ url4: "http://lesscss.org/hello";
+ url5: "http://lesscss.org/54.4px";
+}
+.mix-mul-class {
+ color: blue;
+ color: red;
+ color: black;
+ color: orange;
+}
diff --git a/vendor/leafo/lessphp/tests/sort.php b/vendor/leafo/lessphp/tests/sort.php
new file mode 100644
index 00000000..70b907ea
--- /dev/null
+++ b/vendor/leafo/lessphp/tests/sort.php
@@ -0,0 +1,57 @@
+<?php
+error_reporting(E_ALL);
+
+require realpath(dirname(__FILE__)).'/../lessc.inc.php';
+
+// sorts the selectors in stylesheet in order to normalize it for comparison
+
+$exe = array_shift($argv); // remove filename
+
+if (!$fname = array_shift($argv)) {
+ $fname = "php://stdin";
+}
+
+class lesscNormalized extends lessc {
+ public $numberPrecision = 3;
+
+ public function compileValue($value) {
+ if ($value[0] == "raw_color") {
+ $value = $this->coerceColor($value);
+ }
+
+ return parent::compileValue($value);
+ }
+}
+
+class SortingFormatter extends lessc_formatter_lessjs {
+ function sortKey($block) {
+ if (!isset($block->sortKey)) {
+ sort($block->selectors, SORT_STRING);
+ $block->sortKey = implode(",", $block->selectors);
+ }
+
+ return $block->sortKey;
+ }
+
+ function sortBlock($block) {
+ usort($block->children, function($a, $b) {
+ $sort = strcmp($this->sortKey($a), $this->sortKey($b));
+ if ($sort == 0) {
+ // TODO
+ }
+ return $sort;
+ });
+
+ }
+
+ function block($block) {
+ $this->sortBlock($block);
+ return parent::block($block);
+ }
+
+}
+
+$less = new lesscNormalized();
+$less->setFormatter(new SortingFormatter);
+echo $less->parse(file_get_contents($fname));
+
diff --git a/vendor/liuggio/statsd-php-client/LICENSE b/vendor/liuggio/statsd-php-client/LICENSE
new file mode 100644
index 00000000..3af47475
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) Giulio De Donato
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/vendor/liuggio/statsd-php-client/Readme.md b/vendor/liuggio/statsd-php-client/Readme.md
new file mode 100644
index 00000000..81083e05
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/Readme.md
@@ -0,0 +1,149 @@
+## statsd-php-client
+
+Be careful, see the [Upgrading section](Readme.md#upgrade) for <= v1.0.4, there's a BC.
+
+[![Build Status](https://secure.travis-ci.org/liuggio/statsd-php-client.png)](http://travis-ci.org/liuggio/statsd-php-client) [![Latest Stable Version](https://poser.pugx.org/liuggio/statsd-php-client/v/stable.png)](https://packagist.org/packages/liuggio/statsd-php-client) [![Total Downloads](https://poser.pugx.org/liuggio/statsd-php-client/downloads.png)](https://packagist.org/packages/liuggio/statsd-php-client)
+
+`statsd-php-client` is an Open Source, and **Object Oriented** Client for **etsy/statsd** written in php
+
+- `StatsdDataFactory` creates the `Liuggio\StatsdClient\Entity\StatsdDataInterface` Objects
+
+- `Sender` just sends data over the network (there are many sender)
+
+- `StatsdClient` sends the created objects via the `Sender` to the server
+
+## Why use this library instead the [statsd/php-example](https://github.com/etsy/statsd/blob/master/examples/php-example.php)?
+
+- You are wise.
+
+- You could also use monolog to redirect data to statsd
+
+- This library is tested.
+
+- This library optimizes the messages to send, compressing multiple messages in individual UDP packets.
+
+- This library pays attention to the maximum length of the UDP.
+
+- This library is made by Objects not array, but it also accepts array.
+
+- You do want to debug the packets, and using `SysLogSender` the packets will be logged in your `syslog` log (on debian-like distro: `tail -f /var/log/syslog`)
+
+
+## Example
+
+1. create the Sender
+
+2. create the Client
+
+3. create the Factory
+
+4. the Factory will help you to create data
+
+5. the Client will send the data
+
+### Standard Usage
+
+```php
+use Liuggio\StatsdClient\StatsdClient,
+ Liuggio\StatsdClient\Factory\StatsdDataFactory,
+ Liuggio\StatsdClient\Sender\SocketSender;
+// use Liuggio\StatsdClient\Sender\SysLogSender;
+
+$sender = new SocketSender(/*'localhost', 8126, 'udp'*/);
+// $sender = new SysLogSender(); // enabling this, the packet will not send over the socket
+
+$client = new StatsdClient($sender);
+$factory = new StatsdDataFactory('\Liuggio\StatsdClient\Entity\StatsdData');
+
+// create the data with the factory
+$data[] = $factory->timing('usageTime', 100);
+$data[] = $factory->increment('visitor');
+$data[] = $factory->decrement('click');
+$data[] = $factory->gauge('gaugor', 333);
+$data[] = $factory->set('uniques', 765);
+
+// send the data as array or directly as object
+$client->send($data);
+```
+
+### Usage with Monolog
+
+```php
+use Liuggio\StatsdClient\StatsdClient,
+ Liuggio\StatsdClient\Factory\StatsdDataFactory,
+ Liuggio\StatsdClient\Sender\SocketSender;
+// use Liuggio\StatsdClient\Sender\SysLogSender;
+
+use Monolog\Logger;
+use Liuggio\StatsdClient\Monolog\Handler\StatsDHandler;
+
+$sender = new SocketSender(/*'localhost', 8126, 'udp'*/);
+// $sender = new SysLogSender(); // enabling this, the packet will not send over the socket
+$client = new StatsdClient($sender);
+$factory = new StatsdDataFactory();
+
+$logger = new Logger('my_logger');
+$logger->pushHandler(new StatsDHandler($client, $factory, 'prefix', Logger::DEBUG));
+
+$logger->addInfo('My logger is now ready');
+```
+
+the output will be: `prefix.my_logger.INFO.My-logger:1|c" 36 Bytes`
+
+
+
+
+## Short Theory
+
+### Easily Install StatSD and Graphite
+
+In order to try this application monitor you have to install etsy/statsd and Graphite
+
+see this blog post to install it with vagrant [Easy install statsd graphite](http://welcometothebundle.com/easily-install-statsd-and-graphite-with-vagrant/).
+
+#### [StatsD](https://github.com/etsy/statsd)
+
+StatsD is a simple daemon for easy stats aggregation
+
+#### [Graphite](http://graphite.wikidot.com/)
+
+Graphite is a Scalable Realtime Graphing
+
+#### The Client sends data with UDP (faster)
+
+https://www.google.com/search?q=tcp+vs+udp
+
+## Contribution
+
+Active contribution and patches are very welcome.
+To keep things in shape we have quite a bunch of unit tests. If you're submitting pull requests please
+make sure that they are still passing and if you add functionality please
+take a look at the coverage as well it should be pretty high :)
+
+- First fork or clone the repository
+
+```
+git clone git://github.com/liuggio/statsd-php-client.git
+cd statsd-php-client
+```
+
+- Install vendors:
+
+``` bash
+composer.phar install
+```
+
+- This will give you proper results:
+
+``` bash
+phpunit --coverage-html reports
+```
+
+## Upgrade
+
+BC from the v1.0.4 version, [see Sender and Client differences](https://github.com/liuggio/statsd-php-client/pull/5/files).
+
+
+## TODO
+
+example with monolog
diff --git a/vendor/liuggio/statsd-php-client/composer.json b/vendor/liuggio/statsd-php-client/composer.json
new file mode 100644
index 00000000..705dbdf8
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/composer.json
@@ -0,0 +1,26 @@
+{
+ "name": "liuggio/statsd-php-client",
+ "description": "Statsd (Object Oriented) client library for PHP",
+ "keywords": ["statsd", "monitoring", "etsy", "php"],
+ "homepage": "https://github.com/liuggio/statsd-php-client/",
+ "type": "library",
+ "license": "MIT",
+ "require": {
+ "php": ">=5.2"
+ },
+ "authors": [
+ {
+ "name": "Giulio De Donato",
+ "email": "liuggio@gmail.com"
+ }
+ ],
+ "autoload": {
+ "psr-0": {"Liuggio": "src/"}
+ },
+ "require-dev": {
+ "monolog/monolog": ">=1.2.0"
+ },
+ "suggest": {
+ "monolog/monolog": "Monolog, in order to do generate statistic from log >=1.2.0)"
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/phpunit.xml.dist b/vendor/liuggio/statsd-php-client/phpunit.xml.dist
new file mode 100644
index 00000000..621efd75
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/phpunit.xml.dist
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit bootstrap="tests/bootstrap.php" colors="true">
+ <testsuites>
+ <testsuite name="Statsd-Service Test Suite">
+ <directory>tests/Liuggio/StatsdClient</directory>
+ </testsuite>
+ </testsuites>
+
+ <filter>
+ <whitelist>
+ <directory suffix=".php">src/Liuggio/</directory>
+ </whitelist>
+ </filter>
+</phpunit> \ No newline at end of file
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php
new file mode 100644
index 00000000..9c6203db
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Liuggio\StatsdClient\Entity;
+
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+
+class StatsdData implements StatsdDataInterface
+{
+
+ private $key;
+ private $value;
+ private $metric;
+
+ /**
+ * @param string $key
+ */
+ public function setKey($key)
+ {
+ $this->key = $key;
+ }
+
+ /**
+ * @return string
+ */
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ /**
+ * @param int $value
+ */
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ /**
+ * @return int
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+
+ public function setMetric($metric)
+ {
+ $this->metric = $metric;
+ }
+
+ public function getMetric()
+ {
+ return $this->metric;
+ }
+
+ /**
+ * @param bool $withMetric
+ *
+ * @return string
+ */
+ public function getMessage($withMetric = true)
+ {
+ if (!$withMetric) {
+ return sprintf('%s:%s', $this->getKey(), $this->getValue());
+ } else {
+ return sprintf('%s:%s|%s', $this->getKey(), $this->getValue(), $this->getMetric());
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->getMessage();
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php
new file mode 100644
index 00000000..846bc7cc
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Liuggio\StatsdClient\Entity;
+
+interface StatsdDataInterface
+{
+ CONST STATSD_METRIC_TIMING = 'ms';
+ CONST STATSD_METRIC_GAUGE = 'g';
+ CONST STATSD_METRIC_SET = 's';
+ CONST STATSD_METRIC_COUNT = 'c';
+
+ /**
+ * @abstract
+ * @return string
+ */
+ function getKey();
+
+ /**
+ * @abstract
+ * @return mixed
+ */
+ function getValue();
+
+ /**
+ * @abstract
+ * @return string
+ */
+ function getMetric();
+
+ /**
+ * @abstract
+ * @return string
+ */
+ function getMessage();
+
+ /**
+ * @abstract
+ * @return string
+ */
+ function __toString();
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php
new file mode 100644
index 00000000..3f39d359
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Exception/InvalidArgumentException.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Liuggio\StatsdClient\Exception;
+
+class InvalidArgumentException extends \InvalidArgumentException
+{
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php
new file mode 100644
index 00000000..7ec1a19e
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php
@@ -0,0 +1,130 @@
+<?php
+
+namespace Liuggio\StatsdClient\Factory;
+
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+
+class StatsdDataFactory implements StatsdDataFactoryInterface
+{
+ /**
+ * @var StatsdDataInterface
+ */
+ private $entityClass;
+
+ public function __construct($entity_class = '\Liuggio\StatsdClient\Entity\StatsdData')
+ {
+ $this->setEntityClass($entity_class);
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function timing($key, $time)
+ {
+ return $this->produceStatsdData($key, $time, StatsdDataInterface::STATSD_METRIC_TIMING);
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function gauge($key, $value)
+ {
+ return $this->produceStatsdData($key, $value, StatsdDataInterface::STATSD_METRIC_GAUGE);
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function set($key, $value)
+ {
+ return $this->produceStatsdData($key, $value, StatsdDataInterface::STATSD_METRIC_SET);
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function increment($key)
+ {
+ return $this->produceStatsdData($key, 1, StatsdDataInterface::STATSD_METRIC_COUNT);
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function decrement($key)
+ {
+ return $this->produceStatsdData($key, -1, StatsdDataInterface::STATSD_METRIC_COUNT);
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function updateCount($key, $delta)
+ {
+ return $this->produceStatsdData($key, $delta, StatsdDataInterface::STATSD_METRIC_COUNT);
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function produceStatsdData($key, $value = 1, $metric = StatsdDataInterface::STATSD_METRIC_COUNT)
+ {
+ $statsdData = $this->produceStatsdDataEntity();
+
+ if (null !== $key) {
+ $statsdData->setKey($key);
+ }
+
+ if (null !== $value) {
+ $statsdData->setValue($value);
+ }
+
+ if (null !== $metric) {
+ $statsdData->setMetric($metric);
+ }
+
+ return $statsdData;
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function produceStatsdDataEntity()
+ {
+ $statsdData = $this->getEntityClass();
+
+ return new $statsdData();
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function setFailSilently($failSilently)
+ {
+ $this->failSilently = $failSilently;
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function getFailSilently()
+ {
+ return $this->failSilently;
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function setEntityClass($entityClass)
+ {
+ $this->entityClass = $entityClass;
+ }
+
+ /**
+ * {@inheritDoc}
+ **/
+ public function getEntityClass()
+ {
+ return $this->entityClass;
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php
new file mode 100644
index 00000000..4d58833b
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Liuggio\StatsdClient\Factory;
+
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+
+Interface StatsdDataFactoryInterface
+{
+
+ /**
+ * This function creates a 'timing' StatsdData.
+ *
+ * @abstract
+ *
+ * @param string|array $key The metric(s) to set.
+ * @param float $time The elapsed time (ms) to log
+ **/
+ function timing($key, $time);
+
+ /**
+ * This function creates a 'gauge' StatsdData.
+ *
+ * @abstract
+ *
+ * @param string|array $key The metric(s) to set.
+ * @param float $value The value for the stats.
+ **/
+ function gauge($key, $value);
+
+ /**
+ * This function creates a 'set' StatsdData object
+ * A "Set" is a count of unique events.
+ * This data type acts like a counter, but supports counting
+ * of unique occurrences of values between flushes. The backend
+ * receives the number of unique events that happened since
+ * the last flush.
+ *
+ * The reference use case involved tracking the number of active
+ * and logged in users by sending the current userId of a user
+ * with each request with a key of "uniques" (or similar).
+ *
+ * @abstract
+ *
+ * @param string|array $key The metric(s) to set.
+ * @param float $value The value for the stats.
+ *
+ * @return array
+ **/
+ function set($key, $value);
+
+ /**
+ * This function creates a 'increment' StatsdData object.
+ *
+ * @abstract
+ *
+ * @param string|array $key The metric(s) to increment.
+ * @param float|1 $sampleRate The rate (0-1) for sampling.
+ *
+ * @return array
+ **/
+ function increment($key);
+
+ /**
+ * This function creates a 'decrement' StatsdData object.
+ *
+ * @abstract
+ *
+ * @param string|array $key The metric(s) to decrement.
+ * @param float|1 $sampleRate The rate (0-1) for sampling.
+ *
+ * @return mixed
+ **/
+ function decrement($key);
+
+ /**
+ * This function creates a 'updateCount' StatsdData object.
+ *
+ * @abstract
+ *
+ * @param string|array $key The metric(s) to decrement.
+ * @param integer $delta The delta to add to the each metric
+ *
+ * @return mixed
+ **/
+ function updateCount($key, $delta);
+
+ /**
+ * Produce a StatsdDataInterface Object.
+ *
+ * @abstract
+ *
+ * @param string $key The key of the metric
+ * @param int $value The amount to increment/decrement each metric by.
+ * @param string $metric The metric type ("c" for count, "ms" for timing, "g" for gauge, "s" for set)
+ *
+ * @return StatsdDataInterface
+ **/
+ function produceStatsdData($key, $value = 1, $metric = StatsdDataInterface::STATSD_METRIC_COUNT);
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php
new file mode 100644
index 00000000..6311112a
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatter.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Liuggio\StatsdClient\Monolog\Formatter;
+
+use Monolog\Formatter\LineFormatter;
+
+/**
+ * Formats incoming records in order to be a perfect StatsD key.
+ *
+ * This is especially useful for logging to files
+ *
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @author Christophe Coevoet <stof@notk.org>
+ * @author Giulio De Donato <liuggio@gmail.com>
+ */
+class StatsDFormatter extends LineFormatter
+{
+ const SIMPLE_FORMAT = "%channel%.%level_name%.%short_message%";
+
+ protected $numberOfWords;
+ protected $logContext;
+ protected $logExtra;
+
+ /**
+ * @param string $format The format of the message
+ * @param Boolean $logContext If true add multiple rows containing Context information
+ * @param Boolean $logExtra If true add multiple rows containing Extra information
+ * @param integer $numberOfWords The number of words to show.
+ */
+ public function __construct($format = null, $logContext = true, $logExtra = true, $numberOfWords = 2)
+ {
+ $this->format = $format ? : static::SIMPLE_FORMAT;
+ $this->numberOfWords = $numberOfWords;
+ $this->logContext = $logContext;
+ $this->logExtra = $logExtra;
+ parent::__construct();
+ }
+
+ /**
+ * This function converts a long message into a string with the first N-words.
+ * eg. from: "Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener"
+ * to: "Notified event"
+ *
+ * @param string $message The message to shortify.
+ *
+ * @return string
+ */
+ public function getFirstWords($message)
+ {
+ $glue = '-';
+ $pieces = explode(' ', $message);
+ array_splice($pieces, $this->numberOfWords);
+ $shortMessage = preg_replace("/[^A-Za-z0-9?![:space:]]/", "-", implode($glue, $pieces));
+
+ return $shortMessage;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function format(array $record)
+ {
+ $vars = $this->normalize($record);
+
+ $firstRow = $this->format;
+ $output = array();
+
+ $vars['short_message'] = $this->getFirstWords($vars['message']);
+ foreach ($vars as $var => $val) {
+ $firstRow = str_replace('%' . $var . '%', $this->convertToString($val), $firstRow);
+ }
+ $output[] = $firstRow;
+ // creating more rows for context content
+ if ($this->logContext && isset($vars['context'])) {
+ foreach ($vars['context'] as $key => $parameter) {
+ $output[] = sprintf("%s.context.%s.%s", $firstRow, $key, $parameter);
+ }
+ }
+ // creating more rows for extra content
+ if ($this->logExtra && isset($vars['extra'])) {
+ foreach ($vars['extra'] as $key => $parameter) {
+ $output[] = sprintf("%s.extra.%s.%s", $firstRow, $key, $parameter);
+ }
+ }
+
+ return $output;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function formatBatch(array $records)
+ {
+ $output = array();
+ foreach ($records as $record) {
+ $output = array_merge($output, $this->format($record));
+ }
+
+ return $output;
+ }
+} \ No newline at end of file
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php
new file mode 100644
index 00000000..86c6d399
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Monolog/Handler/StatsDHandler.php
@@ -0,0 +1,120 @@
+<?php
+
+namespace Liuggio\StatsdClient\Monolog\Handler;
+
+use Monolog\Logger;
+use Monolog\Handler\AbstractProcessingHandler;
+use Monolog\Formatter\FormatterInterface;
+
+use Liuggio\StatsdClient\Monolog\Formatter\StatsDFormatter;
+use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+use Liuggio\StatsdClient\StatsdClientInterface;
+
+/**
+ * A processing handler for StatsD.
+ *
+ * @author Giulio De Donato <liuggio@gmail.com>
+ */
+class StatsDHandler extends AbstractProcessingHandler
+{
+ /**
+ * @var array
+ */
+ protected $buffer = array();
+
+ /**
+ * @var string
+ */
+ protected $prefix;
+
+ /**
+ * @var statsDService
+ */
+ protected $statsDService;
+
+ /**
+ * @var statsDFactory
+ */
+ protected $statsDFactory;
+
+ /**
+ * @param StatsdClientInterface $statsDService The Service sends the packet
+ * @param StatsdDataFactoryInterface $statsDFactory The Factory creates the StatsDPacket
+ * @param string $prefix Statsd key prefix
+ * @param integer $level The minimum logging level at which this handler will be triggered
+ * @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not
+ */
+ public function __construct(StatsdClientInterface $statsDService, StatsdDataFactoryInterface $statsDFactory = null, $prefix, $level = Logger::DEBUG, $bubble = true)
+ {
+ parent::__construct($level, $bubble);
+
+ $this->statsDService = $statsDService;
+ $this->statsDFactory = $statsDFactory ? $statsDFactory : new StatsdDataFactory();
+ $this->prefix = $prefix;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function close()
+ {
+ $this->statsDService->send($this->buffer);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function write(array $record)
+ {
+ $records = is_array($record['formatted']) ? $record['formatted'] : array($record['formatted']);
+
+ foreach ($records as $record) {
+ if (!empty($record)) {
+ $this->buffer[] = $this->statsDFactory->increment(sprintf('%s.%s', $this->getPrefix(), $record));
+ }
+ }
+ }
+
+ /**
+ * Gets the default formatter.
+ *
+ * @return FormatterInterface
+ */
+ protected function getDefaultFormatter()
+ {
+ return new StatsDFormatter();
+ }
+
+ /**
+ * @param string $prefix
+ */
+ public function setPrefix($prefix)
+ {
+ $this->prefix = $prefix;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPrefix()
+ {
+ return $this->prefix;
+ }
+
+ /**
+ * @param StatsdClientInterface $statsDService
+ */
+ public function setStatsDService(StatsdClientInterface $statsDService)
+ {
+ $this->statsDService = $statsDService;
+ }
+
+ /**
+ * @param StatsdDataFactoryInterface $statsDFactory
+ */
+ public function setStatsDFactory(StatsdDataFactoryInterface $statsDFactory)
+ {
+ $this->statsDFactory = $statsDFactory;
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php
new file mode 100644
index 00000000..1015ca94
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/EchoSender.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Liuggio\StatsdClient\Sender;
+
+
+Class EchoSender implements SenderInterface
+{
+ /**
+ * {@inheritDoc}
+ */
+ public function open()
+ {
+ echo "[open]";
+
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ function write($handle, $message, $length = null)
+ {
+ echo "[$message]";
+
+ return strlen($message);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ function close($handle)
+ {
+ echo "[closed]";
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php
new file mode 100644
index 00000000..8dc8fd3a
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SenderInterface.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Liuggio\StatsdClient\Sender;
+
+Interface SenderInterface
+{
+ /**
+ * @abstract
+ * @return mixed
+ */
+ function open();
+
+ /**
+ * @abstract
+ *
+ * @param $handle
+ * @param string $string
+ * @param null $length
+ *
+ * @return mixed
+ */
+ function write($handle, $string, $length = null);
+
+ /**
+ * @abstract
+ *
+ * @param $handle
+ *
+ * @return mixed
+ */
+ function close($handle);
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php
new file mode 100644
index 00000000..c319f077
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SocketSender.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Liuggio\StatsdClient\Sender;
+
+use Liuggio\StatsdClient\Exception\InvalidArgumentException;
+
+Class SocketSender implements SenderInterface
+{
+ private $port;
+ private $host;
+ private $protocol;
+
+ public function __construct($hostname = 'localhost', $port = 8126, $protocol = 'udp')
+ {
+ $this->host = $hostname;
+ $this->port = $port;
+
+ switch ($protocol) {
+ case 'udp':
+ $this->protocol = SOL_UDP;
+ break;
+ case 'tcp':
+ $this->protocol = SOL_TCP;
+ break;
+ default:
+ throw new InvalidArgumentException(sprintf('Use udp or tcp as protocol given %s', $protocol));
+ break;
+ }
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function open()
+ {
+ $fp = socket_create(AF_INET, SOCK_DGRAM, $this->getProtocol());
+
+ return $fp;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function write($handle, $message, $length = null)
+ {
+ return socket_sendto($handle, $message, strlen($message), 0, $this->getHost(), $this->getPort());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function close($handle)
+ {
+ socket_close($handle);
+ }
+
+
+ protected function setHost($host)
+ {
+ $this->host = $host;
+ }
+
+ protected function getHost()
+ {
+ return $this->host;
+ }
+
+ protected function setPort($port)
+ {
+ $this->port = $port;
+ }
+
+ protected function getPort()
+ {
+ return $this->port;
+ }
+
+ protected function setProtocol($protocol)
+ {
+ $this->protocol = $protocol;
+ }
+
+ protected function getProtocol()
+ {
+ return $this->protocol;
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php
new file mode 100644
index 00000000..537ead39
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Sender/SysLogSender.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Liuggio\StatsdClient\Sender;
+
+
+Class SysLogSender implements SenderInterface
+{
+ private $priority;
+
+ public function __construct($priority = LOG_INFO)
+ {
+ $this->priority = $priority;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function open()
+ {
+ syslog($this->priority, "statsd-client-open");
+
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ function write($handle, $message, $length = null)
+ {
+ syslog($this->priority, sprintf("statsd-client-write \"%s\" %d Bytes", $message, strlen($message)));
+
+ return strlen($message);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ function close($handle)
+ {
+ syslog($this->priority, "statsd-client-close");
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php
new file mode 100644
index 00000000..a1d232a5
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClient.php
@@ -0,0 +1,211 @@
+<?php
+
+namespace Liuggio\StatsdClient;
+
+use Liuggio\StatsdClient\Sender\SenderInterface;
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+use Liuggio\StatsdClient\Exception\InvalidArgumentException;
+
+class StatsdClient implements StatsdClientInterface
+{
+ /**
+ * @var boolean
+ */
+ private $failSilently;
+
+ /**
+ * @var \Liuggio\StatsdClient\Sender\SenderInterface
+ */
+ private $sender;
+
+ /**
+ * @var boolean
+ */
+ private $reducePacket;
+
+ /**
+ * Constructor.
+ *
+ * @param \Liuggio\StatsdClient\Sender\SenderInterface $sender
+ * @param Boolean $reducePacket
+ * @param Boolean $fail_silently
+ */
+ public function __construct(SenderInterface $sender, $reducePacket = true, $fail_silently = true)
+ {
+ $this->sender = $sender;
+ $this->reducePacket = $reducePacket;
+ $this->failSilently = $fail_silently;
+ }
+
+ /**
+ * Throws an exc only if failSilently if getFailSilently is false.
+ *
+ * @param \Exception $exception
+ *
+ * @throws \Exception
+ */
+ private function throwException(\Exception $exception)
+ {
+ if (!$this->getFailSilently()) {
+ throw $exception;
+ }
+ }
+
+ /**
+ * This function reduces the number of packets,the reduced has the maximum dimension of self::MAX_UDP_SIZE_STR
+ * Reference:
+ * https://github.com/etsy/statsd/blob/master/README.md
+ * All metrics can also be batch send in a single UDP packet, separated by a newline character.
+ *
+ * @param array $reducedMetrics
+ * @param array $metric
+ *
+ * @return array
+ */
+ private static function doReduce($reducedMetrics, $metric)
+ {
+ $metricLength = strlen($metric);
+ $lastReducedMetric = count($reducedMetrics) > 0 ? end($reducedMetrics) : null;
+
+ if ($metricLength >= self::MAX_UDP_SIZE_STR
+ || null === $lastReducedMetric
+ || strlen($newMetric = $lastReducedMetric . "\n" . $metric) > self::MAX_UDP_SIZE_STR
+ ) {
+ $reducedMetrics[] = $metric;
+ } else {
+ array_pop($reducedMetrics);
+ $reducedMetrics[] = $newMetric;
+ }
+
+ return $reducedMetrics;
+ }
+
+
+ /**
+ * this function reduce the amount of data that should be send
+ *
+ * @param mixed $arrayData
+ *
+ * @return mixed $arrayData
+ */
+ public function reduceCount($arrayData)
+ {
+ if (is_array($arrayData)) {
+ $arrayData = array_reduce($arrayData, "self::doReduce", array());
+ }
+
+ return $arrayData;
+ }
+
+ /**
+ * Reference: https://github.com/etsy/statsd/blob/master/README.md
+ * Sampling 0.1
+ * Tells StatsD that this counter is being sent sampled every 1/10th of the time.
+ *
+ * @param mixed $data
+ * @param int $sampleRate
+ *
+ * @return mixed $data
+ */
+ public function appendSampleRate($data, $sampleRate = 1)
+ {
+ $sampledData = array();
+ if ($sampleRate < 1) {
+ foreach ($data as $key => $message) {
+ $sampledData[$key] = sprintf('%s|@%s', $message, $sampleRate);
+ }
+ $data = $sampledData;
+ }
+
+ return $data;
+ }
+
+ /*
+ * Send the metrics over UDP
+ *
+ * {@inheritDoc}
+ */
+ public function send($data, $sampleRate = 1)
+ {
+ // check format
+ if ($data instanceof StatsdDataInterface || is_string($data)) {
+ $data = array($data);
+ }
+ if (!is_array($data) || empty($data)) {
+ return;
+ }
+ // add sampling
+ if ($sampleRate < 1) {
+ $data = $this->appendSampleRate($data, $sampleRate);
+ }
+ // reduce number of packets
+ if ($this->getReducePacket()) {
+ $data = $this->reduceCount($data);
+ }
+ //failures in any of this should be silently ignored if ..
+ try {
+ $fp = $this->getSender()->open();
+ if (!$fp) {
+ return;
+ }
+ $written = 0;
+ foreach ($data as $key => $message) {
+ $written += $this->getSender()->write($fp, $message);
+ }
+ $this->getSender()->close($fp);
+ } catch (\Exception $e) {
+ $this->throwException($e);
+ }
+
+ return $written;
+ }
+
+ /**
+ * @param boolean $failSilently
+ */
+ public function setFailSilently($failSilently)
+ {
+ $this->failSilently = $failSilently;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function getFailSilently()
+ {
+ return $this->failSilently;
+ }
+
+ /**
+ * @param \Liuggio\StatsdClient\Sender\SenderInterface $sender
+ */
+ public function setSender(SenderInterface $sender)
+ {
+ $this->sender = $sender;
+ }
+
+ /**
+ * @return \Liuggio\StatsdClient\Sender\SenderInterface
+ */
+ public function getSender()
+ {
+ return $this->sender;
+ }
+
+ /**
+ * @param boolean $reducePacket
+ */
+ public function setReducePacket($reducePacket)
+ {
+ $this->reducePacket = $reducePacket;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function getReducePacket()
+ {
+ return $this->reducePacket;
+ }
+
+}
diff --git a/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php
new file mode 100644
index 00000000..e2c75cda
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/StatsdClientInterface.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Liuggio\StatsdClient;
+
+use Liuggio\StatsdClient\Sender\SenderInterface;
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+use Liuggio\StatsdClient\Exception\InvalidArgumentException;
+
+Interface StatsdClientInterface
+{
+ const MAX_UDP_SIZE_STR = 512;
+
+ /*
+ * Send the metrics over UDP
+ *
+ * @abstract
+ * @param array|string|StatsdDataInterface $data message(s) to sent
+ * @param int $sampleRate Tells StatsD that this counter is being sent sampled every Xth of the time.
+ *
+ * @return integer the data sent in bytes
+ */
+ function send($data, $sampleRate = 1);
+}
diff --git a/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Entity/StatsdDataTest.php b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Entity/StatsdDataTest.php
new file mode 100644
index 00000000..fad9175c
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Entity/StatsdDataTest.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Liuggio\StatsdClient\Entity;
+
+use Liuggio\StatsdClient\Entity\StatsdData;
+
+
+class StatsdDataTest extends \PHPUnit_Framework_TestCase
+{
+ public function testGetMessage()
+ {
+ $statsdData = new StatsdData();
+ $statsdData->setKey('key');
+ $statsdData->setValue('value');
+ $statsdData->setMetric('c');
+
+ $this->assertEquals($statsdData->getMessage(), 'key:value|c');
+
+ $statsdData = new StatsdData();
+ $statsdData->setKey('key');
+ $statsdData->setValue(-1);
+ $statsdData->setMetric('c');
+
+ $this->assertEquals($statsdData->getMessage(), 'key:-1|c');
+
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatterTest.php b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatterTest.php
new file mode 100644
index 00000000..daf899aa
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Formatter/StatsDFormatterTest.php
@@ -0,0 +1,169 @@
+<?php
+
+namespace Liuggio\StatsdClient\Tests\Monolog\Formatter;
+
+use Monolog\Logger;
+use Liuggio\StatsdClient\Monolog\Formatter\StatsDFormatter;
+
+/**
+ * @covers Liuggio\StatsdClient\Monolog\Formatter\StatsDFormatter
+ */
+class StatsDFormatterTest extends \PHPUnit_Framework_TestCase
+{
+ public function testBatchFormat()
+ {
+ $formatter = new StatsDFormatter(null, 2);
+ $message = $formatter->formatBatch(array(
+ array(
+ 'level_name' => 'CRITICAL',
+ 'channel' => 'test',
+ 'message' => 'bar',
+ 'context' => array(),
+ 'datetime' => new \DateTime,
+ 'extra' => array(),
+ ),
+ array(
+ 'level_name' => 'WARNING',
+ 'channel' => 'log',
+ 'message' => 'foo',
+ 'context' => array(),
+ 'datetime' => new \DateTime,
+ 'extra' => array(),
+ ),
+ ));
+
+ $this->assertEquals(array('test.CRITICAL.bar', 'log.WARNING.foo'), $message);
+ }
+
+ public function testDefFormatWithString()
+ {
+ $formatter = new StatsDFormatter(StatsDFormatter::SIMPLE_FORMAT);
+ $message = $formatter->format(array(
+ 'level_name' => 'WARNING',
+ 'channel' => 'log',
+ 'context' => array(),
+ 'message' => 'foo',
+ 'datetime' => new \DateTime,
+ 'extra' => array(),
+ ));
+ $this->assertEquals(array('log.WARNING.foo'), $message);
+ }
+
+ public function testDefFormatWithArrayContext()
+ {
+ $formatter = new StatsDFormatter();
+ $message = $formatter->format(array(
+ 'level_name' => 'ERROR',
+ 'channel' => 'meh',
+ 'message' => 'foo',
+ 'datetime' => new \DateTime,
+ 'extra' => array(),
+ 'context' => array(
+ 'foo' => 'bar',
+ 'baz' => 'qux',
+ )
+ ));
+
+ $assert = array('meh.ERROR.foo',
+ 'meh.ERROR.foo.context.foo.bar',
+ 'meh.ERROR.foo.context.baz.qux');
+
+ $this->assertEquals($assert, $message);
+ }
+
+ public function testDefFormatWithArrayContextAndExtra()
+ {
+ $formatter = new StatsDFormatter();
+ $message = $formatter->format(array(
+ 'level_name' => 'ERROR',
+ 'channel' => 'meh',
+ 'message' => 'foo',
+ 'datetime' => new \DateTime,
+ 'extra' => array('extra'=>'woow'),
+ 'context' => array(
+ 'foo' => 'bar',
+ 'baz' => 'qux',
+ )
+ ));
+
+ $assert = array('meh.ERROR.foo',
+ 'meh.ERROR.foo.context.foo.bar',
+ 'meh.ERROR.foo.context.baz.qux',
+ 'meh.ERROR.foo.extra.extra.woow');
+
+ $this->assertEquals($assert, $message);
+
+ }
+
+ public function testDefLongFormat()
+ {
+ $formatter = new StatsDFormatter();
+ $message = $formatter->format(array(
+ 'level_name' => 'DEBUG',
+ 'channel' => 'doctrine',
+ 'message' => 'INSERT INTO viaggio_calendar (enable, viaggio_id, calendar_id) VALUES (?, ?, ?)',
+ 'datetime' => new \DateTime,
+ 'extra' => array(),
+ 'context' => array(
+ 'foo' => 'bar',
+ 'baz' => 'qux',
+ )
+ ));
+ $this->assertEquals(array("doctrine.DEBUG.INSERT-INTO",
+ "doctrine.DEBUG.INSERT-INTO.context.foo.bar",
+ "doctrine.DEBUG.INSERT-INTO.context.baz.qux"), $message);
+ }
+
+ public function testDefLongFormatWith3WordsNoContextAndNoExtra()
+ {
+ $formatter = new StatsDFormatter(null, false, false, 3);
+ $message = $formatter->format(array(
+ 'level_name' => 'DEBUG',
+ 'channel' => 'doctrine',
+ 'message' => 'INSERT INTO viaggio_calendar (enable, viaggio_id, calendar_id) VALUES (?, ?, ?)',
+ 'datetime' => new \DateTime,
+ 'extra' => array(),
+ 'context' => array(
+ 'foo' => 'bar',
+ 'baz' => 'qux',
+ )
+ ));
+ $this->assertEquals(array("doctrine.DEBUG.INSERT-INTO-viaggio-calendar"), $message);
+ }
+ public function testDefRouteException()
+ {
+ $formatter = new StatsDFormatter();
+ $message = $formatter->format(array(
+ 'level_name' => 'DEBUG',
+ 'channel' => 'doctrine',
+ 'message' => 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /ddd" (uncaught exception) at /xxxx/classes.php line 5062',
+ 'datetime' => new \DateTime,
+ 'extra' => array(),
+ ));
+ $this->assertEquals(array('doctrine.DEBUG.Symfony-Component-HttpKernel-Exception-NotFoundHttpException--No'), $message);
+ }
+
+ public function testDefKernelException()
+ {
+ $formatter = new StatsDFormatter();
+ $message = $formatter->format(array(
+ 'level_name' => 'DEBUG',
+ 'channel' => 'doctrine',
+ 'message' => 'Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelException"',
+ 'datetime' => new \DateTime,
+ 'extra' => array(),
+ 'context' => array(
+ 'foo' => 'bar',
+ 'baz' => 'qux',
+ )
+ ));
+
+ $assert = array('doctrine.DEBUG.Notified-event',
+ 'doctrine.DEBUG.Notified-event.context.foo.bar',
+ 'doctrine.DEBUG.Notified-event.context.baz.qux');
+
+ $this->assertEquals($assert, $message);
+
+
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Handler/StatsDHandlerTest.php b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Handler/StatsDHandlerTest.php
new file mode 100644
index 00000000..c1b8eb4b
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/Monolog/Handler/StatsDHandlerTest.php
@@ -0,0 +1,89 @@
+<?php
+
+namespace Liuggio\StatsdClient\Tests\Monolog\Handler;
+
+use Monolog\Logger;
+use Liuggio\StatsdClient\Monolog\Handler\StatsDHandler;
+
+
+class StatsDHandlerTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @return array Record
+ */
+ protected function getRecord($level = Logger::WARNING, $message = 'test', $context = array())
+ {
+ return array(
+ 'message' => $message,
+ 'context' => $context,
+ 'level' => $level,
+ 'level_name' => Logger::getLevelName($level),
+ 'channel' => 'test',
+ 'datetime' => \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true))),
+ 'extra' => array(),
+ );
+ }
+
+ /**
+ * @return array
+ */
+ protected function getMultipleRecords()
+ {
+ return array(
+ $this->getRecord(Logger::DEBUG, 'debug message 1'),
+ $this->getRecord(Logger::DEBUG, 'debug message 2'),
+ $this->getRecord(Logger::INFO, 'information'),
+ $this->getRecord(Logger::WARNING, 'warning'),
+ $this->getRecord(Logger::ERROR, 'error')
+ );
+ }
+
+ /**
+ * @return Monolog\Formatter\FormatterInterface
+ */
+ protected function getIdentityFormatter()
+ {
+ $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface');
+ $formatter->expects($this->any())
+ ->method('format')
+ ->will($this->returnCallback(function($record) { return $record['message']; }));
+
+ return $formatter;
+ }
+
+
+ protected function setup()
+ {
+ if (!interface_exists('Liuggio\StatsdClient\StatsdClientInterface')) {
+ $this->markTestSkipped('The "liuggio/statsd-php-client" package is not installed');
+ }
+ }
+
+ public function testHandle()
+ {
+ $client = $this->getMock('Liuggio\StatsdClient\StatsdClientInterface');
+ $factory = $this->getMock('Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface');
+
+ $factory->expects($this->any())
+ ->method('increment')
+ ->will($this->returnCallback(function ($input){
+ return sprintf('%s|c|1', $input);
+ }));
+
+ $prefixToAssert = 'prefix';
+ $messageToAssert = 'test-msg';
+
+ $record = $this->getRecord(Logger::WARNING, $messageToAssert, array('data' => new \stdClass, 'foo' => 34));
+
+ $assert = array(sprintf('%s.test.WARNING.%s|c|1',$prefixToAssert, $messageToAssert),
+ sprintf('%s.test.WARNING.%s.context.data.[object] (stdClass: {})|c|1',$prefixToAssert, $messageToAssert),
+ sprintf('%s.test.WARNING.%s.context.foo.34|c|1',$prefixToAssert, $messageToAssert));
+
+ $client->expects($this->once())
+ ->method('send')
+ ->with($assert);
+
+ $handler = new StatsDHandler($client, $factory, $prefixToAssert);
+ $handler->handle($record);
+ }
+} \ No newline at end of file
diff --git a/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/ReadmeTest.php b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/ReadmeTest.php
new file mode 100644
index 00000000..4608a601
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/ReadmeTest.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Liuggio\StatsdClient;
+
+use Liuggio\StatsdClient\StatsdClient;
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+//use Liuggio\StatsdClient\Sender\SocketSender;
+
+
+class ReadmeTest extends \PHPUnit_Framework_TestCase
+{
+ public function testFullUsageWithObject() {
+
+ $sender = $this->mockSender();
+ // $sender = new Sender();
+
+ // StatsdClient(SenderInterface $sender, $host = 'udp://localhost', $port = 8126, $reducePacket = true, $fail_silently = true)
+ $client = new StatsdClient($sender);
+ $factory = new StatsdDataFactory('\Liuggio\StatsdClient\Entity\StatsdData');
+
+ // create the data with the factory
+ $data[] = $factory->timing('usageTime', 100);
+ $data[] = $factory->increment('visitor');
+ $data[] = $factory->decrement('click');
+ $data[] = $factory->gauge('gaugor', 333);
+ $data[] = $factory->set('uniques', 765);
+
+ // send the data as array or directly as object
+ $client->send($data);
+ }
+
+
+
+ public function testFullUsageArray() {
+
+ $sender = $this->mockSender();
+ // $sender = new Sender();
+
+ // StatsdClient(SenderInterface $sender, $host = 'localhost', $port = 8126, $protocol='udp', $reducePacket = true, $fail_silently = true)
+ $client = new StatsdClient($sender, $host = 'localhost', $port = 8126, 'udp', $reducePacket = true, $fail_silently = true);
+
+ $data[] ="increment:1|c";
+ $data[] ="set:value|s";
+ $data[] ="gauge:value|g";
+ $data[] = "timing:10|ms";
+ $data[] = "decrement:-1|c";
+ $data[] ="key:1|c";
+
+ // send the data as array or directly as object
+ $client->send($data);
+ }
+
+
+ private function mockSender() {
+ $sender = $this->getMock('\Liuggio\StatsdClient\Sender\SenderInterface', array('open', 'write', 'close'));
+ $sender->expects($this->once())
+ ->method('open')
+ ->will($this->returnValue(true));
+
+ $sender->expects($this->any()) //If you set the reduce = true into the StatsdClient the write will be called once
+ ->method('write')
+ ->will($this->returnCallBack(function($fp, $message) {
+ // echo PHP_EOL . "- " . $message;
+ }));
+
+ $sender->expects($this->once())
+ ->method('close')
+ ->will($this->returnValue(true));
+
+ return $sender;
+ }
+} \ No newline at end of file
diff --git a/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdClientTest.php b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdClientTest.php
new file mode 100644
index 00000000..865f1b2d
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdClientTest.php
@@ -0,0 +1,228 @@
+<?php
+
+namespace Liuggio\StatsdClient;
+
+use Liuggio\StatsdClient\StatsdClient;
+use Liuggio\StatsdClient\Entity\StatsdData;
+
+class StatsdClientTest extends \PHPUnit_Framework_TestCase
+{
+
+ public function mockSenderWithAssertionOnWrite($messageToAssert=null) {
+
+ $mock = $this->getMockBuilder('\Liuggio\StatsdClient\Sender\SocketSender') ->disableOriginalConstructor() ->getMock();
+
+ $phpUnit = $this;
+ $mock->expects($this->any())
+ ->method('open')
+ ->will($this->returnValue(true));
+ // if the input is an array expects a call foreach item
+ if (is_array($messageToAssert)) {
+ $index = 0;
+ foreach ($messageToAssert as $oneMessage) {
+ $index++;
+ $mock->expects($this->at($index))
+ ->method('write')
+ ->will($this->returnCallBack(function($fp, $message) use ($phpUnit, $oneMessage) {
+ $phpUnit->assertEquals($message, $oneMessage);
+ }));
+ }
+ } else if (null !== $messageToAssert){
+ // if the input is a string expects only once
+ $mock->expects($this->once())
+ ->method('write')
+ ->will($this->returnCallBack(function($fp, $message) use ($phpUnit, $messageToAssert) {
+ $phpUnit->assertEquals($message, $messageToAssert);
+ }));
+ }
+ return $mock;
+ }
+
+ public function mockStatsdClientWithAssertionOnWrite($messageToAssert) {
+
+ $mockSender = $this->mockSenderWithAssertionOnWrite($messageToAssert);
+
+ return new StatsdClient($mockSender, false, false);
+ }
+
+ public function mockFactory() {
+
+ $mock = $this->getMock('\Liuggio\StatsdClient\Factory\StatsdDataFactory', array('timing'));
+
+ $statsData = new StatsdData();
+ $statsData->setKey('key');
+ $statsData->setValue('1');
+ $statsData->setMetric('ms');
+
+ $phpUnit = $this;
+ $mock->expects($this->any())
+ ->method('timing')
+ ->will($this->returnValue($statsData));
+
+ return $mock;
+ }
+
+ public static function provider()
+ {
+ /**
+ * First
+ */
+ $statsData0 = new StatsdData();
+ $statsData0->setKey('keyTiming');
+ $statsData0->setValue('1');
+ $statsData0->setMetric('ms');
+ /**
+ * Second
+ */
+ $stats1 = array();
+ $statsData1 = new StatsdData();
+ $statsData1->setKey('keyTiming');
+ $statsData1->setValue('1');
+ $statsData1->setMetric('ms');
+ $stats1[] = $statsData1;
+
+ $statsData1 = new StatsdData();
+ $statsData1->setKey('keyIncrement');
+ $statsData1->setValue('1');
+ $statsData1->setMetric('c');
+ $stats1[] = $statsData1;
+
+ return array(
+ array($statsData0, "keyTiming:1|ms"),
+ array($stats1, array("keyTiming:1|ms", "keyIncrement:1|c")),
+ );
+ }
+ public static function providerSend()
+ {
+ return array(
+ array(array('gauge:value|g'), 'gauge:value|g'),
+ array(array("keyTiming:1|ms", "keyIncrement:1|c"), array("keyTiming:1|ms", "keyIncrement:1|c")),
+ );
+ }
+
+ /**
+ * @dataProvider provider
+ */
+ public function testPrepareAndSend($statsdInput, $assertion) {
+
+ $statsdMock = $this->mockStatsdClientWithAssertionOnWrite($assertion);
+ $statsdMock->send($statsdInput);
+ }
+
+ /**
+ * @dataProvider providerSend
+ */
+ public function testSend($array, $assertion) {
+
+ $statsdMock = $this->mockStatsdClientWithAssertionOnWrite($assertion);
+ $statsdMock->send($array);
+ }
+
+ public function testReduceCount()
+ {
+ $statsd = $this->mockStatsdClientWithAssertionOnWrite(null);
+
+ $entity0 = new StatsdData();
+ $entity0->setKey('key1');
+ $entity0->setValue('1');
+ $entity0->setMetric('c');
+ $array0[] = $entity0;
+
+ $entity0 = new StatsdData();
+ $entity0->setKey('key2');
+ $entity0->setValue('2');
+ $entity0->setMetric('ms');
+ $array0[] = $entity0;
+
+ $reducedMessage = array('key1:1|c' . PHP_EOL . 'key2:2|ms');
+
+ $this->assertEquals($statsd->reduceCount($array0), $reducedMessage);
+
+ }
+
+ public function testReduceWithString()
+ {
+ $statsd = $this->mockStatsdClientWithAssertionOnWrite(null);
+
+ $msg = 'A3456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789:';
+ $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789|c';
+ $array0[] = $msg;
+
+ $msg = 'B3456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789:';
+ $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789|c';
+ $array0[] = $msg;
+ $reduced = $statsd->reduceCount($array0);
+ $combined = $array0[0] . PHP_EOL . $array0[1];
+ $this->assertEquals($combined, $reduced[0]);
+ }
+
+
+ public function testReduceWithMaxUdpPacketSplitInTwoPacket()
+ {
+ $statsd = $this->mockStatsdClientWithAssertionOnWrite(null);
+
+ $msg = 'A3456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789'; //1
+ $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 '; //2
+ $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 '; //3
+ $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 '; //4
+ $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789|c'; //500
+ $array0[] = $msg;
+
+ $msg = 'Bkey:';
+ $msg .= '123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789|c';
+ $array0[] = $msg;
+
+ $reduced = $statsd->reduceCount($array0);
+
+ $this->assertEquals($array0[0], $reduced[0]);
+ $this->assertEquals($array0[1], $reduced[1]);
+ }
+
+
+
+ public function testMultiplePacketsWithReducing()
+ {
+
+ $msg = 'A23456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789';
+ $array0[] = $msg;
+ $array0[] = $msg;
+ $array0[] = $msg;
+ $array0[] = $msg;
+ $array0[] = $msg;
+ $array0[] = $msg;
+ $array0[] = $msg;
+ $array0[] = $msg;
+
+ $total = count($array0) * strlen($msg);
+
+ $reducedPacketsAssertion = (int) ceil($total / StatsdClientInterface::MAX_UDP_SIZE_STR);
+
+
+ $mockSender = $this->mockSenderWithAssertionOnWrite();
+ $statsd = new StatsdClient($mockSender, true, false);
+ $reduced = $statsd->reduceCount($array0);
+
+ $this->assertEquals($reducedPacketsAssertion, count($reduced));
+ }
+
+ public function testSampleRate()
+ {
+ $senderMock = $this->getMock('Liuggio\StatsdClient\Sender\SenderInterface');
+ $senderMock
+ ->expects($this->once())
+ ->method('open')
+ ->will($this->returnValue(true))
+ ;
+ $senderMock
+ ->expects($this->once())
+ ->method('write')
+ ->with($this->anything(), 'foo|@0.2')
+ ;
+ $client = new StatsdClient($senderMock, false, false);
+
+ $client->send(
+ 'foo',
+ 0.2
+ );
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdDataFactoryTest.php b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdDataFactoryTest.php
new file mode 100644
index 00000000..144f629c
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/tests/Liuggio/StatsdClient/StatsdDataFactoryTest.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace Liuggio\StatsdClient\Factory;
+
+use Liuggio\StatsdClient\Factory\StatsdDataFactory;
+
+class StatsDataFactoryTest extends \PHPUnit_Framework_TestCase
+{
+ private $statsDataFactory;
+
+ public function setUp()
+ {
+ $this->statsDataFactory = new StatsdDataFactory('\Liuggio\StatsdClient\Entity\StatsdData');
+ }
+
+ public function testProduceStatsdData()
+ {
+ $key = 'key';
+ $value='val';
+
+ $obj = $this->statsDataFactory->produceStatsdData($key, $value);
+ $this->assertEquals($key, $obj->getKey());
+ $this->assertEquals($value, $obj->getValue());
+ }
+
+ public function testTiming()
+ {
+ $key = 'key';
+ $value = microtime();
+ $valueFloat = (string) floatval($value);
+
+ $obj = $this->statsDataFactory->timing($key, $value);
+ $this->assertEquals($key, $obj->getKey());
+ $this->assertContains($valueFloat, $obj->getValue());
+ $this->assertContains('ms', $obj->getMetric());
+ }
+
+ public function testProduceStatsdDataDecrement()
+ {
+ $key = 'key';
+ $value = -1;
+ $stringValue = intval($value);
+
+ $obj = $this->statsDataFactory->produceStatsdData($key, $value);
+ $this->assertEquals($key, $obj->getKey());
+ $this->assertEquals($stringValue, $obj->getValue());
+ $this->assertEquals('c', $obj->getMetric());
+ }
+
+ public function testGauge()
+ {
+ $key = 'key';
+ $value = 1000;
+ $stringValue = (string) intval($value);
+
+ $obj = $this->statsDataFactory->gauge($key, $value);
+ $this->assertEquals($key, $obj->getKey());
+ $this->assertEquals($stringValue, $obj->getValue());
+ $this->assertEquals('g', $obj->getMetric());
+ }
+
+ public function testDecrement()
+ {
+ $key = 'key';
+ $value = -1;
+ $stringValue = intval($value);
+
+ $obj = $this->statsDataFactory->decrement($key);
+ $this->assertEquals($key, $obj->getKey());
+ $this->assertEquals($stringValue, $obj->getValue());
+ $this->assertEquals('c', $obj->getMetric());
+ }
+
+ public function testcreateStatsdDataIncrement()
+ {
+ $key = 'key';
+ $value = 1;
+ $stringValue = intval($value);
+
+ $obj = $this->statsDataFactory->increment($key);
+ $this->assertEquals($key, $obj->getKey());
+ $this->assertEquals($stringValue, $obj->getValue());
+ $this->assertEquals('c', $obj->getMetric());
+ }
+
+ public function testCreateStatsdDataUpdateCount()
+ {
+ $key = 'key';
+ $value = 10;
+ $stringValue = intval($value);
+
+ $obj = $this->statsDataFactory->updateCount($key, 10);
+ $this->assertEquals($key, $obj->getKey());
+ $this->assertEquals($stringValue, $obj->getValue());
+ $this->assertEquals('c', $obj->getMetric());
+ }
+}
diff --git a/vendor/liuggio/statsd-php-client/tests/bootstrap.php b/vendor/liuggio/statsd-php-client/tests/bootstrap.php
new file mode 100644
index 00000000..0594a467
--- /dev/null
+++ b/vendor/liuggio/statsd-php-client/tests/bootstrap.php
@@ -0,0 +1,5 @@
+<?php
+
+
+$loader = require_once __DIR__ . "/../vendor/autoload.php";
+$loader->add('Liuggio\\', __DIR__); \ No newline at end of file
diff --git a/vendor/oojs/oojs-ui/.csscomb.json b/vendor/oojs/oojs-ui/.csscomb.json
new file mode 100644
index 00000000..c4e215ec
--- /dev/null
+++ b/vendor/oojs/oojs-ui/.csscomb.json
@@ -0,0 +1,24 @@
+{
+ "remove-empty-rulesets": true,
+ "always-semicolon": true,
+ "color-case": "lower",
+ "block-indent": "\t",
+ "color-shorthand": false,
+ "element-case": "lower",
+ "eof-newline": true,
+ "leading-zero": true,
+ "quotes": "double",
+ "space-before-colon": "",
+ "space-after-colon": " ",
+ "space-before-combinator": " ",
+ "space-after-combinator": " ",
+ "space-between-declarations": "\n",
+ "space-before-opening-brace": " ",
+ "space-after-opening-brace": "\n",
+ "space-after-selector-delimiter": "\n",
+ "space-before-selector-delimiter": "",
+ "space-before-closing-brace": "\n",
+ "strip-spaces": true,
+ "unitless-zero": true,
+ "vendor-prefix-align": true
+}
diff --git a/vendor/oojs/oojs-ui/.csslintrc b/vendor/oojs/oojs-ui/.csslintrc
new file mode 100644
index 00000000..e777c7f3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/.csslintrc
@@ -0,0 +1,11 @@
+{
+ "adjoining-classes": false,
+ "box-model": false,
+ "box-sizing": false,
+ "fallback-colors": false,
+ "important": false,
+ "outline-none": false,
+ "qualified-headings": false,
+ "universal-selector": false,
+ "unqualified-attributes": false
+}
diff --git a/vendor/oojs/oojs-ui/.mailmap b/vendor/oojs/oojs-ui/.mailmap
new file mode 100644
index 00000000..84db0c6e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/.mailmap
@@ -0,0 +1,18 @@
+Alex Monk <krenair@gmail.com>
+Alex Monk <krenair@gmail.com> <krenair@wikimedia.org>
+Bartosz Dziewoński <matma.rex@gmail.com>
+Christian Williams <christian@wikia-inc.com>
+David Chan <david@sheetmusic.org.uk>
+Ed Sanders <esanders@wikimedia.org>
+Inez Korczynski <inez@wikia-inc.com>
+James D. Forrester <jforrester@wikimedia.org>
+Kirsten Menger-Anderson <kmenger@wikimedia.org>
+Marielle Volz <marielle.volz@gmail.com>
+Moriel Schottlender <moriel@gmail.com>
+Roan Kattouw <roan.kattouw@gmail.com>
+Roan Kattouw <roan.kattouw@gmail.com> <roan@wikimedia.org>
+Rob Moen <rmoen@wikimedia.org>
+Sucheta Ghoshal <sghoshal@wikimedia.org>
+Timo Tijhof <krinklemail@gmail.com>
+Trevor Parscal <trevorparscal@gmail.com>
+
diff --git a/vendor/oojs/oojs-ui/.npmignore b/vendor/oojs/oojs-ui/.npmignore
new file mode 100644
index 00000000..67aebbfc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/.npmignore
@@ -0,0 +1,2 @@
+/docs
+vendor
diff --git a/vendor/oojs/oojs-ui/AUTHORS.txt b/vendor/oojs/oojs-ui/AUTHORS.txt
new file mode 100644
index 00000000..6813d169
--- /dev/null
+++ b/vendor/oojs/oojs-ui/AUTHORS.txt
@@ -0,0 +1,34 @@
+Principal Authors (major contributors, alphabetically)
+
+Bartosz Dziewoński <matma.rex@gmail.com>
+Ed Sanders <esanders@wikimedia.org>
+James D. Forrester <jforrester@wikimedia.org>
+Kirsten Menger-Anderson <kmenger@wikimedia.org>
+Roan Kattouw <roan@wikimedia.org>
+Rob Moen <rmoen@wikimedia.org>
+Timo Tijhof <timo@wikimedia.org>
+Trevor Parscal <trevor@wikimedia.org>
+
+Patch Contributors (minor contributors, alphabetically)
+
+Alex Monk <krenair@wikimedia.org>
+Amir E. Aharoni <aaharoni@wikimedia.org>
+Antoine Musso <hashar@free.fr>
+Derk-Jan Hartman <hartman.wiki@gmail.com>
+eranroz <eranroz89@gmail.com>
+Erik Moeller <erik@wikimedia.org>
+Erick Guan <fantasticfears@gmail.com>
+Gilles Dubuc <gdubuc@wikimedia.org>
+Inez Korczyński <inez@wikia-inc.com>
+Juliusz Gonera <jgonera@wikimedia.org>
+Kunal Mehta <legoktm@gmail.com>
+Kyle Florence <kflorence@wikia-inc.com>
+May Tee-Galloway <mgalloway@wikimedia.org>
+Moriel Schottlender <moriel@gmail.com>
+Niklas Laxström <nlaxstrom@wikimedia.org>
+Ricordisamoa <ricordisamoa@openmailbox.org>
+rillke <rillke@wikipedia.de>
+Ryan Kaldari <rkaldari@wikimedia.org>
+Sam Reed <reedy@wikimedia.org>
+Sucheta Ghoshal <sghoshal@wikimedia.org>
+Željko Filipin <zeljko.filipin@gmail.com>
diff --git a/vendor/oojs/oojs-ui/Doxyfile b/vendor/oojs/oojs-ui/Doxyfile
new file mode 100644
index 00000000..cf831926
--- /dev/null
+++ b/vendor/oojs/oojs-ui/Doxyfile
@@ -0,0 +1,33 @@
+# Configuration file for Doxygen
+
+PROJECT_NAME = OOjs UI
+PROJECT_BRIEF = Object-Oriented JavaScript – User Interface
+
+OUTPUT_DIRECTORY = docs
+HTML_OUTPUT = php
+
+JAVADOC_AUTOBRIEF = YES
+QT_AUTOBRIEF = YES
+
+WARN_NO_PARAMDOC = YES
+
+INPUT = README.md php/
+FILE_PATTERNS = *.php
+RECURSIVE = YES
+# Requires doxygen 1.8.3+
+USE_MDFILE_AS_MAINPAGE = README.md
+
+HTML_DYNAMIC_SECTIONS = YES
+GENERATE_TREEVIEW = YES
+TREEVIEW_WIDTH = 250
+
+GENERATE_LATEX = NO
+
+HAVE_DOT = YES
+DOT_FONTNAME = Helvetica
+DOT_FONTSIZE = 10
+TEMPLATE_RELATIONS = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
+# Makes dot run faster. Requires graphviz >1.8.10
+DOT_MULTI_TARGETS = YES
diff --git a/vendor/oojs/oojs-ui/Gemfile.lock b/vendor/oojs/oojs-ui/Gemfile.lock
new file mode 100644
index 00000000..a5a0e197
--- /dev/null
+++ b/vendor/oojs/oojs-ui/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ ast (2.0.0)
+ astrolabe (1.3.0)
+ parser (>= 2.2.0.pre.3, < 3.0)
+ parser (2.2.0.pre.7)
+ ast (>= 1.1, < 3.0)
+ slop (~> 3.4, >= 3.4.5)
+ powerpack (0.0.9)
+ rainbow (2.0.0)
+ rubocop (0.27.1)
+ astrolabe (~> 1.3)
+ parser (>= 2.2.0.pre.7, < 3.0)
+ powerpack (~> 0.0.6)
+ rainbow (>= 1.99.1, < 3.0)
+ ruby-progressbar (~> 1.4)
+ ruby-progressbar (1.7.0)
+ slop (3.6.0)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ rubocop
diff --git a/vendor/oojs/oojs-ui/Gruntfile.js b/vendor/oojs/oojs-ui/Gruntfile.js
new file mode 100644
index 00000000..0aa41e42
--- /dev/null
+++ b/vendor/oojs/oojs-ui/Gruntfile.js
@@ -0,0 +1,401 @@
+/*!
+ * Grunt file
+ */
+
+/*jshint node:true */
+module.exports = function ( grunt ) {
+ grunt.loadNpmTasks( 'grunt-banana-checker' );
+ grunt.loadNpmTasks( 'grunt-contrib-clean' );
+ grunt.loadNpmTasks( 'grunt-contrib-concat-sourcemaps' );
+ grunt.loadNpmTasks( 'grunt-contrib-copy' );
+ grunt.loadNpmTasks( 'grunt-contrib-csslint' );
+ grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
+ grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+ grunt.loadNpmTasks( 'grunt-contrib-less' );
+ grunt.loadNpmTasks( 'grunt-contrib-uglify' );
+ grunt.loadNpmTasks( 'grunt-contrib-watch' );
+ grunt.loadNpmTasks( 'grunt-csscomb' );
+ grunt.loadNpmTasks( 'grunt-exec' );
+ grunt.loadNpmTasks( 'grunt-file-exists' );
+ grunt.loadNpmTasks( 'grunt-cssjanus' );
+ grunt.loadNpmTasks( 'grunt-jscs' );
+ grunt.loadNpmTasks( 'grunt-karma' );
+ grunt.loadNpmTasks( 'grunt-svg2png' );
+ grunt.loadTasks( 'build/tasks' );
+
+ var modules = grunt.file.readJSON( 'build/modules.json' ),
+ pgk = grunt.file.readJSON( 'package.json' ),
+ lessFiles = {
+ raster: {},
+ vector: {},
+ mixed: {}
+ },
+ colorizeSvgFiles = {},
+ requiredFiles = modules[ 'oojs-ui' ].scripts.slice(),
+ concatCssFiles = {},
+ rtlFiles = {},
+ minBanner = '/*! OOjs UI v<%= pkg.version %> | http://oojs.mit-license.org */';
+
+ ( function () {
+ var distFile, target, module, moduleStyleFiles;
+ function rtlPath( fileName ) {
+ return fileName.replace( /\.(\w+)$/, '.rtl.$1' );
+ }
+ // Generate all task targets required to process given file into a pair of CSS files (for LTR
+ // and RTL), and return file name of LTR file.
+ function processFile( fileName ) {
+ var lessFileName, cssFileName, theme, path;
+ path = require( 'path' );
+ if ( path.extname( fileName ) === '.json' ) {
+ lessFileName = fileName.replace( /\.json$/, '.less' ).replace( /^src/, 'dist/tmp' );
+ theme = path.basename( path.dirname( fileName ) );
+
+ colorizeSvgFiles[ fileName.replace( /.+\/(\w+)\/([\w-]+)\.(?:json|less)$/, '$1-$2' ) ] = {
+ options: grunt.file.readJSON( fileName ),
+ srcDir: 'src/themes/' + theme,
+ destDir: 'dist/themes/' + theme,
+ // This should not be needed, but our dist directory structure is weird
+ cssPrependPath: 'themes/' + theme + '/',
+ destLessFile: {
+ ltr: lessFileName,
+ rtl: rtlPath( lessFileName )
+ }
+ };
+
+ cssFileName = fileName.replace( /\.json$/, '.css' ).replace( /^src/, 'dist/tmp/' + target );
+ lessFiles[ target ][ cssFileName ] = [ lessFileName ];
+ lessFiles[ target ][ rtlPath( cssFileName ) ] = [ rtlPath( lessFileName ) ];
+ } else {
+ cssFileName = fileName.replace( /\.less$/, '.css' ).replace( /^src/, 'dist/tmp/' + target );
+ lessFiles[ target ][ cssFileName ] = [ fileName ];
+ rtlFiles[ rtlPath( cssFileName ) ] = cssFileName;
+ }
+ return cssFileName;
+ }
+ for ( module in modules ) {
+ if ( modules[ module ].styles ) {
+ moduleStyleFiles = modules[ module ].styles;
+ for ( target in lessFiles ) {
+ requiredFiles.push.apply( requiredFiles, moduleStyleFiles );
+
+ distFile = 'dist/' + module + ( target !== 'mixed' ? '.' + target : '' ) + '.css';
+
+ concatCssFiles[ distFile ] = moduleStyleFiles.map( processFile );
+ concatCssFiles[ rtlPath( distFile ) ] = concatCssFiles[ distFile ].map( rtlPath );
+ }
+ }
+ }
+ }() );
+
+ function strip( str ) {
+ var path = require( 'path' );
+ // http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically
+ // http://gruntjs.com/api/grunt.file#grunt.file.expandmapping
+ return function ( dest, src ) {
+ return path.join( dest, src.replace( str, '' ) );
+ };
+ }
+
+ grunt.initConfig( {
+ pkg: pgk,
+
+ // Build
+ clean: {
+ build: 'dist/*',
+ doc: 'docs/*',
+ tmp: 'dist/tmp'
+ },
+ fileExists: {
+ src: requiredFiles
+ },
+ typos: {
+ options: {
+ typos: 'build/typos.json'
+ },
+ src: '{src,php}/**/*.{js,json,less,css}'
+ },
+ concat: {
+ options: {
+ banner: grunt.file.read( 'build/banner.txt' )
+ },
+ js: {
+ files: {
+ 'dist/oojs-ui.js': modules[ 'oojs-ui' ].scripts,
+ 'dist/oojs-ui-apex.js': modules[ 'oojs-ui-apex' ].scripts,
+ 'dist/oojs-ui-mediawiki.js': modules[ 'oojs-ui-mediawiki' ].scripts
+ }
+ },
+ css: {
+ files: concatCssFiles
+ },
+ demoCss: {
+ options: {
+ banner: '/** This file is generated automatically. Do not modify it. */\n\n'
+ },
+ files: {
+ 'demos/styles/demo.rtl.css': 'demos/styles/demo.rtl.css'
+ }
+ }
+ },
+
+ // Build – Code
+ uglify: {
+ options: {
+ banner: minBanner,
+ sourceMap: true,
+ sourceMapIncludeSources: true,
+ report: 'gzip'
+ },
+ js: {
+ expand: true,
+ src: 'dist/*.js',
+ ext: '.min.js',
+ extDot: 'last'
+ }
+ },
+
+ // Build – Styling
+ less: {
+ distRaster: {
+ options: {
+ ieCompat: true,
+ report: 'gzip',
+ modifyVars: {
+ 'oo-ui-distribution': 'raster',
+ 'oo-ui-default-image-ext': 'png'
+ }
+ },
+ files: lessFiles.raster
+ },
+ distVector: {
+ options: {
+ ieCompat: false,
+ report: 'gzip',
+ modifyVars: {
+ 'oo-ui-distribution': 'vector',
+ 'oo-ui-default-image-ext': 'svg'
+ }
+ },
+ files: lessFiles.vector
+ },
+ distMixed: {
+ options: {
+ ieCompat: false,
+ report: 'gzip',
+ modifyVars: {
+ 'oo-ui-distribution': 'mixed',
+ 'oo-ui-default-image-ext': 'png'
+ }
+ },
+ files: lessFiles.mixed
+ }
+ },
+ cssjanus: {
+ options: {
+ generateExactDuplicates: true
+ },
+ dist: {
+ files: rtlFiles
+ },
+ demoCss: {
+ files: {
+ 'demos/styles/demo.rtl.css': 'demos/styles/demo.css'
+ }
+ }
+ },
+ csscomb: {
+ dist: {
+ expand: true,
+ src: 'dist/*.css'
+ }
+ },
+ copy: {
+ imagesCommon: {
+ src: 'src/styles/images/*.cur',
+ dest: 'dist/images/',
+ expand: true,
+ flatten: true
+ },
+ imagesApex: {
+ src: 'src/themes/apex/images/**/*.{png,gif}',
+ dest: 'dist/themes/apex/images/',
+ expand: true,
+ rename: strip( 'src/themes/apex/images/' )
+ },
+ imagesMediaWiki: {
+ src: 'src/themes/mediawiki/images/**/*.{png,gif}',
+ dest: 'dist/themes/mediawiki/images/',
+ expand: true,
+ rename: strip( 'src/themes/mediawiki/images/' )
+ },
+ i18n: {
+ src: 'i18n/*.json',
+ expand: true,
+ dest: 'dist/'
+ },
+ jsduck: {
+ // Don't publish devDependencies
+ src: '{dist,node_modules/{' + Object.keys( pgk.dependencies ).join( ',' ) + '}}/**/*',
+ dest: 'docs/',
+ expand: true
+ }
+ },
+ colorizeSvg: colorizeSvgFiles,
+ svg2png: {
+ dist: {
+ src: 'dist/{images,themes}/**/*.svg'
+ }
+ },
+ cssmin: {
+ options: {
+ keepSpecialComments: 0,
+ banner: minBanner,
+ compatibility: 'ie8',
+ report: 'gzip'
+ },
+ dist: {
+ expand: true,
+ src: 'dist/*.css',
+ ext: '.min.css',
+ extDot: 'last'
+ }
+ },
+
+ // Lint – Code
+ jshint: {
+ options: {
+ jshintrc: true
+ },
+ dev: [
+ '*.js',
+ '{build,demos,src,tests}/**/*.js',
+ '!tests/JSPHP.test.js'
+ ]
+ },
+ jscs: {
+ dev: [
+ '<%= jshint.dev %>',
+ '!demos/dist/**'
+ ]
+ },
+
+ // Lint – Styling
+ csslint: {
+ options: {
+ csslintrc: '.csslintrc'
+ },
+ all: [
+ '{demos,src}/**/*.css',
+ '!demos/dist/**'
+ ]
+ },
+
+ // Lint – i18n
+ banana: {
+ all: 'i18n/'
+ },
+
+ // Test
+ exec: {
+ rubyTestSuiteGenerator: {
+ command: 'ruby bin/testsuitegenerator.rb src php > tests/JSPHP-suite.json'
+ },
+ phpGenerateJSPHPForKarma: {
+ command: 'php ../bin/generate-JSPHP-for-karma.php > JSPHP.test.js',
+ cwd: './tests'
+ }
+ },
+ karma: {
+ options: {
+ frameworks: [ 'qunit' ],
+ files: [
+ 'node_modules/jquery/dist/jquery.js',
+ 'node_modules/oojs/dist/oojs.jquery.js',
+ 'dist/oojs-ui.js',
+ 'dist/oojs-ui-apex.js',
+ 'dist/oojs-ui-mediawiki.js',
+ 'tests/QUnit.assert.equalDomElement.js',
+ 'tests/**/*.test.js'
+ ],
+ reporters: [ 'dots' ],
+ singleRun: true,
+ browserDisconnectTimeout: 5000,
+ browserDisconnectTolerance: 2,
+ autoWatch: false
+ },
+ main: {
+ browsers: [ 'Chrome' ],
+ preprocessors: {
+ 'dist/*.js': [ 'coverage' ]
+ },
+ reporters: [ 'dots', 'coverage' ],
+ coverageReporter: { reporters: [
+ { type: 'html', dir: 'coverage/' },
+ { type: 'text-summary', dir: 'coverage/' }
+ ] }
+ },
+ other: {
+ browsers: [ 'Firefox' ]
+ }
+ },
+
+ // Development
+ watch: {
+ files: [
+ '<%= jshint.dev %>',
+ '<%= csslint.all %>',
+ '{demos,src}/**/*.less',
+ '.{csslintrc,jscsrc,jshintignore,jshintrc}'
+ ],
+ tasks: 'quick-build'
+ }
+ } );
+
+ grunt.registerTask( 'pre-test', function () {
+ // Only create Source maps when doing a git-build for testing and local
+ // development. Distributions for export should not, as the map would
+ // be pointing at "../src".
+ grunt.config.set( 'concat.js.options.sourceMap', true );
+ grunt.config.set( 'concat.js.options.sourceMapStyle', 'link' );
+ } );
+
+ grunt.registerTask( 'pre-git-build', function () {
+ var done = this.async();
+ require( 'child_process' ).exec( 'git rev-parse HEAD', function ( err, stout, stderr ) {
+ if ( !stout || err || stderr ) {
+ grunt.log.err( err || stderr );
+ done( false );
+ return;
+ }
+ grunt.config.set( 'pkg.version', grunt.config( 'pkg.version' ) + '-pre (' + stout.slice( 0, 10 ) + ')' );
+ grunt.verbose.writeln( 'Added git HEAD to pgk.version' );
+ done();
+ } );
+ } );
+
+ grunt.registerTask( 'build-code', [ 'concat:js', 'uglify' ] );
+ grunt.registerTask( 'build-styling', [
+ 'colorizeSvg', 'less', 'cssjanus',
+ 'concat:css', 'concat:demoCss', 'csscomb', 'cssmin',
+ 'copy:imagesCommon', 'copy:imagesApex', 'copy:imagesMediaWiki', 'svg2png'
+ ] );
+ grunt.registerTask( 'build-i18n', [ 'copy:i18n' ] );
+ grunt.registerTask( 'build-tests', [ 'exec:rubyTestSuiteGenerator', 'exec:phpGenerateJSPHPForKarma' ] );
+ grunt.registerTask( 'build', [ 'clean:build', 'fileExists', 'typos', 'build-code', 'build-styling', 'build-i18n', 'build-tests', 'clean:tmp' ] );
+
+ grunt.registerTask( 'git-build', [ 'pre-git-build', 'build' ] );
+
+ // Quickly build a no-frills vector-only ltr-only version for development
+ grunt.registerTask( 'quick-build', [
+ 'pre-git-build', 'clean:build', 'fileExists', 'typos',
+ 'concat:js',
+ 'colorizeSvg', 'less:distVector', 'concat:css',
+ 'copy:imagesCommon', 'copy:imagesApex', 'copy:imagesMediaWiki',
+ 'build-i18n'
+ ] );
+
+ grunt.registerTask( 'lint', [ 'jshint', 'jscs', 'csslint', 'banana' ] );
+ grunt.registerTask( 'test', [ 'lint', 'pre-test', 'git-build', 'karma:main', 'karma:other' ] );
+
+ grunt.registerTask( 'default', 'test' );
+};
diff --git a/vendor/oojs/oojs-ui/History.md b/vendor/oojs/oojs-ui/History.md
new file mode 100644
index 00000000..905b6b11
--- /dev/null
+++ b/vendor/oojs/oojs-ui/History.md
@@ -0,0 +1,668 @@
+# OOjs UI Release History
+
+## v0.11.3 / 2015-05-12
+* BarToolGroup: Don't use "pointer" cursor for disabled tools in enabled toolgroups (Bartosz Dziewoński)
+* Tool: Support icon+label in bar tool groups (Bartosz Dziewoński)
+* ToolGroupTool: Correct opacity of disabled nested tool group handle (Bartosz Dziewoński)
+* ToolGroupTool: Synchronize inner ToolGroup disabledness state (Bartosz Dziewoński)
+* MediaWiki theme: Add a powerful default text color for tools (Trevor Parscal)
+* MediaWiki theme: Adjust quotes icon to match other icons (nirzar)
+* MediaWiki theme: Give names to some more toolbar colours (Bartosz Dziewoński)
+* MediaWiki theme: Provide all variants of the 'tag' icon (James D. Forrester)
+* MediaWiki theme: Rejigger some toolbar coloring (Bartosz Dziewoński)
+* MediaWiki theme: Remove box-shadow from nested toolbars (Bartosz Dziewoński)
+* MediaWiki theme: Remove unusued toolbar shadow (Trevor Parscal)
+* MediaWiki theme: Update button specification (nirzar)
+
+## v0.11.2 / 2015-05-11
+* Don't select lookup items on initialize (Ed Sanders)
+* ListToolGroup, MenuToolGroup: Set accelTooltips = false (Bartosz Dziewoński)
+* PopupWidget: Add setAlignment (Moriel Schottlender)
+* SelectWidget: Mark as @abstract, which it is (Bartosz Dziewoński)
+* Simplify default action prevention in buttons and forms (Bartosz Dziewoński)
+* TabOptionWidget: Fix disabled styles to not react to hover/select (Ed Sanders)
+* TextInputWidget: Allow override of #setValidityFlag (Ed Sanders)
+* TextInputWidget: Use aria-required along with the required attribute (Prateek Saxena)
+* Toolbar: Fix shadow styling (Bartosz Dziewoński)
+* Toolbar: Move some tweaks from demo to actual implementation (Bartosz Dziewoński)
+* Toolbar: Remove some useless code from the example (Bartosz Dziewoński)
+* Toolbar: Rework example and add 'menu' tool group example (Bartosz Dziewoński)
+* MediaWiki theme: Change highlight color for selected menu option (nirzar)
+* MediaWiki theme: Polish the toolbar design (nirzar)
+* MediaWiki theme: Remove accidentally duplicated styles for SelectWidget (Bartosz Dziewoński)
+
+## v0.11.1 / 2015-05-04
+* Add IndexLayout (Trevor Parscal)
+* CardLayout: Fix typo (Kirsten Menger-Anderson)
+* LabelElement: Document that label config option can take an HtmlSnippet (Roan Kattouw)
+* PopupButtonWidget: Update align config in example (Kirsten Menger-Anderson)
+* Remove GridLayout remnants (Bartosz Dziewoński)
+* SelectWidget: Add #selectItemByData method (Moriel Schottlender)
+* TabOptionWidget: Change link to card layout (Kirsten Menger-Anderson)
+* TextInputWidget: Annotate input validation with aria-invalid (Prateek Saxena)
+* TextInputWidget: Don't set 'invalid' flag on first focus, even if invalid (Bartosz Dziewoński)
+* TextInputWidget: Support 'required' config option in PHP (Bartosz Dziewoński)
+* MediaWiki theme: Add 'destructive' variant to block icon (Moriel Schottlender)
+* MediaWiki theme: Better vertical alignment of 'search' icon (Ed Sanders)
+* MediaWiki theme: Tweak 'search' icon size (Ed Sanders)
+* MediaWiki theme: Use variable for transition time and easing function (Prateek Saxena)
+* MediaWiki theme: input: Use variable for transition time and easing function (Prateek Saxena)
+* MediaWiki theme: radio/checkbox: Use variable for transition time and easing function (Prateek Saxena)
+* MediaWiki, Apex themes: Switch icons: clear → cancel, closeInput → clear (Bartosz Dziewoński)
+* MediaWiki, Apex themes: Switch over 'magnifyingGlass' icon to be 'search' (James D. Forrester)
+* build: Add clean:doc task (Bartosz Dziewoński)
+* build: Bump grunt-jscs to latest version (James D. Forrester)
+* core: Add OO.ui.debounce() utility (Roan Kattouw)
+* demo: Add icons with variants to icons demo (Bartosz Dziewoński)
+
+## v0.11.0 / 2015-04-29
+* [BREAKING CHANGE] Do not set font-size: 0.8em anywhere in the library (Bartosz Dziewoński)
+
+* [DEPRECATING CHANGE] Create rtl-ready alignments in PopupWidget (Moriel Schottlender)
+
+* MediaWiki theme: Adding variants to several icons (Moriel Schottlender)
+* TextInputWidget: Allow functions to be passed as 'validate' config option (Bartosz Dziewoński)
+* TextInputWidget: Styles for 'invalid' flag (Bartosz Dziewoński)
+* Update OOjs to v1.1.7 (James D. Forrester)
+* Update jQuery from v1.11.1 to v1.11.3 (James D. Forrester)
+* build: Use jquery and oojs from npm instead of embedded lib (Timo Tijhof)
+
+## v0.10.1 / 2015-04-27
+* Correct 'tabindex' attribute setting (Bartosz Dziewoński)
+* Make toolbars keyboard-accessible (Bartosz Dziewoński)
+* ToggleButtonWidget: Unbreak horizontal alignment (Bartosz Dziewoński)
+
+## v0.10.0 / 2015-04-22
+* [BREAKING CHANGE] ButtonWidget: remove deprecated nofollow option alias (C. Scott Ananian)
+* [BREAKING CHANGE] Convert ToggleWidget from a mixin to an abstract class (Bartosz Dziewoński)
+* [BREAKING CHANGE] MenuLayout: Reimplement without inline styles (Bartosz Dziewoński)
+
+* BarToolGroup: Allow tools with labels instead of icons (Bartosz Dziewoński)
+* BookletLayout: Find first focusable element and add focusable utility (Moriel Schottlender)
+* ButtonInputWidget: Don't double-mixin FlaggedElement (Bartosz Dziewoński)
+* ButtonWidget: Remove href to make unclickable when disabled (Bartosz Dziewoński)
+* ButtonWidget: Remove pointless #isHyperlink property (Bartosz Dziewoński)
+* FormLayout: Better document how this works with InputWidgets (Bartosz Dziewoński)
+* MenuLayout: Add example (Kirsten Menger-Anderson)
+* MenuLayout: Fix initialization order (Bartosz Dziewoński)
+* PHP: More useful debugging information on unsafe tag attributes (Chad Horohoe)
+* SelectWidget#getTargetItem: Simplify (Ed Sanders)
+* Toolbar: Add example (Bartosz Dziewoński)
+* themes: Add viewCompact, viewDetails, visionSimulator icons for iconography page (Mun May Tee)
+* demo: Remove VisualEditor references from toolbar demo, use generic icons (Ed Sanders)
+* demo: Remove outline controls from outlined BookletLayout demo (Bartosz Dziewoński)
+* demo: Simplify ButtonGroupWidget and ButtonSelectWidget examples (Bartosz Dziewoński)
+
+## v0.9.8 / 2015-04-12
+* Apex, MediaWiki: Correct or delete unused SVG files (James D. Forrester)
+* Apex theme: Correctly position popups in RTL; follows-up v0.9.5 (Moriel Schottlender)
+* BookletLayout: Allow focus on any item (Moriel Schottlender)
+* Error: Add description (Kirsten Menger-Anderson)
+* Move coverage output from "/dist/coverage" to "/coverage" (Timo Tijhof)
+* ProcessDialog: Remove stray 'this.$' from documentation code example (Roan Kattouw)
+* ProgressBarWidget: Remove spurious styles from CSS output (Bartosz Dziewoński)
+* build: Add explicit dependency upon grunt-cli (Kunal Mehta)
+* build: Run lint before build in grunt-test (Timo Tijhof)
+* colorize-svg: Generate language-specific rules for images even if equal to default ones (Bartosz Dziewoński)
+* colorize-svg: Sprinkle `/* @noflip */` on language-specific rules (Bartosz Dziewoński)
+* demo: Change html dir property when direction changes (Moriel Schottlender)
+
+## v0.9.7 / 2015-04-03
+* build: Generate correct paths to fallback images (Bartosz Dziewoński)
+
+## v0.9.5 / 2015-04-02
+* [DEPRECATING CHANGE] Deprecate search widget event re-emission (Ed Sanders)
+
+* ActionFieldLayout: Add description and example (Kirsten Menger-Anderson)
+* Add vertical spacing to RadioSelectWidget in MW theme (Ed Sanders)
+* Allow rejecting Process with single Error (Matthew Flaschen)
+* Apex theme: Tweak 'check.svg' syntax (Bartosz Dziewoński)
+* Balance padding now that focus highlight is balanced (Ed Sanders)
+* BookletLayout: Add description and example (Kirsten Menger-Anderson)
+* Bring in remaining VisualEditor icons for Apex and MediaWiki themes (James D. Forrester)
+* Choose can't emit with a null item (Ed Sanders)
+* Correctly position popups in RTL (Moriel Schottlender)
+* Fix opacity of icons/indicators in disabled DecoratedOptionWidget (Ed Sanders)
+* IconWidget: Mix in FlaggedElement (Bartosz Dziewoński)
+* Increase specificity of ButtonElement icon and indicator styles (Bartosz Dziewoński)
+* Make colorize-svg.js actually work more often (Bartosz Dziewoński)
+* MediaWiki theme: Allow intention flags for non-buttons (Andrew Garrett)
+* MediaWiki theme: Fix icon opacity for disabled ButtonOptionWidgets (Bartosz Dziewoński)
+* MediaWiki theme: Use checkbox icon per mockups (Bartosz Dziewoński)
+* MediaWiki, Apex: Provide an RTL variant for the help icon (James D. Forrester)
+* MenuLayout: Correct documentation (Bartosz Dziewoński)
+* OutlineOption: Add description (Kirsten Menger-Anderson)
+* PageLayout: Add description (Kirsten Menger-Anderson)
+* Process: Add description (Kirsten Menger-Anderson)
+* Properly support LTR/RTL icon versions in colorize-svg.js (Bartosz Dziewoński)
+* Refactor icon handling again (Bartosz Dziewoński)
+* Remove line height reset for windows (Ed Sanders)
+* Restore font family definitions to form elements (Ed Sanders)
+* Revert "Button styles between OOJS and MW" (Bartosz Dziewoński)
+* StackLayout: Add description and example (Kirsten Menger-Anderson)
+* build: Add a 'generated automatically' banner to demo.rtl.css (Bartosz Dziewoński)
+* build: Generate prettier task names for 'colorizeSvg' (Bartosz Dziewoński)
+* build: Have separate 'cssjanus' target for demo.rtl.css (Bartosz Dziewoński)
+* build: Simplify 'fileExists' task configuration (Bartosz Dziewoński)
+* build: Support (poorly) per-language icon versions in colorize-svg.js (Bartosz Dziewoński)
+* build: Update grunt-banana-checker to v0.2.1 (James D. Forrester)
+
+## v0.9.4 / 2015-03-25
+* ButtonElement: Clarify description (Kirsten Menger-Anderson)
+* ButtonElement: Disable line wrapping on buttons (Ed Sanders)
+* Compensate for loss of margin when opening modals (Ed Sanders)
+* FieldLayout: Clarify description and mark private methods (Kirsten Menger-Anderson)
+* FieldsetLayout: Add description and example (Kirsten Menger-Anderson)
+* FormLayout: Add description, example, and mark private method (Kirsten Menger-Anderson)
+* Layout: Add description (Kirsten Menger-Anderson)
+* LookupElement: Add description and mark private and protected methods (Kirsten Menger-Anderson)
+* LookupElement: Fix typo in docs (Bartosz Dziewoński)
+* Make outline controls abilities configurable (Trevor Parscal)
+* MenuLayout: Reorder styles (Bartosz Dziewoński)
+* MenuSectionOptionWidget: Add description and example (Kirsten Menger-Anderson)
+* ProcessDialog#executeAction: Don't eat parent's return value (Roan Kattouw)
+* PanelLayout: Add description and example (Kirsten Menger-Anderson)
+* Reduce thickness of toolbar border in MediaWiki (Ed Sanders)
+* SearchWidget: Add description and mark private methods (Kirsten Menger-Anderson)
+* TabIndexElement: Mark private method (Kirsten Menger-Anderson)
+
+## v0.9.3 / 2015-03-19
+* Add .mailmap file (Roan Kattouw)
+* Add Kirsten to AUTHORS.txt (Roan Kattouw)
+* Dialog: Fix links to static properties (Kirsten Menger-Anderson)
+* DraggableGroupElement: Clarify description and mark private methods (Kirsten Menger-Anderson)
+* Fix code style in @examples (Ed Sanders)
+* FlaggedElement: Add example and clarify description (Kirsten Menger-Anderson)
+* GroupElement: Clarify description (Kirsten Menger-Anderson)
+* IndicatorElement: Clarify description (Kirsten Menger-Anderson)
+* LookupElement: Add optional config field for suggestions when empty (Matthew Flaschen)
+* MenuSelectWidget: Clarify description (Kirsten Menger-Anderson)
+* ProcessDialog: send an array to showErrors in failed executeAction (Moriel Schottlender)
+* TabIndexedElement: Clarify description (Kirsten Menger-Anderson)
+* TitledElement: Clarify description (Kirsten Menger-Anderson)
+* Update OOjs to v1.1.6 (James D. Forrester)
+* Widget: Clarify description (Kirsten Menger-Anderson)
+* Window: Clarify description of setDimensions method (Kirsten Menger-Anderson)
+* WindowManager: Clarify description and mark private methods (Kirsten Menger-Anderson)
+* demo: Add one more toolbars demo (Bartosz Dziewoński)
+
+## v0.9.2 / 2015-03-12
+* Toolbar: Be less aggressive with 'white-space: nowrap' (Bartosz Dziewoński)
+* Window: Revert changes from 521061dd (Bartosz Dziewoński)
+
+## v0.9.1 / 2015-03-11
+* Syncing some button styles with MediaWiki UI (kaldari)
+* MediaWiki Theme: Add the progressive variant to the check icon (Prateek Saxena)
+* demo: Fix typo in toolbars demo (Bartosz Dziewoński)
+* TextInputWidget: Use MutationObserver for #onElementAttach support (Bartosz Dziewoński)
+* TextInputWidget: Adjust size and label on first focus, too (Bartosz Dziewoński)
+* jsduck: Add MouseEvent and KeyboardEvent to externals (Timo Tijhof)
+* jsduck: Set --processes=0 to fix warnings-exit-nonzero (Timo Tijhof)
+* Dialog: Mark private methods and add description of methods and configs (Kirsten Menger-Anderson)
+* ProcessDialog: Add description and example and mark private methods (Kirsten Menger-Anderson)
+* MessageDialog: Add description, example, and mark private methods (Kirsten Menger-Anderson)
+* build: Remove obsolete 'build' task from grunt-doc (Timo Tijhof)
+* build: Move pre/post 'doc' task into package.json (Timo Tijhof)
+* Remove remnants of window isolation (Bartosz Dziewoński)
+* demo: Simplify @media styles (Bartosz Dziewoński)
+* PanelLayout: Add 'framed' config option (Bartosz Dziewoński)
+* TextInputMenuSelectWidget: Add description and mark private methods (Kirsten Menger-Anderson)
+* Toolbar: Tighten whitespace on narrow displays (Bartosz Dziewoński)
+* demo: Use popup with head in the toolbars demo (Bartosz Dziewoński)
+* Remove half-baked touch event handling (Bartosz Dziewoński)
+* ButtonElement: Use #setButtonElement correctly (Bartosz Dziewoński)
+* WindowManager: Documentation typo (Ed Sanders)
+* ButtonInputWidget: Clarify description of configs and methods (Kirsten Menger-Anderson)
+* Icon width should only be applied if there is an icon (Moriel Schottlender)
+* package.json: Bump grunt-svg2png to 0.2.7 (Bartosz Dziewoński)
+* Add warning variant to MediaWiki set (Mark Holmquist)
+* Button styles between OOJS and MW (nirzar)
+* AUTHORS: Add Derk-Jan Hartman (Derk-Jan Hartman)
+* ActionSet: Add description for events and clarify method descriptions (Kirsten Menger-Anderson)
+* demo: Load styles before building demo widgets (not asynchronously) (Bartosz Dziewoński)
+* ActionWidget: Fix bad copy-paste in documentation (Bartosz Dziewoński)
+* Window: Clarify descriptions of methods and configs (Kirsten Menger-Anderson)
+* OutlineSelectWidget: Add description (Kirsten Menger-Anderson)
+* OutlineControlsWidget: Add description (Kirsten Menger-Anderson)
+* MediaWiki Theme: Add "Wikicon" icons (James D. Forrester)
+* build: Set 'generateExactDuplicates: true' for CSSJanus (Bartosz Dziewoński)
+* build: Implement basic image flipping support in colorize-svg (Bartosz Dziewoński)
+* ActionWidget: Clarify description and mark private method (Kirsten Menger-Anderson)
+* ActionSet: Clarify description (Kirsten Menger-Anderson)
+* InputWidget: Clarify description (Kirsten Menger-Anderson)
+* MediaWiki Theme: textInputWidget: Update focus state (Prateek Saxena)
+* Only prevent default for handled keypresses (Brad Jorsch)
+
+## v0.9.0 / 2015-03-04
+* [BREAKING CHANGE] Remove innerOverlay (Ed Sanders)
+* [BREAKING CHANGE] TextInputWidget: Remove 'icon' and 'indicator' events (Bartosz Dziewoński)
+* [BREAKING CHANGE] Remove deprecated LookupInputWidget (Bartosz Dziewoński)
+* [BREAKING CHANGE] Remove deprecated GridLayout (Bartosz Dziewoński)
+
+* Only modify body class when first/last window opens/closes (Ed Sanders)
+* InputWidget: Focus checkboxes and radios, too, when the label is clicked (Bartosz Dziewoński)
+* Move `OO.ui.infuse` to `OO.ui.Element.static.infuse`. (C. Scott Ananian)
+* Don't call LabelElement constructor twice for ActionFieldLayouts (Roan Kattouw)
+* PopupElement: Add description (Kirsten Menger-Anderson)
+* Make icon and indicator container sizes consistent (Ed Sanders)
+* SelectWidget: Marked protected methods and clarified choose/press descriptions (Kirsten Menger-Anderson)
+* demo: Call Toolbar#initialize in toolbar demo (Bartosz Dziewoński)
+* demo: Add PopupTool to toolbar demo (Bartosz Dziewoński)
+* PopupTool: Tool constructor takes a toolGroup, not a toolbar (Bartosz Dziewoński)
+* Infer retry button action flags from symbolic name (Trevor Parscal)
+* Revert "Unbreak form submission in JavaScript" (Bartosz Dziewoński)
+* PopupWidget: Add description, example, and mark private methods (Kirsten Menger-Anderson)
+* ToggleButtonWidget: Add description, example, and mark private method (Kirsten Menger-Anderson)
+* ToggleWidget: Add description (Kirsten Menger-Anderson)
+* ToggleSwitchWidget: Add description, example, and mark private methods (Kirsten Menger-Anderson)
+* build: Add disconnect tolerance to karma config (James D. Forrester)
+* ProgressBar: Add description and example (Kirsten Menger-Anderson)
+* CheckboxInputWidget: Add description and example (Kirsten Menger-Anderson)
+* Use the correct color for gray buttons (Prateek Saxena)
+* RadioInputWidget: Add description and example (Kirsten Menger-Anderson)
+* Fix invalid use of border shorthand syntax (Timo Tijhof)
+* Restore previous toolbar items margins and padding (Bartosz Dziewoński)
+* ProcessDialog: Dismiss errors on teardown (Moriel Schottlender)
+* build: Remove footer override from jsduck (Timo Tijhof)
+* FieldLayout: Fix display of bulleted list (Kirsten Menger-Anderson)
+* Use only two variables each for each semantic color (Prateek Saxena)
+* tests: Run JS/PHP tests for widgets with required parameters, too (Bartosz Dziewoński)
+* TextInputWidget: Add description, example, and mark private methods (Kirsten Menger-Anderson)
+* tests: Add infusion tests (Bartosz Dziewoński)
+* PopupWidget: Add keydown listener and hide popup on ESC (Prateek Saxena)
+* DropdownInputWidget: Add description, example, and mark private method (Kirsten Menger-Anderson)
+* ComboBoxWidget: Add description, example, and mark private methods (Kirsten Menger-Anderson)
+* DecoratedOptionWidget: Add description and example (Kirsten Menger-Anderson)
+* SelectWidget: Add example and link to decorated option widget (Kirsten Menger-Anderson)
+* GroupWidget and ItemWidget: Mark private (Kirsten Menger-Anderson)
+* Fake toolbar group nesting (Bartosz Dziewoński)
+* LabelWidget: Add description, example, and mark private method (Kirsten Menger-Anderson)
+* IndicatorWidget: Add description and example (Kirsten Menger-Anderson)
+
+## v0.8.3 / 2015-02-26
+* Revert "Unbreak form submission in JavaScript" (Bartosz Dziewoński)
+
+## v0.8.2 / 2015-02-26
+* testsuitegenerator: Exclude 'text' parameter from tests, like 'content' (Bartosz Dziewoński)
+* PHP TitledElement: Actually set $this->title (Bartosz Dziewoński)
+* PHP PanelLayout: Fix getConfig() for 'expanded' config option (Bartosz Dziewoński)
+* WindowManager: Don't pass 'this' to window factory method (Bartosz Dziewoński)
+
+## v0.8.1 / 2015-02-25
+* [DEPRECATING CHANGE] Rename setPosition to setLabelPosition (Ed Sanders)
+
+* Element.php: Add "data" property (C. Scott Ananian)
+* Element.php: Add "text" configuration option (C. Scott Ananian)
+* Work around Safari 8 misrendering checkboxes in SVG-only distribution (Bartosz Dziewoński)
+* TextInputWidget: Fix appearance of icons and labels when disabled (Ed Sanders)
+* Remove '$: this.$' from code examples (Bartosz Dziewoński)
+* Prefer OO.isPlainObject to $.isPlainObject (Bartosz Dziewoński)
+* Error: Fix function name (Bartosz Dziewoński)
+* build: Use grunt-contrib-copy instead of custom 'copy' task (Timo Tijhof)
+* Element.php: Tweak docs (Bartosz Dziewoński)
+* docparser.rb: Ruby 1.9.3 compatibility (Bartosz Dziewoński)
+* Move toggle() from Widget to Element (Moriel Schottlender)
+* build: Include 'lib' and 'dist' in jsduck output (Timo Tijhof)
+* Fix typo: contian → contain (Bartosz Dziewoński)
+* MediaWiki Theme: Drop unnecessary pseudo-element of CheckboxInputWidget (Timo Tijhof)
+* MediaWiki Theme: Drop unnecessary pseudo-element of RadioInputWidget (Timo Tijhof)
+* MediaWiki theme: Simplify spacing of checkboxes/radios in FieldLayouts (Bartosz Dziewoński)
+* Add disabled RadioInputWidget to demo (Bartosz Dziewoński)
+* RadioOptionWidget: Make disabling single options work (Bartosz Dziewoński)
+* composer.json: Add description field (Kunal Mehta)
+* IconElement: Add description for config options (Kirsten Menger-Anderson)
+* IndicatorElement: Add description for configs and static properties (Kirsten Menger-Anderson)
+* DraggableElement: Mark private methods and add description to events (Kirsten Menger-Anderson)
+* Element: Add description for configs and static property (Kirsten Menger-Anderson)
+* LabelElement: Add description, config description, static property description (Kirsten Menger-Anderson)
+* TitledElement: Add description and config and static descriptions (Kirsten Menger-Anderson)
+* ComboBox: Use combobox role (Derk-Jan Hartman)
+* IconElement: Add description of methods (Kirsten Menger-Anderson)
+* Follow-up bade83bfdfc: actually remove ../ (Roan Kattouw)
+* Remove loop length check (Ed Sanders)
+* PopupButtonWidget: Add description and example and mark private method (Kirsten Menger-Anderson)
+* FlaggedElement: Add description of event and config option (Kirsten Menger-Anderson)
+* Unbreak docparser.rb (Bartosz Dziewoński)
+* Allow passing positional parameters inside the config object (Bartosz Dziewoński)
+* Run JS/PHP comparison tests using karma (Bartosz Dziewoński)
+* test: Reduce timeout in Process test from 100 to 10 (Timo Tijhof)
+* OptionWidget: Add description and descriptions of methods (Kirsten Menger-Anderson)
+* FormLayout: Allow adding child layouts via config (Bartosz Dziewoński)
+* Teach docparser about @member, @see, and PHP pass-by-reference (&$foo). (C. Scott Ananian)
+* Element: Add `content` config option, matching PHP side. (C. Scott Ananian)
+* SelectWidget: Add description for config, methods, events (Kirsten Menger-Anderson)
+* Serialize PHP widget state into data-ooui attribute (C. Scott Ananian)
+* Implement OO.ui.infuse to reconstitute PHP widgets in client-side JS (C. Scott Ananian)
+* ButtonSelectWidget: Add description and example (Kirsten Menger-Anderson)
+* RadioOptionWidget: Add description (Kirsten Menger-Anderson)
+* ButtonOptionWidget: Add description (Kirsten Menger-Anderson)
+* RadioSelectWidget: Add description and example (Kirsten Menger-Anderson)
+* Set proper spacing between interleaved FieldsetLayouts and FormLayouts (Bartosz Dziewoński)
+* MenuOptionWidget: Add description (Kirsten Menger-Anderson)
+* Unbreak form submission in JavaScript (Bartosz Dziewoński)
+* MenuSelectWidget: Add description and mark protected method (Kirsten Menger-Anderson)
+* TabIndexelement: Add description, example, and mark private method (Kirsten Menger-Anderson)
+* Add "composer test" command to lint PHP files and run phpcs (Kunal Mehta)
+* Update OOjs to v1.1.5 (James D. Forrester)
+
+
+## v0.8.0 / 2015-02-18
+* [BREAKING CHANGE] Make default distribution provide SVG with PNG fallback (Bartosz Dziewoński)
+
+* [DEPRECATING CHANGE] TextInputWidget: Deprecate 'icon' and 'indicator' events (Bartosz Dziewoński)
+
+* ButtonElement: add protected to event handlers (Kirsten Menger-Anderson)
+* docs: Make @example documentation tag work (Roan Kattouw)
+* TextInputWidget: Hide mixin components when unused (Ed Sanders)
+* DropdownWidget: Simplify redundant code (Bartosz Dziewoński)
+* Update PHP widgets for accessibility-related changes in JS widgets (Bartosz Dziewoński)
+* TabIndexedElement: Allow tabIndex property to be null (C. Scott Ananian)
+* ButtonElement: Add description (Kirsten Menger-Anderson)
+* Add missing ButtonInputWidget.less and corresponding mixin (Bartosz Dziewoński)
+* Various fixes to the PHP implementation (C. Scott Ananian)
+* Use Array.isArray instead of $.isArray (C. Scott Ananian)
+* TextInputWidget: Use margins for moving the label (Ed Sanders)
+* DraggableGroupElement: Add description (Kirsten Menger-Anderson)
+* demo: Add horizontal alignment test (Bartosz Dziewoński)
+* build: Pass RuboCop, customize settings (Bartosz Dziewoński)
+* Widget: Add description (Kirsten Menger-Anderson)
+* ButtonInputWidget: Add description and example (Kirsten Menger-Anderson)
+* Dialog: Add description and example (Kirsten Menger-Anderson)
+* DraggableElement: Add description (Kirsten Menger-Anderson)
+* docparser: Add support for 'protected' methods (Bartosz Dziewoński)
+* testsuitegenerator: Only test every pair of config options rather than every triple (Bartosz Dziewoński)
+* TextInputWidget: Don't add label position classes when there's no label (Bartosz Dziewoński)
+* Update JS/PHP comparison test suite (Bartosz Dziewoński)
+* tests: Fix the check for properties (Bartosz Dziewoński)
+* TextInputWidget: Add missing LabelElement mixin documentation (Ed Sanders)
+* Follow-up c762da42: fix ProcessDialog error handling (Roan Kattouw)
+* MediaWiki Theme: Add focus state for frameless button (Prateek Saxena)
+* TextInputWidget: Allow maxLength of 0 in JS (matching PHP) (Bartosz Dziewoński)
+* TextInputWidget: Only put $label in the DOM if needed (Bartosz Dziewoński)
+* MediaWiki Theme: Use white icons for disabled buttons (Bartosz Dziewoński)
+* Follow-up 6a6bb90ab: Update CSS file path in eg-iframe.html (Roan Kattouw)
+* Element: Add description (Kirsten Menger-Anderson)
+* PHP: Remove redundant documentation for getInputElement() (Bartosz Dziewoński)
+* Some documentation tweaks (Bartosz Dziewoński)
+* FieldLayout: Add description (Kirsten Menger-Anderson)
+* FieldLayout: Clean up and remove lies (Bartosz Dziewoński)
+* FlaggedElement: Add description (Kirsten Menger-Anderson)
+* PHP demo: Correct path to CSS files (Bartosz Dziewoński)
+* MediaWikiTheme: Resynchronize PHP with JS (Bartosz Dziewoński)
+* ButtonWidget: Rename nofollow config option to noFollow (C. Scott Ananian)
+* GroupElement: Add description (Kirsten Menger-Anderson)
+* IconElement: Add description (Kirsten Menger-Anderson)
+* IconWidget: Add description and example (Kirsten Menger-Anderson)
+* IndicatorElement: Add description (Kirsten Menger-Anderson)
+* InputWidget: Add description (Kirsten Menger-Anderson)
+* SelectWidget: Add description (Kirsten Menger-Anderson)
+* MediaWiki Theme: Fix border width for frameless buttons' focus state (Prateek Saxena)
+* Window: Add description (Kirsten Menger-Anderson)
+* WindowManager: Add description (Kirsten Menger-Anderson)
+* ButtonGroupWidget: Add description and example (Kirsten Menger-Anderson)
+* DropdownWidget: Add @private to private methods (Kirsten Menger-Anderson)
+* Refactor keyboard accessibility of SelectWidgets (Bartosz Dziewoński)
+* ActionSet: Add description and example (Kirsten Menger-Anderson)
+* ActionSet: Add @private to onActionChange method (Kirsten Menger-Anderson)
+* ActionWidget: Add description (Kirsten Menger-Anderson)
+* ActionSet: Add description for specialFlags property (Kirsten Menger-Anderson)
+* DropdownWidget: Add description and example (Kirsten Menger-Anderson)
+* ButtonWidget: Add example and link (Kirsten Menger-Anderson)
+* IconElement: Add description and fix display of static properties (Kirsten Menger-Anderson)
+
+
+## v0.7.0 / 2015-02-11
+* [BREAKING CHANGE] Remove window isolation (Trevor Parscal)
+
+* [DEPRECATING CHANGE] GridLayout should no longer be used, instead use MenuLayout (Bartosz Dziewoński)
+
+* Fade in window frames separately from window overlays (Ed Sanders)
+* Fix initialisation of window visible (Ed Sanders)
+* SelectWidget: 'listbox' wrapper role, 'aria-selected' state on contents (Derk-Jan Hartman)
+* Cleanup unreachable code from DraggableGroupElement (Moriel Schottlender)
+* DraggableGroupElement: Unset dragged item when dropped (Moriel Schottlender)
+* Remove inline spacing from ButtonWidget (Roan Kattouw)
+* Make sure DraggableGroupElement supports button widgets (Moriel Schottlender)
+* demo: Use properties instead of attributes for <link> (Timo Tijhof)
+* Revert "Remove inline spacing from ButtonWidget" (Bartosz Dziewoński)
+* ToggleSwitchWidget: Accessibility improvements (Bartosz Dziewoński)
+* TextInputWidget: Add required attribute on the basis of required config (Prateek Saxena)
+* DropdownInputWidget: Fix undefined variable in PHP (Bartosz Dziewoński)
+* PHP demo: Just echo the autoload error message, don't trigger_error() (Bartosz Dziewoński)
+* demo: Stop inline consoles from generating white space (Bartosz Dziewoński)
+* demo: Reorder widgets into somewhat logical groupings (Bartosz Dziewoński)
+* demo: Add button style showcase from PHP demo (Bartosz Dziewoński)
+* PHP demo: Resynchronize with JS demo (Bartosz Dziewoński)
+* Stop treating ApexTheme class unfairly and make it proper (Bartosz Dziewoński)
+* PHP demo: Add Vector/Raster and MediaWiki/Apex controls (Bartosz Dziewoński)
+* Delete unused src/themes/apex/{raster,vector}.less (Bartosz Dziewoński)
+* {Checkbox,Radio}InputWidget: Add missing configuration initialization (Bartosz Dziewoński)
+* MediaWiki theme: Use distribution's image type for backgrounds (Bartosz Dziewoński)
+* tests: Just echo the autoload error message, don't trigger_error() (Bartosz Dziewoński)
+* MediaWiki theme: Fix non-clickability of radios and checkboxes (Bartosz Dziewoński)
+* Fix text input auto-height calculation (Ed Sanders)
+* MediaWiki theme: Consistent toggle button 'active' state (Bartosz Dziewoński)
+* RadioOptionWidget: Make it a <label/> (Bartosz Dziewoński)
+* MediaWiki theme: Correct flagged primary button text color when pressed (Bartosz Dziewoński)
+* FieldsetLayout: Tweak positioning of help icon (Bartosz Dziewoński)
+* TextInputWidget: Use aria-hidden for extra autosize textarea (Prateek Saxena)
+* Refactor clickability of buttons (Bartosz Dziewoński)
+* Remove usage of this.$ and config.$ (Trevor Parscal)
+* build: Bump various devDependencies (James D. Forrester)
+* History: Fix date typos (James D. Forrester)
+* TabIndexedElement: Actually allow tabIndex of -1 (Bartosz Dziewoński)
+* ListToolGroup: Remove hack for jQuery's .show()/.hide() (Bartosz Dziewoński)
+* PopupWidget: Set $clippable only once, correctly (Bartosz Dziewoński)
+* TextInputMenuSelectWidget: Correct documentation (Bartosz Dziewoński)
+* PopupElement: Correct documentation (Bartosz Dziewoński)
+* MediaWiki Theme: Rename @active to @pressed in button mixins (Prateek Saxena)
+* tools.less: Use distribution's image type and path for background (Prateek Saxena)
+* MediaWiki Theme: Fix background color for disabled buttons (Prateek Saxena)
+* MenuSelectWidget: Don't clobber other events when unbinding (Bartosz Dziewoński)
+* MenuSelectWidget: Codify current behavior of Tab closing the menu (Bartosz Dziewoński)
+* DropdownWidget, ComboBoxWidget: Make keyboard-accessible (Bartosz Dziewoński)
+* MenuSelectWidget: Remove dead code (Bartosz Dziewoński)
+* MediaWiki Theme: Rename active-* variables to pressed-* (Prateek Saxena)
+* ButtonWidget: Better handle non-string parameters in setHref/setTarget (C. Scott Ananian)
+* Make better use of 'scrollIntoViewOnSelect' in OptionWidgets (Bartosz Dziewoński)
+* ButtonWidget: Add "nofollow" option (C. Scott Ananian)
+* MediaWiki Theme: Rename @highlight to @active (Prateek Saxena)
+* MediaWiki Theme: Use darker color for frameless buttons (Prateek Saxena)
+* ButtonWidget: Add documentation (Kirsten Menger-Anderson)
+
+## v0.6.6 / 2015-02-04
+* TextInputWidget: Mostly revert "Don't try adjusting size when detached" (Bartosz Dziewoński)
+* Use css class instead of jQuery .show()/hide()/toggle() (Moriel Schottlender)
+* build: Use karma to v0.12.31 (Timo Tijhof)
+* Use standard border colours for progress bars (Ed Sanders)
+* Remove disabled elements from keyboard navigation flow (Derk-Jan Hartman)
+* Fix BookletLayout#toggleOutline to use MenuLayout method (Ed Sanders)
+* Use CSS overriding trick to support RTL in menu layouts (Ed Sanders)
+
+## v0.6.5 / 2015-02-01
+* Make BookletLayout inherit from MenuLayout instead of embedding a GridLayout (Ed Sanders)
+* ButtonElement: Unbreak 'pressed' state (Bartosz Dziewoński)
+
+## v0.6.4 / 2015-01-30
+* InputWidget: Resynchronize our internal .value with DOM .value in #getValue (eranroz)
+* demo: Remove nonexistent 'align' config option for a DropdownWidget (Bartosz Dziewoński)
+* MediaWiki theme: Reduce size of checkboxes and radio buttons by 20% (Ed Sanders)
+* MediaWiki theme: Remove SearchWidget's border now dialogs have outline (Ed Sanders)
+* TextInputWidget: Accept 'maxLength' configuration option (Bartosz Dziewoński)
+* MediaWiki Theme: Adjust ButtonSelectWidget, ButtonGroupWidget highlights (Prateek Saxena)
+* Update OOjs to v1.1.4 and switch to the jQuery-optimised version (James D. Forrester)
+* build: Bump devDependencies and fix up (James D. Forrester)
+* Seriously work around the Chromium scrollbar bug for good this time (Bartosz Dziewoński)
+* Introduce and use TabIndexedElement (Bartosz Dziewoński)
+* AUTHORS: Update for the last six months' work (James D. Forrester)
+* Set input direction in html prop rather than css rule (Moriel Schottlender)
+* Introduce DropdownInputWidget (Bartosz Dziewoński)
+* Remove the 'flash' feature from MenuSelectWidget and OptionWidget (Bartosz Dziewoński)
+* InputWidget: Clarify documentation of #getInputElement (Bartosz Dziewoński)
+* Make sure there is a page before focusing in BookletLayout (Moriel Schottlender)
+* Provide default margins for buttons and other widgets (Bartosz Dziewoński)
+* OptionWidget: Unbreak 'pressed' state (Bartosz Dziewoński)
+* TextInputWidget: Remove superfluous role=textbox (Derk-Jan Hartman)
+* MediaWiki theme: Tweak some more border-radii (Bartosz Dziewoński)
+* Widget: Set aria-disabled too in #setDisabled (Derk-Jan Hartman)
+* Twiddle things (Ed Sanders)
+* Add help icon for FieldsetLayout (Moriel Schottlender)
+* PopupButtonWidget: Set aria-haspopup to true (Prateek Saxena)
+* ToggleButtonWidget: Set aria-pressed when changing value (Derk-Jan Hartman)
+* ActionFieldLayout: Add 'nowrap' to the button (Moriel Schottlender)
+* demo: Have multiline text in multiline widgets (Bartosz Dziewoński)
+* Add inline labels to text widgets (Ed Sanders)
+* TextInputWidget: Don't try adjusting size when detached (Bartosz Dziewoński)
+* MediaWiki Theme: Adjust MenuOptionWidget selected state (Bartosz Dziewoński)
+* ToggleWidget: Use aria-checked (Prateek Saxena)
+* MediaWiki theme: Unbreak disabled buttons (Bartosz Dziewoński)
+* MediaWiki theme: Fix background issues with disabled buttons (Roan Kattouw)
+* ButtonOptionWidget: Add the TabIndexedElement mixin (Derk-Jan Hartman)
+* Remove labelPosition check (Ed Sanders)
+* Fix opening/closing animation on windows (Roan Kattouw)
+* Add MenuLayout (Ed Sanders)
+* Add simpler window#updateSize API (Ed Sanders)
+
+## v0.6.3 / 2015-01-14
+* [DEPRECATING CHANGE] LookupInputWidget should no longer be used, instead use LookupElement
+
+* MediaWiki Theme: Adjust toolbar popups' border and shadows (Bartosz Dziewoński)
+* MediaWiki Theme: Don't use 'box-shadow' to produce thin grey lines in dialogs (Bartosz Dziewoński)
+* demo: Switch the default theme from 'Apex' to 'MediaWiki' (Ricordisamoa)
+* Toolbar: Update #initialize docs (Bartosz Dziewoński)
+* Add an ActionFieldLayout (Moriel Schottlender)
+* dialog: Provide a 'larger' size for things for which 'large' isn't enough (James D. Forrester)
+* Synchronize ComboBoxWidget and DropdownWidget styles (Bartosz Dziewoński)
+* Replace old&busted LookupInputWidget with new&hot LookupElement (Bartosz Dziewoński)
+
+## v0.6.2 / 2015-01-09
+* WindowManager#removeWindows: Documentation fix (Ed Sanders)
+* Clear windows when destroying window manager (Ed Sanders)
+* MediaWiki theme: Slightly reduce size of indicator arrows (Ed Sanders)
+* MediaWiki Theme: Remove text-shadow on button (Prateek Saxena)
+* MediaWiki Theme: Fix focus state for buttons (Prateek Saxena)
+* MediaWiki Theme: Fix disabled state of buttons (Prateek Saxena)
+* MediaWiki Theme: Fix overlap between hover and active states (Prateek Saxena)
+* Make @anchor-size a less variable and calculate borders from it (Ed Sanders)
+* PHP LabelElement: Actually allow non-plaintext labels (Bartosz Dziewoński)
+* MediaWiki Theme: Add state change transition to checkbox (Prateek Saxena)
+* Synchronize @abstract class annotations between PHP and JS (Bartosz Dziewoński)
+* Add 'lock' icon (Trevor Parscal)
+* Don't test abstract classes (Bartosz Dziewoński)
+* Element: Add support for 'id' config option (Bartosz Dziewoński)
+* testsuitegenerator.rb: Handle inheritance chains (Bartosz Dziewoński)
+* TextInputWidget: Add support for 'autofocus' config option (Bartosz Dziewoński)
+* tests: Don't overwrite 'id' attribute (Bartosz Dziewoński)
+
+## v0.6.1 / 2015-01-05
+* Remove use of Math.round() for offset and position pixel values (Bartosz Dziewoński)
+* Update JSPHP-suite.json (Bartosz Dziewoński)
+* ButtonElement: Inherit all 'font' styles, not only 'font-family' (Bartosz Dziewoński)
+* FieldsetLayout: Shrink size of label and bump the weight to compensate (James D. Forrester)
+* IndicatorElement: Fix 'indicatorTitle' config option (Bartosz Dziewoński)
+* Error: Unmark as @abstract (Bartosz Dziewoński)
+* build: Update various devDependencies (James D. Forrester)
+* readme: Update badges (Timo Tijhof)
+* readme: No need to put the same heading in twice (James D. Forrester)
+
+## v0.6.0 / 2014-12-16
+* [BREAKING CHANGE] PopupToolGroup and friends: Pay off technical debt (Bartosz Dziewoński)
+* ButtonGroupWidget: Remove weird margin-bottom: -1px; from theme styles (Bartosz Dziewoński)
+* Prevent parent window scroll in modal mode using overflow hidden (Ed Sanders)
+* MediaWiki theme: RadioInputWidget tweaks (Bartosz Dziewoński)
+* ClippableElement: Handle clipping with left edge (Bartosz Dziewoński)
+* Sprinkle some child selectors around in BookletLayout styles (Roan Kattouw)
+
+## v0.5.0 / 2014-12-12
+* [BREAKING CHANGE] FieldLayout: Handle 'inline' alignment better (Bartosz Dziewoński)
+* [BREAKING CHANGE] Split primary flag into primary and progressive (Trevor Parscal)
+* [BREAKING CHANGE] CheckboxInputWidget: Allow setting HTML 'value' attribute (Bartosz Dziewoński)
+* MediaWiki theme: checkbox: Fix states according to spec (Prateek Saxena)
+* MediaWiki theme: Add radio buttons (Prateek Saxena)
+* MediaWiki theme: Use gray instead of blue for select and highlight (Trevor Parscal)
+* MediaWiki theme: Copy .theme-oo-ui-outline{Controls,Option}Widget from Apex (Bartosz Dziewoński)
+* MediaWiki theme: Add thematic border to the bottom of toolbars (Bartosz Dziewoński)
+* MediaWiki theme: Extract @active-color variable (Bartosz Dziewoński)
+* MediaWiki theme: Add hover state to listToolGroup (Trevor Parscal)
+* MediaWiki theme: Add state transition to radio buttons (Prateek Saxena)
+* MediaWiki theme: Make button sizes match Apex (Trevor Parscal)
+* MediaWiki theme: Improve search widget styling (Trevor Parscal)
+* build: Use String#slice instead of discouraged String#substr (Timo Tijhof)
+* Element.getClosestScrollableContainer: Use 'body' or 'documentElement' based on browser (Prateek Saxena)
+* testsuitegenerator: Actually filter out non-unique combinations (Bartosz Dziewoński)
+* Fix primary button description text (Niklas Laxström)
+* Give non-isolated windows a tabIndex for selection holding (Ed Sanders)
+* Call .off() correctly in setButtonElement() (Roan Kattouw)
+* RadioInputWidget: Remove documentation lies (Bartosz Dziewoński)
+* Don't set line-height of unset button labels (Bartosz Dziewoński)
+* Temporarily remove position:absolute on body when resizing (Ed Sanders)
+* Kill the escape keydown event after handling a window close (Ed Sanders)
+* PopupWidget: Remove box-shadow rule that generates invisible shadow (Bartosz Dziewoński)
+* ClippableElement: 7 is a better number than 10 (Bartosz Dziewoński)
+* FieldLayout: In styles, don't assume that label is given (Bartosz Dziewoński)
+* TextInputWidget: Set vertical-align: middle, like buttons (Bartosz Dziewoński)
+* FieldLayout: Synchronise PHP with JS (Bartosz Dziewoński)
+* FieldLayout: Use <label> for this.$body, not this.$element (Bartosz Dziewoński)
+* Account for <html> rather than <body> being the scrollable root in Chrome (Bartosz Dziewoński)
+* GridLayout: Don't round to 1% (Bartosz Dziewoński)
+* README.md: Drop localisation update auto-commits from release notes (James D. Forrester)
+* README.md: Point to Phabricator, not Bugzilla (James D. Forrester)
+
+## v0.4.0 / 2014-12-05
+* [BREAKING CHANGE] Remove deprecated Element#onDOMEvent and #offDOMEvent (Bartosz Dziewoński)
+* [BREAKING CHANGE] Make a number of Element getters static (Bartosz Dziewoński)
+* [BREAKING CHANGE] Rename BookletLayout#getPageName → #getCurrentPageName (Bartosz Dziewoński)
+* demo: Don't put buttons in a FieldsetLayout without FieldLayouts around them (Bartosz Dziewoński)
+* IconElement: Add missing #getIconTitle (Bartosz Dziewoński)
+* SelectWidget: Rewrite #getRelativeSelectableItem (Bartosz Dziewoński)
+* Follow-up I859ff276e: Add cursor files to repo (Trevor Parscal)
+
+## v0.3.0 / 2014-12-04
+* [BREAKING CHANGE] ButtonWidget: Don't default 'target' to 'blank' (Bartosz Dziewoński)
+* InputWidget: Update DOM value before firing 'change' event (Bartosz Dziewoński)
+* TextInputWidget: Reuse a single clone instead of appending and removing new ones (Prateek Saxena)
+* build: Have grunt watch run 'quick-build' instead of 'build' (Prateek Saxena)
+* MediaWiki Theme: Reduce indentation in theme-oo-ui-checkboxInputWidget (Prateek Saxena)
+* Adding DraggableGroupElement and DraggableElement mixins (Moriel Schottlender)
+* Remove window even if closing promise rejects (Ed Sanders)
+* Fix lies in documentation (Trevor Parscal)
+
+## v0.2.4 / 2014-12-02
+* TextInputWidget: Use .css( propertyName, value ) instead of .css( properties) for single property (Prateek Saxena)
+* TextInputWidget: Stop adjustSize if the value of the textarea is the same (Prateek Saxena)
+* Window: Avoid height flickering when resizing dialogs (Bartosz Dziewoński)
+* MessageDialog: Fit actions again when the dialog is resized (Bartosz Dziewoński)
+
+## v0.2.3 / 2014-11-26
+* Dialog: Only handle escape events when open (Alex Monk)
+* Pass original event with TextInputWidget#enter (Ed Sanders)
+* Add missing documentation to ToolFactory (Ed Sanders)
+* BookletLayout: Make #focus not crash when there are zero pages or when there is no outline (Roan Kattouw)
+* Window: Disable transitions when changing window height to calculate content height (Bartosz Dziewoński)
+* MessageDialog: Add Firefox hack for scrollbars when sizing dialogs (Bartosz Dziewoński)
+* Fix RadioOptionWidget demos (Trevor Parscal)
+* RadioOptionWidget: Remove lies from documentation (Trevor Parscal)
+* RadioOptionWidget: Increase rule specificity to match OptionWidget (Bartosz Dziewoński)
+* MessageDialog: Actually correctly calculate and set height (Bartosz Dziewoński)
+
+## v0.2.2 / 2014-11-25
+* LabelWidget: Add missing documentation for input configuration option (Ed Sanders)
+* MessageDialog: Fit actions after updating window size, not before (Bartosz Dziewoński)
+* MessageDialog: Use the right superclass (Bartosz Dziewoński)
+* ProcessDialog, MessageDialog: Support iconed actions (Bartosz Dziewoński)
+* Remove padding from undecorated option widgets (Ed Sanders)
+* build: Add .npmignore (Timo Tijhof)
+
+## v0.2.1 / 2014-11-24
+* Start the window opening transition before ready, not after (Roan Kattouw)
+* Add focus method to BookletLayout (Roan Kattouw)
+* Add missing History.md file now we're a proper repo (James D. Forrester)
+* README.md: Update introduction, badges, advice (James D. Forrester)
+* LabelElement: Kill inline styles (Bartosz Dziewoński)
+* composer: Rename package to 'oojs-ui' and require php 5.3.3 (Timo Tijhof)
+
+## v0.2.0 / 2014-11-17
+* First versioned release
+
+## v0.1.0 / 2013-11-13
+* Initial export of repo
diff --git a/vendor/oojs/oojs-ui/LICENSE-MIT b/vendor/oojs/oojs-ui/LICENSE-MIT
new file mode 100644
index 00000000..1eef0125
--- /dev/null
+++ b/vendor/oojs/oojs-ui/LICENSE-MIT
@@ -0,0 +1,20 @@
+Copyright 2011-2015 OOjs Team and other contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/oojs/oojs-ui/README.md b/vendor/oojs/oojs-ui/README.md
new file mode 100644
index 00000000..e537752e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/README.md
@@ -0,0 +1,79 @@
+[![npm](https://img.shields.io/npm/v/oojs-ui.svg?style=flat)](https://www.npmjs.com/package/oojs-ui) [![Packagist](https://img.shields.io/packagist/v/oojs/oojs-ui.svg?style=flat)](https://packagist.org/packages/oojs/oojs-ui) [![David](https://img.shields.io/david/dev/wikimedia/oojs-ui.svg?style=flat)](https://david-dm.org/wikimedia/oojs-ui#info=devDependencies)
+
+OOjs UI
+=================
+
+OOjs UI is a modern JavaScript UI toolkit for browsers. It provides a library of common widgets, layouts and windows that are ready to use, as well as many foundational classes for constructing custom user interfaces. The library was originally created for use by [VisualEditor](https://www.mediawiki.org/wiki/VisualEditor), which uses it for its entire user interface, and is now completely independent, and more useful and convenient for other use cases.
+
+Quick start
+----------
+
+This library is available as an [npm](https://npmjs.org/) package! Install it right away:
+<pre lang="bash">
+npm install oojs-ui
+</pre>
+
+If you don't want to use npm, you can:
+
+1. Clone the repo, `git clone https://git.wikimedia.org/git/oojs/ui.git`.
+
+1. Install Grunt command-line utility:<br/>`$ npm install -g grunt-cli`
+
+1. Install dev dependencies and build the distribution files:<br/>`$ npm install`
+
+1. You can now copy the distribution files from the dist directory into your project.
+
+
+Versioning
+----------
+
+We use the Semantic Versioning guidelines as much as possible.
+
+Releases will be numbered in the following format:
+
+`<major>.<minor>.<patch>`
+
+For more information on SemVer, please visit http://semver.org/.
+
+
+Issue tracker
+-------------
+
+Found a bug or missing feature? Please report it in the [issue tracker](https://phabricator.wikimedia.org/maniphest/task/create/?projects=PHID-PROJ-dgmoevjqeqlerleqzzx5)!
+
+
+Release
+----------
+
+Release process:
+<pre lang="bash">
+$ cd path/to/oojs-ui/
+$ git remote update
+$ git checkout -B release -t origin/master
+
+# Ensure tests pass
+$ npm install && npm test
+
+# Avoid using "npm version patch" because that creates
+# both a commit and a tag, and we shouldn't tag until after
+# the commit is merged.
+
+# Update release notes
+# Copy the resulting list into a new section on History.md
+$ git log --format='* %s (%aN)' --no-merges --reverse v$(node -e 'console.log(require("./package.json").version);')...HEAD | grep -v "Localisation updates from" | sort
+$ edit History.md
+
+# Update the version number
+$ edit package.json
+
+$ git add -p
+$ git commit -m "Tag vX.X.X"
+$ git review
+
+# After merging:
+$ git remote update
+$ git checkout origin/master
+$ git tag "vX.X.X"
+$ git push --tags
+$ npm publish
+</pre>
diff --git a/vendor/oojs/oojs-ui/bin/doccomparer.rb b/vendor/oojs/oojs-ui/bin/doccomparer.rb
new file mode 100644
index 00000000..cd3623df
--- /dev/null
+++ b/vendor/oojs/oojs-ui/bin/doccomparer.rb
@@ -0,0 +1,165 @@
+require 'pp'
+require_relative 'docparser'
+
+# convert [ {name: 'foo'}, … ] to { foo: {name: 'foo'}, … }
+def reindex arg
+ if arg.is_a?(Array) && arg.all?{|v| v.is_a? Hash }
+ Hash[ arg.map{|v| [ v[:name], reindex(v) ] } ]
+ elsif arg.is_a? Hash
+ arg.each_pair{|k, v| arg[k] = reindex(v) }
+ else
+ arg
+ end
+end
+
+def indent text, tabs
+ text == '' ? text : text.gsub(/^/, ' ' * tabs)
+end
+
+# whitespace-insensitive strings
+def canonicalize value
+ if value.is_a? String
+ value.strip.gsub(/\s+/, ' ')
+ elsif value.is_a? Array
+ value.map{|v| canonicalize v }
+ elsif value.is_a? Hash
+ value.each_pair{|k, v| value[k] = canonicalize v }
+ else
+ value
+ end
+end
+
+def sanitize_description text
+ cleanup_class_name(text)
+ .gsub('null and undefined', 'null')
+ .gsub('undefined and null', 'null')
+ .gsub('array()', '[]')
+ .gsub('jQuery|string|Function', 'string')
+ .gsub('jQuery', 'Tag')
+ .gsub('string|Function', 'string')
+ .gsub('object', 'array')
+ .gsub(/#(\w+)/, '\1()')
+ .gsub(/Object\.<.+?>/, 'array')
+end
+
+def smart_compare_process val, type
+ val[:description] = sanitize_description val[:description]
+
+ case type
+ when :class
+ val = val.dup
+ val[:mixins].delete 'OO.EventEmitter' # JS only
+ val[:mixins].delete 'PendingElement' # JS only
+ val.delete :parent if val[:parent] == 'ElementMixin' # PHP only
+ val.delete :methods
+ val.delete :properties
+ val.delete :events
+
+ when :method
+ if val[:name] == '#constructor'
+ val[:params].delete 'element' # PHP only
+ end
+ val[:config].each_pair{|_k, v|
+ default = v.delete :default
+ v[:description] << " (default: #{default})" if default
+ v[:description] = sanitize_description v[:description]
+ v[:type] = sanitize_description v[:type]
+ }
+ val[:params].each_pair{|_k, v|
+ default = v.delete :default
+ v[:description] << " (default: #{default})" if default
+ v[:description] = sanitize_description v[:description]
+ v[:type] = sanitize_description v[:type]
+ }
+ if val[:return]
+ val[:return][:description] = sanitize_description val[:return][:description]
+ val[:return][:type] = sanitize_description val[:return][:type]
+ end
+
+ when :property
+ val[:description] = sanitize_description val[:description]
+ val[:type] = sanitize_description val[:type]
+
+ end
+ val
+end
+
+def smart_compare a, b, a_name, b_name, type
+ a = smart_compare_process a, type
+ b = smart_compare_process b, type
+ compare_hash a, b, a_name, b_name
+end
+
+def smart_compare_methods a, b, a_name, b_name
+ smart_compare a, b, a_name, b_name, :method
+end
+
+def smart_compare_properties a, b, a_name, b_name
+ smart_compare a, b, a_name, b_name, :property
+end
+
+def compare_hash a, b, a_name, b_name, nested=:compare_hash
+ keys = (a ? a.keys : []) + (b ? b.keys : [])
+ out = keys.to_a.sort.uniq.map do |key|
+ a_val = a ? canonicalize(a[key]) : nil
+ b_val = b ? canonicalize(b[key]) : nil
+
+ if [a_val, b_val] == [{}, []] || [a_val, b_val] == [[], {}]
+ a_val, b_val = {}, {}
+ end
+
+ if a_val.is_a?(Hash) && b_val.is_a?(Hash)
+ comparison_result = indent method(nested).call(a_val, b_val, a_name, b_name), 2
+ if comparison_result.strip == ''
+ "#{key}: match" if $VERBOSE
+ else
+ "#{key}: MISMATCH\n#{comparison_result}"
+ end
+ else
+ if a_val == b_val
+ "#{key}: match" if $VERBOSE
+ elsif a_val.nil?
+ "#{key}: #{a_name} missing"
+ elsif b_val.nil?
+ "#{key}: #{b_name} missing"
+ else
+ "#{key}: MISMATCH\n #{a_name}: #{a_val.inspect}\n #{b_name}: #{b_val.inspect}"
+ end
+ end
+ end
+ out.compact.join "\n"
+end
+
+if ARGV.empty? || ARGV == ['-h'] || ARGV == ['--help']
+ $stderr.puts "usage: ruby [-v] #{$PROGRAM_NAME} <dirA> <dirB> <nameA> <nameB>"
+ $stderr.puts " ruby #{$PROGRAM_NAME} src php JS PHP > compare.txt"
+else
+ dir_a, dir_b, name_a, name_b = ARGV
+
+ js = parse_any_path dir_a
+ php = parse_any_path dir_b
+
+ js = reindex js
+ php = reindex php
+
+ (js.keys + php.keys).sort.uniq.each do |class_name|
+ where = [js.key?(class_name) ? name_a : nil, php.key?(class_name) ? name_b : nil].compact
+ puts "\n#{class_name}: #{where.join '/'}" if $VERBOSE || where.length == 2
+
+ if where.length == 2
+ data = {
+ 'Basic:' =>
+ smart_compare(js[class_name], php[class_name], name_a, name_b, :class),
+ 'Methods:' =>
+ compare_hash(js[class_name][:methods], php[class_name][:methods], name_a, name_b, :smart_compare_methods),
+ 'Properties:' =>
+ compare_hash(js[class_name][:properties], php[class_name][:properties], name_a, name_b, :smart_compare_properties),
+ }
+ data = data
+ .select{|_k, v| v != ''}
+ .map{|k, v| "#{k}\n#{indent v, 2}" }
+ .join("\n")
+ puts indent data, 2
+ end
+ end
+end
diff --git a/vendor/oojs/oojs-ui/bin/docparser.rb b/vendor/oojs/oojs-ui/bin/docparser.rb
new file mode 100644
index 00000000..9f58549b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/bin/docparser.rb
@@ -0,0 +1,243 @@
+require 'pp'
+require 'json'
+
+def parse_dir dirname
+ Dir.entries(dirname).map{|filename|
+ if filename == '.' || filename == '..'
+ nil
+ else
+ parse_any_path "#{dirname}/#{filename}"
+ end
+ }.compact.inject(:+)
+end
+
+def cleanup_class_name class_name
+ class_name.sub(/OO\.ui\./, '')
+end
+
+def parse_file filename
+ if filename !~ /\.(php|js)$/
+ return nil
+ end
+ filetype = filename[/\.(php|js)$/, 1].to_sym
+
+ text = File.read filename, encoding: 'utf-8'
+
+ # ewwww
+ # some docblocks are missing and we really need them
+ text = text.sub(/(?<!\*\/\n)^class/, "/**\n*/\nclass")
+ # text = text.sub('public static $targetPropertyName', "/**\n*/\npublic static $targetPropertyName")
+
+ # find all documentation blocks, together with the following line (unless it contains another docblock)
+ docblocks = text.scan(/\/\*\*[\s\S]+?\*\/\n[ \t]*(?:(?=\/\*\*)|.*)/)
+
+ current_class = nil
+ output = []
+ previous_item = {} # dummy
+
+ docblocks.each{|d|
+ kind = nil
+ previous_item = data = {
+ name: nil,
+ description: '',
+ parent: nil,
+ mixins: [],
+ methods: [],
+ properties: [],
+ events: [],
+ params: [],
+ config: [],
+ visibility: :public,
+ type: nil,
+ }
+ valid_for_all = %w[name description].map(&:to_sym)
+ valid_per_kind = {
+ class: valid_for_all + %w[parent mixins methods properties events abstract].map(&:to_sym),
+ method: valid_for_all + %w[params config return visibility static].map(&:to_sym),
+ property: valid_for_all + %w[type static].map(&:to_sym),
+ event: valid_for_all + %w[params].map(&:to_sym),
+ }
+
+ js_class_constructor = false
+ js_class_constructor_desc = ''
+ ignore = false
+
+ comment, code_line = d.split '*/'
+ comment.split("\n").each{|c|
+ next if c.strip == '/**'
+ c.sub!(/^[ \t]*\*[ \t]?/, '') # strip leading *
+
+ m = c.match(/^@(\w+)[ \t]*(.*)/)
+ unless m
+ previous_item[:description] << c + "\n"
+ next
+ end
+
+ keyword, content = m.captures
+
+ # handle JS class/constructor conundrum
+ if keyword == 'class' || keyword == 'constructor'
+ js_class_constructor = true
+ end
+
+ case keyword
+ when 'constructor'
+ # handle JS class/constructor conundrum
+ js_class_constructor_desc = data[:description]
+ data[:description] = ''
+ kind = :method
+ when 'class'
+ kind = :class
+ when 'method'
+ kind = :method
+ when 'property', 'var'
+ kind = :property
+ m = content.match(/^\{?(.+?)\}?( .+)?$/)
+ if m.captures
+ type, description = m.captures
+ data[:type] = type
+ data[:description] = description if description
+ end
+ when 'event'
+ kind = :event
+ data[:name] = content.strip
+ when 'extends'
+ data[:parent] = cleanup_class_name(content.strip)
+ when 'mixins'
+ data[:mixins] << cleanup_class_name(content.strip)
+ when 'param'
+ case filetype
+ when :js
+ type, name, default, description = content.match(/^\{(.+?)\} \[?([\w.$]+?)(?:=(.+?))?\]?( .+)?$/).captures
+ next if type == 'Object' && name == 'config'
+ data[:params] << {name: name, type: cleanup_class_name(type), description: description || '', default: default}
+ previous_item = data[:params][-1]
+ when :php
+ type, name, config, description = content.match(/^(\S+) \&?\$(\w+)(?:\['(\w+)'\])?( .+)?$/).captures
+ next if type == 'array' && name == 'config' && !config
+ if config && name == 'config'
+ data[:config] << {name: config, type: cleanup_class_name(type), description: description || ''}
+ previous_item = data[:config][-1]
+ else
+ data[:params] << {name: name, type: cleanup_class_name(type), description: description || ''}
+ previous_item = data[:params][-1]
+ end
+ end
+ when 'cfg' # JS only
+ type, name, default, description = content.match(/^\{(.+?)\} \[?([\w.$]+?)(?:=(.+?))?\]?( .+)?$/).captures
+ data[:config] << {name: name, type: cleanup_class_name(type), description: description || '', default: default}
+ previous_item = data[:config][-1]
+ when 'return'
+ case filetype
+ when :js
+ type, description = content.match(/^\{(.+?)\}( .+)?$/).captures
+ data[:return] = {type: cleanup_class_name(type), description: description || ''}
+ previous_item = data[:return]
+ when :php
+ type, description = content.match(/^(\S+)( .+)?$/).captures
+ data[:return] = {type: cleanup_class_name(type), description: description || ''}
+ previous_item = data[:return]
+ end
+ when 'private'
+ data[:visibility] = :private
+ when 'protected'
+ data[:visibility] = :protected
+ when 'static'
+ data[:static] = true
+ when 'abstract'
+ data[:abstract] = true
+ when 'ignore'
+ ignore = true
+ when 'inheritable', 'deprecated', 'singleton', 'throws',
+ 'chainable', 'fires', 'localdoc', 'inheritdoc', 'member',
+ 'see'
+ # skip
+ else
+ fail "unrecognized keyword: #{keyword}"
+ end
+ }
+
+ next if ignore
+
+ if code_line && code_line.strip != ''
+ case filetype
+ when :js
+ m = code_line.match(/(?:(static|prototype)\.)?(\w+) =/)
+ kind_, name = m.captures
+ data[:static] = true if kind_ == 'static'
+ kind = {'static' => :property, 'prototype' => :method}[ kind_.strip ] if kind_ && !kind
+ data[:name] = cleanup_class_name(name)
+ when :php
+ m = code_line.match(/
+ \s*
+ (?:(public|protected|private)\s)?
+ (?:(static)\s)?(function\s|class\s|\$)
+ (\w+)
+ (?:\sextends\s(\w+))?
+ /x)
+ visibility, static, kind_, name, parent = m.captures
+ kind = {'$' => :property, 'function' => :method, 'class' => :class}[ kind_.strip ]
+ data[:visibility] = {'private' => :private, 'protected' => :protected, 'public' => :public}[ visibility ] || :public
+ data[:static] = true if static
+ data[:parent] = cleanup_class_name(parent) if parent
+ data[:name] = cleanup_class_name(name)
+ end
+ end
+
+ # handle JS class/constructor conundrum
+ if kind == :class || js_class_constructor
+ if current_class
+ output << current_class
+ end
+ current_class = data.select{|k, _v| valid_per_kind[:class].include? k }
+ current_class[:description] = js_class_constructor_desc if js_class_constructor_desc != ''
+ previous_item = current_class
+ end
+
+ # standardize
+ if data[:name] == '__construct' || js_class_constructor
+ data[:name] = '#constructor'
+ end
+
+ # put into the current class
+ if kind && kind != :class
+ keys = {
+ method: :methods,
+ property: :properties,
+ event: :events,
+ }
+ current_class[keys[kind]] << data.select{|k, _v| valid_per_kind[kind].include? k }
+ previous_item = current_class[keys[kind]]
+ end
+ }
+
+ # this is evil, assumes we only have one class in a file, but we'd need a proper parser to do it better
+ if current_class
+ current_class[:mixins] +=
+ text.scan(/\$this->mixin\( .*?new (\w+)\( \$this/).flatten.map(&method(:cleanup_class_name))
+ end
+
+ output << current_class if current_class
+ output
+end
+
+def parse_any_path path
+ if File.directory? path
+ parse_dir path
+ else
+ parse_file path
+ end
+end
+
+if __FILE__ == $PROGRAM_NAME
+ if ARGV.empty? || ARGV == ['-h'] || ARGV == ['--help']
+ $stderr.puts "usage: ruby #{$PROGRAM_NAME} <files...>"
+ $stderr.puts " ruby #{$PROGRAM_NAME} src > docs-js.json"
+ $stderr.puts " ruby #{$PROGRAM_NAME} php > docs-php.json"
+ else
+ out = JSON.pretty_generate ARGV.map{|a| parse_any_path a }.inject(:+)
+ # ew
+ out = out.gsub(/\{\s+\}/, '{}').gsub(/\[\s+\]/, '[]')
+ puts out
+ end
+end
diff --git a/vendor/oojs/oojs-ui/bin/generate-JSPHP-for-karma.php b/vendor/oojs/oojs-ui/bin/generate-JSPHP-for-karma.php
new file mode 100644
index 00000000..445da65c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/bin/generate-JSPHP-for-karma.php
@@ -0,0 +1,50 @@
+<?php
+
+// Quick and dirty autoloader to make it possible to run without Composer.
+spl_autoload_register( function ( $class ) {
+ $class = preg_replace( '/^OOUI\\\\/', '', $class );
+ foreach ( array( 'elements', 'layouts', 'themes', 'widgets', '.' ) as $dir ) {
+ $path = "../php/$dir/$class.php";
+ if ( file_exists( $path ) ) {
+ require_once $path;
+ return;
+ }
+ }
+} );
+
+$testSuiteJSON = file_get_contents( 'JSPHP-suite.json' );
+$testSuite = json_decode( $testSuiteJSON, true );
+$testSuiteOutput = array();
+
+function new_OOUI( $class, $config = array() ) {
+ $class = "OOUI\\" . $class;
+ return new $class( $config );
+}
+function unstub( &$value ) {
+ if ( is_string( $value ) && substr( $value, 0, 13 ) === '_placeholder_' ) {
+ $value = json_decode( substr( $value, 13 ), true );
+ array_walk_recursive( $value['config'], 'unstub' );
+ $value = new_OOUI( $value['class'], $value['config'] );
+ }
+}
+// Keep synchronized with tests/index.php
+$themes = array( 'ApexTheme', 'MediaWikiTheme' );
+foreach ( $themes as $theme ) {
+ OOUI\Theme::setSingleton( new_OOUI( $theme ) );
+ foreach ( $testSuite as $className => $tests ) {
+ foreach ( $tests as $test ) {
+ // Unstub placeholders
+ $config = $test['config'];
+ array_walk_recursive( $config, 'unstub' );
+ $config['infusable'] = true;
+ $instance = new_OOUI( $test['class'], $config );
+ $testSuiteOutput[$theme][$className][] = "$instance";
+ }
+ }
+}
+
+$testSuiteOutputJSON = json_encode( $testSuiteOutput, JSON_PRETTY_PRINT );
+
+echo "var testSuiteConfigs = $testSuiteJSON;\n\n";
+echo "var testSuitePHPOutput = $testSuiteOutputJSON;\n\n";
+echo file_get_contents( 'JSPHP.test.karma.js' );
diff --git a/vendor/oojs/oojs-ui/bin/testsuitegenerator.rb b/vendor/oojs/oojs-ui/bin/testsuitegenerator.rb
new file mode 100644
index 00000000..28ab1a85
--- /dev/null
+++ b/vendor/oojs/oojs-ui/bin/testsuitegenerator.rb
@@ -0,0 +1,146 @@
+require 'pp'
+require_relative 'docparser'
+
+if ARGV.empty? || ARGV == ['-h'] || ARGV == ['--help']
+ $stderr.puts "usage: ruby #{$PROGRAM_NAME} <dirA> <dirB>"
+ $stderr.puts " ruby #{$PROGRAM_NAME} src php > tests/JSPHP-suite.json"
+else
+ dir_a, dir_b = ARGV
+ js = parse_any_path dir_a
+ php = parse_any_path dir_b
+
+ class_names = (js + php).map{|c| c[:name] }.sort.uniq
+
+ tests = []
+ classes = php.select{|c| class_names.include? c[:name] }
+
+ testable_classes = classes
+ .reject{|c| c[:abstract] } # can't test abstract classes
+ .reject{|c| !c[:parent] || c[:parent] == 'ElementMixin' || c[:parent] == 'Theme' } # can't test abstract
+ .reject{|c| %w[Element Widget Layout Theme].include? c[:name] } # no toplevel
+ .reject{|c| c[:name] == 'DropdownInputWidget' } # different PHP and JS implementations
+
+ # values to test for each type
+ expandos = {
+ 'null' => [nil],
+ 'number' => [0, -1, 300],
+ 'boolean' => [true, false],
+ 'string' => ['Foo bar', '<b>HTML?</b>'],
+ }
+
+ # values to test for names
+ sensible_values = {
+ 'href' => ['http://example.com/'],
+ ['TextInputWidget', 'type'] => %w[text password],
+ ['ButtonInputWidget', 'type'] => %w[button input],
+ ['FieldLayout', 'help'] => true, # different PHP and JS implementations
+ ['FieldsetLayout', 'help'] => true, # different PHP and JS implementations
+ 'type' => %w[text button],
+ 'method' => %w[GET POST],
+ 'action' => [],
+ 'enctype' => true,
+ 'target' => ['_blank'],
+ 'accessKey' => ['k'],
+ 'name' => true,
+ 'autofocus' => true, # usually makes no sense in JS
+ 'tabIndex' => [-1, 0, 100],
+ 'icon' => ['picture'],
+ 'indicator' => ['down'],
+ 'flags' => %w[constructive],
+ 'label' => expandos['string'] + ['', ' '],
+ # these are defined by Element and would bloat the tests
+ 'classes' => true,
+ 'id' => true,
+ 'content' => true,
+ 'text' => true,
+ }
+
+ find_class = lambda do |klass|
+ return classes.find{|c| c[:name] == klass }
+ end
+
+ expand_types_to_values = lambda do |types|
+ return types.map{|t|
+ as_array = true if t.sub! '[]', ''
+ t = 'ButtonWidget' if t == 'Widget' # Widget is not "testable", use a subclass
+ if expandos[t]
+ # Primitive. Run tests with the provided values.
+ vals = expandos[t]
+ elsif testable_classes.find{|c| c[:name] == t }
+ # OOUI object. Test suite will instantiate one and run the test with it.
+ params = find_class.call(t)[:methods][0][:params] || []
+ config = params.map{|config_option|
+ types = config_option[:type].split '|'
+ values = expand_types_to_values.call(types)
+ { config_option[:name] => values[0] }
+ }
+ vals = [ '_placeholder_' + {
+ class: t,
+ config: config.inject({}, :merge)
+ }.to_json ]
+ else
+ # We don't know how to test this. The empty value will result in no
+ # tests being generated for this combination of config values.
+ vals = []
+ end
+ as_array ? vals.map{|v| [v] } : vals
+ }.inject(:+)
+ end
+
+ find_config_sources = lambda do |klass_name|
+ return [] unless klass_name
+ klass_names = [klass_name]
+ while klass_name
+ klass = find_class.call(klass_name)
+ break unless klass
+ klass_names +=
+ find_config_sources.call(klass[:parent]) +
+ klass[:mixins].map(&find_config_sources).flatten
+ klass_name = klass[:parent]
+ end
+ return klass_names.uniq
+ end
+
+ testable_classes.each do |klass|
+ config_sources = find_config_sources.call(klass[:name])
+ .map{|c| find_class.call(c)[:methods][0] }
+ config = config_sources.map{|c| c[:config] }.compact.inject(:+)
+ required_config = klass[:methods][0][:params] || []
+
+ # generate every possible configuration of configuration option sets
+ maxlength = [config.length, 2].min
+ config_combinations = (0..maxlength).map{|l| config.combination(l).to_a }.inject(:+)
+ # for each set, generate all possible values to use based on option's type
+ config_combinations = config_combinations.map{|config_comb|
+ config_comb += required_config
+ expanded = config_comb.map{|config_option|
+ types = config_option[:type].split '|'
+ sensible = sensible_values[ [ klass[:name], config_option[:name] ] ] ||
+ sensible_values[ config_option[:name] ]
+ if sensible == true
+ [] # the empty value will result in no tests being generated
+ else
+ values = sensible || expand_types_to_values.call(types)
+ values.map{|v| config_option.dup.merge(value: v) } + [nil]
+ end
+ }
+ expanded.length > 0 ? expanded[0].product(*expanded[1..-1]) : []
+ }.inject(:concat).map(&:compact).uniq
+
+ # really require the required ones
+ config_combinations = config_combinations.select{|config_comb|
+ required_config.all?{|r| config_comb.find{|c| c[:name] == r[:name] } }
+ }
+
+ config_combinations.each do |config_comb|
+ tests << {
+ class: klass[:name],
+ config: Hash[ config_comb.map{|c| [ c[:name], c[:value] ] } ]
+ }
+ end
+ end
+
+ tests = tests.group_by{|t| t[:class] }
+
+ puts JSON.pretty_generate tests
+end
diff --git a/vendor/oojs/oojs-ui/build/banner.txt b/vendor/oojs/oojs-ui/build/banner.txt
new file mode 100644
index 00000000..f6926e8f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/build/banner.txt
@@ -0,0 +1,10 @@
+/*!
+ * OOjs UI v<%= pkg.version %>
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–<%= grunt.template.today("yyyy") %> OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: <%= grunt.template.today("isoUtcDateTime") %>
+ */
diff --git a/vendor/oojs/oojs-ui/build/modules.json b/vendor/oojs/oojs-ui/build/modules.json
new file mode 100644
index 00000000..5aa773ff
--- /dev/null
+++ b/vendor/oojs/oojs-ui/build/modules.json
@@ -0,0 +1,240 @@
+{
+ "oojs-ui": {
+ "scripts": [
+ "src/intro.js.txt",
+ "src/core.js",
+
+ "src/elements/PendingElement.js",
+
+ "src/ActionSet.js",
+ "src/Element.js",
+ "src/Layout.js",
+ "src/Widget.js",
+ "src/Window.js",
+ "src/Dialog.js",
+ "src/WindowManager.js",
+ "src/Error.js",
+ "src/HtmlSnippet.js",
+ "src/Process.js",
+ "src/ToolFactory.js",
+ "src/ToolGroupFactory.js",
+ "src/Theme.js",
+
+ "src/elements/TabIndexedElement.js",
+ "src/elements/ButtonElement.js",
+ "src/elements/GroupElement.js",
+ "src/elements/DraggableElement.js",
+ "src/elements/DraggableGroupElement.js",
+ "src/elements/IconElement.js",
+ "src/elements/IndicatorElement.js",
+ "src/elements/LabelElement.js",
+ "src/elements/LookupElement.js",
+ "src/elements/PopupElement.js",
+ "src/elements/FlaggedElement.js",
+ "src/elements/TitledElement.js",
+ "src/elements/ClippableElement.js",
+
+ "src/Tool.js",
+ "src/Toolbar.js",
+ "src/ToolGroup.js",
+
+ "src/dialogs/MessageDialog.js",
+ "src/dialogs/ProcessDialog.js",
+
+ "src/layouts/FieldLayout.js",
+ "src/layouts/ActionFieldLayout.js",
+ "src/layouts/FieldsetLayout.js",
+ "src/layouts/FormLayout.js",
+ "src/layouts/MenuLayout.js",
+ "src/layouts/BookletLayout.js",
+ "src/layouts/IndexLayout.js",
+ "src/layouts/PanelLayout.js",
+ "src/layouts/CardLayout.js",
+ "src/layouts/PageLayout.js",
+ "src/layouts/StackLayout.js",
+
+ "src/toolgroups/BarToolGroup.js",
+ "src/toolgroups/PopupToolGroup.js",
+ "src/toolgroups/ListToolGroup.js",
+ "src/toolgroups/MenuToolGroup.js",
+
+ "src/tools/PopupTool.js",
+ "src/tools/ToolGroupTool.js",
+
+ "src/widgets/GroupWidget.js",
+ "src/widgets/ItemWidget.js",
+ "src/widgets/OutlineControlsWidget.js",
+ "src/widgets/ToggleWidget.js",
+
+ "src/widgets/ButtonGroupWidget.js",
+ "src/widgets/ButtonWidget.js",
+ "src/widgets/ActionWidget.js",
+ "src/widgets/PopupButtonWidget.js",
+ "src/widgets/ToggleButtonWidget.js",
+ "src/widgets/DropdownWidget.js",
+ "src/widgets/IconWidget.js",
+ "src/widgets/IndicatorWidget.js",
+ "src/widgets/InputWidget.js",
+ "src/widgets/ButtonInputWidget.js",
+ "src/widgets/CheckboxInputWidget.js",
+ "src/widgets/DropdownInputWidget.js",
+ "src/widgets/RadioInputWidget.js",
+ "src/widgets/TextInputWidget.js",
+ "src/widgets/ComboBoxWidget.js",
+ "src/widgets/LabelWidget.js",
+ "src/widgets/OptionWidget.js",
+ "src/widgets/DecoratedOptionWidget.js",
+ "src/widgets/ButtonOptionWidget.js",
+ "src/widgets/RadioOptionWidget.js",
+ "src/widgets/MenuOptionWidget.js",
+ "src/widgets/MenuSectionOptionWidget.js",
+ "src/widgets/OutlineOptionWidget.js",
+ "src/widgets/TabOptionWidget.js",
+ "src/widgets/PopupWidget.js",
+ "src/widgets/ProgressBarWidget.js",
+ "src/widgets/SearchWidget.js",
+ "src/widgets/SelectWidget.js",
+ "src/widgets/ButtonSelectWidget.js",
+ "src/widgets/RadioSelectWidget.js",
+ "src/widgets/MenuSelectWidget.js",
+ "src/widgets/TextInputMenuSelectWidget.js",
+ "src/widgets/OutlineSelectWidget.js",
+ "src/widgets/TabSelectWidget.js",
+ "src/widgets/ToggleSwitchWidget.js",
+
+ "src/outro.js.txt"
+ ]
+ },
+ "oojs-ui-apex": {
+ "scripts": [
+ "src/themes/apex/ApexTheme.js"
+ ],
+ "styles": [
+ "src/themes/apex/core.less",
+ "src/themes/apex/icons.json",
+ "src/themes/apex/indicators.json",
+ "src/themes/apex/textures.json"
+ ]
+ },
+ "oojs-ui-apex-noimages": {
+ "styles": [
+ "src/themes/apex/core.less"
+ ]
+ },
+ "oojs-ui-apex-icons-movement": {
+ "styles": [
+ "src/themes/apex/icons-movement.json"
+ ]
+ },
+ "oojs-ui-apex-icons-moderation": {
+ "styles": [
+ "src/themes/apex/icons-moderation.json"
+ ]
+ },
+ "oojs-ui-apex-icons-editing-core": {
+ "styles": [
+ "src/themes/apex/icons-editing-core.json"
+ ]
+ },
+ "oojs-ui-apex-icons-editing-styling": {
+ "styles": [
+ "src/themes/apex/icons-editing-styling.json"
+ ]
+ },
+ "oojs-ui-apex-icons-editing-list": {
+ "styles": [
+ "src/themes/apex/icons-editing-list.json"
+ ]
+ },
+ "oojs-ui-apex-icons-editing-advanced": {
+ "styles": [
+ "src/themes/apex/icons-editing-advanced.json"
+ ]
+ },
+ "oojs-ui-mediawiki": {
+ "scripts": [
+ "src/themes/mediawiki/MediaWikiTheme.js"
+ ],
+ "styles": [
+ "src/themes/mediawiki/core.less",
+ "src/themes/mediawiki/icons.json",
+ "src/themes/mediawiki/indicators.json",
+ "src/themes/mediawiki/textures.json"
+ ]
+ },
+ "oojs-ui-mediawiki-noimages": {
+ "styles": [
+ "src/themes/mediawiki/core.less"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-movement": {
+ "styles": [
+ "src/themes/mediawiki/icons-movement.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-content": {
+ "styles": [
+ "src/themes/mediawiki/icons-content.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-alerts": {
+ "styles": [
+ "src/themes/mediawiki/icons-alerts.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-interactions": {
+ "styles": [
+ "src/themes/mediawiki/icons-interactions.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-moderation": {
+ "styles": [
+ "src/themes/mediawiki/icons-moderation.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-editing-core": {
+ "styles": [
+ "src/themes/mediawiki/icons-editing-core.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-editing-styling": {
+ "styles": [
+ "src/themes/mediawiki/icons-editing-styling.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-editing-list": {
+ "styles": [
+ "src/themes/mediawiki/icons-editing-list.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-editing-advanced": {
+ "styles": [
+ "src/themes/mediawiki/icons-editing-advanced.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-media": {
+ "styles": [
+ "src/themes/mediawiki/icons-media.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-location": {
+ "styles": [
+ "src/themes/mediawiki/icons-location.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-user": {
+ "styles": [
+ "src/themes/mediawiki/icons-user.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-layout": {
+ "styles": [
+ "src/themes/mediawiki/icons-layout.json"
+ ]
+ },
+ "oojs-ui-mediawiki-icons-wikimedia": {
+ "styles": [
+ "src/themes/mediawiki/icons-wikimedia.json"
+ ]
+ }
+}
diff --git a/vendor/oojs/oojs-ui/build/tasks/colorize-svg.js b/vendor/oojs/oojs-ui/build/tasks/colorize-svg.js
new file mode 100644
index 00000000..0eb421f3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/build/tasks/colorize-svg.js
@@ -0,0 +1,538 @@
+/*!
+ * Colorize SVG files.
+ *
+ * The task currently doesn't use the standard file specifying methods with this.filesSrc.
+ * An option to do it may be added in the future.
+ */
+
+/*jshint node:true */
+
+var Q = require( 'q' ),
+ path = require( 'path' ),
+ asyncTask = require( 'grunt-promise-q' );
+
+module.exports = function ( grunt ) {
+
+ asyncTask.registerMulti(
+ grunt,
+ 'colorizeSvg',
+ 'Generate colored variants of SVG images',
+ function () {
+ var
+ data = this.data,
+ options = this.options(),
+ source = new Source(
+ data.srcDir,
+ options.images,
+ options.variants,
+ {
+ intro: options.intro,
+ prefix: options.prefix,
+ cssPrependPath: data.cssPrependPath,
+ selectorWithoutVariant: options.selectorWithoutVariant || options.selector,
+ selectorWithVariant: options.selectorWithVariant || options.selector
+ }
+ );
+
+ return source.getImageList().generate(
+ new Destination(
+ data.destDir,
+ data.destLessFile || {
+ ltr: path.join( data.destDir, 'images.less' ),
+ rtl: path.join( data.destDir, 'images.rtl.less' )
+ }
+ )
+ ).then( function ( totalFiles ) {
+ grunt.log.writeln( 'Created ' + totalFiles + ' SVG files.' );
+ } );
+ }
+ );
+
+ /* Classes */
+
+ /**
+ * Image source.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {string} path Directory containing source images
+ * @param {Object} images Lists of image configurations
+ * @param {Object} [variants] List of variant configurations, keyed by variant name
+ * @param {Object} [options] Additional options
+ */
+ function Source( path, images, variants, options ) {
+ this.path = path;
+ this.images = images;
+ this.variants = variants || {};
+ this.options = options || {};
+ }
+
+ /**
+ * Get the path to source images directory.
+ *
+ * @return {string} Path
+ */
+ Source.prototype.getPath = function () {
+ return this.path;
+ };
+
+ /**
+ * Get image list.
+ *
+ * @return ImageList Image list
+ */
+ Source.prototype.getImageList = function () {
+ return new ImageList(
+ this.path,
+ new VariantList( this.variants ),
+ this.options,
+ this.images
+ );
+ };
+
+ /**
+ * Destination for images.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {string} path Image path
+ * @param {Object} stylesheetPath Stylesheet file path
+ * @param {string} stylesheetPath.ltr Stylesheet file path, left-to-right
+ * @param {string} stylesheetPath.rtl Stylesheet file path, right-to-left
+ */
+ function Destination( path, stylesheetPath ) {
+ this.path = path;
+ this.stylesheetPath = stylesheetPath;
+ }
+
+ /**
+ * Get image destination directory.
+ *
+ * @return {string} Destination path
+ */
+ Destination.prototype.getPath = function () {
+ return this.path;
+ };
+
+ /**
+ * Get path to file of generated Less stylesheet.
+ *
+ * @param {string} textDirection Text direction to get stylesheet path for, 'ltr' or 'rtl'
+ * @return {string} Destination path
+ */
+ Destination.prototype.getStylesheetPath = function ( textDirection ) {
+ return this.stylesheetPath[ textDirection ];
+ };
+
+ /**
+ * Source image.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {Object} list Image list
+ * @param {string} name Image name
+ * @param {Object} data Image options
+ */
+ function Image( list, name, data ) {
+ this.list = list;
+ this.name = name;
+ this.file = data.file;
+ this.variantNames = ( data.variants || [] )
+ .concat( this.list.getVariants().getGlobalVariantNames() )
+ .filter( function ( variant, index, variants ) {
+ return variants.indexOf( variant ) === index;
+ } );
+ }
+
+ /**
+ * Generate CSS and images.
+ *
+ * @param {Destination} destination Destination
+ * @return {Q.Promise}
+ */
+ Image.prototype.generate = function ( destination ) {
+ // TODO Make configurable
+ function getDeclarations( primary ) {
+ // If 'primary' is not a SVG file, 'fallback' and 'primary' are intentionally the same
+ var fallback = primary.replace( /\.svg$/, '.png' );
+ return '.oo-ui-background-image-svg2(' +
+ '\'' + ( cssPrependPath || '' ) + primary + '\', ' +
+ '\'' + ( cssPrependPath || '' ) + fallback + '\'' +
+ ')';
+ }
+ function variantizeFileName( fileName, variantName ) {
+ if ( variantName ) {
+ return fileName.replace( /\.(\w+)$/, '-' + variantName + '.$1' );
+ }
+ return fileName;
+ }
+
+ var selector, declarations, direction, lang, langSelector,
+ deferred = Q.defer(),
+ file = typeof this.file === 'string' ?
+ { ltr: this.file, rtl: this.file } :
+ { ltr: this.file.ltr || this.file.default, rtl: this.file.rtl || this.file.default },
+ moreLangs = this.file.lang || {},
+ name = this.name,
+ sourcePath = this.list.getPath(),
+ destinationPath = destination.getPath(),
+ variants = this.list.getVariants(),
+ cssClassPrefix = this.list.getCssClassPrefix(),
+ cssSelectors = this.list.getCssSelectors(),
+ cssPrependPath = this.list.options.cssPrependPath,
+ originalSvg = {},
+ rules = {
+ ltr: [],
+ rtl: []
+ },
+ files = {},
+ uncolorizableImages = [],
+ unknownVariants = [];
+
+ // Expand shorthands:
+ // { "en,de,fr": "foo.svg" } → { "en": "foo.svg", "de": "foo.svg", "fr": "foo.svg" }
+ moreLangs = Object.keys( moreLangs ).reduce( function ( langs, langList ) {
+ langList.split( ',' ).forEach( function ( lang ) {
+ langs[ lang ] = moreLangs[ langList ];
+ } );
+ return langs;
+ }, {} );
+
+ // Original
+ selector = cssSelectors.selectorWithoutVariant
+ .replace( /{prefix}/g, cssClassPrefix )
+ .replace( /{name}/g, name )
+ .replace( /{variant}/g, '' );
+
+ for ( direction in file ) {
+ declarations = getDeclarations( file[ direction ] );
+ rules[ direction ].push( selector + ' {\n\t' + declarations + '\n}' );
+
+ originalSvg[ direction ] = grunt.file.read(
+ path.join( sourcePath, file[ direction ] )
+ );
+ files[ path.join( destinationPath, file[ direction ] ) ] = originalSvg[ direction ];
+
+ for ( lang in moreLangs ) {
+ // This will not work for selectors ending in a pseudo-element.
+ langSelector = ':lang(' + lang + ')';
+ declarations = getDeclarations( moreLangs[ lang ] );
+ rules[ direction ].push(
+ '/* @noflip */\n' +
+ selector.replace( /,|$/g, langSelector + '$&' ) +
+ ' {\n\t' + declarations + '\n}'
+ );
+
+ originalSvg[ 'lang-' + lang ] = grunt.file.read(
+ path.join( sourcePath, moreLangs[ lang ] )
+ );
+ files[ path.join( destinationPath, moreLangs[ lang ] ) ] = originalSvg[ 'lang-' + lang ];
+ }
+ }
+
+ // Variants
+ this.variantNames.forEach( function ( variantName ) {
+ var variantSvg, destinationFilePath,
+ variant = variants.getVariant( variantName );
+
+ if ( variant === undefined ) {
+ unknownVariants.push( variantName );
+ return;
+ }
+
+ selector = cssSelectors.selectorWithVariant
+ .replace( /{prefix}/g, cssClassPrefix )
+ .replace( /{name}/g, name )
+ .replace( /{variant}/g, variantName );
+
+ for ( direction in file ) {
+ declarations = getDeclarations( variantizeFileName( file[ direction ], variantName ) );
+ rules[ direction ].push( selector + ' {\n\t' + declarations + '\n}' );
+
+ // TODO: Do this in a safer and more clever way
+ variantSvg = originalSvg[ direction ].replace(
+ /<svg[^>]*>/, '$&<style>* { fill: ' + variant.getColor() + ' }</style>'
+ );
+
+ if ( originalSvg[ direction ] === variantSvg ) {
+ uncolorizableImages.push( file[ direction ] );
+ continue;
+ }
+
+ destinationFilePath = path.join(
+ destinationPath,
+ variantizeFileName( file[ direction ], variantName )
+ );
+ files[ destinationFilePath ] = variantSvg;
+
+ for ( lang in moreLangs ) {
+ langSelector = ':lang(' + lang + ')';
+ declarations = getDeclarations( variantizeFileName( moreLangs[ lang ], variantName ) );
+ rules[ direction ].push(
+ '/* @noflip */\n' +
+ selector.replace( /,|$/g, langSelector + '$&' ) +
+ ' {\n\t' + declarations + '\n}'
+ );
+
+ variantSvg = originalSvg[ 'lang-' + lang ].replace(
+ /<svg[^>]*>/, '$&<style>* { fill: ' + variant.getColor() + ' }</style>'
+ );
+
+ if ( originalSvg[ 'lang-' + lang ] === variantSvg ) {
+ uncolorizableImages.push( moreLangs[ lang ] );
+ continue;
+ }
+
+ destinationFilePath = path.join(
+ destinationPath,
+ variantizeFileName( moreLangs[ lang ], variantName )
+ );
+ files[ destinationFilePath ] = variantSvg;
+ }
+ }
+ } );
+
+ if ( unknownVariants.length || uncolorizableImages.length ) {
+ if ( unknownVariants.length ) {
+ grunt.log.error(
+ unknownVariants.length +
+ ' unknown variants requested: ' +
+ unknownVariants.join( ', ' )
+ );
+ }
+ if ( uncolorizableImages.length ) {
+ grunt.log.error(
+ uncolorizableImages.length +
+ ' invalid source images: ' +
+ uncolorizableImages.join( ', ' )
+ );
+ }
+ deferred.reject( 'Failed to generate some images' );
+ } else {
+ deferred.resolve( {
+ rules: rules,
+ files: files
+ } );
+ }
+
+ return deferred.promise;
+ };
+
+ /**
+ * List of source images.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {string} path Images path
+ * @param {VariantList} variants Variants list
+ * @param {Object} options Additional options
+ * @param {Object} data List of image configurations keyed by name
+ */
+ function ImageList( path, variants, options, data ) {
+ var key;
+
+ this.list = {};
+ this.path = path;
+ this.variants = variants;
+ this.options = options;
+
+ for ( key in data ) {
+ this.list[ key ] = new Image( this, key, data[ key ] );
+ }
+ }
+
+ /**
+ * Get image path.
+ *
+ * @return {string} Image path
+ */
+ ImageList.prototype.getPath = function () {
+ return this.path;
+ };
+
+ /**
+ * Get image variants.
+ *
+ * @return {VariantsList} Image variants
+ */
+ ImageList.prototype.getVariants = function () {
+ return this.variants;
+ };
+
+ /**
+ * Get CSS class prefix.
+ *
+ * @return {string} CSS class prefix
+ */
+ ImageList.prototype.getCssClassPrefix = function () {
+ return this.options.prefix || '';
+ };
+
+ /**
+ * Get CSS selectors.
+ *
+ * @return {Object.<string, string>} CSS selectors
+ */
+ ImageList.prototype.getCssSelectors = function () {
+ return {
+ selectorWithoutVariant: this.options.selectorWithoutVariant || '.{prefix}-{name}',
+ selectorWithVariant: this.options.selectorWithVariant || '.{prefix}-{name}-{variant}'
+ };
+ };
+
+ /**
+ * Get CSS file intro.
+ *
+ * @return {string} CSS file intro
+ */
+ ImageList.prototype.getCssIntro = function () {
+ return this.options.intro || '';
+ };
+
+ /**
+ * Get number of images in list.
+ *
+ * @return {number} List length
+ */
+ ImageList.prototype.getLength = function () {
+ return Object.keys( this.list ).length;
+ };
+
+ /**
+ * Generate images and CSS.
+ *
+ * @param {Destination} destination Destination
+ * @return {Q.Promise} Promise resolved with number of generated SVG files
+ */
+ ImageList.prototype.generate = function ( destination ) {
+ var list = this.list,
+ intro = this.getCssIntro();
+ return Q.all( Object.keys( this.list ).map( function ( key ) {
+ return list[ key ].generate( destination );
+ } ) ).then( function ( data ) {
+ var textDirection, stylesheetPath, destinationFilePath, dataFormat;
+ dataFormat = {
+ files: {},
+ rules: {
+ ltr: [],
+ rtl: []
+ }
+ };
+
+ data = data.reduce( function ( a, b ) {
+ for ( destinationFilePath in b.files ) {
+ // This de-duplicates the entries, as the same file can be used by many Images
+ a.files[ destinationFilePath ] = b.files[ destinationFilePath ];
+ }
+ a.rules.ltr = a.rules.ltr.concat( b.rules.ltr );
+ a.rules.rtl = a.rules.rtl.concat( b.rules.rtl );
+ return a;
+ }, dataFormat );
+
+ for ( textDirection in data.rules ) {
+ stylesheetPath = destination.getStylesheetPath( textDirection );
+ grunt.file.write(
+ stylesheetPath,
+ intro + '\n' + data.rules[ textDirection ].join( '\n' )
+ );
+ grunt.log.writeln( 'Created "' + stylesheetPath + '".' );
+ }
+ for ( destinationFilePath in data.files ) {
+ grunt.file.write( destinationFilePath, data.files[ destinationFilePath ] );
+ }
+
+ return Object.keys( data.files ).length;
+ } );
+ };
+
+ /**
+ * Image variant.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {VariantList} list Variant list
+ * @param {string} name Variant name
+ * @param {Object} data Variant options
+ */
+ function Variant( list, name, data ) {
+ // Properties
+ this.list = list;
+ this.name = name;
+ this.color = data.color;
+ this.global = data.global;
+ }
+
+ /**
+ * Check if variant is global.
+ *
+ * @return {boolean} Variant is global
+ */
+ Variant.prototype.isGlobal = function () {
+ return this.global;
+ };
+
+ /**
+ * Get variant color.
+ *
+ * @return {string} CSS color expression
+ */
+ Variant.prototype.getColor = function () {
+ return this.color;
+ };
+
+ /**
+ * List of variants.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {Object} list List of variant configurations keyed by name
+ */
+ function VariantList( data ) {
+ var key;
+
+ this.list = {};
+ this.globals = [];
+
+ for ( key in data ) {
+ this.list[ key ] = new Variant( this, key, data[ key ] );
+ if ( this.list[ key ].isGlobal() ) {
+ this.globals.push( key );
+ }
+ }
+ }
+
+ /**
+ * Get names of global variants.
+ *
+ * @return {string[]} Global variant names
+ */
+ VariantList.prototype.getGlobalVariantNames = function () {
+ return this.globals;
+ };
+
+ /**
+ * Get variant by name.
+ *
+ * @param {string} name Variant name
+ * @return {Variant|undefined} Variant with matching name, or undefined of none exists.
+ */
+ VariantList.prototype.getVariant = function ( name ) {
+ return this.list[ name ];
+ };
+
+ /**
+ * Get number of variants in list.
+ *
+ * @return {number} List length
+ */
+ VariantList.prototype.getLength = function () {
+ return Object.keys( this.list ).length;
+ };
+
+};
diff --git a/vendor/oojs/oojs-ui/build/tasks/typos.js b/vendor/oojs/oojs-ui/build/tasks/typos.js
new file mode 100644
index 00000000..6c0bb4ee
--- /dev/null
+++ b/vendor/oojs/oojs-ui/build/tasks/typos.js
@@ -0,0 +1,89 @@
+/*!
+ * Check files from 'src' for typos; fail if any are found.
+ */
+
+/*jshint node:true */
+module.exports = function ( grunt ) {
+
+ grunt.registerMultiTask( 'typos', function () {
+ var typosData, typosCSRegExp, typosCIRegExp, file,
+ options = this.options( {
+ typos: 'typos.json'
+ } ),
+ files = this.filesSrc,
+ fileCount = files.length,
+ typosJSON = grunt.file.read( options.typos ),
+ typoCount = 0,
+ ok = true;
+
+ try {
+ typosData = JSON.parse( typosJSON );
+ } catch ( e ) {
+ grunt.log.error( 'Could not parse ' + options.typos + ': ' + e );
+ }
+
+ typosData.caseSensitive = typosData.caseSensitive || [];
+ typosData.caseInsensitive = typosData.caseInsensitive || [];
+
+ typoCount += typosData.caseSensitive.length + typosData.caseInsensitive.length;
+
+ function patternMap( typo ) {
+ return typo[ 0 ];
+ }
+
+ if ( typosData.caseSensitive.length ) {
+ typosCSRegExp = new RegExp(
+ '(' + typosData.caseSensitive.map( patternMap ).join( '|' ) + ')', 'g'
+ );
+ }
+
+ if ( typosData.caseInsensitive.length ) {
+ typosCIRegExp = new RegExp(
+ '(' + typosData.caseInsensitive.map( patternMap ).join( '|' ) + ')', 'gi'
+ );
+ }
+
+ function findTypo( line, lineNumber, filepath, typos, flags ) {
+ // Check each pattern to find the replacement
+ typos.forEach( function ( typo ) {
+ var replace,
+ pattern = new RegExp( typo[ 0 ], flags ),
+ matches = line.match( pattern );
+
+ if ( matches ) {
+ ok = false;
+ replace = matches[ 0 ].replace( pattern, typo[ 1 ], flags );
+ grunt.log.error(
+ 'File "' + filepath + '" contains typo "' + matches[ 0 ] + '" on line ' + lineNumber +
+ ', did you mean "' + replace + '"?'
+ );
+ }
+ } );
+ }
+
+ files.forEach( function ( filepath ) {
+ if ( grunt.file.isDir( filepath ) ) {
+ fileCount--;
+ return;
+ }
+ file = grunt.file.read( filepath );
+ file.split( '\n' ).forEach( function ( line, lineNumber ) {
+ // Check for any typos on the line with group expressions
+ if ( typosCSRegExp && typosCSRegExp.test( line ) ) {
+ findTypo( line, lineNumber, filepath, typosData.caseSensitive, 'g' );
+ }
+ if ( typosCIRegExp && typosCIRegExp.test( line ) ) {
+ findTypo( line, lineNumber, filepath, typosData.caseInsensitive, 'gi' );
+ }
+ } );
+ } );
+
+ if ( !ok ) {
+ return false;
+ }
+
+ grunt.log.ok( 'No typos found; ' +
+ fileCount + ' file' + ( fileCount !== 1 ? 's' : '' ) + ' checked for ' +
+ typoCount + ' typo' + ( typoCount !== 1 ? 's' : '' ) + '.' );
+ } );
+};
diff --git a/vendor/oojs/oojs-ui/build/typos.json b/vendor/oojs/oojs-ui/build/typos.json
new file mode 100644
index 00000000..5916d77e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/build/typos.json
@@ -0,0 +1,17 @@
+{
+ "caseSensitive": [
+ [ "@returns", "@return" ]
+ ],
+ "caseInsensitive": [
+ [ "paralell", "parallel" ],
+ [ "properites", "properties" ],
+ [ "visiblit(ies|y)", "visibilit$1" ],
+ [ "movablilties", "movabilities" ],
+ [ "inpsect(ors?|ion)", "inspect$1" ],
+ [ "\bteh\b", "the" ],
+ [ "intialization", "initialization" ],
+ [ "durring", "during" ],
+ [ "contian", "contain" ],
+ [ "occured", "occurred" ]
+ ]
+}
diff --git a/vendor/oojs/oojs-ui/composer.json b/vendor/oojs/oojs-ui/composer.json
new file mode 100644
index 00000000..0907de12
--- /dev/null
+++ b/vendor/oojs/oojs-ui/composer.json
@@ -0,0 +1,24 @@
+{
+ "name": "oojs/oojs-ui",
+ "description": "Provides library of common widgets, layouts, and windows.",
+ "homepage": "https://www.mediawiki.org/wiki/OOjs_UI",
+ "license": "MIT",
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.8.*",
+ "mediawiki/mediawiki-codesniffer": "0.1.0",
+ "squizlabs/php_codesniffer": "2.1.*"
+ },
+ "autoload": {
+ "classmap": ["php/"]
+ },
+ "scripts": {
+ "test": [
+ "parallel-lint . --exclude vendor",
+ "phpcs $PHPCS_ARGS --standard=vendor/mediawiki/mediawiki-codesniffer/MediaWiki --ignore=vendor --extensions=php,php5,inc -v ."
+ ]
+ }
+}
+
diff --git a/vendor/oojs/oojs-ui/demos/demo.js b/vendor/oojs/oojs-ui/demos/demo.js
new file mode 100644
index 00000000..a1d39314
--- /dev/null
+++ b/vendor/oojs/oojs-ui/demos/demo.js
@@ -0,0 +1,504 @@
+/**
+ * @class
+ * @extends {OO.ui.Element}
+ *
+ * @constructor
+ */
+OO.ui.Demo = function OoUiDemo() {
+ // Parent
+ OO.ui.Demo.super.call( this );
+
+ // Normalization
+ this.normalizeHash();
+
+ // Properties
+ this.stylesheetLinks = this.getStylesheetLinks();
+ this.mode = this.getCurrentMode();
+ this.$menu = $( '<div>' );
+ this.pageDropdown = new OO.ui.DropdownWidget( {
+ menu: {
+ items: [
+ new OO.ui.MenuOptionWidget( { data: 'dialogs', label: 'Dialogs' } ),
+ new OO.ui.MenuOptionWidget( { data: 'icons', label: 'Icons' } ),
+ new OO.ui.MenuOptionWidget( { data: 'toolbars', label: 'Toolbars' } ),
+ new OO.ui.MenuOptionWidget( { data: 'widgets', label: 'Widgets' } )
+ ]
+ },
+ classes: [ 'oo-ui-demo-pageDropdown' ]
+ } );
+ this.pageMenu = this.pageDropdown.getMenu();
+ this.themeSelect = new OO.ui.ButtonSelectWidget().addItems( [
+ new OO.ui.ButtonOptionWidget( { data: 'mediawiki', label: 'MediaWiki' } ),
+ new OO.ui.ButtonOptionWidget( { data: 'apex', label: 'Apex' } )
+ ] );
+ this.graphicsSelect = new OO.ui.ButtonSelectWidget().addItems( [
+ new OO.ui.ButtonOptionWidget( { data: 'mixed', label: 'Mixed' } ),
+ new OO.ui.ButtonOptionWidget( { data: 'vector', label: 'Vector' } ),
+ new OO.ui.ButtonOptionWidget( { data: 'raster', label: 'Raster' } )
+ ] );
+ this.directionSelect = new OO.ui.ButtonSelectWidget().addItems( [
+ new OO.ui.ButtonOptionWidget( { data: 'ltr', label: 'LTR' } ),
+ new OO.ui.ButtonOptionWidget( { data: 'rtl', label: 'RTL' } )
+ ] );
+
+ // Events
+ this.pageMenu.on( 'choose', OO.ui.bind( this.onModeChange, this ) );
+ this.themeSelect.on( 'choose', OO.ui.bind( this.onModeChange, this ) );
+ this.graphicsSelect.on( 'choose', OO.ui.bind( this.onModeChange, this ) );
+ this.directionSelect.on( 'choose', OO.ui.bind( this.onModeChange, this ) );
+
+ // Initialization
+ this.pageMenu.selectItemByData( this.mode.page );
+ this.themeSelect.selectItemByData( this.mode.theme );
+ this.graphicsSelect.selectItemByData( this.mode.graphics );
+ this.directionSelect.selectItemByData( this.mode.direction );
+ this.$menu
+ .addClass( 'oo-ui-demo-menu' )
+ .append(
+ this.pageDropdown.$element,
+ this.themeSelect.$element,
+ this.graphicsSelect.$element,
+ this.directionSelect.$element
+ );
+ this.$element
+ .addClass( 'oo-ui-demo' )
+ .append( this.$menu );
+ $( 'body' ).addClass( 'oo-ui-' + this.mode.direction );
+ // Correctly apply direction to the <html> tags as well
+ $( 'html' ).attr( 'dir', this.mode.direction );
+ $( 'head' ).append( this.stylesheetLinks );
+ OO.ui.theme = new ( this.constructor.static.themes[ this.mode.theme ].theme )();
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.Demo, OO.ui.Element );
+
+/* Static Properties */
+
+/**
+ * Available pages.
+ *
+ * Populated by each of the page scripts in the `pages` directory.
+ *
+ * @static
+ * @property {Object.<string,Function>} pages List of functions that render a page, keyed by
+ * symbolic page name
+ */
+OO.ui.Demo.static.pages = {};
+
+/**
+ * Available themes.
+ *
+ * List of theme descriptions, each containing a `fileSuffix` property used for linking to the
+ * correct stylesheet file and a `theme` property containing a theme class
+ *
+ * @static
+ * @property {Object.<string,Object>}
+ */
+OO.ui.Demo.static.themes = {
+ mediawiki: {
+ fileSuffix: '-mediawiki',
+ additionalSuffixes: [
+ '-icons-movement',
+ '-icons-content',
+ '-icons-alerts',
+ '-icons-interactions',
+ '-icons-moderation',
+ '-icons-editing-core',
+ '-icons-editing-styling',
+ '-icons-editing-list',
+ '-icons-editing-advanced',
+ '-icons-media',
+ '-icons-location',
+ '-icons-user',
+ '-icons-layout',
+ '-icons-wikimedia'
+ ],
+ theme: OO.ui.MediaWikiTheme
+ },
+ apex: {
+ fileSuffix: '-apex',
+ additionalSuffixes: [
+ '-icons-movement',
+ '-icons-moderation',
+ '-icons-editing-core',
+ '-icons-editing-styling',
+ '-icons-editing-list',
+ '-icons-editing-advanced'
+ ],
+ theme: OO.ui.ApexTheme
+ }
+};
+
+/**
+ * Available graphics formats.
+ *
+ * List of graphics format descriptions, each containing a `fileSuffix` property used for linking
+ * to the correct stylesheet file.
+ *
+ * @static
+ * @property {Object.<string,Object>}
+ */
+OO.ui.Demo.static.graphics = {
+ mixed: { fileSuffix: '' },
+ vector: { fileSuffix: '.vector' },
+ raster: { fileSuffix: '.raster' }
+};
+
+/**
+ * Available text directions.
+ *
+ * List of text direction descriptions, each containing a `fileSuffix` property used for linking to
+ * the correct stylesheet file.
+ *
+ * @static
+ * @property {Object.<string,Object>}
+ */
+OO.ui.Demo.static.directions = {
+ ltr: { fileSuffix: '' },
+ rtl: { fileSuffix: '.rtl' }
+};
+
+/**
+ * Default page.
+ *
+ * Set by one of the page scripts in the `pages` directory.
+ *
+ * @static
+ * @property {string|null}
+ */
+OO.ui.Demo.static.defaultPage = null;
+
+/**
+ * Default page.
+ *
+ * Set by one of the page scripts in the `pages` directory.
+ *
+ * @static
+ * @property {string}
+ */
+OO.ui.Demo.static.defaultTheme = 'mediawiki';
+
+/**
+ * Default page.
+ *
+ * Set by one of the page scripts in the `pages` directory.
+ *
+ * @static
+ * @property {string}
+ */
+OO.ui.Demo.static.defaultGraphics = 'vector';
+
+/**
+ * Default page.
+ *
+ * Set by one of the page scripts in the `pages` directory.
+ *
+ * @static
+ * @property {string}
+ */
+OO.ui.Demo.static.defaultDirection = 'ltr';
+
+/* Methods */
+
+/**
+ * Load the demo page. Must be called after $element is attached.
+ */
+OO.ui.Demo.prototype.initialize = function () {
+ var demo = this,
+ promises = $( this.stylesheetLinks ).map( function () {
+ return $( this ).data( 'load-promise' );
+ } );
+ $.when.apply( $, promises )
+ .done( function () {
+ demo.constructor.static.pages[ demo.mode.page ]( demo );
+ } )
+ .fail( function () {
+ demo.$element.append( $( '<p>' ).text( 'Demo styles failed to load.' ) );
+ } );
+};
+
+/**
+ * Handle mode change events.
+ *
+ * Will load a new page.
+ */
+OO.ui.Demo.prototype.onModeChange = function () {
+ var page = this.pageMenu.getSelectedItem().getData(),
+ theme = this.themeSelect.getSelectedItem().getData(),
+ direction = this.directionSelect.getSelectedItem().getData(),
+ graphics = this.graphicsSelect.getSelectedItem().getData();
+
+ location.hash = '#' + [ page, theme, graphics, direction ].join( '-' );
+};
+
+/**
+ * Get a list of mode factors.
+ *
+ * Factors are a mapping between symbolic names used in the URL hash and internal information used
+ * to act on those symbolic names.
+ *
+ * Factor lists are in URL order: page, theme, graphics, direction. Page contains the symbolic
+ * page name, others contain file suffixes.
+ *
+ * @return {Object[]} List of mode factors, keyed by symbolic name
+ */
+OO.ui.Demo.prototype.getFactors = function () {
+ var key,
+ factors = [ {}, {}, {}, {} ];
+
+ for ( key in this.constructor.static.pages ) {
+ factors[ 0 ][ key ] = key;
+ }
+ for ( key in this.constructor.static.themes ) {
+ factors[ 1 ][ key ] = this.constructor.static.themes[ key ].fileSuffix;
+ }
+ for ( key in this.constructor.static.graphics ) {
+ factors[ 2 ][ key ] = this.constructor.static.graphics[ key ].fileSuffix;
+ }
+ for ( key in this.constructor.static.directions ) {
+ factors[ 3 ][ key ] = this.constructor.static.directions[ key ].fileSuffix;
+ }
+
+ return factors;
+};
+
+/**
+ * Get a list of default factors.
+ *
+ * Factor defaults are in URL order: page, theme, graphics, direction. Each contains a symbolic
+ * factor name which should be used as a fallback when the URL hash is missing or invalid.
+ *
+ * @return {Object[]} List of default factors
+ */
+OO.ui.Demo.prototype.getDefaultFactorValues = function () {
+ return [
+ this.constructor.static.defaultPage,
+ this.constructor.static.defaultTheme,
+ this.constructor.static.defaultGraphics,
+ this.constructor.static.defaultDirection
+ ];
+};
+
+/**
+ * Parse the current URL hash into factor values.
+ *
+ * @return {string[]} Factor values in URL order: page, theme, graphics, direction
+ */
+OO.ui.Demo.prototype.getCurrentFactorValues = function () {
+ return location.hash.slice( 1 ).split( '-' );
+};
+
+/**
+ * Get the current mode.
+ *
+ * Generated from parsed URL hash values.
+ *
+ * @return {Object} List of factor values keyed by factor name
+ */
+OO.ui.Demo.prototype.getCurrentMode = function () {
+ var factorValues = this.getCurrentFactorValues();
+
+ return {
+ page: factorValues[ 0 ],
+ theme: factorValues[ 1 ],
+ graphics: factorValues[ 2 ],
+ direction: factorValues[ 3 ]
+ };
+};
+
+/**
+ * Get link elements for the current mode.
+ *
+ * @return {HTMLElement[]} List of link elements
+ */
+OO.ui.Demo.prototype.getStylesheetLinks = function () {
+ var i, len, links, fragments,
+ factors = this.getFactors(),
+ theme = this.getCurrentFactorValues()[ 1 ],
+ suffixes = this.constructor.static.themes[ theme ].additionalSuffixes || [],
+ urls = [];
+
+ // Translate modes to filename fragments
+ fragments = this.getCurrentFactorValues().map( function ( val, index ) {
+ return factors[ index ][ val ];
+ } );
+
+ // Theme styles
+ urls.push( '../dist/oojs-ui' + fragments.slice( 1 ).join( '' ) + '.css' );
+ for ( i = 0, len = suffixes.length; i < len; i++ ) {
+ urls.push( '../dist/oojs-ui' + fragments[1] + suffixes[i] + fragments.slice( 2 ).join( '' ) + '.css' );
+ }
+
+ // Demo styles
+ urls.push( 'styles/demo' + fragments[ 3 ] + '.css' );
+
+ // Add link tags
+ links = urls.map( function ( url ) {
+ var
+ link = document.createElement( 'link' ),
+ $link = $( link ),
+ deferred = $.Deferred();
+ $link.data( 'load-promise', deferred.promise() );
+ $link.on( {
+ load: deferred.resolve,
+ error: deferred.reject
+ } );
+ link.rel = 'stylesheet';
+ link.href = url;
+ return link;
+ } );
+
+ return links;
+};
+
+/**
+ * Normalize the URL hash.
+ */
+OO.ui.Demo.prototype.normalizeHash = function () {
+ var i, len, factorValues,
+ modes = [],
+ factors = this.getFactors(),
+ defaults = this.getDefaultFactorValues();
+
+ factorValues = this.getCurrentFactorValues();
+ for ( i = 0, len = factors.length; i < len; i++ ) {
+ modes[ i ] = factors[ i ][ factorValues[ i ] ] !== undefined ? factorValues[ i ] : defaults[ i ];
+ }
+
+ // Update hash
+ location.hash = modes.join( '-' );
+};
+
+/**
+ * Destroy demo.
+ */
+OO.ui.Demo.prototype.destroy = function () {
+ $( 'body' ).removeClass( 'oo-ui-ltr oo-ui-rtl' );
+ $( this.stylesheetLinks ).remove();
+ this.$element.remove();
+};
+
+/**
+ * Build a console for interacting with an element.
+ *
+ * @param {OO.ui.Element} item
+ * @param {string} key Variable name for item
+ * @param {string} [item.label=""]
+ * @return {jQuery} Console interface element
+ */
+OO.ui.Demo.prototype.buildConsole = function ( item, key ) {
+ var $toggle, $log, $label, $input, $submit, $console, $form,
+ console = window.console;
+
+ function exec( str ) {
+ var func, ret;
+ /*jshint evil:true */
+ if ( str.indexOf( 'return' ) !== 0 ) {
+ str = 'return ' + str;
+ }
+ try {
+ func = new Function( key, 'item', str );
+ ret = { value: func( item, item ) };
+ } catch ( error ) {
+ ret = {
+ value: undefined,
+ error: error
+ };
+ }
+ return ret;
+ }
+
+ function submit() {
+ var val, result, logval;
+
+ val = $input.val();
+ $input.val( '' );
+ $input[ 0 ].focus();
+ result = exec( val );
+
+ logval = String( result.value );
+ if ( logval === '' ) {
+ logval = '""';
+ }
+
+ $log.append(
+ $( '<div>' )
+ .addClass( 'oo-ui-demo-console-log-line oo-ui-demo-console-log-line-input' )
+ .text( val ),
+ $( '<div>' )
+ .addClass( 'oo-ui-demo-console-log-line oo-ui-demo-console-log-line-return' )
+ .text( logval || result.value )
+ );
+
+ if ( result.error ) {
+ $log.append( $( '<div>' ).addClass( 'oo-ui-demo-console-log-line oo-ui-demo-console-log-line-error' ).text( result.error ) );
+ }
+
+ if ( console && console.log ) {
+ console.log( '[demo]', result.value );
+ if ( result.error ) {
+ if ( console.error ) {
+ console.error( '[demo]', String( result.error ), result.error );
+ } else {
+ console.log( '[demo] Error: ', result.error );
+ }
+ }
+ }
+
+ // Scrol to end
+ $log.prop( 'scrollTop', $log.prop( 'scrollHeight' ) );
+ }
+
+ $toggle = $( '<span>' )
+ .addClass( 'oo-ui-demo-console-toggle' )
+ .attr( 'title', 'Toggle console' )
+ .on( 'click', function ( e ) {
+ e.preventDefault();
+ $console.toggleClass( 'oo-ui-demo-console-collapsed oo-ui-demo-console-expanded' );
+ if ( $input.is( ':visible' ) ) {
+ $input[ 0 ].focus();
+ if ( console && console.log ) {
+ window[ key ] = item;
+ console.log( '[demo]', 'Global ' + key + ' has been set' );
+ console.log( '[demo]', item );
+ }
+ }
+ } );
+
+ $log = $( '<div>' )
+ .addClass( 'oo-ui-demo-console-log' );
+
+ $label = $( '<label>' )
+ .addClass( 'oo-ui-demo-console-label' );
+
+ $input = $( '<input>' )
+ .addClass( 'oo-ui-demo-console-input' )
+ .prop( 'placeholder', '... (predefined: ' + key + ')' );
+
+ $submit = $( '<div>' )
+ .addClass( 'oo-ui-demo-console-submit' )
+ .text( '↵' )
+ .on( 'click', submit );
+
+ $form = $( '<form>' ).on( 'submit', function ( e ) {
+ e.preventDefault();
+ submit();
+ } );
+
+ $console = $( '<div>' )
+ .addClass( 'oo-ui-demo-console oo-ui-demo-console-collapsed' )
+ .append(
+ $toggle,
+ $log,
+ $form.append(
+ $label.append(
+ $input
+ ),
+ $submit
+ )
+ );
+
+ return $console;
+};
diff --git a/vendor/oojs/oojs-ui/demos/index.html b/vendor/oojs/oojs-ui/demos/index.html
new file mode 100644
index 00000000..35ccc69a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/demos/index.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+ <meta charset="UTF-8">
+ <title>OOjs UI Demos</title>
+ <!-- Prevent scaling on mobile devices which cause problems with dialog sizing -->
+ <meta name="viewport" content="width=device-width, user-scalable=no">
+</head>
+<body>
+ <script src="../node_modules/jquery/dist/jquery.js"></script>
+ <script src="../node_modules/oojs/dist/oojs.jquery.js"></script>
+ <script src="../dist/oojs-ui.js"></script>
+ <script src="../dist/oojs-ui-apex.js"></script>
+ <script src="../dist/oojs-ui-mediawiki.js"></script>
+ <script src="demo.js"></script>
+ <script src="pages/dialogs.js"></script>
+ <script src="pages/icons.js"></script>
+ <script src="pages/widgets.js"></script>
+ <script src="pages/toolbars.js"></script>
+ <script>
+ $( function () {
+ var demo;
+
+ function setup() {
+ if ( demo ) {
+ demo.destroy();
+ }
+ demo = new OO.ui.Demo();
+ $( 'body' ).append( demo.$element );
+ demo.initialize();
+ }
+
+ setup();
+
+ $( window ).on( 'hashchange', setup );
+ } )
+ </script>
+</body>
+</html>
diff --git a/vendor/oojs/oojs-ui/demos/infusion.js b/vendor/oojs/oojs-ui/demos/infusion.js
new file mode 100644
index 00000000..4fa0f64a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/demos/infusion.js
@@ -0,0 +1,66 @@
+// Demonstrate JavaScript 'infusion' of PHP-generated widgets.
+// Used by widgets.php.
+
+var $menu, themeButtons, themes;
+
+// Helper function to get high resolution profiling data, where available.
+function now() {
+ /* global performance */
+ return ( typeof performance !== 'undefined' ) ? performance.now() :
+ Date.now ? Date.now() : new Date().getTime();
+}
+
+// Add a button to infuse everything!
+// (You wouldn't typically do this: you'd only infuse those objects which
+// you needed to attach client-side behaviors to. But our theme-setting
+// code needs a list of all widgets, and it's a good overall test.)
+function infuseAll() {
+ var start, end, all;
+ start = now();
+ all = $( '*[data-ooui]' ).map( function ( _, e ) {
+ return OO.ui.infuse( e.id );
+ } );
+ end = now();
+ window.console.log( 'Infusion time: ' + ( end - start ) );
+ return all;
+}
+$menu = $( '.oo-ui-demo-menu' );
+$menu.append(
+ new OO.ui.ButtonGroupWidget().addItems( [
+ new OO.ui.ButtonWidget( { label: 'Infuse' } )
+ .on( 'click', infuseAll )
+ ] ).$element );
+
+// Hook up the theme switch buttons.
+// This is more like a typical use case: we are just infusing specific
+// named UI elements.
+themeButtons = [
+ // If you're lazy, you can just use OO.ui.infuse. But if you name the
+ // Element type you're expecting, you can get some type checking.
+ OO.ui.ButtonWidget.static.infuse( 'theme-mediawiki' ),
+ OO.ui.ButtonWidget.static.infuse( 'theme-apex' )
+];
+themes = {
+ mediawiki: new OO.ui.MediaWikiTheme(),
+ apex: new OO.ui.ApexTheme()
+};
+function updateTheme( theme ) {
+ OO.ui.theme = themes[theme];
+ $.each( infuseAll(), function ( _, el ) {
+ // FIXME: this isn't really supported, but it makes a neat demo.
+ OO.ui.theme.updateElementClasses( el );
+ } );
+ // A bit of a hack, but it will do for a demo.
+ $( 'link[rel="stylesheet"][title="theme"]' ).attr(
+ 'href',
+ '../dist/oojs-ui-' + theme + '.vector.css'
+ );
+}
+// This is another more typical usage: we take the existing server-side
+// buttons and replace the href with a JS click handler.
+$.each( themeButtons, function ( _, b ) {
+ // Get rid of the old server-side click handling.
+ b.setHref( null );
+ // Add new client-side click handling.
+ b.on( 'click', function () { updateTheme( b.getData() ); } );
+} );
diff --git a/vendor/oojs/oojs-ui/demos/pages/dialogs.js b/vendor/oojs/oojs-ui/demos/pages/dialogs.js
new file mode 100644
index 00000000..6e9da3f8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/demos/pages/dialogs.js
@@ -0,0 +1,602 @@
+OO.ui.Demo.static.pages.dialogs = function ( demo ) {
+ var i, l, name, openButton, DialogClass, config,
+ $demo = demo.$element,
+ fieldset = new OO.ui.FieldsetLayout( { label: 'Dialogs' } ),
+ windows = {},
+ windowManager = new OO.ui.WindowManager();
+
+ function SimpleDialog( config ) {
+ SimpleDialog.super.call( this, config );
+ }
+ OO.inheritClass( SimpleDialog, OO.ui.Dialog );
+ SimpleDialog.static.title = 'Simple dialog';
+ SimpleDialog.prototype.initialize = function () {
+ var closeButton,
+ dialog = this;
+
+ SimpleDialog.super.prototype.initialize.apply( this, arguments );
+ this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ this.content.$element.append( '<p>Dialog content</p>' );
+
+ closeButton = new OO.ui.ButtonWidget( {
+ label: OO.ui.msg( 'ooui-dialog-process-dismiss' )
+ } );
+ closeButton.on( 'click', function () {
+ dialog.close();
+ } );
+
+ this.content.$element.append( closeButton.$element );
+ this.$body.append( this.content.$element );
+ };
+ SimpleDialog.prototype.getBodyHeight = function () {
+ return this.content.$element.outerHeight( true );
+ };
+
+ function ProcessDialog( config ) {
+ ProcessDialog.super.call( this, config );
+ }
+ OO.inheritClass( ProcessDialog, OO.ui.ProcessDialog );
+ ProcessDialog.static.title = 'Process dialog';
+ ProcessDialog.static.actions = [
+ { action: 'save', label: 'Done', flags: [ 'primary', 'progressive' ] },
+ { action: 'cancel', label: 'Cancel', flags: 'safe' }
+ ];
+ ProcessDialog.prototype.initialize = function () {
+ ProcessDialog.super.prototype.initialize.apply( this, arguments );
+ this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ this.content.$element.append( '<p>Dialog content</p>' );
+ this.$body.append( this.content.$element );
+ };
+ ProcessDialog.prototype.getActionProcess = function ( action ) {
+ var dialog = this;
+ if ( action ) {
+ return new OO.ui.Process( function () {
+ dialog.close( { action: action } );
+ } );
+ }
+ return ProcessDialog.super.prototype.getActionProcess.call( this, action );
+ };
+ ProcessDialog.prototype.getBodyHeight = function () {
+ return this.content.$element.outerHeight( true );
+ };
+
+ function SearchWidgetDialog( config ) {
+ SearchWidgetDialog.super.call( this, config );
+ this.broken = false;
+ }
+ OO.inheritClass( SearchWidgetDialog, OO.ui.ProcessDialog );
+ SearchWidgetDialog.static.title = 'Search widget dialog';
+ SearchWidgetDialog.prototype.initialize = function () {
+ SearchWidgetDialog.super.prototype.initialize.apply( this, arguments );
+ var i,
+ items = [],
+ searchWidget = new OO.ui.SearchWidget();
+ for ( i = 1; i <= 20; i++ ) {
+ items.push( new OO.ui.OptionWidget( { data: i, label: 'Item ' + i } ) );
+ }
+ searchWidget.results.addItems( items );
+ searchWidget.onQueryChange = function () {};
+ this.$body.append( searchWidget.$element );
+ };
+ SearchWidgetDialog.prototype.getBodyHeight = function () {
+ return 300;
+ };
+ SearchWidgetDialog.static.actions = [
+ { action: 'cancel', label: 'Cancel', flags: 'safe' }
+ ];
+ SearchWidgetDialog.prototype.getActionProcess = function ( action ) {
+ var dialog = this;
+ return new OO.ui.Process( function () {
+ dialog.close( { action: action } );
+ } );
+ };
+
+ function BrokenDialog( config ) {
+ BrokenDialog.super.call( this, config );
+ this.broken = false;
+ }
+ OO.inheritClass( BrokenDialog, OO.ui.ProcessDialog );
+ BrokenDialog.static.title = 'Broken dialog';
+ BrokenDialog.static.actions = [
+ { action: 'save', label: 'Save', flags: [ 'primary', 'constructive' ] },
+ { action: 'delete', label: 'Delete', flags: 'destructive' },
+ { action: 'cancel', label: 'Cancel', flags: 'safe' }
+ ];
+ BrokenDialog.prototype.getBodyHeight = function () {
+ return 250;
+ };
+ BrokenDialog.prototype.initialize = function () {
+ BrokenDialog.super.prototype.initialize.apply( this, arguments );
+ this.content = new OO.ui.PanelLayout( { padded: true } );
+ this.fieldset = new OO.ui.FieldsetLayout( {
+ label: 'Dialog with error handling', icon: 'alert'
+ } );
+ this.description = new OO.ui.LabelWidget( {
+ label: 'Deleting will fail and will not be recoverable. ' +
+ 'Saving will fail the first time, but succeed the second time.'
+ } );
+ this.fieldset.addItems( [ this.description ] );
+ this.content.$element.append( this.fieldset.$element );
+ this.$body.append( this.content.$element );
+ };
+ BrokenDialog.prototype.getSetupProcess = function ( data ) {
+ return BrokenDialog.super.prototype.getSetupProcess.call( this, data )
+ .next( function () {
+ this.broken = true;
+ }, this );
+ };
+ BrokenDialog.prototype.getActionProcess = function ( action ) {
+ return BrokenDialog.super.prototype.getActionProcess.call( this, action )
+ .next( function () {
+ return 1000;
+ }, this )
+ .next( function () {
+ var closing;
+
+ if ( action === 'save' ) {
+ if ( this.broken ) {
+ this.broken = false;
+ return new OO.ui.Error( 'Server did not respond' );
+ }
+ } else if ( action === 'delete' ) {
+ return new OO.ui.Error( 'Permission denied', { recoverable: false } );
+ }
+
+ closing = this.close( { action: action } );
+ if ( action === 'save' ) {
+ // Return a promise to remaing pending while closing
+ return closing;
+ }
+ return BrokenDialog.super.prototype.getActionProcess.call( this, action );
+ }, this );
+ };
+
+ function SamplePage( name, config ) {
+ config = $.extend( { label: 'Sample page', icon: 'Sample icon' }, config );
+ OO.ui.PageLayout.call( this, name, config );
+ this.label = config.label;
+ this.icon = config.icon;
+ this.$element.text( this.label );
+ }
+ OO.inheritClass( SamplePage, OO.ui.PageLayout );
+ SamplePage.prototype.setupOutlineItem = function ( outlineItem ) {
+ SamplePage.super.prototype.setupOutlineItem.call( this, outlineItem );
+ this.outlineItem
+ .setMovable( true )
+ .setRemovable( true )
+ .setIcon( this.icon )
+ .setLabel( this.label );
+ };
+
+ function BookletDialog( config ) {
+ BookletDialog.super.call( this, config );
+ }
+ OO.inheritClass( BookletDialog, OO.ui.ProcessDialog );
+ BookletDialog.static.title = 'Booklet dialog';
+ BookletDialog.static.actions = [
+ { action: 'save', label: 'Done', flags: [ 'primary', 'progressive' ] },
+ { action: 'cancel', label: 'Cancel', flags: 'safe' }
+ ];
+ BookletDialog.prototype.getBodyHeight = function () {
+ return 250;
+ };
+ BookletDialog.prototype.initialize = function () {
+ BookletDialog.super.prototype.initialize.apply( this, arguments );
+
+ var dialog = this;
+
+ function changePage( direction ) {
+ var pageIndex = dialog.pages.indexOf( dialog.bookletLayout.getCurrentPage() );
+ pageIndex = ( dialog.pages.length + pageIndex + direction ) % dialog.pages.length;
+ dialog.bookletLayout.setPage( dialog.pages[ pageIndex ].getName() );
+ }
+
+ this.navigationField = new OO.ui.FieldLayout(
+ new OO.ui.ButtonGroupWidget( {
+ items: [
+ new OO.ui.ButtonWidget( {
+ data: 'previous',
+ icon: 'previous'
+ } ).on( 'click', function () {
+ changePage( -1 );
+ } ),
+ new OO.ui.ButtonWidget( {
+ data: 'next',
+ icon: 'next'
+ } ).on( 'click', function () {
+ changePage( 1 );
+ } )
+ ]
+ } ),
+ {
+ label: 'Change page',
+ align: 'top'
+ }
+ );
+
+ this.bookletLayout = new OO.ui.BookletLayout();
+ this.pages = [
+ new SamplePage( 'page-1', { label: 'Page 1', icon: 'window' } ),
+ new SamplePage( 'page-2', { label: 'Page 2', icon: 'window' } ),
+ new SamplePage( 'page-3', { label: 'Page 3', icon: 'window' } )
+ ];
+ this.bookletLayout.addPages( this.pages );
+ this.bookletLayout.connect( this, { set: 'onBookletLayoutSet' } );
+ this.bookletLayout.setPage( 'page-1' );
+
+ this.$body.append( this.bookletLayout.$element );
+ };
+ BookletDialog.prototype.getActionProcess = function ( action ) {
+ if ( action ) {
+ return new OO.ui.Process( function () {
+ this.close( { action: action } );
+ }, this );
+ }
+ return BookletDialog.super.prototype.getActionProcess.call( this, action );
+ };
+ BookletDialog.prototype.onBookletLayoutSet = function ( page ) {
+ page.$element.append( this.navigationField.$element );
+ };
+
+ function OutlinedBookletDialog( config ) {
+ OutlinedBookletDialog.super.call( this, config );
+ }
+ OO.inheritClass( OutlinedBookletDialog, OO.ui.ProcessDialog );
+ OutlinedBookletDialog.static.title = 'Booklet dialog';
+ OutlinedBookletDialog.static.actions = [
+ { action: 'save', label: 'Done', flags: [ 'primary', 'progressive' ] },
+ { action: 'cancel', label: 'Cancel', flags: 'safe' }
+ ];
+ OutlinedBookletDialog.prototype.getBodyHeight = function () {
+ return 250;
+ };
+ OutlinedBookletDialog.prototype.initialize = function () {
+ OutlinedBookletDialog.super.prototype.initialize.apply( this, arguments );
+ this.bookletLayout = new OO.ui.BookletLayout( {
+ outlined: true
+ } );
+ this.pages = [
+ new SamplePage( 'small', { label: 'Small', icon: 'window' } ),
+ new SamplePage( 'medium', { label: 'Medium', icon: 'window' } ),
+ new SamplePage( 'large', { label: 'Large', icon: 'window' } ),
+ new SamplePage( 'larger', { label: 'Larger', icon: 'window' } ),
+ new SamplePage( 'full', { label: 'Full', icon: 'window' } )
+ ];
+
+ this.bookletLayout.addPages( this.pages );
+ this.bookletLayout.connect( this, { set: 'onBookletLayoutSet' } );
+ this.$body.append( this.bookletLayout.$element );
+ };
+ OutlinedBookletDialog.prototype.getActionProcess = function ( action ) {
+ if ( action ) {
+ return new OO.ui.Process( function () {
+ this.close( { action: action } );
+ }, this );
+ }
+ return OutlinedBookletDialog.super.prototype.getActionProcess.call( this, action );
+ };
+ OutlinedBookletDialog.prototype.onBookletLayoutSet = function ( page ) {
+ this.setSize( page.getName() );
+ };
+ OutlinedBookletDialog.prototype.getSetupProcess = function ( data ) {
+ return OutlinedBookletDialog.super.prototype.getSetupProcess.call( this, data )
+ .next( function () {
+ this.bookletLayout.setPage( this.getSize() );
+ }, this );
+ };
+
+ function SampleCard( name, config ) {
+ config = $.extend( { label: 'Sample card' }, config );
+ OO.ui.CardLayout.call( this, name, config );
+ this.label = config.label;
+ this.$element.text( this.label );
+ }
+ OO.inheritClass( SampleCard, OO.ui.CardLayout );
+ SampleCard.prototype.setupTabItem = function ( tabItem ) {
+ SampleCard.super.prototype.setupTabItem.call( this, tabItem );
+ this.tabItem.setLabel( this.label );
+ };
+
+ function IndexedDialog( config ) {
+ IndexedDialog.super.call( this, config );
+ }
+ OO.inheritClass( IndexedDialog, OO.ui.ProcessDialog );
+ IndexedDialog.static.title = 'Index dialog';
+ IndexedDialog.static.actions = [
+ { action: 'save', label: 'Done', flags: [ 'primary', 'progressive' ] },
+ { action: 'cancel', label: 'Cancel', flags: 'safe' }
+ ];
+ IndexedDialog.prototype.getBodyHeight = function () {
+ return 250;
+ };
+ IndexedDialog.prototype.initialize = function () {
+ IndexedDialog.super.prototype.initialize.apply( this, arguments );
+ this.indexLayout = new OO.ui.IndexLayout();
+ this.cards = [
+ new SampleCard( 'first', { label: 'One' } ),
+ new SampleCard( 'second', { label: 'Two' } ),
+ new SampleCard( 'third', { label: 'Three' } ),
+ new SampleCard( 'fourth', { label: 'Four' } )
+ ];
+
+ this.indexLayout.addCards( this.cards );
+ this.$body.append( this.indexLayout.$element );
+
+ this.indexLayout.getTabs().getItemFromData( 'fourth' ).setDisabled( true );
+ };
+ IndexedDialog.prototype.getActionProcess = function ( action ) {
+ if ( action ) {
+ return new OO.ui.Process( function () {
+ this.close( { action: action } );
+ }, this );
+ }
+ return IndexedDialog.super.prototype.getActionProcess.call( this, action );
+ };
+
+ function MenuDialog( config ) {
+ MenuDialog.super.call( this, config );
+ }
+ OO.inheritClass( MenuDialog, OO.ui.ProcessDialog );
+ MenuDialog.static.title = 'Menu dialog';
+ MenuDialog.static.actions = [
+ { action: 'save', label: 'Done', flags: [ 'primary', 'progressive' ] },
+ { action: 'cancel', label: 'Cancel', flags: 'safe' }
+ ];
+ MenuDialog.prototype.getBodyHeight = function () {
+ return 350;
+ };
+ MenuDialog.prototype.initialize = function () {
+ MenuDialog.super.prototype.initialize.apply( this, arguments );
+ var menuLayout = new OO.ui.MenuLayout(),
+ positionField = new OO.ui.FieldLayout(
+ new OO.ui.ButtonSelectWidget( {
+ items: [
+ new OO.ui.ButtonOptionWidget( {
+ data: 'before',
+ label: 'Before'
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'after',
+ label: 'After'
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'top',
+ label: 'Top'
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'bottom',
+ label: 'Bottom'
+ } )
+ ]
+ } ).on( 'select', function ( item ) {
+ menuLayout.setMenuPosition( item.getData() );
+ } ),
+ {
+ label: 'Menu position',
+ align: 'top'
+ }
+ ),
+ showField = new OO.ui.FieldLayout(
+ new OO.ui.ToggleSwitchWidget( { value: true } ).on( 'change', function ( value ) {
+ menuLayout.toggleMenu( value );
+ } ),
+ {
+ label: 'Show menu',
+ align: 'top'
+ }
+ ),
+ menuPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),
+ contentPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } );
+
+ menuLayout.$menu.append(
+ menuPanel.$element.append( 'Menu panel' )
+ );
+ menuLayout.$content.append(
+ contentPanel.$element.append(
+ positionField.$element,
+ showField.$element
+ )
+ );
+
+ this.$body.append( menuLayout.$element );
+ };
+ MenuDialog.prototype.getActionProcess = function ( action ) {
+ if ( action ) {
+ return new OO.ui.Process( function () {
+ this.close( { action: action } );
+ }, this );
+ }
+ return MenuDialog.super.prototype.getActionProcess.call( this, action );
+ };
+
+ config = [
+ {
+ name: 'Simple dialog (small)',
+ config: {
+ size: 'small'
+ },
+ data: {
+ title: 'Sample dialog with very long title that does not fit'
+ }
+ },
+ {
+ name: 'Simple dialog (medium)',
+ config: {
+ size: 'medium'
+ }
+ },
+ {
+ name: 'Simple dialog (large)',
+ config: {
+ size: 'large'
+ }
+ },
+ {
+ name: 'Simple dialog (larger)',
+ config: {
+ size: 'larger'
+ }
+ },
+ {
+ name: 'Simple dialog (full)',
+ config: {
+ size: 'full'
+ }
+ },
+ {
+ name: 'Process dialog (medium)',
+ dialogClass: ProcessDialog,
+ config: {
+ size: 'medium'
+ }
+ },
+ {
+ name: 'Process dialog (full)',
+ dialogClass: ProcessDialog,
+ config: {
+ size: 'full'
+ }
+ },
+ {
+ name: 'Search widget dialog (medium)',
+ dialogClass: SearchWidgetDialog,
+ config: {
+ size: 'medium'
+ }
+ },
+ {
+ name: 'Broken dialog (error handling)',
+ dialogClass: BrokenDialog,
+ config: {
+ size: 'medium'
+ }
+ },
+ {
+ name: 'Booklet dialog',
+ dialogClass: BookletDialog,
+ config: {
+ size: 'medium'
+ }
+ },
+ {
+ name: 'Outlined booklet dialog',
+ dialogClass: OutlinedBookletDialog,
+ config: {
+ size: 'medium'
+ }
+ },
+ {
+ name: 'Indexed dialog',
+ dialogClass: IndexedDialog,
+ config: {
+ size: 'medium'
+ }
+ },
+ {
+ name: 'Menu dialog',
+ dialogClass: MenuDialog,
+ config: {
+ size: 'medium'
+ }
+ },
+ {
+ name: 'Message dialog (generic)',
+ dialogClass: OO.ui.MessageDialog,
+ data: {
+ title: 'Continue?',
+ message: 'It may be risky'
+ }
+ },
+ {
+ name: 'Message dialog (verbose)',
+ dialogClass: OO.ui.MessageDialog,
+ data: {
+ title: 'Continue?',
+ message: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque quis laoreet elit. Nam eu velit ullamcorper, volutpat elit sed, viverra massa. Aenean congue aliquam lorem, et laoreet risus condimentum vel. Praesent nec imperdiet mauris. Nunc eros magna, iaculis sit amet ante id, dapibus tristique lorem. Praesent in feugiat lorem, sit amet porttitor eros. Donec sapien turpis, pretium eget ligula id, scelerisque tincidunt diam. Pellentesque a venenatis tortor, at luctus nisl. Quisque vel urna a enim mattis rutrum. Morbi eget consequat nisl. Nam tristique molestie diam ac consequat. Nam varius adipiscing mattis. Praesent sodales volutpat nulla lobortis iaculis. Quisque vel odio eget diam posuere imperdiet. Fusce et iaculis odio. Donec in nibh ut dui accumsan vehicula quis et massa.',
+ verbose: true
+ }
+ },
+ {
+ name: 'Message dialog (1 action)',
+ dialogClass: OO.ui.MessageDialog,
+ data: {
+ title: 'Storage limit reached',
+ message: 'You are out of disk space',
+ actions: [
+ {
+ action: 'accept',
+ label: 'Dismiss',
+ flags: 'primary'
+ }
+ ]
+ }
+ },
+ {
+ name: 'Message dialog (2 actions)',
+ dialogClass: OO.ui.MessageDialog,
+ data: {
+ title: 'Cannot save data',
+ message: 'The server is not responding',
+ actions: [
+ {
+ action: 'reject',
+ label: 'Cancel',
+ flags: 'safe'
+ },
+ {
+ action: 'repeat',
+ label: 'Try again',
+ flags: [ 'primary', 'constructive' ]
+ }
+ ]
+ }
+ },
+ {
+ name: 'Message dialog (3 actions)',
+ dialogClass: OO.ui.MessageDialog,
+ data: {
+ title: 'Delete file?',
+ message: 'The file will be irreversably obliterated. Proceed with caution.',
+ actions: [
+ { action: 'reject', label: 'Cancel', flags: 'safe' },
+ { action: 'reject', label: 'Move file to trash' },
+ {
+ action: 'accept',
+ label: 'Obliterate',
+ flags: [ 'primary', 'destructive' ]
+ }
+ ]
+ }
+ }
+ ];
+
+ function openDialog( name, data ) {
+ windowManager.openWindow( name, data );
+ }
+
+ for ( i = 0, l = config.length; i < l; i++ ) {
+ name = 'window_' + i;
+ DialogClass = config[ i ].dialogClass || SimpleDialog;
+ windows[ name ] = new DialogClass( config[ i ].config );
+ openButton = new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'window',
+ label: $( '<span dir="ltr"></span>' ).text( config[ i ].name )
+ } );
+ openButton.on(
+ 'click', OO.ui.bind( openDialog, this, name, config[ i ].data )
+ );
+ fieldset.addItems( [ new OO.ui.FieldLayout( openButton, { align: 'inline' } ) ] );
+ }
+ windowManager.addWindows( windows );
+
+ $demo.append(
+ new OO.ui.PanelLayout( {
+ expanded: false,
+ framed: true
+ } ).$element
+ .addClass( 'oo-ui-demo-container' )
+ .append( fieldset.$element ),
+ windowManager.$element
+ );
+};
diff --git a/vendor/oojs/oojs-ui/demos/pages/icons.js b/vendor/oojs/oojs-ui/demos/pages/icons.js
new file mode 100644
index 00000000..aec2204c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/demos/pages/icons.js
@@ -0,0 +1,295 @@
+OO.ui.Demo.static.pages.icons = function ( demo ) {
+ var i, len, iconSet, iconsFieldset, iconButton, selector,
+ icons = {
+ core: [
+ 'add',
+ 'advanced',
+ 'alert',
+ 'cancel',
+ 'check',
+ 'circle',
+ 'close',
+ 'code',
+ 'collapse',
+ 'comment',
+ 'ellipsis',
+ 'expand',
+ 'help',
+ 'history',
+ 'info',
+ 'menu',
+ 'next',
+ 'picture',
+ 'previous',
+ 'redo',
+ 'remove',
+ 'search',
+ 'settings',
+ 'tag',
+ 'undo',
+ 'window'
+ ],
+ movement: [
+ 'arrowLast',
+ 'arrowNext',
+ 'downTriangle',
+ 'upTriangle',
+ 'caretLast',
+ 'caretNext',
+ 'caretDown',
+ 'caretUp',
+ 'move'
+ ],
+ content: [
+ 'article',
+ 'articleCheck',
+ 'articleSearch',
+ 'citeArticle',
+ 'book',
+ 'journal',
+ 'newspaper',
+ 'folderPlaceholder',
+ 'die',
+ 'download',
+ 'upload'
+ ],
+ alerts: [
+ 'bell',
+ 'bellOn',
+ 'eye',
+ 'eyeClosed',
+ 'message',
+ 'signature',
+ 'speechBubble',
+ 'speechBubbleAdd',
+ 'speechBubbles'
+ ],
+ interactions: [
+ 'beta',
+ 'betaLaunch',
+ 'bookmark',
+ 'browser',
+ 'clear',
+ 'clock',
+ 'funnel',
+ 'heart',
+ 'key',
+ 'keyboard',
+ 'logOut',
+ 'newWindow',
+ 'printer',
+ 'ribbonPrize',
+ 'sun',
+ 'watchlist'
+ ],
+ moderation: [
+ 'block',
+ 'blockUndo',
+ 'flag',
+ 'flagUndo',
+ 'lock',
+ 'star',
+ 'trash',
+ 'trashUndo',
+ 'unStar',
+ 'unLock'
+ ],
+ 'editing-core': [
+ 'edit',
+ 'editLock',
+ 'editUndo',
+ 'link',
+ 'linkExternal',
+ 'linkSecure'
+ ],
+ 'editing-styling': [
+ 'bigger',
+ 'smaller',
+ 'subscript',
+ 'superscript',
+ 'bold',
+ 'italic',
+ 'strikethrough',
+ 'underline',
+ 'textLanguage',
+ 'textDirLTR',
+ 'textDirRTL',
+ 'textStyle'
+ ],
+ 'editing-list': [
+ 'indent',
+ 'listBullet',
+ 'listNumbered',
+ 'outdent'
+ ],
+ 'editing-advanced': [
+ 'alignCentre',
+ 'alignLeft',
+ 'alignRight',
+ 'find',
+ 'insert',
+ 'layout',
+ 'newline',
+ 'noWikiText',
+ 'outline',
+ 'puzzle',
+ 'quotes',
+ 'quotesAdd',
+ 'redirect',
+ 'searchCaseSensitive',
+ 'searchRegularExpression',
+ 'specialCharacter',
+ 'table',
+ 'tableAddColumnAfter',
+ 'tableAddColumnBefore',
+ 'tableAddRowAfter',
+ 'tableAddRowBefore',
+ 'tableCaption',
+ 'tableMergeCells',
+ 'templateAdd',
+ 'translation',
+ 'wikiText'
+ ],
+ media: [
+ 'image',
+ 'imageAdd',
+ 'imageLock',
+ 'photoGallery',
+ 'play',
+ 'stop'
+ ],
+ location: [
+ 'map',
+ 'mapPin',
+ 'mapPinAdd',
+ 'wikitrail'
+ ],
+ user: [
+ 'userActive',
+ 'userAvatar',
+ 'userInactive',
+ 'userTalk'
+ ],
+ layout: [
+ 'stripeFlow',
+ 'stripeSideMenu',
+ 'stripeSummary',
+ 'stripeToC',
+ 'viewCompact',
+ 'viewDetails',
+ 'visionSimulator'
+ ],
+ wikimedia: [
+ 'logoCC',
+ 'logoWikimediaCommons',
+ 'logoWikipedia'
+ ]
+ },
+ indicators = [
+ 'alert',
+ 'down',
+ 'next',
+ 'previous',
+ 'required',
+ 'search',
+ 'up'
+ ],
+ iconsFieldsets = [],
+ iconsButtons = [],
+ indicatorsFieldset = new OO.ui.FieldsetLayout( { label: 'Indicators' } );
+
+ for ( i = 0, len = indicators.length; i < len; i++ ) {
+ indicatorsFieldset.addItems( [
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ indicator: indicators[ i ],
+ framed: false,
+ label: indicators[ i ]
+ } ),
+ { align: 'top' }
+ )
+ ] );
+ }
+ for ( iconSet in icons ) {
+ iconsFieldset = new OO.ui.FieldsetLayout( { label: 'Icons – ' + iconSet } );
+ iconsFieldsets.push( iconsFieldset );
+
+ for ( i = 0, len = icons[ iconSet ].length; i < len; i++ ) {
+ iconButton = new OO.ui.ButtonWidget( {
+ icon: icons[ iconSet ][ i ],
+ framed: false,
+ label: icons[ iconSet ][ i ]
+ } );
+ iconsButtons.push( iconButton );
+ iconsFieldset.addItems( [
+ new OO.ui.FieldLayout(
+ iconButton,
+ { align: 'top' }
+ )
+ ] );
+ }
+ }
+
+ selector = new OO.ui.ButtonSelectWidget( {
+ items: [
+ new OO.ui.ButtonOptionWidget( {
+ label: 'None',
+ flags: [],
+ data: {
+ progressive: false,
+ constructive: false,
+ destructive: false
+ }
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ label: 'Progressive',
+ flags: [ 'progressive' ],
+ data: {
+ progressive: true,
+ constructive: false,
+ destructive: false
+ }
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ label: 'Constructive',
+ flags: [ 'constructive' ],
+ data: {
+ progressive: false,
+ constructive: true,
+ destructive: false
+ }
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ label: 'Destructive',
+ flags: [ 'destructive' ],
+ data: {
+ progressive: false,
+ constructive: false,
+ destructive: true
+ }
+ } )
+ ]
+ } )
+ .on( 'select', function ( selected ) {
+ iconsButtons.forEach( function ( iconButton ) {
+ iconButton.setFlags( selected.getData() );
+ } );
+ } )
+ .selectItemByData( {
+ progressive: false,
+ constructive: false,
+ destructive: false
+ } );
+
+ demo.$element.append(
+ new OO.ui.PanelLayout( {
+ expanded: false,
+ framed: true
+ } ).$element
+ .addClass( 'oo-ui-demo-container oo-ui-demo-icons' )
+ .append(
+ selector.$element,
+ indicatorsFieldset.$element,
+ iconsFieldsets.map( function ( item ) { return item.$element[0]; } )
+ ) );
+};
diff --git a/vendor/oojs/oojs-ui/demos/pages/toolbars.js b/vendor/oojs/oojs-ui/demos/pages/toolbars.js
new file mode 100644
index 00000000..550d8128
--- /dev/null
+++ b/vendor/oojs/oojs-ui/demos/pages/toolbars.js
@@ -0,0 +1,338 @@
+OO.ui.Demo.static.pages.toolbars = function ( demo ) {
+ var i, toolGroups, saveButton, actionButton, actionButtonDisabled, PopupTool, ToolGroupTool,
+ $demo = demo.$element,
+ $containers = $(),
+ toolFactories = [],
+ toolGroupFactories = [],
+ toolbars = [];
+
+ // Show some random accelerator keys that don't actually work
+ function getToolAccelerator( name ) {
+ return {
+ listTool1: 'Ctrl+Shift+1',
+ listTool2: 'Ctrl+Alt+2',
+ listTool3: 'Cmd+Enter',
+ listTool5: 'Shift+Down',
+ menuTool: 'Ctrl+M'
+ }[ name ];
+ }
+
+ for ( i = 0; i < 4; i++ ) {
+ toolFactories.push( new OO.ui.ToolFactory() );
+ toolGroupFactories.push( new OO.ui.ToolGroupFactory() );
+ toolbars.push( new OO.ui.Toolbar( toolFactories[ i ], toolGroupFactories[ i ], { actions: true } ) );
+ toolbars[ i ].getToolAccelerator = getToolAccelerator;
+ }
+
+ function createTool( toolbar, group, name, icon, title, init, onSelect, displayBothIconAndLabel ) {
+ var Tool = function () {
+ Tool.super.apply( this, arguments );
+ this.toggled = false;
+ if ( init ) {
+ init.call( this );
+ }
+ };
+
+ OO.inheritClass( Tool, OO.ui.Tool );
+
+ Tool.prototype.onSelect = function () {
+ if ( onSelect ) {
+ onSelect.call( this );
+ } else {
+ this.toggled = !this.toggled;
+ this.setActive( this.toggled );
+ }
+ toolbars[ toolbar ].emit( 'updateState' );
+ };
+ Tool.prototype.onUpdateState = function () {};
+
+ Tool.static.name = name;
+ Tool.static.group = group;
+ Tool.static.icon = icon;
+ Tool.static.title = title;
+ Tool.static.displayBothIconAndLabel = !!displayBothIconAndLabel;
+ return Tool;
+ }
+
+ function createToolGroup( toolbar, group ) {
+ $.each( toolGroups[ group ], function ( i, tool ) {
+ var args = tool.slice();
+ args.splice( 0, 0, toolbar, group );
+ toolFactories[ toolbar ].register( createTool.apply( null, args ) );
+ } );
+ }
+
+ function createDisabledToolGroup( parent, name ) {
+ var DisabledToolGroup = function () {
+ DisabledToolGroup.super.apply( this, arguments );
+ this.setDisabled( true );
+ };
+
+ OO.inheritClass( DisabledToolGroup, parent );
+
+ DisabledToolGroup.static.name = name;
+
+ DisabledToolGroup.prototype.onUpdateState = function () {
+ this.setLabel( 'Disabled' );
+ };
+
+ return DisabledToolGroup;
+ }
+
+ toolGroupFactories[ 0 ].register( createDisabledToolGroup( OO.ui.BarToolGroup, 'disabledBar' ) );
+ toolGroupFactories[ 0 ].register( createDisabledToolGroup( OO.ui.ListToolGroup, 'disabledList' ) );
+ toolGroupFactories[ 1 ].register( createDisabledToolGroup( OO.ui.MenuToolGroup, 'disabledMenu' ) );
+
+ PopupTool = function ( toolGroup, config ) {
+ // Parent constructor
+ OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {
+ padded: true,
+ label: 'Popup head',
+ head: true
+ } }, config ) );
+
+ this.popup.$body.append( '<p>Popup contents</p>' );
+ };
+
+ OO.inheritClass( PopupTool, OO.ui.PopupTool );
+
+ PopupTool.static.name = 'popupTool';
+ PopupTool.static.group = 'popupTools';
+ PopupTool.static.icon = 'help';
+
+ toolFactories[ 2 ].register( PopupTool );
+
+ ToolGroupTool = function ( toolGroup, config ) {
+ // Parent constructor
+ OO.ui.ToolGroupTool.call( this, toolGroup, config );
+ };
+
+ OO.inheritClass( ToolGroupTool, OO.ui.ToolGroupTool );
+
+ ToolGroupTool.static.name = 'toolGroupTool';
+ ToolGroupTool.static.group = 'barTools';
+ ToolGroupTool.static.groupConfig = {
+ indicator: 'down',
+ include: [ { group: 'moreListTools' } ]
+ };
+
+ toolFactories[ 0 ].register( ToolGroupTool );
+ toolFactories[ 3 ].register( ToolGroupTool );
+
+ // Toolbar
+ toolbars[ 0 ].setup( [
+ {
+ type: 'bar',
+ include: [ { group: 'barTools' } ],
+ demote: [ 'toolGroupTool' ]
+ },
+ {
+ type: 'disabledBar',
+ include: [ { group: 'disabledBarTools' } ]
+ },
+ {
+ type: 'list',
+ indicator: 'down',
+ label: 'List',
+ icon: 'picture',
+ include: [ { group: 'listTools' } ],
+ allowCollapse: [ 'listTool1', 'listTool6' ]
+ },
+ {
+ type: 'disabledList',
+ indicator: 'down',
+ label: 'List',
+ icon: 'picture',
+ include: [ { group: 'disabledListTools' } ]
+ },
+ {
+ type: 'list',
+ indicator: 'down',
+ label: 'Auto-disabling list',
+ icon: 'picture',
+ include: [ { group: 'autoDisableListTools' } ]
+ },
+ {
+ label: 'Catch-all',
+ include: '*'
+ }
+ ] );
+ // Toolbar with action buttons
+ toolbars[ 1 ].setup( [
+ {
+ type: 'menu',
+ indicator: 'down',
+ icon: 'picture',
+ include: [ { group: 'menuTools' } ]
+ },
+ {
+ type: 'disabledMenu',
+ indicator: 'down',
+ icon: 'picture',
+ include: [ { group: 'disabledMenuTools' } ]
+ }
+ ] );
+ // Fake toolbar to be injected into the first toolbar
+ // demonstrating right-aligned menus
+ toolbars[ 2 ].setup( [
+ {
+ include: [ { group: 'popupTools' } ]
+ },
+ {
+ type: 'list',
+ icon: 'menu',
+ include: [ { group: 'listTools' } ]
+ }
+ ] );
+ toolbars[ 3 ].setup( [
+ {
+ type: 'bar',
+ include: [ { group: 'history' } ]
+ },
+ {
+ type: 'menu',
+ indicator: 'down',
+ include: [ { group: 'menuTools' } ]
+ },
+ {
+ type: 'list',
+ indicator: 'down',
+ icon: 'comment',
+ include: [ { group: 'listTools' } ],
+ allowCollapse: [ 'listTool1', 'listTool6' ]
+ },
+ {
+ type: 'bar',
+ include: [ { group: 'link' } ]
+ },
+ {
+ type: 'bar',
+ include: [ { group: 'cite' } ]
+ },
+ {
+ type: 'list',
+ indicator: 'down',
+ label: 'Insert',
+ include: [ { group: 'autoDisableListTools' }, { group: 'unusedStuff' } ]
+ }
+ ] );
+
+ saveButton = new OO.ui.ButtonWidget( { label: 'Save', flags: [ 'progressive', 'primary' ] } );
+ actionButton = new OO.ui.ButtonWidget( { label: 'Action' } );
+ actionButtonDisabled = new OO.ui.ButtonWidget( { label: 'Disabled', disabled: true } );
+ toolbars[ 1 ].$actions
+ .append( actionButton.$element, actionButtonDisabled.$element );
+
+ toolbars[ 3 ].$actions
+ .append( toolbars[ 2 ].$element, saveButton.$element );
+
+ for ( i = 0; i < toolbars.length; i++ ) {
+ toolbars[ i ].emit( 'updateState' );
+ }
+
+ toolGroups = {
+ barTools: [
+ [ 'barTool', 'picture', 'Basic tool in bar' ],
+ [ 'disabledBarTool', 'picture', 'Basic tool in bar disabled', function () { this.setDisabled( true ); } ]
+ ],
+
+ disabledBarTools: [
+ [ 'barToolInDisabled', 'picture', 'Basic tool in disabled bar' ]
+ ],
+
+ listTools: [
+ [ 'listTool', 'picture', 'First basic tool in list' ],
+ [ 'listTool1', 'picture', 'Basic tool in list' ],
+ [ 'listTool3', 'picture', 'Basic disabled tool in list', function () { this.setDisabled( true ); } ],
+ [ 'listTool6', 'picture', 'A final tool' ]
+ ],
+
+ moreListTools: [
+ [ 'listTool2', 'code', 'Another basic tool' ],
+ [ 'listTool4', 'picture', 'More basic tools' ],
+ [ 'listTool5', 'ellipsis', 'And even more' ]
+ ],
+
+ popupTools: [
+ [ 'popupTool' ]
+ ],
+
+ disabledListTools: [
+ [ 'listToolInDisabled', 'picture', 'Basic tool in disabled list' ]
+ ],
+
+ autoDisableListTools: [
+ [ 'autoDisableListTool', 'picture', 'Click to disable this tool', null, function () { this.setDisabled( true ); } ]
+ ],
+
+ menuTools: [
+ [ 'menuTool', 'picture', 'Basic tool' ],
+ [ 'disabledMenuTool', 'picture', 'Basic tool disabled', function () { this.setDisabled( true ); } ]
+ ],
+
+ disabledMenuTools: [
+ [ 'menuToolInDisabled', 'picture', 'Basic tool' ]
+ ],
+
+ unusedStuff: [
+ [ 'unusedTool', 'help', 'This tool is not explicitly used anywhere' ],
+ [ 'unusedTool1', 'help', 'And neither is this one' ]
+ ],
+
+ history: [
+ [ 'undoTool', 'undo', 'Undo' ],
+ [ 'redoTool', 'redo', 'Redo' ]
+ ],
+
+ link: [
+ [ 'linkTool', 'link', 'Link' ]
+ ],
+
+ cite: [
+ [ 'citeTool', 'citeArticle', 'Cite', null, null, true ]
+ ]
+ };
+
+ createToolGroup( 0, 'unusedStuff' );
+ createToolGroup( 0, 'barTools' );
+ createToolGroup( 0, 'disabledBarTools' );
+ createToolGroup( 0, 'listTools' );
+ createToolGroup( 0, 'moreListTools' );
+ createToolGroup( 0, 'disabledListTools' );
+ createToolGroup( 0, 'autoDisableListTools' );
+ createToolGroup( 1, 'menuTools' );
+ createToolGroup( 1, 'disabledMenuTools' );
+ createToolGroup( 2, 'listTools' );
+ createToolGroup( 3, 'history' );
+ createToolGroup( 3, 'link' );
+ createToolGroup( 3, 'cite' );
+ createToolGroup( 3, 'menuTools' );
+ createToolGroup( 3, 'listTools' );
+ createToolGroup( 3, 'moreListTools' );
+ createToolGroup( 3, 'autoDisableListTools' );
+ createToolGroup( 3, 'unusedStuff' );
+
+ for ( i = 0; i < toolbars.length; i++ ) {
+ $containers = $containers.add(
+ new OO.ui.PanelLayout( {
+ expanded: false,
+ framed: true
+ } ).$element
+ .addClass( 'oo-ui-demo-container oo-ui-demo-toolbars' )
+ );
+
+ if ( i === 2 ) {
+ continue;
+ }
+ $containers.eq( i ).append( toolbars[ i ].$element );
+ }
+ $containers.append( '' );
+ $demo.append(
+ $containers.eq( 0 ).append( '<div class="oo-ui-demo-toolbars-contents">Toolbar</div>' ),
+ $containers.eq( 1 ).append( '<div class="oo-ui-demo-toolbars-contents">Toolbar with action buttons</div>' ),
+ $containers.eq( 3 ).append( '<div class="oo-ui-demo-toolbars-contents">Word processor toolbar</div>' )
+ );
+ for ( i = 0; i < toolbars.length; i++ ) {
+ toolbars[ i ].initialize();
+ }
+};
diff --git a/vendor/oojs/oojs-ui/demos/pages/widgets.js b/vendor/oojs/oojs-ui/demos/pages/widgets.js
new file mode 100644
index 00000000..52c6ee87
--- /dev/null
+++ b/vendor/oojs/oojs-ui/demos/pages/widgets.js
@@ -0,0 +1,1428 @@
+OO.ui.Demo.static.pages.widgets = function ( demo ) {
+ var styles, states, buttonStyleShowcaseWidget, horizontalAlignmentWidget, fieldsets,
+ $demo = demo.$element;
+
+ /**
+ * Draggable group widget containing drag/drop items
+ * @param {Object} [config] Configuration options
+ */
+ function DragDropGroupWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ DragDropGroupWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.DraggableGroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
+ // Respond to reorder event
+ this.connect( this, { reorder: 'onReorder' } );
+ }
+ /* Setup */
+ OO.inheritClass( DragDropGroupWidget, OO.ui.Widget );
+ OO.mixinClass( DragDropGroupWidget, OO.ui.DraggableGroupElement );
+
+ /**
+ * Respond to order event
+ * @param {OO.ui.DraggableElement} item Reordered item
+ * @param {number} newIndex New index
+ */
+ DragDropGroupWidget.prototype.onReorder = function ( item, newIndex ) {
+ this.addItems( [ item ], newIndex );
+ };
+
+ /**
+ * Drag/drop items
+ * @param {Object} [config] Configuration options
+ */
+ function DragDropItemWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ DragDropItemWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.DraggableElement.call( this, config );
+ }
+ /* Setup */
+ OO.inheritClass( DragDropItemWidget, OO.ui.OptionWidget );
+ OO.mixinClass( DragDropItemWidget, OO.ui.DraggableElement );
+
+ /**
+ * Demo for LookupElement.
+ * @extends OO.ui.TextInputWidget
+ * @mixins OO.ui.LookupElement
+ */
+ function NumberLookupTextInputWidget() {
+ // Parent constructor
+ OO.ui.TextInputWidget.call( this, { validate: 'integer' } );
+ // Mixin constructors
+ OO.ui.LookupElement.call( this );
+ }
+ OO.inheritClass( NumberLookupTextInputWidget, OO.ui.TextInputWidget );
+ OO.mixinClass( NumberLookupTextInputWidget, OO.ui.LookupElement );
+
+ /**
+ * @inheritdoc
+ */
+ NumberLookupTextInputWidget.prototype.getLookupRequest = function () {
+ var
+ value = this.getValue(),
+ deferred = $.Deferred(),
+ delay = 500 + Math.floor( Math.random() * 500 );
+
+ this.isValid().done( function ( valid ) {
+ if ( valid ) {
+ // Resolve with results after a faked delay
+ setTimeout( function () {
+ deferred.resolve( [ value * 1, value * 2, value * 3, value * 4, value * 5 ] );
+ }, delay );
+ } else {
+ // No results when the input contains invalid content
+ deferred.resolve( [] );
+ }
+ } );
+
+ return deferred.promise( { abort: function () {} } );
+ };
+
+ /**
+ * @inheritdoc
+ */
+ NumberLookupTextInputWidget.prototype.getLookupCacheDataFromResponse = function ( response ) {
+ return response || [];
+ };
+
+ /**
+ * @inheritdoc
+ */
+ NumberLookupTextInputWidget.prototype.getLookupMenuOptionsFromData = function ( data ) {
+ var
+ items = [],
+ i, number;
+ for ( i = 0; i < data.length; i++ ) {
+ number = String( data[ i ] );
+ items.push( new OO.ui.MenuOptionWidget( {
+ data: number,
+ label: number
+ } ) );
+ }
+
+ return items;
+ };
+
+ styles = [
+ {},
+ {
+ flags: [ 'progressive' ]
+ },
+ {
+ flags: [ 'constructive' ]
+ },
+ {
+ flags: [ 'destructive' ]
+ },
+ {
+ flags: [ 'primary', 'progressive' ]
+ },
+ {
+ flags: [ 'primary', 'constructive' ]
+ },
+ {
+ flags: [ 'primary', 'destructive' ]
+ }
+ ];
+ states = [
+ {
+ label: 'Button'
+ },
+ {
+ label: 'Button',
+ icon: 'tag'
+ },
+ {
+ label: 'Button',
+ icon: 'tag',
+ indicator: 'down'
+ },
+ {
+ icon: 'tag',
+ title: 'Title text'
+ },
+ {
+ indicator: 'down'
+ },
+ {
+ icon: 'tag',
+ indicator: 'down'
+ },
+ {
+ label: 'Button',
+ disabled: true
+ },
+ {
+ icon: 'tag',
+ title: 'Title text',
+ disabled: true
+ },
+ {
+ indicator: 'down',
+ disabled: true
+ }
+ ];
+ buttonStyleShowcaseWidget = new OO.ui.Widget();
+ $.each( styles, function ( i, style ) {
+ $.each( states, function ( j, state ) {
+ buttonStyleShowcaseWidget.$element.append(
+ new OO.ui.ButtonWidget( $.extend( {}, style, state ) ).$element
+ );
+ } );
+ buttonStyleShowcaseWidget.$element.append( $( '<br>' ) );
+ } );
+
+ horizontalAlignmentWidget = new OO.ui.Widget( {
+ classes: [ 'oo-ui-demo-horizontal-alignment' ]
+ } );
+ horizontalAlignmentWidget.$element.append(
+ new OO.ui.ButtonWidget( { label: 'Button' } ).$element,
+ new OO.ui.ButtonGroupWidget( { items: [
+ new OO.ui.ToggleButtonWidget( { label: 'A' } ),
+ new OO.ui.ToggleButtonWidget( { label: 'B' } )
+ ] } ).$element,
+ new OO.ui.ButtonInputWidget( { label: 'ButtonInput' } ).$element,
+ new OO.ui.TextInputWidget( { value: 'TextInput' } ).$element,
+ new OO.ui.DropdownInputWidget( { options: [
+ {
+ label: 'DropdownInput',
+ data: null
+ }
+ ] } ).$element,
+ new OO.ui.CheckboxInputWidget( { selected: true } ).$element,
+ new OO.ui.RadioInputWidget( { selected: true } ).$element,
+ new OO.ui.LabelWidget( { label: 'Label' } ).$element
+ );
+
+ fieldsets = [
+ new OO.ui.FieldsetLayout( {
+ label: 'Simple buttons',
+ items: [
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( { label: 'Normal' } ),
+ {
+ label: 'ButtonWidget (normal)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Progressive',
+ flags: [ 'progressive' ]
+ } ),
+ {
+ label: 'ButtonWidget (progressive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Constructive',
+ flags: [ 'constructive' ]
+ } ),
+ {
+ label: 'ButtonWidget (constructive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Destructive',
+ flags: [ 'destructive' ]
+ } ),
+ {
+ label: 'ButtonWidget (destructive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Primary progressive',
+ flags: [ 'primary', 'progressive' ]
+ } ),
+ {
+ label: 'ButtonWidget (primary, progressive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Primary constructive',
+ flags: [ 'primary', 'constructive' ]
+ } ),
+ {
+ label: 'ButtonWidget (primary, constructive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Primary destructive',
+ flags: [ 'primary', 'destructive' ]
+ } ),
+ {
+ label: 'ButtonWidget (primary, destructive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Disabled',
+ disabled: true
+ } ),
+ {
+ label: 'ButtonWidget (disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Constructive',
+ flags: [ 'constructive' ],
+ disabled: true
+ } ),
+ {
+ label: 'ButtonWidget (constructive, disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Constructive',
+ icon: 'tag',
+ flags: [ 'constructive' ],
+ disabled: true
+ } ),
+ {
+ label: 'ButtonWidget (constructive, icon, disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Icon',
+ icon: 'tag'
+ } ),
+ {
+ label: 'ButtonWidget (icon)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Icon',
+ icon: 'tag',
+ flags: [ 'progressive' ]
+ } ),
+ {
+ label: 'ButtonWidget (icon, progressive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Indicator',
+ indicator: 'down'
+ } ),
+ {
+ label: 'ButtonWidget (indicator)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Indicator',
+ indicator: 'down',
+ flags: [ 'constructive' ]
+ } ),
+ {
+ label: 'ButtonWidget (indicator, constructive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'help',
+ title: 'Icon only'
+ } ),
+ {
+ label: 'ButtonWidget (icon only)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ indicator: 'alert',
+ title: 'Indicator only'
+ } ),
+ {
+ label: 'ButtonWidget (indicator only)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ icon: 'help',
+ title: 'Icon only, framed'
+ } ),
+ {
+ label: 'ButtonWidget (icon only, framed)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ indicator: 'alert',
+ title: 'Indicator only, framed'
+ } ),
+ {
+ label: 'ButtonWidget (indicator only, framed)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'tag',
+ label: 'Labeled'
+ } ),
+ {
+ label: 'ButtonWidget (frameless)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ flags: [ 'progressive' ],
+ icon: 'check',
+ label: 'Progressive'
+ } ),
+ {
+ label: 'ButtonWidget (frameless, progressive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ flags: [ 'warning' ],
+ icon: 'alert',
+ label: 'Warning'
+ } ),
+ {
+ label: 'ButtonWidget (frameless, warning)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ flags: [ 'destructive' ],
+ icon: 'remove',
+ label: 'Destructive'
+ } ),
+ {
+ label: 'ButtonWidget (frameless, destructive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ flags: [ 'constructive' ],
+ icon: 'add',
+ label: 'Constructive'
+ } ),
+ {
+ label: 'ButtonWidget (frameless, constructive)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'tag',
+ label: 'Disabled',
+ disabled: true
+ } ),
+ {
+ label: 'ButtonWidget (frameless, disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ flags: [ 'constructive' ],
+ icon: 'tag',
+ label: 'Constructive',
+ disabled: true
+ } ),
+ {
+ label: 'ButtonWidget (frameless, constructive, disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'tag',
+ indicator: 'down',
+ label: 'Labeled'
+ } ),
+ {
+ label: 'ButtonWidget (frameless, indicator)\u200E',
+ align: 'top'
+ }
+ )
+ ]
+ } ),
+ new OO.ui.FieldsetLayout( {
+ label: 'Button sets',
+ items: [
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonGroupWidget( {
+ items: [
+ new OO.ui.ButtonWidget( {
+ icon: 'tag',
+ label: 'One'
+ } ),
+ new OO.ui.ButtonWidget( {
+ label: 'Two'
+ } ),
+ new OO.ui.ButtonWidget( {
+ indicator: 'required',
+ label: 'Three'
+ } )
+ ]
+ } ),
+ {
+ label: 'ButtonGroupWidget',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonSelectWidget( {
+ items: [
+ new OO.ui.ButtonOptionWidget( {
+ data: 'b',
+ icon: 'tag',
+ label: 'One'
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'c',
+ label: 'Two'
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'd',
+ indicator: 'required',
+ label: 'Three'
+ } )
+ ]
+ } ),
+ {
+ label: 'ButtonSelectWidget',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonSelectWidget( {
+ disabled: true,
+ items: [
+ new OO.ui.ButtonOptionWidget( {
+ data: 'b',
+ icon: 'tag',
+ label: 'One'
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'c',
+ label: 'Two'
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'd',
+ indicator: 'required',
+ label: 'Three'
+ } )
+ ]
+ } ),
+ {
+ label: 'ButtonSelectWidget (disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonSelectWidget( {
+ items: [
+ new OO.ui.ButtonOptionWidget( {
+ data: 'b',
+ icon: 'tag',
+ label: 'One',
+ disabled: true
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'c',
+ label: 'Two'
+ } ),
+ new OO.ui.ButtonOptionWidget( {
+ data: 'd',
+ indicator: 'required',
+ label: 'Three'
+ } )
+ ]
+ } ),
+ {
+ label: 'ButtonSelectWidget (disabled items)\u200E',
+ align: 'top'
+ }
+ )
+ ]
+ } ),
+ new OO.ui.FieldsetLayout( {
+ label: 'Button style showcase',
+ items: [
+ new OO.ui.FieldLayout(
+ buttonStyleShowcaseWidget,
+ {
+ align: 'top'
+ }
+ )
+ ]
+ } ),
+ new OO.ui.FieldsetLayout( {
+ label: 'Form widgets',
+ items: [
+ new OO.ui.FieldLayout(
+ new OO.ui.CheckboxInputWidget( {
+ selected: true
+ } ),
+ {
+ align: 'inline',
+ label: 'CheckboxInputWidget'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.CheckboxInputWidget( {
+ selected: true,
+ disabled: true
+ } ),
+ {
+ align: 'inline',
+ label: 'CheckboxInputWidget (disabled)\u200E'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.RadioInputWidget( {
+ name: 'oojs-ui-radio-demo'
+ } ),
+ {
+ align: 'inline',
+ label: 'Connected RadioInputWidget #1'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.RadioInputWidget( {
+ name: 'oojs-ui-radio-demo',
+ selected: true
+ } ),
+ {
+ align: 'inline',
+ label: 'Connected RadioInputWidget #2'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.RadioInputWidget( {
+ selected: true,
+ disabled: true
+ } ),
+ {
+ align: 'inline',
+ label: 'RadioInputWidget (disabled)\u200E'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.RadioSelectWidget( {
+ items: [
+ new OO.ui.RadioOptionWidget( {
+ data: 'Cat',
+ label: 'Cat'
+ } ),
+ new OO.ui.RadioOptionWidget( {
+ data: 'Dog',
+ label: 'Dog'
+ } ),
+ new OO.ui.RadioOptionWidget( {
+ data: 'Goldfish',
+ label: 'Goldfish',
+ disabled: true
+ } )
+ ]
+ } ),
+ {
+ align: 'top',
+ label: 'RadioSelectWidget'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ToggleSwitchWidget(),
+ {
+ label: 'ToggleSwitchWidget',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ToggleSwitchWidget( { disabled: true } ),
+ {
+ label: 'ToggleSwitchWidget (disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ToggleSwitchWidget( { disabled: true, value: true } ),
+ {
+ label: 'ToggleSwitchWidget (disabled, checked)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ToggleButtonWidget( { label: 'Toggle' } ),
+ {
+ label: 'ToggleButtonWidget',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ToggleButtonWidget( { label: 'Toggle', value: true } ),
+ {
+ label: 'ToggleButtonWidget (initially active)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ToggleButtonWidget( { icon: 'next' } ),
+ {
+ label: 'ToggleButtonWidget (icon only)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( { value: 'Text input' } ),
+ {
+ label: 'TextInputWidget\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( { icon: 'search' } ),
+ {
+ label: 'TextInputWidget (icon)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( {
+ indicator: 'required',
+ required: true,
+ validate: 'non-empty'
+ } ),
+ {
+ label: 'TextInputWidget (indicator, required)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( {
+ validate: function ( value ) {
+ return value.length % 2 === 0;
+ }
+ } ),
+ {
+ label: 'TextInputWidget (only allows even number of characters)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( { placeholder: 'Placeholder' } ),
+ {
+ label: 'TextInputWidget (placeholder)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( {
+ value: 'Readonly',
+ readOnly: true
+ } ),
+ {
+ label: 'TextInputWidget (readonly)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( {
+ multiline: true,
+ value: 'Multiline\nMultiline'
+ } ),
+ {
+ label: 'TextInputWidget (multiline)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( {
+ multiline: true,
+ autosize: true,
+ value: 'Autosize\nAutosize\nAutosize\nAutosize'
+ } ),
+ {
+ label: 'TextInputWidget (autosize)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( {
+ icon: 'tag',
+ indicator: 'alert',
+ value: 'Text input with label',
+ label: 'Inline label'
+ } ),
+ {
+ label: 'TextInputWidget (label)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( {
+ value: 'Disabled',
+ icon: 'tag',
+ indicator: 'required',
+ label: 'Inline label',
+ disabled: true
+ } ),
+ {
+ label: 'TextInputWidget (icon, indicator, label, disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.DropdownWidget( {
+ label: 'Select one',
+ menu: {
+ items: [
+ new OO.ui.MenuOptionWidget( {
+ data: 'a',
+ label: 'First'
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'b',
+ label: 'Second',
+ indicator: 'required'
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'c',
+ label: 'Third'
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'c',
+ label: 'The fourth option has a long label'
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'd',
+ label: 'Fifth'
+ } )
+ ]
+ }
+ } ),
+ {
+ label: 'DropdownWidget',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.DropdownWidget( {
+ label: 'Select one',
+ icon: 'tag',
+ menu: {
+ items: [
+ new OO.ui.MenuOptionWidget( {
+ data: 'a',
+ label: 'First'
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'b',
+ label: 'Disabled second option',
+ indicator: 'required',
+ disabled: true
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'c',
+ label: 'Third'
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'd',
+ label: 'Disabled fourth option with long label',
+ disabled: true
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'c',
+ label: 'Third'
+ } )
+ ]
+ }
+ } ),
+ {
+ label: 'DropdownWidget (disabled options)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.DropdownWidget( {
+ label: 'Select one',
+ disabled: true,
+ menu: {
+ items: [
+ new OO.ui.MenuOptionWidget( {
+ data: 'a',
+ label: 'First'
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'b',
+ label: 'Second'
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'c',
+ label: 'Third'
+ } ),
+ new OO.ui.MenuOptionWidget( {
+ data: 'd',
+ label: 'Fourth'
+ } )
+ ]
+ }
+ } ),
+ {
+ label: 'DropdownWidget (disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.DropdownInputWidget( {
+ options: [
+ {
+ data: 'a',
+ label: 'First'
+ },
+ {
+ data: 'b',
+ label: 'Second'
+ },
+ {
+ data: 'c',
+ label: 'Third'
+ }
+ ],
+ value: 'b'
+ } ),
+ {
+ label: 'DropdownInputWidget',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ComboBoxWidget( {
+ menu: {
+ items: [
+ new OO.ui.MenuOptionWidget( { data: 'asd', label: 'Label for asd' } ),
+ new OO.ui.MenuOptionWidget( { data: 'fgh', label: 'Label for fgh' } ),
+ new OO.ui.MenuOptionWidget( { data: 'jkl', label: 'Label for jkl' } ),
+ new OO.ui.MenuOptionWidget( { data: 'zxc', label: 'Label for zxc' } ),
+ new OO.ui.MenuOptionWidget( { data: 'vbn', label: 'Label for vbn' } )
+ ]
+ }
+ } ),
+ {
+ label: 'ComboBoxWidget',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ComboBoxWidget( {
+ disabled: true,
+ menu: {
+ items: [
+ new OO.ui.MenuOptionWidget( { data: 'asd', label: 'Label for asd' } ),
+ new OO.ui.MenuOptionWidget( { data: 'fgh', label: 'Label for fgh' } ),
+ new OO.ui.MenuOptionWidget( { data: 'jkl', label: 'Label for jkl' } ),
+ new OO.ui.MenuOptionWidget( { data: 'zxc', label: 'Label for zxc' } ),
+ new OO.ui.MenuOptionWidget( { data: 'vbn', label: 'Label for vbn' } )
+ ]
+ }
+ } ),
+ {
+ label: 'ComboBoxWidget (disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ComboBoxWidget(),
+ {
+ label: 'ComboBoxWidget (empty)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonInputWidget( {
+ label: 'Submit the form',
+ type: 'submit'
+ } ),
+ {
+ align: 'top',
+ label: 'ButtonInputWidget'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonInputWidget( {
+ label: 'Submit the form',
+ type: 'submit',
+ useInputTag: true
+ } ),
+ {
+ align: 'top',
+ label: 'ButtonInputWidget (using <input/>)\u200E'
+ }
+ )
+ ]
+ } ),
+ new OO.ui.FieldsetLayout( {
+ label: 'Horizontal alignment',
+ items: [
+ new OO.ui.FieldLayout(
+ horizontalAlignmentWidget,
+ {
+ label: 'Multiple widgets shown as a single line, ' +
+ 'as used in compact forms or in parts of a bigger widget.',
+ align: 'top'
+ }
+ )
+ ]
+ } ),
+ new OO.ui.FieldsetLayout( {
+ label: 'Draggable',
+ items: [
+ new OO.ui.FieldLayout(
+ new DragDropGroupWidget( {
+ orientation: 'horizontal',
+ items: [
+ new DragDropItemWidget( {
+ data: 'item1',
+ label: 'Item 1'
+ } ),
+ new DragDropItemWidget( {
+ data: 'item2',
+ label: 'Item 2'
+ } ),
+ new DragDropItemWidget( {
+ data: 'item3',
+ label: 'Item 3'
+ } ),
+ new DragDropItemWidget( {
+ data: 'item4',
+ label: 'Item 4'
+ } )
+ ]
+ } ),
+ {
+ label: 'DraggableGroupWidget (horizontal)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new DragDropGroupWidget( {
+ items: [
+ new DragDropItemWidget( {
+ data: 'item1',
+ label: 'Item 1'
+ } ),
+ new DragDropItemWidget( {
+ data: 'item2',
+ label: 'Item 2'
+ } ),
+ new DragDropItemWidget( {
+ data: 'item3',
+ label: 'Item 3'
+ } ),
+ new DragDropItemWidget( {
+ data: 'item4',
+ label: 'Item 4'
+ } )
+ ]
+ } ),
+ {
+ label: 'DraggableGroupWidget (vertical)\u200E',
+ align: 'top'
+ }
+ )
+ ]
+ } ),
+ new OO.ui.FieldsetLayout( {
+ label: 'Other widgets',
+ items: [
+ new OO.ui.FieldLayout(
+ new OO.ui.IconWidget( {
+ icon: 'picture',
+ title: 'Picture icon'
+ } ),
+ {
+ label: 'IconWidget (normal)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.IconWidget( {
+ icon: 'remove',
+ flags: 'destructive',
+ title: 'Remove icon'
+ } ),
+ {
+ label: 'IconWidget (flagged)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.IconWidget( {
+ icon: 'picture',
+ title: 'Picture icon',
+ disabled: true
+ } ),
+ {
+ label: 'IconWidget (disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.IndicatorWidget( {
+ indicator: 'required',
+ title: 'Required indicator'
+ } ),
+ {
+ label: 'IndicatorWidget (normal)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.IndicatorWidget( {
+ indicator: 'required',
+ title: 'Required indicator',
+ disabled: true
+ } ),
+ {
+ label: 'IndicatorWidget (disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.LabelWidget( {
+ label: 'Label'
+ } ),
+ {
+ label: 'LabelWidget (normal)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.LabelWidget( {
+ label: 'Label',
+ disabled: true
+ } ),
+ {
+ label: 'LabelWidget (disabled)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.LabelWidget( {
+ label: new OO.ui.HtmlSnippet( '<b>Fancy</b> <i>text</i> <u>formatting</u>!' )
+ } ),
+ {
+ label: 'LabelWidget (with html)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.PopupButtonWidget( {
+ icon: 'info',
+ framed: false,
+ popup: {
+ head: true,
+ label: 'More information',
+ $content: $( '<p>Extra information here.</p>' ),
+ padded: true,
+ align: 'force-left'
+ }
+ } ),
+ {
+ label: 'PopupButtonWidget (frameless, with popup head, align: force-left)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.PopupButtonWidget( {
+ icon: 'info',
+ framed: false,
+ popup: {
+ head: true,
+ label: 'More information',
+ $content: $( '<p>Extra information here.</p>' ),
+ padded: true,
+ align: 'force-right'
+ }
+ } ),
+ {
+ label: 'PopupButtonWidget (frameless, with popup head align: force-right)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.PopupButtonWidget( {
+ icon: 'info',
+ framed: false,
+ popup: {
+ head: true,
+ label: 'More information',
+ $content: $( '<p>Extra information here.</p>' ),
+ padded: true,
+ align: 'backwards'
+ }
+ } ),
+ {
+ label: 'PopupButtonWidget (frameless, with popup head align: backwards)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.PopupButtonWidget( {
+ icon: 'info',
+ framed: false,
+ popup: {
+ head: true,
+ label: 'More information',
+ $content: $( '<p>Extra information here.</p>' ),
+ padded: true,
+ align: 'forwards'
+ }
+ } ),
+ {
+ label: 'PopupButtonWidget (frameless, with popup head align: forwards)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.PopupButtonWidget( {
+ icon: 'menu',
+ label: 'Options',
+ popup: {
+ $content: $( '<p>Additional options here.</p>' ),
+ padded: true,
+ align: 'left'
+ }
+ } ),
+ {
+ label: 'PopupButtonWidget (framed, no popup head)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new NumberLookupTextInputWidget(),
+ {
+ label: 'LookupElement (try inputting an integer)\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ProgressBarWidget( {
+ progress: 33
+ } ),
+ {
+ label: 'Progress bar',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ProgressBarWidget( {
+ progress: false
+ } ),
+ {
+ label: 'Progress bar (indeterminate)\u200E',
+ align: 'top'
+ }
+ )
+ ]
+ } ),
+ new OO.ui.FieldsetLayout( {
+ label: 'Field layouts',
+ help: 'I am an additional, helpful information. Lorem ipsum dolor sit amet, cibo pri ' +
+ 'in, duo ex inimicus perpetua complectitur, mel periculis similique at.\u200E',
+ items: [
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonWidget( {
+ label: 'Button'
+ } ),
+ {
+ label: 'FieldLayout with help',
+ help: 'I am an additional, helpful information. Lorem ipsum dolor sit amet, cibo pri ' +
+ 'in, duo ex inimicus perpetua complectitur, mel periculis similique at.\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.ActionFieldLayout(
+ new OO.ui.TextInputWidget( {} ),
+ new OO.ui.ButtonWidget( {
+ label: 'Button'
+ } ),
+ {
+ label: 'ActionFieldLayout aligned left',
+ align: 'left'
+ }
+ ),
+ new OO.ui.ActionFieldLayout(
+ new OO.ui.TextInputWidget( {} ),
+ new OO.ui.ButtonWidget( {
+ label: 'Button'
+ } ),
+ {
+ label: 'ActionFieldLayout aligned inline',
+ align: 'inline'
+ }
+ ),
+ new OO.ui.ActionFieldLayout(
+ new OO.ui.TextInputWidget( {} ),
+ new OO.ui.ButtonWidget( {
+ label: 'Button'
+ } ),
+ {
+ label: 'ActionFieldLayout aligned right',
+ align: 'right'
+ }
+ ),
+ new OO.ui.ActionFieldLayout(
+ new OO.ui.TextInputWidget( {} ),
+ new OO.ui.ButtonWidget( {
+ label: 'Button'
+ } ),
+ {
+ label: 'ActionFieldLayout aligned top',
+ align: 'top'
+ }
+ ),
+ new OO.ui.ActionFieldLayout(
+ new OO.ui.TextInputWidget( {} ),
+ new OO.ui.ButtonWidget( {
+ label: 'Button'
+ } ),
+ {
+ label: 'ActionFieldLayout aligned top with help',
+ help: 'I am an additional, helpful information. Lorem ipsum dolor sit amet, cibo pri ' +
+ 'in, duo ex inimicus perpetua complectitur, mel periculis similique at.\u200E',
+ align: 'top'
+ }
+ ),
+ new OO.ui.ActionFieldLayout(
+ new OO.ui.TextInputWidget( {} ),
+ new OO.ui.ButtonWidget( {
+ label: 'Button'
+ } ),
+ {
+ label: $( '<i>' ).text( 'ActionFieldLayout aligned top with rich text label' ),
+ align: 'top'
+ }
+ )
+ ]
+ } ),
+ new OO.ui.FormLayout( {
+ method: 'GET',
+ action: 'widgets.php',
+ items: [
+ new OO.ui.FieldsetLayout( {
+ label: 'Form layout',
+ items: [
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( {
+ name: 'username'
+ } ),
+ {
+ label: 'User name',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.TextInputWidget( {
+ name: 'password',
+ type: 'password'
+ } ),
+ {
+ label: 'Password',
+ align: 'top'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.CheckboxInputWidget( {
+ name: 'rememberme',
+ selected: true
+ } ),
+ {
+ label: 'Remember me',
+ align: 'inline'
+ }
+ ),
+ new OO.ui.FieldLayout(
+ new OO.ui.ButtonInputWidget( {
+ name: 'login',
+ label: 'Log in',
+ type: 'submit',
+ flags: [ 'primary', 'progressive' ],
+ icon: 'check'
+ } ),
+ {
+ label: null,
+ align: 'top'
+ }
+ )
+ ]
+ } )
+ ]
+ } )
+ ];
+
+ $.each( fieldsets, function ( i, fieldsetLayout ) {
+ $.each( fieldsetLayout.getItems(), function ( j, fieldLayout ) {
+ fieldLayout.$element.append(
+ demo.buildConsole( fieldLayout.fieldWidget, 'widget' )
+ );
+ } );
+ } );
+
+ $demo.append(
+ new OO.ui.PanelLayout( {
+ expanded: false,
+ framed: true
+ } ).$element
+ .addClass( 'oo-ui-demo-container' )
+ .append(
+ $( fieldsets.map( function ( fieldset ) { return fieldset.$element[ 0 ]; } ) )
+ )
+ );
+};
+
+OO.ui.Demo.static.defaultPage = 'widgets';
diff --git a/vendor/oojs/oojs-ui/demos/styles/demo.css b/vendor/oojs/oojs-ui/demos/styles/demo.css
new file mode 100644
index 00000000..1c8d6139
--- /dev/null
+++ b/vendor/oojs/oojs-ui/demos/styles/demo.css
@@ -0,0 +1,250 @@
+body {
+ font-size: 0.8em;
+ font-family: sans-serif;
+}
+
+/* Layout */
+
+.oo-ui-demo-menu > .oo-ui-widget {
+ display: inline-block;
+ vertical-align: middle;
+ margin-right: 1em;
+}
+
+.oo-ui-demo-menu .oo-ui-demo-pageDropdown {
+ width: 10em;
+}
+
+.oo-ui-demo {
+ max-width: 62.5em;
+ margin: 0 auto;
+}
+
+.oo-ui-demo-container {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+@media (max-width: 750px) {
+ .oo-ui-demo-menu {
+ margin-bottom: 1em;
+ }
+ .oo-ui-demo-container {
+ padding: 1em 2em;
+ }
+}
+
+@media (min-width: 751px) {
+ .oo-ui-demo-menu {
+ margin-bottom: 2em;
+ }
+ .oo-ui-demo-container {
+ padding: 2em 4em;
+ }
+}
+
+/* Toolbars demo */
+
+.oo-ui-demo-toolbars {
+ padding: 0;
+ margin-bottom: 2em;
+}
+
+.oo-ui-demo-toolbars-contents {
+ padding: 2em;
+ min-height: 100px;
+}
+
+/* Icons demo */
+
+.oo-ui-demo-icons .oo-ui-buttonSelectWidget {
+ margin-bottom: 2em;
+}
+
+.oo-ui-demo-icons .oo-ui-fieldLayout {
+ display: inline-block;
+ margin-bottom: 0;
+}
+
+.oo-ui-demo-icons .oo-ui-fieldLayout .oo-ui-labelElement-label {
+ display: none;
+}
+
+.oo-ui-demo-icons .oo-ui-fieldLayout .oo-ui-buttonElement-button {
+ margin: 1em 1em 1em 0;
+ width: 12em;
+ opacity: 0.8;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.oo-ui-demo-icons .oo-ui-fieldLayout .oo-ui-buttonElement-button .oo-ui-labelElement-label {
+ text-transform: capitalize;
+ display: inline !important;
+}
+
+.oo-ui-demo-icons .oo-ui-fieldLayout .oo-ui-buttonElement-button:hover {
+ opacity: 1;
+}
+
+/* Widgets demo */
+
+.oo-ui-demo-horizontal-alignment > .oo-ui-checkboxInputWidget,
+.oo-ui-demo-horizontal-alignment > .oo-ui-radioInputWidget,
+.oo-ui-demo-horizontal-alignment > .oo-ui-buttonInputWidget,
+.oo-ui-demo-horizontal-alignment > .oo-ui-textInputWidget,
+.oo-ui-demo-horizontal-alignment > .oo-ui-dropdownInputWidget {
+ display: inline-block;
+}
+
+.oo-ui-demo-horizontal-alignment > .oo-ui-textInputWidget,
+.oo-ui-demo-horizontal-alignment > .oo-ui-dropdownInputWidget {
+ max-width: 10em;
+}
+
+/* Console */
+
+.oo-ui-demo-console {
+ clear: both;
+ position: relative;
+ border: 1px solid transparent;
+ margin-bottom: -2px;
+ line-height: 1.4;
+}
+
+.oo-ui-demo-console-expanded {
+ width: 100%;
+ border-color: #aaa;
+ margin: 0.5em 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.oo-ui-demo-console-toggle {
+ float: right;
+ margin-top: -2em;
+ margin-right: -2em;
+ cursor: pointer;
+}
+
+.oo-ui-demo-console-expanded .oo-ui-demo-console-toggle {
+ margin-top: -2.5em;
+}
+
+.oo-ui-demo-console-toggle::after {
+ position: relative;
+ display: inline-block;
+ width: 1.6em;
+ background: #f9f9f9;
+ border-radius: 50%;
+ line-height: 1.6em;
+ color: #999;
+ text-align: center;
+ content: "→";
+}
+
+.oo-ui-demo-console-toggle:hover::after,
+.oo-ui-demo-console-expanded .oo-ui-demo-console-toggle::after {
+ background: #eee;
+ color: #333;
+}
+
+.oo-ui-demo-console-expanded .oo-ui-demo-console-toggle::after {
+ content: "↑";
+}
+
+.oo-ui-demo-console-collapsed .oo-ui-demo-console-log,
+.oo-ui-demo-console-collapsed .oo-ui-demo-console-label,
+.oo-ui-demo-console-collapsed .oo-ui-demo-console-submit {
+ display: none;
+}
+
+.oo-ui-demo-console-log {
+ border: 1px solid #eee;
+ border-width: 0 0 1px 0;
+ max-height: 5em;
+ overflow: auto;
+}
+
+.oo-ui-demo-console-log-line {
+ position: relative;
+ padding-left: 20px;
+}
+
+.oo-ui-demo-console-log-line-input {
+ font-style: italic;
+ color: #555;
+}
+
+.oo-ui-demo-console-log-line-input::before {
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ text-align: center;
+ bottom: 0;
+ content: "→";
+}
+
+.oo-ui-demo-console-log-line-error {
+ color: red;
+}
+
+.oo-ui-demo-console-label {
+ position: relative;
+ display: inline-block;
+ width: 100%;
+ padding-left: 20px;
+ padding-right: 20px;
+ margin-right: -20px;
+ cursor: pointer;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.oo-ui-demo-console-label::before {
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 20px;
+ text-align: center;
+ content: '→';
+ color: blue;
+}
+
+.oo-ui-demo-console-input {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ width: 100%;
+}
+
+.oo-ui-demo-console-input:focus {
+ outline: 0;
+}
+
+.oo-ui-demo-console-submit {
+ display: inline-block;
+ width: 20px;
+ line-height: 1.6em;
+ text-align: center;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background: #f9f9f9;
+ color: #888;
+ cursor: pointer;
+}
+
+.oo-ui-demo-console-submit:hover {
+ background: #eee;
+ color: #333;
+}
diff --git a/vendor/oojs/oojs-ui/demos/widgets.php b/vendor/oojs/oojs-ui/demos/widgets.php
new file mode 100644
index 00000000..494a7ac1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/demos/widgets.php
@@ -0,0 +1,830 @@
+<?php
+ $autoload = '../vendor/autoload.php';
+ if ( !file_exists( $autoload ) ) {
+ echo '<h1>Did you forget to run <code>composer install</code>?</h1>';
+ exit();
+ }
+ require_once $autoload;
+
+ $theme = ( isset( $_GET['theme'] ) && $_GET['theme'] === 'apex' ) ? 'apex' : 'mediawiki';
+ $themeClass = 'OOUI\\' . ( $theme === 'apex' ? 'Apex' : 'MediaWiki' ) . 'Theme';
+ OOUI\Theme::setSingleton( new $themeClass() );
+
+ $graphicSuffixMap = array(
+ 'mixed' => '',
+ 'vector' => '.vector',
+ 'raster' => '.raster',
+ );
+ $graphic = ( isset( $_GET['graphic'] ) && isset( $graphicSuffixMap[ $_GET['graphic'] ] ) )
+ ? $_GET['graphic'] : 'vector';
+ $graphicSuffix = $graphicSuffixMap[ $graphic ];
+
+ $direction = ( isset( $_GET['direction'] ) && $_GET['direction'] === 'rtl' ) ? 'rtl' : 'ltr';
+ $directionSuffix = $direction === 'rtl' ? '.rtl' : '';
+ OOUI\Element::setDefaultDir( $direction );
+
+ $query = array(
+ 'theme' => $theme,
+ 'graphic' => $graphic,
+ 'direction' => $direction,
+ );
+ $styleFileName = "oojs-ui-$theme$graphicSuffix$directionSuffix.css";
+?>
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+ <meta charset="UTF-8">
+ <title>OOjs UI Widget Demo</title>
+ <link rel="stylesheet" href="../dist/<?php echo $styleFileName; ?>" title="theme">
+ <link rel="stylesheet" href="styles/demo<?php echo $directionSuffix; ?>.css">
+</head>
+<body class="oo-ui-<?php echo $direction; ?>">
+ <div class="oo-ui-demo">
+ <div class="oo-ui-demo-menu">
+ <?php
+ echo new OOUI\ButtonGroupWidget( array(
+ 'infusable' => true,
+ 'items' => array(
+ new OOUI\ButtonWidget( array(
+ 'id' => 'theme-mediawiki',
+ 'label' => 'MediaWiki',
+ 'data' => 'mediawiki',
+ 'href' => '?' . http_build_query( array_merge( $query, array( 'theme' => 'mediawiki' ) ) ),
+ ) ),
+ new OOUI\ButtonWidget( array(
+ 'id' => 'theme-apex',
+ 'label' => 'Apex',
+ 'data' => 'apex',
+ 'href' => '?' . http_build_query( array_merge( $query, array( 'theme' => 'apex' ) ) ),
+ ) ),
+ )
+ ) );
+ echo new OOUI\ButtonGroupWidget( array(
+ 'infusable' => true,
+ 'items' => array(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Mixed',
+ 'href' => '?' . http_build_query( array_merge( $query, array( 'graphic' => 'mixed' ) ) ),
+ ) ),
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Vector',
+ 'href' => '?' . http_build_query( array_merge( $query, array( 'graphic' => 'vector' ) ) ),
+ ) ),
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Raster',
+ 'href' => '?' . http_build_query( array_merge( $query, array( 'graphic' => 'raster' ) ) ),
+ ) ),
+ )
+ ) );
+ echo new OOUI\ButtonGroupWidget( array(
+ 'infusable' => true,
+ 'items' => array(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'LTR',
+ 'href' => '?' . http_build_query( array_merge( $query, array( 'direction' => 'ltr' ) ) ),
+ ) ),
+ new OOUI\ButtonWidget( array(
+ 'label' => 'RTL',
+ 'href' => '?' . http_build_query( array_merge( $query, array( 'direction' => 'rtl' ) ) ),
+ ) ),
+ )
+ ) );
+ ?>
+ </div>
+ <?php
+ $demoContainer = new OOUI\PanelLayout( array(
+ 'expanded' => false,
+ 'padded' => true,
+ 'framed' => true,
+ ) );
+ $demoContainer->addClasses( array( 'oo-ui-demo-container' ) );
+
+ $styles = array(
+ array(),
+ array(
+ 'flags' => array( 'progressive' ),
+ ),
+ array(
+ 'flags' => array( 'constructive' ),
+ ),
+ array(
+ 'flags' => array( 'destructive' ),
+ ),
+ array(
+ 'flags' => array( 'primary', 'progressive' ),
+ ),
+ array(
+ 'flags' => array( 'primary', 'constructive' ),
+ ),
+ array(
+ 'flags' => array( 'primary', 'destructive' ),
+ ),
+ );
+ $states = array(
+ array(
+ 'label' => 'Button',
+ ),
+ array(
+ 'label' => 'Button',
+ 'icon' => 'tag',
+ ),
+ array(
+ 'label' => 'Button',
+ 'icon' => 'tag',
+ 'indicator' => 'down',
+ ),
+ array(
+ 'icon' => 'tag',
+ 'title' => "Title text",
+ ),
+ array(
+ 'indicator' => 'down',
+ ),
+ array(
+ 'icon' => 'tag',
+ 'indicator' => 'down',
+ ),
+ array(
+ 'label' => 'Button',
+ 'disabled' => true,
+ ),
+ array(
+ 'icon' => 'tag',
+ 'title' => "Title text",
+ 'disabled' => true,
+ ),
+ array(
+ 'indicator' => 'down',
+ 'disabled' => true,
+ ),
+ );
+ $buttonStyleShowcaseWidget = new OOUI\Widget();
+ foreach ( $styles as $style ) {
+ foreach ( $states as $state ) {
+ $buttonStyleShowcaseWidget->appendContent(
+ new OOUI\ButtonWidget( array_merge( $style, $state, array( 'infusable' => true ) ) )
+ );
+ }
+ $buttonStyleShowcaseWidget->appendContent( new OOUI\HtmlSnippet( '<br />' ) );
+ }
+
+ $horizontalAlignmentWidget = new OOUI\Widget( array(
+ 'classes' => array( 'oo-ui-demo-horizontal-alignment' )
+ ) );
+ # Adding content after the fact does not play well with
+ # infusability. We should be using a proper Layout here.
+ $horizontalAlignmentWidget->appendContent(
+ new OOUI\ButtonWidget( array( 'label' => 'Button' ) ),
+ new OOUI\ButtonGroupWidget( array( 'items' => array(
+ new OOUI\ButtonWidget( array( 'label' => 'A' ) ),
+ new OOUI\ButtonWidget( array( 'label' => 'B' ) )
+ ) ) ),
+ new OOUI\ButtonInputWidget( array( 'label' => 'ButtonInput' ) ),
+ new OOUI\TextInputWidget( array( 'value' => 'TextInput' ) ),
+ new OOUI\DropdownInputWidget( array( 'options' => array(
+ array(
+ 'label' => 'DropdownInput',
+ 'data' => null
+ )
+ ) ) ),
+ new OOUI\CheckboxInputWidget( array( 'selected' => true ) ),
+ new OOUI\RadioInputWidget( array( 'selected' => true ) ),
+ new OOUI\LabelWidget( array( 'label' => 'Label' ) )
+ );
+
+ $demoContainer->appendContent( new OOUI\FieldsetLayout( array(
+ 'infusable' => true,
+ 'label' => 'Simple buttons',
+ 'items' => array(
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array( 'label' => 'Normal' ) ),
+ array(
+ 'label' => "ButtonWidget (normal)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Progressive',
+ 'flags' => array( 'progressive' )
+ ) ),
+ array(
+ 'label' => "ButtonWidget (progressive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Constructive',
+ 'flags' => array( 'constructive' )
+ ) ),
+ array(
+ 'label' => "ButtonWidget (constructive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Destructive',
+ 'flags' => array( 'destructive' )
+ ) ),
+ array(
+ 'label' => "ButtonWidget (destructive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Primary progressive',
+ 'flags' => array( 'primary', 'progressive' )
+ ) ),
+ array(
+ 'label' => "ButtonWidget (primary, progressive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Primary constructive',
+ 'flags' => array( 'primary', 'constructive' )
+ ) ),
+ array(
+ 'label' => "ButtonWidget (primary, constructive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Primary destructive',
+ 'flags' => array( 'primary', 'destructive' )
+ ) ),
+ array(
+ 'label' => "ButtonWidget (primary, destructive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Disabled',
+ 'disabled' => true
+ ) ),
+ array(
+ 'label' => "ButtonWidget (disabled)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Constructive',
+ 'flags' => array( 'constructive' ),
+ 'disabled' => true
+ ) ),
+ array(
+ 'label' => "ButtonWidget (constructive, disabled)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Constructive',
+ 'icon' => 'tag',
+ 'flags' => array( 'constructive' ),
+ 'disabled' => true
+ ) ),
+ array(
+ 'label' => "ButtonWidget (constructive, icon, disabled)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Icon',
+ 'icon' => 'tag'
+ ) ),
+ array(
+ 'label' => "ButtonWidget (icon)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Icon',
+ 'icon' => 'tag',
+ 'flags' => array( 'progressive' )
+ ) ),
+ array(
+ 'label' => "ButtonWidget (icon, progressive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Indicator',
+ 'indicator' => 'down'
+ ) ),
+ array(
+ 'label' => "ButtonWidget (indicator)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Indicator',
+ 'indicator' => 'down',
+ 'flags' => array( 'constructive' )
+ ) ),
+ array(
+ 'label' => "ButtonWidget (indicator, constructive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'framed' => false,
+ 'icon' => 'help',
+ 'title' => 'Icon only'
+ ) ),
+ array(
+ 'label' => "ButtonWidget (icon only)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'framed' => false,
+ 'icon' => 'tag',
+ 'label' => 'Labeled'
+ ) ),
+ array(
+ 'label' => "ButtonWidget (frameless)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'framed' => false,
+ 'flags' => array( 'progressive' ),
+ 'icon' => 'check',
+ 'label' => 'Progressive'
+ ) ),
+ array(
+ 'label' => "ButtonWidget (frameless, progressive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'framed' => false,
+ 'flags' => array( 'destructive' ),
+ 'icon' => 'remove',
+ 'label' => 'Destructive'
+ ) ),
+ array(
+ 'label' => "ButtonWidget (frameless, destructive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'framed' => false,
+ 'flags' => array( 'constructive' ),
+ 'icon' => 'add',
+ 'label' => 'Constructive'
+ ) ),
+ array(
+ 'label' => "ButtonWidget (frameless, constructive)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'framed' => false,
+ 'icon' => 'tag',
+ 'label' => 'Disabled',
+ 'disabled' => true
+ ) ),
+ array(
+ 'label' => "ButtonWidget (frameless, disabled)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'framed' => false,
+ 'flags' => array( 'constructive' ),
+ 'icon' => 'tag',
+ 'label' => 'Constructive',
+ 'disabled' => true
+ ) ),
+ array(
+ 'label' => "ButtonWidget (frameless, constructive, disabled)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ )
+ )
+ ) ) );
+ $demoContainer->appendContent( new OOUI\FieldsetLayout( array(
+ 'infusable' => true,
+ 'label' => 'Button sets',
+ 'items' => array(
+ new OOUI\FieldLayout(
+ new OOUI\ButtonGroupWidget( array(
+ 'items' => array(
+ new OOUI\ButtonWidget( array(
+ 'icon' => 'tag',
+ 'label' => 'One'
+ ) ),
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Two'
+ ) ),
+ new OOUI\ButtonWidget( array(
+ 'indicator' => 'required',
+ 'label' => 'Three'
+ ) )
+ )
+ ) ),
+ array(
+ 'label' => 'ButtonGroupWidget',
+ 'align' => 'top'
+ )
+ )
+ )
+ ) ) );
+ # Note that $buttonStyleShowcaseWidget is not infusable,
+ # because the contents would not be preserved -- we assume
+ # that widgets will manage their own contents by default,
+ # but here we've manually appended content to the widget.
+ # If we embed it in an infusable FieldsetLayout, it will be
+ # (recursively) made infusable. We protect the FieldLayout
+ # by wrapping it with a new <div> Tag, so that it won't get
+ # rebuilt during infusion.
+ $wrappedFieldLayout = new OOUI\Tag( 'div' );
+ $wrappedFieldLayout->appendContent(
+ new OOUI\FieldLayout(
+ $buttonStyleShowcaseWidget,
+ array(
+ 'align' => 'top'
+ )
+ )
+ );
+ $demoContainer->appendContent( new OOUI\FieldsetLayout( array(
+ 'infusable' => true,
+ 'label' => 'Button style showcase',
+ 'items' => array( $wrappedFieldLayout ),
+ ) ) );
+ $demoContainer->appendContent( new OOUI\FieldsetLayout( array(
+ 'infusable' => true,
+ 'label' => 'Form widgets',
+ 'items' => array(
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( array(
+ 'selected' => true
+ ) ),
+ array(
+ 'align' => 'inline',
+ 'label' => 'CheckboxInputWidget'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( array(
+ 'selected' => true,
+ 'disabled' => true
+ ) ),
+ array(
+ 'align' => 'inline',
+ 'label' => "CheckboxInputWidget (disabled)\xE2\x80\x8E"
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\RadioInputWidget( array(
+ 'name' => 'oojs-ui-radio-demo'
+ ) ),
+ array(
+ 'align' => 'inline',
+ 'label' => 'Connected RadioInputWidget #1'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\RadioInputWidget( array(
+ 'name' => 'oojs-ui-radio-demo',
+ 'selected' => true
+ ) ),
+ array(
+ 'align' => 'inline',
+ 'label' => 'Connected RadioInputWidget #2'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\RadioInputWidget( array(
+ 'selected' => true,
+ 'disabled' => true
+ ) ),
+ array(
+ 'align' => 'inline',
+ 'label' => "RadioInputWidget (disabled)\xE2\x80\x8E"
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( array( 'value' => 'Text input' ) ),
+ array(
+ 'label' => "TextInputWidget\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( array( 'icon' => 'search' ) ),
+ array(
+ 'label' => "TextInputWidget (icon)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( array(
+ 'indicator' => 'required',
+ 'required' => true
+ ) ),
+ array(
+ 'label' => "TextInputWidget (indicator, required)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( array( 'placeholder' => 'Placeholder' ) ),
+ array(
+ 'label' => "TextInputWidget (placeholder)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( array(
+ 'value' => 'Readonly',
+ 'readOnly' => true
+ ) ),
+ array(
+ 'label' => "TextInputWidget (readonly)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( array(
+ 'value' => 'Disabled',
+ 'disabled' => true
+ ) ),
+ array(
+ 'label' => "TextInputWidget (disabled)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( array(
+ 'multiline' => true,
+ 'value' => "Multiline\nMultiline"
+ ) ),
+ array(
+ 'label' => "TextInputWidget (multiline)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\DropdownInputWidget( array(
+ 'options' => array(
+ array(
+ 'data' => 'a',
+ 'label' => 'First'
+ ),
+ array(
+ 'data' => 'b',
+ 'label' => 'Second'
+ ),
+ array(
+ 'data' => 'c',
+ 'label' => 'Third'
+ )
+ ),
+ 'value' => 'b'
+ ) ),
+ array(
+ 'label' => 'DropdownInputWidget',
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonInputWidget( array(
+ 'label' => 'Submit the form',
+ 'type' => 'submit'
+ ) ),
+ array(
+ 'align' => 'top',
+ 'label' => "ButtonInputWidget\xE2\x80\x8E"
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonInputWidget( array(
+ 'label' => 'Submit the form',
+ 'type' => 'submit',
+ 'useInputTag' => true
+ ) ),
+ array(
+ 'align' => 'top',
+ 'label' => "ButtonInputWidget (using <input/>)\xE2\x80\x8E"
+ )
+ )
+ )
+ ) ) );
+ # Again, $horizontalAlignmentWidget is not infusable because
+ # it manually added content after creation. If we embed it
+ # in an infusable FieldsetLayout, it will (recursively) be made
+ # infusable. So protect the widget by wrapping it in a
+ # <div> Tag.
+ $wrappedFieldLayout = new OOUI\Tag( 'div' );
+ $wrappedFieldLayout->appendContent(
+ new OOUI\FieldLayout(
+ $horizontalAlignmentWidget,
+ array(
+ 'label' => 'Multiple widgets shown as a single line, ' .
+ 'as used in compact forms or in parts of a bigger widget.',
+ 'align' => 'top'
+ )
+ )
+ );
+ $demoContainer->appendContent( new OOUI\FieldsetLayout( array(
+ 'infusable' => true,
+ 'label' => 'Horizontal alignment',
+ 'items' => array( $wrappedFieldLayout ),
+ ) ) );
+ $demoContainer->appendContent( new OOUI\FieldsetLayout( array(
+ 'infusable' => true,
+ 'label' => 'Other widgets',
+ 'items' => array(
+ new OOUI\FieldLayout(
+ new OOUI\IconWidget( array(
+ 'icon' => 'picture',
+ 'title' => 'Picture icon'
+ ) ),
+ array(
+ 'label' => "IconWidget (normal)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\IconWidget( array(
+ 'icon' => 'remove',
+ 'flags' => 'destructive',
+ 'title' => 'Remove icon'
+ ) ),
+ array(
+ 'label' => "IconWidget (flagged)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\IconWidget( array(
+ 'icon' => 'picture',
+ 'title' => 'Picture icon',
+ 'disabled' => true
+ ) ),
+ array(
+ 'label' => "IconWidget (disabled)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\IndicatorWidget( array(
+ 'indicator' => 'required',
+ 'title' => 'Required indicator'
+ ) ),
+ array(
+ 'label' => "IndicatorWidget (normal)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\IndicatorWidget( array(
+ 'indicator' => 'required',
+ 'title' => 'Required indicator',
+ 'disabled' => true
+ ) ),
+ array(
+ 'label' => "IndicatorWidget (disabled)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\LabelWidget( array(
+ 'label' => 'Label'
+ ) ),
+ array(
+ 'label' => "LabelWidget (normal)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\LabelWidget( array(
+ 'label' => 'Label',
+ 'disabled' => true,
+ ) ),
+ array(
+ 'label' => "LabelWidget (disabled)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\LabelWidget( array(
+ 'label' => new OOUI\HtmlSnippet( '<b>Fancy</b> <i>text</i> <u>formatting</u>!' ),
+ ) ),
+ array(
+ 'label' => "LabelWidget (with html)\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ )
+ )
+ ) ) );
+ $demoContainer->appendContent( new OOUI\FieldsetLayout( array(
+ 'infusable' => true,
+ 'label' => 'Field layouts',
+ 'help' => 'I am an additional, helpful information. Lorem ipsum dolor sit amet, cibo pri ' .
+ "in, duo ex inimicus perpetua complectitur, mel periculis similique at.\xE2\x80\x8E",
+ 'items' => array(
+ new OOUI\FieldLayout(
+ new OOUI\ButtonWidget( array(
+ 'label' => 'Button'
+ ) ),
+ array(
+ 'label' => 'FieldLayout with help',
+ 'help' => 'I am an additional, helpful information. Lorem ipsum dolor sit amet, cibo pri ' .
+ "in, duo ex inimicus perpetua complectitur, mel periculis similique at.\xE2\x80\x8E",
+ 'align' => 'top'
+ )
+ )
+ )
+ ) ) );
+
+ $demoContainer->appendContent( new OOUI\FormLayout( array(
+ 'infusable' => true,
+ 'method' => 'GET',
+ 'action' => 'widgets.php',
+ 'items' => array(
+ new OOUI\FieldsetLayout( array(
+ 'label' => 'Form layout',
+ 'items' => array(
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( array(
+ 'name' => 'username',
+ ) ),
+ array(
+ 'label' => 'User name',
+ 'align' => 'top',
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( array(
+ 'name' => 'password',
+ 'type' => 'password',
+ ) ),
+ array(
+ 'label' => 'Password',
+ 'align' => 'top',
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( array(
+ 'name' => 'rememberme',
+ 'selected' => true,
+ ) ),
+ array(
+ 'label' => 'Remember me',
+ 'align' => 'inline',
+ )
+ ),
+ new OOUI\FieldLayout(
+ new OOUI\ButtonInputWidget( array(
+ 'name' => 'login',
+ 'label' => 'Log in',
+ 'type' => 'submit',
+ 'flags' => array( 'primary', 'progressive' ),
+ 'icon' => 'check',
+ ) ),
+ array(
+ 'label' => null,
+ 'align' => 'top',
+ )
+ ),
+ )
+ ) )
+ )
+ ) ) );
+
+ echo $demoContainer;
+
+ ?>
+ </div>
+
+ <!-- Demonstrate JavaScript "infusion" of PHP widgets -->
+ <script src="../node_modules/jquery/dist/jquery.js"></script>
+ <script src="../node_modules/oojs/dist/oojs.jquery.js"></script>
+ <script src="../dist/oojs-ui.js"></script>
+ <script src="../dist/oojs-ui-apex.js"></script>
+ <script src="../dist/oojs-ui-mediawiki.js"></script>
+ <script src="./infusion.js"></script>
+</body>
+</html>
diff --git a/vendor/oojs/oojs-ui/i18n/ace.json b/vendor/oojs/oojs-ui/i18n/ace.json
new file mode 100644
index 00000000..0fdc1a89
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ace.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Si Gam Acèh"
+ ]
+ },
+ "ooui-outline-control-move-down": "Pinah item u yup",
+ "ooui-outline-control-move-up": "Pinah item u ateuëh",
+ "ooui-toolbar-more": "Lom"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/af.json b/vendor/oojs/oojs-ui/i18n/af.json
new file mode 100644
index 00000000..6f79e370
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/af.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Naudefj"
+ ]
+ },
+ "ooui-outline-control-move-down": "Skuif item af",
+ "ooui-outline-control-move-up": "Skuif item op",
+ "ooui-outline-control-remove": "Verwyder item",
+ "ooui-toolbar-more": "Meer",
+ "ooui-toolgroup-expand": "Meer",
+ "ooui-toolgroup-collapse": "Minder",
+ "ooui-dialog-message-accept": "Regso",
+ "ooui-dialog-message-reject": "Kanselleer",
+ "ooui-dialog-process-error": "Iets het verkeerd gegaan",
+ "ooui-dialog-process-dismiss": "Sluit",
+ "ooui-dialog-process-retry": "Probeer weer",
+ "ooui-dialog-process-continue": "Gaan voort"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/am.json b/vendor/oojs/oojs-ui/i18n/am.json
new file mode 100644
index 00000000..bfe9d5c3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/am.json
@@ -0,0 +1,7 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elfalem"
+ ]
+ }
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ar.json b/vendor/oojs/oojs-ui/i18n/ar.json
new file mode 100644
index 00000000..058a1491
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ar.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ciphers",
+ "Claw eg",
+ "Elfalem",
+ "Jdforrester",
+ "Mido",
+ "OsamaK",
+ "زكريا",
+ "مشعل الحربي",
+ "ترجمان05",
+ "Abanima"
+ ]
+ },
+ "ooui-outline-control-move-down": "انقل العنصر للأسفل",
+ "ooui-outline-control-move-up": "انقل العنصر للأعلى",
+ "ooui-outline-control-remove": "أزل العنصر",
+ "ooui-toolbar-more": "مزيد",
+ "ooui-toolgroup-expand": "مزيد",
+ "ooui-toolgroup-collapse": "أقل",
+ "ooui-dialog-message-accept": "موافق",
+ "ooui-dialog-message-reject": "ألغ",
+ "ooui-dialog-process-error": "حدث خطأ",
+ "ooui-dialog-process-dismiss": "أغلق",
+ "ooui-dialog-process-retry": "حاول مرة أخرى",
+ "ooui-dialog-process-continue": "استمر"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/arc.json b/vendor/oojs/oojs-ui/i18n/arc.json
new file mode 100644
index 00000000..de5b7aff
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/arc.json
@@ -0,0 +1,7 @@
+{
+ "@metadata": {
+ "authors": [
+ "Basharh"
+ ]
+ }
+}
diff --git a/vendor/oojs/oojs-ui/i18n/arq.json b/vendor/oojs/oojs-ui/i18n/arq.json
new file mode 100644
index 00000000..80987818
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/arq.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bachounda"
+ ]
+ },
+ "ooui-outline-control-move-down": "هبط الشيئ للتحت",
+ "ooui-outline-control-move-up": "طلع الشيئ للفوق",
+ "ooui-outline-control-remove": "أمحي العنصر",
+ "ooui-toolbar-more": "زيادة",
+ "ooui-dialog-message-accept": "مليح",
+ "ooui-dialog-message-reject": "رجَع",
+ "ooui-dialog-process-error": "حاجه ما خدمتش مليح",
+ "ooui-dialog-process-dismiss": "أرفضها",
+ "ooui-dialog-process-retry": "عاود جرب"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ast.json b/vendor/oojs/oojs-ui/i18n/ast.json
new file mode 100644
index 00000000..87d7688a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ast.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Basharh",
+ "Bishnu Saikia",
+ "Xuacu"
+ ]
+ },
+ "ooui-outline-control-move-down": "Mover abaxo l'elementu",
+ "ooui-outline-control-move-up": "Mover arriba l'elementu",
+ "ooui-outline-control-remove": "Desaniciar elementu",
+ "ooui-toolbar-more": "Más",
+ "ooui-dialog-message-accept": "Aceutar",
+ "ooui-dialog-message-reject": "Encaboxar",
+ "ooui-dialog-process-error": "Daqué funcionó mal",
+ "ooui-dialog-process-dismiss": "Descartar",
+ "ooui-dialog-process-retry": "Vuelvi a intentalo"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/awa.json b/vendor/oojs/oojs-ui/i18n/awa.json
new file mode 100644
index 00000000..f78ed326
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/awa.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "1AnuraagPandey"
+ ]
+ },
+ "ooui-toolbar-more": "अउर"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/az.json b/vendor/oojs/oojs-ui/i18n/az.json
new file mode 100644
index 00000000..fc12d1b3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/az.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cekli829",
+ "Interfase",
+ "Jduranboger"
+ ]
+ },
+ "ooui-outline-control-move-down": "Bəndi aşağı apar",
+ "ooui-outline-control-move-up": "Bəndi yuxarı apar",
+ "ooui-outline-control-remove": "Bəndi sil",
+ "ooui-toolbar-more": "Daha artıq"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ba.json b/vendor/oojs/oojs-ui/i18n/ba.json
new file mode 100644
index 00000000..ff915b06
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ba.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "AiseluRB",
+ "Amire80",
+ "Assele",
+ "Haqmar",
+ "Sagan",
+ "Рустам Нурыев"
+ ]
+ },
+ "ooui-outline-control-move-down": "Аҫҡа күсерергә",
+ "ooui-outline-control-move-up": "Өҫкә күсерергә"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/bcc.json b/vendor/oojs/oojs-ui/i18n/bcc.json
new file mode 100644
index 00000000..a340a881
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/bcc.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Baloch Afghanistan"
+ ]
+ },
+ "ooui-dialog-message-accept": "اوکی",
+ "ooui-dialog-process-retry": "پدا کوشش کورتین"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/bcl.json b/vendor/oojs/oojs-ui/i18n/bcl.json
new file mode 100644
index 00000000..bc2251e8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/bcl.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Geopoet",
+ "Sky Harbor"
+ ]
+ },
+ "ooui-outline-control-move-down": "Balyuhon an aytem paibaba",
+ "ooui-outline-control-move-up": "Balyuhon an aytem paitaas",
+ "ooui-toolbar-more": "Kadugangan"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/be-tarask.json b/vendor/oojs/oojs-ui/i18n/be-tarask.json
new file mode 100644
index 00000000..c5475f85
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/be-tarask.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "EugeneZelenko",
+ "Wizardist",
+ "Чаховіч Уладзіслаў",
+ "Zedlik"
+ ]
+ },
+ "ooui-outline-control-move-down": "Перасунуць ніжэй",
+ "ooui-outline-control-move-up": "Перасунуць вышэй",
+ "ooui-toolbar-more": "Болей"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/be.json b/vendor/oojs/oojs-ui/i18n/be.json
new file mode 100644
index 00000000..fb0f6880
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/be.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Чаховіч Уладзіслаў",
+ "Artificial123"
+ ]
+ },
+ "ooui-dialog-message-accept": "ОК",
+ "ooui-dialog-message-reject": "Адмяніць"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/bg.json b/vendor/oojs/oojs-ui/i18n/bg.json
new file mode 100644
index 00000000..02d95b52
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/bg.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "DCLXVI",
+ "Hristofor.mirchev",
+ "පසිඳු කාවින්ද",
+ "Mitzev"
+ ]
+ },
+ "ooui-outline-control-remove": "Премахване на обекта",
+ "ooui-toolbar-more": "Още"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/bn.json b/vendor/oojs/oojs-ui/i18n/bn.json
new file mode 100644
index 00000000..1cfa6c45
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/bn.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Aftab1995",
+ "Bellayet",
+ "Jayantanth",
+ "Nasir8891",
+ "Runab",
+ "Sayak Sarkar",
+ "Aftabuzzaman",
+ "RYasmeen (WMF)"
+ ]
+ },
+ "ooui-outline-control-move-down": "আইটেম নিচে স্থানান্তর",
+ "ooui-outline-control-move-up": "আইটেম উপরে স্থানান্তর",
+ "ooui-outline-control-remove": "আইটেম সরান",
+ "ooui-toolbar-more": "আরও",
+ "ooui-toolgroup-expand": "আরও",
+ "ooui-toolgroup-collapse": "কম দেখাও",
+ "ooui-dialog-message-accept": "ঠিক আছে",
+ "ooui-dialog-message-reject": "বাতিল",
+ "ooui-dialog-process-error": "কিছু একটায় ত্রুটি হয়েছে",
+ "ooui-dialog-process-dismiss": "বাতিল করুন",
+ "ooui-dialog-process-retry": "আবার চেষ্টা করুন",
+ "ooui-dialog-process-continue": "অগ্রসর হোন"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/br.json b/vendor/oojs/oojs-ui/i18n/br.json
new file mode 100644
index 00000000..83af863c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/br.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fohanno",
+ "Fulup",
+ "Y-M D",
+ "Maoris"
+ ]
+ },
+ "ooui-outline-control-move-down": "Lakaat an elfenn da ziskenn",
+ "ooui-outline-control-move-up": "Lakaat an elfenn da bignat",
+ "ooui-outline-control-remove": "Tennañ an elfenn",
+ "ooui-toolbar-more": "Muioc'h",
+ "ooui-toolgroup-expand": "Muioc'h",
+ "ooui-toolgroup-collapse": "Nebeutoc'h",
+ "ooui-dialog-message-accept": "Mat eo",
+ "ooui-dialog-message-reject": "Nullañ",
+ "ooui-dialog-process-error": "Un dra bennak a-dreuz a zo bet",
+ "ooui-dialog-process-dismiss": "Disteurel",
+ "ooui-dialog-process-retry": "Klask en-dro",
+ "ooui-dialog-process-continue": "Kenderc'hel"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/bs.json b/vendor/oojs/oojs-ui/i18n/bs.json
new file mode 100644
index 00000000..130bd8e5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/bs.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "DzWiki"
+ ]
+ },
+ "ooui-outline-control-move-down": "Premjesti stavku dole",
+ "ooui-outline-control-move-up": "Premjesti stavku gore",
+ "ooui-outline-control-remove": "Ukloni stavku",
+ "ooui-toolbar-more": "Više",
+ "ooui-toolgroup-expand": "Više",
+ "ooui-toolgroup-collapse": "Manje",
+ "ooui-dialog-message-accept": "U redu",
+ "ooui-dialog-message-reject": "Otkaži",
+ "ooui-dialog-process-error": "Nešto je pošlo naopako",
+ "ooui-dialog-process-dismiss": "Odbaci",
+ "ooui-dialog-process-retry": "Pokušajte ponovo",
+ "ooui-dialog-process-continue": "Nastavi"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ca.json b/vendor/oojs/oojs-ui/i18n/ca.json
new file mode 100644
index 00000000..ce3afa43
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ca.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alvaro Vidal-Abarca",
+ "Amire80",
+ "Arnaugir",
+ "Pginer",
+ "QuimGil",
+ "SMP",
+ "Vriullop",
+ "Toniher",
+ "Edustus",
+ "Davidpar"
+ ]
+ },
+ "ooui-outline-control-move-down": "Baixa l'element",
+ "ooui-outline-control-move-up": "Puja l'element",
+ "ooui-outline-control-remove": "Esborra l'ítem",
+ "ooui-toolbar-more": "Més",
+ "ooui-toolgroup-expand": "Més",
+ "ooui-toolgroup-collapse": "Menys",
+ "ooui-dialog-message-accept": "D'acord",
+ "ooui-dialog-message-reject": "Cancel·la",
+ "ooui-dialog-process-error": "Alguna cosa no ha funcionat",
+ "ooui-dialog-process-dismiss": "Descarta",
+ "ooui-dialog-process-retry": "Torneu-ho a provar",
+ "ooui-dialog-process-continue": "Continua"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ce.json b/vendor/oojs/oojs-ui/i18n/ce.json
new file mode 100644
index 00000000..562dc3d5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ce.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Умар"
+ ]
+ },
+ "ooui-outline-control-move-down": "Лаха яккха элемент",
+ "ooui-outline-control-move-up": "Лаккха яккха элемент",
+ "ooui-outline-control-remove": "ДӀадаха меттиг",
+ "ooui-toolbar-more": "Кхин",
+ "ooui-toolgroup-expand": "Дукха",
+ "ooui-toolgroup-collapse": "КӀезиг",
+ "ooui-dialog-message-accept": "ХӀаъ",
+ "ooui-dialog-message-reject": "Цаоьшу",
+ "ooui-dialog-process-continue": "Кхин дӀа"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ckb.json b/vendor/oojs/oojs-ui/i18n/ckb.json
new file mode 100644
index 00000000..0c66619d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ckb.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Calak",
+ "Muhammed taha",
+ "Serwan"
+ ]
+ },
+ "ooui-dialog-message-accept": "باشە",
+ "ooui-dialog-message-reject": "پاشگەزبوونەوە"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/co.json b/vendor/oojs/oojs-ui/i18n/co.json
new file mode 100644
index 00000000..01d181d7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/co.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Paulu"
+ ]
+ },
+ "ooui-outline-control-move-down": "Fà falà l'ogettu",
+ "ooui-outline-control-move-up": "Fà cullà l'ogettu"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/crh-cyrl.json b/vendor/oojs/oojs-ui/i18n/crh-cyrl.json
new file mode 100644
index 00000000..ccc00269
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/crh-cyrl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Don Alessandro"
+ ]
+ },
+ "ooui-toolbar-more": "Даа зияде"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/crh-latn.json b/vendor/oojs/oojs-ui/i18n/crh-latn.json
new file mode 100644
index 00000000..7ad7b0bb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/crh-latn.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Don Alessandro"
+ ]
+ },
+ "ooui-toolbar-more": "Daa ziyade"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/cs.json b/vendor/oojs/oojs-ui/i18n/cs.json
new file mode 100644
index 00000000..1db9aed5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/cs.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chmee2",
+ "Jkjk",
+ "Juandev",
+ "Koo6",
+ "Littledogboy",
+ "Michaelbrabec",
+ "Mormegil",
+ "Polda18",
+ "Tchoř",
+ "ශ්වෙත",
+ "Vojtěch Dostál"
+ ]
+ },
+ "ooui-outline-control-move-down": "Přesunout položku dolů",
+ "ooui-outline-control-move-up": "Přesunout položku nahoru",
+ "ooui-outline-control-remove": "Odstranit položku",
+ "ooui-toolbar-more": "Další",
+ "ooui-toolgroup-expand": "Více",
+ "ooui-toolgroup-collapse": "Méně",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Storno",
+ "ooui-dialog-process-error": "Něco se pokazilo",
+ "ooui-dialog-process-dismiss": "Zavřít",
+ "ooui-dialog-process-retry": "Zkusit znovu",
+ "ooui-dialog-process-continue": "Pokračovat"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/cu.json b/vendor/oojs/oojs-ui/i18n/cu.json
new file mode 100644
index 00000000..aa916af0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/cu.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "ОйЛ"
+ ]
+ },
+ "ooui-toolbar-more": "вѧщє",
+ "ooui-toolgroup-expand": "вѧщє"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/cy.json b/vendor/oojs/oojs-ui/i18n/cy.json
new file mode 100644
index 00000000..b74cd064
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/cy.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr",
+ "Robin Owain",
+ "ОйЛ",
+ "DChan (WMF)"
+ ]
+ },
+ "ooui-outline-control-move-down": "Symud yr eitem i lawr",
+ "ooui-outline-control-move-up": "Symud yr eitem i fyny",
+ "ooui-outline-control-remove": "Tynnu'r eitem",
+ "ooui-toolbar-more": "Rhagor"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/da.json b/vendor/oojs/oojs-ui/i18n/da.json
new file mode 100644
index 00000000..0b847be1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/da.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cgtdk",
+ "Christian List",
+ "EileenSanda",
+ "Laketown",
+ "Palnatoke",
+ "Simeondahl",
+ "Tehnix"
+ ]
+ },
+ "ooui-outline-control-move-down": "Flyt ned",
+ "ooui-outline-control-move-up": "Flyt op",
+ "ooui-toolbar-more": "Mere"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/de.json b/vendor/oojs/oojs-ui/i18n/de.json
new file mode 100644
index 00000000..15624fd4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/de.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "APPER",
+ "G.Hagedorn",
+ "Inkowik",
+ "Jcornelius",
+ "Jdforrester",
+ "Kghbln",
+ "Metalhead64",
+ "Murma174",
+ "Se4598",
+ "Tomabrafix"
+ ]
+ },
+ "ooui-outline-control-move-down": "Element nach unten verschieben",
+ "ooui-outline-control-move-up": "Element nach oben verschieben",
+ "ooui-outline-control-remove": "Element entfernen",
+ "ooui-toolbar-more": "Mehr",
+ "ooui-toolgroup-expand": "Mehr",
+ "ooui-toolgroup-collapse": "Weniger",
+ "ooui-dialog-message-accept": "Okay",
+ "ooui-dialog-message-reject": "Abbrechen",
+ "ooui-dialog-process-error": "Etwas ist schief gelaufen",
+ "ooui-dialog-process-dismiss": "Ausblenden",
+ "ooui-dialog-process-retry": "Erneut versuchen",
+ "ooui-dialog-process-continue": "Fortfahren"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/diq.json b/vendor/oojs/oojs-ui/i18n/diq.json
new file mode 100644
index 00000000..881ff674
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/diq.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Erdemaslancan",
+ "Gorizon",
+ "Kghbln",
+ "Marmase",
+ "Mirzali",
+ "Se4598"
+ ]
+ },
+ "ooui-outline-control-move-down": "Bendi bere cêr",
+ "ooui-outline-control-move-up": "Bendi bere cor",
+ "ooui-outline-control-remove": "Obcey wedare",
+ "ooui-toolbar-more": "Zewbi"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/dsb.json b/vendor/oojs/oojs-ui/i18n/dsb.json
new file mode 100644
index 00000000..7ad3f200
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/dsb.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Michawiki"
+ ]
+ },
+ "ooui-outline-control-move-down": "Element dołoj pśesunuś",
+ "ooui-outline-control-move-up": "Element górjej pśesunuś",
+ "ooui-outline-control-remove": "Zapisk wótpóraś",
+ "ooui-toolbar-more": "Wěcej"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/egl.json b/vendor/oojs/oojs-ui/i18n/egl.json
new file mode 100644
index 00000000..624ecaa3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/egl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lévi",
+ "Gloria sah"
+ ]
+ },
+ "ooui-outline-control-move-down": "Spôsta in bâs",
+ "ooui-outline-control-move-up": "Spôsta in êlt",
+ "ooui-outline-control-remove": "Armōv l'elemèint",
+ "ooui-toolbar-more": "Êter",
+ "ooui-dialog-message-accept": "'D acòrdi",
+ "ooui-dialog-message-reject": "Scanślèr"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/el.json b/vendor/oojs/oojs-ui/i18n/el.json
new file mode 100644
index 00000000..6fb7dbad
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/el.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Astralnet",
+ "Dipa1965",
+ "Evropi",
+ "FocalPoint",
+ "Geraki",
+ "Glavkos",
+ "Nikosguard",
+ "Tifa93"
+ ]
+ },
+ "ooui-outline-control-move-down": "Μετακίνηση στοιχείου προς τα κάτω",
+ "ooui-outline-control-move-up": "Μετακίνηση στοιχείου προς τα επάνω",
+ "ooui-outline-control-remove": "Αφαίρεση στοιχείου",
+ "ooui-toolbar-more": "Περισσότερα",
+ "ooui-toolgroup-expand": "Περισσότερα",
+ "ooui-toolgroup-collapse": "Λιγότερα",
+ "ooui-dialog-message-accept": "ΟΚ",
+ "ooui-dialog-message-reject": "Ακύρωση",
+ "ooui-dialog-process-error": "Κάτι πήγε στραβά",
+ "ooui-dialog-process-dismiss": "Απόρριψη",
+ "ooui-dialog-process-retry": "Δοκιμάστε ξανά",
+ "ooui-dialog-process-continue": "Συνέχεια"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/eml.json b/vendor/oojs/oojs-ui/i18n/eml.json
new file mode 100644
index 00000000..6d9e8bf0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/eml.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gloria sah",
+ "Lévi"
+ ]
+ },
+ "ooui-outline-control-move-down": "Spôsta in bâs",
+ "ooui-outline-control-move-up": "Spôsta in êlta",
+ "ooui-outline-control-remove": "Tór vìa 'l elemèint",
+ "ooui-toolbar-more": "Êter",
+ "ooui-dialog-message-accept": "'D acòrdi",
+ "ooui-dialog-message-reject": "Scanślèr"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/en.json b/vendor/oojs/oojs-ui/i18n/en.json
new file mode 100644
index 00000000..1db3fd85
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/en.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Trevor Parscal",
+ "Ed Sanders",
+ "James D. Forrester",
+ "Raimond Spekking",
+ "Erik Moeller",
+ "Moriel Schottlender",
+ "Yuki Shira",
+ "Siebrand Mazeland",
+ "Rob Moen",
+ "Timo Tijhof",
+ "Roan Kattouw",
+ "Christian Williams",
+ "Amir E. Aharoni"
+ ]
+ },
+ "ooui-outline-control-move-down": "Move item down",
+ "ooui-outline-control-move-up": "Move item up",
+ "ooui-outline-control-remove": "Remove item",
+ "ooui-toolbar-more": "More",
+ "ooui-toolgroup-expand": "More",
+ "ooui-toolgroup-collapse": "Fewer",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Cancel",
+ "ooui-dialog-process-error": "Something went wrong",
+ "ooui-dialog-process-dismiss": "Dismiss",
+ "ooui-dialog-process-retry": "Try again",
+ "ooui-dialog-process-continue": "Continue"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/eo.json b/vendor/oojs/oojs-ui/i18n/eo.json
new file mode 100644
index 00000000..8d9714c6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/eo.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Happy5214",
+ "KuboF",
+ "Shirayuki",
+ "Yekrats"
+ ]
+ },
+ "ooui-outline-control-move-down": "Movi eron suben",
+ "ooui-outline-control-move-up": "Movi eron supren",
+ "ooui-toolbar-more": "Pli"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/es.json b/vendor/oojs/oojs-ui/i18n/es.json
new file mode 100644
index 00000000..915791e6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/es.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "Armando-Martin",
+ "Aruizdr",
+ "Benfutbol10",
+ "DJ Nietzsche",
+ "Erdemaslancan",
+ "Fitoschido",
+ "Imre",
+ "Invadinado",
+ "Jdforrester",
+ "Jduranboger",
+ "PoLuX124",
+ "Ralgis",
+ "Thehelpfulone",
+ "Gloria sah",
+ "Macofe"
+ ]
+ },
+ "ooui-outline-control-move-down": "Bajar elemento",
+ "ooui-outline-control-move-up": "Subir elemento",
+ "ooui-outline-control-remove": "Eliminar elemento",
+ "ooui-toolbar-more": "Más",
+ "ooui-toolgroup-expand": "Más",
+ "ooui-toolgroup-collapse": "Menos",
+ "ooui-dialog-message-accept": "Aceptar",
+ "ooui-dialog-message-reject": "Cancelar",
+ "ooui-dialog-process-error": "Algo salió mal",
+ "ooui-dialog-process-dismiss": "Descartar",
+ "ooui-dialog-process-retry": "Intentar de nuevo",
+ "ooui-dialog-process-continue": "Continuar"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/et.json b/vendor/oojs/oojs-ui/i18n/et.json
new file mode 100644
index 00000000..6a212b6b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/et.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Avjoska",
+ "Pikne"
+ ]
+ },
+ "ooui-outline-control-move-down": "Liiguta üksust allapoole",
+ "ooui-outline-control-move-up": "Liiguta üksust ülespoole",
+ "ooui-outline-control-remove": "Eemalda üksus",
+ "ooui-toolbar-more": "Veel",
+ "ooui-toolgroup-expand": "Veel",
+ "ooui-toolgroup-collapse": "Vähem",
+ "ooui-dialog-message-accept": "Sobib",
+ "ooui-dialog-message-reject": "Loobu",
+ "ooui-dialog-process-error": "Midagi läks valesti",
+ "ooui-dialog-process-dismiss": "Hülga",
+ "ooui-dialog-process-retry": "Proovi uuesti",
+ "ooui-dialog-process-continue": "Jätka"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/eu.json b/vendor/oojs/oojs-ui/i18n/eu.json
new file mode 100644
index 00000000..e947582d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/eu.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "An13sa",
+ "Unai Fdz. de Betoño",
+ "Xabier Armendaritz",
+ "Subi"
+ ]
+ },
+ "ooui-outline-control-move-down": "Mugitu itema beherantz",
+ "ooui-outline-control-move-up": "Mugitu itema gorantz",
+ "ooui-toolbar-more": "Gehiago",
+ "ooui-toolgroup-expand": "Gehiago",
+ "ooui-toolgroup-collapse": "Gutxiago",
+ "ooui-dialog-message-accept": "Ados",
+ "ooui-dialog-message-reject": "Utzi",
+ "ooui-dialog-process-error": "Zerbaitek huts egin du",
+ "ooui-dialog-process-retry": "Saiatu berriro",
+ "ooui-dialog-process-continue": "Jarraitu"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/fa.json b/vendor/oojs/oojs-ui/i18n/fa.json
new file mode 100644
index 00000000..7cfcfa21
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/fa.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dalba",
+ "Ebraminio",
+ "Jdforrester",
+ "Ladsgroup",
+ "Mjbmr",
+ "Nojan Madinehi",
+ "Reza1615",
+ "Taha",
+ "درفش کاویانی",
+ "Armin1392",
+ "Alirezaaa"
+ ]
+ },
+ "ooui-outline-control-move-down": "انتقال مورد به پایین",
+ "ooui-outline-control-move-up": "انتقال مورد به بالا",
+ "ooui-outline-control-remove": "حذف مورد",
+ "ooui-toolbar-more": "بیشتر",
+ "ooui-toolgroup-expand": "بیشتر",
+ "ooui-toolgroup-collapse": "کمتر",
+ "ooui-dialog-message-accept": "تأیید",
+ "ooui-dialog-message-reject": "لغو",
+ "ooui-dialog-process-error": "مشکلی وجود دارد",
+ "ooui-dialog-process-dismiss": "نپذیرفتن",
+ "ooui-dialog-process-retry": "دوباره امتحان کن",
+ "ooui-dialog-process-continue": "ادامه"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/fi.json b/vendor/oojs/oojs-ui/i18n/fi.json
new file mode 100644
index 00000000..3fb4110c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/fi.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beluga",
+ "Crt",
+ "Harriv",
+ "Linnea",
+ "Nedergard",
+ "Nike",
+ "Olli",
+ "Pxos",
+ "Samoasambia",
+ "Silvonen",
+ "Skalman",
+ "Stryn",
+ "VezonThunder"
+ ]
+ },
+ "ooui-outline-control-move-down": "Siirrä kohdetta alaspäin",
+ "ooui-outline-control-move-up": "Siirrä kohdetta ylöspäin",
+ "ooui-outline-control-remove": "Poista kohde",
+ "ooui-toolbar-more": "Lisää",
+ "ooui-toolgroup-expand": "Enemmän",
+ "ooui-toolgroup-collapse": "Vähemmän",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Peruuta",
+ "ooui-dialog-process-error": "Jokin meni pieleen",
+ "ooui-dialog-process-dismiss": "Hylkää",
+ "ooui-dialog-process-retry": "Yritä uudelleen",
+ "ooui-dialog-process-continue": "Jatka"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/fo.json b/vendor/oojs/oojs-ui/i18n/fo.json
new file mode 100644
index 00000000..6230cc9b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/fo.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "EileenSanda"
+ ]
+ },
+ "ooui-outline-control-move-down": "Flyt lutin niður",
+ "ooui-outline-control-move-up": "Flyt lutin upp",
+ "ooui-outline-control-remove": "Tak ein lut burtur",
+ "ooui-toolbar-more": "Meira",
+ "ooui-toolgroup-expand": "Meira",
+ "ooui-toolgroup-collapse": "Færri",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Avbrót",
+ "ooui-dialog-process-error": "Okkurt gekk galið",
+ "ooui-dialog-process-dismiss": "Lat aftur",
+ "ooui-dialog-process-retry": "Royn aftur",
+ "ooui-dialog-process-continue": "Halt fram"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/fr.json b/vendor/oojs/oojs-ui/i18n/fr.json
new file mode 100644
index 00000000..9144cb01
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/fr.json
@@ -0,0 +1,45 @@
+{
+ "@metadata": {
+ "authors": [
+ "Automatik",
+ "Benoit Rochon",
+ "Boniface",
+ "Brunoperel",
+ "Crochet.david",
+ "DavidL",
+ "Dereckson",
+ "Gomoko",
+ "Guillom",
+ "Hello71",
+ "Jean-Frédéric",
+ "Linedwell",
+ "Ltrlg",
+ "Metroitendo",
+ "NemesisIII",
+ "Nicolas NALLET",
+ "Npettiaux",
+ "Rastus Vernon",
+ "Seb35",
+ "Sherbrooke",
+ "Tpt",
+ "Trizek",
+ "Urhixidur",
+ "Verdy p",
+ "Wyz",
+ "SnowedEarth",
+ "Jdforrester"
+ ]
+ },
+ "ooui-outline-control-move-down": "Faire descendre l’élément",
+ "ooui-outline-control-move-up": "Faire monter l’élément",
+ "ooui-outline-control-remove": "Supprimer l’élément",
+ "ooui-toolbar-more": "Plus",
+ "ooui-toolgroup-expand": "Plus",
+ "ooui-toolgroup-collapse": "Moins",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Annuler",
+ "ooui-dialog-process-error": "Quelque chose a mal tourné",
+ "ooui-dialog-process-dismiss": "Rejeter",
+ "ooui-dialog-process-retry": "Réessayez",
+ "ooui-dialog-process-continue": "Continuer"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/frr.json b/vendor/oojs/oojs-ui/i18n/frr.json
new file mode 100644
index 00000000..54d0fb22
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/frr.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "ChrisPtDe",
+ "Murma174"
+ ]
+ },
+ "ooui-outline-control-move-down": "Element efter onern sküüw",
+ "ooui-outline-control-move-up": "Element efter boowen sküüw",
+ "ooui-outline-control-remove": "Element wechnem",
+ "ooui-toolbar-more": "Muar"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/fur.json b/vendor/oojs/oojs-ui/i18n/fur.json
new file mode 100644
index 00000000..83c2fd9e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/fur.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Klenje",
+ "Tocaibon"
+ ]
+ },
+ "ooui-outline-control-move-down": "sposte sot",
+ "ooui-outline-control-move-up": "sposte in su",
+ "ooui-toolbar-more": "Altri"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/fy.json b/vendor/oojs/oojs-ui/i18n/fy.json
new file mode 100644
index 00000000..ddf9ff75
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/fy.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robin0van0der0vliet"
+ ]
+ },
+ "ooui-toolbar-more": "Mear",
+ "ooui-toolgroup-expand": "Mear",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Annulearje"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/gd.json b/vendor/oojs/oojs-ui/i18n/gd.json
new file mode 100644
index 00000000..6a83c9c0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/gd.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "GunChleoc"
+ ]
+ },
+ "ooui-outline-control-move-down": "Gluais nì sìos",
+ "ooui-outline-control-move-up": "Gluais nì suas",
+ "ooui-outline-control-remove": "Thoir air falbh an nì",
+ "ooui-toolbar-more": "Barrachd",
+ "ooui-dialog-message-accept": "Ceart ma-thà",
+ "ooui-dialog-message-reject": "Sguir dheth"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/gl.json b/vendor/oojs/oojs-ui/i18n/gl.json
new file mode 100644
index 00000000..a4339f47
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/gl.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alison",
+ "Kscanne",
+ "Toliño",
+ "Elisardojm"
+ ]
+ },
+ "ooui-outline-control-move-down": "Mover o elemento abaixo",
+ "ooui-outline-control-move-up": "Mover o elemento arriba",
+ "ooui-outline-control-remove": "Eliminar o elemento",
+ "ooui-toolbar-more": "Máis",
+ "ooui-toolgroup-expand": "Máis",
+ "ooui-toolgroup-collapse": "Menos",
+ "ooui-dialog-message-accept": "Aceptar",
+ "ooui-dialog-message-reject": "Cancelar",
+ "ooui-dialog-process-error": "Algo foi mal",
+ "ooui-dialog-process-dismiss": "Agochar",
+ "ooui-dialog-process-retry": "Inténteo de novo",
+ "ooui-dialog-process-continue": "Continuar"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/gu.json b/vendor/oojs/oojs-ui/i18n/gu.json
new file mode 100644
index 00000000..2d8315bf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/gu.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ashok modhvadia",
+ "KartikMistry",
+ "The Discoverer"
+ ]
+ },
+ "ooui-outline-control-move-down": "વસ્તુ નીચે ખસેડો",
+ "ooui-outline-control-move-up": "વસ્તુ ઉપર ખસેડો",
+ "ooui-outline-control-remove": "વસ્તુ હટાવો",
+ "ooui-toolbar-more": "વધુ",
+ "ooui-dialog-message-accept": "બરાબર",
+ "ooui-dialog-message-reject": "રદ કરો",
+ "ooui-dialog-process-error": "કંઇક ગરબડ થઇ",
+ "ooui-dialog-process-retry": "ફરી પ્રયત્ન કરો"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/he.json b/vendor/oojs/oojs-ui/i18n/he.json
new file mode 100644
index 00000000..cadc416c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/he.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "ExampleTomer",
+ "Guycn2",
+ "Matanya",
+ "Mooeypoo",
+ "Orsa",
+ "Shimmin Beg",
+ "אור שפירא",
+ "חיים",
+ "ערן",
+ "פוילישער",
+ "קיפודנחש"
+ ]
+ },
+ "ooui-outline-control-move-down": "להזיז את הפריט מטה",
+ "ooui-outline-control-move-up": "להזיז את הפריט מעלה",
+ "ooui-outline-control-remove": "להסיר את הפריט",
+ "ooui-toolbar-more": "עוד",
+ "ooui-toolgroup-expand": "יותר",
+ "ooui-toolgroup-collapse": "פחות",
+ "ooui-dialog-message-accept": "אישור",
+ "ooui-dialog-message-reject": "ביטול",
+ "ooui-dialog-process-error": "משהו השתבש",
+ "ooui-dialog-process-dismiss": "לוותר",
+ "ooui-dialog-process-retry": "לנסות שוב",
+ "ooui-dialog-process-continue": "המשך"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/hi.json b/vendor/oojs/oojs-ui/i18n/hi.json
new file mode 100644
index 00000000..ce86aaab
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/hi.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ansumang",
+ "Devayon",
+ "Rajesh",
+ "Siddhartha Ghai",
+ "Goelujjwal",
+ "Ankita-ks"
+ ]
+ },
+ "ooui-outline-control-move-down": "प्रविष्टि नीचे ले जाएँ",
+ "ooui-outline-control-move-up": "प्रविष्टि ऊपर ले जाएँ",
+ "ooui-outline-control-remove": "आइटम हटाएँ",
+ "ooui-toolbar-more": "अधिक",
+ "ooui-toolgroup-expand": "अधिक",
+ "ooui-toolgroup-collapse": "कम",
+ "ooui-dialog-message-accept": "ठीक है",
+ "ooui-dialog-message-reject": "रद्द करें",
+ "ooui-dialog-process-error": "कुछ गलत हुअा है",
+ "ooui-dialog-process-dismiss": "ख़ारिज करें",
+ "ooui-dialog-process-retry": "पुनः प्रयास करें",
+ "ooui-dialog-process-continue": "जारी रखें"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/hr.json b/vendor/oojs/oojs-ui/i18n/hr.json
new file mode 100644
index 00000000..91188984
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/hr.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "MaGa",
+ "Roberta F.",
+ "SpeedyGonsales",
+ "Zeljko.filipin"
+ ]
+ },
+ "ooui-outline-control-move-down": "Premjesti stavku dolje",
+ "ooui-outline-control-move-up": "Premjesti stavku gore",
+ "ooui-outline-control-remove": "Ukloni",
+ "ooui-toolbar-more": "Više",
+ "ooui-toolgroup-expand": "Više",
+ "ooui-toolgroup-collapse": "Manje",
+ "ooui-dialog-message-accept": "U redu",
+ "ooui-dialog-message-reject": "Odustani",
+ "ooui-dialog-process-error": "Nešto je pošlo po zlu",
+ "ooui-dialog-process-dismiss": "Zatvori",
+ "ooui-dialog-process-retry": "Pokušajte ponovo"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/hsb.json b/vendor/oojs/oojs-ui/i18n/hsb.json
new file mode 100644
index 00000000..00894e4e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/hsb.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "J budissin",
+ "Michawiki"
+ ]
+ },
+ "ooui-outline-control-move-down": "Zapisk dele přesunyć",
+ "ooui-outline-control-move-up": "Zapisk horje přesunyć",
+ "ooui-outline-control-remove": "Zapisk wotstronić",
+ "ooui-toolbar-more": "Wjace",
+ "ooui-toolgroup-expand": "Wjace",
+ "ooui-toolgroup-collapse": "Mjenje",
+ "ooui-dialog-message-accept": "W porjadku",
+ "ooui-dialog-message-reject": "Přetorhnyć",
+ "ooui-dialog-process-error": "Něšto je so nimokuliło",
+ "ooui-dialog-process-dismiss": "Schować",
+ "ooui-dialog-process-retry": "Hišće raz spytać",
+ "ooui-dialog-process-continue": "Dale"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/hu.json b/vendor/oojs/oojs-ui/i18n/hu.json
new file mode 100644
index 00000000..d50e62da
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/hu.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dj",
+ "Einstein2",
+ "Misibacsi",
+ "ViDam",
+ "Tacsipacsi",
+ "Csega"
+ ]
+ },
+ "ooui-outline-control-move-down": "Elem mozgatása lefelé",
+ "ooui-outline-control-move-up": "Elem mozgatása felfelé",
+ "ooui-outline-control-remove": "Elem eltávolítása",
+ "ooui-toolbar-more": "Tovább...",
+ "ooui-toolgroup-expand": "Több",
+ "ooui-toolgroup-collapse": "Kevesebb",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Mégse",
+ "ooui-dialog-process-dismiss": "Elrejt",
+ "ooui-dialog-process-retry": "Próbáld újra",
+ "ooui-dialog-process-continue": "Folytatás"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/hy.json b/vendor/oojs/oojs-ui/i18n/hy.json
new file mode 100644
index 00000000..2aaf4e46
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/hy.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vacio",
+ "Xelgen",
+ "Դավիթ Սարոյան"
+ ]
+ },
+ "ooui-outline-control-move-down": "Իջեցնել կետը",
+ "ooui-outline-control-move-up": "Բարձրացնել կետը",
+ "ooui-outline-control-remove": "Հեռացնել տարրը",
+ "ooui-toolbar-more": "Ավելին",
+ "ooui-toolgroup-expand": "Ավելին",
+ "ooui-toolgroup-collapse": "Պակաս",
+ "ooui-dialog-message-accept": "Լավ",
+ "ooui-dialog-message-reject": "Չեղարկել",
+ "ooui-dialog-process-error": "Ինչ-որ սխալ է տեղի ունեցել",
+ "ooui-dialog-process-dismiss": "Փակել",
+ "ooui-dialog-process-retry": "Կրկին փորձել",
+ "ooui-dialog-process-continue": "Շարունակել"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ia.json b/vendor/oojs/oojs-ui/i18n/ia.json
new file mode 100644
index 00000000..b374b6f6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ia.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "ooui-outline-control-move-down": "Displaciar elemento in basso",
+ "ooui-outline-control-move-up": "Displaciar elemento in alto",
+ "ooui-outline-control-remove": "Remover elemento",
+ "ooui-toolbar-more": "Plus",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Cancellar",
+ "ooui-dialog-process-error": "Qualcosa ha vadite mal",
+ "ooui-dialog-process-dismiss": "Clauder",
+ "ooui-dialog-process-retry": "Reprobar"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/id.json b/vendor/oojs/oojs-ui/i18n/id.json
new file mode 100644
index 00000000..bd65e71a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/id.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "Farras",
+ "Ilham151096",
+ "Iwan Novirion",
+ "Iyan",
+ "Kenrick95",
+ "McDutchie",
+ "Rv77ax",
+ "William Surya Permana"
+ ]
+ },
+ "ooui-outline-control-move-down": "Pindahkan butir ke bawah",
+ "ooui-outline-control-move-up": "Pindahkan butir ke atas",
+ "ooui-outline-control-remove": "Hapus butir",
+ "ooui-toolbar-more": "Lainnya",
+ "ooui-toolgroup-expand": "Selengkapnya",
+ "ooui-toolgroup-collapse": "Secukupnya",
+ "ooui-dialog-message-accept": "Oke",
+ "ooui-dialog-message-reject": "Batal",
+ "ooui-dialog-process-error": "Ada yang tidak beres",
+ "ooui-dialog-process-dismiss": "Tutup",
+ "ooui-dialog-process-retry": "Coba lagi",
+ "ooui-dialog-process-continue": "Lanjutkan"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ie.json b/vendor/oojs/oojs-ui/i18n/ie.json
new file mode 100644
index 00000000..241cc331
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ie.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Makuba"
+ ]
+ },
+ "ooui-outline-control-move-down": "Mover element a infra",
+ "ooui-outline-control-move-up": "Mover element a supra",
+ "ooui-toolbar-more": "Plu"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ilo.json b/vendor/oojs/oojs-ui/i18n/ilo.json
new file mode 100644
index 00000000..b37beae1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ilo.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "ooui-outline-control-move-down": "Ipababa ti banag",
+ "ooui-outline-control-move-up": "Ipangato ti banag",
+ "ooui-outline-control-remove": "Ikkaten ti banag",
+ "ooui-toolbar-more": "Adu pay",
+ "ooui-toolgroup-expand": "Adu pay",
+ "ooui-toolgroup-collapse": "Basbassit",
+ "ooui-dialog-message-accept": "Sige",
+ "ooui-dialog-message-reject": "Ukasen",
+ "ooui-dialog-process-error": "Adda madi a napasamak",
+ "ooui-dialog-process-dismiss": "Pugsayen",
+ "ooui-dialog-process-retry": "Padasen manen",
+ "ooui-dialog-process-continue": "Agtuloy"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/is.json b/vendor/oojs/oojs-ui/i18n/is.json
new file mode 100644
index 00000000..3a4e1454
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/is.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Maxí",
+ "Snævar"
+ ]
+ },
+ "ooui-outline-control-move-down": "Færa atriði niður",
+ "ooui-outline-control-move-up": "Færa atriði upp",
+ "ooui-outline-control-remove": "Fjarlægja atriði",
+ "ooui-toolbar-more": "Fleira",
+ "ooui-toolgroup-expand": "Fleira",
+ "ooui-toolgroup-collapse": "Færra",
+ "ooui-dialog-message-accept": "Í lagi",
+ "ooui-dialog-message-reject": "Hætta við",
+ "ooui-dialog-process-error": "Eitthvað mistókst",
+ "ooui-dialog-process-dismiss": "Loka",
+ "ooui-dialog-process-retry": "Reyna aftur",
+ "ooui-dialog-process-continue": "Halda áfram"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/it.json b/vendor/oojs/oojs-ui/i18n/it.json
new file mode 100644
index 00000000..0ff8af8f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/it.json
@@ -0,0 +1,30 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "Darth Kule",
+ "Doc.mari",
+ "Eleonora negri",
+ "Elitre",
+ "F. Cosoleto",
+ "FRacco",
+ "Gianfranco",
+ "Minerva Titani",
+ "Raoli",
+ "Una giornata uggiosa '94",
+ "Ontsed"
+ ]
+ },
+ "ooui-outline-control-move-down": "Sposta in basso",
+ "ooui-outline-control-move-up": "Sposta in alto",
+ "ooui-outline-control-remove": "Rimuovi elemento",
+ "ooui-toolbar-more": "Altro",
+ "ooui-toolgroup-expand": "Più",
+ "ooui-toolgroup-collapse": "Meno",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Annulla",
+ "ooui-dialog-process-error": "Qualcosa è andato storto",
+ "ooui-dialog-process-dismiss": "Nascondi",
+ "ooui-dialog-process-retry": "Riprova",
+ "ooui-dialog-process-continue": "Continua"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ja.json b/vendor/oojs/oojs-ui/i18n/ja.json
new file mode 100644
index 00000000..ec86124e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ja.json
@@ -0,0 +1,24 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fryed-peach",
+ "Miya",
+ "Penn Station",
+ "Shirayuki",
+ "Takot",
+ "Los688"
+ ]
+ },
+ "ooui-outline-control-move-down": "項目を下に移動させる",
+ "ooui-outline-control-move-up": "項目を上に移動させる",
+ "ooui-outline-control-remove": "項目を除去",
+ "ooui-toolbar-more": "その他",
+ "ooui-toolgroup-expand": "続き",
+ "ooui-toolgroup-collapse": "折り畳む",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "キャンセル",
+ "ooui-dialog-process-error": "エラーが発生しました…",
+ "ooui-dialog-process-dismiss": "閉じる",
+ "ooui-dialog-process-retry": "もう一度お試しください",
+ "ooui-dialog-process-continue": "続行"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/jv.json b/vendor/oojs/oojs-ui/i18n/jv.json
new file mode 100644
index 00000000..8827af38
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/jv.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gleki",
+ "NoiX180",
+ "Pras"
+ ]
+ },
+ "ooui-outline-control-move-down": "Pindhahaken butir mangandhap"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ka.json b/vendor/oojs/oojs-ui/i18n/ka.json
new file mode 100644
index 00000000..60ef661b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ka.json
@@ -0,0 +1,26 @@
+{
+ "@metadata": {
+ "authors": [
+ "BRUTE",
+ "David1010",
+ "Gleki",
+ "ITshnik",
+ "MIKHEIL",
+ "NoiX180",
+ "Pras",
+ "Tokoko"
+ ]
+ },
+ "ooui-outline-control-move-down": "ელემენტის ქვემოთ გადატანა",
+ "ooui-outline-control-move-up": "ელემენტის ზემოთ გადატანა",
+ "ooui-outline-control-remove": "წაშლა",
+ "ooui-toolbar-more": "მეტი",
+ "ooui-toolgroup-expand": "მეტი",
+ "ooui-toolgroup-collapse": "რამდენიმე",
+ "ooui-dialog-message-accept": "კარგი",
+ "ooui-dialog-message-reject": "გაუქმება",
+ "ooui-dialog-process-error": "მოხდა რაღაც შეცდომა",
+ "ooui-dialog-process-dismiss": "დამალვა",
+ "ooui-dialog-process-retry": "კიდევ სცადეთ",
+ "ooui-dialog-process-continue": "გაგრძელება"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/kk-cyrl.json b/vendor/oojs/oojs-ui/i18n/kk-cyrl.json
new file mode 100644
index 00000000..1d7317b2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/kk-cyrl.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arystanbek"
+ ]
+ },
+ "ooui-outline-control-move-down": "Элементті төмен жылжыту",
+ "ooui-outline-control-move-up": "Элементті жоғары жылжыту",
+ "ooui-outline-control-remove": "Элементті алып тастау",
+ "ooui-toolbar-more": "толығырақ",
+ "ooui-toolgroup-expand": "Тағы",
+ "ooui-toolgroup-collapse": "Азырақ",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Қажет емес",
+ "ooui-dialog-process-error": "Бірдеңеден қате кетті",
+ "ooui-dialog-process-dismiss": "Тоқтату",
+ "ooui-dialog-process-retry": "Қайта байқап көріңіз",
+ "ooui-dialog-process-continue": "Жалғастыру"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/km.json b/vendor/oojs/oojs-ui/i18n/km.json
new file mode 100644
index 00000000..c0d72c4f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/km.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sovichet"
+ ]
+ },
+ "ooui-outline-control-move-down": "រុញ​ទៅ​ក្រោម",
+ "ooui-outline-control-move-up": "រុញ​ទៅ​លើ",
+ "ooui-outline-control-remove": "ដក​វត្ថុ​ចេញ",
+ "ooui-toolbar-more": "បន្ថែម"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/kn.json b/vendor/oojs/oojs-ui/i18n/kn.json
new file mode 100644
index 00000000..982a3cdf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/kn.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vikassy",
+ "Nayvik",
+ "Omshivaprakash",
+ "Pavanaja"
+ ]
+ },
+ "ooui-outline-control-move-down": "ವಸ್ತುವನ್ನು ಕೆಳಗೆ ಸರಿಸು",
+ "ooui-outline-control-move-up": "ವಸ್ತುವನ್ನು ಮೇಲೆ ಸರಿಸು",
+ "ooui-outline-control-remove": "ವಸ್ತುವನ್ನು ತೆಗೆ",
+ "ooui-toolbar-more": "ಇನ್ನಷ್ಟು",
+ "ooui-toolgroup-expand": "ಇನ್ನಷ್ಟು",
+ "ooui-toolgroup-collapse": "ಕೆಲವೇ ಕೆಲವು",
+ "ooui-dialog-message-accept": "ಸರಿ",
+ "ooui-dialog-message-reject": "ರದ್ದುಮಾಡು",
+ "ooui-dialog-process-error": "ಏನೋ ಎಡವಟ್ಟಾಗಿದೆ....",
+ "ooui-dialog-process-dismiss": "ತೆಗೆದುಹಾಕು",
+ "ooui-dialog-process-retry": "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ",
+ "ooui-dialog-process-continue": "ಮುಂದುವರೆಸು"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ko.json b/vendor/oojs/oojs-ui/i18n/ko.json
new file mode 100644
index 00000000..196dc2c3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ko.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Freebiekr",
+ "Hym411",
+ "Kwj2772",
+ "LFM",
+ "아라",
+ "고기랑",
+ "Ryuch",
+ "Revi",
+ "Infinity"
+ ]
+ },
+ "ooui-outline-control-move-down": "항목을 아래로 옮기기",
+ "ooui-outline-control-move-up": "항목을 위로 옮기기",
+ "ooui-outline-control-remove": "항목 지우기",
+ "ooui-toolbar-more": "더 보기",
+ "ooui-toolgroup-expand": "더 보기",
+ "ooui-dialog-message-accept": "확인",
+ "ooui-dialog-message-reject": "취소",
+ "ooui-dialog-process-error": "무언가가 잘못되었습니다",
+ "ooui-dialog-process-dismiss": "숨기기",
+ "ooui-dialog-process-retry": "다시 시도하세요"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/krc.json b/vendor/oojs/oojs-ui/i18n/krc.json
new file mode 100644
index 00000000..ef92e49f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/krc.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iltever"
+ ]
+ },
+ "ooui-outline-control-move-down": "Элементни тюбюне кёчюр",
+ "ooui-outline-control-move-up": "Элементни башына кёчюр",
+ "ooui-outline-control-remove": "Пунктну кетер",
+ "ooui-toolbar-more": "Энтда",
+ "ooui-toolgroup-expand": "Энтда",
+ "ooui-toolgroup-collapse": "Артха",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Ызына ал",
+ "ooui-dialog-process-error": "Не эсе да табсыз кетди",
+ "ooui-dialog-process-dismiss": "Джаб",
+ "ooui-dialog-process-retry": "Энтда сынаб кёр",
+ "ooui-dialog-process-continue": "Бардыр"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ksh.json b/vendor/oojs/oojs-ui/i18n/ksh.json
new file mode 100644
index 00000000..c975e825
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ksh.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "ooui-outline-control-move-down": "Öm eine Plaz noh onge schiehbe",
+ "ooui-outline-control-move-up": "Öm eine Plaz noh bovve schiehbe",
+ "ooui-outline-control-remove": "Dä Plaz läddesch maache → fott domet!",
+ "ooui-toolbar-more": "Mih",
+ "ooui-toolgroup-expand": "Mih",
+ "ooui-toolgroup-collapse": "Winnijer",
+ "ooui-dialog-message-accept": "Lohß Jonn!",
+ "ooui-dialog-message-reject": "Ophühre",
+ "ooui-dialog-process-error": "Öhnsjädd es scheif jejange",
+ "ooui-dialog-process-dismiss": "Maach fott, ha_sch jelässe",
+ "ooui-dialog-process-retry": "Norr_ens versöhke",
+ "ooui-dialog-process-continue": "Wigger maache"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ku-latn.json b/vendor/oojs/oojs-ui/i18n/ku-latn.json
new file mode 100644
index 00000000..be9a8abd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ku-latn.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "George Animal"
+ ]
+ },
+ "ooui-toolgroup-expand": "Bêhtir",
+ "ooui-toolgroup-collapse": "Kêmtir",
+ "ooui-dialog-message-accept": "Baş e",
+ "ooui-dialog-message-reject": "Betal bike",
+ "ooui-dialog-process-retry": "Dîsa hewl bide",
+ "ooui-dialog-process-continue": "Bidomîne"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/kw.json b/vendor/oojs/oojs-ui/i18n/kw.json
new file mode 100644
index 00000000..a6c6d8ab
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/kw.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "George Animal",
+ "Nrowe",
+ "Purodha"
+ ]
+ }
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ky.json b/vendor/oojs/oojs-ui/i18n/ky.json
new file mode 100644
index 00000000..e2b8ab7a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ky.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chorobek",
+ "George Animal",
+ "Nrowe",
+ "Tynchtyk Chorotegin",
+ "Викиней"
+ ]
+ }
+}
diff --git a/vendor/oojs/oojs-ui/i18n/lb.json b/vendor/oojs/oojs-ui/i18n/lb.json
new file mode 100644
index 00000000..119d1be9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/lb.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Autokrator",
+ "Chorobek",
+ "Robby",
+ "Soued031",
+ "Tynchtyk Chorotegin",
+ "UV",
+ "Викиней"
+ ]
+ },
+ "ooui-outline-control-move-down": "Element erof réckelen",
+ "ooui-outline-control-move-up": "Element erop réckelen",
+ "ooui-outline-control-remove": "Element ewechhuelen",
+ "ooui-toolbar-more": "Méi",
+ "ooui-toolgroup-expand": "Méi",
+ "ooui-toolgroup-collapse": "Manner",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Ofbriechen",
+ "ooui-dialog-process-error": "Et ass eppes schif gaang",
+ "ooui-dialog-process-dismiss": "Verwerfen",
+ "ooui-dialog-process-retry": "Nach eng Kéier probéieren",
+ "ooui-dialog-process-continue": "Virufueren"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/lmo.json b/vendor/oojs/oojs-ui/i18n/lmo.json
new file mode 100644
index 00000000..87309db0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/lmo.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ninonino"
+ ]
+ },
+ "ooui-outline-control-move-down": "Spòsta 'n zó",
+ "ooui-outline-control-move-up": "Spòsta 'n sö",
+ "ooui-toolbar-more": "Amò"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/lt.json b/vendor/oojs/oojs-ui/i18n/lt.json
new file mode 100644
index 00000000..ecd06a8a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/lt.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Audriusa",
+ "Eitvys200",
+ "Mantak111"
+ ]
+ },
+ "ooui-outline-control-remove": "Šalinti elementus"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/lv.json b/vendor/oojs/oojs-ui/i18n/lv.json
new file mode 100644
index 00000000..9ff787ac
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/lv.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Admresdeserv.",
+ "Audriusa",
+ "Eitvys200",
+ "Papuass",
+ "PeterisP"
+ ]
+ },
+ "ooui-outline-control-move-down": "Pārvietot vienumu uz leju",
+ "ooui-outline-control-move-up": "Pārvietot vienumu uz augšu",
+ "ooui-toolbar-more": "Vairāk",
+ "ooui-toolgroup-expand": "Vairāk",
+ "ooui-toolgroup-collapse": "Mazāk",
+ "ooui-dialog-message-accept": "Labi",
+ "ooui-dialog-message-reject": "Atcelt",
+ "ooui-dialog-process-error": "Kaut kas nogāja greizi",
+ "ooui-dialog-process-retry": "Mēģināt vēlreiz",
+ "ooui-dialog-process-continue": "Turpināt"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/lzh.json b/vendor/oojs/oojs-ui/i18n/lzh.json
new file mode 100644
index 00000000..2b3ad53c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/lzh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joe young yu"
+ ]
+ },
+ "ooui-dialog-message-accept": "可"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/mg.json b/vendor/oojs/oojs-ui/i18n/mg.json
new file mode 100644
index 00000000..af97d171
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/mg.json
@@ -0,0 +1,7 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jagwar"
+ ]
+ }
+}
diff --git a/vendor/oojs/oojs-ui/i18n/min.json b/vendor/oojs/oojs-ui/i18n/min.json
new file mode 100644
index 00000000..b8790d31
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/min.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Iwan Novirion",
+ "Jagwar"
+ ]
+ },
+ "ooui-outline-control-move-down": "Pindahan ko ka bawah",
+ "ooui-outline-control-move-up": "Pindahan ko ka ateh",
+ "ooui-outline-control-remove": "Hapuih ko",
+ "ooui-toolbar-more": "Lainnyo",
+ "ooui-dialog-message-accept": "Yo",
+ "ooui-dialog-message-reject": "Batal"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/mk.json b/vendor/oojs/oojs-ui/i18n/mk.json
new file mode 100644
index 00000000..7962336c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/mk.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06",
+ "Brest",
+ "Iwan Novirion"
+ ]
+ },
+ "ooui-outline-control-move-down": "Помести надолу",
+ "ooui-outline-control-move-up": "Помести нагоре",
+ "ooui-outline-control-remove": "Отстрани ставка",
+ "ooui-toolbar-more": "Повеќе",
+ "ooui-toolgroup-expand": "Повеќе",
+ "ooui-toolgroup-collapse": "Помалку",
+ "ooui-dialog-message-accept": "ОК",
+ "ooui-dialog-message-reject": "Откажи",
+ "ooui-dialog-process-error": "Нешто не е во ред",
+ "ooui-dialog-process-dismiss": "Тргни",
+ "ooui-dialog-process-retry": "Обиди се пак",
+ "ooui-dialog-process-continue": "Продолжи"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ml.json b/vendor/oojs/oojs-ui/i18n/ml.json
new file mode 100644
index 00000000..0ce0c3fd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ml.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kavya Manohar",
+ "Praveenp",
+ "Santhosh.thottingal",
+ "Vssun"
+ ]
+ },
+ "ooui-outline-control-move-down": "ഇനം താഴേയ്ക്ക് മാറ്റുക",
+ "ooui-outline-control-move-up": "ഇനം മുകളിലേയ്ക്ക് മാറ്റുക",
+ "ooui-toolbar-more": "കൂടുതൽ"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/mr.json b/vendor/oojs/oojs-ui/i18n/mr.json
new file mode 100644
index 00000000..70061907
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/mr.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kaajawa",
+ "Mahitgar",
+ "Praju23",
+ "V.narsikar",
+ "Ydyashad",
+ "संतोष दहिवळ"
+ ]
+ },
+ "ooui-outline-control-move-down": "घटक (आयटम) खाली सरकवा",
+ "ooui-outline-control-move-up": "घटक (आयटम) वर सरकवा",
+ "ooui-toolbar-more": "अधिक"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ms.json b/vendor/oojs/oojs-ui/i18n/ms.json
new file mode 100644
index 00000000..823d4936
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ms.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Aurora",
+ "Pizza1016"
+ ]
+ },
+ "ooui-outline-control-move-down": "Alihkan perkara ke bawah",
+ "ooui-outline-control-move-up": "Alihkan perkara ke atas",
+ "ooui-outline-control-remove": "Buang perkara",
+ "ooui-toolbar-more": "Selebihnya",
+ "ooui-dialog-message-reject": "Batal",
+ "ooui-dialog-process-error": "Ada masalah",
+ "ooui-dialog-process-dismiss": "Singkir",
+ "ooui-dialog-process-retry": "Cuba lagi"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/nap.json b/vendor/oojs/oojs-ui/i18n/nap.json
new file mode 100644
index 00000000..91660373
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/nap.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chelin",
+ "Chrisportelli",
+ "PiRSquared17"
+ ]
+ },
+ "ooui-toolbar-more": "Atro"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/nb.json b/vendor/oojs/oojs-ui/i18n/nb.json
new file mode 100644
index 00000000..9e773924
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/nb.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Danmichaelo",
+ "Event",
+ "Jeblad",
+ "Laaknor",
+ "Njardarlogar",
+ "Jdforrester",
+ "Apple farmer"
+ ]
+ },
+ "ooui-outline-control-move-down": "Flytt ned",
+ "ooui-outline-control-move-up": "Flytt opp",
+ "ooui-outline-control-remove": "Fjern element",
+ "ooui-toolbar-more": "Mer",
+ "ooui-toolgroup-expand": "Mer",
+ "ooui-toolgroup-collapse": "Færre",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Avbryt",
+ "ooui-dialog-process-error": "Noe gikk galt",
+ "ooui-dialog-process-dismiss": "Lukk",
+ "ooui-dialog-process-retry": "Prøv igjen",
+ "ooui-dialog-process-continue": "Fortsett"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/nds-nl.json b/vendor/oojs/oojs-ui/i18n/nds-nl.json
new file mode 100644
index 00000000..d3db318b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/nds-nl.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Servien"
+ ]
+ },
+ "ooui-outline-control-move-down": "Onderwarp ummeneer zetten",
+ "ooui-outline-control-move-up": "Onderwarp umhoge zetten",
+ "ooui-outline-control-remove": "Element vortdoon",
+ "ooui-toolbar-more": "Meer",
+ "ooui-toolgroup-expand": "Meer",
+ "ooui-toolgroup-collapse": "Minder",
+ "ooui-dialog-message-accept": "Okee",
+ "ooui-dialog-message-reject": "Aofbreken",
+ "ooui-dialog-process-error": "Der gung iets fout",
+ "ooui-dialog-process-dismiss": "Sluten",
+ "ooui-dialog-process-retry": "Opniej proberen",
+ "ooui-dialog-process-continue": "Deurgaon"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/nds.json b/vendor/oojs/oojs-ui/i18n/nds.json
new file mode 100644
index 00000000..1e5b83dd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/nds.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Zylbath"
+ ]
+ },
+ "ooui-outline-control-move-down": "Element na ünnen schuven",
+ "ooui-outline-control-move-up": "Element na baven schuven",
+ "ooui-toolbar-more": "Mehr"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ne.json b/vendor/oojs/oojs-ui/i18n/ne.json
new file mode 100644
index 00000000..4ca5ab72
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ne.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "RajeshPandey",
+ "सरोज कुमार ढकाल",
+ "Ganesh Paudel"
+ ]
+ },
+ "ooui-outline-control-move-down": "वस्तुलाई तल सार्ने",
+ "ooui-outline-control-move-up": "वस्तुलाई माथि सार्ने",
+ "ooui-outline-control-remove": "वस्तुलाई हटाउने",
+ "ooui-toolbar-more": "थप",
+ "ooui-toolgroup-expand": "थप",
+ "ooui-toolgroup-collapse": "कम",
+ "ooui-dialog-message-accept": "हुन्छ",
+ "ooui-dialog-message-reject": "रद्द गर्ने",
+ "ooui-dialog-process-dismiss": "खारेज गर्ने",
+ "ooui-dialog-process-retry": "पुन प्रयास गर्नुहोस",
+ "ooui-dialog-process-continue": "जारी राख्ने"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/nl.json b/vendor/oojs/oojs-ui/i18n/nl.json
new file mode 100644
index 00000000..7c7b1767
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/nl.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bluyten",
+ "Breghtje",
+ "Catrope",
+ "Flightmare",
+ "Hansmuller",
+ "Jdforrester",
+ "Keegan",
+ "Konovalov",
+ "RajeshPandey",
+ "Romaine",
+ "SPQRobin",
+ "Saruman",
+ "Siebrand",
+ "Southparkfan",
+ "सरोज कुमार ढकाल",
+ "Sjoerddebruin",
+ "Gloria sah"
+ ]
+ },
+ "ooui-outline-control-move-down": "Item omlaag verplaatsen",
+ "ooui-outline-control-move-up": "Item omhoog verplaatsen",
+ "ooui-outline-control-remove": "Item verwijderen",
+ "ooui-toolbar-more": "Meer",
+ "ooui-toolgroup-expand": "Meer",
+ "ooui-toolgroup-collapse": "Minder",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Annuleren",
+ "ooui-dialog-process-error": "Er is iets misgegaan",
+ "ooui-dialog-process-dismiss": "Sluiten",
+ "ooui-dialog-process-retry": "Opnieuw proberen",
+ "ooui-dialog-process-continue": "Doorgaan"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/nn.json b/vendor/oojs/oojs-ui/i18n/nn.json
new file mode 100644
index 00000000..943e6adc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/nn.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jeblad",
+ "Njardarlogar"
+ ]
+ },
+ "ooui-outline-control-move-down": "Flytt element ned",
+ "ooui-outline-control-move-up": "Flytt element opp",
+ "ooui-toolbar-more": "Fleire"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/oc.json b/vendor/oojs/oojs-ui/i18n/oc.json
new file mode 100644
index 00000000..4d35b6c9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/oc.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31",
+ "Gloria sah"
+ ]
+ },
+ "ooui-outline-control-move-down": "Far davalar l’element",
+ "ooui-outline-control-move-up": "Far montar l’element",
+ "ooui-outline-control-remove": "Suprimir l’element",
+ "ooui-toolbar-more": "Mai",
+ "ooui-dialog-message-reject": "Anullar"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/om.json b/vendor/oojs/oojs-ui/i18n/om.json
new file mode 100644
index 00000000..ecf95971
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/om.json
@@ -0,0 +1,20 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31",
+ "Tumsaa"
+ ]
+ },
+ "ooui-outline-control-move-down": "Gad buusi",
+ "ooui-outline-control-move-up": "Ol baasi",
+ "ooui-outline-control-remove": "Balleessi",
+ "ooui-toolbar-more": "Dabalata",
+ "ooui-toolgroup-expand": "Dabalata",
+ "ooui-toolgroup-collapse": "Xiqqaa",
+ "ooui-dialog-message-accept": "Tole",
+ "ooui-dialog-message-reject": "Dhiisi",
+ "ooui-dialog-process-error": "Dogoggorri wayii ummameera",
+ "ooui-dialog-process-dismiss": "Didi",
+ "ooui-dialog-process-retry": "Itti deebi'ii yaali",
+ "ooui-dialog-process-continue": "Itti fufi"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/or.json b/vendor/oojs/oojs-ui/i18n/or.json
new file mode 100644
index 00000000..dde49bf1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/or.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Odisha1",
+ "Psubhashish",
+ "ଶିତିକଣ୍ଠ ଦାଶ"
+ ]
+ },
+ "ooui-outline-control-move-down": "ବସ୍ତୁଟିକୁ ତଳକୁ ଘୁଞ୍ଚାନ୍ତୁ",
+ "ooui-outline-control-move-up": "ବସ୍ତୁଟିକୁ ଉପରକୁ ଘୁଞ୍ଚାନ୍ତୁ",
+ "ooui-outline-control-remove": "ବସ୍ତୁଟିକୁ ଲିଭାନ୍ତୁ",
+ "ooui-toolbar-more": "ଅଧିକ",
+ "ooui-toolgroup-expand": "ଅଧିକ",
+ "ooui-toolgroup-collapse": "ଅଳ୍ପ",
+ "ooui-dialog-message-accept": "ହେଉ",
+ "ooui-dialog-message-reject": "ନାକଚ",
+ "ooui-dialog-process-error": "ଅସୁବିଧାଟିଏ ଘଟିଲା",
+ "ooui-dialog-process-dismiss": "ଖାରଜ",
+ "ooui-dialog-process-retry": "ଆଉ ଥରେ ଚେଷ୍ଟା କରନ୍ତୁ",
+ "ooui-dialog-process-continue": "ଚାଲୁରଖିବେ"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/pa.json b/vendor/oojs/oojs-ui/i18n/pa.json
new file mode 100644
index 00000000..8c7a1e7c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/pa.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amikeco",
+ "Babanwalia",
+ "Bouron",
+ "Nasir8891",
+ "Satdeep gill"
+ ]
+ },
+ "ooui-outline-control-move-down": "ਨੀਚੇ ਲੈਕੇ ਜਾਓ",
+ "ooui-outline-control-move-up": "ਉੱਤੇ ਲੈਕੇ ਜਾਓ",
+ "ooui-toolbar-more": "ਹੋਰ",
+ "ooui-toolgroup-expand": "ਹੋਰ",
+ "ooui-toolgroup-collapse": "ਥੋੜੇ",
+ "ooui-dialog-message-accept": "ਠੀਕ ਹੈ",
+ "ooui-dialog-message-reject": "ਰੱਦ ਕਰੋ",
+ "ooui-dialog-process-error": "ਕੁਝ ਗਲਤ ਹੋ ਗਿਆ",
+ "ooui-dialog-process-dismiss": "ਰੱਦ ਕਰੋ",
+ "ooui-dialog-process-retry": "ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ",
+ "ooui-dialog-process-continue": "ਜਾਰੀ ਰੱਖੋ"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/pfl.json b/vendor/oojs/oojs-ui/i18n/pfl.json
new file mode 100644
index 00000000..02d08426
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/pfl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Manuae"
+ ]
+ },
+ "ooui-outline-control-move-down": "Bweeschs nunna",
+ "ooui-outline-control-move-up": "Bweeschs nuff",
+ "ooui-outline-control-remove": "Leschs",
+ "ooui-toolbar-more": "Mea",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Abbresche"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/pl.json b/vendor/oojs/oojs-ui/i18n/pl.json
new file mode 100644
index 00000000..fbd0c8cc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/pl.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Babanwalia",
+ "Chrumps",
+ "Matma Rex",
+ "Mikołka",
+ "Nasir8891",
+ "Odie2",
+ "Rzuwig",
+ "Tar Lócesilion",
+ "Ty221",
+ "WTM",
+ "Woytecr",
+ "Wpedzich",
+ "Jacenty359",
+ "Matik7",
+ "Gloria sah",
+ "Andrzej aa"
+ ]
+ },
+ "ooui-outline-control-move-down": "Przenieś niżej",
+ "ooui-outline-control-move-up": "Przenieś wyżej",
+ "ooui-outline-control-remove": "Usuń element",
+ "ooui-toolbar-more": "Więcej",
+ "ooui-toolgroup-expand": "Więcej",
+ "ooui-toolgroup-collapse": "Mniej",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Anuluj",
+ "ooui-dialog-process-error": "Coś poszło nie tak",
+ "ooui-dialog-process-dismiss": "Ukryj",
+ "ooui-dialog-process-retry": "Spróbuj ponownie",
+ "ooui-dialog-process-continue": "Kontynuuj"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/pms.json b/vendor/oojs/oojs-ui/i18n/pms.json
new file mode 100644
index 00000000..b8fd3a58
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/pms.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Borichèt",
+ "Dragonòt",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "ooui-outline-control-move-down": "Fé calé giù l'element",
+ "ooui-outline-control-move-up": "Fé monté l'element",
+ "ooui-toolbar-more": "Ëd pi"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ps.json b/vendor/oojs/oojs-ui/i18n/ps.json
new file mode 100644
index 00000000..ebffe539
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ps.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ahmed-Najib-Biabani-Ibrahimkhel"
+ ]
+ },
+ "ooui-outline-control-move-down": "توکی ښکته راوړل",
+ "ooui-outline-control-move-up": "توکی پورته راوړل",
+ "ooui-outline-control-remove": "توکی غورځول",
+ "ooui-toolbar-more": "نور",
+ "ooui-toolgroup-expand": "نور",
+ "ooui-toolgroup-collapse": "لږ تر لږ",
+ "ooui-dialog-message-accept": "ښه",
+ "ooui-dialog-message-reject": "ناگارل",
+ "ooui-dialog-process-error": "يوه ستونزه رامنځ ته شوه",
+ "ooui-dialog-process-dismiss": "تړل",
+ "ooui-dialog-process-retry": "بيا هڅه"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/pt-br.json b/vendor/oojs/oojs-ui/i18n/pt-br.json
new file mode 100644
index 00000000..94ea0895
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/pt-br.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Dianakc",
+ "Fúlvio",
+ "Helder.wiki",
+ "HenriqueCrang",
+ "Jaideraf",
+ "Luckas",
+ "OTAVIO1981",
+ 555
+ ]
+ },
+ "ooui-outline-control-move-down": "Mover item para baixo",
+ "ooui-outline-control-move-up": "Mover item para cima",
+ "ooui-toolbar-more": "Mais"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/pt.json b/vendor/oojs/oojs-ui/i18n/pt.json
new file mode 100644
index 00000000..7b3176fb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/pt.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cainamarques",
+ "Fúlvio",
+ "GoEThe",
+ "Hamilton Abreu",
+ "Helder.wiki",
+ "Jaideraf",
+ "Jdforrester",
+ "Luckas",
+ "Vitorvicentevalente",
+ "SandroHc"
+ ]
+ },
+ "ooui-outline-control-move-down": "Mover item para baixo",
+ "ooui-outline-control-move-up": "Mover item para cima",
+ "ooui-outline-control-remove": "Remover elemento",
+ "ooui-toolbar-more": "Mais",
+ "ooui-toolgroup-expand": "Mais",
+ "ooui-toolgroup-collapse": "Menos",
+ "ooui-dialog-message-accept": "Aceitar",
+ "ooui-dialog-message-reject": "Cancelar",
+ "ooui-dialog-process-error": "Algo correu mal",
+ "ooui-dialog-process-dismiss": "Ignorar",
+ "ooui-dialog-process-retry": "Tentar novamente",
+ "ooui-dialog-process-continue": "Continuar"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/qqq.json b/vendor/oojs/oojs-ui/i18n/qqq.json
new file mode 100644
index 00000000..c1b794ab
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/qqq.json
@@ -0,0 +1,35 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Beta16",
+ "Erik Moeller",
+ "Jdforrester",
+ "Lloffiwr",
+ "Mooeypoo",
+ "Mormegil",
+ "Nike",
+ "PoLuX124",
+ "Purodha",
+ "Raymond",
+ "Sagan",
+ "Sayak Sarkar",
+ "Shirayuki",
+ "Siebrand",
+ "Trevor Parscal",
+ "Liuxinyu970226"
+ ]
+ },
+ "ooui-outline-control-move-down": "Tool tip for a button that moves items in a list down one place",
+ "ooui-outline-control-move-up": "Tool tip for a button that moves items in a list up one place",
+ "ooui-outline-control-remove": "Tool tip for a button that removes items from a list.\n{{Identical|Remove item}}",
+ "ooui-toolbar-more": "Label for the toolbar group that contains a list of all other available tools.\n{{Identical|More}}",
+ "ooui-toolgroup-expand": "Label for the fake tool that expands the full list of tools in a toolbar group.\n\nSee also:\n* {{msg-mw|Ooui-toolgroup-collapse}}\n{{Identical|More}}",
+ "ooui-toolgroup-collapse": "Label for the fake tool that collapses the full list of tools in a toolbar group.\n\nSee also:\n* {{msg-mw|Ooui-toolgroup-expand}}\n{{Identical|Fewer}}",
+ "ooui-dialog-message-accept": "Default label for the accept button of a message dialog\n{{Identical|OK}}",
+ "ooui-dialog-message-reject": "Default label for the reject button of a message dialog\n{{Identical|Cancel}}",
+ "ooui-dialog-process-error": "Title for process dialog error description",
+ "ooui-dialog-process-dismiss": "Label for process dialog dismiss error button, visible when describing errors\n{{Identical|Dismiss}}",
+ "ooui-dialog-process-retry": "Label for process dialog retry action button, visible when describing recoverable errors\n{{Identical|Try again}}",
+ "ooui-dialog-process-continue": "Label for process dialog retry action button, visible when describing only warnings\n{{Identical|Continue}}"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/qu.json b/vendor/oojs/oojs-ui/i18n/qu.json
new file mode 100644
index 00000000..cb0b2c33
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/qu.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna",
+ "Jduranboger"
+ ]
+ },
+ "ooui-outline-control-move-down": "Qallawata uraykuchiy",
+ "ooui-outline-control-move-up": "Qallawata huqariy",
+ "ooui-outline-control-remove": "P'anqa sutikunata qichuy",
+ "ooui-toolbar-more": "Aswan"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ro.json b/vendor/oojs/oojs-ui/i18n/ro.json
new file mode 100644
index 00000000..258f3e74
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ro.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "AlimanRuna",
+ "Firilacroco",
+ "Minisarm",
+ "Stelistcristi",
+ "Gloria sah"
+ ]
+ },
+ "ooui-outline-control-move-down": "Mută elementul mai jos",
+ "ooui-outline-control-move-up": "Mută elementul mai sus",
+ "ooui-outline-control-remove": "Elimină elementul",
+ "ooui-toolbar-more": "Mai mult",
+ "ooui-toolgroup-expand": "Mai multe",
+ "ooui-toolgroup-collapse": "Mai puține",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Revocare",
+ "ooui-dialog-process-error": "Ceva nu a funcționat",
+ "ooui-dialog-process-dismiss": "Renunțare",
+ "ooui-dialog-process-retry": "Reîncearcă",
+ "ooui-dialog-process-continue": "Continuă"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/roa-tara.json b/vendor/oojs/oojs-ui/i18n/roa-tara.json
new file mode 100644
index 00000000..f6f422a2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/roa-tara.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "ooui-outline-control-move-down": "Spuèste 'a vôsce sotte",
+ "ooui-outline-control-move-up": "Spuèste 'a vôsce sus",
+ "ooui-outline-control-remove": "Live 'a vôsce",
+ "ooui-toolbar-more": "De cchiù",
+ "ooui-toolgroup-expand": "De cchiù",
+ "ooui-toolgroup-collapse": "De mene",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Annulle",
+ "ooui-dialog-process-error": "Quacche cose ha sciute stuèrte",
+ "ooui-dialog-process-dismiss": "Scitte",
+ "ooui-dialog-process-retry": "Pruève arrete",
+ "ooui-dialog-process-continue": "Condinue"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ru.json b/vendor/oojs/oojs-ui/i18n/ru.json
new file mode 100644
index 00000000..129dd6a2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ru.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "DR",
+ "Eugrus",
+ "Iluvatar",
+ "KPu3uC B Poccuu",
+ "Kalan",
+ "MaxBioHazard",
+ "NBS",
+ "Niklem",
+ "Okras",
+ "Ole Yves",
+ "Putnik",
+ "Sunpriat",
+ "Yury Katkov",
+ "Умар",
+ "Камалист"
+ ]
+ },
+ "ooui-outline-control-move-down": "Переместить элемент вниз",
+ "ooui-outline-control-move-up": "Переместить элемент вверх",
+ "ooui-outline-control-remove": "Удалить пункт",
+ "ooui-toolbar-more": "Ещё",
+ "ooui-toolgroup-expand": "Больше",
+ "ooui-toolgroup-collapse": "Меньше",
+ "ooui-dialog-message-accept": "ОК",
+ "ooui-dialog-message-reject": "Отмена",
+ "ooui-dialog-process-error": "Что-то пошло не так",
+ "ooui-dialog-process-dismiss": "Закрыть",
+ "ooui-dialog-process-retry": "Попробовать ещё раз",
+ "ooui-dialog-process-continue": "Продолжить"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sah.json b/vendor/oojs/oojs-ui/i18n/sah.json
new file mode 100644
index 00000000..85a94cd5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sah.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb",
+ "HalanTul"
+ ]
+ }
+}
diff --git a/vendor/oojs/oojs-ui/i18n/scn.json b/vendor/oojs/oojs-ui/i18n/scn.json
new file mode 100644
index 00000000..22a212f9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/scn.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gazeb",
+ "Gmelfi",
+ "HalanTul",
+ "Gloria sah"
+ ]
+ },
+ "ooui-outline-control-move-down": "Sposta di sutta",
+ "ooui-outline-control-move-up": "Sposta di supra",
+ "ooui-toolbar-more": "Àutri cosi"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sco.json b/vendor/oojs/oojs-ui/i18n/sco.json
new file mode 100644
index 00000000..0a26a5c8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sco.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "John Reid"
+ ]
+ },
+ "ooui-outline-control-move-down": "Muiv eetem doon",
+ "ooui-outline-control-move-up": "Muiv eetem up",
+ "ooui-outline-control-remove": "Remuiv eetem",
+ "ooui-toolbar-more": "Mair"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sh.json b/vendor/oojs/oojs-ui/i18n/sh.json
new file mode 100644
index 00000000..b40fa04e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sh.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "OC Ripper"
+ ]
+ },
+ "ooui-outline-control-move-down": "Pomakni stavku dolje",
+ "ooui-outline-control-move-up": "Pomakni stavku gore"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/si.json b/vendor/oojs/oojs-ui/i18n/si.json
new file mode 100644
index 00000000..5988773b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/si.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Singhalawap",
+ "පසිඳු කාවින්ද",
+ "ශ්වෙත"
+ ]
+ },
+ "ooui-outline-control-move-down": "අයිතමය පහලටදමන්න",
+ "ooui-outline-control-move-up": "අයිතමය ඉහලටදමන්න"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sk.json b/vendor/oojs/oojs-ui/i18n/sk.json
new file mode 100644
index 00000000..c8246da9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sk.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mimarik",
+ "Teslaton"
+ ]
+ },
+ "ooui-outline-control-move-down": "Posunúť položku nadol",
+ "ooui-outline-control-move-up": "Posunúť položku nahor",
+ "ooui-outline-control-remove": "Odstrániť položku",
+ "ooui-toolbar-more": "Viac"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sl.json b/vendor/oojs/oojs-ui/i18n/sl.json
new file mode 100644
index 00000000..a40728ad
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sl.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dbc334",
+ "Eleassar",
+ "Pinky sl",
+ "Yerpo"
+ ]
+ },
+ "ooui-outline-control-move-down": "Prestavi predmet nižje",
+ "ooui-outline-control-move-up": "Prestavi predmet višje",
+ "ooui-outline-control-remove": "Odstrani vnos",
+ "ooui-toolbar-more": "Več",
+ "ooui-toolgroup-expand": "Več",
+ "ooui-toolgroup-collapse": "Manj",
+ "ooui-dialog-message-accept": "V redu",
+ "ooui-dialog-message-reject": "Prekliči",
+ "ooui-dialog-process-error": "Nekaj je šlo narobe",
+ "ooui-dialog-process-dismiss": "Skrij",
+ "ooui-dialog-process-retry": "Poskusi znova",
+ "ooui-dialog-process-continue": "Nadaljuj"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sq.json b/vendor/oojs/oojs-ui/i18n/sq.json
new file mode 100644
index 00000000..ec180199
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sq.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Euriditi",
+ "Kushtrim",
+ "Elioqoshi",
+ "GretaDoci",
+ "Gertakapllani"
+ ]
+ },
+ "ooui-outline-control-move-down": "Zhvendose artikullin më poshtë",
+ "ooui-outline-control-move-up": "Zhvendose artikullin më lart",
+ "ooui-outline-control-remove": "Hiq artikullin",
+ "ooui-toolbar-more": "Më tepër...",
+ "ooui-dialog-message-accept": "Në rregull",
+ "ooui-dialog-message-reject": "Anullo",
+ "ooui-dialog-process-error": "Diçka shkoi keq",
+ "ooui-dialog-process-retry": "Provo përsëri"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sr-ec.json b/vendor/oojs/oojs-ui/i18n/sr-ec.json
new file mode 100644
index 00000000..c827554e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sr-ec.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01",
+ "Nikola Smolenski",
+ "Милан Јелисавчић"
+ ]
+ },
+ "ooui-outline-control-move-down": "Премести ставку на доле",
+ "ooui-outline-control-move-up": "Премести ставку на горе",
+ "ooui-outline-control-remove": "Уклони ставку",
+ "ooui-toolbar-more": "Више",
+ "ooui-toolgroup-expand": "Више",
+ "ooui-toolgroup-collapse": "Мање",
+ "ooui-dialog-message-accept": "У реду",
+ "ooui-dialog-message-reject": "Откажи",
+ "ooui-dialog-process-error": "Нешто је пошло наопако",
+ "ooui-dialog-process-dismiss": "Одбаци",
+ "ooui-dialog-process-retry": "Покушај поново",
+ "ooui-dialog-process-continue": "Настави"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sr-el.json b/vendor/oojs/oojs-ui/i18n/sr-el.json
new file mode 100644
index 00000000..704a1860
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sr-el.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Milicevic01"
+ ]
+ },
+ "ooui-outline-control-move-down": "Premesti stavku na dole",
+ "ooui-outline-control-move-up": "Premesti stavku na gore",
+ "ooui-outline-control-remove": "Ukloni stavku",
+ "ooui-toolbar-more": "Više",
+ "ooui-toolgroup-expand": "Više",
+ "ooui-toolgroup-collapse": "Manje",
+ "ooui-dialog-message-accept": "U redu",
+ "ooui-dialog-message-reject": "Otkaži",
+ "ooui-dialog-process-error": "Nešto je pošlo naopako",
+ "ooui-dialog-process-dismiss": "Odbaci",
+ "ooui-dialog-process-retry": "Pokušaj ponovo",
+ "ooui-dialog-process-continue": "Nastavi"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sv.json b/vendor/oojs/oojs-ui/i18n/sv.json
new file mode 100644
index 00000000..d499427c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sv.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ainali",
+ "Haxpett",
+ "Jopparn",
+ "Knuckles",
+ "Magol",
+ "Milicevic01",
+ "Per",
+ "Sendelbach",
+ "Skalman",
+ "WikiPhoenix",
+ "Lokal Profil"
+ ]
+ },
+ "ooui-outline-control-move-down": "Flytta ned objekt",
+ "ooui-outline-control-move-up": "Flytta upp objekt",
+ "ooui-outline-control-remove": "Ta bort objekt",
+ "ooui-toolbar-more": "Mer",
+ "ooui-toolgroup-expand": "Fler",
+ "ooui-toolgroup-collapse": "Färre",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Avbryt",
+ "ooui-dialog-process-error": "Något gick fel",
+ "ooui-dialog-process-dismiss": "Stäng",
+ "ooui-dialog-process-retry": "Försök igen",
+ "ooui-dialog-process-continue": "Fortsätt"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/sw.json b/vendor/oojs/oojs-ui/i18n/sw.json
new file mode 100644
index 00000000..510e468d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/sw.json
@@ -0,0 +1,15 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lloffiwr",
+ "Muddyb Blast Producer"
+ ]
+ },
+ "ooui-outline-control-move-down": "Sogeza kipengee chini",
+ "ooui-outline-control-move-up": "Sogeza kipengee juu",
+ "ooui-outline-control-remove": "Toa kitu",
+ "ooui-toolbar-more": "Zaidi",
+ "ooui-dialog-message-accept": "Sawa",
+ "ooui-dialog-message-reject": "Batilisha",
+ "ooui-dialog-process-retry": "Jaribu tena"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ta.json b/vendor/oojs/oojs-ui/i18n/ta.json
new file mode 100644
index 00000000..122d4a27
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ta.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jayarathina",
+ "Sank",
+ "Shanmugamp7",
+ "மதனாஹரன்",
+ "ElangoRamanujam"
+ ]
+ },
+ "ooui-toolgroup-expand": "மேலும்",
+ "ooui-dialog-process-continue": "தொடரவும்"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/te.json b/vendor/oojs/oojs-ui/i18n/te.json
new file mode 100644
index 00000000..d4868706
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/te.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Arjunaraoc",
+ "Jayarathina",
+ "Sank",
+ "Shanmugamp7",
+ "Veeven",
+ "Visdaviva",
+ "மதனாஹரன்"
+ ]
+ }
+}
diff --git a/vendor/oojs/oojs-ui/i18n/tg-cyrl.json b/vendor/oojs/oojs-ui/i18n/tg-cyrl.json
new file mode 100644
index 00000000..1429bedd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/tg-cyrl.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ibrahim"
+ ]
+ },
+ "ooui-outline-control-move-down": "Ҳаракати мавод ба поён",
+ "ooui-outline-control-move-up": "Ҳаракати мавод ба боло",
+ "ooui-outline-control-remove": "Ҳазви мавод",
+ "ooui-toolbar-more": "Бештар"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/th.json b/vendor/oojs/oojs-ui/i18n/th.json
new file mode 100644
index 00000000..94527935
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/th.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Supasate",
+ "Taweetham"
+ ]
+ },
+ "ooui-outline-control-move-down": "เลื่อนรายการลง",
+ "ooui-outline-control-move-up": "ย้ายรายการขึ้น"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/tl.json b/vendor/oojs/oojs-ui/i18n/tl.json
new file mode 100644
index 00000000..b3a9f246
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/tl.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "AnakngAraw",
+ "Sky Harbor"
+ ]
+ },
+ "ooui-outline-control-move-down": "Ilipat ang aytem pababa",
+ "ooui-outline-control-move-up": "Ilipat ang aytem pataas",
+ "ooui-outline-control-remove": "Tanggalin ang aytem",
+ "ooui-toolbar-more": "Marami pa",
+ "ooui-dialog-message-accept": "Sige",
+ "ooui-dialog-message-reject": "Huwag ituloy"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/tr.json b/vendor/oojs/oojs-ui/i18n/tr.json
new file mode 100644
index 00000000..7b4d4921
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/tr.json
@@ -0,0 +1,27 @@
+{
+ "@metadata": {
+ "authors": [
+ "Emperyan",
+ "Incelemeelemani",
+ "LuCKY",
+ "Maidis",
+ "Rapsar",
+ "Talha Samil Cakir",
+ "TurkishStyles",
+ "Sayginer",
+ "Meelo"
+ ]
+ },
+ "ooui-outline-control-move-down": "Ögeyi aşağı taşı",
+ "ooui-outline-control-move-up": "Ögeyi yukarı taşı",
+ "ooui-outline-control-remove": "Ögeyi kaldır",
+ "ooui-toolbar-more": "Dahası",
+ "ooui-toolgroup-expand": "Dahası",
+ "ooui-toolgroup-collapse": "Daha az",
+ "ooui-dialog-message-accept": "Tamam",
+ "ooui-dialog-message-reject": "İptal",
+ "ooui-dialog-process-error": "Bir şeyler yanlış gitti",
+ "ooui-dialog-process-dismiss": "Kapat",
+ "ooui-dialog-process-retry": "Tekrar dene",
+ "ooui-dialog-process-continue": "Devam et"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/tt-cyrl.json b/vendor/oojs/oojs-ui/i18n/tt-cyrl.json
new file mode 100644
index 00000000..408a1b4a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/tt-cyrl.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ajdar"
+ ]
+ },
+ "ooui-outline-control-move-down": "Элементны аска күчерү",
+ "ooui-outline-control-move-up": "Элементны өскә күчерү"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/ug-arab.json b/vendor/oojs/oojs-ui/i18n/ug-arab.json
new file mode 100644
index 00000000..19725cc2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/ug-arab.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sahran",
+ "Tel'et",
+ "Tifinaghes"
+ ]
+ }
+}
diff --git a/vendor/oojs/oojs-ui/i18n/uk.json b/vendor/oojs/oojs-ui/i18n/uk.json
new file mode 100644
index 00000000..0197a4ce
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/uk.json
@@ -0,0 +1,33 @@
+{
+ "@metadata": {
+ "authors": [
+ "AS",
+ "Aced",
+ "Ahonc",
+ "Andriykopanytsia",
+ "Base",
+ "Perohanych",
+ "RLuts",
+ "Sahran",
+ "Sergento",
+ "Steve.rusyn",
+ "SteveR",
+ "Tel'et",
+ "Tifinaghes",
+ "Ата",
+ "Piramidion"
+ ]
+ },
+ "ooui-outline-control-move-down": "Перемістити елемент униз",
+ "ooui-outline-control-move-up": "Перемістити елемент вгору",
+ "ooui-outline-control-remove": "Видалити елемент",
+ "ooui-toolbar-more": "Більше",
+ "ooui-toolgroup-expand": "Більше",
+ "ooui-toolgroup-collapse": "Менше",
+ "ooui-dialog-message-accept": "Готово",
+ "ooui-dialog-message-reject": "Скасувати",
+ "ooui-dialog-process-error": "Щось пішло не так",
+ "ooui-dialog-process-dismiss": "Приховати",
+ "ooui-dialog-process-retry": "Спробуйте ще раз",
+ "ooui-dialog-process-continue": "Продовжити"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/uz.json b/vendor/oojs/oojs-ui/i18n/uz.json
new file mode 100644
index 00000000..7c6263e4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/uz.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "CoderSI",
+ "Noor2020",
+ "Sociologist",
+ "පසිඳු කාවින්ද"
+ ]
+ },
+ "ooui-outline-control-move-down": "Elementni pastga koʻchirish",
+ "ooui-outline-control-move-up": "Elementni yuqoriga koʻchirish",
+ "ooui-toolbar-more": "Yana"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/vec.json b/vendor/oojs/oojs-ui/i18n/vec.json
new file mode 100644
index 00000000..4de584bf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/vec.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Candalua",
+ "GatoSelvadego",
+ "Gloria sah"
+ ]
+ },
+ "ooui-outline-control-move-down": "Sposta in baso",
+ "ooui-outline-control-move-up": "Sposta in sima",
+ "ooui-toolbar-more": "Altro",
+ "ooui-dialog-message-accept": "Va ben"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/vi.json b/vendor/oojs/oojs-ui/i18n/vi.json
new file mode 100644
index 00000000..d5c1e364
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/vi.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cheers!",
+ "Jdforrester",
+ "Minh Nguyen",
+ "Max20091"
+ ]
+ },
+ "ooui-outline-control-move-down": "Chuyển mục xuống",
+ "ooui-outline-control-move-up": "Chuyển mục lên",
+ "ooui-outline-control-remove": "Xóa khoản",
+ "ooui-toolbar-more": "Thêm",
+ "ooui-toolgroup-expand": "Mở rộng",
+ "ooui-toolgroup-collapse": "Rút gọn",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Hủy bỏ",
+ "ooui-dialog-process-error": "Đã bị trục trặc",
+ "ooui-dialog-process-dismiss": "Bỏ qua",
+ "ooui-dialog-process-retry": "Thử lại",
+ "ooui-dialog-process-continue": "Tiếp tục"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/vo.json b/vendor/oojs/oojs-ui/i18n/vo.json
new file mode 100644
index 00000000..3510ca93
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/vo.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya"
+ ]
+ },
+ "ooui-toolbar-more": "Pluikos"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/wuu.json b/vendor/oojs/oojs-ui/i18n/wuu.json
new file mode 100644
index 00000000..61e3d01e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/wuu.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya",
+ "十弌"
+ ]
+ },
+ "ooui-toolbar-more": "還多"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/yi.json b/vendor/oojs/oojs-ui/i18n/yi.json
new file mode 100644
index 00000000..a850fce2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/yi.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Malafaya",
+ "פוילישער",
+ "十弌"
+ ]
+ },
+ "ooui-outline-control-move-down": "רוקן עלעמענט אראפ",
+ "ooui-outline-control-move-up": "רוקן עלעמענט ארויף",
+ "ooui-outline-control-remove": "אַראָפנעמען איינס",
+ "ooui-toolbar-more": "נאך",
+ "ooui-dialog-message-accept": "יאָ",
+ "ooui-dialog-message-reject": "אַנולירן",
+ "ooui-dialog-process-error": "עפעס איז דורכגעפאלן",
+ "ooui-dialog-process-dismiss": "צומאַכן",
+ "ooui-dialog-process-retry": "פרובירט נאכאמאל"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/yo.json b/vendor/oojs/oojs-ui/i18n/yo.json
new file mode 100644
index 00000000..d979fc13
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/yo.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Demmy"
+ ]
+ },
+ "ooui-outline-control-move-down": "Sún onítòún sí sàlẹ̀",
+ "ooui-outline-control-move-up": "Sún onítòún s'ókè",
+ "ooui-toolbar-more": "Míràn"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/yue.json b/vendor/oojs/oojs-ui/i18n/yue.json
new file mode 100644
index 00000000..81ad9a95
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/yue.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Deryck Chan"
+ ]
+ },
+ "ooui-outline-control-move-down": "向下搬",
+ "ooui-outline-control-move-up": "向上搬",
+ "ooui-outline-control-remove": "拎走",
+ "ooui-toolbar-more": "仲有...",
+ "ooui-dialog-message-accept": "好",
+ "ooui-dialog-message-reject": "取消",
+ "ooui-dialog-process-error": "唔對路",
+ "ooui-dialog-process-dismiss": "閂咗佢",
+ "ooui-dialog-process-retry": "再試過"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/zh-hans.json b/vendor/oojs/oojs-ui/i18n/zh-hans.json
new file mode 100644
index 00000000..ed2f61e4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/zh-hans.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Bencmq",
+ "Demmy",
+ "Hydra",
+ "Hzy980512",
+ "Liangent",
+ "Liuxinyu970226",
+ "Qiyue2001",
+ "Shirayuki",
+ "Shizhao",
+ "TianyinLee",
+ "Xiaomingyan",
+ "Yfdyh000",
+ "Zhangjintao",
+ "乌拉跨氪",
+ "Great Brightstar"
+ ]
+ },
+ "ooui-outline-control-move-down": "项目下移",
+ "ooui-outline-control-move-up": "项目上移",
+ "ooui-outline-control-remove": "移除项目",
+ "ooui-toolbar-more": "更多",
+ "ooui-toolgroup-expand": "更多",
+ "ooui-toolgroup-collapse": "更少",
+ "ooui-dialog-message-accept": "确定",
+ "ooui-dialog-message-reject": "取消",
+ "ooui-dialog-process-error": "发生一些错误",
+ "ooui-dialog-process-dismiss": "解除",
+ "ooui-dialog-process-retry": "重试",
+ "ooui-dialog-process-continue": "继续"
+}
diff --git a/vendor/oojs/oojs-ui/i18n/zh-hant.json b/vendor/oojs/oojs-ui/i18n/zh-hant.json
new file mode 100644
index 00000000..3fd8d361
--- /dev/null
+++ b/vendor/oojs/oojs-ui/i18n/zh-hant.json
@@ -0,0 +1,32 @@
+{
+ "@metadata": {
+ "authors": [
+ "Anakmalaysia",
+ "Ch.Andrew",
+ "Hydra",
+ "Justincheng12345",
+ "Liflon",
+ "Liuxinyu970226",
+ "Qiyue2001",
+ "Radish10cm",
+ "Shirayuki",
+ "Simon Shek",
+ "Spring Roll Conan",
+ "Waihorace",
+ "Cwlin0416",
+ "LNDDYL"
+ ]
+ },
+ "ooui-outline-control-move-down": "項目下移",
+ "ooui-outline-control-move-up": "項目上移",
+ "ooui-outline-control-remove": "移除項目",
+ "ooui-toolbar-more": "更多",
+ "ooui-toolgroup-expand": "更多",
+ "ooui-toolgroup-collapse": "更少",
+ "ooui-dialog-message-accept": "確定",
+ "ooui-dialog-message-reject": "取消",
+ "ooui-dialog-process-error": "發生不明錯誤",
+ "ooui-dialog-process-dismiss": "關閉",
+ "ooui-dialog-process-retry": "再試一次",
+ "ooui-dialog-process-continue": "繼續"
+}
diff --git a/vendor/oojs/oojs-ui/jsduck.categories.json b/vendor/oojs/oojs-ui/jsduck.categories.json
new file mode 100644
index 00000000..c079f073
--- /dev/null
+++ b/vendor/oojs/oojs-ui/jsduck.categories.json
@@ -0,0 +1,80 @@
+[
+ {
+ "name": "OOjs UI",
+ "groups": [
+ {
+ "name": "General",
+ "classes": [
+ "OO.ui",
+ "OO.ui.Element",
+ "OO.ui.HtmlSnippet",
+ "OO.ui.Toolbar",
+ "OO.ui.Window",
+ "OO.ui.Dialog",
+ "OO.ui.WindowManager",
+ "OO.ui.Process",
+ "OO.ui.Error",
+ "OO.ui.ActionSet"
+ ]
+ },
+ {
+ "name": "Factories",
+ "classes": ["OO.ui.*Factory"]
+ },
+ {
+ "name": "Tools",
+ "classes": ["OO.ui.*Tool"]
+ },
+ {
+ "name": "Elements",
+ "classes": ["OO.ui.*Element"]
+ },
+ {
+ "name": "Layouts",
+ "classes": ["OO.ui.*Layout"]
+ },
+ {
+ "name": "Tool groups",
+ "classes": ["OO.ui.*ToolGroup"]
+ },
+ {
+ "name": "Widgets",
+ "classes": ["OO.ui.*Widget"]
+ },
+ {
+ "name": "Dialogs",
+ "classes": ["OO.ui.*Dialog"]
+ },
+ {
+ "name": "Themes",
+ "classes": ["OO.ui.*Theme"]
+ }
+ ]
+ },
+ {
+ "name": "Upstream",
+ "groups": [
+ {
+ "name": "OOJS",
+ "classes": ["OO", "OO.EventEmitter", "OO.Factory", "OO.Registry"]
+ },
+ {
+ "name": "jQuery",
+ "classes": ["jQuery", "jQuery.Event", "jQuery.Promise", "jQuery.Deferred", "jQuery.jqXHR"]
+ },
+ {
+ "name": "JavaScript",
+ "classes": [
+ "Array",
+ "Boolean",
+ "Date",
+ "Function",
+ "Number",
+ "Object",
+ "RegExp",
+ "String"
+ ]
+ }
+ ]
+ }
+]
diff --git a/vendor/oojs/oojs-ui/jsduck.eg-iframe.html b/vendor/oojs/oojs-ui/jsduck.eg-iframe.html
new file mode 100644
index 00000000..bd9c9dde
--- /dev/null
+++ b/vendor/oojs/oojs-ui/jsduck.eg-iframe.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+ <meta charset="UTF-8">
+ <title>OOjs UI example</title>
+ <!-- Prevent scaling on mobile devices which cause problems with dialog sizing -->
+ <meta name="viewport" content="width=device-width, user-scalable=no">
+ <style>
+ body {
+ font-size: 0.8em;
+ font-family: sans-serif;
+ }
+ </style>
+ <link rel="stylesheet" href="dist/oojs-ui-apex.css">
+</head>
+<body>
+ <script src="node_modules/jquery/dist/jquery.js"></script>
+ <script src="node_modules/oojs/dist/oojs.jquery.js"></script>
+ <script src="dist/oojs-ui.js"></script>
+ <script src="dist/oojs-ui-apex.js"></script>
+ <script>
+ function loadInlineExample( code, options, callback ) {
+ try {
+ eval( code );
+ callback && callback( true );
+ } catch (e) {
+ document.body.appendChild( document.createTextNode( e ) );
+ callback && callback( false, e );
+ }
+ }
+ </script>
+</body>
+</html>
diff --git a/vendor/oojs/oojs-ui/jsduck.external.js b/vendor/oojs/oojs-ui/jsduck.external.js
new file mode 100644
index 00000000..655c043f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/jsduck.external.js
@@ -0,0 +1,26 @@
+/**
+ * @class jQuery
+ * <http://api.jquery.com/>
+ */
+
+/**
+ * @class jQuery.Event
+ * <http://api.jquery.com/Types/#Event>
+ */
+
+/**
+ * @class jQuery.Promise
+ * <http://api.jquery.com/Types/#Promise>
+ */
+
+/**
+ * @class jQuery.Deferred
+ * @mixins jQuery.Promise
+ * <http://api.jquery.com/jQuery.Deferred/>
+ */
+
+/**
+ * @class jQuery.jqXHR
+ * @alternateClassName jqXHR
+ * <http://api.jquery.com/Types/#jqXHR>
+ */
diff --git a/vendor/oojs/oojs-ui/jsduck.json b/vendor/oojs/oojs-ui/jsduck.json
new file mode 100644
index 00000000..918b5702
--- /dev/null
+++ b/vendor/oojs/oojs-ui/jsduck.json
@@ -0,0 +1,16 @@
+{
+ "--title": "OOjs UI - Documentation",
+ "--output": "docs",
+ "--categories": "./jsduck.categories.json",
+ "--eg-iframe": "./jsduck.eg-iframe.html",
+ "--processes": "0",
+ "--warnings-exit-nonzero": true,
+ "--builtin-classes": true,
+ "--external": "HTMLDocument,Window,MouseEvent,KeyboardEvent",
+ "--warnings": ["-nodoc(class,public)"],
+ "--": [
+ "jsduck.external.js",
+ "node_modules/oojs/dist/oojs.jquery.js",
+ "src"
+ ]
+}
diff --git a/vendor/oojs/oojs-ui/php/Element.php b/vendor/oojs/oojs-ui/php/Element.php
new file mode 100644
index 00000000..eaa8c825
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/Element.php
@@ -0,0 +1,297 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * DOM element abstraction.
+ *
+ * @abstract
+ */
+class Element extends Tag {
+
+ /* Static properties */
+
+ /**
+ * HTML tag name.
+ *
+ * This may be ignored if getTagName() is overridden.
+ *
+ * @var string
+ */
+ public static $tagName = 'div';
+
+ /**
+ * Default text direction, used for some layout calculations. Use setDefaultDir() to change.
+ *
+ * Currently only per-document directionality is supported.
+ *
+ * @var string
+ */
+ public static $defaultDir = 'ltr';
+
+ /* Members */
+
+ /**
+ * Element data.
+ *
+ * @var mixed
+ */
+ protected $data = null;
+
+ /**
+ * Mixins.
+ *
+ * @var array List mixed in objects.
+ */
+ protected $mixins = array();
+
+ /* Methods */
+
+ /**
+ * @param array $config Configuration options
+ * @param string[] $config['classes'] CSS class names to add
+ * @param string $config['id'] HTML id attribute
+ * @param string $config['text'] Text to insert
+ * @param array $config['content'] Content to append (after text), strings
+ * or Element objects. Strings will be HTML-escaped for output, use an
+ * HtmlSnippet instance to prevent that.
+ * @param mixed $config['data'] Element data
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $this->getTagName() );
+
+ // Initialization
+ if ( isset( $config['infusable'] ) && is_bool( $config['infusable'] ) ) {
+ $this->setInfusable( $config['infusable'] );
+ }
+ if ( isset( $config['data'] ) ) {
+ $this->setData( $config['data'] );
+ }
+ if ( isset( $config['classes'] ) && is_array( $config['classes'] ) ) {
+ $this->addClasses( $config['classes'] );
+ }
+ if ( isset( $config['id'] ) ) {
+ $this->setAttributes( array( 'id' => $config['id'] ) );
+ }
+ if ( isset( $config['text'] ) ) {
+ // JS compatibility
+ $this->appendContent( $config['text'] );
+ }
+ if ( isset( $config['content'] ) ) {
+ $this->appendContent( $config['content'] );
+ }
+ }
+
+ /**
+ * Call a mixed-in method.
+ *
+ * This makes the methods of a mixin accessible through the element being mixed into.
+ *
+ * Triggers an error if the method is not found, as normal.
+ *
+ * @param string $method Method name
+ * @param array $arguments Method arguments
+ * @return mixed Result of method call
+ */
+ public function __call( $method, $arguments ) {
+ // Search mixins for methods
+ foreach ( $this->mixins as $mixin ) {
+ if ( method_exists( $mixin, $method ) ) {
+ return call_user_func_array( array( $mixin, $method ), $arguments );
+ }
+ }
+ // Fail normally
+ trigger_error(
+ 'Call to undefined method ' . __CLASS__ . '::' . $method . '()',
+ E_USER_ERROR
+ );
+ }
+
+ /**
+ * Get a mixed-in target property.
+ *
+ * This makes the target of a mixin accessible through the element being mixed into.
+ *
+ * The target's property name is statically configured by the mixin class.
+ *
+ * Triggers a notice if the property is not found, as normal.
+ *
+ * @param string $name Property name
+ * @return Tag|null Target property or null if not found
+ */
+ public function __get( $name ) {
+ // Search mixins for methods
+ foreach ( $this->mixins as $mixin ) {
+ if ( isset( $mixin::$targetPropertyName ) && $mixin::$targetPropertyName === $name ) {
+ return $mixin->target;
+ }
+ }
+ // Fail normally
+ trigger_error( 'Undefined property: ' . $name, E_USER_NOTICE );
+ return null;
+ }
+
+ /**
+ * Get the HTML tag name.
+ *
+ * Override this method to base the result on instance information.
+ *
+ * @return string HTML tag name
+ */
+ public function getTagName() {
+ return $this::$tagName;
+ }
+
+ /**
+ * Get element data.
+ *
+ * @return mixed Element data
+ */
+ public function getData() {
+ return $this->data;
+ }
+
+ /**
+ * Set element data.
+ *
+ * @param mixed $data Element data
+ * @chainable
+ */
+ public function setData( $data ) {
+ $this->data = $data;
+ return $this;
+ }
+
+ /**
+ * Check if element supports one or more methods.
+ *
+ * @param string|string[] $methods Method or list of methods to check
+ * @return boolean All methods are supported
+ */
+ public function supports( $methods ) {
+ $support = 0;
+ $methods = (array)$methods;
+
+ foreach ( $methods as $method ) {
+ if ( method_exists( $this, $method ) ) {
+ $support++;
+ continue;
+ }
+
+ // Search mixins for methods
+ foreach ( $this->mixins as $mixin ) {
+ if ( method_exists( $mixin, $method ) ) {
+ $support++;
+ break;
+ }
+ }
+ }
+
+ return count( $methods ) === $support;
+ }
+
+ /**
+ * Mixin a class.
+ *
+ * @param ElementMixin $mixin Mixin object
+ */
+ public function mixin( ElementMixin $mixin ) {
+ $this->mixins[] = $mixin;
+ }
+
+ /**
+ * Add the necessary properties to the given `$config` array to allow
+ * reconstruction of this widget via its constructor.
+ * @param array &$config
+ * An array which will be mutated to add the necessary configuration
+ * properties. Unless you are implementing a subclass, you should
+ * always pass a new empty `array()`.
+ * @return array
+ * A configuration array which can be passed to this object's
+ * constructor to recreate it. This is a return value to allow
+ * the safe use of copy-by-value functions like `array_merge` in
+ * the implementation.
+ */
+ public function getConfig( &$config ) {
+ foreach ( $this->mixins as $mixin ) {
+ $config = $mixin->getConfig( $config );
+ }
+ if ( $this->data !== null ) {
+ $config['data'] = $this->data;
+ }
+ return $config;
+ }
+
+ /**
+ * Create a modified version of the configuration array suitable for
+ * JSON serialization by replacing `Tag` references and
+ * `HtmlSnippet`s.
+ *
+ * @return array
+ * A serialized configuration array.
+ */
+ private function getSerializedConfig() {
+ // Ensure that '_' comes first in the output.
+ $config = array( '_' => true );
+ $config = $this->getConfig( $config );
+ // Post-process config array to turn Tag references into ID references
+ // and HtmlSnippet references into a { html: 'string' } JSON form.
+ $replaceElements = function( &$item ) {
+ if ( $item instanceof Tag ) {
+ $item->ensureInfusableId();
+ $item = array( 'tag' => $item->getAttribute( 'id' ) );
+ } elseif ( $item instanceof HtmlSnippet ) {
+ $item = array( 'html' => (string) $item );
+ }
+ };
+ array_walk_recursive( $config, $replaceElements );
+ // Set '_' last to ensure that subclasses can't accidentally step on it.
+ $config['_'] = preg_replace( '/^OOUI\\\\/', '', get_class( $this ) );
+ return $config;
+ }
+
+ protected function getGeneratedAttributes() {
+ $attributesArray = parent::getGeneratedAttributes();
+ // Add `data-ooui` attribute from serialized config array.
+ if ( $this->infusable ) {
+ $serialized = $this->getSerializedConfig();
+ $attributesArray['data-ooui'] = json_encode( $serialized );
+ }
+ return $attributesArray;
+ }
+
+ /**
+ * Render element into HTML.
+ *
+ * @return string HTML serialization
+ */
+ public function toString() {
+ Theme::singleton()->updateElementClasses( $this );
+ if ( $this->isInfusable() ) {
+ $this->ensureInfusableId();
+ }
+ return parent::toString();
+ }
+
+ /**
+ * Get the direction of the user interface for a given element.
+ *
+ * Currently only per-document directionality is supported.
+ *
+ * @param Tag $element Element to check
+ * @return string Text direction, either 'ltr' or 'rtl'
+ */
+ public static function getDir( Tag $element ) {
+ return self::$defaultDir;
+ }
+
+ /**
+ * Set the default direction of the user interface.
+ *
+ * @return string Text direction, either 'ltr' or 'rtl'
+ */
+ public static function setDefaultDir( $dir ) {
+ self::$defaultDir = $dir === 'rtl' ? 'rtl' : 'ltr';
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/ElementMixin.php b/vendor/oojs/oojs-ui/php/ElementMixin.php
new file mode 100644
index 00000000..7f54076e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/ElementMixin.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace OOUI;
+
+class ElementMixin {
+
+ /* Properties */
+
+ /**
+ * Tag being targeted.
+ *
+ * @var Tag
+ */
+ public $target = null;
+
+ /**
+ * Element being mixed into.
+ *
+ * @var Element
+ */
+ protected $element = null;
+
+ /**
+ * Property name for accessing the target on the element.
+ *
+ * @var string
+ */
+ public static $targetPropertyName = '';
+
+ /* Methods */
+
+ /**
+ * Create element.
+ *
+ * @param Element $element Element being mixed into
+ * @param Tag $tag Tag being targeted
+ * @param array $config Configuration options
+ */
+ public function __construct( Element $element, Tag $target, array $config = array() ) {
+ $this->element = $element;
+ $this->target = $target;
+ }
+
+ /**
+ * Add properties to the given `$config` array to allow reconstruction
+ * of this widget via its constructor. This method is meant to be
+ * overridden by subclasses of `ElementMixin`.
+ *
+ * @return array A configuration array.
+ * @see Element::getConfig()
+ */
+ public function getConfig( &$config ) {
+ return $config;
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/Exception.php b/vendor/oojs/oojs-ui/php/Exception.php
new file mode 100644
index 00000000..2f5ba1b4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/Exception.php
@@ -0,0 +1,6 @@
+<?php
+
+namespace OOUI;
+
+class Exception extends \Exception {
+}
diff --git a/vendor/oojs/oojs-ui/php/HtmlSnippet.php b/vendor/oojs/oojs-ui/php/HtmlSnippet.php
new file mode 100644
index 00000000..e0889fca
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/HtmlSnippet.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Wraps a HTML snippet for use with Tag::appendContent() and Tag::prependContent().
+ */
+class HtmlSnippet {
+
+ /* Members */
+
+ /**
+ * HTML snippet this instance represents.
+ *
+ * @var string
+ */
+ protected $content;
+
+ /* Methods */
+
+ /**
+ * @param string $content
+ */
+ public function __construct( $content ) {
+ $this->content = $content;
+ }
+
+ /**
+ * Render into HTML.
+ *
+ * @return string Unchanged HTML snippet
+ */
+ public function __toString() {
+ return $this->content;
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/Layout.php b/vendor/oojs/oojs-ui/php/Layout.php
new file mode 100644
index 00000000..7a4e58d0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/Layout.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Container for elements.
+ *
+ * @abstract
+ */
+class Layout extends Element {
+ /**
+ * @param array $config Configuration options
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Initialization
+ $this->addClasses( array( 'oo-ui-layout' ) );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/Tag.php b/vendor/oojs/oojs-ui/php/Tag.php
new file mode 100644
index 00000000..da8c2bfa
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/Tag.php
@@ -0,0 +1,365 @@
+<?php
+
+namespace OOUI;
+
+class Tag {
+
+ /* Members */
+
+ /**
+ * Tag name for this instance.
+ *
+ * @var string HTML tag name
+ */
+ protected $tag = '';
+
+ /**
+ * Attributes.
+ *
+ * @var array HTML attributes
+ */
+ protected $attributes = array();
+
+ /**
+ * Classes.
+ *
+ * @var array CSS classes
+ */
+ protected $classes = array();
+
+ /**
+ * Content.
+ *
+ * @var array Content text and elements
+ */
+ protected $content = array();
+
+ /**
+ * Group.
+ *
+ * @var GroupElement|null Group element is in
+ */
+ protected $elementGroup = null;
+
+ /**
+ * Infusion support.
+ *
+ * @var boolean Whether to serialize tag/element/widget state for client-side use.
+ */
+ protected $infusable = false;
+
+ /* Methods */
+
+ /**
+ * Create element.
+ *
+ * @param string $tag HTML tag name
+ */
+ public function __construct( $tag = 'div' ) {
+ $this->tag = $tag;
+ }
+
+ /**
+ * Check for CSS class.
+ *
+ * @param string $name CSS class name
+ * @return boolean
+ */
+ public function hasClass( $class ) {
+ return in_array( $class, $this->classes );
+ }
+
+ /**
+ * Add CSS classes.
+ *
+ * @param array $classes List of classes to add
+ * @chainable
+ */
+ public function addClasses( array $classes ) {
+ $this->classes = array_merge( $this->classes, $classes );
+ return $this;
+ }
+
+ /**
+ * Remove CSS classes.
+ *
+ * @param array $classes List of classes to remove
+ * @chainable
+ */
+ public function removeClasses( array $classes ) {
+ $this->classes = array_diff( $this->classes, $classes );
+ return $this;
+ }
+
+ /**
+ * Toggle CSS classes.
+ *
+ * @param array $classes List of classes to add
+ * @param boolean $toggle Add classes
+ * @chainable
+ */
+ public function toggleClasses( array $classes, $toggle = null ) {
+ if ( $toggle === null ) {
+ $this->classes = array_diff(
+ array_merge( $this->classes, $classes ),
+ array_intersect( $this->classes, $classes )
+ );
+ } elseif ( $toggle ) {
+ $this->classes = array_merge( $this->classes, $classes );
+ } else {
+ $this->classes = array_diff( $this->classes, $classes );
+ }
+ return $this;
+ }
+
+ /**
+ * Get HTML attribute value.
+ *
+ * @param string $key HTML attribute name
+ * @return string|null
+ */
+ public function getAttribute( $key ) {
+ return isset( $this->attributes[$key] ) ? $this->attributes[$key] : null;
+ }
+
+ /**
+ * Add HTML attributes.
+ *
+ * @param array $attributes List of attribute key/value pairs to add
+ * @chainable
+ */
+ public function setAttributes( array $attributes ) {
+ foreach ( $attributes as $key => $value ) {
+ $this->attributes[$key] = $value;
+ }
+ return $this;
+ }
+
+ /**
+ * Set value of input element ('value' attribute for most, element content for textarea).
+ *
+ * @param string $value Value to set
+ * @chainable
+ */
+ public function setValue( $value ) {
+ if ( strtolower( $this->tag ) === 'textarea' ) {
+ $this->clearContent();
+ $this->appendContent( $value );
+ } else {
+ $this->setAttributes( array( 'value' => $value ) );
+ }
+ return $this;
+ }
+
+ /**
+ * Remove HTML attributes.
+ *
+ * @param array $keys List of attribute keys to remove
+ * @chainable
+ */
+ public function removeAttributes( array $keys ) {
+ foreach ( $keys as $key ) {
+ unset( $this->attributes[$key] );
+ }
+ return $this;
+ }
+
+ /**
+ * Add content to the end.
+ *
+ * Accepts variadic arguments (the $content argument can be repeated any number of times).
+ *
+ * @param string|Tag|HtmlSnippet $content Content to append. Strings will be HTML-escaped
+ * for output, use a HtmlSnippet instance to prevent that.
+ * @chainable
+ */
+ public function appendContent( /* $content... */ ) {
+ $contents = func_get_args();
+ $this->content = array_merge( $this->content, $contents );
+ return $this;
+ }
+
+ /**
+ * Add content to the beginning.
+ *
+ * Accepts variadic arguments (the $content argument can be repeated any number of times).
+ *
+ * @param string|Tag|HtmlSnippet $content Content to prepend. Strings will be HTML-escaped
+ * for output, use a HtmlSnippet instance to prevent that.
+ * @chainable
+ */
+ public function prependContent( /* $content... */ ) {
+ $contents = func_get_args();
+ array_splice( $this->content, 0, 0, $contents );
+ return $this;
+ }
+
+ /**
+ * Remove all content.
+ *
+ * @chainable
+ */
+ public function clearContent() {
+ $this->content = array();
+ return $this;
+ }
+
+ /**
+ * Get group element is in.
+ *
+ * @return GroupElement|null Group element, null if none
+ */
+ public function getElementGroup() {
+ return $this->elementGroup;
+ }
+
+ /**
+ * Set group element is in.
+ *
+ * @param GroupElement|null $group Group element, null if none
+ * @chainable
+ */
+ public function setElementGroup( $group ) {
+ $this->elementGroup = $group;
+ return $this;
+ }
+
+ /**
+ * Enable widget for client-side infusion.
+ *
+ * @param boolean $infusable True to allow tag/element/widget to be referenced client-side.
+ * @chainable
+ */
+ public function setInfusable( $infusable ) {
+ $this->infusable = $infusable;
+ return $this;
+ }
+
+ /**
+ * Get client-side infusability.
+ *
+ * @return boolean If this tag/element/widget can be referenced client-side.
+ */
+ public function isInfusable() {
+ return $this->infusable;
+ }
+
+ private static $id_cnt = 0;
+ /**
+ * Ensure that this given Tag is infusable and has a unique `id`
+ * attribute.
+ * @chainable
+ */
+ public function ensureInfusableId() {
+ $this->setInfusable( true );
+ if ( $this->getAttribute( 'id' ) === null ) {
+ $this->setAttributes( array( 'id' => "ooui-" . ( self::$id_cnt++ ) ) );
+ }
+ return $this;
+ }
+
+ /**
+ * Return an augmented `attributes` array, including synthetic attributes
+ * which are created from other properties (like the `classes` array)
+ * but which shouldn't be retained in the user-visible `attributes`.
+ * @return array An attributes array.
+ */
+ protected function getGeneratedAttributes() {
+ // Copy attributes, add `class` attribute from `$this->classes` array.
+ $attributesArray = $this->attributes;
+ if ( $this->classes ) {
+ $attributesArray['class'] = implode( ' ', array_unique( $this->classes ) );
+ }
+ if ( $this->infusable ) {
+ // Indicate that this is "just" a tag (not a widget)
+ $attributesArray['data-ooui'] = json_encode( array( '_' => 'Tag' ) );
+ }
+ return $attributesArray;
+ }
+
+ /**
+ * Render element into HTML.
+ *
+ * @return string HTML serialization
+ */
+ public function toString() {
+ $attributes = '';
+ foreach ( $this->getGeneratedAttributes() as $key => $value ) {
+ if ( !preg_match( '/^[0-9a-zA-Z-]+$/', $key ) ) {
+ throw new Exception( 'Attribute name must consist of only ASCII letters, numbers and dash' );
+ }
+
+ if ( $key === 'href' || $key === 'action' ) {
+ // Make it impossible to point a link or a form to a 'javascript:' URL. There's no good way
+ // to blacklist them because of very lax parsing, so instead we whitelist known-good
+ // protocols (and also accept protocol-less and protocol-relative links). There are no good
+ // reasons to ever use 'javascript:' URLs anyway.
+ $protocolWhitelist = array(
+ // Sourced from MediaWiki's $wgUrlProtocols
+ 'bitcoin', 'ftp', 'ftps', 'geo', 'git', 'gopher', 'http', 'https', 'irc', 'ircs',
+ 'magnet', 'mailto', 'mms', 'news', 'nntp', 'redis', 'sftp', 'sip', 'sips', 'sms', 'ssh',
+ 'svn', 'tel', 'telnet', 'urn', 'worldwind', 'xmpp',
+ );
+
+ // Protocol-relative URLs are handled really badly by parse_url()
+ if ( substr( $value, 0, 2 ) === '//' ) {
+ $url = "http:$value";
+ } else {
+ $url = $value;
+ }
+ // Must suppress warnings when the value is not a valid URL. parse_url() returns false then.
+ // @codingStandardsIgnoreStart
+ $scheme = @parse_url( $url, PHP_URL_SCHEME );
+ // @codingStandardsIgnoreEnd
+
+ if ( !( $scheme === null || in_array( strtolower( $scheme ), $protocolWhitelist ) ) ) {
+ throw new Exception( "Potentially unsafe '$key' attribute value. " .
+ "Scheme: '$scheme'; value: '$value'." );
+ }
+ }
+
+ // Use single-quotes around the attribute value in HTML, because
+ // some of the values might be JSON strings
+ // 1. Encode both single and double quotes (and other special chars)
+ $value = htmlspecialchars( $value, ENT_QUOTES );
+ // 2. Decode double quotes, for readability.
+ $value = str_replace( '&quot;', '"', $value );
+ // 3. Wrap attribute value in single quotes in the HTML.
+ $attributes .= ' ' . $key . "='" . $value . "'";
+ }
+
+ // Content
+ $content = '';
+ foreach ( $this->content as $part ) {
+ if ( is_string( $part ) ) {
+ $content .= htmlspecialchars( $part );
+ } elseif ( $part instanceof Tag || $part instanceof HtmlSnippet ) {
+ $content .= (string)$part;
+ }
+ }
+
+ if ( !preg_match( '/^[0-9a-zA-Z]+$/', $this->tag ) ) {
+ throw new Exception( 'Tag name must consist of only ASCII letters and numbers' );
+ }
+
+ // Tag
+ return '<' . $this->tag . $attributes . '>' . $content . '</' . $this->tag . '>';
+ }
+
+ /**
+ * Magic method implementation.
+ *
+ * PHP doesn't allow __toString to throw exceptions and will trigger a fatal error if it does.
+ * This is a wrapper around the real toString() to convert them to errors instead.
+ *
+ * @return string
+ */
+ public function __toString() {
+ try {
+ return $this->toString();
+ } catch ( Exception $ex ) {
+ trigger_error( (string)$ex, E_USER_ERROR );
+ return '';
+ }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/Theme.php b/vendor/oojs/oojs-ui/php/Theme.php
new file mode 100644
index 00000000..d36b6d82
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/Theme.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Theme logic.
+ *
+ * @abstract
+ */
+class Theme {
+
+ /* Members */
+
+ private static $singleton;
+
+ /* Static Methods */
+
+ public static function setSingleton( Theme $theme ) {
+ self::$singleton = $theme;
+ }
+
+ public static function singleton() {
+ if ( !self::$singleton ) {
+ throw new Exception( __METHOD__ . ' was called with no singleton theme set.' );
+ }
+
+ return self::$singleton;
+ }
+
+ /**
+ * Get a list of classes to be applied to a widget.
+ *
+ * The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or removes,
+ * otherwise state transitions will not work properly.
+ *
+ * @param Element $element Element for which to get classes
+ * @return array Categorized class names with `on` and `off` lists
+ */
+ public function getElementClasses( Element $element ) {
+ return array( 'on' => array(), 'off' => array() );
+ }
+
+ /**
+ * Update CSS classes provided by the theme.
+ *
+ * For elements with theme logic hooks, this should be called any time there's a state change.
+ *
+ * @param Element $element Element for which to update classes
+ * @return array Categorized class names with `on` and `off` lists
+ */
+ public function updateElementClasses( Element $element ) {
+ $classes = $this->getElementClasses( $element );
+
+ $element
+ ->removeClasses( $classes['off'] )
+ ->addClasses( $classes['on'] );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/Widget.php b/vendor/oojs/oojs-ui/php/Widget.php
new file mode 100644
index 00000000..04152aa5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/Widget.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * User interface control.
+ *
+ * @abstract
+ */
+class Widget extends Element {
+
+ /* Properties */
+
+ /**
+ * Disabled.
+ *
+ * @var boolean Widget is disabled
+ */
+ protected $disabled = false;
+
+ /* Methods */
+
+ /**
+ * @param array $config Configuration options
+ * @param boolean $config['disabled'] Disable (default: false)
+ */
+ public function __construct( array $config = array() ) {
+ // Initialize config
+ $config = array_merge( array( 'disabled' => false ), $config );
+
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Initialization
+ $this->addClasses( array( 'oo-ui-widget' ) );
+ $this->setDisabled( $config['disabled'] );
+ }
+
+ /**
+ * Check if the widget is disabled.
+ *
+ * @return boolean Button is disabled
+ */
+ public function isDisabled() {
+ return $this->disabled;
+ }
+
+ /**
+ * Set the disabled state of the widget.
+ *
+ * This should probably change the widgets' appearance and prevent it from being used.
+ *
+ * @param boolean $disabled Disable widget
+ * @chainable
+ */
+ public function setDisabled( $disabled ) {
+ $this->disabled = !!$disabled;
+ $this->toggleClasses( array( 'oo-ui-widget-disabled' ), $this->disabled );
+ $this->toggleClasses( array( 'oo-ui-widget-enabled' ), !$this->disabled );
+ $this->setAttributes( array( 'aria-disabled' => $this->disabled ? 'true' : 'false' ) );
+
+ return $this;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->disabled ) {
+ $config['disabled'] = $this->disabled;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/elements/ButtonElement.php b/vendor/oojs/oojs-ui/php/elements/ButtonElement.php
new file mode 100644
index 00000000..f9acf2d8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/elements/ButtonElement.php
@@ -0,0 +1,102 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Element with a button.
+ *
+ * Buttons are used for controls which can be clicked. They can be configured to use tab indexing
+ * and access keys for accessibility purposes.
+ *
+ * @abstract
+ */
+class ButtonElement extends ElementMixin {
+ /**
+ * Button is framed.
+ *
+ * @var boolean
+ */
+ protected $framed = false;
+
+ /**
+ * Button's access key.
+ *
+ * @var string
+ */
+ protected $accessKey = null;
+
+ public static $targetPropertyName = 'button';
+
+ /**
+ * @param Element $element Element being mixed into
+ * @param array $config Configuration options
+ * @param boolean $config['framed'] Render button with a frame (default: true)
+ * @param string $config['accessKey'] Button's access key
+ */
+ public function __construct( Element $element, array $config = array() ) {
+ // Parent constructor
+ $target = isset( $config['button'] ) ? $config['button'] : new Tag( 'a' );
+ parent::__construct( $element, $target, $config );
+
+ // Initialization
+ $this->element->addClasses( array( 'oo-ui-buttonElement' ) );
+ $this->target->addClasses( array( 'oo-ui-buttonElement-button' ) );
+ $this->toggleFramed( isset( $config['framed'] ) ? $config['framed'] : true );
+ $this->setAccessKey( isset( $config['accessKey'] ) ? $config['accessKey'] : null );
+ $this->target->setAttributes( array(
+ 'role' => 'button',
+ ) );
+ }
+
+ /**
+ * Toggle frame.
+ *
+ * @param boolean $framed Make button framed, omit to toggle
+ * @chainable
+ */
+ public function toggleFramed( $framed = null ) {
+ $this->framed = $framed !== null ? !!$framed : !$this->framed;
+ $this->element->toggleClasses( array( 'oo-ui-buttonElement-framed' ), $this->framed );
+ $this->element->toggleClasses( array( 'oo-ui-buttonElement-frameless' ), !$this->framed );
+ }
+
+ /**
+ * Check if button has a frame.
+ *
+ * @return boolean Button is framed
+ */
+ public function isFramed() {
+ return $this->framed;
+ }
+
+ /**
+ * Set access key.
+ *
+ * @param string $accessKey Button's access key, use empty string to remove
+ * @chainable
+ */
+ public function setAccessKey( $accessKey ) {
+ $accessKey = is_string( $accessKey ) && strlen( $accessKey ) ? $accessKey : null;
+
+ if ( $this->accessKey !== $accessKey ) {
+ if ( $accessKey !== null ) {
+ $this->target->setAttributes( array( 'accesskey' => $accessKey ) );
+ } else {
+ $this->target->removeAttributes( array( 'accesskey' ) );
+ }
+ $this->accessKey = $accessKey;
+ }
+
+ return $this;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->framed !== true ) {
+ $config['framed'] = $this->framed;
+ }
+ if ( $this->accessKey !== null ) {
+ $config['accessKey'] = $this->accessKey;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/elements/FlaggedElement.php b/vendor/oojs/oojs-ui/php/elements/FlaggedElement.php
new file mode 100644
index 00000000..bd5dc80d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/elements/FlaggedElement.php
@@ -0,0 +1,133 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Element with named flags that can be added, removed, listed and checked.
+ *
+ * A flag, when set, adds a CSS class on the `$element` by combining `oo-ui-flaggedElement-` with
+ * the flag name. Flags are primarily useful for styling.
+ *
+ * @abstract
+ */
+class FlaggedElement extends ElementMixin {
+ /**
+ * Flags.
+ *
+ * @var string
+ */
+ protected $flags = array();
+
+ public static $targetPropertyName = 'flagged';
+
+ /**
+ * @param Element $element Element being mixed into
+ * @param array $config Configuration options
+ * @param string|string[] $config['flags'] Flags describing importance and functionality, e.g.
+ * 'primary', 'safe', 'progressive', 'destructive' or 'constructive'
+ */
+ public function __construct( Element $element, array $config = array() ) {
+ // Parent constructor
+ $target = isset( $config['flagged'] ) ? $config['flagged'] : $element;
+ parent::__construct( $element, $target, $config );
+
+ // Initialization
+ $this->setFlags( isset( $config['flags'] ) ? $config['flags'] : null );
+ }
+
+ /**
+ * Check if a flag is set.
+ *
+ * @param string $flag Name of flag
+ * @return boolean Has flag
+ */
+ public function hasFlag( $flag ) {
+ return isset( $this->flags[$flag] );
+ }
+
+ /**
+ * Get the names of all flags set.
+ *
+ * @return string[] Flag names
+ */
+ public function getFlags() {
+ return array_keys( $this->flags );
+ }
+
+ /**
+ * Clear all flags.
+ *
+ * @chainable
+ */
+ public function clearFlags() {
+ $remove = array();
+ $classPrefix = 'oo-ui-flaggedElement-';
+
+ foreach ( $this->flags as $flag ) {
+ $remove[] = $classPrefix . $flag;
+ }
+
+ $this->target->removeClasses( $remove );
+ $this->flags = array();
+
+ return $this;
+ }
+
+ /**
+ * Add one or more flags.
+ *
+ * @param string|array $flags One or more flags to add, or an array keyed by flag name
+ * containing boolean set/remove instructions.
+ * @chainable
+ */
+ public function setFlags( $flags ) {
+ $add = array();
+ $remove = array();
+ $classPrefix = 'oo-ui-flaggedElement-';
+
+ if ( is_string( $flags ) ) {
+ // Set
+ if ( !isset( $this->flags[$flags] ) ) {
+ $this->flags[$flags] = true;
+ $add[] = $classPrefix . $flags;
+ }
+ } elseif ( is_array( $flags ) ) {
+ foreach ( $flags as $key => $value ) {
+ if ( is_numeric( $key ) ) {
+ // Set
+ if ( !isset( $this->flags[$value] ) ) {
+ $this->flags[$value] = true;
+ $add[] = $classPrefix . $value;
+ }
+ } else {
+ if ( $value ) {
+ // Set
+ if ( !isset( $this->flags[$key] ) ) {
+ $this->flags[$key] = true;
+ $add[] = $classPrefix . $key;
+ }
+ } else {
+ // Remove
+ if ( isset( $this->flags[$key] ) ) {
+ unset( $this->flags[$key] );
+ $remove[] = $classPrefix . $key;
+ }
+ }
+ }
+ }
+ }
+
+ $this->target
+ ->addClasses( $add )
+ ->removeClasses( $remove );
+
+ return $this;
+ }
+
+ public function getConfig( &$config ) {
+ if ( !empty( $this->flags ) ) {
+ $config['flags'] = $this->getFlags();
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/elements/GroupElement.php b/vendor/oojs/oojs-ui/php/elements/GroupElement.php
new file mode 100644
index 00000000..93d3c7a1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/elements/GroupElement.php
@@ -0,0 +1,129 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Element containing a sequence of child elements.
+ *
+ * @abstract
+ */
+class GroupElement extends ElementMixin {
+ /**
+ * List of items in the group.
+ *
+ * @var Element[]
+ */
+ protected $items = array();
+
+ public static $targetPropertyName = 'group';
+
+ /**
+ * @param Element $element Element being mixed into
+ * @param array $config Configuration options
+ */
+ public function __construct( Element $element, array $config = array() ) {
+ // Parent constructor
+ $target = isset( $config['group'] ) ? $config['group'] : new Tag( 'div' );
+ parent::__construct( $element, $target, $config );
+ }
+
+ /**
+ * Check if there are no items.
+ *
+ * @return boolean Group is empty
+ */
+ public function isEmpty() {
+ return !count( $this->items );
+ }
+
+ /**
+ * Get items.
+ *
+ * @return Element[] Items
+ */
+ public function getItems() {
+ return $this->items;
+ }
+
+ /**
+ * Add items.
+ *
+ * Adding an existing item will move it.
+ *
+ * @param Element[] $items Items
+ * @param number $index Index to insert items at
+ * @chainable
+ */
+ public function addItems( array $items, $index = null ) {
+ foreach ( $items as $item ) {
+ // Check if item exists then remove it first, effectively "moving" it
+ $currentIndex = array_search( $item, $this->items );
+ if ( $currentIndex !== false ) {
+ $this->removeItems( array( $item ) );
+ // Adjust index to compensate for removal
+ if ( $currentIndex < $index ) {
+ $index--;
+ }
+ }
+ // Add the item
+ $item->setElementGroup( $this );
+ }
+
+ if ( $index === null || $index < 0 || $index >= count( $this->items ) ) {
+ $this->items = array_merge( $this->items, $items );
+ } else {
+ array_splice( $this->items, $index, 0, $items );
+ }
+
+ // Update actual target element contents to reflect our list
+ $this->target->clearContent();
+ call_user_func_array( array( $this->target, 'appendContent' ), $this->items );
+
+ return $this;
+ }
+
+ /**
+ * Remove items.
+ *
+ * @param Element[] $items Items to remove
+ * @chainable
+ */
+ public function removeItems( $items ) {
+ foreach ( $items as $item ) {
+ $index = array_search( $item, $this->items );
+ if ( $index !== false ) {
+ $item->setElementGroup( null );
+ array_splice( $this->items, $index, 1 );
+ }
+ }
+
+ // Update actual target element contents to reflect our list
+ $this->target->clearContent();
+ call_user_func_array( array( $this->target, 'appendContent' ), $this->items );
+
+ return $this;
+ }
+
+ /**
+ * Clear all items.
+ *
+ * Items will be detached, not removed, so they can be used later.
+ *
+ * @chainable
+ */
+ public function clearItems() {
+ foreach ( $this->items as $item ) {
+ $item->setElementGroup( null );
+ }
+
+ $this->items = array();
+ $this->target->clearContent();
+
+ return $this;
+ }
+
+ public function getConfig( &$config ) {
+ $config['items'] = $this->items;
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/elements/IconElement.php b/vendor/oojs/oojs-ui/php/elements/IconElement.php
new file mode 100644
index 00000000..b6d27376
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/elements/IconElement.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Element containing an icon.
+ *
+ * Icons are graphics, about the size of normal text. They can be used to aid the user in locating
+ * a control or convey information in a more space efficient way. Icons should rarely be used
+ * without labels; such as in a toolbar where space is at a premium or within a context where the
+ * meaning is very clear to the user.
+ *
+ * @abstract
+ */
+class IconElement extends ElementMixin {
+ /**
+ * Symbolic icon name.
+ *
+ * @var string
+ */
+ protected $icon = null;
+
+ public static $targetPropertyName = 'icon';
+
+ /**
+ * @param Element $element Element being mixed into
+ * @param array $config Configuration options
+ * @param string $config['icon'] Symbolic icon name
+ */
+ public function __construct( Element $element, array $config = array() ) {
+ // Parent constructor
+ // FIXME 'iconElement' is a very stupid way to call '$icon'
+ $target = isset( $config['iconElement'] ) ? $config['iconElement'] : new Tag( 'span' );
+ parent::__construct( $element, $target, $config );
+
+ // Initialization
+ $this->target->addClasses( array( 'oo-ui-iconElement-icon' ) );
+ $this->setIcon( isset( $config['icon'] ) ? $config['icon'] : null );
+ }
+
+ /**
+ * Set icon name.
+ *
+ * @param string|null $icon Symbolic icon name
+ * @chainable
+ */
+ public function setIcon( $icon = null ) {
+ if ( $this->icon !== null ) {
+ $this->target->removeClasses( array( 'oo-ui-icon-' . $this->icon ) );
+ }
+ if ( $icon !== null ) {
+ $this->target->addClasses( array( 'oo-ui-icon-' . $icon ) );
+ }
+
+ $this->icon = $icon;
+ $this->element->toggleClasses( array( 'oo-ui-iconElement' ), (bool)$this->icon );
+
+ return $this;
+ }
+
+ /**
+ * Get icon name.
+ *
+ * @return string Icon name
+ */
+ public function getIcon() {
+ return $this->icon;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->icon !== null ) {
+ $config['icon'] = $this->icon;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/elements/IndicatorElement.php b/vendor/oojs/oojs-ui/php/elements/IndicatorElement.php
new file mode 100644
index 00000000..56238b6c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/elements/IndicatorElement.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Element containing an indicator.
+ *
+ * Indicators are graphics, smaller than normal text. They can be used to describe unique status or
+ * behavior. Indicators should only be used in exceptional cases; such as a button that opens a menu
+ * instead of performing an action directly, or an item in a list which has errors that need to be
+ * resolved.
+ *
+ * @abstract
+ */
+class IndicatorElement extends ElementMixin {
+ /**
+ * Symbolic indicator name
+ *
+ * @var string|null
+ */
+ protected $indicator = null;
+
+ public static $targetPropertyName = 'indicator';
+
+ /**
+ * @param Element $element Element being mixed into
+ * @param array $config Configuration options
+ * @param string $config['indicator'] Symbolic indicator name
+ */
+ public function __construct( Element $element, array $config = array() ) {
+ // Parent constructor
+ // FIXME 'indicatorElement' is a very stupid way to call '$indicator'
+ $target = isset( $config['indicatorElement'] )
+ ? $config['indicatorElement']
+ : new Tag( 'span' );
+ parent::__construct( $element, $target, $config );
+
+ // Initialization
+ $this->target->addClasses( array( 'oo-ui-indicatorElement-indicator' ) );
+ $this->setIndicator( isset( $config['indicator'] ) ? $config['indicator'] : null );
+ }
+
+ /**
+ * Set indicator name.
+ *
+ * @param string|null $indicator Symbolic name of indicator to use or null for no indicator
+ * @chainable
+ */
+ public function setIndicator( $indicator = null ) {
+ if ( $this->indicator !== null ) {
+ $this->target->removeClasses( array( 'oo-ui-indicator-' . $this->indicator ) );
+ }
+ if ( $indicator !== null ) {
+ $this->target->addClasses( array( 'oo-ui-indicator-' . $indicator ) );
+ }
+
+ $this->indicator = $indicator;
+ $this->element->toggleClasses( array( 'oo-ui-indicatorElement' ), (bool)$this->indicator );
+
+ return $this;
+ }
+
+ /**
+ * Get indicator name.
+ *
+ * @return string Symbolic name of indicator
+ */
+ public function getIndicator() {
+ return $this->indicator;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->indicator !== null ) {
+ $config['indicator'] = $this->indicator;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/elements/LabelElement.php b/vendor/oojs/oojs-ui/php/elements/LabelElement.php
new file mode 100644
index 00000000..d5cf7bee
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/elements/LabelElement.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Element containing a label.
+ *
+ * @abstract
+ */
+class LabelElement extends ElementMixin {
+ /**
+ * Label value.
+ *
+ * @var string|HtmlSnippet|null
+ */
+ protected $label = null;
+
+ public static $targetPropertyName = 'label';
+
+ /**
+ * @param Element $element Element being mixed into
+ * @param array $config Configuration options
+ * @param string|HtmlSnippet $config['label'] Label text
+ */
+ public function __construct( Element $element, array $config = array() ) {
+ // Parent constructor
+ // FIXME 'labelElement' is a very stupid way to call '$label'
+ $target = isset( $config['labelElement'] ) ? $config['labelElement'] : new Tag( 'span' );
+ parent::__construct( $element, $target, $config );
+
+ // Initialization
+ $this->target->addClasses( array( 'oo-ui-labelElement-label' ) );
+ $this->setLabel( isset( $config['label'] ) ? $config['label'] : null );
+ }
+
+ /**
+ * Set the label.
+ *
+ * An empty string will result in the label being hidden. A string containing only whitespace will
+ * be converted to a single `&nbsp;`.
+ *
+ * @param string|HtmlSnippet|null $label Label text
+ * @chainable
+ */
+ public function setLabel( $label ) {
+ $this->label = $label;
+
+ $this->target->clearContent();
+ if ( $this->label !== null ) {
+ if ( is_string( $this->label ) && $this->label !== '' && trim( $this->label ) === '' ) {
+ $this->target->appendContent( new HtmlSnippet( '&nbsp;' ) );
+ } else {
+ $this->target->appendContent( $label );
+ }
+ }
+
+ $this->element->toggleClasses( array( 'oo-ui-labelElement' ), !!$this->label );
+
+ return $this;
+ }
+
+ /**
+ * Get the label.
+ *
+ * @return string|HtmlSnippet|null Label text
+ */
+ public function getLabel() {
+ return $this->label;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->label !== null ) {
+ $config['label'] = $this->label;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/elements/TabIndexedElement.php b/vendor/oojs/oojs-ui/php/elements/TabIndexedElement.php
new file mode 100644
index 00000000..223b5371
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/elements/TabIndexedElement.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Element supporting "sequential focus navigation" using the 'tabindex' attribute.
+ *
+ * @abstract
+ */
+class TabIndexedElement extends ElementMixin {
+ /**
+ * Tab index value.
+ *
+ * @var number|null
+ */
+ protected $tabIndex = null;
+
+ public static $targetPropertyName = 'tabIndexed';
+
+ /**
+ * @param Element $element Element being mixed into
+ * @param array $config Configuration options
+ * @param number|null $config['tabIndex'] Tab index value. Use 0 to use default ordering, use -1 to
+ * prevent tab focusing, use null to suppress the `tabindex` attribute. (default: 0)
+ */
+ public function __construct( Element $element, array $config = array() ) {
+ // Parent constructor
+ $target = isset( $config['tabIndexed'] ) ? $config['tabIndexed'] : $element;
+ parent::__construct( $element, $target, $config );
+
+ // Initialization
+ $this->setTabIndex( isset( $config['tabIndex'] ) ? $config['tabIndex'] : 0 );
+ }
+
+ /**
+ * Set tab index value.
+ *
+ * @param number|null $tabIndex Tab index value or null for no tab index
+ * @chainable
+ */
+ public function setTabIndex( $tabIndex ) {
+ $tabIndex = is_numeric( $tabIndex ) ? $tabIndex : null;
+
+ if ( $this->tabIndex !== $tabIndex ) {
+ $this->tabIndex = $tabIndex;
+ $this->updateTabIndex();
+ }
+
+ return $this;
+ }
+
+ /**
+ * Update the tabIndex attribute, in case of changes to tabIndex or disabled
+ * state.
+ *
+ * @chainable
+ */
+ public function updateTabIndex() {
+ $disabled = $this->element->isDisabled();
+ if ( $this->tabIndex !== null ) {
+ $this->target->setAttributes( array(
+ // Do not index over disabled elements
+ 'tabindex' => $disabled ? -1 : $this->tabIndex,
+ // ChromeVox and NVDA do not seem to inherit this from parent elements
+ 'aria-disabled' => ( $disabled ? 'true' : 'false' )
+ ) );
+ } else {
+ $this->target->removeAttributes( array( 'tabindex', 'aria-disabled' ) );
+ }
+ return $this;
+ }
+
+ /**
+ * Get tab index value.
+ *
+ * @return number|null Tab index value
+ */
+ public function getTabIndex() {
+ return $this->tabIndex;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->tabIndex !== 0 ) {
+ $config['tabIndex'] = $this->tabIndex;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/elements/TitledElement.php b/vendor/oojs/oojs-ui/php/elements/TitledElement.php
new file mode 100644
index 00000000..5f1317c4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/elements/TitledElement.php
@@ -0,0 +1,74 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Element with a title.
+ *
+ * Titles are rendered by the browser and are made visible when hovering the element. Titles are
+ * not visible on touch devices.
+ *
+ * @abstract
+ */
+class TitledElement extends ElementMixin {
+ /**
+ * Title text.
+ *
+ * @var string
+ */
+ protected $title = null;
+
+ public static $targetPropertyName = 'titled';
+
+ /**
+ * @param Element $element Element being mixed into
+ * @param array $config Configuration options
+ * @param string $config['title'] Title. If not provided, the static property 'title' is used.
+ */
+ public function __construct( Element $element, array $config = array() ) {
+ // Parent constructor
+ $target = isset( $config['titled'] ) ? $config['titled'] : $element;
+ parent::__construct( $element, $target, $config );
+
+ // Initialization
+ $this->setTitle(
+ isset( $config['title'] ) ? $config['title'] :
+ ( isset( $element::$title ) ? $element::$title : null )
+ );
+ }
+
+ /**
+ * Set title.
+ *
+ * @param string|null $title Title text or null for no title
+ * @chainable
+ */
+ public function setTitle( $title ) {
+ if ( $this->title !== $title ) {
+ $this->title = $title;
+ if ( $title !== null ) {
+ $this->target->setAttributes( array( 'title' => $title ) );
+ } else {
+ $this->target->removeAttributes( array( 'title' ) );
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Get title.
+ *
+ * @return string Title string
+ */
+ public function getTitle() {
+ return $this->title;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->title !== null ) {
+ $config['title'] = $this->title;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/layouts/FieldLayout.php b/vendor/oojs/oojs-ui/php/layouts/FieldLayout.php
new file mode 100644
index 00000000..ef0d4c6c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/layouts/FieldLayout.php
@@ -0,0 +1,140 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Layout made of a field and optional label.
+ *
+ * Available label alignment modes include:
+ * - left: Label is before the field and aligned away from it, best for when the user will be
+ * scanning for a specific label in a form with many fields
+ * - right: Label is before the field and aligned toward it, best for forms the user is very
+ * familiar with and will tab through field checking quickly to verify which field they are in
+ * - top: Label is before the field and above it, best for when the user will need to fill out all
+ * fields from top to bottom in a form with few fields
+ * - inline: Label is after the field and aligned toward it, best for small boolean fields like
+ * checkboxes or radio buttons
+ */
+class FieldLayout extends Layout {
+
+ /**
+ * Alignment.
+ *
+ * @var string
+ */
+ protected $align;
+
+ /**
+ * Field widget to be laid out.
+ *
+ * @var Widget
+ */
+ protected $fieldWidget;
+
+ private $field, $body, $help;
+
+ /**
+ * @param Widget $fieldWidget Field widget
+ * @param array $config Configuration options
+ * @param string $config['align'] Alignment mode, either 'left', 'right', 'top' or 'inline'
+ * (default: 'left')
+ * @param string $config['help'] Explanatory text shown as a '?' icon.
+ */
+ public function __construct( $fieldWidget, array $config = array() ) {
+ // Allow passing positional parameters inside the config array
+ if ( is_array( $fieldWidget ) && isset( $fieldWidget['fieldWidget'] ) ) {
+ $config = $fieldWidget;
+ $fieldWidget = $config['fieldWidget'];
+ }
+
+ $hasInputWidget = $fieldWidget instanceof InputWidget;
+
+ // Config initialization
+ $config = array_merge( array( 'align' => 'left' ), $config );
+
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Properties
+ $this->fieldWidget = $fieldWidget;
+ $this->field = new Tag( 'div' );
+ $this->body = new Tag( $hasInputWidget ? 'label' : 'div' );
+ if ( isset( $config['help'] ) ) {
+ $this->help = new ButtonWidget( array(
+ 'classes' => array( 'oo-ui-fieldLayout-help' ),
+ 'framed' => false,
+ 'icon' => 'info',
+ 'title' => $config['help'],
+ ) );
+ } else {
+ $this->help = '';
+ }
+
+ // Mixins
+ $this->mixin( new LabelElement( $this, $config ) );
+
+ // Initialization
+ $this
+ ->addClasses( array( 'oo-ui-fieldLayout' ) )
+ ->appendContent( $this->help, $this->body );
+ $this->body->addClasses( array( 'oo-ui-fieldLayout-body' ) );
+ $this->field
+ ->addClasses( array( 'oo-ui-fieldLayout-field' ) )
+ ->toggleClasses( array( 'oo-ui-fieldLayout-disable' ), $this->fieldWidget->isDisabled() )
+ ->appendContent( $this->fieldWidget );
+
+ $this->setAlignment( $config['align'] );
+ }
+
+ /**
+ * Get the field.
+ *
+ * @return Widget Field widget
+ */
+ public function getField() {
+ return $this->fieldWidget;
+ }
+
+ /**
+ * Set the field alignment mode.
+ *
+ * @param string $value Alignment mode, either 'left', 'right', 'top' or 'inline'
+ * @chainable
+ */
+ protected function setAlignment( $value ) {
+ if ( $value !== $this->align ) {
+ // Default to 'left'
+ if ( !in_array( $value, array( 'left', 'right', 'top', 'inline' ) ) ) {
+ $value = 'left';
+ }
+ // Reorder elements
+ $this->body->clearContent();
+ if ( $value === 'inline' ) {
+ $this->body->appendContent( $this->field, $this->label );
+ } else {
+ $this->body->appendContent( $this->label, $this->field );
+ }
+ // Set classes. The following classes can be used here:
+ // * oo-ui-fieldLayout-align-left
+ // * oo-ui-fieldLayout-align-right
+ // * oo-ui-fieldLayout-align-top
+ // * oo-ui-fieldLayout-align-inline
+ if ( $this->align ) {
+ $this->removeClasses( array( 'oo-ui-fieldLayout-align-' . $this->align ) );
+ }
+ $this->addClasses( array( 'oo-ui-fieldLayout-align-' . $value ) );
+ $this->align = $value;
+ }
+
+ return $this;
+ }
+
+ public function getConfig( &$config ) {
+ $config['fieldWidget'] = $this->fieldWidget;
+ $config['align'] = $this->align;
+ if ( $this->help !== '' ) {
+ $config['help'] = $this->help->getTitle();
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/layouts/FieldsetLayout.php b/vendor/oojs/oojs-ui/php/layouts/FieldsetLayout.php
new file mode 100644
index 00000000..f9faa353
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/layouts/FieldsetLayout.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Layout made of a fieldset and optional legend.
+ *
+ * Just add FieldLayout items.
+ */
+class FieldsetLayout extends Layout {
+ /**
+ * @param array $config Configuration options
+ * @param FieldLayout[] $config['items'] Items to add
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Mixins
+ $this->mixin( new IconElement( $this, $config ) );
+ $this->mixin( new LabelElement( $this, $config ) );
+ $this->mixin( new GroupElement( $this, $config ) );
+
+ // Initialization
+ $this
+ ->addClasses( array( 'oo-ui-fieldsetLayout' ) )
+ ->prependContent( $this->icon, $this->label, $this->group );
+ if ( isset( $config['items'] ) ) {
+ $this->addItems( $config['items'] );
+ }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/layouts/FormLayout.php b/vendor/oojs/oojs-ui/php/layouts/FormLayout.php
new file mode 100644
index 00000000..ebeb89de
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/layouts/FormLayout.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Layout with an HTML form.
+ */
+class FormLayout extends Layout {
+
+ /* Static properties */
+
+ public static $tagName = 'form';
+
+ /**
+ * @param array $config Configuration options
+ * @param string $config['method'] HTML form `method` attribute
+ * @param string $config['action'] HTML form `action` attribute
+ * @param string $config['enctype'] HTML form `enctype` attribute
+ * @param FieldsetLayout[] $config['items'] Items to add
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Mixins
+ $this->mixin( new GroupElement( $this, array_merge( $config, array( 'group' => $this ) ) ) );
+
+ // Initialization
+ $attributeWhitelist = array( 'method', 'action', 'enctype' );
+ $this
+ ->addClasses( array( 'oo-ui-formLayout' ) )
+ ->setAttributes( array_intersect_key( $config, array_flip( $attributeWhitelist ) ) );
+ if ( isset( $config['items'] ) ) {
+ $this->addItems( $config['items'] );
+ }
+ }
+
+ public function getConfig( &$config ) {
+ foreach ( array( 'method', 'action', 'enctype' ) as $attr ) {
+ $value = $this->getAttribute( $attr );
+ if ( $value !== null ) {
+ $config[$attr] = $value;
+ }
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/layouts/PanelLayout.php b/vendor/oojs/oojs-ui/php/layouts/PanelLayout.php
new file mode 100644
index 00000000..64931374
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/layouts/PanelLayout.php
@@ -0,0 +1,61 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Layout that expands to cover the entire area of its parent, with optional scrolling and padding.
+ */
+class PanelLayout extends Layout {
+ /**
+ * @param array $config Configuration options
+ * @param boolean $config['scrollable'] Allow vertical scrolling (default: false)
+ * @param boolean $config['padded'] Pad the content from the edges (default: false)
+ * @param boolean $config['expanded'] Expand size to fill the entire parent element
+ * (default: true)
+ * @param boolean $config['framed'] Wrap in a frame to visually separate from outside content
+ * (default: false)
+ */
+ public function __construct( array $config = array() ) {
+ // Config initialization
+ $config = array_merge( array(
+ 'scrollable' => false,
+ 'padded' => false,
+ 'expanded' => true,
+ 'framed' => false,
+ ), $config );
+
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Initialization
+ $this->addClasses( array( 'oo-ui-panelLayout' ) );
+ if ( $config['scrollable'] ) {
+ $this->addClasses( array( 'oo-ui-panelLayout-scrollable' ) );
+ }
+ if ( $config['padded'] ) {
+ $this->addClasses( array( 'oo-ui-panelLayout-padded' ) );
+ }
+ if ( $config['expanded'] ) {
+ $this->addClasses( array( 'oo-ui-panelLayout-expanded' ) );
+ }
+ if ( $config['framed'] ) {
+ $this->addClasses( array( 'oo-ui-panelLayout-framed' ) );
+ }
+ }
+ public function getConfig( &$config ) {
+ if ( $this->hasClass( 'oo-ui-panelLayout-scrollable' ) ) {
+ $config['scrollable'] = true;
+ }
+ if ( $this->hasClass( 'oo-ui-panelLayout-padded' ) ) {
+ $config['padded'] = true;
+ }
+ if ( !$this->hasClass( 'oo-ui-panelLayout-expanded' ) ) {
+ $config['expanded'] = false;
+ }
+ if ( $this->hasClass( 'oo-ui-panelLayout-framed' ) ) {
+ $config['framed'] = true;
+ }
+ $config['content'] = $this->content;
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/themes/ApexTheme.php b/vendor/oojs/oojs-ui/php/themes/ApexTheme.php
new file mode 100644
index 00000000..e812736e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/themes/ApexTheme.php
@@ -0,0 +1,6 @@
+<?php
+
+namespace OOUI;
+
+class ApexTheme extends Theme {
+}
diff --git a/vendor/oojs/oojs-ui/php/themes/MediaWikiTheme.php b/vendor/oojs/oojs-ui/php/themes/MediaWikiTheme.php
new file mode 100644
index 00000000..86e4c353
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/themes/MediaWikiTheme.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace OOUI;
+
+class MediaWikiTheme extends Theme {
+
+ /* Methods */
+
+ public function getElementClasses( Element $element ) {
+ $variants = array(
+ 'warning' => false,
+ 'invert' => false,
+ 'progressive' => false,
+ 'constructive' => false,
+ 'destructive' => false
+ );
+
+ // Parent method
+ $classes = parent::getElementClasses( $element );
+
+ if ( $element->supports( array( 'hasFlag' ) ) ) {
+ $isFramed = $element->supports( array( 'isFramed' ) ) && $element->isFramed();
+ if ( $isFramed && ( $element->isDisabled() || $element->hasFlag( 'primary' ) ) ) {
+ $variants['invert'] = true;
+ } else {
+ $variants['progressive'] = $element->hasFlag( 'progressive' );
+ $variants['constructive'] = $element->hasFlag( 'constructive' );
+ $variants['destructive'] = $element->hasFlag( 'destructive' );
+ $variants['warning'] = $element->hasFlag( 'warning' );
+ }
+ }
+
+ foreach ( $variants as $variant => $toggle ) {
+ $classes[$toggle ? 'on' : 'off'][] = 'oo-ui-image-' . $variant;
+ }
+
+ return $classes;
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/ButtonGroupWidget.php b/vendor/oojs/oojs-ui/php/widgets/ButtonGroupWidget.php
new file mode 100644
index 00000000..79d3aaa1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/ButtonGroupWidget.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Group widget for multiple related buttons.
+ *
+ * Use together with ButtonWidget.
+ */
+class ButtonGroupWidget extends Widget {
+ /**
+ * @param array $config Configuration options
+ * @param ButtonWidget[] $config['items'] Buttons to add
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Mixins
+ $this->mixin( new GroupElement( $this, array_merge( $config, array( 'group' => $this ) ) ) );
+
+ // Initialization
+ $this->addClasses( array( 'oo-ui-buttonGroupWidget' ) );
+ if ( isset( $config['items'] ) ) {
+ $this->addItems( $config['items'] );
+ }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/ButtonInputWidget.php b/vendor/oojs/oojs-ui/php/widgets/ButtonInputWidget.php
new file mode 100644
index 00000000..b3bcb63b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/ButtonInputWidget.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * A button that is an input widget. Intended to be used within a FormLayout.
+ */
+class ButtonInputWidget extends InputWidget {
+ /* Properties */
+
+ /**
+ * Whether to use `<input/>` rather than `<button/>`.
+ *
+ * @var boolean
+ */
+ protected $useInputTag;
+
+ private $labelElementMixin;
+
+ /**
+ * @param array $config Configuration options
+ * @param string $config['type'] HTML tag `type` attribute, may be 'button', 'submit' or 'reset'
+ * (default: 'button')
+ * @param boolean $config['useInputTag'] Whether to use `<input/>` rather than `<button/>`. Only
+ * useful if you need IE 6 support in a form with multiple buttons. If you use this option,
+ * icons and indicators will not be displayed, it won't be possible to have a non-plaintext
+ * label, and it won't be possible to set a value (which will internally become identical to the
+ * label). (default: false)
+ */
+ public function __construct( array $config = array() ) {
+ // Configuration initialization
+ $config = array_merge( array( 'type' => 'button', 'useInputTag' => false ), $config );
+
+ // Properties (must be set before parent constructor, which calls setValue())
+ $this->useInputTag = $config['useInputTag'];
+
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Mixins
+ $this->mixin( new ButtonElement( $this,
+ array_merge( $config, array( 'button' => $this->input ) ) ) );
+ $this->mixin( new IconElement( $this, $config ) );
+ $this->mixin( new IndicatorElement( $this, $config ) );
+ // HACK: We need to have access to the mixin to override the setLabel() method
+ $this->mixin( $this->labelElementMixin = new LabelElement( $this, $config ) );
+ $this->mixin( new TitledElement( $this,
+ array_merge( $config, array( 'titled' => $this->input ) ) ) );
+
+ // Initialization
+ if ( !$config['useInputTag'] ) {
+ $this->input->appendContent( $this->icon, $this->label, $this->indicator );
+ }
+
+ // HACK: This is done in LabelElement mixin, but doesn't call our overridden method because of
+ // how we implement mixins. Switching to traits will fix that.
+ $this->setLabel( isset( $config['label'] ) ? $config['label'] : null );
+
+ $this->addClasses( array( 'oo-ui-buttonInputWidget' ) );
+ }
+
+ protected function getInputElement( $config ) {
+ $input = new Tag( $config['useInputTag'] ? 'input' : 'button' );
+ $input->setAttributes( array( 'type' => $config['type'] ) );
+ return $input;
+ }
+
+ /**
+ * Set label value.
+ *
+ * Overridden to support setting the 'value' of `<input/>` elements.
+ *
+ * @param string|null $label Label text
+ * @chainable
+ */
+ public function setLabel( $label ) {
+ $this->labelElementMixin->setLabel( $label );
+
+ if ( $this->useInputTag ) {
+ // Discard non-plaintext labels
+ $label = is_string( $label ) ? $label : '';
+ $this->input->setValue( $label );
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the value of the input.
+ *
+ * Overridden to disable for `<input/>` elements, which have value identical to the label.
+ *
+ * @param string $value New value
+ * @chainable
+ */
+ public function setValue( $value ) {
+ if ( !$this->useInputTag ) {
+ parent::setValue( $value );
+ }
+ return $this;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->useInputTag ) {
+ $config['useInputTag'] = true;
+ }
+ $config['type'] = $this->input->getAttribute( 'type' );
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/ButtonWidget.php b/vendor/oojs/oojs-ui/php/widgets/ButtonWidget.php
new file mode 100644
index 00000000..f26608b1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/ButtonWidget.php
@@ -0,0 +1,166 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Generic widget for buttons.
+ */
+class ButtonWidget extends Widget {
+
+ /**
+ * Hyperlink to visit when clicked.
+ *
+ * @var string
+ */
+ protected $href = null;
+
+ /**
+ * Target to open hyperlink in.
+ *
+ * @var string
+ */
+ protected $target = null;
+
+ /**
+ * Search engine traversal hint.
+ *
+ * True if search engines should avoid following this hyperlink.
+ *
+ * @var boolean
+ */
+ protected $noFollow = true;
+
+ /**
+ * @param array $config Configuration options
+ * @param string $config['href'] Hyperlink to visit when clicked
+ * @param string $config['target'] Target to open hyperlink in
+ * @param boolean $config['noFollow'] Search engine traversal hint (default: true)
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Mixins
+ $this->mixin( new ButtonElement( $this, $config ) );
+ $this->mixin( new IconElement( $this, $config ) );
+ $this->mixin( new IndicatorElement( $this, $config ) );
+ $this->mixin( new LabelElement( $this, $config ) );
+ $this->mixin( new TitledElement( $this,
+ array_merge( $config, array( 'titled' => $this->button ) ) ) );
+ $this->mixin( new FlaggedElement( $this, $config ) );
+ $this->mixin( new TabIndexedElement( $this,
+ array_merge( $config, array( 'tabIndexed' => $this->button ) ) ) );
+
+ // Initialization
+ $this->button->appendContent( $this->icon, $this->label, $this->indicator );
+ $this
+ ->addClasses( array( 'oo-ui-buttonWidget' ) )
+ ->appendContent( $this->button );
+
+ $this->setHref( isset( $config['href'] ) ? $config['href'] : null );
+ $this->setTarget( isset( $config['target'] ) ? $config['target'] : null );
+ $this->setNoFollow( isset( $config['noFollow'] ) ? $config['noFollow'] : true );
+ }
+
+ /**
+ * Get hyperlink location.
+ *
+ * @return string Hyperlink location
+ */
+ public function getHref() {
+ return $this->href;
+ }
+
+ /**
+ * Get hyperlink target.
+ *
+ * @return string Hyperlink target
+ */
+ public function getTarget() {
+ return $this->target;
+ }
+
+ /**
+ * Get search engine traversal hint.
+ *
+ * @return boolean Whether search engines should avoid traversing this hyperlink
+ */
+ public function getNoFollow() {
+ return $this->noFollow;
+ }
+
+ /**
+ * Set hyperlink location.
+ *
+ * @param string|null $href Hyperlink location, null to remove
+ */
+ public function setHref( $href ) {
+ $this->href = is_string( $href ) ? $href : null;
+
+ $this->updateHref();
+
+ return $this;
+ }
+
+ /**
+ * Update the href attribute, in case of changes to href or disabled
+ * state.
+ *
+ * @chainable
+ */
+ public function updateHref() {
+ if ( $this->href !== null && !$this->isDisabled() ) {
+ $this->button->setAttributes( array( 'href' => $this->href ) );
+ } else {
+ $this->button->removeAttributes( array( 'href' ) );
+ }
+ return $this;
+ }
+
+ /**
+ * Set hyperlink target.
+ *
+ * @param string|null $target Hyperlink target, null to remove
+ */
+ public function setTarget( $target ) {
+ $this->target = is_string( $target ) ? $target : null;
+
+ if ( $this->target !== null ) {
+ $this->button->setAttributes( array( 'target' => $target ) );
+ } else {
+ $this->button->removeAttributes( array( 'target' ) );
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set search engine traversal hint.
+ *
+ * @param boolean $noFollow True if search engines should avoid traversing this hyperlink
+ */
+ public function setNoFollow( $noFollow ) {
+ $this->noFollow = is_bool( $noFollow ) ? $noFollow : true;
+
+ if ( $this->noFollow ) {
+ $this->button->setAttributes( array( 'rel' => 'nofollow' ) );
+ } else {
+ $this->button->removeAttributes( array( 'rel' ) );
+ }
+
+ return $this;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->href !== null ) {
+ $config['href'] = $this->href;
+ }
+ if ( $this->target !== null ) {
+ $config['target'] = $this->target;
+ }
+ if ( $this->noFollow !== true ) {
+ $config['noFollow'] = $this->noFollow;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/CheckboxInputWidget.php b/vendor/oojs/oojs-ui/php/widgets/CheckboxInputWidget.php
new file mode 100644
index 00000000..bda09c66
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/CheckboxInputWidget.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Checkbox input widget.
+ */
+class CheckboxInputWidget extends InputWidget {
+
+ /* Properties */
+
+ /**
+ * Whether the checkbox is selected.
+ *
+ * @var boolean
+ */
+ protected $selected;
+
+ /**
+ * @param array $config Configuration options
+ * @param boolean $config['selected'] Whether the checkbox is initially selected
+ * (default: false)
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Initialization
+ $this->addClasses( array( 'oo-ui-checkboxInputWidget' ) );
+ $this->setSelected( isset( $config['selected'] ) ? $config['selected'] : false );
+ }
+
+ protected function getInputElement( $config ) {
+ $input = new Tag( 'input' );
+ $input->setAttributes( array( 'type' => 'checkbox' ) );
+ return $input;
+ }
+
+ /**
+ * Set selection state of this checkbox.
+ *
+ * @param boolean $state Whether the checkbox is selected
+ * @chainable
+ */
+ public function setSelected( $state ) {
+ $this->selected = (bool)$state;
+ if ( $this->selected ) {
+ $this->input->setAttributes( array( 'checked' => 'checked' ) );
+ } else {
+ $this->input->removeAttributes( array( 'checked' ) );
+ }
+ return $this;
+ }
+
+ /**
+ * Check if this checkbox is selected.
+ *
+ * @return boolean Checkbox is selected
+ */
+ public function isSelected() {
+ return $this->selected;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->selected ) {
+ $config['selected'] = $this->selected;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/DropdownInputWidget.php b/vendor/oojs/oojs-ui/php/widgets/DropdownInputWidget.php
new file mode 100644
index 00000000..ae541a66
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/DropdownInputWidget.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Dropdown input widget, wrapping a `<select>` element. Intended to be used within a
+ * OO.ui.FormLayout.
+ */
+class DropdownInputWidget extends InputWidget {
+
+ /**
+ * HTML `<option>` tags for this widget.
+ * @var Tag[]
+ */
+ protected $options = array();
+
+ /**
+ * @param array $config Configuration options
+ * @param array[] $config['options'] Array of menu options in the format
+ * `array( 'data' => …, 'label' => … )`
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Initialization
+ $this->setOptions( isset( $config['options'] ) ? $config['options'] : array() );
+ $this->addClasses( array( 'oo-ui-dropdownInputWidget' ) );
+ }
+
+ protected function getInputElement( $config ) {
+ return new Tag( 'select' );
+ }
+
+ public function setValue( $value ) {
+ $this->value = $this->cleanUpValue( $value );
+ foreach ( $this->options as &$opt ) {
+ if ( $opt->getAttribute( 'value' ) === $this->value ) {
+ $opt->setAttributes( array( 'selected' => 'selected' ) );
+ } else {
+ $opt->removeAttributes( array( 'selected' ) );
+ }
+ }
+ return $this;
+ }
+
+
+ /**
+ * Set the options available for this input.
+ *
+ * @param array[] $options Array of menu options in the format
+ * `array( 'data' => …, 'label' => … )`
+ * @chainable
+ */
+ public function setOptions( $options ) {
+ $value = $this->getValue();
+ $isValueAvailable = false;
+ $this->options = array();
+
+ // Rebuild the dropdown menu
+ $this->input->clearContent();
+ foreach ( $options as $opt ) {
+ $option = new Tag( 'option' );
+ $option->setAttributes( array( 'value' => $opt['data'] ) );
+ $option->appendContent( isset( $opt['label'] ) ? $opt['label'] : $opt['data'] );
+
+ if ( $value === $opt['data'] ) {
+ $isValueAvailable = true;
+ }
+
+ $this->options[] = $option;
+ $this->input->appendContent( $option );
+ }
+
+ // Restore the previous value, or reset to something sensible
+ if ( $isValueAvailable ) {
+ // Previous value is still available
+ $this->setValue( $value );
+ } else {
+ // No longer valid, reset
+ if ( count( $options ) ) {
+ $this->setValue( $options[0]['data'] );
+ }
+ }
+
+ return $this;
+ }
+
+ public function getConfig( &$config ) {
+ $o = array();
+ foreach ( $this->options as $option ) {
+ $label = $option->content[0];
+ $data = $option->getAttribute( 'value' );
+ $o[] = array( 'data' => $data, 'label' => $label );
+ }
+ $config['options'] = $o;
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/IconWidget.php b/vendor/oojs/oojs-ui/php/widgets/IconWidget.php
new file mode 100644
index 00000000..f8273f37
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/IconWidget.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Icon widget.
+ *
+ * See IconElement for more information.
+ */
+class IconWidget extends Widget {
+
+ /* Static properties */
+
+ public static $tagName = 'span';
+
+ /**
+ * @param array $config Configuration options
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Mixins
+ $this->mixin( new IconElement( $this,
+ array_merge( $config, array( 'iconElement' => $this ) ) ) );
+ $this->mixin( new TitledElement( $this,
+ array_merge( $config, array( 'titled' => $this ) ) ) );
+ $this->mixin( new FlaggedElement( $this,
+ array_merge( $config, array( 'flagged' => $this ) ) ) );
+
+ // Initialization
+ $this->addClasses( array( 'oo-ui-iconWidget' ) );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/IndicatorWidget.php b/vendor/oojs/oojs-ui/php/widgets/IndicatorWidget.php
new file mode 100644
index 00000000..01f2055d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/IndicatorWidget.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Indicator widget.
+ *
+ * See IndicatorElement for more information.
+ */
+class IndicatorWidget extends Widget {
+
+ /* Static properties */
+
+ public static $tagName = 'span';
+
+ /**
+ * @param array $config Configuration options
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Mixins
+ $this->mixin( new IndicatorElement( $this,
+ array_merge( $config, array( 'indicatorElement' => $this ) ) ) );
+ $this->mixin( new TitledElement( $this,
+ array_merge( $config, array( 'titled' => $this ) ) ) );
+
+ // Initialization
+ $this->addClasses( array( 'oo-ui-indicatorWidget' ) );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/InputWidget.php b/vendor/oojs/oojs-ui/php/widgets/InputWidget.php
new file mode 100644
index 00000000..234d3145
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/InputWidget.php
@@ -0,0 +1,144 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Base class for input widgets.
+ *
+ * @abstract
+ */
+class InputWidget extends Widget {
+
+ /* Properties */
+
+ /**
+ * Input element.
+ *
+ * @var Tag
+ */
+ protected $input;
+
+ /**
+ * Input value.
+ *
+ * @var string
+ */
+ protected $value = '';
+
+ /**
+ * @param array $config Configuration options
+ * @param string $config['name'] HTML input name (default: '')
+ * @param string $config['value'] Input value (default: '')
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Properties
+ $this->input = $this->getInputElement( $config );
+
+ // Mixins
+ $this->mixin( new FlaggedElement( $this,
+ array_merge( $config, array( 'flagged' => $this ) ) ) );
+ $this->mixin( new TabIndexedElement( $this,
+ array_merge( $config, array( 'tabIndexed' => $this->input ) ) ) );
+
+ // Initialization
+ if ( isset( $config['name'] ) ) {
+ $this->input->setAttributes( array( 'name' => $config['name'] ) );
+ }
+ if ( $this->isDisabled() ) {
+ $this->input->setAttributes( array( 'disabled' => 'disabled' ) );
+ }
+ $this
+ ->addClasses( array( 'oo-ui-inputWidget' ) )
+ ->appendContent( $this->input );
+ $this->appendContent( new Tag( 'span' ) );
+ $this->setValue( isset( $config['value'] ) ? $config['value'] : null );
+ }
+
+ /**
+ * Get input element.
+ *
+ * @param array $config Configuration options
+ * @return Tag Input element
+ */
+ protected function getInputElement( $config ) {
+ return new Tag( 'input' );
+ }
+
+ /**
+ * Get the value of the input.
+ *
+ * @return string Input value
+ */
+ public function getValue() {
+ return $this->value;
+ }
+
+ /**
+ * Sets the direction of the current input, either RTL or LTR
+ *
+ * @param boolean $isRTL
+ */
+ public function setRTL( $isRTL ) {
+ if ( $isRTL ) {
+ $this->input->removeClasses( array( 'oo-ui-ltr' ) );
+ $this->input->addClasses( array( 'oo-ui-rtl' ) );
+ } else {
+ $this->input->removeClasses( array( 'oo-ui-rtl' ) );
+ $this->input->addClasses( array( 'oo-ui-ltr' ) );
+ }
+ }
+
+ /**
+ * Set the value of the input.
+ *
+ * @param string $value New value
+ * @chainable
+ */
+ public function setValue( $value ) {
+ $this->value = $this->cleanUpValue( $value );
+ $this->input->setValue( $this->value );
+ return $this;
+ }
+
+ /**
+ * Clean up incoming value.
+ *
+ * Ensures value is a string, and converts null to empty string.
+ *
+ * @param string $value Original value
+ * @return string Cleaned up value
+ */
+ protected function cleanUpValue( $value ) {
+ if ( $value === null ) {
+ return '';
+ } else {
+ return (string)$value;
+ }
+ }
+
+ public function setDisabled( $state ) {
+ parent::setDisabled( $state );
+ if ( isset( $this->input ) ) {
+ if ( $this->isDisabled() ) {
+ $this->input->setAttributes( array( 'disabled' => 'disabled' ) );
+ } else {
+ $this->input->removeAttributes( array( 'disabled' ) );
+ }
+ }
+ return $this;
+ }
+
+ public function getConfig( &$config ) {
+ $name = $this->input->getAttribute( 'name' );
+ if ( $name !== null ) {
+ $config['name'] = $name;
+ }
+ if ( $this->value !== '' ) {
+ $config['value'] = $this->value;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/LabelWidget.php b/vendor/oojs/oojs-ui/php/widgets/LabelWidget.php
new file mode 100644
index 00000000..b59a5f25
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/LabelWidget.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Label widget.
+ */
+class LabelWidget extends Widget {
+
+ /* Static properties */
+
+ public static $tagName = 'span';
+
+ /* Properties */
+
+ /**
+ * Associated input element.
+ *
+ * @var InputWidget|null
+ */
+ protected $input;
+
+ /**
+ * @param array $config Configuration options
+ * @param InputWidget $config['input'] Input widget this label is for
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Mixins
+ $this->mixin( new LabelElement( $this,
+ array_merge( $config, array( 'labelElement' => $this ) ) ) );
+
+ // Properties
+ $this->input = isset( $config['input'] ) ? $config['input'] : null;
+
+ // Initialization
+ $this->addClasses( array( 'oo-ui-labelWidget' ) );
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->input !== null ) {
+ $config['input'] = $this->input;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/RadioInputWidget.php b/vendor/oojs/oojs-ui/php/widgets/RadioInputWidget.php
new file mode 100644
index 00000000..26da29d0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/RadioInputWidget.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Radio input widget.
+ */
+class RadioInputWidget extends InputWidget {
+
+ /**
+ * @param array $config Configuration options
+ * @param boolean $config['selected'] Whether the radio button is initially selected
+ * (default: false)
+ */
+ public function __construct( array $config = array() ) {
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Initialization
+ $this->addClasses( array( 'oo-ui-radioInputWidget' ) );
+ $this->setSelected( isset( $config['selected'] ) ? $config['selected'] : false );
+ }
+
+ protected function getInputElement( $config ) {
+ $input = new Tag( 'input' );
+ $input->setAttributes( array( 'type' => 'radio' ) );
+ return $input;
+ }
+
+ /**
+ * Set selection state of this radio button.
+ *
+ * @param boolean $state Whether the button is selected
+ */
+ public function setSelected( $state ) {
+ // RadioInputWidget doesn't track its state.
+ if ( $state ) {
+ $this->input->setAttributes( array( 'checked' => 'checked' ) );
+ } else {
+ $this->input->removeAttributes( array( 'checked' ) );
+ }
+ return $this;
+ }
+
+ /**
+ * Check if this radio button is selected.
+ *
+ * @return boolean Radio is selected
+ */
+ public function isSelected() {
+ return $this->input->getAttribute( 'checked' ) === 'checked';
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->isSelected() ) {
+ $config['selected'] = true;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/php/widgets/TextInputWidget.php b/vendor/oojs/oojs-ui/php/widgets/TextInputWidget.php
new file mode 100644
index 00000000..a5f31f74
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/widgets/TextInputWidget.php
@@ -0,0 +1,151 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Input widget with a text field.
+ */
+class TextInputWidget extends InputWidget {
+
+ /* Properties */
+
+ /**
+ * Prevent changes.
+ *
+ * @var boolean
+ */
+ protected $readOnly = false;
+
+ /**
+ * Allow multiple lines of text.
+ *
+ * @var boolean
+ */
+ protected $multiline = false;
+
+ /**
+ * @param array $config Configuration options
+ * @param string $config['type'] HTML tag `type` attribute (default: 'text')
+ * @param string $config['placeholder'] Placeholder text
+ * @param boolean $config['autofocus'] Ask the browser to focus this widget, using the 'autofocus'
+ * HTML attribute (default: false)
+ * @param boolean $config['readOnly'] Prevent changes (default: false)
+ * @param number $config['maxLength'] Maximum allowed number of characters to input
+ * @param boolean $config['multiline'] Allow multiple lines of text (default: false)
+ * @param boolean $config['required'] Mark the field as required (default: false)
+ */
+ public function __construct( array $config = array() ) {
+ // Config initialization
+ $config = array_merge( array(
+ 'readOnly' => false,
+ 'autofocus' => false,
+ 'required' => false,
+ ), $config );
+
+ // Parent constructor
+ parent::__construct( $config );
+
+ // Properties
+ $this->multiline = isset( $config['multiline'] ) ? (bool)$config['multiline'] : false;
+
+ // Mixins
+ $this->mixin( new IconElement( $this, $config ) );
+ $this->mixin( new IndicatorElement( $this, $config ) );
+
+ // Initialization
+ $this
+ ->addClasses( array( 'oo-ui-textInputWidget' ) )
+ ->appendContent( $this->icon, $this->indicator );
+ $this->setReadOnly( $config['readOnly'] );
+ if ( isset( $config['placeholder'] ) ) {
+ $this->input->setAttributes( array( 'placeholder' => $config['placeholder'] ) );
+ }
+ if ( isset( $config['maxLength'] ) ) {
+ $this->input->setAttributes( array( 'maxlength' => $config['maxLength'] ) );
+ }
+ if ( $config['autofocus'] ) {
+ $this->input->setAttributes( array( 'autofocus' => 'autofocus' ) );
+ }
+ if ( $config['required'] ) {
+ $this->input->setAttributes( array( 'required' => 'required', 'aria-required' => 'true' ) );
+ }
+ }
+
+ /**
+ * Check if the widget is read-only.
+ *
+ * @return boolean
+ */
+ public function isReadOnly() {
+ return $this->readOnly;
+ }
+
+ /**
+ * Set the read-only state of the widget. This should probably change the widget's appearance and
+ * prevent it from being used.
+ *
+ * @param boolean $state Make input read-only
+ * @chainable
+ */
+ public function setReadOnly( $state ) {
+ $this->readOnly = (bool)$state;
+ if ( $this->readOnly ) {
+ $this->input->setAttributes( array( 'readonly' => 'readonly' ) );
+ } else {
+ $this->input->removeAttributes( array( 'readonly' ) );
+ }
+ return $this;
+ }
+
+ protected function getInputElement( $config ) {
+ if ( isset( $config['multiline'] ) && $config['multiline'] ) {
+ return new Tag( 'textarea' );
+ } else {
+ $type = isset( $config['type'] ) ? $config['type'] : 'text';
+ $input = new Tag( 'input' );
+ $input->setAttributes( array( 'type' => $type ) );
+ return $input;
+ }
+ }
+
+ /**
+ * Check if input supports multiple lines.
+ *
+ * @return boolean
+ */
+ public function isMultiline() {
+ return (bool)$this->multiline;
+ }
+
+ public function getConfig( &$config ) {
+ if ( $this->isMultiline() ) {
+ $config['multiline'] = true;
+ } else {
+ $type = $this->input->getAttribute( 'type' );
+ if ( $type !== 'text' ) {
+ $config['type'] = $type;
+ }
+ }
+ if ( $this->isReadOnly() ) {
+ $config['readOnly'] = true;
+ }
+ $placeholder = $this->input->getAttribute( 'placeholder' );
+ if ( $placeholder !== null ) {
+ $config['placeholder'] = $placeholder;
+ }
+ $maxlength = $this->input->getAttribute( 'maxlength' );
+ if ( $maxlength !== null ) {
+ $config['maxLength'] = $maxlength;
+ }
+ $autofocus = $this->input->getAttribute( 'autofocus' );
+ if ( $autofocus !== null ) {
+ $config['autofocus'] = true;
+ }
+ $required = $this->input->getAttribute( 'required' );
+ $ariarequired = $this->input->getAttribute( 'aria-required' );
+ if ( ( $required !== null ) || ( $ariarequired !== null ) ) {
+ $config['required'] = true;
+ }
+ return parent::getConfig( $config );
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/ActionSet.js b/vendor/oojs/oojs-ui/src/ActionSet.js
new file mode 100644
index 00000000..875ca605
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/ActionSet.js
@@ -0,0 +1,504 @@
+/**
+ * ActionSets manage the behavior of the {@link OO.ui.ActionWidget action widgets} that comprise them.
+ * Actions can be made available for specific contexts (modes) and circumstances
+ * (abilities). Action sets are primarily used with {@link OO.ui.Dialog Dialogs}.
+ *
+ * ActionSets contain two types of actions:
+ *
+ * - Special: Special actions are the first visible actions with special flags, such as 'safe' and 'primary', the default special flags. Additional special flags can be configured in subclasses with the static #specialFlags property.
+ * - Other: Other actions include all non-special visible actions.
+ *
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ *
+ * @example
+ * // Example: An action set used in a process dialog
+ * function MyProcessDialog( config ) {
+ * MyProcessDialog.super.call( this, config );
+ * }
+ * OO.inheritClass( MyProcessDialog, OO.ui.ProcessDialog );
+ * MyProcessDialog.static.title = 'An action set in a process dialog';
+ * // An action set that uses modes ('edit' and 'help' mode, in this example).
+ * MyProcessDialog.static.actions = [
+ * { action: 'continue', modes: 'edit', label: 'Continue', flags: [ 'primary', 'constructive' ] },
+ * { action: 'help', modes: 'edit', label: 'Help' },
+ * { modes: 'edit', label: 'Cancel', flags: 'safe' },
+ * { action: 'back', modes: 'help', label: 'Back', flags: 'safe' }
+ * ];
+ *
+ * MyProcessDialog.prototype.initialize = function () {
+ * MyProcessDialog.super.prototype.initialize.apply( this, arguments );
+ * this.panel1 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ * this.panel1.$element.append( '<p>This dialog uses an action set (continue, help, cancel, back) configured with modes. This is edit mode. Click \'help\' to see help mode.</p>' );
+ * this.panel2 = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ * this.panel2.$element.append( '<p>This is help mode. Only the \'back\' action widget is configured to be visible here. Click \'back\' to return to \'edit\' mode.</p>' );
+ * this.stackLayout = new OO.ui.StackLayout( {
+ * items: [ this.panel1, this.panel2 ]
+ * } );
+ * this.$body.append( this.stackLayout.$element );
+ * };
+ * MyProcessDialog.prototype.getSetupProcess = function ( data ) {
+ * return MyProcessDialog.super.prototype.getSetupProcess.call( this, data )
+ * .next( function () {
+ * this.actions.setMode( 'edit' );
+ * }, this );
+ * };
+ * MyProcessDialog.prototype.getActionProcess = function ( action ) {
+ * if ( action === 'help' ) {
+ * this.actions.setMode( 'help' );
+ * this.stackLayout.setItem( this.panel2 );
+ * } else if ( action === 'back' ) {
+ * this.actions.setMode( 'edit' );
+ * this.stackLayout.setItem( this.panel1 );
+ * } else if ( action === 'continue' ) {
+ * var dialog = this;
+ * return new OO.ui.Process( function () {
+ * dialog.close();
+ * } );
+ * }
+ * return MyProcessDialog.super.prototype.getActionProcess.call( this, action );
+ * };
+ * MyProcessDialog.prototype.getBodyHeight = function () {
+ * return this.panel1.$element.outerHeight( true );
+ * };
+ * var windowManager = new OO.ui.WindowManager();
+ * $( 'body' ).append( windowManager.$element );
+ * var dialog = new MyProcessDialog( {
+ * size: 'medium'
+ * } );
+ * windowManager.addWindows( [ dialog ] );
+ * windowManager.openWindow( dialog );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets
+ *
+ * @abstract
+ * @class
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ActionSet = function OoUiActionSet( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Mixin constructors
+ OO.EventEmitter.call( this );
+
+ // Properties
+ this.list = [];
+ this.categories = {
+ actions: 'getAction',
+ flags: 'getFlags',
+ modes: 'getModes'
+ };
+ this.categorized = {};
+ this.special = {};
+ this.others = [];
+ this.organized = false;
+ this.changing = false;
+ this.changed = false;
+};
+
+/* Setup */
+
+OO.mixinClass( OO.ui.ActionSet, OO.EventEmitter );
+
+/* Static Properties */
+
+/**
+ * Symbolic name of the flags used to identify special actions. Special actions are displayed in the
+ * header of a {@link OO.ui.ProcessDialog process dialog}.
+ * See the [OOjs UI documentation on MediaWiki][2] for more information and examples.
+ *
+ * [2]:https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs
+ *
+ * @abstract
+ * @static
+ * @inheritable
+ * @property {string}
+ */
+OO.ui.ActionSet.static.specialFlags = [ 'safe', 'primary' ];
+
+/* Events */
+
+/**
+ * @event click
+ *
+ * A 'click' event is emitted when an action is clicked.
+ *
+ * @param {OO.ui.ActionWidget} action Action that was clicked
+ */
+
+/**
+ * @event resize
+ *
+ * A 'resize' event is emitted when an action widget is resized.
+ *
+ * @param {OO.ui.ActionWidget} action Action that was resized
+ */
+
+/**
+ * @event add
+ *
+ * An 'add' event is emitted when actions are {@link #method-add added} to the action set.
+ *
+ * @param {OO.ui.ActionWidget[]} added Actions added
+ */
+
+/**
+ * @event remove
+ *
+ * A 'remove' event is emitted when actions are {@link #method-remove removed}
+ * or {@link #clear cleared}.
+ *
+ * @param {OO.ui.ActionWidget[]} added Actions removed
+ */
+
+/**
+ * @event change
+ *
+ * A 'change' event is emitted when actions are {@link #method-add added}, {@link #clear cleared},
+ * or {@link #method-remove removed} from the action set or when the {@link #setMode mode} is changed.
+ *
+ */
+
+/* Methods */
+
+/**
+ * Handle action change events.
+ *
+ * @private
+ * @fires change
+ */
+OO.ui.ActionSet.prototype.onActionChange = function () {
+ this.organized = false;
+ if ( this.changing ) {
+ this.changed = true;
+ } else {
+ this.emit( 'change' );
+ }
+};
+
+/**
+ * Check if an action is one of the special actions.
+ *
+ * @param {OO.ui.ActionWidget} action Action to check
+ * @return {boolean} Action is special
+ */
+OO.ui.ActionSet.prototype.isSpecial = function ( action ) {
+ var flag;
+
+ for ( flag in this.special ) {
+ if ( action === this.special[ flag ] ) {
+ return true;
+ }
+ }
+
+ return false;
+};
+
+/**
+ * Get action widgets based on the specified filter: ‘actions’, ‘flags’, ‘modes’, ‘visible’,
+ * or ‘disabled’.
+ *
+ * @param {Object} [filters] Filters to use, omit to get all actions
+ * @param {string|string[]} [filters.actions] Actions that action widgets must have
+ * @param {string|string[]} [filters.flags] Flags that action widgets must have (e.g., 'safe')
+ * @param {string|string[]} [filters.modes] Modes that action widgets must have
+ * @param {boolean} [filters.visible] Action widgets must be visible
+ * @param {boolean} [filters.disabled] Action widgets must be disabled
+ * @return {OO.ui.ActionWidget[]} Action widgets matching all criteria
+ */
+OO.ui.ActionSet.prototype.get = function ( filters ) {
+ var i, len, list, category, actions, index, match, matches;
+
+ if ( filters ) {
+ this.organize();
+
+ // Collect category candidates
+ matches = [];
+ for ( category in this.categorized ) {
+ list = filters[ category ];
+ if ( list ) {
+ if ( !Array.isArray( list ) ) {
+ list = [ list ];
+ }
+ for ( i = 0, len = list.length; i < len; i++ ) {
+ actions = this.categorized[ category ][ list[ i ] ];
+ if ( Array.isArray( actions ) ) {
+ matches.push.apply( matches, actions );
+ }
+ }
+ }
+ }
+ // Remove by boolean filters
+ for ( i = 0, len = matches.length; i < len; i++ ) {
+ match = matches[ i ];
+ if (
+ ( filters.visible !== undefined && match.isVisible() !== filters.visible ) ||
+ ( filters.disabled !== undefined && match.isDisabled() !== filters.disabled )
+ ) {
+ matches.splice( i, 1 );
+ len--;
+ i--;
+ }
+ }
+ // Remove duplicates
+ for ( i = 0, len = matches.length; i < len; i++ ) {
+ match = matches[ i ];
+ index = matches.lastIndexOf( match );
+ while ( index !== i ) {
+ matches.splice( index, 1 );
+ len--;
+ index = matches.lastIndexOf( match );
+ }
+ }
+ return matches;
+ }
+ return this.list.slice();
+};
+
+/**
+ * Get 'special' actions.
+ *
+ * Special actions are the first visible action widgets with special flags, such as 'safe' and 'primary'.
+ * Special flags can be configured in subclasses by changing the static #specialFlags property.
+ *
+ * @return {OO.ui.ActionWidget[]|null} 'Special' action widgets.
+ */
+OO.ui.ActionSet.prototype.getSpecial = function () {
+ this.organize();
+ return $.extend( {}, this.special );
+};
+
+/**
+ * Get 'other' actions.
+ *
+ * Other actions include all non-special visible action widgets.
+ *
+ * @return {OO.ui.ActionWidget[]} 'Other' action widgets
+ */
+OO.ui.ActionSet.prototype.getOthers = function () {
+ this.organize();
+ return this.others.slice();
+};
+
+/**
+ * Set the mode (e.g., ‘edit’ or ‘view’). Only {@link OO.ui.ActionWidget#modes actions} configured
+ * to be available in the specified mode will be made visible. All other actions will be hidden.
+ *
+ * @param {string} mode The mode. Only actions configured to be available in the specified
+ * mode will be made visible.
+ * @chainable
+ * @fires toggle
+ * @fires change
+ */
+OO.ui.ActionSet.prototype.setMode = function ( mode ) {
+ var i, len, action;
+
+ this.changing = true;
+ for ( i = 0, len = this.list.length; i < len; i++ ) {
+ action = this.list[ i ];
+ action.toggle( action.hasMode( mode ) );
+ }
+
+ this.organized = false;
+ this.changing = false;
+ this.emit( 'change' );
+
+ return this;
+};
+
+/**
+ * Set the abilities of the specified actions.
+ *
+ * Action widgets that are configured with the specified actions will be enabled
+ * or disabled based on the boolean values specified in the `actions`
+ * parameter.
+ *
+ * @param {Object.<string,boolean>} actions A list keyed by action name with boolean
+ * values that indicate whether or not the action should be enabled.
+ * @chainable
+ */
+OO.ui.ActionSet.prototype.setAbilities = function ( actions ) {
+ var i, len, action, item;
+
+ for ( i = 0, len = this.list.length; i < len; i++ ) {
+ item = this.list[ i ];
+ action = item.getAction();
+ if ( actions[ action ] !== undefined ) {
+ item.setDisabled( !actions[ action ] );
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Executes a function once per action.
+ *
+ * When making changes to multiple actions, use this method instead of iterating over the actions
+ * manually to defer emitting a #change event until after all actions have been changed.
+ *
+ * @param {Object|null} actions Filters to use to determine which actions to iterate over; see #get
+ * @param {Function} callback Callback to run for each action; callback is invoked with three
+ * arguments: the action, the action's index, the list of actions being iterated over
+ * @chainable
+ */
+OO.ui.ActionSet.prototype.forEach = function ( filter, callback ) {
+ this.changed = false;
+ this.changing = true;
+ this.get( filter ).forEach( callback );
+ this.changing = false;
+ if ( this.changed ) {
+ this.emit( 'change' );
+ }
+
+ return this;
+};
+
+/**
+ * Add action widgets to the action set.
+ *
+ * @param {OO.ui.ActionWidget[]} actions Action widgets to add
+ * @chainable
+ * @fires add
+ * @fires change
+ */
+OO.ui.ActionSet.prototype.add = function ( actions ) {
+ var i, len, action;
+
+ this.changing = true;
+ for ( i = 0, len = actions.length; i < len; i++ ) {
+ action = actions[ i ];
+ action.connect( this, {
+ click: [ 'emit', 'click', action ],
+ resize: [ 'emit', 'resize', action ],
+ toggle: [ 'onActionChange' ]
+ } );
+ this.list.push( action );
+ }
+ this.organized = false;
+ this.emit( 'add', actions );
+ this.changing = false;
+ this.emit( 'change' );
+
+ return this;
+};
+
+/**
+ * Remove action widgets from the set.
+ *
+ * To remove all actions, you may wish to use the #clear method instead.
+ *
+ * @param {OO.ui.ActionWidget[]} actions Action widgets to remove
+ * @chainable
+ * @fires remove
+ * @fires change
+ */
+OO.ui.ActionSet.prototype.remove = function ( actions ) {
+ var i, len, index, action;
+
+ this.changing = true;
+ for ( i = 0, len = actions.length; i < len; i++ ) {
+ action = actions[ i ];
+ index = this.list.indexOf( action );
+ if ( index !== -1 ) {
+ action.disconnect( this );
+ this.list.splice( index, 1 );
+ }
+ }
+ this.organized = false;
+ this.emit( 'remove', actions );
+ this.changing = false;
+ this.emit( 'change' );
+
+ return this;
+};
+
+/**
+ * Remove all action widets from the set.
+ *
+ * To remove only specified actions, use the {@link #method-remove remove} method instead.
+ *
+ * @chainable
+ * @fires remove
+ * @fires change
+ */
+OO.ui.ActionSet.prototype.clear = function () {
+ var i, len, action,
+ removed = this.list.slice();
+
+ this.changing = true;
+ for ( i = 0, len = this.list.length; i < len; i++ ) {
+ action = this.list[ i ];
+ action.disconnect( this );
+ }
+
+ this.list = [];
+
+ this.organized = false;
+ this.emit( 'remove', removed );
+ this.changing = false;
+ this.emit( 'change' );
+
+ return this;
+};
+
+/**
+ * Organize actions.
+ *
+ * This is called whenever organized information is requested. It will only reorganize the actions
+ * if something has changed since the last time it ran.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.ActionSet.prototype.organize = function () {
+ var i, iLen, j, jLen, flag, action, category, list, item, special,
+ specialFlags = this.constructor.static.specialFlags;
+
+ if ( !this.organized ) {
+ this.categorized = {};
+ this.special = {};
+ this.others = [];
+ for ( i = 0, iLen = this.list.length; i < iLen; i++ ) {
+ action = this.list[ i ];
+ if ( action.isVisible() ) {
+ // Populate categories
+ for ( category in this.categories ) {
+ if ( !this.categorized[ category ] ) {
+ this.categorized[ category ] = {};
+ }
+ list = action[ this.categories[ category ] ]();
+ if ( !Array.isArray( list ) ) {
+ list = [ list ];
+ }
+ for ( j = 0, jLen = list.length; j < jLen; j++ ) {
+ item = list[ j ];
+ if ( !this.categorized[ category ][ item ] ) {
+ this.categorized[ category ][ item ] = [];
+ }
+ this.categorized[ category ][ item ].push( action );
+ }
+ }
+ // Populate special/others
+ special = false;
+ for ( j = 0, jLen = specialFlags.length; j < jLen; j++ ) {
+ flag = specialFlags[ j ];
+ if ( !this.special[ flag ] && action.hasFlag( flag ) ) {
+ this.special[ flag ] = action;
+ special = true;
+ break;
+ }
+ }
+ if ( !special ) {
+ this.others.push( action );
+ }
+ }
+ }
+ this.organized = true;
+ }
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/Dialog.js b/vendor/oojs/oojs-ui/src/Dialog.js
new file mode 100644
index 00000000..33226038
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Dialog.js
@@ -0,0 +1,323 @@
+/**
+ * The Dialog class serves as the base class for the other types of dialogs.
+ * Unless extended to include controls, the rendered dialog box is a simple window
+ * that users can close by hitting the ‘Esc’ key. Dialog windows are used with OO.ui.WindowManager,
+ * which opens, closes, and controls the presentation of the window. See the
+ * [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * @example
+ * // A simple dialog window.
+ * function MyDialog( config ) {
+ * MyDialog.super.call( this, config );
+ * }
+ * OO.inheritClass( MyDialog, OO.ui.Dialog );
+ * MyDialog.prototype.initialize = function () {
+ * MyDialog.super.prototype.initialize.call( this );
+ * this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ * this.content.$element.append( '<p>A simple dialog window. Press \'Esc\' to close.</p>' );
+ * this.$body.append( this.content.$element );
+ * };
+ * MyDialog.prototype.getBodyHeight = function () {
+ * return this.content.$element.outerHeight( true );
+ * };
+ * var myDialog = new MyDialog( {
+ * size: 'medium'
+ * } );
+ * // Create and append a window manager, which opens and closes the window.
+ * var windowManager = new OO.ui.WindowManager();
+ * $( 'body' ).append( windowManager.$element );
+ * windowManager.addWindows( [ myDialog ] );
+ * // Open the window!
+ * windowManager.openWindow( myDialog );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Dialogs
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Window
+ * @mixins OO.ui.PendingElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.Dialog = function OoUiDialog( config ) {
+ // Parent constructor
+ OO.ui.Dialog.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.PendingElement.call( this );
+
+ // Properties
+ this.actions = new OO.ui.ActionSet();
+ this.attachedActions = [];
+ this.currentAction = null;
+ this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
+
+ // Events
+ this.actions.connect( this, {
+ click: 'onActionClick',
+ resize: 'onActionResize',
+ change: 'onActionsChange'
+ } );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-dialog' )
+ .attr( 'role', 'dialog' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.Dialog, OO.ui.Window );
+OO.mixinClass( OO.ui.Dialog, OO.ui.PendingElement );
+
+/* Static Properties */
+
+/**
+ * Symbolic name of dialog.
+ *
+ * The dialog class must have a symbolic name in order to be registered with OO.Factory.
+ * Please see the [OOjs UI documentation on MediaWiki] [3] for more information.
+ *
+ * [3]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
+ *
+ * @abstract
+ * @static
+ * @inheritable
+ * @property {string}
+ */
+OO.ui.Dialog.static.name = '';
+
+/**
+ * The dialog title.
+ *
+ * The title can be specified as a plaintext string, a {@link OO.ui.LabelElement Label} node, or a function
+ * that will produce a Label node or string. The title can also be specified with data passed to the
+ * constructor (see #getSetupProcess). In this case, the static value will be overriden.
+ *
+ * @abstract
+ * @static
+ * @inheritable
+ * @property {jQuery|string|Function}
+ */
+OO.ui.Dialog.static.title = '';
+
+/**
+ * An array of configured {@link OO.ui.ActionWidget action widgets}.
+ *
+ * Actions can also be specified with data passed to the constructor (see #getSetupProcess). In this case, the static
+ * value will be overriden.
+ *
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets
+ *
+ * @static
+ * @inheritable
+ * @property {Object[]}
+ */
+OO.ui.Dialog.static.actions = [];
+
+/**
+ * Close the dialog when the 'Esc' key is pressed.
+ *
+ * @static
+ * @abstract
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.Dialog.static.escapable = true;
+
+/* Methods */
+
+/**
+ * Handle frame document key down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.Dialog.prototype.onDocumentKeyDown = function ( e ) {
+ if ( e.which === OO.ui.Keys.ESCAPE ) {
+ this.close();
+ e.preventDefault();
+ e.stopPropagation();
+ }
+};
+
+/**
+ * Handle action resized events.
+ *
+ * @private
+ * @param {OO.ui.ActionWidget} action Action that was resized
+ */
+OO.ui.Dialog.prototype.onActionResize = function () {
+ // Override in subclass
+};
+
+/**
+ * Handle action click events.
+ *
+ * @private
+ * @param {OO.ui.ActionWidget} action Action that was clicked
+ */
+OO.ui.Dialog.prototype.onActionClick = function ( action ) {
+ if ( !this.isPending() ) {
+ this.executeAction( action.getAction() );
+ }
+};
+
+/**
+ * Handle actions change event.
+ *
+ * @private
+ */
+OO.ui.Dialog.prototype.onActionsChange = function () {
+ this.detachActions();
+ if ( !this.isClosing() ) {
+ this.attachActions();
+ }
+};
+
+/**
+ * Get the set of actions used by the dialog.
+ *
+ * @return {OO.ui.ActionSet}
+ */
+OO.ui.Dialog.prototype.getActions = function () {
+ return this.actions;
+};
+
+/**
+ * Get a process for taking action.
+ *
+ * When you override this method, you can create a new OO.ui.Process and return it, or add additional
+ * accept steps to the process the parent method provides using the {@link OO.ui.Process#first 'first'}
+ * and {@link OO.ui.Process#next 'next'} methods of OO.ui.Process.
+ *
+ * @abstract
+ * @param {string} [action] Symbolic name of action
+ * @return {OO.ui.Process} Action process
+ */
+OO.ui.Dialog.prototype.getActionProcess = function ( action ) {
+ return new OO.ui.Process()
+ .next( function () {
+ if ( !action ) {
+ // An empty action always closes the dialog without data, which should always be
+ // safe and make no changes
+ this.close();
+ }
+ }, this );
+};
+
+/**
+ * @inheritdoc
+ *
+ * @param {Object} [data] Dialog opening data
+ * @param {jQuery|string|Function|null} [data.title] Dialog title, omit to use
+ * the {@link #static-title static title}
+ * @param {Object[]} [data.actions] List of configuration options for each
+ * {@link OO.ui.ActionWidget action widget}, omit to use {@link #static-actions static actions}.
+ */
+OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
+ data = data || {};
+
+ // Parent method
+ return OO.ui.Dialog.super.prototype.getSetupProcess.call( this, data )
+ .next( function () {
+ var config = this.constructor.static,
+ actions = data.actions !== undefined ? data.actions : config.actions;
+
+ this.title.setLabel(
+ data.title !== undefined ? data.title : this.constructor.static.title
+ );
+ this.actions.add( this.getActionWidgets( actions ) );
+
+ if ( this.constructor.static.escapable ) {
+ this.$document.on( 'keydown', this.onDocumentKeyDownHandler );
+ }
+ }, this );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
+ // Parent method
+ return OO.ui.Dialog.super.prototype.getTeardownProcess.call( this, data )
+ .first( function () {
+ if ( this.constructor.static.escapable ) {
+ this.$document.off( 'keydown', this.onDocumentKeyDownHandler );
+ }
+
+ this.actions.clear();
+ this.currentAction = null;
+ }, this );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.Dialog.prototype.initialize = function () {
+ // Parent method
+ OO.ui.Dialog.super.prototype.initialize.call( this );
+
+ // Properties
+ this.title = new OO.ui.LabelWidget();
+
+ // Initialization
+ this.$content.addClass( 'oo-ui-dialog-content' );
+ this.setPendingElement( this.$head );
+};
+
+/**
+ * Get action widgets from a list of configs
+ *
+ * @param {Object[]} actions Action widget configs
+ * @return {OO.ui.ActionWidget[]} Action widgets
+ */
+OO.ui.Dialog.prototype.getActionWidgets = function ( actions ) {
+ var i, len, widgets = [];
+ for ( i = 0, len = actions.length; i < len; i++ ) {
+ widgets.push(
+ new OO.ui.ActionWidget( actions[ i ] )
+ );
+ }
+ return widgets;
+};
+
+/**
+ * Attach action actions.
+ *
+ * @protected
+ */
+OO.ui.Dialog.prototype.attachActions = function () {
+ // Remember the list of potentially attached actions
+ this.attachedActions = this.actions.get();
+};
+
+/**
+ * Detach action actions.
+ *
+ * @protected
+ * @chainable
+ */
+OO.ui.Dialog.prototype.detachActions = function () {
+ var i, len;
+
+ // Detach all actions that may have been previously attached
+ for ( i = 0, len = this.attachedActions.length; i < len; i++ ) {
+ this.attachedActions[ i ].$element.detach();
+ }
+ this.attachedActions = [];
+};
+
+/**
+ * Execute an action.
+ *
+ * @param {string} action Symbolic name of action to execute
+ * @return {jQuery.Promise} Promise resolved when action completes, rejected if it fails
+ */
+OO.ui.Dialog.prototype.executeAction = function ( action ) {
+ this.pushPending();
+ this.currentAction = action;
+ return this.getActionProcess( action ).execute()
+ .always( this.popPending.bind( this ) );
+};
diff --git a/vendor/oojs/oojs-ui/src/Element.js b/vendor/oojs/oojs-ui/src/Element.js
new file mode 100644
index 00000000..127eb503
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Element.js
@@ -0,0 +1,748 @@
+/**
+ * Each Element represents a rendering in the DOM—a button or an icon, for example, or anything
+ * that is visible to a user. Unlike {@link OO.ui.Widget widgets}, plain elements usually do not have events
+ * connected to them and can't be interacted with.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string[]} [classes] The names of the CSS classes to apply to the element. CSS styles are added
+ * to the top level (e.g., the outermost div) of the element. See the [OOjs UI documentation on MediaWiki][2]
+ * for an example.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#cssExample
+ * @cfg {string} [id] The HTML id attribute used in the rendered tag.
+ * @cfg {string} [text] Text to insert
+ * @cfg {Array} [content] An array of content elements to append (after #text).
+ * Strings will be html-escaped; use an OO.ui.HtmlSnippet to append raw HTML.
+ * Instances of OO.ui.Element will have their $element appended.
+ * @cfg {jQuery} [$content] Content elements to append (after #text)
+ * @cfg {Mixed} [data] Custom data of any type or combination of types (e.g., string, number, array, object).
+ * Data can also be specified with the #setData method.
+ */
+OO.ui.Element = function OoUiElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$ = $;
+ this.visible = true;
+ this.data = config.data;
+ this.$element = config.$element ||
+ $( document.createElement( this.getTagName() ) );
+ this.elementGroup = null;
+ this.debouncedUpdateThemeClassesHandler = this.debouncedUpdateThemeClasses.bind( this );
+ this.updateThemeClassesPending = false;
+
+ // Initialization
+ if ( Array.isArray( config.classes ) ) {
+ this.$element.addClass( config.classes.join( ' ' ) );
+ }
+ if ( config.id ) {
+ this.$element.attr( 'id', config.id );
+ }
+ if ( config.text ) {
+ this.$element.text( config.text );
+ }
+ if ( config.content ) {
+ // The `content` property treats plain strings as text; use an
+ // HtmlSnippet to append HTML content. `OO.ui.Element`s get their
+ // appropriate $element appended.
+ this.$element.append( config.content.map( function ( v ) {
+ if ( typeof v === 'string' ) {
+ // Escape string so it is properly represented in HTML.
+ return document.createTextNode( v );
+ } else if ( v instanceof OO.ui.HtmlSnippet ) {
+ // Bypass escaping.
+ return v.toString();
+ } else if ( v instanceof OO.ui.Element ) {
+ return v.$element;
+ }
+ return v;
+ } ) );
+ }
+ if ( config.$content ) {
+ // The `$content` property treats plain strings as HTML.
+ this.$element.append( config.$content );
+ }
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.Element );
+
+/* Static Properties */
+
+/**
+ * The name of the HTML tag used by the element.
+ *
+ * The static value may be ignored if the #getTagName method is overridden.
+ *
+ * @static
+ * @inheritable
+ * @property {string}
+ */
+OO.ui.Element.static.tagName = 'div';
+
+/* Static Methods */
+
+/**
+ * Reconstitute a JavaScript object corresponding to a widget created
+ * by the PHP implementation.
+ *
+ * @param {string|HTMLElement|jQuery} idOrNode
+ * A DOM id (if a string) or node for the widget to infuse.
+ * @return {OO.ui.Element}
+ * The `OO.ui.Element` corresponding to this (infusable) document node.
+ * For `Tag` objects emitted on the HTML side (used occasionally for content)
+ * the value returned is a newly-created Element wrapping around the existing
+ * DOM node.
+ */
+OO.ui.Element.static.infuse = function ( idOrNode ) {
+ var obj = OO.ui.Element.static.unsafeInfuse( idOrNode, true );
+ // Verify that the type matches up.
+ // FIXME: uncomment after T89721 is fixed (see T90929)
+ /*
+ if ( !( obj instanceof this['class'] ) ) {
+ throw new Error( 'Infusion type mismatch!' );
+ }
+ */
+ return obj;
+};
+
+/**
+ * Implementation helper for `infuse`; skips the type check and has an
+ * extra property so that only the top-level invocation touches the DOM.
+ * @private
+ * @param {string|HTMLElement|jQuery} idOrNode
+ * @param {boolean} top True only for top-level invocation.
+ * @return {OO.ui.Element}
+ */
+OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) {
+ // look for a cached result of a previous infusion.
+ var id, $elem, data, cls, obj;
+ if ( typeof idOrNode === 'string' ) {
+ id = idOrNode;
+ $elem = $( document.getElementById( id ) );
+ } else {
+ $elem = $( idOrNode );
+ id = $elem.attr( 'id' );
+ }
+ data = $elem.data( 'ooui-infused' );
+ if ( data ) {
+ // cached!
+ if ( data === true ) {
+ throw new Error( 'Circular dependency! ' + id );
+ }
+ return data;
+ }
+ if ( !$elem.length ) {
+ throw new Error( 'Widget not found: ' + id );
+ }
+ data = $elem.attr( 'data-ooui' );
+ if ( !data ) {
+ throw new Error( 'No infusion data found: ' + id );
+ }
+ try {
+ data = $.parseJSON( data );
+ } catch ( _ ) {
+ data = null;
+ }
+ if ( !( data && data._ ) ) {
+ throw new Error( 'No valid infusion data found: ' + id );
+ }
+ if ( data._ === 'Tag' ) {
+ // Special case: this is a raw Tag; wrap existing node, don't rebuild.
+ return new OO.ui.Element( { $element: $elem } );
+ }
+ cls = OO.ui[data._];
+ if ( !cls ) {
+ throw new Error( 'Unknown widget type: ' + id );
+ }
+ $elem.data( 'ooui-infused', true ); // prevent loops
+ data.id = id; // implicit
+ data = OO.copy( data, null, function deserialize( value ) {
+ if ( OO.isPlainObject( value ) ) {
+ if ( value.tag ) {
+ return OO.ui.Element.static.unsafeInfuse( value.tag, false );
+ }
+ if ( value.html ) {
+ return new OO.ui.HtmlSnippet( value.html );
+ }
+ }
+ } );
+ // jscs:disable requireCapitalizedConstructors
+ obj = new cls( data ); // rebuild widget
+ // now replace old DOM with this new DOM.
+ if ( top ) {
+ $elem.replaceWith( obj.$element );
+ }
+ obj.$element.data( 'ooui-infused', obj );
+ // set the 'data-ooui' attribute so we can identify infused widgets
+ obj.$element.attr( 'data-ooui', '' );
+ return obj;
+};
+
+/**
+ * Get a jQuery function within a specific document.
+ *
+ * @static
+ * @param {jQuery|HTMLElement|HTMLDocument|Window} context Context to bind the function to
+ * @param {jQuery} [$iframe] HTML iframe element that contains the document, omit if document is
+ * not in an iframe
+ * @return {Function} Bound jQuery function
+ */
+OO.ui.Element.static.getJQuery = function ( context, $iframe ) {
+ function wrapper( selector ) {
+ return $( selector, wrapper.context );
+ }
+
+ wrapper.context = this.getDocument( context );
+
+ if ( $iframe ) {
+ wrapper.$iframe = $iframe;
+ }
+
+ return wrapper;
+};
+
+/**
+ * Get the document of an element.
+ *
+ * @static
+ * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Object to get the document for
+ * @return {HTMLDocument|null} Document object
+ */
+OO.ui.Element.static.getDocument = function ( obj ) {
+ // jQuery - selections created "offscreen" won't have a context, so .context isn't reliable
+ return ( obj[ 0 ] && obj[ 0 ].ownerDocument ) ||
+ // Empty jQuery selections might have a context
+ obj.context ||
+ // HTMLElement
+ obj.ownerDocument ||
+ // Window
+ obj.document ||
+ // HTMLDocument
+ ( obj.nodeType === 9 && obj ) ||
+ null;
+};
+
+/**
+ * Get the window of an element or document.
+ *
+ * @static
+ * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the window for
+ * @return {Window} Window object
+ */
+OO.ui.Element.static.getWindow = function ( obj ) {
+ var doc = this.getDocument( obj );
+ return doc.parentWindow || doc.defaultView;
+};
+
+/**
+ * Get the direction of an element or document.
+ *
+ * @static
+ * @param {jQuery|HTMLElement|HTMLDocument|Window} obj Context to get the direction for
+ * @return {string} Text direction, either 'ltr' or 'rtl'
+ */
+OO.ui.Element.static.getDir = function ( obj ) {
+ var isDoc, isWin;
+
+ if ( obj instanceof jQuery ) {
+ obj = obj[ 0 ];
+ }
+ isDoc = obj.nodeType === 9;
+ isWin = obj.document !== undefined;
+ if ( isDoc || isWin ) {
+ if ( isWin ) {
+ obj = obj.document;
+ }
+ obj = obj.body;
+ }
+ return $( obj ).css( 'direction' );
+};
+
+/**
+ * Get the offset between two frames.
+ *
+ * TODO: Make this function not use recursion.
+ *
+ * @static
+ * @param {Window} from Window of the child frame
+ * @param {Window} [to=window] Window of the parent frame
+ * @param {Object} [offset] Offset to start with, used internally
+ * @return {Object} Offset object, containing left and top properties
+ */
+OO.ui.Element.static.getFrameOffset = function ( from, to, offset ) {
+ var i, len, frames, frame, rect;
+
+ if ( !to ) {
+ to = window;
+ }
+ if ( !offset ) {
+ offset = { top: 0, left: 0 };
+ }
+ if ( from.parent === from ) {
+ return offset;
+ }
+
+ // Get iframe element
+ frames = from.parent.document.getElementsByTagName( 'iframe' );
+ for ( i = 0, len = frames.length; i < len; i++ ) {
+ if ( frames[ i ].contentWindow === from ) {
+ frame = frames[ i ];
+ break;
+ }
+ }
+
+ // Recursively accumulate offset values
+ if ( frame ) {
+ rect = frame.getBoundingClientRect();
+ offset.left += rect.left;
+ offset.top += rect.top;
+ if ( from !== to ) {
+ this.getFrameOffset( from.parent, offset );
+ }
+ }
+ return offset;
+};
+
+/**
+ * Get the offset between two elements.
+ *
+ * The two elements may be in a different frame, but in that case the frame $element is in must
+ * be contained in the frame $anchor is in.
+ *
+ * @static
+ * @param {jQuery} $element Element whose position to get
+ * @param {jQuery} $anchor Element to get $element's position relative to
+ * @return {Object} Translated position coordinates, containing top and left properties
+ */
+OO.ui.Element.static.getRelativePosition = function ( $element, $anchor ) {
+ var iframe, iframePos,
+ pos = $element.offset(),
+ anchorPos = $anchor.offset(),
+ elementDocument = this.getDocument( $element ),
+ anchorDocument = this.getDocument( $anchor );
+
+ // If $element isn't in the same document as $anchor, traverse up
+ while ( elementDocument !== anchorDocument ) {
+ iframe = elementDocument.defaultView.frameElement;
+ if ( !iframe ) {
+ throw new Error( '$element frame is not contained in $anchor frame' );
+ }
+ iframePos = $( iframe ).offset();
+ pos.left += iframePos.left;
+ pos.top += iframePos.top;
+ elementDocument = iframe.ownerDocument;
+ }
+ pos.left -= anchorPos.left;
+ pos.top -= anchorPos.top;
+ return pos;
+};
+
+/**
+ * Get element border sizes.
+ *
+ * @static
+ * @param {HTMLElement} el Element to measure
+ * @return {Object} Dimensions object with `top`, `left`, `bottom` and `right` properties
+ */
+OO.ui.Element.static.getBorders = function ( el ) {
+ var doc = el.ownerDocument,
+ win = doc.parentWindow || doc.defaultView,
+ style = win && win.getComputedStyle ?
+ win.getComputedStyle( el, null ) :
+ el.currentStyle,
+ $el = $( el ),
+ top = parseFloat( style ? style.borderTopWidth : $el.css( 'borderTopWidth' ) ) || 0,
+ left = parseFloat( style ? style.borderLeftWidth : $el.css( 'borderLeftWidth' ) ) || 0,
+ bottom = parseFloat( style ? style.borderBottomWidth : $el.css( 'borderBottomWidth' ) ) || 0,
+ right = parseFloat( style ? style.borderRightWidth : $el.css( 'borderRightWidth' ) ) || 0;
+
+ return {
+ top: top,
+ left: left,
+ bottom: bottom,
+ right: right
+ };
+};
+
+/**
+ * Get dimensions of an element or window.
+ *
+ * @static
+ * @param {HTMLElement|Window} el Element to measure
+ * @return {Object} Dimensions object with `borders`, `scroll`, `scrollbar` and `rect` properties
+ */
+OO.ui.Element.static.getDimensions = function ( el ) {
+ var $el, $win,
+ doc = el.ownerDocument || el.document,
+ win = doc.parentWindow || doc.defaultView;
+
+ if ( win === el || el === doc.documentElement ) {
+ $win = $( win );
+ return {
+ borders: { top: 0, left: 0, bottom: 0, right: 0 },
+ scroll: {
+ top: $win.scrollTop(),
+ left: $win.scrollLeft()
+ },
+ scrollbar: { right: 0, bottom: 0 },
+ rect: {
+ top: 0,
+ left: 0,
+ bottom: $win.innerHeight(),
+ right: $win.innerWidth()
+ }
+ };
+ } else {
+ $el = $( el );
+ return {
+ borders: this.getBorders( el ),
+ scroll: {
+ top: $el.scrollTop(),
+ left: $el.scrollLeft()
+ },
+ scrollbar: {
+ right: $el.innerWidth() - el.clientWidth,
+ bottom: $el.innerHeight() - el.clientHeight
+ },
+ rect: el.getBoundingClientRect()
+ };
+ }
+};
+
+/**
+ * Get scrollable object parent
+ *
+ * documentElement can't be used to get or set the scrollTop
+ * property on Blink. Changing and testing its value lets us
+ * use 'body' or 'documentElement' based on what is working.
+ *
+ * https://code.google.com/p/chromium/issues/detail?id=303131
+ *
+ * @static
+ * @param {HTMLElement} el Element to find scrollable parent for
+ * @return {HTMLElement} Scrollable parent
+ */
+OO.ui.Element.static.getRootScrollableElement = function ( el ) {
+ var scrollTop, body;
+
+ if ( OO.ui.scrollableElement === undefined ) {
+ body = el.ownerDocument.body;
+ scrollTop = body.scrollTop;
+ body.scrollTop = 1;
+
+ if ( body.scrollTop === 1 ) {
+ body.scrollTop = scrollTop;
+ OO.ui.scrollableElement = 'body';
+ } else {
+ OO.ui.scrollableElement = 'documentElement';
+ }
+ }
+
+ return el.ownerDocument[ OO.ui.scrollableElement ];
+};
+
+/**
+ * Get closest scrollable container.
+ *
+ * Traverses up until either a scrollable element or the root is reached, in which case the window
+ * will be returned.
+ *
+ * @static
+ * @param {HTMLElement} el Element to find scrollable container for
+ * @param {string} [dimension] Dimension of scrolling to look for; `x`, `y` or omit for either
+ * @return {HTMLElement} Closest scrollable container
+ */
+OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) {
+ var i, val,
+ props = [ 'overflow' ],
+ $parent = $( el ).parent();
+
+ if ( dimension === 'x' || dimension === 'y' ) {
+ props.push( 'overflow-' + dimension );
+ }
+
+ while ( $parent.length ) {
+ if ( $parent[ 0 ] === this.getRootScrollableElement( el ) ) {
+ return $parent[ 0 ];
+ }
+ i = props.length;
+ while ( i-- ) {
+ val = $parent.css( props[ i ] );
+ if ( val === 'auto' || val === 'scroll' ) {
+ return $parent[ 0 ];
+ }
+ }
+ $parent = $parent.parent();
+ }
+ return this.getDocument( el ).body;
+};
+
+/**
+ * Scroll element into view.
+ *
+ * @static
+ * @param {HTMLElement} el Element to scroll into view
+ * @param {Object} [config] Configuration options
+ * @param {string} [config.duration] jQuery animation duration value
+ * @param {string} [config.direction] Scroll in only one direction, e.g. 'x' or 'y', omit
+ * to scroll in both directions
+ * @param {Function} [config.complete] Function to call when scrolling completes
+ */
+OO.ui.Element.static.scrollIntoView = function ( el, config ) {
+ // Configuration initialization
+ config = config || {};
+
+ var rel, anim = {},
+ callback = typeof config.complete === 'function' && config.complete,
+ sc = this.getClosestScrollableContainer( el, config.direction ),
+ $sc = $( sc ),
+ eld = this.getDimensions( el ),
+ scd = this.getDimensions( sc ),
+ $win = $( this.getWindow( el ) );
+
+ // Compute the distances between the edges of el and the edges of the scroll viewport
+ if ( $sc.is( 'html, body' ) ) {
+ // If the scrollable container is the root, this is easy
+ rel = {
+ top: eld.rect.top,
+ bottom: $win.innerHeight() - eld.rect.bottom,
+ left: eld.rect.left,
+ right: $win.innerWidth() - eld.rect.right
+ };
+ } else {
+ // Otherwise, we have to subtract el's coordinates from sc's coordinates
+ rel = {
+ top: eld.rect.top - ( scd.rect.top + scd.borders.top ),
+ bottom: scd.rect.bottom - scd.borders.bottom - scd.scrollbar.bottom - eld.rect.bottom,
+ left: eld.rect.left - ( scd.rect.left + scd.borders.left ),
+ right: scd.rect.right - scd.borders.right - scd.scrollbar.right - eld.rect.right
+ };
+ }
+
+ if ( !config.direction || config.direction === 'y' ) {
+ if ( rel.top < 0 ) {
+ anim.scrollTop = scd.scroll.top + rel.top;
+ } else if ( rel.top > 0 && rel.bottom < 0 ) {
+ anim.scrollTop = scd.scroll.top + Math.min( rel.top, -rel.bottom );
+ }
+ }
+ if ( !config.direction || config.direction === 'x' ) {
+ if ( rel.left < 0 ) {
+ anim.scrollLeft = scd.scroll.left + rel.left;
+ } else if ( rel.left > 0 && rel.right < 0 ) {
+ anim.scrollLeft = scd.scroll.left + Math.min( rel.left, -rel.right );
+ }
+ }
+ if ( !$.isEmptyObject( anim ) ) {
+ $sc.stop( true ).animate( anim, config.duration || 'fast' );
+ if ( callback ) {
+ $sc.queue( function ( next ) {
+ callback();
+ next();
+ } );
+ }
+ } else {
+ if ( callback ) {
+ callback();
+ }
+ }
+};
+
+/**
+ * Force the browser to reconsider whether it really needs to render scrollbars inside the element
+ * and reserve space for them, because it probably doesn't.
+ *
+ * Workaround primarily for <https://code.google.com/p/chromium/issues/detail?id=387290>, but also
+ * similar bugs in other browsers. "Just" forcing a reflow is not sufficient in all cases, we need
+ * to first actually detach (or hide, but detaching is simpler) all children, *then* force a reflow,
+ * and then reattach (or show) them back.
+ *
+ * @static
+ * @param {HTMLElement} el Element to reconsider the scrollbars on
+ */
+OO.ui.Element.static.reconsiderScrollbars = function ( el ) {
+ var i, len, nodes = [];
+ // Detach all children
+ while ( el.firstChild ) {
+ nodes.push( el.firstChild );
+ el.removeChild( el.firstChild );
+ }
+ // Force reflow
+ void el.offsetHeight;
+ // Reattach all children
+ for ( i = 0, len = nodes.length; i < len; i++ ) {
+ el.appendChild( nodes[ i ] );
+ }
+};
+
+/* Methods */
+
+/**
+ * Toggle visibility of an element.
+ *
+ * @param {boolean} [show] Make element visible, omit to toggle visibility
+ * @fires visible
+ * @chainable
+ */
+OO.ui.Element.prototype.toggle = function ( show ) {
+ show = show === undefined ? !this.visible : !!show;
+
+ if ( show !== this.isVisible() ) {
+ this.visible = show;
+ this.$element.toggleClass( 'oo-ui-element-hidden', !this.visible );
+ this.emit( 'toggle', show );
+ }
+
+ return this;
+};
+
+/**
+ * Check if element is visible.
+ *
+ * @return {boolean} element is visible
+ */
+OO.ui.Element.prototype.isVisible = function () {
+ return this.visible;
+};
+
+/**
+ * Get element data.
+ *
+ * @return {Mixed} Element data
+ */
+OO.ui.Element.prototype.getData = function () {
+ return this.data;
+};
+
+/**
+ * Set element data.
+ *
+ * @param {Mixed} Element data
+ * @chainable
+ */
+OO.ui.Element.prototype.setData = function ( data ) {
+ this.data = data;
+ return this;
+};
+
+/**
+ * Check if element supports one or more methods.
+ *
+ * @param {string|string[]} methods Method or list of methods to check
+ * @return {boolean} All methods are supported
+ */
+OO.ui.Element.prototype.supports = function ( methods ) {
+ var i, len,
+ support = 0;
+
+ methods = Array.isArray( methods ) ? methods : [ methods ];
+ for ( i = 0, len = methods.length; i < len; i++ ) {
+ if ( $.isFunction( this[ methods[ i ] ] ) ) {
+ support++;
+ }
+ }
+
+ return methods.length === support;
+};
+
+/**
+ * Update the theme-provided classes.
+ *
+ * @localdoc This is called in element mixins and widget classes any time state changes.
+ * Updating is debounced, minimizing overhead of changing multiple attributes and
+ * guaranteeing that theme updates do not occur within an element's constructor
+ */
+OO.ui.Element.prototype.updateThemeClasses = function () {
+ if ( !this.updateThemeClassesPending ) {
+ this.updateThemeClassesPending = true;
+ setTimeout( this.debouncedUpdateThemeClassesHandler );
+ }
+};
+
+/**
+ * @private
+ */
+OO.ui.Element.prototype.debouncedUpdateThemeClasses = function () {
+ OO.ui.theme.updateElementClasses( this );
+ this.updateThemeClassesPending = false;
+};
+
+/**
+ * Get the HTML tag name.
+ *
+ * Override this method to base the result on instance information.
+ *
+ * @return {string} HTML tag name
+ */
+OO.ui.Element.prototype.getTagName = function () {
+ return this.constructor.static.tagName;
+};
+
+/**
+ * Check if the element is attached to the DOM
+ * @return {boolean} The element is attached to the DOM
+ */
+OO.ui.Element.prototype.isElementAttached = function () {
+ return $.contains( this.getElementDocument(), this.$element[ 0 ] );
+};
+
+/**
+ * Get the DOM document.
+ *
+ * @return {HTMLDocument} Document object
+ */
+OO.ui.Element.prototype.getElementDocument = function () {
+ // Don't cache this in other ways either because subclasses could can change this.$element
+ return OO.ui.Element.static.getDocument( this.$element );
+};
+
+/**
+ * Get the DOM window.
+ *
+ * @return {Window} Window object
+ */
+OO.ui.Element.prototype.getElementWindow = function () {
+ return OO.ui.Element.static.getWindow( this.$element );
+};
+
+/**
+ * Get closest scrollable container.
+ */
+OO.ui.Element.prototype.getClosestScrollableElementContainer = function () {
+ return OO.ui.Element.static.getClosestScrollableContainer( this.$element[ 0 ] );
+};
+
+/**
+ * Get group element is in.
+ *
+ * @return {OO.ui.GroupElement|null} Group element, null if none
+ */
+OO.ui.Element.prototype.getElementGroup = function () {
+ return this.elementGroup;
+};
+
+/**
+ * Set group element is in.
+ *
+ * @param {OO.ui.GroupElement|null} group Group element, null if none
+ * @chainable
+ */
+OO.ui.Element.prototype.setElementGroup = function ( group ) {
+ this.elementGroup = group;
+ return this;
+};
+
+/**
+ * Scroll element into view.
+ *
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.Element.prototype.scrollElementIntoView = function ( config ) {
+ return OO.ui.Element.static.scrollIntoView( this.$element[ 0 ], config );
+};
diff --git a/vendor/oojs/oojs-ui/src/Error.js b/vendor/oojs/oojs-ui/src/Error.js
new file mode 100644
index 00000000..af87b722
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Error.js
@@ -0,0 +1,91 @@
+/**
+ * Errors contain a required message (either a string or jQuery selection) that is used to describe what went wrong
+ * in a {@link OO.ui.Process process}. The error's #recoverable and #warning configurations are used to customize the
+ * appearance and functionality of the error interface.
+ *
+ * The basic error interface contains a formatted error message as well as two buttons: 'Dismiss' and 'Try again' (i.e., the error
+ * is 'recoverable' by default). If the error is not recoverable, the 'Try again' button will not be rendered and the widget
+ * that initiated the failed process will be disabled.
+ *
+ * If the error is a warning, the error interface will include a 'Dismiss' and a 'Continue' button, which will try the
+ * process again.
+ *
+ * For an example of error interfaces, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Processes_and_errors
+ *
+ * @class
+ *
+ * @constructor
+ * @param {string|jQuery} message Description of error
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [recoverable=true] Error is recoverable.
+ * By default, errors are recoverable, and users can try the process again.
+ * @cfg {boolean} [warning=false] Error is a warning.
+ * If the error is a warning, the error interface will include a
+ * 'Dismiss' and a 'Continue' button. It is the responsibility of the developer to ensure that the warning
+ * is not triggered a second time if the user chooses to continue.
+ */
+OO.ui.Error = function OoUiError( message, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( message ) && config === undefined ) {
+ config = message;
+ message = config.message;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.message = message instanceof jQuery ? message : String( message );
+ this.recoverable = config.recoverable === undefined || !!config.recoverable;
+ this.warning = !!config.warning;
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.Error );
+
+/* Methods */
+
+/**
+ * Check if the error is recoverable.
+ *
+ * If the error is recoverable, users are able to try the process again.
+ *
+ * @return {boolean} Error is recoverable
+ */
+OO.ui.Error.prototype.isRecoverable = function () {
+ return this.recoverable;
+};
+
+/**
+ * Check if the error is a warning.
+ *
+ * If the error is a warning, the error interface will include a 'Dismiss' and a 'Continue' button.
+ *
+ * @return {boolean} Error is warning
+ */
+OO.ui.Error.prototype.isWarning = function () {
+ return this.warning;
+};
+
+/**
+ * Get error message as DOM nodes.
+ *
+ * @return {jQuery} Error message in DOM nodes
+ */
+OO.ui.Error.prototype.getMessage = function () {
+ return this.message instanceof jQuery ?
+ this.message.clone() :
+ $( '<div>' ).text( this.message ).contents();
+};
+
+/**
+ * Get the error message text.
+ *
+ * @return {string} Error message
+ */
+OO.ui.Error.prototype.getMessageText = function () {
+ return this.message instanceof jQuery ? this.message.text() : this.message;
+};
diff --git a/vendor/oojs/oojs-ui/src/HtmlSnippet.js b/vendor/oojs/oojs-ui/src/HtmlSnippet.js
new file mode 100644
index 00000000..b9c5c314
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/HtmlSnippet.js
@@ -0,0 +1,29 @@
+/**
+ * Wraps an HTML snippet for use with configuration values which default
+ * to strings. This bypasses the default html-escaping done to string
+ * values.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {string} [content] HTML content
+ */
+OO.ui.HtmlSnippet = function OoUiHtmlSnippet( content ) {
+ // Properties
+ this.content = content;
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.HtmlSnippet );
+
+/* Methods */
+
+/**
+ * Render into HTML.
+ *
+ * @return {string} Unchanged HTML snippet.
+ */
+OO.ui.HtmlSnippet.prototype.toString = function () {
+ return this.content;
+};
diff --git a/vendor/oojs/oojs-ui/src/Layout.js b/vendor/oojs/oojs-ui/src/Layout.js
new file mode 100644
index 00000000..d0c368f5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Layout.js
@@ -0,0 +1,33 @@
+/**
+ * Layouts are containers for elements and are used to arrange other widgets of arbitrary type in a way
+ * that is centrally controlled and can be updated dynamically. Layouts can be, and usually are, combined.
+ * See {@link OO.ui.FieldsetLayout FieldsetLayout}, {@link OO.ui.FieldLayout FieldLayout}, {@link OO.ui.FormLayout FormLayout},
+ * {@link OO.ui.PanelLayout PanelLayout}, {@link OO.ui.StackLayout StackLayout}, {@link OO.ui.PageLayout PageLayout},
+ * and {@link OO.ui.BookletLayout BookletLayout} for more information and examples.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.Layout = function OoUiLayout( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.Layout.super.call( this, config );
+
+ // Mixin constructors
+ OO.EventEmitter.call( this );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-layout' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.Layout, OO.ui.Element );
+OO.mixinClass( OO.ui.Layout, OO.EventEmitter );
diff --git a/vendor/oojs/oojs-ui/src/Process.js b/vendor/oojs/oojs-ui/src/Process.js
new file mode 100644
index 00000000..649ffb99
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Process.js
@@ -0,0 +1,166 @@
+/**
+ * A Process is a list of steps that are called in sequence. The step can be a number, a jQuery promise,
+ * or a function:
+ *
+ * - **number**: the process will wait for the specified number of milliseconds before proceeding.
+ * - **promise**: the process will continue to the next step when the promise is successfully resolved
+ * or stop if the promise is rejected.
+ * - **function**: the process will execute the function. The process will stop if the function returns
+ * either a boolean `false` or a promise that is rejected; if the function returns a number, the process
+ * will wait for that number of milliseconds before proceeding.
+ *
+ * If the process fails, an {@link OO.ui.Error error} is generated. Depending on how the error is
+ * configured, users can dismiss the error and try the process again, or not. If a process is stopped,
+ * its remaining steps will not be performed.
+ *
+ * @class
+ *
+ * @constructor
+ * @param {number|jQuery.Promise|Function} step Number of miliseconds to wait before proceeding, promise
+ * that must be resolved before proceeding, or a function to execute. See #createStep for more information. see #createStep for more information
+ * @param {Object} [context=null] Execution context of the function. The context is ignored if the step is
+ * a number or promise.
+ * @return {Object} Step object, with `callback` and `context` properties
+ */
+OO.ui.Process = function ( step, context ) {
+ // Properties
+ this.steps = [];
+
+ // Initialization
+ if ( step !== undefined ) {
+ this.next( step, context );
+ }
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.Process );
+
+/* Methods */
+
+/**
+ * Start the process.
+ *
+ * @return {jQuery.Promise} Promise that is resolved when all steps have successfully completed.
+ * If any of the steps return a promise that is rejected or a boolean false, this promise is rejected
+ * and any remaining steps are not performed.
+ */
+OO.ui.Process.prototype.execute = function () {
+ var i, len, promise;
+
+ /**
+ * Continue execution.
+ *
+ * @ignore
+ * @param {Array} step A function and the context it should be called in
+ * @return {Function} Function that continues the process
+ */
+ function proceed( step ) {
+ return function () {
+ // Execute step in the correct context
+ var deferred,
+ result = step.callback.call( step.context );
+
+ if ( result === false ) {
+ // Use rejected promise for boolean false results
+ return $.Deferred().reject( [] ).promise();
+ }
+ if ( typeof result === 'number' ) {
+ if ( result < 0 ) {
+ throw new Error( 'Cannot go back in time: flux capacitor is out of service' );
+ }
+ // Use a delayed promise for numbers, expecting them to be in milliseconds
+ deferred = $.Deferred();
+ setTimeout( deferred.resolve, result );
+ return deferred.promise();
+ }
+ if ( result instanceof OO.ui.Error ) {
+ // Use rejected promise for error
+ return $.Deferred().reject( [ result ] ).promise();
+ }
+ if ( Array.isArray( result ) && result.length && result[ 0 ] instanceof OO.ui.Error ) {
+ // Use rejected promise for list of errors
+ return $.Deferred().reject( result ).promise();
+ }
+ // Duck-type the object to see if it can produce a promise
+ if ( result && $.isFunction( result.promise ) ) {
+ // Use a promise generated from the result
+ return result.promise();
+ }
+ // Use resolved promise for other results
+ return $.Deferred().resolve().promise();
+ };
+ }
+
+ if ( this.steps.length ) {
+ // Generate a chain reaction of promises
+ promise = proceed( this.steps[ 0 ] )();
+ for ( i = 1, len = this.steps.length; i < len; i++ ) {
+ promise = promise.then( proceed( this.steps[ i ] ) );
+ }
+ } else {
+ promise = $.Deferred().resolve().promise();
+ }
+
+ return promise;
+};
+
+/**
+ * Create a process step.
+ *
+ * @private
+ * @param {number|jQuery.Promise|Function} step
+ *
+ * - Number of milliseconds to wait before proceeding
+ * - Promise that must be resolved before proceeding
+ * - Function to execute
+ * - If the function returns a boolean false the process will stop
+ * - If the function returns a promise, the process will continue to the next
+ * step when the promise is resolved or stop if the promise is rejected
+ * - If the function returns a number, the process will wait for that number of
+ * milliseconds before proceeding
+ * @param {Object} [context=null] Execution context of the function. The context is
+ * ignored if the step is a number or promise.
+ * @return {Object} Step object, with `callback` and `context` properties
+ */
+OO.ui.Process.prototype.createStep = function ( step, context ) {
+ if ( typeof step === 'number' || $.isFunction( step.promise ) ) {
+ return {
+ callback: function () {
+ return step;
+ },
+ context: null
+ };
+ }
+ if ( $.isFunction( step ) ) {
+ return {
+ callback: step,
+ context: context
+ };
+ }
+ throw new Error( 'Cannot create process step: number, promise or function expected' );
+};
+
+/**
+ * Add step to the beginning of the process.
+ *
+ * @inheritdoc #createStep
+ * @return {OO.ui.Process} this
+ * @chainable
+ */
+OO.ui.Process.prototype.first = function ( step, context ) {
+ this.steps.unshift( this.createStep( step, context ) );
+ return this;
+};
+
+/**
+ * Add step to the end of the process.
+ *
+ * @inheritdoc #createStep
+ * @return {OO.ui.Process} this
+ * @chainable
+ */
+OO.ui.Process.prototype.next = function ( step, context ) {
+ this.steps.push( this.createStep( step, context ) );
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/Theme.js b/vendor/oojs/oojs-ui/src/Theme.js
new file mode 100644
index 00000000..92de72ed
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Theme.js
@@ -0,0 +1,48 @@
+/**
+ * Theme logic.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.Theme = function OoUiTheme( config ) {
+ // Configuration initialization
+ config = config || {};
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.Theme );
+
+/* Methods */
+
+/**
+ * Get a list of classes to be applied to a widget.
+ *
+ * The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or removes,
+ * otherwise state transitions will not work properly.
+ *
+ * @param {OO.ui.Element} element Element for which to get classes
+ * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
+ */
+OO.ui.Theme.prototype.getElementClasses = function ( /* element */ ) {
+ return { on: [], off: [] };
+};
+
+/**
+ * Update CSS classes provided by the theme.
+ *
+ * For elements with theme logic hooks, this should be called any time there's a state change.
+ *
+ * @param {OO.ui.Element} element Element for which to update classes
+ * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
+ */
+OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
+ var classes = this.getElementClasses( element );
+
+ element.$element
+ .removeClass( classes.off.join( ' ' ) )
+ .addClass( classes.on.join( ' ' ) );
+};
diff --git a/vendor/oojs/oojs-ui/src/Tool.js b/vendor/oojs/oojs-ui/src/Tool.js
new file mode 100644
index 00000000..603c0639
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Tool.js
@@ -0,0 +1,279 @@
+/**
+ * Generic toolbar tool.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {OO.ui.ToolGroup} toolGroup
+ * @param {Object} [config] Configuration options
+ * @cfg {string|Function} [title] Title text or a function that returns text
+ */
+OO.ui.Tool = function OoUiTool( toolGroup, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+ config = toolGroup;
+ toolGroup = config.toolGroup;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.Tool.super.call( this, config );
+
+ // Properties
+ this.toolGroup = toolGroup;
+ this.toolbar = this.toolGroup.getToolbar();
+ this.active = false;
+ this.$title = $( '<span>' );
+ this.$accel = $( '<span>' );
+ this.$link = $( '<a>' );
+ this.title = null;
+
+ // Mixin constructors
+ OO.ui.IconElement.call( this, config );
+ OO.ui.FlaggedElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$link } ) );
+
+ // Events
+ this.toolbar.connect( this, { updateState: 'onUpdateState' } );
+
+ // Initialization
+ this.$title.addClass( 'oo-ui-tool-title' );
+ this.$accel
+ .addClass( 'oo-ui-tool-accel' )
+ .prop( {
+ // This may need to be changed if the key names are ever localized,
+ // but for now they are essentially written in English
+ dir: 'ltr',
+ lang: 'en'
+ } );
+ this.$link
+ .addClass( 'oo-ui-tool-link' )
+ .append( this.$icon, this.$title, this.$accel )
+ .attr( 'role', 'button' );
+ this.$element
+ .data( 'oo-ui-tool', this )
+ .addClass(
+ 'oo-ui-tool ' + 'oo-ui-tool-name-' +
+ this.constructor.static.name.replace( /^([^\/]+)\/([^\/]+).*$/, '$1-$2' )
+ )
+ .toggleClass( 'oo-ui-tool-with-label', this.constructor.static.displayBothIconAndLabel )
+ .append( this.$link );
+ this.setTitle( config.title || this.constructor.static.title );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.Tool, OO.ui.Widget );
+OO.mixinClass( OO.ui.Tool, OO.ui.IconElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.TabIndexedElement );
+
+/* Events */
+
+/**
+ * @event select
+ */
+
+/* Static Properties */
+
+/**
+ * @static
+ * @inheritdoc
+ */
+OO.ui.Tool.static.tagName = 'span';
+
+/**
+ * Symbolic name of tool.
+ *
+ * @abstract
+ * @static
+ * @inheritable
+ * @property {string}
+ */
+OO.ui.Tool.static.name = '';
+
+/**
+ * Tool group.
+ *
+ * @abstract
+ * @static
+ * @inheritable
+ * @property {string}
+ */
+OO.ui.Tool.static.group = '';
+
+/**
+ * Tool title.
+ *
+ * Title is used as a tooltip when the tool is part of a bar tool group, or a label when the tool
+ * is part of a list or menu tool group. If a trigger is associated with an action by the same name
+ * as the tool, a description of its keyboard shortcut for the appropriate platform will be
+ * appended to the title if the tool is part of a bar tool group.
+ *
+ * @abstract
+ * @static
+ * @inheritable
+ * @property {string|Function} Title text or a function that returns text
+ */
+OO.ui.Tool.static.title = '';
+
+/**
+ * Whether this tool should be displayed with both title and label when used in a bar tool group.
+ * Normally only the icon is displayed, or only the label if no icon is given.
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.Tool.static.displayBothIconAndLabel = false;
+
+/**
+ * Tool can be automatically added to catch-all groups.
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.Tool.static.autoAddToCatchall = true;
+
+/**
+ * Tool can be automatically added to named groups.
+ *
+ * @static
+ * @property {boolean}
+ * @inheritable
+ */
+OO.ui.Tool.static.autoAddToGroup = true;
+
+/**
+ * Check if this tool is compatible with given data.
+ *
+ * @static
+ * @inheritable
+ * @param {Mixed} data Data to check
+ * @return {boolean} Tool can be used with data
+ */
+OO.ui.Tool.static.isCompatibleWith = function () {
+ return false;
+};
+
+/* Methods */
+
+/**
+ * Handle the toolbar state being updated.
+ *
+ * This is an abstract method that must be overridden in a concrete subclass.
+ *
+ * @abstract
+ */
+OO.ui.Tool.prototype.onUpdateState = function () {
+ throw new Error(
+ 'OO.ui.Tool.onUpdateState not implemented in this subclass:' + this.constructor
+ );
+};
+
+/**
+ * Handle the tool being selected.
+ *
+ * This is an abstract method that must be overridden in a concrete subclass.
+ *
+ * @abstract
+ */
+OO.ui.Tool.prototype.onSelect = function () {
+ throw new Error(
+ 'OO.ui.Tool.onSelect not implemented in this subclass:' + this.constructor
+ );
+};
+
+/**
+ * Check if the button is active.
+ *
+ * @return {boolean} Button is active
+ */
+OO.ui.Tool.prototype.isActive = function () {
+ return this.active;
+};
+
+/**
+ * Make the button appear active or inactive.
+ *
+ * @param {boolean} state Make button appear active
+ */
+OO.ui.Tool.prototype.setActive = function ( state ) {
+ this.active = !!state;
+ if ( this.active ) {
+ this.$element.addClass( 'oo-ui-tool-active' );
+ } else {
+ this.$element.removeClass( 'oo-ui-tool-active' );
+ }
+};
+
+/**
+ * Get the tool title.
+ *
+ * @param {string|Function} title Title text or a function that returns text
+ * @chainable
+ */
+OO.ui.Tool.prototype.setTitle = function ( title ) {
+ this.title = OO.ui.resolveMsg( title );
+ this.updateTitle();
+ return this;
+};
+
+/**
+ * Get the tool title.
+ *
+ * @return {string} Title text
+ */
+OO.ui.Tool.prototype.getTitle = function () {
+ return this.title;
+};
+
+/**
+ * Get the tool's symbolic name.
+ *
+ * @return {string} Symbolic name of tool
+ */
+OO.ui.Tool.prototype.getName = function () {
+ return this.constructor.static.name;
+};
+
+/**
+ * Update the title.
+ */
+OO.ui.Tool.prototype.updateTitle = function () {
+ var titleTooltips = this.toolGroup.constructor.static.titleTooltips,
+ accelTooltips = this.toolGroup.constructor.static.accelTooltips,
+ accel = this.toolbar.getToolAccelerator( this.constructor.static.name ),
+ tooltipParts = [];
+
+ this.$title.text( this.title );
+ this.$accel.text( accel );
+
+ if ( titleTooltips && typeof this.title === 'string' && this.title.length ) {
+ tooltipParts.push( this.title );
+ }
+ if ( accelTooltips && typeof accel === 'string' && accel.length ) {
+ tooltipParts.push( accel );
+ }
+ if ( tooltipParts.length ) {
+ this.$link.attr( 'title', tooltipParts.join( ' ' ) );
+ } else {
+ this.$link.removeAttr( 'title' );
+ }
+};
+
+/**
+ * Destroy tool.
+ */
+OO.ui.Tool.prototype.destroy = function () {
+ this.toolbar.disconnect( this );
+ this.$element.remove();
+};
diff --git a/vendor/oojs/oojs-ui/src/ToolFactory.js b/vendor/oojs/oojs-ui/src/ToolFactory.js
new file mode 100644
index 00000000..aada2e9b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/ToolFactory.js
@@ -0,0 +1,120 @@
+/**
+ * Factory for tools.
+ *
+ * @class
+ * @extends OO.Factory
+ * @constructor
+ */
+OO.ui.ToolFactory = function OoUiToolFactory() {
+ // Parent constructor
+ OO.ui.ToolFactory.super.call( this );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ToolFactory, OO.Factory );
+
+/* Methods */
+
+/**
+ * Get tools from the factory
+ *
+ * @param {Array} include Included tools
+ * @param {Array} exclude Excluded tools
+ * @param {Array} promote Promoted tools
+ * @param {Array} demote Demoted tools
+ * @return {string[]} List of tools
+ */
+OO.ui.ToolFactory.prototype.getTools = function ( include, exclude, promote, demote ) {
+ var i, len, included, promoted, demoted,
+ auto = [],
+ used = {};
+
+ // Collect included and not excluded tools
+ included = OO.simpleArrayDifference( this.extract( include ), this.extract( exclude ) );
+
+ // Promotion
+ promoted = this.extract( promote, used );
+ demoted = this.extract( demote, used );
+
+ // Auto
+ for ( i = 0, len = included.length; i < len; i++ ) {
+ if ( !used[ included[ i ] ] ) {
+ auto.push( included[ i ] );
+ }
+ }
+
+ return promoted.concat( auto ).concat( demoted );
+};
+
+/**
+ * Get a flat list of names from a list of names or groups.
+ *
+ * Tools can be specified in the following ways:
+ *
+ * - A specific tool: `{ name: 'tool-name' }` or `'tool-name'`
+ * - All tools in a group: `{ group: 'group-name' }`
+ * - All tools: `'*'`
+ *
+ * @private
+ * @param {Array|string} collection List of tools
+ * @param {Object} [used] Object with names that should be skipped as properties; extracted
+ * names will be added as properties
+ * @return {string[]} List of extracted names
+ */
+OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
+ var i, len, item, name, tool,
+ names = [];
+
+ if ( collection === '*' ) {
+ for ( name in this.registry ) {
+ tool = this.registry[ name ];
+ if (
+ // Only add tools by group name when auto-add is enabled
+ tool.static.autoAddToCatchall &&
+ // Exclude already used tools
+ ( !used || !used[ name ] )
+ ) {
+ names.push( name );
+ if ( used ) {
+ used[ name ] = true;
+ }
+ }
+ }
+ } else if ( Array.isArray( collection ) ) {
+ for ( i = 0, len = collection.length; i < len; i++ ) {
+ item = collection[ i ];
+ // Allow plain strings as shorthand for named tools
+ if ( typeof item === 'string' ) {
+ item = { name: item };
+ }
+ if ( OO.isPlainObject( item ) ) {
+ if ( item.group ) {
+ for ( name in this.registry ) {
+ tool = this.registry[ name ];
+ if (
+ // Include tools with matching group
+ tool.static.group === item.group &&
+ // Only add tools by group name when auto-add is enabled
+ tool.static.autoAddToGroup &&
+ // Exclude already used tools
+ ( !used || !used[ name ] )
+ ) {
+ names.push( name );
+ if ( used ) {
+ used[ name ] = true;
+ }
+ }
+ }
+ // Include tools with matching name and exclude already used tools
+ } else if ( item.name && ( !used || !used[ item.name ] ) ) {
+ names.push( item.name );
+ if ( used ) {
+ used[ item.name ] = true;
+ }
+ }
+ }
+ }
+ }
+ return names;
+};
diff --git a/vendor/oojs/oojs-ui/src/ToolGroup.js b/vendor/oojs/oojs-ui/src/ToolGroup.js
new file mode 100644
index 00000000..eab3cea4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/ToolGroup.js
@@ -0,0 +1,338 @@
+/**
+ * Collection of tools.
+ *
+ * Tools can be specified in the following ways:
+ *
+ * - A specific tool: `{ name: 'tool-name' }` or `'tool-name'`
+ * - All tools in a group: `{ group: 'group-name' }`
+ * - All tools: `'*'`
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ * @cfg {Array|string} [include=[]] List of tools to include
+ * @cfg {Array|string} [exclude=[]] List of tools to exclude
+ * @cfg {Array|string} [promote=[]] List of tools to promote to the beginning
+ * @cfg {Array|string} [demote=[]] List of tools to demote to the end
+ */
+OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.ToolGroup.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.GroupElement.call( this, config );
+
+ // Properties
+ this.toolbar = toolbar;
+ this.tools = {};
+ this.pressed = null;
+ this.autoDisabled = false;
+ this.include = config.include || [];
+ this.exclude = config.exclude || [];
+ this.promote = config.promote || [];
+ this.demote = config.demote || [];
+ this.onCapturedMouseKeyUpHandler = this.onCapturedMouseKeyUp.bind( this );
+
+ // Events
+ this.$element.on( {
+ mousedown: this.onMouseKeyDown.bind( this ),
+ mouseup: this.onMouseKeyUp.bind( this ),
+ keydown: this.onMouseKeyDown.bind( this ),
+ keyup: this.onMouseKeyUp.bind( this ),
+ focus: this.onMouseOverFocus.bind( this ),
+ blur: this.onMouseOutBlur.bind( this ),
+ mouseover: this.onMouseOverFocus.bind( this ),
+ mouseout: this.onMouseOutBlur.bind( this )
+ } );
+ this.toolbar.getToolFactory().connect( this, { register: 'onToolFactoryRegister' } );
+ this.aggregate( { disable: 'itemDisable' } );
+ this.connect( this, { itemDisable: 'updateDisabled' } );
+
+ // Initialization
+ this.$group.addClass( 'oo-ui-toolGroup-tools' );
+ this.$element
+ .addClass( 'oo-ui-toolGroup' )
+ .append( this.$group );
+ this.populate();
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ToolGroup, OO.ui.Widget );
+OO.mixinClass( OO.ui.ToolGroup, OO.ui.GroupElement );
+
+/* Events */
+
+/**
+ * @event update
+ */
+
+/* Static Properties */
+
+/**
+ * Show labels in tooltips.
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.ToolGroup.static.titleTooltips = false;
+
+/**
+ * Show acceleration labels in tooltips.
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.ToolGroup.static.accelTooltips = false;
+
+/**
+ * Automatically disable the toolgroup when all tools are disabled
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.ToolGroup.static.autoDisable = true;
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ToolGroup.prototype.isDisabled = function () {
+ return this.autoDisabled || OO.ui.ToolGroup.super.prototype.isDisabled.apply( this, arguments );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ToolGroup.prototype.updateDisabled = function () {
+ var i, item, allDisabled = true;
+
+ if ( this.constructor.static.autoDisable ) {
+ for ( i = this.items.length - 1; i >= 0; i-- ) {
+ item = this.items[ i ];
+ if ( !item.isDisabled() ) {
+ allDisabled = false;
+ break;
+ }
+ }
+ this.autoDisabled = allDisabled;
+ }
+ OO.ui.ToolGroup.super.prototype.updateDisabled.apply( this, arguments );
+};
+
+/**
+ * Handle mouse down and key down events.
+ *
+ * @param {jQuery.Event} e Mouse down or key down event
+ */
+OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {
+ if (
+ !this.isDisabled() &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
+ this.pressed = this.getTargetTool( e );
+ if ( this.pressed ) {
+ this.pressed.setActive( true );
+ this.getElementDocument().addEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );
+ this.getElementDocument().addEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );
+ }
+ return false;
+ }
+};
+
+/**
+ * Handle captured mouse up and key up events.
+ *
+ * @param {Event} e Mouse up or key up event
+ */
+OO.ui.ToolGroup.prototype.onCapturedMouseKeyUp = function ( e ) {
+ this.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );
+ this.getElementDocument().removeEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );
+ // onMouseKeyUp may be called a second time, depending on where the mouse is when the button is
+ // released, but since `this.pressed` will no longer be true, the second call will be ignored.
+ this.onMouseKeyUp( e );
+};
+
+/**
+ * Handle mouse up and key up events.
+ *
+ * @param {jQuery.Event} e Mouse up or key up event
+ */
+OO.ui.ToolGroup.prototype.onMouseKeyUp = function ( e ) {
+ var tool = this.getTargetTool( e );
+
+ if (
+ !this.isDisabled() && this.pressed && this.pressed === tool &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
+ this.pressed.onSelect();
+ this.pressed = null;
+ return false;
+ }
+
+ this.pressed = null;
+};
+
+/**
+ * Handle mouse over and focus events.
+ *
+ * @param {jQuery.Event} e Mouse over or focus event
+ */
+OO.ui.ToolGroup.prototype.onMouseOverFocus = function ( e ) {
+ var tool = this.getTargetTool( e );
+
+ if ( this.pressed && this.pressed === tool ) {
+ this.pressed.setActive( true );
+ }
+};
+
+/**
+ * Handle mouse out and blur events.
+ *
+ * @param {jQuery.Event} e Mouse out or blur event
+ */
+OO.ui.ToolGroup.prototype.onMouseOutBlur = function ( e ) {
+ var tool = this.getTargetTool( e );
+
+ if ( this.pressed && this.pressed === tool ) {
+ this.pressed.setActive( false );
+ }
+};
+
+/**
+ * Get the closest tool to a jQuery.Event.
+ *
+ * Only tool links are considered, which prevents other elements in the tool such as popups from
+ * triggering tool group interactions.
+ *
+ * @private
+ * @param {jQuery.Event} e
+ * @return {OO.ui.Tool|null} Tool, `null` if none was found
+ */
+OO.ui.ToolGroup.prototype.getTargetTool = function ( e ) {
+ var tool,
+ $item = $( e.target ).closest( '.oo-ui-tool-link' );
+
+ if ( $item.length ) {
+ tool = $item.parent().data( 'oo-ui-tool' );
+ }
+
+ return tool && !tool.isDisabled() ? tool : null;
+};
+
+/**
+ * Handle tool registry register events.
+ *
+ * If a tool is registered after the group is created, we must repopulate the list to account for:
+ *
+ * - a tool being added that may be included
+ * - a tool already included being overridden
+ *
+ * @param {string} name Symbolic name of tool
+ */
+OO.ui.ToolGroup.prototype.onToolFactoryRegister = function () {
+ this.populate();
+};
+
+/**
+ * Get the toolbar this group is in.
+ *
+ * @return {OO.ui.Toolbar} Toolbar of group
+ */
+OO.ui.ToolGroup.prototype.getToolbar = function () {
+ return this.toolbar;
+};
+
+/**
+ * Add and remove tools based on configuration.
+ */
+OO.ui.ToolGroup.prototype.populate = function () {
+ var i, len, name, tool,
+ toolFactory = this.toolbar.getToolFactory(),
+ names = {},
+ add = [],
+ remove = [],
+ list = this.toolbar.getToolFactory().getTools(
+ this.include, this.exclude, this.promote, this.demote
+ );
+
+ // Build a list of needed tools
+ for ( i = 0, len = list.length; i < len; i++ ) {
+ name = list[ i ];
+ if (
+ // Tool exists
+ toolFactory.lookup( name ) &&
+ // Tool is available or is already in this group
+ ( this.toolbar.isToolAvailable( name ) || this.tools[ name ] )
+ ) {
+ // Hack to prevent infinite recursion via ToolGroupTool. We need to reserve the tool before
+ // creating it, but we can't call reserveTool() yet because we haven't created the tool.
+ this.toolbar.tools[ name ] = true;
+ tool = this.tools[ name ];
+ if ( !tool ) {
+ // Auto-initialize tools on first use
+ this.tools[ name ] = tool = toolFactory.create( name, this );
+ tool.updateTitle();
+ }
+ this.toolbar.reserveTool( tool );
+ add.push( tool );
+ names[ name ] = true;
+ }
+ }
+ // Remove tools that are no longer needed
+ for ( name in this.tools ) {
+ if ( !names[ name ] ) {
+ this.tools[ name ].destroy();
+ this.toolbar.releaseTool( this.tools[ name ] );
+ remove.push( this.tools[ name ] );
+ delete this.tools[ name ];
+ }
+ }
+ if ( remove.length ) {
+ this.removeItems( remove );
+ }
+ // Update emptiness state
+ if ( add.length ) {
+ this.$element.removeClass( 'oo-ui-toolGroup-empty' );
+ } else {
+ this.$element.addClass( 'oo-ui-toolGroup-empty' );
+ }
+ // Re-add tools (moving existing ones to new locations)
+ this.addItems( add );
+ // Disabled state may depend on items
+ this.updateDisabled();
+};
+
+/**
+ * Destroy tool group.
+ */
+OO.ui.ToolGroup.prototype.destroy = function () {
+ var name;
+
+ this.clearItems();
+ this.toolbar.getToolFactory().disconnect( this );
+ for ( name in this.tools ) {
+ this.toolbar.releaseTool( this.tools[ name ] );
+ this.tools[ name ].disconnect( this ).destroy();
+ delete this.tools[ name ];
+ }
+ this.$element.remove();
+};
diff --git a/vendor/oojs/oojs-ui/src/ToolGroupFactory.js b/vendor/oojs/oojs-ui/src/ToolGroupFactory.js
new file mode 100644
index 00000000..109b86e8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/ToolGroupFactory.js
@@ -0,0 +1,38 @@
+/**
+ * Factory for tool groups.
+ *
+ * @class
+ * @extends OO.Factory
+ * @constructor
+ */
+OO.ui.ToolGroupFactory = function OoUiToolGroupFactory() {
+ // Parent constructor
+ OO.Factory.call( this );
+
+ var i, l,
+ defaultClasses = this.constructor.static.getDefaultClasses();
+
+ // Register default toolgroups
+ for ( i = 0, l = defaultClasses.length; i < l; i++ ) {
+ this.register( defaultClasses[ i ] );
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ToolGroupFactory, OO.Factory );
+
+/* Static Methods */
+
+/**
+ * Get a default set of classes to be registered on construction
+ *
+ * @return {Function[]} Default classes
+ */
+OO.ui.ToolGroupFactory.static.getDefaultClasses = function () {
+ return [
+ OO.ui.BarToolGroup,
+ OO.ui.ListToolGroup,
+ OO.ui.MenuToolGroup
+ ];
+};
diff --git a/vendor/oojs/oojs-ui/src/Toolbar.js b/vendor/oojs/oojs-ui/src/Toolbar.js
new file mode 100644
index 00000000..f52fbffe
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Toolbar.js
@@ -0,0 +1,481 @@
+/**
+ * Collection of tool groups.
+ *
+ * The following is a minimal example using several tools and tool groups.
+ *
+ * @example
+ * // Create the toolbar
+ * var toolFactory = new OO.ui.ToolFactory();
+ * var toolGroupFactory = new OO.ui.ToolGroupFactory();
+ * var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
+ *
+ * // We will be placing status text in this element when tools are used
+ * var $area = $( '<p>' ).text( 'Toolbar example' );
+ *
+ * // Define the tools that we're going to place in our toolbar
+ *
+ * // Create a class inheriting from OO.ui.Tool
+ * function PictureTool() {
+ * PictureTool.super.apply( this, arguments );
+ * }
+ * OO.inheritClass( PictureTool, OO.ui.Tool );
+ * // Each tool must have a 'name' (used as an internal identifier, see later) and at least one
+ * // of 'icon' and 'title' (displayed icon and text).
+ * PictureTool.static.name = 'picture';
+ * PictureTool.static.icon = 'picture';
+ * PictureTool.static.title = 'Insert picture';
+ * // Defines the action that will happen when this tool is selected (clicked).
+ * PictureTool.prototype.onSelect = function () {
+ * $area.text( 'Picture tool clicked!' );
+ * // Never display this tool as "active" (selected).
+ * this.setActive( false );
+ * };
+ * // Make this tool available in our toolFactory and thus our toolbar
+ * toolFactory.register( PictureTool );
+ *
+ * // Register two more tools, nothing interesting here
+ * function SettingsTool() {
+ * SettingsTool.super.apply( this, arguments );
+ * }
+ * OO.inheritClass( SettingsTool, OO.ui.Tool );
+ * SettingsTool.static.name = 'settings';
+ * SettingsTool.static.icon = 'settings';
+ * SettingsTool.static.title = 'Change settings';
+ * SettingsTool.prototype.onSelect = function () {
+ * $area.text( 'Settings tool clicked!' );
+ * this.setActive( false );
+ * };
+ * toolFactory.register( SettingsTool );
+ *
+ * // Register two more tools, nothing interesting here
+ * function StuffTool() {
+ * StuffTool.super.apply( this, arguments );
+ * }
+ * OO.inheritClass( StuffTool, OO.ui.Tool );
+ * StuffTool.static.name = 'stuff';
+ * StuffTool.static.icon = 'ellipsis';
+ * StuffTool.static.title = 'More stuff';
+ * StuffTool.prototype.onSelect = function () {
+ * $area.text( 'More stuff tool clicked!' );
+ * this.setActive( false );
+ * };
+ * toolFactory.register( StuffTool );
+ *
+ * // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a
+ * // little popup window (a PopupWidget).
+ * function HelpTool( toolGroup, config ) {
+ * OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {
+ * padded: true,
+ * label: 'Help',
+ * head: true
+ * } }, config ) );
+ * this.popup.$body.append( '<p>I am helpful!</p>' );
+ * }
+ * OO.inheritClass( HelpTool, OO.ui.PopupTool );
+ * HelpTool.static.name = 'help';
+ * HelpTool.static.icon = 'help';
+ * HelpTool.static.title = 'Help';
+ * toolFactory.register( HelpTool );
+ *
+ * // Finally define which tools and in what order appear in the toolbar. Each tool may only be
+ * // used once (but not all defined tools must be used).
+ * toolbar.setup( [
+ * {
+ * // 'bar' tool groups display tools' icons only, side-by-side.
+ * type: 'bar',
+ * include: [ 'picture', 'help' ]
+ * },
+ * {
+ * // 'list' tool groups display both the titles and icons, in a dropdown list.
+ * type: 'list',
+ * indicator: 'down',
+ * label: 'More',
+ * include: [ 'settings', 'stuff' ]
+ * }
+ * // Note how the tools themselves are toolgroup-agnostic - the same tool can be displayed
+ * // either in a 'list' or a 'bar'. There is a 'menu' tool group too, not showcased here,
+ * // since it's more complicated to use. (See the next example snippet on this page.)
+ * ] );
+ *
+ * // Create some UI around the toolbar and place it in the document
+ * var frame = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * framed: true
+ * } );
+ * var contentFrame = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * padded: true
+ * } );
+ * frame.$element.append(
+ * toolbar.$element,
+ * contentFrame.$element.append( $area )
+ * );
+ * $( 'body' ).append( frame.$element );
+ *
+ * // Here is where the toolbar is actually built. This must be done after inserting it into the
+ * // document.
+ * toolbar.initialize();
+ *
+ * The following example extends the previous one to illustrate 'menu' tool groups and the usage of
+ * 'updateState' event.
+ *
+ * @example
+ * // Create the toolbar
+ * var toolFactory = new OO.ui.ToolFactory();
+ * var toolGroupFactory = new OO.ui.ToolGroupFactory();
+ * var toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory );
+ *
+ * // We will be placing status text in this element when tools are used
+ * var $area = $( '<p>' ).text( 'Toolbar example' );
+ *
+ * // Define the tools that we're going to place in our toolbar
+ *
+ * // Create a class inheriting from OO.ui.Tool
+ * function PictureTool() {
+ * PictureTool.super.apply( this, arguments );
+ * }
+ * OO.inheritClass( PictureTool, OO.ui.Tool );
+ * // Each tool must have a 'name' (used as an internal identifier, see later) and at least one
+ * // of 'icon' and 'title' (displayed icon and text).
+ * PictureTool.static.name = 'picture';
+ * PictureTool.static.icon = 'picture';
+ * PictureTool.static.title = 'Insert picture';
+ * // Defines the action that will happen when this tool is selected (clicked).
+ * PictureTool.prototype.onSelect = function () {
+ * $area.text( 'Picture tool clicked!' );
+ * // Never display this tool as "active" (selected).
+ * this.setActive( false );
+ * };
+ * // The toolbar can be synchronized with the state of some external stuff, like a text
+ * // editor's editing area, highlighting the tools (e.g. a 'bold' tool would be shown as active
+ * // when the text cursor was inside bolded text). Here we simply disable this feature.
+ * PictureTool.prototype.onUpdateState = function () {
+ * };
+ * // Make this tool available in our toolFactory and thus our toolbar
+ * toolFactory.register( PictureTool );
+ *
+ * // Register two more tools, nothing interesting here
+ * function SettingsTool() {
+ * SettingsTool.super.apply( this, arguments );
+ * this.reallyActive = false;
+ * }
+ * OO.inheritClass( SettingsTool, OO.ui.Tool );
+ * SettingsTool.static.name = 'settings';
+ * SettingsTool.static.icon = 'settings';
+ * SettingsTool.static.title = 'Change settings';
+ * SettingsTool.prototype.onSelect = function () {
+ * $area.text( 'Settings tool clicked!' );
+ * // Toggle the active state on each click
+ * this.reallyActive = !this.reallyActive;
+ * this.setActive( this.reallyActive );
+ * // To update the menu label
+ * this.toolbar.emit( 'updateState' );
+ * };
+ * SettingsTool.prototype.onUpdateState = function () {
+ * };
+ * toolFactory.register( SettingsTool );
+ *
+ * // Register two more tools, nothing interesting here
+ * function StuffTool() {
+ * StuffTool.super.apply( this, arguments );
+ * this.reallyActive = false;
+ * }
+ * OO.inheritClass( StuffTool, OO.ui.Tool );
+ * StuffTool.static.name = 'stuff';
+ * StuffTool.static.icon = 'ellipsis';
+ * StuffTool.static.title = 'More stuff';
+ * StuffTool.prototype.onSelect = function () {
+ * $area.text( 'More stuff tool clicked!' );
+ * // Toggle the active state on each click
+ * this.reallyActive = !this.reallyActive;
+ * this.setActive( this.reallyActive );
+ * // To update the menu label
+ * this.toolbar.emit( 'updateState' );
+ * };
+ * StuffTool.prototype.onUpdateState = function () {
+ * };
+ * toolFactory.register( StuffTool );
+ *
+ * // This is a PopupTool. Rather than having a custom 'onSelect' action, it will display a
+ * // little popup window (a PopupWidget). 'onUpdateState' is also already implemented.
+ * function HelpTool( toolGroup, config ) {
+ * OO.ui.PopupTool.call( this, toolGroup, $.extend( { popup: {
+ * padded: true,
+ * label: 'Help',
+ * head: true
+ * } }, config ) );
+ * this.popup.$body.append( '<p>I am helpful!</p>' );
+ * }
+ * OO.inheritClass( HelpTool, OO.ui.PopupTool );
+ * HelpTool.static.name = 'help';
+ * HelpTool.static.icon = 'help';
+ * HelpTool.static.title = 'Help';
+ * toolFactory.register( HelpTool );
+ *
+ * // Finally define which tools and in what order appear in the toolbar. Each tool may only be
+ * // used once (but not all defined tools must be used).
+ * toolbar.setup( [
+ * {
+ * // 'bar' tool groups display tools' icons only, side-by-side.
+ * type: 'bar',
+ * include: [ 'picture', 'help' ]
+ * },
+ * {
+ * // 'menu' tool groups display both the titles and icons, in a dropdown menu.
+ * // Menu label indicates which items are selected.
+ * type: 'menu',
+ * indicator: 'down',
+ * include: [ 'settings', 'stuff' ]
+ * }
+ * ] );
+ *
+ * // Create some UI around the toolbar and place it in the document
+ * var frame = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * framed: true
+ * } );
+ * var contentFrame = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * padded: true
+ * } );
+ * frame.$element.append(
+ * toolbar.$element,
+ * contentFrame.$element.append( $area )
+ * );
+ * $( 'body' ).append( frame.$element );
+ *
+ * // Here is where the toolbar is actually built. This must be done after inserting it into the
+ * // document.
+ * toolbar.initialize();
+ * toolbar.emit( 'updateState' );
+ *
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {OO.ui.ToolFactory} toolFactory Factory for creating tools
+ * @param {OO.ui.ToolGroupFactory} toolGroupFactory Factory for creating tool groups
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [actions] Add an actions section opposite to the tools
+ * @cfg {boolean} [shadow] Add a shadow below the toolbar
+ */
+OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolFactory ) && config === undefined ) {
+ config = toolFactory;
+ toolFactory = config.toolFactory;
+ toolGroupFactory = config.toolGroupFactory;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.Toolbar.super.call( this, config );
+
+ // Mixin constructors
+ OO.EventEmitter.call( this );
+ OO.ui.GroupElement.call( this, config );
+
+ // Properties
+ this.toolFactory = toolFactory;
+ this.toolGroupFactory = toolGroupFactory;
+ this.groups = [];
+ this.tools = {};
+ this.$bar = $( '<div>' );
+ this.$actions = $( '<div>' );
+ this.initialized = false;
+ this.onWindowResizeHandler = this.onWindowResize.bind( this );
+
+ // Events
+ this.$element
+ .add( this.$bar ).add( this.$group ).add( this.$actions )
+ .on( 'mousedown keydown', this.onPointerDown.bind( this ) );
+
+ // Initialization
+ this.$group.addClass( 'oo-ui-toolbar-tools' );
+ if ( config.actions ) {
+ this.$bar.append( this.$actions.addClass( 'oo-ui-toolbar-actions' ) );
+ }
+ this.$bar
+ .addClass( 'oo-ui-toolbar-bar' )
+ .append( this.$group, '<div style="clear:both"></div>' );
+ if ( config.shadow ) {
+ this.$bar.append( '<div class="oo-ui-toolbar-shadow"></div>' );
+ }
+ this.$element.addClass( 'oo-ui-toolbar' ).append( this.$bar );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.Toolbar, OO.ui.Element );
+OO.mixinClass( OO.ui.Toolbar, OO.EventEmitter );
+OO.mixinClass( OO.ui.Toolbar, OO.ui.GroupElement );
+
+/* Methods */
+
+/**
+ * Get the tool factory.
+ *
+ * @return {OO.ui.ToolFactory} Tool factory
+ */
+OO.ui.Toolbar.prototype.getToolFactory = function () {
+ return this.toolFactory;
+};
+
+/**
+ * Get the tool group factory.
+ *
+ * @return {OO.Factory} Tool group factory
+ */
+OO.ui.Toolbar.prototype.getToolGroupFactory = function () {
+ return this.toolGroupFactory;
+};
+
+/**
+ * Handles mouse down events.
+ *
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.Toolbar.prototype.onPointerDown = function ( e ) {
+ var $closestWidgetToEvent = $( e.target ).closest( '.oo-ui-widget' ),
+ $closestWidgetToToolbar = this.$element.closest( '.oo-ui-widget' );
+ if ( !$closestWidgetToEvent.length || $closestWidgetToEvent[ 0 ] === $closestWidgetToToolbar[ 0 ] ) {
+ return false;
+ }
+};
+
+/**
+ * Handle window resize event.
+ *
+ * @private
+ * @param {jQuery.Event} e Window resize event
+ */
+OO.ui.Toolbar.prototype.onWindowResize = function () {
+ this.$element.toggleClass(
+ 'oo-ui-toolbar-narrow',
+ this.$bar.width() <= this.narrowThreshold
+ );
+};
+
+/**
+ * Sets up handles and preloads required information for the toolbar to work.
+ * This must be called after it is attached to a visible document and before doing anything else.
+ */
+OO.ui.Toolbar.prototype.initialize = function () {
+ this.initialized = true;
+ this.narrowThreshold = this.$group.width() + this.$actions.width();
+ $( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
+ this.onWindowResize();
+};
+
+/**
+ * Setup toolbar.
+ *
+ * Tools can be specified in the following ways:
+ *
+ * - A specific tool: `{ name: 'tool-name' }` or `'tool-name'`
+ * - All tools in a group: `{ group: 'group-name' }`
+ * - All tools: `'*'` - Using this will make the group a list with a "More" label by default
+ *
+ * @param {Object.<string,Array>} groups List of tool group configurations
+ * @param {Array|string} [groups.include] Tools to include
+ * @param {Array|string} [groups.exclude] Tools to exclude
+ * @param {Array|string} [groups.promote] Tools to promote to the beginning
+ * @param {Array|string} [groups.demote] Tools to demote to the end
+ */
+OO.ui.Toolbar.prototype.setup = function ( groups ) {
+ var i, len, type, group,
+ items = [],
+ defaultType = 'bar';
+
+ // Cleanup previous groups
+ this.reset();
+
+ // Build out new groups
+ for ( i = 0, len = groups.length; i < len; i++ ) {
+ group = groups[ i ];
+ if ( group.include === '*' ) {
+ // Apply defaults to catch-all groups
+ if ( group.type === undefined ) {
+ group.type = 'list';
+ }
+ if ( group.label === undefined ) {
+ group.label = OO.ui.msg( 'ooui-toolbar-more' );
+ }
+ }
+ // Check type has been registered
+ type = this.getToolGroupFactory().lookup( group.type ) ? group.type : defaultType;
+ items.push(
+ this.getToolGroupFactory().create( type, this, group )
+ );
+ }
+ this.addItems( items );
+};
+
+/**
+ * Remove all tools and groups from the toolbar.
+ */
+OO.ui.Toolbar.prototype.reset = function () {
+ var i, len;
+
+ this.groups = [];
+ this.tools = {};
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ this.items[ i ].destroy();
+ }
+ this.clearItems();
+};
+
+/**
+ * Destroys toolbar, removing event handlers and DOM elements.
+ *
+ * Call this whenever you are done using a toolbar.
+ */
+OO.ui.Toolbar.prototype.destroy = function () {
+ $( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
+ this.reset();
+ this.$element.remove();
+};
+
+/**
+ * Check if tool has not been used yet.
+ *
+ * @param {string} name Symbolic name of tool
+ * @return {boolean} Tool is available
+ */
+OO.ui.Toolbar.prototype.isToolAvailable = function ( name ) {
+ return !this.tools[ name ];
+};
+
+/**
+ * Prevent tool from being used again.
+ *
+ * @param {OO.ui.Tool} tool Tool to reserve
+ */
+OO.ui.Toolbar.prototype.reserveTool = function ( tool ) {
+ this.tools[ tool.getName() ] = tool;
+};
+
+/**
+ * Allow tool to be used again.
+ *
+ * @param {OO.ui.Tool} tool Tool to release
+ */
+OO.ui.Toolbar.prototype.releaseTool = function ( tool ) {
+ delete this.tools[ tool.getName() ];
+};
+
+/**
+ * Get accelerator label for tool.
+ *
+ * This is a stub that should be overridden to provide access to accelerator information.
+ *
+ * @param {string} name Symbolic name of tool
+ * @return {string|undefined} Tool accelerator label if available
+ */
+OO.ui.Toolbar.prototype.getToolAccelerator = function () {
+ return undefined;
+};
diff --git a/vendor/oojs/oojs-ui/src/Widget.js b/vendor/oojs/oojs-ui/src/Widget.js
new file mode 100644
index 00000000..4929e055
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Widget.js
@@ -0,0 +1,102 @@
+/**
+ * Widgets are compositions of one or more OOjs UI elements that users can both view
+ * and interact with. All widgets can be configured and modified via a standard API,
+ * and their state can change dynamically according to a model.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [disabled=false] Disable the widget. Disabled widgets cannot be used and their
+ * appearance reflects this state.
+ */
+OO.ui.Widget = function OoUiWidget( config ) {
+ // Initialize config
+ config = $.extend( { disabled: false }, config );
+
+ // Parent constructor
+ OO.ui.Widget.super.call( this, config );
+
+ // Mixin constructors
+ OO.EventEmitter.call( this );
+
+ // Properties
+ this.disabled = null;
+ this.wasDisabled = null;
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-widget' );
+ this.setDisabled( !!config.disabled );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.Widget, OO.ui.Element );
+OO.mixinClass( OO.ui.Widget, OO.EventEmitter );
+
+/* Events */
+
+/**
+ * @event disable
+ *
+ * A 'disable' event is emitted when a widget is disabled.
+ *
+ * @param {boolean} disabled Widget is disabled
+ */
+
+/**
+ * @event toggle
+ *
+ * A 'toggle' event is emitted when the visibility of the widget changes.
+ *
+ * @param {boolean} visible Widget is visible
+ */
+
+/* Methods */
+
+/**
+ * Check if the widget is disabled.
+ *
+ * @return {boolean} Widget is disabled
+ */
+OO.ui.Widget.prototype.isDisabled = function () {
+ return this.disabled;
+};
+
+/**
+ * Set the 'disabled' state of the widget.
+ *
+ * When a widget is disabled, it cannot be used and its appearance is updated to reflect this state.
+ *
+ * @param {boolean} disabled Disable widget
+ * @chainable
+ */
+OO.ui.Widget.prototype.setDisabled = function ( disabled ) {
+ var isDisabled;
+
+ this.disabled = !!disabled;
+ isDisabled = this.isDisabled();
+ if ( isDisabled !== this.wasDisabled ) {
+ this.$element.toggleClass( 'oo-ui-widget-disabled', isDisabled );
+ this.$element.toggleClass( 'oo-ui-widget-enabled', !isDisabled );
+ this.$element.attr( 'aria-disabled', isDisabled.toString() );
+ this.emit( 'disable', isDisabled );
+ this.updateThemeClasses();
+ }
+ this.wasDisabled = isDisabled;
+
+ return this;
+};
+
+/**
+ * Update the disabled state, in case of changes in parent widget.
+ *
+ * @chainable
+ */
+OO.ui.Widget.prototype.updateDisabled = function () {
+ this.setDisabled( this.disabled );
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/Window.js b/vendor/oojs/oojs-ui/src/Window.js
new file mode 100644
index 00000000..c3c2e51d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/Window.js
@@ -0,0 +1,628 @@
+/**
+ * A window is a container for elements that are in a child frame. They are used with
+ * a window manager (OO.ui.WindowManager), which is used to open and close the window and control
+ * its presentation. The size of a window is specified using a symbolic name (e.g., ‘small’, ‘medium’,
+ * ‘large’), which is interpreted by the window manager. If the requested size is not recognized,
+ * the window manager will choose a sensible fallback.
+ *
+ * The lifecycle of a window has three primary stages (opening, opened, and closing) in which
+ * different processes are executed:
+ *
+ * **opening**: The opening stage begins when the window manager's {@link OO.ui.WindowManager#openWindow
+ * openWindow} or the window's {@link #open open} methods are used, and the window manager begins to open
+ * the window.
+ *
+ * - {@link #getSetupProcess} method is called and its result executed
+ * - {@link #getReadyProcess} method is called and its result executed
+ *
+ * **opened**: The window is now open
+ *
+ * **closing**: The closing stage begins when the window manager's
+ * {@link OO.ui.WindowManager#closeWindow closeWindow}
+ * or the window's {@link #close} methods are used, and the window manager begins to close the window.
+ *
+ * - {@link #getHoldProcess} method is called and its result executed
+ * - {@link #getTeardownProcess} method is called and its result executed. The window is now closed
+ *
+ * Each of the window's processes (setup, ready, hold, and teardown) can be extended in subclasses
+ * by overriding the window's #getSetupProcess, #getReadyProcess, #getHoldProcess and #getTeardownProcess
+ * methods. Note that each {@link OO.ui.Process process} is executed in series, so asynchronous
+ * processing can complete. Always assume window processes are executed asynchronously.
+ *
+ * For more information, please see the [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [size] Symbolic name of the dialog size: `small`, `medium`, `large`, `larger` or
+ * `full`. If omitted, the value of the {@link #static-size static size} property will be used.
+ */
+OO.ui.Window = function OoUiWindow( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.Window.super.call( this, config );
+
+ // Mixin constructors
+ OO.EventEmitter.call( this );
+
+ // Properties
+ this.manager = null;
+ this.size = config.size || this.constructor.static.size;
+ this.$frame = $( '<div>' );
+ this.$overlay = $( '<div>' );
+ this.$content = $( '<div>' );
+
+ // Initialization
+ this.$overlay.addClass( 'oo-ui-window-overlay' );
+ this.$content
+ .addClass( 'oo-ui-window-content' )
+ .attr( 'tabindex', 0 );
+ this.$frame
+ .addClass( 'oo-ui-window-frame' )
+ .append( this.$content );
+
+ this.$element
+ .addClass( 'oo-ui-window' )
+ .append( this.$frame, this.$overlay );
+
+ // Initially hidden - using #toggle may cause errors if subclasses override toggle with methods
+ // that reference properties not initialized at that time of parent class construction
+ // TODO: Find a better way to handle post-constructor setup
+ this.visible = false;
+ this.$element.addClass( 'oo-ui-element-hidden' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.Window, OO.ui.Element );
+OO.mixinClass( OO.ui.Window, OO.EventEmitter );
+
+/* Static Properties */
+
+/**
+ * Symbolic name of the window size: `small`, `medium`, `large`, `larger` or `full`.
+ *
+ * The static size is used if no #size is configured during construction.
+ *
+ * @static
+ * @inheritable
+ * @property {string}
+ */
+OO.ui.Window.static.size = 'medium';
+
+/* Methods */
+
+/**
+ * Handle mouse down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.Window.prototype.onMouseDown = function ( e ) {
+ // Prevent clicking on the click-block from stealing focus
+ if ( e.target === this.$element[ 0 ] ) {
+ return false;
+ }
+};
+
+/**
+ * Check if the window has been initialized.
+ *
+ * Initialization occurs when a window is added to a manager.
+ *
+ * @return {boolean} Window has been initialized
+ */
+OO.ui.Window.prototype.isInitialized = function () {
+ return !!this.manager;
+};
+
+/**
+ * Check if the window is visible.
+ *
+ * @return {boolean} Window is visible
+ */
+OO.ui.Window.prototype.isVisible = function () {
+ return this.visible;
+};
+
+/**
+ * Check if the window is opening.
+ *
+ * This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isOpening isOpening}
+ * method.
+ *
+ * @return {boolean} Window is opening
+ */
+OO.ui.Window.prototype.isOpening = function () {
+ return this.manager.isOpening( this );
+};
+
+/**
+ * Check if the window is closing.
+ *
+ * This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isClosing isClosing} method.
+ *
+ * @return {boolean} Window is closing
+ */
+OO.ui.Window.prototype.isClosing = function () {
+ return this.manager.isClosing( this );
+};
+
+/**
+ * Check if the window is opened.
+ *
+ * This method is a wrapper around the window manager's {@link OO.ui.WindowManager#isOpened isOpened} method.
+ *
+ * @return {boolean} Window is opened
+ */
+OO.ui.Window.prototype.isOpened = function () {
+ return this.manager.isOpened( this );
+};
+
+/**
+ * Get the window manager.
+ *
+ * All windows must be attached to a window manager, which is used to open
+ * and close the window and control its presentation.
+ *
+ * @return {OO.ui.WindowManager} Manager of window
+ */
+OO.ui.Window.prototype.getManager = function () {
+ return this.manager;
+};
+
+/**
+ * Get the symbolic name of the window size (e.g., `small` or `medium`).
+ *
+ * @return {string} Symbolic name of the size: `small`, `medium`, `large`, `larger`, `full`
+ */
+OO.ui.Window.prototype.getSize = function () {
+ return this.size;
+};
+
+/**
+ * Disable transitions on window's frame for the duration of the callback function, then enable them
+ * back.
+ *
+ * @private
+ * @param {Function} callback Function to call while transitions are disabled
+ */
+OO.ui.Window.prototype.withoutSizeTransitions = function ( callback ) {
+ // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements.
+ // Disable transitions first, otherwise we'll get values from when the window was animating.
+ var oldTransition,
+ styleObj = this.$frame[ 0 ].style;
+ oldTransition = styleObj.transition || styleObj.OTransition || styleObj.MsTransition ||
+ styleObj.MozTransition || styleObj.WebkitTransition;
+ styleObj.transition = styleObj.OTransition = styleObj.MsTransition =
+ styleObj.MozTransition = styleObj.WebkitTransition = 'none';
+ callback();
+ // Force reflow to make sure the style changes done inside callback really are not transitioned
+ this.$frame.height();
+ styleObj.transition = styleObj.OTransition = styleObj.MsTransition =
+ styleObj.MozTransition = styleObj.WebkitTransition = oldTransition;
+};
+
+/**
+ * Get the height of the full window contents (i.e., the window head, body and foot together).
+ *
+ * What consistitutes the head, body, and foot varies depending on the window type.
+ * A {@link OO.ui.MessageDialog message dialog} displays a title and message in its body,
+ * and any actions in the foot. A {@link OO.ui.ProcessDialog process dialog} displays a title
+ * and special actions in the head, and dialog content in the body.
+ *
+ * To get just the height of the dialog body, use the #getBodyHeight method.
+ *
+ * @return {number} The height of the window contents (the dialog head, body and foot) in pixels
+ */
+OO.ui.Window.prototype.getContentHeight = function () {
+ var bodyHeight,
+ win = this,
+ bodyStyleObj = this.$body[ 0 ].style,
+ frameStyleObj = this.$frame[ 0 ].style;
+
+ // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements.
+ // Disable transitions first, otherwise we'll get values from when the window was animating.
+ this.withoutSizeTransitions( function () {
+ var oldHeight = frameStyleObj.height,
+ oldPosition = bodyStyleObj.position;
+ frameStyleObj.height = '1px';
+ // Force body to resize to new width
+ bodyStyleObj.position = 'relative';
+ bodyHeight = win.getBodyHeight();
+ frameStyleObj.height = oldHeight;
+ bodyStyleObj.position = oldPosition;
+ } );
+
+ return (
+ // Add buffer for border
+ ( this.$frame.outerHeight() - this.$frame.innerHeight() ) +
+ // Use combined heights of children
+ ( this.$head.outerHeight( true ) + bodyHeight + this.$foot.outerHeight( true ) )
+ );
+};
+
+/**
+ * Get the height of the window body.
+ *
+ * To get the height of the full window contents (the window body, head, and foot together),
+ * use #getContentHeight.
+ *
+ * When this function is called, the window will temporarily have been resized
+ * to height=1px, so .scrollHeight measurements can be taken accurately.
+ *
+ * @return {number} Height of the window body in pixels
+ */
+OO.ui.Window.prototype.getBodyHeight = function () {
+ return this.$body[ 0 ].scrollHeight;
+};
+
+/**
+ * Get the directionality of the frame (right-to-left or left-to-right).
+ *
+ * @return {string} Directionality: `'ltr'` or `'rtl'`
+ */
+OO.ui.Window.prototype.getDir = function () {
+ return this.dir;
+};
+
+/**
+ * Get the 'setup' process.
+ *
+ * The setup process is used to set up a window for use in a particular context,
+ * based on the `data` argument. This method is called during the opening phase of the window’s
+ * lifecycle.
+ *
+ * Override this method to add additional steps to the ‘setup’ process the parent method provides
+ * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods
+ * of OO.ui.Process.
+ *
+ * To add window content that persists between openings, you may wish to use the #initialize method
+ * instead.
+ *
+ * @abstract
+ * @param {Object} [data] Window opening data
+ * @return {OO.ui.Process} Setup process
+ */
+OO.ui.Window.prototype.getSetupProcess = function () {
+ return new OO.ui.Process();
+};
+
+/**
+ * Get the ‘ready’ process.
+ *
+ * The ready process is used to ready a window for use in a particular
+ * context, based on the `data` argument. This method is called during the opening phase of
+ * the window’s lifecycle, after the window has been {@link #getSetupProcess setup}.
+ *
+ * Override this method to add additional steps to the ‘ready’ process the parent method
+ * provides using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next}
+ * methods of OO.ui.Process.
+ *
+ * @abstract
+ * @param {Object} [data] Window opening data
+ * @return {OO.ui.Process} Ready process
+ */
+OO.ui.Window.prototype.getReadyProcess = function () {
+ return new OO.ui.Process();
+};
+
+/**
+ * Get the 'hold' process.
+ *
+ * The hold proccess is used to keep a window from being used in a particular context,
+ * based on the `data` argument. This method is called during the closing phase of the window’s
+ * lifecycle.
+ *
+ * Override this method to add additional steps to the 'hold' process the parent method provides
+ * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods
+ * of OO.ui.Process.
+ *
+ * @abstract
+ * @param {Object} [data] Window closing data
+ * @return {OO.ui.Process} Hold process
+ */
+OO.ui.Window.prototype.getHoldProcess = function () {
+ return new OO.ui.Process();
+};
+
+/**
+ * Get the ‘teardown’ process.
+ *
+ * The teardown process is used to teardown a window after use. During teardown,
+ * user interactions within the window are conveyed and the window is closed, based on the `data`
+ * argument. This method is called during the closing phase of the window’s lifecycle.
+ *
+ * Override this method to add additional steps to the ‘teardown’ process the parent method provides
+ * using the {@link OO.ui.Process#first first} and {@link OO.ui.Process#next next} methods
+ * of OO.ui.Process.
+ *
+ * @abstract
+ * @param {Object} [data] Window closing data
+ * @return {OO.ui.Process} Teardown process
+ */
+OO.ui.Window.prototype.getTeardownProcess = function () {
+ return new OO.ui.Process();
+};
+
+/**
+ * Set the window manager.
+ *
+ * This will cause the window to initialize. Calling it more than once will cause an error.
+ *
+ * @param {OO.ui.WindowManager} manager Manager for this window
+ * @throws {Error} An error is thrown if the method is called more than once
+ * @chainable
+ */
+OO.ui.Window.prototype.setManager = function ( manager ) {
+ if ( this.manager ) {
+ throw new Error( 'Cannot set window manager, window already has a manager' );
+ }
+
+ this.manager = manager;
+ this.initialize();
+
+ return this;
+};
+
+/**
+ * Set the window size by symbolic name (e.g., 'small' or 'medium')
+ *
+ * @param {string} size Symbolic name of size: `small`, `medium`, `large`, `larger` or
+ * `full`
+ * @chainable
+ */
+OO.ui.Window.prototype.setSize = function ( size ) {
+ this.size = size;
+ this.updateSize();
+ return this;
+};
+
+/**
+ * Update the window size.
+ *
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
+ * @chainable
+ */
+OO.ui.Window.prototype.updateSize = function () {
+ if ( !this.manager ) {
+ throw new Error( 'Cannot update window size, must be attached to a manager' );
+ }
+
+ this.manager.updateWindowSize( this );
+
+ return this;
+};
+
+/**
+ * Set window dimensions. This method is called by the {@link OO.ui.WindowManager window manager}
+ * when the window is opening. In general, setDimensions should not be called directly.
+ *
+ * To set the size of the window, use the #setSize method.
+ *
+ * @param {Object} dim CSS dimension properties
+ * @param {string|number} [dim.width] Width
+ * @param {string|number} [dim.minWidth] Minimum width
+ * @param {string|number} [dim.maxWidth] Maximum width
+ * @param {string|number} [dim.width] Height, omit to set based on height of contents
+ * @param {string|number} [dim.minWidth] Minimum height
+ * @param {string|number} [dim.maxWidth] Maximum height
+ * @chainable
+ */
+OO.ui.Window.prototype.setDimensions = function ( dim ) {
+ var height,
+ win = this,
+ styleObj = this.$frame[ 0 ].style;
+
+ // Calculate the height we need to set using the correct width
+ if ( dim.height === undefined ) {
+ this.withoutSizeTransitions( function () {
+ var oldWidth = styleObj.width;
+ win.$frame.css( 'width', dim.width || '' );
+ height = win.getContentHeight();
+ styleObj.width = oldWidth;
+ } );
+ } else {
+ height = dim.height;
+ }
+
+ this.$frame.css( {
+ width: dim.width || '',
+ minWidth: dim.minWidth || '',
+ maxWidth: dim.maxWidth || '',
+ height: height || '',
+ minHeight: dim.minHeight || '',
+ maxHeight: dim.maxHeight || ''
+ } );
+
+ return this;
+};
+
+/**
+ * Initialize window contents.
+ *
+ * Before the window is opened for the first time, #initialize is called so that content that
+ * persists between openings can be added to the window.
+ *
+ * To set up a window with new content each time the window opens, use #getSetupProcess.
+ *
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
+ * @chainable
+ */
+OO.ui.Window.prototype.initialize = function () {
+ if ( !this.manager ) {
+ throw new Error( 'Cannot initialize window, must be attached to a manager' );
+ }
+
+ // Properties
+ this.$head = $( '<div>' );
+ this.$body = $( '<div>' );
+ this.$foot = $( '<div>' );
+ this.dir = OO.ui.Element.static.getDir( this.$content ) || 'ltr';
+ this.$document = $( this.getElementDocument() );
+
+ // Events
+ this.$element.on( 'mousedown', this.onMouseDown.bind( this ) );
+
+ // Initialization
+ this.$head.addClass( 'oo-ui-window-head' );
+ this.$body.addClass( 'oo-ui-window-body' );
+ this.$foot.addClass( 'oo-ui-window-foot' );
+ this.$content.append( this.$head, this.$body, this.$foot );
+
+ return this;
+};
+
+/**
+ * Open the window.
+ *
+ * This method is a wrapper around a call to the window manager’s {@link OO.ui.WindowManager#openWindow openWindow}
+ * method, which returns a promise resolved when the window is done opening.
+ *
+ * To customize the window each time it opens, use #getSetupProcess or #getReadyProcess.
+ *
+ * @param {Object} [data] Window opening data
+ * @return {jQuery.Promise} Promise resolved with a value when the window is opened, or rejected
+ * if the window fails to open. When the promise is resolved successfully, the first argument of the
+ * value is a new promise, which is resolved when the window begins closing.
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
+ */
+OO.ui.Window.prototype.open = function ( data ) {
+ if ( !this.manager ) {
+ throw new Error( 'Cannot open window, must be attached to a manager' );
+ }
+
+ return this.manager.openWindow( this, data );
+};
+
+/**
+ * Close the window.
+ *
+ * This method is a wrapper around a call to the window
+ * manager’s {@link OO.ui.WindowManager#closeWindow closeWindow} method,
+ * which returns a closing promise resolved when the window is done closing.
+ *
+ * The window's #getHoldProcess and #getTeardownProcess methods are called during the closing
+ * phase of the window’s lifecycle and can be used to specify closing behavior each time
+ * the window closes.
+ *
+ * @param {Object} [data] Window closing data
+ * @return {jQuery.Promise} Promise resolved when window is closed
+ * @throws {Error} An error is thrown if the window is not attached to a window manager
+ */
+OO.ui.Window.prototype.close = function ( data ) {
+ if ( !this.manager ) {
+ throw new Error( 'Cannot close window, must be attached to a manager' );
+ }
+
+ return this.manager.closeWindow( this, data );
+};
+
+/**
+ * Setup window.
+ *
+ * This is called by OO.ui.WindowManager during window opening, and should not be called directly
+ * by other systems.
+ *
+ * @param {Object} [data] Window opening data
+ * @return {jQuery.Promise} Promise resolved when window is setup
+ */
+OO.ui.Window.prototype.setup = function ( data ) {
+ var win = this,
+ deferred = $.Deferred();
+
+ this.toggle( true );
+
+ this.getSetupProcess( data ).execute().done( function () {
+ // Force redraw by asking the browser to measure the elements' widths
+ win.$element.addClass( 'oo-ui-window-active oo-ui-window-setup' ).width();
+ win.$content.addClass( 'oo-ui-window-content-setup' ).width();
+ deferred.resolve();
+ } );
+
+ return deferred.promise();
+};
+
+/**
+ * Ready window.
+ *
+ * This is called by OO.ui.WindowManager during window opening, and should not be called directly
+ * by other systems.
+ *
+ * @param {Object} [data] Window opening data
+ * @return {jQuery.Promise} Promise resolved when window is ready
+ */
+OO.ui.Window.prototype.ready = function ( data ) {
+ var win = this,
+ deferred = $.Deferred();
+
+ this.$content.focus();
+ this.getReadyProcess( data ).execute().done( function () {
+ // Force redraw by asking the browser to measure the elements' widths
+ win.$element.addClass( 'oo-ui-window-ready' ).width();
+ win.$content.addClass( 'oo-ui-window-content-ready' ).width();
+ deferred.resolve();
+ } );
+
+ return deferred.promise();
+};
+
+/**
+ * Hold window.
+ *
+ * This is called by OO.ui.WindowManager during window closing, and should not be called directly
+ * by other systems.
+ *
+ * @param {Object} [data] Window closing data
+ * @return {jQuery.Promise} Promise resolved when window is held
+ */
+OO.ui.Window.prototype.hold = function ( data ) {
+ var win = this,
+ deferred = $.Deferred();
+
+ this.getHoldProcess( data ).execute().done( function () {
+ // Get the focused element within the window's content
+ var $focus = win.$content.find( OO.ui.Element.static.getDocument( win.$content ).activeElement );
+
+ // Blur the focused element
+ if ( $focus.length ) {
+ $focus[ 0 ].blur();
+ }
+
+ // Force redraw by asking the browser to measure the elements' widths
+ win.$element.removeClass( 'oo-ui-window-ready' ).width();
+ win.$content.removeClass( 'oo-ui-window-content-ready' ).width();
+ deferred.resolve();
+ } );
+
+ return deferred.promise();
+};
+
+/**
+ * Teardown window.
+ *
+ * This is called by OO.ui.WindowManager during window closing, and should not be called directly
+ * by other systems.
+ *
+ * @param {Object} [data] Window closing data
+ * @return {jQuery.Promise} Promise resolved when window is torn down
+ */
+OO.ui.Window.prototype.teardown = function ( data ) {
+ var win = this;
+
+ return this.getTeardownProcess( data ).execute()
+ .done( function () {
+ // Force redraw by asking the browser to measure the elements' widths
+ win.$element.removeClass( 'oo-ui-window-active oo-ui-window-setup' ).width();
+ win.$content.removeClass( 'oo-ui-window-content-setup' ).width();
+ win.toggle( false );
+ } );
+};
diff --git a/vendor/oojs/oojs-ui/src/WindowManager.js b/vendor/oojs/oojs-ui/src/WindowManager.js
new file mode 100644
index 00000000..4731011a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/WindowManager.js
@@ -0,0 +1,675 @@
+/**
+ * Window managers are used to open and close {@link OO.ui.Window windows} and control their presentation.
+ * Managed windows are mutually exclusive. If a new window is opened while a current window is opening
+ * or is opened, the current window will be closed and any ongoing {@link OO.ui.Process process} will be cancelled. Windows
+ * themselves are persistent and—rather than being torn down when closed—can be repopulated with the
+ * pertinent data and reused.
+ *
+ * Over the lifecycle of a window, the window manager makes available three promises: `opening`,
+ * `opened`, and `closing`, which represent the primary stages of the cycle:
+ *
+ * **Opening**: the opening stage begins when the window manager’s #openWindow or a window’s
+ * {@link OO.ui.Window#open open} method is used, and the window manager begins to open the window.
+ *
+ * - an `opening` event is emitted with an `opening` promise
+ * - the #getSetupDelay method is called and the returned value is used to time a pause in execution before
+ * the window’s {@link OO.ui.Window#getSetupProcess getSetupProcess} method is called on the
+ * window and its result executed
+ * - a `setup` progress notification is emitted from the `opening` promise
+ * - the #getReadyDelay method is called the returned value is used to time a pause in execution before
+ * the window’s {@link OO.ui.Window#getReadyProcess getReadyProcess} method is called on the
+ * window and its result executed
+ * - a `ready` progress notification is emitted from the `opening` promise
+ * - the `opening` promise is resolved with an `opened` promise
+ *
+ * **Opened**: the window is now open.
+ *
+ * **Closing**: the closing stage begins when the window manager's #closeWindow or the
+ * window's {@link OO.ui.Window#close close} methods is used, and the window manager begins
+ * to close the window.
+ *
+ * - the `opened` promise is resolved with `closing` promise and a `closing` event is emitted
+ * - the #getHoldDelay method is called and the returned value is used to time a pause in execution before
+ * the window's {@link OO.ui.Window#getHoldProcess getHoldProces} method is called on the
+ * window and its result executed
+ * - a `hold` progress notification is emitted from the `closing` promise
+ * - the #getTeardownDelay() method is called and the returned value is used to time a pause in execution before
+ * the window's {@link OO.ui.Window#getTeardownProcess getTeardownProcess} method is called on the
+ * window and its result executed
+ * - a `teardown` progress notification is emitted from the `closing` promise
+ * - the `closing` promise is resolved. The window is now closed
+ *
+ * See the [OOjs UI documentation on MediaWiki][1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
+ *
+ * @class
+ * @extends OO.ui.Element
+ * @mixins OO.EventEmitter
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.Factory} [factory] Window factory to use for automatic instantiation
+ * Note that window classes that are instantiated with a factory must have
+ * a {@link OO.ui.Dialog#static-name static name} property that specifies a symbolic name.
+ * @cfg {boolean} [modal=true] Prevent interaction outside the dialog
+ */
+OO.ui.WindowManager = function OoUiWindowManager( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.WindowManager.super.call( this, config );
+
+ // Mixin constructors
+ OO.EventEmitter.call( this );
+
+ // Properties
+ this.factory = config.factory;
+ this.modal = config.modal === undefined || !!config.modal;
+ this.windows = {};
+ this.opening = null;
+ this.opened = null;
+ this.closing = null;
+ this.preparingToOpen = null;
+ this.preparingToClose = null;
+ this.currentWindow = null;
+ this.globalEvents = false;
+ this.$ariaHidden = null;
+ this.onWindowResizeTimeout = null;
+ this.onWindowResizeHandler = this.onWindowResize.bind( this );
+ this.afterWindowResizeHandler = this.afterWindowResize.bind( this );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-windowManager' )
+ .toggleClass( 'oo-ui-windowManager-modal', this.modal );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.WindowManager, OO.ui.Element );
+OO.mixinClass( OO.ui.WindowManager, OO.EventEmitter );
+
+/* Events */
+
+/**
+ * An 'opening' event is emitted when the window begins to be opened.
+ *
+ * @event opening
+ * @param {OO.ui.Window} win Window that's being opened
+ * @param {jQuery.Promise} opening An `opening` promise resolved with a value when the window is opened successfully.
+ * When the `opening` promise is resolved, the first argument of the value is an 'opened' promise, the second argument
+ * is the opening data. The `opening` promise emits `setup` and `ready` notifications when those processes are complete.
+ * @param {Object} data Window opening data
+ */
+
+/**
+ * A 'closing' event is emitted when the window begins to be closed.
+ *
+ * @event closing
+ * @param {OO.ui.Window} win Window that's being closed
+ * @param {jQuery.Promise} closing A `closing` promise is resolved with a value when the window
+ * is closed successfully. The promise emits `hold` and `teardown` notifications when those
+ * processes are complete. When the `closing` promise is resolved, the first argument of its value
+ * is the closing data.
+ * @param {Object} data Window closing data
+ */
+
+/**
+ * A 'resize' event is emitted when a window is resized.
+ *
+ * @event resize
+ * @param {OO.ui.Window} win Window that was resized
+ */
+
+/* Static Properties */
+
+/**
+ * Map of the symbolic name of each window size and its CSS properties.
+ *
+ * @static
+ * @inheritable
+ * @property {Object}
+ */
+OO.ui.WindowManager.static.sizes = {
+ small: {
+ width: 300
+ },
+ medium: {
+ width: 500
+ },
+ large: {
+ width: 700
+ },
+ larger: {
+ width: 900
+ },
+ full: {
+ // These can be non-numeric because they are never used in calculations
+ width: '100%',
+ height: '100%'
+ }
+};
+
+/**
+ * Symbolic name of the default window size.
+ *
+ * The default size is used if the window's requested size is not recognized.
+ *
+ * @static
+ * @inheritable
+ * @property {string}
+ */
+OO.ui.WindowManager.static.defaultSize = 'medium';
+
+/* Methods */
+
+/**
+ * Handle window resize events.
+ *
+ * @private
+ * @param {jQuery.Event} e Window resize event
+ */
+OO.ui.WindowManager.prototype.onWindowResize = function () {
+ clearTimeout( this.onWindowResizeTimeout );
+ this.onWindowResizeTimeout = setTimeout( this.afterWindowResizeHandler, 200 );
+};
+
+/**
+ * Handle window resize events.
+ *
+ * @private
+ * @param {jQuery.Event} e Window resize event
+ */
+OO.ui.WindowManager.prototype.afterWindowResize = function () {
+ if ( this.currentWindow ) {
+ this.updateWindowSize( this.currentWindow );
+ }
+};
+
+/**
+ * Check if window is opening.
+ *
+ * @return {boolean} Window is opening
+ */
+OO.ui.WindowManager.prototype.isOpening = function ( win ) {
+ return win === this.currentWindow && !!this.opening && this.opening.state() === 'pending';
+};
+
+/**
+ * Check if window is closing.
+ *
+ * @return {boolean} Window is closing
+ */
+OO.ui.WindowManager.prototype.isClosing = function ( win ) {
+ return win === this.currentWindow && !!this.closing && this.closing.state() === 'pending';
+};
+
+/**
+ * Check if window is opened.
+ *
+ * @return {boolean} Window is opened
+ */
+OO.ui.WindowManager.prototype.isOpened = function ( win ) {
+ return win === this.currentWindow && !!this.opened && this.opened.state() === 'pending';
+};
+
+/**
+ * Check if a window is being managed.
+ *
+ * @param {OO.ui.Window} win Window to check
+ * @return {boolean} Window is being managed
+ */
+OO.ui.WindowManager.prototype.hasWindow = function ( win ) {
+ var name;
+
+ for ( name in this.windows ) {
+ if ( this.windows[ name ] === win ) {
+ return true;
+ }
+ }
+
+ return false;
+};
+
+/**
+ * Get the number of milliseconds to wait after opening begins before executing the ‘setup’ process.
+ *
+ * @param {OO.ui.Window} win Window being opened
+ * @param {Object} [data] Window opening data
+ * @return {number} Milliseconds to wait
+ */
+OO.ui.WindowManager.prototype.getSetupDelay = function () {
+ return 0;
+};
+
+/**
+ * Get the number of milliseconds to wait after setup has finished before executing the ‘ready’ process.
+ *
+ * @param {OO.ui.Window} win Window being opened
+ * @param {Object} [data] Window opening data
+ * @return {number} Milliseconds to wait
+ */
+OO.ui.WindowManager.prototype.getReadyDelay = function () {
+ return 0;
+};
+
+/**
+ * Get the number of milliseconds to wait after closing has begun before executing the 'hold' process.
+ *
+ * @param {OO.ui.Window} win Window being closed
+ * @param {Object} [data] Window closing data
+ * @return {number} Milliseconds to wait
+ */
+OO.ui.WindowManager.prototype.getHoldDelay = function () {
+ return 0;
+};
+
+/**
+ * Get the number of milliseconds to wait after the ‘hold’ process has finished before
+ * executing the ‘teardown’ process.
+ *
+ * @param {OO.ui.Window} win Window being closed
+ * @param {Object} [data] Window closing data
+ * @return {number} Milliseconds to wait
+ */
+OO.ui.WindowManager.prototype.getTeardownDelay = function () {
+ return this.modal ? 250 : 0;
+};
+
+/**
+ * Get a window by its symbolic name.
+ *
+ * If the window is not yet instantiated and its symbolic name is recognized by a factory, it will be
+ * instantiated and added to the window manager automatically. Please see the [OOjs UI documentation on MediaWiki][3]
+ * for more information about using factories.
+ * [3]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
+ *
+ * @param {string} name Symbolic name of the window
+ * @return {jQuery.Promise} Promise resolved with matching window, or rejected with an OO.ui.Error
+ * @throws {Error} An error is thrown if the symbolic name is not recognized by the factory.
+ * @throws {Error} An error is thrown if the named window is not recognized as a managed window.
+ */
+OO.ui.WindowManager.prototype.getWindow = function ( name ) {
+ var deferred = $.Deferred(),
+ win = this.windows[ name ];
+
+ if ( !( win instanceof OO.ui.Window ) ) {
+ if ( this.factory ) {
+ if ( !this.factory.lookup( name ) ) {
+ deferred.reject( new OO.ui.Error(
+ 'Cannot auto-instantiate window: symbolic name is unrecognized by the factory'
+ ) );
+ } else {
+ win = this.factory.create( name );
+ this.addWindows( [ win ] );
+ deferred.resolve( win );
+ }
+ } else {
+ deferred.reject( new OO.ui.Error(
+ 'Cannot get unmanaged window: symbolic name unrecognized as a managed window'
+ ) );
+ }
+ } else {
+ deferred.resolve( win );
+ }
+
+ return deferred.promise();
+};
+
+/**
+ * Get current window.
+ *
+ * @return {OO.ui.Window|null} Currently opening/opened/closing window
+ */
+OO.ui.WindowManager.prototype.getCurrentWindow = function () {
+ return this.currentWindow;
+};
+
+/**
+ * Open a window.
+ *
+ * @param {OO.ui.Window|string} win Window object or symbolic name of window to open
+ * @param {Object} [data] Window opening data
+ * @return {jQuery.Promise} An `opening` promise resolved when the window is done opening.
+ * See {@link #event-opening 'opening' event} for more information about `opening` promises.
+ * @fires opening
+ */
+OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
+ var manager = this,
+ opening = $.Deferred();
+
+ // Argument handling
+ if ( typeof win === 'string' ) {
+ return this.getWindow( win ).then( function ( win ) {
+ return manager.openWindow( win, data );
+ } );
+ }
+
+ // Error handling
+ if ( !this.hasWindow( win ) ) {
+ opening.reject( new OO.ui.Error(
+ 'Cannot open window: window is not attached to manager'
+ ) );
+ } else if ( this.preparingToOpen || this.opening || this.opened ) {
+ opening.reject( new OO.ui.Error(
+ 'Cannot open window: another window is opening or open'
+ ) );
+ }
+
+ // Window opening
+ if ( opening.state() !== 'rejected' ) {
+ // If a window is currently closing, wait for it to complete
+ this.preparingToOpen = $.when( this.closing );
+ // Ensure handlers get called after preparingToOpen is set
+ this.preparingToOpen.done( function () {
+ if ( manager.modal ) {
+ manager.toggleGlobalEvents( true );
+ manager.toggleAriaIsolation( true );
+ }
+ manager.currentWindow = win;
+ manager.opening = opening;
+ manager.preparingToOpen = null;
+ manager.emit( 'opening', win, opening, data );
+ setTimeout( function () {
+ win.setup( data ).then( function () {
+ manager.updateWindowSize( win );
+ manager.opening.notify( { state: 'setup' } );
+ setTimeout( function () {
+ win.ready( data ).then( function () {
+ manager.opening.notify( { state: 'ready' } );
+ manager.opening = null;
+ manager.opened = $.Deferred();
+ opening.resolve( manager.opened.promise(), data );
+ } );
+ }, manager.getReadyDelay() );
+ } );
+ }, manager.getSetupDelay() );
+ } );
+ }
+
+ return opening.promise();
+};
+
+/**
+ * Close a window.
+ *
+ * @param {OO.ui.Window|string} win Window object or symbolic name of window to close
+ * @param {Object} [data] Window closing data
+ * @return {jQuery.Promise} A `closing` promise resolved when the window is done closing.
+ * See {@link #event-closing 'closing' event} for more information about closing promises.
+ * @throws {Error} An error is thrown if the window is not managed by the window manager.
+ * @fires closing
+ */
+OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
+ var manager = this,
+ closing = $.Deferred(),
+ opened;
+
+ // Argument handling
+ if ( typeof win === 'string' ) {
+ win = this.windows[ win ];
+ } else if ( !this.hasWindow( win ) ) {
+ win = null;
+ }
+
+ // Error handling
+ if ( !win ) {
+ closing.reject( new OO.ui.Error(
+ 'Cannot close window: window is not attached to manager'
+ ) );
+ } else if ( win !== this.currentWindow ) {
+ closing.reject( new OO.ui.Error(
+ 'Cannot close window: window already closed with different data'
+ ) );
+ } else if ( this.preparingToClose || this.closing ) {
+ closing.reject( new OO.ui.Error(
+ 'Cannot close window: window already closing with different data'
+ ) );
+ }
+
+ // Window closing
+ if ( closing.state() !== 'rejected' ) {
+ // If the window is currently opening, close it when it's done
+ this.preparingToClose = $.when( this.opening );
+ // Ensure handlers get called after preparingToClose is set
+ this.preparingToClose.done( function () {
+ manager.closing = closing;
+ manager.preparingToClose = null;
+ manager.emit( 'closing', win, closing, data );
+ opened = manager.opened;
+ manager.opened = null;
+ opened.resolve( closing.promise(), data );
+ setTimeout( function () {
+ win.hold( data ).then( function () {
+ closing.notify( { state: 'hold' } );
+ setTimeout( function () {
+ win.teardown( data ).then( function () {
+ closing.notify( { state: 'teardown' } );
+ if ( manager.modal ) {
+ manager.toggleGlobalEvents( false );
+ manager.toggleAriaIsolation( false );
+ }
+ manager.closing = null;
+ manager.currentWindow = null;
+ closing.resolve( data );
+ } );
+ }, manager.getTeardownDelay() );
+ } );
+ }, manager.getHoldDelay() );
+ } );
+ }
+
+ return closing.promise();
+};
+
+/**
+ * Add windows to the window manager.
+ *
+ * Windows can be added by reference, symbolic name, or explicitly defined symbolic names.
+ * See the [OOjs ui documentation on MediaWiki] [2] for examples.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Window_managers
+ *
+ * @param {Object.<string,OO.ui.Window>|OO.ui.Window[]} windows An array of window objects specified
+ * by reference, symbolic name, or explicitly defined symbolic names.
+ * @throws {Error} An error is thrown if a window is added by symbolic name, but has neither an
+ * explicit nor a statically configured symbolic name.
+ */
+OO.ui.WindowManager.prototype.addWindows = function ( windows ) {
+ var i, len, win, name, list;
+
+ if ( Array.isArray( windows ) ) {
+ // Convert to map of windows by looking up symbolic names from static configuration
+ list = {};
+ for ( i = 0, len = windows.length; i < len; i++ ) {
+ name = windows[ i ].constructor.static.name;
+ if ( typeof name !== 'string' ) {
+ throw new Error( 'Cannot add window' );
+ }
+ list[ name ] = windows[ i ];
+ }
+ } else if ( OO.isPlainObject( windows ) ) {
+ list = windows;
+ }
+
+ // Add windows
+ for ( name in list ) {
+ win = list[ name ];
+ this.windows[ name ] = win.toggle( false );
+ this.$element.append( win.$element );
+ win.setManager( this );
+ }
+};
+
+/**
+ * Remove the specified windows from the windows manager.
+ *
+ * Windows will be closed before they are removed. If you wish to remove all windows, you may wish to use
+ * the #clearWindows method instead. If you no longer need the window manager and want to ensure that it no
+ * longer listens to events, use the #destroy method.
+ *
+ * @param {string[]} names Symbolic names of windows to remove
+ * @return {jQuery.Promise} Promise resolved when window is closed and removed
+ * @throws {Error} An error is thrown if the named windows are not managed by the window manager.
+ */
+OO.ui.WindowManager.prototype.removeWindows = function ( names ) {
+ var i, len, win, name, cleanupWindow,
+ manager = this,
+ promises = [],
+ cleanup = function ( name, win ) {
+ delete manager.windows[ name ];
+ win.$element.detach();
+ };
+
+ for ( i = 0, len = names.length; i < len; i++ ) {
+ name = names[ i ];
+ win = this.windows[ name ];
+ if ( !win ) {
+ throw new Error( 'Cannot remove window' );
+ }
+ cleanupWindow = cleanup.bind( null, name, win );
+ promises.push( this.closeWindow( name ).then( cleanupWindow, cleanupWindow ) );
+ }
+
+ return $.when.apply( $, promises );
+};
+
+/**
+ * Remove all windows from the window manager.
+ *
+ * Windows will be closed before they are removed. Note that the window manager, though not in use, will still
+ * listen to events. If the window manager will not be used again, you may wish to use the #destroy method instead.
+ * To remove just a subset of windows, use the #removeWindows method.
+ *
+ * @return {jQuery.Promise} Promise resolved when all windows are closed and removed
+ */
+OO.ui.WindowManager.prototype.clearWindows = function () {
+ return this.removeWindows( Object.keys( this.windows ) );
+};
+
+/**
+ * Set dialog size. In general, this method should not be called directly.
+ *
+ * Fullscreen mode will be used if the dialog is too wide to fit in the screen.
+ *
+ * @chainable
+ */
+OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
+ // Bypass for non-current, and thus invisible, windows
+ if ( win !== this.currentWindow ) {
+ return;
+ }
+
+ var viewport = OO.ui.Element.static.getDimensions( win.getElementWindow() ),
+ sizes = this.constructor.static.sizes,
+ size = win.getSize();
+
+ if ( !sizes[ size ] ) {
+ size = this.constructor.static.defaultSize;
+ }
+ if ( size !== 'full' && viewport.rect.right - viewport.rect.left < sizes[ size ].width ) {
+ size = 'full';
+ }
+
+ this.$element.toggleClass( 'oo-ui-windowManager-fullscreen', size === 'full' );
+ this.$element.toggleClass( 'oo-ui-windowManager-floating', size !== 'full' );
+ win.setDimensions( sizes[ size ] );
+
+ this.emit( 'resize', win );
+
+ return this;
+};
+
+/**
+ * Bind or unbind global events for scrolling.
+ *
+ * @private
+ * @param {boolean} [on] Bind global events
+ * @chainable
+ */
+OO.ui.WindowManager.prototype.toggleGlobalEvents = function ( on ) {
+ on = on === undefined ? !!this.globalEvents : !!on;
+
+ var scrollWidth, bodyMargin,
+ $body = $( this.getElementDocument().body ),
+ // We could have multiple window managers open so only modify
+ // the body css at the bottom of the stack
+ stackDepth = $body.data( 'windowManagerGlobalEvents' ) || 0 ;
+
+ if ( on ) {
+ if ( !this.globalEvents ) {
+ $( this.getElementWindow() ).on( {
+ // Start listening for top-level window dimension changes
+ 'orientationchange resize': this.onWindowResizeHandler
+ } );
+ if ( stackDepth === 0 ) {
+ scrollWidth = window.innerWidth - document.documentElement.clientWidth;
+ bodyMargin = parseFloat( $body.css( 'margin-right' ) ) || 0;
+ $body.css( {
+ overflow: 'hidden',
+ 'margin-right': bodyMargin + scrollWidth
+ } );
+ }
+ stackDepth++;
+ this.globalEvents = true;
+ }
+ } else if ( this.globalEvents ) {
+ $( this.getElementWindow() ).off( {
+ // Stop listening for top-level window dimension changes
+ 'orientationchange resize': this.onWindowResizeHandler
+ } );
+ stackDepth--;
+ if ( stackDepth === 0 ) {
+ $body.css( {
+ overflow: '',
+ 'margin-right': ''
+ } );
+ }
+ this.globalEvents = false;
+ }
+ $body.data( 'windowManagerGlobalEvents', stackDepth );
+
+ return this;
+};
+
+/**
+ * Toggle screen reader visibility of content other than the window manager.
+ *
+ * @private
+ * @param {boolean} [isolate] Make only the window manager visible to screen readers
+ * @chainable
+ */
+OO.ui.WindowManager.prototype.toggleAriaIsolation = function ( isolate ) {
+ isolate = isolate === undefined ? !this.$ariaHidden : !!isolate;
+
+ if ( isolate ) {
+ if ( !this.$ariaHidden ) {
+ // Hide everything other than the window manager from screen readers
+ this.$ariaHidden = $( 'body' )
+ .children()
+ .not( this.$element.parentsUntil( 'body' ).last() )
+ .attr( 'aria-hidden', '' );
+ }
+ } else if ( this.$ariaHidden ) {
+ // Restore screen reader visibility
+ this.$ariaHidden.removeAttr( 'aria-hidden' );
+ this.$ariaHidden = null;
+ }
+
+ return this;
+};
+
+/**
+ * Destroy the window manager.
+ *
+ * Destroying the window manager ensures that it will no longer listen to events. If you would like to
+ * continue using the window manager, but wish to remove all windows from it, use the #clearWindows method
+ * instead.
+ */
+OO.ui.WindowManager.prototype.destroy = function () {
+ this.toggleGlobalEvents( false );
+ this.toggleAriaIsolation( false );
+ this.clearWindows();
+ this.$element.remove();
+};
diff --git a/vendor/oojs/oojs-ui/src/core.js b/vendor/oojs/oojs-ui/src/core.js
new file mode 100644
index 00000000..1331f5cc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/core.js
@@ -0,0 +1,286 @@
+/**
+ * Namespace for all classes, static methods and static properties.
+ *
+ * @class
+ * @singleton
+ */
+OO.ui = {};
+
+OO.ui.bind = $.proxy;
+
+/**
+ * @property {Object}
+ */
+OO.ui.Keys = {
+ UNDEFINED: 0,
+ BACKSPACE: 8,
+ DELETE: 46,
+ LEFT: 37,
+ RIGHT: 39,
+ UP: 38,
+ DOWN: 40,
+ ENTER: 13,
+ END: 35,
+ HOME: 36,
+ TAB: 9,
+ PAGEUP: 33,
+ PAGEDOWN: 34,
+ ESCAPE: 27,
+ SHIFT: 16,
+ SPACE: 32
+};
+
+/**
+ * Check if an element is focusable.
+ * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14
+ *
+ * @param {jQuery} element Element to test
+ * @return {Boolean} [description]
+ */
+OO.ui.isFocusableElement = function ( $element ) {
+ var node = $element[0],
+ nodeName = node.nodeName.toLowerCase(),
+ // Check if the element have tabindex set
+ isInElementGroup = /^(input|select|textarea|button|object)$/.test( nodeName ),
+ // Check if the element is a link with href or if it has tabindex
+ isOtherElement = (
+ ( nodeName === 'a' && node.href ) ||
+ !isNaN( $element.attr( 'tabindex' ) )
+ ),
+ // Check if the element is visible
+ isVisible = (
+ // This is quicker than calling $element.is( ':visible' )
+ $.expr.filters.visible( node ) &&
+ // Check that all parents are visible
+ !$element.parents().addBack().filter( function () {
+ return $.css( this, 'visibility' ) === 'hidden';
+ } ).length
+ );
+
+ return (
+ ( isInElementGroup ? !node.disabled : isOtherElement ) &&
+ isVisible
+ );
+};
+
+/**
+ * Get the user's language and any fallback languages.
+ *
+ * These language codes are used to localize user interface elements in the user's language.
+ *
+ * In environments that provide a localization system, this function should be overridden to
+ * return the user's language(s). The default implementation returns English (en) only.
+ *
+ * @return {string[]} Language codes, in descending order of priority
+ */
+OO.ui.getUserLanguages = function () {
+ return [ 'en' ];
+};
+
+/**
+ * Get a value in an object keyed by language code.
+ *
+ * @param {Object.<string,Mixed>} obj Object keyed by language code
+ * @param {string|null} [lang] Language code, if omitted or null defaults to any user language
+ * @param {string} [fallback] Fallback code, used if no matching language can be found
+ * @return {Mixed} Local value
+ */
+OO.ui.getLocalValue = function ( obj, lang, fallback ) {
+ var i, len, langs;
+
+ // Requested language
+ if ( obj[ lang ] ) {
+ return obj[ lang ];
+ }
+ // Known user language
+ langs = OO.ui.getUserLanguages();
+ for ( i = 0, len = langs.length; i < len; i++ ) {
+ lang = langs[ i ];
+ if ( obj[ lang ] ) {
+ return obj[ lang ];
+ }
+ }
+ // Fallback language
+ if ( obj[ fallback ] ) {
+ return obj[ fallback ];
+ }
+ // First existing language
+ for ( lang in obj ) {
+ return obj[ lang ];
+ }
+
+ return undefined;
+};
+
+/**
+ * Check if a node is contained within another node
+ *
+ * Similar to jQuery#contains except a list of containers can be supplied
+ * and a boolean argument allows you to include the container in the match list
+ *
+ * @param {HTMLElement|HTMLElement[]} containers Container node(s) to search in
+ * @param {HTMLElement} contained Node to find
+ * @param {boolean} [matchContainers] Include the container(s) in the list of nodes to match, otherwise only match descendants
+ * @return {boolean} The node is in the list of target nodes
+ */
+OO.ui.contains = function ( containers, contained, matchContainers ) {
+ var i;
+ if ( !Array.isArray( containers ) ) {
+ containers = [ containers ];
+ }
+ for ( i = containers.length - 1; i >= 0; i-- ) {
+ if ( ( matchContainers && contained === containers[ i ] ) || $.contains( containers[ i ], contained ) ) {
+ return true;
+ }
+ }
+ return false;
+};
+
+/**
+ * Return a function, that, as long as it continues to be invoked, will not
+ * be triggered. The function will be called after it stops being called for
+ * N milliseconds. If `immediate` is passed, trigger the function on the
+ * leading edge, instead of the trailing.
+ *
+ * Ported from: http://underscorejs.org/underscore.js
+ *
+ * @param {Function} func
+ * @param {number} wait
+ * @param {boolean} immediate
+ * @return {Function}
+ */
+OO.ui.debounce = function ( func, wait, immediate ) {
+ var timeout;
+ return function () {
+ var context = this,
+ args = arguments,
+ later = function () {
+ timeout = null;
+ if ( !immediate ) {
+ func.apply( context, args );
+ }
+ };
+ if ( immediate && !timeout ) {
+ func.apply( context, args );
+ }
+ clearTimeout( timeout );
+ timeout = setTimeout( later, wait );
+ };
+};
+
+/**
+ * Reconstitute a JavaScript object corresponding to a widget created by
+ * the PHP implementation.
+ *
+ * This is an alias for `OO.ui.Element.static.infuse()`.
+ *
+ * @param {string|HTMLElement|jQuery} idOrNode
+ * A DOM id (if a string) or node for the widget to infuse.
+ * @return {OO.ui.Element}
+ * The `OO.ui.Element` corresponding to this (infusable) document node.
+ */
+OO.ui.infuse = function ( idOrNode ) {
+ return OO.ui.Element.static.infuse( idOrNode );
+};
+
+( function () {
+ /**
+ * Message store for the default implementation of OO.ui.msg
+ *
+ * Environments that provide a localization system should not use this, but should override
+ * OO.ui.msg altogether.
+ *
+ * @private
+ */
+ var messages = {
+ // Tool tip for a button that moves items in a list down one place
+ 'ooui-outline-control-move-down': 'Move item down',
+ // Tool tip for a button that moves items in a list up one place
+ 'ooui-outline-control-move-up': 'Move item up',
+ // Tool tip for a button that removes items from a list
+ 'ooui-outline-control-remove': 'Remove item',
+ // Label for the toolbar group that contains a list of all other available tools
+ 'ooui-toolbar-more': 'More',
+ // Label for the fake tool that expands the full list of tools in a toolbar group
+ 'ooui-toolgroup-expand': 'More',
+ // Label for the fake tool that collapses the full list of tools in a toolbar group
+ 'ooui-toolgroup-collapse': 'Fewer',
+ // Default label for the accept button of a confirmation dialog
+ 'ooui-dialog-message-accept': 'OK',
+ // Default label for the reject button of a confirmation dialog
+ 'ooui-dialog-message-reject': 'Cancel',
+ // Title for process dialog error description
+ 'ooui-dialog-process-error': 'Something went wrong',
+ // Label for process dialog dismiss error button, visible when describing errors
+ 'ooui-dialog-process-dismiss': 'Dismiss',
+ // Label for process dialog retry action button, visible when describing only recoverable errors
+ 'ooui-dialog-process-retry': 'Try again',
+ // Label for process dialog retry action button, visible when describing only warnings
+ 'ooui-dialog-process-continue': 'Continue'
+ };
+
+ /**
+ * Get a localized message.
+ *
+ * In environments that provide a localization system, this function should be overridden to
+ * return the message translated in the user's language. The default implementation always returns
+ * English messages.
+ *
+ * After the message key, message parameters may optionally be passed. In the default implementation,
+ * any occurrences of $1 are replaced with the first parameter, $2 with the second parameter, etc.
+ * Alternative implementations of OO.ui.msg may use any substitution system they like, as long as
+ * they support unnamed, ordered message parameters.
+ *
+ * @abstract
+ * @param {string} key Message key
+ * @param {Mixed...} [params] Message parameters
+ * @return {string} Translated message with parameters substituted
+ */
+ OO.ui.msg = function ( key ) {
+ var message = messages[ key ],
+ params = Array.prototype.slice.call( arguments, 1 );
+ if ( typeof message === 'string' ) {
+ // Perform $1 substitution
+ message = message.replace( /\$(\d+)/g, function ( unused, n ) {
+ var i = parseInt( n, 10 );
+ return params[ i - 1 ] !== undefined ? params[ i - 1 ] : '$' + n;
+ } );
+ } else {
+ // Return placeholder if message not found
+ message = '[' + key + ']';
+ }
+ return message;
+ };
+
+ /**
+ * Package a message and arguments for deferred resolution.
+ *
+ * Use this when you are statically specifying a message and the message may not yet be present.
+ *
+ * @param {string} key Message key
+ * @param {Mixed...} [params] Message parameters
+ * @return {Function} Function that returns the resolved message when executed
+ */
+ OO.ui.deferMsg = function () {
+ var args = arguments;
+ return function () {
+ return OO.ui.msg.apply( OO.ui, args );
+ };
+ };
+
+ /**
+ * Resolve a message.
+ *
+ * If the message is a function it will be executed, otherwise it will pass through directly.
+ *
+ * @param {Function|string} msg Deferred message, or message text
+ * @return {string} Resolved message
+ */
+ OO.ui.resolveMsg = function ( msg ) {
+ if ( $.isFunction( msg ) ) {
+ return msg();
+ }
+ return msg;
+ };
+
+} )();
diff --git a/vendor/oojs/oojs-ui/src/dialogs/MessageDialog.js b/vendor/oojs/oojs-ui/src/dialogs/MessageDialog.js
new file mode 100644
index 00000000..4ec12615
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/dialogs/MessageDialog.js
@@ -0,0 +1,325 @@
+/**
+ * MessageDialogs display a confirmation or alert message. By default, the rendered dialog box
+ * consists of a header that contains the dialog title, a body with the message, and a footer that
+ * contains any {@link OO.ui.ActionWidget action widgets}. The MessageDialog class is the only type
+ * of {@link OO.ui.Dialog dialog} that is usually instantiated directly.
+ *
+ * There are two basic types of message dialogs, confirmation and alert:
+ *
+ * - **confirmation**: the dialog title describes what a progressive action will do and the message provides
+ * more details about the consequences.
+ * - **alert**: the dialog title describes which event occurred and the message provides more information
+ * about why the event occurred.
+ *
+ * The MessageDialog class specifies two actions: ‘accept’, the primary
+ * action (e.g., ‘ok’) and ‘reject,’ the safe action (e.g., ‘cancel’). Both will close the window,
+ * passing along the selected action.
+ *
+ * For more information and examples, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example: Creating and opening a message dialog window.
+ * var messageDialog = new OO.ui.MessageDialog();
+ *
+ * // Create and append a window manager.
+ * var windowManager = new OO.ui.WindowManager();
+ * $( 'body' ).append( windowManager.$element );
+ * windowManager.addWindows( [ messageDialog ] );
+ * // Open the window.
+ * windowManager.openWindow( messageDialog, {
+ * title: 'Basic message dialog',
+ * message: 'This is the message'
+ * } );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Message_Dialogs
+ *
+ * @class
+ * @extends OO.ui.Dialog
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.MessageDialog = function OoUiMessageDialog( config ) {
+ // Parent constructor
+ OO.ui.MessageDialog.super.call( this, config );
+
+ // Properties
+ this.verticalActionLayout = null;
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-messageDialog' );
+};
+
+/* Inheritance */
+
+OO.inheritClass( OO.ui.MessageDialog, OO.ui.Dialog );
+
+/* Static Properties */
+
+OO.ui.MessageDialog.static.name = 'message';
+
+OO.ui.MessageDialog.static.size = 'small';
+
+OO.ui.MessageDialog.static.verbose = false;
+
+/**
+ * Dialog title.
+ *
+ * The title of a confirmation dialog describes what a progressive action will do. The
+ * title of an alert dialog describes which event occurred.
+ *
+ * @static
+ * @inheritable
+ * @property {jQuery|string|Function|null}
+ */
+OO.ui.MessageDialog.static.title = null;
+
+/**
+ * The message displayed in the dialog body.
+ *
+ * A confirmation message describes the consequences of a progressive action. An alert
+ * message describes why an event occurred.
+ *
+ * @static
+ * @inheritable
+ * @property {jQuery|string|Function|null}
+ */
+OO.ui.MessageDialog.static.message = null;
+
+OO.ui.MessageDialog.static.actions = [
+ { action: 'accept', label: OO.ui.deferMsg( 'ooui-dialog-message-accept' ), flags: 'primary' },
+ { action: 'reject', label: OO.ui.deferMsg( 'ooui-dialog-message-reject' ), flags: 'safe' }
+];
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.setManager = function ( manager ) {
+ OO.ui.MessageDialog.super.prototype.setManager.call( this, manager );
+
+ // Events
+ this.manager.connect( this, {
+ resize: 'onResize'
+ } );
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.onActionResize = function ( action ) {
+ this.fitActions();
+ return OO.ui.MessageDialog.super.prototype.onActionResize.call( this, action );
+};
+
+/**
+ * Handle window resized events.
+ *
+ * @private
+ */
+OO.ui.MessageDialog.prototype.onResize = function () {
+ var dialog = this;
+ dialog.fitActions();
+ // Wait for CSS transition to finish and do it again :(
+ setTimeout( function () {
+ dialog.fitActions();
+ }, 300 );
+};
+
+/**
+ * Toggle action layout between vertical and horizontal.
+ *
+ *
+ * @private
+ * @param {boolean} [value] Layout actions vertically, omit to toggle
+ * @chainable
+ */
+OO.ui.MessageDialog.prototype.toggleVerticalActionLayout = function ( value ) {
+ value = value === undefined ? !this.verticalActionLayout : !!value;
+
+ if ( value !== this.verticalActionLayout ) {
+ this.verticalActionLayout = value;
+ this.$actions
+ .toggleClass( 'oo-ui-messageDialog-actions-vertical', value )
+ .toggleClass( 'oo-ui-messageDialog-actions-horizontal', !value );
+ }
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.getActionProcess = function ( action ) {
+ if ( action ) {
+ return new OO.ui.Process( function () {
+ this.close( { action: action } );
+ }, this );
+ }
+ return OO.ui.MessageDialog.super.prototype.getActionProcess.call( this, action );
+};
+
+/**
+ * @inheritdoc
+ *
+ * @param {Object} [data] Dialog opening data
+ * @param {jQuery|string|Function|null} [data.title] Description of the action being confirmed
+ * @param {jQuery|string|Function|null} [data.message] Description of the action's consequence
+ * @param {boolean} [data.verbose] Message is verbose and should be styled as a long message
+ * @param {Object[]} [data.actions] List of OO.ui.ActionOptionWidget configuration options for each
+ * action item
+ */
+OO.ui.MessageDialog.prototype.getSetupProcess = function ( data ) {
+ data = data || {};
+
+ // Parent method
+ return OO.ui.MessageDialog.super.prototype.getSetupProcess.call( this, data )
+ .next( function () {
+ this.title.setLabel(
+ data.title !== undefined ? data.title : this.constructor.static.title
+ );
+ this.message.setLabel(
+ data.message !== undefined ? data.message : this.constructor.static.message
+ );
+ this.message.$element.toggleClass(
+ 'oo-ui-messageDialog-message-verbose',
+ data.verbose !== undefined ? data.verbose : this.constructor.static.verbose
+ );
+ }, this );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.getBodyHeight = function () {
+ var bodyHeight, oldOverflow,
+ $scrollable = this.container.$element;
+
+ oldOverflow = $scrollable[ 0 ].style.overflow;
+ $scrollable[ 0 ].style.overflow = 'hidden';
+
+ OO.ui.Element.static.reconsiderScrollbars( $scrollable[ 0 ] );
+
+ bodyHeight = this.text.$element.outerHeight( true );
+ $scrollable[ 0 ].style.overflow = oldOverflow;
+
+ return bodyHeight;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.setDimensions = function ( dim ) {
+ var $scrollable = this.container.$element;
+ OO.ui.MessageDialog.super.prototype.setDimensions.call( this, dim );
+
+ // Twiddle the overflow property, otherwise an unnecessary scrollbar will be produced.
+ // Need to do it after transition completes (250ms), add 50ms just in case.
+ setTimeout( function () {
+ var oldOverflow = $scrollable[ 0 ].style.overflow;
+ $scrollable[ 0 ].style.overflow = 'hidden';
+
+ OO.ui.Element.static.reconsiderScrollbars( $scrollable[ 0 ] );
+
+ $scrollable[ 0 ].style.overflow = oldOverflow;
+ }, 300 );
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.initialize = function () {
+ // Parent method
+ OO.ui.MessageDialog.super.prototype.initialize.call( this );
+
+ // Properties
+ this.$actions = $( '<div>' );
+ this.container = new OO.ui.PanelLayout( {
+ scrollable: true, classes: [ 'oo-ui-messageDialog-container' ]
+ } );
+ this.text = new OO.ui.PanelLayout( {
+ padded: true, expanded: false, classes: [ 'oo-ui-messageDialog-text' ]
+ } );
+ this.message = new OO.ui.LabelWidget( {
+ classes: [ 'oo-ui-messageDialog-message' ]
+ } );
+
+ // Initialization
+ this.title.$element.addClass( 'oo-ui-messageDialog-title' );
+ this.$content.addClass( 'oo-ui-messageDialog-content' );
+ this.container.$element.append( this.text.$element );
+ this.text.$element.append( this.title.$element, this.message.$element );
+ this.$body.append( this.container.$element );
+ this.$actions.addClass( 'oo-ui-messageDialog-actions' );
+ this.$foot.append( this.$actions );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.attachActions = function () {
+ var i, len, other, special, others;
+
+ // Parent method
+ OO.ui.MessageDialog.super.prototype.attachActions.call( this );
+
+ special = this.actions.getSpecial();
+ others = this.actions.getOthers();
+ if ( special.safe ) {
+ this.$actions.append( special.safe.$element );
+ special.safe.toggleFramed( false );
+ }
+ if ( others.length ) {
+ for ( i = 0, len = others.length; i < len; i++ ) {
+ other = others[ i ];
+ this.$actions.append( other.$element );
+ other.toggleFramed( false );
+ }
+ }
+ if ( special.primary ) {
+ this.$actions.append( special.primary.$element );
+ special.primary.toggleFramed( false );
+ }
+
+ if ( !this.isOpening() ) {
+ // If the dialog is currently opening, this will be called automatically soon.
+ // This also calls #fitActions.
+ this.updateSize();
+ }
+};
+
+/**
+ * Fit action actions into columns or rows.
+ *
+ * Columns will be used if all labels can fit without overflow, otherwise rows will be used.
+ *
+ * @private
+ */
+OO.ui.MessageDialog.prototype.fitActions = function () {
+ var i, len, action,
+ previous = this.verticalActionLayout,
+ actions = this.actions.get();
+
+ // Detect clipping
+ this.toggleVerticalActionLayout( false );
+ for ( i = 0, len = actions.length; i < len; i++ ) {
+ action = actions[ i ];
+ if ( action.$element.innerWidth() < action.$label.outerWidth( true ) ) {
+ this.toggleVerticalActionLayout( true );
+ break;
+ }
+ }
+
+ // Move the body out of the way of the foot
+ this.$body.css( 'bottom', this.$foot.outerHeight( true ) );
+
+ if ( this.verticalActionLayout !== previous ) {
+ // We changed the layout, window height might need to be updated.
+ this.updateSize();
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/dialogs/ProcessDialog.js b/vendor/oojs/oojs-ui/src/dialogs/ProcessDialog.js
new file mode 100644
index 00000000..d8f7c137
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/dialogs/ProcessDialog.js
@@ -0,0 +1,296 @@
+/**
+ * ProcessDialog windows encapsulate a {@link OO.ui.Process process} and all of the code necessary
+ * to complete it. If the process terminates with an error, a customizable {@link OO.ui.Error error
+ * interface} alerts users to the trouble, permitting the user to dismiss the error and try again when
+ * relevant. The ProcessDialog class is always extended and customized with the actions and content
+ * required for each process.
+ *
+ * The process dialog box consists of a header that visually represents the ‘working’ state of long
+ * processes with an animation. The header contains the dialog title as well as
+ * two {@link OO.ui.ActionWidget action widgets}: a ‘safe’ action on the left (e.g., ‘Cancel’) and
+ * a ‘primary’ action on the right (e.g., ‘Done’).
+ *
+ * Like other windows, the process dialog is managed by a {@link OO.ui.WindowManager window manager}.
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information and examples.
+ *
+ * @example
+ * // Example: Creating and opening a process dialog window.
+ * function MyProcessDialog( config ) {
+ * MyProcessDialog.super.call( this, config );
+ * }
+ * OO.inheritClass( MyProcessDialog, OO.ui.ProcessDialog );
+ *
+ * MyProcessDialog.static.title = 'Process dialog';
+ * MyProcessDialog.static.actions = [
+ * { action: 'save', label: 'Done', flags: 'primary' },
+ * { label: 'Cancel', flags: 'safe' }
+ * ];
+ *
+ * MyProcessDialog.prototype.initialize = function () {
+ * MyProcessDialog.super.prototype.initialize.apply( this, arguments );
+ * this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
+ * this.content.$element.append( '<p>This is a process dialog window. The header contains the title and two buttons: \'Cancel\' (a safe action) on the left and \'Done\' (a primary action) on the right.</p>' );
+ * this.$body.append( this.content.$element );
+ * };
+ * MyProcessDialog.prototype.getActionProcess = function ( action ) {
+ * var dialog = this;
+ * if ( action ) {
+ * return new OO.ui.Process( function () {
+ * dialog.close( { action: action } );
+ * } );
+ * }
+ * return MyProcessDialog.super.prototype.getActionProcess.call( this, action );
+ * };
+ *
+ * var windowManager = new OO.ui.WindowManager();
+ * $( 'body' ).append( windowManager.$element );
+ *
+ * var dialog = new MyProcessDialog();
+ * windowManager.addWindows( [ dialog ] );
+ * windowManager.openWindow( dialog );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Dialog
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ProcessDialog = function OoUiProcessDialog( config ) {
+ // Parent constructor
+ OO.ui.ProcessDialog.super.call( this, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-processDialog' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ProcessDialog, OO.ui.Dialog );
+
+/* Methods */
+
+/**
+ * Handle dismiss button click events.
+ *
+ * Hides errors.
+ *
+ * @private
+ */
+OO.ui.ProcessDialog.prototype.onDismissErrorButtonClick = function () {
+ this.hideErrors();
+};
+
+/**
+ * Handle retry button click events.
+ *
+ * Hides errors and then tries again.
+ *
+ * @private
+ */
+OO.ui.ProcessDialog.prototype.onRetryButtonClick = function () {
+ this.hideErrors();
+ this.executeAction( this.currentAction );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.onActionResize = function ( action ) {
+ if ( this.actions.isSpecial( action ) ) {
+ this.fitLabel();
+ }
+ return OO.ui.ProcessDialog.super.prototype.onActionResize.call( this, action );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.initialize = function () {
+ // Parent method
+ OO.ui.ProcessDialog.super.prototype.initialize.call( this );
+
+ // Properties
+ this.$navigation = $( '<div>' );
+ this.$location = $( '<div>' );
+ this.$safeActions = $( '<div>' );
+ this.$primaryActions = $( '<div>' );
+ this.$otherActions = $( '<div>' );
+ this.dismissButton = new OO.ui.ButtonWidget( {
+ label: OO.ui.msg( 'ooui-dialog-process-dismiss' )
+ } );
+ this.retryButton = new OO.ui.ButtonWidget();
+ this.$errors = $( '<div>' );
+ this.$errorsTitle = $( '<div>' );
+
+ // Events
+ this.dismissButton.connect( this, { click: 'onDismissErrorButtonClick' } );
+ this.retryButton.connect( this, { click: 'onRetryButtonClick' } );
+
+ // Initialization
+ this.title.$element.addClass( 'oo-ui-processDialog-title' );
+ this.$location
+ .append( this.title.$element )
+ .addClass( 'oo-ui-processDialog-location' );
+ this.$safeActions.addClass( 'oo-ui-processDialog-actions-safe' );
+ this.$primaryActions.addClass( 'oo-ui-processDialog-actions-primary' );
+ this.$otherActions.addClass( 'oo-ui-processDialog-actions-other' );
+ this.$errorsTitle
+ .addClass( 'oo-ui-processDialog-errors-title' )
+ .text( OO.ui.msg( 'ooui-dialog-process-error' ) );
+ this.$errors
+ .addClass( 'oo-ui-processDialog-errors oo-ui-element-hidden' )
+ .append( this.$errorsTitle, this.dismissButton.$element, this.retryButton.$element );
+ this.$content
+ .addClass( 'oo-ui-processDialog-content' )
+ .append( this.$errors );
+ this.$navigation
+ .addClass( 'oo-ui-processDialog-navigation' )
+ .append( this.$safeActions, this.$location, this.$primaryActions );
+ this.$head.append( this.$navigation );
+ this.$foot.append( this.$otherActions );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.getActionWidgets = function ( actions ) {
+ var i, len, widgets = [];
+ for ( i = 0, len = actions.length; i < len; i++ ) {
+ widgets.push(
+ new OO.ui.ActionWidget( $.extend( { framed: true }, actions[ i ] ) )
+ );
+ }
+ return widgets;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.attachActions = function () {
+ var i, len, other, special, others;
+
+ // Parent method
+ OO.ui.ProcessDialog.super.prototype.attachActions.call( this );
+
+ special = this.actions.getSpecial();
+ others = this.actions.getOthers();
+ if ( special.primary ) {
+ this.$primaryActions.append( special.primary.$element );
+ }
+ for ( i = 0, len = others.length; i < len; i++ ) {
+ other = others[ i ];
+ this.$otherActions.append( other.$element );
+ }
+ if ( special.safe ) {
+ this.$safeActions.append( special.safe.$element );
+ }
+
+ this.fitLabel();
+ this.$body.css( 'bottom', this.$foot.outerHeight( true ) );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.executeAction = function ( action ) {
+ var process = this;
+ return OO.ui.ProcessDialog.super.prototype.executeAction.call( this, action )
+ .fail( function ( errors ) {
+ process.showErrors( errors || [] );
+ } );
+};
+
+/**
+ * Fit label between actions.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.ProcessDialog.prototype.fitLabel = function () {
+ var width = Math.max(
+ this.$safeActions.is( ':visible' ) ? this.$safeActions.width() : 0,
+ this.$primaryActions.is( ':visible' ) ? this.$primaryActions.width() : 0
+ );
+ this.$location.css( { paddingLeft: width, paddingRight: width } );
+
+ return this;
+};
+
+/**
+ * Handle errors that occurred during accept or reject processes.
+ *
+ * @private
+ * @param {OO.ui.Error[]|OO.ui.Error} errors Errors to be handled
+ */
+OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
+ var i, len, $item, actions,
+ items = [],
+ abilities = {},
+ recoverable = true,
+ warning = false;
+
+ if ( errors instanceof OO.ui.Error ) {
+ errors = [ errors ];
+ }
+
+ for ( i = 0, len = errors.length; i < len; i++ ) {
+ if ( !errors[ i ].isRecoverable() ) {
+ recoverable = false;
+ }
+ if ( errors[ i ].isWarning() ) {
+ warning = true;
+ }
+ $item = $( '<div>' )
+ .addClass( 'oo-ui-processDialog-error' )
+ .append( errors[ i ].getMessage() );
+ items.push( $item[ 0 ] );
+ }
+ this.$errorItems = $( items );
+ if ( recoverable ) {
+ abilities[this.currentAction] = true;
+ // Copy the flags from the first matching action
+ actions = this.actions.get( { actions: this.currentAction } );
+ if ( actions.length ) {
+ this.retryButton.clearFlags().setFlags( actions[0].getFlags() );
+ }
+ } else {
+ abilities[this.currentAction] = false;
+ this.actions.setAbilities( abilities );
+ }
+ if ( warning ) {
+ this.retryButton.setLabel( OO.ui.msg( 'ooui-dialog-process-continue' ) );
+ } else {
+ this.retryButton.setLabel( OO.ui.msg( 'ooui-dialog-process-retry' ) );
+ }
+ this.retryButton.toggle( recoverable );
+ this.$errorsTitle.after( this.$errorItems );
+ this.$errors.removeClass( 'oo-ui-element-hidden' ).scrollTop( 0 );
+};
+
+/**
+ * Hide errors.
+ *
+ * @private
+ */
+OO.ui.ProcessDialog.prototype.hideErrors = function () {
+ this.$errors.addClass( 'oo-ui-element-hidden' );
+ if ( this.$errorItems ) {
+ this.$errorItems.remove();
+ this.$errorItems = null;
+ }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
+ // Parent method
+ return OO.ui.ProcessDialog.super.prototype.getTeardownProcess.call( this, data )
+ .first( function () {
+ // Make sure to hide errors
+ this.hideErrors();
+ }, this );
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/ButtonElement.js b/vendor/oojs/oojs-ui/src/elements/ButtonElement.js
new file mode 100644
index 00000000..6d338ed7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/ButtonElement.js
@@ -0,0 +1,263 @@
+/**
+ * ButtonElement is often mixed into other classes to generate a button, which is a clickable
+ * interface element that can be configured with access keys for accessibility.
+ * See the [OOjs UI documentation on MediaWiki] [1] for examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Buttons
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$button] The button element created by the class.
+ * If this configuration is omitted, the button element will use a generated `<a>`.
+ * @cfg {boolean} [framed=true] Render the button with a frame
+ * @cfg {string} [accessKey] Button's access key
+ */
+OO.ui.ButtonElement = function OoUiButtonElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$button = null;
+ this.framed = null;
+ this.accessKey = null;
+ this.active = false;
+ this.onMouseUpHandler = this.onMouseUp.bind( this );
+ this.onMouseDownHandler = this.onMouseDown.bind( this );
+ this.onKeyDownHandler = this.onKeyDown.bind( this );
+ this.onKeyUpHandler = this.onKeyUp.bind( this );
+ this.onClickHandler = this.onClick.bind( this );
+ this.onKeyPressHandler = this.onKeyPress.bind( this );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-buttonElement' );
+ this.toggleFramed( config.framed === undefined || config.framed );
+ this.setAccessKey( config.accessKey );
+ this.setButtonElement( config.$button || $( '<a>' ) );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.ButtonElement );
+
+/* Static Properties */
+
+/**
+ * Cancel mouse down events.
+ *
+ * This property is usually set to `true` to prevent the focus from changing when the button is clicked.
+ * Classes such as {@link OO.ui.DraggableElement DraggableElement} and {@link OO.ui.ButtonOptionWidget ButtonOptionWidget}
+ * use a value of `false` so that dragging behavior is possible and mousedown events can be handled by a
+ * parent widget.
+ *
+ * @static
+ * @inheritable
+ * @property {boolean}
+ */
+OO.ui.ButtonElement.static.cancelButtonMouseDownEvents = true;
+
+/* Events */
+
+/**
+ * A 'click' event is emitted when the button element is clicked.
+ *
+ * @event click
+ */
+
+/* Methods */
+
+/**
+ * Set the button element.
+ *
+ * This method is used to retarget a button mixin so that its functionality applies to
+ * the specified button element instead of the one created by the class. If a button element
+ * is already set, the method will remove the mixin’s effect on that element.
+ *
+ * @param {jQuery} $button Element to use as button
+ */
+OO.ui.ButtonElement.prototype.setButtonElement = function ( $button ) {
+ if ( this.$button ) {
+ this.$button
+ .removeClass( 'oo-ui-buttonElement-button' )
+ .removeAttr( 'role accesskey' )
+ .off( {
+ mousedown: this.onMouseDownHandler,
+ keydown: this.onKeyDownHandler,
+ click: this.onClickHandler,
+ keypress: this.onKeyPressHandler
+ } );
+ }
+
+ this.$button = $button
+ .addClass( 'oo-ui-buttonElement-button' )
+ .attr( { role: 'button', accesskey: this.accessKey } )
+ .on( {
+ mousedown: this.onMouseDownHandler,
+ keydown: this.onKeyDownHandler,
+ click: this.onClickHandler,
+ keypress: this.onKeyPressHandler
+ } );
+};
+
+/**
+ * Handles mouse down events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.ButtonElement.prototype.onMouseDown = function ( e ) {
+ if ( this.isDisabled() || e.which !== 1 ) {
+ return;
+ }
+ this.$element.addClass( 'oo-ui-buttonElement-pressed' );
+ // Run the mouseup handler no matter where the mouse is when the button is let go, so we can
+ // reliably remove the pressed class
+ this.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );
+ // Prevent change of focus unless specifically configured otherwise
+ if ( this.constructor.static.cancelButtonMouseDownEvents ) {
+ return false;
+ }
+};
+
+/**
+ * Handles mouse up events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Mouse up event
+ */
+OO.ui.ButtonElement.prototype.onMouseUp = function ( e ) {
+ if ( this.isDisabled() || e.which !== 1 ) {
+ return;
+ }
+ this.$element.removeClass( 'oo-ui-buttonElement-pressed' );
+ // Stop listening for mouseup, since we only needed this once
+ this.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );
+};
+
+/**
+ * Handles mouse click events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Mouse click event
+ * @fires click
+ */
+OO.ui.ButtonElement.prototype.onClick = function ( e ) {
+ if ( !this.isDisabled() && e.which === 1 ) {
+ if ( this.emit( 'click' ) ) {
+ return false;
+ }
+ }
+};
+
+/**
+ * Handles key down events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.ButtonElement.prototype.onKeyDown = function ( e ) {
+ if ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {
+ return;
+ }
+ this.$element.addClass( 'oo-ui-buttonElement-pressed' );
+ // Run the keyup handler no matter where the key is when the button is let go, so we can
+ // reliably remove the pressed class
+ this.getElementDocument().addEventListener( 'keyup', this.onKeyUpHandler, true );
+};
+
+/**
+ * Handles key up events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key up event
+ */
+OO.ui.ButtonElement.prototype.onKeyUp = function ( e ) {
+ if ( this.isDisabled() || ( e.which !== OO.ui.Keys.SPACE && e.which !== OO.ui.Keys.ENTER ) ) {
+ return;
+ }
+ this.$element.removeClass( 'oo-ui-buttonElement-pressed' );
+ // Stop listening for keyup, since we only needed this once
+ this.getElementDocument().removeEventListener( 'keyup', this.onKeyUpHandler, true );
+};
+
+/**
+ * Handles key press events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key press event
+ * @fires click
+ */
+OO.ui.ButtonElement.prototype.onKeyPress = function ( e ) {
+ if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+ if ( this.emit( 'click' ) ) {
+ return false;
+ }
+ }
+};
+
+/**
+ * Check if button has a frame.
+ *
+ * @return {boolean} Button is framed
+ */
+OO.ui.ButtonElement.prototype.isFramed = function () {
+ return this.framed;
+};
+
+/**
+ * Render the button with or without a frame. Omit the `framed` parameter to toggle the button frame on and off.
+ *
+ * @param {boolean} [framed] Make button framed, omit to toggle
+ * @chainable
+ */
+OO.ui.ButtonElement.prototype.toggleFramed = function ( framed ) {
+ framed = framed === undefined ? !this.framed : !!framed;
+ if ( framed !== this.framed ) {
+ this.framed = framed;
+ this.$element
+ .toggleClass( 'oo-ui-buttonElement-frameless', !framed )
+ .toggleClass( 'oo-ui-buttonElement-framed', framed );
+ this.updateThemeClasses();
+ }
+
+ return this;
+};
+
+/**
+ * Set the button's access key.
+ *
+ * @param {string} accessKey Button's access key, use empty string to remove
+ * @chainable
+ */
+OO.ui.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
+ accessKey = typeof accessKey === 'string' && accessKey.length ? accessKey : null;
+
+ if ( this.accessKey !== accessKey ) {
+ if ( this.$button ) {
+ if ( accessKey !== null ) {
+ this.$button.attr( 'accesskey', accessKey );
+ } else {
+ this.$button.removeAttr( 'accesskey' );
+ }
+ }
+ this.accessKey = accessKey;
+ }
+
+ return this;
+};
+
+/**
+ * Set the button to its 'active' state.
+ *
+ * The active state occurs when a {@link OO.ui.ButtonOptionWidget ButtonOptionWidget} or
+ * a {@link OO.ui.ToggleButtonWidget ToggleButtonWidget} is pressed. This method does nothing
+ * for other button types.
+ *
+ * @param {boolean} [value] Make button active
+ * @chainable
+ */
+OO.ui.ButtonElement.prototype.setActive = function ( value ) {
+ this.$element.toggleClass( 'oo-ui-buttonElement-active', !!value );
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/ClippableElement.js b/vendor/oojs/oojs-ui/src/elements/ClippableElement.js
new file mode 100644
index 00000000..33b0b234
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/ClippableElement.js
@@ -0,0 +1,205 @@
+/**
+ * Element that can be automatically clipped to visible boundaries.
+ *
+ * Whenever the element's natural height changes, you have to call
+ * #clip to make sure it's still clipping correctly.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$clippable] Nodes to clip, assigned to #$clippable, omit to use #$element
+ */
+OO.ui.ClippableElement = function OoUiClippableElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$clippable = null;
+ this.clipping = false;
+ this.clippedHorizontally = false;
+ this.clippedVertically = false;
+ this.$clippableContainer = null;
+ this.$clippableScroller = null;
+ this.$clippableWindow = null;
+ this.idealWidth = null;
+ this.idealHeight = null;
+ this.onClippableContainerScrollHandler = this.clip.bind( this );
+ this.onClippableWindowResizeHandler = this.clip.bind( this );
+
+ // Initialization
+ this.setClippableElement( config.$clippable || this.$element );
+};
+
+/* Methods */
+
+/**
+ * Set clippable element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $clippable Element to make clippable
+ */
+OO.ui.ClippableElement.prototype.setClippableElement = function ( $clippable ) {
+ if ( this.$clippable ) {
+ this.$clippable.removeClass( 'oo-ui-clippableElement-clippable' );
+ this.$clippable.css( { width: '', height: '', overflowX: '', overflowY: '' } );
+ OO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );
+ }
+
+ this.$clippable = $clippable.addClass( 'oo-ui-clippableElement-clippable' );
+ this.clip();
+};
+
+/**
+ * Toggle clipping.
+ *
+ * Do not turn clipping on until after the element is attached to the DOM and visible.
+ *
+ * @param {boolean} [clipping] Enable clipping, omit to toggle
+ * @chainable
+ */
+OO.ui.ClippableElement.prototype.toggleClipping = function ( clipping ) {
+ clipping = clipping === undefined ? !this.clipping : !!clipping;
+
+ if ( this.clipping !== clipping ) {
+ this.clipping = clipping;
+ if ( clipping ) {
+ this.$clippableContainer = $( this.getClosestScrollableElementContainer() );
+ // If the clippable container is the root, we have to listen to scroll events and check
+ // jQuery.scrollTop on the window because of browser inconsistencies
+ this.$clippableScroller = this.$clippableContainer.is( 'html, body' ) ?
+ $( OO.ui.Element.static.getWindow( this.$clippableContainer ) ) :
+ this.$clippableContainer;
+ this.$clippableScroller.on( 'scroll', this.onClippableContainerScrollHandler );
+ this.$clippableWindow = $( this.getElementWindow() )
+ .on( 'resize', this.onClippableWindowResizeHandler );
+ // Initial clip after visible
+ this.clip();
+ } else {
+ this.$clippable.css( { width: '', height: '', overflowX: '', overflowY: '' } );
+ OO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );
+
+ this.$clippableContainer = null;
+ this.$clippableScroller.off( 'scroll', this.onClippableContainerScrollHandler );
+ this.$clippableScroller = null;
+ this.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );
+ this.$clippableWindow = null;
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Check if the element will be clipped to fit the visible area of the nearest scrollable container.
+ *
+ * @return {boolean} Element will be clipped to the visible area
+ */
+OO.ui.ClippableElement.prototype.isClipping = function () {
+ return this.clipping;
+};
+
+/**
+ * Check if the bottom or right of the element is being clipped by the nearest scrollable container.
+ *
+ * @return {boolean} Part of the element is being clipped
+ */
+OO.ui.ClippableElement.prototype.isClipped = function () {
+ return this.clippedHorizontally || this.clippedVertically;
+};
+
+/**
+ * Check if the right of the element is being clipped by the nearest scrollable container.
+ *
+ * @return {boolean} Part of the element is being clipped
+ */
+OO.ui.ClippableElement.prototype.isClippedHorizontally = function () {
+ return this.clippedHorizontally;
+};
+
+/**
+ * Check if the bottom of the element is being clipped by the nearest scrollable container.
+ *
+ * @return {boolean} Part of the element is being clipped
+ */
+OO.ui.ClippableElement.prototype.isClippedVertically = function () {
+ return this.clippedVertically;
+};
+
+/**
+ * Set the ideal size. These are the dimensions the element will have when it's not being clipped.
+ *
+ * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix
+ * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix
+ */
+OO.ui.ClippableElement.prototype.setIdealSize = function ( width, height ) {
+ this.idealWidth = width;
+ this.idealHeight = height;
+
+ if ( !this.clipping ) {
+ // Update dimensions
+ this.$clippable.css( { width: width, height: height } );
+ }
+ // While clipping, idealWidth and idealHeight are not considered
+};
+
+/**
+ * Clip element to visible boundaries and allow scrolling when needed. Call this method when
+ * the element's natural height changes.
+ *
+ * Element will be clipped the bottom or right of the element is within 10px of the edge of, or
+ * overlapped by, the visible area of the nearest scrollable container.
+ *
+ * @chainable
+ */
+OO.ui.ClippableElement.prototype.clip = function () {
+ if ( !this.clipping ) {
+ // this.$clippableContainer and this.$clippableWindow are null, so the below will fail
+ return this;
+ }
+
+ var buffer = 7, // Chosen by fair dice roll
+ cOffset = this.$clippable.offset(),
+ $container = this.$clippableContainer.is( 'html, body' ) ?
+ this.$clippableWindow : this.$clippableContainer,
+ ccOffset = $container.offset() || { top: 0, left: 0 },
+ ccHeight = $container.innerHeight() - buffer,
+ ccWidth = $container.innerWidth() - buffer,
+ cHeight = this.$clippable.outerHeight() + buffer,
+ cWidth = this.$clippable.outerWidth() + buffer,
+ scrollTop = this.$clippableScroller.scrollTop(),
+ scrollLeft = this.$clippableScroller.scrollLeft(),
+ desiredWidth = cOffset.left < 0 ?
+ cWidth + cOffset.left :
+ ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
+ desiredHeight = cOffset.top < 0 ?
+ cHeight + cOffset.top :
+ ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
+ naturalWidth = this.$clippable.prop( 'scrollWidth' ),
+ naturalHeight = this.$clippable.prop( 'scrollHeight' ),
+ clipWidth = desiredWidth < naturalWidth,
+ clipHeight = desiredHeight < naturalHeight;
+
+ if ( clipWidth ) {
+ this.$clippable.css( { overflowX: 'scroll', width: desiredWidth } );
+ } else {
+ this.$clippable.css( { width: this.idealWidth || '', overflowX: '' } );
+ }
+ if ( clipHeight ) {
+ this.$clippable.css( { overflowY: 'scroll', height: desiredHeight } );
+ } else {
+ this.$clippable.css( { height: this.idealHeight || '', overflowY: '' } );
+ }
+
+ // If we stopped clipping in at least one of the dimensions
+ if ( !clipWidth || !clipHeight ) {
+ OO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );
+ }
+
+ this.clippedHorizontally = clipWidth;
+ this.clippedVertically = clipHeight;
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/DraggableElement.js b/vendor/oojs/oojs-ui/src/elements/DraggableElement.js
new file mode 100644
index 00000000..9ae4d5bb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/DraggableElement.js
@@ -0,0 +1,142 @@
+/**
+ * DraggableElement is a mixin class used to create elements that can be clicked
+ * and dragged by a mouse to a new position within a group. This class must be used
+ * in conjunction with OO.ui.DraggableGroupElement, which provides a container for
+ * the draggable elements.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ */
+OO.ui.DraggableElement = function OoUiDraggableElement() {
+ // Properties
+ this.index = null;
+
+ // Initialize and events
+ this.$element
+ .attr( 'draggable', true )
+ .addClass( 'oo-ui-draggableElement' )
+ .on( {
+ dragstart: this.onDragStart.bind( this ),
+ dragover: this.onDragOver.bind( this ),
+ dragend: this.onDragEnd.bind( this ),
+ drop: this.onDrop.bind( this )
+ } );
+};
+
+OO.initClass( OO.ui.DraggableElement );
+
+/* Events */
+
+/**
+ * @event dragstart
+ *
+ * A dragstart event is emitted when the user clicks and begins dragging an item.
+ * @param {OO.ui.DraggableElement} item The item the user has clicked and is dragging with the mouse.
+ */
+
+/**
+ * @event dragend
+ * A dragend event is emitted when the user drags an item and releases the mouse,
+ * thus terminating the drag operation.
+ */
+
+/**
+ * @event drop
+ * A drop event is emitted when the user drags an item and then releases the mouse button
+ * over a valid target.
+ */
+
+/* Static Properties */
+
+/**
+ * @inheritdoc OO.ui.ButtonElement
+ */
+OO.ui.DraggableElement.static.cancelButtonMouseDownEvents = false;
+
+/* Methods */
+
+/**
+ * Respond to dragstart event.
+ *
+ * @private
+ * @param {jQuery.Event} event jQuery event
+ * @fires dragstart
+ */
+OO.ui.DraggableElement.prototype.onDragStart = function ( e ) {
+ var dataTransfer = e.originalEvent.dataTransfer;
+ // Define drop effect
+ dataTransfer.dropEffect = 'none';
+ dataTransfer.effectAllowed = 'move';
+ // We must set up a dataTransfer data property or Firefox seems to
+ // ignore the fact the element is draggable.
+ try {
+ dataTransfer.setData( 'application-x/OOjs-UI-draggable', this.getIndex() );
+ } catch ( err ) {
+ // The above is only for firefox. No need to set a catch clause
+ // if it fails, move on.
+ }
+ // Add dragging class
+ this.$element.addClass( 'oo-ui-draggableElement-dragging' );
+ // Emit event
+ this.emit( 'dragstart', this );
+ return true;
+};
+
+/**
+ * Respond to dragend event.
+ *
+ * @private
+ * @fires dragend
+ */
+OO.ui.DraggableElement.prototype.onDragEnd = function () {
+ this.$element.removeClass( 'oo-ui-draggableElement-dragging' );
+ this.emit( 'dragend' );
+};
+
+/**
+ * Handle drop event.
+ *
+ * @private
+ * @param {jQuery.Event} event jQuery event
+ * @fires drop
+ */
+OO.ui.DraggableElement.prototype.onDrop = function ( e ) {
+ e.preventDefault();
+ this.emit( 'drop', e );
+};
+
+/**
+ * In order for drag/drop to work, the dragover event must
+ * return false and stop propogation.
+ *
+ * @private
+ */
+OO.ui.DraggableElement.prototype.onDragOver = function ( e ) {
+ e.preventDefault();
+};
+
+/**
+ * Set item index.
+ * Store it in the DOM so we can access from the widget drag event
+ *
+ * @private
+ * @param {number} Item index
+ */
+OO.ui.DraggableElement.prototype.setIndex = function ( index ) {
+ if ( this.index !== index ) {
+ this.index = index;
+ this.$element.data( 'index', index );
+ }
+};
+
+/**
+ * Get item index
+ *
+ * @private
+ * @return {number} Item index
+ */
+OO.ui.DraggableElement.prototype.getIndex = function () {
+ return this.index;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/DraggableGroupElement.js b/vendor/oojs/oojs-ui/src/elements/DraggableGroupElement.js
new file mode 100644
index 00000000..134e2953
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/DraggableGroupElement.js
@@ -0,0 +1,261 @@
+/**
+ * DraggableGroupElement is a mixin class used to create a group element to
+ * contain draggable elements, which are items that can be clicked and dragged by a mouse.
+ * The class is used with OO.ui.DraggableElement.
+ *
+ * @abstract
+ * @class
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [orientation] Item orientation: 'horizontal' or 'vertical'. The orientation
+ * should match the layout of the items. Items displayed in a single row
+ * or in several rows should use horizontal orientation. The vertical orientation should only be
+ * used when the items are displayed in a single column. Defaults to 'vertical'
+ */
+OO.ui.DraggableGroupElement = function OoUiDraggableGroupElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.GroupElement.call( this, config );
+
+ // Properties
+ this.orientation = config.orientation || 'vertical';
+ this.dragItem = null;
+ this.itemDragOver = null;
+ this.itemKeys = {};
+ this.sideInsertion = '';
+
+ // Events
+ this.aggregate( {
+ dragstart: 'itemDragStart',
+ dragend: 'itemDragEnd',
+ drop: 'itemDrop'
+ } );
+ this.connect( this, {
+ itemDragStart: 'onItemDragStart',
+ itemDrop: 'onItemDrop',
+ itemDragEnd: 'onItemDragEnd'
+ } );
+ this.$element.on( {
+ dragover: $.proxy( this.onDragOver, this ),
+ dragleave: $.proxy( this.onDragLeave, this )
+ } );
+
+ // Initialize
+ if ( Array.isArray( config.items ) ) {
+ this.addItems( config.items );
+ }
+ this.$placeholder = $( '<div>' )
+ .addClass( 'oo-ui-draggableGroupElement-placeholder' );
+ this.$element
+ .addClass( 'oo-ui-draggableGroupElement' )
+ .append( this.$status )
+ .toggleClass( 'oo-ui-draggableGroupElement-horizontal', this.orientation === 'horizontal' )
+ .prepend( this.$placeholder );
+};
+
+/* Setup */
+OO.mixinClass( OO.ui.DraggableGroupElement, OO.ui.GroupElement );
+
+/* Events */
+
+/**
+ * A 'reorder' event is emitted when the order of items in the group changes.
+ *
+ * @event reorder
+ * @param {OO.ui.DraggableElement} item Reordered item
+ * @param {number} [newIndex] New index for the item
+ */
+
+/* Methods */
+
+/**
+ * Respond to item drag start event
+ *
+ * @private
+ * @param {OO.ui.DraggableElement} item Dragged item
+ */
+OO.ui.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {
+ var i, len;
+
+ // Map the index of each object
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ this.items[ i ].setIndex( i );
+ }
+
+ if ( this.orientation === 'horizontal' ) {
+ // Set the height of the indicator
+ this.$placeholder.css( {
+ height: item.$element.outerHeight(),
+ width: 2
+ } );
+ } else {
+ // Set the width of the indicator
+ this.$placeholder.css( {
+ height: 2,
+ width: item.$element.outerWidth()
+ } );
+ }
+ this.setDragItem( item );
+};
+
+/**
+ * Respond to item drag end event
+ *
+ * @private
+ */
+OO.ui.DraggableGroupElement.prototype.onItemDragEnd = function () {
+ this.unsetDragItem();
+ return false;
+};
+
+/**
+ * Handle drop event and switch the order of the items accordingly
+ *
+ * @private
+ * @param {OO.ui.DraggableElement} item Dropped item
+ * @fires reorder
+ */
+OO.ui.DraggableGroupElement.prototype.onItemDrop = function ( item ) {
+ var toIndex = item.getIndex();
+ // Check if the dropped item is from the current group
+ // TODO: Figure out a way to configure a list of legally droppable
+ // elements even if they are not yet in the list
+ if ( this.getDragItem() ) {
+ // If the insertion point is 'after', the insertion index
+ // is shifted to the right (or to the left in RTL, hence 'after')
+ if ( this.sideInsertion === 'after' ) {
+ toIndex++;
+ }
+ // Emit change event
+ this.emit( 'reorder', this.getDragItem(), toIndex );
+ }
+ this.unsetDragItem();
+ // Return false to prevent propogation
+ return false;
+};
+
+/**
+ * Handle dragleave event.
+ *
+ * @private
+ */
+OO.ui.DraggableGroupElement.prototype.onDragLeave = function () {
+ // This means the item was dragged outside the widget
+ this.$placeholder
+ .css( 'left', 0 )
+ .addClass( 'oo-ui-element-hidden' );
+};
+
+/**
+ * Respond to dragover event
+ *
+ * @private
+ * @param {jQuery.Event} event Event details
+ */
+OO.ui.DraggableGroupElement.prototype.onDragOver = function ( e ) {
+ var dragOverObj, $optionWidget, itemOffset, itemMidpoint, itemBoundingRect,
+ itemSize, cssOutput, dragPosition, itemIndex, itemPosition,
+ clientX = e.originalEvent.clientX,
+ clientY = e.originalEvent.clientY;
+
+ // Get the OptionWidget item we are dragging over
+ dragOverObj = this.getElementDocument().elementFromPoint( clientX, clientY );
+ $optionWidget = $( dragOverObj ).closest( '.oo-ui-draggableElement' );
+ if ( $optionWidget[ 0 ] ) {
+ itemOffset = $optionWidget.offset();
+ itemBoundingRect = $optionWidget[ 0 ].getBoundingClientRect();
+ itemPosition = $optionWidget.position();
+ itemIndex = $optionWidget.data( 'index' );
+ }
+
+ if (
+ itemOffset &&
+ this.isDragging() &&
+ itemIndex !== this.getDragItem().getIndex()
+ ) {
+ if ( this.orientation === 'horizontal' ) {
+ // Calculate where the mouse is relative to the item width
+ itemSize = itemBoundingRect.width;
+ itemMidpoint = itemBoundingRect.left + itemSize / 2;
+ dragPosition = clientX;
+ // Which side of the item we hover over will dictate
+ // where the placeholder will appear, on the left or
+ // on the right
+ cssOutput = {
+ left: dragPosition < itemMidpoint ? itemPosition.left : itemPosition.left + itemSize,
+ top: itemPosition.top
+ };
+ } else {
+ // Calculate where the mouse is relative to the item height
+ itemSize = itemBoundingRect.height;
+ itemMidpoint = itemBoundingRect.top + itemSize / 2;
+ dragPosition = clientY;
+ // Which side of the item we hover over will dictate
+ // where the placeholder will appear, on the top or
+ // on the bottom
+ cssOutput = {
+ top: dragPosition < itemMidpoint ? itemPosition.top : itemPosition.top + itemSize,
+ left: itemPosition.left
+ };
+ }
+ // Store whether we are before or after an item to rearrange
+ // For horizontal layout, we need to account for RTL, as this is flipped
+ if ( this.orientation === 'horizontal' && this.$element.css( 'direction' ) === 'rtl' ) {
+ this.sideInsertion = dragPosition < itemMidpoint ? 'after' : 'before';
+ } else {
+ this.sideInsertion = dragPosition < itemMidpoint ? 'before' : 'after';
+ }
+ // Add drop indicator between objects
+ this.$placeholder
+ .css( cssOutput )
+ .removeClass( 'oo-ui-element-hidden' );
+ } else {
+ // This means the item was dragged outside the widget
+ this.$placeholder
+ .css( 'left', 0 )
+ .addClass( 'oo-ui-element-hidden' );
+ }
+ // Prevent default
+ e.preventDefault();
+};
+
+/**
+ * Set a dragged item
+ *
+ * @param {OO.ui.DraggableElement} item Dragged item
+ */
+OO.ui.DraggableGroupElement.prototype.setDragItem = function ( item ) {
+ this.dragItem = item;
+};
+
+/**
+ * Unset the current dragged item
+ */
+OO.ui.DraggableGroupElement.prototype.unsetDragItem = function () {
+ this.dragItem = null;
+ this.itemDragOver = null;
+ this.$placeholder.addClass( 'oo-ui-element-hidden' );
+ this.sideInsertion = '';
+};
+
+/**
+ * Get the item that is currently being dragged.
+ *
+ * @return {OO.ui.DraggableElement|null} The currently dragged item, or `null` if no item is being dragged
+ */
+OO.ui.DraggableGroupElement.prototype.getDragItem = function () {
+ return this.dragItem;
+};
+
+/**
+ * Check if an item in the group is currently being dragged.
+ *
+ * @return {Boolean} Item is being dragged
+ */
+OO.ui.DraggableGroupElement.prototype.isDragging = function () {
+ return this.getDragItem() !== null;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/FlaggedElement.js b/vendor/oojs/oojs-ui/src/elements/FlaggedElement.js
new file mode 100644
index 00000000..7050f696
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/FlaggedElement.js
@@ -0,0 +1,209 @@
+/**
+ * The FlaggedElement class is an attribute mixin, meaning that it is used to add
+ * additional functionality to an element created by another class. The class provides
+ * a ‘flags’ property assigned the name (or an array of names) of styling flags,
+ * which are used to customize the look and feel of a widget to better describe its
+ * importance and functionality.
+ *
+ * The library currently contains the following styling flags for general use:
+ *
+ * - **progressive**: Progressive styling is applied to convey that the widget will move the user forward in a process.
+ * - **destructive**: Destructive styling is applied to convey that the widget will remove something.
+ * - **constructive**: Constructive styling is applied to convey that the widget will create something.
+ *
+ * The flags affect the appearance of the buttons:
+ *
+ * @example
+ * // FlaggedElement is mixed into ButtonWidget to provide styling flags
+ * var button1 = new OO.ui.ButtonWidget( {
+ * label: 'Constructive',
+ * flags: 'constructive'
+ * } );
+ * var button2 = new OO.ui.ButtonWidget( {
+ * label: 'Destructive',
+ * flags: 'destructive'
+ * } );
+ * var button3 = new OO.ui.ButtonWidget( {
+ * label: 'Progressive',
+ * flags: 'progressive'
+ * } );
+ * $( 'body' ).append( button1.$element, button2.$element, button3.$element );
+ *
+ * {@link OO.ui.ActionWidget ActionWidgets}, which are a special kind of button that execute an action, use these flags: **primary** and **safe**.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string|string[]} [flags] The name or names of the flags (e.g., 'constructive' or 'primary') to apply.
+ * Please see the [OOjs UI documentation on MediaWiki] [2] for more information about available flags.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Flagged
+ * @cfg {jQuery} [$flagged] The flagged element. By default,
+ * the flagged functionality is applied to the element created by the class ($element).
+ * If a different element is specified, the flagged functionality will be applied to it instead.
+ */
+OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.flags = {};
+ this.$flagged = null;
+
+ // Initialization
+ this.setFlags( config.flags );
+ this.setFlaggedElement( config.$flagged || this.$element );
+};
+
+/* Events */
+
+/**
+ * @event flag
+ * A flag event is emitted when the #clearFlags or #setFlags methods are used. The `changes`
+ * parameter contains the name of each modified flag and indicates whether it was
+ * added or removed.
+ *
+ * @param {Object.<string,boolean>} changes Object keyed by flag name. A Boolean `true` indicates
+ * that the flag was added, `false` that the flag was removed.
+ */
+
+/* Methods */
+
+/**
+ * Set the flagged element.
+ *
+ * This method is used to retarget a flagged mixin so that its functionality applies to the specified element.
+ * If an element is already set, the method will remove the mixin’s effect on that element.
+ *
+ * @param {jQuery} $flagged Element that should be flagged
+ */
+OO.ui.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
+ var classNames = Object.keys( this.flags ).map( function ( flag ) {
+ return 'oo-ui-flaggedElement-' + flag;
+ } ).join( ' ' );
+
+ if ( this.$flagged ) {
+ this.$flagged.removeClass( classNames );
+ }
+
+ this.$flagged = $flagged.addClass( classNames );
+};
+
+/**
+ * Check if the specified flag is set.
+ *
+ * @param {string} flag Name of flag
+ * @return {boolean} The flag is set
+ */
+OO.ui.FlaggedElement.prototype.hasFlag = function ( flag ) {
+ return flag in this.flags;
+};
+
+/**
+ * Get the names of all flags set.
+ *
+ * @return {string[]} Flag names
+ */
+OO.ui.FlaggedElement.prototype.getFlags = function () {
+ return Object.keys( this.flags );
+};
+
+/**
+ * Clear all flags.
+ *
+ * @chainable
+ * @fires flag
+ */
+OO.ui.FlaggedElement.prototype.clearFlags = function () {
+ var flag, className,
+ changes = {},
+ remove = [],
+ classPrefix = 'oo-ui-flaggedElement-';
+
+ for ( flag in this.flags ) {
+ className = classPrefix + flag;
+ changes[ flag ] = false;
+ delete this.flags[ flag ];
+ remove.push( className );
+ }
+
+ if ( this.$flagged ) {
+ this.$flagged.removeClass( remove.join( ' ' ) );
+ }
+
+ this.updateThemeClasses();
+ this.emit( 'flag', changes );
+
+ return this;
+};
+
+/**
+ * Add one or more flags.
+ *
+ * @param {string|string[]|Object.<string, boolean>} flags A flag name, an array of flag names,
+ * or an object keyed by flag name with a boolean value that indicates whether the flag should
+ * be added (`true`) or removed (`false`).
+ * @chainable
+ * @fires flag
+ */
+OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
+ var i, len, flag, className,
+ changes = {},
+ add = [],
+ remove = [],
+ classPrefix = 'oo-ui-flaggedElement-';
+
+ if ( typeof flags === 'string' ) {
+ className = classPrefix + flags;
+ // Set
+ if ( !this.flags[ flags ] ) {
+ this.flags[ flags ] = true;
+ add.push( className );
+ }
+ } else if ( Array.isArray( flags ) ) {
+ for ( i = 0, len = flags.length; i < len; i++ ) {
+ flag = flags[ i ];
+ className = classPrefix + flag;
+ // Set
+ if ( !this.flags[ flag ] ) {
+ changes[ flag ] = true;
+ this.flags[ flag ] = true;
+ add.push( className );
+ }
+ }
+ } else if ( OO.isPlainObject( flags ) ) {
+ for ( flag in flags ) {
+ className = classPrefix + flag;
+ if ( flags[ flag ] ) {
+ // Set
+ if ( !this.flags[ flag ] ) {
+ changes[ flag ] = true;
+ this.flags[ flag ] = true;
+ add.push( className );
+ }
+ } else {
+ // Remove
+ if ( this.flags[ flag ] ) {
+ changes[ flag ] = false;
+ delete this.flags[ flag ];
+ remove.push( className );
+ }
+ }
+ }
+ }
+
+ if ( this.$flagged ) {
+ this.$flagged
+ .addClass( add.join( ' ' ) )
+ .removeClass( remove.join( ' ' ) );
+ }
+
+ this.updateThemeClasses();
+ this.emit( 'flag', changes );
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/GroupElement.js b/vendor/oojs/oojs-ui/src/elements/GroupElement.js
new file mode 100644
index 00000000..51cf5d25
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/GroupElement.js
@@ -0,0 +1,290 @@
+/**
+ * Any OOjs UI widget that contains other widgets (such as {@link OO.ui.ButtonWidget buttons} or
+ * {@link OO.ui.OptionWidget options}) mixes in GroupElement. Adding, removing, and clearing
+ * items from the group is done through the interface the class provides.
+ * For more information, please see the [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Groups
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$group] The container element created by the class. If this configuration
+ * is omitted, the group element will use a generated `<div>`.
+ */
+OO.ui.GroupElement = function OoUiGroupElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$group = null;
+ this.items = [];
+ this.aggregateItemEvents = {};
+
+ // Initialization
+ this.setGroupElement( config.$group || $( '<div>' ) );
+};
+
+/* Methods */
+
+/**
+ * Set the group element.
+ *
+ * If an element is already set, items will be moved to the new element.
+ *
+ * @param {jQuery} $group Element to use as group
+ */
+OO.ui.GroupElement.prototype.setGroupElement = function ( $group ) {
+ var i, len;
+
+ this.$group = $group;
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ this.$group.append( this.items[ i ].$element );
+ }
+};
+
+/**
+ * Check if a group contains no items.
+ *
+ * @return {boolean} Group is empty
+ */
+OO.ui.GroupElement.prototype.isEmpty = function () {
+ return !this.items.length;
+};
+
+/**
+ * Get all items in the group.
+ *
+ * The method returns an array of item references (e.g., [button1, button2, button3]) and is useful
+ * when synchronizing groups of items, or whenever the references are required (e.g., when removing items
+ * from a group).
+ *
+ * @return {OO.ui.Element[]} An array of items.
+ */
+OO.ui.GroupElement.prototype.getItems = function () {
+ return this.items.slice( 0 );
+};
+
+/**
+ * Get an item by its data.
+ *
+ * Only the first item with matching data will be returned. To return all matching items,
+ * use the #getItemsFromData method.
+ *
+ * @param {Object} data Item data to search for
+ * @return {OO.ui.Element|null} Item with equivalent data, `null` if none exists
+ */
+OO.ui.GroupElement.prototype.getItemFromData = function ( data ) {
+ var i, len, item,
+ hash = OO.getHash( data );
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[ i ];
+ if ( hash === OO.getHash( item.getData() ) ) {
+ return item;
+ }
+ }
+
+ return null;
+};
+
+/**
+ * Get items by their data.
+ *
+ * All items with matching data will be returned. To return only the first match, use the #getItemFromData method instead.
+ *
+ * @param {Object} data Item data to search for
+ * @return {OO.ui.Element[]} Items with equivalent data
+ */
+OO.ui.GroupElement.prototype.getItemsFromData = function ( data ) {
+ var i, len, item,
+ hash = OO.getHash( data ),
+ items = [];
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[ i ];
+ if ( hash === OO.getHash( item.getData() ) ) {
+ items.push( item );
+ }
+ }
+
+ return items;
+};
+
+/**
+ * Aggregate the events emitted by the group.
+ *
+ * When events are aggregated, the group will listen to all contained items for the event,
+ * and then emit the event under a new name. The new event will contain an additional leading
+ * parameter containing the item that emitted the original event. Other arguments emitted from
+ * the original event are passed through.
+ *
+ * @param {Object.<string,string|null>} events An object keyed by the name of the event that should be
+ * aggregated (e.g., ‘click’) and the value of the new name to use (e.g., ‘groupClick’).
+ * A `null` value will remove aggregated events.
+
+ * @throws {Error} An error is thrown if aggregation already exists.
+ */
+OO.ui.GroupElement.prototype.aggregate = function ( events ) {
+ var i, len, item, add, remove, itemEvent, groupEvent;
+
+ for ( itemEvent in events ) {
+ groupEvent = events[ itemEvent ];
+
+ // Remove existing aggregated event
+ if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
+ // Don't allow duplicate aggregations
+ if ( groupEvent ) {
+ throw new Error( 'Duplicate item event aggregation for ' + itemEvent );
+ }
+ // Remove event aggregation from existing items
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[ i ];
+ if ( item.connect && item.disconnect ) {
+ remove = {};
+ remove[ itemEvent ] = [ 'emit', groupEvent, item ];
+ item.disconnect( this, remove );
+ }
+ }
+ // Prevent future items from aggregating event
+ delete this.aggregateItemEvents[ itemEvent ];
+ }
+
+ // Add new aggregate event
+ if ( groupEvent ) {
+ // Make future items aggregate event
+ this.aggregateItemEvents[ itemEvent ] = groupEvent;
+ // Add event aggregation to existing items
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[ i ];
+ if ( item.connect && item.disconnect ) {
+ add = {};
+ add[ itemEvent ] = [ 'emit', groupEvent, item ];
+ item.connect( this, add );
+ }
+ }
+ }
+ }
+};
+
+/**
+ * Add items to the group.
+ *
+ * Items will be added to the end of the group array unless the optional `index` parameter specifies
+ * a different insertion point. Adding an existing item will move it to the end of the array or the point specified by the `index`.
+ *
+ * @param {OO.ui.Element[]} items An array of items to add to the group
+ * @param {number} [index] Index of the insertion point
+ * @chainable
+ */
+OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
+ var i, len, item, event, events, currentIndex,
+ itemElements = [];
+
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ item = items[ i ];
+
+ // Check if item exists then remove it first, effectively "moving" it
+ currentIndex = $.inArray( item, this.items );
+ if ( currentIndex >= 0 ) {
+ this.removeItems( [ item ] );
+ // Adjust index to compensate for removal
+ if ( currentIndex < index ) {
+ index--;
+ }
+ }
+ // Add the item
+ if ( item.connect && item.disconnect && !$.isEmptyObject( this.aggregateItemEvents ) ) {
+ events = {};
+ for ( event in this.aggregateItemEvents ) {
+ events[ event ] = [ 'emit', this.aggregateItemEvents[ event ], item ];
+ }
+ item.connect( this, events );
+ }
+ item.setElementGroup( this );
+ itemElements.push( item.$element.get( 0 ) );
+ }
+
+ if ( index === undefined || index < 0 || index >= this.items.length ) {
+ this.$group.append( itemElements );
+ this.items.push.apply( this.items, items );
+ } else if ( index === 0 ) {
+ this.$group.prepend( itemElements );
+ this.items.unshift.apply( this.items, items );
+ } else {
+ this.items[ index ].$element.before( itemElements );
+ this.items.splice.apply( this.items, [ index, 0 ].concat( items ) );
+ }
+
+ return this;
+};
+
+/**
+ * Remove the specified items from a group.
+ *
+ * Removed items are detached (not removed) from the DOM so that they may be reused.
+ * To remove all items from a group, you may wish to use the #clearItems method instead.
+ *
+ * @param {OO.ui.Element[]} items An array of items to remove
+ * @chainable
+ */
+OO.ui.GroupElement.prototype.removeItems = function ( items ) {
+ var i, len, item, index, remove, itemEvent;
+
+ // Remove specific items
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ item = items[ i ];
+ index = $.inArray( item, this.items );
+ if ( index !== -1 ) {
+ if (
+ item.connect && item.disconnect &&
+ !$.isEmptyObject( this.aggregateItemEvents )
+ ) {
+ remove = {};
+ if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
+ remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
+ }
+ item.disconnect( this, remove );
+ }
+ item.setElementGroup( null );
+ this.items.splice( index, 1 );
+ item.$element.detach();
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Clear all items from the group.
+ *
+ * Cleared items are detached from the DOM, not removed, so that they may be reused.
+ * To remove only a subset of items from a group, use the #removeItems method.
+ *
+ * @chainable
+ */
+OO.ui.GroupElement.prototype.clearItems = function () {
+ var i, len, item, remove, itemEvent;
+
+ // Remove all items
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[ i ];
+ if (
+ item.connect && item.disconnect &&
+ !$.isEmptyObject( this.aggregateItemEvents )
+ ) {
+ remove = {};
+ if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
+ remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
+ }
+ item.disconnect( this, remove );
+ }
+ item.setElementGroup( null );
+ item.$element.detach();
+ }
+
+ this.items = [];
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/IconElement.js b/vendor/oojs/oojs-ui/src/elements/IconElement.js
new file mode 100644
index 00000000..e3cf2f2a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/IconElement.js
@@ -0,0 +1,187 @@
+/**
+ * IconElement is often mixed into other classes to generate an icon.
+ * Icons are graphics, about the size of normal text. They are used to aid the user
+ * in locating a control or to convey information in a space-efficient way. See the
+ * [OOjs UI documentation on MediaWiki] [1] for a list of icons
+ * included in the library.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$icon] The icon element created by the class. If this configuration is omitted,
+ * the icon element will use a generated `<span>`. To use a different HTML tag, or to specify that
+ * the icon element be set to an existing icon instead of the one generated by this class, set a
+ * value using a jQuery selection. For example:
+ *
+ * // Use a <div> tag instead of a <span>
+ * $icon: $("<div>")
+ * // Use an existing icon element instead of the one generated by the class
+ * $icon: this.$element
+ * // Use an icon element from a child widget
+ * $icon: this.childwidget.$element
+ * @cfg {Object|string} [icon=''] The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of
+ * symbolic names. A map is used for i18n purposes and contains a `default` icon
+ * name and additional names keyed by language code. The `default` name is used when no icon is keyed
+ * by the user's language.
+ *
+ * Example of an i18n map:
+ *
+ * { default: 'bold-a', en: 'bold-b', de: 'bold-f' }
+ * See the [OOjs UI documentation on MediaWiki] [2] for a list of icons included in the library.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ * @cfg {string|Function} [iconTitle] A text string used as the icon title, or a function that returns title
+ * text. The icon title is displayed when users move the mouse over the icon.
+ */
+OO.ui.IconElement = function OoUiIconElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$icon = null;
+ this.icon = null;
+ this.iconTitle = null;
+
+ // Initialization
+ this.setIcon( config.icon || this.constructor.static.icon );
+ this.setIconTitle( config.iconTitle || this.constructor.static.iconTitle );
+ this.setIconElement( config.$icon || $( '<span>' ) );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.IconElement );
+
+/* Static Properties */
+
+/**
+ * The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names. A map is used
+ * for i18n purposes and contains a `default` icon name and additional names keyed by
+ * language code. The `default` name is used when no icon is keyed by the user's language.
+ *
+ * Example of an i18n map:
+ *
+ * { default: 'bold-a', en: 'bold-b', de: 'bold-f' }
+ *
+ * Note: the static property will be overridden if the #icon configuration is used.
+ *
+ * @static
+ * @inheritable
+ * @property {Object|string}
+ */
+OO.ui.IconElement.static.icon = null;
+
+/**
+ * The icon title, displayed when users move the mouse over the icon. The value can be text, a
+ * function that returns title text, or `null` for no title.
+ *
+ * The static property will be overridden if the #iconTitle configuration is used.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null}
+ */
+OO.ui.IconElement.static.iconTitle = null;
+
+/* Methods */
+
+/**
+ * Set the icon element. This method is used to retarget an icon mixin so that its functionality
+ * applies to the specified icon element instead of the one created by the class. If an icon
+ * element is already set, the mixin’s effect on that element is removed. Generated CSS classes
+ * and mixin methods will no longer affect the element.
+ *
+ * @param {jQuery} $icon Element to use as icon
+ */
+OO.ui.IconElement.prototype.setIconElement = function ( $icon ) {
+ if ( this.$icon ) {
+ this.$icon
+ .removeClass( 'oo-ui-iconElement-icon oo-ui-icon-' + this.icon )
+ .removeAttr( 'title' );
+ }
+
+ this.$icon = $icon
+ .addClass( 'oo-ui-iconElement-icon' )
+ .toggleClass( 'oo-ui-icon-' + this.icon, !!this.icon );
+ if ( this.iconTitle !== null ) {
+ this.$icon.attr( 'title', this.iconTitle );
+ }
+};
+
+/**
+ * Set icon by symbolic name (e.g., ‘remove’ or ‘menu’). Use `null` to remove an icon.
+ * The icon parameter can also be set to a map of icon names. See the #icon config setting
+ * for an example.
+ *
+ * @param {Object|string|null} icon A symbolic icon name, a {@link #icon map of icon names} keyed
+ * by language code, or `null` to remove the icon.
+ * @chainable
+ */
+OO.ui.IconElement.prototype.setIcon = function ( icon ) {
+ icon = OO.isPlainObject( icon ) ? OO.ui.getLocalValue( icon, null, 'default' ) : icon;
+ icon = typeof icon === 'string' && icon.trim().length ? icon.trim() : null;
+
+ if ( this.icon !== icon ) {
+ if ( this.$icon ) {
+ if ( this.icon !== null ) {
+ this.$icon.removeClass( 'oo-ui-icon-' + this.icon );
+ }
+ if ( icon !== null ) {
+ this.$icon.addClass( 'oo-ui-icon-' + icon );
+ }
+ }
+ this.icon = icon;
+ }
+
+ this.$element.toggleClass( 'oo-ui-iconElement', !!this.icon );
+ this.updateThemeClasses();
+
+ return this;
+};
+
+/**
+ * Set the icon title. Use `null` to remove the title.
+ *
+ * @param {string|Function|null} iconTitle A text string used as the icon title,
+ * a function that returns title text, or `null` for no title.
+ * @chainable
+ */
+OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
+ iconTitle = typeof iconTitle === 'function' ||
+ ( typeof iconTitle === 'string' && iconTitle.length ) ?
+ OO.ui.resolveMsg( iconTitle ) : null;
+
+ if ( this.iconTitle !== iconTitle ) {
+ this.iconTitle = iconTitle;
+ if ( this.$icon ) {
+ if ( this.iconTitle !== null ) {
+ this.$icon.attr( 'title', iconTitle );
+ } else {
+ this.$icon.removeAttr( 'title' );
+ }
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Get the symbolic name of the icon.
+ *
+ * @return {string} Icon name
+ */
+OO.ui.IconElement.prototype.getIcon = function () {
+ return this.icon;
+};
+
+/**
+ * Get the icon title. The title text is displayed when a user moves the mouse over the icon.
+ *
+ * @return {string} Icon title text
+ */
+OO.ui.IconElement.prototype.getIconTitle = function () {
+ return this.iconTitle;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/IndicatorElement.js b/vendor/oojs/oojs-ui/src/elements/IndicatorElement.js
new file mode 100644
index 00000000..5c6294d2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/IndicatorElement.js
@@ -0,0 +1,168 @@
+/**
+ * IndicatorElement is often mixed into other classes to generate an indicator.
+ * Indicators are small graphics that are generally used in two ways:
+ *
+ * - To draw attention to the status of an item. For example, an indicator might be
+ * used to show that an item in a list has errors that need to be resolved.
+ * - To clarify the function of a control that acts in an exceptional way (a button
+ * that opens a menu instead of performing an action directly, for example).
+ *
+ * For a list of indicators included in the library, please see the
+ * [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$indicator] The indicator element created by the class. If this
+ * configuration is omitted, the indicator element will use a generated `<span>`.
+ * @cfg {string} [indicator] Symbolic name of the indicator (e.g., ‘alert’ or ‘down’).
+ * See the [OOjs UI documentation on MediaWiki][2] for a list of indicators included
+ * in the library.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
+ * @cfg {string|Function} [indicatorTitle] A text string used as the indicator title,
+ * or a function that returns title text. The indicator title is displayed when users move
+ * the mouse over the indicator.
+ */
+OO.ui.IndicatorElement = function OoUiIndicatorElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$indicator = null;
+ this.indicator = null;
+ this.indicatorTitle = null;
+
+ // Initialization
+ this.setIndicator( config.indicator || this.constructor.static.indicator );
+ this.setIndicatorTitle( config.indicatorTitle || this.constructor.static.indicatorTitle );
+ this.setIndicatorElement( config.$indicator || $( '<span>' ) );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.IndicatorElement );
+
+/* Static Properties */
+
+/**
+ * Symbolic name of the indicator (e.g., ‘alert’ or ‘down’).
+ * The static property will be overridden if the #indicator configuration is used.
+ *
+ * @static
+ * @inheritable
+ * @property {string|null}
+ */
+OO.ui.IndicatorElement.static.indicator = null;
+
+/**
+ * A text string used as the indicator title, a function that returns title text, or `null`
+ * for no title. The static property will be overridden if the #indicatorTitle configuration is used.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null}
+ */
+OO.ui.IndicatorElement.static.indicatorTitle = null;
+
+/* Methods */
+
+/**
+ * Set the indicator element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $indicator Element to use as indicator
+ */
+OO.ui.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {
+ if ( this.$indicator ) {
+ this.$indicator
+ .removeClass( 'oo-ui-indicatorElement-indicator oo-ui-indicator-' + this.indicator )
+ .removeAttr( 'title' );
+ }
+
+ this.$indicator = $indicator
+ .addClass( 'oo-ui-indicatorElement-indicator' )
+ .toggleClass( 'oo-ui-indicator-' + this.indicator, !!this.indicator );
+ if ( this.indicatorTitle !== null ) {
+ this.$indicator.attr( 'title', this.indicatorTitle );
+ }
+};
+
+/**
+ * Set the indicator by its symbolic name: ‘alert’, ‘down’, ‘next’, ‘previous’, ‘required’, ‘up’. Use `null` to remove the indicator.
+ *
+ * @param {string|null} indicator Symbolic name of indicator, or `null` for no indicator
+ * @chainable
+ */
+OO.ui.IndicatorElement.prototype.setIndicator = function ( indicator ) {
+ indicator = typeof indicator === 'string' && indicator.length ? indicator.trim() : null;
+
+ if ( this.indicator !== indicator ) {
+ if ( this.$indicator ) {
+ if ( this.indicator !== null ) {
+ this.$indicator.removeClass( 'oo-ui-indicator-' + this.indicator );
+ }
+ if ( indicator !== null ) {
+ this.$indicator.addClass( 'oo-ui-indicator-' + indicator );
+ }
+ }
+ this.indicator = indicator;
+ }
+
+ this.$element.toggleClass( 'oo-ui-indicatorElement', !!this.indicator );
+ this.updateThemeClasses();
+
+ return this;
+};
+
+/**
+ * Set the indicator title.
+ *
+ * The title is displayed when a user moves the mouse over the indicator.
+ *
+ * @param {string|Function|null} indicator Indicator title text, a function that returns text, or
+ * `null` for no indicator title
+ * @chainable
+ */
+OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
+ indicatorTitle = typeof indicatorTitle === 'function' ||
+ ( typeof indicatorTitle === 'string' && indicatorTitle.length ) ?
+ OO.ui.resolveMsg( indicatorTitle ) : null;
+
+ if ( this.indicatorTitle !== indicatorTitle ) {
+ this.indicatorTitle = indicatorTitle;
+ if ( this.$indicator ) {
+ if ( this.indicatorTitle !== null ) {
+ this.$indicator.attr( 'title', indicatorTitle );
+ } else {
+ this.$indicator.removeAttr( 'title' );
+ }
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Get the symbolic name of the indicator (e.g., ‘alert’ or ‘down’).
+ *
+ * @return {string} Symbolic name of indicator
+ */
+OO.ui.IndicatorElement.prototype.getIndicator = function () {
+ return this.indicator;
+};
+
+/**
+ * Get the indicator title.
+ *
+ * The title is displayed when a user moves the mouse over the indicator.
+ *
+ * @return {string} Indicator title text
+ */
+OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
+ return this.indicatorTitle;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/LabelElement.js b/vendor/oojs/oojs-ui/src/elements/LabelElement.js
new file mode 100644
index 00000000..674fa73a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/LabelElement.js
@@ -0,0 +1,152 @@
+/**
+ * LabelElement is often mixed into other classes to generate a label, which
+ * helps identify the function of an interface element.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$label] The label element created by the class. If this
+ * configuration is omitted, the label element will use a generated `<span>`.
+ * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [label] The label text. The label can be specified
+ * as a plaintext string, a jQuery selection of elements, or a function that will produce a string
+ * in the future. See the [OOjs UI documentation on MediaWiki] [2] for examples.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Labels
+ * @cfg {boolean} [autoFitLabel=true] Fit the label to the width of the parent element.
+ * The label will be truncated to fit if necessary.
+ */
+OO.ui.LabelElement = function OoUiLabelElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$label = null;
+ this.label = null;
+ this.autoFitLabel = config.autoFitLabel === undefined || !!config.autoFitLabel;
+
+ // Initialization
+ this.setLabel( config.label || this.constructor.static.label );
+ this.setLabelElement( config.$label || $( '<span>' ) );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.LabelElement );
+
+/* Events */
+
+/**
+ * @event labelChange
+ * @param {string} value
+ */
+
+/* Static Properties */
+
+/**
+ * The label text. The label can be specified as a plaintext string, a function that will
+ * produce a string in the future, or `null` for no label. The static value will
+ * be overridden if a label is specified with the #label config option.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null}
+ */
+OO.ui.LabelElement.static.label = null;
+
+/* Methods */
+
+/**
+ * Set the label element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $label Element to use as label
+ */
+OO.ui.LabelElement.prototype.setLabelElement = function ( $label ) {
+ if ( this.$label ) {
+ this.$label.removeClass( 'oo-ui-labelElement-label' ).empty();
+ }
+
+ this.$label = $label.addClass( 'oo-ui-labelElement-label' );
+ this.setLabelContent( this.label );
+};
+
+/**
+ * Set the label.
+ *
+ * An empty string will result in the label being hidden. A string containing only whitespace will
+ * be converted to a single `&nbsp;`.
+ *
+ * @param {jQuery|string|OO.ui.HtmlSnippet|Function|null} label Label nodes; text; a function that returns nodes or
+ * text; or null for no label
+ * @chainable
+ */
+OO.ui.LabelElement.prototype.setLabel = function ( label ) {
+ label = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label;
+ label = ( ( typeof label === 'string' && label.length ) || label instanceof jQuery || label instanceof OO.ui.HtmlSnippet ) ? label : null;
+
+ this.$element.toggleClass( 'oo-ui-labelElement', !!label );
+
+ if ( this.label !== label ) {
+ if ( this.$label ) {
+ this.setLabelContent( label );
+ }
+ this.label = label;
+ this.emit( 'labelChange' );
+ }
+
+ return this;
+};
+
+/**
+ * Get the label.
+ *
+ * @return {jQuery|string|Function|null} Label nodes; text; a function that returns nodes or
+ * text; or null for no label
+ */
+OO.ui.LabelElement.prototype.getLabel = function () {
+ return this.label;
+};
+
+/**
+ * Fit the label.
+ *
+ * @chainable
+ */
+OO.ui.LabelElement.prototype.fitLabel = function () {
+ if ( this.$label && this.$label.autoEllipsis && this.autoFitLabel ) {
+ this.$label.autoEllipsis( { hasSpan: false, tooltip: true } );
+ }
+
+ return this;
+};
+
+/**
+ * Set the content of the label.
+ *
+ * Do not call this method until after the label element has been set by #setLabelElement.
+ *
+ * @private
+ * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ * text; or null for no label
+ */
+OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
+ if ( typeof label === 'string' ) {
+ if ( label.match( /^\s*$/ ) ) {
+ // Convert whitespace only string to a single non-breaking space
+ this.$label.html( '&nbsp;' );
+ } else {
+ this.$label.text( label );
+ }
+ } else if ( label instanceof OO.ui.HtmlSnippet ) {
+ this.$label.html( label.toString() );
+ } else if ( label instanceof jQuery ) {
+ this.$label.empty().append( label );
+ } else {
+ this.$label.empty();
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/LookupElement.js b/vendor/oojs/oojs-ui/src/elements/LookupElement.js
new file mode 100644
index 00000000..b79f02a9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/LookupElement.js
@@ -0,0 +1,352 @@
+/**
+ * LookupElement is a mixin that creates a {@link OO.ui.TextInputMenuSelectWidget menu} of suggested values for
+ * a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on the characters the user types
+ * into the text input field and, in general, the menu is only displayed when the user types. If a suggested value is chosen
+ * from the lookup menu, that value becomes the value of the input field.
+ *
+ * Note that a new menu of suggested items is displayed when a value is chosen from the lookup menu. If this is
+ * not the desired behavior, disable lookup menus with the #setLookupsDisabled method, then set the value, then
+ * re-enable lookups.
+ *
+ * See the [OOjs UI demos][1] for an example.
+ *
+ * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/index.html#widgets-apex-vector-ltr
+ *
+ * @class
+ * @abstract
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$overlay] Overlay for the lookup menu; defaults to relative positioning
+ * @cfg {jQuery} [$container=this.$element] The container element. The lookup menu is rendered beneath the specified element.
+ * @cfg {boolean} [allowSuggestionsWhenEmpty=false] Request and display a lookup menu when the text input is empty.
+ * By default, the lookup menu is not generated and displayed until the user begins to type.
+ */
+OO.ui.LookupElement = function OoUiLookupElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$overlay = config.$overlay || this.$element;
+ this.lookupMenu = new OO.ui.TextInputMenuSelectWidget( this, {
+ widget: this,
+ input: this,
+ $container: config.$container
+ } );
+
+ this.allowSuggestionsWhenEmpty = config.allowSuggestionsWhenEmpty || false;
+
+ this.lookupCache = {};
+ this.lookupQuery = null;
+ this.lookupRequest = null;
+ this.lookupsDisabled = false;
+ this.lookupInputFocused = false;
+
+ // Events
+ this.$input.on( {
+ focus: this.onLookupInputFocus.bind( this ),
+ blur: this.onLookupInputBlur.bind( this ),
+ mousedown: this.onLookupInputMouseDown.bind( this )
+ } );
+ this.connect( this, { change: 'onLookupInputChange' } );
+ this.lookupMenu.connect( this, {
+ toggle: 'onLookupMenuToggle',
+ choose: 'onLookupMenuItemChoose'
+ } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-lookupElement' );
+ this.lookupMenu.$element.addClass( 'oo-ui-lookupElement-menu' );
+ this.$overlay.append( this.lookupMenu.$element );
+};
+
+/* Methods */
+
+/**
+ * Handle input focus event.
+ *
+ * @protected
+ * @param {jQuery.Event} e Input focus event
+ */
+OO.ui.LookupElement.prototype.onLookupInputFocus = function () {
+ this.lookupInputFocused = true;
+ this.populateLookupMenu();
+};
+
+/**
+ * Handle input blur event.
+ *
+ * @protected
+ * @param {jQuery.Event} e Input blur event
+ */
+OO.ui.LookupElement.prototype.onLookupInputBlur = function () {
+ this.closeLookupMenu();
+ this.lookupInputFocused = false;
+};
+
+/**
+ * Handle input mouse down event.
+ *
+ * @protected
+ * @param {jQuery.Event} e Input mouse down event
+ */
+OO.ui.LookupElement.prototype.onLookupInputMouseDown = function () {
+ // Only open the menu if the input was already focused.
+ // This way we allow the user to open the menu again after closing it with Esc
+ // by clicking in the input. Opening (and populating) the menu when initially
+ // clicking into the input is handled by the focus handler.
+ if ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) {
+ this.populateLookupMenu();
+ }
+};
+
+/**
+ * Handle input change event.
+ *
+ * @protected
+ * @param {string} value New input value
+ */
+OO.ui.LookupElement.prototype.onLookupInputChange = function () {
+ if ( this.lookupInputFocused ) {
+ this.populateLookupMenu();
+ }
+};
+
+/**
+ * Handle the lookup menu being shown/hidden.
+ *
+ * @protected
+ * @param {boolean} visible Whether the lookup menu is now visible.
+ */
+OO.ui.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {
+ if ( !visible ) {
+ // When the menu is hidden, abort any active request and clear the menu.
+ // This has to be done here in addition to closeLookupMenu(), because
+ // MenuSelectWidget will close itself when the user presses Esc.
+ this.abortLookupRequest();
+ this.lookupMenu.clearItems();
+ }
+};
+
+/**
+ * Handle menu item 'choose' event, updating the text input value to the value of the clicked item.
+ *
+ * @protected
+ * @param {OO.ui.MenuOptionWidget} item Selected item
+ */
+OO.ui.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {
+ this.setValue( item.getData() );
+};
+
+/**
+ * Get lookup menu.
+ *
+ * @private
+ * @return {OO.ui.TextInputMenuSelectWidget}
+ */
+OO.ui.LookupElement.prototype.getLookupMenu = function () {
+ return this.lookupMenu;
+};
+
+/**
+ * Disable or re-enable lookups.
+ *
+ * When lookups are disabled, calls to #populateLookupMenu will be ignored.
+ *
+ * @param {boolean} disabled Disable lookups
+ */
+OO.ui.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {
+ this.lookupsDisabled = !!disabled;
+};
+
+/**
+ * Open the menu. If there are no entries in the menu, this does nothing.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.openLookupMenu = function () {
+ if ( !this.lookupMenu.isEmpty() ) {
+ this.lookupMenu.toggle( true );
+ }
+ return this;
+};
+
+/**
+ * Close the menu, empty it, and abort any pending request.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.closeLookupMenu = function () {
+ this.lookupMenu.toggle( false );
+ this.abortLookupRequest();
+ this.lookupMenu.clearItems();
+ return this;
+};
+
+/**
+ * Request menu items based on the input's current value, and when they arrive,
+ * populate the menu with these items and show the menu.
+ *
+ * If lookups have been disabled with #setLookupsDisabled, this function does nothing.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.populateLookupMenu = function () {
+ var widget = this,
+ value = this.getValue();
+
+ if ( this.lookupsDisabled ) {
+ return;
+ }
+
+ // If the input is empty, clear the menu, unless suggestions when empty are allowed.
+ if ( !this.allowSuggestionsWhenEmpty && value === '' ) {
+ this.closeLookupMenu();
+ // Skip population if there is already a request pending for the current value
+ } else if ( value !== this.lookupQuery ) {
+ this.getLookupMenuItems()
+ .done( function ( items ) {
+ widget.lookupMenu.clearItems();
+ if ( items.length ) {
+ widget.lookupMenu
+ .addItems( items )
+ .toggle( true );
+ widget.initializeLookupMenuSelection();
+ } else {
+ widget.lookupMenu.toggle( false );
+ }
+ } )
+ .fail( function () {
+ widget.lookupMenu.clearItems();
+ } );
+ }
+
+ return this;
+};
+
+/**
+ * Highlight the first selectable item in the menu.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.LookupElement.prototype.initializeLookupMenuSelection = function () {
+ if ( !this.lookupMenu.getSelectedItem() ) {
+ this.lookupMenu.highlightItem( this.lookupMenu.getFirstSelectableItem() );
+ }
+};
+
+/**
+ * Get lookup menu items for the current query.
+ *
+ * @private
+ * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument of
+ * the done event. If the request was aborted to make way for a subsequent request, this promise
+ * will not be rejected: it will remain pending forever.
+ */
+OO.ui.LookupElement.prototype.getLookupMenuItems = function () {
+ var widget = this,
+ value = this.getValue(),
+ deferred = $.Deferred(),
+ ourRequest;
+
+ this.abortLookupRequest();
+ if ( Object.prototype.hasOwnProperty.call( this.lookupCache, value ) ) {
+ deferred.resolve( this.getLookupMenuOptionsFromData( this.lookupCache[ value ] ) );
+ } else {
+ this.pushPending();
+ this.lookupQuery = value;
+ ourRequest = this.lookupRequest = this.getLookupRequest();
+ ourRequest
+ .always( function () {
+ // We need to pop pending even if this is an old request, otherwise
+ // the widget will remain pending forever.
+ // TODO: this assumes that an aborted request will fail or succeed soon after
+ // being aborted, or at least eventually. It would be nice if we could popPending()
+ // at abort time, but only if we knew that we hadn't already called popPending()
+ // for that request.
+ widget.popPending();
+ } )
+ .done( function ( response ) {
+ // If this is an old request (and aborting it somehow caused it to still succeed),
+ // ignore its success completely
+ if ( ourRequest === widget.lookupRequest ) {
+ widget.lookupQuery = null;
+ widget.lookupRequest = null;
+ widget.lookupCache[ value ] = widget.getLookupCacheDataFromResponse( response );
+ deferred.resolve( widget.getLookupMenuOptionsFromData( widget.lookupCache[ value ] ) );
+ }
+ } )
+ .fail( function () {
+ // If this is an old request (or a request failing because it's being aborted),
+ // ignore its failure completely
+ if ( ourRequest === widget.lookupRequest ) {
+ widget.lookupQuery = null;
+ widget.lookupRequest = null;
+ deferred.reject();
+ }
+ } );
+ }
+ return deferred.promise();
+};
+
+/**
+ * Abort the currently pending lookup request, if any.
+ *
+ * @private
+ */
+OO.ui.LookupElement.prototype.abortLookupRequest = function () {
+ var oldRequest = this.lookupRequest;
+ if ( oldRequest ) {
+ // First unset this.lookupRequest to the fail handler will notice
+ // that the request is no longer current
+ this.lookupRequest = null;
+ this.lookupQuery = null;
+ oldRequest.abort();
+ }
+};
+
+/**
+ * Get a new request object of the current lookup query value.
+ *
+ * @protected
+ * @abstract
+ * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method
+ */
+OO.ui.LookupElement.prototype.getLookupRequest = function () {
+ // Stub, implemented in subclass
+ return null;
+};
+
+/**
+ * Pre-process data returned by the request from #getLookupRequest.
+ *
+ * The return value of this function will be cached, and any further queries for the given value
+ * will use the cache rather than doing API requests.
+ *
+ * @protected
+ * @abstract
+ * @param {Mixed} response Response from server
+ * @return {Mixed} Cached result data
+ */
+OO.ui.LookupElement.prototype.getLookupCacheDataFromResponse = function () {
+ // Stub, implemented in subclass
+ return [];
+};
+
+/**
+ * Get a list of menu option widgets from the (possibly cached) data returned by
+ * #getLookupCacheDataFromResponse.
+ *
+ * @protected
+ * @abstract
+ * @param {Mixed} data Cached result data, usually an array
+ * @return {OO.ui.MenuOptionWidget[]} Menu items
+ */
+OO.ui.LookupElement.prototype.getLookupMenuOptionsFromData = function () {
+ // Stub, implemented in subclass
+ return [];
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/PendingElement.js b/vendor/oojs/oojs-ui/src/elements/PendingElement.js
new file mode 100644
index 00000000..c5f71d54
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/PendingElement.js
@@ -0,0 +1,84 @@
+/**
+ * Element that can be marked as pending.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$pending] Element to mark as pending, defaults to this.$element
+ */
+OO.ui.PendingElement = function OoUiPendingElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.pending = 0;
+ this.$pending = null;
+
+ // Initialisation
+ this.setPendingElement( config.$pending || this.$element );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.PendingElement );
+
+/* Methods */
+
+/**
+ * Set the pending element (and clean up any existing one).
+ *
+ * @param {jQuery} $pending The element to set to pending.
+ */
+OO.ui.PendingElement.prototype.setPendingElement = function ( $pending ) {
+ if ( this.$pending ) {
+ this.$pending.removeClass( 'oo-ui-pendingElement-pending' );
+ }
+
+ this.$pending = $pending;
+ if ( this.pending > 0 ) {
+ this.$pending.addClass( 'oo-ui-pendingElement-pending' );
+ }
+};
+
+/**
+ * Check if input is pending.
+ *
+ * @return {boolean}
+ */
+OO.ui.PendingElement.prototype.isPending = function () {
+ return !!this.pending;
+};
+
+/**
+ * Increase the pending stack.
+ *
+ * @chainable
+ */
+OO.ui.PendingElement.prototype.pushPending = function () {
+ if ( this.pending === 0 ) {
+ this.$pending.addClass( 'oo-ui-pendingElement-pending' );
+ this.updateThemeClasses();
+ }
+ this.pending++;
+
+ return this;
+};
+
+/**
+ * Reduce the pending stack.
+ *
+ * Clamped at zero.
+ *
+ * @chainable
+ */
+OO.ui.PendingElement.prototype.popPending = function () {
+ if ( this.pending === 1 ) {
+ this.$pending.removeClass( 'oo-ui-pendingElement-pending' );
+ this.updateThemeClasses();
+ }
+ this.pending = Math.max( 0, this.pending - 1 );
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/PopupElement.js b/vendor/oojs/oojs-ui/src/elements/PopupElement.js
new file mode 100644
index 00000000..099e94b7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/PopupElement.js
@@ -0,0 +1,36 @@
+/**
+ * PopupElement is mixed into other classes to generate a {@link OO.ui.PopupWidget popup widget}.
+ * A popup is a container for content. It is overlaid and positioned absolutely. By default, each
+ * popup has an anchor, which is an arrow-like protrusion that points toward the popup’s origin.
+ * See {@link OO.ui.PopupWidget PopupWidget} for an example.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object} [popup] Configuration to pass to popup
+ * @cfg {boolean} [popup.autoClose=true] Popup auto-closes when it loses focus
+ */
+OO.ui.PopupElement = function OoUiPopupElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.popup = new OO.ui.PopupWidget( $.extend(
+ { autoClose: true },
+ config.popup,
+ { $autoCloseIgnore: this.$element }
+ ) );
+};
+
+/* Methods */
+
+/**
+ * Get popup.
+ *
+ * @return {OO.ui.PopupWidget} Popup widget
+ */
+OO.ui.PopupElement.prototype.getPopup = function () {
+ return this.popup;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/TabIndexedElement.js b/vendor/oojs/oojs-ui/src/elements/TabIndexedElement.js
new file mode 100644
index 00000000..5c2151a0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/TabIndexedElement.js
@@ -0,0 +1,138 @@
+/**
+ * The TabIndexedElement class is an attribute mixin used to add additional functionality to an
+ * element created by another class. The mixin provides a ‘tabIndex’ property, which specifies the
+ * order in which users will navigate through the focusable elements via the "tab" key.
+ *
+ * @example
+ * // TabIndexedElement is mixed into the ButtonWidget class
+ * // to provide a tabIndex property.
+ * var button1 = new OO.ui.ButtonWidget( {
+ * label: 'fourth',
+ * tabIndex: 4
+ * } );
+ * var button2 = new OO.ui.ButtonWidget( {
+ * label: 'second',
+ * tabIndex: 2
+ * } );
+ * var button3 = new OO.ui.ButtonWidget( {
+ * label: 'third',
+ * tabIndex: 3
+ * } );
+ * var button4 = new OO.ui.ButtonWidget( {
+ * label: 'first',
+ * tabIndex: 1
+ * } );
+ * $( 'body' ).append( button1.$element, button2.$element, button3.$element, button4.$element );
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$tabIndexed] The element that should use the tabindex functionality. By default,
+ * the functionality is applied to the element created by the class ($element). If a different element is specified, the tabindex
+ * functionality will be applied to it instead.
+ * @cfg {number|null} [tabIndex=0] Number that specifies the element’s position in the tab-navigation
+ * order (e.g., 1 for the first focusable element). Use 0 to use the default navigation order; use -1
+ * to remove the element from the tab-navigation flow.
+ */
+OO.ui.TabIndexedElement = function OoUiTabIndexedElement( config ) {
+ // Configuration initialization
+ config = $.extend( { tabIndex: 0 }, config );
+
+ // Properties
+ this.$tabIndexed = null;
+ this.tabIndex = null;
+
+ // Events
+ this.connect( this, { disable: 'onDisable' } );
+
+ // Initialization
+ this.setTabIndex( config.tabIndex );
+ this.setTabIndexedElement( config.$tabIndexed || this.$element );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.TabIndexedElement );
+
+/* Methods */
+
+/**
+ * Set the element that should use the tabindex functionality.
+ *
+ * This method is used to retarget a tabindex mixin so that its functionality applies
+ * to the specified element. If an element is currently using the functionality, the mixin’s
+ * effect on that element is removed before the new element is set up.
+ *
+ * @param {jQuery} $tabIndexed Element that should use the tabindex functionality
+ * @chainable
+ */
+OO.ui.TabIndexedElement.prototype.setTabIndexedElement = function ( $tabIndexed ) {
+ var tabIndex = this.tabIndex;
+ // Remove attributes from old $tabIndexed
+ this.setTabIndex( null );
+ // Force update of new $tabIndexed
+ this.$tabIndexed = $tabIndexed;
+ this.tabIndex = tabIndex;
+ return this.updateTabIndex();
+};
+
+/**
+ * Set the value of the tabindex.
+ *
+ * @param {number|null} tabIndex Tabindex value, or `null` for no tabindex
+ * @chainable
+ */
+OO.ui.TabIndexedElement.prototype.setTabIndex = function ( tabIndex ) {
+ tabIndex = typeof tabIndex === 'number' ? tabIndex : null;
+
+ if ( this.tabIndex !== tabIndex ) {
+ this.tabIndex = tabIndex;
+ this.updateTabIndex();
+ }
+
+ return this;
+};
+
+/**
+ * Update the `tabindex` attribute, in case of changes to tab index or
+ * disabled state.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.TabIndexedElement.prototype.updateTabIndex = function () {
+ if ( this.$tabIndexed ) {
+ if ( this.tabIndex !== null ) {
+ // Do not index over disabled elements
+ this.$tabIndexed.attr( {
+ tabindex: this.isDisabled() ? -1 : this.tabIndex,
+ // ChromeVox and NVDA do not seem to inherit this from parent elements
+ 'aria-disabled': this.isDisabled().toString()
+ } );
+ } else {
+ this.$tabIndexed.removeAttr( 'tabindex aria-disabled' );
+ }
+ }
+ return this;
+};
+
+/**
+ * Handle disable events.
+ *
+ * @private
+ * @param {boolean} disabled Element is disabled
+ */
+OO.ui.TabIndexedElement.prototype.onDisable = function () {
+ this.updateTabIndex();
+};
+
+/**
+ * Get the value of the tabindex.
+ *
+ * @return {number|null} Tabindex value
+ */
+OO.ui.TabIndexedElement.prototype.getTabIndex = function () {
+ return this.tabIndex;
+};
diff --git a/vendor/oojs/oojs-ui/src/elements/TitledElement.js b/vendor/oojs/oojs-ui/src/elements/TitledElement.js
new file mode 100644
index 00000000..905ec019
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/elements/TitledElement.js
@@ -0,0 +1,106 @@
+/**
+ * TitledElement is mixed into other classes to provide a `title` attribute.
+ * Titles are rendered by the browser and are made visible when the user moves
+ * the mouse over the element. Titles are not visible on touch devices.
+ *
+ * @example
+ * // TitledElement provides a 'title' attribute to the
+ * // ButtonWidget class
+ * var button = new OO.ui.ButtonWidget( {
+ * label: 'Button with Title',
+ * title: 'I am a button'
+ * } );
+ * $( 'body' ).append( button.$element );
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$titled] The element to which the `title` attribute is applied.
+ * If this config is omitted, the title functionality is applied to $element, the
+ * element created by the class.
+ * @cfg {string|Function} [title] The title text or a function that returns text. If
+ * this config is omitted, the value of the {@link #static-title static title} property is used.
+ */
+OO.ui.TitledElement = function OoUiTitledElement( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties
+ this.$titled = null;
+ this.title = null;
+
+ // Initialization
+ this.setTitle( config.title || this.constructor.static.title );
+ this.setTitledElement( config.$titled || this.$element );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.TitledElement );
+
+/* Static Properties */
+
+/**
+ * The title text, a function that returns text, or `null` for no title. The value of the static property
+ * is overridden if the #title config option is used.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null}
+ */
+OO.ui.TitledElement.static.title = null;
+
+/* Methods */
+
+/**
+ * Set the titled element.
+ *
+ * This method is used to retarget a titledElement mixin so that its functionality applies to the specified element.
+ * If an element is already set, the mixin’s effect on that element is removed before the new element is set up.
+ *
+ * @param {jQuery} $titled Element that should use the 'titled' functionality
+ */
+OO.ui.TitledElement.prototype.setTitledElement = function ( $titled ) {
+ if ( this.$titled ) {
+ this.$titled.removeAttr( 'title' );
+ }
+
+ this.$titled = $titled;
+ if ( this.title ) {
+ this.$titled.attr( 'title', this.title );
+ }
+};
+
+/**
+ * Set title.
+ *
+ * @param {string|Function|null} title Title text, a function that returns text, or `null` for no title
+ * @chainable
+ */
+OO.ui.TitledElement.prototype.setTitle = function ( title ) {
+ title = typeof title === 'string' ? OO.ui.resolveMsg( title ) : null;
+
+ if ( this.title !== title ) {
+ if ( this.$titled ) {
+ if ( title !== null ) {
+ this.$titled.attr( 'title', title );
+ } else {
+ this.$titled.removeAttr( 'title' );
+ }
+ }
+ this.title = title;
+ }
+
+ return this;
+};
+
+/**
+ * Get title.
+ *
+ * @return {string} Title string
+ */
+OO.ui.TitledElement.prototype.getTitle = function () {
+ return this.title;
+};
diff --git a/vendor/oojs/oojs-ui/src/intro.js.txt b/vendor/oojs/oojs-ui/src/intro.js.txt
new file mode 100644
index 00000000..31f545ca
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/intro.js.txt
@@ -0,0 +1,3 @@
+( function ( OO ) {
+
+'use strict';
diff --git a/vendor/oojs/oojs-ui/src/layouts/ActionFieldLayout.js b/vendor/oojs/oojs-ui/src/layouts/ActionFieldLayout.js
new file mode 100644
index 00000000..59640ed9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/ActionFieldLayout.js
@@ -0,0 +1,81 @@
+/**
+ * ActionFieldLayouts are used with OO.ui.FieldsetLayout. The layout consists of a field-widget, a button,
+ * and an optional label and/or help text. The field-widget (e.g., a {@link OO.ui.TextInputWidget TextInputWidget}),
+ * is required and is specified before any optional configuration settings.
+ *
+ * Labels can be aligned in one of four ways:
+ *
+ * - **left**: The label is placed before the field-widget and aligned with the left margin.
+ * A left-alignment is used for forms with many fields.
+ * - **right**: The label is placed before the field-widget and aligned to the right margin.
+ * A right-alignment is used for long but familiar forms which users tab through,
+ * verifying the current field with a quick glance at the label.
+ * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms
+ * that users fill out from top to bottom.
+ * - **inline**: The label is placed after the field-widget and aligned to the left.
+ * An inline-alignment is best used with checkboxes or radio buttons.
+ *
+ * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout when help
+ * text is specified.
+ *
+ * @example
+ * // Example of an ActionFieldLayout
+ * var actionFieldLayout = new OO.ui.ActionFieldLayout(
+ * new OO.ui.TextInputWidget( {
+ * placeholder: 'Field widget'
+ * } ),
+ * new OO.ui.ButtonWidget( {
+ * label: 'Button'
+ * } ),
+ * {
+ * label: 'An ActionFieldLayout. This label is aligned top',
+ * align: 'top',
+ * help: 'This is help text'
+ * }
+ * );
+ *
+ * $( 'body' ).append( actionFieldLayout.$element );
+ *
+ *
+ * @class
+ * @extends OO.ui.FieldLayout
+ *
+ * @constructor
+ * @param {OO.ui.Widget} fieldWidget Field widget
+ * @param {OO.ui.ButtonWidget} buttonWidget Button widget
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [align='left'] Alignment of the label: 'left', 'right', 'top' or 'inline'
+ * @cfg {string} [help] Help text. When help text is specified, a help icon will appear in the
+ * upper-right corner of the rendered field.
+ */
+OO.ui.ActionFieldLayout = function OoUiActionFieldLayout( fieldWidget, buttonWidget, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
+ config = fieldWidget;
+ fieldWidget = config.fieldWidget;
+ buttonWidget = config.buttonWidget;
+ }
+
+ // Configuration initialization
+ config = $.extend( { align: 'left' }, config );
+
+ // Parent constructor
+ OO.ui.ActionFieldLayout.super.call( this, fieldWidget, config );
+
+ // Properties
+ this.fieldWidget = fieldWidget;
+ this.buttonWidget = buttonWidget;
+ this.$button = $( '<div>' )
+ .addClass( 'oo-ui-actionFieldLayout-button' )
+ .append( this.buttonWidget.$element );
+ this.$input = $( '<div>' )
+ .addClass( 'oo-ui-actionFieldLayout-input' )
+ .append( this.fieldWidget.$element );
+ this.$field
+ .addClass( 'oo-ui-actionFieldLayout' )
+ .append( this.$input, this.$button );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ActionFieldLayout, OO.ui.FieldLayout );
diff --git a/vendor/oojs/oojs-ui/src/layouts/BookletLayout.js b/vendor/oojs/oojs-ui/src/layouts/BookletLayout.js
new file mode 100644
index 00000000..eebf57d6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/BookletLayout.js
@@ -0,0 +1,542 @@
+/**
+ * BookletLayouts contain {@link OO.ui.PageLayout page layouts} as well as
+ * an {@link OO.ui.OutlineSelectWidget outline} that allows users to easily navigate
+ * through the pages and select which one to display. By default, only one page is
+ * displayed at a time and the outline is hidden. When a user navigates to a new page,
+ * the booklet layout automatically focuses on the first focusable element, unless the
+ * default setting is changed. Optionally, booklets can be configured to show
+ * {@link OO.ui.OutlineControlsWidget controls} for adding, moving, and removing items.
+ *
+ * @example
+ * // Example of a BookletLayout that contains two PageLayouts.
+ *
+ * function PageOneLayout( name, config ) {
+ * PageOneLayout.super.call( this, name, config );
+ * this.$element.append( '<p>First page</p><p>(This booklet has an outline, displayed on the left)</p>' );
+ * }
+ * OO.inheritClass( PageOneLayout, OO.ui.PageLayout );
+ * PageOneLayout.prototype.setupOutlineItem = function () {
+ * this.outlineItem.setLabel( 'Page One' );
+ * };
+ *
+ * function PageTwoLayout( name, config ) {
+ * PageTwoLayout.super.call( this, name, config );
+ * this.$element.append( '<p>Second page</p>' );
+ * }
+ * OO.inheritClass( PageTwoLayout, OO.ui.PageLayout );
+ * PageTwoLayout.prototype.setupOutlineItem = function () {
+ * this.outlineItem.setLabel( 'Page Two' );
+ * };
+ *
+ * var page1 = new PageOneLayout( 'one' ),
+ * page2 = new PageTwoLayout( 'two' );
+ *
+ * var booklet = new OO.ui.BookletLayout( {
+ * outlined: true
+ * } );
+ *
+ * booklet.addPages ( [ page1, page2 ] );
+ * $( 'body' ).append( booklet.$element );
+ *
+ * @class
+ * @extends OO.ui.MenuLayout
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [continuous=false] Show all pages, one after another
+ * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new page is displayed.
+ * @cfg {boolean} [outlined=false] Show the outline. The outline is used to navigate through the pages of the booklet.
+ * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages
+ */
+OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.BookletLayout.super.call( this, config );
+
+ // Properties
+ this.currentPageName = null;
+ this.pages = {};
+ this.ignoreFocus = false;
+ this.stackLayout = new OO.ui.StackLayout( { continuous: !!config.continuous } );
+ this.$content.append( this.stackLayout.$element );
+ this.autoFocus = config.autoFocus === undefined || !!config.autoFocus;
+ this.outlineVisible = false;
+ this.outlined = !!config.outlined;
+ if ( this.outlined ) {
+ this.editable = !!config.editable;
+ this.outlineControlsWidget = null;
+ this.outlineSelectWidget = new OO.ui.OutlineSelectWidget();
+ this.outlinePanel = new OO.ui.PanelLayout( { scrollable: true } );
+ this.$menu.append( this.outlinePanel.$element );
+ this.outlineVisible = true;
+ if ( this.editable ) {
+ this.outlineControlsWidget = new OO.ui.OutlineControlsWidget(
+ this.outlineSelectWidget
+ );
+ }
+ }
+ this.toggleMenu( this.outlined );
+
+ // Events
+ this.stackLayout.connect( this, { set: 'onStackLayoutSet' } );
+ if ( this.outlined ) {
+ this.outlineSelectWidget.connect( this, { select: 'onOutlineSelectWidgetSelect' } );
+ }
+ if ( this.autoFocus ) {
+ // Event 'focus' does not bubble, but 'focusin' does
+ this.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );
+ }
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-bookletLayout' );
+ this.stackLayout.$element.addClass( 'oo-ui-bookletLayout-stackLayout' );
+ if ( this.outlined ) {
+ this.outlinePanel.$element
+ .addClass( 'oo-ui-bookletLayout-outlinePanel' )
+ .append( this.outlineSelectWidget.$element );
+ if ( this.editable ) {
+ this.outlinePanel.$element
+ .addClass( 'oo-ui-bookletLayout-outlinePanel-editable' )
+ .append( this.outlineControlsWidget.$element );
+ }
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.BookletLayout, OO.ui.MenuLayout );
+
+/* Events */
+
+/**
+ * A 'set' event is emitted when a page is {@link #setPage set} to be displayed by the booklet layout.
+ * @event set
+ * @param {OO.ui.PageLayout} page Current page
+ */
+
+/**
+ * An 'add' event is emitted when pages are {@link #addPages added} to the booklet layout.
+ *
+ * @event add
+ * @param {OO.ui.PageLayout[]} page Added pages
+ * @param {number} index Index pages were added at
+ */
+
+/**
+ * A 'remove' event is emitted when pages are {@link #clearPages cleared} or
+ * {@link #removePages removed} from the booklet.
+ *
+ * @event remove
+ * @param {OO.ui.PageLayout[]} pages Removed pages
+ */
+
+/* Methods */
+
+/**
+ * Handle stack layout focus.
+ *
+ * @private
+ * @param {jQuery.Event} e Focusin event
+ */
+OO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {
+ var name, $target;
+
+ // Find the page that an element was focused within
+ $target = $( e.target ).closest( '.oo-ui-pageLayout' );
+ for ( name in this.pages ) {
+ // Check for page match, exclude current page to find only page changes
+ if ( this.pages[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentPageName ) {
+ this.setPage( name );
+ break;
+ }
+ }
+};
+
+/**
+ * Handle stack layout set events.
+ *
+ * @private
+ * @param {OO.ui.PanelLayout|null} page The page panel that is now the current panel
+ */
+OO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {
+ var layout = this;
+ if ( page ) {
+ page.scrollElementIntoView( { complete: function () {
+ if ( layout.autoFocus ) {
+ layout.focus();
+ }
+ } } );
+ }
+};
+
+/**
+ * Focus the first input in the current page.
+ *
+ * If no page is selected, the first selectable page will be selected.
+ * If the focus is already in an element on the current page, nothing will happen.
+ * @param {number} [itemIndex] A specific item to focus on
+ */
+OO.ui.BookletLayout.prototype.focus = function ( itemIndex ) {
+ var $input, page,
+ items = this.stackLayout.getItems();
+
+ if ( itemIndex !== undefined && items[ itemIndex ] ) {
+ page = items[ itemIndex ];
+ } else {
+ page = this.stackLayout.getCurrentItem();
+ }
+
+ if ( !page && this.outlined ) {
+ this.selectFirstSelectablePage();
+ page = this.stackLayout.getCurrentItem();
+ }
+ if ( !page ) {
+ return;
+ }
+ // Only change the focus if is not already in the current page
+ if ( !page.$element.find( ':focus' ).length ) {
+ $input = page.$element.find( ':input:first' );
+ if ( $input.length ) {
+ $input[ 0 ].focus();
+ }
+ }
+};
+
+/**
+ * Find the first focusable input in the booklet layout and focus
+ * on it.
+ */
+OO.ui.BookletLayout.prototype.focusFirstFocusable = function () {
+ var i, len,
+ found = false,
+ items = this.stackLayout.getItems(),
+ checkAndFocus = function () {
+ if ( OO.ui.isFocusableElement( $( this ) ) ) {
+ $( this ).focus();
+ found = true;
+ return false;
+ }
+ };
+
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ if ( found ) {
+ break;
+ }
+ // Find all potentially focusable elements in the item
+ // and check if they are focusable
+ items[i].$element
+ .find( 'input, select, textarea, button, object' )
+ /* jshint loopfunc:true */
+ .each( checkAndFocus );
+ }
+};
+
+/**
+ * Handle outline widget select events.
+ *
+ * @private
+ * @param {OO.ui.OptionWidget|null} item Selected item
+ */
+OO.ui.BookletLayout.prototype.onOutlineSelectWidgetSelect = function ( item ) {
+ if ( item ) {
+ this.setPage( item.getData() );
+ }
+};
+
+/**
+ * Check if booklet has an outline.
+ *
+ * @return {boolean} Booklet has an outline
+ */
+OO.ui.BookletLayout.prototype.isOutlined = function () {
+ return this.outlined;
+};
+
+/**
+ * Check if booklet has editing controls.
+ *
+ * @return {boolean} Booklet is editable
+ */
+OO.ui.BookletLayout.prototype.isEditable = function () {
+ return this.editable;
+};
+
+/**
+ * Check if booklet has a visible outline.
+ *
+ * @return {boolean} Outline is visible
+ */
+OO.ui.BookletLayout.prototype.isOutlineVisible = function () {
+ return this.outlined && this.outlineVisible;
+};
+
+/**
+ * Hide or show the outline.
+ *
+ * @param {boolean} [show] Show outline, omit to invert current state
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {
+ if ( this.outlined ) {
+ show = show === undefined ? !this.outlineVisible : !!show;
+ this.outlineVisible = show;
+ this.toggleMenu( show );
+ }
+
+ return this;
+};
+
+/**
+ * Get the page closest to the specified page.
+ *
+ * @param {OO.ui.PageLayout} page Page to use as a reference point
+ * @return {OO.ui.PageLayout|null} Page closest to the specified page
+ */
+OO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {
+ var next, prev, level,
+ pages = this.stackLayout.getItems(),
+ index = $.inArray( page, pages );
+
+ if ( index !== -1 ) {
+ next = pages[ index + 1 ];
+ prev = pages[ index - 1 ];
+ // Prefer adjacent pages at the same level
+ if ( this.outlined ) {
+ level = this.outlineSelectWidget.getItemFromData( page.getName() ).getLevel();
+ if (
+ prev &&
+ level === this.outlineSelectWidget.getItemFromData( prev.getName() ).getLevel()
+ ) {
+ return prev;
+ }
+ if (
+ next &&
+ level === this.outlineSelectWidget.getItemFromData( next.getName() ).getLevel()
+ ) {
+ return next;
+ }
+ }
+ }
+ return prev || next || null;
+};
+
+/**
+ * Get the outline widget.
+ *
+ * If the booklet is not outlined, the method will return `null`.
+ *
+ * @return {OO.ui.OutlineSelectWidget|null} Outline widget, or null if the booklet is not outlined
+ */
+OO.ui.BookletLayout.prototype.getOutline = function () {
+ return this.outlineSelectWidget;
+};
+
+/**
+ * Get the outline controls widget.
+ *
+ * If the outline is not editable, the method will return `null`.
+ *
+ * @return {OO.ui.OutlineControlsWidget|null} The outline controls widget.
+ */
+OO.ui.BookletLayout.prototype.getOutlineControls = function () {
+ return this.outlineControlsWidget;
+};
+
+/**
+ * Get a page by its symbolic name.
+ *
+ * @param {string} name Symbolic name of page
+ * @return {OO.ui.PageLayout|undefined} Page, if found
+ */
+OO.ui.BookletLayout.prototype.getPage = function ( name ) {
+ return this.pages[ name ];
+};
+
+/**
+ * Get the current page.
+ *
+ * @return {OO.ui.PageLayout|undefined} Current page, if found
+ */
+OO.ui.BookletLayout.prototype.getCurrentPage = function () {
+ var name = this.getCurrentPageName();
+ return name ? this.getPage( name ) : undefined;
+};
+
+/**
+ * Get the symbolic name of the current page.
+ *
+ * @return {string|null} Symbolic name of the current page
+ */
+OO.ui.BookletLayout.prototype.getCurrentPageName = function () {
+ return this.currentPageName;
+};
+
+/**
+ * Add pages to the booklet layout
+ *
+ * When pages are added with the same names as existing pages, the existing pages will be
+ * automatically removed before the new pages are added.
+ *
+ * @param {OO.ui.PageLayout[]} pages Pages to add
+ * @param {number} index Index of the insertion point
+ * @fires add
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {
+ var i, len, name, page, item, currentIndex,
+ stackLayoutPages = this.stackLayout.getItems(),
+ remove = [],
+ items = [];
+
+ // Remove pages with same names
+ for ( i = 0, len = pages.length; i < len; i++ ) {
+ page = pages[ i ];
+ name = page.getName();
+
+ if ( Object.prototype.hasOwnProperty.call( this.pages, name ) ) {
+ // Correct the insertion index
+ currentIndex = $.inArray( this.pages[ name ], stackLayoutPages );
+ if ( currentIndex !== -1 && currentIndex + 1 < index ) {
+ index--;
+ }
+ remove.push( this.pages[ name ] );
+ }
+ }
+ if ( remove.length ) {
+ this.removePages( remove );
+ }
+
+ // Add new pages
+ for ( i = 0, len = pages.length; i < len; i++ ) {
+ page = pages[ i ];
+ name = page.getName();
+ this.pages[ page.getName() ] = page;
+ if ( this.outlined ) {
+ item = new OO.ui.OutlineOptionWidget( { data: name } );
+ page.setOutlineItem( item );
+ items.push( item );
+ }
+ }
+
+ if ( this.outlined && items.length ) {
+ this.outlineSelectWidget.addItems( items, index );
+ this.selectFirstSelectablePage();
+ }
+ this.stackLayout.addItems( pages, index );
+ this.emit( 'add', pages, index );
+
+ return this;
+};
+
+/**
+ * Remove the specified pages from the booklet layout.
+ *
+ * To remove all pages from the booklet, you may wish to use the #clearPages method instead.
+ *
+ * @param {OO.ui.PageLayout[]} pages An array of pages to remove
+ * @fires remove
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.removePages = function ( pages ) {
+ var i, len, name, page,
+ items = [];
+
+ for ( i = 0, len = pages.length; i < len; i++ ) {
+ page = pages[ i ];
+ name = page.getName();
+ delete this.pages[ name ];
+ if ( this.outlined ) {
+ items.push( this.outlineSelectWidget.getItemFromData( name ) );
+ page.setOutlineItem( null );
+ }
+ }
+ if ( this.outlined && items.length ) {
+ this.outlineSelectWidget.removeItems( items );
+ this.selectFirstSelectablePage();
+ }
+ this.stackLayout.removeItems( pages );
+ this.emit( 'remove', pages );
+
+ return this;
+};
+
+/**
+ * Clear all pages from the booklet layout.
+ *
+ * To remove only a subset of pages from the booklet, use the #removePages method.
+ *
+ * @fires remove
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.clearPages = function () {
+ var i, len,
+ pages = this.stackLayout.getItems();
+
+ this.pages = {};
+ this.currentPageName = null;
+ if ( this.outlined ) {
+ this.outlineSelectWidget.clearItems();
+ for ( i = 0, len = pages.length; i < len; i++ ) {
+ pages[ i ].setOutlineItem( null );
+ }
+ }
+ this.stackLayout.clearItems();
+
+ this.emit( 'remove', pages );
+
+ return this;
+};
+
+/**
+ * Set the current page by symbolic name.
+ *
+ * @fires set
+ * @param {string} name Symbolic name of page
+ */
+OO.ui.BookletLayout.prototype.setPage = function ( name ) {
+ var selectedItem,
+ $focused,
+ page = this.pages[ name ];
+
+ if ( name !== this.currentPageName ) {
+ if ( this.outlined ) {
+ selectedItem = this.outlineSelectWidget.getSelectedItem();
+ if ( selectedItem && selectedItem.getData() !== name ) {
+ this.outlineSelectWidget.selectItemByData( name );
+ }
+ }
+ if ( page ) {
+ if ( this.currentPageName && this.pages[ this.currentPageName ] ) {
+ this.pages[ this.currentPageName ].setActive( false );
+ // Blur anything focused if the next page doesn't have anything focusable - this
+ // is not needed if the next page has something focusable because once it is focused
+ // this blur happens automatically
+ if ( this.autoFocus && !page.$element.find( ':input' ).length ) {
+ $focused = this.pages[ this.currentPageName ].$element.find( ':focus' );
+ if ( $focused.length ) {
+ $focused[ 0 ].blur();
+ }
+ }
+ }
+ this.currentPageName = name;
+ this.stackLayout.setItem( page );
+ page.setActive( true );
+ this.emit( 'set', page );
+ }
+ }
+};
+
+/**
+ * Select the first selectable page.
+ *
+ * @chainable
+ */
+OO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {
+ if ( !this.outlineSelectWidget.getSelectedItem() ) {
+ this.outlineSelectWidget.selectItem( this.outlineSelectWidget.getFirstSelectableItem() );
+ }
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/layouts/CardLayout.js b/vendor/oojs/oojs-ui/src/layouts/CardLayout.js
new file mode 100644
index 00000000..353aedc9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/CardLayout.js
@@ -0,0 +1,138 @@
+/**
+ * CardLayouts are used within {@link OO.ui.IndexLayout index layouts} to create cards that users can select and display
+ * from the index's optional {@link OO.ui.TabSelectWidget tab} navigation. Cards are usually not instantiated directly,
+ * rather extended to include the required content and functionality.
+ *
+ * Each card must have a unique symbolic name, which is passed to the constructor. In addition, the card's tab
+ * item is customized (with a label) using the #setupTabItem method. See
+ * {@link OO.ui.IndexLayout IndexLayout} for an example.
+ *
+ * @class
+ * @extends OO.ui.PanelLayout
+ *
+ * @constructor
+ * @param {string} name Unique symbolic name of card
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.CardLayout = function OoUiCardLayout( name, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( name ) && config === undefined ) {
+ config = name;
+ name = config.name;
+ }
+
+ // Configuration initialization
+ config = $.extend( { scrollable: true }, config );
+
+ // Parent constructor
+ OO.ui.CardLayout.super.call( this, config );
+
+ // Properties
+ this.name = name;
+ this.tabItem = null;
+ this.active = false;
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-cardLayout' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.CardLayout, OO.ui.PanelLayout );
+
+/* Events */
+
+/**
+ * An 'active' event is emitted when the card becomes active. Cards become active when they are
+ * shown in a index layout that is configured to display only one card at a time.
+ *
+ * @event active
+ * @param {boolean} active Card is active
+ */
+
+/* Methods */
+
+/**
+ * Get the symbolic name of the card.
+ *
+ * @return {string} Symbolic name of card
+ */
+OO.ui.CardLayout.prototype.getName = function () {
+ return this.name;
+};
+
+/**
+ * Check if card is active.
+ *
+ * Cards become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is configured to display
+ * only one card at a time. Additional CSS is applied to the card's tab item to reflect the active state.
+ *
+ * @return {boolean} Card is active
+ */
+OO.ui.CardLayout.prototype.isActive = function () {
+ return this.active;
+};
+
+/**
+ * Get tab item.
+ *
+ * The tab item allows users to access the card from the index's tab
+ * navigation. The tab item itself can be customized (with a label, level, etc.) using the #setupTabItem method.
+ *
+ * @return {OO.ui.TabOptionWidget|null} Tab option widget
+ */
+OO.ui.CardLayout.prototype.getTabItem = function () {
+ return this.tabItem;
+};
+
+/**
+ * Set or unset the tab item.
+ *
+ * Specify a {@link OO.ui.TabOptionWidget tab option} to set it,
+ * or `null` to clear the tab item. To customize the tab item itself (e.g., to set a label or tab
+ * level), use #setupTabItem instead of this method.
+ *
+ * @param {OO.ui.TabOptionWidget|null} tabItem Tab option widget, null to clear
+ * @chainable
+ */
+OO.ui.CardLayout.prototype.setTabItem = function ( tabItem ) {
+ this.tabItem = tabItem || null;
+ if ( tabItem ) {
+ this.setupTabItem();
+ }
+ return this;
+};
+
+/**
+ * Set up the tab item.
+ *
+ * Use this method to customize the tab item (e.g., to add a label or tab level). To set or unset
+ * the tab item itself (with a {@link OO.ui.TabOptionWidget tab option} or `null`), use
+ * the #setTabItem method instead.
+ *
+ * @param {OO.ui.TabOptionWidget} tabItem Tab option widget to set up
+ * @chainable
+ */
+OO.ui.CardLayout.prototype.setupTabItem = function () {
+ return this;
+};
+
+/**
+ * Set the card to its 'active' state.
+ *
+ * Cards become active when they are shown in a index layout that is configured to display only one card at a time. Additional
+ * CSS is applied to the tab item to reflect the card's active state. Outside of the index
+ * context, setting the active state on a card does nothing.
+ *
+ * @param {boolean} value Card is active
+ * @fires active
+ */
+OO.ui.CardLayout.prototype.setActive = function ( active ) {
+ active = !!active;
+
+ if ( active !== this.active ) {
+ this.active = active;
+ this.$element.toggleClass( 'oo-ui-cardLayout-active', this.active );
+ this.emit( 'active', this.active );
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/layouts/FieldLayout.js b/vendor/oojs/oojs-ui/src/layouts/FieldLayout.js
new file mode 100644
index 00000000..86385741
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/FieldLayout.js
@@ -0,0 +1,160 @@
+/**
+ * FieldLayouts are used with OO.ui.FieldsetLayout. Each FieldLayout requires a field-widget,
+ * which is a widget that is specified by reference before any optional configuration settings.
+ *
+ * Field layouts can be configured with help text and/or labels. Labels are aligned in one of four ways:
+ *
+ * - **left**: The label is placed before the field-widget and aligned with the left margin.
+ * A left-alignment is used for forms with many fields.
+ * - **right**: The label is placed before the field-widget and aligned to the right margin.
+ * A right-alignment is used for long but familiar forms which users tab through,
+ * verifying the current field with a quick glance at the label.
+ * - **top**: The label is placed above the field-widget. A top-alignment is used for brief forms
+ * that users fill out from top to bottom.
+ * - **inline**: The label is placed after the field-widget and aligned to the left.
+ * An inline-alignment is best used with checkboxes or radio buttons.
+ *
+ * Help text is accessed via a help icon that appears in the upper right corner of the rendered field layout.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for examples and more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.LabelElement
+ *
+ * @constructor
+ * @param {OO.ui.Widget} fieldWidget Field widget
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [align='left'] Alignment of the label: 'left', 'right', 'top' or 'inline'
+ * @cfg {string} [help] Help text. When help text is specified, a help icon will appear
+ * in the upper-right corner of the rendered field.
+ */
+OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
+ config = fieldWidget;
+ fieldWidget = config.fieldWidget;
+ }
+
+ var hasInputWidget = fieldWidget instanceof OO.ui.InputWidget;
+
+ // Configuration initialization
+ config = $.extend( { align: 'left' }, config );
+
+ // Parent constructor
+ OO.ui.FieldLayout.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.LabelElement.call( this, config );
+
+ // Properties
+ this.fieldWidget = fieldWidget;
+ this.$field = $( '<div>' );
+ this.$body = $( '<' + ( hasInputWidget ? 'label' : 'div' ) + '>' );
+ this.align = null;
+ if ( config.help ) {
+ this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
+ classes: [ 'oo-ui-fieldLayout-help' ],
+ framed: false,
+ icon: 'info'
+ } );
+
+ this.popupButtonWidget.getPopup().$body.append(
+ $( '<div>' )
+ .text( config.help )
+ .addClass( 'oo-ui-fieldLayout-help-content' )
+ );
+ this.$help = this.popupButtonWidget.$element;
+ } else {
+ this.$help = $( [] );
+ }
+
+ // Events
+ if ( hasInputWidget ) {
+ this.$label.on( 'click', this.onLabelClick.bind( this ) );
+ }
+ this.fieldWidget.connect( this, { disable: 'onFieldDisable' } );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-fieldLayout' )
+ .append( this.$help, this.$body );
+ this.$body.addClass( 'oo-ui-fieldLayout-body' );
+ this.$field
+ .addClass( 'oo-ui-fieldLayout-field' )
+ .toggleClass( 'oo-ui-fieldLayout-disable', this.fieldWidget.isDisabled() )
+ .append( this.fieldWidget.$element );
+
+ this.setAlignment( config.align );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
+OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabelElement );
+
+/* Methods */
+
+/**
+ * Handle field disable events.
+ *
+ * @private
+ * @param {boolean} value Field is disabled
+ */
+OO.ui.FieldLayout.prototype.onFieldDisable = function ( value ) {
+ this.$element.toggleClass( 'oo-ui-fieldLayout-disabled', value );
+};
+
+/**
+ * Handle label mouse click events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.FieldLayout.prototype.onLabelClick = function () {
+ this.fieldWidget.simulateLabelClick();
+ return false;
+};
+
+/**
+ * Get the widget contained by the field.
+ *
+ * @return {OO.ui.Widget} Field widget
+ */
+OO.ui.FieldLayout.prototype.getField = function () {
+ return this.fieldWidget;
+};
+
+/**
+ * Set the field alignment mode.
+ *
+ * @private
+ * @param {string} value Alignment mode, either 'left', 'right', 'top' or 'inline'
+ * @chainable
+ */
+OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
+ if ( value !== this.align ) {
+ // Default to 'left'
+ if ( [ 'left', 'right', 'top', 'inline' ].indexOf( value ) === -1 ) {
+ value = 'left';
+ }
+ // Reorder elements
+ if ( value === 'inline' ) {
+ this.$body.append( this.$field, this.$label );
+ } else {
+ this.$body.append( this.$label, this.$field );
+ }
+ // Set classes. The following classes can be used here:
+ // * oo-ui-fieldLayout-align-left
+ // * oo-ui-fieldLayout-align-right
+ // * oo-ui-fieldLayout-align-top
+ // * oo-ui-fieldLayout-align-inline
+ if ( this.align ) {
+ this.$element.removeClass( 'oo-ui-fieldLayout-align-' + this.align );
+ }
+ this.$element.addClass( 'oo-ui-fieldLayout-align-' + value );
+ this.align = value;
+ }
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/layouts/FieldsetLayout.js b/vendor/oojs/oojs-ui/src/layouts/FieldsetLayout.js
new file mode 100644
index 00000000..1a21e8e1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/FieldsetLayout.js
@@ -0,0 +1,86 @@
+/**
+ * FieldsetLayouts are composed of one or more {@link OO.ui.FieldLayout FieldLayouts},
+ * which each contain an individual widget and, optionally, a label. Each Fieldset can be
+ * configured with a label as well. For more information and examples,
+ * please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example of a fieldset layout
+ * var input1 = new OO.ui.TextInputWidget( {
+ * placeholder: 'A text input field'
+ * } );
+ *
+ * var input2 = new OO.ui.TextInputWidget( {
+ * placeholder: 'A text input field'
+ * } );
+ *
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'Example of a fieldset layout'
+ * } );
+ *
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( input1, {
+ * label: 'Field One'
+ * } ),
+ * new OO.ui.FieldLayout( input2, {
+ * label: 'Field Two'
+ * } )
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Fields_and_Fieldsets
+ *
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.FieldLayout[]} [items] An array of fields to add to the fieldset. See OO.ui.FieldLayout for more information about fields.
+ */
+OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.FieldsetLayout.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.IconElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.GroupElement.call( this, config );
+
+ if ( config.help ) {
+ this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
+ classes: [ 'oo-ui-fieldsetLayout-help' ],
+ framed: false,
+ icon: 'info'
+ } );
+
+ this.popupButtonWidget.getPopup().$body.append(
+ $( '<div>' )
+ .text( config.help )
+ .addClass( 'oo-ui-fieldsetLayout-help-content' )
+ );
+ this.$help = this.popupButtonWidget.$element;
+ } else {
+ this.$help = $( [] );
+ }
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-fieldsetLayout' )
+ .prepend( this.$help, this.$icon, this.$label, this.$group );
+ if ( Array.isArray( config.items ) ) {
+ this.addItems( config.items );
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
diff --git a/vendor/oojs/oojs-ui/src/layouts/FormLayout.js b/vendor/oojs/oojs-ui/src/layouts/FormLayout.js
new file mode 100644
index 00000000..a131c169
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/FormLayout.js
@@ -0,0 +1,119 @@
+/**
+ * FormLayouts are used to wrap {@link OO.ui.FieldsetLayout FieldsetLayouts} when you intend to use browser-based
+ * form submission for the fields instead of handling them in JavaScript. Form layouts can be configured with an
+ * HTML form action, an encoding type, and a method using the #action, #enctype, and #method configs, respectively.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
+ *
+ * Only widgets from the {@link OO.ui.InputWidget InputWidget} family support form submission. It
+ * includes standard form elements like {@link OO.ui.CheckboxInputWidget checkboxes}, {@link
+ * OO.ui.RadioInputWidget radio buttons} and {@link OO.ui.TextInputWidget text fields}, as well as
+ * some fancier controls. Some controls have both regular and InputWidget variants, for example
+ * OO.ui.DropdownWidget and OO.ui.DropdownInputWidget – only the latter support form submission and
+ * often have simplified APIs to match the capabilities of HTML forms.
+ * See the [OOjs UI Inputs documentation on MediaWiki] [2] for more information about InputWidgets.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Layouts/Forms
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @example
+ * // Example of a form layout that wraps a fieldset layout
+ * var input1 = new OO.ui.TextInputWidget( {
+ * placeholder: 'Username'
+ * } );
+ * var input2 = new OO.ui.TextInputWidget( {
+ * placeholder: 'Password',
+ * type: 'password'
+ * } );
+ * var submit = new OO.ui.ButtonInputWidget( {
+ * label: 'Submit'
+ * } );
+ *
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'A form layout'
+ * } );
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( input1, {
+ * label: 'Username',
+ * align: 'top'
+ * } ),
+ * new OO.ui.FieldLayout( input2, {
+ * label: 'Password',
+ * align: 'top'
+ * } ),
+ * new OO.ui.FieldLayout( submit )
+ * ] );
+ * var form = new OO.ui.FormLayout( {
+ * items: [ fieldset ],
+ * action: '/api/formhandler',
+ * method: 'get'
+ * } )
+ * $( 'body' ).append( form.$element );
+ *
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [method] HTML form `method` attribute
+ * @cfg {string} [action] HTML form `action` attribute
+ * @cfg {string} [enctype] HTML form `enctype` attribute
+ * @cfg {OO.ui.FieldsetLayout[]} [items] Fieldset layouts to add to the form layout.
+ */
+OO.ui.FormLayout = function OoUiFormLayout( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.FormLayout.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
+ // Events
+ this.$element.on( 'submit', this.onFormSubmit.bind( this ) );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-formLayout' )
+ .attr( {
+ method: config.method,
+ action: config.action,
+ enctype: config.enctype
+ } );
+ if ( Array.isArray( config.items ) ) {
+ this.addItems( config.items );
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.FormLayout, OO.ui.Layout );
+OO.mixinClass( OO.ui.FormLayout, OO.ui.GroupElement );
+
+/* Events */
+
+/**
+ * A 'submit' event is emitted when the form is submitted.
+ *
+ * @event submit
+ */
+
+/* Static Properties */
+
+OO.ui.FormLayout.static.tagName = 'form';
+
+/* Methods */
+
+/**
+ * Handle form submit events.
+ *
+ * @private
+ * @param {jQuery.Event} e Submit event
+ * @fires submit
+ */
+OO.ui.FormLayout.prototype.onFormSubmit = function () {
+ if ( this.emit( 'submit' ) ) {
+ return false;
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/layouts/IndexLayout.js b/vendor/oojs/oojs-ui/src/layouts/IndexLayout.js
new file mode 100644
index 00000000..4cda00a9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/IndexLayout.js
@@ -0,0 +1,452 @@
+/**
+ * IndexLayouts contain {@link OO.ui.CardLayout card layouts} as well as
+ * {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the cards and
+ * select which one to display. By default, only one card is displayed at a time. When a user
+ * navigates to a new card, the index layout automatically focuses on the first focusable element,
+ * unless the default setting is changed.
+ *
+ * TODO: This class is similar to BookletLayout, we may want to refactor to reduce duplication
+ *
+ * @example
+ * // Example of a IndexLayout that contains two CardLayouts.
+ *
+ * function CardOneLayout( name, config ) {
+ * CardOneLayout.super.call( this, name, config );
+ * this.$element.append( '<p>First card</p>' );
+ * }
+ * OO.inheritClass( CardOneLayout, OO.ui.CardLayout );
+ * CardOneLayout.prototype.setupTabItem = function () {
+ * this.tabItem.setLabel( 'Card One' );
+ * };
+ *
+ * function CardTwoLayout( name, config ) {
+ * CardTwoLayout.super.call( this, name, config );
+ * this.$element.append( '<p>Second card</p>' );
+ * }
+ * OO.inheritClass( CardTwoLayout, OO.ui.CardLayout );
+ * CardTwoLayout.prototype.setupTabItem = function () {
+ * this.tabItem.setLabel( 'Card Two' );
+ * };
+ *
+ * var card1 = new CardOneLayout( 'one' ),
+ * card2 = new CardTwoLayout( 'two' );
+ *
+ * var index = new OO.ui.IndexLayout();
+ *
+ * index.addCards ( [ card1, card2 ] );
+ * $( 'body' ).append( index.$element );
+ *
+ * @class
+ * @extends OO.ui.MenuLayout
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [continuous=false] Show all cards, one after another
+ * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new card is displayed.
+ */
+OO.ui.IndexLayout = function OoUiIndexLayout( config ) {
+ // Configuration initialization
+ config = $.extend( {}, config, { menuPosition: 'top' } );
+
+ // Parent constructor
+ OO.ui.IndexLayout.super.call( this, config );
+
+ // Properties
+ this.currentCardName = null;
+ this.cards = {};
+ this.ignoreFocus = false;
+ this.stackLayout = new OO.ui.StackLayout( { continuous: !!config.continuous } );
+ this.$content.append( this.stackLayout.$element );
+ this.autoFocus = config.autoFocus === undefined || !!config.autoFocus;
+
+ this.tabSelectWidget = new OO.ui.TabSelectWidget();
+ this.tabPanel = new OO.ui.PanelLayout();
+ this.$menu.append( this.tabPanel.$element );
+
+ this.toggleMenu( true );
+
+ // Events
+ this.stackLayout.connect( this, { set: 'onStackLayoutSet' } );
+ this.tabSelectWidget.connect( this, { select: 'onTabSelectWidgetSelect' } );
+ if ( this.autoFocus ) {
+ // Event 'focus' does not bubble, but 'focusin' does
+ this.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );
+ }
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-indexLayout' );
+ this.stackLayout.$element.addClass( 'oo-ui-indexLayout-stackLayout' );
+ this.tabPanel.$element
+ .addClass( 'oo-ui-indexLayout-tabPanel' )
+ .append( this.tabSelectWidget.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IndexLayout, OO.ui.MenuLayout );
+
+/* Events */
+
+/**
+ * A 'set' event is emitted when a card is {@link #setCard set} to be displayed by the index layout.
+ * @event set
+ * @param {OO.ui.CardLayout} card Current card
+ */
+
+/**
+ * An 'add' event is emitted when cards are {@link #addCards added} to the index layout.
+ *
+ * @event add
+ * @param {OO.ui.CardLayout[]} card Added cards
+ * @param {number} index Index cards were added at
+ */
+
+/**
+ * A 'remove' event is emitted when cards are {@link #clearCards cleared} or
+ * {@link #removeCards removed} from the index.
+ *
+ * @event remove
+ * @param {OO.ui.CardLayout[]} cards Removed cards
+ */
+
+/* Methods */
+
+/**
+ * Handle stack layout focus.
+ *
+ * @private
+ * @param {jQuery.Event} e Focusin event
+ */
+OO.ui.IndexLayout.prototype.onStackLayoutFocus = function ( e ) {
+ var name, $target;
+
+ // Find the card that an element was focused within
+ $target = $( e.target ).closest( '.oo-ui-cardLayout' );
+ for ( name in this.cards ) {
+ // Check for card match, exclude current card to find only card changes
+ if ( this.cards[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentCardName ) {
+ this.setCard( name );
+ break;
+ }
+ }
+};
+
+/**
+ * Handle stack layout set events.
+ *
+ * @private
+ * @param {OO.ui.PanelLayout|null} card The card panel that is now the current panel
+ */
+OO.ui.IndexLayout.prototype.onStackLayoutSet = function ( card ) {
+ var layout = this;
+ if ( card ) {
+ card.scrollElementIntoView( { complete: function () {
+ if ( layout.autoFocus ) {
+ layout.focus();
+ }
+ } } );
+ }
+};
+
+/**
+ * Focus the first input in the current card.
+ *
+ * If no card is selected, the first selectable card will be selected.
+ * If the focus is already in an element on the current card, nothing will happen.
+ * @param {number} [itemIndex] A specific item to focus on
+ */
+OO.ui.IndexLayout.prototype.focus = function ( itemIndex ) {
+ var $input, card,
+ items = this.stackLayout.getItems();
+
+ if ( itemIndex !== undefined && items[ itemIndex ] ) {
+ card = items[ itemIndex ];
+ } else {
+ card = this.stackLayout.getCurrentItem();
+ }
+
+ if ( !card ) {
+ this.selectFirstSelectableCard();
+ card = this.stackLayout.getCurrentItem();
+ }
+ if ( !card ) {
+ return;
+ }
+ // Only change the focus if is not already in the current card
+ if ( !card.$element.find( ':focus' ).length ) {
+ $input = card.$element.find( ':input:first' );
+ if ( $input.length ) {
+ $input[ 0 ].focus();
+ }
+ }
+};
+
+/**
+ * Find the first focusable input in the index layout and focus
+ * on it.
+ */
+OO.ui.IndexLayout.prototype.focusFirstFocusable = function () {
+ var i, len,
+ found = false,
+ items = this.stackLayout.getItems(),
+ checkAndFocus = function () {
+ if ( OO.ui.isFocusableElement( $( this ) ) ) {
+ $( this ).focus();
+ found = true;
+ return false;
+ }
+ };
+
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ if ( found ) {
+ break;
+ }
+ // Find all potentially focusable elements in the item
+ // and check if they are focusable
+ items[i].$element
+ .find( 'input, select, textarea, button, object' )
+ .each( checkAndFocus );
+ }
+};
+
+/**
+ * Handle tab widget select events.
+ *
+ * @private
+ * @param {OO.ui.OptionWidget|null} item Selected item
+ */
+OO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {
+ if ( item ) {
+ this.setCard( item.getData() );
+ }
+};
+
+/**
+ * Get the card closest to the specified card.
+ *
+ * @param {OO.ui.CardLayout} card Card to use as a reference point
+ * @return {OO.ui.CardLayout|null} Card closest to the specified card
+ */
+OO.ui.IndexLayout.prototype.getClosestCard = function ( card ) {
+ var next, prev, level,
+ cards = this.stackLayout.getItems(),
+ index = $.inArray( card, cards );
+
+ if ( index !== -1 ) {
+ next = cards[ index + 1 ];
+ prev = cards[ index - 1 ];
+ // Prefer adjacent cards at the same level
+ level = this.tabSelectWidget.getItemFromData( card.getName() ).getLevel();
+ if (
+ prev &&
+ level === this.tabSelectWidget.getItemFromData( prev.getName() ).getLevel()
+ ) {
+ return prev;
+ }
+ if (
+ next &&
+ level === this.tabSelectWidget.getItemFromData( next.getName() ).getLevel()
+ ) {
+ return next;
+ }
+ }
+ return prev || next || null;
+};
+
+/**
+ * Get the tabs widget.
+ *
+ * @return {OO.ui.TabSelectWidget} Tabs widget
+ */
+OO.ui.IndexLayout.prototype.getTabs = function () {
+ return this.tabSelectWidget;
+};
+
+/**
+ * Get a card by its symbolic name.
+ *
+ * @param {string} name Symbolic name of card
+ * @return {OO.ui.CardLayout|undefined} Card, if found
+ */
+OO.ui.IndexLayout.prototype.getCard = function ( name ) {
+ return this.cards[ name ];
+};
+
+/**
+ * Get the current card.
+ *
+ * @return {OO.ui.CardLayout|undefined} Current card, if found
+ */
+OO.ui.IndexLayout.prototype.getCurrentCard = function () {
+ var name = this.getCurrentCardName();
+ return name ? this.getCard( name ) : undefined;
+};
+
+/**
+ * Get the symbolic name of the current card.
+ *
+ * @return {string|null} Symbolic name of the current card
+ */
+OO.ui.IndexLayout.prototype.getCurrentCardName = function () {
+ return this.currentCardName;
+};
+
+/**
+ * Add cards to the index layout
+ *
+ * When cards are added with the same names as existing cards, the existing cards will be
+ * automatically removed before the new cards are added.
+ *
+ * @param {OO.ui.CardLayout[]} cards Cards to add
+ * @param {number} index Index of the insertion point
+ * @fires add
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.addCards = function ( cards, index ) {
+ var i, len, name, card, item, currentIndex,
+ stackLayoutCards = this.stackLayout.getItems(),
+ remove = [],
+ items = [];
+
+ // Remove cards with same names
+ for ( i = 0, len = cards.length; i < len; i++ ) {
+ card = cards[ i ];
+ name = card.getName();
+
+ if ( Object.prototype.hasOwnProperty.call( this.cards, name ) ) {
+ // Correct the insertion index
+ currentIndex = $.inArray( this.cards[ name ], stackLayoutCards );
+ if ( currentIndex !== -1 && currentIndex + 1 < index ) {
+ index--;
+ }
+ remove.push( this.cards[ name ] );
+ }
+ }
+ if ( remove.length ) {
+ this.removeCards( remove );
+ }
+
+ // Add new cards
+ for ( i = 0, len = cards.length; i < len; i++ ) {
+ card = cards[ i ];
+ name = card.getName();
+ this.cards[ card.getName() ] = card;
+ item = new OO.ui.TabOptionWidget( { data: name } );
+ card.setTabItem( item );
+ items.push( item );
+ }
+
+ if ( items.length ) {
+ this.tabSelectWidget.addItems( items, index );
+ this.selectFirstSelectableCard();
+ }
+ this.stackLayout.addItems( cards, index );
+ this.emit( 'add', cards, index );
+
+ return this;
+};
+
+/**
+ * Remove the specified cards from the index layout.
+ *
+ * To remove all cards from the index, you may wish to use the #clearCards method instead.
+ *
+ * @param {OO.ui.CardLayout[]} cards An array of cards to remove
+ * @fires remove
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.removeCards = function ( cards ) {
+ var i, len, name, card,
+ items = [];
+
+ for ( i = 0, len = cards.length; i < len; i++ ) {
+ card = cards[ i ];
+ name = card.getName();
+ delete this.cards[ name ];
+ items.push( this.tabSelectWidget.getItemFromData( name ) );
+ card.setTabItem( null );
+ }
+ if ( items.length ) {
+ this.tabSelectWidget.removeItems( items );
+ this.selectFirstSelectableCard();
+ }
+ this.stackLayout.removeItems( cards );
+ this.emit( 'remove', cards );
+
+ return this;
+};
+
+/**
+ * Clear all cards from the index layout.
+ *
+ * To remove only a subset of cards from the index, use the #removeCards method.
+ *
+ * @fires remove
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.clearCards = function () {
+ var i, len,
+ cards = this.stackLayout.getItems();
+
+ this.cards = {};
+ this.currentCardName = null;
+ this.tabSelectWidget.clearItems();
+ for ( i = 0, len = cards.length; i < len; i++ ) {
+ cards[ i ].setTabItem( null );
+ }
+ this.stackLayout.clearItems();
+
+ this.emit( 'remove', cards );
+
+ return this;
+};
+
+/**
+ * Set the current card by symbolic name.
+ *
+ * @fires set
+ * @param {string} name Symbolic name of card
+ */
+OO.ui.IndexLayout.prototype.setCard = function ( name ) {
+ var selectedItem,
+ $focused,
+ card = this.cards[ name ];
+
+ if ( name !== this.currentCardName ) {
+ selectedItem = this.tabSelectWidget.getSelectedItem();
+ if ( selectedItem && selectedItem.getData() !== name ) {
+ this.tabSelectWidget.selectItemByData( name );
+ }
+ if ( card ) {
+ if ( this.currentCardName && this.cards[ this.currentCardName ] ) {
+ this.cards[ this.currentCardName ].setActive( false );
+ // Blur anything focused if the next card doesn't have anything focusable - this
+ // is not needed if the next card has something focusable because once it is focused
+ // this blur happens automatically
+ if ( this.autoFocus && !card.$element.find( ':input' ).length ) {
+ $focused = this.cards[ this.currentCardName ].$element.find( ':focus' );
+ if ( $focused.length ) {
+ $focused[ 0 ].blur();
+ }
+ }
+ }
+ this.currentCardName = name;
+ this.stackLayout.setItem( card );
+ card.setActive( true );
+ this.emit( 'set', card );
+ }
+ }
+};
+
+/**
+ * Select the first selectable card.
+ *
+ * @chainable
+ */
+OO.ui.IndexLayout.prototype.selectFirstSelectableCard = function () {
+ if ( !this.tabSelectWidget.getSelectedItem() ) {
+ this.tabSelectWidget.selectItem( this.tabSelectWidget.getFirstSelectableItem() );
+ }
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/layouts/MenuLayout.js b/vendor/oojs/oojs-ui/src/layouts/MenuLayout.js
new file mode 100644
index 00000000..53937cc7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/MenuLayout.js
@@ -0,0 +1,156 @@
+/**
+ * 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)
+ * and its size is customized with the #menuSize config. The content area will fill all remaining space.
+ *
+ * @example
+ * var menuLayout = new OO.ui.MenuLayout( {
+ * position: 'top'
+ * } ),
+ * menuPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),
+ * contentPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),
+ * select = new OO.ui.SelectWidget( {
+ * items: [
+ * new OO.ui.OptionWidget( {
+ * data: 'before',
+ * label: 'Before',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'after',
+ * label: 'After',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'top',
+ * label: 'Top',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'bottom',
+ * label: 'Bottom',
+ * } )
+ * ]
+ * } ).on( 'select', function ( item ) {
+ * menuLayout.setMenuPosition( item.getData() );
+ * } );
+ *
+ * menuLayout.$menu.append(
+ * menuPanel.$element.append( '<b>Menu panel</b>', select.$element )
+ * );
+ * menuLayout.$content.append(
+ * contentPanel.$element.append( '<b>Content panel</b>', '<p>Note that the menu is positioned relative to the content panel: top, bottom, after, before.</p>')
+ * );
+ * $( 'body' ).append( menuLayout.$element );
+ *
+ * If menu size needs to be overridden, it can be accomplished using CSS similar to the snippet
+ * below. MenuLayout's CSS will override the appropriate values with 'auto' or '0' to display the
+ * menu correctly. If `menuPosition` is known beforehand, CSS rules corresponding to other positions
+ * may be omitted.
+ *
+ * .oo-ui-menuLayout-menu {
+ * height: 200px;
+ * width: 200px;
+ * }
+ * .oo-ui-menuLayout-content {
+ * top: 200px;
+ * left: 200px;
+ * right: 200px;
+ * bottom: 200px;
+ * }
+ *
+ * @class
+ * @extends OO.ui.Layout
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [showMenu=true] Show menu
+ * @cfg {string} [menuPosition='before'] Position of menu: `top`, `after`, `bottom` or `before`
+ */
+OO.ui.MenuLayout = function OoUiMenuLayout( config ) {
+ // Configuration initialization
+ config = $.extend( {
+ showMenu: true,
+ menuPosition: 'before'
+ }, config );
+
+ // Parent constructor
+ OO.ui.MenuLayout.super.call( this, config );
+
+ /**
+ * Menu DOM node
+ *
+ * @property {jQuery}
+ */
+ this.$menu = $( '<div>' );
+ /**
+ * Content DOM node
+ *
+ * @property {jQuery}
+ */
+ this.$content = $( '<div>' );
+
+ // Initialization
+ this.$menu
+ .addClass( 'oo-ui-menuLayout-menu' );
+ this.$content.addClass( 'oo-ui-menuLayout-content' );
+ this.$element
+ .addClass( 'oo-ui-menuLayout' )
+ .append( this.$content, this.$menu );
+ this.setMenuPosition( config.menuPosition );
+ this.toggleMenu( config.showMenu );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.MenuLayout, OO.ui.Layout );
+
+/* Methods */
+
+/**
+ * Toggle menu.
+ *
+ * @param {boolean} showMenu Show menu, omit to toggle
+ * @chainable
+ */
+OO.ui.MenuLayout.prototype.toggleMenu = function ( showMenu ) {
+ showMenu = showMenu === undefined ? !this.showMenu : !!showMenu;
+
+ if ( this.showMenu !== showMenu ) {
+ this.showMenu = showMenu;
+ this.$element
+ .toggleClass( 'oo-ui-menuLayout-showMenu', this.showMenu )
+ .toggleClass( 'oo-ui-menuLayout-hideMenu', !this.showMenu );
+ }
+
+ return this;
+};
+
+/**
+ * Check if menu is visible
+ *
+ * @return {boolean} Menu is visible
+ */
+OO.ui.MenuLayout.prototype.isMenuVisible = function () {
+ return this.showMenu;
+};
+
+/**
+ * Set menu position.
+ *
+ * @param {string} position Position of menu, either `top`, `after`, `bottom` or `before`
+ * @throws {Error} If position value is not supported
+ * @chainable
+ */
+OO.ui.MenuLayout.prototype.setMenuPosition = function ( position ) {
+ this.$element.removeClass( 'oo-ui-menuLayout-' + this.menuPosition );
+ this.menuPosition = position;
+ this.$element.addClass( 'oo-ui-menuLayout-' + position );
+
+ return this;
+};
+
+/**
+ * Get menu position.
+ *
+ * @return {string} Menu position
+ */
+OO.ui.MenuLayout.prototype.getMenuPosition = function () {
+ return this.menuPosition;
+};
diff --git a/vendor/oojs/oojs-ui/src/layouts/PageLayout.js b/vendor/oojs/oojs-ui/src/layouts/PageLayout.js
new file mode 100644
index 00000000..4753b7db
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/PageLayout.js
@@ -0,0 +1,138 @@
+/**
+ * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display
+ * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,
+ * rather extended to include the required content and functionality.
+ *
+ * Each page must have a unique symbolic name, which is passed to the constructor. In addition, the page's outline
+ * item is customized (with a label, outline level, etc.) using the #setupOutlineItem method. See
+ * {@link OO.ui.BookletLayout BookletLayout} for an example.
+ *
+ * @class
+ * @extends OO.ui.PanelLayout
+ *
+ * @constructor
+ * @param {string} name Unique symbolic name of page
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.PageLayout = function OoUiPageLayout( name, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( name ) && config === undefined ) {
+ config = name;
+ name = config.name;
+ }
+
+ // Configuration initialization
+ config = $.extend( { scrollable: true }, config );
+
+ // Parent constructor
+ OO.ui.PageLayout.super.call( this, config );
+
+ // Properties
+ this.name = name;
+ this.outlineItem = null;
+ this.active = false;
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-pageLayout' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );
+
+/* Events */
+
+/**
+ * An 'active' event is emitted when the page becomes active. Pages become active when they are
+ * shown in a booklet layout that is configured to display only one page at a time.
+ *
+ * @event active
+ * @param {boolean} active Page is active
+ */
+
+/* Methods */
+
+/**
+ * Get the symbolic name of the page.
+ *
+ * @return {string} Symbolic name of page
+ */
+OO.ui.PageLayout.prototype.getName = function () {
+ return this.name;
+};
+
+/**
+ * Check if page is active.
+ *
+ * Pages become active when they are shown in a {@link OO.ui.BookletLayout booklet layout} that is configured to display
+ * only one page at a time. Additional CSS is applied to the page's outline item to reflect the active state.
+ *
+ * @return {boolean} Page is active
+ */
+OO.ui.PageLayout.prototype.isActive = function () {
+ return this.active;
+};
+
+/**
+ * Get outline item.
+ *
+ * The outline item allows users to access the page from the booklet's outline
+ * navigation. The outline item itself can be customized (with a label, level, etc.) using the #setupOutlineItem method.
+ *
+ * @return {OO.ui.OutlineOptionWidget|null} Outline option widget
+ */
+OO.ui.PageLayout.prototype.getOutlineItem = function () {
+ return this.outlineItem;
+};
+
+/**
+ * Set or unset the outline item.
+ *
+ * Specify an {@link OO.ui.OutlineOptionWidget outline option} to set it,
+ * or `null` to clear the outline item. To customize the outline item itself (e.g., to set a label or outline
+ * level), use #setupOutlineItem instead of this method.
+ *
+ * @param {OO.ui.OutlineOptionWidget|null} outlineItem Outline option widget, null to clear
+ * @chainable
+ */
+OO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {
+ this.outlineItem = outlineItem || null;
+ if ( outlineItem ) {
+ this.setupOutlineItem();
+ }
+ return this;
+};
+
+/**
+ * Set up the outline item.
+ *
+ * Use this method to customize the outline item (e.g., to add a label or outline level). To set or unset
+ * the outline item itself (with an {@link OO.ui.OutlineOptionWidget outline option} or `null`), use
+ * the #setOutlineItem method instead.
+ *
+ * @param {OO.ui.OutlineOptionWidget} outlineItem Outline option widget to set up
+ * @chainable
+ */
+OO.ui.PageLayout.prototype.setupOutlineItem = function () {
+ return this;
+};
+
+/**
+ * Set the page to its 'active' state.
+ *
+ * Pages become active when they are shown in a booklet layout that is configured to display only one page at a time. Additional
+ * CSS is applied to the outline item to reflect the page's active state. Outside of the booklet
+ * context, setting the active state on a page does nothing.
+ *
+ * @param {boolean} value Page is active
+ * @fires active
+ */
+OO.ui.PageLayout.prototype.setActive = function ( active ) {
+ active = !!active;
+
+ if ( active !== this.active ) {
+ this.active = active;
+ this.$element.toggleClass( 'oo-ui-pageLayout-active', active );
+ this.emit( 'active', this.active );
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/layouts/PanelLayout.js b/vendor/oojs/oojs-ui/src/layouts/PanelLayout.js
new file mode 100644
index 00000000..9183f597
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/PanelLayout.js
@@ -0,0 +1,55 @@
+/**
+ * PanelLayouts expand to cover the entire area of their parent. They can be configured with scrolling, padding,
+ * and a frame, and are often used together with {@link OO.ui.StackLayout StackLayouts}.
+ *
+ * @example
+ * // Example of a panel layout
+ * var panel = new OO.ui.PanelLayout( {
+ * expanded: false,
+ * framed: true,
+ * padded: true,
+ * $content: $( '<p>A panel layout with padding and a frame.</p>' )
+ * } );
+ * $( 'body' ).append( panel.$element );
+ *
+ * @class
+ * @extends OO.ui.Layout
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [scrollable=false] Allow vertical scrolling
+ * @cfg {boolean} [padded=false] Add padding between the content and the edges of the panel.
+ * @cfg {boolean} [expanded=true] Expand the panel to fill the entire parent element.
+ * @cfg {boolean} [framed=false] Render the panel with a frame to visually separate it from outside content.
+ */
+OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
+ // Configuration initialization
+ config = $.extend( {
+ scrollable: false,
+ padded: false,
+ expanded: true,
+ framed: false
+ }, config );
+
+ // Parent constructor
+ OO.ui.PanelLayout.super.call( this, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-panelLayout' );
+ if ( config.scrollable ) {
+ this.$element.addClass( 'oo-ui-panelLayout-scrollable' );
+ }
+ if ( config.padded ) {
+ this.$element.addClass( 'oo-ui-panelLayout-padded' );
+ }
+ if ( config.expanded ) {
+ this.$element.addClass( 'oo-ui-panelLayout-expanded' );
+ }
+ if ( config.framed ) {
+ this.$element.addClass( 'oo-ui-panelLayout-framed' );
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.PanelLayout, OO.ui.Layout );
diff --git a/vendor/oojs/oojs-ui/src/layouts/StackLayout.js b/vendor/oojs/oojs-ui/src/layouts/StackLayout.js
new file mode 100644
index 00000000..58f35d31
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/layouts/StackLayout.js
@@ -0,0 +1,214 @@
+/**
+ * StackLayouts contain a series of {@link OO.ui.PanelLayout panel layouts}. By default, only one panel is displayed
+ * at a time, though the stack layout can also be configured to show all contained panels, one after another,
+ * by setting the #continuous option to 'true'.
+ *
+ * @example
+ * // A stack layout with two panels, configured to be displayed continously
+ * var myStack = new OO.ui.StackLayout( {
+ * items: [
+ * new OO.ui.PanelLayout( {
+ * $content: $( '<p>Panel One</p>' ),
+ * padded: true,
+ * framed: true
+ * } ),
+ * new OO.ui.PanelLayout( {
+ * $content: $( '<p>Panel Two</p>' ),
+ * padded: true,
+ * framed: true
+ * } )
+ * ],
+ * continuous: true
+ * } );
+ * $( 'body' ).append( myStack.$element );
+ *
+ * @class
+ * @extends OO.ui.PanelLayout
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [continuous=false] Show all panels, one after another. By default, only one panel is displayed at a time.
+ * @cfg {OO.ui.Layout[]} [items] Panel layouts to add to the stack layout.
+ */
+OO.ui.StackLayout = function OoUiStackLayout( config ) {
+ // Configuration initialization
+ config = $.extend( { scrollable: true }, config );
+
+ // Parent constructor
+ OO.ui.StackLayout.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
+ // Properties
+ this.currentItem = null;
+ this.continuous = !!config.continuous;
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-stackLayout' );
+ if ( this.continuous ) {
+ this.$element.addClass( 'oo-ui-stackLayout-continuous' );
+ }
+ if ( Array.isArray( config.items ) ) {
+ this.addItems( config.items );
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.StackLayout, OO.ui.PanelLayout );
+OO.mixinClass( OO.ui.StackLayout, OO.ui.GroupElement );
+
+/* Events */
+
+/**
+ * A 'set' event is emitted when panels are {@link #addItems added}, {@link #removeItems removed},
+ * {@link #clearItems cleared} or {@link #setItem displayed}.
+ *
+ * @event set
+ * @param {OO.ui.Layout|null} item Current panel or `null` if no panel is shown
+ */
+
+/* Methods */
+
+/**
+ * Get the current panel.
+ *
+ * @return {OO.ui.Layout|null}
+ */
+OO.ui.StackLayout.prototype.getCurrentItem = function () {
+ return this.currentItem;
+};
+
+/**
+ * Unset the current item.
+ *
+ * @private
+ * @param {OO.ui.StackLayout} layout
+ * @fires set
+ */
+OO.ui.StackLayout.prototype.unsetCurrentItem = function () {
+ var prevItem = this.currentItem;
+ if ( prevItem === null ) {
+ return;
+ }
+
+ this.currentItem = null;
+ this.emit( 'set', null );
+};
+
+/**
+ * Add panel layouts to the stack layout.
+ *
+ * Panels will be added to the end of the stack layout array unless the optional index parameter specifies a different
+ * insertion point. Adding a panel that is already in the stack will move it to the end of the array or the point specified
+ * by the index.
+ *
+ * @param {OO.ui.Layout[]} items Panels to add
+ * @param {number} [index] Index of the insertion point
+ * @chainable
+ */
+OO.ui.StackLayout.prototype.addItems = function ( items, index ) {
+ // Update the visibility
+ this.updateHiddenState( items, this.currentItem );
+
+ // Mixin method
+ OO.ui.GroupElement.prototype.addItems.call( this, items, index );
+
+ if ( !this.currentItem && items.length ) {
+ this.setItem( items[ 0 ] );
+ }
+
+ return this;
+};
+
+/**
+ * Remove the specified panels from the stack layout.
+ *
+ * Removed panels are detached from the DOM, not removed, so that they may be reused. To remove all panels,
+ * you may wish to use the #clearItems method instead.
+ *
+ * @param {OO.ui.Layout[]} items Panels to remove
+ * @chainable
+ * @fires set
+ */
+OO.ui.StackLayout.prototype.removeItems = function ( items ) {
+ // Mixin method
+ OO.ui.GroupElement.prototype.removeItems.call( this, items );
+
+ if ( $.inArray( this.currentItem, items ) !== -1 ) {
+ if ( this.items.length ) {
+ this.setItem( this.items[ 0 ] );
+ } else {
+ this.unsetCurrentItem();
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Clear all panels from the stack layout.
+ *
+ * Cleared panels are detached from the DOM, not removed, so that they may be reused. To remove only
+ * a subset of panels, use the #removeItems method.
+ *
+ * @chainable
+ * @fires set
+ */
+OO.ui.StackLayout.prototype.clearItems = function () {
+ this.unsetCurrentItem();
+ OO.ui.GroupElement.prototype.clearItems.call( this );
+
+ return this;
+};
+
+/**
+ * Show the specified panel.
+ *
+ * If another panel is currently displayed, it will be hidden.
+ *
+ * @param {OO.ui.Layout} item Panel to show
+ * @chainable
+ * @fires set
+ */
+OO.ui.StackLayout.prototype.setItem = function ( item ) {
+ if ( item !== this.currentItem ) {
+ this.updateHiddenState( this.items, item );
+
+ if ( $.inArray( item, this.items ) !== -1 ) {
+ this.currentItem = item;
+ this.emit( 'set', item );
+ } else {
+ this.unsetCurrentItem();
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Update the visibility of all items in case of non-continuous view.
+ *
+ * Ensure all items are hidden except for the selected one.
+ * This method does nothing when the stack is continuous.
+ *
+ * @private
+ * @param {OO.ui.Layout[]} items Item list iterate over
+ * @param {OO.ui.Layout} [selectedItem] Selected item to show
+ */
+OO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem ) {
+ var i, len;
+
+ if ( !this.continuous ) {
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ if ( !selectedItem || selectedItem !== items[ i ] ) {
+ items[ i ].$element.addClass( 'oo-ui-element-hidden' );
+ }
+ }
+ if ( selectedItem ) {
+ selectedItem.$element.removeClass( 'oo-ui-element-hidden' );
+ }
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/outro.js.txt b/vendor/oojs/oojs-ui/src/outro.js.txt
new file mode 100644
index 00000000..4cc1e390
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/outro.js.txt
@@ -0,0 +1 @@
+}( OO ) );
diff --git a/vendor/oojs/oojs-ui/src/styles/Dialog.less b/vendor/oojs/oojs-ui/src/styles/Dialog.less
new file mode 100644
index 00000000..391cefda
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/Dialog.less
@@ -0,0 +1,35 @@
+@import 'common';
+
+.oo-ui-dialog {
+ &-content {
+ > .oo-ui-window {
+ &-head,
+ &-body,
+ &-foot {
+ position: absolute;
+ left: 0;
+ right: 0;
+ overflow: hidden;
+ .oo-ui-box-sizing(border-box);
+ }
+
+ &-head {
+ z-index: 1;
+ top: 0;
+ }
+
+ &-body {
+ z-index: 2;
+ top: 0;
+ bottom: 0;
+ }
+
+ &-foot {
+ z-index: 1;
+ bottom: 0;
+ }
+ }
+ }
+
+ .theme-oo-ui-dialog();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/Element.less b/vendor/oojs/oojs-ui/src/styles/Element.less
new file mode 100644
index 00000000..f8f3389f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/Element.less
@@ -0,0 +1,9 @@
+@import 'common';
+
+.oo-ui-element {
+ &-hidden {
+ display: none !important;
+ }
+
+ .theme-oo-ui-element();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/Layout.less b/vendor/oojs/oojs-ui/src/styles/Layout.less
new file mode 100644
index 00000000..d1ed2f7e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/Layout.less
@@ -0,0 +1,5 @@
+@import 'common';
+
+.oo-ui-layout {
+ .theme-oo-ui-layout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/Tool.less b/vendor/oojs/oojs-ui/src/styles/Tool.less
new file mode 100644
index 00000000..86cf6c38
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/Tool.less
@@ -0,0 +1,5 @@
+@import 'common';
+
+.oo-ui-tool {
+ .theme-oo-ui-tool();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/ToolGroup.less b/vendor/oojs/oojs-ui/src/styles/ToolGroup.less
new file mode 100644
index 00000000..4ba55ea3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/ToolGroup.less
@@ -0,0 +1,21 @@
+@import 'common';
+
+.oo-ui-toolGroup {
+ display: inline-block;
+ vertical-align: middle;
+
+ &-empty {
+ display: none;
+ }
+
+ .oo-ui-tool-link {
+ text-decoration: none;
+
+ .oo-ui-iconElement-icon {
+ background-position: center center;
+ background-repeat: no-repeat;
+ }
+ }
+
+ .theme-oo-ui-toolGroup();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/Toolbar.less b/vendor/oojs/oojs-ui/src/styles/Toolbar.less
new file mode 100644
index 00000000..42eeeaa5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/Toolbar.less
@@ -0,0 +1,52 @@
+@import 'common';
+
+.oo-ui-toolbar {
+ clear: both;
+
+ &-bar {
+ line-height: 1em;
+ position: relative;
+ }
+
+ &-actions {
+ float: right;
+
+ .oo-ui-toolbar {
+ display: inline-block;
+ }
+ }
+
+ &-tools {
+ display: inline;
+ white-space: nowrap;
+
+ .oo-ui-toolbar-narrow & {
+ white-space: normal;
+ }
+
+ // Tools like PopupToolGroup can have a lot of content, which should be wrapped normally
+ .oo-ui-tool {
+ white-space: normal;
+ }
+ }
+
+ &-tools,
+ &-actions,
+ &-shadow {
+ .oo-ui-unselectable();
+ }
+
+ &-actions .oo-ui-popupWidget {
+ .oo-ui-selectable();
+ }
+
+ &-shadow {
+ background-position: left top;
+ background-repeat: repeat-x;
+ position: absolute;
+ width: 100%;
+ pointer-events: none;
+ }
+
+ .theme-oo-ui-toolbar();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/Widget.less b/vendor/oojs/oojs-ui/src/styles/Widget.less
new file mode 100644
index 00000000..107bc424
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/Widget.less
@@ -0,0 +1,5 @@
+@import 'common';
+
+.oo-ui-widget {
+ .theme-oo-ui-widget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/Window.less b/vendor/oojs/oojs-ui/src/styles/Window.less
new file mode 100644
index 00000000..34064684
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/Window.less
@@ -0,0 +1,32 @@
+@import 'common';
+
+.oo-ui-window {
+ &-frame {
+ .oo-ui-box-sizing(border-box);
+ }
+
+ // Content div takes focus when opened, so hide outline
+ &-content:focus {
+ outline: none;
+ }
+
+ &-head,
+ &-foot {
+ .oo-ui-unselectable();
+ }
+
+ &-body {
+ margin: 0;
+ padding: 0;
+ background: none;
+ }
+
+ &-overlay {
+ position: absolute;
+ top: 0;
+ /* @noflip */
+ left: 0;
+ }
+
+ .theme-oo-ui-window();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/WindowManager.less b/vendor/oojs/oojs-ui/src/styles/WindowManager.less
new file mode 100644
index 00000000..bd1e2ab1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/WindowManager.less
@@ -0,0 +1,39 @@
+@import 'common';
+
+.oo-ui-windowManager {
+ &-modal > .oo-ui-dialog {
+ position: fixed;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+
+ &.oo-ui-window-active {
+ width: auto;
+ height: auto;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1em;
+ }
+
+ &.oo-ui-window-setup > .oo-ui-window-frame {
+ position: absolute;
+ right: 0;
+ left: 0;
+ margin: auto;
+ overflow: hidden;
+ max-width: 100%;
+ max-height: 100%;
+ }
+ }
+
+ &-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ bottom: 0;
+ }
+
+ .theme-oo-ui-windowManager();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/common.less b/vendor/oojs/oojs-ui/src/styles/common.less
new file mode 100644
index 00000000..9663580f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/common.less
@@ -0,0 +1,102 @@
+@import 'theme';
+
+// Variables
+
+// @oo-ui-default-image-ext set during build
+// @oo-ui-distribution set during build
+@oo-ui-default-image-path: 'images';
+
+// Mixins
+
+.oo-ui-background-image( @url ) {
+ background-image: e('/* @embed */') url(~'@{url}');
+}
+
+.oo-ui-background-image-svg2( @svg, @fallback ) when ( @oo-ui-distribution = mixed ) {
+ background-image: url(@fallback);
+ background-image: -webkit-linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
+ background-image: linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
+ background-image: -o-linear-gradient(transparent, transparent), url(@fallback);
+}
+.oo-ui-background-image-svg2( @svg, @fallback ) when ( @oo-ui-distribution = vector ) {
+ .oo-ui-background-image(@svg);
+}
+.oo-ui-background-image-svg2( @svg, @fallback ) when ( @oo-ui-distribution = raster ) {
+ .oo-ui-background-image(@fallback);
+}
+
+.oo-ui-background-image-svg( @url-without-extension ) {
+ @svg: '@{url-without-extension}.svg';
+ @fallback: '@{url-without-extension}.@{oo-ui-default-image-ext}';
+ .oo-ui-background-image-svg2(@svg, @fallback);
+}
+
+.oo-ui-force-webkit-gpu() {
+ -webkit-transform: translate3d(0, 0, 0);
+}
+
+.oo-ui-animation( @value1, @value2: X, ... ) {
+ @value: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`;
+ -webkit-animation: @value;
+ -moz-animation: @value;
+ -ms-animation: @value;
+ -o-animation: @value;
+ animation: @value;
+}
+
+.oo-ui-transition( @value1, @value2: X, ... ) {
+ @value: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`;
+ -webkit-transition: @value;
+ -moz-transition: @value;
+ -ms-transition: @value;
+ -o-transition: @value;
+ transition: @value;
+}
+
+.oo-ui-transform( @string ) {
+ -webkit-transform: @string;
+ -moz-transform: @string;
+ -ms-transform: @string;
+ -o-transform: @string;
+ transform: @string;
+}
+
+.oo-ui-box-sizing( @type: border-box ) {
+ -webkit-box-sizing: @type;
+ -moz-box-sizing: @type;
+ box-sizing: @type;
+}
+
+.oo-ui-vertical-gradient( @start: #EEE, @stop: #FFF ) {
+ background: mix(@start, @stop, 50%);
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='%d', endColorstr='%d')", @start, @stop));
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, @start), color-stop(100%, @stop));
+ background-image: -webkit-linear-gradient(top, @start 0%, @stop 100%);
+ background-image: -moz-linear-gradient(top, @start 0%, @stop 100%);
+ background-image: -ms-linear-gradient(top, @start 0%, @stop 100%);
+ background-image: -o-linear-gradient(top, @start 0%, @stop 100%);
+ background-image: linear-gradient(top, @start 0%, @stop 100%);
+}
+
+.oo-ui-unselectable() {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.oo-ui-selectable() {
+ -webkit-touch-callout: default;
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+}
+
+.oo-ui-inline-spacing( @spacing, @cancelled-spacing: 0 ) {
+ margin-right: @spacing;
+ &:last-child {
+ margin-right: @cancelled-spacing;
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/core.less b/vendor/oojs/oojs-ui/src/styles/core.less
new file mode 100644
index 00000000..fc1c91f8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/core.less
@@ -0,0 +1,114 @@
+//
+// Base styles.
+//
+// Themes should include this file after defining their variables and mixins.
+//
+
+@import 'common';
+
+/* @noflip */
+.oo-ui-rtl {
+ direction: rtl;
+}
+
+/* @noflip */
+.oo-ui-ltr {
+ direction: ltr;
+}
+
+@import 'Element.less';
+@import 'elements/ButtonElement.less';
+@import 'elements/ClippableElement.less';
+@import 'elements/FlaggedElement.less';
+@import 'elements/DraggableElement.less';
+@import 'elements/DraggableGroupElement.less';
+@import 'elements/GroupElement.less';
+@import 'elements/IconElement.less';
+@import 'elements/IndicatorElement.less';
+@import 'elements/LabelElement.less';
+@import 'elements/LookupElement.less';
+@import 'elements/PopupElement.less';
+@import 'elements/TabIndexedElement.less';
+@import 'elements/TitledElement.less';
+
+@import 'Layout.less';
+@import 'layouts/BookletLayout.less';
+@import 'layouts/IndexLayout.less';
+@import 'layouts/FieldLayout.less';
+@import 'layouts/ActionFieldLayout.less';
+@import 'layouts/FieldsetLayout.less';
+@import 'layouts/FormLayout.less';
+@import 'layouts/MenuLayout.less';
+@import 'layouts/PanelLayout.less';
+@import 'layouts/CardLayout.less';
+@import 'layouts/PageLayout.less';
+@import 'layouts/StackLayout.less';
+
+@import 'Tool.less';
+@import 'tools/PopupTool.less';
+@import 'tools/ToolGroupTool.less';
+
+@import 'ToolGroup.less';
+@import 'toolgroups/BarToolGroup.less';
+@import 'toolgroups/PopupToolGroup.less';
+@import 'toolgroups/ListToolGroup.less';
+@import 'toolgroups/MenuToolGroup.less';
+
+@import 'Toolbar.less';
+
+@import 'Widget.less';
+@import 'widgets/SelectWidget.less';
+@import 'widgets/OptionWidget.less';
+@import 'widgets/DecoratedOptionWidget.less';
+@import 'widgets/ButtonSelectWidget.less';
+@import 'widgets/RadioSelectWidget.less';
+@import 'widgets/ButtonOptionWidget.less';
+@import 'widgets/RadioOptionWidget.less';
+
+@import 'widgets/LabelWidget.less';
+@import 'widgets/IconWidget.less';
+@import 'widgets/IndicatorWidget.less';
+
+@import 'widgets/ButtonWidget.less';
+@import 'widgets/ButtonGroupWidget.less';
+
+@import 'widgets/ToggleWidget.less';
+@import 'widgets/ToggleButtonWidget.less';
+@import 'widgets/ToggleSwitchWidget.less';
+
+@import 'widgets/ProgressBarWidget.less';
+
+@import 'widgets/ActionWidget.less';
+
+@import 'widgets/PopupWidget.less';
+@import 'widgets/PopupButtonWidget.less';
+
+@import 'widgets/InputWidget.less';
+@import 'widgets/ButtonInputWidget.less';
+@import 'widgets/CheckboxInputWidget.less';
+@import 'widgets/DropdownInputWidget.less';
+@import 'widgets/RadioInputWidget.less';
+@import 'widgets/TextInputWidget.less';
+
+@import 'widgets/MenuSelectWidget.less';
+@import 'widgets/MenuOptionWidget.less';
+@import 'widgets/MenuSectionOptionWidget.less';
+@import 'widgets/TextInputMenuSelectWidget.less';
+@import 'widgets/DropdownWidget.less';
+
+@import 'widgets/OutlineSelectWidget.less';
+@import 'widgets/OutlineOptionWidget.less';
+@import 'widgets/OutlineControlsWidget.less';
+
+@import 'widgets/TabSelectWidget.less';
+@import 'widgets/TabOptionWidget.less';
+
+@import 'widgets/ComboBoxWidget.less';
+@import 'widgets/SearchWidget.less';
+
+@import 'Window.less';
+@import 'Dialog.less';
+@import 'dialogs/MessageDialog.less';
+@import 'dialogs/ProcessDialog.less';
+
+@import 'WindowManager.less';
diff --git a/vendor/oojs/oojs-ui/src/styles/dialogs/MessageDialog.less b/vendor/oojs/oojs-ui/src/styles/dialogs/MessageDialog.less
new file mode 100644
index 00000000..e50029f9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/dialogs/MessageDialog.less
@@ -0,0 +1,45 @@
+@import '../common';
+
+.oo-ui-messageDialog {
+ &-actions {
+ &-horizontal {
+ display: table;
+ table-layout: fixed;
+ width: 100%;
+
+ .oo-ui-actionWidget {
+ display: table-cell;
+ width: 1%;
+ }
+ }
+
+ &-vertical {
+ display: block;
+
+ .oo-ui-actionWidget {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+
+ .oo-ui-actionWidget {
+ position: relative;
+ text-align: center;
+
+ .oo-ui-buttonElement-button {
+ display: block;
+ }
+
+ .oo-ui-labelElement-label {
+ position: relative;
+ top: auto;
+ bottom: auto;
+ display: inline;
+ white-space: nowrap;
+ }
+ }
+ }
+
+ .theme-oo-ui-messageDialog();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/dialogs/ProcessDialog.less b/vendor/oojs/oojs-ui/src/styles/dialogs/ProcessDialog.less
new file mode 100644
index 00000000..379588ae
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/dialogs/ProcessDialog.less
@@ -0,0 +1,52 @@
+@import '../common';
+
+.oo-ui-processDialog {
+ &-location {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ &-title {
+ display: inline;
+ padding: 0;
+ }
+
+ &-actions {
+ &-safe,
+ &-primary,
+ &-other {
+ .oo-ui-actionWidget {
+ white-space: nowrap;
+ }
+ }
+
+ &-safe,
+ &-primary {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ }
+
+ &-safe {
+ left: 0;
+ }
+
+ &-primary {
+ right: 0;
+ }
+ }
+
+ &-errors {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 2;
+ overflow-x: hidden;
+ overflow-y: auto;
+ }
+
+ .theme-oo-ui-processDialog();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/ButtonElement.less b/vendor/oojs/oojs-ui/src/styles/elements/ButtonElement.less
new file mode 100644
index 00000000..248772e5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/ButtonElement.less
@@ -0,0 +1,62 @@
+@import '../common';
+
+.oo-ui-buttonElement {
+ > .oo-ui-buttonElement-button {
+ cursor: pointer;
+ display: inline-block;
+ vertical-align: middle;
+ font: inherit;
+ white-space: nowrap;
+ .oo-ui-unselectable();
+
+ > .oo-ui-iconElement-icon,
+ > .oo-ui-indicatorElement-indicator {
+ display: none;
+ }
+ }
+
+ &.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ cursor: default;
+ }
+
+ &.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+ &.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+ }
+
+ &-frameless {
+ display: inline-block;
+ position: relative;
+
+ &.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+ }
+ }
+
+ &-framed {
+ > .oo-ui-buttonElement-button {
+ display: inline-block;
+ vertical-align: top;
+ text-align: center;
+ }
+
+ &.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ &.oo-ui-widget-disabled {
+ > .oo-ui-buttonElement-button,
+ &.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ cursor: default;
+ }
+ }
+ }
+
+ .theme-oo-ui-buttonElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/ClippableElement.less b/vendor/oojs/oojs-ui/src/styles/elements/ClippableElement.less
new file mode 100644
index 00000000..2a661e93
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/ClippableElement.less
@@ -0,0 +1,7 @@
+@import '../common';
+
+.oo-ui-clippableElement-clippable {
+ .oo-ui-box-sizing(border-box);
+
+ .theme-oo-ui-clippableElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/DraggableElement.less b/vendor/oojs/oojs-ui/src/styles/elements/DraggableElement.less
new file mode 100644
index 00000000..3f382766
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/DraggableElement.less
@@ -0,0 +1,22 @@
+@import '../common';
+
+.oo-ui-draggableElement {
+ cursor: -webkit-grab -moz-grab, url(images/grab.cur), move;
+
+ &-dragging {
+ cursor: -webkit-grabbing -moz-grabbing, url(images/grabbing.cur), move;
+ background: rgba( 0, 0, 0, 0.2 );
+ opacity: 0.4;
+ }
+
+ /*
+ * HACK: In order to style horizontally, we must override
+ * OO.ui.OptionWidget's display rule that is currently set
+ * to be 'block'
+ */
+ .oo-ui-draggableGroupElement-horizontal &.oo-ui-optionWidget {
+ display: inline-block;
+ }
+
+ .theme-oo-ui-draggableElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/DraggableGroupElement.less b/vendor/oojs/oojs-ui/src/styles/elements/DraggableGroupElement.less
new file mode 100644
index 00000000..07e08594
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/DraggableGroupElement.less
@@ -0,0 +1,11 @@
+@import '../common';
+
+.oo-ui-draggableGroupElement {
+ &-placeholder {
+ position: absolute;
+ display: block;
+ background: rgba( 0, 0, 0, 0.4 );
+ }
+
+ .theme-oo-ui-draggableGroupElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/FlaggedElement.less b/vendor/oojs/oojs-ui/src/styles/elements/FlaggedElement.less
new file mode 100644
index 00000000..6e9202e9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/FlaggedElement.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-flaggedElement {
+ .theme-oo-ui-flaggedElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/GroupElement.less b/vendor/oojs/oojs-ui/src/styles/elements/GroupElement.less
new file mode 100644
index 00000000..159d32cc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/GroupElement.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-groupElement {
+ .theme-oo-ui-groupElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/IconElement.less b/vendor/oojs/oojs-ui/src/styles/elements/IconElement.less
new file mode 100644
index 00000000..5d90fda6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/IconElement.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-iconElement {
+ .theme-oo-ui-iconElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/IndicatorElement.less b/vendor/oojs/oojs-ui/src/styles/elements/IndicatorElement.less
new file mode 100644
index 00000000..d400803c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/IndicatorElement.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-indicatorElement {
+ .theme-oo-ui-indicatorElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/LabelElement.less b/vendor/oojs/oojs-ui/src/styles/elements/LabelElement.less
new file mode 100644
index 00000000..c47ecdc4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/LabelElement.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-labelElement {
+ .theme-oo-ui-labelElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/LookupElement.less b/vendor/oojs/oojs-ui/src/styles/elements/LookupElement.less
new file mode 100644
index 00000000..0ab29f72
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/LookupElement.less
@@ -0,0 +1,10 @@
+@import '../common';
+
+.oo-ui-lookupElement {
+ > .oo-ui-menuSelectWidget {
+ z-index: 1;
+ width: 100%;
+ }
+
+ .theme-oo-ui-lookupElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/PopupElement.less b/vendor/oojs/oojs-ui/src/styles/elements/PopupElement.less
new file mode 100644
index 00000000..12b80daf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/PopupElement.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-popupElement {
+ .theme-oo-ui-popupElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/TabIndexedElement.less b/vendor/oojs/oojs-ui/src/styles/elements/TabIndexedElement.less
new file mode 100644
index 00000000..f894d369
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/TabIndexedElement.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-tabIndexedElement {
+ .theme-oo-ui-tabIndexedElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/elements/TitledElement.less b/vendor/oojs/oojs-ui/src/styles/elements/TitledElement.less
new file mode 100644
index 00000000..f8a15b68
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/elements/TitledElement.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-titledElement {
+ .theme-oo-ui-titledElement();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/images/grab.cur b/vendor/oojs/oojs-ui/src/styles/images/grab.cur
new file mode 100644
index 00000000..fba3ddc8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/images/grab.cur
Binary files differ
diff --git a/vendor/oojs/oojs-ui/src/styles/images/grabbing.cur b/vendor/oojs/oojs-ui/src/styles/images/grabbing.cur
new file mode 100644
index 00000000..41aaa62a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/images/grabbing.cur
Binary files differ
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/ActionFieldLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/ActionFieldLayout.less
new file mode 100644
index 00000000..2d4c2a66
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/ActionFieldLayout.less
@@ -0,0 +1,26 @@
+@import '../common';
+
+.oo-ui-actionFieldLayout {
+ &-field {
+ display: table;
+ table-layout: fixed;
+ width: 100%;
+ }
+
+ &-input,
+ &-button {
+ display: table-cell;
+ vertical-align: middle;
+ }
+
+ &-input {
+ padding-right: 1em;
+ }
+
+ &-button {
+ width: 1%;
+ white-space: nowrap;
+ }
+
+ .theme-oo-ui-actionFieldLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/BookletLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/BookletLayout.less
new file mode 100644
index 00000000..b31cb6d7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/BookletLayout.less
@@ -0,0 +1,43 @@
+@import '../common';
+
+.oo-ui-bookletLayout {
+ &-stackLayout {
+ &.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
+ overflow-y: hidden;
+ }
+
+ > .oo-ui-panelLayout {
+ width: 100%;
+
+ .oo-ui-box-sizing(border-box);
+
+ &-scrollable {
+ overflow-y: auto;
+ }
+
+ &-padded {
+ padding: 2em;
+ }
+ }
+ }
+
+ &-outlinePanel {
+ &-editable > .oo-ui-outlineSelectWidget {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 3em;
+ overflow-y: auto;
+ }
+
+ > .oo-ui-outlineControlsWidget {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ }
+ }
+
+ .theme-oo-ui-bookletLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/CardLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/CardLayout.less
new file mode 100644
index 00000000..4fdb20b2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/CardLayout.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-cardLayout {
+ .theme-oo-ui-cardLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/FieldLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/FieldLayout.less
new file mode 100644
index 00000000..799f9f4b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/FieldLayout.less
@@ -0,0 +1,59 @@
+@import '../common';
+
+.oo-ui-fieldLayout {
+ display: block;
+
+ &:before,
+ &:after {
+ content: " ";
+ display: table;
+ }
+
+ &:after {
+ clear: both;
+ }
+
+ &.oo-ui-fieldLayout-align-left,
+ &.oo-ui-fieldLayout-align-right {
+ > .oo-ui-fieldLayout-body {
+ > .oo-ui-labelElement-label,
+ > .oo-ui-fieldLayout-field {
+ display: block;
+ float: left;
+ }
+ }
+ }
+
+ &.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ text-align: right;
+ }
+
+ &.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-body {
+ display: table;
+
+ > .oo-ui-labelElement-label,
+ > .oo-ui-fieldLayout-field {
+ display: table-cell;
+ vertical-align: middle;
+ }
+ }
+
+ &.oo-ui-labelElement.oo-ui-fieldLayout-align-top > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ display: inline-block;
+ }
+
+ > .oo-ui-fieldLayout-help {
+ float: right;
+
+ > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+ z-index: 1;
+ }
+
+ .oo-ui-fieldLayout-help-content {
+ padding: 0.5em 0.75em;
+ line-height: 1.5em;
+ }
+ }
+
+ .theme-oo-ui-fieldLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/FieldsetLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/FieldsetLayout.less
new file mode 100644
index 00000000..726b9310
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/FieldsetLayout.less
@@ -0,0 +1,31 @@
+@import '../common';
+
+.oo-ui-fieldsetLayout {
+ position: relative;
+
+ &.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ display: block;
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+ }
+
+ &.oo-ui-labelElement > .oo-ui-labelElement-label {
+ display: inline-block;
+ }
+
+ > .oo-ui-fieldsetLayout-help {
+ float: right;
+
+ > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+ z-index: 1;
+ }
+
+ .oo-ui-fieldsetLayout-help-content {
+ padding: 0.5em 0.75em;
+ line-height: 1.5em;
+ }
+ }
+
+ .theme-oo-ui-fieldsetLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/FormLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/FormLayout.less
new file mode 100644
index 00000000..7354e4bd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/FormLayout.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-formLayout {
+ .theme-oo-ui-formLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/IndexLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/IndexLayout.less
new file mode 100644
index 00000000..63f3f146
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/IndexLayout.less
@@ -0,0 +1,13 @@
+@import '../common';
+
+.oo-ui-indexLayout {
+ > .oo-ui-menuLayout-menu {
+ height: 3em;
+ }
+
+ > .oo-ui-menuLayout-content {
+ top: 3em;
+ }
+
+ .theme-oo-ui-indexLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/MenuLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/MenuLayout.less
new file mode 100644
index 00000000..c5080e2b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/MenuLayout.less
@@ -0,0 +1,108 @@
+@import '../common';
+
+.oo-ui-menuLayout {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+
+ &-menu,
+ &-content {
+ position: absolute;
+ .oo-ui-transition(all ease-in-out 200ms);
+ }
+
+ // These are overridden with 'auto' or '0' later
+ &-menu {
+ height: 18em;
+ width: 18em;
+ }
+
+ // These are overridden with 'auto' or '0' later
+ &-content {
+ top: 18em;
+ left: 18em;
+ right: 18em;
+ bottom: 18em;
+ }
+
+ &.oo-ui-menuLayout-hideMenu {
+ .oo-ui-menuLayout-menu {
+ width: 0 !important;
+ height: 0 !important;
+ overflow: hidden;
+ }
+
+ .oo-ui-menuLayout-content {
+ top: 0 !important;
+ left: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ }
+ }
+
+ &.oo-ui-menuLayout-showMenu {
+ &.oo-ui-menuLayout-top {
+ .oo-ui-menuLayout-menu {
+ width: auto !important;
+ left: 0;
+ top: 0;
+ right: 0;
+ }
+
+ .oo-ui-menuLayout-content {
+ right: 0 !important;
+ bottom: 0 !important;
+ left: 0 !important;
+ }
+ }
+
+ &.oo-ui-menuLayout-after {
+ .oo-ui-menuLayout-menu {
+ height: auto !important;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ }
+
+ .oo-ui-menuLayout-content {
+ bottom: 0 !important;
+ left: 0 !important;
+ top: 0 !important;
+ }
+ }
+
+ &.oo-ui-menuLayout-bottom {
+ .oo-ui-menuLayout-menu {
+ width: auto !important;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ }
+
+ .oo-ui-menuLayout-content {
+ left: 0 !important;
+ top: 0 !important;
+ right: 0 !important;
+ }
+ }
+
+ &.oo-ui-menuLayout-before {
+ .oo-ui-menuLayout-menu {
+ height: auto !important;
+ bottom: 0;
+ left: 0;
+ top: 0;
+ }
+
+ .oo-ui-menuLayout-content {
+ top: 0 !important;
+ right: 0 !important;
+ bottom: 0 !important;
+ }
+ }
+ }
+
+ .theme-oo-ui-menuLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/PageLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/PageLayout.less
new file mode 100644
index 00000000..91aa4571
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/PageLayout.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-pageLayout {
+ .theme-oo-ui-pageLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/PanelLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/PanelLayout.less
new file mode 100644
index 00000000..ed488ed7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/PanelLayout.less
@@ -0,0 +1,19 @@
+@import '../common';
+
+.oo-ui-panelLayout {
+ position: relative;
+
+ &-scrollable {
+ overflow-y: auto;
+ }
+
+ &-expanded {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ }
+
+ .theme-oo-ui-panelLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/layouts/StackLayout.less b/vendor/oojs/oojs-ui/src/styles/layouts/StackLayout.less
new file mode 100644
index 00000000..6dd4fa79
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/layouts/StackLayout.less
@@ -0,0 +1,10 @@
+@import '../common';
+
+.oo-ui-stackLayout {
+ &-continuous > .oo-ui-panelLayout {
+ display: block;
+ position: relative;
+ }
+
+ .theme-oo-ui-stackLayout();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/theme.less b/vendor/oojs/oojs-ui/src/styles/theme.less
new file mode 100644
index 00000000..2cd4c0e3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/theme.less
@@ -0,0 +1,91 @@
+//
+// Blank theme mixins.
+//
+// Base styles invoke these mixins at the end of their definitions. Override these mixins to add
+// additional rules to the base styles.
+//
+
+.theme-oo-ui-layout () {}
+.theme-oo-ui-element () {}
+.theme-oo-ui-widget () {}
+.theme-oo-ui-window () {}
+.theme-oo-ui-dialog () {}
+.theme-oo-ui-windowManager () {}
+
+.theme-oo-ui-buttonElement () {}
+.theme-oo-ui-clippableElement () {}
+.theme-oo-ui-draggableElement () {}
+.theme-oo-ui-flaggedElement () {}
+.theme-oo-ui-groupElement () {}
+.theme-oo-ui-draggableGroupElement () {}
+.theme-oo-ui-iconElement () {}
+.theme-oo-ui-indicatorElement () {}
+.theme-oo-ui-labelElement () {}
+.theme-oo-ui-lookupElement () {}
+.theme-oo-ui-popupElement () {}
+.theme-oo-ui-tabIndexedElement () {}
+.theme-oo-ui-titledElement () {}
+
+.theme-oo-ui-tool () {}
+.theme-oo-ui-toolbar () {}
+.theme-oo-ui-toolGroup () {}
+.theme-oo-ui-messageDialog () {}
+.theme-oo-ui-processDialog () {}
+
+.theme-oo-ui-bookletLayout () {}
+.theme-oo-ui-indexLayout () {}
+.theme-oo-ui-fieldLayout () {}
+.theme-oo-ui-actionFieldLayout () {}
+.theme-oo-ui-fieldsetLayout () {}
+.theme-oo-ui-formLayout () {}
+.theme-oo-ui-menuLayout () {}
+.theme-oo-ui-panelLayout () {}
+.theme-oo-ui-cardLayout () {}
+.theme-oo-ui-pageLayout () {}
+.theme-oo-ui-stackLayout () {}
+
+.theme-oo-ui-barToolGroup () {}
+.theme-oo-ui-popupToolGroup () {}
+.theme-oo-ui-listToolGroup () {}
+.theme-oo-ui-menuToolGroup () {}
+
+.theme-oo-ui-popupTool () {}
+.theme-oo-ui-toolGroupTool () {}
+
+.theme-oo-ui-outlineControlsWidget () {}
+.theme-oo-ui-toggleWidget () {}
+
+.theme-oo-ui-buttonGroupWidget () {}
+.theme-oo-ui-buttonWidget () {}
+.theme-oo-ui-actionWidget () {}
+.theme-oo-ui-popupButtonWidget () {}
+.theme-oo-ui-toggleButtonWidget () {}
+.theme-oo-ui-iconWidget () {}
+.theme-oo-ui-indicatorWidget () {}
+.theme-oo-ui-dropdownWidget () {}
+.theme-oo-ui-inputWidget () {}
+.theme-oo-ui-buttonInputWidget () {}
+.theme-oo-ui-checkboxInputWidget () {}
+.theme-oo-ui-dropdownInputWidget () {}
+.theme-oo-ui-radioInputWidget () {}
+.theme-oo-ui-textInputWidget () {}
+.theme-oo-ui-comboBoxWidget () {}
+.theme-oo-ui-labelWidget () {}
+.theme-oo-ui-optionWidget () {}
+.theme-oo-ui-decoratedOptionWidget () {}
+.theme-oo-ui-buttonOptionWidget () {}
+.theme-oo-ui-radioOptionWidget () {}
+.theme-oo-ui-menuOptionWidget () {}
+.theme-oo-ui-menuSectionOptionWidget () {}
+.theme-oo-ui-outlineOptionWidget () {}
+.theme-oo-ui-tabOptionWidget () {}
+.theme-oo-ui-popupWidget () {}
+.theme-oo-ui-searchWidget () {}
+.theme-oo-ui-selectWidget () {}
+.theme-oo-ui-buttonSelectWidget () {}
+.theme-oo-ui-radioSelectWidget () {}
+.theme-oo-ui-menuSelectWidget () {}
+.theme-oo-ui-textInputMenuSelectWidget () {}
+.theme-oo-ui-outlineSelectWidget () {}
+.theme-oo-ui-tabSelectWidget () {}
+.theme-oo-ui-toggleSwitchWidget () {}
diff --git a/vendor/oojs/oojs-ui/src/styles/toolgroups/BarToolGroup.less b/vendor/oojs/oojs-ui/src/styles/toolgroups/BarToolGroup.less
new file mode 100644
index 00000000..44c3bb8c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/toolgroups/BarToolGroup.less
@@ -0,0 +1,51 @@
+@import '../common';
+
+.oo-ui-barToolGroup {
+ > .oo-ui-iconElement-icon,
+ > .oo-ui-labelElement-label {
+ display: none;
+ }
+
+ &.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ > .oo-ui-tool-link {
+ cursor: pointer;
+ }
+ }
+
+ > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ display: inline-block;
+ position: relative;
+ vertical-align: top;
+
+ > .oo-ui-tool-link {
+ display: block;
+
+ .oo-ui-tool-accel {
+ display: none;
+ }
+ }
+
+ &.oo-ui-iconElement > .oo-ui-tool-link {
+ .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: top;
+ }
+
+ .oo-ui-tool-title {
+ display: none;
+ }
+ }
+
+ &.oo-ui-iconElement.oo-ui-tool-with-label > .oo-ui-tool-link {
+ .oo-ui-tool-title {
+ display: inline;
+ }
+ }
+
+ &.oo-ui-widget-disabled > .oo-ui-tool-link {
+ cursor: default;
+ }
+ }
+
+ .theme-oo-ui-barToolGroup();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/toolgroups/ListToolGroup.less b/vendor/oojs/oojs-ui/src/styles/toolgroups/ListToolGroup.less
new file mode 100644
index 00000000..f3c745a3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/toolgroups/ListToolGroup.less
@@ -0,0 +1,21 @@
+@import '../common';
+
+.oo-ui-listToolGroup {
+ .oo-ui-tool {
+ display: block;
+
+ .oo-ui-box-sizing(border-box);
+
+ &-link {
+ cursor: pointer;
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-tool-link {
+ cursor: default;
+ }
+ }
+ }
+
+ .theme-oo-ui-listToolGroup();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/toolgroups/MenuToolGroup.less b/vendor/oojs/oojs-ui/src/styles/toolgroups/MenuToolGroup.less
new file mode 100644
index 00000000..cfbbe0b6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/toolgroups/MenuToolGroup.less
@@ -0,0 +1,19 @@
+@import '../common';
+
+.oo-ui-menuToolGroup {
+ .oo-ui-tool {
+ display: block;
+
+ &-link {
+ cursor: pointer;
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-tool-link {
+ cursor: default;
+ }
+ }
+ }
+
+ .theme-oo-ui-menuToolGroup();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/toolgroups/PopupToolGroup.less b/vendor/oojs/oojs-ui/src/styles/toolgroups/PopupToolGroup.less
new file mode 100644
index 00000000..1b54bea5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/toolgroups/PopupToolGroup.less
@@ -0,0 +1,73 @@
+@import '../common';
+
+.oo-ui-popupToolGroup {
+ position: relative;
+
+ &-handle {
+ display: block;
+ cursor: pointer;
+
+ .oo-ui-indicatorElement-indicator,
+ .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-popupToolGroup-handle {
+ cursor: default;
+ }
+ }
+
+ .oo-ui-toolGroup-tools {
+ display: none;
+ position: absolute;
+ z-index: 4;
+
+ .oo-ui-iconElement-icon {
+ background-repeat: no-repeat;
+ background-position: center center;
+ }
+ }
+
+ &-active.oo-ui-widget-enabled {
+ > .oo-ui-toolGroup-tools {
+ display: block;
+ }
+ }
+
+ &-left > .oo-ui-toolGroup-tools {
+ left: 0;
+ }
+
+ &-right > .oo-ui-toolGroup-tools {
+ right: 0;
+ }
+
+ .oo-ui-tool-link {
+ display: table;
+ width: 100%;
+ vertical-align: middle;
+ white-space: nowrap;
+
+ .oo-ui-iconElement-icon,
+ .oo-ui-tool-accel,
+ .oo-ui-tool-title {
+ display: table-cell;
+ vertical-align: middle;
+ }
+
+ .oo-ui-tool-accel {
+ text-align: right;
+ }
+
+ .oo-ui-tool-accel:not(:empty) {
+ // Push away from tool's title
+ padding-left: 3em;
+ }
+ }
+
+ .theme-oo-ui-popupToolGroup();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/tools/PopupTool.less b/vendor/oojs/oojs-ui/src/styles/tools/PopupTool.less
new file mode 100644
index 00000000..df90302b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/tools/PopupTool.less
@@ -0,0 +1,12 @@
+@import '../common';
+
+.oo-ui-popupTool {
+ .oo-ui-popupWidget {
+ &-popup,
+ &-anchor {
+ z-index: 4;
+ }
+ }
+
+ .theme-oo-ui-popupTool();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/tools/ToolGroupTool.less b/vendor/oojs/oojs-ui/src/styles/tools/ToolGroupTool.less
new file mode 100644
index 00000000..753d4e8a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/tools/ToolGroupTool.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-toolGroupTool {
+ .theme-oo-ui-toolGroupTool();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ActionWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ActionWidget.less
new file mode 100644
index 00000000..39ed296f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ActionWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-actionWidget {
+ .theme-oo-ui-actionWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ButtonGroupWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonGroupWidget.less
new file mode 100644
index 00000000..eee220d4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonGroupWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-buttonGroupWidget {
+ .theme-oo-ui-buttonGroupWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ButtonInputWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonInputWidget.less
new file mode 100644
index 00000000..5de860eb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonInputWidget.less
@@ -0,0 +1,8 @@
+@import '../common';
+
+.oo-ui-buttonInputWidget {
+ display: inline-block;
+ vertical-align: middle;
+
+ .theme-oo-ui-buttonInputWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ButtonOptionWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonOptionWidget.less
new file mode 100644
index 00000000..fe214090
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonOptionWidget.less
@@ -0,0 +1,18 @@
+@import '../common';
+
+.oo-ui-buttonOptionWidget {
+ display: inline-block;
+
+ .oo-ui-buttonElement-button {
+ position: relative;
+ }
+
+ &.oo-ui-iconElement .oo-ui-iconElement-icon,
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ position: static;
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ .theme-oo-ui-buttonOptionWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ButtonSelectWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonSelectWidget.less
new file mode 100644
index 00000000..d0430db5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonSelectWidget.less
@@ -0,0 +1,8 @@
+@import '../common';
+
+.oo-ui-buttonSelectWidget {
+ display: inline-block;
+ white-space: nowrap;
+
+ .theme-oo-ui-buttonSelectWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ButtonWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonWidget.less
new file mode 100644
index 00000000..c33149f2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ButtonWidget.less
@@ -0,0 +1,8 @@
+@import '../common';
+
+.oo-ui-buttonWidget {
+ display: inline-block;
+ vertical-align: middle;
+
+ .theme-oo-ui-buttonWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/CheckboxInputWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/CheckboxInputWidget.less
new file mode 100644
index 00000000..608c9a6b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/CheckboxInputWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-checkboxInputWidget {
+ .theme-oo-ui-checkboxInputWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ComboBoxWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ComboBoxWidget.less
new file mode 100644
index 00000000..1b393c5b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ComboBoxWidget.less
@@ -0,0 +1,13 @@
+@import '../common';
+
+.oo-ui-comboBoxWidget {
+ display: inline-block;
+ position: relative;
+
+ > .oo-ui-menuSelectWidget {
+ z-index: 1;
+ width: 100%;
+ }
+
+ .theme-oo-ui-comboBoxWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/DecoratedOptionWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/DecoratedOptionWidget.less
new file mode 100644
index 00000000..a31d0670
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/DecoratedOptionWidget.less
@@ -0,0 +1,12 @@
+@import '../common';
+
+.oo-ui-decoratedOptionWidget {
+ .oo-ui-iconElement-icon,
+ .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ background-repeat: no-repeat;
+ background-position: center center;
+ }
+
+ .theme-oo-ui-decoratedOptionWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/DropdownInputWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/DropdownInputWidget.less
new file mode 100644
index 00000000..8b7bb7cf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/DropdownInputWidget.less
@@ -0,0 +1,17 @@
+@import '../common';
+
+.oo-ui-dropdownInputWidget {
+ position: relative;
+ // Necessary for proper alignment when used with display: inline-block
+ vertical-align: middle;
+ .oo-ui-box-sizing(border-box);
+
+ select {
+ display: inline-block;
+ width: 100%;
+ resize: none;
+ .oo-ui-box-sizing(border-box);
+ }
+
+ .theme-oo-ui-dropdownInputWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/DropdownWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/DropdownWidget.less
new file mode 100644
index 00000000..d934cd4b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/DropdownWidget.less
@@ -0,0 +1,33 @@
+@import '../common';
+
+.oo-ui-dropdownWidget {
+ display: inline-block;
+ position: relative;
+
+ &-handle {
+ width: 100%;
+ display: inline-block;
+ cursor: pointer;
+
+ .oo-ui-unselectable();
+ .oo-ui-box-sizing(border-box);
+
+ .oo-ui-indicatorElement-indicator,
+ .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+ }
+ }
+
+ > .oo-ui-menuSelectWidget {
+ z-index: 1;
+ width: 100%;
+ }
+
+ &.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
+ cursor: default;
+ }
+
+ .theme-oo-ui-dropdownWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/IconWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/IconWidget.less
new file mode 100644
index 00000000..03f6ab79
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/IconWidget.less
@@ -0,0 +1,10 @@
+@import '../common';
+
+.oo-ui-iconWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+
+ .theme-oo-ui-iconWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/IndicatorWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/IndicatorWidget.less
new file mode 100644
index 00000000..c1b00458
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/IndicatorWidget.less
@@ -0,0 +1,10 @@
+@import '../common';
+
+.oo-ui-indicatorWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+
+ .theme-oo-ui-indicatorWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/InputWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/InputWidget.less
new file mode 100644
index 00000000..93628830
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/InputWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-inputWidget {
+ .theme-oo-ui-inputWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/LabelWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/LabelWidget.less
new file mode 100644
index 00000000..cddd1a0a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/LabelWidget.less
@@ -0,0 +1,7 @@
+@import '../common';
+
+.oo-ui-labelWidget {
+ display: inline-block;
+
+ .theme-oo-ui-labelWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/MenuOptionWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/MenuOptionWidget.less
new file mode 100644
index 00000000..f7f9f7a4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/MenuOptionWidget.less
@@ -0,0 +1,21 @@
+@import '../common';
+
+.oo-ui-menuOptionWidget {
+ position: relative;
+
+ .oo-ui-iconElement-icon {
+ display: none;
+ }
+
+ &.oo-ui-optionWidget {
+ &-selected {
+ background-color: transparent;
+
+ .oo-ui-iconElement-icon {
+ display: block;
+ }
+ }
+ }
+
+ .theme-oo-ui-menuOptionWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/MenuSectionOptionWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/MenuSectionOptionWidget.less
new file mode 100644
index 00000000..f670f7f5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/MenuSectionOptionWidget.less
@@ -0,0 +1,8 @@
+@import '../common';
+
+.oo-ui-menuSectionOptionWidget {
+ cursor: default;
+
+ .theme-oo-ui-menuSectionOptionWidget();
+}
+
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/MenuSelectWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/MenuSelectWidget.less
new file mode 100644
index 00000000..0585469f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/MenuSelectWidget.less
@@ -0,0 +1,15 @@
+@import '../common';
+
+.oo-ui-menuSelectWidget {
+ position: absolute;
+
+ input {
+ position: absolute;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ opacity: 0;
+ }
+
+ .theme-oo-ui-menuSelectWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/OptionWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/OptionWidget.less
new file mode 100644
index 00000000..8543fc74
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/OptionWidget.less
@@ -0,0 +1,20 @@
+@import '../common';
+
+.oo-ui-optionWidget {
+ position: relative;
+ display: block;
+ cursor: pointer;
+
+ &.oo-ui-widget-disabled {
+ cursor: default;
+ }
+
+ &.oo-ui-labelElement .oo-ui-labelElement-label {
+ display: block;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+
+ .theme-oo-ui-optionWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/OutlineControlsWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/OutlineControlsWidget.less
new file mode 100644
index 00000000..97d4e1d7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/OutlineControlsWidget.less
@@ -0,0 +1,32 @@
+@import '../common';
+
+.oo-ui-outlineControlsWidget {
+ &-items,
+ &-movers {
+ float: left;
+ .oo-ui-box-sizing(border-box);
+ }
+
+ > .oo-ui-iconElement-icon {
+ float: left;
+ background-position: right center;
+ background-repeat: no-repeat;
+ }
+
+ &-items {
+ float: left;
+
+ .oo-ui-buttonWidget {
+ float: left;
+ }
+ }
+ &-movers {
+ float: right;
+
+ .oo-ui-buttonWidget {
+ float: right;
+ }
+ }
+
+ .theme-oo-ui-outlineControlsWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/OutlineOptionWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/OutlineOptionWidget.less
new file mode 100644
index 00000000..6558c652
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/OutlineOptionWidget.less
@@ -0,0 +1,9 @@
+@import '../common';
+
+.oo-ui-outlineOptionWidget {
+ position: relative;
+ cursor: pointer;
+ .oo-ui-unselectable();
+
+ .theme-oo-ui-outlineOptionWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/OutlineSelectWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/OutlineSelectWidget.less
new file mode 100644
index 00000000..65fc621b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/OutlineSelectWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-outlineSelectWidget {
+ .theme-oo-ui-outlineSelectWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/PopupButtonWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/PopupButtonWidget.less
new file mode 100644
index 00000000..805239ed
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/PopupButtonWidget.less
@@ -0,0 +1,12 @@
+@import '../common';
+
+.oo-ui-popupButtonWidget {
+ position: relative;
+
+ .oo-ui-popupWidget {
+ position: absolute;
+ cursor: auto;
+ }
+
+ .theme-oo-ui-popupButtonWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/PopupWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/PopupWidget.less
new file mode 100644
index 00000000..d8fdd40c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/PopupWidget.less
@@ -0,0 +1,49 @@
+@import '../common';
+
+.oo-ui-popupWidget {
+ position: absolute;
+ /* @noflip */
+ left: 0;
+
+ &-popup {
+ position: relative;
+ overflow: hidden;
+ z-index: 1;
+ }
+
+ &-anchor {
+ display: none;
+ z-index: 1;
+ }
+
+ &-anchored {
+ .oo-ui-popupWidget-anchor {
+ display: block;
+ position: absolute;
+ top: 0;
+ /* @noflip */
+ left: 0;
+ background-repeat: no-repeat;
+ }
+ }
+
+ &-head {
+ .oo-ui-unselectable();
+
+ .oo-ui-buttonWidget {
+ float: right;
+ }
+
+ .oo-ui-labelElement-label {
+ float: left;
+ cursor: default;
+ }
+ }
+
+ &-body {
+ clear: both;
+ overflow: hidden;
+ }
+
+ .theme-oo-ui-popupWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ProgressBarWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ProgressBarWidget.less
new file mode 100644
index 00000000..82993fc1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ProgressBarWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-progressBarWidget {
+ .theme-oo-ui-progressBarWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/RadioInputWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/RadioInputWidget.less
new file mode 100644
index 00000000..7b75f871
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/RadioInputWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-radioInputWidget {
+ .theme-oo-ui-radioInputWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/RadioOptionWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/RadioOptionWidget.less
new file mode 100644
index 00000000..9a83997a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/RadioOptionWidget.less
@@ -0,0 +1,13 @@
+@import '../common';
+
+.oo-ui-radioOptionWidget {
+ cursor: default;
+
+ .oo-ui-radioInputWidget,
+ &.oo-ui-labelElement .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ .theme-oo-ui-radioOptionWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/RadioSelectWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/RadioSelectWidget.less
new file mode 100644
index 00000000..f6900cb6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/RadioSelectWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-radioSelectWidget {
+ .theme-oo-ui-radioSelectWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/SearchWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/SearchWidget.less
new file mode 100644
index 00000000..920beacf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/SearchWidget.less
@@ -0,0 +1,25 @@
+@import '../common';
+
+.oo-ui-searchWidget {
+ &-query {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+
+ .oo-ui-textInputWidget {
+ width: 100%;
+ }
+ }
+
+ &-results {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
+ }
+
+ .theme-oo-ui-searchWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/SelectWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/SelectWidget.less
new file mode 100644
index 00000000..2ad0b943
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/SelectWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-selectWidget {
+ .theme-oo-ui-selectWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/TabOptionWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/TabOptionWidget.less
new file mode 100644
index 00000000..0b83154c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/TabOptionWidget.less
@@ -0,0 +1,8 @@
+@import '../common';
+
+.oo-ui-tabOptionWidget {
+ display: inline-block;
+ vertical-align: bottom;
+
+ .theme-oo-ui-tabOptionWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/TabSelectWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/TabSelectWidget.less
new file mode 100644
index 00000000..b3a57c98
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/TabSelectWidget.less
@@ -0,0 +1,9 @@
+@import '../common';
+
+.oo-ui-tabSelectWidget {
+ text-align: left;
+ white-space: nowrap;
+ overflow: hidden;
+
+ .theme-oo-ui-tabSelectWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/TextInputMenuSelectWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/TextInputMenuSelectWidget.less
new file mode 100644
index 00000000..6edc474b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/TextInputMenuSelectWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-textInputMenuSelectWidget {
+ .theme-oo-ui-textInputMenuSelectWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/TextInputWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/TextInputWidget.less
new file mode 100644
index 00000000..dd0cdf46
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/TextInputWidget.less
@@ -0,0 +1,71 @@
+@import '../common';
+
+.oo-ui-textInputWidget {
+ position: relative;
+ // Necessary for proper alignment when used with display: inline-block
+ vertical-align: middle;
+ .oo-ui-box-sizing(border-box);
+
+ input,
+ textarea {
+ display: inline-block;
+ width: 100%;
+ resize: none;
+ .oo-ui-box-sizing(border-box);
+ }
+
+ > .oo-ui-iconElement-icon,
+ > .oo-ui-indicatorElement-indicator,
+ > .oo-ui-labelElement-label {
+ display: none;
+ }
+
+ &.oo-ui-iconElement > .oo-ui-iconElement-icon,
+ &.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
+ display: block;
+ position: absolute;
+ top: 0;
+ height: 100%;
+ background-repeat: no-repeat;
+
+ .oo-ui-unselectable();
+ }
+
+ &.oo-ui-widget-enabled {
+ > .oo-ui-iconElement-icon,
+ > .oo-ui-indicatorElement-indicator {
+ cursor: pointer;
+ }
+ }
+
+ &.oo-ui-labelElement > .oo-ui-labelElement-label {
+ display: block;
+ }
+
+ > .oo-ui-iconElement-icon {
+ left: 0;
+ }
+
+ > .oo-ui-indicatorElement-indicator {
+ right: 0;
+ }
+
+ > .oo-ui-labelElement-label {
+ position: absolute;
+ top: 0;
+ }
+
+ &-labelPosition-after {
+ > .oo-ui-labelElement-label {
+ right: 0
+ }
+ }
+
+ &-labelPosition-before {
+ > .oo-ui-labelElement-label {
+ left: 0
+ }
+ }
+
+ .theme-oo-ui-textInputWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ToggleButtonWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ToggleButtonWidget.less
new file mode 100644
index 00000000..5441e4e8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ToggleButtonWidget.less
@@ -0,0 +1,8 @@
+@import '../common';
+
+.oo-ui-toggleButtonWidget {
+ display: inline-block;
+ vertical-align: middle;
+
+ .theme-oo-ui-toggleButtonWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ToggleSwitchWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ToggleSwitchWidget.less
new file mode 100644
index 00000000..f030cf66
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ToggleSwitchWidget.less
@@ -0,0 +1,41 @@
+@import '../common';
+
+.oo-ui-toggleSwitchWidget {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ overflow: hidden;
+ cursor: pointer;
+
+ .oo-ui-box-sizing(border-box);
+ .oo-ui-transform(translateZ(0px));
+
+ &.oo-ui-widget-disabled {
+ cursor: default;
+ }
+
+ &-grip {
+ position: absolute;
+ display: block;
+
+ .oo-ui-box-sizing(border-box);
+ }
+
+ .oo-ui-toggleSwitchWidget-glow {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+
+ .oo-ui-unselectable();
+ }
+
+ .oo-ui-toggleWidget-off & {
+ &-glow {
+ display: none;
+ }
+ }
+
+ .theme-oo-ui-toggleSwitchWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/styles/widgets/ToggleWidget.less b/vendor/oojs/oojs-ui/src/styles/widgets/ToggleWidget.less
new file mode 100644
index 00000000..f51e45b5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/styles/widgets/ToggleWidget.less
@@ -0,0 +1,5 @@
+@import '../common';
+
+.oo-ui-toggleWidget {
+ .theme-oo-ui-toggleWidget();
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/ApexTheme.js b/vendor/oojs/oojs-ui/src/themes/apex/ApexTheme.js
new file mode 100644
index 00000000..157dfb64
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/ApexTheme.js
@@ -0,0 +1,18 @@
+/**
+ * @class
+ * @extends OO.ui.Theme
+ *
+ * @constructor
+ */
+OO.ui.ApexTheme = function OoUiApexTheme() {
+ // Parent constructor
+ OO.ui.ApexTheme.super.call( this );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ApexTheme, OO.ui.Theme );
+
+/* Instantiation */
+
+OO.ui.theme = new OO.ui.ApexTheme();
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/common.less b/vendor/oojs/oojs-ui/src/themes/apex/common.less
new file mode 100644
index 00000000..74dd3a3b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/common.less
@@ -0,0 +1,27 @@
+// Base variables and mixins
+@import '../../styles/common';
+
+// Theme variables
+
+@progressive: #087ecc;
+@constructive: #76ab36;
+@destructive: #d45353;
+
+@progressive-gradient-start: #eaf4fa;
+@progressive-gradient-end: #b0d9ee;
+@progressive-border: #a6cee1;
+@progressive-border-selected: #9dc2d4;
+
+@constructive-gradient-start: #f0fbe1;
+@constructive-gradient-end: #c3e59a;
+@constructive-border: #b8d892;
+@constructive-border-selected: #adcb89;
+
+@oo-ui-default-image-path: 'themes/apex/images';
+
+@icon-size: unit(24 / 16 / 0.8, em);
+@indicator-size: unit(12 / 16 / 0.8, em);
+
+// Theme mixins
+
+// (add mixins here)
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/core.less b/vendor/oojs/oojs-ui/src/themes/apex/core.less
new file mode 100644
index 00000000..1c83a946
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/core.less
@@ -0,0 +1,12 @@
+// Base and theme variables and mixins
+@import 'common';
+
+// Theme rules
+@import 'elements';
+@import 'layouts';
+@import 'tools';
+@import 'widgets';
+@import 'windows';
+
+// Base rules
+@import '../../styles/core';
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/elements.less b/vendor/oojs/oojs-ui/src/themes/apex/elements.less
new file mode 100644
index 00000000..bfd11228
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/elements.less
@@ -0,0 +1,247 @@
+@import 'common';
+
+.theme-oo-ui-element () {}
+
+.theme-oo-ui-buttonElement () {
+ > .oo-ui-buttonElement-button {
+ color: #333;
+ }
+
+ &.oo-ui-iconElement > .oo-ui-buttonElement-button {
+ > .oo-ui-iconElement-icon {
+ margin-left: 0;
+ }
+ }
+
+ &.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+ > .oo-ui-indicatorElement-indicator {
+ width: @indicator-size;
+ height: @indicator-size;
+ margin: @indicator-size / 2;
+ }
+ }
+
+ &.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-left: @indicator-size / 2;
+ }
+ &.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ width: @icon-size;
+ height: @icon-size;
+ }
+
+ &-frameless {
+ > .oo-ui-buttonElement-button {
+ > .oo-ui-iconElement-icon {
+ /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
+ /*.oo-ui-transition(opacity 200ms);*/
+ }
+
+ &:hover,
+ &:focus {
+ outline: none;
+
+ > .oo-ui-iconElement-icon {
+ opacity: 1;
+ }
+ > .oo-ui-labelElement-label {
+ color: #000;
+ }
+ }
+
+ > .oo-ui-labelElement-label {
+ color: #333;
+ }
+ }
+
+ &.oo-ui-labelElement {
+ > .oo-ui-buttonElement-button {
+ > .oo-ui-labelElement-label {
+ margin-left: 0.25em;
+ }
+ }
+ }
+
+ &.oo-ui-flaggedElement {
+ &-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: @progressive;
+ }
+
+ &-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: @constructive;
+ }
+
+ &-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: @destructive;
+ }
+ }
+
+ &.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ > .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ > .oo-ui-labelElement-label {
+ color: #ccc;
+ }
+ }
+ }
+
+ &-framed {
+ > .oo-ui-buttonElement-button {
+ margin: 0.1em 0;
+ padding: 0.2em 0.8em;
+ border-radius: 0.3em;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+ border: 1px #c9c9c9 solid;
+ .oo-ui-transition(border-color 100ms ease-in-out);
+ .oo-ui-vertical-gradient(#fff, #ddd);
+
+ &:hover,
+ &:focus {
+ border-color: #aaa;
+ outline: none;
+ }
+ }
+
+ // Support <input/> from ButtonInputWidget
+ > input.oo-ui-buttonElement-button,
+ &.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ line-height: @icon-size;
+ }
+
+ &.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+ &.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+ color: black;
+ border-color: #c9c9c9;
+ .oo-ui-vertical-gradient(#ddd, #fff);
+ }
+
+ &.oo-ui-iconElement {
+ > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: -0.5em;
+ margin-right: -0.5em;
+ }
+
+ &.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-right: 0.3em;
+ }
+ }
+
+ &.oo-ui-indicatorElement {
+ > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ /* -0.5 - 0.475 */
+ margin-left: -0.005em;
+ margin-right: -0.005em;
+ }
+
+ &.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+ &.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-left: @indicator-size / 2;
+ margin-right: -0.275em;
+ }
+ }
+
+ &.oo-ui-flaggedElement {
+ &-progressive {
+ > .oo-ui-buttonElement-button {
+ border: 1px solid @progressive-border;
+ .oo-ui-vertical-gradient(@progressive-gradient-start, @progressive-gradient-end);
+
+ &:hover,
+ &:focus {
+ border-color: @progressive-border-selected;
+ }
+ }
+
+ &.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+ &.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ border: 1px solid @progressive-border;
+ .oo-ui-vertical-gradient(@progressive-gradient-end, @progressive-gradient-start);
+ }
+ }
+
+ &-constructive {
+ > .oo-ui-buttonElement-button {
+ border: 1px solid @constructive-border;
+ .oo-ui-vertical-gradient(@constructive-gradient-start, @constructive-gradient-end);
+
+ &:hover,
+ &:focus {
+ border-color: @constructive-border-selected;
+ }
+ }
+
+ &.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active,
+ &.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ border: 1px solid @constructive-border;
+ .oo-ui-vertical-gradient(@constructive-gradient-end, @constructive-gradient-start);
+ }
+ }
+
+ &-destructive > .oo-ui-buttonElement-button {
+ color: @destructive;
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ > .oo-ui-buttonElement-button,
+ &.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ opacity: 0.5;
+ // Opacity causes 1px measurement errors in Chrome, so force GPU rendering
+ .oo-ui-force-webkit-gpu();
+ box-shadow: none;
+ color: #333;
+ background: #eee;
+ border-color: #ccc;
+
+ &:hover,
+ &:focus {
+ border-color: #ccc;
+ box-shadow: none;
+ }
+ }
+ }
+ }
+}
+
+.theme-oo-ui-clippableElement () {}
+
+.theme-oo-ui-flaggedElement () {}
+
+.theme-oo-ui-draggableElement () {}
+
+.theme-oo-ui-groupElement () {}
+
+.theme-oo-ui-draggableGroupElement () {}
+
+.theme-oo-ui-iconElement () {
+ .oo-ui-iconElement-icon,
+ &.oo-ui-iconElement-icon {
+ opacity: 0.8;
+ background-size: contain;
+ background-position: center center;
+ }
+}
+
+.theme-oo-ui-indicatorElement () {
+ .oo-ui-indicatorElement-indicator,
+ &.oo-ui-indicatorElement-indicator {
+ opacity: 0.8;
+ background-size: contain;
+ background-position: center center;
+ }
+}
+
+.theme-oo-ui-labelElement () {}
+
+.theme-oo-ui-lookupElement () {}
+
+.theme-oo-ui-popupElement () {}
+
+.theme-oo-ui-tabIndexedElement () {}
+
+.theme-oo-ui-titledElement () {}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-advanced.json b/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-advanced.json
new file mode 100644
index 00000000..8fdc5051
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-advanced.json
@@ -0,0 +1,75 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "alignCentre": { "file": "images/icons/align-center.svg" },
+ "alignLeft": { "file": "images/icons/align-float-left.svg" },
+ "alignRight": { "file": "images/icons/align-float-right.svg" },
+ "find": { "file": {
+ "ltr": "images/icons/find-ltr.svg",
+ "rtl": "images/icons/find-rtl.svg"
+ } },
+ "insert": { "file": "images/icons/insert.svg" },
+ "layout": { "file": {
+ "ltr": "images/icons/layout-ltr.svg",
+ "rtl": "images/icons/layout-rtl.svg"
+ } },
+ "newline": { "file": {
+ "ltr": "images/icons/newline-ltr.svg",
+ "rtl": "images/icons/newline-rtl.svg"
+ } },
+ "redirect": { "file": {
+ "ltr": "images/icons/redirect-ltr.svg",
+ "rtl": "images/icons/redirect-rtl.svg"
+ } },
+ "noWikiText": { "file": {
+ "ltr": "images/icons/noWikiText-ltr.svg",
+ "rtl": "images/icons/noWikiText-rtl.svg"
+ } },
+ "outline": { "file": {
+ "ltr": "images/icons/outline-ltr.svg",
+ "rtl": "images/icons/outline-rtl.svg"
+ } },
+ "puzzle": { "file": {
+ "ltr": "images/icons/puzzle-ltr.svg",
+ "rtl": "images/icons/puzzle-rtl.svg"
+ } },
+ "quotes": { "file": {
+ "ltr": "images/icons/quotes-ltr.svg",
+ "rtl": "images/icons/quotes-rtl.svg"
+ } },
+ "quotesAdd": { "file": {
+ "ltr": "images/icons/quotesAdd-ltr.svg",
+ "rtl": "images/icons/quotesAdd-rtl.svg"
+ } },
+ "redirect": { "file": {
+ "ltr": "images/icons/redirect-ltr.svg",
+ "rtl": "images/icons/redirect-rtl.svg"
+ } },
+ "searchCaseSensitive": { "file": "images/icons/case-sensitive.svg" },
+ "searchRegularExpression": { "file": "images/icons/regular-expression.svg" },
+ "specialCharacter": { "file": "images/icons/specialCharacter.svg" },
+ "table": { "file": "images/icons/table.svg" },
+ "tableAddColumnAfter": { "file": {
+ "ltr": "images/icons/table-insert-column-rtl.svg",
+ "rtl": "images/icons/table-insert-column-ltr.svg"
+ } },
+ "tableAddColumnBefore": { "file": {
+ "ltr": "images/icons/table-insert-column-ltr.svg",
+ "rtl": "images/icons/table-insert-column-rtl.svg"
+ } },
+ "tableAddRowAfter": { "file": "images/icons/table-insert-row-after.svg" },
+ "tableAddRowBefore": { "file": "images/icons/table-insert-row-before.svg" },
+ "tableCaption": { "file": "images/icons/table-caption.svg" },
+ "tableMergeCells": { "file": "images/icons/table-merge-cells.svg" },
+ "templateAdd": { "file": {
+ "ltr": "images/icons/templateAdd-ltr.svg",
+ "rtl": "images/icons/templateAdd-rtl.svg"
+ } },
+ "translation": { "file": {
+ "ltr": "images/icons/translation-ltr.svg",
+ "rtl": "images/icons/translation-rtl.svg"
+ } },
+ "wikiText": { "file": "images/icons/wikiText.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-core.json b/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-core.json
new file mode 100644
index 00000000..95e8358e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-core.json
@@ -0,0 +1,24 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "edit": { "file": {
+ "ltr": "images/icons/edit-ltr.svg",
+ "rtl": "images/icons/edit-rtl.svg"
+ } },
+ "editLock": { "file": {
+ "ltr": "images/icons/editLock-ltr.svg",
+ "rtl": "images/icons/editLock-rtl.svg"
+ } },
+ "editUndo": { "file": {
+ "ltr": "images/icons/editUndo-ltr.svg",
+ "rtl": "images/icons/editUndo-rtl.svg"
+ } },
+ "link": { "file": "images/icons/link.svg" },
+ "linkExternal": { "file": {
+ "ltr": "images/icons/external-link-ltr.svg",
+ "rtl": "images/icons/external-link-rtl.svg"
+ } },
+ "linkSecure": { "file": "images/icons/secure-link.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-list.json b/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-list.json
new file mode 100644
index 00000000..490f8faf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-list.json
@@ -0,0 +1,22 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "indent": { "file": {
+ "ltr": "images/icons/indent-ltr.svg",
+ "rtl": "images/icons/indent-rtl.svg"
+ } },
+ "listBullet": { "file": {
+ "ltr": "images/icons/listBullet-ltr.svg",
+ "rtl": "images/icons/listBullet-rtl.svg"
+ } },
+ "listNumbered": { "file": {
+ "ltr": "images/icons/listNumbered-ltr.svg",
+ "rtl": "images/icons/listNumbered-rtl.svg"
+ } },
+ "outdent": { "file": {
+ "ltr": "images/icons/outdent-ltr.svg",
+ "rtl": "images/icons/outdent-rtl.svg"
+ } }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-styling.json b/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-styling.json
new file mode 100644
index 00000000..65fbc218
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/icons-editing-styling.json
@@ -0,0 +1,72 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "bigger": { "file": {
+ "ltr": "images/icons/bigger-ltr.svg",
+ "rtl": "images/icons/bigger-rtl.svg"
+ } },
+ "smaller": { "file": {
+ "ltr": "images/icons/smaller-ltr.svg",
+ "rtl": "images/icons/smaller-rtl.svg"
+ } },
+ "subscript": { "file": {
+ "ltr": "images/icons/subscript-ltr.svg",
+ "rtl": "images/icons/subscript-rtl.svg"
+ } },
+ "superscript": { "file": {
+ "ltr": "images/icons/superscript-ltr.svg",
+ "rtl": "images/icons/superscript-rtl.svg"
+ } },
+ "bold": { "file": {
+ "default": "images/icons/bold-a.svg",
+ "lang": {
+ "ar": "images/icons/bold-arab-ain.svg",
+ "be": "images/icons/bold-cyrl-te.svg",
+ "cs,en,he,ml,pl": "images/icons/bold-b.svg",
+ "da,de,hu,ksh,nn,no,sv": "images/icons/bold-f.svg",
+ "es,gl,pt": "images/icons/bold-n.svg",
+ "eu,fi": "images/icons/bold-l.svg",
+ "fa": "images/icons/bold-arab-dad.svg",
+ "fr,it": "images/icons/bold-g.svg",
+ "hy": "images/icons/bold-armn-to.svg",
+ "ka": "images/icons/bold-geor-man.svg",
+ "ky,ru": "images/icons/bold-cyrl-zhe.svg",
+ "nl": "images/icons/bold-v.svg",
+ "os": "images/icons/bold-cyrl-be.svg"
+ }
+ } },
+ "italic": { "file": {
+ "default": "images/icons/italic-a.svg",
+ "lang": {
+ "ar": "images/icons/italic-arab-meem.svg",
+ "cs,en,fr,he,ml,pl,pt": "images/icons/italic-i.svg",
+ "be,da,de,fi,ky,nn,no,os,sv,ru": "images/icons/italic-k.svg",
+ "es,gl,it,nl": "images/icons/italic-c.svg",
+ "eu": "images/icons/italic-e.svg",
+ "fa": "images/icons/italic-arab-keheh-jeem.svg",
+ "hu": "images/icons/italic-d.svg",
+ "hy": "images/icons/italic-armn-sha.svg",
+ "ksh": "images/icons/italic-s.svg",
+ "ka": "images/icons/italic-geor-kan.svg"
+ }
+ } },
+ "strikethrough": { "file": {
+ "default": "images/icons/strikethrough-a.svg",
+ "lang": {
+ "en": "images/icons/strikethrough-s.svg",
+ "fi": "images/icons/strikethrough-y.svg"
+ }
+ } },
+ "underline": { "file": {
+ "default": "images/icons/underline-a.svg",
+ "lang": {
+ "en": "images/icons/underline-u.svg"
+ }
+ } },
+ "textLanguage": { "file": "images/icons/language.svg" },
+ "textDirLTR": { "file": "images/icons/text-dir-lefttoright.svg" },
+ "textDirRTL": { "file": "images/icons/text-dir-righttoleft.svg" },
+ "textStyle": { "file": "images/icons/text-style.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/icons-moderation.json b/vendor/oojs/oojs-ui/src/themes/apex/icons-moderation.json
new file mode 100644
index 00000000..f904cc26
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/icons-moderation.json
@@ -0,0 +1,33 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "block": { "file": "images/icons/block.svg" },
+ "blockUndo": { "file": {
+ "ltr": "images/icons/blockUndo-ltr.svg",
+ "rtl": "images/icons/blockUndo-rtl.svg"
+ } },
+ "flag": { "file": {
+ "ltr": "images/icons/flag-ltr.svg",
+ "rtl": "images/icons/flag-rtl.svg"
+ } },
+ "flagUndo": { "file": {
+ "ltr": "images/icons/flagUndo-ltr.svg",
+ "rtl": "images/icons/flagUndo-rtl.svg"
+ } },
+ "lock": { "file": "images/icons/lock.svg" },
+ "star": { "file": "images/icons/star.svg" },
+ "trash": { "file": "images/icons/trash.svg" },
+ "trashUndo": { "file": {
+ "ltr": "images/icons/trashUndo-ltr.svg",
+ "rtl": "images/icons/trashUndo-rtl.svg"
+ } },
+ "unLock": { "file": {
+ "ltr": "images/icons/unLock-ltr.svg",
+ "rtl": "images/icons/unLock-rtl.svg"
+ } },
+ "unStar": { "file": "images/icons/unStar.svg" }
+
+
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/icons-movement.json b/vendor/oojs/oojs-ui/src/themes/apex/icons-movement.json
new file mode 100644
index 00000000..9aa1b809
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/icons-movement.json
@@ -0,0 +1,27 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "arrowNext": { "file": {
+ "ltr": "images/icons/arrow-ltr.svg",
+ "rtl": "images/icons/arrow-rtl.svg"
+ } },
+ "arrowLast": { "file": {
+ "ltr": "images/icons/arrow-rtl.svg",
+ "rtl": "images/icons/arrow-ltr.svg"
+ } },
+ "caretNext": { "file": {
+ "ltr": "images/icons/caret-rtl.svg",
+ "rtl": "images/icons/caret-ltr.svg"
+ } },
+ "caretLast": { "file": {
+ "ltr": "images/icons/caret-ltr.svg",
+ "rtl": "images/icons/caret-rtl.svg"
+ } },
+ "caretDown": { "file": "images/icons/caretDown.svg" },
+ "caretUp": { "file": "images/icons/caretUp.svg" },
+ "downTriangle": { "file": "images/icons/downTriangle.svg" },
+ "move": { "file": "images/icons/move.svg" },
+ "upTriangle": { "file": "images/icons/upTriangle.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/icons.json b/vendor/oojs/oojs-ui/src/themes/apex/icons.json
new file mode 100644
index 00000000..9372363f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/icons.json
@@ -0,0 +1,50 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "circle": { "file": "images/icons/circle.svg" },
+ "add": { "file": "images/icons/add.svg" },
+ "advanced": { "file": "images/icons/advanced.svg" },
+ "cancel": { "file": "images/icons/cancel.svg" },
+ "alert": { "file": "images/icons/alert.svg" },
+ "check": { "file": "images/icons/check.svg" },
+ "close": { "file": "images/icons/close.svg" },
+ "code": { "file": "images/icons/code.svg" },
+ "collapse": { "file": "images/icons/collapse.svg" },
+ "comment": { "file": "images/icons/comment.svg" },
+ "ellipsis": { "file": "images/icons/ellipsis.svg" },
+ "expand": { "file": "images/icons/expand.svg" },
+ "help": { "file": {
+ "ltr": "images/icons/help-ltr.svg",
+ "rtl": "images/icons/help-rtl.svg",
+ "lang": {
+ "he,yi": "images/icons/help-ltr.svg"
+ }
+ } },
+ "history": { "file": "images/icons/history.svg" },
+ "info": { "file": "images/icons/info.svg" },
+ "menu": { "file": "images/icons/menu.svg" },
+ "next": { "file": {
+ "ltr": "images/icons/move-ltr.svg",
+ "rtl": "images/icons/move-rtl.svg"
+ } },
+ "picture": { "file": "images/icons/picture.svg" },
+ "previous": { "file": {
+ "ltr": "images/icons/move-rtl.svg",
+ "rtl": "images/icons/move-ltr.svg"
+ } },
+ "redo": { "file": {
+ "ltr": "images/icons/arched-arrow-ltr.svg",
+ "rtl": "images/icons/arched-arrow-rtl.svg"
+ } },
+ "remove": { "file": "images/icons/remove.svg" },
+ "search": { "file": "images/icons/search.svg" },
+ "settings": { "file": "images/icons/settings.svg" },
+ "tag": { "file": "images/icons/tag.svg" },
+ "undo": { "file": {
+ "ltr": "images/icons/arched-arrow-rtl.svg",
+ "rtl": "images/icons/arched-arrow-ltr.svg"
+ } },
+ "window": { "file": "images/icons/window.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/add.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/add.svg
new file mode 100644
index 00000000..29e5dba8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/add.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="add">
+ <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/advanced.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/advanced.svg
new file mode 100644
index 00000000..201b4d73
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/advanced.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="settings">
+ <path id="gear" d="M20.869 13.476c.079-.482.131-.972.131-1.476s-.052-.994-.131-1.476l-2.463-.259c-.149-.556-.367-1.082-.648-1.57l1.558-1.924c-.576-.806-1.281-1.511-2.087-2.087l-1.924 1.558c-.488-.281-1.015-.499-1.57-.648l-.259-2.463c-.482-.079-.972-.131-1.476-.131s-.994.052-1.476.131l-.259 2.463c-.555.149-1.081.367-1.57.648l-1.924-1.557c-.805.576-1.51 1.281-2.086 2.086l1.558 1.924c-.281.488-.499 1.015-.648 1.57l-2.463.259c-.08.482-.132.972-.132 1.476s.052.994.131 1.476l2.463.259c.149.556.367 1.082.648 1.57l-1.558 1.924c.576.806 1.281 1.511 2.087 2.087l1.924-1.558c.488.281 1.015.499 1.57.648l.259 2.463c.482.079.972.131 1.476.131s.994-.052 1.476-.131l.259-2.463c.556-.149 1.082-.367 1.57-.648l1.924 1.558c.806-.576 1.511-1.281 2.087-2.087l-1.558-1.924c.281-.488.499-1.015.648-1.57l2.463-.259zm-8.869 2.522c-2.209 0-3.998-1.789-3.998-3.998s1.789-3.998 3.998-3.998 3.998 1.789 3.998 3.998-1.789 3.998-3.998 3.998z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/alert.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/alert.svg
new file mode 100644
index 00000000..f0c65224
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/alert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="alert">
+ <path id="point" d="M11 16h2v2h-2z"/>
+ <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
+ <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-center.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-center.svg
new file mode 100644
index 00000000..887c2f66
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-center.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="align-center">
+ <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-left.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-left.svg
new file mode 100644
index 00000000..ce9761e2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-left.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="align-float-left">
+ <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM13.5 9h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 12h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 15h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-right.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-right.svg
new file mode 100644
index 00000000..557692ae
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/align-float-right.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="align-float-right">
+ <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zM10.5 9h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 12h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 15h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 6h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 18h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-ltr.svg
new file mode 100644
index 00000000..8a670ef2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="arched-arrow-ltr">
+ <path id="arrow" d="M19.925 14.937l-2.391-6.901-1.48 2.329c-.964-.845-2.699-1.85-5.513-1.823-4.887.046-6.524 4.244-6.524 4.244s2.753-2.639 6.925-1.949c1.729.286 3.007 1.206 3.675 1.791l-1.474 2.319 6.782-.01z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-rtl.svg
new file mode 100644
index 00000000..01fc216b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arched-arrow-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="arched-arrow-rtl">
+ <path id="arrow" d="M13.401 8.542c-2.814-.027-4.549.978-5.513 1.823l-1.48-2.329-2.391 6.901 6.782.009-1.474-2.319c.668-.584 1.945-1.504 3.675-1.791 4.172-.69 6.925 1.949 6.925 1.949s-1.637-4.197-6.524-4.243z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-ltr.svg
new file mode 100644
index 00000000..b07621e8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M16 12h-10c-1.7 0-3 1.3-3 3h13v3l5-4.5-5-4.5v3z" id="path6"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-rtl.svg
new file mode 100644
index 00000000..a0189283
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/arrow-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M8 12h10c1.7 0 3 1.3 3 3h-13v3l-5-4.5 5-4.5v3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-ltr.svg
new file mode 100644
index 00000000..94ec6704
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-ltr.svg
@@ -0,0 +1,7 @@
+<?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="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z" id="a"/>
+ <g id="up">
+ <path id="arrow" d="M15.5 9h7l-3.5-6z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-rtl.svg
new file mode 100644
index 00000000..b2a6c139
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bigger-rtl.svg
@@ -0,0 +1,7 @@
+<?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="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
+ <g id="up">
+ <path id="arrow" d="M1.5 9h7L5 3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/block.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/block.svg
new file mode 100644
index 00000000..0ddd1d47
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/block.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-ltr.svg
new file mode 100644
index 00000000..3d9cfd7d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g66">
+ <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4l5.6 5.6h4zm-13-7l-1 1 2.4 2.4c-.9 1.3-1.4 2.9-1.4 4.6 0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4l2.4 2.4 1-1-16-16zm3 9v-2h2l2 2h-4z" id="path68"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-rtl.svg
new file mode 100644
index 00000000..8f807596
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/blockUndo-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g66">
+ <path d="M7 11v2h2l-3.6 3.6c-.9-1.3-1.4-2.9-1.4-4.6 0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4l-5.6 5.6h-4zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4l-2.4 2.4-1-1 16-16zm-3 9v-2h-2l-2 2h4z" id="path68"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-a.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-a.svg
new file mode 100644
index 00000000..4b828779
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-a.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-a">
+ <path d="M16 18h3l-5-12h-3l-5 12h3l1.25-3h4.5l1.25 3zm-4.917-5l1.417-3.4 1.417 3.4h-2.834z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-ain.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-ain.svg
new file mode 100644
index 00000000..f96cebce
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-ain.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-arab-ain">
+ <path id="arab-ain" d="M9.337 13.616c0 1.349 1.386 2.101 4.159 2.258l2.187-.029.318.044c-.03.127-.251.345-.665.652l-.089.066c-1.236.929-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.711-.99-.65-.66-.975-1.559-.975-2.698.005-1.354.566-2.573 1.684-3.658v-.044l-.606-.55c-.148-.181-.222-.391-.222-.63 0-.489.239-1.109.717-1.862.65-1.046 1.303-1.566 1.958-1.561.886.005 1.618.42 2.194 1.246.325.479-.03.552-1.064.22-.842-.327-1.527-.051-2.054.828l.015.073 1.123.865.052.007c1.404-.498 2.418-.74 3.043-.726-.059.117-.14.362-.244.733-.103.357-.204.684-.303.982l-.126.374-.384.051c-1.743.239-2.992.716-3.745 1.429-.463.464-.697.973-.702 1.525"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-dad.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-dad.svg
new file mode 100644
index 00000000..f04c6aad
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-arab-dad.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-arab-dad">
+ <path id="arab-dad" d="M16.411 8.232l-1.676-.665.694-1.567 1.688.64-.707 1.592m.775 3.078c-.509-.286-1-.427-1.476-.423-.471 0-.982.205-1.532.616l-.506.379.006.025c1.084.066 1.934.099 2.551.099h.313c.567-.021.992-.064 1.276-.131-.067-.17-.275-.359-.625-.566h-.006m-6.803 3.296c-.017-.904-.329-1.87-.938-2.898l1.294-1.729.119.149c.267.336.504.924.713 1.766l.063.05c.496-.008.942-.17 1.338-.485v-.006l1.732-1.53c.679-.601 1.282-.902 1.807-.902.383.004.848.195 1.394.572.55.377.884.696 1 .958.063.149.094.386.094.709 0 .696-.11 1.229-.331 1.598-.192.311-.473.555-.844.734-.438.207-1.549.311-3.333.311-.8 0-1.795-.021-2.983-.062l-.144.429c-.254.672-.463 1.113-.625 1.324-.725.937-1.786 1.405-3.183 1.405-1.705-.008-2.557-.922-2.557-2.742.004-.941.279-1.814.825-2.618.15-.216.298-.367.444-.454.225-.133.288-.091.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-armn-to.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-armn-to.svg
new file mode 100644
index 00000000..4dbec6d9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-armn-to.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-armn-to">
+ <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.058.257-.15.367-.274.114-.13.205-.302.273-.516.073-.213.11-.48.11-.797V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.218.175.395.29.53.12.136.247.232.383.29.14.05.276.077.406.077m-2.97-7.84c-.37.082-.695.247-.976.45-.28.198-.505.47-.672.813-.16.343-.242.78-.242 1.312V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.348.49.738.64 1.17.15.433.226 1.094.226 1.61h1.353v2.04H17.78v1.6c0 .58-.103 1.092-.31 1.54-.21.442-.49.815-.845 1.117-.35.302-.834.53-1.297.687-.464.15-.953.226-1.47.226-.51 0-.996-.078-1.46-.234-.464-.156-.87-.39-1.22-.703-.348-.313-.626-.703-.835-1.172-.203-.473-.304-1.028-.304-1.663s.105-1.182.32-1.64c.213-.46.497-.685.85-.977.355-.297.76-.513 1.22-.648.458-.14.935-.21 1.43-.21h1.132c-.01-.49-.04-1.043-.242-1.36-.198-.323-.453-.58-.766-.766-.312-.193-.598-.332-.984-.426-.374-.09-.577-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-b.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-b.svg
new file mode 100644
index 00000000..4f648203
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-b.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-b">
+ <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.011-1.975-1.989-3 2-.975 1.989-1.935 1.989-3 0-2-2-3-4-3h-6v12zm7-8c0 1.001 0 1-2 1h-2v-3h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-be.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-be.svg
new file mode 100644
index 00000000..279466d4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-be.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-cyrl-be">
+ <path id="cyrl-be" d="M7 6h9v2h-6v3h2.649c.893 0 1.633.109 2.22.327.588.218 1.088.622 1.502 1.211.419.589.629 1.187.629 1.978 0 .813-.21 1.398-.629 1.977-.419.578-.898.974-1.437 1.187-.533.213-1.295.319-2.286.319h-5.649m4.767-2c.751 0 1.279-.049 1.584-.12.305-.076.569-.246.792-.508.229-.262.343-.473.343-.855 0-.557-.199-.868-.596-1.119-.392-.256-1.064-.398-2.016-.398h-1.873v3"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-te.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-te.svg
new file mode 100644
index 00000000..fdeeb6c5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-te.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-cyrl-te">
+ <path id="te" d="M11 18v-10h-4v-2h11v2h-4v10"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-zhe.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-zhe.svg
new file mode 100644
index 00000000..5996c813
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-cyrl-zhe.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-cyrl-zhe">
+ <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.181.705-.447.168-.266.401-.873.698-1.821.39-1.241.789-2.033 1.197-2.374.403-.336 1.075-.504 2.014-.504l.386-.008v1.78l-.386-.008c-.399 0-.691.062-.878.187-.186.119-.337.304-.452.553-.115.249-.286.762-.512 1.537-.12.412-.25.756-.392 1.033-.137.276-.383.537-.738.78.439.157.8.466 1.084.927.288.455.603 1.103.944 1.943l1.33 3.268h-2.314l-1.17-3.081-.113-.252-.239-.561c-.248-.569-.452-.932-.612-1.089-.16-.157-.317-.236-.552-.236v5.22h-2v-5.22c-.226 0-.382.076-.546.228-.164.152-.368.518-.612 1.098l-.246.561-.113.252-1.17 3.081h-2.314l1.33-3.268c.328-.808.636-1.447.924-1.919.293-.477.663-.794 1.11-.951-.355-.244-.603-.501-.745-.772-.137-.276-.268-.623-.392-1.041-.222-.759-.39-1.266-.505-1.52-.111-.255-.261-.444-.452-.569-.186-.125-.492-.187-.917-.187l-.352.008v-1.78l.386.008c.953 0 1.631.171 2.034.512.399.347.791 1.136 1.177 2.366.301.954.534 1.564.698 1.829.168.26.377.406.705.439v-5.154"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-f.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-f.svg
new file mode 100644
index 00000000..357d2e5d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-f.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-f">
+ <path id="f" d="M16 8v-2h-8v12h3v-5h4v-2h-4v-3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-g.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-g.svg
new file mode 100644
index 00000000..e032542e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-g.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-g">
+ <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.259-.941.359-1.896.538-2.864.538-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.257-2.282.77-3.222.513-.939 1.265-1.66 2.255-2.161.754-.385 1.693-.578 2.816-.578 1.46 0 2.6.303 3.418.91.824.602 1.353 1.435 1.589 2.501l-2.359.435c-.166-.57-.479-1.018-.939-1.346-.455-.332-1.024-.499-1.709-.499-1.038 0-1.864.325-2.479.974-.61.649-.915 1.612-.915 2.889 0 1.377.31 2.412.931 3.103.62.686 1.433 1.029 2.439 1.029.497 0 .995-.095 1.492-.285.503-.195 1.332-.571 1.691-.845v-.867"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-geor-man.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-geor-man.svg
new file mode 100644
index 00000000..b211bf7a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-geor-man.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-geor-man">
+ <path id="geor-man" d="M13.832 14.061c0-1.715-.394-2.573-1.182-2.573-.868 0-1.302.779-1.302 2.338-.01 1.624.421 2.436 1.295 2.436.793 0 1.189-.734 1.189-2.201m2.168 0c0 2.626-1.116 3.939-3.349 3.939-2.434 0-3.651-1.386-3.651-4.159 0-2.738 1.217-4.106 3.651-4.106.841 0 1.182.63 1.182.63v-1.579c0-.789-.449-1.184-1.347-1.184-.572 0-.858.374-.858 1.123h-2.341c.005-1.817 1.064-2.725 3.176-2.725 2.368 0 3.548.946 3.538 2.839"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-l.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-l.svg
new file mode 100644
index 00000000..16797938
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-l.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-l">
+ <path id="l" d="M8 18v-12h3v10h5v2"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-n.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-n.svg
new file mode 100644
index 00000000..73ad019a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-n.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-n">
+ <path id="n" d="M7 18v-12h3l4 8v-8h3v12h-3l-4-8v8h-3"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-v.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-v.svg
new file mode 100644
index 00000000..146943a5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/bold-v.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-v">
+ <path id="v" d="M10.5 18l-4.5-12h3l3 8 3-8h3l-4.5 12"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/cancel.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/cancel.svg
new file mode 100644
index 00000000..bfc1b44b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/cancel.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="cancel">
+ <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-ltr.svg
new file mode 100644
index 00000000..f31ec095
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 13.1l8.9 8.9c.8-.8.8-2 0-2.8l-6.1-6.1 6-6.1c.8-.8.8-2 0-2.8l-8.8 8.9z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-rtl.svg
new file mode 100644
index 00000000..02b4e387
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caret-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16.5 13.1l-8.9 8.9c-.8-.8-.8-2 0-2.8l6.1-6.1-6-6.1c-.8-.8-.8-2 0-2.8l8.8 8.9z" id="path108"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretDown.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretDown.svg
new file mode 100644
index 00000000..a04ca572
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretDown.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 16l8.9-8.9c-.8-.8-2-.8-2.8 0l-6.1 6.1-6.1-6c-.8-.8-2-.8-2.8 0l8.9 8.8z" id="path4"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretUp.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretUp.svg
new file mode 100644
index 00000000..d0e0c283
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/caretUp.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 6.5l8.9 8.9c-.8.8-2 .8-2.8 0l-6.1-6.1-6.1 6c-.8.8-2 .8-2.8 0l8.9-8.8z" id="path4"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/case-sensitive.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/case-sensitive.svg
new file mode 100644
index 00000000..824790c5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/case-sensitive.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="regular-expression">
+ <path id="upper-case" d="M 7.53125,7 4,17 l 2.0625,0 0.71875,-2.40625 3.625,0 L 11.125,17 13.1875,17 9.65625,7 7.53125,7 z M 8.59375,8.53125 9.9375,13 7.25,13 8.59375,8.53125 z" />
+ <path id="lower-case" d="m 18.548697,17 -0.183254,-1.035072 -0.05451,0 c -0.349771,0.440361 -0.710892,0.746796 -1.083366,0.919307 -0.367941,0.167972 -0.849436,0.251959 -1.444489,0.251959 -0.564328,0 -0.954665,-0.20883 -1.377109,-0.626492 -0.417903,-0.417659 -0.626854,-1.012371 -0.626853,-1.784137 -1e-6,-0.80808 0.281628,-1.402791 0.844889,-1.784137 0.567801,-0.385878 1.193222,-0.607062 2.208372,-0.640111 l 1.321843,-0.04086 0,-0.333674 c 0,-0.771759 -0.395195,-1.15764 -1.185571,-1.157647 -0.608688,7e-6 -1.324118,0.183867 -2.146293,0.551584 L 14.134181,9.9184512 c 0.876685,-0.4585114 1.848761,-0.6877705 2.916233,-0.6877783 1.022038,7.8e-6 1.586855,0.2224573 2.131951,0.6673492 C 19.727448,10.342928 20,11.019356 20,11.927309 l 0,5.073215 -1.451303,0 m -0.394476,-3.527417 -0.804008,0.02724 c -0.604145,0.01816 -1.053844,0.127119 -1.349098,0.326866 -0.29526,0.199753 -0.442889,0.503919 -0.442886,0.912498 -3e-6,0.585634 0.336136,0.878451 1.008417,0.878449 0.481492,2e-6 0.865326,-0.138462 1.151503,-0.415391 0.29071,-0.276925 0.436067,-0.644648 0.436072,-1.103169 l 0,-0.626491" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/check.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/check.svg
new file mode 100644
index 00000000..03e36607
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/check.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="check">
+ <path d="M7.105 13.473l1.422-1.423 1.901 1.902 4.81-6.952 1.657 1.148-6.26 8.852z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/circle.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/circle.svg
new file mode 100644
index 00000000..436259e5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/circle.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><circle cx="12" cy="12" r="6"></circle></svg>
diff --git a/resources/lib/oojs-ui/images/icons/close.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/close.svg
index 3c0ab46d..1345e867 100644
--- a/resources/lib/oojs-ui/images/icons/close.svg
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/close.svg
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="close" opacity=".75">
+ <g id="close">
<path id="x" d="M18.717 6.697l-1.414-1.414-5.303 5.303-5.303-5.303-1.414 1.414 5.303 5.303-5.303 5.303 1.414 1.414 5.303-5.303 5.303 5.303 1.414-1.414-5.303-5.303z"/>
</g>
</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/code.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/code.svg
new file mode 100644
index 00000000..32f140d9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/code.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+ <g id="code">
+ <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+ <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/collapse.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/collapse.svg
new file mode 100644
index 00000000..55aa8f8f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/collapse.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="collapse">
+ <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/comment.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/comment.svg
new file mode 100644
index 00000000..0ae7e63f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/comment.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="comment">
+ <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/downTriangle.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/downTriangle.svg
new file mode 100644
index 00000000..7bc1c228
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/downTriangle.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 18l8-10h-16z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-ltr.svg
new file mode 100644
index 00000000..3972e070
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_3">
+ <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-rtl.svg
new file mode 100644
index 00000000..978b2fd1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/edit-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_3">
+ <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-ltr.svg
new file mode 100644
index 00000000..7e376824
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_2">
+ <g id="g184">
+ <path d="M21 4v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-1.5 0h-3v-1s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zm-6.5 5.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9v-1.8l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-rtl.svg
new file mode 100644
index 00000000..0b4751d2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editLock-rtl.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_2">
+ <g id="g184">
+ <path d="M4 4v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm1.5 0h3v-1s0-1.5-1.5-1.5c-1.48.06-1.5 1.5-1.5 1.5zm6.5 5.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9v-1.8l9 9 1 5-5-1-8-8h3z" id="path186"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-ltr.svg
new file mode 100644
index 00000000..f346874e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g196">
+ <g id="g198">
+ <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3.5-6.8 1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
+ </g>
+ </g>
+ <g id="g204">
+ <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8h-1.8l-4.1 4.1-1 5 5-1 7.8-7.8-1.6-.1zm5.4-5.1c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-rtl.svg
new file mode 100644
index 00000000..5b59d452
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/editUndo-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g196">
+ <g id="g198">
+ <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3-.5-6.8-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
+ </g>
+ </g>
+ <g id="g204">
+ <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8l4.1 4.1 1 5-5-1-7.8-7.8 1.6-.1zm-5.4-5.1c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3-.9 1.4-4-4c0-.3.1-.7.2-1h.2z" id="path206"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/ellipsis.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/ellipsis.svg
new file mode 100644
index 00000000..dd36a30d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/ellipsis.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <g>
+ <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ <g>
+ <path d="M14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ <g>
+ <path d="M20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/expand.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/expand.svg
new file mode 100644
index 00000000..7666b41d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/expand.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="expand">
+ <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-ltr.svg
new file mode 100644
index 00000000..827bc1b1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="external">
+ <path id="box" d="M2 2h3v1h-2v6h6v-2h1v3h-8z"/>
+ <path id="arrow" d="M6.211 2h3.789v3.789l-1.421-1.421-2.132 2.132-.947-.947 2.132-2.132z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-rtl.svg
new file mode 100644
index 00000000..c375ca0f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/external-link-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="external">
+ <path id="box" d="M7 3h2v6h-6v-2h-1v3h8v-8h-3z"/>
+ <path id="arrow" d="M2 5.789l1.421-1.421 2.132 2.132.947-.947-2.132-2.132 1.421-1.421h-3.789z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-ltr.svg
new file mode 100644
index 00000000..f8578cf8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="find">
+ <path id="magnifying-glass" d="m 13.65625,11 c -1.921,0 -3.5,1.54775 -3.5,3.46875 0,1.92 1.579,3.5 3.5,3.5 0.749,0 1.432,-0.25225 2,-0.65625 l 0.09375,0.15625 2.375,2.375 c 0.19,0.189 0.53425,0.15325 0.78125,-0.09375 0.247,-0.247 0.314,-0.59125 0.125,-0.78125 l -2.375,-2.375 L 16.46875,16.5 C 16.87175,15.934 17.125,15.21775 17.125,14.46875 17.124,12.54875 15.57525,11 13.65625,11 z m 0,1.65625 c 1.011306,0 1.8125,0.801194 1.8125,1.8125 0,1.011306 -0.801194,1.84375 -1.8125,1.84375 -1.011306,0 -1.84375,-0.832444 -1.84375,-1.84375 0,-1.011306 0.832444,-1.8125 1.84375,-1.8125 z" />
+ <path id="text" d="M 6,5 6,7 16,7 16,5 6,5 z m 0,3 0,2 11,0 0,-2 -11,0 z m 0,3 0,2 3.53125,0 c 0.2825289,-0.797203 0.786096,-1.486208 1.4375,-2 L 6,11 z m 0,3 0,2 3.53125,0 C 9.3537004,15.520243 9.25,15.010236 9.25,14.46875 9.25,14.309811 9.2962033,14.154621 9.3125,14 L 6,14 z" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-rtl.svg
new file mode 100644
index 00000000..2a1e9c6f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/find-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="find">
+ <path id="magnifying-glass" d="m 11.343828,11.000025 c 1.921,0 3.5,1.54775 3.5,3.46875 0,1.92 -1.579,3.5 -3.5,3.5 -0.749,0 -1.432,-0.25225 -2,-0.65625 l -0.09375,0.15625 -2.375,2.375 c -0.19,0.189 -0.53425,0.15325 -0.78125,-0.09375 -0.247,-0.247 -0.314,-0.59125 -0.125,-0.78125 l 2.375,-2.375 0.1875,-0.09375 c -0.403,-0.566 -0.65625,-1.28225 -0.65625,-2.03125 10e-4,-1.92 1.54975,-3.46875 3.46875,-3.46875 z m 0,1.65625 c -1.011306,0 -1.8125,0.801194 -1.8125,1.8125 0,1.011306 0.801194,1.84375 1.8125,1.84375 1.011306,0 1.84375,-0.832444 1.84375,-1.84375 0,-1.011306 -0.832444,-1.8125 -1.84375,-1.8125 z" />
+ <path id="text" d="M 19,5 19,7 9,7 9,5 z m 0,3 0,2 -11,0 0,-2 z m 0,3 0,2 -3.53125,0 c -0.282529,-0.797203 -0.786096,-1.486208 -1.4375,-2 z m 0,3 0,2 -3.53125,0 C 15.6463,15.520243 15.75,15.010236 15.75,14.46875 15.75,14.309811 15.703797,14.154621 15.6875,14 z" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-ltr.svg
new file mode 100644
index 00000000..6e81d2bc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z" id="path216"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-rtl.svg
new file mode 100644
index 00000000..4b743aac
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flag-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z" id="path216"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-ltr.svg
new file mode 100644
index 00000000..49cdb7a2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-ltr.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g2990">
+ <g id="Layer_1">
+ <path id="path227" d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z"/>
+ </g>
+ <g id="Layer_2">
+ <g id="g230">
+ <path id="path232" d="M17.997 1.989l.99.99-15.98 15.98-.99-.99z"/>
+ </g>
+ <g id="g234">
+ <path id="path236" d="M16.999 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-rtl.svg
new file mode 100644
index 00000000..e470de42
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/flagUndo-rtl.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g2990">
+ <g id="Layer_1">
+ <path id="path227" d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z"/>
+ </g>
+ <g id="Layer_2">
+ <g id="g230">
+ <path id="path232" d="M7.003 1.989l-.99.99 15.98 15.98.99-.99z"/>
+ </g>
+ <g id="g234">
+ <path id="path236" d="M8.001 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-ltr.svg
new file mode 100644
index 00000000..bb2545c5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-ltr.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="help">
+ <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
+ <g id="question-mark">
+ <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+ <path id="bottom" d="M11 16h2v2h-2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-rtl.svg
new file mode 100644
index 00000000..99c7f842
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/help-rtl.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="help">
+ <path id="circle" d="M11.999 2.085c5.478 0 9.916 4.438 9.916 9.916 0 5.476-4.438 9.914-9.916 9.914-5.476 0-9.914-4.438-9.914-9.914 0-5.478 4.438-9.916 9.914-9.916zm-.001 18c4.465 0 8.084-3.619 8.084-8.083 0-4.465-3.619-8.084-8.084-8.084-4.464 0-8.083 3.619-8.083 8.084 0 4.464 3.619 8.083 8.083 8.083z"/>
+ <g id="question-mark">
+ <path id="top" d="M12.234 6.688c2.5 0 3.219 2.188 3.219 2.188l-1.411.854s-.298-.791-.901-1.229c-.516-.375-1.625-.625-2.219.125-.701.885.17 1.587 1.078 2.719.953 1.186 1 3.655 1 3.655h-1.969s-.135-2.318-1.041-3.381c-.603-.707-1.443-1.338-1.443-2.494 0-1.156 1.187-2.437 3.687-2.437z"/>
+ <path id="bottom" d="M13 16h-2v2h2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/history.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/history.svg
new file mode 100644
index 00000000..35f15afe
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/history.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="history">
+ <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
+ <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-ltr.svg
new file mode 100644
index 00000000..e95d40d8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="indent-list-ltr">
+ <path id="arrow" d="M5 15.079l4.794-3.527-4.704-3.599-.01 2.047h-2.08v3h2z"/>
+ <path id="bottom_line" d="M20 17h-16c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+ <path id="middle_line" d="M20 10h-7c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h7c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+ <path id="top_line" d="M20 3h-16c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-rtl.svg
new file mode 100644
index 00000000..cca3ad31
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/indent-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="indent-list-rtl">
+ <path id="arrow" d="M19 15.079l-4.794-3.527 4.704-3.599.01 2.047h2.08v3h-2z"/>
+ <path id="bottom_line" d="M4 17h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-16c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+ <path id="middle_line" d="M4 10h7c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-7c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+ <path id="top_line_5_" d="M4 3h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-16c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/info.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/info.svg
new file mode 100644
index 00000000..9c0d1cbc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/info.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+ <g id="info">
+ <path id="circled-i" d="M11.499 17c-3.036 0-5.499-2.464-5.499-5.5 0-3.037 2.462-5.5 5.499-5.5 3.037 0 5.501 2.462 5.501 5.5 0 3.036-2.464 5.5-5.501 5.5zm.002-12c-3.591 0-6.501 2.91-6.501 6.5s2.91 6.5 6.501 6.5c3.588 0 6.499-2.911 6.499-6.5s-2.911-6.5-6.499-6.5zM12 10v4h1v1h-3v-1h1v-3h-1v-1zM11 8h1v1h-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/insert.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/insert.svg
new file mode 100644
index 00000000..0833f84f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/insert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="insert">
+ <path d="M13 5h-2v6h-6v2h6v6h2v-6h6v-2h-6z" id="plus"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-a.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-a.svg
new file mode 100644
index 00000000..a0e66bff
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-a.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-a">
+ <path id="a" d="M14.667 6h-1.372l-7 12h1.705l2.333-4h4l.667 4h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-keheh-jeem.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-keheh-jeem.svg
new file mode 100644
index 00000000..d4bff1be
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-keheh-jeem.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-arab-keheh-jeem">
+ <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.299-.774.712-.875 1.125-.064.263-.035.572.063.781.189.405.539.574.844.813l.094-.125.531.625c.14.164.343.513.469.938.137.463.08.725 0 1.125h-3.438c-.338 0-.592.007-.766-.02-.339-.053-.256-.208-.234-.34.332-.127.564-.173.938-.141.29-.494.593-.885.906-1.313-.98.037-1.878.015-2.688-.094-.346-.047-.698-.186-1.094-.156-.357.026-.768.239-1.031.719-.246.448-.434.839-.656 1.281l.75-.469c.23-.142.484-.227.719-.219.157.005.275.054.406.094-.231.205-.509.402-.719.563-.301.26-.702.688-.906 1-.403.615-.694 1.084-.875 1.781-.179.689.004 1.339.469 1.75.426.376.846.519 1.281.563.65.065 1.205.093 2-.188.657-.231 1.021-.553 1.5-.969-.883.11-1.817.089-2.531.031-.871-.07-1.268-.384-1.469-.594-.271-.283-.307-.64-.156-1.219.036-.141.097-.323.25-.531.168-.228.364-.435.594-.656.451-.436 1.011-.737 1.461-.938-.045.206-.107.443-.055.688.049.229.248.379.438.469.259.122.506.155.688.156 1.421.011 2.862 0 4.281 0 .247 0 .452-.163.594-.375.139-.208.249-.481.344-.844.131-.499.094-1.062-.094-1.625-.182-.543-.418-1.009-.719-1.406-.335-.443-.674-.829-1-1.219 1.257-.815 2.716-1.239 3.969-1.688.121-.452.224-.926.313-1.313zm-9.469 8.438c-.262.394-.584.691-.875 1 .375.286.748.556 1.094.813.335-.303.626-.674.875-.969-.39-.268-.771-.588-1.094-.844z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-meem.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-meem.svg
new file mode 100644
index 00000000..bfbc9bf5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-arab-meem.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-arab-meem">
+ <path id="arab-meem" d="M16 9.729l-.93 2.19h-4.663c-.479 0-.857.122-1.135.367l-.061.11c-.184 2.016-.502 3.558-.955 4.627-.272.641-.633 1.252-1.082 1.833-.177.226-.219.186-.126-.119l.142-.504.17-.669.234-.87.002-.009.202-1.045.258-1.411.353-1.906c.191-.312.424-.638.699-.98.276-.342.589-.706.94-1.09.129-.092.697-.18 1.705-.266 1.05-.086 1.638-.183 1.765-.293l.065-.128c.007-.11-.011-.241-.054-.394-.043-.153-.12-.327-.231-.522-.22-.428-.438-.641-.654-.641-.294 0-.915.269-1.864.806-.359.208-.376.125-.051-.247 1.558-1.71 2.708-2.566 3.45-2.566.383 0 .671.131.863.394.135.195.25.599.344 1.21l.203 1.2c.106.586.242.895.409.925"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-armn-sha.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-armn-sha.svg
new file mode 100644
index 00000000..63de0f6c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-armn-sha.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-armn-sha">
+ <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.586 6h1.724c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.324 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.038-.356-.057-.576-.057-.583 0-1.137.095-1.663.284-.524.19-1 .46-1.425.812-.42.35-.777.78-1.072 1.283-.294.504-.504 1.074-.63 1.71-.242 1.255-.152 2.21.268 2.868.426.652 1.19.978 2.294.978.55 0 1.045-.08 1.48-.237.437-.156.815-.377 1.136-.66.326-.29.59-.633.796-1.033.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.026-1.214 1.425-.488.394-1.053.7-1.694.922-.642.215-1.343.323-2.105.323-.767 0-1.434-.113-2-.34-.568-.225-1.025-.553-1.372-.984-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.567.697-1.066 1.144-1.496.445-.436.944-.794 1.496-1.072.55-.284 1.13-.475 1.733-.575l-.466-.23"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-c.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-c.svg
new file mode 100644
index 00000000..b468deac
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-c.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-c">
+ <path id="c" d="M15.008 13.718l1.481.214c-.468 1.34-1.15 2.354-2.046 3.04-.896.686-1.901 1.029-3.015 1.029-1.359 0-2.438-.43-3.237-1.29-.794-.86-1.191-2.092-1.191-3.697 0-2.09.606-3.818 1.817-5.185 1.079-1.219 2.42-1.828 4.023-1.828 1.186 0 2.145.33 2.878.989.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.839-.453-1.464-.916-1.876-.458-.417-1.051-.625-1.779-.625-1.369 0-2.476.631-3.321 1.892-.733 1.087-1.099 2.377-1.099 3.871 0 1.193.282 2.103.847 2.731.565.628 1.3.942 2.206.942.774 0 1.473-.261 2.099-.784.626-.522 1.081-1.261 1.366-2.216"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-d.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-d.svg
new file mode 100644
index 00000000..92a834d9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-d.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-d">
+ <path id="d" d="M7 18l2.462-12h3.557c.853 0 1.505.063 1.955.188.644.169 1.194.472 1.65.909.456.431.799.971 1.03 1.621.231.649.346 1.378.346 2.186 0 .966-.145 1.847-.435 2.644-.284.791-.66 1.49-1.127 2.095-.461.6-.947 1.072-1.456 1.416-.504.338-1.102.589-1.794.753-.526.126-1.172.188-1.939.188h-4.249m1.859-1.359h1.867c.842 0 1.591-.079 2.245-.237.408-.098.756-.243 1.046-.434.381-.246.727-.57 1.038-.974.408-.535.732-1.143.974-1.825.247-.688.37-1.468.37-2.341 0-.971-.166-1.716-.499-2.235-.333-.524-.756-.87-1.271-1.04-.381-.126-.974-.188-1.778-.188h-1.85l-1.907 9.274"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-e.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-e.svg
new file mode 100644
index 00000000..66a5ef5d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-e.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-e">
+ <path id="e" d="M7 18l2.474-12h8.526l-.282 1.367h-6.947l-.75 3.633h6.09l-.282 1.367h-6.09l-.877 4.274h7.438l-.282 1.359h-9.018"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-geor-kan.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-geor-kan.svg
new file mode 100644
index 00000000..3398904d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-geor-kan.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-geor-kan">
+ <path id="geor-kan" d="M15.057 14.663c-.441 2.225-1.834 3.337-4.178 3.337-1.919 0-2.879-.787-2.879-2.36 0-.298.036-.624.108-.977.083-.431.245-.836.488-1.217l1.241.605-.207.613c-.055.259-.083.497-.083.712 0 .972.521 1.458 1.564 1.458 1.307 0 2.101-.723 2.383-2.17l.058-.331c.044-.221.066-.425.066-.613 0-.928-.546-1.391-1.638-1.391h-1.117l.248-1.259h1.117c1.202-.005 1.908-.552 2.118-1.64.039-.182.058-.356.058-.522 0-1.143-.899-1.714-2.697-1.714l.232-1.193c2.708 0 4.062.875 4.062 2.625 0 .248-.028.516-.083.803-.204 1.093-1.051 1.825-2.54 2.195l-.033.166c1.23.199 1.845.823 1.845 1.872 0 .21-.025.433-.074.671l-.058.331"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-i.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-i.svg
new file mode 100644
index 00000000..93bec5a6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-i.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-i">
+ <path id="i" d="M12.5 17.999l.249-.994h-1.5l2.509-10.037h1.5l.242-.967h-5l-.242.967h1.5l-2.509 10.037h-1.5l-.249.994z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-k.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-k.svg
new file mode 100644
index 00000000..d4831549
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-k.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-k">
+ <path id="k" d="M12.018 10.652l4.982-4.652h-2l-5.309 5.234 1.309-5.234h-1.5l-3 12h1.5l1.173-4.693 1.54-1.438c.287 4.131 3.287 6.131 3.287 6.131h2s-4-2-3.982-7.348z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-s.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-s.svg
new file mode 100644
index 00000000..4f6364cb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/italic-s.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-s">
+ <path id="s" d="M16.474 6.589l-.302 1.526c-.522-.279-1.041-.488-1.557-.628-.511-.145-1.007-.217-1.487-.217-.935 0-1.679.204-2.231.612-.553.408-.829.95-.829 1.627 0 .372.101.658.302.86.207.196.733.408 1.58.635l.937.232c1.059.274 1.795.622 2.208 1.046.413.418.62 1.007.62 1.766 0 1.167-.46 2.117-1.379 2.851-.914.733-2.12 1.1-3.618 1.1-.615 0-1.232-.062-1.852-.186-.62-.119-1.242-.302-1.867-.55l.318-1.611c.573.356 1.147.625 1.72.806.578.181 1.154.271 1.728.271.976 0 1.759-.217 2.347-.651.589-.434.883-.999.883-1.697 0-.465-.119-.816-.356-1.054-.232-.243-.736-.462-1.511-.658l-.937-.24c-1.069-.279-1.8-.599-2.192-.961-.387-.367-.581-.878-.581-1.534 0-1.152.442-2.094 1.325-2.828.888-.739 2.043-1.108 3.463-1.108.553 0 1.1.049 1.642.147.542.098 1.085.245 1.627.442"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/language.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/language.svg
new file mode 100644
index 00000000..081e49a1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/language.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="language">
+ <path id="japanese" d="M17.533 9.81l.271-.59 1.041.407-.18.363c.661.271 1.101.468 1.312.589.331.211.618.514.86.905.211.393.316.846.316 1.358 0 .786-.302 1.479-.905 2.083-.604.634-1.66 1.057-3.169 1.268-.121-.361-.258-.679-.408-.95.965-.151 1.645-.333 2.037-.545.454-.21.785-.481.998-.813.21-.303.314-.663.314-1.087 0-.482-.136-.905-.407-1.269-.331-.331-.8-.589-1.402-.77-.333.634-.649 1.117-.951 1.449-.242.332-.694.906-1.358 1.721.09.393.181.709.272.951l-1.042.362-.091-.498c-.423.361-.801.617-1.133.77-.361.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.301-.362-.68-.362-1.132 0-.604.136-1.147.407-1.63.241-.453.603-.89 1.086-1.313.272-.241.725-.528 1.359-.86 0-.271.03-.799.09-1.585-.514.03-.921.045-1.222.045-.393 0-.711-.015-.951-.045l-.046-1.041c.725.091 1.494.135 2.31.135 0-.149.075-.738.227-1.766l1.177.183c-.151.542-.256 1.041-.316 1.493.242-.029.543-.075.906-.136.362-.061.573-.091.634-.091s.648-.15 1.766-.453l.046 1.041c-.967.243-2.145.439-3.532.591-.062.663-.092 1.086-.092 1.266.663-.151 1.284-.225 1.857-.225zm-2.672 3.893c-.061-.481-.136-1.252-.227-2.31-.573.424-1.041.86-1.403 1.313-.303.423-.452.875-.452 1.358 0 .241.044.438.136.588.09.092.195.137.316.137.363.001.907-.361 1.63-1.086zm.771-2.763c0 .483.029 1.088.09 1.811.604-.905 1.057-1.599 1.359-2.082-.574.06-1.058.151-1.449.271z"/>
+ <path id="english" d="M9.497 15.981h1.851l-3.084-8.949h-1.85l-3.081 8.949h1.85l.557-1.981h3.209l.548 1.981zm-3.489-3.377l1.331-3.782 1.344 3.782h-2.675z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-ltr.svg
new file mode 100644
index 00000000..47e71b39
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="layout-ltr">
+ <path id="text" d="M5 19v-14h6v8h8v6h-14z"/>
+ <path id="float" d="M13 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-rtl.svg
new file mode 100644
index 00000000..fe9ee617
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/layout-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="layout-rtl">
+ <path id="text" d="M5 19v-6h8v-8h6v14h-14z"/>
+ <path id="float" d="M5 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/icons/link.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/link.svg
index fcb06be0..dbae3414 100644
--- a/resources/lib/oojs-ui/images/icons/link.svg
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/link.svg
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="link" opacity=".75">
+ <g id="link">
<path id="right" d="M19.188 12.001c0 1.1-.891 2.015-1.988 2.015l-4.195-.015c.538 1.088.963 1.999 1.997 1.999h3c1.656 0 2.998-2.343 2.998-4s-1.342-4-2.998-4h-3c-1.034 0-1.459.911-1.998 1.999l4.195-.015c1.098 0 1.989.917 1.989 2.017z"/>
<path id="center" d="M8 12c0 .535.42 1 .938 1h6.109c.518 0 .938-.465.938-1 0-.534-.42-1-.938-1h-6.109c-.518 0-.938.466-.938 1z"/>
<path id="left" d="M4.816 11.999c0-1.1.891-2.015 1.988-2.015l4.196.015c-.539-1.088-.964-1.999-1.998-1.999h-3c-1.656 0-2.998 2.343-2.998 4s1.342 4 2.998 4h3c1.034 0 1.459-.911 1.998-1.999l-4.195.015c-1.098 0-1.989-.917-1.989-2.017z"/>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-ltr.svg
new file mode 100644
index 00000000..5a43f5ce
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bullet-list-ltr">
+ <path id="bottom_dot" d="M5 10h-1c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h1c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+ <path id="middle_dot" d="M5 17h-1c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h1c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+ <path id="top_dot" d="M5 3h-1c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h1c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+ <path id="bottom_line" d="M20 17h-11c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h11c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+ <path id="middle_line" d="M20 10h-11c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h11c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+ <path id="top_line" d="M20 3h-11c-.552 0-1 .447-1 1v1c0 .553.448 1 1 1h11c.552 0 1-.447 1-1v-1c0-.553-.448-1-1-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-rtl.svg
new file mode 100644
index 00000000..fb6e9569
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listBullet-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bullet-list-rtl">
+ <path id="bottom_dot_1_" d="M19 10h1c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-1c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
+ <path id="middle_dot_1_" d="M19 17h1c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-1c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
+ <path id="top_dot_1_" d="M19 3h1c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-1c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
+ <path id="bottom_line_7_" d="M4 17h11c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-11c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
+ <path id="middle_line_7_" d="M4 10h11c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-11c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
+ <path id="top_line_7_" d="M4 3h11c.552 0 1 .447 1 1v1c0 .553-.448 1-1 1h-11c-.552 0-1-.447-1-1v-1c0-.553.448-1 1-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-ltr.svg
new file mode 100644
index 00000000..e929dae0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="number-list-ltr">
+ <path id="bottom_dot" d="M3 16v1h1.993l.03 1h-1.023v1h1v1h-2v1h2.023l.977-1.002v-1l-.955-.531.955-.5v-.969l-1.007-.998z"/>
+ <path id="middle_dot" d="M3 9v1h2.117l-2.117 2.187v1.811l3-.062v-.936h-2.118l2.118-2.188v-1.032l-.668-.78z"/>
+ <path id="top_dot" d="M4.993 2h-.648l-1.327 1.391.031.609h1.025l-.068 2h-1.006v1h3v-1h-1.037z"/>
+ <path id="bottom_line" d="M20.002 17h-11.002c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h11.002c.551 0 .998-.447.998-1v-1c0-.553-.447-1-.998-1z"/>
+ <path id="middle_line" d="M20.002 10h-11.002c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h11.002c.551 0 .998-.447.998-1v-1c0-.553-.447-1-.998-1z"/>
+ <path id="top_line" d="M20.002 3h-11.002c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h11.002c.551 0 .998-.447.998-1v-1c0-.553-.447-1-.998-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-rtl.svg
new file mode 100644
index 00000000..bbfa92f4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/listNumbered-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="number-list-rtl">
+ <path id="bottom_dot" d="M18 16v1h1.993l.03 1h-1.023v1h1v1h-2v1h2.023l.977-1.002v-1l-.956-.531.956-.5v-.969l-1.007-.998z"/>
+ <path id="middle_dot" d="M18 9v1h2.116l-2.116 2.187v1.811l3-.062v-.936h-2.118l2.118-2.188v-1.032l-.669-.78z"/>
+ <path id="top_dot" d="M19.993 2h-.648l-1.328 1.391.031.609h1.026l-.069 2h-1.005v1h3v-1h-1.038z"/>
+ <path id="bottom_line" d="M3.999 17h11.002c.552 0 .999.447.999 1v1c0 .553-.447 1-.999 1h-11.002c-.552 0-.999-.447-.999-1v-1c0-.553.447-1 .999-1z"/>
+ <path id="middle_line" d="M3.999 10h11.002c.552 0 .999.447.999 1v1c0 .553-.447 1-.999 1h-11.002c-.552 0-.999-.447-.999-1v-1c0-.553.447-1 .999-1z"/>
+ <path id="top_line" d="M3.999 3h11.002c.552 0 .999.447.999 1v1c0 .553-.447 1-.999 1h-11.002c-.552 0-.999-.447-.999-1v-1c0-.553.447-1 .999-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/lock.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/lock.svg
new file mode 100644
index 00000000..76328f37
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/lock.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="lock">
+ <path d="M12 6c-2.21 0-4 1.79-4 4v1H7v7h10v-7h-1v-1c0-2.21-1.79-4-4-4zm0 2c1.105 0 2 .895 2 2v1h-4v-1c0-1.105.895-2 2-2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/menu.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/menu.svg
new file mode 100644
index 00000000..50ac8a39
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/menu.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="menu">
+ <path id="lines" d="M6 15h12c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-12c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1zm-1-4v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1zm0-5v1c0 .553.447 1 1 1h12c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1h-12c-.553 0-1 .447-1 1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-ltr.svg
new file mode 100644
index 00000000..51e6611a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="move-ltr">
+ <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-rtl.svg
new file mode 100644
index 00000000..bcee09d9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/move-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="move-rtl">
+ <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/move.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/move.svg
new file mode 100644
index 00000000..9063bd48
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/move.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M20 11l-4-3v2h-3v-3h2l-3-4-3 4h2v3h-3v-2l-4 3 4 3v-2h3v3h-2l3 4 3-4h-2v-3h3v2z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-ltr.svg
new file mode 100644
index 00000000..dad5f51c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="line_return">
+ <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3h-5.1v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-rtl.svg
new file mode 100644
index 00000000..fd758cc6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/newline-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="line_return">
+ <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-ltr.svg
new file mode 100644
index 00000000..601428e2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M16 14l2 2v-11h-4v2h2zm0 2l-7-7-2-2-1-1-1-1-3-3-1 1 2 2h-1v14h4v-2h-2v-10h1l2 2v10h4v-2h-2v-6l6 6h-1v2h3l4 4 1-1-4-4zm-5-9v-2h-4l2 2zm8-2v2h2v10h-2l2 2h2v-14z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-rtl.svg
new file mode 100644
index 00000000..31785a3c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/noWikiText-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g484">
+ <path d="M8 14l-2 2v-11h4v2h-2zm0 2l7-7 2-2 1-1 1-1 3-3 1 1-2 2h1v14h-4v-2h2v-10h-1l-2 2v10h-4v-2h2v-6l-6 6h1v2h-3l-4 4-1-1 4-4zm5-9v-2h4l-2 2zm-8-2v2h-2v10h2l-2 2h-2v-14z" id="path486"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-ltr.svg
new file mode 100644
index 00000000..344b7617
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="outdent-list-ltr">
+ <path id="arrow" d="M8 13h2v-3h-2.052l-.031-2.06-4.712 3.585 4.795 3.554z"/>
+ <path id="bottom_line" d="M20 17h-16c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+ <path id="middle_line" d="M20 10h-7c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h7c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+ <path id="top_line" d="M20 3h-16c-.553 0-1 .447-1 1v1c0 .553.447 1 1 1h16c.553 0 1-.447 1-1v-1c0-.553-.447-1-1-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-rtl.svg
new file mode 100644
index 00000000..31e92c51
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outdent-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="outdent-list-rtl">
+ <path id="arrow" d="M16 13h-2v-3h2.052l.031-2.06 4.712 3.585-4.795 3.554z"/>
+ <path id="bottom_line" d="M4 17h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-16c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+ <path id="middle_line" d="M4 10h7c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-7c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+ <path id="top_line" d="M4 3h16c.553 0 1 .447 1 1v1c0 .553-.447 1-1 1h-16c-.553 0-1-.447-1-1v-1c0-.553.447-1 1-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-ltr.svg
new file mode 100644
index 00000000..9c0ea598
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="outline-ltr">
+ <path id="text" d="M5 13h14v6h-14v-6z"/>
+ <path id="float" d="M5 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-rtl.svg
new file mode 100644
index 00000000..2a3428e9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/outline-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="outline-rtl">
+ <path id="text" d="M19 19h-14v-6h14v6z"/>
+ <path id="float" d="M13 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/picture.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/picture.svg
new file mode 100644
index 00000000..7400bca9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/picture.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="picture">
+ <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
+ <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
+ <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-ltr.svg
new file mode 100644
index 00000000..97b77bb4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M18 9.9c-.7 0-1.4.3-1.8.9v-4.8h-4c.2-.4.4-.8.4-1.2 0-1.2-1-2.2-2.2-2.2-1.3-.1-2.3.9-2.3 2.2 0 .4.2.8.4 1.2h-4.4v3.6l.6-.1c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5c-.2 0-.4 0-.6-.1v3.6h4.9c-.5.4-.9 1-.9 1.8 0 1.2 1 2.2 2.3 2.2 1.2 0 2.2-1 2.2-2.2 0-.7-.3-1.4-.9-1.8h4.5v-4.5c.4.5 1 .9 1.8.9 1.2 0 2.2-1 2.2-2.2 0-1.3-1-2.3-2.2-2.3z" id="path542"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-rtl.svg
new file mode 100644
index 00000000..0ad5f375
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/puzzle-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6.3 9.9c.7 0 1.4.3 1.8.9v-4.8h4c-.2-.4-.4-.8-.4-1.2 0-1.2 1-2.2 2.2-2.2 1.3-.1 2.3.9 2.3 2.2 0 .4-.2.8-.4 1.2h4.4v3.6l-.6-.1c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5c.2 0 .4 0 .6-.1v3.6h-4.9c.5.4.9 1 .9 1.8 0 1.2-1 2.2-2.3 2.2-1.2 0-2.2-1-2.2-2.2 0-.7.3-1.4.9-1.8h-4.5v-4.5c-.4.5-1 .9-1.8.9-1.2 0-2.2-1-2.2-2.2 0-1.3 1-2.3 2.2-2.3z" id="path542"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-ltr.svg
new file mode 100644
index 00000000..dc1c06f0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M19.9 8.7c.3-.1.6-.3.8-.6s.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.9.5-1.6 1.1-2.2 1.8s-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5zm-14.4-.1c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6s.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-rtl.svg
new file mode 100644
index 00000000..3a8b7012
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotes-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g552">
+ <path d="M4.1 8.7c-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.9.5 1.6 1.1 2.2 1.8.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5zm14.4-.1c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8z" id="path554"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-ltr.svg
new file mode 100644
index 00000000..24fca8f5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M3.5 8.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6.2-.3.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8zm15.5-3.6v-4h-2v4h-4v2h4v4h2v-4h4v-2zm-4 7s.1-.9.8-1.8l.2-.2v-2h-1.9l-.6.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4z" id="path6"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-rtl.svg
new file mode 100644
index 00000000..736f2a6d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/quotesAdd-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M20.5 8.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8zm-15.5-3.6v-4h2v4h4v2h-4v4h-2v-4h-4v-2zm4 7s-.1-.9-.8-1.8l-.2-.2v-2h1.9l.6.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4z" id="path6"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-ltr.svg
new file mode 100644
index 00000000..884d40df
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="create_redirect">
+ <g>
+ <path d="M17.7 2.4c-.3-.3-.7-.4-1.2-.4h-12.1v16.2c0 .5.1.8.4 1.1s.7.7 1.2.7h10.2c-.6-.2-1.2-.5-1.9-1-.4-.3-.8-.6-1.2-1l-.5-.6h-6.2v-1.4h5.4s-.4-1.5-.4-2h-5v-1h9v1c.4.1 1.1.1 1.5.1.4 0 .7 0 1.1-.1v-10.5c.1-.5-.1-.9-.3-1.1zm-5.2 1.6h3v4.5h-3v-4.5zm-6.1 0h4v1.6h-4v-1.6zm0 3h4v1.5h-4v-1.5zm0 3h9v1.5h-9v-1.5zm12.7 3.1l4.9 3.8-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-rtl.svg
new file mode 100644
index 00000000..a07e8364
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/redirect-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="create_redirect">
+ <g id="g3264">
+ <path d="M6.3 2.4c.3-.3.7-.4 1.2-.4h12.1v16.2c0 .5-.1.8-.4 1.1-.3.3-.7.7-1.2.7h-10.2c.6-.2 1.2-.5 1.9-1 .4-.3.8-.6 1.2-1l.5-.6h6.2v-1.4h-5.4s.4-1.5.4-2h5v-1h-9v1c-.4.1-1.1.1-1.5.1-.4 0-.7 0-1.1-.1v-10.5c-.1-.5.1-.9.3-1.1zm5.2 1.6h-3v4.5h3v-4.5zm6.1 0h-4v1.6h4v-1.6zm0 3h-4v1.5h4v-1.5zm0 3h-9v1.5h9v-1.5z" id="path3266"/>
+ <path d="M4.9 13.1l-4.9 3.8 4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3" id="path3268"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/regular-expression.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/regular-expression.svg
new file mode 100644
index 00000000..7b672618
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/regular-expression.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="regular-expression">
+ <path id="left-bracket" d="m 3,12.044797 c -5e-7,-0.989171 0.150394,-1.914889 0.451184,-2.7771612 C 3.7558785,8.4053812 4.1933899,7.6495032 4.7637193,7 L 6.2286026,7 C 5.6778034,7.7204251 5.261777,8.511764 4.9805221,9.3740188 4.6992623,10.236291 4.5586337,11.122815 4.5586357,12.033598 c -2e-6,0.914522 0.1425798,1.799179 0.427746,2.653974 C 5.2754491,15.538635 5.6856161,16.309444 6.2168835,17 L 4.7637193,17 C 4.1894835,16.365435 3.7519721,15.624488 3.451184,14.777158 3.150394,13.929828 3,13.019042 3,12.044797" />
+ <path id="dot" d="m 10,16 c 0,0.552285 -0.4477153,1 -1,1 -0.5522847,0 -1,-0.447715 -1,-1 0,-0.552285 0.4477153,-1 1,-1 0.5522847,0 1,0.447715 1,1 z" />
+ <path id="star" d="m 14.250652,7.0127142 -0.240235,2.15625 2.185547,-0.609375 0.193359,1.4765618 -1.992187,0.140625 1.306641,1.740234 -1.330079,0.708985 -0.914062,-1.833985 -0.802734,1.822266 -1.382813,-0.697266 1.294922,-1.740234 -1.980469,-0.152343 0.228516,-1.4648438 2.138672,0.609375 -0.240235,-2.15625 1.535157,0" />
+ <path id="right-bracket" d="m 21,12.044797 c -3e-6,0.981711 -0.152351,1.896229 -0.457043,2.743558 C 20.241767,15.635686 19.806209,16.3729 19.235883,17 l -1.453164,0 c 0.527356,-0.686824 0.93557,-1.455766 1.224642,-2.306829 0.289069,-0.854795 0.433604,-1.741318 0.433606,-2.659573 -2e-6,-0.910783 -0.140631,-1.797307 -0.421886,-2.6595792 C 18.737821,8.511764 18.321795,7.7204251 17.771,7 l 1.464883,0 c 0.574232,0.653236 1.011744,1.4128466 1.312536,2.2788341 0.300785,0.8622719 0.45118,1.7842569 0.451183,2.7659629" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/remove.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/remove.svg
new file mode 100644
index 00000000..6ad79174
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/remove.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="remove">
+ <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/search.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/search.svg
new file mode 100644
index 00000000..208d44b3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/search.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="search">
+ <path id="search" d="M16.021 15.96l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/secure-link.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/secure-link.svg
new file mode 100644
index 00000000..a9c7d276
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/secure-link.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="secure">
+ <path id="lock" d="M8 5h.019v-.997c.001-.057.004-1.409-.832-2.255-.434-.438-.998-.66-1.679-.66s-1.245.222-1.678.659c-.837.847-.833 2.199-.832 2.251v1.002h.002c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1v-3c0-.553-.447-1-1-1zm-4.002 0v-1.007c0-.01.005-.999.543-1.543.482-.485 1.449-.487 1.932-.002.544.546.546 1.536.546 1.55v1.002h-3.021z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/settings.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/settings.svg
new file mode 100644
index 00000000..9fa0a4b3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/settings.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+ <g id="settings">
+ <path id="gear" d="M3 4h3v2h-3zM12 4h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 11h9v2h-9zM18 11h3v2h-3zM14 10h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2h-6zM15 18h6v2h-6zM11 17h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-ltr.svg
new file mode 100644
index 00000000..e8b427b1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-ltr.svg
@@ -0,0 +1,7 @@
+<?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 id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+ <g id="down">
+ <path id="arrow" d="M22 3l-3.5 6L15 3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-rtl.svg
new file mode 100644
index 00000000..e5e95196
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/smaller-rtl.svg
@@ -0,0 +1,7 @@
+<?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 id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+ <g id="down">
+ <path id="arrow" d="M9 3L5.5 9 2 3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/specialCharacter.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/specialCharacter.svg
new file mode 100644
index 00000000..4d601281
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/specialCharacter.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="special-character">
+ <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.311.366-.531.808-.66 1.327-.128.513-.192 1.08-.192 1.699 0 .513.058 1 .174 1.46.122.46.311.87.568 1.23.629.863 1.155 1.139 2.011 1.363l.247 3.035h-5v-3h.605l.531 1.354.394.053.605.044.751.035.456.009h.66l-.092-.894c-.629-.094-.811-.268-1.336-.522-.525-.26-.98-.59-1.365-.991-.379-.401-.675-.867-.889-1.398-.214-.537-.321-1.13-.321-1.779 0-.82.131-1.537.394-2.15.269-.619.656-1.133 1.163-1.54.507-.407 1.133-.711 1.878-.912.745-.206 1.6-.31 2.565-.31.959 0 1.811.103 2.556.31.751.201 1.38.504 1.887.912.507.407.892.92 1.154 1.54.269.614.403 1.33.403 2.15 0 .649-.107 1.242-.321 1.779-.214.531-.513.997-.898 1.398-.379.401-.831.732-1.356.991-.525.254-.707.428-1.336.522l-.092.894h.66l.447-.009.751-.035.605-.044.403-.053.531-1.354h.605v3h-5l.247-3.035c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.619-.064-1.186-.192-1.699-.128-.519-.348-.962-.66-1.327-.311-.372-.73-.661-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/star.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/star.svg
new file mode 100644
index 00000000..ea8c26c6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/star.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5 1.9-3.6m0-3.4l-2.8 5.6-6.2.9 4.5 4.4-1.1 6.1 5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9-2.7-5.5z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-a.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-a.svg
new file mode 100644
index 00000000..480189f5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-a.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="strikethrough-a">
+ <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
+ <path id="a" d="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-s.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-s.svg
new file mode 100644
index 00000000..d57b652f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-s.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="strikethrough-s">
+ <path id="strikethrough" d="M6 12h12v1h-12v-1z"/>
+ <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .889.221 1.602.719 2.13.498.528 1.279.91 2.312 1.14l.812.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.531 1.26-.358.291-.894.45-1.625.45-.477 0-.969-.074-1.469-.24-.502-.166-1.031-.417-1.562-.75l-.375-.238v2.158l.156.062c.58.237 1.143.417 1.688.54.549.121 1.07.18 1.562.18 1.286 0 2.297-.293 3-.9.709-.605 1.062-1.486 1.062-2.608 0-.943-.256-1.726-.781-2.312-.521-.592-1.305-1-2.344-1.229l-.812-.181c-.716-.148-1.204-.352-1.406-.539-.205-.203-.312-.485-.312-.935 0-.533.162-.899.5-1.17.342-.271.836-.42 1.531-.42.395 0 .818.052 1.25.181.433.127.908.333 1.406.6l.375.18v-2.041s-1.188-.383-1.688-.479c-.499-.098-.984-.151-1.468-.151z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-y.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-y.svg
new file mode 100644
index 00000000..8409dc15
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/strikethrough-y.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="strikethrough-y">
+ <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
+ <path id="a" d="M7 6h1.724l3.288 4.935 3.264-4.935h1.724l-4.194 6.285v5.715h-1.612v-5.715l-4.194-6.285"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-ltr.svg
new file mode 100644
index 00000000..b7507daf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-ltr.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+ <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-rtl.svg
new file mode 100644
index 00000000..9fe5325f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/subscript-rtl.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+ <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-ltr.svg
new file mode 100644
index 00000000..39f30a76
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-ltr.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+ <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-rtl.svg
new file mode 100644
index 00000000..eabab21c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/superscript-rtl.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+ <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-caption.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-caption.svg
new file mode 100644
index 00000000..15bb06a6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-caption.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-caption">
+ <path id="caption" d="M6 6h12v3H6z"/>
+ <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-ltr.svg
new file mode 100644
index 00000000..798ee4a1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-column-ltr">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 5,5 2,0 0,14 -2,0 z"
+ id="column" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-rtl.svg
new file mode 100644
index 00000000..dfa33a08
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-column-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-column-rtl">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 17,5 2,0 0,14 -2,0 z"
+ id="column" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-after.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-after.svg
new file mode 100644
index 00000000..91d06644
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-after.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-row-after">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 5,17 14,0 0,2 -14,0 z"
+ id="row" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-before.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-before.svg
new file mode 100644
index 00000000..4b71f2a8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-insert-row-before.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-row-before">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 5,5 14,0 0,2 -14,0 z"
+ id="row" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-merge-cells.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-merge-cells.svg
new file mode 100644
index 00000000..6a8b77d8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table-merge-cells.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-merge-cells">
+ <g id="merge-cell-left">
+ <path id="cell-border" d="m 4,7 0,9 7,0 0,-3 -1,0.834 L 10,15 5,15 5,8 10,8 10,9.167 11,10 11,7 z" />
+ <path id="arrow" d="m 8,9 0,2 -2,0 0,1 2,0 0,2 3,-2.5 z" />
+ </g>
+ <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1,0,0,1,24,0)" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table.svg
new file mode 100644
index 00000000..1ba8c440
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/table.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+
+ <g id="table-insert">
+ <path id="table" d="M4 5v13h16v-13zm2 2h5v4h-5zm7 0h5v4h-5zm-7 5h5v4h-5zm7 0h5v4h-5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/tag.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/tag.svg
new file mode 100644
index 00000000..534824c8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/tag.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="tag">
+ <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-ltr.svg
new file mode 100644
index 00000000..6b594b29
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M24 6h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+ </g>
+ <path d="M19 13v7h-16c-1.1 0-2-.9-2-2v-11h12v-1h-13v12c0 1.7 1.3 3 3 3h17v-8h-1z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-rtl.svg
new file mode 100644
index 00000000..36b25a3e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/templateAdd-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g690">
+ <path d="M0 6h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path692"/>
+ </g>
+ <path d="M5 13v7h16c1.1 0 2-.9 2-2v-11h-12v-1h13v12c0 1.7-1.3 3-3 3h-17v-8h1z" id="path694"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-lefttoright.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-lefttoright.svg
new file mode 100644
index 00000000..62526a03
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-lefttoright.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="text-dir-ltr">
+ <path d="M7 7h-2v-1h2l.469.5.531-.5h2v1h-2v10h2v1h-2l-.5-.531-.5.531h-2v-1h2zM13.976 16v-2h-2.976v-4h2.976v-1.956l6.024 3.978z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-righttoleft.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-righttoleft.svg
new file mode 100644
index 00000000..913bbfd6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-dir-righttoleft.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="text-dir-rtl">
+ <path d="M17 17h2v1h-2l-.469-.5-.531.5h-2v-1h2v-10h-2v-1h2l.5.531.5-.531h2v1h-2zM10.024 8v2h2.976v4h-2.976v1.956l-6.024-3.978z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-style.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-style.svg
new file mode 100644
index 00000000..0198c355
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/text-style.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="text-style">
+ <path id="a" d="M15.296 18h2.789l-1.14-12h-2.789l-8.156 12h2.789l2.039-3h4.183l.285 3zm-3.109-5l2.311-3.4.323 3.4h-2.634z"/>
+ <path id="underline" d="M6 19h12v1h-12v-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-ltr.svg
new file mode 100644
index 00000000..7740e43e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M11.1 13.1c-1.8-2.1-2.7-4.3-3-5.1h4.7l.7-2h-5.5v-3h-2v3h-5v2h5c-.2.9-1.3 4.8-5.1 7.6l1.2 1.6c2.7-2 4.3-4.5 5.1-6.4.7 1.3 1.7 3 3.2 4.5l.7-2.2zm1.4 6.9l1.3-4h5.3l1.3 4h2.2l-4.6-14h-3l-4.7 14h2.2zm4-12l2 6h-4l2-6z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-rtl.svg
new file mode 100644
index 00000000..c78e6222
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/translation-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12.4 13.1c1.8-2.1 2.7-4.3 3-5.1h-4.7l-.7-2h5.5v-3h2v3h5v2h-5c.2.9 1.3 4.8 5.1 7.6l-1.2 1.6c-2.7-2-4.3-4.5-5.1-6.4-.7 1.3-1.7 3-3.2 4.5l-.7-2.2zm-1.4 6.9l-1.3-4h-5.3l-1.3 4h-2.2l4.6-14h3l4.7 14h-2.2zm-4-12l-2 6h4l-2-6z" id="path704"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/trash.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/trash.svg
new file mode 100644
index 00000000..f5914312
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/trash.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2h-12zm1 1h10l-1 11h-8z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-ltr.svg
new file mode 100644
index 00000000..0731f056
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20.5 20.5l-15.5-15.5-1 1 3 3 1 11h8l.2-1.8 3.3 3.3zm-3.5-11.5h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1h-2l2 2h8z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-rtl.svg
new file mode 100644
index 00000000..2a92cbef
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/trashUndo-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g714">
+ <path d="M4 20.5l15.5-15.5 1 1-3 3-1 11h-8l-.2-1.8-3.3 3.3zm3.5-11.5h6l-5.5 5.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-ltr.svg
new file mode 100644
index 00000000..66c024a9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-rtl.svg
new file mode 100644
index 00000000..07cecbfe
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/unLock-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/unStar.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/unStar.svg
new file mode 100644
index 00000000..724d1901
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/unStar.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-a.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-a.svg
new file mode 100644
index 00000000..dd6dde36
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-a.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="underline-a">
+ <path id="a" d="M14.424 16h2.076l-3.463-10h-2.077l-3.46 10h2.077l.627-2h3.604l.616 2zm-3.921-3.623l1.496-4.379 1.511 4.379h-3z"/>
+ <path id="underline" d="M7 17h10v1h-10v-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-u.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-u.svg
new file mode 100644
index 00000000..fbd7c147
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/underline-u.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="underline-u">
+ <path id="u" d="M8 6h2v5.959c-.104 1.707.695 2.002 2 2.041 1.777.062 2.002-.879 2-2.041v-5.959h2v6.123c0 1.279-.338 2.245-1.016 2.898-.672.651-1.666.979-2.98.979-1.32 0-2.319-.326-2.996-.979-.672-.653-1.008-1.619-1.008-2.898v-6.123"/>
+ <path id="underline" d="M7 17h10v1h-10v-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/upTriangle.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/upTriangle.svg
new file mode 100644
index 00000000..9e5e72f6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/upTriangle.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 8l8 10h-16z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/wikiText.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/wikiText.svg
new file mode 100644
index 00000000..eebd9b1a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/wikiText.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M23 5h-4v2h2v10h-2v2h4z"/>
+ </g>
+ <g>
+ <path d="M18 5h-4v2h2v10h-2v2h4z"/>
+ </g>
+ <g>
+ <path d="M2 5h4v2h-2v10h2v2h-4z"/>
+ </g>
+ <g>
+ <path d="M7 5h4v2h-2v10h2v2h-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/icons/window.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/window.svg
new file mode 100644
index 00000000..cd3b76c2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/icons/window.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="window">
+ <path id="title" d="M7 10h10v1h-10z"/>
+ <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/alert.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/alert.svg
new file mode 100644
index 00000000..d9dc6a87
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/alert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="alert">
+ <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-down.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-down.svg
new file mode 100644
index 00000000..bfa8ef0b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-down.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="down">
+ <path id="arrow" d="M2 3l3.5 6 3.5-6z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-ltr.svg
new file mode 100644
index 00000000..aeca27a9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="ltr">
+ <path id="arrow" d="M3 9v-7l6 3.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-rtl.svg
new file mode 100644
index 00000000..eba00995
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="rtl">
+ <path id="arrow" d="M3 5.5l6 3.5v-7z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-up.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-up.svg
new file mode 100644
index 00000000..4b01bb02
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/arrow-up.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="up">
+ <path id="arrow" d="M5.5 2l-3.5 6h7z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/required.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/required.svg
new file mode 100644
index 00000000..969fa2d8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/required.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="required">
+ <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-ltr.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-ltr.svg
new file mode 100644
index 00000000..266349ed
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="search">
+ <path id="path3051" d="M10.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-rtl.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-rtl.svg
new file mode 100644
index 00000000..5368fd7c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/indicators/search-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="search">
+ <path id="path3051" d="M1.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/textures/pending.gif b/vendor/oojs/oojs-ui/src/themes/apex/images/textures/pending.gif
new file mode 100644
index 00000000..1194eed2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/textures/pending.gif
Binary files differ
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/images/textures/transparency.svg b/vendor/oojs/oojs-ui/src/themes/apex/images/textures/transparency.svg
new file mode 100644
index 00000000..63a0b57c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/textures/transparency.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="16" viewBox="0, 0, 16, 16">
+ <g id="transparency">
+ <path d="M0,0 L8,0 L8,8 L0,8 z" fill="#CCCCCC"/>
+ <path d="M8,8 L16,8 L16,16 L8,16 z" fill="#CCCCCC"/>
+ <path d="M8,0 L16,0 L16,8 L8,8 z" fill="#FFFFFF"/>
+ <path d="M0,8 L8,8 L8,16 L0,16 z" fill="#FFFFFF"/>
+ </g>
+</svg>
diff --git a/resources/lib/oojs-ui/images/toolbar-shadow.png b/vendor/oojs/oojs-ui/src/themes/apex/images/toolbar-shadow.png
index 97e8d13d..97e8d13d 100644
--- a/resources/lib/oojs-ui/images/toolbar-shadow.png
+++ b/vendor/oojs/oojs-ui/src/themes/apex/images/toolbar-shadow.png
Binary files differ
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/indicators.json b/vendor/oojs/oojs-ui/src/themes/apex/indicators.json
new file mode 100644
index 00000000..0a9d1d26
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/indicators.json
@@ -0,0 +1,22 @@
+{
+ "prefix": "oo-ui-indicator",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "alert": { "file": "images/indicators/alert.svg" },
+ "up": { "file": "images/indicators/arrow-up.svg" },
+ "down": { "file": "images/indicators/arrow-down.svg" },
+ "next": { "file": {
+ "ltr": "images/indicators/arrow-ltr.svg",
+ "rtl": "images/indicators/arrow-rtl.svg"
+ } },
+ "previous": { "file": {
+ "ltr": "images/indicators/arrow-rtl.svg",
+ "rtl": "images/indicators/arrow-ltr.svg"
+ } },
+ "required": { "file": "images/indicators/required.svg" },
+ "search": { "file": {
+ "ltr": "images/indicators/search-ltr.svg",
+ "rtl": "images/indicators/search-rtl.svg"
+ } }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/layouts.less b/vendor/oojs/oojs-ui/src/themes/apex/layouts.less
new file mode 100644
index 00000000..b86aa010
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/layouts.less
@@ -0,0 +1,135 @@
+@import 'common';
+
+.theme-oo-ui-layout () {}
+
+.theme-oo-ui-bookletLayout () {
+ &-stackLayout {
+ > .oo-ui-panelLayout {
+ padding: 1.5em;
+ }
+ }
+
+ &-outlinePanel {
+ border-right: 1px solid #ddd;
+
+ > .oo-ui-outlineControlsWidget {
+ box-shadow: 0 0 0.25em rgba(0,0,0,0.25);
+ }
+ }
+}
+
+.theme-oo-ui-indexLayout () {
+ &-stackLayout {
+ > .oo-ui-panelLayout {
+ padding: 1.5em;
+ }
+ }
+}
+
+.theme-oo-ui-fieldLayout () {
+ margin-bottom: 1em;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ &.oo-ui-fieldLayout-align-left,
+ &.oo-ui-fieldLayout-align-right {
+ &.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding-top: 0.5em;
+ margin-right: 5%;
+ width: 35%;
+ }
+
+ > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ width: 60%;
+ }
+ }
+
+ &.oo-ui-fieldLayout-align-inline {
+ &.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding: 0.5em;
+ }
+
+ > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ padding: 0.5em 0;
+ }
+ }
+
+ &.oo-ui-fieldLayout-align-top {
+ &.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding: 0.5em 0;
+ }
+ }
+
+ > .oo-ui-popupButtonWidget {
+ .oo-ui-inline-spacing(0);
+ margin-top: 0.25em;
+ }
+
+ &-disabled .oo-ui-labelElement-label {
+ color: #ccc;
+ }
+}
+
+.theme-oo-ui-actionFieldLayout () {}
+
+.theme-oo-ui-fieldsetLayout () {
+ margin: 0;
+ padding: 0;
+ border: none;
+
+ + .oo-ui-fieldsetLayout,
+ + .oo-ui-formLayout {
+ margin-top: 2em;
+ }
+
+ > .oo-ui-labelElement-label {
+ font-size: 1.1em;
+ margin-bottom: 0.5em;
+ padding: 0.25em 0;
+ font-weight: bold;
+ }
+
+ &.oo-ui-iconElement > .oo-ui-labelElement-label {
+ padding-left: 2em;
+ line-height: 1.8em;
+ }
+
+ &.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ left: 0;
+ top: 0.25em;
+ width: @icon-size;
+ height: @icon-size;
+ }
+
+ > .oo-ui-popupButtonWidget {
+ .oo-ui-inline-spacing(0);
+ }
+}
+
+.theme-oo-ui-formLayout () {
+ + .oo-ui-fieldsetLayout,
+ + .oo-ui-formLayout {
+ margin-top: 2em;
+ }
+}
+
+.theme-oo-ui-menuLayout () {}
+
+.theme-oo-ui-panelLayout () {
+ &-padded {
+ padding: 1.25em;
+ }
+
+ &-framed {
+ border-radius: 0.5em;
+ box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
+ }
+}
+
+.theme-oo-ui-cardLayout () {}
+
+.theme-oo-ui-pageLayout () {}
+
+.theme-oo-ui-stackLayout () {}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/textures.json b/vendor/oojs/oojs-ui/src/themes/apex/textures.json
new file mode 100644
index 00000000..e90730ab
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/textures.json
@@ -0,0 +1,8 @@
+{
+ "prefix": "oo-ui-texture",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "pending": { "file": "images/textures/pending.gif" },
+ "transparency": { "file": "images/textures/transparency.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/tools.less b/vendor/oojs/oojs-ui/src/themes/apex/tools.less
new file mode 100644
index 00000000..913bb516
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/tools.less
@@ -0,0 +1,422 @@
+@import 'common';
+
+.theme-oo-ui-toolbar () {
+ &-bar {
+ border-bottom: 1px solid #ccc;
+ .oo-ui-vertical-gradient(#fff, #F1F7FB);
+
+ .oo-ui-toolbar-bar {
+ border: none;
+ background: none;
+ }
+ }
+
+ &-actions {
+ > .oo-ui-buttonElement {
+ margin-top: 0.4em;
+ margin-bottom: 0.4em;
+ }
+
+ > .oo-ui-buttonElement:last-child {
+ margin-right: 0.5em;
+ }
+ }
+
+ &-shadow {
+ .oo-ui-background-image('@{oo-ui-default-image-path}/toolbar-shadow.png');
+ bottom: -9px;
+ height: 9px;
+ opacity: 0.5;
+ .oo-ui-transition(opacity 500ms ease-in-out);
+ }
+}
+
+.theme-oo-ui-tool () {}
+
+.theme-oo-ui-popupTool () {
+ .oo-ui-popupWidget {
+ /* @noflip */
+ margin-left: 1.25em;
+ }
+}
+
+.theme-oo-ui-toolGroupTool () {
+ > .oo-ui-popupToolGroup {
+ border: 0;
+ border-radius: 0;
+ margin: 0;
+ }
+
+ // Like .oo-ui-tool in barToolGroup
+ &:first-child > .oo-ui-popupToolGroup {
+ border-top-left-radius: 0.3125em;
+ border-bottom-left-radius: 0.3125em;
+ }
+
+ &:last-child > .oo-ui-popupToolGroup {
+ border-top-right-radius: 0.3125em;
+ border-bottom-right-radius: 0.3125em;
+ }
+
+ // Like .oo-ui-tool-link in barToolGroup
+ > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle {
+ height: 1.875em;
+ padding: 0.3125em;
+
+ .oo-ui-iconElement-icon {
+ height: 1.875em;
+ width: 1.875em;
+ }
+ }
+
+ > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle {
+ .oo-ui-labelElement-label {
+ line-height: 2.1em; // 0.5em less
+ }
+ }
+}
+
+.theme-oo-ui-toolGroup () {
+ margin: 0.375em;
+ border-radius: 0.3125em;
+ border: 1px solid transparent;
+ .oo-ui-transition(border-color 300ms ease-in-out);
+
+ .oo-ui-toolbar-narrow & {
+ + .oo-ui-toolGroup {
+ margin-left: 0;
+ }
+ }
+
+ &.oo-ui-widget-enabled {
+ &:hover {
+ border-color: rgba(0,0,0,0.1);
+ }
+
+ .oo-ui-tool-link .oo-ui-tool-title {
+ color: #000;
+ }
+ }
+}
+
+.theme-oo-ui-barToolGroup () {
+ > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ margin: -1px 0 -1px -1px;
+ border: 1px solid transparent;
+
+ &:first-child {
+ border-top-left-radius: 0.3125em;
+ border-bottom-left-radius: 0.3125em;
+ }
+
+ &:last-child {
+ margin-right: -1px;
+ border-top-right-radius: 0.3125em;
+ border-bottom-right-radius: 0.3125em;
+ }
+
+ > .oo-ui-tool-link {
+ height: 1.875em;
+ padding: 0.3125em;
+
+ .oo-ui-iconElement-icon {
+ height: 1.875em;
+ width: 1.875em;
+ }
+
+ .oo-ui-tool-title {
+ line-height: 2.1em; // 0.5em less
+ }
+ }
+ }
+
+ &.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ &.oo-ui-widget-enabled:hover {
+ border-color: rgba(0,0,0,0.2);
+ }
+
+ &.oo-ui-tool-active {
+ &.oo-ui-widget-enabled {
+ border-color: rgba(0,0,0,0.2);
+ box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
+ .oo-ui-vertical-gradient(#F1F7FB, #fff);
+ }
+
+ &.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-left-color: rgba(0,0,0,0.1);
+ }
+ }
+
+ &.oo-ui-widget-disabled > .oo-ui-tool-link {
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+
+ &.oo-ui-widget-enabled {
+ &:hover > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 1;
+ }
+ }
+ }
+
+ &.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ > .oo-ui-tool-link {
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+ }
+}
+
+.theme-oo-ui-popupToolGroup () {
+ height: 2.5em;
+ min-width: 2.5em;
+
+ .oo-ui-toolbar-narrow & {
+ min-width: 1.875em;
+ }
+
+ &.oo-ui-iconElement {
+ min-width: 3.125em;
+
+ .oo-ui-toolbar-narrow & {
+ min-width: 2.5em;
+ }
+ }
+
+ &.oo-ui-indicatorElement.oo-ui-iconElement {
+ min-width: 4.375em;
+
+ .oo-ui-toolbar-narrow & {
+ min-width: 3.75em;
+ }
+ }
+
+ &.oo-ui-labelElement {
+ .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ line-height: 2.6em;
+ margin: 0 1em;
+
+ .oo-ui-toolbar-narrow & {
+ margin: 0 0.5em;
+ }
+ }
+
+ &.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+
+ .oo-ui-toolbar-narrow & {
+ margin-left: 2.5em;
+ }
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-right: 2.25em;
+
+ .oo-ui-toolbar-narrow & {
+ margin-right: 1.75em;
+ }
+ }
+ }
+
+ &-handle {
+ .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ height: 0.9375em;
+ margin: 0.78125em;
+ top: 0;
+ right: 0;
+
+ .oo-ui-toolbar-narrow & {
+ right: -0.3125em;
+ }
+ }
+ .oo-ui-iconElement-icon {
+ width: 1.875em;
+ height: 1.875em;
+ margin: 0.3125em;
+ top: 0;
+ left: 0.3125em;
+
+ .oo-ui-toolbar-narrow & {
+ left: 0;
+ }
+ }
+ }
+
+ &-header {
+ line-height: 2.6em;
+ margin: 0 0.6em;
+ font-weight: bold;
+ }
+
+ &-active.oo-ui-widget-enabled {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
+
+ .oo-ui-vertical-gradient(#F1F7FB, #fff);
+ }
+
+ .oo-ui-toolGroup-tools {
+ top: 2.5em;
+ margin: 0 -1px;
+ border: 1px solid #ccc;
+ background-color: white;
+ box-shadow: 0 0.3125em 1.25em rgba(0,0,0,0.25);
+ }
+
+ .oo-ui-tool-link {
+ padding: 0.3125em 0 0.3125em 0.3125em;
+
+ .oo-ui-iconElement-icon {
+ height: 1.875em;
+ width: 1.875em;
+ min-width: 1.875em;
+ }
+
+ .oo-ui-tool-title {
+ padding-left: 0.5em;
+ }
+
+ .oo-ui-tool-accel,
+ .oo-ui-tool-title {
+ line-height: 2em;
+ }
+
+ .oo-ui-tool-accel {
+ color: #888;
+ }
+ }
+}
+
+.theme-oo-ui-listToolGroup () {
+ .oo-ui-toolGroup-tools {
+ padding: 0.3125em;
+ }
+
+ &.oo-ui-popupToolGroup-active {
+ border-color: rgba(0,0,0,0.2);
+ }
+
+ .oo-ui-tool {
+ border: 1px solid transparent;
+ margin: -1px 0;
+ padding: 0 0.625em 0 0;
+
+ &-active {
+ &.oo-ui-widget-enabled {
+ border-color: rgba(0,0,0,0.1);
+ box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
+ .oo-ui-vertical-gradient(#F1F7FB, #fff);
+
+ + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-top-color: rgba(0,0,0,0.1);
+ }
+ &:hover {
+ border-color: rgba(0,0,0,0.2);
+ }
+ }
+ }
+
+ &.oo-ui-widget-enabled {
+ &:hover {
+ border-color: rgba(0,0,0,0.2);
+ }
+ &:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 1;
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-tool-link {
+ .oo-ui-tool-title {
+ color: #ccc;
+ }
+
+ .oo-ui-tool-accel {
+ color: #ddd;
+ }
+
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ color: #ccc;
+ .oo-ui-indicatorElement-indicator,
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+}
+
+.theme-oo-ui-menuToolGroup () {
+ border-color: rgba(0,0,0,0.1);
+
+ .oo-ui-popupToolGroup-handle {
+ min-width: 10em;
+
+ .oo-ui-toolbar-narrow & {
+ min-width: 8.125em;
+ }
+ }
+
+ .oo-ui-toolGroup-tools {
+ padding: 0.3125em 0 0.3125em 0;
+ }
+
+ &.oo-ui-widget-enabled {
+ &:hover {
+ border-color: rgba(0,0,0,0.2);
+ }
+ }
+
+ &.oo-ui-popupToolGroup-active {
+ border-color: rgba(0,0,0,0.25);
+ }
+
+ .oo-ui-tool {
+ padding: 0 1.25em 0 0.3125em;
+
+ &-link {
+ .oo-ui-iconElement-icon {
+ background-image: none;
+ }
+ }
+
+ &-active .oo-ui-tool-link .oo-ui-iconElement-icon {
+ .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/check');
+ }
+
+ &.oo-ui-widget-enabled {
+ &:hover {
+ background-color: #e1f3ff;
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-tool-link .oo-ui-tool-title {
+ color: #ccc;
+ }
+
+ .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ color: #ccc;
+ border-color: rgba(0,0,0,0.05);
+
+ .oo-ui-indicatorElement-indicator,
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/widgets.less b/vendor/oojs/oojs-ui/src/themes/apex/widgets.less
new file mode 100644
index 00000000..f415b6dd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/widgets.less
@@ -0,0 +1,797 @@
+@import 'common';
+
+.theme-oo-ui-widget () {}
+
+.theme-oo-ui-outlineControlsWidget () {
+ height: 3em;
+ background-color: #fff;
+
+ &-items,
+ &-movers {
+ height: 2em;
+ margin: 0.5em 0.5em 0.5em 0;
+ padding: 0;
+ }
+
+ > .oo-ui-iconElement-icon {
+ width: 1.5em;
+ height: 2em;
+ margin: 0.5em 0 0.5em 0.5em;
+ opacity: 0.2;
+ }
+}
+
+.theme-oo-ui-toggleWidget () {}
+
+.theme-oo-ui-buttonGroupWidget () {
+ display: inline-block;
+ white-space: nowrap;
+ border-radius: 0.3em;
+
+ .oo-ui-inline-spacing(0.5em);
+ .oo-ui-buttonElement {
+ .oo-ui-inline-spacing(0);
+ }
+
+ .oo-ui-buttonElement-framed {
+ .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-left: -1px;
+ }
+
+ &:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: 0.3em;
+ border-top-left-radius: 0.3em;
+ margin-left: 0;
+ }
+
+ &:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: 0.3em;
+ border-top-right-radius: 0.3em;
+ }
+ }
+}
+
+.theme-oo-ui-buttonWidget () {
+ .oo-ui-inline-spacing(0.5em);
+}
+
+.theme-oo-ui-actionWidget () {
+ &.oo-ui-pendingElement-pending {
+ .oo-ui-background-image('@{oo-ui-default-image-path}/textures/pending.gif');
+ }
+}
+
+.theme-oo-ui-popupButtonWidget () {
+ &.oo-ui-buttonElement-frameless > .oo-ui-popupWidget {
+ // Compensate for icon being inset
+ /* @noflip */
+ left: 1em;
+ }
+
+ &.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+ // Compensate for icon being inset
+ /* @noflip */
+ left: 1.25em;
+ }
+}
+
+.theme-oo-ui-toggleButtonWidget () {
+ .oo-ui-inline-spacing(0.5em);
+}
+
+.theme-oo-ui-iconWidget () {
+ line-height: 2.5em;
+ height: @icon-size;
+ width: @icon-size;
+
+ &.oo-ui-widget-disabled {
+ opacity: 0.2;
+ }
+}
+
+.theme-oo-ui-indicatorWidget () {
+ line-height: 2.5em;
+ height: @indicator-size;
+ width: @indicator-size;
+ margin: @indicator-size / 2;
+
+ &.oo-ui-widget-disabled {
+ opacity: 0.2;
+ }
+}
+
+.theme-oo-ui-dropdownWidget () {
+ margin: 0.25em 0;
+ width: 100%;
+ max-width: 50em;
+
+ .oo-ui-inline-spacing(0.5em);
+
+ &-handle {
+ height: 2.5em;
+ border: 1px solid rgba(0,0,0,0.1);
+ border-radius: 0.25em;
+
+ &:hover {
+ border-color: rgba(0,0,0,0.2);
+ }
+
+ .oo-ui-indicatorElement-indicator {
+ right: 0;
+ }
+
+ .oo-ui-iconElement-icon {
+ left: 0.25em;
+ }
+
+ .oo-ui-labelElement-label {
+ line-height: 2.5em;
+ margin: 0 0.5em;
+ }
+
+ .oo-ui-indicatorElement-indicator {
+ top: 0;
+ width: @indicator-size;
+ height: @indicator-size;
+ margin: 0.775em;
+ }
+
+ .oo-ui-iconElement-icon {
+ top: 0;
+ width: @icon-size;
+ height: @icon-size;
+ margin: 0.3em;
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-dropdownWidget-handle {
+ color: #ccc;
+ text-shadow: 0 1px 1px #fff;
+ border-color: #ddd;
+ background-color: #f3f3f3;
+ }
+ .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+ }
+ }
+
+ &.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ margin-right: 2em;
+ }
+}
+
+.theme-oo-ui-inputWidget () {
+ .oo-ui-inline-spacing(0.5em);
+}
+
+.theme-oo-ui-buttonInputWidget () {}
+
+.theme-oo-ui-checkboxInputWidget () {}
+
+.theme-oo-ui-dropdownInputWidget () {
+ width: 100%;
+ max-width: 50em;
+
+ select {
+ height: 2.5em;
+ padding: 0.5em;
+ font-size: inherit;
+ font-family: inherit;
+ border: 1px solid rgba(0,0,0,0.1);
+ border-radius: 0.25em;
+ }
+
+ &.oo-ui-widget-enabled {
+ select:hover,
+ select:focus {
+ border-color: rgba(0,0,0,0.2);
+ outline: none;
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ select {
+ color: #ccc;
+ border-color: #ddd;
+ background-color: #f3f3f3;
+ }
+ }
+}
+
+.theme-oo-ui-radioInputWidget () {}
+
+.theme-oo-ui-textInputWidget () {
+ width: 100%;
+ max-width: 50em;
+
+ input,
+ textarea {
+ padding: 0.5em;
+ font-size: inherit;
+ font-family: inherit;
+ background-color: #fff;
+ color: black;
+ border: 1px solid #ccc;
+ box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
+ border-radius: 0.25em;
+ .oo-ui-transition(border-color 200ms, box-shadow 200ms);
+ }
+
+ &-decorated {
+ input,
+ textarea {
+ padding-left: 2em;
+ }
+ }
+
+ &-icon {
+ width: 2em;
+ }
+
+ &.oo-ui-widget-enabled {
+ input:focus,
+ textarea:focus {
+ outline: none;
+ border-color: #a7dcff;
+ box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
+ }
+
+ input[readonly],
+ textarea[readonly] {
+ color: #777;
+ }
+
+ &.oo-ui-flaggedElement-invalid {
+ input,
+ textarea {
+ background-color: #fdd;
+ }
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ input,
+ textarea {
+ color: #ccc;
+ text-shadow: 0 1px 1px #fff;
+ border-color: #ddd;
+ background-color: #f3f3f3;
+ }
+ .oo-ui-iconElement-icon,
+ .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+ }
+ .oo-ui-labelElement-label {
+ color: #ddd;
+ text-shadow: 0 1px 1px #fff;
+ }
+ }
+
+ &.oo-ui-pendingElement-pending {
+ input,
+ textarea {
+ background-color: transparent;
+ .oo-ui-background-image('@{oo-ui-default-image-path}/textures/pending.gif');
+ }
+ }
+
+ &.oo-ui-iconElement {
+ input,
+ textarea {
+ padding-left: 2em;
+ }
+
+ .oo-ui-iconElement-icon {
+ width: @icon-size;
+ margin-left: 0.1em;
+ }
+ }
+
+ &.oo-ui-indicatorElement {
+ input,
+ textarea {
+ padding-right: 1.5em;
+ }
+
+ .oo-ui-indicatorElement-indicator {
+ width: @indicator-size;
+ margin-right: 0.775em;
+ }
+ }
+
+ > .oo-ui-labelElement-label {
+ padding: 0.4em;
+ line-height: 1.5em;
+ color: #888;
+ }
+
+ &-labelPosition-after {
+ &.oo-ui-indicatorElement > .oo-ui-labelElement-label {
+ margin-right: 1.6em;
+ }
+ }
+
+ &-labelPosition-before {
+ &.oo-ui-iconElement > .oo-ui-labelElement-label {
+ margin-left: 2.1em;
+ }
+ }
+}
+
+.theme-oo-ui-comboBoxWidget () {
+ width: 100%;
+ max-width: 50em;
+
+ .oo-ui-inline-spacing(0.5em);
+
+ &-handle {
+ border: 1px solid rgba(0,0,0,0.1);
+ border-radius: 0.25em;
+
+ &:hover {
+ border-color: rgba(0,0,0,0.2);
+ }
+ }
+
+ &.oo-ui-widget-disabled,
+ &-empty {
+ .oo-ui-textInputWidget.oo-ui-indicatorElement {
+ .oo-ui-indicatorElement-indicator {
+ cursor: default;
+ opacity: 0.2;
+ }
+ }
+ }
+
+ > .oo-ui-selectWidget {
+ margin-top: -3px
+ }
+}
+
+.theme-oo-ui-labelWidget () {
+ padding: 0.5em 0;
+}
+
+.theme-oo-ui-optionWidget () {
+ padding: 0.25em 0.5em;
+ border: none;
+
+ &-highlighted {
+ background-color: #e1f3ff;
+ }
+
+ .oo-ui-labelElement-label {
+ line-height: 1.5em;
+ }
+
+ .oo-ui-selectWidget-depressed &-selected {
+ background-color: #a7dcff;
+ }
+
+ .oo-ui-selectWidget-pressed &-pressed,
+ .oo-ui-selectWidget-pressed &-pressed&-highlighted,
+ .oo-ui-selectWidget-pressed &-pressed&-highlighted&-selected {
+ background-color: #a7dcff;
+ }
+
+ &.oo-ui-widget-disabled {
+ color: #ccc;
+ }
+}
+
+.theme-oo-ui-decoratedOptionWidget () {
+ padding: 0.5em 2em 0.5em 3em;
+
+ &.oo-ui-iconElement .oo-ui-iconElement-icon,
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ top: 0;
+ height: 100%;
+ }
+
+ &.oo-ui-iconElement .oo-ui-iconElement-icon {
+ width: @icon-size;
+ left: 0.5em;
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ width: @indicator-size;
+ right: 0.5em;
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-iconElement-icon,
+ .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+ }
+ }
+}
+
+.theme-oo-ui-buttonOptionWidget () {
+ padding: 0;
+ background-color: transparent;
+
+ .oo-ui-buttonElement-button {
+ height: @icon-size;
+ }
+
+ &.oo-ui-iconElement .oo-ui-iconElement-icon {
+ margin-top: 0;
+ }
+
+ &.oo-ui-optionWidget-selected,
+ &.oo-ui-optionWidget-pressed,
+ &.oo-ui-optionWidget-highlighted {
+ background-color: transparent;
+ }
+}
+
+.theme-oo-ui-radioOptionWidget () {
+ padding: 0;
+ background-color: transparent;
+
+ &.oo-ui-optionWidget-selected,
+ &.oo-ui-optionWidget-pressed,
+ &.oo-ui-optionWidget-highlighted {
+ background-color: transparent;
+ }
+
+ &.oo-ui-labelElement .oo-ui-labelElement-label {
+ padding-left: 0.5em;
+ }
+
+ .oo-ui-radioInputWidget {
+ margin-right: 0;
+ }
+}
+
+.theme-oo-ui-menuOptionWidget () {
+ &.oo-ui-optionWidget {
+ &-selected {
+ background-color: transparent;
+ }
+ &-highlighted,
+ &-highlighted.oo-ui-optionWidget-selected {
+ background-color: #e1f3ff;
+ }
+ }
+}
+
+.theme-oo-ui-menuSectionOptionWidget () {
+ padding: 0.33em 0.75em;
+ color: #888;
+}
+
+.theme-oo-ui-outlineOptionWidget () {
+ font-size: 1.1em;
+ padding: 0.75em;
+
+ &.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ opacity: 0.5;
+ }
+
+ &-level-0 {
+ padding-left: 3.5em;
+
+ .oo-ui-iconElement-icon {
+ left: 1em;
+ }
+ }
+ &-level-1 {
+ padding-left: 5em;
+
+ .oo-ui-iconElement-icon {
+ left: 2.5em;
+ }
+ }
+
+ &-level-2 {
+ padding-left: 6.5em;
+
+ .oo-ui-iconElement-icon {
+ left: 4em;
+ }
+ }
+
+ .oo-ui-selectWidget-depressed &.oo-ui-optionWidget-selected {
+ background-color: #a7dcff;
+ text-shadow: 0 1px 1px rgba(255,255,255,0.5);
+ }
+
+ &.oo-ui-flaggedElement-important {
+ font-weight: bold;
+ }
+
+ &.oo-ui-flaggedElement-placeholder {
+ font-style: italic;
+ }
+
+ &.oo-ui-flaggedElement-empty {
+ .oo-ui-iconElement-icon {
+ opacity: 0.5;
+ }
+ .oo-ui-labelElement-label {
+ color: #777;
+ }
+ }
+}
+
+.theme-oo-ui-tabOptionWidget () {
+ padding: 0.5em 1em;
+ margin: 0.5em 0 0 0.75em;
+ border: 1px solid transparent;
+ border-bottom: none;
+ border-top-left-radius: 0.5em;
+ border-top-right-radius: 0.5em;
+
+ &.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ opacity: 0.5;
+ }
+
+ .oo-ui-selectWidget-pressed &.oo-ui-optionWidget-pressed {
+ background-color: transparent;
+ }
+
+ &.oo-ui-widget-enabled {
+ &:hover {
+ background-color: rgba(255, 255, 255, 0.2);
+ border-color: #ddd;
+ }
+
+ &:active {
+ background-color: #fff;
+ border-color: #ddd;
+ }
+ }
+
+ .oo-ui-selectWidget-pressed &.oo-ui-optionWidget-selected,
+ .oo-ui-selectWidget-depressed &.oo-ui-optionWidget-selected,
+ &.oo-ui-optionWidget-selected:hover {
+ background-color: #fff;
+ border-color: #ddd;
+ }
+}
+
+.theme-oo-ui-popupWidget () {
+ &-popup {
+ border: 1px solid #ccc;
+ border-radius: 0.25em;
+ background-color: #fff;
+ box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
+ }
+
+ @anchor-size: 6px;
+
+ &-anchored {
+ .oo-ui-popupWidget-popup {
+ margin-top: @anchor-size;
+ }
+
+ .oo-ui-popupWidget-anchor:before,
+ .oo-ui-popupWidget-anchor:after {
+ content: "";
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-style: solid;
+ border-color: transparent;
+ border-top: 0;
+ }
+
+ .oo-ui-popupWidget-anchor:before {
+ bottom: -@anchor-size - 1px;
+ left: -@anchor-size;
+ border-bottom-color: #aaa;
+ border-width: @anchor-size + 1px;
+ }
+
+ .oo-ui-popupWidget-anchor:after {
+ bottom: -@anchor-size - 1px;
+ left: -@anchor-size + 1px;
+ border-bottom-color: #fff;
+ border-width: @anchor-size;
+ }
+ }
+
+ &-transitioning .oo-ui-popupWidget-popup {
+ .oo-ui-transition(
+ width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out
+ );
+ }
+
+ &-head {
+ height: 2.5em;
+
+ .oo-ui-buttonWidget {
+ margin: 0.25em;
+ }
+
+ .oo-ui-labelElement-label {
+ margin: 0.75em 1em;
+ }
+ }
+
+ &-body-padded {
+ padding: 0 1em;
+ }
+}
+
+.theme-oo-ui-searchWidget () {
+ &-query {
+ height: 4em;
+ padding: 0 1em;
+ box-shadow: 0 0 0.5em rgba(0,0,0,0.2);
+
+ .oo-ui-textInputWidget {
+ margin: 0.75em 0;
+ }
+ }
+
+ &-results {
+ top: 4em;
+ padding: 1em;
+ line-height: 0;
+ }
+}
+
+.theme-oo-ui-selectWidget () {}
+
+.theme-oo-ui-buttonSelectWidget () {
+ border-radius: 0.3em;
+
+ .oo-ui-inline-spacing(0.5em);
+
+ .oo-ui-buttonOptionWidget {
+ .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-left: -1px;
+ }
+
+ &:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: 0.3em;
+ border-top-left-radius: 0.3em;
+ margin-left: 0;
+ }
+
+ &:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: 0.3em;
+ border-top-right-radius: 0.3em;
+ }
+ }
+}
+
+.theme-oo-ui-radioSelectWidget () {
+ padding: 0.75em 0 0.5em 0;
+}
+
+.theme-oo-ui-menuSelectWidget () {
+ background: #fff;
+ margin-top: -1px;
+ border: 1px solid #ccc;
+ border-radius: 0 0 0.25em 0.25em;
+ box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
+}
+
+.theme-oo-ui-textInputMenuSelectWidget () {}
+
+.theme-oo-ui-outlineSelectWidget () {}
+
+.theme-oo-ui-tabSelectWidget () {
+ background-color: #eee;
+ box-shadow: inset 0 -0.015em 0.1em rgba(0, 0, 0, 0.1);
+}
+
+.theme-oo-ui-toggleSwitchWidget () {
+ @travelDistance: 2em;
+ height: 2em;
+ width: @travelDistance + 2em;
+ border-radius: 1em;
+ box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
+ border: 1px solid #ccc;
+
+ .oo-ui-inline-spacing(0.5em);
+
+ .oo-ui-vertical-gradient(#ddd, #fff);
+
+ &.oo-ui-widget-disabled {
+ opacity: 0.5;
+ }
+
+ &-grip {
+ top: 0.25em;
+ left: 0.25em;
+ width: 1.5em;
+ height: 1.5em;
+ margin-top: -1px;
+ border-radius: 1em;
+ box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
+ border: 1px #c9c9c9 solid;
+
+ .oo-ui-transition(left 200ms ease-in-out, margin-left 200ms ease-in-out);
+ .oo-ui-vertical-gradient(#fff, #ddd);
+ }
+
+ &.oo-ui-widget-enabled {
+ &:hover,
+ &:hover .oo-ui-toggleSwitchWidget-grip {
+ border-color: #aaa;
+ }
+ }
+
+ .oo-ui-toggleSwitchWidget-glow {
+ border-radius: 1em;
+ box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+
+ .oo-ui-transition(opacity 200ms ease-in-out);
+ .oo-ui-vertical-gradient(#b0d9ee, #eaf4fa);
+ }
+
+ .oo-ui-toggleWidget-on & {
+ &-glow {
+ opacity: 1;
+ }
+ &-grip {
+ left: @travelDistance + 0.25em;
+ margin-left: -2px;
+ }
+ }
+
+ .oo-ui-toggleWidget-off & {
+ &-glow {
+ display: block;
+ opacity: 0;
+ }
+ &-grip {
+ left: 0.25em;
+ margin-left: 0;
+ }
+ }
+}
+
+.theme-oo-ui-progressBarWidget () {
+ max-width: 50em;
+ border: 1px solid #ccc;
+ border-radius: 0.25em;
+ overflow: hidden;
+
+ &-bar {
+ height: 1em;
+ border-right: 1px solid #ccc;
+ .oo-ui-transition(width 200ms, margin-left 200ms);
+ .oo-ui-vertical-gradient(@progressive-gradient-start, @progressive-gradient-end);
+ }
+ &-indeterminate {
+ .oo-ui-progressBarWidget-bar {
+ .oo-ui-animation(oo-ui-progressBarWidget-slide 2s infinite linear);
+ width: 40%;
+ margin-left: -10%;
+ border-left: 1px solid @progressive-border;
+ }
+ }
+ &.oo-ui-widget-disabled {
+ opacity: 0.6;
+ }
+}
+
+.oo-ui-progressBarWidget-slide-frames () {
+ from { margin-left: -40%; }
+ to { margin-left: 100%; }
+}
+@-webkit-keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
+@-moz-keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
+@-ms-keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
+@-o-keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
+@keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
diff --git a/vendor/oojs/oojs-ui/src/themes/apex/windows.less b/vendor/oojs/oojs-ui/src/themes/apex/windows.less
new file mode 100644
index 00000000..0048c7ff
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/apex/windows.less
@@ -0,0 +1,307 @@
+@import 'common';
+
+.theme-oo-ui-window () {
+ background-color: transparent;
+ background-image: none;
+}
+
+.theme-oo-ui-dialog () {
+ &-content > .oo-ui-window-body {
+ box-shadow: 0 0 0.66em rgba(0,0,0,0.25);
+ }
+}
+
+.theme-oo-ui-messageDialog () {
+ &-content {
+ .oo-ui-window-body {
+ box-shadow: 0 0 0.33em rgba(0,0,0,0.33);
+ }
+ }
+
+ &-title,
+ &-message {
+ display: block;
+ text-align: center;
+ padding-top: 0.5em;
+ }
+
+ &-title {
+ font-size: 1.5em;
+ line-height: 1em;
+ color: #000;
+ }
+
+ &-message {
+ font-size: 0.9em;
+ line-height: 1.25em;
+ color: #666;
+
+ &-verbose {
+ font-size: 1.1em;
+ line-height: 1.5em;
+ text-align: left;
+ }
+ }
+
+ &-actions {
+ &-horizontal {
+ .oo-ui-actionWidget {
+ border-right: 1px solid #e5e5e5;
+
+ &:last-child {
+ border-right-width: 0;
+ }
+ }
+ }
+
+ &-vertical {
+ .oo-ui-actionWidget {
+ border-bottom: 1px solid #e5e5e5;
+
+ &:last-child {
+ border-bottom-width: 0;
+ }
+ }
+ }
+
+ .oo-ui-actionWidget {
+ height: 3.4em;
+
+ &.oo-ui-labelElement .oo-ui-labelElement-label {
+ text-align: center;
+ line-height: 3.4em;
+ padding: 0 2em;
+ }
+
+ &:hover {
+ background-color: rgba(0,0,0,0.05);
+ }
+
+ &:active {
+ background-color: rgba(0,0,0,0.1);
+ }
+
+ &.oo-ui-flaggedElement {
+ &-progressive {
+ &:hover {
+ background-color: rgba(8,126,204,0.05);
+ }
+
+ &:active {
+ background-color: rgba(8,126,204,0.1);
+ }
+
+ .oo-ui-labelElement-label {
+ font-weight: bold;
+ }
+ }
+
+ &-constructive {
+ &:hover {
+ background-color: rgba(118,171,54,0.05);
+ }
+
+ &:active {
+ background-color: rgba(118,171,54,0.1);
+ }
+ }
+
+ &-destructive {
+ &:hover {
+ background-color: rgba(212,83,83,0.05);
+ }
+
+ &:active {
+ background-color: rgba(212,83,83,0.1);
+ }
+ }
+ }
+ }
+ }
+}
+
+.theme-oo-ui-processDialog () {
+ &-content {
+ .oo-ui-window-head {
+ height: 3.4em;
+
+ &.oo-ui-pendingElement-pending {
+ .oo-ui-background-image('@{oo-ui-default-image-path}/textures/pending.gif');
+ }
+ }
+
+ .oo-ui-window-body {
+ top: 3.4em;
+ box-shadow: 0 0 0.33em rgba(0,0,0,0.33);
+ }
+ }
+
+ &-navigation {
+ position: relative;
+ height: 3.4em;
+ padding: 0 1em;
+ }
+
+ &-location {
+ padding: 0.75em 0;
+ height: @icon-size;
+ cursor: default;
+ text-align: center;
+ }
+
+ &-title {
+ font-weight: bold;
+ line-height: @icon-size;
+ }
+
+ &-actions {
+ &-safe,
+ &-primary,
+ &-other {
+ .oo-ui-actionWidget {
+ .oo-ui-buttonElement-button {
+ min-width: @icon-size;
+ min-height: @icon-size;
+ }
+
+ .oo-ui-labelElement-label {
+ line-height: @icon-size;
+ }
+
+ &.oo-ui-iconElement .oo-ui-iconElement-icon {
+ margin-top: -0.125em;
+ }
+
+ &.oo-ui-buttonElement-framed {
+ margin: 0.75em 0 0.75em 0.75em;
+ .oo-ui-buttonElement-button {
+ padding: 0 1em;
+ vertical-align: middle;
+ }
+ }
+ }
+ }
+
+ &-safe,
+ &-primary {
+ .oo-ui-actionWidget {
+ &:hover {
+ background-color: rgba(0,0,0,0.05);
+ }
+
+ &:active {
+ background-color: rgba(0,0,0,0.1);
+ }
+
+ &.oo-ui-buttonElement-framed {
+ margin: 0.75em;
+ .oo-ui-buttonElement-button {
+ /* Adjust for border so text aligns with title */
+ margin: -1px;
+ }
+ }
+
+ &.oo-ui-flaggedElement {
+ &-progressive {
+ &:hover {
+ background-color: rgba(8,126,204,0.05);
+ }
+
+ &:active {
+ background-color: rgba(8,126,204,0.1);
+ }
+
+ .oo-ui-labelElement-label {
+ font-weight: bold;
+ }
+ }
+
+ &-constructive {
+ &:hover {
+ background-color: rgba(118,171,54,0.05);
+ }
+
+ &:active {
+ background-color: rgba(118,171,54,0.1);
+ }
+ }
+
+ &-destructive {
+ &:hover {
+ background-color: rgba(212,83,83,0.05);
+ }
+
+ &:active {
+ background-color: rgba(212,83,83,0.1);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ > .oo-ui-window-frame {
+ min-height: 5em;
+ }
+
+ &-errors {
+ background-color: rgba(255,255,255,0.9);
+ padding: 3em 3em 1.5em 3em;
+ text-align: center;
+
+ .oo-ui-buttonWidget {
+ margin: 2em 1em 2em 1em;
+ }
+
+ &-title {
+ font-size: 1.5em;
+ color: #000;
+ margin-bottom: 2em;
+ }
+ }
+
+ &-error {
+ text-align: left;
+ margin: 1em;
+ padding: 1em;
+ border: 1px solid #ff9e9e;
+ background-color: #fff7f7;
+ border-radius: 0.25em;
+ }
+}
+
+.theme-oo-ui-windowManager () {
+ &-modal > .oo-ui-dialog {
+ background-color: rgba(255,255,255,0.5);
+ opacity: 0;
+
+ .oo-ui-transition(opacity 250ms ease-in-out);
+
+ > .oo-ui-window-frame {
+ top: 1em;
+ bottom: 1em;
+ background-color: #fff;
+
+ opacity: 0;
+ .oo-ui-transform(scale(0.5));
+ .oo-ui-transition(all 250ms ease-in-out);
+ }
+
+ &.oo-ui-window-ready {
+ /* Fade window overlay */
+ opacity: 1;
+
+ > .oo-ui-window-frame {
+ /* Fade frame */
+ opacity: 1;
+ .oo-ui-transform(scale(1));
+ }
+ }
+ }
+
+ &-modal&-floating > .oo-ui-dialog > .oo-ui-window-frame {
+ border: 1px solid #ccc;
+ border-radius: 0.5em;
+ box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/BlankTheme.js b/vendor/oojs/oojs-ui/src/themes/blank/BlankTheme.js
new file mode 100644
index 00000000..208b6a9c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/BlankTheme.js
@@ -0,0 +1,32 @@
+/**
+ * @class
+ * @extends {OO.ui.Theme}
+ *
+ * @constructor
+ */
+OO.ui.BlankTheme = function OoUiBlankTheme() {
+ // Parent constructor
+ OO.ui.BlankTheme.super.call( this );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.BlankTheme, OO.ui.Theme );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.BlankTheme.prototype.getElementClasses = function ( element ) {
+ // Parent method
+ var classes = OO.ui.BlankTheme.super.prototype.getElementClasses.call( this, element );
+
+ // Add classes to classes.on or classes.off
+
+ return classes;
+};
+
+/* Instantiation */
+
+OO.ui.theme = new OO.ui.BlankTheme();
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/common.less b/vendor/oojs/oojs-ui/src/themes/blank/common.less
new file mode 100644
index 00000000..f9ec869a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/common.less
@@ -0,0 +1,10 @@
+// Base variables and mixins
+@import '../../styles/common';
+
+// Theme variables
+
+@oo-ui-default-image-path: 'themes/blank/images';
+
+// Theme mixins
+
+// (add mixins here)
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/core.less b/vendor/oojs/oojs-ui/src/themes/blank/core.less
new file mode 100644
index 00000000..1c83a946
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/core.less
@@ -0,0 +1,12 @@
+// Base and theme variables and mixins
+@import 'common';
+
+// Theme rules
+@import 'elements';
+@import 'layouts';
+@import 'tools';
+@import 'widgets';
+@import 'windows';
+
+// Base rules
+@import '../../styles/core';
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/elements.less b/vendor/oojs/oojs-ui/src/themes/blank/elements.less
new file mode 100644
index 00000000..89b96648
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/elements.less
@@ -0,0 +1,29 @@
+@import 'common';
+
+.theme-oo-ui-element () {}
+
+.theme-oo-ui-buttonElement () {}
+
+.theme-oo-ui-clippableElement () {}
+
+.theme-oo-ui-draggableElement () {}
+
+.theme-oo-ui-flaggedElement () {}
+
+.theme-oo-ui-groupElement () {}
+
+.theme-oo-ui-draggableGroupElement () {}
+
+.theme-oo-ui-iconElement () {}
+
+.theme-oo-ui-indicatorElement () {}
+
+.theme-oo-ui-labelElement () {}
+
+.theme-oo-ui-lookupElement () {}
+
+.theme-oo-ui-popupElement () {}
+
+.theme-oo-ui-tabIndexedElement () {}
+
+.theme-oo-ui-titledElement () {}
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/images/icons/README.txt b/vendor/oojs/oojs-ui/src/themes/blank/images/icons/README.txt
new file mode 100644
index 00000000..129fbed2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/images/icons/README.txt
@@ -0,0 +1 @@
+Remove this file and add icon images here \ No newline at end of file
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/images/indicators/README.txt b/vendor/oojs/oojs-ui/src/themes/blank/images/indicators/README.txt
new file mode 100644
index 00000000..9ff30ec2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/images/indicators/README.txt
@@ -0,0 +1 @@
+Remove this file and add indicator images here \ No newline at end of file
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/images/textures/README.txt b/vendor/oojs/oojs-ui/src/themes/blank/images/textures/README.txt
new file mode 100644
index 00000000..6ca283de
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/images/textures/README.txt
@@ -0,0 +1 @@
+Remove this file and add texture images here \ No newline at end of file
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/layouts.less b/vendor/oojs/oojs-ui/src/themes/blank/layouts.less
new file mode 100644
index 00000000..93f677c7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/layouts.less
@@ -0,0 +1,26 @@
+@import 'common';
+
+.theme-oo-ui-layout () {}
+
+.theme-oo-ui-bookletLayout () {}
+
+.theme-oo-ui-indexLayout () {}
+
+.theme-oo-ui-fieldLayout () {}
+
+.theme-oo-ui-actionFieldLayout () {}
+
+.theme-oo-ui-fieldsetLayout () {}
+
+.theme-oo-ui-formLayout () {}
+
+.theme-oo-ui-menuLayout () {}
+
+.theme-oo-ui-panelLayout () {}
+
+.theme-oo-ui-cardLayout () {}
+
+.theme-oo-ui-pageLayout () {}
+
+.theme-oo-ui-stackLayout () {}
+
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/tools.less b/vendor/oojs/oojs-ui/src/themes/blank/tools.less
new file mode 100644
index 00000000..923b0ad6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/tools.less
@@ -0,0 +1,20 @@
+@import 'common';
+
+.theme-oo-ui-toolbar () {}
+
+.theme-oo-ui-tool () {}
+
+.theme-oo-ui-popupTool () {}
+
+.theme-oo-ui-toolGroupTool () {}
+
+.theme-oo-ui-toolGroup () {}
+
+.theme-oo-ui-barToolGroup () {}
+
+.theme-oo-ui-popupToolGroup () {}
+
+.theme-oo-ui-listToolGroup () {}
+
+.theme-oo-ui-menuToolGroup () {}
+
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/widgets.less b/vendor/oojs/oojs-ui/src/themes/blank/widgets.less
new file mode 100644
index 00000000..68c64cd8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/widgets.less
@@ -0,0 +1,77 @@
+@import 'common';
+
+.theme-oo-ui-widget () {}
+
+.theme-oo-ui-outlineControlsWidget () {}
+
+.theme-oo-ui-toggleWidget () {}
+
+.theme-oo-ui-buttonGroupWidget () {}
+
+.theme-oo-ui-buttonWidget () {}
+
+.theme-oo-ui-actionWidget () {}
+
+.theme-oo-ui-popupButtonWidget () {}
+
+.theme-oo-ui-toggleButtonWidget () {}
+
+.theme-oo-ui-iconWidget () {}
+
+.theme-oo-ui-indicatorWidget () {}
+
+.theme-oo-ui-dropdownWidget () {}
+
+.theme-oo-ui-inputWidget () {}
+
+.theme-oo-ui-buttonInputWidget () {}
+
+.theme-oo-ui-checkboxInputWidget () {}
+
+.theme-oo-ui-dropdownInputWidget () {}
+
+.theme-oo-ui-radioInputWidget () {}
+
+.theme-oo-ui-textInputWidget () {}
+
+.theme-oo-ui-comboBoxWidget () {}
+
+.theme-oo-ui-labelWidget () {}
+
+.theme-oo-ui-optionWidget () {}
+
+.theme-oo-ui-decoratedOptionWidget () {}
+
+.theme-oo-ui-buttonOptionWidget () {}
+
+.theme-oo-ui-radioOptionWidget () {}
+
+.theme-oo-ui-menuOptionWidget () {}
+
+.theme-oo-ui-menuSectionOptionWidget () {}
+
+.theme-oo-ui-outlineOptionWidget () {}
+
+.theme-oo-ui-tabOptionWidget () {}
+
+.theme-oo-ui-popupWidget () {}
+
+.theme-oo-ui-searchWidget () {}
+
+.theme-oo-ui-selectWidget () {}
+
+.theme-oo-ui-buttonSelectWidget () {}
+
+.theme-oo-ui-radioSelectWidget () {}
+
+.theme-oo-ui-menuSelectWidget () {}
+
+.theme-oo-ui-textInputMenuSelectWidget () {}
+
+.theme-oo-ui-outlineSelectWidget () {}
+
+.theme-oo-ui-tabSelectWidget () {}
+
+.theme-oo-ui-toggleSwitchWidget () {}
+
+.theme-oo-ui-progressBarWidget () {}
diff --git a/vendor/oojs/oojs-ui/src/themes/blank/windows.less b/vendor/oojs/oojs-ui/src/themes/blank/windows.less
new file mode 100644
index 00000000..35c0b40a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/blank/windows.less
@@ -0,0 +1,11 @@
+@import 'common';
+
+.theme-oo-ui-window () {}
+
+.theme-oo-ui-dialog () {}
+
+.theme-oo-ui-messageDialog () {}
+
+.theme-oo-ui-processDialog () {}
+
+.theme-oo-ui-windowManager () {}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/MediaWikiTheme.js b/vendor/oojs/oojs-ui/src/themes/mediawiki/MediaWikiTheme.js
new file mode 100644
index 00000000..be2371bd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/MediaWikiTheme.js
@@ -0,0 +1,56 @@
+/**
+ * @class
+ * @extends OO.ui.Theme
+ *
+ * @constructor
+ */
+OO.ui.MediaWikiTheme = function OoUiMediaWikiTheme() {
+ // Parent constructor
+ OO.ui.MediaWikiTheme.super.call( this );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.MediaWikiTheme, OO.ui.Theme );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
+ // Parent method
+ var variant,
+ variants = {
+ warning: false,
+ invert: false,
+ progressive: false,
+ constructive: false,
+ destructive: false
+ },
+ // Parent method
+ classes = OO.ui.MediaWikiTheme.super.prototype.getElementClasses.call( this, element ),
+ isFramed;
+
+ if ( element.supports( [ 'hasFlag' ] ) ) {
+ isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed();
+ if ( isFramed && ( element.isDisabled() || element.hasFlag( 'primary' ) ) ) {
+ variants.invert = true;
+ } else {
+ variants.progressive = element.hasFlag( 'progressive' );
+ variants.constructive = element.hasFlag( 'constructive' );
+ variants.destructive = element.hasFlag( 'destructive' );
+ variants.warning = element.hasFlag( 'warning' );
+ }
+ }
+
+ for ( variant in variants ) {
+ classes[ variants[ variant ] ? 'on' : 'off' ].push( 'oo-ui-image-' + variant );
+ }
+
+ return classes;
+};
+
+/* Instantiation */
+
+OO.ui.theme = new OO.ui.MediaWikiTheme();
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/common.less b/vendor/oojs/oojs-ui/src/themes/mediawiki/common.less
new file mode 100644
index 00000000..ab63c022
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/common.less
@@ -0,0 +1,69 @@
+// Base variables and mixins
+@import '../../styles/common';
+
+// Theme variables
+
+@active: #999;
+@background: #ffffff;
+
+@select: #d8e6fe;
+
+@progressive: #347bff;
+@progressive-hover: #2962CC;
+@progressive-selected: #1F4999;
+@progressive-fade: rgba(52,123,255,0.1);
+
+@constructive: #00af89;
+@constructive-hover: #008064;
+@constructive-selected: #005946;
+@constructive-fade: rgba(0,171,137,0.1);
+
+@destructive: #d11d13;
+@destructive-hover: #8C130D;
+@destructive-selected: #73100A;
+@destructive-fade: rgba(209,29,19,0.1);
+
+@text: #555555;
+@pressed-text: #444444;
+@pressed-color: #d0d0d0; // Used for borders and backgrounds
+@disabled-text: #cccccc;
+@disabled-framed-text: #ffffff;
+@disabled-background: #dddddd;
+
+@neutral-button-border: 1px solid #cdcdcd;
+
+@oo-ui-default-image-path: 'themes/mediawiki/images';
+
+@input-border-color: #777;
+@input-active-color: #ddd;
+@input-disabled-color: #eee;
+@input-hover-border-bottom-width: 3px;
+@input-focus-border-width: 2px;
+@input-size: 1.6em;
+@border-radius: 2px;
+
+@icon-size: unit(24 / 16 / 0.8, em);
+@indicator-size: unit(12 / 16 / 0.8, em);
+
+// Theme animation variables
+@quick-ease: 0.1s ease-in-out;
+@medium-ease-out-back: 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+@medium-ease-out-sine: 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+
+// Theme mixins
+
+// Workaround for Safari 8 bug. Combining a selector like `input[type="checkbox"]:checked + span`
+// with transition on background-size, background-color, and a single background-image using SVG
+// causes the selector to sometimes not be applied. (T89309)
+//
+// * Syntax mimics the core mixin .oo-ui-background-image-svg().
+// * No-op in distributions other than 'vector'.
+// * Using -webkit- prefix to limit this stupidity from impacting other browsers. Alas, some
+// non-Safari ones also parse the -webkit- prefix (Chrome, Opera).
+// * We take the payload size hit of the unnecessary /* @embed */ hint across the board. It should
+// be mostly mitigated by using gzip compression.
+// * Upstream bug report: https://bugs.webkit.org/show_bug.cgi?id=141789
+.oo-ui-background-image-safari( @url-without-extension ) when ( @oo-ui-distribution = vector ) {
+ @svg: '@{url-without-extension}.svg';
+ background-image: -webkit-linear-gradient(transparent, transparent), e('/* @embed */') url(@svg);
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/core.less b/vendor/oojs/oojs-ui/src/themes/mediawiki/core.less
new file mode 100644
index 00000000..1c83a946
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/core.less
@@ -0,0 +1,12 @@
+// Base and theme variables and mixins
+@import 'common';
+
+// Theme rules
+@import 'elements';
+@import 'layouts';
+@import 'tools';
+@import 'widgets';
+@import 'windows';
+
+// Base rules
+@import '../../styles/core';
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/elements.less b/vendor/oojs/oojs-ui/src/themes/mediawiki/elements.less
new file mode 100644
index 00000000..535c0251
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/elements.less
@@ -0,0 +1,319 @@
+@import 'common';
+
+.theme-oo-ui-element () {}
+
+.theme-oo-ui-buttonElement () {
+ > .oo-ui-buttonElement-button {
+ font-weight: bold;
+ }
+
+ &.oo-ui-iconElement > .oo-ui-buttonElement-button {
+ > .oo-ui-iconElement-icon {
+ margin-left: 0;
+ }
+ }
+
+ &.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+ > .oo-ui-indicatorElement-indicator {
+ width: @indicator-size;
+ height: @indicator-size;
+ margin: @indicator-size / 2;
+ }
+ }
+
+ &.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-left: @indicator-size / 2;
+ }
+ &.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ width: @icon-size;
+ height: @icon-size;
+ }
+
+ &-frameless {
+ > .oo-ui-buttonElement-button {
+ &:focus {
+ box-shadow: inset 0 0 0 1px rgba(0,0,0,0.2), 0 0 0 1px rgba(0,0,0,0.2);
+ outline: none;
+ }
+
+ .oo-ui-indicatorElement-indicator {
+ margin-right: 0em;
+ }
+ }
+
+ &.oo-ui-labelElement {
+ > .oo-ui-buttonElement-button {
+ > .oo-ui-labelElement-label {
+ margin-left: 0.25em;
+ margin-right: 0.25em;
+ }
+ }
+ }
+
+ &.oo-ui-widget-enabled {
+ > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: @text;
+ }
+
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: @pressed-text;
+ }
+
+ &.oo-ui-flaggedElement {
+ &-progressive {
+ .mediawiki-frameless-button-colored(@progressive, @progressive-selected);
+ }
+
+ &-constructive {
+ .mediawiki-frameless-button-colored(@constructive, @constructive-selected);
+ }
+
+ &-destructive {
+ .mediawiki-frameless-button-colored(@destructive, @destructive-selected);
+ }
+ }
+ }
+
+ &.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ color: @disabled-text;
+
+ > .oo-ui-iconElement-icon,
+ > .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+ }
+ }
+ }
+
+ &-framed {
+ > .oo-ui-buttonElement-button {
+ margin: 0.1em 0;
+ padding: 0.2em 0.8em;
+ border-radius: @border-radius;
+
+ &:hover,
+ &:focus {
+ outline: none;
+ }
+
+ .oo-ui-transition(
+ background @quick-ease,
+ color @quick-ease,
+ box-shadow @quick-ease
+ );
+ }
+
+ // Support <input/> from ButtonInputWidget
+ > input.oo-ui-buttonElement-button,
+ &.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ line-height: @icon-size;
+ }
+
+ &.oo-ui-iconElement {
+ > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: -0.5em;
+ margin-right: -0.5em;
+ }
+
+ &.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-right: 0.3em;
+ }
+ }
+
+ &.oo-ui-indicatorElement {
+ > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ /* -0.5 - 0.475 */
+ margin-left: -0.005em;
+ margin-right: -0.005em;
+ }
+
+ &.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+ &.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-left: @indicator-size / 2;
+ margin-right: -0.275em;
+ }
+ }
+
+ &.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ color: @disabled-framed-text;
+ background: @disabled-background;
+ border: 1px solid @disabled-background;
+ }
+
+ &.oo-ui-widget-enabled {
+ > .oo-ui-buttonElement-button {
+ color: @text;
+ background-color: @background;
+ border: @neutral-button-border;
+
+ &:hover {
+ background-color: darken(@background,8%);
+ }
+
+ &:focus {
+ box-shadow: inset 0 0 0 1px rgba(0,0,0,0.2);
+ }
+ }
+
+ & > .oo-ui-buttonElement-button:active,
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ background-color: darken(@background,15%);
+ border-color: darken(@background,15%);
+ box-shadow: none;
+ }
+
+ &.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: @active;
+ color: #fff;
+ }
+
+ &.oo-ui-flaggedElement {
+ &-progressive {
+ .mediawiki-framed-button-colored(@progressive, @progressive-fade, @progressive-selected);
+ }
+
+ &-constructive {
+ .mediawiki-framed-button-colored(@constructive, @constructive-fade, @constructive-selected);
+ }
+
+ &-destructive {
+ .mediawiki-framed-button-colored(@destructive, @destructive-fade, @destructive-selected);
+ }
+ }
+ &.oo-ui-flaggedElement-primary.oo-ui-flaggedElement {
+ &-progressive {
+ .mediawiki-framed-primary-button-colored(@progressive, @progressive-hover, @progressive-selected);
+ }
+
+ &-constructive {
+ .mediawiki-framed-primary-button-colored(@constructive, @constructive-hover, @constructive-selected);
+ }
+
+ &-destructive {
+ .mediawiki-framed-primary-button-colored(@destructive, @destructive-hover, @destructive-selected);
+ }
+ }
+ }
+ }
+}
+
+.mediawiki-frameless-button-colored( @neutral, @pressed ) {
+ > .oo-ui-buttonElement-button {
+ &:hover,
+ &:focus {
+ > .oo-ui-labelElement-label {
+ color: @neutral;
+ }
+ }
+
+ > .oo-ui-labelElement-label {
+ color: #777777;
+ }
+ }
+
+ &.oo-ui-widget-enabled {
+ & > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: @pressed;
+ box-shadow: none;
+ }
+ }
+}
+
+.mediawiki-framed-button-colored( @neutral, @hover, @pressed ) {
+ > .oo-ui-buttonElement-button {
+ color: @neutral;
+
+ &:hover {
+ background-color: @hover;
+ border-color: fade(@pressed,50%);
+ }
+
+ &:focus {
+ box-shadow: inset 0 0 0 1px @pressed;
+ border-color: @pressed;
+ }
+ }
+
+ &.oo-ui-widget-enabled {
+ .oo-ui-buttonElement-button:active,
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: @pressed;
+ border-color: @pressed;
+ box-shadow: none;
+ }
+
+ &.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: @active;
+ color: #fff;
+ }
+ }
+}
+
+.mediawiki-framed-primary-button-colored( @neutral, @hover, @pressed ) {
+ > .oo-ui-buttonElement-button {
+ color: @background;
+ background-color: @neutral;
+ border-color: @neutral;
+
+ &:hover {
+ background: @hover;
+ border-color: @hover;
+ }
+
+ &:focus {
+ box-shadow: inset 0 0 0 1px @background;
+ border-color: @neutral;
+ }
+ }
+
+ &.oo-ui-widget-enabled {
+ .oo-ui-buttonElement-button:active,
+ &.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ color: @background;
+ background-color: @pressed;
+ border-color: @pressed;
+ box-shadow: none;
+ }
+
+ &.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+ background-color: @active;
+ color: #fff;
+ }
+ }
+}
+
+.theme-oo-ui-clippableElement () {}
+
+.theme-oo-ui-flaggedElement () {}
+
+.theme-oo-ui-draggableElement () {}
+
+.theme-oo-ui-groupElement () {}
+
+.theme-oo-ui-draggableGroupElement () {}
+
+.theme-oo-ui-iconElement () {
+ .oo-ui-iconElement-icon,
+ &.oo-ui-iconElement-icon {
+ background-size: contain;
+ background-position: center center;
+ }
+}
+
+.theme-oo-ui-indicatorElement () {
+ .oo-ui-indicatorElement-indicator,
+ &.oo-ui-indicatorElement-indicator {
+ background-size: contain;
+ background-position: center center;
+ }
+}
+
+.theme-oo-ui-labelElement () {}
+
+.theme-oo-ui-lookupElement () {}
+
+.theme-oo-ui-popupElement () {}
+
+.theme-oo-ui-tabIndexedElement () {}
+
+.theme-oo-ui-titledElement () {}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-alerts.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-alerts.json
new file mode 100644
index 00000000..5fbf34d0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-alerts.json
@@ -0,0 +1,33 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "bell": { "file": "images/icons/bell.svg" },
+ "bellOn": { "file": {
+ "ltr": "images/icons/bellOn-ltr.svg",
+ "rtl": "images/icons/bellOn-rtl.svg"
+ } },
+ "eye": { "file": "images/icons/eye.svg" },
+ "eyeClosed": { "file": "images/icons/eyeClosed.svg" },
+ "message": { "file": {
+ "ltr": "images/icons/message-ltr.svg",
+ "rtl": "images/icons/message-rtl.svg"
+ } },
+ "signature": { "file": {
+ "ltr": "images/icons/signature-ltr.svg",
+ "rtl": "images/icons/signature-rtl.svg"
+ } },
+ "speechBubble": { "file": {
+ "ltr": "images/icons/speechBubble-ltr.svg",
+ "rtl": "images/icons/speechBubble-rtl.svg"
+ } },
+ "speechBubbleAdd": { "file": {
+ "ltr": "images/icons/speechBubbleAdd-ltr.svg",
+ "rtl": "images/icons/speechBubbleAdd-rtl.svg"
+ } },
+ "speechBubbles": { "file": {
+ "ltr": "images/icons/speechBubbles-ltr.svg",
+ "rtl": "images/icons/speechBubbles-rtl.svg"
+ } }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-content.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-content.json
new file mode 100644
index 00000000..29681c0e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-content.json
@@ -0,0 +1,50 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "article": { "file": {
+ "ltr": "images/icons/article-ltr.svg",
+ "rtl": "images/icons/article-rtl.svg"
+ } },
+ "articleCheck": { "file": {
+ "ltr": "images/icons/articleCheck-ltr.svg",
+ "rtl": "images/icons/articleCheck-rtl.svg"
+ } },
+ "articleSearch": { "file": {
+ "ltr": "images/icons/articleSearch-ltr.svg",
+ "rtl": "images/icons/articleSearch-rtl.svg"
+ } },
+ "book": { "file": {
+ "ltr": "images/icons/book-ltr.svg",
+ "rtl": "images/icons/book-rtl.svg"
+ } },
+ "citeArticle": { "file": {
+ "ltr": "images/icons/citeArticle-ltr.svg",
+ "rtl": "images/icons/citeArticle-rtl.svg"
+ } },
+ "die": { "file": {
+ "ltr": "images/icons/die-ltr.svg",
+ "rtl": "images/icons/die-rtl.svg"
+ } },
+ "download": { "file": {
+ "ltr": "images/icons/download-ltr.svg",
+ "rtl": "images/icons/download-rtl.svg"
+ } },
+ "folderPlaceholder": { "file": {
+ "ltr": "images/icons/folderPlaceholder-ltr.svg",
+ "rtl": "images/icons/folderPlaceholder-rtl.svg"
+ } },
+ "journal": { "file": {
+ "ltr": "images/icons/journal-ltr.svg",
+ "rtl": "images/icons/journal-rtl.svg"
+ } },
+ "newspaper": { "file": {
+ "ltr": "images/icons/newspaper-ltr.svg",
+ "rtl": "images/icons/newspaper-rtl.svg"
+ } },
+ "upload": { "file": {
+ "ltr": "images/icons/upload-ltr.svg",
+ "rtl": "images/icons/upload-rtl.svg"
+ } }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-advanced.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-advanced.json
new file mode 100644
index 00000000..8fdc5051
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-advanced.json
@@ -0,0 +1,75 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "alignCentre": { "file": "images/icons/align-center.svg" },
+ "alignLeft": { "file": "images/icons/align-float-left.svg" },
+ "alignRight": { "file": "images/icons/align-float-right.svg" },
+ "find": { "file": {
+ "ltr": "images/icons/find-ltr.svg",
+ "rtl": "images/icons/find-rtl.svg"
+ } },
+ "insert": { "file": "images/icons/insert.svg" },
+ "layout": { "file": {
+ "ltr": "images/icons/layout-ltr.svg",
+ "rtl": "images/icons/layout-rtl.svg"
+ } },
+ "newline": { "file": {
+ "ltr": "images/icons/newline-ltr.svg",
+ "rtl": "images/icons/newline-rtl.svg"
+ } },
+ "redirect": { "file": {
+ "ltr": "images/icons/redirect-ltr.svg",
+ "rtl": "images/icons/redirect-rtl.svg"
+ } },
+ "noWikiText": { "file": {
+ "ltr": "images/icons/noWikiText-ltr.svg",
+ "rtl": "images/icons/noWikiText-rtl.svg"
+ } },
+ "outline": { "file": {
+ "ltr": "images/icons/outline-ltr.svg",
+ "rtl": "images/icons/outline-rtl.svg"
+ } },
+ "puzzle": { "file": {
+ "ltr": "images/icons/puzzle-ltr.svg",
+ "rtl": "images/icons/puzzle-rtl.svg"
+ } },
+ "quotes": { "file": {
+ "ltr": "images/icons/quotes-ltr.svg",
+ "rtl": "images/icons/quotes-rtl.svg"
+ } },
+ "quotesAdd": { "file": {
+ "ltr": "images/icons/quotesAdd-ltr.svg",
+ "rtl": "images/icons/quotesAdd-rtl.svg"
+ } },
+ "redirect": { "file": {
+ "ltr": "images/icons/redirect-ltr.svg",
+ "rtl": "images/icons/redirect-rtl.svg"
+ } },
+ "searchCaseSensitive": { "file": "images/icons/case-sensitive.svg" },
+ "searchRegularExpression": { "file": "images/icons/regular-expression.svg" },
+ "specialCharacter": { "file": "images/icons/specialCharacter.svg" },
+ "table": { "file": "images/icons/table.svg" },
+ "tableAddColumnAfter": { "file": {
+ "ltr": "images/icons/table-insert-column-rtl.svg",
+ "rtl": "images/icons/table-insert-column-ltr.svg"
+ } },
+ "tableAddColumnBefore": { "file": {
+ "ltr": "images/icons/table-insert-column-ltr.svg",
+ "rtl": "images/icons/table-insert-column-rtl.svg"
+ } },
+ "tableAddRowAfter": { "file": "images/icons/table-insert-row-after.svg" },
+ "tableAddRowBefore": { "file": "images/icons/table-insert-row-before.svg" },
+ "tableCaption": { "file": "images/icons/table-caption.svg" },
+ "tableMergeCells": { "file": "images/icons/table-merge-cells.svg" },
+ "templateAdd": { "file": {
+ "ltr": "images/icons/templateAdd-ltr.svg",
+ "rtl": "images/icons/templateAdd-rtl.svg"
+ } },
+ "translation": { "file": {
+ "ltr": "images/icons/translation-ltr.svg",
+ "rtl": "images/icons/translation-rtl.svg"
+ } },
+ "wikiText": { "file": "images/icons/wikiText.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-core.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-core.json
new file mode 100644
index 00000000..3bacb605
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-core.json
@@ -0,0 +1,45 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "variants": {
+ "invert": {
+ "color": "#FFFFFF",
+ "global": true
+ },
+ "progressive": {
+ "color": "#347BFF"
+ },
+ "constructive": {
+ "color": "#00AF89"
+ },
+ "destructive": {
+ "color": "#D11D13"
+ },
+ "warning": {
+ "color": "#FF5D00"
+ }
+ },
+ "images": {
+ "edit": { "file": {
+ "ltr": "images/icons/edit-ltr.svg",
+ "rtl": "images/icons/edit-rtl.svg"
+ }, "variants": [ "progressive" ] },
+ "editLock": { "file": {
+ "ltr": "images/icons/editLock-ltr.svg",
+ "rtl": "images/icons/editLock-rtl.svg"
+ } },
+ "editUndo": { "file": {
+ "ltr": "images/icons/editUndo-ltr.svg",
+ "rtl": "images/icons/editUndo-rtl.svg"
+ } },
+ "link": { "file": {
+ "ltr": "images/icons/link-ltr.svg",
+ "rtl": "images/icons/link-rtl.svg"
+ } },
+ "linkExternal": { "file": {
+ "ltr": "images/icons/external-link-ltr.svg",
+ "rtl": "images/icons/external-link-rtl.svg"
+ } },
+ "linkSecure": { "file": "images/icons/secure-link.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-list.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-list.json
new file mode 100644
index 00000000..490f8faf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-list.json
@@ -0,0 +1,22 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "indent": { "file": {
+ "ltr": "images/icons/indent-ltr.svg",
+ "rtl": "images/icons/indent-rtl.svg"
+ } },
+ "listBullet": { "file": {
+ "ltr": "images/icons/listBullet-ltr.svg",
+ "rtl": "images/icons/listBullet-rtl.svg"
+ } },
+ "listNumbered": { "file": {
+ "ltr": "images/icons/listNumbered-ltr.svg",
+ "rtl": "images/icons/listNumbered-rtl.svg"
+ } },
+ "outdent": { "file": {
+ "ltr": "images/icons/outdent-ltr.svg",
+ "rtl": "images/icons/outdent-rtl.svg"
+ } }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-styling.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-styling.json
new file mode 100644
index 00000000..65fbc218
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-editing-styling.json
@@ -0,0 +1,72 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "bigger": { "file": {
+ "ltr": "images/icons/bigger-ltr.svg",
+ "rtl": "images/icons/bigger-rtl.svg"
+ } },
+ "smaller": { "file": {
+ "ltr": "images/icons/smaller-ltr.svg",
+ "rtl": "images/icons/smaller-rtl.svg"
+ } },
+ "subscript": { "file": {
+ "ltr": "images/icons/subscript-ltr.svg",
+ "rtl": "images/icons/subscript-rtl.svg"
+ } },
+ "superscript": { "file": {
+ "ltr": "images/icons/superscript-ltr.svg",
+ "rtl": "images/icons/superscript-rtl.svg"
+ } },
+ "bold": { "file": {
+ "default": "images/icons/bold-a.svg",
+ "lang": {
+ "ar": "images/icons/bold-arab-ain.svg",
+ "be": "images/icons/bold-cyrl-te.svg",
+ "cs,en,he,ml,pl": "images/icons/bold-b.svg",
+ "da,de,hu,ksh,nn,no,sv": "images/icons/bold-f.svg",
+ "es,gl,pt": "images/icons/bold-n.svg",
+ "eu,fi": "images/icons/bold-l.svg",
+ "fa": "images/icons/bold-arab-dad.svg",
+ "fr,it": "images/icons/bold-g.svg",
+ "hy": "images/icons/bold-armn-to.svg",
+ "ka": "images/icons/bold-geor-man.svg",
+ "ky,ru": "images/icons/bold-cyrl-zhe.svg",
+ "nl": "images/icons/bold-v.svg",
+ "os": "images/icons/bold-cyrl-be.svg"
+ }
+ } },
+ "italic": { "file": {
+ "default": "images/icons/italic-a.svg",
+ "lang": {
+ "ar": "images/icons/italic-arab-meem.svg",
+ "cs,en,fr,he,ml,pl,pt": "images/icons/italic-i.svg",
+ "be,da,de,fi,ky,nn,no,os,sv,ru": "images/icons/italic-k.svg",
+ "es,gl,it,nl": "images/icons/italic-c.svg",
+ "eu": "images/icons/italic-e.svg",
+ "fa": "images/icons/italic-arab-keheh-jeem.svg",
+ "hu": "images/icons/italic-d.svg",
+ "hy": "images/icons/italic-armn-sha.svg",
+ "ksh": "images/icons/italic-s.svg",
+ "ka": "images/icons/italic-geor-kan.svg"
+ }
+ } },
+ "strikethrough": { "file": {
+ "default": "images/icons/strikethrough-a.svg",
+ "lang": {
+ "en": "images/icons/strikethrough-s.svg",
+ "fi": "images/icons/strikethrough-y.svg"
+ }
+ } },
+ "underline": { "file": {
+ "default": "images/icons/underline-a.svg",
+ "lang": {
+ "en": "images/icons/underline-u.svg"
+ }
+ } },
+ "textLanguage": { "file": "images/icons/language.svg" },
+ "textDirLTR": { "file": "images/icons/text-dir-lefttoright.svg" },
+ "textDirRTL": { "file": "images/icons/text-dir-righttoleft.svg" },
+ "textStyle": { "file": "images/icons/text-style.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-interactions.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-interactions.json
new file mode 100644
index 00000000..497a3014
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-interactions.json
@@ -0,0 +1,52 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "beta": { "file": "images/icons/beta.svg" },
+ "betaLaunch": { "file": "images/icons/betaLaunch.svg" },
+ "bookmark": { "file": {
+ "ltr": "images/icons/bookmark-ltr.svg",
+ "rtl": "images/icons/bookmark-rtl.svg"
+ } },
+ "browser": { "file": {
+ "ltr": "images/icons/browser-ltr.svg",
+ "rtl": "images/icons/browser-rtl.svg"
+ } },
+ "clear": { "file": "images/icons/clear.svg" },
+ "clock": { "file": "images/icons/clock.svg" },
+ "funnel": { "file": {
+ "ltr": "images/icons/funnel-ltr.svg",
+ "rtl": "images/icons/funnel-rtl.svg"
+ } },
+ "heart": { "file": "images/icons/heart.svg" },
+ "key": { "file": {
+ "ltr": "images/icons/key-ltr.svg",
+ "rtl": "images/icons/key-rtl.svg"
+ } },
+ "keyboard": { "file": {
+ "ltr": "images/icons/keyboard-ltr.svg",
+ "rtl": "images/icons/keyboard-rtl.svg"
+ } },
+ "logOut": { "file": {
+ "ltr": "images/icons/logOut-ltr.svg",
+ "rtl": "images/icons/logOut-rtl.svg"
+ } },
+ "newWindow": { "file": {
+ "ltr": "images/icons/newWindow-ltr.svg",
+ "rtl": "images/icons/newWindow-rtl.svg"
+ } },
+ "printer": { "file": {
+ "ltr": "images/icons/printer-ltr.svg",
+ "rtl": "images/icons/printer-rtl.svg"
+ } },
+ "ribbonPrize": { "file": "images/icons/ribbonPrize.svg" },
+ "sun": { "file": {
+ "ltr": "images/icons/sun-ltr.svg",
+ "rtl": "images/icons/sun-rtl.svg"
+ } },
+ "watchlist": { "file": {
+ "ltr": "images/icons/watchlist-ltr.svg",
+ "rtl": "images/icons/watchlist-rtl.svg"
+ } }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-layout.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-layout.json
new file mode 100644
index 00000000..ae6b09d7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-layout.json
@@ -0,0 +1,43 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "variants": {
+ "invert": {
+ "color": "#FFFFFF",
+ "global": true
+ },
+ "progressive": {
+ "color": "#347BFF"
+ },
+ "constructive": {
+ "color": "#00AF89"
+ },
+ "destructive": {
+ "color": "#D11D13"
+ },
+ "warning": {
+ "color": "#FF5D00"
+ }
+ },
+ "images": {
+ "stripeFlow": { "file": {
+ "ltr": "images/icons/stripeFlow-ltr.svg",
+ "rtl": "images/icons/stripeFlow-rtl.svg"
+ } },
+ "stripeSideMenu": { "file": "images/icons/stripeSideMenu.svg" },
+ "stripeSummary": { "file": {
+ "ltr": "images/icons/stripeSummary-ltr.svg",
+ "rtl": "images/icons/stripeSummary-rtl.svg"
+ } },
+ "stripeToC": { "file": {
+ "ltr": "images/icons/stripeToC-ltr.svg",
+ "rtl": "images/icons/stripeToC-rtl.svg"
+ }, "variants": [ "progressive" ] },
+ "viewCompact": { "file": "images/icons/viewCompact.svg" },
+ "viewDetails": { "file": {
+ "ltr": "images/icons/viewDetails-ltr.svg",
+ "rtl": "images/icons/viewDetails-rtl.svg"
+ } },
+ "visionSimulator": { "file": "images/icons/visionSimulator.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-location.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-location.json
new file mode 100644
index 00000000..9eec19ba
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-location.json
@@ -0,0 +1,19 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "map": { "file": {
+ "ltr": "images/icons/map-ltr.svg",
+ "rtl": "images/icons/map-rtl.svg"
+ } },
+ "mapPin": { "file": "images/icons/mapPin.svg" },
+ "mapPinAdd": { "file": {
+ "ltr": "images/icons/mapPinAdd-ltr.svg",
+ "rtl": "images/icons/mapPinAdd-rtl.svg"
+ } },
+ "wikitrail": { "file": {
+ "ltr": "images/icons/wikitrail-ltr.svg",
+ "rtl": "images/icons/wikitrail-rtl.svg"
+ } }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-media.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-media.json
new file mode 100644
index 00000000..960079b4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-media.json
@@ -0,0 +1,27 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "image": { "file": {
+ "ltr": "images/icons/image-ltr.svg",
+ "rtl": "images/icons/image-rtl.svg"
+ } },
+ "imageAdd": { "file": {
+ "ltr": "images/icons/imageAdd-ltr.svg",
+ "rtl": "images/icons/imageAdd-rtl.svg"
+ } },
+ "imageLock": { "file": {
+ "ltr": "images/icons/imageLock-ltr.svg",
+ "rtl": "images/icons/imageLock-rtl.svg"
+ } },
+ "photoGallery": { "file": {
+ "ltr": "images/icons/photoGallery-ltr.svg",
+ "rtl": "images/icons/photoGallery-rtl.svg"
+ } },
+ "play": { "file": {
+ "ltr": "images/icons/play-ltr.svg",
+ "rtl": "images/icons/play-rtl.svg"
+ } },
+ "stop": { "file": "images/icons/stop.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-moderation.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-moderation.json
new file mode 100644
index 00000000..1f12f2ae
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-moderation.json
@@ -0,0 +1,52 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "variants": {
+ "invert": {
+ "color": "#FFFFFF",
+ "global": true
+ },
+ "progressive": {
+ "color": "#347BFF"
+ },
+ "constructive": {
+ "color": "#00AF89"
+ },
+ "destructive": {
+ "color": "#D11D13"
+ },
+ "warning": {
+ "color": "#FF5D00"
+ }
+ },
+ "images": {
+ "block": { "file": "images/icons/block.svg", "variants": [ "destructive" ] },
+ "blockUndo": { "file": {
+ "ltr": "images/icons/blockUndo-ltr.svg",
+ "rtl": "images/icons/blockUndo-rtl.svg"
+ } },
+ "flag": { "file": {
+ "ltr": "images/icons/flag-ltr.svg",
+ "rtl": "images/icons/flag-rtl.svg"
+ } },
+ "flagUndo": { "file": {
+ "ltr": "images/icons/flagUndo-ltr.svg",
+ "rtl": "images/icons/flagUndo-rtl.svg"
+ } },
+ "lock": { "file": {
+ "ltr": "images/icons/lock-ltr.svg",
+ "rtl": "images/icons/lock-rtl.svg"
+ }, "variants": [ "destructive" ] },
+ "star": { "file": "images/icons/star.svg" },
+ "trash": { "file": "images/icons/trash.svg" },
+ "trashUndo": { "file": {
+ "ltr": "images/icons/trashUndo-ltr.svg",
+ "rtl": "images/icons/trashUndo-rtl.svg"
+ } },
+ "unLock": { "file": {
+ "ltr": "images/icons/unLock-ltr.svg",
+ "rtl": "images/icons/unLock-rtl.svg"
+ }, "variants": [ "destructive" ] },
+ "unStar": { "file": "images/icons/unStar.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-movement.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-movement.json
new file mode 100644
index 00000000..9aa1b809
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-movement.json
@@ -0,0 +1,27 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "arrowNext": { "file": {
+ "ltr": "images/icons/arrow-ltr.svg",
+ "rtl": "images/icons/arrow-rtl.svg"
+ } },
+ "arrowLast": { "file": {
+ "ltr": "images/icons/arrow-rtl.svg",
+ "rtl": "images/icons/arrow-ltr.svg"
+ } },
+ "caretNext": { "file": {
+ "ltr": "images/icons/caret-rtl.svg",
+ "rtl": "images/icons/caret-ltr.svg"
+ } },
+ "caretLast": { "file": {
+ "ltr": "images/icons/caret-ltr.svg",
+ "rtl": "images/icons/caret-rtl.svg"
+ } },
+ "caretDown": { "file": "images/icons/caretDown.svg" },
+ "caretUp": { "file": "images/icons/caretUp.svg" },
+ "downTriangle": { "file": "images/icons/downTriangle.svg" },
+ "move": { "file": "images/icons/move.svg" },
+ "upTriangle": { "file": "images/icons/upTriangle.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-user.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-user.json
new file mode 100644
index 00000000..2bda5753
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-user.json
@@ -0,0 +1,19 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "userActive": { "file": {
+ "ltr": "images/icons/userActive-ltr.svg",
+ "rtl": "images/icons/userActive-rtl.svg"
+ } },
+ "userAvatar": { "file": "images/icons/userAvatar.svg" },
+ "userInactive": { "file": {
+ "ltr": "images/icons/userInactive-ltr.svg",
+ "rtl": "images/icons/userInactive-rtl.svg"
+ } },
+ "userTalk": { "file": {
+ "ltr": "images/icons/userTalk-ltr.svg",
+ "rtl": "images/icons/userTalk-rtl.svg"
+ } }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-wikimedia.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-wikimedia.json
new file mode 100644
index 00000000..fd13c95d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons-wikimedia.json
@@ -0,0 +1,9 @@
+{
+ "prefix": "oo-ui-icon",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "logoCC": { "file": "images/icons/logo-cc.svg" },
+ "logoWikimediaCommons": { "file": "images/icons/logo-wikimediaCommons.svg" },
+ "logoWikipedia": { "file": "images/icons/logo-wikipedia.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/icons.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons.json
new file mode 100644
index 00000000..d385eb11
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/icons.json
@@ -0,0 +1,75 @@
+{
+ "selectorWithoutVariant": ".oo-ui-icon-{name}",
+ "selectorWithVariant": ".oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}",
+ "intro": "@import '../../../../src/styles/common';",
+ "variants": {
+ "invert": {
+ "color": "#FFFFFF",
+ "global": true
+ },
+ "progressive": {
+ "color": "#347BFF"
+ },
+ "constructive": {
+ "color": "#00AF89"
+ },
+ "destructive": {
+ "color": "#D11D13"
+ },
+ "warning": {
+ "color": "#FF5D00"
+ }
+ },
+ "images": {
+ "add": { "file": "images/icons/add.svg", "variants": [ "constructive" ] },
+ "advanced": { "file": "images/icons/advanced.svg" },
+ "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] },
+ "cancel": { "file": "images/icons/cancel.svg" },
+ "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive" ] },
+ "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive" ] },
+ "close": { "file": {
+ "ltr": "images/icons/close-ltr.svg",
+ "rtl": "images/icons/close-rtl.svg"
+ } },
+ "code": { "file": "images/icons/code.svg" },
+ "collapse": { "file": "images/icons/collapse.svg" },
+ "comment": { "file": "images/icons/comment.svg" },
+ "ellipsis": { "file": "images/icons/ellipsis.svg" },
+ "expand": { "file": "images/icons/expand.svg" },
+ "help": { "file": {
+ "ltr": "images/icons/help-ltr.svg",
+ "rtl": "images/icons/help-rtl.svg",
+ "lang": {
+ "he,yi": "images/icons/help-ltr.svg"
+ }
+ } },
+ "history": { "file": "images/icons/history.svg" },
+ "info": { "file": "images/icons/info.svg" },
+ "menu": { "file": "images/icons/menu.svg" },
+ "next": { "file": {
+ "ltr": "images/icons/move-ltr.svg",
+ "rtl": "images/icons/move-rtl.svg"
+ } },
+ "picture": { "file": "images/icons/picture.svg" },
+ "previous": { "file": {
+ "ltr": "images/icons/move-rtl.svg",
+ "rtl": "images/icons/move-ltr.svg"
+ } },
+ "redo": { "file": {
+ "ltr": "images/icons/arched-arrow-ltr.svg",
+ "rtl": "images/icons/arched-arrow-rtl.svg"
+ } },
+ "remove": { "file": "images/icons/remove.svg", "variants": [ "destructive" ] },
+ "search": { "file": {
+ "ltr": "images/icons/search-ltr.svg",
+ "rtl": "images/icons/search-rtl.svg"
+ } },
+ "settings": { "file": "images/icons/settings.svg" },
+ "tag": { "file": "images/icons/tag.svg", "variants": [ "destructive", "warning", "constructive", "progressive" ] },
+ "undo": { "file": {
+ "ltr": "images/icons/arched-arrow-rtl.svg",
+ "rtl": "images/icons/arched-arrow-ltr.svg"
+ } },
+ "window": { "file": "images/icons/window.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/add.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/add.svg
new file mode 100644
index 00000000..29e5dba8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/add.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="add">
+ <path id="plus" d="M13 8h-2v3h-3v2h3v3h2v-3h3v-2h-3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/advanced.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/advanced.svg
new file mode 100644
index 00000000..b4629bf9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/advanced.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M20 14.5v-2.9l-1.8-.3c-.1-.4-.3-.8-.6-1.4l1.1-1.5-2.1-2.1-1.5 1.1c-.5-.3-1-.5-1.4-.6l-.2-1.8h-2.9l-.3 1.8c-.5.1-.9.3-1.4.6l-1.5-1.1-2.1 2.1 1 1.5c-.3.5-.4.9-.6 1.4l-1.7.2v2.9l1.8.3c.1.5.3.9.6 1.4l-1 1.5 2.1 2.1 1.5-1c.4.2.9.4 1.4.6l.3 1.8h3l.3-1.8c.5-.1.9-.3 1.4-.6l1.5 1.1 2.1-2.1-1.1-1.5c.3-.5.5-1 .6-1.4l1.5-.3zm-8 1.5c-1.7 0-3-1.3-3-3s1.3-3 3-3 3 1.3 3 3-1.3 3-3 3z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/alert.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/alert.svg
new file mode 100644
index 00000000..f0c65224
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/alert.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="alert">
+ <path id="point" d="M11 16h2v2h-2z"/>
+ <path id="stroke" d="M13.516 10h-3l.484 5h2z"/>
+ <path id="triangle" d="M12.017 5.974l7.519 13.026h-15.04l7.521-13.026m0-2.474c-.544 0-1.088.357-1.5 1.071l-7.985 13.831c-.825 1.429-.15 2.598 1.5 2.598h15.968c1.65 0 2.325-1.169 1.5-2.599l-7.983-13.829c-.413-.715-.956-1.072-1.5-1.072z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-center.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-center.svg
new file mode 100644
index 00000000..887c2f66
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-center.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="align-center">
+ <path d="M9 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-left.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-left.svg
new file mode 100644
index 00000000..ce9761e2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-left.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="align-float-left">
+ <path d="M4 9h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6c-.554 0-1-.446-1-1v-5c0-.554.446-1 1-1zM13.5 9h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 12h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM13.5 15h7c.277 0 .5.223.5.5s-.223.5-.5.5h-7c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 6h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zM3.5 18h17c.277 0 .5.223.5.5s-.223.5-.5.5h-17c-.277 0-.5-.223-.5-.5s.223-.5.5-.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-right.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-right.svg
new file mode 100644
index 00000000..557692ae
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/align-float-right.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="align-float-right">
+ <path d="M20 9h-6c-.554 0-1 .446-1 1v5c0 .554.446 1 1 1h6c.554 0 1-.446 1-1v-5c0-.554-.446-1-1-1zM10.5 9h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 12h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM10.5 15h-7c-.277 0-.5.223-.5.5s.223.5.5.5h7c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 6h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5zM20.5 18h-17c-.277 0-.5.223-.5.5s.223.5.5.5h17c.277 0 .5-.223.5-.5s-.223-.5-.5-.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-ltr.svg
new file mode 100644
index 00000000..049f21e2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<path d="M-472.8,494.7l6.3,5.7l-6.3,5.7v-3.8h-1.3c-3.2,0-6.3,1.3-7.6,3.8c0-4.7,2.8-7.6,7.9-7.6h0.9V494.7z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-rtl.svg
new file mode 100644
index 00000000..20875f34
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arched-arrow-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<path d="M-476.3,494.7l-6.3,5.7l6.3,5.7v-3.8h1.3c3.2,0,6.3,1.3,7.6,3.8c0-4.7-2.8-7.6-7.9-7.6h-0.9V494.7z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-ltr.svg
new file mode 100644
index 00000000..b07621e8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M16 12h-10c-1.7 0-3 1.3-3 3h13v3l5-4.5-5-4.5v3z" id="path6"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-rtl.svg
new file mode 100644
index 00000000..a0189283
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/arrow-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M8 12h10c1.7 0 3 1.3 3 3h-13v3l-5-4.5 5-4.5v3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-ltr.svg
new file mode 100644
index 00000000..b719946d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M12 10h4v-5h-4v5zm-5 2h9v-1h-9v1zm0 2h9v-1h-9v1zm0 2h9v-1h-9v1zm4-9h-4v1h4v-1zm0 2h-4v1h4v-1zm0-4h-4v1h4v-1zm-6-2h13v16h-10c-1.7 0-3-1.3-3-3v-13z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-rtl.svg
new file mode 100644
index 00000000..f14dfbda
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/article-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g16">
+ <path d="M11 10h-4v-5h4v5zm5 2h-9v-1h9v1zm0 2h-9v-1h9v1zm0 2h-9v-1h9v1zm-4-9h4v1h-4v-1zm0 2h4v1h-4v-1zm0-4h4v1h-4v-1zm6-2h-13v16h10c1.7 0 3-1.3 3-3v-13z" id="path18"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-ltr.svg
new file mode 100644
index 00000000..77119710
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <g>
+ <path d="M21 11l-6 7-4-4-1 1 5 5 7-8z"/>
+ </g>
+ <path d="M17 14v-11h-13v13c0 1.7 1.3 3 3 3h5l-3-3h-3v-1h2.6l1-1h-3.6v-1h9v1h-2l1 1h2l1-1zm-11-9h4v1h-4v-1zm0 2h4v1h-4v-1zm0 2h4v1h-4v-1zm9 3h-9v-1h9v1zm-4-2v-5h4v5h-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-rtl.svg
new file mode 100644
index 00000000..771b3ffb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleCheck-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g28">
+ <g id="g30">
+ <path d="M5 11l6 7 4-4 1 1-5 5-7-8z" id="path32"/>
+ </g>
+ <path d="M9 14v-11h13v13c0 1.7-1.3 3-3 3h-5l3-3h3v-1h-2.6l-1-1h3.6v-1h-9v1h2l-1 1h-2l-1-1zm11-9h-4v1h4v-1zm0 2h-4v1h4v-1zm0 2h-4v1h4v-1zm-9 3h9v-1h-9v1zm4-2v-5h-4v5h4z" id="path34"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-ltr.svg
new file mode 100644
index 00000000..e54c0c4a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M19.1 18.5c.6-.7.9-1.5.9-2.5 0-2.2-1.8-4-4-4s-4 1.8-4 4 1.8 4 4 4c.7 0 1.3-.1 1.8-.4l2.7 2.7 1.1-1.1-2.5-2.7zm-3.1-.3c-1.2 0-2.2-1-2.2-2.3 0-1.2 1-2.2 2.2-2.2 1.2 0 2.3 1 2.3 2.2-.1 1.3-1.1 2.3-2.3 2.3zm-4.2-5.2c.3-.4.6-.7 1-1h-5.8v-1h9s1.2 0 2 .6v-8.6h-13v13c0 1.7 1.3 3 3 3h3.8c-.6-.8-1-1.9-1-3h-3.8v-1h3.9l.3-1h-4.2v-1h4.8zm.2-8h4v5h-4v-5zm-5 0h4v1h-4v-1zm0 2h4v1h-4v-1zm0 2h4v1h-4v-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-rtl.svg
new file mode 100644
index 00000000..31134f1c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/articleSearch-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g44">
+ <path d="M7.5 18.5c-.6-.7-.9-1.5-.9-2.5 0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4c-.7 0-1.3-.1-1.8-.4l-2.7 2.7-1.1-1.1 2.5-2.7zm3.1-.3c1.2 0 2.2-1 2.2-2.3 0-1.2-1-2.2-2.2-2.2-1.2 0-2.3 1-2.3 2.2.1 1.3 1.1 2.3 2.3 2.3zm4.2-5.2c-.3-.4-.6-.7-1-1h5.8v-1h-9s-1.2 0-2 .6v-8.6h13v13c0 1.7-1.3 3-3 3h-3.8c.6-.8 1-1.9 1-3h3.8v-1h-3.9l-.3-1h4.2v-1h-4.8zm-.2-8h-4v5h4v-5zm5 0h-4v1h4v-1zm0 2h-4v1h4v-1zm0 2h-4v1h4v-1z" id="path46"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bell.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bell.svg
new file mode 100644
index 00000000..df08800f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bell.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M17.5 14v-5c0-3-2.3-5-5.5-5s-5.5 2-5.5 5v5c0 2 0 3-2 3v1h15v-1c-2 0-2-1-2-3zm-5.5 6h-3c0 1 1.6 2 3 2s3-1 3-2h-3z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-ltr.svg
new file mode 100644
index 00000000..f419e79f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M17.8 14.7l1.7-4.7c1-2.8-.5-5.5-3.5-6.6s-5.9 0-6.9 2.8l-1.7 4.7c-.7 1.9-1 2.8-2.9 2.1l-.3 1 14.1 5.1.3-.9c-1.9-.7-1.5-1.6-.8-3.5zm-5.8 5.1l-2.8-1c-.3.9.8 2.4 2.1 2.9s3.2.1 3.5-.9l-2.8-1z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-rtl.svg
new file mode 100644
index 00000000..e4c3a3fa
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bellOn-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6.209 14.7l-1.7-4.7c-1-2.8.5-5.5 3.5-6.6 3-1.1 5.9 0 6.9 2.8l1.7 4.7c.7 1.9 1 2.8 2.9 2.1l.3 1-14.1 5.1-.3-.9c1.9-.7 1.5-1.6.8-3.5zm5.8 5.1l2.8-1c.3.9-.8 2.4-2.1 2.9s-3.2.1-3.5-.9l2.8-1z" id="path56"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/beta.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/beta.svg
new file mode 100644
index 00000000..51a5c782
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/beta.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 12l-3-2-1 4-1-4-3 2 2-3-4-1 4-1-2-3 3 2 1-4 1 4 3-2-2 3 4 1-4 1 2 3z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/betaLaunch.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/betaLaunch.svg
new file mode 100644
index 00000000..a693b59b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/betaLaunch.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15.3 14.7c.8-3.8-.6-10.7-3.3-10.7-2.7 0-4.2 6.7-3.4 10.5l-1.6 3.5h2.7l.3 1h4c.2-.3.1-.5.3-1h2.7l-1.7-3.3zm-3.3-4.7c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm2 10c0 1.1-2 2-2 2s-2-.9-2-2"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-ltr.svg
new file mode 100644
index 00000000..94ec6704
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-ltr.svg
@@ -0,0 +1,7 @@
+<?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="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z" id="a"/>
+ <g id="up">
+ <path id="arrow" d="M15.5 9h7l-3.5-6z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-rtl.svg
new file mode 100644
index 00000000..b2a6c139
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bigger-rtl.svg
@@ -0,0 +1,7 @@
+<?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="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z" id="a"/>
+ <g id="up">
+ <path id="arrow" d="M1.5 9h7L5 3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/block.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/block.svg
new file mode 100644
index 00000000..0ddd1d47
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/block.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm5 9h-10v-2h10v2z" id="path4"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-ltr.svg
new file mode 100644
index 00000000..3d9cfd7d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g66">
+ <path d="M17 11v2h-2l3.6 3.6c.9-1.3 1.4-2.9 1.4-4.6 0-4.4-3.6-8-8-8-1.7 0-3.3.5-4.6 1.4l5.6 5.6h4zm-13-7l-1 1 2.4 2.4c-.9 1.3-1.4 2.9-1.4 4.6 0 4.4 3.6 8 8 8 1.7 0 3.3-.5 4.6-1.4l2.4 2.4 1-1-16-16zm3 9v-2h2l2 2h-4z" id="path68"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-rtl.svg
new file mode 100644
index 00000000..8f807596
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/blockUndo-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g66">
+ <path d="M7 11v2h2l-3.6 3.6c-.9-1.3-1.4-2.9-1.4-4.6 0-4.4 3.6-8 8-8 1.7 0 3.3.5 4.6 1.4l-5.6 5.6h-4zm13-7l1 1-2.4 2.4c.9 1.3 1.4 2.9 1.4 4.6 0 4.4-3.6 8-8 8-1.7 0-3.3-.5-4.6-1.4l-2.4 2.4-1-1 16-16zm-3 9v-2h-2l-2 2h4z" id="path68"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-a.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-a.svg
new file mode 100644
index 00000000..4b828779
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-a.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-a">
+ <path d="M16 18h3l-5-12h-3l-5 12h3l1.25-3h4.5l1.25 3zm-4.917-5l1.417-3.4 1.417 3.4h-2.834z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-ain.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-ain.svg
new file mode 100644
index 00000000..f96cebce
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-ain.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-arab-ain">
+ <path id="arab-ain" d="M9.337 13.616c0 1.349 1.386 2.101 4.159 2.258l2.187-.029.318.044c-.03.127-.251.345-.665.652l-.089.066c-1.236.929-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.711-.99-.65-.66-.975-1.559-.975-2.698.005-1.354.566-2.573 1.684-3.658v-.044l-.606-.55c-.148-.181-.222-.391-.222-.63 0-.489.239-1.109.717-1.862.65-1.046 1.303-1.566 1.958-1.561.886.005 1.618.42 2.194 1.246.325.479-.03.552-1.064.22-.842-.327-1.527-.051-2.054.828l.015.073 1.123.865.052.007c1.404-.498 2.418-.74 3.043-.726-.059.117-.14.362-.244.733-.103.357-.204.684-.303.982l-.126.374-.384.051c-1.743.239-2.992.716-3.745 1.429-.463.464-.697.973-.702 1.525"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-dad.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-dad.svg
new file mode 100644
index 00000000..f04c6aad
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-arab-dad.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-arab-dad">
+ <path id="arab-dad" d="M16.411 8.232l-1.676-.665.694-1.567 1.688.64-.707 1.592m.775 3.078c-.509-.286-1-.427-1.476-.423-.471 0-.982.205-1.532.616l-.506.379.006.025c1.084.066 1.934.099 2.551.099h.313c.567-.021.992-.064 1.276-.131-.067-.17-.275-.359-.625-.566h-.006m-6.803 3.296c-.017-.904-.329-1.87-.938-2.898l1.294-1.729.119.149c.267.336.504.924.713 1.766l.063.05c.496-.008.942-.17 1.338-.485v-.006l1.732-1.53c.679-.601 1.282-.902 1.807-.902.383.004.848.195 1.394.572.55.377.884.696 1 .958.063.149.094.386.094.709 0 .696-.11 1.229-.331 1.598-.192.311-.473.555-.844.734-.438.207-1.549.311-3.333.311-.8 0-1.795-.021-2.983-.062l-.144.429c-.254.672-.463 1.113-.625 1.324-.725.937-1.786 1.405-3.183 1.405-1.705-.008-2.557-.922-2.557-2.742.004-.941.279-1.814.825-2.618.15-.216.298-.367.444-.454.225-.133.288-.091.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-armn-to.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-armn-to.svg
new file mode 100644
index 00000000..4dbec6d9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-armn-to.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-armn-to">
+ <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.058.257-.15.367-.274.114-.13.205-.302.273-.516.073-.213.11-.48.11-.797V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.218.175.395.29.53.12.136.247.232.383.29.14.05.276.077.406.077m-2.97-7.84c-.37.082-.695.247-.976.45-.28.198-.505.47-.672.813-.16.343-.242.78-.242 1.312V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.348.49.738.64 1.17.15.433.226 1.094.226 1.61h1.353v2.04H17.78v1.6c0 .58-.103 1.092-.31 1.54-.21.442-.49.815-.845 1.117-.35.302-.834.53-1.297.687-.464.15-.953.226-1.47.226-.51 0-.996-.078-1.46-.234-.464-.156-.87-.39-1.22-.703-.348-.313-.626-.703-.835-1.172-.203-.473-.304-1.028-.304-1.663s.105-1.182.32-1.64c.213-.46.497-.685.85-.977.355-.297.76-.513 1.22-.648.458-.14.935-.21 1.43-.21h1.132c-.01-.49-.04-1.043-.242-1.36-.198-.323-.453-.58-.766-.766-.312-.193-.598-.332-.984-.426-.374-.09-.577-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-b.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-b.svg
new file mode 100644
index 00000000..4f648203
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-b.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-b">
+ <path id="b" d="M7 18h6c2 0 4-1 4-3 0-1.064.011-1.975-1.989-3 2-.975 1.989-1.935 1.989-3 0-2-2-3-4-3h-6v12zm7-8c0 1.001 0 1-2 1h-2v-3h2c2 0 2 0 2 1v1zm-2 6h-2v-3h2c2 0 2 0 2 1v1s0 1-2 1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-be.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-be.svg
new file mode 100644
index 00000000..279466d4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-be.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-cyrl-be">
+ <path id="cyrl-be" d="M7 6h9v2h-6v3h2.649c.893 0 1.633.109 2.22.327.588.218 1.088.622 1.502 1.211.419.589.629 1.187.629 1.978 0 .813-.21 1.398-.629 1.977-.419.578-.898.974-1.437 1.187-.533.213-1.295.319-2.286.319h-5.649m4.767-2c.751 0 1.279-.049 1.584-.12.305-.076.569-.246.792-.508.229-.262.343-.473.343-.855 0-.557-.199-.868-.596-1.119-.392-.256-1.064-.398-2.016-.398h-1.873v3"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-te.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-te.svg
new file mode 100644
index 00000000..fdeeb6c5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-te.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-cyrl-te">
+ <path id="te" d="M11 18v-10h-4v-2h11v2h-4v10"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-zhe.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-zhe.svg
new file mode 100644
index 00000000..5996c813
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-cyrl-zhe.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-cyrl-zhe">
+ <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.181.705-.447.168-.266.401-.873.698-1.821.39-1.241.789-2.033 1.197-2.374.403-.336 1.075-.504 2.014-.504l.386-.008v1.78l-.386-.008c-.399 0-.691.062-.878.187-.186.119-.337.304-.452.553-.115.249-.286.762-.512 1.537-.12.412-.25.756-.392 1.033-.137.276-.383.537-.738.78.439.157.8.466 1.084.927.288.455.603 1.103.944 1.943l1.33 3.268h-2.314l-1.17-3.081-.113-.252-.239-.561c-.248-.569-.452-.932-.612-1.089-.16-.157-.317-.236-.552-.236v5.22h-2v-5.22c-.226 0-.382.076-.546.228-.164.152-.368.518-.612 1.098l-.246.561-.113.252-1.17 3.081h-2.314l1.33-3.268c.328-.808.636-1.447.924-1.919.293-.477.663-.794 1.11-.951-.355-.244-.603-.501-.745-.772-.137-.276-.268-.623-.392-1.041-.222-.759-.39-1.266-.505-1.52-.111-.255-.261-.444-.452-.569-.186-.125-.492-.187-.917-.187l-.352.008v-1.78l.386.008c.953 0 1.631.171 2.034.512.399.347.791 1.136 1.177 2.366.301.954.534 1.564.698 1.829.168.26.377.406.705.439v-5.154"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-f.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-f.svg
new file mode 100644
index 00000000..357d2e5d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-f.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-f">
+ <path id="f" d="M16 8v-2h-8v12h3v-5h4v-2h-4v-3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-g.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-g.svg
new file mode 100644
index 00000000..e032542e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-g.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-g">
+ <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.259-.941.359-1.896.538-2.864.538-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.257-2.282.77-3.222.513-.939 1.265-1.66 2.255-2.161.754-.385 1.693-.578 2.816-.578 1.46 0 2.6.303 3.418.91.824.602 1.353 1.435 1.589 2.501l-2.359.435c-.166-.57-.479-1.018-.939-1.346-.455-.332-1.024-.499-1.709-.499-1.038 0-1.864.325-2.479.974-.61.649-.915 1.612-.915 2.889 0 1.377.31 2.412.931 3.103.62.686 1.433 1.029 2.439 1.029.497 0 .995-.095 1.492-.285.503-.195 1.332-.571 1.691-.845v-.867"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-geor-man.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-geor-man.svg
new file mode 100644
index 00000000..b211bf7a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-geor-man.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-geor-man">
+ <path id="geor-man" d="M13.832 14.061c0-1.715-.394-2.573-1.182-2.573-.868 0-1.302.779-1.302 2.338-.01 1.624.421 2.436 1.295 2.436.793 0 1.189-.734 1.189-2.201m2.168 0c0 2.626-1.116 3.939-3.349 3.939-2.434 0-3.651-1.386-3.651-4.159 0-2.738 1.217-4.106 3.651-4.106.841 0 1.182.63 1.182.63v-1.579c0-.789-.449-1.184-1.347-1.184-.572 0-.858.374-.858 1.123h-2.341c.005-1.817 1.064-2.725 3.176-2.725 2.368 0 3.548.946 3.538 2.839"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-l.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-l.svg
new file mode 100644
index 00000000..16797938
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-l.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-l">
+ <path id="l" d="M8 18v-12h3v10h5v2"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-n.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-n.svg
new file mode 100644
index 00000000..73ad019a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-n.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-n">
+ <path id="n" d="M7 18v-12h3l4 8v-8h3v12h-3l-4-8v8h-3"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-v.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-v.svg
new file mode 100644
index 00000000..146943a5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bold-v.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="bold-v">
+ <path id="v" d="M10.5 18l-4.5-12h3l3 8 3-8h3l-4.5 12"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-ltr.svg
new file mode 100644
index 00000000..7a058ed3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15 7c-1.7 0-3 1.3-3 3 0-1.7-1.3-3-3-3h-6v13h6c1.7 0 3 1 3 2 0-1 1.3-2 3-2h6v-13h-6zm5 12h-5c-1.7 0-2 .4-2 .4v-8.9c0-1.4 1.1-2.5 2.5-2.5h4.5v11z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-rtl.svg
new file mode 100644
index 00000000..6ae47ec5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/book-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M9 7c1.7 0 3 1.3 3 3 0-1.7 1.3-3 3-3h6v13h-6c-1.7 0-3 1-3 2 0-1-1.3-2-3-2h-6v-13h6zm-5 12h5c1.7 0 2 .4 2 .4v-8.9c0-1.4-1.1-2.5-2.5-2.5h-4.5v11z" id="path78"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-ltr.svg
new file mode 100644
index 00000000..d803d6be
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15 5h-7c-1.1 0-2 .9-2 2v3h3v11l4-3 4 3v-14c0-1.1-.9-2-2-2zm-6 4h-2v-2c0-.6.4-1 1-1h1v3z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-rtl.svg
new file mode 100644
index 00000000..744d0f4e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/bookmark-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M8 5h7c1.1 0 2 .9 2 2v3h-3v11l-4-3-4 3v-14c0-1.1.9-2 2-2zm6 4h2v-2c0-.6-.4-1-1-1h-1v3z" id="path88"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-ltr.svg
new file mode 100644
index 00000000..7bd04250
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M3 6v11c0 1.7 1.3 3 3 3h15v-14h-18zm2.5 1c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5.7-1.5 1.5-1.5zm14.5 12h-14c-1.1 0-2-.9-2-2v-6h16v8z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-rtl.svg
new file mode 100644
index 00000000..84b18dae
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/browser-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M21 6v11c0 1.7-1.3 3-3 3h-15v-14h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5 1.5-.7 1.5-1.5-.7-1.5-1.5-1.5zm-14.5 12h14c1.1 0 2-.9 2-2v-6h-16v8z" id="path98"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/cancel.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/cancel.svg
new file mode 100644
index 00000000..bfc1b44b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/cancel.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="cancel">
+ <path id="circle-with-strike" d="M11.999 5.022c-3.853 0-6.977 3.124-6.977 6.978 0 3.853 3.124 6.978 6.977 6.978 3.854 0 6.979-3.125 6.979-6.978 0-3.854-3.125-6.978-6.979-6.978zm-5.113 6.978c0-1.092.572-3.25.93-2.929l7.113 7.113c.488.525-1.837.931-2.93.931-2.825-.001-5.113-2.291-5.113-5.115zm9.298 2.929l-7.114-7.113c-.445-.483 1.837-.931 2.929-.931 2.827 0 5.115 2.289 5.115 5.114 0 1.093-.364 3.543-.93 2.93z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-ltr.svg
new file mode 100644
index 00000000..f31ec095
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 13.1l8.9 8.9c.8-.8.8-2 0-2.8l-6.1-6.1 6-6.1c.8-.8.8-2 0-2.8l-8.8 8.9z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-rtl.svg
new file mode 100644
index 00000000..02b4e387
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caret-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16.5 13.1l-8.9 8.9c-.8-.8-.8-2 0-2.8l6.1-6.1-6-6.1c-.8-.8-.8-2 0-2.8l8.8 8.9z" id="path108"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretDown.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretDown.svg
new file mode 100644
index 00000000..a04ca572
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretDown.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 16l8.9-8.9c-.8-.8-2-.8-2.8 0l-6.1 6.1-6.1-6c-.8-.8-2-.8-2.8 0l8.9 8.8z" id="path4"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretUp.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretUp.svg
new file mode 100644
index 00000000..d0e0c283
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/caretUp.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 6.5l8.9 8.9c-.8.8-2 .8-2.8 0l-6.1-6.1-6.1 6c-.8.8-2 .8-2.8 0l8.9-8.8z" id="path4"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/case-sensitive.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/case-sensitive.svg
new file mode 100644
index 00000000..824790c5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/case-sensitive.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="regular-expression">
+ <path id="upper-case" d="M 7.53125,7 4,17 l 2.0625,0 0.71875,-2.40625 3.625,0 L 11.125,17 13.1875,17 9.65625,7 7.53125,7 z M 8.59375,8.53125 9.9375,13 7.25,13 8.59375,8.53125 z" />
+ <path id="lower-case" d="m 18.548697,17 -0.183254,-1.035072 -0.05451,0 c -0.349771,0.440361 -0.710892,0.746796 -1.083366,0.919307 -0.367941,0.167972 -0.849436,0.251959 -1.444489,0.251959 -0.564328,0 -0.954665,-0.20883 -1.377109,-0.626492 -0.417903,-0.417659 -0.626854,-1.012371 -0.626853,-1.784137 -1e-6,-0.80808 0.281628,-1.402791 0.844889,-1.784137 0.567801,-0.385878 1.193222,-0.607062 2.208372,-0.640111 l 1.321843,-0.04086 0,-0.333674 c 0,-0.771759 -0.395195,-1.15764 -1.185571,-1.157647 -0.608688,7e-6 -1.324118,0.183867 -2.146293,0.551584 L 14.134181,9.9184512 c 0.876685,-0.4585114 1.848761,-0.6877705 2.916233,-0.6877783 1.022038,7.8e-6 1.586855,0.2224573 2.131951,0.6673492 C 19.727448,10.342928 20,11.019356 20,11.927309 l 0,5.073215 -1.451303,0 m -0.394476,-3.527417 -0.804008,0.02724 c -0.604145,0.01816 -1.053844,0.127119 -1.349098,0.326866 -0.29526,0.199753 -0.442889,0.503919 -0.442886,0.912498 -3e-6,0.585634 0.336136,0.878451 1.008417,0.878449 0.481492,2e-6 0.865326,-0.138462 1.151503,-0.415391 0.29071,-0.276925 0.436067,-0.644648 0.436072,-1.103169 l 0,-0.626491" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/check.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/check.svg
new file mode 100644
index 00000000..cf7858ba
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/check.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="check">
+ <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/circle.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/circle.svg
new file mode 100644
index 00000000..436259e5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/circle.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><circle cx="12" cy="12" r="6"></circle></svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-ltr.svg
new file mode 100644
index 00000000..28ba0cb5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M7 12h9v-1h-9v1zm0 2h9v-1h-9v1zm0 2h9v-1h-9v1zm4-9h-4v1h4v-1zm0 2h-4v1h4v-1zm0-4h-4v1h4v-1zm5-2h2v16h-10c-1.7 0-3-1.3-3-3v-13h8v7l1.5-2 1.5 2v-7z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-rtl.svg
new file mode 100644
index 00000000..7625307c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/citeArticle-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g128">
+ <path d="M16 12h-9v-1h9v1zm0 2h-9v-1h9v1zm0 2h-9v-1h9v1zm-4-9h4v1h-4v-1zm0 2h4v1h-4v-1zm0-4h4v1h-4v-1zm-5-2h-2v16h10c1.7 0 3-1.3 3-3v-13h-8v7l-1.5-2-1.5 2v-7z" id="path130"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clear.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clear.svg
new file mode 100644
index 00000000..55a26c97
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clear.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="clear">
+ <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clock.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clock.svg
new file mode 100644
index 00000000..1cf72670
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/clock.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm3 12l-4-3v-6h2v5l1.7 1.2c1.3.9 1 1.9.3 2.8z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-ltr.svg
new file mode 100644
index 00000000..4f0f64ec
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M18.4 8.1c.8-.8.8-2 0-2.8l-6.4 6.5-5.6-5.6-1.4 1.4 5.6 5.6-5 5c-.8.8-.8 2 0 2.8l6.4-6.4 5.6 5.6 1.4-1.4-5.6-5.6 5-5.1z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-rtl.svg
new file mode 100644
index 00000000..d9829d0e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/close-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6 1.4 1.4-5.6 5.6 5 5c.8.8.8 2 0 2.8l-6.4-6.4-5.6 5.6-1.4-1.4 5.6-5.6-5-5.1z" id="path140"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/code.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/code.svg
new file mode 100644
index 00000000..32f140d9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/code.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+ <g id="code">
+ <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1v-2.386c0-.514.024-.896.073-1.142.054-.252.139-.463.257-.633.204-.279.473-.475.808-.584.335-.115.872-.255 1.835-.255h1.027v1h-.752c-.457 0-.77.191-.936.408-.167.215-.312.445-.312 1.068v1.857c0 .729-.041 1.18-.244 1.493-.2.307-.562.529-1.09.667.535.155.9.385 1.096.688.199.303.238.757.238 1.484v1.862c0 .619.145.848.312 1.062.166.22.479.407.936.407l.752.004v1h-1.027c-.963 0-1.5-.133-1.835-.248-.335-.109-.604-.307-.808-.591-.118-.165-.203-.374-.257-.625-.049-.253-.073-.636-.073-1.149v-2.387c0-1 0-1-1-1h-1z"/>
+ <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/collapse.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/collapse.svg
new file mode 100644
index 00000000..55aa8f8f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/collapse.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="collapse">
+ <path id="arrow" d="M6.697 15.714l5.303-5.302 5.303 5.302 1.414-1.414-6.717-6.717-6.717 6.717z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/comment.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/comment.svg
new file mode 100644
index 00000000..0ae7e63f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/comment.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="comment">
+ <path id="speech-bubble" d="M15 6h-6c-1.657 0-3 1.344-3 3v4c0 1.656 1.343 3 3 3v3l3-3h3c1.657 0 3-1.344 3-3v-4c0-1.656-1.343-3-3-3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-ltr.svg
new file mode 100644
index 00000000..eb4c360d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16 5h-12v12c0 1.6 1.3 3 3 3h12v-12c0-1.7-1.4-3-3-3zm-8.5 12c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm4 3c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5zm0-6c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-rtl.svg
new file mode 100644
index 00000000..e929fdb1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/die-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 5h12v12c0 1.6-1.3 3-3 3h-12v-12c0-1.7 1.4-3 3-3zm8.5 12c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm-4 3c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5zm0-6c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5z" id="path150"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/downTriangle.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/downTriangle.svg
new file mode 100644
index 00000000..7bc1c228
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/downTriangle.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 18l8-10h-16z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-ltr.svg
new file mode 100644
index 00000000..d0d5bb5b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M16 11h-3v-7c-1.7 0-3 1.3-3 3v4h-3l4.5 5 4.5-5zm1 2v5h-10c-.6 0-1-.4-1-1v-4h-2v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-rtl.svg
new file mode 100644
index 00000000..9abb2ae4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/download-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g160">
+ <path d="M7 11h3v-7c1.7 0 3 1.3 3 3v4h3l-4.5 5-4.5-5zm-1 2v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3h-12v-7h2z" id="path162"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-ltr.svg
new file mode 100644
index 00000000..3972e070
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_3">
+ <path d="M17 2l-12 12-1 5 5-1 12-12c0-2-2-4-4-4zm-9.8 13.5c-.3-.3-.7-.6-1-.8 2.3-2.3 11.3-11.4 11.3-11.4.4.1.7.3 1 .7l-11.3 11.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-rtl.svg
new file mode 100644
index 00000000..978b2fd1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/edit-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_3">
+ <path d="M8 2l12 12 1 5-5-1-12-12c0-2 2-4 4-4zm9.8 13.5c.3-.3.7-.6 1-.8-2.3-2.3-11.3-11.4-11.3-11.4-.4.1-.7.3-1 .7l11.3 11.5z" id="path173"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-ltr.svg
new file mode 100644
index 00000000..7e376824
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_2">
+ <g id="g184">
+ <path d="M21 4v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-1.5 0h-3v-1s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zm-6.5 5.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9v-1.8l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-rtl.svg
new file mode 100644
index 00000000..0b4751d2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editLock-rtl.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_2">
+ <g id="g184">
+ <path d="M4 4v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm1.5 0h3v-1s0-1.5-1.5-1.5c-1.48.06-1.5 1.5-1.5 1.5zm6.5 5.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9v-1.8l9 9 1 5-5-1-8-8h3z" id="path186"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-ltr.svg
new file mode 100644
index 00000000..f346874e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g196">
+ <g id="g198">
+ <path d="M14.9 2.8c.9 0 1.8.2 2.7.6.9.4 1.6.9 1.9 1.6-2.8.1-5 1.1-6.6 3.1l1.3 2-6.7-.3.5-6.8 1.7 2c1.8-1.5 3.5-2.2 5.2-2.2z" id="path200"/>
+ </g>
+ </g>
+ <g id="g204">
+ <path d="M15.2 11.1l-2.6-.1-5.4 5.5c-.3-.3-.7-.6-1-.8.9-.9 2.8-2.8 4.7-4.8h-1.8l-4.1 4.1-1 5 5-1 7.8-7.8-1.6-.1zm5.4-5.1c-1.7 0-3.2.5-4.4 1.4l-.9.9.8 1.3.9 1.4 4-4c0-.3-.1-.7-.2-1h-.2z" id="path206"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-rtl.svg
new file mode 100644
index 00000000..5b59d452
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/editUndo-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g196">
+ <g id="g198">
+ <path d="M10.1 2.8c-.9 0-1.8.2-2.7.6-.9.4-1.6.9-1.9 1.6 2.8.1 5 1.1 6.6 3.1l-1.3 2 6.7-.3-.5-6.8-1.7 2c-1.8-1.5-3.5-2.2-5.2-2.2z" id="path200"/>
+ </g>
+ </g>
+ <g id="g204">
+ <path d="M9.8 11.1l2.6-.1 5.4 5.5c.3-.3.7-.6 1-.8-.9-.9-2.8-2.8-4.7-4.8h1.8l4.1 4.1 1 5-5-1-7.8-7.8 1.6-.1zm-5.4-5.1c1.7 0 3.2.5 4.4 1.4l.9.9-.8 1.3-.9 1.4-4-4c0-.3.1-.7.2-1h.2z" id="path206"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ellipsis.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ellipsis.svg
new file mode 100644
index 00000000..dd36a30d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ellipsis.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <g>
+ <path d="M8 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ <g>
+ <path d="M14 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ <g>
+ <path d="M20 13c0 .6-.2 1-.6 1.4-.4.4-.9.6-1.4.6-.6 0-1-.2-1.4-.6-.4-.4-.6-.9-.6-1.4s.2-1 .6-1.4c.4-.4.9-.6 1.4-.6s1 .2 1.4.6c.4.4.6.9.6 1.4z"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/expand.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/expand.svg
new file mode 100644
index 00000000..7666b41d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/expand.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="expand">
+ <path id="arrow" d="M17.303 8.283l-5.303 5.303-5.303-5.303-1.414 1.414 6.717 6.717 6.717-6.717z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-ltr.svg
new file mode 100644
index 00000000..827bc1b1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="external">
+ <path id="box" d="M2 2h3v1h-2v6h6v-2h1v3h-8z"/>
+ <path id="arrow" d="M6.211 2h3.789v3.789l-1.421-1.421-2.132 2.132-.947-.947 2.132-2.132z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-rtl.svg
new file mode 100644
index 00000000..c375ca0f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/external-link-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="external">
+ <path id="box" d="M7 3h2v6h-6v-2h-1v3h8v-8h-3z"/>
+ <path id="arrow" d="M2 5.789l1.421-1.421 2.132 2.132.947-.947-2.132-2.132 1.421-1.421h-3.789z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eye.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eye.svg
new file mode 100644
index 00000000..fa3bc3c1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eye.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M12 8c-5 0-11 6-11 6s6 6 11 6 11-6 11-6-6-6-11-6zm0 10c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path6"/>
+ <circle cx="12" cy="14" r="2" id="circle8"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eyeClosed.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eyeClosed.svg
new file mode 100644
index 00000000..fa1167df
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/eyeClosed.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19.4 12.7c.7-.8 1.2-1.7 1.4-2.7h-1.6c-.9 2.5-3.9 4.4-7.7 4.6h-.1c-3.7-.2-6.8-2.1-7.7-4.6h-1.5c.2 1 .8 1.9 1.4 2.7l-2 2 .7.7 2-2c.8.6 1.7 1.2 2.7 1.7l-1 2.8.9.3 1-2.8c1 .3 2 .6 3.1.6v3h1v-3c1.1-.1 2.2-.3 3.1-.6l1 2.8.9-.3-1-2.8c1-.4 1.9-1 2.6-1.7l2 2 .7-.7-1.9-2z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-ltr.svg
new file mode 100644
index 00000000..f8578cf8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="find">
+ <path id="magnifying-glass" d="m 13.65625,11 c -1.921,0 -3.5,1.54775 -3.5,3.46875 0,1.92 1.579,3.5 3.5,3.5 0.749,0 1.432,-0.25225 2,-0.65625 l 0.09375,0.15625 2.375,2.375 c 0.19,0.189 0.53425,0.15325 0.78125,-0.09375 0.247,-0.247 0.314,-0.59125 0.125,-0.78125 l -2.375,-2.375 L 16.46875,16.5 C 16.87175,15.934 17.125,15.21775 17.125,14.46875 17.124,12.54875 15.57525,11 13.65625,11 z m 0,1.65625 c 1.011306,0 1.8125,0.801194 1.8125,1.8125 0,1.011306 -0.801194,1.84375 -1.8125,1.84375 -1.011306,0 -1.84375,-0.832444 -1.84375,-1.84375 0,-1.011306 0.832444,-1.8125 1.84375,-1.8125 z" />
+ <path id="text" d="M 6,5 6,7 16,7 16,5 6,5 z m 0,3 0,2 11,0 0,-2 -11,0 z m 0,3 0,2 3.53125,0 c 0.2825289,-0.797203 0.786096,-1.486208 1.4375,-2 L 6,11 z m 0,3 0,2 3.53125,0 C 9.3537004,15.520243 9.25,15.010236 9.25,14.46875 9.25,14.309811 9.2962033,14.154621 9.3125,14 L 6,14 z" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-rtl.svg
new file mode 100644
index 00000000..2a1e9c6f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/find-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="find">
+ <path id="magnifying-glass" d="m 11.343828,11.000025 c 1.921,0 3.5,1.54775 3.5,3.46875 0,1.92 -1.579,3.5 -3.5,3.5 -0.749,0 -1.432,-0.25225 -2,-0.65625 l -0.09375,0.15625 -2.375,2.375 c -0.19,0.189 -0.53425,0.15325 -0.78125,-0.09375 -0.247,-0.247 -0.314,-0.59125 -0.125,-0.78125 l 2.375,-2.375 0.1875,-0.09375 c -0.403,-0.566 -0.65625,-1.28225 -0.65625,-2.03125 10e-4,-1.92 1.54975,-3.46875 3.46875,-3.46875 z m 0,1.65625 c -1.011306,0 -1.8125,0.801194 -1.8125,1.8125 0,1.011306 0.801194,1.84375 1.8125,1.84375 1.011306,0 1.84375,-0.832444 1.84375,-1.84375 0,-1.011306 -0.832444,-1.8125 -1.84375,-1.8125 z" />
+ <path id="text" d="M 19,5 19,7 9,7 9,5 z m 0,3 0,2 -11,0 0,-2 z m 0,3 0,2 -3.53125,0 c -0.282529,-0.797203 -0.786096,-1.486208 -1.4375,-2 z m 0,3 0,2 -3.53125,0 C 15.6463,15.520243 15.75,15.010236 15.75,14.46875 15.75,14.309811 15.703797,14.154621 15.6875,14 z" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-ltr.svg
new file mode 100644
index 00000000..6e81d2bc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z" id="path216"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-rtl.svg
new file mode 100644
index 00000000..4b743aac
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flag-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z" id="path216"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-ltr.svg
new file mode 100644
index 00000000..49cdb7a2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-ltr.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g2990">
+ <g id="Layer_1">
+ <path id="path227" d="M14 6.5v-1.5c-1.4-1.5-5.2-1.2-6 0v-1h-1v15h1v-7c.8-.8 3.4-.9 5-.5v1.5c1.2 1.5 4.3 1.2 5 0v-7c-.7.7-2.7.9-4 .5z"/>
+ </g>
+ <g id="Layer_2">
+ <g id="g230">
+ <path id="path232" d="M17.997 1.989l.99.99-15.98 15.98-.99-.99z"/>
+ </g>
+ <g id="g234">
+ <path id="path236" d="M16.999 1.016l.99.99-15.98 15.98-.99-.99z" fill="#fff"/>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-rtl.svg
new file mode 100644
index 00000000..e470de42
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/flagUndo-rtl.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g2990">
+ <g id="Layer_1">
+ <path id="path227" d="M11 6.5v-1.5c1.4-1.5 5.2-1.2 6 0v-1h1v15h-1v-7c-.8-.8-3.4-.9-5-.5v1.5c-1.2 1.5-4.3 1.2-5 0v-7c.7.7 2.7.9 4 .5z"/>
+ </g>
+ <g id="Layer_2">
+ <g id="g230">
+ <path id="path232" d="M7.003 1.989l-.99.99 15.98 15.98.99-.99z"/>
+ </g>
+ <g id="g234">
+ <path id="path236" d="M8.001 1.016l-.99.99 15.98 15.98.99-.99z" fill="#fff"/>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg
new file mode 100644
index 00000000..63e0b1aa
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M2 5v15h20v-15h-20zm15 11h-9c-.6 0-1-.4-1-1v-6h3l2 1h5v6z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg
new file mode 100644
index 00000000..25bec742
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/folderPlaceholder-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M22 5v15h-20v-15h20zm-15 11h9c.6 0 1-.4 1-1v-6h-3l-2 1h-5v6z" id="path246"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-ltr.svg
new file mode 100644
index 00000000..191584eb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M11 13l-6-7h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-rtl.svg
new file mode 100644
index 00000000..45f2f642
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/funnel-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g256">
+ <path d="M14 13l6-7h-15l6 7v7c1.7 0 3-1.3 3-3v-4z" id="path258"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/heart.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/heart.svg
new file mode 100644
index 00000000..6433201a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/heart.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-ltr.svg
new file mode 100644
index 00000000..bb2545c5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-ltr.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="help">
+ <path id="circle" d="M12.001 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 5.476 4.438 9.914 9.916 9.914 5.476 0 9.914-4.438 9.914-9.914 0-5.478-4.438-9.916-9.914-9.916zm.001 18c-4.465 0-8.084-3.619-8.084-8.083 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083z"/>
+ <g id="question-mark">
+ <path id="top" d="M11.766 6.688c-2.5 0-3.219 2.188-3.219 2.188l1.411.854s.298-.791.901-1.229c.516-.375 1.625-.625 2.219.125.701.885-.17 1.587-1.078 2.719-.953 1.186-1 3.655-1 3.655h1.969s.135-2.318 1.041-3.381c.603-.707 1.443-1.338 1.443-2.494s-1.187-2.437-3.687-2.437z"/>
+ <path id="bottom" d="M11 16h2v2h-2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-rtl.svg
new file mode 100644
index 00000000..99c7f842
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/help-rtl.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="help">
+ <path id="circle" d="M11.999 2.085c5.478 0 9.916 4.438 9.916 9.916 0 5.476-4.438 9.914-9.916 9.914-5.476 0-9.914-4.438-9.914-9.914 0-5.478 4.438-9.916 9.914-9.916zm-.001 18c4.465 0 8.084-3.619 8.084-8.083 0-4.465-3.619-8.084-8.084-8.084-4.464 0-8.083 3.619-8.083 8.084 0 4.464 3.619 8.083 8.083 8.083z"/>
+ <g id="question-mark">
+ <path id="top" d="M12.234 6.688c2.5 0 3.219 2.188 3.219 2.188l-1.411.854s-.298-.791-.901-1.229c-.516-.375-1.625-.625-2.219.125-.701.885.17 1.587 1.078 2.719.953 1.186 1 3.655 1 3.655h-1.969s-.135-2.318-1.041-3.381c-.603-.707-1.443-1.338-1.443-2.494 0-1.156 1.187-2.437 3.687-2.437z"/>
+ <path id="bottom" d="M13 16h-2v2h2z"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/history.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/history.svg
new file mode 100644
index 00000000..35f15afe
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/history.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="history">
+ <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.559 1.702-6.559s-4.35 5.363-4.877 6.699c-.463 1.168 1.459 2.209 2.346 1.678 1.9.551 4.834 1.244 4.834 1.244z"/>
+ <path id="arrow" d="M12.086 2.085c-5.478 0-9.916 4.438-9.916 9.916 0 1.783.476 3.454 1.301 4.898l-2.223 2.04h5.688v-5.219l-2.066 1.896c-.55-1.088-.866-2.312-.866-3.615 0-4.465 3.619-8.084 8.084-8.084 4.464 0 8.083 3.619 8.083 8.084 0 4.464-3.619 8.083-8.083 8.083-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874 5.476 0 9.914-4.438 9.914-9.914-.001-5.477-4.439-9.915-9.915-9.915z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-ltr.svg
new file mode 100644
index 00000000..bebe0a9e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20 18l-4-4-2 2-4-4-2 1-4 5h16zm2-13v15h-20v-15h20z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-rtl.svg
new file mode 100644
index 00000000..88e0e3c0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/image-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g278">
+ <path d="M4 18l4-4 2 2 4-4 2 1 4 5h-16zm-2-13v15h20v-15h-20z" id="path280"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-ltr.svg
new file mode 100644
index 00000000..300e4b15
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-ltr.svg
@@ -0,0 +1,7 @@
+<?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 12v-4h-4v-3h-13v15h20v-8h-3zm-15 6l4-5 2-1 4 4 2-2 4 4h-16z"/>
+ <g>
+ <path d="M24 5h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-rtl.svg
new file mode 100644
index 00000000..70e32486
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageAdd-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 12v-4h4v-3h13v15h-20v-8h3zm15 6l-4-5-2-1-4 4-2-2-4 4h16z" id="path290"/>
+ <g id="g292">
+ <path d="M0 5h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path294"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-ltr.svg
new file mode 100644
index 00000000..8cec9f5a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19.5 4h-3v-1s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zm1.5 0v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-8 7v-6h-11v15h20v-9zm-9 7l4-5 2-1 4 4 2-2 4 4z" id="path304"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-rtl.svg
new file mode 100644
index 00000000..6bb78f71
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/imageLock-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M4.5 4h3v-1s0-1.5-1.5-1.5c-1.5.06-1.5 1.5-1.5 1.5zm-1.5 0v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm8 7v-6h11v15h-20v-9zm9 7l-4-5-2-1-4 4-2-2-4 4z" id="path304"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-ltr.svg
new file mode 100644
index 00000000..ada33959
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M10 8h9v2h-9v-2zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8h-18v-2h18v2zm0 14h-18v-2h18v2zm-18-12v8l5-4-5-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-rtl.svg
new file mode 100644
index 00000000..9afedbbd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/indent-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g314">
+ <path d="M14 8h-9v2h9v-2zm0 3h-9v2h9v-2zm0 3h-6v2h6v-2zm-11-8h18v-2h-18v2zm0 14h18v-2h-18v2zm18-12v8l-5-4 5-4z" id="path316"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/info.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/info.svg
new file mode 100644
index 00000000..4bdefd46
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/info.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="info">
+ <path id="circled-i" d="M11.499 17c-3.036 0-5.499-2.464-5.499-5.5 0-3.037 2.462-5.5 5.499-5.5 3.037 0 5.501 2.462 5.501 5.5 0 3.036-2.464 5.5-5.501 5.5zm.002-12c-3.591 0-6.501 2.91-6.501 6.5s2.91 6.5 6.501 6.5c3.588 0 6.499-2.911 6.499-6.5s-2.911-6.5-6.499-6.5zM12 10v4h1v1h-3v-1h1v-3h-1v-1zM11 8h1v1h-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/insert.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/insert.svg
new file mode 100644
index 00000000..0833f84f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/insert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="insert">
+ <path d="M13 5h-2v6h-6v2h6v6h2v-6h6v-2h-6z" id="plus"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-a.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-a.svg
new file mode 100644
index 00000000..a0e66bff
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-a.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-a">
+ <path id="a" d="M14.667 6h-1.372l-7 12h1.705l2.333-4h4l.667 4h1.667l-2-12zm-3.75 7l2.527-4.333.723 4.333h-3.25z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg
new file mode 100644
index 00000000..d4bff1be
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-arab-keheh-jeem">
+ <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.299-.774.712-.875 1.125-.064.263-.035.572.063.781.189.405.539.574.844.813l.094-.125.531.625c.14.164.343.513.469.938.137.463.08.725 0 1.125h-3.438c-.338 0-.592.007-.766-.02-.339-.053-.256-.208-.234-.34.332-.127.564-.173.938-.141.29-.494.593-.885.906-1.313-.98.037-1.878.015-2.688-.094-.346-.047-.698-.186-1.094-.156-.357.026-.768.239-1.031.719-.246.448-.434.839-.656 1.281l.75-.469c.23-.142.484-.227.719-.219.157.005.275.054.406.094-.231.205-.509.402-.719.563-.301.26-.702.688-.906 1-.403.615-.694 1.084-.875 1.781-.179.689.004 1.339.469 1.75.426.376.846.519 1.281.563.65.065 1.205.093 2-.188.657-.231 1.021-.553 1.5-.969-.883.11-1.817.089-2.531.031-.871-.07-1.268-.384-1.469-.594-.271-.283-.307-.64-.156-1.219.036-.141.097-.323.25-.531.168-.228.364-.435.594-.656.451-.436 1.011-.737 1.461-.938-.045.206-.107.443-.055.688.049.229.248.379.438.469.259.122.506.155.688.156 1.421.011 2.862 0 4.281 0 .247 0 .452-.163.594-.375.139-.208.249-.481.344-.844.131-.499.094-1.062-.094-1.625-.182-.543-.418-1.009-.719-1.406-.335-.443-.674-.829-1-1.219 1.257-.815 2.716-1.239 3.969-1.688.121-.452.224-.926.313-1.313zm-9.469 8.438c-.262.394-.584.691-.875 1 .375.286.748.556 1.094.813.335-.303.626-.674.875-.969-.39-.268-.771-.588-1.094-.844z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-meem.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-meem.svg
new file mode 100644
index 00000000..bfbc9bf5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-arab-meem.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-arab-meem">
+ <path id="arab-meem" d="M16 9.729l-.93 2.19h-4.663c-.479 0-.857.122-1.135.367l-.061.11c-.184 2.016-.502 3.558-.955 4.627-.272.641-.633 1.252-1.082 1.833-.177.226-.219.186-.126-.119l.142-.504.17-.669.234-.87.002-.009.202-1.045.258-1.411.353-1.906c.191-.312.424-.638.699-.98.276-.342.589-.706.94-1.09.129-.092.697-.18 1.705-.266 1.05-.086 1.638-.183 1.765-.293l.065-.128c.007-.11-.011-.241-.054-.394-.043-.153-.12-.327-.231-.522-.22-.428-.438-.641-.654-.641-.294 0-.915.269-1.864.806-.359.208-.376.125-.051-.247 1.558-1.71 2.708-2.566 3.45-2.566.383 0 .671.131.863.394.135.195.25.599.344 1.21l.203 1.2c.106.586.242.895.409.925"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-armn-sha.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-armn-sha.svg
new file mode 100644
index 00000000..63de0f6c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-armn-sha.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-armn-sha">
+ <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.586 6h1.724c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.324 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.038-.356-.057-.576-.057-.583 0-1.137.095-1.663.284-.524.19-1 .46-1.425.812-.42.35-.777.78-1.072 1.283-.294.504-.504 1.074-.63 1.71-.242 1.255-.152 2.21.268 2.868.426.652 1.19.978 2.294.978.55 0 1.045-.08 1.48-.237.437-.156.815-.377 1.136-.66.326-.29.59-.633.796-1.033.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.026-1.214 1.425-.488.394-1.053.7-1.694.922-.642.215-1.343.323-2.105.323-.767 0-1.434-.113-2-.34-.568-.225-1.025-.553-1.372-.984-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.567.697-1.066 1.144-1.496.445-.436.944-.794 1.496-1.072.55-.284 1.13-.475 1.733-.575l-.466-.23"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-c.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-c.svg
new file mode 100644
index 00000000..b468deac
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-c.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-c">
+ <path id="c" d="M15.008 13.718l1.481.214c-.468 1.34-1.15 2.354-2.046 3.04-.896.686-1.901 1.029-3.015 1.029-1.359 0-2.438-.43-3.237-1.29-.794-.86-1.191-2.092-1.191-3.697 0-2.09.606-3.818 1.817-5.185 1.079-1.219 2.42-1.828 4.023-1.828 1.186 0 2.145.33 2.878.989.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.839-.453-1.464-.916-1.876-.458-.417-1.051-.625-1.779-.625-1.369 0-2.476.631-3.321 1.892-.733 1.087-1.099 2.377-1.099 3.871 0 1.193.282 2.103.847 2.731.565.628 1.3.942 2.206.942.774 0 1.473-.261 2.099-.784.626-.522 1.081-1.261 1.366-2.216"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-d.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-d.svg
new file mode 100644
index 00000000..92a834d9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-d.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-d">
+ <path id="d" d="M7 18l2.462-12h3.557c.853 0 1.505.063 1.955.188.644.169 1.194.472 1.65.909.456.431.799.971 1.03 1.621.231.649.346 1.378.346 2.186 0 .966-.145 1.847-.435 2.644-.284.791-.66 1.49-1.127 2.095-.461.6-.947 1.072-1.456 1.416-.504.338-1.102.589-1.794.753-.526.126-1.172.188-1.939.188h-4.249m1.859-1.359h1.867c.842 0 1.591-.079 2.245-.237.408-.098.756-.243 1.046-.434.381-.246.727-.57 1.038-.974.408-.535.732-1.143.974-1.825.247-.688.37-1.468.37-2.341 0-.971-.166-1.716-.499-2.235-.333-.524-.756-.87-1.271-1.04-.381-.126-.974-.188-1.778-.188h-1.85l-1.907 9.274"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-e.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-e.svg
new file mode 100644
index 00000000..66a5ef5d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-e.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-e">
+ <path id="e" d="M7 18l2.474-12h8.526l-.282 1.367h-6.947l-.75 3.633h6.09l-.282 1.367h-6.09l-.877 4.274h7.438l-.282 1.359h-9.018"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-geor-kan.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-geor-kan.svg
new file mode 100644
index 00000000..3398904d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-geor-kan.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-geor-kan">
+ <path id="geor-kan" d="M15.057 14.663c-.441 2.225-1.834 3.337-4.178 3.337-1.919 0-2.879-.787-2.879-2.36 0-.298.036-.624.108-.977.083-.431.245-.836.488-1.217l1.241.605-.207.613c-.055.259-.083.497-.083.712 0 .972.521 1.458 1.564 1.458 1.307 0 2.101-.723 2.383-2.17l.058-.331c.044-.221.066-.425.066-.613 0-.928-.546-1.391-1.638-1.391h-1.117l.248-1.259h1.117c1.202-.005 1.908-.552 2.118-1.64.039-.182.058-.356.058-.522 0-1.143-.899-1.714-2.697-1.714l.232-1.193c2.708 0 4.062.875 4.062 2.625 0 .248-.028.516-.083.803-.204 1.093-1.051 1.825-2.54 2.195l-.033.166c1.23.199 1.845.823 1.845 1.872 0 .21-.025.433-.074.671l-.058.331"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-i.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-i.svg
new file mode 100644
index 00000000..93bec5a6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-i.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-i">
+ <path id="i" d="M12.5 17.999l.249-.994h-1.5l2.509-10.037h1.5l.242-.967h-5l-.242.967h1.5l-2.509 10.037h-1.5l-.249.994z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-k.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-k.svg
new file mode 100644
index 00000000..d4831549
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-k.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-k">
+ <path id="k" d="M12.018 10.652l4.982-4.652h-2l-5.309 5.234 1.309-5.234h-1.5l-3 12h1.5l1.173-4.693 1.54-1.438c.287 4.131 3.287 6.131 3.287 6.131h2s-4-2-3.982-7.348z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-s.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-s.svg
new file mode 100644
index 00000000..4f6364cb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/italic-s.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="italic-s">
+ <path id="s" d="M16.474 6.589l-.302 1.526c-.522-.279-1.041-.488-1.557-.628-.511-.145-1.007-.217-1.487-.217-.935 0-1.679.204-2.231.612-.553.408-.829.95-.829 1.627 0 .372.101.658.302.86.207.196.733.408 1.58.635l.937.232c1.059.274 1.795.622 2.208 1.046.413.418.62 1.007.62 1.766 0 1.167-.46 2.117-1.379 2.851-.914.733-2.12 1.1-3.618 1.1-.615 0-1.232-.062-1.852-.186-.62-.119-1.242-.302-1.867-.55l.318-1.611c.573.356 1.147.625 1.72.806.578.181 1.154.271 1.728.271.976 0 1.759-.217 2.347-.651.589-.434.883-.999.883-1.697 0-.465-.119-.816-.356-1.054-.232-.243-.736-.462-1.511-.658l-.937-.24c-1.069-.279-1.8-.599-2.192-.961-.387-.367-.581-.878-.581-1.534 0-1.152.442-2.094 1.325-2.828.888-.739 2.043-1.108 3.463-1.108.553 0 1.1.049 1.642.147.542.098 1.085.245 1.627.442"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-ltr.svg
new file mode 100644
index 00000000..c7e16033
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16 9v-1h-6v1h6zm-2 2v-1h-4v1h4zm-8-6h1v16h-1v-16zm2 0h10v13c0 1.7-1.3 3-3 3h-7v-16z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-rtl.svg
new file mode 100644
index 00000000..2d16be37
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/journal-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M8 9v-1h6v1h-6zm2 2v-1h4v1h-4zm8-6h-1v16h1v-16zm-2 0h-10v13c0 1.7 1.3 3 3 3h7v-16z" id="path326"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-ltr.svg
new file mode 100644
index 00000000..8dfb89ae
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M14.5 4c-3 0-5.5 2.5-5.5 5.5 0 1 .3 1.9.7 2.8l-5.7 5.7v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5s-2.5-5.5-5.5-5.5zm1.5 5c-.8 0-1.5-.7-1.5-1.5s.7-1.5 1.5-1.5 1.5.7 1.5 1.5-.7 1.5-1.5 1.5z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-rtl.svg
new file mode 100644
index 00000000..06392874
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/key-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8l5.7 5.7v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5s2.5-5.5 5.5-5.5zm-1.5 5c.8 0 1.5-.7 1.5-1.5s-.7-1.5-1.5-1.5-1.5.7-1.5 1.5.7 1.5 1.5 1.5z" id="path336"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-ltr.svg
new file mode 100644
index 00000000..ea5055c8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M3 7v9c0 1.7 1.3 3 3 3h15v-12h-18zm8 2h2v2h-2v-2zm0 3h2v2h-2v-2zm-3-3h2v2h-2v-2zm0 3h2v2h-2v-2zm-1 5h-1c-.6 0-1-.4-1-1v-1h2v2zm0-3h-2v-2h2v2zm0-3h-2v-2h2v2zm9 6h-8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2v-2h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2v-2h2v2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-rtl.svg
new file mode 100644
index 00000000..b35d108d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/keyboard-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g346">
+ <path d="M21 7v9c0 1.7-1.3 3-3 3h-15v-12h18zm-8 2h-2v2h2v-2zm0 3h-2v2h2v-2zm3-3h-2v2h2v-2zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2v-2h-2v2zm-9 6h8v-2h-8v2zm0-3h2v-2h-2v2zm0-3h2v-2h-2v2zm-3 6h2v-2h-2v2zm0-3h2v-2h-2v2zm0-3h2v-2h-2v2z" id="path348"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/language.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/language.svg
new file mode 100644
index 00000000..081e49a1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/language.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="language">
+ <path id="japanese" d="M17.533 9.81l.271-.59 1.041.407-.18.363c.661.271 1.101.468 1.312.589.331.211.618.514.86.905.211.393.316.846.316 1.358 0 .786-.302 1.479-.905 2.083-.604.634-1.66 1.057-3.169 1.268-.121-.361-.258-.679-.408-.95.965-.151 1.645-.333 2.037-.545.454-.21.785-.481.998-.813.21-.303.314-.663.314-1.087 0-.482-.136-.905-.407-1.269-.331-.331-.8-.589-1.402-.77-.333.634-.649 1.117-.951 1.449-.242.332-.694.906-1.358 1.721.09.393.181.709.272.951l-1.042.362-.091-.498c-.423.361-.801.617-1.133.77-.361.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.301-.362-.68-.362-1.132 0-.604.136-1.147.407-1.63.241-.453.603-.89 1.086-1.313.272-.241.725-.528 1.359-.86 0-.271.03-.799.09-1.585-.514.03-.921.045-1.222.045-.393 0-.711-.015-.951-.045l-.046-1.041c.725.091 1.494.135 2.31.135 0-.149.075-.738.227-1.766l1.177.183c-.151.542-.256 1.041-.316 1.493.242-.029.543-.075.906-.136.362-.061.573-.091.634-.091s.648-.15 1.766-.453l.046 1.041c-.967.243-2.145.439-3.532.591-.062.663-.092 1.086-.092 1.266.663-.151 1.284-.225 1.857-.225zm-2.672 3.893c-.061-.481-.136-1.252-.227-2.31-.573.424-1.041.86-1.403 1.313-.303.423-.452.875-.452 1.358 0 .241.044.438.136.588.09.092.195.137.316.137.363.001.907-.361 1.63-1.086zm.771-2.763c0 .483.029 1.088.09 1.811.604-.905 1.057-1.599 1.359-2.082-.574.06-1.058.151-1.449.271z"/>
+ <path id="english" d="M9.497 15.981h1.851l-3.084-8.949h-1.85l-3.081 8.949h1.85l.557-1.981h3.209l.548 1.981zm-3.489-3.377l1.331-3.782 1.344 3.782h-2.675z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-ltr.svg
new file mode 100644
index 00000000..47e71b39
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="layout-ltr">
+ <path id="text" d="M5 19v-14h6v8h8v6h-14z"/>
+ <path id="float" d="M13 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-rtl.svg
new file mode 100644
index 00000000..fe9ee617
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/layout-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="layout-rtl">
+ <path id="text" d="M5 19v-6h8v-8h6v14h-14z"/>
+ <path id="float" d="M5 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-ltr.svg
new file mode 100644
index 00000000..841ba7d4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-ltr.svg
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<g>
+ <path d="M-471.2,493.6c-2.1,0-3.6,1.9-5.1,3.3c0.2,0,0.5-0.1,0.8-0.1c0.5,0,1,0.1,1.5,0.3c0.8-0.8,1.6-1.7,2.8-1.7
+ c0.6,0,1.3,0.3,1.8,0.7c1,1,1,2.6,0,3.6l-2.6,2.6c-0.4,0.4-1.2,0.7-1.8,0.7c-1.4,0-2.1-0.9-2.6-2l-1.3,1.3c0.8,1.5,2,2.6,3.8,2.6
+ c1.2,0,2.3-0.5,3-1.3l2.6-2.6c0.9-0.9,1.5-2,1.5-3.3C-467,495.5-469,493.6-471.2,493.6z M-475.5,505.7l-0.9,0.9
+ c-0.4,0.4-1.2,0.7-1.8,0.7c-0.6,0-1.3-0.3-1.8-0.7c-1-1-1-2.7,0-3.6l2.6-2.6c0.4-0.4,1.2-0.7,1.8-0.7c1.4,0,2.1,1,2.6,2l1.3-1.3
+ c-0.8-1.5-2-2.6-3.8-2.6c-1.2,0-2.3,0.5-3,1.3l-2.6,2.6c-1.7,1.7-1.7,4.4,0,6c1.6,1.6,4.4,1.7,5.9,0l1.9-1.9
+ c-0.3,0.1-0.6,0.1-0.9,0.1C-474.7,505.9-475.1,505.9-475.5,505.7z"/>
+</g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-rtl.svg
new file mode 100644
index 00000000..d4c2fd66
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/link-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g358">
+ <path d="M9.025 3.6c2.1 0 3.6 1.9 5.1 3.3-.2 0-.5-.1-.8-.1-.5 0-1 .1-1.5.3-.8-.8-1.6-1.7-2.8-1.7-.6 0-1.3.3-1.8.7-1 1-1 2.6 0 3.6l2.6 2.6c.4.4 1.2.7 1.8.7 1.4 0 2.1-.9 2.6-2l1.3 1.3c-.8 1.5-2 2.6-3.8 2.6-1.2 0-2.3-.5-3-1.3l-2.6-2.6c-.9-.9-1.5-2-1.5-3.3.2-2.2 2.2-4.1 4.4-4.1zm4.3 12.1l.9.9c.4.4 1.2.7 1.8.7.6 0 1.3-.3 1.8-.7 1-1 1-2.7 0-3.6l-2.6-2.6c-.4-.4-1.2-.7-1.8-.7-1.4 0-2.1 1-2.6 2l-1.3-1.3c.8-1.5 2-2.6 3.8-2.6 1.2 0 2.3.5 3 1.3l2.6 2.6c1.7 1.7 1.7 4.4 0 6-1.6 1.6-4.4 1.7-5.9 0l-1.9-1.9c.3.1.6.1.9.1.5 0 .9 0 1.3-.2z" id="path360"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-ltr.svg
new file mode 100644
index 00000000..09a4ff5d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M21 7h-12v-2h12v2zm-14-1c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7h-12v-2h12v2zm-14-1c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm14 7h-12v-2h12v2zm-14-1c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-rtl.svg
new file mode 100644
index 00000000..67b9dfee
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listBullet-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M3 7h12v-2h-12v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-14 7h12v-2h-12v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2zm-14 7h12v-2h-12v2zm14-1c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2z" id="path370"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-ltr.svg
new file mode 100644
index 00000000..87e8854e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M21 7h-13v-2h13v2zm0 6h-13v-2h13v2zm0 6h-13v-2h13v2zm-17-15h2v4h-1v-3h-1zm-1 6v-1h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-rtl.svg
new file mode 100644
index 00000000..831a5fb9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/listNumbered-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M3 7h13v-2h-13zm0 6h13v-2h-13zm0 6h13v-2h-13zm15-15h2v4h-1v-3h-1zm0 6v-1h3v3h-2v1h2v1h-3v-3h2v-1zm3 10h-3v-1h2v-1h-1v-1h1v-1h-2v-1h3z" id="path380"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-ltr.svg
new file mode 100644
index 00000000..59454922
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g390">
+ <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-rtl.svg
new file mode 100644
index 00000000..0591f661
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/lock-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g390">
+ <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-ltr.svg
new file mode 100644
index 00000000..4af765ca
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M15 14v3l5-4.5-5-4.5v3h-7c0 1.7 1.3 3 3 3h4zm-1-9h-10v15h10v-2h-8v-11h8v-2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-rtl.svg
new file mode 100644
index 00000000..f72c04ad
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logOut-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g402">
+ <path d="M9 14v3l-5-4.5 5-4.5v3h7c0 1.7-1.3 3-3 3h-4zm1-9h10v15h-10v-2h8v-11h-8v-2z" id="path404"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-cc.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-cc.svg
new file mode 100644
index 00000000..124b2101
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-cc.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M12 6c-3.9 0-7 3.1-7 7s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7zm0 13c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm-1.7-4.6c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5zm4 0c-.7 0-1-.4-1-1.2s.3-1.2 1-1.2c.4 0 .6.2.8.6l.9-.5c-.4-.7-1-1-1.9-1-.6 0-1.1.2-1.5.6s-.6.8-.6 1.5.2 1.2.6 1.6c.4.4.9.6 1.5.6.8 0 1.4-.4 1.9-1.1l-.9-.4c-.2.3-.5.5-.8.5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikimediaCommons.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikimediaCommons.svg
new file mode 100644
index 00000000..079e1773
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikimediaCommons.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1v-.8l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1-1.5-1v.8h-1c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4c-1.5 1.4-2.5 3.5-2.5 5.8 0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z"/>
+ <circle cx="12" cy="15" r="3"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikipedia.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikipedia.svg
new file mode 100644
index 00000000..6672d9dc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/logo-wikipedia.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M22.3 6.3c0 .2 0 .3-.1.3-.7.1-1.2.5-1.6 1.1-.1.2-.2.4-.3.7l-4.6 10.1c-.1.2-.2.3-.2.3s-.1.1-.2.1c-.2 0-.4-.1-.5-.4l-2.6-5.5-2.8 5.5c-.1.3-.3.4-.5.4s-.4-.1-.5-.4l-4.3-10.1c-.3-.8-.6-1.2-.8-1.4-.2-.2-.5-.3-1-.4-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h4.3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.6.1-1 .2-1.1.4-.1.2 0 .6.3 1.2l3.6 8.2h.1l2.2-4.4-1.7-3.6c-.3-.7-.6-1.2-.8-1.4s-.5-.3-.9-.4c-.1-.1-.1-.2-.1-.3 0-.2 0-.3.1-.3h3.6c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.4.1-.6.2-.6.4s.1.6.4 1.2l1 1.9 1-1.9c.3-.6.5-.9.5-1.1 0-.2 0-.3-.1-.4-.1-.1-.3-.1-.5-.1l-.1-.3c0-.2 0-.3.1-.3h3c.1.1.1.2.1.3 0 .2 0 .3-.1.3-.5.1-.8.2-1.1.5-.3.3-.6.7-.8 1.3l-1.3 2.8 2.5 5.2h.1l3.7-8.1c.3-.5.3-.9.2-1.2-.1-.3-.5-.4-1.1-.5-.1-.1-.1-.2-.1-.3s0-.3.1-.3h3.7c-.2.1-.2.2-.2.3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-ltr.svg
new file mode 100644
index 00000000..0fc47737
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15 6l-6-2-6 2v15l6-2 6 2 6-2v-15l-6 2zm-6.3 12.1l-4.7 1.5v-12.9l5-1.7v12.9l-.3.2zm11.3.2l-5 1.7v-12.9l.3-.1 4.7-1.6v12.9z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-rtl.svg
new file mode 100644
index 00000000..b33f1e39
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/map-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M9 6l6-2 6 2v15l-6-2-6 2-6-2v-15l6 2zm6.3 12.1l4.7 1.5v-12.9l-5-1.7v12.9l.3.2zm-11.3.2l5 1.7v-12.9l-.3-.1-4.7-1.6v12.9z" id="path424"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPin.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPin.svg
new file mode 100644
index 00000000..f422c84f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPin.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19 12c0-3.9-3.1-7-7-7s-7 3.1-7 7c0 1.4.4 2.6 1.1 3.7l5.9 7.3 5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7zm-7 4c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path4"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-ltr.svg
new file mode 100644
index 00000000..9a54eb6a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g434">
+ <g id="g436">
+ <path d="M24 4h-4v-4h-2v4h-4v2h4v4h2v-4h4z" id="path438"/>
+ </g>
+ </g>
+ <path d="M18 11h-1v-3.9l-.1-.1h-3.9v-1.9c-.3-.1-.7-.1-1-.1-3.9 0-7 3.1-7 7 0 1.4.4 2.6 1.1 3.7l5.9 7.3 5.9-7.3c.7-1.1 1.1-2.3 1.1-3.7 0-.3 0-.7-.1-1h-.9zm-6 5c-2.2 0-4-1.8-4-4s1.8-4 4-4 4 1.8 4 4-1.8 4-4 4z" id="path440"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-rtl.svg
new file mode 100644
index 00000000..d3e152e0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/mapPinAdd-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g434">
+ <g id="g436">
+ <path d="M0 4h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path438"/>
+ </g>
+ </g>
+ <path d="M6 11h1v-3.9l.1-.1h3.9v-1.9c.3-.1.7-.1 1-.1 3.9 0 7 3.1 7 7 0 1.4-.4 2.6-1.1 3.7l-5.9 7.3-5.9-7.3c-.7-1.1-1.1-2.3-1.1-3.7 0-.3 0-.7.1-1h.9zm6 5c2.2 0 4-1.8 4-4s-1.8-4-4-4-4 1.8-4 4 1.8 4 4 4z" id="path440"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/menu.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/menu.svg
new file mode 100644
index 00000000..89fd9789
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/menu.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<g id="menu">
+ <path id="lines" d="M-481,505h12c0.6,0,1,0.4,1,1v1c0,0.6-0.4,1-1,1h-12c-0.6,0-1-0.4-1-1v-1C-482,505.4-481.6,505-481,505z
+ M-482,501v1c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,500-482,500.4-482,501z M-482,496v1
+ c0,0.6,0.4,1,1,1h12c0.6,0,1-0.4,1-1v-1c0-0.6-0.4-1-1-1h-12C-481.6,495-482,495.4-482,496z"/>
+</g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-ltr.svg
new file mode 100644
index 00000000..3f308ff7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M21 9c0-1.7-1.3-3-3-3h-15v3l9 4 9-4zm-18 2v6c0 1.7 1.3 3 3 3h15v-9l-9 4-9-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-rtl.svg
new file mode 100644
index 00000000..fa61aa18
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/message-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g450">
+ <path d="M3 9c0-1.7 1.3-3 3-3h15v3l-9 4-9-4zm18 2v6c0 1.7-1.3 3-3 3h-15v-9l9 4 9-4z" id="path452"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-ltr.svg
new file mode 100644
index 00000000..51e6611a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="move-ltr">
+ <path id="arrow" d="M8.935 7.181l5.302 5.302-5.302 5.303 1.414 1.414 6.716-6.717-6.716-6.716z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-rtl.svg
new file mode 100644
index 00000000..bcee09d9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="move-rtl">
+ <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.414-6.716 6.716 6.716 6.717z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move.svg
new file mode 100644
index 00000000..9063bd48
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/move.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M20 11l-4-3v2h-3v-3h2l-3-4-3 4h2v3h-3v-2l-4 3 4 3v-2h3v3h-2l3 4 3-4h-2v-3h3v2z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-ltr.svg
new file mode 100644
index 00000000..b8ea833e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M12 5l2.5 2.5-3.5 3.5c-1.2 1.2-1.2 2.8 0 4l5.5-5.5 2.5 2.5v-7h-7zm5 12h-9c-.6 0-1-.4-1-1v-9h3l-2-2h-3v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z" id="path6"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-rtl.svg
new file mode 100644
index 00000000..58a9eeb2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newWindow-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g462">
+ <path d="M12 5l-2.5 2.5 3.5 3.5c1.2 1.2 1.2 2.8 0 4l-5.5-5.5-2.5 2.5v-7h7zm-5 12h9c.6 0 1-.4 1-1v-9h-3l2-2h3v11c0 1.7-1.3 3-3 3h-11v-3l2-2v3z" id="path464"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-ltr.svg
new file mode 100644
index 00000000..dad5f51c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="line_return">
+ <path d="M17.8 5.7c-.5 0-.9.2-1.2.5s-.5.7-.5 1.2v4.3h-5.1v-4l-6 5.5 6 5.5v-4h8v-9h-1.2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-rtl.svg
new file mode 100644
index 00000000..fd758cc6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newline-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="line_return">
+ <path d="M6.2 5.7c.5 0 .9.2 1.2.5.3.3.5.7.5 1.2v4.3H13v-4l6 5.5-6 5.5v-4H5v-9h1.2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-ltr.svg
new file mode 100644
index 00000000..46471a33
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6 7v12c-.6 0-1-.4-1-1v-9h-1v9c0 1.1.9 2 2 2h15v-13h-15zm9 11h-7v-1h7v1zm0-2h-7v-1h7v1zm0-2h-7v-1h7v1zm4 4h-3v-5h3v5zm0-7h-11v-2h11v2z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-rtl.svg
new file mode 100644
index 00000000..7564dff0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/newspaper-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19 7v12c.6 0 1-.4 1-1v-9h1v9c0 1.1-.9 2-2 2h-15v-13h15zm-9 11h7v-1h-7v1zm0-2h7v-1h-7v1zm0-2h7v-1h-7v1zm-4 4h3v-5h-3v5zm0-7h11v-2h-11v2z" id="path474"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-ltr.svg
new file mode 100644
index 00000000..601428e2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M16 14l2 2v-11h-4v2h2zm0 2l-7-7-2-2-1-1-1-1-3-3-1 1 2 2h-1v14h4v-2h-2v-10h1l2 2v10h4v-2h-2v-6l6 6h-1v2h3l4 4 1-1-4-4zm-5-9v-2h-4l2 2zm8-2v2h2v10h-2l2 2h2v-14z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-rtl.svg
new file mode 100644
index 00000000..31785a3c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/noWikiText-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g484">
+ <path d="M8 14l-2 2v-11h4v2h-2zm0 2l7-7 2-2 1-1 1-1 3-3 1 1-2 2h1v14h-4v-2h2v-10h-1l-2 2v10h-4v-2h2v-6l-6 6h1v2h-3l-4 4-1-1 4-4zm5-9v-2h4l-2 2zm-8-2v2h-2v10h2l-2 2h-2v-14z" id="path486"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-ltr.svg
new file mode 100644
index 00000000..4264ff08
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M10 8h9v2h-9v-2zm0 3h9v2h-9v-2zm0 3h6v2h-6v-2zm11-8h-18v-2h18v2zm0 14h-18v-2h18v2zm-18-8l5 4v-8l-5 4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-rtl.svg
new file mode 100644
index 00000000..2479343e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outdent-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g496">
+ <path d="M14 8h-9v2h9v-2zm0 3h-9v2h9v-2zm0 3h-6v2h6v-2zm-11-8h18v-2h-18v2zm0 14h18v-2h-18v2zm18-8l-5 4v-8l5 4z" id="path498"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-ltr.svg
new file mode 100644
index 00000000..9c0ea598
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="outline-ltr">
+ <path id="text" d="M5 13h14v6h-14v-6z"/>
+ <path id="float" d="M5 5v6h6v-6h-6zm5 5h-4v-4h4v4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-rtl.svg
new file mode 100644
index 00000000..2a3428e9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/outline-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="outline-rtl">
+ <path id="text" d="M19 19h-14v-6h14v6z"/>
+ <path id="float" d="M13 5v6h6v-6h-6zm1 1h4v4h-4v-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-ltr.svg
new file mode 100644
index 00000000..92fc07ed
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M2 3h18v2h-16v12h-2v-14zm13 13l-4-4-4 5h13l-3-3-2 2zm-10-10h17v13h-17v-13z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-rtl.svg
new file mode 100644
index 00000000..d989d3d4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/photoGallery-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g508">
+ <path d="M22 3h-18v2h16v12h2v-14zm-13 13l4-4 4 5h-13l3-3 2 2zm10-10h-17v13h17v-13z" id="path510"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/picture.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/picture.svg
new file mode 100644
index 00000000..7400bca9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/picture.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="picture">
+ <path id="frame" d="M18 4h-12c-2-.007-3 .993-3 2.993l.014 9.007c-.014 2 .986 2.988 2.986 3h12c2-.012 2.994-1 3-3.006v-9.001c-.006-2-1-3-3-2.993zm1 13h-14v-11h14v11z"/>
+ <path id="mountains" d="M6 13.5l3.5-3.5 2.328 2.312-1.312 1.094.875 1.032 4.109-3.438 2.5 2v3h-12z"/>
+ <path id="sky" d="M6 12l3.516-4.156 3.046 3.172 2.938-2.016 2.5 2v-4h-12z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-ltr.svg
new file mode 100644
index 00000000..5ce95636
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-2 12v-8l6 4-6 4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-rtl.svg
new file mode 100644
index 00000000..591a5d3a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/play-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g520">
+ <path d="M12 5c4.4 0 8 3.6 8 8s-3.6 8-8 8-8-3.6-8-8 3.6-8 8-8zm2 12v-8l-6 4 6 4z" id="path522"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-ltr.svg
new file mode 100644
index 00000000..baae35e9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M18 8h-1v-4h-10v4h-4v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zm-10-3h8v3h-8v-3zm8 14h-8v-6h8v6z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-rtl.svg
new file mode 100644
index 00000000..8294afd5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/printer-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6 8h1v-4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3h-10v-3h-4v-6c0-1.7 1.3-3 3-3zm10-3h-8v3h8v-3zm-8 14h8v-6h-8v6z" id="path532"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-ltr.svg
new file mode 100644
index 00000000..97b77bb4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M18 9.9c-.7 0-1.4.3-1.8.9v-4.8h-4c.2-.4.4-.8.4-1.2 0-1.2-1-2.2-2.2-2.2-1.3-.1-2.3.9-2.3 2.2 0 .4.2.8.4 1.2h-4.4v3.6l.6-.1c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5c-.2 0-.4 0-.6-.1v3.6h4.9c-.5.4-.9 1-.9 1.8 0 1.2 1 2.2 2.3 2.2 1.2 0 2.2-1 2.2-2.2 0-.7-.3-1.4-.9-1.8h4.5v-4.5c.4.5 1 .9 1.8.9 1.2 0 2.2-1 2.2-2.2 0-1.3-1-2.3-2.2-2.3z" id="path542"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-rtl.svg
new file mode 100644
index 00000000..0ad5f375
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/puzzle-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6.3 9.9c.7 0 1.4.3 1.8.9v-4.8h4c-.2-.4-.4-.8-.4-1.2 0-1.2 1-2.2 2.2-2.2 1.3-.1 2.3.9 2.3 2.2 0 .4-.2.8-.4 1.2h4.4v3.6l-.6-.1c-1.4 0-2.5 1.1-2.5 2.5s1.1 2.5 2.5 2.5c.2 0 .4 0 .6-.1v3.6h-4.9c.5.4.9 1 .9 1.8 0 1.2-1 2.2-2.3 2.2-1.2 0-2.2-1-2.2-2.2 0-.7.3-1.4.9-1.8h-4.5v-4.5c-.4.5-1 .9-1.8.9-1.2 0-2.2-1-2.2-2.2 0-1.3 1-2.3 2.2-2.3z" id="path542"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-ltr.svg
new file mode 100644
index 00000000..b3b923e5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<g>
+ <path d="M-468.9,498.1c0.2-0.1,0.5-0.2,0.6-0.5s0.2-0.5,0.2-0.9V496c-1,0.2-1.5,0.2-2.6,0.6c-0.7,0.4-1.2,0.9-1.7,1.4
+ c-0.5,0.5-1.9,2.6-1.9,5.8v3.1h4.7c0.9,0,1.6-0.7,1.6-1.6v-4.7h-3.1c0,0,0.1-0.7,0.6-1.4C-470,498.7-469.5,498.3-468.9,498.1z
+ M-480.1,498c-0.5,0.5-1.9,2.9-1.9,6v2.9h4.7c0.9,0,1.6-0.7,1.6-1.6v-4.7h-3.1c0,0,0.1-0.7,0.6-1.4c0.5-0.5,1-0.9,1.6-1.2
+ c0.2-0.1,0.5-0.2,0.6-0.5s0.2-0.5,0.2-0.9V496c-1,0.2-1.5,0.2-2.6,0.6C-479,497-479.6,497.5-480.1,498z"/>
+</g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-rtl.svg
new file mode 100644
index 00000000..b40a8ac9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotes-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-487 489 24 24" enable-background="new -487 489 24 24" xml:space="preserve">
+<g>
+ <path d="M-479.5,499.3c0.5,0.7,0.6,1.4,0.6,1.4h-3.1v4.7c0,0.9,0.7,1.6,1.6,1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8
+ c-0.5-0.5-1-1-1.7-1.4c-1.1-0.5-1.6-0.5-2.6-0.6v0.8c0,0.3,0.1,0.6,0.2,0.9s0.4,0.4,0.6,0.5C-480.5,498.3-480,498.7-479.5,499.3z
+ M-471.7,496.6c-1.1-0.5-1.6-0.5-2.6-0.6v0.8c0,0.3,0.1,0.6,0.2,0.9s0.4,0.4,0.6,0.5c0.6,0.2,1.2,0.6,1.6,1.2
+ c0.5,0.7,0.6,1.4,0.6,1.4h-3.1v4.7c0,0.9,0.7,1.6,1.6,1.6h4.7V504c0-3.1-1.5-5.4-1.9-6C-470.4,497.5-471,497-471.7,496.6z"/>
+</g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-ltr.svg
new file mode 100644
index 00000000..24fca8f5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M3.5 8.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4s.1-.9.8-1.8c.6-.7 1.3-1.2 2.1-1.5.3-.1.6-.3.8-.6.2-.3.3-.7.3-1.1v-1c-1.3.2-1.9.2-3.3.8-.8.5-1.6 1.1-2.2 1.8zm15.5-3.6v-4h-2v4h-4v2h4v4h2v-4h4v-2zm-4 7s.1-.9.8-1.8l.2-.2v-2h-1.9l-.6.6c-.6.7-2.5 3.4-2.5 7.4v4h6c1.1 0 2-.9 2-2v-6h-4z" id="path6"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-rtl.svg
new file mode 100644
index 00000000..736f2a6d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/quotesAdd-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <path d="M20.5 8.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4s-.1-.9-.8-1.8c-.6-.7-1.3-1.2-2.1-1.5-.3-.1-.6-.3-.8-.6-.2-.3-.3-.7-.3-1.1v-1c1.3.2 1.9.2 3.3.8.8.5 1.6 1.1 2.2 1.8zm-15.5-3.6v-4h2v4h4v2h-4v4h-2v-4h-4v-2zm4 7s-.1-.9-.8-1.8l-.2-.2v-2h1.9l.6.6c.6.7 2.5 3.4 2.5 7.4v4h-6c-1.1 0-2-.9-2-2v-6h4z" id="path6"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-ltr.svg
new file mode 100644
index 00000000..884d40df
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="create_redirect">
+ <g>
+ <path d="M17.7 2.4c-.3-.3-.7-.4-1.2-.4h-12.1v16.2c0 .5.1.8.4 1.1s.7.7 1.2.7h10.2c-.6-.2-1.2-.5-1.9-1-.4-.3-.8-.6-1.2-1l-.5-.6h-6.2v-1.4h5.4s-.4-1.5-.4-2h-5v-1h9v1c.4.1 1.1.1 1.5.1.4 0 .7 0 1.1-.1v-10.5c.1-.5-.1-.9-.3-1.1zm-5.2 1.6h3v4.5h-3v-4.5zm-6.1 0h4v1.6h-4v-1.6zm0 3h4v1.5h-4v-1.5zm0 3h9v1.5h-9v-1.5zm12.7 3.1l4.9 3.8-4.9 4.8v-2.2c-1.7 0-2.9-.2-4.3-1.2-1.2-.8-2.5-2.6-2.3-4.1 1.4 1 2.9 1.5 4.4 1.5.7 0 1.4-.1 2.1-.3l.1-2.3"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-rtl.svg
new file mode 100644
index 00000000..a07e8364
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/redirect-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="create_redirect">
+ <g id="g3264">
+ <path d="M6.3 2.4c.3-.3.7-.4 1.2-.4h12.1v16.2c0 .5-.1.8-.4 1.1-.3.3-.7.7-1.2.7h-10.2c.6-.2 1.2-.5 1.9-1 .4-.3.8-.6 1.2-1l.5-.6h6.2v-1.4h-5.4s.4-1.5.4-2h5v-1h-9v1c-.4.1-1.1.1-1.5.1-.4 0-.7 0-1.1-.1v-10.5c-.1-.5.1-.9.3-1.1zm5.2 1.6h-3v4.5h3v-4.5zm6.1 0h-4v1.6h4v-1.6zm0 3h-4v1.5h4v-1.5zm0 3h-9v1.5h9v-1.5z" id="path3266"/>
+ <path d="M4.9 13.1l-4.9 3.8 4.9 4.8v-2.2c1.7 0 2.9-.2 4.3-1.2 1.2-.8 2.5-2.6 2.3-4.1-1.4 1-2.9 1.5-4.4 1.5-.7 0-1.4-.1-2.1-.3l-.1-2.3" id="path3268"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/regular-expression.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/regular-expression.svg
new file mode 100644
index 00000000..7b672618
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/regular-expression.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="regular-expression">
+ <path id="left-bracket" d="m 3,12.044797 c -5e-7,-0.989171 0.150394,-1.914889 0.451184,-2.7771612 C 3.7558785,8.4053812 4.1933899,7.6495032 4.7637193,7 L 6.2286026,7 C 5.6778034,7.7204251 5.261777,8.511764 4.9805221,9.3740188 4.6992623,10.236291 4.5586337,11.122815 4.5586357,12.033598 c -2e-6,0.914522 0.1425798,1.799179 0.427746,2.653974 C 5.2754491,15.538635 5.6856161,16.309444 6.2168835,17 L 4.7637193,17 C 4.1894835,16.365435 3.7519721,15.624488 3.451184,14.777158 3.150394,13.929828 3,13.019042 3,12.044797" />
+ <path id="dot" d="m 10,16 c 0,0.552285 -0.4477153,1 -1,1 -0.5522847,0 -1,-0.447715 -1,-1 0,-0.552285 0.4477153,-1 1,-1 0.5522847,0 1,0.447715 1,1 z" />
+ <path id="star" d="m 14.250652,7.0127142 -0.240235,2.15625 2.185547,-0.609375 0.193359,1.4765618 -1.992187,0.140625 1.306641,1.740234 -1.330079,0.708985 -0.914062,-1.833985 -0.802734,1.822266 -1.382813,-0.697266 1.294922,-1.740234 -1.980469,-0.152343 0.228516,-1.4648438 2.138672,0.609375 -0.240235,-2.15625 1.535157,0" />
+ <path id="right-bracket" d="m 21,12.044797 c -3e-6,0.981711 -0.152351,1.896229 -0.457043,2.743558 C 20.241767,15.635686 19.806209,16.3729 19.235883,17 l -1.453164,0 c 0.527356,-0.686824 0.93557,-1.455766 1.224642,-2.306829 0.289069,-0.854795 0.433604,-1.741318 0.433606,-2.659573 -2e-6,-0.910783 -0.140631,-1.797307 -0.421886,-2.6595792 C 18.737821,8.511764 18.321795,7.7204251 17.771,7 l 1.464883,0 c 0.574232,0.653236 1.011744,1.4128466 1.312536,2.2788341 0.300785,0.8622719 0.45118,1.7842569 0.451183,2.7659629" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/remove.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/remove.svg
new file mode 100644
index 00000000..6ad79174
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/remove.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="remove">
+ <path id="trash-can" d="M12 10h-1v6h1v-6zm-2 0h-1v6h1v-6zm4 0h-1v6h1v-6zm0-4v-1h-5v1h-3v3h1v7.966l1 1.031v-.074.077h6.984l.016-.018v.015l1-1.031v-7.966h1v-3h-3zm1 11h-7v-8h7v8zm1-9h-9v-1h9v1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ribbonPrize.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ribbonPrize.svg
new file mode 100644
index 00000000..6e4979f8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/ribbonPrize.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="Layer_1">
+ <g>
+ <circle cx="11.5" cy="8.5" r="2.5"/>
+ <path d="M16.3 8.7l.7-.7-.8-.8.4-.8-1.1-.5.1-.9-1.2-.2-.1-.9-1.2.2-.4-.8-1.1.5-.6-.8-.8.8-.9-.4-.5 1.1-.9-.2-.2 1.2-.9.2.2 1.2-.9.4.5 1.1-.6.6.8.8-.4.8 1.1.5-.1.9 1.2.2.1.9 1.2-.2.4.8 1.1-.5.6.8.8-.8.8.4.5-1.1.9.1.2-1.2.9-.1-.2-1.2.8-.4-.4-1zm-4.8 3.3c-1.9 0-3.5-1.6-3.5-3.5s1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5-1.6 3.5-3.5 3.5zm.5 3l-.7-.7-1.1.6-.4-.7-.8.3v8.5l2.5-3 2.5 3v-8.5l-1-.5z"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-ltr.svg
new file mode 100644
index 00000000..cdcbc30d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="search">
+ <path id="magnifying-glass" d="M 10.5,4 C 6.9101491,4 4,6.9101491 4,10.5 c 0,3.589851 2.9101491,6.5 6.5,6.5 1.02211,0 1.983324,-0.235899 2.84375,-0.65625 L 16,19 c 1.4,1.4 2.5,1.5 4,0 L 15.5625,14.5625 C 16.462737,13.447115 17,12.044969 17,10.5 17,6.9101491 14.089851,4 10.5,4 z m 0,2 C 12.985281,6 15,8.0147186 15,10.5 15,12.985281 12.985281,15 10.5,15 8.0147186,15 6,12.985281 6,10.5 6,8.0147186 8.0147186,6 10.5,6 z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-rtl.svg
new file mode 100644
index 00000000..c6753493
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/search-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="search">
+ <path id="magnifying-glass" d="m 13.5,4 c 3.589851,0 6.5,2.9101491 6.5,6.5 0,3.589851 -2.910149,6.5 -6.5,6.5 -1.02211,0 -1.983324,-0.235899 -2.84375,-0.65625 L 8,19 C 6.6,20.4 5.5,20.5 4,19 L 8.4375,14.5625 C 7.537263,13.447115 7,12.044969 7,10.5 7,6.9101491 9.910149,4 13.5,4 z m 0,2 C 11.014719,6 9,8.0147186 9,10.5 9,12.985281 11.014719,15 13.5,15 15.985281,15 18,12.985281 18,10.5 18,8.0147186 15.985281,6 13.5,6 z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/secure-link.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/secure-link.svg
new file mode 100644
index 00000000..a9c7d276
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/secure-link.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="secure">
+ <path id="lock" d="M8 5h.019v-.997c.001-.057.004-1.409-.832-2.255-.434-.438-.998-.66-1.679-.66s-1.245.222-1.678.659c-.837.847-.833 2.199-.832 2.251v1.002h.002c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1v-3c0-.553-.447-1-1-1zm-4.002 0v-1.007c0-.01.005-.999.543-1.543.482-.485 1.449-.487 1.932-.002.544.546.546 1.536.546 1.55v1.002h-3.021z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/settings.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/settings.svg
new file mode 100644
index 00000000..bcd665ee
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/settings.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="settings">
+ <path id="gear" d="M3 4h3v2h-3zM12 4h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 11h9v2h-9zM18 11h3v2h-3zM14 10h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2h-6zM15 18h6v2h-6zM11 17h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-ltr.svg
new file mode 100644
index 00000000..0d495049
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M0 20h24v1h-24v-1zm6-8l-1-1-2 2-2-2-1 1 2 2-2 2 1 1 2-2 2 2 1-1-2-2zm15.6 3.7c-.9-.5-1.9-.5-2.7 0-1.5.9-3.1.4-3.1.4-.4-.2-.8-.4-1.1-.6 2.2-.6 4.4-1.8 6-3.9 1.1-1.2 2.5-3.9.4-6-.7-.7-1.6-1.1-2.7-1-1.4.1-2.8.9-3.9 2.1-.9 1.1-3.1 4.5-2.3 7.5 0 .1 0 .2.1.3-2.3.3-4.2.2-4.4.1v1.5c.7.1 2.7.2 5.1-.2.5.7 1.3 1.2 2.3 1.6.1 0 2.4.8 4.5-.6.5-.3.9-.1 1.1 0 .4.2.7.6.7 1h1.4c0-.8-.6-1.7-1.4-2.2zm-8-1.7c-.5-2.2 1.1-5.1 2-6.2.8-.9 1.8-1.5 2.8-1.6h.1c.6 0 1.1.2 1.5.6 1.6 1.6-.4 3.9-.5 4-1.5 2-3.7 3-5.8 3.5l-.1-.3z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-rtl.svg
new file mode 100644
index 00000000..6c0ae5e0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/signature-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M24 20h-24v1h24v-1zm-6-8l1-1 2 2 2-2 1 1-2 2 2 2-1 1-2-2-2 2-1-1 2-2zm-15.6 3.7c.9-.5 1.9-.5 2.7 0 1.5.9 3.1.4 3.1.4.4-.2.8-.4 1.1-.6-2.2-.6-4.4-1.8-6-3.9-1.1-1.2-2.5-3.9-.4-6 .7-.7 1.6-1.1 2.7-1 1.4.1 2.8.9 3.9 2.1.9 1.1 3.1 4.5 2.3 7.5 0 .1 0 .2-.1.3 2.3.3 4.2.2 4.4.1v1.5c-.7.1-2.7.2-5.1-.2-.5.7-1.3 1.2-2.3 1.6-.1 0-2.4.8-4.5-.6-.5-.3-.9-.1-1.1 0-.4.2-.7.6-.7 1h-1.4c0-.8.6-1.7 1.4-2.2zm8-1.7c.5-2.2-1.1-5.1-2-6.2-.8-.9-1.8-1.5-2.8-1.6h-.1c-.6 0-1.1.2-1.5.6-1.6 1.6.4 3.9.5 4 1.5 2 3.7 3 5.8 3.5l.1-.3z" id="path576"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-ltr.svg
new file mode 100644
index 00000000..e8b427b1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-ltr.svg
@@ -0,0 +1,7 @@
+<?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 id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+ <g id="down">
+ <path id="arrow" d="M22 3l-3.5 6L15 3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-rtl.svg
new file mode 100644
index 00000000..e5e95196
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/smaller-rtl.svg
@@ -0,0 +1,7 @@
+<?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 id="a" d="M12.666 6h-1.372l-4.48 12H8.52l1.493-4h4l1.507 4h1.666l-4.52-12zm-2.28 7l1.617-4.333L13.637 13h-3.25z"/>
+ <g id="down">
+ <path id="arrow" d="M9 3L5.5 9 2 3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/specialCharacter.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/specialCharacter.svg
new file mode 100644
index 00000000..4d601281
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/specialCharacter.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="special-character">
+ <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.311.366-.531.808-.66 1.327-.128.513-.192 1.08-.192 1.699 0 .513.058 1 .174 1.46.122.46.311.87.568 1.23.629.863 1.155 1.139 2.011 1.363l.247 3.035h-5v-3h.605l.531 1.354.394.053.605.044.751.035.456.009h.66l-.092-.894c-.629-.094-.811-.268-1.336-.522-.525-.26-.98-.59-1.365-.991-.379-.401-.675-.867-.889-1.398-.214-.537-.321-1.13-.321-1.779 0-.82.131-1.537.394-2.15.269-.619.656-1.133 1.163-1.54.507-.407 1.133-.711 1.878-.912.745-.206 1.6-.31 2.565-.31.959 0 1.811.103 2.556.31.751.201 1.38.504 1.887.912.507.407.892.92 1.154 1.54.269.614.403 1.33.403 2.15 0 .649-.107 1.242-.321 1.779-.214.531-.513.997-.898 1.398-.379.401-.831.732-1.356.991-.525.254-.707.428-1.336.522l-.092.894h.66l.447-.009.751-.035.605-.044.403-.053.531-1.354h.605v3h-5l.247-3.035c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.619-.064-1.186-.192-1.699-.128-.519-.348-.962-.66-1.327-.311-.372-.73-.661-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-ltr.svg
new file mode 100644
index 00000000..f3fb8b31
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M19 20h-17l3-3v-11h17v11c0 1.7-1.3 3-3 3z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-rtl.svg
new file mode 100644
index 00000000..fd9b7bd9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubble-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g586">
+ <path d="M5 20h17l-3-3v-11h-17v11c0 1.7 1.3 3 3 3z" id="path588"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg
new file mode 100644
index 00000000..333c1e86
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M19 20h-17l3-3v-11h17v11c0 1.7-1.3 3-3 3z"/>
+ </g>
+ <path fill="#fff" d="M13 9h1v7h-1zm-3 3h7v1h-7z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg
new file mode 100644
index 00000000..4e6313f1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbleAdd-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g598">
+ <path d="M5 20h17l-3-3v-11h-17v11c0 1.7 1.3 3 3 3z" id="path600"/>
+ </g>
+ <path d="M11 9h-1v7h1zm3 3h-7v1h7z" id="path602" fill="#fff"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-ltr.svg
new file mode 100644
index 00000000..c4b4a2f7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20 9v9l2 2h-14v-11h12zm-17-5h12v4h-8v7h-6l2-2v-9z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-rtl.svg
new file mode 100644
index 00000000..c452fbbd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/speechBubbles-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g612">
+ <path d="M3 9v9l-2 2h14v-11h-12zm17-5h-12v4h8v7h6l-2-2v-9z" id="path614"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/star.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/star.svg
new file mode 100644
index 00000000..ea8c26c6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/star.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 7.4l1.7 3.6 4 .5-2.7 2.8.5 3.9-3.5-1.7-3.6 1.7.6-3.9-2.8-2.8 3.9-.5 1.9-3.6m0-3.4l-2.8 5.6-6.2.9 4.5 4.4-1.1 6.1 5.6-3 5.5 3-1-6.2 4.5-4.4-6.3-.9-2.7-5.5z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stop.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stop.svg
new file mode 100644
index 00000000..7bd06331
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stop.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 6c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7m0-1c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm-3 5h6v6h-6z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-a.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-a.svg
new file mode 100644
index 00000000..480189f5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-a.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="strikethrough-a">
+ <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
+ <path id="a" d="M12.666 6h-1.372l-4.48 12h1.705l1.494-4h3.999l1.508 4h1.666l-4.52-12zm-2.28 7l1.617-4.333 1.634 4.333h-3.251z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-s.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-s.svg
new file mode 100644
index 00000000..d57b652f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-s.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="strikethrough-s">
+ <path id="strikethrough" d="M6 12h12v1h-12v-1z"/>
+ <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .889.221 1.602.719 2.13.498.528 1.279.91 2.312 1.14l.812.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.531 1.26-.358.291-.894.45-1.625.45-.477 0-.969-.074-1.469-.24-.502-.166-1.031-.417-1.562-.75l-.375-.238v2.158l.156.062c.58.237 1.143.417 1.688.54.549.121 1.07.18 1.562.18 1.286 0 2.297-.293 3-.9.709-.605 1.062-1.486 1.062-2.608 0-.943-.256-1.726-.781-2.312-.521-.592-1.305-1-2.344-1.229l-.812-.181c-.716-.148-1.204-.352-1.406-.539-.205-.203-.312-.485-.312-.935 0-.533.162-.899.5-1.17.342-.271.836-.42 1.531-.42.395 0 .818.052 1.25.181.433.127.908.333 1.406.6l.375.18v-2.041s-1.188-.383-1.688-.479c-.499-.098-.984-.151-1.468-.151z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-y.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-y.svg
new file mode 100644
index 00000000..8409dc15
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/strikethrough-y.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="strikethrough-y">
+ <path id="strikethrough" d="M6 11h12v1h-12v-1z"/>
+ <path id="a" d="M7 6h1.724l3.288 4.935 3.264-4.935h1.724l-4.194 6.285v5.715h-1.612v-5.715l-4.194-6.285"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-ltr.svg
new file mode 100644
index 00000000..acacc362
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M4 9h12v2h-12v-2zm0 3h8v2h-8v-2zm0-7h16v3h-16v-3zm16 14h-16v-3h16v3z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-rtl.svg
new file mode 100644
index 00000000..c38a283f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeFlow-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M20 9h-12v2h12v-2zm0 3h-8v2h8v-2zm0-7h-16v3h16v-3zm-16 14h16v-3h-16v3z" id="path624"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSideMenu.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSideMenu.svg
new file mode 100644
index 00000000..47e70d74
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSideMenu.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20 19h-16v-2h16v2z"/>
+ </g>
+ <g>
+ <path d="M20 15h-16v-2h16v2z"/>
+ </g>
+ <g>
+ <path d="M20 11h-16v-2h16v2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-ltr.svg
new file mode 100644
index 00000000..7f8822bc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20 11h-16v-2h16v2zm-16 1h8v2h-8v-2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-rtl.svg
new file mode 100644
index 00000000..fcb10bad
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeSummary-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g654">
+ <path d="M4 11h16v-2h-16v2zm16 1h-8v2h8v-2z" id="path656"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-ltr.svg
new file mode 100644
index 00000000..76c80d20
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M17 13h-13v-3h13v3zm-5 6h-8v-3h8v3zm-8-12v-3h16v3h-16z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-rtl.svg
new file mode 100644
index 00000000..308c2e62
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/stripeToC-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g666">
+ <path d="M7 13h13v-3h-13v3zm5 6h8v-3h-8v3zm8-12v-3h-16v3h16z" id="path668"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-ltr.svg
new file mode 100644
index 00000000..b7507daf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-ltr.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+ <path d="M18 13l-1 1v3l1 1h-1l-.527-.46L16 18h-1l1-1v-3l-1-1h1l.485.497L17 13z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-rtl.svg
new file mode 100644
index 00000000..9fe5325f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/subscript-rtl.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+ <path d="M8 13l1 1v3l-1 1h1l.527-.46L10 18h1l-1-1v-3l1-1h-1l-.485.497L9 13z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-ltr.svg
new file mode 100644
index 00000000..f1b7caf3
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-ltr.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9s-.5.4-.8.4h-2v-1.3zm-6.2-5v-3.2c.3 0 .6.1.9.4s.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zm-11.6-12.2c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2h-3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zm1.8 5.6l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
+ <circle cx="12" cy="11" r="4"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-rtl.svg
new file mode 100644
index 00000000..a625fb90
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/sun-rtl.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M5.9 5.1c0 .3.1.6.3.9l1.4 1.4.9-.8-2.2-2.2c-.3.1-.4.4-.4.7zm.5 5.3h-3.2c0 .3.1.6.4.9.3.3.5.4.8.4h2v-1.3zm6.2-5v-3.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zm-6.4 11.7c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zm11.6-12.2c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zm-1.8 5.6l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z" id="path678"/>
+ <circle cx="12" cy="11" r="4" id="circle680" transform="matrix(-1 0 0 1 24 0)"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-ltr.svg
new file mode 100644
index 00000000..39f30a76
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-ltr.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M14 9l-2.354 3.406L14 16h-1.2L11 13.25 9.2 16H8l2.403-3.662L8 9h1.188l1.857 2.494L12.797 9H14z"/>
+ <path d="M18 7l-1 1v3l1 1h-1l-.527-.46L16 12h-1l1-1V8l-1-1h1l.485.497L17 7z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-rtl.svg
new file mode 100644
index 00000000..eabab21c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/superscript-rtl.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path id="x" d="M12 9l2.354 3.406L12 16h1.2l1.8-2.75L16.8 16H18l-2.403-3.662L18 9h-1.188l-1.857 2.494L13.203 9H12z"/>
+ <path d="M8 7l1 1v3l-1 1h1l.527-.46L10 12h1l-1-1V8l1-1h-1l-.485.497L9 7z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-caption.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-caption.svg
new file mode 100644
index 00000000..15bb06a6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-caption.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-caption">
+ <path id="caption" d="M6 6h12v3H6z"/>
+ <path id="table" d="M4 10v7h16v-7H4zm1 1h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2zM5 14h4v2H5v-2zm5 0h4v2h-4v-2zm5 0h4v2h-4v-2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-ltr.svg
new file mode 100644
index 00000000..798ee4a1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-ltr.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-column-ltr">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 5,5 2,0 0,14 -2,0 z"
+ id="column" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-rtl.svg
new file mode 100644
index 00000000..dfa33a08
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-column-rtl.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-column-rtl">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 17,5 2,0 0,14 -2,0 z"
+ id="column" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-after.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-after.svg
new file mode 100644
index 00000000..91d06644
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-after.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-row-after">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 5,17 14,0 0,2 -14,0 z"
+ id="row" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-before.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-before.svg
new file mode 100644
index 00000000..4b71f2a8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-insert-row-before.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-insert-row-before">
+ <path
+ d="m 13,9 -2,0 0,2 -2,0 0,2 2,0 0,2 2,0 0,-2 2,0 0,-2 -2,0 z"
+ id="plus" />
+ <path
+ d="m 5,5 14,0 0,2 -14,0 z"
+ id="row" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-merge-cells.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-merge-cells.svg
new file mode 100644
index 00000000..6a8b77d8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table-merge-cells.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+ <g id="table-merge-cells">
+ <g id="merge-cell-left">
+ <path id="cell-border" d="m 4,7 0,9 7,0 0,-3 -1,0.834 L 10,15 5,15 5,8 10,8 10,9.167 11,10 11,7 z" />
+ <path id="arrow" d="m 8,9 0,2 -2,0 0,1 2,0 0,2 3,-2.5 z" />
+ </g>
+ <use id="merge-cell-right" xlink:href="#merge-cell-left" transform="matrix(-1,0,0,1,24,0)" />
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table.svg
new file mode 100644
index 00000000..1ba8c440
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/table.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+
+ <g id="table-insert">
+ <path id="table" d="M4 5v13h16v-13zm2 2h5v4h-5zm7 0h5v4h-5zm-7 5h5v4h-5zm7 0h5v4h-5z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/tag.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/tag.svg
new file mode 100644
index 00000000..534824c8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/tag.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="tag">
+ <path d="M18.748 11.717c.389.389.389 1.025 0 1.414l-4.949 4.95c-.389.389-1.025.389-1.414 0l-6.01-6.01c-.389-.389-.707-1.157-.707-1.707l-.001-4.364c0-.55.45-1 1-1h4.364c.55 0 1.318.318 1.707.707l6.01 6.01zm-10.644-4.261c-.579.576-.578 1.514-.001 2.093.578.577 1.516.577 2.095.001.576-.578.576-1.517 0-2.095-.581-.576-1.518-.577-2.094.001z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-ltr.svg
new file mode 100644
index 00000000..6b594b29
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-ltr.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M24 6h-4v-4h-2v4h-4v2h4v4h2v-4h4z"/>
+ </g>
+ <path d="M19 13v7h-16c-1.1 0-2-.9-2-2v-11h12v-1h-13v12c0 1.7 1.3 3 3 3h17v-8h-1z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-rtl.svg
new file mode 100644
index 00000000..36b25a3e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/templateAdd-rtl.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g690">
+ <path d="M0 6h4v-4h2v4h4v2h-4v4h-2v-4h-4z" id="path692"/>
+ </g>
+ <path d="M5 13v7h16c1.1 0 2-.9 2-2v-11h-12v-1h13v12c0 1.7-1.3 3-3 3h-17v-8h1z" id="path694"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-lefttoright.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-lefttoright.svg
new file mode 100644
index 00000000..62526a03
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-lefttoright.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="text-dir-ltr">
+ <path d="M7 7h-2v-1h2l.469.5.531-.5h2v1h-2v10h2v1h-2l-.5-.531-.5.531h-2v-1h2zM13.976 16v-2h-2.976v-4h2.976v-1.956l6.024 3.978z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-righttoleft.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-righttoleft.svg
new file mode 100644
index 00000000..913bbfd6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-dir-righttoleft.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="text-dir-rtl">
+ <path d="M17 17h2v1h-2l-.469-.5-.531.5h-2v-1h2v-10h-2v-1h2l.5.531.5-.531h2v1h-2zM10.024 8v2h2.976v4h-2.976v1.956l-6.024-3.978z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-style.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-style.svg
new file mode 100644
index 00000000..0198c355
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/text-style.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="text-style">
+ <path id="a" d="M15.296 18h2.789l-1.14-12h-2.789l-8.156 12h2.789l2.039-3h4.183l.285 3zm-3.109-5l2.311-3.4.323 3.4h-2.634z"/>
+ <path id="underline" d="M6 19h12v1h-12v-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-ltr.svg
new file mode 100644
index 00000000..7740e43e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M11.1 13.1c-1.8-2.1-2.7-4.3-3-5.1h4.7l.7-2h-5.5v-3h-2v3h-5v2h5c-.2.9-1.3 4.8-5.1 7.6l1.2 1.6c2.7-2 4.3-4.5 5.1-6.4.7 1.3 1.7 3 3.2 4.5l.7-2.2zm1.4 6.9l1.3-4h5.3l1.3 4h2.2l-4.6-14h-3l-4.7 14h2.2zm4-12l2 6h-4l2-6z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-rtl.svg
new file mode 100644
index 00000000..c78e6222
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/translation-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12.4 13.1c1.8-2.1 2.7-4.3 3-5.1h-4.7l-.7-2h5.5v-3h2v3h5v2h-5c.2.9 1.3 4.8 5.1 7.6l-1.2 1.6c-2.7-2-4.3-4.5-5.1-6.4-.7 1.3-1.7 3-3.2 4.5l-.7-2.2zm-1.4 6.9l-1.3-4h-5.3l-1.3 4h-2.2l4.6-14h3l4.7 14h-2.2zm-4-12l-2 6h4l-2-6z" id="path704"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trash.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trash.svg
new file mode 100644
index 00000000..f5914312
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trash.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M6 8c0-1.1.9-2 2-2h2l1-1h2l1 1h2c1.1 0 2 .9 2 2h-12zm1 1h10l-1 11h-8z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-ltr.svg
new file mode 100644
index 00000000..0731f056
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M20.5 20.5l-15.5-15.5-1 1 3 3 1 11h8l.2-1.8 3.3 3.3zm-3.5-11.5h-6l5.5 5.5zm1-1c0-1.1-.9-2-2-2h-2l-1-1h-2l-1 1h-2l2 2h8z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-rtl.svg
new file mode 100644
index 00000000..2a92cbef
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/trashUndo-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g714">
+ <path d="M4 20.5l15.5-15.5 1 1-3 3-1 11h-8l-.2-1.8-3.3 3.3zm3.5-11.5h6l-5.5 5.5zm-1-1c0-1.1.9-2 2-2h2l1-1h2l1 1h2l-2 2h-8z" id="path716"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-ltr.svg
new file mode 100644
index 00000000..66c024a9
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-rtl.svg
new file mode 100644
index 00000000..07cecbfe
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unLock-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unStar.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unStar.svg
new file mode 100644
index 00000000..724d1901
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/unStar.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M21 11l-6-1-3-6-3 6-6 1 4 4-1 6 6-3 6 3-1-6 4-4z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-a.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-a.svg
new file mode 100644
index 00000000..dd6dde36
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-a.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="underline-a">
+ <path id="a" d="M14.424 16h2.076l-3.463-10h-2.077l-3.46 10h2.077l.627-2h3.604l.616 2zm-3.921-3.623l1.496-4.379 1.511 4.379h-3z"/>
+ <path id="underline" d="M7 17h10v1h-10v-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-u.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-u.svg
new file mode 100644
index 00000000..fbd7c147
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/underline-u.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="underline-u">
+ <path id="u" d="M8 6h2v5.959c-.104 1.707.695 2.002 2 2.041 1.777.062 2.002-.879 2-2.041v-5.959h2v6.123c0 1.279-.338 2.245-1.016 2.898-.672.651-1.666.979-2.98.979-1.32 0-2.319-.326-2.996-.979-.672-.653-1.008-1.619-1.008-2.898v-6.123"/>
+ <path id="underline" d="M7 17h10v1h-10v-1z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upTriangle.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upTriangle.svg
new file mode 100644
index 00000000..9e5e72f6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upTriangle.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M12 8l8 10h-16z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-ltr.svg
new file mode 100644
index 00000000..18879e32
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M10 13c0 1.7 1.3 3 3 3v-7h3l-4.5-5-4.5 5h3v4zm7 0v5h-10c-.6 0-1-.4-1-1v-4h-2v4c0 1.9 1.3 3 3 3h12v-7h-2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-rtl.svg
new file mode 100644
index 00000000..7a3535ba
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/upload-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g736">
+ <path d="M13 13c0 1.7-1.3 3-3 3v-7h-3l4.5-5 4.5 5h-3v4zm-7 0v5h10c.6 0 1-.4 1-1v-4h2v4c0 1.9-1.3 3-3 3h-12v-7h2z" id="path738"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-ltr.svg
new file mode 100644
index 00000000..5dcc3179
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16 5h-12v12c0 1.7 1.3 3 3 3h12v-12c0-1.7-1.3-3-3-3zm-2 4c.7 0 1.2.6 1.2 1.2s-.6 1.2-1.2 1.2-1.2-.6-1.2-1.2.5-1.2 1.2-1.2zm-5 0c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm7 5.4c0 .2-.1.3-.3.5-.7.6-1.6 1-2.6 1.3s-2.1.2-3.1 0-2-.9-2.7-1.5c-.1-.1-.2-.3-.2-.4s.1-.3.2-.4c.1-.1.3-.2.4-.2.2 0 .3.1.4.2.5.5 1.2.9 2.1 1.1s1.7.2 2.6 0 1.6-.5 2.1-1c.1-.1.3-.2.4-.2s.3.1.5.2.2.2.2.4z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-rtl.svg
new file mode 100644
index 00000000..a5e4dc95
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userActive-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 5h12v12c0 1.7-1.3 3-3 3h-12v-12c0-1.7 1.3-3 3-3zm2 4c-.7 0-1.2.6-1.2 1.2s.6 1.2 1.2 1.2 1.2-.6 1.2-1.2-.5-1.2-1.2-1.2zm5 0c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zm-7 5.4c0 .2.1.3.3.5.7.6 1.6 1 2.6 1.3 1 .3 2.1.2 3.1 0s2-.9 2.7-1.5c.1-.1.2-.3.2-.4 0-.1-.1-.3-.2-.4-.1-.1-.3-.2-.4-.2-.2 0-.3.1-.4.2-.5.5-1.2.9-2.1 1.1-.9.2-1.7.2-2.6 0-.9-.2-1.6-.5-2.1-1-.1-.1-.3-.2-.4-.2-.1 0-.3.1-.5.2s-.2.2-.2.4z" id="path748"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userAvatar.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userAvatar.svg
new file mode 100644
index 00000000..e9687fa6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userAvatar.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g4">
+ <g id="g6">
+ <path d="M11.5 13c1.7 0 3.5-2 3.5-5 0-.1 0-4-3.5-4s-3.5 3.9-3.5 4c0 3 1.8 5 3.5 5zm3.5-1c-.4.7-1.7 2-3.5 2s-3.2-1.3-3.5-2h-2c-1.1 0-2 .9-2 2v6h15v-6c0-1.1-.9-2-2-2h-2z" id="path8"/>
+ </g>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-ltr.svg
new file mode 100644
index 00000000..bb5b0968
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M16 5h-12v12c0 1.7 1.3 3 3 3h12v-12c0-1.7-1.3-3-3-3zm-9.3 5.4c-.5-.4-.7-.8-.7-1.4.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6zm8.4 4.3c0 .2-.1.3-.3.4-1 .6-2.2.9-3.5.9-1.2 0-2.3-.3-3.3-1-.2-.1-.2-.2-.3-.4s0-.3.1-.5.2-.2.4-.3.3 0 .5.1c.8.5 1.7.8 2.8.8s2-.2 2.8-.7c.1-.1.3-.1.5-.1s.3.1.4.3l-.1.5zm1.2-4.3c-.5.4-1.1.6-1.8.6s-1.3-.2-1.8-.6-.7-.8-.7-1.4c.6.6 1.5.9 2.5.9s1.9-.3 2.5-.9c0 .6-.2 1-.7 1.4z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-rtl.svg
new file mode 100644
index 00000000..4a9fd0d7
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userInactive-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M7 5h12v12c0 1.7-1.3 3-3 3h-12v-12c0-1.7 1.3-3 3-3zm9.3 5.4c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9s-1.9-.3-2.5-.9c0 .6.2 1 .7 1.4.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6zm-8.4 4.3c0 .2.1.3.3.4 1 .6 2.2.9 3.5.9 1.2 0 2.3-.3 3.3-1 .2-.1.2-.2.3-.4.1-.2 0-.3-.1-.5s-.2-.2-.4-.3c-.2-.1-.3 0-.5.1-.8.5-1.7.8-2.8.8-1.1 0-2-.2-2.8-.7-.1-.1-.3-.1-.5-.1s-.3.1-.4.3l.1.5zm-1.2-4.3c.5.4 1.1.6 1.8.6s1.3-.2 1.8-.6c.5-.4.7-.8.7-1.4-.6.6-1.5.9-2.5.9s-1.9-.3-2.5-.9c0 .6.2 1 .7 1.4z" id="path758"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-ltr.svg
new file mode 100644
index 00000000..f516539c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-ltr.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M5 6v11l-3 3h17c1.7 0 3-1.3 3-3v-11h-17zm11.2 2.5c.7 0 1.2.6 1.2 1.2s-.5 1.3-1.2 1.3-1.2-.6-1.2-1.2.6-1.3 1.2-1.3zm-5.4 0c.7 0 1.2.6 1.2 1.2s-.6 1.3-1.2 1.3-1.2-.6-1.2-1.2.5-1.3 1.2-1.3zm2.7 8.5c-5.1 0-6-5-6-5s2 1 6 1l6-1s-1 5-6 5z" id="path6"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-rtl.svg
new file mode 100644
index 00000000..8963fafc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/userTalk-rtl.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M19 6v11l3 3h-17c-1.7 0-3-1.3-3-3v-11h17zm-11.2 2.5c-.7 0-1.2.6-1.2 1.2s.5 1.3 1.2 1.3 1.2-.6 1.2-1.2-.6-1.3-1.2-1.3zm5.4 0c-.7 0-1.2.6-1.2 1.2s.6 1.3 1.2 1.3 1.2-.6 1.2-1.2-.5-1.3-1.2-1.3zm-2.7 8.5c5.1 0 6-5 6-5s-2 1-6 1l-6-1s1 5 6 5z" id="path770"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewCompact.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewCompact.svg
new file mode 100644
index 00000000..d96a2e3f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewCompact.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="viewCompact">
+ <circle cx="6" cy="6" r="2"/>
+ <circle cx="12" cy="6" r="2"/>
+ <circle cx="18" cy="6" r="2"/>
+ <circle cx="6" cy="12" r="2"/>
+ <circle cx="12" cy="12" r="2"/>
+ <circle cx="18" cy="12" r="2"/>
+ <circle cx="6" cy="18" r="2"/>
+ <circle cx="12" cy="18" r="2"/>
+ <circle cx="18" cy="18" r="2"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-ltr.svg
new file mode 100644
index 00000000..4f5f9b3d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-ltr.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="viewDetails">
+ <circle cx="5.5" cy="8.5" r="2.5"/>
+ <path d="M10 6h12v1H10zM10 8h9v1h-9zM10 10h4v1h-4z"/>
+ <circle cx="5.5" cy="16.5" r="2.5"/>
+ <path d="M10 14h12v1H10zM10 16h9v1h-9zM10 18h4v1h-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-rtl.svg
new file mode 100644
index 00000000..f43b05f1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/viewDetails-rtl.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="viewDetails">
+ <circle cx="18.5" cy="8.5" r="2.5"/>
+ <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+ <circle cx="18.5" cy="16.5" r="2.5"/>
+ <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/visionSimulator.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/visionSimulator.svg
new file mode 100644
index 00000000..ae6ba27a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/visionSimulator.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-ltr.svg
new file mode 100644
index 00000000..79c7d5ca
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-rtl.svg
new file mode 100644
index 00000000..6bbc2fa2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/watchlist-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g780">
+ <path d="M11 14h-5v1h5v-1zm0 3h-5v-1h5v1zm0 1h-5v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z" id="path782"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikiText.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikiText.svg
new file mode 100644
index 00000000..eebd9b1a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikiText.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M23 5h-4v2h2v10h-2v2h4z"/>
+ </g>
+ <g>
+ <path d="M18 5h-4v2h2v10h-2v2h4z"/>
+ </g>
+ <g>
+ <path d="M2 5h4v2h-2v10h2v2h-4z"/>
+ </g>
+ <g>
+ <path d="M7 5h4v2h-2v10h2v2h-4z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-ltr.svg
new file mode 100644
index 00000000..c606becd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g>
+ <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2l-2.5-1zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6l-1.1-1.7c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7c-.3-1.2-.3-2.3.2-3.3zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5s-3.5-1.6-3.5-3.5 1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5z"/>
+ </g>
+ <path d="M24 8l-1-1-1.5 1.5-1.5-1.5-1 1 1.5 1.5-1.5 1.5 1 1 1.5-1.5 1.5 1.5 1-1-1.5-1.5z"/>
+ <circle cx="8" cy="5" r="2"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-rtl.svg
new file mode 100644
index 00000000..f304f6ed
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/wikitrail-rtl.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="g792">
+ <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5z" id="path794"/>
+ </g>
+ <path d="M.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z" id="path796"/>
+ <circle cx="8" cy="5" r="2" id="circle798" transform="matrix(-1 0 0 1 24.095 0)"/>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/window.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/window.svg
new file mode 100644
index 00000000..cd3b76c2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/icons/window.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="window">
+ <path id="title" d="M7 10h10v1h-10z"/>
+ <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/alert.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/alert.svg
new file mode 100644
index 00000000..d9dc6a87
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/alert.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="alert">
+ <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2v-5h-2zm0 3h2v-2h-2z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-down.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-down.svg
new file mode 100644
index 00000000..17380577
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-down.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
+<g id="down">
+ <path id="arrow" d="M883.3,341H116.7L500,724.3l0,0l0,0L883.3,341"/>
+</g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-ltr.svg
new file mode 100644
index 00000000..fb366e64
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-ltr.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">
+<g id="ltr">
+ <path id="arrow" d="M-489,496v10l5-5h0h0L-489,496"/>
+</g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-rtl.svg
new file mode 100644
index 00000000..62b6bb50
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-rtl.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">
+<g id="rtl">
+ <path id="arrow" d="M-485,506v-10l-5,5h0h0L-485,506"/>
+</g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-up.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-up.svg
new file mode 100644
index 00000000..20e734fb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/arrow-up.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="-493 495 12 12" enable-background="new -493 495 12 12" xml:space="preserve">
+<g id="up">
+ <path id="arrow" d="M-492,503h10l-5-5v0v0L-492,503"/>
+</g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/required.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/required.svg
new file mode 100644
index 00000000..969fa2d8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/required.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="required">
+ <path d="M5 1h2v10h-2zM9.83 2.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-ltr.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-ltr.svg
new file mode 100644
index 00000000..266349ed
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-ltr.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="search">
+ <path id="path3051" d="M10.369 9.474l-2.374-2.375-.169-.099c.403-.566.643-1.26.643-2.009-.001-1.92-1.558-3.477-3.477-3.477-1.921 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.749 0 1.442-.239 2.01-.643l.098.169 2.375 2.374c.19.189.543.143.79-.104s.293-.601.104-.791zm-5.377-2.27c-1.221 0-2.213-.991-2.213-2.213 0-1.221.992-2.213 2.213-2.213 1.222 0 2.213.992 2.213 2.213-.001 1.222-.992 2.213-2.213 2.213z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-rtl.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-rtl.svg
new file mode 100644
index 00000000..5368fd7c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/indicators/search-rtl.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <g id="search">
+ <path id="path3051" d="M1.631 9.474l2.374-2.375.169-.099c-.403-.566-.643-1.26-.643-2.009.001-1.92 1.558-3.477 3.477-3.477 1.921 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.749 0-1.442-.239-2.01-.643l-.098.169-2.375 2.374c-.19.189-.543.143-.79-.104s-.293-.601-.104-.791zm5.377-2.27c1.221 0 2.213-.991 2.213-2.213 0-1.221-.992-2.213-2.213-2.213-1.222 0-2.213.992-2.213 2.213.001 1.222.992 2.213 2.213 2.213z"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/pending.gif b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/pending.gif
new file mode 100644
index 00000000..1194eed2
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/pending.gif
Binary files differ
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/transparency.svg b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/transparency.svg
new file mode 100644
index 00000000..63a0b57c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/images/textures/transparency.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="16" viewBox="0, 0, 16, 16">
+ <g id="transparency">
+ <path d="M0,0 L8,0 L8,8 L0,8 z" fill="#CCCCCC"/>
+ <path d="M8,8 L16,8 L16,16 L8,16 z" fill="#CCCCCC"/>
+ <path d="M8,0 L16,0 L16,8 L8,8 z" fill="#FFFFFF"/>
+ <path d="M0,8 L8,8 L8,16 L0,16 z" fill="#FFFFFF"/>
+ </g>
+</svg>
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/indicators.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/indicators.json
new file mode 100644
index 00000000..d83e57e6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/indicators.json
@@ -0,0 +1,29 @@
+{
+ "selectorWithoutVariant": ".oo-ui-indicator-{name}",
+ "selectorWithVariant": ".oo-ui-image-{variant} .oo-ui-indicator-{name}, .oo-ui-image-{variant}.oo-ui-indicator-{name}",
+ "intro": "@import '../../../../src/styles/common';",
+ "variants": {
+ "invert": {
+ "color": "#FFFFFF",
+ "global": true
+ }
+ },
+ "images": {
+ "alert": { "file": "images/indicators/alert.svg" },
+ "up": { "file": "images/indicators/arrow-up.svg" },
+ "down": { "file": "images/indicators/arrow-down.svg" },
+ "next": { "file": {
+ "ltr": "images/indicators/arrow-ltr.svg",
+ "rtl": "images/indicators/arrow-rtl.svg"
+ } },
+ "previous": { "file": {
+ "ltr": "images/indicators/arrow-rtl.svg",
+ "rtl": "images/indicators/arrow-ltr.svg"
+ } },
+ "required": { "file": "images/indicators/required.svg" },
+ "search": { "file": {
+ "ltr": "images/indicators/search-ltr.svg",
+ "rtl": "images/indicators/search-rtl.svg"
+ } }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/layouts.less b/vendor/oojs/oojs-ui/src/themes/mediawiki/layouts.less
new file mode 100644
index 00000000..c4956f33
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/layouts.less
@@ -0,0 +1,135 @@
+@import 'common';
+
+.theme-oo-ui-layout () {}
+
+.theme-oo-ui-bookletLayout () {
+ &-stackLayout {
+ > .oo-ui-panelLayout {
+ padding: 1.5em;
+ }
+ }
+
+ &-outlinePanel {
+ border-right: 1px solid #ddd;
+
+ > .oo-ui-outlineControlsWidget {
+ box-shadow: 0 0 0.25em rgba(0,0,0,0.25);
+ }
+ }
+}
+
+.theme-oo-ui-indexLayout () {
+ &-stackLayout {
+ > .oo-ui-panelLayout {
+ padding: 1.5em;
+ }
+ }
+}
+
+.theme-oo-ui-fieldLayout () {
+ margin-bottom: 1em;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ &.oo-ui-fieldLayout-align-left,
+ &.oo-ui-fieldLayout-align-right {
+ &.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding-top: 0.5em;
+ margin-right: 5%;
+ width: 35%;
+ }
+
+ > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ width: 60%;
+ }
+ }
+
+ &.oo-ui-fieldLayout-align-inline {
+ &.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding: 0.5em;
+ padding-left: 1em;
+ }
+
+ > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+ padding: 0.5em 0;
+ }
+ }
+
+ &.oo-ui-fieldLayout-align-top {
+ &.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+ padding: 0.5em 0;
+ }
+ }
+
+ > .oo-ui-popupButtonWidget {
+ .oo-ui-inline-spacing(0);
+ margin-top: 0.25em;
+ }
+
+ &-disabled .oo-ui-labelElement-label {
+ color: #ccc;
+ }
+}
+
+.theme-oo-ui-actionFieldLayout () {}
+
+.theme-oo-ui-fieldsetLayout () {
+ margin: 0;
+ padding: 0;
+ border: none;
+
+ + .oo-ui-fieldsetLayout,
+ + .oo-ui-formLayout {
+ margin-top: 2em;
+ }
+
+ > .oo-ui-labelElement-label {
+ font-size: 1.1em;
+ margin-bottom: 0.5em;
+ padding: 0.25em 0;
+ font-weight: bold;
+ }
+
+ &.oo-ui-iconElement > .oo-ui-labelElement-label {
+ padding-left: 2em;
+ line-height: 1.8em;
+ }
+
+ &.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ left: 0;
+ top: 0.25em;
+ width: @icon-size;
+ height: @icon-size;
+ }
+
+ > .oo-ui-popupButtonWidget {
+ .oo-ui-inline-spacing(0);
+ }
+}
+
+.theme-oo-ui-formLayout () {
+ + .oo-ui-fieldsetLayout,
+ + .oo-ui-formLayout {
+ margin-top: 2em;
+ }
+}
+
+.theme-oo-ui-menuLayout () {}
+
+.theme-oo-ui-panelLayout () {
+ &-padded {
+ padding: 1.25em;
+ }
+
+ &-framed {
+ border: 1px solid #aaa;
+ border-radius: 0.2em;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0,0,0,0.2);
+ }
+}
+
+.theme-oo-ui-pageLayout () {}
+
+.theme-oo-ui-stackLayout () {}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/textures.json b/vendor/oojs/oojs-ui/src/themes/mediawiki/textures.json
new file mode 100644
index 00000000..e90730ab
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/textures.json
@@ -0,0 +1,8 @@
+{
+ "prefix": "oo-ui-texture",
+ "intro": "@import '../../../../src/styles/common';",
+ "images": {
+ "pending": { "file": "images/textures/pending.gif" },
+ "transparency": { "file": "images/textures/transparency.svg" }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/tools.less b/vendor/oojs/oojs-ui/src/themes/mediawiki/tools.less
new file mode 100644
index 00000000..fa5d6ddc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/tools.less
@@ -0,0 +1,422 @@
+@import 'common';
+
+@oo-ui-toolbar-normal: #fff;
+@oo-ui-toolbar-normal-hover: #eee;
+@oo-ui-toolbar-active: #e5e5e5;
+@oo-ui-toolbar-active-hover: #eee;
+@oo-ui-toolbar-pressed: #e7e7e7;
+@oo-ui-toolbar-bar-text: #555;
+@oo-ui-toolbar-dropdown-text: #000;
+
+.theme-oo-ui-toolbar () {
+ &-bar {
+ border-bottom: 1px solid #ccc;
+ background-color: @oo-ui-toolbar-normal;
+ box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1);
+ font-weight: 500;
+ color: @oo-ui-toolbar-bar-text;
+
+ .oo-ui-toolbar-bar {
+ border: none;
+ background: none;
+ box-shadow: none;
+ }
+ }
+
+ &-actions {
+ > .oo-ui-buttonElement {
+ margin-top: 0.25em;
+ margin-bottom: 0.25em;
+ }
+
+ > .oo-ui-toolbar,
+ > .oo-ui-buttonElement:last-child {
+ margin-right: 0.5em;
+ }
+ }
+}
+
+.theme-oo-ui-tool () {}
+
+.theme-oo-ui-popupTool () {
+ .oo-ui-popupWidget {
+ /* @noflip */
+ margin-left: 1.25em;
+ }
+}
+
+.theme-oo-ui-toolGroupTool () {
+ > .oo-ui-popupToolGroup {
+ border: 0;
+ border-radius: 0;
+ margin: 0;
+ }
+
+ > .oo-ui-toolGroup {
+ border-right: none;
+ }
+
+ > .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle {
+ height: 2.5em;
+ padding: 0.3125em;
+
+ .oo-ui-iconElement-icon {
+ height: 2.5em;
+ width: 1.875em;
+ }
+ }
+
+ > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle {
+ .oo-ui-labelElement-label {
+ line-height: 2.1em;
+ }
+ }
+}
+
+.theme-oo-ui-toolGroup () {
+ border-radius: 0px;
+ border-right: 1px solid #ddd;
+
+ .oo-ui-toolbar-narrow & {
+ + .oo-ui-toolGroup {
+ margin-left: 0;
+ }
+ }
+
+ .oo-ui-toolGroup {
+ .oo-ui-widget-enabled {
+ border-right: none !important;
+ }
+ }
+}
+
+.theme-oo-ui-barToolGroup () {
+ > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ > .oo-ui-tool-link {
+ height: 1.875em;
+ padding: 0.625em;
+
+ .oo-ui-iconElement-icon {
+ height: 1.875em;
+ width: 1.875em;
+ }
+
+ .oo-ui-tool-title {
+ line-height: 2.1em; // 0.5em less
+ padding: 0em 0.4em;
+ }
+ }
+ }
+
+ &.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ &.oo-ui-widget-enabled:hover {
+ border-color: rgba(0,0,0,0.2);
+ background-color: @oo-ui-toolbar-normal-hover;
+ }
+
+ > a.oo-ui-tool-link .oo-ui-tool-title {
+ color: @oo-ui-toolbar-bar-text;
+ }
+
+ &.oo-ui-tool-active {
+ &.oo-ui-widget-enabled {
+ border-color: rgba(0,0,0,0.2);
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background-color: @oo-ui-toolbar-active;
+ }
+
+ &.oo-ui-widget-enabled:hover {
+ background-color: @oo-ui-toolbar-active-hover;
+ }
+
+ &.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-left-color: rgba(0,0,0,0.1);
+ }
+ }
+
+ &.oo-ui-widget-disabled > .oo-ui-tool-link {
+ .oo-ui-tool-title {
+ color: #ccc;
+ }
+
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+
+ &.oo-ui-widget-enabled {
+ > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.7;
+ }
+
+ &:hover > .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.9;
+ }
+ }
+
+ &.oo-ui-widget-enabled:active {
+ background-color: @oo-ui-toolbar-pressed;
+ }
+ }
+
+ &.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool {
+ > a.oo-ui-tool-link {
+ .oo-ui-tool-title {
+ color: #ccc;
+ }
+
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+ }
+}
+
+.theme-oo-ui-popupToolGroup () {
+ height: 3.125em;
+ min-width: 2em;
+
+ .oo-ui-toolbar-narrow & {
+ min-width: 1.875em;
+ }
+
+ &.oo-ui-iconElement {
+ min-width: 3.125em;
+ .oo-ui-toolbar-narrow & {
+ min-width: 2.5em;
+ }
+ }
+
+ &.oo-ui-indicatorElement.oo-ui-iconElement {
+ min-width: 4.375em;
+
+ .oo-ui-toolbar-narrow & {
+ min-width: 3.75em;
+ }
+ }
+
+ &.oo-ui-labelElement {
+ .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ line-height: 2.6em;
+ margin: 0 1em;
+
+ .oo-ui-toolbar-narrow & {
+ margin: 0 0.5em;
+ }
+ }
+
+ &.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+
+ .oo-ui-toolbar-narrow & {
+ margin-left: 2.5em;
+ }
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-right: 2em;
+
+ .oo-ui-toolbar-narrow & {
+ margin-right: 1.75em;
+ }
+ }
+ }
+
+ &.oo-ui-widget-enabled &-handle:hover {
+ background-color: @oo-ui-toolbar-normal-hover;
+ }
+
+ &.oo-ui-widget-enabled &-handle:active {
+ background-color: @oo-ui-toolbar-active;
+ }
+
+ &-handle {
+ padding: 0.3125em;
+ height: 2.5em;
+
+ .oo-ui-indicatorElement-indicator {
+ width: 0.9375em;
+ height: 1.625em;
+ margin: 0.78125em 0.5em;
+ top: 0;
+ right: 0;
+ opacity: 0.3;
+
+ .oo-ui-toolbar-narrow & {
+ right: -0.3125em;
+ }
+ }
+
+ .oo-ui-iconElement-icon {
+ width: 1.875em;
+ height: 2.6em;
+ margin: 0.25em;
+ top: 0;
+ left: 0.3125em;
+ opacity: 0.7;
+
+ .oo-ui-toolbar-narrow & {
+ left: 0;
+ }
+ }
+ }
+
+ &-header {
+ line-height: 2.6em;
+ margin: 0 0.6em;
+ font-weight: bold;
+ }
+
+ &-active.oo-ui-widget-enabled {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background-color: @oo-ui-toolbar-normal-hover;
+ }
+
+ .oo-ui-toolGroup-tools {
+ top: 3.125em;
+ margin: 0 -1px;
+ border: 1px solid #ccc;
+ background-color: @oo-ui-toolbar-normal;
+ box-shadow: 0px 2px 3px rgba(0,0,0,0.2);
+ min-width: 16em;
+ }
+
+ .oo-ui-tool-link {
+ padding: 0.4em 0.625em;
+ box-sizing: border-box;
+
+ .oo-ui-iconElement-icon {
+ height: 2.5em;
+ width: 1.875em;
+ min-width: 1.875em;
+ }
+
+ .oo-ui-tool-title {
+ padding-left: 0.5em;
+ color: @oo-ui-toolbar-dropdown-text;
+ }
+
+ .oo-ui-tool-accel,
+ .oo-ui-tool-title {
+ line-height: 2em;
+ }
+
+ .oo-ui-tool-accel {
+ color: #888;
+ }
+ }
+}
+
+.theme-oo-ui-listToolGroup () {
+ &.oo-ui-popupToolGroup-active {
+ border-color: rgba(0,0,0,0.2);
+ }
+
+ .oo-ui-tool {
+ &.oo-ui-widget-enabled {
+ &:hover {
+ border-color: rgba(0,0,0,0.2);
+ background-color: @oo-ui-toolbar-normal-hover;
+ }
+
+ &:active {
+ background-color: @oo-ui-toolbar-pressed;
+ }
+
+ &:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.9;
+ }
+ }
+
+ &-active {
+ &.oo-ui-widget-enabled {
+ border-color: rgba(0,0,0,0.1);
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background-color: @oo-ui-toolbar-active;
+
+ + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-top-color: rgba(0,0,0,0.1);
+ }
+
+ &:hover {
+ border-color: rgba(0,0,0,0.2);
+ background-color: @oo-ui-toolbar-active-hover;
+ }
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-tool-link {
+ .oo-ui-tool-title {
+ color: #ccc;
+ }
+
+ .oo-ui-tool-accel {
+ color: #ddd;
+ }
+
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ color: #ccc;
+
+ .oo-ui-indicatorElement-indicator,
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+}
+
+.theme-oo-ui-menuToolGroup () {
+ .oo-ui-popupToolGroup-handle {
+ min-width: 10em;
+
+ .oo-ui-toolbar-narrow & {
+ min-width: 8.125em;
+ }
+ }
+
+ .oo-ui-tool {
+ &-link {
+ .oo-ui-iconElement-icon {
+ background-image: none;
+ }
+ }
+
+ &-active .oo-ui-tool-link .oo-ui-iconElement-icon {
+ .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/check');
+ }
+
+ &.oo-ui-widget-enabled {
+ &:hover {
+ background-color: @oo-ui-toolbar-normal-hover;
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-tool-link .oo-ui-tool-title {
+ color: #ccc;
+ }
+
+ .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ color: #ccc;
+
+ .oo-ui-indicatorElement-indicator,
+ .oo-ui-iconElement-icon {
+ opacity: 0.2;
+ }
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/widgets.less b/vendor/oojs/oojs-ui/src/themes/mediawiki/widgets.less
new file mode 100644
index 00000000..2f072878
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/widgets.less
@@ -0,0 +1,978 @@
+@import 'common';
+
+.theme-oo-ui-widget () {}
+
+.theme-oo-ui-outlineControlsWidget () {
+ height: 3em;
+ background-color: #fff;
+
+ &-items,
+ &-movers {
+ height: 2em;
+ margin: 0.5em 0.5em 0.5em 0;
+ padding: 0;
+ }
+
+ > .oo-ui-iconElement-icon {
+ width: 1.5em;
+ height: 2em;
+ margin: 0.5em 0 0.5em 0.5em;
+ opacity: 0.2;
+ }
+}
+
+.theme-oo-ui-toggleWidget () {}
+
+.theme-oo-ui-buttonGroupWidget () {
+ display: inline-block;
+ white-space: nowrap;
+ border-radius: @border-radius;
+
+ .oo-ui-inline-spacing(0.5em);
+ .oo-ui-buttonElement {
+ .oo-ui-inline-spacing(0);
+ }
+
+ .oo-ui-buttonElement-framed {
+ .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-left: -1px;
+ }
+
+ &:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: @border-radius;
+ border-top-left-radius: @border-radius;
+ margin-left: 0;
+ }
+
+ &:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: @border-radius;
+ border-top-right-radius: @border-radius;
+ }
+ }
+}
+
+.theme-oo-ui-buttonWidget () {
+ .oo-ui-inline-spacing(0.5em);
+}
+
+.theme-oo-ui-actionWidget () {
+ &.oo-ui-pendingElement-pending {
+ .oo-ui-background-image('@{oo-ui-default-image-path}/textures/pending.gif');
+ }
+}
+
+.theme-oo-ui-popupButtonWidget () {
+ &.oo-ui-buttonElement-frameless > .oo-ui-popupWidget {
+ // Compensate for icon being inset
+ /* @noflip */
+ left: 1em;
+ }
+
+ &.oo-ui-buttonElement-framed > .oo-ui-popupWidget {
+ // Compensate for icon being inset
+ /* @noflip */
+ left: 1.75em;
+ }
+}
+
+.theme-oo-ui-toggleButtonWidget () {
+ .oo-ui-inline-spacing(0.5em);
+}
+
+.theme-oo-ui-iconWidget () {
+ line-height: 2.5em;
+ height: @icon-size;
+ width: @icon-size;
+
+ &.oo-ui-widget-disabled {
+ opacity: 0.2;
+ }
+}
+
+.theme-oo-ui-indicatorWidget () {
+ line-height: 2.5em;
+ height: @indicator-size;
+ width: @indicator-size;
+ margin: @indicator-size / 2;
+
+ &.oo-ui-widget-disabled {
+ opacity: 0.2;
+ }
+}
+
+.theme-oo-ui-dropdownWidget () {
+ margin: 0.25em 0;
+ width: 100%;
+ max-width: 50em;
+
+ .oo-ui-inline-spacing(0.5em);
+
+ &-handle {
+ height: 2.5em;
+ border: 1px solid #ccc;
+ border-radius: 0.1em;
+
+ .oo-ui-indicatorElement-indicator {
+ right: 0;
+ }
+
+ .oo-ui-iconElement-icon {
+ left: 0.25em;
+ }
+
+ .oo-ui-labelElement-label {
+ line-height: 2.5em;
+ margin: 0 1em;
+ }
+
+ .oo-ui-indicatorElement-indicator {
+ top: 0;
+ width: @indicator-size;
+ height: @indicator-size;
+ margin: 0.775em;
+ }
+
+ .oo-ui-iconElement-icon {
+ top: 0;
+ width: @icon-size;
+ height: @icon-size;
+ margin: 0.3em;
+ }
+ }
+
+ &:hover .oo-ui-dropdownWidget-handle {
+ border-color: #aaa;
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-dropdownWidget-handle {
+ color: #ccc;
+ text-shadow: 0 1px 1px #fff;
+ border-color: #ddd;
+ background-color: #f3f3f3;
+ }
+ .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+ }
+ }
+
+ &.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
+ margin-right: 2em;
+ }
+
+ .oo-ui-selectWidget {
+ border-top-color: #fff;
+ }
+}
+
+.theme-oo-ui-inputWidget () {
+ .oo-ui-inline-spacing(0.5em);
+}
+
+.theme-oo-ui-buttonInputWidget () {}
+
+.theme-oo-ui-checkboxInputWidget () {
+ position: relative;
+ line-height: @input-size;
+ // Prevent the fake span from jumping to the next line of text
+ white-space: nowrap;
+
+ * {
+ font: inherit;
+ vertical-align: middle;
+ }
+
+ // This input element is visually replaced by the the span that follows
+ input[type="checkbox"] {
+ // Use opacity so that VoiceOver software can still identify it
+ opacity: 0;
+ // Render "on top of" the span, so that it's still clickable
+ z-index: 1;
+ position: relative;
+
+ // Having margin would offset the input from where the span is absolutely positioned,
+ // making only the overlap region receive events
+ margin: 0;
+
+ // Ensure the invisible input takes up the required width
+ width: @input-size;
+ height: @input-size;
+
+ // Needed for Firefox mobile (See bug 71750 to workaround default Firefox stylesheet)
+ max-width: none;
+
+ & + span {
+ cursor: pointer;
+ .oo-ui-transition(background-size @medium-ease-out-back);
+ .oo-ui-box-sizing( border-box );
+ position: absolute;
+ left: 0;
+ border-radius: @border-radius;
+ width: @input-size;
+ height: @input-size;
+ background-color: white;
+ border: 1px solid @input-border-color;
+ .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/check-constructive');
+ .oo-ui-background-image-safari('@{oo-ui-default-image-path}/icons/check-constructive');
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-origin: border-box;
+ background-size: 0 0;
+ }
+
+ &:checked + span {
+ background-size: 100% 100%;
+ }
+
+ &:active + span {
+ background-color: @input-active-color;
+ border-color: @input-active-color;
+ }
+
+ &:focus + span {
+ border-width: @input-focus-border-width;
+ }
+
+ &:focus:hover + span,
+ &:hover + span {
+ border-bottom-width: @input-hover-border-bottom-width;
+ }
+
+ &:disabled + span {
+ cursor: default;
+ background-color: @input-disabled-color;
+ border-color: @input-disabled-color;
+ }
+
+ &:disabled:checked + span {
+ .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/check-invert');
+ .oo-ui-background-image-safari('@{oo-ui-default-image-path}/icons/check-invert');
+ }
+ }
+}
+
+.theme-oo-ui-dropdownInputWidget () {
+ width: 100%;
+ max-width: 50em;
+
+ select {
+ height: 2.5em;
+ padding: 0.5em;
+ font-size: inherit;
+ font-family: inherit;
+ .oo-ui-box-sizing(border-box);
+ border: 1px solid #ccc;
+ }
+
+ &.oo-ui-widget-enabled {
+ select:hover,
+ select:focus {
+ border-color: #aaa;
+ outline: none;
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ select {
+ color: #ccc;
+ border-color: #ddd;
+ background-color: #f3f3f3;
+ }
+ }
+}
+
+.theme-oo-ui-radioInputWidget () {
+ position: relative;
+ line-height: @input-size;
+ // Prevent the fake span from jumping to the next line of text
+ white-space: nowrap;
+
+ * {
+ font: inherit;
+ vertical-align: middle;
+ }
+
+ // This input element is visually replaced by the the span that follows
+ input[type="radio"] {
+ // Use opacity so that VoiceOver software can still identify it
+ opacity: 0;
+ // Render "on top of" the span, so that it's still clickable
+ z-index: 1;
+ position: relative;
+
+ // Having margin would offset the input from where the span is absolutely positioned,
+ // making only the overlap region receive events
+ margin: 0;
+
+ // Ensure the invisible input takes up the required width
+ width: @input-size;
+ height: @input-size;
+
+ // Needed for Firefox mobile (See bug 71750 to workaround default Firefox stylesheet)
+ max-width: none;
+
+ & + span {
+ cursor: pointer;
+ .oo-ui-transition(background-size @medium-ease-out-back);
+ .oo-ui-box-sizing(border-box);
+ position: absolute;
+ left: 0;
+ border-radius: 100%;
+ width: @input-size;
+ height: @input-size;
+ background: white;
+ border: 1px solid @input-border-color;
+ .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/circle-constructive');
+ .oo-ui-background-image-safari('@{oo-ui-default-image-path}/icons/circle-constructive');
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-origin: border-box;
+ background-size: 0 0;
+ }
+
+ &:checked + span {
+ background-size: 100% 100%;
+ }
+
+ &:active + span {
+ background-color: @input-active-color;
+ border-color: @input-active-color;
+ }
+
+ &:focus + span {
+ border-width: @input-focus-border-width;
+ }
+
+ &:focus:hover + span,
+ &:hover + span {
+ border-bottom-width: @input-hover-border-bottom-width;
+ }
+
+ &:disabled + span {
+ cursor: default;
+ background-color: @input-disabled-color;
+ border-color: @input-disabled-color;
+ }
+
+ &:disabled:checked + span {
+ .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/circle-invert');
+ .oo-ui-background-image-safari('@{oo-ui-default-image-path}/icons/circle-invert');
+ }
+ }
+}
+
+.theme-oo-ui-textInputWidget () {
+ width: 100%;
+ max-width: 50em;
+
+ input,
+ textarea {
+ padding: 0.5em;
+ margin: 0;
+ font-size: inherit;
+ font-family: inherit;
+ background-color: #fff;
+ color: black;
+ border: solid 1px #ccc;
+ box-shadow: inset 0 0 0 0 @progressive;
+ border-radius: 0.1em;
+ .oo-ui-transition(box-shadow @quick-ease);
+ .oo-ui-box-sizing(border-box);
+ }
+
+ &-decorated {
+ input,
+ textarea {
+ padding-left: 2em;
+ }
+ }
+
+ &-icon {
+ width: 2em;
+ }
+
+ &.oo-ui-widget-enabled {
+ input,
+ textarea {
+ .oo-ui-transition(
+ border @medium-ease-out-sine,
+ box-shadow @medium-ease-out-sine
+ );
+ }
+
+ input:focus,
+ textarea:focus {
+ outline: none;
+ border-color: @progressive;
+ box-shadow: inset 0 0 0 0.1em @progressive;
+ }
+
+ input[readonly],
+ textarea[readonly] {
+ color: #777;
+ text-shadow: 0 1px 1px #fff;
+
+ &:focus {
+ border-color: #ccc;
+ box-shadow: inset 0 0 0 0.1em #ccc;
+ }
+ }
+
+ &.oo-ui-flaggedElement-invalid {
+ input,
+ textarea {
+ border-color: red;
+ box-shadow: inset 0 0 0 0 red;
+ }
+
+ input:focus,
+ textarea:focus {
+ border-color: red;
+ box-shadow: inset 0 0 0 0.1em red;
+ }
+ }
+ }
+
+ &.oo-ui-widget-disabled {
+ input,
+ textarea {
+ color: #ccc;
+ text-shadow: 0 1px 1px #fff;
+ border-color: #ddd;
+ background-color: #f3f3f3;
+ }
+ .oo-ui-iconElement-icon,
+ .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+ }
+ .oo-ui-labelElement-label {
+ color: #ddd;
+ text-shadow: 0 1px 1px #fff;
+ }
+ }
+
+ &.oo-ui-pendingElement-pending {
+ input,
+ textarea {
+ background-color: transparent;
+ .oo-ui-background-image('@{oo-ui-default-image-path}/textures/pending.gif');
+ }
+ }
+
+ &.oo-ui-iconElement {
+ input,
+ textarea {
+ padding-left: 2.75em;
+ }
+
+ .oo-ui-iconElement-icon {
+ left: 0.4em;
+ width: @icon-size;
+ margin-left: 0.1em;
+ height: 100%;
+ background-position: right center;
+ }
+ }
+
+ &.oo-ui-indicatorElement {
+ input,
+ textarea {
+ padding-right: @icon-size;
+ }
+
+ .oo-ui-indicatorElement-indicator {
+ width: @indicator-size;
+ margin: 0 0.775em;
+ height: 100%;
+ }
+ }
+
+ > .oo-ui-labelElement-label {
+ padding: 0.4em;
+ line-height: 1.5em;
+ color: #888;
+ }
+
+ &-labelPosition-after {
+ &.oo-ui-indicatorElement > .oo-ui-labelElement-label {
+ margin-right: 2em;
+ }
+ }
+
+ &-labelPosition-before {
+ &.oo-ui-iconElement > .oo-ui-labelElement-label {
+ margin-left: 2.5em;
+ }
+ }
+}
+
+.theme-oo-ui-comboBoxWidget () {
+ width: 100%;
+ max-width: 50em;
+
+ .oo-ui-inline-spacing(0.5em);
+
+ .oo-ui-textInputWidget {
+ input,
+ textarea {
+ height: 2.35em;
+ }
+ }
+}
+
+.theme-oo-ui-labelWidget () {}
+
+.theme-oo-ui-optionWidget () {
+ padding: 0.25em 0.5em;
+ border: none;
+
+ &-highlighted {
+ background-color: #eee;
+ }
+
+ .oo-ui-labelElement-label {
+ line-height: 1.5em;
+ }
+
+ .oo-ui-selectWidget-depressed &-selected,
+ .oo-ui-selectWidget-pressed &-pressed,
+ .oo-ui-selectWidget-pressed &-pressed&-highlighted,
+ .oo-ui-selectWidget-pressed &-pressed&-highlighted&-selected {
+ background-color: @pressed-color;
+ }
+
+ &.oo-ui-widget-disabled {
+ color: #ccc;
+ }
+}
+
+.theme-oo-ui-decoratedOptionWidget () {
+ padding: 0.5em 2em 0.5em 3em;
+
+ &.oo-ui-iconElement .oo-ui-iconElement-icon,
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ top: 0;
+ height: 100%;
+ }
+
+ &.oo-ui-iconElement .oo-ui-iconElement-icon {
+ width: @icon-size;
+ left: 0.5em;
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ width: @indicator-size;
+ right: 0.5em;
+ }
+
+ &.oo-ui-widget-disabled {
+ .oo-ui-iconElement-icon,
+ .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+ }
+ }
+}
+
+.theme-oo-ui-buttonOptionWidget () {
+ padding: 0;
+ background-color: transparent;
+
+ .oo-ui-buttonElement-button {
+ height: @icon-size;
+ }
+
+ &.oo-ui-iconElement .oo-ui-iconElement-icon {
+ margin-top: 0;
+ }
+
+ &.oo-ui-optionWidget-selected,
+ &.oo-ui-optionWidget-pressed,
+ &.oo-ui-optionWidget-highlighted {
+ background-color: transparent;
+ }
+
+ // Override DecoratedOptionWidget styles
+ &.oo-ui-widget-disabled {
+ .oo-ui-iconElement-icon,
+ .oo-ui-indicatorElement-indicator {
+ opacity: 1;
+ }
+ }
+}
+
+.theme-oo-ui-radioOptionWidget () {
+ padding: 0.25em 0;
+ background-color: transparent;
+
+ &.oo-ui-optionWidget-selected,
+ &.oo-ui-optionWidget-pressed,
+ &.oo-ui-optionWidget-highlighted {
+ background-color: transparent;
+ }
+
+ &.oo-ui-labelElement .oo-ui-labelElement-label {
+ padding: 0.25em;
+ padding-left: 1em;
+ }
+
+ .oo-ui-radioInputWidget {
+ margin-right: 0;
+ }
+}
+
+.theme-oo-ui-menuOptionWidget () {
+ padding: 0.5em 1em;
+
+ &.oo-ui-optionWidget {
+ &-selected {
+ background-color: @select;
+ color: rgba(0,0,0,0.8);
+
+ .oo-ui-iconElement-icon {
+ display: none;
+ }
+ }
+ &-highlighted {
+ background-color: #eee;
+ color: black;
+ }
+ &-selected&-highlighted {
+ background-color: @select;
+ }
+ }
+}
+
+.theme-oo-ui-menuSectionOptionWidget () {
+ padding: 0.33em 0.75em;
+ color: #888;
+}
+
+.theme-oo-ui-outlineOptionWidget () {
+ font-size: 1.1em;
+ padding: 0.75em;
+
+ &.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ opacity: 0.5;
+ }
+
+ &-level-0 {
+ padding-left: 3.5em;
+
+ .oo-ui-iconElement-icon {
+ left: 1em;
+ }
+ }
+ &-level-1 {
+ padding-left: 5em;
+
+ .oo-ui-iconElement-icon {
+ left: 2.5em;
+ }
+ }
+
+ &-level-2 {
+ padding-left: 6.5em;
+
+ .oo-ui-iconElement-icon {
+ left: 4em;
+ }
+ }
+
+ .oo-ui-selectWidget-depressed &.oo-ui-optionWidget-selected {
+ background-color: @pressed-color;
+ text-shadow: 0 1px 1px #fff;
+ }
+
+ &.oo-ui-flaggedElement-important {
+ font-weight: bold;
+ }
+
+ &.oo-ui-flaggedElement-placeholder {
+ font-style: italic;
+ }
+
+ &.oo-ui-flaggedElement-empty {
+ .oo-ui-iconElement-icon {
+ opacity: 0.5;
+ }
+ .oo-ui-labelElement-label {
+ color: #777;
+ }
+ }
+}
+
+.theme-oo-ui-tabOptionWidget () {
+ padding: 0.35em 1em;
+ margin: 0.5em 0 0 0.75em;
+ border: 1px solid transparent;
+ border-bottom: none;
+ border-top-left-radius: @border-radius;
+ border-top-right-radius: @border-radius;
+ color: #666;
+ font-weight: bold;
+
+ &.oo-ui-widget-enabled {
+ &:hover {
+ background-color: rgba(255, 255, 255, 0.3);
+ }
+
+ &:active {
+ background-color: rgba(255, 255, 255, 0.8);
+ }
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
+ }
+
+ &.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ opacity: 0.5;
+ }
+
+ .oo-ui-selectWidget-pressed &.oo-ui-optionWidget-selected,
+ .oo-ui-selectWidget-depressed &.oo-ui-optionWidget-selected,
+ &.oo-ui-optionWidget-selected:hover {
+ background-color: #fff;
+ color: #333;
+ }
+}
+
+.theme-oo-ui-popupWidget () {
+ &-popup {
+ border: 1px solid #aaa;
+ border-radius: 0.2em;
+ background-color: #fff;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
+ }
+
+ @anchor-size: 9px;
+
+ &-anchored {
+ .oo-ui-popupWidget-popup {
+ margin-top: @anchor-size;
+ }
+
+ .oo-ui-popupWidget-anchor:before,
+ .oo-ui-popupWidget-anchor:after {
+ content: "";
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-style: solid;
+ border-color: transparent;
+ border-top: 0;
+ }
+
+ .oo-ui-popupWidget-anchor:before {
+ bottom: -@anchor-size - 1px;
+ left: -@anchor-size;
+ border-bottom-color: #888;
+ border-width: @anchor-size + 1px;
+ }
+
+ .oo-ui-popupWidget-anchor:after {
+ bottom: -@anchor-size - 1px;
+ left: -@anchor-size + 1px;
+ border-bottom-color: #fff;
+ border-width: @anchor-size;
+ }
+ }
+
+ &-transitioning .oo-ui-popupWidget-popup {
+ .oo-ui-transition(width @quick-ease, height @quick-ease, left @quick-ease);
+ }
+
+ &-head {
+ height: 2.5em;
+
+ .oo-ui-buttonWidget {
+ margin: 0.25em;
+ }
+
+ .oo-ui-labelElement-label {
+ margin: 0.75em 1em;
+ }
+ }
+
+ &-body-padded {
+ padding: 0 1em;
+ }
+}
+
+.theme-oo-ui-searchWidget () {
+ &-query {
+ height: 4em;
+ padding: 0 1em;
+ border-bottom: 1px solid #ccc;
+
+ .oo-ui-textInputWidget {
+ margin: 0.75em 0;
+ }
+ }
+
+ &-results {
+ top: 4em;
+ padding: 1em;
+ line-height: 0;
+ }
+}
+
+.theme-oo-ui-selectWidget () {}
+
+.theme-oo-ui-buttonSelectWidget () {
+ border-radius: @border-radius;
+
+ .oo-ui-inline-spacing(0.5em);
+
+ .oo-ui-buttonOptionWidget {
+ .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-left: -1px;
+ }
+
+ &:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: @border-radius;
+ border-top-left-radius: @border-radius;
+ margin-left: 0;
+ }
+
+ &:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: @border-radius;
+ border-top-right-radius: @border-radius;
+ }
+ }
+}
+
+.theme-oo-ui-radioSelectWidget () {}
+
+.theme-oo-ui-menuSelectWidget () {
+ background: #fff;
+ margin-top: -1px;
+ border: 1px solid #aaa;
+ border-radius: 0 0 0.2em 0.2em;
+ padding-bottom: 0.25em;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
+}
+
+.theme-oo-ui-textInputMenuSelectWidget () {}
+
+.theme-oo-ui-outlineSelectWidget () {}
+
+.theme-oo-ui-tabSelectWidget () {
+ background-color: #ddd;
+}
+
+.theme-oo-ui-toggleSwitchWidget () {
+ @travelDistance: 2em;
+ height: 2em;
+ width: @travelDistance + 2em;
+ border-radius: 1em;
+ border: 1px #ddd solid;
+
+ .oo-ui-inline-spacing(0.5em);
+
+ &-grip {
+ top: 0.25em;
+ left: 0.25em;
+ width: 1.5em;
+ height: 1.5em;
+ margin-top: -1px;
+ border-radius: 1em;
+ border: 1px #ddd solid;
+ background-color: #f7f7f7;
+
+ .oo-ui-transition(left @quick-ease, margin-left @quick-ease);
+ }
+
+ &-glow {
+ border-radius: 1em;
+ background-color: #f7f7f7;
+
+ .oo-ui-transition(background-color @quick-ease);
+ }
+
+ &.oo-ui-toggleWidget-on {
+ .oo-ui-toggleSwitchWidget-grip {
+ left: @travelDistance + 0.25em;
+ margin-left: -2px;
+ }
+ }
+
+ &.oo-ui-toggleWidget-off {
+ .oo-ui-toggleSwitchWidget-glow {
+ display: block;
+ }
+ .oo-ui-toggleSwitchWidget-grip {
+ left: 0.25em;
+ margin-left: 0;
+ }
+ }
+
+ &.oo-ui-widget-enabled {
+ border: 1px #ccc solid;
+
+ &:hover {
+ border-color: #aaa;
+ }
+
+ .oo-ui-toggleSwitchWidget-grip {
+ background-color: #fff;
+ border-color: #aaa;
+ }
+
+ &.oo-ui-toggleWidget-on {
+ .oo-ui-toggleSwitchWidget-glow {
+ background-color: @pressed-color;
+ }
+ }
+
+ &.oo-ui-toggleWidget-off {
+ .oo-ui-toggleSwitchWidget-glow {
+ background-color: #fff;
+ }
+ }
+ }
+}
+
+.theme-oo-ui-progressBarWidget () {
+ max-width: 50em;
+ border: 1px solid #ccc;
+ border-radius: 0.1em;
+ overflow: hidden;
+
+ &-bar {
+ height: 1em;
+ background: #ddd;
+ .oo-ui-transition(width 200ms, margin-left 200ms);
+ }
+ &-indeterminate {
+ .oo-ui-progressBarWidget-bar {
+ .oo-ui-animation(oo-ui-progressBarWidget-slide 2s infinite linear);
+ width: 40%;
+ margin-left: -10%;
+ border-left-width: 1px;
+ }
+ }
+ &.oo-ui-widget-disabled {
+ opacity: 0.6;
+ }
+}
+
+.oo-ui-progressBarWidget-slide-frames () {
+ from { margin-left: -40%; }
+ to { margin-left: 100%; }
+}
+@-webkit-keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
+@-moz-keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
+@-ms-keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
+@-o-keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
+@keyframes oo-ui-progressBarWidget-slide { .oo-ui-progressBarWidget-slide-frames }
diff --git a/vendor/oojs/oojs-ui/src/themes/mediawiki/windows.less b/vendor/oojs/oojs-ui/src/themes/mediawiki/windows.less
new file mode 100644
index 00000000..423233ce
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/themes/mediawiki/windows.less
@@ -0,0 +1,300 @@
+@import 'common';
+
+.theme-oo-ui-window () {
+ background: transparent;
+}
+
+.theme-oo-ui-dialog () {
+ &-content > .oo-ui-window-body {
+ outline: 1px solid #aaa;
+ }
+}
+
+.theme-oo-ui-messageDialog () {
+ &-title,
+ &-message {
+ display: block;
+ text-align: center;
+ padding-top: 0.5em;
+ }
+
+ &-title {
+ font-size: 1.5em;
+ line-height: 1em;
+ color: #000;
+ }
+
+ &-message {
+ font-size: 0.9em;
+ line-height: 1.25em;
+ color: #666;
+
+ &-verbose {
+ font-size: 1.1em;
+ line-height: 1.5em;
+ text-align: left;
+ }
+ }
+
+ &-actions {
+ &-horizontal {
+ .oo-ui-actionWidget {
+ border-right: 1px solid #e5e5e5;
+
+ &:last-child {
+ border-right-width: 0;
+ }
+ }
+ }
+
+ &-vertical {
+ .oo-ui-actionWidget {
+ border-bottom: 1px solid #e5e5e5;
+
+ &:last-child {
+ border-bottom-width: 0;
+ }
+ }
+ }
+
+ .oo-ui-actionWidget {
+ height: 3.4em;
+
+ &.oo-ui-labelElement .oo-ui-labelElement-label {
+ text-align: center;
+ line-height: 3.4em;
+ padding: 0 2em;
+ }
+
+ &:hover {
+ background-color: rgba(0,0,0,0.05);
+ }
+
+ &:active {
+ background-color: rgba(0,0,0,0.1);
+ }
+
+ &.oo-ui-flaggedElement {
+ &-progressive {
+ &:hover {
+ background-color: rgba(8,126,204,0.05);
+ }
+
+ &:active {
+ background-color: rgba(8,126,204,0.1);
+ }
+
+ .oo-ui-labelElement-label {
+ font-weight: bold;
+ }
+ }
+
+ &-constructive {
+ &:hover {
+ background-color: rgba(118,171,54,0.05);
+ }
+
+ &:active {
+ background-color: rgba(118,171,54,0.1);
+ }
+ }
+
+ &-destructive {
+ &:hover {
+ background-color: rgba(212,83,83,0.05);
+ }
+
+ &:active {
+ background-color: rgba(212,83,83,0.1);
+ }
+ }
+ }
+ }
+ }
+}
+
+.theme-oo-ui-processDialog () {
+ &-content {
+ .oo-ui-window-head {
+ height: 3.4em;
+
+ &.oo-ui-pendingElement-pending {
+ .oo-ui-background-image('@{oo-ui-default-image-path}/textures/pending.gif');
+ }
+ }
+
+ .oo-ui-window-body {
+ top: 3.4em;
+ outline: 1px solid rgba(0,0,0,0.2);
+ }
+ }
+
+ &-navigation {
+ position: relative;
+ height: 3.4em;
+ padding: 0 1em;
+ }
+
+ &-location {
+ padding: 0.75em 0;
+ height: @icon-size;
+ cursor: default;
+ text-align: center;
+ }
+
+ &-title {
+ font-weight: bold;
+ line-height: @icon-size;
+ }
+
+ &-actions {
+ &-safe,
+ &-primary,
+ &-other {
+ .oo-ui-actionWidget {
+ .oo-ui-buttonElement-button {
+ min-width: @icon-size;
+ min-height: @icon-size;
+ }
+
+ .oo-ui-labelElement-label {
+ line-height: @icon-size;
+ }
+
+ &.oo-ui-iconElement .oo-ui-iconElement-icon {
+ margin-top: -0.125em;
+ }
+
+ &.oo-ui-buttonElement-framed {
+ margin: 0.75em 0 0.75em 0.75em;
+ .oo-ui-buttonElement-button {
+ padding: 0 1em;
+ vertical-align: middle;
+ }
+ }
+ }
+ }
+
+ &-safe,
+ &-primary {
+ .oo-ui-actionWidget {
+ &:hover {
+ background-color: rgba(0,0,0,0.05);
+ }
+
+ &:active {
+ background-color: rgba(0,0,0,0.1);
+ }
+
+ &.oo-ui-buttonElement-framed {
+ margin: 0.75em;
+ .oo-ui-buttonElement-button {
+ /* Adjust for border so text aligns with title */
+ margin: -1px;
+ }
+ }
+
+ &.oo-ui-flaggedElement {
+ &-progressive {
+ &:hover {
+ background-color: rgba(8,126,204,0.05);
+ }
+
+ &:active {
+ background-color: rgba(8,126,204,0.1);
+ }
+
+ .oo-ui-labelElement-label {
+ font-weight: bold;
+ }
+ }
+
+ &-constructive {
+ &:hover {
+ background-color: rgba(118,171,54,0.05);
+ }
+
+ &:active {
+ background-color: rgba(118,171,54,0.1);
+ }
+ }
+
+ &-destructive {
+ &:hover {
+ background-color: rgba(212,83,83,0.05);
+ }
+
+ &:active {
+ background-color: rgba(212,83,83,0.1);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ > .oo-ui-window-frame {
+ min-height: 5em;
+ }
+
+ &-errors {
+ background-color: rgba(255,255,255,0.9);
+ padding: 3em 3em 1.5em 3em;
+ text-align: center;
+
+ .oo-ui-buttonWidget {
+ margin: 2em 1em 2em 1em;
+ }
+
+ &-title {
+ font-size: 1.5em;
+ color: #000;
+ margin-bottom: 2em;
+ }
+ }
+
+ &-error {
+ text-align: left;
+ margin: 1em;
+ padding: 1em;
+ border: 1px solid #ff9e9e;
+ background-color: #fff7f7;
+ border-radius: 0.25em;
+ }
+}
+
+.theme-oo-ui-windowManager () {
+ &-modal > .oo-ui-dialog {
+ background-color: rgba(255,255,255,0.5);
+ opacity: 0;
+
+ .oo-ui-transition(opacity 250ms ease-in-out);
+
+ > .oo-ui-window-frame {
+ top: 1em;
+ bottom: 1em;
+ background-color: #fff;
+
+ opacity: 0;
+ .oo-ui-transform(scale(0.5));
+ .oo-ui-transition(all 250ms ease-in-out);
+ }
+
+ &.oo-ui-window-ready {
+ /* Fade window overlay */
+ opacity: 1;
+
+ > .oo-ui-window-frame {
+ /* Fade frame */
+ opacity: 1;
+ .oo-ui-transform(scale(1));
+ }
+ }
+ }
+
+ &-modal&-floating > .oo-ui-dialog > .oo-ui-window-frame {
+ border: 1px solid #aaa;
+ border-radius: 0.2em;
+ box-shadow: inset 0 -0.2em 0 0 rgba(0,0,0,0.2);
+ }
+}
diff --git a/vendor/oojs/oojs-ui/src/toolgroups/BarToolGroup.js b/vendor/oojs/oojs-ui/src/toolgroups/BarToolGroup.js
new file mode 100644
index 00000000..038894d6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/toolgroups/BarToolGroup.js
@@ -0,0 +1,35 @@
+/**
+ * Horizontal bar layout of tools as icon buttons.
+ *
+ * @class
+ * @extends OO.ui.ToolGroup
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.BarToolGroup = function OoUiBarToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
+ // Parent constructor
+ OO.ui.BarToolGroup.super.call( this, toolbar, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-barToolGroup' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.BarToolGroup, OO.ui.ToolGroup );
+
+/* Static Properties */
+
+OO.ui.BarToolGroup.static.titleTooltips = true;
+
+OO.ui.BarToolGroup.static.accelTooltips = true;
+
+OO.ui.BarToolGroup.static.name = 'bar';
diff --git a/vendor/oojs/oojs-ui/src/toolgroups/ListToolGroup.js b/vendor/oojs/oojs-ui/src/toolgroups/ListToolGroup.js
new file mode 100644
index 00000000..e78f507e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/toolgroups/ListToolGroup.js
@@ -0,0 +1,133 @@
+/**
+ * Drop down list layout of tools as labeled icon buttons.
+ *
+ * This layout allows some tools to be collapsible, controlled by a "More" / "Fewer" option at the
+ * bottom of the main list. These are not automatically positioned at the bottom of the list; you
+ * may want to use the 'promote' and 'demote' configuration options to achieve this.
+ *
+ * @class
+ * @extends OO.ui.PopupToolGroup
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ * @cfg {Array} [allowCollapse] List of tools that can be collapsed. Remaining tools will be always
+ * shown.
+ * @cfg {Array} [forceExpand] List of tools that *may not* be collapsed. All remaining tools will be
+ * allowed to be collapsed.
+ * @cfg {boolean} [expanded=false] Whether the collapsible tools are expanded by default
+ */
+OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
+ // Properties (must be set before parent constructor, which calls #populate)
+ this.allowCollapse = config.allowCollapse;
+ this.forceExpand = config.forceExpand;
+ this.expanded = config.expanded !== undefined ? config.expanded : false;
+ this.collapsibleTools = [];
+
+ // Parent constructor
+ OO.ui.ListToolGroup.super.call( this, toolbar, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-listToolGroup' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ListToolGroup, OO.ui.PopupToolGroup );
+
+/* Static Properties */
+
+OO.ui.ListToolGroup.static.name = 'list';
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ListToolGroup.prototype.populate = function () {
+ var i, len, allowCollapse = [];
+
+ OO.ui.ListToolGroup.super.prototype.populate.call( this );
+
+ // Update the list of collapsible tools
+ if ( this.allowCollapse !== undefined ) {
+ allowCollapse = this.allowCollapse;
+ } else if ( this.forceExpand !== undefined ) {
+ allowCollapse = OO.simpleArrayDifference( Object.keys( this.tools ), this.forceExpand );
+ }
+
+ this.collapsibleTools = [];
+ for ( i = 0, len = allowCollapse.length; i < len; i++ ) {
+ if ( this.tools[ allowCollapse[ i ] ] !== undefined ) {
+ this.collapsibleTools.push( this.tools[ allowCollapse[ i ] ] );
+ }
+ }
+
+ // Keep at the end, even when tools are added
+ this.$group.append( this.getExpandCollapseTool().$element );
+
+ this.getExpandCollapseTool().toggle( this.collapsibleTools.length !== 0 );
+ this.updateCollapsibleState();
+};
+
+OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {
+ if ( this.expandCollapseTool === undefined ) {
+ var ExpandCollapseTool = function () {
+ ExpandCollapseTool.super.apply( this, arguments );
+ };
+
+ OO.inheritClass( ExpandCollapseTool, OO.ui.Tool );
+
+ ExpandCollapseTool.prototype.onSelect = function () {
+ this.toolGroup.expanded = !this.toolGroup.expanded;
+ this.toolGroup.updateCollapsibleState();
+ this.setActive( false );
+ };
+ ExpandCollapseTool.prototype.onUpdateState = function () {
+ // Do nothing. Tool interface requires an implementation of this function.
+ };
+
+ ExpandCollapseTool.static.name = 'more-fewer';
+
+ this.expandCollapseTool = new ExpandCollapseTool( this );
+ }
+ return this.expandCollapseTool;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ListToolGroup.prototype.onMouseKeyUp = function ( e ) {
+ // Do not close the popup when the user wants to show more/fewer tools
+ if (
+ $( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
+ // HACK: Prevent the popup list from being hidden. Skip the PopupToolGroup implementation (which
+ // hides the popup list when a tool is selected) and call ToolGroup's implementation directly.
+ return OO.ui.ListToolGroup.super.super.prototype.onMouseKeyUp.call( this, e );
+ } else {
+ return OO.ui.ListToolGroup.super.prototype.onMouseKeyUp.call( this, e );
+ }
+};
+
+OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
+ var i, len;
+
+ this.getExpandCollapseTool()
+ .setIcon( this.expanded ? 'collapse' : 'expand' )
+ .setTitle( OO.ui.msg( this.expanded ? 'ooui-toolgroup-collapse' : 'ooui-toolgroup-expand' ) );
+
+ for ( i = 0, len = this.collapsibleTools.length; i < len; i++ ) {
+ this.collapsibleTools[ i ].toggle( this.expanded );
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/toolgroups/MenuToolGroup.js b/vendor/oojs/oojs-ui/src/toolgroups/MenuToolGroup.js
new file mode 100644
index 00000000..aef69a93
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/toolgroups/MenuToolGroup.js
@@ -0,0 +1,58 @@
+/**
+ * Drop down menu layout of tools as selectable menu items.
+ *
+ * @class
+ * @extends OO.ui.PopupToolGroup
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.MenuToolGroup = function OoUiMenuToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.MenuToolGroup.super.call( this, toolbar, config );
+
+ // Events
+ this.toolbar.connect( this, { updateState: 'onUpdateState' } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-menuToolGroup' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.MenuToolGroup, OO.ui.PopupToolGroup );
+
+/* Static Properties */
+
+OO.ui.MenuToolGroup.static.name = 'menu';
+
+/* Methods */
+
+/**
+ * Handle the toolbar state being updated.
+ *
+ * When the state changes, the title of each active item in the menu will be joined together and
+ * used as a label for the group. The label will be empty if none of the items are active.
+ */
+OO.ui.MenuToolGroup.prototype.onUpdateState = function () {
+ var name,
+ labelTexts = [];
+
+ for ( name in this.tools ) {
+ if ( this.tools[ name ].isActive() ) {
+ labelTexts.push( this.tools[ name ].getTitle() );
+ }
+ }
+
+ this.setLabel( labelTexts.join( ', ' ) || ' ' );
+};
diff --git a/vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js b/vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js
new file mode 100644
index 00000000..0fbdf4fc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/toolgroups/PopupToolGroup.js
@@ -0,0 +1,187 @@
+/**
+ * Popup list of tools with an icon and optional label.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.ToolGroup
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.ClippableElement
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {OO.ui.Toolbar} toolbar
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [header] Text to display at the top of the pop-up
+ */
+OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolbar ) && config === undefined ) {
+ config = toolbar;
+ toolbar = config.toolbar;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.PopupToolGroup.super.call( this, toolbar, config );
+
+ // Properties
+ this.active = false;
+ this.dragging = false;
+ this.onBlurHandler = this.onBlur.bind( this );
+ this.$handle = $( '<span>' );
+
+ // Mixin constructors
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, config );
+ OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
+
+ // Events
+ this.$handle.on( {
+ keydown: this.onHandleMouseKeyDown.bind( this ),
+ keyup: this.onHandleMouseKeyUp.bind( this ),
+ mousedown: this.onHandleMouseKeyDown.bind( this ),
+ mouseup: this.onHandleMouseKeyUp.bind( this )
+ } );
+
+ // Initialization
+ this.$handle
+ .addClass( 'oo-ui-popupToolGroup-handle' )
+ .append( this.$icon, this.$label, this.$indicator );
+ // If the pop-up should have a header, add it to the top of the toolGroup.
+ // Note: If this feature is useful for other widgets, we could abstract it into an
+ // OO.ui.HeaderedElement mixin constructor.
+ if ( config.header !== undefined ) {
+ this.$group
+ .prepend( $( '<span>' )
+ .addClass( 'oo-ui-popupToolGroup-header' )
+ .text( config.header )
+ );
+ }
+ this.$element
+ .addClass( 'oo-ui-popupToolGroup' )
+ .prepend( this.$handle );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.PopupToolGroup, OO.ui.ToolGroup );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IconElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.ClippableElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TabIndexedElement );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.PopupToolGroup.prototype.setDisabled = function () {
+ // Parent method
+ OO.ui.PopupToolGroup.super.prototype.setDisabled.apply( this, arguments );
+
+ if ( this.isDisabled() && this.isElementAttached() ) {
+ this.setActive( false );
+ }
+};
+
+/**
+ * Handle focus being lost.
+ *
+ * The event is actually generated from a mouseup/keyup, so it is not a normal blur event object.
+ *
+ * @param {jQuery.Event} e Mouse up or key up event
+ */
+OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
+ // Only deactivate when clicking outside the dropdown element
+ if ( $( e.target ).closest( '.oo-ui-popupToolGroup' )[ 0 ] !== this.$element[ 0 ] ) {
+ this.setActive( false );
+ }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.PopupToolGroup.prototype.onMouseKeyUp = function ( e ) {
+ // Only close toolgroup when a tool was actually selected
+ if (
+ !this.isDisabled() && this.pressed && this.pressed === this.getTargetTool( e ) &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
+ this.setActive( false );
+ }
+ return OO.ui.PopupToolGroup.super.prototype.onMouseKeyUp.call( this, e );
+};
+
+/**
+ * Handle mouse up and key up events.
+ *
+ * @param {jQuery.Event} e Mouse up or key up event
+ */
+OO.ui.PopupToolGroup.prototype.onHandleMouseKeyUp = function ( e ) {
+ if (
+ !this.isDisabled() &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
+ return false;
+ }
+};
+
+/**
+ * Handle mouse down and key down events.
+ *
+ * @param {jQuery.Event} e Mouse down or key down event
+ */
+OO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) {
+ if (
+ !this.isDisabled() &&
+ ( e.which === 1 || e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+ ) {
+ this.setActive( !this.active );
+ return false;
+ }
+};
+
+/**
+ * Switch into active mode.
+ *
+ * When active, mouseup events anywhere in the document will trigger deactivation.
+ */
+OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
+ value = !!value;
+ if ( this.active !== value ) {
+ this.active = value;
+ if ( value ) {
+ this.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true );
+ this.getElementDocument().addEventListener( 'keyup', this.onBlurHandler, true );
+
+ // Try anchoring the popup to the left first
+ this.$element.addClass( 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left' );
+ this.toggleClipping( true );
+ if ( this.isClippedHorizontally() ) {
+ // Anchoring to the left caused the popup to clip, so anchor it to the right instead
+ this.toggleClipping( false );
+ this.$element
+ .removeClass( 'oo-ui-popupToolGroup-left' )
+ .addClass( 'oo-ui-popupToolGroup-right' );
+ this.toggleClipping( true );
+ }
+ } else {
+ this.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true );
+ this.getElementDocument().removeEventListener( 'keyup', this.onBlurHandler, true );
+ this.$element.removeClass(
+ 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left oo-ui-popupToolGroup-right'
+ );
+ this.toggleClipping( false );
+ }
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/tools/PopupTool.js b/vendor/oojs/oojs-ui/src/tools/PopupTool.js
new file mode 100644
index 00000000..98f93d75
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/tools/PopupTool.js
@@ -0,0 +1,59 @@
+/**
+ * Tool that shows a popup when selected.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Tool
+ * @mixins OO.ui.PopupElement
+ *
+ * @constructor
+ * @param {OO.ui.ToolGroup} toolGroup
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.PopupTool = function OoUiPopupTool( toolGroup, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+ config = toolGroup;
+ toolGroup = config.toolGroup;
+ }
+
+ // Parent constructor
+ OO.ui.PopupTool.super.call( this, toolGroup, config );
+
+ // Mixin constructors
+ OO.ui.PopupElement.call( this, config );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-popupTool' )
+ .append( this.popup.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.PopupTool, OO.ui.Tool );
+OO.mixinClass( OO.ui.PopupTool, OO.ui.PopupElement );
+
+/* Methods */
+
+/**
+ * Handle the tool being selected.
+ *
+ * @inheritdoc
+ */
+OO.ui.PopupTool.prototype.onSelect = function () {
+ if ( !this.isDisabled() ) {
+ this.popup.toggle();
+ }
+ this.setActive( false );
+ return false;
+};
+
+/**
+ * Handle the toolbar state being updated.
+ *
+ * @inheritdoc
+ */
+OO.ui.PopupTool.prototype.onUpdateState = function () {
+ this.setActive( false );
+};
diff --git a/vendor/oojs/oojs-ui/src/tools/ToolGroupTool.js b/vendor/oojs/oojs-ui/src/tools/ToolGroupTool.js
new file mode 100644
index 00000000..b8f70a3a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/tools/ToolGroupTool.js
@@ -0,0 +1,96 @@
+/**
+ * Tool that has a tool group inside. This is a bad workaround for the lack of proper hierarchical
+ * menus in toolbars (T74159).
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Tool
+ *
+ * @constructor
+ * @param {OO.ui.ToolGroup} toolGroup
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ToolGroupTool = function OoUiToolGroupTool( toolGroup, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( toolGroup ) && config === undefined ) {
+ config = toolGroup;
+ toolGroup = config.toolGroup;
+ }
+
+ // Parent constructor
+ OO.ui.ToolGroupTool.super.call( this, toolGroup, config );
+
+ // Properties
+ this.innerToolGroup = this.createGroup( this.constructor.static.groupConfig );
+
+ // Events
+ this.innerToolGroup.connect( this, { disable: 'onToolGroupDisable' } );
+
+ // Initialization
+ this.$link.remove();
+ this.$element
+ .addClass( 'oo-ui-toolGroupTool' )
+ .append( this.innerToolGroup.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ToolGroupTool, OO.ui.Tool );
+
+/* Static Properties */
+
+/**
+ * Tool group configuration. See OO.ui.Toolbar#setup for the accepted values.
+ *
+ * @property {Object.<string,Array>}
+ */
+OO.ui.ToolGroupTool.static.groupConfig = {};
+
+/* Methods */
+
+/**
+ * Handle the tool being selected.
+ *
+ * @inheritdoc
+ */
+OO.ui.ToolGroupTool.prototype.onSelect = function () {
+ this.innerToolGroup.setActive( !this.innerToolGroup.active );
+ return false;
+};
+
+/**
+ * Synchronize disabledness state of the tool with the inner toolgroup.
+ *
+ * @private
+ * @param {boolean} disabled Element is disabled
+ */
+OO.ui.ToolGroupTool.prototype.onToolGroupDisable = function ( disabled ) {
+ this.setDisabled( disabled );
+};
+
+/**
+ * Handle the toolbar state being updated.
+ *
+ * @inheritdoc
+ */
+OO.ui.ToolGroupTool.prototype.onUpdateState = function () {
+ this.setActive( false );
+};
+
+/**
+ * Build a OO.ui.ToolGroup from the configuration.
+ *
+ * @param {Object.<string,Array>} group Tool group configuration. See OO.ui.Toolbar#setup for the
+ * accepted values.
+ * @return {OO.ui.ListToolGroup}
+ */
+OO.ui.ToolGroupTool.prototype.createGroup = function ( group ) {
+ if ( group.include === '*' ) {
+ // Apply defaults to catch-all groups
+ if ( group.label === undefined ) {
+ group.label = OO.ui.msg( 'ooui-toolbar-more' );
+ }
+ }
+
+ return this.toolbar.getToolGroupFactory().create( 'list', this.toolbar, group );
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ActionWidget.js b/vendor/oojs/oojs-ui/src/widgets/ActionWidget.js
new file mode 100644
index 00000000..789f04f1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ActionWidget.js
@@ -0,0 +1,170 @@
+/**
+ * An ActionWidget is a {@link OO.ui.ButtonWidget button widget} that executes an action.
+ * Action widgets are used with OO.ui.ActionSet, which manages the behavior and availability
+ * of the actions.
+ *
+ * Both actions and action sets are primarily used with {@link OO.ui.Dialog Dialogs}.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information
+ * and examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Windows/Process_Dialogs#Action_sets
+ *
+ * @class
+ * @extends OO.ui.ButtonWidget
+ * @mixins OO.ui.PendingElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [action] Symbolic name of the action (e.g., ‘continue’ or ‘cancel’).
+ * @cfg {string[]} [modes] Symbolic names of the modes (e.g., ‘edit’ or ‘read’) in which the action
+ * should be made available. See the action set's {@link OO.ui.ActionSet#setMode setMode} method
+ * for more information about setting modes.
+ * @cfg {boolean} [framed=false] Render the action button with a frame
+ */
+OO.ui.ActionWidget = function OoUiActionWidget( config ) {
+ // Configuration initialization
+ config = $.extend( { framed: false }, config );
+
+ // Parent constructor
+ OO.ui.ActionWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.PendingElement.call( this, config );
+
+ // Properties
+ this.action = config.action || '';
+ this.modes = config.modes || [];
+ this.width = 0;
+ this.height = 0;
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-actionWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ActionWidget, OO.ui.ButtonWidget );
+OO.mixinClass( OO.ui.ActionWidget, OO.ui.PendingElement );
+
+/* Events */
+
+/**
+ * A resize event is emitted when the size of the widget changes.
+ *
+ * @event resize
+ */
+
+/* Methods */
+
+/**
+ * Check if the action is configured to be available in the specified `mode`.
+ *
+ * @param {string} mode Name of mode
+ * @return {boolean} The action is configured with the mode
+ */
+OO.ui.ActionWidget.prototype.hasMode = function ( mode ) {
+ return this.modes.indexOf( mode ) !== -1;
+};
+
+/**
+ * Get the symbolic name of the action (e.g., ‘continue’ or ‘cancel’).
+ *
+ * @return {string}
+ */
+OO.ui.ActionWidget.prototype.getAction = function () {
+ return this.action;
+};
+
+/**
+ * Get the symbolic name of the mode or modes for which the action is configured to be available.
+ *
+ * The current mode is set with the action set's {@link OO.ui.ActionSet#setMode setMode} method.
+ * Only actions that are configured to be avaiable in the current mode will be visible. All other actions
+ * are hidden.
+ *
+ * @return {string[]}
+ */
+OO.ui.ActionWidget.prototype.getModes = function () {
+ return this.modes.slice();
+};
+
+/**
+ * Emit a resize event if the size has changed.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.ActionWidget.prototype.propagateResize = function () {
+ var width, height;
+
+ if ( this.isElementAttached() ) {
+ width = this.$element.width();
+ height = this.$element.height();
+
+ if ( width !== this.width || height !== this.height ) {
+ this.width = width;
+ this.height = height;
+ this.emit( 'resize' );
+ }
+ }
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ActionWidget.prototype.setIcon = function () {
+ // Mixin method
+ OO.ui.IconElement.prototype.setIcon.apply( this, arguments );
+ this.propagateResize();
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ActionWidget.prototype.setLabel = function () {
+ // Mixin method
+ OO.ui.LabelElement.prototype.setLabel.apply( this, arguments );
+ this.propagateResize();
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ActionWidget.prototype.setFlags = function () {
+ // Mixin method
+ OO.ui.FlaggedElement.prototype.setFlags.apply( this, arguments );
+ this.propagateResize();
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ActionWidget.prototype.clearFlags = function () {
+ // Mixin method
+ OO.ui.FlaggedElement.prototype.clearFlags.apply( this, arguments );
+ this.propagateResize();
+
+ return this;
+};
+
+/**
+ * Toggle the visibility of the action button.
+ *
+ * @param {boolean} [show] Show button, omit to toggle visibility
+ * @chainable
+ */
+OO.ui.ActionWidget.prototype.toggle = function () {
+ // Parent method
+ OO.ui.ActionWidget.super.prototype.toggle.apply( this, arguments );
+ this.propagateResize();
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ButtonGroupWidget.js b/vendor/oojs/oojs-ui/src/widgets/ButtonGroupWidget.js
new file mode 100644
index 00000000..f1388ab8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ButtonGroupWidget.js
@@ -0,0 +1,53 @@
+/**
+ * A ButtonGroupWidget groups related buttons and is used together with OO.ui.ButtonWidget and
+ * its subclasses. Each button in a group is addressed by a unique reference. Buttons can be added,
+ * removed, and cleared from the group.
+ *
+ * @example
+ * // Example: A ButtonGroupWidget with two buttons
+ * var button1 = new OO.ui.PopupButtonWidget( {
+ * label: 'Select a category',
+ * icon: 'menu',
+ * popup: {
+ * $content: $( '<p>List of categories...</p>' ),
+ * padded: true,
+ * align: 'left'
+ * }
+ * } );
+ * var button2 = new OO.ui.ButtonWidget( {
+ * label: 'Add item'
+ * });
+ * var buttonGroup = new OO.ui.ButtonGroupWidget( {
+ * items: [button1, button2]
+ * } );
+ * $( 'body' ).append( buttonGroup.$element );
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.ButtonWidget[]} [items] Buttons to add
+ */
+OO.ui.ButtonGroupWidget = function OoUiButtonGroupWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.ButtonGroupWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-buttonGroupWidget' );
+ if ( Array.isArray( config.items ) ) {
+ this.addItems( config.items );
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ButtonGroupWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.GroupElement );
diff --git a/vendor/oojs/oojs-ui/src/widgets/ButtonInputWidget.js b/vendor/oojs/oojs-ui/src/widgets/ButtonInputWidget.js
new file mode 100644
index 00000000..1d4d97fe
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ButtonInputWidget.js
@@ -0,0 +1,121 @@
+/**
+ * ButtonInputWidget is used to submit HTML forms and is intended to be used within
+ * a OO.ui.FormLayout. If you do not need the button to work with HTML forms, you probably
+ * want to use OO.ui.ButtonWidget instead. Button input widgets can be rendered as either an
+ * HTML `<button/>` (the default) or an HTML `<input/>` tags. See the
+ * [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * @example
+ * // A ButtonInputWidget rendered as an HTML button, the default.
+ * var button = new OO.ui.ButtonInputWidget( {
+ * label: 'Input button',
+ * icon: 'check',
+ * value: 'check'
+ * } );
+ * $( 'body' ).append( button.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs#Button_inputs
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [type='button'] The value of the HTML `'type'` attribute: 'button', 'submit' or 'reset'.
+ * @cfg {boolean} [useInputTag=false] Use an `<input/>` tag instead of a `<button/>` tag, the default.
+ * Widgets configured to be an `<input/>` do not support {@link #icon icons} and {@link #indicator indicators},
+ * non-plaintext {@link #label labels}, or {@link #value values}. In general, useInputTag should only
+ * be set to `true` when there’s need to support IE6 in a form with multiple buttons.
+ */
+OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
+ // Configuration initialization
+ config = $.extend( { type: 'button', useInputTag: false }, config );
+
+ // Properties (must be set before parent constructor, which calls #setValue)
+ this.useInputTag = config.useInputTag;
+
+ // Parent constructor
+ OO.ui.ButtonInputWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.ButtonElement.call( this, $.extend( {}, config, { $button: this.$input } ) );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
+
+ // Initialization
+ if ( !config.useInputTag ) {
+ this.$input.append( this.$icon, this.$label, this.$indicator );
+ }
+ this.$element.addClass( 'oo-ui-buttonInputWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ButtonInputWidget, OO.ui.InputWidget );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.TitledElement );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ * @private
+ */
+OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
+ var html = '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + config.type + '">';
+ return $( html );
+};
+
+/**
+ * Set label value.
+ *
+ * If #useInputTag is `true`, the label is set as the `value` of the `<input/>` tag.
+ *
+ * @param {jQuery|string|Function|null} label Label nodes, text, a function that returns nodes or
+ * text, or `null` for no label
+ * @chainable
+ */
+OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
+ OO.ui.LabelElement.prototype.setLabel.call( this, label );
+
+ if ( this.useInputTag ) {
+ if ( typeof label === 'function' ) {
+ label = OO.ui.resolveMsg( label );
+ }
+ if ( label instanceof jQuery ) {
+ label = label.text();
+ }
+ if ( !label ) {
+ label = '';
+ }
+ this.$input.val( label );
+ }
+
+ return this;
+};
+
+/**
+ * Set the value of the input.
+ *
+ * This method is disabled for button inputs configured as {@link #useInputTag <input/> tags}, as
+ * they do not support {@link #value values}.
+ *
+ * @param {string} value New value
+ * @chainable
+ */
+OO.ui.ButtonInputWidget.prototype.setValue = function ( value ) {
+ if ( !this.useInputTag ) {
+ OO.ui.ButtonInputWidget.super.prototype.setValue.call( this, value );
+ }
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ButtonOptionWidget.js b/vendor/oojs/oojs-ui/src/widgets/ButtonOptionWidget.js
new file mode 100644
index 00000000..7758c949
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ButtonOptionWidget.js
@@ -0,0 +1,60 @@
+/**
+ * ButtonOptionWidget is a special type of {@link OO.ui.ButtonElement button element} that
+ * can be selected and configured with data. The class is
+ * used with OO.ui.ButtonSelectWidget to create a selection of button options. Please see the
+ * [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.DecoratedOptionWidget
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {
+ // Configuration initialization
+ config = $.extend( { tabIndex: -1 }, config );
+
+ // Parent constructor
+ OO.ui.ButtonOptionWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.ButtonElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-buttonOptionWidget' );
+ this.$button.append( this.$element.contents() );
+ this.$element.append( this.$button );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.DecoratedOptionWidget );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.TabIndexedElement );
+
+/* Static Properties */
+
+// Allow button mouse down events to pass through so they can be handled by the parent select widget
+OO.ui.ButtonOptionWidget.static.cancelButtonMouseDownEvents = false;
+
+OO.ui.ButtonOptionWidget.static.highlightable = false;
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {
+ OO.ui.ButtonOptionWidget.super.prototype.setSelected.call( this, state );
+
+ if ( this.constructor.static.selectable ) {
+ this.setActive( state );
+ }
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ButtonSelectWidget.js b/vendor/oojs/oojs-ui/src/widgets/ButtonSelectWidget.js
new file mode 100644
index 00000000..18177761
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ButtonSelectWidget.js
@@ -0,0 +1,62 @@
+/**
+ * ButtonSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains
+ * button options and is used together with
+ * OO.ui.ButtonOptionWidget. The ButtonSelectWidget provides an interface for
+ * highlighting, choosing, and selecting mutually exclusive options. Please see
+ * the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * @example
+ * // Example: A ButtonSelectWidget that contains three ButtonOptionWidgets
+ * var option1 = new OO.ui.ButtonOptionWidget( {
+ * data: 1,
+ * label: 'Option 1',
+ * title: 'Button option 1'
+ * } );
+ *
+ * var option2 = new OO.ui.ButtonOptionWidget( {
+ * data: 2,
+ * label: 'Option 2',
+ * title: 'Button option 2'
+ * } );
+ *
+ * var option3 = new OO.ui.ButtonOptionWidget( {
+ * data: 3,
+ * label: 'Option 3',
+ * title: 'Button option 3'
+ * } );
+ *
+ * var buttonSelect=new OO.ui.ButtonSelectWidget( {
+ * items: [ option1, option2, option3 ]
+ * } );
+ * $( 'body' ).append( buttonSelect.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {
+ // Parent constructor
+ OO.ui.ButtonSelectWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, config );
+
+ // Events
+ this.$element.on( {
+ focus: this.bindKeyDownListener.bind( this ),
+ blur: this.unbindKeyDownListener.bind( this )
+ } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-buttonSelectWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.TabIndexedElement );
diff --git a/vendor/oojs/oojs-ui/src/widgets/ButtonWidget.js b/vendor/oojs/oojs-ui/src/widgets/ButtonWidget.js
new file mode 100644
index 00000000..474fafed
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ButtonWidget.js
@@ -0,0 +1,215 @@
+/**
+ * ButtonWidget is a generic widget for buttons. A wide variety of looks,
+ * feels, and functionality can be customized via the class’s configuration options
+ * and methods. Please see the [OOjs UI documentation on MediaWiki] [1] for more information
+ * and examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches
+ *
+ * @example
+ * // A button widget
+ * var button = new OO.ui.ButtonWidget( {
+ * label: 'Button with Icon',
+ * icon: 'remove',
+ * iconTitle: 'Remove'
+ * } );
+ * $( 'body' ).append( button.$element );
+ *
+ * NOTE: HTML form buttons should use the OO.ui.ButtonInputWidget class.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [href] Hyperlink to visit when the button is clicked.
+ * @cfg {string} [target] The frame or window in which to open the hyperlink.
+ * @cfg {boolean} [noFollow] Search engine traversal hint (default: true)
+ */
+OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.ButtonWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.ButtonElement.call( this, config );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
+ OO.ui.FlaggedElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+
+ // Properties
+ this.href = null;
+ this.target = null;
+ this.noFollow = false;
+
+ // Events
+ this.connect( this, { disable: 'onDisable' } );
+
+ // Initialization
+ this.$button.append( this.$icon, this.$label, this.$indicator );
+ this.$element
+ .addClass( 'oo-ui-buttonWidget' )
+ .append( this.$button );
+ this.setHref( config.href );
+ this.setTarget( config.target );
+ this.setNoFollow( config.noFollow );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ButtonWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.TabIndexedElement );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ButtonWidget.prototype.onMouseDown = function ( e ) {
+ if ( !this.isDisabled() ) {
+ // Remove the tab-index while the button is down to prevent the button from stealing focus
+ this.$button.removeAttr( 'tabindex' );
+ }
+
+ return OO.ui.ButtonElement.prototype.onMouseDown.call( this, e );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ButtonWidget.prototype.onMouseUp = function ( e ) {
+ if ( !this.isDisabled() ) {
+ // Restore the tab-index after the button is up to restore the button's accessibility
+ this.$button.attr( 'tabindex', this.tabIndex );
+ }
+
+ return OO.ui.ButtonElement.prototype.onMouseUp.call( this, e );
+};
+
+/**
+ * Get hyperlink location.
+ *
+ * @return {string} Hyperlink location
+ */
+OO.ui.ButtonWidget.prototype.getHref = function () {
+ return this.href;
+};
+
+/**
+ * Get hyperlink target.
+ *
+ * @return {string} Hyperlink target
+ */
+OO.ui.ButtonWidget.prototype.getTarget = function () {
+ return this.target;
+};
+
+/**
+ * Get search engine traversal hint.
+ *
+ * @return {boolean} Whether search engines should avoid traversing this hyperlink
+ */
+OO.ui.ButtonWidget.prototype.getNoFollow = function () {
+ return this.noFollow;
+};
+
+/**
+ * Set hyperlink location.
+ *
+ * @param {string|null} href Hyperlink location, null to remove
+ */
+OO.ui.ButtonWidget.prototype.setHref = function ( href ) {
+ href = typeof href === 'string' ? href : null;
+
+ if ( href !== this.href ) {
+ this.href = href;
+ this.updateHref();
+ }
+
+ return this;
+};
+
+/**
+ * Update the `href` attribute, in case of changes to href or
+ * disabled state.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.ButtonWidget.prototype.updateHref = function () {
+ if ( this.href !== null && !this.isDisabled() ) {
+ this.$button.attr( 'href', this.href );
+ } else {
+ this.$button.removeAttr( 'href' );
+ }
+
+ return this;
+};
+
+/**
+ * Handle disable events.
+ *
+ * @private
+ * @param {boolean} disabled Element is disabled
+ */
+OO.ui.ButtonWidget.prototype.onDisable = function () {
+ this.updateHref();
+};
+
+/**
+ * Set hyperlink target.
+ *
+ * @param {string|null} target Hyperlink target, null to remove
+ */
+OO.ui.ButtonWidget.prototype.setTarget = function ( target ) {
+ target = typeof target === 'string' ? target : null;
+
+ if ( target !== this.target ) {
+ this.target = target;
+ if ( target !== null ) {
+ this.$button.attr( 'target', target );
+ } else {
+ this.$button.removeAttr( 'target' );
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Set search engine traversal hint.
+ *
+ * @param {boolean} noFollow True if search engines should avoid traversing this hyperlink
+ */
+OO.ui.ButtonWidget.prototype.setNoFollow = function ( noFollow ) {
+ noFollow = typeof noFollow === 'boolean' ? noFollow : true;
+
+ if ( noFollow !== this.noFollow ) {
+ this.noFollow = noFollow;
+ if ( noFollow ) {
+ this.$button.attr( 'rel', 'nofollow' );
+ } else {
+ this.$button.removeAttr( 'rel' );
+ }
+ }
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/CheckboxInputWidget.js b/vendor/oojs/oojs-ui/src/widgets/CheckboxInputWidget.js
new file mode 100644
index 00000000..1ac93bc5
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/CheckboxInputWidget.js
@@ -0,0 +1,110 @@
+/**
+ * CheckboxInputWidgets, like HTML checkboxes, can be selected and/or configured with a value.
+ * Note that these {@link OO.ui.InputWidget input widgets} are best laid out
+ * in {@link OO.ui.FieldLayout field layouts} that use the {@link OO.ui.FieldLayout#align inline}
+ * alignment. For more information, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * This widget can be used inside a HTML form, such as a OO.ui.FormLayout.
+ *
+ * @example
+ * // An example of selected, unselected, and disabled checkbox inputs
+ * var checkbox1=new OO.ui.CheckboxInputWidget( {
+ * value: 'a',
+ * selected: true
+ * } );
+ * var checkbox2=new OO.ui.CheckboxInputWidget( {
+ * value: 'b'
+ * } );
+ * var checkbox3=new OO.ui.CheckboxInputWidget( {
+ * value:'c',
+ * disabled: true
+ * } );
+ * // Create a fieldset layout with fields for each checkbox.
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'Checkboxes'
+ * } );
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( checkbox1, { label: 'Selected checkbox', align: 'inline' } ),
+ * new OO.ui.FieldLayout( checkbox2, { label: 'Unselected checkbox', align: 'inline' } ),
+ * new OO.ui.FieldLayout( checkbox3, { label: 'Disabled checkbox', align: 'inline' } ),
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [selected=false] Select the checkbox initially. By default, the checkbox is not selected.
+ */
+OO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.CheckboxInputWidget.super.call( this, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-checkboxInputWidget' );
+ this.setSelected( config.selected !== undefined ? config.selected : false );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ * @private
+ */
+OO.ui.CheckboxInputWidget.prototype.getInputElement = function () {
+ return $( '<input type="checkbox" />' );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
+ var widget = this;
+ if ( !this.isDisabled() ) {
+ // Allow the stack to clear so the value will be updated
+ setTimeout( function () {
+ widget.setSelected( widget.$input.prop( 'checked' ) );
+ } );
+ }
+};
+
+/**
+ * Set selection state of this checkbox.
+ *
+ * @param {boolean} state `true` for selected
+ * @chainable
+ */
+OO.ui.CheckboxInputWidget.prototype.setSelected = function ( state ) {
+ state = !!state;
+ if ( this.selected !== state ) {
+ this.selected = state;
+ this.$input.prop( 'checked', this.selected );
+ this.emit( 'change', this.selected );
+ }
+ return this;
+};
+
+/**
+ * Check if this checkbox is selected.
+ *
+ * @return {boolean} Checkbox is selected
+ */
+OO.ui.CheckboxInputWidget.prototype.isSelected = function () {
+ // Resynchronize our internal data with DOM data. Other scripts executing on the page can modify
+ // it, and we won't know unless they're kind enough to trigger a 'change' event.
+ var selected = this.$input.prop( 'checked' );
+ if ( this.selected !== selected ) {
+ this.setSelected( selected );
+ }
+ return this.selected;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ComboBoxWidget.js b/vendor/oojs/oojs-ui/src/widgets/ComboBoxWidget.js
new file mode 100644
index 00000000..346d17ee
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ComboBoxWidget.js
@@ -0,0 +1,230 @@
+/**
+ * ComboBoxWidgets combine a {@link OO.ui.TextInputWidget text input} (where a value
+ * can be entered manually) and a {@link OO.ui.MenuSelectWidget menu of options} (from which
+ * a value can be chosen instead). Users can choose options from the combo box in one of two ways:
+ *
+ * - by typing a value in the text input field. If the value exactly matches the value of a menu
+ * option, that option will appear to be selected.
+ * - by choosing a value from the menu. The value of the chosen option will then appear in the text
+ * input field.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example: A ComboBoxWidget.
+ * var comboBox = new OO.ui.ComboBoxWidget( {
+ * label: 'ComboBoxWidget',
+ * input: { value: 'Option One' },
+ * menu: {
+ * items: [
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 1',
+ * label: 'Option One'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 2',
+ * label: 'Option Two'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 3',
+ * label: 'Option Three'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 4',
+ * label: 'Option Four'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'Option 5',
+ * label: 'Option Five'
+ * } )
+ * ]
+ * }
+ * } );
+ * $( 'body' ).append( comboBox.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object} [menu] Configuration options to pass to the {@link OO.ui.MenuSelectWidget menu select widget}.
+ * @cfg {Object} [input] Configuration options to pass to the {@link OO.ui.TextInputWidget text input widget}.
+ * @cfg {jQuery} [$overlay] Render the menu into a separate layer. This configuration is useful in cases where
+ * the expanded menu is larger than its containing `<div>`. The specified overlay layer is usually on top of the
+ * containing `<div>` and has a larger area. By default, the menu uses relative positioning.
+ */
+OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.ComboBoxWidget.super.call( this, config );
+
+ // Properties (must be set before TabIndexedElement constructor call)
+ this.$indicator = this.$( '<span>' );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$indicator } ) );
+
+ // Properties
+ this.$overlay = config.$overlay || this.$element;
+ this.input = new OO.ui.TextInputWidget( $.extend(
+ {
+ indicator: 'down',
+ $indicator: this.$indicator,
+ disabled: this.isDisabled()
+ },
+ config.input
+ ) );
+ this.input.$input.eq( 0 ).attr( {
+ role: 'combobox',
+ 'aria-autocomplete': 'list'
+ } );
+ this.menu = new OO.ui.TextInputMenuSelectWidget( this.input, $.extend(
+ {
+ widget: this,
+ input: this.input,
+ disabled: this.isDisabled()
+ },
+ config.menu
+ ) );
+
+ // Events
+ this.$indicator.on( {
+ click: this.onClick.bind( this ),
+ keypress: this.onKeyPress.bind( this )
+ } );
+ this.input.connect( this, {
+ change: 'onInputChange',
+ enter: 'onInputEnter'
+ } );
+ this.menu.connect( this, {
+ choose: 'onMenuChoose',
+ add: 'onMenuItemsChange',
+ remove: 'onMenuItemsChange'
+ } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-comboBoxWidget' ).append( this.input.$element );
+ this.$overlay.append( this.menu.$element );
+ this.onMenuItemsChange();
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ComboBoxWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.ComboBoxWidget, OO.ui.TabIndexedElement );
+
+/* Methods */
+
+/**
+ * Get the combobox's menu.
+ * @return {OO.ui.TextInputMenuSelectWidget} Menu widget
+ */
+OO.ui.ComboBoxWidget.prototype.getMenu = function () {
+ return this.menu;
+};
+
+/**
+ * Handle input change events.
+ *
+ * @private
+ * @param {string} value New value
+ */
+OO.ui.ComboBoxWidget.prototype.onInputChange = function ( value ) {
+ var match = this.menu.getItemFromData( value );
+
+ this.menu.selectItem( match );
+ if ( this.menu.getHighlightedItem() ) {
+ this.menu.highlightItem( match );
+ }
+
+ if ( !this.isDisabled() ) {
+ this.menu.toggle( true );
+ }
+};
+
+/**
+ * Handle mouse click events.
+ *
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.ComboBoxWidget.prototype.onClick = function ( e ) {
+ if ( !this.isDisabled() && e.which === 1 ) {
+ this.menu.toggle();
+ this.input.$input[ 0 ].focus();
+ }
+ return false;
+};
+
+/**
+ * Handle key press events.
+ *
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.ComboBoxWidget.prototype.onKeyPress = function ( e ) {
+ if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+ this.menu.toggle();
+ this.input.$input[ 0 ].focus();
+ return false;
+ }
+};
+
+/**
+ * Handle input enter events.
+ *
+ * @private
+ */
+OO.ui.ComboBoxWidget.prototype.onInputEnter = function () {
+ if ( !this.isDisabled() ) {
+ this.menu.toggle( false );
+ }
+};
+
+/**
+ * Handle menu choose events.
+ *
+ * @private
+ * @param {OO.ui.OptionWidget} item Chosen item
+ */
+OO.ui.ComboBoxWidget.prototype.onMenuChoose = function ( item ) {
+ this.input.setValue( item.getData() );
+};
+
+/**
+ * Handle menu item change events.
+ *
+ * @private
+ */
+OO.ui.ComboBoxWidget.prototype.onMenuItemsChange = function () {
+ var match = this.menu.getItemFromData( this.input.getValue() );
+ this.menu.selectItem( match );
+ if ( this.menu.getHighlightedItem() ) {
+ this.menu.highlightItem( match );
+ }
+ this.$element.toggleClass( 'oo-ui-comboBoxWidget-empty', this.menu.isEmpty() );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ComboBoxWidget.prototype.setDisabled = function ( disabled ) {
+ // Parent method
+ OO.ui.ComboBoxWidget.super.prototype.setDisabled.call( this, disabled );
+
+ if ( this.input ) {
+ this.input.setDisabled( this.isDisabled() );
+ }
+ if ( this.menu ) {
+ this.menu.setDisabled( this.isDisabled() );
+ }
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/DecoratedOptionWidget.js b/vendor/oojs/oojs-ui/src/widgets/DecoratedOptionWidget.js
new file mode 100644
index 00000000..e39ebcad
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/DecoratedOptionWidget.js
@@ -0,0 +1,55 @@
+/**
+ * DecoratedOptionWidgets are {@link OO.ui.OptionWidget options} that can be configured
+ * with an {@link OO.ui.IconElement icon} and/or {@link OO.ui.IndicatorElement indicator}.
+ * This class is used with OO.ui.SelectWidget to create a selection of mutually exclusive
+ * options. For more information about options and selects, please see the
+ * [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Decorated options in a select widget
+ * var select = new OO.ui.SelectWidget( {
+ * items: [
+ * new OO.ui.DecoratedOptionWidget( {
+ * data: 'a',
+ * label: 'Option with icon',
+ * icon: 'help'
+ * } ),
+ * new OO.ui.DecoratedOptionWidget( {
+ * data: 'b',
+ * label: 'Option with indicator',
+ * indicator: 'next'
+ * } )
+ * ]
+ * } );
+ * $( 'body' ).append( select.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.DecoratedOptionWidget = function OoUiDecoratedOptionWidget( config ) {
+ // Parent constructor
+ OO.ui.DecoratedOptionWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-decoratedOptionWidget' )
+ .prepend( this.$icon )
+ .append( this.$indicator );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.DecoratedOptionWidget, OO.ui.OptionWidget );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatorElement );
diff --git a/vendor/oojs/oojs-ui/src/widgets/DropdownInputWidget.js b/vendor/oojs/oojs-ui/src/widgets/DropdownInputWidget.js
new file mode 100644
index 00000000..d4a5ce2a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/DropdownInputWidget.js
@@ -0,0 +1,137 @@
+/**
+ * DropdownInputWidget is a {@link OO.ui.DropdownWidget DropdownWidget} intended to be used
+ * within a HTML form, such as a OO.ui.FormLayout. The selected value is synchronized with the value
+ * of a hidden HTML `input` tag. Please see the [OOjs UI documentation on MediaWiki][1] for
+ * more information about input widgets.
+ *
+ * @example
+ * // Example: A DropdownInputWidget with three options
+ * var dropDown = new OO.ui.DropdownInputWidget( {
+ * label: 'Dropdown menu: Select a menu option',
+ * options: [
+ * { data: 'a', label: 'First' } ,
+ * { data: 'b', label: 'Second'} ,
+ * { data: 'c', label: 'Third' }
+ * ]
+ * } );
+ * $( 'body' ).append( dropDown.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`
+ */
+OO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties (must be done before parent constructor which calls #setDisabled)
+ this.dropdownWidget = new OO.ui.DropdownWidget();
+
+ // Parent constructor
+ OO.ui.DropdownInputWidget.super.call( this, config );
+
+ // Events
+ this.dropdownWidget.getMenu().connect( this, { select: 'onMenuSelect' } );
+
+ // Initialization
+ this.setOptions( config.options || [] );
+ this.$element
+ .addClass( 'oo-ui-dropdownInputWidget' )
+ .append( this.dropdownWidget.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.DropdownInputWidget, OO.ui.InputWidget );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ * @private
+ */
+OO.ui.DropdownInputWidget.prototype.getInputElement = function () {
+ return $( '<input type="hidden">' );
+};
+
+/**
+ * Handles menu select events.
+ *
+ * @private
+ * @param {OO.ui.MenuOptionWidget} item Selected menu item
+ */
+OO.ui.DropdownInputWidget.prototype.onMenuSelect = function ( item ) {
+ this.setValue( item.getData() );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {
+ this.dropdownWidget.getMenu().selectItemByData( value );
+ OO.ui.DropdownInputWidget.super.prototype.setValue.call( this, value );
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.DropdownInputWidget.prototype.setDisabled = function ( state ) {
+ this.dropdownWidget.setDisabled( state );
+ OO.ui.DropdownInputWidget.super.prototype.setDisabled.call( this, state );
+ return this;
+};
+
+/**
+ * Set the options available for this input.
+ *
+ * @param {Object[]} options Array of menu options in the format `{ data: …, label: … }`
+ * @chainable
+ */
+OO.ui.DropdownInputWidget.prototype.setOptions = function ( options ) {
+ var value = this.getValue();
+
+ // Rebuild the dropdown menu
+ this.dropdownWidget.getMenu()
+ .clearItems()
+ .addItems( options.map( function ( opt ) {
+ return new OO.ui.MenuOptionWidget( {
+ data: opt.data,
+ label: opt.label !== undefined ? opt.label : opt.data
+ } );
+ } ) );
+
+ // Restore the previous value, or reset to something sensible
+ if ( this.dropdownWidget.getMenu().getItemFromData( value ) ) {
+ // Previous value is still available, ensure consistency with the dropdown
+ this.setValue( value );
+ } else {
+ // No longer valid, reset
+ if ( options.length ) {
+ this.setValue( options[ 0 ].data );
+ }
+ }
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.DropdownInputWidget.prototype.focus = function () {
+ this.dropdownWidget.getMenu().toggle( true );
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.DropdownInputWidget.prototype.blur = function () {
+ this.dropdownWidget.getMenu().toggle( false );
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/DropdownWidget.js b/vendor/oojs/oojs-ui/src/widgets/DropdownWidget.js
new file mode 100644
index 00000000..f6c592e8
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/DropdownWidget.js
@@ -0,0 +1,149 @@
+/**
+ * DropdownWidgets are not menus themselves, rather they contain a menu of options created with
+ * OO.ui.MenuOptionWidget. The DropdownWidget takes care of opening and displaying the menu so that
+ * users can interact with it.
+ *
+ * @example
+ * // Example: A DropdownWidget with a menu that contains three options
+ * var dropDown = new OO.ui.DropdownWidget( {
+ * label: 'Dropdown menu: Select a menu option',
+ * menu: {
+ * items: [
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'a',
+ * label: 'First'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'b',
+ * label: 'Second'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'c',
+ * label: 'Third'
+ * } )
+ * ]
+ * }
+ * } );
+ *
+ * $( 'body' ).append( dropDown.$element );
+ *
+ * For more information, please see the [OOjs UI documentation on MediaWiki] [1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object} [menu] Configuration options to pass to menu widget
+ */
+OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
+ // Configuration initialization
+ config = $.extend( { indicator: 'down' }, config );
+
+ // Parent constructor
+ OO.ui.DropdownWidget.super.call( this, config );
+
+ // Properties (must be set before TabIndexedElement constructor call)
+ this.$handle = this.$( '<span>' );
+
+ // Mixin constructors
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
+
+ // Properties
+ this.menu = new OO.ui.MenuSelectWidget( $.extend( { widget: this }, config.menu ) );
+
+ // Events
+ this.$handle.on( {
+ click: this.onClick.bind( this ),
+ keypress: this.onKeyPress.bind( this )
+ } );
+ this.menu.connect( this, { select: 'onMenuSelect' } );
+
+ // Initialization
+ this.$handle
+ .addClass( 'oo-ui-dropdownWidget-handle' )
+ .append( this.$icon, this.$label, this.$indicator );
+ this.$element
+ .addClass( 'oo-ui-dropdownWidget' )
+ .append( this.$handle, this.menu.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.DropdownWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.DropdownWidget, OO.ui.TabIndexedElement );
+
+/* Methods */
+
+/**
+ * Get the menu.
+ *
+ * @return {OO.ui.MenuSelectWidget} Menu of widget
+ */
+OO.ui.DropdownWidget.prototype.getMenu = function () {
+ return this.menu;
+};
+
+/**
+ * Handles menu select events.
+ *
+ * @private
+ * @param {OO.ui.MenuOptionWidget} item Selected menu item
+ */
+OO.ui.DropdownWidget.prototype.onMenuSelect = function ( item ) {
+ var selectedLabel;
+
+ if ( !item ) {
+ return;
+ }
+
+ selectedLabel = item.getLabel();
+
+ // If the label is a DOM element, clone it, because setLabel will append() it
+ if ( selectedLabel instanceof jQuery ) {
+ selectedLabel = selectedLabel.clone();
+ }
+
+ this.setLabel( selectedLabel );
+};
+
+/**
+ * Handle mouse click events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.DropdownWidget.prototype.onClick = function ( e ) {
+ if ( !this.isDisabled() && e.which === 1 ) {
+ this.menu.toggle();
+ }
+ return false;
+};
+
+/**
+ * Handle key press events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.DropdownWidget.prototype.onKeyPress = function ( e ) {
+ if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+ this.menu.toggle();
+ return false;
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/GroupWidget.js b/vendor/oojs/oojs-ui/src/widgets/GroupWidget.js
new file mode 100644
index 00000000..7d9be905
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/GroupWidget.js
@@ -0,0 +1,48 @@
+/**
+ * Mixin for OO.ui.Widget subclasses to provide OO.ui.GroupElement.
+ *
+ * Use together with OO.ui.ItemWidget to make disabled state inheritable.
+ *
+ * @private
+ * @abstract
+ * @class
+ * @extends OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.GroupWidget = function OoUiGroupWidget( config ) {
+ // Parent constructor
+ OO.ui.GroupWidget.super.call( this, config );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.GroupWidget, OO.ui.GroupElement );
+
+/* Methods */
+
+/**
+ * Set the disabled state of the widget.
+ *
+ * This will also update the disabled state of child widgets.
+ *
+ * @param {boolean} disabled Disable widget
+ * @chainable
+ */
+OO.ui.GroupWidget.prototype.setDisabled = function ( disabled ) {
+ var i, len;
+
+ // Parent method
+ // Note: Calling #setDisabled this way assumes this is mixed into an OO.ui.Widget
+ OO.ui.Widget.prototype.setDisabled.call( this, disabled );
+
+ // During construction, #setDisabled is called before the OO.ui.GroupElement constructor
+ if ( this.items ) {
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ this.items[ i ].updateDisabled();
+ }
+ }
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/IconWidget.js b/vendor/oojs/oojs-ui/src/widgets/IconWidget.js
new file mode 100644
index 00000000..66ea3871
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/IconWidget.js
@@ -0,0 +1,54 @@
+/**
+ * IconWidget is a generic widget for {@link OO.ui.IconElement icons}. In general, IconWidgets should be used with OO.ui.LabelWidget,
+ * which creates a label that identifies the icon’s function. See the [OOjs UI documentation on MediaWiki] [1]
+ * for a list of icons included in the library.
+ *
+ * @example
+ * // An icon widget with a label
+ * var myIcon = new OO.ui.IconWidget( {
+ * icon: 'help',
+ * iconTitle: 'Help'
+ * } );
+ * // Create a label.
+ * var iconLabel = new OO.ui.LabelWidget( {
+ * label: 'Help'
+ * } );
+ * $( 'body' ).append( myIcon.$element, iconLabel.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Icons
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IconWidget = function OoUiIconWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.IconWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+ OO.ui.FlaggedElement.call( this, $.extend( {}, config, { $flagged: this.$element } ) );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-iconWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.FlaggedElement );
+
+/* Static Properties */
+
+OO.ui.IconWidget.static.tagName = 'span';
diff --git a/vendor/oojs/oojs-ui/src/widgets/IndicatorWidget.js b/vendor/oojs/oojs-ui/src/widgets/IndicatorWidget.js
new file mode 100644
index 00000000..e6ecddf0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/IndicatorWidget.js
@@ -0,0 +1,52 @@
+/**
+ * IndicatorWidgets create indicators, which are small graphics that are generally used to draw
+ * attention to the status of an item or to clarify the function of a control. For a list of
+ * indicators included in the library, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example of an indicator widget
+ * var indicator1 = new OO.ui.IndicatorWidget( {
+ * indicator: 'alert'
+ * } );
+ *
+ * // Create a fieldset layout to add a label
+ * var fieldset = new OO.ui.FieldsetLayout();
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( indicator1, { label: 'An alert indicator:' } )
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Icons,_Indicators,_and_Labels#Indicators
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.TitledElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.IndicatorWidget = function OoUiIndicatorWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.IndicatorWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-indicatorWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
+
+/* Static Properties */
+
+OO.ui.IndicatorWidget.static.tagName = 'span';
diff --git a/vendor/oojs/oojs-ui/src/widgets/InputWidget.js b/vendor/oojs/oojs-ui/src/widgets/InputWidget.js
new file mode 100644
index 00000000..de790bac
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/InputWidget.js
@@ -0,0 +1,207 @@
+/**
+ * InputWidget is the base class for all input widgets, which
+ * include {@link OO.ui.TextInputWidget text inputs}, {@link OO.ui.CheckboxInputWidget checkbox inputs},
+ * {@link OO.ui.RadioInputWidget radio inputs}, and {@link OO.ui.ButtonInputWidget button inputs}.
+ * See the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [name=''] The value of the input’s HTML `name` attribute.
+ * @cfg {string} [value=''] The value of the input.
+ * @cfg {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input
+ * before it is accepted.
+ */
+OO.ui.InputWidget = function OoUiInputWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.InputWidget.super.call( this, config );
+
+ // Properties
+ this.$input = this.getInputElement( config );
+ this.value = '';
+ this.inputFilter = config.inputFilter;
+
+ // Mixin constructors
+ OO.ui.FlaggedElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );
+
+ // Events
+ this.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );
+
+ // Initialization
+ this.$input
+ .attr( 'name', config.name )
+ .prop( 'disabled', this.isDisabled() );
+ this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input, $( '<span>' ) );
+ this.setValue( config.value );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.InputWidget, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.InputWidget, OO.ui.TabIndexedElement );
+
+/* Events */
+
+/**
+ * @event change
+ *
+ * A change event is emitted when the value of the input changes.
+ *
+ * @param {string} value
+ */
+
+/* Methods */
+
+/**
+ * Get input element.
+ *
+ * Subclasses of OO.ui.InputWidget use the `config` parameter to produce different elements in
+ * different circumstances. The element must have a `value` property (like form elements).
+ *
+ * @private
+ * @param {Object} config Configuration options
+ * @return {jQuery} Input element
+ */
+OO.ui.InputWidget.prototype.getInputElement = function () {
+ return $( '<input>' );
+};
+
+/**
+ * Handle potentially value-changing events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key down, mouse up, cut, paste, change, input, or select event
+ */
+OO.ui.InputWidget.prototype.onEdit = function () {
+ var widget = this;
+ if ( !this.isDisabled() ) {
+ // Allow the stack to clear so the value will be updated
+ setTimeout( function () {
+ widget.setValue( widget.$input.val() );
+ } );
+ }
+};
+
+/**
+ * Get the value of the input.
+ *
+ * @return {string} Input value
+ */
+OO.ui.InputWidget.prototype.getValue = function () {
+ // Resynchronize our internal data with DOM data. Other scripts executing on the page can modify
+ // it, and we won't know unless they're kind enough to trigger a 'change' event.
+ var value = this.$input.val();
+ if ( this.value !== value ) {
+ this.setValue( value );
+ }
+ return this.value;
+};
+
+/**
+ * Set the direction of the input, either RTL (right-to-left) or LTR (left-to-right).
+ *
+ * @param {boolean} isRTL
+ * Direction is right-to-left
+ */
+OO.ui.InputWidget.prototype.setRTL = function ( isRTL ) {
+ this.$input.prop( 'dir', isRTL ? 'rtl' : 'ltr' );
+};
+
+/**
+ * Set the value of the input.
+ *
+ * @param {string} value New value
+ * @fires change
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.setValue = function ( value ) {
+ value = this.cleanUpValue( value );
+ // Update the DOM if it has changed. Note that with cleanUpValue, it
+ // is possible for the DOM value to change without this.value changing.
+ if ( this.$input.val() !== value ) {
+ this.$input.val( value );
+ }
+ if ( this.value !== value ) {
+ this.value = value;
+ this.emit( 'change', this.value );
+ }
+ return this;
+};
+
+/**
+ * Clean up incoming value.
+ *
+ * Ensures value is a string, and converts undefined and null to empty string.
+ *
+ * @private
+ * @param {string} value Original value
+ * @return {string} Cleaned up value
+ */
+OO.ui.InputWidget.prototype.cleanUpValue = function ( value ) {
+ if ( value === undefined || value === null ) {
+ return '';
+ } else if ( this.inputFilter ) {
+ return this.inputFilter( String( value ) );
+ } else {
+ return String( value );
+ }
+};
+
+/**
+ * Simulate the behavior of clicking on a label bound to this input. This method is only called by
+ * {@link OO.ui.LabelWidget LabelWidget} and {@link OO.ui.FieldLayout FieldLayout}. It should not be
+ * called directly.
+ */
+OO.ui.InputWidget.prototype.simulateLabelClick = function () {
+ if ( !this.isDisabled() ) {
+ if ( this.$input.is( ':checkbox, :radio' ) ) {
+ this.$input.click();
+ }
+ if ( this.$input.is( ':input' ) ) {
+ this.$input[ 0 ].focus();
+ }
+ }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.InputWidget.prototype.setDisabled = function ( state ) {
+ OO.ui.InputWidget.super.prototype.setDisabled.call( this, state );
+ if ( this.$input ) {
+ this.$input.prop( 'disabled', this.isDisabled() );
+ }
+ return this;
+};
+
+/**
+ * Focus the input.
+ *
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.focus = function () {
+ this.$input[ 0 ].focus();
+ return this;
+};
+
+/**
+ * Blur the input.
+ *
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.blur = function () {
+ this.$input[ 0 ].blur();
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ItemWidget.js b/vendor/oojs/oojs-ui/src/widgets/ItemWidget.js
new file mode 100644
index 00000000..292514f4
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ItemWidget.js
@@ -0,0 +1,48 @@
+/**
+ * Mixin for widgets used as items in widgets that inherit OO.ui.GroupWidget.
+ *
+ * Item widgets have a reference to a OO.ui.GroupWidget while they are attached to the group. This
+ * allows bidirectional communication.
+ *
+ * Use together with OO.ui.GroupWidget to make disabled state inheritable.
+ *
+ * @private
+ * @abstract
+ * @class
+ *
+ * @constructor
+ */
+OO.ui.ItemWidget = function OoUiItemWidget() {
+ //
+};
+
+/* Methods */
+
+/**
+ * Check if widget is disabled.
+ *
+ * Checks parent if present, making disabled state inheritable.
+ *
+ * @return {boolean} Widget is disabled
+ */
+OO.ui.ItemWidget.prototype.isDisabled = function () {
+ return this.disabled ||
+ ( this.elementGroup instanceof OO.ui.Widget && this.elementGroup.isDisabled() );
+};
+
+/**
+ * Set group element is in.
+ *
+ * @param {OO.ui.GroupElement|null} group Group element, null if none
+ * @chainable
+ */
+OO.ui.ItemWidget.prototype.setElementGroup = function ( group ) {
+ // Parent method
+ // Note: Calling #setElementGroup this way assumes this is mixed into an OO.ui.Element
+ OO.ui.Element.prototype.setElementGroup.call( this, group );
+
+ // Initialize item disabled states
+ this.updateDisabled();
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/LabelWidget.js b/vendor/oojs/oojs-ui/src/widgets/LabelWidget.js
new file mode 100644
index 00000000..e00990bb
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/LabelWidget.js
@@ -0,0 +1,84 @@
+/**
+ * LabelWidgets help identify the function of interface elements. Each LabelWidget can
+ * be configured with a `label` option that is set to a string, a label node, or a function:
+ *
+ * - String: a plaintext string
+ * - jQuery selection: a jQuery selection, used for anything other than a plaintext label, e.g., a
+ * label that includes a link or special styling, such as a gray color or additional graphical elements.
+ * - Function: a function that will produce a string in the future. Functions are used
+ * in cases where the value of the label is not currently defined.
+ *
+ * In addition, the LabelWidget can be associated with an {@link OO.ui.InputWidget input widget}, which
+ * will come into focus when the label is clicked.
+ *
+ * @example
+ * // Examples of LabelWidgets
+ * var label1 = new OO.ui.LabelWidget( {
+ * label: 'plaintext label'
+ * } );
+ * var label2 = new OO.ui.LabelWidget( {
+ * label: $( '<a href="default.html">jQuery label</a>' )
+ * } );
+ * // Create a fieldset layout with fields for each example
+ * var fieldset = new OO.ui.FieldsetLayout();
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( label1 ),
+ * new OO.ui.FieldLayout( label2 )
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.LabelElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.InputWidget} [input] {@link OO.ui.InputWidget Input widget} that uses the label.
+ * Clicking the label will focus the specified input field.
+ */
+OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.LabelWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.LabelElement.call( this, $.extend( {}, config, { $label: this.$element } ) );
+ OO.ui.TitledElement.call( this, config );
+
+ // Properties
+ this.input = config.input;
+
+ // Events
+ if ( this.input instanceof OO.ui.InputWidget ) {
+ this.$element.on( 'click', this.onClick.bind( this ) );
+ }
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-labelWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.LabelWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.LabelWidget, OO.ui.TitledElement );
+
+/* Static Properties */
+
+OO.ui.LabelWidget.static.tagName = 'span';
+
+/* Methods */
+
+/**
+ * Handles label mouse click events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.LabelWidget.prototype.onClick = function () {
+ this.input.simulateLabelClick();
+ return false;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/MenuOptionWidget.js b/vendor/oojs/oojs-ui/src/widgets/MenuOptionWidget.js
new file mode 100644
index 00000000..cc620d97
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/MenuOptionWidget.js
@@ -0,0 +1,33 @@
+/**
+ * MenuOptionWidget is an option widget that looks like a menu item. The class is used with
+ * OO.ui.MenuSelectWidget to create a menu of mutually exclusive options. Please see
+ * the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.DecoratedOptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.MenuOptionWidget = function OoUiMenuOptionWidget( config ) {
+ // Configuration initialization
+ config = $.extend( { icon: 'check' }, config );
+
+ // Parent constructor
+ OO.ui.MenuOptionWidget.super.call( this, config );
+
+ // Initialization
+ this.$element
+ .attr( 'role', 'menuitem' )
+ .addClass( 'oo-ui-menuOptionWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.MenuOptionWidget, OO.ui.DecoratedOptionWidget );
+
+/* Static Properties */
+
+OO.ui.MenuOptionWidget.static.scrollIntoViewOnSelect = true;
diff --git a/vendor/oojs/oojs-ui/src/widgets/MenuSectionOptionWidget.js b/vendor/oojs/oojs-ui/src/widgets/MenuSectionOptionWidget.js
new file mode 100644
index 00000000..054df7fc
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/MenuSectionOptionWidget.js
@@ -0,0 +1,55 @@
+/**
+ * MenuSectionOptionWidgets are used inside {@link OO.ui.MenuSelectWidget menu select widgets} to group one or more related
+ * {@link OO.ui.MenuOptionWidget menu options}. MenuSectionOptionWidgets cannot be highlighted or selected.
+ *
+ * @example
+ * var myDropdown = new OO.ui.DropdownWidget( {
+ * menu: {
+ * items: [
+ * new OO.ui.MenuSectionOptionWidget( {
+ * label: 'Dogs'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'corgi',
+ * label: 'Welsh Corgi'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'poodle',
+ * label: 'Standard Poodle'
+ * } ),
+ * new OO.ui.MenuSectionOptionWidget( {
+ * label: 'Cats'
+ * } ),
+ * new OO.ui.MenuOptionWidget( {
+ * data: 'lion',
+ * label: 'Lion'
+ * } )
+ * ]
+ * }
+ * } );
+ * $( 'body' ).append( myDropdown.$element );
+ *
+ *
+ * @class
+ * @extends OO.ui.DecoratedOptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.MenuSectionOptionWidget = function OoUiMenuSectionOptionWidget( config ) {
+ // Parent constructor
+ OO.ui.MenuSectionOptionWidget.super.call( this, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-menuSectionOptionWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.MenuSectionOptionWidget, OO.ui.DecoratedOptionWidget );
+
+/* Static Properties */
+
+OO.ui.MenuSectionOptionWidget.static.selectable = false;
+
+OO.ui.MenuSectionOptionWidget.static.highlightable = false;
diff --git a/vendor/oojs/oojs-ui/src/widgets/MenuSelectWidget.js b/vendor/oojs/oojs-ui/src/widgets/MenuSelectWidget.js
new file mode 100644
index 00000000..a1755edd
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/MenuSelectWidget.js
@@ -0,0 +1,254 @@
+/**
+ * MenuSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains options and
+ * is used together with OO.ui.MenuOptionWidget. It is designed be used as part of another widget.
+ * See {@link OO.ui.DropdownWidget DropdownWidget}, {@link OO.ui.ComboBoxWidget ComboBoxWidget},
+ * and {@link OO.ui.LookupElement LookupElement} for examples of widgets that contain menus.
+ * MenuSelectWidgets themselves are not instantiated directly, rather subclassed
+ * and customized to be opened, closed, and displayed as needed.
+ *
+ * By default, menus are clipped to the visible viewport and are not visible when a user presses the
+ * mouse outside the menu.
+ *
+ * Menus also have support for keyboard interaction:
+ *
+ * - Enter/Return key: choose and select a menu option
+ * - Up-arrow key: highlight the previous menu option
+ * - Down-arrow key: highlight the next menu option
+ * - Esc key: hide the menu
+ *
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.ClippableElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.TextInputWidget} [input] Text input used to implement option highlighting for menu items that match
+ * the text the user types. This config is used by {@link OO.ui.ComboBoxWidget ComboBoxWidget}
+ * and {@link OO.ui.LookupElement LookupElement}
+ * @cfg {OO.ui.Widget} [widget] Widget associated with the menu’s active state. If the user clicks the mouse
+ * anywhere on the page outside of this widget, the menu is hidden.
+ * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.
+ */
+OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.MenuSelectWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
+
+ // Properties
+ this.newItems = null;
+ this.autoHide = config.autoHide === undefined || !!config.autoHide;
+ this.$input = config.input ? config.input.$input : null;
+ this.$widget = config.widget ? config.widget.$element : null;
+ this.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-menuSelectWidget' )
+ .attr( 'role', 'menu' );
+
+ // Initially hidden - using #toggle may cause errors if subclasses override toggle with methods
+ // that reference properties not initialized at that time of parent class construction
+ // TODO: Find a better way to handle post-constructor setup
+ this.visible = false;
+ this.$element.addClass( 'oo-ui-element-hidden' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.MenuSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.ClippableElement );
+
+/* Methods */
+
+/**
+ * Handles document mouse down events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.MenuSelectWidget.prototype.onDocumentMouseDown = function ( e ) {
+ if (
+ !OO.ui.contains( this.$element[ 0 ], e.target, true ) &&
+ ( !this.$widget || !OO.ui.contains( this.$widget[ 0 ], e.target, true ) )
+ ) {
+ this.toggle( false );
+ }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
+ var currentItem = this.getHighlightedItem() || this.getSelectedItem();
+
+ if ( !this.isDisabled() && this.isVisible() ) {
+ switch ( e.keyCode ) {
+ case OO.ui.Keys.LEFT:
+ case OO.ui.Keys.RIGHT:
+ // Do nothing if a text field is associated, arrow keys will be handled natively
+ if ( !this.$input ) {
+ OO.ui.MenuSelectWidget.super.prototype.onKeyDown.call( this, e );
+ }
+ break;
+ case OO.ui.Keys.ESCAPE:
+ case OO.ui.Keys.TAB:
+ if ( currentItem ) {
+ currentItem.setHighlighted( false );
+ }
+ this.toggle( false );
+ // Don't prevent tabbing away, prevent defocusing
+ if ( e.keyCode === OO.ui.Keys.ESCAPE ) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ break;
+ default:
+ OO.ui.MenuSelectWidget.super.prototype.onKeyDown.call( this, e );
+ return;
+ }
+ }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuSelectWidget.prototype.bindKeyDownListener = function () {
+ if ( this.$input ) {
+ this.$input.on( 'keydown', this.onKeyDownHandler );
+ } else {
+ OO.ui.MenuSelectWidget.super.prototype.bindKeyDownListener.call( this );
+ }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuSelectWidget.prototype.unbindKeyDownListener = function () {
+ if ( this.$input ) {
+ this.$input.off( 'keydown', this.onKeyDownHandler );
+ } else {
+ OO.ui.MenuSelectWidget.super.prototype.unbindKeyDownListener.call( this );
+ }
+};
+
+/**
+ * Choose an item.
+ *
+ * When a user chooses an item, the menu is closed.
+ *
+ * Note that ‘choose’ should never be modified programmatically. A user can choose an option with the keyboard
+ * or mouse and it becomes selected. To select an item programmatically, use the #selectItem method.
+ * @param {OO.ui.OptionWidget} item Item to choose
+ * @chainable
+ */
+OO.ui.MenuSelectWidget.prototype.chooseItem = function ( item ) {
+ OO.ui.MenuSelectWidget.super.prototype.chooseItem.call( this, item );
+ this.toggle( false );
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuSelectWidget.prototype.addItems = function ( items, index ) {
+ var i, len, item;
+
+ // Parent method
+ OO.ui.MenuSelectWidget.super.prototype.addItems.call( this, items, index );
+
+ // Auto-initialize
+ if ( !this.newItems ) {
+ this.newItems = [];
+ }
+
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ item = items[ i ];
+ if ( this.isVisible() ) {
+ // Defer fitting label until item has been attached
+ item.fitLabel();
+ } else {
+ this.newItems.push( item );
+ }
+ }
+
+ // Reevaluate clipping
+ this.clip();
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuSelectWidget.prototype.removeItems = function ( items ) {
+ // Parent method
+ OO.ui.MenuSelectWidget.super.prototype.removeItems.call( this, items );
+
+ // Reevaluate clipping
+ this.clip();
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuSelectWidget.prototype.clearItems = function () {
+ // Parent method
+ OO.ui.MenuSelectWidget.super.prototype.clearItems.call( this );
+
+ // Reevaluate clipping
+ this.clip();
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
+ visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
+
+ var i, len,
+ change = visible !== this.isVisible();
+
+ // Parent method
+ OO.ui.MenuSelectWidget.super.prototype.toggle.call( this, visible );
+
+ if ( change ) {
+ if ( visible ) {
+ this.bindKeyDownListener();
+
+ if ( this.newItems && this.newItems.length ) {
+ for ( i = 0, len = this.newItems.length; i < len; i++ ) {
+ this.newItems[ i ].fitLabel();
+ }
+ this.newItems = null;
+ }
+ this.toggleClipping( true );
+
+ // Auto-hide
+ if ( this.autoHide ) {
+ this.getElementDocument().addEventListener(
+ 'mousedown', this.onDocumentMouseDownHandler, true
+ );
+ }
+ } else {
+ this.unbindKeyDownListener();
+ this.getElementDocument().removeEventListener(
+ 'mousedown', this.onDocumentMouseDownHandler, true
+ );
+ this.toggleClipping( false );
+ }
+ }
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/OptionWidget.js b/vendor/oojs/oojs-ui/src/widgets/OptionWidget.js
new file mode 100644
index 00000000..0bc2486e
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/OptionWidget.js
@@ -0,0 +1,177 @@
+/**
+ * OptionWidgets are special elements that can be selected and configured with data. The
+ * data is often unique for each option, but it does not have to be. OptionWidgets are used
+ * with OO.ui.SelectWidget to create a selection of mutually exclusive options. For more information
+ * and examples, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.FlaggedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.OptionWidget = function OoUiOptionWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.OptionWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.ItemWidget.call( this );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.FlaggedElement.call( this, config );
+
+ // Properties
+ this.selected = false;
+ this.highlighted = false;
+ this.pressed = false;
+
+ // Initialization
+ this.$element
+ .data( 'oo-ui-optionWidget', this )
+ .attr( 'role', 'option' )
+ .addClass( 'oo-ui-optionWidget' )
+ .append( this.$label );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.OptionWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.ItemWidget );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.FlaggedElement );
+
+/* Static Properties */
+
+OO.ui.OptionWidget.static.selectable = true;
+
+OO.ui.OptionWidget.static.highlightable = true;
+
+OO.ui.OptionWidget.static.pressable = true;
+
+OO.ui.OptionWidget.static.scrollIntoViewOnSelect = false;
+
+/* Methods */
+
+/**
+ * Check if the option can be selected.
+ *
+ * @return {boolean} Item is selectable
+ */
+OO.ui.OptionWidget.prototype.isSelectable = function () {
+ return this.constructor.static.selectable && !this.isDisabled();
+};
+
+/**
+ * Check if the option can be highlighted. A highlight indicates that the option
+ * may be selected when a user presses enter or clicks. Disabled items cannot
+ * be highlighted.
+ *
+ * @return {boolean} Item is highlightable
+ */
+OO.ui.OptionWidget.prototype.isHighlightable = function () {
+ return this.constructor.static.highlightable && !this.isDisabled();
+};
+
+/**
+ * Check if the option can be pressed. The pressed state occurs when a user mouses
+ * down on an item, but has not yet let go of the mouse.
+ *
+ * @return {boolean} Item is pressable
+ */
+OO.ui.OptionWidget.prototype.isPressable = function () {
+ return this.constructor.static.pressable && !this.isDisabled();
+};
+
+/**
+ * Check if the option is selected.
+ *
+ * @return {boolean} Item is selected
+ */
+OO.ui.OptionWidget.prototype.isSelected = function () {
+ return this.selected;
+};
+
+/**
+ * Check if the option is highlighted. A highlight indicates that the
+ * item may be selected when a user presses enter or clicks.
+ *
+ * @return {boolean} Item is highlighted
+ */
+OO.ui.OptionWidget.prototype.isHighlighted = function () {
+ return this.highlighted;
+};
+
+/**
+ * Check if the option is pressed. The pressed state occurs when a user mouses
+ * down on an item, but has not yet let go of the mouse. The item may appear
+ * selected, but it will not be selected until the user releases the mouse.
+ *
+ * @return {boolean} Item is pressed
+ */
+OO.ui.OptionWidget.prototype.isPressed = function () {
+ return this.pressed;
+};
+
+/**
+ * Set the option’s selected state. In general, all modifications to the selection
+ * should be handled by the SelectWidget’s {@link OO.ui.SelectWidget#selectItem selectItem( [item] )}
+ * method instead of this method.
+ *
+ * @param {boolean} [state=false] Select option
+ * @chainable
+ */
+OO.ui.OptionWidget.prototype.setSelected = function ( state ) {
+ if ( this.constructor.static.selectable ) {
+ this.selected = !!state;
+ this.$element
+ .toggleClass( 'oo-ui-optionWidget-selected', state )
+ .attr( 'aria-selected', state.toString() );
+ if ( state && this.constructor.static.scrollIntoViewOnSelect ) {
+ this.scrollElementIntoView();
+ }
+ this.updateThemeClasses();
+ }
+ return this;
+};
+
+/**
+ * Set the option’s highlighted state. In general, all programmatic
+ * modifications to the highlight should be handled by the
+ * SelectWidget’s {@link OO.ui.SelectWidget#highlightItem highlightItem( [item] )}
+ * method instead of this method.
+ *
+ * @param {boolean} [state=false] Highlight option
+ * @chainable
+ */
+OO.ui.OptionWidget.prototype.setHighlighted = function ( state ) {
+ if ( this.constructor.static.highlightable ) {
+ this.highlighted = !!state;
+ this.$element.toggleClass( 'oo-ui-optionWidget-highlighted', state );
+ this.updateThemeClasses();
+ }
+ return this;
+};
+
+/**
+ * Set the option’s pressed state. In general, all
+ * programmatic modifications to the pressed state should be handled by the
+ * SelectWidget’s {@link OO.ui.SelectWidget#pressItem pressItem( [item] )}
+ * method instead of this method.
+ *
+ * @param {boolean} [state=false] Press option
+ * @chainable
+ */
+OO.ui.OptionWidget.prototype.setPressed = function ( state ) {
+ if ( this.constructor.static.pressable ) {
+ this.pressed = !!state;
+ this.$element.toggleClass( 'oo-ui-optionWidget-pressed', state );
+ this.updateThemeClasses();
+ }
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/OutlineControlsWidget.js b/vendor/oojs/oojs-ui/src/widgets/OutlineControlsWidget.js
new file mode 100644
index 00000000..0219a44d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/OutlineControlsWidget.js
@@ -0,0 +1,145 @@
+/**
+ * OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.
+ * Controls include moving items up and down, removing items, and adding different kinds of items.
+ * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.IconElement
+ *
+ * @constructor
+ * @param {OO.ui.OutlineSelectWidget} outline Outline to control
+ * @param {Object} [config] Configuration options
+ * @cfg {Object} [abilities] List of abilties
+ * @cfg {boolean} [abilities.move=true] Allow moving movable items
+ * @cfg {boolean} [abilities.remove=true] Allow removing removable items
+ */
+OO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( outline ) && config === undefined ) {
+ config = outline;
+ outline = config.outline;
+ }
+
+ // Configuration initialization
+ config = $.extend( { icon: 'add' }, config );
+
+ // Parent constructor
+ OO.ui.OutlineControlsWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.GroupElement.call( this, config );
+ OO.ui.IconElement.call( this, config );
+
+ // Properties
+ this.outline = outline;
+ this.$movers = $( '<div>' );
+ this.upButton = new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'collapse',
+ title: OO.ui.msg( 'ooui-outline-control-move-up' )
+ } );
+ this.downButton = new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'expand',
+ title: OO.ui.msg( 'ooui-outline-control-move-down' )
+ } );
+ this.removeButton = new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'remove',
+ title: OO.ui.msg( 'ooui-outline-control-remove' )
+ } );
+ this.abilities = { move: true, remove: true };
+
+ // Events
+ outline.connect( this, {
+ select: 'onOutlineChange',
+ add: 'onOutlineChange',
+ remove: 'onOutlineChange'
+ } );
+ this.upButton.connect( this, { click: [ 'emit', 'move', -1 ] } );
+ this.downButton.connect( this, { click: [ 'emit', 'move', 1 ] } );
+ this.removeButton.connect( this, { click: [ 'emit', 'remove' ] } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-outlineControlsWidget' );
+ this.$group.addClass( 'oo-ui-outlineControlsWidget-items' );
+ this.$movers
+ .addClass( 'oo-ui-outlineControlsWidget-movers' )
+ .append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );
+ this.$element.append( this.$icon, this.$group, this.$movers );
+ this.setAbilities( config.abilities || {} );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconElement );
+
+/* Events */
+
+/**
+ * @event move
+ * @param {number} places Number of places to move
+ */
+
+/**
+ * @event remove
+ */
+
+/* Methods */
+
+/**
+ * Set abilities.
+ *
+ * @param {Object} abilities List of abilties
+ * @param {boolean} [abilities.move] Allow moving movable items
+ * @param {boolean} [abilities.remove] Allow removing removable items
+ */
+OO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {
+ var ability;
+
+ for ( ability in this.abilities ) {
+ if ( abilities[ability] !== undefined ) {
+ this.abilities[ability] = !!abilities[ability];
+ }
+ }
+
+ this.onOutlineChange();
+};
+
+/**
+ *
+ * @private
+ * Handle outline change events.
+ */
+OO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {
+ var i, len, firstMovable, lastMovable,
+ items = this.outline.getItems(),
+ selectedItem = this.outline.getSelectedItem(),
+ movable = this.abilities.move && selectedItem && selectedItem.isMovable(),
+ removable = this.abilities.remove && selectedItem && selectedItem.isRemovable();
+
+ if ( movable ) {
+ i = -1;
+ len = items.length;
+ while ( ++i < len ) {
+ if ( items[ i ].isMovable() ) {
+ firstMovable = items[ i ];
+ break;
+ }
+ }
+ i = len;
+ while ( i-- ) {
+ if ( items[ i ].isMovable() ) {
+ lastMovable = items[ i ];
+ break;
+ }
+ }
+ }
+ this.upButton.setDisabled( !movable || selectedItem === firstMovable );
+ this.downButton.setDisabled( !movable || selectedItem === lastMovable );
+ this.removeButton.setDisabled( !removable );
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js b/vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js
new file mode 100644
index 00000000..d792fee6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/OutlineOptionWidget.js
@@ -0,0 +1,130 @@
+/**
+ * OutlineOptionWidget is an item in an {@link OO.ui.OutlineSelectWidget OutlineSelectWidget}.
+ *
+ * Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}, which contain
+ * {@link OO.ui.PageLayout page layouts}. See {@link OO.ui.BookletLayout BookletLayout}
+ * for an example.
+ *
+ * @class
+ * @extends OO.ui.DecoratedOptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {number} [level] Indentation level
+ * @cfg {boolean} [movable] Allow modification from {@link OO.ui.OutlineControlsWidget outline controls}.
+ */
+OO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.OutlineOptionWidget.super.call( this, config );
+
+ // Properties
+ this.level = 0;
+ this.movable = !!config.movable;
+ this.removable = !!config.removable;
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-outlineOptionWidget' );
+ this.setLevel( config.level );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.OutlineOptionWidget, OO.ui.DecoratedOptionWidget );
+
+/* Static Properties */
+
+OO.ui.OutlineOptionWidget.static.highlightable = false;
+
+OO.ui.OutlineOptionWidget.static.scrollIntoViewOnSelect = true;
+
+OO.ui.OutlineOptionWidget.static.levelClass = 'oo-ui-outlineOptionWidget-level-';
+
+OO.ui.OutlineOptionWidget.static.levels = 3;
+
+/* Methods */
+
+/**
+ * Check if item is movable.
+ *
+ * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
+ *
+ * @return {boolean} Item is movable
+ */
+OO.ui.OutlineOptionWidget.prototype.isMovable = function () {
+ return this.movable;
+};
+
+/**
+ * Check if item is removable.
+ *
+ * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
+ *
+ * @return {boolean} Item is removable
+ */
+OO.ui.OutlineOptionWidget.prototype.isRemovable = function () {
+ return this.removable;
+};
+
+/**
+ * Get indentation level.
+ *
+ * @return {number} Indentation level
+ */
+OO.ui.OutlineOptionWidget.prototype.getLevel = function () {
+ return this.level;
+};
+
+/**
+ * Set movability.
+ *
+ * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
+ *
+ * @param {boolean} movable Item is movable
+ * @chainable
+ */
+OO.ui.OutlineOptionWidget.prototype.setMovable = function ( movable ) {
+ this.movable = !!movable;
+ this.updateThemeClasses();
+ return this;
+};
+
+/**
+ * Set removability.
+ *
+ * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.
+ *
+ * @param {boolean} movable Item is removable
+ * @chainable
+ */
+OO.ui.OutlineOptionWidget.prototype.setRemovable = function ( removable ) {
+ this.removable = !!removable;
+ this.updateThemeClasses();
+ return this;
+};
+
+/**
+ * Set indentation level.
+ *
+ * @param {number} [level=0] Indentation level, in the range of [0,#maxLevel]
+ * @chainable
+ */
+OO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {
+ var levels = this.constructor.static.levels,
+ levelClass = this.constructor.static.levelClass,
+ i = levels;
+
+ this.level = level ? Math.max( 0, Math.min( levels - 1, level ) ) : 0;
+ while ( i-- ) {
+ if ( this.level === i ) {
+ this.$element.addClass( levelClass + i );
+ } else {
+ this.$element.removeClass( levelClass + i );
+ }
+ }
+ this.updateThemeClasses();
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/OutlineSelectWidget.js b/vendor/oojs/oojs-ui/src/widgets/OutlineSelectWidget.js
new file mode 100644
index 00000000..cd7db546
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/OutlineSelectWidget.js
@@ -0,0 +1,34 @@
+/**
+ * OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}
+ * A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.
+ *
+ * ####Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.####
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {
+ // Parent constructor
+ OO.ui.OutlineSelectWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, config );
+
+ // Events
+ this.$element.on( {
+ focus: this.bindKeyDownListener.bind( this ),
+ blur: this.unbindKeyDownListener.bind( this )
+ } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-outlineSelectWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.TabIndexedElement );
diff --git a/vendor/oojs/oojs-ui/src/widgets/PopupButtonWidget.js b/vendor/oojs/oojs-ui/src/widgets/PopupButtonWidget.js
new file mode 100644
index 00000000..5643b77c
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/PopupButtonWidget.js
@@ -0,0 +1,57 @@
+/**
+ * PopupButtonWidgets toggle the visibility of a contained {@link OO.ui.PopupWidget PopupWidget},
+ * which is used to display additional information or options.
+ *
+ * @example
+ * // Example of a popup button.
+ * var popupButton = new OO.ui.PopupButtonWidget( {
+ * label: 'Popup button with options',
+ * icon: 'menu',
+ * popup: {
+ * $content: $( '<p>Additional options here.</p>' ),
+ * padded: true,
+ * align: 'force-left'
+ * }
+ * } );
+ * // Append the button to the DOM.
+ * $( 'body' ).append( popupButton.$element );
+ *
+ * @class
+ * @extends OO.ui.ButtonWidget
+ * @mixins OO.ui.PopupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.PopupButtonWidget = function OoUiPopupButtonWidget( config ) {
+ // Parent constructor
+ OO.ui.PopupButtonWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.PopupElement.call( this, config );
+
+ // Events
+ this.connect( this, { click: 'onAction' } );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-popupButtonWidget' )
+ .attr( 'aria-haspopup', 'true' )
+ .append( this.popup.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.PopupButtonWidget, OO.ui.ButtonWidget );
+OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopupElement );
+
+/* Methods */
+
+/**
+ * Handle the button action being triggered.
+ *
+ * @private
+ */
+OO.ui.PopupButtonWidget.prototype.onAction = function () {
+ this.popup.toggle();
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/PopupWidget.js b/vendor/oojs/oojs-ui/src/widgets/PopupWidget.js
new file mode 100644
index 00000000..0b1f4ca6
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/PopupWidget.js
@@ -0,0 +1,395 @@
+/**
+ * PopupWidget is a container for content. The popup is overlaid and positioned absolutely.
+ * By default, each popup has an anchor that points toward its origin.
+ * Please see the [OOjs UI documentation on Mediawiki] [1] for more information and examples.
+ *
+ * @example
+ * // A popup widget.
+ * var popup = new OO.ui.PopupWidget( {
+ * $content: $( '<p>Hi there!</p>' ),
+ * padded: true,
+ * width: 300
+ * } );
+ *
+ * $( 'body' ).append( popup.$element );
+ * // To display the popup, toggle the visibility to 'true'.
+ * popup.toggle( true );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.LabelElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {number} [width=320] Width of popup in pixels
+ * @cfg {number} [height] Height of popup in pixels. Omit to use the automatic height.
+ * @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup
+ * @cfg {string} [align='center'] Alignment of the popup: `center`, `force-left`, `force-right`, `backwards` or `forwards`.
+ * If the popup is forced-left the popup body is leaning towards the left. For force-right alignment, the body of the
+ * popup is leaning towards the right of the screen.
+ * Using 'backwards' is a logical direction which will result in the popup leaning towards the beginning of the sentence
+ * in the given language, which means it will flip to the correct positioning in right-to-left languages.
+ * Using 'forward' will also result in a logical alignment where the body of the popup leans towards the end of the
+ * sentence in the given language.
+ * @cfg {jQuery} [$container] Constrain the popup to the boundaries of the specified container.
+ * See the [OOjs UI docs on MediaWiki][3] for an example.
+ * [3]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#containerExample
+ * @cfg {number} [containerPadding=10] Padding between the popup and its container, specified as a number of pixels.
+ * @cfg {jQuery} [$content] Content to append to the popup's body
+ * @cfg {boolean} [autoClose=false] Automatically close the popup when it loses focus.
+ * @cfg {jQuery} [$autoCloseIgnore] Elements that will not close the popup when clicked.
+ * This config option is only relevant if #autoClose is set to `true`. See the [OOjs UI docs on MediaWiki][2]
+ * for an example.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#autocloseExample
+ * @cfg {boolean} [head] Show a popup header that contains a #label (if specified) and close
+ * button.
+ * @cfg {boolean} [padded] Add padding to the popup's body
+ */
+OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.PopupWidget.super.call( this, config );
+
+ // Properties (must be set before ClippableElement constructor call)
+ this.$body = $( '<div>' );
+
+ // Mixin constructors
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$body } ) );
+
+ // Properties
+ this.$popup = $( '<div>' );
+ this.$head = $( '<div>' );
+ this.$anchor = $( '<div>' );
+ // If undefined, will be computed lazily in updateDimensions()
+ this.$container = config.$container;
+ this.containerPadding = config.containerPadding !== undefined ? config.containerPadding : 10;
+ this.autoClose = !!config.autoClose;
+ this.$autoCloseIgnore = config.$autoCloseIgnore;
+ this.transitionTimeout = null;
+ this.anchor = null;
+ this.width = config.width !== undefined ? config.width : 320;
+ this.height = config.height !== undefined ? config.height : null;
+ this.setAlignment( config.align );
+ this.closeButton = new OO.ui.ButtonWidget( { framed: false, icon: 'close' } );
+ this.onMouseDownHandler = this.onMouseDown.bind( this );
+ this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
+
+ // Events
+ this.closeButton.connect( this, { click: 'onCloseButtonClick' } );
+
+ // Initialization
+ this.toggleAnchor( config.anchor === undefined || config.anchor );
+ this.$body.addClass( 'oo-ui-popupWidget-body' );
+ this.$anchor.addClass( 'oo-ui-popupWidget-anchor' );
+ this.$head
+ .addClass( 'oo-ui-popupWidget-head' )
+ .append( this.$label, this.closeButton.$element );
+ if ( !config.head ) {
+ this.$head.addClass( 'oo-ui-element-hidden' );
+ }
+ this.$popup
+ .addClass( 'oo-ui-popupWidget-popup' )
+ .append( this.$head, this.$body );
+ this.$element
+ .addClass( 'oo-ui-popupWidget' )
+ .append( this.$popup, this.$anchor );
+ // Move content, which was added to #$element by OO.ui.Widget, to the body
+ if ( config.$content instanceof jQuery ) {
+ this.$body.append( config.$content );
+ }
+ if ( config.padded ) {
+ this.$body.addClass( 'oo-ui-popupWidget-body-padded' );
+ }
+
+ // Initially hidden - using #toggle may cause errors if subclasses override toggle with methods
+ // that reference properties not initialized at that time of parent class construction
+ // TODO: Find a better way to handle post-constructor setup
+ this.visible = false;
+ this.$element.addClass( 'oo-ui-element-hidden' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.PopupWidget, OO.ui.ClippableElement );
+
+/* Methods */
+
+/**
+ * Handles mouse down events.
+ *
+ * @private
+ * @param {MouseEvent} e Mouse down event
+ */
+OO.ui.PopupWidget.prototype.onMouseDown = function ( e ) {
+ if (
+ this.isVisible() &&
+ !$.contains( this.$element[ 0 ], e.target ) &&
+ ( !this.$autoCloseIgnore || !this.$autoCloseIgnore.has( e.target ).length )
+ ) {
+ this.toggle( false );
+ }
+};
+
+/**
+ * Bind mouse down listener.
+ *
+ * @private
+ */
+OO.ui.PopupWidget.prototype.bindMouseDownListener = function () {
+ // Capture clicks outside popup
+ this.getElementWindow().addEventListener( 'mousedown', this.onMouseDownHandler, true );
+};
+
+/**
+ * Handles close button click events.
+ *
+ * @private
+ */
+OO.ui.PopupWidget.prototype.onCloseButtonClick = function () {
+ if ( this.isVisible() ) {
+ this.toggle( false );
+ }
+};
+
+/**
+ * Unbind mouse down listener.
+ *
+ * @private
+ */
+OO.ui.PopupWidget.prototype.unbindMouseDownListener = function () {
+ this.getElementWindow().removeEventListener( 'mousedown', this.onMouseDownHandler, true );
+};
+
+/**
+ * Handles key down events.
+ *
+ * @private
+ * @param {KeyboardEvent} e Key down event
+ */
+OO.ui.PopupWidget.prototype.onDocumentKeyDown = function ( e ) {
+ if (
+ e.which === OO.ui.Keys.ESCAPE &&
+ this.isVisible()
+ ) {
+ this.toggle( false );
+ e.preventDefault();
+ e.stopPropagation();
+ }
+};
+
+/**
+ * Bind key down listener.
+ *
+ * @private
+ */
+OO.ui.PopupWidget.prototype.bindKeyDownListener = function () {
+ this.getElementWindow().addEventListener( 'keydown', this.onDocumentKeyDownHandler, true );
+};
+
+/**
+ * Unbind key down listener.
+ *
+ * @private
+ */
+OO.ui.PopupWidget.prototype.unbindKeyDownListener = function () {
+ this.getElementWindow().removeEventListener( 'keydown', this.onDocumentKeyDownHandler, true );
+};
+
+/**
+ * Show, hide, or toggle the visibility of the anchor.
+ *
+ * @param {boolean} [show] Show anchor, omit to toggle
+ */
+OO.ui.PopupWidget.prototype.toggleAnchor = function ( show ) {
+ show = show === undefined ? !this.anchored : !!show;
+
+ if ( this.anchored !== show ) {
+ if ( show ) {
+ this.$element.addClass( 'oo-ui-popupWidget-anchored' );
+ } else {
+ this.$element.removeClass( 'oo-ui-popupWidget-anchored' );
+ }
+ this.anchored = show;
+ }
+};
+
+/**
+ * Check if the anchor is visible.
+ *
+ * @return {boolean} Anchor is visible
+ */
+OO.ui.PopupWidget.prototype.hasAnchor = function () {
+ return this.anchor;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.PopupWidget.prototype.toggle = function ( show ) {
+ show = show === undefined ? !this.isVisible() : !!show;
+
+ var change = show !== this.isVisible();
+
+ // Parent method
+ OO.ui.PopupWidget.super.prototype.toggle.call( this, show );
+
+ if ( change ) {
+ if ( show ) {
+ if ( this.autoClose ) {
+ this.bindMouseDownListener();
+ this.bindKeyDownListener();
+ }
+ this.updateDimensions();
+ this.toggleClipping( true );
+ } else {
+ this.toggleClipping( false );
+ if ( this.autoClose ) {
+ this.unbindMouseDownListener();
+ this.unbindKeyDownListener();
+ }
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Set the size of the popup.
+ *
+ * Changing the size may also change the popup's position depending on the alignment.
+ *
+ * @param {number} width Width in pixels
+ * @param {number} height Height in pixels
+ * @param {boolean} [transition=false] Use a smooth transition
+ * @chainable
+ */
+OO.ui.PopupWidget.prototype.setSize = function ( width, height, transition ) {
+ this.width = width;
+ this.height = height !== undefined ? height : null;
+ if ( this.isVisible() ) {
+ this.updateDimensions( transition );
+ }
+};
+
+/**
+ * Update the size and position.
+ *
+ * Only use this to keep the popup properly anchored. Use #setSize to change the size, and this will
+ * be called automatically.
+ *
+ * @param {boolean} [transition=false] Use a smooth transition
+ * @chainable
+ */
+OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
+ var popupOffset, originOffset, containerLeft, containerWidth, containerRight,
+ popupLeft, popupRight, overlapLeft, overlapRight, anchorWidth,
+ align = this.align,
+ widget = this;
+
+ if ( !this.$container ) {
+ // Lazy-initialize $container if not specified in constructor
+ this.$container = $( this.getClosestScrollableElementContainer() );
+ }
+
+ // Set height and width before measuring things, since it might cause our measurements
+ // to change (e.g. due to scrollbars appearing or disappearing)
+ this.$popup.css( {
+ width: this.width,
+ height: this.height !== null ? this.height : 'auto'
+ } );
+
+ // If we are in RTL, we need to flip the alignment, unless it is center
+ if ( align === 'forwards' || align === 'backwards' ) {
+ if ( this.$container.css( 'direction' ) === 'rtl' ) {
+ align = ( { forwards: 'force-left', backwards: 'force-right' } )[ this.align ];
+ } else {
+ align = ( { forwards: 'force-right', backwards: 'force-left' } )[ this.align ];
+ }
+
+ }
+
+ // Compute initial popupOffset based on alignment
+ popupOffset = this.width * ( { 'force-left': -1, center: -0.5, 'force-right': 0 } )[ align ];
+
+ // Figure out if this will cause the popup to go beyond the edge of the container
+ originOffset = this.$element.offset().left;
+ containerLeft = this.$container.offset().left;
+ containerWidth = this.$container.innerWidth();
+ containerRight = containerLeft + containerWidth;
+ popupLeft = popupOffset - this.containerPadding;
+ popupRight = popupOffset + this.containerPadding + this.width + this.containerPadding;
+ overlapLeft = ( originOffset + popupLeft ) - containerLeft;
+ overlapRight = containerRight - ( originOffset + popupRight );
+
+ // Adjust offset to make the popup not go beyond the edge, if needed
+ if ( overlapRight < 0 ) {
+ popupOffset += overlapRight;
+ } else if ( overlapLeft < 0 ) {
+ popupOffset -= overlapLeft;
+ }
+
+ // Adjust offset to avoid anchor being rendered too close to the edge
+ // $anchor.width() doesn't work with the pure CSS anchor (returns 0)
+ // TODO: Find a measurement that works for CSS anchors and image anchors
+ anchorWidth = this.$anchor[ 0 ].scrollWidth * 2;
+ if ( popupOffset + this.width < anchorWidth ) {
+ popupOffset = anchorWidth - this.width;
+ } else if ( -popupOffset < anchorWidth ) {
+ popupOffset = -anchorWidth;
+ }
+
+ // Prevent transition from being interrupted
+ clearTimeout( this.transitionTimeout );
+ if ( transition ) {
+ // Enable transition
+ this.$element.addClass( 'oo-ui-popupWidget-transitioning' );
+ }
+
+ // Position body relative to anchor
+ this.$popup.css( 'margin-left', popupOffset );
+
+ if ( transition ) {
+ // Prevent transitioning after transition is complete
+ this.transitionTimeout = setTimeout( function () {
+ widget.$element.removeClass( 'oo-ui-popupWidget-transitioning' );
+ }, 200 );
+ } else {
+ // Prevent transitioning immediately
+ this.$element.removeClass( 'oo-ui-popupWidget-transitioning' );
+ }
+
+ // Reevaluate clipping state since we've relocated and resized the popup
+ this.clip();
+
+ return this;
+};
+
+/**
+ * Set popup alignment
+ * @param {string} align Alignment of the popup, `center`, `force-left`, `force-right`,
+ * `backwards` or `forwards`.
+ */
+OO.ui.PopupWidget.prototype.setAlignment = function ( align ) {
+ // Validate alignment and transform deprecated values
+ if ( [ 'left', 'right', 'force-left', 'force-right', 'backwards', 'forwards', 'center' ].indexOf( align ) > -1 ) {
+ this.align = { left: 'force-right', right: 'force-left' }[ align ] || align;
+ } else {
+ this.align = 'center';
+ }
+};
+
+/**
+ * Get popup alignment
+ * @return {string} align Alignment of the popup, `center`, `force-left`, `force-right`,
+ * `backwards` or `forwards`.
+ */
+OO.ui.PopupWidget.prototype.getAlignment = function () {
+ return this.align;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ProgressBarWidget.js b/vendor/oojs/oojs-ui/src/widgets/ProgressBarWidget.js
new file mode 100644
index 00000000..a4676282
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ProgressBarWidget.js
@@ -0,0 +1,96 @@
+/**
+ * Progress bars visually display the status of an operation, such as a download,
+ * and can be either determinate or indeterminate:
+ *
+ * - **determinate** process bars show the percent of an operation that is complete.
+ *
+ * - **indeterminate** process bars use a visual display of motion to indicate that an operation
+ * is taking place. Because the extent of an indeterminate operation is unknown, the bar does
+ * not use percentages.
+ *
+ * The value of the `progress` configuration determines whether the bar is determinate or indeterminate.
+ *
+ * @example
+ * // Examples of determinate and indeterminate progress bars.
+ * var progressBar1 = new OO.ui.ProgressBarWidget( {
+ * progress: 33
+ * } );
+ * var progressBar2 = new OO.ui.ProgressBarWidget();
+ *
+ * // Create a FieldsetLayout to layout progress bars
+ * var fieldset = new OO.ui.FieldsetLayout;
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( progressBar1, {label: 'Determinate', align: 'top'}),
+ * new OO.ui.FieldLayout( progressBar2, {label: 'Indeterminate', align: 'top'})
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * @class
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {number|boolean} [progress=false] The type of progress bar (determinate or indeterminate).
+ * To create a determinate progress bar, specify a number that reflects the initial percent complete.
+ * By default, the progress bar is indeterminate.
+ */
+OO.ui.ProgressBarWidget = function OoUiProgressBarWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.ProgressBarWidget.super.call( this, config );
+
+ // Properties
+ this.$bar = $( '<div>' );
+ this.progress = null;
+
+ // Initialization
+ this.setProgress( config.progress !== undefined ? config.progress : false );
+ this.$bar.addClass( 'oo-ui-progressBarWidget-bar' );
+ this.$element
+ .attr( {
+ role: 'progressbar',
+ 'aria-valuemin': 0,
+ 'aria-valuemax': 100
+ } )
+ .addClass( 'oo-ui-progressBarWidget' )
+ .append( this.$bar );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ProgressBarWidget, OO.ui.Widget );
+
+/* Static Properties */
+
+OO.ui.ProgressBarWidget.static.tagName = 'div';
+
+/* Methods */
+
+/**
+ * Get the percent of the progress that has been completed. Indeterminate progresses will return `false`.
+ *
+ * @return {number|boolean} Progress percent
+ */
+OO.ui.ProgressBarWidget.prototype.getProgress = function () {
+ return this.progress;
+};
+
+/**
+ * Set the percent of the process completed or `false` for an indeterminate process.
+ *
+ * @param {number|boolean} progress Progress percent or `false` for indeterminate
+ */
+OO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {
+ this.progress = progress;
+
+ if ( progress !== false ) {
+ this.$bar.css( 'width', this.progress + '%' );
+ this.$element.attr( 'aria-valuenow', this.progress );
+ } else {
+ this.$bar.css( 'width', '' );
+ this.$element.removeAttr( 'aria-valuenow' );
+ }
+ this.$element.toggleClass( 'oo-ui-progressBarWidget-indeterminate', !progress );
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/RadioInputWidget.js b/vendor/oojs/oojs-ui/src/widgets/RadioInputWidget.js
new file mode 100644
index 00000000..47ac20bf
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/RadioInputWidget.js
@@ -0,0 +1,94 @@
+/**
+ * RadioInputWidget creates a single radio button. Because radio buttons are usually used as a set,
+ * in most cases you will want to use a {@link OO.ui.RadioSelectWidget radio select}
+ * with {@link OO.ui.RadioOptionWidget radio options} instead of this class. For more information,
+ * please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * This widget can be used inside a HTML form, such as a OO.ui.FormLayout.
+ *
+ * @example
+ * // An example of selected, unselected, and disabled radio inputs
+ * var radio1 = new OO.ui.RadioInputWidget( {
+ * value: 'a',
+ * selected: true
+ * } );
+ * var radio2 = new OO.ui.RadioInputWidget( {
+ * value: 'b'
+ * } );
+ * var radio3 = new OO.ui.RadioInputWidget( {
+ * value: 'c',
+ * disabled: true
+ * } );
+ * // Create a fieldset layout with fields for each radio button.
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'Radio inputs'
+ * } );
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( radio1, { label: 'Selected', align: 'inline' } ),
+ * new OO.ui.FieldLayout( radio2, { label: 'Unselected', align: 'inline' } ),
+ * new OO.ui.FieldLayout( radio3, { label: 'Disabled', align: 'inline' } ),
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [selected=false] Select the radio button initially. By default, the radio button is not selected.
+ */
+OO.ui.RadioInputWidget = function OoUiRadioInputWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.RadioInputWidget.super.call( this, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-radioInputWidget' );
+ this.setSelected( config.selected !== undefined ? config.selected : false );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.RadioInputWidget, OO.ui.InputWidget );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ * @private
+ */
+OO.ui.RadioInputWidget.prototype.getInputElement = function () {
+ return $( '<input type="radio" />' );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioInputWidget.prototype.onEdit = function () {
+ // RadioInputWidget doesn't track its state.
+};
+
+/**
+ * Set selection state of this radio button.
+ *
+ * @param {boolean} state `true` for selected
+ * @chainable
+ */
+OO.ui.RadioInputWidget.prototype.setSelected = function ( state ) {
+ // RadioInputWidget doesn't track its state.
+ this.$input.prop( 'checked', state );
+ return this;
+};
+
+/**
+ * Check if this radio button is selected.
+ *
+ * @return {boolean} Radio is selected
+ */
+OO.ui.RadioInputWidget.prototype.isSelected = function () {
+ return this.$input.prop( 'checked' );
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/RadioOptionWidget.js b/vendor/oojs/oojs-ui/src/widgets/RadioOptionWidget.js
new file mode 100644
index 00000000..97187c0a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/RadioOptionWidget.js
@@ -0,0 +1,66 @@
+/**
+ * RadioOptionWidget is an option widget that looks like a radio button.
+ * The class is used with OO.ui.RadioSelectWidget to create a selection of radio options.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information.
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Button_selects_and_option
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.RadioOptionWidget = function OoUiRadioOptionWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Properties (must be done before parent constructor which calls #setDisabled)
+ this.radio = new OO.ui.RadioInputWidget( { value: config.data, tabIndex: -1 } );
+
+ // Parent constructor
+ OO.ui.RadioOptionWidget.super.call( this, config );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-radioOptionWidget' )
+ .prepend( this.radio.$element );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.RadioOptionWidget, OO.ui.OptionWidget );
+
+/* Static Properties */
+
+OO.ui.RadioOptionWidget.static.highlightable = false;
+
+OO.ui.RadioOptionWidget.static.scrollIntoViewOnSelect = true;
+
+OO.ui.RadioOptionWidget.static.pressable = false;
+
+OO.ui.RadioOptionWidget.static.tagName = 'label';
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioOptionWidget.prototype.setSelected = function ( state ) {
+ OO.ui.RadioOptionWidget.super.prototype.setSelected.call( this, state );
+
+ this.radio.setSelected( state );
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioOptionWidget.prototype.setDisabled = function ( disabled ) {
+ OO.ui.RadioOptionWidget.super.prototype.setDisabled.call( this, disabled );
+
+ this.radio.setDisabled( this.isDisabled() );
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/RadioSelectWidget.js b/vendor/oojs/oojs-ui/src/widgets/RadioSelectWidget.js
new file mode 100644
index 00000000..3859205f
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/RadioSelectWidget.js
@@ -0,0 +1,58 @@
+/**
+ * RadioSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains radio
+ * options and is used together with OO.ui.RadioOptionWidget. The RadioSelectWidget provides
+ * an interface for adding, removing and selecting options.
+ * Please see the [OOjs UI documentation on MediaWiki][1] for more information.
+ *
+ * @example
+ * // A RadioSelectWidget with RadioOptions.
+ * var option1 = new OO.ui.RadioOptionWidget( {
+ * data: 'a',
+ * label: 'Selected radio option'
+ * } );
+ *
+ * var option2 = new OO.ui.RadioOptionWidget( {
+ * data: 'b',
+ * label: 'Unselected radio option'
+ * } );
+ *
+ * var radioSelect=new OO.ui.RadioSelectWidget( {
+ * items: [ option1, option2 ]
+ * } );
+ *
+ * // Select 'option 1' using the RadioSelectWidget's selectItem() method.
+ * radioSelect.selectItem( option1 );
+ *
+ * $( 'body' ).append( radioSelect.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.RadioSelectWidget = function OoUiRadioSelectWidget( config ) {
+ // Parent constructor
+ OO.ui.RadioSelectWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, config );
+
+ // Events
+ this.$element.on( {
+ focus: this.bindKeyDownListener.bind( this ),
+ blur: this.unbindKeyDownListener.bind( this )
+ } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-radioSelectWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.RadioSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.TabIndexedElement );
diff --git a/vendor/oojs/oojs-ui/src/widgets/SearchWidget.js b/vendor/oojs/oojs-ui/src/widgets/SearchWidget.js
new file mode 100644
index 00000000..4909d9e1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/SearchWidget.js
@@ -0,0 +1,176 @@
+/**
+ * SearchWidgets combine a {@link OO.ui.TextInputWidget text input field}, where users can type a search query,
+ * and a {@link OO.ui.TextInputMenuSelectWidget menu} of search results, which is displayed beneath the query
+ * field. Unlike {@link OO.ui.LookupElement lookup menus}, search result menus are always visible to the user.
+ * Users can choose an item from the menu or type a query into the text field to search for a matching result item.
+ * In general, search widgets are used inside a separate {@link OO.ui.Dialog dialog} window.
+ *
+ * Each time the query is changed, the search result menu is cleared and repopulated. Please see
+ * the [OOjs UI demos][1] for an example.
+ *
+ * [1]: https://tools.wmflabs.org/oojs-ui/oojs-ui/demos/#dialogs-mediawiki-vector-ltr
+ *
+ * @class
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string|jQuery} [placeholder] Placeholder text for query input
+ * @cfg {string} [value] Initial query value
+ */
+OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.SearchWidget.super.call( this, config );
+
+ // Properties
+ this.query = new OO.ui.TextInputWidget( {
+ icon: 'search',
+ placeholder: config.placeholder,
+ value: config.value
+ } );
+ this.results = new OO.ui.SelectWidget();
+ this.$query = $( '<div>' );
+ this.$results = $( '<div>' );
+
+ // Events
+ this.query.connect( this, {
+ change: 'onQueryChange',
+ enter: 'onQueryEnter'
+ } );
+ this.results.connect( this, {
+ highlight: 'onResultsHighlight',
+ select: 'onResultsSelect'
+ } );
+ this.query.$input.on( 'keydown', this.onQueryKeydown.bind( this ) );
+
+ // Initialization
+ this.$query
+ .addClass( 'oo-ui-searchWidget-query' )
+ .append( this.query.$element );
+ this.$results
+ .addClass( 'oo-ui-searchWidget-results' )
+ .append( this.results.$element );
+ this.$element
+ .addClass( 'oo-ui-searchWidget' )
+ .append( this.$results, this.$query );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );
+
+/* Events */
+
+/**
+ * A 'highlight' event is emitted when an item is highlighted. The highlight indicates which
+ * item will be selected. When a user mouses over a menu item, it is highlighted. If a search
+ * string is typed into the query field instead, the first menu item that matches the query
+ * will be highlighted.
+
+ * @event highlight
+ * @deprecated Connect straight to getResults() events instead
+ * @param {Object|null} item Item data or null if no item is highlighted
+ */
+
+/**
+ * A 'select' event is emitted when an item is selected. A menu item is selected when it is clicked,
+ * or when a user types a search query, a menu result is highlighted, and the user presses enter.
+ *
+ * @event select
+ * @deprecated Connect straight to getResults() events instead
+ * @param {Object|null} item Item data or null if no item is selected
+ */
+
+/* Methods */
+
+/**
+ * Handle query key down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {
+ var highlightedItem, nextItem,
+ dir = e.which === OO.ui.Keys.DOWN ? 1 : ( e.which === OO.ui.Keys.UP ? -1 : 0 );
+
+ if ( dir ) {
+ highlightedItem = this.results.getHighlightedItem();
+ if ( !highlightedItem ) {
+ highlightedItem = this.results.getSelectedItem();
+ }
+ nextItem = this.results.getRelativeSelectableItem( highlightedItem, dir );
+ this.results.highlightItem( nextItem );
+ nextItem.scrollElementIntoView();
+ }
+};
+
+/**
+ * Handle select widget select events.
+ *
+ * Clears existing results. Subclasses should repopulate items according to new query.
+ *
+ * @private
+ * @param {string} value New value
+ */
+OO.ui.SearchWidget.prototype.onQueryChange = function () {
+ // Reset
+ this.results.clearItems();
+};
+
+/**
+ * Handle select widget enter key events.
+ *
+ * Selects highlighted item.
+ *
+ * @private
+ * @param {string} value New value
+ */
+OO.ui.SearchWidget.prototype.onQueryEnter = function () {
+ // Reset
+ this.results.selectItem( this.results.getHighlightedItem() );
+};
+
+/**
+ * Handle select widget highlight events.
+ *
+ * @private
+ * @deprecated Connect straight to getResults() events instead
+ * @param {OO.ui.OptionWidget} item Highlighted item
+ * @fires highlight
+ */
+OO.ui.SearchWidget.prototype.onResultsHighlight = function ( item ) {
+ this.emit( 'highlight', item ? item.getData() : null );
+};
+
+/**
+ * Handle select widget select events.
+ *
+ * @private
+ * @deprecated Connect straight to getResults() events instead
+ * @param {OO.ui.OptionWidget} item Selected item
+ * @fires select
+ */
+OO.ui.SearchWidget.prototype.onResultsSelect = function ( item ) {
+ this.emit( 'select', item ? item.getData() : null );
+};
+
+/**
+ * Get the query input.
+ *
+ * @return {OO.ui.TextInputWidget} Query input
+ */
+OO.ui.SearchWidget.prototype.getQuery = function () {
+ return this.query;
+};
+
+/**
+ * Get the search results menu.
+ *
+ * @return {OO.ui.SelectWidget} Menu of search results
+ */
+OO.ui.SearchWidget.prototype.getResults = function () {
+ return this.results;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/SelectWidget.js b/vendor/oojs/oojs-ui/src/widgets/SelectWidget.js
new file mode 100644
index 00000000..91172af0
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/SelectWidget.js
@@ -0,0 +1,630 @@
+/**
+ * A SelectWidget is of a generic selection of options. The OOjs UI library contains several types of
+ * select widgets, including {@link OO.ui.ButtonSelectWidget button selects},
+ * {@link OO.ui.RadioSelectWidget radio selects}, and {@link OO.ui.MenuSelectWidget
+ * menu selects}.
+ *
+ * This class should be used together with OO.ui.OptionWidget or OO.ui.DecoratedOptionWidget. For more
+ * information, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example of a select widget with three options
+ * var select = new OO.ui.SelectWidget( {
+ * items: [
+ * new OO.ui.OptionWidget( {
+ * data: 'a',
+ * label: 'Option One',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'b',
+ * label: 'Option Two',
+ * } ),
+ * new OO.ui.OptionWidget( {
+ * data: 'c',
+ * label: 'Option Three',
+ * } )
+ * ]
+ * } );
+ * $( 'body' ).append( select.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.OptionWidget[]} [items] An array of options to add to the select.
+ * Options are created with {@link OO.ui.OptionWidget OptionWidget} classes. See
+ * the [OOjs UI documentation on MediaWiki] [2] for examples.
+ * [2]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
+ */
+OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.SelectWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.GroupWidget.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
+ // Properties
+ this.pressed = false;
+ this.selecting = null;
+ this.onMouseUpHandler = this.onMouseUp.bind( this );
+ this.onMouseMoveHandler = this.onMouseMove.bind( this );
+ this.onKeyDownHandler = this.onKeyDown.bind( this );
+
+ // Events
+ this.$element.on( {
+ mousedown: this.onMouseDown.bind( this ),
+ mouseover: this.onMouseOver.bind( this ),
+ mouseleave: this.onMouseLeave.bind( this )
+ } );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-selectWidget oo-ui-selectWidget-depressed' )
+ .attr( 'role', 'listbox' );
+ if ( Array.isArray( config.items ) ) {
+ this.addItems( config.items );
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.SelectWidget, OO.ui.Widget );
+
+// Need to mixin base class as well
+OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupElement );
+OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget );
+
+/* Events */
+
+/**
+ * @event highlight
+ *
+ * A `highlight` event is emitted when the highlight is changed with the #highlightItem method.
+ *
+ * @param {OO.ui.OptionWidget|null} item Highlighted item
+ */
+
+/**
+ * @event press
+ *
+ * A `press` event is emitted when the #pressItem method is used to programmatically modify the
+ * pressed state of an option.
+ *
+ * @param {OO.ui.OptionWidget|null} item Pressed item
+ */
+
+/**
+ * @event select
+ *
+ * A `select` event is emitted when the selection is modified programmatically with the #selectItem method.
+ *
+ * @param {OO.ui.OptionWidget|null} item Selected item
+ */
+
+/**
+ * @event choose
+ * A `choose` event is emitted when an item is chosen with the #chooseItem method.
+ * @param {OO.ui.OptionWidget} item Chosen item
+ */
+
+/**
+ * @event add
+ *
+ * An `add` event is emitted when options are added to the select with the #addItems method.
+ *
+ * @param {OO.ui.OptionWidget[]} items Added items
+ * @param {number} index Index of insertion point
+ */
+
+/**
+ * @event remove
+ *
+ * A `remove` event is emitted when options are removed from the select with the #clearItems
+ * or #removeItems methods.
+ *
+ * @param {OO.ui.OptionWidget[]} items Removed items
+ */
+
+/* Methods */
+
+/**
+ * Handle mouse down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.SelectWidget.prototype.onMouseDown = function ( e ) {
+ var item;
+
+ if ( !this.isDisabled() && e.which === 1 ) {
+ this.togglePressed( true );
+ item = this.getTargetItem( e );
+ if ( item && item.isSelectable() ) {
+ this.pressItem( item );
+ this.selecting = item;
+ this.getElementDocument().addEventListener(
+ 'mouseup',
+ this.onMouseUpHandler,
+ true
+ );
+ this.getElementDocument().addEventListener(
+ 'mousemove',
+ this.onMouseMoveHandler,
+ true
+ );
+ }
+ }
+ return false;
+};
+
+/**
+ * Handle mouse up events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse up event
+ */
+OO.ui.SelectWidget.prototype.onMouseUp = function ( e ) {
+ var item;
+
+ this.togglePressed( false );
+ if ( !this.selecting ) {
+ item = this.getTargetItem( e );
+ if ( item && item.isSelectable() ) {
+ this.selecting = item;
+ }
+ }
+ if ( !this.isDisabled() && e.which === 1 && this.selecting ) {
+ this.pressItem( null );
+ this.chooseItem( this.selecting );
+ this.selecting = null;
+ }
+
+ this.getElementDocument().removeEventListener(
+ 'mouseup',
+ this.onMouseUpHandler,
+ true
+ );
+ this.getElementDocument().removeEventListener(
+ 'mousemove',
+ this.onMouseMoveHandler,
+ true
+ );
+
+ return false;
+};
+
+/**
+ * Handle mouse move events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse move event
+ */
+OO.ui.SelectWidget.prototype.onMouseMove = function ( e ) {
+ var item;
+
+ if ( !this.isDisabled() && this.pressed ) {
+ item = this.getTargetItem( e );
+ if ( item && item !== this.selecting && item.isSelectable() ) {
+ this.pressItem( item );
+ this.selecting = item;
+ }
+ }
+ return false;
+};
+
+/**
+ * Handle mouse over events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse over event
+ */
+OO.ui.SelectWidget.prototype.onMouseOver = function ( e ) {
+ var item;
+
+ if ( !this.isDisabled() ) {
+ item = this.getTargetItem( e );
+ this.highlightItem( item && item.isHighlightable() ? item : null );
+ }
+ return false;
+};
+
+/**
+ * Handle mouse leave events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse over event
+ */
+OO.ui.SelectWidget.prototype.onMouseLeave = function () {
+ if ( !this.isDisabled() ) {
+ this.highlightItem( null );
+ }
+ return false;
+};
+
+/**
+ * Handle key down events.
+ *
+ * @protected
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.SelectWidget.prototype.onKeyDown = function ( e ) {
+ var nextItem,
+ handled = false,
+ currentItem = this.getHighlightedItem() || this.getSelectedItem();
+
+ if ( !this.isDisabled() && this.isVisible() ) {
+ switch ( e.keyCode ) {
+ case OO.ui.Keys.ENTER:
+ if ( currentItem && currentItem.constructor.static.highlightable ) {
+ // Was only highlighted, now let's select it. No-op if already selected.
+ this.chooseItem( currentItem );
+ handled = true;
+ }
+ break;
+ case OO.ui.Keys.UP:
+ case OO.ui.Keys.LEFT:
+ nextItem = this.getRelativeSelectableItem( currentItem, -1 );
+ handled = true;
+ break;
+ case OO.ui.Keys.DOWN:
+ case OO.ui.Keys.RIGHT:
+ nextItem = this.getRelativeSelectableItem( currentItem, 1 );
+ handled = true;
+ break;
+ case OO.ui.Keys.ESCAPE:
+ case OO.ui.Keys.TAB:
+ if ( currentItem && currentItem.constructor.static.highlightable ) {
+ currentItem.setHighlighted( false );
+ }
+ this.unbindKeyDownListener();
+ // Don't prevent tabbing away / defocusing
+ handled = false;
+ break;
+ }
+
+ if ( nextItem ) {
+ if ( nextItem.constructor.static.highlightable ) {
+ this.highlightItem( nextItem );
+ } else {
+ this.chooseItem( nextItem );
+ }
+ nextItem.scrollElementIntoView();
+ }
+
+ if ( handled ) {
+ // Can't just return false, because e is not always a jQuery event
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ }
+};
+
+/**
+ * Bind key down listener.
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.bindKeyDownListener = function () {
+ this.getElementWindow().addEventListener( 'keydown', this.onKeyDownHandler, true );
+};
+
+/**
+ * Unbind key down listener.
+ *
+ * @protected
+ */
+OO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {
+ this.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );
+};
+
+/**
+ * Get the closest item to a jQuery.Event.
+ *
+ * @private
+ * @param {jQuery.Event} e
+ * @return {OO.ui.OptionWidget|null} Outline item widget, `null` if none was found
+ */
+OO.ui.SelectWidget.prototype.getTargetItem = function ( e ) {
+ return $( e.target ).closest( '.oo-ui-optionWidget' ).data( 'oo-ui-optionWidget' ) || null;
+};
+
+/**
+ * Get selected item.
+ *
+ * @return {OO.ui.OptionWidget|null} Selected item, `null` if no item is selected
+ */
+OO.ui.SelectWidget.prototype.getSelectedItem = function () {
+ var i, len;
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ if ( this.items[ i ].isSelected() ) {
+ return this.items[ i ];
+ }
+ }
+ return null;
+};
+
+/**
+ * Get highlighted item.
+ *
+ * @return {OO.ui.OptionWidget|null} Highlighted item, `null` if no item is highlighted
+ */
+OO.ui.SelectWidget.prototype.getHighlightedItem = function () {
+ var i, len;
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ if ( this.items[ i ].isHighlighted() ) {
+ return this.items[ i ];
+ }
+ }
+ return null;
+};
+
+/**
+ * Toggle pressed state.
+ *
+ * Press is a state that occurs when a user mouses down on an item, but
+ * has not yet let go of the mouse. The item may appear selected, but it will not be selected
+ * until the user releases the mouse.
+ *
+ * @param {boolean} pressed An option is being pressed
+ */
+OO.ui.SelectWidget.prototype.togglePressed = function ( pressed ) {
+ if ( pressed === undefined ) {
+ pressed = !this.pressed;
+ }
+ if ( pressed !== this.pressed ) {
+ this.$element
+ .toggleClass( 'oo-ui-selectWidget-pressed', pressed )
+ .toggleClass( 'oo-ui-selectWidget-depressed', !pressed );
+ this.pressed = pressed;
+ }
+};
+
+/**
+ * Highlight an option. If the `item` param is omitted, no options will be highlighted
+ * and any existing highlight will be removed. The highlight is mutually exclusive.
+ *
+ * @param {OO.ui.OptionWidget} [item] Item to highlight, omit for no highlight
+ * @fires highlight
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.highlightItem = function ( item ) {
+ var i, len, highlighted,
+ changed = false;
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ highlighted = this.items[ i ] === item;
+ if ( this.items[ i ].isHighlighted() !== highlighted ) {
+ this.items[ i ].setHighlighted( highlighted );
+ changed = true;
+ }
+ }
+ if ( changed ) {
+ this.emit( 'highlight', item );
+ }
+
+ return this;
+};
+
+/**
+ * Programmatically select an option by its data. If the `data` parameter is omitted,
+ * or if the item does not exist, all options will be deselected.
+ *
+ * @param {Object|string} [data] Value of the item to select, omit to deselect all
+ * @fires select
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.selectItemByData = function ( data ) {
+ var itemFromData = this.getItemFromData( data );
+ if ( data === undefined || !itemFromData ) {
+ return this.selectItem();
+ }
+ return this.selectItem( itemFromData );
+};
+
+/**
+ * Programmatically select an option by its reference. If the `item` parameter is omitted,
+ * all options will be deselected.
+ *
+ * @param {OO.ui.OptionWidget} [item] Item to select, omit to deselect all
+ * @fires select
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.selectItem = function ( item ) {
+ var i, len, selected,
+ changed = false;
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ selected = this.items[ i ] === item;
+ if ( this.items[ i ].isSelected() !== selected ) {
+ this.items[ i ].setSelected( selected );
+ changed = true;
+ }
+ }
+ if ( changed ) {
+ this.emit( 'select', item );
+ }
+
+ return this;
+};
+
+/**
+ * Press an item.
+ *
+ * Press is a state that occurs when a user mouses down on an item, but has not
+ * yet let go of the mouse. The item may appear selected, but it will not be selected until the user
+ * releases the mouse.
+ *
+ * @param {OO.ui.OptionWidget} [item] Item to press, omit to depress all
+ * @fires press
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.pressItem = function ( item ) {
+ var i, len, pressed,
+ changed = false;
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ pressed = this.items[ i ] === item;
+ if ( this.items[ i ].isPressed() !== pressed ) {
+ this.items[ i ].setPressed( pressed );
+ changed = true;
+ }
+ }
+ if ( changed ) {
+ this.emit( 'press', item );
+ }
+
+ return this;
+};
+
+/**
+ * Choose an item.
+ *
+ * Note that ‘choose’ should never be modified programmatically. A user can choose
+ * an option with the keyboard or mouse and it becomes selected. To select an item programmatically,
+ * use the #selectItem method.
+ *
+ * This method is identical to #selectItem, but may vary in subclasses that take additional action
+ * when users choose an item with the keyboard or mouse.
+ *
+ * @param {OO.ui.OptionWidget} item Item to choose
+ * @fires choose
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.chooseItem = function ( item ) {
+ this.selectItem( item );
+ this.emit( 'choose', item );
+
+ return this;
+};
+
+/**
+ * Get an option by its position relative to the specified item (or to the start of the option array,
+ * if item is `null`). The direction in which to search through the option array is specified with a
+ * number: -1 for reverse (the default) or 1 for forward. The method will return an option, or
+ * `null` if there are no options in the array.
+ *
+ * @param {OO.ui.OptionWidget|null} item Item to describe the start position, or `null` to start at the beginning of the array.
+ * @param {number} direction Direction to move in: -1 to move backward, 1 to move forward
+ * @return {OO.ui.OptionWidget|null} Item at position, `null` if there are no items in the select
+ */
+OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direction ) {
+ var currentIndex, nextIndex, i,
+ increase = direction > 0 ? 1 : -1,
+ len = this.items.length;
+
+ if ( item instanceof OO.ui.OptionWidget ) {
+ currentIndex = $.inArray( item, this.items );
+ nextIndex = ( currentIndex + increase + len ) % len;
+ } else {
+ // If no item is selected and moving forward, start at the beginning.
+ // If moving backward, start at the end.
+ nextIndex = direction > 0 ? 0 : len - 1;
+ }
+
+ for ( i = 0; i < len; i++ ) {
+ item = this.items[ nextIndex ];
+ if ( item instanceof OO.ui.OptionWidget && item.isSelectable() ) {
+ return item;
+ }
+ nextIndex = ( nextIndex + increase + len ) % len;
+ }
+ return null;
+};
+
+/**
+ * Get the next selectable item or `null` if there are no selectable items.
+ * Disabled options and menu-section markers and breaks are not selectable.
+ *
+ * @return {OO.ui.OptionWidget|null} Item, `null` if there aren't any selectable items
+ */
+OO.ui.SelectWidget.prototype.getFirstSelectableItem = function () {
+ var i, len, item;
+
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[ i ];
+ if ( item instanceof OO.ui.OptionWidget && item.isSelectable() ) {
+ return item;
+ }
+ }
+
+ return null;
+};
+
+/**
+ * Add an array of options to the select. Optionally, an index number can be used to
+ * specify an insertion point.
+ *
+ * @param {OO.ui.OptionWidget[]} items Items to add
+ * @param {number} [index] Index to insert items after
+ * @fires add
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.addItems = function ( items, index ) {
+ // Mixin method
+ OO.ui.GroupWidget.prototype.addItems.call( this, items, index );
+
+ // Always provide an index, even if it was omitted
+ this.emit( 'add', items, index === undefined ? this.items.length - items.length - 1 : index );
+
+ return this;
+};
+
+/**
+ * Remove the specified array of options from the select. Options will be detached
+ * from the DOM, not removed, so they can be reused later. To remove all options from
+ * the select, you may wish to use the #clearItems method instead.
+ *
+ * @param {OO.ui.OptionWidget[]} items Items to remove
+ * @fires remove
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.removeItems = function ( items ) {
+ var i, len, item;
+
+ // Deselect items being removed
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ item = items[ i ];
+ if ( item.isSelected() ) {
+ this.selectItem( null );
+ }
+ }
+
+ // Mixin method
+ OO.ui.GroupWidget.prototype.removeItems.call( this, items );
+
+ this.emit( 'remove', items );
+
+ return this;
+};
+
+/**
+ * Clear all options from the select. Options will be detached from the DOM, not removed,
+ * so that they can be reused later. To remove a subset of options from the select, use
+ * the #removeItems method.
+ *
+ * @fires remove
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.clearItems = function () {
+ var items = this.items.slice();
+
+ // Mixin method
+ OO.ui.GroupWidget.prototype.clearItems.call( this );
+
+ // Clear selection
+ this.selectItem( null );
+
+ this.emit( 'remove', items );
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/TabOptionWidget.js b/vendor/oojs/oojs-ui/src/widgets/TabOptionWidget.js
new file mode 100644
index 00000000..08f5b30d
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/TabOptionWidget.js
@@ -0,0 +1,31 @@
+/**
+ * TabOptionWidget is an item in a {@link OO.ui.TabSelectWidget TabSelectWidget}.
+ *
+ * Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}, which contain
+ * {@link OO.ui.CardLayout card layouts}. See {@link OO.ui.IndexLayout IndexLayout}
+ * for an example.
+ *
+ * @class
+ * @extends OO.ui.OptionWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.TabOptionWidget = function OoUiTabOptionWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.TabOptionWidget.super.call( this, config );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-tabOptionWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.TabOptionWidget, OO.ui.OptionWidget );
+
+/* Static Properties */
+
+OO.ui.TabOptionWidget.static.highlightable = false;
diff --git a/vendor/oojs/oojs-ui/src/widgets/TabSelectWidget.js b/vendor/oojs/oojs-ui/src/widgets/TabSelectWidget.js
new file mode 100644
index 00000000..ced3218b
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/TabSelectWidget.js
@@ -0,0 +1,33 @@
+/**
+ * TabSelectWidget is a list that contains {@link OO.ui.TabOptionWidget tab options}
+ *
+ * ####Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.####
+ *
+ * @class
+ * @extends OO.ui.SelectWidget
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {
+ // Parent constructor
+ OO.ui.TabSelectWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, config );
+
+ // Events
+ this.$element.on( {
+ focus: this.bindKeyDownListener.bind( this ),
+ blur: this.unbindKeyDownListener.bind( this )
+ } );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-tabSelectWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget );
+OO.mixinClass( OO.ui.TabSelectWidget, OO.ui.TabIndexedElement );
diff --git a/vendor/oojs/oojs-ui/src/widgets/TextInputMenuSelectWidget.js b/vendor/oojs/oojs-ui/src/widgets/TextInputMenuSelectWidget.js
new file mode 100644
index 00000000..6b971e81
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/TextInputMenuSelectWidget.js
@@ -0,0 +1,103 @@
+/**
+ * TextInputMenuSelectWidget is a menu that is specially designed to be positioned beneath
+ * a {@link OO.ui.TextInputWidget text input} field. The menu's position is automatically
+ * calculated and maintained when the menu is toggled or the window is resized.
+ * See OO.ui.ComboBoxWidget for an example of a widget that uses this class.
+ *
+ * @class
+ * @extends OO.ui.MenuSelectWidget
+ *
+ * @constructor
+ * @param {OO.ui.TextInputWidget} inputWidget Text input widget to provide menu for
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$container=input.$element] Element to render menu under
+ */
+OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( inputWidget, config ) {
+ // Allow passing positional parameters inside the config object
+ if ( OO.isPlainObject( inputWidget ) && config === undefined ) {
+ config = inputWidget;
+ inputWidget = config.inputWidget;
+ }
+
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.TextInputMenuSelectWidget.super.call( this, config );
+
+ // Properties
+ this.inputWidget = inputWidget;
+ this.$container = config.$container || this.inputWidget.$element;
+ this.onWindowResizeHandler = this.onWindowResize.bind( this );
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-textInputMenuSelectWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.TextInputMenuSelectWidget, OO.ui.MenuSelectWidget );
+
+/* Methods */
+
+/**
+ * Handle window resize event.
+ *
+ * @private
+ * @param {jQuery.Event} e Window resize event
+ */
+OO.ui.TextInputMenuSelectWidget.prototype.onWindowResize = function () {
+ this.position();
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.TextInputMenuSelectWidget.prototype.toggle = function ( visible ) {
+ visible = visible === undefined ? !this.isVisible() : !!visible;
+
+ var change = visible !== this.isVisible();
+
+ if ( change && visible ) {
+ // Make sure the width is set before the parent method runs.
+ // After this we have to call this.position(); again to actually
+ // position ourselves correctly.
+ this.position();
+ }
+
+ // Parent method
+ OO.ui.TextInputMenuSelectWidget.super.prototype.toggle.call( this, visible );
+
+ if ( change ) {
+ if ( this.isVisible() ) {
+ this.position();
+ $( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
+ } else {
+ $( this.getElementWindow() ).off( 'resize', this.onWindowResizeHandler );
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Position the menu.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.TextInputMenuSelectWidget.prototype.position = function () {
+ var $container = this.$container,
+ pos = OO.ui.Element.static.getRelativePosition( $container, this.$element.offsetParent() );
+
+ // Position under input
+ pos.top += $container.height();
+ this.$element.css( pos );
+
+ // Set width
+ this.setIdealSize( $container.width() );
+ // We updated the position, so re-evaluate the clipping state
+ this.clip();
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/TextInputWidget.js b/vendor/oojs/oojs-ui/src/widgets/TextInputWidget.js
new file mode 100644
index 00000000..1ba26641
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/TextInputWidget.js
@@ -0,0 +1,535 @@
+/**
+ * TextInputWidgets, like HTML text inputs, can be configured with options that customize the
+ * size of the field as well as its presentation. In addition, these widgets can be configured
+ * with {@link OO.ui.IconElement icons}, {@link OO.ui.IndicatorElement indicators}, an optional
+ * validation-pattern (used to determine if an input value is valid or not) and an input filter,
+ * which modifies incoming values rather than validating them.
+ * Please see the [OOjs UI documentation on MediaWiki] [1] for more information and examples.
+ *
+ * This widget can be used inside a HTML form, such as a OO.ui.FormLayout.
+ *
+ * @example
+ * // Example of a text input widget
+ * var textInput = new OO.ui.TextInputWidget( {
+ * value: 'Text input'
+ * } )
+ * $( 'body' ).append( textInput.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Inputs
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.PendingElement
+ * @mixins OO.ui.LabelElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [type='text'] The value of the HTML `type` attribute
+ * @cfg {string} [placeholder] Placeholder text
+ * @cfg {boolean} [autofocus=false] Use an HTML `autofocus` attribute to
+ * instruct the browser to focus this widget.
+ * @cfg {boolean} [readOnly=false] Prevent changes to the value of the text input.
+ * @cfg {number} [maxLength] Maximum number of characters allowed in the input.
+ * @cfg {boolean} [multiline=false] Allow multiple lines of text
+ * @cfg {boolean} [autosize=false] Automatically resize the text input to fit its content.
+ * Use the #maxRows config to specify a maximum number of displayed rows.
+ * @cfg {boolean} [maxRows=10] Maximum number of rows to display when #autosize is set to true.
+ * @cfg {string} [labelPosition='after'] The position of the inline label relative to that of
+ * the value or placeholder text: `'before'` or `'after'`
+ * @cfg {boolean} [required=false] Mark the field as required
+ * @cfg {RegExp|Function|string} [validate] Validation pattern: when string, a symbolic name of a
+ * pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer'
+ * (the value must contain only numbers); when RegExp, a regular expression that must match the
+ * value for it to be considered valid; when Function, a function receiving the value as parameter
+ * that must return true, or promise resolving to true, for it to be considered valid.
+ */
+OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
+ // Configuration initialization
+ config = $.extend( {
+ type: 'text',
+ labelPosition: 'after',
+ maxRows: 10
+ }, config );
+
+ // Parent constructor
+ OO.ui.TextInputWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.PendingElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+
+ // Properties
+ this.readOnly = false;
+ this.multiline = !!config.multiline;
+ this.autosize = !!config.autosize;
+ this.maxRows = config.maxRows;
+ this.validate = null;
+
+ // Clone for resizing
+ if ( this.autosize ) {
+ this.$clone = this.$input
+ .clone()
+ .insertAfter( this.$input )
+ .attr( 'aria-hidden', 'true' )
+ .addClass( 'oo-ui-element-hidden' );
+ }
+
+ this.setValidation( config.validate );
+ this.setLabelPosition( config.labelPosition );
+
+ // Events
+ this.$input.on( {
+ keypress: this.onKeyPress.bind( this ),
+ blur: this.onBlur.bind( this )
+ } );
+ this.$input.one( {
+ focus: this.onElementAttach.bind( this )
+ } );
+ this.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );
+ this.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );
+ this.on( 'labelChange', this.updatePosition.bind( this ) );
+ this.connect( this, { change: 'onChange' } );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-textInputWidget' )
+ .append( this.$icon, this.$indicator );
+ this.setReadOnly( !!config.readOnly );
+ if ( config.placeholder ) {
+ this.$input.attr( 'placeholder', config.placeholder );
+ }
+ if ( config.maxLength !== undefined ) {
+ this.$input.attr( 'maxlength', config.maxLength );
+ }
+ if ( config.autofocus ) {
+ this.$input.attr( 'autofocus', 'autofocus' );
+ }
+ if ( config.required ) {
+ this.$input.attr( 'required', 'required' );
+ this.$input.attr( 'aria-required', 'true' );
+ }
+ if ( this.label || config.autosize ) {
+ this.installParentChangeDetector();
+ }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.PendingElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.LabelElement );
+
+/* Static properties */
+
+OO.ui.TextInputWidget.static.validationPatterns = {
+ 'non-empty': /.+/,
+ integer: /^\d+$/
+};
+
+/* Events */
+
+/**
+ * An `enter` event is emitted when the user presses 'enter' inside the text box.
+ *
+ * Not emitted if the input is multiline.
+ *
+ * @event enter
+ */
+
+/* Methods */
+
+/**
+ * Handle icon mouse down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse down event
+ * @fires icon
+ */
+OO.ui.TextInputWidget.prototype.onIconMouseDown = function ( e ) {
+ if ( e.which === 1 ) {
+ this.$input[ 0 ].focus();
+ return false;
+ }
+};
+
+/**
+ * Handle indicator mouse down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse down event
+ * @fires indicator
+ */
+OO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
+ if ( e.which === 1 ) {
+ this.$input[ 0 ].focus();
+ return false;
+ }
+};
+
+/**
+ * Handle key press events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ * @fires enter If enter key is pressed and input is not multiline
+ */
+OO.ui.TextInputWidget.prototype.onKeyPress = function ( e ) {
+ if ( e.which === OO.ui.Keys.ENTER && !this.multiline ) {
+ this.emit( 'enter', e );
+ }
+};
+
+/**
+ * Handle blur events.
+ *
+ * @private
+ * @param {jQuery.Event} e Blur event
+ */
+OO.ui.TextInputWidget.prototype.onBlur = function () {
+ this.setValidityFlag();
+};
+
+/**
+ * Handle element attach events.
+ *
+ * @private
+ * @param {jQuery.Event} e Element attach event
+ */
+OO.ui.TextInputWidget.prototype.onElementAttach = function () {
+ // Any previously calculated size is now probably invalid if we reattached elsewhere
+ this.valCache = null;
+ this.adjustSize();
+ this.positionLabel();
+};
+
+/**
+ * Handle change events.
+ *
+ * @param {string} value
+ * @private
+ */
+OO.ui.TextInputWidget.prototype.onChange = function () {
+ this.setValidityFlag();
+ this.adjustSize();
+};
+
+/**
+ * Check if the input is {@link #readOnly read-only}.
+ *
+ * @return {boolean}
+ */
+OO.ui.TextInputWidget.prototype.isReadOnly = function () {
+ return this.readOnly;
+};
+
+/**
+ * Set the {@link #readOnly read-only} state of the input.
+ *
+ * @param {boolean} state Make input read-only
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {
+ this.readOnly = !!state;
+ this.$input.prop( 'readOnly', this.readOnly );
+ return this;
+};
+
+/**
+ * Support function for making #onElementAttach work across browsers.
+ *
+ * This whole function could be replaced with one line of code using the DOMNodeInsertedIntoDocument
+ * event, but it's not supported by Firefox and allegedly deprecated, so we only use it as fallback.
+ *
+ * Due to MutationObserver performance woes, #onElementAttach is only somewhat reliably called the
+ * first time that the element gets attached to the documented.
+ */
+OO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {
+ var mutationObserver, onRemove, topmostNode, fakeParentNode,
+ MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
+ widget = this;
+
+ if ( MutationObserver ) {
+ // The new way. If only it wasn't so ugly.
+
+ if ( this.$element.closest( 'html' ).length ) {
+ // Widget is attached already, do nothing. This breaks the functionality of this function when
+ // the widget is detached and reattached. Alas, doing this correctly with MutationObserver
+ // would require observation of the whole document, which would hurt performance of other,
+ // more important code.
+ return;
+ }
+
+ // Find topmost node in the tree
+ topmostNode = this.$element[0];
+ while ( topmostNode.parentNode ) {
+ topmostNode = topmostNode.parentNode;
+ }
+
+ // We have no way to detect the $element being attached somewhere without observing the entire
+ // DOM with subtree modifications, which would hurt performance. So we cheat: we hook to the
+ // parent node of $element, and instead detect when $element is removed from it (and thus
+ // probably attached somewhere else). If there is no parent, we create a "fake" one. If it
+ // doesn't get attached, we end up back here and create the parent.
+
+ mutationObserver = new MutationObserver( function ( mutations ) {
+ var i, j, removedNodes;
+ for ( i = 0; i < mutations.length; i++ ) {
+ removedNodes = mutations[ i ].removedNodes;
+ for ( j = 0; j < removedNodes.length; j++ ) {
+ if ( removedNodes[ j ] === topmostNode ) {
+ setTimeout( onRemove, 0 );
+ return;
+ }
+ }
+ }
+ } );
+
+ onRemove = function () {
+ // If the node was attached somewhere else, report it
+ if ( widget.$element.closest( 'html' ).length ) {
+ widget.onElementAttach();
+ }
+ mutationObserver.disconnect();
+ widget.installParentChangeDetector();
+ };
+
+ // Create a fake parent and observe it
+ fakeParentNode = $( '<div>' ).append( this.$element )[0];
+ mutationObserver.observe( fakeParentNode, { childList: true } );
+ } else {
+ // Using the DOMNodeInsertedIntoDocument event is much nicer and less magical, and works for
+ // detachment and reattachment, but it's not supported by Firefox and allegedly deprecated.
+ this.$element.on( 'DOMNodeInsertedIntoDocument', this.onElementAttach.bind( this ) );
+ }
+};
+
+/**
+ * Automatically adjust the size of the text input.
+ *
+ * This only affects #multiline inputs that are {@link #autosize autosized}.
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.adjustSize = function () {
+ var scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError, idealHeight;
+
+ if ( this.multiline && this.autosize && this.$input.val() !== this.valCache ) {
+ this.$clone
+ .val( this.$input.val() )
+ .attr( 'rows', '' )
+ // Set inline height property to 0 to measure scroll height
+ .css( 'height', 0 );
+
+ this.$clone.removeClass( 'oo-ui-element-hidden' );
+
+ this.valCache = this.$input.val();
+
+ scrollHeight = this.$clone[ 0 ].scrollHeight;
+
+ // Remove inline height property to measure natural heights
+ this.$clone.css( 'height', '' );
+ innerHeight = this.$clone.innerHeight();
+ outerHeight = this.$clone.outerHeight();
+
+ // Measure max rows height
+ this.$clone
+ .attr( 'rows', this.maxRows )
+ .css( 'height', 'auto' )
+ .val( '' );
+ maxInnerHeight = this.$clone.innerHeight();
+
+ // Difference between reported innerHeight and scrollHeight with no scrollbars present
+ // Equals 1 on Blink-based browsers and 0 everywhere else
+ measurementError = maxInnerHeight - this.$clone[ 0 ].scrollHeight;
+ idealHeight = Math.min( maxInnerHeight, scrollHeight + measurementError );
+
+ this.$clone.addClass( 'oo-ui-element-hidden' );
+
+ // Only apply inline height when expansion beyond natural height is needed
+ if ( idealHeight > innerHeight ) {
+ // Use the difference between the inner and outer height as a buffer
+ this.$input.css( 'height', idealHeight + ( outerHeight - innerHeight ) );
+ } else {
+ this.$input.css( 'height', '' );
+ }
+ }
+ return this;
+};
+
+/**
+ * @inheritdoc
+ * @private
+ */
+OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
+ return config.multiline ? $( '<textarea>' ) : $( '<input type="' + config.type + '" />' );
+};
+
+/**
+ * Check if the input supports multiple lines.
+ *
+ * @return {boolean}
+ */
+OO.ui.TextInputWidget.prototype.isMultiline = function () {
+ return !!this.multiline;
+};
+
+/**
+ * Check if the input automatically adjusts its size.
+ *
+ * @return {boolean}
+ */
+OO.ui.TextInputWidget.prototype.isAutosizing = function () {
+ return !!this.autosize;
+};
+
+/**
+ * Select the entire text of the input.
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.select = function () {
+ this.$input.select();
+ return this;
+};
+
+/**
+ * Set the validation pattern.
+ *
+ * The validation pattern is either a regular expression, a function, or the symbolic name of a
+ * pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer' (the
+ * value must contain only numbers).
+ *
+ * @param {RegExp|Function|string|null} validate Regular expression, function, or the symbolic name
+ * of a pattern (either ‘integer’ or ‘non-empty’) defined by the class.
+ */
+OO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {
+ if ( validate instanceof RegExp || validate instanceof Function ) {
+ this.validate = validate;
+ } else {
+ this.validate = this.constructor.static.validationPatterns[ validate ] || /.*/;
+ }
+};
+
+/**
+ * Sets the 'invalid' flag appropriately.
+ *
+ * @param {boolean} [isValid] Optionally override validation result
+ */
+OO.ui.TextInputWidget.prototype.setValidityFlag = function ( isValid ) {
+ var widget = this,
+ setFlag = function ( valid ) {
+ if ( !valid ) {
+ widget.$input.attr( 'aria-invalid', 'true' );
+ } else {
+ widget.$input.removeAttr( 'aria-invalid' );
+ }
+ widget.setFlags( { invalid: !valid } );
+ };
+
+ if ( isValid !== undefined ) {
+ setFlag( isValid );
+ } else {
+ this.isValid().done( setFlag );
+ }
+};
+
+/**
+ * Check if a value is valid.
+ *
+ * This method returns a promise that resolves with a boolean `true` if the current value is
+ * considered valid according to the supplied {@link #validate validation pattern}.
+ *
+ * @return {jQuery.Promise} A promise that resolves to a boolean `true` if the value is valid.
+ */
+OO.ui.TextInputWidget.prototype.isValid = function () {
+ if ( this.validate instanceof Function ) {
+ var result = this.validate( this.getValue() );
+ if ( $.isFunction( result.promise ) ) {
+ return result.promise();
+ } else {
+ return $.Deferred().resolve( !!result ).promise();
+ }
+ } else {
+ return $.Deferred().resolve( !!this.getValue().match( this.validate ) ).promise();
+ }
+};
+
+/**
+ * Set the position of the inline label relative to that of the value: `‘before’` or `‘after’`.
+ *
+ * @param {string} labelPosition Label position, 'before' or 'after'
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.setLabelPosition = function ( labelPosition ) {
+ this.labelPosition = labelPosition;
+ this.updatePosition();
+ return this;
+};
+
+/**
+ * Deprecated alias of #setLabelPosition
+ *
+ * @deprecated Use setLabelPosition instead.
+ */
+OO.ui.TextInputWidget.prototype.setPosition =
+ OO.ui.TextInputWidget.prototype.setLabelPosition;
+
+/**
+ * Update the position of the inline label.
+ *
+ * This method is called by #setLabelPosition, and can also be called on its own if
+ * something causes the label to be mispositioned.
+ *
+ *
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.updatePosition = function () {
+ var after = this.labelPosition === 'after';
+
+ this.$element
+ .toggleClass( 'oo-ui-textInputWidget-labelPosition-after', !!this.label && after )
+ .toggleClass( 'oo-ui-textInputWidget-labelPosition-before', !!this.label && !after );
+
+ if ( this.label ) {
+ this.positionLabel();
+ }
+
+ return this;
+};
+
+/**
+ * Position the label by setting the correct padding on the input.
+ *
+ * @private
+ * @chainable
+ */
+OO.ui.TextInputWidget.prototype.positionLabel = function () {
+ // Clear old values
+ this.$input
+ // Clear old values if present
+ .css( {
+ 'padding-right': '',
+ 'padding-left': ''
+ } );
+
+ if ( this.label ) {
+ this.$element.append( this.$label );
+ } else {
+ this.$label.detach();
+ return;
+ }
+
+ var after = this.labelPosition === 'after',
+ rtl = this.$element.css( 'direction' ) === 'rtl',
+ property = after === rtl ? 'padding-left' : 'padding-right';
+
+ this.$input.css( property, this.$label.outerWidth( true ) );
+
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ToggleButtonWidget.js b/vendor/oojs/oojs-ui/src/widgets/ToggleButtonWidget.js
new file mode 100644
index 00000000..bb36f083
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ToggleButtonWidget.js
@@ -0,0 +1,114 @@
+/**
+ * ToggleButtons are buttons that have a state (‘on’ or ‘off’) that is represented by a
+ * Boolean value. Like other {@link OO.ui.ButtonWidget buttons}, toggle buttons can be
+ * configured with {@link OO.ui.IconElement icons}, {@link OO.ui.IndicatorElement indicators},
+ * {@link OO.ui.TitledElement titles}, {@link OO.ui.FlaggedElement styling flags},
+ * and {@link OO.ui.LabelElement labels}. Please see
+ * the [OOjs UI documentation][1] on MediaWiki for more information.
+ *
+ * @example
+ * // Toggle buttons in the 'off' and 'on' state.
+ * var toggleButton1 = new OO.ui.ToggleButtonWidget( {
+ * label: 'Toggle Button off'
+ * } );
+ * var toggleButton2 = new OO.ui.ToggleButtonWidget( {
+ * label: 'Toggle Button on',
+ * value: true
+ * } );
+ * // Append the buttons to the DOM.
+ * $( 'body' ).append( toggleButton1.$element, toggleButton2.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Buttons_and_Switches#Toggle_buttons
+ *
+ * @class
+ * @extends OO.ui.ToggleWidget
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggedElement
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [value=false] The toggle button’s initial on/off
+ * state. By default, the button is in the 'off' state.
+ */
+OO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.ToggleButtonWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.ButtonElement.call( this, config );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
+ OO.ui.FlaggedElement.call( this, config );
+ OO.ui.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+
+ // Events
+ this.connect( this, { click: 'onAction' } );
+
+ // Initialization
+ this.$button.append( this.$icon, this.$label, this.$indicator );
+ this.$element
+ .addClass( 'oo-ui-toggleButtonWidget' )
+ .append( this.$button );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.FlaggedElement );
+OO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.TabIndexedElement );
+
+/* Methods */
+
+/**
+ * Handle the button action being triggered.
+ *
+ * @private
+ */
+OO.ui.ToggleButtonWidget.prototype.onAction = function () {
+ this.setValue( !this.value );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {
+ value = !!value;
+ if ( value !== this.value ) {
+ // Might be called from parent constructor before ButtonElement constructor
+ if ( this.$button ) {
+ this.$button.attr( 'aria-pressed', value.toString() );
+ }
+ this.setActive( value );
+ }
+
+ // Parent method
+ OO.ui.ToggleButtonWidget.super.prototype.setValue.call( this, value );
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {
+ if ( this.$button ) {
+ this.$button.removeAttr( 'aria-pressed' );
+ }
+ OO.ui.ButtonElement.prototype.setButtonElement.call( this, $button );
+ this.$button.attr( 'aria-pressed', this.value.toString() );
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ToggleSwitchWidget.js b/vendor/oojs/oojs-ui/src/widgets/ToggleSwitchWidget.js
new file mode 100644
index 00000000..94f0f996
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ToggleSwitchWidget.js
@@ -0,0 +1,92 @@
+/**
+ * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean
+ * value (`true` for ‘on’, and `false` otherwise, the default). The ‘off’ state is represented
+ * visually by a slider in the leftmost position.
+ *
+ * @example
+ * // Toggle switches in the 'off' and 'on' position.
+ * var toggleSwitch1 = new OO.ui.ToggleSwitchWidget();
+ * var toggleSwitch2 = new OO.ui.ToggleSwitchWidget( {
+ * value: true
+ * } );
+ *
+ * // Create a FieldsetLayout to layout and label switches
+ * var fieldset = new OO.ui.FieldsetLayout( {
+ * label: 'Toggle switches'
+ * } );
+ * fieldset.addItems( [
+ * new OO.ui.FieldLayout( toggleSwitch1, { label: 'Off', align: 'top' } ),
+ * new OO.ui.FieldLayout( toggleSwitch2, { label: 'On', align: 'top' } )
+ * ] );
+ * $( 'body' ).append( fieldset.$element );
+ *
+ * @class
+ * @extends OO.ui.ToggleWidget
+ * @mixins OO.ui.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [value=false] The toggle switch’s initial on/off state.
+ * By default, the toggle switch is in the 'off' position.
+ */
+OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
+ // Parent constructor
+ OO.ui.ToggleSwitchWidget.super.call( this, config );
+
+ // Mixin constructors
+ OO.ui.TabIndexedElement.call( this, config );
+
+ // Properties
+ this.dragging = false;
+ this.dragStart = null;
+ this.sliding = false;
+ this.$glow = $( '<span>' );
+ this.$grip = $( '<span>' );
+
+ // Events
+ this.$element.on( {
+ click: this.onClick.bind( this ),
+ keypress: this.onKeyPress.bind( this )
+ } );
+
+ // Initialization
+ this.$glow.addClass( 'oo-ui-toggleSwitchWidget-glow' );
+ this.$grip.addClass( 'oo-ui-toggleSwitchWidget-grip' );
+ this.$element
+ .addClass( 'oo-ui-toggleSwitchWidget' )
+ .attr( 'role', 'checkbox' )
+ .append( this.$glow, this.$grip );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );
+OO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.TabIndexedElement );
+
+/* Methods */
+
+/**
+ * Handle mouse click events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {
+ if ( !this.isDisabled() && e.which === 1 ) {
+ this.setValue( !this.value );
+ }
+ return false;
+};
+
+/**
+ * Handle key press events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.ToggleSwitchWidget.prototype.onKeyPress = function ( e ) {
+ if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+ this.setValue( !this.value );
+ return false;
+ }
+};
diff --git a/vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js b/vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js
new file mode 100644
index 00000000..16d6ba50
--- /dev/null
+++ b/vendor/oojs/oojs-ui/src/widgets/ToggleWidget.js
@@ -0,0 +1,71 @@
+/**
+ * ToggleWidget implements basic behavior of widgets with an on/off state.
+ * Please see OO.ui.ToggleButtonWidget and OO.ui.ToggleSwitchWidget for examples.
+ *
+ * @abstract
+ * @class
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [value=false] The toggle’s initial on/off state.
+ * By default, the toggle is in the 'off' state.
+ */
+OO.ui.ToggleWidget = function OoUiToggleWidget( config ) {
+ // Configuration initialization
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.ToggleWidget.super.call( this, config );
+
+ // Properties
+ this.value = null;
+
+ // Initialization
+ this.$element.addClass( 'oo-ui-toggleWidget' );
+ this.setValue( !!config.value );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ToggleWidget, OO.ui.Widget );
+
+/* Events */
+
+/**
+ * @event change
+ *
+ * A change event is emitted when the on/off state of the toggle changes.
+ *
+ * @param {boolean} value Value representing the new state of the toggle
+ */
+
+/* Methods */
+
+/**
+ * Get the value representing the toggle’s state.
+ *
+ * @return {boolean} The on/off state of the toggle
+ */
+OO.ui.ToggleWidget.prototype.getValue = function () {
+ return this.value;
+};
+
+/**
+ * Set the state of the toggle: `true` for 'on', `false' for 'off'.
+ *
+ * @param {boolean} value The state of the toggle
+ * @fires change
+ * @chainable
+ */
+OO.ui.ToggleWidget.prototype.setValue = function ( value ) {
+ value = !!value;
+ if ( this.value !== value ) {
+ this.value = value;
+ this.emit( 'change', value );
+ this.$element.toggleClass( 'oo-ui-toggleWidget-on', value );
+ this.$element.toggleClass( 'oo-ui-toggleWidget-off', !value );
+ this.$element.attr( 'aria-checked', value.toString() );
+ }
+ return this;
+};
diff --git a/vendor/oojs/oojs-ui/tests/Element.test.js b/vendor/oojs/oojs-ui/tests/Element.test.js
new file mode 100644
index 00000000..b37d8e35
--- /dev/null
+++ b/vendor/oojs/oojs-ui/tests/Element.test.js
@@ -0,0 +1,52 @@
+QUnit.module( 'Element', {
+ setup: function () {
+ this.fixture = document.createElement( 'div' );
+ document.body.appendChild( this.fixture );
+
+ this.makeFrame = function () {
+ var frame = document.createElement( 'iframe' );
+ this.fixture.appendChild( frame );
+ return ( frame.contentWindow && frame.contentWindow.document ) || frame.contentDocument;
+ };
+ },
+ teardown: function () {
+ this.fixture.parentNode.removeChild( this.fixture );
+ this.fixture = null;
+ }
+} );
+
+QUnit.test( 'static.getDocument', 10, function ( assert ) {
+ var frameDoc, frameEl, frameDiv,
+ el = this.fixture,
+ div = document.createElement( 'div' ),
+ $el = $( this.fixture ),
+ $div = $( '<div>' ),
+ win = window,
+ doc = document;
+
+ frameDoc = this.makeFrame();
+ frameEl = frameDoc.createElement( 'span' );
+ frameDoc.documentElement.appendChild( frameEl );
+ frameDiv = frameDoc.createElement( 'div' );
+
+ assert.strictEqual( OO.ui.Element.static.getDocument( $el ), doc, 'jQuery' );
+ assert.strictEqual( OO.ui.Element.static.getDocument( $div ), doc, 'jQuery (detached)' );
+ assert.strictEqual( OO.ui.Element.static.getDocument( el ), doc, 'HTMLElement' );
+ assert.strictEqual( OO.ui.Element.static.getDocument( div ), doc, 'HTMLElement (detached)' );
+ assert.strictEqual( OO.ui.Element.static.getDocument( win ), doc, 'Window' );
+ assert.strictEqual( OO.ui.Element.static.getDocument( doc ), doc, 'HTMLDocument' );
+
+ assert.strictEqual( OO.ui.Element.static.getDocument( frameEl ), frameDoc, 'HTMLElement (framed)' );
+ assert.strictEqual( OO.ui.Element.static.getDocument( frameDiv ), frameDoc, 'HTMLElement (framed, detached)' );
+ assert.strictEqual( OO.ui.Element.static.getDocument( frameDoc ), frameDoc, 'HTMLDocument (framed)' );
+
+ assert.strictEqual( OO.ui.Element.static.getDocument( {} ), null, 'Invalid' );
+} );
+
+QUnit.test( 'getElementDocument', 1, function ( assert ) {
+ var el, doc;
+
+ doc = document;
+ el = new OO.ui.Element();
+ assert.strictEqual( el.getElementDocument(), doc );
+} );
diff --git a/vendor/oojs/oojs-ui/tests/JSPHP.test.karma.js b/vendor/oojs/oojs-ui/tests/JSPHP.test.karma.js
new file mode 100644
index 00000000..1a1473c1
--- /dev/null
+++ b/vendor/oojs/oojs-ui/tests/JSPHP.test.karma.js
@@ -0,0 +1,61 @@
+QUnit.module( 'JSPHP' );
+
+( function () {
+ // Generate some tests based on the test suite data and HTML from PHP version.
+ var theme, klassName,
+ themes = {
+ ApexTheme: new OO.ui.ApexTheme(),
+ MediaWikiTheme: new OO.ui.MediaWikiTheme()
+ };
+
+ function unstub( value ) {
+ var config;
+ if ( typeof value === 'string' && value.substr( 0, 13 ) === '_placeholder_' ) {
+ value = JSON.parse( value.substr( 13 ) );
+ config = OO.copy( value.config, null, unstub );
+ return new OO.ui[ value.class ]( config );
+ }
+ }
+
+ function makeTest( theme, klassName, tests, output ) {
+ QUnit.test( theme + ': ' + klassName, tests.length * 2, function ( assert ) {
+ var test, config, instance, infused, $fromPhp, i, testName;
+ OO.ui.theme = themes[ theme ];
+ for ( i = 0; i < tests.length; i++ ) {
+ test = tests[ i ];
+ // Unstub placeholders
+ config = OO.copy( test.config, null, unstub );
+
+ instance = new OO.ui[ test.class ]( config );
+ $fromPhp = $( $.parseHTML( output[ i ] ) );
+
+ $( 'body' ).append( instance.$element, $fromPhp );
+
+ // Updating theme classes is normally debounced, we need to do it immediately
+ instance.debouncedUpdateThemeClasses();
+
+ testName = JSON.stringify( test.config );
+ assert.equalDomElement( instance.$element[ 0 ], $fromPhp[ 0 ], testName, true );
+
+ infused = OO.ui.infuse( $fromPhp[ 0 ] );
+ infused.debouncedUpdateThemeClasses();
+
+ assert.equalDomElement( instance.$element[ 0 ], infused.$element[ 0 ], testName + ' (infuse)' );
+ instance.$element.add( infused.$element ).detach();
+ }
+ } );
+ }
+
+ /*global testSuiteConfigs, testSuitePHPOutput */
+ for ( klassName in testSuiteConfigs ) {
+ for ( theme in themes ) {
+ makeTest(
+ theme,
+ klassName,
+ testSuiteConfigs[ klassName ],
+ testSuitePHPOutput[ theme ][ klassName ]
+ );
+ }
+ }
+
+} )();
diff --git a/vendor/oojs/oojs-ui/tests/JSPHP.test.standalone.js b/vendor/oojs/oojs-ui/tests/JSPHP.test.standalone.js
new file mode 100644
index 00000000..1cbebc3a
--- /dev/null
+++ b/vendor/oojs/oojs-ui/tests/JSPHP.test.standalone.js
@@ -0,0 +1,55 @@
+QUnit.module( 'JSPHP' );
+
+( function () {
+ // Generate some tests based on the test suite data and HTML from PHP version.
+ var theme, klassName,
+ themes = {
+ ApexTheme: new OO.ui.ApexTheme(),
+ MediaWikiTheme: new OO.ui.MediaWikiTheme()
+ };
+
+ function unstub( value ) {
+ var config;
+ if ( typeof value === 'string' && value.substr( 0, 13 ) === '_placeholder_' ) {
+ value = JSON.parse( value.substr( 13 ) );
+ config = OO.copy( value.config, null, unstub );
+ return new OO.ui[ value.class ]( config );
+ }
+ }
+
+ function makeTest( theme, klassName, tests ) {
+ QUnit.test( theme + ': ' + klassName, tests.length * 2, function ( assert ) {
+ var test, config, instance, infused, id, fromPhp, i, testName;
+ OO.ui.theme = themes[ theme ];
+ for ( i = 0; i < tests.length; i++ ) {
+ test = tests[ i ];
+ // Unstub placeholders
+ config = OO.copy( test.config, null, unstub );
+
+ instance = new OO.ui[ test.class ]( config );
+
+ id = 'JSPHPTestSuite_' + theme + klassName + i;
+ fromPhp = document.getElementById( id ).firstChild;
+ instance.$element.insertBefore( fromPhp );
+
+ // Updating theme classes is normally debounced, we need to do it immediately
+ instance.debouncedUpdateThemeClasses();
+
+ testName = JSON.stringify( test.config );
+ assert.equalDomElement( instance.$element[ 0 ], fromPhp, testName );
+
+ infused = OO.ui.infuse( fromPhp );
+ infused.debouncedUpdateThemeClasses();
+
+ assert.equalDomElement( instance.$element[ 0 ], infused.$element[ 0 ], testName + ' (infuse)' );
+ }
+ } );
+ }
+
+ for ( klassName in OO.ui.JSPHPTestSuite ) {
+ for ( theme in themes ) {
+ makeTest( theme, klassName, OO.ui.JSPHPTestSuite[ klassName ] );
+ }
+ }
+
+} )();
diff --git a/vendor/oojs/oojs-ui/tests/Process.test.js b/vendor/oojs/oojs-ui/tests/Process.test.js
new file mode 100644
index 00000000..3f036407
--- /dev/null
+++ b/vendor/oojs/oojs-ui/tests/Process.test.js
@@ -0,0 +1,179 @@
+QUnit.module( 'OO.ui.Process' );
+
+/* Tests */
+
+QUnit.test( 'next', 1, function ( assert ) {
+ var process = new OO.ui.Process(),
+ result = [];
+
+ process
+ .next( function () {
+ result.push( 0 );
+ } )
+ .next( function () {
+ result.push( 1 );
+ } )
+ .next( function () {
+ result.push( 2 );
+ } )
+ .execute();
+
+ assert.deepEqual( result, [ 0, 1, 2 ], 'Steps can be added at the end' );
+} );
+
+QUnit.test( 'first', 1, function ( assert ) {
+ var process = new OO.ui.Process(),
+ result = [];
+
+ process
+ .first( function () {
+ result.push( 0 );
+ } )
+ .first( function () {
+ result.push( 1 );
+ } )
+ .first( function () {
+ result.push( 2 );
+ } )
+ .execute();
+
+ assert.deepEqual( result, [ 2, 1, 0 ], 'Steps can be added at the beginning' );
+} );
+
+QUnit.asyncTest( 'execute (async)', 1, function ( assert ) {
+ // Async
+ var process = new OO.ui.Process(),
+ result = [];
+
+ process
+ .next( function () {
+ var deferred = $.Deferred();
+
+ setTimeout( function () {
+ result.push( 1 );
+ deferred.resolve();
+ }, 10 );
+
+ return deferred.promise();
+ } )
+ .first( function () {
+ var deferred = $.Deferred();
+
+ setTimeout( function () {
+ result.push( 0 );
+ deferred.resolve();
+ }, 10 );
+
+ return deferred.promise();
+ } )
+ .next( function () {
+ result.push( 2 );
+ } );
+
+ process.execute().done( function () {
+ assert.deepEqual(
+ result,
+ [ 0, 1, 2 ],
+ 'Synchronous and asynchronous steps are executed in the correct order'
+ );
+ QUnit.start();
+ } );
+} );
+
+QUnit.asyncTest( 'execute (return false)', 1, function ( assert ) {
+ var process = new OO.ui.Process(),
+ result = [];
+
+ process
+ .next( function () {
+ var deferred = $.Deferred();
+
+ setTimeout( function () {
+ result.push( 0 );
+ deferred.resolve();
+ }, 10 );
+
+ return deferred.promise();
+ } )
+ .next( function () {
+ result.push( 1 );
+ return false;
+ } )
+ .next( function () {
+ // Should never be run because previous step is rejected
+ result.push( 2 );
+ } );
+
+ process.execute().fail( function () {
+ assert.deepEqual(
+ result,
+ [ 0, 1 ],
+ 'Process is stopped when a step returns false'
+ );
+ QUnit.start();
+ } );
+} );
+
+QUnit.asyncTest( 'execute (async reject)', 1, function ( assert ) {
+ var process = new OO.ui.Process(),
+ result = [];
+
+ process
+ .next( function () {
+ result.push( 0 );
+ } )
+ .next( function () {
+ var deferred = $.Deferred();
+
+ setTimeout( function () {
+ result.push( 1 );
+ deferred.reject();
+ }, 10 );
+
+ return deferred.promise();
+ } )
+ .next( function () {
+ // Should never be run because previous step is rejected
+ result.push( 2 );
+ } );
+
+ process.execute().fail( function () {
+ assert.deepEqual(
+ result,
+ [ 0, 1 ],
+ 'Process is stopped when a step returns a promise that is then rejected'
+ );
+ QUnit.start();
+ } );
+} );
+
+QUnit.asyncTest( 'execute (wait)', 1, function ( assert ) {
+ var process = new OO.ui.Process(),
+ result = [];
+
+ process
+ .next( function () {
+ result.push( 'A' );
+ return 10;
+ } )
+ .next( function () {
+ result.push( 'B' );
+ } );
+
+ // Steps defined above don't run until execute()
+ result.push( 'before' );
+
+ // Process yields between step A and B
+ setTimeout( function () {
+ result.push( 'yield' );
+ } );
+
+ process.execute().done( function () {
+ assert.deepEqual(
+ result,
+ [ 'before', 'A', 'yield', 'B' ],
+ 'Process is stopped when a step returns a promise that is then rejected'
+ );
+ QUnit.start();
+ } );
+} );
diff --git a/vendor/oojs/oojs-ui/tests/QUnit.assert.equalDomElement.js b/vendor/oojs/oojs-ui/tests/QUnit.assert.equalDomElement.js
new file mode 100644
index 00000000..f041c258
--- /dev/null
+++ b/vendor/oojs/oojs-ui/tests/QUnit.assert.equalDomElement.js
@@ -0,0 +1,113 @@
+/*!
+ * A QUnit assertion to compare DOM node trees.
+ *
+ * Adapted from VisualEditor plugin for QUnit. Additionally supports comparing properties to
+ * attributes (for dynamically generated nodes) and order-insensitive comparison of classes on DOM
+ * nodes.
+ *
+ * @copyright 2011-2015 VisualEditor Team and others; see http://ve.mit-license.org
+ * @copyright 2011-2015 OOjs Team and other contributors
+ */
+
+( function ( QUnit ) {
+
+ /**
+ * Build a summary of an HTML element.
+ *
+ * Summaries include node name, text, attributes and recursive summaries of children.
+ * Used for serializing or comparing HTML elements.
+ *
+ * @private
+ * @param {HTMLElement} element Element to summarize
+ * @param {boolean} [includeHtml=false] Include an HTML summary for element nodes
+ * @return {Object} Summary of element.
+ */
+ function getDomElementSummary( element, includeHtml ) {
+ var i, name,
+ summary = {
+ type: element.nodeName.toLowerCase(),
+ // $( '<div><textarea>Foo</textarea></div>' )[0].textContent === 'Foo', which breaks
+ // comparisons :( childNodes are summarized anyway, this would just be a nicety
+ // text: element.textContent,
+ attributes: {},
+ children: []
+ };
+
+ if ( includeHtml && element.nodeType === Node.ELEMENT_NODE ) {
+ summary.html = element.outerHTML;
+ }
+
+ // Gather attributes
+ if ( element.attributes ) {
+ for ( i = 0; i < element.attributes.length; i++ ) {
+ name = element.attributes[ i ].name;
+ if ( name.substr( 0, 5 ) !== 'data-' && name !== 'id' ) {
+ summary.attributes[ name ] = element.attributes[ i ].value;
+ }
+ }
+ }
+
+ // Sort classes
+ if ( summary.attributes.class ) {
+ summary.attributes.class = summary.attributes.class.split( ' ' ).sort().join( ' ' );
+ }
+
+ // Gather certain properties and pretend they are attributes.
+ // Take note of casing differences.
+ if ( element.value !== undefined ) {
+ summary.attributes.value = element.value;
+ }
+ if ( element.readOnly !== undefined ) {
+ summary.attributes.readonly = element.readOnly;
+ }
+ if ( element.checked !== undefined ) {
+ summary.attributes.checked = element.checked;
+ }
+ if ( element.disabled !== undefined ) {
+ summary.attributes.disabled = element.disabled;
+ }
+ if ( element.tabIndex !== undefined ) {
+ summary.attributes.tabindex = element.tabIndex;
+ }
+
+ // Summarize children
+ if ( element.childNodes ) {
+ for ( i = 0; i < element.childNodes.length; i++ ) {
+ summary.children.push( getDomElementSummary( element.childNodes[ i ], includeHtml ) );
+ }
+ }
+
+ // Special handling for textareas, where we only want to account for the content as the 'value'
+ // property, never as childNodes or textContent
+ if ( summary.type === 'textarea' ) {
+ // summary.text = '';
+ summary.children = [];
+ }
+
+ return summary;
+ }
+
+ /**
+ * @method
+ * @static
+ */
+ QUnit.assert.equalDomElement = function ( actual, expected, message, stringify ) {
+ var actualSummary = getDomElementSummary( actual ),
+ expectedSummary = getDomElementSummary( expected ),
+ actualSummaryHtml = getDomElementSummary( actual, true ),
+ expectedSummaryHtml = getDomElementSummary( expected, true );
+
+ // When running with Karma, the objects are not nicely stringified in the output when the test
+ // fails, only showing "Expected: [object Object], Actual: [object Object]" instead. Running
+ // QUnit in browser does this, and stringifying causes double escaping in output.
+ if ( stringify ) {
+ actualSummaryHtml = JSON.stringify( actualSummaryHtml, null, 2 );
+ expectedSummaryHtml = JSON.stringify( expectedSummaryHtml, null, 2 );
+ }
+
+ QUnit.push(
+ QUnit.equiv( actualSummary, expectedSummary ), actualSummaryHtml, expectedSummaryHtml, message
+ );
+ };
+
+}( QUnit ) );
diff --git a/vendor/oojs/oojs-ui/tests/elements/FlaggedElement.test.js b/vendor/oojs/oojs-ui/tests/elements/FlaggedElement.test.js
new file mode 100644
index 00000000..f5c483ad
--- /dev/null
+++ b/vendor/oojs/oojs-ui/tests/elements/FlaggedElement.test.js
@@ -0,0 +1,64 @@
+( function () {
+ QUnit.module( 'FlaggedElement' );
+
+ function TestElement( config ) {
+ TestElement.super.call( this, config );
+ OO.ui.FlaggedElement.call( this, config );
+ }
+ OO.inheritClass( TestElement, OO.ui.Widget );
+ OO.mixinClass( TestElement, OO.ui.FlaggedElement );
+
+ QUnit.test( 'constructor', 2, function ( assert ) {
+ var element;
+
+ element = new TestElement();
+ assert.deepEqual( element.getFlags(), [], 'No flags by default' );
+
+ element = new TestElement( {
+ flags: [ 'foo' ]
+ } );
+ assert.deepEqual( element.getFlags(), [ 'foo' ], 'Config option "flags"' );
+ } );
+
+ QUnit.test( 'getFlags', 2, function ( assert ) {
+ var element = new TestElement();
+
+ element.setFlags( 'foo' );
+ assert.deepEqual( element.getFlags(), [ 'foo' ], 'Flag was set' );
+
+ element.clearFlags();
+ assert.deepEqual( element.getFlags(), [], 'Flag was removed' );
+ } );
+
+ QUnit.test( 'hasFlag', 3, function ( assert ) {
+ var element = new TestElement();
+ assert.deepEqual( element.hasFlag( 'foo' ), false, 'Flag absent by default' );
+
+ element.setFlags( 'foo' );
+ assert.deepEqual( element.hasFlag( 'foo' ), true, 'Flag was set' );
+
+ element.clearFlags();
+ assert.deepEqual( element.hasFlag( 'foo' ), false, 'Flag was removed' );
+ } );
+
+ QUnit.test( 'clearFlags', 1, function ( assert ) {
+ var element = new TestElement();
+ element.setFlags( 'foo' );
+ element.clearFlags();
+ assert.deepEqual( element.hasFlag( 'foo' ), false, 'Flag was removed' );
+ } );
+
+ QUnit.test( 'setFlags', 5, function ( assert ) {
+ var element = new TestElement();
+ element.setFlags( 'foo' );
+ assert.deepEqual( element.hasFlag( 'foo' ), true, 'string' );
+
+ element.setFlags( [ 'bar', 'qux' ] );
+ assert.deepEqual( element.hasFlag( 'bar' ), true, 'array[ 0 ]' );
+ assert.deepEqual( element.hasFlag( 'qux' ), true, 'array[ 1 ]' );
+
+ element.setFlags( { bar: false, quux: true } );
+ assert.deepEqual( element.hasFlag( 'bar' ), false, 'object set' );
+ assert.deepEqual( element.hasFlag( 'quux' ), true, 'object remove' );
+ } );
+}() );
diff --git a/vendor/oojs/oojs-ui/tests/index.php b/vendor/oojs/oojs-ui/tests/index.php
new file mode 100644
index 00000000..d8e06835
--- /dev/null
+++ b/vendor/oojs/oojs-ui/tests/index.php
@@ -0,0 +1,77 @@
+<?php
+ $autoload = '../vendor/autoload.php';
+ if ( !file_exists( $autoload ) ) {
+ echo '<h1>Did you forget to run <code>composer install</code>?</h1>';
+ exit;
+ }
+ require_once $autoload;
+
+ $testSuiteFile = 'JSPHP-suite.json';
+ if ( !file_exists( $testSuiteFile ) ) {
+ echo '<h1>Did you forget to run <code>grunt build</code>?</h1>';
+ exit;
+ }
+ $testSuiteJSON = file_get_contents( $testSuiteFile );
+ $testSuite = json_decode( $testSuiteJSON, true );
+?>
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+<head>
+ <meta charset="UTF-8">
+ <title>OOjs UI Test Suite</title>
+ <link rel="stylesheet" href="../node_modules/qunitjs/qunit/qunit.css">
+ <script src="../node_modules/qunitjs/qunit/qunit.js"></script>
+ <script src="./QUnit.assert.equalDomElement.js"></script>
+ <script>
+ QUnit.config.requireExpects = true;
+ </script>
+ <!-- Dependencies -->
+ <script src="../node_modules/jquery/dist/jquery.js"></script>
+ <script src="../node_modules/oojs/dist/oojs.jquery.js"></script>
+ <!-- Source code -->
+ <script src="../dist/oojs-ui.js"></script>
+ <script src="../dist/oojs-ui-apex.js"></script>
+ <script src="../dist/oojs-ui-mediawiki.js"></script>
+ <!-- Test suites -->
+ <script src="./Element.test.js"></script>
+ <script src="./Process.test.js"></script>
+ <script src="./elements/FlaggedElement.test.js"></script>
+ <!-- JS/PHP comparison tests -->
+ <script>OO.ui.JSPHPTestSuite = <?php echo $testSuiteJSON; ?></script>
+ <script src="./JSPHP.test.standalone.js"></script>
+</head>
+<body>
+ <div id="JSPHPTestSuite" style="display: none;">
+ <?php
+ function new_OOUI( $class, $config = array() ) {
+ $class = "OOUI\\" . $class;
+ return new $class( $config );
+ }
+ function unstub( &$value ) {
+ if ( is_string( $value ) && substr( $value, 0, 13 ) === '_placeholder_' ) {
+ $value = json_decode( substr( $value, 13 ), true );
+ array_walk_recursive( $value['config'], 'unstub' );
+ $value = new_OOUI( $value['class'], $value['config'] );
+ }
+ }
+ // Keep synchronized with bin/generate-JSPHP-for-karma.php
+ $themes = array( 'ApexTheme', 'MediaWikiTheme' );
+ foreach ( $themes as $theme ) {
+ OOUI\Theme::setSingleton( new_OOUI( $theme ) );
+ foreach ( $testSuite as $className => $tests ) {
+ foreach ( $tests as $index => $test ) {
+ // Unstub placeholders
+ $config = $test['config'];
+ array_walk_recursive( $config, 'unstub' );
+ $config['infusable'] = true;
+ $instance = new_OOUI( $test['class'], $config );
+ echo "<div id='JSPHPTestSuite_$theme$className$index'>$instance</div>\n";
+ }
+ }
+ }
+ ?>
+ </div>
+ <div id="qunit"></div>
+ <div id="qunit-fixture"></div>
+</body>
+</html>
diff --git a/vendor/psr/log/LICENSE b/vendor/psr/log/LICENSE
new file mode 100644
index 00000000..474c952b
--- /dev/null
+++ b/vendor/psr/log/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2012 PHP Framework Interoperability Group
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/vendor/psr/log/Psr/Log/AbstractLogger.php b/vendor/psr/log/Psr/Log/AbstractLogger.php
new file mode 100644
index 00000000..00f90345
--- /dev/null
+++ b/vendor/psr/log/Psr/Log/AbstractLogger.php
@@ -0,0 +1,120 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * This is a simple Logger implementation that other Loggers can inherit from.
+ *
+ * It simply delegates all log-level-specific methods to the `log` method to
+ * reduce boilerplate code that a simple Logger that does the same thing with
+ * messages regardless of the error level has to implement.
+ */
+abstract class AbstractLogger implements LoggerInterface
+{
+ /**
+ * System is unusable.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function emergency($message, array $context = array())
+ {
+ $this->log(LogLevel::EMERGENCY, $message, $context);
+ }
+
+ /**
+ * Action must be taken immediately.
+ *
+ * Example: Entire website down, database unavailable, etc. This should
+ * trigger the SMS alerts and wake you up.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function alert($message, array $context = array())
+ {
+ $this->log(LogLevel::ALERT, $message, $context);
+ }
+
+ /**
+ * Critical conditions.
+ *
+ * Example: Application component unavailable, unexpected exception.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function critical($message, array $context = array())
+ {
+ $this->log(LogLevel::CRITICAL, $message, $context);
+ }
+
+ /**
+ * Runtime errors that do not require immediate action but should typically
+ * be logged and monitored.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function error($message, array $context = array())
+ {
+ $this->log(LogLevel::ERROR, $message, $context);
+ }
+
+ /**
+ * Exceptional occurrences that are not errors.
+ *
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
+ * that are not necessarily wrong.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function warning($message, array $context = array())
+ {
+ $this->log(LogLevel::WARNING, $message, $context);
+ }
+
+ /**
+ * Normal but significant events.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function notice($message, array $context = array())
+ {
+ $this->log(LogLevel::NOTICE, $message, $context);
+ }
+
+ /**
+ * Interesting events.
+ *
+ * Example: User logs in, SQL logs.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function info($message, array $context = array())
+ {
+ $this->log(LogLevel::INFO, $message, $context);
+ }
+
+ /**
+ * Detailed debug information.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function debug($message, array $context = array())
+ {
+ $this->log(LogLevel::DEBUG, $message, $context);
+ }
+}
diff --git a/vendor/psr/log/Psr/Log/InvalidArgumentException.php b/vendor/psr/log/Psr/Log/InvalidArgumentException.php
new file mode 100644
index 00000000..67f852d1
--- /dev/null
+++ b/vendor/psr/log/Psr/Log/InvalidArgumentException.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Psr\Log;
+
+class InvalidArgumentException extends \InvalidArgumentException
+{
+}
diff --git a/vendor/psr/log/Psr/Log/LogLevel.php b/vendor/psr/log/Psr/Log/LogLevel.php
new file mode 100644
index 00000000..e32c151c
--- /dev/null
+++ b/vendor/psr/log/Psr/Log/LogLevel.php
@@ -0,0 +1,18 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Describes log levels
+ */
+class LogLevel
+{
+ const EMERGENCY = 'emergency';
+ const ALERT = 'alert';
+ const CRITICAL = 'critical';
+ const ERROR = 'error';
+ const WARNING = 'warning';
+ const NOTICE = 'notice';
+ const INFO = 'info';
+ const DEBUG = 'debug';
+}
diff --git a/vendor/psr/log/Psr/Log/LoggerAwareInterface.php b/vendor/psr/log/Psr/Log/LoggerAwareInterface.php
new file mode 100644
index 00000000..2eebc4eb
--- /dev/null
+++ b/vendor/psr/log/Psr/Log/LoggerAwareInterface.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Describes a logger-aware instance
+ */
+interface LoggerAwareInterface
+{
+ /**
+ * Sets a logger instance on the object
+ *
+ * @param LoggerInterface $logger
+ * @return null
+ */
+ public function setLogger(LoggerInterface $logger);
+}
diff --git a/vendor/psr/log/Psr/Log/LoggerAwareTrait.php b/vendor/psr/log/Psr/Log/LoggerAwareTrait.php
new file mode 100644
index 00000000..f087a3da
--- /dev/null
+++ b/vendor/psr/log/Psr/Log/LoggerAwareTrait.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Basic Implementation of LoggerAwareInterface.
+ */
+trait LoggerAwareTrait
+{
+ /** @var LoggerInterface */
+ protected $logger;
+
+ /**
+ * Sets a logger.
+ *
+ * @param LoggerInterface $logger
+ */
+ public function setLogger(LoggerInterface $logger)
+ {
+ $this->logger = $logger;
+ }
+}
diff --git a/vendor/psr/log/Psr/Log/LoggerInterface.php b/vendor/psr/log/Psr/Log/LoggerInterface.php
new file mode 100644
index 00000000..476bb962
--- /dev/null
+++ b/vendor/psr/log/Psr/Log/LoggerInterface.php
@@ -0,0 +1,114 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * Describes a logger instance
+ *
+ * The message MUST be a string or object implementing __toString().
+ *
+ * The message MAY contain placeholders in the form: {foo} where foo
+ * will be replaced by the context data in key "foo".
+ *
+ * The context array can contain arbitrary data, the only assumption that
+ * can be made by implementors is that if an Exception instance is given
+ * to produce a stack trace, it MUST be in a key named "exception".
+ *
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
+ * for the full interface specification.
+ */
+interface LoggerInterface
+{
+ /**
+ * System is unusable.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function emergency($message, array $context = array());
+
+ /**
+ * Action must be taken immediately.
+ *
+ * Example: Entire website down, database unavailable, etc. This should
+ * trigger the SMS alerts and wake you up.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function alert($message, array $context = array());
+
+ /**
+ * Critical conditions.
+ *
+ * Example: Application component unavailable, unexpected exception.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function critical($message, array $context = array());
+
+ /**
+ * Runtime errors that do not require immediate action but should typically
+ * be logged and monitored.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function error($message, array $context = array());
+
+ /**
+ * Exceptional occurrences that are not errors.
+ *
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
+ * that are not necessarily wrong.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function warning($message, array $context = array());
+
+ /**
+ * Normal but significant events.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function notice($message, array $context = array());
+
+ /**
+ * Interesting events.
+ *
+ * Example: User logs in, SQL logs.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function info($message, array $context = array());
+
+ /**
+ * Detailed debug information.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function debug($message, array $context = array());
+
+ /**
+ * Logs with an arbitrary level.
+ *
+ * @param mixed $level
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function log($level, $message, array $context = array());
+}
diff --git a/vendor/psr/log/Psr/Log/LoggerTrait.php b/vendor/psr/log/Psr/Log/LoggerTrait.php
new file mode 100644
index 00000000..59124960
--- /dev/null
+++ b/vendor/psr/log/Psr/Log/LoggerTrait.php
@@ -0,0 +1,131 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * This is a simple Logger trait that classes unable to extend AbstractLogger
+ * (because they extend another class, etc) can include.
+ *
+ * It simply delegates all log-level-specific methods to the `log` method to
+ * reduce boilerplate code that a simple Logger that does the same thing with
+ * messages regardless of the error level has to implement.
+ */
+trait LoggerTrait
+{
+ /**
+ * System is unusable.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function emergency($message, array $context = array())
+ {
+ $this->log(LogLevel::EMERGENCY, $message, $context);
+ }
+
+ /**
+ * Action must be taken immediately.
+ *
+ * Example: Entire website down, database unavailable, etc. This should
+ * trigger the SMS alerts and wake you up.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function alert($message, array $context = array())
+ {
+ $this->log(LogLevel::ALERT, $message, $context);
+ }
+
+ /**
+ * Critical conditions.
+ *
+ * Example: Application component unavailable, unexpected exception.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function critical($message, array $context = array())
+ {
+ $this->log(LogLevel::CRITICAL, $message, $context);
+ }
+
+ /**
+ * Runtime errors that do not require immediate action but should typically
+ * be logged and monitored.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function error($message, array $context = array())
+ {
+ $this->log(LogLevel::ERROR, $message, $context);
+ }
+
+ /**
+ * Exceptional occurrences that are not errors.
+ *
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
+ * that are not necessarily wrong.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function warning($message, array $context = array())
+ {
+ $this->log(LogLevel::WARNING, $message, $context);
+ }
+
+ /**
+ * Normal but significant events.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function notice($message, array $context = array())
+ {
+ $this->log(LogLevel::NOTICE, $message, $context);
+ }
+
+ /**
+ * Interesting events.
+ *
+ * Example: User logs in, SQL logs.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function info($message, array $context = array())
+ {
+ $this->log(LogLevel::INFO, $message, $context);
+ }
+
+ /**
+ * Detailed debug information.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function debug($message, array $context = array())
+ {
+ $this->log(LogLevel::DEBUG, $message, $context);
+ }
+
+ /**
+ * Logs with an arbitrary level.
+ *
+ * @param mixed $level
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ abstract public function log($level, $message, array $context = array());
+}
diff --git a/vendor/psr/log/Psr/Log/NullLogger.php b/vendor/psr/log/Psr/Log/NullLogger.php
new file mode 100644
index 00000000..553a3c59
--- /dev/null
+++ b/vendor/psr/log/Psr/Log/NullLogger.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Psr\Log;
+
+/**
+ * This Logger can be used to avoid conditional log calls
+ *
+ * Logging should always be optional, and if no logger is provided to your
+ * library creating a NullLogger instance to have something to throw logs at
+ * is a good way to avoid littering your code with `if ($this->logger) { }`
+ * blocks.
+ */
+class NullLogger extends AbstractLogger
+{
+ /**
+ * Logs with an arbitrary level.
+ *
+ * @param mixed $level
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function log($level, $message, array $context = array())
+ {
+ // noop
+ }
+}
diff --git a/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php b/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php
new file mode 100644
index 00000000..a9328151
--- /dev/null
+++ b/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php
@@ -0,0 +1,116 @@
+<?php
+
+namespace Psr\Log\Test;
+
+use Psr\Log\LogLevel;
+
+/**
+ * Provides a base test class for ensuring compliance with the LoggerInterface
+ *
+ * Implementors can extend the class and implement abstract methods to run this as part of their test suite
+ */
+abstract class LoggerInterfaceTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @return LoggerInterface
+ */
+ abstract function getLogger();
+
+ /**
+ * This must return the log messages in order with a simple formatting: "<LOG LEVEL> <MESSAGE>"
+ *
+ * Example ->error('Foo') would yield "error Foo"
+ *
+ * @return string[]
+ */
+ abstract function getLogs();
+
+ public function testImplements()
+ {
+ $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger());
+ }
+
+ /**
+ * @dataProvider provideLevelsAndMessages
+ */
+ public function testLogsAtAllLevels($level, $message)
+ {
+ $logger = $this->getLogger();
+ $logger->{$level}($message, array('user' => 'Bob'));
+ $logger->log($level, $message, array('user' => 'Bob'));
+
+ $expected = array(
+ $level.' message of level '.$level.' with context: Bob',
+ $level.' message of level '.$level.' with context: Bob',
+ );
+ $this->assertEquals($expected, $this->getLogs());
+ }
+
+ public function provideLevelsAndMessages()
+ {
+ return array(
+ LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'),
+ LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'),
+ LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'),
+ LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'),
+ LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'),
+ LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'),
+ LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'),
+ LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'),
+ );
+ }
+
+ /**
+ * @expectedException Psr\Log\InvalidArgumentException
+ */
+ public function testThrowsOnInvalidLevel()
+ {
+ $logger = $this->getLogger();
+ $logger->log('invalid level', 'Foo');
+ }
+
+ public function testContextReplacement()
+ {
+ $logger = $this->getLogger();
+ $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar'));
+
+ $expected = array('info {Message {nothing} Bob Bar a}');
+ $this->assertEquals($expected, $this->getLogs());
+ }
+
+ public function testObjectCastToString()
+ {
+ $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString'));
+ $dummy->expects($this->once())
+ ->method('__toString')
+ ->will($this->returnValue('DUMMY'));
+
+ $this->getLogger()->warning($dummy);
+ }
+
+ public function testContextCanContainAnything()
+ {
+ $context = array(
+ 'bool' => true,
+ 'null' => null,
+ 'string' => 'Foo',
+ 'int' => 0,
+ 'float' => 0.5,
+ 'nested' => array('with object' => new DummyTest),
+ 'object' => new \DateTime,
+ 'resource' => fopen('php://memory', 'r'),
+ );
+
+ $this->getLogger()->warning('Crazy context data', $context);
+ }
+
+ public function testContextExceptionKeyCanBeExceptionOrOtherValues()
+ {
+ $this->getLogger()->warning('Random message', array('exception' => 'oops'));
+ $this->getLogger()->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail')));
+ }
+}
+
+class DummyTest
+{
+} \ No newline at end of file
diff --git a/vendor/psr/log/README.md b/vendor/psr/log/README.md
new file mode 100644
index 00000000..574bc1cb
--- /dev/null
+++ b/vendor/psr/log/README.md
@@ -0,0 +1,45 @@
+PSR Log
+=======
+
+This repository holds all interfaces/classes/traits related to
+[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md).
+
+Note that this is not a logger of its own. It is merely an interface that
+describes a logger. See the specification for more details.
+
+Usage
+-----
+
+If you need a logger, you can use the interface like this:
+
+```php
+<?php
+
+use Psr\Log\LoggerInterface;
+
+class Foo
+{
+ private $logger;
+
+ public function __construct(LoggerInterface $logger = null)
+ {
+ $this->logger = $logger;
+ }
+
+ public function doSomething()
+ {
+ if ($this->logger) {
+ $this->logger->info('Doing work');
+ }
+
+ // do something useful
+ }
+}
+```
+
+You can then pick one of the implementations of the interface to get a logger.
+
+If you want to implement the interface, you can require this package and
+implement `Psr\Log\LoggerInterface` in your code. Please read the
+[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)
+for details.
diff --git a/vendor/psr/log/composer.json b/vendor/psr/log/composer.json
new file mode 100644
index 00000000..6bdcc219
--- /dev/null
+++ b/vendor/psr/log/composer.json
@@ -0,0 +1,17 @@
+{
+ "name": "psr/log",
+ "description": "Common interface for logging libraries",
+ "keywords": ["psr", "psr-3", "log"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "autoload": {
+ "psr-0": {
+ "Psr\\Log\\": ""
+ }
+ }
+}
diff --git a/vendor/wikimedia/cdb/COPYING b/vendor/wikimedia/cdb/COPYING
new file mode 100644
index 00000000..019694a9
--- /dev/null
+++ b/vendor/wikimedia/cdb/COPYING
@@ -0,0 +1,342 @@
+== GNU GENERAL PUBLIC LICENSE ==
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+=== Preamble ===
+
+The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
+
+'''0.''' This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+'''1.''' You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+'''2.''' You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ '''a)''' You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ '''b)''' You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ '''c)''' If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+'''3.''' You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ '''a)''' Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ '''b)''' Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ '''c)''' Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+'''4.''' You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+'''5.''' You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+'''6.''' Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+'''7.''' If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+'''8.''' If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+'''9.''' The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+'''10.''' If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+=== NO WARRANTY ===
+
+'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ '''END OF TERMS AND CONDITIONS'''
+
+== How to Apply These Terms to Your New Programs ==
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+
+ Copyright (C) <year> <name of author>
+
+ 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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/vendor/wikimedia/cdb/Doxyfile b/vendor/wikimedia/cdb/Doxyfile
new file mode 100644
index 00000000..e77e75ae
--- /dev/null
+++ b/vendor/wikimedia/cdb/Doxyfile
@@ -0,0 +1,32 @@
+# Configuration file for Doxygen
+
+PROJECT_NAME = CDB
+PROJECT_BRIEF = CDB functions for PHP
+
+OUTPUT_DIRECTORY = doc
+
+JAVADOC_AUTOBRIEF = YES
+QT_AUTOBRIEF = YES
+
+WARN_NO_PARAMDOC = YES
+
+INPUT = README.md src/
+FILE_PATTERNS = *.php
+RECURSIVE = YES
+# Requires doxygen 1.8.3+
+USE_MDFILE_AS_MAINPAGE = README.md
+
+HTML_DYNAMIC_SECTIONS = YES
+GENERATE_TREEVIEW = YES
+TREEVIEW_WIDTH = 250
+
+GENERATE_LATEX = NO
+
+HAVE_DOT = YES
+DOT_FONTNAME = Helvetica
+DOT_FONTSIZE = 10
+TEMPLATE_RELATIONS = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
+# Makes dot run faster. Requires graphviz >1.8.10
+DOT_MULTI_TARGETS = YES
diff --git a/vendor/wikimedia/cdb/README.md b/vendor/wikimedia/cdb/README.md
new file mode 100644
index 00000000..e4ef4498
--- /dev/null
+++ b/vendor/wikimedia/cdb/README.md
@@ -0,0 +1,48 @@
+[![Latest Stable Version](https://poser.pugx.org/cdb/cdb/v/stable.svg)](https://packagist.org/packages/cdb/cdb) [![License](https://poser.pugx.org/cdb/cdb/license.svg)](https://packagist.org/packages/cdb/cdb)
+
+CDB functions for PHP
+=====================
+
+[CDB][], short for "constant database", refers to a very fast and highly
+reliable database system which uses a simple file with key value pairs. This
+library wraps the CDB functionality exposed in PHP via the `dba_*` functions.
+In cases where `dba_*` functions are not present or are not compiled with CDB
+support, a pure-PHP implementation is provided for falling back.
+
+Additional documentation about the library can be found on [MediaWiki.org](https://www.mediawiki.org/wiki/CDB).
+
+
+Usage
+-----
+
+```
+// Reading a CDB file
+$cdb = \Cdb\Reader::open( 'db.cdb' );
+$foo = $cdb->get( 'somekey' );
+
+// Writing to a CDB file
+$cdb = \Cdb\Writer::open( 'anotherdb.cdb' );
+$cdb->set( 'somekey', $foo );
+```
+
+Running tests
+-------------
+
+```
+composer install --prefer-dist
+cd test
+../vendor/phpunit/phpunit/phpunit .
+```
+
+History
+-------
+
+This library was first introduced in [MediaWiki 1.16][] ([r52203][]). It was
+split out of the MediaWiki codebase and published as an independent library
+during the [MediaWiki 1.25][] development cycle.
+
+---
+[CDB]: https://en.wikipedia.org/wiki/cdb_(software)
+[MediaWiki 1.16]: https://www.mediawiki.org/wiki/MediaWiki_1.16
+[r52203]: https://www.mediawiki.org/wiki/Special:Code/MediaWiki/52203
+[MediaWiki 1.25]: https://www.mediawiki.org/wiki/MediaWiki_1.25
diff --git a/vendor/wikimedia/cdb/composer.json b/vendor/wikimedia/cdb/composer.json
new file mode 100644
index 00000000..2134d2f7
--- /dev/null
+++ b/vendor/wikimedia/cdb/composer.json
@@ -0,0 +1,26 @@
+{
+ "name": "wikimedia/cdb",
+ "description": "Constant Database (CDB) wrapper library for PHP. Provides pure-PHP fallback when dba_* functions are absent.",
+ "license": "GPL-2.0",
+ "homepage": "https://www.mediawiki.org/wiki/CDB",
+ "authors": [
+ {
+ "name": "Tim Starling",
+ "email": "tstarling@wikimedia.org"
+ },
+ {
+ "name": "Chad Horohoe",
+ "email": "chad@wikimedia.org"
+ }
+ ],
+ "minimum-stability": "dev",
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
+ },
+ "autoload": {
+ "classmap": ["src/"]
+ }
+}
diff --git a/vendor/wikimedia/cdb/doc/README b/vendor/wikimedia/cdb/doc/README
new file mode 100644
index 00000000..15ee3b71
--- /dev/null
+++ b/vendor/wikimedia/cdb/doc/README
@@ -0,0 +1 @@
+Placeholder for doxygen documentation
diff --git a/vendor/wikimedia/cdb/src/Exception.php b/vendor/wikimedia/cdb/src/Exception.php
new file mode 100644
index 00000000..76a59da2
--- /dev/null
+++ b/vendor/wikimedia/cdb/src/Exception.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Cdb;
+
+/**
+ * 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
+ */
+
+/**
+ * Exception for Cdb errors.
+ */
+class Exception extends \Exception {
+}
diff --git a/vendor/wikimedia/cdb/src/Reader.php b/vendor/wikimedia/cdb/src/Reader.php
new file mode 100644
index 00000000..2df06ab3
--- /dev/null
+++ b/vendor/wikimedia/cdb/src/Reader.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace Cdb;
+
+/**
+ * Native CDB file reader and writer.
+ *
+ * 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
+ */
+
+/**
+ * Read from a CDB file.
+ * Native and pure PHP implementations are provided.
+ * http://cr.yp.to/cdb.html
+ */
+abstract class Reader {
+ /**
+ * The file handle
+ */
+ protected $handle;
+
+ /**
+ * Open a file and return a subclass instance
+ *
+ * @param string $fileName
+ *
+ * @return Reader
+ */
+ public static function open( $fileName ) {
+ return self::haveExtension() ?
+ new Reader\DBA( $fileName ) :
+ new Reader\PHP( $fileName );
+ }
+
+ /**
+ * Returns true if the native extension is available
+ *
+ * @return bool
+ */
+ public static function haveExtension() {
+ if ( !function_exists( 'dba_handlers' ) ) {
+ return false;
+ }
+ $handlers = dba_handlers();
+ if ( !in_array( 'cdb', $handlers ) || !in_array( 'cdb_make', $handlers ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Create the object and open the file
+ *
+ * @param string $fileName
+ */
+ abstract public function __construct( $fileName );
+
+ /**
+ * Close the file. Optional, you can just let the variable go out of scope.
+ */
+ abstract public function close();
+
+ /**
+ * Get a value with a given key. Only string values are supported.
+ *
+ * @param string $key
+ */
+ abstract public function get( $key );
+}
diff --git a/vendor/wikimedia/cdb/src/Reader/DBA.php b/vendor/wikimedia/cdb/src/Reader/DBA.php
new file mode 100644
index 00000000..838bf6e0
--- /dev/null
+++ b/vendor/wikimedia/cdb/src/Reader/DBA.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Cdb\Reader;
+use Cdb\Exception;
+use Cdb\Reader;
+
+/**
+ * DBA-based CDB reader/writer
+ *
+ * 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
+ */
+
+/**
+ * Reader class which uses the DBA extension
+ */
+class DBA extends Reader {
+ public function __construct( $fileName ) {
+ $this->handle = dba_open( $fileName, 'r-', 'cdb' );
+ if ( !$this->handle ) {
+ throw new Exception( 'Unable to open CDB file "' . $fileName . '"' );
+ }
+ }
+
+ public function close() {
+ if ( isset( $this->handle ) ) {
+ dba_close( $this->handle );
+ }
+ unset( $this->handle );
+ }
+
+ public function get( $key ) {
+ return dba_fetch( $key, $this->handle );
+ }
+}
diff --git a/vendor/wikimedia/cdb/src/Reader/PHP.php b/vendor/wikimedia/cdb/src/Reader/PHP.php
new file mode 100644
index 00000000..57b7d8ca
--- /dev/null
+++ b/vendor/wikimedia/cdb/src/Reader/PHP.php
@@ -0,0 +1,220 @@
+<?php
+
+namespace Cdb\Reader;
+use Cdb\Exception;
+use Cdb\Reader;
+use Cdb\Util;
+
+/**
+ * This is a port of D.J. Bernstein's CDB to PHP. It's based on the copy that
+ * appears in PHP 5.3. Changes are:
+ * * Error returns replaced with exceptions
+ * * Exception thrown if sizes or offsets are between 2GB and 4GB
+ * * Some variables renamed
+ *
+ * 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
+ */
+
+/**
+ * CDB reader class
+ */
+class PHP extends Reader {
+ /** The filename */
+ protected $fileName;
+
+ /* number of hash slots searched under this key */
+ protected $loop;
+
+ /* initialized if loop is nonzero */
+ protected $khash;
+
+ /* initialized if loop is nonzero */
+ protected $kpos;
+
+ /* initialized if loop is nonzero */
+ protected $hpos;
+
+ /* initialized if loop is nonzero */
+ protected $hslots;
+
+ /* initialized if findNext() returns true */
+ protected $dpos;
+
+ /* initialized if cdb_findnext() returns 1 */
+ protected $dlen;
+
+ /**
+ * @param string $fileName
+ * @throws Exception
+ */
+ public function __construct( $fileName ) {
+ $this->fileName = $fileName;
+ $this->handle = fopen( $fileName, 'rb' );
+ if ( !$this->handle ) {
+ throw new Exception( 'Unable to open CDB file "' . $this->fileName . '".' );
+ }
+ $this->findStart();
+ }
+
+ public function close() {
+ if ( isset( $this->handle ) ) {
+ fclose( $this->handle );
+ }
+ unset( $this->handle );
+ }
+
+ /**
+ * @param mixed $key
+ * @return bool|string
+ */
+ public function get( $key ) {
+ // strval is required
+ if ( $this->find( strval( $key ) ) ) {
+ return $this->read( $this->dlen, $this->dpos );
+ }
+
+ return false;
+ }
+
+ /**
+ * @param string $key
+ * @param int $pos
+ * @return bool
+ */
+ protected function match( $key, $pos ) {
+ $buf = $this->read( strlen( $key ), $pos );
+
+ return $buf === $key;
+ }
+
+ protected function findStart() {
+ $this->loop = 0;
+ }
+
+ /**
+ * @throws Exception
+ * @param int $length
+ * @param int $pos
+ * @return string
+ */
+ protected function read( $length, $pos ) {
+ if ( fseek( $this->handle, $pos ) == -1 ) {
+ // This can easily happen if the internal pointers are incorrect
+ throw new Exception(
+ 'Seek failed, file "' . $this->fileName . '" may be corrupted.' );
+ }
+
+ if ( $length == 0 ) {
+ return '';
+ }
+
+ $buf = fread( $this->handle, $length );
+ if ( $buf === false || strlen( $buf ) !== $length ) {
+ throw new Exception(
+ 'Read from CDB file failed, file "' . $this->fileName . '" may be corrupted.' );
+ }
+
+ return $buf;
+ }
+
+ /**
+ * Unpack an unsigned integer and throw an exception if it needs more than 31 bits
+ * @param string $s
+ * @throws Exception
+ * @return mixed
+ */
+ protected function unpack31( $s ) {
+ $data = unpack( 'V', $s );
+ if ( $data[1] > 0x7fffffff ) {
+ throw new Exception(
+ 'Error in CDB file "' . $this->fileName . '", integer too big.' );
+ }
+
+ return $data[1];
+ }
+
+ /**
+ * Unpack a 32-bit signed integer
+ * @param string $s
+ * @return int
+ */
+ protected function unpackSigned( $s ) {
+ $data = unpack( 'va/vb', $s );
+
+ return $data['a'] | ( $data['b'] << 16 );
+ }
+
+ /**
+ * @param string $key
+ * @return bool
+ */
+ protected function findNext( $key ) {
+ if ( !$this->loop ) {
+ $u = Util::hash( $key );
+ $buf = $this->read( 8, ( $u << 3 ) & 2047 );
+ $this->hslots = $this->unpack31( substr( $buf, 4 ) );
+ if ( !$this->hslots ) {
+ return false;
+ }
+ $this->hpos = $this->unpack31( substr( $buf, 0, 4 ) );
+ $this->khash = $u;
+ $u = Util::unsignedShiftRight( $u, 8 );
+ $u = Util::unsignedMod( $u, $this->hslots );
+ $u <<= 3;
+ $this->kpos = $this->hpos + $u;
+ }
+
+ while ( $this->loop < $this->hslots ) {
+ $buf = $this->read( 8, $this->kpos );
+ $pos = $this->unpack31( substr( $buf, 4 ) );
+ if ( !$pos ) {
+ return false;
+ }
+ $this->loop += 1;
+ $this->kpos += 8;
+ if ( $this->kpos == $this->hpos + ( $this->hslots << 3 ) ) {
+ $this->kpos = $this->hpos;
+ }
+ $u = $this->unpackSigned( substr( $buf, 0, 4 ) );
+ if ( $u === $this->khash ) {
+ $buf = $this->read( 8, $pos );
+ $keyLen = $this->unpack31( substr( $buf, 0, 4 ) );
+ if ( $keyLen == strlen( $key ) && $this->match( $key, $pos + 8 ) ) {
+ // Found
+ $this->dlen = $this->unpack31( substr( $buf, 4 ) );
+ $this->dpos = $pos + 8 + $keyLen;
+
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @param mixed $key
+ * @return bool
+ */
+ protected function find( $key ) {
+ $this->findStart();
+
+ return $this->findNext( $key );
+ }
+}
+
diff --git a/vendor/wikimedia/cdb/src/Util.php b/vendor/wikimedia/cdb/src/Util.php
new file mode 100644
index 00000000..fe19509a
--- /dev/null
+++ b/vendor/wikimedia/cdb/src/Util.php
@@ -0,0 +1,100 @@
+<?php
+
+namespace Cdb;
+
+/**
+ * This is a port of D.J. Bernstein's CDB to PHP. It's based on the copy that
+ * appears in PHP 5.3. Changes are:
+ * * Error returns replaced with exceptions
+ * * Exception thrown if sizes or offsets are between 2GB and 4GB
+ * * Some variables renamed
+ *
+ * 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
+ */
+
+/**
+ * Common functions for readers and writers
+ */
+class Util {
+ /**
+ * Take a modulo of a signed integer as if it were an unsigned integer.
+ * $b must be less than 0x40000000 and greater than 0
+ *
+ * @param int $a
+ * @param int $b
+ *
+ * @return int
+ */
+ public static function unsignedMod( $a, $b ) {
+ if ( $a & 0x80000000 ) {
+ $m = ( $a & 0x7fffffff ) % $b + 2 * ( 0x40000000 % $b );
+
+ return $m % $b;
+ } else {
+ return $a % $b;
+ }
+ }
+
+ /**
+ * Shift a signed integer right as if it were unsigned
+ * @param int $a
+ * @param int $b
+ * @return int
+ */
+ public static function unsignedShiftRight( $a, $b ) {
+ if ( $b == 0 ) {
+ return $a;
+ }
+ if ( $a & 0x80000000 ) {
+ return ( ( $a & 0x7fffffff ) >> $b ) | ( 0x40000000 >> ( $b - 1 ) );
+ } else {
+ return $a >> $b;
+ }
+ }
+
+ /**
+ * The CDB hash function.
+ *
+ * @param string $s
+ *
+ * @return int
+ */
+ public static function hash( $s ) {
+ $h = 5381;
+ $len = strlen( $s );
+ for ( $i = 0; $i < $len; $i++ ) {
+ $h5 = ( $h << 5 ) & 0xffffffff;
+ // Do a 32-bit sum
+ // Inlined here for speed
+ $sum = ( $h & 0x3fffffff ) + ( $h5 & 0x3fffffff );
+ $h =
+ (
+ ( $sum & 0x40000000 ? 1 : 0 )
+ + ( $h & 0x80000000 ? 2 : 0 )
+ + ( $h & 0x40000000 ? 1 : 0 )
+ + ( $h5 & 0x80000000 ? 2 : 0 )
+ + ( $h5 & 0x40000000 ? 1 : 0 )
+ ) << 30
+ | ( $sum & 0x3fffffff );
+ $h ^= ord( $s[$i] );
+ $h &= 0xffffffff;
+ }
+
+ return $h;
+ }
+}
diff --git a/vendor/wikimedia/cdb/src/Writer.php b/vendor/wikimedia/cdb/src/Writer.php
new file mode 100644
index 00000000..b994ec67
--- /dev/null
+++ b/vendor/wikimedia/cdb/src/Writer.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Cdb;
+
+/**
+ * Native CDB file reader and writer.
+ *
+ * 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
+ */
+
+/**
+ * Write to a CDB file.
+ * Native and pure PHP implementations are provided.
+ * http://cr.yp.to/cdb.html
+ */
+abstract class Writer {
+ /**
+ * The file handle
+ */
+ protected $handle;
+
+ /**
+ * File we'll be writing to when we're done
+ * @var string
+ */
+ protected $realFileName;
+
+ /**
+ * File we write to temporarily until we're done
+ * @var string
+ */
+ protected $tmpFileName;
+
+ /**
+ * Open a writer and return a subclass instance.
+ * The user must have write access to the directory, for temporary file creation.
+ *
+ * @param string $fileName
+ *
+ * @return Writer
+ */
+ public static function open( $fileName ) {
+ return Reader::haveExtension() ?
+ new Writer\DBA( $fileName ) :
+ new Writer\PHP( $fileName );
+ }
+
+ /**
+ * Create the object and open the file
+ *
+ * @param string $fileName
+ */
+ abstract public function __construct( $fileName );
+
+ /**
+ * Set a key to a given value. The value will be converted to string.
+ * @param string $key
+ * @param string $value
+ */
+ abstract public function set( $key, $value );
+
+ /**
+ * Close the writer object. You should call this function before the object
+ * goes out of scope, to write out the final hashtables.
+ */
+ abstract public function close();
+
+ /**
+ * If the object goes out of scope, close it for sanity
+ */
+ public function __destruct() {
+ if ( isset( $this->handle ) ) {
+ $this->close();
+ }
+ }
+
+ /**
+ * Are we running on Windows?
+ * @return bool
+ */
+ protected function isWindows() {
+ return substr( php_uname(), 0, 7 ) == 'Windows';
+ }
+}
diff --git a/vendor/wikimedia/cdb/src/Writer/DBA.php b/vendor/wikimedia/cdb/src/Writer/DBA.php
new file mode 100644
index 00000000..eb525f4c
--- /dev/null
+++ b/vendor/wikimedia/cdb/src/Writer/DBA.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace Cdb\Writer;
+use Cdb\Exception;
+use Cdb\Writer;
+
+/**
+ * DBA-based CDB reader/writer
+ *
+ * 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
+ */
+
+/**
+ * Writer class which uses the DBA extension
+ */
+class DBA extends Writer {
+ /**
+ * @throws Exception
+ */
+ public function __construct( $fileName ) {
+ $this->realFileName = $fileName;
+ $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
+ $this->handle = dba_open( $this->tmpFileName, 'n', 'cdb_make' );
+ if ( !$this->handle ) {
+ throw new Exception( 'Unable to open CDB file for write "' . $fileName . '"' );
+ }
+ }
+
+ public function set( $key, $value ) {
+ return dba_insert( $key, $value, $this->handle );
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function close() {
+ if ( isset( $this->handle ) ) {
+ dba_close( $this->handle );
+ }
+ if ( $this->isWindows() ) {
+ unlink( $this->realFileName );
+ }
+ if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
+ throw new Exception( 'Unable to move the new CDB file into place.' );
+ }
+ unset( $this->handle );
+ }
+}
diff --git a/vendor/wikimedia/cdb/src/Writer/PHP.php b/vendor/wikimedia/cdb/src/Writer/PHP.php
new file mode 100644
index 00000000..68c6b760
--- /dev/null
+++ b/vendor/wikimedia/cdb/src/Writer/PHP.php
@@ -0,0 +1,240 @@
+<?php
+
+namespace Cdb\Writer;
+use Cdb\Exception;
+use Cdb\Util;
+use Cdb\Writer;
+
+/**
+ * This is a port of D.J. Bernstein's CDB to PHP. It's based on the copy that
+ * appears in PHP 5.3. Changes are:
+ * * Error returns replaced with exceptions
+ * * Exception thrown if sizes or offsets are between 2GB and 4GB
+ * * Some variables renamed
+ *
+ * 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
+ */
+
+/**
+ * CDB writer class
+ */
+class PHP extends Writer {
+ protected $hplist;
+
+ protected $numentries;
+
+ protected $pos;
+
+ /**
+ * @param string $fileName
+ */
+ public function __construct( $fileName ) {
+ $this->realFileName = $fileName;
+ $this->tmpFileName = $fileName . '.tmp.' . mt_rand( 0, 0x7fffffff );
+ $this->handle = fopen( $this->tmpFileName, 'wb' );
+ if ( !$this->handle ) {
+ $this->throwException(
+ 'Unable to open CDB file "' . $this->tmpFileName . '" for write.' );
+ }
+ $this->hplist = array();
+ $this->numentries = 0;
+ $this->pos = 2048; // leaving space for the pointer array, 256 * 8
+ if ( fseek( $this->handle, $this->pos ) == -1 ) {
+ $this->throwException( 'fseek failed in file "' . $this->tmpFileName . '".' );
+ }
+ }
+
+ /**
+ * @param string $key
+ * @param string $value
+ */
+ public function set( $key, $value ) {
+ if ( strval( $key ) === '' ) {
+ // DBA cross-check hack
+ return;
+ }
+ $this->addbegin( strlen( $key ), strlen( $value ) );
+ $this->write( $key );
+ $this->write( $value );
+ $this->addend( strlen( $key ), strlen( $value ), Util::hash( $key ) );
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function close() {
+ $this->finish();
+ if ( isset( $this->handle ) ) {
+ fclose( $this->handle );
+ }
+ if ( $this->isWindows() && file_exists( $this->realFileName ) ) {
+ unlink( $this->realFileName );
+ }
+ if ( !rename( $this->tmpFileName, $this->realFileName ) ) {
+ $this->throwException( 'Unable to move the new CDB file into place.' );
+ }
+ unset( $this->handle );
+ }
+
+ /**
+ * @throws Exception
+ * @param string $buf
+ */
+ protected function write( $buf ) {
+ $len = fwrite( $this->handle, $buf );
+ if ( $len !== strlen( $buf ) ) {
+ $this->throwException( 'Error writing to CDB file "' . $this->tmpFileName . '".' );
+ }
+ }
+
+ /**
+ * @throws Exception
+ * @param int $len
+ */
+ protected function posplus( $len ) {
+ $newpos = $this->pos + $len;
+ if ( $newpos > 0x7fffffff ) {
+ $this->throwException(
+ 'A value in the CDB file "' . $this->tmpFileName . '" is too large.' );
+ }
+ $this->pos = $newpos;
+ }
+
+ /**
+ * @param int $keylen
+ * @param int $datalen
+ * @param int $h
+ */
+ protected function addend( $keylen, $datalen, $h ) {
+ $this->hplist[] = array(
+ 'h' => $h,
+ 'p' => $this->pos
+ );
+
+ $this->numentries++;
+ $this->posplus( 8 );
+ $this->posplus( $keylen );
+ $this->posplus( $datalen );
+ }
+
+ /**
+ * @throws Exception
+ * @param int $keylen
+ * @param int $datalen
+ */
+ protected function addbegin( $keylen, $datalen ) {
+ if ( $keylen > 0x7fffffff ) {
+ $this->throwException( 'Key length too long in file "' . $this->tmpFileName . '".' );
+ }
+ if ( $datalen > 0x7fffffff ) {
+ $this->throwException( 'Data length too long in file "' . $this->tmpFileName . '".' );
+ }
+ $buf = pack( 'VV', $keylen, $datalen );
+ $this->write( $buf );
+ }
+
+ /**
+ * @throws Exception
+ */
+ protected function finish() {
+ // Hack for DBA cross-check
+ $this->hplist = array_reverse( $this->hplist );
+
+ // Calculate the number of items that will be in each hashtable
+ $counts = array_fill( 0, 256, 0 );
+ foreach ( $this->hplist as $item ) {
+ ++$counts[255 & $item['h']];
+ }
+
+ // Fill in $starts with the *end* indexes
+ $starts = array();
+ $pos = 0;
+ for ( $i = 0; $i < 256; ++$i ) {
+ $pos += $counts[$i];
+ $starts[$i] = $pos;
+ }
+
+ // Excessively clever and indulgent code to simultaneously fill $packedTables
+ // with the packed hashtables, and adjust the elements of $starts
+ // to actually point to the starts instead of the ends.
+ $packedTables = array_fill( 0, $this->numentries, false );
+ foreach ( $this->hplist as $item ) {
+ $packedTables[--$starts[255 & $item['h']]] = $item;
+ }
+
+ $final = '';
+ for ( $i = 0; $i < 256; ++$i ) {
+ $count = $counts[$i];
+
+ // The size of the hashtable will be double the item count.
+ // The rest of the slots will be empty.
+ $len = $count + $count;
+ $final .= pack( 'VV', $this->pos, $len );
+
+ $hashtable = array();
+ for ( $u = 0; $u < $len; ++$u ) {
+ $hashtable[$u] = array( 'h' => 0, 'p' => 0 );
+ }
+
+ // Fill the hashtable, using the next empty slot if the hashed slot
+ // is taken.
+ for ( $u = 0; $u < $count; ++$u ) {
+ $hp = $packedTables[$starts[$i] + $u];
+ $where = Util::unsignedMod(
+ Util::unsignedShiftRight( $hp['h'], 8 ), $len );
+ while ( $hashtable[$where]['p'] ) {
+ if ( ++$where == $len ) {
+ $where = 0;
+ }
+ }
+ $hashtable[$where] = $hp;
+ }
+
+ // Write the hashtable
+ for ( $u = 0; $u < $len; ++$u ) {
+ $buf = pack( 'vvV',
+ $hashtable[$u]['h'] & 0xffff,
+ Util::unsignedShiftRight( $hashtable[$u]['h'], 16 ),
+ $hashtable[$u]['p'] );
+ $this->write( $buf );
+ $this->posplus( 8 );
+ }
+ }
+
+ // Write the pointer array at the start of the file
+ rewind( $this->handle );
+ if ( ftell( $this->handle ) != 0 ) {
+ $this->throwException( 'Error rewinding to start of file "' . $this->tmpFileName . '".' );
+ }
+ $this->write( $final );
+ }
+
+ /**
+ * Clean up the temp file and throw an exception
+ *
+ * @param string $msg
+ * @throws Exception
+ */
+ protected function throwException( $msg ) {
+ if ( $this->handle ) {
+ fclose( $this->handle );
+ unlink( $this->tmpFileName );
+ }
+ throw new Exception( $msg );
+ }
+}
diff --git a/vendor/wikimedia/cdb/test/CdbTest.php b/vendor/wikimedia/cdb/test/CdbTest.php
new file mode 100644
index 00000000..920fc111
--- /dev/null
+++ b/vendor/wikimedia/cdb/test/CdbTest.php
@@ -0,0 +1,95 @@
+<?php
+
+namespace Cdb\Test;
+use Cdb\Reader;
+use Cdb\Writer;
+
+/**
+ * Test the CDB reader/writer
+ * @covers Cdb\Writer\PHP
+ * @covers Cdb\Writer\DBA
+ */
+class CdbTest extends \PHPUnit_Framework_TestCase {
+ /** @var string */
+ private $phpCdbFile, $dbaCdbFile;
+
+ protected function setUp() {
+ parent::setUp();
+ if ( !Reader::haveExtension() ) {
+ $this->markTestSkipped( 'Native CDB support is not available.' );
+ }
+ $temp = sys_get_temp_dir();
+ if ( !is_writable( $temp ) ) {
+ $this->markTestSkipped( "Temp dir [$temp] isn't writable." );
+ }
+ $this->phpCdbFile = tempnam( $temp, get_class( $this ) . '_' );
+ $this->dbaCdbFile = tempnam( $temp, get_class( $this ) . '_' );
+ }
+
+ /**
+ * Make a random-ish string
+ * @return string
+ */
+ private static function randomString() {
+ $len = mt_rand( 0, 10 );
+ $s = '';
+ for ( $j = 0; $j < $len; $j++ ) {
+ $s .= chr( mt_rand( 0, 255 ) );
+ }
+
+ return $s;
+ }
+
+ public function testCdbWrite() {
+ $w1 = new Writer\PHP( $this->phpCdbFile );
+ $w2 = new Writer\DBA( $this->dbaCdbFile );
+
+ $data = array();
+ for ( $i = 0; $i < 1000; $i++ ) {
+ $key = self::randomString();
+ $value = self::randomString();
+ $w1->set( $key, $value );
+ $w2->set( $key, $value );
+
+ if ( !isset( $data[$key] ) ) {
+ $data[$key] = $value;
+ }
+ }
+
+ $w1->close();
+ $w2->close();
+
+ $this->assertEquals(
+ md5_file( $this->phpCdbFile ),
+ md5_file( $this->dbaCdbFile ),
+ 'same hash'
+ );
+
+ $r1 = new Reader\PHP( $this->phpCdbFile );
+ $r2 = new Reader\DBA( $this->dbaCdbFile );
+
+ foreach ( $data as $key => $value ) {
+ if ( $key === '' ) {
+ // Known bug
+ continue;
+ }
+ $v1 = $r1->get( $key );
+ $v2 = $r2->get( $key );
+
+ $v1 = $v1 === false ? '(not found)' : $v1;
+ $v2 = $v2 === false ? '(not found)' : $v2;
+
+ # cdbAssert( 'Mismatch', $key, $v1, $v2 );
+ $this->cdbAssert( "PHP error", $key, $v1, $value );
+ $this->cdbAssert( "DBA error", $key, $v2, $value );
+ }
+ }
+
+ private function cdbAssert( $msg, $key, $v1, $v2 ) {
+ $this->assertEquals(
+ $v2,
+ $v1,
+ $msg . ', k=' . bin2hex( $key )
+ );
+ }
+}
diff --git a/vendor/wikimedia/composer-merge-plugin/LICENSE b/vendor/wikimedia/composer-merge-plugin/LICENSE
new file mode 100644
index 00000000..55e376b4
--- /dev/null
+++ b/vendor/wikimedia/composer-merge-plugin/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014 Bryan Davis, Wikimedia Foundation, and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/vendor/wikimedia/composer-merge-plugin/README.md b/vendor/wikimedia/composer-merge-plugin/README.md
new file mode 100644
index 00000000..53d64579
--- /dev/null
+++ b/vendor/wikimedia/composer-merge-plugin/README.md
@@ -0,0 +1,80 @@
+[![Latest Stable Version](https://img.shields.io/packagist/v/wikimedia/composer-merge-plugin.svg?style=flat)](https://packagist.org/packages/wikimedia/composer-merge-plugin) [![License](https://img.shields.io/packagist/l/wikimedia/composer-merge-plugin.svg?style=flat)](https://github.com/wikimedia/composer-merge-plugin/blob/master/LICENSE)
+[![Build Status](https://img.shields.io/travis/wikimedia/composer-merge-plugin.svg?style=flat)](https://travis-ci.org/wikimedia/composer-merge-plugin)
+[![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/wikimedia/composer-merge-plugin/master.svg?style=flat)](https://scrutinizer-ci.com/g/wikimedia/composer-merge-plugin/?branch=master)
+
+Composer Merge Plugin
+=====================
+
+Merge one or more additional composer.json files at runtime.
+
+Installation
+------------
+```
+$ composer require wikimedia/composer-merge-plugin
+```
+
+Usage
+-----
+
+```
+{
+ "require": {
+ "wikimedia/composer-merge-plugin": "dev-master"
+ },
+ "extra": {
+ "merge-plugin": {
+ "include": [
+ "composer.local.json",
+ "extensions/*/composer.json"
+ ]
+ }
+ }
+}
+```
+
+The `include` key can specify either a single value or an array of values.
+Each value is treated as a glob() pattern identifying additional composer.json
+style configuration files to merge into the configuration for the current
+Composer execution. By default the merge plugin is recursive, if an included
+file also has a "merge-plugin" section it will also be processed. This
+functionality can be disabled by setting `"recurse": false` inside the
+"merge-plugin" section.
+
+The "require", "require-dev", "repositories" and "suggest" sections of the
+found configuration files will be merged into the root package configuration
+as though they were directly included in the top-level composer.json file.
+
+Running tests
+-------------
+```
+$ composer install
+$ composer test
+```
+
+Contributing
+------------
+Bug, feature requests and other issues should be reported to the [GitHub
+project]. We accept code and documentation contributions via Pull Requests on
+GitHub as well.
+
+- [PSR-2 Coding Standard][] is used by the project. The included test
+ configuration uses [PHP Code Sniffer][] to validate the conventions.
+- Tests are encouraged. Our test coverage isn't perfect but we'd like it to
+ get better rather than worse, so please try to include tests with your
+ changes.
+- Keep the documentation up to date. Make sure `README.md` and other
+ relevant documentation is kept up to date with your changes.
+- One pull request per feature. Try to keep your changes focused on solving
+ a single problem. This will make it easier for us to review the change and
+ easier for you to make sure you have updated the necessary tests and
+ documentation.
+
+License
+-------
+Composer Merge plugin is licensed under the MIT license. See the `LICENSE`
+file for more details.
+
+---
+[GitHub project]: https://github.com/wikimedia/composer-merge-plugin
+[PSR-2 Coding Standard]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md
+[PHP Code Sniffer]: http://pear.php.net/package/PHP_CodeSniffer
diff --git a/vendor/wikimedia/composer-merge-plugin/composer.json b/vendor/wikimedia/composer-merge-plugin/composer.json
new file mode 100644
index 00000000..5ef429ad
--- /dev/null
+++ b/vendor/wikimedia/composer-merge-plugin/composer.json
@@ -0,0 +1,38 @@
+{
+ "name": "wikimedia/composer-merge-plugin",
+ "description": "Composer plugin to merge multiple composer.json files",
+ "type": "composer-plugin",
+ "license": "MIT",
+ "minimum-stability": "dev",
+ "prefer-stable": true,
+ "require": {
+ "php": ">=5.3.2",
+ "composer-plugin-api": "1.0.0"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev",
+ "phpunit/phpunit": "~4.0",
+ "jakub-onderka/php-parallel-lint": "~0.8",
+ "squizlabs/php_codesniffer": "~2.1.0",
+ "phpspec/prophecy-phpunit": "~1.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "Wikimedia\\Composer\\": "src/"
+ }
+ },
+ "extra": {
+ "class": "Wikimedia\\Composer\\MergePlugin"
+ },
+ "config": {
+ "optimize-autoloader": true
+ },
+ "scripts": {
+ "test": [
+ "composer validate --no-interaction",
+ "parallel-lint src tests",
+ "phpunit --log-junit=reports/unitreport.xml --coverage-text --coverage-html=reports/coverage --coverage-clover=reports/coverage.xml",
+ "phpcs --encoding=utf-8 --standard=PSR2 --report-checkstyle=reports/checkstyle-phpcs.xml --report-full --extensions=php src/* tests/phpunit/*"
+ ]
+ }
+}
diff --git a/vendor/wikimedia/composer-merge-plugin/src/MergePlugin.php b/vendor/wikimedia/composer-merge-plugin/src/MergePlugin.php
new file mode 100644
index 00000000..04c55886
--- /dev/null
+++ b/vendor/wikimedia/composer-merge-plugin/src/MergePlugin.php
@@ -0,0 +1,411 @@
+<?php
+/**
+ * This file is part of the Composer Merge plugin.
+ *
+ * Copyright (C) 2014 Bryan Davis, Wikimedia Foundation, and contributors
+ *
+ * This software may be modified and distributed under the terms of the MIT
+ * license. See the LICENSE file for details.
+ */
+
+namespace Wikimedia\Composer;
+
+use Composer\Composer;
+use Composer\Config;
+use Composer\EventDispatcher\EventSubscriberInterface;
+use Composer\Installer\InstallerEvent;
+use Composer\Installer\InstallerEvents;
+use Composer\IO\IOInterface;
+use Composer\Json\JsonFile;
+use Composer\Package\BasePackage;
+use Composer\Package\CompletePackage;
+use Composer\Package\Loader\ArrayLoader;
+use Composer\Package\RootPackageInterface;
+use Composer\Package\Version\VersionParser;
+use Composer\Plugin\PluginInterface;
+use Composer\Script\CommandEvent;
+use Composer\Script\ScriptEvents;
+
+/**
+ * Composer plugin that allows merging multiple composer.json files.
+ *
+ * When installed, this plugin will look for a "merge-patterns" key in the
+ * composer configuration's "extra" section. The value of this setting can be
+ * either a single value or an array of values. Each value is treated as
+ * a glob() pattern identifying additional composer.json style configuration
+ * files to merge into the configuration for the current compser execution.
+ *
+ * The "require", "require-dev", "repositories" and "suggest" sections of the
+ * found configuration files will be merged into the root package
+ * configuration as though they were directly included in the top-level
+ * composer.json file.
+ *
+ * If included files specify conflicting package versions for "require" or
+ * "require-dev", the normal Composer dependency solver process will be used
+ * to attempt to resolve the conflict.
+ *
+ * @code
+ * {
+ * "require": {
+ * "wikimedia/composer-merge-plugin": "dev-master"
+ * },
+ * "extra": {
+ * "merge-plugin": {
+ * "include": [
+ * "composer.local.json"
+ * ]
+ * }
+ * }
+ * }
+ * @endcode
+ *
+ * @author Bryan Davis <bd808@bd808.com>
+ */
+class MergePlugin implements PluginInterface, EventSubscriberInterface
+{
+
+ /**
+ * @var Composer $composer
+ */
+ protected $composer;
+
+ /**
+ * @var IOInterface $inputOutput
+ */
+ protected $inputOutput;
+
+ /**
+ * @var ArrayLoader $loader
+ */
+ protected $loader;
+
+ /**
+ * @var array $duplicateLinks
+ */
+ protected $duplicateLinks;
+
+ /**
+ * @var bool $devMode
+ */
+ protected $devMode;
+
+ /**
+ * Whether to recursively include dependencies
+ *
+ * @var bool $recurse
+ */
+ protected $recurse = true;
+
+ /**
+ * Files that have already been processed
+ *
+ * @var string[] $loadedFiles
+ */
+ protected $loadedFiles = array();
+
+ /**
+ * {@inheritdoc}
+ */
+ public function activate(Composer $composer, IOInterface $io)
+ {
+ $this->composer = $composer;
+ $this->inputOutput = $io;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getSubscribedEvents()
+ {
+ return array(
+ InstallerEvents::PRE_DEPENDENCIES_SOLVING => 'onDependencySolve',
+ ScriptEvents::PRE_INSTALL_CMD => 'onInstallOrUpdate',
+ ScriptEvents::PRE_UPDATE_CMD => 'onInstallOrUpdate',
+ );
+ }
+
+ /**
+ * Handle an event callback for an install or update command by checking
+ * for "merge-patterns" in the "extra" data and merging package contents
+ * if found.
+ *
+ * @param CommandEvent $event
+ */
+ public function onInstallOrUpdate(CommandEvent $event)
+ {
+ $config = $this->readConfig($this->composer->getPackage());
+ if (isset($config['recurse'])) {
+ $this->recurse = (bool)$config['recurse'];
+ }
+ if ($config['include']) {
+ $this->loader = new ArrayLoader();
+ $this->duplicateLinks = array(
+ 'require' => array(),
+ 'require-dev' => array(),
+ );
+ $this->devMode = $event->isDevMode();
+ $this->mergePackages($config);
+ }
+ }
+
+ /**
+ * @param RootPackageInterface $package
+ * @return array
+ */
+ protected function readConfig(RootPackageInterface $package)
+ {
+ $config = array(
+ 'include' => array(),
+ );
+ $extra = $package->getExtra();
+ if (isset($extra['merge-plugin'])) {
+ $config = array_merge($config, $extra['merge-plugin']);
+ if (!is_array($config['include'])) {
+ $config['include'] = array($config['include']);
+ }
+ }
+ return $config;
+ }
+
+ /**
+ * Find configuration files matching the configured glob patterns and
+ * merge their contents with the master package.
+ *
+ * @param array $config
+ */
+ protected function mergePackages(array $config)
+ {
+ $root = $this->composer->getPackage();
+ foreach (array_reduce(
+ array_map('glob', $config['include']),
+ 'array_merge',
+ array()
+ ) as $path) {
+ $this->loadFile($root, $path);
+ }
+ }
+
+ /**
+ * Read a JSON file and merge its contents
+ *
+ * @param RootPackageInterface $root
+ * @param string $path
+ */
+ protected function loadFile($root, $path)
+ {
+ if (in_array($path, $this->loadedFiles)) {
+ $this->debug("Skipping duplicate <comment>$path</comment>...");
+ return;
+ } else {
+ $this->loadedFiles[] = $path;
+ }
+ $this->debug("Loading <comment>{$path}</comment>...");
+ $json = $this->readPackageJson($path);
+ $package = $this->loader->load($json);
+
+ $this->mergeRequires($root, $package);
+ $this->mergeDevRequires($root, $package);
+
+ if (isset($json['repositories'])) {
+ $this->addRepositories($json['repositories'], $root);
+ }
+
+ if ($package->getSuggests()) {
+ $root->setSuggests(array_merge(
+ $root->getSuggests(),
+ $package->getSuggests()
+ ));
+ }
+
+ if ($this->recurse && isset($json['extra']['merge-plugin'])) {
+ $this->mergePackages($json['extra']['merge-plugin']);
+ }
+ }
+
+ /**
+ * Read the contents of a composer.json style file into an array.
+ *
+ * The package contents are fixed up to be usable to create a Package
+ * object by providing dummy "name" and "version" values if they have not
+ * been provided in the file. This is consistent with the default root
+ * package loading behavior of Composer.
+ *
+ * @param string $path
+ * @return array
+ */
+ protected function readPackageJson($path)
+ {
+ $file = new JsonFile($path);
+ $json = $file->read();
+ if (!isset($json['name'])) {
+ $json['name'] = 'merge-plugin/' .
+ strtr($path, DIRECTORY_SEPARATOR, '-');
+ }
+ if (!isset($json['version'])) {
+ $json['version'] = '1.0.0';
+ }
+ return $json;
+ }
+
+ /**
+ * @param RootPackageInterface $root
+ * @param CompletePackage $package
+ */
+ protected function mergeRequires(
+ RootPackageInterface $root,
+ CompletePackage $package
+ ) {
+ $requires = $package->getRequires();
+ if (!$requires) {
+ return;
+ }
+
+ $this->mergeStabilityFlags($root, $requires);
+
+ $root->setRequires($this->mergeLinks(
+ $root->getRequires(),
+ $requires,
+ $this->duplicateLinks['require']
+ ));
+ }
+
+ /**
+ * @param RootPackageInterface $root
+ * @param CompletePackage $package
+ */
+ protected function mergeDevRequires(
+ RootPackageInterface $root,
+ CompletePackage $package
+ ) {
+ $requires = $package->getDevRequires();
+ if (!$requires) {
+ return;
+ }
+
+ $this->mergeStabilityFlags($root, $requires);
+
+ $root->setDevRequires($this->mergeLinks(
+ $root->getDevRequires(),
+ $requires,
+ $this->duplicateLinks['require-dev']
+ ));
+ }
+
+ /**
+ * Extract and merge stability flags from the given collection of
+ * requires.
+ *
+ * @param RootPackageInterface $root
+ * @param array $requires
+ */
+ protected function mergeStabilityFlags(
+ RootPackageInterface $root,
+ array $requires
+ ) {
+ $flags = $root->getStabilityFlags();
+ foreach ($requires as $name => $link) {
+ $name = strtolower($name);
+ $version = $link->getPrettyConstraint();
+ $stability = VersionParser::parseStability($version);
+ $flags[$name] = BasePackage::$stabilities[$stability];
+ }
+ $root->setStabilityFlags($flags);
+ }
+
+ /**
+ * Add a collection of repositories described by the given configuration
+ * to the given package and the global repository manager.
+ *
+ * @param array $repositories
+ * @param RootPackageInterface $root
+ */
+ protected function addRepositories(
+ array $repositories,
+ RootPackageInterface $root
+ ) {
+ $repoManager = $this->composer->getRepositoryManager();
+ $newRepos = array();
+
+ foreach ($repositories as $repoJson) {
+ $this->debug("Adding {$repoJson['type']} repository");
+ $repo = $repoManager->createRepository(
+ $repoJson['type'],
+ $repoJson
+ );
+ $repoManager->addRepository($repo);
+ $newRepos[] = $repo;
+ }
+
+ $root->setRepositories(array_merge(
+ $newRepos,
+ $root->getRepositories()
+ ));
+ }
+
+ /**
+ * Merge two collections of package links and collect duplicates for
+ * subsequent processing.
+ *
+ * @param array $origin Primary collection
+ * @param array $merge Additional collection
+ * @param array &dups Duplicate storage
+ * @return array Merged collection
+ */
+ protected function mergeLinks(array $origin, array $merge, array &$dups)
+ {
+ foreach ($merge as $name => $link) {
+ if (!isset($origin[$name])) {
+ $this->debug("Merging <comment>{$name}</comment>");
+ $origin[$name] = $link;
+ } else {
+ // Defer to solver.
+ $this->debug("Deferring duplicate <comment>{$name}</comment>");
+ $dups[] = $link;
+ }
+ }
+ return $origin;
+ }
+
+ /**
+ * Handle an event callback for pre-dependency solving phase of an install
+ * or update by adding any duplicate package dependencies found during
+ * initial merge processing to the request that will be processed by the
+ * dependency solver.
+ *
+ * @param InstallerEvent $event
+ */
+ public function onDependencySolve(InstallerEvent $event)
+ {
+ if (!$this->duplicateLinks) {
+ return;
+ }
+
+ $request = $event->getRequest();
+ foreach ($this->duplicateLinks['require'] as $link) {
+ $this->debug("Adding dependency <comment>{$link}</comment>");
+ $request->install($link->getTarget(), $link->getConstraint());
+ }
+ if ($this->devMode) {
+ foreach ($this->duplicateLinks['require-dev'] as $link) {
+ $this->debug("Adding dev dependency <comment>{$link}</comment>");
+ $request->install($link->getTarget(), $link->getConstraint());
+ }
+ }
+ }
+
+ /**
+ * Log a debug message
+ *
+ * Messages will be output at the "verbose" logging level (eg `-v` needed
+ * on the Composer command).
+ *
+ * @param string $message
+ */
+ protected function debug($message)
+ {
+ if ($this->inputOutput->isVerbose()) {
+ $this->inputOutput->write(" <info>[merge]</info> {$message}");
+ }
+ }
+}
+// vim:sw=4:ts=4:sts=4:et:
diff --git a/vendor/wikimedia/utfnormal/README.md b/vendor/wikimedia/utfnormal/README.md
new file mode 100644
index 00000000..8e4b0372
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/README.md
@@ -0,0 +1,69 @@
+[![Latest Stable Version](https://poser.pugx.org/wikimedia/utfnormal/v/stable.svg)](https://packagist.org/packages/wikimedia/utfnormal) [![License](https://poser.pugx.org/wikimedia/utfnormal/license.svg)](https://packagist.org/packages/wikimedia/utfnormal)
+
+utfnormal
+=========
+
+utfnormal is a library that contains Unicode normalization routines, including
+both pure PHP implementations and automatic use of the 'intl' PHP extension when
+ present.
+
+The main function to care about is UtfNormal\Validator::cleanUp(). This will
+strip illegal UTF-8 sequences and characters that are illegal in XML, and
+if necessary convert to normalization form C.
+
+If you know the string is already valid UTF-8, you can directly call
+UtfNormal\Validator::toNFC(), toNFK(), or toNFKC(); this will convert a given
+UTF-8 string to Normalization Form C, K, or KC if it's not already such.
+The function assumes that the input string is already valid UTF-8; if there
+are corrupt characters this may produce erroneous results.
+
+Performance is kind of stinky in absolute terms, though it should be speedy
+on pure ASCII text. ;) On text that can be determined quickly to already be
+in NFC it's not too awful but it can quickly get uncomfortably slow,
+particularly for Korean text (the hangul decomposition/composition code is
+extra slow).
+
+Bugs should be filed in [Wikimedia's Phabricator] under the "utfnormal" project.
+
+
+Regenerating data tables
+------------------------
+UtfNormalData.inc and UtfNormalDataK.inc are generated from the Unicode
+Character Database by the script "generate.php". Run "composer generate"
+to rebuild the tables. To fetch updated unicode data from the internet,
+run "composer generate -- --fetch".
+
+
+Testing
+-------
+
+Running "composer test" will run a syntax checker, PHPUnit conformance tests,
+and run some benchmarks using sample texts from Wikipedia. Take all benchmark
+numbers with large grains of salt.
+
+
+PHP module extension
+--------------------
+
+If the 'intl' PHP extension is present, ICU library functions are used which
+are *MUCH* faster than doing this work in pure PHP code.
+
+It is strongly recommended to enable this module if possible:
+http://php.net/manual/en/intro.intl.php
+
+Older versions of this library supported a one-off custom PHP extension,
+which has been dropped. If you were using this, please migrate to the
+intl extension.
+
+
+History
+-------
+This library was first introduced in [MediaWiki 1.3][] ([r4965]). It was
+split out of the MediaWiki codebase and published as an independent library
+during the [MediaWiki 1.25][] development cycle.
+
+---
+[Wikimedia's Phabricator]: https://phabricator.wikimedia.org/maniphest/task/create/?projects=utfnormal
+[MediaWiki 1.3]: https://www.mediawiki.org/wiki/MediaWiki_1.3
+[r4965]: https://www.mediawiki.org/wiki/Special:Code/MediaWiki/4965
+[MediaWiki 1.25]: https://www.mediawiki.org/wiki/MediaWiki_1.25
diff --git a/vendor/wikimedia/utfnormal/scripts/benchmark.php b/vendor/wikimedia/utfnormal/scripts/benchmark.php
new file mode 100644
index 00000000..51cb2aa9
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/scripts/benchmark.php
@@ -0,0 +1,101 @@
+<?php
+/**
+ * Approximate benchmark for some basic operations.
+ *
+ * Copyright © 2004 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup UtfNormal
+ */
+
+use UtfNormal\Validator;
+
+if ( PHP_SAPI != 'cli' ) {
+ die( "Run me from the command line please.\n" );
+}
+
+require_once dirname( __DIR__ ) . '/vendor/autoload.php';
+
+define( 'BENCH_CYCLES', 5 );
+
+$testfiles = array(
+ __DIR__ . '/testdata/washington.txt' => 'English text',
+ __DIR__ . '/testdata/berlin.txt' => 'German text',
+ __DIR__ . '/testdata/bulgakov.txt' => 'Russian text',
+ __DIR__ . '/testdata/tokyo.txt' => 'Japanese text',
+ __DIR__ . '/testdata/young.txt' => 'Korean text'
+);
+$normalizer = new Validator;
+Validator::loadData();
+foreach ( $testfiles as $file => $desc ) {
+ benchmarkTest( $normalizer, $file, $desc );
+}
+
+# -------
+
+function benchmarkTest( &$u, $filename, $desc ) {
+ print "Testing $filename ($desc)...\n";
+ $data = file_get_contents( $filename );
+ $forms = array(
+# 'placebo',
+ 'cleanUp',
+ 'toNFC',
+# 'toNFKC',
+# 'toNFD', 'toNFKD',
+ 'NFC',
+# 'NFKC',
+# 'NFD', 'NFKD',
+ array( 'fastDecompose', 'fastCombiningSort', 'fastCompose' ),
+# 'quickIsNFC', 'quickIsNFCVerify',
+ );
+
+ foreach ( $forms as $form ) {
+ if ( is_array( $form ) ) {
+ $str = $data;
+ foreach ( $form as $step ) {
+ $str = benchmarkForm( $u, $str, $step );
+ }
+ } else {
+ benchmarkForm( $u, $data, $form );
+ }
+ }
+}
+
+function benchmarkForm( &$u, &$data, $form ) {
+ #$start = microtime( true );
+ for ( $i = 0; $i < BENCH_CYCLES; $i++ ) {
+ $start = microtime( true );
+ $out = $u->$form( $data, Validator::$utfCanonicalDecomp );
+ $deltas[] = ( microtime( true ) - $start );
+ }
+ #$delta = (microtime( true ) - $start) / BENCH_CYCLES;
+ sort( $deltas );
+ $delta = $deltas[0]; # Take shortest time
+
+ $rate = intval( strlen( $data ) / $delta );
+ $same = ( 0 == strcmp( $data, $out ) );
+
+ printf( " %20s %6.1fms %12s bytes/s (%s)\n",
+ $form,
+ $delta * 1000.0,
+ number_format( $rate ),
+ ( $same ? 'no change' : 'changed' ) );
+
+ return $out;
+}
diff --git a/vendor/wikimedia/utfnormal/scripts/generate.php b/vendor/wikimedia/utfnormal/scripts/generate.php
new file mode 100644
index 00000000..905f0a81
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/scripts/generate.php
@@ -0,0 +1,273 @@
+<?php
+/**
+ * This script generates UniNormalData.inc from the Unicode Character Database
+ * and supplementary files.
+ *
+ * Copyright (C) 2004 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup UtfNormal
+ */
+
+use UtfNormal\Utils;
+
+if ( PHP_SAPI != 'cli' ) {
+ die( "Run me from the command line please.\n" );
+}
+
+require_once dirname( __DIR__ ) . '/vendor/autoload.php';
+
+function download( $file, $url ) {
+ print "Downloading data from $url...\n";
+ $fp = fopen( $file, 'w+' );
+ $ch = curl_init( $url );
+ curl_setopt( $ch, CURLOPT_FILE, $fp );
+ curl_exec( $ch );
+ curl_close( $ch );
+ fclose( $fp );
+}
+
+function getFilePointer( $file, $url ) {
+ if ( in_array( '--fetch', $_SERVER['argv'] ) ) {
+ download( $file, $url );
+ } elseif ( !file_exists( $file ) ) {
+ print "Can't open $file for reading.\n";
+ print "If necessary, fetch this file from the internet:\n";
+ print "$url\n";
+ print "Or re-run this script with --fetch\n";
+ exit( -1 );
+ }
+
+ $fp = fopen( $file, "rt" );
+ if ( !$fp ) {
+ // Eh?
+ print "Can't open $file for reading.\n";
+ exit( -1 );
+ }
+
+ return $fp;
+}
+
+
+$in = getFilePointer(
+ __DIR__ . "/data/DerivedNormalizationProps.txt",
+ 'http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt'
+);
+print "Initializing normalization quick check tables...\n";
+$checkNFC = array();
+while ( false !== ( $line = fgets( $in ) ) ) {
+ $matches = array();
+ if ( preg_match(
+ '/^([0-9A-F]+)(?:..([0-9A-F]+))?\s*;\s*(NFC_QC)\s*;\s*([MN])/',
+ $line,
+ $matches )
+ ) {
+ list( $junk, $first, $last, $prop, $value ) = $matches;
+ #print "$first $last $prop $value\n";
+ if ( !$last ) {
+ $last = $first;
+ }
+
+ $lastInDecimal = hexdec( $last );
+ for ( $i = hexdec( $first ); $i <= $lastInDecimal; $i++ ) {
+ $char = Utils::codepointToUtf8( $i );
+ $checkNFC[$char] = $value;
+ }
+ }
+}
+fclose( $in );
+
+$in = getFilePointer(
+ __DIR__ . "/data/CompositionExclusions.txt",
+ 'http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt'
+);
+$exclude = array();
+while ( false !== ( $line = fgets( $in ) ) ) {
+ if ( preg_match( '/^([0-9A-F]+)/i', $line, $matches ) ) {
+ $codepoint = $matches[1];
+ $source = Utils::codepointToUtf8( hexdec( $codepoint ) );
+ $exclude[$source] = true;
+ }
+}
+fclose( $in );
+
+$in = getFilePointer(
+ __DIR__ . "/data/UnicodeData.txt",
+ 'http://www.unicode.org/Public/UNIDATA/UnicodeData.txt'
+);
+$compatibilityDecomp = array();
+$canonicalDecomp = array();
+$canonicalComp = array();
+$combiningClass = array();
+$total = 0;
+$compat = 0;
+$canon = 0;
+
+print "Reading character definitions...\n";
+while ( false !== ( $line = fgets( $in ) ) ) {
+ $columns = explode( ';', $line );
+ $codepoint = $columns[0];
+ $name = $columns[1];
+ $canonicalCombiningClass = $columns[3];
+ $decompositionMapping = $columns[5];
+
+ $source = Utils::codepointToUtf8( hexdec( $codepoint ) );
+
+ if ( $canonicalCombiningClass != 0 ) {
+ $combiningClass[$source] = intval( $canonicalCombiningClass );
+ }
+
+ if ( $decompositionMapping === '' ) continue;
+ if ( preg_match( '/^<(.+)> (.*)$/', $decompositionMapping, $matches ) ) {
+ # Compatibility decomposition
+ $canonical = false;
+ $decompositionMapping = $matches[2];
+ $compat++;
+ } else {
+ $canonical = true;
+ $canon++;
+ }
+ $total++;
+ $dest = Utils::hexSequenceToUtf8( $decompositionMapping );
+
+ $compatibilityDecomp[$source] = $dest;
+ if ( $canonical ) {
+ $canonicalDecomp[$source] = $dest;
+ if ( empty( $exclude[$source] ) ) {
+ $canonicalComp[$dest] = $source;
+ }
+ }
+ #print "$codepoint | $canonicalCombiningClasses | $decompositionMapping\n";
+}
+fclose( $in );
+
+print "Recursively expanding canonical mappings...\n";
+$changed = 42;
+$pass = 1;
+while ( $changed > 0 ) {
+ print "pass $pass\n";
+ $changed = 0;
+ foreach ( $canonicalDecomp as $source => $dest ) {
+ $newDest = preg_replace_callback(
+ '/([\xc0-\xff][\x80-\xbf]+)/',
+ 'callbackCanonical',
+ $dest );
+ if ( $newDest === $dest ) continue;
+ $changed++;
+ $canonicalDecomp[$source] = $newDest;
+ }
+ $pass++;
+}
+
+print "Recursively expanding compatibility mappings...\n";
+$changed = 42;
+$pass = 1;
+while ( $changed > 0 ) {
+ print "pass $pass\n";
+ $changed = 0;
+ foreach ( $compatibilityDecomp as $source => $dest ) {
+ $newDest = preg_replace_callback(
+ '/([\xc0-\xff][\x80-\xbf]+)/',
+ 'callbackCompat',
+ $dest );
+ if ( $newDest === $dest ) continue;
+ $changed++;
+ $compatibilityDecomp[$source] = $newDest;
+ }
+ $pass++;
+}
+
+print "$total decomposition mappings ($canon canonical, $compat compatibility)\n";
+
+$out = fopen( dirname( __DIR__ ) . "/src/UtfNormalData.inc", "wt" );
+if ( $out ) {
+ $serCombining = Utils::escapeSingleString( serialize( $combiningClass ) );
+ $serComp = Utils::escapeSingleString( serialize( $canonicalComp ) );
+ $serCanon = Utils::escapeSingleString( serialize( $canonicalDecomp ) );
+ $serCheckNFC = Utils::escapeSingleString( serialize( $checkNFC ) );
+ $outdata = "<" . "?php
+/**
+ * This file was automatically generated -- do not edit!
+ * Run UtfNormalGenerate.php to create this file again (make clean && make)
+ *
+ * @file
+ */
+// @codingStandardsIgnoreFile
+
+UtfNormal\Validator::\$utfCombiningClass = unserialize( '$serCombining' );
+UtfNormal\Validator::\$utfCanonicalComp = unserialize( '$serComp' );
+UtfNormal\Validator::\$utfCanonicalDecomp = unserialize( '$serCanon' );
+UtfNormal\Validator::\$utfCheckNFC = unserialize( '$serCheckNFC' );
+\n";
+ fputs( $out, $outdata );
+ fclose( $out );
+ print "Wrote out UtfNormalData.inc\n";
+} else {
+ print "Can't create file UtfNormalData.inc\n";
+ exit( -1 );
+}
+
+$out = fopen( dirname( __DIR__ ) . "/src/UtfNormalDataK.inc", "wt" );
+if ( $out ) {
+ $serCompat = Utils::escapeSingleString( serialize( $compatibilityDecomp ) );
+ $outdata = "<" . "?php
+/**
+ * This file was automatically generated -- do not edit!
+ * Run UtfNormalGenerate.php to create this file again (make clean && make)
+ *
+ * @file
+ */
+// @codingStandardsIgnoreFile
+
+UtfNormal\Validator::\$utfCompatibilityDecomp = unserialize( '$serCompat' );
+\n";
+ fputs( $out, $outdata );
+ fclose( $out );
+ print "Wrote out UtfNormalDataK.inc\n";
+ exit( 0 );
+} else {
+ print "Can't create file UtfNormalDataK.inc\n";
+ exit( -1 );
+}
+
+# ---------------
+
+function callbackCanonical( $matches ) {
+ // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
+ global $canonicalDecomp;
+ // @codingStandardsIgnoreEnd
+
+ if ( isset( $canonicalDecomp[$matches[1]] ) ) {
+ return $canonicalDecomp[$matches[1]];
+ }
+
+ return $matches[1];
+}
+
+function callbackCompat( $matches ) {
+ // @codingStandardsIgnoreStart MediaWiki.NamingConventions.ValidGlobalName.wgPrefix
+ global $compatibilityDecomp;
+ // @codingStandardsIgnoreEnd
+
+ if ( isset( $compatibilityDecomp[$matches[1]] ) ) {
+ return $compatibilityDecomp[$matches[1]];
+ }
+
+ return $matches[1];
+}
diff --git a/vendor/wikimedia/utfnormal/scripts/memstress.php b/vendor/wikimedia/utfnormal/scripts/memstress.php
new file mode 100644
index 00000000..f444e34d
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/scripts/memstress.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * Approximate benchmark for some basic operations.
+ * Runs large chunks of text through cleanup with a lowish memory limit,
+ * to test regression on mem usage (bug 28146)
+ *
+ * Copyright © 2004-2011 Brion Vibber <brion@wikimedia.org>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup UtfNormal
+ */
+
+use UtfNormal\Validator;
+
+if ( PHP_SAPI != 'cli' ) {
+ die( "Run me from the command line please.\n" );
+}
+
+require_once dirname( __DIR__ ) . '/vendor/autoload.php';
+
+define( 'BENCH_CYCLES', 1 );
+define( 'BIGSIZE', 1024 * 1024 * 10 ); // 10m
+ini_set( 'memory_limit', BIGSIZE + 120 * 1024 * 1024 );
+
+$testfiles = array(
+ 'testdata/washington.txt' => 'English text',
+ 'testdata/berlin.txt' => 'German text',
+ 'testdata/bulgakov.txt' => 'Russian text',
+ 'testdata/tokyo.txt' => 'Japanese text',
+ 'testdata/young.txt' => 'Korean text'
+);
+$normalizer = new Validator;
+Validator::loadData();
+foreach ( $testfiles as $file => $desc ) {
+ benchmarkTest( $normalizer, $file, $desc );
+}
+
+# -------
+
+function benchmarkTest( &$u, $filename, $desc ) {
+ print "Testing $filename ($desc)...\n";
+ $data = file_get_contents( $filename );
+ $all = $data;
+ while ( strlen( $all ) < BIGSIZE ) {
+ $all .= $all;
+ }
+ $data = $all;
+ echo "Data is " . strlen( $data ) . " bytes.\n";
+ $forms = array(
+ 'quickIsNFCVerify',
+ 'cleanUp',
+ );
+
+ foreach ( $forms as $form ) {
+ if ( is_array( $form ) ) {
+ $str = $data;
+ foreach ( $form as $step ) {
+ $str = benchmarkForm( $u, $str, $step );
+ }
+ } else {
+ benchmarkForm( $u, $data, $form );
+ }
+ }
+}
+
+function benchmarkForm( &$u, &$data, $form ) {
+ #$start = microtime( true );
+ for ( $i = 0; $i < BENCH_CYCLES; $i++ ) {
+ $start = microtime( true );
+ $out = $u->$form( $data, Validator::$utfCanonicalDecomp );
+ $deltas[] = ( microtime( true ) - $start );
+ }
+ #$delta = (microtime( true ) - $start) / BENCH_CYCLES;
+ sort( $deltas );
+ $delta = $deltas[0]; # Take shortest time
+
+ $rate = intval( strlen( $data ) / $delta );
+ $same = ( 0 == strcmp( $data, $out ) );
+
+ printf( " %20s %6.1fms %12s bytes/s (%s)\n",
+ $form,
+ $delta * 1000.0,
+ number_format( $rate ),
+ ( $same ? 'no change' : 'changed' ) );
+
+ return $out;
+}
diff --git a/vendor/wikimedia/utfnormal/scripts/testdata/berlin.txt b/vendor/wikimedia/utfnormal/scripts/testdata/berlin.txt
new file mode 100644
index 00000000..0fef4d23
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/scripts/testdata/berlin.txt
@@ -0,0 +1,454 @@
+''Dieser Artikel beschäftigt sich mit Berlin, der Hauptstadt Deutschlands. Andere Namensträger finden sich unter [[Berlin (Begriffsklärung)]].''
+----
+{| border="0" cellpadding="2" cellspacing="1" style="float:right; empty-cells:show; margin-left:1em; margin-bottom:0.5em; background:#FFDEAD;"
+|+<font size="+1">'''Land Berlin'''</font><br />
+! colspan="2" bgcolor="#FFDEAD" | Landes- und Dienstflagge
+|-bgcolor="#FFFFFF"
+| colspan="2" align="center" bgcolor="#EFEFEF" |[[bild:Flagge_Berlin.png|150px|Landesflagge Berlins]] [[bild:Dienstflagge Berlin.png|150px|Dienstflagge des Landes Berlin]]<br />
+Landes- und Dienstflagge des Landes Berlin
+|- bgcolor="#FFDEAD"
+! Stadtwappen !! Karte
+|-bgcolor="#FFFFFF"
+! align="center" | [[Bild:Berlin Stadtwappen.png|center|140px|Wappen der Stadt Berlin]] || [[Bild:Karte berlin in deutschland.png|center|140px|Karte des Landes Berlin in Deutschland]]
+|-
+!colspan="2" bgcolor="#ffdead" | Basisdaten
+|-bgcolor="#FFFFFF"
+|[[Fläche]]: || [[Größenordnung (Fläche)|891,69 km²]]
+|-bgcolor="#FFFFFF"
+|[[Einwohner]]: || 3.388.477 <small>(12/2003)</small>
+|-bgcolor="#FFFFFF"
+|[[Bevölkerungsdichte]]: || 3.800 Einwohner/km²
+|-bgcolor="#FFFFFF"
+|Schulden: || 15.906 € pro Einwohner <br />''<small>(April 2004) [http://www.statistik-berlin.de/statistiken/oefffinanzen/schulden.htm]</small>''
+|-bgcolor="#FFFFFF"
+|Schulden gesamt: || 53,9 Mrd. € ''<small>(April 2004) [http://www.steuerzahler-berlin.de/]</small>''
+|-bgcolor="#FFFFFF"
+|[[Höhe]]: || 34 m ü. [[Normalnull|NN]]
+|-bgcolor="#FFFFFF"
+|[[Postleitzahl]]en: || 10001-14199
+|-bgcolor="#FFFFFF"
+|[[Telefonvorwahl|Vorwahlen]]: || 030
+|-bgcolor="#FFFFFF"
+|td valign="top" | [[Geografische Lage]]: || 52°&nbsp;31′ n.Br. <br />13°&nbsp;24′ ö.L.
+|-bgcolor="#FFFFFF"
+|[[KFZ-Kennzeichen]]: || <tt>B</tt>
+|-bgcolor="#FFFFFF"
+|[[Amtlicher Gemeindeschlüssel|Gemeindeschlüssel]]: || 11 1 00 000
+|-bgcolor="#FFFFFF"
+|Gliederung: || [[Orte in Berlin|12 Bezirke, 90 Stadtteile]]
+|-bgcolor="#FFFFFF"
+|[[ISO 3166-2:DE|ISO 3166-2]]: || <tt>DE-BE</tt>
+|-bgcolor="#FFFFFF"
+|Webseite: || http://www.berlin.de
+|-
+!colspan="2" bgcolor="#ffdead" | Politik
+|-bgcolor="#FFFFFF"
+|Reg. [[Bürgermeister]]: || [[Klaus Wowereit]] ([[Sozialdemokratische Partei Deutschlands|SPD]])
+|-bgcolor="#FFFFFF"
+|Reg. [[Politische Partei|Parteien]]: || [[Sozialdemokratische Partei Deutschlands|SPD]] und [[PDS]]
+|-bgcolor="#FFFFFF"
+|td valign="top" | [[Sitzverteilung in den deutschen Landesparlamenten|Sitzverteilung im<br />Abgeordnetenhaus]]<br />(141 Sitze): || td valign="top" | [[Sozialdemokratische Partei Deutschlands|SPD]] 44<br />[[CDU]] 35<br />[[PDS]] 33<br />[[FDP (Deutschland)|FDP]] 15<br />[[Bündnis 90/Die Grünen|B90/Grüne]] 14
+|-bgcolor="#FFFFFF"
+|letzte Wahl: || [[21. Oktober]] [[2001]]
+|-bgcolor="#FFFFFF"
+|nächste Wahl: || [[2006]]
+|-
+! colspan="2" bgcolor="#ffdead" | Parlamentarische Vertretung
+|-bgcolor="#FFFFFF"
+| Stimmen im [[Bundesrat (Deutschland)|Bundesrat]]: || 4
+|}
+'''Berlin''' ist als [[Stadtstaat]] ein [[Bundesland (Deutschland)|Land]] in der [[Bundesrepublik Deutschland]] und die größte Stadt Deutschlands: sie ist die bevölkerungsreichste Stadt ([[2003]]: 3.388.477 Einwohner) und mit einer Fläche von 89.169 ha auch die [[Liste der flächengrößten Städte Deutschlands|flächengrößte]] Stadt Deutschlands.
+
+Seit [[1990]] ist '''Berlin''' die [[Bundeshauptstadt]] der [[Bundesrepublik Deutschland]] nach der [[Deutsche Wiedervereinigung|Wiedervereinigung]]. Nach dem Fall der [[Berliner Mauer]] wuchs Berlin mit dem Umland zusammen, zur [[Megastadt]] der [[Metropolregion Berlin/Brandenburg]].
+
+==Allgemeines==
+Das Land Berlin ist gänzlich vom Land [[Brandenburg]] umgeben und liegt im Osten Deutschlands, etwa 70 km westlich der [[Polen|polnischen]] Grenze. Die Stadt ist einer der [[Ballungsgebiet|Verdichtungsräume]] der Bundesrepublik. [[1996]] fand eine Volksabstimmung über eine Länderfusion mit Brandenburg statt, welche jedoch scheiterte. Da man trotz dieses Ergebnisses auf politischer Seite weiterhin von der Notwendigkeit der Fusion überzeugt ist, strebt man nun eine erneute Volksabstimmung über diese Frage an.
+
+Vor der [[Wiedervereinigung]] der beiden deutschen Staaten [[Bundesrepublik Deutschland]] (''BRD'', West) und [[Deutsche Demokratische Republik]] (''DDR'', Ost) im Jahr [[1990]] war [[Bonn]] am [[Rhein]] die provisorische Hauptstadt der Bundesrepublik Deutschland, und [[Ost-Berlin]] war die Hauptstadt der ''DDR'' (amtlich: ''Berlin, Hauptstadt der DDR'', oder amtlich in der ''BRD'': ''Berlin (-Ost)''). Der Westteil Berlins ([[West-Berlin]], oder amtlich: ''Berlin (-West)'', amtlich in der DDR: ''Selbständige politische Einheit Westberlin'') nahm eine Sonderstellung zwischen den beiden deutschen Staaten ein.
+
+Mit der Wiedervereinigung am [[3. Oktober]] [[1990]] wurde Berlin wieder Hauptstadt Deutschlands. Im so genannten [[Hauptstadtbeschluss]] entschied der [[Deutscher Bundestag|Deutsche Bundestag]] am [[20. Juni]] [[1991]], dass Berlin auch Regierungs- und Parlamentssitz des vereinigten Deutschlands werden soll.
+
+== Geografie ==
+
+[[Bild:Luftbild_Berlin.jpg|thumb|Luftbild]]
+
+Berlin befindet sich in [[Eiszeit|eiszeitlich]] geprägter Landschaft im Warschau-[[Berliner Urstromtal]] zwischen den Hochebenen des [[Barnim]] und des [[Teltow (Landschaft)|Teltow]]. Das historische Zentrum Berlin liegt an der schmalsten Stelle des von der [[Spree]] in ost-westlicher Richtung durchflossenen Urstromtals. Im westlichsten [[#Bezirke|Bezirk]] [[Spandau]] mündet die Spree in die [[Havel]], die den Westen Berlins in Nord-Süd Richtung durchfließt. Der Flusslauf der Havel ähnelt dabei oft einer Seenlandschaft, die größten Ausbuchtungen bilden der [[Tegeler See]] und der [[Großer Wannsee|Große Wannsee]].
+
+Wesentliche Teile des heutigen Berlins liegen auf den beiden Hochebenen: große Teile der Bezirke [[Reinickendorf]] und [[Pankow]] liegen auf dem Barnim, während der Hauptteil der Bezirke [[Charlottenburg-Wilmersdorf]], [[Steglitz-Zehlendorf]], [[Tempelhof-Schöneberg]] und [[Neukölln]] auf dem Teltow gelegen ist.
+
+Die höchsten Erhebungen Berlins sind mit 120 m über NN der aus Trümmerschutt des [[Zweiter Weltkrieg|Zweiten Weltkriegs]] künstlich aufgeschüttete [[Teufelsberg]] im Bezirk [[Charlottenburg-Wilmersdorf]] und mit 115 m die [[Müggelberge]] im Bezirk [[Treptow-Köpenick]].
+
+=== Bezirke ===
+[[Bild:berlin.bezirke.png|thumb|Bezirke Berlins]]
+
+Nach dem Gebietsreformgesetz vom [[10. Juni]] [[1998]] wurde die Zahl der Berliner Verwaltungsbezirke zum [[1. Januar]] [[2001]] von 23 auf 12 reduziert.
+Berlin ist seitdem gegliedert in die Bezirke [[Berlin-Mitte|Mitte]], [[Friedrichshain-Kreuzberg]], [[Pankow]], [[Charlottenburg-Wilmersdorf]], [[Spandau]], [[Steglitz-Zehlendorf]], [[Tempelhof-Schöneberg]], [[Neukölln]], [[Treptow-Köpenick]], [[Marzahn-Hellersdorf]], [[Berlin-Lichtenberg|Lichtenberg]], [[Reinickendorf]].
+
+Weitere Differenzierung in [[Liste der Orte in Berlin]], siehe auch [[Berliner Straßen]] und Plätze.
+
+== Geschichte ==
+
+''Hauptartikel:'' [[Geschichte Berlins]]
+
+Die Geschichte Berlins beginnt nicht erst mit der ersten urkundlichen Erwähnung, sondern bereits mit der Vor- und [[Frühgeschichte]] des Berliner Raumes.
+Zeugnisse dieser frühen Phase der Besiedlung sind vor allem im Museum für Vor- und Frühgeschichte sowie als lebensechte Nachbildung im Museumsdorf Düppel zu sehen. Hier werden auch mittelalterliche handwerkliche Techniken vorgeführt.
+[[Bild:Reichstag.JPG|thumb|left|Der Reichstag]]
+[[Bild:Berliner Rathaus gross.jpeg|thumb|Berliner Rathaus (''Rotes Rathaus'')]]
+
+Funde von [[Feuerstein]]en und bearbeiteten Knochen in der Gegend lassen auf eine Besiedlung seit etwa 60000 v. Chr. schließen. Im [[9. Jahrtausend v. Chr.]] siedeln an der [[Spree]] und an der [[Dahme (Fluss)|Dahme]] [[Jagd|Jäger]] und [[Fischer]], die [[Pfeil (Geschoss)|Pfeil]]spitzen, Schaber und Feuersteinbeile hinterlassen. Aus dem [[7. Jahrtausend v. Chr.]] wurde eine Maske gefunden, die wohl als Jagdzauber diente.
+
+Im [[3. Jahrtausend v. Chr.]] bilden sich Kulturen mit [[Ackerbau]] und [[Viehzucht]], die handgefertigte [[Keramik]]en und [[Vorratsspeicher]] benutzen.
+
+Seit dem [[6. Jahrhundert v. Chr.]] siedeln sich verstärkt [[Germanen]] an:
+in historischen Quellen tauchen für sie die Stammesbezeichnungen
+[[Semnonen]] (Teilstamm der [[Sweben]]) und die [[Burgunder (Volk)|Burgunder]] auf.
+
+Später ziehen vom Berliner Raum aus Germanen in den süddeutschen Raum. Im Berliner Raum nimmt daher die Besiedlungsdichte ab, er bleibt aber germanisch besiedelt. Ab dem [[6. Jahrhundert]] strömen Slawenstämme in die [[Lausitz]]er Gegend und um das Jahr [[720]] auch in den Berliner Raum. Sie lassen sich auch an bisher unbesiedelten Standorten nieder und unterscheiden sich durch Standortwahl und Wirtschaftsweise von den Germanen.
+
+Ab dem [[12. Jahrhundert]] beginnt die Ostbesiedlung des Kaiserreichs.
+Auf den trockenen Flächen des [[Urstromtal]]s zwischen dem [[Teltow]] und dem [[Barnim]] wird eine Furt über die Spree besiedelt. Auf der rechten Uferseite entsteht Berlin, auf einer Spreeinsel [[Cölln]].
+
+'''Die wichtigsten historischen Daten:'''
+[[Bild:Kuppel des Reichstags.JPG|thumb|Der Reichstag mit Kuppel (vom Brandenburger Tor aus)]]
+:[[1197]] erste urkundliche Erwähnung [[Spandau]]s, das [[1232]] [[Stadtrecht]] erhält (seit 1920 Teil von Berlin)
+:[[1209]] erste urkundliche Erwähnung [[Köpenick]]s (seit 1920 Teil von Berlin)
+:um [[1230]] Verleihung des Stadtrechts für Berlin
+:[[1237]] erste urkundliche Erwähnung von Cölln
+:[[1244]] erste urkundliche Erwähnung von Berlin
+:[[1307]] Berlin und Cölln erhalten eine gemeinsame Verwaltung
+:[[1448]] "[[Berliner Unwille]]": Proteste der Bevölkerung gegen den brandenburgischen Kurfürsten [[Friedrich II. (Brandenburg)|Friedrich II. Eisenzahn]] und dessen Schlossneubau
+:[[1451]] Berlin wird Residenzstadt der [[Mark Brandenburg|brandenburgischen]] Markgrafen und Kurfürsten
+:[[1539]] Einführung der [[Reformation]] in Berlin
+:[[1567]] "[[Knüppelkrieg]]" zwischen Berlin und Spandau
+:ab [[1641]] mehrfache Stadterweiterungen, es entstehen die Vorstädte Friedrichswerder, Dorotheenstadt und Friedrichstadt
+:[[1701]] Berlin wird durch die Krönung des brandenburgischen Kurfürsten zum preußischen König [[Friedrich I. (Preußen)|Friedrich I.]] zur Hauptstadt des Königreichs [[Preußen]]
+:[[1709]] Die fünf bis dahin unabhängigen Städte Berlin, Cölln, Friedrichswerder, Dorotheenstadt und Friedrichstadt werden zur "königlichen Haupt- und Residenzstadt Berlin" vereinigt. Schon bald entstehen vor den Toren der Stadt neue Vorstädte.
+:[[1848]] [[Märzrevolution]] mit Barrikadenkämpfen
+:[[1861]] Das Stadtgebiet wird durch die Eingemeindung von Wedding, [[Moabit]], Tempelhofer und Schöneberger Vorstadt erweitert.
+:[[1871]] Berlin wird Hauptstadt des neu entstandenen Deutschen Reiches
+:[[1873]] Beginn des Baues des im Wesentlichen noch heute genutzten Kanalisationssystems (abgeschlossen 1893)
+:[[1918]] Als Ergebnis der [[Novemberrevolution]] wird in Berlin kurz hintereinander jeweils von [[Philipp Scheidemann]] und [[Karl Liebknecht]] die [[Republik]] ausgerufen.
+:[[1920]] umfangreiche Eingemeindung: Berlin wurde mit 7 weiteren Städten, 59 Landgemeinden und 28 Gutsbezirken zu "[[Groß-Berlin]]"
+:[[1933]] Nach der Ernennung [[Hitler]]s zum deutschen Reichskanzler wird Berlin zur Machtzentrale der [[Nationalsozialisten]]; diese richten die ersten "wilden Konzentrationslager" ein; Ende des Rechtsstaates; Terror gegen Kommunisten, Sozialdemokraten, entschiedene Christen und Juden
+:[[1936]] [[Olympische Sommerspiele 1936|Olympische Sommerspiele]] in Berlin
+:[[1937]] große 700-Jahr-Feiern in Berlin, die von den Nationalsozialisten als Propagandaveranstaltung genutzt werden
+: [[1938]] Vom 9. bis 10. November brannten infolge der "Reichspogromnacht" die Synagogen, jüdische Geschäfte und Wohnungen wurden demoliert, viele Juden verhaftet
+: In der Zeit des Nationalsozialismus bestand in der Nähe Berlins, in Uckermark, ein Jugendkonzentratonslager für Mädchen und junge Frauen, innerhalb Berlins bestanden mehrere kleine KZ-Außenstellen
+: [[1939]] Von Berlin aus wird der Zweite Weltkrieg ausgelöst, Hitler erlässt den Befehl zur "Aktion T 4" (Euthanasie-Befehl)
+: [[1940]]-[[1945]] Durch [[Flächenbombardement]]s der Alliierten sterben über 50.000 Berliner, mehr als 1,5 Millionen werden obdachlos.
+:[[1945]] das durch den Zweiten Weltkrieg zerstörte Berlin wird nach dem [[Zweiter Weltkrieg|Zweiten Weltkrieg]] "[[Vier-Sektoren-Stadt]]", die Versorgung der Bevölkerung mit Nahrungsmitteln und Brennholz ist katastrophal, das S-Bahnnetz und die Straßenbahn sind zerstört
+:[[1948]]/[[1949]] Blockade der westlichen Sektoren durch die sowjetischen Streitkräfte, [[Berliner Luftbrücke]] zur Versorgung der Bevölkerung mit Lebensmitteln und Gütern
+:[[1945]]/[[1949]] politische Spaltung Berlins im [[Ost-West-Konflikt]]
+:[[1961]] Bau der [[Berliner Mauer]] am [[13. August]]
+:[[1963]] Bei einem Besuch Westberlins spricht US-Präsident [[John F. Kennedy]] den berühmt gewordenen Satz "Ich bin ein Berliner".
+:[[1987]] große 750-Jahr-Feiern in beiden Teilen der Stadt
+:[[1989]] die Wende in der [[Deutsche Demokratische Republik|DDR]], Fall der [[Berliner Mauer|Mauer]].
+:[[1990]] [[Wiedervereinigung]] Deutschlands und der beiden Stadthälften [[Ost-Berlin|Ost-]] und [[West-Berlin]], Berlin wird Hauptstadt im vereinigten Deutschland.
+:seit [[1997]]: Der [[Berliner Bankenskandal]] um die "[[Bankgesellschaft Berlin]]" [http://www.bankgesellschaft.de] bereitet der Stadt und dem Land Berlin enorme finanzielle und fiskalische Probleme, die die Handlungsfähigkeit der Stadtverwaltung einschränken. Berlin klagt derzeit beim [[Bundesverfassungsgericht]] wegen einer "extremen Haushaltsnotlage", um eine Bundesergänzungszuweisung von 35 Milliarden Euro zum Schuldenabbau zu erhalten.
+
+=== Bevölkerung ===
+
+Im Jahr [[2003]] hatte Berlin knapp 3,4 Millionen Einwohner. Die [[Türkei|türkische]] und [[Kurden|kurdische]] Gemeinde Berlins umfasste 200.000 Köpfe. Außerdem wohnten in Berlin 180.000 [[Polen]] (9% aller Polen, die in [[Deutschland]] wohnten).
+Am letzten Stichtag, den 31.12.2000, lebten rund 430.000 Einwohner mit ausländischen Pass aus 185 Staaten in Berlin.
+<!--http://www.statistik-berlin.de/pms2000/sg03/2001/01-03-06.html-->
+
+Das durchschnittliche Lebensalter der Berliner Bevölkerung betrug 41,7 Jahre im Jahre 2004. Das entspricht einer Erhöhung von 2,5 Jahren in den letzten zwölf Jahren.
+
+== Politik ==
+
+[[Bild:Wahl_zum_Berliner_Abgeordnetenhaus_2001.png|thumb|Ergebnisse der Wahl zum Abgeordnetenhaus 2001]]
+
+Berlin ist seit der Wiedervereinigung der ehemals getrennten beiden deutschen Staaten am 3. Oktober 1990 ein vollwertiges Bundesland und zugleich eine kreisfreie Stadt, die in nunmehr 12 [[Stadtbezirk|Bezirk]]e untergliedert ist. Daneben ist Berlin die [[Hauptstadt]] der Bundesrepublik [[Deutschland]] und damit Sitz der [[Bundesregierung]], des [[Bundestag]]es und des [[Bundesrat]]es.
+
+=== Das Land Berlin ===
+
+Die [[Landesregierung]], also [[exekutive]] Ebene wird durch den [[Senat von Berlin]], bestehend aus dem Regierenden Bürgermeister (derzeit [[Klaus Wowereit]], SPD) und bis zu acht [[Senator]]en ausgeübt. Der [[Regierende Bürgermeister]] ist dabei zugleich Repräsentant des Landes und der Stadt.
+
+Die [[Legislative|gesetzgebende Gewalt]] ist das [[Abgeordnetenhaus von Berlin]] in welchem derzeit eine [[Koalition]] aus [[Sozialdemokratische Partei Deutschlands|Sozialdemokratischer Partei Deutschlands]] ([[SPD]]) und der [[Partei des demokratischen Sozialismus]] ([[PDS]]) die Mehrheit der [[Abgeordneter|Abgeordneten]] stellt. Oberstes Landesgesetz ist die [[Verfassung von Berlin]].
+
+=== Die Bezirke ===
+
+Die [[Bezirksverwaltung in Berlin|Bezirke]] stellen keine eigenständigen [[Gemeinde]]n dar und sind somit stark vom Senat und auf Verwaltungsebene von den [[Senatsverwaltung]]en abhängig, die die [[Fachaufsicht]] ausüben.
+
+Dennoch gibt es in jedem Berliner Bezirk ein eigenes ''Bezirksparlament'', die ''Bezirksverordnetenversammlung (BVV)'', welches das ''politische Bezirksamt'', bestehend aus Bezirksbürgermeister und fünf [[Stadtrat|Stadträten]] wählt. Bürgermeister und Stadträte werden zwar politisch gewählt, haben aber den Status eines ''Abteilungsleiters'' und sind verbeamtet, so genannte ''[[Beamter|Wahlbeamte]]''.
+
+Die Bürgermeister der Bezirke bilden unter Vorsitz des Regierenden Bürgermeisters das Gremium des ''[[Rat der Bürgermeister|Rates der Bürgermeister]]'', welcher den Senat berät.
+
+=== Länderfusion Berlin-Brandenburg ===
+
+Im Jahre [[1996]] scheiterte eine [[Volksabstimmung]] zur Länderfusion der Bundesländer Berlin und Brandenburg, vor allem durch die politische Dominanz Berlins, der bürgerfernen Diskussion um die Fusion und aufgrund der Finanzprobleme des Landes Berlin. Trotzdem wurde in den letzten Jahren die Zusammenarbeit der beiden Bundesländer intensiviert und viele Einrichtungen zusammengelegt. Teilweise wird eine neue Volksabstimmung über die Fusion für die nächsten Jahrzehnte diskutiert.
+
+Vor der [[Wiedervereinigung]] Deutschlands hatte der Begriff ''[[Berlin-Politik]]'' sogar einen weltpolitischen Inhalt in der Ost-West-Auseinandersetzung.
+
+''Siehe auch:'' [[West-Berlin]], [[Ost-Berlin]]
+
+=== Städtepartnerschaften ===
+
+Berlin unterhält mit folgenden Städten eine [[Städtepartnerschaft]]. Die Partnerschaften wurden durch einen Vertrag des [[Senat von Berlin|Senats]] mit der jeweiligen Stadt vereinbart. Zwischen [[1968]] und [[1986]] wurden nur auf Bezirksebene Partnerschaften abgeschlossen. Diese sind hier nicht wiedergegeben.
+
+*[[Los Angeles]], Bundesstaat [[Kalifornien]] [[USA]], seit 1967
+*[[Paris]], [[Frankreich]], seit 1987
+*[[Madrid]], [[Spanien]], seit 1988 ¹
+*[[Istanbul]], [[Türkei]], seit 1989
+*[[Moskau]], [[Russische Föderation]], seit 1990 ¹
+*[[Warschau]], [[Polen]], seit 1991 ¹
+*[[Budapest]], [[Ungarn]], seit 1991 ¹
+*[[Brüssel]], [[Belgien]], seit 1992
+*[[Jakarta]], [[Indonesien]], seit 1993
+*[[Taschkent]], [[Usbekistan]], seit 1993
+*[[Mexiko-Stadt]], [[Mexiko]], seit 1993
+*[[Peking]], [[Volksrepublik China]], seit 1994 ¹
+*[[Tokio]], [[Japan]], seit 1994
+*[[Buenos Aires]], [[Argentinien]], seit 1994
+*[[Prag]], [[Tschechien]], seit 1995 ¹
+*[[Windhuk]], [[Namibia]], seit 2000
+
+¹ Diese Städte hatten vor 1990 auch mit Ost-Berlin einen Partnerschaftsvertrag, der vom Magistrat der Stadt abgeschlossen wurde. Nach der Wiedervereinigung wurden diese Verträge jedoch außer Kraft gesetzt und später vom Senat Gesamt-Berlins überarbeitet.
+
+
+=== weiterführende Links ===
+
+*[[Verfassung von Berlin]] [http://www.parlament-berlin.de/parlamentb.nsf/SystemHTML/FramesetLR?OpenDocument&_0H15_1H15U10_2../Dokumente/Verfassung?OpenDocument_3]
+*[[Abgeordnetenhaus von Berlin]] [http://www.abgeordnetenhaus-berlin.de]
+*[[Regierender Bürgermeister von Berlin]] [http://www.berlin.de/RBmSKzl]
+*[[Senat von Berlin]] und [[Bezirksverwaltung in Berlin]] unter der offiziellen Webseite von Berlin [http://www.berlin.de]
+*[[Wahlen in Berlin|Wahlergebnisse]] beim Statistischen Landesamt [http://www.stala.verwalt-berlin.de]
+
+== Kultur und Sehenswürdigkeiten ==
+[[Bild:Brandenburger Tor 2003.jpg|thumb|Das Brandenburger Tor]]
+<!-- Hier sollte eine Kurzbeschreibung der wichtigsten Sehenswürdigkeiten und Kulturdenkmäler hin -->
+
+'''Siehe:''' [[Sehenswürdigkeiten in Berlin]]
+
+=== Kunst und Kultur ===
+
+[[Galerien in Berlin]], [[Museen in Berlin]], [[Kirchen in Berlin]], [[Historischer Hafen Berlin]], [[Staatsoper Unter den Linden]], [[Deutsche Oper Berlin]], [[Komische Oper Berlin]], [[Philharmonie Berlin]], [[Internationale Filmfestspiele Berlin]], [[Jüdisches Museum Berlin]]
+
+=== Sport ===
+
+'''Sport:''' [[Hertha BSC Berlin]], [[Berlin-Marathon]], [[Eisbären Berlin]], Eishockey, [[Moderner Fünfkampf]], [[Wasserfreunde Spandau]], Wasserball, [[Alba Berlin|Alba Berlin (Basketball)]], [[Berlin Thunder]] ([[American Football]])
+
+== Wirtschaft ==
+[[Bild:Bundeskanzleramt.JPG|thumb|left|Das Marie-Elisabeth-Lüders-Haus]]
+Das [[Bruttoinlandsprodukt]] des Landes Berlin betrug im Jahr 2001 75,8 Mrd. €. Zum Vergleich: Hamburg erzielte ein Bruttoinlandsprodukt von 73,7 Mrd. €, im Land Brandenburg waren es 42,3 Mrd. € (IHK-Bericht 2000/2001).
+
+In Berlin gab es 2001 insgesamt 138.688 der Industrie- und Handelskammer zugehörige Betriebe. Davon waren 48.289 im Handelsregister eingetragen und 90.399 so genannte Kleingewerbetreibende (IHK-Bericht 2000/2001).
+
+=== Berliner Wirtschaft 2001 ===
+
+Die wirtschaftliche Entwicklung Berlins war im Jahre [[2001]] meist von negativen [[Trend]]s bestimmt. Das Bruttoinlandsprodukt sank im Vergleich zum Vorjahr um ein halbes Prozent, die Zahl der Erwerbstätigen sank um 5000 Beschäftigte,
+die Arbeitslosenquote lag im November 2001 bei 16 Prozent. Berlin befand sich damit im Geleitzug aller nordostdeutschen Bundesländer, die alle eine
+Arbeitslosenquote zwischen 14 Prozent (Thüringen) und 18 Prozent (Sachsen-Anhalt) aufwiesen und damit weit über dem Bundesdurchschnitt von 9,2 Prozent lagen.
+[[Bild:Deutscher Dom.JPG|thumb|Der Deutsche Dom bei Nacht]]
+Positive Impulse gingen allein vom Dienstleistungsbereich, besonders der unternehmensnahen Dienstleistungen, aus.
+
+Im verarbeitenden Gewerbe verzeichnete der Fahrzeugbau, die chemische
+Industrie und die Elektrotechnik zum Teil kräftige Umsatzsteigerungen.
+
+Einzelhandel und Gastgewerbe litten unter mangelnder privater Nachfrage.
+
+In einer schweren Krise steckt seit Jahren die Berliner Bauwirtschaft, die offensichtlich vom Bauboom der Jahre nach 1990 nicht nachhaltig profitieren konnte.
+
+Positiv entwickelte sich die Neugründung von Unternehmen in Berlin und die Zahl der Gewerbeanmeldungen. Der Saldo von Gewerbean- und abmeldungen ist seit Jahren positiv, hatte [[1990]] einen vereinigungsbedingten Höchststand von über 26.000, und liegt nach einem Tief im Jahre [[1999]] aktuell wieder bei 4.000 mehr Anmeldungen als Abmeldungen.
+
+Die Terroranschläge des [[11. September]] [[2001]] in den USA hatten sofort auch negative Auswirkungen in Berlin, vor allem in den Touristikbereichen, die eine sehr große wirtschaftliche Rolle in der Bundeshauptstadt spielen. So ging das Passagieraufkommen der drei Berliner Flughäfen im Vergleich zum Jahr [[2000]] von 13,3 Millionen auf 12,6 Millionen Passagiere zurück.
+
+Große Erwartungen werden in Berlin in die Innovations- und Technologiezentren gesetzt. Der größte europäische Technologiestandort auf dem Gelände der ehemaligen [[Akademie der Wissenschaften der DDR]], bekannt unter der Kurzform [[WISTA]] in [[Adlershof]] mit den Schwerpunkten Umwelttechnologie,Informations- und Kommunikationstechnologie und Optoelektronik sowie der Biotechnologiestandort [[Berlin-Buch]] nehmen eine ausgesprochen positive Entwicklung und sind in internationale Netzwerke eingebunden.
+
+Berlin ist daher entschlossen, den Standortfaktor Wissenschaft und Forschung zu nutzen und auszubauen. Entschiedene Fördermaßnahmen sind aber in Folge des [[Berliner Bankenskandal|Berliner Bankenskandals]] und der sich hieraus ergebenden Haushaltsnöte unmöglich.
+
+''Siehe auch:'' [[Berlin - Wirtschaft]]
+
+=== Medien ===
+
+==== Rundfunk- und Fernseh-Sender ====
+
+*[[Rundfunk Berlin-Brandenburg]] (RBB), entstanden 2003 aus dem [[Sender Freies Berlin]] (SFB) und dem [[Ostdeutscher Rundfunk Brandenburg|Ostdeutschen Rundfunk Brandenburg]] (ORB)
+*[[Sat1]], hat seine Deutschlandzentrale in der Oberwallstraße.
+*[[N24]]
+*[[Deutsche Welle ]] TV
+*[[XXP]]
+*[[MTV]] - zog von Hamburg und München nach Berlin: in die Mediacity Oberspree im Bezirk [[Friedrichshain-Kreuzberg]].
+*[[n-tv]] - Umzug in die Sendezentrale des Muttersenders RTL nach Köln zum 01.09.2004
+*TV Berlin (tvb), privates Ballungsraumfernsehen
+*Fernsehen aus Berlin ([[FAB]]), privates Ballungsraumfernsehen, Sendestart: 1. Februar 1991
+*[[Offener Kanal Berlin]]
+*[[DeutschlandRadio Berlin]], entstanden aus [[RIAS]] Berlin und [[DS Kultur]]
+*[[Privatradio]]s (Auswahl): Berliner Rundfunk, JAM FM, r.s.2, Metropol FM, Radio Paradiso, KISS FM, Klassik Radio, Jazz Radio, [[Nouvelle Radio Jeunesse|Energy]] 103,4, Nova Radio/Joy FM/Kaufradio/RadiJojo, 104.6 RTL, Radio Power 4, Spreeradio, RFI, BB Radio, Hundert,6
+
+==== Druckmedien ====
+[[Bild:Hotel Adlon.JPG|thumb|left|Das Hotel Adlon am Pariser Platz]]
+* [[Die Welt]], [[Der Tagesspiegel]], [[die tageszeitung]], [[Berliner Zeitung]], [[Berliner Morgenpost]], [[B.Z.]], Berliner Kurier
+
+'''Stadtmagazine'''
+
+* [[Tip (Magazin)|Tip]], [[Zitty]]
+
+==== Sendeanlagen von Rundfunksendern ====
+[[Bild:Fernsehturm.JPG|thumb|Der Berliner Fernsehturm]]
+
+Im Stadtgebiet von Berlin befinden sich zahlreiche Rundfunksendeanlagen für alle Wellenbereiche (außer Langwelle). Neben dem 368 Meter hohen [[Berliner Fernsehturm]] am Alexanderplatz, von dem aus die meisten Programme abgestrahlt werden, sind dies:
+* der 212 Meter hohe [[Fernmeldeturm Berlin-Schäferberg]] (Sendeanlagen für [[UKW]] und TV)
+* der UKW- und TV-Sendemast des RBB am [[Scholzplatz]] ([[1963]] errichteter 230 Meter hoher, abgespannter Rohrmast)
+* der MW-Sender des RBB in der [[Stallupöner Allee]] (ein [[1987]] errichter, gegen Erde isolierter 130 Meter hoher Stahlfachwerkmast. Bis [[1998]] existierte noch ein zweiter ebenfalls gegen Erde isolierter Sendemast, der [[1948]] errichtet wurde)
+* die Sendeanlage für [[Mittelwelle]], [[Kurzwelle]] und UKW von Deutschlandradio (früher [[RIAS]]) in [[Berlin-Britz]]. Als Sendeantennen für UKW und MW sind zwei gegen Erde isolierte, abgespannte Stahlfachwerkmasten mit Höhen von 160 beziehungsweise 144 Metern vorhanden, die 1948 errichtet wurden. Für die Kurzwellensender existieren auf dem Areal der Anlage zwei Dipolantennen
+* ein 180 Meter hoher, abgespannter Stahlfachwerkmast beim [[Berliner Olympiastadion]].
+
+Der [[Berliner Funkturm]] dient seit [[1973]] nicht mehr zur Verbreitung von Rundfunkprogrammen, sondern nur noch als Relaisstation für Funkdienste des nichtöffentlichen Landfunkdienstes und des Amateurfunks.
+Bis [[2002]] existierte in [[Berlin-Köpenick]] eine Sendeanlage für UKW und MW mit einem 248 Meter hohen gegen Erde isolierten, abgespannten Stahlrohrmast. Diese Anlage ist inzwischen abgebrochen worden. Der Betrieb der dort befindlichen UKW-Sender wurde zum Berliner Fernsehturm, der der MW-Sender nach [[Zehlendorf bei Oranienburg|Zehlendorf]] bei Oranienburg verlegt.
+
+Eine weitere bemerkenswerte funktechnische Anlage im Stadtgebiet ist die Richtfunkstelle [[Berlin-Frohnau]], die über einen 358,70 Meter hohen abgespannten Stahlfachwerkmast und einem 117 Meter hohen Stahlgitterturm verfügt.
+
+Von 1933 bis 1948 war in Berlin-Tegel Standort des Rundfunksenders für Berlin. Die Gebäude stehen noch und werden von der Deutschen Telekom AG zu Meßzwecken benutzt, während die Antennenträger 1948 demontiert wurden.
+In Berlin-Adlershof befand sich vor dem 2. Weltkrieg die zentrale Funkstelle der Polizei mit 2 120 Meter hohen, selbststrahlenden Sendemasten. Zu Beginn der 50er Jahre wurde in Berlin-Adlershf ein Radioteleskop mit 36 Meter Durchmesser errichtet.
+
+Auf dem [[Teufelsberg]] befindet sich eine große Radaranlage, die einst den Alliierten zur Überwachung des Luftraums diente und heute der DFS zur Sicherung des zivilen Flugverkehrs dient.
+
+== Verkehr ==
+
+=== Öffentlicher Verkehr ===
+
+[[Bild:Potsdamer Platz.JPG|thumb|Potsdamer Platz]]
+
+Dem innerstädtischen Verkehr dienen die [[S-Bahn Berlin|S-Bahn]] – betrieben von der S-Bahn Berlin GmbH – sowie die [[U-Bahn Berlin|U-Bahn]], [[Straßenbahn]]en und [[Omnibus|Busse]] – betrieben von der [[Berliner Verkehrsbetriebe|BVG]].
+
+In Ost-West-Richtung wird die Innenstadt von der als Hochbahn angelegten [[Berliner Stadtbahn|Stadtbahn]] durchquert. Sie verbindet den [[Berlin Ostbahnhof|Ostbahnhof]] mit dem [[Bahnhof Berlin Charlottenburg|Bahnhof Charlottenburg]], über [[Alexanderplatz]], [[Bahnhof Berlin-Friedrichstraße|Friedrichstraße]] und [[Bahnhof Berlin Zoologischer Garten|Zoologischer Garten]]. Unterstützt wird die Ost-West-Verbindung durch die U-Bahnlinie 5 (U5), die teilweise im Ostteil Berlins oberirdisch verläuft. Zurzeit wird die Ost-West-Trasse durch eine teilweise unterirdische Nord-Süd-Trasse ergänzt (Teil des Pilzkonzepts), die am Lehrter Bahnhof (offizieller Name heute ''Berlin Hauptbahnhof-Lehrter Bahnhof'') die Stadtbahn kreuzt.
+
+Vervollständigt wird der S-Bahn-Verkehr durch die [[Berliner Ringbahn|Ringbahn]], auf der man in 63 Minuten einmal um die Innenstadt herum fahren kann.
+
+Zum Eisenbahnknotenpunkt Berlin gehört auch der bei [[Potsdam]] gelegene [[Rangierbahnhof]] Seddin.
+
+Für den Regionalverkehr verkehren Regionalbahnen und -expresslinien der [[Deutsche Bahn|Deutschen Bahn]] sowie zwei [[InterConneX]]-Linien.
+
+''Siehe auch:'' [[Geschichte des ÖPNV Berlins]], [[Liste Berliner Bahnhöfe]], [[Liste Berliner U-Bahnhöfe]]
+
+===Autobahnen===
+Die Innenstadt wird von Westen her von einem [[Autobahn]]-Halbkreis ([[Bundesautobahn 100|A 100]] – Berliner Stadtring) umgeben, der langfristig zu einem Ring vervollständigt werden soll. Rund um Berlin verläuft die Autobahn [[Bundesautobahn 10|A&nbsp;10]] (Berliner Ring).
+
+Von der A&nbsp;100 gibt es innerhalb des Stadtgebiets folgende Autobahnen Richtung Berliner Ring:
+* [[Bundesautobahn 111|A 111]] in Richtung Nordwesten (Richtung [[Hamburg]] und [[Rostock]])
+* [[Bundesautobahn 113|A 113]] in Richtung Südosten (Richtung [[Dresden]] und [[Cottbus]]). Diese Autobahn beginnt derzeit erst am Dreieck Treptow im äußersten Südosten der Stadt. Bis [[2007]] soll der im Bau befindliche Anschluss von der A&nbsp;100 (beginnend am Dreieck Neukölln) bis zur Berliner Stadtgrenze fertig gestellt sein. Am [[14. Juli]] [[2004]] wurde dazu das erste Teilstück vom Dreieck Neukölln bis zur Anschlussstelle Späthstraße für den Verkehr freigegeben.
+* [[Bundesautobahn 115|A 115]] in Richtung Südwesten (Richtung [[Hannover]] und [[Leipzig]]), teilweise auf der [[AVUS]].
+
+Zusätzlich dazu gibt es im Norden der Stadt noch die [[Bundesautobahn 114|A 114]] von der Prenzlauer Promenade im Bezirk [[Pankow]] zur A&nbsp;10. Die nur wenige Kilometer lange ehemalige [[Bundesautobahn 104|A 104]], die im Südwesten der Stadt [[Steglitz]] mit der A&nbsp;100 verbindet, wurde inzwischen zur [[Autostraße]] herabgestuft.
+
+===Flughäfen===
+Berlin besitzt drei Flughäfen in [[Flughafen Berlin-Tegel|Tegel]], [[Flughafen Berlin-Tempelhof|Tempelhof]] und [[Flughafen Berlin-Schönefeld|Schönefeld]]. Langfristig ist geplant den Flughafen [[Flughafen Berlin-Schönefeld|Schönefeld]] zu vergrößern um die im Innenstadtbereich liegenden Flughäfen [[Flughafen Berlin-Tegel|Tegel]] und [[Flughafen Berlin-Tempelhof|Tempelhof]] zu entlasten beziehungsweise zu schließen. Das Großprojekt Flughafen [[Flughafen Berlin-Schönefeld|Schönefeld]] trifft jedoch bei vielen Berlinern und Brandenburgern auf großen Widerstand.
+
+== Wissenschaft und Forschung ==
+
+=== Hochschulen in Berlin ===
+In Berlin studieren an insgesamt 17 Universitäten und Hochschulen rund 150.000 Studentinnen und Studenten:
+*[[Freie Universität Berlin]] (FU) http://www.fu-berlin.de
+*[[Humboldt-Universität zu Berlin]] (HU) http://www.hu-berlin.de
+*[[Charité]] Berlin (Gemeinsame Medizinische Fakultät von HU und FU) http://www.charite.de
+*[[Technische Universität Berlin]] (TU) http://www.tu-berlin.de
+*[[Fachhochschule für Technik und Wirtschaft]] (FHTW) http://www.fhtw-berlin.de
+*Fachhochschule für Wirtschaft (FHW) http://www.fhw-berlin.de
+*Fachhochschule für Verwaltung und Rechtspflege http://www.fhvr-berlin.de
+*[[Universität der Künste Berlin]] (UdK, früher: Hochschule der Künste - HdK) http://www.udk-berlin.de
+*Hochschule für Musik "Hanns Eisler" (HfM) http://www.hfm-berlin.de
+*Hochschule für Schauspielkunst "Ernst Busch" http://www.hfs-berlin.de/
+*Kunsthochschule Berlin-Weißensee Hochschule für Gestaltung (KHB) http://www.kh-berlin.de
+*[[Technische Fachhochschule Berlin]] (TFH) http://www.tfh-berlin.de
+*Alice-Salomon Fachhochschule für Sozialarbeit und Sozialpädagogik (ASFH) http://www.asfh-berlin.de
+*Katholische Hochschule für Sozialwesen Berlin (KHSB) http://www.khsb-berlin.de
+*Evangelische Fachhochschule Berlin (EFB) http://www.evfh-berlin.de
+*Touro College Berlin http://www.touroberlin.de/
+*Berufsakademie Berlin http://www.ba-berlin.de/
+
+=== Forschungsinstitute in Berlin ===
+*Max-Planck-Institut für Bildungsforschung http://www.mpib-berlin.mpg.de
+*Max-Planck-Institut für Infektionsbiologie http://www.mpiib-berlin.mpg.de
+*Max-Planck-Institut für molekulare Genetik http://www.molgen.mpg.de
+*Max-Planck-Institut für Wissenschaftsgeschichte http://www.mpiwg-berlin.mpg.de
+*Fraunhofer-Institut für Nachrichtentechnik - Heinrich-Hertz-Institut http://www.hhi.fraunhofer.de
+*Fraunhofer-Institut für Offene Kommunikationssysteme (FOKUS)
+*Fraunhofer-Institut für Produktionsanlagen und Konstruktionstechnik (IPK)
+*Fraunhofer-Institut für [[Rechnerarchitektur]] und [[Softwaretechnik]] (FIRST)
+*Fraunhofer-Institut für Software- und Systemtechnik (ISST)
+*Fraunhofer-Institut für Zuverlässigkeit und [[Mikrointegration]] (IZM)
+*Berliner Elektronenspeicherring-Gesellschaft m.b.H. BESSY http://www.bessy.de
+*Ecologic gGmbH http://www.ecologic.de
+*Institut für Ökologische Wirtschaftsforschung gGmbH (IÖW) http://www.ioew.de
+*Fritz-Haber-Institut der Max-Planck-Gesellschaft http://www.fhi-berlin.mpg.de
+*Hahn-Meitner-Institut [http://www.hmi.de/ hmi.de]
+*Institut für Planetenforschung des [[Deutsches Zentrum für Luft- und Raumfahrt|DLR]] http://solarsystem.dlr.de/
+*Physikalisch-Technische Bundesanstalt [http://www.ptb.de/ PTB.de]
+*Umweltbundesamt (UBA) http://www.umweltbundesamt.de
+<!-- == Städtepartnerschaften == -->
+
+=== Wichtige Berliner Persönlichkeiten===
+
+*Politiker
+**[[Willy Brandt]], ([[Sozialdemokratische Partei Deutschlands|SPD]])
+**D. Dr. [[Hermann Ehlers]], ([[CDU]]), [[Bundestagspräsident]]
+**Dr. [[Victor-Emanuel Preusker]] ([[1913]]-[[1991]]), ([[FDP (Deutschland)|FDP]], später [[CDU]]), [[MdB]], Bundesminister für Wohnungsbau
+**[[Ernst Reuter]], ([[Sozialdemokratische Partei Deutschlands|SPD]])
+
+*andere Persönlichkeiten
+**[[Alexander Beer]], jüdischer Architekt
+**[[Adolf Damaschke]], Bodenreformer
+**[[Hans Dominik]], Schriftsteller (technische Zukunftsliteratur), Journalist und Ingenieur
+**[[Gottfried Wilhelm Lehmann]], Baptistenpastor
+**[[Manfred Maurenbrecher]], Liedermacher und Autor
+**[[Werner-Viktor Toeffling]], Maler und Bühnenbildner
+**[[1932]], [[Charles Wilp]], Werbemacher und Künstler (Afri Cola Rausch, VW Käfer ''Und läuft ... und läuft ... und läuft'')
+
+''Siehe auch:'' [[Liste der Ehrenbürger von Berlin]]
+
+== Siehe auch ==
+
+* [[Geschichte Berlins]], [[Wirtschaft Berlins]], [[Berlin-Literatur]]
+* [[Berlinerisch]], [[Berliner]]
+* [[Liste der deutschen Hauptstädte]] in der Geschichte
+* [[Metropolregion Berlin/Brandenburg]].
+
+== Literatur ==
+
+* Presse- und Informationsamt des Landes Berlin (Hg.), ''Berlin Handbuch - Das Lexikon der Bundeshauptstadt''; Berlin 1992, (ISBN 3-927551-27-9)
+*Hosfeld, Rolf/Teicke, Friehelm/Vogt, Tobias/Wörtmann, Rainer: ''Berlin Kultur(ver)führer 2004'', Helmut Metz : Hamburg, 3. Aufl. 2004, 255 S., (ISBN 3-9807381-7-5)
+* Philipp Oswalt, ''Berlin - Stadt ohne Form''; München, London, New York 2000 (ISBN 3-7913-24403)
+* Bernhard van Treeck, ''Street Art Berlin''; Berlin 1999 (ISBN 3-89602-191-5)
+
+==Weblinks==
+* [http://www.berlin.de/ Offizielle Website der Hauptstadt Deutschlands]
+* [http://www.berlin-ehrungen.de/indexthemen.htm Daten zu Berlin]
+
+[[Kategorie:Ort in Deutschland]]
+[[Kategorie:Ort in Berlin| ]]
+[[Kategorie:Hauptstadt]]
+[[Kategorie:Bundesland (Deutschland)]]
+[[Kategorie:Berlin| ]]
+
+[[ar:برلين]]
+[[bg:Берлин]]
+[[cs:Berlín]]
+[[cy:Berlin]]
+[[da:Berlin (hovedstad)]]
+[[en:Berlin]]
+[[eo:Berlino]]
+[[es:Berlín]]
+[[et:Berliin]]
+[[fi:Berliini]]
+[[fr:Berlin]]
+[[he:ברלין]]
+[[id:Berlin]]
+[[it:Berlino]]
+[[ja:ベルリン]]
+[[la:Berolinum]]
+[[lt:Berlynas]]
+[[nds:Berlin]]
+[[nl:Berlijn]]
+[[no:Berlin]]
+[[pl:Berlin]]
+[[pt:Berlim]]
+[[ro:Berlin]]
+[[ru:Берлин]]
+[[simple:Berlin]]
+[[sk:Berlín]]
+[[sl:Berlin]]
+[[sv:Berlin]]
+[[tokipona:ma tomo Pelin]]
+[[uk:Берлін]]
+[[zh:柏林]] \ No newline at end of file
diff --git a/vendor/wikimedia/utfnormal/scripts/testdata/bulgakov.txt b/vendor/wikimedia/utfnormal/scripts/testdata/bulgakov.txt
new file mode 100644
index 00000000..6eaa8534
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/scripts/testdata/bulgakov.txt
@@ -0,0 +1,40 @@
+'''Сергей Николаевич Булгаков''' родился в [[1873]] г. в небольшом городке Ливны Орловской губернии в семье священника. Учился в духовном училище и в Орловской духовной семинарии, затем в Елецкой гимназии. В [[1894]] г. закончил юридический факультет Московского университета.
+
+Еще во время учебы в семинарии Булгаков пережил религиозный кризис и увлекся марксизмом. В [[университет|университете]] он серьезно занимался изучением политической экономии.
+
+Углубленно занимаясь [[марксизм|марксизмом]], Булгаков со временем понял несостоятельность этого учения. Под воздействием чтения русских религиозных мыслителей ([[Толстой, Лев Николаевич|Льва Толстого]], [[Достоевский, Фёдор Михайлович|Фёдора Достоевского]], [[Соловьёв, Владимир Сергеевич|Владимира Соловьева]] и др.), бесед и споров с Толстым он снова обретает религиозную веру (см. Серней Булгаков "От марксизма к идеализму". Москва, [[1903]]). Подобная эволюция была характерна для русской интеллигенции той поры, и вскоре Булгаков выдвигается в ряд ее признанных духовных лидеров. Он стал одним из основных участников сборника "Проблемы идеализма" ([[1902]]), где впервые объединились ведущие лица нарождавшегося [[религия|религиозно]]-[[философия|философского]] движения; название сборника его статей "От марксизма к идеализму" (1903) сделалось крылатым словом, выразившим духовный смысл исторического момента.
+
+Последующие годы период наибольшей общественной, и публицистической, активности [[философ|философа]]. Он участвует во множестве начинаний, знаменующих собой религиозно-философского возрождение в журнале "Новый путь" и "Вопросы жизни", сборнике "Вопросы религии", "О Владимире Соловьеве", "О религии Льва Толстого", "Вехи", в работе "Религия философского общества памяти Владимира Соловьева" и книгоиздательства "Путь", где в [[1911]]-[[1917|17]] гг. выходили в свет важнейшие произведения русской религиозной мысли. В [[1906]] г. он был также избран депутатом Второй Государственной Думы (как беспартийный "христианский социалист"). В творчестве его в этот период совершается переход от лекций и статей на темы религии и [[культура|культуры]] (важнейшие из них были им собраны в двухтомник "Два града", [[1911]]) к оригинальным философским разработкам. В монографиях "Философия хозяйства" (1912) и главным образом "Свет Невечерний" (1917) он намечает основы собственного учения, идущего в русле софиологии Владимира Соловьева и Флоренского, однако вобравшего и заметное влияние позднего Шеллинга, а также ряд собственных идей, питаемых интуициями [[православие|православной]] религиозности. Процесс постепенного возврата к церковно-православному миросозерцанию завершается уже в революционные годы принятием священства ([[1918]]). С этим завершением Булгаков сразу же начинает играть видную роль также и в церковных кругах, активно участвуя в работе Всероссйского Поместного Собора Православной Церкви (1917-18) и близко сотрудничая с патриархом Тихоном. Восприняв безусловно отрицательно [[Октябрьская революция 1917|Октябрьский переворот]], отец Сергий быстро откликнулся на него диалогами "На пиру богов", написанными в стиле и духе "Трех разговоров" Владимира Соловьева; диалоги вошли в коллективном сборнике "Из глубины" (1918; 2-е изд. М., 1991). В годы [[Гражданская война 1917-22|гражданской войны]] отец Сергий находился в Крыму и, будучи оторван как от иерейского служения, так и от общественно-публицистической деятельности, интенсивно работал в философии. В написанных тогда сочинениях "Философия имени" (1920, изд. 1953) и "Трагедия философии" (1920, изд. в нем. пер. 1928) он подверг пересмотру свой взгляд на соотношение философии и догматики [[христианство|христианства]], придя к выводу о том, что христианское умозрение способно выразиться без искажений исключительно в форме догматического богословия. Последнее и стало с тех пор основной сферою его творчества.
+
+В [[1922]] г. отец Сергий был включен в составленные ГПУ по инициативе [[Ленин, Владимир Ильич|В.И. Ленина]] списки деятелей науки и культуры, подлежащих высылке за рубеж. 30 декабря 1922 г. он отправляется из Крыма в изгнание и после недолгого пребывания в [[Стамбул|Константинополе]] в мае [[1923]] г. занимает должность профессора церковного права и богословия на юридическом факультете Русского Научного Института в [[Прага|Праге]]. Вскоре при его ближайшем участии возникает и успешно осуществляется проект создания в [[Париж|Париже]] Православного Богословского Института. С его открытия в [[1925]] г. и до своей кончины отец Сергий был его бессменным главой, а также профессором кафедры догмат, богословия. Под его руководством Сергиевское Подворье как стали называть комплекс институтских строений с храмом во имя преподобного [[Сергий Радонежский|Сергия Радонежского]] выросло в крупнейший центр православной духовности и богословской науки в зарубежье. Пастырская, профессорская и руководящая работа в Институте ядро всей деятельности отца Сергия в последнее двадцатилетие его жизни.
+
+Эта деятельность была чрезвычайно многогранна. Помимо дел, связанных с Институтом, и помимо богословского творчества, отец Сергий уделял большое внимание еще по меньшей мере двум сферам: дух. руководству русской молодежью и участию в экуменическом движении. Центральным руслом религиозной активности русской молодежи за рубежом стало Русское Студенцеское Христианское Движение. Отец Сергий был одним из главных его отцов-основателей. Он участвовал в его зарождении, в первых съездах РСХД в Пшерове ([[Чехословакия]]) и Аржероне ([[Франция]]) и продолжал постоянно его курировать, оставаясь для членов Движения незаменимым наставником и авторитетом. В работу экуменич. движения о. Сергий включился в [[1927]] г. на Всемирной христианской конференции "Вера и церковное устройство" в Лозанне. До конца 30-х гг. он принял участие во многих экуменических начинаниях, став одним из влиятельных деятелей и идеологов движения; в [[1934]] г. он совершил большую поездку по [[Соединённые Штаты Америки|США]]. Наиболее перспективным направлением в экуменической сфере оказалось сотрудничество с англиканской церковью. Объективные возможности для сближения между православием и англиканством указывались и "были признаны со времен Хомякова; трудами отца Сергия и его сподвижников (оотца Георгия Флоровcкoгo, Н.М. Зернова, Г.П. Федотова и других) они начали воплощаться в жизнь. В конце 1927 начале [[1928]] г. проходит англо-русский религиозный съезд, результатом которого стало учреждение двухстороннего Содружества святого Албания (древнеанглийский святой мученик) и преподобного Сергия Радонежского. Это Содружество продолжает свою деятельность поныне.
+
+В [[1939]] г. у отца Сергия был обнаружен рак горла. Он перенес опасные операции, побывал на пороге смерти и в значительной степени утратил способность речи. Начавшаяся [[Вторая мировая война]] ограничила еще более сферу его трудов. Однако до последних дней жизни, в тяжелых условиях оккупированного Парижа, он не прекращал служить литургию и читать лекции (что стоило ему огромных усилий), а также работать над новыми сочинениями. Его творчество обладает редкой цельностью: всем его главным темам он сумел подвести итог и дать отчетливое завершение. Как и в каноне Священного Писания, его последняя кн. он закончил ее совсем незадолго до смерти "Апокалипсис Иоанна".
+
+Творчество отца Сергия начиналось с публицистики, статей на экономические, культурно-общественные, и религиозно-филоские темы. Помимо начального этапа, публицистика выходила на первый план в критические моменты жизни [[Россия|России]]: [[революция 1905-07]] гг., начало первой мировой войны, 1917 г. Целый ряд существенных тем булгаковской мысли остался развит почти исключительно в данной форме: религия и культура, христианство, [[политика]] и [[социализм]], задачи общественности, путь русской интеллигенции, проблемы церковной жизни, проблемы искусства... Булгаков не просто участник знаменитых "Вех" (1909, статья "Героизм и подвижничество"), но и один из главных выразителей "веховства" как идейного движения, призвавшего интеллигенцию к отрезвлению, отходу от стадной морали, утопизма, оголтелого революционерства в пользу работы духовного осмысления и конструктивной социальной позиции. В этот же период он разрабатывает идеи социалистического христианства, в широком спектре, включающем анализ христианского отношения к экономике и политике (с апологией социализма, постепенно шедшей на убыль), критику марксизма, но равно и буржазно-капиталистической идеологии, проекты "партии христианской политики", отклики на злобу дня (с позиций христианского либерально-консервативного центризма) и прочее. Особое русло составляет тема России, разрешаемая, вслед за Достоевским и Соловьевым, на путях христианской историософии. Мысль Булгакова тесно слита с судьбой страны, и, вслед за трагическими перипетиями этой судьбы, его взгляды сильно меняются. Начало первой мировой войны отмечено славянофильскими статьями, полными веры во всемирное призвание и великое будущее державы. Но уже вскоре, в диалогах "На пиру богов" и других текстах революционного периода, судьба России рисуется в ключе апокалиптики и тревожной непредсказуемости, с отказом от всяких рецептов и прогнозов: краткое время Булгаков считал, что католичество лучше православия сумело бы помешать процессам раскола и разложения, подготовившим катастрофу нации (диалоги "У стен Херсониса", 1922, опубл.: "Символ", 1991, № 25). В поздний период в его публицистике остаются по преимуществу лишь церковные и религиозно-культурные темы.
+
+Учение отца Сергия прошло в своем развитии два этапа, философский (до изгнания с родины) и богословский, которые, разнясь по форме и отчасти по источникам, влияниям, вместе с тем прочно связаны единством ведущих интуиций и центральных понятий. На всем своем пути это есть учение о Софии и Богочеловечестве, христианское учение о мире и его истории как воссоединении с Богом. Важнейший движущий мотив учения оправдание мира, утверждение ценности и осмысленности его бытия. При этом, полемизируя с традицией немецкого идеализма, Булгаков отказывается рассматривать разум и мышление в качестве высшего начала, наделенного исключительной прерогативой связи с Богом: предмет утверждения мир во всей его материально-телесной полноте. Оправдание мира предполагает т.о. оправдание материи, и тип своего филоского мировоззрения Булгакова иногда определял взятым у Владимира Соловьева сочетанием "религиозный материализм". В парадигмах христианской мысли задача философии требует выполнения двух последовательных заданий: необходимо раскрыть связь мира и Бога, а затем, всюду руководясь этой связью, развить собственно учение о мире, трактовку материи, телесности и других начал здешнего бытия. Таков логический порядок учения Булгакова; но исторически был обратным ему: мысль отца Сергия развивалась "снизу", от экономической проблематики и философского учения о хозяйстве ("Философия хозяйства") к общему учению о материи и о мире, уже въявь опирающемуся на определенные постулаты о связи мира и Бога, но еще не делающему сами эти постулаты предметом особого анализа ("Свет Невечерний"), и, наконец, к развернутой богословской системе, дающей окончательное решение исходной задачи: укореняющей мир в Боге и вместе с тем прямо следующей христианскому откровению и догматике.
+
+Поскольку мир в христианской онтологии тварное бытие, то учение о мире начинается у Булгакова с учения о творении. Суть тварности раскрывает вопрос: из чего создан мир? Ответ отца Сергия ортодоксально следует библейской традиции: творение мира творение из ничто, чистого небытия и несуществования. Булгаков прослеживает историю понятия Ничто и его применений в онтологии и, отвергая применения явно или скрыто пантеистические, выделяет определенную линию, от [[Платон|Платона]] до Шеллинга, на идеях которой строит свою концепцию. Тварное бытие трактуется им как особый род ничто, наделенный производящими потенциями, чреватый бытием, превращением в нечто. Это соответствует платоновскому и неоплатоническому понятию меона, или относительного небытия; чистое же ничто, всецелая противоположность бытию, передается понятием укона, радикального отрицания бытия. Т.о. возникает (уже выдвигавшаяся у позднего Шеллинга в "Изложении филоского эмпиризма") философема о творении мира как превращении или подъятии укона в меон творческим актом Бога.
+
+Далее строится концепция материи, где Булгаков отчасти следует "Тимею" Платона. Как бытие, погруженное в водоворот возникновения и уничтожения, переходов и превращений, тварное бытие есть "бывание". Но за множественностью и многоликостью бывания необходимо предполагать единую подоснову, в лоне которой только и могут совершаться все возникновения и превращения. Эта универсальная подоснова ("субстрат") бывания, из которой непосредственно возникает все возникающее, все вещи мира, и есть материя. Булгаков принимает относящиеся к ней положения античной традиции. Материя "третий род" бытия, наряду с вещами чувственного мира и их идеальными первообразами, идеями. Она есть неоформленная, неопределенная "первоматерия", materia prima потенциально сущее, способность выявления в чувственном. В своем онтологическом существе она, как и тварное бытие вообще, есть меон, "бытие небытие". Но эти положения дополняются другими, связанными, в первую очередь, с рождающей ролью материи. По Булгакову, она выступает как "Великая МатерьЗемля" древних языческих культов [[Древняя Греция|Греции]] и [[Древний Восток|Востока]], а также "земля" первых стихов Книги Бытия. "Земля" и "мать" ключевые определения материи у Булгакова, выражающие её зачинающую и родящую силу, её плодотворность и плодоносность. Земля "насыщена безграничными возможностями"; она есть "всематерия, ибо в ней потенциально заключено все" (Свет Невечерний. М„ 1917, с. 240-241). Хотя и после Бога, по Его воле, но материя есть также творческое начало. Вслед за Григорием Нисским Булгаков рассматривает бытие мира как процесс прямо продолжающий источный творческий акт Бога непрестанно длящееся творение, совершаемое при непременном активном участии самой материи. Здесь концепция Булгакова оказывается на почве патристики, расходясь с платонизмом и неоплатонизмом; окончательный же свой смысл она получает в контексте христологии и мериологии. Земля-мать не просто рождает, изводит из своих недр все сущее. На вершине своего рождающего и творческого усилия, в его предельном напряжении и предельной чистоте, она потенциально является "Богоземлей" и Богоматерью. Из недр ее происходит Мария и земля становится готовою приять Логоса и родить Богочеловека. Земля становится Богородицей и только в этом истинный апофеоз материи, взлет и увенчание се творческого усилия. Здесь ключ ко всему "религиозному материализму" Булгакова.
+
+Дальнейшее развитие учения о мире требует уже большей конкретизации связи мира и Бога, что доставляют концепции Софии и софийности. В своей зрелой форме они представлены в богословской системе Булгакова, на пути к которой лежал еще один промежуточный этап: критика философии ("Трагедия философии"). К его появлению привело (явное и для самого Булгакова, и для его критиков) расхождение между церковно-православными корнями его метафизики и тем философским языком, методом, который эта метафизика использовала и который принадлежал львиной долей классическому немецкому идеализму. В "Трагедии философии" предлагается новая интерпретация систем европейской философии. В её основе утверждаемое Булгаковым соответствие между онтологической структурой и структурой высказывания, языка (ход мысли, предвосхищающий многие позднейшие лингвофилоские построения на Западе).
+
+Булгаков исследует его и в другие книги того же периода, "Философии имени", посвященной апологии имяславия и родственной аналогичным апологиям Флоренского и Лосева. Из соответствия выводится классификация филоская систем, позволяющая увидеть в их главных видах различные монистические искажения догмата троичности, который исключает монизм и требует полного равноправия, единосущия трех начал, соединенных в элементарном высказывании ("Я есмь нечто") и понятых как начала онтол. В итоге история философии предстает как история особого рода тринитарных ересей. Булгаков делает вывод, что адекватное выражение христианской истины принципиально недоступно для философии и достижимо лишь в форме догматического богословия.
+
+Началом богословского этапа Булгакова служат обширные штудии церковного учения о Святой Троице, Божественной Ипостаси и Премудрости Божией (статья "Ипостась и ипостасность", 1925: "Главы о троичности", 1928, 1930; кн. "Купина неопалимая", 1927). На этой основе, на смену ранним дореволюцонным вариантам, отец Сергий выдвигает в "Агнце Божием" (Париж, 1933) свое окончательное учение о Софии, завершаемое затем в "Утешителе" (1936) и "Невесте Агнца" (1945). Как во всех опытах софиологии (ср. Соловьев, Флоренский), София Премудрость Божия начало, посредствующее меж Богом и миром, "мир в Боге", предвечно сущее в Боге собрание идеальных первообразов всего сущего, аналог платоновского мира идей. Однако все софиологические учения имеют спорный и сомнительный статус, ибо все попытки введения Софии в христианское учение о Боге до сих пор вызывали сильные догматические возражения. В учении Булгакова София сближается с Усией, Сущностью Триединого Бога: "Божественная София есть ... природа Божия, усия, понимаемая ... как раскрывающееся содержание, как Всеединство" (Агнец Божий, с. 125). Данное решение, как и многие его следствия, также вызвало возражения и полемику; в 1935 г. учение Булгакова было осуждено в указах Московской Патриархии, а также зарубежного Архиерейского Собора в Карловицах. В.Н.Лосский. критически анализируя учение, находит, что суть его "поглощение личности софийно-природным процессом, уничтожающим свободу, замена Промысла, предполагающего нравственно-волевое отношение личностей, природно-софийным детерминизмом" (Спор о Софии. Париж, 1936, с. 82). Отец Сергий отвечал оппонентам, и "спор о Софии" не получил окончательного решения по сей день, хотя надо отметить, что учение Булгакова не привлекло на свою сторону практически никого из богословов.
+
+Вместе с тем, помимо своего софианского ядра, система Булгакова содержит немало плодотворных идей и разработок. В согласии с концепцией Богочеловечества она развивает учение о мировом процессе, который во всей целокупности, от акта творения, через пребывание в падшести и до финального Преображения, представляется как "Богочеловеческий процесс", воссоединение твари с Богом. В этих рамках возникает целый ряд частных учений о различных сторонах жизни мира. Раньше и полнее всего у Булгакова развито учение о хозяйстве, в сферу которого включается и экономическая, и научно-техническая деятельность человека. Отражая двойственную природу падшего бытия, хозяйство совмещает в себе свободной творческий "труд познавания и действия", в котором раскрывается софийность мира, и "рабство ничто", служение рожденной падением природной необходимости. Важное место в Богочеловеческом процессе принадлежит искусству. Булгаков трактует его как способность увидеть и показать софийность мира, ибо одно из главных имен Софии Красота. Но как все в падшем бытии, искусство несет и печать ущербности: оно стремится и не может стать теургией, действенным преображением мира. Аналогично анализируются феномены пола, творчества, власти и другие: Булгаков усматривает всюду как софийное, благое начало, так и печать падшести, небытия. В последние годы сюда присоединяется анализ "последних вещей", смерти (Софиология смерти // Вестн. РСХД. 1978, № 127; 1979, № 128) и конца мира (эсхатология "Невесты Агнца").
+
+Рассматривая мир под знаком динамики, процесса, учение Булгакова о мире представляется в целом как теология истории, где в центре находится София как Церковь, поскольку "Церковь действует в истории как творящая сила" (Невеста Агнца, с. 362), и Богочел. процесс может быть понят как становление всего мироздания Церковью. В общем же своем типе и облике, в ряде ведущих мотивов и идей его система напоминает большие теологические системы современного западного христианства, сближаясь с учениями Тейяра де Шардена и, несколько меньше, Тиллиха.
+
+Источник первоначальной версии статьи:
+С. Хоружий (Русская философия. Малый энциклопедический словарь, М., 1995.)
+
+'''Внешние ссылки'''
+
+*[http://www.vehi.net/bulgakov/index.html Сергей Николаевич Булгаков]
+*[http://www.vehi.net/vehi/index.html "Вехи"]
+*[http://www.vehi.net/bulgakov/svet/index.html "Свет Невечерний"] \ No newline at end of file
diff --git a/vendor/wikimedia/utfnormal/scripts/testdata/tokyo.txt b/vendor/wikimedia/utfnormal/scripts/testdata/tokyo.txt
new file mode 100644
index 00000000..1b3fd72f
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/scripts/testdata/tokyo.txt
@@ -0,0 +1,587 @@
+[[世界]] > [[アジア]] > [[東アジア]] > [[日本]] > [[関東地方]] > '''東京都'''
+{| align="right" border="1" cellspacing="0" cellpadding="2" style="border-style: solid; border-width: 2px; border-color: #000000; margin-left: 16px; margin-bottom: 16px"|
+|-
+| colspan="2" align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 0; border-color: #000000; background: #f3f3f3"|東京都のデータ
+|-
+| colspan=2 align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 1px; border-color: #000000"|[[画像:Tokyo-pref_Small.png|center|東京都の位置]]
+|-
+| align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 0; border-color: #000000; background: #f3f3f3"|面積
+| align="left" valign="middle" style="border-style: none none solid solid; border-width: 0 0 1px 1px; border-color: #000000"|2,187.08km&sup2;
+|-
+| align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 0; border-color: #000000; background: #f3f3f3"|総人口
+| align="left" valign="middle" style="border-style: none none solid solid; border-width: 0 0 1px 1px; border-color: #000000"|12,379,928人<br>(2003年12月1日現在)
+|-
+| align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 0; border-color: #000000; background: #f3f3f3"|県(都)内総生産
+| align="left" valign="middle" style="border-style: none none solid solid; border-width: 0 0 1px 1px; border-color: #000000"|852,296億円<br>(2000年現在:全国第一位)
+|-
+| align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 0; border-color: #000000; background: #f3f3f3"|[[ISO 3166-2]]
+| align="left" valign="middle" style="border-style: none none solid solid; border-width: 0 0 1px 1px; border-color: #000000"|JP-13
+|-
+| align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 0; border-color: #000000; background: #f3f3f3"|都民の日
+| align="left" valign="middle" style="border-style: none none solid solid; border-width: 0 0 1px 1px; border-color: #000000"|[[10月1日]]
+|-
+| align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 0; border-color: #000000; background: #f3f3f3"|都の花
+| align="left" valign="middle" style="border-style: none none solid solid; border-width: 0 0 1px 1px; border-color: #000000"|[[ケシ]]
+|-
+| align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 0; border-color: #000000; background: #f3f3f3"|都の木
+| align="left" valign="middle" style="border-style: none none solid solid; border-width: 0 0 1px 1px; border-color: #000000"|[[イチョウ]]
+|-
+| align="center" valign="middle" style="border-style: none none none none; border-width: 0 0 0 0; border-color: #000000; background: #f3f3f3"|都民の鳥
+| align="left" valign="middle" style="border-style: none none none solid; border-width: 0 0 0 1px; border-color: #000000"|[[ユリカモメ]]
+|-
+| align="center" valign="middle" style="border-style: none none solid none; border-width: 0 0 1px 0; border-color: #000000; background: #f3f3f3"|知事
+| align="left" valign="middle" style="border-style: none none solid solid; border-width: 0 0 1px 1px; border-color: #000000"|
+|-
+| colspan=2 align="center" style="border-style: solid none solid; background: #f0f0f0"|東京都庁
+|-
+| align="center" style="border-style: solid none solid; background: #f0f0f0"|所在地
+| style="border-style: solid none none solid"|〒163-8001
+|-
+| colspan=2 align="right" style="border-style: none none solid"|東京都新宿区西新宿2-8-1
+|-
+| align="center" style="border-style: none none solid; background: #f0f0f0"|電話番号
+| style="border-style: none none solid solid"|03-5321-1111
+|-
+| align="center" style="border-style: none none solid; background: #f0f0f0"|外部リンク
+| style="border-style: none none solid solid"|[http://www.metro.tokyo.jp/ 東京都庁]
+|}
+
+'''東京都'''(とうきょうと)は、[[日本]]の[[首都]]機能がある[[東京]]を管轄する[[地方自治体]]である。
+
+人口は12,379,928人(2003年12月1日現在)。日本の政治、行政、経済の中心。[[1943年]]に東京都制(昭和18年法律第89号)が施行され 、[[東京府]]と[[東京市]]が統合して成立した。その後、[[地方自治法]]の施行によって東京都制は廃止されたが、「東京都」の名称は引き継がれ、現在に至っている。東京都は府県相当の機能と23の[[東京都特別区|特別区]]の区域における市としての機能とを併せ持つ広域的地方公共団体である。
+
+
+== 地理 ==
+[[画像:Tokyo-pref.png|thumb|市区町村境界図(諸島部を除く)]]
+* [[関東平野]]に位置し、[[東京湾]]に面している。東京都の行政区には、ほかに[[小笠原諸島]]と[[伊豆諸島]]を含む。
+* [[関東地方]]
+* 日本の最南端([[沖ノ鳥島]])、および最東端([[南鳥島]])を持つ。
+*地域としては[[東京都特別区|特別区(23区)部]]と[[三多摩]]および[[島嶼]]([[伊豆諸島]]・[[小笠原諸島]])に分けられる。
+=== [[東京都特別区|特別区(23区)]] ===
+*東部には[[隅田川]]・[[荒川 (関東)|荒川]]・[[江戸川]]等の流域に低地が広がり、[[下町]]と呼ばれている。
+*西側から[[武蔵野台地]]の末端部である幾つもの[[舌状台地]]が伸びており、[[山の手]]と呼ばれる。
+*南部の[[多摩川]]沿いの地域には低地が続いている。
+*臨海部には埋立地が続いている。
+
+=== [[三多摩|三多摩地域]] ===
+*[[多摩川]]沿いの低地を中心として北側には武蔵野台地、南側には[[多摩丘陵]]が広がる。
+*三多摩西部(西多摩)には[[関東山地]]に含まれる山地がある。
+
+=== 島嶼 ===
+
+===隣接都道府県===
+[[千葉県]] - [[神奈川県]] - [[山梨県]] - [[埼玉県]]
+
+
+
+==歴史==
+''[[江戸]]の歴史も参照。''
+
+現代の東京都の領域は古代の[[武蔵国]][[多摩郡|多麻郡]]、荏原郡、豊島郡と足立郡の一部及び[[下総国]]葛飾郡の一部に相当する。近世初期に[[隅田川]]から[[利根川]](現代の[[江戸川]]下流)の間が武蔵国葛飾郡として編入された。武蔵国は現代の東京都だけでなく、[[埼玉県]]と[[神奈川県]]東北部を含む大国であるが、[[国府]]は現代の東京都[[府中市 (東京都)|府中市]]にあった。古代の武蔵国は[[東山道]]に属していたが、771年に[[東海道]]所属に変更された。
+
+[[延喜式]]神名帳には足立郡に[[氷川神社]](名神大社)、[[多摩郡|多磨郡]]に小野神社(一ノ宮)、阿伎留神社、青渭神社などが見えるが、後世武蔵国総社とされた大国御魂神社や東京の神社として著名な[[神田明神]]、[[日枝神社]]の名は見えない。
+
+かなり古い時代から[[渡来人]]が住んでいたようで、亀塚古墳のある狛江郷(現・[[狛江市]]周辺)は[[高句麗]]に由来するとされ、他にも[[渡来人]]にまつわる伝承は多い。[[武蔵野台地|武蔵野]]の開発は渡来人の灌漑技術によるところが大きいとされる。
+
+[[中世]]には[[武蔵七党]]と呼ばれる武士団が興り、源氏の家人となった。源平合戦では豊島氏、足立氏、葛西氏らが活躍している。12世紀には豊島郡[[江戸]]郷の名が見え、この地を本拠とする江戸氏も興った。[[14世紀]]には[[新田義貞]]が[[鎌倉幕府]]軍を破った分倍河原の戦いが名高い。
+
+戦国時代には豊島氏の家宰であった太田氏が台頭し、[[江戸城]]を築いた[[太田道灌]]が武蔵の掌握に力を注いだが暗殺され、[[小田原城]]を拠点とする[[後北条氏]]が武蔵に進出する。[[北条氏照]]は八王子城を築き北方の上杉氏に備えた。その北条氏も[[豊臣秀吉]]の[[小田原攻め]]によって滅び、三河の[[徳川家康]]が関東に転封、江戸城に入る。やがて[[豊臣氏]]を滅ぼした徳川家康は[[江戸]]に幕府を開き、ここに江戸は日本の政治の中心となる。([[江戸時代]])
+
+[[1867年]][[徳川慶喜]]が[[大政奉還]]を行うと、翌年江戸は東京と改称され、[[1869年]][[明治天皇]]が[[皇居]](旧・江戸城)に入ると名実ともに近代日本の首都となった。全国から新政府に仕える人々が集まり、多くは皇居周辺(後世の[[山手線]]内側)に住んだ。これが山の手族の起源である。また[[築地]]には外国人居留地が設けられ、[[銀座]]には西洋風のレンガ街が作られて文明開化が進んだ。
+
+大正期に入ると東京への人口流入はさらに進み、[[1920年]]の人口は370万人になったが、[[1923年]][[関東大震災]]に襲われ、特に下町が大打撃を受けた。さらに[[第二次世界大戦]]末期の[[東京大空襲]]によって市街地の大半が焼け野原となった。しかし[[東京オリンピック]]によって戦後復興は終わりを告げ、東京は[[高度経済成長]]のなかで新日本の政治・経済の中心として大発展を遂げる。1980年代後半には[[バブル景気]]によって異常な地価高騰に見舞われた。[[1991年]]には[[新宿]]に都庁新庁舎が完成し、東京の新たなシンボルとなった。その後は[[バブル崩壊]]が進み経済は低迷している。
+
+===古代===
+* 771年 [[武蔵国]]、[[東山道]]から[[東海道]]に転属
+* 939年 [[平将門]]の乱(~940年)
+===中世===
+*1333年 [[新田義貞]]、分倍河原で[[鎌倉幕府]]軍を破る
+*1416年 [[上杉禅秀]]の乱
+*1475年 この頃、[[太田道灌]]江戸城を築く
+*1486年 太田道灌、相模の上杉定正の館で暗殺される
+*1524年 北条氏綱、江戸城に入城
+*1582年 この頃、北条氏康八王子城を本格築城
+*1590年 豊臣軍の前に江戸城開城、八王子城落城。[[徳川家康]]、関東入部。
+===江戸時代===
+*1603年 徳川家康、[[征夷大将軍]]に任じられ、江戸開府。
+*1635年 [[武家諸法度]]、[[参勤交代]]の制を定める
+*1651年 由比正雪の乱
+*1657年 江戸大火。[[吉原遊郭]]、[[浅草]]に移転(新吉原)
+*1702年 [[赤穂浪士]]、吉良邸討ち入り
+*1707年 富士宝永山噴火、江戸にも降灰。 
+*1714年 絵島事件
+*1723年 火の見櫓設置を指示
+*1727年 武蔵野新田開発
+*1783年 浅間山噴火、江戸にも降灰。
+*1791年 男女混浴禁止令
+*1805年 [[関東取締出役]]設置
+*1836年 江戸名所図会刊行完了
+*1839年 [[蛮社の獄]]
+*1840年 [[遠山景元]]、町奉行となる
+*1853年 [[マシュー・ペリー|ペリー]]来航
+*1854年 ペリー再航、[[日米和親条約]]
+*1855年 江戸大地震
+*1859年 横浜開港
+*1860年 [[桜田門外の変]]
+*1866年 江戸各所で打ち壊し
+*1867年 [[大政奉還]]
+*1868年 [[彰義隊]]の変(5月)/江戸を東京と改称(7月)/明治改元(9月)/[[明治天皇]]、東京に行幸(10月)
+
+===近代以降===
+*1869年 明治天皇再び東京に行幸、東京城を[[皇居]]とする。
+*1871年 [[廃藩置県]]、東京府設置。
+*1874年 東京[[警視庁]]設置
+*1882年 [[上野動物園]]完成
+*1889年 市町村制施行され、[[東京市]]誕生。
+*1905年 [[日比谷公園]]事件
+*1923年 [[関東大震災]]
+*1927年 地下鉄開通
+*1936年 [[国会議事堂]]落成
+*1942年 東京初空襲
+*1943年 [[東京都]]成立
+*1945年 [[東京大空襲]](3月)/米軍進駐(9月)
+*1958年 [[東京タワー]]完成
+*1964年 [[東海道新幹線]]開通(10月1日)/[[東京オリンピック]](10月10日~24日)
+*1968年 [[小笠原諸島]]返還
+*1968年 [[三億円事件]]([[府中市 (東京都)|府中市]])
+*1970年 [[三島由紀夫]]決起事件
+*1974年 三菱重工ビル爆破事件
+*1977年 立川基地全面返還([[立川市]])
+*1978年 新東京国際空港(現[[成田国際空港]])開港、[[東京国際空港]](羽田空港)は原則国内線専用に。
+*1986年 地価急騰、狂乱地価。
+*1988年 [[東京ドーム]]完成
+*1991年 東京の電話局番4桁になる(1月)/新宿に[[東京都新庁舎|東京都庁新庁舎]]完成(3月)
+*1993年 東京湾連絡橋[[レインボーブリッジ]]完成
+*1995年 [[地下鉄サリン事件]]/[[東京メトロポリタンテレビジョン]](MXテレビ)開局(11月)
+*1998年 [[山一證券]]倒産(バブル崩壊)
+*1999年 [[石原慎太郎]]都知事初当選(現職知事)
+
+===行政区域の変遷===
+* [[1868年]](慶応 4)- [[東京]]と命名([[江戸]]からの名称変更)。
+* [[1872年]](明治 5)- [[東京府]]が現23区の範囲に拡大。
+* [[1889年]](明治22)- 市制・町村制が施行され、新たに[[東京市]]を設置(15区設置)。
+* [[1893年]](明治26)- [[三多摩]]地方が東京府に編入。
+* [[1898年]](明治31)- 東京市の「市政特例」が廃止され、一般市制に移行し東京市役所が開設(移行日である10月1日は[[1952年]](昭和27)から「都民の日」とされる。)。
+* [[1932年]](昭和 7)- 5郡(荏原郡、豊多摩郡、北多摩郡、南足立郡及び南葛飾郡)82町村を東京市に編入。東京市は35区になる。
+* [[1943年]](昭和18)- 東京府と東京市を統合、東京都と改称。
+* [[1947年]](昭和22)- [[地方自治法]]施行。区は23区となり、特別地方公共団体である「特別区」になる。
+
+== 人口 ==
+===年齢構成===
+<div style="width:50%;float:left"><!-- 1pix=1,000x0.095 -->
+年齢5歳階級別人口<br/>
+2003年10月1日現在推計人口<br/>
+総計 [単位 千人]
+{|
+|-
+! 年齢
+! 人口
+|-
+|0~4歳
+|[[画像:g30.png]][[画像:g10.png]][[画像:g05.png]][[画像:g01.png]] 490
+|-
+|5~9
+|[[画像:g30.png]][[画像:g10.png]][[画像:g03.png]][[画像:g01.png]] 473
+|-
+|10~14
+|[[画像:g30.png]][[画像:g10.png]][[画像:g05.png]][[画像:g03.png]] 513
+|-
+|15~19
+|[[画像:g50.png]][[画像:g10.png]][[画像:g01.png]] 651
+|-
+|20~24
+|[[画像:g50.png]][[画像:g30.png]][[画像:g01.png]] 860
+|-
+|25~29
+|[[画像:g50.png]][[画像:g30.png]][[画像:g10.png]][[画像:g05.png]][[画像:g03.png]][[画像:g01.png]] 1045
+|-
+|30~34
+|[[画像:g100.png]][[画像:g05.png]][[画像:g01.png]] 1116
+|-
+|35~39
+|[[画像:g50.png]][[画像:g30.png]][[画像:g10.png]][[画像:g01.png]] 968
+|-
+|40~44
+|[[画像:g50.png]][[画像:g10.png]][[画像:g10.png]][[画像:g05.png]][[画像:g01.png]] 800
+|-
+|45~49
+|[[画像:g50.png]][[画像:g10.png]][[画像:g05.png]][[画像:g01.png]][[画像:g01.png]] 710
+|-
+|50~54
+|[[画像:g50.png]][[画像:g30.png]][[画像:g01.png]][[画像:g01.png]] 871
+|-
+|55~59
+|[[画像:g50.png]][[画像:g30.png]][[画像:g01.png]] 858
+|-
+|60~64
+|[[画像:g50.png]][[画像:g10.png]][[画像:g10.png]][[画像:g05.png]] 794
+|-
+|65~69
+|[[画像:g50.png]][[画像:g10.png]][[画像:g05.png]][[画像:g01.png]] 699
+|-
+|70~74
+|[[画像:g50.png]][[画像:g03.png]][[画像:g01.png]] 569
+|-
+|75~79
+|[[画像:g30.png]][[画像:g05.png]][[画像:g03.png]][[画像:g01.png]] 417
+|-
+|80歳以上
+|[[画像:g30.png]][[画像:g10.png]][[画像:g05.png]] 476
+|}
+</div>
+<div style="width:50%;float:left">
+年齢5歳階級別人口<br/>
+2003年10月1日現在推計人口<br/>
+男女別 [単位 千人]
+{|
+|-
+! align=right|男
+! align=center|年齢
+! 女
+|-
+| align=right|251 [[画像:g10.png]][[画像:g10.png]][[画像:g03.png]]
+| align=center|0~4歳
+|[[画像:r10.png]][[画像:r10.png]][[画像:r01.png]][[画像:r01.png]] 239
+|-
+| align=right|242 [[画像:g10.png]][[画像:g10.png]][[画像:g01.png]][[画像:g01.png]]
+| align=center|5~9
+|[[画像:r10.png]][[画像:r10.png]][[画像:r01.png]] 231
+|-
+| align=right|260 [[画像:g10.png]][[画像:g10.png]][[画像:g03.png]][[画像:g01.png]]
+| align=center|10~14
+|[[画像:r10.png]][[画像:r10.png]][[画像:r03.png]][[画像:r01.png]] 253
+|-
+| align=right|334 [[画像:g30.png]][[画像:g01.png]]
+| align=center|15~19
+|[[画像:r30.png]] 317
+|-
+| align=right|446 [[画像:g30.png]][[画像:g10.png]][[画像:g01.png]][[画像:g01.png]]
+| align=center|20~24
+|[[画像:r30.png]][[画像:r05.png]][[画像:r03.png]][[画像:r01.png]] 414
+|-
+| align=right|545 [[画像:g50.png]][[画像:g01.png]]
+| align=center|25~29
+|[[画像:r30.png]][[画像:r10.png]][[画像:r05.png]][[画像:r01.png]][[画像:r01.png]] 500
+|-
+| align=right|573 [[画像:g50.png]][[画像:g03.png]][[画像:g01.png]]
+| align=center|30~34
+|[[画像:r50.png]][[画像:r01.png]] 543
+|-
+| align=right|504 [[画像:g30.png]][[画像:g10.png]][[画像:g05.png]][[画像:g01.png]][[画像:g01.png]]
+| align=center|35~39
+|[[画像:r30.png]][[画像:r10.png]][[画像:r03.png]][[画像:r01.png]] 464
+|-
+| align=right|415 [[画像:g30.png]][[画像:g05.png]][[画像:g03.png]][[画像:g01.png]]
+| align=center|40~44
+|[[画像:r30.png]][[画像:r05.png]][[画像:r01.png]] 385
+|-
+| align=right|364 [[画像:g30.png]][[画像:g03.png]][[画像:g01.png]]
+| align=center|45~49
+|[[画像:r30.png]][[画像:r01.png]][[画像:r01.png]] 346
+|-
+| align=right|442 [[画像:g30.png]][[画像:g10.png]][[画像:g01.png]]
+| align=center|50~54
+|[[画像:r30.png]][[画像:r10.png]] 429
+|-
+| align=right|426 [[画像:g30.png]][[画像:g10.png]]
+| align=center|55~59
+|[[画像:r30.png]][[画像:r10.png]][[画像:r01.png]] 432
+|-
+| align=right|383 [[画像:g30.png]][[画像:g05.png]][[画像:g01.png]]
+| align=center|60~64
+|[[画像:r30.png]][[画像:r05.png]][[画像:r03.png]][[画像:r01.png]] 411
+|-
+| align=right|330 [[画像:g30.png]][[画像:g01.png]]
+| align=center|65~69
+|[[画像:r30.png]][[画像:r05.png]] 369
+|-
+| align=right|261 [[画像:g10.png]][[画像:g10.png]][[画像:g03.png]][[画像:g01.png]]
+| align=center|70~74
+|[[画像:r10.png]][[画像:r10.png]][[画像:r05.png]][[画像:r03.png]][[画像:r01.png]] 308
+|-
+| align=right|180 [[画像:g10.png]][[画像:g05.png]][[画像:g01.png]][[画像:g01.png]]
+| align=center|75~79
+|[[画像:r10.png]][[画像:r10.png]][[画像:r01.png]][[画像:r01.png]] 237
+|-
+| align=right|163 [[画像:g10.png]][[画像:g05.png]]
+| align=center|80歳以上
+|[[画像:r10.png]][[画像:r10.png]][[画像:r05.png]][[画像:r03.png]][[画像:r01.png]] 313
+|}
+</div>
+<br style="clear:left">
+*データ出典:[http://www.stat.go.jp/data/jinsui/2003np/index.htm 第10表/都道府県, 年齢(5歳階級), 男女別人口-総人口]<br/>(総務省統計局)
+
+== 行政組織 ==
+* 東京都 - 東京都域全体の広域行政と[[特別区]]の区域における大都市行政。
+** 議決機関
+*** 都議会
+** 執行機関
+*** [[知事]]
+**** [[副知事]]
+***** 知事部局
+***** [[東京消防庁]]
+***** 公営企業
+**** 出納長
+*** 行政委員会
+* 特別地方公共団体([[特別区]]): [[千代田区]]、[[中央区 (東京都)|中央区]]、[[台東区]]、。。。など23区
+* 特別区の一部事務組合 (3団体)
+* 普通地方公共団体([[市町村]])
+* [[市町村]]の一部事務組合 (34団体)
+* [[財産区]](1市2町に8つの財産区)
+
+[[画像:tokyotower.jpg|200px|thumb|東京タワーと増上寺]]
+
+== 経済 ==
+江戸時代、江戸(東京)は行政府の置かれている場所として経済的にも重要な地であり、人口100万人を超えていたと言われる日本最大の消費地であった。しかし「日本の富の7分は大坂に」と言われるように経済の中心地は[[大坂]]であり、今日のように東京が経済の中心地となったのは[[明治維新]]以降である。明治政府は、欧米諸国へのキャッチアップのため東京への一極集中を進め、その流れは[[太平洋戦争]]後も引き継がれた。[[高度経済成長|高度経済成長期]]にはこの流れが加速され、[[バブル経済|バブル経済期]]に最高潮に達した。その結果、[[国内総生産]]における東京都が占める割合は16%程度となり、全国の証券取引所における証券取引の約8割が[[東京証券取引所]]を占めるなど、日本経済において東京は圧倒的な地位を占めるようになった。近年では、過度の集中に対する反省から、[[首都機能移転]]が議論されており、本社機能を東京から移転する企業も出てくるなど、経済における東京の一極集中を是正しようとする傾向にある。
+
+都内総生産(名目)は84兆7628億円(平成13年度、東京都)で、日本の国内総生産の16.9%(平成13年度、東京都)を占めている。この比率は最近10年間においてほとんど変わっていない。国内経済の低迷に伴い、都内経済も低迷傾向にあるが、国内景気ほど落ち込んではおらず、今後は国内経済の回復に伴って都内経済も回復すると見込まれている。
+
+== 産業 ==
+東京都内総生産の産業別構成比は、第1次産業が0.1%、第2次産業が18.6%、第3次産業が91.5%である(平成13年度。この他に控除すべき数値があるため合計は100%を超える)。このように、第1次産業が占める割合は極めて少なく、第3次産業が占める割合が高く、特にサービス業・卸、小売業の比率が高い。また、首都と言う性格上大手企業の本社が数多くあり、本社機能の提供するサービスも高い比率を占める。そのため、東京都の産業連関表では「財(農林水産業、鉱業、製造業、建設及び電気・ガス・水道)・サービス・本社」という三部門に分かれている。
+=== 第1次産業 ===
+* 農業
+東京都の耕地面積は 8460ha(平成15年、農林水産省)で、全国最低である。農地は[[三多摩|三多摩地域]]に集中している。区部の農地は年々縮小しており、農地がまったくない区も少なくない。東京都では、大消費地に近い地理的特性から、野菜・果樹・花卉が主に生産されており、[[小松菜]]、[[ホウレンソウ]]が主要な生産物である。特に小松菜は中央卸売市場の総入荷量のうち、32.5%(2000年、東京都)を占める。かつては[[練馬大根]]が特産物であったが、現在ではあまり生産されていない。
+* 畜産業
+* 林業
+* 水産業
+=== 第2次産業 ===
+* 製造業
+ 東京都は[[京浜工業地帯]]の一角であり、[[東京湾]]沿岸部を中心に事業所が多く集まる。また、[[日野市]]、[[府中市 (東京都)|府中市]]、[[八王子市]]、[[青梅市]]など、多摩地区にも大型の事業所が多くあり、これら地域の製品出荷額も多い。東京都には幅広い分野の製造業が営まれており、特に[[印刷]]、[[情報通信機械]]の占める割合が多く、これらの分野での製品出荷額は全国一位である(平成14年、東京都)。また、[[皮革]]、[[精密機械]]の出荷額も全国一位である(平成14年、同)。その他、[[電気機械]]、[[輸送用機械]]、[[一般機械]]の出荷額が多い。
+
+* 建設業
+
+=== 第3次産業 ===
+==== 金融・保険 ====
+[[UFJ銀行]]・[[りそな銀行]]・[[埼玉りそな銀行]]を除く[[都市銀行]]の本店が23区内にある。
+
+==== サービス ====
+==== 通信・放送 ====
+*[[日本放送協会|NHK]]が[[渋谷区]]に、[[民間放送|民放]][[テレビ]]の在京[[キー局]]はすべて[[港区 (東京都)|港区]]に、[[東京メトロポリタンテレビジョン]]は[[江東区]]にある。
+
+*[[ラジオ局]]は、NHKは渋谷区、[[TBSラジオ&コミュニケーションズ|TBSラジオ]]、[[J-WAVE]]は[[港区 (東京都)|港区]]、[[ニッポン放送]]と[[東京FM]]は[[千代田区]]、[[文化放送]]は[[新宿区]]にある。
+
+==== 商業 ====
+東京都の商業は、生産額が19兆4627億円(2001年、東京都)であり、都内総生産のうち23.0%(同)を占め、サービス業についで高い割合を占める。
+日本の商業において、東京都の占める割合は大きく、事業所数は10.5%、従業員数は14.3%、販売額は32.2%(2002年、東京都)を占めており、いずれも全国一位である。特に卸売業の占める割合が大きく、事業所数は15.2%、従業者数は22.6%、販売額は38.7%(同)を占めている。事業所、従業員数に比べて販売額が大きいのが特徴で、取扱額が大きい事業所が多いことを示している。小売業は事業所数が9.2%、従業者数が10.2%、販売額が12.4%(同)で、卸売業ほど占める割合が大きくないが、いずれも全国一位である。
+
+東京都の卸売業と小売業を比較すると、事業所数では小売業が卸売業を大幅に上回るが、販売額では、卸売業が小売業に比べて圧倒的な割合を占め、やはり卸売業では取扱額が大きい事業所が多いことが示されている。
+
+===== 卸売業 =====
+東京都の卸売業は、事業所数57,653、販売額は159兆9582億5200万円(2002年、東京都)である。事業所数では、従業員30人以下の小規模な事業所が多いが、販売額は100人以上の大規模事業所が約63%と圧倒的な比率を占める。事業所は区部に集中しており、特に中央区に多い。
+産業小分類別に見ると、機械器具卸売業が販売額41兆3759億8400万円(同)で多数を占め、以下各種商品卸売業、建築材料、鉱物・金属材料等卸売業、飲食料品卸売業、と続く。機械器具卸売業は、電気機械器具卸売業の占める割合が半数以上を占める。各種商品卸売業は、事業所数が149と非常に少ないにもかかわらず、販売額が40兆4902億7300万円であり、非常に規模が大きい事業所があることが示されている。
+
+===== 小売業 =====
+東京都の小売業は、商店数119,016、販売額は16兆7460億3500万円(2002年、東京都)である。商店数は区部に多く、販売額に占める割合も多い。特に中央区、新宿区、渋谷区等、百貨店や家電量販店が集中する繁華街がある地域で販売額が大きい。
+
+==== 不動産 ====
+
+== 姉妹友好都市 ==
+* [[ニューヨーク (市)|ニューヨーク]]([[アメリカ合衆国]])
+* [[北京]]([[中華人民共和国]])
+* [[パリ]]([[フランス]])
+* [[ニューサウスウェールズ州]]([[オーストラリア]])
+* [[ソウル特別市]]([[大韓民国]])
+* [[ジャカルタ]]([[インドネシア共和国]])
+* [[サンパウロ州]]([[ブラジル連邦共和国]])
+* [[カイロ県]]([[エジプト・アラブ共和国]])
+* [[モスクワ]]([[ロシア連邦]])
+* [[ベルリン]]([[ドイツ連邦共和国]])
+* [[ローマ]]([[イタリア共和国]])
+
+== 地域 ==
+*以下の26市・23区・1郡・5町・8村がある。
+
+=== [[東京都特別区|特別区]](23区) ===
+* [[足立区]]
+* [[荒川区]]
+* [[板橋区]]
+* [[江戸川区]]
+* [[大田区]]
+* [[葛飾区]]
+* [[北区 (東京都)|北区]]
+* [[江東区]]
+* [[品川区]]
+* [[渋谷区]]
+* [[新宿区]]
+* [[杉並区]]
+* [[墨田区]]
+* [[世田谷区]]
+* [[台東区]]
+* [[中央区 (東京都)|中央区]]
+* [[千代田区]]
+* [[豊島区]]
+* [[中野区]]
+* [[練馬区]]
+* [[文京区]]
+* [[港区 (東京都)|港区]]
+* [[目黒区]]
+
+=== [[三多摩|三多摩地域]] ===
+==== 市部 ====
+* [[昭島市]]
+* [[あきる野市]]
+* [[稲城市]]
+* [[青梅市]]
+* [[清瀬市]]
+* [[国立市]]
+* [[小金井市]]
+* [[国分寺市]]
+* [[小平市]]
+* [[狛江市]]
+* [[立川市]]
+* [[多摩市]]
+* [[調布市]]
+* [[西東京市]]
+* [[八王子市]]
+* [[羽村市]]
+* [[東久留米市]]
+* [[東村山市]]
+* [[東大和市]]
+* [[日野市]]
+* [[府中市 (東京都)|府中市]]
+* [[福生市]]
+* [[町田市]]
+* [[三鷹市]]
+* [[武蔵野市]]
+* [[武蔵村山市]]
+
+==== 郡部 ====
+* [[西多摩郡]]
+** [[日の出町]] - [[瑞穂町 (東京都)|瑞穂町]] - [[奥多摩町]] - [[檜原村]]
+
+=== 島嶼(とうしょ)部 ===
+* 大島
+** [[大島町 (東京都)|大島町]]([[伊豆大島|大島]]) - [[利島村]]([[利島]]) - [[新島村]]([[新島]]・[[式根島]]) - [[神津島村]]([[神津島]]・[[銭洲]])
+* 三宅島
+** [[三宅村]]([[三宅島]]) - [[御蔵島村]]([[御蔵島]])
+* 八丈島
+** [[八丈町]]([[八丈島]]・[[八丈小島]]) - [[青ヶ島村]]([[青ヶ島]]) - [[鳥島]]・[[須美寿島]]・[[ベヨネース列岩]]・[[孀婦岩]]
+* 小笠原諸島
+** [[小笠原村]]([[小笠原諸島]] - [[硫黄島]] - [[沖ノ鳥島]])
+
+== 交通 ==
+=== 空港 ===
+* [[東京国際空港]](羽田空港)- [[大田区]]にある。国内線を中心として国際線も発着する。
+* 世界から日本の首都東京への連絡には主に[[成田国際空港]](成田空港) が使われる。国際線を中心として国内線も発着。所在地は[[千葉県]] [[成田市]](用地の一部は隣接町)。[[1991年]]3月に空港ターミナル直下に鉄道が乗り入れるようになり、東京都内への連絡は一応整ったとされる(着工したものの完成することがなかった「[[成田新幹線]]」の施設(駅など)を一部活用し、[[JR]]線・[[京成電鉄|京成線]]と接続した。開港時より京成[[スカイライナー]]は運行していたが、当時の成田空港駅(現・[[東成田駅]])はターミナルから少し距離があった)。
+
+=== 鉄道 ===
+;中心となる駅
+:[[東京駅]]、[[上野駅]]、[[品川駅]]、[[渋谷駅]]、[[新宿駅]]、[[池袋駅]]
+
+;山手線内の連絡
+:[[東京地下鉄]]、[[都営地下鉄]]、[[都電荒川線]]、[[山手線]]
+
+;その他主に23区内の連絡
+:[[東京モノレール羽田線|東京モノレール]]、[[京急空港線]]、[[東急池上線]]、[[東急大井町線]]、[[東急世田谷線]]、[[東急多摩川線]]、[[京王新線]]、[[西武有楽町線]]、[[東武亀戸線]]、[[東武大師線]]、[[京成押上線]]、[[京成金町線]]、[[東京臨海高速鉄道りんかい線|りんかい線]]、[[ゆりかもめ東京臨海新交通臨海線|新交通ゆりかもめ]]
+
+;23区内の連絡ならびに近郊との連絡
+*JR
+:[[中央快速線]]、[[埼京線]]、[[湘南新宿ライン]]、[[京浜東北線]]、[[常磐快速線]]、[[常磐緩行線]]、[[中央・総武緩行線]]、[[京葉線]]、[[総武快速線]]、[[横須賀線]]、
+*私鉄
+:[[京急本線]]、[[東急目黒線]]、[[東急東横線]]、[[東急田園都市線]]、[[京王井の頭線]]、[[小田急小田原線]]、[[京王線]]、[[西武新宿線]]、[[西武池袋線]]、[[東武東上本線]]、[[京成本線]]、[[東武伊勢崎線]]、[[北総鉄道北総線]]、[[東京地下鉄東西線]]、[[埼玉高速鉄道線]]、[[都営地下鉄新宿線]]、([[つくばエクスプレス]] ※2005年開業予定)
+
+;三多摩地区の連絡
+*JR
+:[[青梅線]]、[[五日市線]]、[[八高線]]、[[武蔵野線]]、[[南武線]]、[[横浜線]]
+*私鉄
+:[[多摩都市モノレール線|多摩都市モノレール]]、[[京王相模原線]]、[[京王競馬場線]]、[[京王動物園線]]、[[京王高尾線]]、[[小田急多摩線]]、[[西武国分寺線]]、[[西武多摩川線]]、[[西武多摩湖線]]、[[西武拝島線]]
+
+;広範囲な連絡
+*新幹線
+:[[東海道新幹線]]、[[東北新幹線]]、[[上越新幹線]]、[[長野新幹線]]
+*在来線
+:[[東海道本線]]、[[東北本線]]、[[中央本線]]、[[常磐線]]、[[総武本線]]
+
+=== 道路 ===
+;高速道路
+:[[首都高速]]、第1東海自動車道([[東名高速道路]])、[[中央自動車道]]、[[関越自動車道]]、[[首都圏中央連絡自動車道]](圏央道)、[[東京外環自動車道]]、[[第三京浜]]、[[京葉道路]]
+
+;有料道路
+:[[八王子バイパス]]、[[稲城大橋]]、[[ひよどり山有料道路]]
+
+;一般道
+:[[内堀通り]]、[[外堀通り]]、[[外苑東通り]]、[[外苑西通り]]、[[明治通り (東京都)|明治通り]]、[[山手通り]]、[[環七通り]]、[[環八通り]]、[[白山通り]]、[[春日通り]][[川越街道]]([[国道254号]])、[[北本通り]]、[[尾竹橋通り]]、[[本郷通り]]、[[高島通り]]、[[中央通り (東京都)|中央通り]]、[[第一京浜]]([[国道15号]])、[[第二京浜]]([[国道1号]])、[[中原街道]]、[[目黒通り]]、[[玉川通り]]([[国道246号]])、[[世田谷通り]]、[[新宿通り]][[甲州街道]]([[国道20号]])、[[五日市街道]]、[[青梅街道]]、[[新青梅街道]]、[[目白通り]]、[[中仙道]]([[国道17号]])、[[昭和通り]][[日光街道]]([[国道4号]])、[[江戸通り]][[水戸街道]]([[国道6号]])、[[京葉道路]]([[国道14号]])、[[葛西橋通り]]、[[東八道路]]、[[新小金井街道]]、[[府中街道]]、[[鎌倉街道]]、[[東京環状]]([[国道16号]])
+
+===バス===
+*[[小田急バス]] - [[小田急シティバス]]
+*[[神奈川中央交通]]
+*[[関東バス]]
+*[[京王電鉄バス]] - [[京王バス東]] - [[京王バス中央]] - [[京王バス南]]
+*[[京成バス]] - [[京成タウンバス]]
+*[[京浜急行バス]] - [[羽田京急バス]]
+*[[国際興業|国際興業バス]]
+*[[立川バス]] -
+*[[東急バス]] - [[東急トランセ]]
+*[[東京都交通局]]([[都営バス]])
+*[[東武バス]](東武バスセントラル) - [[朝日自動車|朝日バス]]
+*[[西武バス]]
+*[[西東京バス]] - [[多摩バス]]
+*[[日立自動車]]
+*[[東海汽船|東海汽船バス]]
+*三宅村営バス
+*八丈町営バス
+*小笠原村営バス
+
+== 観光 ==
+*[[東京タワー]]
+*[[東京ドーム]]
+*[[お台場]]
+*[[六本木ヒルズ]]
+*[[サンシャインシティ]]
+*[[浅草寺]]
+*[[皇居]]
+*[[明治神宮]]
+*[[上野動物園]]
+*[[柴又帝釈天]]
+
+== 東京副都心(7ヶ所) ==
+東京都が策定した副都心。全部で7箇所ある。
+
+[[新宿副都心]] - [[池袋副都心]] - [[渋谷副都心]] - [[上野・浅草副都心]] - [[錦糸町副都心]] - [[大崎副都心]] - [[東京臨海副都心|臨海副都心]]
+
+== その他 ==
+* [[東京を舞台にした漫画作品]]
+* [[東京を舞台にしたアニメ作品]]
+* [[東京を舞台にした文芸作品]]
+* [[東京を舞台にした映画作品]]
+
+== 関連項目 ==
+* [[東京]]
+* [[江戸]]
+* [[東京臨海副都心]]
+* [[東京都出身の有名人一覧]]
+* [[東京都の都道一覧]]
+* [[グレーター・トウキョウ・フェスティバル]]
+
+== 外部リンク ==
+* [http://www.metro.tokyo.jp/ 東京都ウェブサイト]
+* [http://www.stat.go.jp/data/ssds/5.htm 総務省統計局サイト 社会生活統計指標 -都道府県の指標-2004]
+
+{{日本の都道府県}}
+
+[[Category:日本の都道府県|とうきようと]]
+[[Category:東京都|とうきようと]]
+
+[[ca:Tòquio]]
+[[cy:Tocio]]
+[[da:Tokyo]]
+[[de:Tokio]]
+[[en:Tokyo]]
+[[eo:Tokio]]
+[[es:Tokio]]
+[[et:Tōkyō]]
+[[fi:Tokio]]
+[[fr:Tōkyō]]
+[[it:Tokyo]]
+[[ko:도쿄]]
+[[nl:Tokio]]
+[[no:Tokyo]]
+[[pl:Tokio]]
+[[pt:Tóquio]]
+[[ro:Tokio]]
+[[simple:Tokyo]]
+[[sl:Tokio]]
+[[sv:Tokyo]]
+[[tokipona:ma_tomo_Tokijo]]
+[[tr:Tokyo]]
+[[zh:东京]] \ No newline at end of file
diff --git a/vendor/wikimedia/utfnormal/scripts/testdata/washington.txt b/vendor/wikimedia/utfnormal/scripts/testdata/washington.txt
new file mode 100644
index 00000000..5ca4650f
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/scripts/testdata/washington.txt
@@ -0,0 +1,281 @@
+[[Image:Largewashington.jpg|thumb|347px|align=right|Aerial photo of Washington, DC (looking WSW across the National Mall)]]
+'''Washington, DC''', officially the '''District of Columbia''' (also known as '''DC'''; '''Washington'''; and, historically, '''the Federal City''') is the [[capital (government)|capital]] city and administrative district of the [[United States|United States of America]]. Residents of the city and its surrounding [[suburb]]s refer to it simply as '''the District''' or '''DC''', to contrast Washington from its greater metropolitan area.
+
+'''Washington, DC''' is the most common way to refer to the District throughout the rest of the United States and the world. '''Washington''' or '''Washington, DC''' is also used as a [[metonym]] for the federal government. Politicians and candidates for office sometimes use these terms pejoratively to convey a sense of solidarity with their [[constituent]]s by distancing themselves from the negative image of an out-of-touch centralized government. (The [[Washington Post]] criticized this common political tactic in a 2001 [http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&contentId=A22140-2001Aug30&notFound=true editorial].)
+
+The District of Columbia is not part of any [[U.S. State|state]], but rather composes a unique, [[Federal Government of the United States|federally]] managed district within the United States, with limited local rule. As the seat of national government as well as the home of numerous national landmarks, museums, and sports teams, Washington is a popular international destination for [[tourist]]s and school trips.
+
+The centers of all three branches of the U.S. [[federal]] [[government]] are in Washington, as well as the headquarters of most [[Independent Agencies of the United States Government|federal agencies]]. Washington also serves as the headquarters for the [[World Bank]], the [[International Monetary Fund]], and the [[Organization of American States]]. All of this has made Washington the frequent focal point of massive political demonstrations and [[protest]]s, particularly on the [[National Mall]].
+
+The population of Washington, as of [[2003]] U.S. Census Bureau estimates, is 563,384. Despite being smaller in area than the smallest state ([[Rhode Island]]), it has a larger population than the least populous state ([[Wyoming]]). Together with portions of [[Virginia]] and [[Maryland]], and [[Baltimore, Maryland|Baltimore]] and its environs, Washington is part of a large [[metropolitan area]] known as the [[Baltimore-Washington Metropolitan Area]]. In recent years, the metro area has expanded to include communities as far away as [[West Virginia]], [[Delaware]], and [[Pennsylvania]].
+
+The official bird of Washington DC is the [[Wood thrush]]. The official motto is ''Justitia Omnibus'' (Justice for All).
+
+''For non-federal and historical geographical information on the District of Columbia, go to the'' [[District of Columbia (geography)]] ''page.''
+
+== Law and government ==
+
+<div style="float: left; margin-top: 10px; margin-right: 10px; text-align: center;"> [[Image:Dctaxationsample_small.jpg|License plate reading Washington, D.C. at the top and Taxation Without Representation at the bottom]]<br><small>''DC License Plate''</small></div>
+
+Residents of the District vote for the [[President of the United States of America|President]] but do not have voting representation in [[United States Congress|Congress]]. Citizens of Washington are represented in the House of Representatives by a [[Shadow Representative|non-voting Delegate]], who sits on committees and participates in debate, but cannot vote. DC does not have representation in the Senate. Citizens of Washington, DC are thus unique in the world, as citizens of the capital city of every other country have the same representation rights as their fellow citizens.
+
+There have been efforts to attain voting representation for many years, including the [[District of Columbia Voting Rights Amendment]] passed by Congress in 1978 but unratified by the states. These efforts are endorsed by the current Mayor, [[Anthony Williams]] and by the current Delegate, [[Eleanor Holmes Norton]]. So, while the District's official motto is "Justitia omnibus" (Justice to all), the words "Taxation Without Representation" were added to DC license plates in 2000 and there is a current movement to the add the words "[[No Taxation Without Representation]]" to the DC flag. Advocates of statehood who have supported these changes have said that they are intended as a protest and to raise awareness in the rest of the country. These measures in particular were chosen because the DC flag is one of the few things under direct local control without requiring approval from Congress.
+
+[[Image:DCFlag.PNG|thumbnail|right|300px|The flag of Washington, DC is based on the [[coat of arms]] borne by the [[England|English]] ancestors of [[George Washington]].]]
+
+Various approaches for attaining voting representation in Congress have been proposed.
+These include:
+# Treating DC in some way as a state:
+## Have Congress pass legislation that would treat DC as if it were a state for the purposes of voting representation in Congress. Senator Joseph Lieberman introduced The No Taxation Without Representation Act of 2003 (S. 617) on March 13, 2003, to the U.S. Senate, and Congresswoman Eleanor Holmes Norton introduced the same Act in the U.S. House of Representatives (H.R. 1285).
+## Amend the U.S. Constitution. In 1978 an amendment to the U.S. Constitution that would have given full congressional voting representation to residents of the District of Columbia passed through both the U.S. Senate and the U.S. House of Representatives. However, by 1985 when the seven year limit on ratification of the amendment expired, the amendment had only passed in 16 of 38 states necessary.
+## Statehood for the District of Columbia. Statehood for DC was last discussed in the U.S. House of Representatives in November 1993, and was defeated by the vote of 277 to 153.
+# (Re)combining DC with Maryland in some way:
+## Retrocession (Reunion with the State of Maryland). The original land of DC was originally Maryland and Virginia's land, and from 1790 until 1801 citizens living in DC continued to vote for, and even run as, candidates for the U.S. Congress in Maryland or Virginia. In 1846 the land from Virginia was given back to Virginia, so all current DC land was originally from Maryland. If both the U.S. Congress and the Maryland state legislature agreed, DC land (except for federal land) could be given back to Maryland with only a small federal area.
+## Treat District Residents as Maryland Voters for Federal Congressional Elections. Congress could give DC residents the right to vote as if they were part of Maryland for the Senate and House of Representatives (including the calculations for apportioning House seats).
+
+On a local level, the city is run by an elected Mayor and City Council. The school board has both elected and appointed members. However, Congress has plenary power over the district. It has the right to review and overrule laws created locally, and has often done so.
+
+DC residents pay all federal taxes, such as income tax, as well as local taxes. The Mayor and Council adopt a budget of local money with Congress reserving the right to make any changes. Because so much of the valuable property in the district is federally-owned and hence exempt from local property taxes, the city is frequently cash-strapped; public services in the city suffer as a result.
+
+==History==
+[[image:Karte_Washington_MKL1888.png|right|frame|[[1888]] [[Germany|German]] map of Washington, DC]]
+Washington was selected as the site of the national capital city after a sitdown dinner deal between [[Thomas Jefferson]] and [[Alexander Hamilton]]. Jefferson agreed to support Hamilton's banking and federal bond plans in exchange for the choice of a Southern locale for the capital. It was initially 100 [[square mile|mi&sup2;]] (260 [[square kilometer|km&sup2;]]).
+
+The signing of the [[Residence Bill]] on [[July 16]], [[1790]] established a site along the [[Potomac River]] as the District of Columbia (seat of government) of the United States. Land for the district was given to the federal government by the states of [[Virginia]] and [[Maryland]] and the city was named after [[George Washington]]. On [[February 27]], [[1801]] the district was placed under the jurisdiction of the [[United States Congress]]. The towns of [[Georgetown, Washington, D.C.|Georgetown]] and [[Alexandria, Virginia|Alexandria]] already existed at the time the district was founded; the remainder of the territory was subdivided into Washington City and Washington County (on the Maryland side of the Potomac) and [[Arlington County, Virginia#History|Alexandria County]] (on the Virginia side). In [[1871]], Georgetown, Washington City and [[Washington County, Washington, DC|Washington County]] were unified into Washington, DC.
+
+By an act of Congress, the area south of the [[Potomac River|Potomac]] (39 [[square mile|mi&sup2;]] or about 100 [[square kilometer|km&sup2;]]) was returned to Virginia on [[July 9]], [[1846]] and now is incorporated into [[Arlington County, Virginia|Arlington County]] and a part of the City of Alexandria.
+
+On [[August 24]], [[1814]], British forces burnt the capital during the most notable destructive raid of the [[War of 1812]]. British forces burned public buildings including the White House, the Capitol, the Arsenal, the Dock-Yard, Treasury, War office, and the bridge across the Potomac.
+
+President [[James Madison]] was forced to flee to Virginia and American morale was reduced to an all-time low. The expedition was carried out between August 19 and August 29, 1814, and was well organized and vigorously executed. On the 24th the American militia, who had collected at Bladensburg, Maryland, to protect the capital, fled almost before they were attacked.
+
+President [[Herbert Hoover]] ordered the [[United States Army]] on [[July 28]], [[1932]] to forcibly evict the "[[Bonus Army]]" of [[World War I]] veterans that gathered in Washington, DC to secure promised veteran's benefits early. U.S. troops dispersed the last of the "Bonus Army" the next day.
+
+The [[Twenty-third Amendment to the United States Constitution]] was ratified on [[March 29]], [[1961]] which allows residents of Washington, DC to vote for President (popular election) and have their votes count in the [[U.S. Electoral College|Electoral College]] the same as the least populous state, which currently is three (3).
+
+The first 4.6 miles (7.4 kilometers) of the [[Washington Metro]] [[metro|subway]] system opened on [[March 27]], [[1976]].
+
+[[Walter Washington]] became the first elected mayor of the District in [[1974]]. During his third term, Mayor [[Marion Barry]] was arrested for [[drug]] use in an [[FBI]] sting on [[January 18]], [[1990]]. He was acquitted of felony charges, but convicted on one misdemeanor count of [[cocaine]] possession for which he served a six-month jail term. On [[January 2]], [[1991]] [[Sharon Pratt Kelly]] (elected as '''Sharon Pratt Dixon''' but married later that year) was sworn in as mayor of Washington, DC becoming the first black woman to lead a city of that size and importance in the United States. After her term ended in [[1994]], Marion Barry was once again elected mayor for his fourth term. The current mayor, [[Anthony Williams]], a Yale educated lawyer, became mayor in [[1998]]. He was reelected in [[2002]]. See [[List of mayors of Washington, D.C.]]
+
+The Washington area was the target of at least one of the four hijacked planes in the [[September 11, 2001 attacks]]. One plane struck [[the Pentagon]] in Arlington County, killing 125 people in addition to the 64 aboard the plane, while another that was downed in a field in [[Pennsylvania]] is believed by many to have been intended to hit either the [[White House]] or the [[U.S. Capitol]].
+
+Shortly after September 11, Washington was once more subject to fear from an [[2001 anthrax attack|anthrax attack]], when what may have been a domestic [[terrorist]] sent [[anthrax]]-contaminated mail to numerous members of Congress. Thirty-one staff members were infected, and two [[U.S. Postal Service]] employees at a contaminated mail sorting facility at [[Brentwood, Washington, DC]], later died of pulmonary anthrax.
+
+During three weeks of October [[2002]], [[John Allen Muhammad]] and [[Lee Boyd Malvo]] perpetrated what became known as the [[Beltway Sniper]] attacks in Washington and across the Baltimore-Washington Metropolitan Area. Muhammed and Malvo killed ten people and critically injured three others with a high-powered rifle. The apparently random selection of victims (crossing racial, gender, and socioeconomic categories) caused a general panic in the Washington area and led schools to cancel all outdoor activities. Muhammed and Malvo were arrested on [[October 24]] at a highway rest stop. In March 2004, Muhammad was sentenced to death and Malvo to life imprisonment for the attacks.
+
+In November of [[2003]], the toxin [[ricin]] was found in the mailroom of the White House, and in February of [[2004]], in the mailroom of U.S. Senate Majority Leader [[Bill Frist]]. As with the earlier anthrax attacks, no arrests have been made.
+
+Partly in response to these events from the past few years, the Washington area has taken many steps to increase security. Screening devices for biological agents, [[metal detector]]s, and vehicle barriers are now much more commonplace at office buildings as well as government buildings. After the [[March 11, 2004 Madrid attacks|2004 Madrid train bombings]], local authorities have decided to test explosives detectors on the vulnerable [[Washington Metro]] subway system. False alarms due to suspicious chemical or powder substances or suspected explosives have led to fairly frequent evacuations of buildings, Metro stations, and local post offices. Vehicle inspections at several roadblocks set up around the [[U.S. Capitol]] building were introduced in July, 2004.
+
+== Geography ==
+[[Image:Dc satellite image.jpg|thumb|right|400px|Color-enhanced [[United States Geological Survey|USGS]] satellite image of Washington, DC, taken April 26, 2002. The [[Potomac River]] and its eastern branch, the [[Anacostia River]], are visible. [[Virginia]] lies across the Potomac from Washington, while [[Maryland]] surrounds it on all other sides. The black "crosshairs" in the image mark the quadrant divisions of Washington, with the [[U.S. Capitol]] at the center of the dividing lines. To the west of the Capitol extends the [[National Mall]], visible as a slight green band in the image. [[The Pentagon]] is also visible in Virginia, near the Potomac.]]
+Washington is located at 38&deg;54'49" North, 77&deg;0'48" West (38.913611, -77.013222)[[Geographic references|<sup>1</sup>]].
+
+According to the [[United States Census Bureau]], the city has a total area of 177.0 [[square kilometer|km&sup2;]] (68.3 [[square mile|mi&sup2;]]). 159.0 km&sup2; (61.4 mi&sup2;) of it is land and 18.0 km&sup2; (6.9 mi&sup2;) of it is water. The total area is 10.16% water.
+
+Washington is surrounded by the [[U.S. State|state]]s of [[Virginia]] (on its southwest side, and a small part of its northwest one) and [[Maryland]] (on its southeast and northeast sides, and most of its northwest one); it interrupts those states' common border, which is the Potomac River both upstream and downstream from the District. The city contains the historic '''federal city''', the territory of which was formerly part of those two adjacent states before they respectively ceded it for the national capital. The land ceded from Virginia was returned by [[United States Congress|Congress]] in [[1847]], so what remains of the modern District was all once part of Maryland.
+
+''See also'' [[District of Columbia (geography)]].
+
+===City layout===
+
+The original street layout was designed by [[Pierre Charles L'Enfant]] at the time of the city's founding. Washington is divided into four quadrants, directly along the four compass directions: [[Washington DC (northwest)|Northwest]], [[Washington DC (southwest)|Southwest]], [[Washington DC (northeast)|Northeast]], and [[Washington DC (southeast)|Southeast]]. Every street name has appended to it the abbreviation of the quadrant that it is in&mdash;e.g., Connecticut Ave., NW, New York Ave., NE. A street's quadrant is necessary to include in postal addresses, especially because much of the city's street layout repeats within each quadrant. The north-to-south numbered streets in Washington and count upwards from east to west in NW/SW (1st St NW, 2nd St NW, 3rd St NW, etc.); these streets repeat in NE/SE, counting upwards from west to the east. The east-to-west lettered streets (A St, B St, etc.) "count" upwards from south to north in NW/NE, and likewise repeat in the opposite direction in SW/SE. Street numbers count upwards traveling outward from the dividing lines of the quadrants.
+
+The center of the north/south and east/west dividing lines is the [[U.S. Capitol]], which is offset from the physical center of Washington's diamond shape making the quadrants unequal in size. Additionally, much of what was SW is now Arlington County, Virginia (or the Potomac River), making it by far the smallest quadrant; NW is the largest.
+
+L'Enfant's plan also includes many diagonal avenues named after the states, such as [[Pennsylvania Avenue, Washington D.C.|Pennsylvania Avenue]] which connects the Capitol and the White House.
+
+===Neighborhoods===
+
+Washington includes many distinct and historic neighborhoods:
+{| width="100%"
+|width="40%" align=left valign=top|
+* [[Adams Morgan]]
+* [[Anacostia]]
+* [[Brentwood, Washington, DC|Brentwood]]
+* [[Brookland, Washington, DC|Brookland]]
+* [[Burleith]]
+* [[Capitol Hill, Washington, DC|Capitol Hill]]
+** ''[[Eastern Market, Washington, DC|Eastern Market]]''
+** ''[[Barracks Row, Washington, DC|Barracks Row]]''
+* [[Chevy Chase, Washington, DC|Chevy Chase]]
+* [[Chinatown, Washington, DC|Chinatown]]
+* [[Cleveland Park]]
+* [[Columbia Heights, Washington, DC|Columbia Heights]]
+* [[Dupont Circle]]
+* [[Foggy Bottom]]
+|width="40%" align=left valign=top|
+* [[Friendship Heights]]
+* [[Georgetown, Washington, DC|Georgetown]]
+* [[Hillcrest, Washington, DC|Hillcrest]]
+* [[Le Droit Park]]
+* [[Logan Circle]]
+* [[Mount Pleasant, Washington, DC|Mount Pleasant]]
+* [[Washington DC Navy Yard|Navy Yard]]
+* [[Penn Quarter, Washington, DC|Penn Quarter]]
+* [[Petworth, Washington, DC|Petworth]]
+* [[Shepherd Park]]
+* [[Shaw, Washington, DC|Shaw]]
+* [[Swampoodle]]
+* [[Takoma, Washington, DC|Takoma]]
+* [[Tenleytown]]
+* [[Trinidad, Washington, DC|Trinidad]]
+|}
+''([http://www.h-net.org/~dclist/neighborhoods.html External link to DC neighborhood websites])''
+
+== Demographics ==
+As of the [[census]] of [[2000]], there are 572,059 people, 248,338 households, and 114,235 families residing in the city. The [[population density]] is 3,597.3/km&sup2; (9,316.4/mi&sup2;). There are 274,845 housing units at an average density of 1,728.3/km&sup2; (4,476.1/mi&sup2;). The racial makeup of the city is 30.78% [[White (U.S. Census)|White]], 60.01% [[African American (U.S. Census)|African American]], 0.30% [[Native American (U.S. Census)|Native American]], 2.66% [[Asian (U.S. Census)|Asian]], 0.06% [[Pacific Islander (U.S. Census)|Pacific Islander]], 3.84% from other races, and 2.35% from two or more races. 7.86% of the population are [[Hispanic (U.S. Census)|Hispanic]] or [[Latino (U.S. Census)|Latino]] of any race.
+
+There are 248,338 households out of which 19.8% have children under the age of 18 living with them, 22.8% are married couples living together, 18.9% have a female householder with no husband present, and 54.0% are non-families. 43.8% of all households are made up of individuals and 10.0% have someone living alone who is 65 years of age or older. The average household size is 2.16 and the average family size is 3.07.
+
+In the city the population is spread out with 20.1% under the age of 18, 12.7% from 18 to 24, 33.1% from 25 to 44, 21.9% from 45 to 64, and 12.2% who are 65 years of age or older. The median age is 35 years. For every 100 females there are 89.0 males. For every 100 females age 18 and over, there are 86.1 males.
+
+The median income for a household in the city is $40,127, and the median income for a family is $46,283. Males have a median income of $40,513 versus $36,361 for females. The per capita income for the city is $28,659. 20.2% of the population and 16.7% of families are below the poverty line. Out of the total people living in poverty, 31.1% are under the age of 18 and 16.4% are 65 or older.
+
+== Economy ==
+Several major companies are based in Washington, including the [[Carlyle Group]] and Marriott International, Inc.
+
+[[America Online]] and [[Orbital Sciences Corporation]] are based in nearby [[Dulles, Virginia|Dulles]], [[Virginia]]. [[MCI]] is based in nearby [[Ashburn, Virginia]]. [[Nextel Communications|Nextel]] and [[Unisys]] are based in [[Reston, Virginia]]. [[US Airways]] is based in [[Arlington County, Virginia]]. [[Colgan Air]] is based in nearby [[Manassas, Virginia]]. [[Lockheed Martin]] is based in nearby [[Bethesda, Maryland|Bethesda]], [[Maryland]]. [[Alhurra]] is based in [[Springfield, Virginia]]. [[Independence Air]] is based at nearby [[Dulles International Airport]].
+
+The American genomics industry is largely centered around the Maryland suburbs of Washington. Prominent players are [[Celera]], [[The Institute for Genomic Research]] (also known as "TIGR"), and [[Human Genome Sciences]] (all of which are in the city of [[Rockville, Maryland]]).
+
+== Cultural features ==
+<div style="float: right; margin: 0 0 1em 1em; text-align: center;"><br>[[image:jfmhelicoptor.jpg]]<br><small>''[[Jefferson Memorial]]''</small></div>
+===Local media===
+
+''[[The Washington Post]]'' is the oldest and most read daily [[newspaper]] in Washington. The ''Post'' is also one of the most reputable daily newspapers in the U.S. and is highly influential in its political reporting, particularly after the role of its reporters in cracking the [[Watergate]] scandal. The daily ''[[Washington Times]]'' and the free weekly ''[[Washington City Paper]]'' also have substantial readership in the District. The weekly ''[[Washington Blade]]'' focuses on [[gay]] issues.
+
+Washington is served by the following local broadcast [[television]] stations:
+
+* [[WBDC]]&mdash;Channel 50, a [[The WB Television Network|WB]] affiliate
+* [[WDCA]]&mdash;Channel 20, a [[UPN]] affiliate
+* [[WRC (television)|WRC]]&mdash;Channel 4, an [[National Broadcasting Company|NBC]] affiliate
+* [[WETA]]&mdash;Channel 26, a [[Public Broadcasting Service|PBS]] affiliate
+* [[WJLA]]&mdash;Channel 7, an [[American Broadcasting Company|ABC]] affiliate
+* [[WTTG]]&mdash;Channel 5, a [[Fox Network|FOX]] affiliate
+* [[WUSA]]&mdash;Channel 9, a [[CBS]] affiliate
+
+=== Landmarks and museums ===
+
+Washington is the home of numerous national landmarks and is a popular tourist destination. Landmarks include:
+<table width=100%><tr><td width=50% align=left valign=top>
+*[[Blair House]]
+*[[Catholic University of America]], whose grounds house the [[Basilica of the National Shrine of the Immaculate Conception]]
+*[[City Museum of Washington, DC|City Museum]]
+*[[Corcoran Museum of Art]]
+*[[Franklin Delano Roosevelt Memorial]]
+*[[Jefferson Memorial]]
+*[[John F. Kennedy Center for the Performing Arts]]
+*[[International Spy Museum]]
+*[[Korean War Veterans Memorial]]
+*[[Library of Congress]]
+*[[Lincoln Memorial]]
+*[[The Mall (Washington, DC)|National Mall]]
+*[[National Gallery of Art]]
+*[[National World War II Memorial]]
+*[[Old Post Office Building (Washington)|Old Post Office Building]]
+*[[The Phillips Collection]]
+</td><td width=50% align=left valign=top>
+*[[Smithsonian Institution]], a collection of musuems including:
+**[[Anacostia Museum]]
+**[[Arthur M. Sackler Gallery]]
+**[[Hirshhorn Museum]]
+**[[National Air and Space Museum]]
+**[[National Museum of American Art]]
+**[[National Museum of American History]]
+**[[National Museum of the American Indian]]
+**[[National Museum of Natural History]]
+**[[National Portrait Gallery, Washington, DC|National Portrait Gallery]]
+**[[National Postal Museum]]
+**[[National Zoological Park|National Zoo]]
+*[[United States Capitol]]
+*[[United States Holocaust Memorial Museum]]
+*[[Vietnam Veterans Memorial]]
+*[[Washington Monument]]
+*[[Washington National Cathedral]]
+*[[White House]]</td></tr></table>
+
+=== Colleges and universities ===
+<table width=100%><tr><td width=50% align=left valign=top>
+*[[American University]]
+*[[The Catholic University of America]]
+*[[Corcoran College of Art and Design]]
+*[[Gallaudet University]]
+*[[George Washington University]]
+*[[Georgetown University]]
+</td><td width=50% align=left valign=top>
+*[[Howard University]]
+*[[National Defense University]]
+*[[Southeastern University]]
+*[[Strayer University]]
+*[[Trinity University (Washington, DC)|Trinity University]]
+*[[University of the District of Columbia]]</td></tr></table>
+
+=== High Schools ===
+
+*[[Gonzaga College High School]]
+
+=== Sports and entertainment ===
+
+Washington is home to several professional sports teams: the [[Major League Soccer|MLS]] [[D.C. United]], the [[National Hockey League|NHL]] [[Washington Capitals]], the [[Women's National Basketball Association|WNBA]] [[Washington Mystics]], the [[National Basketball Association|NBA]] [[Washington Wizards]], and a as-of-yet-unnamed [[Washington D.C. Major League Baseball Franchise]] (the former [[Montreal Expos]], who will start play in [[2005]]). It also hosts the annual Legg Masson Tennis Classic [[tennis]] tournament.
+
+Other professional and semi-professional teams based in DC include the [[Australian Rules Football|USAFL]] Baltimore Washington Eagles, the [[National Women's Football Association|NWFA]] D.C. Divas, the Minor League Football DC Explosion, and the [[cricket|Washington Cricket League]]. It was also home to the [[Women's United Soccer Association|WUSA]] [[Washington Freedom]], and, during the [[2000]]&ndash;[[2002]] [[National Lacrosse League|NLL]] seasons, the [[Washington Power]] was based in the city.
+
+The [[National Football League|NFL]] [[Washington Redskins]] formerly played at R.F.K. Stadium in the District, but are now based at FedEx Field in [[Landover, Maryland]].
+
+There were two [[Major League Baseball]] teams named the [[Washington Senators]] in the early and mid-[[20th century|20<sup>th</sup> century]], which left to become respectively the [[Minnesota Twins]] and the [[Texas Rangers]]. In the [[Washington_Senators#Premodern_baseball_in_Washington|premodern era of baseball]], the town was home to teams called the Washington Nationals, Washington Statesmen, and Washington Senators on and off from the [[1870s]] to the turn of the century. It was also home to several [[Negro League baseball|Negro League]] teams, including the [[Homestead Grays]], Washington Black Senators, Washington Elite Giants, Washington Pilots, and Washington Potomacs. On [[September 29]], [[2004]] MLB announced plans to relocate the [[Montreal Expos]] to Washington, pending certain conditions including approval by the City Council of a stadium deal. The market is also home to many fans of the [[Baltimore Orioles]] of [[Baltimore, Maryland]], whose owner initially opposed the move of the Expos to DC.
+
+The [[MCI Center]] in [[Chinatown]], home to the Capitals, Mystics, Wizards, and the Georgetown Hoyas, is also a major venue for concerts, [[WWE]] [[professional wrestling]], and other events.
+
+The [[Kennedy Center for the Performing Arts]] hosts the [[National Symphony Orchestra]], the [[Washington Opera]], the [[Washington Ballet]], and other musical and stage performances. Notable local music clubs include Madam's Organ Blues Bar in Adams Morgan, and [[the Black Cat]], [[the 9:30 Club]], and the historic [[Bohemian Caverns]] jazz club, all in the U Street NW area.
+
+Washington was an important center in the genesis of [[punk rock]] in the United States. Punk bands of note from Washington include [[Fugazi]], [[Bad Brains]], and [[Minor Threat]]. Native Washingtonians continue to support punk bands, long after the punk movement's peak in popularity. The region also has a storied [[indie rock]] history and was home to [[TeenBeat Records|TeenBeat]] and [[Simple Machines Records|Simple Machines]], among other indie record labels.
+
+== Transportation ==
+
+The [[I-495]] Beltway surrounds the Washington area. The [[I-270]] spur connects I-495 with [[I-70]]. The [[I-395]] spur breaks off of [[I-95]] at the Beltway to connect northern Virginia with downtown Washington. [[I-66]] connects to [[I-495]] and provides access to the western edges of northern Virginia, and continues out to the west.
+
+The Washington area is serviced by the [[Washington Metro]] public transportation system, which operates public buses and the region's subway system.
+
+=== Airports ===
+Washington is located in proximity to three airports: [[Washington Dulles International Airport]] (IAD) between [[Dulles, Virginia]] and [[Chantilly, Virginia]]; [[Ronald Reagan Washington National Airport]] (DCA) in Arlington County; and [[Baltimore/Washington International Airport]] (BWI) near [[Baltimore, Maryland]].
+
+[[Washington Dulles International Airport|Dulles International]] is used for most international travel to and from DC, and is the largest domestic [[low-cost carrier|low-cost]] hub in the US. [[Baltimore/Washington International Airport|Baltimore/Washington]] is used more for international and domestic service serving the Baltimore PMSA.
+
+==External links==
+===General information and activity guides===
+*[http://www.dc.gov/ Washington, DC official site]
+*[http://www.washington.org/ official tourism site]
+*[http://www.culturaltourismdc.org/ Cultural Tourism in DC]
+*[http://www.citymuseumdc.org/ City Museum of Washington, DC]
+*[http://www.our-dc.com/ OurDC.com - A website featuring oft-overlooked DC cultural offerings]
+*[http://www.greaterwashington.org/ Greater Washington regional economic initiative]
+
+* Major DC entertainment guides: [http://www.washingtonpost.com/wp-dyn/artsandliving/entertainmentguide/?nav=globetop The Washington Post] | [http://www.washingtoncitypaper.com/arts.shtml Washington City Paper]
+
+===DC representation debate===
+*[http://www.dcvote.org/ DC Vote] An organization working for District representation in Congress
+*[http://www.washingtonmd.org Committee for the Capital City] An organization supporting retrocession of DC to Maryland
+*[http://www.dwheeler.com/essays/dc-in-maryland.html "Treat Washington, DC as Part of Maryland for Congressional Elections"] argues for this particular approach for DC representation in Congress.
+
+==Sources==
+
+* http://flagspot.net, http://flagspot.net/flags/us-dc.html - Source for flag image - Flag image made by Mark Sensen
+
+[[da:Washington DC]]
+[[de:Washington, D.C.]]
+[[es:Washington, DC]]
+[[eo:Va&#349;ingtono]]
+[[fr:Washington, DC]]
+[[ko:&#50892;&#49905;&#53556; D.C.]]
+[[it:Washington DC]]
+[[nl:Washington DC]]
+[[ja:&#12527;&#12471;&#12531;&#12488;&#12531;D.C.]]
+[[pl:Dystrykt Kolumbii]]
+[[sv:Washington D.C.]]
+[[zh-cn:&#21326;&#30427;&#39039;&#24066;]]
+
+{{United_States}}
+[[Category:Cities in the United States]]
+[[Category:Political divisions of the United States]]
+[[Category:Washington, DC| ]] \ No newline at end of file
diff --git a/vendor/wikimedia/utfnormal/scripts/testdata/young.txt b/vendor/wikimedia/utfnormal/scripts/testdata/young.txt
new file mode 100644
index 00000000..7a907610
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/scripts/testdata/young.txt
@@ -0,0 +1,274 @@
+{{다른 뜻}}
+{{POV}}
+{{밴드 정보
+|밴드명 = 이수영
+|그림 = LeeSooYoung.jpg
+|국가 = 대한민국
+|활동시기 = [[1999년]] - 현재
+|장르 = [[발라드]]
+|라인업 = 솔로
+}}
+'''이수영''' (李秀英, [[1979년]] [[4월 12일]] - )은 [[대한민국]]의 [[가수]]이다. 본명은 '''이지연'''(李知姸)이다.
+종교는 [[개신교]]이다.
+가족관계로는 여동생과 남동생이 각각 한 명씩 있다.
+부모는 [[교통사고]]로 사망하였다.
+
+[[1999년]] 〈I Believe〉로 데뷔했다. 대표곡으로는〈라라라〉, 〈그리고 사랑해〉,〈덩그러니〉,〈휠릴리〉 등이 있다. 가장 최근 앨범은 정규 7집 《[[Grace]]》로서 2006년 1월 21일 발매되었다. 《Grace》의 [[리팩키지 앨범]]인 《Speical Grace》가 발매되었다.(리팩키지 앨범은 정규 혹은 비정규 음반으로 간주하지 않는다.) 정규 8집 앨범은 [[2006년]] [[가을]]에 발매가 될 것으로 예정되어 있었으나 소속사와 불화로 무기한 연기된 상태다.
+== 데뷔 전 ==
+
+=== 가정사 ===
+[[서울]]에서 태어났고 그녀가 9살 되던 해에 아버지가 [[교통사고]]로 사망하였다. 어머니는 세 자녀를 키우기 위해 식당 일,우유 배달 등을 하며 생계를 꾸려나갔다. 자연스레 집안일과 어린 두 동생을 돌보는 것은 이수영의 몫이되어 그녀는 일찍이 나이에 비해 정신적으로 많이 성숙했다.
+
+어릴 적부터 가수가 꿈이었던 이수영은 16살 때 MBC 라디오 프로그램인 [[별이 빛나는 밤에]]의 장기자랑 코너에 나가 장원을 수상하였고, 당시 별밤 진행자였던 [[이문세]]는 그녀의 음색에 대해 칭찬을 아끼지 않았다. 그 당시에, 별밤 장기자랑 코너의 장원은 주,월,기 별로 있었는데 아쉽게도 이수영이 이사를 가는 바람에 기장원선발에 참가하지는 못했다.
+
+18살이 되던 해에 이수영은 [[머라이어 캐리]] 등의 가수들의 노래를 불러서 만든 데모 테잎을 [[이가 엔터테인먼트]]에 보냈고 얼마 후 연락이 왔으며 그 때부터 이수영은 가수 트레이닝을 하기 시작했다.
+
+1년 뒤 그녀는 [[가스펠]]이 어떤 음악인지 궁금해서 방문한 교회에서 처음으로 [[개신교]]를 접하게 되었다. 깊은 믿음을 가지게 된 그녀는 학업을 뒷전으로 미루고 교내 친구들을 상대로 전도활동에 전념하였다. 이러한 믿음이 그녀를 지탱하게 해주는 원동력이 되었다고 후에 고백한 바 있다.
+
+얼마 후 이수영은 학교에서 종례를 마친 후 한 통의 다급한 전화를 받게 되었는 데, 그녀의 어머니가 교통사고를 당했다는 것이었다. 이수영의 어머니는 병원으로 후송 된 직후 사망하였다.
+
+이듬 해, 이수영은 데뷔 앨범인 《[[I Believe]]》를 발매하고 [[가수]]로 데뷔하였다.
+
+=== 트레이닝 ===
+[[이가 엔터테인먼트]]의 사장 [[이도형]]은 이수영을 어느 한 분야로 집중 트레이닝 시키지 않았다.
+이수영은 발라드 가수지만 트레이닝 시절에는 활동할 음악 분야를 정해놓지 않았기에 그녀가 과장해 말한 것인지는 모르나 “10시간 보컬 연습 10시간 안무 연습 4시간 취침”이었다고 당시를 회상했다.
+
+트레이닝은 매우 혹독했다. 힘들 때마다 이수영은 어머니와 어린 두 동생들을 생각하며 버텼다.(그러나 어머니는 이수영이 데뷔하기 전 교통사고로 사망했다.) 트레이닝이 막바지에 이를 무렵 이도형은 이수영의 음색이 댄스 가수의 그것이 아니라 판단하여 발라드 가수로 데뷔시키기로 결정했다. 이도형의 스파르타식 트레이닝과 관리는 데뷔 후에도 계속 되었으며 2집 활동 때 절정에 달했다. 혹독한 트레이닝으로 이수영은 2집활동 당시 38kg이란 몸무게를 기록하기도 했다.
+
+== 앨범 활동 ==
+
+=== 1집 ===
+데뷔 앨범인 1집 《[[I Believe]]》은 [[1999년]] [[11월 16일]] 발매되었다. 이수영은 오리엔탈 발라드라는 독특한 분위기의 곡인 첫 번째 싱글 〈I Believe〉로 활동하여 큰 사랑을 받았으며 신인답지 않게 각종 차트의 상위권을 차지했다. 소속사의 관리는 매우 혹독해서 공연이 끝나면 곧바로 회사로 돌아와 녹화된 화면을 보며 몇 시간씩 모니터링을 하며 잘못된 점을 지적했다.
+
+〈I Believe〉의 성공에 이어 두 번째 싱글 〈Good bye my love〉로 활동했으나 그리 큰 반응을 이끌어내지는 못했다. 1집은 그녀가 가요계에 등장한 데뷔앨범으로 중요한 의미를 갖는다.
+
+==== 거짓 프로필 ====
+데뷔 당시 소속사가 이수영에 대해 속인 것이 세가지가 있었으니 그것은 바로 키,나이 그리고 가족사항이었다. 프로필에는 키가 165cm로 기록되어있지만 실제 키는 161.8cm라고 이수영은 감성시대 진행 중 고백했다. 또한 나이를 [[1980년]]생으로 속였는데 이것은 이수영이 [[1979년]]생 연예인들의 친목클럽인 '79클럽'에 가입함에 따라 거짓이었음이 드러났다.
+
+또한 양 부모님이 모두 살아계신다고 하였으나 이수영을 개인적으로 아는 지인들의 글이 PC통신과 입소문을 통해 퍼지면서 소녀가장이라는 소문이 돌게 되었다. 얼마 후 이 사실을 시인했는데 소속사는 이것을 홍보 방법의 하나로 이용하여 동정심 마케팅 전략을 펼쳤다. 이후 이수영은 몇 년간 '소녀가장 가수'라는 꼬리표를 달게 되었다. (사실 이수영이 데뷔했을 때 그녀는 성인이었으므로 소녀가장이라 칭한 것은 잘못된 것이다.) 지금도 일부 사람들은 그녀를 어린 두 동생들을 돌보며 살아온 소녀가장 가수로 기억하며 동정심을 표하기도 한다. 당시 소속사의 그런 홍보방법에 대해 이수영은 "부모님을 두 번 죽이는 기분"이었다고 회상했다.
+
+=== 2집 ===
+2집 《[[Never again]]》은 [[2001년]] [[2월 2일]] 발매되었다. 첫 번째 싱글 〈Never again〉은 웅장한 [[오케스트라]] [[세션]]이 동원된 곡으로 좋은 반응을 이끌어냈다. 두 번째 싱글〈스치듯 안녕〉활동을 시작하면서 이수영은 긴 생머리를 단발로 바꾸고 몇몇 예능 프로그램에 출연하기도 하였다. 〈스치듯 안녕〉은 〈Never again〉보다 오히려 더 큰 사랑을 받았다.
+
+2집 활동은 그야말로 이수영에게는 암흑기와 같았다. 아직은 신인인 상태라 소속사의 압박이 매우 심했다. 이러한 것은 두 번째 싱글 〈스치듯 안녕〉활동 시 절정에 달했는데 이수영의 일거수일투족이 감시당했고 심지어 매일 밤마다 이수영은 그녀가 집에 있는지 여부를 확인하는 소속사의 전화를 받아야 했으며 방송국 대기실에서 그 누구와도 말을 하지 못하게 했으며 다이어트를 명목으로 식사량도 강제적으로 제한했다. 이러한 사실을 안 친구 [[이효리]]는 이수영을 밤에 몰래 빼내어 영화를 관람하거나 식사를 대접하는 등의 도움을 줬다고 후에 라디오 프로그램을 통해 고백했다.
+
+이수영은 〈스치듯 안녕〉활동 당시 갑작스럽게 쓰러지고 말았는데 소속사는 그런 이수영을 병원에 몇 일 입원시켜 치료를 받게 한 뒤 퇴원과 동시에 곧바로 방송국으로 보냈다. 이수영은 아무리 아파도 무대에 서야했고 그로 인해 〈스치듯 안녕〉은 대부분 립싱크 무대를 선보이게 되었다. 이수영은 소속사의 압박과 엄격한 관리로 인해 점점 더 건강이 나빠졌고 이내 2집 활동을 마무리 하게 되었다.
+
+
+==== 단발 머리 ====
+〈스치듯 안녕〉활동 시 이미지 변신의 일환으로 헤어스타일에 변화를 주려고 미용실을 방문한 이수영은 긴 생머리를 약간만 자르려고 했으나 그 날따라 기분이 좋지 않았던 헤어디자이너는 홧김에 머리카락을 너무 많이 잘라버렸다. 결국 이수영은 단발이 되었고 이것은 의도하지 않았던 결과였기에 얼마 간 헤어스타일에 알맞는 분위기연출을 구상하느라 애를 먹게 되었다. 사실 그것은 또다른 도약의 길을 열어논 셈이 된것이었다.
+
+=== 3집 ===
+3집 《[[Made in winter]]》는 [[2001년]] [[12월]]에 발매되었다. 기존 앨범과 달리 현악기 세션을 최대한 자제한 이 앨범의 첫 번째 싱글 〈그리고 사랑해〉는 〈라라라〉와 함께 팬들에게 이수영 최고의 명곡으로 꼽히고 있다. 3집 활동의 주된 변화는 예능 프로그램출연을 통한 홍보였다. 많은 이들이 노래는 아는데 그녀의 얼굴은 모르는 상황이었다. 각종 예능 프로그램에 출연하여 연변 사투리 개인기를 선보여 많은 사랑을 받았다. 후에 이 연변 사투리는 실제 연변에 거주하는 일부 사람들에게 자신들을 모욕한다며 반발을 사기도 하였다. 이수영은 MBC 예능 프로그램인 [[일요일 일요일 밤에]]의 '게릴라 콘서트' 코너에 출연해 자신의 이미지를 대중에게 강하게 인식시키는데 성공한다.
+
+홍콩의 유명 영화배우인 [[청룽]]과 함께 청룽의 앨범에 수록된 듀엣곡인 〈몽상적 천제〉를 녹음하며 동남아시아 프로모션의 모습도 보였으나 보도자료에서와 달리 프로모션 행사 이후 동남아시아에 더 이상 방문하지 않았고 활동 또한 전무한 것으로 보아 이것은 소속사의 반짝 홍보였다는 의견이 지배적이다.
+
+이수영은 일본 유명 비디오게임인 《[[파이널 판타지]]》 열 번째 편의 인터네셔널 버전의 OST를 한국어로 번안하여 녹음했다. 처음에는 단순히 OST참여에 지나지 않았으나 〈얼마나 좋을까〉는 게임유저들에게 이수영이란 존재를 알림과 동시에 수많은 팬을 끌어모으는데 성공했다. 두 번째 싱글인 〈차라리〉로 활동하던 중 MBC 라디오프로그램 [[감성시대]]를 진행하게 되었다. 감성시대 진행과 〈그리고 사랑해〉의 성공으로 수 많은 팬들이 생겼다.〈차라리〉는 그리 특징적인 반응을 이끌어내지는 못했고 [[2002년]] [[6월]] 월드컵 개막과 동시에 3집 활동을 마무리 지었다.
+
+=== 라디오 DJ ===
+[[2002년]] [[4월]] MBC는 정규 봄 개편을 단행했다. 봄 개편과 더불어 이수영은 MBC 표준 FM에서 오전 0시에 진행되는 [[감성시대]] DJ를 맡게된다. 감성시대는 이수영 특유의 유머 감각과 인간미가 드러나 많은 청취자들에게 사랑을 받았으며 아직도 역대 최고의 라디오 프로그램이 무엇이냐는 질문에 많은 사람들이 이수영의 감성시대라고 답한다.
+
+심야 프로그램답게 조용히 진행되던 감성시대는 시간이 흐를수록 밝고 왁자지껄한 프로그램이 되었다. 이수영은 그 동안 대중에게 노출하지 않았던 자신의 유머 감각을 선보였으며 마음 속에 담아두고 있었던 많은 이야기를 했다. 이 두가지 모두 소속사에서는 바라지 않는 부분이었다. 많은 연예인들을 게스트로 만나 이야기를 나누어 이로 인해 인맥을 많이 넓힐 수 있었고 기존에 그녀에게 박혀있던 조용하고 차분 가수 이미지를 대중에게는 물론 타 연예인들에게도 털어내버렸다.
+
+[[2003년]] [[3월]]이 되자 돌연 DJ 자리에서 내려오게 되었다.
+겉으로는 일본 진출을 위해서라고 했지만 실은 소속사의 통제가 아니냐는 의혹이 있었으며 실제로 이수영의 일본 진출은 1년 3개월 후에 이루어졌다.
+
+이로써 이수영은 [[2002년]] [[4월 1일]]부터 [[2003년]] [[3월 10일]]까지 진행하던 감성시대 DJ를
+그룹 UN의 [[최정원]]에게 물려주고 DJ 활동을 마무리 지었다.
+
+=== 4집 ===
+이수영 최고의 상업적 성공과 명성을 안겨준 4집 《[[My stay in Sendai]]》는 [[감성시대]]를 진행 중이던 [[2002년]] [[9월 16일]] 발매되었다.
+이수영은 앨범 활동과 [[DJ]]활동을 병행하였는데 이 점은 앨범 홍보에 상당한 도움이 되었다. 대중들에게 얼굴이 알려지기 시작한 이수영은 4집에서 엄청난 인기를 얻게 되었다.
+
+첫 번째 싱글인 〈라라라〉는 곡의 변화가 크게 없는 이지 리스닝곡으로 이수영의 음색이 매우 두드러지게 표현되었다.〈라라라〉는 공중파 가요 프로그램 1위라는 숙원을 풀게 해주었다. SBS 가요프로그램인 [[인기 가요]]에서 1위를 수상한 이수영은 눈물을 흘리며 말을 잇지 못해 사회자들을 당황케 하였다. 두 번째 싱글인 〈빚〉도 〈라라라〉에 못지않는 인기를 구가하며 가요 프로그램 1위는 물론이고 각종 차트에서 상위권을 기록하였다. 이 여세를 몰아 [[2003년]] [[1월]] 4.5집 스페셜 앨범인 《[[Sweet holiday in Lombok]]》을 발매하여 싱글로는 일본 밴드 [[Zard]]의 곡인 〈Good day〉를 리메이크한〈굿바이〉를 앞세워 노래 세곡을 연이어 히트시켰다.
+
+4집은 그녀의 역대 앨범 중 가장 많이 팔렸고 폭발적인 인기를 얻은 앨범이다. 4집 활동으로 인해 이수영은 최고의 한해를 보냈으며 그 해 연말 사싱식프로그램에 첫 출연하게 되었다. 공식 활동 마무리 후 음악공부를 위해 외국 유학을 간다는 소문이 돌았고 소속사에서 보도자료를 배포하기도 했으나 이수영이 해외유학을 거절함에 따라 무산되었다.
+
+=== 5집 ===
+5집 《[[This time]]》은 [[2003년]] [[8월]]에 발매되었다. 그녀의 새 앨범에는 많은 이들의 이목이 집중되었다. 앨범은 발매되자마자 무서운 속도와 양의 판매고를 올렸다. 첫 번째 싱글 〈덩그러니〉는 공중파,케이블 TV프로그램,라디오 프로그램 가릴것 없이 각종 차트의 1위를 휩쓸었다. 이 인기는 두 번째 싱글 〈여전히 입술을 깨물죠〉로 그대로 이어져 가히 [[2003년]] 가요계를 이수영의 해라 해도 과언이 아니었다.
+
+그러나 한가지 문제가 발생했는데 바로 불안해진 라이브 실력 논란이었다. 전체적으로 떨리는 음정과 〈여전히 입술을 깨물죠〉활동 시 보여주었던 고음부분의 저음처리는 노래 연습 부족이 아니냐는 비난여론을 형성케 하였으며 라이브 잘하는 가수라는 이수영의 이미지에 타격을 입혔다. 라이브 실력 논란은 후에 발매된 정규 6집 앨범에서도 계속되었다.
+
+그 해 연말 이수영은 MBC 10대 가수가요제 최고인기가수상을 수상하는 영광을 안았다. 발표 당시 이수영은 본인이 수상했다는 사실에 엄청난 충격을 받아 대성통곡을 해서 앵콜 무대에서 마이크에서 흘러 나온 소리는 울음소리 뿐이었다. 시상식 직후 이수영은 병원에 입원하여 휴식을 취했다. 5집은 이수영을 대한민국 최고의 가수로 자리매김하게 만든 의미있는 앨범이었다.
+
+==== 과도한 보도자료 ====
+5집 활동 당시 소속사인 [[이가 엔터테인먼트]]는 너무나도 황당한 보도자료들을 내보내며 앨범 홍보에 열을 올렸는데 이것으로 인해 많은 사람들이 아직까지도 이수영에 대해 오해하고 있는 부분이 생겼다. 대표적인 것인 바로 시력 상실과 청력 상실 보도자료였다. 시력 상실과 청력 상실 보도자료는 모두 소속사에서 내보낸 홍보용 보도자료로써 이수영이 시력을 잃어가고 있으며 한 쪽 귀가 들리지 않는다는 내용이었다. 이 보도자료로 인해 몇몇 사람들은 가수가 노래를 부를 때 자신의 목소리를 듣기 위해 사용하는 이어폰이 보청기라 주장하는 웃지 못할 헤프닝도 일어났다.
+
+소속사 입장에서는 단순히 대중들에게 이수영을 알리고 약간의 동정심을 얻으려 했겠지만 이 일의 여파는 매우 큰 것이어서 3년이 지난 지금도 이수영 관련 소식을 접할 때 마다 "귀도 안들리는데.. 화이팅! 힘내세요!" 라는 식의 의견을 적어놓는 경우를 종종 볼 수 있다.
+
+또한 이수영의 밴에 도둑이 들어 속옷과 노출이 심한 옷을 입은 영상이 담긴 비디오 테잎을 훔쳐갔다는 매우 자극적인 보도자료를 배포하기도 하였다. 이가 엔터테인먼트의 과도한 보도자료 홍보방식은 비단 이수영 뿐만 아니라 같은 소속사 소속의 연예인인 [[한지혜]],[[심플리 선데이]] 등의 홍보에도 이용되었다.
+
+=== 리메이크 앨범 그리고 휴식기 ===
+5집 활동을 성공적으로 마친 이수영은 휴식기에 들어갔다. 소속사가 이미 일본 진출을 선언한 터라
+다른 작업은 할 수 없었다. 공백기 동안 이수영은 대한민국 가요계의 리메이크열풍의 시발점이 된 《[[Classic the remake]]》를 발매하고 [[이문세]]의 광화문 연가를 리메이크해 첫 싱글로 내세웠다.
+앨범이 발매된 직후 이수영은 미국에서 유학중이던 절친한 친구 [[박경림]]과 미국 여행을 떠났음과 동시에 방송 활동이 전혀 없었음에도 불구하고 리메이크 앨범의 시장에서의 반응은 매우 뜨거웠다.
+
+이 앨범은 2004년 앨범판매량 2위를 기록하여 그녀에게 [[2004년]] [[골든디스크]] 대상이라는 영예를 안겨주었고 특히 중,장년층에 전폭적인 지지를 받았다. 또한 이 앨범은 CD와 테이프의 판매 비율이 거의 비슷한 경우를 찾아보기 힘든 유래없는 기현상을 보였다.휴식기동안 이수영은 여행을 통해 몸과 마음을 재충전하고 귀국했다. 그녀에게는 일본시장 진출이라는 거대한 산이 기다리고 있었다.
+
+=== 일본 진출 ===
+국내에서의 성공에 자신감을 얻은 [[이가 엔터테인먼트]]는 이수영의 일본진출을 오래 전부터 계획해왔다. [[2004년]] [[5월]] 소속사는 충만한 자신감으로 [[소니 뮤직]]과 정규앨범 1장,싱글앨범 2장 발매를 조건으로 계약을 채결하고 본격적인 일본 진출을 감행했으나 결과는 참담했다.
+
+일본에서 발매한 싱글앨범인 《[[사이고노 와가마마|最後の我がまま]]》는 오리콘 차트 125위라는 저조한 성적을 기록했는데 일본앨범은 이수영 고유의 한(恨)의 정서가 결여된, 너무나도 일본음악적인 앨범이었다는 평이 지배적이었다. 색을 잃어버린 앨범이 실패하는 것은 당연한 일이었다. 일본 시장에서의 실패로 인해 이수영은 한 발 후퇴하게 되었다.
+
+소속사는 곧 국내 정규 6집 녹음에 착수했고 6집은 판매량 면에서는 호조였으나 대중들의 평 면에서는 그리 좋지 못한 반응을 받게 되었다. 일본 진출 전 과도한 자신감을 가지고 있던 소속사는 '일본 시장에서 성공할 때까지 돌아오지 않겠다.' 라는 식의 보도자료를 언론사에 마구 송고했는데 이로 인해 이수영은 본의 아니게 일부 대중들에게 '성공할 때까지 안돌아온다며 아듀 콘서트라는 이름으로 콘서트까지 한 사람이 몇개월 만에 돌아오냐'는 비난을 받았다.
+
+일본시장 진출은 소속사의 과도한 욕심과 자신감이 빚어낸 실패였다.
+
+=== 6집 ===
+6집 《[[The colors of my life]]》는 전체적으로 듣기 편안한 음악들로 이루어졌고 이는 이수영이 지향하는 음악이다. 6집의 대중들의 평은 전 앨범들에 비해 그리 좋지 못한 편이었다. 그러나 앨범 판매량에 있어서는 [[2004년]] [[9월]]에 발매되었음에도 불구하고 [[12월]]까지 무려 34만장의 판매고를 올려 그 해 앨범판매량 3위를 차지했다.(2위 또한 그녀의 앨범인 《[[Classic the remake]]》였다.)
+
+첫 번째 싱글은 〈휠릴리〉였다. 6집 활동에서는 전 앨범에 비해 더욱 더 강해진 물량 공세 홍보를 선보였고 소속사인 [[이가 엔터테인먼트]]은 각종 예능 프로그램의 크레딧타임에 뮤직비디오를 방영하였는데 그 수가 대단히 많은 것이어서 채널만 돌리면 〈휠릴리〉가 흘러나왔다. 이 물량 공세 홍보방식은 이가 엔터테인먼트가 [[2006년]] 데뷔시킨 [[아이비]]를 홍보하기 위해 사용하기도 하였다. 이런 물량 공세 속에 판매량은 호조를 보였다.
+
+6집 활동 당시에 또 다시 논란이 된 부분이 있었으니 바로 그녀의 라이브 실력이었다. 일부 대중들이 그녀의 라이브 실력에 대해 의구심을 품었는데 그들의 주장에 따르면 이수영은 5집부터 라이브 실력이 현저하게 낮아졌다는 것이다.
+이 논란은 [[KBS]] [[한국 방송]]의 프로그램인 [[윤도현의 러브레터]]에서 보인 무대로 인해 더욱 더 증폭되었고 이러한 논란으로 인해 이수영은 이듬 해 미국으로 건너가 보컬 트레이닝을 받았다.
+
+6집 활동은 무슨 이유에서인지 첫 번째 싱글인 〈휠릴리〉활동 후 중단되었으며 앨범 발매 전에 미리 두 번째 싱글로 내정되었던 〈Andante〉의 활동은 전혀 이루어지지 않았다. 이수영과 소속사의 계약만료시점이 다가옴에 따라 생긴 일이 아니냐는 추측도 있었다. 아무튼 그 해 이수영은 다시금 대한민국 최고의 가수 자리에 올랐다. 2004년 골든디스크 대상을 수상했으며 MBC 10대 가수가요제 최우수가수상을 2년 연속 수상한 것이다. [[2003년]]에 그러했듯이 이수영은 [[2005년]] [[1월 1일]]을 기해 6집 활동을 마무리지었다.
+
+=== 공백기의 이수영 ===
+[[이가 엔터테인먼트]]와의 계약이 만료되자 이수영은 미국으로 떠나 친구인 [[박경림]]과 미국 여행을 했다.
+
+이수영과 [[팬텀]](구 [[이가 엔터테인먼트]])의 계약만료 소식이 전해지자 각 언론들은 그녀의 행보에 주목했다. 남을 것인가 옮길 것인가. 그녀의 선택에 이목이 집중되었으나 이미 마음을 정한 것으로 보였다. 팬텀은 이수영의 그런 의사를 알고 매우 안좋은 모습을 보여줬다. 그것은 [[2005년]] [[2월]]에 열린 '톡톡콘서트'에서 여지없이 드러났다.
+
+'톡톡콘서트'가 있다는 사실을 이수영은 공연 3일 전에 알게 되었다. 그 전까지 이수영은 [[미국]]으로 떠나 친구 [[박경림]]과 생활하던 중이어서 준비 한번 된 적 없는 공연이 제대로 되었을 리가 만무했다.
+반주는 모두 MR을 사용했고 노래 또한 5곡만 불렀으며 토크가 주를 이뤘다. 공연 마지막에 이수영은 이 공연에 대한 진실을 이야기하면서 이 공연이 팬텀과의 마지막 일이라고 밝혔다.
+
+팬텀은 이수영이 미국에 있을 때 그녀의 의사와는 상관없이 스폐셜 앨범 《[[As time goes by]]》를 발매했다.
+첫 번째 싱글은 〈꽃들은 지고〉였다. 리메이크 앨범 때와 마찬가지고 방송 활동이 없었음에도 공중파 가요프로그램 및 각종 챠트에서 1위,2위를 다퉜다.
+
+위 두 일을 끝으로 이수영과의 일은 마무리 되는 듯 했으나 그 해 [[10월]] 이가스폐셜앨범 사건으로
+다시금 안좋은 모습을 보여줬다.
+
+[[2005년]] [[4월]]까지 휴식을 취한 이수영은 [[4월 22일]] [[리쿠드 엔터테인먼트]]와 3년간 정규 앨범 3장, 비정규 앨범 2장 발매의 조건으로 계약을 체결한다. 이수영의 새 소속사 후보로는 [[신나라 레코드]]와 리쿠드 엔터테인먼트가 물망에 떠올랐는데 이수영은 신생기획사인 리쿠드 엔터테인먼트를 택했다. 리쿠드 엔터테인먼트는 사실 신생기획사는 아니지만 매니지먼트 분야에서는 매우 초보적인 단계였다. 리쿠드 엔터테인먼트는 직원 전원이 [[개신교]] 신자로서 그 점이 그 곳을 선택하는데 영향을 미쳤다고 후에 밝혔다.
+
+계약 체결 후 미국으로 떠났는데 그곳에서 한인 축제 행사 등에 참여한 뒤 이수영은 보컬 트레이닝에 임했다. 미국 보컬 트레이너는 이수영에게 "당신은 흑인 아니라서 절대 흑인의 목소리를 낼 수 없다"며 창법이나 음색을 바꾸려 하지 말고 더욱 발전 시킬것을 조언했다.
+[[image:Sooyoungincamp.jpg|thumb|350px|팬미팅 캠프에서 노래를 부르고 있는 이수영]]
+한 달여 간의 트레이닝을 마친 이수영은 국내로 귀국하여 팬들과 만남을 계획하여 [[2005년]] [[7월 30일]], [[경기도]] [[안성시]]에서 이수영은 데뷔 후 처음으로 팬들과 팬미팅 겸 [[캠프]] 행사를 가졌다. 이 날 이수영은 팬들에게 하고 싶었던 이야기를 토해내며 마지막으로 이가 엔터테인먼트에서 추가로 발매할 세 장의 앨범에 대해 언급하며 그것은 자신의 앨범이 아니며 꼭 7집만을 사랑해 달라며 부탁했다.
+
+10월에 발매예정이어었던 7집이 이듬 해로 연기되면서 이수영은 또 다시 약 6개월간의 공백기를 가지게 되었다. 그 기간 동안 7집의 부족한 부분을 보완함과 동시에 충분한 휴식을 취하며 시간을 보냈다.
+
+=== 7집 발매 연기 ===
+전 소속사였던 [[팬텀]]은 언론에 공시를 통해 추가로 3장의 이수영 앨범을 발매하며 이는 법적으로 문제가 없다고 하였다. 하지만 전소속사 팬텀과 이수영 사이에 이미 존재했었던 계약이었는지 어떤 모종의 새로운 계약이 있었는지는 밝혀진 바가 없다.
+
+얼마 후 [[9월 30일]]을 기해 7집 앨범의 인터넷 예약 판매가 시작되었고 그와 동시에 온갖 추측이 난무했던
+팬텀의 첫 번째 앨범 (일명 이가스폐셜앨범)도 동시에 예약 판매를 시작했다. 아이러니하게도 7집은 발매일이 [[10월 21일]]있고 이가스폐셜앨범은 [[10월 20일]]이어서 7집 음반판매에 같이 묻어가려 한다는 속셈이 적나라하게 노출되었다. 이로 인해 팬텀에 대한 비난이 쏟아졌다. 이수영 측은 7집 발매를 11월로 연기하였다가 내년에 발매하는 것으로 결정내렸고 이로 인해 7집은 [[2006년]] [[1월 21일]] 발매되었다.
+
+팬텀이 발매한 이가스폐셜앨범은 기존 곡들과 일본 싱글제작당시 녹음한 미공개곡 두 곡과 기존에 공개했던 일본어곡 한 곡을 포함한 베스트앨범이었다. 시장에서의 반응은 최악이었고 이수영의 열렬한 팬들조차 등을 돌린 앨범은 역대 최저 판매량을 기록하였다. 그러나 그 판매량은 다른 신인,기존 가수들의 판매량을 우습게 뛰어 넘는 것이어서 이수영의 네임벨류가 얼마나 강한지를 실감케 했다.
+
+==== 동요 스트리밍 사건 ====
+빠빠라빠 스트리밍 사건은 2006년 1월 7집 앨범 발매를 앞두고 발생한 사건이다.
+
+어느 날 일부 스트리밍 사이트에 이수영이 2001년 촬영했던 어린이 동요 테이프인 《빠빠라빠》,《WOW Go Go English》의 음원이 추출되어 스트리밍 되었다. 우연히도 이것은 곧 두장의 앨범을 뜻하며 팬텀의 추가 앨범 발매가 아니냐는 의혹이 일었다. 이로 인해 세 장의 앨범 발매가 성립되니 그렇게 생각하는 것도 당연한 것이었다.
+팬텀에 대한 비난여론이 더욱 더 거세지자 팬텀은 보도자료를 통해 이 사건은 전적으로 동요 테이프 유통사였던
+[[문화미디콤]]의 책임이라며 맞대응하겠다는 의사를 표명했다. 또한 자신들은 이 사건과 아무런 관련이 없음을 해명했다.
+
+얼마 후 [[문화미디콤]]은 스트리밍 서비스를 중단하였다. 그리하여 빠빠라빠 스트리밍 사건은 끝을 맺었다.
+
+=== 7집 ===
+〈Grace〉는 앨범 발매 한 달만에 방송횟수 1000회를 돌파하는 기염을 토했으며 각종 음반쇼핑몰, 차트에서 수 많은 1위를 차지했다. 특히 MBC 라디오 프로그램 [[정오의 희망곡]]에서는 7주간 1위를 차지했으며 음악 스트리밍 사이트 [[벅스 뮤직]]에서는 8주간 1위라는 부동의 자리를 지켰다.
+
+〈Grace〉 활동 시 그녀는 이미지 변신을 꾀했다. 각종 예능 프로그램에 많이 출연을 한 것이다.
+이수영은 본인 스스로가 '웃긴 사람'이라고 칭할 만큼 유머감각이 뛰어난 사람이나 전 소속사인 [[팬텀]]의
+이미지관리로 인해 많은 모습을 숨기고 있었다. 이수영의 색다른 모습이 사람들의 의견이 분분했으나 이수영은 이미 [[2002년]] [[감성시대]] DJ를 하면서 그녀의 유머감각을 여지없이 선보인 적이 있다. 두 번째 싱글 활동에서는 예능 프로그램 출연을 자제하고 음악 프로그램 출연에 더 전념한다는 의사를 밝혔다.
+
+두 번째 싱글〈시린〉으로 활동중이던 이수영은 하반기 앨범 작업과 각종 국내외 공연 일정을 이유로 [[2006년]] [[4월 9일]]자로 7집의 공식적인 활동을 마감했다.
+
+=== 소속사와의 불화 ===
+[[2006년]] [[7월]] 말, 소속사인 리쿠드엔터테인먼트는 항간에 떠도는 이수영의 소속사간의 불화설은 사실무근이라는 보도자료를 언론사에 내보냈다. 그러나 이 루머에 대해서는 일반 대중이 알고 있던 사실이 아니였기에 루머 관련 기사 이전의 '사실무근기사'는 뭔가 앞뒤가 맞지 않는 상황이었다.
+
+[[7월 31일]] 이수영측은 언론사와의 인터뷰를 통해 소속사간의 불화사실을 공식발표했다. 소속사 리쿠드엔터테인먼트는 미숙한 업무처리로 인해 이수영에게 계약금을 지급하지 않았으며, 계약금 지급을 요구한 이수영의 요구에 이수영의 매니저팀을 전원해고하는 등의 조치를 취했다고 한다.
+
+또한 [[2005년]] 하반기의 전국투어 콘서트일정을 이수영의 동의없이 일방적으로 체결하는 등 여러면에서 불성실한 계약이행을 해왔다는 것이다.
+
+현재 이수영은 소속사를 상대로 소송을 한 상태로 재판을 앞두고 있는 상태다. 리쿠드 엔터테인먼트 또한 이수영을 맞고소하였다. 이수영은 7집 《[[Grace]]》의 음원권리를 넘긴다면 고소를 취하하겠다는 의사를 밝혔다.
+
+== 음악 스타일 ==
+싱글로 활동한 곡들은 대부분 발라드이다. 그러나 〈그리고 사랑해〉,〈덩그러니〉의 경우는 발라드라기 보다는 [[록]] 음악에 가깝다. 앨범에 수록된 곡들을 살펴보면 정통발라드,[[보사노바]],[[재즈]],[[포크 록]],[[펑키]],[[디스코]] 등 여러 장르가 수록 되어있으나 대부분이 서정적이고 애절한 분위기의 발라드곡이다.
+
+=== 이수영이 지향하는 음악 스타일 ===
+이수영은 [[흑인 음악]]의 열렬한 팬이다. 따라서 그녀가 지향하는 음악 스타일은 듣기 편하고 부담없는 소위 '[[이지 리스닝]]' 음악이다. 정규 7집 《Grace》 발매 후 언론과 가진 인터뷰에서 그녀는 미래의 이수영은 보컬에 더 힘을 뺄 것이라 밝혔다.
+
+== 그녀에 대한 생각 ==
+가수 그리고 연예인으로서 그녀가 지니고 있는 여러가지 요소들은 화려하거나 요란하지 않다. 그리고, 대중의 주목을 끌어낼 특별한 요소도 재주도 없다.
+그러나, 주목받는 인기가수가 되면서부터 현재의 스타시스템에서 그녀가 가지는 인지도에 대한 언급이 있었다. 어떤 사람들은 어려운 어휘와 문장을 사용하여 분석적으로 기술한다. 또 어떤 사람들은 그 인기에 대해 그럴듯한 해석을 하기 어려워 "미스테리"라고도 한다
+
+=== 장점인 동시에 단점인 평범 ===
+목소리는 일반적인데도 사람들은 각별하게 여긴다. 사실 그녀보다 두드러지는 목소리를 가진 가수는 많다.
+이미지는 부담없고 정감있는 무난한 외모에 편안하다. 연예인으로 튀지 않지만 손색없다.
+노래는 특별히 좋아하지 않아도 계속 듣고 부르게 되는 선율이 있다. 쉽지 않은 노래지만 많은 사람들이 선호하게 될 정도로 귀에 잘 들어온다.
+가사는 그 자체도 좋지만 표현력과 전달력이 뛰어나 마음에 닿는다. 여느 가수처럼 기교나 성량이 두드러지면 가사집을 보아야 무슨 말인지 알아 듣는 경우가 있다.
+음반은 흔히들 말하는 타이틀곡, 후속곡 등 일부 밀어주는 노래에 치우치지 않는다. 일반 사람들이 잘 모르는 좋은 수록곡이 많다.
+가수가 좋아서 노래를 좋아하게 되는 것보다 노래를 들었는데 좋아서 가수를 좋아하게 된다. 따라서, 흔히 언급되는 열성팬수는 많지 않다.
+
+== 수상 경력 ==
+* [[1995년]] MBC 라디오 '[[별이 빛나는 밤에]]' 장기자랑 장원
+* [[2002년]] 골든디스크 본상
+* [[2002년]] SBS 가요대전 본상
+* [[2002년]] KBS 가요대상 본상
+* [[2002년]] MBC [[10대 가수가요제]] 본상
+* [[2003년]] 골든디스크 본상
+* [[2003년]] SBS 가요대전 본상
+* [[2003년]] KBS 가요대상 본상
+* [[2003년]] MBC 10대가수가요제 최고인기가수상
+* [[2004년]] 서울 가요 대상
+* [[2004년]] [[골든디스크]] 본상 및 대상
+* [[2004년]] SBS 가요대전 본상
+* [[2004년]] KBS 가요대상 본상.
+* [[2004년]] MBC 10대 가수가요제 최고인기가수상
+
+== 발매 앨범 ==
+* '''정규 앨범'''
+** [[1999년]] 1집 《[[I Believe]]》
+** [[2001년]] 2집 《[[Never again]]》
+** [[2001년]] 3집 《[[Made in winter]]》
+** [[2002년]] 4집 《[[My stay in Sendai]]》
+** [[2003년]] 5집 《[[This time]]》
+** [[2004년]] 일본 싱글 《[[사이고노 와가마마|最後の我がまま]]》
+** [[2004년]] 6집 《[[The colors of my life]]》
+** [[2006년]] 7집 《[[Grace]]》
+
+* '''비정규 앨범'''
+** [[2001년]] 라이브앨범 《[[그녀에게 감사해요]]》
+** [[2003년]] 4.5집 《[[Sweet holiday in Lombok]]》
+** [[2004년]] 5.5집 《[[Classic the remake]]》
+** [[2005년]] 6.5집 《[[As time goes by]]》
+** [[2005년]] 2005 스폐셜《[[An Autumn Day]]》
+
+*'''참여 앨범'''
+** [[2000년]] 《이정봉 4집》
+** [[2000년]] 《Dream Song》
+** [[2001년]] 《KOREAN DANCE TOP 30》
+** [[2001년]] 《이영애의 애수》
+** [[2001년]] 《드라마 명성황후 OST》
+** [[2001년]] 《첫사랑》
+** [[2002년]] 《Baek ji Young Best & Live New Release》
+** [[2002년]] 《성룡 夢想的天材》
+** [[2002년]] 《영화 묻지마 패밀리 OST》
+** [[2002년]] 《Final Fantasy X International OST》
+** [[2002년]] 《The Winter》
+** [[2003년]] 《IVY MEGAMIX》
+** [[2003년]] 《ONE SHOT 가요리믹스 VOL.2》
+** [[2003년]] 《장나라와 친구들》
+** [[2003년]] 《드라마 장희빈 OST》
+** [[2004년]] 《LEEJEEHOON 5》
+** [[2004년]] Simply Sunday 싱글 《사랑해요》
+** [[2004년]] 《new Kpop compilation》
+** [[2004년]] 《2004* Christmas carol Ballad & Trot & Hiphop & Jazz》
+** [[2005년]] 《이 죽일놈의 사랑 OST》
+** [[2005년]] 《DJ 처리의 Chirstmas 쏭쏭쏭》
+** [[2005년]] 《The wave Christmas Caroling》
+** [[2005년]] 《The Wave Blessing & Caroling》
+
+== 바깥 고리 ==
+* [http://www.leesooyoung.com/ 공식 홈페이지]
+* [http://cafe.daum.net/suyounglove/ 다음 카페 이수영을 사랑하는 사람들]
+* [http://www.sooyoung.pe.kr/ 이수영 매니아 영상클럽]
+* [http://cafe.daum.net/fanclubgrace/ 팬클럽 그레이스 공식 카페]
+
+[[분류:1979년 태어남]]
+[[분류:대한민국의 가수]]
+[[분류:발라드]]
+[[분류:골든디스크 대상 수상 음악가]]
+[[분류:MBC 10대 가수가요제 최우수인기상 수상 음악가]]
+
+[[en:Lee Soo Young]]
+[[ja:イ・スヨン]] \ No newline at end of file
diff --git a/vendor/wikimedia/utfnormal/src/Constants.php b/vendor/wikimedia/utfnormal/src/Constants.php
new file mode 100644
index 00000000..02878a0e
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/src/Constants.php
@@ -0,0 +1,103 @@
+<?php
+namespace UtfNormal;
+
+/**
+ * Some constant definitions for the unicode normalization module.
+ *
+ * Note: these constants must all be resolvable at compile time by HipHop,
+ * since this file will not be executed during request startup for a compiled
+ * 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
+ * @ingroup UtfNormal
+ */
+
+class Constants {
+ const UNICODE_HANGUL_FIRST = 0xac00;
+ const UNICODE_HANGUL_LAST = 0xd7a3;
+
+ const UNICODE_HANGUL_LBASE = 0x1100;
+ const UNICODE_HANGUL_VBASE = 0x1161;
+ const UNICODE_HANGUL_TBASE = 0x11a7;
+
+ const UNICODE_HANGUL_LCOUNT = 19;
+ const UNICODE_HANGUL_VCOUNT = 21;
+ const UNICODE_HANGUL_TCOUNT = 28;
+ # UNICODE_HANGUL_VCOUNT * UNICODE_HANGUL_TCOUNT
+ const UNICODE_HANGUL_NCOUNT = 588;
+
+ # UNICODE_HANGUL_LBASE + UNICODE_HANGUL_LCOUNT - 1
+ const UNICODE_HANGUL_LEND = 4370;
+ # UNICODE_HANGUL_VBASE + UNICODE_HANGUL_VCOUNT - 1
+ const UNICODE_HANGUL_VEND = 4469;
+ # UNICODE_HANGUL_TBASE + UNICODE_HANGUL_TCOUNT - 1
+ const UNICODE_HANGUL_TEND = 4546;
+
+ const UNICODE_SURROGATE_FIRST = 0xd800;
+ const UNICODE_SURROGATE_LAST = 0xdfff;
+ const UNICODE_MAX = 0x10ffff;
+ const UNICODE_REPLACEMENT = 0xfffd;
+
+ # codepointToUtf8( UNICODE_HANGUL_FIRST )
+ const UTF8_HANGUL_FIRST = "\xea\xb0\x80";
+ # codepointToUtf8( UNICODE_HANGUL_LAST )
+ const UTF8_HANGUL_LAST = "\xed\x9e\xa3";
+
+ # codepointToUtf8( UNICODE_HANGUL_LBASE )
+ const UTF8_HANGUL_LBASE = "\xe1\x84\x80";
+ # codepointToUtf8( UNICODE_HANGUL_VBASE )
+ const UTF8_HANGUL_VBASE = "\xe1\x85\xa1";
+ # codepointToUtf8( UNICODE_HANGUL_TBASE )
+ const UTF8_HANGUL_TBASE = "\xe1\x86\xa7";
+
+ # codepointToUtf8( UNICODE_HANGUL_LEND )
+ const UTF8_HANGUL_LEND = "\xe1\x84\x92";
+ # codepointToUtf8( UNICODE_HANGUL_VEND )
+ const UTF8_HANGUL_VEND = "\xe1\x85\xb5";
+ # codepointToUtf8( UNICODE_HANGUL_TEND )
+ const UTF8_HANGUL_TEND = "\xe1\x87\x82";
+
+ # codepointToUtf8( UNICODE_SURROGATE_FIRST )
+ const UTF8_SURROGATE_FIRST = "\xed\xa0\x80";
+ # codepointToUtf8( UNICODE_SURROGATE_LAST )
+ const UTF8_SURROGATE_LAST = "\xed\xbf\xbf";
+ # codepointToUtf8( UNICODE_MAX )
+ const UTF8_MAX = "\xf4\x8f\xbf\xbf";
+ # codepointToUtf8( UNICODE_REPLACEMENT )
+ const UTF8_REPLACEMENT = "\xef\xbf\xbd";
+ #const UTF8_REPLACEMENT = '!';
+
+ const UTF8_OVERLONG_A = "\xc1\xbf";
+ const UTF8_OVERLONG_B = "\xe0\x9f\xbf";
+ const UTF8_OVERLONG_C = "\xf0\x8f\xbf\xbf";
+
+ # These two ranges are illegal
+ # codepointToUtf8( 0xfdd0 )
+ const UTF8_FDD0 = "\xef\xb7\x90";
+ # codepointToUtf8( 0xfdef )
+ const UTF8_FDEF = "\xef\xb7\xaf";
+ # codepointToUtf8( 0xfffe )
+ const UTF8_FFFE = "\xef\xbf\xbe";
+ # codepointToUtf8( 0xffff )
+ const UTF8_FFFF = "\xef\xbf\xbf";
+
+ const UTF8_HEAD = false;
+ const UTF8_TAIL = true;
+
+}
+
diff --git a/vendor/wikimedia/utfnormal/src/UtfNormalData.inc b/vendor/wikimedia/utfnormal/src/UtfNormalData.inc
new file mode 100644
index 00000000..fae0964a
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/src/UtfNormalData.inc
@@ -0,0 +1,14 @@
+<?php
+/**
+ * This file was automatically generated -- do not edit!
+ * Run UtfNormalGenerate.php to create this file again (make clean && make)
+ *
+ * @file
+ */
+// @codingStandardsIgnoreFile
+
+UtfNormal\Validator::$utfCombiningClass = unserialize( 'a:606:{s:2:"̀";i:230;s:2:"́";i:230;s:2:"̂";i:230;s:2:"̃";i:230;s:2:"̄";i:230;s:2:"̅";i:230;s:2:"̆";i:230;s:2:"̇";i:230;s:2:"̈";i:230;s:2:"̉";i:230;s:2:"̊";i:230;s:2:"̋";i:230;s:2:"̌";i:230;s:2:"̍";i:230;s:2:"̎";i:230;s:2:"̏";i:230;s:2:"̐";i:230;s:2:"̑";i:230;s:2:"̒";i:230;s:2:"̓";i:230;s:2:"̔";i:230;s:2:"̕";i:232;s:2:"̖";i:220;s:2:"̗";i:220;s:2:"̘";i:220;s:2:"̙";i:220;s:2:"̚";i:232;s:2:"̛";i:216;s:2:"̜";i:220;s:2:"̝";i:220;s:2:"̞";i:220;s:2:"̟";i:220;s:2:"̠";i:220;s:2:"̡";i:202;s:2:"̢";i:202;s:2:"̣";i:220;s:2:"̤";i:220;s:2:"̥";i:220;s:2:"̦";i:220;s:2:"̧";i:202;s:2:"̨";i:202;s:2:"̩";i:220;s:2:"̪";i:220;s:2:"̫";i:220;s:2:"̬";i:220;s:2:"̭";i:220;s:2:"̮";i:220;s:2:"̯";i:220;s:2:"̰";i:220;s:2:"̱";i:220;s:2:"̲";i:220;s:2:"̳";i:220;s:2:"̴";i:1;s:2:"̵";i:1;s:2:"̶";i:1;s:2:"̷";i:1;s:2:"̸";i:1;s:2:"̹";i:220;s:2:"̺";i:220;s:2:"̻";i:220;s:2:"̼";i:220;s:2:"̽";i:230;s:2:"̾";i:230;s:2:"̿";i:230;s:2:"̀";i:230;s:2:"́";i:230;s:2:"͂";i:230;s:2:"̓";i:230;s:2:"̈́";i:230;s:2:"ͅ";i:240;s:2:"͆";i:230;s:2:"͇";i:220;s:2:"͈";i:220;s:2:"͉";i:220;s:2:"͊";i:230;s:2:"͋";i:230;s:2:"͌";i:230;s:2:"͍";i:220;s:2:"͎";i:220;s:2:"͐";i:230;s:2:"͑";i:230;s:2:"͒";i:230;s:2:"͓";i:220;s:2:"͔";i:220;s:2:"͕";i:220;s:2:"͖";i:220;s:2:"͗";i:230;s:2:"͘";i:232;s:2:"͙";i:220;s:2:"͚";i:220;s:2:"͛";i:230;s:2:"͜";i:233;s:2:"͝";i:234;s:2:"͞";i:234;s:2:"͟";i:233;s:2:"͠";i:234;s:2:"͡";i:234;s:2:"͢";i:233;s:2:"ͣ";i:230;s:2:"ͤ";i:230;s:2:"ͥ";i:230;s:2:"ͦ";i:230;s:2:"ͧ";i:230;s:2:"ͨ";i:230;s:2:"ͩ";i:230;s:2:"ͪ";i:230;s:2:"ͫ";i:230;s:2:"ͬ";i:230;s:2:"ͭ";i:230;s:2:"ͮ";i:230;s:2:"ͯ";i:230;s:2:"҃";i:230;s:2:"҄";i:230;s:2:"҅";i:230;s:2:"҆";i:230;s:2:"҇";i:230;s:2:"֑";i:220;s:2:"֒";i:230;s:2:"֓";i:230;s:2:"֔";i:230;s:2:"֕";i:230;s:2:"֖";i:220;s:2:"֗";i:230;s:2:"֘";i:230;s:2:"֙";i:230;s:2:"֚";i:222;s:2:"֛";i:220;s:2:"֜";i:230;s:2:"֝";i:230;s:2:"֞";i:230;s:2:"֟";i:230;s:2:"֠";i:230;s:2:"֡";i:230;s:2:"֢";i:220;s:2:"֣";i:220;s:2:"֤";i:220;s:2:"֥";i:220;s:2:"֦";i:220;s:2:"֧";i:220;s:2:"֨";i:230;s:2:"֩";i:230;s:2:"֪";i:220;s:2:"֫";i:230;s:2:"֬";i:230;s:2:"֭";i:222;s:2:"֮";i:228;s:2:"֯";i:230;s:2:"ְ";i:10;s:2:"ֱ";i:11;s:2:"ֲ";i:12;s:2:"ֳ";i:13;s:2:"ִ";i:14;s:2:"ֵ";i:15;s:2:"ֶ";i:16;s:2:"ַ";i:17;s:2:"ָ";i:18;s:2:"ֹ";i:19;s:2:"ֺ";i:19;s:2:"ֻ";i:20;s:2:"ּ";i:21;s:2:"ֽ";i:22;s:2:"ֿ";i:23;s:2:"ׁ";i:24;s:2:"ׂ";i:25;s:2:"ׄ";i:230;s:2:"ׅ";i:220;s:2:"ׇ";i:18;s:2:"ؐ";i:230;s:2:"ؑ";i:230;s:2:"ؒ";i:230;s:2:"ؓ";i:230;s:2:"ؔ";i:230;s:2:"ؕ";i:230;s:2:"ؖ";i:230;s:2:"ؗ";i:230;s:2:"ؘ";i:30;s:2:"ؙ";i:31;s:2:"ؚ";i:32;s:2:"ً";i:27;s:2:"ٌ";i:28;s:2:"ٍ";i:29;s:2:"َ";i:30;s:2:"ُ";i:31;s:2:"ِ";i:32;s:2:"ّ";i:33;s:2:"ْ";i:34;s:2:"ٓ";i:230;s:2:"ٔ";i:230;s:2:"ٕ";i:220;s:2:"ٖ";i:220;s:2:"ٗ";i:230;s:2:"٘";i:230;s:2:"ٙ";i:230;s:2:"ٚ";i:230;s:2:"ٛ";i:230;s:2:"ٜ";i:220;s:2:"ٝ";i:230;s:2:"ٞ";i:230;s:2:"ٟ";i:220;s:2:"ٰ";i:35;s:2:"ۖ";i:230;s:2:"ۗ";i:230;s:2:"ۘ";i:230;s:2:"ۙ";i:230;s:2:"ۚ";i:230;s:2:"ۛ";i:230;s:2:"ۜ";i:230;s:2:"۟";i:230;s:2:"۠";i:230;s:2:"ۡ";i:230;s:2:"ۢ";i:230;s:2:"ۣ";i:220;s:2:"ۤ";i:230;s:2:"ۧ";i:230;s:2:"ۨ";i:230;s:2:"۪";i:220;s:2:"۫";i:230;s:2:"۬";i:230;s:2:"ۭ";i:220;s:2:"ܑ";i:36;s:2:"ܰ";i:230;s:2:"ܱ";i:220;s:2:"ܲ";i:230;s:2:"ܳ";i:230;s:2:"ܴ";i:220;s:2:"ܵ";i:230;s:2:"ܶ";i:230;s:2:"ܷ";i:220;s:2:"ܸ";i:220;s:2:"ܹ";i:220;s:2:"ܺ";i:230;s:2:"ܻ";i:220;s:2:"ܼ";i:220;s:2:"ܽ";i:230;s:2:"ܾ";i:220;s:2:"ܿ";i:230;s:2:"݀";i:230;s:2:"݁";i:230;s:2:"݂";i:220;s:2:"݃";i:230;s:2:"݄";i:220;s:2:"݅";i:230;s:2:"݆";i:220;s:2:"݇";i:230;s:2:"݈";i:220;s:2:"݉";i:230;s:2:"݊";i:230;s:2:"߫";i:230;s:2:"߬";i:230;s:2:"߭";i:230;s:2:"߮";i:230;s:2:"߯";i:230;s:2:"߰";i:230;s:2:"߱";i:230;s:2:"߲";i:220;s:2:"߳";i:230;s:3:"ࠖ";i:230;s:3:"ࠗ";i:230;s:3:"࠘";i:230;s:3:"࠙";i:230;s:3:"ࠛ";i:230;s:3:"ࠜ";i:230;s:3:"ࠝ";i:230;s:3:"ࠞ";i:230;s:3:"ࠟ";i:230;s:3:"ࠠ";i:230;s:3:"ࠡ";i:230;s:3:"ࠢ";i:230;s:3:"ࠣ";i:230;s:3:"ࠥ";i:230;s:3:"ࠦ";i:230;s:3:"ࠧ";i:230;s:3:"ࠩ";i:230;s:3:"ࠪ";i:230;s:3:"ࠫ";i:230;s:3:"ࠬ";i:230;s:3:"࠭";i:230;s:3:"࡙";i:220;s:3:"࡚";i:220;s:3:"࡛";i:220;s:3:"़";i:7;s:3:"्";i:9;s:3:"॑";i:230;s:3:"॒";i:220;s:3:"॓";i:230;s:3:"॔";i:230;s:3:"়";i:7;s:3:"্";i:9;s:3:"਼";i:7;s:3:"੍";i:9;s:3:"઼";i:7;s:3:"્";i:9;s:3:"଼";i:7;s:3:"୍";i:9;s:3:"்";i:9;s:3:"్";i:9;s:3:"ౕ";i:84;s:3:"ౖ";i:91;s:3:"಼";i:7;s:3:"್";i:9;s:3:"്";i:9;s:3:"්";i:9;s:3:"ุ";i:103;s:3:"ู";i:103;s:3:"ฺ";i:9;s:3:"่";i:107;s:3:"้";i:107;s:3:"๊";i:107;s:3:"๋";i:107;s:3:"ຸ";i:118;s:3:"ູ";i:118;s:3:"່";i:122;s:3:"້";i:122;s:3:"໊";i:122;s:3:"໋";i:122;s:3:"༘";i:220;s:3:"༙";i:220;s:3:"༵";i:220;s:3:"༷";i:220;s:3:"༹";i:216;s:3:"ཱ";i:129;s:3:"ི";i:130;s:3:"ུ";i:132;s:3:"ེ";i:130;s:3:"ཻ";i:130;s:3:"ོ";i:130;s:3:"ཽ";i:130;s:3:"ྀ";i:130;s:3:"ྂ";i:230;s:3:"ྃ";i:230;s:3:"྄";i:9;s:3:"྆";i:230;s:3:"྇";i:230;s:3:"࿆";i:220;s:3:"့";i:7;s:3:"္";i:9;s:3:"်";i:9;s:3:"ႍ";i:220;s:3:"፝";i:230;s:3:"፞";i:230;s:3:"፟";i:230;s:3:"᜔";i:9;s:3:"᜴";i:9;s:3:"្";i:9;s:3:"៝";i:230;s:3:"ᢩ";i:228;s:3:"᤹";i:222;s:3:"᤺";i:230;s:3:"᤻";i:220;s:3:"ᨗ";i:230;s:3:"ᨘ";i:220;s:3:"᩠";i:9;s:3:"᩵";i:230;s:3:"᩶";i:230;s:3:"᩷";i:230;s:3:"᩸";i:230;s:3:"᩹";i:230;s:3:"᩺";i:230;s:3:"᩻";i:230;s:3:"᩼";i:230;s:3:"᩿";i:220;s:3:"᬴";i:7;s:3:"᭄";i:9;s:3:"᭫";i:230;s:3:"᭬";i:220;s:3:"᭭";i:230;s:3:"᭮";i:230;s:3:"᭯";i:230;s:3:"᭰";i:230;s:3:"᭱";i:230;s:3:"᭲";i:230;s:3:"᭳";i:230;s:3:"᮪";i:9;s:3:"᯦";i:7;s:3:"᯲";i:9;s:3:"᯳";i:9;s:3:"᰷";i:7;s:3:"᳐";i:230;s:3:"᳑";i:230;s:3:"᳒";i:230;s:3:"᳔";i:1;s:3:"᳕";i:220;s:3:"᳖";i:220;s:3:"᳗";i:220;s:3:"᳘";i:220;s:3:"᳙";i:220;s:3:"᳚";i:230;s:3:"᳛";i:230;s:3:"᳜";i:220;s:3:"᳝";i:220;s:3:"᳞";i:220;s:3:"᳟";i:220;s:3:"᳠";i:230;s:3:"᳢";i:1;s:3:"᳣";i:1;s:3:"᳤";i:1;s:3:"᳥";i:1;s:3:"᳦";i:1;s:3:"᳧";i:1;s:3:"᳨";i:1;s:3:"᳭";i:220;s:3:"᷀";i:230;s:3:"᷁";i:230;s:3:"᷂";i:220;s:3:"᷃";i:230;s:3:"᷄";i:230;s:3:"᷅";i:230;s:3:"᷆";i:230;s:3:"᷇";i:230;s:3:"᷈";i:230;s:3:"᷉";i:230;s:3:"᷊";i:220;s:3:"᷋";i:230;s:3:"᷌";i:230;s:3:"᷍";i:234;s:3:"᷎";i:214;s:3:"᷏";i:220;s:3:"᷐";i:202;s:3:"᷑";i:230;s:3:"᷒";i:230;s:3:"ᷓ";i:230;s:3:"ᷔ";i:230;s:3:"ᷕ";i:230;s:3:"ᷖ";i:230;s:3:"ᷗ";i:230;s:3:"ᷘ";i:230;s:3:"ᷙ";i:230;s:3:"ᷚ";i:230;s:3:"ᷛ";i:230;s:3:"ᷜ";i:230;s:3:"ᷝ";i:230;s:3:"ᷞ";i:230;s:3:"ᷟ";i:230;s:3:"ᷠ";i:230;s:3:"ᷡ";i:230;s:3:"ᷢ";i:230;s:3:"ᷣ";i:230;s:3:"ᷤ";i:230;s:3:"ᷥ";i:230;s:3:"ᷦ";i:230;s:3:"᷼";i:233;s:3:"᷽";i:220;s:3:"᷾";i:230;s:3:"᷿";i:220;s:3:"⃐";i:230;s:3:"⃑";i:230;s:3:"⃒";i:1;s:3:"⃓";i:1;s:3:"⃔";i:230;s:3:"⃕";i:230;s:3:"⃖";i:230;s:3:"⃗";i:230;s:3:"⃘";i:1;s:3:"⃙";i:1;s:3:"⃚";i:1;s:3:"⃛";i:230;s:3:"⃜";i:230;s:3:"⃡";i:230;s:3:"⃥";i:1;s:3:"⃦";i:1;s:3:"⃧";i:230;s:3:"⃨";i:220;s:3:"⃩";i:230;s:3:"⃪";i:1;s:3:"⃫";i:1;s:3:"⃬";i:220;s:3:"⃭";i:220;s:3:"⃮";i:220;s:3:"⃯";i:220;s:3:"⃰";i:230;s:3:"⳯";i:230;s:3:"⳰";i:230;s:3:"⳱";i:230;s:3:"⵿";i:9;s:3:"ⷠ";i:230;s:3:"ⷡ";i:230;s:3:"ⷢ";i:230;s:3:"ⷣ";i:230;s:3:"ⷤ";i:230;s:3:"ⷥ";i:230;s:3:"ⷦ";i:230;s:3:"ⷧ";i:230;s:3:"ⷨ";i:230;s:3:"ⷩ";i:230;s:3:"ⷪ";i:230;s:3:"ⷫ";i:230;s:3:"ⷬ";i:230;s:3:"ⷭ";i:230;s:3:"ⷮ";i:230;s:3:"ⷯ";i:230;s:3:"ⷰ";i:230;s:3:"ⷱ";i:230;s:3:"ⷲ";i:230;s:3:"ⷳ";i:230;s:3:"ⷴ";i:230;s:3:"ⷵ";i:230;s:3:"ⷶ";i:230;s:3:"ⷷ";i:230;s:3:"ⷸ";i:230;s:3:"ⷹ";i:230;s:3:"ⷺ";i:230;s:3:"ⷻ";i:230;s:3:"ⷼ";i:230;s:3:"ⷽ";i:230;s:3:"ⷾ";i:230;s:3:"ⷿ";i:230;s:3:"〪";i:218;s:3:"〫";i:228;s:3:"〬";i:232;s:3:"〭";i:222;s:3:"〮";i:224;s:3:"〯";i:224;s:3:"゙";i:8;s:3:"゚";i:8;s:3:"꙯";i:230;s:3:"꙼";i:230;s:3:"꙽";i:230;s:3:"꛰";i:230;s:3:"꛱";i:230;s:3:"꠆";i:9;s:3:"꣄";i:9;s:3:"꣠";i:230;s:3:"꣡";i:230;s:3:"꣢";i:230;s:3:"꣣";i:230;s:3:"꣤";i:230;s:3:"꣥";i:230;s:3:"꣦";i:230;s:3:"꣧";i:230;s:3:"꣨";i:230;s:3:"꣩";i:230;s:3:"꣪";i:230;s:3:"꣫";i:230;s:3:"꣬";i:230;s:3:"꣭";i:230;s:3:"꣮";i:230;s:3:"꣯";i:230;s:3:"꣰";i:230;s:3:"꣱";i:230;s:3:"꤫";i:220;s:3:"꤬";i:220;s:3:"꤭";i:220;s:3:"꥓";i:9;s:3:"꦳";i:7;s:3:"꧀";i:9;s:3:"ꪰ";i:230;s:3:"ꪲ";i:230;s:3:"ꪳ";i:230;s:3:"ꪴ";i:220;s:3:"ꪷ";i:230;s:3:"ꪸ";i:230;s:3:"ꪾ";i:230;s:3:"꪿";i:230;s:3:"꫁";i:230;s:3:"꯭";i:9;s:3:"ﬞ";i:26;s:3:"︠";i:230;s:3:"︡";i:230;s:3:"︢";i:230;s:3:"︣";i:230;s:3:"︤";i:230;s:3:"︥";i:230;s:3:"︦";i:230;s:4:"𐇽";i:220;s:4:"𐨍";i:220;s:4:"𐨏";i:230;s:4:"𐨸";i:230;s:4:"𐨹";i:1;s:4:"𐨺";i:220;s:4:"𐨿";i:9;s:4:"𑁆";i:9;s:4:"𑂹";i:9;s:4:"𑂺";i:7;s:4:"𝅥";i:216;s:4:"𝅦";i:216;s:4:"𝅧";i:1;s:4:"𝅨";i:1;s:4:"𝅩";i:1;s:4:"𝅭";i:226;s:4:"𝅮";i:216;s:4:"𝅯";i:216;s:4:"𝅰";i:216;s:4:"𝅱";i:216;s:4:"𝅲";i:216;s:4:"𝅻";i:220;s:4:"𝅼";i:220;s:4:"𝅽";i:220;s:4:"𝅾";i:220;s:4:"𝅿";i:220;s:4:"𝆀";i:220;s:4:"𝆁";i:220;s:4:"𝆂";i:220;s:4:"𝆅";i:230;s:4:"𝆆";i:230;s:4:"𝆇";i:230;s:4:"𝆈";i:230;s:4:"𝆉";i:230;s:4:"𝆊";i:220;s:4:"𝆋";i:220;s:4:"𝆪";i:230;s:4:"𝆫";i:230;s:4:"𝆬";i:230;s:4:"𝆭";i:230;s:4:"𝉂";i:230;s:4:"𝉃";i:230;s:4:"𝉄";i:230;}' );
+UtfNormal\Validator::$utfCanonicalComp = unserialize( 'a:1868:{s:3:"À";s:2:"À";s:3:"Á";s:2:"Á";s:3:"Â";s:2:"Â";s:3:"Ã";s:2:"Ã";s:3:"Ä";s:2:"Ä";s:3:"Å";s:2:"Å";s:3:"Ç";s:2:"Ç";s:3:"È";s:2:"È";s:3:"É";s:2:"É";s:3:"Ê";s:2:"Ê";s:3:"Ë";s:2:"Ë";s:3:"Ì";s:2:"Ì";s:3:"Í";s:2:"Í";s:3:"Î";s:2:"Î";s:3:"Ï";s:2:"Ï";s:3:"Ñ";s:2:"Ñ";s:3:"Ò";s:2:"Ò";s:3:"Ó";s:2:"Ó";s:3:"Ô";s:2:"Ô";s:3:"Õ";s:2:"Õ";s:3:"Ö";s:2:"Ö";s:3:"Ù";s:2:"Ù";s:3:"Ú";s:2:"Ú";s:3:"Û";s:2:"Û";s:3:"Ü";s:2:"Ü";s:3:"Ý";s:2:"Ý";s:3:"à";s:2:"à";s:3:"á";s:2:"á";s:3:"â";s:2:"â";s:3:"ã";s:2:"ã";s:3:"ä";s:2:"ä";s:3:"å";s:2:"å";s:3:"ç";s:2:"ç";s:3:"è";s:2:"è";s:3:"é";s:2:"é";s:3:"ê";s:2:"ê";s:3:"ë";s:2:"ë";s:3:"ì";s:2:"ì";s:3:"í";s:2:"í";s:3:"î";s:2:"î";s:3:"ï";s:2:"ï";s:3:"ñ";s:2:"ñ";s:3:"ò";s:2:"ò";s:3:"ó";s:2:"ó";s:3:"ô";s:2:"ô";s:3:"õ";s:2:"õ";s:3:"ö";s:2:"ö";s:3:"ù";s:2:"ù";s:3:"ú";s:2:"ú";s:3:"û";s:2:"û";s:3:"ü";s:2:"ü";s:3:"ý";s:2:"ý";s:3:"ÿ";s:2:"ÿ";s:3:"Ā";s:2:"Ā";s:3:"ā";s:2:"ā";s:3:"Ă";s:2:"Ă";s:3:"ă";s:2:"ă";s:3:"Ą";s:2:"Ą";s:3:"ą";s:2:"ą";s:3:"Ć";s:2:"Ć";s:3:"ć";s:2:"ć";s:3:"Ĉ";s:2:"Ĉ";s:3:"ĉ";s:2:"ĉ";s:3:"Ċ";s:2:"Ċ";s:3:"ċ";s:2:"ċ";s:3:"Č";s:2:"Č";s:3:"č";s:2:"č";s:3:"Ď";s:2:"Ď";s:3:"ď";s:2:"ď";s:3:"Ē";s:2:"Ē";s:3:"ē";s:2:"ē";s:3:"Ĕ";s:2:"Ĕ";s:3:"ĕ";s:2:"ĕ";s:3:"Ė";s:2:"Ė";s:3:"ė";s:2:"ė";s:3:"Ę";s:2:"Ę";s:3:"ę";s:2:"ę";s:3:"Ě";s:2:"Ě";s:3:"ě";s:2:"ě";s:3:"Ĝ";s:2:"Ĝ";s:3:"ĝ";s:2:"ĝ";s:3:"Ğ";s:2:"Ğ";s:3:"ğ";s:2:"ğ";s:3:"Ġ";s:2:"Ġ";s:3:"ġ";s:2:"ġ";s:3:"Ģ";s:2:"Ģ";s:3:"ģ";s:2:"ģ";s:3:"Ĥ";s:2:"Ĥ";s:3:"ĥ";s:2:"ĥ";s:3:"Ĩ";s:2:"Ĩ";s:3:"ĩ";s:2:"ĩ";s:3:"Ī";s:2:"Ī";s:3:"ī";s:2:"ī";s:3:"Ĭ";s:2:"Ĭ";s:3:"ĭ";s:2:"ĭ";s:3:"Į";s:2:"Į";s:3:"į";s:2:"į";s:3:"İ";s:2:"İ";s:3:"Ĵ";s:2:"Ĵ";s:3:"ĵ";s:2:"ĵ";s:3:"Ķ";s:2:"Ķ";s:3:"ķ";s:2:"ķ";s:3:"Ĺ";s:2:"Ĺ";s:3:"ĺ";s:2:"ĺ";s:3:"Ļ";s:2:"Ļ";s:3:"ļ";s:2:"ļ";s:3:"Ľ";s:2:"Ľ";s:3:"ľ";s:2:"ľ";s:3:"Ń";s:2:"Ń";s:3:"ń";s:2:"ń";s:3:"Ņ";s:2:"Ņ";s:3:"ņ";s:2:"ņ";s:3:"Ň";s:2:"Ň";s:3:"ň";s:2:"ň";s:3:"Ō";s:2:"Ō";s:3:"ō";s:2:"ō";s:3:"Ŏ";s:2:"Ŏ";s:3:"ŏ";s:2:"ŏ";s:3:"Ő";s:2:"Ő";s:3:"ő";s:2:"ő";s:3:"Ŕ";s:2:"Ŕ";s:3:"ŕ";s:2:"ŕ";s:3:"Ŗ";s:2:"Ŗ";s:3:"ŗ";s:2:"ŗ";s:3:"Ř";s:2:"Ř";s:3:"ř";s:2:"ř";s:3:"Ś";s:2:"Ś";s:3:"ś";s:2:"ś";s:3:"Ŝ";s:2:"Ŝ";s:3:"ŝ";s:2:"ŝ";s:3:"Ş";s:2:"Ş";s:3:"ş";s:2:"ş";s:3:"Š";s:2:"Š";s:3:"š";s:2:"š";s:3:"Ţ";s:2:"Ţ";s:3:"ţ";s:2:"ţ";s:3:"Ť";s:2:"Ť";s:3:"ť";s:2:"ť";s:3:"Ũ";s:2:"Ũ";s:3:"ũ";s:2:"ũ";s:3:"Ū";s:2:"Ū";s:3:"ū";s:2:"ū";s:3:"Ŭ";s:2:"Ŭ";s:3:"ŭ";s:2:"ŭ";s:3:"Ů";s:2:"Ů";s:3:"ů";s:2:"ů";s:3:"Ű";s:2:"Ű";s:3:"ű";s:2:"ű";s:3:"Ų";s:2:"Ų";s:3:"ų";s:2:"ų";s:3:"Ŵ";s:2:"Ŵ";s:3:"ŵ";s:2:"ŵ";s:3:"Ŷ";s:2:"Ŷ";s:3:"ŷ";s:2:"ŷ";s:3:"Ÿ";s:2:"Ÿ";s:3:"Ź";s:2:"Ź";s:3:"ź";s:2:"ź";s:3:"Ż";s:2:"Ż";s:3:"ż";s:2:"ż";s:3:"Ž";s:2:"Ž";s:3:"ž";s:2:"ž";s:3:"Ơ";s:2:"Ơ";s:3:"ơ";s:2:"ơ";s:3:"Ư";s:2:"Ư";s:3:"ư";s:2:"ư";s:3:"Ǎ";s:2:"Ǎ";s:3:"ǎ";s:2:"ǎ";s:3:"Ǐ";s:2:"Ǐ";s:3:"ǐ";s:2:"ǐ";s:3:"Ǒ";s:2:"Ǒ";s:3:"ǒ";s:2:"ǒ";s:3:"Ǔ";s:2:"Ǔ";s:3:"ǔ";s:2:"ǔ";s:4:"Ǖ";s:2:"Ǖ";s:4:"ǖ";s:2:"ǖ";s:4:"Ǘ";s:2:"Ǘ";s:4:"ǘ";s:2:"ǘ";s:4:"Ǚ";s:2:"Ǚ";s:4:"ǚ";s:2:"ǚ";s:4:"Ǜ";s:2:"Ǜ";s:4:"ǜ";s:2:"ǜ";s:4:"Ǟ";s:2:"Ǟ";s:4:"ǟ";s:2:"ǟ";s:4:"Ǡ";s:2:"Ǡ";s:4:"ǡ";s:2:"ǡ";s:4:"Ǣ";s:2:"Ǣ";s:4:"ǣ";s:2:"ǣ";s:3:"Ǧ";s:2:"Ǧ";s:3:"ǧ";s:2:"ǧ";s:3:"Ǩ";s:2:"Ǩ";s:3:"ǩ";s:2:"ǩ";s:3:"Ǫ";s:2:"Ǫ";s:3:"ǫ";s:2:"ǫ";s:4:"Ǭ";s:2:"Ǭ";s:4:"ǭ";s:2:"ǭ";s:4:"Ǯ";s:2:"Ǯ";s:4:"ǯ";s:2:"ǯ";s:3:"ǰ";s:2:"ǰ";s:3:"Ǵ";s:2:"Ǵ";s:3:"ǵ";s:2:"ǵ";s:3:"Ǹ";s:2:"Ǹ";s:3:"ǹ";s:2:"ǹ";s:4:"Ǻ";s:2:"Ǻ";s:4:"ǻ";s:2:"ǻ";s:4:"Ǽ";s:2:"Ǽ";s:4:"ǽ";s:2:"ǽ";s:4:"Ǿ";s:2:"Ǿ";s:4:"ǿ";s:2:"ǿ";s:3:"Ȁ";s:2:"Ȁ";s:3:"ȁ";s:2:"ȁ";s:3:"Ȃ";s:2:"Ȃ";s:3:"ȃ";s:2:"ȃ";s:3:"Ȅ";s:2:"Ȅ";s:3:"ȅ";s:2:"ȅ";s:3:"Ȇ";s:2:"Ȇ";s:3:"ȇ";s:2:"ȇ";s:3:"Ȉ";s:2:"Ȉ";s:3:"ȉ";s:2:"ȉ";s:3:"Ȋ";s:2:"Ȋ";s:3:"ȋ";s:2:"ȋ";s:3:"Ȍ";s:2:"Ȍ";s:3:"ȍ";s:2:"ȍ";s:3:"Ȏ";s:2:"Ȏ";s:3:"ȏ";s:2:"ȏ";s:3:"Ȑ";s:2:"Ȑ";s:3:"ȑ";s:2:"ȑ";s:3:"Ȓ";s:2:"Ȓ";s:3:"ȓ";s:2:"ȓ";s:3:"Ȕ";s:2:"Ȕ";s:3:"ȕ";s:2:"ȕ";s:3:"Ȗ";s:2:"Ȗ";s:3:"ȗ";s:2:"ȗ";s:3:"Ș";s:2:"Ș";s:3:"ș";s:2:"ș";s:3:"Ț";s:2:"Ț";s:3:"ț";s:2:"ț";s:3:"Ȟ";s:2:"Ȟ";s:3:"ȟ";s:2:"ȟ";s:3:"Ȧ";s:2:"Ȧ";s:3:"ȧ";s:2:"ȧ";s:3:"Ȩ";s:2:"Ȩ";s:3:"ȩ";s:2:"ȩ";s:4:"Ȫ";s:2:"Ȫ";s:4:"ȫ";s:2:"ȫ";s:4:"Ȭ";s:2:"Ȭ";s:4:"ȭ";s:2:"ȭ";s:3:"Ȯ";s:2:"Ȯ";s:3:"ȯ";s:2:"ȯ";s:4:"Ȱ";s:2:"Ȱ";s:4:"ȱ";s:2:"ȱ";s:3:"Ȳ";s:2:"Ȳ";s:3:"ȳ";s:2:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:4:"̈́";s:2:"̈́";s:2:"ʹ";s:2:"ʹ";s:1:";";s:2:";";s:4:"΅";s:2:"΅";s:4:"Ά";s:2:"Ά";s:2:"·";s:2:"·";s:4:"Έ";s:2:"Έ";s:4:"Ή";s:2:"Ή";s:4:"Ί";s:2:"Ί";s:4:"Ό";s:2:"Ό";s:4:"Ύ";s:2:"Ύ";s:4:"Ώ";s:2:"Ώ";s:4:"ΐ";s:2:"ΐ";s:4:"Ϊ";s:2:"Ϊ";s:4:"Ϋ";s:2:"Ϋ";s:4:"ά";s:2:"ά";s:4:"έ";s:2:"έ";s:4:"ή";s:2:"ή";s:4:"ί";s:2:"ί";s:4:"ΰ";s:2:"ΰ";s:4:"ϊ";s:2:"ϊ";s:4:"ϋ";s:2:"ϋ";s:4:"ό";s:2:"ό";s:4:"ύ";s:2:"ύ";s:4:"ώ";s:2:"ώ";s:4:"ϓ";s:2:"ϓ";s:4:"ϔ";s:2:"ϔ";s:4:"Ѐ";s:2:"Ѐ";s:4:"Ё";s:2:"Ё";s:4:"Ѓ";s:2:"Ѓ";s:4:"Ї";s:2:"Ї";s:4:"Ќ";s:2:"Ќ";s:4:"Ѝ";s:2:"Ѝ";s:4:"Ў";s:2:"Ў";s:4:"Й";s:2:"Й";s:4:"й";s:2:"й";s:4:"ѐ";s:2:"ѐ";s:4:"ё";s:2:"ё";s:4:"ѓ";s:2:"ѓ";s:4:"ї";s:2:"ї";s:4:"ќ";s:2:"ќ";s:4:"ѝ";s:2:"ѝ";s:4:"ў";s:2:"ў";s:4:"Ѷ";s:2:"Ѷ";s:4:"ѷ";s:2:"ѷ";s:4:"Ӂ";s:2:"Ӂ";s:4:"ӂ";s:2:"ӂ";s:4:"Ӑ";s:2:"Ӑ";s:4:"ӑ";s:2:"ӑ";s:4:"Ӓ";s:2:"Ӓ";s:4:"ӓ";s:2:"ӓ";s:4:"Ӗ";s:2:"Ӗ";s:4:"ӗ";s:2:"ӗ";s:4:"Ӛ";s:2:"Ӛ";s:4:"ӛ";s:2:"ӛ";s:4:"Ӝ";s:2:"Ӝ";s:4:"ӝ";s:2:"ӝ";s:4:"Ӟ";s:2:"Ӟ";s:4:"ӟ";s:2:"ӟ";s:4:"Ӣ";s:2:"Ӣ";s:4:"ӣ";s:2:"ӣ";s:4:"Ӥ";s:2:"Ӥ";s:4:"ӥ";s:2:"ӥ";s:4:"Ӧ";s:2:"Ӧ";s:4:"ӧ";s:2:"ӧ";s:4:"Ӫ";s:2:"Ӫ";s:4:"ӫ";s:2:"ӫ";s:4:"Ӭ";s:2:"Ӭ";s:4:"ӭ";s:2:"ӭ";s:4:"Ӯ";s:2:"Ӯ";s:4:"ӯ";s:2:"ӯ";s:4:"Ӱ";s:2:"Ӱ";s:4:"ӱ";s:2:"ӱ";s:4:"Ӳ";s:2:"Ӳ";s:4:"ӳ";s:2:"ӳ";s:4:"Ӵ";s:2:"Ӵ";s:4:"ӵ";s:2:"ӵ";s:4:"Ӹ";s:2:"Ӹ";s:4:"ӹ";s:2:"ӹ";s:4:"آ";s:2:"آ";s:4:"أ";s:2:"أ";s:4:"ؤ";s:2:"ؤ";s:4:"إ";s:2:"إ";s:4:"ئ";s:2:"ئ";s:4:"ۀ";s:2:"ۀ";s:4:"ۂ";s:2:"ۂ";s:4:"ۓ";s:2:"ۓ";s:6:"ऩ";s:3:"ऩ";s:6:"ऱ";s:3:"ऱ";s:6:"ऴ";s:3:"ऴ";s:6:"ো";s:3:"ো";s:6:"ৌ";s:3:"ৌ";s:6:"ୈ";s:3:"ୈ";s:6:"ୋ";s:3:"ୋ";s:6:"ୌ";s:3:"ୌ";s:6:"ஔ";s:3:"ஔ";s:6:"ொ";s:3:"ொ";s:6:"ோ";s:3:"ோ";s:6:"ௌ";s:3:"ௌ";s:6:"ై";s:3:"ై";s:6:"ೀ";s:3:"ೀ";s:6:"ೇ";s:3:"ೇ";s:6:"ೈ";s:3:"ೈ";s:6:"ೊ";s:3:"ೊ";s:6:"ೋ";s:3:"ೋ";s:6:"ൊ";s:3:"ൊ";s:6:"ോ";s:3:"ോ";s:6:"ൌ";s:3:"ൌ";s:6:"ේ";s:3:"ේ";s:6:"ො";s:3:"ො";s:6:"ෝ";s:3:"ෝ";s:6:"ෞ";s:3:"ෞ";s:6:"ཱི";s:3:"ཱི";s:6:"ཱུ";s:3:"ཱུ";s:6:"ཱྀ";s:3:"ཱྀ";s:6:"ဦ";s:3:"ဦ";s:6:"ᬆ";s:3:"ᬆ";s:6:"ᬈ";s:3:"ᬈ";s:6:"ᬊ";s:3:"ᬊ";s:6:"ᬌ";s:3:"ᬌ";s:6:"ᬎ";s:3:"ᬎ";s:6:"ᬒ";s:3:"ᬒ";s:6:"ᬻ";s:3:"ᬻ";s:6:"ᬽ";s:3:"ᬽ";s:6:"ᭀ";s:3:"ᭀ";s:6:"ᭁ";s:3:"ᭁ";s:6:"ᭃ";s:3:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:4:"Ḉ";s:3:"Ḉ";s:4:"ḉ";s:3:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:4:"Ḕ";s:3:"Ḕ";s:4:"ḕ";s:3:"ḕ";s:4:"Ḗ";s:3:"Ḗ";s:4:"ḗ";s:3:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:4:"Ḝ";s:3:"Ḝ";s:4:"ḝ";s:3:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:4:"Ḯ";s:3:"Ḯ";s:4:"ḯ";s:3:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:5:"Ḹ";s:3:"Ḹ";s:5:"ḹ";s:3:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:4:"Ṍ";s:3:"Ṍ";s:4:"ṍ";s:3:"ṍ";s:4:"Ṏ";s:3:"Ṏ";s:4:"ṏ";s:3:"ṏ";s:4:"Ṑ";s:3:"Ṑ";s:4:"ṑ";s:3:"ṑ";s:4:"Ṓ";s:3:"Ṓ";s:4:"ṓ";s:3:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:5:"Ṝ";s:3:"Ṝ";s:5:"ṝ";s:3:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:4:"Ṥ";s:3:"Ṥ";s:4:"ṥ";s:3:"ṥ";s:4:"Ṧ";s:3:"Ṧ";s:4:"ṧ";s:3:"ṧ";s:5:"Ṩ";s:3:"Ṩ";s:5:"ṩ";s:3:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:4:"Ṹ";s:3:"Ṹ";s:4:"ṹ";s:3:"ṹ";s:4:"Ṻ";s:3:"Ṻ";s:4:"ṻ";s:3:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:4:"ẛ";s:3:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:4:"Ấ";s:3:"Ấ";s:4:"ấ";s:3:"ấ";s:4:"Ầ";s:3:"Ầ";s:4:"ầ";s:3:"ầ";s:4:"Ẩ";s:3:"Ẩ";s:4:"ẩ";s:3:"ẩ";s:4:"Ẫ";s:3:"Ẫ";s:4:"ẫ";s:3:"ẫ";s:5:"Ậ";s:3:"Ậ";s:5:"ậ";s:3:"ậ";s:4:"Ắ";s:3:"Ắ";s:4:"ắ";s:3:"ắ";s:4:"Ằ";s:3:"Ằ";s:4:"ằ";s:3:"ằ";s:4:"Ẳ";s:3:"Ẳ";s:4:"ẳ";s:3:"ẳ";s:4:"Ẵ";s:3:"Ẵ";s:4:"ẵ";s:3:"ẵ";s:5:"Ặ";s:3:"Ặ";s:5:"ặ";s:3:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:4:"Ế";s:3:"Ế";s:4:"ế";s:3:"ế";s:4:"Ề";s:3:"Ề";s:4:"ề";s:3:"ề";s:4:"Ể";s:3:"Ể";s:4:"ể";s:3:"ể";s:4:"Ễ";s:3:"Ễ";s:4:"ễ";s:3:"ễ";s:5:"Ệ";s:3:"Ệ";s:5:"ệ";s:3:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:4:"Ố";s:3:"Ố";s:4:"ố";s:3:"ố";s:4:"Ồ";s:3:"Ồ";s:4:"ồ";s:3:"ồ";s:4:"Ổ";s:3:"Ổ";s:4:"ổ";s:3:"ổ";s:4:"Ỗ";s:3:"Ỗ";s:4:"ỗ";s:3:"ỗ";s:5:"Ộ";s:3:"Ộ";s:5:"ộ";s:3:"ộ";s:4:"Ớ";s:3:"Ớ";s:4:"ớ";s:3:"ớ";s:4:"Ờ";s:3:"Ờ";s:4:"ờ";s:3:"ờ";s:4:"Ở";s:3:"Ở";s:4:"ở";s:3:"ở";s:4:"Ỡ";s:3:"Ỡ";s:4:"ỡ";s:3:"ỡ";s:4:"Ợ";s:3:"Ợ";s:4:"ợ";s:3:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:4:"Ứ";s:3:"Ứ";s:4:"ứ";s:3:"ứ";s:4:"Ừ";s:3:"Ừ";s:4:"ừ";s:3:"ừ";s:4:"Ử";s:3:"Ử";s:4:"ử";s:3:"ử";s:4:"Ữ";s:3:"Ữ";s:4:"ữ";s:3:"ữ";s:4:"Ự";s:3:"Ự";s:4:"ự";s:3:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:4:"ἀ";s:3:"ἀ";s:4:"ἁ";s:3:"ἁ";s:5:"ἂ";s:3:"ἂ";s:5:"ἃ";s:3:"ἃ";s:5:"ἄ";s:3:"ἄ";s:5:"ἅ";s:3:"ἅ";s:5:"ἆ";s:3:"ἆ";s:5:"ἇ";s:3:"ἇ";s:4:"Ἀ";s:3:"Ἀ";s:4:"Ἁ";s:3:"Ἁ";s:5:"Ἂ";s:3:"Ἂ";s:5:"Ἃ";s:3:"Ἃ";s:5:"Ἄ";s:3:"Ἄ";s:5:"Ἅ";s:3:"Ἅ";s:5:"Ἆ";s:3:"Ἆ";s:5:"Ἇ";s:3:"Ἇ";s:4:"ἐ";s:3:"ἐ";s:4:"ἑ";s:3:"ἑ";s:5:"ἒ";s:3:"ἒ";s:5:"ἓ";s:3:"ἓ";s:5:"ἔ";s:3:"ἔ";s:5:"ἕ";s:3:"ἕ";s:4:"Ἐ";s:3:"Ἐ";s:4:"Ἑ";s:3:"Ἑ";s:5:"Ἒ";s:3:"Ἒ";s:5:"Ἓ";s:3:"Ἓ";s:5:"Ἔ";s:3:"Ἔ";s:5:"Ἕ";s:3:"Ἕ";s:4:"ἠ";s:3:"ἠ";s:4:"ἡ";s:3:"ἡ";s:5:"ἢ";s:3:"ἢ";s:5:"ἣ";s:3:"ἣ";s:5:"ἤ";s:3:"ἤ";s:5:"ἥ";s:3:"ἥ";s:5:"ἦ";s:3:"ἦ";s:5:"ἧ";s:3:"ἧ";s:4:"Ἠ";s:3:"Ἠ";s:4:"Ἡ";s:3:"Ἡ";s:5:"Ἢ";s:3:"Ἢ";s:5:"Ἣ";s:3:"Ἣ";s:5:"Ἤ";s:3:"Ἤ";s:5:"Ἥ";s:3:"Ἥ";s:5:"Ἦ";s:3:"Ἦ";s:5:"Ἧ";s:3:"Ἧ";s:4:"ἰ";s:3:"ἰ";s:4:"ἱ";s:3:"ἱ";s:5:"ἲ";s:3:"ἲ";s:5:"ἳ";s:3:"ἳ";s:5:"ἴ";s:3:"ἴ";s:5:"ἵ";s:3:"ἵ";s:5:"ἶ";s:3:"ἶ";s:5:"ἷ";s:3:"ἷ";s:4:"Ἰ";s:3:"Ἰ";s:4:"Ἱ";s:3:"Ἱ";s:5:"Ἲ";s:3:"Ἲ";s:5:"Ἳ";s:3:"Ἳ";s:5:"Ἴ";s:3:"Ἴ";s:5:"Ἵ";s:3:"Ἵ";s:5:"Ἶ";s:3:"Ἶ";s:5:"Ἷ";s:3:"Ἷ";s:4:"ὀ";s:3:"ὀ";s:4:"ὁ";s:3:"ὁ";s:5:"ὂ";s:3:"ὂ";s:5:"ὃ";s:3:"ὃ";s:5:"ὄ";s:3:"ὄ";s:5:"ὅ";s:3:"ὅ";s:4:"Ὀ";s:3:"Ὀ";s:4:"Ὁ";s:3:"Ὁ";s:5:"Ὂ";s:3:"Ὂ";s:5:"Ὃ";s:3:"Ὃ";s:5:"Ὄ";s:3:"Ὄ";s:5:"Ὅ";s:3:"Ὅ";s:4:"ὐ";s:3:"ὐ";s:4:"ὑ";s:3:"ὑ";s:5:"ὒ";s:3:"ὒ";s:5:"ὓ";s:3:"ὓ";s:5:"ὔ";s:3:"ὔ";s:5:"ὕ";s:3:"ὕ";s:5:"ὖ";s:3:"ὖ";s:5:"ὗ";s:3:"ὗ";s:4:"Ὑ";s:3:"Ὑ";s:5:"Ὓ";s:3:"Ὓ";s:5:"Ὕ";s:3:"Ὕ";s:5:"Ὗ";s:3:"Ὗ";s:4:"ὠ";s:3:"ὠ";s:4:"ὡ";s:3:"ὡ";s:5:"ὢ";s:3:"ὢ";s:5:"ὣ";s:3:"ὣ";s:5:"ὤ";s:3:"ὤ";s:5:"ὥ";s:3:"ὥ";s:5:"ὦ";s:3:"ὦ";s:5:"ὧ";s:3:"ὧ";s:4:"Ὠ";s:3:"Ὠ";s:4:"Ὡ";s:3:"Ὡ";s:5:"Ὢ";s:3:"Ὢ";s:5:"Ὣ";s:3:"Ὣ";s:5:"Ὤ";s:3:"Ὤ";s:5:"Ὥ";s:3:"Ὥ";s:5:"Ὦ";s:3:"Ὦ";s:5:"Ὧ";s:3:"Ὧ";s:4:"ὰ";s:3:"ὰ";s:2:"ά";s:3:"ά";s:4:"ὲ";s:3:"ὲ";s:2:"έ";s:3:"έ";s:4:"ὴ";s:3:"ὴ";s:2:"ή";s:3:"ή";s:4:"ὶ";s:3:"ὶ";s:2:"ί";s:3:"ί";s:4:"ὸ";s:3:"ὸ";s:2:"ό";s:3:"ό";s:4:"ὺ";s:3:"ὺ";s:2:"ύ";s:3:"ύ";s:4:"ὼ";s:3:"ὼ";s:2:"ώ";s:3:"ώ";s:5:"ᾀ";s:3:"ᾀ";s:5:"ᾁ";s:3:"ᾁ";s:5:"ᾂ";s:3:"ᾂ";s:5:"ᾃ";s:3:"ᾃ";s:5:"ᾄ";s:3:"ᾄ";s:5:"ᾅ";s:3:"ᾅ";s:5:"ᾆ";s:3:"ᾆ";s:5:"ᾇ";s:3:"ᾇ";s:5:"ᾈ";s:3:"ᾈ";s:5:"ᾉ";s:3:"ᾉ";s:5:"ᾊ";s:3:"ᾊ";s:5:"ᾋ";s:3:"ᾋ";s:5:"ᾌ";s:3:"ᾌ";s:5:"ᾍ";s:3:"ᾍ";s:5:"ᾎ";s:3:"ᾎ";s:5:"ᾏ";s:3:"ᾏ";s:5:"ᾐ";s:3:"ᾐ";s:5:"ᾑ";s:3:"ᾑ";s:5:"ᾒ";s:3:"ᾒ";s:5:"ᾓ";s:3:"ᾓ";s:5:"ᾔ";s:3:"ᾔ";s:5:"ᾕ";s:3:"ᾕ";s:5:"ᾖ";s:3:"ᾖ";s:5:"ᾗ";s:3:"ᾗ";s:5:"ᾘ";s:3:"ᾘ";s:5:"ᾙ";s:3:"ᾙ";s:5:"ᾚ";s:3:"ᾚ";s:5:"ᾛ";s:3:"ᾛ";s:5:"ᾜ";s:3:"ᾜ";s:5:"ᾝ";s:3:"ᾝ";s:5:"ᾞ";s:3:"ᾞ";s:5:"ᾟ";s:3:"ᾟ";s:5:"ᾠ";s:3:"ᾠ";s:5:"ᾡ";s:3:"ᾡ";s:5:"ᾢ";s:3:"ᾢ";s:5:"ᾣ";s:3:"ᾣ";s:5:"ᾤ";s:3:"ᾤ";s:5:"ᾥ";s:3:"ᾥ";s:5:"ᾦ";s:3:"ᾦ";s:5:"ᾧ";s:3:"ᾧ";s:5:"ᾨ";s:3:"ᾨ";s:5:"ᾩ";s:3:"ᾩ";s:5:"ᾪ";s:3:"ᾪ";s:5:"ᾫ";s:3:"ᾫ";s:5:"ᾬ";s:3:"ᾬ";s:5:"ᾭ";s:3:"ᾭ";s:5:"ᾮ";s:3:"ᾮ";s:5:"ᾯ";s:3:"ᾯ";s:4:"ᾰ";s:3:"ᾰ";s:4:"ᾱ";s:3:"ᾱ";s:5:"ᾲ";s:3:"ᾲ";s:4:"ᾳ";s:3:"ᾳ";s:4:"ᾴ";s:3:"ᾴ";s:4:"ᾶ";s:3:"ᾶ";s:5:"ᾷ";s:3:"ᾷ";s:4:"Ᾰ";s:3:"Ᾰ";s:4:"Ᾱ";s:3:"Ᾱ";s:4:"Ὰ";s:3:"Ὰ";s:2:"Ά";s:3:"Ά";s:4:"ᾼ";s:3:"ᾼ";s:2:"ι";s:3:"ι";s:4:"῁";s:3:"῁";s:5:"ῂ";s:3:"ῂ";s:4:"ῃ";s:3:"ῃ";s:4:"ῄ";s:3:"ῄ";s:4:"ῆ";s:3:"ῆ";s:5:"ῇ";s:3:"ῇ";s:4:"Ὲ";s:3:"Ὲ";s:2:"Έ";s:3:"Έ";s:4:"Ὴ";s:3:"Ὴ";s:2:"Ή";s:3:"Ή";s:4:"ῌ";s:3:"ῌ";s:5:"῍";s:3:"῍";s:5:"῎";s:3:"῎";s:5:"῏";s:3:"῏";s:4:"ῐ";s:3:"ῐ";s:4:"ῑ";s:3:"ῑ";s:4:"ῒ";s:3:"ῒ";s:2:"ΐ";s:3:"ΐ";s:4:"ῖ";s:3:"ῖ";s:4:"ῗ";s:3:"ῗ";s:4:"Ῐ";s:3:"Ῐ";s:4:"Ῑ";s:3:"Ῑ";s:4:"Ὶ";s:3:"Ὶ";s:2:"Ί";s:3:"Ί";s:5:"῝";s:3:"῝";s:5:"῞";s:3:"῞";s:5:"῟";s:3:"῟";s:4:"ῠ";s:3:"ῠ";s:4:"ῡ";s:3:"ῡ";s:4:"ῢ";s:3:"ῢ";s:2:"ΰ";s:3:"ΰ";s:4:"ῤ";s:3:"ῤ";s:4:"ῥ";s:3:"ῥ";s:4:"ῦ";s:3:"ῦ";s:4:"ῧ";s:3:"ῧ";s:4:"Ῠ";s:3:"Ῠ";s:4:"Ῡ";s:3:"Ῡ";s:4:"Ὺ";s:3:"Ὺ";s:2:"Ύ";s:3:"Ύ";s:4:"Ῥ";s:3:"Ῥ";s:4:"῭";s:3:"῭";s:2:"΅";s:3:"΅";s:1:"`";s:3:"`";s:5:"ῲ";s:3:"ῲ";s:4:"ῳ";s:3:"ῳ";s:4:"ῴ";s:3:"ῴ";s:4:"ῶ";s:3:"ῶ";s:5:"ῷ";s:3:"ῷ";s:4:"Ὸ";s:3:"Ὸ";s:2:"Ό";s:3:"Ό";s:4:"Ὼ";s:3:"Ὼ";s:2:"Ώ";s:3:"Ώ";s:4:"ῼ";s:3:"ῼ";s:2:"´";s:3:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:2:"Ω";s:3:"Ω";s:1:"K";s:3:"K";s:2:"Å";s:3:"Å";s:5:"↚";s:3:"↚";s:5:"↛";s:3:"↛";s:5:"↮";s:3:"↮";s:5:"⇍";s:3:"⇍";s:5:"⇎";s:3:"⇎";s:5:"⇏";s:3:"⇏";s:5:"∄";s:3:"∄";s:5:"∉";s:3:"∉";s:5:"∌";s:3:"∌";s:5:"∤";s:3:"∤";s:5:"∦";s:3:"∦";s:5:"≁";s:3:"≁";s:5:"≄";s:3:"≄";s:5:"≇";s:3:"≇";s:5:"≉";s:3:"≉";s:3:"≠";s:3:"≠";s:5:"≢";s:3:"≢";s:5:"≭";s:3:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:5:"≰";s:3:"≰";s:5:"≱";s:3:"≱";s:5:"≴";s:3:"≴";s:5:"≵";s:3:"≵";s:5:"≸";s:3:"≸";s:5:"≹";s:3:"≹";s:5:"⊀";s:3:"⊀";s:5:"⊁";s:3:"⊁";s:5:"⊄";s:3:"⊄";s:5:"⊅";s:3:"⊅";s:5:"⊈";s:3:"⊈";s:5:"⊉";s:3:"⊉";s:5:"⊬";s:3:"⊬";s:5:"⊭";s:3:"⊭";s:5:"⊮";s:3:"⊮";s:5:"⊯";s:3:"⊯";s:5:"⋠";s:3:"⋠";s:5:"⋡";s:3:"⋡";s:5:"⋢";s:3:"⋢";s:5:"⋣";s:3:"⋣";s:5:"⋪";s:3:"⋪";s:5:"⋫";s:3:"⋫";s:5:"⋬";s:3:"⋬";s:5:"⋭";s:3:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:6:"が";s:3:"が";s:6:"ぎ";s:3:"ぎ";s:6:"ぐ";s:3:"ぐ";s:6:"げ";s:3:"げ";s:6:"ご";s:3:"ご";s:6:"ざ";s:3:"ざ";s:6:"じ";s:3:"じ";s:6:"ず";s:3:"ず";s:6:"ぜ";s:3:"ぜ";s:6:"ぞ";s:3:"ぞ";s:6:"だ";s:3:"だ";s:6:"ぢ";s:3:"ぢ";s:6:"づ";s:3:"づ";s:6:"で";s:3:"で";s:6:"ど";s:3:"ど";s:6:"ば";s:3:"ば";s:6:"ぱ";s:3:"ぱ";s:6:"び";s:3:"び";s:6:"ぴ";s:3:"ぴ";s:6:"ぶ";s:3:"ぶ";s:6:"ぷ";s:3:"ぷ";s:6:"べ";s:3:"べ";s:6:"ぺ";s:3:"ぺ";s:6:"ぼ";s:3:"ぼ";s:6:"ぽ";s:3:"ぽ";s:6:"ゔ";s:3:"ゔ";s:6:"ゞ";s:3:"ゞ";s:6:"ガ";s:3:"ガ";s:6:"ギ";s:3:"ギ";s:6:"グ";s:3:"グ";s:6:"ゲ";s:3:"ゲ";s:6:"ゴ";s:3:"ゴ";s:6:"ザ";s:3:"ザ";s:6:"ジ";s:3:"ジ";s:6:"ズ";s:3:"ズ";s:6:"ゼ";s:3:"ゼ";s:6:"ゾ";s:3:"ゾ";s:6:"ダ";s:3:"ダ";s:6:"ヂ";s:3:"ヂ";s:6:"ヅ";s:3:"ヅ";s:6:"デ";s:3:"デ";s:6:"ド";s:3:"ド";s:6:"バ";s:3:"バ";s:6:"パ";s:3:"パ";s:6:"ビ";s:3:"ビ";s:6:"ピ";s:3:"ピ";s:6:"ブ";s:3:"ブ";s:6:"プ";s:3:"プ";s:6:"ベ";s:3:"ベ";s:6:"ペ";s:3:"ペ";s:6:"ボ";s:3:"ボ";s:6:"ポ";s:3:"ポ";s:6:"ヴ";s:3:"ヴ";s:6:"ヷ";s:3:"ヷ";s:6:"ヸ";s:3:"ヸ";s:6:"ヹ";s:3:"ヹ";s:6:"ヺ";s:3:"ヺ";s:6:"ヾ";s:3:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:4:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:4:"廊";s:3:"朗";s:4:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:4:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:4:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:4:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:4:"異";s:3:"北";s:4:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:4:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:4:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:4:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:4:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:4:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:4:"侮";s:3:"僧";s:4:"僧";s:3:"免";s:4:"免";s:3:"勉";s:4:"勉";s:3:"勤";s:4:"勤";s:3:"卑";s:4:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:4:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:4:"屮";s:3:"悔";s:4:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:4:"憎";s:3:"懲";s:4:"懲";s:3:"敏";s:4:"敏";s:3:"既";s:3:"既";s:3:"暑";s:4:"暑";s:3:"梅";s:4:"梅";s:3:"海";s:4:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:4:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:4:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:4:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"著";s:4:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:4:"𤋮";s:3:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:4:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:4:"勇";s:3:"勺";s:4:"勺";s:3:"啕";s:3:"啕";s:3:"喙";s:4:"喙";s:3:"嗢";s:3:"嗢";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:4:"慎";s:3:"愈";s:3:"愈";s:3:"慠";s:3:"慠";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"望";s:4:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"滛";s:3:"滛";s:3:"滋";s:4:"滋";s:3:"瀞";s:4:"瀞";s:3:"瞧";s:3:"瞧";s:3:"爵";s:4:"爵";s:3:"犯";s:3:"犯";s:3:"瑱";s:4:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"盛";s:3:"盛";s:3:"直";s:4:"直";s:3:"睊";s:4:"睊";s:3:"着";s:3:"着";s:3:"磌";s:4:"磌";s:3:"窱";s:3:"窱";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"缾";s:3:"缾";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:4:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"調";s:3:"調";s:3:"請";s:3:"請";s:3:"諭";s:4:"諭";s:3:"變";s:4:"變";s:3:"輸";s:4:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"韛";s:3:"韛";s:3:"頋";s:4:"頋";s:3:"鬒";s:4:"鬒";s:4:"𢡊";s:3:"𢡊";s:4:"𢡄";s:3:"𢡄";s:4:"𣏕";s:3:"𣏕";s:3:"㮝";s:4:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:4:"䀹";s:4:"𥉉";s:3:"𥉉";s:4:"𥳐";s:3:"𥳐";s:4:"𧻓";s:3:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:8:"𑂚";s:4:"𑂚";s:8:"𑂜";s:4:"𑂜";s:8:"𑂫";s:4:"𑂫";s:3:"丽";s:4:"丽";s:3:"丸";s:4:"丸";s:3:"乁";s:4:"乁";s:4:"𠄢";s:4:"𠄢";s:3:"你";s:4:"你";s:3:"侻";s:4:"侻";s:3:"倂";s:4:"倂";s:3:"偺";s:4:"偺";s:3:"備";s:4:"備";s:3:"像";s:4:"像";s:3:"㒞";s:4:"㒞";s:4:"𠘺";s:4:"𠘺";s:3:"兔";s:4:"兔";s:3:"兤";s:4:"兤";s:3:"具";s:4:"具";s:4:"𠔜";s:4:"𠔜";s:3:"㒹";s:4:"㒹";s:3:"內";s:4:"內";s:3:"再";s:4:"再";s:4:"𠕋";s:4:"𠕋";s:3:"冗";s:4:"冗";s:3:"冤";s:4:"冤";s:3:"仌";s:4:"仌";s:3:"冬";s:4:"冬";s:4:"𩇟";s:4:"𩇟";s:3:"凵";s:4:"凵";s:3:"刃";s:4:"刃";s:3:"㓟";s:4:"㓟";s:3:"刻";s:4:"刻";s:3:"剆";s:4:"剆";s:3:"割";s:4:"割";s:3:"剷";s:4:"剷";s:3:"㔕";s:4:"㔕";s:3:"包";s:4:"包";s:3:"匆";s:4:"匆";s:3:"卉";s:4:"卉";s:3:"博";s:4:"博";s:3:"即";s:4:"即";s:3:"卽";s:4:"卽";s:3:"卿";s:4:"卿";s:4:"𠨬";s:4:"𠨬";s:3:"灰";s:4:"灰";s:3:"及";s:4:"及";s:3:"叟";s:4:"叟";s:4:"𠭣";s:4:"𠭣";s:3:"叫";s:4:"叫";s:3:"叱";s:4:"叱";s:3:"吆";s:4:"吆";s:3:"咞";s:4:"咞";s:3:"吸";s:4:"吸";s:3:"呈";s:4:"呈";s:3:"周";s:4:"周";s:3:"咢";s:4:"咢";s:3:"哶";s:4:"哶";s:3:"唐";s:4:"唐";s:3:"啓";s:4:"啓";s:3:"啣";s:4:"啣";s:3:"善";s:4:"善";s:3:"喫";s:4:"喫";s:3:"喳";s:4:"喳";s:3:"嗂";s:4:"嗂";s:3:"圖";s:4:"圖";s:3:"圗";s:4:"圗";s:3:"噑";s:4:"噑";s:3:"噴";s:4:"噴";s:3:"壮";s:4:"壮";s:3:"城";s:4:"城";s:3:"埴";s:4:"埴";s:3:"堍";s:4:"堍";s:3:"型";s:4:"型";s:3:"堲";s:4:"堲";s:3:"報";s:4:"報";s:3:"墬";s:4:"墬";s:4:"𡓤";s:4:"𡓤";s:3:"売";s:4:"売";s:3:"壷";s:4:"壷";s:3:"夆";s:4:"夆";s:3:"多";s:4:"多";s:3:"夢";s:4:"夢";s:3:"奢";s:4:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:3:"姬";s:4:"姬";s:3:"娛";s:4:"娛";s:3:"娧";s:4:"娧";s:3:"姘";s:4:"姘";s:3:"婦";s:4:"婦";s:3:"㛮";s:4:"㛮";s:3:"㛼";s:4:"㛼";s:3:"嬈";s:4:"嬈";s:3:"嬾";s:4:"嬾";s:4:"𡧈";s:4:"𡧈";s:3:"寃";s:4:"寃";s:3:"寘";s:4:"寘";s:3:"寳";s:4:"寳";s:4:"𡬘";s:4:"𡬘";s:3:"寿";s:4:"寿";s:3:"将";s:4:"将";s:3:"当";s:4:"当";s:3:"尢";s:4:"尢";s:3:"㞁";s:4:"㞁";s:3:"屠";s:4:"屠";s:3:"峀";s:4:"峀";s:3:"岍";s:4:"岍";s:4:"𡷤";s:4:"𡷤";s:3:"嵃";s:4:"嵃";s:4:"𡷦";s:4:"𡷦";s:3:"嵮";s:4:"嵮";s:3:"嵫";s:4:"嵫";s:3:"嵼";s:4:"嵼";s:3:"巡";s:4:"巡";s:3:"巢";s:4:"巢";s:3:"㠯";s:4:"㠯";s:3:"巽";s:4:"巽";s:3:"帨";s:4:"帨";s:3:"帽";s:4:"帽";s:3:"幩";s:4:"幩";s:3:"㡢";s:4:"㡢";s:4:"𢆃";s:4:"𢆃";s:3:"㡼";s:4:"㡼";s:3:"庰";s:4:"庰";s:3:"庳";s:4:"庳";s:3:"庶";s:4:"庶";s:4:"𪎒";s:4:"𪎒";s:3:"廾";s:4:"廾";s:4:"𢌱";s:4:"𢌱";s:3:"舁";s:4:"舁";s:3:"弢";s:4:"弢";s:3:"㣇";s:4:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:3:"形";s:4:"形";s:3:"彫";s:4:"彫";s:3:"㣣";s:4:"㣣";s:3:"徚";s:4:"徚";s:3:"忍";s:4:"忍";s:3:"志";s:4:"志";s:3:"忹";s:4:"忹";s:3:"悁";s:4:"悁";s:3:"㤺";s:4:"㤺";s:3:"㤜";s:4:"㤜";s:4:"𢛔";s:4:"𢛔";s:3:"惇";s:4:"惇";s:3:"慈";s:4:"慈";s:3:"慌";s:4:"慌";s:3:"慺";s:4:"慺";s:3:"憲";s:4:"憲";s:3:"憤";s:4:"憤";s:3:"憯";s:4:"憯";s:3:"懞";s:4:"懞";s:3:"成";s:4:"成";s:3:"戛";s:4:"戛";s:3:"扝";s:4:"扝";s:3:"抱";s:4:"抱";s:3:"拔";s:4:"拔";s:3:"捐";s:4:"捐";s:4:"𢬌";s:4:"𢬌";s:3:"挽";s:4:"挽";s:3:"拼";s:4:"拼";s:3:"捨";s:4:"捨";s:3:"掃";s:4:"掃";s:3:"揤";s:4:"揤";s:4:"𢯱";s:4:"𢯱";s:3:"搢";s:4:"搢";s:3:"揅";s:4:"揅";s:3:"掩";s:4:"掩";s:3:"㨮";s:4:"㨮";s:3:"摩";s:4:"摩";s:3:"摾";s:4:"摾";s:3:"撝";s:4:"撝";s:3:"摷";s:4:"摷";s:3:"㩬";s:4:"㩬";s:3:"敬";s:4:"敬";s:4:"𣀊";s:4:"𣀊";s:3:"旣";s:4:"旣";s:3:"書";s:4:"書";s:3:"晉";s:4:"晉";s:3:"㬙";s:4:"㬙";s:3:"㬈";s:4:"㬈";s:3:"㫤";s:4:"㫤";s:3:"冒";s:4:"冒";s:3:"冕";s:4:"冕";s:3:"最";s:4:"最";s:3:"暜";s:4:"暜";s:3:"肭";s:4:"肭";s:3:"䏙";s:4:"䏙";s:3:"朡";s:4:"朡";s:3:"杞";s:4:"杞";s:3:"杓";s:4:"杓";s:4:"𣏃";s:4:"𣏃";s:3:"㭉";s:4:"㭉";s:3:"柺";s:4:"柺";s:3:"枅";s:4:"枅";s:3:"桒";s:4:"桒";s:4:"𣑭";s:4:"𣑭";s:3:"梎";s:4:"梎";s:3:"栟";s:4:"栟";s:3:"椔";s:4:"椔";s:3:"楂";s:4:"楂";s:3:"榣";s:4:"榣";s:3:"槪";s:4:"槪";s:3:"檨";s:4:"檨";s:4:"𣚣";s:4:"𣚣";s:3:"櫛";s:4:"櫛";s:3:"㰘";s:4:"㰘";s:3:"次";s:4:"次";s:4:"𣢧";s:4:"𣢧";s:3:"歔";s:4:"歔";s:3:"㱎";s:4:"㱎";s:3:"歲";s:4:"歲";s:3:"殟";s:4:"殟";s:3:"殻";s:4:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:3:"汎";s:4:"汎";s:4:"𣲼";s:4:"𣲼";s:3:"沿";s:4:"沿";s:3:"泍";s:4:"泍";s:3:"汧";s:4:"汧";s:3:"洖";s:4:"洖";s:3:"派";s:4:"派";s:3:"浩";s:4:"浩";s:3:"浸";s:4:"浸";s:3:"涅";s:4:"涅";s:4:"𣴞";s:4:"𣴞";s:3:"洴";s:4:"洴";s:3:"港";s:4:"港";s:3:"湮";s:4:"湮";s:3:"㴳";s:4:"㴳";s:3:"滇";s:4:"滇";s:4:"𣻑";s:4:"𣻑";s:3:"淹";s:4:"淹";s:3:"潮";s:4:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:3:"濆";s:4:"濆";s:3:"瀹";s:4:"瀹";s:3:"瀛";s:4:"瀛";s:3:"㶖";s:4:"㶖";s:3:"灊";s:4:"灊";s:3:"災";s:4:"災";s:3:"灷";s:4:"灷";s:3:"炭";s:4:"炭";s:4:"𠔥";s:4:"𠔥";s:3:"煅";s:4:"煅";s:4:"𤉣";s:4:"𤉣";s:3:"熜";s:4:"熜";s:4:"𤎫";s:4:"𤎫";s:3:"爨";s:4:"爨";s:3:"牐";s:4:"牐";s:4:"𤘈";s:4:"𤘈";s:3:"犀";s:4:"犀";s:3:"犕";s:4:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:3:"獺";s:4:"獺";s:3:"王";s:4:"王";s:3:"㺬";s:4:"㺬";s:3:"玥";s:4:"玥";s:3:"㺸";s:4:"㺸";s:3:"瑇";s:4:"瑇";s:3:"瑜";s:4:"瑜";s:3:"璅";s:4:"璅";s:3:"瓊";s:4:"瓊";s:3:"㼛";s:4:"㼛";s:3:"甤";s:4:"甤";s:4:"𤰶";s:4:"𤰶";s:3:"甾";s:4:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"𢆟";s:4:"𢆟";s:3:"瘐";s:4:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:3:"㿼";s:4:"㿼";s:3:"䀈";s:4:"䀈";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:3:"眞";s:4:"眞";s:3:"真";s:4:"真";s:3:"瞋";s:4:"瞋";s:3:"䁆";s:4:"䁆";s:3:"䂖";s:4:"䂖";s:4:"𥐝";s:4:"𥐝";s:3:"硎";s:4:"硎";s:3:"䃣";s:4:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:3:"秫";s:4:"秫";s:3:"䄯";s:4:"䄯";s:3:"穊";s:4:"穊";s:3:"穏";s:4:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:3:"竮";s:4:"竮";s:3:"䈂";s:4:"䈂";s:4:"𥮫";s:4:"𥮫";s:3:"篆";s:4:"篆";s:3:"築";s:4:"築";s:3:"䈧";s:4:"䈧";s:4:"𥲀";s:4:"𥲀";s:3:"糒";s:4:"糒";s:3:"䊠";s:4:"䊠";s:3:"糨";s:4:"糨";s:3:"糣";s:4:"糣";s:3:"紀";s:4:"紀";s:4:"𥾆";s:4:"𥾆";s:3:"絣";s:4:"絣";s:3:"䌁";s:4:"䌁";s:3:"緇";s:4:"緇";s:3:"縂";s:4:"縂";s:3:"繅";s:4:"繅";s:3:"䌴";s:4:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:3:"䍙";s:4:"䍙";s:4:"𦋙";s:4:"𦋙";s:3:"罺";s:4:"罺";s:4:"𦌾";s:4:"𦌾";s:3:"羕";s:4:"羕";s:3:"翺";s:4:"翺";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:3:"聠";s:4:"聠";s:4:"𦖨";s:4:"𦖨";s:3:"聰";s:4:"聰";s:4:"𣍟";s:4:"𣍟";s:3:"䏕";s:4:"䏕";s:3:"育";s:4:"育";s:3:"脃";s:4:"脃";s:3:"䐋";s:4:"䐋";s:3:"脾";s:4:"脾";s:3:"媵";s:4:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:3:"舄";s:4:"舄";s:3:"辞";s:4:"辞";s:3:"䑫";s:4:"䑫";s:3:"芑";s:4:"芑";s:3:"芋";s:4:"芋";s:3:"芝";s:4:"芝";s:3:"劳";s:4:"劳";s:3:"花";s:4:"花";s:3:"芳";s:4:"芳";s:3:"芽";s:4:"芽";s:3:"苦";s:4:"苦";s:4:"𦬼";s:4:"𦬼";s:3:"茝";s:4:"茝";s:3:"荣";s:4:"荣";s:3:"莭";s:4:"莭";s:3:"茣";s:4:"茣";s:3:"莽";s:4:"莽";s:3:"菧";s:4:"菧";s:3:"荓";s:4:"荓";s:3:"菊";s:4:"菊";s:3:"菌";s:4:"菌";s:3:"菜";s:4:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:3:"䔫";s:4:"䔫";s:3:"蓱";s:4:"蓱";s:3:"蓳";s:4:"蓳";s:3:"蔖";s:4:"蔖";s:4:"𧏊";s:4:"𧏊";s:3:"蕤";s:4:"蕤";s:4:"𦼬";s:4:"𦼬";s:3:"䕝";s:4:"䕝";s:3:"䕡";s:4:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:3:"䕫";s:4:"䕫";s:3:"虐";s:4:"虐";s:3:"虧";s:4:"虧";s:3:"虩";s:4:"虩";s:3:"蚩";s:4:"蚩";s:3:"蚈";s:4:"蚈";s:3:"蜎";s:4:"蜎";s:3:"蛢";s:4:"蛢";s:3:"蜨";s:4:"蜨";s:3:"蝫";s:4:"蝫";s:3:"螆";s:4:"螆";s:3:"䗗";s:4:"䗗";s:3:"蟡";s:4:"蟡";s:3:"蠁";s:4:"蠁";s:3:"䗹";s:4:"䗹";s:3:"衠";s:4:"衠";s:3:"衣";s:4:"衣";s:4:"𧙧";s:4:"𧙧";s:3:"裗";s:4:"裗";s:3:"裞";s:4:"裞";s:3:"䘵";s:4:"䘵";s:3:"裺";s:4:"裺";s:3:"㒻";s:4:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:3:"䚾";s:4:"䚾";s:3:"䛇";s:4:"䛇";s:3:"誠";s:4:"誠";s:3:"豕";s:4:"豕";s:4:"𧲨";s:4:"𧲨";s:3:"貫";s:4:"貫";s:3:"賁";s:4:"賁";s:3:"贛";s:4:"贛";s:3:"起";s:4:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:3:"跋";s:4:"跋";s:3:"趼";s:4:"趼";s:3:"跰";s:4:"跰";s:4:"𠣞";s:4:"𠣞";s:3:"軔";s:4:"軔";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:3:"邔";s:4:"邔";s:3:"郱";s:4:"郱";s:3:"鄑";s:4:"鄑";s:4:"𨜮";s:4:"𨜮";s:3:"鄛";s:4:"鄛";s:3:"鈸";s:4:"鈸";s:3:"鋗";s:4:"鋗";s:3:"鋘";s:4:"鋘";s:3:"鉼";s:4:"鉼";s:3:"鏹";s:4:"鏹";s:3:"鐕";s:4:"鐕";s:4:"𨯺";s:4:"𨯺";s:3:"開";s:4:"開";s:3:"䦕";s:4:"䦕";s:3:"閷";s:4:"閷";s:4:"𨵷";s:4:"𨵷";s:3:"䧦";s:4:"䧦";s:3:"雃";s:4:"雃";s:3:"嶲";s:4:"嶲";s:3:"霣";s:4:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:3:"䩮";s:4:"䩮";s:3:"䩶";s:4:"䩶";s:3:"韠";s:4:"韠";s:4:"𩐊";s:4:"𩐊";s:3:"䪲";s:4:"䪲";s:4:"𩒖";s:4:"𩒖";s:3:"頩";s:4:"頩";s:4:"𩖶";s:4:"𩖶";s:3:"飢";s:4:"飢";s:3:"䬳";s:4:"䬳";s:3:"餩";s:4:"餩";s:3:"馧";s:4:"馧";s:3:"駂";s:4:"駂";s:3:"駾";s:4:"駾";s:3:"䯎";s:4:"䯎";s:4:"𩬰";s:4:"𩬰";s:3:"鱀";s:4:"鱀";s:3:"鳽";s:4:"鳽";s:3:"䳎";s:4:"䳎";s:3:"䳭";s:4:"䳭";s:3:"鵧";s:4:"鵧";s:4:"𪃎";s:4:"𪃎";s:3:"䳸";s:4:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:3:"麻";s:4:"麻";s:3:"䵖";s:4:"䵖";s:3:"黹";s:4:"黹";s:3:"黾";s:4:"黾";s:3:"鼅";s:4:"鼅";s:3:"鼏";s:4:"鼏";s:3:"鼖";s:4:"鼖";s:3:"鼻";s:4:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
+UtfNormal\Validator::$utfCanonicalDecomp = unserialize( 'a:2049:{s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:";";s:1:";";s:2:"΅";s:4:"΅";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϓ";s:4:"ϓ";s:2:"ϔ";s:4:"ϔ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẛ";s:4:"ẛ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"ι";s:2:"ι";s:3:"῁";s:4:"῁";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:"῍";s:3:"῎";s:5:"῎";s:3:"῏";s:5:"῏";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:"῝";s:3:"῞";s:5:"῞";s:3:"῟";s:5:"῟";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:4:"῭";s:3:"΅";s:4:"΅";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:2:"´";s:3:" ";s:3:" ";s:3:" ";s:3:" ";s:3:"Ω";s:2:"Ω";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"⫝̸";s:5:"⫝̸";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"ゞ";s:6:"ゞ";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:3:"𤋮";s:4:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:4:"𑂚";s:8:"𑂚";s:4:"𑂜";s:8:"𑂜";s:4:"𑂫";s:8:"𑂫";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
+UtfNormal\Validator::$utfCheckNFC = unserialize( 'a:1221:{s:2:"̀";s:1:"N";s:2:"́";s:1:"N";s:2:"̓";s:1:"N";s:2:"̈́";s:1:"N";s:2:"ʹ";s:1:"N";s:2:";";s:1:"N";s:2:"·";s:1:"N";s:3:"क़";s:1:"N";s:3:"ख़";s:1:"N";s:3:"ग़";s:1:"N";s:3:"ज़";s:1:"N";s:3:"ड़";s:1:"N";s:3:"ढ़";s:1:"N";s:3:"फ़";s:1:"N";s:3:"य़";s:1:"N";s:3:"ড়";s:1:"N";s:3:"ঢ়";s:1:"N";s:3:"য়";s:1:"N";s:3:"ਲ਼";s:1:"N";s:3:"ਸ਼";s:1:"N";s:3:"ਖ਼";s:1:"N";s:3:"ਗ਼";s:1:"N";s:3:"ਜ਼";s:1:"N";s:3:"ਫ਼";s:1:"N";s:3:"ଡ଼";s:1:"N";s:3:"ଢ଼";s:1:"N";s:3:"གྷ";s:1:"N";s:3:"ཌྷ";s:1:"N";s:3:"དྷ";s:1:"N";s:3:"བྷ";s:1:"N";s:3:"ཛྷ";s:1:"N";s:3:"ཀྵ";s:1:"N";s:3:"ཱི";s:1:"N";s:3:"ཱུ";s:1:"N";s:3:"ྲྀ";s:1:"N";s:3:"ླྀ";s:1:"N";s:3:"ཱྀ";s:1:"N";s:3:"ྒྷ";s:1:"N";s:3:"ྜྷ";s:1:"N";s:3:"ྡྷ";s:1:"N";s:3:"ྦྷ";s:1:"N";s:3:"ྫྷ";s:1:"N";s:3:"ྐྵ";s:1:"N";s:3:"ά";s:1:"N";s:3:"έ";s:1:"N";s:3:"ή";s:1:"N";s:3:"ί";s:1:"N";s:3:"ό";s:1:"N";s:3:"ύ";s:1:"N";s:3:"ώ";s:1:"N";s:3:"Ά";s:1:"N";s:3:"ι";s:1:"N";s:3:"Έ";s:1:"N";s:3:"Ή";s:1:"N";s:3:"ΐ";s:1:"N";s:3:"Ί";s:1:"N";s:3:"ΰ";s:1:"N";s:3:"Ύ";s:1:"N";s:3:"΅";s:1:"N";s:3:"`";s:1:"N";s:3:"Ό";s:1:"N";s:3:"Ώ";s:1:"N";s:3:"´";s:1:"N";s:3:" ";s:1:"N";s:3:" ";s:1:"N";s:3:"Ω";s:1:"N";s:3:"K";s:1:"N";s:3:"Å";s:1:"N";s:3:"〈";s:1:"N";s:3:"〉";s:1:"N";s:3:"⫝̸";s:1:"N";s:3:"豈";s:1:"N";s:3:"更";s:1:"N";s:3:"車";s:1:"N";s:3:"賈";s:1:"N";s:3:"滑";s:1:"N";s:3:"串";s:1:"N";s:3:"句";s:1:"N";s:3:"龜";s:1:"N";s:3:"龜";s:1:"N";s:3:"契";s:1:"N";s:3:"金";s:1:"N";s:3:"喇";s:1:"N";s:3:"奈";s:1:"N";s:3:"懶";s:1:"N";s:3:"癩";s:1:"N";s:3:"羅";s:1:"N";s:3:"蘿";s:1:"N";s:3:"螺";s:1:"N";s:3:"裸";s:1:"N";s:3:"邏";s:1:"N";s:3:"樂";s:1:"N";s:3:"洛";s:1:"N";s:3:"烙";s:1:"N";s:3:"珞";s:1:"N";s:3:"落";s:1:"N";s:3:"酪";s:1:"N";s:3:"駱";s:1:"N";s:3:"亂";s:1:"N";s:3:"卵";s:1:"N";s:3:"欄";s:1:"N";s:3:"爛";s:1:"N";s:3:"蘭";s:1:"N";s:3:"鸞";s:1:"N";s:3:"嵐";s:1:"N";s:3:"濫";s:1:"N";s:3:"藍";s:1:"N";s:3:"襤";s:1:"N";s:3:"拉";s:1:"N";s:3:"臘";s:1:"N";s:3:"蠟";s:1:"N";s:3:"廊";s:1:"N";s:3:"朗";s:1:"N";s:3:"浪";s:1:"N";s:3:"狼";s:1:"N";s:3:"郎";s:1:"N";s:3:"來";s:1:"N";s:3:"冷";s:1:"N";s:3:"勞";s:1:"N";s:3:"擄";s:1:"N";s:3:"櫓";s:1:"N";s:3:"爐";s:1:"N";s:3:"盧";s:1:"N";s:3:"老";s:1:"N";s:3:"蘆";s:1:"N";s:3:"虜";s:1:"N";s:3:"路";s:1:"N";s:3:"露";s:1:"N";s:3:"魯";s:1:"N";s:3:"鷺";s:1:"N";s:3:"碌";s:1:"N";s:3:"祿";s:1:"N";s:3:"綠";s:1:"N";s:3:"菉";s:1:"N";s:3:"錄";s:1:"N";s:3:"鹿";s:1:"N";s:3:"論";s:1:"N";s:3:"壟";s:1:"N";s:3:"弄";s:1:"N";s:3:"籠";s:1:"N";s:3:"聾";s:1:"N";s:3:"牢";s:1:"N";s:3:"磊";s:1:"N";s:3:"賂";s:1:"N";s:3:"雷";s:1:"N";s:3:"壘";s:1:"N";s:3:"屢";s:1:"N";s:3:"樓";s:1:"N";s:3:"淚";s:1:"N";s:3:"漏";s:1:"N";s:3:"累";s:1:"N";s:3:"縷";s:1:"N";s:3:"陋";s:1:"N";s:3:"勒";s:1:"N";s:3:"肋";s:1:"N";s:3:"凜";s:1:"N";s:3:"凌";s:1:"N";s:3:"稜";s:1:"N";s:3:"綾";s:1:"N";s:3:"菱";s:1:"N";s:3:"陵";s:1:"N";s:3:"讀";s:1:"N";s:3:"拏";s:1:"N";s:3:"樂";s:1:"N";s:3:"諾";s:1:"N";s:3:"丹";s:1:"N";s:3:"寧";s:1:"N";s:3:"怒";s:1:"N";s:3:"率";s:1:"N";s:3:"異";s:1:"N";s:3:"北";s:1:"N";s:3:"磻";s:1:"N";s:3:"便";s:1:"N";s:3:"復";s:1:"N";s:3:"不";s:1:"N";s:3:"泌";s:1:"N";s:3:"數";s:1:"N";s:3:"索";s:1:"N";s:3:"參";s:1:"N";s:3:"塞";s:1:"N";s:3:"省";s:1:"N";s:3:"葉";s:1:"N";s:3:"說";s:1:"N";s:3:"殺";s:1:"N";s:3:"辰";s:1:"N";s:3:"沈";s:1:"N";s:3:"拾";s:1:"N";s:3:"若";s:1:"N";s:3:"掠";s:1:"N";s:3:"略";s:1:"N";s:3:"亮";s:1:"N";s:3:"兩";s:1:"N";s:3:"凉";s:1:"N";s:3:"梁";s:1:"N";s:3:"糧";s:1:"N";s:3:"良";s:1:"N";s:3:"諒";s:1:"N";s:3:"量";s:1:"N";s:3:"勵";s:1:"N";s:3:"呂";s:1:"N";s:3:"女";s:1:"N";s:3:"廬";s:1:"N";s:3:"旅";s:1:"N";s:3:"濾";s:1:"N";s:3:"礪";s:1:"N";s:3:"閭";s:1:"N";s:3:"驪";s:1:"N";s:3:"麗";s:1:"N";s:3:"黎";s:1:"N";s:3:"力";s:1:"N";s:3:"曆";s:1:"N";s:3:"歷";s:1:"N";s:3:"轢";s:1:"N";s:3:"年";s:1:"N";s:3:"憐";s:1:"N";s:3:"戀";s:1:"N";s:3:"撚";s:1:"N";s:3:"漣";s:1:"N";s:3:"煉";s:1:"N";s:3:"璉";s:1:"N";s:3:"秊";s:1:"N";s:3:"練";s:1:"N";s:3:"聯";s:1:"N";s:3:"輦";s:1:"N";s:3:"蓮";s:1:"N";s:3:"連";s:1:"N";s:3:"鍊";s:1:"N";s:3:"列";s:1:"N";s:3:"劣";s:1:"N";s:3:"咽";s:1:"N";s:3:"烈";s:1:"N";s:3:"裂";s:1:"N";s:3:"說";s:1:"N";s:3:"廉";s:1:"N";s:3:"念";s:1:"N";s:3:"捻";s:1:"N";s:3:"殮";s:1:"N";s:3:"簾";s:1:"N";s:3:"獵";s:1:"N";s:3:"令";s:1:"N";s:3:"囹";s:1:"N";s:3:"寧";s:1:"N";s:3:"嶺";s:1:"N";s:3:"怜";s:1:"N";s:3:"玲";s:1:"N";s:3:"瑩";s:1:"N";s:3:"羚";s:1:"N";s:3:"聆";s:1:"N";s:3:"鈴";s:1:"N";s:3:"零";s:1:"N";s:3:"靈";s:1:"N";s:3:"領";s:1:"N";s:3:"例";s:1:"N";s:3:"禮";s:1:"N";s:3:"醴";s:1:"N";s:3:"隸";s:1:"N";s:3:"惡";s:1:"N";s:3:"了";s:1:"N";s:3:"僚";s:1:"N";s:3:"寮";s:1:"N";s:3:"尿";s:1:"N";s:3:"料";s:1:"N";s:3:"樂";s:1:"N";s:3:"燎";s:1:"N";s:3:"療";s:1:"N";s:3:"蓼";s:1:"N";s:3:"遼";s:1:"N";s:3:"龍";s:1:"N";s:3:"暈";s:1:"N";s:3:"阮";s:1:"N";s:3:"劉";s:1:"N";s:3:"杻";s:1:"N";s:3:"柳";s:1:"N";s:3:"流";s:1:"N";s:3:"溜";s:1:"N";s:3:"琉";s:1:"N";s:3:"留";s:1:"N";s:3:"硫";s:1:"N";s:3:"紐";s:1:"N";s:3:"類";s:1:"N";s:3:"六";s:1:"N";s:3:"戮";s:1:"N";s:3:"陸";s:1:"N";s:3:"倫";s:1:"N";s:3:"崙";s:1:"N";s:3:"淪";s:1:"N";s:3:"輪";s:1:"N";s:3:"律";s:1:"N";s:3:"慄";s:1:"N";s:3:"栗";s:1:"N";s:3:"率";s:1:"N";s:3:"隆";s:1:"N";s:3:"利";s:1:"N";s:3:"吏";s:1:"N";s:3:"履";s:1:"N";s:3:"易";s:1:"N";s:3:"李";s:1:"N";s:3:"梨";s:1:"N";s:3:"泥";s:1:"N";s:3:"理";s:1:"N";s:3:"痢";s:1:"N";s:3:"罹";s:1:"N";s:3:"裏";s:1:"N";s:3:"裡";s:1:"N";s:3:"里";s:1:"N";s:3:"離";s:1:"N";s:3:"匿";s:1:"N";s:3:"溺";s:1:"N";s:3:"吝";s:1:"N";s:3:"燐";s:1:"N";s:3:"璘";s:1:"N";s:3:"藺";s:1:"N";s:3:"隣";s:1:"N";s:3:"鱗";s:1:"N";s:3:"麟";s:1:"N";s:3:"林";s:1:"N";s:3:"淋";s:1:"N";s:3:"臨";s:1:"N";s:3:"立";s:1:"N";s:3:"笠";s:1:"N";s:3:"粒";s:1:"N";s:3:"狀";s:1:"N";s:3:"炙";s:1:"N";s:3:"識";s:1:"N";s:3:"什";s:1:"N";s:3:"茶";s:1:"N";s:3:"刺";s:1:"N";s:3:"切";s:1:"N";s:3:"度";s:1:"N";s:3:"拓";s:1:"N";s:3:"糖";s:1:"N";s:3:"宅";s:1:"N";s:3:"洞";s:1:"N";s:3:"暴";s:1:"N";s:3:"輻";s:1:"N";s:3:"行";s:1:"N";s:3:"降";s:1:"N";s:3:"見";s:1:"N";s:3:"廓";s:1:"N";s:3:"兀";s:1:"N";s:3:"嗀";s:1:"N";s:3:"塚";s:1:"N";s:3:"晴";s:1:"N";s:3:"凞";s:1:"N";s:3:"猪";s:1:"N";s:3:"益";s:1:"N";s:3:"礼";s:1:"N";s:3:"神";s:1:"N";s:3:"祥";s:1:"N";s:3:"福";s:1:"N";s:3:"靖";s:1:"N";s:3:"精";s:1:"N";s:3:"羽";s:1:"N";s:3:"蘒";s:1:"N";s:3:"諸";s:1:"N";s:3:"逸";s:1:"N";s:3:"都";s:1:"N";s:3:"飯";s:1:"N";s:3:"飼";s:1:"N";s:3:"館";s:1:"N";s:3:"鶴";s:1:"N";s:3:"侮";s:1:"N";s:3:"僧";s:1:"N";s:3:"免";s:1:"N";s:3:"勉";s:1:"N";s:3:"勤";s:1:"N";s:3:"卑";s:1:"N";s:3:"喝";s:1:"N";s:3:"嘆";s:1:"N";s:3:"器";s:1:"N";s:3:"塀";s:1:"N";s:3:"墨";s:1:"N";s:3:"層";s:1:"N";s:3:"屮";s:1:"N";s:3:"悔";s:1:"N";s:3:"慨";s:1:"N";s:3:"憎";s:1:"N";s:3:"懲";s:1:"N";s:3:"敏";s:1:"N";s:3:"既";s:1:"N";s:3:"暑";s:1:"N";s:3:"梅";s:1:"N";s:3:"海";s:1:"N";s:3:"渚";s:1:"N";s:3:"漢";s:1:"N";s:3:"煮";s:1:"N";s:3:"爫";s:1:"N";s:3:"琢";s:1:"N";s:3:"碑";s:1:"N";s:3:"社";s:1:"N";s:3:"祉";s:1:"N";s:3:"祈";s:1:"N";s:3:"祐";s:1:"N";s:3:"祖";s:1:"N";s:3:"祝";s:1:"N";s:3:"禍";s:1:"N";s:3:"禎";s:1:"N";s:3:"穀";s:1:"N";s:3:"突";s:1:"N";s:3:"節";s:1:"N";s:3:"練";s:1:"N";s:3:"縉";s:1:"N";s:3:"繁";s:1:"N";s:3:"署";s:1:"N";s:3:"者";s:1:"N";s:3:"臭";s:1:"N";s:3:"艹";s:1:"N";s:3:"艹";s:1:"N";s:3:"著";s:1:"N";s:3:"褐";s:1:"N";s:3:"視";s:1:"N";s:3:"謁";s:1:"N";s:3:"謹";s:1:"N";s:3:"賓";s:1:"N";s:3:"贈";s:1:"N";s:3:"辶";s:1:"N";s:3:"逸";s:1:"N";s:3:"難";s:1:"N";s:3:"響";s:1:"N";s:3:"頻";s:1:"N";s:3:"恵";s:1:"N";s:3:"𤋮";s:1:"N";s:3:"舘";s:1:"N";s:3:"並";s:1:"N";s:3:"况";s:1:"N";s:3:"全";s:1:"N";s:3:"侀";s:1:"N";s:3:"充";s:1:"N";s:3:"冀";s:1:"N";s:3:"勇";s:1:"N";s:3:"勺";s:1:"N";s:3:"喝";s:1:"N";s:3:"啕";s:1:"N";s:3:"喙";s:1:"N";s:3:"嗢";s:1:"N";s:3:"塚";s:1:"N";s:3:"墳";s:1:"N";s:3:"奄";s:1:"N";s:3:"奔";s:1:"N";s:3:"婢";s:1:"N";s:3:"嬨";s:1:"N";s:3:"廒";s:1:"N";s:3:"廙";s:1:"N";s:3:"彩";s:1:"N";s:3:"徭";s:1:"N";s:3:"惘";s:1:"N";s:3:"慎";s:1:"N";s:3:"愈";s:1:"N";s:3:"憎";s:1:"N";s:3:"慠";s:1:"N";s:3:"懲";s:1:"N";s:3:"戴";s:1:"N";s:3:"揄";s:1:"N";s:3:"搜";s:1:"N";s:3:"摒";s:1:"N";s:3:"敖";s:1:"N";s:3:"晴";s:1:"N";s:3:"朗";s:1:"N";s:3:"望";s:1:"N";s:3:"杖";s:1:"N";s:3:"歹";s:1:"N";s:3:"殺";s:1:"N";s:3:"流";s:1:"N";s:3:"滛";s:1:"N";s:3:"滋";s:1:"N";s:3:"漢";s:1:"N";s:3:"瀞";s:1:"N";s:3:"煮";s:1:"N";s:3:"瞧";s:1:"N";s:3:"爵";s:1:"N";s:3:"犯";s:1:"N";s:3:"猪";s:1:"N";s:3:"瑱";s:1:"N";s:3:"甆";s:1:"N";s:3:"画";s:1:"N";s:3:"瘝";s:1:"N";s:3:"瘟";s:1:"N";s:3:"益";s:1:"N";s:3:"盛";s:1:"N";s:3:"直";s:1:"N";s:3:"睊";s:1:"N";s:3:"着";s:1:"N";s:3:"磌";s:1:"N";s:3:"窱";s:1:"N";s:3:"節";s:1:"N";s:3:"类";s:1:"N";s:3:"絛";s:1:"N";s:3:"練";s:1:"N";s:3:"缾";s:1:"N";s:3:"者";s:1:"N";s:3:"荒";s:1:"N";s:3:"華";s:1:"N";s:3:"蝹";s:1:"N";s:3:"襁";s:1:"N";s:3:"覆";s:1:"N";s:3:"視";s:1:"N";s:3:"調";s:1:"N";s:3:"諸";s:1:"N";s:3:"請";s:1:"N";s:3:"謁";s:1:"N";s:3:"諾";s:1:"N";s:3:"諭";s:1:"N";s:3:"謹";s:1:"N";s:3:"變";s:1:"N";s:3:"贈";s:1:"N";s:3:"輸";s:1:"N";s:3:"遲";s:1:"N";s:3:"醙";s:1:"N";s:3:"鉶";s:1:"N";s:3:"陼";s:1:"N";s:3:"難";s:1:"N";s:3:"靖";s:1:"N";s:3:"韛";s:1:"N";s:3:"響";s:1:"N";s:3:"頋";s:1:"N";s:3:"頻";s:1:"N";s:3:"鬒";s:1:"N";s:3:"龜";s:1:"N";s:3:"𢡊";s:1:"N";s:3:"𢡄";s:1:"N";s:3:"𣏕";s:1:"N";s:3:"㮝";s:1:"N";s:3:"䀘";s:1:"N";s:3:"䀹";s:1:"N";s:3:"𥉉";s:1:"N";s:3:"𥳐";s:1:"N";s:3:"𧻓";s:1:"N";s:3:"齃";s:1:"N";s:3:"龎";s:1:"N";s:3:"יִ";s:1:"N";s:3:"ײַ";s:1:"N";s:3:"שׁ";s:1:"N";s:3:"שׂ";s:1:"N";s:3:"שּׁ";s:1:"N";s:3:"שּׂ";s:1:"N";s:3:"אַ";s:1:"N";s:3:"אָ";s:1:"N";s:3:"אּ";s:1:"N";s:3:"בּ";s:1:"N";s:3:"גּ";s:1:"N";s:3:"דּ";s:1:"N";s:3:"הּ";s:1:"N";s:3:"וּ";s:1:"N";s:3:"זּ";s:1:"N";s:3:"טּ";s:1:"N";s:3:"יּ";s:1:"N";s:3:"ךּ";s:1:"N";s:3:"כּ";s:1:"N";s:3:"לּ";s:1:"N";s:3:"מּ";s:1:"N";s:3:"נּ";s:1:"N";s:3:"סּ";s:1:"N";s:3:"ףּ";s:1:"N";s:3:"פּ";s:1:"N";s:3:"צּ";s:1:"N";s:3:"קּ";s:1:"N";s:3:"רּ";s:1:"N";s:3:"שּ";s:1:"N";s:3:"תּ";s:1:"N";s:3:"וֹ";s:1:"N";s:3:"בֿ";s:1:"N";s:3:"כֿ";s:1:"N";s:3:"פֿ";s:1:"N";s:4:"𝅗𝅥";s:1:"N";s:4:"𝅘𝅥";s:1:"N";s:4:"𝅘𝅥𝅮";s:1:"N";s:4:"𝅘𝅥𝅯";s:1:"N";s:4:"𝅘𝅥𝅰";s:1:"N";s:4:"𝅘𝅥𝅱";s:1:"N";s:4:"𝅘𝅥𝅲";s:1:"N";s:4:"𝆹𝅥";s:1:"N";s:4:"𝆺𝅥";s:1:"N";s:4:"𝆹𝅥𝅮";s:1:"N";s:4:"𝆺𝅥𝅮";s:1:"N";s:4:"𝆹𝅥𝅯";s:1:"N";s:4:"𝆺𝅥𝅯";s:1:"N";s:4:"丽";s:1:"N";s:4:"丸";s:1:"N";s:4:"乁";s:1:"N";s:4:"𠄢";s:1:"N";s:4:"你";s:1:"N";s:4:"侮";s:1:"N";s:4:"侻";s:1:"N";s:4:"倂";s:1:"N";s:4:"偺";s:1:"N";s:4:"備";s:1:"N";s:4:"僧";s:1:"N";s:4:"像";s:1:"N";s:4:"㒞";s:1:"N";s:4:"𠘺";s:1:"N";s:4:"免";s:1:"N";s:4:"兔";s:1:"N";s:4:"兤";s:1:"N";s:4:"具";s:1:"N";s:4:"𠔜";s:1:"N";s:4:"㒹";s:1:"N";s:4:"內";s:1:"N";s:4:"再";s:1:"N";s:4:"𠕋";s:1:"N";s:4:"冗";s:1:"N";s:4:"冤";s:1:"N";s:4:"仌";s:1:"N";s:4:"冬";s:1:"N";s:4:"况";s:1:"N";s:4:"𩇟";s:1:"N";s:4:"凵";s:1:"N";s:4:"刃";s:1:"N";s:4:"㓟";s:1:"N";s:4:"刻";s:1:"N";s:4:"剆";s:1:"N";s:4:"割";s:1:"N";s:4:"剷";s:1:"N";s:4:"㔕";s:1:"N";s:4:"勇";s:1:"N";s:4:"勉";s:1:"N";s:4:"勤";s:1:"N";s:4:"勺";s:1:"N";s:4:"包";s:1:"N";s:4:"匆";s:1:"N";s:4:"北";s:1:"N";s:4:"卉";s:1:"N";s:4:"卑";s:1:"N";s:4:"博";s:1:"N";s:4:"即";s:1:"N";s:4:"卽";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"卿";s:1:"N";s:4:"𠨬";s:1:"N";s:4:"灰";s:1:"N";s:4:"及";s:1:"N";s:4:"叟";s:1:"N";s:4:"𠭣";s:1:"N";s:4:"叫";s:1:"N";s:4:"叱";s:1:"N";s:4:"吆";s:1:"N";s:4:"咞";s:1:"N";s:4:"吸";s:1:"N";s:4:"呈";s:1:"N";s:4:"周";s:1:"N";s:4:"咢";s:1:"N";s:4:"哶";s:1:"N";s:4:"唐";s:1:"N";s:4:"啓";s:1:"N";s:4:"啣";s:1:"N";s:4:"善";s:1:"N";s:4:"善";s:1:"N";s:4:"喙";s:1:"N";s:4:"喫";s:1:"N";s:4:"喳";s:1:"N";s:4:"嗂";s:1:"N";s:4:"圖";s:1:"N";s:4:"嘆";s:1:"N";s:4:"圗";s:1:"N";s:4:"噑";s:1:"N";s:4:"噴";s:1:"N";s:4:"切";s:1:"N";s:4:"壮";s:1:"N";s:4:"城";s:1:"N";s:4:"埴";s:1:"N";s:4:"堍";s:1:"N";s:4:"型";s:1:"N";s:4:"堲";s:1:"N";s:4:"報";s:1:"N";s:4:"墬";s:1:"N";s:4:"𡓤";s:1:"N";s:4:"売";s:1:"N";s:4:"壷";s:1:"N";s:4:"夆";s:1:"N";s:4:"多";s:1:"N";s:4:"夢";s:1:"N";s:4:"奢";s:1:"N";s:4:"𡚨";s:1:"N";s:4:"𡛪";s:1:"N";s:4:"姬";s:1:"N";s:4:"娛";s:1:"N";s:4:"娧";s:1:"N";s:4:"姘";s:1:"N";s:4:"婦";s:1:"N";s:4:"㛮";s:1:"N";s:4:"㛼";s:1:"N";s:4:"嬈";s:1:"N";s:4:"嬾";s:1:"N";s:4:"嬾";s:1:"N";s:4:"𡧈";s:1:"N";s:4:"寃";s:1:"N";s:4:"寘";s:1:"N";s:4:"寧";s:1:"N";s:4:"寳";s:1:"N";s:4:"𡬘";s:1:"N";s:4:"寿";s:1:"N";s:4:"将";s:1:"N";s:4:"当";s:1:"N";s:4:"尢";s:1:"N";s:4:"㞁";s:1:"N";s:4:"屠";s:1:"N";s:4:"屮";s:1:"N";s:4:"峀";s:1:"N";s:4:"岍";s:1:"N";s:4:"𡷤";s:1:"N";s:4:"嵃";s:1:"N";s:4:"𡷦";s:1:"N";s:4:"嵮";s:1:"N";s:4:"嵫";s:1:"N";s:4:"嵼";s:1:"N";s:4:"巡";s:1:"N";s:4:"巢";s:1:"N";s:4:"㠯";s:1:"N";s:4:"巽";s:1:"N";s:4:"帨";s:1:"N";s:4:"帽";s:1:"N";s:4:"幩";s:1:"N";s:4:"㡢";s:1:"N";s:4:"𢆃";s:1:"N";s:4:"㡼";s:1:"N";s:4:"庰";s:1:"N";s:4:"庳";s:1:"N";s:4:"庶";s:1:"N";s:4:"廊";s:1:"N";s:4:"𪎒";s:1:"N";s:4:"廾";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"𢌱";s:1:"N";s:4:"舁";s:1:"N";s:4:"弢";s:1:"N";s:4:"弢";s:1:"N";s:4:"㣇";s:1:"N";s:4:"𣊸";s:1:"N";s:4:"𦇚";s:1:"N";s:4:"形";s:1:"N";s:4:"彫";s:1:"N";s:4:"㣣";s:1:"N";s:4:"徚";s:1:"N";s:4:"忍";s:1:"N";s:4:"志";s:1:"N";s:4:"忹";s:1:"N";s:4:"悁";s:1:"N";s:4:"㤺";s:1:"N";s:4:"㤜";s:1:"N";s:4:"悔";s:1:"N";s:4:"𢛔";s:1:"N";s:4:"惇";s:1:"N";s:4:"慈";s:1:"N";s:4:"慌";s:1:"N";s:4:"慎";s:1:"N";s:4:"慌";s:1:"N";s:4:"慺";s:1:"N";s:4:"憎";s:1:"N";s:4:"憲";s:1:"N";s:4:"憤";s:1:"N";s:4:"憯";s:1:"N";s:4:"懞";s:1:"N";s:4:"懲";s:1:"N";s:4:"懶";s:1:"N";s:4:"成";s:1:"N";s:4:"戛";s:1:"N";s:4:"扝";s:1:"N";s:4:"抱";s:1:"N";s:4:"拔";s:1:"N";s:4:"捐";s:1:"N";s:4:"𢬌";s:1:"N";s:4:"挽";s:1:"N";s:4:"拼";s:1:"N";s:4:"捨";s:1:"N";s:4:"掃";s:1:"N";s:4:"揤";s:1:"N";s:4:"𢯱";s:1:"N";s:4:"搢";s:1:"N";s:4:"揅";s:1:"N";s:4:"掩";s:1:"N";s:4:"㨮";s:1:"N";s:4:"摩";s:1:"N";s:4:"摾";s:1:"N";s:4:"撝";s:1:"N";s:4:"摷";s:1:"N";s:4:"㩬";s:1:"N";s:4:"敏";s:1:"N";s:4:"敬";s:1:"N";s:4:"𣀊";s:1:"N";s:4:"旣";s:1:"N";s:4:"書";s:1:"N";s:4:"晉";s:1:"N";s:4:"㬙";s:1:"N";s:4:"暑";s:1:"N";s:4:"㬈";s:1:"N";s:4:"㫤";s:1:"N";s:4:"冒";s:1:"N";s:4:"冕";s:1:"N";s:4:"最";s:1:"N";s:4:"暜";s:1:"N";s:4:"肭";s:1:"N";s:4:"䏙";s:1:"N";s:4:"朗";s:1:"N";s:4:"望";s:1:"N";s:4:"朡";s:1:"N";s:4:"杞";s:1:"N";s:4:"杓";s:1:"N";s:4:"𣏃";s:1:"N";s:4:"㭉";s:1:"N";s:4:"柺";s:1:"N";s:4:"枅";s:1:"N";s:4:"桒";s:1:"N";s:4:"梅";s:1:"N";s:4:"𣑭";s:1:"N";s:4:"梎";s:1:"N";s:4:"栟";s:1:"N";s:4:"椔";s:1:"N";s:4:"㮝";s:1:"N";s:4:"楂";s:1:"N";s:4:"榣";s:1:"N";s:4:"槪";s:1:"N";s:4:"檨";s:1:"N";s:4:"𣚣";s:1:"N";s:4:"櫛";s:1:"N";s:4:"㰘";s:1:"N";s:4:"次";s:1:"N";s:4:"𣢧";s:1:"N";s:4:"歔";s:1:"N";s:4:"㱎";s:1:"N";s:4:"歲";s:1:"N";s:4:"殟";s:1:"N";s:4:"殺";s:1:"N";s:4:"殻";s:1:"N";s:4:"𣪍";s:1:"N";s:4:"𡴋";s:1:"N";s:4:"𣫺";s:1:"N";s:4:"汎";s:1:"N";s:4:"𣲼";s:1:"N";s:4:"沿";s:1:"N";s:4:"泍";s:1:"N";s:4:"汧";s:1:"N";s:4:"洖";s:1:"N";s:4:"派";s:1:"N";s:4:"海";s:1:"N";s:4:"流";s:1:"N";s:4:"浩";s:1:"N";s:4:"浸";s:1:"N";s:4:"涅";s:1:"N";s:4:"𣴞";s:1:"N";s:4:"洴";s:1:"N";s:4:"港";s:1:"N";s:4:"湮";s:1:"N";s:4:"㴳";s:1:"N";s:4:"滋";s:1:"N";s:4:"滇";s:1:"N";s:4:"𣻑";s:1:"N";s:4:"淹";s:1:"N";s:4:"潮";s:1:"N";s:4:"𣽞";s:1:"N";s:4:"𣾎";s:1:"N";s:4:"濆";s:1:"N";s:4:"瀹";s:1:"N";s:4:"瀞";s:1:"N";s:4:"瀛";s:1:"N";s:4:"㶖";s:1:"N";s:4:"灊";s:1:"N";s:4:"災";s:1:"N";s:4:"灷";s:1:"N";s:4:"炭";s:1:"N";s:4:"𠔥";s:1:"N";s:4:"煅";s:1:"N";s:4:"𤉣";s:1:"N";s:4:"熜";s:1:"N";s:4:"𤎫";s:1:"N";s:4:"爨";s:1:"N";s:4:"爵";s:1:"N";s:4:"牐";s:1:"N";s:4:"𤘈";s:1:"N";s:4:"犀";s:1:"N";s:4:"犕";s:1:"N";s:4:"𤜵";s:1:"N";s:4:"𤠔";s:1:"N";s:4:"獺";s:1:"N";s:4:"王";s:1:"N";s:4:"㺬";s:1:"N";s:4:"玥";s:1:"N";s:4:"㺸";s:1:"N";s:4:"㺸";s:1:"N";s:4:"瑇";s:1:"N";s:4:"瑜";s:1:"N";s:4:"瑱";s:1:"N";s:4:"璅";s:1:"N";s:4:"瓊";s:1:"N";s:4:"㼛";s:1:"N";s:4:"甤";s:1:"N";s:4:"𤰶";s:1:"N";s:4:"甾";s:1:"N";s:4:"𤲒";s:1:"N";s:4:"異";s:1:"N";s:4:"𢆟";s:1:"N";s:4:"瘐";s:1:"N";s:4:"𤾡";s:1:"N";s:4:"𤾸";s:1:"N";s:4:"𥁄";s:1:"N";s:4:"㿼";s:1:"N";s:4:"䀈";s:1:"N";s:4:"直";s:1:"N";s:4:"𥃳";s:1:"N";s:4:"𥃲";s:1:"N";s:4:"𥄙";s:1:"N";s:4:"𥄳";s:1:"N";s:4:"眞";s:1:"N";s:4:"真";s:1:"N";s:4:"真";s:1:"N";s:4:"睊";s:1:"N";s:4:"䀹";s:1:"N";s:4:"瞋";s:1:"N";s:4:"䁆";s:1:"N";s:4:"䂖";s:1:"N";s:4:"𥐝";s:1:"N";s:4:"硎";s:1:"N";s:4:"碌";s:1:"N";s:4:"磌";s:1:"N";s:4:"䃣";s:1:"N";s:4:"𥘦";s:1:"N";s:4:"祖";s:1:"N";s:4:"𥚚";s:1:"N";s:4:"𥛅";s:1:"N";s:4:"福";s:1:"N";s:4:"秫";s:1:"N";s:4:"䄯";s:1:"N";s:4:"穀";s:1:"N";s:4:"穊";s:1:"N";s:4:"穏";s:1:"N";s:4:"𥥼";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"𥪧";s:1:"N";s:4:"竮";s:1:"N";s:4:"䈂";s:1:"N";s:4:"𥮫";s:1:"N";s:4:"篆";s:1:"N";s:4:"築";s:1:"N";s:4:"䈧";s:1:"N";s:4:"𥲀";s:1:"N";s:4:"糒";s:1:"N";s:4:"䊠";s:1:"N";s:4:"糨";s:1:"N";s:4:"糣";s:1:"N";s:4:"紀";s:1:"N";s:4:"𥾆";s:1:"N";s:4:"絣";s:1:"N";s:4:"䌁";s:1:"N";s:4:"緇";s:1:"N";s:4:"縂";s:1:"N";s:4:"繅";s:1:"N";s:4:"䌴";s:1:"N";s:4:"𦈨";s:1:"N";s:4:"𦉇";s:1:"N";s:4:"䍙";s:1:"N";s:4:"𦋙";s:1:"N";s:4:"罺";s:1:"N";s:4:"𦌾";s:1:"N";s:4:"羕";s:1:"N";s:4:"翺";s:1:"N";s:4:"者";s:1:"N";s:4:"𦓚";s:1:"N";s:4:"𦔣";s:1:"N";s:4:"聠";s:1:"N";s:4:"𦖨";s:1:"N";s:4:"聰";s:1:"N";s:4:"𣍟";s:1:"N";s:4:"䏕";s:1:"N";s:4:"育";s:1:"N";s:4:"脃";s:1:"N";s:4:"䐋";s:1:"N";s:4:"脾";s:1:"N";s:4:"媵";s:1:"N";s:4:"𦞧";s:1:"N";s:4:"𦞵";s:1:"N";s:4:"𣎓";s:1:"N";s:4:"𣎜";s:1:"N";s:4:"舁";s:1:"N";s:4:"舄";s:1:"N";s:4:"辞";s:1:"N";s:4:"䑫";s:1:"N";s:4:"芑";s:1:"N";s:4:"芋";s:1:"N";s:4:"芝";s:1:"N";s:4:"劳";s:1:"N";s:4:"花";s:1:"N";s:4:"芳";s:1:"N";s:4:"芽";s:1:"N";s:4:"苦";s:1:"N";s:4:"𦬼";s:1:"N";s:4:"若";s:1:"N";s:4:"茝";s:1:"N";s:4:"荣";s:1:"N";s:4:"莭";s:1:"N";s:4:"茣";s:1:"N";s:4:"莽";s:1:"N";s:4:"菧";s:1:"N";s:4:"著";s:1:"N";s:4:"荓";s:1:"N";s:4:"菊";s:1:"N";s:4:"菌";s:1:"N";s:4:"菜";s:1:"N";s:4:"𦰶";s:1:"N";s:4:"𦵫";s:1:"N";s:4:"𦳕";s:1:"N";s:4:"䔫";s:1:"N";s:4:"蓱";s:1:"N";s:4:"蓳";s:1:"N";s:4:"蔖";s:1:"N";s:4:"𧏊";s:1:"N";s:4:"蕤";s:1:"N";s:4:"𦼬";s:1:"N";s:4:"䕝";s:1:"N";s:4:"䕡";s:1:"N";s:4:"𦾱";s:1:"N";s:4:"𧃒";s:1:"N";s:4:"䕫";s:1:"N";s:4:"虐";s:1:"N";s:4:"虜";s:1:"N";s:4:"虧";s:1:"N";s:4:"虩";s:1:"N";s:4:"蚩";s:1:"N";s:4:"蚈";s:1:"N";s:4:"蜎";s:1:"N";s:4:"蛢";s:1:"N";s:4:"蝹";s:1:"N";s:4:"蜨";s:1:"N";s:4:"蝫";s:1:"N";s:4:"螆";s:1:"N";s:4:"䗗";s:1:"N";s:4:"蟡";s:1:"N";s:4:"蠁";s:1:"N";s:4:"䗹";s:1:"N";s:4:"衠";s:1:"N";s:4:"衣";s:1:"N";s:4:"𧙧";s:1:"N";s:4:"裗";s:1:"N";s:4:"裞";s:1:"N";s:4:"䘵";s:1:"N";s:4:"裺";s:1:"N";s:4:"㒻";s:1:"N";s:4:"𧢮";s:1:"N";s:4:"𧥦";s:1:"N";s:4:"䚾";s:1:"N";s:4:"䛇";s:1:"N";s:4:"誠";s:1:"N";s:4:"諭";s:1:"N";s:4:"變";s:1:"N";s:4:"豕";s:1:"N";s:4:"𧲨";s:1:"N";s:4:"貫";s:1:"N";s:4:"賁";s:1:"N";s:4:"贛";s:1:"N";s:4:"起";s:1:"N";s:4:"𧼯";s:1:"N";s:4:"𠠄";s:1:"N";s:4:"跋";s:1:"N";s:4:"趼";s:1:"N";s:4:"跰";s:1:"N";s:4:"𠣞";s:1:"N";s:4:"軔";s:1:"N";s:4:"輸";s:1:"N";s:4:"𨗒";s:1:"N";s:4:"𨗭";s:1:"N";s:4:"邔";s:1:"N";s:4:"郱";s:1:"N";s:4:"鄑";s:1:"N";s:4:"𨜮";s:1:"N";s:4:"鄛";s:1:"N";s:4:"鈸";s:1:"N";s:4:"鋗";s:1:"N";s:4:"鋘";s:1:"N";s:4:"鉼";s:1:"N";s:4:"鏹";s:1:"N";s:4:"鐕";s:1:"N";s:4:"𨯺";s:1:"N";s:4:"開";s:1:"N";s:4:"䦕";s:1:"N";s:4:"閷";s:1:"N";s:4:"𨵷";s:1:"N";s:4:"䧦";s:1:"N";s:4:"雃";s:1:"N";s:4:"嶲";s:1:"N";s:4:"霣";s:1:"N";s:4:"𩅅";s:1:"N";s:4:"𩈚";s:1:"N";s:4:"䩮";s:1:"N";s:4:"䩶";s:1:"N";s:4:"韠";s:1:"N";s:4:"𩐊";s:1:"N";s:4:"䪲";s:1:"N";s:4:"𩒖";s:1:"N";s:4:"頋";s:1:"N";s:4:"頋";s:1:"N";s:4:"頩";s:1:"N";s:4:"𩖶";s:1:"N";s:4:"飢";s:1:"N";s:4:"䬳";s:1:"N";s:4:"餩";s:1:"N";s:4:"馧";s:1:"N";s:4:"駂";s:1:"N";s:4:"駾";s:1:"N";s:4:"䯎";s:1:"N";s:4:"𩬰";s:1:"N";s:4:"鬒";s:1:"N";s:4:"鱀";s:1:"N";s:4:"鳽";s:1:"N";s:4:"䳎";s:1:"N";s:4:"䳭";s:1:"N";s:4:"鵧";s:1:"N";s:4:"𪃎";s:1:"N";s:4:"䳸";s:1:"N";s:4:"𪄅";s:1:"N";s:4:"𪈎";s:1:"N";s:4:"𪊑";s:1:"N";s:4:"麻";s:1:"N";s:4:"䵖";s:1:"N";s:4:"黹";s:1:"N";s:4:"黾";s:1:"N";s:4:"鼅";s:1:"N";s:4:"鼏";s:1:"N";s:4:"鼖";s:1:"N";s:4:"鼻";s:1:"N";s:4:"𪘀";s:1:"N";s:2:"̀";s:1:"M";s:2:"́";s:1:"M";s:2:"̂";s:1:"M";s:2:"̃";s:1:"M";s:2:"̄";s:1:"M";s:2:"̆";s:1:"M";s:2:"̇";s:1:"M";s:2:"̈";s:1:"M";s:2:"̉";s:1:"M";s:2:"̊";s:1:"M";s:2:"̋";s:1:"M";s:2:"̌";s:1:"M";s:2:"̏";s:1:"M";s:2:"̑";s:1:"M";s:2:"̓";s:1:"M";s:2:"̔";s:1:"M";s:2:"̛";s:1:"M";s:2:"̣";s:1:"M";s:2:"̤";s:1:"M";s:2:"̥";s:1:"M";s:2:"̦";s:1:"M";s:2:"̧";s:1:"M";s:2:"̨";s:1:"M";s:2:"̭";s:1:"M";s:2:"̮";s:1:"M";s:2:"̰";s:1:"M";s:2:"̱";s:1:"M";s:2:"̸";s:1:"M";s:2:"͂";s:1:"M";s:2:"ͅ";s:1:"M";s:2:"ٓ";s:1:"M";s:2:"ٔ";s:1:"M";s:2:"ٕ";s:1:"M";s:3:"़";s:1:"M";s:3:"া";s:1:"M";s:3:"ৗ";s:1:"M";s:3:"ା";s:1:"M";s:3:"ୖ";s:1:"M";s:3:"ୗ";s:1:"M";s:3:"ா";s:1:"M";s:3:"ௗ";s:1:"M";s:3:"ౖ";s:1:"M";s:3:"ೂ";s:1:"M";s:3:"ೕ";s:1:"M";s:3:"ೖ";s:1:"M";s:3:"ാ";s:1:"M";s:3:"ൗ";s:1:"M";s:3:"්";s:1:"M";s:3:"ා";s:1:"M";s:3:"ෟ";s:1:"M";s:3:"ီ";s:1:"M";s:3:"ᅡ";s:1:"M";s:3:"ᅢ";s:1:"M";s:3:"ᅣ";s:1:"M";s:3:"ᅤ";s:1:"M";s:3:"ᅥ";s:1:"M";s:3:"ᅦ";s:1:"M";s:3:"ᅧ";s:1:"M";s:3:"ᅨ";s:1:"M";s:3:"ᅩ";s:1:"M";s:3:"ᅪ";s:1:"M";s:3:"ᅫ";s:1:"M";s:3:"ᅬ";s:1:"M";s:3:"ᅭ";s:1:"M";s:3:"ᅮ";s:1:"M";s:3:"ᅯ";s:1:"M";s:3:"ᅰ";s:1:"M";s:3:"ᅱ";s:1:"M";s:3:"ᅲ";s:1:"M";s:3:"ᅳ";s:1:"M";s:3:"ᅴ";s:1:"M";s:3:"ᅵ";s:1:"M";s:3:"ᆨ";s:1:"M";s:3:"ᆩ";s:1:"M";s:3:"ᆪ";s:1:"M";s:3:"ᆫ";s:1:"M";s:3:"ᆬ";s:1:"M";s:3:"ᆭ";s:1:"M";s:3:"ᆮ";s:1:"M";s:3:"ᆯ";s:1:"M";s:3:"ᆰ";s:1:"M";s:3:"ᆱ";s:1:"M";s:3:"ᆲ";s:1:"M";s:3:"ᆳ";s:1:"M";s:3:"ᆴ";s:1:"M";s:3:"ᆵ";s:1:"M";s:3:"ᆶ";s:1:"M";s:3:"ᆷ";s:1:"M";s:3:"ᆸ";s:1:"M";s:3:"ᆹ";s:1:"M";s:3:"ᆺ";s:1:"M";s:3:"ᆻ";s:1:"M";s:3:"ᆼ";s:1:"M";s:3:"ᆽ";s:1:"M";s:3:"ᆾ";s:1:"M";s:3:"ᆿ";s:1:"M";s:3:"ᇀ";s:1:"M";s:3:"ᇁ";s:1:"M";s:3:"ᇂ";s:1:"M";s:3:"ᬵ";s:1:"M";s:3:"゙";s:1:"M";s:3:"゚";s:1:"M";s:4:"𑂺";s:1:"M";}' );
+
diff --git a/vendor/wikimedia/utfnormal/src/UtfNormalDataK.inc b/vendor/wikimedia/utfnormal/src/UtfNormalDataK.inc
new file mode 100644
index 00000000..8f979e3b
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/src/UtfNormalDataK.inc
@@ -0,0 +1,11 @@
+<?php
+/**
+ * This file was automatically generated -- do not edit!
+ * Run UtfNormalGenerate.php to create this file again (make clean && make)
+ *
+ * @file
+ */
+// @codingStandardsIgnoreFile
+
+UtfNormal\Validator::$utfCompatibilityDecomp = unserialize( 'a:5559:{s:2:" ";s:1:" ";s:2:"¨";s:3:" ̈";s:2:"ª";s:1:"a";s:2:"¯";s:3:" ̄";s:2:"²";s:1:"2";s:2:"³";s:1:"3";s:2:"´";s:3:" ́";s:2:"µ";s:2:"μ";s:2:"¸";s:3:" ̧";s:2:"¹";s:1:"1";s:2:"º";s:1:"o";s:2:"¼";s:5:"1⁄4";s:2:"½";s:5:"1⁄2";s:2:"¾";s:5:"3⁄4";s:2:"À";s:3:"À";s:2:"Á";s:3:"Á";s:2:"Â";s:3:"Â";s:2:"Ã";s:3:"Ã";s:2:"Ä";s:3:"Ä";s:2:"Å";s:3:"Å";s:2:"Ç";s:3:"Ç";s:2:"È";s:3:"È";s:2:"É";s:3:"É";s:2:"Ê";s:3:"Ê";s:2:"Ë";s:3:"Ë";s:2:"Ì";s:3:"Ì";s:2:"Í";s:3:"Í";s:2:"Î";s:3:"Î";s:2:"Ï";s:3:"Ï";s:2:"Ñ";s:3:"Ñ";s:2:"Ò";s:3:"Ò";s:2:"Ó";s:3:"Ó";s:2:"Ô";s:3:"Ô";s:2:"Õ";s:3:"Õ";s:2:"Ö";s:3:"Ö";s:2:"Ù";s:3:"Ù";s:2:"Ú";s:3:"Ú";s:2:"Û";s:3:"Û";s:2:"Ü";s:3:"Ü";s:2:"Ý";s:3:"Ý";s:2:"à";s:3:"à";s:2:"á";s:3:"á";s:2:"â";s:3:"â";s:2:"ã";s:3:"ã";s:2:"ä";s:3:"ä";s:2:"å";s:3:"å";s:2:"ç";s:3:"ç";s:2:"è";s:3:"è";s:2:"é";s:3:"é";s:2:"ê";s:3:"ê";s:2:"ë";s:3:"ë";s:2:"ì";s:3:"ì";s:2:"í";s:3:"í";s:2:"î";s:3:"î";s:2:"ï";s:3:"ï";s:2:"ñ";s:3:"ñ";s:2:"ò";s:3:"ò";s:2:"ó";s:3:"ó";s:2:"ô";s:3:"ô";s:2:"õ";s:3:"õ";s:2:"ö";s:3:"ö";s:2:"ù";s:3:"ù";s:2:"ú";s:3:"ú";s:2:"û";s:3:"û";s:2:"ü";s:3:"ü";s:2:"ý";s:3:"ý";s:2:"ÿ";s:3:"ÿ";s:2:"Ā";s:3:"Ā";s:2:"ā";s:3:"ā";s:2:"Ă";s:3:"Ă";s:2:"ă";s:3:"ă";s:2:"Ą";s:3:"Ą";s:2:"ą";s:3:"ą";s:2:"Ć";s:3:"Ć";s:2:"ć";s:3:"ć";s:2:"Ĉ";s:3:"Ĉ";s:2:"ĉ";s:3:"ĉ";s:2:"Ċ";s:3:"Ċ";s:2:"ċ";s:3:"ċ";s:2:"Č";s:3:"Č";s:2:"č";s:3:"č";s:2:"Ď";s:3:"Ď";s:2:"ď";s:3:"ď";s:2:"Ē";s:3:"Ē";s:2:"ē";s:3:"ē";s:2:"Ĕ";s:3:"Ĕ";s:2:"ĕ";s:3:"ĕ";s:2:"Ė";s:3:"Ė";s:2:"ė";s:3:"ė";s:2:"Ę";s:3:"Ę";s:2:"ę";s:3:"ę";s:2:"Ě";s:3:"Ě";s:2:"ě";s:3:"ě";s:2:"Ĝ";s:3:"Ĝ";s:2:"ĝ";s:3:"ĝ";s:2:"Ğ";s:3:"Ğ";s:2:"ğ";s:3:"ğ";s:2:"Ġ";s:3:"Ġ";s:2:"ġ";s:3:"ġ";s:2:"Ģ";s:3:"Ģ";s:2:"ģ";s:3:"ģ";s:2:"Ĥ";s:3:"Ĥ";s:2:"ĥ";s:3:"ĥ";s:2:"Ĩ";s:3:"Ĩ";s:2:"ĩ";s:3:"ĩ";s:2:"Ī";s:3:"Ī";s:2:"ī";s:3:"ī";s:2:"Ĭ";s:3:"Ĭ";s:2:"ĭ";s:3:"ĭ";s:2:"Į";s:3:"Į";s:2:"į";s:3:"į";s:2:"İ";s:3:"İ";s:2:"IJ";s:2:"IJ";s:2:"ij";s:2:"ij";s:2:"Ĵ";s:3:"Ĵ";s:2:"ĵ";s:3:"ĵ";s:2:"Ķ";s:3:"Ķ";s:2:"ķ";s:3:"ķ";s:2:"Ĺ";s:3:"Ĺ";s:2:"ĺ";s:3:"ĺ";s:2:"Ļ";s:3:"Ļ";s:2:"ļ";s:3:"ļ";s:2:"Ľ";s:3:"Ľ";s:2:"ľ";s:3:"ľ";s:2:"Ŀ";s:3:"L·";s:2:"ŀ";s:3:"l·";s:2:"Ń";s:3:"Ń";s:2:"ń";s:3:"ń";s:2:"Ņ";s:3:"Ņ";s:2:"ņ";s:3:"ņ";s:2:"Ň";s:3:"Ň";s:2:"ň";s:3:"ň";s:2:"ʼn";s:3:"ʼn";s:2:"Ō";s:3:"Ō";s:2:"ō";s:3:"ō";s:2:"Ŏ";s:3:"Ŏ";s:2:"ŏ";s:3:"ŏ";s:2:"Ő";s:3:"Ő";s:2:"ő";s:3:"ő";s:2:"Ŕ";s:3:"Ŕ";s:2:"ŕ";s:3:"ŕ";s:2:"Ŗ";s:3:"Ŗ";s:2:"ŗ";s:3:"ŗ";s:2:"Ř";s:3:"Ř";s:2:"ř";s:3:"ř";s:2:"Ś";s:3:"Ś";s:2:"ś";s:3:"ś";s:2:"Ŝ";s:3:"Ŝ";s:2:"ŝ";s:3:"ŝ";s:2:"Ş";s:3:"Ş";s:2:"ş";s:3:"ş";s:2:"Š";s:3:"Š";s:2:"š";s:3:"š";s:2:"Ţ";s:3:"Ţ";s:2:"ţ";s:3:"ţ";s:2:"Ť";s:3:"Ť";s:2:"ť";s:3:"ť";s:2:"Ũ";s:3:"Ũ";s:2:"ũ";s:3:"ũ";s:2:"Ū";s:3:"Ū";s:2:"ū";s:3:"ū";s:2:"Ŭ";s:3:"Ŭ";s:2:"ŭ";s:3:"ŭ";s:2:"Ů";s:3:"Ů";s:2:"ů";s:3:"ů";s:2:"Ű";s:3:"Ű";s:2:"ű";s:3:"ű";s:2:"Ų";s:3:"Ų";s:2:"ų";s:3:"ų";s:2:"Ŵ";s:3:"Ŵ";s:2:"ŵ";s:3:"ŵ";s:2:"Ŷ";s:3:"Ŷ";s:2:"ŷ";s:3:"ŷ";s:2:"Ÿ";s:3:"Ÿ";s:2:"Ź";s:3:"Ź";s:2:"ź";s:3:"ź";s:2:"Ż";s:3:"Ż";s:2:"ż";s:3:"ż";s:2:"Ž";s:3:"Ž";s:2:"ž";s:3:"ž";s:2:"ſ";s:1:"s";s:2:"Ơ";s:3:"Ơ";s:2:"ơ";s:3:"ơ";s:2:"Ư";s:3:"Ư";s:2:"ư";s:3:"ư";s:2:"DŽ";s:4:"DŽ";s:2:"Dž";s:4:"Dž";s:2:"dž";s:4:"dž";s:2:"LJ";s:2:"LJ";s:2:"Lj";s:2:"Lj";s:2:"lj";s:2:"lj";s:2:"NJ";s:2:"NJ";s:2:"Nj";s:2:"Nj";s:2:"nj";s:2:"nj";s:2:"Ǎ";s:3:"Ǎ";s:2:"ǎ";s:3:"ǎ";s:2:"Ǐ";s:3:"Ǐ";s:2:"ǐ";s:3:"ǐ";s:2:"Ǒ";s:3:"Ǒ";s:2:"ǒ";s:3:"ǒ";s:2:"Ǔ";s:3:"Ǔ";s:2:"ǔ";s:3:"ǔ";s:2:"Ǖ";s:5:"Ǖ";s:2:"ǖ";s:5:"ǖ";s:2:"Ǘ";s:5:"Ǘ";s:2:"ǘ";s:5:"ǘ";s:2:"Ǚ";s:5:"Ǚ";s:2:"ǚ";s:5:"ǚ";s:2:"Ǜ";s:5:"Ǜ";s:2:"ǜ";s:5:"ǜ";s:2:"Ǟ";s:5:"Ǟ";s:2:"ǟ";s:5:"ǟ";s:2:"Ǡ";s:5:"Ǡ";s:2:"ǡ";s:5:"ǡ";s:2:"Ǣ";s:4:"Ǣ";s:2:"ǣ";s:4:"ǣ";s:2:"Ǧ";s:3:"Ǧ";s:2:"ǧ";s:3:"ǧ";s:2:"Ǩ";s:3:"Ǩ";s:2:"ǩ";s:3:"ǩ";s:2:"Ǫ";s:3:"Ǫ";s:2:"ǫ";s:3:"ǫ";s:2:"Ǭ";s:5:"Ǭ";s:2:"ǭ";s:5:"ǭ";s:2:"Ǯ";s:4:"Ǯ";s:2:"ǯ";s:4:"ǯ";s:2:"ǰ";s:3:"ǰ";s:2:"DZ";s:2:"DZ";s:2:"Dz";s:2:"Dz";s:2:"dz";s:2:"dz";s:2:"Ǵ";s:3:"Ǵ";s:2:"ǵ";s:3:"ǵ";s:2:"Ǹ";s:3:"Ǹ";s:2:"ǹ";s:3:"ǹ";s:2:"Ǻ";s:5:"Ǻ";s:2:"ǻ";s:5:"ǻ";s:2:"Ǽ";s:4:"Ǽ";s:2:"ǽ";s:4:"ǽ";s:2:"Ǿ";s:4:"Ǿ";s:2:"ǿ";s:4:"ǿ";s:2:"Ȁ";s:3:"Ȁ";s:2:"ȁ";s:3:"ȁ";s:2:"Ȃ";s:3:"Ȃ";s:2:"ȃ";s:3:"ȃ";s:2:"Ȅ";s:3:"Ȅ";s:2:"ȅ";s:3:"ȅ";s:2:"Ȇ";s:3:"Ȇ";s:2:"ȇ";s:3:"ȇ";s:2:"Ȉ";s:3:"Ȉ";s:2:"ȉ";s:3:"ȉ";s:2:"Ȋ";s:3:"Ȋ";s:2:"ȋ";s:3:"ȋ";s:2:"Ȍ";s:3:"Ȍ";s:2:"ȍ";s:3:"ȍ";s:2:"Ȏ";s:3:"Ȏ";s:2:"ȏ";s:3:"ȏ";s:2:"Ȑ";s:3:"Ȑ";s:2:"ȑ";s:3:"ȑ";s:2:"Ȓ";s:3:"Ȓ";s:2:"ȓ";s:3:"ȓ";s:2:"Ȕ";s:3:"Ȕ";s:2:"ȕ";s:3:"ȕ";s:2:"Ȗ";s:3:"Ȗ";s:2:"ȗ";s:3:"ȗ";s:2:"Ș";s:3:"Ș";s:2:"ș";s:3:"ș";s:2:"Ț";s:3:"Ț";s:2:"ț";s:3:"ț";s:2:"Ȟ";s:3:"Ȟ";s:2:"ȟ";s:3:"ȟ";s:2:"Ȧ";s:3:"Ȧ";s:2:"ȧ";s:3:"ȧ";s:2:"Ȩ";s:3:"Ȩ";s:2:"ȩ";s:3:"ȩ";s:2:"Ȫ";s:5:"Ȫ";s:2:"ȫ";s:5:"ȫ";s:2:"Ȭ";s:5:"Ȭ";s:2:"ȭ";s:5:"ȭ";s:2:"Ȯ";s:3:"Ȯ";s:2:"ȯ";s:3:"ȯ";s:2:"Ȱ";s:5:"Ȱ";s:2:"ȱ";s:5:"ȱ";s:2:"Ȳ";s:3:"Ȳ";s:2:"ȳ";s:3:"ȳ";s:2:"ʰ";s:1:"h";s:2:"ʱ";s:2:"ɦ";s:2:"ʲ";s:1:"j";s:2:"ʳ";s:1:"r";s:2:"ʴ";s:2:"ɹ";s:2:"ʵ";s:2:"ɻ";s:2:"ʶ";s:2:"ʁ";s:2:"ʷ";s:1:"w";s:2:"ʸ";s:1:"y";s:2:"˘";s:3:" ̆";s:2:"˙";s:3:" ̇";s:2:"˚";s:3:" ̊";s:2:"˛";s:3:" ̨";s:2:"˜";s:3:" ̃";s:2:"˝";s:3:" ̋";s:2:"ˠ";s:2:"ɣ";s:2:"ˡ";s:1:"l";s:2:"ˢ";s:1:"s";s:2:"ˣ";s:1:"x";s:2:"ˤ";s:2:"ʕ";s:2:"̀";s:2:"̀";s:2:"́";s:2:"́";s:2:"̓";s:2:"̓";s:2:"̈́";s:4:"̈́";s:2:"ʹ";s:2:"ʹ";s:2:"ͺ";s:3:" ͅ";s:2:";";s:1:";";s:2:"΄";s:3:" ́";s:2:"΅";s:5:" ̈́";s:2:"Ά";s:4:"Ά";s:2:"·";s:2:"·";s:2:"Έ";s:4:"Έ";s:2:"Ή";s:4:"Ή";s:2:"Ί";s:4:"Ί";s:2:"Ό";s:4:"Ό";s:2:"Ύ";s:4:"Ύ";s:2:"Ώ";s:4:"Ώ";s:2:"ΐ";s:6:"ΐ";s:2:"Ϊ";s:4:"Ϊ";s:2:"Ϋ";s:4:"Ϋ";s:2:"ά";s:4:"ά";s:2:"έ";s:4:"έ";s:2:"ή";s:4:"ή";s:2:"ί";s:4:"ί";s:2:"ΰ";s:6:"ΰ";s:2:"ϊ";s:4:"ϊ";s:2:"ϋ";s:4:"ϋ";s:2:"ό";s:4:"ό";s:2:"ύ";s:4:"ύ";s:2:"ώ";s:4:"ώ";s:2:"ϐ";s:2:"β";s:2:"ϑ";s:2:"θ";s:2:"ϒ";s:2:"Υ";s:2:"ϓ";s:4:"Ύ";s:2:"ϔ";s:4:"Ϋ";s:2:"ϕ";s:2:"φ";s:2:"ϖ";s:2:"π";s:2:"ϰ";s:2:"κ";s:2:"ϱ";s:2:"ρ";s:2:"ϲ";s:2:"ς";s:2:"ϴ";s:2:"Θ";s:2:"ϵ";s:2:"ε";s:2:"Ϲ";s:2:"Σ";s:2:"Ѐ";s:4:"Ѐ";s:2:"Ё";s:4:"Ё";s:2:"Ѓ";s:4:"Ѓ";s:2:"Ї";s:4:"Ї";s:2:"Ќ";s:4:"Ќ";s:2:"Ѝ";s:4:"Ѝ";s:2:"Ў";s:4:"Ў";s:2:"Й";s:4:"Й";s:2:"й";s:4:"й";s:2:"ѐ";s:4:"ѐ";s:2:"ё";s:4:"ё";s:2:"ѓ";s:4:"ѓ";s:2:"ї";s:4:"ї";s:2:"ќ";s:4:"ќ";s:2:"ѝ";s:4:"ѝ";s:2:"ў";s:4:"ў";s:2:"Ѷ";s:4:"Ѷ";s:2:"ѷ";s:4:"ѷ";s:2:"Ӂ";s:4:"Ӂ";s:2:"ӂ";s:4:"ӂ";s:2:"Ӑ";s:4:"Ӑ";s:2:"ӑ";s:4:"ӑ";s:2:"Ӓ";s:4:"Ӓ";s:2:"ӓ";s:4:"ӓ";s:2:"Ӗ";s:4:"Ӗ";s:2:"ӗ";s:4:"ӗ";s:2:"Ӛ";s:4:"Ӛ";s:2:"ӛ";s:4:"ӛ";s:2:"Ӝ";s:4:"Ӝ";s:2:"ӝ";s:4:"ӝ";s:2:"Ӟ";s:4:"Ӟ";s:2:"ӟ";s:4:"ӟ";s:2:"Ӣ";s:4:"Ӣ";s:2:"ӣ";s:4:"ӣ";s:2:"Ӥ";s:4:"Ӥ";s:2:"ӥ";s:4:"ӥ";s:2:"Ӧ";s:4:"Ӧ";s:2:"ӧ";s:4:"ӧ";s:2:"Ӫ";s:4:"Ӫ";s:2:"ӫ";s:4:"ӫ";s:2:"Ӭ";s:4:"Ӭ";s:2:"ӭ";s:4:"ӭ";s:2:"Ӯ";s:4:"Ӯ";s:2:"ӯ";s:4:"ӯ";s:2:"Ӱ";s:4:"Ӱ";s:2:"ӱ";s:4:"ӱ";s:2:"Ӳ";s:4:"Ӳ";s:2:"ӳ";s:4:"ӳ";s:2:"Ӵ";s:4:"Ӵ";s:2:"ӵ";s:4:"ӵ";s:2:"Ӹ";s:4:"Ӹ";s:2:"ӹ";s:4:"ӹ";s:2:"և";s:4:"եւ";s:2:"آ";s:4:"آ";s:2:"أ";s:4:"أ";s:2:"ؤ";s:4:"ؤ";s:2:"إ";s:4:"إ";s:2:"ئ";s:4:"ئ";s:2:"ٵ";s:4:"اٴ";s:2:"ٶ";s:4:"وٴ";s:2:"ٷ";s:4:"ۇٴ";s:2:"ٸ";s:4:"يٴ";s:2:"ۀ";s:4:"ۀ";s:2:"ۂ";s:4:"ۂ";s:2:"ۓ";s:4:"ۓ";s:3:"ऩ";s:6:"ऩ";s:3:"ऱ";s:6:"ऱ";s:3:"ऴ";s:6:"ऴ";s:3:"क़";s:6:"क़";s:3:"ख़";s:6:"ख़";s:3:"ग़";s:6:"ग़";s:3:"ज़";s:6:"ज़";s:3:"ड़";s:6:"ड़";s:3:"ढ़";s:6:"ढ़";s:3:"फ़";s:6:"फ़";s:3:"य़";s:6:"य़";s:3:"ো";s:6:"ো";s:3:"ৌ";s:6:"ৌ";s:3:"ড়";s:6:"ড়";s:3:"ঢ়";s:6:"ঢ়";s:3:"য়";s:6:"য়";s:3:"ਲ਼";s:6:"ਲ਼";s:3:"ਸ਼";s:6:"ਸ਼";s:3:"ਖ਼";s:6:"ਖ਼";s:3:"ਗ਼";s:6:"ਗ਼";s:3:"ਜ਼";s:6:"ਜ਼";s:3:"ਫ਼";s:6:"ਫ਼";s:3:"ୈ";s:6:"ୈ";s:3:"ୋ";s:6:"ୋ";s:3:"ୌ";s:6:"ୌ";s:3:"ଡ଼";s:6:"ଡ଼";s:3:"ଢ଼";s:6:"ଢ଼";s:3:"ஔ";s:6:"ஔ";s:3:"ொ";s:6:"ொ";s:3:"ோ";s:6:"ோ";s:3:"ௌ";s:6:"ௌ";s:3:"ై";s:6:"ై";s:3:"ೀ";s:6:"ೀ";s:3:"ೇ";s:6:"ೇ";s:3:"ೈ";s:6:"ೈ";s:3:"ೊ";s:6:"ೊ";s:3:"ೋ";s:9:"ೋ";s:3:"ൊ";s:6:"ൊ";s:3:"ോ";s:6:"ോ";s:3:"ൌ";s:6:"ൌ";s:3:"ේ";s:6:"ේ";s:3:"ො";s:6:"ො";s:3:"ෝ";s:9:"ෝ";s:3:"ෞ";s:6:"ෞ";s:3:"ำ";s:6:"ํา";s:3:"ຳ";s:6:"ໍາ";s:3:"ໜ";s:6:"ຫນ";s:3:"ໝ";s:6:"ຫມ";s:3:"༌";s:3:"་";s:3:"གྷ";s:6:"གྷ";s:3:"ཌྷ";s:6:"ཌྷ";s:3:"དྷ";s:6:"དྷ";s:3:"བྷ";s:6:"བྷ";s:3:"ཛྷ";s:6:"ཛྷ";s:3:"ཀྵ";s:6:"ཀྵ";s:3:"ཱི";s:6:"ཱི";s:3:"ཱུ";s:6:"ཱུ";s:3:"ྲྀ";s:6:"ྲྀ";s:3:"ཷ";s:9:"ྲཱྀ";s:3:"ླྀ";s:6:"ླྀ";s:3:"ཹ";s:9:"ླཱྀ";s:3:"ཱྀ";s:6:"ཱྀ";s:3:"ྒྷ";s:6:"ྒྷ";s:3:"ྜྷ";s:6:"ྜྷ";s:3:"ྡྷ";s:6:"ྡྷ";s:3:"ྦྷ";s:6:"ྦྷ";s:3:"ྫྷ";s:6:"ྫྷ";s:3:"ྐྵ";s:6:"ྐྵ";s:3:"ဦ";s:6:"ဦ";s:3:"ჼ";s:3:"ნ";s:3:"ᬆ";s:6:"ᬆ";s:3:"ᬈ";s:6:"ᬈ";s:3:"ᬊ";s:6:"ᬊ";s:3:"ᬌ";s:6:"ᬌ";s:3:"ᬎ";s:6:"ᬎ";s:3:"ᬒ";s:6:"ᬒ";s:3:"ᬻ";s:6:"ᬻ";s:3:"ᬽ";s:6:"ᬽ";s:3:"ᭀ";s:6:"ᭀ";s:3:"ᭁ";s:6:"ᭁ";s:3:"ᭃ";s:6:"ᭃ";s:3:"ᴬ";s:1:"A";s:3:"ᴭ";s:2:"Æ";s:3:"ᴮ";s:1:"B";s:3:"ᴰ";s:1:"D";s:3:"ᴱ";s:1:"E";s:3:"ᴲ";s:2:"Ǝ";s:3:"ᴳ";s:1:"G";s:3:"ᴴ";s:1:"H";s:3:"ᴵ";s:1:"I";s:3:"ᴶ";s:1:"J";s:3:"ᴷ";s:1:"K";s:3:"ᴸ";s:1:"L";s:3:"ᴹ";s:1:"M";s:3:"ᴺ";s:1:"N";s:3:"ᴼ";s:1:"O";s:3:"ᴽ";s:2:"Ȣ";s:3:"ᴾ";s:1:"P";s:3:"ᴿ";s:1:"R";s:3:"ᵀ";s:1:"T";s:3:"ᵁ";s:1:"U";s:3:"ᵂ";s:1:"W";s:3:"ᵃ";s:1:"a";s:3:"ᵄ";s:2:"ɐ";s:3:"ᵅ";s:2:"ɑ";s:3:"ᵆ";s:3:"ᴂ";s:3:"ᵇ";s:1:"b";s:3:"ᵈ";s:1:"d";s:3:"ᵉ";s:1:"e";s:3:"ᵊ";s:2:"ə";s:3:"ᵋ";s:2:"ɛ";s:3:"ᵌ";s:2:"ɜ";s:3:"ᵍ";s:1:"g";s:3:"ᵏ";s:1:"k";s:3:"ᵐ";s:1:"m";s:3:"ᵑ";s:2:"ŋ";s:3:"ᵒ";s:1:"o";s:3:"ᵓ";s:2:"ɔ";s:3:"ᵔ";s:3:"ᴖ";s:3:"ᵕ";s:3:"ᴗ";s:3:"ᵖ";s:1:"p";s:3:"ᵗ";s:1:"t";s:3:"ᵘ";s:1:"u";s:3:"ᵙ";s:3:"ᴝ";s:3:"ᵚ";s:2:"ɯ";s:3:"ᵛ";s:1:"v";s:3:"ᵜ";s:3:"ᴥ";s:3:"ᵝ";s:2:"β";s:3:"ᵞ";s:2:"γ";s:3:"ᵟ";s:2:"δ";s:3:"ᵠ";s:2:"φ";s:3:"ᵡ";s:2:"χ";s:3:"ᵢ";s:1:"i";s:3:"ᵣ";s:1:"r";s:3:"ᵤ";s:1:"u";s:3:"ᵥ";s:1:"v";s:3:"ᵦ";s:2:"β";s:3:"ᵧ";s:2:"γ";s:3:"ᵨ";s:2:"ρ";s:3:"ᵩ";s:2:"φ";s:3:"ᵪ";s:2:"χ";s:3:"ᵸ";s:2:"н";s:3:"ᶛ";s:2:"ɒ";s:3:"ᶜ";s:1:"c";s:3:"ᶝ";s:2:"ɕ";s:3:"ᶞ";s:2:"ð";s:3:"ᶟ";s:2:"ɜ";s:3:"ᶠ";s:1:"f";s:3:"ᶡ";s:2:"ɟ";s:3:"ᶢ";s:2:"ɡ";s:3:"ᶣ";s:2:"ɥ";s:3:"ᶤ";s:2:"ɨ";s:3:"ᶥ";s:2:"ɩ";s:3:"ᶦ";s:2:"ɪ";s:3:"ᶧ";s:3:"ᵻ";s:3:"ᶨ";s:2:"ʝ";s:3:"ᶩ";s:2:"ɭ";s:3:"ᶪ";s:3:"ᶅ";s:3:"ᶫ";s:2:"ʟ";s:3:"ᶬ";s:2:"ɱ";s:3:"ᶭ";s:2:"ɰ";s:3:"ᶮ";s:2:"ɲ";s:3:"ᶯ";s:2:"ɳ";s:3:"ᶰ";s:2:"ɴ";s:3:"ᶱ";s:2:"ɵ";s:3:"ᶲ";s:2:"ɸ";s:3:"ᶳ";s:2:"ʂ";s:3:"ᶴ";s:2:"ʃ";s:3:"ᶵ";s:2:"ƫ";s:3:"ᶶ";s:2:"ʉ";s:3:"ᶷ";s:2:"ʊ";s:3:"ᶸ";s:3:"ᴜ";s:3:"ᶹ";s:2:"ʋ";s:3:"ᶺ";s:2:"ʌ";s:3:"ᶻ";s:1:"z";s:3:"ᶼ";s:2:"ʐ";s:3:"ᶽ";s:2:"ʑ";s:3:"ᶾ";s:2:"ʒ";s:3:"ᶿ";s:2:"θ";s:3:"Ḁ";s:3:"Ḁ";s:3:"ḁ";s:3:"ḁ";s:3:"Ḃ";s:3:"Ḃ";s:3:"ḃ";s:3:"ḃ";s:3:"Ḅ";s:3:"Ḅ";s:3:"ḅ";s:3:"ḅ";s:3:"Ḇ";s:3:"Ḇ";s:3:"ḇ";s:3:"ḇ";s:3:"Ḉ";s:5:"Ḉ";s:3:"ḉ";s:5:"ḉ";s:3:"Ḋ";s:3:"Ḋ";s:3:"ḋ";s:3:"ḋ";s:3:"Ḍ";s:3:"Ḍ";s:3:"ḍ";s:3:"ḍ";s:3:"Ḏ";s:3:"Ḏ";s:3:"ḏ";s:3:"ḏ";s:3:"Ḑ";s:3:"Ḑ";s:3:"ḑ";s:3:"ḑ";s:3:"Ḓ";s:3:"Ḓ";s:3:"ḓ";s:3:"ḓ";s:3:"Ḕ";s:5:"Ḕ";s:3:"ḕ";s:5:"ḕ";s:3:"Ḗ";s:5:"Ḗ";s:3:"ḗ";s:5:"ḗ";s:3:"Ḙ";s:3:"Ḙ";s:3:"ḙ";s:3:"ḙ";s:3:"Ḛ";s:3:"Ḛ";s:3:"ḛ";s:3:"ḛ";s:3:"Ḝ";s:5:"Ḝ";s:3:"ḝ";s:5:"ḝ";s:3:"Ḟ";s:3:"Ḟ";s:3:"ḟ";s:3:"ḟ";s:3:"Ḡ";s:3:"Ḡ";s:3:"ḡ";s:3:"ḡ";s:3:"Ḣ";s:3:"Ḣ";s:3:"ḣ";s:3:"ḣ";s:3:"Ḥ";s:3:"Ḥ";s:3:"ḥ";s:3:"ḥ";s:3:"Ḧ";s:3:"Ḧ";s:3:"ḧ";s:3:"ḧ";s:3:"Ḩ";s:3:"Ḩ";s:3:"ḩ";s:3:"ḩ";s:3:"Ḫ";s:3:"Ḫ";s:3:"ḫ";s:3:"ḫ";s:3:"Ḭ";s:3:"Ḭ";s:3:"ḭ";s:3:"ḭ";s:3:"Ḯ";s:5:"Ḯ";s:3:"ḯ";s:5:"ḯ";s:3:"Ḱ";s:3:"Ḱ";s:3:"ḱ";s:3:"ḱ";s:3:"Ḳ";s:3:"Ḳ";s:3:"ḳ";s:3:"ḳ";s:3:"Ḵ";s:3:"Ḵ";s:3:"ḵ";s:3:"ḵ";s:3:"Ḷ";s:3:"Ḷ";s:3:"ḷ";s:3:"ḷ";s:3:"Ḹ";s:5:"Ḹ";s:3:"ḹ";s:5:"ḹ";s:3:"Ḻ";s:3:"Ḻ";s:3:"ḻ";s:3:"ḻ";s:3:"Ḽ";s:3:"Ḽ";s:3:"ḽ";s:3:"ḽ";s:3:"Ḿ";s:3:"Ḿ";s:3:"ḿ";s:3:"ḿ";s:3:"Ṁ";s:3:"Ṁ";s:3:"ṁ";s:3:"ṁ";s:3:"Ṃ";s:3:"Ṃ";s:3:"ṃ";s:3:"ṃ";s:3:"Ṅ";s:3:"Ṅ";s:3:"ṅ";s:3:"ṅ";s:3:"Ṇ";s:3:"Ṇ";s:3:"ṇ";s:3:"ṇ";s:3:"Ṉ";s:3:"Ṉ";s:3:"ṉ";s:3:"ṉ";s:3:"Ṋ";s:3:"Ṋ";s:3:"ṋ";s:3:"ṋ";s:3:"Ṍ";s:5:"Ṍ";s:3:"ṍ";s:5:"ṍ";s:3:"Ṏ";s:5:"Ṏ";s:3:"ṏ";s:5:"ṏ";s:3:"Ṑ";s:5:"Ṑ";s:3:"ṑ";s:5:"ṑ";s:3:"Ṓ";s:5:"Ṓ";s:3:"ṓ";s:5:"ṓ";s:3:"Ṕ";s:3:"Ṕ";s:3:"ṕ";s:3:"ṕ";s:3:"Ṗ";s:3:"Ṗ";s:3:"ṗ";s:3:"ṗ";s:3:"Ṙ";s:3:"Ṙ";s:3:"ṙ";s:3:"ṙ";s:3:"Ṛ";s:3:"Ṛ";s:3:"ṛ";s:3:"ṛ";s:3:"Ṝ";s:5:"Ṝ";s:3:"ṝ";s:5:"ṝ";s:3:"Ṟ";s:3:"Ṟ";s:3:"ṟ";s:3:"ṟ";s:3:"Ṡ";s:3:"Ṡ";s:3:"ṡ";s:3:"ṡ";s:3:"Ṣ";s:3:"Ṣ";s:3:"ṣ";s:3:"ṣ";s:3:"Ṥ";s:5:"Ṥ";s:3:"ṥ";s:5:"ṥ";s:3:"Ṧ";s:5:"Ṧ";s:3:"ṧ";s:5:"ṧ";s:3:"Ṩ";s:5:"Ṩ";s:3:"ṩ";s:5:"ṩ";s:3:"Ṫ";s:3:"Ṫ";s:3:"ṫ";s:3:"ṫ";s:3:"Ṭ";s:3:"Ṭ";s:3:"ṭ";s:3:"ṭ";s:3:"Ṯ";s:3:"Ṯ";s:3:"ṯ";s:3:"ṯ";s:3:"Ṱ";s:3:"Ṱ";s:3:"ṱ";s:3:"ṱ";s:3:"Ṳ";s:3:"Ṳ";s:3:"ṳ";s:3:"ṳ";s:3:"Ṵ";s:3:"Ṵ";s:3:"ṵ";s:3:"ṵ";s:3:"Ṷ";s:3:"Ṷ";s:3:"ṷ";s:3:"ṷ";s:3:"Ṹ";s:5:"Ṹ";s:3:"ṹ";s:5:"ṹ";s:3:"Ṻ";s:5:"Ṻ";s:3:"ṻ";s:5:"ṻ";s:3:"Ṽ";s:3:"Ṽ";s:3:"ṽ";s:3:"ṽ";s:3:"Ṿ";s:3:"Ṿ";s:3:"ṿ";s:3:"ṿ";s:3:"Ẁ";s:3:"Ẁ";s:3:"ẁ";s:3:"ẁ";s:3:"Ẃ";s:3:"Ẃ";s:3:"ẃ";s:3:"ẃ";s:3:"Ẅ";s:3:"Ẅ";s:3:"ẅ";s:3:"ẅ";s:3:"Ẇ";s:3:"Ẇ";s:3:"ẇ";s:3:"ẇ";s:3:"Ẉ";s:3:"Ẉ";s:3:"ẉ";s:3:"ẉ";s:3:"Ẋ";s:3:"Ẋ";s:3:"ẋ";s:3:"ẋ";s:3:"Ẍ";s:3:"Ẍ";s:3:"ẍ";s:3:"ẍ";s:3:"Ẏ";s:3:"Ẏ";s:3:"ẏ";s:3:"ẏ";s:3:"Ẑ";s:3:"Ẑ";s:3:"ẑ";s:3:"ẑ";s:3:"Ẓ";s:3:"Ẓ";s:3:"ẓ";s:3:"ẓ";s:3:"Ẕ";s:3:"Ẕ";s:3:"ẕ";s:3:"ẕ";s:3:"ẖ";s:3:"ẖ";s:3:"ẗ";s:3:"ẗ";s:3:"ẘ";s:3:"ẘ";s:3:"ẙ";s:3:"ẙ";s:3:"ẚ";s:3:"aʾ";s:3:"ẛ";s:3:"ṡ";s:3:"Ạ";s:3:"Ạ";s:3:"ạ";s:3:"ạ";s:3:"Ả";s:3:"Ả";s:3:"ả";s:3:"ả";s:3:"Ấ";s:5:"Ấ";s:3:"ấ";s:5:"ấ";s:3:"Ầ";s:5:"Ầ";s:3:"ầ";s:5:"ầ";s:3:"Ẩ";s:5:"Ẩ";s:3:"ẩ";s:5:"ẩ";s:3:"Ẫ";s:5:"Ẫ";s:3:"ẫ";s:5:"ẫ";s:3:"Ậ";s:5:"Ậ";s:3:"ậ";s:5:"ậ";s:3:"Ắ";s:5:"Ắ";s:3:"ắ";s:5:"ắ";s:3:"Ằ";s:5:"Ằ";s:3:"ằ";s:5:"ằ";s:3:"Ẳ";s:5:"Ẳ";s:3:"ẳ";s:5:"ẳ";s:3:"Ẵ";s:5:"Ẵ";s:3:"ẵ";s:5:"ẵ";s:3:"Ặ";s:5:"Ặ";s:3:"ặ";s:5:"ặ";s:3:"Ẹ";s:3:"Ẹ";s:3:"ẹ";s:3:"ẹ";s:3:"Ẻ";s:3:"Ẻ";s:3:"ẻ";s:3:"ẻ";s:3:"Ẽ";s:3:"Ẽ";s:3:"ẽ";s:3:"ẽ";s:3:"Ế";s:5:"Ế";s:3:"ế";s:5:"ế";s:3:"Ề";s:5:"Ề";s:3:"ề";s:5:"ề";s:3:"Ể";s:5:"Ể";s:3:"ể";s:5:"ể";s:3:"Ễ";s:5:"Ễ";s:3:"ễ";s:5:"ễ";s:3:"Ệ";s:5:"Ệ";s:3:"ệ";s:5:"ệ";s:3:"Ỉ";s:3:"Ỉ";s:3:"ỉ";s:3:"ỉ";s:3:"Ị";s:3:"Ị";s:3:"ị";s:3:"ị";s:3:"Ọ";s:3:"Ọ";s:3:"ọ";s:3:"ọ";s:3:"Ỏ";s:3:"Ỏ";s:3:"ỏ";s:3:"ỏ";s:3:"Ố";s:5:"Ố";s:3:"ố";s:5:"ố";s:3:"Ồ";s:5:"Ồ";s:3:"ồ";s:5:"ồ";s:3:"Ổ";s:5:"Ổ";s:3:"ổ";s:5:"ổ";s:3:"Ỗ";s:5:"Ỗ";s:3:"ỗ";s:5:"ỗ";s:3:"Ộ";s:5:"Ộ";s:3:"ộ";s:5:"ộ";s:3:"Ớ";s:5:"Ớ";s:3:"ớ";s:5:"ớ";s:3:"Ờ";s:5:"Ờ";s:3:"ờ";s:5:"ờ";s:3:"Ở";s:5:"Ở";s:3:"ở";s:5:"ở";s:3:"Ỡ";s:5:"Ỡ";s:3:"ỡ";s:5:"ỡ";s:3:"Ợ";s:5:"Ợ";s:3:"ợ";s:5:"ợ";s:3:"Ụ";s:3:"Ụ";s:3:"ụ";s:3:"ụ";s:3:"Ủ";s:3:"Ủ";s:3:"ủ";s:3:"ủ";s:3:"Ứ";s:5:"Ứ";s:3:"ứ";s:5:"ứ";s:3:"Ừ";s:5:"Ừ";s:3:"ừ";s:5:"ừ";s:3:"Ử";s:5:"Ử";s:3:"ử";s:5:"ử";s:3:"Ữ";s:5:"Ữ";s:3:"ữ";s:5:"ữ";s:3:"Ự";s:5:"Ự";s:3:"ự";s:5:"ự";s:3:"Ỳ";s:3:"Ỳ";s:3:"ỳ";s:3:"ỳ";s:3:"Ỵ";s:3:"Ỵ";s:3:"ỵ";s:3:"ỵ";s:3:"Ỷ";s:3:"Ỷ";s:3:"ỷ";s:3:"ỷ";s:3:"Ỹ";s:3:"Ỹ";s:3:"ỹ";s:3:"ỹ";s:3:"ἀ";s:4:"ἀ";s:3:"ἁ";s:4:"ἁ";s:3:"ἂ";s:6:"ἂ";s:3:"ἃ";s:6:"ἃ";s:3:"ἄ";s:6:"ἄ";s:3:"ἅ";s:6:"ἅ";s:3:"ἆ";s:6:"ἆ";s:3:"ἇ";s:6:"ἇ";s:3:"Ἀ";s:4:"Ἀ";s:3:"Ἁ";s:4:"Ἁ";s:3:"Ἂ";s:6:"Ἂ";s:3:"Ἃ";s:6:"Ἃ";s:3:"Ἄ";s:6:"Ἄ";s:3:"Ἅ";s:6:"Ἅ";s:3:"Ἆ";s:6:"Ἆ";s:3:"Ἇ";s:6:"Ἇ";s:3:"ἐ";s:4:"ἐ";s:3:"ἑ";s:4:"ἑ";s:3:"ἒ";s:6:"ἒ";s:3:"ἓ";s:6:"ἓ";s:3:"ἔ";s:6:"ἔ";s:3:"ἕ";s:6:"ἕ";s:3:"Ἐ";s:4:"Ἐ";s:3:"Ἑ";s:4:"Ἑ";s:3:"Ἒ";s:6:"Ἒ";s:3:"Ἓ";s:6:"Ἓ";s:3:"Ἔ";s:6:"Ἔ";s:3:"Ἕ";s:6:"Ἕ";s:3:"ἠ";s:4:"ἠ";s:3:"ἡ";s:4:"ἡ";s:3:"ἢ";s:6:"ἢ";s:3:"ἣ";s:6:"ἣ";s:3:"ἤ";s:6:"ἤ";s:3:"ἥ";s:6:"ἥ";s:3:"ἦ";s:6:"ἦ";s:3:"ἧ";s:6:"ἧ";s:3:"Ἠ";s:4:"Ἠ";s:3:"Ἡ";s:4:"Ἡ";s:3:"Ἢ";s:6:"Ἢ";s:3:"Ἣ";s:6:"Ἣ";s:3:"Ἤ";s:6:"Ἤ";s:3:"Ἥ";s:6:"Ἥ";s:3:"Ἦ";s:6:"Ἦ";s:3:"Ἧ";s:6:"Ἧ";s:3:"ἰ";s:4:"ἰ";s:3:"ἱ";s:4:"ἱ";s:3:"ἲ";s:6:"ἲ";s:3:"ἳ";s:6:"ἳ";s:3:"ἴ";s:6:"ἴ";s:3:"ἵ";s:6:"ἵ";s:3:"ἶ";s:6:"ἶ";s:3:"ἷ";s:6:"ἷ";s:3:"Ἰ";s:4:"Ἰ";s:3:"Ἱ";s:4:"Ἱ";s:3:"Ἲ";s:6:"Ἲ";s:3:"Ἳ";s:6:"Ἳ";s:3:"Ἴ";s:6:"Ἴ";s:3:"Ἵ";s:6:"Ἵ";s:3:"Ἶ";s:6:"Ἶ";s:3:"Ἷ";s:6:"Ἷ";s:3:"ὀ";s:4:"ὀ";s:3:"ὁ";s:4:"ὁ";s:3:"ὂ";s:6:"ὂ";s:3:"ὃ";s:6:"ὃ";s:3:"ὄ";s:6:"ὄ";s:3:"ὅ";s:6:"ὅ";s:3:"Ὀ";s:4:"Ὀ";s:3:"Ὁ";s:4:"Ὁ";s:3:"Ὂ";s:6:"Ὂ";s:3:"Ὃ";s:6:"Ὃ";s:3:"Ὄ";s:6:"Ὄ";s:3:"Ὅ";s:6:"Ὅ";s:3:"ὐ";s:4:"ὐ";s:3:"ὑ";s:4:"ὑ";s:3:"ὒ";s:6:"ὒ";s:3:"ὓ";s:6:"ὓ";s:3:"ὔ";s:6:"ὔ";s:3:"ὕ";s:6:"ὕ";s:3:"ὖ";s:6:"ὖ";s:3:"ὗ";s:6:"ὗ";s:3:"Ὑ";s:4:"Ὑ";s:3:"Ὓ";s:6:"Ὓ";s:3:"Ὕ";s:6:"Ὕ";s:3:"Ὗ";s:6:"Ὗ";s:3:"ὠ";s:4:"ὠ";s:3:"ὡ";s:4:"ὡ";s:3:"ὢ";s:6:"ὢ";s:3:"ὣ";s:6:"ὣ";s:3:"ὤ";s:6:"ὤ";s:3:"ὥ";s:6:"ὥ";s:3:"ὦ";s:6:"ὦ";s:3:"ὧ";s:6:"ὧ";s:3:"Ὠ";s:4:"Ὠ";s:3:"Ὡ";s:4:"Ὡ";s:3:"Ὢ";s:6:"Ὢ";s:3:"Ὣ";s:6:"Ὣ";s:3:"Ὤ";s:6:"Ὤ";s:3:"Ὥ";s:6:"Ὥ";s:3:"Ὦ";s:6:"Ὦ";s:3:"Ὧ";s:6:"Ὧ";s:3:"ὰ";s:4:"ὰ";s:3:"ά";s:4:"ά";s:3:"ὲ";s:4:"ὲ";s:3:"έ";s:4:"έ";s:3:"ὴ";s:4:"ὴ";s:3:"ή";s:4:"ή";s:3:"ὶ";s:4:"ὶ";s:3:"ί";s:4:"ί";s:3:"ὸ";s:4:"ὸ";s:3:"ό";s:4:"ό";s:3:"ὺ";s:4:"ὺ";s:3:"ύ";s:4:"ύ";s:3:"ὼ";s:4:"ὼ";s:3:"ώ";s:4:"ώ";s:3:"ᾀ";s:6:"ᾀ";s:3:"ᾁ";s:6:"ᾁ";s:3:"ᾂ";s:8:"ᾂ";s:3:"ᾃ";s:8:"ᾃ";s:3:"ᾄ";s:8:"ᾄ";s:3:"ᾅ";s:8:"ᾅ";s:3:"ᾆ";s:8:"ᾆ";s:3:"ᾇ";s:8:"ᾇ";s:3:"ᾈ";s:6:"ᾈ";s:3:"ᾉ";s:6:"ᾉ";s:3:"ᾊ";s:8:"ᾊ";s:3:"ᾋ";s:8:"ᾋ";s:3:"ᾌ";s:8:"ᾌ";s:3:"ᾍ";s:8:"ᾍ";s:3:"ᾎ";s:8:"ᾎ";s:3:"ᾏ";s:8:"ᾏ";s:3:"ᾐ";s:6:"ᾐ";s:3:"ᾑ";s:6:"ᾑ";s:3:"ᾒ";s:8:"ᾒ";s:3:"ᾓ";s:8:"ᾓ";s:3:"ᾔ";s:8:"ᾔ";s:3:"ᾕ";s:8:"ᾕ";s:3:"ᾖ";s:8:"ᾖ";s:3:"ᾗ";s:8:"ᾗ";s:3:"ᾘ";s:6:"ᾘ";s:3:"ᾙ";s:6:"ᾙ";s:3:"ᾚ";s:8:"ᾚ";s:3:"ᾛ";s:8:"ᾛ";s:3:"ᾜ";s:8:"ᾜ";s:3:"ᾝ";s:8:"ᾝ";s:3:"ᾞ";s:8:"ᾞ";s:3:"ᾟ";s:8:"ᾟ";s:3:"ᾠ";s:6:"ᾠ";s:3:"ᾡ";s:6:"ᾡ";s:3:"ᾢ";s:8:"ᾢ";s:3:"ᾣ";s:8:"ᾣ";s:3:"ᾤ";s:8:"ᾤ";s:3:"ᾥ";s:8:"ᾥ";s:3:"ᾦ";s:8:"ᾦ";s:3:"ᾧ";s:8:"ᾧ";s:3:"ᾨ";s:6:"ᾨ";s:3:"ᾩ";s:6:"ᾩ";s:3:"ᾪ";s:8:"ᾪ";s:3:"ᾫ";s:8:"ᾫ";s:3:"ᾬ";s:8:"ᾬ";s:3:"ᾭ";s:8:"ᾭ";s:3:"ᾮ";s:8:"ᾮ";s:3:"ᾯ";s:8:"ᾯ";s:3:"ᾰ";s:4:"ᾰ";s:3:"ᾱ";s:4:"ᾱ";s:3:"ᾲ";s:6:"ᾲ";s:3:"ᾳ";s:4:"ᾳ";s:3:"ᾴ";s:6:"ᾴ";s:3:"ᾶ";s:4:"ᾶ";s:3:"ᾷ";s:6:"ᾷ";s:3:"Ᾰ";s:4:"Ᾰ";s:3:"Ᾱ";s:4:"Ᾱ";s:3:"Ὰ";s:4:"Ὰ";s:3:"Ά";s:4:"Ά";s:3:"ᾼ";s:4:"ᾼ";s:3:"᾽";s:3:" ̓";s:3:"ι";s:2:"ι";s:3:"᾿";s:3:" ̓";s:3:"῀";s:3:" ͂";s:3:"῁";s:5:" ̈͂";s:3:"ῂ";s:6:"ῂ";s:3:"ῃ";s:4:"ῃ";s:3:"ῄ";s:6:"ῄ";s:3:"ῆ";s:4:"ῆ";s:3:"ῇ";s:6:"ῇ";s:3:"Ὲ";s:4:"Ὲ";s:3:"Έ";s:4:"Έ";s:3:"Ὴ";s:4:"Ὴ";s:3:"Ή";s:4:"Ή";s:3:"ῌ";s:4:"ῌ";s:3:"῍";s:5:" ̓̀";s:3:"῎";s:5:" ̓́";s:3:"῏";s:5:" ̓͂";s:3:"ῐ";s:4:"ῐ";s:3:"ῑ";s:4:"ῑ";s:3:"ῒ";s:6:"ῒ";s:3:"ΐ";s:6:"ΐ";s:3:"ῖ";s:4:"ῖ";s:3:"ῗ";s:6:"ῗ";s:3:"Ῐ";s:4:"Ῐ";s:3:"Ῑ";s:4:"Ῑ";s:3:"Ὶ";s:4:"Ὶ";s:3:"Ί";s:4:"Ί";s:3:"῝";s:5:" ̔̀";s:3:"῞";s:5:" ̔́";s:3:"῟";s:5:" ̔͂";s:3:"ῠ";s:4:"ῠ";s:3:"ῡ";s:4:"ῡ";s:3:"ῢ";s:6:"ῢ";s:3:"ΰ";s:6:"ΰ";s:3:"ῤ";s:4:"ῤ";s:3:"ῥ";s:4:"ῥ";s:3:"ῦ";s:4:"ῦ";s:3:"ῧ";s:6:"ῧ";s:3:"Ῠ";s:4:"Ῠ";s:3:"Ῡ";s:4:"Ῡ";s:3:"Ὺ";s:4:"Ὺ";s:3:"Ύ";s:4:"Ύ";s:3:"Ῥ";s:4:"Ῥ";s:3:"῭";s:5:" ̈̀";s:3:"΅";s:5:" ̈́";s:3:"`";s:1:"`";s:3:"ῲ";s:6:"ῲ";s:3:"ῳ";s:4:"ῳ";s:3:"ῴ";s:6:"ῴ";s:3:"ῶ";s:4:"ῶ";s:3:"ῷ";s:6:"ῷ";s:3:"Ὸ";s:4:"Ὸ";s:3:"Ό";s:4:"Ό";s:3:"Ὼ";s:4:"Ὼ";s:3:"Ώ";s:4:"Ώ";s:3:"ῼ";s:4:"ῼ";s:3:"´";s:3:" ́";s:3:"῾";s:3:" ̔";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:" ";s:1:" ";s:3:"‑";s:3:"‐";s:3:"‗";s:3:" ̳";s:3:"․";s:1:".";s:3:"‥";s:2:"..";s:3:"…";s:3:"...";s:3:" ";s:1:" ";s:3:"″";s:6:"′′";s:3:"‴";s:9:"′′′";s:3:"‶";s:6:"‵‵";s:3:"‷";s:9:"‵‵‵";s:3:"‼";s:2:"!!";s:3:"‾";s:3:" ̅";s:3:"⁇";s:2:"??";s:3:"⁈";s:2:"?!";s:3:"⁉";s:2:"!?";s:3:"⁗";s:12:"′′′′";s:3:" ";s:1:" ";s:3:"⁰";s:1:"0";s:3:"ⁱ";s:1:"i";s:3:"⁴";s:1:"4";s:3:"⁵";s:1:"5";s:3:"⁶";s:1:"6";s:3:"⁷";s:1:"7";s:3:"⁸";s:1:"8";s:3:"⁹";s:1:"9";s:3:"⁺";s:1:"+";s:3:"⁻";s:3:"−";s:3:"⁼";s:1:"=";s:3:"⁽";s:1:"(";s:3:"⁾";s:1:")";s:3:"ⁿ";s:1:"n";s:3:"₀";s:1:"0";s:3:"₁";s:1:"1";s:3:"₂";s:1:"2";s:3:"₃";s:1:"3";s:3:"₄";s:1:"4";s:3:"₅";s:1:"5";s:3:"₆";s:1:"6";s:3:"₇";s:1:"7";s:3:"₈";s:1:"8";s:3:"₉";s:1:"9";s:3:"₊";s:1:"+";s:3:"₋";s:3:"−";s:3:"₌";s:1:"=";s:3:"₍";s:1:"(";s:3:"₎";s:1:")";s:3:"ₐ";s:1:"a";s:3:"ₑ";s:1:"e";s:3:"ₒ";s:1:"o";s:3:"ₓ";s:1:"x";s:3:"ₔ";s:2:"ə";s:3:"ₕ";s:1:"h";s:3:"ₖ";s:1:"k";s:3:"ₗ";s:1:"l";s:3:"ₘ";s:1:"m";s:3:"ₙ";s:1:"n";s:3:"ₚ";s:1:"p";s:3:"ₛ";s:1:"s";s:3:"ₜ";s:1:"t";s:3:"₨";s:2:"Rs";s:3:"℀";s:3:"a/c";s:3:"℁";s:3:"a/s";s:3:"ℂ";s:1:"C";s:3:"℃";s:3:"°C";s:3:"℅";s:3:"c/o";s:3:"℆";s:3:"c/u";s:3:"ℇ";s:2:"Ɛ";s:3:"℉";s:3:"°F";s:3:"ℊ";s:1:"g";s:3:"ℋ";s:1:"H";s:3:"ℌ";s:1:"H";s:3:"ℍ";s:1:"H";s:3:"ℎ";s:1:"h";s:3:"ℏ";s:2:"ħ";s:3:"ℐ";s:1:"I";s:3:"ℑ";s:1:"I";s:3:"ℒ";s:1:"L";s:3:"ℓ";s:1:"l";s:3:"ℕ";s:1:"N";s:3:"№";s:2:"No";s:3:"ℙ";s:1:"P";s:3:"ℚ";s:1:"Q";s:3:"ℛ";s:1:"R";s:3:"ℜ";s:1:"R";s:3:"ℝ";s:1:"R";s:3:"℠";s:2:"SM";s:3:"℡";s:3:"TEL";s:3:"™";s:2:"TM";s:3:"ℤ";s:1:"Z";s:3:"Ω";s:2:"Ω";s:3:"ℨ";s:1:"Z";s:3:"K";s:1:"K";s:3:"Å";s:3:"Å";s:3:"ℬ";s:1:"B";s:3:"ℭ";s:1:"C";s:3:"ℯ";s:1:"e";s:3:"ℰ";s:1:"E";s:3:"ℱ";s:1:"F";s:3:"ℳ";s:1:"M";s:3:"ℴ";s:1:"o";s:3:"ℵ";s:2:"א";s:3:"ℶ";s:2:"ב";s:3:"ℷ";s:2:"ג";s:3:"ℸ";s:2:"ד";s:3:"ℹ";s:1:"i";s:3:"℻";s:3:"FAX";s:3:"ℼ";s:2:"π";s:3:"ℽ";s:2:"γ";s:3:"ℾ";s:2:"Γ";s:3:"ℿ";s:2:"Π";s:3:"⅀";s:3:"∑";s:3:"ⅅ";s:1:"D";s:3:"ⅆ";s:1:"d";s:3:"ⅇ";s:1:"e";s:3:"ⅈ";s:1:"i";s:3:"ⅉ";s:1:"j";s:3:"⅐";s:5:"1⁄7";s:3:"⅑";s:5:"1⁄9";s:3:"⅒";s:6:"1⁄10";s:3:"⅓";s:5:"1⁄3";s:3:"⅔";s:5:"2⁄3";s:3:"⅕";s:5:"1⁄5";s:3:"⅖";s:5:"2⁄5";s:3:"⅗";s:5:"3⁄5";s:3:"⅘";s:5:"4⁄5";s:3:"⅙";s:5:"1⁄6";s:3:"⅚";s:5:"5⁄6";s:3:"⅛";s:5:"1⁄8";s:3:"⅜";s:5:"3⁄8";s:3:"⅝";s:5:"5⁄8";s:3:"⅞";s:5:"7⁄8";s:3:"⅟";s:4:"1⁄";s:3:"Ⅰ";s:1:"I";s:3:"Ⅱ";s:2:"II";s:3:"Ⅲ";s:3:"III";s:3:"Ⅳ";s:2:"IV";s:3:"Ⅴ";s:1:"V";s:3:"Ⅵ";s:2:"VI";s:3:"Ⅶ";s:3:"VII";s:3:"Ⅷ";s:4:"VIII";s:3:"Ⅸ";s:2:"IX";s:3:"Ⅹ";s:1:"X";s:3:"Ⅺ";s:2:"XI";s:3:"Ⅻ";s:3:"XII";s:3:"Ⅼ";s:1:"L";s:3:"Ⅽ";s:1:"C";s:3:"Ⅾ";s:1:"D";s:3:"Ⅿ";s:1:"M";s:3:"ⅰ";s:1:"i";s:3:"ⅱ";s:2:"ii";s:3:"ⅲ";s:3:"iii";s:3:"ⅳ";s:2:"iv";s:3:"ⅴ";s:1:"v";s:3:"ⅵ";s:2:"vi";s:3:"ⅶ";s:3:"vii";s:3:"ⅷ";s:4:"viii";s:3:"ⅸ";s:2:"ix";s:3:"ⅹ";s:1:"x";s:3:"ⅺ";s:2:"xi";s:3:"ⅻ";s:3:"xii";s:3:"ⅼ";s:1:"l";s:3:"ⅽ";s:1:"c";s:3:"ⅾ";s:1:"d";s:3:"ⅿ";s:1:"m";s:3:"↉";s:5:"0⁄3";s:3:"↚";s:5:"↚";s:3:"↛";s:5:"↛";s:3:"↮";s:5:"↮";s:3:"⇍";s:5:"⇍";s:3:"⇎";s:5:"⇎";s:3:"⇏";s:5:"⇏";s:3:"∄";s:5:"∄";s:3:"∉";s:5:"∉";s:3:"∌";s:5:"∌";s:3:"∤";s:5:"∤";s:3:"∦";s:5:"∦";s:3:"∬";s:6:"∫∫";s:3:"∭";s:9:"∫∫∫";s:3:"∯";s:6:"∮∮";s:3:"∰";s:9:"∮∮∮";s:3:"≁";s:5:"≁";s:3:"≄";s:5:"≄";s:3:"≇";s:5:"≇";s:3:"≉";s:5:"≉";s:3:"≠";s:3:"≠";s:3:"≢";s:5:"≢";s:3:"≭";s:5:"≭";s:3:"≮";s:3:"≮";s:3:"≯";s:3:"≯";s:3:"≰";s:5:"≰";s:3:"≱";s:5:"≱";s:3:"≴";s:5:"≴";s:3:"≵";s:5:"≵";s:3:"≸";s:5:"≸";s:3:"≹";s:5:"≹";s:3:"⊀";s:5:"⊀";s:3:"⊁";s:5:"⊁";s:3:"⊄";s:5:"⊄";s:3:"⊅";s:5:"⊅";s:3:"⊈";s:5:"⊈";s:3:"⊉";s:5:"⊉";s:3:"⊬";s:5:"⊬";s:3:"⊭";s:5:"⊭";s:3:"⊮";s:5:"⊮";s:3:"⊯";s:5:"⊯";s:3:"⋠";s:5:"⋠";s:3:"⋡";s:5:"⋡";s:3:"⋢";s:5:"⋢";s:3:"⋣";s:5:"⋣";s:3:"⋪";s:5:"⋪";s:3:"⋫";s:5:"⋫";s:3:"⋬";s:5:"⋬";s:3:"⋭";s:5:"⋭";s:3:"〈";s:3:"〈";s:3:"〉";s:3:"〉";s:3:"①";s:1:"1";s:3:"②";s:1:"2";s:3:"③";s:1:"3";s:3:"④";s:1:"4";s:3:"⑤";s:1:"5";s:3:"⑥";s:1:"6";s:3:"⑦";s:1:"7";s:3:"⑧";s:1:"8";s:3:"⑨";s:1:"9";s:3:"⑩";s:2:"10";s:3:"⑪";s:2:"11";s:3:"⑫";s:2:"12";s:3:"⑬";s:2:"13";s:3:"⑭";s:2:"14";s:3:"⑮";s:2:"15";s:3:"⑯";s:2:"16";s:3:"⑰";s:2:"17";s:3:"⑱";s:2:"18";s:3:"⑲";s:2:"19";s:3:"⑳";s:2:"20";s:3:"⑴";s:3:"(1)";s:3:"⑵";s:3:"(2)";s:3:"⑶";s:3:"(3)";s:3:"⑷";s:3:"(4)";s:3:"⑸";s:3:"(5)";s:3:"⑹";s:3:"(6)";s:3:"⑺";s:3:"(7)";s:3:"⑻";s:3:"(8)";s:3:"⑼";s:3:"(9)";s:3:"⑽";s:4:"(10)";s:3:"⑾";s:4:"(11)";s:3:"⑿";s:4:"(12)";s:3:"⒀";s:4:"(13)";s:3:"⒁";s:4:"(14)";s:3:"⒂";s:4:"(15)";s:3:"⒃";s:4:"(16)";s:3:"⒄";s:4:"(17)";s:3:"⒅";s:4:"(18)";s:3:"⒆";s:4:"(19)";s:3:"⒇";s:4:"(20)";s:3:"⒈";s:2:"1.";s:3:"⒉";s:2:"2.";s:3:"⒊";s:2:"3.";s:3:"⒋";s:2:"4.";s:3:"⒌";s:2:"5.";s:3:"⒍";s:2:"6.";s:3:"⒎";s:2:"7.";s:3:"⒏";s:2:"8.";s:3:"⒐";s:2:"9.";s:3:"⒑";s:3:"10.";s:3:"⒒";s:3:"11.";s:3:"⒓";s:3:"12.";s:3:"⒔";s:3:"13.";s:3:"⒕";s:3:"14.";s:3:"⒖";s:3:"15.";s:3:"⒗";s:3:"16.";s:3:"⒘";s:3:"17.";s:3:"⒙";s:3:"18.";s:3:"⒚";s:3:"19.";s:3:"⒛";s:3:"20.";s:3:"⒜";s:3:"(a)";s:3:"⒝";s:3:"(b)";s:3:"⒞";s:3:"(c)";s:3:"⒟";s:3:"(d)";s:3:"⒠";s:3:"(e)";s:3:"⒡";s:3:"(f)";s:3:"⒢";s:3:"(g)";s:3:"⒣";s:3:"(h)";s:3:"⒤";s:3:"(i)";s:3:"⒥";s:3:"(j)";s:3:"⒦";s:3:"(k)";s:3:"⒧";s:3:"(l)";s:3:"⒨";s:3:"(m)";s:3:"⒩";s:3:"(n)";s:3:"⒪";s:3:"(o)";s:3:"⒫";s:3:"(p)";s:3:"⒬";s:3:"(q)";s:3:"⒭";s:3:"(r)";s:3:"⒮";s:3:"(s)";s:3:"⒯";s:3:"(t)";s:3:"⒰";s:3:"(u)";s:3:"⒱";s:3:"(v)";s:3:"⒲";s:3:"(w)";s:3:"⒳";s:3:"(x)";s:3:"⒴";s:3:"(y)";s:3:"⒵";s:3:"(z)";s:3:"Ⓐ";s:1:"A";s:3:"Ⓑ";s:1:"B";s:3:"Ⓒ";s:1:"C";s:3:"Ⓓ";s:1:"D";s:3:"Ⓔ";s:1:"E";s:3:"Ⓕ";s:1:"F";s:3:"Ⓖ";s:1:"G";s:3:"Ⓗ";s:1:"H";s:3:"Ⓘ";s:1:"I";s:3:"Ⓙ";s:1:"J";s:3:"Ⓚ";s:1:"K";s:3:"Ⓛ";s:1:"L";s:3:"Ⓜ";s:1:"M";s:3:"Ⓝ";s:1:"N";s:3:"Ⓞ";s:1:"O";s:3:"Ⓟ";s:1:"P";s:3:"Ⓠ";s:1:"Q";s:3:"Ⓡ";s:1:"R";s:3:"Ⓢ";s:1:"S";s:3:"Ⓣ";s:1:"T";s:3:"Ⓤ";s:1:"U";s:3:"Ⓥ";s:1:"V";s:3:"Ⓦ";s:1:"W";s:3:"Ⓧ";s:1:"X";s:3:"Ⓨ";s:1:"Y";s:3:"Ⓩ";s:1:"Z";s:3:"ⓐ";s:1:"a";s:3:"ⓑ";s:1:"b";s:3:"ⓒ";s:1:"c";s:3:"ⓓ";s:1:"d";s:3:"ⓔ";s:1:"e";s:3:"ⓕ";s:1:"f";s:3:"ⓖ";s:1:"g";s:3:"ⓗ";s:1:"h";s:3:"ⓘ";s:1:"i";s:3:"ⓙ";s:1:"j";s:3:"ⓚ";s:1:"k";s:3:"ⓛ";s:1:"l";s:3:"ⓜ";s:1:"m";s:3:"ⓝ";s:1:"n";s:3:"ⓞ";s:1:"o";s:3:"ⓟ";s:1:"p";s:3:"ⓠ";s:1:"q";s:3:"ⓡ";s:1:"r";s:3:"ⓢ";s:1:"s";s:3:"ⓣ";s:1:"t";s:3:"ⓤ";s:1:"u";s:3:"ⓥ";s:1:"v";s:3:"ⓦ";s:1:"w";s:3:"ⓧ";s:1:"x";s:3:"ⓨ";s:1:"y";s:3:"ⓩ";s:1:"z";s:3:"⓪";s:1:"0";s:3:"⨌";s:12:"∫∫∫∫";s:3:"⩴";s:3:"::=";s:3:"⩵";s:2:"==";s:3:"⩶";s:3:"===";s:3:"⫝̸";s:5:"⫝̸";s:3:"ⱼ";s:1:"j";s:3:"ⱽ";s:1:"V";s:3:"ⵯ";s:3:"ⵡ";s:3:"⺟";s:3:"母";s:3:"⻳";s:3:"龟";s:3:"⼀";s:3:"一";s:3:"⼁";s:3:"丨";s:3:"⼂";s:3:"丶";s:3:"⼃";s:3:"丿";s:3:"⼄";s:3:"乙";s:3:"⼅";s:3:"亅";s:3:"⼆";s:3:"二";s:3:"⼇";s:3:"亠";s:3:"⼈";s:3:"人";s:3:"⼉";s:3:"儿";s:3:"⼊";s:3:"入";s:3:"⼋";s:3:"八";s:3:"⼌";s:3:"冂";s:3:"⼍";s:3:"冖";s:3:"⼎";s:3:"冫";s:3:"⼏";s:3:"几";s:3:"⼐";s:3:"凵";s:3:"⼑";s:3:"刀";s:3:"⼒";s:3:"力";s:3:"⼓";s:3:"勹";s:3:"⼔";s:3:"匕";s:3:"⼕";s:3:"匚";s:3:"⼖";s:3:"匸";s:3:"⼗";s:3:"十";s:3:"⼘";s:3:"卜";s:3:"⼙";s:3:"卩";s:3:"⼚";s:3:"厂";s:3:"⼛";s:3:"厶";s:3:"⼜";s:3:"又";s:3:"⼝";s:3:"口";s:3:"⼞";s:3:"囗";s:3:"⼟";s:3:"土";s:3:"⼠";s:3:"士";s:3:"⼡";s:3:"夂";s:3:"⼢";s:3:"夊";s:3:"⼣";s:3:"夕";s:3:"⼤";s:3:"大";s:3:"⼥";s:3:"女";s:3:"⼦";s:3:"子";s:3:"⼧";s:3:"宀";s:3:"⼨";s:3:"寸";s:3:"⼩";s:3:"小";s:3:"⼪";s:3:"尢";s:3:"⼫";s:3:"尸";s:3:"⼬";s:3:"屮";s:3:"⼭";s:3:"山";s:3:"⼮";s:3:"巛";s:3:"⼯";s:3:"工";s:3:"⼰";s:3:"己";s:3:"⼱";s:3:"巾";s:3:"⼲";s:3:"干";s:3:"⼳";s:3:"幺";s:3:"⼴";s:3:"广";s:3:"⼵";s:3:"廴";s:3:"⼶";s:3:"廾";s:3:"⼷";s:3:"弋";s:3:"⼸";s:3:"弓";s:3:"⼹";s:3:"彐";s:3:"⼺";s:3:"彡";s:3:"⼻";s:3:"彳";s:3:"⼼";s:3:"心";s:3:"⼽";s:3:"戈";s:3:"⼾";s:3:"戶";s:3:"⼿";s:3:"手";s:3:"⽀";s:3:"支";s:3:"⽁";s:3:"攴";s:3:"⽂";s:3:"文";s:3:"⽃";s:3:"斗";s:3:"⽄";s:3:"斤";s:3:"⽅";s:3:"方";s:3:"⽆";s:3:"无";s:3:"⽇";s:3:"日";s:3:"⽈";s:3:"曰";s:3:"⽉";s:3:"月";s:3:"⽊";s:3:"木";s:3:"⽋";s:3:"欠";s:3:"⽌";s:3:"止";s:3:"⽍";s:3:"歹";s:3:"⽎";s:3:"殳";s:3:"⽏";s:3:"毋";s:3:"⽐";s:3:"比";s:3:"⽑";s:3:"毛";s:3:"⽒";s:3:"氏";s:3:"⽓";s:3:"气";s:3:"⽔";s:3:"水";s:3:"⽕";s:3:"火";s:3:"⽖";s:3:"爪";s:3:"⽗";s:3:"父";s:3:"⽘";s:3:"爻";s:3:"⽙";s:3:"爿";s:3:"⽚";s:3:"片";s:3:"⽛";s:3:"牙";s:3:"⽜";s:3:"牛";s:3:"⽝";s:3:"犬";s:3:"⽞";s:3:"玄";s:3:"⽟";s:3:"玉";s:3:"⽠";s:3:"瓜";s:3:"⽡";s:3:"瓦";s:3:"⽢";s:3:"甘";s:3:"⽣";s:3:"生";s:3:"⽤";s:3:"用";s:3:"⽥";s:3:"田";s:3:"⽦";s:3:"疋";s:3:"⽧";s:3:"疒";s:3:"⽨";s:3:"癶";s:3:"⽩";s:3:"白";s:3:"⽪";s:3:"皮";s:3:"⽫";s:3:"皿";s:3:"⽬";s:3:"目";s:3:"⽭";s:3:"矛";s:3:"⽮";s:3:"矢";s:3:"⽯";s:3:"石";s:3:"⽰";s:3:"示";s:3:"⽱";s:3:"禸";s:3:"⽲";s:3:"禾";s:3:"⽳";s:3:"穴";s:3:"⽴";s:3:"立";s:3:"⽵";s:3:"竹";s:3:"⽶";s:3:"米";s:3:"⽷";s:3:"糸";s:3:"⽸";s:3:"缶";s:3:"⽹";s:3:"网";s:3:"⽺";s:3:"羊";s:3:"⽻";s:3:"羽";s:3:"⽼";s:3:"老";s:3:"⽽";s:3:"而";s:3:"⽾";s:3:"耒";s:3:"⽿";s:3:"耳";s:3:"⾀";s:3:"聿";s:3:"⾁";s:3:"肉";s:3:"⾂";s:3:"臣";s:3:"⾃";s:3:"自";s:3:"⾄";s:3:"至";s:3:"⾅";s:3:"臼";s:3:"⾆";s:3:"舌";s:3:"⾇";s:3:"舛";s:3:"⾈";s:3:"舟";s:3:"⾉";s:3:"艮";s:3:"⾊";s:3:"色";s:3:"⾋";s:3:"艸";s:3:"⾌";s:3:"虍";s:3:"⾍";s:3:"虫";s:3:"⾎";s:3:"血";s:3:"⾏";s:3:"行";s:3:"⾐";s:3:"衣";s:3:"⾑";s:3:"襾";s:3:"⾒";s:3:"見";s:3:"⾓";s:3:"角";s:3:"⾔";s:3:"言";s:3:"⾕";s:3:"谷";s:3:"⾖";s:3:"豆";s:3:"⾗";s:3:"豕";s:3:"⾘";s:3:"豸";s:3:"⾙";s:3:"貝";s:3:"⾚";s:3:"赤";s:3:"⾛";s:3:"走";s:3:"⾜";s:3:"足";s:3:"⾝";s:3:"身";s:3:"⾞";s:3:"車";s:3:"⾟";s:3:"辛";s:3:"⾠";s:3:"辰";s:3:"⾡";s:3:"辵";s:3:"⾢";s:3:"邑";s:3:"⾣";s:3:"酉";s:3:"⾤";s:3:"釆";s:3:"⾥";s:3:"里";s:3:"⾦";s:3:"金";s:3:"⾧";s:3:"長";s:3:"⾨";s:3:"門";s:3:"⾩";s:3:"阜";s:3:"⾪";s:3:"隶";s:3:"⾫";s:3:"隹";s:3:"⾬";s:3:"雨";s:3:"⾭";s:3:"靑";s:3:"⾮";s:3:"非";s:3:"⾯";s:3:"面";s:3:"⾰";s:3:"革";s:3:"⾱";s:3:"韋";s:3:"⾲";s:3:"韭";s:3:"⾳";s:3:"音";s:3:"⾴";s:3:"頁";s:3:"⾵";s:3:"風";s:3:"⾶";s:3:"飛";s:3:"⾷";s:3:"食";s:3:"⾸";s:3:"首";s:3:"⾹";s:3:"香";s:3:"⾺";s:3:"馬";s:3:"⾻";s:3:"骨";s:3:"⾼";s:3:"高";s:3:"⾽";s:3:"髟";s:3:"⾾";s:3:"鬥";s:3:"⾿";s:3:"鬯";s:3:"⿀";s:3:"鬲";s:3:"⿁";s:3:"鬼";s:3:"⿂";s:3:"魚";s:3:"⿃";s:3:"鳥";s:3:"⿄";s:3:"鹵";s:3:"⿅";s:3:"鹿";s:3:"⿆";s:3:"麥";s:3:"⿇";s:3:"麻";s:3:"⿈";s:3:"黃";s:3:"⿉";s:3:"黍";s:3:"⿊";s:3:"黑";s:3:"⿋";s:3:"黹";s:3:"⿌";s:3:"黽";s:3:"⿍";s:3:"鼎";s:3:"⿎";s:3:"鼓";s:3:"⿏";s:3:"鼠";s:3:"⿐";s:3:"鼻";s:3:"⿑";s:3:"齊";s:3:"⿒";s:3:"齒";s:3:"⿓";s:3:"龍";s:3:"⿔";s:3:"龜";s:3:"⿕";s:3:"龠";s:3:" ";s:1:" ";s:3:"〶";s:3:"〒";s:3:"〸";s:3:"十";s:3:"〹";s:3:"卄";s:3:"〺";s:3:"卅";s:3:"が";s:6:"が";s:3:"ぎ";s:6:"ぎ";s:3:"ぐ";s:6:"ぐ";s:3:"げ";s:6:"げ";s:3:"ご";s:6:"ご";s:3:"ざ";s:6:"ざ";s:3:"じ";s:6:"じ";s:3:"ず";s:6:"ず";s:3:"ぜ";s:6:"ぜ";s:3:"ぞ";s:6:"ぞ";s:3:"だ";s:6:"だ";s:3:"ぢ";s:6:"ぢ";s:3:"づ";s:6:"づ";s:3:"で";s:6:"で";s:3:"ど";s:6:"ど";s:3:"ば";s:6:"ば";s:3:"ぱ";s:6:"ぱ";s:3:"び";s:6:"び";s:3:"ぴ";s:6:"ぴ";s:3:"ぶ";s:6:"ぶ";s:3:"ぷ";s:6:"ぷ";s:3:"べ";s:6:"べ";s:3:"ぺ";s:6:"ぺ";s:3:"ぼ";s:6:"ぼ";s:3:"ぽ";s:6:"ぽ";s:3:"ゔ";s:6:"ゔ";s:3:"゛";s:4:" ゙";s:3:"゜";s:4:" ゚";s:3:"ゞ";s:6:"ゞ";s:3:"ゟ";s:6:"より";s:3:"ガ";s:6:"ガ";s:3:"ギ";s:6:"ギ";s:3:"グ";s:6:"グ";s:3:"ゲ";s:6:"ゲ";s:3:"ゴ";s:6:"ゴ";s:3:"ザ";s:6:"ザ";s:3:"ジ";s:6:"ジ";s:3:"ズ";s:6:"ズ";s:3:"ゼ";s:6:"ゼ";s:3:"ゾ";s:6:"ゾ";s:3:"ダ";s:6:"ダ";s:3:"ヂ";s:6:"ヂ";s:3:"ヅ";s:6:"ヅ";s:3:"デ";s:6:"デ";s:3:"ド";s:6:"ド";s:3:"バ";s:6:"バ";s:3:"パ";s:6:"パ";s:3:"ビ";s:6:"ビ";s:3:"ピ";s:6:"ピ";s:3:"ブ";s:6:"ブ";s:3:"プ";s:6:"プ";s:3:"ベ";s:6:"ベ";s:3:"ペ";s:6:"ペ";s:3:"ボ";s:6:"ボ";s:3:"ポ";s:6:"ポ";s:3:"ヴ";s:6:"ヴ";s:3:"ヷ";s:6:"ヷ";s:3:"ヸ";s:6:"ヸ";s:3:"ヹ";s:6:"ヹ";s:3:"ヺ";s:6:"ヺ";s:3:"ヾ";s:6:"ヾ";s:3:"ヿ";s:6:"コト";s:3:"ㄱ";s:3:"ᄀ";s:3:"ㄲ";s:3:"ᄁ";s:3:"ㄳ";s:3:"ᆪ";s:3:"ㄴ";s:3:"ᄂ";s:3:"ㄵ";s:3:"ᆬ";s:3:"ㄶ";s:3:"ᆭ";s:3:"ㄷ";s:3:"ᄃ";s:3:"ㄸ";s:3:"ᄄ";s:3:"ㄹ";s:3:"ᄅ";s:3:"ㄺ";s:3:"ᆰ";s:3:"ㄻ";s:3:"ᆱ";s:3:"ㄼ";s:3:"ᆲ";s:3:"ㄽ";s:3:"ᆳ";s:3:"ㄾ";s:3:"ᆴ";s:3:"ㄿ";s:3:"ᆵ";s:3:"ㅀ";s:3:"ᄚ";s:3:"ㅁ";s:3:"ᄆ";s:3:"ㅂ";s:3:"ᄇ";s:3:"ㅃ";s:3:"ᄈ";s:3:"ㅄ";s:3:"ᄡ";s:3:"ㅅ";s:3:"ᄉ";s:3:"ㅆ";s:3:"ᄊ";s:3:"ㅇ";s:3:"ᄋ";s:3:"ㅈ";s:3:"ᄌ";s:3:"ㅉ";s:3:"ᄍ";s:3:"ㅊ";s:3:"ᄎ";s:3:"ㅋ";s:3:"ᄏ";s:3:"ㅌ";s:3:"ᄐ";s:3:"ㅍ";s:3:"ᄑ";s:3:"ㅎ";s:3:"ᄒ";s:3:"ㅏ";s:3:"ᅡ";s:3:"ㅐ";s:3:"ᅢ";s:3:"ㅑ";s:3:"ᅣ";s:3:"ㅒ";s:3:"ᅤ";s:3:"ㅓ";s:3:"ᅥ";s:3:"ㅔ";s:3:"ᅦ";s:3:"ㅕ";s:3:"ᅧ";s:3:"ㅖ";s:3:"ᅨ";s:3:"ㅗ";s:3:"ᅩ";s:3:"ㅘ";s:3:"ᅪ";s:3:"ㅙ";s:3:"ᅫ";s:3:"ㅚ";s:3:"ᅬ";s:3:"ㅛ";s:3:"ᅭ";s:3:"ㅜ";s:3:"ᅮ";s:3:"ㅝ";s:3:"ᅯ";s:3:"ㅞ";s:3:"ᅰ";s:3:"ㅟ";s:3:"ᅱ";s:3:"ㅠ";s:3:"ᅲ";s:3:"ㅡ";s:3:"ᅳ";s:3:"ㅢ";s:3:"ᅴ";s:3:"ㅣ";s:3:"ᅵ";s:3:"ㅤ";s:3:"ᅠ";s:3:"ㅥ";s:3:"ᄔ";s:3:"ㅦ";s:3:"ᄕ";s:3:"ㅧ";s:3:"ᇇ";s:3:"ㅨ";s:3:"ᇈ";s:3:"ㅩ";s:3:"ᇌ";s:3:"ㅪ";s:3:"ᇎ";s:3:"ㅫ";s:3:"ᇓ";s:3:"ㅬ";s:3:"ᇗ";s:3:"ㅭ";s:3:"ᇙ";s:3:"ㅮ";s:3:"ᄜ";s:3:"ㅯ";s:3:"ᇝ";s:3:"ㅰ";s:3:"ᇟ";s:3:"ㅱ";s:3:"ᄝ";s:3:"ㅲ";s:3:"ᄞ";s:3:"ㅳ";s:3:"ᄠ";s:3:"ㅴ";s:3:"ᄢ";s:3:"ㅵ";s:3:"ᄣ";s:3:"ㅶ";s:3:"ᄧ";s:3:"ㅷ";s:3:"ᄩ";s:3:"ㅸ";s:3:"ᄫ";s:3:"ㅹ";s:3:"ᄬ";s:3:"ㅺ";s:3:"ᄭ";s:3:"ㅻ";s:3:"ᄮ";s:3:"ㅼ";s:3:"ᄯ";s:3:"ㅽ";s:3:"ᄲ";s:3:"ㅾ";s:3:"ᄶ";s:3:"ㅿ";s:3:"ᅀ";s:3:"ㆀ";s:3:"ᅇ";s:3:"ㆁ";s:3:"ᅌ";s:3:"ㆂ";s:3:"ᇱ";s:3:"ㆃ";s:3:"ᇲ";s:3:"ㆄ";s:3:"ᅗ";s:3:"ㆅ";s:3:"ᅘ";s:3:"ㆆ";s:3:"ᅙ";s:3:"ㆇ";s:3:"ᆄ";s:3:"ㆈ";s:3:"ᆅ";s:3:"ㆉ";s:3:"ᆈ";s:3:"ㆊ";s:3:"ᆑ";s:3:"ㆋ";s:3:"ᆒ";s:3:"ㆌ";s:3:"ᆔ";s:3:"ㆍ";s:3:"ᆞ";s:3:"ㆎ";s:3:"ᆡ";s:3:"㆒";s:3:"一";s:3:"㆓";s:3:"二";s:3:"㆔";s:3:"三";s:3:"㆕";s:3:"四";s:3:"㆖";s:3:"上";s:3:"㆗";s:3:"中";s:3:"㆘";s:3:"下";s:3:"㆙";s:3:"甲";s:3:"㆚";s:3:"乙";s:3:"㆛";s:3:"丙";s:3:"㆜";s:3:"丁";s:3:"㆝";s:3:"天";s:3:"㆞";s:3:"地";s:3:"㆟";s:3:"人";s:3:"㈀";s:5:"(ᄀ)";s:3:"㈁";s:5:"(ᄂ)";s:3:"㈂";s:5:"(ᄃ)";s:3:"㈃";s:5:"(ᄅ)";s:3:"㈄";s:5:"(ᄆ)";s:3:"㈅";s:5:"(ᄇ)";s:3:"㈆";s:5:"(ᄉ)";s:3:"㈇";s:5:"(ᄋ)";s:3:"㈈";s:5:"(ᄌ)";s:3:"㈉";s:5:"(ᄎ)";s:3:"㈊";s:5:"(ᄏ)";s:3:"㈋";s:5:"(ᄐ)";s:3:"㈌";s:5:"(ᄑ)";s:3:"㈍";s:5:"(ᄒ)";s:3:"㈎";s:8:"(가)";s:3:"㈏";s:8:"(나)";s:3:"㈐";s:8:"(다)";s:3:"㈑";s:8:"(라)";s:3:"㈒";s:8:"(마)";s:3:"㈓";s:8:"(바)";s:3:"㈔";s:8:"(사)";s:3:"㈕";s:8:"(아)";s:3:"㈖";s:8:"(자)";s:3:"㈗";s:8:"(차)";s:3:"㈘";s:8:"(카)";s:3:"㈙";s:8:"(타)";s:3:"㈚";s:8:"(파)";s:3:"㈛";s:8:"(하)";s:3:"㈜";s:8:"(주)";s:3:"㈝";s:17:"(오전)";s:3:"㈞";s:14:"(오후)";s:3:"㈠";s:5:"(一)";s:3:"㈡";s:5:"(二)";s:3:"㈢";s:5:"(三)";s:3:"㈣";s:5:"(四)";s:3:"㈤";s:5:"(五)";s:3:"㈥";s:5:"(六)";s:3:"㈦";s:5:"(七)";s:3:"㈧";s:5:"(八)";s:3:"㈨";s:5:"(九)";s:3:"㈩";s:5:"(十)";s:3:"㈪";s:5:"(月)";s:3:"㈫";s:5:"(火)";s:3:"㈬";s:5:"(水)";s:3:"㈭";s:5:"(木)";s:3:"㈮";s:5:"(金)";s:3:"㈯";s:5:"(土)";s:3:"㈰";s:5:"(日)";s:3:"㈱";s:5:"(株)";s:3:"㈲";s:5:"(有)";s:3:"㈳";s:5:"(社)";s:3:"㈴";s:5:"(名)";s:3:"㈵";s:5:"(特)";s:3:"㈶";s:5:"(財)";s:3:"㈷";s:5:"(祝)";s:3:"㈸";s:5:"(労)";s:3:"㈹";s:5:"(代)";s:3:"㈺";s:5:"(呼)";s:3:"㈻";s:5:"(学)";s:3:"㈼";s:5:"(監)";s:3:"㈽";s:5:"(企)";s:3:"㈾";s:5:"(資)";s:3:"㈿";s:5:"(協)";s:3:"㉀";s:5:"(祭)";s:3:"㉁";s:5:"(休)";s:3:"㉂";s:5:"(自)";s:3:"㉃";s:5:"(至)";s:3:"㉄";s:3:"問";s:3:"㉅";s:3:"幼";s:3:"㉆";s:3:"文";s:3:"㉇";s:3:"箏";s:3:"㉐";s:3:"PTE";s:3:"㉑";s:2:"21";s:3:"㉒";s:2:"22";s:3:"㉓";s:2:"23";s:3:"㉔";s:2:"24";s:3:"㉕";s:2:"25";s:3:"㉖";s:2:"26";s:3:"㉗";s:2:"27";s:3:"㉘";s:2:"28";s:3:"㉙";s:2:"29";s:3:"㉚";s:2:"30";s:3:"㉛";s:2:"31";s:3:"㉜";s:2:"32";s:3:"㉝";s:2:"33";s:3:"㉞";s:2:"34";s:3:"㉟";s:2:"35";s:3:"㉠";s:3:"ᄀ";s:3:"㉡";s:3:"ᄂ";s:3:"㉢";s:3:"ᄃ";s:3:"㉣";s:3:"ᄅ";s:3:"㉤";s:3:"ᄆ";s:3:"㉥";s:3:"ᄇ";s:3:"㉦";s:3:"ᄉ";s:3:"㉧";s:3:"ᄋ";s:3:"㉨";s:3:"ᄌ";s:3:"㉩";s:3:"ᄎ";s:3:"㉪";s:3:"ᄏ";s:3:"㉫";s:3:"ᄐ";s:3:"㉬";s:3:"ᄑ";s:3:"㉭";s:3:"ᄒ";s:3:"㉮";s:6:"가";s:3:"㉯";s:6:"나";s:3:"㉰";s:6:"다";s:3:"㉱";s:6:"라";s:3:"㉲";s:6:"마";s:3:"㉳";s:6:"바";s:3:"㉴";s:6:"사";s:3:"㉵";s:6:"아";s:3:"㉶";s:6:"자";s:3:"㉷";s:6:"차";s:3:"㉸";s:6:"카";s:3:"㉹";s:6:"타";s:3:"㉺";s:6:"파";s:3:"㉻";s:6:"하";s:3:"㉼";s:15:"참고";s:3:"㉽";s:12:"주의";s:3:"㉾";s:6:"우";s:3:"㊀";s:3:"一";s:3:"㊁";s:3:"二";s:3:"㊂";s:3:"三";s:3:"㊃";s:3:"四";s:3:"㊄";s:3:"五";s:3:"㊅";s:3:"六";s:3:"㊆";s:3:"七";s:3:"㊇";s:3:"八";s:3:"㊈";s:3:"九";s:3:"㊉";s:3:"十";s:3:"㊊";s:3:"月";s:3:"㊋";s:3:"火";s:3:"㊌";s:3:"水";s:3:"㊍";s:3:"木";s:3:"㊎";s:3:"金";s:3:"㊏";s:3:"土";s:3:"㊐";s:3:"日";s:3:"㊑";s:3:"株";s:3:"㊒";s:3:"有";s:3:"㊓";s:3:"社";s:3:"㊔";s:3:"名";s:3:"㊕";s:3:"特";s:3:"㊖";s:3:"財";s:3:"㊗";s:3:"祝";s:3:"㊘";s:3:"労";s:3:"㊙";s:3:"秘";s:3:"㊚";s:3:"男";s:3:"㊛";s:3:"女";s:3:"㊜";s:3:"適";s:3:"㊝";s:3:"優";s:3:"㊞";s:3:"印";s:3:"㊟";s:3:"注";s:3:"㊠";s:3:"項";s:3:"㊡";s:3:"休";s:3:"㊢";s:3:"写";s:3:"㊣";s:3:"正";s:3:"㊤";s:3:"上";s:3:"㊥";s:3:"中";s:3:"㊦";s:3:"下";s:3:"㊧";s:3:"左";s:3:"㊨";s:3:"右";s:3:"㊩";s:3:"医";s:3:"㊪";s:3:"宗";s:3:"㊫";s:3:"学";s:3:"㊬";s:3:"監";s:3:"㊭";s:3:"企";s:3:"㊮";s:3:"資";s:3:"㊯";s:3:"協";s:3:"㊰";s:3:"夜";s:3:"㊱";s:2:"36";s:3:"㊲";s:2:"37";s:3:"㊳";s:2:"38";s:3:"㊴";s:2:"39";s:3:"㊵";s:2:"40";s:3:"㊶";s:2:"41";s:3:"㊷";s:2:"42";s:3:"㊸";s:2:"43";s:3:"㊹";s:2:"44";s:3:"㊺";s:2:"45";s:3:"㊻";s:2:"46";s:3:"㊼";s:2:"47";s:3:"㊽";s:2:"48";s:3:"㊾";s:2:"49";s:3:"㊿";s:2:"50";s:3:"㋀";s:4:"1月";s:3:"㋁";s:4:"2月";s:3:"㋂";s:4:"3月";s:3:"㋃";s:4:"4月";s:3:"㋄";s:4:"5月";s:3:"㋅";s:4:"6月";s:3:"㋆";s:4:"7月";s:3:"㋇";s:4:"8月";s:3:"㋈";s:4:"9月";s:3:"㋉";s:5:"10月";s:3:"㋊";s:5:"11月";s:3:"㋋";s:5:"12月";s:3:"㋌";s:2:"Hg";s:3:"㋍";s:3:"erg";s:3:"㋎";s:2:"eV";s:3:"㋏";s:3:"LTD";s:3:"㋐";s:3:"ア";s:3:"㋑";s:3:"イ";s:3:"㋒";s:3:"ウ";s:3:"㋓";s:3:"エ";s:3:"㋔";s:3:"オ";s:3:"㋕";s:3:"カ";s:3:"㋖";s:3:"キ";s:3:"㋗";s:3:"ク";s:3:"㋘";s:3:"ケ";s:3:"㋙";s:3:"コ";s:3:"㋚";s:3:"サ";s:3:"㋛";s:3:"シ";s:3:"㋜";s:3:"ス";s:3:"㋝";s:3:"セ";s:3:"㋞";s:3:"ソ";s:3:"㋟";s:3:"タ";s:3:"㋠";s:3:"チ";s:3:"㋡";s:3:"ツ";s:3:"㋢";s:3:"テ";s:3:"㋣";s:3:"ト";s:3:"㋤";s:3:"ナ";s:3:"㋥";s:3:"ニ";s:3:"㋦";s:3:"ヌ";s:3:"㋧";s:3:"ネ";s:3:"㋨";s:3:"ノ";s:3:"㋩";s:3:"ハ";s:3:"㋪";s:3:"ヒ";s:3:"㋫";s:3:"フ";s:3:"㋬";s:3:"ヘ";s:3:"㋭";s:3:"ホ";s:3:"㋮";s:3:"マ";s:3:"㋯";s:3:"ミ";s:3:"㋰";s:3:"ム";s:3:"㋱";s:3:"メ";s:3:"㋲";s:3:"モ";s:3:"㋳";s:3:"ヤ";s:3:"㋴";s:3:"ユ";s:3:"㋵";s:3:"ヨ";s:3:"㋶";s:3:"ラ";s:3:"㋷";s:3:"リ";s:3:"㋸";s:3:"ル";s:3:"㋹";s:3:"レ";s:3:"㋺";s:3:"ロ";s:3:"㋻";s:3:"ワ";s:3:"㋼";s:3:"ヰ";s:3:"㋽";s:3:"ヱ";s:3:"㋾";s:3:"ヲ";s:3:"㌀";s:15:"アパート";s:3:"㌁";s:12:"アルファ";s:3:"㌂";s:15:"アンペア";s:3:"㌃";s:9:"アール";s:3:"㌄";s:15:"イニング";s:3:"㌅";s:9:"インチ";s:3:"㌆";s:9:"ウォン";s:3:"㌇";s:18:"エスクード";s:3:"㌈";s:12:"エーカー";s:3:"㌉";s:9:"オンス";s:3:"㌊";s:9:"オーム";s:3:"㌋";s:9:"カイリ";s:3:"㌌";s:12:"カラット";s:3:"㌍";s:12:"カロリー";s:3:"㌎";s:12:"ガロン";s:3:"㌏";s:12:"ガンマ";s:3:"㌐";s:12:"ギガ";s:3:"㌑";s:12:"ギニー";s:3:"㌒";s:12:"キュリー";s:3:"㌓";s:18:"ギルダー";s:3:"㌔";s:6:"キロ";s:3:"㌕";s:18:"キログラム";s:3:"㌖";s:18:"キロメートル";s:3:"㌗";s:15:"キロワット";s:3:"㌘";s:12:"グラム";s:3:"㌙";s:18:"グラムトン";s:3:"㌚";s:18:"クルゼイロ";s:3:"㌛";s:12:"クローネ";s:3:"㌜";s:9:"ケース";s:3:"㌝";s:9:"コルナ";s:3:"㌞";s:12:"コーポ";s:3:"㌟";s:12:"サイクル";s:3:"㌠";s:15:"サンチーム";s:3:"㌡";s:15:"シリング";s:3:"㌢";s:9:"センチ";s:3:"㌣";s:9:"セント";s:3:"㌤";s:12:"ダース";s:3:"㌥";s:9:"デシ";s:3:"㌦";s:9:"ドル";s:3:"㌧";s:6:"トン";s:3:"㌨";s:6:"ナノ";s:3:"㌩";s:9:"ノット";s:3:"㌪";s:9:"ハイツ";s:3:"㌫";s:18:"パーセント";s:3:"㌬";s:12:"パーツ";s:3:"㌭";s:15:"バーレル";s:3:"㌮";s:18:"ピアストル";s:3:"㌯";s:12:"ピクル";s:3:"㌰";s:9:"ピコ";s:3:"㌱";s:9:"ビル";s:3:"㌲";s:18:"ファラッド";s:3:"㌳";s:12:"フィート";s:3:"㌴";s:18:"ブッシェル";s:3:"㌵";s:9:"フラン";s:3:"㌶";s:15:"ヘクタール";s:3:"㌷";s:9:"ペソ";s:3:"㌸";s:12:"ペニヒ";s:3:"㌹";s:9:"ヘルツ";s:3:"㌺";s:12:"ペンス";s:3:"㌻";s:15:"ページ";s:3:"㌼";s:12:"ベータ";s:3:"㌽";s:15:"ポイント";s:3:"㌾";s:12:"ボルト";s:3:"㌿";s:6:"ホン";s:3:"㍀";s:15:"ポンド";s:3:"㍁";s:9:"ホール";s:3:"㍂";s:9:"ホーン";s:3:"㍃";s:12:"マイクロ";s:3:"㍄";s:9:"マイル";s:3:"㍅";s:9:"マッハ";s:3:"㍆";s:9:"マルク";s:3:"㍇";s:15:"マンション";s:3:"㍈";s:12:"ミクロン";s:3:"㍉";s:6:"ミリ";s:3:"㍊";s:18:"ミリバール";s:3:"㍋";s:9:"メガ";s:3:"㍌";s:15:"メガトン";s:3:"㍍";s:12:"メートル";s:3:"㍎";s:12:"ヤード";s:3:"㍏";s:9:"ヤール";s:3:"㍐";s:9:"ユアン";s:3:"㍑";s:12:"リットル";s:3:"㍒";s:6:"リラ";s:3:"㍓";s:12:"ルピー";s:3:"㍔";s:15:"ルーブル";s:3:"㍕";s:6:"レム";s:3:"㍖";s:18:"レントゲン";s:3:"㍗";s:9:"ワット";s:3:"㍘";s:4:"0点";s:3:"㍙";s:4:"1点";s:3:"㍚";s:4:"2点";s:3:"㍛";s:4:"3点";s:3:"㍜";s:4:"4点";s:3:"㍝";s:4:"5点";s:3:"㍞";s:4:"6点";s:3:"㍟";s:4:"7点";s:3:"㍠";s:4:"8点";s:3:"㍡";s:4:"9点";s:3:"㍢";s:5:"10点";s:3:"㍣";s:5:"11点";s:3:"㍤";s:5:"12点";s:3:"㍥";s:5:"13点";s:3:"㍦";s:5:"14点";s:3:"㍧";s:5:"15点";s:3:"㍨";s:5:"16点";s:3:"㍩";s:5:"17点";s:3:"㍪";s:5:"18点";s:3:"㍫";s:5:"19点";s:3:"㍬";s:5:"20点";s:3:"㍭";s:5:"21点";s:3:"㍮";s:5:"22点";s:3:"㍯";s:5:"23点";s:3:"㍰";s:5:"24点";s:3:"㍱";s:3:"hPa";s:3:"㍲";s:2:"da";s:3:"㍳";s:2:"AU";s:3:"㍴";s:3:"bar";s:3:"㍵";s:2:"oV";s:3:"㍶";s:2:"pc";s:3:"㍷";s:2:"dm";s:3:"㍸";s:3:"dm2";s:3:"㍹";s:3:"dm3";s:3:"㍺";s:2:"IU";s:3:"㍻";s:6:"平成";s:3:"㍼";s:6:"昭和";s:3:"㍽";s:6:"大正";s:3:"㍾";s:6:"明治";s:3:"㍿";s:12:"株式会社";s:3:"㎀";s:2:"pA";s:3:"㎁";s:2:"nA";s:3:"㎂";s:3:"μA";s:3:"㎃";s:2:"mA";s:3:"㎄";s:2:"kA";s:3:"㎅";s:2:"KB";s:3:"㎆";s:2:"MB";s:3:"㎇";s:2:"GB";s:3:"㎈";s:3:"cal";s:3:"㎉";s:4:"kcal";s:3:"㎊";s:2:"pF";s:3:"㎋";s:2:"nF";s:3:"㎌";s:3:"μF";s:3:"㎍";s:3:"μg";s:3:"㎎";s:2:"mg";s:3:"㎏";s:2:"kg";s:3:"㎐";s:2:"Hz";s:3:"㎑";s:3:"kHz";s:3:"㎒";s:3:"MHz";s:3:"㎓";s:3:"GHz";s:3:"㎔";s:3:"THz";s:3:"㎕";s:3:"μl";s:3:"㎖";s:2:"ml";s:3:"㎗";s:2:"dl";s:3:"㎘";s:2:"kl";s:3:"㎙";s:2:"fm";s:3:"㎚";s:2:"nm";s:3:"㎛";s:3:"μm";s:3:"㎜";s:2:"mm";s:3:"㎝";s:2:"cm";s:3:"㎞";s:2:"km";s:3:"㎟";s:3:"mm2";s:3:"㎠";s:3:"cm2";s:3:"㎡";s:2:"m2";s:3:"㎢";s:3:"km2";s:3:"㎣";s:3:"mm3";s:3:"㎤";s:3:"cm3";s:3:"㎥";s:2:"m3";s:3:"㎦";s:3:"km3";s:3:"㎧";s:5:"m∕s";s:3:"㎨";s:6:"m∕s2";s:3:"㎩";s:2:"Pa";s:3:"㎪";s:3:"kPa";s:3:"㎫";s:3:"MPa";s:3:"㎬";s:3:"GPa";s:3:"㎭";s:3:"rad";s:3:"㎮";s:7:"rad∕s";s:3:"㎯";s:8:"rad∕s2";s:3:"㎰";s:2:"ps";s:3:"㎱";s:2:"ns";s:3:"㎲";s:3:"μs";s:3:"㎳";s:2:"ms";s:3:"㎴";s:2:"pV";s:3:"㎵";s:2:"nV";s:3:"㎶";s:3:"μV";s:3:"㎷";s:2:"mV";s:3:"㎸";s:2:"kV";s:3:"㎹";s:2:"MV";s:3:"㎺";s:2:"pW";s:3:"㎻";s:2:"nW";s:3:"㎼";s:3:"μW";s:3:"㎽";s:2:"mW";s:3:"㎾";s:2:"kW";s:3:"㎿";s:2:"MW";s:3:"㏀";s:3:"kΩ";s:3:"㏁";s:3:"MΩ";s:3:"㏂";s:4:"a.m.";s:3:"㏃";s:2:"Bq";s:3:"㏄";s:2:"cc";s:3:"㏅";s:2:"cd";s:3:"㏆";s:6:"C∕kg";s:3:"㏇";s:3:"Co.";s:3:"㏈";s:2:"dB";s:3:"㏉";s:2:"Gy";s:3:"㏊";s:2:"ha";s:3:"㏋";s:2:"HP";s:3:"㏌";s:2:"in";s:3:"㏍";s:2:"KK";s:3:"㏎";s:2:"KM";s:3:"㏏";s:2:"kt";s:3:"㏐";s:2:"lm";s:3:"㏑";s:2:"ln";s:3:"㏒";s:3:"log";s:3:"㏓";s:2:"lx";s:3:"㏔";s:2:"mb";s:3:"㏕";s:3:"mil";s:3:"㏖";s:3:"mol";s:3:"㏗";s:2:"PH";s:3:"㏘";s:4:"p.m.";s:3:"㏙";s:3:"PPM";s:3:"㏚";s:2:"PR";s:3:"㏛";s:2:"sr";s:3:"㏜";s:2:"Sv";s:3:"㏝";s:2:"Wb";s:3:"㏞";s:5:"V∕m";s:3:"㏟";s:5:"A∕m";s:3:"㏠";s:4:"1日";s:3:"㏡";s:4:"2日";s:3:"㏢";s:4:"3日";s:3:"㏣";s:4:"4日";s:3:"㏤";s:4:"5日";s:3:"㏥";s:4:"6日";s:3:"㏦";s:4:"7日";s:3:"㏧";s:4:"8日";s:3:"㏨";s:4:"9日";s:3:"㏩";s:5:"10日";s:3:"㏪";s:5:"11日";s:3:"㏫";s:5:"12日";s:3:"㏬";s:5:"13日";s:3:"㏭";s:5:"14日";s:3:"㏮";s:5:"15日";s:3:"㏯";s:5:"16日";s:3:"㏰";s:5:"17日";s:3:"㏱";s:5:"18日";s:3:"㏲";s:5:"19日";s:3:"㏳";s:5:"20日";s:3:"㏴";s:5:"21日";s:3:"㏵";s:5:"22日";s:3:"㏶";s:5:"23日";s:3:"㏷";s:5:"24日";s:3:"㏸";s:5:"25日";s:3:"㏹";s:5:"26日";s:3:"㏺";s:5:"27日";s:3:"㏻";s:5:"28日";s:3:"㏼";s:5:"29日";s:3:"㏽";s:5:"30日";s:3:"㏾";s:5:"31日";s:3:"㏿";s:3:"gal";s:3:"ꝰ";s:3:"ꝯ";s:3:"豈";s:3:"豈";s:3:"更";s:3:"更";s:3:"車";s:3:"車";s:3:"賈";s:3:"賈";s:3:"滑";s:3:"滑";s:3:"串";s:3:"串";s:3:"句";s:3:"句";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"龜";s:3:"契";s:3:"契";s:3:"金";s:3:"金";s:3:"喇";s:3:"喇";s:3:"奈";s:3:"奈";s:3:"懶";s:3:"懶";s:3:"癩";s:3:"癩";s:3:"羅";s:3:"羅";s:3:"蘿";s:3:"蘿";s:3:"螺";s:3:"螺";s:3:"裸";s:3:"裸";s:3:"邏";s:3:"邏";s:3:"樂";s:3:"樂";s:3:"洛";s:3:"洛";s:3:"烙";s:3:"烙";s:3:"珞";s:3:"珞";s:3:"落";s:3:"落";s:3:"酪";s:3:"酪";s:3:"駱";s:3:"駱";s:3:"亂";s:3:"亂";s:3:"卵";s:3:"卵";s:3:"欄";s:3:"欄";s:3:"爛";s:3:"爛";s:3:"蘭";s:3:"蘭";s:3:"鸞";s:3:"鸞";s:3:"嵐";s:3:"嵐";s:3:"濫";s:3:"濫";s:3:"藍";s:3:"藍";s:3:"襤";s:3:"襤";s:3:"拉";s:3:"拉";s:3:"臘";s:3:"臘";s:3:"蠟";s:3:"蠟";s:3:"廊";s:3:"廊";s:3:"朗";s:3:"朗";s:3:"浪";s:3:"浪";s:3:"狼";s:3:"狼";s:3:"郎";s:3:"郎";s:3:"來";s:3:"來";s:3:"冷";s:3:"冷";s:3:"勞";s:3:"勞";s:3:"擄";s:3:"擄";s:3:"櫓";s:3:"櫓";s:3:"爐";s:3:"爐";s:3:"盧";s:3:"盧";s:3:"老";s:3:"老";s:3:"蘆";s:3:"蘆";s:3:"虜";s:3:"虜";s:3:"路";s:3:"路";s:3:"露";s:3:"露";s:3:"魯";s:3:"魯";s:3:"鷺";s:3:"鷺";s:3:"碌";s:3:"碌";s:3:"祿";s:3:"祿";s:3:"綠";s:3:"綠";s:3:"菉";s:3:"菉";s:3:"錄";s:3:"錄";s:3:"鹿";s:3:"鹿";s:3:"論";s:3:"論";s:3:"壟";s:3:"壟";s:3:"弄";s:3:"弄";s:3:"籠";s:3:"籠";s:3:"聾";s:3:"聾";s:3:"牢";s:3:"牢";s:3:"磊";s:3:"磊";s:3:"賂";s:3:"賂";s:3:"雷";s:3:"雷";s:3:"壘";s:3:"壘";s:3:"屢";s:3:"屢";s:3:"樓";s:3:"樓";s:3:"淚";s:3:"淚";s:3:"漏";s:3:"漏";s:3:"累";s:3:"累";s:3:"縷";s:3:"縷";s:3:"陋";s:3:"陋";s:3:"勒";s:3:"勒";s:3:"肋";s:3:"肋";s:3:"凜";s:3:"凜";s:3:"凌";s:3:"凌";s:3:"稜";s:3:"稜";s:3:"綾";s:3:"綾";s:3:"菱";s:3:"菱";s:3:"陵";s:3:"陵";s:3:"讀";s:3:"讀";s:3:"拏";s:3:"拏";s:3:"樂";s:3:"樂";s:3:"諾";s:3:"諾";s:3:"丹";s:3:"丹";s:3:"寧";s:3:"寧";s:3:"怒";s:3:"怒";s:3:"率";s:3:"率";s:3:"異";s:3:"異";s:3:"北";s:3:"北";s:3:"磻";s:3:"磻";s:3:"便";s:3:"便";s:3:"復";s:3:"復";s:3:"不";s:3:"不";s:3:"泌";s:3:"泌";s:3:"數";s:3:"數";s:3:"索";s:3:"索";s:3:"參";s:3:"參";s:3:"塞";s:3:"塞";s:3:"省";s:3:"省";s:3:"葉";s:3:"葉";s:3:"說";s:3:"說";s:3:"殺";s:3:"殺";s:3:"辰";s:3:"辰";s:3:"沈";s:3:"沈";s:3:"拾";s:3:"拾";s:3:"若";s:3:"若";s:3:"掠";s:3:"掠";s:3:"略";s:3:"略";s:3:"亮";s:3:"亮";s:3:"兩";s:3:"兩";s:3:"凉";s:3:"凉";s:3:"梁";s:3:"梁";s:3:"糧";s:3:"糧";s:3:"良";s:3:"良";s:3:"諒";s:3:"諒";s:3:"量";s:3:"量";s:3:"勵";s:3:"勵";s:3:"呂";s:3:"呂";s:3:"女";s:3:"女";s:3:"廬";s:3:"廬";s:3:"旅";s:3:"旅";s:3:"濾";s:3:"濾";s:3:"礪";s:3:"礪";s:3:"閭";s:3:"閭";s:3:"驪";s:3:"驪";s:3:"麗";s:3:"麗";s:3:"黎";s:3:"黎";s:3:"力";s:3:"力";s:3:"曆";s:3:"曆";s:3:"歷";s:3:"歷";s:3:"轢";s:3:"轢";s:3:"年";s:3:"年";s:3:"憐";s:3:"憐";s:3:"戀";s:3:"戀";s:3:"撚";s:3:"撚";s:3:"漣";s:3:"漣";s:3:"煉";s:3:"煉";s:3:"璉";s:3:"璉";s:3:"秊";s:3:"秊";s:3:"練";s:3:"練";s:3:"聯";s:3:"聯";s:3:"輦";s:3:"輦";s:3:"蓮";s:3:"蓮";s:3:"連";s:3:"連";s:3:"鍊";s:3:"鍊";s:3:"列";s:3:"列";s:3:"劣";s:3:"劣";s:3:"咽";s:3:"咽";s:3:"烈";s:3:"烈";s:3:"裂";s:3:"裂";s:3:"說";s:3:"說";s:3:"廉";s:3:"廉";s:3:"念";s:3:"念";s:3:"捻";s:3:"捻";s:3:"殮";s:3:"殮";s:3:"簾";s:3:"簾";s:3:"獵";s:3:"獵";s:3:"令";s:3:"令";s:3:"囹";s:3:"囹";s:3:"寧";s:3:"寧";s:3:"嶺";s:3:"嶺";s:3:"怜";s:3:"怜";s:3:"玲";s:3:"玲";s:3:"瑩";s:3:"瑩";s:3:"羚";s:3:"羚";s:3:"聆";s:3:"聆";s:3:"鈴";s:3:"鈴";s:3:"零";s:3:"零";s:3:"靈";s:3:"靈";s:3:"領";s:3:"領";s:3:"例";s:3:"例";s:3:"禮";s:3:"禮";s:3:"醴";s:3:"醴";s:3:"隸";s:3:"隸";s:3:"惡";s:3:"惡";s:3:"了";s:3:"了";s:3:"僚";s:3:"僚";s:3:"寮";s:3:"寮";s:3:"尿";s:3:"尿";s:3:"料";s:3:"料";s:3:"樂";s:3:"樂";s:3:"燎";s:3:"燎";s:3:"療";s:3:"療";s:3:"蓼";s:3:"蓼";s:3:"遼";s:3:"遼";s:3:"龍";s:3:"龍";s:3:"暈";s:3:"暈";s:3:"阮";s:3:"阮";s:3:"劉";s:3:"劉";s:3:"杻";s:3:"杻";s:3:"柳";s:3:"柳";s:3:"流";s:3:"流";s:3:"溜";s:3:"溜";s:3:"琉";s:3:"琉";s:3:"留";s:3:"留";s:3:"硫";s:3:"硫";s:3:"紐";s:3:"紐";s:3:"類";s:3:"類";s:3:"六";s:3:"六";s:3:"戮";s:3:"戮";s:3:"陸";s:3:"陸";s:3:"倫";s:3:"倫";s:3:"崙";s:3:"崙";s:3:"淪";s:3:"淪";s:3:"輪";s:3:"輪";s:3:"律";s:3:"律";s:3:"慄";s:3:"慄";s:3:"栗";s:3:"栗";s:3:"率";s:3:"率";s:3:"隆";s:3:"隆";s:3:"利";s:3:"利";s:3:"吏";s:3:"吏";s:3:"履";s:3:"履";s:3:"易";s:3:"易";s:3:"李";s:3:"李";s:3:"梨";s:3:"梨";s:3:"泥";s:3:"泥";s:3:"理";s:3:"理";s:3:"痢";s:3:"痢";s:3:"罹";s:3:"罹";s:3:"裏";s:3:"裏";s:3:"裡";s:3:"裡";s:3:"里";s:3:"里";s:3:"離";s:3:"離";s:3:"匿";s:3:"匿";s:3:"溺";s:3:"溺";s:3:"吝";s:3:"吝";s:3:"燐";s:3:"燐";s:3:"璘";s:3:"璘";s:3:"藺";s:3:"藺";s:3:"隣";s:3:"隣";s:3:"鱗";s:3:"鱗";s:3:"麟";s:3:"麟";s:3:"林";s:3:"林";s:3:"淋";s:3:"淋";s:3:"臨";s:3:"臨";s:3:"立";s:3:"立";s:3:"笠";s:3:"笠";s:3:"粒";s:3:"粒";s:3:"狀";s:3:"狀";s:3:"炙";s:3:"炙";s:3:"識";s:3:"識";s:3:"什";s:3:"什";s:3:"茶";s:3:"茶";s:3:"刺";s:3:"刺";s:3:"切";s:3:"切";s:3:"度";s:3:"度";s:3:"拓";s:3:"拓";s:3:"糖";s:3:"糖";s:3:"宅";s:3:"宅";s:3:"洞";s:3:"洞";s:3:"暴";s:3:"暴";s:3:"輻";s:3:"輻";s:3:"行";s:3:"行";s:3:"降";s:3:"降";s:3:"見";s:3:"見";s:3:"廓";s:3:"廓";s:3:"兀";s:3:"兀";s:3:"嗀";s:3:"嗀";s:3:"塚";s:3:"塚";s:3:"晴";s:3:"晴";s:3:"凞";s:3:"凞";s:3:"猪";s:3:"猪";s:3:"益";s:3:"益";s:3:"礼";s:3:"礼";s:3:"神";s:3:"神";s:3:"祥";s:3:"祥";s:3:"福";s:3:"福";s:3:"靖";s:3:"靖";s:3:"精";s:3:"精";s:3:"羽";s:3:"羽";s:3:"蘒";s:3:"蘒";s:3:"諸";s:3:"諸";s:3:"逸";s:3:"逸";s:3:"都";s:3:"都";s:3:"飯";s:3:"飯";s:3:"飼";s:3:"飼";s:3:"館";s:3:"館";s:3:"鶴";s:3:"鶴";s:3:"侮";s:3:"侮";s:3:"僧";s:3:"僧";s:3:"免";s:3:"免";s:3:"勉";s:3:"勉";s:3:"勤";s:3:"勤";s:3:"卑";s:3:"卑";s:3:"喝";s:3:"喝";s:3:"嘆";s:3:"嘆";s:3:"器";s:3:"器";s:3:"塀";s:3:"塀";s:3:"墨";s:3:"墨";s:3:"層";s:3:"層";s:3:"屮";s:3:"屮";s:3:"悔";s:3:"悔";s:3:"慨";s:3:"慨";s:3:"憎";s:3:"憎";s:3:"懲";s:3:"懲";s:3:"敏";s:3:"敏";s:3:"既";s:3:"既";s:3:"暑";s:3:"暑";s:3:"梅";s:3:"梅";s:3:"海";s:3:"海";s:3:"渚";s:3:"渚";s:3:"漢";s:3:"漢";s:3:"煮";s:3:"煮";s:3:"爫";s:3:"爫";s:3:"琢";s:3:"琢";s:3:"碑";s:3:"碑";s:3:"社";s:3:"社";s:3:"祉";s:3:"祉";s:3:"祈";s:3:"祈";s:3:"祐";s:3:"祐";s:3:"祖";s:3:"祖";s:3:"祝";s:3:"祝";s:3:"禍";s:3:"禍";s:3:"禎";s:3:"禎";s:3:"穀";s:3:"穀";s:3:"突";s:3:"突";s:3:"節";s:3:"節";s:3:"練";s:3:"練";s:3:"縉";s:3:"縉";s:3:"繁";s:3:"繁";s:3:"署";s:3:"署";s:3:"者";s:3:"者";s:3:"臭";s:3:"臭";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"艹";s:3:"著";s:3:"著";s:3:"褐";s:3:"褐";s:3:"視";s:3:"視";s:3:"謁";s:3:"謁";s:3:"謹";s:3:"謹";s:3:"賓";s:3:"賓";s:3:"贈";s:3:"贈";s:3:"辶";s:3:"辶";s:3:"逸";s:3:"逸";s:3:"難";s:3:"難";s:3:"響";s:3:"響";s:3:"頻";s:3:"頻";s:3:"恵";s:3:"恵";s:3:"𤋮";s:4:"𤋮";s:3:"舘";s:3:"舘";s:3:"並";s:3:"並";s:3:"况";s:3:"况";s:3:"全";s:3:"全";s:3:"侀";s:3:"侀";s:3:"充";s:3:"充";s:3:"冀";s:3:"冀";s:3:"勇";s:3:"勇";s:3:"勺";s:3:"勺";s:3:"喝";s:3:"喝";s:3:"啕";s:3:"啕";s:3:"喙";s:3:"喙";s:3:"嗢";s:3:"嗢";s:3:"塚";s:3:"塚";s:3:"墳";s:3:"墳";s:3:"奄";s:3:"奄";s:3:"奔";s:3:"奔";s:3:"婢";s:3:"婢";s:3:"嬨";s:3:"嬨";s:3:"廒";s:3:"廒";s:3:"廙";s:3:"廙";s:3:"彩";s:3:"彩";s:3:"徭";s:3:"徭";s:3:"惘";s:3:"惘";s:3:"慎";s:3:"慎";s:3:"愈";s:3:"愈";s:3:"憎";s:3:"憎";s:3:"慠";s:3:"慠";s:3:"懲";s:3:"懲";s:3:"戴";s:3:"戴";s:3:"揄";s:3:"揄";s:3:"搜";s:3:"搜";s:3:"摒";s:3:"摒";s:3:"敖";s:3:"敖";s:3:"晴";s:3:"晴";s:3:"朗";s:3:"朗";s:3:"望";s:3:"望";s:3:"杖";s:3:"杖";s:3:"歹";s:3:"歹";s:3:"殺";s:3:"殺";s:3:"流";s:3:"流";s:3:"滛";s:3:"滛";s:3:"滋";s:3:"滋";s:3:"漢";s:3:"漢";s:3:"瀞";s:3:"瀞";s:3:"煮";s:3:"煮";s:3:"瞧";s:3:"瞧";s:3:"爵";s:3:"爵";s:3:"犯";s:3:"犯";s:3:"猪";s:3:"猪";s:3:"瑱";s:3:"瑱";s:3:"甆";s:3:"甆";s:3:"画";s:3:"画";s:3:"瘝";s:3:"瘝";s:3:"瘟";s:3:"瘟";s:3:"益";s:3:"益";s:3:"盛";s:3:"盛";s:3:"直";s:3:"直";s:3:"睊";s:3:"睊";s:3:"着";s:3:"着";s:3:"磌";s:3:"磌";s:3:"窱";s:3:"窱";s:3:"節";s:3:"節";s:3:"类";s:3:"类";s:3:"絛";s:3:"絛";s:3:"練";s:3:"練";s:3:"缾";s:3:"缾";s:3:"者";s:3:"者";s:3:"荒";s:3:"荒";s:3:"華";s:3:"華";s:3:"蝹";s:3:"蝹";s:3:"襁";s:3:"襁";s:3:"覆";s:3:"覆";s:3:"視";s:3:"視";s:3:"調";s:3:"調";s:3:"諸";s:3:"諸";s:3:"請";s:3:"請";s:3:"謁";s:3:"謁";s:3:"諾";s:3:"諾";s:3:"諭";s:3:"諭";s:3:"謹";s:3:"謹";s:3:"變";s:3:"變";s:3:"贈";s:3:"贈";s:3:"輸";s:3:"輸";s:3:"遲";s:3:"遲";s:3:"醙";s:3:"醙";s:3:"鉶";s:3:"鉶";s:3:"陼";s:3:"陼";s:3:"難";s:3:"難";s:3:"靖";s:3:"靖";s:3:"韛";s:3:"韛";s:3:"響";s:3:"響";s:3:"頋";s:3:"頋";s:3:"頻";s:3:"頻";s:3:"鬒";s:3:"鬒";s:3:"龜";s:3:"龜";s:3:"𢡊";s:4:"𢡊";s:3:"𢡄";s:4:"𢡄";s:3:"𣏕";s:4:"𣏕";s:3:"㮝";s:3:"㮝";s:3:"䀘";s:3:"䀘";s:3:"䀹";s:3:"䀹";s:3:"𥉉";s:4:"𥉉";s:3:"𥳐";s:4:"𥳐";s:3:"𧻓";s:4:"𧻓";s:3:"齃";s:3:"齃";s:3:"龎";s:3:"龎";s:3:"ff";s:2:"ff";s:3:"fi";s:2:"fi";s:3:"fl";s:2:"fl";s:3:"ffi";s:3:"ffi";s:3:"ffl";s:3:"ffl";s:3:"ſt";s:2:"st";s:3:"st";s:2:"st";s:3:"ﬓ";s:4:"մն";s:3:"ﬔ";s:4:"մե";s:3:"ﬕ";s:4:"մի";s:3:"ﬖ";s:4:"վն";s:3:"ﬗ";s:4:"մխ";s:3:"יִ";s:4:"יִ";s:3:"ײַ";s:4:"ײַ";s:3:"ﬠ";s:2:"ע";s:3:"ﬡ";s:2:"א";s:3:"ﬢ";s:2:"ד";s:3:"ﬣ";s:2:"ה";s:3:"ﬤ";s:2:"כ";s:3:"ﬥ";s:2:"ל";s:3:"ﬦ";s:2:"ם";s:3:"ﬧ";s:2:"ר";s:3:"ﬨ";s:2:"ת";s:3:"﬩";s:1:"+";s:3:"שׁ";s:4:"שׁ";s:3:"שׂ";s:4:"שׂ";s:3:"שּׁ";s:6:"שּׁ";s:3:"שּׂ";s:6:"שּׂ";s:3:"אַ";s:4:"אַ";s:3:"אָ";s:4:"אָ";s:3:"אּ";s:4:"אּ";s:3:"בּ";s:4:"בּ";s:3:"גּ";s:4:"גּ";s:3:"דּ";s:4:"דּ";s:3:"הּ";s:4:"הּ";s:3:"וּ";s:4:"וּ";s:3:"זּ";s:4:"זּ";s:3:"טּ";s:4:"טּ";s:3:"יּ";s:4:"יּ";s:3:"ךּ";s:4:"ךּ";s:3:"כּ";s:4:"כּ";s:3:"לּ";s:4:"לּ";s:3:"מּ";s:4:"מּ";s:3:"נּ";s:4:"נּ";s:3:"סּ";s:4:"סּ";s:3:"ףּ";s:4:"ףּ";s:3:"פּ";s:4:"פּ";s:3:"צּ";s:4:"צּ";s:3:"קּ";s:4:"קּ";s:3:"רּ";s:4:"רּ";s:3:"שּ";s:4:"שּ";s:3:"תּ";s:4:"תּ";s:3:"וֹ";s:4:"וֹ";s:3:"בֿ";s:4:"בֿ";s:3:"כֿ";s:4:"כֿ";s:3:"פֿ";s:4:"פֿ";s:3:"ﭏ";s:4:"אל";s:3:"ﭐ";s:2:"ٱ";s:3:"ﭑ";s:2:"ٱ";s:3:"ﭒ";s:2:"ٻ";s:3:"ﭓ";s:2:"ٻ";s:3:"ﭔ";s:2:"ٻ";s:3:"ﭕ";s:2:"ٻ";s:3:"ﭖ";s:2:"پ";s:3:"ﭗ";s:2:"پ";s:3:"ﭘ";s:2:"پ";s:3:"ﭙ";s:2:"پ";s:3:"ﭚ";s:2:"ڀ";s:3:"ﭛ";s:2:"ڀ";s:3:"ﭜ";s:2:"ڀ";s:3:"ﭝ";s:2:"ڀ";s:3:"ﭞ";s:2:"ٺ";s:3:"ﭟ";s:2:"ٺ";s:3:"ﭠ";s:2:"ٺ";s:3:"ﭡ";s:2:"ٺ";s:3:"ﭢ";s:2:"ٿ";s:3:"ﭣ";s:2:"ٿ";s:3:"ﭤ";s:2:"ٿ";s:3:"ﭥ";s:2:"ٿ";s:3:"ﭦ";s:2:"ٹ";s:3:"ﭧ";s:2:"ٹ";s:3:"ﭨ";s:2:"ٹ";s:3:"ﭩ";s:2:"ٹ";s:3:"ﭪ";s:2:"ڤ";s:3:"ﭫ";s:2:"ڤ";s:3:"ﭬ";s:2:"ڤ";s:3:"ﭭ";s:2:"ڤ";s:3:"ﭮ";s:2:"ڦ";s:3:"ﭯ";s:2:"ڦ";s:3:"ﭰ";s:2:"ڦ";s:3:"ﭱ";s:2:"ڦ";s:3:"ﭲ";s:2:"ڄ";s:3:"ﭳ";s:2:"ڄ";s:3:"ﭴ";s:2:"ڄ";s:3:"ﭵ";s:2:"ڄ";s:3:"ﭶ";s:2:"ڃ";s:3:"ﭷ";s:2:"ڃ";s:3:"ﭸ";s:2:"ڃ";s:3:"ﭹ";s:2:"ڃ";s:3:"ﭺ";s:2:"چ";s:3:"ﭻ";s:2:"چ";s:3:"ﭼ";s:2:"چ";s:3:"ﭽ";s:2:"چ";s:3:"ﭾ";s:2:"ڇ";s:3:"ﭿ";s:2:"ڇ";s:3:"ﮀ";s:2:"ڇ";s:3:"ﮁ";s:2:"ڇ";s:3:"ﮂ";s:2:"ڍ";s:3:"ﮃ";s:2:"ڍ";s:3:"ﮄ";s:2:"ڌ";s:3:"ﮅ";s:2:"ڌ";s:3:"ﮆ";s:2:"ڎ";s:3:"ﮇ";s:2:"ڎ";s:3:"ﮈ";s:2:"ڈ";s:3:"ﮉ";s:2:"ڈ";s:3:"ﮊ";s:2:"ژ";s:3:"ﮋ";s:2:"ژ";s:3:"ﮌ";s:2:"ڑ";s:3:"ﮍ";s:2:"ڑ";s:3:"ﮎ";s:2:"ک";s:3:"ﮏ";s:2:"ک";s:3:"ﮐ";s:2:"ک";s:3:"ﮑ";s:2:"ک";s:3:"ﮒ";s:2:"گ";s:3:"ﮓ";s:2:"گ";s:3:"ﮔ";s:2:"گ";s:3:"ﮕ";s:2:"گ";s:3:"ﮖ";s:2:"ڳ";s:3:"ﮗ";s:2:"ڳ";s:3:"ﮘ";s:2:"ڳ";s:3:"ﮙ";s:2:"ڳ";s:3:"ﮚ";s:2:"ڱ";s:3:"ﮛ";s:2:"ڱ";s:3:"ﮜ";s:2:"ڱ";s:3:"ﮝ";s:2:"ڱ";s:3:"ﮞ";s:2:"ں";s:3:"ﮟ";s:2:"ں";s:3:"ﮠ";s:2:"ڻ";s:3:"ﮡ";s:2:"ڻ";s:3:"ﮢ";s:2:"ڻ";s:3:"ﮣ";s:2:"ڻ";s:3:"ﮤ";s:4:"ۀ";s:3:"ﮥ";s:4:"ۀ";s:3:"ﮦ";s:2:"ہ";s:3:"ﮧ";s:2:"ہ";s:3:"ﮨ";s:2:"ہ";s:3:"ﮩ";s:2:"ہ";s:3:"ﮪ";s:2:"ھ";s:3:"ﮫ";s:2:"ھ";s:3:"ﮬ";s:2:"ھ";s:3:"ﮭ";s:2:"ھ";s:3:"ﮮ";s:2:"ے";s:3:"ﮯ";s:2:"ے";s:3:"ﮰ";s:4:"ۓ";s:3:"ﮱ";s:4:"ۓ";s:3:"ﯓ";s:2:"ڭ";s:3:"ﯔ";s:2:"ڭ";s:3:"ﯕ";s:2:"ڭ";s:3:"ﯖ";s:2:"ڭ";s:3:"ﯗ";s:2:"ۇ";s:3:"ﯘ";s:2:"ۇ";s:3:"ﯙ";s:2:"ۆ";s:3:"ﯚ";s:2:"ۆ";s:3:"ﯛ";s:2:"ۈ";s:3:"ﯜ";s:2:"ۈ";s:3:"ﯝ";s:4:"ۇٴ";s:3:"ﯞ";s:2:"ۋ";s:3:"ﯟ";s:2:"ۋ";s:3:"ﯠ";s:2:"ۅ";s:3:"ﯡ";s:2:"ۅ";s:3:"ﯢ";s:2:"ۉ";s:3:"ﯣ";s:2:"ۉ";s:3:"ﯤ";s:2:"ې";s:3:"ﯥ";s:2:"ې";s:3:"ﯦ";s:2:"ې";s:3:"ﯧ";s:2:"ې";s:3:"ﯨ";s:2:"ى";s:3:"ﯩ";s:2:"ى";s:3:"ﯪ";s:6:"ئا";s:3:"ﯫ";s:6:"ئا";s:3:"ﯬ";s:6:"ئە";s:3:"ﯭ";s:6:"ئە";s:3:"ﯮ";s:6:"ئو";s:3:"ﯯ";s:6:"ئو";s:3:"ﯰ";s:6:"ئۇ";s:3:"ﯱ";s:6:"ئۇ";s:3:"ﯲ";s:6:"ئۆ";s:3:"ﯳ";s:6:"ئۆ";s:3:"ﯴ";s:6:"ئۈ";s:3:"ﯵ";s:6:"ئۈ";s:3:"ﯶ";s:6:"ئې";s:3:"ﯷ";s:6:"ئې";s:3:"ﯸ";s:6:"ئې";s:3:"ﯹ";s:6:"ئى";s:3:"ﯺ";s:6:"ئى";s:3:"ﯻ";s:6:"ئى";s:3:"ﯼ";s:2:"ی";s:3:"ﯽ";s:2:"ی";s:3:"ﯾ";s:2:"ی";s:3:"ﯿ";s:2:"ی";s:3:"ﰀ";s:6:"ئج";s:3:"ﰁ";s:6:"ئح";s:3:"ﰂ";s:6:"ئم";s:3:"ﰃ";s:6:"ئى";s:3:"ﰄ";s:6:"ئي";s:3:"ﰅ";s:4:"بج";s:3:"ﰆ";s:4:"بح";s:3:"ﰇ";s:4:"بخ";s:3:"ﰈ";s:4:"بم";s:3:"ﰉ";s:4:"بى";s:3:"ﰊ";s:4:"بي";s:3:"ﰋ";s:4:"تج";s:3:"ﰌ";s:4:"تح";s:3:"ﰍ";s:4:"تخ";s:3:"ﰎ";s:4:"تم";s:3:"ﰏ";s:4:"تى";s:3:"ﰐ";s:4:"تي";s:3:"ﰑ";s:4:"ثج";s:3:"ﰒ";s:4:"ثم";s:3:"ﰓ";s:4:"ثى";s:3:"ﰔ";s:4:"ثي";s:3:"ﰕ";s:4:"جح";s:3:"ﰖ";s:4:"جم";s:3:"ﰗ";s:4:"حج";s:3:"ﰘ";s:4:"حم";s:3:"ﰙ";s:4:"خج";s:3:"ﰚ";s:4:"خح";s:3:"ﰛ";s:4:"خم";s:3:"ﰜ";s:4:"سج";s:3:"ﰝ";s:4:"سح";s:3:"ﰞ";s:4:"سخ";s:3:"ﰟ";s:4:"سم";s:3:"ﰠ";s:4:"صح";s:3:"ﰡ";s:4:"صم";s:3:"ﰢ";s:4:"ضج";s:3:"ﰣ";s:4:"ضح";s:3:"ﰤ";s:4:"ضخ";s:3:"ﰥ";s:4:"ضم";s:3:"ﰦ";s:4:"طح";s:3:"ﰧ";s:4:"طم";s:3:"ﰨ";s:4:"ظم";s:3:"ﰩ";s:4:"عج";s:3:"ﰪ";s:4:"عم";s:3:"ﰫ";s:4:"غج";s:3:"ﰬ";s:4:"غم";s:3:"ﰭ";s:4:"فج";s:3:"ﰮ";s:4:"فح";s:3:"ﰯ";s:4:"فخ";s:3:"ﰰ";s:4:"فم";s:3:"ﰱ";s:4:"فى";s:3:"ﰲ";s:4:"في";s:3:"ﰳ";s:4:"قح";s:3:"ﰴ";s:4:"قم";s:3:"ﰵ";s:4:"قى";s:3:"ﰶ";s:4:"قي";s:3:"ﰷ";s:4:"كا";s:3:"ﰸ";s:4:"كج";s:3:"ﰹ";s:4:"كح";s:3:"ﰺ";s:4:"كخ";s:3:"ﰻ";s:4:"كل";s:3:"ﰼ";s:4:"كم";s:3:"ﰽ";s:4:"كى";s:3:"ﰾ";s:4:"كي";s:3:"ﰿ";s:4:"لج";s:3:"ﱀ";s:4:"لح";s:3:"ﱁ";s:4:"لخ";s:3:"ﱂ";s:4:"لم";s:3:"ﱃ";s:4:"لى";s:3:"ﱄ";s:4:"لي";s:3:"ﱅ";s:4:"مج";s:3:"ﱆ";s:4:"مح";s:3:"ﱇ";s:4:"مخ";s:3:"ﱈ";s:4:"مم";s:3:"ﱉ";s:4:"مى";s:3:"ﱊ";s:4:"مي";s:3:"ﱋ";s:4:"نج";s:3:"ﱌ";s:4:"نح";s:3:"ﱍ";s:4:"نخ";s:3:"ﱎ";s:4:"نم";s:3:"ﱏ";s:4:"نى";s:3:"ﱐ";s:4:"ني";s:3:"ﱑ";s:4:"هج";s:3:"ﱒ";s:4:"هم";s:3:"ﱓ";s:4:"هى";s:3:"ﱔ";s:4:"هي";s:3:"ﱕ";s:4:"يج";s:3:"ﱖ";s:4:"يح";s:3:"ﱗ";s:4:"يخ";s:3:"ﱘ";s:4:"يم";s:3:"ﱙ";s:4:"يى";s:3:"ﱚ";s:4:"يي";s:3:"ﱛ";s:4:"ذٰ";s:3:"ﱜ";s:4:"رٰ";s:3:"ﱝ";s:4:"ىٰ";s:3:"ﱞ";s:5:" ٌّ";s:3:"ﱟ";s:5:" ٍّ";s:3:"ﱠ";s:5:" َّ";s:3:"ﱡ";s:5:" ُّ";s:3:"ﱢ";s:5:" ِّ";s:3:"ﱣ";s:5:" ّٰ";s:3:"ﱤ";s:6:"ئر";s:3:"ﱥ";s:6:"ئز";s:3:"ﱦ";s:6:"ئم";s:3:"ﱧ";s:6:"ئن";s:3:"ﱨ";s:6:"ئى";s:3:"ﱩ";s:6:"ئي";s:3:"ﱪ";s:4:"بر";s:3:"ﱫ";s:4:"بز";s:3:"ﱬ";s:4:"بم";s:3:"ﱭ";s:4:"بن";s:3:"ﱮ";s:4:"بى";s:3:"ﱯ";s:4:"بي";s:3:"ﱰ";s:4:"تر";s:3:"ﱱ";s:4:"تز";s:3:"ﱲ";s:4:"تم";s:3:"ﱳ";s:4:"تن";s:3:"ﱴ";s:4:"تى";s:3:"ﱵ";s:4:"تي";s:3:"ﱶ";s:4:"ثر";s:3:"ﱷ";s:4:"ثز";s:3:"ﱸ";s:4:"ثم";s:3:"ﱹ";s:4:"ثن";s:3:"ﱺ";s:4:"ثى";s:3:"ﱻ";s:4:"ثي";s:3:"ﱼ";s:4:"فى";s:3:"ﱽ";s:4:"في";s:3:"ﱾ";s:4:"قى";s:3:"ﱿ";s:4:"قي";s:3:"ﲀ";s:4:"كا";s:3:"ﲁ";s:4:"كل";s:3:"ﲂ";s:4:"كم";s:3:"ﲃ";s:4:"كى";s:3:"ﲄ";s:4:"كي";s:3:"ﲅ";s:4:"لم";s:3:"ﲆ";s:4:"لى";s:3:"ﲇ";s:4:"لي";s:3:"ﲈ";s:4:"ما";s:3:"ﲉ";s:4:"مم";s:3:"ﲊ";s:4:"نر";s:3:"ﲋ";s:4:"نز";s:3:"ﲌ";s:4:"نم";s:3:"ﲍ";s:4:"نن";s:3:"ﲎ";s:4:"نى";s:3:"ﲏ";s:4:"ني";s:3:"ﲐ";s:4:"ىٰ";s:3:"ﲑ";s:4:"ير";s:3:"ﲒ";s:4:"يز";s:3:"ﲓ";s:4:"يم";s:3:"ﲔ";s:4:"ين";s:3:"ﲕ";s:4:"يى";s:3:"ﲖ";s:4:"يي";s:3:"ﲗ";s:6:"ئج";s:3:"ﲘ";s:6:"ئح";s:3:"ﲙ";s:6:"ئخ";s:3:"ﲚ";s:6:"ئم";s:3:"ﲛ";s:6:"ئه";s:3:"ﲜ";s:4:"بج";s:3:"ﲝ";s:4:"بح";s:3:"ﲞ";s:4:"بخ";s:3:"ﲟ";s:4:"بم";s:3:"ﲠ";s:4:"به";s:3:"ﲡ";s:4:"تج";s:3:"ﲢ";s:4:"تح";s:3:"ﲣ";s:4:"تخ";s:3:"ﲤ";s:4:"تم";s:3:"ﲥ";s:4:"ته";s:3:"ﲦ";s:4:"ثم";s:3:"ﲧ";s:4:"جح";s:3:"ﲨ";s:4:"جم";s:3:"ﲩ";s:4:"حج";s:3:"ﲪ";s:4:"حم";s:3:"ﲫ";s:4:"خج";s:3:"ﲬ";s:4:"خم";s:3:"ﲭ";s:4:"سج";s:3:"ﲮ";s:4:"سح";s:3:"ﲯ";s:4:"سخ";s:3:"ﲰ";s:4:"سم";s:3:"ﲱ";s:4:"صح";s:3:"ﲲ";s:4:"صخ";s:3:"ﲳ";s:4:"صم";s:3:"ﲴ";s:4:"ضج";s:3:"ﲵ";s:4:"ضح";s:3:"ﲶ";s:4:"ضخ";s:3:"ﲷ";s:4:"ضم";s:3:"ﲸ";s:4:"طح";s:3:"ﲹ";s:4:"ظم";s:3:"ﲺ";s:4:"عج";s:3:"ﲻ";s:4:"عم";s:3:"ﲼ";s:4:"غج";s:3:"ﲽ";s:4:"غم";s:3:"ﲾ";s:4:"فج";s:3:"ﲿ";s:4:"فح";s:3:"ﳀ";s:4:"فخ";s:3:"ﳁ";s:4:"فم";s:3:"ﳂ";s:4:"قح";s:3:"ﳃ";s:4:"قم";s:3:"ﳄ";s:4:"كج";s:3:"ﳅ";s:4:"كح";s:3:"ﳆ";s:4:"كخ";s:3:"ﳇ";s:4:"كل";s:3:"ﳈ";s:4:"كم";s:3:"ﳉ";s:4:"لج";s:3:"ﳊ";s:4:"لح";s:3:"ﳋ";s:4:"لخ";s:3:"ﳌ";s:4:"لم";s:3:"ﳍ";s:4:"له";s:3:"ﳎ";s:4:"مج";s:3:"ﳏ";s:4:"مح";s:3:"ﳐ";s:4:"مخ";s:3:"ﳑ";s:4:"مم";s:3:"ﳒ";s:4:"نج";s:3:"ﳓ";s:4:"نح";s:3:"ﳔ";s:4:"نخ";s:3:"ﳕ";s:4:"نم";s:3:"ﳖ";s:4:"نه";s:3:"ﳗ";s:4:"هج";s:3:"ﳘ";s:4:"هم";s:3:"ﳙ";s:4:"هٰ";s:3:"ﳚ";s:4:"يج";s:3:"ﳛ";s:4:"يح";s:3:"ﳜ";s:4:"يخ";s:3:"ﳝ";s:4:"يم";s:3:"ﳞ";s:4:"يه";s:3:"ﳟ";s:6:"ئم";s:3:"ﳠ";s:6:"ئه";s:3:"ﳡ";s:4:"بم";s:3:"ﳢ";s:4:"به";s:3:"ﳣ";s:4:"تم";s:3:"ﳤ";s:4:"ته";s:3:"ﳥ";s:4:"ثم";s:3:"ﳦ";s:4:"ثه";s:3:"ﳧ";s:4:"سم";s:3:"ﳨ";s:4:"سه";s:3:"ﳩ";s:4:"شم";s:3:"ﳪ";s:4:"شه";s:3:"ﳫ";s:4:"كل";s:3:"ﳬ";s:4:"كم";s:3:"ﳭ";s:4:"لم";s:3:"ﳮ";s:4:"نم";s:3:"ﳯ";s:4:"نه";s:3:"ﳰ";s:4:"يم";s:3:"ﳱ";s:4:"يه";s:3:"ﳲ";s:6:"ـَّ";s:3:"ﳳ";s:6:"ـُّ";s:3:"ﳴ";s:6:"ـِّ";s:3:"ﳵ";s:4:"طى";s:3:"ﳶ";s:4:"طي";s:3:"ﳷ";s:4:"عى";s:3:"ﳸ";s:4:"عي";s:3:"ﳹ";s:4:"غى";s:3:"ﳺ";s:4:"غي";s:3:"ﳻ";s:4:"سى";s:3:"ﳼ";s:4:"سي";s:3:"ﳽ";s:4:"شى";s:3:"ﳾ";s:4:"شي";s:3:"ﳿ";s:4:"حى";s:3:"ﴀ";s:4:"حي";s:3:"ﴁ";s:4:"جى";s:3:"ﴂ";s:4:"جي";s:3:"ﴃ";s:4:"خى";s:3:"ﴄ";s:4:"خي";s:3:"ﴅ";s:4:"صى";s:3:"ﴆ";s:4:"صي";s:3:"ﴇ";s:4:"ضى";s:3:"ﴈ";s:4:"ضي";s:3:"ﴉ";s:4:"شج";s:3:"ﴊ";s:4:"شح";s:3:"ﴋ";s:4:"شخ";s:3:"ﴌ";s:4:"شم";s:3:"ﴍ";s:4:"شر";s:3:"ﴎ";s:4:"سر";s:3:"ﴏ";s:4:"صر";s:3:"ﴐ";s:4:"ضر";s:3:"ﴑ";s:4:"طى";s:3:"ﴒ";s:4:"طي";s:3:"ﴓ";s:4:"عى";s:3:"ﴔ";s:4:"عي";s:3:"ﴕ";s:4:"غى";s:3:"ﴖ";s:4:"غي";s:3:"ﴗ";s:4:"سى";s:3:"ﴘ";s:4:"سي";s:3:"ﴙ";s:4:"شى";s:3:"ﴚ";s:4:"شي";s:3:"ﴛ";s:4:"حى";s:3:"ﴜ";s:4:"حي";s:3:"ﴝ";s:4:"جى";s:3:"ﴞ";s:4:"جي";s:3:"ﴟ";s:4:"خى";s:3:"ﴠ";s:4:"خي";s:3:"ﴡ";s:4:"صى";s:3:"ﴢ";s:4:"صي";s:3:"ﴣ";s:4:"ضى";s:3:"ﴤ";s:4:"ضي";s:3:"ﴥ";s:4:"شج";s:3:"ﴦ";s:4:"شح";s:3:"ﴧ";s:4:"شخ";s:3:"ﴨ";s:4:"شم";s:3:"ﴩ";s:4:"شر";s:3:"ﴪ";s:4:"سر";s:3:"ﴫ";s:4:"صر";s:3:"ﴬ";s:4:"ضر";s:3:"ﴭ";s:4:"شج";s:3:"ﴮ";s:4:"شح";s:3:"ﴯ";s:4:"شخ";s:3:"ﴰ";s:4:"شم";s:3:"ﴱ";s:4:"سه";s:3:"ﴲ";s:4:"شه";s:3:"ﴳ";s:4:"طم";s:3:"ﴴ";s:4:"سج";s:3:"ﴵ";s:4:"سح";s:3:"ﴶ";s:4:"سخ";s:3:"ﴷ";s:4:"شج";s:3:"ﴸ";s:4:"شح";s:3:"ﴹ";s:4:"شخ";s:3:"ﴺ";s:4:"طم";s:3:"ﴻ";s:4:"ظم";s:3:"ﴼ";s:4:"اً";s:3:"ﴽ";s:4:"اً";s:3:"ﵐ";s:6:"تجم";s:3:"ﵑ";s:6:"تحج";s:3:"ﵒ";s:6:"تحج";s:3:"ﵓ";s:6:"تحم";s:3:"ﵔ";s:6:"تخم";s:3:"ﵕ";s:6:"تمج";s:3:"ﵖ";s:6:"تمح";s:3:"ﵗ";s:6:"تمخ";s:3:"ﵘ";s:6:"جمح";s:3:"ﵙ";s:6:"جمح";s:3:"ﵚ";s:6:"حمي";s:3:"ﵛ";s:6:"حمى";s:3:"ﵜ";s:6:"سحج";s:3:"ﵝ";s:6:"سجح";s:3:"ﵞ";s:6:"سجى";s:3:"ﵟ";s:6:"سمح";s:3:"ﵠ";s:6:"سمح";s:3:"ﵡ";s:6:"سمج";s:3:"ﵢ";s:6:"سمم";s:3:"ﵣ";s:6:"سمم";s:3:"ﵤ";s:6:"صحح";s:3:"ﵥ";s:6:"صحح";s:3:"ﵦ";s:6:"صمم";s:3:"ﵧ";s:6:"شحم";s:3:"ﵨ";s:6:"شحم";s:3:"ﵩ";s:6:"شجي";s:3:"ﵪ";s:6:"شمخ";s:3:"ﵫ";s:6:"شمخ";s:3:"ﵬ";s:6:"شمم";s:3:"ﵭ";s:6:"شمم";s:3:"ﵮ";s:6:"ضحى";s:3:"ﵯ";s:6:"ضخم";s:3:"ﵰ";s:6:"ضخم";s:3:"ﵱ";s:6:"طمح";s:3:"ﵲ";s:6:"طمح";s:3:"ﵳ";s:6:"طمم";s:3:"ﵴ";s:6:"طمي";s:3:"ﵵ";s:6:"عجم";s:3:"ﵶ";s:6:"عمم";s:3:"ﵷ";s:6:"عمم";s:3:"ﵸ";s:6:"عمى";s:3:"ﵹ";s:6:"غمم";s:3:"ﵺ";s:6:"غمي";s:3:"ﵻ";s:6:"غمى";s:3:"ﵼ";s:6:"فخم";s:3:"ﵽ";s:6:"فخم";s:3:"ﵾ";s:6:"قمح";s:3:"ﵿ";s:6:"قمم";s:3:"ﶀ";s:6:"لحم";s:3:"ﶁ";s:6:"لحي";s:3:"ﶂ";s:6:"لحى";s:3:"ﶃ";s:6:"لجج";s:3:"ﶄ";s:6:"لجج";s:3:"ﶅ";s:6:"لخم";s:3:"ﶆ";s:6:"لخم";s:3:"ﶇ";s:6:"لمح";s:3:"ﶈ";s:6:"لمح";s:3:"ﶉ";s:6:"محج";s:3:"ﶊ";s:6:"محم";s:3:"ﶋ";s:6:"محي";s:3:"ﶌ";s:6:"مجح";s:3:"ﶍ";s:6:"مجم";s:3:"ﶎ";s:6:"مخج";s:3:"ﶏ";s:6:"مخم";s:3:"ﶒ";s:6:"مجخ";s:3:"ﶓ";s:6:"همج";s:3:"ﶔ";s:6:"همم";s:3:"ﶕ";s:6:"نحم";s:3:"ﶖ";s:6:"نحى";s:3:"ﶗ";s:6:"نجم";s:3:"ﶘ";s:6:"نجم";s:3:"ﶙ";s:6:"نجى";s:3:"ﶚ";s:6:"نمي";s:3:"ﶛ";s:6:"نمى";s:3:"ﶜ";s:6:"يمم";s:3:"ﶝ";s:6:"يمم";s:3:"ﶞ";s:6:"بخي";s:3:"ﶟ";s:6:"تجي";s:3:"ﶠ";s:6:"تجى";s:3:"ﶡ";s:6:"تخي";s:3:"ﶢ";s:6:"تخى";s:3:"ﶣ";s:6:"تمي";s:3:"ﶤ";s:6:"تمى";s:3:"ﶥ";s:6:"جمي";s:3:"ﶦ";s:6:"جحى";s:3:"ﶧ";s:6:"جمى";s:3:"ﶨ";s:6:"سخى";s:3:"ﶩ";s:6:"صحي";s:3:"ﶪ";s:6:"شحي";s:3:"ﶫ";s:6:"ضحي";s:3:"ﶬ";s:6:"لجي";s:3:"ﶭ";s:6:"لمي";s:3:"ﶮ";s:6:"يحي";s:3:"ﶯ";s:6:"يجي";s:3:"ﶰ";s:6:"يمي";s:3:"ﶱ";s:6:"ممي";s:3:"ﶲ";s:6:"قمي";s:3:"ﶳ";s:6:"نحي";s:3:"ﶴ";s:6:"قمح";s:3:"ﶵ";s:6:"لحم";s:3:"ﶶ";s:6:"عمي";s:3:"ﶷ";s:6:"كمي";s:3:"ﶸ";s:6:"نجح";s:3:"ﶹ";s:6:"مخي";s:3:"ﶺ";s:6:"لجم";s:3:"ﶻ";s:6:"كمم";s:3:"ﶼ";s:6:"لجم";s:3:"ﶽ";s:6:"نجح";s:3:"ﶾ";s:6:"جحي";s:3:"ﶿ";s:6:"حجي";s:3:"ﷀ";s:6:"مجي";s:3:"ﷁ";s:6:"فمي";s:3:"ﷂ";s:6:"بحي";s:3:"ﷃ";s:6:"كمم";s:3:"ﷄ";s:6:"عجم";s:3:"ﷅ";s:6:"صمم";s:3:"ﷆ";s:6:"سخي";s:3:"ﷇ";s:6:"نجي";s:3:"ﷰ";s:6:"صلے";s:3:"ﷱ";s:6:"قلے";s:3:"ﷲ";s:8:"الله";s:3:"ﷳ";s:8:"اكبر";s:3:"ﷴ";s:8:"محمد";s:3:"ﷵ";s:8:"صلعم";s:3:"ﷶ";s:8:"رسول";s:3:"ﷷ";s:8:"عليه";s:3:"ﷸ";s:8:"وسلم";s:3:"ﷹ";s:6:"صلى";s:3:"ﷺ";s:33:"صلى الله عليه وسلم";s:3:"ﷻ";s:15:"جل جلاله";s:3:"﷼";s:8:"ریال";s:3:"︐";s:1:",";s:3:"︑";s:3:"、";s:3:"︒";s:3:"。";s:3:"︓";s:1:":";s:3:"︔";s:1:";";s:3:"︕";s:1:"!";s:3:"︖";s:1:"?";s:3:"︗";s:3:"〖";s:3:"︘";s:3:"〗";s:3:"︙";s:3:"...";s:3:"︰";s:2:"..";s:3:"︱";s:3:"—";s:3:"︲";s:3:"–";s:3:"︳";s:1:"_";s:3:"︴";s:1:"_";s:3:"︵";s:1:"(";s:3:"︶";s:1:")";s:3:"︷";s:1:"{";s:3:"︸";s:1:"}";s:3:"︹";s:3:"〔";s:3:"︺";s:3:"〕";s:3:"︻";s:3:"【";s:3:"︼";s:3:"】";s:3:"︽";s:3:"《";s:3:"︾";s:3:"》";s:3:"︿";s:3:"〈";s:3:"﹀";s:3:"〉";s:3:"﹁";s:3:"「";s:3:"﹂";s:3:"」";s:3:"﹃";s:3:"『";s:3:"﹄";s:3:"』";s:3:"﹇";s:1:"[";s:3:"﹈";s:1:"]";s:3:"﹉";s:3:" ̅";s:3:"﹊";s:3:" ̅";s:3:"﹋";s:3:" ̅";s:3:"﹌";s:3:" ̅";s:3:"﹍";s:1:"_";s:3:"﹎";s:1:"_";s:3:"﹏";s:1:"_";s:3:"﹐";s:1:",";s:3:"﹑";s:3:"、";s:3:"﹒";s:1:".";s:3:"﹔";s:1:";";s:3:"﹕";s:1:":";s:3:"﹖";s:1:"?";s:3:"﹗";s:1:"!";s:3:"﹘";s:3:"—";s:3:"﹙";s:1:"(";s:3:"﹚";s:1:")";s:3:"﹛";s:1:"{";s:3:"﹜";s:1:"}";s:3:"﹝";s:3:"〔";s:3:"﹞";s:3:"〕";s:3:"﹟";s:1:"#";s:3:"﹠";s:1:"&";s:3:"﹡";s:1:"*";s:3:"﹢";s:1:"+";s:3:"﹣";s:1:"-";s:3:"﹤";s:1:"<";s:3:"﹥";s:1:">";s:3:"﹦";s:1:"=";s:3:"﹨";s:1:"\\";s:3:"﹩";s:1:"$";s:3:"﹪";s:1:"%";s:3:"﹫";s:1:"@";s:3:"ﹰ";s:3:" ً";s:3:"ﹱ";s:4:"ـً";s:3:"ﹲ";s:3:" ٌ";s:3:"ﹴ";s:3:" ٍ";s:3:"ﹶ";s:3:" َ";s:3:"ﹷ";s:4:"ـَ";s:3:"ﹸ";s:3:" ُ";s:3:"ﹹ";s:4:"ـُ";s:3:"ﹺ";s:3:" ِ";s:3:"ﹻ";s:4:"ـِ";s:3:"ﹼ";s:3:" ّ";s:3:"ﹽ";s:4:"ـّ";s:3:"ﹾ";s:3:" ْ";s:3:"ﹿ";s:4:"ـْ";s:3:"ﺀ";s:2:"ء";s:3:"ﺁ";s:4:"آ";s:3:"ﺂ";s:4:"آ";s:3:"ﺃ";s:4:"أ";s:3:"ﺄ";s:4:"أ";s:3:"ﺅ";s:4:"ؤ";s:3:"ﺆ";s:4:"ؤ";s:3:"ﺇ";s:4:"إ";s:3:"ﺈ";s:4:"إ";s:3:"ﺉ";s:4:"ئ";s:3:"ﺊ";s:4:"ئ";s:3:"ﺋ";s:4:"ئ";s:3:"ﺌ";s:4:"ئ";s:3:"ﺍ";s:2:"ا";s:3:"ﺎ";s:2:"ا";s:3:"ﺏ";s:2:"ب";s:3:"ﺐ";s:2:"ب";s:3:"ﺑ";s:2:"ب";s:3:"ﺒ";s:2:"ب";s:3:"ﺓ";s:2:"ة";s:3:"ﺔ";s:2:"ة";s:3:"ﺕ";s:2:"ت";s:3:"ﺖ";s:2:"ت";s:3:"ﺗ";s:2:"ت";s:3:"ﺘ";s:2:"ت";s:3:"ﺙ";s:2:"ث";s:3:"ﺚ";s:2:"ث";s:3:"ﺛ";s:2:"ث";s:3:"ﺜ";s:2:"ث";s:3:"ﺝ";s:2:"ج";s:3:"ﺞ";s:2:"ج";s:3:"ﺟ";s:2:"ج";s:3:"ﺠ";s:2:"ج";s:3:"ﺡ";s:2:"ح";s:3:"ﺢ";s:2:"ح";s:3:"ﺣ";s:2:"ح";s:3:"ﺤ";s:2:"ح";s:3:"ﺥ";s:2:"خ";s:3:"ﺦ";s:2:"خ";s:3:"ﺧ";s:2:"خ";s:3:"ﺨ";s:2:"خ";s:3:"ﺩ";s:2:"د";s:3:"ﺪ";s:2:"د";s:3:"ﺫ";s:2:"ذ";s:3:"ﺬ";s:2:"ذ";s:3:"ﺭ";s:2:"ر";s:3:"ﺮ";s:2:"ر";s:3:"ﺯ";s:2:"ز";s:3:"ﺰ";s:2:"ز";s:3:"ﺱ";s:2:"س";s:3:"ﺲ";s:2:"س";s:3:"ﺳ";s:2:"س";s:3:"ﺴ";s:2:"س";s:3:"ﺵ";s:2:"ش";s:3:"ﺶ";s:2:"ش";s:3:"ﺷ";s:2:"ش";s:3:"ﺸ";s:2:"ش";s:3:"ﺹ";s:2:"ص";s:3:"ﺺ";s:2:"ص";s:3:"ﺻ";s:2:"ص";s:3:"ﺼ";s:2:"ص";s:3:"ﺽ";s:2:"ض";s:3:"ﺾ";s:2:"ض";s:3:"ﺿ";s:2:"ض";s:3:"ﻀ";s:2:"ض";s:3:"ﻁ";s:2:"ط";s:3:"ﻂ";s:2:"ط";s:3:"ﻃ";s:2:"ط";s:3:"ﻄ";s:2:"ط";s:3:"ﻅ";s:2:"ظ";s:3:"ﻆ";s:2:"ظ";s:3:"ﻇ";s:2:"ظ";s:3:"ﻈ";s:2:"ظ";s:3:"ﻉ";s:2:"ع";s:3:"ﻊ";s:2:"ع";s:3:"ﻋ";s:2:"ع";s:3:"ﻌ";s:2:"ع";s:3:"ﻍ";s:2:"غ";s:3:"ﻎ";s:2:"غ";s:3:"ﻏ";s:2:"غ";s:3:"ﻐ";s:2:"غ";s:3:"ﻑ";s:2:"ف";s:3:"ﻒ";s:2:"ف";s:3:"ﻓ";s:2:"ف";s:3:"ﻔ";s:2:"ف";s:3:"ﻕ";s:2:"ق";s:3:"ﻖ";s:2:"ق";s:3:"ﻗ";s:2:"ق";s:3:"ﻘ";s:2:"ق";s:3:"ﻙ";s:2:"ك";s:3:"ﻚ";s:2:"ك";s:3:"ﻛ";s:2:"ك";s:3:"ﻜ";s:2:"ك";s:3:"ﻝ";s:2:"ل";s:3:"ﻞ";s:2:"ل";s:3:"ﻟ";s:2:"ل";s:3:"ﻠ";s:2:"ل";s:3:"ﻡ";s:2:"م";s:3:"ﻢ";s:2:"م";s:3:"ﻣ";s:2:"م";s:3:"ﻤ";s:2:"م";s:3:"ﻥ";s:2:"ن";s:3:"ﻦ";s:2:"ن";s:3:"ﻧ";s:2:"ن";s:3:"ﻨ";s:2:"ن";s:3:"ﻩ";s:2:"ه";s:3:"ﻪ";s:2:"ه";s:3:"ﻫ";s:2:"ه";s:3:"ﻬ";s:2:"ه";s:3:"ﻭ";s:2:"و";s:3:"ﻮ";s:2:"و";s:3:"ﻯ";s:2:"ى";s:3:"ﻰ";s:2:"ى";s:3:"ﻱ";s:2:"ي";s:3:"ﻲ";s:2:"ي";s:3:"ﻳ";s:2:"ي";s:3:"ﻴ";s:2:"ي";s:3:"ﻵ";s:6:"لآ";s:3:"ﻶ";s:6:"لآ";s:3:"ﻷ";s:6:"لأ";s:3:"ﻸ";s:6:"لأ";s:3:"ﻹ";s:6:"لإ";s:3:"ﻺ";s:6:"لإ";s:3:"ﻻ";s:4:"لا";s:3:"ﻼ";s:4:"لا";s:3:"!";s:1:"!";s:3:""";s:1:""";s:3:"#";s:1:"#";s:3:"$";s:1:"$";s:3:"%";s:1:"%";s:3:"&";s:1:"&";s:3:"'";s:1:"\'";s:3:"(";s:1:"(";s:3:")";s:1:")";s:3:"*";s:1:"*";s:3:"+";s:1:"+";s:3:",";s:1:",";s:3:"-";s:1:"-";s:3:".";s:1:".";s:3:"/";s:1:"/";s:3:"0";s:1:"0";s:3:"1";s:1:"1";s:3:"2";s:1:"2";s:3:"3";s:1:"3";s:3:"4";s:1:"4";s:3:"5";s:1:"5";s:3:"6";s:1:"6";s:3:"7";s:1:"7";s:3:"8";s:1:"8";s:3:"9";s:1:"9";s:3:":";s:1:":";s:3:";";s:1:";";s:3:"<";s:1:"<";s:3:"=";s:1:"=";s:3:">";s:1:">";s:3:"?";s:1:"?";s:3:"@";s:1:"@";s:3:"A";s:1:"A";s:3:"B";s:1:"B";s:3:"C";s:1:"C";s:3:"D";s:1:"D";s:3:"E";s:1:"E";s:3:"F";s:1:"F";s:3:"G";s:1:"G";s:3:"H";s:1:"H";s:3:"I";s:1:"I";s:3:"J";s:1:"J";s:3:"K";s:1:"K";s:3:"L";s:1:"L";s:3:"M";s:1:"M";s:3:"N";s:1:"N";s:3:"O";s:1:"O";s:3:"P";s:1:"P";s:3:"Q";s:1:"Q";s:3:"R";s:1:"R";s:3:"S";s:1:"S";s:3:"T";s:1:"T";s:3:"U";s:1:"U";s:3:"V";s:1:"V";s:3:"W";s:1:"W";s:3:"X";s:1:"X";s:3:"Y";s:1:"Y";s:3:"Z";s:1:"Z";s:3:"[";s:1:"[";s:3:"\";s:1:"\\";s:3:"]";s:1:"]";s:3:"^";s:1:"^";s:3:"_";s:1:"_";s:3:"`";s:1:"`";s:3:"a";s:1:"a";s:3:"b";s:1:"b";s:3:"c";s:1:"c";s:3:"d";s:1:"d";s:3:"e";s:1:"e";s:3:"f";s:1:"f";s:3:"g";s:1:"g";s:3:"h";s:1:"h";s:3:"i";s:1:"i";s:3:"j";s:1:"j";s:3:"k";s:1:"k";s:3:"l";s:1:"l";s:3:"m";s:1:"m";s:3:"n";s:1:"n";s:3:"o";s:1:"o";s:3:"p";s:1:"p";s:3:"q";s:1:"q";s:3:"r";s:1:"r";s:3:"s";s:1:"s";s:3:"t";s:1:"t";s:3:"u";s:1:"u";s:3:"v";s:1:"v";s:3:"w";s:1:"w";s:3:"x";s:1:"x";s:3:"y";s:1:"y";s:3:"z";s:1:"z";s:3:"{";s:1:"{";s:3:"|";s:1:"|";s:3:"}";s:1:"}";s:3:"~";s:1:"~";s:3:"⦅";s:3:"⦅";s:3:"⦆";s:3:"⦆";s:3:"。";s:3:"。";s:3:"「";s:3:"「";s:3:"」";s:3:"」";s:3:"、";s:3:"、";s:3:"・";s:3:"・";s:3:"ヲ";s:3:"ヲ";s:3:"ァ";s:3:"ァ";s:3:"ィ";s:3:"ィ";s:3:"ゥ";s:3:"ゥ";s:3:"ェ";s:3:"ェ";s:3:"ォ";s:3:"ォ";s:3:"ャ";s:3:"ャ";s:3:"ュ";s:3:"ュ";s:3:"ョ";s:3:"ョ";s:3:"ッ";s:3:"ッ";s:3:"ー";s:3:"ー";s:3:"ア";s:3:"ア";s:3:"イ";s:3:"イ";s:3:"ウ";s:3:"ウ";s:3:"エ";s:3:"エ";s:3:"オ";s:3:"オ";s:3:"カ";s:3:"カ";s:3:"キ";s:3:"キ";s:3:"ク";s:3:"ク";s:3:"ケ";s:3:"ケ";s:3:"コ";s:3:"コ";s:3:"サ";s:3:"サ";s:3:"シ";s:3:"シ";s:3:"ス";s:3:"ス";s:3:"セ";s:3:"セ";s:3:"ソ";s:3:"ソ";s:3:"タ";s:3:"タ";s:3:"チ";s:3:"チ";s:3:"ツ";s:3:"ツ";s:3:"テ";s:3:"テ";s:3:"ト";s:3:"ト";s:3:"ナ";s:3:"ナ";s:3:"ニ";s:3:"ニ";s:3:"ヌ";s:3:"ヌ";s:3:"ネ";s:3:"ネ";s:3:"ノ";s:3:"ノ";s:3:"ハ";s:3:"ハ";s:3:"ヒ";s:3:"ヒ";s:3:"フ";s:3:"フ";s:3:"ヘ";s:3:"ヘ";s:3:"ホ";s:3:"ホ";s:3:"マ";s:3:"マ";s:3:"ミ";s:3:"ミ";s:3:"ム";s:3:"ム";s:3:"メ";s:3:"メ";s:3:"モ";s:3:"モ";s:3:"ヤ";s:3:"ヤ";s:3:"ユ";s:3:"ユ";s:3:"ヨ";s:3:"ヨ";s:3:"ラ";s:3:"ラ";s:3:"リ";s:3:"リ";s:3:"ル";s:3:"ル";s:3:"レ";s:3:"レ";s:3:"ロ";s:3:"ロ";s:3:"ワ";s:3:"ワ";s:3:"ン";s:3:"ン";s:3:"゙";s:3:"゙";s:3:"゚";s:3:"゚";s:3:"ᅠ";s:3:"ᅠ";s:3:"ᄀ";s:3:"ᄀ";s:3:"ᄁ";s:3:"ᄁ";s:3:"ᆪ";s:3:"ᆪ";s:3:"ᄂ";s:3:"ᄂ";s:3:"ᆬ";s:3:"ᆬ";s:3:"ᆭ";s:3:"ᆭ";s:3:"ᄃ";s:3:"ᄃ";s:3:"ᄄ";s:3:"ᄄ";s:3:"ᄅ";s:3:"ᄅ";s:3:"ᆰ";s:3:"ᆰ";s:3:"ᆱ";s:3:"ᆱ";s:3:"ᆲ";s:3:"ᆲ";s:3:"ᆳ";s:3:"ᆳ";s:3:"ᆴ";s:3:"ᆴ";s:3:"ᆵ";s:3:"ᆵ";s:3:"ᄚ";s:3:"ᄚ";s:3:"ᄆ";s:3:"ᄆ";s:3:"ᄇ";s:3:"ᄇ";s:3:"ᄈ";s:3:"ᄈ";s:3:"ᄡ";s:3:"ᄡ";s:3:"ᄉ";s:3:"ᄉ";s:3:"ᄊ";s:3:"ᄊ";s:3:"ᄋ";s:3:"ᄋ";s:3:"ᄌ";s:3:"ᄌ";s:3:"ᄍ";s:3:"ᄍ";s:3:"ᄎ";s:3:"ᄎ";s:3:"ᄏ";s:3:"ᄏ";s:3:"ᄐ";s:3:"ᄐ";s:3:"ᄑ";s:3:"ᄑ";s:3:"ᄒ";s:3:"ᄒ";s:3:"ᅡ";s:3:"ᅡ";s:3:"ᅢ";s:3:"ᅢ";s:3:"ᅣ";s:3:"ᅣ";s:3:"ᅤ";s:3:"ᅤ";s:3:"ᅥ";s:3:"ᅥ";s:3:"ᅦ";s:3:"ᅦ";s:3:"ᅧ";s:3:"ᅧ";s:3:"ᅨ";s:3:"ᅨ";s:3:"ᅩ";s:3:"ᅩ";s:3:"ᅪ";s:3:"ᅪ";s:3:"ᅫ";s:3:"ᅫ";s:3:"ᅬ";s:3:"ᅬ";s:3:"ᅭ";s:3:"ᅭ";s:3:"ᅮ";s:3:"ᅮ";s:3:"ᅯ";s:3:"ᅯ";s:3:"ᅰ";s:3:"ᅰ";s:3:"ᅱ";s:3:"ᅱ";s:3:"ᅲ";s:3:"ᅲ";s:3:"ᅳ";s:3:"ᅳ";s:3:"ᅴ";s:3:"ᅴ";s:3:"ᅵ";s:3:"ᅵ";s:3:"¢";s:2:"¢";s:3:"£";s:2:"£";s:3:"¬";s:2:"¬";s:3:" ̄";s:3:" ̄";s:3:"¦";s:2:"¦";s:3:"¥";s:2:"¥";s:3:"₩";s:3:"₩";s:3:"│";s:3:"│";s:3:"←";s:3:"←";s:3:"↑";s:3:"↑";s:3:"→";s:3:"→";s:3:"↓";s:3:"↓";s:3:"■";s:3:"■";s:3:"○";s:3:"○";s:4:"𑂚";s:8:"𑂚";s:4:"𑂜";s:8:"𑂜";s:4:"𑂫";s:8:"𑂫";s:4:"𝅗𝅥";s:8:"𝅗𝅥";s:4:"𝅘𝅥";s:8:"𝅘𝅥";s:4:"𝅘𝅥𝅮";s:12:"𝅘𝅥𝅮";s:4:"𝅘𝅥𝅯";s:12:"𝅘𝅥𝅯";s:4:"𝅘𝅥𝅰";s:12:"𝅘𝅥𝅰";s:4:"𝅘𝅥𝅱";s:12:"𝅘𝅥𝅱";s:4:"𝅘𝅥𝅲";s:12:"𝅘𝅥𝅲";s:4:"𝆹𝅥";s:8:"𝆹𝅥";s:4:"𝆺𝅥";s:8:"𝆺𝅥";s:4:"𝆹𝅥𝅮";s:12:"𝆹𝅥𝅮";s:4:"𝆺𝅥𝅮";s:12:"𝆺𝅥𝅮";s:4:"𝆹𝅥𝅯";s:12:"𝆹𝅥𝅯";s:4:"𝆺𝅥𝅯";s:12:"𝆺𝅥𝅯";s:4:"𝐀";s:1:"A";s:4:"𝐁";s:1:"B";s:4:"𝐂";s:1:"C";s:4:"𝐃";s:1:"D";s:4:"𝐄";s:1:"E";s:4:"𝐅";s:1:"F";s:4:"𝐆";s:1:"G";s:4:"𝐇";s:1:"H";s:4:"𝐈";s:1:"I";s:4:"𝐉";s:1:"J";s:4:"𝐊";s:1:"K";s:4:"𝐋";s:1:"L";s:4:"𝐌";s:1:"M";s:4:"𝐍";s:1:"N";s:4:"𝐎";s:1:"O";s:4:"𝐏";s:1:"P";s:4:"𝐐";s:1:"Q";s:4:"𝐑";s:1:"R";s:4:"𝐒";s:1:"S";s:4:"𝐓";s:1:"T";s:4:"𝐔";s:1:"U";s:4:"𝐕";s:1:"V";s:4:"𝐖";s:1:"W";s:4:"𝐗";s:1:"X";s:4:"𝐘";s:1:"Y";s:4:"𝐙";s:1:"Z";s:4:"𝐚";s:1:"a";s:4:"𝐛";s:1:"b";s:4:"𝐜";s:1:"c";s:4:"𝐝";s:1:"d";s:4:"𝐞";s:1:"e";s:4:"𝐟";s:1:"f";s:4:"𝐠";s:1:"g";s:4:"𝐡";s:1:"h";s:4:"𝐢";s:1:"i";s:4:"𝐣";s:1:"j";s:4:"𝐤";s:1:"k";s:4:"𝐥";s:1:"l";s:4:"𝐦";s:1:"m";s:4:"𝐧";s:1:"n";s:4:"𝐨";s:1:"o";s:4:"𝐩";s:1:"p";s:4:"𝐪";s:1:"q";s:4:"𝐫";s:1:"r";s:4:"𝐬";s:1:"s";s:4:"𝐭";s:1:"t";s:4:"𝐮";s:1:"u";s:4:"𝐯";s:1:"v";s:4:"𝐰";s:1:"w";s:4:"𝐱";s:1:"x";s:4:"𝐲";s:1:"y";s:4:"𝐳";s:1:"z";s:4:"𝐴";s:1:"A";s:4:"𝐵";s:1:"B";s:4:"𝐶";s:1:"C";s:4:"𝐷";s:1:"D";s:4:"𝐸";s:1:"E";s:4:"𝐹";s:1:"F";s:4:"𝐺";s:1:"G";s:4:"𝐻";s:1:"H";s:4:"𝐼";s:1:"I";s:4:"𝐽";s:1:"J";s:4:"𝐾";s:1:"K";s:4:"𝐿";s:1:"L";s:4:"𝑀";s:1:"M";s:4:"𝑁";s:1:"N";s:4:"𝑂";s:1:"O";s:4:"𝑃";s:1:"P";s:4:"𝑄";s:1:"Q";s:4:"𝑅";s:1:"R";s:4:"𝑆";s:1:"S";s:4:"𝑇";s:1:"T";s:4:"𝑈";s:1:"U";s:4:"𝑉";s:1:"V";s:4:"𝑊";s:1:"W";s:4:"𝑋";s:1:"X";s:4:"𝑌";s:1:"Y";s:4:"𝑍";s:1:"Z";s:4:"𝑎";s:1:"a";s:4:"𝑏";s:1:"b";s:4:"𝑐";s:1:"c";s:4:"𝑑";s:1:"d";s:4:"𝑒";s:1:"e";s:4:"𝑓";s:1:"f";s:4:"𝑔";s:1:"g";s:4:"𝑖";s:1:"i";s:4:"𝑗";s:1:"j";s:4:"𝑘";s:1:"k";s:4:"𝑙";s:1:"l";s:4:"𝑚";s:1:"m";s:4:"𝑛";s:1:"n";s:4:"𝑜";s:1:"o";s:4:"𝑝";s:1:"p";s:4:"𝑞";s:1:"q";s:4:"𝑟";s:1:"r";s:4:"𝑠";s:1:"s";s:4:"𝑡";s:1:"t";s:4:"𝑢";s:1:"u";s:4:"𝑣";s:1:"v";s:4:"𝑤";s:1:"w";s:4:"𝑥";s:1:"x";s:4:"𝑦";s:1:"y";s:4:"𝑧";s:1:"z";s:4:"𝑨";s:1:"A";s:4:"𝑩";s:1:"B";s:4:"𝑪";s:1:"C";s:4:"𝑫";s:1:"D";s:4:"𝑬";s:1:"E";s:4:"𝑭";s:1:"F";s:4:"𝑮";s:1:"G";s:4:"𝑯";s:1:"H";s:4:"𝑰";s:1:"I";s:4:"𝑱";s:1:"J";s:4:"𝑲";s:1:"K";s:4:"𝑳";s:1:"L";s:4:"𝑴";s:1:"M";s:4:"𝑵";s:1:"N";s:4:"𝑶";s:1:"O";s:4:"𝑷";s:1:"P";s:4:"𝑸";s:1:"Q";s:4:"𝑹";s:1:"R";s:4:"𝑺";s:1:"S";s:4:"𝑻";s:1:"T";s:4:"𝑼";s:1:"U";s:4:"𝑽";s:1:"V";s:4:"𝑾";s:1:"W";s:4:"𝑿";s:1:"X";s:4:"𝒀";s:1:"Y";s:4:"𝒁";s:1:"Z";s:4:"𝒂";s:1:"a";s:4:"𝒃";s:1:"b";s:4:"𝒄";s:1:"c";s:4:"𝒅";s:1:"d";s:4:"𝒆";s:1:"e";s:4:"𝒇";s:1:"f";s:4:"𝒈";s:1:"g";s:4:"𝒉";s:1:"h";s:4:"𝒊";s:1:"i";s:4:"𝒋";s:1:"j";s:4:"𝒌";s:1:"k";s:4:"𝒍";s:1:"l";s:4:"𝒎";s:1:"m";s:4:"𝒏";s:1:"n";s:4:"𝒐";s:1:"o";s:4:"𝒑";s:1:"p";s:4:"𝒒";s:1:"q";s:4:"𝒓";s:1:"r";s:4:"𝒔";s:1:"s";s:4:"𝒕";s:1:"t";s:4:"𝒖";s:1:"u";s:4:"𝒗";s:1:"v";s:4:"𝒘";s:1:"w";s:4:"𝒙";s:1:"x";s:4:"𝒚";s:1:"y";s:4:"𝒛";s:1:"z";s:4:"𝒜";s:1:"A";s:4:"𝒞";s:1:"C";s:4:"𝒟";s:1:"D";s:4:"𝒢";s:1:"G";s:4:"𝒥";s:1:"J";s:4:"𝒦";s:1:"K";s:4:"𝒩";s:1:"N";s:4:"𝒪";s:1:"O";s:4:"𝒫";s:1:"P";s:4:"𝒬";s:1:"Q";s:4:"𝒮";s:1:"S";s:4:"𝒯";s:1:"T";s:4:"𝒰";s:1:"U";s:4:"𝒱";s:1:"V";s:4:"𝒲";s:1:"W";s:4:"𝒳";s:1:"X";s:4:"𝒴";s:1:"Y";s:4:"𝒵";s:1:"Z";s:4:"𝒶";s:1:"a";s:4:"𝒷";s:1:"b";s:4:"𝒸";s:1:"c";s:4:"𝒹";s:1:"d";s:4:"𝒻";s:1:"f";s:4:"𝒽";s:1:"h";s:4:"𝒾";s:1:"i";s:4:"𝒿";s:1:"j";s:4:"𝓀";s:1:"k";s:4:"𝓁";s:1:"l";s:4:"𝓂";s:1:"m";s:4:"𝓃";s:1:"n";s:4:"𝓅";s:1:"p";s:4:"𝓆";s:1:"q";s:4:"𝓇";s:1:"r";s:4:"𝓈";s:1:"s";s:4:"𝓉";s:1:"t";s:4:"𝓊";s:1:"u";s:4:"𝓋";s:1:"v";s:4:"𝓌";s:1:"w";s:4:"𝓍";s:1:"x";s:4:"𝓎";s:1:"y";s:4:"𝓏";s:1:"z";s:4:"𝓐";s:1:"A";s:4:"𝓑";s:1:"B";s:4:"𝓒";s:1:"C";s:4:"𝓓";s:1:"D";s:4:"𝓔";s:1:"E";s:4:"𝓕";s:1:"F";s:4:"𝓖";s:1:"G";s:4:"𝓗";s:1:"H";s:4:"𝓘";s:1:"I";s:4:"𝓙";s:1:"J";s:4:"𝓚";s:1:"K";s:4:"𝓛";s:1:"L";s:4:"𝓜";s:1:"M";s:4:"𝓝";s:1:"N";s:4:"𝓞";s:1:"O";s:4:"𝓟";s:1:"P";s:4:"𝓠";s:1:"Q";s:4:"𝓡";s:1:"R";s:4:"𝓢";s:1:"S";s:4:"𝓣";s:1:"T";s:4:"𝓤";s:1:"U";s:4:"𝓥";s:1:"V";s:4:"𝓦";s:1:"W";s:4:"𝓧";s:1:"X";s:4:"𝓨";s:1:"Y";s:4:"𝓩";s:1:"Z";s:4:"𝓪";s:1:"a";s:4:"𝓫";s:1:"b";s:4:"𝓬";s:1:"c";s:4:"𝓭";s:1:"d";s:4:"𝓮";s:1:"e";s:4:"𝓯";s:1:"f";s:4:"𝓰";s:1:"g";s:4:"𝓱";s:1:"h";s:4:"𝓲";s:1:"i";s:4:"𝓳";s:1:"j";s:4:"𝓴";s:1:"k";s:4:"𝓵";s:1:"l";s:4:"𝓶";s:1:"m";s:4:"𝓷";s:1:"n";s:4:"𝓸";s:1:"o";s:4:"𝓹";s:1:"p";s:4:"𝓺";s:1:"q";s:4:"𝓻";s:1:"r";s:4:"𝓼";s:1:"s";s:4:"𝓽";s:1:"t";s:4:"𝓾";s:1:"u";s:4:"𝓿";s:1:"v";s:4:"𝔀";s:1:"w";s:4:"𝔁";s:1:"x";s:4:"𝔂";s:1:"y";s:4:"𝔃";s:1:"z";s:4:"𝔄";s:1:"A";s:4:"𝔅";s:1:"B";s:4:"𝔇";s:1:"D";s:4:"𝔈";s:1:"E";s:4:"𝔉";s:1:"F";s:4:"𝔊";s:1:"G";s:4:"𝔍";s:1:"J";s:4:"𝔎";s:1:"K";s:4:"𝔏";s:1:"L";s:4:"𝔐";s:1:"M";s:4:"𝔑";s:1:"N";s:4:"𝔒";s:1:"O";s:4:"𝔓";s:1:"P";s:4:"𝔔";s:1:"Q";s:4:"𝔖";s:1:"S";s:4:"𝔗";s:1:"T";s:4:"𝔘";s:1:"U";s:4:"𝔙";s:1:"V";s:4:"𝔚";s:1:"W";s:4:"𝔛";s:1:"X";s:4:"𝔜";s:1:"Y";s:4:"𝔞";s:1:"a";s:4:"𝔟";s:1:"b";s:4:"𝔠";s:1:"c";s:4:"𝔡";s:1:"d";s:4:"𝔢";s:1:"e";s:4:"𝔣";s:1:"f";s:4:"𝔤";s:1:"g";s:4:"𝔥";s:1:"h";s:4:"𝔦";s:1:"i";s:4:"𝔧";s:1:"j";s:4:"𝔨";s:1:"k";s:4:"𝔩";s:1:"l";s:4:"𝔪";s:1:"m";s:4:"𝔫";s:1:"n";s:4:"𝔬";s:1:"o";s:4:"𝔭";s:1:"p";s:4:"𝔮";s:1:"q";s:4:"𝔯";s:1:"r";s:4:"𝔰";s:1:"s";s:4:"𝔱";s:1:"t";s:4:"𝔲";s:1:"u";s:4:"𝔳";s:1:"v";s:4:"𝔴";s:1:"w";s:4:"𝔵";s:1:"x";s:4:"𝔶";s:1:"y";s:4:"𝔷";s:1:"z";s:4:"𝔸";s:1:"A";s:4:"𝔹";s:1:"B";s:4:"𝔻";s:1:"D";s:4:"𝔼";s:1:"E";s:4:"𝔽";s:1:"F";s:4:"𝔾";s:1:"G";s:4:"𝕀";s:1:"I";s:4:"𝕁";s:1:"J";s:4:"𝕂";s:1:"K";s:4:"𝕃";s:1:"L";s:4:"𝕄";s:1:"M";s:4:"𝕆";s:1:"O";s:4:"𝕊";s:1:"S";s:4:"𝕋";s:1:"T";s:4:"𝕌";s:1:"U";s:4:"𝕍";s:1:"V";s:4:"𝕎";s:1:"W";s:4:"𝕏";s:1:"X";s:4:"𝕐";s:1:"Y";s:4:"𝕒";s:1:"a";s:4:"𝕓";s:1:"b";s:4:"𝕔";s:1:"c";s:4:"𝕕";s:1:"d";s:4:"𝕖";s:1:"e";s:4:"𝕗";s:1:"f";s:4:"𝕘";s:1:"g";s:4:"𝕙";s:1:"h";s:4:"𝕚";s:1:"i";s:4:"𝕛";s:1:"j";s:4:"𝕜";s:1:"k";s:4:"𝕝";s:1:"l";s:4:"𝕞";s:1:"m";s:4:"𝕟";s:1:"n";s:4:"𝕠";s:1:"o";s:4:"𝕡";s:1:"p";s:4:"𝕢";s:1:"q";s:4:"𝕣";s:1:"r";s:4:"𝕤";s:1:"s";s:4:"𝕥";s:1:"t";s:4:"𝕦";s:1:"u";s:4:"𝕧";s:1:"v";s:4:"𝕨";s:1:"w";s:4:"𝕩";s:1:"x";s:4:"𝕪";s:1:"y";s:4:"𝕫";s:1:"z";s:4:"𝕬";s:1:"A";s:4:"𝕭";s:1:"B";s:4:"𝕮";s:1:"C";s:4:"𝕯";s:1:"D";s:4:"𝕰";s:1:"E";s:4:"𝕱";s:1:"F";s:4:"𝕲";s:1:"G";s:4:"𝕳";s:1:"H";s:4:"𝕴";s:1:"I";s:4:"𝕵";s:1:"J";s:4:"𝕶";s:1:"K";s:4:"𝕷";s:1:"L";s:4:"𝕸";s:1:"M";s:4:"𝕹";s:1:"N";s:4:"𝕺";s:1:"O";s:4:"𝕻";s:1:"P";s:4:"𝕼";s:1:"Q";s:4:"𝕽";s:1:"R";s:4:"𝕾";s:1:"S";s:4:"𝕿";s:1:"T";s:4:"𝖀";s:1:"U";s:4:"𝖁";s:1:"V";s:4:"𝖂";s:1:"W";s:4:"𝖃";s:1:"X";s:4:"𝖄";s:1:"Y";s:4:"𝖅";s:1:"Z";s:4:"𝖆";s:1:"a";s:4:"𝖇";s:1:"b";s:4:"𝖈";s:1:"c";s:4:"𝖉";s:1:"d";s:4:"𝖊";s:1:"e";s:4:"𝖋";s:1:"f";s:4:"𝖌";s:1:"g";s:4:"𝖍";s:1:"h";s:4:"𝖎";s:1:"i";s:4:"𝖏";s:1:"j";s:4:"𝖐";s:1:"k";s:4:"𝖑";s:1:"l";s:4:"𝖒";s:1:"m";s:4:"𝖓";s:1:"n";s:4:"𝖔";s:1:"o";s:4:"𝖕";s:1:"p";s:4:"𝖖";s:1:"q";s:4:"𝖗";s:1:"r";s:4:"𝖘";s:1:"s";s:4:"𝖙";s:1:"t";s:4:"𝖚";s:1:"u";s:4:"𝖛";s:1:"v";s:4:"𝖜";s:1:"w";s:4:"𝖝";s:1:"x";s:4:"𝖞";s:1:"y";s:4:"𝖟";s:1:"z";s:4:"𝖠";s:1:"A";s:4:"𝖡";s:1:"B";s:4:"𝖢";s:1:"C";s:4:"𝖣";s:1:"D";s:4:"𝖤";s:1:"E";s:4:"𝖥";s:1:"F";s:4:"𝖦";s:1:"G";s:4:"𝖧";s:1:"H";s:4:"𝖨";s:1:"I";s:4:"𝖩";s:1:"J";s:4:"𝖪";s:1:"K";s:4:"𝖫";s:1:"L";s:4:"𝖬";s:1:"M";s:4:"𝖭";s:1:"N";s:4:"𝖮";s:1:"O";s:4:"𝖯";s:1:"P";s:4:"𝖰";s:1:"Q";s:4:"𝖱";s:1:"R";s:4:"𝖲";s:1:"S";s:4:"𝖳";s:1:"T";s:4:"𝖴";s:1:"U";s:4:"𝖵";s:1:"V";s:4:"𝖶";s:1:"W";s:4:"𝖷";s:1:"X";s:4:"𝖸";s:1:"Y";s:4:"𝖹";s:1:"Z";s:4:"𝖺";s:1:"a";s:4:"𝖻";s:1:"b";s:4:"𝖼";s:1:"c";s:4:"𝖽";s:1:"d";s:4:"𝖾";s:1:"e";s:4:"𝖿";s:1:"f";s:4:"𝗀";s:1:"g";s:4:"𝗁";s:1:"h";s:4:"𝗂";s:1:"i";s:4:"𝗃";s:1:"j";s:4:"𝗄";s:1:"k";s:4:"𝗅";s:1:"l";s:4:"𝗆";s:1:"m";s:4:"𝗇";s:1:"n";s:4:"𝗈";s:1:"o";s:4:"𝗉";s:1:"p";s:4:"𝗊";s:1:"q";s:4:"𝗋";s:1:"r";s:4:"𝗌";s:1:"s";s:4:"𝗍";s:1:"t";s:4:"𝗎";s:1:"u";s:4:"𝗏";s:1:"v";s:4:"𝗐";s:1:"w";s:4:"𝗑";s:1:"x";s:4:"𝗒";s:1:"y";s:4:"𝗓";s:1:"z";s:4:"𝗔";s:1:"A";s:4:"𝗕";s:1:"B";s:4:"𝗖";s:1:"C";s:4:"𝗗";s:1:"D";s:4:"𝗘";s:1:"E";s:4:"𝗙";s:1:"F";s:4:"𝗚";s:1:"G";s:4:"𝗛";s:1:"H";s:4:"𝗜";s:1:"I";s:4:"𝗝";s:1:"J";s:4:"𝗞";s:1:"K";s:4:"𝗟";s:1:"L";s:4:"𝗠";s:1:"M";s:4:"𝗡";s:1:"N";s:4:"𝗢";s:1:"O";s:4:"𝗣";s:1:"P";s:4:"𝗤";s:1:"Q";s:4:"𝗥";s:1:"R";s:4:"𝗦";s:1:"S";s:4:"𝗧";s:1:"T";s:4:"𝗨";s:1:"U";s:4:"𝗩";s:1:"V";s:4:"𝗪";s:1:"W";s:4:"𝗫";s:1:"X";s:4:"𝗬";s:1:"Y";s:4:"𝗭";s:1:"Z";s:4:"𝗮";s:1:"a";s:4:"𝗯";s:1:"b";s:4:"𝗰";s:1:"c";s:4:"𝗱";s:1:"d";s:4:"𝗲";s:1:"e";s:4:"𝗳";s:1:"f";s:4:"𝗴";s:1:"g";s:4:"𝗵";s:1:"h";s:4:"𝗶";s:1:"i";s:4:"𝗷";s:1:"j";s:4:"𝗸";s:1:"k";s:4:"𝗹";s:1:"l";s:4:"𝗺";s:1:"m";s:4:"𝗻";s:1:"n";s:4:"𝗼";s:1:"o";s:4:"𝗽";s:1:"p";s:4:"𝗾";s:1:"q";s:4:"𝗿";s:1:"r";s:4:"𝘀";s:1:"s";s:4:"𝘁";s:1:"t";s:4:"𝘂";s:1:"u";s:4:"𝘃";s:1:"v";s:4:"𝘄";s:1:"w";s:4:"𝘅";s:1:"x";s:4:"𝘆";s:1:"y";s:4:"𝘇";s:1:"z";s:4:"𝘈";s:1:"A";s:4:"𝘉";s:1:"B";s:4:"𝘊";s:1:"C";s:4:"𝘋";s:1:"D";s:4:"𝘌";s:1:"E";s:4:"𝘍";s:1:"F";s:4:"𝘎";s:1:"G";s:4:"𝘏";s:1:"H";s:4:"𝘐";s:1:"I";s:4:"𝘑";s:1:"J";s:4:"𝘒";s:1:"K";s:4:"𝘓";s:1:"L";s:4:"𝘔";s:1:"M";s:4:"𝘕";s:1:"N";s:4:"𝘖";s:1:"O";s:4:"𝘗";s:1:"P";s:4:"𝘘";s:1:"Q";s:4:"𝘙";s:1:"R";s:4:"𝘚";s:1:"S";s:4:"𝘛";s:1:"T";s:4:"𝘜";s:1:"U";s:4:"𝘝";s:1:"V";s:4:"𝘞";s:1:"W";s:4:"𝘟";s:1:"X";s:4:"𝘠";s:1:"Y";s:4:"𝘡";s:1:"Z";s:4:"𝘢";s:1:"a";s:4:"𝘣";s:1:"b";s:4:"𝘤";s:1:"c";s:4:"𝘥";s:1:"d";s:4:"𝘦";s:1:"e";s:4:"𝘧";s:1:"f";s:4:"𝘨";s:1:"g";s:4:"𝘩";s:1:"h";s:4:"𝘪";s:1:"i";s:4:"𝘫";s:1:"j";s:4:"𝘬";s:1:"k";s:4:"𝘭";s:1:"l";s:4:"𝘮";s:1:"m";s:4:"𝘯";s:1:"n";s:4:"𝘰";s:1:"o";s:4:"𝘱";s:1:"p";s:4:"𝘲";s:1:"q";s:4:"𝘳";s:1:"r";s:4:"𝘴";s:1:"s";s:4:"𝘵";s:1:"t";s:4:"𝘶";s:1:"u";s:4:"𝘷";s:1:"v";s:4:"𝘸";s:1:"w";s:4:"𝘹";s:1:"x";s:4:"𝘺";s:1:"y";s:4:"𝘻";s:1:"z";s:4:"𝘼";s:1:"A";s:4:"𝘽";s:1:"B";s:4:"𝘾";s:1:"C";s:4:"𝘿";s:1:"D";s:4:"𝙀";s:1:"E";s:4:"𝙁";s:1:"F";s:4:"𝙂";s:1:"G";s:4:"𝙃";s:1:"H";s:4:"𝙄";s:1:"I";s:4:"𝙅";s:1:"J";s:4:"𝙆";s:1:"K";s:4:"𝙇";s:1:"L";s:4:"𝙈";s:1:"M";s:4:"𝙉";s:1:"N";s:4:"𝙊";s:1:"O";s:4:"𝙋";s:1:"P";s:4:"𝙌";s:1:"Q";s:4:"𝙍";s:1:"R";s:4:"𝙎";s:1:"S";s:4:"𝙏";s:1:"T";s:4:"𝙐";s:1:"U";s:4:"𝙑";s:1:"V";s:4:"𝙒";s:1:"W";s:4:"𝙓";s:1:"X";s:4:"𝙔";s:1:"Y";s:4:"𝙕";s:1:"Z";s:4:"𝙖";s:1:"a";s:4:"𝙗";s:1:"b";s:4:"𝙘";s:1:"c";s:4:"𝙙";s:1:"d";s:4:"𝙚";s:1:"e";s:4:"𝙛";s:1:"f";s:4:"𝙜";s:1:"g";s:4:"𝙝";s:1:"h";s:4:"𝙞";s:1:"i";s:4:"𝙟";s:1:"j";s:4:"𝙠";s:1:"k";s:4:"𝙡";s:1:"l";s:4:"𝙢";s:1:"m";s:4:"𝙣";s:1:"n";s:4:"𝙤";s:1:"o";s:4:"𝙥";s:1:"p";s:4:"𝙦";s:1:"q";s:4:"𝙧";s:1:"r";s:4:"𝙨";s:1:"s";s:4:"𝙩";s:1:"t";s:4:"𝙪";s:1:"u";s:4:"𝙫";s:1:"v";s:4:"𝙬";s:1:"w";s:4:"𝙭";s:1:"x";s:4:"𝙮";s:1:"y";s:4:"𝙯";s:1:"z";s:4:"𝙰";s:1:"A";s:4:"𝙱";s:1:"B";s:4:"𝙲";s:1:"C";s:4:"𝙳";s:1:"D";s:4:"𝙴";s:1:"E";s:4:"𝙵";s:1:"F";s:4:"𝙶";s:1:"G";s:4:"𝙷";s:1:"H";s:4:"𝙸";s:1:"I";s:4:"𝙹";s:1:"J";s:4:"𝙺";s:1:"K";s:4:"𝙻";s:1:"L";s:4:"𝙼";s:1:"M";s:4:"𝙽";s:1:"N";s:4:"𝙾";s:1:"O";s:4:"𝙿";s:1:"P";s:4:"𝚀";s:1:"Q";s:4:"𝚁";s:1:"R";s:4:"𝚂";s:1:"S";s:4:"𝚃";s:1:"T";s:4:"𝚄";s:1:"U";s:4:"𝚅";s:1:"V";s:4:"𝚆";s:1:"W";s:4:"𝚇";s:1:"X";s:4:"𝚈";s:1:"Y";s:4:"𝚉";s:1:"Z";s:4:"𝚊";s:1:"a";s:4:"𝚋";s:1:"b";s:4:"𝚌";s:1:"c";s:4:"𝚍";s:1:"d";s:4:"𝚎";s:1:"e";s:4:"𝚏";s:1:"f";s:4:"𝚐";s:1:"g";s:4:"𝚑";s:1:"h";s:4:"𝚒";s:1:"i";s:4:"𝚓";s:1:"j";s:4:"𝚔";s:1:"k";s:4:"𝚕";s:1:"l";s:4:"𝚖";s:1:"m";s:4:"𝚗";s:1:"n";s:4:"𝚘";s:1:"o";s:4:"𝚙";s:1:"p";s:4:"𝚚";s:1:"q";s:4:"𝚛";s:1:"r";s:4:"𝚜";s:1:"s";s:4:"𝚝";s:1:"t";s:4:"𝚞";s:1:"u";s:4:"𝚟";s:1:"v";s:4:"𝚠";s:1:"w";s:4:"𝚡";s:1:"x";s:4:"𝚢";s:1:"y";s:4:"𝚣";s:1:"z";s:4:"𝚤";s:2:"ı";s:4:"𝚥";s:2:"ȷ";s:4:"𝚨";s:2:"Α";s:4:"𝚩";s:2:"Β";s:4:"𝚪";s:2:"Γ";s:4:"𝚫";s:2:"Δ";s:4:"𝚬";s:2:"Ε";s:4:"𝚭";s:2:"Ζ";s:4:"𝚮";s:2:"Η";s:4:"𝚯";s:2:"Θ";s:4:"𝚰";s:2:"Ι";s:4:"𝚱";s:2:"Κ";s:4:"𝚲";s:2:"Λ";s:4:"𝚳";s:2:"Μ";s:4:"𝚴";s:2:"Ν";s:4:"𝚵";s:2:"Ξ";s:4:"𝚶";s:2:"Ο";s:4:"𝚷";s:2:"Π";s:4:"𝚸";s:2:"Ρ";s:4:"𝚹";s:2:"Θ";s:4:"𝚺";s:2:"Σ";s:4:"𝚻";s:2:"Τ";s:4:"𝚼";s:2:"Υ";s:4:"𝚽";s:2:"Φ";s:4:"𝚾";s:2:"Χ";s:4:"𝚿";s:2:"Ψ";s:4:"𝛀";s:2:"Ω";s:4:"𝛁";s:3:"∇";s:4:"𝛂";s:2:"α";s:4:"𝛃";s:2:"β";s:4:"𝛄";s:2:"γ";s:4:"𝛅";s:2:"δ";s:4:"𝛆";s:2:"ε";s:4:"𝛇";s:2:"ζ";s:4:"𝛈";s:2:"η";s:4:"𝛉";s:2:"θ";s:4:"𝛊";s:2:"ι";s:4:"𝛋";s:2:"κ";s:4:"𝛌";s:2:"λ";s:4:"𝛍";s:2:"μ";s:4:"𝛎";s:2:"ν";s:4:"𝛏";s:2:"ξ";s:4:"𝛐";s:2:"ο";s:4:"𝛑";s:2:"π";s:4:"𝛒";s:2:"ρ";s:4:"𝛓";s:2:"ς";s:4:"𝛔";s:2:"σ";s:4:"𝛕";s:2:"τ";s:4:"𝛖";s:2:"υ";s:4:"𝛗";s:2:"φ";s:4:"𝛘";s:2:"χ";s:4:"𝛙";s:2:"ψ";s:4:"𝛚";s:2:"ω";s:4:"𝛛";s:3:"∂";s:4:"𝛜";s:2:"ε";s:4:"𝛝";s:2:"θ";s:4:"𝛞";s:2:"κ";s:4:"𝛟";s:2:"φ";s:4:"𝛠";s:2:"ρ";s:4:"𝛡";s:2:"π";s:4:"𝛢";s:2:"Α";s:4:"𝛣";s:2:"Β";s:4:"𝛤";s:2:"Γ";s:4:"𝛥";s:2:"Δ";s:4:"𝛦";s:2:"Ε";s:4:"𝛧";s:2:"Ζ";s:4:"𝛨";s:2:"Η";s:4:"𝛩";s:2:"Θ";s:4:"𝛪";s:2:"Ι";s:4:"𝛫";s:2:"Κ";s:4:"𝛬";s:2:"Λ";s:4:"𝛭";s:2:"Μ";s:4:"𝛮";s:2:"Ν";s:4:"𝛯";s:2:"Ξ";s:4:"𝛰";s:2:"Ο";s:4:"𝛱";s:2:"Π";s:4:"𝛲";s:2:"Ρ";s:4:"𝛳";s:2:"Θ";s:4:"𝛴";s:2:"Σ";s:4:"𝛵";s:2:"Τ";s:4:"𝛶";s:2:"Υ";s:4:"𝛷";s:2:"Φ";s:4:"𝛸";s:2:"Χ";s:4:"𝛹";s:2:"Ψ";s:4:"𝛺";s:2:"Ω";s:4:"𝛻";s:3:"∇";s:4:"𝛼";s:2:"α";s:4:"𝛽";s:2:"β";s:4:"𝛾";s:2:"γ";s:4:"𝛿";s:2:"δ";s:4:"𝜀";s:2:"ε";s:4:"𝜁";s:2:"ζ";s:4:"𝜂";s:2:"η";s:4:"𝜃";s:2:"θ";s:4:"𝜄";s:2:"ι";s:4:"𝜅";s:2:"κ";s:4:"𝜆";s:2:"λ";s:4:"𝜇";s:2:"μ";s:4:"𝜈";s:2:"ν";s:4:"𝜉";s:2:"ξ";s:4:"𝜊";s:2:"ο";s:4:"𝜋";s:2:"π";s:4:"𝜌";s:2:"ρ";s:4:"𝜍";s:2:"ς";s:4:"𝜎";s:2:"σ";s:4:"𝜏";s:2:"τ";s:4:"𝜐";s:2:"υ";s:4:"𝜑";s:2:"φ";s:4:"𝜒";s:2:"χ";s:4:"𝜓";s:2:"ψ";s:4:"𝜔";s:2:"ω";s:4:"𝜕";s:3:"∂";s:4:"𝜖";s:2:"ε";s:4:"𝜗";s:2:"θ";s:4:"𝜘";s:2:"κ";s:4:"𝜙";s:2:"φ";s:4:"𝜚";s:2:"ρ";s:4:"𝜛";s:2:"π";s:4:"𝜜";s:2:"Α";s:4:"𝜝";s:2:"Β";s:4:"𝜞";s:2:"Γ";s:4:"𝜟";s:2:"Δ";s:4:"𝜠";s:2:"Ε";s:4:"𝜡";s:2:"Ζ";s:4:"𝜢";s:2:"Η";s:4:"𝜣";s:2:"Θ";s:4:"𝜤";s:2:"Ι";s:4:"𝜥";s:2:"Κ";s:4:"𝜦";s:2:"Λ";s:4:"𝜧";s:2:"Μ";s:4:"𝜨";s:2:"Ν";s:4:"𝜩";s:2:"Ξ";s:4:"𝜪";s:2:"Ο";s:4:"𝜫";s:2:"Π";s:4:"𝜬";s:2:"Ρ";s:4:"𝜭";s:2:"Θ";s:4:"𝜮";s:2:"Σ";s:4:"𝜯";s:2:"Τ";s:4:"𝜰";s:2:"Υ";s:4:"𝜱";s:2:"Φ";s:4:"𝜲";s:2:"Χ";s:4:"𝜳";s:2:"Ψ";s:4:"𝜴";s:2:"Ω";s:4:"𝜵";s:3:"∇";s:4:"𝜶";s:2:"α";s:4:"𝜷";s:2:"β";s:4:"𝜸";s:2:"γ";s:4:"𝜹";s:2:"δ";s:4:"𝜺";s:2:"ε";s:4:"𝜻";s:2:"ζ";s:4:"𝜼";s:2:"η";s:4:"𝜽";s:2:"θ";s:4:"𝜾";s:2:"ι";s:4:"𝜿";s:2:"κ";s:4:"𝝀";s:2:"λ";s:4:"𝝁";s:2:"μ";s:4:"𝝂";s:2:"ν";s:4:"𝝃";s:2:"ξ";s:4:"𝝄";s:2:"ο";s:4:"𝝅";s:2:"π";s:4:"𝝆";s:2:"ρ";s:4:"𝝇";s:2:"ς";s:4:"𝝈";s:2:"σ";s:4:"𝝉";s:2:"τ";s:4:"𝝊";s:2:"υ";s:4:"𝝋";s:2:"φ";s:4:"𝝌";s:2:"χ";s:4:"𝝍";s:2:"ψ";s:4:"𝝎";s:2:"ω";s:4:"𝝏";s:3:"∂";s:4:"𝝐";s:2:"ε";s:4:"𝝑";s:2:"θ";s:4:"𝝒";s:2:"κ";s:4:"𝝓";s:2:"φ";s:4:"𝝔";s:2:"ρ";s:4:"𝝕";s:2:"π";s:4:"𝝖";s:2:"Α";s:4:"𝝗";s:2:"Β";s:4:"𝝘";s:2:"Γ";s:4:"𝝙";s:2:"Δ";s:4:"𝝚";s:2:"Ε";s:4:"𝝛";s:2:"Ζ";s:4:"𝝜";s:2:"Η";s:4:"𝝝";s:2:"Θ";s:4:"𝝞";s:2:"Ι";s:4:"𝝟";s:2:"Κ";s:4:"𝝠";s:2:"Λ";s:4:"𝝡";s:2:"Μ";s:4:"𝝢";s:2:"Ν";s:4:"𝝣";s:2:"Ξ";s:4:"𝝤";s:2:"Ο";s:4:"𝝥";s:2:"Π";s:4:"𝝦";s:2:"Ρ";s:4:"𝝧";s:2:"Θ";s:4:"𝝨";s:2:"Σ";s:4:"𝝩";s:2:"Τ";s:4:"𝝪";s:2:"Υ";s:4:"𝝫";s:2:"Φ";s:4:"𝝬";s:2:"Χ";s:4:"𝝭";s:2:"Ψ";s:4:"𝝮";s:2:"Ω";s:4:"𝝯";s:3:"∇";s:4:"𝝰";s:2:"α";s:4:"𝝱";s:2:"β";s:4:"𝝲";s:2:"γ";s:4:"𝝳";s:2:"δ";s:4:"𝝴";s:2:"ε";s:4:"𝝵";s:2:"ζ";s:4:"𝝶";s:2:"η";s:4:"𝝷";s:2:"θ";s:4:"𝝸";s:2:"ι";s:4:"𝝹";s:2:"κ";s:4:"𝝺";s:2:"λ";s:4:"𝝻";s:2:"μ";s:4:"𝝼";s:2:"ν";s:4:"𝝽";s:2:"ξ";s:4:"𝝾";s:2:"ο";s:4:"𝝿";s:2:"π";s:4:"𝞀";s:2:"ρ";s:4:"𝞁";s:2:"ς";s:4:"𝞂";s:2:"σ";s:4:"𝞃";s:2:"τ";s:4:"𝞄";s:2:"υ";s:4:"𝞅";s:2:"φ";s:4:"𝞆";s:2:"χ";s:4:"𝞇";s:2:"ψ";s:4:"𝞈";s:2:"ω";s:4:"𝞉";s:3:"∂";s:4:"𝞊";s:2:"ε";s:4:"𝞋";s:2:"θ";s:4:"𝞌";s:2:"κ";s:4:"𝞍";s:2:"φ";s:4:"𝞎";s:2:"ρ";s:4:"𝞏";s:2:"π";s:4:"𝞐";s:2:"Α";s:4:"𝞑";s:2:"Β";s:4:"𝞒";s:2:"Γ";s:4:"𝞓";s:2:"Δ";s:4:"𝞔";s:2:"Ε";s:4:"𝞕";s:2:"Ζ";s:4:"𝞖";s:2:"Η";s:4:"𝞗";s:2:"Θ";s:4:"𝞘";s:2:"Ι";s:4:"𝞙";s:2:"Κ";s:4:"𝞚";s:2:"Λ";s:4:"𝞛";s:2:"Μ";s:4:"𝞜";s:2:"Ν";s:4:"𝞝";s:2:"Ξ";s:4:"𝞞";s:2:"Ο";s:4:"𝞟";s:2:"Π";s:4:"𝞠";s:2:"Ρ";s:4:"𝞡";s:2:"Θ";s:4:"𝞢";s:2:"Σ";s:4:"𝞣";s:2:"Τ";s:4:"𝞤";s:2:"Υ";s:4:"𝞥";s:2:"Φ";s:4:"𝞦";s:2:"Χ";s:4:"𝞧";s:2:"Ψ";s:4:"𝞨";s:2:"Ω";s:4:"𝞩";s:3:"∇";s:4:"𝞪";s:2:"α";s:4:"𝞫";s:2:"β";s:4:"𝞬";s:2:"γ";s:4:"𝞭";s:2:"δ";s:4:"𝞮";s:2:"ε";s:4:"𝞯";s:2:"ζ";s:4:"𝞰";s:2:"η";s:4:"𝞱";s:2:"θ";s:4:"𝞲";s:2:"ι";s:4:"𝞳";s:2:"κ";s:4:"𝞴";s:2:"λ";s:4:"𝞵";s:2:"μ";s:4:"𝞶";s:2:"ν";s:4:"𝞷";s:2:"ξ";s:4:"𝞸";s:2:"ο";s:4:"𝞹";s:2:"π";s:4:"𝞺";s:2:"ρ";s:4:"𝞻";s:2:"ς";s:4:"𝞼";s:2:"σ";s:4:"𝞽";s:2:"τ";s:4:"𝞾";s:2:"υ";s:4:"𝞿";s:2:"φ";s:4:"𝟀";s:2:"χ";s:4:"𝟁";s:2:"ψ";s:4:"𝟂";s:2:"ω";s:4:"𝟃";s:3:"∂";s:4:"𝟄";s:2:"ε";s:4:"𝟅";s:2:"θ";s:4:"𝟆";s:2:"κ";s:4:"𝟇";s:2:"φ";s:4:"𝟈";s:2:"ρ";s:4:"𝟉";s:2:"π";s:4:"𝟊";s:2:"Ϝ";s:4:"𝟋";s:2:"ϝ";s:4:"𝟎";s:1:"0";s:4:"𝟏";s:1:"1";s:4:"𝟐";s:1:"2";s:4:"𝟑";s:1:"3";s:4:"𝟒";s:1:"4";s:4:"𝟓";s:1:"5";s:4:"𝟔";s:1:"6";s:4:"𝟕";s:1:"7";s:4:"𝟖";s:1:"8";s:4:"𝟗";s:1:"9";s:4:"𝟘";s:1:"0";s:4:"𝟙";s:1:"1";s:4:"𝟚";s:1:"2";s:4:"𝟛";s:1:"3";s:4:"𝟜";s:1:"4";s:4:"𝟝";s:1:"5";s:4:"𝟞";s:1:"6";s:4:"𝟟";s:1:"7";s:4:"𝟠";s:1:"8";s:4:"𝟡";s:1:"9";s:4:"𝟢";s:1:"0";s:4:"𝟣";s:1:"1";s:4:"𝟤";s:1:"2";s:4:"𝟥";s:1:"3";s:4:"𝟦";s:1:"4";s:4:"𝟧";s:1:"5";s:4:"𝟨";s:1:"6";s:4:"𝟩";s:1:"7";s:4:"𝟪";s:1:"8";s:4:"𝟫";s:1:"9";s:4:"𝟬";s:1:"0";s:4:"𝟭";s:1:"1";s:4:"𝟮";s:1:"2";s:4:"𝟯";s:1:"3";s:4:"𝟰";s:1:"4";s:4:"𝟱";s:1:"5";s:4:"𝟲";s:1:"6";s:4:"𝟳";s:1:"7";s:4:"𝟴";s:1:"8";s:4:"𝟵";s:1:"9";s:4:"𝟶";s:1:"0";s:4:"𝟷";s:1:"1";s:4:"𝟸";s:1:"2";s:4:"𝟹";s:1:"3";s:4:"𝟺";s:1:"4";s:4:"𝟻";s:1:"5";s:4:"𝟼";s:1:"6";s:4:"𝟽";s:1:"7";s:4:"𝟾";s:1:"8";s:4:"𝟿";s:1:"9";s:4:"🄀";s:2:"0.";s:4:"🄁";s:2:"0,";s:4:"🄂";s:2:"1,";s:4:"🄃";s:2:"2,";s:4:"🄄";s:2:"3,";s:4:"🄅";s:2:"4,";s:4:"🄆";s:2:"5,";s:4:"🄇";s:2:"6,";s:4:"🄈";s:2:"7,";s:4:"🄉";s:2:"8,";s:4:"🄊";s:2:"9,";s:4:"🄐";s:3:"(A)";s:4:"🄑";s:3:"(B)";s:4:"🄒";s:3:"(C)";s:4:"🄓";s:3:"(D)";s:4:"🄔";s:3:"(E)";s:4:"🄕";s:3:"(F)";s:4:"🄖";s:3:"(G)";s:4:"🄗";s:3:"(H)";s:4:"🄘";s:3:"(I)";s:4:"🄙";s:3:"(J)";s:4:"🄚";s:3:"(K)";s:4:"🄛";s:3:"(L)";s:4:"🄜";s:3:"(M)";s:4:"🄝";s:3:"(N)";s:4:"🄞";s:3:"(O)";s:4:"🄟";s:3:"(P)";s:4:"🄠";s:3:"(Q)";s:4:"🄡";s:3:"(R)";s:4:"🄢";s:3:"(S)";s:4:"🄣";s:3:"(T)";s:4:"🄤";s:3:"(U)";s:4:"🄥";s:3:"(V)";s:4:"🄦";s:3:"(W)";s:4:"🄧";s:3:"(X)";s:4:"🄨";s:3:"(Y)";s:4:"🄩";s:3:"(Z)";s:4:"🄪";s:7:"〔S〕";s:4:"🄫";s:1:"C";s:4:"🄬";s:1:"R";s:4:"🄭";s:2:"CD";s:4:"🄮";s:2:"WZ";s:4:"🄰";s:1:"A";s:4:"🄱";s:1:"B";s:4:"🄲";s:1:"C";s:4:"🄳";s:1:"D";s:4:"🄴";s:1:"E";s:4:"🄵";s:1:"F";s:4:"🄶";s:1:"G";s:4:"🄷";s:1:"H";s:4:"🄸";s:1:"I";s:4:"🄹";s:1:"J";s:4:"🄺";s:1:"K";s:4:"🄻";s:1:"L";s:4:"🄼";s:1:"M";s:4:"🄽";s:1:"N";s:4:"🄾";s:1:"O";s:4:"🄿";s:1:"P";s:4:"🅀";s:1:"Q";s:4:"🅁";s:1:"R";s:4:"🅂";s:1:"S";s:4:"🅃";s:1:"T";s:4:"🅄";s:1:"U";s:4:"🅅";s:1:"V";s:4:"🅆";s:1:"W";s:4:"🅇";s:1:"X";s:4:"🅈";s:1:"Y";s:4:"🅉";s:1:"Z";s:4:"🅊";s:2:"HV";s:4:"🅋";s:2:"MV";s:4:"🅌";s:2:"SD";s:4:"🅍";s:2:"SS";s:4:"🅎";s:3:"PPV";s:4:"🅏";s:2:"WC";s:4:"🆐";s:2:"DJ";s:4:"🈀";s:6:"ほか";s:4:"🈁";s:6:"ココ";s:4:"🈂";s:3:"サ";s:4:"🈐";s:3:"手";s:4:"🈑";s:3:"字";s:4:"🈒";s:3:"双";s:4:"🈓";s:6:"デ";s:4:"🈔";s:3:"二";s:4:"🈕";s:3:"多";s:4:"🈖";s:3:"解";s:4:"🈗";s:3:"天";s:4:"🈘";s:3:"交";s:4:"🈙";s:3:"映";s:4:"🈚";s:3:"無";s:4:"🈛";s:3:"料";s:4:"🈜";s:3:"前";s:4:"🈝";s:3:"後";s:4:"🈞";s:3:"再";s:4:"🈟";s:3:"新";s:4:"🈠";s:3:"初";s:4:"🈡";s:3:"終";s:4:"🈢";s:3:"生";s:4:"🈣";s:3:"販";s:4:"🈤";s:3:"声";s:4:"🈥";s:3:"吹";s:4:"🈦";s:3:"演";s:4:"🈧";s:3:"投";s:4:"🈨";s:3:"捕";s:4:"🈩";s:3:"一";s:4:"🈪";s:3:"三";s:4:"🈫";s:3:"遊";s:4:"🈬";s:3:"左";s:4:"🈭";s:3:"中";s:4:"🈮";s:3:"右";s:4:"🈯";s:3:"指";s:4:"🈰";s:3:"走";s:4:"🈱";s:3:"打";s:4:"🈲";s:3:"禁";s:4:"🈳";s:3:"空";s:4:"🈴";s:3:"合";s:4:"🈵";s:3:"満";s:4:"🈶";s:3:"有";s:4:"🈷";s:3:"月";s:4:"🈸";s:3:"申";s:4:"🈹";s:3:"割";s:4:"🈺";s:3:"営";s:4:"🉀";s:9:"〔本〕";s:4:"🉁";s:9:"〔三〕";s:4:"🉂";s:9:"〔二〕";s:4:"🉃";s:9:"〔安〕";s:4:"🉄";s:9:"〔点〕";s:4:"🉅";s:9:"〔打〕";s:4:"🉆";s:9:"〔盗〕";s:4:"🉇";s:9:"〔勝〕";s:4:"🉈";s:9:"〔敗〕";s:4:"🉐";s:3:"得";s:4:"🉑";s:3:"可";s:4:"丽";s:3:"丽";s:4:"丸";s:3:"丸";s:4:"乁";s:3:"乁";s:4:"𠄢";s:4:"𠄢";s:4:"你";s:3:"你";s:4:"侮";s:3:"侮";s:4:"侻";s:3:"侻";s:4:"倂";s:3:"倂";s:4:"偺";s:3:"偺";s:4:"備";s:3:"備";s:4:"僧";s:3:"僧";s:4:"像";s:3:"像";s:4:"㒞";s:3:"㒞";s:4:"𠘺";s:4:"𠘺";s:4:"免";s:3:"免";s:4:"兔";s:3:"兔";s:4:"兤";s:3:"兤";s:4:"具";s:3:"具";s:4:"𠔜";s:4:"𠔜";s:4:"㒹";s:3:"㒹";s:4:"內";s:3:"內";s:4:"再";s:3:"再";s:4:"𠕋";s:4:"𠕋";s:4:"冗";s:3:"冗";s:4:"冤";s:3:"冤";s:4:"仌";s:3:"仌";s:4:"冬";s:3:"冬";s:4:"况";s:3:"况";s:4:"𩇟";s:4:"𩇟";s:4:"凵";s:3:"凵";s:4:"刃";s:3:"刃";s:4:"㓟";s:3:"㓟";s:4:"刻";s:3:"刻";s:4:"剆";s:3:"剆";s:4:"割";s:3:"割";s:4:"剷";s:3:"剷";s:4:"㔕";s:3:"㔕";s:4:"勇";s:3:"勇";s:4:"勉";s:3:"勉";s:4:"勤";s:3:"勤";s:4:"勺";s:3:"勺";s:4:"包";s:3:"包";s:4:"匆";s:3:"匆";s:4:"北";s:3:"北";s:4:"卉";s:3:"卉";s:4:"卑";s:3:"卑";s:4:"博";s:3:"博";s:4:"即";s:3:"即";s:4:"卽";s:3:"卽";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"卿";s:3:"卿";s:4:"𠨬";s:4:"𠨬";s:4:"灰";s:3:"灰";s:4:"及";s:3:"及";s:4:"叟";s:3:"叟";s:4:"𠭣";s:4:"𠭣";s:4:"叫";s:3:"叫";s:4:"叱";s:3:"叱";s:4:"吆";s:3:"吆";s:4:"咞";s:3:"咞";s:4:"吸";s:3:"吸";s:4:"呈";s:3:"呈";s:4:"周";s:3:"周";s:4:"咢";s:3:"咢";s:4:"哶";s:3:"哶";s:4:"唐";s:3:"唐";s:4:"啓";s:3:"啓";s:4:"啣";s:3:"啣";s:4:"善";s:3:"善";s:4:"善";s:3:"善";s:4:"喙";s:3:"喙";s:4:"喫";s:3:"喫";s:4:"喳";s:3:"喳";s:4:"嗂";s:3:"嗂";s:4:"圖";s:3:"圖";s:4:"嘆";s:3:"嘆";s:4:"圗";s:3:"圗";s:4:"噑";s:3:"噑";s:4:"噴";s:3:"噴";s:4:"切";s:3:"切";s:4:"壮";s:3:"壮";s:4:"城";s:3:"城";s:4:"埴";s:3:"埴";s:4:"堍";s:3:"堍";s:4:"型";s:3:"型";s:4:"堲";s:3:"堲";s:4:"報";s:3:"報";s:4:"墬";s:3:"墬";s:4:"𡓤";s:4:"𡓤";s:4:"売";s:3:"売";s:4:"壷";s:3:"壷";s:4:"夆";s:3:"夆";s:4:"多";s:3:"多";s:4:"夢";s:3:"夢";s:4:"奢";s:3:"奢";s:4:"𡚨";s:4:"𡚨";s:4:"𡛪";s:4:"𡛪";s:4:"姬";s:3:"姬";s:4:"娛";s:3:"娛";s:4:"娧";s:3:"娧";s:4:"姘";s:3:"姘";s:4:"婦";s:3:"婦";s:4:"㛮";s:3:"㛮";s:4:"㛼";s:3:"㛼";s:4:"嬈";s:3:"嬈";s:4:"嬾";s:3:"嬾";s:4:"嬾";s:3:"嬾";s:4:"𡧈";s:4:"𡧈";s:4:"寃";s:3:"寃";s:4:"寘";s:3:"寘";s:4:"寧";s:3:"寧";s:4:"寳";s:3:"寳";s:4:"𡬘";s:4:"𡬘";s:4:"寿";s:3:"寿";s:4:"将";s:3:"将";s:4:"当";s:3:"当";s:4:"尢";s:3:"尢";s:4:"㞁";s:3:"㞁";s:4:"屠";s:3:"屠";s:4:"屮";s:3:"屮";s:4:"峀";s:3:"峀";s:4:"岍";s:3:"岍";s:4:"𡷤";s:4:"𡷤";s:4:"嵃";s:3:"嵃";s:4:"𡷦";s:4:"𡷦";s:4:"嵮";s:3:"嵮";s:4:"嵫";s:3:"嵫";s:4:"嵼";s:3:"嵼";s:4:"巡";s:3:"巡";s:4:"巢";s:3:"巢";s:4:"㠯";s:3:"㠯";s:4:"巽";s:3:"巽";s:4:"帨";s:3:"帨";s:4:"帽";s:3:"帽";s:4:"幩";s:3:"幩";s:4:"㡢";s:3:"㡢";s:4:"𢆃";s:4:"𢆃";s:4:"㡼";s:3:"㡼";s:4:"庰";s:3:"庰";s:4:"庳";s:3:"庳";s:4:"庶";s:3:"庶";s:4:"廊";s:3:"廊";s:4:"𪎒";s:4:"𪎒";s:4:"廾";s:3:"廾";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"𢌱";s:4:"舁";s:3:"舁";s:4:"弢";s:3:"弢";s:4:"弢";s:3:"弢";s:4:"㣇";s:3:"㣇";s:4:"𣊸";s:4:"𣊸";s:4:"𦇚";s:4:"𦇚";s:4:"形";s:3:"形";s:4:"彫";s:3:"彫";s:4:"㣣";s:3:"㣣";s:4:"徚";s:3:"徚";s:4:"忍";s:3:"忍";s:4:"志";s:3:"志";s:4:"忹";s:3:"忹";s:4:"悁";s:3:"悁";s:4:"㤺";s:3:"㤺";s:4:"㤜";s:3:"㤜";s:4:"悔";s:3:"悔";s:4:"𢛔";s:4:"𢛔";s:4:"惇";s:3:"惇";s:4:"慈";s:3:"慈";s:4:"慌";s:3:"慌";s:4:"慎";s:3:"慎";s:4:"慌";s:3:"慌";s:4:"慺";s:3:"慺";s:4:"憎";s:3:"憎";s:4:"憲";s:3:"憲";s:4:"憤";s:3:"憤";s:4:"憯";s:3:"憯";s:4:"懞";s:3:"懞";s:4:"懲";s:3:"懲";s:4:"懶";s:3:"懶";s:4:"成";s:3:"成";s:4:"戛";s:3:"戛";s:4:"扝";s:3:"扝";s:4:"抱";s:3:"抱";s:4:"拔";s:3:"拔";s:4:"捐";s:3:"捐";s:4:"𢬌";s:4:"𢬌";s:4:"挽";s:3:"挽";s:4:"拼";s:3:"拼";s:4:"捨";s:3:"捨";s:4:"掃";s:3:"掃";s:4:"揤";s:3:"揤";s:4:"𢯱";s:4:"𢯱";s:4:"搢";s:3:"搢";s:4:"揅";s:3:"揅";s:4:"掩";s:3:"掩";s:4:"㨮";s:3:"㨮";s:4:"摩";s:3:"摩";s:4:"摾";s:3:"摾";s:4:"撝";s:3:"撝";s:4:"摷";s:3:"摷";s:4:"㩬";s:3:"㩬";s:4:"敏";s:3:"敏";s:4:"敬";s:3:"敬";s:4:"𣀊";s:4:"𣀊";s:4:"旣";s:3:"旣";s:4:"書";s:3:"書";s:4:"晉";s:3:"晉";s:4:"㬙";s:3:"㬙";s:4:"暑";s:3:"暑";s:4:"㬈";s:3:"㬈";s:4:"㫤";s:3:"㫤";s:4:"冒";s:3:"冒";s:4:"冕";s:3:"冕";s:4:"最";s:3:"最";s:4:"暜";s:3:"暜";s:4:"肭";s:3:"肭";s:4:"䏙";s:3:"䏙";s:4:"朗";s:3:"朗";s:4:"望";s:3:"望";s:4:"朡";s:3:"朡";s:4:"杞";s:3:"杞";s:4:"杓";s:3:"杓";s:4:"𣏃";s:4:"𣏃";s:4:"㭉";s:3:"㭉";s:4:"柺";s:3:"柺";s:4:"枅";s:3:"枅";s:4:"桒";s:3:"桒";s:4:"梅";s:3:"梅";s:4:"𣑭";s:4:"𣑭";s:4:"梎";s:3:"梎";s:4:"栟";s:3:"栟";s:4:"椔";s:3:"椔";s:4:"㮝";s:3:"㮝";s:4:"楂";s:3:"楂";s:4:"榣";s:3:"榣";s:4:"槪";s:3:"槪";s:4:"檨";s:3:"檨";s:4:"𣚣";s:4:"𣚣";s:4:"櫛";s:3:"櫛";s:4:"㰘";s:3:"㰘";s:4:"次";s:3:"次";s:4:"𣢧";s:4:"𣢧";s:4:"歔";s:3:"歔";s:4:"㱎";s:3:"㱎";s:4:"歲";s:3:"歲";s:4:"殟";s:3:"殟";s:4:"殺";s:3:"殺";s:4:"殻";s:3:"殻";s:4:"𣪍";s:4:"𣪍";s:4:"𡴋";s:4:"𡴋";s:4:"𣫺";s:4:"𣫺";s:4:"汎";s:3:"汎";s:4:"𣲼";s:4:"𣲼";s:4:"沿";s:3:"沿";s:4:"泍";s:3:"泍";s:4:"汧";s:3:"汧";s:4:"洖";s:3:"洖";s:4:"派";s:3:"派";s:4:"海";s:3:"海";s:4:"流";s:3:"流";s:4:"浩";s:3:"浩";s:4:"浸";s:3:"浸";s:4:"涅";s:3:"涅";s:4:"𣴞";s:4:"𣴞";s:4:"洴";s:3:"洴";s:4:"港";s:3:"港";s:4:"湮";s:3:"湮";s:4:"㴳";s:3:"㴳";s:4:"滋";s:3:"滋";s:4:"滇";s:3:"滇";s:4:"𣻑";s:4:"𣻑";s:4:"淹";s:3:"淹";s:4:"潮";s:3:"潮";s:4:"𣽞";s:4:"𣽞";s:4:"𣾎";s:4:"𣾎";s:4:"濆";s:3:"濆";s:4:"瀹";s:3:"瀹";s:4:"瀞";s:3:"瀞";s:4:"瀛";s:3:"瀛";s:4:"㶖";s:3:"㶖";s:4:"灊";s:3:"灊";s:4:"災";s:3:"災";s:4:"灷";s:3:"灷";s:4:"炭";s:3:"炭";s:4:"𠔥";s:4:"𠔥";s:4:"煅";s:3:"煅";s:4:"𤉣";s:4:"𤉣";s:4:"熜";s:3:"熜";s:4:"𤎫";s:4:"𤎫";s:4:"爨";s:3:"爨";s:4:"爵";s:3:"爵";s:4:"牐";s:3:"牐";s:4:"𤘈";s:4:"𤘈";s:4:"犀";s:3:"犀";s:4:"犕";s:3:"犕";s:4:"𤜵";s:4:"𤜵";s:4:"𤠔";s:4:"𤠔";s:4:"獺";s:3:"獺";s:4:"王";s:3:"王";s:4:"㺬";s:3:"㺬";s:4:"玥";s:3:"玥";s:4:"㺸";s:3:"㺸";s:4:"㺸";s:3:"㺸";s:4:"瑇";s:3:"瑇";s:4:"瑜";s:3:"瑜";s:4:"瑱";s:3:"瑱";s:4:"璅";s:3:"璅";s:4:"瓊";s:3:"瓊";s:4:"㼛";s:3:"㼛";s:4:"甤";s:3:"甤";s:4:"𤰶";s:4:"𤰶";s:4:"甾";s:3:"甾";s:4:"𤲒";s:4:"𤲒";s:4:"異";s:3:"異";s:4:"𢆟";s:4:"𢆟";s:4:"瘐";s:3:"瘐";s:4:"𤾡";s:4:"𤾡";s:4:"𤾸";s:4:"𤾸";s:4:"𥁄";s:4:"𥁄";s:4:"㿼";s:3:"㿼";s:4:"䀈";s:3:"䀈";s:4:"直";s:3:"直";s:4:"𥃳";s:4:"𥃳";s:4:"𥃲";s:4:"𥃲";s:4:"𥄙";s:4:"𥄙";s:4:"𥄳";s:4:"𥄳";s:4:"眞";s:3:"眞";s:4:"真";s:3:"真";s:4:"真";s:3:"真";s:4:"睊";s:3:"睊";s:4:"䀹";s:3:"䀹";s:4:"瞋";s:3:"瞋";s:4:"䁆";s:3:"䁆";s:4:"䂖";s:3:"䂖";s:4:"𥐝";s:4:"𥐝";s:4:"硎";s:3:"硎";s:4:"碌";s:3:"碌";s:4:"磌";s:3:"磌";s:4:"䃣";s:3:"䃣";s:4:"𥘦";s:4:"𥘦";s:4:"祖";s:3:"祖";s:4:"𥚚";s:4:"𥚚";s:4:"𥛅";s:4:"𥛅";s:4:"福";s:3:"福";s:4:"秫";s:3:"秫";s:4:"䄯";s:3:"䄯";s:4:"穀";s:3:"穀";s:4:"穊";s:3:"穊";s:4:"穏";s:3:"穏";s:4:"𥥼";s:4:"𥥼";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"𥪧";s:4:"竮";s:3:"竮";s:4:"䈂";s:3:"䈂";s:4:"𥮫";s:4:"𥮫";s:4:"篆";s:3:"篆";s:4:"築";s:3:"築";s:4:"䈧";s:3:"䈧";s:4:"𥲀";s:4:"𥲀";s:4:"糒";s:3:"糒";s:4:"䊠";s:3:"䊠";s:4:"糨";s:3:"糨";s:4:"糣";s:3:"糣";s:4:"紀";s:3:"紀";s:4:"𥾆";s:4:"𥾆";s:4:"絣";s:3:"絣";s:4:"䌁";s:3:"䌁";s:4:"緇";s:3:"緇";s:4:"縂";s:3:"縂";s:4:"繅";s:3:"繅";s:4:"䌴";s:3:"䌴";s:4:"𦈨";s:4:"𦈨";s:4:"𦉇";s:4:"𦉇";s:4:"䍙";s:3:"䍙";s:4:"𦋙";s:4:"𦋙";s:4:"罺";s:3:"罺";s:4:"𦌾";s:4:"𦌾";s:4:"羕";s:3:"羕";s:4:"翺";s:3:"翺";s:4:"者";s:3:"者";s:4:"𦓚";s:4:"𦓚";s:4:"𦔣";s:4:"𦔣";s:4:"聠";s:3:"聠";s:4:"𦖨";s:4:"𦖨";s:4:"聰";s:3:"聰";s:4:"𣍟";s:4:"𣍟";s:4:"䏕";s:3:"䏕";s:4:"育";s:3:"育";s:4:"脃";s:3:"脃";s:4:"䐋";s:3:"䐋";s:4:"脾";s:3:"脾";s:4:"媵";s:3:"媵";s:4:"𦞧";s:4:"𦞧";s:4:"𦞵";s:4:"𦞵";s:4:"𣎓";s:4:"𣎓";s:4:"𣎜";s:4:"𣎜";s:4:"舁";s:3:"舁";s:4:"舄";s:3:"舄";s:4:"辞";s:3:"辞";s:4:"䑫";s:3:"䑫";s:4:"芑";s:3:"芑";s:4:"芋";s:3:"芋";s:4:"芝";s:3:"芝";s:4:"劳";s:3:"劳";s:4:"花";s:3:"花";s:4:"芳";s:3:"芳";s:4:"芽";s:3:"芽";s:4:"苦";s:3:"苦";s:4:"𦬼";s:4:"𦬼";s:4:"若";s:3:"若";s:4:"茝";s:3:"茝";s:4:"荣";s:3:"荣";s:4:"莭";s:3:"莭";s:4:"茣";s:3:"茣";s:4:"莽";s:3:"莽";s:4:"菧";s:3:"菧";s:4:"著";s:3:"著";s:4:"荓";s:3:"荓";s:4:"菊";s:3:"菊";s:4:"菌";s:3:"菌";s:4:"菜";s:3:"菜";s:4:"𦰶";s:4:"𦰶";s:4:"𦵫";s:4:"𦵫";s:4:"𦳕";s:4:"𦳕";s:4:"䔫";s:3:"䔫";s:4:"蓱";s:3:"蓱";s:4:"蓳";s:3:"蓳";s:4:"蔖";s:3:"蔖";s:4:"𧏊";s:4:"𧏊";s:4:"蕤";s:3:"蕤";s:4:"𦼬";s:4:"𦼬";s:4:"䕝";s:3:"䕝";s:4:"䕡";s:3:"䕡";s:4:"𦾱";s:4:"𦾱";s:4:"𧃒";s:4:"𧃒";s:4:"䕫";s:3:"䕫";s:4:"虐";s:3:"虐";s:4:"虜";s:3:"虜";s:4:"虧";s:3:"虧";s:4:"虩";s:3:"虩";s:4:"蚩";s:3:"蚩";s:4:"蚈";s:3:"蚈";s:4:"蜎";s:3:"蜎";s:4:"蛢";s:3:"蛢";s:4:"蝹";s:3:"蝹";s:4:"蜨";s:3:"蜨";s:4:"蝫";s:3:"蝫";s:4:"螆";s:3:"螆";s:4:"䗗";s:3:"䗗";s:4:"蟡";s:3:"蟡";s:4:"蠁";s:3:"蠁";s:4:"䗹";s:3:"䗹";s:4:"衠";s:3:"衠";s:4:"衣";s:3:"衣";s:4:"𧙧";s:4:"𧙧";s:4:"裗";s:3:"裗";s:4:"裞";s:3:"裞";s:4:"䘵";s:3:"䘵";s:4:"裺";s:3:"裺";s:4:"㒻";s:3:"㒻";s:4:"𧢮";s:4:"𧢮";s:4:"𧥦";s:4:"𧥦";s:4:"䚾";s:3:"䚾";s:4:"䛇";s:3:"䛇";s:4:"誠";s:3:"誠";s:4:"諭";s:3:"諭";s:4:"變";s:3:"變";s:4:"豕";s:3:"豕";s:4:"𧲨";s:4:"𧲨";s:4:"貫";s:3:"貫";s:4:"賁";s:3:"賁";s:4:"贛";s:3:"贛";s:4:"起";s:3:"起";s:4:"𧼯";s:4:"𧼯";s:4:"𠠄";s:4:"𠠄";s:4:"跋";s:3:"跋";s:4:"趼";s:3:"趼";s:4:"跰";s:3:"跰";s:4:"𠣞";s:4:"𠣞";s:4:"軔";s:3:"軔";s:4:"輸";s:3:"輸";s:4:"𨗒";s:4:"𨗒";s:4:"𨗭";s:4:"𨗭";s:4:"邔";s:3:"邔";s:4:"郱";s:3:"郱";s:4:"鄑";s:3:"鄑";s:4:"𨜮";s:4:"𨜮";s:4:"鄛";s:3:"鄛";s:4:"鈸";s:3:"鈸";s:4:"鋗";s:3:"鋗";s:4:"鋘";s:3:"鋘";s:4:"鉼";s:3:"鉼";s:4:"鏹";s:3:"鏹";s:4:"鐕";s:3:"鐕";s:4:"𨯺";s:4:"𨯺";s:4:"開";s:3:"開";s:4:"䦕";s:3:"䦕";s:4:"閷";s:3:"閷";s:4:"𨵷";s:4:"𨵷";s:4:"䧦";s:3:"䧦";s:4:"雃";s:3:"雃";s:4:"嶲";s:3:"嶲";s:4:"霣";s:3:"霣";s:4:"𩅅";s:4:"𩅅";s:4:"𩈚";s:4:"𩈚";s:4:"䩮";s:3:"䩮";s:4:"䩶";s:3:"䩶";s:4:"韠";s:3:"韠";s:4:"𩐊";s:4:"𩐊";s:4:"䪲";s:3:"䪲";s:4:"𩒖";s:4:"𩒖";s:4:"頋";s:3:"頋";s:4:"頋";s:3:"頋";s:4:"頩";s:3:"頩";s:4:"𩖶";s:4:"𩖶";s:4:"飢";s:3:"飢";s:4:"䬳";s:3:"䬳";s:4:"餩";s:3:"餩";s:4:"馧";s:3:"馧";s:4:"駂";s:3:"駂";s:4:"駾";s:3:"駾";s:4:"䯎";s:3:"䯎";s:4:"𩬰";s:4:"𩬰";s:4:"鬒";s:3:"鬒";s:4:"鱀";s:3:"鱀";s:4:"鳽";s:3:"鳽";s:4:"䳎";s:3:"䳎";s:4:"䳭";s:3:"䳭";s:4:"鵧";s:3:"鵧";s:4:"𪃎";s:4:"𪃎";s:4:"䳸";s:3:"䳸";s:4:"𪄅";s:4:"𪄅";s:4:"𪈎";s:4:"𪈎";s:4:"𪊑";s:4:"𪊑";s:4:"麻";s:3:"麻";s:4:"䵖";s:3:"䵖";s:4:"黹";s:3:"黹";s:4:"黾";s:3:"黾";s:4:"鼅";s:3:"鼅";s:4:"鼏";s:3:"鼏";s:4:"鼖";s:3:"鼖";s:4:"鼻";s:3:"鼻";s:4:"𪘀";s:4:"𪘀";}' );
+
diff --git a/vendor/wikimedia/utfnormal/src/Util.php b/vendor/wikimedia/utfnormal/src/Util.php
new file mode 100644
index 00000000..e5049097
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/src/Util.php
@@ -0,0 +1,157 @@
+<?php
+namespace UtfNormal;
+
+use InvalidArgumentException;
+
+/**
+ * Some of these functions are adapted from places in MediaWiki.
+ * Should probably merge them for consistency.
+ *
+ * Copyright © 2004 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup UtfNormal
+ */
+
+class Utils {
+ /**
+ * Return UTF-8 sequence for a given Unicode code point.
+ *
+ * @param $codepoint Integer:
+ * @return String
+ * @throws InvalidArgumentException if fed out of range data.
+ */
+ public static function codepointToUtf8 ( $codepoint ) {
+ if ( $codepoint < 0x80 ) {
+ return chr( $codepoint );
+ }
+
+ if ( $codepoint < 0x800 ) {
+ return chr( $codepoint >> 6 & 0x3f | 0xc0 ) .
+ chr( $codepoint & 0x3f | 0x80 );
+ }
+
+ if ( $codepoint < 0x10000 ) {
+ return chr( $codepoint >> 12 & 0x0f | 0xe0 ) .
+ chr( $codepoint >> 6 & 0x3f | 0x80 ) .
+ chr( $codepoint & 0x3f | 0x80 );
+ }
+
+ if ( $codepoint < 0x110000 ) {
+ return chr( $codepoint >> 18 & 0x07 | 0xf0 ) .
+ chr( $codepoint >> 12 & 0x3f | 0x80 ) .
+ chr( $codepoint >> 6 & 0x3f | 0x80 ) .
+ chr( $codepoint & 0x3f | 0x80 );
+ }
+
+ throw new InvalidArgumentException( "Asked for code outside of range ($codepoint)" );
+ }
+
+ /**
+ * Take a series of space-separated hexadecimal numbers representing
+ * Unicode code points and return a UTF-8 string composed of those
+ * characters. Used by UTF-8 data generation and testing routines.
+ *
+ * @param $sequence String
+ * @return String
+ * @throws InvalidArgumentException if fed out of range data.
+ * @private Used in tests and data table generation
+ */
+ public static function hexSequenceToUtf8 ( $sequence ) {
+ $utf = '';
+ foreach ( explode( ' ', $sequence ) as $hex ) {
+ $n = hexdec( $hex );
+ $utf .= self::codepointToUtf8( $n );
+ }
+
+ return $utf;
+ }
+
+ /**
+ * Take a UTF-8 string and return a space-separated series of hex
+ * numbers representing Unicode code points. For debugging.
+ *
+ * @param string $str UTF-8 string.
+ * @return string
+ * @private
+ */
+ private static function utf8ToHexSequence ( $str ) {
+ $buf = '';
+ foreach ( preg_split( '//u', $str, -1, PREG_SPLIT_NO_EMPTY ) as $cp ) {
+ $buf .= sprintf( '%04x ', self::utf8ToCodepoint( $cp ) );
+ }
+
+ return rtrim( $buf );
+ }
+
+ /**
+ * Determine the Unicode codepoint of a single-character UTF-8 sequence.
+ * Does not check for invalid input data.
+ *
+ * @param $char String
+ * @return Integer
+ */
+ public static function utf8ToCodepoint ( $char ) {
+ # Find the length
+ $z = ord( $char[0] );
+ if ( $z & 0x80 ) {
+ $length = 0;
+ while ( $z & 0x80 ) {
+ $length++;
+ $z <<= 1;
+ }
+ } else {
+ $length = 1;
+ }
+
+ if ( $length != strlen( $char ) ) {
+ return false;
+ }
+
+ if ( $length == 1 ) {
+ return ord( $char );
+ }
+
+ # Mask off the length-determining bits and shift back to the original location
+ $z &= 0xff;
+ $z >>= $length;
+
+ # Add in the free bits from subsequent bytes
+ for ( $i = 1; $i < $length; $i++ ) {
+ $z <<= 6;
+ $z |= ord( $char[$i] ) & 0x3f;
+ }
+
+ return $z;
+ }
+
+ /**
+ * Escape a string for inclusion in a PHP single-quoted string literal.
+ *
+ * @param string $string string to be escaped.
+ * @return String: escaped string.
+ */
+ public static function escapeSingleString ( $string ) {
+ return strtr( $string,
+ array(
+ '\\' => '\\\\',
+ '\'' => '\\\''
+ ) );
+ }
+}
diff --git a/vendor/wikimedia/utfnormal/src/Validator.php b/vendor/wikimedia/utfnormal/src/Validator.php
new file mode 100644
index 00000000..2ccfd7ad
--- /dev/null
+++ b/vendor/wikimedia/utfnormal/src/Validator.php
@@ -0,0 +1,770 @@
+<?php
+/**
+ * Unicode normalization routines
+ *
+ * Copyright © 2004 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup UtfNormal\UtfNormal
+ */
+namespace UtfNormal;
+
+use Normalizer;
+
+/**
+ * @defgroup UtfNormal UtfNormal
+ */
+
+define( 'NORMALIZE_INTL', function_exists( 'normalizer_normalize' ) );
+
+/**
+ * Unicode normalization routines for working with UTF-8 strings.
+ * Currently assumes that input strings are valid UTF-8!
+ *
+ * Not as fast as I'd like, but should be usable for most purposes.
+ * UtfNormal\Validator::toNFC() will bail early if given ASCII text or text
+ * it can quickly determine is already normalized.
+ *
+ * All functions can be called static.
+ *
+ * See description of forms at http://www.unicode.org/reports/tr15/
+ *
+ * @ingroup UtfNormal
+ */
+class Validator {
+ public static $utfCombiningClass = null;
+ public static $utfCanonicalComp = null;
+ public static $utfCanonicalDecomp = null;
+
+ # Load compatibility decompositions on demand if they are needed.
+ public static $utfCompatibilityDecomp = null;
+ public static $utfCheckNFC;
+
+ /**
+ * The ultimate convenience function! Clean up invalid UTF-8 sequences,
+ * and convert to normal form C, canonical composition.
+ *
+ * Fast return for pure ASCII strings; some lesser optimizations for
+ * strings containing only known-good characters. Not as fast as toNFC().
+ *
+ * @param string $string a UTF-8 string
+ * @return string a clean, shiny, normalized UTF-8 string
+ */
+ static function cleanUp ( $string ) {
+ if ( NORMALIZE_INTL ) {
+ $string = self::replaceForNativeNormalize( $string );
+ $norm = normalizer_normalize( $string, Normalizer::FORM_C );
+ if ( $norm === null || $norm === false ) {
+ # normalizer_normalize will either return false or null
+ # (depending on which doc you read) if invalid utf8 string.
+ # quickIsNFCVerify cleans up invalid sequences.
+
+ if ( self::quickIsNFCVerify( $string ) ) {
+ # if that's true, the string is actually already normal.
+ return $string;
+ } else {
+ # Now we are valid but non-normal
+ return normalizer_normalize( $string, Normalizer::FORM_C );
+ }
+ } else {
+ return $norm;
+ }
+ } elseif ( self::quickIsNFCVerify( $string ) ) {
+ # Side effect -- $string has had UTF-8 errors cleaned up.
+ return $string;
+ } else {
+ return self::NFC( $string );
+ }
+ }
+
+ /**
+ * Convert a UTF-8 string to normal form C, canonical composition.
+ * Fast return for pure ASCII strings; some lesser optimizations for
+ * strings containing only known-good characters.
+ *
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return string a UTF-8 string in normal form C
+ */
+ static function toNFC ( $string ) {
+ if ( NORMALIZE_INTL )
+ return normalizer_normalize( $string, Normalizer::FORM_C );
+ elseif ( self::quickIsNFC( $string ) )
+ return $string;
+ else
+ return self::NFC( $string );
+ }
+
+ /**
+ * Convert a UTF-8 string to normal form D, canonical decomposition.
+ * Fast return for pure ASCII strings.
+ *
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return string a UTF-8 string in normal form D
+ */
+ static function toNFD ( $string ) {
+ if ( NORMALIZE_INTL )
+ return normalizer_normalize( $string, Normalizer::FORM_D );
+ elseif ( preg_match( '/[\x80-\xff]/', $string ) )
+ return self::NFD( $string );
+ else
+ return $string;
+ }
+
+ /**
+ * Convert a UTF-8 string to normal form KC, compatibility composition.
+ * This may cause irreversible information loss, use judiciously.
+ * Fast return for pure ASCII strings.
+ *
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return string a UTF-8 string in normal form KC
+ */
+ static function toNFKC ( $string ) {
+ if ( NORMALIZE_INTL )
+ return normalizer_normalize( $string, Normalizer::FORM_KC );
+ elseif ( preg_match( '/[\x80-\xff]/', $string ) )
+ return self::NFKC( $string );
+ else
+ return $string;
+ }
+
+ /**
+ * Convert a UTF-8 string to normal form KD, compatibility decomposition.
+ * This may cause irreversible information loss, use judiciously.
+ * Fast return for pure ASCII strings.
+ *
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return string a UTF-8 string in normal form KD
+ */
+ static function toNFKD ( $string ) {
+ if ( NORMALIZE_INTL )
+ return normalizer_normalize( $string, Normalizer::FORM_KD );
+ elseif ( preg_match( '/[\x80-\xff]/', $string ) )
+ return self::NFKD( $string );
+ else
+ return $string;
+ }
+
+ /**
+ * Load the basic composition data if necessary
+ * @private
+ */
+ static function loadData () {
+ if ( !isset( self::$utfCombiningClass ) ) {
+ require_once __DIR__ . '/UtfNormalData.inc';
+ }
+ }
+
+ /**
+ * Returns true if the string is _definitely_ in NFC.
+ * Returns false if not or uncertain.
+ * @param string $string a valid UTF-8 string. Input is not validated.
+ * @return bool
+ */
+ static function quickIsNFC ( $string ) {
+ # ASCII is always valid NFC!
+ # If it's pure ASCII, let it through.
+ if ( !preg_match( '/[\x80-\xff]/', $string ) ) return true;
+
+ self::loadData();
+ $len = strlen( $string );
+ for ( $i = 0; $i < $len; $i++ ) {
+ $c = $string[$i];
+ $n = ord( $c );
+ if ( $n < 0x80 ) {
+ continue;
+ } elseif ( $n >= 0xf0 ) {
+ $c = substr( $string, $i, 4 );
+ $i += 3;
+ } elseif ( $n >= 0xe0 ) {
+ $c = substr( $string, $i, 3 );
+ $i += 2;
+ } elseif ( $n >= 0xc0 ) {
+ $c = substr( $string, $i, 2 );
+ $i++;
+ }
+ if ( isset( self::$utfCheckNFC[$c] ) ) {
+ # If it's NO or MAYBE, bail and do the slow check.
+ return false;
+ }
+ if ( isset( self::$utfCombiningClass[$c] ) ) {
+ # Combining character? We might have to do sorting, at least.
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns true if the string is _definitely_ in NFC.
+ * Returns false if not or uncertain.
+ * @param string $string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
+ * @return bool
+ */
+ static function quickIsNFCVerify ( &$string ) {
+ # Screen out some characters that eg won't be allowed in XML
+ $string = preg_replace( '/[\x00-\x08\x0b\x0c\x0e-\x1f]/', Constants::UTF8_REPLACEMENT, $string );
+
+ # ASCII is always valid NFC!
+ # If we're only ever given plain ASCII, we can avoid the overhead
+ # of initializing the decomposition tables by skipping out early.
+ if ( !preg_match( '/[\x80-\xff]/', $string ) ) return true;
+
+ static $checkit = null, $tailBytes = null, $utfCheckOrCombining = null;
+ if ( !isset( $checkit ) ) {
+ # Load/build some scary lookup tables...
+ self::loadData();
+
+ $utfCheckOrCombining = array_merge( self::$utfCheckNFC, self::$utfCombiningClass );
+
+ # Head bytes for sequences which we should do further validity checks
+ $checkit = array_flip( array_map( 'chr',
+ array( 0xc0, 0xc1, 0xe0, 0xed, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff ) ) );
+
+ # Each UTF-8 head byte is followed by a certain
+ # number of tail bytes.
+ $tailBytes = array();
+ for ( $n = 0; $n < 256; $n++ ) {
+ if ( $n < 0xc0 ) {
+ $remaining = 0;
+ } elseif ( $n < 0xe0 ) {
+ $remaining = 1;
+ } elseif ( $n < 0xf0 ) {
+ $remaining = 2;
+ } elseif ( $n < 0xf8 ) {
+ $remaining = 3;
+ } elseif ( $n < 0xfc ) {
+ $remaining = 4;
+ } elseif ( $n < 0xfe ) {
+ $remaining = 5;
+ } else {
+ $remaining = 0;
+ }
+ $tailBytes[chr( $n )] = $remaining;
+ }
+ }
+
+ # Chop the text into pure-ASCII and non-ASCII areas;
+ # large ASCII parts can be handled much more quickly.
+ # Don't chop up Unicode areas for punctuation, though,
+ # that wastes energy.
+ $matches = array();
+ preg_match_all(
+ '/([\x00-\x7f]+|[\x80-\xff][\x00-\x40\x5b-\x5f\x7b-\xff]*)/',
+ $string, $matches );
+
+ $looksNormal = true;
+ $base = 0;
+ $replace = array();
+ foreach ( $matches[1] as $str ) {
+ $chunk = strlen( $str );
+
+ if ( $str[0] < "\x80" ) {
+ # ASCII chunk: guaranteed to be valid UTF-8
+ # and in normal form C, so skip over it.
+ $base += $chunk;
+ continue;
+ }
+
+ # We'll have to examine the chunk byte by byte to ensure
+ # that it consists of valid UTF-8 sequences, and to see
+ # if any of them might not be normalized.
+ #
+ # Since PHP is not the fastest language on earth, some of
+ # this code is a little ugly with inner loop optimizations.
+
+ $head = '';
+ $len = $chunk + 1; # Counting down is faster. I'm *so* sorry.
+
+ for ( $i = -1; --$len; ) {
+ $remaining = $tailBytes[$c = $str[++$i]];
+ if ( $remaining ) {
+ # UTF-8 head byte!
+ $sequence = $head = $c;
+ do {
+ # Look for the defined number of tail bytes...
+ if ( --$len && ( $c = $str[++$i] ) >= "\x80" && $c < "\xc0" ) {
+ # Legal tail bytes are nice.
+ $sequence .= $c;
+ } else {
+ if ( 0 == $len ) {
+ # Premature end of string!
+ # Drop a replacement character into output to
+ # represent the invalid UTF-8 sequence.
+ $replace[] = array( Constants::UTF8_REPLACEMENT,
+ $base + $i + 1 - strlen( $sequence ),
+ strlen( $sequence ) );
+ break 2;
+ } else {
+ # Illegal tail byte; abandon the sequence.
+ $replace[] = array( Constants::UTF8_REPLACEMENT,
+ $base + $i - strlen( $sequence ),
+ strlen( $sequence ) );
+ # Back up and reprocess this byte; it may itself
+ # be a legal ASCII or UTF-8 sequence head.
+ --$i;
+ ++$len;
+ continue 2;
+ }
+ }
+ } while ( --$remaining );
+
+ if ( isset( $checkit[$head] ) ) {
+ # Do some more detailed validity checks, for
+ # invalid characters and illegal sequences.
+ if ( $head == "\xed" ) {
+ # 0xed is relatively frequent in Korean, which
+ # abuts the surrogate area, so we're doing
+ # this check separately to speed things up.
+
+ if ( $sequence >= Constants::UTF8_SURROGATE_FIRST ) {
+ # Surrogates are legal only in UTF-16 code.
+ # They are totally forbidden here in UTF-8
+ # utopia.
+ $replace[] = array( Constants::UTF8_REPLACEMENT,
+ $base + $i + 1 - strlen( $sequence ),
+ strlen( $sequence ) );
+ $head = '';
+ continue;
+ }
+ } else {
+ # Slower, but rarer checks...
+ $n = ord( $head );
+ if (
+ # "Overlong sequences" are those that are syntactically
+ # correct but use more UTF-8 bytes than are necessary to
+ # encode a character. Naïve string comparisons can be
+ # tricked into failing to see a match for an ASCII
+ # character, for instance, which can be a security hole
+ # if blacklist checks are being used.
+ ( $n < 0xc2 && $sequence <= Constants::UTF8_OVERLONG_A )
+ || ( $n == 0xe0 && $sequence <= Constants::UTF8_OVERLONG_B )
+ || ( $n == 0xf0 && $sequence <= Constants::UTF8_OVERLONG_C )
+
+ # U+FFFE and U+FFFF are explicitly forbidden in Unicode.
+ || ( $n == 0xef &&
+ ( $sequence == Constants::UTF8_FFFE )
+ || ( $sequence == Constants::UTF8_FFFF ) )
+
+ # Unicode has been limited to 21 bits; longer
+ # sequences are not allowed.
+ || ( $n >= 0xf0 && $sequence > Constants::UTF8_MAX )
+ ) {
+
+ $replace[] = array( Constants::UTF8_REPLACEMENT,
+ $base + $i + 1 - strlen( $sequence ),
+ strlen( $sequence ) );
+ $head = '';
+ continue;
+ }
+ }
+ }
+
+ if ( isset( $utfCheckOrCombining[$sequence] ) ) {
+ # If it's NO or MAYBE, we'll have to rip
+ # the string apart and put it back together.
+ # That's going to be mighty slow.
+ $looksNormal = false;
+ }
+
+ # The sequence is legal!
+ $head = '';
+ } elseif ( $c < "\x80" ) {
+ # ASCII byte.
+ $head = '';
+ } elseif ( $c < "\xc0" ) {
+ # Illegal tail bytes
+ if ( $head == '' ) {
+ # Out of the blue!
+ $replace[] = array( Constants::UTF8_REPLACEMENT, $base + $i, 1 );
+ } else {
+ # Don't add if we're continuing a broken sequence;
+ # we already put a replacement character when we looked
+ # at the broken sequence.
+ $replace[] = array( '', $base + $i, 1 );
+ }
+ } else {
+ # Miscellaneous freaks.
+ $replace[] = array( Constants::UTF8_REPLACEMENT, $base + $i, 1 );
+ $head = '';
+ }
+ }
+ $base += $chunk;
+ }
+ if ( count( $replace ) ) {
+ # There were illegal UTF-8 sequences we need to fix up.
+ $out = '';
+ $last = 0;
+ foreach ( $replace as $rep ) {
+ list( $replacement, $start, $length ) = $rep;
+ if ( $last < $start ) {
+ $out .= substr( $string, $last, $start - $last );
+ }
+ $out .= $replacement;
+ $last = $start + $length;
+ }
+ if ( $last < strlen( $string ) ) {
+ $out .= substr( $string, $last );
+ }
+ $string = $out;
+ }
+
+ return $looksNormal;
+ }
+
+ # These take a string and run the normalization on them, without
+ # checking for validity or any optimization etc. Input must be
+ # VALID UTF-8!
+ /**
+ * @param $string string
+ * @return string
+ * @private
+ */
+ static function NFC ( $string ) {
+ return self::fastCompose( self::NFD( $string ) );
+ }
+
+ /**
+ * @param $string string
+ * @return string
+ * @private
+ */
+ static function NFD ( $string ) {
+ self::loadData();
+
+ return self::fastCombiningSort(
+ self::fastDecompose( $string, self::$utfCanonicalDecomp ) );
+ }
+
+ /**
+ * @param $string string
+ * @return string
+ * @private
+ */
+ static function NFKC ( $string ) {
+ return self::fastCompose( self::NFKD( $string ) );
+ }
+
+ /**
+ * @param $string string
+ * @return string
+ * @private
+ */
+ static function NFKD ( $string ) {
+ if ( !isset( self::$utfCompatibilityDecomp ) ) {
+ require_once __DIR__ . '/UtfNormalDataK.inc';
+ }
+
+ return self::fastCombiningSort(
+ self::fastDecompose( $string, self::$utfCompatibilityDecomp ) );
+ }
+
+ /**
+ * Perform decomposition of a UTF-8 string into either D or KD form
+ * (depending on which decomposition map is passed to us).
+ * Input is assumed to be *valid* UTF-8. Invalid code will break.
+ * @private
+ * @param string $string valid UTF-8 string
+ * @param array $map hash of expanded decomposition map
+ * @return string a UTF-8 string decomposed, not yet normalized (needs sorting)
+ */
+ static function fastDecompose ( $string, $map ) {
+ self::loadData();
+ $len = strlen( $string );
+ $out = '';
+ for ( $i = 0; $i < $len; $i++ ) {
+ $c = $string[$i];
+ $n = ord( $c );
+ if ( $n < 0x80 ) {
+ # ASCII chars never decompose
+ # THEY ARE IMMORTAL
+ $out .= $c;
+ continue;
+ } elseif ( $n >= 0xf0 ) {
+ $c = substr( $string, $i, 4 );
+ $i += 3;
+ } elseif ( $n >= 0xe0 ) {
+ $c = substr( $string, $i, 3 );
+ $i += 2;
+ } elseif ( $n >= 0xc0 ) {
+ $c = substr( $string, $i, 2 );
+ $i++;
+ }
+ if ( isset( $map[$c] ) ) {
+ $out .= $map[$c];
+ continue;
+ } else {
+ if ( $c >= Constants::UTF8_HANGUL_FIRST && $c <= Constants::UTF8_HANGUL_LAST ) {
+ # Decompose a hangul syllable into jamo;
+ # hardcoded for three-byte UTF-8 sequence.
+ # A lookup table would be slightly faster,
+ # but adds a lot of memory & disk needs.
+ #
+ $index = ( ( ord( $c[0] ) & 0x0f ) << 12
+ | ( ord( $c[1] ) & 0x3f ) << 6
+ | ( ord( $c[2] ) & 0x3f ) )
+ - Constants::UNICODE_HANGUL_FIRST;
+ $l = intval( $index / Constants::UNICODE_HANGUL_NCOUNT );
+ $v = intval(
+ ( $index % Constants::UNICODE_HANGUL_NCOUNT )
+ / Constants::UNICODE_HANGUL_TCOUNT
+ );
+ $t = $index % Constants::UNICODE_HANGUL_TCOUNT;
+ $out .= "\xe1\x84" . chr( 0x80 + $l ) . "\xe1\x85" . chr( 0xa1 + $v );
+ if ( $t >= 25 ) {
+ $out .= "\xe1\x87" . chr( 0x80 + $t - 25 );
+ } elseif ( $t ) {
+ $out .= "\xe1\x86" . chr( 0xa7 + $t );
+ }
+ continue;
+ }
+ }
+ $out .= $c;
+ }
+
+ return $out;
+ }
+
+ /**
+ * Sorts combining characters into canonical order. This is the
+ * final step in creating decomposed normal forms D and KD.
+ * @private
+ * @param string $string a valid, decomposed UTF-8 string. Input is not validated.
+ * @return string a UTF-8 string with combining characters sorted in canonical order
+ */
+ static function fastCombiningSort ( $string ) {
+ self::loadData();
+ $len = strlen( $string );
+ $out = '';
+ $combiners = array();
+ $lastClass = -1;
+ for ( $i = 0; $i < $len; $i++ ) {
+ $c = $string[$i];
+ $n = ord( $c );
+ if ( $n >= 0x80 ) {
+ if ( $n >= 0xf0 ) {
+ $c = substr( $string, $i, 4 );
+ $i += 3;
+ } elseif ( $n >= 0xe0 ) {
+ $c = substr( $string, $i, 3 );
+ $i += 2;
+ } elseif ( $n >= 0xc0 ) {
+ $c = substr( $string, $i, 2 );
+ $i++;
+ }
+ if ( isset( self::$utfCombiningClass[$c] ) ) {
+ $lastClass = self::$utfCombiningClass[$c];
+ if ( isset( $combiners[$lastClass] ) ) {
+ $combiners[$lastClass] .= $c;
+ } else {
+ $combiners[$lastClass] = $c;
+ }
+ continue;
+ }
+ }
+ if ( $lastClass ) {
+ ksort( $combiners );
+ $out .= implode( '', $combiners );
+ $combiners = array();
+ }
+ $out .= $c;
+ $lastClass = 0;
+ }
+ if ( $lastClass ) {
+ ksort( $combiners );
+ $out .= implode( '', $combiners );
+ }
+
+ return $out;
+ }
+
+ /**
+ * Produces canonically composed sequences, i.e. normal form C or KC.
+ *
+ * @private
+ * @param string $string a valid UTF-8 string in sorted normal form D or KD.
+ * Input is not validated.
+ * @return string a UTF-8 string with canonical precomposed characters used
+ * where possible.
+ */
+ static function fastCompose ( $string ) {
+ self::loadData();
+ $len = strlen( $string );
+ $out = '';
+ $lastClass = -1;
+ $lastHangul = 0;
+ $startChar = '';
+ $combining = '';
+ $x1 = ord( substr( Constants::UTF8_HANGUL_VBASE, 0, 1 ) );
+ $x2 = ord( substr( Constants::UTF8_HANGUL_TEND, 0, 1 ) );
+ for ( $i = 0; $i < $len; $i++ ) {
+ $c = $string[$i];
+ $n = ord( $c );
+ if ( $n < 0x80 ) {
+ # No combining characters here...
+ $out .= $startChar;
+ $out .= $combining;
+ $startChar = $c;
+ $combining = '';
+ $lastClass = 0;
+ continue;
+ } elseif ( $n >= 0xf0 ) {
+ $c = substr( $string, $i, 4 );
+ $i += 3;
+ } elseif ( $n >= 0xe0 ) {
+ $c = substr( $string, $i, 3 );
+ $i += 2;
+ } elseif ( $n >= 0xc0 ) {
+ $c = substr( $string, $i, 2 );
+ $i++;
+ }
+ $pair = $startChar . $c;
+ if ( $n > 0x80 ) {
+ if ( isset( self::$utfCombiningClass[$c] ) ) {
+ # A combining char; see what we can do with it
+ $class = self::$utfCombiningClass[$c];
+ if ( !empty( $startChar ) &&
+ $lastClass < $class &&
+ $class > 0 &&
+ isset( self::$utfCanonicalComp[$pair] )
+ ) {
+ $startChar = self::$utfCanonicalComp[$pair];
+ $class = 0;
+ } else {
+ $combining .= $c;
+ }
+ $lastClass = $class;
+ $lastHangul = 0;
+ continue;
+ }
+ }
+ # New start char
+ if ( $lastClass == 0 ) {
+ if ( isset( self::$utfCanonicalComp[$pair] ) ) {
+ $startChar = self::$utfCanonicalComp[$pair];
+ $lastHangul = 0;
+ continue;
+ }
+ if ( $n >= $x1 && $n <= $x2 ) {
+ # WARNING: Hangul code is painfully slow.
+ # I apologize for this ugly, ugly code; however
+ # performance is even more teh suck if we call
+ # out to nice clean functions. Lookup tables are
+ # marginally faster, but require a lot of space.
+ #
+ if ( $c >= Constants::UTF8_HANGUL_VBASE &&
+ $c <= Constants::UTF8_HANGUL_VEND &&
+ $startChar >= Constants::UTF8_HANGUL_LBASE &&
+ $startChar <= Constants::UTF8_HANGUL_LEND
+ ) {
+ #
+ #$lIndex = utf8ToCodepoint( $startChar ) - UNICODE_HANGUL_LBASE;
+ #$vIndex = utf8ToCodepoint( $c ) - UNICODE_HANGUL_VBASE;
+ $lIndex = ord( $startChar[2] ) - 0x80;
+ $vIndex = ord( $c[2] ) - 0xa1;
+
+ $hangulPoint = Constants::UNICODE_HANGUL_FIRST +
+ Constants::UNICODE_HANGUL_TCOUNT *
+ ( Constants::UNICODE_HANGUL_VCOUNT * $lIndex + $vIndex );
+
+ # Hardcode the limited-range UTF-8 conversion:
+ $startChar = chr( $hangulPoint >> 12 & 0x0f | 0xe0 ) .
+ chr( $hangulPoint >> 6 & 0x3f | 0x80 ) .
+ chr( $hangulPoint & 0x3f | 0x80 );
+ $lastHangul = 0;
+ continue;
+ } elseif ( $c >= Constants::UTF8_HANGUL_TBASE &&
+ $c <= Constants::UTF8_HANGUL_TEND &&
+ $startChar >= Constants::UTF8_HANGUL_FIRST &&
+ $startChar <= Constants::UTF8_HANGUL_LAST &&
+ !$lastHangul
+ ) {
+ # $tIndex = utf8ToCodepoint( $c ) - UNICODE_HANGUL_TBASE;
+ $tIndex = ord( $c[2] ) - 0xa7;
+ if ( $tIndex < 0 ) $tIndex = ord( $c[2] ) - 0x80 + ( 0x11c0 - 0x11a7 );
+
+ # Increment the code point by $tIndex, without
+ # the function overhead of decoding and recoding UTF-8
+ #
+ $tail = ord( $startChar[2] ) + $tIndex;
+ if ( $tail > 0xbf ) {
+ $tail -= 0x40;
+ $mid = ord( $startChar[1] ) + 1;
+ if ( $mid > 0xbf ) {
+ $startChar[0] = chr( ord( $startChar[0] ) + 1 );
+ $mid -= 0x40;
+ }
+ $startChar[1] = chr( $mid );
+ }
+ $startChar[2] = chr( $tail );
+
+ # If there's another jamo char after this, *don't* try to merge it.
+ $lastHangul = 1;
+ continue;
+ }
+ }
+ }
+ $out .= $startChar;
+ $out .= $combining;
+ $startChar = $c;
+ $combining = '';
+ $lastClass = 0;
+ $lastHangul = 0;
+ }
+ $out .= $startChar . $combining;
+
+ return $out;
+ }
+
+ /**
+ * This is just used for the benchmark, comparing how long it takes to
+ * interate through a string without really doing anything of substance.
+ * @param $string string
+ * @return string
+ */
+ static function placebo ( $string ) {
+ $len = strlen( $string );
+ $out = '';
+ for ( $i = 0; $i < $len; $i++ ) {
+ $out .= $string[$i];
+ }
+
+ return $out;
+ }
+
+ /**
+ * Function to replace some characters that we don't want
+ * but most of the native normalize functions keep.
+ *
+ * @param string $string The string
+ * @return String String with the character codes replaced.
+ */
+ private static function replaceForNativeNormalize ( $string ) {
+ $string = preg_replace(
+ '/[\x00-\x08\x0b\x0c\x0e-\x1f]/',
+ Constants::UTF8_REPLACEMENT,
+ $string );
+ $string = str_replace( Constants::UTF8_FFFE, Constants::UTF8_REPLACEMENT, $string );
+ $string = str_replace( Constants::UTF8_FFFF, Constants::UTF8_REPLACEMENT, $string );
+
+ return $string;
+ }
+}
diff --git a/vendor/zordius/lightncandy/.scrutinizer.yml b/vendor/zordius/lightncandy/.scrutinizer.yml
new file mode 100644
index 00000000..471470fe
--- /dev/null
+++ b/vendor/zordius/lightncandy/.scrutinizer.yml
@@ -0,0 +1,95 @@
+filter:
+ excluded_paths: [tests/*, build/*]
+
+checks:
+ php:
+ code_rating: true
+ duplication: true
+ variable_existence: true
+ useless_calls: true
+ use_statement_alias_conflict: true
+ unused_variables: true
+ unused_properties: true
+ unused_parameters: true
+ unused_methods: true
+ unreachable_code: true
+ sql_injection_vulnerabilities: true
+ security_vulnerabilities: true
+ precedence_mistakes: true
+ precedence_in_conditions: true
+ parameter_non_unique: true
+ no_property_on_interface: true
+ no_non_implemented_abstract_methods: true
+ deprecated_code_usage: true
+ closure_use_not_conflicting: true
+ closure_use_modifiable: true
+ avoid_useless_overridden_methods: true
+ avoid_conflicting_incrementers: true
+ assignment_of_null_return: true
+ verify_property_names: true
+ verify_argument_usable_as_reference: true
+ use_self_instead_of_fqcn: true
+ uppercase_constants: true
+ too_many_arguments: true
+ switch_fallthrough_commented: true
+ spacing_of_function_arguments: true
+ spacing_around_non_conditional_operators: true
+ spacing_around_conditional_operators: true
+ space_after_cast: true
+ single_namespace_per_use: true
+ simplify_boolean_return: true
+ side_effects_or_types: true
+ scope_indentation:
+ spaces_per_level: '4'
+ return_doc_comments: true
+ return_doc_comment_if_not_inferrable: true
+ require_scope_for_properties: true
+ require_scope_for_methods: true
+ require_php_tag_first: true
+ require_closing_tag: true
+ prefer_while_loop_over_for_loop: true
+ prefer_unix_line_ending: true
+ prefer_sapi_constant: true
+ parameter_doc_comments: true
+ param_doc_comment_if_not_inferrable: true
+ more_specific_types_in_doc_comments: true
+ overriding_private_members: true
+ optional_parameters_at_the_end: true
+ non_commented_empty_catch_block: true
+ no_unnecessary_if: true
+ no_unnecessary_function_call_in_for_loop: true
+ no_unnecessary_final_modifier: true
+ lowercase_php_keywords: true
+ lowercase_basic_constants: true
+ avoid_unnecessary_concatenation: true
+ avoid_fixme_comments: true
+ avoid_duplicate_types: true
+ avoid_corrupting_byteorder_marks: true
+ argument_type_checks: true
+ avoid_superglobals: true
+ avoid_perl_style_comments: true
+ avoid_multiple_statements_on_same_line: true
+ avoid_length_functions_in_loops: true
+ missing_arguments: true
+ method_calls_on_non_object: true
+ no_mixed_inline_html: true
+ no_goto: true
+ no_exit: true
+ no_eval: true
+ no_error_suppression: true
+ no_empty_statements: true
+ no_elseif_statements: true
+ no_duplicate_arguments: true
+ no_debug_code: true
+
+tools:
+ external_code_coverage: true
+ php_code_coverage: true
+ php_cs_fixer: true
+ php_code_sniffer: true
+ php_cpd: true
+ php_hhvm: true
+ php_mess_detector: true
+ php_analyzer: true
+ php_pdepend: true
+ sensiolabs_security_checker: true
diff --git a/vendor/zordius/lightncandy/CONTRIBUTING.md b/vendor/zordius/lightncandy/CONTRIBUTING.md
new file mode 100644
index 00000000..0d7aa65d
--- /dev/null
+++ b/vendor/zordius/lightncandy/CONTRIBUTING.md
@@ -0,0 +1,18 @@
+# How to Contribute
+
+## Reporting Issues
+
+Submit your issue here: https://github.com/zordius/lightncandy/issues/new
+
+Proper sample input data with template is prefered. If you can provide the LightnCandy version (or commit hash) and some sample code of your setup/helpers it will be better.
+
+## Pull Requests
+
+Pull request is another good way. Before you submit your patch, please ensure you run full tests:
+
+```sh
+git submodule init
+git submodule update
+build/runphp build/gen_test.php
+phpunit
+```
diff --git a/vendor/zordius/lightncandy/HISTORY.md b/vendor/zordius/lightncandy/HISTORY.md
new file mode 100644
index 00000000..577f953d
--- /dev/null
+++ b/vendor/zordius/lightncandy/HISTORY.md
@@ -0,0 +1,183 @@
+HISTORY
+=======
+
+master current trunk
+ * align with handlebars.js master
+
+v0.17 https://github.com/zordius/lightncandy/tree/v0.17
+ * 7bcce4c1a7 support {{@last}} for {{#each}} on both object and array.
+ * b0c44c3b40 remove ending \n in lightncandy.php
+ * e130875d5a support single quoted string input: {{foo 'bar'}}.
+ * c603aa39d8 support `renderex` to extend anything in render function.
+ * f063e5302c now render function debug constants works well in standalone mode.
+ * 53f6a6816d fix parsing bug when there is a `=` inside single quoted string.
+ * 2f16c0c393 now really autoload when installed with composer.
+ * c4da1f576c supports {{^myHelper}}.
+
+v0.17 https://github.com/zordius/lightncandy/tree/v0.17
+ * 3b48a0acf7 fix parsing bug when FLAG_NOESCAPE enabled
+ * 5c774b1b08 fix hbhelpers response error with options['fn'] when FLAG_BESTPERFORMANCE enabled
+ * c60fe70bdb fix hbhelpers response error with options['inverse'] when FLAG_BESTPERFORMANCE enabled
+ * e19b3e3426 provide options['root'] and options['_parent'] to hbhelpers
+ * d8a288e83b refine variable parsing logic to support {{@../index}}, {{@../key}}, etc.
+
+v0.16 https://github.com/zordius/lightncandy/tree/v0.16
+ * align with handlebars.js 2.0.0
+ * 4f036aff62 better error message for named arguments.
+ * 0b462a387b support {{#with var}} ... {{else}} ... {{/with}}.
+ * 4ca624f651 fix 1 ANSI code error.
+ * 01ea3e9f42 support instances with PHP __call magic funciton.
+ * 38059036a7 support {{#foo}} or {{#each foo}} on PHP Traversable instance.
+ * 366f5ec0ac add FLAG_MUSTACHESP and FLAG_MUSTACHEPAIN into FLAG_HANDLEBARS and FLAG_HANDLEBARSJS now.
+ * b61d7b4a81 align with handlebars.js standalone tags behavior.
+ * b211e1742e now render false as 'false'.
+ * 655a2485be fix bug for {{helper "==="}}
+ * bb58669162 support FLAG_NOESCAPE
+
+v0.15 https://github.com/zordius/lightncandy/tree/v0.15
+ * align with handlebars.js 2.0.0
+ * 4c750806e8 fix for \ in template
+ * 12ab6626d6 support escape. \{{foo}} will be rendered as is. ( handlebars spec , require FLAG_SLASH )
+ * 876bd44d9c escape &#x60; to &amp;#x60; ( require FLAG_JSQUOTE )
+ * f1f388ed79 support {{^}} as {{else}} ( require FLAG_ELSE )
+ * d5e17204b6 support {{#each}} == {{#each .}} now.
+ * 742126b440 fix {{>foo/bar}} partial not found bug.
+ * d62c261ff9 support numbers as helper input {{helper 0.1 -1.2}}
+ * d40c76b84f support escape in string arguments {{helper "test \" double quote"}}
+ * ecb57a2348 fix for missing partial in partial bug.
+ * 1adad5dbfa fix {{#with}} error when FLAG_WITH not used.
+ * ffd5e35c2d fix error when rendering array value as {{.}} without FLAG_JSOBJECT.
+ * bd4987adbd support changing context on partial {{>foo bar}} ( require FLAG_RUNTIMEPARTIAL )
+ * f5decaa7e3 support name sarguments on partial {{>foo bar name=tee}} . fix {{..}} bug.
+ * c20bb36457 support `partials` in options.
+ * e8779dbe8c change default `basedir` hehavior, stop partial files lookup when do not prodive `basedir` in options.
+ * c4e3401fe4 fix {{>"test"}} or {{>[test]}} or {{>1234}} bug.
+ * e59f62ea9b fix seciton behavior when input is object, and add one new flag: FLAG_MUSTACHESEC.
+ * 80eaf8e007 use static::method not self::method for subclass.
+ * 0bad5c8f20 fix usedFeature generation bugs
+
+v0.14 https://github.com/zordius/lightncandy/tree/v0.14
+ * align with handlebars.js 2.0.0-alpha.4
+ * fa6225f278 support boolen value in named arguments for cusotm helper
+ * 160743e1c8 better error message when unmatch {{/foo}} tag detected
+ * d9a9416907 support {{&foo}}
+ * 8797485cfa fix {{^foo}} logic when foo is empty list
+ * 523b1373c4 fix handlebars custom helper interface
+ * a744a2d522 fix bad syntax when FLAG_RENDER_DEBUG + helpers
+ * 0044f7bd10 change FLAG_THIS behavoir
+ * b5b0739b68 support recursive context lookup now ( mustache spec , require FLAG_MUSTACHELOOKUP )
+ * 096c241fce support standalone tag detection now ( mustache spec , require FLAG_MUSTACHESP )
+ * cea46c9a67 support {{=<% %>=}} to set delimiter
+ * 131696af11 support subexpression {{helper (helper2 foo) bar}}
+ * 5184d41be6 support runtime/recursive partial ( require FLAG_RUNTIMEPARTIAL )
+ * 6408917f76 support partial indent ( mustache spec , require FLAG_MUSTACHEPAIN )
+
+v0.13 https://github.com/zordius/lightncandy/tree/v0.13
+ * align with handlebars.js 2.0.0-alpha.4
+ * e5a8fe3833 fix issue #46 ( error with {{this.foo.bar}} )
+ * ea131512f9 fix issue #44 ( error with some helper inline function PHP code syntax )
+ * 522591a0c6 fix issue #49 ( error with some helper user function PHP code syntax )
+ * c4f7e1eaac support {{foo.bar}} lookup on instance foo then property/method bar ( flagd FLAG_PROPERTY or FLAG_METHOD required )
+ * 0f4c0daa4b stop simulate Javascript output for array when pass input to custom helpers
+ * 22d07e5f0f BIG CHANGE of custom helper interface
+
+v0.12 https://github.com/zordius/lightncandy/tree/v0.12
+ * align with handlebars.js 2.0.0-alpha.2
+ * 64db34cf65 support {{@first}} and {{@last}}
+ * bfa1fbef97 add new flag FLAG_SPVARS
+ * 10a4623dc1 remove json schema support
+ * 240d9fa290 only export used LCRun2 functions when compile() with FLAG_STANDALONE now
+ * 3fa897c98c rename LCRun2 to LCRun3 for interface changed, old none standalone templates will error with newer version.
+ * e0838c7418 now can output debug template map with ANSI color
+ * 80dbeab63d fix php warning when compile with custom helper or block custom helper
+ * 8ce6268b64 support Handlebars.js style custom helper
+
+v0.11 https://github.com/zordius/lightncandy/tree/v0.11
+ * align with handlebars.js 2.0.0-alpha.2
+ * a275d52c97 use php array, remove val().
+ * 8834914c2a only export used custom helper into render function now
+ * eb6d82d871 refine option flag consts
+ * fc437295ed refine comments for phpdoc
+ * fbf116c3e2 fix for tailing ; after helper functions
+ * f47a2d5014 fix for wrong param when new Exception
+ * 94e71ebcbd add isset() check for input value
+ * a826b8a1ab support {{else}} in {{#each}} now
+ * 25dac11bb7 support {{!-- comments --}} now (this extension allow }} apperas in the comments)
+ * e142b6e116 support {{@root}} or {{@root.foo.bar}} now
+ * 58c8d84aa2 custom helper can return extra flag to change html encoded behavior now
+
+v0.10 https://github.com/zordius/lightncandy/tree/v0.10
+ * align with handlebars.js 2.0.0-alpha.1
+ * 4c9f681080 file name changed: lightncandy.inc => lightncandy.php
+ * e3de01081c some minor fix for json schema
+ * 1feec458c7 new variable handling logic, save variable name parsing time when render() . rendering performance improved 10~30%!
+ * 3fa897c98c rename LCRun to LCRun2 for interface changed, old none standalone templates will error with newer version.
+ * 43a6d33717 fix for {{../}} php warning message
+ * 9189ebc1e4 now auto push documents from Travis CI
+ * e077d0b631 support named arguments for custom helpers {{helper name=value}}
+ * 2331b6fe55 support block custom helpers
+ * 4fedaa25f7 support number value as named arguments
+ * 6a91ab93d2 fix for default options and php warnings
+ * fc157fde62 fix for doblue quoted arguments (issue #15)
+
+v0.9 https://github.com/zordius/lightncandy/tree/v0.9
+ * align with handlebars.js 1.3
+ * a55f2dd067 support both {{@index}} and {{@key}} when {{#each an_object}}
+ * e59f931ea7 add FLAG_JSQUOTE support
+ * 92b3cf58af report more than 1 error when compile()
+ * 93cc121bcf test for wrong variable name format in test/error.php
+ * 41c1b431b4 support advanced variable naming {{foo.[bar].10}} now
+ * 15ce1a00a8 add FLAG_EXTHELPER option
+ * f51337bde2 support space control {{~sometag}} or {{sometag~}}
+ * fe3d67802e add FLAG_SPACECTL option
+ * 920fbb3039 support custom helper
+ * 07ae71a1bf migrate into Travis CI
+ * ddd3335ff6 support "some string" argument
+ * 20f6c888d7 html encode after custom helper executed
+ * 10a2f45fdc add test generator
+ * ccd1d3ddc2 migrate to Scrutinizer , change file name LightnCandy.inc to LightnCandy.php
+ * 5ac8ad8d04 now is a Composer package
+
+v0.8 https://github.com/zordius/lightncandy/tree/v0.8
+ * align with handlebars.js 1.0.12
+ * aaec049 fix partial in partial not works bug
+ * 52706cc fix for {{#var}} and {{^var}} , now when var === 0 means true
+ * 4f7f816 support {{@key}} and {{@index}} in {{#each var}}
+ * 63aef2a prevent array_diff_key() PHP warning when {{#each}} on none array value
+ * 10f3d73 add more is_array() check when {{#each}} and {{#var}}
+ * 367247b fix {{#if}} and {{#unless}} when value is an empty array
+ * c76c0bb returns null if var is not exist in a template [contributed by dtelyukh@github.com]
+ * d18bb6d add FLAG_ECHO support
+ * aec2b2b fix {{#if}} and {{#unless}} when value is an empty string
+ * 8924604 fix variable output when false in an array
+ * e82c324 fix for ifv and ifvar logic difference
+ * 1e38e47 better logic on var name checking. now support {{0}} in the loop, but it is not handlebars.js standard
+
+v0.7 https://github.com/zordius/lightncandy/tree/v0.7
+ * add HISTORY.md
+ * 777304c change compile format to include in val, isec, ifvar
+ * 55de127 support {{../}} in {{#each}}
+ * 57e90af fix parent levels detection bug
+ * 96bb4d7 fix bugs for {{#.}} and {{#this}}
+ * f4217d1 add ifv and unl 2 new methods for LCRun
+ * 3f1014c fix {{#this}} and {{#.}} bug when used with {{../var}}
+ * cbf0b28 fix {{#if}} logic error when using {{../}}
+ * 2b20ef8 fix {{#with}} + {{../}} bug
+ * 540cd44 now support FLAG_STANDALONE
+ * 67ac5ff support {{>partial}}
+ * 98c7bb1 detect unclosed token now
+
+v0.6 https://github.com/zordius/lightncandy/tree/v0.6
+ * align with handlebarsjs 1.0.11
+ * 45ac3b6 fix #with bug when var is false
+ * 1a46c2c minor #with logic fix. update document
+ * fdc753b fix #each and section logic for 018-hb-withwith-006
+ * e6cc95a add FLAG_PARENT, detect template error when scan()
+ * 1980691 make new LCRun::val() method to normal path.val logic
+ * 110d24f {{#if path.var}} bug fixed
+ * d6ae2e6 fix {{#with path.val}} when input value is null
+ * 71cf074 fix for 020-hb-doteach testcase
+
+v0.5 https://github.com/zordius/lightncandy/tree/v0.5
+ * 955aadf fix #each bug when input is a hash
+ * final version for following handlebarsjs 1.0.7
diff --git a/vendor/zordius/lightncandy/LICENSE.txt b/vendor/zordius/lightncandy/LICENSE.txt
new file mode 100644
index 00000000..3df560d4
--- /dev/null
+++ b/vendor/zordius/lightncandy/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+terms:
+MIT License
+Copyright (c) 2013, 2014 Yahoo! Inc. All Rights Reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/zordius/lightncandy/README.md b/vendor/zordius/lightncandy/README.md
new file mode 100644
index 00000000..2afd6b9c
--- /dev/null
+++ b/vendor/zordius/lightncandy/README.md
@@ -0,0 +1,670 @@
+LightnCandy
+===========
+
+An extremely fast PHP implementation of handlebars ( http://handlebarsjs.com/ ) and mustache ( http://mustache.github.io/ ).
+
+Travis CI status: [![Unit testing](https://travis-ci.org/zordius/lightncandy.svg?branch=master)](https://travis-ci.org/zordius/lightncandy) [![Regression testing](https://travis-ci.org/zordius/HandlebarsTest.svg?branch=master)](https://travis-ci.org/zordius/HandlebarsTest)
+
+Scrutinizer CI status: [![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/zordius/lightncandy.svg)](https://scrutinizer-ci.com/g/zordius/lightncandy/)
+
+Package on packagist: [![Latest Stable Version](https://poser.pugx.org/zordius/lightncandy/v/stable.svg)](https://packagist.org/packages/zordius/lightncandy) [![License](https://poser.pugx.org/zordius/lightncandy/license.svg)](https://github.com/zordius/lightncandy/blob/master/LICENSE.txt) [![Total Downloads](https://poser.pugx.org/zordius/lightncandy/downloads.svg)](https://packagist.org/packages/zordius/lightncandy) [![HHVM Status](http://hhvm.h4cc.de/badge/zordius/lightncandy.svg)](http://hhvm.h4cc.de/package/zordius/lightncandy)
+
+Features
+--------
+
+* Logicless template: mustache ( http://mustache.github.com/ ) or handlebars ( http://handlebarsjs.com/ ) .
+* Compile template to **pure PHP** code. Examples:
+ * <a href="https://github.com/zordius/HandlebarsTest/blob/master/fixture/001-simple-vars.tmpl">Template A</a> generated <a href="https://github.com/zordius/HandlebarsTest/blob/master/fixture/001-simple-vars.php">PHP A</a>
+ * <a href="https://github.com/zordius/HandlebarsTest/blob/master/fixture/016-hb-eachthis.tmpl">Template B</a> generated <a href="https://github.com/zordius/HandlebarsTest/blob/master/fixture/016-hb-eachthis.php">PHP B</a>
+* **FAST!**
+ * Runs 4~6 times faster than <a href="https://github.com/bobthecow/mustache.php">mustache.php</a>.
+ * Runs 4~10 times faster than <a href="https://github.com/dingram/mustache-php">mustache-php</a>.
+ * Runs 10~30 times faster than <a href="https://github.com/XaminProject/handlebars.php">handlebars.php</a>.
+ * Detail performance test reports can be found <a href="https://github.com/zordius/HandlebarsTest">here</a>, go http://zordius.github.io/HandlebarsTest/ to see charts.
+* **SMALL!** single PHP file, only 110K!
+* **ROBUST!**
+ * 100% support <a href="https://github.com/mustache/spec">mustache spec v1.1.2</a> (without lambda module)
+ * Supports almost all <a href="https://github.com/kasperisager/handlebars-spec">handlebars.js spec</a>
+ * Output <a href="https://github.com/zordius/HandlebarsTest/blob/master/FEATURES.md">SAME</a> with <a href="https://github.com/wycats/handlebars.js">handlebars.js</a>
+* **FLEXIBLE!**
+ * Lot of <a href="#compile-options">options</a> to change features and behaviors.
+* Context generation
+ * Analyze used features from your template (use `LightnCandy::getContext()` to get it) .
+* Debug
+ * <a href="#template-debugging">Generate debug version template</a>
+ * Find out missing data when rendering template.
+ * Generate visually debug template.
+* Standalone Template
+ * The compiled PHP code can run without any PHP library. You do not need to include LightnCandy when execute rendering function.
+
+Installation
+------------
+
+Use Composer ( https://getcomposer.org/ ) to install LightnCandy:
+
+```
+composer require zordius/lightncandy:dev-master
+```
+
+Or, download LightnCandy from github:
+
+```
+curl -LO https://github.com/zordius/lightncandy/raw/master/src/lightncandy.php
+```
+
+LightnCandy requirement: PHP 5.3.0+ .
+
+**UPGRADE NOTICE**
+
+* Please check <a href="HISTORY.md">HISTORY.md</a> for versions history.
+* Please check <a href="UPGRADE.md">UPGRADE.md</a> for upgrade notice.
+
+Usage
+-----
+```php
+// THREE STEPS TO USE LIGHTNCANDY
+// Step 1. require the lib, compile template, and get the PHP code as string
+require('src/lightncandy.php');
+
+$template = "Welcome {{name}} , You win \${{value}} dollars!!\n";
+$phpStr = LightnCandy::compile($template); // compiled PHP code in $phpStr
+
+// Step 2A. (Usage 1) use LightnCandy::prepare to get rendering function
+// DEPRECATED , it may require PHP setting allow_url_fopen=1 ,
+// and allow_url_fopen=1 is not secure .
+// When allow_url_fopen = 0, prepare() will create tmp file then include it,
+// you will need to add your tmp directory into open_basedir.
+// YOU MAY NEED TO CHANGE PHP SETTING BY THIS WAY
+$renderer = LightnCandy::prepare($phpStr);
+
+
+// Step 2B. (Usage 2) Store your render function in a file
+// You decide your compiled template file path and name, save it.
+// You can load your render function by include() later.
+// RECOMMENDED WAY
+file_put_contents($php_inc, $phpStr);
+$renderer = include($php_inc);
+
+
+// Step 3. run native PHP render function any time
+echo "Template is:\n$template\n\n";
+echo $renderer(Array('name' => 'John', 'value' => 10000));
+echo $renderer(Array('name' => 'Peter', 'value' => 1000));
+```
+
+The output will be:
+
+```
+Template is:
+Welcome {{name}} , You win ${{value}} dollars!!
+
+
+Welcome John , You win $10000 dollars!!
+Welcome Peter , You win $1000 dollars!!
+```
+
+Compile Options
+---------------
+
+You can apply more options by running `LightnCandy::compile($template, $options)`:
+
+```php
+LightnCandy::compile($template, Array(
+ 'flags' => LightnCandy::FLAG_ERROR_LOG | LightnCandy::FLAG_STANDALONE
+));
+```
+
+Default is to compile the template as PHP, which can be run as fast as possible (flags = `FLAG_BESTPERFORMANCE`).
+
+* `FLAG_ERROR_LOG` : error_log() when found any template error
+* `FLAG_ERROR_EXCEPTION` : throw exception when found any template error
+* `FLAG_ERROR_SKIPPARTIAL` : skip 'partial not found' error/exception. Use this to align with mustache specification.
+* `FLAG_NOESCAPE` : do not do any HTML escape on {{var}}.
+* `FLAG_STANDALONE` : generate stand-alone PHP codes, which can be execute without including LightnCandy.php. The compiled PHP code will contain scoped user function, somehow larger. And, the performance of the template will slow 1 ~ 10%.
+* `FLAG_JSTRUE` : generate 'true' or 'false' when value is true or false (JavaScript behavior). Otherwise, true/false will generate ''.
+* `FLAG_JSOBJECT` : generate '[object Object]' for associated array, generate ',' separated values for array (JavaScript behavior). Otherwise, all PHP array will generate '' or 'Array'.
+* `FLAG_THIS` : resolve `{{this}}` as `{{.}}` in template. Otherwise, `{{this}}` will be resolved as normal variable.
+* `FLAG_WITH` : support `{{#with var}}` in template. Otherwise, `{{#with var}}` will cause template error.
+* `FLAG_PARENT` : support `{{../var}}` in template. Otherwise, `{{../var}}` will cause template error.
+* `FLAG_JSQUOTE` : escape `'` to `&#x27;` , <code>&#x60;</code> to `&#x60;` . Otherwise, `'` will be escaped to `&#039;` , <code>&#x60;</code> will not be touched.
+* `FLAG_ADVARNAME` : support `{{foo.[0].[#te#st].bar}}` style advanced variable naming in template. Use this flag if you wanna use `"some string"` or `(subexpresssion)` as argument.
+* `FLAG_NAMEDARG` : support named arguments for custom helper `{{helper name1=val1 nam2=val2 ...}}`.
+* `FLAG_EXTHELPER` : do not including custom helper codes into compiled PHP codes. This reduces the code size, but you need to take care of your helper functions when rendering. If you forget to include required functions when execute rendering function, `undefined function` runtime error will be triggered. NOTE: Anonymous functions will always be placed into generated codes.
+* `FLAG_RUNTIMEPARTIAL` : compile partial as runtime function, This enables recursive partials or context change for partials.
+* `FLAG_SLASH` : Skip a delimiter when it behind `\` .
+* `FLAG_ELSE` : support `{{else}}` or `{{^}}` as handlebars specification. Otherwise, `{{else}}` will be resolved as normal variable , and {{^}} will cause template error.
+* `FLAG_PROPERTY` : support object instance attribute access.
+* `FLAG_METHOD` : support object instance method access.
+* `FLAG_INSTANCE` : same with `FLAG_PROPERTY` + `FLAG_METHOD`
+* `FLAG_SPACECTL` : support space control `{{~ }}` or `{{ ~}}` in template. Otherwise, `{{~ }}` or `{{ ~}}` will cause template error.
+* `FLAG_SPVARS` : support special variables include @root, @index, @key, @first, @last. Otherwise, compile these variable names with default parsing logic.
+* `FLAG_JS` : simulate all JavaScript string conversion behavior, same with `FLAG_JSTRUE` + `FLAG_JSOBJECT`.
+* `FLAG_HANDLEBARS` : support all handlebars extensions (which mustache do not supports) , same with `FLAG_THIS` + `FLAG_WITH` + `FLAG_PARENT` + `FLAG_JSQUOTE` + `FLAG_ADVARNAME` + `FLAG_NAMEDARG` + `FLAG_SLASH` + `FLAG_ELSE` + `FLAG_MUSTACHESP` + `FLAG_MUSTACHEPAIN`.
+* `FLAG_HANDLEBARSJS` : align with handlebars.js behaviors, same with `FLAG_JS` + `FLAG_HANDLEBARS`.
+* `FLAG_MUSTACHESP` : align line change and spacing behaviors with mustache specification.
+* `FLAG_MUSTACHELOOKUP` : align recursive lookup up behaviors with mustache specification.
+* `FLAG_MUSTACHEPAIN` : align partial indent behavior with mustache specification.
+* `FLAG_MUSTACHESEC` : align section `{{#foo}}` context behavior with mustache specification.
+* `FLAG_MUSTACHE` : support all mustache specification, same with `FLAG_ERROR_SKIPPARTIAL` + `FLAG_MUSTACHESP` + `FLAG_MUSTACHELOOKUP` + `FLAG_MUSTACHEPAIN` + `FLAG_MUSTACHESEC`.
+* `FLAG_ECHO` : compile to `echo 'a', $b, 'c';` to improve performance. This will slow down rendering when the template and data are simple, but will improve 1% ~ 7% when the data is big and looping in the template.
+* `FLAG_BESTPERFORMANCE` : same with `FLAG_ECHO` now. This flag may be changed base on performance testing result in the future.
+* `FLAG_RENDER_DEBUG` : generate debug template to show error when rendering. With this flag, the performance of rendering may be slowed.
+
+Partial Support
+---------------
+
+LightnCandy supports partial when compile time. You can provide partials by `partials` option when `compile()`:
+
+```php
+LightnCandy::compile($template, Array(
+ 'partials' => Array(
+ 'name' => 'template: {{name}}',
+ ),
+));
+```
+
+You can also provide partials by files. When `compile()`, LightnCandy will search template files from `basedir` in the option if you provided one or more. Default template file name is `*.tmpl`, you can change or add more template file extensions with `fileext` option.
+
+```php
+// Loading partial from file system only when valid directory is provided by basedir option
+// '.' means getpwd()
+LightnCandy::compile($template, Array(
+ 'basedir' => '.'
+));
+
+// Multiple basedir and fileext are supported
+LightnCandy::compile($template, Array(
+ 'flags' => LightnCandy::FLAG_STANDALONE,
+ 'basedir' => Array(
+ '/usr/local/share/handlebars/templates',
+ '/usr/local/share/my_project/templates',
+ '/usr/local/share/my_project/partials',
+ ),
+ 'fileext' => Array(
+ '.tmpl',
+ '.mustache',
+ '.handlebars',
+ )
+));
+```
+
+With this setting, when you include a partial by `{{> partial_name}}`, LightnCandy will search in this order:
+* /usr/local/share/handlebars/templates/partial_name.tmpl
+* /usr/local/share/handlebars/templates/partial_name.mustache
+* /usr/local/share/handlebars/templates/partial_name.handlebars
+* /usr/local/share/my_project/templates/partial_name.tmpl
+* /usr/local/share/my_project/templates/partial_name.mustache
+* /usr/local/share/my_project/templates/partial_name.handlebars
+* /usr/local/share/my_project/partials/partial_name.tmpl
+* /usr/local/share/my_project/partials/partial_name.mustache
+* /usr/local/share/my_project/partials/partial_name.handlebars
+
+By default, partial uses the same context with original template. If you want to change context for the partial, you may add one more argument after the partial name:
+
+```
+{{>partial_name .}} // Same as {{>partial_name}}
+{{>partial_name foo}} // Change input context to foo, FLAG_RUNTIMEPARTIAL required
+{{>partial_name ..}} // use {{..}} as new input context, FLAG_RUNTIMEPARTIAL required
+```
+
+Custom Helper
+-------------
+
+Custom helper can help you deal with common template tasks, for example: provide URL and text then generate a link. To know more about custom helper, you can read original handlebars.js document here: http://handlebarsjs.com/expressions.html .
+
+**NOTICE**: custom helpers to handle single tag `{{xxx}}` or a section `{{#yyy}} ... {{/yyy}}` are absolutely different in LightnCandy. To know more about creating custom helpers to handle `{{#yyy}} ... {{/yyy}}`, please refer to <a href="#block-custom-helper">Block Custom Helper</a>.
+
+When `compile()`, LightnCandy will lookup helpers from generated custom helper name table. You can register custom helpers with `helpers` option (**NOTICE**: `FLAG_NAMEDARG` is required for named arguments, `FLAG_ADVARNAME` is required for string or subexpression arguments):
+
+```php
+LightnCandy::compile($template, Array(
+ // FLAG_NAMEDARG is required if you want to use named arguments
+ 'flags' => LightnCandy::FLAG_HANDLEBARS
+ 'helpers' => Array(
+ // 1. You may pass your function name
+ // When the function is not exist, you get compile time error
+ // In this case, the helper name is same with function name
+ // Template: {{my_helper_functoin ....}}
+ 'my_helper_function',
+
+ // 2. You may also provide a static call from a class
+ // In this case, the helper name is same with provided full name
+ // **DEPRECATED** It is not valid in handlebars.js
+ // Template: {{myClass::myStaticMethod ....}}
+ 'myClass::myStaticMethod',
+
+ // 3. You may also provide an alias name for helper function
+ // This help you to mapping different function to a preferred helper name
+ // Template: {{helper_name ....}}
+ 'helper_name' => 'my_other_helper',
+
+ // 4. Alias also works well for static call of a class
+ // This help you to mapping different function to a preferred helper name
+ // Template: {{helper_name2 ....}}
+ 'helper_name2' => 'myClass::func',
+
+ // 5. Anonymous function should be provided with alias
+ // The function will be included in generaed code always
+ // Template: {{helper_name3 ....}}
+ 'helper_name3' => function ($arg1, $arg2) {
+ return "<a href=\"{$arg1}\">{$arg2}</a>";
+ }
+ )
+));
+```
+
+Custom Helper Interface
+-----------------------
+
+The input arguments are processed by LightnCandy automatically, you do not need to worry about variable name processing or current context. You can also use double quoted string as input:
+
+```
+{{{helper name}}} // This send processed {{{name}}} into the helper
+{{{helper ../name}}} // This send processed {{{../name}}} into the helper
+{{{helper "Test"}}} // This send the string "Test" into the helper (FLAG_ADVARNAME is required)
+{{helper "Test"}} // This send the string "Test" into the helper and escape the helper result
+{{{helper "Test" ../name}}} // This send string "Test" as first parameter,
+ // and processed {{{../name}}} as second parameter into the helper
+```
+
+Your custom helper function will be executed with two arguments. The first one is noname arguments, the second one is named arguments:
+
+```php
+function myhelper ($args, $named) {
+ if (count($args)) {
+ // handle no name arguments....
+ }
+ // access foo=bar from $named['foo'] ...
+}
+```
+
+In your template:
+
+```
+{{{helper name=value}}} // This send processed {{{value}}} into $named['name']
+{{{helper name="value"}}} // This send the string "value" into $named['name']
+{{{helper [na me]="value"}}} // You can still protect the name with [ ]
+ // so you get $named['na me'] as the string 'value'
+{{{helper url name="value"}}} // This send processed {{{url}}} into $args[0]
+ // and the string "value" into $named['name']
+```
+
+Custom Helper Escaping
+----------------------
+
+The return value of your custom helper should be a string. When your custom helper be executed from {{ }} , the return value will be HTML escaped. You may execute your helper by {{{ }}} , then the original helper return value will be outputted directly.
+
+When you need to do different escaping logic, you can return extended information by Array($responseString, $escape_flag) , here are some custom helper return value cases:
+
+```php
+// escaping is handled by lightncandy and decided by template
+// if the helper is in {{ }} , you get 'The U&amp;ME Helper is ececuted!'
+// if the helper is in {{{ }}} , you get 'The U&ME Helper is executed!'
+return 'The U&ME Helper is executed!';
+
+// Same as above because the escape_flag is DEFAULT
+// 0, false, null, undefined, or '' means DEFAULT
+return Array('The U&ME Helper is executed!');
+return Array('The U&ME Helper is executed!', false);
+return Array('The U&ME Helper is executed!', 0);
+
+// escaping is handled by the helper, lightncandy will do nothing
+// No matter in {{ }} or {{{ }}} , you get 'Exact&Same output \' \" Ya!'
+return Array('Exact&Same output \' " Ya!', 'raw');
+
+// force lightncandy escaping the helper result
+// No matter in {{ }} or {{{ }}} , you get 'Not&amp;Same output &#039; &quot; Ya!'
+return Array('Not&Same output \' " Ya!', 'enc');
+
+// force lightncandy escaping the helper result in handlebars.js way
+// No matter in {{ }} or {{{ }}} , you get 'Not&amp;Same output &#x27; &quot; Ya!'
+return Array('Not&Same output \' " Ya!', 'encq');
+```
+
+Block Custom Helper
+-------------------
+
+Block custom helper must be used as a section, the section is started with `{{#helper_name ...}}` and ended with `{{/helper_name}}`.
+
+You may use block custom helper to:
+
+1. Provide advanced condition logic which is different from `{{#if ...}}` ... `{{/if}}` .
+2. Modify current context for the inner block.
+3. Provide different context to the inner block.
+
+You can register block custom helpers with `blockhelpers` option:
+
+```php
+LightnCandy::compile($template, Array(
+ 'blockhelpers' => Array( // The usage of blockhelpers option is similar with helpers option.
+ 'my_helper_function', // You can use function name, class name with static method,
+ ... // and choose preferred helper name by providing key name.
+ )
+));
+```
+
+Block Custom Helper Interface
+-----------------------------
+
+LightnCandy handled all input arguments for you, you will receive current context and parsed arguments. The return value of helper function will become new context then be passed into inner block. If you do not return any value, or return null, the inner block will not be rendered. For example:
+
+```php
+// Only render inner block when input > 5
+// {{#helper_iffivemore total_people}}More then 5 people, discount!{{/helper_iffivemore}}
+function helper_iffivemore($cx, $args, $named) {
+ return $args[0] > 5 ? $cx : null;
+}
+
+// You can use named arguments, too
+// {{#helper_if value=people logic="more" tovalue=5}}Yes the logic is true{{/helper_if}}
+function helper_if($cx, $args, $named) {
+ switch ($args['logic']) {
+ case 'more':
+ return $named['value'] > $named['tovalue'] ? $cx : null;
+ case 'less':
+ return $named['value'] < $named['tovalue'] ? $cx : null;
+ case 'eq':
+ return $named['value'] == $named['tovalue'] ? $cx : null;
+ }
+}
+
+// Provide default values for name and salary
+// {{#helper_defaultpeople}}Hello, {{name}} ....Your salary will be {{salary}}{{/helper_defaultpeople}}
+function helper_defaultpeople($cx, $args, $named) {
+ if (!isset($cx['name'])) {
+ $cx['name'] = 'Sir';
+ }
+ $cx['salary'] = isset($cx['salary']) ? '$' . $cx['salary'] : 'unknown';
+ return $cx;
+}
+
+// Provide specific context to innerblock
+// {{#helper_sample}}Preview Name:{{name}} , Salary:{{salary}}.{{/helper_sample}}
+function helper_sample($cx, $args) {
+ return Array('name' => 'Sample Name', 'salary' => 'Sample Salary');
+}
+```
+
+You cannot provide new rendered result, nor handle loop in your block custom helper. To provide different rendering result, you should use <a href="#custom-helper">custom helper</a>. To handle loop, you should use `{{#each}}` . For example:
+
+```php
+// Provide specific context to innerblock, then loop on it.
+// {{#helper_categories}}{{#each .}}<li><a href="?id={{id}}">{{name}}</a></li>{{/each}}{{/helper_categories}}
+function helper_categories($cx, $args) {
+ return getMyCategories(); // Array('category1', 'category2', ...)
+}
+```
+
+The mission of a block custom helper is only focus on providing different context or logic to inner block, nothing else. If you like to do things beyond these restrictions, please using `hbhelpers` and keep reading to next section.
+
+Handlebars.js' Custom Helper
+----------------------------
+
+You can implement helpers more like Handlebars.js way with `hbhelpers` option, all matched single custom helper and block custom helper will be handled. In Handlebars.js, a block custom helper can rendener child block by executing options->fn, and change context by send new context as first parameter. Here are some examples to explain the behavior of `hbhelpers` custom helper:
+
+**#mywith (context change)**
+* LightnCandy
+```php
+// LightnCandy sample, #mywith works same with #with
+$php = LightnCandy::compile($template, Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ 'hbhelpers' => Array(
+ 'mywith' => function ($context, $options) {
+ return $options['fn']($context);
+ }
+ )
+));
+```
+
+* Handlebars.js
+```javascript
+// Handlebars.js sample, #mywith works same with #with
+Handlebars.registerHelper('mywith', function(context, options) {
+ return options.fn(context);
+});
+```
+
+**#myeach (context change)**
+* LightnCandy
+```php
+// LightnCandy sample, #myeach works same with #each
+$php = LightnCandy::compile($template, Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ 'hbhelpers' => Array(
+ 'myeach' => function ($context, $options) {
+ $ret = '';
+ foreach ($context as $cx) {
+ $ret .= $options['fn']($cx);
+ }
+ return $ret;
+ }
+ )
+));
+```
+
+* Handlebars.js
+```javascript
+// Handlebars.js sample, #myeach works same with #each
+Handlebars.registerHelper('myeach', function(context, options) {
+ var ret = '', i, j = context.length;
+ for (i = 0; i < j; i++) {
+ ret = ret + options.fn(context[i]);
+ }
+ return ret;
+});
+```
+
+**#myif (no context change)**
+* LightnCandy
+```php
+// LightnCandy sample, #myif works same with #if
+$php = LightnCandy::compile($template, Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ 'hbhelpers' => Array(
+ 'myif' => function ($conditional, $options) {
+ if ($conditional) {
+ return $options['fn']();
+ } else {
+ return $options['inverse']();
+ }
+ }
+ )
+));
+```
+
+* Handlebars.js
+```javascript
+// Handlebars.js sample, #myif works same with #if
+Handlebars.registerHelper('myif', function(conditional, options) {
+ if (conditional) {
+ return options.fn(this);
+ } else {
+ return options.inverse(this);
+ }
+});
+```
+
+**Hashed arguments**
+* LightnCandy
+```php
+$php = LightnCandy::compile($template, Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ 'hbhelpers' => Array(
+ 'sample' => function ($arg1, $arg2, $options) {
+ // All hashed arguments are in $options['hash']
+ }
+ )
+));
+```
+
+* Handlebars.js
+```javascript
+Handlebars.registerHelper('sample', function(arg1, arg2, options) {
+ // All hashed arguments are in options.hash
+});
+```
+
+**Escaping**
+
+When a Handlebars.js style custom helper be used as block tags, LightnCandy will not escape the result. When it is a single {{...}} tag, LightnCandy will escape the result. To change the escape behavior, you can return extended information by Array(), please read <a href="#custom-helper-escaping">Custom Helper Escaping</a> for more.
+
+Template Debugging
+------------------
+
+When template error happened, LightnCandy::compile() will return false. You may compile with `FLAG_ERROR_LOG` to see more error message, or compile with `FLAG_ERROR_EXCEPTION` to catch the exception.
+
+You may generate debug version of templates with `FLAG_RENDER_DEBUG` when compile() . The debug template contained more debug information and slower (TBD: performance result) , you may pass extra LCRun3 options into render function to know more rendering error (missing data). For example:
+
+```php
+$template = "Hello! {{name}} is {{gender}}.
+Test1: {{@root.name}}
+Test2: {{@root.gender}}
+Test3: {{../test3}}
+Test4: {{../../test4}}
+Test5: {{../../.}}
+Test6: {{../../[test'6]}}
+{{#each .}}
+each Value: {{.}}
+{{/each}}
+{{#.}}
+section Value: {{.}}
+{{/.}}
+{{#if .}}IF OK!{{/if}}
+{{#unless .}}Unless not OK!{{/unless}}
+";
+
+// compile to debug version
+$php = LightnCandy::compile($template, Array(
+ 'flags' => LightnCandy::FLAG_RENDER_DEBUG | LightnCandy::FLAG_HANDLEBARSJS
+));
+
+// Get the render function
+$renderer = LightnCandy::prepare($php);
+
+// error_log() when missing data:
+// LCRun3: [gender] is not exist
+// LCRun3: ../[test] is not exist
+$renderer(Array('name' => 'John'), LCRun3::DEBUG_ERROR_LOG);
+
+// Output visual debug template with ANSI color:
+echo $renderer(Array('name' => 'John'), LCRun3::DEBUG_TAGS_ANSI);
+
+// Output debug template with HTML comments:
+echo $renderer(Array('name' => 'John'), LCRun3::DEBUG_TAGS_HTML);
+```
+
+The ANSI output will be:
+
+<a href="tests/example_debug.php"><img src="example_debug.png"/></a>
+
+Here are the list of LCRun3 debug options for render function:
+
+* `DEBUG_ERROR_LOG` : error_log() when missing required data
+* `DEBUG_ERROR_EXCEPTION` : throw exception when missing required data
+* `DEBUG_TAGS` : turn the return value of render function into normalized mustache tags
+* `DEBUG_TAGS_ANSI` : turn the return value of render function into normalized mustache tags with ANSI color
+* `DEBUG_TAGS_HTML` : turn the return value of render function into normalized mustache tags with HTML comments
+
+Customize Render Function
+-------------------------
+
+If you want to do extra tasks inside render function or add more comment, you may use `renderex` when `compile()` . For example, this sample embed the compile time comment into the template:
+
+```php
+$php = LightnCandy::compile($template, Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ 'renderex' => '// Compiled at ' . date('Y-m-d h:i:s')
+));
+```
+
+Your render function will be:
+
+```php
+function ($in) {$
+ $cx = array(...);
+ // compiled at 1999-12-31 00:00:00
+ return .....
+}
+```
+
+Please make sure the passed in `renderex` is valid PHP, LightnCandy will not check it.
+
+Unsupported Feature (so far)
+----------------------------
+
+* [NEVER] `{{foo/bar}}` style variable name, it is deprecated in official handlebars.js document.
+* [maybe] mustache lambda : runtime time compile based on input value is far from lightncandy nature, not in the plan now.
+
+Suggested Handlebars Template Practices
+---------------------------------------
+
+* Prevent to use `{{#with}}` . I think `{{path.to.val}}` is more readable then `{{#with path.to}}{{val}}{{/with}}`; when using `{{#with}}` you will confusing on scope changing. `{{#with}}` only save you very little time when you access many variables under same path, but cost you a lot time when you need to understand then maintain a template.
+* use `{{{val}}}` when you do not require HTML escaped output on the value. It is better performance, too.
+* If you wanna display `{{`, use this: `{{{"{{"}}}`, prevent using `\{{`.
+* Prevent to use custom helper if you want to reuse your template in different language. Or, you may need to implement different versions of helper in different languages.
+* For best performance, you should only use 'compile on demand' pattern when you are in development stage. Before you go to production, you can `LightnCandy::compile()` on all your templates, save all generated PHP codes, and deploy these generated files (You may need to maintain a build process for this) . **DO NOT COMPILE ON PRODUCTION** , it also a best practice for security. Adding cache for 'compile on demand' is not the best solution. If you want to build some library or framework based on LightnCandy, think about this scenario.
+* Recompile your templates when you upgrade LightnCandy every time.
+
+Detail Feature list
+-------------------
+
+Go http://handlebarsjs.com/ to see more feature description about handlebars.js. All features align with it.
+
+* Exact same CR/LF behavior with handlebars.js
+* Exact same CR/LF bahavior with mustache spec (require `FLAG_MUSTACHESP`)
+* Exact same 'true' or 'false' output with handlebars.js (require `FLAG_JSTRUE`)
+* Exact same '[object Object]' output or join(',' array) output with handlebars.js (require `FLAG_JSOBJECT`)
+* Can place heading/tailing space, tab, CR/LF inside `{{ var }}` or `{{{ var }}}`
+* Indent behavior of the partial same with mustache spec (require `FLAG_MUSTACHEPAIN`)
+* Recursive variable lookup to parent context behavior same with mustache spec (require `FLAG_MUSTACHELOOKUP`)
+* `{{{value}}}` or `{{&value}}` : raw variable
+ * true as 'true' (require `FLAG_JSTRUE`)
+ * false as 'false' (require `FLAG_TRUE`)
+* `{{value}}` : HTML escaped variable
+ * true as 'true' (require `FLAG_JSTRUE`)
+ * false as 'false' (require `FLAG_JSTRUE`)
+* `{{{path.to.value}}}` : dot notation, raw
+* `{{path.to.value}}` : dot notation, HTML escaped
+* `{{.}}` : current context, HTML escaped
+* `{{{.}}}` : current context, raw
+* `{{this}}` : current context, HTML escaped (require `FLAG_THIS`)
+* `{{{this}}}` : current context, raw (require `FLAG_THIS`)
+* `{{#value}}` : section
+ * false, undefined and null will skip the section
+ * true will run the section with original scope
+ * All others will run the section with new scope (includes 0, 1, -1, '', '1', '0', '-1', 'false', Array, ...)
+* `{{/value}}` : end section
+* `{{^value}}` : inverted section
+ * false, undefined and null will run the section with original scope
+ * All others will skip the section (includes 0, 1, -1, '', '1', '0', '-1', 'false', Array, ...)
+* `{{! comment}}` : comment
+* `{{!-- comment or {{ or }} --}}` : extended comment that can contain }} or {{ .
+* `{{=<% %>=}}` : set delimiter to custom string , the custom string can not contain `=` . Check http://mustache.github.io/mustache.5.html for more example.
+* `{{#each var}}` : each loop
+* `{{#each}}` : each loop on {{.}}
+* `{{/each}}` : end loop
+* `{{#if var}}` : run if logic with original scope (null, false, empty Array and '' will skip this block)
+* `{{/if}}` : end if
+* `{{else}}` or `{{^}}` : run else logic, should between `{{#if var}}` and `{{/if}}` ; or between `{{#unless var}}` and `{{/unless}}`; or between `{{#foo}}` and `{{/foo}}`; or between `{{#each var}}` and `{{/each}}`; or between `{{#with var}}` and `{{/with}}`. (require `FLAG_ELSE`)
+* `{{#unless var}}` : run unless logic with original scope (null, false, empty Array and '' will render this block)
+* `{{#with var}}` : change context scope. If the var is false, skip included section. (require `FLAG_WITH`)
+* `{{../var}}` : parent template scope. (require `FLAG_PARENT`)
+* `{{>file}}` : partial; include another template inside a template.
+* `{{>file foo}}` : partial with new context (require `FLAG_RUNTIMEPARTIAL`)
+* `{{@index}}` : references to current index in a `{{#each}}` loop on an array. (require `FLAG_SPVARS`)
+* `{{@key}}` : references to current key in a `{{#each}}` loop on an object. (require `FLAG_SPVARS`)
+* `{{@root}}` : references to root context. (require `FLAG_SPVARS`)
+* `{{@first}}` : true when looping at first item. (require `FLAG_SPVARS`)
+* `{{@last}}` : true when looping at last item. (require `FLAG_SPVARS`)
+* `{{@root.path.to.value}}` : references to root context then follow the path. (require `FLAG_SPVARS`)
+* `{{@../index}}` : access to parent loop index. (require `FLAG_SPVARS` and `FLAG_PARENT`)
+* `{{@../key}}` : access to parent loop key. (require `FLAG_SPVARS` and `FLAG_PARENT`)
+* `{{foo.[ba.r].[#spec].0.ok}}` : references to $CurrentConext['foo']['ba.r']['#spec'][0]['ok'] . (require `FLAG_ADVARNAME`)
+* `{{~any_valid_tag}}` : Space control, remove all previous spacing (includes CR/LF, tab, space; stop on any none spacing character) (require `FLAG_SPACECTL`)
+* `{{any_valid_tag~}}` : Space control, remove all next spacing (includes CR/LF, tab, space; stop on any none spacing character) (require `FLAG_SPACECTL`)
+* `{{{helper var}}}` : Execute custom helper then render the result
+* `{{helper var}}` : Execute custom helper then render the HTML escaped result
+* `{{helper "str"}}` or `{{helper 'str'}}` : Execute custom helper with string arguments (require `FLAG_ADVARNAME`)
+* `{{helper name1=var name2=var2}}` : Execute custom helper with named arguments (require `FLAG_NAMEDARG`)
+* `{{#helper ...}}...{{/helper}}` : Execute block custom helper
+* `{{helper (helper2 foo) bar}}` : Execute custom helpers as subexpression (require `FLAG_ADVARNAME`)
diff --git a/vendor/zordius/lightncandy/UPGRADE.md b/vendor/zordius/lightncandy/UPGRADE.md
new file mode 100644
index 00000000..01f4c15b
--- /dev/null
+++ b/vendor/zordius/lightncandy/UPGRADE.md
@@ -0,0 +1,18 @@
+Upgrade Notice
+==============
+
+* Standalone templates compiled by older LightnCandy can be executed safe when you upgrade to any new version of LightnCandy.
+
+* Recompile your none standalone templates when you upgrade LightnCandy.
+
+Version v0.13
+-------------
+* The interface of custom helpers was changed from v0.13 . if you use this feature you may need to modify your custom helper functions.
+
+Version v0.11
+-------------
+* Due to big change of render() debugging, the rendering support class `LCRun2` is renamed to `LCRun3`. If you compile templates as none standalone PHP code by LightnCandy v0.11 or before, you should compile these templates again. Or, you may run into `Class 'LCRun2' not found` error when you execute these old rendering functions.
+
+Version v0.9
+------------
+* Due to big change of variable name handling, the rendering support class `LCRun` is renamed to `LCRun2`. If you compile templates as none standalone PHP code by LightnCandy v0.9 or before, you should compile these templates again. Or, you may run into `Class 'LCRun' not found` error when you execute these old rendering functions.
diff --git a/vendor/zordius/lightncandy/build/gen_doc b/vendor/zordius/lightncandy/build/gen_doc
new file mode 100644
index 00000000..428e619d
--- /dev/null
+++ b/vendor/zordius/lightncandy/build/gen_doc
@@ -0,0 +1,6 @@
+#!/bin/sh
+curl -O https://cloud.github.com/downloads/apigen/apigen/ApiGen-2.8.0-standalone.zip
+unzip -oq ApiGen-2.8.0-standalone.zip
+rm ApiGen-2.8.0-standalone.zip
+php -dopen_basedir=/ apigen/apigen.php --source src/ --destination build/result/docs/ --template-config apigen/templates/bootstrap/config.neon --deprecated yes
+rm -rf apigen
diff --git a/vendor/zordius/lightncandy/build/gen_test.php b/vendor/zordius/lightncandy/build/gen_test.php
new file mode 100644
index 00000000..97d49489
--- /dev/null
+++ b/vendor/zordius/lightncandy/build/gen_test.php
@@ -0,0 +1,64 @@
+<?php
+
+foreach (Array(
+ 'vendor/phpunit/phpunit/PHPUnitPHPUnit/Autoload.php',
+ 'PHPUnit/Autoload.php',
+ 'src/lightncandy.php'
+) as $inc) {
+ if (file_exists($inc)) {
+ include_once($inc);
+ break;
+ }
+}
+
+genTestForClass('LightnCandy');
+genTestForClass('LCRun3');
+
+function genTestForClass($classname) {
+ ob_start();
+
+ echo <<<VAR
+<?php
+/**
+ * Generated by build/gen_test
+ */
+require_once('src/lightncandy.php');
+
+class {$classname}Test extends PHPUnit_Framework_TestCase
+{
+
+VAR
+ ;
+
+ $class = new ReflectionClass($classname);
+ foreach ($class->getMethods() as $method) {
+ if (preg_match_all('/@expect (.+) when input (.+)( after (.+))?/', $method->getDocComment(), $matched)) {
+ echo <<<VAR
+ /**
+ * @covers {$classname}::{$method->name}
+ */
+ public function testOn_{$method->name}() {
+ \$method = new ReflectionMethod('$classname', '{$method->name}');
+
+VAR
+ ;
+ if ($method->isPrivate() || $method->isProtected()) {
+ echo " \$method->setAccessible(true);\n";
+ }
+ foreach ($matched[1] as $idx => $expect) {
+ if ($matched[3][$idx]) {
+ echo " {$matched[3][$idx]}\n";
+ }
+ echo " \$this->assertEquals($expect, \$method->invoke(null,\n {$matched[2][$idx]}\n ));\n";
+ }
+ echo " }\n";
+ }
+ }
+ echo "}\n?>";
+
+ $fn = "tests/{$classname}Test.php";
+ if (!file_put_contents($fn, ob_get_clean())) {
+ die("Can not generate tests into file $fn !!\n");
+ }
+}
+?>
diff --git a/vendor/zordius/lightncandy/build/push_ghpage b/vendor/zordius/lightncandy/build/push_ghpage
new file mode 100644
index 00000000..de64e2b9
--- /dev/null
+++ b/vendor/zordius/lightncandy/build/push_ghpage
@@ -0,0 +1,12 @@
+#!/bin/sh
+git checkout -B gh-pages
+git pull origin gh-pages
+rm *
+rm -rf src
+rm -rf test
+cp -r build/result/docs/* .
+rm -rf build
+rm .travis.yml
+git add .
+git commit -a -m "New documents on github"
+git push origin gh-pages
diff --git a/vendor/zordius/lightncandy/build/runphp b/vendor/zordius/lightncandy/build/runphp
new file mode 100644
index 00000000..aa694de3
--- /dev/null
+++ b/vendor/zordius/lightncandy/build/runphp
@@ -0,0 +1,2 @@
+#!/bin/sh
+php -dopen_basedir=/ $1 $2
diff --git a/vendor/zordius/lightncandy/build/travis_push b/vendor/zordius/lightncandy/build/travis_push
new file mode 100644
index 00000000..b51e4dcc
--- /dev/null
+++ b/vendor/zordius/lightncandy/build/travis_push
@@ -0,0 +1,60 @@
+#!/bin/sh
+echo "DEBUG ENV: ${TRAVIS_JOB_NUMBER} , ${TRAVIS_BUILD_NUMBER} , ${TRAVIS_PULL_REQUEST} ..."
+
+if [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then
+ echo "This is a PR, skip push."
+ exit 0
+fi
+
+if [ "${TRAVIS_BUILD_NUMBER}.1" != "${TRAVIS_JOB_NUMBER}" ]; then
+ echo "Only push documents 1 time... quit."
+ exit 0
+fi
+
+# Push coverage report
+wget https://scrutinizer-ci.com/ocular.phar
+php ocular.phar code-coverage:upload --format=php-clover coverage.clover
+
+# Set for all push in this script.
+git config --global user.name "Travis-CI"
+git config --global user.email "zordius@yahoo-inc.com"
+
+# Generate ANSI sample
+git clone https://github.com/fcambus/ansilove
+php tests/example_debug.php > example_debug
+php ansilove/ansilove example_debug
+git add example_debug.png
+
+# Push new tests back to this branch
+git commit -a -m "Auto generated tests from Travis [ci skip]"
+git push "https://${GHTK}@github.com/zordius/lightncandy.git" HEAD:${TRAVIS_BRANCH} > /dev/null 2>&1
+
+# Update hash in HandlebarsTest and push back, trigger new tests there.
+git clone https://github.com/zordius/HandlebarsTest
+cd HandlebarsTest
+echo ${TRAVIS_COMMIT} > lightncandy
+git add lightncandy
+git commit -a -m "Auto test on zordius/lightncandy@${TRAVIS_COMMIT}"
+git push "https://${GHTK}@github.com/zordius/HandlebarsTest.git" > /dev/null 2>&1
+cd ..
+
+# Generate documents for this branch
+build/gen_doc
+cd build/result/docs
+
+if [ "${TRAVIS_BRANCH}" != "master" ]; then
+ echo "Document will be pushed here: http://zordius.github.io/lightncandy/${TRAVIS_BRANCH}/"
+ cd ..
+ git init
+ git pull --quiet "https://${GHTK}@github.com/zordius/lightncandy.git" gh-pages:master > /dev/null 2>&1
+ rm -rf $TRAVIS_BRANCH
+ mv docs $TRAVIS_BRANCH
+ git add $TRAVIS_BRANCH
+else
+ echo "Document will be pushed here: http://zordius.github.io/lightncandy/"
+ git init
+ git add .
+fi
+
+git commit -m "Auto deployed to Github Pages from branch ${TRAVIS_BRANCH} @${TRAVIS_COMMIT} [ci skip]"
+git push --force --quiet "https://${GHTK}@github.com/zordius/lightncandy.git" master:gh-pages > /dev/null 2>&1
diff --git a/vendor/zordius/lightncandy/composer.json b/vendor/zordius/lightncandy/composer.json
new file mode 100644
index 00000000..bd15cc2c
--- /dev/null
+++ b/vendor/zordius/lightncandy/composer.json
@@ -0,0 +1,22 @@
+{
+ "name": "zordius/lightncandy",
+ "description": "An extremely fast PHP implementation of handlebars ( http://handlebarsjs.com/ ) and mustache ( http://mustache.github.io/ ).",
+ "homepage": "https://github.com/zordius/lightncandy",
+ "keywords": ["handlebars", "mustache", "PHP", "template", "logicless"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Zordius Chen",
+ "email": "zordius@yahoo-inc.com"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.0.17"
+ },
+ "autoload": {
+ "classmap": ["src/lightncandy.php"]
+ }
+}
diff --git a/vendor/zordius/lightncandy/example_debug.png b/vendor/zordius/lightncandy/example_debug.png
new file mode 100644
index 00000000..b117ee87
--- /dev/null
+++ b/vendor/zordius/lightncandy/example_debug.png
Binary files differ
diff --git a/vendor/zordius/lightncandy/phpunit.xml b/vendor/zordius/lightncandy/phpunit.xml
new file mode 100644
index 00000000..4e9417f1
--- /dev/null
+++ b/vendor/zordius/lightncandy/phpunit.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit
+ backupGlobals="false"
+ colors="true"
+ convertNoticesToExceptions="false"
+>
+ <filter>
+ <whitelist>
+ <directory suffix=".php">./src</directory>
+ </whitelist>
+ </filter>
+
+ <logging>
+ <log type="coverage-html" target="build/result/coverage" title="lightncandy" charset="UTF-8" />
+ <log type="coverage-text" target="php://stdout" />
+ </logging>
+
+ <testsuites>
+ <testsuite name="LightnCandy Test Suite">
+ <directory>./tests/</directory>
+ </testsuite>
+ </testsuites>
+</phpunit>
diff --git a/vendor/zordius/lightncandy/src/lightncandy.php b/vendor/zordius/lightncandy/src/lightncandy.php
new file mode 100644
index 00000000..d7a62e57
--- /dev/null
+++ b/vendor/zordius/lightncandy/src/lightncandy.php
@@ -0,0 +1,2560 @@
+<?php
+/*
+
+Copyrights for code authored by Yahoo! Inc. is licensed under the following terms:
+MIT License
+Copyright (c) 2013 Yahoo! Inc. All Rights Reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Origin: https://github.com/zordius/lightncandy
+*/
+
+/**
+ * This is abstract engine which defines must-have methods.
+ *
+ * @package LightnCandy
+ * @author Zordius <zordius@yahoo-inc.com>
+ */
+
+/**
+ * LightnCandy static core class.
+ */
+class LightnCandy {
+ // Compile time error handling flags
+ const FLAG_ERROR_LOG = 1;
+ const FLAG_ERROR_EXCEPTION = 2;
+ const FLAG_ERROR_SKIPPARTIAL = 4194304;
+
+ // Compile the template as standalone PHP code which can execute without including LightnCandy
+ const FLAG_STANDALONE = 4;
+ const FLAG_NOESCAPE = 67108864;
+
+ // JavaScript compatibility
+ const FLAG_JSTRUE = 8;
+ const FLAG_JSOBJECT = 16;
+
+ // Handlebars.js compatibility
+ const FLAG_THIS = 32;
+ const FLAG_WITH = 64;
+ const FLAG_PARENT = 128;
+ const FLAG_JSQUOTE = 256;
+ const FLAG_ADVARNAME = 512;
+ const FLAG_SPACECTL = 1024;
+ const FLAG_NAMEDARG = 2048;
+ const FLAG_SPVARS = 4096;
+ const FLAG_SLASH = 8388608;
+ const FLAG_ELSE = 16777216;
+
+ // PHP behavior flags
+ const FLAG_EXTHELPER = 8192;
+ const FLAG_ECHO = 16384;
+ const FLAG_PROPERTY = 32768;
+ const FLAG_METHOD = 65536;
+ const FLAG_RUNTIMEPARTIAL = 1048576;
+
+ // Mustache compatibility
+ const FLAG_MUSTACHESP = 131072;
+ const FLAG_MUSTACHELOOKUP = 262144;
+ const FLAG_MUSTACHEPAIN = 2097152;
+ const FLAG_MUSTACHESEC = 33554432;
+
+ // Template rendering time debug flags
+ const FLAG_RENDER_DEBUG = 524288;
+
+ // alias flags
+ const FLAG_BESTPERFORMANCE = 16384; // FLAG_ECHO
+ const FLAG_JS = 24; // FLAG_JSTRUE + FLAG_JSOBJECT
+ const FLAG_MUSTACHE = 40239104; // FLAG_ERROR_SKIPPARTIAL + FLAG_MUSTACHESP + FLAG_MUSTACHELOOKUP + FLAG_MUSTACHEPAIN + FLAG_MUSTACHESEC
+ const FLAG_HANDLEBARS = 27402208; // FLAG_THIS + FLAG_WITH + FLAG_PARENT + FLAG_JSQUOTE + FLAG_ADVARNAME + FLAG_SPACECTL + FLAG_NAMEDARG + FLAG_SPVARS + FLAG_SLASH + FLAG_ELSE + FLAG_MUSTACHESP + FLAG_MUSTACHEPAIN
+ const FLAG_HANDLEBARSJS = 27402232; // FLAG_JS + FLAG_HANDLEBARS
+ const FLAG_INSTANCE = 98304; // FLAG_PROPERTY + FLAG_METHOD
+
+ // RegExps
+ const VARNAME_SEARCH = '/(\\[[^\\]]+\\]|[^\\[\\]\\.]+)/';
+ const EXTENDED_COMMENT_SEARCH = '/{{!--.*?--}}/s';
+
+ // Positions of matched token
+ const POS_LOTHER = 1;
+ const POS_LSPACE = 2;
+ const POS_BEGINTAG = 3;
+ const POS_LSPACECTL = 4;
+ const POS_OP = 5;
+ const POS_INNERTAG = 6;
+ const POS_RSPACECTL = 7;
+ const POS_ENDTAG = 8;
+ const POS_RSPACE = 9;
+ const POS_ROTHER = 10;
+
+ protected static $lastContext;
+
+ /**
+ * Compile handlebars template into PHP code.
+ *
+ * @param string $template handlebars template string
+ * @param array<string,array|string|integer> $options LightnCandy compile time and run time options, default is array('flags' => LightnCandy::FLAG_BESTPERFORMANCE)
+ *
+ * @return string|false Compiled PHP code when successed. If error happened and compile failed, return false.
+ */
+ public static function compile($template, $options = array('flags' => self::FLAG_BESTPERFORMANCE)) {
+ $context = static::buildContext($options);
+
+ if (static::handleError($context)) {
+ return false;
+ }
+
+ // Strip extended comments
+ $template = preg_replace(static::EXTENDED_COMMENT_SEARCH, '{{!*}}', $template);
+
+ // Do first time scan to find out used feature, detect template error.
+ static::setupToken($context);
+ static::verifyTemplate($context, $template);
+
+ if (static::handleError($context)) {
+ return false;
+ }
+
+ // Do PHP code generation.
+ static::setupToken($context);
+ $code = static::compileTemplate($context, static::escapeTemplate($template));
+
+ // return false when fatal error
+ if (static::handleError($context)) {
+ return false;
+ }
+
+ // Or, return full PHP render codes as string
+ return static::composePHPRender($context, $code);
+ }
+
+ /*
+ * Escape template
+ *
+ * @param string $template handlebars template string
+ *
+ * @return string Escaped template
+ *
+ * @expect 'abc' when input 'abc'
+ * @expect 'a\\bc' when input 'a\bc'
+ * @expect 'a\\\'bc' when input 'a\'bc'
+ */
+ protected static function escapeTemplate($template) {
+ return addcslashes(addcslashes($template, '\\'), "'");
+ }
+
+ /**
+ * Setup token delimiter by default or provided string
+ *
+ * @param array<string,array|string|integer> $context Current context
+ * @param string $left left string of a token
+ * @param string $right right string of a token
+ */
+ protected static function setupToken(&$context, $left = '{{', $right = '}}') {
+ if (preg_match('/=/', "$left$right")) {
+ $context['error'][] = "Can not set delimiter contains '=' , you try to set delimiter as '$left' and '$right'.";
+ return;
+ }
+
+ $context['tokens']['startchar'] = substr($left, 0, 1);
+ $context['tokens']['left'] = $left;
+ $context['tokens']['right'] = $right;
+
+ if (($left === '{{') && ($right === '}}')) {
+ $left = '\\{{2,3}';
+ $right = '\\}{2,3}';
+ } else {
+ $left = preg_quote($left);
+ $right = preg_quote($right);
+ }
+
+ $context['tokens']['search'] = "/^(.*?)(\\s*)($left)(~?)([\\^#\\/!&>]?)(.*?)(~?)($right)(\\s*)(.*)\$/s";
+ }
+
+ /**
+ * Verify template and scan for used features
+ *
+ * @param array<string,array|string|integer> $context Current context
+ * @param string $template handlebars template
+ */
+ protected static function verifyTemplate(&$context, $template) {
+ while (preg_match($context['tokens']['search'], $template, $matches)) {
+ $context['tokens']['count']++;
+ static::scanFeatures($matches, $context);
+ $template = $matches[self::POS_ROTHER];
+ }
+ }
+
+ /**
+ * Compile template into PHP code (internal method)
+ *
+ * @param array<string,array|string|integer> $context Current context
+ * @param string $template handlebars template
+ * @param string $partial partial name when $template is come from the template
+ *
+ * @return string generated PHP code
+ */
+ protected static function compileTemplate(&$context, $template, $partial = '') {
+ // Check for recursive partial
+ if ($partial && !$context['flags']['runpart']) {
+ $context['partialStack'][] = $partial;
+ $diff = count($context['partialStack']) - count(array_unique($context['partialStack']));
+ if ($diff > 1) {
+ $context['error'][] = "Skip rendering partial '$partial' again due to recursive detected";
+ return '';
+ }
+ if ($diff) {
+ $context['error'][] = 'I found recursive partial includes as the path: ' . implode(' -> ', $context['partialStack']) . '! You should fix your template or compile with LightnCandy::FLAG_RUNTIMEPARTIAL flag.';
+ }
+ }
+
+ $code = '';
+ while (preg_match($context['tokens']['search'], $template, $matches)) {
+ // Skip a token when it is slash escaped
+ if ($context['flags']['slash'] && ($matches[self::POS_LSPACE] === '') && preg_match('/^(.*?)(\\\\+)$/s', $matches[self::POS_LOTHER], $escmatch)) {
+ if (strlen($escmatch[2]) % 4) {
+ $code .= substr($matches[self::POS_LOTHER], 0, -2) . $context['tokens']['startchar'];
+ $matches[self::POS_BEGINTAG] = substr($matches[self::POS_BEGINTAG], 1);
+ $template = implode('', array_slice($matches, self::POS_BEGINTAG));
+ continue;
+ } else {
+ $matches[self::POS_LOTHER] = $escmatch[1] . str_repeat('\\', strlen($escmatch[2]) / 2);
+ }
+ }
+
+ $context['tokens']['current']++;
+ $tmpl = static::compileToken($matches, $context);
+ if ($tmpl == $context['ops']['seperator']) {
+ $tmpl = '';
+ } else {
+ $tmpl = "'$tmpl'";
+ }
+ $code .= "{$matches[self::POS_LOTHER]}{$matches[self::POS_LSPACE]}$tmpl";
+ $template = "{$matches[self::POS_RSPACE]}{$matches[self::POS_ROTHER]}";
+ }
+
+ if ($partial && !$context['flags']['runpart']) {
+ array_pop($context['partialStack']);
+ }
+
+ return "$code$template";
+ }
+
+ /**
+ * Compose LightnCandy render codes for include()
+ *
+ * @param array<string,array|string|integer> $context Current context
+ * @param string $code generated PHP code
+ *
+ * @return string Composed PHP code
+ */
+ protected static function composePHPRender($context, $code) {
+ $flagJStrue = static::getBoolStr($context['flags']['jstrue']);
+ $flagJSObj = static::getBoolStr($context['flags']['jsobj']);
+ $flagSPVar = static::getBoolStr($context['flags']['spvar']);
+ $flagProp = static::getBoolStr($context['flags']['prop']);
+ $flagMethod = static::getBoolStr($context['flags']['method']);
+ $flagMustlok = static::getBoolStr($context['flags']['mustlok']);
+ $flagMustsec = static::getBoolStr($context['flags']['mustsec']);
+ $flagEcho = static::getBoolStr($context['flags']['echo']);
+
+ $libstr = static::exportLCRun($context);
+ $constants = static::exportLCRunConstant($context);
+ $helpers = static::exportHelper($context);
+ $bhelpers = static::exportHelper($context, 'blockhelpers');
+ $hbhelpers = static::exportHelper($context, 'hbhelpers');
+ $debug = LCRun3::DEBUG_ERROR_LOG;
+
+ // Return generated PHP code string.
+ return "<?php return function (\$in, \$debugopt = $debug) {
+ \$cx = array(
+ 'flags' => array(
+ 'jstrue' => $flagJStrue,
+ 'jsobj' => $flagJSObj,
+ 'spvar' => $flagSPVar,
+ 'prop' => $flagProp,
+ 'method' => $flagMethod,
+ 'mustlok' => $flagMustlok,
+ 'mustsec' => $flagMustsec,
+ 'echo' => $flagEcho,
+ 'debug' => \$debugopt,
+ ),
+ 'constants' => $constants,
+ 'helpers' => $helpers,
+ 'blockhelpers' => $bhelpers,
+ 'hbhelpers' => $hbhelpers,
+ 'partials' => array({$context['partialCode']}),
+ 'scopes' => array(\$in),
+ 'sp_vars' => array('root' => \$in),
+$libstr
+ );
+ {$context['renderex']}
+ {$context['ops']['op_start']}'$code'{$context['ops']['op_end']}
+}
+?>";
+ }
+
+ /**
+ * Build context from options
+ *
+ * @param array<string,array|string|integer> $options input options
+ *
+ * @return array<string,array|string|integer> Context from options
+ */
+ protected static function buildContext($options) {
+ if (!is_array($options)) {
+ $options = array();
+ }
+
+ $flags = isset($options['flags']) ? $options['flags'] : self::FLAG_BESTPERFORMANCE;
+
+ $context = array(
+ 'flags' => array(
+ 'errorlog' => $flags & self::FLAG_ERROR_LOG,
+ 'exception' => $flags & self::FLAG_ERROR_EXCEPTION,
+ 'skippartial' => $flags & self::FLAG_ERROR_SKIPPARTIAL,
+ 'standalone' => $flags & self::FLAG_STANDALONE,
+ 'noesc' => $flags & self::FLAG_NOESCAPE,
+ 'jstrue' => $flags & self::FLAG_JSTRUE,
+ 'jsobj' => $flags & self::FLAG_JSOBJECT,
+ 'jsquote' => $flags & self::FLAG_JSQUOTE,
+ 'this' => $flags & self::FLAG_THIS,
+ 'with' => $flags & self::FLAG_WITH,
+ 'parent' => $flags & self::FLAG_PARENT,
+ 'echo' => $flags & self::FLAG_ECHO,
+ 'advar' => $flags & self::FLAG_ADVARNAME,
+ 'namev' => $flags & self::FLAG_NAMEDARG,
+ 'spvar' => $flags & self::FLAG_SPVARS,
+ 'slash' => $flags & self::FLAG_SLASH,
+ 'else' => $flags & self::FLAG_ELSE,
+ 'exhlp' => $flags & self::FLAG_EXTHELPER,
+ 'mustsp' => $flags & self::FLAG_MUSTACHESP,
+ 'mustlok' => $flags & self::FLAG_MUSTACHELOOKUP,
+ 'mustpi' => $flags & self::FLAG_MUSTACHEPAIN,
+ 'mustsec' => $flags & self::FLAG_MUSTACHESEC,
+ 'debug' => $flags & self::FLAG_RENDER_DEBUG,
+ 'prop' => $flags & self::FLAG_PROPERTY,
+ 'method' => $flags & self::FLAG_METHOD,
+ 'runpart' => $flags & self::FLAG_RUNTIMEPARTIAL,
+ ),
+ 'level' => 0,
+ 'stack' => array(),
+ 'error' => array(),
+ 'basedir' => static::buildCXBasedir($options),
+ 'fileext' => static::buildCXFileext($options),
+ 'tokens' => array(
+ 'standalone' => true,
+ 'ahead' => false,
+ 'current' => 0,
+ 'count' => 0,
+ 'partialind' => '',
+ ),
+ 'usedPartial' => array(),
+ 'partialStack' => array(),
+ 'partialCode' => '',
+ 'usedFeature' => array(
+ 'rootthis' => 0,
+ 'enc' => 0,
+ 'raw' => 0,
+ 'sec' => 0,
+ 'isec' => 0,
+ 'if' => 0,
+ 'else' => 0,
+ 'unless' => 0,
+ 'each' => 0,
+ 'this' => 0,
+ 'parent' => 0,
+ 'with' => 0,
+ 'dot' => 0,
+ 'comment' => 0,
+ 'partial' => 0,
+ 'helper' => 0,
+ 'bhelper' => 0,
+ 'hbhelper' => 0,
+ 'delimiter' => 0,
+ ),
+ 'usedCount' => array(
+ 'var' => array(),
+ 'helpers' => array(),
+ 'blockhelpers' => array(),
+ 'hbhelpers' => array(),
+ 'lcrun' => array(),
+ ),
+ 'partials' => (isset($options['partials']) && is_array($options['partials'])) ? $options['partials'] : array(),
+ 'helpers' => array(),
+ 'blockhelpers' => array(),
+ 'hbhelpers' => array(),
+ 'renderex' => isset($options['renderex']) ? $options['renderex'] : '',
+ );
+
+ $context['ops'] = $context['flags']['echo'] ? array(
+ 'seperator' => ',',
+ 'f_start' => 'echo ',
+ 'f_end' => ';',
+ 'op_start' => 'ob_start();echo ',
+ 'op_end' => ';return ob_get_clean();',
+ 'cnd_start' => ';if ',
+ 'cnd_then' => '{echo ',
+ 'cnd_else' => ';}else{echo ',
+ 'cnd_end' => ';}echo ',
+ ) : array(
+ 'seperator' => '.',
+ 'f_start' => 'return ',
+ 'f_end' => ';',
+ 'op_start' => 'return ',
+ 'op_end' => ';',
+ 'cnd_start' => '.(',
+ 'cnd_then' => ' ? ',
+ 'cnd_else' => ' : ',
+ 'cnd_end' => ').',
+ );
+
+ $context['ops']['enc'] = $context['flags']['jsquote'] ? 'encq' : 'enc';
+ $context = static::buildHelperTable($context, $options);
+ $context = static::buildHelperTable($context, $options, 'blockhelpers');
+ $context = static::buildHelperTable($context, $options, 'hbhelpers');
+
+ return $context;
+ }
+
+ /**
+ * Build custom helper table
+ *
+ * @param array<string,array|string|integer> $context prepared context
+ * @param array<string,array|string|integer> $options input options
+ * @param string $tname helper table name
+ *
+ * @return array<string,array|string|integer> context with generated helper table
+ *
+ * @expect array() when input array(), array()
+ * @expect array('flags' => array('exhlp' => 1)) when input array('flags' => array('exhlp' => 1)), array('helpers' => array('abc'))
+ * @expect array('error' => array('Can not find custom helper function defination abc() !'), 'flags' => array('exhlp' => 0)) when input array('error' => array(), 'flags' => array('exhlp' => 0)), array('helpers' => array('abc'))
+ * @expect array('flags' => array('exhlp' => 1), 'helpers' => array('LCRun3::raw' => 'LCRun3::raw')) when input array('flags' => array('exhlp' => 1), 'helpers' => array()), array('helpers' => array('LCRun3::raw'))
+ * @expect array('flags' => array('exhlp' => 1), 'helpers' => array('test' => 'LCRun3::raw')) when input array('flags' => array('exhlp' => 1), 'helpers' => array()), array('helpers' => array('test' => 'LCRun3::raw'))
+ */
+ protected static function buildHelperTable($context, $options, $tname = 'helpers') {
+ if (isset($options[$tname]) && is_array($options[$tname])) {
+ foreach ($options[$tname] as $name => $func) {
+ if (is_callable($func)) {
+ $context[$tname][is_int($name) ? $func : $name] = $func;
+ } else {
+ if (is_array($func)) {
+ $context['error'][] = "I found an array in $tname with key as $name, please fix it.";
+ } else {
+ if (!$context['flags']['exhlp']) {
+ $context['error'][] = "Can not find custom helper function defination $func() !";
+ }
+ }
+ }
+ }
+ }
+ return $context;
+ }
+
+ /**
+ * Read partial file content as string and store in context
+ *
+ * @param string $name partial name
+ * @param array<string,array|string|integer> $context Current context of compiler progress.
+ */
+ protected static function readPartial($name, &$context) {
+ $context['usedFeature']['partial']++;
+
+ if (isset($context['usedPartial'][$name])) {
+ return;
+ }
+
+ $cnt = static::resolvePartial($name, $context);
+
+ if ($cnt !== null) {
+ return static::compilePartial($name, $context, $cnt);
+ }
+
+ if (!$context['flags']['skippartial']) {
+ $context['error'][] = "Can not find partial file for '$name', you should set correct basedir and fileext in options";
+ }
+ }
+
+ /**
+ * locate partial file, return the file name
+ *
+ * @param string $name partial name
+ * @param array<string,array|string|integer> $context Current context of compiler progress.
+ *
+ * @return string|null $content partial content
+ */
+ protected static function resolvePartial(&$name, &$context) {
+ if (isset($context['partials'][$name])) {
+ return $context['partials'][$name];
+ }
+
+ foreach ($context['basedir'] as $dir) {
+ foreach ($context['fileext'] as $ext) {
+ $fn = "$dir/$name$ext";
+ if (file_exists($fn)) {
+ return file_get_contents($fn);
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * compile partial file, stored in context
+ *
+ * @param string $name partial name
+ * @param array<string,array|string|integer> $context Current context of compiler progress.
+ * @param string $content partial content
+ */
+ protected static function compilePartial(&$name, &$context, $content) {
+ $context['usedPartial'][$name] = static::escapeTemplate($content);
+
+ $originalAhead = $context['tokens']['ahead'];
+ $tmpContext = $context;
+ $tmpContext['level'] = 0;
+ static::setupToken($tmpContext);
+
+ static::verifyTemplate($tmpContext, $content);
+ $originalToken = $context['tokens'];
+ $context = $tmpContext;
+ $context['tokens'] = $originalToken;
+ $context['tokens']['ahead'] = $originalAhead;
+
+ if ($context['flags']['runpart']) {
+ $code = static::compileTemplate($context, $context['usedPartial'][$name], $name);
+ if ($context['flags']['mustpi']) {
+ $sp = ', $sp';
+ $code = preg_replace('/^/m', "'{$context['ops']['seperator']}\$sp{$context['ops']['seperator']}'", $code);
+ } else {
+ $sp = '';
+ }
+ $context['partialCode'] .= "'$name' => function (\$cx, \$in{$sp}) {{$context['ops']['op_start']}'$code'{$context['ops']['op_end']}},";
+ }
+ }
+
+ /**
+ * Internal method used by compile(). Check options and handle fileext.
+ *
+ * @param array<string,array|string|integer> $options current compile option
+ *
+ * @return array<string> file extensions
+ *
+ * @expect array('.tmpl') when input array()
+ * @expect array('test') when input array('fileext' => 'test')
+ * @expect array('test1') when input array('fileext' => array('test1'))
+ * @expect array('test2', 'test3') when input array('fileext' => array('test2', 'test3'))
+ */
+ protected static function buildCXFileext($options) {
+ $exts = isset($options['fileext']) ? $options['fileext'] : '.tmpl';
+ return is_array($exts) ? $exts : array($exts);
+ }
+
+ /**
+ * Internal method used by compile(). Check options and handle basedir.
+ *
+ * @param array<string,array|string|integer> $options current compile option
+ *
+ * @return array<string> base directories
+ *
+ * @expect array() when input array()
+ * @expect array() when input array('basedir' => array())
+ * @expect array('src') when input array('basedir' => array('src'))
+ * @expect array('src') when input array('basedir' => array('src', 'dir_not_found'))
+ * @expect array('src', 'tests') when input array('basedir' => array('src', 'tests'))
+ */
+ protected static function buildCXBasedir($options) {
+ $dirs = isset($options['basedir']) ? $options['basedir'] : 0;
+ $dirs = is_array($dirs) ? $dirs : array($dirs);
+ $ret = array();
+
+ foreach ($dirs as $dir) {
+ if (is_string($dir) && is_dir($dir)) {
+ $ret[] = $dir;
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Internal method used by compile(). Get PHP code from a closure of function as string.
+ *
+ * @param object $closure Closure object
+ *
+ * @return string
+ *
+ * @expect 'function($a) {return;}' when input function ($a) {return;}
+ * @expect 'function($a) {return;}' when input function ($a) {return;}
+ */
+ protected static function getPHPCode($closure) {
+ if (is_string($closure) && preg_match('/(.+)::(.+)/', $closure, $matched)) {
+ $ref = new ReflectionMethod($matched[1], $matched[2]);
+ } else {
+ $ref = new ReflectionFunction($closure);
+ }
+ $fname = $ref->getFileName();
+
+ $lines = file_get_contents($fname);
+ $file = new SplFileObject($fname);
+ $file->seek($ref->getStartLine() - 2);
+ $spos = $file->ftell();
+ $file->seek($ref->getEndLine() - 1);
+ $epos = $file->ftell();
+
+ return preg_replace('/^.*?function(\s+[^\s\\(]+?)?\s*?\\((.+?)\\}[,\\s]*;?$/s', 'function($2}', substr($lines, $spos, $epos - $spos));
+ }
+
+ /**
+ * Internal method used by compile(). Export required custom helper functions.
+ *
+ * @param string $tname helper table name
+ * @param array<string,array|string|integer> $context current compile context
+ *
+ * @return string
+ */
+ protected static function exportHelper($context, $tname = 'helpers') {
+ $ret = '';
+ foreach ($context[$tname] as $name => $func) {
+ if (!isset($context['usedCount'][$tname][$name])) {
+ continue;
+ }
+ if ((is_object($func) && ($func instanceof Closure)) || ($context['flags']['exhlp'] == 0)) {
+ $ret .= (" '$name' => " . static::getPHPCode($func) . ",\n");
+ continue;
+ }
+ $ret .= " '$name' => '$func',\n";
+ }
+
+ return "array($ret)";
+ }
+
+ /**
+ * Internal method used by compile(). Export required standalone functions.
+ *
+ * @param array<string,array|string|integer> $context current compile context
+ *
+ * @return string
+ */
+ protected static function exportLCRun($context) {
+ if ($context['flags']['standalone'] == 0) {
+ return '';
+ }
+
+ $class = new ReflectionClass('LCRun3');
+ $fname = $class->getFileName();
+ $lines = file_get_contents($fname);
+ $file = new SplFileObject($fname);
+ $methods = array();
+ $ret = "'funcs' => array(\n";
+
+ foreach ($class->getMethods() as $method) {
+ $name = $method->getName();
+ $file->seek($method->getStartLine() - 2);
+ $spos = $file->ftell();
+ $file->seek($method->getEndLine() - 2);
+ $epos = $file->ftell();
+ $methods[$name] = static::scanLCRunDependency($context, preg_replace('/public static function (.+)\\(/', '\'$1\' => function (', substr($lines, $spos, $epos - $spos)));
+ }
+ unset($file);
+
+ $exports = array_keys($context['usedCount']['lcrun']);
+
+ while (true) {
+ if (array_sum(array_map(function ($name) use (&$exports, $methods) {
+ $n = 0;
+ foreach ($methods[$name][1] as $child => $count) {
+ if (!in_array($child, $exports)) {
+ $exports[] = $child;
+ $n++;
+ }
+ }
+ return $n;
+ }, $exports)) == 0) {
+ break;
+ }
+ }
+
+ foreach ($exports as $export) {
+ $ret .= ($methods[$export][0] . " },\n");
+ }
+
+ return "$ret)\n";
+ }
+
+ /**
+ * Internal method used by compile(). Export standalone constants.
+ *
+ * @param array<string,array|string|integer> $context current compile context
+ *
+ * @return string
+ */
+ protected static function exportLCRunConstant($context) {
+ if ($context['flags']['standalone'] == 0) {
+ return 'array()';
+ }
+
+ $class = new ReflectionClass('LCRun3');
+ $constants = $class->getConstants();
+ $ret = " array(\n";
+ foreach($constants as $name => $value) {
+ $ret .= " '$name' => ". (is_string($value) ? "'$value'" : $value ) . ",\n";
+ }
+ $ret .= " )";
+ return $ret;
+ }
+
+ /**
+ * Internal method used by compile(). Export required standalone functions.
+ *
+ * @param array<string,array|string|integer> $context current compile context
+ * @param string $code PHP code string of the method
+ *
+ * @return array<string|array> list of converted code and children array
+ */
+ protected static function scanLCRunDependency($context, $code) {
+ $child = array();
+
+ $code = preg_replace_callback('/self::(\w+?)\s*\(/', function ($matches) use ($context, &$child) {
+ if (!isset($child[$matches[1]])) {
+ $child[$matches[1]] = 0;
+ }
+ $child[$matches[1]]++;
+
+ return "\$cx['funcs']['{$matches[1]}'](";
+ }, $code);
+
+ // replace the constants
+ $code = preg_replace('/self::([A-Z0-9_]+)/', "\$cx['constants']['$1']", $code);
+ return array($code, $child);
+ }
+
+ /**
+ * Internal method used by compile(). Handle exists error and return error status.
+ *
+ * @param array<string,array|string|integer> $context Current context of compiler progress.
+ *
+ * @throws Exception
+ * @return boolean True when error detected
+ *
+ * @expect true when input array('level' => 1, 'stack' => array('X'), 'flags' => array('errorlog' => 0, 'exception' => 0), 'error' => array())
+ * @expect false when input array('level' => 0, 'error' => array())
+ * @expect true when input array('level' => 0, 'error' => array('some error'), 'flags' => array('errorlog' => 0, 'exception' => 0))
+ */
+ protected static function handleError(&$context) {
+ if ($context['level'] > 0) {
+ $token = array_pop($context['stack']);
+ $context['error'][] = "Unclosed token {{{#$token}}} !!";
+ }
+
+ static::$lastContext = $context;
+
+ if (count($context['error'])) {
+ if ($context['flags']['errorlog']) {
+ error_log(implode("\n", $context['error']));
+ }
+ if ($context['flags']['exception']) {
+ throw new Exception(implode("\n", $context['error']));
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Internal method used by compile(). Return 'true' or 'false' string.
+ *
+ * @param integer $v value
+ *
+ * @return string 'true' when the value larger then 0
+ *
+ * @expect 'true' when input 1
+ * @expect 'true' when input 999
+ * @expect 'false' when input 0
+ * @expect 'false' when input -1
+ */
+ protected static function getBoolStr($v) {
+ return ($v > 0) ? 'true' : 'false';
+ }
+
+ /**
+ * Get last compiler context.
+ *
+ * @return array<string,array|string|integer> Context data
+ */
+ public static function getContext() {
+ return static::$lastContext;
+ }
+
+ /**
+ * Get a working render function by a string of PHP code. This method may requires php setting allow_url_include=1 and allow_url_fopen=1 , or access right to tmp file system.
+ *
+ * @param string $php PHP code
+ * @param string|null $tmpDir Optional, change temp directory for php include file saved by prepare() when cannot include PHP code with data:// format.
+ *
+ * @return Closure|false result of include()
+ *
+ * @deprecated
+ */
+ public static function prepare($php, $tmpDir = null) {
+ if (!ini_get('allow_url_include') || !ini_get('allow_url_fopen')) {
+ if (!$tmpDir || !is_dir($tmpDir)) {
+ $tmpDir = sys_get_temp_dir();
+ }
+ }
+
+ if ($tmpDir) {
+ $fn = tempnam($tmpDir, 'lci_');
+ if (!$fn) {
+ error_log("Can not generate tmp file under $tmpDir!!\n");
+ return false;
+ }
+ if (!file_put_contents($fn, $php)) {
+ error_log("Can not include saved temp php code from $fn, you should add $tmpDir into open_basedir!!\n");
+ return false;
+ }
+ return include($fn);
+ }
+
+ return include('data://text/plain,' . urlencode($php));
+ }
+
+ /**
+ * Internal method used by compile(). Get function name for standalone or none standalone template.
+ *
+ * @param array<string,array|string|integer> $context Current context of compiler progress.
+ * @param string $name base function name
+ * @param string $tag original handlabars tag for debug
+ *
+ * @return string compiled Function name
+ *
+ * @expect 'LCRun3::test(' when input array('flags' => array('standalone' => 0, 'debug' => 0)), 'test', ''
+ * @expect 'LCRun3::test2(' when input array('flags' => array('standalone' => 0, 'debug' => 0)), 'test2', ''
+ * @expect "\$cx['funcs']['test3'](" when input array('flags' => array('standalone' => 1, 'debug' => 0)), 'test3', ''
+ * @expect 'LCRun3::debug(\'abc\', \'test\', ' when input array('flags' => array('standalone' => 0, 'debug' => 1)), 'test', 'abc'
+ */
+ protected static function getFuncName(&$context, $name, $tag) {
+ static::addUsageCount($context, 'lcrun', $name);
+
+ if ($context['flags']['debug'] && ($name != 'miss')) {
+ $dbg = "'$tag', '$name', ";
+ $name = 'debug';
+ static::addUsageCount($context, 'lcrun', 'debug');
+ } else {
+ $dbg = '';
+ }
+
+ return $context['flags']['standalone'] ? "\$cx['funcs']['$name']($dbg" : "LCRun3::$name($dbg";
+ }
+
+ /**
+ * Internal method used by getArrayCode(). Get variable names translated string.
+ *
+ * @param array<string> $scopes an array of variable names with single quote
+ *
+ * @return string PHP array names string
+ *
+ * @expect '' when input array()
+ * @expect '[a]' when input array('a')
+ * @expect '[a][b][c]' when input array('a', 'b', 'c')
+ */
+ protected static function getArrayStr($scopes) {
+ return count($scopes) ? '[' . implode('][', $scopes) . ']' : '';
+ }
+
+ /**
+ * Internal method used by getVariableName(). Get variable names translated string.
+ *
+ * @param array<string> $list an array of variable names.
+ *
+ * @return string PHP array names string
+ *
+ * @expect '' when input array()
+ * @expect "['a']" when input array('a')
+ * @expect "['a']['b']['c']" when input array('a', 'b', 'c')
+ */
+ protected static function getArrayCode($list) {
+ return static::getArrayStr(array_map(function ($v) {
+ return "'$v'";
+ }, $list));
+ }
+
+ /**
+ * Internal method used by compile().
+ *
+ * @param array<array> $vn variable name array.
+ * @param array<string,array|string|integer> $context current compile context
+ * @param boolean $ishelper true when compile for helper
+ *
+ * @return array<string|array> variable names
+ *
+ * @expect array('array(array($in),array())', array('this')) when input array(null), array('flags'=>array('spvar'=>true))
+ * @expect array('array(array($in,$in),array())', array('this', 'this')) when input array(null, null), array('flags'=>array('spvar'=>true))
+ * @expect array('array(array(),array(\'a\'=>$in))', array('this')) when input array('a' => null), array('flags'=>array('spvar'=>true))
+ */
+ protected static function getVariableNames($vn, &$context, $ishelper = false) {
+ $vars = array(array(), array());
+ $exps = array();
+ foreach ($vn as $i => $v) {
+ if (isset($v[0]) && preg_match('/^\(.+\)$/', $v[0])) {
+ $V = static::compileSubExpression($v[0], $context);
+ } else {
+ $V = static::getVariableName($v, $context, $ishelper);
+ }
+ if (is_string($i)) {
+ $vars[1][] = "'$i'=>{$V[0]}";
+ } else {
+ $vars[0][] = $V[0];
+ }
+ $exps[] = $V[1];
+ }
+ return array('array(array(' . implode(',', $vars[0]) . '),array(' . implode(',', $vars[1]) . '))', $exps);
+ }
+
+ /**
+ * Internal method used by compile().
+ *
+ * @param string $subExpression subExpression to compile
+ * @param array<string,array|string|integer> $context current compile context
+ *
+ * @return array<string> code representing passed expression
+ */
+ protected static function compileSubExpression($subExpression, &$context) {
+ // mock up a token for this expression
+ $token = array_fill(self::POS_LOTHER, self::POS_ROTHER, '');
+
+ // strip outer ( ) from subexpression
+ $token[self::POS_INNERTAG] = substr($subExpression, 1, -1);
+
+ list(, $vars) = static::parseTokenArgs($token, $context);
+
+ // no separator is needed, this code will be used as a function argument
+ $origSeperator = $context['ops']['seperator'];
+ $context['ops']['seperator'] = '';
+ // override $raw, subexpressions are never escaped
+ $ret = static::compileCustomHelper($context, $vars, true, true);
+ $context['ops']['seperator'] = $origSeperator;
+
+ return array($ret ? $ret : '', $subExpression);
+ }
+
+ /**
+ * Internal method used by compile().
+ *
+ * @param array<array|string|integer> $var variable parsed path
+ * @param array<array|string|integer> $context current compile context
+ * @param boolean $ishelper true when compile for helper$
+ *
+ * @return array<string> variable names
+ *
+ * @expect array('$in', 'this') when input array(null), array('flags'=>array('spvar'=>true,'debug'=>0))
+ * @expect array('true', 'true') when input array('true'), array('flags'=>array('spvar'=>true,'debug'=>0)), true
+ * @expect array('false', 'false') when input array('false'), array('flags'=>array('spvar'=>true,'debug'=>0)), true
+ * @expect array(2, '2') when input array('2'), array('flags'=>array('spvar'=>true,'debug'=>0)), true
+ * @expect array('((isset($in[\'@index\']) && is_array($in)) ? $in[\'@index\'] : null)', '[@index]') when input array('@index'), array('flags'=>array('spvar'=>false,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ * @expect array("((isset(\$cx['sp_vars']['index']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['index'] : null)", '@[index]') when input array('@index'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ * @expect array("((isset(\$cx['sp_vars']['key']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['key'] : null)", '@[key]') when input array('@key'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ * @expect array("((isset(\$cx['sp_vars']['first']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['first'] : null)", '@[first]') when input array('@first'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ * @expect array("((isset(\$cx['sp_vars']['last']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['last'] : null)", '@[last]') when input array('@last'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ * @expect array('\'a\'', '"a"') when input array('"a"'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ * @expect array('((isset($in[\'a\']) && is_array($in)) ? $in[\'a\'] : null)', '[a]') when input array('a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ * @expect array('((isset($cx[\'scopes\'][count($cx[\'scopes\'])-1][\'a\']) && is_array($cx[\'scopes\'][count($cx[\'scopes\'])-1])) ? $cx[\'scopes\'][count($cx[\'scopes\'])-1][\'a\'] : null)', '../[a]') when input array(1,'a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ * @expect array('((isset($cx[\'scopes\'][count($cx[\'scopes\'])-3][\'a\']) && is_array($cx[\'scopes\'][count($cx[\'scopes\'])-3])) ? $cx[\'scopes\'][count($cx[\'scopes\'])-3][\'a\'] : null)', '../../../[a]') when input array(3,'a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ * @expect array('((isset($in[\'id\']) && is_array($in)) ? $in[\'id\'] : null)', 'this.[id]') when input array(null, 'id'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ * @expect array('LCRun3::v($cx, $in, array(\'id\'))', 'this.[id]') when input array(null, 'id'), array('flags'=>array('prop'=>true,'spvar'=>true,'debug'=>0,'method'=>0,'mustlok'=>0,'standalone'=>0))
+ */
+ protected static function getVariableName($var, &$context, $ishelper = false) {
+ if (isset($var[0])) {
+ // Handle language constants or number , only for helpers
+ if ($ishelper) {
+ if ((count($var) == 1) && is_numeric($var[0])) {
+ // convert 0x00 or 0b00 numbers to decimal
+ return array((string) 1 * $var[0], $var[0]);
+ }
+ switch ($var[0]) {
+ case 'true':
+ return array('true', 'true');
+ case 'false':
+ return array('false', 'false');
+ }
+ }
+
+ // Handle double quoted string
+ if (preg_match('/^"(.*)"$/', $var[0], $matched)) {
+ $t = addcslashes(stripslashes(preg_replace('/\\\\\\\\/', '\\', $matched[1])), "'");
+ return array("'{$t}'", "\"{$t}\"");
+ }
+ }
+
+ $levels = 0;
+ $base = '$in';
+ $spvar = false;
+
+ if (isset($var[0])) {
+ // trace to parent
+ if (!is_string($var[0]) && is_int($var[0])) {
+ $levels = array_shift($var);
+ }
+
+ // handle @root, @index, @key, @last, etc
+ if ($context['flags']['spvar']) {
+ if (substr($var[0], 0, 1) === '@') {
+ $spvar = true;
+ $base = "\$cx['sp_vars']";
+ $var[0] = substr($var[0], 1);
+ }
+ }
+
+ // change base when trace to parent
+ if ($levels > 0) {
+ if ($spvar) {
+ $base .= str_repeat("['_parent']", $levels);
+ } else {
+ $base = "\$cx['scopes'][count(\$cx['scopes'])-$levels]";
+ }
+ }
+ }
+
+ // Generate normalized expression for debug
+ $exp = static::getExpression($levels, $spvar, $var);
+
+ if ((count($var) == 0) || (is_null($var[0]) && (count($var) == 1))) {
+ return array($base, $exp);
+ }
+
+ if (is_null($var[0])) {
+ array_shift($var);
+ }
+
+ // 1. To support recursive context lookup...
+ // 2. To support instance properties or methods...
+ // the only way is using slower rendering time variable resolver.
+ if ($context['flags']['prop'] || $context['flags']['method'] || $context['flags']['mustlok']) {
+ return array(static::getFuncName($context, 'v', $exp) . "\$cx, $base, array(" . implode(',', array_map(function ($V) {
+ return "'$V'";
+ }, $var)) . '))', $exp);
+ }
+
+ $n = static::getArrayCode($var);
+ array_pop($var);
+ $p = count($var) ? static::getArrayCode($var) : '';
+
+ return array("((isset($base$n) && is_array($base$p)) ? $base$n : " . ($context['flags']['debug'] ? (static::getFuncName($context, 'miss', '') . "\$cx, '$exp')") : 'null' ) . ')', $exp);
+ }
+
+ /**
+ * Internal method used by compile().
+ *
+ * @param integer $levels trace N levels top parent scope
+ * @param boolean $spvar is the path start with @ or not
+ * @param array<string|integer> $var variable parsed path
+ *
+ * @return string normalized expression for debug display
+ *
+ * @expect '[a].[b]' when input 0, false, array('a', 'b')
+ * @expect '@[root]' when input 0, true, array('root')
+ * @expect 'this' when input 0, false, null
+ * @expect 'this.[id]' when input 0, false, array(null, 'id')
+ * @expect '@[root].[a].[b]' when input 0, true, array('root', 'a', 'b')
+ * @expect '../../[a].[b]' when input 2, false, array('a', 'b')
+ * @expect '../[a\'b]' when input 1, false, array('a\'b')
+ */
+ protected static function getExpression($levels, $spvar, $var) {
+ return ($spvar ? '@' : '') . str_repeat('../', $levels) . ((is_array($var) && count($var)) ? implode('.', array_map(function($v) {
+ return is_null($v) ? 'this' : "[$v]";
+ }, $var)) : 'this');
+ }
+
+ /**
+ * Internal method used by compile(). Return array presentation for a variable name
+ *
+ * @param string $v variable name to be fixed.
+ * @param array<string,array|string|integer> $context Current compile content.
+ *
+ * @return array<integer,string> Return variable name array
+ *
+ * @expect array('this') when input 'this', array('flags' => array('advar' => 0, 'this' => 0))
+ * @expect array(null) when input 'this', array('flags' => array('advar' => 0, 'this' => 1))
+ * @expect array(1, null) when input '../', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ * @expect array(1, null) when input '../.', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ * @expect array(1, null) when input '../this', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ * @expect array(1, 'a') when input '../a', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ * @expect array(2, 'a', 'b') when input '../../a.b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ * @expect array(2, '[a]', 'b') when input '../../[a].b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ * @expect array(2, 'a', 'b') when input '../../[a].b', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ * @expect array('"a.b"') when input '"a.b"', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ * @expect array(null, 'id') when input 'this.id', array('flags' => array('advar' => 1, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ */
+ protected static function fixVariable($v, &$context) {
+ $ret = array();
+ $levels = 0;
+
+ // handle double quoted string
+ if (preg_match('/^"(.*)"$/', $v, $matched)) {
+ return array($v);
+ }
+
+ // handle single quoted string
+ if (preg_match('/^\\\\\'(.*)\\\\\'$/', $v, $matched)) {
+ return array("\"{$matched[1]}\"");
+ }
+
+ // handle ..
+ if ($v === '..') {
+ $v = '../';
+ }
+
+ // Trace to parent for ../ N times
+ $v = preg_replace_callback('/\\.\\.\\//', function() use (&$levels) {
+ $levels++;
+ return '';
+ }, trim($v));
+
+ if ($levels) {
+ $ret[] = $levels;
+ if (!$context['flags']['parent']) {
+ $context['error'][] = 'Do not support {{../var}}, you should do compile with LightnCandy::FLAG_PARENT flag';
+ }
+ $context['usedFeature']['parent']++;
+ }
+
+ if ($context['flags']['advar'] && preg_match('/\\]/', $v)) {
+ preg_match_all(self::VARNAME_SEARCH, $v, $matchedall);
+ } else {
+ preg_match_all('/([^\\.\\/]+)/', $v, $matchedall);
+ }
+
+ if (($v === '.') || ($v === '')) {
+ $matchedall = array(array('.'), array('.'));
+ }
+
+ foreach ($matchedall[1] as $m) {
+ if ($context['flags']['advar'] && substr($m, 0, 1) === '[') {
+ $ret[] = substr($m, 1, -1);
+ } else {
+ $ret[] = (($context['flags']['this'] && ($m === 'this')) || ($m === '.')) ? null : $m;
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Internal method used by scanFeatures() and compile(). Parse the token and return parsed result.
+ *
+ * @param array<string> $token preg_match results
+ * @param array<string,array|string|integer> $context current compile context
+ *
+ * @return array<boolean|array> Return parsed result
+ *
+ * @expect array(false, array(array(null))) when input array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ * @expect array(true, array(array(null))) when input array(0,0,0,'{{{',0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ * @expect array(true, array(array(null))) when input array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 1))
+ * @expect array(false, array(array('a'))) when input array(0,0,0,0,0,0,'a'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ * @expect array(false, array(array('a'), array('b'))) when input array(0,0,0,0,0,0,'a b'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ * @expect array(false, array(array('a'), array('"b'), array('c"'))) when input array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ * @expect array(false, array(array('a'), array('"b c"'))) when input array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ * @expect array(false, array(array('a'), array('[b'), array('c]'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ * @expect array(false, array(array('a'), array('[b'), array('c]'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ * @expect array(false, array(array('a'), array('b c'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ * @expect array(false, array(array('a'), array('b c'))) when input array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ * @expect array(false, array(array('a'), 'q' => array('b c'))) when input array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ * @expect array(false, array(array('a'), array('q=[b c'))) when input array(0,0,0,0,0,0,'a [q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ * @expect array(false, array(array('a'), 'q' => array('[b'), array('c]'))) when input array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ * @expect array(false, array(array('a'), 'q' => array('b'), array('c'))) when input array(0,0,0,0,0,0,'a [q]=b c'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ * @expect array(false, array(array('a'), 'q' => array('"b c"'))) when input array(0,0,0,0,0,0,'a q="b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ * @expect array(false, array(array('(foo bar)'))) when input array(0,0,0,0,0,0,'(foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ * @expect array(false, array(array('foo'), array("'=='"), array('bar'))) when input array(0,0,0,0,0,0,"foo '==' bar"), array('flags' => array('advar' => 1, 'namev' => 1))
+ */
+ protected static function parseTokenArgs(&$token, &$context) {
+ trim($token[self::POS_INNERTAG]);
+
+ // Handle delimiter change
+ if (preg_match('/^=\s*([^ ]+)\s+([^ ]+)\s*=$/', $token[self::POS_INNERTAG], $matched)) {
+ static::setupToken($context, $matched[1], $matched[2]);
+ $token[self::POS_OP] = ' ';
+ return array(false, array());
+ }
+
+ $vars = array();
+ $count = preg_match_all('/(\s*)([^\s]+)/', $token[self::POS_INNERTAG], $matchedall);
+
+ // Parse arguments and deal with "..." or [...] or (...)
+ if (($count > 0) && $context['flags']['advar']) {
+ $prev = '';
+ $expect = 0;
+ foreach ($matchedall[2] as $index => $t) {
+ // continue from previous match when expect something
+ if ($expect) {
+ $prev .= "{$matchedall[1][$index]}$t";
+ // end an argument when end with expected charactor
+ if (substr($t, -1, 1) === $expect) {
+ $vars[] = $prev;
+ $prev = '';
+ $expect = 0;
+ }
+ continue;
+ }
+
+ // continue to next match when begin with '(' without ending ')'
+ if (preg_match('/^\([^\)]+$/', $t)) {
+ $prev = $t;
+ $expect = ')';
+ continue;
+ }
+
+ // continue to next match when begin with '"' without ending '"'
+ if (preg_match('/^"[^"]+$/', $t)) {
+ $prev = $t;
+ $expect = '"';
+ continue;
+ }
+
+ // continue to next match when '="' exists without ending '"'
+ if (preg_match('/="[^"]+$/', $t)) {
+ $prev = $t;
+ $expect = '"';
+ continue;
+ }
+
+ // continue to next match when begin with \' without ending '
+ if (preg_match('/^\\\\\'[^\']+$/', $t)) {
+ $prev = $t;
+ $expect = '\'';
+ continue;
+ }
+
+ // continue to next match when =\' exists without ending '
+ if (preg_match('/=\\\\\'[^\']+$/', $t)) {
+ $prev = $t;
+ $expect = '\'';
+ continue;
+ }
+
+ // continue to next match when '[' exists without ending ']'
+ if (preg_match('/\\[[^\\]]+$/', $t)) {
+ $prev = $t;
+ $expect = ']';
+ continue;
+ }
+ $vars[] = $t;
+ }
+ } else {
+ $vars = ($count > 0) ? $matchedall[2] : explode(' ', $token[self::POS_INNERTAG]);
+ }
+
+ // Check for advanced variable.
+ $ret = array();
+ $i = 0;
+ foreach ($vars as $idx => $var) {
+ // Skip advanced processing for subexpressions
+ if (preg_match('/^\(.+\)$/', $var)) {
+ $ret[$i] = array($var);
+ $i++;
+ continue;
+ }
+
+ if ($context['flags']['namev']) {
+ if (preg_match('/^((\\[([^\\]]+)\\])|([^=^["\']+))=(.+)$/', $var, $m)) {
+ if (!$context['flags']['advar'] && $m[3]) {
+ $context['error'][] = "Wrong argument name as '[$m[3]]' in " . static::tokenString($token) . ' ! You should fix your template or compile with LightnCandy::FLAG_ADVARNAME flag.';
+ }
+ $idx = $m[3] ? $m[3] : $m[4];
+ $var = $m[5];
+ }
+ }
+ if ($context['flags']['advar']) {
+ // foo] Rule 1: no starting [ or [ not start from head
+ if (preg_match('/^[^\\[\\.]+[\\]\\[]/', $var)
+ // [bar Rule 2: no ending ] or ] not in the end
+ || preg_match('/[\\[\\]][^\\]\\.]+$/', $var)
+ // ]bar. Rule 3: middle ] not before .
+ || preg_match('/\\][^\\]\\[\\.]+\\./', $var)
+ // .foo[ Rule 4: middle [ not after .
+ || preg_match('/\\.[^\\]\\[\\.]+\\[/', preg_replace('/^(..\\/)+/', '', preg_replace('/\\[[^\\]]+\\]/', '[XXX]', $var)))
+ ) {
+ $context['error'][] = "Wrong variable naming as '$var' in " . static::tokenString($token) . ' !';
+ }
+ }
+
+ if (($idx === 0) && ($token[self::POS_OP] === '>')) {
+ $var = array(preg_replace('/^("(.+)")|(\\[(.+)\\])$/', '$2$4', $var));
+ } else if (is_numeric($var)) {
+ $var = array('"' . $var . '"');
+ } else {
+ $var = static::fixVariable($var, $context);
+ }
+
+ if (is_string($idx)) {
+ $ret[$idx] = $var;
+ } else {
+ $ret[$i] = $var;
+ $i++;
+ }
+ }
+
+ return array(($token[self::POS_BEGINTAG] === '{{{') || ($token[self::POS_OP] === '&') || $context['flags']['noesc'], $ret);
+ }
+
+ /**
+ * Internal method used by scanFeatures(). return token string
+ *
+ * @param string[] $token detected handlebars {{ }} token
+ * @param integer $remove remove how many heading and ending token
+ *
+ * @return string Return whole token
+ *
+ * @expect 'b' when input array(0, 'a', 'b', 'c'), 1
+ * @expect 'c' when input array(0, 'a', 'b', 'c', 'd', 'e')
+ */
+ protected static function tokenString($token, $remove = 2) {
+ return implode('', array_slice($token, 1 + $remove, -$remove));
+ }
+
+ /**
+ * Internal method used by scanFeatures(). Validate start and and.
+ *
+ * @param string[] $token detected handlebars {{ }} token
+ * @param array<string,array|string|integer> $context current compile context
+ *
+ * @return boolean|null Return true when invalid
+ *
+ * @expect null when input array_fill(0, 9, ''), array()
+ * @expect null when input array_fill(0, 9, '}}'), array()
+ * @expect true when input array_fill(0, 9, '{{{'), array()
+ */
+ protected static function validateStartEnd($token, &$context) {
+ // {{ }}} or {{{ }} are invalid
+ if (strlen($token[self::POS_BEGINTAG]) !== strlen($token[self::POS_ENDTAG])) {
+ $context['error'][] = 'Bad token ' . static::tokenString($token) . ' ! Do you mean {{' . static::tokenString($token, 4) . '}} or {{{' . static::tokenString($token, 4) . '}}}?';
+ return true;
+ }
+ // {{{# }}} or {{{! }}} or {{{/ }}} or {{{^ }}} are invalid.
+ if ((strlen($token[self::POS_BEGINTAG]) === 3) && $token[self::POS_OP] && ($token[self::POS_OP] !== '&')) {
+ $context['error'][] = 'Bad token ' . static::tokenString($token) . ' ! Do you mean {{' . static::tokenString($token, 4) . '}} ?';
+ return true;
+ }
+ }
+
+ /**
+ * Internal method used by compile(). Collect handlebars usage information, detect template error.
+ *
+ * @param string[] $token detected handlebars {{ }} token
+ * @param array<string,array|string|integer> $context current compile context
+ * @param array<array> $vars parsed arguments list
+ *
+ * @return boolean|integer|null Return true when invalid or detected
+ *
+ * @expect null when input array(0, 0, 0, 0, 0, ''), array(), array()
+ * @expect 2 when input array(0, 0, 0, 0, 0, '^', '...'), array('usedFeature' => array('isec' => 1), 'level' => 0), array(array('foo'))
+ * @expect 3 when input array(0, 0, 0, 0, 0, '!', '...'), array('usedFeature' => array('comment' => 2)), array()
+ * @expect true when input array(0, 0, 0, 0, 0, '/'), array('stack' => array(1), 'level' => 1), array()
+ * @expect 4 when input array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('sec' => 3), 'level' => 0), array(array('x'))
+ * @expect 5 when input array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('if' => 4), 'level' => 0), array(array('if'))
+ * @expect 6 when input array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('with' => 5), 'level' => 0, 'flags' => array('with' => 1)), array(array('with'))
+ * @expect 7 when input array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('each' => 6), 'level' => 0), array(array('each'))
+ * @expect 8 when input array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('unless' => 7), 'level' => 0), array(array('unless'))
+ * @expect 9 when input array(0, 0, 0, 0, 0, '#', '...'), array('blockhelpers' => array('abc' => ''), 'usedFeature' => array('bhelper' => 8), 'level' => 0), array(array('abc'))
+ * @expect 10 when input array(0, 0, 0, 0, 0, ' ', '...'), array('usedFeature' => array('delimiter' => 9), 'level' => 0), array()
+ * @expect 11 when input array(0, 0, 0, 0, 0, '#', '...'), array('hbhelpers' => array('abc' => ''), 'usedFeature' => array('hbhelper' => 10), 'level' => 0), array(array('abc'))
+ * @expect true when input array(0, 0, 0, 0, 0, '>', '...'), array('basedir' => array('.'), 'fileext' => array('.tmpl'), 'usedFeature' => array('unless' => 7, 'partial' => 7), 'level' => 0, 'flags' => array('skippartial' => 0)), array('test')
+ */
+ protected static function validateOperations($token, &$context, $vars) {
+ switch ($token[self::POS_OP]) {
+ case '>':
+ static::readPartial($vars[0][0], $context);
+ return true;
+
+ case ' ':
+ return ++$context['usedFeature']['delimiter'];
+
+ case '^':
+ if ($vars[0][0]) {
+ $context['stack'][] = $token[self::POS_INNERTAG];
+ $context['level']++;
+ return ++$context['usedFeature']['isec'];
+ }
+
+ if (!$context['flags']['else']) {
+ $context['error'][] = 'Do not support {{^}}, you should do compile with LightnCandy::FLAG_ELSE flag';
+ }
+ return;
+
+ case '/':
+ array_pop($context['stack']);
+ $context['level']--;
+ return true;
+
+ case '!':
+ return ++$context['usedFeature']['comment'];
+
+ case '#':
+ $context['stack'][] = $token[self::POS_INNERTAG];
+ $context['level']++;
+
+ // detect handlebars custom helpers.
+ if (isset($context['hbhelpers'][$vars[0][0]])) {
+ return ++$context['usedFeature']['hbhelper'];
+ }
+
+ // detect block custom helpers.
+ if (isset($context['blockhelpers'][$vars[0][0]])) {
+ return ++$context['usedFeature']['bhelper'];
+ }
+
+ switch ($vars[0][0]) {
+ case 'with':
+ if ($context['flags']['with']) {
+ if (count($vars) < 2) {
+ $context['error'][] = 'No argument after {{#with}} !';
+ }
+ } else {
+ if (isset($vars[1][0])) {
+ $context['error'][] = 'Do not support {{#with var}}, you should do compile with LightnCandy::FLAG_WITH flag';
+ }
+ }
+ // Continue to add usage...
+ case 'each':
+ case 'unless':
+ case 'if':
+ return ++$context['usedFeature'][$vars[0][0]];
+
+ default:
+ return ++$context['usedFeature']['sec'];
+ }
+ }
+ }
+
+ /**
+ * Internal method used by compile(). Collect handlebars usage information, detect template error.
+ *
+ * @param string[] $token detected handlebars {{ }} token
+ * @param array<string,array|string|integer> $context current compile context
+ */
+ protected static function scanFeatures($token, &$context) {
+ list($raw, $vars) = static::parseTokenArgs($token, $context);
+
+ if (static::validateStartEnd($token, $context)) {
+ return;
+ }
+
+ if (static::validateOperations($token, $context, $vars)) {
+ return;
+ }
+
+ if (($token[self::POS_OP] === '^') && ($context['flags']['else'])) {
+ return $context['usedFeature']['else']++;
+ }
+
+ if (count($vars) == 0) {
+ return $context['error'][] = 'Wrong variable naming in ' . static::tokenString($token);
+ }
+
+ if (!isset($vars[0])) {
+ return static::noNamedArguments($token, $context, true, ', you should use it after a custom helper.');
+ }
+
+ if ($vars[0] !== 'else') {
+ $context['usedFeature'][$raw ? 'raw' : 'enc']++;
+ }
+
+ // validate else and this.
+ switch ($vars[0][0]) {
+ case 'else':
+ if ($context['flags']['else']) {
+ return $context['usedFeature']['else']++;
+ }
+ break;
+
+ case 'this':
+ case '.':
+ if ($context['level'] == 0) {
+ $context['usedFeature']['rootthis']++;
+ }
+ return $context['usedFeature'][($vars[0] == '.') ? 'dot' : 'this']++;
+ }
+
+ // detect handlebars custom helpers.
+ if (isset($context['hbhelpers'][$vars[0][0]])) {
+ return $context['usedFeature']['hbhelper']++;
+ }
+
+ // detect custom helpers.
+ if (isset($context['helpers'][$vars[0][0]])) {
+ return $context['usedFeature']['helper']++;
+ }
+ }
+
+ /**
+ * Internal method used by compile(). Show error message when named arguments appear without custom helper.
+ *
+ * @param array<string> $token detected handlebars {{ }} token
+ * @param array<string,array|string|integer> $context current compile context
+ * @param boolean $named is named arguments
+ * @param string $suggest extended hint for this no named argument error
+ */
+ public static function noNamedArguments($token, &$context, $named, $suggest = '!') {
+ if ($named) {
+ $context['error'][] = 'Do not support name=value in ' . static::tokenString($token) . $suggest;
+ }
+ }
+
+ /**
+ * Internal method used by compileToken(). Modify $token when spacing rules matched.
+ *
+ * @param array<string> $token detected handlebars {{ }} token
+ * @param array<array|string|integer> $vars parsed arguments list
+ * @param array<string,array|string|integer> $context current compile context
+ *
+ * @return string|null Return compiled code segment for the token
+ */
+ public static function handleMustacheSpacing(&$token, $vars, &$context) {
+ if (!$context['flags']['mustsp'] && !$context['flags']['mustpi']) {
+ return;
+ }
+
+ // left line change detection
+ $lsp = preg_match('/^(.*)(\\r?\\n)([ \\t]*?)$/s', $token[self::POS_LSPACE], $lmatch);
+ $ind = $lsp ? $lmatch[3] : $token[self::POS_LSPACE];
+
+ // right line change detection
+ $rsp = preg_match('/^([ \\t]*?)(\\r?\\n)(.*)$/s', $token[self::POS_RSPACE], $rmatch);
+ $st = true;
+
+ // setup ahead flag
+ $ahead = $context['tokens']['ahead'];
+ $context['tokens']['ahead'] = preg_match('/^[^\n]*{{/s', $token[self::POS_RSPACE] . $token[self::POS_ROTHER]);
+
+ // reset partial indent
+ $context['tokens']['partialind'] = '';
+
+ // same tags in the same line , not standalone
+ if (!$lsp && $ahead) {
+ $st = false;
+ }
+
+ // Do not need standalone detection for these tags
+ if (!$token[self::POS_OP] || ($token[self::POS_OP] === '&')) {
+ if (!$context['flags']['else'] || (isset($vars[0][0]) && ($vars[0][0] !== 'else'))) {
+ $st = false;
+ }
+ }
+
+ // not standalone because other things in the same line ahead
+ if ($token[self::POS_LOTHER] && !$token[self::POS_LSPACE]) {
+ $st = false;
+ }
+
+ // not standalone because other things in the same line behind
+ if ($token[self::POS_ROTHER] && !$token[self::POS_RSPACE]) {
+ $st = false;
+ }
+
+ if ($st && (($lsp && $rsp) // both side cr
+ || ($rsp && !$token[self::POS_LOTHER]) // first line without left
+ || ($lsp && ($context['tokens']['current'] == $context['tokens']['count']) && !$token[self::POS_ROTHER]) // final line
+ )) {
+ // handle partial
+ if ($context['flags']['mustpi'] && ($token[self::POS_OP] === '>')) {
+ $context['tokens']['partialind'] = $ind;
+ }
+ if ($context['flags']['mustsp']) {
+ $token[self::POS_LSPACE] = (isset($lmatch[2]) ? ($lmatch[1] . $lmatch[2]) : '');
+ $token[self::POS_RSPACE] = isset($rmatch[3]) ? $rmatch[3] : '';
+ }
+ }
+ }
+
+ /**
+ * Internal method used by compile(). Return compiled PHP code partial for a handlebars token.
+ *
+ * @param array<string> $token detected handlebars {{ }} token
+ * @param array<string,array|string|integer> $context current compile context
+ *
+ * @return string Return compiled code segment for the token
+ */
+ public static function compileToken(&$token, &$context) {
+ list($raw, $vars) = static::parseTokenArgs($token, $context);
+ $named = count(array_diff_key($vars, array_keys(array_keys($vars)))) > 0;
+
+ // Handle spacing (standalone tags, partial indent)
+ static::handleMustacheSpacing($token, $vars, $context);
+
+ // Handle space control.
+ if ($token[self::POS_LSPACECTL]) {
+ $token[self::POS_LSPACE] = '';
+ }
+
+ if ($token[self::POS_RSPACECTL]) {
+ $token[self::POS_RSPACE] = '';
+ }
+
+ if ($ret = static::compileSection($token, $context, $vars, $named)) {
+ return $ret;
+ }
+
+ if ($ret = static::compileCustomHelper($context, $vars, $raw)) {
+ return $ret;
+ }
+
+ if ($ret = static::compileElse($context, $vars)) {
+ return $ret;
+ }
+
+ static::noNamedArguments($token, $context, $named, ', maybe you missing the custom helper?');
+
+ return static::compileVariable($context, $vars, $raw);
+ }
+
+ /**
+ * Internal method used by compile(). Return compiled PHP code partial for a handlebars section token.
+ *
+ * @param array<string> $token detected handlebars {{ }} token
+ * @param array<string,array|string|integer> $context current compile context
+ * @param array<array|string|integer> $vars parsed arguments list
+ * @param boolean $named is named arguments or not
+ *
+ * @return string|null Return compiled code segment for the token when the token is section
+ */
+ protected static function compileSection(&$token, &$context, &$vars, $named) {
+ switch ($token[self::POS_OP]) {
+ case '>':
+ // mustache spec: ignore missing partial
+ if (!isset($context['usedPartial'][$vars[0][0]])) {
+ return $context['ops']['seperator'];
+ }
+ $p = array_shift($vars);
+ if (!isset($vars[0])) {
+ $vars[0] = array();
+ }
+ $v = static::getVariableNames($vars, $context, true);
+ $tag = ">$p[0] " .implode(' ', $v[1]);
+ if ($context['flags']['runpart']) {
+ $sp = $context['tokens']['partialind'] ? ", '{$context['tokens']['partialind']}'" : '';
+ return $context['ops']['seperator'] . static::getFuncName($context, 'p', $tag) . "\$cx, '$p[0]', $v[0]$sp){$context['ops']['seperator']}";
+ } else {
+ if ($named || $v[0] !== 'array(array($in),array())') {
+ $context['error'][] = "Do not support {{{$tag}}}, you should do compile with LightnCandy::FLAG_RUNTIMEPARTIAL flag";
+ }
+ return "{$context['ops']['seperator']}'" . static::compileTemplate($context, preg_replace('/^/m', $context['tokens']['partialind'], $context['usedPartial'][$p[0]]), $p[0]) . "'{$context['ops']['seperator']}";
+ }
+ case '^':
+ // {{^}} means {{else}}
+ if (!$vars[0][0]) {
+ $vars[0][0] = 'else';
+ $token[self::POS_OP] = '';
+ return;
+ }
+
+ // Try to compile as custom helper {{^myHelper}}
+ $r = static::compileBlockCustomHelper($context, $vars, true);
+ if ($r) {
+ return $r;
+ }
+
+ $v = static::getVariableName($vars[0], $context);
+ $context['stack'][] = $v[1];
+ $context['stack'][] = '^';
+ static::noNamedArguments($token, $context, $named);
+ // Compile to inverted section {{^myVar}}
+ return "{$context['ops']['cnd_start']}(" . static::getFuncName($context, 'isec', '^' . $v[1]) . "\$cx, {$v[0]})){$context['ops']['cnd_then']}";
+ case '/':
+ return static::compileBlockEnd($token, $context, $vars);
+ case '!':
+ case ' ':
+ return $context['ops']['seperator'];
+ case '#':
+ // Try to compile as custom helper {{#myHelper}}
+ $r = static::compileBlockCustomHelper($context, $vars);
+ if ($r) {
+ return $r;
+ }
+ static::noNamedArguments($token, $context, $named, ', maybe you missing the block custom helper?');
+ // Compile to section {{#myVar}}
+ return static::compileBlockBegin($context, $vars);
+ }
+ }
+
+ /**
+ * Internal method used by compile(). Return compiled PHP code partial for a handlebars block custom helper begin token.
+ *
+ * @param array<string,array|string|integer> $context current compile context
+ * @param array<array|string|integer> $vars parsed arguments list
+ * @param boolean $inverted the logic will be inverted
+ *
+ * @return string|null Return compiled code segment for the token
+ */
+ protected static function compileBlockCustomHelper(&$context, $vars, $inverted = false) {
+ $notHBCH = !isset($context['hbhelpers'][$vars[0][0]]);
+
+ if (!isset($context['blockhelpers'][$vars[0][0]]) && $notHBCH) {
+ return;
+ }
+
+ $v = static::getVariableName($vars[0], $context);
+ $context['stack'][] = $v[1];
+ $context['stack'][] = '#';
+ $ch = array_shift($vars);
+ $inverted = $inverted ? 'true' : 'false';
+
+ static::addUsageCount($context, $notHBCH ? 'blockhelpers' : 'hbhelpers', $ch[0]);
+ $v = static::getVariableNames($vars, $context, true);
+ return $context['ops']['seperator'] . static::getFuncName($context, $notHBCH ? 'bch' : 'hbch', ($inverted ? '^' : '#') . implode(' ', $v[1])) . "\$cx, '$ch[0]', {$v[0]}, \$in, $inverted, function(\$cx, \$in) {{$context['ops']['f_start']}";
+ }
+
+ /**
+ * Internal method used by compile(). Return compiled PHP code partial for a handlebars block end token.
+ *
+ * @param array<string> $token detected handlebars {{ }} token
+ * @param array<string,array|string|integer> $context current compile context
+ * @param array<array|string|integer> $vars parsed arguments list
+ *
+ * @return string Return compiled code segment for the token
+ */
+ protected static function compileBlockEnd(&$token, &$context, $vars) {
+ $each = false;
+ $pop = array_pop($context['stack']);
+ switch ($token[self::POS_INNERTAG]) {
+ case 'if':
+ case 'unless':
+ if ($pop == ':') {
+ array_pop($context['stack']);
+ return $context['usedFeature']['parent'] ? "{$context['ops']['f_end']}}){$context['ops']['seperator']}" : "{$context['ops']['cnd_end']}";
+ }
+ return $context['usedFeature']['parent'] ? "{$context['ops']['f_end']}}){$context['ops']['seperator']}" : "{$context['ops']['cnd_else']}''{$context['ops']['cnd_end']}";
+ case 'with':
+ if ($context['flags']['with']) {
+ if ($pop !== 'with') {
+ $context['error'][] = 'Unexpect token: {{/with}} !';
+ return;
+ }
+ return "{$context['ops']['f_end']}}){$context['ops']['seperator']}";
+ }
+ break;
+ case 'each':
+ $each = true;
+ }
+
+ switch($pop) {
+ case '#':
+ case '^':
+ $pop2 = array_pop($context['stack']);
+ $v = static::getVariableName($vars[0], $context);
+ if (!$each && ($pop2 !== $v[1])) {
+ $context['error'][] = 'Unexpect token ' . static::tokenString($token) . " ! Previous token {{{$pop}$pop2}} is not closed";
+ return;
+ }
+ if ($pop == '^') {
+ return "{$context['ops']['cnd_else']}''{$context['ops']['cnd_end']}";
+ }
+ return "{$context['ops']['f_end']}}){$context['ops']['seperator']}";
+ default:
+ $context['error'][] = 'Unexpect token: ' . static::tokenString($token) . ' !';
+ return;
+ }
+ }
+
+ /**
+ * Internal method used by compile(). Return compiled PHP code partial for a handlebars block begin token.
+ *
+ * @param array<string,array|string|integer> $context current compile context
+ * @param array<array|string|integer> $vars parsed arguments list
+ *
+ * @return string Return compiled code segment for the token
+ */
+ protected static function compileBlockBegin(&$context, $vars) {
+ $each = 'false';
+ $v = isset($vars[1]) ? static::getVariableName($vars[1], $context, true) : array(null, array());
+ switch ($vars[0][0]) {
+ case 'if':
+ $context['stack'][] = 'if';
+ return $context['usedFeature']['parent']
+ ? $context['ops']['seperator'] . static::getFuncName($context, 'ifv', 'if ' . $v[1]) . "\$cx, {$v[0]}, \$in, function(\$cx, \$in) {{$context['ops']['f_start']}"
+ : "{$context['ops']['cnd_start']}(" . static::getFuncName($context, 'ifvar', $v[1]) . "\$cx, {$v[0]})){$context['ops']['cnd_then']}";
+ case 'unless':
+ $context['stack'][] = 'unless';
+ return $context['usedFeature']['parent']
+ ? $context['ops']['seperator'] . static::getFuncName($context, 'unl', 'unless ' . $v[1]) . "\$cx, {$v[0]}, \$in, function(\$cx, \$in) {{$context['ops']['f_start']}"
+ : "{$context['ops']['cnd_start']}(!" . static::getFuncName($context, 'ifvar', $v[1]) . "\$cx, {$v[0]})){$context['ops']['cnd_then']}";
+ case 'each':
+ $each = 'true';
+ array_shift($vars);
+ if (!isset($vars[0])) {
+ $vars[0] = array(null);
+ }
+ break;
+ case 'with':
+ if ($context['flags']['with']) {
+ $context['stack'][] = 'with';
+ return $context['ops']['seperator'] . static::getFuncName($context, 'wi', 'with ' . $v[1]) . "\$cx, {$v[0]}, \$in, function(\$cx, \$in) {{$context['ops']['f_start']}";
+ }
+ }
+
+ $v = static::getVariableName($vars[0], $context);
+ $context['stack'][] = $v[1];
+ $context['stack'][] = '#';
+ return $context['ops']['seperator'] . static::getFuncName($context, 'sec', (($each == 'true') ? 'each ' : '') . $v[1]) . "\$cx, {$v[0]}, \$in, $each, function(\$cx, \$in) {{$context['ops']['f_start']}";
+ }
+
+ /**
+ * Internal method used by compile(). Return compiled PHP code partial for a handlebars custom helper token.
+ *
+ * @param array<string,array|string|integer> $context current compile context
+ * @param array<array|string|integer> $vars parsed arguments list
+ * @param boolean $raw is this {{{ token or not
+ * @param boolean $err should cause error when missing helper or not
+ *
+ * @return string|null Return compiled code segment for the token when the token is custom helper
+ */
+ protected static function compileCustomHelper(&$context, &$vars, $raw, $err = false) {
+ $notHH = !isset($context['hbhelpers'][$vars[0][0]]);
+ if (!isset($context['helpers'][$vars[0][0]]) && $notHH) {
+ if ($err) {
+ $context['error'][] = "Custom helper '{$vars[0][0]}' not found!";
+ }
+ return;
+ }
+
+ $fn = $raw ? 'raw' : $context['ops']['enc'];
+ $ch = array_shift($vars);
+ $v = static::getVariableNames($vars, $context, true);
+ static::addUsageCount($context, $notHH ? 'helpers' : 'hbhelpers', $ch[0]);
+ return $context['ops']['seperator'] . static::getFuncName($context, $notHH ? 'ch' : 'hbch', "$ch[0] " . implode(' ', $v[1])) . "\$cx, '$ch[0]', {$v[0]}, '$fn'" . ($notHH ? '' : ', \'$in\'') . "){$context['ops']['seperator']}";
+ }
+
+ /**
+ * Internal method used by compile(). Return compiled PHP code partial for a handlebars else token.
+ *
+ * @param array<string,array|string|integer> $context current compile context
+ * @param array<array|string|integer> $vars parsed arguments list
+ *
+ * @return string|null Return compiled code segment for the token when the token is else
+ */
+ protected static function compileElse(&$context, &$vars) {
+ if ($vars[0][0] === 'else') {
+ $c = count($context['stack']) - 1;
+ if ($c >= 0) {
+ switch ($context['stack'][count($context['stack']) - 1]) {
+ case 'if':
+ case 'unless':
+ $context['stack'][] = ':';
+ return $context['usedFeature']['parent'] ? "{$context['ops']['f_end']}}, function(\$cx, \$in) {{$context['ops']['f_start']}" : "{$context['ops']['cnd_else']}";
+ case 'with':
+ case 'each':
+ case '#':
+ return "{$context['ops']['f_end']}}, function(\$cx, \$in) {{$context['ops']['f_start']}";
+ }
+ }
+ $context['error'][] = '{{else}} only valid in if, unless, each, and #section context';
+ }
+ }
+
+ /**
+ * Internal method used by compile(). Return compiled PHP code partial for a handlebars variable token.
+ *
+ * @param array<string,array|string|integer> $context current compile context
+ * @param array<array|string|integer> $vars parsed arguments list
+ * @param boolean $raw is this {{{ token or not
+ *
+ * @return string Return compiled code segment for the token
+ */
+ protected static function compileVariable(&$context, &$vars, $raw) {
+ $v = static::getVariableName($vars[0], $context);
+ if ($context['flags']['jsobj'] || $context['flags']['jstrue'] || $context['flags']['debug']) {
+ return $context['ops']['seperator'] . static::getFuncName($context, $raw ? 'raw' : $context['ops']['enc'], $v[1]) . "\$cx, {$v[0]}){$context['ops']['seperator']}";
+ } else {
+ return $raw ? "{$context['ops']['seperator']}$v[0]{$context['ops']['seperator']}" : "{$context['ops']['seperator']}htmlentities((string){$v[0]}, ENT_QUOTES, 'UTF-8'){$context['ops']['seperator']}";
+ }
+ }
+
+ /**
+ * Internal method used by compile(). Add usage count to context
+ *
+ * @param array<string,array|string|integer> $context current context
+ * @param string $category ctegory name, can be one of: 'var', 'helpers', 'blockhelpers'
+ * @param string $name used name
+ * @param integer $count increment
+ *
+ * @expect 1 when input array('usedCount' => array('test' => array())), 'test', 'testname'
+ * @expect 3 when input array('usedCount' => array('test' => array('testname' => 2))), 'test', 'testname'
+ * @expect 5 when input array('usedCount' => array('test' => array('testname' => 2))), 'test', 'testname', 3
+ */
+ protected static function addUsageCount(&$context, $category, $name, $count = 1) {
+ if (!isset($context['usedCount'][$category][$name])) {
+ $context['usedCount'][$category][$name] = 0;
+ }
+ return ($context['usedCount'][$category][$name] += $count);
+ }
+}
+
+/**
+ * LightnCandy static class for compiled template runtime methods.
+ */
+class LCRun3 {
+ const DEBUG_ERROR_LOG = 1;
+ const DEBUG_ERROR_EXCEPTION = 2;
+ const DEBUG_TAGS = 4;
+ const DEBUG_TAGS_ANSI = 12;
+ const DEBUG_TAGS_HTML = 20;
+
+ /**
+ * LightnCandy runtime method for output debug info.
+ *
+ * @param string $v expression
+ * @param string $f runtime function name
+ * @param array<string,array|string|integer> $cx render time context
+ *
+ * @expect '{{123}}' when input '123', 'miss', array('flags' => array('debug' => LCRun3::DEBUG_TAGS)), ''
+ * @expect '<!--MISSED((-->{{#123}}<!--))--><!--SKIPPED--><!--MISSED((-->{{/123}}<!--))-->' when input '123', 'wi', array('flags' => array('debug' => LCRun3::DEBUG_TAGS_HTML)), false, false, function () {return 'A';}
+ */
+ public static function debug($v, $f, $cx) {
+ $params = array_slice(func_get_args(), 2);
+ $r = call_user_func_array((isset($cx['funcs'][$f]) ? $cx['funcs'][$f] : "LCRun3::$f"), $params);
+
+ if ($cx['flags']['debug'] & self::DEBUG_TAGS) {
+ $ansi = $cx['flags']['debug'] & (self::DEBUG_TAGS_ANSI - self::DEBUG_TAGS);
+ $html = $cx['flags']['debug'] & (self::DEBUG_TAGS_HTML - self::DEBUG_TAGS);
+ $cs = ($html ? (($r !== '') ? '<!!--OK((-->' : '<!--MISSED((-->') : '')
+ . ($ansi ? (($r !== '') ? "\033[0;32m" : "\033[0;31m") : '');
+ $ce = ($html ? '<!--))-->' : '')
+ . ($ansi ? "\033[0m" : '');
+ switch ($f) {
+ case 'sec':
+ case 'ifv':
+ case 'unl':
+ case 'wi':
+ if ($r == '') {
+ if ($ansi) {
+ $r = "\033[0;33mSKIPPED\033[0m";
+ }
+ if ($html) {
+ $r = '<!--SKIPPED-->';
+ }
+ }
+ return "$cs{{#{$v}}}$ce{$r}$cs{{/{$v}}}$ce";
+ default:
+ return "$cs{{{$v}}}$ce";
+ }
+ } else {
+ return $r;
+ }
+ }
+
+ /**
+ * LightnCandy runtime method for missing data error.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param string $v expression
+ */
+ public static function miss($cx, $v) {
+ $e = "LCRun3: $v is not exist";
+ if ($cx['flags']['debug'] & self::DEBUG_ERROR_LOG) {
+ error_log($e);
+ return;
+ }
+ if ($cx['flags']['debug'] & self::DEBUG_ERROR_EXCEPTION) {
+ throw new Exception($e);
+ }
+ }
+
+ /**
+ * LightnCandy runtime method for variable lookup. It is slower and only be used for instance property or method detection.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer> $base current variable context
+ * @param array<string|integer> $path array of names for path
+ *
+ * @return null|string Return the value or null when not found
+ *
+ * @expect null when input array('scopes' => array(), 'flags' => array('prop' => 0, 'method' => 0, 'mustlok' => 0)), 0, array('a', 'b')
+ * @expect 3 when input array('scopes' => array(), 'flags' => array('prop' => 0, 'method' => 0), 'mustlok' => 0), array('a' => array('b' => 3)), array('a', 'b')
+ * @expect null when input array('scopes' => array(), 'flags' => array('prop' => 0, 'method' => 0, 'mustlok' => 0)), (Object) array('a' => array('b' => 3)), array('a', 'b')
+ * @expect 3 when input array('scopes' => array(), 'flags' => array('prop' => 1, 'method' => 0, 'mustlok' => 0)), (Object) array('a' => array('b' => 3)), array('a', 'b')
+ */
+ public static function v($cx, $base, $path) {
+ $count = count($cx['scopes']);
+ while ($base) {
+ $v = $base;
+ foreach ($path as $name) {
+ if (is_array($v) && isset($v[$name])) {
+ $v = $v[$name];
+ continue;
+ }
+ if (is_object($v)) {
+ if ($cx['flags']['prop'] && isset($v->$name)) {
+ $v = $v->$name;
+ continue;
+ }
+ if ($cx['flags']['method'] && is_callable(array($v, $name))) {
+ $v = $v->$name();
+ continue;
+ }
+ }
+ if ($cx['flags']['mustlok']) {
+ unset($v);
+ break;
+ }
+ return null;
+ }
+ if (isset($v)) {
+ return $v;
+ }
+ $count--;
+ if ($count >= 0) {
+ $base = $cx['scopes'][$count];
+ } else {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * LightnCandy runtime method for {{#if var}}.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer>|string|integer|null $v value to be tested
+ *
+ * @return boolean Return true when the value is not null nor false.
+ *
+ * @expect false when input array(), null
+ * @expect false when input array(), 0
+ * @expect false when input array(), false
+ * @expect true when input array(), true
+ * @expect true when input array(), 1
+ * @expect false when input array(), ''
+ * @expect false when input array(), array()
+ * @expect true when input array(), array('')
+ * @expect true when input array(), array(0)
+ */
+ public static function ifvar($cx, $v) {
+ return !is_null($v) && ($v !== false) && ($v !== 0) && ($v !== '') && (is_array($v) ? (count($v) > 0) : true);
+ }
+
+ /**
+ * LightnCandy runtime method for {{#if var}} when {{../var}} used.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer>|string|integer|null $v value to be tested
+ * @param array<array|string|integer> $in input data with current scope
+ * @param Closure|null $truecb callback function when test result is true
+ * @param Closure|null $falsecb callback function when test result is false
+ *
+ * @return string The rendered string of the section
+ *
+ * @expect '' when input array('scopes' => array()), null, array(), null
+ * @expect '' when input array('scopes' => array()), null, array(), function () {return 'Y';}
+ * @expect 'Y' when input array('scopes' => array()), 1, array(), function () {return 'Y';}
+ * @expect 'N' when input array('scopes' => array()), null, array(), function () {return 'Y';}, function () {return 'N';}
+ */
+ public static function ifv($cx, $v, $in, $truecb, $falsecb = null) {
+ $ret = '';
+ if (self::ifvar($cx, $v)) {
+ if ($truecb) {
+ $cx['scopes'][] = $in;
+ $ret = $truecb($cx, $in);
+ array_pop($cx['scopes']);
+ }
+ } else {
+ if ($falsecb) {
+ $cx['scopes'][] = $in;
+ $ret = $falsecb($cx, $in);
+ array_pop($cx['scopes']);
+ }
+ }
+ return $ret;
+ }
+
+ /**
+ * LightnCandy runtime method for {{#unless var}} when {{../var}} used.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer>|string|integer|null $var value be tested
+ * @param array<array|string|integer>|string|integer|null $in input data with current scope
+ * @param Closure $truecb callback function when test result is true
+ * @param Closure|null $falsecb callback function when test result is false
+ *
+ * @return string Return rendered string when the value is not null nor false.
+ *
+ * @expect '' when input array('scopes' => array()), null, array(), null
+ * @expect 'Y' when input array('scopes' => array()), null, array(), function () {return 'Y';}
+ * @expect '' when input array('scopes' => array()), 1, array(), function () {return 'Y';}
+ * @expect 'Y' when input array('scopes' => array()), null, array(), function () {return 'Y';}, function () {return 'N';}
+ * @expect 'N' when input array('scopes' => array()), true, array(), function () {return 'Y';}, function () {return 'N';}
+ */
+ public static function unl($cx, $var, $in, $truecb, $falsecb = null) {
+ return self::ifv($cx, $var, $in, $falsecb, $truecb);
+ }
+
+ /**
+ * LightnCandy runtime method for {{^var}} inverted section.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer>|string|integer|null $v value to be tested
+ *
+ * @return boolean Return true when the value is not null nor false.
+ *
+ * @expect true when input array(), null
+ * @expect false when input array(), 0
+ * @expect true when input array(), false
+ * @expect false when input array(), 'false'
+ * @expect true when input array(), array()
+ * @expect false when input array(), array('1')
+ */
+ public static function isec($cx, $v) {
+ return is_null($v) || ($v === false) || (is_array($v) && (count($v) === 0));
+ }
+
+ /**
+ * LightnCandy runtime method for {{{var}}} .
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer>|string|integer|null $v value to be output
+ *
+ * @return string The raw value of the specified variable
+ *
+ * @expect true when input array('flags' => array('jstrue' => 0)), true
+ * @expect 'true' when input array('flags' => array('jstrue' => 1)), true
+ * @expect '' when input array('flags' => array('jstrue' => 0)), false
+ * @expect 'false' when input array('flags' => array('jstrue' => 1)), false
+ * @expect 'false' when input array('flags' => array('jstrue' => 1)), false, true
+ * @expect 'Array' when input array('flags' => array('jstrue' => 1, 'jsobj' => 0)), array('a', 'b')
+ * @expect 'a,b' when input array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('a', 'b')
+ * @expect '[object Object]' when input array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('a', 'c' => 'b')
+ * @expect '[object Object]' when input array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('c' => 'b')
+ * @expect 'a,true' when input array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('a', true)
+ * @expect 'a,1' when input array('flags' => array('jstrue' => 0, 'jsobj' => 1)), array('a',true)
+ * @expect 'a,' when input array('flags' => array('jstrue' => 0, 'jsobj' => 1)), array('a',false)
+ * @expect 'a,false' when input array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('a',false)
+ */
+ public static function raw($cx, $v) {
+ if ($v === true) {
+ if ($cx['flags']['jstrue']) {
+ return 'true';
+ }
+ }
+
+ if (($v === false)) {
+ if ($cx['flags']['jstrue']) {
+ return 'false';
+ }
+ }
+
+ if (is_array($v)) {
+ if ($cx['flags']['jsobj']) {
+ if (count(array_diff_key($v, array_keys(array_keys($v)))) > 0) {
+ return '[object Object]';
+ } else {
+ $ret = array();
+ foreach ($v as $k => $vv) {
+ $ret[] = self::raw($cx, $vv);
+ }
+ return join(',', $ret);
+ }
+ }
+ }
+
+ return "$v";
+ }
+
+ /**
+ * LightnCandy runtime method for {{var}} .
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer>|string|integer|null $var value to be htmlencoded
+ *
+ * @return string The htmlencoded value of the specified variable
+ *
+ * @expect 'a' when input array(), 'a'
+ * @expect 'a&amp;b' when input array(), 'a&b'
+ * @expect 'a&#039;b' when input array(), 'a\'b'
+ */
+ public static function enc($cx, $var) {
+ return htmlentities(self::raw($cx, $var), ENT_QUOTES, 'UTF-8');
+ }
+
+ /**
+ * LightnCandy runtime method for {{var}} , and deal with single quote to same as handlebars.js .
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer>|string|integer|null $var value to be htmlencoded
+ *
+ * @return string The htmlencoded value of the specified variable
+ *
+ * @expect 'a' when input array(), 'a'
+ * @expect 'a&amp;b' when input array(), 'a&b'
+ * @expect 'a&#x27;b' when input array(), 'a\'b'
+ * @expect '&#x60;a&#x27;b' when input array(), '`a\'b'
+ */
+ public static function encq($cx, $var) {
+ return preg_replace('/`/', '&#x60;', preg_replace('/&#039;/', '&#x27;', htmlentities(self::raw($cx, $var), ENT_QUOTES, 'UTF-8')));
+ }
+
+ /**
+ * LightnCandy runtime method for {{#var}} section.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer>|string|integer|null $v value for the section
+ * @param array<array|string|integer>|string|integer|null $in input data with current scope
+ * @param boolean $each true when rendering #each
+ * @param Closure $cb callback function to render child context
+ * @param Closure|null $else callback function to render child context when {{else}}
+ *
+ * @return string The rendered string of the section
+ *
+ * @expect '' when input array('flags' => array('spvar' => 0)), false, false, false, function () {return 'A';}
+ * @expect '' when input array('flags' => array('spvar' => 0)), null, null, false, function () {return 'A';}
+ * @expect 'A' when input array('flags' => array('spvar' => 0)), true, true, false, function () {return 'A';}
+ * @expect 'A' when input array('flags' => array('spvar' => 0)), 0, 0, false, function () {return 'A';}
+ * @expect '-a=' when input array('flags' => array('spvar' => 0)), array('a'), array('a'), false, function ($c, $i) {return "-$i=";}
+ * @expect '-a=-b=' when input array('flags' => array('spvar' => 0)), array('a','b'), array('a','b'), false, function ($c, $i) {return "-$i=";}
+ * @expect '' when input array('flags' => array('spvar' => 0)), 'abc', 'abc', true, function ($c, $i) {return "-$i=";}
+ * @expect '-b=' when input array('flags' => array('spvar' => 0, 'mustsec' => 0)), array('a' => 'b'), array('a' => 'b'), true, function ($c, $i) {return "-$i=";}
+ * @expect '1' when input array('flags' => array('spvar' => 0)), 'b', 'b', false, function ($c, $i) {return count($i);}
+ * @expect '1' when input array('flags' => array('spvar' => 0)), 1, 1, false, function ($c, $i) {return print_r($i, true);}
+ * @expect '0' when input array('flags' => array('spvar' => 0)), 0, 0, false, function ($c, $i) {return print_r($i, true);}
+ * @expect '{"b":"c"}' when input array('flags' => array('spvar' => 0, 'mustsec' => 0)), array('b' => 'c'), array('b' => 'c'), false, function ($c, $i) {return json_encode($i);}
+ * @expect 'inv' when input array('flags' => array('spvar' => 0)), array(), 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect 'inv' when input array('flags' => array('spvar' => 0)), array(), 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect 'inv' when input array('flags' => array('spvar' => 0)), false, 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect 'inv' when input array('flags' => array('spvar' => 0)), false, 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect 'inv' when input array('flags' => array('spvar' => 0)), '', 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect 'cb' when input array('flags' => array('spvar' => 0)), '', 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect 'inv' when input array('flags' => array('spvar' => 0)), 0, 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect 'cb' when input array('flags' => array('spvar' => 0)), 0, 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect 'inv' when input array('flags' => array('spvar' => 0)), new stdClass, 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect 'cb' when input array('flags' => array('spvar' => 0)), new stdClass, 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ * @expect '268' when input array('flags' => array('spvar' => 1)), array(1,3,4), 0, false, function ($c, $i) {return $i * 2;}
+ * @expect '038' when input array('flags' => array('spvar' => 1), 'sp_vars'=>array()), array(1,3,'a'=>4), 0, true, function ($c, $i) {return $i * $c['sp_vars']['index'];}
+ */
+ public static function sec($cx, $v, $in, $each, $cb, $else = null) {
+ $isAry = is_array($v);
+ $isTrav = $v instanceof Traversable;
+ $loop = $each;
+ $keys = null;
+ $last = null;
+ $isObj = false;
+
+ if ($isAry && $else !== null && count($v) === 0) {
+ return $else($cx, $in);
+ }
+
+ // #var, detect input type is object or not
+ if (!$loop && $isAry) {
+ $keys = array_keys($v);
+ $loop = (count(array_diff_key($v, array_keys($keys))) == 0);
+ $isObj = !$loop;
+ }
+
+ if (($loop && $isAry) || $isTrav) {
+ if ($each && !$isTrav) {
+ // Detect input type is object or not when never done once
+ if ($keys == null) {
+ $keys = array_keys($v);
+ $isObj = (count(array_diff_key($v, array_keys($keys))) > 0);
+ }
+ }
+ $ret = array();
+ $cx['scopes'][] = $in;
+ $i = 0;
+ if ($cx['flags']['spvar']) {
+ $old_spvar = $cx['sp_vars'];
+ $cx['sp_vars'] = array(
+ '_parent' => $old_spvar,
+ 'root' => $old_spvar['root'],
+ );
+ if (!$isTrav) {
+ $last = count($keys) - 1;
+ }
+ }
+ foreach ($v as $index => $raw) {
+ if ($cx['flags']['spvar']) {
+ $cx['sp_vars']['first'] = ($i === 0);
+ $cx['sp_vars']['last'] = ($i == $last);
+ $cx['sp_vars']['key'] = $index;
+ $cx['sp_vars']['index'] = $i;
+ $i++;
+ }
+ $ret[] = $cb($cx, $raw);
+ }
+ if ($cx['flags']['spvar']) {
+ if ($isObj) {
+ unset($cx['sp_vars']['key']);
+ } else {
+ unset($cx['sp_vars']['last']);
+ }
+ unset($cx['sp_vars']['index']);
+ unset($cx['sp_vars']['first']);
+ $cx['sp_vars'] = $old_spvar;
+ }
+ array_pop($cx['scopes']);
+ return join('', $ret);
+ }
+ if ($each) {
+ if ($else !== null) {
+ $cx['scopes'][] = $in;
+ $ret = $else($cx, $v);
+ array_pop($cx['scopes']);
+ return $ret;
+ }
+ return '';
+ }
+ if ($isAry) {
+ if ($cx['flags']['mustsec']) {
+ $cx['scopes'][] = $v;
+ }
+ $ret = $cb($cx, $v);
+ if ($cx['flags']['mustsec']) {
+ array_pop($cx['scopes']);
+ }
+ return $ret;
+ }
+
+ if ($v === true) {
+ return $cb($cx, $in);
+ }
+
+ if (!is_null($v) && ($v !== false)) {
+ return $cb($cx, $v);
+ }
+
+ if ($else !== null) {
+ return $else($cx, $in);
+ }
+
+ return '';
+ }
+
+ /**
+ * LightnCandy runtime method for {{#with var}} .
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param array<array|string|integer>|string|integer|null $v value to be the new context
+ * @param array<array|string|integer>|string|integer|null $in input data with current scope
+ * @param Closure $cb callback function to render child context
+ * @param Closure|null $else callback function to render child context when {{else}}
+ *
+ * @return string The rendered string of the token
+ *
+ * @expect '' when input array(), false, false, function () {return 'A';}
+ * @expect '' when input array(), null, null, function () {return 'A';}
+ * @expect '-Array=' when input array(), array('a'=>'b'), array('a' => 'b'), function ($c, $i) {return "-$i=";}
+ * @expect '-b=' when input array(), 'b', array('a' => 'b'), function ($c, $i) {return "-$i=";}
+ */
+ public static function wi($cx, $v, $in, $cb, $else = null) {
+ if (($v === false) || ($v === null)) {
+ return $else ? $else($cx, $in) : '';
+ }
+ $cx['scopes'][] = $in;
+ $ret = $cb($cx, $v);
+ array_pop($cx['scopes']);
+ return $ret;
+ }
+
+ /**
+ * LightnCandy runtime method for {{> partial}} .
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param string $p partial name
+ * @param array<array|string|integer>|string|integer|null $v value to be the new context
+ *
+ * @return string The rendered string of the partial
+ *
+ */
+ public static function p($cx, $p, $v, $sp = '') {
+ return call_user_func($cx['partials'][$p], $cx, is_array($v[0][0]) ? array_merge($v[0][0], $v[1]) : $v[0][0], $sp);
+ }
+
+ /**
+ * LightnCandy runtime method for custom helpers.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param string $ch the name of custom helper to be executed
+ * @param array<array> $vars variables for the helper
+ * @param string $op the name of variable resolver. should be one of: 'raw', 'enc', or 'encq'.
+ *
+ * @return string The rendered string of the token
+ *
+ * @expect '=-=' when input array('helpers' => array('a' => function ($i) {return "=$i[0]=";})), 'a', array(array('-'),array()), 'raw'
+ * @expect '=&amp;=' when input array('helpers' => array('a' => function ($i) {return "=$i[0]=";})), 'a', array(array('&'),array()), 'enc'
+ * @expect '=&#x27;=' when input array('helpers' => array('a' => function ($i) {return "=$i[0]=";})), 'a', array(array('\''),array()), 'encq'
+ * @expect '=b=' when input array('helpers' => array('a' => function ($i,$j) {return "={$j['a']}=";})), 'a', array(array(),array('a' => 'b')), 'raw'
+ */
+ public static function ch($cx, $ch, $vars, $op) {
+ return self::chret(call_user_func_array($cx['helpers'][$ch], $vars), $op);
+ }
+
+ /**
+ * LightnCandy runtime method to handle response of custom helpers.
+ *
+ * @param string|array<string,array|string|integer> $ret return value from custom helper
+ * @param string $op the name of variable resolver. should be one of: 'raw', 'enc', or 'encq'.
+ *
+ * @return string The rendered string of the token
+ *
+ * @expect '=&=' when input '=&=', 'raw'
+ * @expect '=&amp;&#039;=' when input '=&\'=', 'enc'
+ * @expect '=&amp;&#x27;=' when input '=&\'=', 'encq'
+ * @expect '=&amp;&#039;=' when input array('=&\'='), 'enc'
+ * @expect '=&amp;&#x27;=' when input array('=&\'='), 'encq'
+ * @expect '=&amp;=' when input array('=&=', false), 'enc'
+ * @expect '=&=' when input array('=&=', false), 'raw'
+ * @expect '=&=' when input array('=&=', 'raw'), 'enc'
+ * @expect '=&amp;&#x27;=' when input array('=&\'=', 'encq'), 'raw'
+ */
+ public static function chret($ret, $op) {
+ if (is_array($ret)) {
+ if (isset($ret[1]) && $ret[1]) {
+ $op = $ret[1];
+ }
+ $ret = $ret[0];
+ }
+
+ switch ($op) {
+ case 'enc':
+ return htmlentities($ret, ENT_QUOTES, 'UTF-8');
+ case 'encq':
+ return preg_replace('/&#039;/', '&#x27;', htmlentities($ret, ENT_QUOTES, 'UTF-8'));
+ }
+ return $ret;
+ }
+
+ /**
+ * LightnCandy runtime method for Handlebars.js style custom helpers.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param string $ch the name of custom helper to be executed
+ * @param array<array|string|integer>|string|integer|null $vars variables for the helper
+ * @param string $op the name of variable resolver. should be one of: 'raw', 'enc', or 'encq'.
+ * @param boolean $inverted the logic will be inverted
+ * @param Closure $cb callback function to render child context
+ * @param Closure|null $else callback function to render child context when {{else}}
+ *
+ * @return string The rendered string of the token
+ */
+ public static function hbch($cx, $ch, $vars, $op, $inverted, $cb = false, $else = false) {
+ $isBlock = (is_object($cb) && ($cb instanceof Closure));
+ $args = $vars[0];
+ $options = array(
+ 'name' => $ch,
+ 'hash' => $vars[1]
+ );
+
+ // $invert the logic
+ if ($inverted) {
+ $tmp = $else;
+ $else = $cb;
+ $cb = $tmp;
+ }
+
+ if ($isBlock) {
+ $options['fn'] = function ($context = '_NO_INPUT_HERE_') use ($cx, $op, $cb) {
+ if ($cx['flags']['echo']) {
+ ob_start();
+ }
+ if ($context === '_NO_INPUT_HERE_') {
+ $ret = $cb($cx, $op);
+ } else {
+ $cx['scopes'][] = $op;
+ $ret = $cb($cx, $context);
+ array_pop($cx['scopes']);
+ }
+ return $cx['flags']['echo'] ? ob_get_clean() : $ret;
+ };
+ }
+
+ if ($else) {
+ $options['inverse'] = function ($context = '_NO_INPUT_HERE_') use ($cx, $op, $else) {
+ if ($cx['flags']['echo']) {
+ ob_start();
+ }
+ if ($context === '_NO_INPUT_HERE_') {
+ $ret = $else($cx, $op);
+ } else {
+ $cx['scopes'][] = $op;
+ $ret = $else($cx, $context);
+ array_pop($cx['scopes']);
+ }
+ return $cx['flags']['echo'] ? ob_get_clean() : $ret;
+ };
+ }
+
+ // prepare $options['data']
+ if ($cx['flags']['spvar']) {
+ $options['data'] = $cx['sp_vars'];
+ $options['data']['root'] = $cx['scopes'][0];
+ }
+
+ $args[] = $options;
+ $e = null;
+ $r = true;
+
+ try {
+ $r = call_user_func_array($cx['hbhelpers'][$ch], $args);
+ } catch (Exception $E) {
+ $e = "LCRun3: call custom helper '$ch' error: " . $E->getMessage();
+ }
+
+ if ($r === false) {
+ if ($e === null) {
+ $e = "LCRun3: call custom helper '$ch' error";
+ }
+ }
+
+ if($e !== null) {
+ if ($cx['flags']['debug'] & self::DEBUG_ERROR_LOG) {
+ error_log($e);
+ }
+ if ($cx['flags']['debug'] & self::DEBUG_ERROR_EXCEPTION) {
+ throw new Exception($e);
+ }
+ }
+
+ return self::chret($r, $isBlock ? 'raw' : $op);
+ }
+
+ /**
+ * LightnCandy runtime method for block custom helpers.
+ *
+ * @param array<string,array|string|integer> $cx render time context
+ * @param string $ch the name of custom helper to be executed
+ * @param array<array|string|integer>|string|integer|null $vars variables for the helper
+ * @param array<array|string|integer>|string|integer|null $in input data with current scope
+ * @param boolean $inverted the logic will be inverted
+ * @param Closure $cb callback function to render child context
+ * @param Closure|null $else callback function to render child context when {{else}}
+ *
+ * @return string The rendered string of the token
+ *
+ * @expect '4.2.3' when input array('blockhelpers' => array('a' => function ($cx) {return array($cx,2,3);})), 'a', array(0, 0), 4, false, function($cx, $i) {return implode('.', $i);}
+ * @expect '2.6.5' when input array('blockhelpers' => array('a' => function ($cx,$in) {return array($cx,$in[0],5);})), 'a', array('6', 0), 2, false, function($cx, $i) {return implode('.', $i);}
+ * @expect '' when input array('blockhelpers' => array('a' => function ($cx,$in) {})), 'a', array('6', 0), 2, false, function($cx, $i) {return implode('.', $i);}
+ */
+ public static function bch($cx, $ch, $vars, $in, $inverted, $cb, $else = false) {
+ $r = call_user_func($cx['blockhelpers'][$ch], $in, $vars[0], $vars[1]);
+
+ // $invert the logic
+ if ($inverted) {
+ $tmp = $else;
+ $else = $cb;
+ $cb = $tmp;
+ }
+
+ $ret = '';
+ if (is_null($r)) {
+ if ($else) {
+ $cx['scopes'][] = $in;
+ $ret = $else($cx, $r);
+ array_pop($cx['scopes']);
+ }
+ } else {
+ if ($cb) {
+ $cx['scopes'][] = $in;
+ $ret = $cb($cx, $r);
+ array_pop($cx['scopes']);
+ }
+ }
+
+ return $ret;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/vendor/zordius/lightncandy/tests/LCRun3Test.php b/vendor/zordius/lightncandy/tests/LCRun3Test.php
new file mode 100644
index 00000000..63d6348e
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/LCRun3Test.php
@@ -0,0 +1,376 @@
+<?php
+/**
+ * Generated by build/gen_test
+ */
+require_once('src/lightncandy.php');
+
+class LCRun3Test extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @covers LCRun3::debug
+ */
+ public function testOn_debug() {
+ $method = new ReflectionMethod('LCRun3', 'debug');
+ $this->assertEquals('{{123}}', $method->invoke(null,
+ '123', 'miss', array('flags' => array('debug' => LCRun3::DEBUG_TAGS)), ''
+ ));
+ $this->assertEquals('<!--MISSED((-->{{#123}}<!--))--><!--SKIPPED--><!--MISSED((-->{{/123}}<!--))-->', $method->invoke(null,
+ '123', 'wi', array('flags' => array('debug' => LCRun3::DEBUG_TAGS_HTML)), false, false, function () {return 'A';}
+ ));
+ }
+ /**
+ * @covers LCRun3::v
+ */
+ public function testOn_v() {
+ $method = new ReflectionMethod('LCRun3', 'v');
+ $this->assertEquals(null, $method->invoke(null,
+ array('scopes' => array(), 'flags' => array('prop' => 0, 'method' => 0, 'mustlok' => 0)), 0, array('a', 'b')
+ ));
+ $this->assertEquals(3, $method->invoke(null,
+ array('scopes' => array(), 'flags' => array('prop' => 0, 'method' => 0), 'mustlok' => 0), array('a' => array('b' => 3)), array('a', 'b')
+ ));
+ $this->assertEquals(null, $method->invoke(null,
+ array('scopes' => array(), 'flags' => array('prop' => 0, 'method' => 0, 'mustlok' => 0)), (Object) array('a' => array('b' => 3)), array('a', 'b')
+ ));
+ $this->assertEquals(3, $method->invoke(null,
+ array('scopes' => array(), 'flags' => array('prop' => 1, 'method' => 0, 'mustlok' => 0)), (Object) array('a' => array('b' => 3)), array('a', 'b')
+ ));
+ }
+ /**
+ * @covers LCRun3::ifvar
+ */
+ public function testOn_ifvar() {
+ $method = new ReflectionMethod('LCRun3', 'ifvar');
+ $this->assertEquals(false, $method->invoke(null,
+ array(), null
+ ));
+ $this->assertEquals(false, $method->invoke(null,
+ array(), 0
+ ));
+ $this->assertEquals(false, $method->invoke(null,
+ array(), false
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array(), true
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array(), 1
+ ));
+ $this->assertEquals(false, $method->invoke(null,
+ array(), ''
+ ));
+ $this->assertEquals(false, $method->invoke(null,
+ array(), array()
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array(), array('')
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array(), array(0)
+ ));
+ }
+ /**
+ * @covers LCRun3::ifv
+ */
+ public function testOn_ifv() {
+ $method = new ReflectionMethod('LCRun3', 'ifv');
+ $this->assertEquals('', $method->invoke(null,
+ array('scopes' => array()), null, array(), null
+ ));
+ $this->assertEquals('', $method->invoke(null,
+ array('scopes' => array()), null, array(), function () {return 'Y';}
+ ));
+ $this->assertEquals('Y', $method->invoke(null,
+ array('scopes' => array()), 1, array(), function () {return 'Y';}
+ ));
+ $this->assertEquals('N', $method->invoke(null,
+ array('scopes' => array()), null, array(), function () {return 'Y';}, function () {return 'N';}
+ ));
+ }
+ /**
+ * @covers LCRun3::unl
+ */
+ public function testOn_unl() {
+ $method = new ReflectionMethod('LCRun3', 'unl');
+ $this->assertEquals('', $method->invoke(null,
+ array('scopes' => array()), null, array(), null
+ ));
+ $this->assertEquals('Y', $method->invoke(null,
+ array('scopes' => array()), null, array(), function () {return 'Y';}
+ ));
+ $this->assertEquals('', $method->invoke(null,
+ array('scopes' => array()), 1, array(), function () {return 'Y';}
+ ));
+ $this->assertEquals('Y', $method->invoke(null,
+ array('scopes' => array()), null, array(), function () {return 'Y';}, function () {return 'N';}
+ ));
+ $this->assertEquals('N', $method->invoke(null,
+ array('scopes' => array()), true, array(), function () {return 'Y';}, function () {return 'N';}
+ ));
+ }
+ /**
+ * @covers LCRun3::isec
+ */
+ public function testOn_isec() {
+ $method = new ReflectionMethod('LCRun3', 'isec');
+ $this->assertEquals(true, $method->invoke(null,
+ array(), null
+ ));
+ $this->assertEquals(false, $method->invoke(null,
+ array(), 0
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array(), false
+ ));
+ $this->assertEquals(false, $method->invoke(null,
+ array(), 'false'
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array(), array()
+ ));
+ $this->assertEquals(false, $method->invoke(null,
+ array(), array('1')
+ ));
+ }
+ /**
+ * @covers LCRun3::raw
+ */
+ public function testOn_raw() {
+ $method = new ReflectionMethod('LCRun3', 'raw');
+ $this->assertEquals(true, $method->invoke(null,
+ array('flags' => array('jstrue' => 0)), true
+ ));
+ $this->assertEquals('true', $method->invoke(null,
+ array('flags' => array('jstrue' => 1)), true
+ ));
+ $this->assertEquals('', $method->invoke(null,
+ array('flags' => array('jstrue' => 0)), false
+ ));
+ $this->assertEquals('false', $method->invoke(null,
+ array('flags' => array('jstrue' => 1)), false
+ ));
+ $this->assertEquals('false', $method->invoke(null,
+ array('flags' => array('jstrue' => 1)), false, true
+ ));
+ $this->assertEquals('Array', $method->invoke(null,
+ array('flags' => array('jstrue' => 1, 'jsobj' => 0)), array('a', 'b')
+ ));
+ $this->assertEquals('a,b', $method->invoke(null,
+ array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('a', 'b')
+ ));
+ $this->assertEquals('[object Object]', $method->invoke(null,
+ array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('a', 'c' => 'b')
+ ));
+ $this->assertEquals('[object Object]', $method->invoke(null,
+ array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('c' => 'b')
+ ));
+ $this->assertEquals('a,true', $method->invoke(null,
+ array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('a', true)
+ ));
+ $this->assertEquals('a,1', $method->invoke(null,
+ array('flags' => array('jstrue' => 0, 'jsobj' => 1)), array('a',true)
+ ));
+ $this->assertEquals('a,', $method->invoke(null,
+ array('flags' => array('jstrue' => 0, 'jsobj' => 1)), array('a',false)
+ ));
+ $this->assertEquals('a,false', $method->invoke(null,
+ array('flags' => array('jstrue' => 1, 'jsobj' => 1)), array('a',false)
+ ));
+ }
+ /**
+ * @covers LCRun3::enc
+ */
+ public function testOn_enc() {
+ $method = new ReflectionMethod('LCRun3', 'enc');
+ $this->assertEquals('a', $method->invoke(null,
+ array(), 'a'
+ ));
+ $this->assertEquals('a&amp;b', $method->invoke(null,
+ array(), 'a&b'
+ ));
+ $this->assertEquals('a&#039;b', $method->invoke(null,
+ array(), 'a\'b'
+ ));
+ }
+ /**
+ * @covers LCRun3::encq
+ */
+ public function testOn_encq() {
+ $method = new ReflectionMethod('LCRun3', 'encq');
+ $this->assertEquals('a', $method->invoke(null,
+ array(), 'a'
+ ));
+ $this->assertEquals('a&amp;b', $method->invoke(null,
+ array(), 'a&b'
+ ));
+ $this->assertEquals('a&#x27;b', $method->invoke(null,
+ array(), 'a\'b'
+ ));
+ $this->assertEquals('&#x60;a&#x27;b', $method->invoke(null,
+ array(), '`a\'b'
+ ));
+ }
+ /**
+ * @covers LCRun3::sec
+ */
+ public function testOn_sec() {
+ $method = new ReflectionMethod('LCRun3', 'sec');
+ $this->assertEquals('', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), false, false, false, function () {return 'A';}
+ ));
+ $this->assertEquals('', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), null, null, false, function () {return 'A';}
+ ));
+ $this->assertEquals('A', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), true, true, false, function () {return 'A';}
+ ));
+ $this->assertEquals('A', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), 0, 0, false, function () {return 'A';}
+ ));
+ $this->assertEquals('-a=', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), array('a'), array('a'), false, function ($c, $i) {return "-$i=";}
+ ));
+ $this->assertEquals('-a=-b=', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), array('a','b'), array('a','b'), false, function ($c, $i) {return "-$i=";}
+ ));
+ $this->assertEquals('', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), 'abc', 'abc', true, function ($c, $i) {return "-$i=";}
+ ));
+ $this->assertEquals('-b=', $method->invoke(null,
+ array('flags' => array('spvar' => 0, 'mustsec' => 0)), array('a' => 'b'), array('a' => 'b'), true, function ($c, $i) {return "-$i=";}
+ ));
+ $this->assertEquals('1', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), 'b', 'b', false, function ($c, $i) {return count($i);}
+ ));
+ $this->assertEquals('1', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), 1, 1, false, function ($c, $i) {return print_r($i, true);}
+ ));
+ $this->assertEquals('0', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), 0, 0, false, function ($c, $i) {return print_r($i, true);}
+ ));
+ $this->assertEquals('{"b":"c"}', $method->invoke(null,
+ array('flags' => array('spvar' => 0, 'mustsec' => 0)), array('b' => 'c'), array('b' => 'c'), false, function ($c, $i) {return json_encode($i);}
+ ));
+ $this->assertEquals('inv', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), array(), 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('inv', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), array(), 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('inv', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), false, 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('inv', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), false, 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('inv', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), '', 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('cb', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), '', 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('inv', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), 0, 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('cb', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), 0, 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('inv', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), new stdClass, 0, true, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('cb', $method->invoke(null,
+ array('flags' => array('spvar' => 0)), new stdClass, 0, false, function ($c, $i) {return 'cb';}, function ($c, $i) {return 'inv';}
+ ));
+ $this->assertEquals('268', $method->invoke(null,
+ array('flags' => array('spvar' => 1)), array(1,3,4), 0, false, function ($c, $i) {return $i * 2;}
+ ));
+ $this->assertEquals('038', $method->invoke(null,
+ array('flags' => array('spvar' => 1), 'sp_vars'=>array()), array(1,3,'a'=>4), 0, true, function ($c, $i) {return $i * $c['sp_vars']['index'];}
+ ));
+ }
+ /**
+ * @covers LCRun3::wi
+ */
+ public function testOn_wi() {
+ $method = new ReflectionMethod('LCRun3', 'wi');
+ $this->assertEquals('', $method->invoke(null,
+ array(), false, false, function () {return 'A';}
+ ));
+ $this->assertEquals('', $method->invoke(null,
+ array(), null, null, function () {return 'A';}
+ ));
+ $this->assertEquals('-Array=', $method->invoke(null,
+ array(), array('a'=>'b'), array('a' => 'b'), function ($c, $i) {return "-$i=";}
+ ));
+ $this->assertEquals('-b=', $method->invoke(null,
+ array(), 'b', array('a' => 'b'), function ($c, $i) {return "-$i=";}
+ ));
+ }
+ /**
+ * @covers LCRun3::ch
+ */
+ public function testOn_ch() {
+ $method = new ReflectionMethod('LCRun3', 'ch');
+ $this->assertEquals('=-=', $method->invoke(null,
+ array('helpers' => array('a' => function ($i) {return "=$i[0]=";})), 'a', array(array('-'),array()), 'raw'
+ ));
+ $this->assertEquals('=&amp;=', $method->invoke(null,
+ array('helpers' => array('a' => function ($i) {return "=$i[0]=";})), 'a', array(array('&'),array()), 'enc'
+ ));
+ $this->assertEquals('=&#x27;=', $method->invoke(null,
+ array('helpers' => array('a' => function ($i) {return "=$i[0]=";})), 'a', array(array('\''),array()), 'encq'
+ ));
+ $this->assertEquals('=b=', $method->invoke(null,
+ array('helpers' => array('a' => function ($i,$j) {return "={$j['a']}=";})), 'a', array(array(),array('a' => 'b')), 'raw'
+ ));
+ }
+ /**
+ * @covers LCRun3::chret
+ */
+ public function testOn_chret() {
+ $method = new ReflectionMethod('LCRun3', 'chret');
+ $this->assertEquals('=&=', $method->invoke(null,
+ '=&=', 'raw'
+ ));
+ $this->assertEquals('=&amp;&#039;=', $method->invoke(null,
+ '=&\'=', 'enc'
+ ));
+ $this->assertEquals('=&amp;&#x27;=', $method->invoke(null,
+ '=&\'=', 'encq'
+ ));
+ $this->assertEquals('=&amp;&#039;=', $method->invoke(null,
+ array('=&\'='), 'enc'
+ ));
+ $this->assertEquals('=&amp;&#x27;=', $method->invoke(null,
+ array('=&\'='), 'encq'
+ ));
+ $this->assertEquals('=&amp;=', $method->invoke(null,
+ array('=&=', false), 'enc'
+ ));
+ $this->assertEquals('=&=', $method->invoke(null,
+ array('=&=', false), 'raw'
+ ));
+ $this->assertEquals('=&=', $method->invoke(null,
+ array('=&=', 'raw'), 'enc'
+ ));
+ $this->assertEquals('=&amp;&#x27;=', $method->invoke(null,
+ array('=&\'=', 'encq'), 'raw'
+ ));
+ }
+ /**
+ * @covers LCRun3::bch
+ */
+ public function testOn_bch() {
+ $method = new ReflectionMethod('LCRun3', 'bch');
+ $this->assertEquals('4.2.3', $method->invoke(null,
+ array('blockhelpers' => array('a' => function ($cx) {return array($cx,2,3);})), 'a', array(0, 0), 4, false, function($cx, $i) {return implode('.', $i);}
+ ));
+ $this->assertEquals('2.6.5', $method->invoke(null,
+ array('blockhelpers' => array('a' => function ($cx,$in) {return array($cx,$in[0],5);})), 'a', array('6', 0), 2, false, function($cx, $i) {return implode('.', $i);}
+ ));
+ $this->assertEquals('', $method->invoke(null,
+ array('blockhelpers' => array('a' => function ($cx,$in) {})), 'a', array('6', 0), 2, false, function($cx, $i) {return implode('.', $i);}
+ ));
+ }
+}
+?> \ No newline at end of file
diff --git a/vendor/zordius/lightncandy/tests/LightnCandyTest.php b/vendor/zordius/lightncandy/tests/LightnCandyTest.php
new file mode 100644
index 00000000..6f82f2bd
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/LightnCandyTest.php
@@ -0,0 +1,460 @@
+<?php
+/**
+ * Generated by build/gen_test
+ */
+require_once('src/lightncandy.php');
+
+class LightnCandyTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @covers LightnCandy::buildHelperTable
+ */
+ public function testOn_buildHelperTable() {
+ $method = new ReflectionMethod('LightnCandy', 'buildHelperTable');
+ $method->setAccessible(true);
+ $this->assertEquals(array(), $method->invoke(null,
+ array(), array()
+ ));
+ $this->assertEquals(array('flags' => array('exhlp' => 1)), $method->invoke(null,
+ array('flags' => array('exhlp' => 1)), array('helpers' => array('abc'))
+ ));
+ $this->assertEquals(array('error' => array('Can not find custom helper function defination abc() !'), 'flags' => array('exhlp' => 0)), $method->invoke(null,
+ array('error' => array(), 'flags' => array('exhlp' => 0)), array('helpers' => array('abc'))
+ ));
+ $this->assertEquals(array('flags' => array('exhlp' => 1), 'helpers' => array('LCRun3::raw' => 'LCRun3::raw')), $method->invoke(null,
+ array('flags' => array('exhlp' => 1), 'helpers' => array()), array('helpers' => array('LCRun3::raw'))
+ ));
+ $this->assertEquals(array('flags' => array('exhlp' => 1), 'helpers' => array('test' => 'LCRun3::raw')), $method->invoke(null,
+ array('flags' => array('exhlp' => 1), 'helpers' => array()), array('helpers' => array('test' => 'LCRun3::raw'))
+ ));
+ }
+ /**
+ * @covers LightnCandy::buildCXFileext
+ */
+ public function testOn_buildCXFileext() {
+ $method = new ReflectionMethod('LightnCandy', 'buildCXFileext');
+ $method->setAccessible(true);
+ $this->assertEquals(array('.tmpl'), $method->invoke(null,
+ array()
+ ));
+ $this->assertEquals(array('test'), $method->invoke(null,
+ array('fileext' => 'test')
+ ));
+ $this->assertEquals(array('test1'), $method->invoke(null,
+ array('fileext' => array('test1'))
+ ));
+ $this->assertEquals(array('test2', 'test3'), $method->invoke(null,
+ array('fileext' => array('test2', 'test3'))
+ ));
+ }
+ /**
+ * @covers LightnCandy::buildCXBasedir
+ */
+ public function testOn_buildCXBasedir() {
+ $method = new ReflectionMethod('LightnCandy', 'buildCXBasedir');
+ $method->setAccessible(true);
+ $this->assertEquals(array(), $method->invoke(null,
+ array()
+ ));
+ $this->assertEquals(array(), $method->invoke(null,
+ array('basedir' => array())
+ ));
+ $this->assertEquals(array('src'), $method->invoke(null,
+ array('basedir' => array('src'))
+ ));
+ $this->assertEquals(array('src'), $method->invoke(null,
+ array('basedir' => array('src', 'dir_not_found'))
+ ));
+ $this->assertEquals(array('src', 'tests'), $method->invoke(null,
+ array('basedir' => array('src', 'tests'))
+ ));
+ }
+ /**
+ * @covers LightnCandy::getPHPCode
+ */
+ public function testOn_getPHPCode() {
+ $method = new ReflectionMethod('LightnCandy', 'getPHPCode');
+ $method->setAccessible(true);
+ $this->assertEquals('function($a) {return;}', $method->invoke(null,
+ function ($a) {return;}
+ ));
+ $this->assertEquals('function($a) {return;}', $method->invoke(null,
+ function ($a) {return;}
+ ));
+ }
+ /**
+ * @covers LightnCandy::handleError
+ */
+ public function testOn_handleError() {
+ $method = new ReflectionMethod('LightnCandy', 'handleError');
+ $method->setAccessible(true);
+ $this->assertEquals(true, $method->invoke(null,
+ array('level' => 1, 'stack' => array('X'), 'flags' => array('errorlog' => 0, 'exception' => 0), 'error' => array())
+ ));
+ $this->assertEquals(false, $method->invoke(null,
+ array('level' => 0, 'error' => array())
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array('level' => 0, 'error' => array('some error'), 'flags' => array('errorlog' => 0, 'exception' => 0))
+ ));
+ }
+ /**
+ * @covers LightnCandy::getBoolStr
+ */
+ public function testOn_getBoolStr() {
+ $method = new ReflectionMethod('LightnCandy', 'getBoolStr');
+ $method->setAccessible(true);
+ $this->assertEquals('true', $method->invoke(null,
+ 1
+ ));
+ $this->assertEquals('true', $method->invoke(null,
+ 999
+ ));
+ $this->assertEquals('false', $method->invoke(null,
+ 0
+ ));
+ $this->assertEquals('false', $method->invoke(null,
+ -1
+ ));
+ }
+ /**
+ * @covers LightnCandy::getFuncName
+ */
+ public function testOn_getFuncName() {
+ $method = new ReflectionMethod('LightnCandy', 'getFuncName');
+ $method->setAccessible(true);
+ $this->assertEquals('LCRun3::test(', $method->invoke(null,
+ array('flags' => array('standalone' => 0, 'debug' => 0)), 'test', ''
+ ));
+ $this->assertEquals('LCRun3::test2(', $method->invoke(null,
+ array('flags' => array('standalone' => 0, 'debug' => 0)), 'test2', ''
+ ));
+ $this->assertEquals("\$cx['funcs']['test3'](", $method->invoke(null,
+ array('flags' => array('standalone' => 1, 'debug' => 0)), 'test3', ''
+ ));
+ $this->assertEquals('LCRun3::debug(\'abc\', \'test\', ', $method->invoke(null,
+ array('flags' => array('standalone' => 0, 'debug' => 1)), 'test', 'abc'
+ ));
+ }
+ /**
+ * @covers LightnCandy::getArrayStr
+ */
+ public function testOn_getArrayStr() {
+ $method = new ReflectionMethod('LightnCandy', 'getArrayStr');
+ $method->setAccessible(true);
+ $this->assertEquals('', $method->invoke(null,
+ array()
+ ));
+ $this->assertEquals('[a]', $method->invoke(null,
+ array('a')
+ ));
+ $this->assertEquals('[a][b][c]', $method->invoke(null,
+ array('a', 'b', 'c')
+ ));
+ }
+ /**
+ * @covers LightnCandy::getArrayCode
+ */
+ public function testOn_getArrayCode() {
+ $method = new ReflectionMethod('LightnCandy', 'getArrayCode');
+ $method->setAccessible(true);
+ $this->assertEquals('', $method->invoke(null,
+ array()
+ ));
+ $this->assertEquals("['a']", $method->invoke(null,
+ array('a')
+ ));
+ $this->assertEquals("['a']['b']['c']", $method->invoke(null,
+ array('a', 'b', 'c')
+ ));
+ }
+ /**
+ * @covers LightnCandy::getVariableNames
+ */
+ public function testOn_getVariableNames() {
+ $method = new ReflectionMethod('LightnCandy', 'getVariableNames');
+ $method->setAccessible(true);
+ $this->assertEquals(array('array(array($in),array())', array('this')), $method->invoke(null,
+ array(null), array('flags'=>array('spvar'=>true))
+ ));
+ $this->assertEquals(array('array(array($in,$in),array())', array('this', 'this')), $method->invoke(null,
+ array(null, null), array('flags'=>array('spvar'=>true))
+ ));
+ $this->assertEquals(array('array(array(),array(\'a\'=>$in))', array('this')), $method->invoke(null,
+ array('a' => null), array('flags'=>array('spvar'=>true))
+ ));
+ }
+ /**
+ * @covers LightnCandy::getVariableName
+ */
+ public function testOn_getVariableName() {
+ $method = new ReflectionMethod('LightnCandy', 'getVariableName');
+ $method->setAccessible(true);
+ $this->assertEquals(array('$in', 'this'), $method->invoke(null,
+ array(null), array('flags'=>array('spvar'=>true,'debug'=>0))
+ ));
+ $this->assertEquals(array('true', 'true'), $method->invoke(null,
+ array('true'), array('flags'=>array('spvar'=>true,'debug'=>0)), true
+ ));
+ $this->assertEquals(array('false', 'false'), $method->invoke(null,
+ array('false'), array('flags'=>array('spvar'=>true,'debug'=>0)), true
+ ));
+ $this->assertEquals(array(2, '2'), $method->invoke(null,
+ array('2'), array('flags'=>array('spvar'=>true,'debug'=>0)), true
+ ));
+ $this->assertEquals(array('((isset($in[\'@index\']) && is_array($in)) ? $in[\'@index\'] : null)', '[@index]'), $method->invoke(null,
+ array('@index'), array('flags'=>array('spvar'=>false,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ ));
+ $this->assertEquals(array("((isset(\$cx['sp_vars']['index']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['index'] : null)", '@[index]'), $method->invoke(null,
+ array('@index'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ ));
+ $this->assertEquals(array("((isset(\$cx['sp_vars']['key']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['key'] : null)", '@[key]'), $method->invoke(null,
+ array('@key'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ ));
+ $this->assertEquals(array("((isset(\$cx['sp_vars']['first']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['first'] : null)", '@[first]'), $method->invoke(null,
+ array('@first'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ ));
+ $this->assertEquals(array("((isset(\$cx['sp_vars']['last']) && is_array(\$cx['sp_vars'])) ? \$cx['sp_vars']['last'] : null)", '@[last]'), $method->invoke(null,
+ array('@last'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ ));
+ $this->assertEquals(array('\'a\'', '"a"'), $method->invoke(null,
+ array('"a"'), array('flags'=>array('spvar'=>true,'debug'=>0))
+ ));
+ $this->assertEquals(array('((isset($in[\'a\']) && is_array($in)) ? $in[\'a\'] : null)', '[a]'), $method->invoke(null,
+ array('a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ ));
+ $this->assertEquals(array('((isset($cx[\'scopes\'][count($cx[\'scopes\'])-1][\'a\']) && is_array($cx[\'scopes\'][count($cx[\'scopes\'])-1])) ? $cx[\'scopes\'][count($cx[\'scopes\'])-1][\'a\'] : null)', '../[a]'), $method->invoke(null,
+ array(1,'a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ ));
+ $this->assertEquals(array('((isset($cx[\'scopes\'][count($cx[\'scopes\'])-3][\'a\']) && is_array($cx[\'scopes\'][count($cx[\'scopes\'])-3])) ? $cx[\'scopes\'][count($cx[\'scopes\'])-3][\'a\'] : null)', '../../../[a]'), $method->invoke(null,
+ array(3,'a'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ ));
+ $this->assertEquals(array('((isset($in[\'id\']) && is_array($in)) ? $in[\'id\'] : null)', 'this.[id]'), $method->invoke(null,
+ array(null, 'id'), array('flags'=>array('spvar'=>true,'debug'=>0,'prop'=>0,'method'=>0,'mustlok'=>0))
+ ));
+ $this->assertEquals(array('LCRun3::v($cx, $in, array(\'id\'))', 'this.[id]'), $method->invoke(null,
+ array(null, 'id'), array('flags'=>array('prop'=>true,'spvar'=>true,'debug'=>0,'method'=>0,'mustlok'=>0,'standalone'=>0))
+ ));
+ }
+ /**
+ * @covers LightnCandy::getExpression
+ */
+ public function testOn_getExpression() {
+ $method = new ReflectionMethod('LightnCandy', 'getExpression');
+ $method->setAccessible(true);
+ $this->assertEquals('[a].[b]', $method->invoke(null,
+ 0, false, array('a', 'b')
+ ));
+ $this->assertEquals('@[root]', $method->invoke(null,
+ 0, true, array('root')
+ ));
+ $this->assertEquals('this', $method->invoke(null,
+ 0, false, null
+ ));
+ $this->assertEquals('this.[id]', $method->invoke(null,
+ 0, false, array(null, 'id')
+ ));
+ $this->assertEquals('@[root].[a].[b]', $method->invoke(null,
+ 0, true, array('root', 'a', 'b')
+ ));
+ $this->assertEquals('../../[a].[b]', $method->invoke(null,
+ 2, false, array('a', 'b')
+ ));
+ $this->assertEquals('../[a\'b]', $method->invoke(null,
+ 1, false, array('a\'b')
+ ));
+ }
+ /**
+ * @covers LightnCandy::fixVariable
+ */
+ public function testOn_fixVariable() {
+ $method = new ReflectionMethod('LightnCandy', 'fixVariable');
+ $method->setAccessible(true);
+ $this->assertEquals(array('this'), $method->invoke(null,
+ 'this', array('flags' => array('advar' => 0, 'this' => 0))
+ ));
+ $this->assertEquals(array(null), $method->invoke(null,
+ 'this', array('flags' => array('advar' => 0, 'this' => 1))
+ ));
+ $this->assertEquals(array(1, null), $method->invoke(null,
+ '../', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ ));
+ $this->assertEquals(array(1, null), $method->invoke(null,
+ '../.', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ ));
+ $this->assertEquals(array(1, null), $method->invoke(null,
+ '../this', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ ));
+ $this->assertEquals(array(1, 'a'), $method->invoke(null,
+ '../a', array('flags' => array('advar' => 0, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ ));
+ $this->assertEquals(array(2, 'a', 'b'), $method->invoke(null,
+ '../../a.b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ ));
+ $this->assertEquals(array(2, '[a]', 'b'), $method->invoke(null,
+ '../../[a].b', array('flags' => array('advar' => 0, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ ));
+ $this->assertEquals(array(2, 'a', 'b'), $method->invoke(null,
+ '../../[a].b', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ ));
+ $this->assertEquals(array('"a.b"'), $method->invoke(null,
+ '"a.b"', array('flags' => array('advar' => 1, 'this' => 0, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ ));
+ $this->assertEquals(array(null, 'id'), $method->invoke(null,
+ 'this.id', array('flags' => array('advar' => 1, 'this' => 1, 'parent' => 1), 'usedFeature' => array('parent' => 0))
+ ));
+ }
+ /**
+ * @covers LightnCandy::parseTokenArgs
+ */
+ public function testOn_parseTokenArgs() {
+ $method = new ReflectionMethod('LightnCandy', 'parseTokenArgs');
+ $method->setAccessible(true);
+ $this->assertEquals(array(false, array(array(null))), $method->invoke(null,
+ array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(true, array(array(null))), $method->invoke(null,
+ array(0,0,0,'{{{',0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(true, array(array(null))), $method->invoke(null,
+ array(0,0,0,0,0,0,''), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 1))
+ ));
+ $this->assertEquals(array(false, array(array('a'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), array('b'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a b'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), array('"b'), array('c"'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), array('"b c"'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a "b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), array('[b'), array('c]'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), array('[b'), array('c]'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), array('b c'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 0, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), array('b c'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a [b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), 'q' => array('b c'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), array('q=[b c'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a [q=[b c]'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), 'q' => array('[b'), array('c]'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a q=[b c]'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), 'q' => array('b'), array('c'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a [q]=b c'), array('flags' => array('advar' => 0, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('a'), 'q' => array('"b c"'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'a q="b c"'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('(foo bar)'))), $method->invoke(null,
+ array(0,0,0,0,0,0,'(foo bar)'), array('flags' => array('advar' => 1, 'this' => 1, 'namev' => 1, 'noesc' => 0))
+ ));
+ $this->assertEquals(array(false, array(array('foo'), array("'=='"), array('bar'))), $method->invoke(null,
+ array(0,0,0,0,0,0,"foo '==' bar"), array('flags' => array('advar' => 1, 'namev' => 1))
+ ));
+ }
+ /**
+ * @covers LightnCandy::tokenString
+ */
+ public function testOn_tokenString() {
+ $method = new ReflectionMethod('LightnCandy', 'tokenString');
+ $method->setAccessible(true);
+ $this->assertEquals('b', $method->invoke(null,
+ array(0, 'a', 'b', 'c'), 1
+ ));
+ $this->assertEquals('c', $method->invoke(null,
+ array(0, 'a', 'b', 'c', 'd', 'e')
+ ));
+ }
+ /**
+ * @covers LightnCandy::validateStartEnd
+ */
+ public function testOn_validateStartEnd() {
+ $method = new ReflectionMethod('LightnCandy', 'validateStartEnd');
+ $method->setAccessible(true);
+ $this->assertEquals(null, $method->invoke(null,
+ array_fill(0, 9, ''), array()
+ ));
+ $this->assertEquals(null, $method->invoke(null,
+ array_fill(0, 9, '}}'), array()
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array_fill(0, 9, '{{{'), array()
+ ));
+ }
+ /**
+ * @covers LightnCandy::validateOperations
+ */
+ public function testOn_validateOperations() {
+ $method = new ReflectionMethod('LightnCandy', 'validateOperations');
+ $method->setAccessible(true);
+ $this->assertEquals(null, $method->invoke(null,
+ array(0, 0, 0, 0, 0, ''), array(), array()
+ ));
+ $this->assertEquals(2, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '^', '...'), array('usedFeature' => array('isec' => 1), 'level' => 0), array(array('foo'))
+ ));
+ $this->assertEquals(3, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '!', '...'), array('usedFeature' => array('comment' => 2)), array()
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '/'), array('stack' => array(1), 'level' => 1), array()
+ ));
+ $this->assertEquals(4, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('sec' => 3), 'level' => 0), array(array('x'))
+ ));
+ $this->assertEquals(5, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('if' => 4), 'level' => 0), array(array('if'))
+ ));
+ $this->assertEquals(6, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('with' => 5), 'level' => 0, 'flags' => array('with' => 1)), array(array('with'))
+ ));
+ $this->assertEquals(7, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('each' => 6), 'level' => 0), array(array('each'))
+ ));
+ $this->assertEquals(8, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '#', '...'), array('usedFeature' => array('unless' => 7), 'level' => 0), array(array('unless'))
+ ));
+ $this->assertEquals(9, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '#', '...'), array('blockhelpers' => array('abc' => ''), 'usedFeature' => array('bhelper' => 8), 'level' => 0), array(array('abc'))
+ ));
+ $this->assertEquals(10, $method->invoke(null,
+ array(0, 0, 0, 0, 0, ' ', '...'), array('usedFeature' => array('delimiter' => 9), 'level' => 0), array()
+ ));
+ $this->assertEquals(11, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '#', '...'), array('hbhelpers' => array('abc' => ''), 'usedFeature' => array('hbhelper' => 10), 'level' => 0), array(array('abc'))
+ ));
+ $this->assertEquals(true, $method->invoke(null,
+ array(0, 0, 0, 0, 0, '>', '...'), array('basedir' => array('.'), 'fileext' => array('.tmpl'), 'usedFeature' => array('unless' => 7, 'partial' => 7), 'level' => 0, 'flags' => array('skippartial' => 0)), array('test')
+ ));
+ }
+ /**
+ * @covers LightnCandy::addUsageCount
+ */
+ public function testOn_addUsageCount() {
+ $method = new ReflectionMethod('LightnCandy', 'addUsageCount');
+ $method->setAccessible(true);
+ $this->assertEquals(1, $method->invoke(null,
+ array('usedCount' => array('test' => array())), 'test', 'testname'
+ ));
+ $this->assertEquals(3, $method->invoke(null,
+ array('usedCount' => array('test' => array('testname' => 2))), 'test', 'testname'
+ ));
+ $this->assertEquals(5, $method->invoke(null,
+ array('usedCount' => array('test' => array('testname' => 2))), 'test', 'testname', 3
+ ));
+ }
+}
+?> \ No newline at end of file
diff --git a/vendor/zordius/lightncandy/tests/errorTest.php b/vendor/zordius/lightncandy/tests/errorTest.php
new file mode 100644
index 00000000..30ecd97d
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/errorTest.php
@@ -0,0 +1,410 @@
+<?php
+
+require_once('src/lightncandy.php');
+require_once('tests/helpers_for_test.php');
+
+$tmpdir = sys_get_temp_dir();
+$errlog_fn = tempnam($tmpdir, 'terr_');
+
+function start_catch_error_log() {
+ global $errlog_fn;
+ date_default_timezone_set('GMT');
+ if (file_exists($errlog_fn)) {
+ unlink($errlog_fn);
+ }
+ return ini_set('error_log', $errlog_fn);
+}
+
+function stop_catch_error_log() {
+ global $errlog_fn;
+ ini_restore('error_log');
+ if (!file_exists($errlog_fn)) {
+ return null;
+ }
+ return array_map(function ($l) {
+ $l = rtrim($l);
+ preg_match('/GMT\] (.+)/', $l, $m);
+ return isset($m[1]) ? $m[1] : $l;
+ }, file($errlog_fn));
+}
+
+class errorTest extends PHPUnit_Framework_TestCase
+{
+ public function testException()
+ {
+ $this->setExpectedException('Exception', 'Bad token {{{foo}} ! Do you mean {{foo}} or {{{foo}}}?');
+ $php = LightnCandy::compile('{{{foo}}', Array('flags' => LightnCandy::FLAG_ERROR_EXCEPTION));
+ }
+
+ public function testErrorLog()
+ {
+ start_catch_error_log();
+ $php = LightnCandy::compile('{{{foo}}', Array('flags' => LightnCandy::FLAG_ERROR_LOG));
+ $e = stop_catch_error_log();
+ if ($e) {
+ $this->assertEquals(Array('Bad token {{{foo}} ! Do you mean {{foo}} or {{{foo}}}?'), $e);
+ } else {
+ $this->markTestIncomplete('skip HHVM');
+ }
+ }
+
+ /**
+ * @dataProvider renderErrorProvider
+ */
+ public function testRenderingException($test)
+ {
+ $this->setExpectedException('Exception', $test['expected']);
+ $php = LightnCandy::compile($test['template'], $test['options']);
+ $renderer = LightnCandy::prepare($php);
+ $renderer(null, LCRun3::DEBUG_ERROR_EXCEPTION);
+ }
+
+ /**
+ * @dataProvider renderErrorProvider
+ */
+ public function testRenderingErrorLog($test)
+ {
+ start_catch_error_log();
+ $php = LightnCandy::compile($test['template'], $test['options']);
+ $renderer = LightnCandy::prepare($php);
+ $renderer(null, LCRun3::DEBUG_ERROR_LOG);
+ $e = stop_catch_error_log();
+ if ($e) {
+ $this->assertEquals(Array($test['expected']), $e);
+ } else {
+ $this->markTestIncomplete('skip HHVM');
+ }
+ }
+
+ public function renderErrorProvider()
+ {
+ $errorCases = Array(
+ Array(
+ 'template' => '{{{foo}}}',
+ 'expected' => 'LCRun3: [foo] is not exist',
+ ),
+ Array(
+ 'template' => '{{foo}}',
+ 'options' => Array(
+ 'hbhelpers' => Array(
+ 'foo' => function () {
+ return 1/0;
+ }
+ ),
+ ),
+ 'expected' => 'LCRun3: call custom helper \'foo\' error: Division by zero',
+ ),
+ );
+
+ return array_map(function($i) {
+ if (!isset($i['options'])) {
+ $i['options'] = Array('flags' => LightnCandy::FLAG_RENDER_DEBUG);
+ }
+ if (!isset($i['options']['flags'])) {
+ $i['options']['flags'] = LightnCandy::FLAG_RENDER_DEBUG;
+ }
+ return Array($i);
+ }, $errorCases);
+ }
+
+ /**
+ * @dataProvider errorProvider
+ */
+ public function testErrors($test)
+ {
+ global $tmpdir;
+
+ $php = LightnCandy::compile($test['template'], $test['options']);
+ $context = LightnCandy::getContext();
+
+ // This case should be compiled without error
+ if (!isset($test['expected'])) {
+ return;
+ }
+
+ $this->assertEquals($test['expected'], $context['error'], "Code: $php");
+ }
+
+ public function errorProvider()
+ {
+ $errorCases = Array(
+ Array(
+ 'template' => '{{testerr1}}}',
+ 'expected' => 'Bad token {{testerr1}}} ! Do you mean {{testerr1}} or {{{testerr1}}}?',
+ ),
+ Array(
+ 'template' => '{{{testerr2}}',
+ 'expected' => 'Bad token {{{testerr2}} ! Do you mean {{testerr2}} or {{{testerr2}}}?',
+ ),
+ Array(
+ 'template' => '{{{#testerr3}}}',
+ 'expected' => 'Bad token {{{#testerr3}}} ! Do you mean {{#testerr3}} ?',
+ ),
+ Array(
+ 'template' => '{{{!testerr4}}}',
+ 'expected' => 'Bad token {{{!testerr4}}} ! Do you mean {{!testerr4}} ?',
+ ),
+ Array(
+ 'template' => '{{{^testerr5}}}',
+ 'expected' => 'Bad token {{{^testerr5}}} ! Do you mean {{^testerr5}} ?',
+ ),
+ Array(
+ 'template' => '{{{/testerr6}}}',
+ 'expected' => 'Bad token {{{/testerr6}}} ! Do you mean {{/testerr6}} ?',
+ ),
+ Array(
+ 'template' => '{{win[ner.test1}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming in {{win[ner.test1}}',
+ ),
+ Array(
+ 'template' => '{{win]ner.test2}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'win]ner.test2\' in {{win]ner.test2}} !',
+ ),
+ Array(
+ 'template' => '{{wi[n]ner.test3}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'wi[n]ner.test3\' in {{wi[n]ner.test3}} !',
+ ),
+ Array(
+ 'template' => '{{winner].[test4]}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'winner].[test4]\' in {{winner].[test4]}} !',
+ ),
+ Array(
+ 'template' => '{{winner[.test5]}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'winner[.test5]\' in {{winner[.test5]}} !',
+ ),
+ Array(
+ 'template' => '{{winner.[.test6]}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ ),
+ Array(
+ 'template' => '{{winner.[#te.st7]}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ ),
+ Array(
+ 'template' => '{{test8}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ ),
+ Array(
+ 'template' => '{{test9]}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'test9]\' in {{test9]}} !',
+ ),
+ Array(
+ 'template' => '{{testA[}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'testA[\' in {{testA[}} !',
+ ),
+ Array(
+ 'template' => '{{[testB}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming in {{[testB}}',
+ ),
+ Array(
+ 'template' => '{{]testC}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \']testC\' in {{]testC}} !',
+ ),
+ Array(
+ 'template' => '{{[testD]}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ ),
+ Array(
+ 'template' => '{{te]stE}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'te]stE\' in {{te]stE}} !',
+ ),
+ Array(
+ 'template' => '{{tee[stF}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming in {{tee[stF}}',
+ ),
+ Array(
+ 'template' => '{{te.e[stG}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming in {{te.e[stG}}',
+ ),
+ Array(
+ 'template' => '{{te.e]stH}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'te.e]stH\' in {{te.e]stH}} !',
+ ),
+ Array(
+ 'template' => '{{te.e[st.endI}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming in {{te.e[st.endI}}',
+ ),
+ Array(
+ 'template' => '{{te.e]st.endJ}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'te.e]st.endJ\' in {{te.e]st.endJ}} !',
+ ),
+ Array(
+ 'template' => '{{te.[est].endK}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ ),
+ Array(
+ 'template' => '{{te.t[est].endL}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'te.t[est].endL\' in {{te.t[est].endL}} !',
+ ),
+ Array(
+ 'template' => '{{te.t[est]o.endM}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'te.t[est]o.endM\' in {{te.t[est]o.endM}} !',
+ ),
+ Array(
+ 'template' => '{{te.[est]o.endN}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ 'expected' => 'Wrong variable naming as \'te.[est]o.endN\' in {{te.[est]o.endN}} !',
+ ),
+ Array(
+ 'template' => '{{te.[e.st].endO}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ ),
+ Array(
+ 'template' => '{{te.[e.s[t].endP}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ ),
+ Array(
+ 'template' => '{{te.[e[s.t].endQ}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME),
+ ),
+ Array(
+ 'template' => '{{helper}}',
+ 'options' => Array('helpers' => Array(
+ 'helper' => Array('bad input'),
+ )),
+ 'expected' => 'I found an array in helpers with key as helper, please fix it.',
+ ),
+ Array(
+ 'template' => '<ul>{{#each item}}<li>{{name}}</li>',
+ 'expected' => 'Unclosed token {{{#each item}}} !!',
+ ),
+ Array(
+ 'template' => 'issue63: {{test_join}} Test! {{this}} {{/test_join}}',
+ 'expected' => 'Unexpect token: {{/test_join}} !',
+ ),
+ Array(
+ 'template' => '{{#if a}}TEST{{/with}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_WITH),
+ 'expected' => 'Unexpect token: {{/with}} !',
+ ),
+ Array(
+ 'template' => '{{#foo}}error{{/bar}}',
+ 'expected' => 'Unexpect token {{/bar}} ! Previous token {{#[foo]}} is not closed',
+ ),
+ Array(
+ 'template' => '{{../foo}}',
+ 'expected' => 'Do not support {{../var}}, you should do compile with LightnCandy::FLAG_PARENT flag',
+ ),
+ Array(
+ 'template' => '{{..}}',
+ 'expected' => 'Do not support {{../var}}, you should do compile with LightnCandy::FLAG_PARENT flag',
+ ),
+ Array(
+ 'template' => '{{test_join [a]=b}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_NAMEDARG,
+ 'helpers' => Array('test_join')
+ ),
+ 'expected' => "Wrong argument name as '[a]' in {{test_join [a]=b}} ! You should fix your template or compile with LightnCandy::FLAG_ADVARNAME flag.",
+ ),
+ Array(
+ 'template' => '{{a=b}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_NAMEDARG),
+ 'expected' => 'Do not support name=value in {{a=b}}, you should use it after a custom helper.',
+ ),
+ Array(
+ 'template' => '{{test a=b}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_NAMEDARG),
+ 'expected' => 'Do not support name=value in {{test a=b}}, maybe you missing the custom helper?',
+ ),
+ Array(
+ 'template' => '{{#test a=b}}YA~{{/test}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_NAMEDARG),
+ 'expected' => 'Do not support name=value in {{#test a=b}}, maybe you missing the block custom helper?',
+ ),
+ Array(
+ 'template' => '{{#foo}}1{{^}}2{{/foo}}',
+ 'expected' => 'Do not support {{^}}, you should do compile with LightnCandy::FLAG_ELSE flag',
+ ),
+ Array(
+ 'template' => '{{#with a}OK!{{/with}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_WITH),
+ 'expected' => 'Unclosed token {{{#with a}OK!{{/with}}} !!',
+ ),
+ Array(
+ 'template' => '{{#each a}OK!{{/each}}',
+ 'expected' => 'Unclosed token {{{#each a}OK!{{/each}}} !!',
+ ),
+ Array(
+ 'template' => '{{#with items}}OK!{{/with}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_WITH),
+ ),
+ Array(
+ 'template' => '{{#with}}OK!{{/with}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_WITH),
+ 'expected' => 'No argument after {{#with}} !',
+ ),
+ Array(
+ 'template' => '{{>not_found}}',
+ 'expected' => "Can not find partial file for 'not_found', you should set correct basedir and fileext in options",
+ ),
+ Array(
+ 'template' => '{{>tests/test1 foo}}',
+ 'options' => Array('basedir' => '.'),
+ 'expected' => 'Do not support {{>tests/test1 [foo]}}, you should do compile with LightnCandy::FLAG_RUNTIMEPARTIAL flag',
+ ),
+ Array(
+ 'template' => '{{#with foo}}ABC{{/with}}',
+ 'expected' => 'Do not support {{#with var}}, you should do compile with LightnCandy::FLAG_WITH flag',
+ ),
+ Array(
+ 'template' => '{{abc}}',
+ 'options' => Array('helpers' => Array('abc')),
+ 'expected' => 'Can not find custom helper function defination abc() !',
+ ),
+ Array(
+ 'template' => '{{=~= =~=}}',
+ 'expected' => "Can not set delimiter contains '=' , you try to set delimiter as '~=' and '=~'.",
+ ),
+ Array(
+ 'template' => '{{>recursive}}',
+ 'options' => Array('basedir' => 'tests', 'flags' => LightnCandy::FLAG_WITH),
+ 'expected' => Array(
+ 'I found recursive partial includes as the path: recursive -> recursive! You should fix your template or compile with LightnCandy::FLAG_RUNTIMEPARTIAL flag.',
+ "Skip rendering partial 'recursive' again due to recursive detected",
+ )
+ ),
+ Array(
+ 'template' => '{{test_join (foo bar)}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_ADVARNAME,
+ 'helpers' => Array('test_join'),
+ ),
+ 'expected' => "Custom helper 'foo' not found!",
+ ),
+ );
+
+ return array_map(function($i) {
+ if (!isset($i['options'])) {
+ $i['options'] = Array('flags' => 0);
+ }
+ if (!isset($i['options']['flags'])) {
+ $i['options']['flags'] = 0;
+ }
+ if (isset($i['expected']) && !is_array($i['expected'])) {
+ $i['expected'] = Array($i['expected']);
+ }
+ return Array($i);
+ }, $errorCases);
+ }
+}
+
+
+?>
diff --git a/vendor/zordius/lightncandy/tests/example_debug.php b/vendor/zordius/lightncandy/tests/example_debug.php
new file mode 100644
index 00000000..bc573e0d
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/example_debug.php
@@ -0,0 +1,28 @@
+<?php
+require('src/lightncandy.php');
+
+$template = "Hello! {{name}} is {{gender}}.
+Test1: {{@root.name}}
+Test2: {{@root.gender}}
+Test3: {{../test3}}
+Test4: {{../../test4}}
+Test5: {{../../.}}
+Test6: {{../../[test'6]}}
+{{#each .}}
+each Value: {{.}}
+{{/each}}
+{{#.}}
+section Value: {{.}}
+{{/.}}
+{{#if .}}IF OK!{{/if}}
+{{#unless .}}Unless not OK!{{/unless}}
+";
+
+$php = LightnCandy::compile($template, Array(
+ 'flags' => LightnCandy::FLAG_RENDER_DEBUG | LightnCandy::FLAG_HANDLEBARSJS
+));
+
+$renderer = LightnCandy::prepare($php);
+error_reporting(0);
+echo $renderer(Array('name' => 'John'), LCRun3::DEBUG_TAGS_ANSI);
+?>
diff --git a/vendor/zordius/lightncandy/tests/example_helpers.php b/vendor/zordius/lightncandy/tests/example_helpers.php
new file mode 100644
index 00000000..f5e67d6f
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/example_helpers.php
@@ -0,0 +1,58 @@
+<?php
+
+// Custom Helper Interface ... noname arguments
+// Template: {{helper1 article.url article.text}}
+function helper1 ($args, $named) {
+ $u = (isset($args[0])) ? $args[0] : 'undefined';
+ $t = (isset($args[1])) ? $args[1] : 'undefined';
+ return "<a href=\"{$u}\">{$t}</a>";
+}
+
+// Custom Helper Interface ... named arguments
+// Template: {{helper1 url=article.url text=article.text [ur"l]=article.extra}}
+function helper2 ($args, $named) {
+ $u = isset($named['url']) ? jsraw($named['url']) : 'undefined';
+ $t = isset($named['text']) ? jsraw($named['text']) : 'undefined';
+ $x = isset($named['ur"l']) ? $named['ur"l'] : 'undefined';
+ return "<a href=\"{$u}\">{$t}</a>({$x})";
+}
+
+// Block Custom Helper Interface ...
+// Template: {{helper3 articles}}
+function helper3 ($cx, $args, $named) {
+ return Array('test1', 'test2', 'test3');
+}
+
+// Block Custom Helper Interface ...
+// Template: {{helper3 val=values odd=enable_odd}}
+function helper4 ($cx, $args, $named) {
+ if (isset($named['val']) && is_array($cx)) {
+ $cx['helper4_value'] = $named['val'] % 2;
+ return $cx;
+ }
+ if (isset($named['odd'])) {
+ return Array(1,3,5,7,9);
+ }
+}
+
+// Handlebars.js Custom Helper Interface ...
+// Template: {{#myeach articles}}Article: ....{{/myeach}}
+function myeach ($list, $options) {
+ foreach ($list as $item) {
+ $ret .= $options['fn']($item);
+ }
+ return $ret;
+}
+
+// Simulate Javascript toString() behaviors
+function jsraw ($i) {
+ if ($i === true) {
+ return 'true';
+ }
+ if ($i === false) {
+ return 'false';
+ }
+ return $i;
+}
+
+?>
diff --git a/vendor/zordius/lightncandy/tests/handlebarsSpecTest.php b/vendor/zordius/lightncandy/tests/handlebarsSpecTest.php
new file mode 100644
index 00000000..5124b226
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/handlebarsSpecTest.php
@@ -0,0 +1,162 @@
+<?php
+
+require_once('src/lightncandy.php');
+
+$tmpdir = sys_get_temp_dir();
+
+class HandlebarsSpecTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider jsonSpecProvider
+ */
+ public function testSpecs($spec)
+ {
+ global $tmpdir;
+
+ //// Skip bad specs
+ // No expect in spec
+ if (!isset($spec['expected'])) {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , no expected result in spec, skip.");
+ }
+ // This spec is bad , lightncandy result as '} hello }' and same with mustache.js
+ if ($spec['template'] === '{{{{raw}}}} {{test}} {{{{/raw}}}}') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , bad spec, skip.");
+ }
+ // missing partial in this spec
+ if ($spec['it'] === 'rendering function partial in vm mode') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , bad spec, skip.");
+ }
+ // Helper depend on an external class, skip it now.
+ if ($spec['it'] === 'simple literals work') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , external class not found, skip.");
+ }
+ // partial not found: global_test
+ if ($spec['message'] === 'Partials can use globals or passed') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , partial not found, skip.");
+ }
+ // lambda not found in spec
+ if ($spec['it'] === "bug reported by @fat where lambdas weren't being properly resolved") {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , lambda not found, skip.");
+ }
+
+ //// Skip unsupported features
+ // can not get any hint of 'function' from handlebars-spec , maybe it is a conversion error.
+ if (($spec['description'] === 'basic context') && preg_match('/functions/', $spec['it'])) {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , undefined function in spec json, skip.");
+ }
+ if (preg_match('/(.+) with function argument/', $spec['it'])) {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , undefined function in spec json, skip.");
+ }
+ if ($spec['it'] === 'Functions are bound to the context in knownHelpers only mode') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , undefined function in spec json, skip.");
+ }
+ if ($spec['it'] === 'lambdas are resolved by blockHelperMissing, not handlebars proper') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , undefined function in spec json, skip.");
+ }
+ if ($spec['description'] === '#SafeString') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , undefined function in spec json, skip.");
+ }
+
+ // Do not support includeZero now
+ if (($spec['description'] === '#if') && preg_match('/includeZero=true/', $spec['template'])) {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , lightncandy do not support this now.");
+ }
+
+ // Do not support setting options.data now
+ if ($spec['it'] === 'data passed to helpers') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , lightncandy do not support this now.");
+ }
+
+ // Do not support buildin helper : lookup now
+ if ($spec['description'] == '#lookup') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , lightncandy do not support this now.");
+ }
+
+ // Lightncandy will not support old path style as foo/bar , now only support foo.bar .
+ if ($spec['it'] === 'literal paths') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , lightncandy do not support this now.");
+ }
+
+ // Do not support {{~{foo}~}} , use {{{~foo~}}}
+ if ($spec['template'] === ' {{~{foo}~}} ') {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , lightncandy do not support this now.");
+ }
+
+ // setup helpers
+ $helpers = Array();
+ if (isset($spec['helpers'])) {
+ foreach ($spec['helpers'] as $name => $func) {
+ if (!isset($func['php'])) {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , no PHP helper code provided for this case.");
+ }
+
+ // Wrong PHP helper interface in spec, skip.
+ preg_match('/function\s*\(.+?\)/', isset($func['javascript']) ? $func['javascript'] : '', $js_args);
+ preg_match('/function\s*\(.+?\)/', $func['php'], $php_args);
+ $jsn = isset($js_args[0]) ? substr_count($js_args[0], ',') : 0;
+ $phpn = isset($php_args[0]) ? substr_count($php_args[0], ',') : 0;
+ if ($jsn !== $phpn) {
+ $this->markTestIncomplete("Skip [{$spec['file']}#{$spec['description']}]#{$spec['no']} , PHP helper interface is wrong.");
+ }
+
+ $hname = "custom_helper_{$spec['no']}_$name";
+ $helpers[$name] = $hname;
+ eval(preg_replace('/function/', "function $hname", $func['php'], 1));
+ }
+
+ }
+
+ if (($spec['it'] === 'tokenizes hash arguments') || ($spec['it'] === 'tokenizes special @ identifiers')) {
+ $helpers['foo'] = function () {return 'ABC';};
+ }
+
+ $flag = LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_ERROR_EXCEPTION | LightnCandy::FLAG_RUNTIMEPARTIAL | LightnCandy::FLAG_EXTHELPER | LightnCandy::FLAG_ERROR_SKIPPARTIAL | LightnCandy::FLAG_EXTHELPER;
+
+ foreach (Array($flag, $flag | LightnCandy::FLAG_STANDALONE) as $f) {
+ try {
+ $php = LightnCandy::compile($spec['template'], Array(
+ 'flags' => $f,
+ 'hbhelpers' => $helpers,
+ 'basedir' => $tmpdir,
+ 'partials' => isset($spec['partials']) ? $spec['partials'] : null,
+ ));
+ } catch (Exception $e) {
+ if (($spec['description'] === 'Tokenizer') && preg_match('/tokenizes inverse .+ as "OPEN_INVERSE.+CLOSE"/', $spec['it'])) {
+ continue;
+ }
+ print_r(LightnCandy::getContext());
+ $this->fail('Exception:' . $e->getMessage());
+ }
+ $renderer = LightnCandy::prepare($php);
+ if ($spec['description'] === 'Tokenizer') {
+ // no compile error means passed
+ continue;
+ }
+ $this->assertEquals($spec['expected'], $renderer($spec['data']), "[{$spec['file']}#{$spec['description']}]#{$spec['no']}:{$spec['it']} PHP CODE: $php");
+ }
+ }
+
+ public function jsonSpecProvider()
+ {
+ $ret = Array();
+
+ foreach (glob('specs/handlebars/spec/*.json') as $file) {
+ $i=0;
+ $json = json_decode(file_get_contents($file), true);
+ $ret = array_merge($ret, array_map(function ($d) use ($file, &$i) {
+ $d['file'] = $file;
+ $d['no'] = ++$i;
+ if (!isset($d['message'])) {
+ $d['message'] = null;
+ }
+ if (!isset($d['data'])) {
+ $d['data'] = null;
+ }
+ return Array($d);
+ }, $json));
+ }
+
+ return $ret;
+ }
+}
+?>
diff --git a/vendor/zordius/lightncandy/tests/helpers_for_test.php b/vendor/zordius/lightncandy/tests/helpers_for_test.php
new file mode 100644
index 00000000..93a1dbc7
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/helpers_for_test.php
@@ -0,0 +1,137 @@
+<?php
+
+// Classes for inputs or helpers
+class myClass {
+ function test() {
+ return 'testMethod OK!';
+ }
+
+ function helper2($arg) {
+ return "=$arg=";
+ }
+
+ function __call($method, $args) {
+ return "-- $method:" . print_r($args, true);
+ }
+}
+
+class foo {
+ public $prop = 'Yes!';
+
+ function bar() {
+ return 'OK!';
+ }
+}
+
+class twoDimensionIterator implements Iterator {
+ private $position = 0;
+ private $x = 0;
+ private $y = 0;
+ private $w = 0;
+ private $h = 0;
+
+ public function __construct($w, $h) {
+ $this->w = $w;
+ $this->h = $h;
+ $this->rewind();
+ }
+
+ function rewind() {
+ $this->position = 0;
+ $this->x = 0;
+ $this->y = 0;
+ }
+
+ function current() {
+ return $this->x * $this->y;
+ }
+
+ function key() {
+ return $this->x . 'x' . $this->y;
+ }
+
+ function next() {
+ ++$this->position;
+ $this->x = $this->position % $this->w;
+ $this->y = floor($this->position / $this->w);
+ }
+
+ function valid() {
+ return $this->position < $this->w * $this->h;
+ }
+}
+
+// Custom helpers
+function helper1($arg) {
+ return "-$arg-";
+}
+function alink($u, $t) {
+ return "<a href=\"$u\">$t</a>";
+}
+
+ function meetup_date_format() {
+ return "OKOK~1";
+}
+
+function meetup_date_format2() {
+ return "OKOK~2";
+}
+
+function meetup_date_format3 () {
+ return "OKOK~3";
+}
+
+function meetup_date_format4(){
+ return "OKOK~4";};
+
+
+function test_array ($input) {
+ return is_array($input[0]) ? 'IS_ARRAY' : 'NOT_ARRAY';
+}
+
+function test_join ($input) {
+ return join('.', $input[0]);
+}
+
+// Custom helpers for handlebars (should be used in hbhelpers)
+function myif ($conditional, $options) {
+ if ($conditional) {
+ return $options['fn']();
+ } else {
+ return $options['inverse']();
+ }
+}
+
+function mywith ($context, $options) {
+ return $options['fn']($context);
+}
+
+function myeach ($context, $options) {
+ $ret = '';
+ foreach ($context as $cx) {
+ $ret .= $options['fn']($cx);
+ }
+ return $ret;
+}
+
+function mylogic ($input, $yes, $no, $options) {
+ if ($input === true) {
+ return $options['fn']($yes);
+ } else {
+ return $options['inverse']($no);
+ }
+}
+
+function mydash ($a, $b) {
+ return "$a-$b";
+}
+
+function myjoin ($a, $b) {
+ return "$a$b";
+}
+
+function getroot ($options) {
+ return $options['data']['root'];
+}
+
+?>
diff --git a/vendor/zordius/lightncandy/tests/mustacheSpecTest.php b/vendor/zordius/lightncandy/tests/mustacheSpecTest.php
new file mode 100644
index 00000000..158f82cf
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/mustacheSpecTest.php
@@ -0,0 +1,53 @@
+<?php
+
+require_once('src/lightncandy.php');
+
+$tmpdir = sys_get_temp_dir();
+
+class MustacheSpecTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider jsonSpecProvider
+ */
+ public function testSpecs($spec)
+ {
+ global $tmpdir;
+
+ $flag = LightnCandy::FLAG_MUSTACHE | LightnCandy::FLAG_ERROR_EXCEPTION | LightnCandy::FLAG_RUNTIMEPARTIAL;
+
+ foreach (Array($flag, $flag | LightnCandy::FLAG_STANDALONE) as $f) {
+ $php = LightnCandy::compile($spec['template'], Array(
+ 'flags' => $f,
+ 'partials' => isset($spec['partials']) ? $spec['partials'] : null,
+ 'basedir' => $tmpdir,
+ ));
+ $renderer = LightnCandy::prepare($php);
+ $this->assertEquals($spec['expected'], $renderer($spec['data']), "[{$spec['file']}.{$spec['name']}]#{$spec['no']}:{$spec['desc']} PHP CODE: $php");
+ }
+ }
+
+ public function jsonSpecProvider()
+ {
+ $ret = Array();
+
+ foreach (glob('specs/mustache/specs/*.json') as $file) {
+ // Skip lambda extension
+ if (preg_match('/lambdas\\.json$/', $file)) {
+ continue;
+ }
+
+ $i=0;
+ $json = json_decode(file_get_contents($file), true);
+ $ret = array_merge($ret, array_map(function ($d) use ($file, &$i) {
+ $d['file'] = $file;
+ $d['no'] = ++$i;
+ return Array($d);
+ }, $json['tests']));
+ }
+
+ return $ret;
+ }
+}
+
+
+?>
diff --git a/vendor/zordius/lightncandy/tests/recursive.tmpl b/vendor/zordius/lightncandy/tests/recursive.tmpl
new file mode 100644
index 00000000..9e3290da
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/recursive.tmpl
@@ -0,0 +1 @@
+{{#if foo}}{{bar}} -> {{#with foo}}{{>recursive}}{{/with}}{{else}}END!{{/if}}
diff --git a/vendor/zordius/lightncandy/tests/regressionTest.php b/vendor/zordius/lightncandy/tests/regressionTest.php
new file mode 100644
index 00000000..bf591536
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/regressionTest.php
@@ -0,0 +1,736 @@
+<?php
+
+require_once('src/lightncandy.php');
+require_once('tests/helpers_for_test.php');
+
+$tmpdir = sys_get_temp_dir();
+
+class regressionTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider issueProvider
+ */
+ public function testIssues($issue)
+ {
+ global $tmpdir;
+
+ $php = LightnCandy::compile($issue['template'], isset($issue['options']) ? $issue['options'] : null);
+ $context = LightnCandy::getContext();
+ if (count($context['error'])) {
+ $this->fail('Compile failed due to:' . print_r($context['error'], true));
+ }
+ $renderer = LightnCandy::prepare($php);
+
+ $this->assertEquals($issue['expected'], $renderer($issue['data'], $issue['debug']), "PHP CODE:\n$php");
+ }
+
+ public function issueProvider()
+ {
+ $issues = Array(
+ Array(
+ 'id' => 39,
+ 'template' => '{{{tt}}}',
+ 'options' => null,
+ 'data' => Array('tt' => 'bla bla bla'),
+ 'expected' => 'bla bla bla'
+ ),
+
+ Array(
+ 'id' => 44,
+ 'template' => '<div class="terms-text"> {{render "artists-terms"}} </div>',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_ERROR_LOG | LightnCandy::FLAG_EXTHELPER,
+ 'helpers' => Array(
+ 'url',
+ 'render' => function($view,$data = array()) {
+ return 'OK!';
+ }
+ )
+ ),
+ 'data' => Array('tt' => 'bla bla bla'),
+ 'expected' => '<div class="terms-text"> OK! </div>'
+ ),
+
+ Array(
+ 'id' => 45,
+ 'template' => '{{{a.b.c}}}, {{a.b.bar}}, {{a.b.prop}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_ERROR_LOG | LightnCandy::FLAG_INSTANCE | LightnCandy::FLAG_HANDLEBARSJS,
+ ),
+ 'data' => Array('a' => Array('b' => new foo)),
+ 'expected' => ', OK!, Yes!'
+ ),
+
+ Array(
+ 'id' => 46,
+ 'template' => '{{{this.id}}}, {{a.id}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_THIS,
+ ),
+ 'data' => Array('id' => 'bla bla bla', 'a' => Array('id' => 'OK!')),
+ 'expected' => 'bla bla bla, OK!'
+ ),
+
+ Array(
+ 'id' => 49,
+ 'template' => '{{date_format}} 1, {{date_format2}} 2, {{date_format3}} 3, {{date_format4}} 4',
+ 'options' => Array(
+ 'helpers' => Array(
+ 'date_format' => 'meetup_date_format',
+ 'date_format2' => 'meetup_date_format2',
+ 'date_format3' => 'meetup_date_format3',
+ 'date_format4' => 'meetup_date_format4'
+ )
+ ),
+ 'data' => null,
+ 'expected' => 'OKOK~1 1, OKOK~2 2, OKOK~3 3, OKOK~4 4'
+ ),
+
+ Array(
+ 'id' => 52,
+ 'template' => '{{{test_array tmp}}} should be happy!',
+ 'options' => Array(
+ 'helpers' => Array(
+ 'test_array',
+ )
+ ),
+ 'data' => Array('tmp' => Array('A', 'B', 'C')),
+ 'expected' => 'IS_ARRAY should be happy!'
+ ),
+
+ Array(
+ 'id' => 62,
+ 'template' => '{{{test_join @root.foo.bar}}} should be happy!',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_ERROR_EXCEPTION,
+ 'helpers' => array('test_join')
+ ),
+ 'data' => Array('foo' => Array('A', 'B', 'bar' => Array('C', 'D'))),
+ 'expected' => 'C.D should be happy!',
+ ),
+
+ Array(
+ 'id' => 64,
+ 'template' => '{{#each foo}} Test! {{this}} {{/each}}{{> test1}} ! >>> {{>recursive}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_RUNTIMEPARTIAL,
+ 'basedir' => 'tests',
+ ),
+ 'data' => Array(
+ 'bar' => 1,
+ 'foo' => Array(
+ 'bar' => 3,
+ 'foo' => Array(
+ 'bar' => 5,
+ 'foo' => Array(
+ 'bar' => 7,
+ 'foo' => Array(
+ 'bar' => 11,
+ 'foo' => Array(
+ 'no foo here'
+ )
+ )
+ )
+ )
+ )
+ ),
+ 'expected' => " Test! 3 Test! [object Object] 123\n ! >>> 1 -> 3 -> 5 -> 7 -> 11 -> END!\n\n\n\n\n\n",
+ ),
+
+ Array(
+ 'id' => 66,
+ 'template' => '{{&foo}} , {{foo}}, {{{foo}}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS
+ ),
+ 'data' => Array('foo' => 'Test & " \' :)'),
+ 'expected' => 'Test & " \' :) , Test &amp; &quot; &#x27; :), Test & " \' :)',
+ ),
+
+ Array(
+ 'id' => 68,
+ 'template' => '{{#myeach foo}} Test! {{this}} {{/myeach}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ 'hbhelpers' => Array(
+ 'myeach' => function ($context, $options) {
+ $ret = '';
+ foreach ($context as $cx) {
+ $ret .= $options['fn']($cx);
+ }
+ return $ret;
+ }
+ )
+ ),
+ 'data' => Array('foo' => Array('A', 'B', 'bar' => Array('C', 'D', 'E'))),
+ 'expected' => ' Test! A Test! B Test! C,D,E ',
+ ),
+
+ Array(
+ 'id' => 81,
+ 'template' => '{{#with ../person}} {{^name}} Unknown {{/name}} {{/with}}?!',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_ERROR_EXCEPTION,
+ ),
+ 'data' => Array('parent?!' => Array('A', 'B', 'bar' => Array('C', 'D', 'E'))),
+ 'expected' => '?!'
+ ),
+
+ Array(
+ 'id' => 83,
+ 'template' => '{{> tests/test1}}',
+ 'options' => Array(
+ 'basedir' => '.',
+ ),
+ 'data' => null,
+ 'expected' => "123\n"
+ ),
+
+ Array(
+ 'id' => 85,
+ 'template' => '{{helper 1 foo bar="q"}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ 'hbhelpers' => Array(
+ 'helper' => function ($arg1, $arg2, $options) {
+ return "ARG1:$arg1, ARG2:$arg2, HASH:{$options['hash']['bar']}";
+ }
+ )
+ ),
+ 'data' => Array('foo' => 'BAR'),
+ 'expected' => 'ARG1:1, ARG2:BAR, HASH:q',
+ ),
+
+ Array(
+ 'id' => 88,
+ 'template' => '{{>test2}}',
+ 'options' => Array(
+ 'flags' => 0,
+ 'basedir' => 'tests',
+ ),
+ 'data' => null,
+ 'expected' => "a123\nb\n",
+ ),
+
+ Array(
+ 'id' => 89,
+ 'template' => '{{#with}}SHOW:{{.}} {{/with}}',
+ 'data' => Array('with' => Array(1, 3, 7), 'a' => Array(2, 4, 9)),
+ 'expected' => 'SHOW:1 SHOW:3 SHOW:7 ',
+ ),
+
+ Array(
+ 'id' => 90,
+ 'template' => '{{#items}}{{#value}}{{.}}{{/value}}{{/items}}',
+ 'data' => Array('items' => Array(Array('value'=>'123'))),
+ 'expected' => '123',
+ ),
+
+ Array(
+ 'id' => 109,
+ 'template' => '{{#if "OK"}}it\'s great!{{/if}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_NOESCAPE,
+ ),
+ 'data' => null,
+ 'expected' => 'it\'s great!',
+ ),
+
+ Array(
+ 'id' => 110,
+ 'template' => 'ABC{{#block "YES!"}}DEF{{foo}}GHI{{/block}}JKL',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_BESTPERFORMANCE,
+ 'hbhelpers' => Array(
+ 'block' => function ($name, $options) {
+ return "1-$name-2-" . $options['fn']() . '-3';
+ }
+ ),
+ ),
+ 'data' => Array('foo' => 'bar'),
+ 'expected' => 'ABC1-YES!-2-DEFbarGHI-3JKL',
+ ),
+
+ Array(
+ 'id' => 109,
+ 'template' => '{{foo}} {{> test}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_NOESCAPE,
+ 'partials' => Array('test' => '{{foo}}'),
+ ),
+ 'data' => Array('foo' => '<'),
+ 'expected' => '< <',
+ ),
+
+ Array(
+ 'id' => 114,
+ 'template' => '{{^myeach .}}OK:{{.}},{{else}}NOT GOOD{{/myeach}}',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_BESTPERFORMANCE,
+ 'hbhelpers' => Array(
+ 'myeach' => function ($context, $options) {
+ $ret = '';
+ foreach ($context as $cx) {
+ $ret .= $options['fn']($cx);
+ }
+ return $ret;
+ }
+ ),
+ ),
+ 'data' => Array(1, 'foo', 3, 'bar'),
+ 'expected' => 'NOT GOODNOT GOODNOT GOODNOT GOOD',
+ ),
+
+ Array(
+ 'template' => 'ABC{{#block "YES!"}}DEF{{foo}}GHI{{else}}NO~{{/block}}JKL',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_BESTPERFORMANCE,
+ 'hbhelpers' => Array(
+ 'block' => function ($name, $options) {
+ return "1-$name-2-" . $options['fn']() . '-3';
+ }
+ ),
+ ),
+ 'data' => Array('foo' => 'bar'),
+ 'expected' => 'ABC1-YES!-2-DEFbarGHI-3JKL',
+ ),
+
+ Array(
+ 'template' => '-{{getroot}}=',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_SPVARS,
+ 'hbhelpers' => Array('getroot'),
+ ),
+ 'data' => 'ROOT!',
+ 'expected' => '-ROOT!=',
+ ),
+
+ Array(
+ 'template' => 'A{{#each .}}-{{#each .}}={{.}},{{@key}},{{@index}},{{@../index}}~{{/each}}%{{/each}}B',
+ 'data' => Array(Array('a' => 'b'), Array('c' => 'd'), Array('e' => 'f')),
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_PARENT | LightnCandy::FLAG_THIS | LightnCandy::FLAG_SPVARS,
+ ),
+ 'expected' => 'A-=b,a,0,0~%-=d,c,0,1~%-=f,e,0,2~%B',
+ ),
+
+ Array(
+ 'template' => 'ABC{{#block "YES!"}}TRUE{{else}}DEF{{foo}}GHI{{/block}}JKL',
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_BESTPERFORMANCE,
+ 'hbhelpers' => Array(
+ 'block' => function ($name, $options) {
+ return "1-$name-2-" . $options['inverse']() . '-3';
+ }
+ ),
+ ),
+ 'data' => Array('foo' => 'bar'),
+ 'expected' => 'ABC1-YES!-2-DEFbarGHI-3JKL',
+ ),
+
+ Array(
+ 'template' => '{{#each .}}{{..}}>{{/each}}',
+ 'data' => Array('a', 'b', 'c'),
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ ),
+ 'expected' => 'a,b,c>a,b,c>a,b,c>',
+ ),
+
+ Array(
+ 'template' => '{{#each .}}->{{>tests/test3}}{{/each}}',
+ 'data' => Array('a', 'b', 'c'),
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ 'basedir' => '.',
+ ),
+ 'expected' => "->New context:a\n->New context:b\n->New context:c\n",
+ ),
+
+ Array(
+ 'template' => '{{#each .}}->{{>tests/test3 ../foo}}{{/each}}',
+ 'data' => Array('a', 'foo' => Array('d', 'e', 'f')),
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS | LightnCandy::FLAG_RUNTIMEPARTIAL,
+ 'basedir' => '.',
+ ),
+ 'expected' => "->New context:d,e,f\n->New context:d,e,f\n",
+ ),
+
+ Array(
+ 'template' => '{{{"{{"}}}',
+ 'data' => null,
+ 'expected' => '{{',
+ ),
+
+ Array(
+ 'template' => '{{good_helper}}',
+ 'data' => null,
+ 'options' => Array(
+ 'helpers' => Array('good_helper' => 'foo::bar'),
+ ),
+ 'expected' => 'OK!',
+ ),
+
+ Array(
+ 'template' => '-{{.}}-',
+ 'options' => Array('flags' => LightnCandy::FLAG_THIS),
+ 'data' => 'abc',
+ 'expected' => '-abc-',
+ ),
+
+ Array(
+ 'template' => '-{{this}}-',
+ 'options' => Array('flags' => LightnCandy::FLAG_THIS),
+ 'data' => 123,
+ 'expected' => '-123-',
+ ),
+
+ Array(
+ 'template' => '{{#if .}}YES{{else}}NO{{/if}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_ELSE),
+ 'data' => true,
+ 'expected' => 'YES',
+ ),
+
+ Array(
+ 'template' => '{{foo}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_RENDER_DEBUG),
+ 'data' => Array('foo' => 'OK'),
+ 'expected' => 'OK',
+ ),
+
+ Array(
+ 'template' => '{{foo}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_RENDER_DEBUG),
+ 'debug' => LCRun3::DEBUG_TAGS_ANSI,
+ 'data' => Array('foo' => 'OK'),
+ 'expected' => pack('H*', '1b5b303b33326d7b7b5b666f6f5d7d7d1b5b306d'),
+ ),
+
+ Array(
+ 'template' => '{{foo}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_RENDER_DEBUG),
+ 'debug' => LCRun3::DEBUG_TAGS_HTML,
+ 'data' => null,
+ 'expected' => '<!--MISSED((-->{{[foo]}}<!--))-->',
+ ),
+
+ Array(
+ 'template' => '{{#foo}}OK{{/foo}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_RENDER_DEBUG),
+ 'debug' => LCRun3::DEBUG_TAGS_HTML,
+ 'data' => null,
+ 'expected' => '<!--MISSED((-->{{#[foo]}}<!--))--><!--SKIPPED--><!--MISSED((-->{{/[foo]}}<!--))-->',
+ ),
+
+ Array(
+ 'template' => '{{#foo}}OK{{/foo}}',
+ 'options' => Array('flags' => LightnCandy::FLAG_RENDER_DEBUG),
+ 'debug' => LCRun3::DEBUG_TAGS_ANSI,
+ 'data' => null,
+ 'expected' => pack('H*', '1b5b303b33316d7b7b235b666f6f5d7d7d1b5b306d1b5b303b33336d534b49505045441b5b306d1b5b303b33316d7b7b2f5b666f6f5d7d7d1b5b306d'),
+ ),
+
+ Array(
+ 'template' => '{{#myif foo}}YES{{else}}NO{{/myif}}',
+ 'data' => null,
+ 'options' => Array(
+ 'hbhelpers' => Array('myif'),
+ ),
+ 'expected' => 'NO',
+ ),
+
+ Array(
+ 'template' => '{{#myif foo}}YES{{else}}NO{{/myif}}',
+ 'data' => Array('foo' => 1),
+ 'options' => Array(
+ 'hbhelpers' => Array('myif'),
+ ),
+ 'expected' => 'YES',
+ ),
+
+ Array(
+ 'template' => '{{#mylogic 0 foo bar}}YES:{{.}}{{else}}NO:{{.}}{{/mylogic}}',
+ 'data' => Array('foo' => 'FOO', 'bar' => 'BAR'),
+ 'options' => Array(
+ 'hbhelpers' => Array('mylogic'),
+ ),
+ 'expected' => 'NO:BAR',
+ ),
+
+ Array(
+ 'template' => '{{#mylogic true foo bar}}YES:{{.}}{{else}}NO:{{.}}{{/mylogic}}',
+ 'data' => Array('foo' => 'FOO', 'bar' => 'BAR'),
+ 'options' => Array(
+ 'hbhelpers' => Array('mylogic'),
+ ),
+ 'expected' => 'YES:FOO',
+ ),
+
+ Array(
+ 'template' => '{{#mywith foo}}YA: {{name}}{{/mywith}}',
+ 'data' => Array('name' => 'OK?', 'foo' => Array('name' => 'OK!')),
+ 'options' => Array(
+ 'hbhelpers' => Array('mywith'),
+ ),
+ 'expected' => 'YA: OK!',
+ ),
+
+ Array(
+ 'template' => '{{mydash \'abc\' "dev"}}',
+ 'data' => Array('a' => 'a', 'b' => 'b', 'c' => Array('c' => 'c'), 'd' => 'd', 'e' => 'e'),
+ 'options' => Array(
+ 'hbhelpers' => Array('mydash'),
+ ),
+ 'expected' => 'abc-dev',
+ ),
+
+ Array(
+ 'template' => '{{mydash \'a b c\' "d e f"}}',
+ 'data' => Array('a' => 'a', 'b' => 'b', 'c' => Array('c' => 'c'), 'd' => 'd', 'e' => 'e'),
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_ADVARNAME,
+ 'hbhelpers' => Array('mydash'),
+ ),
+ 'expected' => 'a b c-d e f',
+ ),
+
+ Array(
+ 'template' => '{{mydash "abc" (test_array 1)}}',
+ 'data' => Array('a' => 'a', 'b' => 'b', 'c' => Array('c' => 'c'), 'd' => 'd', 'e' => 'e'),
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_ADVARNAME,
+ 'hbhelpers' => Array('mydash'),
+ 'helpers' => Array('test_array'),
+ ),
+ 'expected' => 'abc-NOT_ARRAY',
+ ),
+
+ Array(
+ 'template' => '{{mydash "abc" (myjoin a b)}}',
+ 'data' => Array('a' => 'a', 'b' => 'b', 'c' => Array('c' => 'c'), 'd' => 'd', 'e' => 'e'),
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_ADVARNAME,
+ 'hbhelpers' => Array('mydash', 'myjoin'),
+ ),
+ 'expected' => 'abc-ab',
+ ),
+
+ Array(
+ 'template' => '{{#with people}}Yes , {{name}}{{else}}No, {{name}}{{/with}}',
+ 'data' => Array('people' => Array('name' => 'Peter'), 'name' => 'NoOne'),
+ 'options' => Array('flags' => LightnCandy::FLAG_WITH),
+ 'expected' => 'Yes , Peter',
+ ),
+
+ Array(
+ 'template' => '{{#with people}}Yes , {{name}}{{else}}No, {{name}}{{/with}}',
+ 'data' => Array('name' => 'NoOne'),
+ 'options' => Array('flags' => LightnCandy::FLAG_WITH),
+ 'expected' => 'No, NoOne',
+ ),
+
+ Array(
+ 'template' => <<<VAREND
+<ul>
+ <li>1. {{helper1 name}}</li>
+ <li>2. {{helper1 value}}</li>
+ <li>3. {{myClass::helper2 name}}</li>
+ <li>4. {{myClass::helper2 value}}</li>
+ <li>5. {{he name}}</li>
+ <li>6. {{he value}}</li>
+ <li>7. {{h2 name}}</li>
+ <li>8. {{h2 value}}</li>
+ <li>9. {{link name}}</li>
+ <li>10. {{link value}}</li>
+ <li>11. {{alink url text}}</li>
+ <li>12. {{{alink url text}}}</li>
+</ul>
+VAREND
+ ,
+ 'data' => Array('name' => 'John', 'value' => 10000, 'url' => 'http://yahoo.com', 'text' => 'You&Me!'),
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_ERROR_LOG | LightnCandy::FLAG_HANDLEBARSJS,
+ 'helpers' => Array(
+ 'helper1',
+ 'myClass::helper2',
+ 'he' => 'helper1',
+ 'h2' => 'myClass::helper2',
+ 'link' => function ($arg) {
+ return "<a href=\"{$arg}\">click here</a>";
+ },
+ 'alink',
+ )
+ ),
+ 'expected' => <<<VAREND
+<ul>
+ <li>1. -Array-</li>
+ <li>2. -Array-</li>
+ <li>3. =Array=</li>
+ <li>4. =Array=</li>
+ <li>5. -Array-</li>
+ <li>6. -Array-</li>
+ <li>7. =Array=</li>
+ <li>8. =Array=</li>
+ <li>9. &lt;a href=&quot;Array&quot;&gt;click here&lt;/a&gt;</li>
+ <li>10. &lt;a href=&quot;Array&quot;&gt;click here&lt;/a&gt;</li>
+ <li>11. &lt;a href=&quot;Array&quot;&gt;Array&lt;/a&gt;</li>
+ <li>12. <a href="Array">Array</a></li>
+</ul>
+VAREND
+ ),
+
+ Array(
+ 'template' => '{{test.test}} == {{test.test3}}',
+ 'data' => Array('test' => new myClass()),
+ 'options' => Array('flags' => LightnCandy::FLAG_INSTANCE),
+ 'expected' => "testMethod OK! == -- test3:Array\n(\n)\n",
+ ),
+
+ Array(
+ 'template' => '{{test.test}} == {{test.bar}}',
+ 'data' => Array('test' => new foo()),
+ 'options' => Array('flags' => LightnCandy::FLAG_INSTANCE),
+ 'expected' => ' == OK!',
+ ),
+
+ Array(
+ 'template' => '{{#each foo}}{{@key}}: {{.}},{{/each}}',
+ 'data' => Array('foo' => Array(1,'a'=>'b',5)),
+ 'expected' => ': 1,: b,: 5,',
+ ),
+
+ Array(
+ 'template' => '{{#each foo}}{{@key}}: {{.}},{{/each}}',
+ 'data' => Array('foo' => Array(1,'a'=>'b',5)),
+ 'options' => Array('flags' => LightnCandy::FLAG_SPVARS),
+ 'expected' => '0: 1,a: b,1: 5,',
+ ),
+
+ Array(
+ 'template' => '{{#each foo}}{{@key}}: {{.}},{{/each}}',
+ 'data' => Array('foo' => new twoDimensionIterator(2, 3)),
+ 'options' => Array('flags' => LightnCandy::FLAG_SPVARS),
+ 'expected' => '0x0: 0,1x0: 0,0x1: 0,1x1: 1,0x2: 0,1x2: 2,',
+ ),
+
+ Array(
+ 'template' => " {{#foo}}\n {{name}}\n{{/foo}}\n ",
+ 'data' => Array('foo' => Array(Array('name' => 'A'),Array('name' => 'd'),Array('name' => 'E'))),
+ 'options' => Array('flags' => LightnCandy::FLAG_MUSTACHESP),
+ 'expected' => " A\n d\n E\n ",
+ ),
+
+ Array(
+ 'template' => "{{bar}}\n {{#foo}}\n {{name}}\n{{/foo}}\n ",
+ 'data' => Array('bar' => 'OK', 'foo' => Array(Array('name' => 'A'),Array('name' => 'd'),Array('name' => 'E'))),
+ 'options' => Array('flags' => LightnCandy::FLAG_MUSTACHESP),
+ 'expected' => "OK\n A\n d\n E\n ",
+ ),
+
+ Array(
+ 'template' => " {{#if foo}}\nYES\n{{else}}\nNO\n{{/if}}\n",
+ 'data' => null,
+ 'options' => Array('flags' => LightnCandy::FLAG_MUSTACHESP | LightnCandy::FLAG_ELSE),
+ 'expected' => "NO\n",
+ ),
+
+ Array(
+ 'template' => " {{#each foo}}\n{{@key}}: {{.}}\n{{/each}}\nDONE",
+ 'data' => Array('foo' => Array('a' => 'A', 'b' => 'BOY!')),
+ 'options' => Array('flags' => LightnCandy::FLAG_SPVARS | LightnCandy::FLAG_MUSTACHESP),
+ 'expected' => "a: A\nb: BOY!\nDONE",
+ ),
+
+ Array(
+ 'template' => "{{>test1}}\n {{>test1}}\nDONE\n",
+ 'data' => null,
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_MUSTACHESP | LightnCandy::FLAG_MUSTACHEPAIN,
+ 'partials' => Array('test1' => "1:A\n 2:B\n 3:C\n 4:D\n5:E\n"),
+ ),
+ 'expected' => "1:A\n 2:B\n 3:C\n 4:D\n5:E\n 1:A\n 2:B\n 3:C\n 4:D\n 5:E\nDONE\n",
+ ),
+
+ Array(
+ 'template' => "{{>test1}}\n {{>test1}}\nDONE\n",
+ 'data' => null,
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_MUSTACHESP,
+ 'partials' => Array('test1' => "1:A\n 2:B\n 3:C\n 4:D\n5:E\n"),
+ ),
+ 'expected' => "1:A\n 2:B\n 3:C\n 4:D\n5:E\n1:A\n 2:B\n 3:C\n 4:D\n5:E\nDONE\n",
+ ),
+
+ Array(
+ 'template' => "{{>test1}}\n {{>test1}}\nDONE\n",
+ 'data' => null,
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_MUSTACHESP | LightnCandy::FLAG_RUNTIMEPARTIAL,
+ 'partials' => Array('test1' => "1:A\n 2:B\n 3:C\n 4:D\n5:E\n"),
+ ),
+ 'expected' => "1:A\n 2:B\n 3:C\n 4:D\n5:E\n1:A\n 2:B\n 3:C\n 4:D\n5:E\nDONE\n",
+ ),
+
+ Array(
+ 'template' => "ST:\n{{#foo}}\n {{>test1}}\n{{/foo}}\nOK\n",
+ 'data' => Array('foo' => Array(1, 2)),
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_MUSTACHESP | LightnCandy::FLAG_MUSTACHEPAIN | LightnCandy::FLAG_HANDLEBARSJS,
+ 'partials' => Array('test1' => "1:A\n 2:B({{@index}})\n"),
+ ),
+ 'expected' => "ST:\n 1:A\n 2:B(0)\n 1:A\n 2:B(1)\nOK\n",
+ ),
+
+ Array(
+ 'template' => "A\n {{#if 1}} \n\na\n{{#with 2}}\n123\n\n{{/with}}\n{{/if}} \n \n\n456",
+ 'data' => null,
+ 'options' => Array('flags' => LightnCandy::FLAG_WITH | LightnCandy::FLAG_MUSTACHESP),
+ 'expected' => "A\n\na\n123\n\n \n\n456",
+ ),
+
+ Array(
+ 'template' => "\n{{#with 1}}\n\n{{#with 1}}\nb\n\n{{/with}}\n{{/with}}\nC",
+ 'data' => null,
+ 'options' => Array('flags' => LightnCandy::FLAG_WITH | LightnCandy::FLAG_MUSTACHESP),
+ 'expected' => "\n\nb\n\nC",
+ ),
+
+ Array(
+ 'template' => ">{{helper1 \"===\"}}<",
+ 'data' => null,
+ 'options' => Array(
+ 'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+ 'hbhelpers' => Array(
+ 'helper1',
+ )
+ ),
+ 'expected' => ">-===-<",
+ ),
+
+ Array(
+ 'template' => "{{foo}}",
+ 'data' => Array('foo' => 'A&B " \''),
+ 'options' => Array('flags' => LightnCandy::FLAG_NOESCAPE),
+ 'expected' => "A&B \" '",
+ ),
+
+ Array(
+ 'template' => "{{foo}}",
+ 'data' => Array('foo' => 'A&B " \''),
+ 'options' => null,
+ 'expected' => "A&amp;B &quot; &#039;",
+ ),
+ );
+
+ return array_map(function($i) {
+ if (!isset($i['debug'])) {
+ $i['debug'] = 0;
+ }
+ return Array($i);
+ }, $issues);
+ }
+}
+
+?>
diff --git a/vendor/zordius/lightncandy/tests/test1.tmpl b/vendor/zordius/lightncandy/tests/test1.tmpl
new file mode 100644
index 00000000..190a1803
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/test1.tmpl
@@ -0,0 +1 @@
+123
diff --git a/vendor/zordius/lightncandy/tests/test2.tmpl b/vendor/zordius/lightncandy/tests/test2.tmpl
new file mode 100644
index 00000000..df980f7e
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/test2.tmpl
@@ -0,0 +1 @@
+a{{> test1}}b
diff --git a/vendor/zordius/lightncandy/tests/test3.tmpl b/vendor/zordius/lightncandy/tests/test3.tmpl
new file mode 100644
index 00000000..0b4e6bb9
--- /dev/null
+++ b/vendor/zordius/lightncandy/tests/test3.tmpl
@@ -0,0 +1 @@
+New context:{{.}}